[
  {
    "path": ".clang-format",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# https://releases.llvm.org/20.1.0/tools/clang/docs/ClangFormatStyleOptions.html\r\n\r\n# To update this .clang-format file for a new clang-format version:\r\n# 1. Update the documentation link above.\r\n# 2. Copy the output of `clang-format -dump-config --style=LLVM` into a temporary file.\r\n#    a. Comment out all of its lines.\r\n# 3. Compare that temporary file to this .clang-format file.\r\n# 4. Adjust this .clang-format file to record new and updated options.\r\n#    a. Read the new documentation to understand such changes.\r\n# 5. The goal is for the comparison from the temporary file to this .clang-format file to be pure additions (green).\r\n#    a. That is, comments here are recording the defaults, while added lines are our customized settings.\r\n\r\n---\r\n# Language:        Cpp\r\nBasedOnStyle:  LLVM\r\n# AccessModifierOffset: -2\r\nAccessModifierOffset: -4\r\n# AlignAfterOpenBracket: Align\r\nAlignAfterOpenBracket: DontAlign\r\n# AlignArrayOfStructures: None\r\n# AlignConsecutiveAssignments:\r\n#   Enabled:         false\r\n#   AcrossEmptyLines: false\r\n#   AcrossComments:  false\r\n#   AlignCompound:   false\r\n#   AlignFunctionDeclarations: false\r\n#   AlignFunctionPointers: false\r\n#   PadOperators:    true\r\nAlignConsecutiveAssignments: Consecutive\r\n# AlignConsecutiveBitFields:\r\n#   Enabled:         false\r\n#   AcrossEmptyLines: false\r\n#   AcrossComments:  false\r\n#   AlignCompound:   false\r\n#   AlignFunctionDeclarations: false\r\n#   AlignFunctionPointers: false\r\n#   PadOperators:    false\r\n# AlignConsecutiveDeclarations:\r\n#   Enabled:         false\r\n#   AcrossEmptyLines: false\r\n#   AcrossComments:  false\r\n#   AlignCompound:   false\r\n#   AlignFunctionDeclarations: true\r\n#   AlignFunctionPointers: false\r\n#   PadOperators:    false\r\n# AlignConsecutiveMacros:\r\n#   Enabled:         false\r\n#   AcrossEmptyLines: false\r\n#   AcrossComments:  false\r\n#   AlignCompound:   false\r\n#   AlignFunctionDeclarations: false\r\n#   AlignFunctionPointers: false\r\n#   PadOperators:    false\r\nAlignConsecutiveMacros: Consecutive\r\n# AlignConsecutiveShortCaseStatements:\r\n#   Enabled:         false\r\n#   AcrossEmptyLines: false\r\n#   AcrossComments:  false\r\n#   AlignCaseArrows: false\r\n#   AlignCaseColons: false\r\n# AlignConsecutiveTableGenBreakingDAGArgColons:\r\n#   Enabled:         false\r\n#   AcrossEmptyLines: false\r\n#   AcrossComments:  false\r\n#   AlignCompound:   false\r\n#   AlignFunctionDeclarations: false\r\n#   AlignFunctionPointers: false\r\n#   PadOperators:    false\r\n# AlignConsecutiveTableGenCondOperatorColons:\r\n#   Enabled:         false\r\n#   AcrossEmptyLines: false\r\n#   AcrossComments:  false\r\n#   AlignCompound:   false\r\n#   AlignFunctionDeclarations: false\r\n#   AlignFunctionPointers: false\r\n#   PadOperators:    false\r\n# AlignConsecutiveTableGenDefinitionColons:\r\n#   Enabled:         false\r\n#   AcrossEmptyLines: false\r\n#   AcrossComments:  false\r\n#   AlignCompound:   false\r\n#   AlignFunctionDeclarations: false\r\n#   AlignFunctionPointers: false\r\n#   PadOperators:    false\r\n# AlignEscapedNewlines: Right\r\nAlignEscapedNewlines: Left\r\n# AlignOperands:   Align\r\nAlignOperands: AlignAfterOperator\r\n# AlignTrailingComments:\r\n#   Kind:            Always\r\n#   OverEmptyLines:  0\r\nAlignTrailingComments:\r\n  Kind:            Never\r\n# AllowAllArgumentsOnNextLine: true\r\n# AllowAllParametersOfDeclarationOnNextLine: true\r\n# AllowBreakBeforeNoexceptSpecifier: Never\r\nAllowBreakBeforeNoexceptSpecifier: OnlyWithParen\r\n# AllowShortBlocksOnASingleLine: Never\r\n# AllowShortCaseExpressionOnASingleLine: true\r\n# AllowShortCaseLabelsOnASingleLine: false\r\n# AllowShortCompoundRequirementOnASingleLine: true\r\n# AllowShortEnumsOnASingleLine: true\r\n# AllowShortFunctionsOnASingleLine: All\r\nAllowShortFunctionsOnASingleLine: Empty\r\n# AllowShortIfStatementsOnASingleLine: Never\r\n# AllowShortLambdasOnASingleLine: All\r\n# AllowShortLoopsOnASingleLine: false\r\n# AllowShortNamespacesOnASingleLine: false\r\n# AlwaysBreakAfterDefinitionReturnType: None\r\n# AlwaysBreakBeforeMultilineStrings: false\r\n# AttributeMacros:\r\n#   - __capability\r\n# BinPackArguments: true\r\n# BinPackParameters: BinPack\r\n# BitFieldColonSpacing: Both\r\n# BraceWrapping:\r\n#   AfterCaseLabel:  false\r\n#   AfterClass:      false\r\n#   AfterControlStatement: Never\r\n#   AfterEnum:       false\r\n#   AfterExternBlock: false\r\n#   AfterFunction:   false\r\n#   AfterNamespace:  false\r\n#   AfterObjCDeclaration: false\r\n#   AfterStruct:     false\r\n#   AfterUnion:      false\r\n#   BeforeCatch:     false\r\n#   BeforeElse:      false\r\n#   BeforeLambdaBody: false\r\n#   BeforeWhile:     false\r\n#   IndentBraces:    false\r\n#   SplitEmptyFunction: true\r\n#   SplitEmptyRecord: true\r\n#   SplitEmptyNamespace: true\r\n# BreakAdjacentStringLiterals: true\r\n# BreakAfterAttributes: Leave\r\nBreakAfterAttributes: Never\r\n# BreakAfterJavaFieldAnnotations: false\r\n# BreakAfterReturnType: None\r\n# BreakArrays:     true\r\n# BreakBeforeBinaryOperators: None\r\nBreakBeforeBinaryOperators: NonAssignment\r\n# BreakBeforeConceptDeclarations: Always\r\n# BreakBeforeBraces: Attach\r\n# BreakBeforeInlineASMColon: OnlyMultiline\r\n# BreakBeforeTernaryOperators: true\r\n# BreakBinaryOperations: Never\r\n# BreakConstructorInitializers: BeforeColon\r\n# BreakFunctionDefinitionParameters: false\r\n# BreakInheritanceList: BeforeColon\r\n# BreakStringLiterals: true\r\n# BreakTemplateDeclarations: MultiLine\r\nBreakTemplateDeclarations: Yes\r\n# ColumnLimit:     80\r\nColumnLimit:     120\r\n# CommentPragmas:  '^ IWYU pragma:'\r\n# CompactNamespaces: false\r\n# ConstructorInitializerIndentWidth: 4\r\n# ContinuationIndentWidth: 4\r\n# Cpp11BracedListStyle: true\r\n# DerivePointerAlignment: false\r\n# DisableFormat:   false\r\n# EmptyLineAfterAccessModifier: Never\r\n# EmptyLineBeforeAccessModifier: LogicalBlock\r\n# ExperimentalAutoDetectBinPacking: false\r\n# FixNamespaceComments: true\r\n# ForEachMacros:\r\n#   - foreach\r\n#   - Q_FOREACH\r\n#   - BOOST_FOREACH\r\n# IfMacros:\r\n#   - KJ_IF_MAYBE\r\n# IncludeBlocks:   Preserve\r\nIncludeBlocks:   Regroup\r\n# IncludeCategories:\r\n#   - Regex:           '^\"(llvm|llvm-c|clang|clang-c)/'\r\n#     Priority:        2\r\n#     SortPriority:    0\r\n#     CaseSensitive:   false\r\n#   - Regex:           '^(<|\"(gtest|gmock|isl|json)/)'\r\n#     Priority:        3\r\n#     SortPriority:    0\r\n#     CaseSensitive:   false\r\n#   - Regex:           '.*'\r\n#     Priority:        1\r\n#     SortPriority:    0\r\n#     CaseSensitive:   false\r\nIncludeCategories:\r\n  - Regex:           '^<(yvals|yvals_core)\\.h>$'\r\n    Priority:        10\r\n  - Regex:           '^<__msvc_.*\\.hpp>$'\r\n    Priority:        20\r\n  - Regex:           '^<initguid\\.h>$' # <initguid.h> should be included before any header that includes <guiddef.h>\r\n    Priority:        30\r\n    SortPriority:    30\r\n  - Regex:           '^<(DbgEng|DbgHelp|Shlwapi|Windows)\\.h>$'\r\n    Priority:        30\r\n    SortPriority:    31\r\n  - Regex:           '^<winioctl\\.h>$'\r\n    Priority:        30\r\n    SortPriority:    32\r\n  - Regex:           '\\.hpp[>\"]$'\r\n    Priority:        40\r\n  - Regex:           '.*'\r\n    Priority:        20\r\n# IncludeIsMainRegex: '(Test)?$'\r\n# IncludeIsMainSourceRegex: ''\r\n# IndentAccessModifiers: false\r\n# IndentCaseBlocks: false\r\nIndentCaseBlocks: true\r\n# IndentCaseLabels: false\r\n# IndentExportBlock: true\r\n# IndentExternBlock: AfterExternBlock\r\n# IndentGotoLabels: true\r\n# IndentPPDirectives: None\r\n# IndentRequiresClause: true\r\n# IndentWidth:     2\r\nIndentWidth:     4\r\n# IndentWrappedFunctionNames: false\r\nIndentWrappedFunctionNames: true\r\n# InsertBraces:    false\r\nInsertBraces:    true\r\n# InsertNewlineAtEOF: false\r\nInsertNewlineAtEOF: true\r\n# InsertTrailingCommas: None\r\n# IntegerLiteralSeparator:\r\n#   Binary:          0\r\n#   BinaryMinDigits: 0\r\n#   Decimal:         0\r\n#   DecimalMinDigits: 0\r\n#   Hex:             0\r\n#   HexMinDigits:    0\r\n# JavaScriptQuotes: Leave\r\n# JavaScriptWrapImports: true\r\n# KeepEmptyLines:\r\n#   AtEndOfFile:     false\r\n#   AtStartOfBlock:  true\r\n#   AtStartOfFile:   true\r\nKeepEmptyLines:\r\n  AtStartOfFile:   false\r\n# KeepFormFeed:    false\r\n# LambdaBodyIndentation: Signature\r\n# LineEnding:      DeriveLF\r\nLineEnding:      CRLF\r\n# NOTE: MacroBlockBegin/MacroBlockEnd don't work with _CATCH_ALL.\r\n# MacroBlockBegin: ''\r\n# MacroBlockEnd:   ''\r\n# MainIncludeChar: Quote\r\n# MaxEmptyLinesToKeep: 1\r\nMaxEmptyLinesToKeep: 2\r\n# NamespaceIndentation: None\r\nNamespaceIndentation: All\r\n# ObjCBinPackProtocolList: Auto\r\n# ObjCBlockIndentWidth: 2\r\n# ObjCBreakBeforeNestedBlockParam: true\r\n# ObjCSpaceAfterProperty: false\r\n# ObjCSpaceBeforeProtocolList: true\r\n# PackConstructorInitializers: BinPack\r\n# PenaltyBreakAssignment: 2\r\n# PenaltyBreakBeforeFirstCallParameter: 19\r\n# PenaltyBreakBeforeMemberAccess: 150\r\n# PenaltyBreakComment: 300\r\n# PenaltyBreakFirstLessLess: 120\r\n# PenaltyBreakOpenParenthesis: 0\r\n# PenaltyBreakScopeResolution: 500\r\n# PenaltyBreakString: 1000\r\n# PenaltyBreakTemplateDeclaration: 10\r\n# PenaltyExcessCharacter: 1000000\r\n# PenaltyIndentedWhitespace: 0\r\n# PenaltyReturnTypeOnItsOwnLine: 60\r\n# PointerAlignment: Right\r\nPointerAlignment: Left\r\n# PPIndentWidth:   -1\r\n# QualifierAlignment: Leave\r\n# ReferenceAlignment: Pointer\r\n# ReflowComments:  Always\r\n# RemoveBracesLLVM: false\r\n# RemoveEmptyLinesInUnwrappedLines: false\r\n# RemoveParentheses: Leave\r\n# RemoveSemicolon: false\r\nRemoveSemicolon: true\r\n# RequiresClausePosition: OwnLine\r\n# RequiresExpressionIndentation: OuterScope\r\n# SeparateDefinitionBlocks: Leave\r\n# ShortNamespaceLines: 1\r\n# SkipMacroDefinitionBody: false\r\n# SortIncludes:    CaseSensitive\r\n# SortJavaStaticImport: Before\r\n# SortUsingDeclarations: LexicographicNumeric\r\n# SpaceAfterCStyleCast: false\r\nSpaceAfterCStyleCast: true\r\n# SpaceAfterLogicalNot: false\r\n# SpaceAfterTemplateKeyword: true\r\n# SpaceAroundPointerQualifiers: Default\r\n# SpaceBeforeAssignmentOperators: true\r\n# SpaceBeforeCaseColon: false\r\n# SpaceBeforeCpp11BracedList: false\r\n# SpaceBeforeCtorInitializerColon: true\r\n# SpaceBeforeInheritanceColon: true\r\n# SpaceBeforeJsonColon: false\r\n# SpaceBeforeParens: ControlStatements\r\n# SpaceBeforeParensOptions:\r\n#   AfterControlStatements: true\r\n#   AfterForeachMacros: true\r\n#   AfterFunctionDefinitionName: false\r\n#   AfterFunctionDeclarationName: false\r\n#   AfterIfMacros:   true\r\n#   AfterOverloadedOperator: false\r\n#   AfterPlacementOperator: true\r\n#   AfterRequiresInClause: false\r\n#   AfterRequiresInExpression: false\r\n#   BeforeNonEmptyParentheses: false\r\nSpaceBeforeParens: Custom\r\nSpaceBeforeParensOptions:\r\n  AfterRequiresInClause: true\r\n# SpaceBeforeRangeBasedForLoopColon: true\r\n# SpaceBeforeSquareBrackets: false\r\n# SpaceInEmptyBlock: false\r\n# SpacesBeforeTrailingComments: 1\r\n# SpacesInAngles:  Never\r\n# SpacesInContainerLiterals: true\r\n# SpacesInLineCommentPrefix:\r\n#   Minimum:         1\r\n#   Maximum:         -1\r\n# SpacesInParens:  Never\r\n# SpacesInParensOptions:\r\n#   ExceptDoubleParentheses: false\r\n#   InCStyleCasts:   false\r\n#   InConditionalStatements: false\r\n#   InEmptyParentheses: false\r\n#   Other:           false\r\n# SpacesInSquareBrackets: false\r\n# Standard:        Latest\r\n# StatementAttributeLikeMacros:\r\n#   - Q_EMIT\r\n# StatementMacros:\r\n#   - Q_UNUSED\r\n#   - QT_REQUIRE_VERSION\r\n# NOTE: _STD_BEGIN, _STD_END, etc. aren't macros for complete statements, but telling\r\n# clang-format that they are produces the behavior that we want (with no block indentation).\r\nStatementMacros:\r\n  - _EXTERN_CXX_WORKAROUND\r\n  - _END_EXTERN_CXX_WORKAROUND\r\n  - _STD_BEGIN\r\n  - _STD_END\r\n  - _STDEXT_BEGIN\r\n  - _STDEXT_END\r\n  - _FMT_P2286_BEGIN\r\n  - _FMT_P2286_END\r\n  - _EXTERN_C_UNLESS_PURE\r\n  - _END_EXTERN_C_UNLESS_PURE\r\n# TableGenBreakInsideDAGArg: DontBreak\r\n# TabWidth:        8\r\n# UseTab:          Never\r\n# VerilogBreakBetweenInstancePorts: true\r\n# WhitespaceSensitiveMacros:\r\n#   - BOOST_PP_STRINGIZE\r\n#   - CF_SWIFT_NAME\r\n#   - NS_SWIFT_NAME\r\n#   - PP_STRINGIZE\r\n#   - STRINGIZE\r\n# WrapNamespaceBodyWithEmptyLines: Leave\r\n...\r\n"
  },
  {
    "path": ".gitattributes",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# Disable CRLF-mapping for all files.\r\n* -text\r\n\r\n# Ensure GitHub detects our C++ code as C++ code.\r\n/stl/inc/** linguist-language=C++\r\n/stl/modules/** linguist-language=C++\r\n/stl/src/** linguist-language=C++\r\n*.h linguist-language=C++\r\n\r\n# Ensure GitHub detects lit.cfg and lit.local.cfg as Python instead of HAProxy.\r\n*.cfg linguist-language=Python\r\n\r\n# Ensure GitHub detects our Perl legacy test harness code as Perl code instead of Raku.\r\n*.pl linguist-language=Perl\r\n"
  },
  {
    "path": ".github/CODEOWNERS",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n* @microsoft/vclibs\r\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug-report.md",
    "content": "---\r\nname: Bug Report\r\nabout: Report a bug in the STL\r\ntitle: \"`<header>`: Problem\"\r\nlabels: ''\r\nassignees: ''\r\n\r\n---\r\n\r\n# Describe the bug\r\nA clear and concise description of what the bug is. Please check that you've\r\nread the guidelines for submitting STL bug reports in `README.md`. If you are\r\nhaving problems with any component that is not the STL, instructions to get\r\nto the right place are there.\r\n\r\nEven if your project is using an older version of the MSVC Build Tools, please\r\ncheck the Latest production release (or better yet, the Preview release) before\r\nreporting bugs. This will save time by avoiding reports of already-fixed bugs.\r\n\r\n# Command-line test case\r\n```\r\nC:\\Temp>type repro.cpp\r\n#include <iostream>\r\n\r\nint main() {\r\n    // Replace this program with one demonstrating your actual bug report,\r\n    // along with the following compilation command. Please leave compiler\r\n    // version banners in the output (don't use /nologo), and include output\r\n    // of your test program, if any.\r\n    std::cout << \"test failure\\n\";\r\n}\r\n\r\nC:\\Temp>cl /EHsc /W4 /WX /std:c++latest .\\repro.cpp\r\nMicrosoft (R) C/C++ Optimizing Compiler Version 19.36.32522 for x64\r\nCopyright (C) Microsoft Corporation.  All rights reserved.\r\n\r\n/std:c++latest is provided as a preview of language features from the latest C++\r\nworking draft, and we're eager to hear about bugs and suggestions for improvements.\r\nHowever, note that these features are provided as-is without support, and subject\r\nto changes or removal as the working draft evolves. See\r\nhttps://go.microsoft.com/fwlink/?linkid=2045807 for details.\r\n\r\nrepro.cpp\r\nMicrosoft (R) Incremental Linker Version 14.36.32522.0\r\nCopyright (C) Microsoft Corporation.  All rights reserved.\r\n\r\n/out:repro.exe\r\nrepro.obj\r\n\r\nC:\\Temp>.\\repro.exe\r\ntest failure\r\n```\r\n\r\n# Expected behavior\r\nA clear and concise description of what you expected to happen.\r\nAlternatively, include `static_assert` or `assert` lines in your\r\ntest case above whose failure clearly indicates the problem.\r\n\r\n# STL version\r\n* Option 1: MSVC Compiler version\r\n  + Example:\r\n    ```\r\n    C:\\Temp>cl.exe\r\n    Microsoft (R) C/C++ Optimizing Compiler Version 19.50.35503 for x64\r\n    Copyright (C) Microsoft Corporation.  All rights reserved.\r\n\r\n    usage: cl [ option... ] filename... [ /link linkoption... ]\r\n    ```\r\n* Option 2: `_MSVC_STL_UPDATE` value\r\n  + Example:\r\n    ```\r\n    C:\\Temp>type meow.cpp\r\n    #include <iostream>\r\n    int main() {\r\n        std::cout << _MSVC_STL_UPDATE << \"\\n\";\r\n    }\r\n\r\n    C:\\Temp>cl /EHsc /nologo /W4 meow.cpp && meow\r\n    meow.cpp\r\n    202507\r\n    ```\r\n* Option 3: git commit hash\r\n  + Example:\r\n    ```\r\n    https://github.com/microsoft/STL/commit/219514876ea86491de191ceaa88632616bbc0f19\r\n    ```\r\n\r\n# Additional context\r\nAdd any other context about the problem here.\r\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question.md",
    "content": "---\r\nname: Question\r\nabout: Ask a question about this STL implementation\r\ntitle: \"\"\r\nlabels: question\r\nassignees: ''\r\n\r\n---\r\n\r\nInstructions\r\n============\r\nHere, you can ask a question about this STL implementation, and a maintainer\r\nwill answer. Please read the examples below, then delete all of this text and\r\nreplace it with your question. If you aren't sure whether a question is\r\non-topic, just go ahead and ask it! :-)\r\n\r\nOn-Topic Examples\r\n-----------------\r\n* What is this code in the STL doing? You can link to the relevant code:\r\nhttps://help.github.com/en/github/managing-your-work-on-github/creating-a-permanent-link-to-a-code-snippet\r\n* What are the preferred conventions for writing something?\r\n* What are the maintainers planning to do in the future?\r\n* Would the maintainers be interested in specific enhancements?\r\n\r\nOff-Topic Examples\r\n------------------\r\n* Questions about non-STL components, such as the compiler, the CRT,\r\nthe Windows API, the Visual Studio IDE, etc.\r\n* Questions about how to use the STL or C++ in general. For such questions,\r\nconsider https://stackoverflow.com or https://www.reddit.com/r/cpp_questions/ .\r\n* Questions about whether you've encountered a bug in the STL. Instead of this\r\nQuestion template, please use the Bug Report template, because we'll need\r\na command-line test case and the other information requested there.\r\n"
  },
  {
    "path": ".github/pull_request_template.md",
    "content": "<!-- Before submitting a pull request, please ensure that:\r\n\r\n* Any AI-generated code has been clearly disclosed in your PR description.\r\n  We strongly discourage AI-generated changes to product code because the STL\r\n  is a highly unusual codebase with complex correctness and performance\r\n  requirements imposed by the Standard, and highly unusual code patterns that\r\n  don't look like typical codebases. Our intensive code review process\r\n  (to avoid bugs) is intentionally a bottleneck, so we ask that you be\r\n  considerate of the time and effort that we'll need to spend, by starting\r\n  with changes that you fully understand. Test code has weaker requirements,\r\n  so AI-generated changes for tests can be acceptable if properly disclosed.\r\n\r\n* Your PR description explains your intent behind the changes.\r\n  We discourage AI-generated PR descriptions because we can read the changes,\r\n  and we have access to the same AI tools that you have, so we can get\r\n  an AI-generated summary if we want.\r\n\r\n* Identifiers in product code changes are properly `_Ugly` as per\r\n  https://eel.is/c++draft/lex.name#3.1 or there are no product code changes.\r\n\r\n* These changes introduce no known ABI breaks (adding members, renaming\r\n  members, adding virtual functions, changing whether a type is an aggregate\r\n  or trivially copyable, etc.).\r\n\r\n* Your changes are written from scratch using only this repository, the C++\r\n  Working Draft (including any cited standards), other WG21 papers (excluding\r\n  reference implementations outside of proposed standard wording), and LWG\r\n  issues as reference material. If your changes are derived from a project\r\n  that's already listed in NOTICE.txt, that's fine, but please mention it.\r\n  If your changes are derived from any other project, you *must* mention it\r\n  here, so we can determine whether the license is compatible and what else\r\n  needs to be done.\r\n-->\r\n"
  },
  {
    "path": ".github/workflows/update-status-chart.yml",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nname: Update Status Chart\r\non:\r\n  schedule:\r\n    - cron: \"0 7 * * *\"\r\n  workflow_dispatch:\r\npermissions:\r\n  contents: write\r\njobs:\r\n  build:\r\n    if: ${{ github.repository == 'microsoft/STL' }}\r\n    runs-on: ubuntu-latest\r\n    steps:\r\n      - name: Checkout gh-pages\r\n        uses: actions/checkout@v6\r\n        with:\r\n          ref: gh-pages\r\n      - name: Setup Node.js\r\n        uses: actions/setup-node@v6\r\n        with:\r\n          node-version: \">=25.2.1\"\r\n      - name: Install Packages\r\n        run: |\r\n          npm ci\r\n      - name: Compile And Run gather_stats.mts\r\n        run: |\r\n          SECRET_GITHUB_PERSONAL_ACCESS_TOKEN=\"${{ github.token }}\" npm run gather\r\n      - name: Compile And Bundle status_chart.mts\r\n        run: |\r\n          npm run make\r\n      - name: Commit Changes\r\n        run: |\r\n          git config user.name \"github-actions[bot]\"\r\n          git config user.email \"41898282+github-actions[bot]@users.noreply.github.com\"\r\n          git add src/daily_table.mts src/monthly_table.mts built/status_chart.mjs\r\n          git diff-index --quiet HEAD || git commit -m \"Automated update.\"\r\n          git push origin gh-pages\r\n"
  },
  {
    "path": ".gitignore",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n__pycache__/\r\n.vs/\r\n.vscode/\r\n/build/\r\n/out/\r\n/tools/out/\r\n/CMakeLists.txt.user\r\n*.log\r\n"
  },
  {
    "path": ".gitmodules",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n[submodule \"llvm-project\"]\r\n\tpath = llvm-project\r\n\turl = https://github.com/llvm/llvm-project.git\r\n[submodule \"boost-math\"]\r\n\tpath = boost-math\r\n\turl = https://github.com/boostorg/math.git\r\n[submodule \"benchmarks/google-benchmark\"]\r\n\tpath = benchmarks/google-benchmark\r\n\turl = https://github.com/google/benchmark.git\r\n"
  },
  {
    "path": ".mailmap",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This file maps author and committer email addresses to canonical names and email\r\n# addresses for display in the output of `git log` and `git blame`.\r\n# Format:\r\n# Canonical Name <canonical@example.com> <commit@example.com>\r\n\r\n\r\nAmy Wishnousky <amyw@microsoft.com> <stwish@microsoft.com>\r\nAnju del Moral Gonzalez <delMoralGonzalez.Anju@microsoft.com> <judelmor@microsoft.com>\r\n"
  },
  {
    "path": "CMakeLists.txt",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\ncmake_minimum_required(VERSION 4.2.3)\r\n\r\nset(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)\r\nproject(msvc_standard_libraries LANGUAGES CXX)\r\n\r\nif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS \"19.51.36122\")\r\n    message(FATAL_ERROR \"The STL must be built with MSVC Compiler 19.51.36122 or later. Follow the README instructions.\")\r\nendif()\r\n\r\ninclude(CheckCXXSourceCompiles)\r\ncheck_cxx_source_compiles([=[\r\n#include <sdkddkver.h>\r\nstatic_assert(WDK_NTDDI_VERSION >= NTDDI_WIN11_GE, \"Inspecting WDK_NTDDI_VERSION, the Windows SDK version.\");\r\nint main() {}\r\n]=] WINDOWS_SDK_VERSION_CHECK)\r\n\r\nif(NOT WINDOWS_SDK_VERSION_CHECK)\r\n    message(FATAL_ERROR \"The STL must be built with the Windows 11 SDK (10.0.26100) or later. Follow the README instructions.\")\r\nendif()\r\n\r\nif(NOT DEFINED VCLIBS_TARGET_ARCHITECTURE)\r\n    set(VCLIBS_TARGET_ARCHITECTURE \"${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}\")\r\nendif()\r\n\r\nstring(TOLOWER \"${VCLIBS_TARGET_ARCHITECTURE}\" VCLIBS_TARGET_ARCHITECTURE)\r\n\r\nif(VCLIBS_TARGET_ARCHITECTURE MATCHES \"^(x86|x64)$\")\r\n    enable_language(ASM_MASM)\r\nendif()\r\n\r\n# add the tools subdirectory _before_ we change all the flags\r\nadd_subdirectory(tools EXCLUDE_FROM_ALL)\r\n\r\n# these allow the targets to show up in the top-level\r\n# (as opposed to under the tools subdirectory)\r\nif(TARGET run-format)\r\n    add_custom_target(format)\r\n    add_dependencies(format run-format)\r\nendif()\r\n\r\nif(TARGET run-validate)\r\n    add_custom_target(validate)\r\n    add_dependencies(validate run-validate)\r\nendif()\r\n\r\noption(CONFIGURE_TESTING \"Enable testing\" ON)\r\nset(VCLIBS_SUFFIX \"_oss\" CACHE STRING \"suffix for built DLL names to avoid conflicts with distributed DLLs\")\r\n\r\noption(STL_USE_ANALYZE \"Pass the /analyze flag to MSVC\" OFF)\r\noption(STL_ASAN_BUILD \"Build the STL with ASan enabled\" OFF)\r\n\r\nset(VCLIBS_EXPLICIT_MACHINE \"\")\r\n\r\nif(VCLIBS_TARGET_ARCHITECTURE STREQUAL \"x86\")\r\n    set(VCLIBS_TARGET_ARCHITECTURE \"x86\")\r\n    set(VCLIBS_I386_OR_AMD64 \"i386\")\r\n    set(VCLIBS_X86_OR_X64 \"x86\")\r\nelseif(VCLIBS_TARGET_ARCHITECTURE STREQUAL \"x64\")\r\n    set(VCLIBS_TARGET_ARCHITECTURE \"x64\")\r\n    set(VCLIBS_I386_OR_AMD64 \"amd64\")\r\n    set(VCLIBS_X86_OR_X64 \"x64\")\r\nelseif(VCLIBS_TARGET_ARCHITECTURE STREQUAL \"arm64\")\r\n    set(VCLIBS_TARGET_ARCHITECTURE \"arm64\")\r\n    set(VCLIBS_I386_OR_AMD64 \"arm64\")\r\n    set(VCLIBS_X86_OR_X64 \"arm64\")\r\nelseif(VCLIBS_TARGET_ARCHITECTURE STREQUAL \"arm64ec\")\r\n    set(VCLIBS_TARGET_ARCHITECTURE \"arm64ec\")\r\n    set(VCLIBS_I386_OR_AMD64 \"arm64ec\")\r\n    set(VCLIBS_X86_OR_X64 \"arm64\") # Yes, really: `%VCToolsInstallDir%lib\\arm64ec` only contains the Link Options\r\n    add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/arm64EC>)\r\n    set(VCLIBS_EXPLICIT_MACHINE \"/machine:arm64ec\")\r\nelse()\r\n    message(FATAL_ERROR \"Could not determine target architecture: VCLIBS_TARGET_ARCHITECTURE: ${VCLIBS_TARGET_ARCHITECTURE}\")\r\nendif()\r\n\r\nget_filename_component(TOOLSET_BINARIES_DIR \"${CMAKE_CXX_COMPILER}\" DIRECTORY) # Example: $\\VC\\Tools\\MSVC\\14.23.27931\\bin\\Hostx86\\x86\r\nget_filename_component(TOOLSET_ROOT_DIR \"${TOOLSET_BINARIES_DIR}\" DIRECTORY) # $\\VC\\Tools\\MSVC\\14.23.27931\\bin\\Hostx86\r\nget_filename_component(TOOLSET_ROOT_DIR \"${TOOLSET_ROOT_DIR}\" DIRECTORY) # $\\VC\\Tools\\MSVC\\14.23.27931\\bin\r\nget_filename_component(TOOLSET_ROOT_DIR \"${TOOLSET_ROOT_DIR}\" DIRECTORY) # $\\VC\\Tools\\MSVC\\14.23.27931\r\nset(TOOLSET_LIB \"${TOOLSET_ROOT_DIR}/lib/${VCLIBS_X86_OR_X64}\")\r\nset(STL_ARCHIVE_OUTPUT_DIRECTORY \"${PROJECT_BINARY_DIR}/out/lib/${VCLIBS_I386_OR_AMD64}\")\r\nset(STL_LIBRARY_OUTPUT_DIRECTORY \"${PROJECT_BINARY_DIR}/out/lib/${VCLIBS_I386_OR_AMD64}\")\r\nset(STL_RUNTIME_OUTPUT_DIRECTORY \"${PROJECT_BINARY_DIR}/out/bin/${VCLIBS_I386_OR_AMD64}\")\r\n\r\n# Note that we set _WIN32_WINNT to a high level to make declarations available.\r\nadd_compile_definitions(\r\n    _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH WIN32_LEAN_AND_MEAN STRICT _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS\r\n    _WIN32_WINNT=0x0A00 NTDDI_VERSION=NTDDI_WIN11_GE)\r\n\r\nif(STL_USE_ANALYZE)\r\n    # TRANSITION, Windows SDK 10.0.26100 emits\r\n    # \"warning C6553: The annotation for function 'LCMapStringEx' on _Param_(9) does not apply to a value type.\"\r\n    # Reported as OS-40109504 \"Windows SDK: incorrect SAL annotations on functions the STL uses\".\r\n    add_compile_options(\"$<$<COMPILE_LANGUAGE:CXX>:/analyze:autolog-;/wd6553>\")\r\n\r\n    if(VCLIBS_TARGET_ARCHITECTURE STREQUAL \"arm64ec\")\r\n        # TRANSITION, Windows SDK 10.0.26100 emits\r\n        # \"warning C28301: No annotations for first declaration of 'meow'\"\r\n        # for various intrinsics when building for ARM64EC.\r\n        add_compile_options(\"$<$<COMPILE_LANGUAGE:CXX>:/wd28301>\")\r\n    endif()\r\nendif()\r\n\r\nset(VCLIBS_DEBUG_OPTIONS \"$<$<COMPILE_LANGUAGE:CXX>:/Od>\")\r\nset(VCLIBS_RELEASE_OPTIONS \"$<$<COMPILE_LANGUAGE:CXX>:/O2>\")\r\n\r\nif(CONFIGURE_TESTING)\r\n    add_subdirectory(tests)\r\nendif()\r\n\r\nif(STL_ASAN_BUILD)\r\n    message(STATUS \"Building with ASan enabled\")\r\n    add_compile_options(\"$<$<COMPILE_LANGUAGE:CXX>:-fsanitize=address;-fno-sanitize-address-vcasan-lib>\")\r\nendif()\r\n\r\nadd_subdirectory(boost-math)\r\nadd_subdirectory(stl)\r\n"
  },
  {
    "path": "CMakePresets.json",
    "content": "{\r\n  \"version\": 5,\r\n  \"cmakeMinimumRequired\": {\r\n    \"major\": 3,\r\n    \"minor\": 26,\r\n    \"patch\": 0\r\n  },\r\n  \"configurePresets\": [\r\n    {\r\n      \"name\": \"base\",\r\n      \"hidden\": true,\r\n      \"generator\": \"Ninja\",\r\n      \"binaryDir\": \"${sourceDir}/out/${presetName}\",\r\n      \"toolset\": {\r\n        \"strategy\": \"external\",\r\n        \"value\": \"version=preview\"\r\n      }\r\n    },\r\n    {\r\n      \"name\": \"x64\",\r\n      \"inherits\": \"base\",\r\n      \"description\": \"x64 Ninja Config\",\r\n      \"architecture\": {\r\n        \"strategy\": \"external\",\r\n        \"value\": \"x64\"\r\n      },\r\n      \"condition\": {\r\n        \"type\": \"inList\",\r\n        \"string\": \"$env{VSCMD_ARG_TGT_ARCH}\",\r\n        \"list\": [\r\n          \"x64\",\r\n          \"\"\r\n        ]\r\n      }\r\n    },\r\n    {\r\n      \"name\": \"x86\",\r\n      \"inherits\": \"base\",\r\n      \"description\": \"x86 Ninja Config\",\r\n      \"architecture\": {\r\n        \"strategy\": \"external\",\r\n        \"value\": \"x86\"\r\n      },\r\n      \"condition\": {\r\n        \"type\": \"inList\",\r\n        \"string\": \"$env{VSCMD_ARG_TGT_ARCH}\",\r\n        \"list\": [\r\n          \"x86\",\r\n          \"\"\r\n        ]\r\n      }\r\n    },\r\n    {\r\n      \"name\": \"ARM64\",\r\n      \"inherits\": \"base\",\r\n      \"description\": \"ARM64 Ninja Config\",\r\n      \"architecture\": {\r\n        \"strategy\": \"external\",\r\n        \"value\": \"ARM64\"\r\n      },\r\n      \"condition\": {\r\n        \"type\": \"inList\",\r\n        \"string\": \"$env{VSCMD_ARG_TGT_ARCH}\",\r\n        \"list\": [\r\n          \"arm64\",\r\n          \"\"\r\n        ]\r\n      },\r\n      \"cacheVariables\": {\r\n        \"TESTS_BUILD_ONLY\": true\r\n      }\r\n    },\r\n    {\r\n      \"name\": \"ARM64EC\",\r\n      \"inherits\": \"base\",\r\n      \"description\": \"ARM64EC Ninja Config\",\r\n      \"architecture\": {\r\n        \"strategy\": \"external\",\r\n        \"value\": \"ARM64EC\"\r\n      },\r\n      \"condition\": {\r\n        \"type\": \"inList\",\r\n        \"string\": \"$env{VSCMD_ARG_TGT_ARCH}\",\r\n        \"list\": [\r\n          \"arm64\",\r\n          \"\"\r\n        ]\r\n      },\r\n      \"cacheVariables\": {\r\n        \"TESTS_BUILD_ONLY\": true,\r\n        \"VCLIBS_TARGET_ARCHITECTURE\": \"ARM64EC\"\r\n      }\r\n    }\r\n  ],\r\n  \"buildPresets\": [\r\n    {\r\n      \"name\": \"x64\",\r\n      \"configurePreset\": \"x64\",\r\n      \"description\": \"Build x64 STL\"\r\n    },\r\n    {\r\n      \"name\": \"x86\",\r\n      \"configurePreset\": \"x86\",\r\n      \"description\": \"Build x86 STL\"\r\n    },\r\n    {\r\n      \"name\": \"ARM64\",\r\n      \"configurePreset\": \"ARM64\",\r\n      \"description\": \"Build ARM64 STL\"\r\n    },\r\n    {\r\n      \"name\": \"ARM64EC\",\r\n      \"configurePreset\": \"ARM64EC\",\r\n      \"description\": \"Build ARM64EC STL\"\r\n    }\r\n  ]\r\n}\r\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Microsoft Open Source Code of Conduct\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).\n\nResources:\n\n- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)\n- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)\n- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns\n- Employees can reach out at [aka.ms/opensource/moderation-support](https://aka.ms/opensource/moderation-support)\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\r\n\r\nThis project welcomes contributions and suggestions. Most contributions require you to agree to a\r\nContributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us\r\nthe rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.\r\n\r\nWhen you submit a pull request, a CLA bot will automatically determine whether you need to provide\r\na CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions\r\nprovided by the bot. You will only need to do this once across all repos using our CLA.\r\n\r\n## Types of Contributions\r\n\r\n### Submitting a Pull Request\r\n\r\nThe STL repo has many open issues that track work which needs to be completed.\r\nIf you're unsure of where to start, you may want to:\r\n\r\n* look for pinned issues, or\r\n* check issues under the labels [`good first issue`][label:\"good first issue\"],\r\n  [`high priority`][label:\"high priority\"], or [`help wanted`][label:\"help wanted\"].\r\n\r\n### Reviewing a Pull Request\r\n\r\nWe love code reviews from contributors! Reviews from other contributors can often accelerate the reviewing process\r\nby helping a PR reach a more finished state before maintainers review the changes. As a result, such a PR may require\r\nfewer maintainer review iterations before reaching a \"Ready to Merge\" state.\r\n\r\nTo gain insight into our Code Review process, you can check out:\r\n\r\n* pull requests which are [undergoing review][review:changes-requested],\r\n* [Advice for Reviewing Pull Requests][wiki:advice-for-reviewing], and\r\n* [Code Review Videos][wiki:videos].\r\n\r\n## PR Checklist\r\n\r\nBefore submitting a pull request, please ensure:\r\n\r\n1. Any non-standard identifiers in product code (including local variables, exposition-only members, etc.)\r\n   begin with an underscore and a capital letter, as per [\\[lex.name\\]/3.1][].\r\n\r\n2. Your changes don't affect the ABI for any type or function that a user may use (including adding or removing\r\n   non-static data members, adding or removing virtual member functions, changing whether a type is an aggregate\r\n   or trivially copyable, etc.).\r\n\r\n3. Your changes are written from scratch using only acceptable sources:\r\n   * this repository,\r\n   * the C++ Working Draft (including any cited standards),\r\n   * other WG21 papers (excluding reference implementations outside of proposed standard wording),\r\n   * LWG issues, or\r\n   * a project listed in [NOTICE.txt][] (make sure to cite the project in the PR description!).\r\n\r\nIf your changes are derived from any other project, you _must_ mention it in the pull request description,\r\nso we can determine whether the license is compatible and whether any other steps need to be taken.\r\n\r\n# Code of Conduct\r\n\r\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).\r\n\r\nSee [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) for more information.\r\n\r\n[label:\"good first issue\"]:\r\n   https://github.com/microsoft/STL/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22\r\n[label:\"high priority\"]: https://github.com/microsoft/STL/issues?q=is%3Aopen+is%3Aissue+label%3A%22high+priority%22\r\n[label:\"help wanted\"]: https://github.com/microsoft/STL/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22\r\n[review:changes-requested]: https://github.com/microsoft/STL/pulls?q=is%3Apr+is%3Aopen+review%3Achanges-requested\r\n[wiki:advice-for-reviewing]: https://github.com/microsoft/STL/wiki/Advice-for-Reviewing-Pull-Requests\r\n[NOTICE.txt]: https://github.com/microsoft/STL/blob/main/NOTICE.txt\r\n[wiki:videos]: https://github.com/microsoft/STL/wiki/Code-Review-Videos\r\n[\\[lex.name\\]/3.1]: https://eel.is/c++draft/lex.name#3.1\r\n"
  },
  {
    "path": "LICENSE.txt",
    "content": "The Microsoft C++ Standard Library is under the Apache License v2.0 with LLVM Exception:\r\n\r\n                                 Apache License\r\n                           Version 2.0, January 2004\r\n                        http://www.apache.org/licenses/\r\n\r\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n   1. Definitions.\r\n\r\n      \"License\" shall mean the terms and conditions for use, reproduction,\r\n      and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n      \"Licensor\" shall mean the copyright owner or entity authorized by\r\n      the copyright owner that is granting the License.\r\n\r\n      \"Legal Entity\" shall mean the union of the acting entity and all\r\n      other entities that control, are controlled by, or are under common\r\n      control with that entity. For the purposes of this definition,\r\n      \"control\" means (i) the power, direct or indirect, to cause the\r\n      direction or management of such entity, whether by contract or\r\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n      outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n      exercising permissions granted by this License.\r\n\r\n      \"Source\" form shall mean the preferred form for making modifications,\r\n      including but not limited to software source code, documentation\r\n      source, and configuration files.\r\n\r\n      \"Object\" form shall mean any form resulting from mechanical\r\n      transformation or translation of a Source form, including but\r\n      not limited to compiled object code, generated documentation,\r\n      and conversions to other media types.\r\n\r\n      \"Work\" shall mean the work of authorship, whether in Source or\r\n      Object form, made available under the License, as indicated by a\r\n      copyright notice that is included in or attached to the work\r\n      (an example is provided in the Appendix below).\r\n\r\n      \"Derivative Works\" shall mean any work, whether in Source or Object\r\n      form, that is based on (or derived from) the Work and for which the\r\n      editorial revisions, annotations, elaborations, or other modifications\r\n      represent, as a whole, an original work of authorship. For the purposes\r\n      of this License, Derivative Works shall not include works that remain\r\n      separable from, or merely link (or bind by name) to the interfaces of,\r\n      the Work and Derivative Works thereof.\r\n\r\n      \"Contribution\" shall mean any work of authorship, including\r\n      the original version of the Work and any modifications or additions\r\n      to that Work or Derivative Works thereof, that is intentionally\r\n      submitted to Licensor for inclusion in the Work by the copyright owner\r\n      or by an individual or Legal Entity authorized to submit on behalf of\r\n      the copyright owner. For the purposes of this definition, \"submitted\"\r\n      means any form of electronic, verbal, or written communication sent\r\n      to the Licensor or its representatives, including but not limited to\r\n      communication on electronic mailing lists, source code control systems,\r\n      and issue tracking systems that are managed by, or on behalf of, the\r\n      Licensor for the purpose of discussing and improving the Work, but\r\n      excluding communication that is conspicuously marked or otherwise\r\n      designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n      on behalf of whom a Contribution has been received by Licensor and\r\n      subsequently incorporated within the Work.\r\n\r\n   2. Grant of Copyright License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      copyright license to reproduce, prepare Derivative Works of,\r\n      publicly display, publicly perform, sublicense, and distribute the\r\n      Work and such Derivative Works in Source or Object form.\r\n\r\n   3. Grant of Patent License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      (except as stated in this section) patent license to make, have made,\r\n      use, offer to sell, sell, import, and otherwise transfer the Work,\r\n      where such license applies only to those patent claims licensable\r\n      by such Contributor that are necessarily infringed by their\r\n      Contribution(s) alone or by combination of their Contribution(s)\r\n      with the Work to which such Contribution(s) was submitted. If You\r\n      institute patent litigation against any entity (including a\r\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n      or a Contribution incorporated within the Work constitutes direct\r\n      or contributory patent infringement, then any patent licenses\r\n      granted to You under this License for that Work shall terminate\r\n      as of the date such litigation is filed.\r\n\r\n   4. Redistribution. You may reproduce and distribute copies of the\r\n      Work or Derivative Works thereof in any medium, with or without\r\n      modifications, and in Source or Object form, provided that You\r\n      meet the following conditions:\r\n\r\n      (a) You must give any other recipients of the Work or\r\n          Derivative Works a copy of this License; and\r\n\r\n      (b) You must cause any modified files to carry prominent notices\r\n          stating that You changed the files; and\r\n\r\n      (c) You must retain, in the Source form of any Derivative Works\r\n          that You distribute, all copyright, patent, trademark, and\r\n          attribution notices from the Source form of the Work,\r\n          excluding those notices that do not pertain to any part of\r\n          the Derivative Works; and\r\n\r\n      (d) If the Work includes a \"NOTICE\" text file as part of its\r\n          distribution, then any Derivative Works that You distribute must\r\n          include a readable copy of the attribution notices contained\r\n          within such NOTICE file, excluding those notices that do not\r\n          pertain to any part of the Derivative Works, in at least one\r\n          of the following places: within a NOTICE text file distributed\r\n          as part of the Derivative Works; within the Source form or\r\n          documentation, if provided along with the Derivative Works; or,\r\n          within a display generated by the Derivative Works, if and\r\n          wherever such third-party notices normally appear. The contents\r\n          of the NOTICE file are for informational purposes only and\r\n          do not modify the License. You may add Your own attribution\r\n          notices within Derivative Works that You distribute, alongside\r\n          or as an addendum to the NOTICE text from the Work, provided\r\n          that such additional attribution notices cannot be construed\r\n          as modifying the License.\r\n\r\n      You may add Your own copyright statement to Your modifications and\r\n      may provide additional or different license terms and conditions\r\n      for use, reproduction, or distribution of Your modifications, or\r\n      for any such Derivative Works as a whole, provided Your use,\r\n      reproduction, and distribution of the Work otherwise complies with\r\n      the conditions stated in this License.\r\n\r\n   5. Submission of Contributions. Unless You explicitly state otherwise,\r\n      any Contribution intentionally submitted for inclusion in the Work\r\n      by You to the Licensor shall be under the terms and conditions of\r\n      this License, without any additional terms or conditions.\r\n      Notwithstanding the above, nothing herein shall supersede or modify\r\n      the terms of any separate license agreement you may have executed\r\n      with Licensor regarding such Contributions.\r\n\r\n   6. Trademarks. This License does not grant permission to use the trade\r\n      names, trademarks, service marks, or product names of the Licensor,\r\n      except as required for reasonable and customary use in describing the\r\n      origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n   7. Disclaimer of Warranty. Unless required by applicable law or\r\n      agreed to in writing, Licensor provides the Work (and each\r\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n      implied, including, without limitation, any warranties or conditions\r\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n      PARTICULAR PURPOSE. You are solely responsible for determining the\r\n      appropriateness of using or redistributing the Work and assume any\r\n      risks associated with Your exercise of permissions under this License.\r\n\r\n   8. Limitation of Liability. In no event and under no legal theory,\r\n      whether in tort (including negligence), contract, or otherwise,\r\n      unless required by applicable law (such as deliberate and grossly\r\n      negligent acts) or agreed to in writing, shall any Contributor be\r\n      liable to You for damages, including any direct, indirect, special,\r\n      incidental, or consequential damages of any character arising as a\r\n      result of this License or out of the use or inability to use the\r\n      Work (including but not limited to damages for loss of goodwill,\r\n      work stoppage, computer failure or malfunction, or any and all\r\n      other commercial damages or losses), even if such Contributor\r\n      has been advised of the possibility of such damages.\r\n\r\n   9. Accepting Warranty or Additional Liability. While redistributing\r\n      the Work or Derivative Works thereof, You may choose to offer,\r\n      and charge a fee for, acceptance of support, warranty, indemnity,\r\n      or other liability obligations and/or rights consistent with this\r\n      License. However, in accepting such obligations, You may act only\r\n      on Your own behalf and on Your sole responsibility, not on behalf\r\n      of any other Contributor, and only if You agree to indemnify,\r\n      defend, and hold each Contributor harmless for any liability\r\n      incurred by, or claims asserted against, such Contributor by reason\r\n      of your accepting any such warranty or additional liability.\r\n\r\n   END OF TERMS AND CONDITIONS\r\n\r\n   APPENDIX: How to apply the Apache License to your work.\r\n\r\n      To apply the Apache License to your work, attach the following\r\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\r\n      replaced with your own identifying information. (Don't include\r\n      the brackets!)  The text should be enclosed in the appropriate\r\n      comment syntax for the file format. We also recommend that a\r\n      file or class name and description of purpose be included on the\r\n      same \"printed page\" as the copyright notice for easier\r\n      identification within third-party archives.\r\n\r\n   Copyright [yyyy] [name of copyright owner]\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n\r\n---- LLVM Exceptions to the Apache 2.0 License ----\r\n\r\nAs an exception, if, as a result of your compiling your source code, portions\r\nof this Software are embedded into an Object form of such source code, you\r\nmay redistribute such embedded portions in such Object form without complying\r\nwith the conditions of Sections 4(a), 4(b) and 4(d) of the License.\r\n\r\nIn addition, if you combine or link compiled forms of this Software with\r\nsoftware that is licensed under the GPLv2 (\"Combined Software\") and if a\r\ncourt of competent jurisdiction determines that the patent provision (Section\r\n3), the indemnity provision (Section 9) or other Section of the License\r\nconflicts with the conditions of the GPLv2, you may retroactively and\r\nprospectively choose to deem waived or otherwise exclude such Section(s) of\r\nthe License, but only in their entirety and only with respect to the Combined\r\nSoftware.\r\n"
  },
  {
    "path": "NOTICE.txt",
    "content": "Microsoft C++ Standard Library\r\n\r\nCopyright (c) Microsoft Corporation\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\n   http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n\r\n\r\n---- LLVM Exceptions to the Apache 2.0 License ----\r\n\r\nAs an exception, if, as a result of your compiling your source code, portions\r\nof this Software are embedded into an Object form of such source code, you\r\nmay redistribute such embedded portions in such Object form without complying\r\nwith the conditions of Sections 4(a), 4(b) and 4(d) of the License.\r\n\r\nIn addition, if you combine or link compiled forms of this Software with\r\nsoftware that is licensed under the GPLv2 (\"Combined Software\") and if a\r\ncourt of competent jurisdiction determines that the patent provision (Section\r\n3), the indemnity provision (Section 9) or other Section of the License\r\nconflicts with the conditions of the GPLv2, you may retroactively and\r\nprospectively choose to deem waived or otherwise exclude such Section(s) of\r\nthe License, but only in their entirety and only with respect to the Combined\r\nSoftware.\r\n\r\n----------------------------------------------------\r\n\r\nIn addition, certain files include the notices provided below.\r\n\r\n\r\n\r\n// Copyright 2018 Ulf Adams\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n// Boost Software License - Version 1.0 - August 17th, 2003\r\n\r\n// Permission is hereby granted, free of charge, to any person or organization\r\n// obtaining a copy of the software and accompanying documentation covered by\r\n// this license (the \"Software\") to use, reproduce, display, distribute,\r\n// execute, and transmit the Software, and to prepare derivative works of the\r\n// Software, and to permit third-parties to whom the Software is furnished to\r\n// do so, all subject to the following:\r\n\r\n// The copyright notices in the Software and this entire statement, including\r\n// the above license grant, this restriction and the following disclaimer,\r\n// must be included in all copies of the Software, in whole or in part, and\r\n// all derivative works of the Software, unless such copies or derivative\r\n// works are solely in the form of machine-executable object code generated by\r\n// a source language processor.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r\n// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r\n// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r\n// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\n// DEALINGS IN THE SOFTWARE.\r\n\r\n----------------------\r\n\r\n/*\r\n* This file is derived from software bearing the following\r\n* restrictions:\r\n*\r\n* (c) Copyright William E. Kempf 2001\r\n*\r\n* Permission to use, copy, modify, distribute and sell this\r\n* software and its documentation for any purpose is hereby\r\n* granted without fee, provided that the above copyright\r\n* notice appear in all copies and that both that copyright\r\n* notice and this permission notice appear in supporting\r\n* documentation. William E. Kempf makes no representations\r\n* about the suitability of this software for any purpose.\r\n* It is provided \"as is\" without express or implied warranty.\r\n*/\r\n\r\n----------------------\r\n\r\n// NOTE:\r\n//  The conversion data in this header has been derived by Dinkumware\r\n//  from a Unicode, Inc. file with the preamble reproduced below, under\r\n//  the grant of right described in that preamble. This header contains\r\n//  no other material from that file.\r\n//\r\n// Copyright (c) 1994-2011 Unicode, Inc.  All Rights reserved.\r\n//\r\n// This file is provided as-is by Unicode, Inc. (The Unicode Consortium).\r\n// No claims are made as to fitness for any particular purpose.  No\r\n// warranties of any kind are expressed or implied.  The recipient\r\n// agrees to determine applicability of information provided.  If this\r\n// file has been provided on magnetic media by Unicode, Inc., the sole\r\n// remedy for any claim will be exchange of defective media within 90\r\n// days of receipt.\r\n//\r\n//  Unicode, Inc. hereby grants the right to freely use the information\r\n//  supplied in this file in the creation of products supporting the\r\n//  Unicode Standard, and to make copies of this file in any form for\r\n//  internal or external distribution as long as this notice remains\r\n//  attached.\r\n\r\n----------------------\r\n\r\n/// NOTE:\r\n//  The conversion data in this header has been derived by Dinkumware\r\n//  from a Unicode, Inc. file with the preamble reproduced below, under\r\n//  the grant of right described in that preamble. This header contains\r\n//  no other material from that file.\r\n//\r\n//  Copyright (c) 1991-1994 Unicode, Inc.  All Rights reserved.\r\n//\r\n//  This file is provided as-is by Unicode, Inc. (The Unicode Consortium).\r\n//  No claims are made as to fitness for any particular purpose.  No\r\n//  warranties of any kind are expressed or implied.  The recipient\r\n//  agrees to determine applicability of information provided.  If this\r\n//  file has been provided on magnetic media by Unicode, Inc., the sole\r\n//  remedy for any claim will be exchange of defective media within 90\r\n//  days of receipt.\r\n//\r\n//  Recipient is granted the right to make copies in any form for\r\n//  internal distribution and to freely use the information supplied\r\n//  in the creation of products supporting Unicode.\r\n\r\n----------------------\r\n\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n----------------------\r\n\r\n// Copyright (c) 2012 - present, Victor Zverovich\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining\r\n// a copy of this software and associated documentation files (the\r\n// \"Software\"), to deal in the Software without restriction, including\r\n// without limitation the rights to use, copy, modify, merge, publish,\r\n// distribute, sublicense, and/or sell copies of the Software, and to\r\n// permit persons to whom the Software is furnished to do so, subject to\r\n// the following conditions:\r\n//\r\n// The above copyright notice and this permission notice shall be\r\n// included in all copies or substantial portions of the Software.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n//\r\n// --- Optional exception to the license ---\r\n//\r\n// As an exception, if, as a result of your compiling your source code, portions\r\n// of this Software are embedded into a machine-executable object form of such\r\n// source code, you may redistribute such embedded portions in such object form\r\n// without including the above copyright and permission notices.\r\n\r\n----------------------\r\n\r\n// UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE\r\n//\r\n// See Terms of Use <https://www.unicode.org/copyright.html>\r\n// for definitions of Unicode Inc.'s Data Files and Software.\r\n//\r\n// NOTICE TO USER: Carefully read the following legal agreement.\r\n// BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S\r\n// DATA FILES (\"DATA FILES\"), AND/OR SOFTWARE (\"SOFTWARE\"),\r\n// YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\n// TERMS AND CONDITIONS OF THIS AGREEMENT.\r\n// IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE\r\n// THE DATA FILES OR SOFTWARE.\r\n//\r\n// COPYRIGHT AND PERMISSION NOTICE\r\n//\r\n// Copyright (c) 1991-2022 Unicode, Inc. All rights reserved.\r\n// Distributed under the Terms of Use in https://www.unicode.org/copyright.html.\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining\r\n// a copy of the Unicode data files and any associated documentation\r\n// (the \"Data Files\") or Unicode software and any associated documentation\r\n// (the \"Software\") to deal in the Data Files or Software\r\n// without restriction, including without limitation the rights to use,\r\n// copy, modify, merge, publish, distribute, and/or sell copies of\r\n// the Data Files or Software, and to permit persons to whom the Data Files\r\n// or Software are furnished to do so, provided that either\r\n// (a) this copyright and permission notice appear with all copies\r\n// of the Data Files or Software, or\r\n// (b) this copyright and permission notice appear in associated\r\n// Documentation.\r\n//\r\n// THE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\r\n// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n// NONINFRINGEMENT OF THIRD PARTY RIGHTS.\r\n// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\r\n// NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\r\n// DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\r\n// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\r\n// TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n// PERFORMANCE OF THE DATA FILES OR SOFTWARE.\r\n//\r\n// Except as contained in this notice, the name of a copyright holder\r\n// shall not be used in advertising or otherwise to promote the sale,\r\n// use or other dealings in these Data Files or Software without prior\r\n// written authorization of the copyright holder.\r\n"
  },
  {
    "path": "README.md",
    "content": "# Microsoft's C++ Standard Library\r\n\r\nThis is the official repository for Microsoft's implementation of the C++ Standard Library (also known as the STL),\r\nwhich ships as part of the MSVC toolset and the Visual Studio IDE.\r\n\r\n* Our [Changelog][] tracks which updates to this repository appear in each VS release.\r\n* Our [Status Chart][] displays our overall progress over time.\r\n* Join our [Discord server][].\r\n* [![CI Status Badge][STL-CI-badge]][STL-CI-link] (STL-CI build status)\r\n* [![ASan CI Status Badge][STL-ASan-CI-badge]][STL-ASan-CI-link] (STL-ASan-CI build status)\r\n\r\n# What This Repo Is Useful For\r\n\r\nIf you're a programmer who just wants to use the STL, you **don't** need this repo. Simply install the Visual Studio IDE\r\nand select the \"Desktop development with C++\" workload.\r\n\r\nIf you want to participate in the STL's development, welcome! You can report issues, comment on pull requests, and learn\r\nabout what we're working on. You can also submit pull requests to fix bugs or add features: see [CONTRIBUTING.md][] for\r\nmore information.\r\n\r\nFinally, you can take our code and use it in other apps and libraries (according to the terms of our license, like\r\neverything else).\r\n\r\n# GitHub Migration Status\r\n\r\nWe're in the process of moving all of our work on the STL to GitHub. Current status:\r\n\r\n* Code: **Done.** Our source code is available under the Apache License v2.0 with LLVM Exception. (See\r\n[LICENSE.txt][] and [NOTICE.txt][] for more information.)\r\n\r\n* Build System: **In progress.** We're working on a CMake build system, which is currently capable of building one\r\nflavor of the STL (native desktop). We need to extend this to build all of the flavors required for the MSVC toolset\r\n(e.g. `/clr`, `/clr:pure`, OneCore, Spectre). Until that's done, we're keeping our legacy build system around in the\r\n`stl/msbuild` subdirectory. (We're keeping those files in this repo, even though they're unusable outside of Microsoft,\r\nbecause they need to be updated whenever source files are added/renamed/deleted. We'll delete the legacy machinery as\r\nsoon as possible.)\r\n\r\n* Tests: **In progress.** We rely on three test suites: std, tr1, and [libcxx][]. We've partially ported std and tr1,\r\nand fully ported libcxx to run under [lit][] using the various configurations/compilers we test internally.\r\n\r\n* Continuous Integration: **In progress.** We've set up Azure Pipelines to validate changes to the repository.\r\nCurrently, it builds the STL for x64, x86, ARM64, and ARM64EC. Also, it strictly verifies that all of our\r\nfiles have been formatted with [clang-format][] and follow our other whitespace conventions.\r\n\r\n* Contribution Guidelines: **Coming soon.** Working on the STL's code involves following many rules. We have codebase\r\nconventions, Standard requirements, Microsoft-specific requirements, binary compatibility (ABI) requirements, and more.\r\nWe're eager to begin accepting features and fixes from the community, but in addition to setting up a CI system, we need\r\nto write down all of the rules that are currently stored in our brains. (The ABI rules may be useful to other C++\r\nlibraries.)\r\n\r\n* Issues: **In progress.** We're going to use GitHub issues to track all of the things that we need to work on. This\r\nincludes C++20 features, [LWG issues][], conformance bugs, performance improvements, and other todos. There are\r\napproximately 200 active bugs in the STL's Microsoft-internal database; we need to manually replicate all of them to\r\nGitHub issues. Currently, the [cxx20 tag][] and [LWG tag][] are done; every remaining work item is tracked by a GitHub\r\nissue. The [bug tag][] and [enhancement tag][] are being populated.\r\n\r\n* Plans: **In progress.** We're writing up our [Roadmap][].\r\n\r\n# Goals\r\n\r\nWe're implementing the latest C++ Working Draft, currently [N5032][], which will eventually become the next C++\r\nInternational Standard. The terms Working Draft (WD) and Working Paper (WP) are interchangeable; we often\r\ninformally refer to these drafts as \"the Standard\" while being aware of the difference. (There are other relevant\r\nStandards; for example, supporting `/std:c++14` and `/std:c++17` involves understanding how the C++14 and C++17\r\nStandards differ from the Working Paper, and we often need to refer to the C Standard Library and ECMAScript regular\r\nexpression specifications.)\r\n\r\nOur primary goals are conformance, performance, usability, and compatibility.\r\n\r\n* Conformance: The Working Paper is a moving target; as features and LWG issue resolutions are added, we need to\r\nimplement them. That can involve a lot of work because the STL is required to behave in very specific ways and to\r\nhandle users doing very unusual things.\r\n\r\n* Performance: The STL needs to be extremely fast at runtime; speed is one of C++'s core strengths and most C++\r\nprograms use the STL extensively. As a result, we spend more time on optimization than most general-purpose libraries.\r\n(However, we're wary of changes that improve some scenarios at the expense of others, or changes that make code\r\nsignificantly more complicated and fragile. That is, there's a \"complexity budget\" that must be spent carefully.)\r\n\r\n* Usability: This includes parts of the programming experience like compiler throughput, diagnostic messages, and\r\ndebugging checks. For example, we've extensively marked the STL with `[[nodiscard]]` attributes because this helps\r\nprogrammers avoid bugs.\r\n\r\n* Compatibility: This includes binary compatibility and source compatibility. We're keeping VS 2026 binary-compatible\r\nwith VS 2015-2022, which restricts what we can change in VS 2026 updates. (We've found that significant changes\r\nare possible even though other changes are impossible, which we'll be documenting in our Contribution Guidelines soon.)\r\nWhile there are a few exceptions to this rule (e.g. if a feature is added to the Working Paper, we implement it, and\r\nthen the feature is significantly changed before the International Standard is finalized, we reserve the right to break\r\nbinary compatibility because `/std:c++latest` offers an experimental preview of such features), binary compatibility\r\ngenerally overrides all other considerations, even conformance. Source compatibility refers to being able to\r\nsuccessfully recompile user code without changes. We consider source compatibility to be important, but not\r\nall-important; breaking source compatibility can be an acceptable cost if done for the right reasons in the right way\r\n(e.g. in a controlled manner with escape hatches).\r\n\r\n# Non-Goals\r\n\r\nThere are things that we aren't interested in doing with this project, for various reasons (most importantly, we need to\r\nfocus development effort on our goals). Some examples:\r\n\r\n* Non-goal: Porting to other platforms.\r\n\r\n* Non-goal: Adding non-Standard extensions.\r\n\r\n* Non-goal: Implementing Technical Specifications. (We're prioritizing features in the Working Paper. Occasionally, we\r\nmight implement some or all of a TS, often when we're working on the specification itself.)\r\n\r\nIf you're proposing a feature to WG21 (the C++ Standardization Committee), you're welcome (and encouraged!) to use our\r\ncode as a base for a proof-of-concept implementation. These non-goals simply mean that we're unable to consider pull\r\nrequests for a proposed feature until it has been voted into a Working Paper. After that happens, we'll be delighted to\r\nreview a production-ready pull request.\r\n\r\n# Reporting Issues\r\n\r\nYou can report STL bugs here, where they'll be directly reviewed by maintainers. You can also report STL bugs through\r\n[Developer Community][], or the VS IDE (Help > Send Feedback > Report a Problem...).\r\n\r\n**Please help us** efficiently process bug reports by following these rules:\r\n\r\n* Only STL bugs should be reported here. If it's a bug in the compiler, CRT, or IDE, please report it through Developer\r\nCommunity or Report A Problem. If it's a bug in the Windows SDK, please report it through the [Feedback Hub][hub] app.\r\nIf you aren't sure, try to reduce your test case and see if you can eliminate the STL's involvement while still\r\nreproducing the bug.\r\n\r\n* You should be reasonably confident that you're looking at an actual implementation bug, instead of undefined behavior\r\nor surprising-yet-Standard behavior. Comparing against other implementations can help (but remember that implementations\r\ncan differ while conforming to the Standard); try [Compiler Explorer][]. If you still aren't\r\nsure, ask the nearest C++ expert.\r\n\r\n* You should prepare a self-contained command-line test case, ideally as small as possible. We need a source file, a\r\ncommand line, what happened (e.g. a compiler error, runtime misbehavior), and what you expected to happen. By\r\n\"self-contained\", we mean that your source file has to avoid including code that we don't have. Ideally, only CRT and\r\nSTL headers should be included. If you have to include other MSVC libraries, or the Windows SDK, to trigger an STL bug,\r\nthat's okay. But if you need parts of your own source code to trigger the STL bug, you need to extract that for us. (On\r\nDeveloper Community, we'll accept zipped IDE projects if you have no other way to reproduce a bug, but this is very\r\ntime-consuming for us to reduce.)\r\n\r\n* A good title is helpful. We prefer \"`<header_name>`: Short description of your issue\". You don't usually need to\r\nmention `std::` or C++. For example, \"`<type_traits>`: `is_cute` should be true for `enum class FluffyKittens`\".\r\n\r\nIt's okay if you report an apparent STL bug that turns out to be a compiler bug or surprising-yet-Standard behavior.\r\nJust try to follow these rules, so we can spend more time fixing bugs and implementing features.\r\n\r\n# Visual Studio Installer Prerequisites\r\n\r\n* Install [VS 2026 Insiders][] and keep it up to date.\r\n  + **You must install the Insiders IDE and the Preview build tools for STL development.** *See Note 1 below.*\r\n  + Select the \"Desktop development with C++\" workload.\r\n  + Select the following components at a minimum:\r\n    - \"MSVC Build Tools for x64/x86 (Preview)\"\r\n    - \"C++ CMake tools for Windows\"\r\n    - \"MSVC AddressSanitizer\"\r\n    - \"Windows 11 SDK (10.0.26100)\" or later\r\n    - \"C++ Clang tools for Windows (20.1.8 - x64/x86)\"\r\n    - *Optional, see Note 2 below:* \"MSVC Build Tools for ARM64/ARM64EC (Preview)\"\r\n* Install [Python][] 3.14.3 or later.\r\n  + Select \"Add python.exe to PATH\" if you want to follow the instructions below that invoke `python`.\r\n    Otherwise, you should be familiar with alternative methods.\r\n\r\n*Note 1:* The STL and the compiler ship together, and we frequently need recently implemented\r\ncompiler fixes and features, so the Latest build tools (i.e. latest production) are too old.\r\nBecause the Insiders IDE supports having the Latest and Preview build tools installed simultaneously,\r\nyou need to ensure that you're using the Preview build tools. If you build with the IDE, we've arranged for\r\nthis to happen automatically. If you build with the Command Prompt, you need to pass `-vcvars_ver=preview`\r\nas explained below. For more info, read the [C++ Team Blog post][preview] that announced this release process.\r\n\r\n*Note 2:* The x64/x86 build tools are usually sufficient.\r\nYou'll need the ARM64/ARM64EC build tools if you're working with architecture-sensitive code.\r\nFor example, `<atomic>` has conditionally compiled code for the `_M_ARM64` and `_M_ARM64EC` predefined macros.\r\n\r\n# How To Build With The Visual Studio IDE\r\n\r\n1. Open Visual Studio and select \"Clone a repository\".\r\n2. Enter `https://github.com/microsoft/STL.git` as the repository location. Choose a local path. Click \"Clone\".\r\n3. File > Open > Folder... > Select the folder that you just cloned the repository into.\r\n4. Use the IDE's dropdown menu to choose the architecture you want to build. We recommend x64 for general development.\r\n5. Build > Build All.\r\n\r\n# How To Build With The Command Prompt\r\n\r\n1. Open a command prompt.\r\n2. Change directories to a location where you'd like a clone of this STL repository.\r\n3. `git clone https://github.com/microsoft/STL.git --recurse-submodules`\r\n4. `pushd STL`\r\n\r\nThe following instructions assume that you're starting in the previously cloned `STL` directory.\r\nIf you installed VS to a non-default location, change the `vcvarsall.bat` paths below accordingly.\r\n\r\nTo build the x64 target (recommended):\r\n\r\n1. `pushd \"%ProgramFiles%\\Microsoft Visual Studio\\18\\Insiders\\VC\\Auxiliary\\Build\"`\r\n1. `vcvarsall.bat x64 -vcvars_ver=preview`\r\n1. `popd`\r\n1. `cmake --preset x64`\r\n1. `cmake --build --preset x64`\r\n\r\nTo build the x86 target:\r\n\r\n1. `pushd \"%ProgramFiles%\\Microsoft Visual Studio\\18\\Insiders\\VC\\Auxiliary\\Build\"`\r\n1. `vcvarsall.bat x86 -vcvars_ver=preview`\r\n1. `popd`\r\n1. `cmake --preset x86`\r\n1. `cmake --build --preset x86`\r\n\r\nTo build the ARM64 target:\r\n\r\n1. `pushd \"%ProgramFiles%\\Microsoft Visual Studio\\18\\Insiders\\VC\\Auxiliary\\Build\"`\r\n1. `vcvarsall.bat x64_arm64 -vcvars_ver=preview`\r\n1. `popd`\r\n1. `cmake --preset ARM64`\r\n1. `cmake --build --preset ARM64`\r\n\r\nTo build the ARM64EC target:\r\n\r\n1. `pushd \"%ProgramFiles%\\Microsoft Visual Studio\\18\\Insiders\\VC\\Auxiliary\\Build\"`\r\n1. `vcvarsall.bat x64_arm64 -vcvars_ver=preview`\r\n1. `popd`\r\n1. `cmake --preset ARM64EC`\r\n1. `cmake --build --preset ARM64EC`\r\n\r\n# How To Consume\r\n\r\nConsumption of the built library is largely based on the build system you're using. There are at least 2 directories\r\nyou need to hook up. Assuming you built the x64 target with the Visual Studio IDE, with the STL repository cloned to\r\n`C:\\Dev\\STL`, build outputs will end up at `C:\\Dev\\STL\\out\\x64\\out`. Ensure that the `inc` directory is searched\r\nfor headers, and that `lib\\{architecture}` is searched for link libraries, before any defaults supplied by MSVC. The\r\nnames of the import and static libraries are the same as those that ship with MSVC. As a result, the compiler `/MD`,\r\n`/MDd`, `/MT`, or `/MTd` switches will work without modification of your build scripts or command-line muscle memory.\r\n\r\nShould you choose to use the DLL flavors, the DLLs to deploy are built to `bin\\{architecture}`. Note that the DLLs\r\ngenerated by the CMake build system here have a suffix, defaulting to `_oss`, which distinguishes them from the binaries\r\nthat ship with MSVC. That avoids any conflict with the DLLs installed by the [redistributables][] into System32 and\r\nensures that other components wanting to be a \"guest in your process\", like print drivers and shell extensions, see the\r\nexport surface of the STL they were built with. Otherwise, the \"`msvcp140.dll`\" you deployed in the same directory as\r\nyour .exe would \"win\" over the versions in System32.\r\n\r\nThe compiler looks for include directories according to the `INCLUDE` environment variable, and the linker looks for\r\nimport library directories according to the `LIB` environment variable, and the Windows loader will (eventually) look\r\nfor DLL dependencies according to directories in the `PATH` environment variable.\r\nThe build generates a batch script named `set_environment.bat` in the output directory. If you run this script,\r\nit will insert the proper directories into the `INCLUDE`, `LIB`, and `PATH` environment\r\nvariables to ensure that the built headers and libraries are used.\r\n\r\n## Complete Example Using x64 DLL Flavor\r\n\r\n```\r\nC:\\Temp>pushd D:\\GitHub\\STL\r\n\r\nD:\\GitHub\\STL>pushd \"%ProgramFiles%\\Microsoft Visual Studio\\18\\Insiders\\VC\\Auxiliary\\Build\"\r\n\r\nC:\\Program Files\\Microsoft Visual Studio\\18\\Insiders\\VC\\Auxiliary\\Build>vcvarsall.bat x64 -vcvars_ver=preview\r\n**********************************************************************\r\n** Visual Studio 2026 Developer Command Prompt v18.4.0-insiders\r\n** Copyright (c) 2026 Microsoft Corporation\r\n**********************************************************************\r\n[vcvarsall.bat] Environment initialized for: 'x64'\r\n\r\nC:\\Program Files\\Microsoft Visual Studio\\18\\Insiders\\VC\\Auxiliary\\Build>popd\r\n\r\nD:\\GitHub\\STL>cmake --preset x64\r\n[...]\r\n-- Build files have been written to: D:/GitHub/STL/out/x64\r\n\r\nD:\\GitHub\\STL>cmake --build --preset x64\r\n[762/762] Linking CXX static library out\\lib\\amd64\\libcpmtd0.lib\r\n\r\nD:\\GitHub\\STL>out\\x64\\set_environment.bat\r\n\r\nD:\\GitHub\\STL>popd\r\n\r\nC:\\Temp>type .\\example.cpp\r\n```\r\n```cpp\r\n#include <print>\r\n\r\nint main() {\r\n    std::println(\"Hello STL OSS world!\");\r\n}\r\n```\r\n```\r\nC:\\Temp>cl /EHsc /nologo /W4 /WX /MDd /std:c++latest .\\example.cpp\r\nexample.cpp\r\n\r\nC:\\Temp>.\\example.exe\r\nHello STL OSS world!\r\n\r\nC:\\Temp>dumpbin /DEPENDENTS .\\example.exe | findstr msvcp\r\n    msvcp140d_oss.dll\r\n```\r\n\r\n# How To Run The Tests\r\n\r\nOur tests are currently split across three test suites that are located at `tests\\std`, `tests\\tr1`, and\r\n`llvm-project\\libcxx\\test\\std`. The test runner `${PROJECT_BINARY_DIR}\\tests\\utils\\stl-lit\\stl-lit.py` accepts paths to\r\ndirectories in the test suites and runs all tests located in the subtree rooted at those paths. This can mean executing\r\nthe entirety of a single test suite, running all tests under a category in `libcxx`, or running a single test in `std`\r\nand `tr1`.\r\n\r\nSome useful `stl-lit.py` options:\r\n* `-v` (verbose) tells `stl-lit.py` to show us output from failed test cases.\r\n* `-Dnotags=ASAN` disables the \"extra ASan configs\" that we typically run only in CI. This is useful to limit runtime\r\n  for full validation runs, but often omitted when running just a few test cases to enable the extra ASan coverage.\r\n\r\n## Examples\r\n\r\nThese examples assume that your current directory is `C:\\Dev\\STL\\out\\x64`.\r\n\r\n* This command will run all of the test suites:\r\n  + `python tests\\utils\\stl-lit\\stl-lit.py -Dnotags=ASAN ..\\..\\llvm-project\\libcxx\\test ..\\..\\tests\\std ..\\..\\tests\\tr1`\r\n* This command will run only the std test suite.\r\n  + `python tests\\utils\\stl-lit\\stl-lit.py -Dnotags=ASAN ..\\..\\tests\\std`\r\n* If you want to run a subset of a test suite, you need to point it to the right place in the sources. The following\r\nwill run the single test found under `VSO_0000000_any_calling_conventions`.\r\n  + `python tests\\utils\\stl-lit\\stl-lit.py -Dnotags=ASAN ..\\..\\tests\\std\\tests\\VSO_0000000_any_calling_conventions`\r\n* You can invoke `stl-lit` with any arbitrary subdirectory of a test suite. In libcxx this allows you to have finer\r\ncontrol over what category of tests you would like to run. The following will run all the libcxx map tests.\r\n  + `python tests\\utils\\stl-lit\\stl-lit.py -Dnotags=ASAN ..\\..\\llvm-project\\libcxx\\test\\std\\containers\\associative\\map`\r\n* You can also use the `--filter` option to include tests whose names match a regular expression. The following\r\n  command will run tests with \"atomic_wait\" in their names in both the std and libcxx test suites.\r\n  + `python tests\\utils\\stl-lit\\stl-lit.py ..\\..\\llvm-project\\libcxx\\test ..\\..\\tests\\std --filter=atomic_wait`\r\n* There's also a `--filter-out` option to exclude tests matching a regular expression;\r\n  `--filter=iota --filter-out=view` would run tests with names matching \"iota\" but not \"view\".\r\n\r\n## Interpreting The Results Of Tests\r\n\r\n`stl-lit.py` prints the result of each test. The format of each result is\r\n`{Result Code}: {Test Suite Name} :: {Test Name}:{Configuration Number}`.\r\n\r\nExample:\r\n```\r\n-- Testing: 28 tests, 12 workers --\r\nPASS: tr1 :: tests/cwchar1:01 (1 of 28)\r\nPASS: tr1 :: tests/cwchar1:11 (2 of 28)\r\nPASS: tr1 :: tests/cwchar1:02 (3 of 28)\r\nPASS: tr1 :: tests/cwchar1:03 (4 of 28)\r\nPASS: tr1 :: tests/cwchar1:00 (5 of 28)\r\nPASS: tr1 :: tests/cwchar1:04 (6 of 28)\r\nPASS: tr1 :: tests/cwchar1:05 (7 of 28)\r\nPASS: tr1 :: tests/cwchar1:09 (8 of 28)\r\nPASS: tr1 :: tests/cwchar1:06 (9 of 28)\r\nUNSUPPORTED: tr1 :: tests/cwchar1:20 (10 of 28)\r\nUNSUPPORTED: tr1 :: tests/cwchar1:21 (11 of 28)\r\nUNSUPPORTED: tr1 :: tests/cwchar1:22 (12 of 28)\r\nUNSUPPORTED: tr1 :: tests/cwchar1:23 (13 of 28)\r\nUNSUPPORTED: tr1 :: tests/cwchar1:24 (14 of 28)\r\nPASS: tr1 :: tests/cwchar1:07 (15 of 28)\r\nPASS: tr1 :: tests/cwchar1:08 (16 of 28)\r\nPASS: tr1 :: tests/cwchar1:10 (17 of 28)\r\nPASS: tr1 :: tests/cwchar1:16 (18 of 28)\r\nPASS: tr1 :: tests/cwchar1:17 (19 of 28)\r\nPASS: tr1 :: tests/cwchar1:14 (20 of 28)\r\nPASS: tr1 :: tests/cwchar1:12 (21 of 28)\r\nPASS: tr1 :: tests/cwchar1:13 (22 of 28)\r\nPASS: tr1 :: tests/cwchar1:19 (23 of 28)\r\nPASS: tr1 :: tests/cwchar1:18 (24 of 28)\r\nPASS: tr1 :: tests/cwchar1:15 (25 of 28)\r\nPASS: tr1 :: tests/cwchar1:25 (26 of 28)\r\nPASS: tr1 :: tests/cwchar1:26 (27 of 28)\r\nPASS: tr1 :: tests/cwchar1:27 (28 of 28)\r\n\r\nTesting Time: 3.96s\r\n  Expected Passes    : 23\r\n  Unsupported Tests  : 5\r\n```\r\n\r\nIn the above example, we see that 23 tests succeeded and 5 were unsupported.\r\n\r\n### Result Code Values\r\n\r\nOur tests use the standard [lit result codes][], and an undocumented result code: `SKIPPED`. For our tests, only the\r\n`PASS`, `XFAIL`, `XPASS`, `FAIL`, `UNSUPPORTED`, and `SKIPPED` result codes are relevant.\r\n\r\nThe `PASS` and `FAIL` result codes are self-explanatory. We want our tests to `PASS` and not `FAIL`.\r\n\r\nThe `XPASS` and `XFAIL` result codes are less obvious. `XPASS` is actually a failure result and indicates that we\r\nexpected a test to fail but it passed. `XFAIL` is a successful result and indicates that we expected the test to fail\r\nand it did. Typically an `XPASS` result means that the `expected_results.txt` file for the test suite needs to be\r\nmodified. If the `XPASS` result is a test legitimately passing, the usual course of action would be to remove a `FAIL`\r\nentry from the `expected_results.txt`. However, some tests from `libcxx` mark themselves as `XFAIL` (meaning they\r\nexpect to fail) for features they have added tests for but have yet to implement in `libcxx`. If the STL implements\r\nthose features first the tests will begin passing unexpectedly for us and return `XPASS` results. In order to resolve\r\nthis it is necessary to add a `PASS` entry to the `expected_results.txt` of the test suite in question.\r\n\r\nThe `UNSUPPORTED` result code means that the requirements for a test are not met and so it will not be run. Currently,\r\nall tests which use the `/clr` or `/clr:pure` options are unsupported. Also, the `/BE` option is unsupported for x86.\r\n\r\nThe `SKIPPED` result code indicates that a given test was explicitly skipped by adding a `SKIPPED` entry to the\r\n`expected_results.txt`. A test may be skipped for a number of reasons, which include, but are not limited to:\r\n* being an incorrect test\r\n* taking a very long time to run\r\n* failing or passing for an incorrect reason\r\n\r\n### Debugging Individual Tests\r\n\r\nWhile `stl-lit` is super awesome in finding out that *something* is wrong or not even compiling, it is not really\r\nhelpful in debugging *what* is going wrong. However, debugging individual tests is rather simple given some additional\r\nsteps. Let's assume we want to debug a new feature with tests located in `tests\\std\\tests\\GH_XXXX_meow`.\r\n\r\nAs always, build the STL from your branch and run the tests:\r\n```\r\nC:\\Dev\\STL\\out\\x64> ninja\r\nC:\\Dev\\STL\\out\\x64> python tests\\utils\\stl-lit\\stl-lit.py -v C:\\Dev\\STL\\tests\\std\\tests\\GH_XXXX_meow\r\n```\r\n\r\nLet's assume one of the tests fails an assert and we want to debug that configuration. `stl-lit` will conveniently print\r\nthe build command, which is far too long to provide here in full. The important part is to add the following options to\r\nprovide debug symbols: `/Zi /Fdbark.pdb`.\r\n\r\nYou can replace `bark` with any descriptive name you like. Add these before the `\"-link\"` option in the command line\r\nand recompile. Example:\r\n```\r\nC:\\Dev\\STL\\out\\x64>cl \"C:\\Dev\\STL\\tests\\std\\tests\\GH_XXXX_meow\\test.cpp\" [... more arguments ...]\r\n\"-FeC:\\Dev\\STL\\out\\x64\\tests\\std\\tests\\GH_XXXX_meow\\Output\\02\\GH_XXXX_meow.exe\" /Zi /Fdbark.pdb \"-link\"\r\n[... more arguments ...]\r\n```\r\n\r\nYou can now start debugging the test via:\r\n```\r\ndevenv \"C:\\Dev\\STL\\out\\x64\\tests\\std\\tests\\GH_XXXX_meow\\Output\\02\\GH_XXXX_meow.exe\"\r\n       \"C:\\Dev\\STL\\tests\\std\\tests\\GH_XXXX_meow\\test.cpp\"\r\n```\r\n\r\nHowever, this might not work right away, as Visual Studio may complain about a missing `msvcp140_oss.dll`. The reason\r\nis that the STL builds those and other DLLs itself and we should under no circumstances overwrite the installed ones.\r\nIf you are testing one of the configurations with dynamic linkage (`/MD` or `/MDd`) the easiest solution is to add the\r\nbuild folder to your path:\r\n```\r\nset PATH=C:\\Dev\\STL\\out\\x64\\out\\bin\\amd64;%PATH%\r\n```\r\n\r\n## Running Tests With Address Sanitizer (ASan)\r\n\r\nYou don't need any extra steps to run with test code and the code in STL headers instrumented with [ASan][].\r\nThe test matrices include both ASan and non-ASan configurations if you don't pass `-Dtags=ASAN` or `-Dnotags=ASAN`\r\nto exclude one or the other.\r\n\r\nHowever, to instrument the separately-compiled code (the DLL, the satellites, the [Import Library][] - everything that's\r\nin `stl\\src`), you need to build the STL with ASan. Change the build steps to add `-DSTL_ASAN_BUILD=ON`:\r\n\r\n```\r\ncmake --preset x64 -DSTL_ASAN_BUILD=ON\r\ncmake --build --preset x64\r\n```\r\n\r\nASan-instrumented STL binaries require that the executable be instrumented as well, so you'll have to skip the non-ASan\r\nconfigurations by passing `-Dtags=ASAN` to `stl-lit.py`:\r\n\r\n(This example assumes that your current directory is `C:\\Dev\\STL\\out\\x64`.)\r\n\r\n```\r\npython tests\\utils\\stl-lit\\stl-lit.py ..\\..\\tests\\std\\tests\\VSO_0000000_vector_algorithms -Dtags=ASAN -v\r\n```\r\n\r\n# Benchmarking\r\n\r\nFor performance-sensitive code (e.g. containers and algorithms)\r\nyou may wish to write and/or run benchmarks, and the STL team will likely\r\nrun any benchmarks we do have in our PR process. Additionally,\r\nif you are writing a \"performance improvement\" PR, please add and run benchmarks\r\nto show that the PR does, in fact, improve performance.\r\n\r\nThe benchmarking code is located in `benchmarks`. Adding a new benchmark is as easy as adding a new file\r\nto `benchmarks/src`, and then adding `add_benchmark(<name> <source_file>)`\r\nto `benchmarks/CMakeLists.txt`.\r\nYou may also modify an existing benchmark file. We use Google's [Benchmark][gbenchmark] library,\r\nso you may find [their documentation][gbenchmark:docs] helpful, and you can also read the existing code\r\nfor how _we_ use it.\r\n\r\nTo run benchmarks, you'll need to first build the STL, then build the benchmarks:\r\n\r\n```cmd\r\ncmake --preset x64\r\ncmake --build --preset x64\r\ncmake -B out\\bench -S benchmarks -G Ninja -DSTL_BINARY_DIR=out\\x64\r\ncmake --build out\\bench\r\n```\r\n\r\nYou can then run your benchmark with:\r\n\r\n```cmd\r\nout\\bench\\benchmark-<benchmark-name> --benchmark_out=<file> --benchmark_out_format=csv\r\n```\r\n\r\nAnd then you can copy this CSV file into Excel, or another spreadsheet program. For example:\r\n\r\n```cmd\r\nout\\bench\\benchmark-std_copy --benchmark_out=benchmark-std_copy-results.csv --benchmark_out_format=csv\r\n```\r\n\r\nIf you want to see all the other flags you can pass, run:\r\n\r\n```cmd\r\nout\\bench\\benchmark-<benchmark-name> --help\r\n```\r\n\r\n## Other Useful Incantations\r\n\r\nTo compile the benchmarks with additional compiler options, use the [`CXXFLAGS` environment variable][CXXFLAGS].\r\nSet it after configuring and building the STL, but before configuring and building the benchmarks.\r\nFor example, to examine how the `/arch:AVX2` option affects auto-vectorization and bit algorithm intrinsics:\r\n\r\n```\r\nset CXXFLAGS=/arch:AVX2\r\ncmake -B out\\bench -S benchmarks -G Ninja -DSTL_BINARY_DIR=out\\x64\r\ncmake --build out\\bench\r\n```\r\n\r\nTo compile the benchmarks with Clang, use `-DCMAKE_CXX_COMPILER=clang-cl`:\r\n\r\n```\r\ncmake -B out\\bench -S benchmarks -G Ninja -DSTL_BINARY_DIR=out\\x64 -DCMAKE_CXX_COMPILER=clang-cl\r\ncmake --build out\\bench\r\n```\r\n\r\nTo run a benchmark on specific cores (e.g. P-cores vs. E-cores) and with higher priority\r\n(to avoid interference), use the [`start` command][start-command]:\r\n\r\n```\r\nstart /b /wait /high /affinity 0F out\\bench\\benchmark-std_copy\r\n```\r\n\r\n# Editing And Testing The Debugger Visualizer\r\n\r\n### Modify The Visualizer\r\n\r\nTo modify how components are visualized in the debugger, edit the file `stl\\debugger\\STL.natvis`. For more information\r\non how to modify this file, check the [natvis documentation][].\r\n\r\n### Test Your Changes\r\n\r\nYou can add the natvis file to any Visual Studio C++ project if you right-click your project > Add > Existing Item and\r\nselect the STL.natvis file. After doing this you should be able to see your changes in a Visual Studio debugging\r\nsession.\r\n\r\n# Block Diagram\r\n\r\nThe STL is built atop other compiler support libraries that ship with Windows and Visual Studio, like the UCRT,\r\nVCRuntime, and VCStartup. The following diagram describes the dependencies between those components and their ship\r\nvehicles.\r\n\r\n```mermaid\r\nflowchart TB\r\n%%{ init: {\"flowchart\": {\"htmlLabels\": true}} }%%\r\n    classDef default text-align:left\r\n    subgraph VisualStudioSubgraph[Visual Studio]\r\n        direction TB\r\n        STLNode(\"<b>STL</b>\r\n        This repo; provides C++ Standard Library headers, separately\r\n        compiled implementations of most of the iostreams functionality,\r\n        and a few runtime support components like std::exception_ptr.\")\r\n        subgraph VCRuntimeSubgraph[VCRuntime]\r\n            direction TB\r\n            VCStartupNode(\"<b>VCStartup</b>\r\n            Provides compiler support mechanisms that\r\n            live in each binary; such as machinery to\r\n            call constructors and destructors for global\r\n            variables, the entry point, and the /GS cookie.<br>\r\n            Merged into static and import libraries of VCRuntime.\")\r\n            VCRuntimeNode(\"<b>VCRuntime</b>\r\n            Provides compiler support mechanisms that can be\r\n            shared between binaries; code that the compiler calls\r\n            on your behalf, such as the C++ exception handling\r\n            runtime, string.h intrinsics, math intrinsics, and\r\n            declarations for CPU-vendor-specific intrinsics.\")\r\n        end\r\n    end\r\n    subgraph WindowsSDKSubgraph[Windows SDK]\r\n        UniversalCRTNode(\"<b>Universal CRT</b>\r\n        Windows component that provides C library support, such as printf,\r\n        C locales, and some POSIX-like shims for the Windows API, like _stat.\")\r\n    end\r\n    STLNode ==> VCRuntimeSubgraph & UniversalCRTNode\r\n    VCStartupNode ==> VCRuntimeNode ==> UniversalCRTNode\r\n```\r\n\r\n# Contributing\r\n\r\nThis project welcomes contributions and suggestions. Most contributions require you to agree to a\r\nContributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us\r\nthe rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.\r\n\r\nWhen you submit a pull request, a CLA bot will automatically determine whether you need to provide\r\na CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions\r\nprovided by the bot. You will only need to do this once across all repos using our CLA.\r\n\r\nSee [CONTRIBUTING.md][] for more information.\r\n\r\n# Code Of Conduct\r\n\r\nThis project has adopted the [Microsoft Open Source Code of Conduct][].\r\n\r\nSee [CODE_OF_CONDUCT.md][] for more information.\r\n\r\n# License\r\n\r\nCopyright (c) Microsoft Corporation.\r\n\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n[Changelog]: https://github.com/microsoft/STL/wiki/Changelog\r\n[clang-format]: https://clang.llvm.org/docs/ClangFormat.html\r\n[CODE_OF_CONDUCT.md]: CODE_OF_CONDUCT.md\r\n[Compiler Explorer]: https://godbolt.org\r\n[CONTRIBUTING.md]: CONTRIBUTING.md\r\n[Developer Community]: https://aka.ms/feedback/report?space=62\r\n[Discord server]: https://discord.gg/XWanNww\r\n[LICENSE.txt]: LICENSE.txt\r\n[LWG issues]: https://cplusplus.github.io/LWG/lwg-toc.html\r\n[LWG tag]: https://github.com/microsoft/STL/issues?q=is%3Aopen+is%3Aissue+label%3ALWG\r\n[Microsoft Open Source Code of Conduct]: https://opensource.microsoft.com/codeofconduct/\r\n[N5032]: https://wg21.link/N5032\r\n[NOTICE.txt]: NOTICE.txt\r\n[STL-CI-badge]: https://dev.azure.com/vclibs/STL/_apis/build/status%2FSTL-CI?branchName=main \"STL-CI\"\r\n[STL-CI-link]: https://dev.azure.com/vclibs/STL/_build/latest?definitionId=4&branchName=main\r\n[STL-ASan-CI-badge]: https://dev.azure.com/vclibs/STL/_apis/build/status%2FSTL-ASan-CI?branchName=main \"STL-ASan-CI\"\r\n[STL-ASan-CI-link]: https://dev.azure.com/vclibs/STL/_build/latest?definitionId=5&branchName=main\r\n[Python]: https://www.python.org/downloads/windows/\r\n[Roadmap]: https://github.com/microsoft/STL/wiki/Roadmap\r\n[Status Chart]: https://microsoft.github.io/STL/\r\n[bug tag]: https://github.com/microsoft/STL/issues?q=is%3Aopen+is%3Aissue+label%3Abug\r\n[cxx20 tag]: https://github.com/microsoft/STL/issues?q=is%3Aopen+is%3Aissue+label%3Acxx20\r\n[enhancement tag]: https://github.com/microsoft/STL/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement\r\n[gbenchmark]: https://github.com/google/benchmark\r\n[gbenchmark:docs]: https://github.com/google/benchmark/blob/main/docs/user_guide.md\r\n[hub]: https://support.microsoft.com/help/4021566\r\n[libcxx]: https://libcxx.llvm.org\r\n[lit]: https://llvm.org/docs/CommandGuide/lit.html\r\n[lit result codes]: https://llvm.org/docs/CommandGuide/lit.html#test-status-results\r\n[redistributables]: https://learn.microsoft.com/cpp/windows/latest-supported-vc-redist\r\n[natvis documentation]: https://learn.microsoft.com/visualstudio/debugger/create-custom-views-of-native-objects\r\n[ASan]: https://learn.microsoft.com/cpp/sanitizers/asan\r\n[Import Library]: /docs/import_library.md\r\n[VS 2026 Insiders]: https://visualstudio.microsoft.com/insiders/\r\n[CXXFLAGS]: https://cmake.org/cmake/help/latest/envvar/CXXFLAGS.html\r\n[start-command]: https://learn.microsoft.com/windows-server/administration/windows-commands/start\r\n[preview]: https://devblogs.microsoft.com/cppblog/microsoft-c-msvc-build-tools-v14-51-preview-released-how-to-opt-in/\r\n"
  },
  {
    "path": "SECURITY.md",
    "content": "<!-- BEGIN MICROSOFT SECURITY.MD V0.0.9 BLOCK -->\n\n## Security\n\nMicrosoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet) and [Xamarin](https://github.com/xamarin).\n\nIf you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/security.md/definition), please report it to us as described below.\n\n## Reporting Security Issues\n\n**Please do not report security vulnerabilities through public GitHub issues.**\n\nInstead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/security.md/msrc/create-report).\n\nIf you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com).  If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/security.md/msrc/pgp).\n\nYou should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). \n\nPlease include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:\n\n  * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)\n  * Full paths of source file(s) related to the manifestation of the issue\n  * The location of the affected source code (tag/branch/commit or direct URL)\n  * Any special configuration required to reproduce the issue\n  * Step-by-step instructions to reproduce the issue\n  * Proof-of-concept or exploit code (if possible)\n  * Impact of the issue, including how an attacker might exploit the issue\n\nThis information will help us triage your report more quickly.\n\nIf you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/security.md/msrc/bounty) page for more details about our active programs.\n\n## Preferred Languages\n\nWe prefer all communications to be in English.\n\n## Policy\n\nMicrosoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/security.md/cvd).\n\n<!-- END MICROSOFT SECURITY.MD BLOCK -->\n"
  },
  {
    "path": "azure-devops/asan-pipeline.yml",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# Build STL targeting x64, x86, and arm64, then run extra ASan testing\r\n\r\nvariables:\r\n  - template: config.yml\r\n\r\ntrigger: none\r\n\r\nschedules:\r\n- cron: '0 2 * * *'\r\n  displayName: ASan-Daily-CI\r\n  branches:\r\n    include:\r\n    - main\r\n\r\nstages:\r\n  - stage: Test_x64_ASan\r\n    displayName: 'Test x64 ASan'\r\n    dependsOn: []\r\n    pool:\r\n      name: ${{ variables.x64SlowPoolName }}\r\n      demands: ${{ variables.poolDemands }}\r\n    jobs:\r\n      - template: build-and-test.yml\r\n        parameters:\r\n          hostArch: x64\r\n          targetArch: x64\r\n          targetPlatform: x64\r\n          asanBuild: true\r\n          testTargets: STL-ASan-CI\r\n\r\n  - stage: Test_x86_ASan\r\n    displayName: 'Test x86 ASan'\r\n    dependsOn: []\r\n    pool:\r\n      name: ${{ variables.x64SlowPoolName }}\r\n      demands: ${{ variables.poolDemands }}\r\n    jobs:\r\n      - template: build-and-test.yml\r\n        parameters:\r\n          hostArch: x86\r\n          targetArch: x86\r\n          targetPlatform: x86\r\n          asanBuild: true\r\n          testTargets: STL-ASan-CI\r\n\r\n  - stage: Test_ARM64_ASan\r\n    displayName: 'Test ARM64 ASan'\r\n    dependsOn: []\r\n    pool:\r\n      name: ${{ variables.arm64PoolName }}\r\n      demands: ${{ variables.poolDemands }}\r\n    jobs:\r\n      - template: build-and-test.yml\r\n        parameters:\r\n          hostArch: arm64\r\n          targetArch: arm64\r\n          targetPlatform: arm64\r\n          asanBuild: true\r\n          testTargets: STL-ASan-CI\r\n"
  },
  {
    "path": "azure-devops/build-and-test.yml",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nparameters:\r\n- name: hostArch\r\n  type: string\r\n- name: targetArch\r\n  type: string\r\n- name: targetPlatform\r\n  type: string\r\n- name: analyzeBuild\r\n  type: boolean\r\n  default: false\r\n- name: asanBuild\r\n  type: boolean\r\n  default: false\r\n- name: buildBenchmarks\r\n  type: boolean\r\n  default: false\r\n- name: testTargets\r\n  type: string\r\n  default: 'STL-CI'\r\n- name: numShards\r\n  type: number\r\n  default: 10\r\n- name: configureTesting\r\n  type: boolean\r\n  default: true\r\n- name: buildStl\r\n  type: boolean\r\n  default: true\r\n- name: runTesting\r\n  type: boolean\r\n  default: true\r\n- name: testsBuildOnly\r\n  type: boolean\r\n  default: false\r\njobs:\r\n- job: '${{ parameters.targetPlatform }}'\r\n  strategy:\r\n    parallel: ${{ parameters.numShards }}\r\n  timeoutInMinutes: 30\r\n  steps:\r\n  - template: checkout-self.yml\r\n  - template: checkout-submodule.yml\r\n    parameters:\r\n      enabled: ${{ parameters.configureTesting }}\r\n      path: 'llvm-project'\r\n      url: 'https://github.com/llvm/llvm-project.git'\r\n  - template: checkout-submodule.yml\r\n    parameters:\r\n      enabled: true\r\n      path: 'boost-math'\r\n      url: 'https://github.com/boostorg/math.git'\r\n  - template: checkout-submodule.yml\r\n    parameters:\r\n      enabled: ${{ parameters.buildBenchmarks }}\r\n      path: 'benchmarks/google-benchmark'\r\n      url: 'https://github.com/google/benchmark.git'\r\n  - template: cmake-configure-build.yml\r\n    parameters:\r\n      hostArch: ${{ parameters.hostArch }}\r\n      targetArch: ${{ parameters.targetArch }}\r\n      targetPlatform: ${{ parameters.targetPlatform }}\r\n      analyzeBuild: ${{ parameters.analyzeBuild }}\r\n      asanBuild: ${{ parameters.asanBuild }}\r\n      configureTesting: ${{ parameters.configureTesting }}\r\n      buildStl: ${{ parameters.buildStl }}\r\n      testsBuildOnly: ${{ parameters.testsBuildOnly }}\r\n  - template: build-benchmarks.yml\r\n    parameters:\r\n      hostArch: ${{ parameters.hostArch }}\r\n      targetArch: ${{ parameters.targetArch }}\r\n      targetPlatform: ${{ parameters.targetPlatform }}\r\n      buildBenchmarks: ${{ parameters.buildBenchmarks }}\r\n      compiler: cl\r\n  - template: build-benchmarks.yml\r\n    parameters:\r\n      hostArch: ${{ parameters.hostArch }}\r\n      targetArch: ${{ parameters.targetArch }}\r\n      targetPlatform: ${{ parameters.targetPlatform }}\r\n      buildBenchmarks: ${{ parameters.buildBenchmarks }}\r\n      compiler: clang-cl\r\n  - template: run-tests.yml\r\n    parameters:\r\n      hostArch: ${{ parameters.hostArch }}\r\n      targetArch: ${{ parameters.targetArch }}\r\n      targetPlatform: ${{ parameters.targetPlatform }}\r\n      testTargets: ${{ parameters.testTargets }}\r\n      runTesting: ${{ parameters.runTesting }}\r\n"
  },
  {
    "path": "azure-devops/build-benchmarks.yml",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nparameters:\r\n- name: hostArch\r\n  type: string\r\n- name: targetArch\r\n  type: string\r\n- name: targetPlatform\r\n  type: string\r\n- name: buildBenchmarks\r\n  type: boolean\r\n- name: compiler\r\n  type: string\r\n\r\nsteps:\r\n- task: PowerShell@2\r\n  displayName: 'Configure Benchmarks for ${{ parameters.compiler }}'\r\n  inputs:\r\n    pwsh: true\r\n    targetType: inline\r\n    script: |\r\n      $PSNativeCommandUseErrorActionPreference = $true\r\n      if (Test-Path -LiteralPath \"$(benchmarkBuildOutputLocation)\\${{ parameters.compiler }}\") {\r\n          Remove-Item -LiteralPath \"$(benchmarkBuildOutputLocation)\\${{ parameters.compiler }}\" -Recurse -Force\r\n      }\r\n      & \"$(launchVsDevShell)\" -HostArch ${{ parameters.hostArch }} -Arch ${{ parameters.targetArch }}\r\n      cmake -G Ninja `\r\n      -DCMAKE_CXX_COMPILER=${{ parameters.compiler }} `\r\n      -DCMAKE_BUILD_TYPE=Release `\r\n      -DSTL_BINARY_DIR=\"$(buildOutputLocation)\" `\r\n      -DVCLIBS_TARGET_ARCHITECTURE=${{ parameters.targetPlatform }} `\r\n      -S $(Build.SourcesDirectory)/benchmarks -B \"$(benchmarkBuildOutputLocation)\\${{ parameters.compiler }}\"\r\n  timeoutInMinutes: 2\r\n  env: { TMP: $(tmpDir), TEMP: $(tmpDir) }\r\n  # TRANSITION, we currently only build the benchmarks with Clang for x64\r\n  condition: >\r\n    and(succeeded(), ${{ parameters.buildBenchmarks }},\r\n      not(and(eq('${{ parameters.compiler }}', 'clang-cl'),\r\n        not(eq('${{ parameters.targetPlatform }}', 'x64')))))\r\n- task: PowerShell@2\r\n  displayName: 'Build Benchmarks for ${{ parameters.compiler }}'\r\n  inputs:\r\n    pwsh: true\r\n    targetType: inline\r\n    script: |\r\n      $PSNativeCommandUseErrorActionPreference = $true\r\n      & \"$(launchVsDevShell)\" -HostArch ${{ parameters.hostArch }} -Arch ${{ parameters.targetArch }}\r\n      cmake --build \"$(benchmarkBuildOutputLocation)\\${{ parameters.compiler }}\"\r\n  timeoutInMinutes: 2\r\n  env: { TMP: $(tmpDir), TEMP: $(tmpDir) }\r\n  # TRANSITION, we currently only build the benchmarks with Clang for x64\r\n  condition: >\r\n    and(succeeded(), ${{ parameters.buildBenchmarks }},\r\n      not(and(eq('${{ parameters.compiler }}', 'clang-cl'),\r\n        not(eq('${{ parameters.targetPlatform }}', 'x64')))))\r\n"
  },
  {
    "path": "azure-devops/checkout-self.yml",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nsteps:\r\n- checkout: self\r\n  clean: true\r\n  submodules: false\r\n  fetchDepth: 1\r\n  fetchTags: false\r\n  retryCountOnTaskFailure: 4\r\n- task: PowerShell@2\r\n  displayName: 'Clean After Checkout'\r\n  inputs:\r\n    pwsh: true\r\n    targetType: inline\r\n    script: |\r\n      $PSNativeCommandUseErrorActionPreference = $true\r\n      git clean --quiet -x -d -f -f\r\n      if (Test-Path -LiteralPath \"$(tmpDir)\") {\r\n          Remove-Item -LiteralPath \"$(tmpDir)\" -Recurse -Force\r\n      }\r\n      mkdir \"$(tmpDir)\" -Force | Out-Null\r\n"
  },
  {
    "path": "azure-devops/checkout-submodule.yml",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nparameters:\r\n- name: enabled\r\n  type: boolean\r\n- name: path\r\n  type: string\r\n- name: url\r\n  type: string\r\nsteps:\r\n- task: PowerShell@2\r\n  displayName: 'Checkout ${{ parameters.path }} Submodule'\r\n  condition: and(succeeded(), ${{ parameters.enabled }})\r\n  retryCountOnTaskFailure: 4\r\n  inputs:\r\n    pwsh: true\r\n    targetType: inline\r\n    script: |\r\n      $PSNativeCommandUseErrorActionPreference = $true\r\n      $submodule = '${{ parameters.path }}'\r\n      $rawStatus = git submodule status --cached $submodule\r\n      $sha = $rawStatus -creplace '^[ \\-+]([0-9a-f]+) .*$', '$1'\r\n      cd $submodule\r\n      git init\r\n      if ((git remote) -eq $null) {\r\n        git remote add submodule-upstream ${{ parameters.url }}\r\n      }\r\n      git fetch --filter=tree:0 --depth=1 submodule-upstream $sha\r\n      if ($submodule -ceq 'llvm-project') {\r\n        git sparse-checkout set --sparse-index libcxx/test libcxx/utils/libcxx llvm/utils/lit\r\n      }\r\n      git reset --quiet --hard FETCH_HEAD\r\n      git clean --quiet -x -d -f -f\r\n"
  },
  {
    "path": "azure-devops/cmake-configure-build.yml",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nparameters:\r\n- name: hostArch\r\n  type: string\r\n- name: targetArch\r\n  type: string\r\n- name: targetPlatform\r\n  type: string\r\n- name: analyzeBuild\r\n  type: boolean\r\n- name: asanBuild\r\n  type: boolean\r\n- name: configureTesting\r\n  type: boolean\r\n- name: buildStl\r\n  type: boolean\r\n- name: testsBuildOnly\r\n  type: boolean\r\n- name: litFlags\r\n  type: object\r\n  default:\r\n    - '--xunit-xml-output=$(buildOutputLocation)/test-results.xml'\r\n    - '--order=lexical'\r\n    - '--num-shards=$(System.TotalJobsInPhase)'\r\n    - '--run-shard=$(System.JobPositionInPhase)'\r\n\r\nsteps:\r\n- task: PowerShell@2\r\n  displayName: 'Configure STL'\r\n  inputs:\r\n    pwsh: true\r\n    targetType: inline\r\n    script: |\r\n      $PSNativeCommandUseErrorActionPreference = $true\r\n      if (Test-Path -LiteralPath \"$(buildOutputLocation)\") {\r\n          Remove-Item -LiteralPath \"$(buildOutputLocation)\" -Recurse -Force\r\n      }\r\n      & \"$(launchVsDevShell)\" -HostArch ${{ parameters.hostArch }} -Arch ${{ parameters.targetArch }}\r\n      cmake -G Ninja `\r\n      -DCMAKE_CXX_COMPILER=cl `\r\n      -DCMAKE_BUILD_TYPE=Release `\r\n      -DLIT_FLAGS=\"${{ join(';', parameters.litFlags) }}\" `\r\n      -DSTL_USE_ANALYZE=${{ parameters.analyzeBuild }} `\r\n      -DSTL_ASAN_BUILD=${{ parameters.asanBuild }} `\r\n      -DCONFIGURE_TESTING=${{ parameters.configureTesting }} `\r\n      -DTESTS_BUILD_ONLY=${{ parameters.testsBuildOnly }} `\r\n      -DVCLIBS_TARGET_ARCHITECTURE=${{ parameters.targetPlatform }} `\r\n      -S $(Build.SourcesDirectory) -B \"$(buildOutputLocation)\"\r\n  timeoutInMinutes: 2\r\n  env: { TMP: $(tmpDir), TEMP: $(tmpDir) }\r\n- task: PowerShell@2\r\n  displayName: 'Build STL'\r\n  inputs:\r\n    pwsh: true\r\n    targetType: inline\r\n    script: |\r\n      $PSNativeCommandUseErrorActionPreference = $true\r\n      & \"$(launchVsDevShell)\" -HostArch ${{ parameters.hostArch }} -Arch ${{ parameters.targetArch }}\r\n      cmake --build \"$(buildOutputLocation)\"\r\n  timeoutInMinutes: 5\r\n  condition: and(succeeded(), ${{ parameters.buildStl }})\r\n  env: { TMP: $(tmpDir), TEMP: $(tmpDir) }\r\n"
  },
  {
    "path": "azure-devops/config.yml",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# Common configuration used by both pipelines\r\n\r\nvariables:\r\n- name: x64SlowPoolName\r\n  value: 'Stl-2026-03-11T0936-x64-Fasv6-Pool'\r\n  readonly: true\r\n- name: x64FastPoolName\r\n  value: 'Stl-2026-03-11T0936-x64-Fasv7-Pool'\r\n  readonly: true\r\n- name: arm64PoolName\r\n  value: 'Stl-2026-03-11T0936-arm64-Dpsv6-Pool'\r\n  readonly: true\r\n- name: poolDemands\r\n  value: 'EnableSpotVM -equals false'\r\n  readonly: true\r\n- name: launchVsDevShell\r\n  value: 'C:\\Program Files\\Microsoft Visual Studio\\18\\Insiders\\Common7\\Tools\\Launch-VsDevShell.ps1'\r\n  readonly: true\r\n- name: tmpDir\r\n  value: 'C:\\stlTemp'\r\n  readonly: true\r\n- name: buildOutputLocation\r\n  value: 'C:\\stlBuild'\r\n  readonly: true\r\n- name: benchmarkBuildOutputLocation\r\n  value: 'C:\\stlBenchmark'\r\n  readonly: true\r\n- name: validationBuildOutputLocation\r\n  value: 'C:\\stlValidation'\r\n  readonly: true\r\n- name: Codeql.SkipTaskAutoInjection\r\n  value: true\r\n  readonly: true\r\n- name: skipComponentGovernanceDetection\r\n  value: true\r\n  readonly: true\r\n"
  },
  {
    "path": "azure-devops/create-1es-hosted-pool.ps1",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n<#\r\n.SYNOPSIS\r\nCreates a 1ES Hosted Pool, set up for the STL's CI.\r\n\r\n.DESCRIPTION\r\nSee https://github.com/microsoft/STL/wiki/Checklist-for-Toolset-Updates for more information.\r\n\r\n.PARAMETER VMSku\r\nThe VM SKU can be Fasv6, Fasv7, or Dpsv6.\r\n#>\r\n[CmdletBinding(PositionalBinding=$false)]\r\nParam(\r\n  [Parameter(Mandatory)][ValidateSet('Fasv6', 'Fasv7', 'Dpsv6')][String]$VMSku\r\n)\r\n\r\n$ErrorActionPreference = 'Stop'\r\n\r\n$CurrentDate = Get-Date\r\n$Timestamp = $CurrentDate.ToString('yyyy-MM-ddTHHmm')\r\n\r\n# | SKU   | Location      | Cores | Notes              |\r\n# |-------|---------------|------:|--------------------|\r\n# | Fasv6 | eastus2       |  4096 |                    |\r\n# | Fasv7 | australiaeast |   740 |                    |\r\n# | Fasv7 | northeurope   |   640 |                    |\r\n# | Fasv7 | southeastasia |   640 |                    |\r\n# | Dpsv6 | eastus2       |  1024 |                    |\r\n# | Dpsv6 | northeurope   |  1024 |                    |\r\n# | Dpsv6 | westcentralus |   672 | Not currently used |\r\n\r\nif ($VMSku -ieq 'Fasv6') {\r\n  $Arch = 'x64'\r\n  $VMSize = 'Standard_F32as_v6'\r\n  $PoolSize = 64\r\n  $AvailableLocations = @('eastus2')\r\n} elseif ($VMSku -ieq 'Fasv7') {\r\n  $Arch = 'x64'\r\n  $VMSize = 'Standard_F32as_v7'\r\n  $PoolSize = 20\r\n  $AvailableLocations = @('australiaeast', 'northeurope', 'southeastasia')\r\n} elseif ($VMSku -ieq 'Dpsv6') {\r\n  $Arch = 'arm64'\r\n  $VMSize = 'Standard_D32ps_v6'\r\n  $PoolSize = 32\r\n  $AvailableLocations = @('eastus2', 'northeurope') # Locations where CPP_STL_GitHub has quota for 1024 cores (32 VMs).\r\n}\r\n\r\n$AvailableLocationIdx = 6 # Increment for each new set of pools, to cycle through the available locations.\r\n$Location = $AvailableLocations[$AvailableLocationIdx % $AvailableLocations.Length]\r\n\r\nif ($Arch -ieq 'x64') {\r\n  $ImagePublisher = 'MicrosoftWindowsServer'\r\n  $ImageOffer = 'WindowsServer'\r\n  $ImageSku = '2025-datacenter-azure-edition'\r\n} else {\r\n  $ImageId = '/SharedGalleries/WindowsServer.1P/Images/2025-datacenter-azure-edition-arm64/Versions/latest'\r\n}\r\n\r\n$ProtoVMName = 'PROTOTYPE'\r\n\r\n$LogFile = \"1es-hosted-pool-$Timestamp-$Arch-$VMSku.log\"\r\n$ProgressActivity = 'Preparing STL CI pool'\r\n$TotalProgress = 38\r\n$CurrentProgress = 1\r\n\r\n<#\r\n.SYNOPSIS\r\nDisplays an updated progress bar.\r\n\r\n.DESCRIPTION\r\nDisplay-ProgressBar increments $CurrentProgress and displays $Status in the progress bar.\r\n\r\n.PARAMETER Status\r\nA message describing the current operation being performed.\r\n#>\r\nfunction Display-ProgressBar {\r\n  [CmdletBinding(PositionalBinding=$false)]\r\n  Param([Parameter(Mandatory)][string]$Status)\r\n\r\n  Write-Progress `\r\n    -Activity $ProgressActivity `\r\n    -Status $Status `\r\n    -PercentComplete (100 * $script:CurrentProgress++ / $TotalProgress)\r\n}\r\n\r\n<#\r\n.SYNOPSIS\r\nGenerates a random password.\r\n\r\n.DESCRIPTION\r\nNew-Password generates a password, randomly, of length $Length, containing\r\nonly alphanumeric characters, underscore, and dash.\r\n\r\n.PARAMETER Length\r\nThe length of the returned password.\r\n#>\r\nfunction New-Password {\r\n  [CmdletBinding(PositionalBinding=$false)]\r\n  Param([int]$Length = 32)\r\n\r\n  # This 64-character alphabet generates 6 bits of entropy per character.\r\n  $alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-'.ToCharArray()\r\n\r\n  [SecureString] $result = [SecureString]::new()\r\n  for ($idx = 0; $idx -lt $Length; $idx++) {\r\n    $result.AppendChar((Get-SecureRandom -InputObject $alphabet))\r\n  }\r\n\r\n  return $result\r\n}\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Silencing breaking change warnings'\r\n\r\n# https://aka.ms/azps-changewarnings\r\n$Env:SuppressAzurePowerShellBreakingChangeWarnings = 'true'\r\n\r\nUpdate-AzConfig `\r\n  -DisplayBreakingChangeWarning $false `\r\n  -Scope 'Process' >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Getting the subscription context'\r\n\r\nif ((Get-AzContext).Subscription.Name -cne 'CPP_STL_GitHub') {\r\n  Write-Error 'Please sign in with `Connect-AzAccount -Subscription ''CPP_STL_GitHub''` before running this script.'\r\n}\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Creating resource group'\r\n\r\n$ResourceGroupName = \"Stl-$Timestamp-$Arch-$VMSku\"\r\n\r\nNew-AzResourceGroup `\r\n  -Name $ResourceGroupName `\r\n  -Location $Location >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Creating credentials'\r\n\r\n$AdminPWSecure = New-Password\r\n$Credential = New-Object System.Management.Automation.PSCredential ('AdminUser', $AdminPWSecure)\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Creating public IP address'\r\n\r\n$PublicIpAddressName = \"$ResourceGroupName-PublicIpAddress\"\r\n$PublicIpAddress = New-AzPublicIpAddress `\r\n  -Name $PublicIpAddressName `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -Location $Location `\r\n  -Sku 'Standard' `\r\n  -AllocationMethod 'Static'\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Creating NAT gateway'\r\n\r\n$NatGatewayName = \"$ResourceGroupName-NatGateway\"\r\n$NatGateway = New-AzNatGateway `\r\n  -Name $NatGatewayName `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -Location $Location `\r\n  -IdleTimeoutInMinutes 10 `\r\n  -Sku 'Standard' `\r\n  -PublicIpAddress $PublicIpAddress\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Creating network security group'\r\n\r\n$NetworkSecurityGroupName = \"$ResourceGroupName-NetworkSecurity\"\r\n$NetworkSecurityGroup = New-AzNetworkSecurityGroup `\r\n  -Name $NetworkSecurityGroupName `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -Location $Location\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Creating virtual network subnet config'\r\n\r\n# TRANSITION, 2026-03-31: \"After March 31, 2026, new virtual networks will default to using private subnets,\r\n# meaning that an explicit outbound method must be enabled in order to reach public endpoints on the Internet\r\n# and within Microsoft.\"\r\n# https://learn.microsoft.com/azure/virtual-network/ip-services/default-outbound-access\r\n# We're using `-DefaultOutboundAccess $false` to opt-in early.\r\n$SubnetName = \"$ResourceGroupName-Subnet\"\r\n$Subnet = New-AzVirtualNetworkSubnetConfig `\r\n  -Name $SubnetName `\r\n  -AddressPrefix '10.0.0.0/16' `\r\n  -DefaultOutboundAccess $false `\r\n  -NatGateway $NatGateway `\r\n  -NetworkSecurityGroup $NetworkSecurityGroup\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Creating virtual network'\r\n\r\n$VirtualNetworkName = \"$ResourceGroupName-Network\"\r\n$VirtualNetwork = New-AzVirtualNetwork `\r\n  -Name $VirtualNetworkName `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -Location $Location `\r\n  -AddressPrefix '10.0.0.0/16' `\r\n  -Subnet $Subnet\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Creating network interface'\r\n\r\n$NicName = \"$ResourceGroupName-NIC\"\r\n$Nic = New-AzNetworkInterface `\r\n  -Name $NicName `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -Location $Location `\r\n  -Subnet $VirtualNetwork.Subnets[0]\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Creating prototype VM config'\r\n\r\nif ($Arch -ieq 'x64') {\r\n  $VM = New-AzVMConfig `\r\n    -VMName $ProtoVMName `\r\n    -VMSize $VMSize `\r\n    -DiskControllerType 'NVMe' `\r\n    -Priority 'Regular'\r\n} else {\r\n  $VM = New-AzVMConfig `\r\n    -VMName $ProtoVMName `\r\n    -VMSize $VMSize `\r\n    -DiskControllerType 'SCSI' `\r\n    -Priority 'Regular' `\r\n    -SecurityType 'TrustedLaunch' `\r\n    -SharedGalleryImageId $ImageId\r\n}\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Setting prototype VM OS'\r\n\r\n$VM = Set-AzVMOperatingSystem `\r\n  -VM $VM `\r\n  -Windows `\r\n  -ComputerName $ProtoVMName `\r\n  -Credential $Credential `\r\n  -ProvisionVMAgent\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Adding prototype VM network interface'\r\n\r\n$VM = Add-AzVMNetworkInterface `\r\n  -VM $VM `\r\n  -Id $Nic.Id\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Setting prototype VM source image'\r\n\r\nif ($Arch -ieq 'x64') {\r\n  $VM = Set-AzVMSourceImage `\r\n    -VM $VM `\r\n    -PublisherName $ImagePublisher `\r\n    -Offer $ImageOffer `\r\n    -Skus $ImageSku `\r\n    -Version 'latest'\r\n} else {\r\n  # We passed -SharedGalleryImageId to New-AzVMConfig above.\r\n}\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Setting prototype VM boot diagnostic'\r\n\r\n$VM = Set-AzVMBootDiagnostic `\r\n  -VM $VM `\r\n  -Disable\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Creating prototype VM'\r\n\r\nNew-AzVm `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -Location $Location `\r\n  -VM $VM >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Getting prototype VM OS disk name'\r\n\r\n$VM = Get-AzVM `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -Name $ProtoVMName\r\n\r\n$PrototypeOSDiskName = $VM.StorageProfile.OsDisk.Name\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Running provision-image.ps1 in VM'\r\n\r\n$ProvisionImageResult = Invoke-AzVMRunCommand `\r\n  -ResourceId $VM.ID `\r\n  -CommandId 'RunPowerShellScript' `\r\n  -ScriptPath \"$PSScriptRoot\\provision-image.ps1\" `\r\n  -Parameter @{ 'Arch' = $Arch; }\r\n\r\nWrite-Host $ProvisionImageResult.value.Message\r\n\r\nif ($ProvisionImageResult.value.Message -cnotmatch 'PROVISION_IMAGE_SUCCEEDED') {\r\n  Write-Host 'provision-image.ps1 failed, stopping VM...'\r\n\r\n  Stop-AzVM `\r\n    -Id $VM.ID `\r\n    -Force >> $LogFile\r\n\r\n  Write-Error \"VM stopped. Remember to delete unusable resource group: $ResourceGroupName\"\r\n}\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Restarting VM'\r\n\r\nRestart-AzVM `\r\n  -Id $VM.ID >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Sleeping after restart'\r\n\r\n# The VM appears to be busy immediately after restarting.\r\n# This workaround waits for a minute before attempting to run sysprep.\r\nStart-Sleep -Seconds 60\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Running sysprep in VM'\r\n\r\nInvoke-AzVMRunCommand `\r\n  -ResourceId $VM.ID `\r\n  -CommandId 'RunPowerShellScript' `\r\n  -ScriptString 'C:\\Windows\\system32\\sysprep\\sysprep.exe /oobe /generalize /mode:vm /shutdown' >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Waiting for VM to shut down'\r\n\r\nwhile ('PowerState/stopped' -notin (Get-AzVM -ResourceId $VM.ID -Status).Statuses.Code) {\r\n  Start-Sleep -Seconds 10\r\n}\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Stopping VM'\r\n\r\nStop-AzVM `\r\n  -Id $VM.ID `\r\n  -Force >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Generalizing VM'\r\n\r\nSet-AzVM `\r\n  -Id $VM.ID `\r\n  -Generalized >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Creating gallery'\r\n\r\n$GalleryName = \"$ResourceGroupName-Gallery\" -replace '-', '_'\r\n$Gallery = New-AzGallery `\r\n  -Location $Location `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -Name $GalleryName\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Granting access to 1ES Resource Management'\r\n\r\n$ServicePrincipalObjectId = (Get-AzADServicePrincipal -DisplayName '1ES Resource Management' -First 1).Id\r\n\r\nNew-AzRoleAssignment `\r\n  -ObjectId $ServicePrincipalObjectId `\r\n  -RoleDefinitionName 'Reader' `\r\n  -Scope $Gallery.Id >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Creating image definition'\r\n\r\n$ImageDefinitionName = \"$ResourceGroupName-ImageDefinition\"\r\n$FeatureTrustedLaunch = @{ Name = 'SecurityType'; Value = 'TrustedLaunch'; }\r\nif ($Arch -ieq 'x64') {\r\n  $FeatureNVMe = @{ Name = 'DiskControllerTypes'; Value = 'SCSI, NVMe'; }\r\n} else {\r\n  $FeatureNVMe = @{ Name = 'DiskControllerTypes'; Value = 'SCSI'; }\r\n}\r\n$ImageDefinitionFeatures = @($FeatureTrustedLaunch, $FeatureNVMe)\r\nNew-AzGalleryImageDefinition `\r\n  -Location $Location `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -GalleryName $GalleryName `\r\n  -Name $ImageDefinitionName `\r\n  -OsState 'Generalized' `\r\n  -OsType 'Windows' `\r\n  -Publisher 'StlPublisher' `\r\n  -Offer 'StlOffer' `\r\n  -Sku 'StlSku' `\r\n  -Architecture $Arch `\r\n  -Feature $ImageDefinitionFeatures `\r\n  -HyperVGeneration 'V2' >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Creating image version'\r\n\r\n$ImageVersionName = $CurrentDate.ToString('yyyyMMdd.HHmm.0')\r\n$ImageVersion = New-AzGalleryImageVersion `\r\n  -Location $Location `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -GalleryName $GalleryName `\r\n  -GalleryImageDefinitionName $ImageDefinitionName `\r\n  -Name $ImageVersionName `\r\n  -SourceImageVMId $VM.ID\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Registering CloudTest resource provider'\r\n\r\nRegister-AzResourceProvider `\r\n  -ProviderNamespace 'Microsoft.CloudTest' >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Creating 1ES image'\r\n\r\n$ImageName = \"$ResourceGroupName-Image\"\r\nNew-AzResource `\r\n  -Location $Location `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -ResourceType 'Microsoft.CloudTest/Images' `\r\n  -ResourceName $ImageName `\r\n  -Properties @{ 'imageType' = 'SharedImageGallery'; 'resourceId' = $ImageVersion.Id; } `\r\n  -Force >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Creating 1ES Hosted Pool'\r\n\r\n$PoolName = \"$ResourceGroupName-Pool\"\r\n\r\n$PoolProperties = @{\r\n  'organization' = 'https://dev.azure.com/vclibs'\r\n  'projects' = @('STL')\r\n  'sku' = @{ 'name' = $VMSize; 'tier' = 'StandardSSD'; 'enableSpot' = $false; }\r\n  'images' = @(@{ 'imageName' = $ImageName; 'poolBufferPercentage' = '100'; })\r\n  'maxPoolSize' = $PoolSize\r\n  'agentProfile' = @{ 'type' = 'Stateless'; }\r\n}\r\n\r\nNew-AzResource `\r\n  -Location $Location `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -ResourceType 'Microsoft.CloudTest/hostedpools' `\r\n  -ResourceName $PoolName `\r\n  -Properties $PoolProperties `\r\n  -Force >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Deleting unused VM'\r\n\r\nRemove-AzVM `\r\n  -Id $VM.ID `\r\n  -Force >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Deleting unused disk'\r\n\r\nRemove-AzDisk `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -DiskName $PrototypeOSDiskName `\r\n  -Force >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Deleting unused network interface'\r\n\r\nRemove-AzNetworkInterface `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -Name $NicName `\r\n  -Force >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Deleting unused virtual network'\r\n\r\nRemove-AzVirtualNetwork `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -Name $VirtualNetworkName `\r\n  -Force >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Deleting unused network security group'\r\n\r\nRemove-AzNetworkSecurityGroup `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -Name $NetworkSecurityGroupName `\r\n  -Force >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Deleting unused NAT gateway'\r\n\r\nRemove-AzNatGateway `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -Name $NatGatewayName `\r\n  -Force >> $LogFile\r\n\r\n####################################################################################################\r\nDisplay-ProgressBar -Status 'Deleting unused public IP address'\r\n\r\nRemove-AzPublicIpAddress `\r\n  -ResourceGroupName $ResourceGroupName `\r\n  -Name $PublicIpAddressName `\r\n  -Force >> $LogFile\r\n\r\n####################################################################################################\r\nWrite-Progress -Activity $ProgressActivity -Completed\r\n\r\nWrite-Host \"Elapsed time: $(((Get-Date) - $CurrentDate).ToString('hh\\:mm\\:ss'))\"\r\n\r\nif ((Get-AzResource -ResourceGroupName $ResourceGroupName -Name $PoolName) -ne $null) {\r\n  Write-Host \"Created pool: $PoolName\"\r\n} else {\r\n  Write-Error \"Failed to create pool: $PoolName\"\r\n}\r\n"
  },
  {
    "path": "azure-devops/format-validation.yml",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# run the `validator` tool, and ensure code is properly clang-formatted\r\n\r\njobs:\r\n- job: Code_Format_Validation\r\n  timeoutInMinutes: 5\r\n  displayName: 'Validation'\r\n  steps:\r\n    - template: checkout-self.yml\r\n    - task: PowerShell@2\r\n      displayName: 'Build Validation Tools'\r\n      inputs:\r\n        pwsh: true\r\n        targetType: inline\r\n        script: |\r\n          $PSNativeCommandUseErrorActionPreference = $true\r\n          if (Test-Path -LiteralPath \"$(validationBuildOutputLocation)\") {\r\n              Remove-Item -LiteralPath \"$(validationBuildOutputLocation)\" -Recurse -Force\r\n          }\r\n          & \"$(launchVsDevShell)\" -HostArch x64 -Arch x64\r\n          cmake -G Ninja -S $(Build.SourcesDirectory)/tools -B \"$(validationBuildOutputLocation)\"\r\n          cmake --build \"$(validationBuildOutputLocation)\"\r\n      timeoutInMinutes: 5\r\n      env: { TMP: $(tmpDir), TEMP: $(tmpDir) }\r\n    - task: PowerShell@2\r\n      displayName: 'clang-format Files'\r\n      inputs:\r\n        pwsh: true\r\n        targetType: inline\r\n        script: |\r\n          $PSNativeCommandUseErrorActionPreference = $true\r\n          & \"$(launchVsDevShell)\" -HostArch x64 -Arch x64\r\n          cmake --build \"$(validationBuildOutputLocation)\" --target run-format\r\n      timeoutInMinutes: 5\r\n      env: { TMP: $(tmpDir), TEMP: $(tmpDir) }\r\n    - task: PowerShell@2\r\n      displayName: 'Validate Files'\r\n      inputs:\r\n        pwsh: true\r\n        targetType: inline\r\n        script: |\r\n          $PSNativeCommandUseErrorActionPreference = $true\r\n          & \"$(launchVsDevShell)\" -HostArch x64 -Arch x64\r\n          cmake --build \"$(validationBuildOutputLocation)\" --target run-validate\r\n      timeoutInMinutes: 2\r\n      env: { TMP: $(tmpDir), TEMP: $(tmpDir) }\r\n    - task: PowerShell@2\r\n      displayName: 'Create Diff'\r\n      inputs:\r\n        pwsh: true\r\n        targetType: inline\r\n        script: |\r\n          $PSNativeCommandUseErrorActionPreference = $true\r\n          $TempSubDir = Join-Path ([System.IO.Path]::GetTempPath()) ([System.IO.Path]::GetRandomFileName())\r\n          mkdir $TempSubDir -Force | Out-Null\r\n          $DiffFile = Join-Path $TempSubDir 'format.diff'\r\n          git diff --ignore-submodules > $DiffFile\r\n          if ((Get-Item -LiteralPath $DiffFile).Length -ne 0) {\r\n            $message = @(\r\n              '##vso[task.logissue type=error]The files in the repo need to be properly formatted.'\r\n              ''\r\n              '##[section]To fix this, you can clang-format the entire repo with:'\r\n              '  cmake --preset x64'\r\n              '  cmake --build --preset x64 --target format'\r\n              ''\r\n              '##[section]Please avoid this in the future by configuring your editor to format-on-save.'\r\n              ''\r\n              '##[section]View expected formatting:'\r\n              '##[group]  >>>>> Click this line to expand the diff: <<<<<'\r\n              Get-Content -LiteralPath $DiffFile -Raw\r\n              '##[endgroup]'\r\n              ''\r\n              '##[section]You can also download this as format.diff and apply it with `git apply`:'\r\n              '  1. Click the failed Validation job (upper left, marked with a red X)'\r\n              '  2. Click \"1 artifact produced\"'\r\n              '  3. Click the \">\" chevron to the left of \"format-artifact\"'\r\n              '  4. Hover over \"format.diff\"'\r\n              '  5. Click the three dots that appear on the right'\r\n              '  6. Click \"Download artifacts\"'\r\n              ''\r\n              \"##vso[artifact.upload artifactname=format-artifact]$DiffFile\"\r\n              '##vso[task.complete result=Failed]'\r\n            )\r\n            Write-Host ($message -join \"`n\")\r\n          }\r\n      condition: succeededOrFailed()\r\n      env: { TMP: $(tmpDir), TEMP: $(tmpDir) }\r\n"
  },
  {
    "path": "azure-devops/provision-image.ps1",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n<#\r\n.SYNOPSIS\r\nSets up a virtual machine to be an image for a hosted pool.\r\n\r\n.DESCRIPTION\r\ncreate-1es-hosted-pool.ps1 (running on an STL maintainer's machine) creates a \"prototype\" virtual machine in Azure,\r\nthen runs provision-image.ps1 on that VM. This gives us full control over what we install for building and testing\r\nthe STL. After provision-image.ps1 is done, create-1es-hosted-pool.ps1 makes an image of the prototype VM,\r\ncreates a 1ES Hosted Pool that will spin up copies of the image as worker VMs, and finally deletes the prototype VM.\r\n\r\n.PARAMETER Arch\r\nThe architecture can be either x64 or arm64.\r\n#>\r\n[CmdletBinding(PositionalBinding=$false)]\r\nParam(\r\n  [Parameter(Mandatory)][ValidateSet('x64', 'arm64')][String]$Arch\r\n)\r\n\r\n$ErrorActionPreference = 'Stop'\r\n$ProgressPreference = 'SilentlyContinue'\r\n\r\nif ($Env:COMPUTERNAME -cne 'PROTOTYPE') {\r\n  Write-Error 'You should not run provision-image.ps1 on your local machine.'\r\n}\r\n\r\nif ($Arch -ieq 'x64') {\r\n  Write-Host 'Provisioning x64.'\r\n  $Provisioning_x64 = $true\r\n} else {\r\n  Write-Host 'Provisioning ARM64.'\r\n  $Provisioning_x64 = $false\r\n}\r\n\r\n$VisualStudioWorkloads = @(\r\n  'Microsoft.VisualStudio.Component.VC.ASAN',\r\n  'Microsoft.VisualStudio.Component.VC.CMake.Project',\r\n  'Microsoft.VisualStudio.Component.VC.CoreIde',\r\n  'Microsoft.VisualStudio.Component.VC.Llvm.Clang',\r\n  'Microsoft.VisualStudio.Component.VC.Preview.ARM64',\r\n  'Microsoft.VisualStudio.Component.VC.Preview.CLI.Support',\r\n  'Microsoft.VisualStudio.Component.VC.Preview.Tools.x86.x64',\r\n  'Microsoft.VisualStudio.Component.Windows11SDK.26100'\r\n)\r\n\r\n# https://learn.microsoft.com/visualstudio/install/visual-studio-on-arm-devices\r\n# \"There's a single installer for both Visual Studio x64 and Visual Studio Arm64 architectures.\r\n# The Visual Studio Installer detects whether the system architecture is Arm64.\r\n# If it is, the installer downloads and installs the Arm64 version of Visual Studio.\"\r\n$VisualStudioUrl = 'https://aka.ms/vs/18/insiders/vs_Community.exe'\r\n$VisualStudioArgs = @('--quiet', '--norestart', '--wait', '--nocache')\r\nforeach ($workload in $VisualStudioWorkloads) {\r\n  $VisualStudioArgs += '--add'\r\n  $VisualStudioArgs += $workload\r\n}\r\n\r\n# https://github.com/PowerShell/PowerShell/releases/latest\r\nif ($Provisioning_x64) {\r\n  $PowerShellUrl = 'https://github.com/PowerShell/PowerShell/releases/download/v7.5.4/PowerShell-7.5.4-win-x64.msi'\r\n} else {\r\n  $PowerShellUrl = 'https://github.com/PowerShell/PowerShell/releases/download/v7.5.4/PowerShell-7.5.4-win-arm64.msi'\r\n}\r\n$PowerShellArgs = @('/quiet', '/norestart')\r\n\r\n# https://www.python.org\r\nif ($Provisioning_x64) {\r\n  $PythonUrl = 'https://www.python.org/ftp/python/3.14.3/python-3.14.3-amd64.exe'\r\n} else {\r\n  $PythonUrl = 'https://www.python.org/ftp/python/3.14.3/python-3.14.3-arm64.exe'\r\n}\r\n$PythonArgs = @('/quiet', 'InstallAllUsers=1', 'PrependPath=1', 'CompileAll=1', 'Include_doc=0')\r\n\r\n# https://developer.nvidia.com/cuda-toolkit\r\nif ($Provisioning_x64) {\r\n  $CudaUrl = 'https://developer.download.nvidia.com/compute/cuda/13.2.0/local_installers/cuda_13.2.0_windows.exe'\r\n} else {\r\n  $CudaUrl = 'CUDA is not installed for ARM64'\r\n}\r\n$CudaArgs = @('-s', '-n')\r\n\r\n<#\r\n.SYNOPSIS\r\nDownload and install a component.\r\n\r\n.DESCRIPTION\r\nDownloadAndInstall downloads an executable from the given URL, and runs it with the given command-line arguments.\r\n\r\n.PARAMETER Name\r\nThe name of the component, to be displayed in logging messages.\r\n\r\n.PARAMETER Url\r\nThe URL of the installer.\r\n\r\n.PARAMETER Args\r\nThe command-line arguments to pass to the installer.\r\n#>\r\nFunction DownloadAndInstall {\r\n  [CmdletBinding(PositionalBinding=$false)]\r\n  Param(\r\n    [Parameter(Mandatory)][String]$Name,\r\n    [Parameter(Mandatory)][String]$Url,\r\n    [Parameter(Mandatory)][String[]]$Args\r\n  )\r\n\r\n  try {\r\n    Write-Host \"Downloading $Name...\"\r\n    $tempPath = 'C:\\installerTemp'\r\n    mkdir $tempPath -Force | Out-Null\r\n    $fileName = [uri]::new($Url).Segments[-1]\r\n    $installerPath = Join-Path $tempPath $fileName\r\n    curl.exe -L -o $installerPath -s -S $Url\r\n\r\n    Write-Host \"Installing $Name...\"\r\n    $proc = Start-Process -FilePath $installerPath -ArgumentList $Args -Wait -PassThru\r\n    $exitCode = $proc.ExitCode\r\n\r\n    if ($exitCode -eq 0) {\r\n      Write-Host 'Installation successful!'\r\n    } elseif ($exitCode -eq 3010) {\r\n      Write-Host 'Installation successful! Exited with 3010 (ERROR_SUCCESS_REBOOT_REQUIRED).'\r\n    } else {\r\n      Write-Error \"Installation failed! Exited with $exitCode.\"\r\n    }\r\n  } catch {\r\n    Write-Error \"Installation failed! Exception: $($_.Exception.Message)\"\r\n  }\r\n\r\n  try {\r\n    # Briefly sleep before removing the installer, attempting to avoid \"Access to the path '$installerPath' is denied.\"\r\n    Start-Sleep -Seconds 5\r\n    Remove-Item -Path $installerPath\r\n  } catch {\r\n    Write-Error \"Remove-Item failed! Exception: $($_.Exception.Message)\"\r\n  }\r\n}\r\n\r\n<#\r\n.SYNOPSIS\r\nEnables native NVMe support.\r\n\r\n.DESCRIPTION\r\nNative NVMe support is opt-in for Windows Server 2025.\r\nTRANSITION, this will be enabled by default for the next version of Windows Server.\r\n#>\r\nFunction EnableNativeNVMe {\r\n  $registryKey = 'HKLM:\\SYSTEM\\CurrentControlSet\\Policies\\Microsoft\\FeatureManagement\\Overrides'\r\n  $valueName = '1176759950'\r\n  $valueData = 1\r\n\r\n  if (!(Test-Path $registryKey)) {\r\n    New-Item -Path $registryKey -Force | Out-Null\r\n  }\r\n\r\n  New-ItemProperty -Path $registryKey -Name $valueName -Value $valueData -PropertyType DWORD -Force | Out-Null\r\n}\r\n\r\nWrite-Host \"Old PowerShell version: $($PSVersionTable.PSVersion)\"\r\n\r\n# Print the Windows version, so we can verify whether Patch Tuesday has been picked up.\r\n# Skip a blank line to improve the output.\r\n(cmd /c ver)[1]\r\n\r\nDownloadAndInstall   -Name 'PowerShell'    -Url $PowerShellUrl   -Args $PowerShellArgs\r\nDownloadAndInstall   -Name 'Python'        -Url $PythonUrl       -Args $PythonArgs\r\nDownloadAndInstall   -Name 'Visual Studio' -Url $VisualStudioUrl -Args $VisualStudioArgs\r\nif ($Provisioning_x64) {\r\n  DownloadAndInstall -Name 'CUDA'          -Url $CudaUrl         -Args $CudaArgs\r\n}\r\n\r\nWrite-Host 'Setting environment variables...'\r\n\r\n# The STL's PR/CI builds are totally unrepresentative of customer usage.\r\n[Environment]::SetEnvironmentVariable('VSCMD_SKIP_SENDTELEMETRY', '1', 'Machine')\r\n\r\nWrite-Host 'Enabling long paths...'\r\n\r\n# https://learn.microsoft.com/windows/win32/fileio/maximum-file-path-limitation\r\nNew-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\FileSystem' -Name 'LongPathsEnabled' `\r\n  -Value 1 -PropertyType DWORD -Force | Out-Null\r\n\r\nif ($Provisioning_x64) {\r\n  Write-Host 'Enabling native NVMe...'\r\n  EnableNativeNVMe\r\n}\r\n\r\n# TRANSITION, patch Launch-VsDevShell.ps1 to pass `-vcvars_ver=preview` before a proper parameter is available.\r\nWrite-Host 'Patching Launch-VsDevShell.ps1...'\r\n$launchVsDevShell = 'C:\\Program Files\\Microsoft Visual Studio\\18\\Insiders\\Common7\\Tools\\Launch-VsDevShell.ps1'\r\n$paramRegex = 'VsInstanceId = \\$instanceId'\r\n$paramSubst = '$&; DevCmdArguments = \"-vcvars_ver=preview\";'\r\n(Get-Content -Raw $launchVsDevShell) -creplace $paramRegex, $paramSubst | Set-Content -NoNewLine $launchVsDevShell\r\n\r\n# Tell create-1es-hosted-pool.ps1 that we succeeded.\r\nWrite-Host 'PROVISION_IMAGE_SUCCEEDED'\r\n\r\nexit\r\n"
  },
  {
    "path": "azure-devops/run-tests.yml",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nparameters:\r\n- name: hostArch\r\n  type: string\r\n- name: targetArch\r\n  type: string\r\n- name: targetPlatform\r\n  type: string\r\n- name: testTargets\r\n  type: string\r\n- name: runTesting\r\n  type: boolean\r\nsteps:\r\n- task: PowerShell@2\r\n  displayName: 'Run Tests'\r\n  inputs:\r\n    pwsh: true\r\n    workingDirectory: $(buildOutputLocation)\r\n    targetType: inline\r\n    script: |\r\n      $PSNativeCommandUseErrorActionPreference = $true\r\n      & \"$(launchVsDevShell)\" -HostArch ${{ parameters.hostArch }} -Arch ${{ parameters.targetArch }}\r\n      ninja --verbose -k 0 ${{ parameters.testTargets }}\r\n  timeoutInMinutes: 30\r\n  condition: and(succeeded(), ${{ parameters.runTesting }})\r\n  env: { TMP: $(tmpDir), TEMP: $(tmpDir) }\r\n- task: PublishTestResults@2\r\n  displayName: 'Publish Tests'\r\n  timeoutInMinutes: 5\r\n  condition: and(succeededOrFailed(), ${{ parameters.runTesting }})\r\n  inputs:\r\n    searchFolder: $(buildOutputLocation)\r\n    testResultsFormat: JUnit\r\n    testResultsFiles: '**/test-results.xml'\r\n    testRunTitle: 'test-${{ parameters.targetPlatform }}-$(System.JobPositionInPhase)'\r\n- publish: $(buildOutputLocation)/test-results.xml\r\n  artifact: '${{ parameters.targetPlatform }}-$(System.JobPositionInPhase)-xml-$(System.JobId)'\r\n  condition: and(failed(), ${{ parameters.runTesting }})\r\n  displayName: 'Publish XML Artifact'\r\n"
  },
  {
    "path": "azure-pipelines.yml",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# Build STL targeting x64, x86, arm64, arm64ec\r\n\r\nvariables:\r\n  - template: azure-devops/config.yml\r\n\r\npr:\r\n  drafts: false\r\n\r\nstages:\r\n  - stage: Code_Format\r\n    dependsOn: []\r\n    displayName: 'Code Format'\r\n    pool:\r\n      name: ${{ variables.x64SlowPoolName }}\r\n      demands: ${{ variables.poolDemands }}\r\n    jobs:\r\n      - template: azure-devops/format-validation.yml\r\n\r\n  - stage: Build_x64\r\n    dependsOn: []\r\n    displayName: 'Build x64'\r\n    pool:\r\n      name: ${{ variables.x64SlowPoolName }}\r\n      demands: ${{ variables.poolDemands }}\r\n    jobs:\r\n      - template: azure-devops/build-and-test.yml\r\n        parameters:\r\n          hostArch: x64\r\n          targetArch: x64\r\n          targetPlatform: x64\r\n          analyzeBuild: true\r\n          buildBenchmarks: true\r\n          numShards: 1\r\n          configureTesting: false\r\n          runTesting: false\r\n\r\n  - stage: Build_x86\r\n    dependsOn: []\r\n    displayName: 'Build x86'\r\n    pool:\r\n      name: ${{ variables.x64SlowPoolName }}\r\n      demands: ${{ variables.poolDemands }}\r\n    jobs:\r\n      - template: azure-devops/build-and-test.yml\r\n        parameters:\r\n          hostArch: x86\r\n          targetArch: x86\r\n          targetPlatform: x86\r\n          analyzeBuild: true\r\n          buildBenchmarks: true\r\n          numShards: 1\r\n          configureTesting: false\r\n          runTesting: false\r\n\r\n  - stage: Build_ARM64_Cross\r\n    dependsOn: []\r\n    displayName: 'Build ARM64 (Cross)'\r\n    pool:\r\n      name: ${{ variables.x64SlowPoolName }}\r\n      demands: ${{ variables.poolDemands }}\r\n    jobs:\r\n      - template: azure-devops/build-and-test.yml\r\n        parameters:\r\n          hostArch: x64\r\n          targetArch: arm64\r\n          targetPlatform: arm64\r\n          analyzeBuild: true\r\n          buildBenchmarks: true\r\n          numShards: 1\r\n          configureTesting: false\r\n          runTesting: false\r\n\r\n  - stage: Build_ARM64EC_Cross\r\n    dependsOn: []\r\n    displayName: 'Build ARM64EC (Cross)'\r\n    pool:\r\n      name: ${{ variables.x64SlowPoolName }}\r\n      demands: ${{ variables.poolDemands }}\r\n    jobs:\r\n      - template: azure-devops/build-and-test.yml\r\n        parameters:\r\n          hostArch: x64\r\n          targetArch: arm64\r\n          targetPlatform: arm64ec\r\n          analyzeBuild: true\r\n          buildBenchmarks: true\r\n          numShards: 1\r\n          configureTesting: false\r\n          runTesting: false\r\n\r\n  # This ARM64-native build will detect problems with the ARM64 pool as early as possible.\r\n  # The stage dependencies are structured to optimize the critical path.\r\n  - stage: Build_ARM64_Native\r\n    dependsOn: []\r\n    displayName: 'Build ARM64 (Native)'\r\n    pool:\r\n      name: ${{ variables.arm64PoolName }}\r\n      demands: ${{ variables.poolDemands }}\r\n    jobs:\r\n      - template: azure-devops/build-and-test.yml\r\n        parameters:\r\n          hostArch: arm64\r\n          targetArch: arm64\r\n          targetPlatform: arm64\r\n          analyzeBuild: true\r\n          buildBenchmarks: true\r\n          numShards: 1\r\n          configureTesting: false\r\n          runTesting: false\r\n\r\n  - stage: Configure_Tests\r\n    dependsOn: []\r\n    displayName: 'Configure Tests'\r\n    pool:\r\n      name: ${{ variables.x64SlowPoolName }}\r\n      demands: ${{ variables.poolDemands }}\r\n    jobs:\r\n      - template: azure-devops/build-and-test.yml\r\n        parameters:\r\n          hostArch: x64\r\n          targetArch: x64\r\n          targetPlatform: x64\r\n          numShards: 1\r\n          buildStl: false\r\n          runTesting: false\r\n\r\n  - stage: Test_x64\r\n    dependsOn:\r\n      - Code_Format\r\n      - Build_x64\r\n      - Build_x86\r\n      - Build_ARM64_Cross\r\n      - Build_ARM64EC_Cross\r\n      - Configure_Tests\r\n    displayName: 'Test x64'\r\n    pool:\r\n      name: ${{ variables.x64FastPoolName }}\r\n      demands: ${{ variables.poolDemands }}\r\n    jobs:\r\n      - template: azure-devops/build-and-test.yml\r\n        parameters:\r\n          hostArch: x64\r\n          targetArch: x64\r\n          targetPlatform: x64\r\n\r\n  - stage: Test_x86\r\n    dependsOn: Test_x64\r\n    displayName: 'Test x86'\r\n    pool:\r\n      name: ${{ variables.x64SlowPoolName }}\r\n      demands: ${{ variables.poolDemands }}\r\n    jobs:\r\n      - template: azure-devops/build-and-test.yml\r\n        parameters:\r\n          hostArch: x86\r\n          targetArch: x86\r\n          targetPlatform: x86\r\n\r\n  - stage: Test_ARM64\r\n    dependsOn:\r\n      - Build_ARM64_Native\r\n      - Test_x64\r\n    displayName: 'Test ARM64'\r\n    pool:\r\n      name: ${{ variables.arm64PoolName }}\r\n      demands: ${{ variables.poolDemands }}\r\n    jobs:\r\n      - template: azure-devops/build-and-test.yml\r\n        parameters:\r\n          hostArch: arm64\r\n          targetArch: arm64\r\n          targetPlatform: arm64\r\n\r\n  - stage: Test_ARM64EC\r\n    dependsOn:\r\n      - Build_ARM64_Native\r\n      - Test_x64\r\n    displayName: 'Test ARM64EC'\r\n    pool:\r\n      name: ${{ variables.arm64PoolName }}\r\n      demands: ${{ variables.poolDemands }}\r\n    jobs:\r\n      - template: azure-devops/build-and-test.yml\r\n        parameters:\r\n          hostArch: arm64\r\n          targetArch: arm64\r\n          targetPlatform: arm64ec\r\n"
  },
  {
    "path": "benchmarks/CMakeLists.txt",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\ncmake_minimum_required(VERSION 4.2.3)\r\nproject(msvc_standard_libraries_benchmarks LANGUAGES CXX)\r\n\r\nif(DEFINED STL_BINARY_DIR)\r\n    cmake_path(ABSOLUTE_PATH STL_BINARY_DIR\r\n        BASE_DIRECTORY \"${CMAKE_CURRENT_SOURCE_DIR}/..\"\r\n        NORMALIZE\r\n    )\r\n    if(NOT EXISTS \"${STL_BINARY_DIR}/out\")\r\n        message(FATAL_ERROR \"Invalid STL_BINARY_DIR '${STL_BINARY_DIR}'\")\r\n    endif()\r\n\r\n    if(NOT DEFINED VCLIBS_TARGET_ARCHITECTURE)\r\n        set(VCLIBS_TARGET_ARCHITECTURE \"${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}\")\r\n    endif()\r\n\r\n    string(TOLOWER \"${VCLIBS_TARGET_ARCHITECTURE}\" VCLIBS_TARGET_ARCHITECTURE)\r\n\r\n    if(VCLIBS_TARGET_ARCHITECTURE STREQUAL \"x86\")\r\n        set(VCLIBS_I386_OR_AMD64 \"i386\")\r\n    elseif(VCLIBS_TARGET_ARCHITECTURE STREQUAL \"x64\")\r\n        set(VCLIBS_I386_OR_AMD64 \"amd64\")\r\n    elseif(VCLIBS_TARGET_ARCHITECTURE STREQUAL \"arm64\")\r\n        set(VCLIBS_I386_OR_AMD64 \"arm64\")\r\n    elseif(VCLIBS_TARGET_ARCHITECTURE STREQUAL \"arm64ec\")\r\n        set(VCLIBS_I386_OR_AMD64 \"arm64ec\")\r\n        add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/arm64EC>)\r\n        add_link_options(\"/machine:arm64ec\")\r\n        set(CMAKE_STATIC_LINKER_FLAGS \"/machine:arm64ec\")\r\n    else()\r\n        message(FATAL_ERROR \"Could not determine target architecture: VCLIBS_TARGET_ARCHITECTURE: ${VCLIBS_TARGET_ARCHITECTURE}\")\r\n    endif()\r\n\r\n    include_directories(BEFORE \"${STL_BINARY_DIR}/out/inc\")\r\n    link_directories(BEFORE \"${STL_BINARY_DIR}/out/lib/${VCLIBS_I386_OR_AMD64}\")\r\nelse()\r\n    message(WARNING \"STL_BINARY_DIR not set; benchmarking the globally installed standard library\")\r\nendif()\r\n\r\nset(STL_BENCHMARK_MSVC_RUNTIME_LIBRARY\r\n    MultiThreaded\r\n    CACHE STRING \"The flavor of the standard library to use; see https://cmake.org/cmake/help/latest/variable/CMAKE_MSVC_RUNTIME_LIBRARY.html for more information.\")\r\nset_property(CACHE STL_BENCHMARK_MSVC_RUNTIME_LIBRARY\r\n    PROPERTY STRINGS\r\n    \"MultiThreaded;MultiThreadedDLL;MultiThreadedDebug;MultiThreadedDebugDLL\"\r\n)\r\nset(CMAKE_MSVC_RUNTIME_LIBRARY \"${STL_BENCHMARK_MSVC_RUNTIME_LIBRARY}\")\r\n\r\n# Building the benchmarks as Release optimizes them with `/O2 /Ob2`.\r\n# Compiling with `/Zi` and linking with `/DEBUG` below makes profiling possible.\r\n# (RelWithDebInfo would use `/O2 /Ob1 /Zi`.) See GH-4496.\r\nset(CMAKE_BUILD_TYPE Release)\r\n\r\n# /utf-8 affects <format>.\r\nadd_compile_options(\"$<$<COMPILE_LANGUAGE:CXX>:/Zi;/nologo;/diagnostics:caret;/W4;/WX;/w14265;/w15038;/w15262;/utf-8>\")\r\nadd_compile_options(\"$<$<COMPILE_LANG_AND_ID:CXX,MSVC>:/Zc:preprocessor>\") # TRANSITION, LLVM-48220 clang-cl: ignore /Zc:preprocessor\r\n\r\nadd_link_options(\"/DEBUG\")\r\n\r\nif(NOT EXISTS \"${CMAKE_CURRENT_LIST_DIR}/google-benchmark/.git\")\r\n    message(FATAL_ERROR \"google-benchmark is not checked out; make sure to run\\n    git submodule update --init benchmarks/google-benchmark\")\r\nendif()\r\n\r\nset(BENCHMARK_ENABLE_DOXYGEN OFF)\r\nset(BENCHMARK_ENABLE_INSTALL OFF)\r\nset(BENCHMARK_ENABLE_TESTING OFF)\r\n\r\nadd_subdirectory(google-benchmark EXCLUDE_FROM_ALL)\r\n\r\nset(benchmark_headers\r\n    \"inc/lorem.hpp\"\r\n    \"inc/skewed_allocator.hpp\"\r\n    \"inc/udt.hpp\"\r\n    \"inc/utility.hpp\"\r\n)\r\n\r\nfunction(add_benchmark name)\r\n    cmake_parse_arguments(PARSE_ARGV 1 \"arg\" \"\" \"CXX_STANDARD\" \"\")\r\n\r\n    if(NOT DEFINED arg_CXX_STANDARD)\r\n        set(arg_CXX_STANDARD 23)\r\n    elseif(NOT arg_CXX_STANDARD MATCHES \"^[0-9][0-9]$\")\r\n        message(FATAL_ERROR \"Unexpected value for CXX_STANDARD: ${arg_CXX_STANDARD}\")\r\n    endif()\r\n\r\n    if(NOT DEFINED arg_UNPARSED_ARGUMENTS)\r\n        message(FATAL_ERROR \"benchmark ${name} does not have any source files\")\r\n    endif()\r\n\r\n    add_executable(benchmark-${name}\r\n        ${benchmark_headers}\r\n        ${arg_UNPARSED_ARGUMENTS}\r\n    )\r\n\r\n    target_compile_features(benchmark-${name} PRIVATE cxx_std_${arg_CXX_STANDARD})\r\n    target_include_directories(benchmark-${name} PRIVATE inc)\r\n    target_link_libraries(benchmark-${name} PRIVATE benchmark::benchmark)\r\nendfunction()\r\n\r\nadd_benchmark(adjacent_difference src/adjacent_difference.cpp)\r\nadd_benchmark(adjacent_find src/adjacent_find.cpp)\r\nadd_benchmark(any_swap src/any_swap.cpp)\r\nadd_benchmark(bitset_from_string src/bitset_from_string.cpp)\r\nadd_benchmark(bitset_to_string src/bitset_to_string.cpp)\r\nadd_benchmark(charconv_floats src/charconv_floats.cpp)\r\nadd_benchmark(efficient_nonlocking_print src/efficient_nonlocking_print.cpp)\r\nadd_benchmark(filesystem src/filesystem.cpp)\r\nadd_benchmark(fill src/fill.cpp)\r\nadd_benchmark(find_and_count src/find_and_count.cpp)\r\nadd_benchmark(find_first_of src/find_first_of.cpp)\r\nadd_benchmark(flat_meow_assign src/flat_meow_assign.cpp)\r\nadd_benchmark(has_single_bit src/has_single_bit.cpp)\r\nadd_benchmark(includes src/includes.cpp)\r\nadd_benchmark(integer_to_string src/integer_to_string.cpp)\r\nadd_benchmark(iota src/iota.cpp)\r\nadd_benchmark(is_sorted_until src/is_sorted_until.cpp)\r\nadd_benchmark(locale_classic src/locale_classic.cpp)\r\nadd_benchmark(locate_zone src/locate_zone.cpp)\r\nadd_benchmark(minmax_element src/minmax_element.cpp)\r\nadd_benchmark(mismatch src/mismatch.cpp)\r\nadd_benchmark(move_only_function src/move_only_function.cpp)\r\nadd_benchmark(nth_element src/nth_element.cpp)\r\nadd_benchmark(path_lexically_normal src/path_lexically_normal.cpp)\r\nadd_benchmark(priority_queue_push_range src/priority_queue_push_range.cpp)\r\nadd_benchmark(random_integer_generation src/random_integer_generation.cpp)\r\nadd_benchmark(ranges_div_ceil src/ranges_div_ceil.cpp)\r\nadd_benchmark(regex_match src/regex_match.cpp)\r\nadd_benchmark(regex_search src/regex_search.cpp)\r\nadd_benchmark(remove src/remove.cpp)\r\nadd_benchmark(replace src/replace.cpp)\r\nadd_benchmark(reverse src/reverse.cpp)\r\nadd_benchmark(rotate src/rotate.cpp)\r\nadd_benchmark(sample src/sample.cpp)\r\nadd_benchmark(search src/search.cpp)\r\nadd_benchmark(search_n src/search_n.cpp)\r\nadd_benchmark(shuffle src/shuffle.cpp)\r\nadd_benchmark(std_copy src/std_copy.cpp)\r\nadd_benchmark(sv_equal src/sv_equal.cpp)\r\nadd_benchmark(swap_ranges src/swap_ranges.cpp)\r\nadd_benchmark(unique src/unique.cpp)\r\nadd_benchmark(vector_bool_copy src/vector_bool_copy.cpp)\r\nadd_benchmark(vector_bool_copy_n src/vector_bool_copy_n.cpp)\r\nadd_benchmark(vector_bool_count src/vector_bool_count.cpp)\r\nadd_benchmark(vector_bool_meow_of src/vector_bool_meow_of.cpp)\r\nadd_benchmark(vector_bool_move src/vector_bool_move.cpp)\r\nadd_benchmark(vector_bool_transform src/vector_bool_transform.cpp)\r\n"
  },
  {
    "path": "benchmarks/inc/lorem.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <string_view>\r\n\r\ninline constexpr std::string_view lorem_ipsum =\r\n    \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam mollis imperdiet massa, at dapibus elit interdum \"\r\n    \"ac. In eget sollicitudin mi. Nam at tellus at sapien tincidunt sollicitudin vel non eros. Pellentesque nunc nunc, \"\r\n    \"ullamcorper eu accumsan at, pulvinar non turpis. Quisque vel mauris pulvinar, pretium purus vel, ultricies erat. \"\r\n    \"Curabitur a magna in ligula tristique ornare. Quisque commodo, massa viverra laoreet luctus, sem nisi aliquam \"\r\n    \"velit, fermentum pulvinar velit leo eget justo. Suspendisse vel erat efficitur, pulvinar eros volutpat, vulputate \"\r\n    \"ex. Phasellus non purus vel velit tristique tristique id at ligula. Quisque mollis sodales magna. Mauris et quam \"\r\n    \"eu quam viverra tempus. Nullam tempus maximus porta. Nunc mattis eleifend fermentum. Nullam aliquam libero \"\r\n    \"accumsan velit elementum, eu laoreet metus convallis. Donec pellentesque lacus ut iaculis iaculis. Curabitur orci \"\r\n    \"elit, bibendum sit amet feugiat at, iaculis sit amet massa. Maecenas imperdiet lacus at vehicula iaculis. Donec \"\r\n    \"volutpat nunc sit amet accumsan tempor. Quisque pretium vestibulum ultricies. Suspendisse potenti. Aenean at diam \"\r\n    \"iaculis, condimentum felis venenatis, condimentum erat. Nam quis elit dui. Duis quis odio vitae metus hendrerit \"\r\n    \"rhoncus ut et magna. Cras ac augue quis nibh pharetra sagittis. Donec ullamcorper vel eros semper pretium. Proin \"\r\n    \"vel sollicitudin eros. Nulla sollicitudin mattis turpis id suscipit. Aliquam sed risus velit. Aliquam iaculis nec \"\r\n    \"nibh ac egestas. Duis finibus semper est sed consequat. Sed in sapien quis nibh dignissim mattis. Vestibulum nec \"\r\n    \"metus sodales, euismod mauris ac, sollicitudin libero. Maecenas non arcu ac velit ullamcorper fringilla et quis \"\r\n    \"nulla. Curabitur posuere leo eget ipsum tincidunt dignissim. Cras ultricies suscipit neque, quis suscipit tortor \"\r\n    \"venenatis non. Cras nisl mi, bibendum in vulputate quis, vestibulum ornare enim. Nunc hendrerit placerat dui, \"\r\n    \"aliquam mollis sem convallis et. Integer vitae urna diam. Phasellus et imperdiet est. Maecenas auctor facilisis \"\r\n    \"nibh non commodo. Suspendisse iaculis quam id bibendum feugiat. Pellentesque felis erat, egestas a libero ac, \"\r\n    \"laoreet consectetur elit. Cras ut suscipit ex. Etiam gravida sem quis ex porta, eu lacinia tortor fermentum. \"\r\n    \"Nulla consequat odio enim, sed condimentum est sagittis a. Quisque nec commodo tellus. Phasellus elementum \"\r\n    \"feugiat dolor et feugiat. Praesent sed mattis tortor. In vitae sodales purus. Morbi accumsan, ligula et interdum \"\r\n    \"lacinia, leo risus suscipit urna, non luctus mi justo eu ipsum. Curabitur venenatis pretium orci id porttitor. \"\r\n    \"Quisque dapibus nisl sit amet elit lobortis sagittis. Orci varius natoque penatibus et magnis dis parturient \"\r\n    \"montes, nascetur ridiculus mus. Mauris varius dui sit amet tortor facilisis vestibulum. Curabitur condimentum \"\r\n    \"justo nec orci mattis auctor. Quisque aliquet condimentum arcu ac sollicitudin. Maecenas elit elit, condimentum \"\r\n    \"vitae auctor a, cursus et sem. Cras vehicula ante in consequat fermentum. Praesent at massa nisi. Mauris pretium \"\r\n    \"euismod eros, ut posuere ligula ullamcorper id. Nullam aliquet malesuada est at dignissim. Pellentesque finibus \"\r\n    \"sagittis libero nec bibendum. Phasellus dolor ipsum, finibus quis turpis quis, mollis interdum felis.\";\r\n"
  },
  {
    "path": "benchmarks/inc/skewed_allocator.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <new>\r\n\r\ntemplate <class T, size_t Alignment, size_t Skew>\r\nstruct skewed_allocator {\r\n    using value_type = T;\r\n    static_assert(Alignment % alignof(T) == 0, \"Chosen Alignment will produce unaligned T objects\");\r\n    static_assert(Skew % alignof(T) == 0, \"Chosen Skew will produce unaligned T objects\");\r\n\r\n    template <class U>\r\n    struct rebind {\r\n        using other = skewed_allocator<U, Alignment, Skew>;\r\n    };\r\n\r\n    skewed_allocator() = default;\r\n    template <class U>\r\n    skewed_allocator(const skewed_allocator<U, Alignment, Skew>&) {}\r\n\r\n    template <class U>\r\n    bool operator==(const skewed_allocator<U, Alignment, Skew>&) const {\r\n        return true;\r\n    }\r\n\r\n    T* allocate(const size_t n) {\r\n        const auto p = static_cast<unsigned char*>(_aligned_malloc(n * sizeof(T) + Skew, Alignment));\r\n        if (!p) {\r\n            throw std::bad_alloc{};\r\n        }\r\n        return reinterpret_cast<T*>(p + Skew);\r\n    }\r\n\r\n    void deallocate(T* const p, size_t) {\r\n        if (p) {\r\n            _aligned_free(reinterpret_cast<unsigned char*>(p) - Skew);\r\n        }\r\n    }\r\n};\r\n\r\n// The purpose is to provide consistent behavior for benchmarks.\r\n// 64 would be a reasonable alignment for practical perf uses,\r\n// as it is both the cache line size and the maximum vector instruction size (on x64).\r\n// However, aligning to the page size will provide even more consistency\r\n// by ensuring that the same number of page boundaries is crossed each time.\r\ninline constexpr size_t page_size = 4096;\r\n\r\n// A realistic skew relative to allocation granularity, when a variable is placed\r\n// next to a pointer in a structure or on the stack. Also corresponds to the default packing.\r\ninline constexpr size_t realistic_skew = 8;\r\n\r\ntemplate <class T>\r\nusing highly_aligned_allocator = skewed_allocator<T, page_size, 0>;\r\n\r\ntemplate <class T>\r\nusing not_highly_aligned_allocator = skewed_allocator<T, page_size, realistic_skew>;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4324) // structure was padded due to alignment specifier\r\n\r\ntemplate <class T>\r\nstruct alignas(page_size) highly_aligned {\r\n    T value;\r\n};\r\n\r\ntemplate <class T>\r\nstruct alignas(page_size) not_highly_aligned {\r\n    char pad[realistic_skew];\r\n    T value;\r\n};\r\n\r\n#pragma warning(pop)\r\n"
  },
  {
    "path": "benchmarks/inc/udt.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\ntemplate <typename Data>\r\nstruct aggregate {\r\n    Data c;\r\n\r\n    friend bool operator==(const aggregate&, const aggregate&) = default;\r\n};\r\n\r\ntemplate <typename Data>\r\nstruct non_trivial {\r\n    Data c;\r\n    non_trivial() : c() {}\r\n    non_trivial(const Data& src) : c(src) {}\r\n    non_trivial(const non_trivial& other) : c(other.c) {}\r\n    non_trivial& operator=(const non_trivial& other) {\r\n        c = other.c;\r\n        return *this;\r\n    }\r\n    ~non_trivial() {}\r\n\r\n    friend bool operator==(const non_trivial&, const non_trivial&) = default;\r\n};\r\n"
  },
  {
    "path": "benchmarks/inc/utility.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <algorithm>\r\n#include <cstddef>\r\n#include <memory>\r\n#include <random>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\ntemplate <class Contained, template <class> class Alloc = std::allocator, class... Seed>\r\nstd::vector<Contained, Alloc<Contained>> random_vector(size_t n, Seed... seed) {\r\n    std::vector<Contained, Alloc<Contained>> res(n);\r\n    std::mt19937_64 prng{seed...};\r\n\r\n    if constexpr (std::is_same_v<Contained, bool>) {\r\n        std::generate(res.begin(), res.end(), [&prng] { return static_cast<bool>(prng() & 1); });\r\n    } else {\r\n// Here, the type Contained can be char, int, aggregate<Data>, or non_trivial<Data> where Data is char or int.\r\n// (aggregate<Data> and non_trivial<Data> are defined in udt.hpp.)\r\n// static_cast<Contained> silences truncation warnings when Contained is directly char or int,\r\n// but is insufficient for aggregate<Data> or non_trivial<Data>.\r\n#pragma warning(push)\r\n#pragma warning(disable : 4244) // warning C4244: conversion from 'uint64_t' to 'Data', possible loss of data\r\n        std::generate(res.begin(), res.end(), [&prng] { return static_cast<Contained>(prng()); });\r\n#pragma warning(pop)\r\n    }\r\n\r\n    return res;\r\n}\r\n"
  },
  {
    "path": "benchmarks/src/adjacent_difference.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <limits>\r\n#include <numeric>\r\n#include <random>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nvoid bm(benchmark::State& state) {\r\n    mt19937 gen(96337);\r\n\r\n    const size_t size = static_cast<size_t>(state.range(0));\r\n\r\n    vector<T, not_highly_aligned_allocator<T>> input(size);\r\n    vector<T, not_highly_aligned_allocator<T>> output(size);\r\n\r\n    if constexpr (is_floating_point_v<T>) {\r\n        normal_distribution<T> dis(0, 100000.0);\r\n        ranges::generate(input, [&] { return dis(gen); });\r\n    } else {\r\n        static_assert(is_unsigned_v<T>, \"This avoids signed integers to avoid UB; they shouldn't perform differently\");\r\n        uniform_int_distribution<conditional_t<sizeof(T) != 1, T, unsigned int>> dis(0, numeric_limits<T>::max());\r\n        ranges::generate(input, [&] { return static_cast<T>(dis(gen)); });\r\n    }\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(input);\r\n        adjacent_difference(input.begin(), input.end(), output.begin());\r\n        benchmark::DoNotOptimize(output);\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->Arg(2255);\r\n}\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4244) // warning C4244: '=': conversion from 'int' to 'unsigned char', possible loss of data\r\nBENCHMARK(bm<uint8_t>)->Apply(common_args);\r\nBENCHMARK(bm<uint16_t>)->Apply(common_args);\r\n#pragma warning(pop)\r\n\r\nBENCHMARK(bm<uint32_t>)->Apply(common_args);\r\nBENCHMARK(bm<uint64_t>)->Apply(common_args);\r\n\r\nBENCHMARK(bm<float>)->Apply(common_args);\r\nBENCHMARK(bm<double>)->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/adjacent_find.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstdlib>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n\r\nusing namespace std;\r\n\r\nenum class AlgType { Std, Rng };\r\n\r\ntemplate <AlgType Alg, class T>\r\nvoid bm(benchmark::State& state) {\r\n    const size_t size = static_cast<size_t>(state.range(0));\r\n    const size_t pos  = static_cast<size_t>(state.range(1));\r\n\r\n    vector<T, not_highly_aligned_allocator<T>> v(size);\r\n\r\n    for (size_t i = 0; i != size; ++i) {\r\n        v[i] = static_cast<T>(i & 3);\r\n    }\r\n\r\n    if (pos == 0 || pos >= size) {\r\n        abort();\r\n    }\r\n\r\n    v[pos] = v[pos - 1];\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(v);\r\n        if constexpr (Alg == AlgType::Std) {\r\n            benchmark::DoNotOptimize(adjacent_find(v.begin(), v.end()));\r\n        } else {\r\n            benchmark::DoNotOptimize(ranges::adjacent_find(v));\r\n        }\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->ArgPair(2525, 1142);\r\n}\r\n\r\nBENCHMARK(bm<AlgType::Std, int8_t>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::Std, int16_t>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::Std, int32_t>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::Std, int64_t>)->Apply(common_args);\r\n\r\nBENCHMARK(bm<AlgType::Rng, int8_t>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::Rng, int16_t>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::Rng, int32_t>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::Rng, int64_t>)->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/any_swap.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <any>\r\n#include <array>\r\n#include <benchmark/benchmark.h>\r\n#include <type_traits>\r\n\r\nusing trivial = std::array<int, 2>;\r\nstatic_assert(std::is_trivially_copyable_v<trivial>);\r\n\r\nstruct small {\r\n    std::array<int, 4> c{};\r\n    small()                            = default;\r\n    small(const small&)                = default;\r\n    small& operator=(const small&)     = default;\r\n    small(small&&) noexcept            = default;\r\n    small& operator=(small&&) noexcept = default;\r\n    ~small() {}\r\n};\r\nstatic_assert(!std::is_trivially_copyable_v<small>);\r\nstatic_assert(std::is_nothrow_move_constructible_v<small>);\r\n\r\nusing large = std::array<int, 32>;\r\n\r\ntemplate <class T>\r\nvoid bm(benchmark::State& state) {\r\n    std::any a = T{};\r\n    std::any b = T{};\r\n\r\n    for (auto _ : state) {\r\n        a.swap(b);\r\n        benchmark::DoNotOptimize(a);\r\n        benchmark::DoNotOptimize(b);\r\n    }\r\n}\r\n\r\nBENCHMARK(bm<trivial>);\r\nBENCHMARK(bm<small>);\r\nBENCHMARK(bm<large>);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/bitset_from_string.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <benchmark/benchmark.h>\r\n#include <bitset>\r\n#include <cstddef>\r\n#include <random>\r\n#include <sstream>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\ntemplate <size_t N, class charT, size_t Min_length>\r\nauto random_digits_init() {\r\n    mt19937_64 rnd{};\r\n    uniform_int_distribution<> dis('0', '1');\r\n\r\n    constexpr size_t number_of_bitsets = (Min_length + N - 1) / N;\r\n    static_assert(number_of_bitsets != 0);\r\n\r\n    constexpr size_t actual_size = number_of_bitsets * (N + 1); // +1 for \\0\r\n\r\n    array<charT, actual_size> result;\r\n\r\n    for (size_t i = 0; i < actual_size; ++i) {\r\n        if (i % (N + 1) == N) {\r\n            result[i] = charT{'\\0'}; // write null terminators\r\n        } else {\r\n            result[i] = static_cast<charT>(dis(rnd)); // fill random digits\r\n        }\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nenum class length_type : bool { char_count, null_term };\r\n\r\ntemplate <size_t N, class charT>\r\nconst auto random_digits = random_digits_init<N, charT, 2048>();\r\n\r\ntemplate <length_type Length, size_t N, class charT>\r\nvoid bitset_from_string(benchmark::State& state) {\r\n    auto digit_array = random_digits<N, charT>;\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(digit_array);\r\n        const auto arr_data = digit_array.data();\r\n        const auto arr_size = digit_array.size();\r\n        for (size_t pos = 0; pos != arr_size; pos += N + 1) {\r\n            if constexpr (Length == length_type::char_count) {\r\n                bitset<N> bs(arr_data + pos, N);\r\n                benchmark::DoNotOptimize(bs);\r\n            } else {\r\n                bitset<N> bs(arr_data + pos);\r\n                benchmark::DoNotOptimize(bs);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class charT, size_t Length>\r\nbasic_string<charT> random_digits_contiguous_string_init() {\r\n    mt19937_64 rnd{};\r\n    uniform_int_distribution<> dis('0', '1');\r\n\r\n    basic_string<charT> result;\r\n\r\n    result.resize_and_overwrite(Length, [&](charT* ptr, size_t) {\r\n        generate_n(ptr, Length, [&] { return static_cast<charT>(dis(rnd)); });\r\n        return Length;\r\n    });\r\n\r\n    return result;\r\n}\r\n\r\ntemplate <class charT, size_t Length>\r\nconst auto random_digits_contiguous_string = random_digits_contiguous_string_init<charT, Length>();\r\n\r\ntemplate <size_t N, class charT>\r\nvoid bitset_from_stream(benchmark::State& state) {\r\n    constexpr size_t string_length = 2048;\r\n    constexpr size_t count         = string_length / N;\r\n    basic_istringstream<charT> stream(random_digits_contiguous_string<charT, string_length>);\r\n    bitset<N> bs;\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(stream);\r\n        for (size_t i = 0; i != count; ++i) {\r\n            stream >> bs;\r\n        }\r\n        benchmark::DoNotOptimize(bs);\r\n        stream.seekg(0);\r\n    }\r\n}\r\n\r\nBENCHMARK(bitset_from_string<length_type::char_count, 15, char>);\r\nBENCHMARK(bitset_from_string<length_type::char_count, 16, char>);\r\nBENCHMARK(bitset_from_string<length_type::char_count, 36, char>);\r\nBENCHMARK(bitset_from_string<length_type::char_count, 64, char>);\r\nBENCHMARK(bitset_from_string<length_type::char_count, 512, char>);\r\nBENCHMARK(bitset_from_string<length_type::char_count, 2048, char>);\r\n\r\nBENCHMARK(bitset_from_string<length_type::char_count, 15, wchar_t>);\r\nBENCHMARK(bitset_from_string<length_type::char_count, 16, wchar_t>);\r\nBENCHMARK(bitset_from_string<length_type::char_count, 36, wchar_t>);\r\nBENCHMARK(bitset_from_string<length_type::char_count, 64, wchar_t>);\r\nBENCHMARK(bitset_from_string<length_type::char_count, 512, wchar_t>);\r\nBENCHMARK(bitset_from_string<length_type::char_count, 2048, wchar_t>);\r\n\r\nBENCHMARK(bitset_from_string<length_type::null_term, 15, char>);\r\nBENCHMARK(bitset_from_string<length_type::null_term, 16, char>);\r\nBENCHMARK(bitset_from_string<length_type::null_term, 36, char>);\r\nBENCHMARK(bitset_from_string<length_type::null_term, 64, char>);\r\nBENCHMARK(bitset_from_string<length_type::null_term, 512, char>);\r\nBENCHMARK(bitset_from_string<length_type::null_term, 2048, char>);\r\n\r\nBENCHMARK(bitset_from_string<length_type::null_term, 15, wchar_t>);\r\nBENCHMARK(bitset_from_string<length_type::null_term, 16, wchar_t>);\r\nBENCHMARK(bitset_from_string<length_type::null_term, 36, wchar_t>);\r\nBENCHMARK(bitset_from_string<length_type::null_term, 64, wchar_t>);\r\nBENCHMARK(bitset_from_string<length_type::null_term, 512, wchar_t>);\r\nBENCHMARK(bitset_from_string<length_type::null_term, 2048, wchar_t>);\r\n\r\nBENCHMARK(bitset_from_stream<15, char>);\r\nBENCHMARK(bitset_from_stream<16, char>);\r\nBENCHMARK(bitset_from_stream<36, char>);\r\nBENCHMARK(bitset_from_stream<64, char>);\r\nBENCHMARK(bitset_from_stream<512, char>);\r\nBENCHMARK(bitset_from_stream<2048, char>);\r\n\r\nBENCHMARK(bitset_from_stream<15, wchar_t>);\r\nBENCHMARK(bitset_from_stream<16, wchar_t>);\r\nBENCHMARK(bitset_from_stream<36, wchar_t>);\r\nBENCHMARK(bitset_from_stream<64, wchar_t>);\r\nBENCHMARK(bitset_from_stream<512, wchar_t>);\r\nBENCHMARK(bitset_from_stream<2048, wchar_t>);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/bitset_to_string.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <benchmark/benchmark.h>\r\n#include <bit>\r\n#include <bitset>\r\n#include <climits>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <random>\r\n\r\nusing namespace std;\r\n\r\ntemplate <size_t Elems>\r\nauto random_bits_init() {\r\n    mt19937_64 rnd{};\r\n    array<uint64_t, Elems> arr;\r\n    for (auto& d : arr) {\r\n        d = rnd();\r\n    }\r\n    return arr;\r\n}\r\n\r\ntemplate <size_t Elems = 32>\r\nconst auto random_bits = random_bits_init<Elems>();\r\n\r\ntemplate <size_t N, class charT>\r\nvoid BM_bitset_to_string(benchmark::State& state) {\r\n    static_assert(N <= 64);\r\n\r\n    for (auto _ : state) {\r\n        // make a copy, so that it can be potentially modified by DoNotOptimize\r\n        for (auto bits : random_bits<>) {\r\n            benchmark::DoNotOptimize(bits);\r\n            bitset<N> bs{bits};\r\n            benchmark::DoNotOptimize(bs.template to_string<charT>());\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <size_t N, class charT>\r\nvoid BM_bitset_to_string_large_single(benchmark::State& state) {\r\n    static_assert(N % 64 == 0 && N >= 64);\r\n    const auto& bitset_data = random_bits<N / 64>;\r\n\r\n    auto large_bitset = bit_cast<bitset<N>>(bitset_data);\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(large_bitset);\r\n        benchmark::DoNotOptimize(large_bitset.template to_string<charT>());\r\n    }\r\n}\r\n\r\nBENCHMARK(BM_bitset_to_string<15, char>);\r\nBENCHMARK(BM_bitset_to_string<64, char>);\r\nBENCHMARK(BM_bitset_to_string_large_single<512, char>);\r\nBENCHMARK(BM_bitset_to_string_large_single<2048, char>);\r\nBENCHMARK(BM_bitset_to_string<7, wchar_t>);\r\nBENCHMARK(BM_bitset_to_string<64, wchar_t>);\r\nBENCHMARK(BM_bitset_to_string_large_single<512, wchar_t>);\r\nBENCHMARK(BM_bitset_to_string_large_single<2048, wchar_t>);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/charconv_floats.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n#include <bit>\r\n#include <charconv>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <random>\r\n#include <system_error>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nvoid verify(const bool b) {\r\n    if (!b) {\r\n        puts(\"FAIL\");\r\n        exit(EXIT_FAILURE);\r\n    }\r\n}\r\n\r\nenum class RoundTrip { Sci, Fix, Gen, Hex, Lossy };\r\n\r\nconsteval chars_format chars_format_from_RoundTrip(const RoundTrip rt) {\r\n    switch (rt) {\r\n    case RoundTrip::Sci:\r\n        return chars_format::scientific;\r\n    case RoundTrip::Fix:\r\n        return chars_format::fixed;\r\n    case RoundTrip::Gen:\r\n        return chars_format::general;\r\n    case RoundTrip::Hex:\r\n        return chars_format::hex;\r\n    case RoundTrip::Lossy:\r\n    default:\r\n        exit(EXIT_FAILURE);\r\n    }\r\n}\r\n\r\ntemplate <RoundTrip Rt, typename Floating, auto... Args>\r\nvoid test_to_chars(benchmark::State& state) {\r\n    constexpr size_t n = 2'000'000; // how many floating-point values to test\r\n    vector<Floating> vec;\r\n    vec.reserve(n);\r\n\r\n    {\r\n        mt19937_64 mt64;\r\n        while (vec.size() < n) {\r\n            using Integral             = conditional_t<sizeof(Floating) == 4, uint32_t, uint64_t>;\r\n            const Integral val         = static_cast<Integral>(mt64());\r\n            constexpr Integral inf_nan = sizeof(Floating) == 4 ? 0x7F800000U : 0x7FF0000000000000ULL;\r\n            if ((val & inf_nan) == inf_nan) {\r\n                continue; // skip INF/NAN\r\n            }\r\n            vec.push_back(bit_cast<Floating>(val));\r\n        }\r\n    }\r\n\r\n    char buf[2'000]; // more than enough\r\n\r\n    {\r\n        auto it = vec.begin();\r\n        for (auto _ : state) {\r\n            auto result = to_chars(buf, end(buf), *it, Args...);\r\n\r\n            benchmark::DoNotOptimize(result.ptr);\r\n            benchmark::DoNotOptimize(buf);\r\n\r\n            ++it;\r\n            if (it == vec.end()) {\r\n                it = vec.begin();\r\n            }\r\n        }\r\n    }\r\n\r\n    for (const auto& elem : vec) {\r\n        const auto result = to_chars(buf, end(buf), elem, Args...);\r\n        verify(result.ec == errc{});\r\n\r\n        if constexpr (Rt == RoundTrip::Lossy) {\r\n            // skip lossy conversions\r\n        } else {\r\n            Floating round_trip;\r\n            const auto from_result = from_chars(buf, result.ptr, round_trip, chars_format_from_RoundTrip(Rt));\r\n            verify(from_result.ec == errc{});\r\n            verify(from_result.ptr == result.ptr);\r\n            verify(round_trip == elem);\r\n        }\r\n    }\r\n}\r\n\r\nBENCHMARK(test_to_chars<RoundTrip::Gen, float>)->Name(\"STL_float_plain_shortest\");\r\nBENCHMARK(test_to_chars<RoundTrip::Gen, double>)->Name(\"STL_double_plain_shortest\");\r\nBENCHMARK(test_to_chars<RoundTrip::Sci, float, chars_format::scientific>)->Name(\"STL_float_scientific_shortest\");\r\nBENCHMARK(test_to_chars<RoundTrip::Sci, double, chars_format::scientific>)->Name(\"STL_double_scientific_shortest\");\r\nBENCHMARK(test_to_chars<RoundTrip::Fix, float, chars_format::fixed>)->Name(\"STL_float_fixed_shortest\");\r\nBENCHMARK(test_to_chars<RoundTrip::Fix, double, chars_format::fixed>)->Name(\"STL_double_fixed_shortest\");\r\nBENCHMARK(test_to_chars<RoundTrip::Gen, float, chars_format::general>)->Name(\"STL_float_general_shortest\");\r\nBENCHMARK(test_to_chars<RoundTrip::Gen, double, chars_format::general>)->Name(\"STL_double_general_shortest\");\r\nBENCHMARK(test_to_chars<RoundTrip::Hex, float, chars_format::hex>)->Name(\"STL_float_hex_shortest\");\r\nBENCHMARK(test_to_chars<RoundTrip::Hex, double, chars_format::hex>)->Name(\"STL_double_hex_shortest\");\r\nBENCHMARK(test_to_chars<RoundTrip::Sci, float, chars_format::scientific, 8>)->Name(\"STL_float_scientific_8\");\r\nBENCHMARK(test_to_chars<RoundTrip::Sci, double, chars_format::scientific, 16>)->Name(\"STL_double_scientific_16\");\r\nBENCHMARK(test_to_chars<RoundTrip::Lossy, float, chars_format::fixed, 6>)->Name(\"STL_float_fixed_6_lossy\");\r\nBENCHMARK(test_to_chars<RoundTrip::Lossy, double, chars_format::fixed, 6>)->Name(\"STL_double_fixed_6_lossy\");\r\nBENCHMARK(test_to_chars<RoundTrip::Gen, float, chars_format::general, 9>)->Name(\"STL_float_general_9\");\r\nBENCHMARK(test_to_chars<RoundTrip::Gen, double, chars_format::general, 17>)->Name(\"STL_double_general_17\");\r\nBENCHMARK(test_to_chars<RoundTrip::Hex, float, chars_format::hex, 6>)->Name(\"STL_float_hex_6\");\r\nBENCHMARK(test_to_chars<RoundTrip::Hex, double, chars_format::hex, 13>)->Name(\"STL_double_hex_13\");\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/efficient_nonlocking_print.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// This benchmark inherently prints many lines to stdout. To view its results, run it with these options:\r\n// --benchmark_out=efficient_nonlocking_print.log --benchmark_out_format=console\r\n\r\n#include <benchmark/benchmark.h>\r\n#include <cstdio>\r\n#include <format>\r\n#include <print>\r\n#include <string>\r\n#include <string_view>\r\n#include <utility>\r\n\r\nusing PrintType = void (*)(FILE*, std::string_view, std::format_args);\r\n\r\ntemplate <PrintType PrintFunction>\r\nvoid BM_vprint(benchmark::State& state) {\r\n    for (auto _ : state) {\r\n        PrintFunction(stdout, \"Hello cool I am going to print as unicode\\n\", std::make_format_args());\r\n    }\r\n}\r\nBENCHMARK(BM_vprint<&std::vprint_unicode>);\r\nBENCHMARK(BM_vprint<&std::vprint_unicode_buffered>);\r\n\r\ntemplate <PrintType PrintFunction>\r\nvoid BM_vprint_complex(benchmark::State& state) {\r\n    const int i           = 42;\r\n    const std::string str = \"Hello world!!!!!!!!!!!!!!!!!!!!!!!!\";\r\n    const double f        = -902.16283758;\r\n    const std::pair<int, double> p{16, 2.073f};\r\n    for (auto _ : state) {\r\n        PrintFunction(stdout,\r\n            \"Hello cool I am going to print as unicode!! {:X}, {}, {:a}, \"\r\n            \"I am a big string, lots of words, multiple {} formats\\n\",\r\n            std::make_format_args(i, str, f, p));\r\n    }\r\n}\r\nBENCHMARK(BM_vprint_complex<&std::vprint_unicode>);\r\nBENCHMARK(BM_vprint_complex<&std::vprint_unicode_buffered>);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/filesystem.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n#include <filesystem>\r\n#include <system_error>\r\n\r\nvoid symlink_status(benchmark::State& state) {\r\n    auto path = std::filesystem::temp_directory_path();\r\n\r\n    for (auto _ : state) {\r\n        std::error_code ec;\r\n        benchmark::DoNotOptimize(path);\r\n        auto status = std::filesystem::symlink_status(path, ec);\r\n        benchmark::DoNotOptimize(status);\r\n        benchmark::DoNotOptimize(ec);\r\n    }\r\n}\r\n\r\nBENCHMARK(symlink_status);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/fill.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstring>\r\n#include <vector>\r\n\r\n#include <skewed_allocator.hpp>\r\n\r\ntemplate <typename Contained, Contained Value>\r\nvoid handwritten_loop(benchmark::State& state) {\r\n    const size_t r0 = static_cast<size_t>(state.range(0));\r\n    std::vector<Contained, not_highly_aligned_allocator<Contained>> buffer(r0);\r\n    for ([[maybe_unused]] auto _ : state) {\r\n        benchmark::DoNotOptimize(buffer.data());\r\n        Contained* ptr                 = buffer.data();\r\n        const Contained* const ptr_end = ptr + r0;\r\n        while (ptr != ptr_end) {\r\n            *ptr++ = Value;\r\n        }\r\n        benchmark::DoNotOptimize(buffer.data());\r\n    }\r\n}\r\n\r\ntemplate <typename Contained, Contained Value>\r\nvoid handwritten_loop_n(benchmark::State& state) {\r\n    const size_t r0 = static_cast<size_t>(state.range(0));\r\n    std::vector<Contained, not_highly_aligned_allocator<Contained>> buffer(r0);\r\n    for ([[maybe_unused]] auto _ : state) {\r\n        benchmark::DoNotOptimize(buffer.data());\r\n        Contained* ptr = buffer.data();\r\n        for (size_t idx = 0; idx < r0; ++idx) {\r\n            ptr[idx] = Value;\r\n        }\r\n        benchmark::DoNotOptimize(buffer.data());\r\n    }\r\n}\r\n\r\n// Ensure that Contained and Value are ok for std::memset.\r\ntemplate <typename Contained, Contained Value>\r\nvoid memset_call(benchmark::State& state) {\r\n    const size_t r0 = static_cast<size_t>(state.range(0));\r\n    std::vector<Contained, not_highly_aligned_allocator<Contained>> buffer(r0);\r\n    for ([[maybe_unused]] auto _ : state) {\r\n        benchmark::DoNotOptimize(buffer.data());\r\n        Contained* ptr = buffer.data();\r\n        std::memset(ptr, Value, r0 * sizeof(Contained));\r\n        benchmark::DoNotOptimize(buffer.data());\r\n    }\r\n}\r\n\r\ntemplate <typename Contained, Contained Value>\r\nvoid std_fill_call(benchmark::State& state) {\r\n    const size_t r0 = static_cast<size_t>(state.range(0));\r\n    std::vector<Contained, not_highly_aligned_allocator<Contained>> buffer(r0);\r\n    for ([[maybe_unused]] auto _ : state) {\r\n        benchmark::DoNotOptimize(buffer.data());\r\n        auto begin_it = buffer.data();\r\n        auto end_it   = buffer.data() + r0;\r\n        std::fill(begin_it, end_it, Value);\r\n        benchmark::DoNotOptimize(buffer.data());\r\n    }\r\n}\r\n\r\ntemplate <typename Contained, Contained Value>\r\nvoid std_fill_n_call(benchmark::State& state) {\r\n    const size_t r0 = static_cast<size_t>(state.range(0));\r\n    std::vector<Contained, not_highly_aligned_allocator<Contained>> buffer(r0);\r\n    for ([[maybe_unused]] auto _ : state) {\r\n        benchmark::DoNotOptimize(buffer.data());\r\n        auto begin_it = buffer.data();\r\n        std::fill_n(begin_it, r0, Value);\r\n        benchmark::DoNotOptimize(buffer.data());\r\n    }\r\n}\r\n\r\nBENCHMARK(handwritten_loop<char, 0>)->Range(0, 1 << 18);\r\nBENCHMARK(handwritten_loop<char, 1>)->Range(0, 1 << 18);\r\nBENCHMARK(handwritten_loop_n<char, 0>)->Range(0, 1 << 18);\r\nBENCHMARK(handwritten_loop_n<char, 1>)->Range(0, 1 << 18);\r\nBENCHMARK(memset_call<char, 0>)->Range(0, 1 << 18);\r\nBENCHMARK(memset_call<char, 1>)->Range(0, 1 << 18);\r\nBENCHMARK(std_fill_call<char, 0>)->Range(0, 1 << 18);\r\nBENCHMARK(std_fill_call<char, 1>)->Range(0, 1 << 18);\r\nBENCHMARK(std_fill_n_call<char, 0>)->Range(0, 1 << 18);\r\nBENCHMARK(std_fill_n_call<char, 1>)->Range(0, 1 << 18);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/find_and_count.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstdlib>\r\n#include <ranges>\r\n#include <string>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n\r\nenum class Op {\r\n    FindSized,\r\n    FindUnsized,\r\n    Count,\r\n    StringFind,\r\n    StringRFind,\r\n    StringFindNotFirstOne,\r\n    StringFindNotLastOne,\r\n};\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T, template <class> class Alloc, Op Operation, T FillVal = T{'0'}, T FoundVal = T{'1'}>\r\nvoid bm(benchmark::State& state) {\r\n    const auto size = static_cast<size_t>(state.range(0));\r\n    const auto pos  = static_cast<size_t>(state.range(1));\r\n\r\n    using Container =\r\n        conditional_t<Operation >= Op::StringFind, basic_string<T, char_traits<T>, Alloc<T>>, vector<T, Alloc<T>>>;\r\n\r\n    Container a(size, FillVal);\r\n\r\n    if (pos < size) {\r\n        if constexpr (Operation == Op::StringRFind || Operation == Op::StringFindNotLastOne) {\r\n            a[size - pos - 1] = FoundVal;\r\n        } else {\r\n            a[pos] = FoundVal;\r\n        }\r\n    } else {\r\n        if constexpr (Operation == Op::FindUnsized) {\r\n            abort();\r\n        }\r\n    }\r\n\r\n    for (auto _ : state) {\r\n        if constexpr (Operation == Op::FindSized) {\r\n            benchmark::DoNotOptimize(ranges::find(a.begin(), a.end(), FoundVal));\r\n        } else if constexpr (Operation == Op::FindUnsized) {\r\n            benchmark::DoNotOptimize(ranges::find(a.begin(), unreachable_sentinel, FoundVal));\r\n        } else if constexpr (Operation == Op::Count) {\r\n            benchmark::DoNotOptimize(ranges::count(a.begin(), a.end(), FoundVal));\r\n        } else if constexpr (Operation == Op::StringFind) {\r\n            benchmark::DoNotOptimize(a.find(FoundVal));\r\n        } else if constexpr (Operation == Op::StringRFind) {\r\n            benchmark::DoNotOptimize(a.rfind(FoundVal));\r\n        } else if constexpr (Operation == Op::StringFindNotFirstOne) {\r\n            benchmark::DoNotOptimize(a.find_first_not_of(FillVal));\r\n        } else if constexpr (Operation == Op::StringFindNotLastOne) {\r\n            benchmark::DoNotOptimize(a.find_last_not_of(FillVal));\r\n        }\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->Args({8021, 3056});\r\n    // AVX tail tests\r\n    bm->Args({63, 62})->Args({31, 30})->Args({15, 14})->Args({7, 6});\r\n}\r\n\r\nstruct point {\r\n    int16_t x{};\r\n    int16_t y{};\r\n\r\n    bool operator==(const point&) const = default;\r\n};\r\n\r\nBENCHMARK(bm<uint8_t, not_highly_aligned_allocator, Op::FindSized>)->Apply(common_args);\r\nBENCHMARK(bm<uint8_t, highly_aligned_allocator, Op::FindSized>)->Apply(common_args);\r\nBENCHMARK(bm<uint8_t, not_highly_aligned_allocator, Op::FindUnsized>)->Apply(common_args);\r\nBENCHMARK(bm<uint8_t, highly_aligned_allocator, Op::FindUnsized>)->Apply(common_args);\r\nBENCHMARK(bm<uint8_t, not_highly_aligned_allocator, Op::Count>)->Apply(common_args);\r\nBENCHMARK(bm<char, not_highly_aligned_allocator, Op::StringFind>)->Apply(common_args);\r\nBENCHMARK(bm<char, not_highly_aligned_allocator, Op::StringRFind>)->Apply(common_args);\r\nBENCHMARK(bm<char, not_highly_aligned_allocator, Op::StringFindNotFirstOne>)->Apply(common_args);\r\nBENCHMARK(bm<char, not_highly_aligned_allocator, Op::StringFindNotLastOne>)->Apply(common_args);\r\n\r\nBENCHMARK(bm<uint16_t, not_highly_aligned_allocator, Op::FindSized>)->Apply(common_args);\r\nBENCHMARK(bm<uint16_t, not_highly_aligned_allocator, Op::Count>)->Apply(common_args);\r\nBENCHMARK(bm<wchar_t, not_highly_aligned_allocator, Op::StringFind>)->Apply(common_args);\r\nBENCHMARK(bm<wchar_t, not_highly_aligned_allocator, Op::StringRFind>)->Apply(common_args);\r\nBENCHMARK(bm<wchar_t, not_highly_aligned_allocator, Op::StringFindNotFirstOne>)->Apply(common_args);\r\nBENCHMARK(bm<wchar_t, not_highly_aligned_allocator, Op::StringFindNotLastOne>)->Apply(common_args);\r\n\r\nBENCHMARK(bm<uint32_t, not_highly_aligned_allocator, Op::FindSized>)->Apply(common_args);\r\nBENCHMARK(bm<uint32_t, not_highly_aligned_allocator, Op::Count>)->Apply(common_args);\r\nBENCHMARK(bm<char32_t, not_highly_aligned_allocator, Op::StringFind>)->Apply(common_args);\r\nBENCHMARK(bm<char32_t, not_highly_aligned_allocator, Op::StringRFind>)->Apply(common_args);\r\nBENCHMARK(bm<char32_t, not_highly_aligned_allocator, Op::StringFindNotFirstOne>)->Apply(common_args);\r\nBENCHMARK(bm<char32_t, not_highly_aligned_allocator, Op::StringFindNotLastOne>)->Apply(common_args);\r\n\r\nBENCHMARK(bm<uint64_t, not_highly_aligned_allocator, Op::FindSized>)->Apply(common_args);\r\nBENCHMARK(bm<uint64_t, not_highly_aligned_allocator, Op::Count>)->Apply(common_args);\r\n\r\nBENCHMARK(bm<point, not_highly_aligned_allocator, Op::FindSized>)->Apply(common_args);\r\nBENCHMARK(bm<point, not_highly_aligned_allocator, Op::Count>)->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/find_first_of.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstdlib>\r\n#include <string>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n\r\nusing namespace std;\r\n\r\nenum class AlgType {\r\n    std_func,\r\n    str_member_first,\r\n    str_member_last,\r\n    str_member_first_not,\r\n    str_member_last_not,\r\n};\r\n\r\ntemplate <AlgType Alg, class T, T NeedleFillerBase = T{'a'}>\r\nvoid bm(benchmark::State& state) {\r\n    const size_t Pos   = static_cast<size_t>(state.range(0));\r\n    const size_t NSize = static_cast<size_t>(state.range(1));\r\n    const size_t HSize = Pos * 2;\r\n    const size_t Which = 0;\r\n\r\n    using container = conditional_t<Alg == AlgType::std_func, vector<T, not_highly_aligned_allocator<T>>,\r\n        basic_string<T, char_traits<T>, not_highly_aligned_allocator<T>>>;\r\n\r\n    constexpr size_t IncrementCap = 16;\r\n\r\n    constexpr T HaystackFillerBase = T{' '};\r\n    static_assert(\r\n        NeedleFillerBase + IncrementCap <= HaystackFillerBase || HaystackFillerBase + IncrementCap <= NeedleFillerBase,\r\n        \"Would match where it shouldn't\");\r\n\r\n    container h(HSize, T{0});\r\n    container n(NSize, T{0});\r\n\r\n    for (size_t i = 0; i != NSize; ++i) {\r\n        n[i] = NeedleFillerBase + i % IncrementCap;\r\n    }\r\n\r\n    if (Pos >= HSize || Which >= NSize) {\r\n        abort();\r\n    }\r\n\r\n    if constexpr (Alg == AlgType::str_member_first_not || Alg == AlgType::str_member_last_not) {\r\n        for (size_t i = 0; i != HSize; ++i) {\r\n            h[i] = n[(i + Which) % NSize];\r\n        }\r\n\r\n        h[Pos] = HaystackFillerBase;\r\n    } else {\r\n        for (size_t i = 0; i != HSize; ++i) {\r\n            h[i] = HaystackFillerBase + i % IncrementCap;\r\n        }\r\n\r\n        h[Pos] = n[Which];\r\n    }\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(h);\r\n        benchmark::DoNotOptimize(n);\r\n        if constexpr (Alg == AlgType::str_member_first) {\r\n            benchmark::DoNotOptimize(h.find_first_of(n));\r\n        } else if constexpr (Alg == AlgType::str_member_last) {\r\n            benchmark::DoNotOptimize(h.find_last_of(n));\r\n        } else if constexpr (Alg == AlgType::str_member_first_not) {\r\n            benchmark::DoNotOptimize(h.find_first_not_of(n));\r\n        } else if constexpr (Alg == AlgType::str_member_last_not) {\r\n            benchmark::DoNotOptimize(h.find_last_not_of(n));\r\n        } else {\r\n            benchmark::DoNotOptimize(find_first_of(h.begin(), h.end(), n.begin(), n.end()));\r\n        }\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->Args({2, 3})->Args({6, 81})->Args({7, 4})->Args({9, 3})->Args({22, 5})->Args({58, 2});\r\n    bm->Args({75, 85})->Args({102, 4})->Args({200, 46})->Args({325, 1})->Args({400, 50});\r\n    bm->Args({1011, 11})->Args({1280, 46})->Args({1502, 23})->Args({2203, 54})->Args({3056, 7});\r\n}\r\n\r\nBENCHMARK(bm<AlgType::std_func, uint8_t>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::std_func, uint16_t>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::std_func, uint32_t>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::std_func, uint64_t>)->Apply(common_args);\r\n\r\nBENCHMARK(bm<AlgType::str_member_first, char>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::str_member_first, wchar_t>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::str_member_first, wchar_t, L'\\x03B1'>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::str_member_first, char32_t>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::str_member_first, char32_t, U'\\x03B1'>)->Apply(common_args);\r\n\r\nBENCHMARK(bm<AlgType::str_member_last, char>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::str_member_last, wchar_t>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::str_member_last, wchar_t, L'\\x03B1'>)->Apply(common_args);\r\n\r\nBENCHMARK(bm<AlgType::str_member_first_not, char>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::str_member_first_not, wchar_t>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::str_member_first_not, wchar_t, L'\\x03B1'>)->Apply(common_args);\r\n\r\nBENCHMARK(bm<AlgType::str_member_last_not, char>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::str_member_last_not, wchar_t>)->Apply(common_args);\r\nBENCHMARK(bm<AlgType::str_member_last_not, wchar_t, L'\\x03B1'>)->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/flat_meow_assign.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n#include <flat_map>\r\n#include <flat_set>\r\n#include <string>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nvoid flat_map_strings_impl(benchmark::State& state, initializer_list<pair<string, int>> il) {\r\n    flat_map<string, int> pieces;\r\n    for (auto _ : state) {\r\n        pieces = il;\r\n        benchmark::DoNotOptimize(pieces);\r\n    }\r\n}\r\n\r\nvoid flat_map_strings(benchmark::State& state) {\r\n    flat_map_strings_impl(\r\n        state, {{\"soldier\"s, 1}, {\"soldier\"s, 2}, {\"soldier\"s, 3}, {\"soldier\"s, 4}, {\"soldier\"s, 5}, {\"soldier\"s, 6},\r\n                   {\"soldier\"s, 7}, {\"soldier\"s, 8}, {\"tower\"s, 9}, {\"horse\"s, 10}, {\"elephant\"s, 11}, {\"vizier\"s, 12},\r\n                   {\"king\"s, 13}, {\"elephant\"s, 14}, {\"horse\"s, 15}, {\"tower\"s, 16}});\r\n}\r\n\r\nvoid flat_set_strings_impl(benchmark::State& state, initializer_list<string> il) {\r\n    flat_set<string> pieces;\r\n    for (auto _ : state) {\r\n        pieces = il;\r\n        benchmark::DoNotOptimize(pieces);\r\n    }\r\n}\r\n\r\nvoid flat_set_strings(benchmark::State& state) {\r\n    flat_set_strings_impl(\r\n        state, {\"soldier\"s, \"soldier\"s, \"soldier\"s, \"soldier\"s, \"soldier\"s, \"soldier\"s, \"soldier\"s, \"soldier\"s,\r\n                   \"tower\"s, \"horse\"s, \"elephant\"s, \"vizier\"s, \"king\"s, \"elephant\"s, \"horse\"s, \"tower\"s});\r\n}\r\n\r\nvoid flat_map_integers(benchmark::State& state) {\r\n    flat_map<int, int> pieces;\r\n    for (auto _ : state) {\r\n        pieces = {{'s', 1}, {'s', 2}, {'s', 3}, {'s', 4}, {'s', 5}, {'s', 6}, {'s', 7}, {'s', 8}, {'T', 9}, {'H', 10},\r\n            {'E', 11}, {'V', 12}, {'K', 13}, {'E', 14}, {'H', 15}, {'T', 16}};\r\n        benchmark::DoNotOptimize(pieces);\r\n    }\r\n}\r\n\r\nvoid flat_set_integers(benchmark::State& state) {\r\n    flat_set<int> pieces;\r\n    for (auto _ : state) {\r\n        pieces = {'s', 's', 's', 's', 's', 's', 's', 's', 'T', 'H', 'E', 'V', 'K', 'E', 'H', 'T'};\r\n        benchmark::DoNotOptimize(pieces);\r\n    }\r\n}\r\n\r\nBENCHMARK(flat_map_strings);\r\nBENCHMARK(flat_set_strings);\r\nBENCHMARK(flat_map_integers);\r\nBENCHMARK(flat_set_integers);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/has_single_bit.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n#include <bit>\r\n#include <cstdint>\r\n\r\n#include <utility.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename T>\r\nvoid bm_has_single_bit_if(benchmark::State& state) {\r\n    auto random_v = random_vector<T>(8);\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(random_v);\r\n        unsigned int count_true  = 0;\r\n        unsigned int count_false = 0;\r\n        for (const auto& x : random_v) {\r\n            if (has_single_bit(x)) {\r\n                benchmark::DoNotOptimize(++count_true);\r\n            } else {\r\n                benchmark::DoNotOptimize(++count_false);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <typename T>\r\nvoid bm_has_single_bit(benchmark::State& state) {\r\n    auto random_v = random_vector<T>(8);\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(random_v);\r\n        unsigned int r = 0;\r\n        for (const auto& x : random_v) {\r\n            r += has_single_bit(x);\r\n        }\r\n        benchmark::DoNotOptimize(r);\r\n    }\r\n}\r\n\r\nBENCHMARK(bm_has_single_bit_if<uint8_t>);\r\nBENCHMARK(bm_has_single_bit_if<uint16_t>);\r\nBENCHMARK(bm_has_single_bit_if<uint32_t>);\r\nBENCHMARK(bm_has_single_bit_if<uint64_t>);\r\n\r\nBENCHMARK(bm_has_single_bit<uint8_t>);\r\nBENCHMARK(bm_has_single_bit<uint16_t>);\r\nBENCHMARK(bm_has_single_bit<uint32_t>);\r\nBENCHMARK(bm_has_single_bit<uint64_t>);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/includes.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstdlib>\r\n#include <iostream>\r\n#include <limits>\r\n#include <random>\r\n#include <ranges>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n#include \"utility.hpp\"\r\n\r\nusing namespace std;\r\n\r\nenum class alg_type { std_fn, rng };\r\n\r\nenum class needle_spread { dense, dense_random, sparse, sparse_random };\r\n\r\ntemplate <class T, alg_type Alg>\r\nvoid bm_includes(benchmark::State& state) {\r\n    const auto hay_size       = static_cast<size_t>(state.range(0));\r\n    const auto needle_size    = static_cast<size_t>(state.range(1));\r\n    const auto spread         = static_cast<needle_spread>(state.range(2));\r\n    const auto expected_match = static_cast<bool>(state.range(3));\r\n\r\n    auto hay = random_vector<T, not_highly_aligned_allocator>(hay_size);\r\n    ranges::sort(hay);\r\n\r\n    vector<T, not_highly_aligned_allocator<T>> needle;\r\n    switch (spread) {\r\n    case needle_spread::dense:\r\n        needle.assign(hay.begin() + hay_size / 2 - needle_size / 2, hay.begin() + hay_size / 2 + (needle_size + 1) / 2);\r\n        break;\r\n\r\n    case needle_spread::dense_random:\r\n        {\r\n            mt19937 gen{};\r\n            geometric_distribution<size_t> dis_dis{};\r\n            vector<size_t> idx(needle_size);\r\n            const size_t mid = needle_size / 2;\r\n            idx[mid]         = hay_size / 2;\r\n\r\n            const size_t max_shift = hay_size / needle_size;\r\n\r\n            for (size_t i = mid; i != 0; --i) {\r\n                idx[i - 1] = idx[i] - min(dis_dis(gen) + 1, max_shift);\r\n            }\r\n\r\n            for (size_t i = mid; i != needle_size - 1; ++i) {\r\n                idx[i + 1] = idx[i] + min(dis_dis(gen) + 1, max_shift);\r\n            }\r\n\r\n            needle.assign_range(idx | views::transform([&hay](const size_t i) { return hay[i]; }));\r\n        }\r\n        break;\r\n\r\n    case needle_spread::sparse:\r\n        needle.resize(needle_size);\r\n        for (size_t i = 0; i != needle_size; ++i) {\r\n            needle[i] = hay[hay_size * i / needle_size + hay_size / (needle_size * 2)];\r\n        }\r\n        break;\r\n\r\n    case needle_spread::sparse_random:\r\n        needle.resize(needle_size);\r\n        ranges::sample(hay, needle.begin(), needle_size, mt19937{});\r\n        break;\r\n    }\r\n\r\n    if (!expected_match) {\r\n        const T v = needle[needle_size / 2];\r\n        const T r = v != numeric_limits<T>::max() ? v + 1 : v - 1;\r\n        ranges::replace(hay, v, r);\r\n    }\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(hay);\r\n        benchmark::DoNotOptimize(needle);\r\n        bool found;\r\n        if constexpr (Alg == alg_type::rng) {\r\n            found = ranges::includes(hay, needle);\r\n        } else {\r\n            found = includes(hay.begin(), hay.end(), needle.begin(), needle.end());\r\n        }\r\n        benchmark::DoNotOptimize(found);\r\n        if (found != expected_match) {\r\n            cerr << \"Unexpected 'includes' result: \" << found << '\\n';\r\n            abort();\r\n        }\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    for (const auto& spread :\r\n        {needle_spread::dense, needle_spread::dense_random, needle_spread::sparse, needle_spread::sparse_random}) {\r\n        for (const auto& expected_match : {true, false}) {\r\n            for (const auto& needle_size : {3, 22, 105, 1504, 2750}) {\r\n                bm->Args({3000, needle_size, static_cast<underlying_type_t<needle_spread>>(spread), expected_match});\r\n            }\r\n\r\n            for (const auto& needle_size : {3, 22, 105, 290}) {\r\n                bm->Args({300, needle_size, static_cast<underlying_type_t<needle_spread>>(spread), expected_match});\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nBENCHMARK(bm_includes<uint8_t, alg_type::std_fn>)->Apply(common_args);\r\nBENCHMARK(bm_includes<uint16_t, alg_type::std_fn>)->Apply(common_args);\r\nBENCHMARK(bm_includes<uint32_t, alg_type::std_fn>)->Apply(common_args);\r\nBENCHMARK(bm_includes<uint64_t, alg_type::std_fn>)->Apply(common_args);\r\n\r\nBENCHMARK(bm_includes<uint8_t, alg_type::rng>)->Apply(common_args);\r\nBENCHMARK(bm_includes<uint16_t, alg_type::rng>)->Apply(common_args);\r\nBENCHMARK(bm_includes<uint32_t, alg_type::rng>)->Apply(common_args);\r\nBENCHMARK(bm_includes<uint64_t, alg_type::rng>)->Apply(common_args);\r\n\r\nBENCHMARK(bm_includes<int8_t, alg_type::std_fn>)->Apply(common_args);\r\nBENCHMARK(bm_includes<int16_t, alg_type::std_fn>)->Apply(common_args);\r\nBENCHMARK(bm_includes<int32_t, alg_type::std_fn>)->Apply(common_args);\r\nBENCHMARK(bm_includes<int64_t, alg_type::std_fn>)->Apply(common_args);\r\n\r\nBENCHMARK(bm_includes<int8_t, alg_type::rng>)->Apply(common_args);\r\nBENCHMARK(bm_includes<int16_t, alg_type::rng>)->Apply(common_args);\r\nBENCHMARK(bm_includes<int32_t, alg_type::rng>)->Apply(common_args);\r\nBENCHMARK(bm_includes<int64_t, alg_type::rng>)->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/integer_to_string.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <benchmark/benchmark.h>\r\n#include <charconv>\r\n#include <cmath>\r\n#include <cstdint>\r\n#include <limits>\r\n#include <random>\r\n#include <string>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T, double M, double S>\r\nauto generate_array() {\r\n    array<T, 2000> a;\r\n\r\n    mt19937_64 gen;\r\n    lognormal_distribution<double> dis(M, S);\r\n    auto get_clamped_value = [&] {\r\n        for (;;) {\r\n            const double dbl       = floor(dis(gen));\r\n            constexpr auto max_val = static_cast<double>(numeric_limits<T>::max());\r\n            if (dbl <= max_val) {\r\n                return static_cast<T>(dbl);\r\n            }\r\n        }\r\n    };\r\n    ranges::generate(a, get_clamped_value);\r\n\r\n    if constexpr (is_signed_v<T>) {\r\n        bernoulli_distribution b(0.5);\r\n        ranges::for_each(a, [&](T& v) { v *= (b(gen) ? -1 : 1); });\r\n    }\r\n\r\n    return a;\r\n}\r\n\r\ntemplate <class T, double M, double S>\r\nvoid integer_to_chars(benchmark::State& state) {\r\n    auto a = generate_array<T, M, S>();\r\n    char buff[20]; // can hold -2^63 and 2^64 - 1\r\n\r\n    auto it = a.begin();\r\n    for (auto _ : state) {\r\n        auto i = *it;\r\n        benchmark::DoNotOptimize(i);\r\n        auto s = to_chars(begin(buff), end(buff), i);\r\n        benchmark::DoNotOptimize(s.ec);\r\n        benchmark::DoNotOptimize(s.ptr);\r\n\r\n        ++it;\r\n        if (it == a.end()) {\r\n            it = a.begin();\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class CharT, class T, double M, double S>\r\nvoid internal_integer_to_buff(benchmark::State& state) {\r\n    auto a = generate_array<T, M, S>();\r\n\r\n    CharT buff[20]; // can hold -2^63 and 2^64 - 1\r\n    auto buff_end = end(buff);\r\n\r\n    auto it = a.begin();\r\n    for (auto _ : state) {\r\n        auto i = *it;\r\n        benchmark::DoNotOptimize(i);\r\n        auto s = std::_UIntegral_to_buff(buff_end, i);\r\n        benchmark::DoNotOptimize(s);\r\n\r\n        ++it;\r\n        if (it == a.end()) {\r\n            it = a.begin();\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class T, double M, double S>\r\nvoid integer_to_string(benchmark::State& state) {\r\n    auto a = generate_array<T, M, S>();\r\n\r\n    auto it = a.begin();\r\n    for (auto _ : state) {\r\n        auto i = *it;\r\n        benchmark::DoNotOptimize(i);\r\n        auto s = to_string(i);\r\n        benchmark::DoNotOptimize(s);\r\n\r\n        ++it;\r\n        if (it == a.end()) {\r\n            it = a.begin();\r\n        }\r\n    }\r\n}\r\n\r\nBENCHMARK(integer_to_chars<uint8_t, 2.5, 1.5>);\r\nBENCHMARK(integer_to_chars<uint16_t, 5.0, 3.0>);\r\nBENCHMARK(integer_to_chars<uint32_t, 10.0, 6.0>);\r\nBENCHMARK(integer_to_chars<uint64_t, 20.0, 12.0>);\r\n\r\nBENCHMARK(internal_integer_to_buff<char, uint8_t, 2.5, 1.5>);\r\nBENCHMARK(internal_integer_to_buff<char, uint16_t, 5.0, 3.0>);\r\nBENCHMARK(internal_integer_to_buff<char, uint32_t, 10.0, 6.0>);\r\nBENCHMARK(internal_integer_to_buff<char, uint64_t, 20.0, 12.0>);\r\n\r\nBENCHMARK(internal_integer_to_buff<wchar_t, uint8_t, 2.5, 1.5>);\r\nBENCHMARK(internal_integer_to_buff<wchar_t, uint16_t, 5.0, 3.0>);\r\nBENCHMARK(internal_integer_to_buff<wchar_t, uint32_t, 10.0, 6.0>);\r\nBENCHMARK(internal_integer_to_buff<wchar_t, uint64_t, 20.0, 12.0>);\r\n\r\nBENCHMARK(integer_to_string<uint8_t, 2.5, 1.5>);\r\nBENCHMARK(integer_to_string<uint16_t, 5.0, 3.0>);\r\nBENCHMARK(integer_to_string<uint32_t, 10.0, 6.0>);\r\nBENCHMARK(integer_to_string<uint64_t, 20.0, 12.0>);\r\n\r\nBENCHMARK(integer_to_string<int8_t, 2.5, 1.5>);\r\nBENCHMARK(integer_to_string<int16_t, 5.0, 3.0>);\r\nBENCHMARK(integer_to_string<int32_t, 10.0, 6.0>);\r\nBENCHMARK(integer_to_string<int64_t, 20.0, 12.0>);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/iota.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <numeric>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n\r\nenum class Alg {\r\n    Std,\r\n    Rng,\r\n};\r\n\r\ntemplate <class T, Alg Algorithm>\r\nvoid bm(benchmark::State& state) {\r\n    const auto size = static_cast<std::size_t>(state.range(0));\r\n\r\n    std::vector<T, not_highly_aligned_allocator<T>> a(size);\r\n\r\n    for (auto _ : state) {\r\n        if constexpr (Algorithm == Alg::Std) {\r\n            std::iota(a.begin(), a.end(), T{22});\r\n        } else if constexpr (Algorithm == Alg::Rng) {\r\n            std::ranges::iota(a, T{22});\r\n        }\r\n\r\n        benchmark::DoNotOptimize(a);\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->Arg(7)->Arg(18)->Arg(43)->Arg(131)->Arg(315)->Arg(1212);\r\n}\r\n\r\nBENCHMARK(bm<std::uint32_t, Alg::Std>)->Apply(common_args);\r\nBENCHMARK(bm<std::uint64_t, Alg::Std>)->Apply(common_args);\r\n\r\nBENCHMARK(bm<std::uint32_t, Alg::Rng>)->Apply(common_args);\r\nBENCHMARK(bm<std::uint64_t, Alg::Rng>)->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/is_sorted_until.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <random>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n#include \"utility.hpp\"\r\n\r\nenum class AlgType { Std, Rng };\r\n\r\ntemplate <class T, AlgType Alg>\r\nvoid bm_is_sorted_until(benchmark::State& state) {\r\n    const std::size_t size     = static_cast<std::size_t>(state.range(0));\r\n    const std::size_t sort_pos = static_cast<std::size_t>(state.range(1));\r\n\r\n    std::vector<T, not_highly_aligned_allocator<T>> v;\r\n    if constexpr (std::is_integral_v<T>) {\r\n        v = random_vector<T, not_highly_aligned_allocator>(size);\r\n    } else if constexpr (std::is_floating_point_v<T>) {\r\n        v.resize(size, 0.0);\r\n        std::mt19937 gen;\r\n        std::normal_distribution<T> dis(0, 100000.0);\r\n        std::generate_n(v.begin(), size, [&dis, &gen] { return dis(gen); });\r\n    } else {\r\n        static_assert(false);\r\n    }\r\n\r\n    std::sort(v.begin(), v.begin() + sort_pos);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(v);\r\n        if constexpr (Alg == AlgType::Std) {\r\n            benchmark::DoNotOptimize(std::is_sorted_until(v.begin(), v.end()));\r\n        } else {\r\n            benchmark::DoNotOptimize(std::ranges::is_sorted_until(v));\r\n        }\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->ArgPair(3000, 1800);\r\n}\r\n\r\nBENCHMARK(bm_is_sorted_until<std::int8_t, AlgType::Std>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<std::int8_t, AlgType::Rng>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<std::int16_t, AlgType::Std>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<std::int16_t, AlgType::Rng>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<std::int32_t, AlgType::Std>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<std::int32_t, AlgType::Rng>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<std::int64_t, AlgType::Std>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<std::int64_t, AlgType::Rng>)->Apply(common_args);\r\n\r\nBENCHMARK(bm_is_sorted_until<std::uint8_t, AlgType::Std>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<std::uint8_t, AlgType::Rng>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<std::uint16_t, AlgType::Std>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<std::uint16_t, AlgType::Rng>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<std::uint32_t, AlgType::Std>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<std::uint32_t, AlgType::Rng>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<std::uint64_t, AlgType::Std>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<std::uint64_t, AlgType::Rng>)->Apply(common_args);\r\n\r\nBENCHMARK(bm_is_sorted_until<float, AlgType::Std>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<float, AlgType::Rng>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<double, AlgType::Std>)->Apply(common_args);\r\nBENCHMARK(bm_is_sorted_until<double, AlgType::Rng>)->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/locale_classic.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n#include <locale>\r\nusing namespace std;\r\n\r\n// GH-3048 <locale>: Double-checked locking for locale::classic\r\nvoid BM_locale_classic(benchmark::State& state) {\r\n    for (auto _ : state) {\r\n        auto v = locale::classic();\r\n        benchmark::DoNotOptimize(v);\r\n    }\r\n}\r\nBENCHMARK(BM_locale_classic);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/locate_zone.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include \"benchmark/benchmark.h\"\r\n#include <chrono>\r\n\r\nvoid locate_zone(benchmark::State& state) {\r\n    const auto& db = std::chrono::get_tzdb();\r\n    for (auto _ : state) {\r\n        for (const auto& z : db.zones) {\r\n            auto res = db.locate_zone(z.name());\r\n            benchmark::DoNotOptimize(res);\r\n        }\r\n    }\r\n}\r\n\r\nBENCHMARK(locate_zone);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/minmax_element.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <random>\r\n#include <ranges>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n\r\nenum class Op {\r\n    Min,\r\n    Max,\r\n    Both,\r\n    Min_val,\r\n    Max_val,\r\n    Both_val,\r\n};\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T, Op Operation>\r\nvoid bm(benchmark::State& state) {\r\n    vector<T, not_highly_aligned_allocator<T>> a(static_cast<size_t>(state.range()));\r\n\r\n    mt19937 gen(84710);\r\n\r\n    if constexpr (is_floating_point_v<T>) {\r\n        normal_distribution<T> dis(0, 100000.0);\r\n        ranges::generate(a, [&] { return dis(gen); });\r\n    } else {\r\n        uniform_int_distribution<conditional_t<sizeof(T) != 1, T, int>> dis(1, 20);\r\n        ranges::generate(a, [&] { return static_cast<T>(dis(gen)); });\r\n    }\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(a);\r\n\r\n        if constexpr (Operation == Op::Min) {\r\n            benchmark::DoNotOptimize(ranges::min_element(a));\r\n        } else if constexpr (Operation == Op::Max) {\r\n            benchmark::DoNotOptimize(ranges::max_element(a));\r\n        } else if constexpr (Operation == Op::Both) {\r\n            benchmark::DoNotOptimize(ranges::minmax_element(a));\r\n        } else if constexpr (Operation == Op::Min_val) {\r\n            benchmark::DoNotOptimize(ranges::min(a));\r\n        } else if constexpr (Operation == Op::Max_val) {\r\n            benchmark::DoNotOptimize(ranges::max(a));\r\n        } else if constexpr (Operation == Op::Both_val) {\r\n            benchmark::DoNotOptimize(ranges::minmax(a));\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <size_t ElementSize>\r\nvoid common_arg(benchmark::Benchmark* bm) {\r\n    bm->Arg(8021);\r\n    // AVX tail tests\r\n    bm->Arg(63 / ElementSize);\r\n}\r\n\r\nBENCHMARK(bm<uint8_t, Op::Min>)->Apply(common_arg<1>);\r\nBENCHMARK(bm<uint8_t, Op::Max>)->Apply(common_arg<1>);\r\nBENCHMARK(bm<uint8_t, Op::Both>)->Apply(common_arg<1>);\r\nBENCHMARK(bm<uint8_t, Op::Min_val>)->Apply(common_arg<1>);\r\nBENCHMARK(bm<uint8_t, Op::Max_val>)->Apply(common_arg<1>);\r\nBENCHMARK(bm<uint8_t, Op::Both_val>)->Apply(common_arg<1>);\r\n\r\nBENCHMARK(bm<uint16_t, Op::Min>)->Apply(common_arg<2>);\r\nBENCHMARK(bm<uint16_t, Op::Max>)->Apply(common_arg<2>);\r\nBENCHMARK(bm<uint16_t, Op::Both>)->Apply(common_arg<2>);\r\nBENCHMARK(bm<uint16_t, Op::Min_val>)->Apply(common_arg<2>);\r\nBENCHMARK(bm<uint16_t, Op::Max_val>)->Apply(common_arg<2>);\r\nBENCHMARK(bm<uint16_t, Op::Both_val>)->Apply(common_arg<2>);\r\n\r\nBENCHMARK(bm<uint32_t, Op::Min>)->Apply(common_arg<4>);\r\nBENCHMARK(bm<uint32_t, Op::Max>)->Apply(common_arg<4>);\r\nBENCHMARK(bm<uint32_t, Op::Both>)->Apply(common_arg<4>);\r\nBENCHMARK(bm<uint32_t, Op::Min_val>)->Apply(common_arg<4>);\r\nBENCHMARK(bm<uint32_t, Op::Max_val>)->Apply(common_arg<4>);\r\nBENCHMARK(bm<uint32_t, Op::Both_val>)->Apply(common_arg<4>);\r\n\r\nBENCHMARK(bm<uint64_t, Op::Min>)->Apply(common_arg<8>);\r\nBENCHMARK(bm<uint64_t, Op::Max>)->Apply(common_arg<8>);\r\nBENCHMARK(bm<uint64_t, Op::Both>)->Apply(common_arg<8>);\r\nBENCHMARK(bm<uint64_t, Op::Min_val>)->Apply(common_arg<8>);\r\nBENCHMARK(bm<uint64_t, Op::Max_val>)->Apply(common_arg<8>);\r\nBENCHMARK(bm<uint64_t, Op::Both_val>)->Apply(common_arg<8>);\r\n\r\nBENCHMARK(bm<int8_t, Op::Min>)->Apply(common_arg<1>);\r\nBENCHMARK(bm<int8_t, Op::Max>)->Apply(common_arg<1>);\r\nBENCHMARK(bm<int8_t, Op::Both>)->Apply(common_arg<1>);\r\nBENCHMARK(bm<int8_t, Op::Min_val>)->Apply(common_arg<1>);\r\nBENCHMARK(bm<int8_t, Op::Max_val>)->Apply(common_arg<1>);\r\nBENCHMARK(bm<int8_t, Op::Both_val>)->Apply(common_arg<1>);\r\n\r\nBENCHMARK(bm<int16_t, Op::Min>)->Apply(common_arg<2>);\r\nBENCHMARK(bm<int16_t, Op::Max>)->Apply(common_arg<2>);\r\nBENCHMARK(bm<int16_t, Op::Both>)->Apply(common_arg<2>);\r\nBENCHMARK(bm<int16_t, Op::Min_val>)->Apply(common_arg<2>);\r\nBENCHMARK(bm<int16_t, Op::Max_val>)->Apply(common_arg<2>);\r\nBENCHMARK(bm<int16_t, Op::Both_val>)->Apply(common_arg<2>);\r\n\r\nBENCHMARK(bm<int32_t, Op::Min>)->Apply(common_arg<4>);\r\nBENCHMARK(bm<int32_t, Op::Max>)->Apply(common_arg<4>);\r\nBENCHMARK(bm<int32_t, Op::Both>)->Apply(common_arg<4>);\r\nBENCHMARK(bm<int32_t, Op::Min_val>)->Apply(common_arg<4>);\r\nBENCHMARK(bm<int32_t, Op::Max_val>)->Apply(common_arg<4>);\r\nBENCHMARK(bm<int32_t, Op::Both_val>)->Apply(common_arg<4>);\r\n\r\nBENCHMARK(bm<int64_t, Op::Min>)->Apply(common_arg<8>);\r\nBENCHMARK(bm<int64_t, Op::Max>)->Apply(common_arg<8>);\r\nBENCHMARK(bm<int64_t, Op::Both>)->Apply(common_arg<8>);\r\nBENCHMARK(bm<int64_t, Op::Min_val>)->Apply(common_arg<8>);\r\nBENCHMARK(bm<int64_t, Op::Max_val>)->Apply(common_arg<8>);\r\nBENCHMARK(bm<int64_t, Op::Both_val>)->Apply(common_arg<8>);\r\n\r\nBENCHMARK(bm<float, Op::Min>)->Apply(common_arg<4>);\r\nBENCHMARK(bm<float, Op::Max>)->Apply(common_arg<4>);\r\nBENCHMARK(bm<float, Op::Both>)->Apply(common_arg<4>);\r\nBENCHMARK(bm<float, Op::Min_val>)->Apply(common_arg<4>);\r\nBENCHMARK(bm<float, Op::Max_val>)->Apply(common_arg<4>);\r\nBENCHMARK(bm<float, Op::Both_val>)->Apply(common_arg<4>);\r\n\r\nBENCHMARK(bm<double, Op::Min>)->Apply(common_arg<8>);\r\nBENCHMARK(bm<double, Op::Max>)->Apply(common_arg<8>);\r\nBENCHMARK(bm<double, Op::Both>)->Apply(common_arg<8>);\r\nBENCHMARK(bm<double, Op::Min_val>)->Apply(common_arg<8>);\r\nBENCHMARK(bm<double, Op::Max_val>)->Apply(common_arg<8>);\r\nBENCHMARK(bm<double, Op::Both_val>)->Apply(common_arg<8>);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/mismatch.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <ranges>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n\r\nusing namespace std;\r\n\r\nconstexpr int64_t no_pos = -1;\r\n\r\nenum class op {\r\n    mismatch,\r\n    lexi,\r\n};\r\n\r\nstruct color {\r\n    uint16_t h;\r\n    uint16_t s;\r\n    uint16_t l;\r\n\r\n    bool operator==(const color&) const = default;\r\n};\r\n\r\nconstexpr color c1{30000, 40000, 20000};\r\nconstexpr color c2{30000, 40000, 30000};\r\n\r\ntemplate <class T, op Op, T MatchVal = T{'.'}, T MismatchVal = T{'x'}>\r\nvoid bm(benchmark::State& state) {\r\n    vector<T, not_highly_aligned_allocator<T>> a(static_cast<size_t>(state.range(0)), MatchVal);\r\n    vector<T, not_highly_aligned_allocator<T>> b(static_cast<size_t>(state.range(0)), MatchVal);\r\n\r\n    if (state.range(1) != no_pos) {\r\n        b.at(static_cast<size_t>(state.range(1))) = MismatchVal;\r\n    }\r\n\r\n    for (auto _ : state) {\r\n        if constexpr (Op == op::mismatch) {\r\n            benchmark::DoNotOptimize(ranges::mismatch(a, b));\r\n        } else if constexpr (Op == op::lexi) {\r\n            benchmark::DoNotOptimize(ranges::lexicographical_compare(a, b));\r\n        }\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->Args({8, 3})->Args({24, 22})->Args({105, -1})->Args({4021, 3056});\r\n}\r\n\r\nBENCHMARK(bm<uint8_t, op::mismatch>)->Apply(common_args);\r\nBENCHMARK(bm<uint16_t, op::mismatch>)->Apply(common_args);\r\nBENCHMARK(bm<uint32_t, op::mismatch>)->Apply(common_args);\r\nBENCHMARK(bm<uint64_t, op::mismatch>)->Apply(common_args);\r\nBENCHMARK(bm<color, op::mismatch, c1, c2>)->Apply(common_args);\r\n\r\nBENCHMARK(bm<uint8_t, op::lexi>)->Apply(common_args); // still optimized without vector algorithms using memcmp\r\nBENCHMARK(bm<int8_t, op::lexi>)->Apply(common_args); // optimized with vector algorithms only\r\nBENCHMARK(bm<uint16_t, op::lexi>)->Apply(common_args);\r\nBENCHMARK(bm<uint32_t, op::lexi>)->Apply(common_args);\r\nBENCHMARK(bm<uint64_t, op::lexi>)->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/move_only_function.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n#include <functional>\r\n#include <utility>\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wunqualified-std-cast-call\"\r\n#endif // defined(__clang__)\r\n\r\nusing namespace std;\r\n\r\nvoid mof_none(benchmark::State& state) {\r\n    move_only_function<void()> mof;\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(mof);\r\n    }\r\n}\r\n\r\nvoid mof_construct(benchmark::State& state) {\r\n    for (auto _ : state) {\r\n        move_only_function<void()> mof;\r\n        benchmark::DoNotOptimize(mof);\r\n    }\r\n}\r\n\r\nvoid mof_move(benchmark::State& state) {\r\n    move_only_function<void()> mof;\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(mof);\r\n        auto moved_mof = move(mof);\r\n        benchmark::DoNotOptimize(moved_mof);\r\n    }\r\n}\r\n\r\nvoid mof_construct_and_move(benchmark::State& state) {\r\n    for (auto _ : state) {\r\n        move_only_function<void()> mof;\r\n        benchmark::DoNotOptimize(mof);\r\n        auto moved_mof = move(mof);\r\n        benchmark::DoNotOptimize(moved_mof);\r\n    }\r\n}\r\n\r\nBENCHMARK(mof_none);\r\nBENCHMARK(mof_construct);\r\nBENCHMARK(mof_move);\r\nBENCHMARK(mof_construct_and_move);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/nth_element.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <random>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nconstexpr int tukey_ninther_adversary1[] = {0, 6, 12, 18, 22, 28, 34, 38, 44, 50, 54, 60, 66, 70, 76, 82, 86, 92, 98,\r\n    102, 108, 114, 118, 124, 130, 134, 140, 146, 150, 156, 162, 166, 172, 178, 182, 188, 194, 198, 204, 210, 214, 220,\r\n    226, 230, 236, 242, 246, 252, 258, 262, 268, 274, 278, 284, 290, 294, 300, 306, 310, 316, 322, 326, 332, 338, 342,\r\n    348, 354, 358, 364, 370, 374, 380, 386, 390, 396, 402, 406, 412, 418, 422, 428, 434, 438, 444, 450, 454, 460, 466,\r\n    470, 476, 482, 486, 492, 498, 502, 508, 514, 518, 524, 530, 534, 540, 546, 550, 556, 562, 566, 572, 578, 582, 588,\r\n    594, 598, 604, 610, 614, 620, 626, 630, 636, 642, 646, 652, 658, 662, 668, 674, 678, 1, 7, 13, 684, 19, 23, 29, 690,\r\n    35, 39, 45, 694, 51, 55, 61, 700, 67, 71, 77, 706, 83, 87, 93, 710, 99, 103, 109, 716, 115, 119, 125, 722, 131, 135,\r\n    141, 726, 147, 151, 157, 732, 163, 167, 173, 738, 179, 183, 189, 742, 195, 199, 205, 748, 211, 215, 221, 754, 227,\r\n    231, 237, 758, 243, 247, 253, 764, 259, 263, 269, 770, 275, 279, 285, 774, 291, 295, 301, 780, 307, 311, 317, 786,\r\n    323, 327, 333, 790, 339, 343, 349, 796, 355, 359, 365, 802, 371, 375, 381, 806, 387, 391, 397, 812, 403, 407, 413,\r\n    818, 419, 423, 429, 822, 435, 439, 445, 828, 451, 455, 461, 834, 467, 471, 477, 838, 483, 487, 493, 844, 499, 503,\r\n    509, 850, 515, 519, 525, 854, 531, 535, 541, 860, 547, 551, 557, 866, 563, 567, 573, 870, 579, 583, 589, 876, 595,\r\n    599, 605, 882, 611, 615, 621, 886, 627, 631, 637, 892, 643, 647, 653, 898, 659, 663, 669, 902, 675, 679, 685, 908,\r\n    691, 695, 701, 914, 707, 711, 717, 918, 723, 727, 733, 924, 739, 743, 749, 930, 755, 759, 765, 934, 771, 775, 781,\r\n    940, 787, 791, 797, 946, 803, 807, 813, 950, 819, 823, 829, 956, 835, 839, 845, 962, 851, 855, 861, 966, 867, 871,\r\n    877, 972, 883, 887, 893, 978, 899, 903, 909, 982, 915, 919, 925, 988, 931, 935, 941, 990, 947, 951, 957, 992, 963,\r\n    967, 973, 1024, 979, 983, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 2, 20, 8, 14, 24, 36, 30, 40, 52, 46,\r\n    56, 68, 62, 72, 84, 78, 88, 100, 94, 104, 116, 110, 120, 132, 126, 136, 148, 142, 152, 164, 158, 168, 180, 174, 184,\r\n    196, 190, 200, 212, 206, 216, 228, 222, 232, 244, 238, 248, 260, 254, 264, 276, 270, 280, 292, 286, 296, 308, 302,\r\n    312, 324, 318, 328, 340, 334, 344, 356, 350, 360, 372, 366, 376, 388, 382, 392, 404, 398, 408, 420, 414, 424, 436,\r\n    430, 440, 452, 446, 456, 468, 462, 472, 484, 478, 488, 500, 494, 504, 516, 510, 520, 532, 526, 536, 548, 542, 552,\r\n    564, 558, 568, 580, 574, 584, 596, 590, 600, 612, 606, 616, 628, 622, 632, 644, 638, 648, 660, 654, 664, 676, 670,\r\n    512, 3, 991, 9, 773, 768, 15, 680, 901, 21, 522, 25, 777, 527, 31, 692, 965, 37, 528, 41, 960, 778, 47, 686, 905,\r\n    53, 538, 57, 936, 543, 63, 696, 1007, 69, 544, 73, 789, 784, 79, 708, 1014, 85, 554, 89, 793, 559, 95, 702, 969,\r\n    101, 560, 105, 911, 794, 111, 712, 974, 117, 570, 121, 948, 575, 127, 724, 1015, 133, 576, 137, 805, 800, 143, 718,\r\n    917, 149, 586, 153, 809, 591, 159, 728, 1008, 165, 592, 169, 970, 810, 175, 740, 921, 181, 602, 185, 942, 607, 191,\r\n    734, 1009, 197, 608, 201, 821, 816, 207, 744, 975, 213, 618, 217, 825, 623, 223, 756, 1005, 229, 624, 233, 927, 826,\r\n    239, 750, 984, 245, 634, 249, 952, 639, 255, 760, 1010, 261, 640, 265, 837, 832, 271, 772, 933, 277, 650, 281, 841,\r\n    655, 287, 766, 981, 293, 656, 297, 976, 842, 303, 776, 937, 309, 666, 313, 964, 671, 319, 788, 1011, 325, 672, 329,\r\n    853, 848, 335, 782, 1016, 341, 682, 345, 857, 687, 351, 792, 985, 357, 688, 361, 943, 858, 367, 804, 1003, 373, 698,\r\n    377, 958, 703, 383, 798, 1017, 389, 704, 393, 869, 864, 399, 808, 949, 405, 714, 409, 873, 719, 415, 820, 1012, 421,\r\n    720, 425, 986, 874, 431, 814, 953, 437, 730, 441, 968, 735, 447, 824, 1013, 453, 736, 457, 885, 880, 463, 836, 989,\r\n    469, 746, 473, 889, 751, 479, 830, 1006, 485, 752, 489, 959, 890, 495, 840, 1004, 501, 762, 505, 980, 767, 511, 852,\r\n    4, 517, 10, 521, 16, 896, 26, 846, 32, 533, 42, 537, 48, 783, 58, 856, 64, 549, 74, 553, 80, 906, 90, 868, 96, 565,\r\n    106, 569, 112, 799, 122, 862, 128, 581, 138, 585, 144, 912, 154, 72, 160, 597, 170, 601, 176, 815, 186, 884, 192,\r\n    613, 202, 617, 208, 922, 218, 878, 224, 629, 234, 633, 240, 831, 250, 888, 256, 645, 266, 649, 272, 928, 282, 900,\r\n    288, 661, 298, 665, 304, 847, 314, 894, 320, 677, 330, 681, 336, 938, 346, 904, 352, 693, 362, 697, 368, 863, 378,\r\n    916, 384, 709, 394, 713, 400, 944, 410, 910, 416, 725, 426, 729, 432, 879, 442, 920, 448, 741, 458, 745, 464, 954,\r\n    474, 932, 480, 757, 490, 761, 496, 895, 506, 926, 5, 11, 17, 27, 33, 43, 49, 59, 65, 75, 81, 91, 97, 107, 113, 123,\r\n    129, 139, 145, 155, 161, 71, 177, 187, 193, 203, 209, 219, 225, 235, 241, 251, 257, 267, 273, 283, 289, 299, 305,\r\n    315, 321, 331, 337, 347, 353, 363, 369, 379, 385, 395, 401, 411, 417, 427, 433, 443, 449, 459, 465, 475, 481, 491,\r\n    497, 507, 513, 523, 529, 539, 545, 555, 561, 571, 577, 587, 593, 603, 609, 619, 625, 635, 641, 651, 657, 667, 673,\r\n    683, 689, 699, 705, 715, 721, 731, 737, 747, 753, 763, 769, 779, 785, 795, 801, 811, 817, 827, 833, 843, 849, 859,\r\n    865, 875, 881, 891, 897, 907, 913, 923, 929, 939, 945, 955, 961, 971, 977, 987, 1018, 1019, 1020, 1021, 1022};\r\n\r\nconstexpr int tukey_ninther_adversary2[] = {1024, 31, 30, 29, 28, 36, 46, 51, 61, 67, 77, 82, 92, 98, 108, 118, 123,\r\n    133, 139, 149, 154, 164, 170, 180, 190, 195, 205, 211, 221, 226, 236, 242, 252, 262, 267, 277, 283, 293, 298, 308,\r\n    314, 324, 334, 339, 349, 355, 365, 370, 380, 386, 396, 406, 411, 421, 427, 437, 442, 452, 458, 468, 478, 483, 493,\r\n    499, 509, 514, 524, 530, 540, 550, 555, 565, 571, 581, 586, 596, 602, 612, 622, 627, 637, 643, 653, 658, 668, 674,\r\n    684, 694, 699, 709, 715, 725, 730, 740, 746, 756, 766, 771, 781, 787, 797, 802, 812, 818, 828, 838, 843, 853, 859,\r\n    869, 874, 884, 890, 900, 910, 915, 925, 931, 941, 946, 956, 962, 972, 982, 987, 997, 1003, 1013, 1018, 343, 523,\r\n    127, 529, 86, 539, 358, 549, 178, 554, 107, 564, 374, 570, 183, 580, 384, 585, 389, 595, 394, 601, 399, 611, 404,\r\n    621, 409, 626, 18, 636, 419, 642, 425, 652, 318, 657, 435, 667, 440, 673, 169, 683, 450, 693, 224, 698, 256, 708,\r\n    179, 714, 66, 724, 234, 729, 487, 739, 189, 745, 34, 755, 502, 765, 71, 770, 188, 780, 518, 786, 76, 796, 528, 801,\r\n    533, 811, 538, 817, 543, 827, 548, 837, 553, 842, 163, 852, 563, 858, 569, 868, 286, 873, 579, 883, 584, 889, 70,\r\n    899, 594, 909, 219, 914, 97, 924, 235, 930, 91, 940, 462, 945, 631, 955, 173, 961, 241, 971, 646, 981, 322, 986,\r\n    272, 996, 662, 1002, 327, 1012, 672, 1017, 677, 1023, 682, 184, 687, 44, 692, 80, 697, 703, 390, 347, 707, 193, 713,\r\n    718, 534, 276, 723, 26, 728, 734, 32, 200, 738, 744, 368, 749, 137, 754, 15, 759, 25, 764, 378, 769, 775, 575, 90,\r\n    779, 148, 785, 790, 297, 215, 795, 225, 800, 806, 447, 56, 810, 816, 27, 821, 153, 826, 616, 831, 152, 836, 59, 841,\r\n    847, 472, 632, 851, 116, 857, 862, 430, 214, 867, 647, 872, 878, 106, 251, 882, 888, 21, 893, 332, 898, 87, 903,\r\n    132, 908, 678, 913, 919, 456, 168, 923, 230, 929, 934, 519, 466, 939, 19, 944, 950, 353, 471, 954, 960, 364, 965,\r\n    719, 970, 271, 975, 544, 980, 369, 985, 991, 210, 491, 995, 282, 1001, 1006, 750, 250, 1011, 121, 1016, 1022, 385,\r\n    292, 507, 65, 512, 255, 102, 776, 395, 45, 159, 287, 522, 260, 591, 791, 405, 117, 204, 307, 49, 265, 302, 807, 606,\r\n    400, 22, 111, 16, 344, 822, 420, 313, 303, 415, 832, 275, 203, 559, 23, 416, 426, 323, 848, 281, 231, 209, 317, 574,\r\n    436, 17, 863, 142, 333, 220, 488, 431, 441, 81, 879, 75, 590, 451, 663, 328, 446, 894, 296, 375, 600, 261, 904, 457,\r\n    348, 605, 337, 610, 60, 688, 920, 467, 96, 615, 461, 620, 306, 354, 935, 477, 704, 625, 24, 312, 128, 143, 951, 476,\r\n    635, 174, 131, 641, 240, 966, 492, 481, 138, 359, 976, 40, 363, 651, 735, 656, 498, 379, 992, 20, 497, 39, 560, 666,\r\n    508, 112, 1007, 246, 158, 162, 760, 503, 513, 482, 291, 410, 245, 338, 199, 266, 147, 194, 101, 122, 55, 50, 14, 13,\r\n    43, 48, 58, 64, 74, 79, 95, 105, 115, 120, 130, 136, 146, 151, 167, 177, 187, 192, 202, 208, 218, 223, 239, 249,\r\n    259, 264, 274, 280, 290, 295, 311, 321, 331, 336, 346, 352, 362, 367, 383, 393, 403, 408, 418, 424, 434, 439, 455,\r\n    465, 475, 480, 490, 496, 506, 511, 527, 537, 547, 552, 562, 568, 578, 583, 599, 609, 619, 624, 634, 640, 650, 655,\r\n    671, 681, 691, 696, 706, 712, 722, 727, 743, 753, 763, 768, 778, 784, 794, 799, 815, 825, 835, 840, 850, 856, 866,\r\n    871, 887, 897, 907, 912, 922, 928, 938, 943, 959, 969, 979, 984, 994, 1000, 1010, 1015, 1021, 1005, 990, 953, 974,\r\n    964, 949, 933, 918, 881, 902, 892, 877, 861, 846, 809, 830, 820, 805, 789, 774, 737, 758, 748, 733, 717, 702, 665,\r\n    686, 676, 661, 645, 630, 593, 614, 604, 589, 573, 558, 521, 542, 532, 517, 501, 486, 449, 470, 460, 445, 429, 414,\r\n    377, 398, 388, 373, 357, 342, 305, 326, 316, 301, 285, 270, 233, 254, 244, 229, 213, 198, 161, 182, 172, 157, 141,\r\n    126, 89, 110, 100, 85, 69, 54, 12, 38, 11, 10, 9, 8, 53, 84, 99, 125, 156, 171, 197, 228, 243, 269, 300, 315, 341,\r\n    372, 387, 413, 444, 459, 485, 516, 531, 557, 588, 603, 629, 660, 675, 701, 732, 747, 773, 804, 819, 845, 876, 891,\r\n    917, 948, 963, 989, 1020, 1014, 63, 253, 258, 263, 279, 273, 284, 289, 294, 310, 304, 320, 73, 325, 330, 335, 351,\r\n    345, 356, 361, 366, 382, 376, 392, 88, 397, 402, 407, 423, 417, 428, 433, 438, 454, 448, 464, 109, 469, 474, 479,\r\n    495, 489, 500, 505, 510, 526, 520, 536, 135, 541, 546, 551, 567, 561, 572, 577, 582, 598, 592, 608, 145, 613, 618,\r\n    623, 639, 633, 644, 649, 654, 670, 664, 680, 160, 685, 690, 695, 711, 705, 716, 721, 726, 742, 736, 752, 181, 757,\r\n    762, 767, 783, 777, 788, 793, 798, 814, 808, 824, 207, 829, 834, 839, 855, 849, 860, 865, 870, 886, 880, 896, 217,\r\n    901, 906, 911, 927, 921, 932, 937, 942, 958, 952, 968, 232, 973, 978, 983, 999, 993, 1004, 1009, 248, 238, 222, 212,\r\n    201, 191, 186, 37, 176, 166, 150, 140, 129, 119, 114, 3, 104, 94, 78, 68, 57, 47, 42, 6, 7, 4, 5, 2, -1, 33, 35, 41,\r\n    52, 62, 72, 83, 93, 103, 113, 124, 134, 144, 155, 165, 175, 185, 196, 206, 216, 227, 237, 247, 257, 268, 278, 288,\r\n    299, 309, 319, 329, 340, 350, 360, 371, 381, 391, 401, 412, 422, 432, 443, 453, 463, 473, 484, 494, 504, 515, 525,\r\n    535, 545, 556, 566, 576, 587, 597, 607, 617, 628, 638, 648, 659, 669, 679, 689, 700, 710, 720, 731, 741, 751, 761,\r\n    772, 782, 792, 803, 813, 823, 833, 844, 854, 864, 875, 885, 895, 905, 916, 926, 936, 947, 957, 967, 977, 988, 998,\r\n    1008, 1019};\r\n\r\nenum class alg_type { std_fn, rng };\r\n\r\ntemplate <alg_type Type, class Src>\r\nvoid benchmark_common(benchmark::State& state, const Src& src) {\r\n    vector<int> v;\r\n    v.reserve(size(src));\r\n\r\n    for (auto _ : state) {\r\n        v.assign(begin(src), end(src));\r\n        benchmark::DoNotOptimize(v);\r\n        auto mid = v.begin() + (v.size() / 2);\r\n        if constexpr (Type == alg_type::std_fn) {\r\n            nth_element(v.begin(), mid, v.end());\r\n        } else {\r\n            ranges::nth_element(v.begin(), mid, v.end());\r\n        }\r\n        benchmark::DoNotOptimize(*mid);\r\n    }\r\n}\r\n\r\ntemplate <alg_type Type>\r\nvoid bm_uniform(benchmark::State& state) {\r\n    vector<int> src(static_cast<size_t>(state.range()));\r\n    mt19937 gen(84710);\r\n    uniform_int_distribution<int> dis(1, 580);\r\n    ranges::generate(src, [&] { return dis(gen); });\r\n    benchmark_common<Type>(state, src);\r\n}\r\n\r\nBENCHMARK(bm_uniform<alg_type::std_fn>)->Arg(1024)->Arg(2048)->Arg(4096)->Arg(8192);\r\nBENCHMARK(bm_uniform<alg_type::rng>)->Arg(1024)->Arg(2048)->Arg(4096)->Arg(8192);\r\n\r\nBENCHMARK_CAPTURE(benchmark_common<alg_type::std_fn>, adversary1, tukey_ninther_adversary1);\r\nBENCHMARK_CAPTURE(benchmark_common<alg_type::rng>, adversary1, tukey_ninther_adversary1);\r\nBENCHMARK_CAPTURE(benchmark_common<alg_type::std_fn>, adversary2, tukey_ninther_adversary2);\r\nBENCHMARK_CAPTURE(benchmark_common<alg_type::rng>, adversary2, tukey_ninther_adversary2);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/path_lexically_normal.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n#include <filesystem>\r\n#include <string_view>\r\n\r\nvoid BM_lexically_normal(benchmark::State& state) {\r\n    using namespace std::literals;\r\n    static constexpr std::wstring_view args[5]{\r\n        LR\"(C:Snippets)\"sv,\r\n        LR\"(.\\Snippets)\"sv,\r\n        LR\"(..\\..\\IDE\\VC\\Snippets)\"sv,\r\n        LR\"(C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\VC\\Snippets)\"sv,\r\n        LR\"(/\\server/\\share/\\a/\\b/\\c/\\./\\./\\d/\\../\\../\\../\\../\\../\\../\\../\\other/x/y/z/.././..\\meow.txt)\"sv,\r\n    };\r\n\r\n    const auto index = state.range(0);\r\n    const std::filesystem::path p(args[index]);\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(p.lexically_normal());\r\n    }\r\n}\r\n\r\nBENCHMARK(BM_lexically_normal)->DenseRange(0, 4, 1);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/priority_queue_push_range.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <queue>\r\n#include <random>\r\n#include <span>\r\n#include <string>\r\n#include <string_view>\r\n#include <vector>\r\nusing namespace std;\r\n\r\nconstexpr size_t vec_size = 10'000;\r\n\r\ntemplate <class T, class Fn>\r\nauto create_vec(Fn transformation) {\r\n    vector<T> vec(vec_size);\r\n    for (mt19937_64 rnd(1); auto& e : vec) {\r\n        e = transformation(rnd());\r\n    }\r\n    return vec;\r\n}\r\n\r\ntemplate <class T>\r\nT cast_to(uint64_t val) {\r\n    return static_cast<T>(val);\r\n}\r\n\r\nconst auto vec_u8     = create_vec<uint8_t>(cast_to<uint8_t>);\r\nconst auto vec_u16    = create_vec<uint16_t>(cast_to<uint16_t>);\r\nconst auto vec_u32    = create_vec<uint32_t>(cast_to<uint32_t>);\r\nconst auto vec_u64    = create_vec<uint64_t>(cast_to<uint64_t>);\r\nconst auto vec_float  = create_vec<float>(cast_to<float>);\r\nconst auto vec_double = create_vec<double>(cast_to<double>);\r\n\r\nconst auto vec_str  = create_vec<string>([](uint64_t val) { return to_string(static_cast<uint32_t>(val)); });\r\nconst auto vec_wstr = create_vec<wstring>([](uint64_t val) { return to_wstring(static_cast<uint32_t>(val)); });\r\n\r\ntemplate <class T, const auto& Data>\r\nvoid BM_push_range(benchmark::State& state) {\r\n    const size_t frag_size = static_cast<size_t>(state.range(0));\r\n\r\n    for (auto _ : state) {\r\n        priority_queue<T> que;\r\n        span spn{Data};\r\n\r\n        while (!spn.empty()) {\r\n            const size_t take_size = min(spn.size(), frag_size);\r\n            que.push_range(spn.first(take_size));\r\n            spn = spn.subspan(take_size);\r\n        }\r\n        benchmark::DoNotOptimize(que);\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->RangeMultiplier(100)->Range(1, vec_size)->Arg(vec_size / 2 + 1);\r\n}\r\n\r\nBENCHMARK(BM_push_range<uint8_t, vec_u8>)->Apply(common_args);\r\nBENCHMARK(BM_push_range<uint16_t, vec_u16>)->Apply(common_args);\r\nBENCHMARK(BM_push_range<uint32_t, vec_u32>)->Apply(common_args);\r\nBENCHMARK(BM_push_range<uint64_t, vec_u64>)->Apply(common_args);\r\nBENCHMARK(BM_push_range<float, vec_float>)->Apply(common_args);\r\nBENCHMARK(BM_push_range<double, vec_double>)->Apply(common_args);\r\n\r\nBENCHMARK(BM_push_range<string_view, vec_str>)->Apply(common_args);\r\nBENCHMARK(BM_push_range<string, vec_str>)->Apply(common_args);\r\nBENCHMARK(BM_push_range<wstring_view, vec_wstr>)->Apply(common_args);\r\nBENCHMARK(BM_push_range<wstring, vec_wstr>)->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/random_integer_generation.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n#include <cstdint>\r\n#include <random>\r\n\r\n/// Test URBGs alone\r\n\r\nvoid BM_mt19937(benchmark::State& state) {\r\n    std::mt19937 gen;\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(gen());\r\n    }\r\n}\r\nBENCHMARK(BM_mt19937);\r\n\r\nvoid BM_mt19937_64(benchmark::State& state) {\r\n    std::mt19937_64 gen;\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(gen());\r\n    }\r\n}\r\nBENCHMARK(BM_mt19937_64);\r\n\r\nvoid BM_lcg(benchmark::State& state) {\r\n    std::minstd_rand gen;\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(gen());\r\n    }\r\n}\r\nBENCHMARK(BM_lcg);\r\n\r\n/// Test discard()\r\n\r\ntemplate <class Engine>\r\nvoid BM_discard(benchmark::State& state) {\r\n    Engine gen;\r\n    const auto n = static_cast<unsigned long long>(state.range(0));\r\n    for (auto _ : state) {\r\n        gen.discard(n);\r\n        benchmark::DoNotOptimize(gen());\r\n    }\r\n}\r\nBENCHMARK(BM_discard<std::mt19937>)->Range(0, 1 << 18);\r\nBENCHMARK(BM_discard<std::mt19937_64>)->Range(0, 1 << 18);\r\nBENCHMARK(BM_discard<std::minstd_rand>)->Range(0, 1 << 18);\r\n\r\n/// Support machinery for testing _Rng_from_urng_v2\r\n\r\nstd::uint32_t GetMax() {\r\n    std::mt19937 gen;\r\n    std::uniform_int_distribution<std::uint32_t> dist(10'000'000, 20'000'000);\r\n    return dist(gen);\r\n}\r\n\r\nconst std::uint32_t maximum = GetMax(); // random divisor to prevent strength reduction\r\n\r\n/// Test mt19937\r\n\r\nvoid BM_raw_mt19937_new(benchmark::State& state) {\r\n    std::mt19937 gen;\r\n    std::_Rng_from_urng_v2<std::uint32_t, decltype(gen)> rng(gen);\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(rng(maximum));\r\n    }\r\n}\r\nBENCHMARK(BM_raw_mt19937_new);\r\n\r\n/// Test mt19937_64\r\n\r\nvoid BM_raw_mt19937_64_new(benchmark::State& state) {\r\n    std::mt19937_64 gen;\r\n    std::_Rng_from_urng_v2<std::uint64_t, decltype(gen)> rng(gen);\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(rng(maximum));\r\n    }\r\n}\r\nBENCHMARK(BM_raw_mt19937_64_new);\r\n\r\n/// Test minstd_rand\r\n\r\nvoid BM_raw_lcg_new(benchmark::State& state) {\r\n    std::minstd_rand gen;\r\n    std::_Rng_from_urng_v2<std::uint32_t, decltype(gen)> rng(gen);\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(rng(maximum));\r\n    }\r\n}\r\nBENCHMARK(BM_raw_lcg_new);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/ranges_div_ceil.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n#include <cstdint>\r\n#include <limits>\r\n#include <ranges>\r\n\r\nusing namespace std;\r\n\r\nstruct Data {\r\n    _Signed128 num;\r\n    _Signed128 den;\r\n};\r\n\r\nconstexpr Data d1{_Signed128{0x0000'1111'2222'3333LL, 0x4444'5555'6666'7777LL}, 0x7777'8888};\r\nstatic_assert(d1.num > numeric_limits<uint64_t>::max());\r\nstatic_assert(d1.den <= numeric_limits<uint32_t>::max());\r\n\r\nconstexpr Data d2{_Signed128{0x0000'1111'2222'3333LL, 0x4444'5555'6666'7777LL}, 0x7777'8888'9999'AAAA};\r\nstatic_assert(d2.num > numeric_limits<uint64_t>::max());\r\nstatic_assert(d2.den <= numeric_limits<uint64_t>::max());\r\n\r\nconstexpr Data d3{\r\n    _Signed128{0x0000'1111'2222'3333LL, 0x4444'5555'6666'7777LL}, _Signed128{0x7777'8888'9999'AAAA, 0xBBBB}};\r\nstatic_assert(d3.num > numeric_limits<uint64_t>::max());\r\nstatic_assert(d3.den > numeric_limits<uint64_t>::max());\r\n\r\nvoid bm(benchmark::State& state, const Data& data) {\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(ranges::_Div_ceil(data.num, data.den));\r\n    }\r\n}\r\n\r\nBENCHMARK_CAPTURE(bm, div_ceil_int128_uint32, d1);\r\nBENCHMARK_CAPTURE(bm, div_ceil_int128_uint64, d2);\r\nBENCHMARK_CAPTURE(bm, div_ceil_int128_int128, d3);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/regex_match.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <regex>\r\n#include <string>\r\n\r\nusing namespace std;\r\nusing namespace regex_constants;\r\n\r\nvoid bm_match_sequence_of_as(benchmark::State& state, const char* pattern, syntax_option_type syntax = ECMAScript) {\r\n    string input(static_cast<size_t>(state.range()), 'a');\r\n    regex re{pattern, syntax};\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(input);\r\n        const char* pos = input.data();\r\n        const char* end = input.data() + input.size();\r\n        cmatch match;\r\n        regex_match(pos, end, match, re);\r\n    }\r\n}\r\n\r\nvoid bm_match_sequence_of_9a1b(benchmark::State& state, const char* pattern, syntax_option_type syntax = ECMAScript) {\r\n    string input;\r\n    for (int i = 0; i < state.range(); ++i) {\r\n        input += \"aaaaaaaaab\";\r\n    }\r\n\r\n    regex re{pattern, syntax};\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(input);\r\n        const char* pos = input.data();\r\n        const char* end = input.data() + input.size();\r\n        cmatch match;\r\n        regex_match(pos, end, match, re);\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->Arg(100)->Arg(200)->Arg(400);\r\n}\r\n\r\nBENCHMARK_CAPTURE(bm_match_sequence_of_as, \"a*\", \"a*\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_match_sequence_of_as, \"a*?\", \"a*?\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_match_sequence_of_as, \"(?:a)*\", \"(?:a)*\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_match_sequence_of_as, \"(a)*\", \"(a)*\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_match_sequence_of_as, \"(a)*?\", \"(a)*?\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_match_sequence_of_as, \"(?:b|a)*\", \"(?:b|a)*\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_match_sequence_of_as, \"(b|a)*\", \"(b|a)*\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_match_sequence_of_as, \"(a)(?:b|a)*\", \"(a)(?:b|a)*\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_match_sequence_of_as, \"(a)(b|a)*\", \"(a)(b|a)*\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_match_sequence_of_as, \"(a)(?:b|a)*c\", \"(a)(?:b|a)*c\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_match_sequence_of_9a1b, \"(?:a*b)*\", \"(?:a*b)*\")->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/regex_search.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n#include <regex>\r\n#include <string>\r\n\r\n#include \"lorem.hpp\"\r\n\r\nusing namespace std;\r\nusing namespace regex_constants;\r\n\r\nvoid bm_lorem_search(benchmark::State& state, const char* pattern, syntax_option_type syntax = ECMAScript) {\r\n    string repeated_lorem{lorem_ipsum};\r\n    for (long long i = 0; i < state.range(); ++i) {\r\n        repeated_lorem += repeated_lorem;\r\n    }\r\n    regex re{pattern, syntax};\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(repeated_lorem);\r\n        const char* pos = repeated_lorem.data();\r\n        const char* end = repeated_lorem.data() + repeated_lorem.size();\r\n        cmatch match;\r\n        for (; regex_search(pos, end, match, re); ++pos) {\r\n            benchmark::DoNotOptimize(match);\r\n            pos = match[0].second;\r\n            if (pos == end) {\r\n                break;\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->Arg(2)->Arg(3)->Arg(4);\r\n}\r\n\r\nBENCHMARK_CAPTURE(bm_lorem_search, \"^bibe\", \"^bibe\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_lorem_search, \"bibe\", \"bibe\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_lorem_search, \"bibe\".collate, \"bibe\", regex_constants::collate)->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_lorem_search, \"(bibe)\", \"(bibe)\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_lorem_search, \"(bibe)+\", \"(bibe)+\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_lorem_search, \"(?:bibe)+\", \"(?:bibe)+\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_lorem_search, R\"(\\bbibe)\", R\"(\\bbibe)\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_lorem_search, R\"(\\Bibe)\", R\"(\\Bibe)\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_lorem_search, R\"((?=....)bibe)\", R\"((?=....)bibe)\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_lorem_search, R\"((?=bibe)....)\", R\"((?=bibe)....)\")->Apply(common_args);\r\nBENCHMARK_CAPTURE(bm_lorem_search, R\"((?!lorem)bibe)\", R\"((?!lorem)bibe)\")->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/remove.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstdint>\r\n#include <vector>\r\n\r\n#include \"lorem.hpp\"\r\n#include \"skewed_allocator.hpp\"\r\n\r\nenum class alg_type { std_fn, rng };\r\n\r\ntemplate <alg_type Type, class T>\r\nvoid r(benchmark::State& state) {\r\n    const std::vector<T, not_highly_aligned_allocator<T>> src(lorem_ipsum.begin(), lorem_ipsum.end());\r\n    std::vector<T, not_highly_aligned_allocator<T>> v;\r\n    v.reserve(lorem_ipsum.size());\r\n    for (auto _ : state) {\r\n        v = src;\r\n        benchmark::DoNotOptimize(v);\r\n        if constexpr (Type == alg_type::std_fn) {\r\n            benchmark::DoNotOptimize(std::remove(v.begin(), v.end(), T{'l'}));\r\n        } else {\r\n            benchmark::DoNotOptimize(std::ranges::remove(v, T{'l'}));\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <alg_type Type, class T>\r\nvoid rc(benchmark::State& state) {\r\n    std::vector<T, not_highly_aligned_allocator<T>> src(lorem_ipsum.begin(), lorem_ipsum.end());\r\n    std::vector<T, not_highly_aligned_allocator<T>> v(lorem_ipsum.size());\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(src);\r\n        benchmark::DoNotOptimize(v);\r\n        if constexpr (Type == alg_type::std_fn) {\r\n            benchmark::DoNotOptimize(std::remove_copy(src.begin(), src.end(), v.begin(), T{'l'}));\r\n        } else {\r\n            benchmark::DoNotOptimize(std::ranges::remove_copy(src, v.begin(), T{'l'}));\r\n        }\r\n    }\r\n}\r\n\r\nBENCHMARK(r<alg_type::std_fn, std::uint8_t>);\r\nBENCHMARK(r<alg_type::std_fn, std::uint16_t>);\r\nBENCHMARK(r<alg_type::std_fn, std::uint32_t>);\r\nBENCHMARK(r<alg_type::std_fn, std::uint64_t>);\r\n\r\nBENCHMARK(r<alg_type::rng, std::uint8_t>);\r\nBENCHMARK(r<alg_type::rng, std::uint16_t>);\r\nBENCHMARK(r<alg_type::rng, std::uint32_t>);\r\nBENCHMARK(r<alg_type::rng, std::uint64_t>);\r\n\r\nBENCHMARK(rc<alg_type::std_fn, std::uint8_t>);\r\nBENCHMARK(rc<alg_type::std_fn, std::uint16_t>);\r\nBENCHMARK(rc<alg_type::std_fn, std::uint32_t>);\r\nBENCHMARK(rc<alg_type::std_fn, std::uint64_t>);\r\n\r\nBENCHMARK(rc<alg_type::rng, std::uint8_t>);\r\nBENCHMARK(rc<alg_type::rng, std::uint16_t>);\r\nBENCHMARK(rc<alg_type::rng, std::uint32_t>);\r\nBENCHMARK(rc<alg_type::rng, std::uint64_t>);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/replace.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstdint>\r\n#include <vector>\r\n\r\n#include \"lorem.hpp\"\r\n#include \"skewed_allocator.hpp\"\r\n\r\ntemplate <class T>\r\nvoid r(benchmark::State& state) {\r\n    std::vector<T, not_highly_aligned_allocator<T>> a(lorem_ipsum.begin(), lorem_ipsum.end());\r\n    std::vector<T, not_highly_aligned_allocator<T>> b(lorem_ipsum.size());\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(a);\r\n        b = a;\r\n        std::replace(std::begin(b), std::end(b), T{'m'}, T{'w'});\r\n        benchmark::DoNotOptimize(b);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid rc(benchmark::State& state) {\r\n    std::vector<T, not_highly_aligned_allocator<T>> a(lorem_ipsum.begin(), lorem_ipsum.end());\r\n    std::vector<T, not_highly_aligned_allocator<T>> b(lorem_ipsum.size());\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(a);\r\n        std::replace_copy(std::begin(a), std::end(a), std::begin(b), T{'m'}, T{'w'});\r\n        benchmark::DoNotOptimize(b);\r\n    }\r\n}\r\n\r\n// replace() is vectorized for 4 and 8 bytes only.\r\nBENCHMARK(r<std::uint32_t>);\r\nBENCHMARK(r<std::uint64_t>);\r\n\r\nBENCHMARK(rc<std::uint8_t>);\r\nBENCHMARK(rc<std::uint16_t>);\r\nBENCHMARK(rc<std::uint32_t>);\r\nBENCHMARK(rc<std::uint64_t>);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/reverse.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstdint>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n#include \"utility.hpp\"\r\n\r\ntemplate <class T>\r\nvoid r(benchmark::State& state) {\r\n    const auto size = static_cast<size_t>(state.range(0));\r\n    auto v          = random_vector<T, not_highly_aligned_allocator>(size);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(v);\r\n        std::reverse(v.begin(), v.end());\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid rc(benchmark::State& state) {\r\n    const auto size = static_cast<size_t>(state.range(0));\r\n    auto v          = random_vector<T, not_highly_aligned_allocator>(size);\r\n    std::vector<T, not_highly_aligned_allocator<T>> d(size);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(v);\r\n        std::reverse_copy(v.begin(), v.end(), d.begin());\r\n        benchmark::DoNotOptimize(d);\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->Arg(3449);\r\n    // AVX tail tests\r\n    bm->Arg(63)->Arg(31)->Arg(15)->Arg(7);\r\n}\r\n\r\n\r\nBENCHMARK(r<std::uint8_t>)->Apply(common_args);\r\nBENCHMARK(r<std::uint16_t>)->Apply(common_args);\r\nBENCHMARK(r<std::uint32_t>)->Apply(common_args);\r\nBENCHMARK(r<std::uint64_t>)->Apply(common_args);\r\n\r\nBENCHMARK(rc<std::uint8_t>)->Apply(common_args);\r\nBENCHMARK(rc<std::uint16_t>)->Apply(common_args);\r\nBENCHMARK(rc<std::uint32_t>)->Apply(common_args);\r\nBENCHMARK(rc<std::uint64_t>)->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/rotate.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstdint>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n#include \"utility.hpp\"\r\n\r\nusing namespace std;\r\n\r\nenum class AlgType { Std, Rng };\r\n\r\ntemplate <class T, AlgType Alg>\r\nvoid bm_rotate(benchmark::State& state) {\r\n    const auto size = static_cast<size_t>(state.range(0));\r\n    const auto n    = static_cast<size_t>(state.range(1));\r\n\r\n    auto v = random_vector<T, not_highly_aligned_allocator>(size);\r\n    benchmark::DoNotOptimize(v);\r\n\r\n    for (auto _ : state) {\r\n        if constexpr (Alg == AlgType::Std) {\r\n            rotate(v.begin(), v.begin() + n, v.end());\r\n        } else {\r\n            ranges::rotate(v, v.begin() + n);\r\n        }\r\n        benchmark::DoNotOptimize(v);\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->Args({3333, 2242})->Args({3332, 1666})->Args({3333, 1111})->Args({3333, 501});\r\n    bm->Args({3333, 3300})->Args({3333, 12})->Args({3333, 5})->Args({3333, 1});\r\n    bm->Args({333, 101})->Args({123, 32})->Args({23, 7})->Args({12, 5})->Args({3, 2});\r\n}\r\n\r\nstruct color {\r\n    uint16_t h;\r\n    uint16_t s;\r\n    uint16_t l;\r\n};\r\n\r\nBENCHMARK(bm_rotate<uint8_t, AlgType::Std>)->Apply(common_args);\r\nBENCHMARK(bm_rotate<uint8_t, AlgType::Rng>)->Apply(common_args);\r\nBENCHMARK(bm_rotate<uint16_t, AlgType::Std>)->Apply(common_args);\r\nBENCHMARK(bm_rotate<uint16_t, AlgType::Rng>)->Apply(common_args);\r\nBENCHMARK(bm_rotate<uint32_t, AlgType::Std>)->Apply(common_args);\r\nBENCHMARK(bm_rotate<uint32_t, AlgType::Rng>)->Apply(common_args);\r\nBENCHMARK(bm_rotate<uint64_t, AlgType::Std>)->Apply(common_args);\r\nBENCHMARK(bm_rotate<uint64_t, AlgType::Rng>)->Apply(common_args);\r\n\r\nBENCHMARK(bm_rotate<color, AlgType::Std>)->Apply(common_args);\r\nBENCHMARK(bm_rotate<color, AlgType::Rng>)->Apply(common_args);\r\n\r\nBENCHMARK(bm_rotate<uint8_t, AlgType::Std>)->Args({35000, 520})->Args({35000, 3000});\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/sample.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <numeric>\r\n#include <random>\r\n#include <type_traits>\r\n#include <vector>\r\nusing namespace std;\r\n\r\nenum class alg_type { std_fn, rng };\r\n\r\ntemplate <class T, alg_type Alg>\r\nvoid bm_sample(benchmark::State& state) {\r\n    static_assert(is_unsigned_v<T>, \"T must be unsigned so iota() doesn't have to worry about overflow.\");\r\n\r\n    const auto population_size = static_cast<size_t>(state.range(0));\r\n    const auto sampled_size    = static_cast<size_t>(state.range(1));\r\n\r\n    vector<T> population(population_size);\r\n    vector<T> sampled(sampled_size);\r\n    iota(population.begin(), population.end(), T{0});\r\n    mt19937_64 urbg;\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(population);\r\n        if constexpr (Alg == alg_type::rng) {\r\n            ranges::sample(population, sampled.begin(), sampled_size, urbg);\r\n        } else {\r\n            sample(population.begin(), population.end(), sampled.begin(), sampled_size, urbg);\r\n        }\r\n        benchmark::DoNotOptimize(sampled);\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->Args({1 << 20, 1 << 15});\r\n}\r\n\r\nBENCHMARK(bm_sample<uint8_t, alg_type::std_fn>)->Apply(common_args);\r\nBENCHMARK(bm_sample<uint16_t, alg_type::std_fn>)->Apply(common_args);\r\nBENCHMARK(bm_sample<uint32_t, alg_type::std_fn>)->Apply(common_args);\r\nBENCHMARK(bm_sample<uint64_t, alg_type::std_fn>)->Apply(common_args);\r\n\r\nBENCHMARK(bm_sample<uint8_t, alg_type::rng>)->Apply(common_args);\r\nBENCHMARK(bm_sample<uint16_t, alg_type::rng>)->Apply(common_args);\r\nBENCHMARK(bm_sample<uint32_t, alg_type::rng>)->Apply(common_args);\r\nBENCHMARK(bm_sample<uint64_t, alg_type::rng>)->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/search.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <benchmark/benchmark.h>\r\n#include <cstdint>\r\n#include <cstring>\r\n#include <functional>\r\n#include <string>\r\n#include <string_view>\r\n#include <vector>\r\n\r\n#include \"lorem.hpp\"\r\n#include \"skewed_allocator.hpp\"\r\n\r\nusing namespace std::string_view_literals;\r\n\r\ntemplate <size_t Size, bool Last_is_different>\r\nconstexpr auto make_fill_pattern_array() {\r\n    std::array<char, Size> result;\r\n    result.fill('*');\r\n\r\n    if constexpr (Last_is_different) {\r\n        result.back() = '!';\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\ntemplate <size_t Size, bool Last_is_different>\r\nconstexpr std::array fill_pattern_array = make_fill_pattern_array<Size, Last_is_different>();\r\n\r\ntemplate <size_t Size, bool Last_is_different>\r\nconstexpr std::string_view fill_pattern_view{\r\n    fill_pattern_array<Size, Last_is_different>.data(), fill_pattern_array<Size, Last_is_different>.size()};\r\n\r\nstruct data_and_pattern {\r\n    std::string_view data;\r\n    std::string_view pattern;\r\n};\r\n\r\nconstexpr data_and_pattern patterns[] = {\r\n    /* 0. Small, closer to end   */ {lorem_ipsum, \"aliquet\"sv},\r\n    /* 1. Large, closer to end   */ {lorem_ipsum, \"aliquet malesuada\"sv},\r\n    /* 2. Small, closer to begin */ {lorem_ipsum, \"pulvinar\"sv},\r\n    /* 3. Large, closer to begin */ {lorem_ipsum, \"dapibus elit interdum\"sv},\r\n\r\n    /* 4. Small, evil */ {fill_pattern_view<3000, false>, fill_pattern_view<7, true>},\r\n    /* 5. Large, evil */ {fill_pattern_view<3000, false>, fill_pattern_view<20, true>},\r\n};\r\n\r\ntemplate <class T>\r\nusing not_highly_aligned_basic_string = std::basic_string<T, std::char_traits<T>, not_highly_aligned_allocator<T>>;\r\n\r\nusing not_highly_aligned_string    = not_highly_aligned_basic_string<char>;\r\nusing not_highly_aligned_wstring   = not_highly_aligned_basic_string<wchar_t>;\r\nusing not_highly_aligned_u32string = not_highly_aligned_basic_string<char32_t>;\r\n\r\nvoid c_strstr(benchmark::State& state) {\r\n    const auto& src_haystack = patterns[static_cast<size_t>(state.range())].data;\r\n    const auto& src_needle   = patterns[static_cast<size_t>(state.range())].pattern;\r\n\r\n    not_highly_aligned_string haystack(src_haystack);\r\n    not_highly_aligned_string needle(src_needle);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(haystack);\r\n        benchmark::DoNotOptimize(needle);\r\n        auto res = std::strstr(haystack.c_str(), needle.c_str());\r\n        benchmark::DoNotOptimize(res);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid classic_search(benchmark::State& state) {\r\n    const auto& src_haystack = patterns[static_cast<size_t>(state.range())].data;\r\n    const auto& src_needle   = patterns[static_cast<size_t>(state.range())].pattern;\r\n\r\n    std::vector<T, not_highly_aligned_allocator<T>> haystack(src_haystack.begin(), src_haystack.end());\r\n    std::vector<T, not_highly_aligned_allocator<T>> needle(src_needle.begin(), src_needle.end());\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(haystack);\r\n        benchmark::DoNotOptimize(needle);\r\n        auto res = std::search(haystack.begin(), haystack.end(), needle.begin(), needle.end());\r\n        benchmark::DoNotOptimize(res);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid ranges_search(benchmark::State& state) {\r\n    const auto& src_haystack = patterns[static_cast<size_t>(state.range())].data;\r\n    const auto& src_needle   = patterns[static_cast<size_t>(state.range())].pattern;\r\n\r\n    std::vector<T, not_highly_aligned_allocator<T>> haystack(src_haystack.begin(), src_haystack.end());\r\n    std::vector<T, not_highly_aligned_allocator<T>> needle(src_needle.begin(), src_needle.end());\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(haystack);\r\n        benchmark::DoNotOptimize(needle);\r\n        auto res = std::ranges::search(haystack, needle);\r\n        benchmark::DoNotOptimize(res);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid search_default_searcher(benchmark::State& state) {\r\n    const auto& src_haystack = patterns[static_cast<size_t>(state.range())].data;\r\n    const auto& src_needle   = patterns[static_cast<size_t>(state.range())].pattern;\r\n\r\n    std::vector<T, not_highly_aligned_allocator<T>> haystack(src_haystack.begin(), src_haystack.end());\r\n    std::vector<T, not_highly_aligned_allocator<T>> needle(src_needle.begin(), src_needle.end());\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(haystack);\r\n        benchmark::DoNotOptimize(needle);\r\n        auto res = std::search(haystack.begin(), haystack.end(), std::default_searcher{needle.begin(), needle.end()});\r\n        benchmark::DoNotOptimize(res);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid member_find(benchmark::State& state) {\r\n    const auto& src_haystack = patterns[static_cast<size_t>(state.range())].data;\r\n    const auto& src_needle   = patterns[static_cast<size_t>(state.range())].pattern;\r\n\r\n    T haystack(src_haystack.begin(), src_haystack.end());\r\n    T needle(src_needle.begin(), src_needle.end());\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(haystack);\r\n        benchmark::DoNotOptimize(needle);\r\n        auto res = haystack.find(needle);\r\n        benchmark::DoNotOptimize(res);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid classic_find_end(benchmark::State& state) {\r\n    const auto& src_haystack = patterns[static_cast<size_t>(state.range())].data;\r\n    const auto& src_needle   = patterns[static_cast<size_t>(state.range())].pattern;\r\n\r\n    std::vector<T, not_highly_aligned_allocator<T>> haystack(src_haystack.begin(), src_haystack.end());\r\n    std::vector<T, not_highly_aligned_allocator<T>> needle(src_needle.begin(), src_needle.end());\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(haystack);\r\n        benchmark::DoNotOptimize(needle);\r\n        auto res = std::find_end(haystack.begin(), haystack.end(), needle.begin(), needle.end());\r\n        benchmark::DoNotOptimize(res);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid ranges_find_end(benchmark::State& state) {\r\n    const auto& src_haystack = patterns[static_cast<size_t>(state.range())].data;\r\n    const auto& src_needle   = patterns[static_cast<size_t>(state.range())].pattern;\r\n\r\n    std::vector<T, not_highly_aligned_allocator<T>> haystack(src_haystack.begin(), src_haystack.end());\r\n    std::vector<T, not_highly_aligned_allocator<T>> needle(src_needle.begin(), src_needle.end());\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(haystack);\r\n        benchmark::DoNotOptimize(needle);\r\n        auto res = std::ranges::find_end(haystack, needle);\r\n        benchmark::DoNotOptimize(res);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid member_rfind(benchmark::State& state) {\r\n    const auto& src_haystack = patterns[static_cast<size_t>(state.range())].data;\r\n    const auto& src_needle   = patterns[static_cast<size_t>(state.range())].pattern;\r\n\r\n    T haystack(src_haystack.begin(), src_haystack.end());\r\n    T needle(src_needle.begin(), src_needle.end());\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(haystack);\r\n        benchmark::DoNotOptimize(needle);\r\n        auto res = haystack.rfind(needle);\r\n        benchmark::DoNotOptimize(res);\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->DenseRange(0, std::size(patterns) - 1, 1);\r\n}\r\n\r\nBENCHMARK(c_strstr)->Apply(common_args);\r\n\r\nBENCHMARK(classic_search<std::uint8_t>)->Apply(common_args);\r\nBENCHMARK(classic_search<std::uint16_t>)->Apply(common_args);\r\nBENCHMARK(classic_search<std::uint32_t>)->Apply(common_args);\r\nBENCHMARK(classic_search<std::uint64_t>)->Apply(common_args);\r\n\r\nBENCHMARK(ranges_search<std::uint8_t>)->Apply(common_args);\r\nBENCHMARK(ranges_search<std::uint16_t>)->Apply(common_args);\r\nBENCHMARK(ranges_search<std::uint32_t>)->Apply(common_args);\r\nBENCHMARK(ranges_search<std::uint64_t>)->Apply(common_args);\r\n\r\nBENCHMARK(search_default_searcher<std::uint8_t>)->Apply(common_args);\r\nBENCHMARK(search_default_searcher<std::uint16_t>)->Apply(common_args);\r\nBENCHMARK(search_default_searcher<std::uint32_t>)->Apply(common_args);\r\nBENCHMARK(search_default_searcher<std::uint64_t>)->Apply(common_args);\r\n\r\nBENCHMARK(member_find<not_highly_aligned_string>)->Apply(common_args);\r\nBENCHMARK(member_find<not_highly_aligned_wstring>)->Apply(common_args);\r\nBENCHMARK(member_find<not_highly_aligned_u32string>)->Apply(common_args);\r\n\r\nBENCHMARK(classic_find_end<std::uint8_t>)->Apply(common_args);\r\nBENCHMARK(classic_find_end<std::uint16_t>)->Apply(common_args);\r\nBENCHMARK(classic_find_end<std::uint32_t>)->Apply(common_args);\r\nBENCHMARK(classic_find_end<std::uint64_t>)->Apply(common_args);\r\n\r\nBENCHMARK(ranges_find_end<std::uint8_t>)->Apply(common_args);\r\nBENCHMARK(ranges_find_end<std::uint16_t>)->Apply(common_args);\r\nBENCHMARK(ranges_find_end<std::uint32_t>)->Apply(common_args);\r\nBENCHMARK(ranges_find_end<std::uint64_t>)->Apply(common_args);\r\n\r\nBENCHMARK(member_rfind<not_highly_aligned_string>)->Apply(common_args);\r\nBENCHMARK(member_rfind<not_highly_aligned_wstring>)->Apply(common_args);\r\nBENCHMARK(member_rfind<not_highly_aligned_u32string>)->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/search_n.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <random>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n\r\nusing namespace std;\r\n\r\n// NB: This particular algorithm has std and ranges non-vectorized implementations with different perf characteristics!\r\n\r\nenum class AlgType { Std, Rng };\r\n\r\nenum class PatternType {\r\n    TwoZones,\r\n    DenseSmallSequences,\r\n};\r\n\r\ntemplate <class T, AlgType Alg, PatternType Pattern>\r\nvoid bm(benchmark::State& state) {\r\n    const auto size = static_cast<size_t>(state.range(0));\r\n    const auto n    = static_cast<size_t>(state.range(1));\r\n\r\n    constexpr T no_match{'-'};\r\n    constexpr T match{'*'};\r\n\r\n    vector<T, not_highly_aligned_allocator<T>> v(size, no_match);\r\n\r\n    if constexpr (Pattern == PatternType::TwoZones) {\r\n        fill(v.begin() + v.size() / 2, v.end(), match);\r\n    } else if constexpr (Pattern == PatternType::DenseSmallSequences) {\r\n        if (size != 0 && n != 0) {\r\n            mt19937 gen{7687239};\r\n\r\n            uniform_int_distribution<size_t> len_dis(0, n - 1);\r\n\r\n            size_t cur_len = len_dis(gen);\r\n\r\n            for (size_t i = 0; i != size; ++i) {\r\n                if (cur_len != 0) {\r\n                    v[i] = match;\r\n                    --cur_len;\r\n                } else {\r\n                    cur_len = len_dis(gen);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    for (auto _ : state) {\r\n        if constexpr (Alg == AlgType::Std) {\r\n            benchmark::DoNotOptimize(search_n(v.begin(), v.end(), n, match));\r\n        } else if constexpr (Alg == AlgType::Rng) {\r\n            benchmark::DoNotOptimize(ranges::search_n(v, n, match));\r\n        }\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    for (const auto& n : {40, 18, 16, 14, 10, 8, 5, 4, 3, 2, 1}) {\r\n        bm->ArgPair(3000, n);\r\n    }\r\n}\r\n\r\nBENCHMARK(bm<uint8_t, AlgType::Std, PatternType::TwoZones>)->Apply(common_args);\r\nBENCHMARK(bm<uint8_t, AlgType::Rng, PatternType::TwoZones>)->Apply(common_args);\r\nBENCHMARK(bm<uint8_t, AlgType::Std, PatternType::DenseSmallSequences>)->Apply(common_args);\r\nBENCHMARK(bm<uint8_t, AlgType::Rng, PatternType::DenseSmallSequences>)->Apply(common_args);\r\n\r\nBENCHMARK(bm<uint16_t, AlgType::Std, PatternType::TwoZones>)->Apply(common_args);\r\nBENCHMARK(bm<uint16_t, AlgType::Rng, PatternType::TwoZones>)->Apply(common_args);\r\nBENCHMARK(bm<uint16_t, AlgType::Std, PatternType::DenseSmallSequences>)->Apply(common_args);\r\nBENCHMARK(bm<uint16_t, AlgType::Rng, PatternType::DenseSmallSequences>)->Apply(common_args);\r\n\r\nBENCHMARK(bm<uint32_t, AlgType::Std, PatternType::TwoZones>)->Apply(common_args);\r\nBENCHMARK(bm<uint32_t, AlgType::Rng, PatternType::TwoZones>)->Apply(common_args);\r\nBENCHMARK(bm<uint32_t, AlgType::Std, PatternType::DenseSmallSequences>)->Apply(common_args);\r\nBENCHMARK(bm<uint32_t, AlgType::Rng, PatternType::DenseSmallSequences>)->Apply(common_args);\r\n\r\nBENCHMARK(bm<uint64_t, AlgType::Std, PatternType::TwoZones>)->Apply(common_args);\r\nBENCHMARK(bm<uint64_t, AlgType::Rng, PatternType::TwoZones>)->Apply(common_args);\r\nBENCHMARK(bm<uint64_t, AlgType::Std, PatternType::DenseSmallSequences>)->Apply(common_args);\r\nBENCHMARK(bm<uint64_t, AlgType::Rng, PatternType::DenseSmallSequences>)->Apply(common_args);\r\n\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/shuffle.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <numeric>\r\n#include <random>\r\n#include <type_traits>\r\n#include <vector>\r\nusing namespace std;\r\n\r\nenum class alg_type { std_fn, rng };\r\n\r\ntemplate <class T, alg_type Alg>\r\nvoid bm_shuffle(benchmark::State& state) {\r\n    static_assert(is_unsigned_v<T>, \"T must be unsigned so iota() doesn't have to worry about overflow.\");\r\n\r\n    const auto n = static_cast<size_t>(state.range(0));\r\n    vector<T> v(n);\r\n    iota(v.begin(), v.end(), T{0});\r\n    mt19937_64 urbg;\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(v);\r\n        if constexpr (Alg == alg_type::rng) {\r\n            ranges::shuffle(v, urbg);\r\n        } else {\r\n            shuffle(v.begin(), v.end(), urbg);\r\n        }\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->Arg(1 << 20);\r\n}\r\n\r\nBENCHMARK(bm_shuffle<uint8_t, alg_type::std_fn>)->Apply(common_args);\r\nBENCHMARK(bm_shuffle<uint16_t, alg_type::std_fn>)->Apply(common_args);\r\nBENCHMARK(bm_shuffle<uint32_t, alg_type::std_fn>)->Apply(common_args);\r\nBENCHMARK(bm_shuffle<uint64_t, alg_type::std_fn>)->Apply(common_args);\r\n\r\nBENCHMARK(bm_shuffle<uint8_t, alg_type::rng>)->Apply(common_args);\r\nBENCHMARK(bm_shuffle<uint16_t, alg_type::rng>)->Apply(common_args);\r\nBENCHMARK(bm_shuffle<uint32_t, alg_type::rng>)->Apply(common_args);\r\nBENCHMARK(bm_shuffle<uint64_t, alg_type::rng>)->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/std_copy.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <cstring>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n#include \"udt.hpp\"\r\n#include \"utility.hpp\"\r\n\r\ntemplate <typename Contained>\r\nvoid handwritten_loop(benchmark::State& state) {\r\n    const size_t r0      = static_cast<size_t>(state.range(0));\r\n    const auto in_buffer = random_vector<Contained, not_highly_aligned_allocator>(r0);\r\n    std::vector<Contained, not_highly_aligned_allocator<Contained>> out_buffer(r0);\r\n    for ([[maybe_unused]] auto _ : state) {\r\n        benchmark::DoNotOptimize(in_buffer.data());\r\n        const Contained* in_ptr           = in_buffer.data();\r\n        const Contained* const in_ptr_end = in_ptr + r0;\r\n        Contained* out_ptr                = out_buffer.data();\r\n        while (in_ptr != in_ptr_end) {\r\n            *out_ptr++ = *in_ptr++;\r\n        }\r\n\r\n        benchmark::DoNotOptimize(out_buffer.data());\r\n    }\r\n}\r\n\r\ntemplate <typename Contained>\r\nvoid handwritten_loop_n(benchmark::State& state) {\r\n    const size_t r0      = static_cast<size_t>(state.range(0));\r\n    const auto in_buffer = random_vector<Contained, not_highly_aligned_allocator>(r0);\r\n    std::vector<Contained, not_highly_aligned_allocator<Contained>> out_buffer(r0);\r\n    for ([[maybe_unused]] auto _ : state) {\r\n        benchmark::DoNotOptimize(in_buffer.data());\r\n        const Contained* const in_ptr = in_buffer.data();\r\n        Contained* const out_ptr      = out_buffer.data();\r\n        for (size_t idx = 0; idx < r0; ++idx) {\r\n            out_ptr[idx] = in_ptr[idx];\r\n        }\r\n\r\n        benchmark::DoNotOptimize(out_buffer.data());\r\n    }\r\n}\r\n\r\ntemplate <typename Contained>\r\nvoid memcpy_call(benchmark::State& state) {\r\n    static_assert(std::is_trivially_copyable_v<Contained>, \"memcpy must only be called on trivially copyable types\");\r\n    const size_t r0      = static_cast<size_t>(state.range(0));\r\n    const auto in_buffer = random_vector<Contained, not_highly_aligned_allocator>(r0);\r\n    std::vector<Contained, not_highly_aligned_allocator<Contained>> out_buffer(r0);\r\n    for ([[maybe_unused]] auto _ : state) {\r\n        benchmark::DoNotOptimize(in_buffer.data());\r\n        memcpy(out_buffer.data(), in_buffer.data(), r0 * sizeof(Contained));\r\n        benchmark::DoNotOptimize(out_buffer.data());\r\n    }\r\n}\r\n\r\ntemplate <typename Contained>\r\nvoid std_copy_call(benchmark::State& state) {\r\n    const size_t r0      = static_cast<size_t>(state.range(0));\r\n    const auto in_buffer = random_vector<Contained, not_highly_aligned_allocator>(r0);\r\n    std::vector<Contained, not_highly_aligned_allocator<Contained>> out_buffer(r0);\r\n    for ([[maybe_unused]] auto _ : state) {\r\n        benchmark::DoNotOptimize(in_buffer.data());\r\n        std::copy(in_buffer.begin(), in_buffer.end(), out_buffer.begin());\r\n        benchmark::DoNotOptimize(out_buffer.data());\r\n    }\r\n}\r\n\r\ntemplate <typename Contained>\r\nvoid std_copy_n_call(benchmark::State& state) {\r\n    const size_t r0      = static_cast<size_t>(state.range(0));\r\n    const auto in_buffer = random_vector<Contained, not_highly_aligned_allocator>(r0);\r\n    std::vector<Contained, not_highly_aligned_allocator<Contained>> out_buffer(r0);\r\n    for ([[maybe_unused]] auto _ : state) {\r\n        benchmark::DoNotOptimize(in_buffer.data());\r\n        std::copy_n(in_buffer.begin(), r0, out_buffer.begin());\r\n        benchmark::DoNotOptimize(out_buffer.data());\r\n    }\r\n}\r\n\r\nBENCHMARK(handwritten_loop<char>)->Range(0, 1 << 18);\r\nBENCHMARK(handwritten_loop_n<char>)->Range(0, 1 << 18);\r\nBENCHMARK(memcpy_call<char>)->Range(0, 1 << 18);\r\nBENCHMARK(std_copy_call<char>)->Range(0, 1 << 18);\r\nBENCHMARK(std_copy_n_call<char>)->Range(0, 1 << 18);\r\n\r\nBENCHMARK(handwritten_loop<aggregate<char>>)->Range(0, 1 << 18);\r\nBENCHMARK(handwritten_loop_n<aggregate<char>>)->Range(0, 1 << 18);\r\nBENCHMARK(memcpy_call<aggregate<char>>)->Range(0, 1 << 18);\r\nBENCHMARK(std_copy_call<aggregate<char>>)->Range(0, 1 << 18);\r\nBENCHMARK(std_copy_n_call<aggregate<char>>)->Range(0, 1 << 18);\r\n\r\nBENCHMARK(handwritten_loop<non_trivial<char>>)->Range(0, 1 << 18);\r\nBENCHMARK(handwritten_loop_n<non_trivial<char>>)->Range(0, 1 << 18);\r\nBENCHMARK(std_copy_call<non_trivial<char>>)->Range(0, 1 << 18);\r\nBENCHMARK(std_copy_n_call<non_trivial<char>>)->Range(0, 1 << 18);\r\n\r\nBENCHMARK(handwritten_loop<int>)->Range(0, 1 << 15);\r\nBENCHMARK(handwritten_loop_n<int>)->Range(0, 1 << 15);\r\nBENCHMARK(memcpy_call<int>)->Range(0, 1 << 15);\r\nBENCHMARK(std_copy_call<int>)->Range(0, 1 << 15);\r\nBENCHMARK(std_copy_n_call<int>)->Range(0, 1 << 15);\r\n\r\nBENCHMARK(handwritten_loop<aggregate<int>>)->Range(0, 1 << 15);\r\nBENCHMARK(handwritten_loop_n<aggregate<int>>)->Range(0, 1 << 15);\r\nBENCHMARK(memcpy_call<aggregate<int>>)->Range(0, 1 << 15);\r\nBENCHMARK(std_copy_call<aggregate<int>>)->Range(0, 1 << 15);\r\nBENCHMARK(std_copy_n_call<aggregate<int>>)->Range(0, 1 << 15);\r\n\r\nBENCHMARK(handwritten_loop<non_trivial<int>>)->Range(0, 1 << 15);\r\nBENCHMARK(handwritten_loop_n<non_trivial<int>>)->Range(0, 1 << 15);\r\nBENCHMARK(std_copy_call<non_trivial<int>>)->Range(0, 1 << 15);\r\nBENCHMARK(std_copy_n_call<non_trivial<int>>)->Range(0, 1 << 15);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/sv_equal.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <ranges>\r\n#include <string_view>\r\n\r\n#include \"lorem.hpp\"\r\n\r\nconstexpr std::string_view haystack = lorem_ipsum.substr(0, 2048);\r\n\r\nconstexpr std::size_t Count = 8u;\r\n\r\ntemplate <std::size_t Length>\r\nconstexpr std::array<std::string_view, Count> make_svs() {\r\n    std::array<std::string_view, Count> result{};\r\n\r\n    if constexpr (Length != 0) {\r\n        using namespace std::views;\r\n\r\n        std::ranges::copy(\r\n            haystack | chunk(Length) | transform([](auto&& t) { return std::string_view(t); }) | take(Count),\r\n            result.begin());\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\ntemplate <std::size_t Length>\r\nvoid sv_equal(benchmark::State& state) {\r\n    auto arr = make_svs<Length>();\r\n    benchmark::DoNotOptimize(arr);\r\n\r\n    for (auto _ : state) {\r\n        for (auto& i : arr) {\r\n            benchmark::DoNotOptimize(i);\r\n            auto res = (i == arr[0]);\r\n            benchmark::DoNotOptimize(res);\r\n        }\r\n    }\r\n}\r\n\r\nBENCHMARK(sv_equal<0>);\r\nBENCHMARK(sv_equal<8>);\r\nBENCHMARK(sv_equal<16>);\r\nBENCHMARK(sv_equal<32>);\r\nBENCHMARK(sv_equal<64>);\r\nBENCHMARK(sv_equal<128>);\r\nBENCHMARK(sv_equal<256>);\r\n\r\nstatic_assert(haystack.size() >= Count * 256, \"haystack is too small\");\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/swap_ranges.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n\r\nusing namespace std;\r\n\r\ntemplate <size_t N, class T, template <class> class Padder>\r\nvoid std_swap(benchmark::State& state) {\r\n    Padder<T[N]> padded_a;\r\n    auto& a = padded_a.value;\r\n    memset(a, 'a', sizeof(a));\r\n    Padder<T[N]> padded_b;\r\n    auto& b = padded_b.value;\r\n    memset(b, 'b', sizeof(b));\r\n\r\n    for (auto _ : state) {\r\n        swap(a, b);\r\n        benchmark::DoNotOptimize(a);\r\n        benchmark::DoNotOptimize(b);\r\n    }\r\n}\r\n\r\ntemplate <class T, template <class> class Alloc>\r\nvoid std_swap_ranges(benchmark::State& state) {\r\n    vector<T, Alloc<T>> a(static_cast<size_t>(state.range(0)), T{'a'});\r\n    vector<T, Alloc<T>> b(static_cast<size_t>(state.range(0)), T{'b'});\r\n\r\n    for (auto _ : state) {\r\n        swap_ranges(a.begin(), a.end(), b.begin());\r\n        benchmark::DoNotOptimize(a);\r\n        benchmark::DoNotOptimize(b);\r\n    }\r\n}\r\n\r\nBENCHMARK(std_swap<1, uint8_t, highly_aligned>);\r\nBENCHMARK(std_swap<5, uint8_t, highly_aligned>);\r\nBENCHMARK(std_swap<15, uint8_t, highly_aligned>);\r\nBENCHMARK(std_swap<26, uint8_t, highly_aligned>);\r\nBENCHMARK(std_swap<38, uint8_t, highly_aligned>);\r\nBENCHMARK(std_swap<60, uint8_t, highly_aligned>);\r\nBENCHMARK(std_swap<125, uint8_t, highly_aligned>);\r\nBENCHMARK(std_swap<800, uint8_t, highly_aligned>);\r\nBENCHMARK(std_swap<3000, uint8_t, highly_aligned>);\r\nBENCHMARK(std_swap<9000, uint8_t, highly_aligned>);\r\n\r\nBENCHMARK(std_swap<1, uint8_t, not_highly_aligned>);\r\nBENCHMARK(std_swap<5, uint8_t, not_highly_aligned>);\r\nBENCHMARK(std_swap<15, uint8_t, not_highly_aligned>);\r\nBENCHMARK(std_swap<26, uint8_t, not_highly_aligned>);\r\nBENCHMARK(std_swap<38, uint8_t, not_highly_aligned>);\r\nBENCHMARK(std_swap<60, uint8_t, not_highly_aligned>);\r\nBENCHMARK(std_swap<125, uint8_t, not_highly_aligned>);\r\nBENCHMARK(std_swap<800, uint8_t, not_highly_aligned>);\r\nBENCHMARK(std_swap<3000, uint8_t, not_highly_aligned>);\r\nBENCHMARK(std_swap<9000, uint8_t, not_highly_aligned>);\r\n\r\nBENCHMARK(std_swap_ranges<uint8_t, highly_aligned_allocator>)\r\n    ->Arg(1)\r\n    ->Arg(5)\r\n    ->Arg(15)\r\n    ->Arg(26)\r\n    ->Arg(38)\r\n    ->Arg(60)\r\n    ->Arg(125)\r\n    ->Arg(800)\r\n    ->Arg(3000)\r\n    ->Arg(9000);\r\n\r\nBENCHMARK(std_swap_ranges<uint8_t, not_highly_aligned_allocator>)\r\n    ->Arg(1)\r\n    ->Arg(5)\r\n    ->Arg(15)\r\n    ->Arg(26)\r\n    ->Arg(38)\r\n    ->Arg(60)\r\n    ->Arg(125)\r\n    ->Arg(800)\r\n    ->Arg(3000)\r\n    ->Arg(9000);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/unique.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <benchmark/benchmark.h>\r\n#include <cstdint>\r\n#include <numeric>\r\n#include <random>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n\r\nenum class alg_type { std_fn, rng };\r\n\r\ntemplate <alg_type Type, class T>\r\nvoid u(benchmark::State& state) {\r\n    std::mt19937_64 gen(22033);\r\n    using TD = std::conditional_t<sizeof(T) == 1, int, T>;\r\n    std::binomial_distribution<TD> dis(5);\r\n\r\n    std::vector<T, not_highly_aligned_allocator<T>> src(2552);\r\n    std::iota(src.begin(), src.begin() + 390, T{0});\r\n    std::iota(src.end() - 390, src.end(), T{0});\r\n    std::generate(src.begin() + 390, src.end() - 390, [&] { return static_cast<T>(dis(gen)); });\r\n\r\n    std::vector<T, not_highly_aligned_allocator<T>> v;\r\n    v.reserve(src.size());\r\n    for (auto _ : state) {\r\n        v = src;\r\n        benchmark::DoNotOptimize(v);\r\n        if constexpr (Type == alg_type::std_fn) {\r\n            benchmark::DoNotOptimize(std::unique(v.begin(), v.end()));\r\n        } else {\r\n            benchmark::DoNotOptimize(std::ranges::unique(v));\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <alg_type Type, class T>\r\nvoid uc(benchmark::State& state) {\r\n    std::mt19937_64 gen(22033);\r\n    using TD = std::conditional_t<sizeof(T) == 1, int, T>;\r\n    std::binomial_distribution<TD> dis(5);\r\n\r\n    std::vector<T, not_highly_aligned_allocator<T>> src(2552);\r\n    std::generate(src.begin(), src.end(), [&] { return static_cast<T>(dis(gen)); });\r\n\r\n    std::vector<T, not_highly_aligned_allocator<T>> v(src.size());\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(src);\r\n        benchmark::DoNotOptimize(v);\r\n        if constexpr (Type == alg_type::std_fn) {\r\n            benchmark::DoNotOptimize(std::unique_copy(src.begin(), src.end(), v.begin()));\r\n        } else {\r\n            benchmark::DoNotOptimize(std::ranges::unique_copy(src, v.begin()));\r\n        }\r\n    }\r\n}\r\n\r\nBENCHMARK(u<alg_type::std_fn, std::uint8_t>);\r\nBENCHMARK(u<alg_type::std_fn, std::uint16_t>);\r\nBENCHMARK(u<alg_type::std_fn, std::uint32_t>);\r\nBENCHMARK(u<alg_type::std_fn, std::uint64_t>);\r\n\r\nBENCHMARK(u<alg_type::rng, std::uint8_t>);\r\nBENCHMARK(u<alg_type::rng, std::uint16_t>);\r\nBENCHMARK(u<alg_type::rng, std::uint32_t>);\r\nBENCHMARK(u<alg_type::rng, std::uint64_t>);\r\n\r\nBENCHMARK(uc<alg_type::std_fn, std::uint8_t>);\r\nBENCHMARK(uc<alg_type::std_fn, std::uint16_t>);\r\nBENCHMARK(uc<alg_type::std_fn, std::uint32_t>);\r\nBENCHMARK(uc<alg_type::std_fn, std::uint64_t>);\r\n\r\nBENCHMARK(uc<alg_type::rng, std::uint8_t>);\r\nBENCHMARK(uc<alg_type::rng, std::uint16_t>);\r\nBENCHMARK(uc<alg_type::rng, std::uint32_t>);\r\nBENCHMARK(uc<alg_type::rng, std::uint64_t>);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/vector_bool_copy.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n//\r\n#include <algorithm>\r\n#include <cstddef>\r\n#include <random>\r\n#include <vector>\r\n\r\n#include \"utility.hpp\"\r\n\r\nusing namespace std;\r\n\r\nvoid copy_block_aligned(benchmark::State& state) {\r\n    const auto size     = static_cast<size_t>(state.range(0));\r\n    vector<bool> source = random_vector<bool>(size);\r\n    vector<bool> dest(size, false);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        copy(source.cbegin(), source.cend(), dest.begin());\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\nvoid copy_source_misaligned(benchmark::State& state) {\r\n    const auto size     = static_cast<size_t>(state.range(0));\r\n    vector<bool> source = random_vector<bool>(size);\r\n    vector<bool> dest(size, false);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        copy(source.cbegin() + 1, source.cend(), dest.begin());\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\nvoid copy_dest_misaligned(benchmark::State& state) {\r\n    const auto size     = static_cast<size_t>(state.range(0));\r\n    vector<bool> source = random_vector<bool>(size);\r\n    vector<bool> dest(size, false);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        copy(source.cbegin(), source.cend() - 1, dest.begin() + 1);\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\n// Special benchmark for matching char alignment\r\nvoid copy_matching_alignment(benchmark::State& state) {\r\n    const auto size     = static_cast<size_t>(state.range(0));\r\n    vector<bool> source = random_vector<bool>(size);\r\n    vector<bool> dest(size, false);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        copy(source.cbegin() + 5, source.cend(), dest.begin() + 5);\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\n// Special benchmarks for single block corner case\r\nvoid copy_both_single_blocks(benchmark::State& state) {\r\n    vector<bool> source = random_vector<bool>(50);\r\n    vector<bool> dest(50, false);\r\n\r\n    const size_t length = 20;\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        copy(source.cbegin() + 5, source.cbegin() + 5 + length, dest.begin() + 5);\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\nvoid copy_source_single_block(benchmark::State& state) {\r\n    vector<bool> source = random_vector<bool>(50);\r\n    vector<bool> dest(50, false);\r\n\r\n    const size_t length = 20;\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        copy(source.cbegin() + 5, source.cbegin() + 5 + length, dest.begin() + 25);\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\nvoid copy_dest_single_block(benchmark::State& state) {\r\n    vector<bool> source = random_vector<bool>(50);\r\n    vector<bool> dest(50, false);\r\n\r\n    const size_t length = 20;\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        copy(source.cbegin() + 25, source.cbegin() + 25 + length, dest.begin() + 5);\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\nBENCHMARK(copy_block_aligned)->RangeMultiplier(64)->Range(64, 64 << 10);\r\nBENCHMARK(copy_source_misaligned)->RangeMultiplier(64)->Range(64, 64 << 10);\r\nBENCHMARK(copy_dest_misaligned)->RangeMultiplier(64)->Range(64, 64 << 10);\r\nBENCHMARK(copy_matching_alignment)->RangeMultiplier(64)->Range(64, 64 << 10);\r\n\r\nBENCHMARK(copy_both_single_blocks);\r\nBENCHMARK(copy_source_single_block);\r\nBENCHMARK(copy_dest_single_block);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/vector_bool_copy_n.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n//\r\n#include <algorithm>\r\n#include <cstddef>\r\n#include <random>\r\n#include <vector>\r\n\r\n#include \"utility.hpp\"\r\n\r\nusing namespace std;\r\n\r\nvoid copy_n_block_aligned(benchmark::State& state) {\r\n    const auto size     = static_cast<size_t>(state.range(0));\r\n    vector<bool> source = random_vector<bool>(size);\r\n    vector<bool> dest(size, false);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        copy_n(source.cbegin(), size, dest.begin());\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\nvoid copy_n_source_misaligned(benchmark::State& state) {\r\n    const auto size     = static_cast<size_t>(state.range(0));\r\n    vector<bool> source = random_vector<bool>(size);\r\n    vector<bool> dest(size, false);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        copy_n(source.cbegin() + 1, size - 1, dest.begin());\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\nvoid copy_n_dest_misaligned(benchmark::State& state) {\r\n    const auto size     = static_cast<size_t>(state.range(0));\r\n    vector<bool> source = random_vector<bool>(size);\r\n    vector<bool> dest(size, false);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        copy_n(source.cbegin(), size - 1, dest.begin() + 1);\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\n// Special benchmark for matching char alignment\r\nvoid copy_n_matching_alignment(benchmark::State& state) {\r\n    const auto size     = static_cast<size_t>(state.range(0));\r\n    vector<bool> source = random_vector<bool>(size);\r\n    vector<bool> dest(size, false);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        copy_n(source.cbegin() + 5, size - 5, dest.begin() + 5);\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\n// Special benchmarks for single block corner case\r\nvoid copy_n_both_single_blocks(benchmark::State& state) {\r\n    vector<bool> source = random_vector<bool>(50);\r\n    vector<bool> dest(50, false);\r\n\r\n    const size_t length = 20;\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        copy_n(source.cbegin() + 5, length, dest.begin() + 5);\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\nvoid copy_n_source_single_block(benchmark::State& state) {\r\n    vector<bool> source = random_vector<bool>(50);\r\n    vector<bool> dest(50, false);\r\n\r\n    const size_t length = 20;\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        copy_n(source.cbegin() + 5, length, dest.begin() + 25);\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\nvoid copy_n_dest_single_block(benchmark::State& state) {\r\n    vector<bool> source = random_vector<bool>(50);\r\n    vector<bool> dest(50, false);\r\n\r\n    const size_t length = 20;\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        copy_n(source.cbegin() + 25, length, dest.begin() + 5);\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\nBENCHMARK(copy_n_block_aligned)->RangeMultiplier(64)->Range(64, 64 << 10);\r\nBENCHMARK(copy_n_source_misaligned)->RangeMultiplier(64)->Range(64, 64 << 10);\r\nBENCHMARK(copy_n_dest_misaligned)->RangeMultiplier(64)->Range(64, 64 << 10);\r\nBENCHMARK(copy_n_matching_alignment)->RangeMultiplier(64)->Range(64, 64 << 10);\r\n\r\nBENCHMARK(copy_n_both_single_blocks);\r\nBENCHMARK(copy_n_source_single_block);\r\nBENCHMARK(copy_n_dest_single_block);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/vector_bool_count.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n//\r\n#include <algorithm>\r\n#include <cstddef>\r\n#include <random>\r\n#include <vector>\r\n\r\n#include \"utility.hpp\"\r\n\r\nusing namespace std;\r\n\r\nvoid count_aligned(benchmark::State& state) {\r\n    const auto size = static_cast<size_t>(state.range(0));\r\n    vector<bool> v  = random_vector<bool>(size);\r\n\r\n    bool b = false;\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(b);\r\n        benchmark::DoNotOptimize(v);\r\n        auto r = count(v.cbegin(), v.cend(), b);\r\n        benchmark::DoNotOptimize(r);\r\n        b = !b;\r\n    }\r\n}\r\n\r\nBENCHMARK(count_aligned)->RangeMultiplier(64)->Range(64, 64 << 10);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/vector_bool_meow_of.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n//\r\n#include <algorithm>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n\r\nusing namespace std;\r\n\r\nenum class alg { all_, any_, none_ };\r\nenum class content { ones_then_zeros, zeros_then_ones };\r\n\r\ntemplate <alg Alg, content Content, class Pred = identity>\r\nvoid meow_of(benchmark::State& state) {\r\n    const auto n = static_cast<size_t>(state.range(0));\r\n    vector<bool, not_highly_aligned_allocator<bool>> source(n);\r\n\r\n    if constexpr (Content == content::ones_then_zeros) {\r\n        fill(source.begin(), source.begin() + source.size() / 2, true);\r\n    } else {\r\n        fill(source.begin() + source.size() / 2, source.end(), true);\r\n    }\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        bool result;\r\n        if constexpr (Alg == alg::all_) {\r\n            result = all_of(source.begin(), source.end(), Pred{});\r\n        } else if constexpr (Alg == alg::any_) {\r\n            result = any_of(source.begin(), source.end(), Pred{});\r\n        } else {\r\n            result = none_of(source.begin(), source.end(), Pred{});\r\n        }\r\n        benchmark::DoNotOptimize(result);\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->RangeMultiplier(64)->Range(64, 64 << 10);\r\n}\r\n\r\nusing not_ = logical_not<>;\r\n\r\nBENCHMARK(meow_of<alg::all_, content::ones_then_zeros>)->Apply(common_args);\r\nBENCHMARK(meow_of<alg::any_, content::zeros_then_ones>)->Apply(common_args);\r\nBENCHMARK(meow_of<alg::any_, content::ones_then_zeros, not_>)->Apply(common_args);\r\nBENCHMARK(meow_of<alg::none_, content::zeros_then_ones>)->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/vector_bool_move.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n//\r\n#include <algorithm>\r\n#include <cstddef>\r\n#include <random>\r\n#include <vector>\r\n\r\n#include \"utility.hpp\"\r\n\r\nusing namespace std;\r\n\r\nvoid move_block_aligned(benchmark::State& state) {\r\n    const auto size     = static_cast<size_t>(state.range(0));\r\n    vector<bool> source = random_vector<bool>(size);\r\n    vector<bool> dest(size, false);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        move(source.cbegin(), source.cend(), dest.begin());\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\nvoid move_source_misaligned(benchmark::State& state) {\r\n    const auto size     = static_cast<size_t>(state.range(0));\r\n    vector<bool> source = random_vector<bool>(size);\r\n    vector<bool> dest(size, false);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        move(source.cbegin() + 1, source.cend(), dest.begin());\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\nvoid move_dest_misaligned(benchmark::State& state) {\r\n    const auto size     = static_cast<size_t>(state.range(0));\r\n    vector<bool> source = random_vector<bool>(size);\r\n    vector<bool> dest(size, false);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        move(source.cbegin(), source.cend() - 1, dest.begin() + 1);\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\n// Special benchmark for matching char alignment\r\nvoid move_matching_alignment(benchmark::State& state) {\r\n    const auto size     = static_cast<size_t>(state.range(0));\r\n    vector<bool> source = random_vector<bool>(size);\r\n    vector<bool> dest(size, false);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        move(source.cbegin() + 5, source.cend(), dest.begin() + 5);\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\n// Special benchmarks for single block corner case\r\nvoid move_both_single_blocks(benchmark::State& state) {\r\n    vector<bool> source = random_vector<bool>(50);\r\n    vector<bool> dest(50, false);\r\n\r\n    const size_t length = 20;\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        move(source.cbegin() + 5, source.cbegin() + 5 + length, dest.begin() + 5);\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\nvoid move_source_single_block(benchmark::State& state) {\r\n    vector<bool> source = random_vector<bool>(50);\r\n    vector<bool> dest(50, false);\r\n\r\n    const size_t length = 20;\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        move(source.cbegin() + 5, source.cbegin() + 5 + length, dest.begin() + 25);\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\nvoid move_dest_single_block(benchmark::State& state) {\r\n    vector<bool> source = random_vector<bool>(50);\r\n    vector<bool> dest(50, false);\r\n\r\n    const size_t length = 20;\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        move(source.cbegin() + 25, source.cbegin() + 25 + length, dest.begin() + 5);\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\nBENCHMARK(move_block_aligned)->RangeMultiplier(64)->Range(64, 64 << 10);\r\nBENCHMARK(move_source_misaligned)->RangeMultiplier(64)->Range(64, 64 << 10);\r\nBENCHMARK(move_dest_misaligned)->RangeMultiplier(64)->Range(64, 64 << 10);\r\nBENCHMARK(move_matching_alignment)->RangeMultiplier(64)->Range(64, 64 << 10);\r\n\r\nBENCHMARK(move_both_single_blocks);\r\nBENCHMARK(move_source_single_block);\r\nBENCHMARK(move_dest_single_block);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "benchmarks/src/vector_bool_transform.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <benchmark/benchmark.h>\r\n//\r\n#include <algorithm>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <random>\r\n#include <vector>\r\n\r\n#include \"skewed_allocator.hpp\"\r\n#include \"utility.hpp\"\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Pred>\r\nvoid transform_one_input_aligned(benchmark::State& state) {\r\n    const auto size = static_cast<size_t>(state.range(0));\r\n    auto source     = random_vector<bool, not_highly_aligned_allocator>(size);\r\n    vector<bool> dest(size, false);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source);\r\n        transform(source.begin(), source.end(), dest.begin(), Pred{});\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\ntemplate <class Pred>\r\nvoid transform_two_inputs_aligned(benchmark::State& state) {\r\n    const auto size = static_cast<size_t>(state.range(0));\r\n    auto source1    = random_vector<bool, not_highly_aligned_allocator>(size);\r\n    auto source2    = random_vector<bool, not_highly_aligned_allocator>(size, 1729u);\r\n    vector<bool> dest(size, false);\r\n\r\n    for (auto _ : state) {\r\n        benchmark::DoNotOptimize(source1);\r\n        benchmark::DoNotOptimize(source2);\r\n        transform(source1.begin(), source1.end(), source2.begin(), dest.begin(), Pred{});\r\n        benchmark::DoNotOptimize(dest);\r\n    }\r\n}\r\n\r\nvoid common_args(benchmark::Benchmark* bm) {\r\n    bm->RangeMultiplier(64)->Range(64, 64 << 10);\r\n}\r\n\r\nBENCHMARK(transform_two_inputs_aligned<logical_and<>>)->Apply(common_args);\r\nBENCHMARK(transform_two_inputs_aligned<logical_or<>>)->Apply(common_args);\r\nBENCHMARK(transform_two_inputs_aligned<less<>>)->Apply(common_args);\r\nBENCHMARK(transform_one_input_aligned<logical_not<>>)->Apply(common_args);\r\n\r\nBENCHMARK_MAIN();\r\n"
  },
  {
    "path": "docs/cgmanifest.json",
    "content": "{\r\n    \"$schema\": \"https://json.schemastore.org/component-detection-manifest.json\",\r\n    \"Registrations\": [\r\n        {\r\n            \"component\": {\r\n                \"type\": \"git\",\r\n                \"git\": {\r\n                    \"repositoryUrl\": \"https://github.com/boostorg/math\",\r\n                    \"commitHash\": \"4d0885ae44f7d4ce94568339b2ae5501eb234e8f\"\r\n                }\r\n            }\r\n        },\r\n        {\r\n            \"component\": {\r\n                \"type\": \"git\",\r\n                \"git\": {\r\n                    \"repositoryUrl\": \"https://github.com/llvm/llvm-project.git\",\r\n                    \"commitHash\": \"12fcca0afeb08fbe41d79c5387cfacb249992bb4\"\r\n                }\r\n            }\r\n        },\r\n        {\r\n            \"component\": {\r\n                \"type\": \"git\",\r\n                \"git\": {\r\n                    \"repositoryUrl\": \"https://github.com/microsoft/STL.git\",\r\n                    \"commitHash\": \"9bf8f3f9b03ff71ea83baff189eb1d6a46dd48e1\"\r\n                }\r\n            }\r\n        },\r\n        {\r\n            \"component\": {\r\n                \"type\": \"git\",\r\n                \"git\": {\r\n                    \"repositoryUrl\": \"https://github.com/fmtlib/fmt\",\r\n                    \"commitHash\": \"273d8865e31659f69528623754c1742b2819ad26\"\r\n                }\r\n            }\r\n        },\r\n        {\r\n            \"component\": {\r\n                \"type\": \"git\",\r\n                \"git\": {\r\n                    \"repositoryUrl\": \"https://github.com/ulfjack/ryu.git\",\r\n                    \"commitHash\": \"59661c3f883dfd39cef6dc8eaf2fcbaae53597e8\"\r\n                }\r\n            }\r\n        }\r\n    ],\r\n    \"Version\": 1\r\n}\r\n"
  },
  {
    "path": "docs/import_library.md",
    "content": "<!-- Copyright (c) Microsoft Corporation. -->\r\n<!-- SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -->\r\n\r\n# Filenames\r\n\r\nMode    | Import Library | DLL (VS)        | DLL (GitHub)        |\r\n--------|----------------|-----------------|---------------------|\r\nRelease | `msvcprt.lib`  | `msvcp140.dll`  | `msvcp140_oss.dll`  |\r\nDebug   | `msvcprtd.lib` | `msvcp140d.dll` | `msvcp140d_oss.dll` |\r\n\r\n# Import Libraries\r\n\r\nAn import library is a `.lib` file that defines its symbols as imported from a DLL.\r\n\r\nUsually there is one `.lib` file for one `.dll` file, with the same name.\r\nThe names are different for MSVC because it started encoding its ABI version into the DLL's filename,\r\nbut there was no reason to change the import library's filename.\r\n\r\nAlso, an import library usually only contains references to DLL symbols and doesn't define anything on its own.\r\nHowever, this is purely a convention - nothing technically stops an import library\r\nfrom containing object files that are effectively statically linked.\r\n\r\n## Advantages of Injecting Additional Code\r\n\r\nThis is what the STL's import library does - it defines some functions and variables on its own.\r\nThis allows us to:\r\n\r\n* Extend the STL implementation without altering the DLL export surface.\r\n  + This has been critical in allowing us to implement C++17 `<filesystem>` and much more.\r\n* Separately compile functions and constant data for improved throughput.\r\n  + `<charconv>`'s lookup tables are a notable example.\r\n\r\n## Limitations\r\n\r\nThe caveats of this technique are:\r\n\r\n* It effectively defeats the purpose of the `/MD` and `/MDd` options by embedding part of\r\n  the STL implementation into the resulting user binaries, rather than staying in the STL's DLL.\r\n* Due to the duplication in each user binary that links to the import library,\r\n  variables in the import library **cannot represent shared global state**.\r\n  + This limitation is subtle (not readily apparent from the source code) and critical.\r\n    If shared global state is necessary, our only option while preserving bincompat is adding a satellite DLL.\r\n* Due to having just two flavors of the import library (debug and release),\r\n  we cannot use anything that depends on `_ITERATOR_DEBUG_LEVEL`.\r\n\r\nFor these reasons, especially the last one, we need to strictly control what is used by the import library.\r\nIn particular, `basic_string` must not be used there.\r\n\r\n## Core Headers\r\n\r\nRestricting the import library to including core headers only is an effective way to avoid problems.\r\n`locale0.cpp`'s inclusion of `<xfacet>` is currently a special case and should be treated with extreme caution.\r\n"
  },
  {
    "path": "stl/CMakeLists.txt",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n##################################################\r\n# Lists of files. (We can also copy files here.) #\r\n##################################################\r\n\r\nset(HEADERS\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_all_public_headers.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_bit_utils.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_chrono.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_cxx_stdatomic.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_filebuf.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_format_ucd_tables.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_formatter.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_heap_algorithms.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_int128.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_iter_core.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_minmax.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_ostream.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_print.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_ranges_to.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_ranges_tuple_formatter.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_sanitizer_annotate_container.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_string_view.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_system_error_abi.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_threads_core.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_tzdb.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_xlocinfo_types.hpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/algorithm\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/any\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/array\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/atomic\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/barrier\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/bit\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/bitset\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cassert\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/ccomplex\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cctype\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cerrno\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cfenv\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cfloat\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/charconv\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/chrono\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cinttypes\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/ciso646\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/climits\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/clocale\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cmath\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/codecvt\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/compare\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/complex\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/concepts\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/condition_variable\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/coroutine\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/csetjmp\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/csignal\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cstdalign\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cstdarg\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cstdbool\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cstddef\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cstdint\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cstdio\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cstdlib\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cstring\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/ctgmath\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/ctime\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cuchar\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cwchar\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/cwctype\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/deque\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/exception\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/execution\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/expected\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/experimental/coroutine\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/experimental/generator\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/experimental/resumable\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/filesystem\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/flat_map\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/flat_set\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/format\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/forward_list\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/fstream\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/functional\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/future\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/generator\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/header-units.json\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/initializer_list\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/iomanip\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/ios\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/iosfwd\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/iostream\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/iso646.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/istream\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/iterator\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/latch\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/limits\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/list\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/locale\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/map\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/mdspan\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/memory\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/memory_resource\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/mutex\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/new\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/numbers\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/numeric\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/optional\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/ostream\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/print\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/queue\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/random\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/ranges\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/ratio\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/regex\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/scoped_allocator\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/semaphore\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/set\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/shared_mutex\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/source_location\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/span\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/spanstream\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/sstream\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/stack\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/stacktrace\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/stdexcept\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/stdfloat\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/stop_token\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/streambuf\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/string\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/string_view\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/strstream\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/syncstream\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/system_error\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/thread\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/tuple\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/type_traits\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/typeindex\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/typeinfo\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/unordered_map\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/unordered_set\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/use_ansi.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/utility\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/valarray\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/variant\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/vector\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/version\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xatomic.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xatomic_wait.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xbit_ops.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xcall_once.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xcharconv.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xcharconv_ryu.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xcharconv_ryu_tables.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xcharconv_tables.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xerrc.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xfacet\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xfilesystem_abi.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xhash\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xiosbase\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xkeycheck.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xlocale\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xlocbuf\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xlocinfo\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xlocmes\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xlocmon\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xlocnum\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xloctime\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xmemory\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xnode_handle.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xpolymorphic_allocator.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xsmf_control.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xstring\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xthreads.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xtimec.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xtr1common\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xtree\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/xutility\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/ymath.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/yvals.h\r\n    ${CMAKE_CURRENT_LIST_DIR}/inc/yvals_core.h\r\n)\r\n\r\nforeach(header ${HEADERS})\r\n    file(RELATIVE_PATH _header_path \"${CMAKE_CURRENT_LIST_DIR}/inc\" \"${header}\")\r\n    configure_file(\"${header}\" \"${PROJECT_BINARY_DIR}/out/inc/${_header_path}\" COPYONLY)\r\nendforeach()\r\n\r\nset(MODULE_FILES\r\n    ${CMAKE_CURRENT_LIST_DIR}/modules/modules.json\r\n    ${CMAKE_CURRENT_LIST_DIR}/modules/std.ixx\r\n    ${CMAKE_CURRENT_LIST_DIR}/modules/std.compat.ixx\r\n)\r\n\r\nforeach(module_file ${MODULE_FILES})\r\n    file(RELATIVE_PATH _module_file_path \"${CMAKE_CURRENT_LIST_DIR}/modules\" \"${module_file}\")\r\n    configure_file(\"${module_file}\" \"${PROJECT_BINARY_DIR}/out/modules/${_module_file_path}\" COPYONLY)\r\nendforeach()\r\n\r\n# Objs that implement aliases; these are completely independent of the configuration\r\nset(ALIAS_SOURCES_X86_X64\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/alias_init_once_begin_initialize.asm\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/alias_init_once_complete.asm\r\n)\r\n\r\n# Objs that exist in both libcpmt[d][01].lib and msvcprt[d].lib.\r\nset(IMPLIB_SOURCES\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/asan_noop.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/charconv.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/filesystem.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/format.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/locale0_implib.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/nothrow.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/print.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/regex.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/sharedmutex.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/stacktrace.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/syserror_import_lib.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/vector_algorithms.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xcharconv_ryu_tables.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xcharconv_tables_double.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xcharconv_tables_float.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xonce2.cpp\r\n)\r\n\r\n# The following files are linked in msvcp140[d][_clr].dll.\r\nset(DLL_SOURCES\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/dllmain.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/instances.cpp\r\n)\r\n\r\n# Sources that must not be compiled with /GL, since they contain CRT initializers.\r\nset(INITIALIZER_SOURCES\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/winapisupp.cpp\r\n)\r\n\r\nset(SOURCES\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/StlCompareStringA.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/StlCompareStringW.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/StlLCMapStringA.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/StlLCMapStringW.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/_tolower.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/_toupper.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/atomic.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/cerr.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/cin.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/clog.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/cond.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/cout.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/cthread.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/filesys.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/fiopen.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/future.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/iomanip.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/ios.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/iosptrs.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/iostream.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/locale.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/locale0.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/multprec.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/mutex.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/pplerror.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/ppltasks.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/raisehan.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/stdhndlr.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/stdthrow.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/syserror.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/taskscheduler.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/thread0.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/uncaught_exception.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/uncaught_exceptions.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/ushcerr.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/ushcin.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/ushclog.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/ushcout.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/ushiostr.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/wcerr.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/wcin.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/wclog.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/wcout.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/winapinls.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/wiostrea.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/wlocale.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xalloc.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xcosh.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xdateord.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xdtest.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xexp.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xgetwctype.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xlgamma.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xlocale.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xlock.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xmbtowc.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xmtx.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xnotify.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xonce.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xrngabort.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xrngdev.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xsinh.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xstod.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xstof.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xstol.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xstoll.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xstoul.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xstoull.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xstrcoll.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xstrxfrm.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xthrow.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xtime.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xtowlower.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xtowupper.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xvalues.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xwcscoll.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xwcsxfrm.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xwctomb.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xwstod.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/xwstof.cpp\r\n)\r\n\r\nset(ASAN_SOURCES\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/asan.cpp\r\n)\r\n\r\nset(EHA_SOURCES\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/excptptr.cpp\r\n)\r\n\r\nset(SOURCES_SATELLITE_1\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/memory_resource.cpp\r\n)\r\n\r\nset(SOURCES_SATELLITE_2\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/special_math.cpp\r\n)\r\n\r\nset(SOURCES_SATELLITE_ATOMIC_WAIT\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/atomic_wait.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/parallel_algorithms.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/syncstream.cpp\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/tzdb.cpp\r\n)\r\n\r\nset(SOURCES_SATELLITE_CODECVT_IDS\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/ulocale.cpp\r\n)\r\n\r\n# Objs that exist only in libcpmt[d][01].lib.\r\nset(STATIC_SOURCES\r\n    ${SOURCES_SATELLITE_1}\r\n    ${SOURCES_SATELLITE_2}\r\n    ${SOURCES_SATELLITE_ATOMIC_WAIT}\r\n    ${SOURCES_SATELLITE_CODECVT_IDS}\r\n)\r\n\r\n# Objs that exist in all satellite DLLs\r\nset(SATELLITE_DLL_SOURCES\r\n    ${CMAKE_CURRENT_LIST_DIR}/src/dllmain_satellite.cpp\r\n)\r\n\r\n####################\r\n# Toolset options. #\r\n####################\r\n\r\nset(CMAKE_CXX_FLAGS \"\")\r\nset(CMAKE_CXX_FLAGS_DEBUG \"\")\r\nset(CMAKE_CXX_FLAGS_RELEASE \"\")\r\nset(CMAKE_MSVC_RUNTIME_CHECKS \"\")\r\nset(CMAKE_CXX_STANDARD_LIBRARIES \"kernel32.lib\")\r\nset(CMAKE_CXX_STANDARD_LIBRARIES_INIT \"kernel32.lib\")\r\nset(CMAKE_MSVC_RUNTIME_LIBRARY \"\")\r\n\r\nset(CMAKE_ARCHIVE_OUTPUT_DIRECTORY \"${STL_ARCHIVE_OUTPUT_DIRECTORY}\")\r\nset(CMAKE_LIBRARY_OUTPUT_DIRECTORY \"${STL_LIBRARY_OUTPUT_DIRECTORY}\")\r\nset(CMAKE_RUNTIME_OUTPUT_DIRECTORY \"${STL_RUNTIME_OUTPUT_DIRECTORY}\")\r\n\r\nset(CMAKE_STATIC_LINKER_FLAGS \"/WX\")\r\nset(CMAKE_STATIC_LINKER_FLAGS_DEBUG \"\")\r\nset(CMAKE_STATIC_LINKER_FLAGS_RELEASE \"\")\r\nset(CMAKE_SHARED_LINKER_FLAGS \"/DEBUG:FULL /WX /RELEASE /SUBSYSTEM:Console /NODEFAULTLIB /INCREMENTAL:NO /MANIFEST:NO /DLL /profile /guard:cf /DEBUGTYPE:cv,fixup /LARGEADDRESSAWARE\")\r\nif(VCLIBS_TARGET_ARCHITECTURE STREQUAL \"x64\")\r\n    set(CMAKE_SHARED_LINKER_FLAGS \"${CMAKE_SHARED_LINKER_FLAGS} /CETCOMPAT\")\r\nendif()\r\nif(VCLIBS_TARGET_ARCHITECTURE MATCHES \"^(x64|arm64|arm64ec)$\")\r\n    set(CMAKE_SHARED_LINKER_FLAGS \"${CMAKE_SHARED_LINKER_FLAGS} /guard:ehcont\")\r\nendif()\r\nif(VCLIBS_TARGET_ARCHITECTURE MATCHES \"^(arm64|arm64ec)$\")\r\n    set(CMAKE_SHARED_LINKER_FLAGS \"${CMAKE_SHARED_LINKER_FLAGS} /guard:delayloadsignret\")\r\nendif()\r\nset(CMAKE_SHARED_LINKER_FLAGS_DEBUG \"\")\r\nset(CMAKE_SHARED_LINKER_FLAGS_RELEASE \"\")\r\n\r\n# Toolset options must appear before add_library() for the options to take effect.\r\nadd_compile_definitions(_CRTBLD _HAS_OLD_IOSTREAMS_MEMBERS=1)\r\n\r\n# /Z7 for MSVC, /Zi for MASM\r\nset(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT \"Embedded\")\r\n\r\nadd_compile_options(/nologo /WX /Gy\r\n    \"$<$<COMPILE_LANGUAGE:CXX>:/diagnostics:caret;/W4;/w14265;/w15038;/fastfail;/guard:cf;/Zp8;/std:c++latest;/permissive-;/Zc:preprocessor;/Zc:threadSafeInit-;/Zl>\"\r\n    \"$<$<AND:$<COMPILE_LANGUAGE:CXX>,$<IN_LIST:${VCLIBS_TARGET_ARCHITECTURE},x64;arm64;arm64ec>>:/guard:ehcont>\"\r\n    \"$<$<AND:$<COMPILE_LANGUAGE:CXX>,$<IN_LIST:${VCLIBS_TARGET_ARCHITECTURE},arm64;arm64ec>>:/guard:signret>\"\r\n    \"$<$<COMPILE_LANGUAGE:ASM_MASM>:/W3;/quiet>\"\r\n)\r\n\r\ninclude_directories(BEFORE\r\n    \"${CMAKE_CURRENT_LIST_DIR}/inc\"\r\n    \"${TOOLSET_ROOT_DIR}/crt/src/vcruntime\"\r\n)\r\n\r\n###########################\r\n# End of toolset options. #\r\n###########################\r\n\r\nif(VCLIBS_TARGET_ARCHITECTURE MATCHES \"^(x86|x64)$\")\r\n    add_library(stl_alias_objects OBJECT ${ALIAS_SOURCES_X86_X64})\r\nelse()\r\n    add_library(stl_alias_objects INTERFACE)\r\nendif()\r\n\r\nif(STL_ASAN_BUILD)\r\n    set(DLL_ASAN_SOURCES ${ASAN_SOURCES})\r\nelse()\r\n    set(DLL_ASAN_SOURCES \"\")\r\nendif()\r\n\r\nfunction(target_stl_compile_options tgt rel_or_dbg)\r\n    if(rel_or_dbg STREQUAL \"Release\")\r\n        target_compile_options(${tgt} PRIVATE ${VCLIBS_RELEASE_OPTIONS})\r\n    elseif(rel_or_dbg STREQUAL \"Debug\")\r\n        target_compile_options(${tgt} PRIVATE ${VCLIBS_DEBUG_OPTIONS})\r\n        target_compile_definitions(${tgt} PRIVATE \"_DEBUG\")\r\n    else()\r\n        message(FATAL_ERROR \"INTERNAL ERROR: unexpected value for rel_or_dbg: '${rel_or_dbg}'\")\r\n    endif()\r\nendfunction()\r\n\r\nfunction(generate_satellite_def SATELLITE_NAME D_SUFFIX)\r\n    set(full_satellite_name \"msvcp140${D_SUFFIX}_${SATELLITE_NAME}${VCLIBS_SUFFIX}\")\r\n    string(TOUPPER \"${full_satellite_name}\" upper_full_satellite_name)\r\n    set(satellite_input_src_file_path \"${CMAKE_CURRENT_LIST_DIR}/src/msvcp_${SATELLITE_NAME}.src\")\r\n    set(satellite_output_def_file_path \"${CMAKE_BINARY_DIR}/msvcp_${SATELLITE_NAME}${D_SUFFIX}.def\")\r\n    set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS \"${satellite_input_src_file_path}\")\r\n\r\n    # We use the placeholder name \"LIBRARYNAME\" in the corresponding .src file of a satellite DLL\r\n    # (i.e., we write \"LIBRARY LIBRARYNAME\" as the first non-commented line in the file).\r\n    #\r\n    # Here, we dynamically replace this placeholder name with the name of the satellite DLL for\r\n    # the current build configuration. Then, we write out the new .def file to the binary output\r\n    # directory.\r\n    file(READ \"${satellite_input_src_file_path}\" satellite_def_file_contents)\r\n    string(REPLACE \"LIBRARYNAME\" \"${upper_full_satellite_name}\" satellite_def_file_contents \"${satellite_def_file_contents}\")\r\n    file(GENERATE OUTPUT \"${satellite_output_def_file_path}\" CONTENT \"${satellite_def_file_contents}\")\r\nendfunction()\r\n\r\nfunction(add_stl_dlls D_SUFFIX REL_OR_DBG)\r\n    set(link_options_Release \"/LTCG;/opt:ref,icf;${VCLIBS_EXPLICIT_MACHINE}\")\r\n    set(link_options_Debug \"/opt:ref,noicf;${VCLIBS_EXPLICIT_MACHINE}\")\r\n\r\n    set(gl_flag_Release \"/GL\")\r\n    set(gl_flag_Debug \"\")\r\n\r\n    # msvcp140.dll\r\n    add_library(msvcp${D_SUFFIX}_objects OBJECT ${DLL_SOURCES} ${SOURCES} ${DLL_ASAN_SOURCES})\r\n    target_compile_definitions(msvcp${D_SUFFIX}_objects PRIVATE CRTDLL2 _DLL)\r\n    target_compile_options(msvcp${D_SUFFIX}_objects PRIVATE ${gl_flag_${REL_OR_DBG}} /EHsc)\r\n    target_stl_compile_options(msvcp${D_SUFFIX}_objects ${REL_OR_DBG})\r\n\r\n    add_library(msvcp${D_SUFFIX}_init_objects OBJECT ${INITIALIZER_SOURCES})\r\n    target_compile_definitions(msvcp${D_SUFFIX}_init_objects PRIVATE CRTDLL2 _DLL)\r\n    target_compile_options(msvcp${D_SUFFIX}_init_objects PRIVATE /EHsc)\r\n    target_stl_compile_options(msvcp${D_SUFFIX}_init_objects ${REL_OR_DBG})\r\n\r\n    add_library(msvcp${D_SUFFIX}_eha_objects OBJECT ${EHA_SOURCES})\r\n    target_compile_definitions(msvcp${D_SUFFIX}_eha_objects PRIVATE CRTDLL2 _DLL)\r\n    target_compile_options(msvcp${D_SUFFIX}_eha_objects PRIVATE ${gl_flag_${REL_OR_DBG}} /EHa)\r\n    target_stl_compile_options(msvcp${D_SUFFIX}_eha_objects ${REL_OR_DBG})\r\n\r\n    add_library(msvcp${D_SUFFIX} SHARED)\r\n    target_link_libraries(msvcp${D_SUFFIX} PRIVATE msvcp${D_SUFFIX}_eha_objects msvcp${D_SUFFIX}_objects msvcp${D_SUFFIX}_init_objects \"${TOOLSET_LIB}/vcruntime${D_SUFFIX}.lib\" \"${TOOLSET_LIB}/msvcrt${D_SUFFIX}.lib\" \"ucrt${D_SUFFIX}.lib\")\r\n    if(VCLIBS_TARGET_ARCHITECTURE MATCHES \"^(arm64|arm64ec)$\")\r\n        target_link_libraries(msvcp${D_SUFFIX} PRIVATE \"softintrin.lib\")\r\n    endif()\r\n    set_target_properties(msvcp${D_SUFFIX} PROPERTIES ARCHIVE_OUTPUT_NAME \"msvcp140_base${D_SUFFIX}${VCLIBS_SUFFIX}\")\r\n    set_target_properties(msvcp${D_SUFFIX} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")\r\n    set_target_properties(msvcp${D_SUFFIX} PROPERTIES OUTPUT_NAME \"msvcp140${D_SUFFIX}${VCLIBS_SUFFIX}\")\r\n    target_link_options(msvcp${D_SUFFIX} PRIVATE ${link_options_${REL_OR_DBG}})\r\n\r\n    # import library 'statics'\r\n    add_library(msvcp${D_SUFFIX}_implib_objects OBJECT ${IMPLIB_SOURCES})\r\n    target_compile_definitions(msvcp${D_SUFFIX}_implib_objects PRIVATE _DLL _ENFORCE_ONLY_CORE_HEADERS)\r\n    target_compile_options(msvcp${D_SUFFIX}_implib_objects PRIVATE /EHsc) # No /GL!\r\n    target_stl_compile_options(msvcp${D_SUFFIX}_implib_objects ${REL_OR_DBG})\r\n\r\n    add_library(msvcp${D_SUFFIX}_satellite_objects OBJECT ${SATELLITE_DLL_SOURCES})\r\n    target_compile_definitions(msvcp${D_SUFFIX}_satellite_objects PRIVATE _DLL)\r\n    target_compile_options(msvcp${D_SUFFIX}_satellite_objects PRIVATE ${gl_flag_${REL_OR_DBG}} /EHsc)\r\n    target_stl_compile_options(msvcp${D_SUFFIX}_satellite_objects ${REL_OR_DBG})\r\n\r\n    # msvcp140_1.dll (the memory_resource satellite)\r\n    add_library(msvcp_1${D_SUFFIX}_objects OBJECT ${SOURCES_SATELLITE_1})\r\n    target_compile_definitions(msvcp_1${D_SUFFIX}_objects PRIVATE _BUILDING_SATELLITE_1 _DLL)\r\n    target_compile_options(msvcp_1${D_SUFFIX}_objects PRIVATE ${gl_flag_${REL_OR_DBG}} /EHsc)\r\n    target_stl_compile_options(msvcp_1${D_SUFFIX}_objects ${REL_OR_DBG})\r\n\r\n    add_library(msvcp_1${D_SUFFIX} SHARED)\r\n    target_link_libraries(msvcp_1${D_SUFFIX} PRIVATE msvcp_1${D_SUFFIX}_objects msvcp${D_SUFFIX}_satellite_objects \"msvcp${D_SUFFIX}\" \"${TOOLSET_LIB}/vcruntime${D_SUFFIX}.lib\" \"${TOOLSET_LIB}/msvcrt${D_SUFFIX}.lib\" \"ucrt${D_SUFFIX}.lib\")\r\n    set_target_properties(msvcp_1${D_SUFFIX} PROPERTIES ARCHIVE_OUTPUT_NAME \"msvcp140_1${D_SUFFIX}${VCLIBS_SUFFIX}\")\r\n    set_target_properties(msvcp_1${D_SUFFIX} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")\r\n    set_target_properties(msvcp_1${D_SUFFIX} PROPERTIES OUTPUT_NAME \"msvcp140_1${D_SUFFIX}${VCLIBS_SUFFIX}\")\r\n    target_link_options(msvcp_1${D_SUFFIX} PRIVATE ${link_options_${REL_OR_DBG}})\r\n\r\n    # msvcp140_2.dll (the special math satellite)\r\n    add_library(msvcp_2${D_SUFFIX}_objects OBJECT ${SOURCES_SATELLITE_2})\r\n    target_compile_definitions(msvcp_2${D_SUFFIX}_objects PRIVATE _BUILDING_SATELLITE_2 _DLL)\r\n    target_compile_options(msvcp_2${D_SUFFIX}_objects PRIVATE ${gl_flag_${REL_OR_DBG}} /EHsc)\r\n    target_link_libraries(msvcp_2${D_SUFFIX}_objects PRIVATE Boost::math)\r\n    target_stl_compile_options(msvcp_2${D_SUFFIX}_objects ${REL_OR_DBG})\r\n\r\n    add_library(msvcp_2${D_SUFFIX} SHARED)\r\n    target_link_libraries(msvcp_2${D_SUFFIX} PRIVATE msvcp_2${D_SUFFIX}_objects msvcp${D_SUFFIX}_satellite_objects msvcp${D_SUFFIX}_implib_objects msvcp${D_SUFFIX} \"${TOOLSET_LIB}/vcruntime${D_SUFFIX}.lib\" \"${TOOLSET_LIB}/msvcrt${D_SUFFIX}.lib\" \"ucrt${D_SUFFIX}.lib\")\r\n    set_target_properties(msvcp_2${D_SUFFIX} PROPERTIES ARCHIVE_OUTPUT_NAME \"msvcp140_2${D_SUFFIX}${VCLIBS_SUFFIX}\")\r\n    set_target_properties(msvcp_2${D_SUFFIX} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")\r\n    set_target_properties(msvcp_2${D_SUFFIX} PROPERTIES OUTPUT_NAME \"msvcp140_2${D_SUFFIX}${VCLIBS_SUFFIX}\")\r\n    target_link_options(msvcp_2${D_SUFFIX} PRIVATE ${link_options_${REL_OR_DBG}})\r\n\r\n    # msvcp140_atomic_wait.dll (the atomic wait satellite)\r\n    add_library(msvcp${D_SUFFIX}_atomic_wait_objects OBJECT ${SOURCES_SATELLITE_ATOMIC_WAIT})\r\n    target_compile_definitions(msvcp${D_SUFFIX}_atomic_wait_objects PRIVATE _BUILDING_SATELLITE_ATOMIC_WAIT _DLL)\r\n    target_compile_options(msvcp${D_SUFFIX}_atomic_wait_objects PRIVATE ${gl_flag_${REL_OR_DBG}} /EHsc)\r\n    target_stl_compile_options(msvcp${D_SUFFIX}_atomic_wait_objects ${REL_OR_DBG})\r\n\r\n    # generate the .def for msvcp140_atomic_wait.dll\r\n    generate_satellite_def(\"atomic_wait\" \"${D_SUFFIX}\")\r\n\r\n    add_library(msvcp${D_SUFFIX}_atomic_wait SHARED \"${CMAKE_BINARY_DIR}/msvcp_atomic_wait${D_SUFFIX}.def\")\r\n    target_link_libraries(msvcp${D_SUFFIX}_atomic_wait PRIVATE msvcp${D_SUFFIX}_atomic_wait_objects msvcp${D_SUFFIX}_satellite_objects msvcp${D_SUFFIX}_implib_objects \"msvcp${D_SUFFIX}\" \"${TOOLSET_LIB}/vcruntime${D_SUFFIX}.lib\" \"${TOOLSET_LIB}/msvcrt${D_SUFFIX}.lib\" \"ucrt${D_SUFFIX}.lib\" \"advapi32.lib\" \"synchronization.lib\")\r\n    set_target_properties(msvcp${D_SUFFIX}_atomic_wait PROPERTIES ARCHIVE_OUTPUT_NAME \"msvcp140_atomic_wait${D_SUFFIX}${VCLIBS_SUFFIX}\")\r\n    set_target_properties(msvcp${D_SUFFIX}_atomic_wait PROPERTIES ARCHIVE_OUTPUT_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")\r\n    set_target_properties(msvcp${D_SUFFIX}_atomic_wait PROPERTIES OUTPUT_NAME \"msvcp140${D_SUFFIX}_atomic_wait${VCLIBS_SUFFIX}\")\r\n    target_link_options(msvcp${D_SUFFIX}_atomic_wait PRIVATE ${link_options_${REL_OR_DBG}})\r\n\r\n    # msvcp140_codecvt_ids.dll\r\n    add_library(msvcp${D_SUFFIX}_codecvt_ids_objects OBJECT ${SOURCES_SATELLITE_CODECVT_IDS})\r\n    target_compile_definitions(msvcp${D_SUFFIX}_codecvt_ids_objects PRIVATE _BUILDING_SATELLITE_CODECVT_IDS _DLL)\r\n    target_compile_options(msvcp${D_SUFFIX}_codecvt_ids_objects PRIVATE ${gl_flag_${REL_OR_DBG}} /EHsc)\r\n    target_stl_compile_options(msvcp${D_SUFFIX}_codecvt_ids_objects ${REL_OR_DBG})\r\n\r\n    add_library(msvcp${D_SUFFIX}_codecvt_ids SHARED)\r\n    target_link_libraries(msvcp${D_SUFFIX}_codecvt_ids PRIVATE msvcp${D_SUFFIX}_codecvt_ids_objects msvcp${D_SUFFIX}_satellite_objects \"msvcp${D_SUFFIX}\" \"${TOOLSET_LIB}/vcruntime${D_SUFFIX}.lib\" \"${TOOLSET_LIB}/msvcrt${D_SUFFIX}.lib\" \"ucrt${D_SUFFIX}.lib\")\r\n    set_target_properties(msvcp${D_SUFFIX}_codecvt_ids PROPERTIES ARCHIVE_OUTPUT_NAME \"msvcp140_codecvt_ids${D_SUFFIX}${VCLIBS_SUFFIX}\")\r\n    set_target_properties(msvcp${D_SUFFIX}_codecvt_ids PROPERTIES ARCHIVE_OUTPUT_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")\r\n    set_target_properties(msvcp${D_SUFFIX}_codecvt_ids PROPERTIES OUTPUT_NAME \"msvcp140${D_SUFFIX}_codecvt_ids${VCLIBS_SUFFIX}\")\r\n    target_link_options(msvcp${D_SUFFIX}_codecvt_ids PRIVATE ${link_options_${REL_OR_DBG}})\r\n\r\n    # import library\r\n    add_library(msvcp${D_SUFFIX}_implib STATIC ${HEADERS})\r\n    target_link_libraries(msvcp${D_SUFFIX}_implib stl_alias_objects msvcp${D_SUFFIX}_implib_objects)\r\n    add_dependencies(msvcp${D_SUFFIX}_implib msvcp${D_SUFFIX} msvcp_1${D_SUFFIX} msvcp_2${D_SUFFIX} msvcp${D_SUFFIX}_atomic_wait msvcp${D_SUFFIX}_codecvt_ids)\r\n    set_target_properties(msvcp${D_SUFFIX}_implib PROPERTIES STATIC_LIBRARY_OPTIONS \"/NOLOGO;/NODEFAULTLIB;/IGNORE:4006;$<TARGET_LINKER_FILE:msvcp${D_SUFFIX}>;$<TARGET_LINKER_FILE:msvcp_1${D_SUFFIX}>;$<TARGET_LINKER_FILE:msvcp_2${D_SUFFIX}>;$<TARGET_LINKER_FILE:msvcp${D_SUFFIX}_codecvt_ids>;$<TARGET_LINKER_FILE:msvcp${D_SUFFIX}_atomic_wait>;${VCLIBS_EXPLICIT_MACHINE}\")\r\n    set_target_properties(msvcp${D_SUFFIX}_implib PROPERTIES ARCHIVE_OUTPUT_NAME \"msvcprt${D_SUFFIX}\")\r\nendfunction()\r\n\r\nadd_stl_dlls(\"\" Release)\r\nadd_stl_dlls(\"d\" Debug)\r\n\r\nfunction(add_stl_statics FLAVOR_SUFFIX REL_OR_DBG IDL_VALUE)\r\n    add_library(libcpmt${FLAVOR_SUFFIX}_eha OBJECT ${EHA_SOURCES})\r\n    target_compile_definitions(libcpmt${FLAVOR_SUFFIX}_eha PRIVATE _ANNOTATE_STL \"_ITERATOR_DEBUG_LEVEL=${IDL_VALUE}\")\r\n    target_compile_options(libcpmt${FLAVOR_SUFFIX}_eha PRIVATE /EHa)\r\n    target_stl_compile_options(libcpmt${FLAVOR_SUFFIX}_eha ${REL_OR_DBG})\r\n\r\n    add_library(libcpmt${FLAVOR_SUFFIX} STATIC ${HEADERS} ${IMPLIB_SOURCES} ${SOURCES} ${INITIALIZER_SOURCES} ${STATIC_SOURCES})\r\n    target_compile_definitions(libcpmt${FLAVOR_SUFFIX} PRIVATE _ANNOTATE_STL \"_ITERATOR_DEBUG_LEVEL=${IDL_VALUE}\")\r\n    target_compile_options(libcpmt${FLAVOR_SUFFIX} PRIVATE \"$<$<COMPILE_LANGUAGE:CXX>:/EHsc>\")\r\n    target_link_libraries(libcpmt${FLAVOR_SUFFIX} PRIVATE Boost::math stl_alias_objects libcpmt${FLAVOR_SUFFIX}_eha)\r\n    target_stl_compile_options(libcpmt${FLAVOR_SUFFIX} ${REL_OR_DBG})\r\n    set_target_properties(libcpmt${FLAVOR_SUFFIX} PROPERTIES STATIC_LIBRARY_OPTIONS \"${VCLIBS_EXPLICIT_MACHINE}\")\r\nendfunction()\r\n\r\nadd_stl_statics(\"\" Release 0)\r\nadd_stl_statics(\"1\" Release 1)\r\nadd_stl_statics(\"d\" Debug 2)\r\nadd_stl_statics(\"d1\" Debug 1)\r\nadd_stl_statics(\"d0\" Debug 0)\r\n\r\nadd_library(stl_asan STATIC ${ASAN_SOURCES})\r\nset_target_properties(stl_asan PROPERTIES STATIC_LIBRARY_OPTIONS \"${VCLIBS_EXPLICIT_MACHINE}\")\r\n\r\nconfigure_file(set_environment.bat.in \"${PROJECT_BINARY_DIR}/set_environment.bat\" @ONLY)\r\nconfigure_file(set_environment.ps1.in \"${PROJECT_BINARY_DIR}/set_environment.ps1\" @ONLY)\r\n"
  },
  {
    "path": "stl/debugger/STL.natvis",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n<AutoVisualizer xmlns=\"http://schemas.microsoft.com/vstudio/debugger/natvis/2010\">\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::_Compressed_pair&lt;*,*,1&gt;\">\r\n      <DisplayString>{*($T1 *)this}</DisplayString>\r\n      <Expand>\r\n          <ExpandedItem>*($T1 *)this</ExpandedItem>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::_Compressed_pair&lt;*,*,0&gt;\">\r\n      <DisplayString>{_Myval1}</DisplayString>\r\n      <Expand>\r\n          <ExpandedItem>_Myval1</ExpandedItem>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::error_category\">\r\n      <DisplayString>[{name(),sb}]</DisplayString>\r\n      <Expand>\r\n      <Synthetic Name=\"hint\">\r\n          <DisplayString>Enable \"Allow Function Calls In Value Formatting\" if you see \"???\" here</DisplayString>\r\n      </Synthetic>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::error_code\">\r\n    <DisplayString>{{ value={_Myval}, category={*_Mycat} }}</DisplayString>\r\n    <Expand>\r\n      <Synthetic Name=\"hint\">\r\n        <DisplayString>Enable \"Allow Function Calls In Value Formatting\" if you see \"???\" here</DisplayString>\r\n      </Synthetic>\r\n      <Item Name=\"[value]\">_Myval</Item>\r\n      <Item Name=\"[category]\">_Mycat</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::exception_ptr\">\r\n      <CustomVisualizer Condition=\"_Data1 != 0\" VisualizerId=\"CEB58A03-E78D-4D19-9AE7-4738E200649E\" />\r\n      <DisplayString Condition=\"_Data1 == 0\">null</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::initializer_list&lt;*&gt;\">\r\n      <DisplayString>{{ size={_Last - _First} }}</DisplayString>\r\n      <Expand>\r\n          <ArrayItems>\r\n              <Size>_Last - _First</Size>\r\n              <ValuePointer>_First</ValuePointer>\r\n          </ArrayItems>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::pair&lt;*&gt;\">\r\n      <DisplayString IncludeView=\"noparens\">{first}, {second}</DisplayString>\r\n      <DisplayString ExcludeView=\"noparens\">({first}, {second})</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"first\">first</Item>\r\n          <Item Name=\"second\">second</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::tuple&lt;&gt;\">\r\n    <DisplayString IncludeView=\"noparens;noparensasptr\"></DisplayString>\r\n    <DisplayString>({*this,view(noparens)})</DisplayString>\r\n    <Expand/>\r\n  </Type>\r\n\r\n  <!--\r\n    Tuple uses a bit of a SFINAE-style technique in order to allow us to write less code.\r\n    It uses Condition=\"(void)<expr>, true\", along with Optional=\"true\".\r\n    This allows us to check if <expr> compiles, and if so, use that \"branch\".\r\n  -->\r\n\r\n  <Type Name=\"std::tuple&lt;*&gt;\">\r\n    <DisplayString IncludeView=\"noparens\" Optional=\"true\" Condition=\"(void)((_Mybase *)this)->_Myfirst._Val, true\">\r\n      {_Myfirst._Val}, {*((_Mybase *) this),view(noparens)}\r\n    </DisplayString>\r\n    <DisplayString IncludeView=\"noparens\">{_Myfirst._Val}</DisplayString>\r\n    <DisplayString>({*this,view(noparens)})</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[0]\">_Myfirst._Val</Item>\r\n      <Item Name=\"[1]\" Optional=\"true\">((_Mybase *) this)->_Myfirst._Val</Item>\r\n      <Item Name=\"[2]\" Optional=\"true\">((_Mybase::_Mybase *) this)->_Myfirst._Val</Item>\r\n      <Item Name=\"[3]\" Optional=\"true\">((_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val</Item>\r\n      <Item Name=\"[4]\" Optional=\"true\">((_Mybase::_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val</Item>\r\n      <Synthetic Name=\"[...]\" Optional=\"true\" Condition=\"(void)((_Mybase::_Mybase::_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val, true\">\r\n        <DisplayString>Next five elements:</DisplayString>\r\n      </Synthetic>\r\n      <ExpandedItem Optional=\"true\">*((_Mybase::_Mybase::_Mybase::_Mybase::_Mybase *) this)</ExpandedItem>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::tuple&lt;*&gt;\" IncludeView=\"asptr;noparensasptr\">\r\n    <DisplayString IncludeView=\"noparensasptr\" Optional=\"true\" Condition=\"(void)((_Mybase *)this)->_Myfirst._Val, true\">\r\n      {_Myfirst._Val}, {*((_Mybase *) this),view(noparensasptr)}\r\n    </DisplayString>\r\n    <DisplayString IncludeView=\"noparensasptr\">{&amp;_Myfirst._Val}</DisplayString>\r\n    <DisplayString>({*this,view(noparensasptr)})</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[0]\">&amp;_Myfirst._Val</Item>\r\n      <Item Name=\"[1]\">&amp;((_Mybase *) this)->_Myfirst._Val</Item>\r\n      <Item Name=\"[2]\" Optional=\"true\">&amp;((_Mybase::_Mybase *) this)->_Myfirst._Val</Item>\r\n      <Item Name=\"[3]\" Optional=\"true\">&amp;((_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val</Item>\r\n      <Item Name=\"[4]\" Optional=\"true\">&amp;((_Mybase::_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val</Item>\r\n      <Synthetic Name=\"[...]\" Optional=\"true\" Condition=\"(void)((_Mybase::_Mybase::_Mybase::_Mybase::_Mybase *) this)->_Myfirst._Val, true\">\r\n        <DisplayString>Next five elements:</DisplayString>\r\n      </Synthetic>\r\n      <ExpandedItem Optional=\"true\">*((_Mybase::_Mybase::_Mybase::_Mybase::_Mybase *) this),view(asptr)</ExpandedItem>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::nullopt_t\">\r\n      <DisplayString>nullopt</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::optional&lt;*&gt;\">\r\n      <DisplayString Condition=\"!_Has_value\">nullopt</DisplayString>\r\n      <DisplayString Condition=\"_Has_value\">{_Value}</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Has_value\" Name=\"value\">_Value</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::_Variant_item&lt;*&gt;\">\r\n      <DisplayString>{_Elem}</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::variant&lt;*&gt;\">\r\n      <Intrinsic Name=\"index\" Expression=\"(int)_Which\"/>\r\n      <DisplayString Condition=\"index() &lt; 0\">[valueless_by_exception]</DisplayString>\r\n      <DisplayString Condition=\"index() ==  0\" Optional=\"true\">{{ index=0, value={_Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() ==  1\" Optional=\"true\">{{ index=1, value={_Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() ==  2\" Optional=\"true\">{{ index=2, value={_Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() ==  3\" Optional=\"true\">{{ index=3, value={_Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() ==  4\" Optional=\"true\">{{ index=4, value={_Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() ==  5\" Optional=\"true\">{{ index=5, value={_Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() ==  6\" Optional=\"true\">{{ index=6, value={_Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() ==  7\" Optional=\"true\">{{ index=7, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() ==  8\" Optional=\"true\">{{ index=8, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() ==  9\" Optional=\"true\">{{ index=9, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 10\" Optional=\"true\">{{ index=10, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 11\" Optional=\"true\">{{ index=11, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 12\" Optional=\"true\">{{ index=12, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 13\" Optional=\"true\">{{ index=13, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 14\" Optional=\"true\">{{ index=14, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 15\" Optional=\"true\">{{ index=15, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 16\" Optional=\"true\">{{ index=16, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 17\" Optional=\"true\">{{ index=17, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 18\" Optional=\"true\">{{ index=18, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 19\" Optional=\"true\">{{ index=19, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 20\" Optional=\"true\">{{ index=20, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 21\" Optional=\"true\">{{ index=21, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 22\" Optional=\"true\">{{ index=22, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 23\" Optional=\"true\">{{ index=23, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 24\" Optional=\"true\">{{ index=24, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 25\" Optional=\"true\">{{ index=25, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 26\" Optional=\"true\">{{ index=26, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 27\" Optional=\"true\">{{ index=27, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 28\" Optional=\"true\">{{ index=28, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 29\" Optional=\"true\">{{ index=29, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 30\" Optional=\"true\">{{ index=30, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <DisplayString Condition=\"index() == 31\" Optional=\"true\">{{ index=31, value={_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head} }}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"index\">index()</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() ==  0\" Optional=\"true\">_Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() ==  1\" Optional=\"true\">_Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() ==  2\" Optional=\"true\">_Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() ==  3\" Optional=\"true\">_Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() ==  4\" Optional=\"true\">_Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() ==  5\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() ==  6\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() ==  7\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() ==  8\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() ==  9\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 10\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 11\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 12\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 13\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 14\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 15\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 16\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 17\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 18\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 19\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 20\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 21\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 22\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 23\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 24\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 25\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 26\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 27\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 28\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 29\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 30\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n          <Item Name=\"[value]\" Condition=\"index() == 31\" Optional=\"true\">_Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Head</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::monostate\">\r\n      <DisplayString>monostate</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::unexpected&lt;*&gt;\">\r\n      <Intrinsic Name=\"unex\" Expression=\"_Unexpected\"/>\r\n      <DisplayString>{unex()}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"unex\">unex()</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::bad_expected_access&lt;*&gt;\">\r\n      <Intrinsic Name=\"unex\" Expression=\"_Unexpected\"/>\r\n      <DisplayString>{unex()}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"unex\">unex()</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::expected&lt;*,*&gt;\">\r\n      <Intrinsic Name=\"has_value\" Expression=\"_Has_value\"/>\r\n      <Intrinsic Name=\"value\" Expression=\"_Value\"/>\r\n      <Intrinsic Name=\"unex\" Expression=\"_Unexpected\"/>\r\n      <DisplayString Condition=\"has_value()\">{value()}</DisplayString>\r\n      <DisplayString Condition=\"!has_value()\">{unex()}</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"has_value()\" Name=\"value\">value()</Item>\r\n          <Item Condition=\"!has_value()\" Name=\"unex\">unex()</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::expected&lt;void,*&gt;\">\r\n      <Intrinsic Name=\"has_value\" Expression=\"_Has_value\"/>\r\n      <Intrinsic Name=\"unex\" Expression=\"_Unexpected\"/>\r\n      <DisplayString Condition=\"has_value()\">void</DisplayString>\r\n      <DisplayString Condition=\"!has_value()\">{unex()}</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"!has_value()\" Name=\"unex\">unex()</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::bitset&lt;*&gt;\">\r\n      <DisplayString>{{ size={$T1} }}</DisplayString>\r\n      <Expand>\r\n          <IndexListItems>\r\n              <Size>$T1</Size>\r\n              <ValueNode>(_Array[$i / _Bitsperword] &gt;&gt; ($i % _Bitsperword)) &amp; 1,d</ValueNode>\r\n          </IndexListItems>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::bitset&lt;*&gt;::reference\">\r\n      <DisplayString>{(_Pbitset-&gt;_Array[_Mypos / _Pbitset-&gt;_Bitsperword] &gt;&gt; (_Mypos % _Pbitset-&gt;_Bitsperword)) &amp; 1,d}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[bitset]\">_Pbitset</Item>\r\n          <Item Name=\"[pos]\">_Mypos</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::allocator&lt;*&gt;\">\r\n      <DisplayString>allocator</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::default_delete&lt;*&gt;\">\r\n      <DisplayString>default_delete</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <!-- VC 2015 -->\r\n   <Type Name=\"std::unique_ptr&lt;void, *&gt;\">\r\n      <SmartPointer Usage=\"Minimal\">_Mypair._Myval2</SmartPointer>\r\n      <DisplayString Condition=\"_Mypair._Myval2 == 0\">empty</DisplayString>\r\n      <DisplayString Condition=\"_Mypair._Myval2 != 0\">unique_ptr void</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Mypair._Myval2 != 0\" Name=\"[ptr]\">_Mypair._Myval2</Item>\r\n          <Item Condition=\"_Mypair._Myval2 != 0\" Name=\"[deleter]\">_Mypair</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::unique_ptr&lt;*&gt;\">\r\n      <SmartPointer Usage=\"Minimal\">_Mypair._Myval2</SmartPointer>\r\n      <DisplayString Condition=\"_Mypair._Myval2 == 0\">empty</DisplayString>\r\n      <DisplayString Condition=\"_Mypair._Myval2 != 0\">unique_ptr {*_Mypair._Myval2}</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Mypair._Myval2 != 0\" Name=\"[ptr]\">_Mypair._Myval2</Item>\r\n          <Item Condition=\"_Mypair._Myval2 != 0\" Name=\"[deleter]\">_Mypair</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::unique_ptr&lt;wchar_t [0],*&gt;\">\r\n    <AlternativeType Name=\"std::unique_ptr&lt;char [0],*&gt;\"/>\r\n    <AlternativeType Name=\"std::unique_ptr&lt;char8_t [0],*&gt;\"/>\r\n    <AlternativeType Name=\"std::unique_ptr&lt;char16_t [0],*&gt;\"/>\r\n    <AlternativeType Name=\"std::unique_ptr&lt;char32_t [0],*&gt;\"/>\r\n    <AlternativeType Name=\"std::unique_ptr&lt;wchar_t const [0],*&gt;\"/>\r\n    <AlternativeType Name=\"std::unique_ptr&lt;char const [0],*&gt;\"/>\r\n    <AlternativeType Name=\"std::unique_ptr&lt;char8_t const [0],*&gt;\"/>\r\n    <AlternativeType Name=\"std::unique_ptr&lt;char16_t const [0],*&gt;\"/>\r\n    <AlternativeType Name=\"std::unique_ptr&lt;char32_t const [0],*&gt;\"/>\r\n    <DisplayString Condition=\"_Mypair._Myval2 == nullptr\">{{empty}}</DisplayString>\r\n    <DisplayString Condition=\"_Mypair._Myval2 != nullptr\">{_Mypair._Myval2}</DisplayString>\r\n    <StringView>_Mypair._Myval2</StringView>\r\n    <Expand>\r\n      <Item Condition=\"_Mypair._Myval2 != nullptr\" Name=\"[deleter]\">_Mypair</Item>\r\n      <ExpandedItem Condition=\"_Mypair._Myval2 != nullptr\">_Mypair._Myval2,hv</ExpandedItem>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::_Ref_count&lt;*&gt;\">\r\n      <DisplayString>default</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Uses != 0\" Name=\"[original ptr]\">_Ptr</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::_Ref_count_del&lt;*&gt;\">\r\n      <DisplayString>custom deleter</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Uses != 0\" Name=\"[original ptr]\">_Mypair._Myval2</Item>\r\n          <Item Name=\"[deleter]\">_Mypair</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::_Ref_count_del_alloc&lt;*&gt;\">\r\n      <DisplayString>custom deleter, custom allocator</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Uses != 0\" Name=\"[original ptr]\">_Mypair._Myval2._Myval2</Item>\r\n          <Item Name=\"[deleter]\">_Mypair</Item>\r\n          <Item Name=\"[allocator]\">_Mypair._Myval2</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::_Ref_count_obj&lt;*&gt;\">\r\n      <DisplayString>make_shared</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Uses != 0\" Name=\"[original ptr]\">($T1 *) &amp;_Storage</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- VS 2019 16.3 -->\r\n  <Type Name=\"std::_Ref_count_obj2&lt;*&gt;\">\r\n      <DisplayString>make_shared</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Uses != 0\" Name=\"[original ptr]\">($T1 *) &amp;_Storage</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- VS 2022 17.10 -->\r\n  <Type Name=\"std::_Ref_count_bounded_array&lt;*&gt;\">\r\n    <DisplayString>make_shared&lt;T[N]&gt;</DisplayString>\r\n    <Expand>\r\n      <Item Condition=\"_Uses != 0\" Name=\"[allocated array]\">_Storage._Value</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- VS 2022 17.10 -->\r\n  <Type Name=\"std::_Ref_count_unbounded_array&lt;*,0&gt;\">\r\n    <Intrinsic Name=\"data\" Expression=\"&amp;(_Storage._Value)\" />\r\n    <Intrinsic Name=\"size\" Expression=\"_Size\" />\r\n    <DisplayString>make_shared&lt;T[]&gt;</DisplayString>\r\n    <Expand>\r\n      <ArrayItems>\r\n        <Size>size()</Size>\r\n        <ValuePointer>data()</ValuePointer>\r\n      </ArrayItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- VS 2022 17.10 -->\r\n  <Type Name=\"std::_Ref_count_unbounded_array&lt;*,1&gt;\">\r\n    <DisplayString>make_shared&lt;T[]&gt;</DisplayString>\r\n    <Expand>\r\n      <Item Condition=\"_Uses != 0\" Name=\"[original ptr]\">_Storage._Value</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::_Ref_count_obj_alloc&lt;*&gt;\">\r\n      <DisplayString>allocate_shared</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Uses != 0\" Name=\"[original ptr]\">($T1 *) &amp;_Mypair._Myval2</Item>\r\n          <Item Name=\"[allocator]\">_Mypair</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- VS 2019 16.7: _Ref_count_obj_alloc3 -->\r\n  <!-- VS 2019 16.3: _Ref_count_obj_alloc2 -->\r\n  <Type Name=\"std::_Ref_count_obj_alloc3&lt;*&gt;\">\r\n      <AlternativeType Name=\"std::_Ref_count_obj_alloc2&lt;*&gt;\" />\r\n      <!-- stateless allocator -->\r\n      <Intrinsic Optional=\"true\" Name=\"allocator\" Expression=\"*((_Mybase *) this)\"/>\r\n      <!-- stateful allocator -->\r\n      <Intrinsic Optional=\"true\" Name=\"allocator\" Expression=\"_Myval\"/>\r\n      <DisplayString>allocate_shared</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Uses != 0\" Name=\"[original ptr]\">($T1 *) &amp;_Storage</Item>\r\n          <Item Name=\"[allocator]\">allocator()</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- VS 2022 17.10 -->\r\n  <Type Name=\"std::_Ref_count_bounded_array_alloc&lt;*&gt;\">\r\n    <!-- stateless allocator -->\r\n    <Intrinsic Optional=\"true\" Name=\"allocator\" Expression=\"*((_Mybase *) this)\"/>\r\n    <!-- stateful allocator -->\r\n    <Intrinsic Optional=\"true\" Name=\"allocator\" Expression=\"_Myval\"/>\r\n    <DisplayString>allocate_shared&lt;T[N]&gt;</DisplayString>\r\n    <Expand>\r\n      <Item Condition=\"_Uses != 0\" Name=\"[allocated array]\">_Storage._Value</Item>\r\n      <Item Name=\"[allocator]\">allocator()</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- VS 2022 17.10 -->\r\n  <Type Name=\"std::_Ref_count_unbounded_array_alloc&lt;*&gt;\">\r\n    <!-- stateless allocator -->\r\n    <Intrinsic Optional=\"true\" Name=\"allocator\" Expression=\"*((_Mybase *) this)\"/>\r\n    <!-- stateful allocator -->\r\n    <Intrinsic Optional=\"true\" Name=\"allocator\" Expression=\"_Myval\"/>\r\n    <Intrinsic Name=\"data\" Expression=\"&amp;(_Storage._Value)\" />\r\n    <Intrinsic Name=\"size\" Expression=\"_Size\" />\r\n    <DisplayString>allocate_shared&lt;T[]&gt;</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[allocator]\">allocator()</Item>\r\n      <ArrayItems>\r\n        <Size>size()</Size>\r\n        <ValuePointer>data()</ValuePointer>\r\n      </ArrayItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- VS 2022 17.10 -->\r\n  <Type Name=\"std::_Ref_count_obj_alloc_for_overwrite&lt;*&gt;\">\r\n      <!-- stateless allocator -->\r\n      <Intrinsic Optional=\"true\" Name=\"allocator\" Expression=\"*((_Mybase *) this)\"/>\r\n      <!-- stateful allocator -->\r\n      <Intrinsic Optional=\"true\" Name=\"allocator\" Expression=\"_Myval\"/>\r\n      <DisplayString>allocate_shared_for_overwrite</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Uses != 0\" Name=\"[original ptr]\">($T1 *) &amp;_Storage</Item>\r\n          <Item Name=\"[allocator]\">allocator()</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- VS 2022 17.10 -->\r\n  <Type Name=\"std::_Ref_count_bounded_array_alloc_for_overwrite&lt;*&gt;\">\r\n    <!-- stateless allocator -->\r\n    <Intrinsic Optional=\"true\" Name=\"allocator\" Expression=\"*((_Mybase *) this)\"/>\r\n    <!-- stateful allocator -->\r\n    <Intrinsic Optional=\"true\" Name=\"allocator\" Expression=\"_Myval\"/>\r\n    <DisplayString>allocate_shared_for_overwrite&lt;T[N]&gt;</DisplayString>\r\n    <Expand>\r\n      <Item Condition=\"_Uses != 0\" Name=\"[allocated array]\">_Storage._Value</Item>\r\n      <Item Name=\"[allocator]\">allocator()</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- VS 2022 17.10 -->\r\n  <Type Name=\"std::_Ref_count_unbounded_array_alloc_for_overwrite&lt;*&gt;\">\r\n    <!-- stateless allocator -->\r\n    <Intrinsic Optional=\"true\" Name=\"allocator\" Expression=\"*((_Mybase *) this)\"/>\r\n    <!-- stateful allocator -->\r\n    <Intrinsic Optional=\"true\" Name=\"allocator\" Expression=\"_Myval\"/>\r\n    <Intrinsic Name=\"data\" Expression=\"&amp;(_Storage._Value)\" />\r\n    <Intrinsic Name=\"size\" Expression=\"_Size\" />\r\n    <DisplayString>allocate_shared_for_overwrite&lt;T[]&gt;</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[allocator]\">allocator()</Item>\r\n      <ArrayItems>\r\n        <Size>size()</Size>\r\n        <ValuePointer>data()</ValuePointer>\r\n      </ArrayItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- VC 2017, second toolset update -->\r\n  <Type Name=\"std::_Ref_count_resource&lt;*&gt;\">\r\n      <DisplayString>custom deleter</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Uses != 0\" Name=\"[original ptr]\">_Mypair._Myval2</Item>\r\n          <Item Name=\"[deleter]\">_Mypair</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- VC 2017, second toolset update -->\r\n  <Type Name=\"std::_Ref_count_resource_alloc&lt;*&gt;\">\r\n      <DisplayString>custom deleter, custom allocator</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Uses != 0\" Name=\"[original ptr]\">_Mypair._Myval2._Myval2</Item>\r\n          <Item Name=\"[deleter]\">_Mypair</Item>\r\n          <Item Name=\"[allocator]\">_Mypair._Myval2</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- Do not dereference _Ptr when type is void -->\r\n  <Type Name=\"std::shared_ptr&lt;void&gt;\">\r\n    <SmartPointer Usage=\"Minimal\">_Ptr</SmartPointer>\r\n      <DisplayString Condition=\"_Rep == 0\">empty</DisplayString>\r\n      <DisplayString IncludeView=\"ptr\" Condition=\"_Ptr == 0\">nullptr</DisplayString>\r\n      <DisplayString IncludeView=\"ptr\" Condition=\"_Ptr != 0\">void</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses == 1)   &amp;&amp; (_Rep-&gt;_Weaks == 1)\"  >shared_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong ref] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses == 1)   &amp;&amp; (_Rep-&gt;_Weaks == 2)\"  >shared_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong ref, {_Rep-&gt;_Weaks - 1} weak ref] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses == 1)   &amp;&amp; (_Rep-&gt;_Weaks &gt; 2)\">shared_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong ref, {_Rep-&gt;_Weaks - 1} weak refs] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses &gt; 1) &amp;&amp; (_Rep-&gt;_Weaks == 1)\"  >shared_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong refs] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses &gt; 1) &amp;&amp; (_Rep-&gt;_Weaks == 2)\"  >shared_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong refs, {_Rep-&gt;_Weaks - 1} weak ref] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses &gt; 1) &amp;&amp; (_Rep-&gt;_Weaks &gt; 2)\">shared_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong refs, {_Rep-&gt;_Weaks - 1} weak refs] [{*_Rep}]</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Rep != 0\" Name=\"[ptr]\">_Ptr</Item>\r\n          <Item Condition=\"_Rep != 0\" Name=\"[control block]\">*_Rep</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::shared_ptr&lt;*&gt;\">\r\n      <SmartPointer Usage=\"Minimal\">_Ptr</SmartPointer>\r\n      <DisplayString Condition=\"_Rep == 0\">empty</DisplayString>\r\n      <DisplayString IncludeView=\"ptr\" Condition=\"_Ptr == 0\">nullptr</DisplayString>\r\n      <DisplayString IncludeView=\"ptr\" Condition=\"_Ptr != 0\">{*_Ptr}</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses == 1)   &amp;&amp; (_Rep-&gt;_Weaks == 1)\"  >shared_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong ref] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses == 1)   &amp;&amp; (_Rep-&gt;_Weaks == 2)\"  >shared_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong ref, {_Rep-&gt;_Weaks - 1} weak ref] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses == 1)   &amp;&amp; (_Rep-&gt;_Weaks &gt; 2)\">shared_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong ref, {_Rep-&gt;_Weaks - 1} weak refs] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses &gt; 1) &amp;&amp; (_Rep-&gt;_Weaks == 1)\"  >shared_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong refs] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses &gt; 1) &amp;&amp; (_Rep-&gt;_Weaks == 2)\"  >shared_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong refs, {_Rep-&gt;_Weaks - 1} weak ref] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses &gt; 1) &amp;&amp; (_Rep-&gt;_Weaks &gt; 2)\">shared_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong refs, {_Rep-&gt;_Weaks - 1} weak refs] [{*_Rep}]</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Rep != 0\" Name=\"[ptr]\">_Ptr</Item>\r\n          <Item Condition=\"_Rep != 0\" Name=\"[control block]\">*_Rep</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- Do not dereference _Ptr when type is void -->\r\n  <Type Name=\"std::weak_ptr&lt;void&gt;\">\r\n      <DisplayString Condition=\"_Rep == 0\">empty</DisplayString>\r\n      <DisplayString IncludeView=\"ptr\" Condition=\"_Ptr == 0\">nullptr</DisplayString>\r\n      <DisplayString IncludeView=\"ptr\" Condition=\"_Ptr != 0\">void</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses == 0)   &amp;&amp; (_Rep-&gt;_Weaks == 1)\"  >expired [{_Rep-&gt;_Weaks} weak ref] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses == 0)   &amp;&amp; (_Rep-&gt;_Weaks &gt; 1)\">expired [{_Rep-&gt;_Weaks} weak refs] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses == 1)   &amp;&amp; (_Rep-&gt;_Weaks == 2)\"  >weak_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong ref, {_Rep-&gt;_Weaks - 1} weak ref] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses == 1)   &amp;&amp; (_Rep-&gt;_Weaks &gt; 2)\">weak_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong ref, {_Rep-&gt;_Weaks - 1} weak refs] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses &gt; 1) &amp;&amp; (_Rep-&gt;_Weaks == 2)\"  >weak_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong refs, {_Rep-&gt;_Weaks - 1} weak ref] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses &gt; 1) &amp;&amp; (_Rep-&gt;_Weaks &gt; 2)\">weak_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong refs, {_Rep-&gt;_Weaks - 1} weak refs] [{*_Rep}]</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses &gt; 0)\" Name=\"[ptr]\">_Ptr</Item>\r\n          <Item Condition=\"_Rep != 0\" Name=\"[control block]\">*_Rep</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::weak_ptr&lt;*&gt;\">\r\n      <DisplayString Condition=\"_Rep == 0\">empty</DisplayString>\r\n      <DisplayString IncludeView=\"ptr\" Condition=\"_Ptr == 0\">nullptr</DisplayString>\r\n      <DisplayString IncludeView=\"ptr\" Condition=\"_Ptr != 0\">{*_Ptr}</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses == 0)   &amp;&amp; (_Rep-&gt;_Weaks == 1)\"  >expired [{_Rep-&gt;_Weaks} weak ref] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses == 0)   &amp;&amp; (_Rep-&gt;_Weaks &gt; 1)\">expired [{_Rep-&gt;_Weaks} weak refs] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses == 1)   &amp;&amp; (_Rep-&gt;_Weaks == 2)\"  >weak_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong ref, {_Rep-&gt;_Weaks - 1} weak ref] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses == 1)   &amp;&amp; (_Rep-&gt;_Weaks &gt; 2)\">weak_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong ref, {_Rep-&gt;_Weaks - 1} weak refs] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses &gt; 1) &amp;&amp; (_Rep-&gt;_Weaks == 2)\"  >weak_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong refs, {_Rep-&gt;_Weaks - 1} weak ref] [{*_Rep}]</DisplayString>\r\n      <DisplayString Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses &gt; 1) &amp;&amp; (_Rep-&gt;_Weaks &gt; 2)\">weak_ptr {*this,view(ptr)} [{_Rep-&gt;_Uses} strong refs, {_Rep-&gt;_Weaks - 1} weak refs] [{*_Rep}]</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"(_Rep != 0) &amp;&amp; (_Rep-&gt;_Uses &gt; 0)\" Name=\"[ptr]\">_Ptr</Item>\r\n          <Item Condition=\"_Rep != 0\" Name=\"[control block]\">*_Rep</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::reference_wrapper&lt;*&gt;\">\r\n      <DisplayString>{*_Ptr}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[ptr]\">_Ptr</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- std::compare_three_way, std::ranges::less and similar -->\r\n  <Type Name=\"std::ranges::equal_to\"><DisplayString>ranges::equal_to</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::ranges::not_equal_to\"><DisplayString>ranges::not_equal_to</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::ranges::greater\"><DisplayString>ranges::greater</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::ranges::less\"><DisplayString>ranges::less</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::ranges::greater_equal\"><DisplayString>ranges::greater_equal</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::ranges::less_equal\"><DisplayString>ranges::less_equal</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::compare_three_way\"><DisplayString>compare_three_way</DisplayString><Expand/></Type>\r\n\r\n  <!-- std::less<> and similar -->\r\n  <Type Name=\"std::plus&lt;void&gt;\"><DisplayString>plus&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::minus&lt;void&gt;\"><DisplayString>minus&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::multiplies&lt;void&gt;\"><DisplayString>multiplies&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::divides&lt;void&gt;\"><DisplayString>divides&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::modulus&lt;void&gt;\"><DisplayString>modulus&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::negate&lt;void&gt;\"><DisplayString>negate&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::equal_to&lt;void&gt;\"><DisplayString>equal_to&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::not_equal_to&lt;void&gt;\"><DisplayString>not_equal_to&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::greater&lt;void&gt;\"><DisplayString>greater&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::less&lt;void&gt;\"><DisplayString>less&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::greater_equal&lt;void&gt;\"><DisplayString>greater_equal&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::less_equal&lt;void&gt;\"><DisplayString>less_equal&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::logical_and&lt;void&gt;\"><DisplayString>logical_and&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::logical_or&lt;void&gt;\"><DisplayString>logical_or&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::logical_not&lt;void&gt;\"><DisplayString>logical_not&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::bit_and&lt;void&gt;\"><DisplayString>bit_and&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::bit_or&lt;void&gt;\"><DisplayString>bit_or&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::bit_xor&lt;void&gt;\"><DisplayString>bit_xor&lt;&gt;</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::bit_not&lt;void&gt;\"><DisplayString>bit_not&lt;&gt;</DisplayString><Expand/></Type>\r\n\r\n  <!-- std::less<T> and similar -->\r\n  <Type Name=\"std::plus&lt;*&gt;\"><DisplayString>plus</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::minus&lt;*&gt;\"><DisplayString>minus</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::multiplies&lt;*&gt;\"><DisplayString>multiplies</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::divides&lt;*&gt;\"><DisplayString>divides</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::modulus&lt;*&gt;\"><DisplayString>modulus</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::negate&lt;*&gt;\"><DisplayString>negate</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::equal_to&lt;*&gt;\"><DisplayString>equal_to</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::not_equal_to&lt;*&gt;\"><DisplayString>not_equal_to</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::greater&lt;*&gt;\"><DisplayString>greater</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::less&lt;*&gt;\"><DisplayString>less</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::greater_equal&lt;*&gt;\"><DisplayString>greater_equal</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::less_equal&lt;*&gt;\"><DisplayString>less_equal</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::logical_and&lt;*&gt;\"><DisplayString>logical_and</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::logical_or&lt;*&gt;\"><DisplayString>logical_or</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::logical_not&lt;*&gt;\"><DisplayString>logical_not</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::bit_and&lt;*&gt;\"><DisplayString>bit_and</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::bit_or&lt;*&gt;\"><DisplayString>bit_or</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::bit_xor&lt;*&gt;\"><DisplayString>bit_xor</DisplayString><Expand/></Type>\r\n  <Type Name=\"std::bit_not&lt;*&gt;\"><DisplayString>bit_not</DisplayString><Expand/></Type>\r\n\r\n\r\n  <Type Name=\"std::unary_negate&lt;*&gt;\">\r\n      <DisplayString>not1({_Functor})</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[pred]\">_Functor</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::binary_negate&lt;*&gt;\">\r\n      <DisplayString>not2({_Functor})</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[pred]\">_Functor</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::_Ph&lt;*&gt;\">\r\n      <DisplayString>_{$T1,d}</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::_Binder&lt;*&gt;\">\r\n      <DisplayString>bind({_Mypair}, {_Mypair._Myval2,view(noparens)})</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[f]\">_Mypair</Item>\r\n          <Item Name=\"[bound_args]\">_Mypair._Myval2</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::_Front_binder&lt;*&gt;\">\r\n      <DisplayString>bind_front({_Mypair}, {_Mypair._Myval2,view(noparens)})</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[f]\">_Mypair</Item>\r\n          <Item Name=\"[bound_args]\">_Mypair._Myval2</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::_Back_binder&lt;*&gt;\">\r\n    <DisplayString>bind_back({_Mypair}, {_Mypair._Myval2,view(noparens)})</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[f]\">_Mypair</Item>\r\n      <Item Name=\"[bound_args]\">_Mypair._Myval2</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::_Mem_fn&lt;*&gt;\">\r\n      <DisplayString>mem_fn({_Pm})</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::_Func_impl&lt;*&gt;\">\r\n      <DisplayString>{_Mypair._Myval2}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[functor]\">_Mypair._Myval2</Item>\r\n          <Item Name=\"[allocator]\">_Mypair</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::_Func_impl_no_alloc&lt;*&gt;\">\r\n      <DisplayString>{_Callee}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[functor]\">_Callee</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::function&lt;*&gt;\">\r\n      <DisplayString Condition=\"_Mystorage._Ptrs[_EEN_IMPL] == 0\">empty</DisplayString>\r\n      <DisplayString Condition=\"_Mystorage._Ptrs[_EEN_IMPL] != 0\">{*_Mystorage._Ptrs[_EEN_IMPL]}</DisplayString>\r\n      <Expand>\r\n          <ExpandedItem Condition=\"_Mystorage._Ptrs[_EEN_IMPL] != 0\">*_Mystorage._Ptrs[_EEN_IMPL]</ExpandedItem>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::hash&lt;*&gt;\">\r\n      <DisplayString>hash</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::chrono::duration&lt;*,std::ratio&lt;1,1000000000&gt; &gt;\">\r\n      <DisplayString Condition=\"_MyRep == 1\">{_MyRep} nanosecond</DisplayString>\r\n      <DisplayString>{_MyRep} nanoseconds</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::duration&lt;*,std::ratio&lt;1,1000000&gt; &gt;\">\r\n      <DisplayString Condition=\"_MyRep == 1\">{_MyRep} microsecond</DisplayString>\r\n      <DisplayString>{_MyRep} microseconds</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::duration&lt;*,std::ratio&lt;1,1000&gt; &gt;\">\r\n      <DisplayString Condition=\"_MyRep == 1\">{_MyRep} millisecond</DisplayString>\r\n      <DisplayString>{_MyRep} milliseconds</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::duration&lt;*,std::ratio&lt;1,1&gt; &gt;\">\r\n      <DisplayString Condition=\"_MyRep == 1\">{_MyRep} second</DisplayString>\r\n      <DisplayString>{_MyRep} seconds</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::duration&lt;*,std::ratio&lt;60,1&gt; &gt;\">\r\n      <DisplayString Condition=\"_MyRep == 1\">{_MyRep} minute</DisplayString>\r\n      <DisplayString>{_MyRep} minutes</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::duration&lt;*,std::ratio&lt;3600,1&gt; &gt;\">\r\n      <DisplayString Condition=\"_MyRep == 1\">{_MyRep} hour</DisplayString>\r\n      <DisplayString>{_MyRep} hours</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::duration&lt;*,std::ratio&lt;86400,1&gt; &gt;\">\r\n      <DisplayString Condition=\"_MyRep == 1\">{_MyRep} day</DisplayString>\r\n      <DisplayString>{_MyRep} days</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::duration&lt;*,std::ratio&lt;604800,1&gt; &gt;\">\r\n      <DisplayString Condition=\"_MyRep == 1\">{_MyRep} week</DisplayString>\r\n      <DisplayString>{_MyRep} weeks</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::duration&lt;*,std::ratio&lt;2629746,1&gt; &gt;\">\r\n      <DisplayString Condition=\"_MyRep == 1\">{_MyRep} month</DisplayString>\r\n      <DisplayString>{_MyRep} months</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::duration&lt;*,std::ratio&lt;31556952,1&gt; &gt;\">\r\n      <DisplayString Condition=\"_MyRep == 1\">{_MyRep} year</DisplayString>\r\n      <DisplayString>{_MyRep} years</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::day\">\r\n      <DisplayString Condition=\"_Day % 10 == 1 &amp;&amp; _Day % 100 != 11\">{(int)_Day}st</DisplayString>\r\n      <DisplayString Condition=\"_Day % 10 == 2 &amp;&amp; _Day % 100 != 12\">{(int)_Day}nd</DisplayString>\r\n      <DisplayString Condition=\"_Day % 10 == 3 &amp;&amp; _Day % 100 != 13\">{(int)_Day}rd</DisplayString>\r\n      <DisplayString>{(int)_Day}th</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::month\">\r\n      <DisplayString Condition=\"_Month == 1\">January</DisplayString>\r\n      <DisplayString Condition=\"_Month == 2\">February</DisplayString>\r\n      <DisplayString Condition=\"_Month == 3\">March</DisplayString>\r\n      <DisplayString Condition=\"_Month == 4\">April</DisplayString>\r\n      <DisplayString Condition=\"_Month == 5\">May</DisplayString>\r\n      <DisplayString Condition=\"_Month == 6\">June</DisplayString>\r\n      <DisplayString Condition=\"_Month == 7\">July</DisplayString>\r\n      <DisplayString Condition=\"_Month == 8\">August</DisplayString>\r\n      <DisplayString Condition=\"_Month == 9\">September</DisplayString>\r\n      <DisplayString Condition=\"_Month == 10\">October</DisplayString>\r\n      <DisplayString Condition=\"_Month == 11\">November</DisplayString>\r\n      <DisplayString Condition=\"_Month == 12\">December</DisplayString>\r\n      <DisplayString>{_Month}</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::year\">\r\n      <DisplayString>{_Year}</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::weekday\">\r\n      <DisplayString Condition=\"_Weekday == 0\">Sunday</DisplayString>\r\n      <DisplayString Condition=\"_Weekday == 1\">Monday</DisplayString>\r\n      <DisplayString Condition=\"_Weekday == 2\">Tuesday</DisplayString>\r\n      <DisplayString Condition=\"_Weekday == 3\">Wednesday</DisplayString>\r\n      <DisplayString Condition=\"_Weekday == 4\">Thursday</DisplayString>\r\n      <DisplayString Condition=\"_Weekday == 5\">Friday</DisplayString>\r\n      <DisplayString Condition=\"_Weekday == 6\">Saturday</DisplayString>\r\n      <DisplayString>{_Weekday}</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::weekday_indexed\">\r\n      <DisplayString Condition=\"_Index == 1\">{(int)_Index}st {_Weekday}</DisplayString>\r\n      <DisplayString Condition=\"_Index == 2\">{(int)_Index}nd {_Weekday}</DisplayString>\r\n      <DisplayString Condition=\"_Index == 3\">{(int)_Index}rd {_Weekday}</DisplayString>\r\n      <DisplayString Condition=\"_Index == 4 || _Index == 5\">{(int)_Index}th {_Weekday}</DisplayString>\r\n      <DisplayString>{(int)_Index}, {_Weekday}</DisplayString>\r\n      <Expand>\r\n        <Item Name=\"[weekday]\">_Weekday</Item>\r\n        <Item Name=\"[index]\">(int)_Index</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::weekday_last\">\r\n      <DisplayString>Last {_Weekday}</DisplayString>\r\n      <Expand>\r\n        <Item Name=\"[weekday]\">_Weekday</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::month_day\">\r\n      <DisplayString>{_Month} {_Day}</DisplayString>\r\n        <Expand>\r\n          <Item Name=\"[month]\">_Month</Item>\r\n          <Item Name=\"[day]\">_Day</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::month_day_last\">\r\n      <DisplayString>Last day of {_Month}</DisplayString>\r\n      <Expand>\r\n        <Item Name=\"[month]\">_Month</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::month_weekday\">\r\n      <DisplayString>{_Weekday_index} of {_Month}</DisplayString>\r\n        <Expand>\r\n          <Item Name=\"[month]\">_Month</Item>\r\n          <Item Name=\"[weekday_indexed]\">_Weekday_index</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::month_weekday_last\">\r\n      <DisplayString>Last {_Weekday_last._Weekday} of {_Month}</DisplayString>\r\n      <Expand>\r\n        <Item Name=\"[month]\">_Month</Item>\r\n        <Item Name=\"[weekday]\">_Weekday_last._Weekday</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::year_month\">\r\n      <DisplayString>{_Year} {_Month}</DisplayString>\r\n        <Expand>\r\n          <Item Name=\"[year]\">_Year</Item>\r\n          <Item Name=\"[month]\">_Month</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::year_month_day\">\r\n      <DisplayString>{_Year} {_Month} {_Day}</DisplayString>\r\n        <Expand>\r\n          <Item Name=\"[year]\">_Year</Item>\r\n          <Item Name=\"[month]\">_Month</Item>\r\n          <Item Name=\"[day]\">_Day</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::year_month_day_last\">\r\n      <DisplayString>{_Month_day_last}, {_Year}</DisplayString>\r\n      <Expand>\r\n        <Item Name=\"[year]\">_Year</Item>\r\n        <Item Name=\"[month]\">_Month_day_last._Month</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::year_month_weekday\">\r\n      <DisplayString>{_Weekday_index} of {_Month}, {_Year}</DisplayString>\r\n        <Expand>\r\n          <Item Name=\"[year]\">_Year</Item>\r\n          <Item Name=\"[month]\">_Month</Item>\r\n          <Item Name=\"[weekday_indexed]\">_Weekday_index</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::year_month_weekday_last\">\r\n      <DisplayString>{_Weekday_last} of {_Month}, {_Year}</DisplayString>\r\n      <Expand>\r\n        <Item Name=\"[year]\">_Year</Item>\r\n        <Item Name=\"[month]\">_Month</Item>\r\n        <Item Name=\"[weekday]\">_Weekday_last._Weekday</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::hh_mm_ss&lt;*&gt;\">\r\n      <DisplayString Condition=\"_Is_neg\">-{_Hours._MyRep}h {_Mins._MyRep}m {_Secs._MyRep}s {_Sub_secs._MyRep}ss</DisplayString>\r\n      <DisplayString>{_Hours._MyRep}h {_Mins._MyRep}m {_Secs._MyRep}s {_Sub_secs._MyRep}ss</DisplayString>\r\n      <Expand>\r\n        <Item Name=\"[is_negative]\">_Is_neg</Item>\r\n        <Item Name=\"[hours]\">_Hours</Item>\r\n        <Item Name=\"[minutes]\">_Mins</Item>\r\n        <Item Name=\"[seconds]\">_Secs</Item>\r\n        <Item Name=\"[subseconds]\">_Sub_secs</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!--\r\n   * VC 2015+ ABI basic_string\r\n   * Notes:\r\n   * Hard coding _BUF_SIZE for clang-cl compatibility; clang-cl as of 7.0.1 does not emit S_CONSTANT to get _BUF_SIZE\r\n   *\r\n   * The `na` format specifier means \"no address\". For more info, see:\r\n   * https://learn.microsoft.com/visualstudio/debugger/format-specifiers-in-cpp\r\n   -->\r\n  <Type Name=\"std::basic_string&lt;*&gt;\">\r\n    <Intrinsic Name=\"size\" Expression=\"_Mypair._Myval2._Mysize\" />\r\n    <Intrinsic Name=\"capacity\" Expression=\"_Mypair._Myval2._Myres\" />\r\n    <!-- _BUF_SIZE = 16 / sizeof($T1) &lt; 1 ? 1 : 16 / sizeof($T1) -->\r\n    <Intrinsic Name=\"bufSize\" Expression=\"16 / sizeof($T1) &lt; 1 ? 1 : 16 / sizeof($T1)\" />\r\n    <Intrinsic Name=\"isShortString\" Expression=\"capacity() &lt; bufSize()\" />\r\n    <Intrinsic Name=\"isLongString\" Expression=\"capacity() &gt;= bufSize()\" />\r\n    <Intrinsic Name=\"c_str\" Expression=\"const_cast&lt;const $T1*&gt;(isShortString() ? _Mypair._Myval2._Bx._Buf : _Mypair._Myval2._Bx._Ptr)\" />\r\n    <DisplayString Condition=\"isShortString()\">{_Mypair._Myval2._Bx._Buf,na}</DisplayString>\r\n    <DisplayString Condition=\"isLongString()\">{_Mypair._Myval2._Bx._Ptr,na}</DisplayString>\r\n    <StringView Condition=\"isShortString()\">_Mypair._Myval2._Bx._Buf,na</StringView>\r\n    <StringView Condition=\"isLongString()\">_Mypair._Myval2._Bx._Ptr,na</StringView>\r\n    <Expand>\r\n      <Item Name=\"[size]\" ExcludeView=\"simple\">size()</Item>\r\n      <Item Name=\"[capacity]\" ExcludeView=\"simple\">capacity()</Item>\r\n      <Item Name=\"[allocator]\" ExcludeView=\"simple\">_Mypair</Item>\r\n      <ArrayItems>\r\n        <Size>_Mypair._Myval2._Mysize</Size>\r\n        <ValuePointer Condition=\"isShortString()\">_Mypair._Myval2._Bx._Buf</ValuePointer>\r\n        <ValuePointer Condition=\"isLongString()\">_Mypair._Myval2._Bx._Ptr</ValuePointer>\r\n      </ArrayItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::_String_iterator&lt;*&gt;\">\r\n      <AlternativeType Name=\"std::_String_const_iterator&lt;*&gt;\" />\r\n      <SmartPointer Usage=\"Indexable\">_Ptr,na</SmartPointer>\r\n      <Expand>\r\n          <Item Name=\"[ptr]\">_Ptr</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::basic_string_view&lt;*,*&gt;\">\r\n    <Intrinsic Name=\"size\" Expression=\"_Mysize\" />\r\n    <Intrinsic Name=\"data\" Expression=\"_Mydata\" />\r\n    <DisplayString>{_Mydata,[_Mysize]na}</DisplayString>\r\n    <StringView>_Mydata,[_Mysize]na</StringView>\r\n    <Expand>\r\n      <Item Name=\"[size]\" ExcludeView=\"simple\">size()</Item>\r\n      <ArrayItems>\r\n        <Size>size()</Size>\r\n        <ValuePointer>data()</ValuePointer>\r\n      </ArrayItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- This is for _ITERATOR_DEBUG_LEVEL == 0 and must have lower priority. -->\r\n  <Type Name=\"std::_String_view_iterator&lt;*&gt;\" Priority=\"MediumLow\">\r\n    <SmartPointer Usage=\"Indexable\">_Myptr,na</SmartPointer>\r\n    <Expand>\r\n      <Item Name=\"[ptr]\">_Myptr</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- This is for _ITERATOR_DEBUG_LEVEL != 0 and must have higher priority. -->\r\n  <Type Name=\"std::_String_view_iterator&lt;*&gt;\" Priority=\"Medium\">\r\n    <DisplayString>{_Mydata + _Myoff,[_Mysize - _Myoff]na}</DisplayString>\r\n    <StringView>_Mydata + _Myoff,[_Mysize - _Myoff]na</StringView>\r\n    <Expand>\r\n      <Item Name=\"[ptr]\">_Mydata + _Myoff</Item>\r\n      <Item Name=\"[offset]\">_Myoff</Item>\r\n      <Item Name=\"[string_view]\">_Mydata,[_Mysize]na</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::array&lt;*,*&gt;\">\r\n      <DisplayString>{{ size={$T2} }}</DisplayString>\r\n      <Expand>\r\n          <ArrayItems>\r\n              <Size>$T2</Size>\r\n              <ValuePointer>_Elems</ValuePointer>\r\n          </ArrayItems>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- This is for _ITERATOR_DEBUG_LEVEL == 0 and must have lower priority. -->\r\n  <Type Name=\"std::_Array_iterator&lt;*&gt;\" Priority=\"MediumLow\">\r\n      <AlternativeType Name=\"std::_Array_const_iterator&lt;*&gt;\" />\r\n      <SmartPointer Usage=\"Indexable\">_Ptr,na</SmartPointer>\r\n      <DisplayString>{*_Ptr}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[ptr]\">_Ptr</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- This is for _ITERATOR_DEBUG_LEVEL != 0 and must have higher priority. -->\r\n  <Type Name=\"std::_Array_iterator&lt;*&gt;\" Priority=\"Medium\">\r\n      <AlternativeType Name=\"std::_Array_const_iterator&lt;*&gt;\" />\r\n      <SmartPointer Usage=\"Indexable\">_Ptr + _Idx</SmartPointer>\r\n      <DisplayString Condition=\"_Idx != _EEN_SIZE\">{_Ptr[_Idx]}</DisplayString>\r\n      <DisplayString Condition=\"_Idx == _EEN_SIZE\">end</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Idx != _EEN_SIZE\" Name=\"[ptr]\">_Ptr + _Idx</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::deque&lt;*&gt;\">\r\n      <Intrinsic Name=\"size\" Expression=\"_Mypair._Myval2._Mysize\" />\r\n      <DisplayString>{{ size={size()} }}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[allocator]\" ExcludeView=\"simple\">_Mypair</Item>\r\n          <IndexListItems>\r\n              <Size>size()</Size>\r\n              <ValueNode>_Mypair._Myval2._Map[(($i + _Mypair._Myval2._Myoff) / _EEN_DS) % _Mypair._Myval2._Mapsize][($i + _Mypair._Myval2._Myoff) % _EEN_DS]</ValueNode>\r\n          </IndexListItems>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::_Deque_iterator&lt;*&gt;\">\r\n      <AlternativeType Name=\"std::_Deque_const_iterator&lt;*&gt;\" />\r\n      <DisplayString Condition=\"_Myoff &lt; ((_Mydeque_t *)_Myproxy-&gt;_Mycont)-&gt;_Myoff + ((_Mydeque_t *)_Myproxy-&gt;_Mycont)-&gt;_Mysize\">{((_Mydeque_t *)_Myproxy-&gt;_Mycont)-&gt;_Map[(_Myoff / _EEN_DS) % ((_Mydeque_t *)_Myproxy-&gt;_Mycont)-&gt;_Mapsize][_Myoff % _EEN_DS]}</DisplayString>\r\n      <DisplayString Condition=\"_Myoff &gt;= ((_Mydeque_t *)_Myproxy-&gt;_Mycont)-&gt;_Myoff + ((_Mydeque_t *)_Myproxy-&gt;_Mycont)-&gt;_Mysize\">end</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Myoff &lt; ((_Mydeque_t *)_Myproxy-&gt;_Mycont)-&gt;_Myoff + ((_Mydeque_t *)_Myproxy-&gt;_Mycont)-&gt;_Mysize\" Name=\"[index]\">_Myoff - ((_Mydeque_t *)_Myproxy-&gt;_Mycont)-&gt;_Myoff</Item>\r\n          <Item Condition=\"_Myoff &lt; ((_Mydeque_t *)_Myproxy-&gt;_Mycont)-&gt;_Myoff + ((_Mydeque_t *)_Myproxy-&gt;_Mycont)-&gt;_Mysize\" Name=\"[ptr]\">&amp;((_Mydeque_t *)_Myproxy-&gt;_Mycont)-&gt;_Map[(_Myoff / _EEN_DS) % ((_Mydeque_t *)_Myproxy-&gt;_Mycont)-&gt;_Mapsize][_Myoff % _EEN_DS]</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::forward_list&lt;*&gt;\">\r\n      <DisplayString Condition=\"_Mypair._Myval2._Myhead == 0\">empty</DisplayString>\r\n      <DisplayString Condition=\"_Mypair._Myval2._Myhead != 0\">non-empty</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[allocator]\" ExcludeView=\"simple\">_Mypair</Item>\r\n          <LinkedListItems>\r\n              <HeadPointer>_Mypair._Myval2._Myhead</HeadPointer>\r\n              <NextPointer>_Next</NextPointer>\r\n              <ValueNode>_Myval</ValueNode>\r\n          </LinkedListItems>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::_Flist_iterator&lt;*&gt;\">\r\n      <AlternativeType Name=\"std::_Flist_const_iterator&lt;*&gt;\" />\r\n      <SmartPointer Usage=\"Minimal\">&amp;_Ptr-&gt;_Myval,na</SmartPointer>\r\n      <DisplayString Condition=\"_Ptr == 0\">end</DisplayString>\r\n      <DisplayString Condition=\"_Ptr != 0\">{**this}</DisplayString>\r\n  </Type>\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::list&lt;*&gt;\">\r\n      <DisplayString>{{ size={_Mypair._Myval2._Mysize} }}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[allocator]\" ExcludeView=\"simple\">_Mypair</Item>\r\n          <LinkedListItems>\r\n              <Size>_Mypair._Myval2._Mysize</Size>\r\n              <HeadPointer>_Mypair._Myval2._Myhead-&gt;_Next</HeadPointer>\r\n              <NextPointer>_Next</NextPointer>\r\n              <ValueNode>_Myval</ValueNode>\r\n          </LinkedListItems>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::_List_iterator&lt;*&gt;\">\r\n      <AlternativeType Name=\"std::_List_const_iterator&lt;*&gt;\" />\r\n      <SmartPointer Usage=\"Minimal\">&amp;_Ptr-&gt;_Myval,na</SmartPointer>\r\n  </Type>\r\n\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::vector&lt;bool,*&gt;\">\r\n    <Intrinsic Name=\"size\" Expression=\"_Mysize\" />\r\n    <Intrinsic Name=\"capacity\" Expression=\"_Myvec.capacity() * _EEN_VBITS\" />\r\n      <DisplayString>{{ size={size()} }}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[capacity]\" ExcludeView=\"simple\">capacity()</Item>\r\n          <Item Name=\"[allocator]\" ExcludeView=\"simple\">_Myvec._Mypair</Item>\r\n          <IndexListItems>\r\n              <Size>_Mysize</Size>\r\n              <ValueNode>(bool)((_Myvec._Mypair._Myval2._Myfirst[$i / _EEN_VBITS] &gt;&gt; ($i % _EEN_VBITS)) &amp; 1)</ValueNode>\r\n          </IndexListItems>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::_Vb_reference&lt;*&gt;\">\r\n      <AlternativeType Name=\"std::_Vb_iterator&lt;*&gt;\" />\r\n      <AlternativeType Name=\"std::_Vb_const_iterator&lt;*&gt;\" />\r\n      <DisplayString>{(bool)((*_Myptr &gt;&gt; _Myoff) &amp; 1)}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[ptr]\">_Myptr</Item>\r\n          <Item Name=\"[offset]\">_Myoff</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::vector&lt;*&gt;\">\r\n    <Intrinsic Name=\"size\" Expression=\"(size_t)(_Mypair._Myval2._Mylast - _Mypair._Myval2._Myfirst)\" />\r\n    <Intrinsic Name=\"capacity\" Expression=\"(size_t)(_Mypair._Myval2._Myend - _Mypair._Myval2._Myfirst)\" />\r\n    <DisplayString>{{ size={size()} }}</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[capacity]\" ExcludeView=\"simple\">capacity()</Item>\r\n      <Item Name=\"[allocator]\" ExcludeView=\"simple\">_Mypair</Item>\r\n      <ArrayItems>\r\n        <Size>size()</Size>\r\n        <ValuePointer>_Mypair._Myval2._Myfirst</ValuePointer>\r\n        </ArrayItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::vector&lt;wchar_t,*&gt;\">\r\n    <AlternativeType Name=\"std::vector&lt;char,*&gt;\" />\r\n    <AlternativeType Name=\"std::vector&lt;char8_t,*&gt;\" />\r\n    <AlternativeType Name=\"std::vector&lt;char16_t,*&gt;\" />\r\n    <AlternativeType Name=\"std::vector&lt;char32_t,*&gt;\" />\r\n    <Intrinsic Name=\"data\" Expression=\"_Mypair._Myval2._Myfirst\" />\r\n    <Intrinsic Name=\"size\" Expression=\"(size_t)(_Mypair._Myval2._Mylast - _Mypair._Myval2._Myfirst)\" />\r\n    <Intrinsic Name=\"capacity\" Expression=\"(size_t)(_Mypair._Myval2._Myend - _Mypair._Myval2._Myfirst)\" />\r\n    <SmartPointer Usage=\"Indexable\" DefaultExpansion=\"false\">data()</SmartPointer>\r\n    <DisplayString Condition=\"size() > 0\">{data(),[size()]na}</DisplayString>\r\n    <DisplayString Condition=\"size() == 0\">{{empty}}</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[size]\" ExcludeView=\"simple\">size()</Item>\r\n      <Item Name=\"[capacity]\" ExcludeView=\"simple\">capacity()</Item>\r\n      <Item Name=\"[allocator]\" ExcludeView=\"simple\">_Mypair</Item>\r\n      <ArrayItems>\r\n        <Size>size()</Size>\r\n        <ValuePointer>data()</ValuePointer>\r\n      </ArrayItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- This is for _ITERATOR_DEBUG_LEVEL == 0 and must have lower priority. -->\r\n  <Type Name=\"std::_Vector_iterator&lt;*&gt;\" Priority=\"MediumLow\">\r\n      <AlternativeType Name=\"std::_Vector_const_iterator&lt;*&gt;\" />\r\n      <SmartPointer Usage=\"Indexable\">_Ptr,na</SmartPointer>\r\n      <DisplayString>{*_Ptr}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[ptr]\">_Ptr</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- This is for _ITERATOR_DEBUG_LEVEL != 0 and must have higher priority. -->\r\n  <Type Name=\"std::_Vector_iterator&lt;*&gt;\" Priority=\"Medium\">\r\n      <AlternativeType Name=\"std::_Vector_const_iterator&lt;*&gt;\" />\r\n      <Intrinsic Name=\"my_cont_end\" Expression=\"((_Myvec_t *)_Myproxy-&gt;_Mycont)-&gt;_Mylast\" />\r\n      <SmartPointer Usage=\"Indexable\">_Ptr,na</SmartPointer>\r\n      <DisplayString Condition=\"_Ptr == my_cont_end()\">end</DisplayString>\r\n      <DisplayString Condition=\"_Ptr != my_cont_end()\">{*_Ptr}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[ptr]\">_Ptr</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::map&lt;*&gt;\" Priority=\"Medium\">\r\n    <AlternativeType Name=\"std::multimap&lt;*&gt;\" />\r\n    <AlternativeType Name=\"std::set&lt;*&gt;\" />\r\n    <AlternativeType Name=\"std::multiset&lt;*&gt;\" />\r\n    <DisplayString>{{ size={_Mypair._Myval2._Myval2._Mysize} }}</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[comparator]\" ExcludeView=\"simple\">_Mypair</Item>\r\n      <Item Name=\"[allocator]\" ExcludeView=\"simple\">_Mypair._Myval2</Item>\r\n      <TreeItems>\r\n        <Size>_Mypair._Myval2._Myval2._Mysize</Size>\r\n        <HeadPointer>_Mypair._Myval2._Myval2._Myhead-&gt;_Parent</HeadPointer>\r\n        <LeftPointer>_Left</LeftPointer>\r\n        <RightPointer>_Right</RightPointer>\r\n        <ValueNode Condition=\"_Isnil == 0\">_Myval</ValueNode>\r\n      </TreeItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- Starting in VS 2015, Update 2, we added a new visualization for std::map that shows the key in the name column,\r\n       and the value in the value column.  If desired, the \"ShowElementsByIndex\" view can be used to fall back to the prior\r\n       behavior and show the index in the name column and the key-value pair in the value column. -->\r\n  <Type Name=\"std::map&lt;*&gt;\" ExcludeView=\"ShowElementsByIndex\" Priority=\"MediumHigh\">\r\n    <AlternativeType Name=\"std::multimap&lt;*&gt;\" />\r\n    <DisplayString>{{ size={_Mypair._Myval2._Myval2._Mysize} }}</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[comparator]\" ExcludeView=\"simple\">_Mypair</Item>\r\n      <Item Name=\"[allocator]\" ExcludeView=\"simple\">_Mypair._Myval2</Item>\r\n      <TreeItems>\r\n        <Size>_Mypair._Myval2._Myval2._Mysize</Size>\r\n        <HeadPointer>_Mypair._Myval2._Myval2._Myhead-&gt;_Parent</HeadPointer>\r\n        <LeftPointer>_Left</LeftPointer>\r\n        <RightPointer>_Right</RightPointer>\r\n        <ValueNode Condition=\"_Isnil == 0\" Name=\"[{_Myval.first}]\">_Myval,view(MapHelper)</ValueNode>\r\n      </TreeItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::pair&lt;*, *&gt;\" IncludeView=\"MapHelper\">\r\n    <DisplayString>{second}</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::_Tree_iterator&lt;*&gt;\">\r\n      <AlternativeType Name=\"std::_Tree_const_iterator&lt;*&gt;\" />\r\n      <SmartPointer Usage=\"Minimal\">_Ptr-&gt;_Isnil ? nullptr : &amp;_Ptr-&gt;_Myval</SmartPointer>\r\n      <DisplayString Condition=\"_Ptr-&gt;_Isnil == 0\">{_Ptr-&gt;_Myval}</DisplayString>\r\n      <DisplayString Condition=\"_Ptr-&gt;_Isnil != 0\">end</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Ptr-&gt;_Isnil == 0\" Name=\"[ptr]\">&amp;_Ptr-&gt;_Myval</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <!-- VC 2015 - must have higher priority -->\r\n  <Type Name=\"stdext::hash_map&lt;*&gt;\" Priority=\"Medium\">\r\n      <AlternativeType Name=\"stdext::hash_multimap&lt;*&gt;\" />\r\n      <AlternativeType Name=\"stdext::hash_set&lt;*&gt;\" />\r\n      <AlternativeType Name=\"stdext::hash_multiset&lt;*&gt;\" />\r\n      <DisplayString>{_List}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[bucket_count]\" IncludeView=\"detailed\">_Maxidx</Item>\r\n          <Item Name=\"[load_factor]\" IncludeView=\"detailed\">((float)_List._Mypair._Myval2._Mysize) / ((float)_Maxidx)</Item>\r\n          <Item Name=\"[max_load_factor]\" IncludeView=\"detailed\">_Traitsobj._Max_buckets</Item>\r\n          <Item Name=\"[allocator]\" ExcludeView=\"simple\">_List._Mypair</Item>\r\n          <ExpandedItem>_List,view(simple)</ExpandedItem>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- VC 2015 - must have higher priority -->\r\n  <Type Name=\"std::unordered_map&lt;*&gt;\" Priority=\"Medium\">\r\n      <AlternativeType Name=\"std::unordered_multimap&lt;*&gt;\" />\r\n      <AlternativeType Name=\"std::unordered_set&lt;*&gt;\" />\r\n      <AlternativeType Name=\"std::unordered_multiset&lt;*&gt;\" />\r\n      <DisplayString>{_List}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[bucket_count]\" IncludeView=\"detailed\">_Maxidx</Item>\r\n          <Item Name=\"[load_factor]\" IncludeView=\"detailed\">((float)_List._Mypair._Myval2._Mysize) / ((float)_Maxidx)</Item>\r\n          <Item Name=\"[max_load_factor]\" IncludeView=\"detailed\">_Traitsobj._Mypair._Myval2._Myval2</Item>\r\n          <Item Name=\"[hash_function]\" ExcludeView=\"simple\">_Traitsobj._Mypair</Item>\r\n          <Item Name=\"[key_eq]\" ExcludeView=\"simple\">_Traitsobj._Mypair._Myval2</Item>\r\n          <Item Name=\"[allocator]\" ExcludeView=\"simple\">_List._Mypair</Item>\r\n          <ExpandedItem>_List,view(simple)</ExpandedItem>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::unordered_map&lt;*&gt;\" Priority=\"MediumHigh\" ExcludeView=\"ShowElementsByIndex\">\r\n    <AlternativeType Name=\"std::unordered_multimap&lt;*&gt;\" />\r\n    <DisplayString>{_List}</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[bucket_count]\" IncludeView=\"detailed\">_Maxidx</Item>\r\n      <Item Name=\"[load_factor]\" IncludeView=\"detailed\">((float)_List._Mypair._Myval2._Mysize) / ((float)_Maxidx)</Item>\r\n      <Item Name=\"[max_load_factor]\" IncludeView=\"detailed\">_Traitsobj._Mypair._Myval2._Myval2</Item>\r\n      <Item Name=\"[hash_function]\" ExcludeView=\"simple\">_Traitsobj._Mypair</Item>\r\n      <Item Name=\"[key_eq]\" ExcludeView=\"simple\">_Traitsobj._Mypair._Myval2</Item>\r\n      <Item Name=\"[allocator]\" ExcludeView=\"simple\">_List._Mypair</Item>\r\n      <ExpandedItem>_List,view(MapHelper)</ExpandedItem>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- Alternate view of std::list for internal list contained within an std::unordered_map.-->\r\n  <Type Name=\"std::list&lt;std::pair&lt;*,*&gt;,*&gt;\" IncludeView=\"MapHelper\">\r\n    <DisplayString>Test</DisplayString>\r\n    <Expand>\r\n      <LinkedListItems>\r\n        <Size>_Mypair._Myval2._Mysize</Size>\r\n        <HeadPointer>_Mypair._Myval2._Myhead-&gt;_Next</HeadPointer>\r\n        <NextPointer>_Next</NextPointer>\r\n        <ValueNode Name=\"[{_Myval.first}]\">_Myval</ValueNode>\r\n      </LinkedListItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::queue&lt;*&gt;\">\r\n      <AlternativeType Name=\"std::stack&lt;*&gt;\" />\r\n      <DisplayString>{c}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"c\">c</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::priority_queue&lt;*&gt;\">\r\n      <DisplayString>{c}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"c [heap]\">c</Item>\r\n          <Item Name=\"comp\">comp</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <!-- This is for _ITERATOR_DEBUG_LEVEL == 0 and must have lower priority. -->\r\n  <Type Name=\"std::reverse_iterator&lt;std::_Array_iterator&lt;*&gt; &gt;\" Priority=\"MediumLow\">\r\n      <AlternativeType Name=\"std::reverse_iterator&lt;std::_Array_const_iterator&lt;*&gt; &gt;\" />\r\n      <SmartPointer Usage=\"Minimal\">current._Ptr - 1,na</SmartPointer>\r\n      <DisplayString>reverse_iterator {current._Ptr[-1]}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[ptr]\">current._Ptr - 1</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- This is for _ITERATOR_DEBUG_LEVEL != 0 and must have higher priority. -->\r\n  <Type Name=\"std::reverse_iterator&lt;std::_Array_iterator&lt;*&gt; &gt;\" Priority=\"Medium\">\r\n      <AlternativeType Name=\"std::reverse_iterator&lt;std::_Array_const_iterator&lt;*&gt; &gt;\" />\r\n      <SmartPointer Usage=\"Minimal\">current._Ptr + current._Idx - 1,na</SmartPointer>\r\n      <DisplayString Condition=\"current._Idx != 0\">reverse_iterator {current._Ptr[current._Idx - 1]}</DisplayString>\r\n      <DisplayString Condition=\"current._Idx == 0\">reverse_iterator rend</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"current._Idx != 0\" Name=\"[ptr]\">current._Ptr + current._Idx - 1</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::reverse_iterator&lt;std::_List_iterator&lt;*&gt; &gt;\">\r\n      <AlternativeType Name=\"std::reverse_iterator&lt;std::_List_const_iterator&lt;*&gt; &gt;\" />\r\n      <SmartPointer Usage=\"Minimal\">&amp;current._Ptr-&gt;_Prev-&gt;_Myval,na</SmartPointer>\r\n      <DisplayString>reverse_iterator {**this}</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::reverse_iterator&lt;std::_Vector_iterator&lt;*&gt; &gt;\">\r\n      <AlternativeType Name=\"std::reverse_iterator&lt;std::_Vector_const_iterator&lt;*&gt; &gt;\" />\r\n      <SmartPointer Usage=\"Minimal\">current._Ptr - 1,na</SmartPointer>\r\n      <DisplayString>reverse_iterator {**this}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[ptr]\">current._Ptr - 1</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::reverse_iterator&lt;*&gt;\" Priority=\"Medium\">\r\n      <DisplayString>reverse_iterator base() {current}</DisplayString>\r\n      <Expand>\r\n          <Synthetic Name=\"[NOTE]\"><DisplayString>NOTE: *ri is equivalent to *prev(ri.base())</DisplayString></Synthetic>\r\n          <Item Name=\"base()\">current</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- This \"partial specialization\" for raw pointers or iterators marked as <SmartPointer Usage=\"Indexable\">.\r\n       Must have higher priority than the \"primary template\" for arbitrary iterators. -->\r\n  <Type Name=\"std::reverse_iterator&lt;*&gt;\" Priority=\"MediumHigh\">\r\n      <SmartPointer Usage=\"Minimal\">current - 1</SmartPointer>\r\n      <DisplayString>reverse_iterator {current[-1]}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[ptr]\">current - 1</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::back_insert_iterator&lt;*&gt;\">\r\n      <DisplayString>back_insert_iterator into {container}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"container\">container</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::front_insert_iterator&lt;*&gt;\">\r\n      <DisplayString>front_insert_iterator into {container}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"container\">container</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::insert_iterator&lt;*&gt;\">\r\n      <DisplayString>insert_iterator into {container} at {iter}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"container\">container</Item>\r\n          <Item Name=\"iter\">iter</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::move_iterator&lt;*&gt;\">\r\n      <DisplayString>move_iterator {_Current}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[current]\">_Current</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::basic_const_iterator&lt;*&gt;\">\r\n      <DisplayString>basic_const_iterator {_Current}</DisplayString>\r\n      <Expand>\r\n        <Item Name=\"current\">_Current</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::complex&lt;*&gt;\">\r\n      <DisplayString Condition=\"(_Val[1] &lt; 0) &amp;&amp; (_Val[0] == 0)\">-i*{-_Val[1]}</DisplayString>\r\n      <DisplayString Condition=\"(_Val[1] &lt; 0) &amp;&amp; (_Val[0] != 0)\">{_Val[0]}-i*{-_Val[1]}</DisplayString>\r\n      <DisplayString Condition=\"_Val[1] == 0\">{_Val[0]}</DisplayString>\r\n      <DisplayString Condition=\"(_Val[1] &gt; 0) &amp;&amp; (_Val[0] == 0)\">i*{_Val[1]}</DisplayString>\r\n      <DisplayString Condition=\"(_Val[1] &gt; 0) &amp;&amp; (_Val[0] != 0)\">{_Val[0]}+i*{_Val[1]}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"real\">_Val[0]</Item>\r\n          <Item Name=\"imag\">_Val[1]</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::valarray&lt;*&gt;\">\r\n      <DisplayString>{{ size={_Mysize} }}</DisplayString>\r\n      <Expand>\r\n          <ArrayItems>\r\n              <Size>_Mysize</Size>\r\n              <ValuePointer>_Myptr</ValuePointer>\r\n          </ArrayItems>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::basic_stringbuf&lt;*,*,*&gt;\">\r\n      <Intrinsic Name=\"data\" Expression=\"((!(_Mystate &amp; _Constant) &amp;&amp; (*_IPnext) != 0)\r\n        ? (*_IPfirst)\r\n        : (!(_Mystate &amp; _Noread) &amp;&amp; (*_IGnext) != 0)\r\n          ? (*_IGfirst)\r\n          : 0)\" />\r\n      <Intrinsic Name=\"size\" Expression=\"((!(_Mystate &amp; _Constant) &amp;&amp; (*_IPnext) != 0)\r\n        ? ((_Seekhigh &lt; (*_IPnext) ? (*_IPnext) : _Seekhigh) - (*_IPfirst))\r\n        : (!(_Mystate &amp; _Noread) &amp;&amp; (*_IGnext) != 0)\r\n          ? ((*_IGnext + *_IGcount) - (*_IGfirst))\r\n          : 0)\" />\r\n      <DisplayString>{data(),[size()]}</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::basic_istringstream&lt;*,*,*&gt;\">\r\n      <DisplayString>{_Stringbuffer}</DisplayString>\r\n      <Expand>\r\n        <Item Name=\"stringbuf\">_Stringbuffer</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::basic_ostringstream&lt;*,*,*&gt;\">\r\n      <DisplayString>{_Stringbuffer}</DisplayString>\r\n      <Expand>\r\n        <Item Name=\"stringbuf\">_Stringbuffer</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::basic_stringstream&lt;*,*,*&gt;\">\r\n      <DisplayString>{_Stringbuffer}</DisplayString>\r\n      <Expand>\r\n        <Item Name=\"stringbuf\">_Stringbuffer</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::basic_regex&lt;*&gt;\">\r\n      <DisplayString Condition=\"_Rep == 0\">empty</DisplayString>\r\n      <DisplayString Condition=\"_Rep != 0\">{_Visualization}</DisplayString>\r\n      <StringView Condition=\"_Rep != 0\">_Visualization</StringView>\r\n      <Expand/>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::sub_match&lt;*&gt;\">\r\n      <DisplayString Condition=\"matched\">{first,[second - first]na}</DisplayString>\r\n      <DisplayString Condition=\"!matched\">false</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"matched\">matched</Item>\r\n          <Item Name=\"first\">first</Item>\r\n          <Item Name=\"second\">second</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::sub_match&lt;std::_String_const_iterator&lt;*&gt; &gt;\">\r\n      <AlternativeType Name=\"std::sub_match&lt;std::_String_iterator&lt;*&gt; &gt;\" />\r\n      <DisplayString Condition=\"matched\">{first._Ptr,[second._Ptr - first._Ptr]na}</DisplayString>\r\n      <DisplayString Condition=\"!matched\">false</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"matched\">matched</Item>\r\n          <Item Name=\"first\">first</Item>\r\n          <Item Name=\"second\">second</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::match_results&lt;*&gt;\">\r\n      <DisplayString Condition=\"!_Ready\">not ready</DisplayString>\r\n      <DisplayString Condition=\"_Ready\">{_Matches}</DisplayString>\r\n      <Expand>\r\n          <ExpandedItem Condition=\"_Ready\">_Matches,view(simple)</ExpandedItem>\r\n          <Item Condition=\"_Ready\" Name=\"[prefix]\">_Prefix</Item>\r\n          <Item Condition=\"_Ready\" Name=\"[suffix]\">_Suffix</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::regex_iterator&lt;*&gt;\">\r\n    <SmartPointer Usage=\"Minimal\">&amp;_MyVal</SmartPointer>\r\n    <DisplayString Condition=\"_MyRe == 0\">end</DisplayString>\r\n    <DisplayString Condition=\"_MyRe != 0\">{_MyVal}</DisplayString>\r\n    <Expand>\r\n      <Item Condition=\"_MyRe != 0\" Name=\"[begin]\">_Begin</Item>\r\n      <Item Condition=\"_MyRe != 0\" Name=\"[end]\">_End</Item>\r\n      <Item Condition=\"_MyRe != 0\" Name=\"[pregex]\">_MyRe</Item>\r\n      <Item Condition=\"_MyRe != 0\" Name=\"[flags]\">_Flags</Item>\r\n      <Item Condition=\"_MyRe != 0\" Name=\"[match]\">_MyVal</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::regex_token_iterator&lt;*&gt;\">\r\n    <SmartPointer Usage=\"Minimal\">_Res</SmartPointer>\r\n    <DisplayString Condition=\"_Res == 0\">end</DisplayString>\r\n    <DisplayString Condition=\"_Res != 0\">{*_Res}</DisplayString>\r\n    <Expand>\r\n      <Item Condition=\"_Res != 0\" Name=\"[position]\">_Pos</Item>\r\n      <Item Condition=\"_Res != 0\" Name=\"[result]\">_Res</Item>\r\n      <Item Condition=\"_Res != 0\" Name=\"[suffix]\">_Suffix</Item>\r\n      <Item Condition=\"_Res != 0\" Name=\"[N]\">_Cur</Item>\r\n      <Item Condition=\"_Res != 0\" Name=\"[subs]\">_Subs</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::atomic&lt;*&gt;\">\r\n      <!-- VS 2019 16.0 or earlier -->\r\n      <Intrinsic Optional=\"true\" Name=\"value\" Expression=\"*($T1*)&amp;_My_val\"/>\r\n      <!-- VS 2019 16.1 or later -->\r\n      <Intrinsic Optional=\"true\" Name=\"value\" Expression=\"*($T1*)&amp;_Storage\"/>\r\n      <DisplayString>{value()}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[value]\">value()</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::atomic_flag\">\r\n      <!-- VS 2019 16.0 or earlier -->\r\n      <Intrinsic Optional=\"true\" Name=\"value\" Expression=\"(_My_flag &amp; 1) != 0\"/>\r\n      <!-- VS 2019 16.1 or later -->\r\n      <Intrinsic Optional=\"true\" Name=\"value\" Expression=\"_Storage._Storage._Value != 0\"/>\r\n      <DisplayString>{value()}</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::mutex\">\r\n      <AlternativeType Name=\"std::recursive_mutex\"/>\r\n      <DisplayString Condition=\"_Mtx_storage._Count == 0\">unlocked</DisplayString>\r\n      <DisplayString Condition=\"_Mtx_storage._Count != 0\">locked</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[locking_thread_id]\" Condition=\"_Mtx_storage._Count != 0\">_Mtx_storage._Thread_id</Item>\r\n          <Item Name=\"[ownership_levels]\" Condition=\"_Mtx_storage._Count != 0\">_Mtx_storage._Count</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::timed_mutex\">\r\n    <AlternativeType Name=\"std::recursive_timed_mutex\"/>\r\n    <DisplayString Condition=\"_My_locked == 0\">unlocked</DisplayString>\r\n    <DisplayString Condition=\"_My_locked != 0\">locked</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[locking_thread_id]\" Optional=\"true\">_My_owner</Item>\r\n      <Item Name=\"[ownership_levels]\">_My_locked</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::lock_guard&lt;*&gt;\">\r\n    <DisplayString>{&amp;_MyMutex}</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"mutex\">&amp;_MyMutex</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::unique_lock&lt;*&gt;\">\r\n    <DisplayString Condition=\"_Pmtx == nullptr\">empty</DisplayString>\r\n    <DisplayString Condition=\"_Pmtx != nullptr &amp;&amp; !_Owns\">{*_Pmtx} - unowned</DisplayString>\r\n    <DisplayString Condition=\"_Pmtx != nullptr &amp;&amp; _Owns\">{*_Pmtx} - owned</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"mutex\">_Pmtx</Item>\r\n      <Item Name=\"owned\">_Owns</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::scoped_lock&lt;&gt;\">\r\n    <DisplayString>()</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::scoped_lock&lt;*&gt;\">\r\n    <DisplayString>({&amp;_MyMutex})</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[0]\">&amp;_MyMutex</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::scoped_lock&lt;*,*&gt;\">\r\n    <DisplayString>{_MyMutexes,view(asptr)}</DisplayString>\r\n    <Expand>\r\n      <ExpandedItem>_MyMutexes,view(asptr)</ExpandedItem>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::defer_lock_t\">\r\n    <DisplayString>std::defer_lock</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::try_to_lock_t\">\r\n    <DisplayString>std::try_to_lock</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::adopt_lock_t\">\r\n    <DisplayString>std::adopt_lock</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::once_flag\">\r\n    <DisplayString Condition=\"!_Opaque\">incomplete</DisplayString>\r\n    <DisplayString Condition=\"_Opaque\">complete</DisplayString>\r\n  </Type>\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::_Associated_state&lt;*&gt;\">\r\n      <Expand>\r\n          <Item Name=\"[retrieved]\">_Retrieved</Item>\r\n          <Item Name=\"[result]\">_Result</Item>\r\n          <Item Name=\"[exception]\">_Exception</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::promise&lt;*&gt;\">\r\n      <AlternativeType Name=\"std::packaged_task&lt;*&gt;\"/>\r\n      <DisplayString Condition=\"_MyPromise._State._Assoc_state == nullptr\">empty</DisplayString>\r\n      <DisplayString Condition=\"_MyPromise._State._Assoc_state != nullptr &amp;&amp; (*_MyPromise._State._Assoc_state)._Ready == 0\">pending</DisplayString>\r\n      <DisplayString Condition=\"_MyPromise._State._Assoc_state != nullptr &amp;&amp; (*_MyPromise._State._Assoc_state)._Ready == 1\">has_result</DisplayString>\r\n      <Expand>\r\n          <ExpandedItem Condition=\"_MyPromise._State._Assoc_state != nullptr &amp;&amp; (*_MyPromise._State._Assoc_state)._Ready == 1\">*_MyPromise._State._Assoc_state</ExpandedItem>\r\n          <Item Name=\"[future_retrieved]\" Condition=\"_MyPromise._State._Assoc_state != nullptr\">_MyPromise._Future_retrieved</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <!-- VC 2015 -->\r\n  <Type Name=\"std::future&lt;*&gt;\">\r\n      <AlternativeType Name=\"std::shared_future&lt;*&gt;\"/>\r\n      <DisplayString Condition=\"_Assoc_state == nullptr\">empty</DisplayString>\r\n      <DisplayString Condition=\"_Assoc_state != nullptr &amp;&amp; (*_Assoc_state)._Ready == 0\">pending</DisplayString>\r\n      <DisplayString Condition=\"_Assoc_state != nullptr &amp;&amp; (*_Assoc_state)._Ready == 1\">has_result</DisplayString>\r\n      <Expand>\r\n          <ExpandedItem Condition=\"_Assoc_state != nullptr &amp;&amp; (*_Assoc_state)._Ready == 1\">*_Assoc_state</ExpandedItem>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <Type Name=\"std::pointer_to_unary_function&lt;*&gt;\">\r\n      <AlternativeType Name=\"std::pointer_to_binary_function&lt;*&gt;\" />\r\n      <DisplayString>ptr_fun({_Pfun})</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::mem_fun_t&lt;*&gt;\">\r\n      <AlternativeType Name=\"std::mem_fun1_t&lt;*&gt;\" />\r\n      <AlternativeType Name=\"std::const_mem_fun_t&lt;*&gt;\" />\r\n      <AlternativeType Name=\"std::const_mem_fun1_t&lt;*&gt;\" />\r\n      <DisplayString>mem_fun({_Pmemfun})</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::mem_fun_ref_t&lt;*&gt;\">\r\n      <AlternativeType Name=\"std::mem_fun1_ref_t&lt;*&gt;\" />\r\n      <AlternativeType Name=\"std::const_mem_fun_ref_t&lt;*&gt;\" />\r\n      <AlternativeType Name=\"std::const_mem_fun1_ref_t&lt;*&gt;\" />\r\n      <DisplayString>mem_fun_ref({_Pmemfun})</DisplayString>\r\n      <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::binder1st&lt;*&gt;\">\r\n      <DisplayString>bind1st({op}, {value})</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"op\">op</Item>\r\n          <Item Name=\"value\">value</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::binder2nd&lt;*&gt;\">\r\n      <DisplayString>bind2nd({op}, {value})</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"op\">op</Item>\r\n          <Item Name=\"value\">value</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::auto_ptr&lt;*&gt;\">\r\n      <DisplayString Condition=\"_Myptr == 0\">empty</DisplayString>\r\n      <DisplayString Condition=\"_Myptr != 0\">auto_ptr {*_Myptr}</DisplayString>\r\n      <Expand>\r\n          <Item Condition=\"_Myptr != 0\" Name=\"[ptr]\">_Myptr</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n\r\n  <!-- Visualizer for experimental coroutines (/await) -->\r\n  <Type Name=\"std::experimental::coroutine_handle&lt;*&gt;\">\r\n    <DisplayString Condition=\"_Ptr-&gt;_Index == 2\">{_Ptr-&gt;_Fn,na}, #initial suspend</DisplayString>\r\n    <DisplayString Condition=\"_Ptr-&gt;_Index == 0\">{_Ptr-&gt;_Fn,na}, #final suspend</DisplayString>\r\n    <DisplayString Condition=\"_Ptr-&gt;_Index != 2 &amp;&amp; _Ptr-&gt;_Index != 0\">{_Ptr-&gt;_Fn,na}, suspend point #{(_Ptr-&gt;_Index)/2 - 1}</DisplayString>\r\n    <DisplayString>{_Ptr-&gt;_Fn,na}</DisplayString>\r\n    <Expand>\r\n      <Item Condition=\"_Ptr-&gt;_Index == 2\" Name=\"Suspend Point\">\"initial suspend\"</Item>\r\n      <Item Condition=\"_Ptr-&gt;_Index == 0\" Name=\"Suspend Point\">\"final suspend\"</Item>\r\n      <Item Condition=\"_Ptr-&gt;_Index != 2 &amp;&amp; _Ptr-&gt;_Index != 0\" Name=\"Suspend Point\">(_Ptr-&gt;_Index)/2 - 1</Item>\r\n      <ExpandedItem>this,view(ViewPromise)</ExpandedItem>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- Do not display the promise when promise type is void -->\r\n  <Type Name=\"std::experimental::coroutine_handle&lt;void&gt;\" IncludeView=\"ViewPromise\">\r\n    <Expand/>\r\n  </Type>\r\n\r\n  <!-- Evaluate and display the promise -->\r\n  <Type Name=\"std::experimental::coroutine_handle&lt;*&gt;\" IncludeView=\"ViewPromise\">\r\n    <Expand>\r\n      <Item Name=\"Promise\">*reinterpret_cast&lt;$T1 *&gt;(reinterpret_cast&lt;char*&gt;(_Ptr) - _ALIGNED_SIZE)</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- Visualizer for standard coroutines (/std:c++20, /await:strict) -->\r\n  <Type Name=\"std::coroutine_handle&lt;*&gt;\" IncludeView=\"ViewPromise\">\r\n    <Expand>\r\n      <Item Name=\"Promise\">*reinterpret_cast&lt;$T1 *&gt;(reinterpret_cast&lt;char*&gt;(_Ptr) + 2*sizeof(void*))</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::coroutine_handle&lt;*&gt;\">\r\n    <Intrinsic Name=\"suspend_point\" SourceId=\"FA88A41F-A641-47C8-8373-4889B7564FCF\" LanguageId=\"3A12D0B7-C26C-11D0-B442-00A0244A1DD2\" Id=\"1\" ReturnType=\"int\">\r\n        <Parameter Type=\"void*\" />\r\n    </Intrinsic>\r\n    <Intrinsic Name=\"suspend_point_line\" SourceId=\"FA88A41F-A641-47C8-8373-4889B7564FCF\" LanguageId=\"3A12D0B7-C26C-11D0-B442-00A0244A1DD2\" Id=\"2\" ReturnType=\"unsigned int\">\r\n        <Parameter Type=\"void*\" />\r\n    </Intrinsic>\r\n    <Intrinsic Name=\"primary_function\" SourceId=\"FA88A41F-A641-47C8-8373-4889B7564FCF\" LanguageId=\"3A12D0B7-C26C-11D0-B442-00A0244A1DD2\" Id=\"3\" ReturnType=\"void*\">\r\n        <Parameter Type=\"void*\" />\r\n    </Intrinsic>\r\n    <DisplayString Condition=\"_Ptr == nullptr\">empty</DisplayString>\r\n    <DisplayString Condition=\"_Ptr != nullptr &amp;&amp; suspend_point(_Ptr) &lt; 1\">{primary_function(_Ptr),na} #final suspend</DisplayString>\r\n    <DisplayString Condition=\"_Ptr != nullptr &amp;&amp; suspend_point(_Ptr) == 1\">{primary_function(_Ptr),na} #initial suspend</DisplayString>\r\n    <DisplayString Condition=\"_Ptr != nullptr &amp;&amp; suspend_point(_Ptr) &gt; 1 &amp;&amp; suspend_point_line(_Ptr) == 0\">{primary_function(_Ptr),na} #suspend point {suspend_point(_Ptr)}</DisplayString>\r\n    <DisplayString Condition=\"_Ptr != nullptr &amp;&amp; suspend_point(_Ptr) &gt; 1 &amp;&amp; suspend_point_line(_Ptr) != 0\">{primary_function(_Ptr),na} #suspend point {suspend_point(_Ptr)}, line {suspend_point_line(_Ptr)}</DisplayString>\r\n    <Expand>\r\n      <ExpandedItem>this,view(ViewPromise)</ExpandedItem>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- Do not display the promise when promise type is void -->\r\n  <Type Name=\"std::coroutine_handle&lt;void&gt;\" IncludeView=\"ViewPromise\">\r\n    <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::span&lt;*&gt;\">\r\n    <Intrinsic Name=\"data\" Expression=\"_Mydata\" />\r\n    <Intrinsic Name=\"size\" Expression=\"_Mysize\" />\r\n    <Intrinsic Name=\"size_bytes\" Expression=\"_Mysize * sizeof(element_type)\" />\r\n    <DisplayString>{{ size={size()} }}</DisplayString>\r\n    <Expand>\r\n      <ArrayItems>\r\n        <Size>size()</Size>\r\n        <ValuePointer>data()</ValuePointer>\r\n      </ArrayItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- This is for _ITERATOR_DEBUG_LEVEL == 0 and must have lower priority. -->\r\n  <Type Name=\"std::_Span_iterator&lt;*&gt;\" Priority=\"MediumLow\">\r\n    <SmartPointer Usage=\"Indexable\">_Myptr,na</SmartPointer>\r\n    <DisplayString>{*_Myptr}</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[ptr]\">_Myptr</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- This is for _ITERATOR_DEBUG_LEVEL != 0 and must have higher priority. -->\r\n  <Type Name=\"std::_Span_iterator&lt;*&gt;\" Priority=\"Medium\">\r\n      <SmartPointer Usage=\"Indexable\">_Myptr,na</SmartPointer>\r\n      <DisplayString Condition=\"_Myptr == _Myend\">end</DisplayString>\r\n      <DisplayString Condition=\"_Myptr != _Myend\">{*_Myptr}</DisplayString>\r\n      <Expand>\r\n          <Item Name=\"[ptr]\">_Myptr</Item>\r\n      </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::default_sentinel_t\">\r\n    <DisplayString>default sentinel</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::unreachable_sentinel_t\">\r\n    <DisplayString>unreachable</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::ranges::empty_view&lt;*&gt;\">\r\n    <DisplayString>{{}}</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::ranges::single_view&lt;*&gt;\">\r\n    <DisplayString>[{ _Val._Val }]</DisplayString>\r\n    <Expand>\r\n      <ArrayItems>\r\n        <Size>1</Size>\r\n        <ValuePointer>&amp;_Val._Val</ValuePointer>\r\n      </ArrayItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::ranges::iota_view&lt;*,*&gt;\">\r\n    <Intrinsic Optional=\"true\" Name=\"size\" Expression=\"(size_t)(_Bound - _Value)\" />\r\n    <DisplayString Optional=\"true\">[{_Value}; {_Bound})</DisplayString>\r\n    <Expand>\r\n      <Item Optional=\"true\" Name=\"[size]\">size()</Item>\r\n      <CustomListItems Optional=\"true\">\r\n        <Variable Name=\"val\" InitialValue=\"_Value\" />\r\n\r\n        <Size>size()</Size>\r\n        <Loop>\r\n          <Break Condition=\"val == _Bound\" />\r\n          <Item>val</Item>\r\n          <Exec>++val</Exec>\r\n        </Loop>\r\n      </CustomListItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::ranges::iota_view&lt;*,std::unreachable_sentinel_t&gt;\">\r\n    <DisplayString>[{_Value}; +&#8734;)</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[begin]\">_Value</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::ranges::repeat_view&lt;*,*&gt;\">\r\n    <DisplayString>[{_Value._Val} x {_Bound}]</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[size]\">_Bound</Item>\r\n      <CustomListItems Optional=\"true\">\r\n        <Variable Name=\"idx\" InitialValue=\"0\" />\r\n\r\n        <Loop>\r\n          <Break Condition=\"idx == _Bound\"/>\r\n          <Item>_Value._Val</Item>\r\n          <Exec>++idx</Exec>\r\n        </Loop>\r\n      </CustomListItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::ranges::repeat_view&lt;*,std::unreachable_sentinel_t&gt;\">\r\n    <DisplayString>[{_Value._Val} x +&#8734;]</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[+&#8734;]\">_Value._Val</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::ranges::repeat_view&lt;*,*&gt;::_Iterator\">\r\n    <DisplayString>{*_Value}</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[ptr]\">_Value</Item>\r\n      <Item Name=\"[index]\">_Current</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::ranges::repeat_view&lt;*,std::unreachable_sentinel_t&gt;::_Iterator\">\r\n    <DisplayString>{*_Value}</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[ptr]\">_Value</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::ranges::dangling\">\r\n    <DisplayString>dangling</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::ranges::common_view&lt;*&gt;\">\r\n    <DisplayString>{_Base}</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::ranges::basic_istream_view&lt;*&gt;\">\r\n    <DisplayString>{_Stream}</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"value\">_Val</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::ranges::_Ioterator&lt;*&gt;\">\r\n    <SmartPointer Usage=\"Minimal\">&amp;_Current,na</SmartPointer>\r\n    <Expand>\r\n      <Item Name=\"[value]\">_Current</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::ranges::_Iotinel&lt;*&gt;\">\r\n    <DisplayString>{&amp;_Last,na}</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[bound]\">_Last</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::ranges::take_while_view&lt;*&gt;\">\r\n    <AlternativeType Name=\"std::ranges::drop_while_view&lt;*&gt;\"/>\r\n    <AlternativeType Name=\"std::ranges::drop_view&lt;*&gt;\"/>\r\n    <AlternativeType Name=\"std::ranges::join_view&lt;*&gt;\"/>\r\n    <AlternativeType Name=\"std::ranges::transform_view&lt;*&gt;\"/>\r\n    <AlternativeType Name=\"std::ranges::split_view&lt;*&gt;\"/>\r\n    <AlternativeType Name=\"std::ranges::lazy_split_view&lt;*&gt;\"/>\r\n    <AlternativeType Name=\"std::ranges::reverse_view&lt;*&gt;\"/>\r\n    <AlternativeType Name=\"std::ranges::elements_view&lt;*&gt;\"/>\r\n    <AlternativeType Name=\"std::ranges::take_view&lt;*&gt;\"/>\r\n    <AlternativeType Name=\"std::ranges::ref_view&lt;*&gt;\"/>\r\n    <AlternativeType Name=\"std::ranges::filter_view&lt;*&gt;\"/>\r\n    <AlternativeType Name=\"std::ranges::owning_view&lt;*&gt;\"/>\r\n    <AlternativeType Name=\"std::ranges::chunk_by_view&lt;*&gt;\"/>\r\n    <AlternativeType Name=\"std::ranges::stride_view&lt;*&gt;\"/>\r\n    <DisplayString>{_Range}</DisplayString>\r\n    <Expand>\r\n      <Item Optional=\"true\" Name=\"pred\">_Pred</Item>\r\n      <Item Optional=\"true\" Name=\"next\">_Next</Item>\r\n      <Item Optional=\"true\" Name=\"count\">_Count</Item>\r\n      <Item Optional=\"true\" Name=\"function\">_Fun</Item>\r\n      <Item Optional=\"true\" Name=\"pattern\">_Pattern</Item>\r\n      <Item Optional=\"true\" Name=\"stride\">_Stride</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::thread\">\r\n    <DisplayString>{{ id={_Thr._Id} }}</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::thread::id\">\r\n    <DisplayString>{_Id}</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::jthread\">\r\n    <DisplayString>{_Impl}</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::filesystem::path\">\r\n    <DisplayString>{_Text}</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::source_location\">\r\n    <DisplayString>{_Function,sb}: ({_Line}, {_Column})</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[line]\">_Line</Item>\r\n      <Item Name=\"[column]\">_Column</Item>\r\n      <Item Name=\"[file]\">_File,s</Item>\r\n      <Item Name=\"[function]\">_Function,s</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::strong_ordering\">\r\n    <DisplayString Condition=\"_Value == -1\">less</DisplayString>\r\n    <DisplayString Condition=\"_Value == 0\">equal</DisplayString>\r\n    <DisplayString Condition=\"_Value == 1\">greater</DisplayString>\r\n    <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::weak_ordering\">\r\n    <DisplayString Condition=\"_Value == -1\">less</DisplayString>\r\n    <DisplayString Condition=\"_Value == 0\">equivalent</DisplayString>\r\n    <DisplayString Condition=\"_Value == 1\">greater</DisplayString>\r\n    <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::partial_ordering\">\r\n    <DisplayString Condition=\"_Value == -1\">less</DisplayString>\r\n    <DisplayString Condition=\"_Value == 0\">equivalent</DisplayString>\r\n    <DisplayString Condition=\"_Value == 1\">greater</DisplayString>\r\n    <DisplayString Condition=\"_Value == -128\">unordered</DisplayString>\r\n    <Expand/>\r\n  </Type>\r\n\r\n  <Type Name=\"std::basic_format_parse_context&lt;*&gt;\">\r\n    <DisplayString>{_Format_string}</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"Arguments\">_Num_args</Item>\r\n      <Item Name=\"Next arg id\">_Next_arg_id</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- std::format_args -->\r\n  <Type Name=\"std::basic_format_args&lt;std::basic_format_context&lt;std::back_insert_iterator&lt;std::_Fmt_buffer&lt;char&gt;&gt;, char&gt;&gt;\">\r\n    <!-- decltype(std::make_format_args(...))-->\r\n    <AlternativeType Name=\"std::_Format_arg_store&lt;std::basic_format_context&lt;std::back_insert_iterator&lt;std::_Fmt_buffer&lt;char&gt;&gt;, char&gt;, *&gt;\" />\r\n    <Intrinsic Name=\"storage\" Expression=\"(char*)(&amp;_Index_array[_Num_args])\" />\r\n    <DisplayString>{{ size={_Num_args} }}</DisplayString>\r\n    <Expand>\r\n      <IndexListItems>\r\n        <Size>_Num_args</Size>\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 0\">\"None\"</ValueNode>\r\n        <!-- _Basic_format_arg_type::_Int_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 1\">\r\n          *(int*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_UInt_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 2\">\r\n          *(unsigned int*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_Long_long_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 3\">\r\n          *(long long*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_ULong_long_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 4\">\r\n          *(unsigned long long*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_Bool_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 5\">\r\n          *(bool*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_Char_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 6\">\r\n          *(char*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_Float_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 7\">\r\n          *(float*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_Double_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 8\">\r\n          *(double*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_Long_double_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 9\">\r\n          *(long double*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_Pointer_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 10\">\r\n          *(void**)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_CString_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 11\">\r\n          *(char**)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_String_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 12\">\r\n          *(std::string_view*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_Custom_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 13\">\r\n          *(void**)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n      </IndexListItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- std::wformat_args -->\r\n  <Type Name=\"std::basic_format_args&lt;std::basic_format_context&lt;std::back_insert_iterator&lt;std::_Fmt_buffer&lt;wchar_t&gt;&gt;, wchar_t&gt;&gt;\">\r\n    <!-- decltype(std::make_wformat_args(...))-->\r\n    <AlternativeType Name=\"std::_Format_arg_store&lt;std::basic_format_context&lt;std::back_insert_iterator&lt;std::_Fmt_buffer&lt;wchar_t&gt;&gt;, wchar_t&gt;, *&gt;\" />\r\n    <Intrinsic Name=\"storage\" Expression=\"(char*)(&amp;_Index_array[_Num_args])\" />\r\n    <DisplayString>{{ size={_Num_args} }}</DisplayString>\r\n    <Expand>\r\n      <IndexListItems>\r\n        <Size>_Num_args</Size>\r\n        <!-- _Basic_format_arg_type::_Int_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 1\">\r\n          *(int*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_UInt_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 2\">\r\n          *(unsigned int*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_Long_long_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 3\">\r\n          *(long long*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_ULong_long_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 4\">\r\n          *(unsigned long long*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_Bool_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 5\">\r\n          *(bool*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_Char_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 6\">\r\n          *(wchar_t*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_Float_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 7\">\r\n          *(float*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_Double_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 8\">\r\n          *(double*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_Long_double_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 9\">\r\n          *(long double*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_Pointer_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 10\">\r\n          *(void**)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_CString_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 11\">\r\n          *(wchar_t**)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_String_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 12\">\r\n          *(std::wstring_view*)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n        <!-- _Basic_format_arg_type::_Custom_type -->\r\n        <ValueNode Condition=\"_Index_array[$i]._Type_ == 13\">\r\n          *(void**)(&amp;storage()[_Index_array[$i]._Index])\r\n        </ValueNode>\r\n      </IndexListItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::basic_format_arg&lt;*&gt;\">\r\n    <DisplayString Condition=\"_Active_state == 0\">No state: {_No_state}</DisplayString>\r\n    <DisplayString Condition=\"_Active_state == 1\">Int state: {_Int_state}</DisplayString>\r\n    <DisplayString Condition=\"_Active_state == 2\">UInt state: {_UInt_state}</DisplayString>\r\n    <DisplayString Condition=\"_Active_state == 3\">Long long state: {_Long_long_state}</DisplayString>\r\n    <DisplayString Condition=\"_Active_state == 4\">ULong long state: {_ULong_long_state}</DisplayString>\r\n    <DisplayString Condition=\"_Active_state == 5\">Bool state: {_Bool_state}</DisplayString>\r\n    <DisplayString Condition=\"_Active_state == 6\">Char state: {_Char_state}</DisplayString>\r\n    <DisplayString Condition=\"_Active_state == 7\">Float state: {_Float_state}</DisplayString>\r\n    <DisplayString Condition=\"_Active_state == 8\">Double state: {_Double_state}</DisplayString>\r\n    <DisplayString Condition=\"_Active_state == 9\">Long double state: {_Long_double_state}</DisplayString>\r\n    <DisplayString Condition=\"_Active_state == 10\">Pointer state: {_Pointer_state}</DisplayString>\r\n    <DisplayString Condition=\"_Active_state == 11\">CString state: {_CString_state}</DisplayString>\r\n    <DisplayString Condition=\"_Active_state == 12\">String state: {_String_state}</DisplayString>\r\n    <DisplayString Condition=\"_Active_state == 13\">Custom state: {_Custom_state}</DisplayString>\r\n    <DisplayString Condition=\"_Active_state >= 14\">Invalid state: {_Active_state}</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::basic_format_context&lt;*&gt;\">\r\n    <DisplayString>{_Args}</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"Iterator\">_OutputIt</Item>\r\n      <Item Name=\"Loc\">_Loc</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::exception\">\r\n    <DisplayString>{what()}</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::default_searcher&lt;*&gt;\">\r\n    <AlternativeType Name=\"std::boyer_moore_searcher&lt;*&gt;\" />\r\n    <AlternativeType Name=\"std::boyer_moore_horspool_searcher&lt;*&gt;\" />\r\n    <DisplayString>{_Data}</DisplayString>\r\n  </Type>\r\n\r\n  <Type Name=\"std::any\">\r\n    <Intrinsic Name=\"has_value\"   Expression=\"_Storage._TypeData != 0\"/>\r\n    <Intrinsic Name=\"_Rep\"        Expression=\"_Storage._TypeData &amp; _Rep_mask\"/>\r\n    <Intrinsic Name=\"type\"        Expression=\"(const type_info*)(_Storage._TypeData &amp; ~_Rep_mask)\"/>\r\n    <Intrinsic Name=\"_Is_trivial\" Expression=\"has_value() &amp;&amp; _Rep() == 0\"/>\r\n    <Intrinsic Name=\"_Is_big\"     Expression=\"has_value() &amp;&amp; _Rep() == 1\"/>\r\n    <Intrinsic Name=\"_Is_small\"   Expression=\"has_value() &amp;&amp; _Rep() == 2\"/>\r\n    <DisplayString Condition=\"!has_value()\">[empty]</DisplayString>\r\n    <DisplayString Condition=\"_Is_trivial()\">[not empty (trivial)]</DisplayString>\r\n    <DisplayString Condition=\"_Is_small()\">[not empty (small)]</DisplayString>\r\n    <DisplayString Condition=\"_Is_big()\">[not empty (large)]</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[castable_ptr]\" Condition=\"_Is_trivial()\">(void*)(&amp;_Storage._TrivialData)</Item>\r\n      <Item Name=\"[castable_ptr]\" Condition=\"_Is_small()\">(void*)(&amp;_Storage._SmallStorage._Data)</Item>\r\n      <Item Name=\"[castable_ptr]\" Condition=\"_Is_big()\">_Storage._BigStorage._Ptr</Item>\r\n      <Synthetic Name=\"has_value\">\r\n        <DisplayString>{has_value()}</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"type\" Condition=\"has_value()\">\r\n        <DisplayString>{type()}</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"[representation]\" Condition=\"_Is_trivial()\">\r\n        <DisplayString>(Small and Trivial Object)</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"[representation]\" Condition=\"_Is_small()\">\r\n        <DisplayString>(Small Object)</DisplayString>\r\n      </Synthetic>\r\n      <Synthetic Name=\"[representation]\" Condition=\"_Is_big()\">\r\n        <DisplayString>(Dynamic Allocation)</DisplayString>\r\n      </Synthetic>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::chrono::time_point&lt;std::chrono::system_clock,std::chrono::duration&lt;__int64,std::ratio&lt;1,10000000&gt; &gt; &gt;\">\r\n    <!-- clang-cl -->\r\n    <AlternativeType Name=\"std::chrono::time_point&lt;std::chrono::system_clock,std::chrono::duration&lt;long long,std::ratio&lt;1,10000000&gt; &gt; &gt;\" />\r\n\r\n    <!--\r\n      Same computation as in std::chrono::year_month_day::_Civil_from_days\r\n      and https://howardhinnant.github.io/date_algorithms.html#civil_from_days.\r\n    -->\r\n    <Intrinsic Name=\"z\"     Expression=\"(_MyDur._MyRep / (24 * 60 * 60 * 10000000ull)) + 719468\"/>\r\n    <Intrinsic Name=\"era\"   Expression=\"(z() &gt;= 0 ? z() : z() - 146096) / 146097\"/>\r\n    <Intrinsic Name=\"doe\"   Expression=\"(unsigned)(z() - era() * 146097)\"/>\r\n    <Intrinsic Name=\"yoe\"   Expression=\"(doe() - doe()/1460 + doe()/36524 - doe()/146096) / 365\"/>\r\n    <Intrinsic Name=\"doy\"   Expression=\"doe() - (365*yoe() + yoe()/4 - yoe()/100)\"/>\r\n    <Intrinsic Name=\"mp\"    Expression=\"(5*doy() + 2)/153\"/>\r\n    <Intrinsic Name=\"day\"   Expression=\"doy() - (153*mp()+2)/5 + 1\"/>\r\n    <Intrinsic Name=\"month\" Expression=\"mp() &lt; 10 ? mp()+3 : mp()-9\"/>\r\n    <Intrinsic Name=\"year\"  Expression=\"((long long)yoe()) + era() * 400 + (month() &lt;= 2)\"/>\r\n\r\n    <DisplayString Condition=\"_MyDur._MyRep &gt;= 0\">\r\n      {year(),d}-{month()/10,d}{month()%10,d}-{day()/10,d}{day()%10,d} {\r\n        (_MyDur._MyRep % (24 * 60 * 60 * 10000000ull))/(10 * 60 * 60 * 10000000ull),d\r\n      }{\r\n        ((_MyDur._MyRep % (24 * 60 * 60 * 10000000ull))/(60 * 60 * 10000000ull)) % 10,d\r\n      }:{\r\n        (_MyDur._MyRep % (60 * 60 * 10000000ull))/(10 * 60 * 10000000ull),d\r\n      }{\r\n        (_MyDur._MyRep % (10 * 60 * 10000000ull)) / (60 * 10000000ull),d\r\n      }:{\r\n        (_MyDur._MyRep % (60 * 10000000ull)) / (10 * 10000000ull),d\r\n      }{\r\n        (_MyDur._MyRep % (10 * 10000000ull)) / 10000000ull,d\r\n      }.{\r\n        (_MyDur._MyRep % 10000000) / 1000000,d\r\n      }{\r\n        (_MyDur._MyRep % 1000000) / 100000,d\r\n      }{\r\n        (_MyDur._MyRep % 100000) / 10000,d\r\n      }{\r\n        (_MyDur._MyRep % 10000) / 1000,d\r\n      }{\r\n        (_MyDur._MyRep % 1000) / 100,d\r\n      }{\r\n        (_MyDur._MyRep % 100) / 10,d\r\n      }{\r\n        _MyDur._MyRep % 10,d\r\n      }\r\n    </DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[ns/100]\">_MyDur._MyRep</Item>\r\n      <Item Name=\"[us]\">_MyDur._MyRep/10</Item>\r\n      <Item Name=\"[ms]\">_MyDur._MyRep/(10 * 1000)</Item>\r\n      <Item Name=\"[s]\">_MyDur._MyRep/(10 * 1000 * 1000)</Item>\r\n      <Synthetic Name=\"[clock]\"><DisplayString>UTC</DisplayString></Synthetic>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::extents&lt;*&gt;\">\r\n    <DisplayString>{{ rank={_Rank}, rank_dynamic={_Rank_dynamic} }}</DisplayString>\r\n    <Expand>\r\n      <!-- Mixed static and dynamic extents -->\r\n      <CustomListItems Condition=\"_Rank != _Rank_dynamic\" Optional=\"true\">\r\n        <Variable Name=\"idx\" InitialValue=\"0\" />\r\n        <Variable Name=\"statptr\" InitialValue=\"(const rank_type*) _Static_extents._Elems\" />\r\n        <Variable Name=\"dynptr\" InitialValue=\"($T1*) _Array._Elems\" />\r\n        <Loop>\r\n          <Break Condition=\"idx == _Rank\" />\r\n          <If Condition=\"*statptr == -1\">\r\n            <Item Name=\"[{idx}] dynamic extent\">*dynptr</Item>\r\n            <Exec>++dynptr</Exec>\r\n          </If>\r\n          <Item Condition=\"*statptr != -1\" Name=\"[{idx}] static extent\">($T1) *statptr</Item>\r\n          <Exec>++idx, ++statptr</Exec>\r\n        </Loop>\r\n      </CustomListItems>\r\n\r\n    <!-- Fully dynamic extents -->\r\n    <CustomListItems Condition=\"_Rank == _Rank_dynamic\" Optional=\"true\">\r\n      <Variable Name=\"idx\" InitialValue=\"0\" />\r\n      <Variable Name=\"dynptr\" InitialValue=\"($T1*) _Array._Elems\" />\r\n      <Loop>\r\n        <Break Condition=\"idx == _Rank_dynamic\" />\r\n        <Item Name=\"[{idx}] dynamic extent\">*dynptr</Item>\r\n        <Exec>++idx, ++dynptr</Exec>\r\n      </Loop>\r\n    </CustomListItems>\r\n\r\n    <!-- Fully static extents -->\r\n    <CustomListItems Condition=\"_Rank_dynamic == 0\" Optional=\"true\">\r\n      <Variable Name=\"idx\" InitialValue=\"0\" />\r\n      <Variable Name=\"statptr\" InitialValue=\"(const rank_type*) _Static_extents._Elems\" />\r\n      <Loop>\r\n        <Break Condition=\"idx == _Rank\" />\r\n        <Item Name=\"[{idx}] static extent\">($T1) *statptr</Item>\r\n        <Exec>++idx, ++statptr</Exec>\r\n      </Loop>\r\n    </CustomListItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::flat_map&lt;*&gt;\">\r\n   <AlternativeType Name=\"std::flat_multimap&lt;*&gt;\"/>\r\n    <Intrinsic Name=\"size\" Expression=\"_Data.keys.size()\"/>\r\n    <Intrinsic Name=\"key_at\" Expression=\"&amp;_Data.keys[index]\">\r\n      <Parameter Name=\"index\" Type=\"size_t\" />\r\n    </Intrinsic>\r\n    <Intrinsic Name=\"value_at\" Expression=\"&amp;_Data.values[index]\">\r\n      <Parameter Name=\"index\" Type=\"size_t\" />\r\n    </Intrinsic>\r\n\r\n    <DisplayString>{{ size={size()} }}</DisplayString>\r\n\r\n    <Expand>\r\n      <Item Name=\"[size]\">size()</Item>\r\n      <Item Name=\"[comparator]\" ExcludeView=\"simple\">_Key_compare</Item>\r\n      <CustomListItems>\r\n        <Variable Name=\"i\" InitialValue=\"0\" />\r\n        <Size>size()</Size>\r\n        <Loop>\r\n          <Item Name=\"[{*key_at(i)}]\">*value_at(i)</Item>\r\n          <Exec>++i</Exec>\r\n        </Loop>\r\n      </CustomListItems>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <!-- fallback when the primary visualization (above) fails to parse, e.g. some custom containers -->\r\n  <Type Name=\"std::flat_map&lt;*&gt;\" Priority=\"MediumLow\">\r\n    <AlternativeType Name=\"std::flat_multimap&lt;*&gt;\"/>\r\n    <Intrinsic Name=\"size\" Expression=\"_Data.keys.size()\"/>\r\n    <DisplayString>{{ size={size()} }}</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[comparator]\" ExcludeView=\"simple\">_Key_compare</Item>\r\n      <Item Name=\"[keys]\">_Data.keys</Item>\r\n      <Item Name=\"[values]\">_Data.values</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::_Pairing_iterator_provider&lt;*&gt;::_Iterator\">\r\n    <DisplayString>({_Key_it}, {_Mapped_it})</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[key]\">_Key_it</Item>\r\n      <Item Name=\"[value]\">_Mapped_it</Item>\r\n    </Expand>\r\n  </Type>\r\n\r\n  <Type Name=\"std::flat_set&lt;*&gt;\">\r\n    <AlternativeType Name=\"std::flat_multiset&lt;*&gt;\"/>\r\n    <DisplayString>{_Data}</DisplayString>\r\n    <Expand>\r\n      <Item Name=\"[comparator]\" ExcludeView=\"simple\">_Key_compare</Item>\r\n      <ExpandedItem>_Data</ExpandedItem>\r\n    </Expand>\r\n  </Type>\r\n\r\n</AutoVisualizer>\r\n"
  },
  {
    "path": "stl/inc/__msvc_all_public_headers.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// This file is intended as a test resource for tools that want to verify that they can parse all MSVC standard\r\n// library headers without warnings. This file disables deprecations, so it should not be included in programs directly.\r\n//\r\n// This file may be changed, renamed, or removed at any time.\r\n\r\n#ifndef __MSVC_ALL_PUBLIC_HEADERS_HPP\r\n#define __MSVC_ALL_PUBLIC_HEADERS_HPP\r\n\r\n#pragma warning(push)\r\n#pragma warning(1 : 4668) // 'MEOW' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'\r\n\r\n// All STL headers should protect themselves from macroized new.\r\n#if !(defined(__CUDACC__) && defined(__clang__))\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n#define new WILL NOT COMPILE\r\n#endif // !(defined(__CUDACC__) && defined(__clang__))\r\n\r\n// VSO-768746: mbctype.h macroizes _MS, _MP, _M1, and _M2. Include it first for test coverage.\r\n#ifndef _MSVC_TESTING_NVCC\r\n#include <mbctype.h>\r\n#endif // !defined(_MSVC_TESTING_NVCC)\r\n\r\n#ifndef _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING\r\n#define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING\r\n#endif // !defined(_SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING)\r\n\r\n#define _SILENCE_CXX20_CISO646_REMOVED_WARNING\r\n\r\n// Core STL Headers\r\n#include <bit>\r\n#include <compare>\r\n#include <concepts>\r\n#include <coroutine>\r\n#include <initializer_list>\r\n#include <limits>\r\n#include <numbers>\r\n#include <ratio>\r\n#include <source_location>\r\n#include <stdfloat>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <version>\r\n\r\n// Core C Wrapper Headers\r\n#include <cassert>\r\n#include <cctype>\r\n#include <cerrno>\r\n#include <cfenv>\r\n#include <cfloat>\r\n#include <cinttypes>\r\n#include <climits>\r\n#include <clocale>\r\n#include <csetjmp>\r\n#include <csignal>\r\n#include <cstdarg>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <ctime>\r\n#include <cuchar>\r\n#include <cwchar>\r\n#include <cwctype>\r\n\r\n#ifndef _CORE_HEADERS_ONLY\r\n\r\n// Non-Core STL Headers\r\n#include <algorithm>\r\n#include <any>\r\n#include <array>\r\n#include <bitset>\r\n#include <charconv>\r\n#include <chrono>\r\n#include <codecvt>\r\n#include <complex>\r\n#include <deque>\r\n#include <exception>\r\n#include <expected>\r\n#include <filesystem>\r\n#include <flat_map>\r\n#include <flat_set>\r\n#include <format>\r\n#include <forward_list>\r\n#include <fstream>\r\n#include <functional>\r\n#include <generator>\r\n#include <iomanip>\r\n#include <ios>\r\n#include <iosfwd>\r\n#include <iostream>\r\n#include <istream>\r\n#include <iterator>\r\n#include <list>\r\n#include <locale>\r\n#include <map>\r\n#include <mdspan>\r\n#include <memory>\r\n#include <memory_resource>\r\n#include <new>\r\n#include <numeric>\r\n#include <optional>\r\n#include <ostream>\r\n#include <print>\r\n#include <queue>\r\n#include <random>\r\n#include <ranges>\r\n#include <regex>\r\n#include <scoped_allocator>\r\n#include <set>\r\n#include <span>\r\n#include <spanstream>\r\n#include <sstream>\r\n#include <stack>\r\n#include <stacktrace>\r\n#include <stdexcept>\r\n#include <streambuf>\r\n#include <string>\r\n#include <string_view>\r\n#include <strstream>\r\n#include <syncstream>\r\n#include <system_error>\r\n#include <typeindex>\r\n#include <typeinfo>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <valarray>\r\n#include <variant>\r\n#include <vector>\r\n\r\n#ifndef _M_CEE_PURE\r\n#include <__msvc_cxx_stdatomic.hpp>\r\n#include <atomic>\r\n#include <barrier>\r\n#include <condition_variable>\r\n#include <execution>\r\n#include <future>\r\n#include <latch>\r\n#include <mutex>\r\n#include <semaphore>\r\n#include <shared_mutex>\r\n#include <stop_token>\r\n#include <thread>\r\n#endif // !defined(_M_CEE_PURE)\r\n\r\n// Non-Core C Wrapper Headers\r\n#include <ccomplex>\r\n#include <ciso646>\r\n#include <cmath>\r\n#include <cstdalign>\r\n#include <cstdbool>\r\n#include <ctgmath>\r\n\r\n#endif // !defined(_CORE_HEADERS_ONLY)\r\n\r\n#ifndef _MSVC_TESTING_NVCC\r\n#include <assert.h>\r\n#include <conio.h>\r\n#include <crtdbg.h>\r\n#include <ctype.h>\r\n#include <direct.h>\r\n#include <dos.h>\r\n#include <errno.h>\r\n#include <excpt.h>\r\n#include <fcntl.h>\r\n#include <fenv.h>\r\n#include <float.h>\r\n#include <intrin.h>\r\n#include <inttypes.h>\r\n#include <io.h>\r\n#include <iso646.h>\r\n#include <limits.h>\r\n#include <locale.h>\r\n#include <malloc.h>\r\n#include <math.h>\r\n#include <mbstring.h>\r\n#include <memory.h>\r\n#include <minmax.h>\r\n#include <process.h>\r\n#include <safeint.h>\r\n#include <sal.h>\r\n#include <search.h>\r\n#include <setjmp.h>\r\n#include <share.h>\r\n#include <signal.h>\r\n#include <stdarg.h>\r\n#include <stdbool.h>\r\n#include <stddef.h>\r\n#include <stdint.h>\r\n#include <stdio.h>\r\n#include <stdlib.h>\r\n#include <string.h>\r\n#include <sys/locking.h>\r\n#include <sys/stat.h>\r\n#include <sys/timeb.h>\r\n#include <sys/types.h>\r\n#include <sys/utime.h>\r\n#include <tchar.h>\r\n#include <time.h>\r\n#include <uchar.h>\r\n#include <wchar.h>\r\n#include <wctype.h>\r\n\r\n#ifndef _CORE_HEADERS_ONLY\r\n#include <complex.h>\r\n#include <new.h>\r\n#endif // !defined(_CORE_HEADERS_ONLY)\r\n\r\n#ifndef _M_CEE_PURE\r\n#include <fpieee.h>\r\n#endif // !defined(_M_CEE_PURE)\r\n#endif // !defined(_MSVC_TESTING_NVCC)\r\n\r\n#if !(defined(__CUDACC__) && defined(__clang__))\r\n#pragma pop_macro(\"new\")\r\n#endif // !(defined(__CUDACC__) && defined(__clang__))\r\n\r\n#pragma warning(pop)\r\n\r\n#endif // __MSVC_ALL_PUBLIC_HEADERS_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_bit_utils.hpp",
    "content": "// __msvc_bit_utils.hpp internal header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef __MSVC_BIT_UTILS_HPP\r\n#define __MSVC_BIT_UTILS_HPP\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <climits>\r\n#include <xtr1common>\r\n\r\n#include _STL_INTRIN_HEADER\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\nextern \"C\" {\r\nextern int __isa_available;\r\n}\r\n\r\n_INLINE_VAR constexpr int _Stl_isa_available_sse42 = 2; // equal to __ISA_AVAILABLE_SSE42\r\n_INLINE_VAR constexpr int _Stl_isa_available_avx2  = 5; // equal to __ISA_AVAILABLE_AVX2\r\n\r\ntemplate <class _UInt>\r\nconstexpr int _Unsigned_integer_digits = sizeof(_UInt) * CHAR_BIT;\r\n\r\n// Implementation of countl_zero without using specialized CPU instructions.\r\n// Used at compile time and when said instructions are not supported.\r\n// see \"Hacker's Delight\" section 5-3\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr int _Countl_zero_fallback(_Ty _Val) noexcept {\r\n    _Ty _Yx = 0;\r\n\r\n    unsigned int _Nx = _Unsigned_integer_digits<_Ty>;\r\n    unsigned int _Cx = _Unsigned_integer_digits<_Ty> / 2;\r\n    do {\r\n        _Yx = static_cast<_Ty>(_Val >> _Cx);\r\n        if (_Yx != 0) {\r\n            _Nx -= _Cx;\r\n            _Val = _Yx;\r\n        }\r\n        _Cx >>= 1;\r\n    } while (_Cx != 0);\r\n    return static_cast<int>(_Nx) - static_cast<int>(_Val);\r\n}\r\n\r\n#if !defined(_M_CEE_PURE)\r\n#define _HAS_COUNTL_ZERO_INTRINSICS 1\r\n#else // ^^^ intrinsics available / intrinsics unavailable vvv\r\n#define _HAS_COUNTL_ZERO_INTRINSICS 0\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n\r\n#if _HAS_COUNTL_ZERO_INTRINSICS\r\n#if (defined(_M_IX86) && !defined(_M_HYBRID_X86_ARM64)) || (defined(_M_X64) && !defined(_M_ARM64EC))\r\ntemplate <class _Ty>\r\n_NODISCARD int _Countl_zero_lzcnt(const _Ty _Val) noexcept {\r\n    constexpr int _Digits = _Unsigned_integer_digits<_Ty>;\r\n\r\n    if constexpr (_Digits <= 16) {\r\n        return static_cast<int>(__lzcnt16(_Val) - (16 - _Digits));\r\n    } else if constexpr (_Digits == 32) {\r\n        return static_cast<int>(__lzcnt(_Val));\r\n    } else {\r\n#ifdef _M_IX86\r\n        const unsigned int _High = _Val >> 32;\r\n        const auto _Low          = static_cast<unsigned int>(_Val);\r\n        if (_High == 0) {\r\n            return 32 + _Countl_zero_lzcnt(_Low);\r\n        } else {\r\n            return _Countl_zero_lzcnt(_High);\r\n        }\r\n#else // ^^^ defined(_M_IX86) / !defined(_M_IX86) vvv\r\n        return static_cast<int>(__lzcnt64(_Val));\r\n#endif // ^^^ !defined(_M_IX86) ^^^\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD int _Countl_zero_bsr(const _Ty _Val) noexcept {\r\n    constexpr int _Digits = _Unsigned_integer_digits<_Ty>;\r\n\r\n    unsigned long _Result;\r\n    if constexpr (_Digits <= 32) {\r\n        if (!_BitScanReverse(&_Result, _Val)) {\r\n            return _Digits;\r\n        }\r\n    } else {\r\n#ifdef _M_IX86\r\n        const unsigned int _High = _Val >> 32;\r\n        if (_BitScanReverse(&_Result, _High)) {\r\n            return static_cast<int>(31 - _Result);\r\n        }\r\n\r\n        const auto _Low = static_cast<unsigned int>(_Val);\r\n        if (!_BitScanReverse(&_Result, _Low)) {\r\n            return _Digits;\r\n        }\r\n#else // ^^^ defined(_M_IX86) / !defined(_M_IX86) vvv\r\n        if (!_BitScanReverse64(&_Result, _Val)) {\r\n            return _Digits;\r\n        }\r\n#endif // ^^^ !defined(_M_IX86) ^^^\r\n    }\r\n    return static_cast<int>(_Digits - 1 - _Result);\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD int _Checked_x86_x64_countl_zero(const _Ty _Val) noexcept {\r\n#ifndef __AVX2__\r\n    const bool _Definitely_have_lzcnt = __isa_available >= _Stl_isa_available_avx2;\r\n    if (!_Definitely_have_lzcnt) {\r\n        return _Countl_zero_bsr(_Val);\r\n    }\r\n#endif // ^^^ !defined(__AVX2__) ^^^\r\n    return _Countl_zero_lzcnt(_Val);\r\n}\r\n#endif // (defined(_M_IX86) && !defined(_M_HYBRID_X86_ARM64)) || (defined(_M_X64) && !defined(_M_ARM64EC))\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64)\r\ntemplate <class _Ty>\r\n_NODISCARD int _Checked_arm64_countl_zero(const _Ty _Val) noexcept {\r\n    constexpr int _Digits = _Unsigned_integer_digits<_Ty>;\r\n    if (_Val == 0) {\r\n        return _Digits;\r\n    }\r\n\r\n    if constexpr (_Digits <= 32) {\r\n        return static_cast<int>(_CountLeadingZeros(_Val)) - (_Unsigned_integer_digits<unsigned long> - _Digits);\r\n    } else {\r\n        return static_cast<int>(_CountLeadingZeros64(_Val));\r\n    }\r\n}\r\n#endif // defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64)\r\n#endif // _HAS_COUNTL_ZERO_INTRINSICS\r\n\r\n// Implementation of countr_zero without using specialized CPU instructions.\r\n// Used at compile time and when said instructions are not supported.\r\n// see \"Hacker's Delight\" section 5-4\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr int _Countr_zero_fallback(const _Ty _Val) noexcept {\r\n    constexpr int _Digits = _Unsigned_integer_digits<_Ty>;\r\n    return _Digits - _Countl_zero_fallback(static_cast<_Ty>(static_cast<_Ty>(~_Val) & static_cast<_Ty>(_Val - 1)));\r\n}\r\n\r\n// Implementation of popcount without using specialized CPU instructions.\r\n// Used at compile time and when said instructions are not supported.\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr int _Popcount_fallback(_Ty _Val) noexcept {\r\n    constexpr int _Digits = _Unsigned_integer_digits<_Ty>;\r\n#if defined(_M_IX86) && !defined(_M_HYBRID_X86_ARM64)\r\n    if constexpr (_Digits == 64) {\r\n        // 64-bit bit operations on architectures without 64-bit registers are less efficient,\r\n        // hence we split the value so that it fits in 32-bit registers\r\n        return _Popcount_fallback(static_cast<unsigned long>(_Val))\r\n             + _Popcount_fallback(static_cast<unsigned long>(_Val >> 32));\r\n    } else\r\n#endif // defined(_M_IX86) && !defined(_M_HYBRID_X86_ARM64)\r\n    {\r\n        // we static_cast these bit patterns in order to truncate them to the correct size\r\n        _Val = static_cast<_Ty>(_Val - ((_Val >> 1) & static_cast<_Ty>(0x5555'5555'5555'5555ull)));\r\n        _Val = static_cast<_Ty>((_Val & static_cast<_Ty>(0x3333'3333'3333'3333ull))\r\n                                + ((_Val >> 2) & static_cast<_Ty>(0x3333'3333'3333'3333ull)));\r\n        _Val = static_cast<_Ty>((_Val + (_Val >> 4)) & static_cast<_Ty>(0x0F0F'0F0F'0F0F'0F0Full));\r\n        // Multiply by one in each byte, so that it will have the sum of all source bytes in the highest byte\r\n        _Val = static_cast<_Ty>(_Val * static_cast<_Ty>(0x0101'0101'0101'0101ull));\r\n        // Extract highest byte\r\n        return static_cast<int>(_Val >> (_Digits - 8));\r\n    }\r\n}\r\n\r\n#if ((defined(_M_IX86) && !defined(_M_HYBRID_X86_ARM64)) || (defined(_M_X64) && !defined(_M_ARM64EC))) \\\r\n    && !defined(_M_CEE_PURE)\r\n#define _HAS_TZCNT_BSF_INTRINSICS 1\r\n#else // ^^^ intrinsics available / intrinsics unavailable vvv\r\n#define _HAS_TZCNT_BSF_INTRINSICS 0\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n\r\n#if _HAS_TZCNT_BSF_INTRINSICS\r\n#ifdef __clang__\r\n#define _TZCNT_U32 __builtin_ia32_tzcnt_u32\r\n#define _TZCNT_U64 __builtin_ia32_tzcnt_u64\r\n#else // ^^^ __clang__ / !__clang__ vvv\r\n#define _TZCNT_U32 _tzcnt_u32\r\n#define _TZCNT_U64 _tzcnt_u64\r\n#endif // __clang__\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD int _Countr_zero_tzcnt(const _Ty _Val) noexcept {\r\n    constexpr int _Digits = _Unsigned_integer_digits<_Ty>;\r\n    constexpr _Ty _Max    = static_cast<_Ty>(-1); // equal to (numeric_limits<_Ty>::max)()\r\n\r\n    if constexpr (_Digits <= 32) {\r\n        // Intended widening to int. This operation means that a narrow 0 will widen\r\n        // to 0xFFFF....FFFF0... instead of 0. We need this to avoid counting all the zeros\r\n        // of the wider type.\r\n        return static_cast<int>(_TZCNT_U32(static_cast<unsigned int>(~_Max | _Val)));\r\n    } else {\r\n#ifdef _M_IX86\r\n        const auto _Low = static_cast<unsigned int>(_Val);\r\n        if (_Low == 0) {\r\n            const unsigned int _High = _Val >> 32;\r\n            return static_cast<int>(32 + _TZCNT_U32(_High));\r\n        } else {\r\n            return static_cast<int>(_TZCNT_U32(_Low));\r\n        }\r\n#else // ^^^ defined(_M_IX86) / !defined(_M_IX86) vvv\r\n        return static_cast<int>(_TZCNT_U64(_Val));\r\n#endif // ^^^ !defined(_M_IX86) ^^^\r\n    }\r\n}\r\n\r\n#undef _TZCNT_U32\r\n#undef _TZCNT_U64\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD int _Countr_zero_bsf(const _Ty _Val) noexcept {\r\n    constexpr int _Digits = _Unsigned_integer_digits<_Ty>;\r\n    constexpr _Ty _Max    = static_cast<_Ty>(-1); // equal to (numeric_limits<_Ty>::max)()\r\n\r\n    unsigned long _Result;\r\n    if constexpr (_Digits <= 32) {\r\n        // Intended widening to int. This operation means that a narrow 0 will widen\r\n        // to 0xFFFF....FFFF0... instead of 0. We need this to avoid counting all the zeros\r\n        // of the wider type.\r\n        if (!_BitScanForward(&_Result, static_cast<unsigned int>(~_Max | _Val))) {\r\n            return _Digits;\r\n        }\r\n    } else {\r\n#ifdef _M_IX86\r\n        const auto _Low = static_cast<unsigned int>(_Val);\r\n        if (_BitScanForward(&_Result, _Low)) {\r\n            return static_cast<int>(_Result);\r\n        }\r\n\r\n        const unsigned int _High = _Val >> 32;\r\n        if (!_BitScanForward(&_Result, _High)) {\r\n            return _Digits;\r\n        } else {\r\n            return static_cast<int>(_Result + 32);\r\n        }\r\n#else // ^^^ defined(_M_IX86) / !defined(_M_IX86) vvv\r\n        if (!_BitScanForward64(&_Result, _Val)) {\r\n            return _Digits;\r\n        }\r\n#endif // ^^^ !defined(_M_IX86) ^^^\r\n    }\r\n    return static_cast<int>(_Result);\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD int _Checked_x86_x64_countr_zero(const _Ty _Val) noexcept {\r\n#ifndef __AVX2__\r\n    const bool _Definitely_have_tzcnt = __isa_available >= _Stl_isa_available_avx2;\r\n    if (!_Definitely_have_tzcnt) {\r\n        return _Countr_zero_bsf(_Val);\r\n    }\r\n#endif // ^^^ !defined(__AVX2__) ^^^\r\n    return _Countr_zero_tzcnt(_Val);\r\n}\r\n\r\n#endif // _HAS_TZCNT_BSF_INTRINSICS\r\n\r\n#if !defined(_M_CEE_PURE)\r\n#define _HAS_POPCNT_INTRINSICS 1\r\n#if defined(__AVX__) || defined(_M_ARM64) || defined(_M_ARM64EC)\r\n#define _POPCNT_INTRINSICS_ALWAYS_AVAILABLE 1\r\n#else // ^^^ intrinsics always available / intrinsics not always available vvv\r\n#define _POPCNT_INTRINSICS_ALWAYS_AVAILABLE 0\r\n#endif // ^^^ intrinsics not always available ^^^\r\n#else // ^^^ intrinsics available / intrinsics unavailable vvv\r\n#define _HAS_POPCNT_INTRINSICS              0\r\n#define _POPCNT_INTRINSICS_ALWAYS_AVAILABLE 0\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n\r\n#if _HAS_POPCNT_INTRINSICS\r\ntemplate <class _Ty>\r\n_NODISCARD int _Unchecked_popcount(const _Ty _Val) noexcept {\r\n    constexpr int _Digits = _Unsigned_integer_digits<_Ty>;\r\n    if constexpr (_Digits <= 16) {\r\n        return static_cast<int>(__popcnt16(_Val));\r\n    } else if constexpr (_Digits == 32) {\r\n        return static_cast<int>(__popcnt(_Val));\r\n    } else {\r\n#ifdef _M_IX86\r\n        return static_cast<int>(__popcnt(_Val >> 32) + __popcnt(static_cast<unsigned int>(_Val)));\r\n#else // ^^^ defined(_M_IX86) / !defined(_M_IX86) vvv\r\n        return static_cast<int>(__popcnt64(_Val));\r\n#endif // ^^^ !defined(_M_IX86) ^^^\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD int _Checked_popcount(const _Ty _Val) noexcept {\r\n#if !_POPCNT_INTRINSICS_ALWAYS_AVAILABLE\r\n    const bool _Definitely_have_popcnt = __isa_available >= _Stl_isa_available_sse42;\r\n    if (!_Definitely_have_popcnt) {\r\n        return _Popcount_fallback(_Val);\r\n    }\r\n#endif // ^^^ !_POPCNT_INTRINSICS_ALWAYS_AVAILABLE ^^^\r\n    return _Unchecked_popcount(_Val);\r\n}\r\n#endif // ^^^ _HAS_POPCNT_INTRINSICS ^^^\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_standard_unsigned_integer =\r\n    _Is_any_of_v<_Ty, unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long>;\r\n\r\ntemplate <class _Ty, enable_if_t<_Is_standard_unsigned_integer<_Ty>, int> = 0>\r\n_NODISCARD _CONSTEXPR20 int _Countr_zero(const _Ty _Val) noexcept {\r\n#if _HAS_TZCNT_BSF_INTRINSICS\r\n#if _HAS_CXX20\r\n    if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n    {\r\n        return _Checked_x86_x64_countr_zero(_Val);\r\n    }\r\n#endif // _HAS_TZCNT_BSF_INTRINSICS\r\n    return _Countr_zero_fallback(_Val);\r\n}\r\n\r\ntemplate <class _Ty, class _Fn>\r\nconstexpr decltype(auto) _Select_countr_zero_impl(_Fn _Callback) {\r\n    // TRANSITION, DevCom-1527995: Lambdas in this function ensure inlining\r\n#if _HAS_TZCNT_BSF_INTRINSICS && _HAS_CXX20\r\n    if (!_STD is_constant_evaluated()) {\r\n#ifndef __AVX2__\r\n        const bool _Definitely_have_tzcnt = __isa_available >= _Stl_isa_available_avx2;\r\n        if (!_Definitely_have_tzcnt) {\r\n            return _Callback([](_Ty _Val) static { return _Countr_zero_bsf(_Val); });\r\n        }\r\n#endif // ^^^ !defined(__AVX2__) ^^^\r\n        return _Callback([](_Ty _Val) static { return _Countr_zero_tzcnt(_Val); });\r\n    }\r\n#endif // ^^^ _HAS_TZCNT_BSF_INTRINSICS && _HAS_CXX20 ^^^\r\n    // C++17 constexpr gcd() calls this function, so it should be constexpr unless we detect runtime evaluation.\r\n    return _Callback([](_Ty _Val) static { return _Countr_zero_fallback(_Val); });\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr int _Countl_zero(const _Ty _Val) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_standard_unsigned_integer<_Ty>);\r\n#if _HAS_COUNTL_ZERO_INTRINSICS\r\n#if (defined(_M_IX86) && !defined(_M_HYBRID_X86_ARM64)) || (defined(_M_X64) && !defined(_M_ARM64EC))\r\n    if (!_Is_constant_evaluated()) {\r\n        return _Checked_x86_x64_countl_zero(_Val);\r\n    }\r\n#elif defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64)\r\n    if (!_Is_constant_evaluated()) {\r\n        return _Checked_arm64_countl_zero(_Val);\r\n    }\r\n#endif // defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64)\r\n#endif // _HAS_COUNTL_ZERO_INTRINSICS\r\n\r\n    return _Countl_zero_fallback(_Val);\r\n}\r\n\r\ntemplate <class _Ty, enable_if_t<_Is_standard_unsigned_integer<_Ty>, int> = 0>\r\n_NODISCARD _CONSTEXPR20 int _Popcount(const _Ty _Val) noexcept {\r\n#if _HAS_POPCNT_INTRINSICS\r\n#if _HAS_CXX20\r\n    if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n    {\r\n        return _Checked_popcount(_Val);\r\n    }\r\n#endif // ^^^ _HAS_POPCNT_INTRINSICS ^^^\r\n    return _Popcount_fallback(_Val);\r\n}\r\n\r\ntemplate <class _Ty, class _Fn>\r\n_CONSTEXPR20 decltype(auto) _Select_popcount_impl(_Fn _Callback) {\r\n    // TRANSITION, DevCom-1527995: Lambdas in this function ensure inlining\r\n#if _HAS_POPCNT_INTRINSICS\r\n#if _HAS_CXX20\r\n    if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n    {\r\n#if !_POPCNT_INTRINSICS_ALWAYS_AVAILABLE\r\n        const bool _Definitely_have_popcnt = __isa_available >= _Stl_isa_available_sse42;\r\n        if (!_Definitely_have_popcnt) {\r\n            return _Callback([](_Ty _Val) static { return _Popcount_fallback(_Val); });\r\n        }\r\n#endif // ^^^ !_POPCNT_INTRINSICS_ALWAYS_AVAILABLE ^^^\r\n        return _Callback([](_Ty _Val) static { return _Unchecked_popcount(_Val); });\r\n    }\r\n#endif // ^^^ _HAS_POPCNT_INTRINSICS ^^^\r\n    return _Callback([](_Ty _Val) static { return _Popcount_fallback(_Val); });\r\n}\r\n\r\n#undef _HAS_TZCNT_BSF_INTRINSICS\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_BIT_UTILS_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_chrono.hpp",
    "content": "// __msvc_chrono.hpp internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef __MSVC_CHRONO_HPP\r\n#define __MSVC_CHRONO_HPP\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <ctime>\r\n#include <limits>\r\n#include <ratio>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <xtimec.h>\r\n\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#endif\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\nnamespace chrono {\r\n    _EXPORT_STD template <class _Rep>\r\n    struct treat_as_floating_point : is_floating_point<_Rep> {}; // tests for floating-point type\r\n\r\n    _EXPORT_STD template <class _Rep>\r\n    _NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES constexpr bool treat_as_floating_point_v =\r\n        treat_as_floating_point<_Rep>::value;\r\n\r\n    _EXPORT_STD template <class _Rep>\r\n    struct duration_values { // gets arithmetic properties of a type\r\n        _NODISCARD static constexpr _Rep zero() noexcept {\r\n            // get zero value\r\n            return _Rep(0);\r\n        }\r\n\r\n        _NODISCARD static constexpr _Rep(min)() noexcept {\r\n            // get smallest value\r\n            return numeric_limits<_Rep>::lowest();\r\n        }\r\n\r\n        _NODISCARD static constexpr _Rep(max)() noexcept {\r\n            // get largest value\r\n            return (numeric_limits<_Rep>::max)();\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD template <class _Rep, class _Period = ratio<1>>\r\n    class duration;\r\n\r\n    _EXPORT_STD template <class _Clock, class _Duration = typename _Clock::duration>\r\n    class time_point;\r\n\r\n#if _HAS_CXX20\r\n    _EXPORT_STD template <class _Clock>\r\n    _NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES constexpr bool is_clock_v = requires {\r\n        // Basic checks from N5014 [time.traits.is.clock]/1\r\n        typename _Clock::rep;\r\n        typename _Clock::period;\r\n        typename _Clock::duration;\r\n        typename _Clock::time_point;\r\n        _Clock::is_steady;\r\n        _Clock::now();\r\n\r\n        // Additional stricter checks from N5014 [time.clock.req]/2\r\n        // \"An arithmetic type or a class emulating an arithmetic type\" is not checked\r\n        requires _Is_ratio_v<typename _Clock::period>;\r\n        requires same_as<typename _Clock::duration, duration<typename _Clock::rep, typename _Clock::period>>;\r\n        requires same_as<typename _Clock::time_point, time_point<_Clock>>\r\n                     || same_as<typename _Clock::time_point,\r\n                         time_point<typename _Clock::time_point::clock, typename _Clock::duration>>;\r\n        { _Clock::is_steady } -> std::same_as<const bool&>;\r\n        { _Clock::now() } -> std::same_as<typename _Clock::time_point>;\r\n    };\r\n    _EXPORT_STD template <class _Clock>\r\n    struct _NO_SPECIALIZATIONS_CITING(\"N5014 [time.traits.is.clock]/2\") is_clock : bool_constant<is_clock_v<_Clock>> {};\r\n\r\n    template <class _Clock>\r\n    constexpr bool _Is_clock_v = is_clock_v<_Clock>;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    template <class _Clock, class = void>\r\n    constexpr bool _Is_clock_v = false;\r\n\r\n    template <class _Clock>\r\n    constexpr bool\r\n        _Is_clock_v<_Clock, void_t<typename _Clock::rep, typename _Clock::period, typename _Clock::duration,\r\n                                typename _Clock::time_point, decltype(_Clock::is_steady), decltype(_Clock::now())>> =\r\n            true;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    template <class _Ty>\r\n    constexpr bool _Is_duration_v = _Is_specialization_v<_Ty, duration>;\r\n\r\n    _EXPORT_STD template <class _To, class _Rep, class _Period, enable_if_t<_Is_duration_v<_To>, int> = 0>\r\n    constexpr _To duration_cast(const duration<_Rep, _Period>&)\r\n        noexcept(is_arithmetic_v<_Rep> && is_arithmetic_v<typename _To::rep>); // strengthened\r\n\r\n    _EXPORT_STD template <class _Rep, class _Period>\r\n    class duration { // represents a time duration\r\n    public:\r\n        using rep    = _Rep;\r\n        using period = typename _Period::type;\r\n\r\n        static_assert(!_Is_duration_v<_Rep>, \"duration can't have duration as first template argument\");\r\n        static_assert(_Is_ratio_v<_Period>, \"period not an instance of std::ratio\");\r\n        static_assert(0 < _Period::num, \"period negative or zero\");\r\n\r\n        constexpr duration() = default;\r\n\r\n        template <class _Rep2,\r\n            enable_if_t<is_convertible_v<const _Rep2&, _Rep>\r\n                            && (treat_as_floating_point_v<_Rep> || !treat_as_floating_point_v<_Rep2>),\r\n                int> = 0>\r\n        constexpr explicit duration(const _Rep2& _Val)\r\n            noexcept(is_arithmetic_v<_Rep> && is_arithmetic_v<_Rep2>) // strengthened\r\n            : _MyRep(static_cast<_Rep>(_Val)) {}\r\n\r\n        template <class _Rep2, class _Period2,\r\n            enable_if_t<is_convertible_v<const _Rep2&, _Rep>\r\n                            && (treat_as_floating_point_v<_Rep>\r\n                                || (_Ratio_divide_sfinae<_Period2, _Period>::den == 1\r\n                                    && !treat_as_floating_point_v<_Rep2>) ),\r\n                int> = 0>\r\n        constexpr duration(const duration<_Rep2, _Period2>& _Dur)\r\n            noexcept(is_arithmetic_v<_Rep> && is_arithmetic_v<_Rep2>) // strengthened\r\n            : _MyRep(_CHRONO duration_cast<duration>(_Dur).count()) {}\r\n\r\n        _NODISCARD constexpr _Rep count() const noexcept(is_arithmetic_v<_Rep>) /* strengthened */ {\r\n            return _MyRep;\r\n        }\r\n\r\n        _NODISCARD constexpr common_type_t<duration> operator+() const\r\n            noexcept(is_arithmetic_v<_Rep>) /* strengthened */ {\r\n            return common_type_t<duration>(*this);\r\n        }\r\n\r\n        _NODISCARD constexpr common_type_t<duration> operator-() const\r\n            noexcept(is_arithmetic_v<_Rep>) /* strengthened */ {\r\n            return common_type_t<duration>(-_MyRep);\r\n        }\r\n\r\n        _CONSTEXPR17 duration& operator++() noexcept(is_arithmetic_v<_Rep>) /* strengthened */ {\r\n            ++_MyRep;\r\n            return *this;\r\n        }\r\n\r\n        _CONSTEXPR17 duration operator++(int) noexcept(is_arithmetic_v<_Rep>) /* strengthened */ {\r\n            return duration(_MyRep++);\r\n        }\r\n\r\n        _CONSTEXPR17 duration& operator--() noexcept(is_arithmetic_v<_Rep>) /* strengthened */ {\r\n            --_MyRep;\r\n            return *this;\r\n        }\r\n\r\n        _CONSTEXPR17 duration operator--(int) noexcept(is_arithmetic_v<_Rep>) /* strengthened */ {\r\n            return duration(_MyRep--);\r\n        }\r\n\r\n        _CONSTEXPR17 duration& operator+=(const duration& _Right) noexcept(is_arithmetic_v<_Rep>) /* strengthened */ {\r\n            _MyRep += _Right._MyRep;\r\n            return *this;\r\n        }\r\n\r\n        _CONSTEXPR17 duration& operator-=(const duration& _Right) noexcept(is_arithmetic_v<_Rep>) /* strengthened */ {\r\n            _MyRep -= _Right._MyRep;\r\n            return *this;\r\n        }\r\n\r\n        _CONSTEXPR17 duration& operator*=(const _Rep& _Right) noexcept(is_arithmetic_v<_Rep>) /* strengthened */ {\r\n            _MyRep *= _Right;\r\n            return *this;\r\n        }\r\n\r\n        _CONSTEXPR17 duration& operator/=(const _Rep& _Right) noexcept(is_arithmetic_v<_Rep>) /* strengthened */ {\r\n            _MyRep /= _Right;\r\n            return *this;\r\n        }\r\n\r\n        _CONSTEXPR17 duration& operator%=(const _Rep& _Right) noexcept(is_arithmetic_v<_Rep>) /* strengthened */ {\r\n            _MyRep %= _Right;\r\n            return *this;\r\n        }\r\n\r\n        _CONSTEXPR17 duration& operator%=(const duration& _Right) noexcept(is_arithmetic_v<_Rep>) /* strengthened */ {\r\n            _MyRep %= _Right.count();\r\n            return *this;\r\n        }\r\n\r\n        _NODISCARD static constexpr duration zero() noexcept {\r\n            // get zero value\r\n            return duration(duration_values<_Rep>::zero());\r\n        }\r\n\r\n        _NODISCARD static constexpr duration(min)() noexcept {\r\n            // get minimum value\r\n            return duration((duration_values<_Rep>::min)());\r\n        }\r\n\r\n        _NODISCARD static constexpr duration(max)() noexcept {\r\n            // get maximum value\r\n            return duration((duration_values<_Rep>::max)());\r\n        }\r\n\r\n    private:\r\n        _Rep _MyRep; // the stored rep\r\n    };\r\n\r\n    _EXPORT_STD template <class _Clock, class _Duration>\r\n    class time_point { // represents a point in time\r\n    public:\r\n        using clock    = _Clock;\r\n        using duration = _Duration;\r\n        using rep      = typename _Duration::rep;\r\n        using period   = typename _Duration::period;\r\n\r\n        static_assert(_Is_duration_v<_Duration>,\r\n            \"N4950 [time.point.general]/1 mandates Duration to be a specialization of chrono::duration.\");\r\n\r\n        constexpr time_point() = default;\r\n\r\n        constexpr explicit time_point(const _Duration& _Other) noexcept(is_arithmetic_v<rep>) // strengthened\r\n            : _MyDur(_Other) {}\r\n\r\n        template <class _Duration2, enable_if_t<is_convertible_v<_Duration2, _Duration>, int> = 0>\r\n        constexpr time_point(const time_point<_Clock, _Duration2>& _Tp)\r\n            noexcept(is_arithmetic_v<rep> && is_arithmetic_v<typename _Duration2::rep>) // strengthened\r\n            : _MyDur(_Tp.time_since_epoch()) {}\r\n\r\n        _NODISCARD constexpr _Duration time_since_epoch() const noexcept(is_arithmetic_v<rep>) /* strengthened */ {\r\n            return _MyDur;\r\n        }\r\n\r\n#if _HAS_CXX20\r\n        constexpr time_point& operator++() noexcept(is_arithmetic_v<rep>) /* strengthened */ {\r\n            ++_MyDur;\r\n            return *this;\r\n        }\r\n        constexpr time_point operator++(int) noexcept(is_arithmetic_v<rep>) /* strengthened */ {\r\n            return time_point{_MyDur++};\r\n        }\r\n        constexpr time_point& operator--() noexcept(is_arithmetic_v<rep>) /* strengthened */ {\r\n            --_MyDur;\r\n            return *this;\r\n        }\r\n        constexpr time_point operator--(int) noexcept(is_arithmetic_v<rep>) /* strengthened */ {\r\n            return time_point{_MyDur--};\r\n        }\r\n#endif // _HAS_CXX20\r\n\r\n        _CONSTEXPR17 time_point& operator+=(const _Duration& _Dur) noexcept(is_arithmetic_v<rep>) /* strengthened */ {\r\n            _MyDur += _Dur;\r\n            return *this;\r\n        }\r\n\r\n        _CONSTEXPR17 time_point& operator-=(const _Duration& _Dur) noexcept(is_arithmetic_v<rep>) /* strengthened */ {\r\n            _MyDur -= _Dur;\r\n            return *this;\r\n        }\r\n\r\n        _NODISCARD static constexpr time_point(min)() noexcept {\r\n            return time_point((_Duration::min) ());\r\n        }\r\n\r\n        _NODISCARD static constexpr time_point(max)() noexcept {\r\n            return time_point((_Duration::max) ());\r\n        }\r\n\r\n    private:\r\n        _Duration _MyDur{duration::zero()}; // duration since the epoch\r\n    };\r\n} // namespace chrono\r\n\r\ntemplate <class _Rep, class _Period>\r\nconstexpr bool _Is_trivially_swappable_v<chrono::duration<_Rep, _Period>> = _Is_trivially_swappable_v<_Rep>;\r\n\r\ntemplate <class _Clock, class _Duration>\r\nconstexpr bool _Is_trivially_swappable_v<chrono::time_point<_Clock, _Duration>> = _Is_trivially_swappable_v<_Duration>;\r\n\r\n_NODISCARD constexpr intmax_t _Lcm(const intmax_t _Ax, const intmax_t _Bx) noexcept {\r\n    return (_Ax / _Gcd(_Ax, _Bx)) * _Bx;\r\n}\r\n\r\ntemplate <class _Rep1, class _Period1, class _Rep2, class _Period2>\r\nstruct common_type<_CHRONO duration<_Rep1, _Period1>, _CHRONO duration<_Rep2, _Period2>> {\r\n    using type = _CHRONO duration<common_type_t<_Rep1, _Rep2>,\r\n        ratio<_Gcd(_Period1::num, _Period2::num), _Lcm(_Period1::den, _Period2::den)>>;\r\n};\r\n\r\ntemplate <class _Clock, class _Duration1, class _Duration2>\r\nstruct common_type<_CHRONO time_point<_Clock, _Duration1>,\r\n    _CHRONO time_point<_Clock, _Duration2>> { // common type of two time points\r\n    using type = _CHRONO time_point<_Clock, common_type_t<_Duration1, _Duration2>>;\r\n};\r\n\r\nnamespace chrono {\r\n    _EXPORT_STD template <class _Rep1, class _Period1, class _Rep2, class _Period2>\r\n    _NODISCARD constexpr common_type_t<duration<_Rep1, _Period1>, duration<_Rep2, _Period2>> operator+(\r\n        const duration<_Rep1, _Period1>& _Left, const duration<_Rep2, _Period2>& _Right)\r\n        noexcept(is_arithmetic_v<_Rep1> && is_arithmetic_v<_Rep2>) /* strengthened */ {\r\n        using _CD = common_type_t<duration<_Rep1, _Period1>, duration<_Rep2, _Period2>>;\r\n        return _CD(_CD(_Left).count() + _CD(_Right).count());\r\n    }\r\n\r\n    _EXPORT_STD template <class _Rep1, class _Period1, class _Rep2, class _Period2>\r\n    _NODISCARD constexpr common_type_t<duration<_Rep1, _Period1>, duration<_Rep2, _Period2>> operator-(\r\n        const duration<_Rep1, _Period1>& _Left, const duration<_Rep2, _Period2>& _Right)\r\n        noexcept(is_arithmetic_v<_Rep1> && is_arithmetic_v<_Rep2>) /* strengthened */ {\r\n        using _CD = common_type_t<duration<_Rep1, _Period1>, duration<_Rep2, _Period2>>;\r\n        return _CD(_CD(_Left).count() - _CD(_Right).count());\r\n    }\r\n\r\n    _EXPORT_STD template <class _Rep1, class _Period1, class _Rep2,\r\n        enable_if_t<is_convertible_v<const _Rep2&, common_type_t<_Rep1, _Rep2>>, int> = 0>\r\n    _NODISCARD constexpr duration<common_type_t<_Rep1, _Rep2>, _Period1> operator*(\r\n        const duration<_Rep1, _Period1>& _Left, const _Rep2& _Right)\r\n        noexcept(is_arithmetic_v<_Rep1> && is_arithmetic_v<_Rep2>) /* strengthened */ {\r\n        using _CR = common_type_t<_Rep1, _Rep2>;\r\n        using _CD = duration<_CR, _Period1>;\r\n        return _CD(_CD(_Left).count() * _Right);\r\n    }\r\n\r\n    _EXPORT_STD template <class _Rep1, class _Rep2, class _Period2,\r\n        enable_if_t<is_convertible_v<const _Rep1&, common_type_t<_Rep1, _Rep2>>, int> = 0>\r\n    _NODISCARD constexpr duration<common_type_t<_Rep1, _Rep2>, _Period2> operator*(\r\n        const _Rep1& _Left, const duration<_Rep2, _Period2>& _Right)\r\n        noexcept(is_arithmetic_v<_Rep1> && is_arithmetic_v<_Rep2>) /* strengthened */ {\r\n        return _Right * _Left;\r\n    }\r\n\r\n    template <class _CR, class _Period1, class _Rep2, bool = is_convertible_v<const _Rep2&, _CR>>\r\n    struct _Duration_div_mod1 { // return type for duration / rep and duration % rep\r\n        using type = duration<_CR, _Period1>;\r\n    };\r\n\r\n    template <class _CR, class _Period1, class _Rep2>\r\n    struct _Duration_div_mod1<_CR, _Period1, _Rep2, false> {}; // no return type\r\n\r\n    template <class _CR, class _Period1, class _Rep2, bool = _Is_duration_v<_Rep2>>\r\n    struct _Duration_div_mod {}; // no return type\r\n\r\n    template <class _CR, class _Period1, class _Rep2>\r\n    struct _Duration_div_mod<_CR, _Period1, _Rep2, false> : _Duration_div_mod1<_CR, _Period1, _Rep2> {\r\n        // return type for duration / rep and duration % rep\r\n    };\r\n\r\n    _EXPORT_STD template <class _Rep1, class _Period1, class _Rep2>\r\n    _NODISCARD constexpr typename _Duration_div_mod<common_type_t<_Rep1, _Rep2>, _Period1, _Rep2>::type operator/(\r\n        const duration<_Rep1, _Period1>& _Left, const _Rep2& _Right)\r\n        noexcept(is_arithmetic_v<_Rep1> && is_arithmetic_v<_Rep2>) /* strengthened */ {\r\n        using _CR = common_type_t<_Rep1, _Rep2>;\r\n        using _CD = duration<_CR, _Period1>;\r\n        return _CD(_CD(_Left).count() / _Right);\r\n    }\r\n\r\n    _EXPORT_STD template <class _Rep1, class _Period1, class _Rep2, class _Period2>\r\n    _NODISCARD constexpr common_type_t<_Rep1, _Rep2> operator/(\r\n        const duration<_Rep1, _Period1>& _Left, const duration<_Rep2, _Period2>& _Right)\r\n        noexcept(is_arithmetic_v<_Rep1> && is_arithmetic_v<_Rep2>) /* strengthened */ {\r\n        using _CD = common_type_t<duration<_Rep1, _Period1>, duration<_Rep2, _Period2>>;\r\n        return _CD(_Left).count() / _CD(_Right).count();\r\n    }\r\n\r\n    _EXPORT_STD template <class _Rep1, class _Period1, class _Rep2>\r\n    _NODISCARD constexpr typename _Duration_div_mod<common_type_t<_Rep1, _Rep2>, _Period1, _Rep2>::type operator%(\r\n        const duration<_Rep1, _Period1>& _Left, const _Rep2& _Right)\r\n        noexcept(is_arithmetic_v<_Rep1> && is_arithmetic_v<_Rep2>) /* strengthened */ {\r\n        using _CR = common_type_t<_Rep1, _Rep2>;\r\n        using _CD = duration<_CR, _Period1>;\r\n        return _CD(_CD(_Left).count() % _Right);\r\n    }\r\n\r\n    _EXPORT_STD template <class _Rep1, class _Period1, class _Rep2, class _Period2>\r\n    _NODISCARD constexpr common_type_t<duration<_Rep1, _Period1>, duration<_Rep2, _Period2>> operator%(\r\n        const duration<_Rep1, _Period1>& _Left, const duration<_Rep2, _Period2>& _Right)\r\n        noexcept(is_arithmetic_v<_Rep1> && is_arithmetic_v<_Rep2>) /* strengthened */ {\r\n        using _CD = common_type_t<duration<_Rep1, _Period1>, duration<_Rep2, _Period2>>;\r\n        return _CD(_CD(_Left).count() % _CD(_Right).count());\r\n    }\r\n\r\n    _EXPORT_STD template <class _Rep1, class _Period1, class _Rep2, class _Period2>\r\n    _NODISCARD constexpr bool operator==(\r\n        const duration<_Rep1, _Period1>& _Left, const duration<_Rep2, _Period2>& _Right)\r\n        noexcept(is_arithmetic_v<_Rep1> && is_arithmetic_v<_Rep2>) /* strengthened */ {\r\n        using _CT = common_type_t<duration<_Rep1, _Period1>, duration<_Rep2, _Period2>>;\r\n        return _CT(_Left).count() == _CT(_Right).count();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    template <class _Rep1, class _Period1, class _Rep2, class _Period2>\r\n    _NODISCARD constexpr bool operator!=(\r\n        const duration<_Rep1, _Period1>& _Left, const duration<_Rep2, _Period2>& _Right)\r\n        noexcept(is_arithmetic_v<_Rep1> && is_arithmetic_v<_Rep2>) /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    _EXPORT_STD template <class _Rep1, class _Period1, class _Rep2, class _Period2>\r\n    _NODISCARD constexpr bool operator<(const duration<_Rep1, _Period1>& _Left, const duration<_Rep2, _Period2>& _Right)\r\n        noexcept(is_arithmetic_v<_Rep1> && is_arithmetic_v<_Rep2>) /* strengthened */ {\r\n        using _CT = common_type_t<duration<_Rep1, _Period1>, duration<_Rep2, _Period2>>;\r\n        return _CT(_Left).count() < _CT(_Right).count();\r\n    }\r\n\r\n    _EXPORT_STD template <class _Rep1, class _Period1, class _Rep2, class _Period2>\r\n    _NODISCARD constexpr bool operator<=(\r\n        const duration<_Rep1, _Period1>& _Left, const duration<_Rep2, _Period2>& _Right)\r\n        noexcept(is_arithmetic_v<_Rep1> && is_arithmetic_v<_Rep2>) /* strengthened */ {\r\n        return !(_Right < _Left);\r\n    }\r\n\r\n    _EXPORT_STD template <class _Rep1, class _Period1, class _Rep2, class _Period2>\r\n    _NODISCARD constexpr bool operator>(const duration<_Rep1, _Period1>& _Left, const duration<_Rep2, _Period2>& _Right)\r\n        noexcept(is_arithmetic_v<_Rep1> && is_arithmetic_v<_Rep2>) /* strengthened */ {\r\n        return _Right < _Left;\r\n    }\r\n\r\n    _EXPORT_STD template <class _Rep1, class _Period1, class _Rep2, class _Period2>\r\n    _NODISCARD constexpr bool operator>=(\r\n        const duration<_Rep1, _Period1>& _Left, const duration<_Rep2, _Period2>& _Right)\r\n        noexcept(is_arithmetic_v<_Rep1> && is_arithmetic_v<_Rep2>) /* strengthened */ {\r\n        return !(_Left < _Right);\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _EXPORT_STD template <class _Rep1, class _Period1, class _Rep2, class _Period2>\r\n        requires three_way_comparable<typename common_type_t<duration<_Rep1, _Period1>, duration<_Rep2, _Period2>>::rep>\r\n    _NODISCARD constexpr auto operator<=>(\r\n        const duration<_Rep1, _Period1>& _Left, const duration<_Rep2, _Period2>& _Right)\r\n        noexcept(is_arithmetic_v<_Rep1> && is_arithmetic_v<_Rep2>) /* strengthened */ {\r\n        using _CT = common_type_t<duration<_Rep1, _Period1>, duration<_Rep2, _Period2>>;\r\n        return _CT(_Left).count() <=> _CT(_Right).count();\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    _EXPORT_STD template <class _To, class _Rep, class _Period, enable_if_t<_Is_duration_v<_To>, int> /* = 0 */>\r\n    _NODISCARD constexpr _To duration_cast(const duration<_Rep, _Period>& _Dur)\r\n        noexcept(is_arithmetic_v<_Rep> && is_arithmetic_v<typename _To::rep>) /* strengthened */ {\r\n        // convert duration to another duration; truncate\r\n        using _CF = ratio_divide<_Period, typename _To::period>;\r\n\r\n        using _ToRep = typename _To::rep;\r\n        using _CR    = common_type_t<_ToRep, _Rep, intmax_t>;\r\n\r\n        constexpr bool _Num_is_one = _CF::num == 1;\r\n        constexpr bool _Den_is_one = _CF::den == 1;\r\n\r\n        if constexpr (_Den_is_one) {\r\n            if constexpr (_Num_is_one) {\r\n                return static_cast<_To>(static_cast<_ToRep>(_Dur.count()));\r\n            } else {\r\n                return static_cast<_To>(\r\n                    static_cast<_ToRep>(static_cast<_CR>(_Dur.count()) * static_cast<_CR>(_CF::num)));\r\n            }\r\n        } else {\r\n            if constexpr (_Num_is_one) {\r\n                return static_cast<_To>(\r\n                    static_cast<_ToRep>(static_cast<_CR>(_Dur.count()) / static_cast<_CR>(_CF::den)));\r\n            } else {\r\n                return static_cast<_To>(static_cast<_ToRep>(\r\n                    static_cast<_CR>(_Dur.count()) * static_cast<_CR>(_CF::num) / static_cast<_CR>(_CF::den)));\r\n            }\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD template <class _To, class _Rep, class _Period, enable_if_t<_Is_duration_v<_To>, int> = 0>\r\n    _NODISCARD constexpr _To floor(const duration<_Rep, _Period>& _Dur)\r\n        noexcept(is_arithmetic_v<_Rep> && is_arithmetic_v<typename _To::rep>) /* strengthened */ {\r\n        // convert duration to another duration; round towards negative infinity\r\n        // i.e. the greatest integral result such that the result <= _Dur\r\n        const _To _Casted{_CHRONO duration_cast<_To>(_Dur)};\r\n        if (_Casted > _Dur) {\r\n            return _To{_Casted.count() - static_cast<typename _To::rep>(1)};\r\n        }\r\n\r\n        return _Casted;\r\n    }\r\n\r\n    _EXPORT_STD template <class _To, class _Rep, class _Period, enable_if_t<_Is_duration_v<_To>, int> = 0>\r\n    _NODISCARD constexpr _To ceil(const duration<_Rep, _Period>& _Dur)\r\n        noexcept(is_arithmetic_v<_Rep> && is_arithmetic_v<typename _To::rep>) /* strengthened */ {\r\n        // convert duration to another duration; round towards positive infinity\r\n        // i.e. the least integral result such that _Dur <= the result\r\n        const _To _Casted{_CHRONO duration_cast<_To>(_Dur)};\r\n        if (_Casted < _Dur) {\r\n            return _To{_Casted.count() + static_cast<typename _To::rep>(1)};\r\n        }\r\n\r\n        return _Casted;\r\n    }\r\n\r\n    template <class _Rep>\r\n    constexpr bool _Is_even(_Rep _Val) noexcept(is_arithmetic_v<_Rep>) /* strengthened */ {\r\n        // Tests whether _Val is even\r\n        return _Val % 2 == 0;\r\n    }\r\n\r\n    _EXPORT_STD template <class _To, class _Rep, class _Period,\r\n        enable_if_t<_Is_duration_v<_To> && !treat_as_floating_point_v<typename _To::rep>, int> = 0>\r\n    _NODISCARD constexpr _To round(const duration<_Rep, _Period>& _Dur)\r\n        noexcept(is_arithmetic_v<_Rep> && is_arithmetic_v<typename _To::rep>) /* strengthened */ {\r\n        // convert duration to another duration, round to nearest, ties to even\r\n        const _To _Floored{_CHRONO floor<_To>(_Dur)};\r\n        const _To _Ceiled{_Floored + _To{1}};\r\n        const auto _Floor_adjustment = _Dur - _Floored;\r\n        const auto _Ceil_adjustment  = _Ceiled - _Dur;\r\n        if (_Floor_adjustment < _Ceil_adjustment\r\n            || (_Floor_adjustment == _Ceil_adjustment && _Is_even(_Floored.count()))) {\r\n            return _Floored;\r\n        }\r\n\r\n        return _Ceiled;\r\n    }\r\n\r\n    _EXPORT_STD template <class _Rep, class _Period, enable_if_t<numeric_limits<_Rep>::is_signed, int> = 0>\r\n    _NODISCARD constexpr duration<_Rep, _Period> abs(const duration<_Rep, _Period> _Dur)\r\n        noexcept(is_arithmetic_v<_Rep>) /* strengthened */ {\r\n        // create a duration whose count() is the absolute value of _Dur.count()\r\n        if (_Dur < duration<_Rep, _Period>::zero()) {\r\n            return -_Dur;\r\n        } else {\r\n            return _Dur;\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD using nanoseconds  = duration<long long, nano>;\r\n    _EXPORT_STD using microseconds = duration<long long, micro>;\r\n    _EXPORT_STD using milliseconds = duration<long long, milli>;\r\n    _EXPORT_STD using seconds      = duration<long long>;\r\n    _EXPORT_STD using minutes      = duration<int, ratio<60>>;\r\n    _EXPORT_STD using hours        = duration<int, ratio<3600>>;\r\n#if _HAS_CXX20\r\n    _EXPORT_STD using days   = duration<int, ratio_multiply<ratio<24>, hours::period>>;\r\n    _EXPORT_STD using weeks  = duration<int, ratio_multiply<ratio<7>, days::period>>;\r\n    _EXPORT_STD using years  = duration<int, ratio_multiply<ratio<146097, 400>, days::period>>;\r\n    _EXPORT_STD using months = duration<int, ratio_divide<years::period, ratio<12>>>;\r\n#endif // _HAS_CXX20\r\n\r\n    _EXPORT_STD template <class _Clock, class _Duration, class _Rep, class _Period>\r\n    _NODISCARD constexpr time_point<_Clock, common_type_t<_Duration, duration<_Rep, _Period>>> operator+(\r\n        const time_point<_Clock, _Duration>& _Left, const duration<_Rep, _Period>& _Right)\r\n        noexcept(is_arithmetic_v<typename _Duration::rep> && is_arithmetic_v<_Rep>) /* strengthened */ {\r\n        using _RT = time_point<_Clock, common_type_t<_Duration, duration<_Rep, _Period>>>;\r\n        return _RT(_Left.time_since_epoch() + _Right);\r\n    }\r\n\r\n    _EXPORT_STD template <class _Rep, class _Period, class _Clock, class _Duration>\r\n    _NODISCARD constexpr time_point<_Clock, common_type_t<duration<_Rep, _Period>, _Duration>> operator+(\r\n        const duration<_Rep, _Period>& _Left, const time_point<_Clock, _Duration>& _Right)\r\n        noexcept(is_arithmetic_v<_Rep> && is_arithmetic_v<typename _Duration::rep>) /* strengthened */ {\r\n        return _Right + _Left;\r\n    }\r\n\r\n    _EXPORT_STD template <class _Clock, class _Duration, class _Rep, class _Period>\r\n    _NODISCARD constexpr time_point<_Clock, common_type_t<_Duration, duration<_Rep, _Period>>> operator-(\r\n        const time_point<_Clock, _Duration>& _Left, const duration<_Rep, _Period>& _Right)\r\n        noexcept(is_arithmetic_v<typename _Duration::rep> && is_arithmetic_v<_Rep>) /* strengthened */ {\r\n        using _RT = time_point<_Clock, common_type_t<_Duration, duration<_Rep, _Period>>>;\r\n        return _RT(_Left.time_since_epoch() - _Right);\r\n    }\r\n\r\n    _EXPORT_STD template <class _Clock, class _Duration1, class _Duration2>\r\n    _NODISCARD constexpr common_type_t<_Duration1, _Duration2> operator-(\r\n        const time_point<_Clock, _Duration1>& _Left, const time_point<_Clock, _Duration2>& _Right)\r\n        noexcept(\r\n            is_arithmetic_v<typename _Duration1::rep> && is_arithmetic_v<typename _Duration2::rep>) /* strengthened */ {\r\n        return _Left.time_since_epoch() - _Right.time_since_epoch();\r\n    }\r\n\r\n    _EXPORT_STD template <class _Clock, class _Duration1, class _Duration2>\r\n    _NODISCARD constexpr bool operator==(\r\n        const time_point<_Clock, _Duration1>& _Left, const time_point<_Clock, _Duration2>& _Right)\r\n        noexcept(\r\n            is_arithmetic_v<typename _Duration1::rep> && is_arithmetic_v<typename _Duration2::rep>) /* strengthened */ {\r\n        return _Left.time_since_epoch() == _Right.time_since_epoch();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    template <class _Clock, class _Duration1, class _Duration2>\r\n    _NODISCARD constexpr bool operator!=(\r\n        const time_point<_Clock, _Duration1>& _Left, const time_point<_Clock, _Duration2>& _Right)\r\n        noexcept(\r\n            is_arithmetic_v<typename _Duration1::rep> && is_arithmetic_v<typename _Duration2::rep>) /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    _EXPORT_STD template <class _Clock, class _Duration1, class _Duration2>\r\n    _NODISCARD constexpr bool operator<(\r\n        const time_point<_Clock, _Duration1>& _Left, const time_point<_Clock, _Duration2>& _Right)\r\n        noexcept(\r\n            is_arithmetic_v<typename _Duration1::rep> && is_arithmetic_v<typename _Duration2::rep>) /* strengthened */ {\r\n        return _Left.time_since_epoch() < _Right.time_since_epoch();\r\n    }\r\n\r\n    _EXPORT_STD template <class _Clock, class _Duration1, class _Duration2>\r\n    _NODISCARD constexpr bool operator<=(\r\n        const time_point<_Clock, _Duration1>& _Left, const time_point<_Clock, _Duration2>& _Right)\r\n        noexcept(\r\n            is_arithmetic_v<typename _Duration1::rep> && is_arithmetic_v<typename _Duration2::rep>) /* strengthened */ {\r\n        return !(_Right < _Left);\r\n    }\r\n\r\n    _EXPORT_STD template <class _Clock, class _Duration1, class _Duration2>\r\n    _NODISCARD constexpr bool operator>(\r\n        const time_point<_Clock, _Duration1>& _Left, const time_point<_Clock, _Duration2>& _Right)\r\n        noexcept(\r\n            is_arithmetic_v<typename _Duration1::rep> && is_arithmetic_v<typename _Duration2::rep>) /* strengthened */ {\r\n        return _Right < _Left;\r\n    }\r\n\r\n    _EXPORT_STD template <class _Clock, class _Duration1, class _Duration2>\r\n    _NODISCARD constexpr bool operator>=(\r\n        const time_point<_Clock, _Duration1>& _Left, const time_point<_Clock, _Duration2>& _Right)\r\n        noexcept(\r\n            is_arithmetic_v<typename _Duration1::rep> && is_arithmetic_v<typename _Duration2::rep>) /* strengthened */ {\r\n        return !(_Left < _Right);\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _EXPORT_STD template <class _Clock, class _Duration1, three_way_comparable_with<_Duration1> _Duration2>\r\n    _NODISCARD constexpr auto operator<=>(\r\n        const time_point<_Clock, _Duration1>& _Left, const time_point<_Clock, _Duration2>& _Right)\r\n        noexcept(\r\n            is_arithmetic_v<typename _Duration1::rep> && is_arithmetic_v<typename _Duration2::rep>) /* strengthened */ {\r\n        return _Left.time_since_epoch() <=> _Right.time_since_epoch();\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    _EXPORT_STD template <class _To, class _Clock, class _Duration, enable_if_t<_Is_duration_v<_To>, int> = 0>\r\n    _NODISCARD constexpr time_point<_Clock, _To> time_point_cast(const time_point<_Clock, _Duration>& _Time)\r\n        noexcept(is_arithmetic_v<typename _Duration::rep> && is_arithmetic_v<typename _To::rep>) /* strengthened */ {\r\n        // change the duration type of a time_point; truncate\r\n        return time_point<_Clock, _To>(_CHRONO duration_cast<_To>(_Time.time_since_epoch()));\r\n    }\r\n\r\n    _EXPORT_STD template <class _To, class _Clock, class _Duration, enable_if_t<_Is_duration_v<_To>, int> = 0>\r\n    _NODISCARD constexpr time_point<_Clock, _To> floor(const time_point<_Clock, _Duration>& _Time)\r\n        noexcept(is_arithmetic_v<typename _Duration::rep> && is_arithmetic_v<typename _To::rep>) /* strengthened */ {\r\n        // change the duration type of a time_point; round towards negative infinity\r\n        return time_point<_Clock, _To>(_CHRONO floor<_To>(_Time.time_since_epoch()));\r\n    }\r\n\r\n    _EXPORT_STD template <class _To, class _Clock, class _Duration, enable_if_t<_Is_duration_v<_To>, int> = 0>\r\n    _NODISCARD constexpr time_point<_Clock, _To> ceil(const time_point<_Clock, _Duration>& _Time)\r\n        noexcept(is_arithmetic_v<typename _Duration::rep> && is_arithmetic_v<typename _To::rep>) /* strengthened */ {\r\n        // change the duration type of a time_point; round towards positive infinity\r\n        return time_point<_Clock, _To>(_CHRONO ceil<_To>(_Time.time_since_epoch()));\r\n    }\r\n\r\n    _EXPORT_STD template <class _To, class _Clock, class _Duration,\r\n        enable_if_t<_Is_duration_v<_To> && !treat_as_floating_point_v<typename _To::rep>, int> = 0>\r\n    _NODISCARD constexpr time_point<_Clock, _To> round(const time_point<_Clock, _Duration>& _Time)\r\n        noexcept(is_arithmetic_v<typename _Duration::rep> && is_arithmetic_v<typename _To::rep>) /* strengthened */ {\r\n        // change the duration type of a time_point; round to nearest, ties to even\r\n        return time_point<_Clock, _To>(_CHRONO round<_To>(_Time.time_since_epoch()));\r\n    }\r\n\r\n    _EXPORT_STD struct steady_clock { // wraps QueryPerformanceCounter\r\n        using rep                       = long long;\r\n        using period                    = nano;\r\n        using duration                  = nanoseconds;\r\n        using time_point                = _CHRONO time_point<steady_clock>;\r\n        static constexpr bool is_steady = true;\r\n\r\n        _NODISCARD static time_point now() noexcept { // get current time\r\n            const long long _Freq = _Query_perf_frequency(); // doesn't change after system boot\r\n            const long long _Ctr  = _Query_perf_counter();\r\n            _STL_INTERNAL_STATIC_ASSERT(period::num == 1);\r\n            // The compiler recognizes the constants for frequency and time period and uses shifts and\r\n            // multiplies instead of divides to calculate the nanosecond value.\r\n            constexpr long long _TenMHz        = 10'000'000;\r\n            constexpr long long _TwentyFourMHz = 24'000'000;\r\n            if (_Freq == _TenMHz) {\r\n                // 10 MHz is a very common QPC frequency on modern x86/x64 PCs. Optimizing for\r\n                // this specific frequency can double the performance of this function by\r\n                // avoiding the expensive frequency conversion path.\r\n                _STL_INTERNAL_STATIC_ASSERT(period::den % _TenMHz == 0);\r\n                constexpr long long _Multiplier = period::den / _TenMHz;\r\n                return time_point(duration(_Ctr * _Multiplier));\r\n            } else if (_Freq == _TwentyFourMHz) {\r\n                // 24 MHz is a common frequency on ARM64, including cases where it emulates x86/x64.\r\n                constexpr long long _Multiplier_whole = period::den / _TwentyFourMHz;\r\n                using _Multiplier_part                = ratio<period::den % _TwentyFourMHz, _TwentyFourMHz>;\r\n                constexpr long long _Multiplier_num   = _Multiplier_part::num;\r\n                constexpr long long _Multiplier_den   = _Multiplier_part::den;\r\n                // This assumes that _Ctr * _Multiplier_num doesn't overflow.\r\n                _STL_INTERNAL_STATIC_ASSERT(_Multiplier_num <= _Multiplier_whole);\r\n                const long long _Whole = _Ctr * _Multiplier_whole;\r\n                const long long _Part  = _Ctr * _Multiplier_num / _Multiplier_den;\r\n                return time_point(duration(_Whole + _Part));\r\n            } else {\r\n                // Instead of just having \"(_Ctr * period::den) / _Freq\",\r\n                // the algorithm below prevents overflow when _Ctr is sufficiently large.\r\n                // It assumes that _Freq * period::den does not overflow, which is currently true for nano period.\r\n                // It is not realistic for _Ctr to accumulate to large values from zero with this assumption,\r\n                // but the initial value of _Ctr could be large.\r\n                const long long _Whole = (_Ctr / _Freq) * period::den;\r\n                const long long _Part  = (_Ctr % _Freq) * period::den / _Freq;\r\n                return time_point(duration(_Whole + _Part));\r\n            }\r\n        }\r\n    };\r\n} // namespace chrono\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_CHRONO_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_cxx_stdatomic.hpp",
    "content": "// __msvc_cxx_stdatomic.hpp internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef __MSVC_CXX_STDATOMIC_HPP\r\n#define __MSVC_CXX_STDATOMIC_HPP\r\n\r\n// see _STL_COMPILER_PREPROCESSOR in yvals_core.h\r\n#if !defined(RC_INVOKED) && !defined(Q_MOC_RUN) && !defined(__midl)\r\n\r\n// provide a specific error message for C compilers, before the general error message in yvals_core.h\r\n#ifndef __cplusplus\r\n#error <__msvc_cxx_stdatomic.hpp> is an internal header. It is incompatible with C and should not be directly included.\r\n#endif // !defined(__cplusplus)\r\n\r\n#include <yvals.h>\r\n\r\n#ifdef _M_CEE_PURE\r\n#error <stdatomic.h> is not supported when compiling with /clr:pure.\r\n#endif // defined(_M_CEE_PURE)\r\n\r\n#if !_HAS_CXX23\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <stdatomic.h> are available only with C++23 or later.\");\r\n#else // ^^^ !_HAS_CXX23 / _HAS_CXX23 vvv\r\n\r\n#include <atomic>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\ntemplate <class _Ty>\r\nusing _Std_atomic = _STD atomic<_Ty>;\r\n\r\n#define _Atomic(T) _Std_atomic<T>\r\n\r\nusing _STD memory_order;\r\nusing _STD memory_order_relaxed;\r\nusing _STD memory_order_consume;\r\nusing _STD memory_order_acquire;\r\nusing _STD memory_order_release;\r\nusing _STD memory_order_acq_rel;\r\nusing _STD memory_order_seq_cst;\r\n\r\nusing _STD atomic_flag;\r\n\r\nusing _STD atomic_bool;\r\nusing _STD atomic_char;\r\nusing _STD atomic_schar;\r\nusing _STD atomic_uchar;\r\nusing _STD atomic_short;\r\nusing _STD atomic_ushort;\r\nusing _STD atomic_int;\r\nusing _STD atomic_uint;\r\nusing _STD atomic_long;\r\nusing _STD atomic_ulong;\r\nusing _STD atomic_llong;\r\nusing _STD atomic_ullong;\r\n\r\n#ifdef __cpp_lib_char8_t\r\nusing _STD atomic_char8_t;\r\n#endif // defined(__cpp_lib_char8_t)\r\n\r\nusing _STD atomic_char16_t;\r\nusing _STD atomic_char32_t;\r\nusing _STD atomic_wchar_t;\r\nusing _STD atomic_int8_t;\r\nusing _STD atomic_uint8_t;\r\nusing _STD atomic_int16_t;\r\nusing _STD atomic_uint16_t;\r\nusing _STD atomic_int32_t;\r\nusing _STD atomic_uint32_t;\r\nusing _STD atomic_int64_t;\r\nusing _STD atomic_uint64_t;\r\nusing _STD atomic_int_least8_t;\r\nusing _STD atomic_uint_least8_t;\r\nusing _STD atomic_int_least16_t;\r\nusing _STD atomic_uint_least16_t;\r\nusing _STD atomic_int_least32_t;\r\nusing _STD atomic_uint_least32_t;\r\nusing _STD atomic_int_least64_t;\r\nusing _STD atomic_uint_least64_t;\r\nusing _STD atomic_int_fast8_t;\r\nusing _STD atomic_uint_fast8_t;\r\nusing _STD atomic_int_fast16_t;\r\nusing _STD atomic_uint_fast16_t;\r\nusing _STD atomic_int_fast32_t;\r\nusing _STD atomic_uint_fast32_t;\r\nusing _STD atomic_int_fast64_t;\r\nusing _STD atomic_uint_fast64_t;\r\nusing _STD atomic_intptr_t;\r\nusing _STD atomic_uintptr_t;\r\nusing _STD atomic_size_t;\r\nusing _STD atomic_ptrdiff_t;\r\nusing _STD atomic_intmax_t;\r\nusing _STD atomic_uintmax_t;\r\n\r\nusing _STD atomic_is_lock_free;\r\nusing _STD atomic_load;\r\nusing _STD atomic_load_explicit;\r\nusing _STD atomic_store;\r\nusing _STD atomic_store_explicit;\r\nusing _STD atomic_exchange;\r\nusing _STD atomic_exchange_explicit;\r\nusing _STD atomic_compare_exchange_strong;\r\nusing _STD atomic_compare_exchange_strong_explicit;\r\nusing _STD atomic_compare_exchange_weak;\r\nusing _STD atomic_compare_exchange_weak_explicit;\r\nusing _STD atomic_fetch_add;\r\nusing _STD atomic_fetch_add_explicit;\r\nusing _STD atomic_fetch_sub;\r\nusing _STD atomic_fetch_sub_explicit;\r\nusing _STD atomic_fetch_or;\r\nusing _STD atomic_fetch_or_explicit;\r\nusing _STD atomic_fetch_xor;\r\nusing _STD atomic_fetch_xor_explicit;\r\nusing _STD atomic_fetch_and;\r\nusing _STD atomic_fetch_and_explicit;\r\nusing _STD atomic_flag_test_and_set;\r\nusing _STD atomic_flag_test_and_set_explicit;\r\nusing _STD atomic_flag_clear;\r\nusing _STD atomic_flag_clear_explicit;\r\n\r\nusing _STD atomic_thread_fence;\r\nusing _STD atomic_signal_fence;\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n\r\n#endif // !defined(RC_INVOKED) && !defined(Q_MOC_RUN) && !defined(__midl)\r\n#endif // __MSVC_CXX_STDATOMIC_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_filebuf.hpp",
    "content": "// __msvc_filebuf.hpp internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef __MSVC_FILEBUF_HPP\r\n#define __MSVC_FILEBUF_HPP\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <cstdio>\r\n#include <streambuf>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, ABI: The _Path_ish functions accepting filesystem::path are templates\r\n// which always use the same types as a workaround for user code deriving from iostreams types and\r\n// __declspec(dllexport)ing the derived types. Adding member functions to iostreams broke the ABI of such DLLs.\r\n// Deriving and __declspec(dllexport)ing standard library types is not supported, but in this particular case\r\n// the workaround was inexpensive. The workaround will be removed in the next ABI breaking release of the\r\n// Visual C++ Libraries.\r\n_STD_BEGIN\r\n#if _HAS_CXX17\r\nnamespace filesystem {\r\n    _EXPORT_STD class path;\r\n}\r\n#endif // _HAS_CXX17\r\n\r\nextern \"C++\" _CRTIMP2_PURE FILE* __CLRCALL_PURE_OR_CDECL _Fiopen(const char*, ios_base::openmode, int);\r\nextern \"C++\" _CRTIMP2_PURE FILE* __CLRCALL_PURE_OR_CDECL _Fiopen(const wchar_t*, ios_base::openmode, int);\r\n\r\ntemplate <class _Elem>\r\nbool _Fgetc(_Elem& _Ch, FILE* _File) { // get an element from a C stream\r\n    return _CSTD fread(&_Ch, sizeof(_Elem), 1, _File) == 1;\r\n}\r\n\r\ntemplate <>\r\ninline bool _Fgetc(char& _Byte, FILE* _File) { // get a char element from a C stream\r\n    int _Meta;\r\n    if ((_Meta = _CSTD fgetc(_File)) == EOF) {\r\n        return false;\r\n    } else { // got one, convert to char\r\n        _Byte = static_cast<char>(_Meta);\r\n        return true;\r\n    }\r\n}\r\n\r\ntemplate <>\r\ninline bool _Fgetc(wchar_t& _Wchar, FILE* _File) { // get a wchar_t element from a C stream\r\n    wint_t _Meta;\r\n    if ((_Meta = _CSTD fgetwc(_File)) == WEOF) {\r\n        return false;\r\n    } else { // got one, convert to wchar_t\r\n        _Wchar = static_cast<wchar_t>(_Meta);\r\n        return true;\r\n    }\r\n}\r\n\r\n#ifdef _CRTBLD\r\ntemplate <>\r\ninline bool _Fgetc(unsigned short& _Wchar, FILE* _File) { // get an unsigned short element from a C stream\r\n    wint_t _Meta;\r\n    if ((_Meta = _CSTD fgetwc(_File)) == WEOF) {\r\n        return false;\r\n    } else { // got one, convert to unsigned short\r\n        _Wchar = static_cast<unsigned short>(_Meta);\r\n        return true;\r\n    }\r\n}\r\n#endif // defined(_CRTBLD)\r\n\r\ntemplate <class _Elem>\r\nbool _Fputc(_Elem _Ch, FILE* _File) { // put an element to a C stream\r\n    return _CSTD fwrite(&_Ch, 1, sizeof(_Elem), _File) == sizeof(_Elem);\r\n}\r\n\r\ntemplate <>\r\ninline bool _Fputc(char _Byte, FILE* _File) { // put a char element to a C stream\r\n    return _CSTD fputc(_Byte, _File) != EOF;\r\n}\r\n\r\ntemplate <>\r\ninline bool _Fputc(wchar_t _Wchar, FILE* _File) { // put a wchar_t element to a C stream\r\n    return _CSTD fputwc(_Wchar, _File) != WEOF;\r\n}\r\n\r\n#ifdef _CRTBLD\r\ntemplate <>\r\ninline bool _Fputc(unsigned short _Wchar, FILE* _File) { // put an unsigned short element to a C stream\r\n    return _CSTD fputwc(_Wchar, _File) != WEOF;\r\n}\r\n#endif // defined(_CRTBLD)\r\n\r\ntemplate <class _Elem>\r\nbool _Ungetc(const _Elem&, FILE*) { // put back an arbitrary element to a C stream (always fail)\r\n    return false;\r\n}\r\n\r\ntemplate <>\r\ninline bool _Ungetc(const char& _Byte, FILE* _File) { // put back a char element to a C stream\r\n    return _CSTD ungetc(static_cast<unsigned char>(_Byte), _File) != EOF;\r\n}\r\n\r\ntemplate <>\r\ninline bool _Ungetc(const signed char& _Byte, FILE* _File) { // put back a signed char element to a C stream\r\n    return _CSTD ungetc(static_cast<unsigned char>(_Byte), _File) != EOF;\r\n}\r\n\r\ntemplate <>\r\ninline bool _Ungetc(const unsigned char& _Byte, FILE* _File) { // put back an unsigned char element to a C stream\r\n    return _CSTD ungetc(_Byte, _File) != EOF;\r\n}\r\n\r\ntemplate <>\r\ninline bool _Ungetc(const wchar_t& _Wchar, FILE* _File) { // put back a wchar_t element to a C stream\r\n    return _CSTD ungetwc(_Wchar, _File) != WEOF;\r\n}\r\n\r\n#ifdef _CRTBLD\r\ntemplate <>\r\ninline bool _Ungetc(const unsigned short& _Wchar, FILE* _File) { // put back an unsigned short element to a C stream\r\n    return _CSTD ungetwc(_Wchar, _File) != WEOF;\r\n}\r\n#endif // defined(_CRTBLD)\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nclass basic_filebuf : public basic_streambuf<_Elem, _Traits> { // stream buffer associated with a C stream\r\npublic:\r\n    using _Mysb = basic_streambuf<_Elem, _Traits>;\r\n    using _Cvt  = codecvt<_Elem, char, typename _Traits::state_type>;\r\n\r\n    basic_filebuf() : _Mysb() {\r\n        _Init(nullptr, _Newfl);\r\n    }\r\n\r\n    explicit basic_filebuf(FILE* const _File) : _Mysb() { // extension, no ownership taking\r\n        _Init(_File, _Newfl);\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ~basic_filebuf() noexcept override {\r\n        if (_Myfile) {\r\n            _Reset_back(); // revert from _Mychar buffer\r\n        }\r\n\r\n        if (_Closef) {\r\n            close();\r\n        }\r\n    }\r\n\r\n    using int_type = typename _Traits::int_type;\r\n    using pos_type = typename _Traits::pos_type;\r\n    using off_type = typename _Traits::off_type;\r\n\r\n    basic_filebuf(_Uninitialized) noexcept : _Mysb(_Noinit) {}\r\n\r\n    basic_filebuf(basic_filebuf&& _Right) {\r\n        _Init(_Right._Myfile, _Newfl); // match buffering styles\r\n        _Init(static_cast<FILE*>(nullptr), _Closefl); // then make *this look closed\r\n        _Assign_rv(_STD move(_Right));\r\n    }\r\n\r\n    basic_filebuf& operator=(basic_filebuf&& _Right) {\r\n        _Assign_rv(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    void _Assign_rv(basic_filebuf&& _Right) {\r\n        if (this != _STD addressof(_Right)) {\r\n            close();\r\n            this->swap(_Right);\r\n        }\r\n    }\r\n\r\n    void swap(basic_filebuf& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            FILE* _Myfile_sav                       = _Myfile;\r\n            const _Cvt* _Pcvt_sav                   = _Pcvt;\r\n            typename _Traits::state_type _State_sav = _State;\r\n            bool _Wrotesome_sav                     = _Wrotesome;\r\n            bool _Closef_sav                        = _Closef;\r\n            bool _Set_eback_sav                     = _Mysb::eback() == &_Mychar;\r\n            bool _Set_eback_live                    = _Mysb::gptr() == &_Mychar;\r\n\r\n            _Elem* _Pfirst0 = _Mysb::pbase();\r\n            _Elem* _Pnext0  = _Mysb::pptr();\r\n            _Elem* _Pend    = _Mysb::epptr();\r\n            _Elem* _Gfirst0 = _Mysb::eback();\r\n            _Elem* _Gnext0  = _Mysb::gptr();\r\n            _Elem* _Gend    = _Mysb::egptr();\r\n\r\n            // reinitialize *this\r\n            _Init(_Right._Myfile, _Right._Myfile ? _Openfl : _Newfl);\r\n            _Mysb::setp(_Right.pbase(), _Right.pptr(), _Right.epptr());\r\n            if (_Right.eback() != &_Right._Mychar) {\r\n                _Mysb::setg(_Right.eback(), _Right.gptr(), _Right.egptr());\r\n            } else if (_Right.gptr() != &_Right._Mychar) {\r\n                _Mysb::setg(&_Mychar, &_Mychar + 1, &_Mychar + 1);\r\n            } else {\r\n                _Mysb::setg(&_Mychar, &_Mychar, &_Mychar + 1);\r\n            }\r\n\r\n            _Pcvt      = _Right._Pcvt;\r\n            _State     = _Right._State;\r\n            _Wrotesome = _Right._Wrotesome;\r\n            _Closef    = _Right._Closef;\r\n\r\n            // reinitialize _Right\r\n            _Right._Init(_Myfile_sav, _Myfile_sav ? _Openfl : _Newfl);\r\n            _Right.setp(_Pfirst0, _Pnext0, _Pend);\r\n            if (!_Set_eback_sav) {\r\n                _Right.setg(_Gfirst0, _Gnext0, _Gend);\r\n            } else if (!_Set_eback_live) {\r\n                _Right.setg(&_Right._Mychar, &_Right._Mychar + 1, &_Right._Mychar + 1);\r\n            } else {\r\n                _Right.setg(&_Right._Mychar, &_Right._Mychar, &_Right._Mychar + 1);\r\n            }\r\n\r\n            _Right._Pcvt      = _Pcvt_sav;\r\n            _Right._State     = _State_sav;\r\n            _Right._Wrotesome = _Wrotesome_sav;\r\n            _Right._Closef    = _Closef_sav;\r\n\r\n            // swap ancillary data\r\n            _STD swap(_Set_eback, _Right._Set_eback);\r\n            _STD swap(_Set_egptr, _Right._Set_egptr);\r\n\r\n            _STD swap(_Mychar, _Right._Mychar);\r\n            _STD swap(_Mysb::_Plocale, _Right._Plocale);\r\n        }\r\n    }\r\n\r\n    basic_filebuf(const basic_filebuf&)            = delete;\r\n    basic_filebuf& operator=(const basic_filebuf&) = delete;\r\n\r\n    enum _Initfl { // reasons for a call to _Init\r\n        _Newfl,\r\n        _Openfl,\r\n        _Closefl\r\n    };\r\n\r\n    _NODISCARD bool is_open() const noexcept /* strengthened */ {\r\n        return static_cast<bool>(_Myfile);\r\n    }\r\n\r\n    basic_filebuf* open(const char* _Filename, ios_base::openmode _Mode, int _Prot = ios_base::_Default_open_prot) {\r\n        // _Prot is an extension\r\n        if (_Myfile) {\r\n            return nullptr;\r\n        }\r\n\r\n        const auto _File = _Fiopen(_Filename, _Mode, _Prot);\r\n        if (!_File) {\r\n            return nullptr; // open failed\r\n        }\r\n\r\n        _Init(_File, _Openfl);\r\n        _Initcvt(_STD use_facet<_Cvt>(_Mysb::getloc()));\r\n        return this; // open succeeded\r\n    }\r\n\r\n    basic_filebuf* open(const string& _Str, ios_base::openmode _Mode, int _Prot = ios_base::_Default_open_prot) {\r\n        // _Prot is an extension\r\n        return open(_Str.c_str(), _Mode, _Prot);\r\n    }\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    basic_filebuf* open(const char* _Filename, ios_base::open_mode _Mode) {\r\n        return open(_Filename, static_cast<ios_base::openmode>(_Mode));\r\n    }\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    basic_filebuf* open(const wchar_t* _Filename, ios_base::openmode _Mode, int _Prot = ios_base::_Default_open_prot) {\r\n        // in standard as const std::filesystem::path::value_type *; _Prot is an extension\r\n        if (_Myfile) {\r\n            return nullptr;\r\n        }\r\n\r\n        const auto _File = _Fiopen(_Filename, _Mode, _Prot);\r\n        if (!_File) {\r\n            return nullptr; // open failed\r\n        }\r\n\r\n        _Init(_File, _Openfl);\r\n        _Initcvt(_STD use_facet<_Cvt>(_Mysb::getloc()));\r\n        return this; // open succeeded\r\n    }\r\n\r\n    basic_filebuf* open(const wstring& _Str, ios_base::openmode _Mode, int _Prot = ios_base::_Default_open_prot) {\r\n        // extension\r\n        return open(_Str.c_str(), _Mode, _Prot);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <int = 0, class _Path_ish = filesystem::path>\r\n    basic_filebuf* open(\r\n        const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode, int _Prot = ios_base::_Default_open_prot) {\r\n        // _Prot is an extension\r\n        return open(_Path.c_str(), _Mode, _Prot);\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    basic_filebuf* open(const wchar_t* _Filename, ios_base::open_mode _Mode) {\r\n        // in standard as const std::filesystem::path::value_type *\r\n        return open(_Filename, static_cast<ios_base::openmode>(_Mode));\r\n    }\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    basic_filebuf* close() {\r\n        basic_filebuf* _Ans;\r\n        if (_Myfile) { // put any homing sequence and close file\r\n            _Reset_back(); // revert from _Mychar buffer\r\n\r\n            _Ans = this;\r\n            if (!_Endwrite()) {\r\n                _Ans = nullptr;\r\n            }\r\n\r\n            if (_CSTD fclose(_Myfile) != 0) {\r\n                _Ans = nullptr;\r\n            }\r\n        } else {\r\n            _Ans = nullptr;\r\n        }\r\n\r\n        _Init(nullptr, _Closefl);\r\n        return _Ans;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Lock() override { // lock file instead of stream buffer\r\n        if (_Myfile) {\r\n            _CSTD _lock_file(_Myfile);\r\n        }\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Unlock() override { // unlock file instead of stream buffer\r\n        if (_Myfile) {\r\n            _CSTD _unlock_file(_Myfile);\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23 && defined(_CPPRTTI)\r\n    template <class _UnicodeConsoleFn, class _FallbackFn, class _Filebuf_type>\r\n    friend ios_base::iostate _Do_on_maybe_unicode_console(ostream&, _UnicodeConsoleFn, _FallbackFn);\r\n#endif // ^^^ _HAS_CXX23 && defined(_CPPRTTI) ^^^\r\n\r\nprotected:\r\n    int_type __CLR_OR_THIS_CALL overflow(int_type _Meta = _Traits::eof()) override { // put an element to stream\r\n        if (_Traits::eq_int_type(_Traits::eof(), _Meta)) {\r\n            return _Traits::not_eof(_Meta); // EOF, return success code\r\n        }\r\n\r\n        if (_Mysb::pptr() && _Mysb::pptr() < _Mysb::epptr()) { // room in buffer, store it\r\n            *_Mysb::_Pninc() = _Traits::to_char_type(_Meta);\r\n            return _Meta;\r\n        }\r\n\r\n        if (!_Myfile) {\r\n            return _Traits::eof(); // no open C stream, fail\r\n        }\r\n\r\n        _Reset_back(); // revert from _Mychar buffer\r\n        if (!_Pcvt) { // no codecvt facet, put as is\r\n            return _Fputc(_Traits::to_char_type(_Meta), _Myfile) ? _Meta : _Traits::eof();\r\n        }\r\n\r\n        // put using codecvt facet\r\n        constexpr size_t _Codecvt_temp_buf = 32;\r\n        char _Str[_Codecvt_temp_buf];\r\n        const _Elem _Ch = _Traits::to_char_type(_Meta);\r\n        const _Elem* _Src;\r\n        char* _Dest;\r\n\r\n        // test result of converting one element\r\n        switch (_Pcvt->out(_State, &_Ch, &_Ch + 1, _Src, _Str, _Str + _Codecvt_temp_buf, _Dest)) {\r\n        case codecvt_base::partial:\r\n        case codecvt_base::ok:\r\n            { // converted something, try to put it out\r\n                const auto _Count = static_cast<size_t>(_Dest - _Str);\r\n                if (0 < _Count && _Count != static_cast<size_t>(_CSTD fwrite(_Str, 1, _Count, _Myfile))) {\r\n                    return _Traits::eof(); // write failed\r\n                }\r\n\r\n                _Wrotesome = true; // write succeeded\r\n                if (_Src != &_Ch) {\r\n                    return _Meta; // converted whole element\r\n                }\r\n\r\n                return _Traits::eof(); // conversion failed\r\n            }\r\n\r\n        case codecvt_base::noconv:\r\n            // no conversion, put as is\r\n            return _Fputc(_Ch, _Myfile) ? _Meta : _Traits::eof();\r\n\r\n        default:\r\n            return _Traits::eof(); // conversion failed\r\n        }\r\n    }\r\n\r\n    int_type __CLR_OR_THIS_CALL pbackfail(int_type _Meta = _Traits::eof()) override {\r\n        // put an element back to stream\r\n        if (_Mysb::gptr() && _Mysb::eback() < _Mysb::gptr()\r\n            && (_Traits::eq_int_type(_Traits::eof(), _Meta)\r\n                || _Traits::eq_int_type(_Traits::to_int_type(_Mysb::gptr()[-1]),\r\n                    _Meta))) { // just back up position\r\n            _Mysb::_Gndec();\r\n            return _Traits::not_eof(_Meta);\r\n        } else if (!_Myfile || _Traits::eq_int_type(_Traits::eof(), _Meta)) {\r\n            return _Traits::eof(); // no open C stream or EOF, fail\r\n        } else if (!_Pcvt && _Ungetc(_Traits::to_char_type(_Meta), _Myfile)) {\r\n            return _Meta; // no facet and unget succeeded, return\r\n        } else if (_Mysb::gptr() != &_Mychar) { // putback to _Mychar\r\n            _Mychar = _Traits::to_char_type(_Meta);\r\n            _Set_back(); // switch to _Mychar buffer\r\n            return _Meta;\r\n        } else {\r\n            return _Traits::eof(); // nowhere to put back\r\n        }\r\n    }\r\n\r\n    int_type __CLR_OR_THIS_CALL underflow() override { // get an element from stream, but don't point past it\r\n        int_type _Meta;\r\n        if (_Mysb::gptr() && _Mysb::gptr() < _Mysb::egptr()) {\r\n            return _Traits::to_int_type(*_Mysb::gptr()); // return buffered\r\n        } else if (_Traits::eq_int_type(_Traits::eof(), _Meta = uflow())) {\r\n            return _Meta; // uflow failed, return EOF\r\n        } else { // get a char, don't point past it\r\n            pbackfail(_Meta);\r\n            return _Meta;\r\n        }\r\n    }\r\n\r\n    int_type __CLR_OR_THIS_CALL uflow() override { // get an element from stream, point past it\r\n        if (_Mysb::gptr() && _Mysb::gptr() < _Mysb::egptr()) {\r\n            return _Traits::to_int_type(*_Mysb::_Gninc()); // return buffered\r\n        }\r\n\r\n        if (!_Myfile) {\r\n            return _Traits::eof(); // no open C stream, fail\r\n        }\r\n\r\n        _Reset_back(); // revert from _Mychar buffer\r\n        if (!_Pcvt) { // no codecvt facet, just get it\r\n            _Elem _Ch;\r\n            return _Fgetc(_Ch, _Myfile) ? _Traits::to_int_type(_Ch) : _Traits::eof();\r\n        }\r\n\r\n        // build string until codecvt succeeds\r\n        string _Str;\r\n\r\n        for (;;) { // get using codecvt facet\r\n            const char* _Src;\r\n            int _Meta = _CSTD fgetc(_Myfile);\r\n\r\n            if (_Meta == EOF) {\r\n                return _Traits::eof(); // partial char?\r\n            }\r\n\r\n            _Str.push_back(static_cast<char>(_Meta)); // append byte and convert\r\n\r\n            _Elem _Ch;\r\n            _Elem* _Dest;\r\n\r\n            // test result of converting one element\r\n            switch (_Pcvt->in(_State, _Str.data(), _Str.data() + _Str.size(), _Src, &_Ch, &_Ch + 1, _Dest)) {\r\n            case codecvt_base::partial:\r\n            case codecvt_base::ok:\r\n                if (_Dest != &_Ch) { // got an element, put back excess and deliver it\r\n                    auto _Nleft = _Str.data() + _Str.size() - _Src;\r\n                    while (0 < _Nleft) {\r\n                        _CSTD ungetc(_Src[--_Nleft], _Myfile);\r\n                    }\r\n\r\n                    return _Traits::to_int_type(_Ch);\r\n                }\r\n\r\n                _Str.erase(0, static_cast<size_t>(_Src - _Str.data())); // partial, discard used input\r\n                break;\r\n\r\n            case codecvt_base::noconv:\r\n                // noconv is only possible if _Elem is char, so we can use it directly\r\n                return static_cast<int_type>(_Str.front());\r\n\r\n            default:\r\n                return _Traits::eof(); // conversion failed\r\n            }\r\n        }\r\n    }\r\n\r\n    streamsize __CLR_OR_THIS_CALL xsgetn(_Elem* _Ptr, streamsize _Count) override {\r\n        // get _Count characters from stream\r\n        if constexpr (sizeof(_Elem) == 1) {\r\n            if (_Count <= 0) {\r\n                return 0;\r\n            }\r\n\r\n            if (_Pcvt) { // if we need a nontrivial codecvt transform, do the default expensive thing\r\n                return _Mysb::xsgetn(_Ptr, _Count);\r\n            }\r\n\r\n            // assuming this is OK because _Ptr + _Count must be valid\r\n            auto _Count_s           = static_cast<size_t>(_Count);\r\n            const auto _Start_count = _Count;\r\n            const auto _Available   = static_cast<size_t>(_Mysb::_Gnavail());\r\n            if (0 < _Available) { // copy from get area\r\n                const auto _Read_size = (_STD min) (_Count_s, _Available);\r\n                _Traits::copy(_Ptr, _Mysb::gptr(), _Read_size);\r\n                _Ptr += _Read_size;\r\n                _Count_s -= _Read_size;\r\n                _Mysb::gbump(static_cast<int>(_Read_size));\r\n            }\r\n\r\n            if (_Myfile) { // open C stream, attempt read\r\n                _Reset_back(); // revert from _Mychar buffer\r\n                // process in 4k - 1 chunks to avoid tripping over fread's clobber-the-end behavior when\r\n                // doing \\r\\n -> \\n translation\r\n                constexpr size_t _Read_size = 4095; // _INTERNAL_BUFSIZ - 1\r\n                while (_Read_size < _Count_s) {\r\n                    const auto _Actual_read = _CSTD fread(_Ptr, sizeof(_Elem), _Read_size, _Myfile);\r\n                    _Ptr += _Actual_read;\r\n                    _Count_s -= _Actual_read;\r\n                    if (_Actual_read != _Read_size) {\r\n                        return static_cast<streamsize>(_Start_count - _Count_s);\r\n                    }\r\n                }\r\n\r\n                if (0 < _Count_s) {\r\n                    _Count_s -= _CSTD fread(_Ptr, sizeof(_Elem), _Count_s, _Myfile);\r\n                }\r\n            }\r\n\r\n            return static_cast<streamsize>(_Start_count - _Count_s);\r\n        } else { // non-chars always get element-by-element processing\r\n            return _Mysb::xsgetn(_Ptr, _Count);\r\n        }\r\n    }\r\n\r\n    streamsize __CLR_OR_THIS_CALL xsputn(const _Elem* _Ptr, streamsize _Count) override {\r\n        // put _Count characters to stream\r\n        if constexpr (sizeof(_Elem) == 1) {\r\n            if (_Pcvt) { // if we need a nontrivial codecvt transform, do the default expensive thing\r\n                return _Mysb::xsputn(_Ptr, _Count);\r\n            }\r\n\r\n            const streamsize _Start_count = _Count;\r\n            streamsize _Size              = _Mysb::_Pnavail();\r\n            if (0 < _Count && 0 < _Size) { // copy to write buffer\r\n                if (_Count < _Size) {\r\n                    _Size = _Count;\r\n                }\r\n\r\n                _Traits::copy(_Mysb::pptr(), _Ptr, static_cast<size_t>(_Size));\r\n                _Ptr += _Size;\r\n                _Count -= _Size;\r\n                _Mysb::pbump(static_cast<int>(_Size));\r\n            }\r\n\r\n            if (0 < _Count && _Myfile) { // open C stream, attempt write\r\n                _Count -= _CSTD fwrite(_Ptr, sizeof(_Elem), static_cast<size_t>(_Count), _Myfile);\r\n            }\r\n\r\n            return _Start_count - _Count;\r\n        } else { // non-chars always get element-by-element processing\r\n            return _Mysb::xsputn(_Ptr, _Count);\r\n        }\r\n    }\r\n\r\n    pos_type __CLR_OR_THIS_CALL seekoff(off_type _Off, ios_base::seekdir _Way,\r\n        ios_base::openmode = ios_base::in | ios_base::out) override { // change position by _Off\r\n        fpos_t _Fileposition;\r\n\r\n        if (_Mysb::gptr() == &_Mychar // something putback\r\n            && _Way == ios_base::cur // a relative seek\r\n            && !_Pcvt) { // not converting\r\n            _Off -= static_cast<off_type>(sizeof(_Elem)); // back up over _Elem bytes\r\n        }\r\n\r\n        if (!_Myfile || !_Endwrite()\r\n            || ((_Off != 0 || _Way != ios_base::cur) && _CSTD _fseeki64(_Myfile, _Off, _Way) != 0)\r\n            || _CSTD fgetpos(_Myfile, &_Fileposition) != 0) {\r\n            return pos_type{off_type{-1}}; // report failure\r\n        }\r\n\r\n        _Reset_back(); // revert from _Mychar buffer, discarding any putback\r\n        return pos_type{_State, _Fileposition}; // return new position\r\n    }\r\n\r\n    pos_type __CLR_OR_THIS_CALL seekpos(pos_type _Pos, ios_base::openmode = ios_base::in | ios_base::out) override {\r\n        // change position to _Pos\r\n        off_type _Off = static_cast<off_type>(_Pos);\r\n\r\n        if (!_Myfile || !_Endwrite() || _CSTD fsetpos(_Myfile, &_Off) != 0) {\r\n            return pos_type{off_type{-1}}; // report failure\r\n        }\r\n\r\n        _State = _Pos.state();\r\n        _Reset_back(); // revert from _Mychar buffer, discarding any putback\r\n        return pos_type{_State, _Off}; // return new position\r\n    }\r\n\r\n    _Mysb* __CLR_OR_THIS_CALL setbuf(_Elem* _Buffer, streamsize _Count) override { // offer _Buffer to C stream\r\n        int _Mode;\r\n        if (!_Buffer && _Count == 0) {\r\n            _Mode = _IONBF;\r\n        } else {\r\n            _Mode = _IOFBF;\r\n        }\r\n\r\n        const size_t _Size = static_cast<size_t>(_Count) * sizeof(_Elem);\r\n\r\n        if (!_Myfile || _CSTD setvbuf(_Myfile, reinterpret_cast<char*>(_Buffer), _Mode, _Size) != 0) {\r\n            return nullptr; // failed\r\n        }\r\n\r\n        // new buffer, reinitialize pointers\r\n        _Init(_Myfile, _Openfl);\r\n        return this;\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL sync() override { // synchronize C stream with external file\r\n        if (!_Myfile || _Traits::eq_int_type(_Traits::eof(), overflow()) || 0 <= _CSTD fflush(_Myfile)) {\r\n            return 0;\r\n        }\r\n\r\n        return -1;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL imbue(const locale& _Loc) override {\r\n        // set locale to argument (capture nontrivial codecvt facet)\r\n        _Initcvt(_STD use_facet<_Cvt>(_Loc));\r\n    }\r\n\r\n    void _Init(FILE* _File, _Initfl _Which) noexcept { // initialize to C stream _File after {new, open, close}\r\n        using _State_type = typename _Traits::state_type;\r\n\r\n        __PURE_APPDOMAIN_GLOBAL static _State_type _Stinit; // initial state\r\n\r\n        _Closef    = _Which == _Openfl;\r\n        _Wrotesome = false;\r\n\r\n        _Mysb::_Init(); // initialize stream buffer base object\r\n\r\n        if (_File && sizeof(_Elem) == 1) { // point inside C stream with [first, first + count) buffer\r\n            _Elem** _Pb = nullptr;\r\n            _Elem** _Pn = nullptr;\r\n            int* _Nr    = nullptr;\r\n\r\n            ::_get_stream_buffer_pointers(\r\n                _File, reinterpret_cast<char***>(&_Pb), reinterpret_cast<char***>(&_Pn), &_Nr);\r\n            int* _Nw = _Nr;\r\n\r\n            _Mysb::_Init(_Pb, _Pn, _Nr, _Pb, _Pn, _Nw);\r\n        }\r\n\r\n        _Myfile = _File;\r\n        _State  = _Stinit;\r\n        _Pcvt   = nullptr; // pointer to codecvt facet\r\n    }\r\n\r\n    bool _Endwrite() { // put shift to initial conversion state, as needed\r\n        if (!_Pcvt || !_Wrotesome) {\r\n            return true;\r\n        }\r\n\r\n        // may have to put\r\n        if (_Traits::eq_int_type(_Traits::eof(), overflow())) {\r\n            return false;\r\n        }\r\n\r\n        constexpr size_t _Codecvt_temp_buf = 32;\r\n        char _Str[_Codecvt_temp_buf];\r\n        char* _Dest;\r\n        switch (_Pcvt->unshift(_State, _Str, _Str + _Codecvt_temp_buf, _Dest)) { // test result of homing conversion\r\n        case codecvt_base::ok:\r\n            _Wrotesome = false; // homed successfully\r\n            _FALLTHROUGH;\r\n\r\n        case codecvt_base::partial:\r\n            { // put any generated bytes\r\n                const auto _Count = static_cast<size_t>(_Dest - _Str);\r\n                if (0 < _Count && _Count != static_cast<size_t>(_CSTD fwrite(_Str, 1, _Count, _Myfile))) {\r\n                    return false; // write failed\r\n                }\r\n\r\n                return !_Wrotesome;\r\n            }\r\n\r\n        case codecvt_base::noconv:\r\n            _Wrotesome = false; // homed successfully\r\n            return true; // nothing else to do\r\n\r\n        default:\r\n            return false; // conversion failed\r\n        }\r\n    }\r\n\r\n    void _Initcvt(const _Cvt& _Newcvt) noexcept { // initialize codecvt pointer\r\n        if (_Newcvt.always_noconv()) {\r\n            _Pcvt = nullptr; // nothing to do\r\n        } else { // set up for nontrivial codecvt facet\r\n            _Pcvt = _STD addressof(_Newcvt);\r\n            _Mysb::_Init(); // reset any buffering\r\n        }\r\n    }\r\n\r\nprivate:\r\n    const _Cvt* _Pcvt; // pointer to codecvt facet (may be null)\r\n    _Elem _Mychar; // putback character, when _Ungetc fails\r\n    bool _Wrotesome; // true if homing sequence may be needed\r\n    typename _Traits::state_type _State; // current conversion state\r\n    bool _Closef; // true if C stream must be closed\r\n    FILE* _Myfile; // pointer to C stream\r\n\r\n    void _Reset_back() noexcept { // restore buffer after putback\r\n        if (_Mysb::eback() == &_Mychar) {\r\n            _Mysb::setg(_Set_eback, _Set_eback, _Set_egptr);\r\n        }\r\n    }\r\n\r\n    void _Set_back() noexcept { // set up putback area\r\n        if (_Mysb::eback() != &_Mychar) { // save current get buffer\r\n            _Set_eback = _Mysb::eback();\r\n            _Set_egptr = _Mysb::egptr();\r\n        }\r\n        _Mysb::setg(&_Mychar, &_Mychar, &_Mychar + 1);\r\n    }\r\n\r\n    _Elem* _Set_eback; // saves eback() during one-element putback\r\n    _Elem* _Set_egptr; // saves egptr()\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nvoid swap(basic_filebuf<_Elem, _Traits>& _Left, basic_filebuf<_Elem, _Traits>& _Right) noexcept /* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_FILEBUF_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_format_ucd_tables.hpp",
    "content": "// __msvc_format_ucd_tables.hpp internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// WARNING, this entire header is generated by\r\n// tools/unicode_properties_parse/unicode_properties_data_gen.py\r\n// DO NOT MODIFY!\r\n\r\n// UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE\r\n//\r\n// See Terms of Use <https://www.unicode.org/copyright.html>\r\n// for definitions of Unicode Inc.'s Data Files and Software.\r\n//\r\n// NOTICE TO USER: Carefully read the following legal agreement.\r\n// BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S\r\n// DATA FILES (\"DATA FILES\"), AND/OR SOFTWARE (\"SOFTWARE\"),\r\n// YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\n// TERMS AND CONDITIONS OF THIS AGREEMENT.\r\n// IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE\r\n// THE DATA FILES OR SOFTWARE.\r\n//\r\n// COPYRIGHT AND PERMISSION NOTICE\r\n//\r\n// Copyright (c) 1991-2022 Unicode, Inc. All rights reserved.\r\n// Distributed under the Terms of Use in https://www.unicode.org/copyright.html.\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining\r\n// a copy of the Unicode data files and any associated documentation\r\n// (the \"Data Files\") or Unicode software and any associated documentation\r\n// (the \"Software\") to deal in the Data Files or Software\r\n// without restriction, including without limitation the rights to use,\r\n// copy, modify, merge, publish, distribute, and/or sell copies of\r\n// the Data Files or Software, and to permit persons to whom the Data Files\r\n// or Software are furnished to do so, provided that either\r\n// (a) this copyright and permission notice appear with all copies\r\n// of the Data Files or Software, or\r\n// (b) this copyright and permission notice appear in associated\r\n// Documentation.\r\n//\r\n// THE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\r\n// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n// NONINFRINGEMENT OF THIRD PARTY RIGHTS.\r\n// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\r\n// NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\r\n// DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\r\n// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\r\n// TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n// PERFORMANCE OF THE DATA FILES OR SOFTWARE.\r\n//\r\n// Except as contained in this notice, the name of a copyright holder\r\n// shall not be used in advertising or otherwise to promote the sale,\r\n// use or other dealings in these Data Files or Software without prior\r\n// written authorization of the copyright holder.\r\n\r\n#ifndef __MSVC_FORMAT_UCD_TABLES_HPP\r\n#define __MSVC_FORMAT_UCD_TABLES_HPP\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <cstdint>\r\n#include <xutility>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\ntemplate <class _ValueEnum, size_t _NumRanges, bool _Is_binary_property>\r\nstruct _Unicode_property_data {\r\n    uint32_t _Lower_bounds[_NumRanges];\r\n    uint16_t _Props_and_size[_NumRanges];\r\n    _NODISCARD constexpr _ValueEnum _Get_property_for_codepoint(const uint32_t _Code_point) const noexcept {\r\n        ptrdiff_t _Upper_idx = _STD upper_bound(_Lower_bounds, _STD end(_Lower_bounds), _Code_point) - _Lower_bounds;\r\n        constexpr auto _No_value_constant = static_cast<_ValueEnum>(UINT8_MAX);\r\n        if (_Upper_idx == 0) {\r\n            return _No_value_constant;\r\n        }\r\n        --_Upper_idx;\r\n        const uint32_t _Lower_bound = _Lower_bounds[_Upper_idx];\r\n        const uint16_t _Data        = _Props_and_size[_Upper_idx];\r\n        _STL_INTERNAL_CHECK(_Code_point >= _Lower_bound);\r\n        if constexpr (_Is_binary_property) {\r\n            if (_Code_point < _Lower_bound + _Data) {\r\n                return static_cast<_ValueEnum>(0);\r\n            }\r\n        } else {\r\n            const uint16_t _Size   = static_cast<uint16_t>(_Data & 0x0FFF);\r\n            const _ValueEnum _Prop = static_cast<_ValueEnum>((_Data & 0xF000) >> 12);\r\n            if (_Code_point < _Lower_bound + _Size) {\r\n                return _Prop;\r\n            }\r\n        }\r\n        return _No_value_constant;\r\n    }\r\n};\r\n\r\n// The following static data tables are generated from the Unicode character database.\r\n// _Grapheme_Break_property_data comes from ucd/auxiliary/GraphemeBreakProperty.txt.\r\n//\r\n// _Indic_Conjunct_Break_property_data comes from ucd/DerivedCoreProperties.txt.\r\n//\r\n// _Extended_Pictographic_property_data comes from ucd/emoji/emoji-data.txt.\r\n//\r\n// __printable_property_data comes from ucd/extracted/DerivedGeneralCategory.txt.\r\n//\r\n// _Grapheme_Extend_property_data comes from ucd/DerivedCoreProperties.txt.\r\n//\r\n// The enums containing the values for the properties are also generated, in order to ensure they match\r\n// up correctly with how we're parsing them.\r\n//\r\n// All sets of data tables are generated by tools/unicode_properties_parse/unicode_properties_data_gen.py in the\r\n// https://github.com/microsoft/stl repository.\r\n//\r\n// The data format is a set of arrays for each character property. The first is an array of uint32_t encoding\r\n// the lower bound of each range of codepoints that has the given property.\r\n// The second is an array of uint16_t.\r\n// - For enumerated properties, this array encodes both the range size and property value as follows:\r\n//   16               12                                   0\r\n//   +-----------------------------------------------------+\r\n//   | property_value  |              range_size           |\r\n//   +-----------------------------------------------------+\r\n//   that is: the size is stored in the least significant 12 bits\r\n//   (leading to a max size of 4095), and the property value is stored in the most significant 4 bits,\r\n//   leading to a maximum of 16 property values.\r\n// - For binary properties, this array simply stores the range size.\r\n//\r\n// Codepoint ranges may not overlap, and, within one property, a codepoint may only appear once. Furthermore the\r\n// codepoint lower bounds appear in sorted (ascending) order.\r\n\r\n// GraphemeBreakProperty-17.0.0.txt\r\n// Date: 2025-06-30, 06:20:23 GMT\r\nenum class _Grapheme_Break_property_values : uint8_t {\r\n    _CR_value,\r\n    _Control_value,\r\n    _Extend_value,\r\n    _L_value,\r\n    _LF_value,\r\n    _LV_value,\r\n    _LVT_value,\r\n    _Prepend_value,\r\n    _Regional_Indicator_value,\r\n    _SpacingMark_value,\r\n    _T_value,\r\n    _V_value,\r\n    _ZWJ_value,\r\n    _No_value = 255\r\n};\r\n\r\n// GraphemeBreakProperty-17.0.0.txt\r\n// Date: 2025-06-30, 06:20:23 GMT\r\ninline constexpr _Unicode_property_data<_Grapheme_Break_property_values, 1386, false> _Grapheme_Break_property_data{\r\n    {0x0, 0xa, 0xb, 0xd, 0xe, 0x7f, 0xad, 0x300, 0x483, 0x591, 0x5bf, 0x5c1, 0x5c4, 0x5c7, 0x600, 0x610, 0x61c, 0x64b,\r\n        0x670, 0x6d6, 0x6dd, 0x6df, 0x6e7, 0x6ea, 0x70f, 0x711, 0x730, 0x7a6, 0x7eb, 0x7fd, 0x816, 0x81b, 0x825, 0x829,\r\n        0x859, 0x890, 0x897, 0x8ca, 0x8e2, 0x8e3, 0x903, 0x93a, 0x93b, 0x93c, 0x93e, 0x941, 0x949, 0x94d, 0x94e, 0x951,\r\n        0x962, 0x981, 0x982, 0x9bc, 0x9be, 0x9bf, 0x9c1, 0x9c7, 0x9cb, 0x9cd, 0x9d7, 0x9e2, 0x9fe, 0xa01, 0xa03, 0xa3c,\r\n        0xa3e, 0xa41, 0xa47, 0xa4b, 0xa51, 0xa70, 0xa75, 0xa81, 0xa83, 0xabc, 0xabe, 0xac1, 0xac7, 0xac9, 0xacb, 0xacd,\r\n        0xae2, 0xafa, 0xb01, 0xb02, 0xb3c, 0xb3e, 0xb40, 0xb41, 0xb47, 0xb4b, 0xb4d, 0xb55, 0xb62, 0xb82, 0xbbe, 0xbbf,\r\n        0xbc0, 0xbc1, 0xbc6, 0xbca, 0xbcd, 0xbd7, 0xc00, 0xc01, 0xc04, 0xc3c, 0xc3e, 0xc41, 0xc46, 0xc4a, 0xc55, 0xc62,\r\n        0xc81, 0xc82, 0xcbc, 0xcbe, 0xcbf, 0xcc1, 0xcc2, 0xcc3, 0xcc6, 0xcca, 0xcd5, 0xce2, 0xcf3, 0xd00, 0xd02, 0xd3b,\r\n        0xd3e, 0xd3f, 0xd41, 0xd46, 0xd4a, 0xd4d, 0xd4e, 0xd57, 0xd62, 0xd81, 0xd82, 0xdca, 0xdcf, 0xdd0, 0xdd2, 0xdd6,\r\n        0xdd8, 0xddf, 0xdf2, 0xe31, 0xe33, 0xe34, 0xe47, 0xeb1, 0xeb3, 0xeb4, 0xec8, 0xf18, 0xf35, 0xf37, 0xf39, 0xf3e,\r\n        0xf71, 0xf7f, 0xf80, 0xf86, 0xf8d, 0xf99, 0xfc6, 0x102d, 0x1031, 0x1032, 0x1039, 0x103b, 0x103d, 0x1056, 0x1058,\r\n        0x105e, 0x1071, 0x1082, 0x1084, 0x1085, 0x108d, 0x109d, 0x1100, 0x1160, 0x11a8, 0x135d, 0x1712, 0x1732, 0x1752,\r\n        0x1772, 0x17b4, 0x17b6, 0x17b7, 0x17be, 0x17c6, 0x17c7, 0x17c9, 0x17dd, 0x180b, 0x180e, 0x180f, 0x1885, 0x18a9,\r\n        0x1920, 0x1923, 0x1927, 0x1929, 0x1930, 0x1932, 0x1933, 0x1939, 0x1a17, 0x1a19, 0x1a1b, 0x1a55, 0x1a56, 0x1a57,\r\n        0x1a58, 0x1a60, 0x1a62, 0x1a65, 0x1a6d, 0x1a73, 0x1a7f, 0x1ab0, 0x1ae0, 0x1b00, 0x1b04, 0x1b34, 0x1b3e, 0x1b42,\r\n        0x1b6b, 0x1b80, 0x1b82, 0x1ba1, 0x1ba2, 0x1ba6, 0x1ba8, 0x1be6, 0x1be7, 0x1be8, 0x1bea, 0x1bed, 0x1bee, 0x1bef,\r\n        0x1c24, 0x1c2c, 0x1c34, 0x1c36, 0x1cd0, 0x1cd4, 0x1ce1, 0x1ce2, 0x1ced, 0x1cf4, 0x1cf7, 0x1cf8, 0x1dc0, 0x200b,\r\n        0x200c, 0x200d, 0x200e, 0x2028, 0x2060, 0x20d0, 0x2cef, 0x2d7f, 0x2de0, 0x302a, 0x3099, 0xa66f, 0xa674, 0xa69e,\r\n        0xa6f0, 0xa802, 0xa806, 0xa80b, 0xa823, 0xa825, 0xa827, 0xa82c, 0xa880, 0xa8b4, 0xa8c4, 0xa8e0, 0xa8ff, 0xa926,\r\n        0xa947, 0xa952, 0xa953, 0xa960, 0xa980, 0xa983, 0xa9b3, 0xa9b4, 0xa9b6, 0xa9ba, 0xa9bc, 0xa9be, 0xa9c0, 0xa9e5,\r\n        0xaa29, 0xaa2f, 0xaa31, 0xaa33, 0xaa35, 0xaa43, 0xaa4c, 0xaa4d, 0xaa7c, 0xaab0, 0xaab2, 0xaab7, 0xaabe, 0xaac1,\r\n        0xaaeb, 0xaaec, 0xaaee, 0xaaf5, 0xaaf6, 0xabe3, 0xabe5, 0xabe6, 0xabe8, 0xabe9, 0xabec, 0xabed, 0xac00, 0xac01,\r\n        0xac1c, 0xac1d, 0xac38, 0xac39, 0xac54, 0xac55, 0xac70, 0xac71, 0xac8c, 0xac8d, 0xaca8, 0xaca9, 0xacc4, 0xacc5,\r\n        0xace0, 0xace1, 0xacfc, 0xacfd, 0xad18, 0xad19, 0xad34, 0xad35, 0xad50, 0xad51, 0xad6c, 0xad6d, 0xad88, 0xad89,\r\n        0xada4, 0xada5, 0xadc0, 0xadc1, 0xaddc, 0xaddd, 0xadf8, 0xadf9, 0xae14, 0xae15, 0xae30, 0xae31, 0xae4c, 0xae4d,\r\n        0xae68, 0xae69, 0xae84, 0xae85, 0xaea0, 0xaea1, 0xaebc, 0xaebd, 0xaed8, 0xaed9, 0xaef4, 0xaef5, 0xaf10, 0xaf11,\r\n        0xaf2c, 0xaf2d, 0xaf48, 0xaf49, 0xaf64, 0xaf65, 0xaf80, 0xaf81, 0xaf9c, 0xaf9d, 0xafb8, 0xafb9, 0xafd4, 0xafd5,\r\n        0xaff0, 0xaff1, 0xb00c, 0xb00d, 0xb028, 0xb029, 0xb044, 0xb045, 0xb060, 0xb061, 0xb07c, 0xb07d, 0xb098, 0xb099,\r\n        0xb0b4, 0xb0b5, 0xb0d0, 0xb0d1, 0xb0ec, 0xb0ed, 0xb108, 0xb109, 0xb124, 0xb125, 0xb140, 0xb141, 0xb15c, 0xb15d,\r\n        0xb178, 0xb179, 0xb194, 0xb195, 0xb1b0, 0xb1b1, 0xb1cc, 0xb1cd, 0xb1e8, 0xb1e9, 0xb204, 0xb205, 0xb220, 0xb221,\r\n        0xb23c, 0xb23d, 0xb258, 0xb259, 0xb274, 0xb275, 0xb290, 0xb291, 0xb2ac, 0xb2ad, 0xb2c8, 0xb2c9, 0xb2e4, 0xb2e5,\r\n        0xb300, 0xb301, 0xb31c, 0xb31d, 0xb338, 0xb339, 0xb354, 0xb355, 0xb370, 0xb371, 0xb38c, 0xb38d, 0xb3a8, 0xb3a9,\r\n        0xb3c4, 0xb3c5, 0xb3e0, 0xb3e1, 0xb3fc, 0xb3fd, 0xb418, 0xb419, 0xb434, 0xb435, 0xb450, 0xb451, 0xb46c, 0xb46d,\r\n        0xb488, 0xb489, 0xb4a4, 0xb4a5, 0xb4c0, 0xb4c1, 0xb4dc, 0xb4dd, 0xb4f8, 0xb4f9, 0xb514, 0xb515, 0xb530, 0xb531,\r\n        0xb54c, 0xb54d, 0xb568, 0xb569, 0xb584, 0xb585, 0xb5a0, 0xb5a1, 0xb5bc, 0xb5bd, 0xb5d8, 0xb5d9, 0xb5f4, 0xb5f5,\r\n        0xb610, 0xb611, 0xb62c, 0xb62d, 0xb648, 0xb649, 0xb664, 0xb665, 0xb680, 0xb681, 0xb69c, 0xb69d, 0xb6b8, 0xb6b9,\r\n        0xb6d4, 0xb6d5, 0xb6f0, 0xb6f1, 0xb70c, 0xb70d, 0xb728, 0xb729, 0xb744, 0xb745, 0xb760, 0xb761, 0xb77c, 0xb77d,\r\n        0xb798, 0xb799, 0xb7b4, 0xb7b5, 0xb7d0, 0xb7d1, 0xb7ec, 0xb7ed, 0xb808, 0xb809, 0xb824, 0xb825, 0xb840, 0xb841,\r\n        0xb85c, 0xb85d, 0xb878, 0xb879, 0xb894, 0xb895, 0xb8b0, 0xb8b1, 0xb8cc, 0xb8cd, 0xb8e8, 0xb8e9, 0xb904, 0xb905,\r\n        0xb920, 0xb921, 0xb93c, 0xb93d, 0xb958, 0xb959, 0xb974, 0xb975, 0xb990, 0xb991, 0xb9ac, 0xb9ad, 0xb9c8, 0xb9c9,\r\n        0xb9e4, 0xb9e5, 0xba00, 0xba01, 0xba1c, 0xba1d, 0xba38, 0xba39, 0xba54, 0xba55, 0xba70, 0xba71, 0xba8c, 0xba8d,\r\n        0xbaa8, 0xbaa9, 0xbac4, 0xbac5, 0xbae0, 0xbae1, 0xbafc, 0xbafd, 0xbb18, 0xbb19, 0xbb34, 0xbb35, 0xbb50, 0xbb51,\r\n        0xbb6c, 0xbb6d, 0xbb88, 0xbb89, 0xbba4, 0xbba5, 0xbbc0, 0xbbc1, 0xbbdc, 0xbbdd, 0xbbf8, 0xbbf9, 0xbc14, 0xbc15,\r\n        0xbc30, 0xbc31, 0xbc4c, 0xbc4d, 0xbc68, 0xbc69, 0xbc84, 0xbc85, 0xbca0, 0xbca1, 0xbcbc, 0xbcbd, 0xbcd8, 0xbcd9,\r\n        0xbcf4, 0xbcf5, 0xbd10, 0xbd11, 0xbd2c, 0xbd2d, 0xbd48, 0xbd49, 0xbd64, 0xbd65, 0xbd80, 0xbd81, 0xbd9c, 0xbd9d,\r\n        0xbdb8, 0xbdb9, 0xbdd4, 0xbdd5, 0xbdf0, 0xbdf1, 0xbe0c, 0xbe0d, 0xbe28, 0xbe29, 0xbe44, 0xbe45, 0xbe60, 0xbe61,\r\n        0xbe7c, 0xbe7d, 0xbe98, 0xbe99, 0xbeb4, 0xbeb5, 0xbed0, 0xbed1, 0xbeec, 0xbeed, 0xbf08, 0xbf09, 0xbf24, 0xbf25,\r\n        0xbf40, 0xbf41, 0xbf5c, 0xbf5d, 0xbf78, 0xbf79, 0xbf94, 0xbf95, 0xbfb0, 0xbfb1, 0xbfcc, 0xbfcd, 0xbfe8, 0xbfe9,\r\n        0xc004, 0xc005, 0xc020, 0xc021, 0xc03c, 0xc03d, 0xc058, 0xc059, 0xc074, 0xc075, 0xc090, 0xc091, 0xc0ac, 0xc0ad,\r\n        0xc0c8, 0xc0c9, 0xc0e4, 0xc0e5, 0xc100, 0xc101, 0xc11c, 0xc11d, 0xc138, 0xc139, 0xc154, 0xc155, 0xc170, 0xc171,\r\n        0xc18c, 0xc18d, 0xc1a8, 0xc1a9, 0xc1c4, 0xc1c5, 0xc1e0, 0xc1e1, 0xc1fc, 0xc1fd, 0xc218, 0xc219, 0xc234, 0xc235,\r\n        0xc250, 0xc251, 0xc26c, 0xc26d, 0xc288, 0xc289, 0xc2a4, 0xc2a5, 0xc2c0, 0xc2c1, 0xc2dc, 0xc2dd, 0xc2f8, 0xc2f9,\r\n        0xc314, 0xc315, 0xc330, 0xc331, 0xc34c, 0xc34d, 0xc368, 0xc369, 0xc384, 0xc385, 0xc3a0, 0xc3a1, 0xc3bc, 0xc3bd,\r\n        0xc3d8, 0xc3d9, 0xc3f4, 0xc3f5, 0xc410, 0xc411, 0xc42c, 0xc42d, 0xc448, 0xc449, 0xc464, 0xc465, 0xc480, 0xc481,\r\n        0xc49c, 0xc49d, 0xc4b8, 0xc4b9, 0xc4d4, 0xc4d5, 0xc4f0, 0xc4f1, 0xc50c, 0xc50d, 0xc528, 0xc529, 0xc544, 0xc545,\r\n        0xc560, 0xc561, 0xc57c, 0xc57d, 0xc598, 0xc599, 0xc5b4, 0xc5b5, 0xc5d0, 0xc5d1, 0xc5ec, 0xc5ed, 0xc608, 0xc609,\r\n        0xc624, 0xc625, 0xc640, 0xc641, 0xc65c, 0xc65d, 0xc678, 0xc679, 0xc694, 0xc695, 0xc6b0, 0xc6b1, 0xc6cc, 0xc6cd,\r\n        0xc6e8, 0xc6e9, 0xc704, 0xc705, 0xc720, 0xc721, 0xc73c, 0xc73d, 0xc758, 0xc759, 0xc774, 0xc775, 0xc790, 0xc791,\r\n        0xc7ac, 0xc7ad, 0xc7c8, 0xc7c9, 0xc7e4, 0xc7e5, 0xc800, 0xc801, 0xc81c, 0xc81d, 0xc838, 0xc839, 0xc854, 0xc855,\r\n        0xc870, 0xc871, 0xc88c, 0xc88d, 0xc8a8, 0xc8a9, 0xc8c4, 0xc8c5, 0xc8e0, 0xc8e1, 0xc8fc, 0xc8fd, 0xc918, 0xc919,\r\n        0xc934, 0xc935, 0xc950, 0xc951, 0xc96c, 0xc96d, 0xc988, 0xc989, 0xc9a4, 0xc9a5, 0xc9c0, 0xc9c1, 0xc9dc, 0xc9dd,\r\n        0xc9f8, 0xc9f9, 0xca14, 0xca15, 0xca30, 0xca31, 0xca4c, 0xca4d, 0xca68, 0xca69, 0xca84, 0xca85, 0xcaa0, 0xcaa1,\r\n        0xcabc, 0xcabd, 0xcad8, 0xcad9, 0xcaf4, 0xcaf5, 0xcb10, 0xcb11, 0xcb2c, 0xcb2d, 0xcb48, 0xcb49, 0xcb64, 0xcb65,\r\n        0xcb80, 0xcb81, 0xcb9c, 0xcb9d, 0xcbb8, 0xcbb9, 0xcbd4, 0xcbd5, 0xcbf0, 0xcbf1, 0xcc0c, 0xcc0d, 0xcc28, 0xcc29,\r\n        0xcc44, 0xcc45, 0xcc60, 0xcc61, 0xcc7c, 0xcc7d, 0xcc98, 0xcc99, 0xccb4, 0xccb5, 0xccd0, 0xccd1, 0xccec, 0xcced,\r\n        0xcd08, 0xcd09, 0xcd24, 0xcd25, 0xcd40, 0xcd41, 0xcd5c, 0xcd5d, 0xcd78, 0xcd79, 0xcd94, 0xcd95, 0xcdb0, 0xcdb1,\r\n        0xcdcc, 0xcdcd, 0xcde8, 0xcde9, 0xce04, 0xce05, 0xce20, 0xce21, 0xce3c, 0xce3d, 0xce58, 0xce59, 0xce74, 0xce75,\r\n        0xce90, 0xce91, 0xceac, 0xcead, 0xcec8, 0xcec9, 0xcee4, 0xcee5, 0xcf00, 0xcf01, 0xcf1c, 0xcf1d, 0xcf38, 0xcf39,\r\n        0xcf54, 0xcf55, 0xcf70, 0xcf71, 0xcf8c, 0xcf8d, 0xcfa8, 0xcfa9, 0xcfc4, 0xcfc5, 0xcfe0, 0xcfe1, 0xcffc, 0xcffd,\r\n        0xd018, 0xd019, 0xd034, 0xd035, 0xd050, 0xd051, 0xd06c, 0xd06d, 0xd088, 0xd089, 0xd0a4, 0xd0a5, 0xd0c0, 0xd0c1,\r\n        0xd0dc, 0xd0dd, 0xd0f8, 0xd0f9, 0xd114, 0xd115, 0xd130, 0xd131, 0xd14c, 0xd14d, 0xd168, 0xd169, 0xd184, 0xd185,\r\n        0xd1a0, 0xd1a1, 0xd1bc, 0xd1bd, 0xd1d8, 0xd1d9, 0xd1f4, 0xd1f5, 0xd210, 0xd211, 0xd22c, 0xd22d, 0xd248, 0xd249,\r\n        0xd264, 0xd265, 0xd280, 0xd281, 0xd29c, 0xd29d, 0xd2b8, 0xd2b9, 0xd2d4, 0xd2d5, 0xd2f0, 0xd2f1, 0xd30c, 0xd30d,\r\n        0xd328, 0xd329, 0xd344, 0xd345, 0xd360, 0xd361, 0xd37c, 0xd37d, 0xd398, 0xd399, 0xd3b4, 0xd3b5, 0xd3d0, 0xd3d1,\r\n        0xd3ec, 0xd3ed, 0xd408, 0xd409, 0xd424, 0xd425, 0xd440, 0xd441, 0xd45c, 0xd45d, 0xd478, 0xd479, 0xd494, 0xd495,\r\n        0xd4b0, 0xd4b1, 0xd4cc, 0xd4cd, 0xd4e8, 0xd4e9, 0xd504, 0xd505, 0xd520, 0xd521, 0xd53c, 0xd53d, 0xd558, 0xd559,\r\n        0xd574, 0xd575, 0xd590, 0xd591, 0xd5ac, 0xd5ad, 0xd5c8, 0xd5c9, 0xd5e4, 0xd5e5, 0xd600, 0xd601, 0xd61c, 0xd61d,\r\n        0xd638, 0xd639, 0xd654, 0xd655, 0xd670, 0xd671, 0xd68c, 0xd68d, 0xd6a8, 0xd6a9, 0xd6c4, 0xd6c5, 0xd6e0, 0xd6e1,\r\n        0xd6fc, 0xd6fd, 0xd718, 0xd719, 0xd734, 0xd735, 0xd750, 0xd751, 0xd76c, 0xd76d, 0xd788, 0xd789, 0xd7b0, 0xd7cb,\r\n        0xfb1e, 0xfe00, 0xfe20, 0xfeff, 0xff9e, 0xfff0, 0x101fd, 0x102e0, 0x10376, 0x10a01, 0x10a05, 0x10a0c, 0x10a38,\r\n        0x10a3f, 0x10ae5, 0x10d24, 0x10d69, 0x10eab, 0x10efa, 0x10f46, 0x10f82, 0x11000, 0x11001, 0x11002, 0x11038,\r\n        0x11070, 0x11073, 0x1107f, 0x11082, 0x110b0, 0x110b3, 0x110b7, 0x110b9, 0x110bd, 0x110c2, 0x110cd, 0x11100,\r\n        0x11127, 0x1112c, 0x1112d, 0x11145, 0x11173, 0x11180, 0x11182, 0x111b3, 0x111b6, 0x111bf, 0x111c0, 0x111c2,\r\n        0x111c9, 0x111ce, 0x111cf, 0x1122c, 0x1122f, 0x11232, 0x11234, 0x1123e, 0x11241, 0x112df, 0x112e0, 0x112e3,\r\n        0x11300, 0x11302, 0x1133b, 0x1133e, 0x1133f, 0x11340, 0x11341, 0x11347, 0x1134b, 0x1134d, 0x11357, 0x11362,\r\n        0x11366, 0x11370, 0x113b8, 0x113b9, 0x113bb, 0x113c2, 0x113c5, 0x113c7, 0x113ca, 0x113cc, 0x113ce, 0x113d1,\r\n        0x113d2, 0x113e1, 0x11435, 0x11438, 0x11440, 0x11442, 0x11445, 0x11446, 0x1145e, 0x114b0, 0x114b1, 0x114b3,\r\n        0x114b9, 0x114ba, 0x114bb, 0x114bd, 0x114be, 0x114bf, 0x114c1, 0x114c2, 0x115af, 0x115b0, 0x115b2, 0x115b8,\r\n        0x115bc, 0x115be, 0x115bf, 0x115dc, 0x11630, 0x11633, 0x1163b, 0x1163d, 0x1163e, 0x1163f, 0x116ab, 0x116ac,\r\n        0x116ad, 0x116ae, 0x116b0, 0x1171d, 0x1171e, 0x1171f, 0x11722, 0x11726, 0x11727, 0x1182c, 0x1182f, 0x11838,\r\n        0x11839, 0x11930, 0x11931, 0x11937, 0x1193b, 0x1193f, 0x11940, 0x11941, 0x11942, 0x11943, 0x119d1, 0x119d4,\r\n        0x119da, 0x119dc, 0x119e0, 0x119e4, 0x11a01, 0x11a33, 0x11a39, 0x11a3b, 0x11a47, 0x11a51, 0x11a57, 0x11a59,\r\n        0x11a84, 0x11a8a, 0x11a97, 0x11a98, 0x11b60, 0x11b61, 0x11b62, 0x11b65, 0x11b66, 0x11b67, 0x11c2f, 0x11c30,\r\n        0x11c38, 0x11c3e, 0x11c3f, 0x11c92, 0x11ca9, 0x11caa, 0x11cb1, 0x11cb2, 0x11cb4, 0x11cb5, 0x11d31, 0x11d3a,\r\n        0x11d3c, 0x11d3f, 0x11d46, 0x11d47, 0x11d8a, 0x11d90, 0x11d93, 0x11d95, 0x11d96, 0x11d97, 0x11ef3, 0x11ef5,\r\n        0x11f00, 0x11f02, 0x11f03, 0x11f34, 0x11f36, 0x11f3e, 0x11f40, 0x11f5a, 0x13430, 0x13440, 0x13447, 0x1611e,\r\n        0x1612a, 0x1612d, 0x16af0, 0x16b30, 0x16d63, 0x16d67, 0x16f4f, 0x16f51, 0x16f8f, 0x16fe4, 0x16ff0, 0x1bc9d,\r\n        0x1bca0, 0x1cf00, 0x1cf30, 0x1d165, 0x1d16d, 0x1d173, 0x1d17b, 0x1d185, 0x1d1aa, 0x1d242, 0x1da00, 0x1da3b,\r\n        0x1da75, 0x1da84, 0x1da9b, 0x1daa1, 0x1e000, 0x1e008, 0x1e01b, 0x1e023, 0x1e026, 0x1e08f, 0x1e130, 0x1e2ae,\r\n        0x1e2ec, 0x1e4ec, 0x1e5ee, 0x1e6e3, 0x1e6e6, 0x1e6ee, 0x1e6f5, 0x1e8d0, 0x1e944, 0x1f1e6, 0x1f3fb, 0xe0000,\r\n        0xe0020, 0xe0080, 0xe0100, 0xe01f0},\r\n    {0x100a, 0x4001, 0x1002, 0x1, 0x1012, 0x1021, 0x1001, 0x2070, 0x2007, 0x202d, 0x2001, 0x2002, 0x2002, 0x2001,\r\n        0x7006, 0x200b, 0x1001, 0x2015, 0x2001, 0x2007, 0x7001, 0x2006, 0x2002, 0x2004, 0x7001, 0x2001, 0x201b, 0x200b,\r\n        0x2009, 0x2001, 0x2004, 0x2009, 0x2003, 0x2005, 0x2003, 0x7002, 0x2009, 0x2018, 0x7001, 0x2020, 0x9001, 0x2001,\r\n        0x9001, 0x2001, 0x9003, 0x2008, 0x9004, 0x2001, 0x9002, 0x2007, 0x2002, 0x2001, 0x9002, 0x2001, 0x2001, 0x9002,\r\n        0x2004, 0x9002, 0x9002, 0x2001, 0x2001, 0x2002, 0x2001, 0x2002, 0x9001, 0x2001, 0x9003, 0x2002, 0x2002, 0x2003,\r\n        0x2001, 0x2002, 0x2001, 0x2002, 0x9001, 0x2001, 0x9003, 0x2005, 0x2002, 0x9001, 0x9002, 0x2001, 0x2002, 0x2006,\r\n        0x2001, 0x9002, 0x2001, 0x2002, 0x9001, 0x2004, 0x9002, 0x9002, 0x2001, 0x2003, 0x2002, 0x2001, 0x2001, 0x9001,\r\n        0x2001, 0x9002, 0x9003, 0x9003, 0x2001, 0x2001, 0x2001, 0x9003, 0x2001, 0x2001, 0x2003, 0x9004, 0x2003, 0x2004,\r\n        0x2002, 0x2002, 0x2001, 0x9002, 0x2001, 0x9001, 0x2002, 0x9001, 0x2001, 0x9002, 0x2003, 0x2004, 0x2002, 0x2002,\r\n        0x9001, 0x2002, 0x9002, 0x2002, 0x2001, 0x9002, 0x2004, 0x9003, 0x9003, 0x2001, 0x7001, 0x2001, 0x2002, 0x2001,\r\n        0x9002, 0x2001, 0x2001, 0x9002, 0x2003, 0x2001, 0x9007, 0x2001, 0x9002, 0x2001, 0x9001, 0x2007, 0x2008, 0x2001,\r\n        0x9001, 0x2009, 0x2007, 0x2002, 0x2001, 0x2001, 0x2001, 0x9002, 0x200e, 0x9001, 0x2005, 0x2002, 0x200b, 0x2024,\r\n        0x2001, 0x2004, 0x9001, 0x2006, 0x2002, 0x9002, 0x2002, 0x9002, 0x2002, 0x2003, 0x2004, 0x2001, 0x9001, 0x2002,\r\n        0x2001, 0x2001, 0x3060, 0xb048, 0xa058, 0x2003, 0x2004, 0x2003, 0x2002, 0x2002, 0x2002, 0x9001, 0x2007, 0x9008,\r\n        0x2001, 0x9002, 0x200b, 0x2001, 0x2003, 0x1001, 0x2001, 0x2002, 0x2001, 0x2003, 0x9004, 0x2002, 0x9003, 0x9002,\r\n        0x2001, 0x9006, 0x2003, 0x2002, 0x9002, 0x2001, 0x9001, 0x2001, 0x9001, 0x2007, 0x2001, 0x2001, 0x2008, 0x9006,\r\n        0x200a, 0x2001, 0x202e, 0x200c, 0x2004, 0x9001, 0x200a, 0x9004, 0x2003, 0x2009, 0x2002, 0x9001, 0x9001, 0x2004,\r\n        0x9002, 0x2006, 0x2001, 0x9001, 0x2002, 0x9003, 0x2001, 0x9001, 0x2005, 0x9008, 0x2008, 0x9002, 0x2002, 0x2003,\r\n        0x200d, 0x9001, 0x2007, 0x2001, 0x2001, 0x9001, 0x2002, 0x2040, 0x1001, 0x2001, 0xc001, 0x1002, 0x1007, 0x1010,\r\n        0x2021, 0x2003, 0x2001, 0x2020, 0x2006, 0x2002, 0x2004, 0x200a, 0x2002, 0x2002, 0x2001, 0x2001, 0x2001, 0x9002,\r\n        0x2002, 0x9001, 0x2001, 0x9002, 0x9010, 0x2002, 0x2012, 0x2001, 0x2008, 0x200b, 0x9001, 0x2001, 0x301d, 0x2003,\r\n        0x9001, 0x2001, 0x9002, 0x2004, 0x9002, 0x2002, 0x9002, 0x2001, 0x2001, 0x2006, 0x9002, 0x2002, 0x9002, 0x2002,\r\n        0x2001, 0x2001, 0x9001, 0x2001, 0x2001, 0x2003, 0x2002, 0x2002, 0x2001, 0x9001, 0x2002, 0x9002, 0x9001, 0x2001,\r\n        0x9002, 0x2001, 0x9002, 0x2001, 0x9002, 0x9001, 0x2001, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001,\r\n        0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0x5001, 0x601b, 0xb017, 0xa031, 0x2001, 0x2010, 0x2010, 0x1001, 0x2002,\r\n        0x100c, 0x2001, 0x2001, 0x2005, 0x2003, 0x2002, 0x2004, 0x2003, 0x2001, 0x2002, 0x2004, 0x2005, 0x2002, 0x2006,\r\n        0x200b, 0x2004, 0x9001, 0x2001, 0x9001, 0x200f, 0x2001, 0x2002, 0x2003, 0x9001, 0x9003, 0x2004, 0x9002, 0x2002,\r\n        0x7001, 0x2001, 0x7001, 0x2003, 0x2005, 0x9001, 0x2008, 0x9002, 0x2001, 0x2002, 0x9001, 0x9003, 0x2009, 0x9001,\r\n        0x2001, 0x7002, 0x2004, 0x9001, 0x2001, 0x9003, 0x2003, 0x9002, 0x2004, 0x2001, 0x2001, 0x2001, 0x9003, 0x2008,\r\n        0x2002, 0x9002, 0x2002, 0x2001, 0x9001, 0x2001, 0x9004, 0x9002, 0x9002, 0x2001, 0x2001, 0x9002, 0x2007, 0x2005,\r\n        0x2001, 0x9002, 0x2006, 0x2001, 0x2001, 0x2003, 0x9001, 0x9002, 0x2003, 0x7001, 0x2001, 0x2002, 0x9003, 0x2008,\r\n        0x9002, 0x2003, 0x9001, 0x2001, 0x2001, 0x2001, 0x9002, 0x2006, 0x9001, 0x2001, 0x9002, 0x2001, 0x9001, 0x2002,\r\n        0x9001, 0x2002, 0x2001, 0x9002, 0x2004, 0x9004, 0x2002, 0x9001, 0x2002, 0x2002, 0x9003, 0x2008, 0x9002, 0x2001,\r\n        0x9001, 0x2002, 0x2001, 0x9001, 0x2001, 0x9002, 0x2008, 0x2001, 0x9001, 0x2001, 0x2004, 0x9001, 0x2005, 0x9003,\r\n        0x2009, 0x9001, 0x2002, 0x2001, 0x9005, 0x9002, 0x2004, 0x7001, 0x9001, 0x7001, 0x9001, 0x2001, 0x9003, 0x2004,\r\n        0x2002, 0x9004, 0x2001, 0x9001, 0x200a, 0x2006, 0x9001, 0x2004, 0x2001, 0x2006, 0x9002, 0x2003, 0x7006, 0x200d,\r\n        0x9001, 0x2002, 0x2001, 0x9001, 0x2003, 0x9001, 0x2001, 0x9001, 0x9001, 0x2007, 0x2006, 0x9001, 0x2001, 0x2016,\r\n        0x9001, 0x2007, 0x9001, 0x2002, 0x9001, 0x2002, 0x2006, 0x2001, 0x2002, 0x2007, 0x7001, 0x2001, 0x9005, 0x2002,\r\n        0x9002, 0x2001, 0x9001, 0x2001, 0x2002, 0x9002, 0x2002, 0x7001, 0x9001, 0x9002, 0x2005, 0x9002, 0x2003, 0x2001,\r\n        0x1010, 0x2001, 0x200f, 0x200c, 0x9003, 0x2003, 0x2005, 0x2007, 0xb001, 0xb004, 0x2001, 0x9037, 0x2004, 0x2001,\r\n        0x2002, 0x2002, 0x1004, 0x202e, 0x2017, 0x2005, 0x2006, 0x1008, 0x2008, 0x2007, 0x2004, 0x2003, 0x2037, 0x2032,\r\n        0x2001, 0x2001, 0x2005, 0x200f, 0x2007, 0x2011, 0x2007, 0x2002, 0x2005, 0x2001, 0x2007, 0x2001, 0x2004, 0x2004,\r\n        0x2002, 0x2001, 0x2001, 0x2002, 0x2001, 0x2007, 0x2007, 0x801a, 0x2005, 0x1020, 0x2060, 0x1080, 0x20f0,\r\n        0x1e10}};\r\n\r\n// DerivedCoreProperties-17.0.0.txt\r\n// Date: 2025-07-30, 23:55:08 GMT\r\nenum class _Indic_Conjunct_Break_property_values : uint8_t {\r\n    _Consonant_value,\r\n    _Extend_value,\r\n    _Linker_value,\r\n    _No_value = 255\r\n};\r\n\r\n// DerivedCoreProperties-17.0.0.txt\r\n// Date: 2025-07-30, 23:55:08 GMT\r\ninline constexpr _Unicode_property_data<_Indic_Conjunct_Break_property_values, 473, false>\r\n    _Indic_Conjunct_Break_property_data{\r\n        {0x300, 0x483, 0x591, 0x5bf, 0x5c1, 0x5c4, 0x5c7, 0x610, 0x64b, 0x670, 0x6d6, 0x6df, 0x6e7, 0x6ea, 0x711, 0x730,\r\n            0x7a6, 0x7eb, 0x7fd, 0x816, 0x81b, 0x825, 0x829, 0x859, 0x897, 0x8ca, 0x8e3, 0x915, 0x93a, 0x93c, 0x941,\r\n            0x94d, 0x951, 0x958, 0x962, 0x978, 0x981, 0x995, 0x9aa, 0x9b2, 0x9b6, 0x9bc, 0x9be, 0x9c1, 0x9cd, 0x9d7,\r\n            0x9dc, 0x9df, 0x9e2, 0x9f0, 0x9fe, 0xa01, 0xa3c, 0xa41, 0xa47, 0xa4b, 0xa51, 0xa70, 0xa75, 0xa81, 0xa95,\r\n            0xaaa, 0xab2, 0xab5, 0xabc, 0xac1, 0xac7, 0xacd, 0xae2, 0xaf9, 0xafa, 0xb01, 0xb15, 0xb2a, 0xb32, 0xb35,\r\n            0xb3c, 0xb3e, 0xb41, 0xb4d, 0xb55, 0xb5c, 0xb5f, 0xb62, 0xb71, 0xb82, 0xbbe, 0xbc0, 0xbcd, 0xbd7, 0xc00,\r\n            0xc04, 0xc15, 0xc2a, 0xc3c, 0xc3e, 0xc46, 0xc4a, 0xc4d, 0xc55, 0xc58, 0xc62, 0xc81, 0xcbc, 0xcbf, 0xcc2,\r\n            0xcc6, 0xcca, 0xcd5, 0xce2, 0xd00, 0xd15, 0xd3b, 0xd3e, 0xd41, 0xd4d, 0xd57, 0xd62, 0xd81, 0xdca, 0xdcf,\r\n            0xdd2, 0xdd6, 0xddf, 0xe31, 0xe34, 0xe47, 0xeb1, 0xeb4, 0xec8, 0xf18, 0xf35, 0xf37, 0xf39, 0xf71, 0xf80,\r\n            0xf86, 0xf8d, 0xf99, 0xfc6, 0x1000, 0x102d, 0x1032, 0x1039, 0x103a, 0x103d, 0x103f, 0x1050, 0x1058, 0x105a,\r\n            0x105e, 0x1061, 0x1065, 0x106e, 0x1071, 0x1075, 0x1082, 0x1085, 0x108d, 0x108e, 0x109d, 0x135d, 0x1712,\r\n            0x1732, 0x1752, 0x1772, 0x1780, 0x17b4, 0x17b7, 0x17c6, 0x17c9, 0x17d2, 0x17d3, 0x17dd, 0x180b, 0x180f,\r\n            0x1885, 0x18a9, 0x1920, 0x1927, 0x1932, 0x1939, 0x1a17, 0x1a1b, 0x1a20, 0x1a56, 0x1a58, 0x1a60, 0x1a62,\r\n            0x1a65, 0x1a73, 0x1a7f, 0x1ab0, 0x1ae0, 0x1b00, 0x1b0b, 0x1b13, 0x1b34, 0x1b42, 0x1b44, 0x1b45, 0x1b6b,\r\n            0x1b80, 0x1b83, 0x1ba2, 0x1ba8, 0x1bab, 0x1bac, 0x1bae, 0x1bbb, 0x1be6, 0x1be8, 0x1bed, 0x1bef, 0x1c2c,\r\n            0x1c36, 0x1cd0, 0x1cd4, 0x1ce2, 0x1ced, 0x1cf4, 0x1cf8, 0x1dc0, 0x200d, 0x20d0, 0x2cef, 0x2d7f, 0x2de0,\r\n            0x302a, 0x3099, 0xa66f, 0xa674, 0xa69e, 0xa6f0, 0xa802, 0xa806, 0xa80b, 0xa825, 0xa82c, 0xa8c4, 0xa8e0,\r\n            0xa8ff, 0xa926, 0xa947, 0xa953, 0xa980, 0xa989, 0xa98f, 0xa9b3, 0xa9b6, 0xa9bc, 0xa9c0, 0xa9e0, 0xa9e5,\r\n            0xa9e7, 0xa9fa, 0xaa29, 0xaa31, 0xaa35, 0xaa43, 0xaa4c, 0xaa60, 0xaa71, 0xaa7a, 0xaa7c, 0xaa7e, 0xaab0,\r\n            0xaab2, 0xaab7, 0xaabe, 0xaac1, 0xaae0, 0xaaec, 0xaaf6, 0xabc0, 0xabe5, 0xabe8, 0xabed, 0xfb1e, 0xfe00,\r\n            0xfe20, 0xff9e, 0x101fd, 0x102e0, 0x10376, 0x10a00, 0x10a01, 0x10a05, 0x10a0c, 0x10a10, 0x10a15, 0x10a19,\r\n            0x10a38, 0x10a3f, 0x10ae5, 0x10d24, 0x10d69, 0x10eab, 0x10efa, 0x10f46, 0x10f82, 0x11001, 0x11038, 0x11070,\r\n            0x11073, 0x1107f, 0x110b3, 0x110b9, 0x110c2, 0x11100, 0x11103, 0x11127, 0x1112d, 0x11133, 0x11134, 0x11144,\r\n            0x11147, 0x11173, 0x11180, 0x111b6, 0x111c0, 0x111c9, 0x111cf, 0x1122f, 0x11234, 0x1123e, 0x11241, 0x112df,\r\n            0x112e3, 0x11300, 0x1133b, 0x1133e, 0x11340, 0x1134d, 0x11357, 0x11366, 0x11370, 0x11380, 0x1138b, 0x1138e,\r\n            0x11390, 0x113b8, 0x113bb, 0x113c2, 0x113c5, 0x113c7, 0x113ce, 0x113d0, 0x113d2, 0x113e1, 0x11438, 0x11442,\r\n            0x11446, 0x1145e, 0x114b0, 0x114b3, 0x114ba, 0x114bd, 0x114bf, 0x114c2, 0x115af, 0x115b2, 0x115bc, 0x115bf,\r\n            0x115dc, 0x11633, 0x1163d, 0x1163f, 0x116ab, 0x116ad, 0x116b0, 0x1171d, 0x1171f, 0x11722, 0x11727, 0x1182f,\r\n            0x11839, 0x11900, 0x11909, 0x1190c, 0x11915, 0x11918, 0x11930, 0x1193b, 0x1193e, 0x11943, 0x119d4, 0x119da,\r\n            0x119e0, 0x11a00, 0x11a01, 0x11a0b, 0x11a33, 0x11a3b, 0x11a47, 0x11a50, 0x11a51, 0x11a59, 0x11a5c, 0x11a8a,\r\n            0x11a98, 0x11a99, 0x11b60, 0x11b62, 0x11b66, 0x11c30, 0x11c38, 0x11c3f, 0x11c92, 0x11caa, 0x11cb2, 0x11cb5,\r\n            0x11d31, 0x11d3a, 0x11d3c, 0x11d3f, 0x11d47, 0x11d90, 0x11d95, 0x11d97, 0x11ef3, 0x11f00, 0x11f04, 0x11f12,\r\n            0x11f36, 0x11f40, 0x11f42, 0x11f5a, 0x13440, 0x13447, 0x1611e, 0x1612d, 0x16af0, 0x16b30, 0x16f4f, 0x16f8f,\r\n            0x16fe4, 0x16ff0, 0x1bc9d, 0x1cf00, 0x1cf30, 0x1d165, 0x1d16d, 0x1d17b, 0x1d185, 0x1d1aa, 0x1d242, 0x1da00,\r\n            0x1da3b, 0x1da75, 0x1da84, 0x1da9b, 0x1daa1, 0x1e000, 0x1e008, 0x1e01b, 0x1e023, 0x1e026, 0x1e08f, 0x1e130,\r\n            0x1e2ae, 0x1e2ec, 0x1e4ec, 0x1e5ee, 0x1e6e3, 0x1e6e6, 0x1e6ee, 0x1e6f5, 0x1e8d0, 0x1e944, 0x1f3fb, 0xe0020,\r\n            0xe0100},\r\n        {0x1070, 0x1007, 0x102d, 0x1001, 0x1002, 0x1002, 0x1001, 0x100b, 0x1015, 0x1001, 0x1007, 0x1006, 0x1002, 0x1004,\r\n            0x1001, 0x101b, 0x100b, 0x1009, 0x1001, 0x1004, 0x1009, 0x1003, 0x1005, 0x1003, 0x1009, 0x1018, 0x1020,\r\n            0x25, 0x1001, 0x1001, 0x1008, 0x2001, 0x1007, 0x8, 0x1002, 0x8, 0x1001, 0x14, 0x7, 0x1, 0x4, 0x1001, 0x1001,\r\n            0x1004, 0x2001, 0x1001, 0x2, 0x1, 0x1002, 0x2, 0x1001, 0x1002, 0x1001, 0x1002, 0x1002, 0x1003, 0x1001,\r\n            0x1002, 0x1001, 0x1002, 0x14, 0x7, 0x2, 0x5, 0x1001, 0x1005, 0x1002, 0x2001, 0x1002, 0x1, 0x1006, 0x1001,\r\n            0x14, 0x7, 0x2, 0x5, 0x1001, 0x1002, 0x1004, 0x2001, 0x1003, 0x2, 0x1, 0x1002, 0x1, 0x1001, 0x1001, 0x1001,\r\n            0x1001, 0x1001, 0x1001, 0x1001, 0x14, 0x10, 0x1001, 0x1003, 0x1003, 0x1003, 0x2001, 0x1002, 0x3, 0x1002,\r\n            0x1001, 0x1001, 0x1002, 0x1001, 0x1003, 0x1004, 0x1002, 0x1002, 0x1002, 0x26, 0x1002, 0x1001, 0x1004,\r\n            0x2001, 0x1001, 0x1002, 0x1001, 0x1001, 0x1001, 0x1003, 0x1001, 0x1001, 0x1001, 0x1007, 0x1008, 0x1001,\r\n            0x1009, 0x1007, 0x1002, 0x1001, 0x1001, 0x1001, 0x100e, 0x1005, 0x1002, 0x100b, 0x1024, 0x1001, 0x2b,\r\n            0x1004, 0x1006, 0x2001, 0x1001, 0x1002, 0x1, 0x6, 0x1002, 0x4, 0x1003, 0x1, 0x2, 0x3, 0x1004, 0xd, 0x1001,\r\n            0x1002, 0x1001, 0x1, 0x1001, 0x1003, 0x1004, 0x1003, 0x1002, 0x1002, 0x34, 0x1002, 0x1007, 0x1001, 0x1009,\r\n            0x2001, 0x1001, 0x1001, 0x1003, 0x1001, 0x1002, 0x1001, 0x1003, 0x1002, 0x1001, 0x1003, 0x1002, 0x1001,\r\n            0x35, 0x1001, 0x1007, 0x2001, 0x1001, 0x1008, 0x100a, 0x1001, 0x102e, 0x100c, 0x1004, 0x2, 0x21, 0x100a,\r\n            0x1002, 0x2001, 0x8, 0x1009, 0x1002, 0x1e, 0x1004, 0x1003, 0x2001, 0x1002, 0x2, 0x3, 0x1001, 0x1002, 0x1001,\r\n            0x1005, 0x1008, 0x1002, 0x1003, 0x100d, 0x1007, 0x1001, 0x1001, 0x1002, 0x1040, 0x1001, 0x1021, 0x1003,\r\n            0x1001, 0x1020, 0x1006, 0x1002, 0x1004, 0x100a, 0x1002, 0x1002, 0x1001, 0x1001, 0x1001, 0x1002, 0x1001,\r\n            0x1002, 0x1012, 0x1001, 0x1008, 0x100b, 0x1001, 0x1003, 0x3, 0x24, 0x1001, 0x1004, 0x1002, 0x2001, 0x5,\r\n            0x1001, 0x9, 0x5, 0x1006, 0x1002, 0x1002, 0x1001, 0x1001, 0x10, 0x3, 0x1, 0x1001, 0x2, 0x1001, 0x1003,\r\n            0x1002, 0x1002, 0x1001, 0xb, 0x1002, 0x2001, 0x1b, 0x1001, 0x1001, 0x1001, 0x1001, 0x1010, 0x1010, 0x1002,\r\n            0x1001, 0x1001, 0x1005, 0x1, 0x1003, 0x1002, 0x1004, 0x4, 0x3, 0x1d, 0x1003, 0x2001, 0x1002, 0x1004, 0x1005,\r\n            0x1002, 0x1006, 0x100b, 0x1004, 0x1001, 0x100f, 0x1001, 0x1002, 0x1003, 0x1004, 0x1002, 0x1001, 0x1003,\r\n            0x24, 0x1005, 0x1006, 0x2001, 0x1001, 0x1, 0x1, 0x1001, 0x1002, 0x1009, 0x1001, 0x1004, 0x1001, 0x1003,\r\n            0x1004, 0x1001, 0x1001, 0x1001, 0x1008, 0x1002, 0x1002, 0x1001, 0x1001, 0x1001, 0x1001, 0x1007, 0x1005, 0xa,\r\n            0x1, 0x1, 0x26, 0x1001, 0x1006, 0x1001, 0x1001, 0x1003, 0x1002, 0x2001, 0x1001, 0x1002, 0x1008, 0x1003,\r\n            0x1001, 0x1001, 0x1001, 0x1006, 0x1001, 0x1001, 0x1002, 0x1002, 0x1001, 0x1004, 0x1002, 0x1002, 0x1002,\r\n            0x1008, 0x1001, 0x1002, 0x1001, 0x1001, 0x1008, 0x1001, 0x1001, 0x1004, 0x1005, 0x1009, 0x1002, 0x7, 0x1,\r\n            0x8, 0x2, 0x18, 0x1001, 0x1003, 0x2001, 0x1001, 0x1004, 0x1002, 0x1001, 0x1, 0x100a, 0x28, 0x1006, 0x1004,\r\n            0x2001, 0x1, 0x1006, 0x1003, 0x28, 0x100d, 0x1001, 0x2001, 0x1001, 0x1003, 0x1001, 0x1007, 0x1006, 0x1001,\r\n            0x1016, 0x1007, 0x1002, 0x1002, 0x1006, 0x1001, 0x1002, 0x1007, 0x1001, 0x1002, 0x1001, 0x1001, 0x1002,\r\n            0x1002, 0xd, 0x22, 0x1005, 0x1002, 0x2001, 0x1001, 0x1001, 0x100f, 0x100c, 0x1003, 0x1005, 0x1007, 0x1001,\r\n            0x1004, 0x1001, 0x1002, 0x1002, 0x102e, 0x1017, 0x1005, 0x1006, 0x1008, 0x1007, 0x1004, 0x1003, 0x1037,\r\n            0x1032, 0x1001, 0x1001, 0x1005, 0x100f, 0x1007, 0x1011, 0x1007, 0x1002, 0x1005, 0x1001, 0x1007, 0x1001,\r\n            0x1004, 0x1004, 0x1002, 0x1001, 0x1001, 0x1002, 0x1001, 0x1007, 0x1007, 0x1005, 0x1060, 0x10f0}};\r\n\r\n// emoji-data.txt\r\n// Date: 2025-07-25, 17:54:31 GMT\r\nenum class _Extended_Pictographic_property_values : uint8_t { _Extended_Pictographic_value, _No_value = 255 };\r\n\r\n// emoji-data.txt\r\n// Date: 2025-07-25, 17:54:31 GMT\r\ninline constexpr _Unicode_property_data<_Extended_Pictographic_property_values, 156, true>\r\n    _Extended_Pictographic_property_data{\r\n        {0xa9, 0xae, 0x203c, 0x2049, 0x2122, 0x2139, 0x2194, 0x21a9, 0x231a, 0x2328, 0x23cf, 0x23e9, 0x23f8, 0x24c2,\r\n            0x25aa, 0x25b6, 0x25c0, 0x25fb, 0x2600, 0x260e, 0x2611, 0x2614, 0x2618, 0x261d, 0x2620, 0x2622, 0x2626,\r\n            0x262a, 0x262e, 0x2638, 0x2640, 0x2642, 0x2648, 0x265f, 0x2663, 0x2665, 0x2668, 0x267b, 0x267e, 0x2692,\r\n            0x2699, 0x269b, 0x26a0, 0x26a7, 0x26aa, 0x26b0, 0x26bd, 0x26c4, 0x26c8, 0x26ce, 0x26d1, 0x26d3, 0x26e9,\r\n            0x26f0, 0x26f7, 0x26fd, 0x2702, 0x2705, 0x2708, 0x270f, 0x2712, 0x2714, 0x2716, 0x271d, 0x2721, 0x2728,\r\n            0x2733, 0x2744, 0x2747, 0x274c, 0x274e, 0x2753, 0x2757, 0x2763, 0x2795, 0x27a1, 0x27b0, 0x27bf, 0x2934,\r\n            0x2b05, 0x2b1b, 0x2b50, 0x2b55, 0x3030, 0x303d, 0x3297, 0x3299, 0x1f004, 0x1f02c, 0x1f094, 0x1f0af, 0x1f0c0,\r\n            0x1f0cf, 0x1f0f6, 0x1f170, 0x1f17e, 0x1f18e, 0x1f191, 0x1f1ae, 0x1f201, 0x1f21a, 0x1f22f, 0x1f232, 0x1f23c,\r\n            0x1f249, 0x1f266, 0x1f324, 0x1f396, 0x1f399, 0x1f39e, 0x1f3f3, 0x1f3f7, 0x1f400, 0x1f4ff, 0x1f549, 0x1f550,\r\n            0x1f56f, 0x1f573, 0x1f587, 0x1f58a, 0x1f590, 0x1f595, 0x1f5a4, 0x1f5a8, 0x1f5b1, 0x1f5bc, 0x1f5c2, 0x1f5d1,\r\n            0x1f5dc, 0x1f5e1, 0x1f5e3, 0x1f5e8, 0x1f5ef, 0x1f5f3, 0x1f5fa, 0x1f680, 0x1f6cb, 0x1f6d5, 0x1f6e9, 0x1f6eb,\r\n            0x1f6f3, 0x1f7da, 0x1f80c, 0x1f848, 0x1f85a, 0x1f888, 0x1f8ae, 0x1f8bc, 0x1f8c2, 0x1f8d9, 0x1f90c, 0x1f93c,\r\n            0x1f947, 0x1fa58, 0x1fa6e, 0x1fc00},\r\n        {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x6, 0x2, 0x2, 0x1, 0x1, 0xb, 0x3, 0x1, 0x2, 0x1, 0x1, 0x4, 0x5, 0x1, 0x1, 0x2,\r\n            0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x3, 0x1, 0x1, 0xc, 0x2, 0x1, 0x2, 0x1, 0x1, 0x2, 0x6, 0x1, 0x2, 0x2,\r\n            0x1, 0x2, 0x2, 0x2, 0x2, 0x1, 0x2, 0x1, 0x2, 0x2, 0x6, 0x4, 0x1, 0x1, 0x1, 0x6, 0x1, 0x1, 0x1, 0x1, 0x1,\r\n            0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x3, 0x1, 0x2, 0x3, 0x1, 0x1, 0x1, 0x2, 0x3, 0x2, 0x1, 0x1, 0x1, 0x1,\r\n            0x1, 0x1, 0x1, 0x4, 0xc, 0x2, 0x1, 0x2, 0xa, 0x2, 0x2, 0x1, 0xa, 0x38, 0xf, 0x1, 0x1, 0x9, 0x4, 0x17, 0xbc,\r\n            0x70, 0x2, 0x3, 0x53, 0x3, 0x4, 0xfe, 0x3f, 0x6, 0x18, 0x2, 0x8, 0x1, 0x4, 0x1, 0x2, 0x2, 0x1, 0x2, 0x1,\r\n            0x3, 0x3, 0x3, 0x1, 0x1, 0x1, 0x1, 0x1, 0x56, 0x46, 0x8, 0x11, 0x1, 0x6, 0xd, 0x26, 0x4, 0x8, 0x6, 0x8, 0x2,\r\n            0x4, 0xe, 0x27, 0x2f, 0xa, 0xb9, 0x8, 0x92, 0x3fe}};\r\n\r\n// DerivedGeneralCategory-17.0.0.txt\r\n// Date: 2025-07-24, 00:12:50 GMT\r\nenum class __printable_property_values : uint8_t { _Yes_value, _No_value = 255 };\r\n\r\n// DerivedGeneralCategory-17.0.0.txt\r\n// Date: 2025-07-24, 00:12:50 GMT\r\ninline constexpr _Unicode_property_data<__printable_property_values, 741, true> __printable_property_data{\r\n    {0x20, 0xa1, 0xae, 0x37a, 0x384, 0x38c, 0x38e, 0x3a3, 0x531, 0x559, 0x58d, 0x591, 0x5d0, 0x5ef, 0x606, 0x61d, 0x6de,\r\n        0x710, 0x74d, 0x7c0, 0x7fd, 0x830, 0x840, 0x85e, 0x860, 0x870, 0x897, 0x8e3, 0x985, 0x98f, 0x993, 0x9aa, 0x9b2,\r\n        0x9b6, 0x9bc, 0x9c7, 0x9cb, 0x9d7, 0x9dc, 0x9df, 0x9e6, 0xa01, 0xa05, 0xa0f, 0xa13, 0xa2a, 0xa32, 0xa35, 0xa38,\r\n        0xa3c, 0xa3e, 0xa47, 0xa4b, 0xa51, 0xa59, 0xa5e, 0xa66, 0xa81, 0xa85, 0xa8f, 0xa93, 0xaaa, 0xab2, 0xab5, 0xabc,\r\n        0xac7, 0xacb, 0xad0, 0xae0, 0xae6, 0xaf9, 0xb01, 0xb05, 0xb0f, 0xb13, 0xb2a, 0xb32, 0xb35, 0xb3c, 0xb47, 0xb4b,\r\n        0xb55, 0xb5c, 0xb5f, 0xb66, 0xb82, 0xb85, 0xb8e, 0xb92, 0xb99, 0xb9c, 0xb9e, 0xba3, 0xba8, 0xbae, 0xbbe, 0xbc6,\r\n        0xbca, 0xbd0, 0xbd7, 0xbe6, 0xc00, 0xc0e, 0xc12, 0xc2a, 0xc3c, 0xc46, 0xc4a, 0xc55, 0xc58, 0xc5c, 0xc60, 0xc66,\r\n        0xc77, 0xc8e, 0xc92, 0xcaa, 0xcb5, 0xcbc, 0xcc6, 0xcca, 0xcd5, 0xcdc, 0xce0, 0xce6, 0xcf1, 0xd00, 0xd0e, 0xd12,\r\n        0xd46, 0xd4a, 0xd54, 0xd66, 0xd81, 0xd85, 0xd9a, 0xdb3, 0xdbd, 0xdc0, 0xdca, 0xdcf, 0xdd6, 0xdd8, 0xde6, 0xdf2,\r\n        0xe01, 0xe3f, 0xe81, 0xe84, 0xe86, 0xe8c, 0xea5, 0xea7, 0xec0, 0xec6, 0xec8, 0xed0, 0xedc, 0xf00, 0xf49, 0xf71,\r\n        0xf99, 0xfbe, 0xfce, 0x1000, 0x10c7, 0x10cd, 0x10d0, 0x124a, 0x1250, 0x1258, 0x125a, 0x1260, 0x128a, 0x1290,\r\n        0x12b2, 0x12b8, 0x12c0, 0x12c2, 0x12c8, 0x12d8, 0x1312, 0x1318, 0x135d, 0x1380, 0x13a0, 0x13f8, 0x1400, 0x1681,\r\n        0x16a0, 0x1700, 0x171f, 0x1740, 0x1760, 0x176e, 0x1772, 0x1780, 0x17e0, 0x17f0, 0x1800, 0x180f, 0x1820, 0x1880,\r\n        0x18b0, 0x1900, 0x1920, 0x1930, 0x1940, 0x1944, 0x1970, 0x1980, 0x19b0, 0x19d0, 0x19de, 0x1a1e, 0x1a60, 0x1a7f,\r\n        0x1a90, 0x1aa0, 0x1ab0, 0x1ae0, 0x1b00, 0x1b4e, 0x1bfc, 0x1c3b, 0x1c4d, 0x1c90, 0x1cbd, 0x1cd0, 0x1d00, 0x1f18,\r\n        0x1f20, 0x1f48, 0x1f50, 0x1f59, 0x1f5b, 0x1f5d, 0x1f5f, 0x1f80, 0x1fb6, 0x1fc6, 0x1fd6, 0x1fdd, 0x1ff2, 0x1ff6,\r\n        0x2010, 0x2030, 0x2070, 0x2074, 0x2090, 0x20a0, 0x20d0, 0x2100, 0x2190, 0x2440, 0x2460, 0x2b76, 0x2cf9, 0x2d27,\r\n        0x2d2d, 0x2d30, 0x2d6f, 0x2d7f, 0x2da0, 0x2da8, 0x2db0, 0x2db8, 0x2dc0, 0x2dc8, 0x2dd0, 0x2dd8, 0x2de0, 0x2e80,\r\n        0x2e9b, 0x2f00, 0x2ff0, 0x3001, 0x3041, 0x3099, 0x3105, 0x3131, 0x3190, 0x31ef, 0x3220, 0xa490, 0xa4d0, 0xa640,\r\n        0xa700, 0xa7f1, 0xa830, 0xa840, 0xa880, 0xa8ce, 0xa8e0, 0xa95f, 0xa980, 0xa9cf, 0xa9de, 0xaa00, 0xaa40, 0xaa50,\r\n        0xaa5c, 0xaadb, 0xab01, 0xab09, 0xab11, 0xab20, 0xab28, 0xab30, 0xab70, 0xabf0, 0xac00, 0xd7b0, 0xd7cb, 0xf900,\r\n        0xfa70, 0xfb00, 0xfb13, 0xfb1d, 0xfb38, 0xfb3e, 0xfb40, 0xfb43, 0xfb46, 0xfdf0, 0xfe20, 0xfe54, 0xfe68, 0xfe70,\r\n        0xfe76, 0xff01, 0xffc2, 0xffca, 0xffd2, 0xffda, 0xffe0, 0xffe8, 0xfffc, 0x10000, 0x1000d, 0x10028, 0x1003c,\r\n        0x1003f, 0x10050, 0x10080, 0x10100, 0x10107, 0x10137, 0x10190, 0x101a0, 0x101d0, 0x10280, 0x102a0, 0x102e0,\r\n        0x10300, 0x1032d, 0x10350, 0x10380, 0x1039f, 0x103c8, 0x10400, 0x104a0, 0x104b0, 0x104d8, 0x10500, 0x10530,\r\n        0x1056f, 0x1057c, 0x1058c, 0x10594, 0x10597, 0x105a3, 0x105b3, 0x105bb, 0x105c0, 0x10600, 0x10740, 0x10760,\r\n        0x10780, 0x10787, 0x107b2, 0x10800, 0x10808, 0x1080a, 0x10837, 0x1083c, 0x1083f, 0x10857, 0x108a7, 0x108e0,\r\n        0x108f4, 0x108fb, 0x1091f, 0x1093f, 0x10980, 0x109bc, 0x109d2, 0x10a05, 0x10a0c, 0x10a15, 0x10a19, 0x10a38,\r\n        0x10a3f, 0x10a50, 0x10a60, 0x10ac0, 0x10aeb, 0x10b00, 0x10b39, 0x10b58, 0x10b78, 0x10b99, 0x10ba9, 0x10c00,\r\n        0x10c80, 0x10cc0, 0x10cfa, 0x10d30, 0x10d40, 0x10d69, 0x10d8e, 0x10e60, 0x10e80, 0x10eab, 0x10eb0, 0x10ec2,\r\n        0x10ed0, 0x10efa, 0x10f30, 0x10f70, 0x10fb0, 0x10fe0, 0x11000, 0x11052, 0x1107f, 0x110be, 0x110d0, 0x110f0,\r\n        0x11100, 0x11136, 0x11150, 0x11180, 0x111e1, 0x11200, 0x11213, 0x11280, 0x11288, 0x1128a, 0x1128f, 0x1129f,\r\n        0x112b0, 0x112f0, 0x11300, 0x11305, 0x1130f, 0x11313, 0x1132a, 0x11332, 0x11335, 0x1133b, 0x11347, 0x1134b,\r\n        0x11350, 0x11357, 0x1135d, 0x11366, 0x11370, 0x11380, 0x1138b, 0x1138e, 0x11390, 0x113b7, 0x113c2, 0x113c5,\r\n        0x113c7, 0x113cc, 0x113d7, 0x113e1, 0x11400, 0x1145d, 0x11480, 0x114d0, 0x11580, 0x115b8, 0x11600, 0x11650,\r\n        0x11660, 0x11680, 0x116c0, 0x116d0, 0x11700, 0x1171d, 0x11730, 0x11800, 0x118a0, 0x118ff, 0x11909, 0x1190c,\r\n        0x11915, 0x11918, 0x11937, 0x1193b, 0x11950, 0x119a0, 0x119aa, 0x119da, 0x11a00, 0x11a50, 0x11ab0, 0x11b00,\r\n        0x11b60, 0x11bc0, 0x11bf0, 0x11c00, 0x11c0a, 0x11c38, 0x11c50, 0x11c70, 0x11c92, 0x11ca9, 0x11d00, 0x11d08,\r\n        0x11d0b, 0x11d3a, 0x11d3c, 0x11d3f, 0x11d50, 0x11d60, 0x11d67, 0x11d6a, 0x11d90, 0x11d93, 0x11da0, 0x11db0,\r\n        0x11de0, 0x11ee0, 0x11f00, 0x11f12, 0x11f3e, 0x11fb0, 0x11fc0, 0x11fff, 0x12400, 0x12470, 0x12480, 0x12f90,\r\n        0x13000, 0x13440, 0x13460, 0x14400, 0x16100, 0x16800, 0x16a40, 0x16a60, 0x16a6e, 0x16ac0, 0x16ad0, 0x16af0,\r\n        0x16b00, 0x16b50, 0x16b5b, 0x16b63, 0x16b7d, 0x16d40, 0x16e40, 0x16ea0, 0x16ebb, 0x16f00, 0x16f4f, 0x16f8f,\r\n        0x16fe0, 0x16ff0, 0x17000, 0x18cff, 0x18d80, 0x1aff0, 0x1aff5, 0x1affd, 0x1b000, 0x1b132, 0x1b150, 0x1b155,\r\n        0x1b164, 0x1b170, 0x1bc00, 0x1bc70, 0x1bc80, 0x1bc90, 0x1bc9c, 0x1cc00, 0x1cd00, 0x1ceba, 0x1cee0, 0x1cf00,\r\n        0x1cf30, 0x1cf50, 0x1d000, 0x1d100, 0x1d129, 0x1d17b, 0x1d200, 0x1d2c0, 0x1d2e0, 0x1d300, 0x1d360, 0x1d400,\r\n        0x1d456, 0x1d49e, 0x1d4a2, 0x1d4a5, 0x1d4a9, 0x1d4ae, 0x1d4bb, 0x1d4bd, 0x1d4c5, 0x1d507, 0x1d50d, 0x1d516,\r\n        0x1d51e, 0x1d53b, 0x1d540, 0x1d546, 0x1d54a, 0x1d552, 0x1d6a8, 0x1d7ce, 0x1da9b, 0x1daa1, 0x1df00, 0x1df25,\r\n        0x1e000, 0x1e008, 0x1e01b, 0x1e023, 0x1e026, 0x1e030, 0x1e08f, 0x1e100, 0x1e130, 0x1e140, 0x1e14e, 0x1e290,\r\n        0x1e2c0, 0x1e2ff, 0x1e4d0, 0x1e5d0, 0x1e5ff, 0x1e6c0, 0x1e6e0, 0x1e6fe, 0x1e7e0, 0x1e7e8, 0x1e7ed, 0x1e7f0,\r\n        0x1e800, 0x1e8c7, 0x1e900, 0x1e950, 0x1e95e, 0x1ec71, 0x1ed01, 0x1ee00, 0x1ee05, 0x1ee21, 0x1ee24, 0x1ee27,\r\n        0x1ee29, 0x1ee34, 0x1ee39, 0x1ee3b, 0x1ee42, 0x1ee47, 0x1ee49, 0x1ee4b, 0x1ee4d, 0x1ee51, 0x1ee54, 0x1ee57,\r\n        0x1ee59, 0x1ee5b, 0x1ee5d, 0x1ee5f, 0x1ee61, 0x1ee64, 0x1ee67, 0x1ee6c, 0x1ee74, 0x1ee79, 0x1ee7e, 0x1ee80,\r\n        0x1ee8b, 0x1eea1, 0x1eea5, 0x1eeab, 0x1eef0, 0x1f000, 0x1f030, 0x1f0a0, 0x1f0b1, 0x1f0c1, 0x1f0d1, 0x1f100,\r\n        0x1f1e6, 0x1f210, 0x1f240, 0x1f250, 0x1f260, 0x1f300, 0x1f6dc, 0x1f6f0, 0x1f700, 0x1f7e0, 0x1f7f0, 0x1f800,\r\n        0x1f810, 0x1f850, 0x1f860, 0x1f890, 0x1f8b0, 0x1f8c0, 0x1f8d0, 0x1f900, 0x1fa60, 0x1fa70, 0x1fa80, 0x1fa8e,\r\n        0x1fac8, 0x1facd, 0x1fadf, 0x1faef, 0x1fb00, 0x1fb94, 0x20000, 0x2a700, 0x2b820, 0x2ceb0, 0x2ebf0, 0x2f800,\r\n        0x30000, 0x31350, 0xe0100},\r\n    {0x5f, 0xc, 0x2ca, 0x6, 0x7, 0x1, 0x14, 0x18d, 0x26, 0x32, 0x3, 0x37, 0x1b, 0x6, 0x16, 0xc0, 0x30, 0x3b, 0x65, 0x3b,\r\n        0x31, 0xf, 0x1c, 0x1, 0xb, 0x20, 0x4b, 0xa1, 0x8, 0x2, 0x16, 0x7, 0x1, 0x4, 0x9, 0x2, 0x4, 0x1, 0x2, 0x5, 0x19,\r\n        0x3, 0x6, 0x2, 0x16, 0x7, 0x2, 0x2, 0x2, 0x1, 0x5, 0x2, 0x3, 0x1, 0x4, 0x1, 0x11, 0x3, 0x9, 0x3, 0x16, 0x7, 0x2,\r\n        0x5, 0xa, 0x3, 0x3, 0x1, 0x4, 0xc, 0x7, 0x3, 0x8, 0x2, 0x16, 0x7, 0x2, 0x5, 0x9, 0x2, 0x3, 0x3, 0x2, 0x5, 0x12,\r\n        0x2, 0x6, 0x3, 0x4, 0x2, 0x1, 0x2, 0x2, 0x3, 0xc, 0x5, 0x3, 0x4, 0x1, 0x1, 0x15, 0xd, 0x3, 0x17, 0x10, 0x9, 0x3,\r\n        0x4, 0x2, 0x3, 0x2, 0x4, 0xa, 0x16, 0x3, 0x17, 0xa, 0x5, 0x9, 0x3, 0x4, 0x2, 0x3, 0x4, 0xa, 0x3, 0xd, 0x3, 0x33,\r\n        0x3, 0x6, 0x10, 0x1a, 0x3, 0x12, 0x18, 0x9, 0x1, 0x7, 0x1, 0x6, 0x1, 0x8, 0xa, 0x3, 0x3a, 0x1d, 0x2, 0x1, 0x5,\r\n        0x18, 0x1, 0x17, 0x5, 0x1, 0x7, 0xa, 0x4, 0x48, 0x24, 0x27, 0x24, 0xf, 0xd, 0xc6, 0x1, 0x1, 0x179, 0x4, 0x7,\r\n        0x1, 0x4, 0x29, 0x4, 0x21, 0x4, 0x7, 0x1, 0x4, 0xf, 0x39, 0x4, 0x43, 0x20, 0x1a, 0x56, 0x6, 0x280, 0x1c, 0x59,\r\n        0x16, 0x18, 0x14, 0xd, 0x3, 0x2, 0x5e, 0xa, 0xa, 0xe, 0xb, 0x59, 0x2b, 0x46, 0x1f, 0xc, 0xc, 0x1, 0x2a, 0x5,\r\n        0x2c, 0x1a, 0xb, 0x3e, 0x41, 0x1d, 0xb, 0xa, 0xe, 0x2e, 0xc, 0x4d, 0xa6, 0x3c, 0xf, 0x3e, 0x2b, 0xb, 0x2b,\r\n        0x216, 0x6, 0x26, 0x6, 0x8, 0x1, 0x1, 0x1, 0x1f, 0x35, 0xf, 0xe, 0x6, 0x13, 0x3, 0x9, 0x18, 0x2f, 0x2, 0x1b,\r\n        0xd, 0x22, 0x21, 0x8c, 0x29a, 0xb, 0x714, 0x17e, 0x2d, 0x1, 0x1, 0x38, 0x2, 0x18, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7,\r\n        0x7, 0x7, 0x7e, 0x1a, 0x59, 0xd6, 0x10, 0x3f, 0x56, 0x67, 0x2b, 0x5e, 0x56, 0x30, 0x726d, 0x37, 0x15c, 0xb8,\r\n        0xdd, 0x3c, 0xa, 0x38, 0x46, 0xc, 0x74, 0x1e, 0x4e, 0xb, 0x21, 0x37, 0xe, 0xa, 0x67, 0x1c, 0x6, 0x6, 0x6, 0x7,\r\n        0x7, 0x3c, 0x7e, 0xa, 0x2ba4, 0x17, 0x31, 0x16e, 0x6a, 0x7, 0x5, 0x1a, 0x5, 0x1, 0x2, 0x2, 0x28a, 0x2a, 0x33,\r\n        0x13, 0x4, 0x5, 0x87, 0xbe, 0x6, 0x6, 0x6, 0x3, 0x7, 0x7, 0x2, 0xc, 0x1a, 0x13, 0x2, 0xf, 0xe, 0x7b, 0x3, 0x2d,\r\n        0x58, 0xd, 0x1, 0x2e, 0x1d, 0x31, 0x1c, 0x24, 0x1e, 0x2b, 0x1e, 0x25, 0xe, 0x9e, 0xa, 0x24, 0x24, 0x28, 0x34,\r\n        0xc, 0xf, 0x7, 0x2, 0xb, 0xf, 0x7, 0x2, 0x34, 0x137, 0x16, 0x8, 0x6, 0x2a, 0x9, 0x6, 0x1, 0x2c, 0x2, 0x1, 0x17,\r\n        0x48, 0x9, 0x13, 0x2, 0x21, 0x1b, 0x1b, 0x38, 0x14, 0x32, 0x2, 0x8, 0x3, 0x1d, 0x3, 0xa, 0x9, 0x40, 0x27, 0xc,\r\n        0x36, 0x1d, 0x1b, 0x1a, 0x4, 0x7, 0x49, 0x33, 0x33, 0x2e, 0xa, 0x26, 0x1d, 0x2, 0x1f, 0x2a, 0x3, 0x2, 0x6, 0x9,\r\n        0x2e, 0x2a, 0x1a, 0x1c, 0x17, 0x4e, 0x24, 0x3e, 0x5, 0x19, 0xa, 0x35, 0x12, 0x27, 0x60, 0x14, 0x12, 0x2f, 0x7,\r\n        0x1, 0x4, 0xf, 0xb, 0x3b, 0xa, 0x4, 0x8, 0x2, 0x16, 0x7, 0x2, 0x5, 0xa, 0x2, 0x3, 0x1, 0x1, 0x7, 0x7, 0x5, 0xa,\r\n        0x1, 0x1, 0x26, 0xa, 0x1, 0x1, 0x4, 0xa, 0x2, 0x2, 0x5c, 0x5, 0x48, 0xa, 0x36, 0x26, 0x45, 0xa, 0xd, 0x3a, 0xa,\r\n        0x14, 0x1b, 0xf, 0x17, 0x3c, 0x53, 0x8, 0x1, 0x8, 0x2, 0x1e, 0x2, 0xc, 0xa, 0x8, 0x2e, 0xb, 0x48, 0x53, 0x49,\r\n        0xa, 0x8, 0x22, 0xa, 0x9, 0x2d, 0xe, 0x1d, 0x20, 0x16, 0xe, 0x7, 0x2, 0x2c, 0x1, 0x2, 0x9, 0xa, 0x6, 0x2, 0x25,\r\n        0x2, 0x6, 0xa, 0x2c, 0xa, 0x19, 0x11, 0x29, 0x1d, 0x1, 0x32, 0x39b, 0x6f, 0x5, 0xc4, 0x63, 0x430, 0x16, 0xf9b,\r\n        0x247, 0x3a, 0x239, 0x1f, 0xa, 0x51, 0xa, 0x1e, 0x6, 0x46, 0xa, 0x7, 0x15, 0x13, 0x3a, 0x5b, 0x19, 0x19, 0x4b,\r\n        0x39, 0x11, 0x5, 0x7, 0x1cd6, 0x20, 0x73, 0x4, 0x7, 0x2, 0x123, 0x1, 0x3, 0x1, 0x4, 0x18c, 0x6b, 0xd, 0x9, 0xa,\r\n        0x4, 0xfd, 0x1b4, 0x17, 0x11, 0x2e, 0x17, 0x74, 0xf6, 0x27, 0x4a, 0x70, 0x46, 0x14, 0x14, 0x57, 0x19, 0x55,\r\n        0x47, 0x2, 0x1, 0x2, 0x4, 0xc, 0x1, 0x7, 0x41, 0x4, 0x8, 0x7, 0x1c, 0x4, 0x5, 0x1, 0x7, 0x154, 0x124, 0x2be,\r\n        0x5, 0xf, 0x1f, 0x6, 0x7, 0x11, 0x7, 0x2, 0x5, 0x3e, 0x1, 0x2d, 0xe, 0xa, 0x2, 0x1f, 0x3a, 0x1, 0x2a, 0x2b, 0x1,\r\n        0x1f, 0x16, 0x2, 0x7, 0x4, 0x2, 0xf, 0xc5, 0x10, 0x4c, 0xa, 0x2, 0x44, 0x3d, 0x4, 0x1b, 0x2, 0x1, 0x1, 0xa, 0x4,\r\n        0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x4, 0x7, 0x4, 0x4, 0x1, 0xa,\r\n        0x11, 0x3, 0x5, 0x11, 0x2, 0x2c, 0x64, 0xf, 0xf, 0xf, 0x25, 0xae, 0x1d, 0x2c, 0x9, 0x2, 0x6, 0x3d9, 0x11, 0xd,\r\n        0xda, 0xc, 0x1, 0xc, 0x38, 0xa, 0x28, 0x1e, 0xc, 0x2, 0x9, 0x158, 0xe, 0xd, 0xb, 0x39, 0x1, 0x10, 0xc, 0xa,\r\n        0x93, 0x67, 0xa6e0, 0x111e, 0x168e, 0x1d31, 0x26e, 0x21e, 0x134b, 0x212a, 0xf0}};\r\n\r\n// DerivedCoreProperties-17.0.0.txt\r\n// Date: 2025-07-30, 23:55:08 GMT\r\nenum class _Grapheme_Extend_property_values : uint8_t { _Grapheme_Extend_value, _No_value = 255 };\r\n\r\n// DerivedCoreProperties-17.0.0.txt\r\n// Date: 2025-07-30, 23:55:08 GMT\r\ninline constexpr _Unicode_property_data<_Grapheme_Extend_property_values, 383, true> _Grapheme_Extend_property_data{\r\n    {0x300, 0x483, 0x591, 0x5bf, 0x5c1, 0x5c4, 0x5c7, 0x610, 0x64b, 0x670, 0x6d6, 0x6df, 0x6e7, 0x6ea, 0x711, 0x730,\r\n        0x7a6, 0x7eb, 0x7fd, 0x816, 0x81b, 0x825, 0x829, 0x859, 0x897, 0x8ca, 0x8e3, 0x93a, 0x93c, 0x941, 0x94d, 0x951,\r\n        0x962, 0x981, 0x9bc, 0x9be, 0x9c1, 0x9cd, 0x9d7, 0x9e2, 0x9fe, 0xa01, 0xa3c, 0xa41, 0xa47, 0xa4b, 0xa51, 0xa70,\r\n        0xa75, 0xa81, 0xabc, 0xac1, 0xac7, 0xacd, 0xae2, 0xafa, 0xb01, 0xb3c, 0xb3e, 0xb41, 0xb4d, 0xb55, 0xb62, 0xb82,\r\n        0xbbe, 0xbc0, 0xbcd, 0xbd7, 0xc00, 0xc04, 0xc3c, 0xc3e, 0xc46, 0xc4a, 0xc55, 0xc62, 0xc81, 0xcbc, 0xcbf, 0xcc2,\r\n        0xcc6, 0xcca, 0xcd5, 0xce2, 0xd00, 0xd3b, 0xd3e, 0xd41, 0xd4d, 0xd57, 0xd62, 0xd81, 0xdca, 0xdcf, 0xdd2, 0xdd6,\r\n        0xddf, 0xe31, 0xe34, 0xe47, 0xeb1, 0xeb4, 0xec8, 0xf18, 0xf35, 0xf37, 0xf39, 0xf71, 0xf80, 0xf86, 0xf8d, 0xf99,\r\n        0xfc6, 0x102d, 0x1032, 0x1039, 0x103d, 0x1058, 0x105e, 0x1071, 0x1082, 0x1085, 0x108d, 0x109d, 0x135d, 0x1712,\r\n        0x1732, 0x1752, 0x1772, 0x17b4, 0x17b7, 0x17c6, 0x17c9, 0x17dd, 0x180b, 0x180f, 0x1885, 0x18a9, 0x1920, 0x1927,\r\n        0x1932, 0x1939, 0x1a17, 0x1a1b, 0x1a56, 0x1a58, 0x1a60, 0x1a62, 0x1a65, 0x1a73, 0x1a7f, 0x1ab0, 0x1ae0, 0x1b00,\r\n        0x1b34, 0x1b42, 0x1b6b, 0x1b80, 0x1ba2, 0x1ba8, 0x1be6, 0x1be8, 0x1bed, 0x1bef, 0x1c2c, 0x1c36, 0x1cd0, 0x1cd4,\r\n        0x1ce2, 0x1ced, 0x1cf4, 0x1cf8, 0x1dc0, 0x200c, 0x20d0, 0x2cef, 0x2d7f, 0x2de0, 0x302a, 0x3099, 0xa66f, 0xa674,\r\n        0xa69e, 0xa6f0, 0xa802, 0xa806, 0xa80b, 0xa825, 0xa82c, 0xa8c4, 0xa8e0, 0xa8ff, 0xa926, 0xa947, 0xa953, 0xa980,\r\n        0xa9b3, 0xa9b6, 0xa9bc, 0xa9c0, 0xa9e5, 0xaa29, 0xaa31, 0xaa35, 0xaa43, 0xaa4c, 0xaa7c, 0xaab0, 0xaab2, 0xaab7,\r\n        0xaabe, 0xaac1, 0xaaec, 0xaaf6, 0xabe5, 0xabe8, 0xabed, 0xfb1e, 0xfe00, 0xfe20, 0xff9e, 0x101fd, 0x102e0,\r\n        0x10376, 0x10a01, 0x10a05, 0x10a0c, 0x10a38, 0x10a3f, 0x10ae5, 0x10d24, 0x10d69, 0x10eab, 0x10efa, 0x10f46,\r\n        0x10f82, 0x11001, 0x11038, 0x11070, 0x11073, 0x1107f, 0x110b3, 0x110b9, 0x110c2, 0x11100, 0x11127, 0x1112d,\r\n        0x11173, 0x11180, 0x111b6, 0x111c0, 0x111c9, 0x111cf, 0x1122f, 0x11234, 0x1123e, 0x11241, 0x112df, 0x112e3,\r\n        0x11300, 0x1133b, 0x1133e, 0x11340, 0x1134d, 0x11357, 0x11366, 0x11370, 0x113b8, 0x113bb, 0x113c2, 0x113c5,\r\n        0x113c7, 0x113ce, 0x113d2, 0x113e1, 0x11438, 0x11442, 0x11446, 0x1145e, 0x114b0, 0x114b3, 0x114ba, 0x114bd,\r\n        0x114bf, 0x114c2, 0x115af, 0x115b2, 0x115bc, 0x115bf, 0x115dc, 0x11633, 0x1163d, 0x1163f, 0x116ab, 0x116ad,\r\n        0x116b0, 0x1171d, 0x1171f, 0x11722, 0x11727, 0x1182f, 0x11839, 0x11930, 0x1193b, 0x11943, 0x119d4, 0x119da,\r\n        0x119e0, 0x11a01, 0x11a33, 0x11a3b, 0x11a47, 0x11a51, 0x11a59, 0x11a8a, 0x11a98, 0x11b60, 0x11b62, 0x11b66,\r\n        0x11c30, 0x11c38, 0x11c3f, 0x11c92, 0x11caa, 0x11cb2, 0x11cb5, 0x11d31, 0x11d3a, 0x11d3c, 0x11d3f, 0x11d47,\r\n        0x11d90, 0x11d95, 0x11d97, 0x11ef3, 0x11f00, 0x11f36, 0x11f40, 0x11f5a, 0x13440, 0x13447, 0x1611e, 0x1612d,\r\n        0x16af0, 0x16b30, 0x16f4f, 0x16f8f, 0x16fe4, 0x16ff0, 0x1bc9d, 0x1cf00, 0x1cf30, 0x1d165, 0x1d16d, 0x1d17b,\r\n        0x1d185, 0x1d1aa, 0x1d242, 0x1da00, 0x1da3b, 0x1da75, 0x1da84, 0x1da9b, 0x1daa1, 0x1e000, 0x1e008, 0x1e01b,\r\n        0x1e023, 0x1e026, 0x1e08f, 0x1e130, 0x1e2ae, 0x1e2ec, 0x1e4ec, 0x1e5ee, 0x1e6e3, 0x1e6e6, 0x1e6ee, 0x1e6f5,\r\n        0x1e8d0, 0x1e944, 0xe0020, 0xe0100},\r\n    {0x70, 0x7, 0x2d, 0x1, 0x2, 0x2, 0x1, 0xb, 0x15, 0x1, 0x7, 0x6, 0x2, 0x4, 0x1, 0x1b, 0xb, 0x9, 0x1, 0x4, 0x9, 0x3,\r\n        0x5, 0x3, 0x9, 0x18, 0x20, 0x1, 0x1, 0x8, 0x1, 0x7, 0x2, 0x1, 0x1, 0x1, 0x4, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2,\r\n        0x2, 0x3, 0x1, 0x2, 0x1, 0x2, 0x1, 0x5, 0x2, 0x1, 0x2, 0x6, 0x1, 0x1, 0x2, 0x4, 0x1, 0x3, 0x2, 0x1, 0x1, 0x1,\r\n        0x1, 0x1, 0x1, 0x1, 0x1, 0x3, 0x3, 0x4, 0x2, 0x2, 0x1, 0x1, 0x2, 0x1, 0x3, 0x4, 0x2, 0x2, 0x2, 0x2, 0x1, 0x4,\r\n        0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x3, 0x1, 0x1, 0x1, 0x7, 0x8, 0x1, 0x9, 0x7, 0x2, 0x1, 0x1, 0x1, 0xe, 0x5, 0x2,\r\n        0xb, 0x24, 0x1, 0x4, 0x6, 0x2, 0x2, 0x2, 0x3, 0x4, 0x1, 0x2, 0x1, 0x1, 0x3, 0x4, 0x3, 0x2, 0x2, 0x2, 0x7, 0x1,\r\n        0xb, 0x1, 0x3, 0x1, 0x2, 0x1, 0x3, 0x2, 0x1, 0x3, 0x2, 0x1, 0x1, 0x7, 0x1, 0x1, 0x8, 0xa, 0x1, 0x2e, 0xc, 0x4,\r\n        0xa, 0x3, 0x9, 0x2, 0x4, 0x6, 0x1, 0x2, 0x1, 0x5, 0x8, 0x2, 0x3, 0xd, 0x7, 0x1, 0x1, 0x2, 0x40, 0x1, 0x21, 0x3,\r\n        0x1, 0x20, 0x6, 0x2, 0x4, 0xa, 0x2, 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, 0x2, 0x12, 0x1, 0x8, 0xb, 0x1, 0x3, 0x1, 0x4,\r\n        0x2, 0x1, 0x1, 0x6, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x3, 0x2, 0x2, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x10, 0x10,\r\n        0x2, 0x1, 0x1, 0x5, 0x3, 0x2, 0x4, 0x3, 0x1, 0x2, 0x4, 0x5, 0x2, 0x6, 0xb, 0x4, 0x1, 0xf, 0x1, 0x2, 0x3, 0x4,\r\n        0x2, 0x1, 0x3, 0x5, 0x8, 0x1, 0x2, 0x9, 0x1, 0x4, 0x1, 0x3, 0x4, 0x1, 0x1, 0x1, 0x8, 0x2, 0x2, 0x1, 0x1, 0x1,\r\n        0x1, 0x7, 0x5, 0x1, 0x6, 0x1, 0x1, 0x3, 0x3, 0x1, 0x2, 0x8, 0x3, 0x1, 0x1, 0x1, 0x6, 0x1, 0x1, 0x2, 0x2, 0x1,\r\n        0x4, 0x2, 0x2, 0x2, 0x8, 0x1, 0x2, 0x1, 0x1, 0x8, 0x1, 0x1, 0x4, 0x5, 0x9, 0x2, 0x1, 0x4, 0x1, 0x4, 0x2, 0x1,\r\n        0xa, 0x6, 0x4, 0x1, 0x6, 0x3, 0xd, 0x2, 0x1, 0x3, 0x1, 0x7, 0x6, 0x1, 0x16, 0x7, 0x2, 0x2, 0x6, 0x1, 0x2, 0x7,\r\n        0x1, 0x2, 0x1, 0x1, 0x2, 0x2, 0x5, 0x3, 0x1, 0x1, 0xf, 0xc, 0x3, 0x5, 0x7, 0x1, 0x4, 0x1, 0x2, 0x2, 0x2e, 0x17,\r\n        0x5, 0x6, 0x8, 0x7, 0x4, 0x3, 0x37, 0x32, 0x1, 0x1, 0x5, 0xf, 0x7, 0x11, 0x7, 0x2, 0x5, 0x1, 0x7, 0x1, 0x4, 0x4,\r\n        0x2, 0x1, 0x1, 0x2, 0x1, 0x7, 0x7, 0x60, 0xf0}};\r\n\r\n// EastAsianWidth-17.0.0.txt\r\n// Date: 2025-07-24, 00:12:54 GMT\r\ninline constexpr char32_t _Width_estimate_intervals_v2[] = {0x1100, 0x1160, 0x231a, 0x231c, 0x2329, 0x232b, 0x23e9,\r\n    0x23ed, 0x23f0, 0x23f1, 0x23f3, 0x23f4, 0x25fd, 0x25ff, 0x2614, 0x2616, 0x2630, 0x2638, 0x2648, 0x2654, 0x267f,\r\n    0x2680, 0x268a, 0x2690, 0x2693, 0x2694, 0x26a1, 0x26a2, 0x26aa, 0x26ac, 0x26bd, 0x26bf, 0x26c4, 0x26c6, 0x26ce,\r\n    0x26cf, 0x26d4, 0x26d5, 0x26ea, 0x26eb, 0x26f2, 0x26f4, 0x26f5, 0x26f6, 0x26fa, 0x26fb, 0x26fd, 0x26fe, 0x2705,\r\n    0x2706, 0x270a, 0x270c, 0x2728, 0x2729, 0x274c, 0x274d, 0x274e, 0x274f, 0x2753, 0x2756, 0x2757, 0x2758, 0x2795,\r\n    0x2798, 0x27b0, 0x27b1, 0x27bf, 0x27c0, 0x2b1b, 0x2b1d, 0x2b50, 0x2b51, 0x2b55, 0x2b56, 0x2e80, 0x2e9a, 0x2e9b,\r\n    0x2ef4, 0x2f00, 0x2fd6, 0x2ff0, 0x303f, 0x3041, 0x3097, 0x3099, 0x3100, 0x3105, 0x3130, 0x3131, 0x318f, 0x3190,\r\n    0x31e6, 0x31ef, 0x321f, 0x3220, 0x3248, 0x3250, 0xa48d, 0xa490, 0xa4c7, 0xa960, 0xa97d, 0xac00, 0xd7a4, 0xf900,\r\n    0xfb00, 0xfe10, 0xfe1a, 0xfe30, 0xfe53, 0xfe54, 0xfe67, 0xfe68, 0xfe6c, 0xff01, 0xff61, 0xffe0, 0xffe7, 0x16fe0,\r\n    0x16fe5, 0x16ff0, 0x16ff7, 0x17000, 0x18cd6, 0x18cff, 0x18d1f, 0x18d80, 0x18df3, 0x1aff0, 0x1aff4, 0x1aff5, 0x1affc,\r\n    0x1affd, 0x1afff, 0x1b000, 0x1b123, 0x1b132, 0x1b133, 0x1b150, 0x1b153, 0x1b155, 0x1b156, 0x1b164, 0x1b168, 0x1b170,\r\n    0x1b2fc, 0x1d300, 0x1d357, 0x1d360, 0x1d377, 0x1f004, 0x1f005, 0x1f0cf, 0x1f0d0, 0x1f18e, 0x1f18f, 0x1f191, 0x1f19b,\r\n    0x1f200, 0x1f203, 0x1f210, 0x1f23c, 0x1f240, 0x1f249, 0x1f250, 0x1f252, 0x1f260, 0x1f266, 0x1f300, 0x1f650, 0x1f680,\r\n    0x1f6c6, 0x1f6cc, 0x1f6cd, 0x1f6d0, 0x1f6d3, 0x1f6d5, 0x1f6d9, 0x1f6dc, 0x1f6e0, 0x1f6eb, 0x1f6ed, 0x1f6f4, 0x1f6fd,\r\n    0x1f7e0, 0x1f7ec, 0x1f7f0, 0x1f7f1, 0x1f900, 0x1fa00, 0x1fa70, 0x1fa7d, 0x1fa80, 0x1fa8b, 0x1fa8e, 0x1fac7, 0x1fac8,\r\n    0x1fac9, 0x1facd, 0x1fadd, 0x1fadf, 0x1faeb, 0x1faef, 0x1faf9, 0x20000, 0x2fffe, 0x30000, 0x3fffe};\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_FORMAT_UCD_TABLES_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_formatter.hpp",
    "content": "// __msvc_formatter.hpp internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// NOTE:\r\n// The contents of this header are derived in part from libfmt under the following license:\r\n\r\n// Copyright (c) 2012 - present, Victor Zverovich\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining\r\n// a copy of this software and associated documentation files (the\r\n// \"Software\"), to deal in the Software without restriction, including\r\n// without limitation the rights to use, copy, modify, merge, publish,\r\n// distribute, sublicense, and/or sell copies of the Software, and to\r\n// permit persons to whom the Software is furnished to do so, subject to\r\n// the following conditions:\r\n//\r\n// The above copyright notice and this permission notice shall be\r\n// included in all copies or substantial portions of the Software.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n//\r\n// --- Optional exception to the license ---\r\n//\r\n// As an exception, if, as a result of your compiling your source code, portions\r\n// of this Software are embedded into a machine-executable object form of such\r\n// source code, you may redistribute such embedded portions in such object form\r\n// without including the above copyright and permission notices.\r\n\r\n#ifndef __MSVC_FORMATTER_HPP\r\n#define __MSVC_FORMATTER_HPP\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX20\r\n#error The contents of <format> are only available with C++20. (Also, you should not include this internal header.)\r\n#endif // !_HAS_CXX20\r\n\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <type_traits>\r\n\r\n#if _HAS_CXX23\r\n#include <xutility>\r\n#endif // _HAS_CXX23\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\n#if _HAS_CXX23\r\n#define _FMT_P2286_BEGIN inline namespace __p2286 {\r\n#define _FMT_P2286_END   }\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n#define _FMT_P2286_BEGIN\r\n#define _FMT_P2286_END\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\nenum class _Fmt_align : uint8_t { _None, _Left, _Right, _Center };\r\n\r\nenum class _Fmt_sign : uint8_t { _None, _Plus, _Minus, _Space };\r\n\r\nenum class _Basic_format_arg_type : uint8_t {\r\n    _None,\r\n    _Int_type,\r\n    _UInt_type,\r\n    _Long_long_type,\r\n    _ULong_long_type,\r\n    _Bool_type,\r\n    _Char_type,\r\n    _Float_type,\r\n    _Double_type,\r\n    _Long_double_type,\r\n    _Pointer_type,\r\n    _CString_type,\r\n    _String_type,\r\n    _Custom_type,\r\n};\r\nstatic_assert(static_cast<int>(_Basic_format_arg_type::_Custom_type) < 16, \"must fit in 4-bit bitfield\");\r\n\r\n#if _HAS_CXX23\r\n_EXPORT_STD template <class _Ty> // specializations allowed by N5014 [format.formatter.locking]/1\r\nconstexpr bool enable_nonlocking_formatter_optimization = false;\r\n\r\n_NODISCARD consteval bool _Is_debug_enabled_fmt_type(_Basic_format_arg_type _Ty) {\r\n    return _Ty == _Basic_format_arg_type::_Char_type || _Ty == _Basic_format_arg_type::_CString_type\r\n        || _Ty == _Basic_format_arg_type::_String_type;\r\n}\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _CharT>\r\nstruct _Basic_format_specs {\r\n    int _Width            = 0;\r\n    int _Precision        = -1;\r\n    char _Type            = '\\0';\r\n    _Fmt_align _Alignment = _Fmt_align::_None;\r\n    _Fmt_sign _Sgn        = _Fmt_sign::_None;\r\n    bool _Alt             = false;\r\n    bool _Localized       = false;\r\n    bool _Leading_zero    = false;\r\n    uint8_t _Fill_length  = 1;\r\n    // At most one codepoint (so one char32_t or four utf-8 char8_t).\r\n    _CharT _Fill[4 / sizeof(_CharT)] = {_CharT{' '}};\r\n};\r\n\r\n// Adds width and precision references to _Basic_format_specs.\r\n// This is required for std::formatter implementations because we must\r\n// parse the format specs without having access to the format args (via a format context).\r\ntemplate <class _CharT>\r\nstruct _Dynamic_format_specs : _Basic_format_specs<_CharT> {\r\n    int _Dynamic_width_index     = -1;\r\n    int _Dynamic_precision_index = -1;\r\n};\r\n\r\n[[noreturn]] inline void _Throw_format_error(const char* _Message);\r\n\r\n_EXPORT_STD template <class _CharT>\r\nclass _NO_SPECIALIZATIONS_CITING(\"N5014 [format.parse.ctx]/2\") basic_format_parse_context;\r\n\r\ntemplate <class _CharT>\r\nconcept _Format_supported_charT = _Is_any_of_v<_CharT, char, wchar_t>;\r\n\r\n_EXPORT_STD template <class _Ty, class _CharT = char>\r\nstruct formatter {\r\n    formatter()                            = delete;\r\n    formatter(const formatter&)            = delete;\r\n    formatter& operator=(const formatter&) = delete;\r\n};\r\n\r\n_FMT_P2286_BEGIN\r\ntemplate <class _Ty, class _CharT, _Basic_format_arg_type _ArgType>\r\nstruct _Formatter_base {\r\npublic:\r\n#if _HAS_CXX23\r\n    constexpr void _Set_debug_format() noexcept\r\n        requires (_Is_debug_enabled_fmt_type(_ArgType))\r\n    {\r\n        _Specs._Type = '?';\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _ParseContext = basic_format_parse_context<_CharT>>\r\n    constexpr _ParseContext::iterator parse(type_identity_t<_ParseContext&> _Parse_ctx); // defined in <format>\r\n\r\n    template <class _FormatContext>\r\n    _FormatContext::iterator format(const _Ty& _Val, _FormatContext& _Format_ctx) const; // defined in <format>\r\n\r\nprivate:\r\n    _Dynamic_format_specs<_CharT> _Specs;\r\n};\r\n_FMT_P2286_END\r\n\r\n#if _HAS_CXX23\r\n#define _FORMAT_SPECIALIZE_NONLOCKING_FOR(_Type) \\\r\n    template <>                                  \\\r\n    inline constexpr bool enable_nonlocking_formatter_optimization<_Type> = true;\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n#define _FORMAT_SPECIALIZE_NONLOCKING_FOR(_Type)\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\n#define _FORMAT_SPECIALIZE_FOR(_Type, _ArgType) \\\r\n    _FORMAT_SPECIALIZE_NONLOCKING_FOR(_Type)    \\\r\n    template <_Format_supported_charT _CharT>   \\\r\n    struct formatter<_Type, _CharT> : _Formatter_base<_Type, _CharT, _ArgType> {}\r\n\r\n_FORMAT_SPECIALIZE_FOR(int, _Basic_format_arg_type::_Int_type);\r\n_FORMAT_SPECIALIZE_FOR(unsigned int, _Basic_format_arg_type::_UInt_type);\r\n_FORMAT_SPECIALIZE_FOR(long long, _Basic_format_arg_type::_Long_long_type);\r\n_FORMAT_SPECIALIZE_FOR(unsigned long long, _Basic_format_arg_type::_ULong_long_type);\r\n_FORMAT_SPECIALIZE_FOR(bool, _Basic_format_arg_type::_Bool_type);\r\n_FORMAT_SPECIALIZE_FOR(float, _Basic_format_arg_type::_Float_type);\r\n_FORMAT_SPECIALIZE_FOR(double, _Basic_format_arg_type::_Double_type);\r\n_FORMAT_SPECIALIZE_FOR(long double, _Basic_format_arg_type::_Long_double_type);\r\n_FORMAT_SPECIALIZE_FOR(nullptr_t, _Basic_format_arg_type::_Pointer_type);\r\n_FORMAT_SPECIALIZE_FOR(void*, _Basic_format_arg_type::_Pointer_type);\r\n_FORMAT_SPECIALIZE_FOR(const void*, _Basic_format_arg_type::_Pointer_type);\r\n_FORMAT_SPECIALIZE_FOR(short, _Basic_format_arg_type::_Int_type);\r\n_FORMAT_SPECIALIZE_FOR(unsigned short, _Basic_format_arg_type::_UInt_type);\r\n_FORMAT_SPECIALIZE_FOR(long, _Basic_format_arg_type::_Int_type);\r\n_FORMAT_SPECIALIZE_FOR(unsigned long, _Basic_format_arg_type::_UInt_type);\r\n_FORMAT_SPECIALIZE_FOR(signed char, _Basic_format_arg_type::_Int_type);\r\n_FORMAT_SPECIALIZE_FOR(unsigned char, _Basic_format_arg_type::_UInt_type);\r\n\r\n#undef _FORMAT_SPECIALIZE_FOR\r\n#undef _FORMAT_SPECIALIZE_NONLOCKING_FOR\r\n\r\n// not using the macro because we'd like to add 'set_debug_format' member function in C++23 mode\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<char, _CharT> : _Formatter_base<char, _CharT, _Basic_format_arg_type::_Char_type> {\r\n#if _HAS_CXX23\r\n    constexpr void set_debug_format() noexcept {\r\n        this->_Set_debug_format();\r\n    }\r\n#endif // _HAS_CXX23\r\n};\r\n\r\n// not using the macro because we'd like to avoid the formatter<wchar_t, char> specialization\r\ntemplate <>\r\nstruct formatter<wchar_t, wchar_t> : _Formatter_base<wchar_t, wchar_t, _Basic_format_arg_type::_Char_type> {\r\n#if _HAS_CXX23\r\n    constexpr void set_debug_format() noexcept {\r\n        _Set_debug_format();\r\n    }\r\n#endif // _HAS_CXX23\r\n};\r\n\r\n// We could use the macro for these specializations, but it's confusing to refer to symbols that are defined\r\n// inside the macro in the macro's \"call\".\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CharT*, _CharT> : _Formatter_base<_CharT*, _CharT, _Basic_format_arg_type::_CString_type> {\r\n#if _HAS_CXX23\r\n    constexpr void set_debug_format() noexcept {\r\n        this->_Set_debug_format();\r\n    }\r\n#endif // _HAS_CXX23\r\n};\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<const _CharT*, _CharT>\r\n    : _Formatter_base<const _CharT*, _CharT, _Basic_format_arg_type::_CString_type> {\r\n#if _HAS_CXX23\r\n    constexpr void set_debug_format() noexcept {\r\n        this->_Set_debug_format();\r\n    }\r\n#endif // _HAS_CXX23\r\n};\r\n\r\ntemplate <_Format_supported_charT _CharT, size_t _Nx>\r\nstruct formatter<_CharT[_Nx], _CharT> : _Formatter_base<_CharT[_Nx], _CharT, _Basic_format_arg_type::_CString_type> {\r\n#if _HAS_CXX23\r\n    constexpr void set_debug_format() noexcept {\r\n        this->_Set_debug_format();\r\n    }\r\n#endif // _HAS_CXX23\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nclass basic_string;\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nclass basic_string_view;\r\n\r\ntemplate <_Format_supported_charT _CharT, class _Traits, class _Allocator>\r\nstruct formatter<basic_string<_CharT, _Traits, _Allocator>, _CharT>\r\n    : _Formatter_base<basic_string<_CharT, _Traits, _Allocator>, _CharT, _Basic_format_arg_type::_String_type> {\r\n#if _HAS_CXX23\r\n    constexpr void set_debug_format() noexcept {\r\n        this->_Set_debug_format();\r\n    }\r\n#endif // _HAS_CXX23\r\n};\r\n\r\ntemplate <_Format_supported_charT _CharT, class _Traits>\r\nstruct formatter<basic_string_view<_CharT, _Traits>, _CharT>\r\n    : _Formatter_base<basic_string_view<_CharT, _Traits>, _CharT, _Basic_format_arg_type::_String_type> {\r\n#if _HAS_CXX23\r\n    constexpr void set_debug_format() noexcept {\r\n        this->_Set_debug_format();\r\n    }\r\n#endif // _HAS_CXX23\r\n};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\nstruct formatter<char*, wchar_t> {\r\n    formatter()                            = delete;\r\n    formatter(const formatter&)            = delete;\r\n    formatter& operator=(const formatter&) = delete;\r\n};\r\n\r\ntemplate <>\r\nstruct formatter<const char*, wchar_t> {\r\n    formatter()                            = delete;\r\n    formatter(const formatter&)            = delete;\r\n    formatter& operator=(const formatter&) = delete;\r\n};\r\n\r\ntemplate <size_t _Size>\r\nstruct formatter<char[_Size], wchar_t> {\r\n    formatter()                            = delete;\r\n    formatter(const formatter&)            = delete;\r\n    formatter& operator=(const formatter&) = delete;\r\n};\r\n\r\ntemplate <class _Traits, class _Allocator>\r\nstruct formatter<basic_string<char, _Traits, _Allocator>, wchar_t> {\r\n    formatter()                            = delete;\r\n    formatter(const formatter&)            = delete;\r\n    formatter& operator=(const formatter&) = delete;\r\n};\r\n\r\ntemplate <class _Traits>\r\nstruct formatter<basic_string_view<char, _Traits>, wchar_t> {\r\n    formatter()                            = delete;\r\n    formatter(const formatter&)            = delete;\r\n    formatter& operator=(const formatter&) = delete;\r\n};\r\n\r\n_EXPORT_STD enum class range_format { disabled, map, set, sequence, string, debug_string };\r\n\r\ntemplate <class _Ty>\r\nstruct _Invalid_format_kind {\r\n    static_assert(false, \"A program that instantiates the primary template of format_kind is ill-formed. \"\r\n                         \"(N4981 [format.range.fmtkind]/1)\");\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconstexpr _Invalid_format_kind<_Ty> format_kind; // specializations allowed by N5014 [format.range.fmtkind]/3\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_two_tuple = false;\r\n\r\ntemplate <class _Ty, class _Uty>\r\nconstexpr bool _Is_two_tuple<pair<_Ty, _Uty>> = true;\r\n\r\ntemplate <class _Ty, class _Uty>\r\nconstexpr bool _Is_two_tuple<tuple<_Ty, _Uty>> = true;\r\n\r\ntemplate <_RANGES input_range _Rng>\r\n    requires same_as<_Rng, remove_cvref_t<_Rng>>\r\nconstexpr range_format format_kind<_Rng> = []() consteval {\r\n    using _Ref_value_t = remove_cvref_t<_RANGES range_reference_t<_Rng>>;\r\n    if constexpr (same_as<_Ref_value_t, _Rng>) {\r\n        return range_format::disabled;\r\n    } else if constexpr (requires { typename _Rng::key_type; }) {\r\n        if constexpr (requires { typename _Rng::mapped_type; } && _Is_two_tuple<_Ref_value_t>) {\r\n            return range_format::map;\r\n        } else {\r\n            return range_format::set;\r\n        }\r\n    } else {\r\n        return range_format::sequence;\r\n    }\r\n}();\r\n\r\n// Specializations for pairs, tuples, and ranges are forward-declared to avoid any risk of using the disabled primary\r\n// template.\r\n\r\n// Per LWG-3997, `_CharT` in library-provided `formatter` specializations is\r\n// constrained to character types supported by `format`.\r\n\r\ntemplate <class _Rng>\r\nconcept _Formatting_enabled_range = format_kind<_Rng> != range_format::disabled;\r\n\r\ntemplate <_RANGES input_range _Rng, _Format_supported_charT _CharT>\r\n    requires _Formatting_enabled_range<_Rng>\r\nstruct formatter<_Rng, _CharT>;\r\n\r\ntemplate <_Format_supported_charT _CharT, class _Ty1, class _Ty2>\r\nstruct formatter<pair<_Ty1, _Ty2>, _CharT>;\r\n\r\ntemplate <_Format_supported_charT _CharT, class... _Types>\r\nstruct formatter<tuple<_Types...>, _CharT>;\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nconstexpr bool enable_nonlocking_formatter_optimization<_CharT> = true;\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nconstexpr bool enable_nonlocking_formatter_optimization<_CharT*> = true;\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nconstexpr bool enable_nonlocking_formatter_optimization<const _CharT*> = true;\r\n\r\ntemplate <_Format_supported_charT _CharT, size_t _Nx>\r\nconstexpr bool enable_nonlocking_formatter_optimization<_CharT[_Nx]> = true;\r\n\r\ntemplate <_Format_supported_charT _CharT, class _Traits, class _Allocator>\r\nconstexpr bool enable_nonlocking_formatter_optimization<basic_string<_CharT, _Traits, _Allocator>> = true;\r\n\r\ntemplate <_Format_supported_charT _CharT, class _Traits>\r\nconstexpr bool enable_nonlocking_formatter_optimization<basic_string_view<_CharT, _Traits>> = true;\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nconstexpr bool enable_nonlocking_formatter_optimization<pair<_Ty1, _Ty2>> =\r\n    enable_nonlocking_formatter_optimization<remove_cvref_t<_Ty1>>\r\n    && enable_nonlocking_formatter_optimization<remove_cvref_t<_Ty2>>;\r\n\r\ntemplate <class... _Ts>\r\nconstexpr bool enable_nonlocking_formatter_optimization<tuple<_Ts...>> =\r\n    (enable_nonlocking_formatter_optimization<remove_cvref_t<_Ts>> && ...);\r\n\r\ntemplate <class _CharT>\r\nstruct _Fill_align_and_width_specs {\r\n    int _Width               = -1;\r\n    int _Dynamic_width_index = -1;\r\n    _Fmt_align _Alignment    = _Fmt_align::_None;\r\n    uint8_t _Fill_length     = 1;\r\n    // At most one codepoint (so one char32_t or four utf-8 char8_t).\r\n    _CharT _Fill[4 / sizeof(_CharT)]{' '};\r\n};\r\n\r\ntemplate <class _CharT>\r\nstruct _Fill_align_and_width_formatter {\r\npublic:\r\n    template <class _ParseContext = basic_format_parse_context<_CharT>> // improves throughput, see GH-5003\r\n    _NODISCARD constexpr _ParseContext::iterator _Parse(\r\n        type_identity_t<_ParseContext&> _Parse_ctx); // defined in <format>\r\n\r\n    template <class _FormatContext, class _Func>\r\n    _NODISCARD _FormatContext::iterator _Format(_FormatContext& _Format_ctx, const int _Width,\r\n        _Fmt_align _Default_align,\r\n        _Func&& _Fn) const; // defined in <format>\r\n\r\nprivate:\r\n    _Fill_align_and_width_specs<_CharT> _Specs;\r\n};\r\n#endif // _HAS_CXX23\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_FORMATTER_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_heap_algorithms.hpp",
    "content": "// __msvc_heap_algorithms.hpp internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef __MSVC_HEAP_ALGORITHMS_HPP\r\n#define __MSVC_HEAP_ALGORITHMS_HPP\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <xutility>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _RanIt, class _Ty, class _Pr>\r\n_CONSTEXPR20 void _Push_heap_by_index(\r\n    _RanIt _First, _Iter_diff_t<_RanIt> _Hole, _Iter_diff_t<_RanIt> _Top, _Ty&& _Val, _Pr _Pred) {\r\n    // percolate _Hole to _Top or where _Val belongs\r\n    using _Diff = _Iter_diff_t<_RanIt>;\r\n    for (_Diff _Idx                                                         = (_Hole - 1) >> 1; // shift for codegen\r\n        _Top < _Hole && _DEBUG_LT_PRED(_Pred, *(_First + _Idx), _Val); _Idx = (_Hole - 1) >> 1) { // shift for codegen\r\n        // move _Hole up to parent\r\n        *(_First + _Hole) = _STD move(*(_First + _Idx));\r\n        _Hole             = _Idx;\r\n    }\r\n\r\n    *(_First + _Hole) = _STD forward<_Ty>(_Val); // drop _Val into final hole\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt, class _Pr>\r\n_CONSTEXPR20 void push_heap(_RanIt _First, _RanIt _Last, _Pr _Pred) {\r\n    // push *(_Last - 1) onto heap at [_First, _Last - 1)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    auto _ULast        = _STD _Get_unwrapped(_Last);\r\n    using _Diff        = _Iter_diff_t<_RanIt>;\r\n    _Diff _Count       = _ULast - _UFirst;\r\n    if (2 <= _Count) {\r\n        _Iter_value_t<_RanIt> _Val(_STD move(*--_ULast));\r\n        _STD _Push_heap_by_index(_UFirst, --_Count, _Diff(0), _STD move(_Val), _STD _Pass_fn(_Pred));\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt>\r\n_CONSTEXPR20 void push_heap(_RanIt _First, _RanIt _Last) {\r\n    // push *(_Last - 1) onto heap at [_First, _Last - 1)\r\n    _STD push_heap(_First, _Last, less<>{});\r\n}\r\n\r\ntemplate <class _RanIt, class _Ty, class _Pr>\r\n_CONSTEXPR20 void _Pop_heap_hole_by_index(\r\n    _RanIt _First, _Iter_diff_t<_RanIt> _Hole, _Iter_diff_t<_RanIt> _Bottom, _Ty&& _Val, _Pr _Pred) {\r\n    // percolate _Hole to _Bottom, then push _Val\r\n    _STL_INTERNAL_CHECK(_Bottom > 0);\r\n\r\n    using _Diff      = _Iter_diff_t<_RanIt>;\r\n    const _Diff _Top = _Hole;\r\n    _Diff _Idx       = _Hole;\r\n\r\n    // Check whether _Idx can have a child before calculating that child's index, since\r\n    // calculating the child's index can trigger integer overflows\r\n    const _Diff _Max_sequence_non_leaf = (_Bottom - 1) >> 1; // shift for codegen\r\n    while (_Idx < _Max_sequence_non_leaf) { // move _Hole down to larger child\r\n        _Idx = 2 * _Idx + 2;\r\n        if (_DEBUG_LT_PRED(_Pred, *(_First + _Idx), *(_First + (_Idx - 1)))) {\r\n            --_Idx;\r\n        }\r\n        *(_First + _Hole) = _STD move(*(_First + _Idx));\r\n        _Hole             = _Idx;\r\n    }\r\n\r\n    if (_Idx == _Max_sequence_non_leaf && _Bottom % 2 == 0) { // only child at bottom, move _Hole down to it\r\n        *(_First + _Hole) = _STD move(*(_First + (_Bottom - 1)));\r\n        _Hole             = _Bottom - 1;\r\n    }\r\n\r\n    _STD _Push_heap_by_index(_First, _Hole, _Top, _STD forward<_Ty>(_Val), _Pred);\r\n}\r\n\r\ntemplate <class _RanIt, class _Ty, class _Pr>\r\n_CONSTEXPR20 void _Pop_heap_hole_unchecked(_RanIt _First, _RanIt _Last, _RanIt _Dest, _Ty&& _Val, _Pr _Pred) {\r\n    // pop *_First to *_Dest and reheap\r\n    // precondition: _First != _Last\r\n    // precondition: _First != _Dest\r\n    *_Dest      = _STD move(*_First);\r\n    using _Diff = _Iter_diff_t<_RanIt>;\r\n    _STD _Pop_heap_hole_by_index(\r\n        _First, static_cast<_Diff>(0), static_cast<_Diff>(_Last - _First), _STD forward<_Ty>(_Val), _Pred);\r\n}\r\n\r\ntemplate <class _RanIt, class _Pr>\r\n_CONSTEXPR20 void _Pop_heap_unchecked(_RanIt _First, _RanIt _Last, _Pr _Pred) {\r\n    // pop *_First to *(_Last - 1) and reheap\r\n    if (2 <= _Last - _First) {\r\n        --_Last;\r\n        _Iter_value_t<_RanIt> _Val(_STD move(*_Last));\r\n        _STD _Pop_heap_hole_unchecked(_First, _Last, _Last, _STD move(_Val), _Pred);\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt, class _Pr>\r\n_CONSTEXPR20 void pop_heap(_RanIt _First, _RanIt _Last, _Pr _Pred) {\r\n    // pop *_First to *(_Last - 1) and reheap\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    _STD _Pop_heap_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last), _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt>\r\n_CONSTEXPR20 void pop_heap(_RanIt _First, _RanIt _Last) {\r\n    // pop *_First to *(_Last - 1) and reheap\r\n    _STD pop_heap(_First, _Last, less<>{});\r\n}\r\n\r\ntemplate <class _RanIt, class _Pr>\r\n_CONSTEXPR20 void _Make_heap_unchecked(_RanIt _First, _RanIt _Last, _Pr _Pred) {\r\n    // make [_First, _Last) into a heap\r\n    using _Diff   = _Iter_diff_t<_RanIt>;\r\n    _Diff _Bottom = _Last - _First;\r\n    for (_Diff _Hole = _Bottom >> 1; _Hole > 0;) { // shift for codegen\r\n        // reheap top half, bottom to top\r\n        --_Hole;\r\n        _Iter_value_t<_RanIt> _Val(_STD move(*(_First + _Hole)));\r\n        _STD _Pop_heap_hole_by_index(_First, _Hole, _Bottom, _STD move(_Val), _Pred);\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt, class _Pr>\r\n_CONSTEXPR20 void make_heap(_RanIt _First, _RanIt _Last, _Pr _Pred) { // make [_First, _Last) into a heap\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    _STD _Make_heap_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last), _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt>\r\n_CONSTEXPR20 void make_heap(_RanIt _First, _RanIt _Last) { // make [_First, _Last) into a heap\r\n    _STD make_heap(_First, _Last, less<>{});\r\n}\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_HEAP_ALGORITHMS_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_int128.hpp",
    "content": "// __msvc_int128.hpp internal header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef __MSVC_INT128_HPP\r\n#define __MSVC_INT128_HPP\r\n\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <__msvc_bit_utils.hpp>\r\n#include <cstdint>\r\n#include <limits>\r\n#include <type_traits>\r\n\r\n#include _STL_INTRIN_HEADER\r\n\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#include <concepts>\r\n#define _TEMPLATE_CLASS_INTEGRAL(type) template <integral type>\r\n#define _ZERO_OR_NO_INIT\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n#define _TEMPLATE_CLASS_INTEGRAL(type) template <class type, enable_if_t<is_integral_v<type>, int> = 0>\r\n#define _ZERO_OR_NO_INIT \\\r\n    {                    \\\r\n    } // Trivial default initialization is not allowed in constexpr functions before C++20.\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\n#if defined(_M_X64) && !defined(_M_ARM64EC) && !defined(_M_CEE_PURE)\r\n#define _STL_128_INTRINSICS 1\r\n#ifdef __clang__ // clang doesn't have _udiv128 / _div128\r\n#define _STL_128_DIV_INTRINSICS 0\r\n#else // ^^^ Clang / other vvv\r\n#define _STL_128_DIV_INTRINSICS 1\r\n#endif // ^^^ detect _udiv128 / _div128 ^^^\r\n#else // ^^^ intrinsics available / intrinsics unavailable vvv\r\n#define _STL_128_INTRINSICS     0\r\n#define _STL_128_DIV_INTRINSICS 0\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n\r\nstruct alignas(16) _Base128 {\r\n    uint64_t _Word[2];\r\n\r\n    constexpr void _Left_shift(const unsigned char _Count) noexcept {\r\n        // _STL_INTERNAL_CHECK(_Count < 128);\r\n        if (_Count == 0) {\r\n            return;\r\n        }\r\n\r\n        if (_Count >= 64) {\r\n            _Word[1] = _Word[0] << (_Count % 64);\r\n            _Word[0] = 0;\r\n            return;\r\n        }\r\n\r\n#if _STL_128_INTRINSICS\r\n        if (!_Is_constant_evaluated()) {\r\n            _Word[1] = __shiftleft128(_Word[0], _Word[1], _Count);\r\n        } else\r\n#endif // _STL_128_INTRINSICS\r\n        {\r\n            _Word[1] = (_Word[1] << _Count) | (_Word[0] >> (64 - _Count));\r\n        }\r\n\r\n        _Word[0] <<= _Count;\r\n    }\r\n\r\n    constexpr void _Unsigned_right_shift(const unsigned char _Count) noexcept {\r\n        // _STL_INTERNAL_CHECK(_Count < 128);\r\n        if (_Count == 0) {\r\n            return;\r\n        }\r\n\r\n        if (_Count >= 64) {\r\n            _Word[0] = _Word[1] >> (_Count % 64);\r\n            _Word[1] = 0;\r\n            return;\r\n        }\r\n\r\n#if _STL_128_INTRINSICS\r\n        if (!_Is_constant_evaluated()) {\r\n            _Word[0] = __shiftright128(_Word[0], _Word[1], _Count);\r\n        } else\r\n#endif // _STL_128_INTRINSICS\r\n        {\r\n            _Word[0] = (_Word[0] >> _Count) | (_Word[1] << (64 - _Count));\r\n        }\r\n\r\n        _Word[1] >>= _Count;\r\n    }\r\n\r\n    static constexpr unsigned char _AddCarry64(\r\n        unsigned char _Carry, uint64_t _Left, uint64_t _Right, uint64_t& _Result) noexcept {\r\n        // _STL_INTERNAL_CHECK(_Carry < 2);\r\n#if _STL_128_INTRINSICS\r\n        if (!_Is_constant_evaluated()) {\r\n            return _addcarry_u64(_Carry, _Left, _Right, &_Result);\r\n        }\r\n#endif // _STL_128_INTRINSICS\r\n\r\n        const uint64_t _Sum = _Left + _Right + _Carry;\r\n        _Result             = _Sum;\r\n        return _Carry ? _Sum <= _Left : _Sum < _Left;\r\n    }\r\n\r\n    static constexpr unsigned char _SubBorrow64(\r\n        unsigned char _Carry, uint64_t _Left, uint64_t _Right, uint64_t& _Result) noexcept {\r\n        // _STL_INTERNAL_CHECK(_Carry < 2);\r\n#if _STL_128_INTRINSICS\r\n        if (!_Is_constant_evaluated()) {\r\n            return _subborrow_u64(_Carry, _Left, _Right, &_Result);\r\n        }\r\n#endif // _STL_128_INTRINSICS\r\n\r\n        const auto _Difference = _Left - _Right - _Carry;\r\n        _Result                = _Difference;\r\n        return _Carry ? _Difference >= _Left : _Difference > _Left;\r\n    }\r\n\r\n    template <size_t __m, size_t __n>\r\n    static constexpr void _Knuth_4_3_1_M(\r\n        const uint32_t (&__u)[__m], const uint32_t (&__v)[__n], uint32_t (&__w)[__n + __m]) noexcept {\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n        constexpr auto _Int_max = static_cast<size_t>(INT_MAX);\r\n        _STL_INTERNAL_STATIC_ASSERT(__m <= _Int_max);\r\n        _STL_INTERNAL_STATIC_ASSERT(__n <= _Int_max);\r\n#endif // defined(_ENABLE_STL_INTERNAL_CHECK)\r\n\r\n        for (auto& _Elem : __w) {\r\n            _Elem = 0;\r\n        }\r\n\r\n        for (int __j = 0; __j < static_cast<int>(__n); ++__j) {\r\n            // stash Knuth's `k` in the lower 32 bits of __t\r\n            uint64_t __t = 0;\r\n            for (int __i = 0; __i < static_cast<int>(__m); ++__i) {\r\n                __t += static_cast<uint64_t>(__u[__i]) * __v[__j] + __w[__i + __j];\r\n                __w[__i + __j] = static_cast<uint32_t>(__t);\r\n                __t >>= 32;\r\n            }\r\n            __w[__j + __m] = static_cast<uint32_t>(__t);\r\n        }\r\n    }\r\n\r\n    _NODISCARD static constexpr uint64_t _UMul128(\r\n        const uint64_t _Left, const uint64_t _Right, uint64_t& _High_result) noexcept {\r\n#if _STL_128_INTRINSICS\r\n        if (!_Is_constant_evaluated()) {\r\n            return _umul128(_Left, _Right, &_High_result);\r\n        }\r\n#endif // _STL_128_INTRINSICS\r\n\r\n        const uint32_t __u[2] = {\r\n            static_cast<uint32_t>(_Left),\r\n            static_cast<uint32_t>(_Left >> 32),\r\n        };\r\n        const uint32_t __v[2] = {\r\n            static_cast<uint32_t>(_Right),\r\n            static_cast<uint32_t>(_Right >> 32),\r\n        };\r\n        uint32_t __w[4] _ZERO_OR_NO_INIT;\r\n\r\n        // multiply 2-digit numbers with 4-digit result in base 2^32\r\n        _Knuth_4_3_1_M(__u, __v, __w);\r\n\r\n        _High_result = (static_cast<uint64_t>(__w[3]) << 32) | __w[2];\r\n        return (static_cast<uint64_t>(__w[1]) << 32) | __w[0];\r\n    }\r\n\r\n    static constexpr void _Knuth_4_3_1_D(uint32_t* const __u, const size_t __u_size, const uint32_t* const __v,\r\n        const size_t __v_size, uint32_t* const __q) noexcept {\r\n        // Pre: __u + [0, __u_size), __v + [0, __v_size), and __q + [0, __u_size - __v_size) are all valid ranges\r\n        // constexpr auto _Int_max = static_cast<size_t>(INT_MAX);\r\n        // _STL_INTERNAL_CHECK(__v_size <= _Int_max);\r\n        const int __n = static_cast<int>(__v_size);\r\n        // _STL_INTERNAL_CHECK(__u_size > __v_size);\r\n        // _STL_INTERNAL_CHECK(__u_size <= _Int_max);\r\n        const int __m = static_cast<int>(__u_size - __v_size - 1);\r\n        // _STL_INTERNAL_CHECK(__v[__n - 1] >> 31 != 0); // Arguments are already normalized\r\n\r\n        for (int __j = __m; __j >= 0; --__j) {\r\n            const auto _Two_digits = (static_cast<uint64_t>(__u[__j + __n]) << 32) | __u[__j + __n - 1];\r\n            auto __qhat            = _Two_digits / __v[__n - 1];\r\n            auto __rhat            = _Two_digits % __v[__n - 1];\r\n\r\n            while ((__qhat >> 32) != 0\r\n                   || static_cast<uint32_t>(__qhat) * static_cast<uint64_t>(__v[__n - 2])\r\n                          > ((__rhat << 32) | __u[__j + __n - 2])) {\r\n                --__qhat;\r\n                __rhat += __v[__n - 1];\r\n                if ((__rhat >> 32) != 0) {\r\n                    break;\r\n                }\r\n            }\r\n\r\n            int64_t __k = 0;\r\n            int64_t __t _ZERO_OR_NO_INIT;\r\n            for (int __i = 0; __i < __n; ++__i) {\r\n                const auto _Prod = static_cast<uint32_t>(__qhat) * static_cast<uint64_t>(__v[__i]);\r\n                __t              = __u[__i + __j] - __k - static_cast<uint32_t>(_Prod);\r\n                __u[__i + __j]   = static_cast<uint32_t>(__t);\r\n                __k              = static_cast<int64_t>(_Prod >> 32) - (__t >> 32);\r\n            }\r\n            __t            = __u[__j + __n] - __k;\r\n            __u[__j + __n] = static_cast<uint32_t>(__t);\r\n\r\n            __q[__j] = static_cast<uint32_t>(__qhat);\r\n            if (__t < 0) {\r\n                --__q[__j];\r\n                __k = 0;\r\n                for (int __i = 0; __i < __n; ++__i) {\r\n                    __t            = __u[__i + __j] + __k + __v[__i];\r\n                    __u[__i + __j] = static_cast<uint32_t>(__t);\r\n                    __k            = __t >> 32;\r\n                }\r\n                __u[__j + __n] += static_cast<int32_t>(__k);\r\n            }\r\n        }\r\n\r\n        // quotient is in __q, normalized remainder is in __u\r\n    }\r\n\r\n    _NODISCARD static constexpr uint64_t _UDiv128(\r\n        uint64_t _High, uint64_t _Low, uint64_t _Div, uint64_t& _Remainder) noexcept {\r\n        // _STL_INTERNAL_CHECK(_High < _Div);\r\n\r\n#if _STL_128_DIV_INTRINSICS\r\n        if (!_Is_constant_evaluated()) {\r\n            return _udiv128(_High, _Low, _Div, &_Remainder);\r\n        }\r\n#endif // _STL_128_DIV_INTRINSICS\r\n\r\n        const auto __d = _Countl_zero(static_cast<uint32_t>(_Div >> 32));\r\n        if (__d >= 32) { // _Div < 2^32\r\n            auto _Rem    = (_High << 32) | (_Low >> 32);\r\n            auto _Result = _Rem / static_cast<uint32_t>(_Div);\r\n            _Rem         = ((_Rem % static_cast<uint32_t>(_Div)) << 32) | static_cast<uint32_t>(_Low);\r\n            _Result      = (_Result << 32) | (_Rem / static_cast<uint32_t>(_Div));\r\n            _Remainder   = _Rem % static_cast<uint32_t>(_Div);\r\n            return _Result;\r\n        }\r\n\r\n        uint32_t __u[5] = {\r\n            static_cast<uint32_t>(_Low << __d),\r\n            static_cast<uint32_t>(_Low >> (32 - __d)),\r\n            static_cast<uint32_t>(_High << __d),\r\n            static_cast<uint32_t>(_High >> (32 - __d)),\r\n            0,\r\n        };\r\n        if (__d != 0) {\r\n            __u[2] |= static_cast<uint32_t>(_Low >> (64 - __d));\r\n            __u[4] |= static_cast<uint32_t>(_High >> (64 - __d));\r\n        }\r\n\r\n        uint32_t __v[2] = {\r\n            static_cast<uint32_t>(_Div << __d),\r\n            static_cast<uint32_t>(_Div >> (32 - __d)),\r\n        };\r\n        uint32_t __q[3] _ZERO_OR_NO_INIT;\r\n\r\n        _Knuth_4_3_1_D(__u, 5, __v, 2, __q);\r\n        // _STL_INTERNAL_CHECK(__u[4] == 0);\r\n        // _STL_INTERNAL_CHECK(__u[3] == 0);\r\n        // _STL_INTERNAL_CHECK(__u[2] == 0);\r\n        _Remainder = (static_cast<uint64_t>(__u[1]) << (32 - __d)) | (__u[0] >> __d);\r\n\r\n        // _STL_INTERNAL_CHECK(__q[2] == 0);\r\n        return (static_cast<uint64_t>(__q[1]) << 32) | __q[0];\r\n    }\r\n\r\n    constexpr _Base128() noexcept : _Word{} {}\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    constexpr _Base128(const _Ty _Val) noexcept : _Word{static_cast<uint64_t>(_Val)} {\r\n#if _HAS_CXX20\r\n        if constexpr (signed_integral<_Ty>)\r\n#else\r\n        if constexpr (is_signed_v<_Ty>)\r\n#endif\r\n        {\r\n            if (_Val < 0) {\r\n                _Word[1] = ~0ull;\r\n            }\r\n        }\r\n    }\r\n\r\n    constexpr explicit _Base128(const uint64_t _Low, const uint64_t _High) noexcept : _Word{_Low, _High} {}\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    _NODISCARD constexpr explicit operator _Ty() const noexcept {\r\n        return static_cast<_Ty>(_Word[0]);\r\n    }\r\n\r\n    _NODISCARD constexpr explicit operator bool() const noexcept {\r\n        return (_Word[0] | _Word[1]) != 0;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD friend constexpr bool operator==(const _Base128&, const _Base128&) noexcept = default;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD friend constexpr bool operator==(const _Base128& _Left, const _Base128& _Right) noexcept {\r\n        return _Left._Word[0] == _Right._Word[0] && _Left._Word[1] == _Right._Word[1];\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator!=(const _Base128& _Left, const _Base128& _Right) noexcept {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    _NODISCARD friend constexpr bool operator<(const _Base128& _Left, const _Base128& _Right) noexcept {\r\n        if (_Left._Word[1] < _Right._Word[1]) {\r\n            return true;\r\n        }\r\n\r\n        if (_Left._Word[1] > _Right._Word[1]) {\r\n            return false;\r\n        }\r\n        return _Left._Word[0] < _Right._Word[0];\r\n    }\r\n    _NODISCARD friend constexpr bool operator>(const _Base128& _Left, const _Base128& _Right) noexcept {\r\n        return _Right < _Left;\r\n    }\r\n    _NODISCARD friend constexpr bool operator<=(const _Base128& _Left, const _Base128& _Right) noexcept {\r\n        return !(_Right < _Left);\r\n    }\r\n    _NODISCARD friend constexpr bool operator>=(const _Base128& _Left, const _Base128& _Right) noexcept {\r\n        return !(_Left < _Right);\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    _NODISCARD friend constexpr _Ty operator<<(const _Ty _Left, const _Base128& _Right) noexcept {\r\n        return _Left << _Right._Word[0];\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    _NODISCARD friend constexpr _Ty operator>>(const _Ty _Left, const _Base128& _Right) noexcept {\r\n        return _Left >> _Right._Word[0];\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    constexpr _Base128& operator<<=(const _Ty _Count) noexcept {\r\n        _Left_shift(static_cast<unsigned char>(_Count));\r\n        return *this;\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    friend constexpr _Ty& operator<<=(_Ty& _Left, const _Base128& _Right) noexcept {\r\n        _Left <<= _Right._Word[0];\r\n        return _Left;\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    constexpr _Base128& operator>>=(const _Ty _Count) noexcept {\r\n        _Unsigned_right_shift(static_cast<unsigned char>(_Count));\r\n        return *this;\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    friend constexpr _Ty& operator>>=(_Ty& _Left, const _Base128& _Right) noexcept {\r\n        _Left >>= _Right._Word[0];\r\n        return _Left;\r\n    }\r\n\r\n    constexpr _Base128& operator++() noexcept {\r\n        if (++_Word[0] == 0) {\r\n            ++_Word[1];\r\n        }\r\n        return *this;\r\n    }\r\n    constexpr _Base128 operator++(int) noexcept {\r\n        auto _Tmp = *this;\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    constexpr _Base128& operator--() noexcept {\r\n        if (_Word[0]-- == 0) {\r\n            --_Word[1];\r\n        }\r\n        return *this;\r\n    }\r\n    constexpr _Base128 operator--(int) noexcept {\r\n        auto _Tmp = *this;\r\n        --*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Base128 _Multiply(const _Base128& _Left, const _Base128& _Right) noexcept {\r\n        _Base128 _Result;\r\n        _Result._Word[0] = _UMul128(_Left._Word[0], _Right._Word[0], _Result._Word[1]);\r\n        _Result._Word[1] += _Left._Word[0] * _Right._Word[1];\r\n        _Result._Word[1] += _Left._Word[1] * _Right._Word[0];\r\n        return _Result;\r\n    }\r\n\r\n#if !_STL_128_DIV_INTRINSICS\r\n    _NODISCARD static constexpr _Base128 _Divide(const _Base128& _Num, const uint32_t _Den) noexcept {\r\n        _Base128 _Result;\r\n        _Result._Word[1] = _Num._Word[1] / _Den;\r\n        uint64_t _Rem    = ((_Num._Word[1] % _Den) << 32) | (_Num._Word[0] >> 32);\r\n        _Result._Word[0] = (_Rem / _Den) << 32;\r\n        _Rem             = ((_Rem % _Den) << 32) | static_cast<uint32_t>(_Num._Word[0]);\r\n        _Result._Word[0] |= static_cast<uint32_t>(_Rem / _Den);\r\n        return _Result;\r\n    }\r\n#endif // !_STL_128_DIV_INTRINSICS\r\n    _NODISCARD static constexpr _Base128 _Divide(const _Base128& _Num, const uint64_t _Den) noexcept {\r\n        _Base128 _Result;\r\n        _Result._Word[1] = _Num._Word[1] / _Den;\r\n        uint64_t _Rem _ZERO_OR_NO_INIT;\r\n        _Result._Word[0] = _UDiv128(_Num._Word[1] % _Den, _Num._Word[0], _Den, _Rem);\r\n        return _Result;\r\n    }\r\n    _NODISCARD static constexpr _Base128 _Divide(_Base128 _Num, _Base128 _Den) noexcept {\r\n        // establish _Den < _Num and _Num._Word[1] > 0\r\n        if (_Den._Word[1] >= _Num._Word[1]) {\r\n            if (_Den._Word[1] > _Num._Word[1]) {\r\n                return 0;\r\n            }\r\n\r\n            return _Num._Word[1] == 0 ? _Num._Word[0] / _Den._Word[0] : _Num._Word[0] >= _Den._Word[0];\r\n        }\r\n\r\n        // establish _Den has more than 1 non-zero \"digit\"\r\n        if (_Den._Word[1] == 0) {\r\n#if !_STL_128_DIV_INTRINSICS\r\n            if (_Den._Word[0] < (1ull << 32)) {\r\n                return _Divide(_Num, static_cast<uint32_t>(_Den._Word[0]));\r\n            } else\r\n#endif // !_STL_128_DIV_INTRINSICS\r\n            {\r\n                return _Divide(_Num, _Den._Word[0]);\r\n            }\r\n        }\r\n\r\n#if _STL_128_INTRINSICS\r\n        // Knuth 4.3.1D, 2-digit by 2-digit divide in base 2^64\r\n        // _STL_INTERNAL_CHECK(_Den._Word[1] != 0);\r\n        // _STL_INTERNAL_CHECK(_Num._Word[1] > _Den._Word[1]);\r\n        // Normalize by shifting both left until _Den's high bit is set (So _Den's high digit is >= b / 2)\r\n        const auto __d = _Countl_zero(_Den._Word[1]);\r\n        _Den <<= __d;\r\n        auto _High_digit = __d == 0 ? 0 : _Num._Word[1] >> (64 - __d); // This creates a third digit for _Num\r\n        _Num <<= __d;\r\n\r\n        _Base128 __qhat;\r\n        __qhat._Word[1] = _High_digit >= _Den._Word[1];\r\n        uint64_t __rhat _ZERO_OR_NO_INIT;\r\n        __qhat._Word[0] = _UDiv128(_High_digit >= _Den._Word[1] ? _High_digit - _Den._Word[1] : _High_digit,\r\n            _Num._Word[1], _Den._Word[1], __rhat);\r\n\r\n        for (;;) {\r\n            if (__qhat._Word[1] > 0) {\r\n                --__qhat;\r\n            } else {\r\n                _Base128 _Prod;\r\n                _Prod._Word[0] = _UMul128(__qhat._Word[0], _Den._Word[0], _Prod._Word[1]);\r\n                if (_Prod <= _Base128{_Num._Word[0], __rhat}) {\r\n                    break;\r\n                }\r\n                --__qhat._Word[0];\r\n            }\r\n\r\n            const auto _Sum = __rhat + _Den._Word[1];\r\n            if (__rhat > _Sum) {\r\n                break;\r\n            }\r\n            __rhat = _Sum;\r\n        }\r\n        // _STL_INTERNAL_CHECK(__qhat._Word[1] == 0);\r\n\r\n        // [_High_digit | _Num] -= __qhat * _Den [Since __qhat < b, this is 3-digit - 1-digit * 2-digit]\r\n        uint64_t _Prod0_hi _ZERO_OR_NO_INIT;\r\n        uint64_t _Prod_lo = _UMul128(__qhat._Word[0], _Den._Word[0], _Prod0_hi);\r\n        auto _Borrow      = _SubBorrow64(0, _Num._Word[0], _Prod_lo, _Num._Word[0]);\r\n        uint64_t _Prod1_hi _ZERO_OR_NO_INIT;\r\n        _Prod_lo = _UMul128(__qhat._Word[0], _Den._Word[1], _Prod1_hi);\r\n        _Prod1_hi += _AddCarry64(0, _Prod_lo, _Prod0_hi, _Prod_lo);\r\n        _Borrow = _SubBorrow64(_Borrow, _Num._Word[1], _Prod_lo, _Num._Word[1]);\r\n        _Borrow = _SubBorrow64(_Borrow, _High_digit, _Prod1_hi, _High_digit);\r\n        if (_Borrow) {\r\n            --__qhat._Word[0];\r\n        }\r\n        return __qhat;\r\n#else // ^^^ 128-bit intrinsics / no such intrinsics vvv\r\n        auto __d                   = _Countl_zero(_Den._Word[1]);\r\n        const bool _Three_word_den = __d >= 32;\r\n        __d &= 31;\r\n        uint32_t __u[5]{\r\n            static_cast<uint32_t>(_Num._Word[0] << __d),\r\n            static_cast<uint32_t>(_Num._Word[0] >> (32 - __d)),\r\n            static_cast<uint32_t>(_Num._Word[1] << __d),\r\n            static_cast<uint32_t>(_Num._Word[1] >> (32 - __d)),\r\n            0,\r\n        };\r\n        uint32_t __v[4] = {\r\n            static_cast<uint32_t>(_Den._Word[0] << __d),\r\n            static_cast<uint32_t>(_Den._Word[0] >> (32 - __d)),\r\n            static_cast<uint32_t>(_Den._Word[1] << __d),\r\n            static_cast<uint32_t>(_Den._Word[1] >> (32 - __d)),\r\n        };\r\n        if (__d != 0) {\r\n            __u[2] |= _Num._Word[0] >> (64 - __d);\r\n            __u[4] |= _Num._Word[1] >> (64 - __d);\r\n            __v[2] |= _Den._Word[0] >> (64 - __d);\r\n        }\r\n\r\n        uint32_t __q[2] _ZERO_OR_NO_INIT;\r\n        if (_Three_word_den) {\r\n            // 4-digit by 3-digit base 2^32 division\r\n            _Knuth_4_3_1_D(__u, 5, __v, 3, __q);\r\n        } else {\r\n            // 4-digit by 4-digit base 2^32 division\r\n            _Knuth_4_3_1_D(__u, 5, __v, 4, __q);\r\n            __q[1] = 0;\r\n        }\r\n\r\n        return (static_cast<uint64_t>(__q[1]) << 32) | __q[0];\r\n#endif // _STL_128_INTRINSICS\r\n    }\r\n\r\n#if !_STL_128_DIV_INTRINSICS\r\n    _NODISCARD static constexpr _Base128 _Modulo(const _Base128& _Num, const uint32_t _Den) noexcept {\r\n        uint64_t _Rem = _Num._Word[1];\r\n        _Rem          = ((_Rem % _Den) << 32) | (_Num._Word[0] >> 32);\r\n        _Rem          = ((_Rem % _Den) << 32) | static_cast<uint32_t>(_Num._Word[0]);\r\n        return _Rem % _Den;\r\n    }\r\n#endif // !_STL_128_DIV_INTRINSICS\r\n    _NODISCARD static constexpr _Base128 _Modulo(const _Base128& _Num, const uint64_t _Den) noexcept {\r\n        uint64_t _Rem _ZERO_OR_NO_INIT;\r\n        (void) _UDiv128(_Num._Word[1] % _Den, _Num._Word[0], _Den, _Rem);\r\n        return _Rem;\r\n    }\r\n    _NODISCARD static constexpr _Base128 _Modulo(_Base128 _Num, _Base128 _Den) noexcept {\r\n        // establish _Den < _Num and _Num._Word[1] > 0\r\n        if (_Den._Word[1] >= _Num._Word[1]) {\r\n            if (_Den._Word[1] > _Num._Word[1]) {\r\n                return _Num;\r\n            }\r\n\r\n            if (_Den._Word[0] <= _Num._Word[0]) {\r\n                return _Num._Word[1] == 0 ? _Num._Word[0] % _Den._Word[0] : _Num._Word[0] - _Den._Word[0];\r\n            }\r\n\r\n            return _Num;\r\n        }\r\n\r\n        // establish _Den has more than 1 non-zero \"digit\"\r\n        if (_Den._Word[1] == 0) {\r\n#if !_STL_128_DIV_INTRINSICS\r\n            if (_Den._Word[0] < (1ull << 32)) {\r\n                return _Modulo(_Num, static_cast<uint32_t>(_Den._Word[0]));\r\n            } else\r\n#endif // !_STL_128_DIV_INTRINSICS\r\n            {\r\n                return _Modulo(_Num, _Den._Word[0]);\r\n            }\r\n        }\r\n\r\n#if _STL_128_INTRINSICS\r\n        // Knuth 4.3.1D, 2-digit by 2-digit divide in base 2^64\r\n        // _STL_INTERNAL_CHECK(_Den._Word[1] != 0);\r\n        // _STL_INTERNAL_CHECK(_Num._Word[1] > _Den._Word[1]);\r\n        // Normalize by shifting both left until _Den's high bit is set (So _Den's high digit is >= b / 2)\r\n        const auto __d = _Countl_zero(_Den._Word[1]);\r\n        _Den <<= __d;\r\n        auto _High_digit = __d == 0 ? 0 : _Num._Word[1] >> (64 - __d); // This creates a third digit for _Num\r\n        _Num <<= __d;\r\n\r\n        uint64_t __qhat_high = _High_digit >= _Den._Word[1];\r\n        uint64_t __rhat _ZERO_OR_NO_INIT;\r\n        uint64_t __qhat = _UDiv128(_High_digit >= _Den._Word[1] ? _High_digit - _Den._Word[1] : _High_digit,\r\n            _Num._Word[1], _Den._Word[1], __rhat);\r\n\r\n        for (;;) {\r\n            if (__qhat_high > 0) {\r\n                if (__qhat-- == 0) {\r\n                    --__qhat_high;\r\n                }\r\n            } else {\r\n                _Base128 _Prod;\r\n                _Prod._Word[0] = _UMul128(__qhat, _Den._Word[0], _Prod._Word[1]);\r\n                if (_Prod <= _Base128{_Num._Word[0], __rhat}) {\r\n                    break;\r\n                }\r\n                --__qhat;\r\n            }\r\n\r\n            const auto _Sum = __rhat + _Den._Word[1];\r\n            if (__rhat > _Sum) {\r\n                break;\r\n            }\r\n            __rhat = _Sum;\r\n            // The addition didn't overflow, so `__rhat < b` holds\r\n        }\r\n        // _STL_INTERNAL_CHECK(__qhat_high == 0);\r\n\r\n        // [_High_digit | _Num] -= __qhat * _Den [3-digit - 1-digit * 2-digit]\r\n        uint64_t _Prod0_hi _ZERO_OR_NO_INIT;\r\n        uint64_t _Prod_lo = _UMul128(__qhat, _Den._Word[0], _Prod0_hi);\r\n        auto _Borrow      = _SubBorrow64(0, _Num._Word[0], _Prod_lo, _Num._Word[0]);\r\n        uint64_t _Prod1_hi _ZERO_OR_NO_INIT;\r\n        _Prod_lo = _UMul128(__qhat, _Den._Word[1], _Prod1_hi);\r\n        _Prod1_hi += _AddCarry64(0, _Prod_lo, _Prod0_hi, _Prod_lo);\r\n        _Borrow = _SubBorrow64(_Borrow, _Num._Word[1], _Prod_lo, _Num._Word[1]);\r\n        _Borrow = _SubBorrow64(_Borrow, _High_digit, _Prod1_hi, _High_digit);\r\n        if (_Borrow) {\r\n            auto _Carry = _AddCarry64(0, _Num._Word[0], _Den._Word[0], _Num._Word[0]);\r\n            (void) _AddCarry64(_Carry, _Num._Word[1], _Den._Word[1], _Num._Word[1]);\r\n        }\r\n#else // ^^^ 128-bit intrinsics / no such intrinsics vvv\r\n        auto __d                   = _Countl_zero(_Den._Word[1]);\r\n        const bool _Three_word_den = __d >= 32;\r\n        __d &= 31;\r\n        uint32_t __u[5]{\r\n            static_cast<uint32_t>(_Num._Word[0] << __d),\r\n            static_cast<uint32_t>(_Num._Word[0] >> (32 - __d)),\r\n            static_cast<uint32_t>(_Num._Word[1] << __d),\r\n            static_cast<uint32_t>(_Num._Word[1] >> (32 - __d)),\r\n            0,\r\n        };\r\n        uint32_t __v[4] = {\r\n            static_cast<uint32_t>(_Den._Word[0] << __d),\r\n            static_cast<uint32_t>(_Den._Word[0] >> (32 - __d)),\r\n            static_cast<uint32_t>(_Den._Word[1] << __d),\r\n            static_cast<uint32_t>(_Den._Word[1] >> (32 - __d)),\r\n        };\r\n        if (__d != 0) {\r\n            __u[2] |= _Num._Word[0] >> (64 - __d);\r\n            __u[4] |= _Num._Word[1] >> (64 - __d);\r\n            __v[2] |= _Den._Word[0] >> (64 - __d);\r\n        }\r\n\r\n        uint32_t __q[2] _ZERO_OR_NO_INIT;\r\n        if (_Three_word_den) {\r\n            // 4-digit by 3-digit base 2^32 division\r\n            _Knuth_4_3_1_D(__u, 5, __v, 3, __q);\r\n            // _STL_INTERNAL_CHECK(__u[3] == 0);\r\n        } else {\r\n            // 4-digit by 4-digit base 2^32 division\r\n            _Knuth_4_3_1_D(__u, 5, __v, 4, __q);\r\n        }\r\n        // _STL_INTERNAL_CHECK(__u[4] == 0);\r\n\r\n        _Num._Word[0] = (static_cast<uint64_t>(__u[1]) << 32) | __u[0];\r\n        _Num._Word[1] = (static_cast<uint64_t>(__u[3]) << 32) | __u[2];\r\n#endif // _STL_128_INTRINSICS\r\n        _Num >>= __d;\r\n        return _Num;\r\n    }\r\n\r\n#if _HAS_CXX23\r\n#if !_STL_128_DIV_INTRINSICS\r\n    _NODISCARD static constexpr _Base128 _Div_ceil(const _Base128& _Num, const uint32_t _Den) noexcept {\r\n        _Base128 _Result;\r\n        _Result._Word[1] = _Num._Word[1] / _Den;\r\n        uint64_t _Rem    = ((_Num._Word[1] % _Den) << 32) | (_Num._Word[0] >> 32);\r\n        _Result._Word[0] = (_Rem / _Den) << 32;\r\n        _Rem             = ((_Rem % _Den) << 32) | static_cast<uint32_t>(_Num._Word[0]);\r\n        _Result._Word[0] |= static_cast<uint32_t>(_Rem / _Den);\r\n        if (_Rem % _Den != 0) {\r\n            ++_Result;\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n#endif // !_STL_128_DIV_INTRINSICS\r\n\r\n    _NODISCARD static constexpr _Base128 _Div_ceil(const _Base128& _Num, const uint64_t _Den) noexcept {\r\n        _Base128 _Result;\r\n        _Result._Word[1] = _Num._Word[1] / _Den;\r\n        uint64_t _Rem;\r\n        _Result._Word[0] = _UDiv128(_Num._Word[1] % _Den, _Num._Word[0], _Den, _Rem);\r\n        if (_Rem != 0) {\r\n            ++_Result;\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Base128 _Div_ceil(_Base128 _Num, _Base128 _Den) noexcept {\r\n        // establish _Den < _Num and _Num._Word[1] > 0\r\n        if (_Den._Word[1] >= _Num._Word[1]) {\r\n            if (_Den._Word[1] > _Num._Word[1]) {\r\n                return static_cast<_Base128>(_Num != 0);\r\n            }\r\n\r\n            if (_Num._Word[1] == 0) {\r\n                uint64_t _Result = _Num._Word[0] / _Den._Word[0]; // with 64-bit inputs, the ceiling is also 64-bit\r\n                if (_Num._Word[0] % _Den._Word[0] != 0) {\r\n                    ++_Result;\r\n                }\r\n\r\n                return _Result;\r\n            }\r\n\r\n            if (_Num._Word[0] > _Den._Word[0]) {\r\n                return 2u;\r\n            }\r\n\r\n            return 1u;\r\n        }\r\n\r\n        // establish _Den has more than 1 non-zero \"digit\"\r\n        if (_Den._Word[1] == 0) {\r\n#if !_STL_128_DIV_INTRINSICS\r\n            if (_Den._Word[0] < (1ull << 32)) {\r\n                return _Div_ceil(_Num, static_cast<uint32_t>(_Den._Word[0]));\r\n            } else\r\n#endif // !_STL_128_DIV_INTRINSICS\r\n            {\r\n                return _Div_ceil(_Num, _Den._Word[0]);\r\n            }\r\n        }\r\n\r\n        _Base128 _Result;\r\n#if _STL_128_INTRINSICS\r\n        // Knuth 4.3.1D, 2-digit by 2-digit divide in base 2^64\r\n        // _STL_INTERNAL_CHECK(_Den._Word[1] != 0);\r\n        // _STL_INTERNAL_CHECK(_Num._Word[1] > _Den._Word[1]);\r\n        // Normalize by shifting both left until _Den's high bit is set (So _Den's high digit is >= b / 2)\r\n        const auto __d = _STD _Countl_zero(_Den._Word[1]);\r\n        _Den <<= __d;\r\n        auto _High_digit = __d == 0 ? 0 : _Num._Word[1] >> (64 - __d); // This creates a third digit for _Num\r\n        _Num <<= __d;\r\n\r\n        _Base128 __qhat;\r\n        __qhat._Word[1] = _High_digit >= _Den._Word[1];\r\n        uint64_t __rhat;\r\n        __qhat._Word[0] = _UDiv128(_High_digit >= _Den._Word[1] ? _High_digit - _Den._Word[1] : _High_digit,\r\n            _Num._Word[1], _Den._Word[1], __rhat);\r\n\r\n        for (;;) {\r\n            if (__qhat._Word[1] > 0) {\r\n                --__qhat;\r\n            } else {\r\n                _Base128 _Prod;\r\n                _Prod._Word[0] = _UMul128(__qhat._Word[0], _Den._Word[0], _Prod._Word[1]);\r\n                if (_Prod <= _Base128{_Num._Word[0], __rhat}) {\r\n                    break;\r\n                }\r\n                --__qhat._Word[0];\r\n            }\r\n\r\n            const auto _Sum = __rhat + _Den._Word[1];\r\n            if (__rhat > _Sum) {\r\n                break;\r\n            }\r\n            __rhat = _Sum;\r\n        }\r\n        // _STL_INTERNAL_CHECK(__qhat._Word[1] == 0);\r\n\r\n        // [_High_digit | _Num] -= __qhat * _Den [Since __qhat < b, this is 3-digit - 1-digit * 2-digit]\r\n        uint64_t _Prod0_hi;\r\n        uint64_t _Prod_lo = _UMul128(__qhat._Word[0], _Den._Word[0], _Prod0_hi);\r\n        auto _Borrow      = _SubBorrow64(0, _Num._Word[0], _Prod_lo, _Num._Word[0]);\r\n        uint64_t _Prod1_hi;\r\n        _Prod_lo = _UMul128(__qhat._Word[0], _Den._Word[1], _Prod1_hi);\r\n        _Prod1_hi += _AddCarry64(0, _Prod_lo, _Prod0_hi, _Prod_lo);\r\n        _Borrow = _SubBorrow64(_Borrow, _Num._Word[1], _Prod_lo, _Num._Word[1]);\r\n        _Borrow = _SubBorrow64(_Borrow, _High_digit, _Prod1_hi, _High_digit);\r\n        if (_Borrow) {\r\n            --__qhat._Word[0];\r\n            auto _Carry = _AddCarry64(0, _Num._Word[0], _Den._Word[0], _Num._Word[0]);\r\n            (void) _AddCarry64(_Carry, _Num._Word[1], _Den._Word[1], _Num._Word[1]);\r\n        }\r\n        _Result = __qhat;\r\n#else // ^^^ 128-bit intrinsics / no such intrinsics vvv\r\n        auto __d                   = _Countl_zero(_Den._Word[1]);\r\n        const bool _Three_word_den = __d >= 32;\r\n        __d &= 31;\r\n        uint32_t __u[5]{\r\n            static_cast<uint32_t>(_Num._Word[0] << __d),\r\n            static_cast<uint32_t>(_Num._Word[0] >> (32 - __d)),\r\n            static_cast<uint32_t>(_Num._Word[1] << __d),\r\n            static_cast<uint32_t>(_Num._Word[1] >> (32 - __d)),\r\n            0,\r\n        };\r\n        uint32_t __v[4] = {\r\n            static_cast<uint32_t>(_Den._Word[0] << __d),\r\n            static_cast<uint32_t>(_Den._Word[0] >> (32 - __d)),\r\n            static_cast<uint32_t>(_Den._Word[1] << __d),\r\n            static_cast<uint32_t>(_Den._Word[1] >> (32 - __d)),\r\n        };\r\n        if (__d != 0) {\r\n            __u[2] |= _Num._Word[0] >> (64 - __d);\r\n            __u[4] |= _Num._Word[1] >> (64 - __d);\r\n            __v[2] |= _Den._Word[0] >> (64 - __d);\r\n        }\r\n\r\n        uint32_t __q[2] = {};\r\n        if (_Three_word_den) {\r\n            // 4-digit by 3-digit base 2^32 division\r\n            _Knuth_4_3_1_D(__u, 5, __v, 3, __q);\r\n            // _STL_INTERNAL_CHECK(__u[3] == 0);\r\n        } else {\r\n            // 4-digit by 4-digit base 2^32 division\r\n            _Knuth_4_3_1_D(__u, 5, __v, 4, __q);\r\n        }\r\n\r\n        _Result       = (static_cast<uint64_t>(__q[1]) << 32) | __q[0];\r\n        _Num._Word[0] = (static_cast<uint64_t>(__u[1]) << 32) | __u[0];\r\n        _Num._Word[1] = (static_cast<uint64_t>(__u[3]) << 32) | __u[2];\r\n#endif // _STL_128_INTRINSICS\r\n\r\n        if (_Num != 0) {\r\n            ++_Result;\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    friend constexpr _Ty& operator&=(_Ty& _Left, const _Base128& _Right) noexcept {\r\n        _Left &= _Right._Word[0];\r\n        return _Left;\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    friend constexpr _Ty& operator^=(_Ty& _Left, const _Base128& _Right) noexcept {\r\n        _Left ^= _Right._Word[0];\r\n        return _Left;\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    friend constexpr _Ty& operator|=(_Ty& _Left, const _Base128& _Right) noexcept {\r\n        _Left |= _Right._Word[0];\r\n        return _Left;\r\n    }\r\n};\r\n\r\nstruct _Signed128;\r\n\r\nstruct _Unsigned128 : _Base128 {\r\n    using _Signed_type   = _Signed128;\r\n    using _Unsigned_type = _Unsigned128;\r\n\r\n#if !_HAS_CXX17 || (_HAS_CXX20 && !defined(__clang__) && !defined(__EDG__)) // TRANSITION, DevCom-10729775\r\n    constexpr _Unsigned128() noexcept : _Base128{} {}\r\n#endif // ^^^ workaround for C++20 MSVC modules and header units; should be guarded for !_HAS_CXX17 only ^^^\r\n\r\n    using _Base128::_Base128;\r\n    constexpr explicit _Unsigned128(const _Base128& _That) noexcept : _Base128{_That} {}\r\n\r\n    constexpr _Unsigned128& operator=(const _Base128& _That) noexcept {\r\n        _Base128::operator=(_That);\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD friend constexpr strong_ordering operator<=>(\r\n        const _Unsigned128& _Left, const _Unsigned128& _Right) noexcept {\r\n        strong_ordering _Ord = _Left._Word[1] <=> _Right._Word[1];\r\n        if (_Ord == strong_ordering::equal) {\r\n            _Ord = _Left._Word[0] <=> _Right._Word[0];\r\n        }\r\n        return _Ord;\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD friend constexpr bool operator<(const _Unsigned128& _Left, const _Unsigned128& _Right) noexcept {\r\n        if (_Left._Word[1] < _Right._Word[1]) {\r\n            return true;\r\n        }\r\n\r\n        if (_Right._Word[1] < _Left._Word[1]) {\r\n            return false;\r\n        }\r\n\r\n        return _Left._Word[0] < _Right._Word[0];\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator>(const _Unsigned128& _Left, const _Unsigned128& _Right) noexcept {\r\n        return _Right < _Left;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator<=(const _Unsigned128& _Left, const _Unsigned128& _Right) noexcept {\r\n        return !(_Right < _Left);\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator>=(const _Unsigned128& _Left, const _Unsigned128& _Right) noexcept {\r\n        return !(_Left < _Right);\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    _NODISCARD friend constexpr _Unsigned128 operator<<(const _Unsigned128& _Left, const _Base128& _Right) noexcept {\r\n        auto _Tmp{_Left};\r\n        _Tmp._Left_shift(static_cast<unsigned char>(_Right._Word[0]));\r\n        return _Tmp;\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    constexpr _Unsigned128& operator<<=(const _Ty _Count) noexcept {\r\n        _Left_shift(static_cast<unsigned char>(_Count));\r\n        return *this;\r\n    }\r\n    constexpr _Unsigned128& operator<<=(const _Base128& _Count) noexcept {\r\n        _Left_shift(static_cast<unsigned char>(_Count._Word[0]));\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD friend constexpr _Unsigned128 operator>>(const _Unsigned128& _Left, const _Base128& _Right) noexcept {\r\n        auto _Tmp{_Left};\r\n        _Tmp._Unsigned_right_shift(static_cast<unsigned char>(_Right._Word[0]));\r\n        return _Tmp;\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    constexpr _Unsigned128& operator>>=(const _Ty _Count) noexcept {\r\n        _Unsigned_right_shift(static_cast<unsigned char>(_Count));\r\n        return *this;\r\n    }\r\n    constexpr _Unsigned128& operator>>=(const _Base128& _Count) noexcept {\r\n        _Unsigned_right_shift(static_cast<unsigned char>(_Count._Word[0]));\r\n        return *this;\r\n    }\r\n\r\n    constexpr _Unsigned128& operator++() noexcept {\r\n        if (++_Word[0] == 0) {\r\n            ++_Word[1];\r\n        }\r\n        return *this;\r\n    }\r\n    constexpr _Unsigned128 operator++(int) noexcept {\r\n        auto _Tmp = *this;\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    constexpr _Unsigned128& operator--() noexcept {\r\n        if (_Word[0]-- == 0) {\r\n            --_Word[1];\r\n        }\r\n        return *this;\r\n    }\r\n    constexpr _Unsigned128 operator--(int) noexcept {\r\n        auto _Tmp = *this;\r\n        --*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD constexpr _Unsigned128 operator+() const noexcept {\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD constexpr _Unsigned128 operator-() const noexcept {\r\n        return _Unsigned128{} - *this;\r\n    }\r\n\r\n    _NODISCARD constexpr _Unsigned128 operator~() const noexcept {\r\n        return _Unsigned128{~_Word[0], ~_Word[1]};\r\n    }\r\n\r\n    _NODISCARD friend constexpr _Unsigned128 operator+(const _Base128& _Left, const _Base128& _Right) noexcept {\r\n        _Unsigned128 _Result;\r\n        const auto _Carry = _AddCarry64(0, _Left._Word[0], _Right._Word[0], _Result._Word[0]);\r\n        _AddCarry64(_Carry, _Left._Word[1], _Right._Word[1], _Result._Word[1]);\r\n        return _Result;\r\n    }\r\n\r\n    constexpr _Unsigned128& operator+=(const _Base128& _That) noexcept {\r\n        const auto _Carry = _AddCarry64(0, _Word[0], _That._Word[0], _Word[0]);\r\n        _AddCarry64(_Carry, _Word[1], _That._Word[1], _Word[1]);\r\n        return *this;\r\n    }\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    friend constexpr _Ty& operator+=(_Ty& _Left, const _Unsigned128& _Right) noexcept {\r\n        _Left += _Right._Word[0];\r\n        return _Left;\r\n    }\r\n\r\n    _NODISCARD friend constexpr _Unsigned128 operator-(const _Base128& _Left, const _Base128& _Right) noexcept {\r\n        _Unsigned128 _Result;\r\n        const auto _Borrow = _SubBorrow64(0, _Left._Word[0], _Right._Word[0], _Result._Word[0]);\r\n        _SubBorrow64(_Borrow, _Left._Word[1], _Right._Word[1], _Result._Word[1]);\r\n        return _Result;\r\n    }\r\n\r\n    constexpr _Unsigned128& operator-=(const _Base128& _That) noexcept {\r\n        const auto _Borrow = _SubBorrow64(0, _Word[0], _That._Word[0], _Word[0]);\r\n        _SubBorrow64(_Borrow, _Word[1], _That._Word[1], _Word[1]);\r\n        return *this;\r\n    }\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    friend constexpr _Ty& operator-=(_Ty& _Left, const _Unsigned128& _Right) noexcept {\r\n        _Left -= _Right._Word[0];\r\n        return _Left;\r\n    }\r\n\r\n    _NODISCARD friend constexpr _Unsigned128 operator*(const _Base128& _Left, const _Base128& _Right) noexcept {\r\n        return _Unsigned128{_Base128::_Multiply(_Left, _Right)};\r\n    }\r\n\r\n    constexpr _Unsigned128& operator*=(const _Base128& _That) noexcept {\r\n        *this = *this * _That;\r\n        return *this;\r\n    }\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    friend constexpr _Ty& operator*=(_Ty& _Left, const _Unsigned128& _Right) noexcept {\r\n        _Left *= _Right._Word[0];\r\n        return _Left;\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    _NODISCARD friend constexpr _Unsigned128 operator/(const _Unsigned128& _Num, const _Ty _Den) noexcept {\r\n#if !_STL_128_DIV_INTRINSICS\r\n        if constexpr (sizeof(_Ty) <= 4) {\r\n            return _Unsigned128{_Base128::_Divide(_Num, static_cast<uint32_t>(_Den))};\r\n        } else\r\n#endif // !_STL_128_DIV_INTRINSICS\r\n        {\r\n            return _Unsigned128{_Base128::_Divide(_Num, static_cast<uint64_t>(_Den))};\r\n        }\r\n    }\r\n    _NODISCARD friend constexpr _Unsigned128 operator/(const _Base128& _Num, const _Base128& _Den) noexcept {\r\n        return _Unsigned128{_Base128::_Divide(_Num, _Den)};\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    constexpr _Unsigned128& operator/=(const _Ty _That) noexcept {\r\n#if !_STL_128_DIV_INTRINSICS\r\n        if constexpr (sizeof(_Ty) <= 4) {\r\n            *this = _Unsigned128{_Base128::_Divide(*this, static_cast<uint32_t>(_That))};\r\n        } else\r\n#endif // !_STL_128_DIV_INTRINSICS\r\n        {\r\n            *this = _Unsigned128{_Base128::_Divide(*this, static_cast<uint64_t>(_That))};\r\n        }\r\n        return *this;\r\n    }\r\n    constexpr _Unsigned128& operator/=(const _Base128& _That) noexcept {\r\n        *this = _Unsigned128{_Base128::_Divide(*this, _That)};\r\n        return *this;\r\n    }\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    friend constexpr _Ty& operator/=(_Ty& _Left, const _Unsigned128& _Right) noexcept {\r\n        if (_Right._Word[1] != 0) {\r\n            _Left = 0;\r\n        } else {\r\n            _Left /= _Right._Word[0];\r\n        }\r\n        return _Left;\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    _NODISCARD friend constexpr _Unsigned128 operator%(const _Base128& _Num, const _Ty _Den) noexcept {\r\n#if !_STL_128_DIV_INTRINSICS\r\n        if constexpr (sizeof(_Ty) <= 4) {\r\n            return _Unsigned128{_Base128::_Modulo(_Num, static_cast<uint32_t>(_Den))};\r\n        } else\r\n#endif // !_STL_128_DIV_INTRINSICS\r\n        {\r\n            return _Unsigned128{_Base128::_Modulo(_Num, static_cast<uint64_t>(_Den))};\r\n        }\r\n    }\r\n    _NODISCARD friend constexpr _Unsigned128 operator%(const _Base128& _Num, const _Base128& _Den) noexcept {\r\n        return _Unsigned128{_Base128::_Modulo(_Num, _Den)};\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    constexpr _Unsigned128& operator%=(const _Ty _Den) noexcept {\r\n        *this = *this % _Den;\r\n        return *this;\r\n    }\r\n    constexpr _Unsigned128& operator%=(const _Base128& _Den) noexcept {\r\n        *this = *this % _Den;\r\n        return *this;\r\n    }\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    friend constexpr _Ty& operator%=(_Ty& _Left, const _Unsigned128& _Right) noexcept {\r\n        if (_Right._Word[1] == 0) {\r\n            _Left %= _Right._Word[0];\r\n        }\r\n        return _Left;\r\n    }\r\n\r\n    _NODISCARD friend constexpr _Unsigned128 operator&(const _Base128& _Left, const _Base128& _Right) noexcept {\r\n        return _Unsigned128{_Left._Word[0] & _Right._Word[0], _Left._Word[1] & _Right._Word[1]};\r\n    }\r\n\r\n    constexpr _Unsigned128& operator&=(const _Base128& _That) noexcept {\r\n        _Word[0] &= _That._Word[0];\r\n        _Word[1] &= _That._Word[1];\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD friend constexpr _Unsigned128 operator^(const _Base128& _Left, const _Base128& _Right) noexcept {\r\n        return _Unsigned128{_Left._Word[0] ^ _Right._Word[0], _Left._Word[1] ^ _Right._Word[1]};\r\n    }\r\n\r\n    constexpr _Unsigned128& operator^=(const _Base128& _That) noexcept {\r\n        _Word[0] ^= _That._Word[0];\r\n        _Word[1] ^= _That._Word[1];\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD friend constexpr _Unsigned128 operator|(const _Base128& _Left, const _Base128& _Right) noexcept {\r\n        return _Unsigned128{_Left._Word[0] | _Right._Word[0], _Left._Word[1] | _Right._Word[1]};\r\n    }\r\n\r\n    constexpr _Unsigned128& operator|=(const _Base128& _That) noexcept {\r\n        _Word[0] |= _That._Word[0];\r\n        _Word[1] |= _That._Word[1];\r\n        return *this;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<_Unsigned128> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr _Unsigned128(min)() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Unsigned128(max)() noexcept {\r\n        return _Unsigned128{~0ull, ~0ull};\r\n    }\r\n\r\n    _NODISCARD static constexpr _Unsigned128 lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr _Unsigned128 epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Unsigned128 round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Unsigned128 denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Unsigned128 infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Unsigned128 quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Unsigned128 signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr bool is_modulo = true;\r\n    static constexpr int digits     = 128;\r\n    static constexpr int digits10   = 38;\r\n};\r\n\r\nstruct _Signed128 : _Base128 {\r\n    using _Signed_type   = _Signed128;\r\n    using _Unsigned_type = _Unsigned128;\r\n\r\n#if !_HAS_CXX17 || (_HAS_CXX20 && !defined(__clang__) && !defined(__EDG__)) // TRANSITION, DevCom-10729775\r\n    constexpr _Signed128() noexcept : _Base128{} {}\r\n#endif // ^^^ workaround for C++20 MSVC modules and header units; should be guarded for !_HAS_CXX17 only ^^^\r\n\r\n    using _Base128::_Base128;\r\n    constexpr explicit _Signed128(const _Base128& _That) noexcept : _Base128{_That} {}\r\n\r\n    constexpr _Signed128& operator=(const _Base128& _That) noexcept {\r\n        _Base128::operator=(_That);\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD friend constexpr strong_ordering operator<=>(\r\n        const _Signed128& _Left, const _Signed128& _Right) noexcept {\r\n        strong_ordering _Ord = static_cast<int64_t>(_Left._Word[1]) <=> static_cast<int64_t>(_Right._Word[1]);\r\n        if (_Ord == strong_ordering::equal) {\r\n            _Ord = _Left._Word[0] <=> _Right._Word[0];\r\n        }\r\n        return _Ord;\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD friend constexpr bool operator<(const _Signed128& _Left, const _Signed128& _Right) noexcept {\r\n        if (static_cast<int64_t>(_Left._Word[1]) < static_cast<int64_t>(_Right._Word[1])) {\r\n            return true;\r\n        }\r\n\r\n        if (static_cast<int64_t>(_Right._Word[1]) < static_cast<int64_t>(_Left._Word[1])) {\r\n            return false;\r\n        }\r\n\r\n        return _Left._Word[0] < _Right._Word[0];\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator>(const _Signed128& _Left, const _Signed128& _Right) noexcept {\r\n        return _Right < _Left;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator<=(const _Signed128& _Left, const _Signed128& _Right) noexcept {\r\n        return !(_Right < _Left);\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator>=(const _Signed128& _Left, const _Signed128& _Right) noexcept {\r\n        return !(_Left < _Right);\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    _NODISCARD friend constexpr _Signed128 operator<<(const _Signed128& _Left, const _Base128& _Right) noexcept {\r\n        auto _Tmp{_Left};\r\n        _Tmp._Left_shift(static_cast<unsigned char>(_Right._Word[0]));\r\n        return _Tmp;\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    constexpr _Signed128& operator<<=(const _Ty _Count) noexcept {\r\n        _Left_shift(static_cast<unsigned char>(_Count));\r\n        return *this;\r\n    }\r\n    constexpr _Signed128& operator<<=(const _Base128& _Count) noexcept {\r\n        _Left_shift(static_cast<unsigned char>(_Count._Word[0]));\r\n        return *this;\r\n    }\r\n\r\n    constexpr void _Signed_right_shift(const unsigned char _Count) noexcept {\r\n        if (_Count == 0) {\r\n            return;\r\n        }\r\n\r\n        if (_Count >= 64) {\r\n            _Word[0] = static_cast<uint64_t>(static_cast<int64_t>(_Word[1]) >> (_Count % 64));\r\n            _Word[1] = (_Word[1] & (1ull << 63)) == 0 ? 0 : ~0ull;\r\n            return;\r\n        }\r\n\r\n#if _STL_128_INTRINSICS\r\n        if (!_Is_constant_evaluated()) {\r\n            _Word[0] = __shiftright128(_Word[0], _Word[1], _Count);\r\n        } else\r\n#endif // _STL_128_INTRINSICS\r\n        {\r\n            _Word[0] = (_Word[0] >> _Count) | (_Word[1] << (64 - _Count));\r\n        }\r\n\r\n        _Word[1] = static_cast<uint64_t>(static_cast<int64_t>(_Word[1]) >> _Count);\r\n    }\r\n\r\n    _NODISCARD friend constexpr _Signed128 operator>>(const _Signed128& _Left, const _Base128& _Right) noexcept {\r\n        auto _Tmp{_Left};\r\n        _Tmp._Signed_right_shift(static_cast<unsigned char>(_Right._Word[0]));\r\n        return _Tmp;\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    constexpr _Signed128& operator>>=(const _Ty _Count) noexcept {\r\n        _Signed_right_shift(static_cast<unsigned char>(_Count));\r\n        return *this;\r\n    }\r\n    constexpr _Signed128& operator>>=(const _Base128& _Count) noexcept {\r\n        _Signed_right_shift(static_cast<unsigned char>(_Count._Word[0]));\r\n        return *this;\r\n    }\r\n\r\n    constexpr _Signed128& operator++() noexcept {\r\n        if (++_Word[0] == 0) {\r\n            ++_Word[1];\r\n        }\r\n        return *this;\r\n    }\r\n    constexpr _Signed128 operator++(int) noexcept {\r\n        auto _Tmp = *this;\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    constexpr _Signed128& operator--() noexcept {\r\n        if (_Word[0]-- == 0) {\r\n            --_Word[1];\r\n        }\r\n        return *this;\r\n    }\r\n    constexpr _Signed128 operator--(int) noexcept {\r\n        auto _Tmp = *this;\r\n        --*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD constexpr _Signed128 operator+() const noexcept {\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD constexpr _Signed128 operator-() const noexcept {\r\n        return _Signed128{} - *this;\r\n    }\r\n\r\n    _NODISCARD constexpr _Signed128 operator~() const noexcept {\r\n        return _Signed128{~_Word[0], ~_Word[1]};\r\n    }\r\n\r\n    _NODISCARD friend constexpr _Signed128 operator+(const _Signed128& _Left, const _Signed128& _Right) noexcept {\r\n        _Signed128 _Result;\r\n        const auto _Carry = _AddCarry64(0, _Left._Word[0], _Right._Word[0], _Result._Word[0]);\r\n        _AddCarry64(_Carry, _Left._Word[1], _Right._Word[1], _Result._Word[1]);\r\n        return _Result;\r\n    }\r\n\r\n    constexpr _Signed128& operator+=(const _Base128& _That) noexcept {\r\n        const auto _Carry = _AddCarry64(0, _Word[0], _That._Word[0], _Word[0]);\r\n        _AddCarry64(_Carry, _Word[1], _That._Word[1], _Word[1]);\r\n        return *this;\r\n    }\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    friend constexpr _Ty& operator+=(_Ty& _Left, const _Signed128& _Right) noexcept {\r\n        _Left = static_cast<_Ty>(_Signed128{_Left} + _Right);\r\n        return _Left;\r\n    }\r\n\r\n    _NODISCARD friend constexpr _Signed128 operator-(const _Signed128& _Left, const _Signed128& _Right) noexcept {\r\n        _Signed128 _Result;\r\n        const auto _Borrow = _SubBorrow64(0, _Left._Word[0], _Right._Word[0], _Result._Word[0]);\r\n        _SubBorrow64(_Borrow, _Left._Word[1], _Right._Word[1], _Result._Word[1]);\r\n        return _Result;\r\n    }\r\n\r\n    constexpr _Signed128& operator-=(const _Base128& _That) noexcept {\r\n        const auto _Borrow = _SubBorrow64(0, _Word[0], _That._Word[0], _Word[0]);\r\n        _SubBorrow64(_Borrow, _Word[1], _That._Word[1], _Word[1]);\r\n        return *this;\r\n    }\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    friend constexpr _Ty& operator-=(_Ty& _Left, const _Signed128& _Right) noexcept {\r\n        _Left = static_cast<_Ty>(_Signed128{_Left} - _Right);\r\n        return _Left;\r\n    }\r\n\r\n    constexpr void _Strip_negative(bool& _Flip) noexcept {\r\n        if ((_Word[1] & (1ull << 63)) != 0) {\r\n            *this = -*this;\r\n            _Flip = !_Flip;\r\n        }\r\n    }\r\n\r\n    _NODISCARD friend constexpr _Signed128 operator*(_Signed128 _Left, _Signed128 _Right) noexcept {\r\n        bool _Negative = false;\r\n        _Left._Strip_negative(_Negative);\r\n        _Right._Strip_negative(_Negative);\r\n        _Signed128 _Result{_Base128::_Multiply(_Left, _Right)};\r\n        if (_Negative) {\r\n            _Result = -_Result;\r\n        }\r\n        return _Result;\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    constexpr _Signed128& operator*=(const _Ty _That) noexcept {\r\n        *this = *this * _That;\r\n        return *this;\r\n    }\r\n    constexpr _Signed128& operator*=(const _Signed128& _That) noexcept {\r\n        *this = *this * _That;\r\n        return *this;\r\n    }\r\n    constexpr _Signed128& operator*=(const _Unsigned128& _That) noexcept {\r\n        *this = _Signed128{static_cast<const _Base128&>(*this) * _That};\r\n        return *this;\r\n    }\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    friend constexpr _Ty& operator*=(_Ty& _Left, const _Signed128& _Right) noexcept {\r\n        _Left = static_cast<_Ty>(_Signed128{_Left} * _Right);\r\n        return _Left;\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    _NODISCARD friend constexpr _Signed128 operator/(_Signed128 _Num, _Ty _Den) noexcept {\r\n        bool _Negative = false;\r\n        _Num._Strip_negative(_Negative);\r\n        if constexpr (is_signed_v<_Ty>) {\r\n            if (_Den < 0) {\r\n                _Den      = -_Den;\r\n                _Negative = !_Negative;\r\n            }\r\n        }\r\n\r\n        _Signed128 _Result;\r\n#if !_STL_128_DIV_INTRINSICS\r\n        if constexpr (sizeof(_Ty) <= 4) {\r\n            _Result = _Signed128{_Base128::_Divide(_Num, static_cast<uint32_t>(_Den))};\r\n        } else\r\n#endif // !_STL_128_DIV_INTRINSICS\r\n        {\r\n            _Result = _Signed128{_Base128::_Divide(_Num, static_cast<uint64_t>(_Den))};\r\n        }\r\n\r\n        if (_Negative) {\r\n            _Result = -_Result;\r\n        }\r\n        return _Result;\r\n    }\r\n    _NODISCARD friend constexpr _Signed128 operator/(_Signed128 _Num, _Signed128 _Den) noexcept {\r\n        bool _Negative = false;\r\n        _Num._Strip_negative(_Negative);\r\n        _Den._Strip_negative(_Negative);\r\n        _Signed128 _Result{_Base128::_Divide(_Num, _Den)};\r\n        if (_Negative) {\r\n            _Result = -_Result;\r\n        }\r\n        return _Result;\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    constexpr _Signed128& operator/=(const _Ty _That) noexcept {\r\n        *this = *this / _That;\r\n        return *this;\r\n    }\r\n    constexpr _Signed128& operator/=(const _Signed128& _That) noexcept {\r\n        *this = *this / _That;\r\n        return *this;\r\n    }\r\n    constexpr _Signed128& operator/=(const _Unsigned128& _That) noexcept {\r\n        *this = _Signed128{static_cast<_Base128&>(*this) / _That};\r\n        return *this;\r\n    }\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    friend constexpr _Ty& operator/=(_Ty& _Left, const _Signed128& _Right) noexcept {\r\n        _Left = static_cast<_Ty>(_Signed128{_Left} / _Right);\r\n        return _Left;\r\n    }\r\n\r\n    _NODISCARD friend constexpr _Signed128 operator%(_Signed128 _Left, _Signed128 _Right) noexcept {\r\n        bool _Negative = false;\r\n        _Left._Strip_negative(_Negative);\r\n\r\n        if ((_Right._Word[1] & (1ull << 63)) != 0) {\r\n            _Right = -_Right;\r\n            // intentionally not flipping _Negative\r\n        }\r\n\r\n        _Unsigned128 _Result{_Base128::_Modulo(_Left, _Right)};\r\n        if (_Negative) {\r\n            _Result = -_Result;\r\n        }\r\n        return _Signed128{_Result};\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    _NODISCARD friend constexpr _Signed128 operator%(_Signed128 _Left, const _Ty _Right) noexcept {\r\n        return _Left % _Signed128{_Right};\r\n    }\r\n\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    constexpr _Signed128& operator%=(const _Ty _That) noexcept {\r\n        *this = *this % _That;\r\n        return *this;\r\n    }\r\n    constexpr _Signed128& operator%=(const _Signed128& _That) noexcept {\r\n        *this = *this % _That;\r\n        return *this;\r\n    }\r\n    constexpr _Signed128& operator%=(const _Unsigned128& _That) noexcept {\r\n        *this = static_cast<const _Base128&>(*this) % _That;\r\n        return *this;\r\n    }\r\n    _TEMPLATE_CLASS_INTEGRAL(_Ty)\r\n    friend constexpr _Ty& operator%=(_Ty& _Left, const _Signed128& _Right) noexcept {\r\n        _Left = static_cast<_Ty>(_Signed128{_Left} % _Right);\r\n        return _Left;\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    _NODISCARD static constexpr _Signed128 _Div_ceil(_Signed128 _Num, _Signed128 _Den) noexcept {\r\n        // _STL_INTERNAL_CHECK(_Num >= 0);\r\n        // _STL_INTERNAL_CHECK(_Den > 0);\r\n        return _Signed128{_Base128::_Div_ceil(_Num, _Den)};\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _NODISCARD friend constexpr _Signed128 operator&(const _Signed128& _Left, const _Signed128& _Right) noexcept {\r\n        return _Signed128{_Left._Word[0] & _Right._Word[0], _Left._Word[1] & _Right._Word[1]};\r\n    }\r\n\r\n    constexpr _Signed128& operator&=(const _Base128& _That) noexcept {\r\n        _Word[0] &= _That._Word[0];\r\n        _Word[1] &= _That._Word[1];\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD friend constexpr _Signed128 operator^(const _Signed128& _Left, const _Signed128& _Right) noexcept {\r\n        return _Signed128{_Left._Word[0] ^ _Right._Word[0], _Left._Word[1] ^ _Right._Word[1]};\r\n    }\r\n\r\n    constexpr _Signed128& operator^=(const _Base128& _That) noexcept {\r\n        _Word[0] ^= _That._Word[0];\r\n        _Word[1] ^= _That._Word[1];\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD friend constexpr _Signed128 operator|(const _Signed128& _Left, const _Signed128& _Right) noexcept {\r\n        return _Signed128{_Left._Word[0] | _Right._Word[0], _Left._Word[1] | _Right._Word[1]};\r\n    }\r\n\r\n    constexpr _Signed128& operator|=(const _Base128& _That) noexcept {\r\n        _Word[0] |= _That._Word[0];\r\n        _Word[1] |= _That._Word[1];\r\n        return *this;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<_Signed128> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr _Signed128(min)() noexcept {\r\n        return _Signed128{0ull, 1ull << 63};\r\n    }\r\n\r\n    _NODISCARD static constexpr _Signed128(max)() noexcept {\r\n        return _Signed128{~0ull, ~0ull >> 1};\r\n    }\r\n\r\n    _NODISCARD static constexpr _Signed128 lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr _Signed128 epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Signed128 round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Signed128 denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Signed128 infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Signed128 quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Signed128 signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr int digits     = 127;\r\n    static constexpr int digits10   = 38;\r\n    static constexpr bool is_signed = true;\r\n};\r\n\r\ntemplate <>\r\nstruct common_type<_Signed128, _Unsigned128> {\r\n    using type = _Unsigned128;\r\n};\r\ntemplate <>\r\nstruct common_type<_Unsigned128, _Signed128> {\r\n    using type = _Unsigned128;\r\n};\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr _Ty _Min_limit() noexcept;\r\n\r\ntemplate <>\r\n_NODISCARD constexpr _Unsigned128 _Min_limit<_Unsigned128>() noexcept {\r\n    return 0;\r\n}\r\n\r\ntemplate <>\r\n_NODISCARD constexpr _Signed128 _Min_limit<_Signed128>() noexcept {\r\n    return _Signed128{0ull, 1ull << 63};\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr _Ty _Max_limit() noexcept;\r\n\r\ntemplate <>\r\n_NODISCARD constexpr _Unsigned128 _Max_limit<_Unsigned128>() noexcept {\r\n    return _Unsigned128{~0ull, ~0ull};\r\n}\r\n\r\ntemplate <>\r\n_NODISCARD constexpr _Signed128 _Max_limit<_Signed128>() noexcept {\r\n    return _Signed128{~0ull, ~0ull >> 1};\r\n}\r\n\r\n#undef _STL_128_INTRINSICS\r\n#undef _STL_128_DIV_INTRINSICS\r\n\r\n_STD_END\r\n\r\n#undef _TEMPLATE_CLASS_INTEGRAL\r\n#undef _ZERO_OR_NO_INIT\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_INT128_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_iter_core.hpp",
    "content": "// __msvc_iter_core.hpp internal header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef __MSVC_ITER_CORE_HPP\r\n#define __MSVC_ITER_CORE_HPP\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <utility>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\ntemplate <class _Ty, class _Alloc, class = void>\r\nstruct _Has_allocator_type : false_type {}; // tests for suitable _Ty::allocator_type\r\n\r\ntemplate <class _Ty, class _Alloc>\r\nstruct _Has_allocator_type<_Ty, _Alloc, void_t<typename _Ty::allocator_type>>\r\n    : is_convertible<_Alloc, typename _Ty::allocator_type>::type {};\r\n\r\n_EXPORT_STD struct allocator_arg_t { // tag type for added allocator argument\r\n    explicit allocator_arg_t() = default;\r\n};\r\n\r\n_EXPORT_STD _INLINE_VAR constexpr allocator_arg_t allocator_arg{};\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc>\r\nstruct uses_allocator : _Has_allocator_type<_Ty, _Alloc>::type {};\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc>\r\n_NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES constexpr bool uses_allocator_v = uses_allocator<_Ty, _Alloc>::value;\r\n\r\n// from <iterator>\r\n_EXPORT_STD struct input_iterator_tag {};\r\n\r\n_EXPORT_STD struct output_iterator_tag {};\r\n\r\n_EXPORT_STD struct forward_iterator_tag : input_iterator_tag {};\r\n\r\n_EXPORT_STD struct bidirectional_iterator_tag : forward_iterator_tag {};\r\n\r\n_EXPORT_STD struct random_access_iterator_tag : bidirectional_iterator_tag {};\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD struct contiguous_iterator_tag : random_access_iterator_tag {};\r\n\r\ntemplate <class _Ty>\r\nusing _With_reference = _Ty&;\r\n\r\ntemplate <class _Ty>\r\nconcept _Can_reference = requires { typename _With_reference<_Ty>; };\r\n\r\ntemplate <class _Ty>\r\nconcept _Dereferenceable = requires(_Ty& __t) {\r\n    { *__t } -> _Can_reference;\r\n};\r\n\r\ntemplate <class _Ty>\r\nconcept _Has_member_iterator_concept = requires { typename _Ty::iterator_concept; };\r\n\r\ntemplate <class _Ty>\r\nconcept _Has_member_iterator_category = requires { typename _Ty::iterator_category; };\r\n\r\ntemplate <class _Ty>\r\nconcept _Has_member_value_type = requires { typename _Ty::value_type; };\r\n\r\ntemplate <class _Ty>\r\nconcept _Has_member_element_type = requires { typename _Ty::element_type; };\r\n\r\ntemplate <class _Ty>\r\nconcept _Has_member_difference_type = requires { typename _Ty::difference_type; };\r\n\r\ntemplate <class _Ty>\r\nconcept _Has_member_pointer = requires { typename _Ty::pointer; };\r\n\r\ntemplate <class _Ty>\r\nconcept _Has_member_reference = requires { typename _Ty::reference; };\r\n\r\n_EXPORT_STD template <class>\r\nstruct incrementable_traits {};\r\n\r\ntemplate <class _Ty>\r\n    requires is_object_v<_Ty>\r\nstruct incrementable_traits<_Ty*> {\r\n    using difference_type = ptrdiff_t;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct incrementable_traits<const _Ty> : incrementable_traits<_Ty> {};\r\n\r\ntemplate <_Has_member_difference_type _Ty>\r\nstruct incrementable_traits<_Ty> {\r\n    using difference_type = _Ty::difference_type;\r\n};\r\n\r\ntemplate <class _Ty>\r\nconcept _Can_difference = requires(const _Ty& __a, const _Ty& __b) {\r\n    { __a - __b } -> integral;\r\n};\r\n\r\ntemplate <class _Ty>\r\n    requires (!_Has_member_difference_type<_Ty> && _Can_difference<_Ty>)\r\nstruct incrementable_traits<_Ty> {\r\n    using difference_type = make_signed_t<decltype(_STD declval<_Ty>() - _STD declval<_Ty>())>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nconcept _Is_from_primary = _Same_impl<typename _Ty::_From_primary, _Ty>;\r\n\r\n_EXPORT_STD template <class>\r\nstruct iterator_traits;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing iter_difference_t = conditional_t<_Is_from_primary<iterator_traits<remove_cvref_t<_Ty>>>,\r\n    incrementable_traits<remove_cvref_t<_Ty>>, iterator_traits<remove_cvref_t<_Ty>>>::difference_type;\r\n\r\ntemplate <class>\r\nstruct _Cond_value_type {};\r\n\r\ntemplate <class _Ty>\r\n    requires is_object_v<_Ty>\r\nstruct _Cond_value_type<_Ty> {\r\n    using value_type = remove_cv_t<_Ty>;\r\n};\r\n\r\n_EXPORT_STD template <class>\r\nstruct indirectly_readable_traits {};\r\n\r\ntemplate <class _Ty>\r\nstruct indirectly_readable_traits<_Ty*> : _Cond_value_type<_Ty> {};\r\n\r\ntemplate <class _Ty>\r\n    requires is_array_v<_Ty>\r\nstruct indirectly_readable_traits<_Ty> {\r\n    using value_type = remove_cv_t<remove_extent_t<_Ty>>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct indirectly_readable_traits<const _Ty> : indirectly_readable_traits<_Ty> {};\r\n\r\ntemplate <_Has_member_value_type _Ty>\r\nstruct indirectly_readable_traits<_Ty> : _Cond_value_type<typename _Ty::value_type> {};\r\n\r\ntemplate <_Has_member_element_type _Ty>\r\nstruct indirectly_readable_traits<_Ty> : _Cond_value_type<typename _Ty::element_type> {};\r\n\r\ntemplate <_Has_member_value_type _Ty>\r\n    requires _Has_member_element_type<_Ty>\r\nstruct indirectly_readable_traits<_Ty> {};\r\n\r\ntemplate <_Has_member_value_type _Ty>\r\n    requires _Has_member_element_type<_Ty>\r\n          && same_as<remove_cv_t<typename _Ty::value_type>, remove_cv_t<typename _Ty::element_type>>\r\nstruct indirectly_readable_traits<_Ty> : _Cond_value_type<typename _Ty::value_type> {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing iter_value_t = conditional_t<_Is_from_primary<iterator_traits<remove_cvref_t<_Ty>>>,\r\n    indirectly_readable_traits<remove_cvref_t<_Ty>>, iterator_traits<remove_cvref_t<_Ty>>>::value_type;\r\n\r\n_EXPORT_STD template <_Dereferenceable _Ty>\r\nusing iter_reference_t = decltype(*_STD declval<_Ty&>());\r\n\r\ntemplate <class>\r\nstruct _Iterator_traits_base {};\r\n\r\ntemplate <class _It>\r\nconcept _Has_iter_types = _Has_member_difference_type<_It> && _Has_member_value_type<_It> && _Has_member_reference<_It>\r\n                       && _Has_member_iterator_category<_It>;\r\n\r\ntemplate <bool _Has_member_typedef>\r\nstruct _Old_iter_traits_pointer {\r\n    template <class _It>\r\n    using _Apply = _It::pointer;\r\n};\r\n\r\ntemplate <>\r\nstruct _Old_iter_traits_pointer<false> {\r\n    template <class>\r\n    using _Apply = void;\r\n};\r\n\r\ntemplate <_Has_iter_types _It>\r\nstruct _Iterator_traits_base<_It> {\r\n    using iterator_category = _It::iterator_category;\r\n    using value_type        = _It::value_type;\r\n    using difference_type   = _It::difference_type;\r\n    using pointer           = _Old_iter_traits_pointer<_Has_member_pointer<_It>>::template _Apply<_It>;\r\n    using reference         = _It::reference;\r\n};\r\n\r\ntemplate <bool _Has_member_typedef>\r\nstruct _Iter_traits_difference {\r\n    template <class _It>\r\n    using _Apply = incrementable_traits<_It>::difference_type;\r\n};\r\n\r\ntemplate <>\r\nstruct _Iter_traits_difference<false> {\r\n    template <class>\r\n    using _Apply = void;\r\n};\r\n\r\ntemplate <class _It>\r\nconcept _Cpp17_iterator = requires(_It __i) {\r\n    { *__i } -> _Can_reference;\r\n    { ++__i } -> same_as<_It&>;\r\n    { *__i++ } -> _Can_reference;\r\n} && copyable<_It>;\r\n\r\ntemplate <class _It>\r\nconcept _Cpp17_input_iterator =\r\n    _Cpp17_iterator<_It> && equality_comparable<_It> && _Has_member_difference_type<incrementable_traits<_It>>\r\n    && _Has_member_value_type<indirectly_readable_traits<_It>> && requires(_It __i) {\r\n           typename common_reference_t<iter_reference_t<_It>&&, typename indirectly_readable_traits<_It>::value_type&>;\r\n           typename common_reference_t<decltype(*__i++)&&, typename indirectly_readable_traits<_It>::value_type&>;\r\n           requires signed_integral<typename incrementable_traits<_It>::difference_type>;\r\n       };\r\n\r\ntemplate <class _It>\r\n    requires (!_Has_iter_types<_It> && _Cpp17_iterator<_It> && !_Cpp17_input_iterator<_It>)\r\nstruct _Iterator_traits_base<_It> {\r\n    using iterator_category = output_iterator_tag;\r\n    using value_type        = void;\r\n    using difference_type =\r\n        _Iter_traits_difference<_Has_member_difference_type<incrementable_traits<_It>>>::template _Apply<_It>;\r\n    using pointer   = void;\r\n    using reference = void;\r\n};\r\n\r\nenum class _Itraits_pointer_strategy { _Use_void, _Use_member, _Use_decltype };\r\n\r\ntemplate <_Itraits_pointer_strategy>\r\nstruct _Iter_traits_pointer;\r\n\r\ntemplate <>\r\nstruct _Iter_traits_pointer<_Itraits_pointer_strategy::_Use_void> {\r\n    template <class>\r\n    using _Apply = void;\r\n};\r\n\r\ntemplate <>\r\nstruct _Iter_traits_pointer<_Itraits_pointer_strategy::_Use_member> {\r\n    template <class _It>\r\n    using _Apply = _It::pointer;\r\n};\r\n\r\ntemplate <>\r\nstruct _Iter_traits_pointer<_Itraits_pointer_strategy::_Use_decltype> {\r\n    template <class _It>\r\n    using _Apply = decltype(_STD declval<_It&>().operator->());\r\n};\r\n\r\ntemplate <class _Ty>\r\nconcept _Has_member_arrow = requires(_Ty&& __t) { static_cast<_Ty &&>(__t).operator->(); };\r\n\r\ntemplate <bool _Has_member_typedef>\r\nstruct _Iter_traits_reference {\r\n    template <class _It>\r\n    using _Apply = _It::reference;\r\n};\r\n\r\ntemplate <>\r\nstruct _Iter_traits_reference<false> {\r\n    template <class _It>\r\n    using _Apply = iter_reference_t<_It>;\r\n};\r\n\r\ntemplate <bool _Is_random>\r\nstruct _Iter_traits_category4 {\r\n    using type = random_access_iterator_tag;\r\n};\r\n\r\ntemplate <>\r\nstruct _Iter_traits_category4<false> {\r\n    using type = bidirectional_iterator_tag;\r\n};\r\n\r\ntemplate <class _It>\r\nconcept _Cpp17_random_delta =\r\n    totally_ordered<_It> && requires(_It __i, incrementable_traits<_It>::difference_type __n) {\r\n        { __i += __n } -> same_as<_It&>;\r\n        { __i -= __n } -> same_as<_It&>;\r\n        { __i + __n } -> same_as<_It>;\r\n        { __n + __i } -> same_as<_It>;\r\n        { __i - __n } -> same_as<_It>;\r\n        { __i - __i } -> same_as<decltype(__n)>;\r\n        { __i[__n] } -> convertible_to<iter_reference_t<_It>>;\r\n    };\r\n\r\ntemplate <bool _Is_bidi>\r\nstruct _Iter_traits_category3 {\r\n    template <class _It>\r\n    using _Apply = _Iter_traits_category4<_Cpp17_random_delta<_It>>::type;\r\n};\r\n\r\ntemplate <>\r\nstruct _Iter_traits_category3<false> {\r\n    template <class>\r\n    using _Apply = forward_iterator_tag;\r\n};\r\n\r\ntemplate <class _It>\r\nconcept _Cpp17_bidi_delta = requires(_It __i) {\r\n    { --__i } -> same_as<_It&>;\r\n    { __i-- } -> convertible_to<const _It&>;\r\n    requires same_as<decltype(*__i--), iter_reference_t<_It>>;\r\n};\r\n\r\ntemplate <bool _Is_forward>\r\nstruct _Iter_traits_category2 {\r\n    template <class _It>\r\n    using _Apply = _Iter_traits_category3<_Cpp17_bidi_delta<_It>>::template _Apply<_It>;\r\n};\r\n\r\ntemplate <>\r\nstruct _Iter_traits_category2<false> {\r\n    template <class>\r\n    using _Apply = input_iterator_tag;\r\n};\r\n\r\ntemplate <class _It>\r\nconcept _Cpp17_forward_delta =\r\n    constructible_from<_It> && is_reference_v<iter_reference_t<_It>>\r\n    && same_as<remove_cvref_t<iter_reference_t<_It>>, typename indirectly_readable_traits<_It>::value_type>\r\n    && requires(_It __i) {\r\n           { __i++ } -> convertible_to<const _It&>;\r\n           requires same_as<decltype(*__i++), iter_reference_t<_It>>;\r\n       };\r\n\r\ntemplate <bool _Has_member_typedef>\r\nstruct _Iter_traits_category {\r\n    template <class _It>\r\n    using _Apply = _It::iterator_category;\r\n};\r\n\r\ntemplate <>\r\nstruct _Iter_traits_category<false> {\r\n    template <class _It>\r\n    using _Apply = _Iter_traits_category2<_Cpp17_forward_delta<_It>>::template _Apply<_It>;\r\n};\r\n\r\ntemplate <class _It>\r\n    requires (!_Has_iter_types<_It> && _Cpp17_input_iterator<_It>)\r\nstruct _Iterator_traits_base<_It> {\r\n    using iterator_category = _Iter_traits_category<_Has_member_iterator_category<_It>>::template _Apply<_It>;\r\n    using value_type        = indirectly_readable_traits<_It>::value_type;\r\n    using difference_type   = incrementable_traits<_It>::difference_type;\r\n    using pointer =\r\n        _Iter_traits_pointer<(_Has_member_pointer<_It>  ? _Itraits_pointer_strategy::_Use_member\r\n                              : _Has_member_arrow<_It&> ? _Itraits_pointer_strategy::_Use_decltype\r\n                                                        : _Itraits_pointer_strategy::_Use_void)>::template _Apply<_It>;\r\n    using reference = _Iter_traits_reference<_Has_member_reference<_It>>::template _Apply<_It>;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct iterator_traits : _Iterator_traits_base<_Ty> {\r\n    using _From_primary = iterator_traits;\r\n};\r\n\r\ntemplate <class _Ty>\r\n    requires is_object_v<_Ty>\r\nstruct iterator_traits<_Ty*> {\r\n    using iterator_concept  = contiguous_iterator_tag;\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = remove_cv_t<_Ty>;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = _Ty*;\r\n    using reference         = _Ty&;\r\n};\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Integer_class = requires {\r\n    typename _Ty::_Signed_type;\r\n    typename _Ty::_Unsigned_type;\r\n};\r\n\r\ntemplate <class _Ty>\r\nconcept _Integer_like = _Is_nonbool_integral<_Ty> || _Integer_class<_Ty>;\r\n\r\ntemplate <class _Ty>\r\nconcept _Signed_integer_like = _Integer_like<_Ty> && static_cast<_Ty>(-1) < static_cast<_Ty>(0);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept weakly_incrementable = movable<_Ty> && requires(_Ty __i) {\r\n    typename iter_difference_t<_Ty>;\r\n    requires _Signed_integer_like<iter_difference_t<_Ty>>;\r\n    { ++__i } -> same_as<_Ty&>;\r\n    __i++;\r\n};\r\n\r\n_EXPORT_STD template <class _It>\r\nconcept input_or_output_iterator = requires(_It __i) {\r\n    { *__i } -> _Can_reference;\r\n} && weakly_incrementable<_It>;\r\n\r\n_EXPORT_STD template <class _Se, class _It>\r\nconcept sentinel_for = semiregular<_Se> && input_or_output_iterator<_It> && _Weakly_equality_comparable_with<_Se, _It>;\r\n\r\n_EXPORT_STD template <class _Se, class _It> // specializations allowed by N5014 [iterator.concept.sizedsentinel]/3\r\nconstexpr bool disable_sized_sentinel_for = false;\r\n\r\n_EXPORT_STD template <class _Se, class _It>\r\nconcept sized_sentinel_for = sentinel_for<_Se, _It> && !disable_sized_sentinel_for<remove_cv_t<_Se>, remove_cv_t<_It>>\r\n                          && requires(const _It& __i, const _Se& __s) {\r\n                                 { __s - __i } -> same_as<iter_difference_t<_It>>;\r\n                                 { __i - __s } -> same_as<iter_difference_t<_It>>;\r\n                             };\r\n\r\n_EXPORT_STD struct default_sentinel_t {};\r\n\r\n_EXPORT_STD inline constexpr default_sentinel_t default_sentinel{};\r\n\r\nnamespace ranges {\r\n    _EXPORT_STD enum class subrange_kind : bool { unsized, sized };\r\n\r\n    _EXPORT_STD template <input_or_output_iterator _It, sentinel_for<_It> _Se = _It,\r\n        subrange_kind _Ki = sized_sentinel_for<_Se, _It> ? subrange_kind::sized : subrange_kind::unsized>\r\n        requires (_Ki == subrange_kind::sized || !sized_sentinel_for<_Se, _It>)\r\n    class subrange;\r\n\r\n    _EXPORT_STD template <size_t _Idx, class _It, class _Se, subrange_kind _Ki>\r\n        requires ((_Idx == 0 && copyable<_It>) || _Idx == 1)\r\n    _NODISCARD constexpr auto get(const subrange<_It, _Se, _Ki>& _Val);\r\n\r\n    _EXPORT_STD template <size_t _Idx, class _It, class _Se, subrange_kind _Ki>\r\n        requires (_Idx < 2)\r\n    _NODISCARD constexpr auto get(subrange<_It, _Se, _Ki>&& _Val);\r\n} // namespace ranges\r\n\r\n_EXPORT_STD using ranges::get;\r\n\r\ntemplate <class _It, class _Se, ranges::subrange_kind _Ki>\r\nconstexpr bool _Is_subrange_v<ranges::subrange<_It, _Se, _Ki>> = true;\r\n\r\ntemplate <class _It, class _Se, ranges::subrange_kind _Ki>\r\nstruct tuple_size<ranges::subrange<_It, _Se, _Ki>> : integral_constant<size_t, 2> {};\r\n\r\ntemplate <class _It, class _Se, ranges::subrange_kind _Ki>\r\nstruct tuple_element<0, ranges::subrange<_It, _Se, _Ki>> {\r\n    using type = _It;\r\n};\r\n\r\ntemplate <class _It, class _Se, ranges::subrange_kind _Ki>\r\nstruct tuple_element<1, ranges::subrange<_It, _Se, _Ki>> {\r\n    using type = _Se;\r\n};\r\n\r\ntemplate <class _It, class _Se, ranges::subrange_kind _Ki>\r\nstruct tuple_element<0, const ranges::subrange<_It, _Se, _Ki>> {\r\n    using type = _It;\r\n};\r\n\r\ntemplate <class _It, class _Se, ranges::subrange_kind _Ki>\r\nstruct tuple_element<1, const ranges::subrange<_It, _Se, _Ki>> {\r\n    using type = _Se;\r\n};\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class, class = void>\r\nstruct _Iterator_traits_base {}; // empty for non-iterators\r\n\r\ntemplate <class _Iter>\r\nstruct _Iterator_traits_base<_Iter,\r\n    void_t<typename _Iter::iterator_category, typename _Iter::value_type, typename _Iter::difference_type,\r\n        typename _Iter::pointer, typename _Iter::reference>> {\r\n    // defined if _Iter::* types exist\r\n    using iterator_category = typename _Iter::iterator_category;\r\n    using value_type        = typename _Iter::value_type;\r\n    using difference_type   = typename _Iter::difference_type;\r\n    using pointer           = typename _Iter::pointer;\r\n    using reference         = typename _Iter::reference;\r\n};\r\n\r\ntemplate <class _Ty, bool = is_object_v<_Ty>>\r\nstruct _Iterator_traits_pointer_base { // iterator properties for pointers to object\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = remove_cv_t<_Ty>;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = _Ty*;\r\n    using reference         = _Ty&;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Iterator_traits_pointer_base<_Ty, false> {}; // iterator non-properties for pointers to non-object\r\n\r\ntemplate <class _Iter>\r\nstruct iterator_traits : _Iterator_traits_base<_Iter> {}; // get traits from iterator _Iter, if possible\r\n\r\ntemplate <class _Ty>\r\nstruct iterator_traits<_Ty*> : _Iterator_traits_pointer_base<_Ty> {}; // get traits from pointer, if possible\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Integer_like = _Is_nonbool_integral<_Ty>;\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Signed_integer_like = _Integer_like<_Ty> && is_signed_v<_Ty>;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_INLINE_VAR constexpr auto _Meta_npos = ~size_t{0};\r\n\r\nconstexpr size_t _Meta_find_index_i_(const bool* const _Ptr, const size_t _Count, size_t _Idx = 0) {\r\n    // return the index of the first true in the _Count bools at _Ptr, or _Meta_npos if all are false\r\n    for (; _Idx < _Count; ++_Idx) {\r\n        if (_Ptr[_Idx]) {\r\n            return _Idx;\r\n        }\r\n    }\r\n\r\n    return _Meta_npos;\r\n}\r\n\r\ntemplate <class _List, class _Ty>\r\nstruct _Meta_find_unique_index_ {\r\n    using type = integral_constant<size_t, _Meta_npos>;\r\n};\r\ntemplate <class _List, class _Ty>\r\nusing _Meta_find_unique_index =\r\n    // The index of _Ty in _List if it occurs exactly once, otherwise _Meta_npos\r\n    typename _Meta_find_unique_index_<_List, _Ty>::type;\r\n\r\nconstexpr size_t _Meta_find_unique_index_i_2(const bool* const _Ptr, const size_t _Count, const size_t _First) {\r\n    // return _First if there is no _First < j < _Count such that _Ptr[j] is true, otherwise _Meta_npos\r\n    return _First != _Meta_npos && _STD _Meta_find_index_i_(_Ptr, _Count, _First + 1) == _Meta_npos ? _First\r\n                                                                                                    : _Meta_npos;\r\n}\r\n\r\nconstexpr size_t _Meta_find_unique_index_i_(const bool* const _Ptr, const size_t _Count) {\r\n    // Pass the smallest i such that _Ptr[i] is true to _Meta_find_unique_index_i_2\r\n    return _STD _Meta_find_unique_index_i_2(_Ptr, _Count, _STD _Meta_find_index_i_(_Ptr, _Count));\r\n}\r\n\r\ntemplate <template <class...> class _List, class _First, class... _Rest, class _Ty>\r\nstruct _Meta_find_unique_index_<_List<_First, _Rest...>, _Ty> {\r\n    static constexpr bool _Bools[] = {is_same_v<_First, _Ty>, is_same_v<_Rest, _Ty>...};\r\n    using type = integral_constant<size_t, _STD _Meta_find_unique_index_i_(_Bools, 1 + sizeof...(_Rest))>;\r\n};\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_ITER_CORE_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_minmax.hpp",
    "content": "// __msvc_minmax.hpp internal header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef __MSVC_MINMAX_HPP\r\n#define __MSVC_MINMAX_HPP\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <cstdint>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\nextern \"C\" {\r\nstruct _Min_max_element_t {\r\n    const void* _Min;\r\n    const void* _Max;\r\n};\r\n\r\nstruct _Min_max_1i {\r\n    int8_t _Min;\r\n    int8_t _Max;\r\n};\r\n\r\nstruct _Min_max_1u {\r\n    uint8_t _Min;\r\n    uint8_t _Max;\r\n};\r\n\r\nstruct _Min_max_2i {\r\n    int16_t _Min;\r\n    int16_t _Max;\r\n};\r\n\r\nstruct _Min_max_2u {\r\n    uint16_t _Min;\r\n    uint16_t _Max;\r\n};\r\n\r\nstruct _Min_max_4i {\r\n    int32_t _Min;\r\n    int32_t _Max;\r\n};\r\n\r\nstruct _Min_max_4u {\r\n    uint32_t _Min;\r\n    uint32_t _Max;\r\n};\r\n\r\nstruct _Min_max_8i {\r\n    int64_t _Min;\r\n    int64_t _Max;\r\n};\r\n\r\nstruct _Min_max_8u {\r\n    uint64_t _Min;\r\n    uint64_t _Max;\r\n};\r\n\r\nstruct _Min_max_f {\r\n    float _Min;\r\n    float _Max;\r\n};\r\n\r\nstruct _Min_max_d {\r\n    double _Min;\r\n    double _Max;\r\n};\r\n\r\nstruct _Min_max_p {\r\n    void* _Min;\r\n    void* _Max;\r\n};\r\n} // extern \"C\"\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_MINMAX_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_ostream.hpp",
    "content": "// __msvc_ostream.hpp internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef __MSVC_OSTREAM_HPP\r\n#define __MSVC_OSTREAM_HPP\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <ios>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n#pragma vtordisp(push, 2) // compiler bug workaround\r\n\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _Traits>\r\nclass basic_ostream : virtual public basic_ios<_Elem, _Traits> { // control insertions into a stream buffer\r\npublic:\r\n    using _Myios = basic_ios<_Elem, _Traits>;\r\n    using _Mysb  = basic_streambuf<_Elem, _Traits>;\r\n    using _Iter  = ostreambuf_iterator<_Elem, _Traits>;\r\n    using _Nput  = num_put<_Elem, _Iter>;\r\n\r\n    explicit __CLR_OR_THIS_CALL basic_ostream(basic_streambuf<_Elem, _Traits>* _Strbuf, bool _Isstd = false) {\r\n        _Myios::init(_Strbuf, _Isstd);\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL basic_ostream(_Uninitialized, bool _Addit = true) {\r\n        if (_Addit) {\r\n            this->_Addstd(this); // suppress for basic_iostream\r\n        }\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL basic_ostream(basic_ostream&& _Right) noexcept(false) {\r\n        _Myios::init();\r\n        _Myios::move(_STD move(_Right));\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator=(basic_ostream&& _Right) noexcept /* strengthened */ {\r\n        this->swap(_Right);\r\n        return *this;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL swap(basic_ostream& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Myios::swap(_Right);\r\n        }\r\n    }\r\n\r\npublic:\r\n    __CLR_OR_THIS_CALL basic_ostream(const basic_ostream&)            = delete;\r\n    basic_ostream& __CLR_OR_THIS_CALL operator=(const basic_ostream&) = delete;\r\n\r\n    __CLR_OR_THIS_CALL ~basic_ostream() noexcept override {}\r\n\r\n    using int_type = typename _Traits::int_type;\r\n    using pos_type = typename _Traits::pos_type;\r\n    using off_type = typename _Traits::off_type;\r\n\r\n    class _Sentry_base { // stores thread lock and reference to output stream\r\n    public:\r\n        __CLR_OR_THIS_CALL _Sentry_base(basic_ostream& _Ostr) : _Myostr(_Ostr) { // lock the stream buffer, if there\r\n            const auto _Rdbuf = _Myostr.rdbuf();\r\n            if (_Rdbuf) {\r\n                _Rdbuf->_Lock();\r\n            }\r\n        }\r\n\r\n        __CLR_OR_THIS_CALL ~_Sentry_base() noexcept { // destroy after unlocking\r\n            const auto _Rdbuf = _Myostr.rdbuf();\r\n            if (_Rdbuf) {\r\n                _Rdbuf->_Unlock();\r\n            }\r\n        }\r\n\r\n        basic_ostream& _Myostr; // the output stream, for _Unlock call at destruction\r\n\r\n        _Sentry_base& operator=(const _Sentry_base&) = delete;\r\n    };\r\n\r\n    class sentry : public _Sentry_base {\r\n    public:\r\n        explicit __CLR_OR_THIS_CALL sentry(basic_ostream& _Ostr) : _Sentry_base(_Ostr) {\r\n            if (!_Ostr.good()) {\r\n                _Ok = false;\r\n                return;\r\n            }\r\n\r\n            const auto _Tied = _Ostr.tie();\r\n            if (!_Tied || _Tied == _STD addressof(_Ostr)) {\r\n                _Ok = true;\r\n                return;\r\n            }\r\n\r\n            _Tied->flush();\r\n            _Ok = _Ostr.good(); // store test only after flushing tie\r\n        }\r\n\r\n        _STL_DISABLE_DEPRECATED_WARNING\r\n        __CLR_OR_THIS_CALL ~sentry() noexcept {\r\n#if !_HAS_EXCEPTIONS\r\n            const bool _Zero_uncaught_exceptions = true;\r\n#elif _HAS_DEPRECATED_UNCAUGHT_EXCEPTION\r\n            const bool _Zero_uncaught_exceptions = !_STD uncaught_exception(); // TRANSITION, ArchivedOS-12000909\r\n#else // ^^^ _HAS_DEPRECATED_UNCAUGHT_EXCEPTION / !_HAS_DEPRECATED_UNCAUGHT_EXCEPTION vvv\r\n            const bool _Zero_uncaught_exceptions = _STD uncaught_exceptions() == 0;\r\n#endif // ^^^ !_HAS_DEPRECATED_UNCAUGHT_EXCEPTION ^^^\r\n\r\n            if (_Zero_uncaught_exceptions) {\r\n                this->_Myostr._Osfx();\r\n            }\r\n        }\r\n        _STL_RESTORE_DEPRECATED_WARNING\r\n\r\n        explicit __CLR_OR_THIS_CALL operator bool() const {\r\n            return _Ok;\r\n        }\r\n\r\n        __CLR_OR_THIS_CALL sentry(const sentry&)            = delete;\r\n        sentry& __CLR_OR_THIS_CALL operator=(const sentry&) = delete;\r\n\r\n    private:\r\n        bool _Ok; // true if stream state okay at construction\r\n    };\r\n\r\n#ifdef _CRTBLD\r\n    // TRANSITION, ABI: non-Standard opfx() is preserved for binary compatibility\r\n    bool __CLR_OR_THIS_CALL opfx() { // test stream state and flush tie stream as needed\r\n        if (!this->good()) {\r\n            return false;\r\n        }\r\n\r\n        const auto _Tied = _Myios::tie();\r\n        if (!_Tied || _Myios::tie() == this) {\r\n            return true;\r\n        }\r\n\r\n        _Tied->flush();\r\n        return this->good();\r\n    }\r\n\r\n    // TRANSITION, ABI: non-Standard osfx() is preserved for binary compatibility\r\n    void __CLR_OR_THIS_CALL osfx() noexcept { // perform any wrapup\r\n        _Osfx();\r\n    }\r\n#endif // ^^^ defined(_CRTBLD) ^^^\r\n\r\n    void __CLR_OR_THIS_CALL _Osfx() noexcept { // perform any wrapup\r\n        _TRY_BEGIN\r\n        if (this->good() && this->flags() & ios_base::unitbuf) {\r\n            if (_Myios::rdbuf()->pubsync() == -1) { // flush stream as needed\r\n                _Myios::setstate(ios_base::badbit);\r\n            }\r\n        }\r\n        _CATCH_ALL\r\n        _CATCH_END\r\n    }\r\n\r\n#ifdef _M_CEE_PURE\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(basic_ostream&(__clrcall* _Pfn)(basic_ostream&) ) {\r\n        // call basic_ostream manipulator\r\n        return _Pfn(*this);\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(_Myios&(__clrcall* _Pfn)(_Myios&) ) {\r\n        // call basic_ios manipulator\r\n        _Pfn(*this);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(ios_base&(__clrcall* _Pfn)(ios_base&) ) {\r\n        // call ios_base manipulator\r\n        _Pfn(*this);\r\n        return *this;\r\n    }\r\n#endif // defined(_M_CEE_PURE)\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(basic_ostream&(__cdecl* _Pfn)(basic_ostream&) ) {\r\n        // call basic_ostream manipulator\r\n        return _Pfn(*this);\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(_Myios&(__cdecl* _Pfn)(_Myios&) ) {\r\n        // call basic_ios manipulator\r\n        _Pfn(*this);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(ios_base&(__cdecl* _Pfn)(ios_base&) ) {\r\n        // call ios_base manipulator\r\n        _Pfn(*this);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(bool _Val) { // insert a boolean\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (_Ok) { // state okay, use facet to insert\r\n            const _Nput& _Nput_fac = _STD use_facet<_Nput>(this->getloc());\r\n\r\n            _TRY_IO_BEGIN\r\n            if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this, _Myios::fill(), _Val).failed()) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(short _Val) { // insert a short\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (_Ok) { // state okay, use facet to insert\r\n            const _Nput& _Nput_fac  = _STD use_facet<_Nput>(this->getloc());\r\n            ios_base::fmtflags _Bfl = this->flags() & ios_base::basefield;\r\n\r\n            long _Tmp;\r\n            if (_Bfl == ios_base::oct || _Bfl == ios_base::hex) {\r\n                _Tmp = static_cast<long>(static_cast<unsigned short>(_Val));\r\n            } else {\r\n                _Tmp = static_cast<long>(_Val);\r\n            }\r\n\r\n            _TRY_IO_BEGIN\r\n            if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this, _Myios::fill(), _Tmp).failed()) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    // NOTE:\r\n    // If you are not using native wchar_t, the unsigned short inserter\r\n    // is masked by an explicit specialization that treats an unsigned\r\n    // short as a wide character.\r\n\r\n    // To read or write unsigned shorts as integers with wchar_t streams,\r\n    // make wchar_t a native type with the command line option /Zc:wchar_t.\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(unsigned short _Val) { // insert an unsigned short\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (_Ok) { // state okay, use facet to insert\r\n            const _Nput& _Nput_fac = _STD use_facet<_Nput>(this->getloc());\r\n\r\n            _TRY_IO_BEGIN\r\n            if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this, _Myios::fill(), static_cast<unsigned long>(_Val))\r\n                    .failed()) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(int _Val) { // insert an int\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (_Ok) { // state okay, use facet to insert\r\n            const _Nput& _Nput_fac  = _STD use_facet<_Nput>(this->getloc());\r\n            ios_base::fmtflags _Bfl = this->flags() & ios_base::basefield;\r\n\r\n            long _Tmp;\r\n            if (_Bfl == ios_base::oct || _Bfl == ios_base::hex) {\r\n                _Tmp = static_cast<long>(static_cast<unsigned int>(_Val));\r\n            } else {\r\n                _Tmp = static_cast<long>(_Val);\r\n            }\r\n\r\n            _TRY_IO_BEGIN\r\n            if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this, _Myios::fill(), _Tmp).failed()) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(unsigned int _Val) { // insert an unsigned int\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (_Ok) { // state okay, use facet to insert\r\n            const _Nput& _Nput_fac = _STD use_facet<_Nput>(this->getloc());\r\n\r\n            _TRY_IO_BEGIN\r\n            if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this, _Myios::fill(), static_cast<unsigned long>(_Val))\r\n                    .failed()) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(long _Val) { // insert a long\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (_Ok) { // state okay, use facet to insert\r\n            const _Nput& _Nput_fac = _STD use_facet<_Nput>(this->getloc());\r\n\r\n            _TRY_IO_BEGIN\r\n            if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this, _Myios::fill(), _Val).failed()) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(unsigned long _Val) { // insert an unsigned long\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (_Ok) { // state okay, use facet to insert\r\n            const _Nput& _Nput_fac = _STD use_facet<_Nput>(this->getloc());\r\n\r\n            _TRY_IO_BEGIN\r\n            if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this, _Myios::fill(), _Val).failed()) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(long long _Val) { // insert a long long\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (_Ok) { // state okay, use facet to insert\r\n            const _Nput& _Nput_fac = _STD use_facet<_Nput>(this->getloc());\r\n\r\n            _TRY_IO_BEGIN\r\n            if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this, _Myios::fill(), _Val).failed()) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(unsigned long long _Val) { // insert an unsigned long long\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (_Ok) { // state okay, use facet to insert\r\n            const _Nput& _Nput_fac = _STD use_facet<_Nput>(this->getloc());\r\n\r\n            _TRY_IO_BEGIN\r\n            if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this, _Myios::fill(), _Val).failed()) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(float _Val) { // insert a float\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (_Ok) { // state okay, use facet to insert\r\n            const _Nput& _Nput_fac = _STD use_facet<_Nput>(this->getloc());\r\n\r\n            _TRY_IO_BEGIN\r\n            if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this, _Myios::fill(), static_cast<double>(_Val)).failed()) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(double _Val) { // insert a double\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (_Ok) { // state okay, use facet to insert\r\n            const _Nput& _Nput_fac = _STD use_facet<_Nput>(this->getloc());\r\n\r\n            _TRY_IO_BEGIN\r\n            if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this, _Myios::fill(), _Val).failed()) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(long double _Val) { // insert a long double\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (_Ok) { // state okay, use facet to insert\r\n            const _Nput& _Nput_fac = _STD use_facet<_Nput>(this->getloc());\r\n\r\n            _TRY_IO_BEGIN\r\n            if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this, _Myios::fill(), _Val).failed()) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(const void* _Val) { // insert a void pointer\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (_Ok) { // state okay, use facet to insert\r\n            const _Nput& _Nput_fac = _STD use_facet<_Nput>(this->getloc());\r\n\r\n            _TRY_IO_BEGIN\r\n            if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this, _Myios::fill(), _Val).failed()) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class = void> // TRANSITION, ABI\r\n    basic_ostream& operator<<(const volatile void* _Val) {\r\n        return *this << const_cast<const void*>(_Val);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n#if _HAS_CXX17\r\n    template <class = void> // TRANSITION, ABI\r\n    basic_ostream& operator<<(nullptr_t) { // insert a null pointer\r\n        return *this << \"nullptr\";\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL operator<<(_Mysb* _Strbuf) { // insert until end-of-file from a stream buffer\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        bool _Copied             = false;\r\n        const sentry _Ok(*this);\r\n\r\n        if (_Ok && _Strbuf) {\r\n            for (int_type _Meta = _Traits::eof();; _Copied = true) { // extract another character from stream buffer\r\n                _TRY_BEGIN\r\n                _Meta = _Traits::eq_int_type(_Traits::eof(), _Meta) ? _Strbuf->sgetc() : _Strbuf->snextc();\r\n                _CATCH_ALL\r\n                // N4971 [ostream.inserters]/9: \"If an exception was thrown\r\n                // while extracting a character, the function sets failbit in the error state,\r\n                // and if failbit is set in exceptions() the caught exception is rethrown.\"\r\n                _Myios::setstate(ios_base::failbit, _Myios::exceptions() == ios_base::failbit);\r\n                _CATCH_END\r\n\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Meta)) {\r\n                    break; // end of file, quit\r\n                }\r\n\r\n                _TRY_IO_BEGIN\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Myios::rdbuf()->sputc(_Traits::to_char_type(_Meta)))) {\r\n                    _State |= ios_base::badbit; // insertion failed, quit\r\n                    break;\r\n                }\r\n                _CATCH_IO_END\r\n            }\r\n        }\r\n\r\n        this->width(0);\r\n        int _Setstate_with;\r\n        if (_Strbuf) {\r\n            if (_Copied) {\r\n                _Setstate_with = _State;\r\n            } else {\r\n                _Setstate_with = _State | ios_base::failbit;\r\n            }\r\n        } else {\r\n            _Setstate_with = ios_base::badbit;\r\n        }\r\n\r\n        _Myios::setstate(_Setstate_with);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL put(_Elem _Ch) { // insert a character\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (!_Ok) {\r\n            _State |= ios_base::badbit;\r\n        } else { // state okay, insert character\r\n            _TRY_IO_BEGIN\r\n            if (_Traits::eq_int_type(_Traits::eof(), _Myios::rdbuf()->sputc(_Ch))) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL write(const _Elem* _Str, streamsize _Count) {\r\n        // insert _Count characters from array _Str\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (!_Ok) {\r\n            _State |= ios_base::badbit;\r\n        } else if (0 < _Count) { // state okay, insert characters\r\n            _TRY_IO_BEGIN\r\n            if (_Myios::rdbuf()->sputn(_Str, _Count) != _Count) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL flush() { // flush output stream\r\n        const auto _Rdbuf = _Myios::rdbuf();\r\n        if (_Rdbuf) { // buffer exists, flush it\r\n            const sentry _Ok(*this);\r\n\r\n            if (_Ok) {\r\n                ios_base::iostate _State = ios_base::goodbit;\r\n                _TRY_IO_BEGIN\r\n                if (_Rdbuf->pubsync() == -1) {\r\n                    _State |= ios_base::badbit; // sync failed\r\n                }\r\n                _CATCH_IO_END\r\n                _Myios::setstate(_State);\r\n            }\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL seekp(pos_type _Pos) { // set output stream position to _Pos\r\n        const sentry _Ok(*this);\r\n\r\n        if (!this->fail()) {\r\n            ios_base::iostate _State = ios_base::goodbit;\r\n            _TRY_IO_BEGIN\r\n            if (static_cast<off_type>(_Myios::rdbuf()->pubseekpos(_Pos, ios_base::out)) == -1) {\r\n                _State |= ios_base::failbit; // seek failed\r\n            }\r\n            _CATCH_IO_END\r\n            _Myios::setstate(_State);\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    basic_ostream& __CLR_OR_THIS_CALL seekp(off_type _Off, ios_base::seekdir _Way) {\r\n        // change output stream position by _Off, according to _Way\r\n        const sentry _Ok(*this);\r\n\r\n        if (!this->fail()) {\r\n            ios_base::iostate _State = ios_base::goodbit;\r\n            _TRY_IO_BEGIN\r\n            if (static_cast<off_type>(_Myios::rdbuf()->pubseekoff(_Off, _Way, ios_base::out)) == -1) {\r\n                _State |= ios_base::failbit; // seek failed\r\n            }\r\n            _CATCH_IO_END\r\n            _Myios::setstate(_State);\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    pos_type __CLR_OR_THIS_CALL tellp() {\r\n        const sentry _Ok(*this);\r\n\r\n        if (!this->fail()) {\r\n            _TRY_IO_BEGIN\r\n            return _Myios::rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out);\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        return pos_type{off_type{-1}};\r\n    }\r\n};\r\n\r\n#pragma vtordisp(pop) // compiler bug workaround\r\n\r\n#ifndef _NATIVE_WCHAR_T_DEFINED\r\n// NOTE:\r\n// If you are not using native wchar_t, the following explicit\r\n// specialization will mask the member function (above) that treats\r\n// an unsigned short as an integer.\r\n\r\n// To read or write unsigned shorts as integers with wchar_t streams,\r\n// make wchar_t a native type with the command line option /Zc:wchar_t.\r\n\r\ntemplate <>\r\ninline basic_ostream<unsigned short, char_traits<unsigned short>>& __CLR_OR_THIS_CALL basic_ostream<unsigned short,\r\n    char_traits<unsigned short>>::operator<<(unsigned short _Ch) { // extract a character\r\n    using _Traits = char_traits<unsigned short>;\r\n\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n    const sentry _Ok(*this);\r\n\r\n    if (_Ok) { // state okay, insert\r\n        streamsize _Pad = this->width() <= 1 ? 0 : this->width() - 1;\r\n\r\n        _TRY_IO_BEGIN\r\n        if ((this->flags() & ios_base::adjustfield) != ios_base::left) {\r\n            for (; _State == ios_base::goodbit && 0 < _Pad; --_Pad) { // pad on left\r\n                if (_Traits::eq_int_type(_Traits::eof(), this->rdbuf()->sputc(this->fill()))) {\r\n                    _State |= ios_base::badbit;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (_State == ios_base::goodbit && _Traits::eq_int_type(_Traits::eof(), this->rdbuf()->sputc(_Ch))) {\r\n            _State |= ios_base::badbit;\r\n        }\r\n\r\n        for (; _State == ios_base::goodbit && 0 < _Pad; --_Pad) { // pad on right\r\n            if (_Traits::eq_int_type(_Traits::eof(), this->rdbuf()->sputc(this->fill()))) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n        }\r\n        _CATCH_IO_END\r\n    }\r\n\r\n    this->width(0);\r\n    _Myios::setstate(_State);\r\n    return *this;\r\n}\r\n#endif // _NATIVE_WCHAR_T_DEFINED\r\n\r\n#if defined(_DLL_CPPLIB)\r\n\r\n#if !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\ntemplate class _CRTIMP2_PURE_IMPORT basic_ostream<char, char_traits<char>>;\r\ntemplate class _CRTIMP2_PURE_IMPORT basic_ostream<wchar_t, char_traits<wchar_t>>;\r\n#endif // !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\n\r\n#ifdef __FORCE_INSTANCE\r\ntemplate class _CRTIMP2_PURE_IMPORT basic_ostream<unsigned short, char_traits<unsigned short>>;\r\n#endif // defined(__FORCE_INSTANCE)\r\n#endif // defined(_DLL_CPPLIB)\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr, const char* _Val) { // insert NTBS\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n    streamsize _Count        = static_cast<streamsize>(_CSTD strlen(_Val));\r\n    streamsize _Pad          = _Ostr.width() <= 0 || _Ostr.width() <= _Count ? 0 : _Ostr.width() - _Count;\r\n    const typename basic_ostream<_Elem, _Traits>::sentry _Ok(_Ostr);\r\n\r\n    if (!_Ok) {\r\n        _State |= ios_base::badbit;\r\n    } else { // state okay, insert characters\r\n        _TRY_IO_BEGIN\r\n        const ctype<_Elem>& _Ctype_fac = _STD use_facet<ctype<_Elem>>(_Ostr.getloc());\r\n        if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left) {\r\n            for (; 0 < _Pad; --_Pad) { // pad on left\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ostr.fill()))) {\r\n                    _State |= ios_base::badbit; // insertion failed, quit\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        for (; _State == ios_base::goodbit && 0 < _Count; --_Count, ++_Val) {\r\n            if (_Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ctype_fac.widen(*_Val)))) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n        }\r\n\r\n        if (_State == ios_base::goodbit) {\r\n            for (; 0 < _Pad; --_Pad) { // pad on right\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ostr.fill()))) {\r\n                    _State |= ios_base::badbit; // insertion failed, quit\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        _Ostr.width(0);\r\n        _CATCH_IO_(ios_base, _Ostr)\r\n    }\r\n\r\n    _Ostr.setstate(_State);\r\n    return _Ostr;\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr, char _Ch) { // insert a character\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n    const typename basic_ostream<_Elem, _Traits>::sentry _Ok(_Ostr);\r\n\r\n    if (_Ok) { // state okay, insert\r\n        const ctype<_Elem>& _Ctype_fac = _STD use_facet<ctype<_Elem>>(_Ostr.getloc());\r\n        streamsize _Pad                = _Ostr.width() <= 1 ? 0 : _Ostr.width() - 1;\r\n\r\n        _TRY_IO_BEGIN\r\n        if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left) {\r\n            for (; _State == ios_base::goodbit && 0 < _Pad; --_Pad) { // pad on left\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ostr.fill()))) {\r\n                    _State |= ios_base::badbit;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (_State == ios_base::goodbit\r\n            && _Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ctype_fac.widen(_Ch)))) {\r\n            _State |= ios_base::badbit;\r\n        }\r\n\r\n        for (; _State == ios_base::goodbit && 0 < _Pad; --_Pad) { // pad on right\r\n            if (_Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ostr.fill()))) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n        }\r\n        _CATCH_IO_(ios_base, _Ostr)\r\n    }\r\n\r\n    _Ostr.width(0);\r\n    _Ostr.setstate(_State);\r\n    return _Ostr;\r\n}\r\n\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>& _Ostr, const char* _Val) {\r\n    // insert NTBS into char stream\r\n    using _Elem = char;\r\n    using _Myos = basic_ostream<_Elem, _Traits>;\r\n\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n    streamsize _Count        = static_cast<streamsize>(_Traits::length(_Val));\r\n    streamsize _Pad          = _Ostr.width() <= 0 || _Ostr.width() <= _Count ? 0 : _Ostr.width() - _Count;\r\n    const typename _Myos::sentry _Ok(_Ostr);\r\n\r\n    if (!_Ok) {\r\n        _State |= ios_base::badbit;\r\n    } else { // state okay, insert\r\n        _TRY_IO_BEGIN\r\n        if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left) {\r\n            for (; 0 < _Pad; --_Pad) { // pad on left\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ostr.fill()))) {\r\n                    _State |= ios_base::badbit; // insertion failed, quit\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (_State == ios_base::goodbit && _Ostr.rdbuf()->sputn(_Val, _Count) != _Count) {\r\n            _State |= ios_base::badbit;\r\n        }\r\n\r\n        if (_State == ios_base::goodbit) {\r\n            for (; 0 < _Pad; --_Pad) { // pad on right\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ostr.fill()))) {\r\n                    _State |= ios_base::badbit; // insertion failed, quit\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        _Ostr.width(0);\r\n        _CATCH_IO_(ios_base, _Ostr)\r\n    }\r\n\r\n    _Ostr.setstate(_State);\r\n    return _Ostr;\r\n}\r\n\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>& _Ostr, char _Ch) {\r\n    // insert a char into char stream\r\n    using _Elem = char;\r\n    using _Myos = basic_ostream<_Elem, _Traits>;\r\n\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n    const typename _Myos::sentry _Ok(_Ostr);\r\n\r\n    if (_Ok) { // state okay, insert\r\n        streamsize _Pad = _Ostr.width() <= 1 ? 0 : _Ostr.width() - 1;\r\n\r\n        _TRY_IO_BEGIN\r\n        if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left) {\r\n            for (; _State == ios_base::goodbit && 0 < _Pad; --_Pad) { // pad on left\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ostr.fill()))) {\r\n                    _State |= ios_base::badbit;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (_State == ios_base::goodbit && _Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ch))) {\r\n            _State |= ios_base::badbit;\r\n        }\r\n\r\n        for (; _State == ios_base::goodbit && 0 < _Pad; --_Pad) { // pad on right\r\n            if (_Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ostr.fill()))) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n        }\r\n        _CATCH_IO_(ios_base, _Ostr)\r\n    }\r\n\r\n    _Ostr.width(0);\r\n    _Ostr.setstate(_State);\r\n    return _Ostr;\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr, const _Elem* _Val) { // insert NTCS\r\n    using _Myos = basic_ostream<_Elem, _Traits>;\r\n\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n    streamsize _Count        = static_cast<streamsize>(_Traits::length(_Val));\r\n    streamsize _Pad          = _Ostr.width() <= 0 || _Ostr.width() <= _Count ? 0 : _Ostr.width() - _Count;\r\n    const typename _Myos::sentry _Ok(_Ostr);\r\n\r\n    if (!_Ok) {\r\n        _State |= ios_base::badbit;\r\n    } else { // state okay, insert\r\n        _TRY_IO_BEGIN\r\n        if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left) {\r\n            for (; 0 < _Pad; --_Pad) { // pad on left\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ostr.fill()))) {\r\n                    _State |= ios_base::badbit; // insertion failed, quit\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (_State == ios_base::goodbit && _Ostr.rdbuf()->sputn(_Val, _Count) != _Count) {\r\n            _State |= ios_base::badbit;\r\n        }\r\n\r\n        if (_State == ios_base::goodbit) {\r\n            for (; 0 < _Pad; --_Pad) { // pad on right\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ostr.fill()))) {\r\n                    _State |= ios_base::badbit; // insertion failed, quit\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        _Ostr.width(0);\r\n        _CATCH_IO_(ios_base, _Ostr)\r\n    }\r\n\r\n    _Ostr.setstate(_State);\r\n    return _Ostr;\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr, _Elem _Ch) { // insert a character\r\n    using _Myos = basic_ostream<_Elem, _Traits>;\r\n\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n    const typename _Myos::sentry _Ok(_Ostr);\r\n\r\n    if (_Ok) { // state okay, insert\r\n        streamsize _Pad = _Ostr.width() <= 1 ? 0 : _Ostr.width() - 1;\r\n\r\n        _TRY_IO_BEGIN\r\n        if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left) {\r\n            for (; _State == ios_base::goodbit && 0 < _Pad; --_Pad) { // pad on left\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ostr.fill()))) {\r\n                    _State |= ios_base::badbit;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (_State == ios_base::goodbit && _Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ch))) {\r\n            _State |= ios_base::badbit;\r\n        }\r\n\r\n        for (; _State == ios_base::goodbit && 0 < _Pad; --_Pad) { // pad on right\r\n            if (_Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ostr.fill()))) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n        }\r\n        _CATCH_IO_(ios_base, _Ostr)\r\n    }\r\n\r\n    _Ostr.width(0);\r\n    _Ostr.setstate(_State);\r\n    return _Ostr;\r\n}\r\n\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>& _Ostr, const signed char* _Val) {\r\n    // insert a signed char NTBS\r\n    return _Ostr << reinterpret_cast<const char*>(_Val);\r\n}\r\n\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>& _Ostr, signed char _Ch) { // insert a signed char\r\n    return _Ostr << static_cast<char>(_Ch);\r\n}\r\n\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>& _Ostr, const unsigned char* _Val) {\r\n    // insert an unsigned char NTBS\r\n    return _Ostr << reinterpret_cast<const char*>(_Val);\r\n}\r\n\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>& _Ostr, unsigned char _Ch) {\r\n    // insert an unsigned char\r\n    return _Ostr << static_cast<char>(_Ch);\r\n}\r\n\r\n#ifdef __cpp_char8_t // These deleted overloads are specified in P1423.\r\n// don't insert a UTF-8 NTBS\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const char8_t*) = delete;\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, const char8_t*) = delete;\r\n\r\n// don't insert a UTF-8 code unit\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, char8_t) = delete;\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, char8_t) = delete;\r\n#endif // defined(__cpp_char8_t)\r\n\r\n#if !_HAS_STREAM_INSERTION_OPERATORS_DELETED_IN_CXX20\r\n#ifdef _NATIVE_WCHAR_T_DEFINED\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, wchar_t) = delete;\r\n\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const wchar_t*) = delete;\r\n#endif // _NATIVE_WCHAR_T_DEFINED\r\n\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, char16_t) = delete;\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, char32_t) = delete;\r\n\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, char16_t) = delete;\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, char32_t) = delete;\r\n\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const char16_t*) = delete;\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const char32_t*) = delete;\r\n\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, const char16_t*) = delete;\r\n_EXPORT_STD template <class _Traits>\r\nbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, const char32_t*) = delete;\r\n#endif // !_HAS_STREAM_INSERTION_OPERATORS_DELETED_IN_CXX20\r\n\r\ntemplate <class _Ostr, class _Ty, class = void>\r\nstruct _Can_stream_out : false_type {};\r\n\r\ntemplate <class _Ostr, class _Ty>\r\nstruct _Can_stream_out<_Ostr, _Ty, void_t<decltype(_STD declval<_Ostr&>() << _STD declval<const _Ty&>())>> : true_type {\r\n};\r\n\r\n_EXPORT_STD template <class _Ostr, class _Ty,\r\n    enable_if_t<conjunction_v<is_convertible<_Ostr*, ios_base*>, _Can_stream_out<_Ostr, _Ty>>, int> = 0>\r\n_Ostr&& operator<<(_Ostr&& _Os, const _Ty& _Val) { // insert to rvalue stream\r\n    _Os << _Val;\r\n    return _STD move(_Os);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& __CLRCALL_OR_CDECL endl(\r\n    basic_ostream<_Elem, _Traits>& _Ostr) { // insert newline and flush stream\r\n    _Ostr.put(_Ostr.widen('\\n'));\r\n    _Ostr.flush();\r\n    return _Ostr;\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& __CLRCALL_OR_CDECL ends(basic_ostream<_Elem, _Traits>& _Ostr) { // insert null character\r\n    _Ostr.put(_Elem());\r\n    return _Ostr;\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& __CLRCALL_OR_CDECL flush(basic_ostream<_Elem, _Traits>& _Ostr) { // flush stream\r\n    _Ostr.flush();\r\n    return _Ostr;\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr, const error_code& _Errcode) {\r\n    // display error code\r\n    return _Ostr << _Errcode.category().name() << ':' << _Errcode.value();\r\n}\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_OSTREAM_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_print.hpp",
    "content": "// __msvc_print.hpp internal header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef __MSVC_PRINT_HPP\r\n#define __MSVC_PRINT_HPP\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX20 // note: <format> includes this header in C++20 mode\r\n#error The contents of <print> are available only with C++23. (Also, you should not include this internal header.)\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n#include <cstdio>\r\n#include <xfilesystem_abi.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\nextern \"C\" {\r\n\r\nenum class __std_unicode_console_handle : intptr_t { _Invalid = -1 };\r\n\r\nstruct __std_unicode_console_retrieval_result {\r\n    __std_unicode_console_handle _Console_handle;\r\n\r\n    // For this, we have a few potential return values:\r\n    //\r\n    //   - __std_win_error::_Success: The operation completed successfully. This is the only value for which the\r\n    //     _Console_handle field has a well-defined value.\r\n    //\r\n    //   - __std_win_error::_File_not_found: The FILE* provided is valid, but it is determined to not be associated\r\n    //     with a unicode console. In this case, printing should fall back to vprint_nonunicode().\r\n    //\r\n    //   - __std_win_error::_Not_supported: The FILE* provided does not actually have an associated output stream. In\r\n    //     this case, the entire print can safely be elided, thanks to the \"as-if\" rule.\r\n    //     (We haven't observed this happening in practice. Console applications with stdout redirected to NUL\r\n    //     and Windows applications both appear to activate the __std_win_error::_File_not_found \"valid, but\r\n    //     not a unicode console\" codepath.)\r\n    //\r\n    //   - __std_win_error::_Invalid_parameter: The FILE* provided is invalid. A std::system_error exception should be\r\n    //     thrown if this value is returned within the FILE* overload of vprint_unicode().\r\n    __std_win_error _Error;\r\n};\r\n\r\n_NODISCARD _Success_(return._Error == __std_win_error::_Success) __std_unicode_console_retrieval_result\r\n    __stdcall __std_get_unicode_console_handle_from_file_stream(_In_ FILE* _Stream) noexcept;\r\n\r\n_NODISCARD _Success_(return == __std_win_error::_Success) __std_win_error\r\n    __stdcall __std_print_to_unicode_console(_In_ __std_unicode_console_handle _Console_handle,\r\n        _In_reads_(_Str_size) const char* _Str, _In_ size_t _Str_size) noexcept;\r\n\r\n_NODISCARD _Success_(return == __std_win_error::_Success) __std_win_error\r\n    __stdcall __std_print_newline_only_to_unicode_console(_In_ __std_unicode_console_handle _Console_handle) noexcept;\r\n\r\n} // extern \"C\"\r\n\r\n_STD_BEGIN\r\n\r\n_NODISCARD consteval bool _Is_ordinary_literal_encoding_utf8() {\r\n    // See: https://learn.microsoft.com/windows/win32/intl/code-page-identifiers\r\n#if defined(_MSVC_EXECUTION_CHARACTER_SET) && _MSVC_EXECUTION_CHARACTER_SET == 65001 // Unicode (UTF-8) == 65001\r\n    return true;\r\n#else\r\n    return false;\r\n#endif\r\n}\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_PRINT_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_ranges_to.hpp",
    "content": "// __msvc_ranges_to.hpp internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// This header provides ranges::to (C++23) and supporting machinery (C++20).\r\n\r\n#ifndef __MSVC_RANGES_TO_HPP\r\n#define __MSVC_RANGES_TO_HPP\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX20\r\n#error The contents of <ranges> are only available with C++20. (Also, you should not include this internal header.)\r\n#endif // !_HAS_CXX20\r\n\r\n#include <tuple>\r\n#include <xutility>\r\n\r\n#if _HAS_CXX23\r\n#include <xmemory>\r\n#endif // _HAS_CXX23\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\nnamespace ranges {\r\n    template <class _Ty>\r\n    constexpr bool _Is_initializer_list = _Is_specialization_v<remove_cvref_t<_Ty>, initializer_list>;\r\n\r\n    _EXPORT_STD template <class _Rng>\r\n    concept viewable_range = range<_Rng>\r\n                          && ((view<remove_cvref_t<_Rng>> && constructible_from<remove_cvref_t<_Rng>, _Rng>)\r\n                              || (!view<remove_cvref_t<_Rng>>\r\n                                  && (is_lvalue_reference_v<_Rng>\r\n                                      || (movable<remove_reference_t<_Rng>> && !_Is_initializer_list<_Rng>) )));\r\n\r\n    namespace _Pipe {\r\n        template <class _Derived>\r\n        struct _Base {};\r\n\r\n        template <class _Ty>\r\n        _Ty* _Derived_from_range_adaptor_closure(_Base<_Ty>&); // not defined\r\n\r\n        template <class _Ty>\r\n        concept _Range_adaptor_closure_object = !range<remove_cvref_t<_Ty>> && requires(remove_cvref_t<_Ty>& __t) {\r\n            { _Pipe::_Derived_from_range_adaptor_closure(__t) } -> same_as<remove_cvref_t<_Ty>*>;\r\n        };\r\n\r\n        template <class _ClosureLeft, class _ClosureRight>\r\n        struct _Pipeline : _Base<_Pipeline<_ClosureLeft, _ClosureRight>> {\r\n            _STL_INTERNAL_STATIC_ASSERT(_Range_adaptor_closure_object<_ClosureLeft>);\r\n            _STL_INTERNAL_STATIC_ASSERT(_Range_adaptor_closure_object<_ClosureRight>);\r\n\r\n            /* [[no_unique_address]] */ _ClosureLeft _Left;\r\n            /* [[no_unique_address]] */ _ClosureRight _Right;\r\n\r\n            template <class _Ty1, class _Ty2>\r\n            constexpr explicit _Pipeline(_Ty1&& _Val1, _Ty2&& _Val2) noexcept(\r\n                is_nothrow_constructible_v<_Ty1, _ClosureLeft> && is_nothrow_constructible_v<_Ty2, _ClosureRight>)\r\n                : _Left(_STD forward<_Ty1>(_Val1)), _Right(_STD forward<_Ty2>(_Val2)) {}\r\n\r\n            void operator()(auto&&) &       = delete;\r\n            void operator()(auto&&) const&  = delete;\r\n            void operator()(auto&&) &&      = delete;\r\n            void operator()(auto&&) const&& = delete;\r\n\r\n            template <class _Ty>\r\n            _NODISCARD constexpr decltype(auto) operator()(_Ty&& _Val) & noexcept(\r\n                noexcept(_Right(_Left(_STD forward<_Ty>(_Val)))))\r\n                requires requires { _Right(_Left(_STD forward<_Ty>(_Val))); }\r\n            {\r\n                return _Right(_Left(_STD forward<_Ty>(_Val)));\r\n            }\r\n\r\n            template <class _Ty>\r\n            _NODISCARD constexpr decltype(auto) operator()(_Ty&& _Val) const& noexcept(\r\n                noexcept(_Right(_Left(_STD forward<_Ty>(_Val)))))\r\n                requires requires { _Right(_Left(_STD forward<_Ty>(_Val))); }\r\n            {\r\n                return _Right(_Left(_STD forward<_Ty>(_Val)));\r\n            }\r\n\r\n            template <class _Ty>\r\n            _NODISCARD constexpr decltype(auto) operator()(_Ty&& _Val) && noexcept(\r\n                noexcept(_STD move(_Right)(_STD move(_Left)(_STD forward<_Ty>(_Val)))))\r\n                requires requires { _STD move(_Right)(_STD move(_Left)(_STD forward<_Ty>(_Val))); }\r\n            {\r\n                return _STD move(_Right)(_STD move(_Left)(_STD forward<_Ty>(_Val)));\r\n            }\r\n\r\n            template <class _Ty>\r\n            _NODISCARD constexpr decltype(auto) operator()(_Ty&& _Val) const&& noexcept(\r\n                noexcept(_STD move(_Right)(_STD move(_Left)(_STD forward<_Ty>(_Val)))))\r\n                requires requires { _STD move(_Right)(_STD move(_Left)(_STD forward<_Ty>(_Val))); }\r\n            {\r\n                return _STD move(_Right)(_STD move(_Left)(_STD forward<_Ty>(_Val)));\r\n            }\r\n        };\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        _Pipeline(_Ty1, _Ty2) -> _Pipeline<_Ty1, _Ty2>;\r\n\r\n        _EXPORT_STD template <class _Left, class _Right>\r\n            requires _Range_adaptor_closure_object<_Left> && _Range_adaptor_closure_object<_Right>\r\n                  && constructible_from<remove_cvref_t<_Left>, _Left>\r\n                  && constructible_from<remove_cvref_t<_Right>, _Right>\r\n        _NODISCARD constexpr auto operator|(_Left&& __l, _Right&& __r)\r\n            noexcept(noexcept(_Pipeline{static_cast<_Left&&>(__l), static_cast<_Right&&>(__r)})) {\r\n            return _Pipeline{static_cast<_Left&&>(__l), static_cast<_Right&&>(__r)};\r\n        }\r\n\r\n        _EXPORT_STD template <class _Left, class _Right>\r\n            requires (_Range_adaptor_closure_object<_Right> && range<_Left>)\r\n        _NODISCARD constexpr decltype(auto) operator|(_Left&& __l, _Right&& __r)\r\n            noexcept(noexcept(_STD forward<_Right>(__r)(_STD forward<_Left>(__l))))\r\n            requires requires { static_cast<_Right &&>(__r)(static_cast<_Left &&>(__l)); }\r\n        {\r\n            return _STD forward<_Right>(__r)(_STD forward<_Left>(__l));\r\n        }\r\n    } // namespace _Pipe\r\n\r\n    template <class _Ty>\r\n    concept _Valid_movable_box_object =\r\n#if _HAS_CXX23\r\n        move_constructible<_Ty>\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n        copy_constructible<_Ty>\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n        && _Destructible_object<_Ty>;\r\n\r\n    // A simplified optional that augments copy_constructible types with full copyability,\r\n    // and move_constructible types with full movability.\r\n    // In C++20, this corresponds to copyable-box.\r\n    template <_Valid_movable_box_object _Ty>\r\n    class _Movable_box {\r\n    public:\r\n        constexpr _Movable_box() noexcept(is_nothrow_default_constructible_v<_Ty>)\r\n            requires default_initializable<_Ty>\r\n            : _Val(), _Engaged{true} {}\r\n\r\n        template <class... _Types>\r\n        constexpr _Movable_box(in_place_t, _Types&&... _Args)\r\n            noexcept(is_nothrow_constructible_v<_Ty, _Types...>) // strengthened\r\n            : _Val(_STD forward<_Types>(_Args)...), _Engaged{true} {}\r\n\r\n        constexpr ~_Movable_box() {\r\n            if (_Engaged) {\r\n                _Val.~_Ty();\r\n            }\r\n        }\r\n\r\n        ~_Movable_box()\r\n            requires is_trivially_destructible_v<_Ty>\r\n        = default;\r\n\r\n        _Movable_box(const _Movable_box&)\r\n            requires copy_constructible<_Ty> && is_trivially_copy_constructible_v<_Ty>\r\n        = default;\r\n\r\n        constexpr _Movable_box(const _Movable_box& _That)\r\n            requires copy_constructible<_Ty>\r\n            : _Engaged{_That._Engaged} {\r\n            if (_That._Engaged) {\r\n                _STD _Construct_in_place(_Val, static_cast<const _Ty&>(_That._Val));\r\n            }\r\n        }\r\n\r\n        _Movable_box(_Movable_box&&)\r\n            requires is_trivially_move_constructible_v<_Ty>\r\n        = default;\r\n\r\n        constexpr _Movable_box(_Movable_box&& _That) : _Engaged{_That._Engaged} {\r\n            if (_That._Engaged) {\r\n                _STD _Construct_in_place(_Val, static_cast<_Ty&&>(_That._Val));\r\n            }\r\n        }\r\n\r\n        _Movable_box& operator=(const _Movable_box&) noexcept\r\n            requires copyable<_Ty> && is_trivially_copy_assignable_v<_Ty>\r\n        = default;\r\n\r\n        constexpr _Movable_box& operator=(const _Movable_box& _That)\r\n            noexcept(is_nothrow_copy_constructible_v<_Ty> && is_nothrow_copy_assignable_v<_Ty>) // strengthened\r\n            requires copyable<_Ty>\r\n        {\r\n            if (_Engaged) {\r\n                if (_That._Engaged) {\r\n                    static_cast<_Ty&>(_Val) = static_cast<const _Ty&>(_That._Val);\r\n                } else {\r\n                    _Val.~_Ty();\r\n                    _Engaged = false;\r\n                }\r\n            } else {\r\n                if (_That._Engaged) {\r\n                    _STD _Construct_in_place(_Val, static_cast<const _Ty&>(_That._Val));\r\n                    _Engaged = true;\r\n                } else {\r\n                    // nothing to do\r\n                }\r\n            }\r\n\r\n            return *this;\r\n        }\r\n\r\n        constexpr _Movable_box& operator=(const _Movable_box& _That) noexcept(is_nothrow_copy_constructible_v<_Ty>)\r\n            requires copy_constructible<_Ty>\r\n        {\r\n            if (_STD addressof(_That) == this) {\r\n                return *this;\r\n            }\r\n\r\n            if (_Engaged) {\r\n                _Val.~_Ty();\r\n                _Engaged = false;\r\n            }\r\n\r\n            if (_That._Engaged) {\r\n                _STD _Construct_in_place(_Val, static_cast<const _Ty&>(_That._Val));\r\n                _Engaged = true;\r\n            }\r\n\r\n            return *this;\r\n        }\r\n\r\n        _Movable_box& operator=(_Movable_box&&) noexcept\r\n            requires movable<_Ty> && is_trivially_move_assignable_v<_Ty>\r\n        = default;\r\n\r\n        constexpr _Movable_box& operator=(_Movable_box&& _That)\r\n            noexcept(is_nothrow_move_constructible_v<_Ty> && is_nothrow_move_assignable_v<_Ty>) // strengthened\r\n            requires movable<_Ty>\r\n        {\r\n            if (_Engaged) {\r\n                if (_That._Engaged) {\r\n                    static_cast<_Ty&>(_Val) = static_cast<_Ty&&>(_That._Val);\r\n                } else {\r\n                    _Val.~_Ty();\r\n                    _Engaged = false;\r\n                }\r\n            } else {\r\n                if (_That._Engaged) {\r\n                    _STD _Construct_in_place(_Val, static_cast<_Ty&&>(_That._Val));\r\n                    _Engaged = true;\r\n                } else {\r\n                    // nothing to do\r\n                }\r\n            }\r\n\r\n            return *this;\r\n        }\r\n\r\n        constexpr _Movable_box& operator=(_Movable_box&& _That) noexcept(is_nothrow_move_constructible_v<_Ty>) {\r\n            if (_STD addressof(_That) == this) {\r\n                return *this;\r\n            }\r\n\r\n            if (_Engaged) {\r\n                _Val.~_Ty();\r\n                _Engaged = false;\r\n            }\r\n\r\n            if (_That._Engaged) {\r\n                _STD _Construct_in_place(_Val, static_cast<_Ty&&>(_That._Val));\r\n                _Engaged = true;\r\n            }\r\n\r\n            return *this;\r\n        }\r\n\r\n        constexpr explicit operator bool() const noexcept {\r\n            return _Engaged;\r\n        }\r\n\r\n        _NODISCARD constexpr _Ty& operator*() noexcept {\r\n            _STL_INTERNAL_CHECK(_Engaged);\r\n            return _Val;\r\n        }\r\n        _NODISCARD constexpr const _Ty& operator*() const noexcept {\r\n            _STL_INTERNAL_CHECK(_Engaged);\r\n            return _Val;\r\n        }\r\n\r\n    private:\r\n        union {\r\n            remove_cv_t<_Ty> _Val;\r\n        };\r\n        bool _Engaged;\r\n    };\r\n\r\n    // [range.move.wrap]\r\n    template <class _Ty>\r\n    concept _Use_simple_movable_box_wrapper =\r\n        (copy_constructible<_Ty>\r\n                // 1. If copy_constructible<T> is true, movable-box<T> should store only a T if either T models\r\n                // copyable, or is_nothrow_move_constructible_v<T> && is_nothrow_copy_constructible_v<T> is true.\r\n                ? copyable<_Ty> || (is_nothrow_move_constructible_v<_Ty> && is_nothrow_copy_constructible_v<_Ty>)\r\n                // 2. Otherwise, movable-box<T> should store only a T if either T models movable or\r\n                // is_nothrow_move_constructible_v<T> is true.\r\n                : movable<_Ty> || is_nothrow_move_constructible_v<_Ty>);\r\n\r\n    template <class _Ty>\r\n    concept _Copy_constructible_for_box = is_copy_constructible_v<_Ty>;\r\n\r\n    template <_Valid_movable_box_object _Ty>\r\n        requires _Use_simple_movable_box_wrapper<_Ty>\r\n    class _Movable_box<_Ty> { // provide the same API more efficiently when we can avoid the disengaged state\r\n    public:\r\n        _Movable_box()\r\n            requires default_initializable<_Ty>\r\n        = default;\r\n\r\n        template <class... _Types>\r\n        constexpr _Movable_box(in_place_t, _Types&&... _Args)\r\n            noexcept(is_nothrow_constructible_v<_Ty, _Types...>) // strengthened\r\n            : _Val(_STD forward<_Types>(_Args)...) {}\r\n\r\n        _Movable_box(const _Movable_box&)\r\n            requires _Copy_constructible_for_box<_Ty> && is_trivially_copy_constructible_v<_Ty>\r\n        = default;\r\n        _Movable_box(_Movable_box&&)\r\n            requires is_trivially_move_constructible_v<_Ty>\r\n        = default;\r\n\r\n        constexpr _Movable_box(const _Movable_box& _That) noexcept(is_nothrow_copy_constructible_v<_Ty>)\r\n            requires _Copy_constructible_for_box<_Ty>\r\n            : _Val(static_cast<const _Ty&>(_That._Val)) {}\r\n\r\n        constexpr _Movable_box(_Movable_box&& _That) noexcept(is_nothrow_move_constructible_v<_Ty>)\r\n            : _Val(static_cast<_Ty&&>(_That._Val)) {}\r\n\r\n        _Movable_box& operator=(const _Movable_box&)\r\n            requires copyable<_Ty> && is_trivially_copy_assignable_v<_Ty>\r\n        = default;\r\n        _Movable_box& operator=(_Movable_box&&)\r\n            requires movable<_Ty> && is_trivially_move_assignable_v<_Ty>\r\n        = default;\r\n\r\n        constexpr _Movable_box& operator=(const _Movable_box& _That)\r\n            noexcept(is_nothrow_copy_assignable_v<_Ty> || !copyable<_Ty>) // strengthened\r\n            requires copy_constructible<_Ty>\r\n        {\r\n            if constexpr (copyable<_Ty>) {\r\n                static_cast<_Ty&>(_Val) = static_cast<const _Ty&>(_That._Val);\r\n            } else {\r\n                if (_STD addressof(_That) != this) {\r\n                    _Val.~_Ty();\r\n                    _STD _Construct_in_place(_Val, static_cast<const _Ty&>(_That._Val));\r\n                }\r\n            }\r\n            return *this;\r\n        }\r\n\r\n        constexpr _Movable_box& operator=(_Movable_box&& _That)\r\n            noexcept(is_nothrow_move_assignable_v<_Ty> || !movable<_Ty>) /* strengthened */ {\r\n            if constexpr (movable<_Ty>) {\r\n                static_cast<_Ty&>(_Val) = static_cast<_Ty&&>(_That._Val);\r\n            } else {\r\n                if (_STD addressof(_That) != this) {\r\n                    _Val.~_Ty();\r\n                    _STD _Construct_in_place(_Val, static_cast<_Ty&&>(_That._Val));\r\n                }\r\n            }\r\n            return *this;\r\n        }\r\n\r\n        constexpr explicit operator bool() const noexcept {\r\n            return true;\r\n        }\r\n\r\n        _NODISCARD constexpr _Ty& operator*() noexcept {\r\n            return _Val;\r\n        }\r\n        _NODISCARD constexpr const _Ty& operator*() const noexcept {\r\n            return _Val;\r\n        }\r\n\r\n    private:\r\n        /* [[no_unique_address]] */ remove_cv_t<_Ty> _Val{};\r\n    };\r\n\r\n    template <class _Fn, class... _Types>\r\n    class _Range_closure : public _Pipe::_Base<_Range_closure<_Fn, _Types...>> {\r\n    public:\r\n        // We assume that _Fn is the type of a customization point object. That means\r\n        // 1. The behavior of operator() is independent of cvref qualifiers, so we can use `invocable<_Fn, ` without\r\n        //    loss of generality, and\r\n        // 2. _Fn must be default-constructible and stateless, so we can create instances \"on-the-fly\" and avoid\r\n        //    storing a copy.\r\n\r\n        _STL_INTERNAL_STATIC_ASSERT((same_as<decay_t<_Types>, _Types> && ...));\r\n        _STL_INTERNAL_STATIC_ASSERT(is_empty_v<_Fn>&& is_default_constructible_v<_Fn>);\r\n\r\n        template <class... _UTypes>\r\n            requires (same_as<decay_t<_UTypes>, _Types> && ...)\r\n        constexpr explicit _Range_closure(_UTypes&&... _Args)\r\n            noexcept(conjunction_v<is_nothrow_constructible<_Types, _UTypes>...>)\r\n            : _Captures(_STD forward<_UTypes>(_Args)...) {}\r\n\r\n        void operator()(auto&&) &       = delete;\r\n        void operator()(auto&&) const&  = delete;\r\n        void operator()(auto&&) &&      = delete;\r\n        void operator()(auto&&) const&& = delete;\r\n\r\n        using _Indices = index_sequence_for<_Types...>;\r\n\r\n        template <class _Ty>\r\n            requires invocable<_Fn, _Ty, _Types&...>\r\n        constexpr decltype(auto) operator()(_Ty&& _Arg) & noexcept(\r\n            noexcept(_Call(*this, _STD forward<_Ty>(_Arg), _Indices{}))) {\r\n            return _Call(*this, _STD forward<_Ty>(_Arg), _Indices{});\r\n        }\r\n\r\n        template <class _Ty>\r\n            requires invocable<_Fn, _Ty, const _Types&...>\r\n        constexpr decltype(auto) operator()(_Ty&& _Arg) const& noexcept(\r\n            noexcept(_Call(*this, _STD forward<_Ty>(_Arg), _Indices{}))) {\r\n            return _Call(*this, _STD forward<_Ty>(_Arg), _Indices{});\r\n        }\r\n\r\n        template <class _Ty>\r\n            requires invocable<_Fn, _Ty, _Types...>\r\n        constexpr decltype(auto) operator()(_Ty&& _Arg) && noexcept(\r\n            noexcept(_Call(_STD move(*this), _STD forward<_Ty>(_Arg), _Indices{}))) {\r\n            return _Call(_STD move(*this), _STD forward<_Ty>(_Arg), _Indices{});\r\n        }\r\n\r\n        template <class _Ty>\r\n            requires invocable<_Fn, _Ty, const _Types...>\r\n        constexpr decltype(auto) operator()(_Ty&& _Arg) const&& noexcept(\r\n            noexcept(_Call(_STD move(*this), _STD forward<_Ty>(_Arg), _Indices{}))) {\r\n            return _Call(_STD move(*this), _STD forward<_Ty>(_Arg), _Indices{});\r\n        }\r\n\r\n    private:\r\n        template <class _SelfTy, class _Ty, size_t... _Idx>\r\n        static constexpr decltype(auto) _Call(_SelfTy&& _Self, _Ty&& _Arg, index_sequence<_Idx...>) noexcept(\r\n            noexcept(_Fn{}(_STD forward<_Ty>(_Arg), _STD get<_Idx>(_STD forward<_SelfTy>(_Self)._Captures)...))) {\r\n            _STL_INTERNAL_STATIC_ASSERT(same_as<index_sequence<_Idx...>, _Indices>);\r\n            return _Fn{}(_STD forward<_Ty>(_Arg), _STD get<_Idx>(_STD forward<_SelfTy>(_Self)._Captures)...);\r\n        }\r\n\r\n        tuple<_Types...> _Captures;\r\n    };\r\n\r\n    _EXPORT_STD template <range _Rng>\r\n        requires is_object_v<_Rng>\r\n    class ref_view : public view_interface<ref_view<_Rng>> {\r\n    private:\r\n        _Rng* _Range;\r\n\r\n        static void _Rvalue_poison(_Rng&);\r\n        static void _Rvalue_poison(_Rng&&) = delete;\r\n\r\n    public:\r\n        template <_Different_from<ref_view> _OtherRng>\r\n        constexpr ref_view(_OtherRng&& _Other)\r\n            noexcept(noexcept(static_cast<_Rng&>(_STD forward<_OtherRng>(_Other)))) // strengthened\r\n            requires convertible_to<_OtherRng, _Rng&> && requires { _Rvalue_poison(static_cast<_OtherRng &&>(_Other)); }\r\n            : _Range{_STD addressof(static_cast<_Rng&>(_STD forward<_OtherRng>(_Other)))} {}\r\n\r\n        _NODISCARD constexpr _Rng& base() const noexcept /* strengthened */ {\r\n            return *_Range;\r\n        }\r\n\r\n        _NODISCARD constexpr iterator_t<_Rng> begin() const\r\n            noexcept(noexcept(_RANGES begin(*_Range))) /* strengthened */ {\r\n            return _RANGES begin(*_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr sentinel_t<_Rng> end() const noexcept(noexcept(_RANGES end(*_Range))) /* strengthened */ {\r\n            return _RANGES end(*_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr bool empty() const noexcept(noexcept(_RANGES empty(*_Range))) /* strengthened */\r\n            requires _Can_empty<_Rng>\r\n        {\r\n            return _RANGES empty(*_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_RANGES size(*_Range))) /* strengthened */\r\n            requires sized_range<_Rng>\r\n        {\r\n            return _RANGES size(*_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto data() const noexcept(noexcept(_RANGES data(*_Range))) /* strengthened */\r\n            requires contiguous_range<_Rng>\r\n        {\r\n            return _RANGES data(*_Range);\r\n        }\r\n    };\r\n\r\n    template <class _Rng>\r\n    ref_view(_Rng&) -> ref_view<_Rng>;\r\n\r\n    template <class _Rng>\r\n    constexpr bool enable_borrowed_range<ref_view<_Rng>> = true;\r\n\r\n    _EXPORT_STD template <range _Rng>\r\n        requires (movable<_Rng> && !_Is_initializer_list<_Rng>)\r\n    class owning_view : public view_interface<owning_view<_Rng>> {\r\n    private:\r\n        _Rng _Range{};\r\n\r\n    public:\r\n        owning_view()\r\n            requires default_initializable<_Rng>\r\n        = default;\r\n\r\n        constexpr owning_view(_Rng&& _Range_) noexcept(is_nothrow_move_constructible_v<_Rng>) // strengthened\r\n            : _Range(_STD move(_Range_)) {}\r\n\r\n        owning_view(owning_view&&)            = default;\r\n        owning_view& operator=(owning_view&&) = default;\r\n\r\n        _NODISCARD constexpr _Rng& base() & noexcept {\r\n            return _Range;\r\n        }\r\n        _NODISCARD constexpr const _Rng& base() const& noexcept {\r\n            return _Range;\r\n        }\r\n        _NODISCARD constexpr _Rng&& base() && noexcept {\r\n            return _STD move(_Range);\r\n        }\r\n        _NODISCARD constexpr const _Rng&& base() const&& noexcept {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr iterator_t<_Rng> begin() noexcept(noexcept(_RANGES begin(_Range))) /* strengthened */ {\r\n            return _RANGES begin(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr sentinel_t<_Rng> end() noexcept(noexcept(_RANGES end(_Range))) /* strengthened */ {\r\n            return _RANGES end(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const noexcept(noexcept(_RANGES begin(_Range))) /* strengthened */\r\n            requires range<const _Rng>\r\n        {\r\n            return _RANGES begin(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const noexcept(noexcept(_RANGES end(_Range))) /* strengthened */\r\n            requires range<const _Rng>\r\n        {\r\n            return _RANGES end(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr bool empty() noexcept(noexcept(_RANGES empty(_Range))) /* strengthened */\r\n            requires _Can_empty<_Rng>\r\n        {\r\n            return _RANGES empty(_Range);\r\n        }\r\n        _NODISCARD constexpr bool empty() const noexcept(noexcept(_RANGES empty(_Range))) /* strengthened */\r\n            requires _Can_empty<const _Rng>\r\n        {\r\n            return _RANGES empty(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() noexcept(noexcept(_RANGES size(_Range))) /* strengthened */\r\n            requires sized_range<_Rng>\r\n        {\r\n            return _RANGES size(_Range);\r\n        }\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_RANGES size(_Range))) /* strengthened */\r\n            requires sized_range<const _Rng>\r\n        {\r\n            return _RANGES size(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto data() noexcept(noexcept(_RANGES data(_Range))) /* strengthened */\r\n            requires contiguous_range<_Rng>\r\n        {\r\n            return _RANGES data(_Range);\r\n        }\r\n        _NODISCARD constexpr auto data() const noexcept(noexcept(_RANGES data(_Range))) /* strengthened */\r\n            requires contiguous_range<const _Rng>\r\n        {\r\n            return _RANGES data(_Range);\r\n        }\r\n    };\r\n\r\n    template <class _Rng>\r\n    constexpr bool enable_borrowed_range<owning_view<_Rng>> = enable_borrowed_range<_Rng>;\r\n\r\n    namespace views {\r\n        template <class _Rng>\r\n        concept _Can_ref_view = requires(_Rng&& __r) { ref_view{static_cast<_Rng &&>(__r)}; };\r\n\r\n        template <class _Rng>\r\n        concept _Ownable = requires(_Rng&& __r) { owning_view{static_cast<_Rng &&>(__r)}; };\r\n\r\n        class _All_fn : public _Pipe::_Base<_All_fn> {\r\n        private:\r\n            enum class _St { _None, _View, _Ref, _Own };\r\n\r\n            template <class _Rng>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                if constexpr (view<remove_cvref_t<_Rng>>) {\r\n                    if constexpr (convertible_to<_Rng, remove_cvref_t<_Rng>>) {\r\n                        return {_St::_View, is_nothrow_convertible_v<_Rng, remove_cvref_t<_Rng>>};\r\n                    }\r\n                } else if constexpr (_Can_ref_view<_Rng>) {\r\n                    return {_St::_Ref, noexcept(ref_view{_STD declval<_Rng>()})};\r\n                } else if constexpr (_Ownable<_Rng>) {\r\n                    return {_St::_Own, noexcept(owning_view{_STD declval<_Rng>()})};\r\n                }\r\n\r\n                return {_St::_None};\r\n            }\r\n\r\n            template <class _Rng>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Rng>();\r\n\r\n        public:\r\n            template <viewable_range _Rng>\r\n                requires (_Choice<_Rng>._Strategy != _St::_None)\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range) noexcept(_Choice<_Rng>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Rng>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_View) {\r\n                    return _STD forward<_Rng>(_Range);\r\n                } else if constexpr (_Strat == _St::_Ref) {\r\n                    return ref_view{_STD forward<_Rng>(_Range)};\r\n                } else if constexpr (_Strat == _St::_Own) {\r\n                    return owning_view{_STD forward<_Rng>(_Range)};\r\n                } else {\r\n                    static_assert(false); // unexpected strategy\r\n                }\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _All_fn all;\r\n\r\n        _EXPORT_STD template <viewable_range _Rng>\r\n        using all_t = decltype(all(_STD declval<_Rng>()));\r\n    } // namespace views\r\n\r\n    _EXPORT_STD template <input_range _Vw, _Valid_movable_box_object _Fn>\r\n        requires view<_Vw> && regular_invocable<_Fn&, range_reference_t<_Vw>>\r\n              && _Can_reference<invoke_result_t<_Fn&, range_reference_t<_Vw>>>\r\n    class transform_view : public view_interface<transform_view<_Vw, _Fn>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n        /* [[no_unique_address]] */ _Movable_box<_Fn> _Fun{};\r\n\r\n        template <bool _Const>\r\n        struct _Category_base {};\r\n\r\n        template <bool _Const>\r\n            requires forward_range<_Maybe_const<_Const, _Vw>>\r\n        struct _Category_base<_Const> {\r\n            using _Base = _Maybe_const<_Const, _Vw>;\r\n            using iterator_category =\r\n                conditional_t<is_reference_v<invoke_result_t<_Maybe_const<_Const, _Fn>&, range_reference_t<_Base>>>,\r\n                    conditional_t<derived_from<_Iter_cat_t<iterator_t<_Base>>, contiguous_iterator_tag>,\r\n                        random_access_iterator_tag, _Iter_cat_t<iterator_t<_Base>>>,\r\n                    input_iterator_tag>;\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Iterator : public _Category_base<_Const> {\r\n        private:\r\n            friend transform_view;\r\n\r\n            using _Parent_t = _Maybe_const<_Const, transform_view>;\r\n            using _Base     = _Maybe_const<_Const, _Vw>;\r\n\r\n            iterator_t<_Base> _Current{};\r\n            _Parent_t* _Parent{};\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            constexpr void _Check_dereference() const noexcept {\r\n                _STL_VERIFY(_Parent != nullptr, \"cannot dereference value-initialized transform_view iterator\");\r\n                _STL_VERIFY(_Current != _RANGES end(_Parent->_Range), \"cannot dereference end transform_view iterator\");\r\n            }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            constexpr void _Same_range(const _Iterator& _Right) const noexcept {\r\n                _STL_VERIFY(_Parent == _Right._Parent, \"cannot compare incompatible transform_view iterators\");\r\n            }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        public:\r\n            using iterator_concept = conditional_t<random_access_range<_Base>, random_access_iterator_tag,\r\n                conditional_t<bidirectional_range<_Base>, bidirectional_iterator_tag,\r\n                    conditional_t<forward_range<_Base>, forward_iterator_tag, input_iterator_tag>>>;\r\n            using value_type = remove_cvref_t<invoke_result_t<_Maybe_const<_Const, _Fn>&, range_reference_t<_Base>>>;\r\n            using difference_type = range_difference_t<_Base>;\r\n\r\n            _Iterator()\r\n                requires default_initializable<iterator_t<_Base>>\r\n            = default;\r\n\r\n            constexpr _Iterator(_Parent_t& _Parent_, iterator_t<_Base> _Current_)\r\n                noexcept(is_nothrow_move_constructible_v<iterator_t<_Base>>) // strengthened\r\n                : _Current{_STD move(_Current_)}, _Parent{_STD addressof(_Parent_)} {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STD _Adl_verify_range(_Current, _RANGES end(_Parent_._Range));\r\n                if constexpr (forward_range<_Base>) {\r\n                    _STD _Adl_verify_range(_RANGES begin(_Parent_._Range), _Current);\r\n                }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n            }\r\n\r\n            constexpr _Iterator(_Iterator<!_Const> _It)\r\n                noexcept(is_nothrow_constructible_v<iterator_t<_Base>, iterator_t<_Vw>>) // strengthened\r\n                requires _Const && convertible_to<iterator_t<_Vw>, iterator_t<_Base>>\r\n                : _Current(_STD move(_It._Current)), _Parent(_It._Parent) {}\r\n\r\n            _NODISCARD constexpr const iterator_t<_Base>& base() const& noexcept {\r\n                return _Current;\r\n            }\r\n            _NODISCARD constexpr iterator_t<_Base> base() && noexcept(\r\n                is_nothrow_move_constructible_v<iterator_t<_Base>>) /* strengthened */ {\r\n                return _STD move(_Current);\r\n            }\r\n\r\n            _NODISCARD constexpr decltype(auto) operator*() const\r\n                noexcept(noexcept(_STD invoke(*_Parent->_Fun, *_Current))) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Check_dereference();\r\n                _STL_VERIFY(\r\n                    _Parent->_Fun, \"Cannot dereference iterator into transform_view with no transformation function\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return _STD invoke(*_Parent->_Fun, *_Current);\r\n            }\r\n\r\n            constexpr _Iterator& operator++() noexcept(noexcept(++_Current)) /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Parent != nullptr, \"Cannot increment value-initialized transform_view iterator\");\r\n                _STL_VERIFY(\r\n                    _Current != _RANGES end(_Parent->_Range), \"Cannot increment transform_view iterator past end\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                ++_Current;\r\n                return *this;\r\n            }\r\n\r\n            constexpr decltype(auto) operator++(int) noexcept(\r\n                noexcept(++_Current)\r\n                && (!forward_range<_Base> || is_nothrow_copy_constructible_v<iterator_t<_Base>>) ) /* strengthened */ {\r\n                if constexpr (forward_range<_Base>) {\r\n                    auto _Tmp = *this;\r\n                    ++*this;\r\n                    return _Tmp;\r\n                } else {\r\n                    ++*this;\r\n                }\r\n            }\r\n\r\n            constexpr _Iterator& operator--() noexcept(noexcept(--_Current)) /* strengthened */\r\n                requires bidirectional_range<_Base>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Parent != nullptr, \"Cannot decrement value-initialized transform_view iterator\");\r\n                if constexpr (forward_range<_Vw>) {\r\n                    _STL_VERIFY(_Current != _RANGES begin(_Parent->_Range),\r\n                        \"Cannot decrement transform_view iterator before begin\");\r\n                }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                --_Current;\r\n                return *this;\r\n            }\r\n            constexpr _Iterator operator--(int)\r\n                noexcept(noexcept(--_Current) && is_nothrow_copy_constructible_v<iterator_t<_Base>>) /* strengthened */\r\n                requires bidirectional_range<_Base>\r\n            {\r\n                auto _Tmp = *this;\r\n                --*this;\r\n                return _Tmp;\r\n            }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            constexpr void _Verify_offset(const difference_type _Off) const noexcept\r\n                requires random_access_range<_Base>\r\n            {\r\n                _STL_VERIFY(_Off == 0 || _Parent, \"cannot seek value-initialized transform_view iterator\");\r\n                if constexpr (_Offset_verifiable_v<iterator_t<_Base>>) {\r\n                    _Current._Verify_offset(_Off);\r\n                }\r\n            }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n            constexpr _Iterator& operator+=(const difference_type _Off)\r\n                noexcept(noexcept(_Current += _Off)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Verify_offset(_Off);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _Current += _Off;\r\n                return *this;\r\n            }\r\n            constexpr _Iterator& operator-=(const difference_type _Off)\r\n                noexcept(noexcept(_Current -= _Off)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Off != _Min_possible_v<difference_type>, \"integer overflow\");\r\n                _Verify_offset(-_Off);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _Current -= _Off;\r\n                return *this;\r\n            }\r\n\r\n            _NODISCARD constexpr decltype(auto) operator[](const difference_type _Idx) const\r\n                noexcept(noexcept(_STD invoke(*_Parent->_Fun, _Current[_Idx]))) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Verify_offset(_Idx);\r\n                _STL_VERIFY(\r\n                    _Parent->_Fun, \"Cannot dereference iterator into transform_view with no transformation function\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return _STD invoke(*_Parent->_Fun, _Current[_Idx]);\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current == _Right._Current)) /* strengthened */\r\n                requires equality_comparable<iterator_t<_Base>>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Left._Same_range(_Right);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return _Left._Current == _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator<(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current < _Right._Current)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Left._Same_range(_Right);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return _Left._Current < _Right._Current;\r\n            }\r\n            _NODISCARD friend constexpr bool operator>(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current < _Right._Current)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Right < _Left;\r\n            }\r\n            _NODISCARD friend constexpr bool operator<=(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current < _Right._Current)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return !(_Right < _Left);\r\n            }\r\n            _NODISCARD friend constexpr bool operator>=(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current < _Right._Current)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return !(_Left < _Right);\r\n            }\r\n            _NODISCARD friend constexpr auto operator<=>(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current <=> _Right._Current)) /* strengthened */\r\n                requires random_access_range<_Base> && three_way_comparable<iterator_t<_Base>>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Left._Same_range(_Right);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return _Left._Current <=> _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(_Iterator _It, const difference_type _Off)\r\n                noexcept(noexcept(_It._Current += _Off)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _It._Verify_offset(_Off);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _It._Current += _Off;\r\n                return _It;\r\n            }\r\n            _NODISCARD friend constexpr _Iterator operator+(const difference_type _Off, _Iterator _It)\r\n                noexcept(noexcept(_It._Current += _Off)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _It._Verify_offset(_Off);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _It._Current += _Off;\r\n                return _It;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator-(_Iterator _It, const difference_type _Off)\r\n                noexcept(noexcept(_It._Current -= _Off)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Off != _Min_possible_v<difference_type>, \"integer overflow\");\r\n                _It._Verify_offset(-_Off);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _It._Current -= _Off;\r\n                return _It;\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current - _Right._Current)) /* strengthened */\r\n                requires sized_sentinel_for<iterator_t<_Base>, iterator_t<_Base>>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Left._Same_range(_Right);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return _Left._Current - _Right._Current;\r\n            }\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Sentinel {\r\n        private:\r\n            friend transform_view;\r\n\r\n            using _Parent_t = _Maybe_const<_Const, transform_view>;\r\n            using _Base     = _Maybe_const<_Const, _Vw>;\r\n            template <bool _OtherConst>\r\n            using _Maybe_const_iter = iterator_t<_Maybe_const<_OtherConst, _Vw>>;\r\n\r\n            sentinel_t<_Base> _Last{};\r\n\r\n            template <bool _OtherConst>\r\n            _NODISCARD static constexpr const _Maybe_const_iter<_OtherConst>& _Get_current(\r\n                const _Iterator<_OtherConst>& _It) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(\r\n                    _It._Parent != nullptr, \"cannot compare transform_view sentinel with value-initialized iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return _It._Current;\r\n            }\r\n\r\n        public:\r\n            _Sentinel() = default;\r\n            constexpr explicit _Sentinel(sentinel_t<_Base> _Last_)\r\n                noexcept(is_nothrow_move_constructible_v<sentinel_t<_Base>>) // strengthened\r\n                : _Last(_STD move(_Last_)) {}\r\n\r\n            constexpr _Sentinel(_Sentinel<!_Const> _Se)\r\n                noexcept(is_nothrow_constructible_v<sentinel_t<_Base>, sentinel_t<_Vw>>) // strengthened\r\n                requires _Const && convertible_to<sentinel_t<_Vw>, sentinel_t<_Base>>\r\n                : _Last(_STD move(_Se._Last)) {}\r\n\r\n            _NODISCARD constexpr sentinel_t<_Base> base() const\r\n                noexcept(is_nothrow_copy_constructible_v<sentinel_t<_Base>>) /* strengthened */ {\r\n                return _Last;\r\n            }\r\n\r\n            template <bool _OtherConst>\r\n                requires sentinel_for<sentinel_t<_Base>, _Maybe_const_iter<_OtherConst>>\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator<_OtherConst>& _Left, const _Sentinel& _Right)\r\n                noexcept(noexcept(_Get_current(_Left) == _Right._Last)) /* strengthened */ {\r\n                return _Get_current(_Left) == _Right._Last;\r\n            }\r\n\r\n            template <bool _OtherConst>\r\n                requires sized_sentinel_for<sentinel_t<_Base>, _Maybe_const_iter<_OtherConst>>\r\n            _NODISCARD friend constexpr range_difference_t<_Maybe_const<_OtherConst, _Vw>> operator-(\r\n                const _Iterator<_OtherConst>& _Left, const _Sentinel& _Right)\r\n                noexcept(noexcept(_Get_current(_Left) - _Right._Last)) /* strengthened */ {\r\n                return _Get_current(_Left) - _Right._Last;\r\n            }\r\n\r\n            template <bool _OtherConst>\r\n                requires sized_sentinel_for<sentinel_t<_Base>, _Maybe_const_iter<_OtherConst>>\r\n            _NODISCARD friend constexpr range_difference_t<_Maybe_const<_OtherConst, _Vw>> operator-(\r\n                const _Sentinel& _Left, const _Iterator<_OtherConst>& _Right)\r\n                noexcept(noexcept(_Left._Last - _Get_current(_Right))) /* strengthened */ {\r\n                return _Left._Last - _Get_current(_Right);\r\n            }\r\n        };\r\n\r\n    public:\r\n        transform_view()\r\n            requires default_initializable<_Vw> && default_initializable<_Fn>\r\n        = default;\r\n\r\n        constexpr explicit transform_view(_Vw _Range_, _Fn _Fun_)\r\n            noexcept(is_nothrow_move_constructible_v<_Vw> && is_nothrow_move_constructible_v<_Fn>) // strengthened\r\n            : _Range(_STD move(_Range_)), _Fun{in_place, _STD move(_Fun_)} {}\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) /* strengthened */\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr _Iterator<false> begin() noexcept(\r\n            noexcept(_RANGES begin(_Range)) && is_nothrow_move_constructible_v<iterator_t<_Vw>>) /* strengthened */ {\r\n            return _Iterator<false>{*this, _RANGES begin(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr _Iterator<true> begin() const noexcept(\r\n            noexcept(_RANGES begin(_Range)) && is_nothrow_move_constructible_v<iterator_t<_Vw>>) /* strengthened */\r\n            requires range<const _Vw> && regular_invocable<const _Fn&, range_reference_t<const _Vw>>\r\n        {\r\n            return _Iterator<true>{*this, _RANGES begin(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end()\r\n            noexcept(noexcept(_RANGES end(_Range))\r\n                     && is_nothrow_move_constructible_v<decltype(_RANGES end(_Range))>) /* strengthened */ {\r\n            if constexpr (common_range<_Vw>) {\r\n                return _Iterator<false>{*this, _RANGES end(_Range)};\r\n            } else {\r\n                return _Sentinel<false>{_RANGES end(_Range)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const\r\n            noexcept(noexcept(_RANGES end(_Range))\r\n                     && is_nothrow_move_constructible_v<decltype(_RANGES end(_Range))>) /* strengthened */\r\n            requires range<const _Vw> && regular_invocable<const _Fn&, range_reference_t<const _Vw>>\r\n        {\r\n            if constexpr (common_range<_Vw>) {\r\n                return _Iterator<true>{*this, _RANGES end(_Range)};\r\n            } else {\r\n                return _Sentinel<true>{_RANGES end(_Range)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() noexcept(noexcept(_RANGES size(_Range))) /* strengthened */\r\n            requires sized_range<_Vw>\r\n        {\r\n            return _RANGES size(_Range);\r\n        }\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_RANGES size(_Range))) /* strengthened */\r\n            requires sized_range<const _Vw>\r\n        {\r\n            return _RANGES size(_Range);\r\n        }\r\n    };\r\n\r\n    template <class _Rng, class _Fn>\r\n    transform_view(_Rng&&, _Fn) -> transform_view<views::all_t<_Rng>, _Fn>;\r\n\r\n    namespace views {\r\n        struct _Transform_fn {\r\n            template <viewable_range _Rng, class _Fn>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Fn _Fun)\r\n                noexcept(noexcept(transform_view(_STD forward<_Rng>(_Range), _STD move(_Fun))))\r\n                requires requires { transform_view(static_cast<_Rng &&>(_Range), _STD move(_Fun)); }\r\n            {\r\n                return transform_view(_STD forward<_Rng>(_Range), _STD move(_Fun));\r\n            }\r\n\r\n            template <class _Fn>\r\n                requires constructible_from<decay_t<_Fn>, _Fn>\r\n            _NODISCARD static constexpr auto operator()(_Fn&& _Fun)\r\n                noexcept(is_nothrow_constructible_v<decay_t<_Fn>, _Fn>) {\r\n                return _Range_closure<_Transform_fn, decay_t<_Fn>>{_STD forward<_Fn>(_Fun)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Transform_fn transform;\r\n    } // namespace views\r\n\r\n#if _HAS_CXX23\r\n    template <class _Range, class _Container>\r\n    concept _Sized_and_reservable = sized_range<_Range> && sized_range<_Container>\r\n                                 && requires(_Container& _Cont, const range_size_t<_Container> _Count) {\r\n                                        _Cont.reserve(_Count);\r\n                                        { _Cont.capacity() } -> same_as<range_size_t<_Container>>;\r\n                                        { _Cont.max_size() } -> same_as<range_size_t<_Container>>;\r\n                                    };\r\n\r\n    template <class _Rng, class _Container>\r\n    concept _Ref_converts =\r\n        !input_range<_Container> || convertible_to<range_reference_t<_Rng>, range_value_t<_Container>>;\r\n\r\n    template <class _Rng, class _Container, class... _Types>\r\n    concept _Common_constructible =\r\n        common_range<_Rng> //\r\n        && requires { typename iterator_traits<iterator_t<_Rng>>::iterator_category; }\r\n        && derived_from<typename iterator_traits<iterator_t<_Rng>>::iterator_category, input_iterator_tag>\r\n        && constructible_from<_Container, iterator_t<_Rng>, iterator_t<_Rng>, _Types...>;\r\n\r\n    template <class _Container, class _Reference>\r\n    concept _Can_emplace_back = requires(_Container& _Cont) { _Cont.emplace_back(_STD declval<_Reference>()); };\r\n\r\n    template <class _Container, class _Reference>\r\n    concept _Can_push_back = requires(_Container& _Cont) { _Cont.push_back(_STD declval<_Reference>()); };\r\n\r\n    template <class _Container, class _Reference>\r\n    concept _Can_emplace_end = requires(_Container& _Cont) { _Cont.emplace(_Cont.end(), _STD declval<_Reference>()); };\r\n\r\n    template <class _Container, class _Reference>\r\n    concept _Can_insert_end = requires(_Container& _Cont) { _Cont.insert(_Cont.end(), _STD declval<_Reference>()); };\r\n\r\n    template <class _Rng, class _Container, class... _Types>\r\n    concept _Constructible_appendable = constructible_from<_Container, _Types...>\r\n                                     && (_Can_emplace_back<_Container, range_reference_t<_Rng>>\r\n                                         || _Can_push_back<_Container, range_reference_t<_Rng>>\r\n                                         || _Can_emplace_end<_Container, range_reference_t<_Rng>>\r\n                                         || _Can_insert_end<_Container, range_reference_t<_Rng>>);\r\n\r\n    _EXPORT_STD template <class _Container, input_range _Rng, class... _Types>\r\n        requires (!view<_Container>)\r\n    _NODISCARD constexpr _Container to(_Rng&& _Range, _Types&&... _Args) {\r\n        static_assert(!is_const_v<_Container>, \"C must not be const. (N5014 [range.utility.conv.to]/1)\");\r\n        static_assert(!is_volatile_v<_Container>, \"C must not be volatile. (N5014 [range.utility.conv.to]/1)\");\r\n        static_assert(is_class_v<_Container> || is_union_v<_Container>,\r\n            \"C must be a class type. (N5014 [range.utility.conv.to]/1)\");\r\n        if constexpr (_Ref_converts<_Rng, _Container>) {\r\n            if constexpr (constructible_from<_Container, _Rng, _Types...>) {\r\n                return _Container(_STD forward<_Rng>(_Range), _STD forward<_Types>(_Args)...);\r\n            } else if constexpr (constructible_from<_Container, const from_range_t&, _Rng, _Types...>) { // per LWG-3845\r\n                return _Container(from_range, _STD forward<_Rng>(_Range), _STD forward<_Types>(_Args)...);\r\n            } else if constexpr (_Common_constructible<_Rng, _Container, _Types...>) {\r\n                return _Container(_RANGES begin(_Range), _RANGES end(_Range), _STD forward<_Types>(_Args)...);\r\n            } else if constexpr (_Constructible_appendable<_Rng, _Container, _Types...>) {\r\n                _Container _Cont(_STD forward<_Types>(_Args)...);\r\n                if constexpr (_Sized_and_reservable<_Rng, _Container>) {\r\n                    _Cont.reserve(static_cast<range_size_t<_Container>>(_RANGES size(_Range)));\r\n                }\r\n\r\n                auto _Iter       = _RANGES begin(_Range);\r\n                const auto _Sent = _RANGES end(_Range);\r\n                for (; _Iter != _Sent; ++_Iter) {\r\n                    auto&& _Elem  = *_Iter;\r\n                    using _ElemTy = decltype(_Elem);\r\n                    if constexpr (_Can_emplace_back<_Container, _ElemTy>) {\r\n                        _Cont.emplace_back(_STD forward<_ElemTy>(_Elem));\r\n                    } else if constexpr (_Can_push_back<_Container, _ElemTy>) {\r\n                        _Cont.push_back(_STD forward<_ElemTy>(_Elem));\r\n                    } else if constexpr (_Can_emplace_end<_Container, _ElemTy>) {\r\n                        _Cont.emplace(_Cont.end(), _STD forward<_ElemTy>(_Elem));\r\n                    } else {\r\n                        _STL_INTERNAL_STATIC_ASSERT(_Can_insert_end<_Container, _ElemTy>);\r\n                        _Cont.insert(_Cont.end(), _STD forward<_ElemTy>(_Elem));\r\n                    }\r\n                }\r\n                return _Cont;\r\n            } else {\r\n                static_assert(false, \"ranges::to requires the result to be constructible from the source range, either \"\r\n                                     \"by using a suitable constructor, or by inserting each element of the range into \"\r\n                                     \"the default-constructed object. (N5014 [range.utility.conv.to]/2.1.5)\");\r\n            }\r\n        } else if constexpr (input_range<range_reference_t<_Rng>>) {\r\n            const auto _Xform = [](auto&& _Elem) static {\r\n                return _RANGES to<range_value_t<_Container>>(_STD forward<decltype(_Elem)>(_Elem));\r\n            };\r\n            return _RANGES to<_Container>(views::transform(ref_view{_Range}, _Xform), _STD forward<_Types>(_Args)...);\r\n        } else {\r\n            static_assert(false,\r\n                \"ranges::to requires the elements of the source range to be either implicitly convertible to the \"\r\n                \"elements of the destination container, or be ranges themselves for ranges::to to be applied \"\r\n                \"recursively. (N5014 [range.utility.conv.to]/2.3)\");\r\n        }\r\n    }\r\n\r\n    template <class _Container>\r\n    struct _To_class_fn {\r\n        _STL_INTERNAL_STATIC_ASSERT(!is_const_v<_Container>);\r\n        _STL_INTERNAL_STATIC_ASSERT(!is_volatile_v<_Container>);\r\n        _STL_INTERNAL_STATIC_ASSERT(is_class_v<_Container> || is_union_v<_Container>);\r\n        _STL_INTERNAL_STATIC_ASSERT(!view<_Container>);\r\n\r\n        template <input_range _Rng, class... _Types>\r\n        _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Types&&... _Args)\r\n            requires requires { _RANGES to<_Container>(_STD forward<_Rng>(_Range), _STD forward<_Types>(_Args)...); }\r\n        {\r\n            return _RANGES to<_Container>(_STD forward<_Rng>(_Range), _STD forward<_Types>(_Args)...);\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD template <class _Container, class... _Types>\r\n        requires (!view<_Container>)\r\n    _NODISCARD constexpr auto to(_Types&&... _Args) {\r\n        static_assert(!is_const_v<_Container>, \"C must not be const. (N5014 [range.utility.conv.adaptors]/1)\");\r\n        static_assert(!is_volatile_v<_Container>, \"C must not be volatile. (N5014 [range.utility.conv.adaptors]/1)\");\r\n        static_assert(is_class_v<_Container> || is_union_v<_Container>,\r\n            \"C must be a class type. (N5014 [range.utility.conv.adaptors]/1)\");\r\n        return _Range_closure<_To_class_fn<_Container>, decay_t<_Types>...>{_STD forward<_Types>(_Args)...};\r\n    }\r\n\r\n    template <input_range _Rng>\r\n    struct _Phony_input_iterator {\r\n        using value_type      = range_value_t<_Rng>;\r\n        using difference_type = ptrdiff_t;\r\n\r\n        // These member functions are never defined:\r\n        range_reference_t<_Rng> operator*() const;\r\n        add_pointer_t<range_reference_t<_Rng>> operator->() const;\r\n        _Phony_input_iterator& operator++();\r\n        _Phony_input_iterator operator++(int);\r\n        bool operator==(const _Phony_input_iterator&) const;\r\n    };\r\n\r\n    template <template <class...> class _Cnt, class _Rng, class... _Args>\r\n    auto _To_helper() {\r\n        if constexpr (requires { _Cnt(_STD declval<_Rng>(), _STD declval<_Args>()...); }) {\r\n            return static_cast<decltype(_Cnt(_STD declval<_Rng>(), _STD declval<_Args>()...))*>(nullptr);\r\n        } else if constexpr (requires { _Cnt(from_range, _STD declval<_Rng>(), _STD declval<_Args>()...); }) {\r\n            return static_cast<decltype(_Cnt(from_range, _STD declval<_Rng>(), _STD declval<_Args>()...))*>(nullptr);\r\n        } else if constexpr (requires {\r\n                                 _Cnt(_STD declval<_Phony_input_iterator<_Rng>>(),\r\n                                     _STD declval<_Phony_input_iterator<_Rng>>(), _STD declval<_Args>()...);\r\n                             }) {\r\n            return static_cast<decltype(_Cnt(_STD declval<_Phony_input_iterator<_Rng>>(),\r\n                _STD declval<_Phony_input_iterator<_Rng>>(), _STD declval<_Args>()...))*>(nullptr);\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD template <template <class...> class _Container, input_range _Rng, class... _Types,\r\n        class _Deduced = remove_pointer_t<decltype(_To_helper<_Container, _Rng, _Types...>())>>\r\n    _NODISCARD constexpr _Deduced to(_Rng&& _Range, _Types&&... _Args) {\r\n        return _RANGES to<_Deduced>(_STD forward<_Rng>(_Range), _STD forward<_Types>(_Args)...);\r\n    }\r\n\r\n    template <template <class...> class _Container>\r\n    struct _To_template_fn {\r\n        template <input_range _Rng, class... _Types,\r\n            class _Deduced = remove_pointer_t<decltype(_To_helper<_Container, _Rng, _Types...>())>>\r\n        _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Types&&... _Args) {\r\n            return _RANGES to<_Deduced>(_STD forward<_Rng>(_Range), _STD forward<_Types>(_Args)...);\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD template <template <class...> class _Container, class... _Types>\r\n    _NODISCARD constexpr auto to(_Types&&... _Args) {\r\n        return _Range_closure<_To_template_fn<_Container>, decay_t<_Types>...>{_STD forward<_Types>(_Args)...};\r\n    }\r\n#endif // _HAS_CXX23\r\n} // namespace ranges\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_RANGES_TO_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_ranges_tuple_formatter.hpp",
    "content": "// __msvc_ranges_tuple_formatter.hpp internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// NOTE:\r\n// The contents of this header are derived in part from libfmt under the following license:\r\n\r\n// Copyright (c) 2012 - present, Victor Zverovich\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining\r\n// a copy of this software and associated documentation files (the\r\n// \"Software\"), to deal in the Software without restriction, including\r\n// without limitation the rights to use, copy, modify, merge, publish,\r\n// distribute, sublicense, and/or sell copies of the Software, and to\r\n// permit persons to whom the Software is furnished to do so, subject to\r\n// the following conditions:\r\n//\r\n// The above copyright notice and this permission notice shall be\r\n// included in all copies or substantial portions of the Software.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n//\r\n// --- Optional exception to the license ---\r\n//\r\n// As an exception, if, as a result of your compiling your source code, portions\r\n// of this Software are embedded into a machine-executable object form of such\r\n// source code, you may redistribute such embedded portions in such object form\r\n// without including the above copyright and permission notices.\r\n\r\n#ifndef __MSVC_RANGES_TUPLE_FORMATTER_HPP\r\n#define __MSVC_RANGES_TUPLE_FORMATTER_HPP\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX20\r\n#error The contents of <format> are only available with C++20. (Also, you should not include this internal header.)\r\n#endif // !_HAS_CXX20\r\n\r\n#include <__msvc_formatter.hpp>\r\n#include <__msvc_string_view.hpp>\r\n#include <bit>\r\n#include <iterator>\r\n#include <stdexcept>\r\n#include <xlocale>\r\n\r\n#if _HAS_CXX23\r\n#include <tuple>\r\n#endif // _HAS_CXX23\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD template <class, class>\r\nclass vector;\r\n\r\ntemplate <class _CharT>\r\n_NODISCARD constexpr const _CharT* _Choose_literal(const char* const _Str, const wchar_t* const _WStr) noexcept {\r\n    if constexpr (is_same_v<_CharT, char>) {\r\n        return _Str;\r\n    } else {\r\n        return _WStr;\r\n    }\r\n}\r\n\r\n// _STATICALLY_WIDEN is used by <chrono> since C++20 and by <format> since C++23.\r\n// It's defined here, so that both headers can use this definition.\r\n#define _STATICALLY_WIDEN(_CharT, _Literal) (_Choose_literal<_CharT>(_Literal, L##_Literal))\r\n\r\n_EXPORT_STD class _NODISCARD format_error : public runtime_error {\r\n    using runtime_error::runtime_error;\r\n};\r\n\r\n[[noreturn]] inline void _Throw_format_error(const char* const _Message) {\r\n    _THROW(format_error{_Message});\r\n}\r\n\r\ninline void _You_see_this_error_because_arg_id_is_out_of_range() noexcept {}\r\ninline void _Invalid_arg_type_for_dynamic_width_or_precision() noexcept {}\r\n\r\ntemplate <class _CharT>\r\nclass _Compile_time_parse_context;\r\n\r\n_EXPORT_STD template <class _CharT>\r\nclass _NO_SPECIALIZATIONS_CITING(\"N5014 [format.parse.ctx]/2\") basic_format_parse_context {\r\npublic:\r\n    using char_type      = _CharT;\r\n    using const_iterator = basic_string_view<_CharT>::const_iterator;\r\n    using iterator       = const_iterator;\r\n\r\n    constexpr explicit basic_format_parse_context(\r\n        const basic_string_view<_CharT> _Fmt, const size_t _Num_args_ = 0) noexcept\r\n        : _Format_string(_Fmt), _Num_args(_Num_args_) {}\r\n\r\n    basic_format_parse_context(const basic_format_parse_context&)            = delete;\r\n    basic_format_parse_context& operator=(const basic_format_parse_context&) = delete;\r\n\r\n    _NODISCARD constexpr const_iterator begin() const noexcept {\r\n        return _Format_string.begin();\r\n    }\r\n    _NODISCARD constexpr const_iterator end() const noexcept {\r\n        return _Format_string.end();\r\n    }\r\n    _NODISCARD constexpr const _CharT* _Unchecked_begin() const noexcept {\r\n        return _Format_string._Unchecked_begin();\r\n    }\r\n    _NODISCARD constexpr const _CharT* _Unchecked_end() const noexcept {\r\n        return _Format_string._Unchecked_end();\r\n    }\r\n\r\n    constexpr void advance_to(const const_iterator _It) {\r\n        _Adl_verify_range(_It, _Format_string.end());\r\n        _Adl_verify_range(_Format_string.begin(), _It);\r\n        const auto _Diff = static_cast<size_t>(_It._Unwrapped() - _Format_string._Unchecked_begin());\r\n        _Format_string.remove_prefix(_Diff);\r\n    }\r\n\r\n    // While the standard presents an exposition-only enum value for\r\n    // the indexing mode (manual, automatic, or unknown) we use _Next_arg_id to indicate it.\r\n    // _Next_arg_id > 0 means automatic\r\n    // _Next_arg_id == 0 means unknown\r\n    // _Next_arg_id < 0 means manual\r\n    _NODISCARD constexpr size_t next_arg_id() {\r\n        if (_Next_arg_id < 0) {\r\n            _Throw_format_error(\"Can not switch from manual to automatic indexing\");\r\n        }\r\n\r\n        if (_STD is_constant_evaluated()) {\r\n            if (static_cast<size_t>(_Next_arg_id) >= _Num_args) {\r\n                _You_see_this_error_because_arg_id_is_out_of_range();\r\n            }\r\n        }\r\n\r\n        return static_cast<size_t>(_Next_arg_id++);\r\n    }\r\n\r\n    constexpr void check_arg_id(const size_t _Id) {\r\n        if (_STD is_constant_evaluated()) {\r\n            if (_Id >= _Num_args) {\r\n                _You_see_this_error_because_arg_id_is_out_of_range();\r\n            }\r\n        }\r\n\r\n        if (_Next_arg_id > 0) {\r\n            _Throw_format_error(\"Can not switch from automatic to manual indexing\");\r\n        }\r\n        _Next_arg_id = -1;\r\n    }\r\n\r\n    constexpr void _Check_dynamic_spec_integral(const size_t _Idx) noexcept {\r\n        if (_STD is_constant_evaluated()) {\r\n            // This downcast might seem UB-prone, but since it only happens at compile-time,\r\n            // the compiler will produce an error if it is invalid.\r\n            auto& _Ctx = static_cast<_Compile_time_parse_context<_CharT>&>(*this);\r\n\r\n            _STL_INTERNAL_CHECK(_Ctx._Arg_type[_Idx] != _Basic_format_arg_type::_None);\r\n            if (_Ctx._Arg_type[_Idx] > _Basic_format_arg_type::_ULong_long_type) {\r\n                _Invalid_arg_type_for_dynamic_width_or_precision();\r\n            }\r\n        }\r\n    }\r\n\r\nprivate:\r\n    basic_string_view<_CharT> _Format_string;\r\n    size_t _Num_args;\r\n    // The standard says this is size_t, however we use ptrdiff_t to save some space\r\n    // by not having to store the indexing mode. Above is a more detailed explanation\r\n    // of how this works.\r\n    ptrdiff_t _Next_arg_id = 0;\r\n};\r\n\r\ntemplate <class _CharT>\r\nclass _Compile_time_parse_context : public basic_format_parse_context<_CharT> {\r\n    friend basic_format_parse_context<_CharT>;\r\n\r\npublic:\r\n    constexpr _Compile_time_parse_context(const basic_string_view<_CharT> _Fmt, const size_t _Num_args,\r\n        const _Basic_format_arg_type* const _Arg_type_) noexcept\r\n        : basic_format_parse_context<_CharT>(_Fmt, _Num_args), _Arg_type(_Arg_type_) {}\r\n\r\nprivate:\r\n    const _Basic_format_arg_type* const _Arg_type;\r\n};\r\n\r\n_EXPORT_STD using format_parse_context  = basic_format_parse_context<char>;\r\n_EXPORT_STD using wformat_parse_context = basic_format_parse_context<wchar_t>;\r\n\r\ntemplate <class _Ty, class _Context, class _Formatter = _Context::template formatter_type<remove_const_t<_Ty>>>\r\nconcept _Formattable_with = semiregular<_Formatter>\r\n                         && requires(_Formatter& __f, const _Formatter& __cf, _Ty&& __t, _Context __fc,\r\n                             basic_format_parse_context<typename _Context::char_type> __pc) {\r\n                                { __f.parse(__pc) } -> same_as<typename decltype(__pc)::iterator>;\r\n                                { __cf.format(__t, __fc) } -> same_as<typename _Context::iterator>;\r\n                            };\r\n\r\ntemplate <class _Context>\r\nstruct _Format_arg_traits {\r\n    using _Char_type = _Context::char_type;\r\n\r\n    // Function template _Type_eraser mirrors the type dispatching mechanism in the construction of basic_format_arg\r\n    // (N4950 [format.arg]). They determine the mapping from \"raw\" to \"erased\" argument type for _Format_arg_store.\r\n    template <class _Ty>\r\n    static auto _Type_eraser();\r\n\r\n    template <class _Ty>\r\n    using _Storage_type = decltype(_Type_eraser<remove_reference_t<_Ty>>());\r\n\r\n    template <class _Ty>\r\n    static constexpr size_t _Storage_size = sizeof(_Storage_type<_Ty>);\r\n};\r\n\r\n_EXPORT_STD template <class _Context>\r\nclass basic_format_args;\r\n\r\n_FMT_P2286_BEGIN\r\ntemplate <class _CharT>\r\nstruct _Format_handler;\r\n_FMT_P2286_END\r\n\r\n_EXPORT_STD template <class _Context>\r\nclass _NO_SPECIALIZATIONS_CITING(\"N5014 [format.arg]/2\") basic_format_arg {\r\npublic:\r\n    using _CharType = _Context::char_type;\r\n\r\n    class handle {\r\n    private:\r\n        const void* _Ptr;\r\n        void(__cdecl* _Format)(basic_format_parse_context<_CharType>& _Parse_ctx, _Context& _Format_ctx, const void*);\r\n\r\n        template <class _Ty>\r\n        static void __cdecl _Handle_format(\r\n            basic_format_parse_context<_CharType>& _Parse_ctx, _Context& _Format_ctx, const void* _Ptr) {\r\n            using _Td = remove_const_t<_Ty>;\r\n            // doesn't drop const-qualifier per an unnumbered LWG issue\r\n            using _Tq = conditional_t<_Formattable_with<const _Ty, _Context>, const _Ty, _Ty>;\r\n            _STL_INTERNAL_STATIC_ASSERT(_Formattable_with<_Tq, _Context>);\r\n\r\n            typename _Context::template formatter_type<_Td> _Formatter;\r\n            _Parse_ctx.advance_to(_Formatter.parse(_Parse_ctx));\r\n            _Format_ctx.advance_to(_Formatter.format(*const_cast<_Tq*>(static_cast<const _Td*>(_Ptr)), _Format_ctx));\r\n        }\r\n\r\n        template <class _Ty>\r\n        explicit handle(_Ty& _Val) noexcept : _Ptr(_STD addressof(_Val)), _Format(_Handle_format<_Ty>) {}\r\n\r\n    public:\r\n        void format(basic_format_parse_context<_CharType>& _Parse_ctx, _Context& _Format_ctx) const {\r\n            _Format(_Parse_ctx, _Format_ctx, _Ptr);\r\n        }\r\n\r\n        template <class _Ty>\r\n        _NODISCARD static handle _Make_from(_Ty& _Val) noexcept {\r\n            return handle{_Val};\r\n        }\r\n    };\r\n\r\n#if defined(__clang__) || defined(__CUDACC__) // TRANSITION, LLVM-81774, DevCom-10863472 (still needed by CUDA 13.2)\r\n    basic_format_arg() noexcept : _Active_state(_Basic_format_arg_type::_None), _No_state() {}\r\n#else // ^^^ workaround / no workaround vvv\r\n    basic_format_arg() noexcept = default;\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    explicit operator bool() const noexcept {\r\n        return _Active_state != _Basic_format_arg_type::_None;\r\n    }\r\n\r\n    // Function template _Make_from mirrors the exposition-only single-argument constructor template of\r\n    // basic_format_arg (N4950 [format.arg]).\r\n    template <_Formattable_with<_Context> _Ty>\r\n    _NODISCARD static basic_format_arg _Make_from(_Ty& _Val) noexcept {\r\n        using _Erased_type = _Format_arg_traits<_Context>::template _Storage_type<_Ty>;\r\n        if constexpr (is_same_v<remove_const_t<_Ty>, char> && is_same_v<_CharType, wchar_t>) {\r\n            return basic_format_arg(static_cast<_Erased_type>(static_cast<unsigned char>(_Val)));\r\n        }\r\n#if !_HAS_CXX23\r\n        else if constexpr (is_same_v<_Erased_type, basic_string_view<_CharType>>) {\r\n            return basic_format_arg(_Erased_type{_Val.data(), _Val.size()});\r\n        }\r\n#endif // !_HAS_CXX23\r\n        else {\r\n            return basic_format_arg(static_cast<_Erased_type>(_Val));\r\n        }\r\n    }\r\n\r\n    template <class _Visitor>\r\n    decltype(auto) _Visit(_Visitor&& _Vis) {\r\n        switch (_Active_state) {\r\n        case _Basic_format_arg_type::_None:\r\n            return _STD forward<_Visitor>(_Vis)(_No_state);\r\n        case _Basic_format_arg_type::_Int_type:\r\n            return _STD forward<_Visitor>(_Vis)(_Int_state);\r\n        case _Basic_format_arg_type::_UInt_type:\r\n            return _STD forward<_Visitor>(_Vis)(_UInt_state);\r\n        case _Basic_format_arg_type::_Long_long_type:\r\n            return _STD forward<_Visitor>(_Vis)(_Long_long_state);\r\n        case _Basic_format_arg_type::_ULong_long_type:\r\n            return _STD forward<_Visitor>(_Vis)(_ULong_long_state);\r\n        case _Basic_format_arg_type::_Bool_type:\r\n            return _STD forward<_Visitor>(_Vis)(_Bool_state);\r\n        case _Basic_format_arg_type::_Char_type:\r\n            return _STD forward<_Visitor>(_Vis)(_Char_state);\r\n        case _Basic_format_arg_type::_Float_type:\r\n            return _STD forward<_Visitor>(_Vis)(_Float_state);\r\n        case _Basic_format_arg_type::_Double_type:\r\n            return _STD forward<_Visitor>(_Vis)(_Double_state);\r\n        case _Basic_format_arg_type::_Long_double_type:\r\n            return _STD forward<_Visitor>(_Vis)(_Long_double_state);\r\n        case _Basic_format_arg_type::_Pointer_type:\r\n            return _STD forward<_Visitor>(_Vis)(_Pointer_state);\r\n        case _Basic_format_arg_type::_CString_type:\r\n            return _STD forward<_Visitor>(_Vis)(_CString_state);\r\n        case _Basic_format_arg_type::_String_type:\r\n            return _STD forward<_Visitor>(_Vis)(_String_state);\r\n        case _Basic_format_arg_type::_Custom_type:\r\n            return _STD forward<_Visitor>(_Vis)(_Custom_state);\r\n        default:\r\n            _STL_REPORT_ERROR(\"basic_format_arg contains an impossible type\");\r\n            int _Dummy{};\r\n            return _STD forward<_Visitor>(_Vis)(_Dummy);\r\n        }\r\n    }\r\n\r\nprivate:\r\n    friend basic_format_args<_Context>;\r\n    friend _Format_handler<_CharType>;\r\n    friend _Format_arg_traits<_Context>;\r\n\r\n    explicit basic_format_arg(const int _Val) noexcept\r\n        : _Active_state(_Basic_format_arg_type::_Int_type), _Int_state(_Val) {}\r\n    explicit basic_format_arg(const unsigned int _Val) noexcept\r\n        : _Active_state(_Basic_format_arg_type::_UInt_type), _UInt_state(_Val) {}\r\n    explicit basic_format_arg(const long long _Val) noexcept\r\n        : _Active_state(_Basic_format_arg_type::_Long_long_type), _Long_long_state(_Val) {}\r\n    explicit basic_format_arg(const unsigned long long _Val) noexcept\r\n        : _Active_state(_Basic_format_arg_type::_ULong_long_type), _ULong_long_state(_Val) {}\r\n    explicit basic_format_arg(const bool _Val) noexcept\r\n        : _Active_state(_Basic_format_arg_type::_Bool_type), _Bool_state(_Val) {}\r\n    explicit basic_format_arg(const _CharType _Val) noexcept\r\n        : _Active_state(_Basic_format_arg_type::_Char_type), _Char_state(_Val) {}\r\n    explicit basic_format_arg(const float _Val) noexcept\r\n        : _Active_state(_Basic_format_arg_type::_Float_type), _Float_state(_Val) {}\r\n    explicit basic_format_arg(const double _Val) noexcept\r\n        : _Active_state(_Basic_format_arg_type::_Double_type), _Double_state(_Val) {}\r\n    explicit basic_format_arg(const long double _Val) noexcept\r\n        : _Active_state(_Basic_format_arg_type::_Long_double_type), _Long_double_state(_Val) {}\r\n    explicit basic_format_arg(const void* _Val) noexcept\r\n        : _Active_state(_Basic_format_arg_type::_Pointer_type), _Pointer_state(_Val) {}\r\n    explicit basic_format_arg(const _CharType* _Val) noexcept\r\n        : _Active_state(_Basic_format_arg_type::_CString_type), _CString_state(_Val) {}\r\n    explicit basic_format_arg(const basic_string_view<_CharType> _Val) noexcept\r\n        : _Active_state(_Basic_format_arg_type::_String_type), _String_state(_Val) {}\r\n    explicit basic_format_arg(const handle _Val) noexcept\r\n        : _Active_state(_Basic_format_arg_type::_Custom_type), _Custom_state(_Val) {}\r\n\r\n    _Basic_format_arg_type _Active_state = _Basic_format_arg_type::_None;\r\n    union {\r\n        monostate _No_state = monostate{};\r\n        int _Int_state;\r\n        unsigned int _UInt_state;\r\n        long long _Long_long_state;\r\n        unsigned long long _ULong_long_state;\r\n        bool _Bool_state;\r\n        _CharType _Char_state;\r\n        float _Float_state;\r\n        double _Double_state;\r\n        long double _Long_double_state;\r\n        const void* _Pointer_state;\r\n        const _CharType* _CString_state;\r\n        basic_string_view<_CharType> _String_state;\r\n        handle _Custom_state;\r\n    };\r\n};\r\n\r\ntemplate <class _Ty, class _CharT>\r\nconstexpr bool _Is_basic_string_like_for = false;\r\n\r\ntemplate <class _CharT, class _Traits, class _Alloc>\r\nconstexpr bool _Is_basic_string_like_for<basic_string<_CharT, _Traits, _Alloc>, _CharT> = true;\r\n\r\ntemplate <class _CharT, class _Traits>\r\nconstexpr bool _Is_basic_string_like_for<basic_string_view<_CharT, _Traits>, _CharT> = true;\r\n\r\ntemplate <class _Context>\r\ntemplate <class _Ty>\r\nauto _Format_arg_traits<_Context>::_Type_eraser() {\r\n    using _Td = remove_const_t<_Ty>;\r\n    // See N4950 [format.arg]/6\r\n    if constexpr (is_same_v<_Td, bool>) {\r\n        return bool{};\r\n    } else if constexpr (is_same_v<_Td, _Char_type>) {\r\n        return _Char_type{};\r\n    } else if constexpr (is_same_v<_Td, char> && is_same_v<_Char_type, wchar_t>) {\r\n        return _Char_type{};\r\n    } else if constexpr (signed_integral<_Td> && sizeof(_Td) <= sizeof(int)) {\r\n        return int{};\r\n    } else if constexpr (unsigned_integral<_Td> && sizeof(_Td) <= sizeof(unsigned int)) {\r\n        return static_cast<unsigned int>(42);\r\n    } else if constexpr (signed_integral<_Td> && sizeof(_Td) <= sizeof(long long)) {\r\n        return static_cast<long long>(42);\r\n    } else if constexpr (unsigned_integral<_Td> && sizeof(_Td) <= sizeof(unsigned long long)) {\r\n        return static_cast<unsigned long long>(42);\r\n    } else if constexpr (is_same_v<_Td, float>) {\r\n        return float{};\r\n    } else if constexpr (is_same_v<_Td, double>) {\r\n        return double{};\r\n    } else if constexpr (is_same_v<_Td, long double>) {\r\n        return static_cast<long double>(42);\r\n    } else if constexpr (_Is_basic_string_like_for<_Td, _Char_type>) {\r\n        return basic_string_view<_Char_type>{};\r\n    } else if constexpr (_Is_any_of_v<decay_t<_Td>, _Char_type*, const _Char_type*>) {\r\n        return static_cast<const _Char_type*>(nullptr);\r\n    } else if constexpr (is_void_v<remove_pointer_t<_Td>> || is_null_pointer_v<_Td>) {\r\n        return static_cast<const void*>(nullptr);\r\n    } else {\r\n        int _Dummy{};\r\n        return basic_format_arg<_Context>::handle::_Make_from(_Dummy);\r\n    }\r\n}\r\n\r\ntemplate <class _Context, class _Ty>\r\n_NODISCARD consteval _Basic_format_arg_type _Get_format_arg_type() noexcept {\r\n    using _CharType    = _Context::char_type;\r\n    using _Erased_type = _Format_arg_traits<_Context>::template _Storage_type<_Ty>;\r\n\r\n    if constexpr (is_same_v<_Erased_type, bool>) {\r\n        return _Basic_format_arg_type::_Bool_type;\r\n    } else if constexpr (is_same_v<_Erased_type, _CharType>) {\r\n        return _Basic_format_arg_type::_Char_type;\r\n    } else if constexpr (is_same_v<_Erased_type, int>) {\r\n        return _Basic_format_arg_type::_Int_type;\r\n    } else if constexpr (is_same_v<_Erased_type, unsigned int>) {\r\n        return _Basic_format_arg_type::_UInt_type;\r\n    } else if constexpr (is_same_v<_Erased_type, long long>) {\r\n        return _Basic_format_arg_type::_Long_long_type;\r\n    } else if constexpr (is_same_v<_Erased_type, unsigned long long>) {\r\n        return _Basic_format_arg_type::_ULong_long_type;\r\n    } else if constexpr (is_same_v<_Erased_type, float>) {\r\n        return _Basic_format_arg_type::_Float_type;\r\n    } else if constexpr (is_same_v<_Erased_type, double>) {\r\n        return _Basic_format_arg_type::_Double_type;\r\n    } else if constexpr (is_same_v<_Erased_type, long double>) {\r\n        return _Basic_format_arg_type::_Long_double_type;\r\n    } else if constexpr (is_same_v<_Erased_type, const void*>) {\r\n        return _Basic_format_arg_type::_Pointer_type;\r\n    } else if constexpr (is_same_v<_Erased_type, const _CharType*>) {\r\n        return _Basic_format_arg_type::_CString_type;\r\n    } else if constexpr (is_same_v<_Erased_type, basic_string_view<_CharType>>) {\r\n        return _Basic_format_arg_type::_String_type;\r\n    } else {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_same_v<_Erased_type, typename basic_format_arg<_Context>::handle>);\r\n        return _Basic_format_arg_type::_Custom_type;\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Visitor, class _Context>\r\ndecltype(auto) visit_format_arg(_Visitor&& _Vis, basic_format_arg<_Context> _Arg) {\r\n    return _Arg._Visit(_STD forward<_Visitor>(_Vis));\r\n}\r\n\r\nstruct _Format_arg_index {\r\n    // TRANSITION, Should be templated on number of arguments for even less storage\r\n\r\n    constexpr _Format_arg_index() = default;\r\n    constexpr explicit _Format_arg_index(const size_t _Index_) noexcept : _Index(_Index_) {\r\n        _Type(_Basic_format_arg_type::_None);\r\n    }\r\n\r\n    _NODISCARD constexpr _Basic_format_arg_type _Type() const noexcept {\r\n        return static_cast<_Basic_format_arg_type>(_Type_);\r\n    }\r\n\r\n    constexpr void _Type(_Basic_format_arg_type _Val) noexcept {\r\n        _Type_ = static_cast<size_t>(_Val);\r\n    }\r\n\r\n    size_t _Index : (sizeof(size_t) * 8 - 4){};\r\n    size_t _Type_ : 4 {};\r\n};\r\n\r\ntemplate <class _Context, class... _Args>\r\nclass _Format_arg_store {\r\nprivate:\r\n    using _CharType = _Context::char_type;\r\n    using _Traits   = _Format_arg_traits<_Context>;\r\n\r\n    friend basic_format_args<_Context>;\r\n\r\n    static constexpr size_t _Num_args       = sizeof...(_Args);\r\n    static constexpr size_t _Storage_length = (_Traits::template _Storage_size<_Args> + ...);\r\n\r\n    // The actual storage representation: _Num_args offsets into _Storage, followed immediately by the untyped\r\n    // _Storage which holds copies of the object representations of arguments (with no regard for alignment).\r\n    // These must be allocated consecutively, since basic_format_args thinks it can store a pointer to\r\n    // _Index_array and use arithmetic to access the bytes of _Storage.\r\n    _Format_arg_index _Index_array[_Num_args];\r\n    unsigned char _Storage[_Storage_length];\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 6386) // Buffer overrun while writing to '%s' ...\r\n    template <class _Ty>\r\n    void _Store_impl(\r\n        const size_t _Arg_index, const _Basic_format_arg_type _Arg_type, const type_identity_t<_Ty>& _Val) noexcept {\r\n        _STL_INTERNAL_CHECK(_Arg_index < _Num_args);\r\n\r\n        const auto _Store_index = _Index_array[_Arg_index]._Index;\r\n\r\n        _CSTD memcpy(_Storage + _Store_index, _STD addressof(_Val), sizeof(_Ty));\r\n        _Index_array[_Arg_index]._Type(_Arg_type);\r\n        if (_Arg_index + 1 < _Num_args) {\r\n            // Set the starting index of the next arg, as that is dynamic, must be called with increasing index\r\n            _Index_array[_Arg_index + 1] = _Format_arg_index{_Store_index + sizeof(_Ty)};\r\n        }\r\n    }\r\n#pragma warning(pop)\r\n\r\n    template <class _Ty>\r\n    void _Store(const size_t _Arg_index, _Ty&& _Val) noexcept {\r\n        constexpr _Basic_format_arg_type _Arg_type = _STD _Get_format_arg_type<_Context, _Ty>();\r\n        using _Erased_type                         = _Traits::template _Storage_type<_Ty>;\r\n\r\n        if constexpr (is_same_v<remove_const_t<remove_reference_t<_Ty>>, char> && is_same_v<_CharType, wchar_t>) {\r\n            _Store_impl<_Erased_type>(\r\n                _Arg_index, _Arg_type, static_cast<_Erased_type>(static_cast<unsigned char>(_Val)));\r\n        } else if constexpr (is_same_v<_Erased_type, typename basic_format_arg<_Context>::handle>) {\r\n            _Store_impl<_Erased_type>(_Arg_index, _Arg_type, _Erased_type::_Make_from(_Val));\r\n        }\r\n#if !_HAS_CXX23\r\n        // Workaround towards N4950 [format.arg]/6.8 in C++20\r\n        else if constexpr (is_same_v<_Erased_type, basic_string_view<_CharType>>) {\r\n            _Store_impl<_Erased_type>(_Arg_index, _Arg_type, _Erased_type{_Val.data(), _Val.size()});\r\n        }\r\n#endif // !_HAS_CXX23\r\n        else {\r\n            _Store_impl<_Erased_type>(_Arg_index, _Arg_type, static_cast<_Erased_type>(_Val));\r\n        }\r\n    }\r\n\r\npublic:\r\n    _Format_arg_store(_Args&... _Vals) noexcept {\r\n        _Index_array[0]   = {};\r\n        size_t _Arg_index = 0;\r\n        (_Store(_Arg_index++, _Vals), ...);\r\n    }\r\n};\r\n\r\ntemplate <class _Context>\r\nclass _Format_arg_store<_Context> {};\r\n\r\n_EXPORT_STD template <class _Context>\r\nclass basic_format_args {\r\npublic:\r\n    basic_format_args(const _Format_arg_store<_Context>&) noexcept {}\r\n\r\n    template <class... _Args>\r\n    basic_format_args(const _Format_arg_store<_Context, _Args...>& _Store) noexcept\r\n        : _Num_args(sizeof...(_Args)), _Index_array(_Store._Index_array) {}\r\n\r\n    _NODISCARD basic_format_arg<_Context> get(const size_t _Index) const noexcept {\r\n        if (_Index >= _Num_args) {\r\n            return basic_format_arg<_Context>{};\r\n        }\r\n\r\n        using _CharType = _Context::char_type;\r\n        // The explanatory comment in _Format_arg_store explains how the following works.\r\n        const auto _Packed_index = _Index_array[_Index];\r\n        const auto _Arg_storage =\r\n            reinterpret_cast<const unsigned char*>(_Index_array + _Num_args) + _Packed_index._Index;\r\n\r\n        switch (_Packed_index._Type()) {\r\n        case _Basic_format_arg_type::_None:\r\n        default:\r\n            _STL_ASSERT(false, \"Invalid basic_format_arg type\");\r\n            return basic_format_arg<_Context>{};\r\n        case _Basic_format_arg_type::_Int_type:\r\n            return basic_format_arg<_Context>{_Get_value_from_memory<int>(_Arg_storage)};\r\n        case _Basic_format_arg_type::_UInt_type:\r\n            return basic_format_arg<_Context>{_Get_value_from_memory<unsigned int>(_Arg_storage)};\r\n        case _Basic_format_arg_type::_Long_long_type:\r\n            return basic_format_arg<_Context>{_Get_value_from_memory<long long>(_Arg_storage)};\r\n        case _Basic_format_arg_type::_ULong_long_type:\r\n            return basic_format_arg<_Context>{_Get_value_from_memory<unsigned long long>(_Arg_storage)};\r\n        case _Basic_format_arg_type::_Bool_type:\r\n            return basic_format_arg<_Context>{_Get_value_from_memory<bool>(_Arg_storage)};\r\n        case _Basic_format_arg_type::_Char_type:\r\n            return basic_format_arg<_Context>{_Get_value_from_memory<_CharType>(_Arg_storage)};\r\n        case _Basic_format_arg_type::_Float_type:\r\n            return basic_format_arg<_Context>{_Get_value_from_memory<float>(_Arg_storage)};\r\n        case _Basic_format_arg_type::_Double_type:\r\n            return basic_format_arg<_Context>{_Get_value_from_memory<double>(_Arg_storage)};\r\n        case _Basic_format_arg_type::_Long_double_type:\r\n            return basic_format_arg<_Context>{_Get_value_from_memory<long double>(_Arg_storage)};\r\n        case _Basic_format_arg_type::_Pointer_type:\r\n            return basic_format_arg<_Context>{_Get_value_from_memory<const void*>(_Arg_storage)};\r\n        case _Basic_format_arg_type::_CString_type:\r\n            return basic_format_arg<_Context>{_Get_value_from_memory<const _CharType*>(_Arg_storage)};\r\n        case _Basic_format_arg_type::_String_type:\r\n            return basic_format_arg<_Context>{_Get_value_from_memory<basic_string_view<_CharType>>(_Arg_storage)};\r\n        case _Basic_format_arg_type::_Custom_type:\r\n            return basic_format_arg<_Context>{\r\n                _Get_value_from_memory<typename basic_format_arg<_Context>::handle>(_Arg_storage)};\r\n        }\r\n    }\r\n\r\n    _NODISCARD size_t _Estimate_required_capacity() const noexcept {\r\n        using _CharType = _Context::char_type;\r\n        size_t _Result  = 0;\r\n\r\n        for (size_t _Idx = 0; _Idx < _Num_args; ++_Idx) {\r\n            const auto _Packed_index = _Index_array[_Idx];\r\n            const auto _Arg_type     = _Packed_index._Type();\r\n            if (_Arg_type == _Basic_format_arg_type::_String_type) {\r\n                const auto _Arg_storage =\r\n                    reinterpret_cast<const unsigned char*>(_Index_array + _Num_args) + _Packed_index._Index;\r\n                const auto _View = _Get_value_from_memory<basic_string_view<_CharType>>(_Arg_storage);\r\n                _Result += _View.size();\r\n            } else if (_Arg_type == _Basic_format_arg_type::_CString_type) {\r\n                _Result += 32; // estimate for length of null-terminated strings\r\n            } else {\r\n                _Result += 8; // estimate for length of all other arguments\r\n            }\r\n        }\r\n        return _Result;\r\n    }\r\n\r\nprivate:\r\n    template <class _Ty>\r\n    _NODISCARD static auto _Get_value_from_memory(const unsigned char* const _Val) noexcept {\r\n        auto& _Temp = *reinterpret_cast<const unsigned char (*)[sizeof(_Ty)]>(_Val);\r\n        return _STD bit_cast<_Ty>(_Temp);\r\n    }\r\n\r\n    size_t _Num_args                      = 0;\r\n    const _Format_arg_index* _Index_array = nullptr;\r\n};\r\n\r\ntemplate <class _Context, class... _Args>\r\nbasic_format_args(_Format_arg_store<_Context, _Args...>) -> basic_format_args<_Context>;\r\n\r\n// _Lazy_locale is used instead of a std::locale so that the locale is only\r\n// constructed when needed, and is never constructed if the format string does not\r\n// contain locale-sensitive format specifiers. Note that this means that a new locale\r\n// will be constructed for _every_ locale-sensitive format specifier in the format string,\r\n// making that case slower than if we had stored a \"real\" locale in the basic_format_context.\r\nclass _Lazy_locale {\r\nprivate:\r\n    const locale* _Loc = nullptr;\r\n\r\npublic:\r\n    _Lazy_locale() = default;\r\n\r\n    explicit _Lazy_locale(const locale& _Loc_) : _Loc(&_Loc_) {}\r\n\r\n    explicit _Lazy_locale(const locale&&) = delete;\r\n\r\n    _NODISCARD locale _Get() const {\r\n        if (_Loc) {\r\n            return *_Loc;\r\n        } else {\r\n            return locale{};\r\n        }\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Out, class _CharT>\r\n    requires output_iterator<_Out, const _CharT&>\r\nclass _NO_SPECIALIZATIONS_CITING(\"N5014 [format.context]/2\") basic_format_context {\r\nprivate:\r\n    _Out _OutputIt;\r\n    basic_format_args<basic_format_context> _Args;\r\n    _Lazy_locale _Loc;\r\n\r\n    constexpr basic_format_context(\r\n        _Out&& _OutputIt_, const basic_format_args<basic_format_context>& _Ctx_args, const _Lazy_locale& _Loc_)\r\n        : _OutputIt(_STD move(_OutputIt_)), _Args(_Ctx_args), _Loc(_Loc_) {}\r\n\r\n    basic_format_context(const basic_format_context&)            = delete;\r\n    basic_format_context& operator=(const basic_format_context&) = delete;\r\n\r\npublic:\r\n    using iterator  = _Out;\r\n    using char_type = _CharT;\r\n\r\n    template <class _Ty>\r\n    using formatter_type = formatter<_Ty, _CharT>;\r\n\r\n    _NODISCARD basic_format_arg<basic_format_context> arg(size_t _Id) const noexcept {\r\n        return _Args.get(_Id);\r\n    }\r\n    _NODISCARD locale locale() {\r\n        return _Loc._Get();\r\n    }\r\n    _NODISCARD iterator out() {\r\n        return _STD move(_OutputIt);\r\n    }\r\n    void advance_to(iterator _It) {\r\n        _OutputIt = _STD move(_It);\r\n    }\r\n\r\n    _NODISCARD const basic_format_args<basic_format_context>& _Get_args() const noexcept {\r\n        return _Args;\r\n    }\r\n    _NODISCARD _Lazy_locale _Get_lazy_locale() const {\r\n        return _Loc;\r\n    }\r\n\r\n    _NODISCARD static constexpr basic_format_context _Make_from(\r\n        _Out _OutputIt_, basic_format_args<basic_format_context> _Ctx_args, const _Lazy_locale& _Loc_) {\r\n        return basic_format_context{_STD move(_OutputIt_), _Ctx_args, _Loc_};\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nclass _Fmt_buffer {\r\nprivate:\r\n    _Ty* _Ptr_        = nullptr;\r\n    size_t _Size_     = 0;\r\n    size_t _Capacity_ = 0;\r\n\r\nprotected:\r\n    explicit _Fmt_buffer(const size_t _Size) noexcept : _Size_(_Size), _Capacity_(_Size) {}\r\n\r\n    ~_Fmt_buffer() = default;\r\n\r\n    _Fmt_buffer(_Ty* _Data, const size_t _Size, const size_t _Capacity) noexcept\r\n        : _Ptr_(_Data), _Size_(_Size), _Capacity_(_Capacity) {}\r\n\r\n    void _Set(_Ty* _Buf_data, const size_t _Buf_capacity) noexcept {\r\n        _Ptr_      = _Buf_data;\r\n        _Capacity_ = _Buf_capacity;\r\n    }\r\n\r\n    virtual void _Grow(size_t _Capacity) = 0;\r\n\r\npublic:\r\n    using value_type = _Ty;\r\n\r\n    _Fmt_buffer(const _Fmt_buffer&)    = delete;\r\n    void operator=(const _Fmt_buffer&) = delete;\r\n\r\n    _NODISCARD _Ty* begin() noexcept {\r\n        return _Ptr_;\r\n    }\r\n\r\n    _NODISCARD _Ty* end() noexcept {\r\n        return _Ptr_ + _Size_;\r\n    }\r\n\r\n    _NODISCARD size_t _Size() const noexcept {\r\n        return _Size_;\r\n    }\r\n\r\n    _NODISCARD size_t _Capacity() const noexcept {\r\n        return _Capacity_;\r\n    }\r\n\r\n    void _Clear() noexcept {\r\n        _Size_ = 0;\r\n    }\r\n\r\n    void _Try_reserve(const size_t _New_capacity) {\r\n        if (_New_capacity > _Capacity_) {\r\n            _Grow(_New_capacity);\r\n        }\r\n    }\r\n\r\n    void push_back(const _Ty _Value) {\r\n        _Try_reserve(_Size_ + 1);\r\n        _Ptr_[_Size_++] = _Value;\r\n    }\r\n};\r\n\r\nstruct _Fmt_buffer_traits {\r\n    explicit _Fmt_buffer_traits(ptrdiff_t) {}\r\n\r\n    _NODISCARD size_t _Count() const noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD size_t _Limit(const size_t _Size) noexcept {\r\n        return _Size;\r\n    }\r\n};\r\n\r\ninline constexpr size_t _Fmt_buffer_size = 256;\r\n\r\ntemplate <class _OutputIt>\r\nstruct _Fmt_iterator_flush {\r\n    template <class _Ty>\r\n    static _OutputIt _Flush(const _Ty* const _First, const _Ty* const _Last, _OutputIt _Output) {\r\n        return _STD copy(_First, _Last, _STD move(_Output));\r\n    }\r\n};\r\n\r\ntemplate <class _Container>\r\nstruct _Back_insert_iterator_container_access : back_insert_iterator<_Container> {\r\n    explicit _Back_insert_iterator_container_access(back_insert_iterator<_Container> _Iter)\r\n        : back_insert_iterator<_Container>(_Iter) {}\r\n\r\n    using back_insert_iterator<_Container>::container;\r\n};\r\n\r\ntemplate <class _Container>\r\n    requires (_Is_specialization_v<_Container, basic_string> || _Is_specialization_v<_Container, vector>)\r\nstruct _Fmt_iterator_flush<back_insert_iterator<_Container>> {\r\n    using _OutputIt = back_insert_iterator<_Container>;\r\n\r\n    template <class _Ty>\r\n    static _OutputIt _Flush(const _Ty* const _First, const _Ty* const _Last, _OutputIt _Output) {\r\n        _Container& _Cont = *_Back_insert_iterator_container_access<_Container>{_Output}.container;\r\n        _Cont.insert(_Cont.end(), _First, _Last);\r\n        return _Output;\r\n    }\r\n};\r\n\r\ntemplate <class _OutputIt, class _Ty, class _Traits = _Fmt_buffer_traits>\r\nclass _Fmt_iterator_buffer final : public _Traits, public _Fmt_buffer<_Ty> {\r\nprivate:\r\n    _OutputIt _Output;\r\n    _Ty _Data[_Fmt_buffer_size];\r\n\r\n    void _Grow(size_t) final {\r\n        if (this->_Size() == _Fmt_buffer_size) {\r\n            _Flush();\r\n        }\r\n    }\r\n\r\n    void _Flush() {\r\n        auto _Size = this->_Size();\r\n        this->_Clear();\r\n        const auto _End = _Data + this->_Limit(_Size);\r\n\r\n        _Output = _Fmt_iterator_flush<_OutputIt>::_Flush(_Data, _End, _STD move(_Output));\r\n    }\r\n\r\npublic:\r\n    explicit _Fmt_iterator_buffer(_OutputIt _Out, ptrdiff_t _Size = _Fmt_buffer_size)\r\n        : _Traits(_Size), _Fmt_buffer<_Ty>(_Data, 0, _Fmt_buffer_size), _Output(_STD move(_Out)) {}\r\n\r\n    ~_Fmt_iterator_buffer() {\r\n        if (this->_Size() != 0) {\r\n            _Flush();\r\n        }\r\n    }\r\n\r\n    _NODISCARD _OutputIt _Out() {\r\n        _Flush();\r\n        return _STD move(_Output);\r\n    }\r\n\r\n    _NODISCARD ptrdiff_t _Count() const noexcept {\r\n        return static_cast<ptrdiff_t>(_Traits::_Count() + this->_Size());\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nclass _Fmt_iterator_buffer<_Ty*, _Ty> final : public _Fmt_buffer<_Ty> {\r\nprivate:\r\n    void _Grow(size_t) final {}\r\n\r\npublic:\r\n    explicit _Fmt_iterator_buffer(_Ty* _Out, ptrdiff_t = 0) : _Fmt_buffer<_Ty>(_Out, 0, ~size_t{}) {}\r\n\r\n    _NODISCARD _Ty* _Out() noexcept {\r\n        return this->end();\r\n    }\r\n};\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _CharT>\r\nstruct _Phony_fmt_iter_for {\r\n    using difference_type = ptrdiff_t;\r\n\r\n    // These member functions are never defined:\r\n    _CharT& operator*() const;\r\n    _Phony_fmt_iter_for& operator++();\r\n    _Phony_fmt_iter_for operator++(int);\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, class _CharT>\r\nconcept formattable =\r\n    _Formattable_with<remove_reference_t<_Ty>, basic_format_context<_Phony_fmt_iter_for<_CharT>, _CharT>>;\r\n\r\ntemplate <class _CharT>\r\nstruct _Range_specs : _Fill_align_and_width_specs<_CharT> {\r\n    bool _No_brackets = false;\r\n    char _Type        = '\\0';\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, class _CharT = char>\r\n    requires same_as<remove_cvref_t<_Ty>, _Ty> && formattable<_Ty, _CharT>\r\nclass range_formatter {\r\nprivate:\r\n    formatter<_Ty, _CharT> _Underlying;\r\n    basic_string_view<_CharT> _Separator       = _STATICALLY_WIDEN(_CharT, \", \");\r\n    basic_string_view<_CharT> _Opening_bracket = _STATICALLY_WIDEN(_CharT, \"[\");\r\n    basic_string_view<_CharT> _Closing_bracket = _STATICALLY_WIDEN(_CharT, \"]\");\r\n    _Range_specs<_CharT> _Specs;\r\n\r\npublic:\r\n    constexpr void set_separator(basic_string_view<_CharT> _Sep) noexcept {\r\n        _Separator = _Sep;\r\n    }\r\n\r\n    constexpr void set_brackets(basic_string_view<_CharT> _Opening, basic_string_view<_CharT> _Closing) noexcept {\r\n        _Opening_bracket = _Opening;\r\n        _Closing_bracket = _Closing;\r\n    }\r\n\r\n    _NODISCARD constexpr formatter<_Ty, _CharT>& underlying() noexcept {\r\n        return _Underlying;\r\n    }\r\n\r\n    _NODISCARD constexpr const formatter<_Ty, _CharT>& underlying() const noexcept {\r\n        return _Underlying;\r\n    }\r\n\r\n    template <class _ParseContext>\r\n    constexpr _ParseContext::iterator parse(_ParseContext& _Ctx); // defined in <format>\r\n\r\n    template <_RANGES input_range _Range, class _FormatContext>\r\n        requires formattable<_RANGES range_reference_t<_Range>, _CharT>\r\n              && same_as<remove_cvref_t<_RANGES range_reference_t<_Range>>, _Ty>\r\n    _FormatContext::iterator format(_Range&& _Rng, _FormatContext& _Ctx) const {\r\n        return _Format(_STD forward<_Range>(_Rng), _Ctx);\r\n    }\r\n\r\nprivate:\r\n    template <_RANGES input_range _Range, class _FormatContext>\r\n    _FormatContext::iterator _Format(_Range&&, _FormatContext&) const {\r\n        _Throw_format_error(\"Unsupported 'basic_format_context'.\");\r\n    }\r\n\r\n    template <_RANGES input_range _Range, class _FormatContext>\r\n        requires _Is_specialization_v<typename _FormatContext::iterator, back_insert_iterator>\r\n              && derived_from<typename _FormatContext::iterator::container_type, _Fmt_buffer<_CharT>>\r\n    _FormatContext::iterator _Format(_Range&& _Rng, _FormatContext& _Ctx) const; // defined in <format>\r\n};\r\n\r\ntemplate <class _Rng, class _CharT>\r\nconcept _Const_formattable_range =\r\n    _RANGES input_range<const _Rng> && formattable<_RANGES range_reference_t<const _Rng>, _CharT>;\r\n\r\ntemplate <class _Rng, class _CharT>\r\nusing _Fmt_maybe_const = conditional_t<_Const_formattable_range<_Rng, _CharT>, const _Rng, _Rng>;\r\n\r\ntemplate <range_format _Kind, _RANGES input_range _Rng, class _CharT>\r\nstruct _Range_default_formatter;\r\n\r\ntemplate <_RANGES input_range _Rng, class _CharT>\r\nstruct _Range_default_formatter<range_format::sequence, _Rng, _CharT> {\r\nprivate:\r\n    using _Range_type = _Fmt_maybe_const<_Rng, _CharT>;\r\n\r\n    range_formatter<remove_cvref_t<_RANGES range_reference_t<_Range_type>>, _CharT> _Underlying;\r\n\r\npublic:\r\n    constexpr void set_separator(const basic_string_view<_CharT> _Sep) noexcept {\r\n        _Underlying.set_separator(_Sep);\r\n    }\r\n\r\n    constexpr void set_brackets(\r\n        const basic_string_view<_CharT> _Opening, const basic_string_view<_CharT> _Closing) noexcept {\r\n        _Underlying.set_brackets(_Opening, _Closing);\r\n    }\r\n\r\n    template <class _ParseContext>\r\n    constexpr _ParseContext::iterator parse(_ParseContext& _Ctx) {\r\n        return _Underlying.parse(_Ctx);\r\n    }\r\n\r\n    template <class _FormatContext>\r\n    _FormatContext::iterator format(_Range_type& _Elems, _FormatContext& _Ctx) const {\r\n        return _Underlying.format(_Elems, _Ctx);\r\n    }\r\n};\r\n\r\ntemplate <_RANGES input_range _Rng, class _CharT>\r\nstruct _Range_default_formatter<range_format::map, _Rng, _CharT> {\r\nprivate:\r\n    using _Map_type     = _Fmt_maybe_const<_Rng, _CharT>;\r\n    using _Element_type = remove_cvref_t<_RANGES range_reference_t<_Map_type>>;\r\n\r\n    range_formatter<_Element_type, _CharT> _Underlying;\r\n\r\npublic:\r\n    constexpr _Range_default_formatter()\r\n        noexcept(is_nothrow_default_constructible_v<range_formatter<_Element_type, _CharT>>) /* strengthened */ {\r\n        static_assert(_Is_two_tuple<_Element_type>, \"the element type of the formatted range must be either pair<T, U> \"\r\n                                                    \"or tuple<T, U> (N4981 [format.range.fmtmap]/1)\");\r\n\r\n        _Underlying.set_brackets(_STATICALLY_WIDEN(_CharT, \"{\"), _STATICALLY_WIDEN(_CharT, \"}\"));\r\n        _Underlying.underlying().set_brackets({}, {});\r\n        _Underlying.underlying().set_separator(_STATICALLY_WIDEN(_CharT, \": \"));\r\n    }\r\n\r\n    template <class _ParseContext>\r\n    constexpr _ParseContext::iterator parse(_ParseContext& _Ctx) {\r\n        return _Underlying.parse(_Ctx);\r\n    }\r\n\r\n    template <class _FormatContext>\r\n    _FormatContext::iterator format(_Map_type& _Rx, _FormatContext& _Ctx) const {\r\n        return _Underlying.format(_Rx, _Ctx);\r\n    }\r\n};\r\n\r\ntemplate <_RANGES input_range _Rng, class _CharT>\r\nstruct _Range_default_formatter<range_format::set, _Rng, _CharT> {\r\nprivate:\r\n    using _Set_type = _Fmt_maybe_const<_Rng, _CharT>;\r\n    range_formatter<remove_cvref_t<_RANGES range_reference_t<_Set_type>>, _CharT> _Underlying;\r\n\r\npublic:\r\n    constexpr _Range_default_formatter() noexcept(is_nothrow_default_constructible_v<\r\n        range_formatter<remove_cvref_t<_RANGES range_reference_t<_Set_type>>, _CharT>>) /* strengthened */ {\r\n        _Underlying.set_brackets(_STATICALLY_WIDEN(_CharT, \"{\"), _STATICALLY_WIDEN(_CharT, \"}\"));\r\n    }\r\n\r\n    template <class _ParseContext>\r\n    constexpr _ParseContext::iterator parse(_ParseContext& _Ctx) {\r\n        return _Underlying.parse(_Ctx);\r\n    }\r\n\r\n    template <class _FormatContext>\r\n    _FormatContext::iterator format(_Set_type& _Rx, _FormatContext& _Ctx) const {\r\n        return _Underlying.format(_Rx, _Ctx);\r\n    }\r\n};\r\n\r\ntemplate <range_format _Kind, _RANGES input_range _Rng, class _CharT>\r\n    requires (_Kind == range_format::string || _Kind == range_format::debug_string)\r\nstruct _Range_default_formatter<_Kind, _Rng, _CharT> {\r\nprivate:\r\n    static_assert(is_same_v<remove_cvref_t<_RANGES range_reference_t<_Rng>>, _CharT>,\r\n        \"the element type of the formatted range must be the character type used in formatting \"\r\n        \"(N4981 [format.range.fmtstr]/1)\");\r\n\r\n    using _Range_type = _Maybe_const<_RANGES input_range<const _Rng>, _Rng>;\r\n\r\n    formatter<basic_string_view<_CharT>, _CharT> _Underlying; // avoid copying the string if possible\r\n\r\npublic:\r\n    template <class _ParseContext>\r\n    constexpr _ParseContext::iterator parse(_ParseContext& _Ctx) {\r\n        auto _Iter = _Underlying.parse(_Ctx);\r\n        if constexpr (_Kind == range_format::debug_string) {\r\n            _Underlying.set_debug_format();\r\n        }\r\n        return _Iter;\r\n    }\r\n\r\n    template <class _FormatContext>\r\n    _FormatContext::iterator format(_Range_type& _Rx, _FormatContext& _Ctx) const {\r\n        if constexpr (_RANGES contiguous_range<_Range_type>) {\r\n            const auto _Dist = _RANGES distance(_Rx);\r\n            const auto _Size = _STD _To_unsigned_like(_Dist);\r\n\r\n            if (!_STD in_range<size_t>(_Size)) {\r\n                _Throw_format_error(\"Formatted range is too long.\");\r\n            }\r\n\r\n            const auto _First = _RANGES begin(_Rx);\r\n            const basic_string_view<_CharT> _Str(_STD to_address(_First), _STD to_address(_First + _Dist));\r\n            return _Underlying.format(_Str, _Ctx);\r\n        } else {\r\n            return _Underlying.format(basic_string<_CharT>{from_range, _Rx}, _Ctx);\r\n        }\r\n    }\r\n};\r\n\r\n// the deleted default constructor makes it \"disabled\" as per N4981 [format.formatter.spec]/5\r\n\r\ntemplate <_RANGES input_range _Rng, _Format_supported_charT _CharT>\r\n    requires _Formatting_enabled_range<_Rng>\r\nstruct formatter<_Rng, _CharT> {\r\n    formatter()                            = delete;\r\n    formatter(const formatter&)            = delete;\r\n    formatter& operator=(const formatter&) = delete;\r\n};\r\n\r\ntemplate <_RANGES input_range _Rng, _Format_supported_charT _CharT>\r\n    requires _Formatting_enabled_range<_Rng> && formattable<_RANGES range_reference_t<_Rng>, _CharT>\r\nstruct formatter<_Rng, _CharT> : _Range_default_formatter<format_kind<_Rng>, _Rng, _CharT> {};\r\n\r\n// Per LWG-3997, `_CharT` in library-provided `formatter` specializations is\r\n// constrained to character types supported by `format`.\r\ntemplate <class _AdaptorType, _Format_supported_charT _CharT, template <class> class _RefView>\r\nstruct _Adaptor_formatter_base {\r\nprivate:\r\n    using _Container             = _AdaptorType::container_type;\r\n    using _Maybe_const_container = _Fmt_maybe_const<_Container, _CharT>;\r\n    using _Maybe_const_adaptor   = _Maybe_const<is_const_v<_Maybe_const_container>, _AdaptorType>;\r\n\r\n    formatter<_RefView<_Maybe_const_container>, _CharT> _Underlying;\r\n\r\npublic:\r\n    template <class _ParseContext>\r\n    constexpr _ParseContext::iterator parse(_ParseContext& _Ctx) {\r\n        return _Underlying.parse(_Ctx);\r\n    }\r\n\r\n    template <class _FormatContext>\r\n    _FormatContext::iterator format(_Maybe_const_adaptor& _Adaptor, _FormatContext& _Ctx) const {\r\n        struct _Container_exposer : _AdaptorType {\r\n            using _AdaptorType::c;\r\n\r\n            _Container_exposer(const _Container_exposer&)            = delete;\r\n            _Container_exposer& operator=(const _Container_exposer&) = delete;\r\n            ~_Container_exposer()                                    = delete;\r\n        };\r\n\r\n        constexpr auto _Mem_cont_ptr = &_Container_exposer::c;\r\n        return _Underlying.format(_Adaptor.*_Mem_cont_ptr, _Ctx);\r\n    }\r\n};\r\n\r\ntemplate <class _CharT, formattable<_CharT>... _Types>\r\nclass _Tuple_formatter_common_base {\r\nprivate:\r\n    tuple<formatter<remove_cvref_t<_Types>, _CharT>...> _Underlying;\r\n    basic_string_view<_CharT> _Separator       = _STATICALLY_WIDEN(_CharT, \", \");\r\n    basic_string_view<_CharT> _Opening_bracket = _STATICALLY_WIDEN(_CharT, \"(\");\r\n    basic_string_view<_CharT> _Closing_bracket = _STATICALLY_WIDEN(_CharT, \")\");\r\n\r\n    _Fill_align_and_width_specs<_CharT> _Specs;\r\n\r\nprotected:\r\n    static constexpr bool _Is_const_formattable = (formattable<const _Types, _CharT> && ...);\r\n\r\n    template <class _FormatContext, class... _ArgTypes>\r\n    _FormatContext::iterator _Format(_FormatContext& _Fmt_ctx, _ArgTypes&... _Args) const; // defined in <format>\r\n\r\npublic:\r\n    constexpr void set_separator(const basic_string_view<_CharT> _Sep) noexcept {\r\n        _Separator = _Sep;\r\n    }\r\n\r\n    constexpr void set_brackets(\r\n        const basic_string_view<_CharT> _Opening, const basic_string_view<_CharT> _Closing) noexcept {\r\n        _Opening_bracket = _Opening;\r\n        _Closing_bracket = _Closing;\r\n    }\r\n\r\n    template <class _ParseContext>\r\n    constexpr _ParseContext::iterator parse(_ParseContext& _Ctx); // defined in <format>\r\n};\r\n\r\n// formatter definition for all pairs and tuples, the deleted default constructor\r\n// makes it \"disabled\" as per N4971 [format.formatter.spec]/5\r\n\r\ntemplate <class _TupleOrPair, class _CharT>\r\nstruct _Tuple_formatter_base {\r\n    _Tuple_formatter_base()                                        = delete;\r\n    _Tuple_formatter_base(const _Tuple_formatter_base&)            = delete;\r\n    _Tuple_formatter_base& operator=(const _Tuple_formatter_base&) = delete;\r\n};\r\n\r\ntemplate <class _CharT, formattable<_CharT> _Ty1, formattable<_CharT> _Ty2>\r\nstruct _Tuple_formatter_base<pair<_Ty1, _Ty2>, _CharT> : _Tuple_formatter_common_base<_CharT, _Ty1, _Ty2> {\r\nprivate:\r\n    using _Base           = _Tuple_formatter_common_base<_CharT, _Ty1, _Ty2>;\r\n    using _Formatted_type = _Maybe_const<_Base::_Is_const_formattable, pair<_Ty1, _Ty2>>;\r\n\r\npublic:\r\n    template <class _FormatContext>\r\n    _FormatContext::iterator format(_Formatted_type& _Elems, _FormatContext& _Ctx) const {\r\n        return this->_Format(_Ctx, _Elems.first, _Elems.second);\r\n    }\r\n};\r\n\r\ntemplate <class _CharT, formattable<_CharT>... _Types>\r\nstruct _Tuple_formatter_base<tuple<_Types...>, _CharT> : _Tuple_formatter_common_base<_CharT, _Types...> {\r\nprivate:\r\n    using _Base           = _Tuple_formatter_common_base<_CharT, _Types...>;\r\n    using _Formatted_type = _Maybe_const<_Base::_Is_const_formattable, tuple<_Types...>>;\r\n\r\npublic:\r\n    template <class _FormatContext>\r\n    _FormatContext::iterator format(_Formatted_type& _Elems, _FormatContext& _Ctx) const {\r\n        return _STD apply([this, &_Ctx](auto&... _Args) { return this->_Format(_Ctx, _Args...); }, _Elems);\r\n    }\r\n};\r\n\r\n// specializations for tuple-like types that are input ranges and not formattable as tuples\r\n\r\ntemplate <_Format_supported_charT _CharT, class _Ty1, class _Ty2>\r\n    requires (!formattable<_Ty1, _CharT> || !formattable<_Ty2, _CharT>)\r\n          // TRANSITION, clang-format, () should be redundant\r\n          && (_RANGES input_range<pair<_Ty1, _Ty2>>) && _Formatting_enabled_range<pair<_Ty1, _Ty2>>\r\n          && formattable<_RANGES range_reference_t<pair<_Ty1, _Ty2>>, _CharT>\r\nstruct _Tuple_formatter_base<pair<_Ty1, _Ty2>, _CharT>\r\n    : _Range_default_formatter<format_kind<pair<_Ty1, _Ty2>>, pair<_Ty1, _Ty2>, _CharT> {};\r\n\r\ntemplate <_Format_supported_charT _CharT, class... _Types>\r\n    requires ((!formattable<_Types, _CharT>) || ...)\r\n          // TRANSITION, clang-format, () should be redundant\r\n          && (_RANGES input_range<tuple<_Types...>>) && _Formatting_enabled_range<tuple<_Types...>>\r\n          && formattable<_RANGES range_reference_t<tuple<_Types...>>, _CharT>\r\nstruct _Tuple_formatter_base<tuple<_Types...>, _CharT>\r\n    : _Range_default_formatter<format_kind<tuple<_Types...>>, tuple<_Types...>, _CharT> {};\r\n\r\n// Per LWG-3997, `_CharT` in library-provided `formatter` specializations is\r\n// constrained to character types supported by `format`.\r\n\r\ntemplate <_Format_supported_charT _CharT, class _Ty1, class _Ty2>\r\nstruct formatter<pair<_Ty1, _Ty2>, _CharT> : _Tuple_formatter_base<pair<_Ty1, _Ty2>, _CharT> {};\r\n\r\ntemplate <_Format_supported_charT _CharT, class... _Types>\r\nstruct formatter<tuple<_Types...>, _CharT> : _Tuple_formatter_base<tuple<_Types...>, _CharT> {};\r\n#endif // _HAS_CXX23\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_RANGES_TUPLE_FORMATTER_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_sanitizer_annotate_container.hpp",
    "content": "// __msvc_sanitizer_annotate_container.hpp internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef __MSVC_SANITIZER_ANNOTATE_CONTAINER_HPP\r\n#define __MSVC_SANITIZER_ANNOTATE_CONTAINER_HPP\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// The following macros change the behavior of this file:\r\n//   - _DISABLE_STL_ANNOTATION: Disable ASan annotations in the standard library\r\n//     (this will be auto-defined on unsupported platforms)\r\n//     + _DISABLE_STRING_ANNOTATION: same, but for only `basic_string`\r\n//     + _DISABLE_VECTOR_ANNOTATION: same, but for only `vector`\r\n//   - _ENABLE_STL_ANNOTATION_ON_UNSUPPORTED_PLATFORMS: Don't auto-disable ASan annotations\r\n//   - _ANNOTATE_STL: Even when ASan annotations are disabled, insert the code for annotating into the STL anyways;\r\n//     this is useful when building static libraries which may be linked against both ASan and non-ASan binaries.\r\n//     + _ANNOTATE_STRING: same, but only for `basic_string`\r\n//     + _ANNOTATE_VECTOR: same, but only for `vector`\r\n\r\n#if !defined(_DISABLE_STL_ANNOTATION) && !defined(_ENABLE_STL_ANNOTATION_ON_UNSUPPORTED_PLATFORMS)\r\n\r\n#if defined(_M_ARM64EC) || defined(_M_CEE_PURE)\r\n#define _DISABLE_STL_ANNOTATION\r\n#endif // ^^^ unsupported platform ^^^\r\n\r\n#endif // ^^^ !defined(_DISABLE_STL_ANNOTATION) && !defined(_ENABLE_STL_ANNOTATION_ON_UNSUPPORTED_PLATFORMS) ^^^\r\n\r\n#ifdef _DISABLE_STL_ANNOTATION\r\n\r\n#ifdef _ENABLE_STL_ANNOTATION_ON_UNSUPPORTED_PLATFORMS\r\n#error _ENABLE_STL_ANNOTATION_ON_UNSUPPORTED_PLATFORMS and _DISABLE_STL_ANNOTATION are mutually exclusive\r\n#endif // ^^^ defined(_ENABLE_STL_ANNOTATION_ON_UNSUPPORTED_PLATFORMS) ^^^\r\n\r\n#ifndef _DISABLE_STRING_ANNOTATION\r\n#define _DISABLE_STRING_ANNOTATION\r\n#endif // ^^^ !defined(_DISABLE_STRING_ANNOTATION) ^^^\r\n#ifndef _DISABLE_VECTOR_ANNOTATION\r\n#define _DISABLE_VECTOR_ANNOTATION\r\n#endif // ^^^ !defined(_DISABLE_VECTOR_ANNOTATION) ^^^\r\n\r\n#endif // ^^^ defined(_DISABLE_STL_ANNOTATION) ^^^\r\n\r\n#ifdef _ANNOTATE_STL\r\n\r\n#ifndef _ANNOTATE_STRING\r\n#define _ANNOTATE_STRING\r\n#endif // ^^^ !defined(_ANNOTATE_STRING) ^^^\r\n\r\n#ifndef _ANNOTATE_VECTOR\r\n#define _ANNOTATE_VECTOR\r\n#endif // ^^^ !defined(_ANNOTATE_VECTOR) ^^^\r\n\r\n#endif // ^^^ defined(_ANNOTATE_STL) ^^^\r\n\r\n#ifdef __SANITIZE_ADDRESS__\r\n\r\n#define _ACTIVATE_STRING_ANNOTATION\r\n#define _INSERT_STRING_ANNOTATION\r\n#define _ACTIVATE_VECTOR_ANNOTATION\r\n#define _INSERT_VECTOR_ANNOTATION\r\n\r\n#elif defined(__clang__) // ^^^ defined(__SANITIZE_ADDRESS__) / defined(__clang__) vvv\r\n\r\n#if __has_feature(address_sanitizer)\r\n#define _ACTIVATE_STRING_ANNOTATION\r\n#define _INSERT_STRING_ANNOTATION\r\n#define _ACTIVATE_VECTOR_ANNOTATION\r\n#define _INSERT_VECTOR_ANNOTATION\r\n#pragma comment(linker, \"/INFERASANLIBS\")\r\n#endif // __has_feature(address_sanitizer)\r\n\r\n#endif // ^^^ defined(__clang__) ^^^\r\n\r\n\r\n#ifdef _DISABLE_STRING_ANNOTATION\r\n#undef _ACTIVATE_STRING_ANNOTATION\r\n#undef _INSERT_STRING_ANNOTATION\r\n#endif // ^^^ defined(_DISABLE_STRING_ANNOTATION) ^^^\r\n#ifdef _DISABLE_VECTOR_ANNOTATION\r\n#undef _ACTIVATE_VECTOR_ANNOTATION\r\n#undef _INSERT_VECTOR_ANNOTATION\r\n#endif // ^^^ defined(_DISABLE_VECTOR_ANNOTATION) ^^^\r\n\r\n#ifdef _ANNOTATE_STRING\r\n#define _INSERT_STRING_ANNOTATION\r\n#endif // ^^^ defined(_ANNOTATE_STRING) ^^^\r\n#ifdef _ANNOTATE_VECTOR\r\n#define _INSERT_VECTOR_ANNOTATION\r\n#endif // ^^^ defined(_ANNOTATE_VECTOR) ^^^\r\n\r\n\r\n#ifndef _INSERT_STRING_ANNOTATION\r\n#pragma detect_mismatch(\"annotate_string\", \"0\")\r\n#endif // ^^^ !defined(_INSERT_STRING_ANNOTATION) ^^^\r\n#ifndef _INSERT_VECTOR_ANNOTATION\r\n#pragma detect_mismatch(\"annotate_vector\", \"0\")\r\n#endif // ^^^ !defined(_INSERT_VECTOR_ANNOTATION) ^^^\r\n\r\n#ifdef _ACTIVATE_STRING_ANNOTATION\r\n#pragma comment(lib, \"stl_asan\")\r\n#pragma detect_mismatch(\"annotate_string\", \"1\")\r\n#endif // ^^^ defined(_ACTIVATE_STRING_ANNOTATION) ^^^\r\n#ifdef _ACTIVATE_VECTOR_ANNOTATION\r\n#pragma comment(lib, \"stl_asan\")\r\n#pragma detect_mismatch(\"annotate_vector\", \"1\")\r\n#endif // ^^^ defined(_ACTIVATE_VECTOR_ANNOTATION) ^^^\r\n\r\n#undef _ACTIVATE_STRING_ANNOTATION\r\n#undef _ACTIVATE_VECTOR_ANNOTATION\r\n\r\nextern \"C\" {\r\n#ifdef _INSERT_VECTOR_ANNOTATION\r\nextern const bool _Asan_vector_should_annotate;\r\n#endif\r\n\r\n#ifdef _INSERT_STRING_ANNOTATION\r\nextern const bool _Asan_string_should_annotate;\r\n#endif\r\n} // extern \"C\"\r\n\r\n#if defined(_INSERT_VECTOR_ANNOTATION) || defined(_INSERT_STRING_ANNOTATION)\r\nextern \"C\" {\r\n// This must match ASan's primary declaration, which isn't marked `noexcept`.\r\nvoid __cdecl __sanitizer_annotate_contiguous_container(\r\n    const void* _First, const void* _End, const void* _Old_last, const void* _New_last);\r\n} // extern \"C\"\r\n\r\n#ifdef _M_ARM64EC\r\n#pragma comment(linker, \\\r\n    \"/alternatename:#__sanitizer_annotate_contiguous_container=#__sanitizer_annotate_contiguous_container_default\")\r\n#pragma comment(linker, \\\r\n    \"/alternatename:__sanitizer_annotate_contiguous_container=__sanitizer_annotate_contiguous_container_default\")\r\n#pragma comment(linker, \"/alternatename:#_Asan_vector_should_annotate=#_Asan_vector_should_annotate_default\")\r\n#pragma comment(linker, \"/alternatename:_Asan_vector_should_annotate=_Asan_vector_should_annotate_default\")\r\n#pragma comment(linker, \"/alternatename:#_Asan_string_should_annotate=#_Asan_string_should_annotate_default\")\r\n#pragma comment(linker, \"/alternatename:_Asan_string_should_annotate=_Asan_string_should_annotate_default\")\r\n#elif defined(_M_HYBRID)\r\n#pragma comment(linker, \\\r\n    \"/alternatename:#__sanitizer_annotate_contiguous_container=#__sanitizer_annotate_contiguous_container_default\")\r\n#pragma comment(linker, \\\r\n    \"/alternatename:___sanitizer_annotate_contiguous_container=___sanitizer_annotate_contiguous_container_default\")\r\n#pragma comment(linker, \"/alternatename:#_Asan_vector_should_annotate=#_Asan_vector_should_annotate_default\")\r\n#pragma comment(linker, \"/alternatename:__Asan_vector_should_annotate=__Asan_vector_should_annotate_default\")\r\n#pragma comment(linker, \"/alternatename:#_Asan_string_should_annotate=#_Asan_string_should_annotate_default\")\r\n#pragma comment(linker, \"/alternatename:__Asan_string_should_annotate=__Asan_string_should_annotate_default\")\r\n#elif defined(_M_IX86)\r\n#pragma comment(linker, \\\r\n    \"/alternatename:___sanitizer_annotate_contiguous_container=___sanitizer_annotate_contiguous_container_default\")\r\n#pragma comment(linker, \"/alternatename:__Asan_vector_should_annotate=__Asan_vector_should_annotate_default\")\r\n#pragma comment(linker, \"/alternatename:__Asan_string_should_annotate=__Asan_string_should_annotate_default\")\r\n#elif defined(_M_X64) || defined(_M_ARM64)\r\n#pragma comment(linker, \\\r\n    \"/alternatename:__sanitizer_annotate_contiguous_container=__sanitizer_annotate_contiguous_container_default\")\r\n#pragma comment(linker, \"/alternatename:_Asan_vector_should_annotate=_Asan_vector_should_annotate_default\")\r\n#pragma comment(linker, \"/alternatename:_Asan_string_should_annotate=_Asan_string_should_annotate_default\")\r\n#else // ^^^ known architecture / unknown architecture vvv\r\n#error Unknown architecture\r\n#endif // ^^^ unknown architecture ^^^\r\n\r\n#endif // ^^^ insert ASan annotations ^^^\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_SANITIZER_ANNOTATE_CONTAINER_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_string_view.hpp",
    "content": "// __msvc_string_view.hpp internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// (<string_view> without emitting non-C++17 warnings)\r\n\r\n#ifndef __MSVC_STRING_VIEW_HPP\r\n#define __MSVC_STRING_VIEW_HPP\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <iosfwd>\r\n#include <xutility>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\nextern \"C\" {\r\n// The \"noalias\" attribute tells the compiler optimizer that pointers going into these hand-vectorized algorithms\r\n// won't be stored beyond the lifetime of the function, and that the function will only reference arrays denoted by\r\n// those pointers. The optimizer also assumes in that case that a pointer parameter is not returned to the caller via\r\n// the return value, so functions using \"noalias\" must usually return void. This attribute is valuable because these\r\n// functions are in native code objects that the compiler cannot analyze. In the absence of the noalias attribute, the\r\n// compiler has to assume that the denoted arrays are \"globally address taken\", and that any later calls to\r\n// unanalyzable routines may modify those arrays.\r\n\r\n#if _VECTORIZED_FIND_FIRST_OF\r\n__declspec(noalias) size_t __stdcall __std_find_first_of_trivial_pos_1(\r\n    const void* _Haystack, size_t _Haystack_length, const void* _Needle, size_t _Needle_length) noexcept;\r\n__declspec(noalias) size_t __stdcall __std_find_first_of_trivial_pos_2(\r\n    const void* _Haystack, size_t _Haystack_length, const void* _Needle, size_t _Needle_length) noexcept;\r\n__declspec(noalias) size_t __stdcall __std_find_first_of_trivial_pos_4(\r\n    const void* _Haystack, size_t _Haystack_length, const void* _Needle, size_t _Needle_length) noexcept;\r\n__declspec(noalias) size_t __stdcall __std_find_first_of_trivial_pos_8(\r\n    const void* _Haystack, size_t _Haystack_length, const void* _Needle, size_t _Needle_length) noexcept;\r\n#endif // ^^^ _VECTORIZED_FIND_FIRST_OF ^^^\r\n\r\n#if _VECTORIZED_FIND_LAST_OF\r\n__declspec(noalias) size_t __stdcall __std_find_last_of_trivial_pos_1(\r\n    const void* _Haystack, size_t _Haystack_length, const void* _Needle, size_t _Needle_length) noexcept;\r\n__declspec(noalias) size_t __stdcall __std_find_last_of_trivial_pos_2(\r\n    const void* _Haystack, size_t _Haystack_length, const void* _Needle, size_t _Needle_length) noexcept;\r\n#endif // ^^^ _VECTORIZED_FIND_LAST_OF ^^^\r\n\r\n#if _VECTORIZED_FIND\r\nconst void* __stdcall __std_find_not_ch_1(const void* _First, const void* _Last, uint8_t _Val) noexcept;\r\nconst void* __stdcall __std_find_not_ch_2(const void* _First, const void* _Last, uint16_t _Val) noexcept;\r\nconst void* __stdcall __std_find_not_ch_4(const void* _First, const void* _Last, uint32_t _Val) noexcept;\r\nconst void* __stdcall __std_find_not_ch_8(const void* _First, const void* _Last, uint64_t _Val) noexcept;\r\n#endif // ^^^ _VECTORIZED_FIND ^^^\r\n\r\n#if _VECTORIZED_FIND_LAST\r\n__declspec(noalias) size_t __stdcall __std_find_last_not_ch_pos_1(\r\n    const void* _First, const void* _Last, uint8_t _Val) noexcept;\r\n__declspec(noalias) size_t __stdcall __std_find_last_not_ch_pos_2(\r\n    const void* _First, const void* _Last, uint16_t _Val) noexcept;\r\n__declspec(noalias) size_t __stdcall __std_find_last_not_ch_pos_4(\r\n    const void* _First, const void* _Last, uint32_t _Val) noexcept;\r\n__declspec(noalias) size_t __stdcall __std_find_last_not_ch_pos_8(\r\n    const void* _First, const void* _Last, uint64_t _Val) noexcept;\r\n#endif // ^^^ _VECTORIZED_FIND_LAST ^^^\r\n\r\n#if _VECTORIZED_FIND_FIRST_OF\r\n__declspec(noalias) size_t __stdcall __std_find_first_not_of_trivial_pos_1(\r\n    const void* _Haystack, size_t _Haystack_length, const void* _Needle, size_t _Needle_length) noexcept;\r\n__declspec(noalias) size_t __stdcall __std_find_first_not_of_trivial_pos_2(\r\n    const void* _Haystack, size_t _Haystack_length, const void* _Needle, size_t _Needle_length) noexcept;\r\n#endif // ^^^ _VECTORIZED_FIND_FIRST_OF ^^^\r\n\r\n#if _VECTORIZED_FIND_LAST_OF\r\n__declspec(noalias) size_t __stdcall __std_find_last_not_of_trivial_pos_1(\r\n    const void* _Haystack, size_t _Haystack_length, const void* _Needle, size_t _Needle_length) noexcept;\r\n__declspec(noalias) size_t __stdcall __std_find_last_not_of_trivial_pos_2(\r\n    const void* _Haystack, size_t _Haystack_length, const void* _Needle, size_t _Needle_length) noexcept;\r\n#endif // ^^^ _VECTORIZED_FIND_LAST_OF ^^^\r\n\r\n} // extern \"C\"\r\n\r\n_STD_BEGIN\r\n\r\n#if _VECTORIZED_FIND_FIRST_OF\r\ntemplate <class _Ty1, class _Ty2>\r\nsize_t _Find_first_of_pos_vectorized(const _Ty1* const _Haystack, const size_t _Haystack_length,\r\n    const _Ty2* const _Needle, const size_t _Needle_length) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(sizeof(_Ty1) == sizeof(_Ty2));\r\n    if constexpr (sizeof(_Ty1) == 1) {\r\n        return ::__std_find_first_of_trivial_pos_1(_Haystack, _Haystack_length, _Needle, _Needle_length);\r\n    } else if constexpr (sizeof(_Ty1) == 2) {\r\n        return ::__std_find_first_of_trivial_pos_2(_Haystack, _Haystack_length, _Needle, _Needle_length);\r\n    } else if constexpr (sizeof(_Ty1) == 4) {\r\n        return ::__std_find_first_of_trivial_pos_4(_Haystack, _Haystack_length, _Needle, _Needle_length);\r\n    } else if constexpr (sizeof(_Ty1) == 8) {\r\n        return ::__std_find_first_of_trivial_pos_8(_Haystack, _Haystack_length, _Needle, _Needle_length);\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_FIND_FIRST_OF ^^^\r\n\r\n#if _VECTORIZED_FIND_LAST_OF\r\ntemplate <class _Ty1, class _Ty2>\r\nsize_t _Find_last_of_pos_vectorized(const _Ty1* const _Haystack, const size_t _Haystack_length,\r\n    const _Ty2* const _Needle, const size_t _Needle_length) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(sizeof(_Ty1) == sizeof(_Ty2));\r\n    if constexpr (sizeof(_Ty1) == 1) {\r\n        return ::__std_find_last_of_trivial_pos_1(_Haystack, _Haystack_length, _Needle, _Needle_length);\r\n    } else if constexpr (sizeof(_Ty1) == 2) {\r\n        return ::__std_find_last_of_trivial_pos_2(_Haystack, _Haystack_length, _Needle, _Needle_length);\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_FIND_LAST_OF ^^^\r\n\r\n#if _VECTORIZED_FIND\r\ntemplate <class _Ty>\r\nconst _Ty* _Find_not_ch_vectorized(const _Ty* const _First, const _Ty* const _Last, const _Ty _Ch) noexcept {\r\n    if constexpr (sizeof(_Ty) == 1) {\r\n        return static_cast<const _Ty*>(::__std_find_not_ch_1(_First, _Last, static_cast<uint8_t>(_Ch)));\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        return static_cast<const _Ty*>(::__std_find_not_ch_2(_First, _Last, static_cast<uint16_t>(_Ch)));\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        return static_cast<const _Ty*>(::__std_find_not_ch_4(_First, _Last, static_cast<uint32_t>(_Ch)));\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        return static_cast<const _Ty*>(::__std_find_not_ch_8(_First, _Last, static_cast<uint64_t>(_Ch)));\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_FIND ^^^\r\n\r\n#if _VECTORIZED_FIND_LAST\r\ntemplate <class _Ty>\r\nsize_t _Find_last_not_ch_pos_vectorized(const _Ty* const _First, const _Ty* const _Last, const _Ty _Ch) noexcept {\r\n    if constexpr (sizeof(_Ty) == 1) {\r\n        return ::__std_find_last_not_ch_pos_1(_First, _Last, static_cast<uint8_t>(_Ch));\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        return ::__std_find_last_not_ch_pos_2(_First, _Last, static_cast<uint16_t>(_Ch));\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        return ::__std_find_last_not_ch_pos_4(_First, _Last, static_cast<uint32_t>(_Ch));\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        return ::__std_find_last_not_ch_pos_8(_First, _Last, static_cast<uint64_t>(_Ch));\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_FIND_LAST ^^^\r\n\r\n#if _VECTORIZED_FIND_FIRST_OF\r\ntemplate <class _Ty1, class _Ty2>\r\nsize_t _Find_first_not_of_pos_vectorized(const _Ty1* const _Haystack, const size_t _Haystack_length,\r\n    const _Ty2* const _Needle, const size_t _Needle_length) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(sizeof(_Ty1) == sizeof(_Ty2));\r\n    if constexpr (sizeof(_Ty1) == 1) {\r\n        return ::__std_find_first_not_of_trivial_pos_1(_Haystack, _Haystack_length, _Needle, _Needle_length);\r\n    } else if constexpr (sizeof(_Ty1) == 2) {\r\n        return ::__std_find_first_not_of_trivial_pos_2(_Haystack, _Haystack_length, _Needle, _Needle_length);\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_FIND_FIRST_OF ^^^\r\n\r\n#if _VECTORIZED_FIND_LAST_OF\r\ntemplate <class _Ty1, class _Ty2>\r\nsize_t _Find_last_not_of_pos_vectorized(const _Ty1* const _Haystack, const size_t _Haystack_length,\r\n    const _Ty2* const _Needle, const size_t _Needle_length) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(sizeof(_Ty1) == sizeof(_Ty2));\r\n    if constexpr (sizeof(_Ty1) == 1) {\r\n        return ::__std_find_last_not_of_trivial_pos_1(_Haystack, _Haystack_length, _Needle, _Needle_length);\r\n    } else if constexpr (sizeof(_Ty1) == 2) {\r\n        return ::__std_find_last_not_of_trivial_pos_2(_Haystack, _Haystack_length, _Needle, _Needle_length);\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_FIND_LAST_OF ^^^\r\n\r\n#ifdef __clang__\r\n#define _HAS_MEMCPY_MEMMOVE_INTRINSICS 1\r\n#else // ^^^ use __builtin_memcpy and __builtin_memmove / use workaround vvv\r\n#define _HAS_MEMCPY_MEMMOVE_INTRINSICS 0 // TRANSITION, DevCom-1046483 (MSVC) and VSO-1129974 (EDG)\r\n#endif // ^^^ use workaround ^^^\r\n\r\ntemplate <class _Elem, class _Int_type>\r\nstruct _Char_traits { // properties of a string or stream element\r\n    using char_type  = _Elem;\r\n    using int_type   = _Int_type;\r\n    using pos_type   = streampos;\r\n    using off_type   = streamoff;\r\n    using state_type = _Mbstatet;\r\n#if _HAS_CXX20\r\n    using comparison_category = strong_ordering;\r\n#endif // _HAS_CXX20\r\n\r\n    // For copy/move, we can uniformly call memcpy/memmove (or their builtin versions) for all element types.\r\n\r\n    static _CONSTEXPR20 _Elem* copy(_Out_writes_all_(_Count) _Elem* const _First1,\r\n        _In_reads_(_Count) const _Elem* const _First2, const size_t _Count) noexcept /* strengthened */ {\r\n        // copy [_First2, _First2 + _Count) to [_First1, ...)\r\n#if _HAS_MEMCPY_MEMMOVE_INTRINSICS\r\n        __builtin_memcpy(_First1, _First2, _Count * sizeof(_Elem));\r\n#else // ^^^ _HAS_MEMCPY_MEMMOVE_INTRINSICS / !_HAS_MEMCPY_MEMMOVE_INTRINSICS vvv\r\n#if _HAS_CXX20\r\n        if (_STD is_constant_evaluated()) {\r\n            // pre: [_First1, _First1 + _Count) and [_First2, _First2 + _Count) do not overlap\r\n            for (size_t _Idx = 0; _Idx != _Count; ++_Idx) {\r\n                _First1[_Idx] = _First2[_Idx];\r\n            }\r\n\r\n            return _First1;\r\n        }\r\n#endif // _HAS_CXX20\r\n\r\n        _CSTD memcpy(_First1, _First2, _Count * sizeof(_Elem));\r\n#endif // ^^^ !_HAS_MEMCPY_MEMMOVE_INTRINSICS ^^^\r\n\r\n        return _First1;\r\n    }\r\n\r\n    _Pre_satisfies_(_Dest_size >= _Count) static _CONSTEXPR20 _Elem* _Copy_s(_Out_writes_all_(_Dest_size)\r\n                                                                                 _Elem* const _First1,\r\n        const size_t _Dest_size, _In_reads_(_Count) const _Elem* const _First2, const size_t _Count) noexcept {\r\n        // copy [_First2, _First2 + _Count) to [_First1, _First1 + _Dest_size)\r\n        _STL_VERIFY(_Count <= _Dest_size, \"invalid argument\");\r\n        return copy(_First1, _First2, _Count);\r\n    }\r\n\r\n    static _CONSTEXPR20 _Elem* move(_Out_writes_all_(_Count) _Elem* const _First1,\r\n        _In_reads_(_Count) const _Elem* const _First2, const size_t _Count) noexcept /* strengthened */ {\r\n        // copy [_First2, _First2 + _Count) to [_First1, ...), allowing overlap\r\n#if _HAS_MEMCPY_MEMMOVE_INTRINSICS\r\n        __builtin_memmove(_First1, _First2, _Count * sizeof(_Elem));\r\n#else // ^^^ _HAS_MEMCPY_MEMMOVE_INTRINSICS / !_HAS_MEMCPY_MEMMOVE_INTRINSICS vvv\r\n#if _HAS_CXX20\r\n        if (_STD is_constant_evaluated()) {\r\n            // dest: [_First1, _First1 + _Count)\r\n            // src: [_First2, _First2 + _Count)\r\n            // We need to handle overlapping ranges.\r\n            // If _First1 is in the src range, we need a backward loop.\r\n            // Otherwise, the forward loop works (even if the back of dest overlaps the front of src).\r\n\r\n            // Usually, we would compare pointers with less-than, even though they could belong to different arrays.\r\n            // However, we're not allowed to do that during constant evaluation, so we need a linear scan for equality.\r\n            bool _Loop_forward = true;\r\n\r\n            for (const _Elem* _Src = _First2; _Src != _First2 + _Count; ++_Src) {\r\n                if (_First1 == _Src) {\r\n                    _Loop_forward = false;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (_Loop_forward) {\r\n                for (size_t _Idx = 0; _Idx != _Count; ++_Idx) {\r\n                    _First1[_Idx] = _First2[_Idx];\r\n                }\r\n            } else {\r\n                for (size_t _Idx = _Count; _Idx != 0; --_Idx) {\r\n                    _First1[_Idx - 1] = _First2[_Idx - 1];\r\n                }\r\n            }\r\n\r\n            return _First1;\r\n        }\r\n#endif // _HAS_CXX20\r\n\r\n        _CSTD memmove(_First1, _First2, _Count * sizeof(_Elem));\r\n#endif // ^^^ !_HAS_MEMCPY_MEMMOVE_INTRINSICS ^^^\r\n\r\n        return _First1;\r\n    }\r\n\r\n    // For compare/length/find/assign, we can't uniformly call CRT functions (or their builtin versions).\r\n    // 8-bit: memcmp/strlen/memchr/memset; 16-bit: wmemcmp/wcslen/wmemchr/wmemset; 32-bit: nonexistent\r\n\r\n    _NODISCARD static _CONSTEXPR17 int compare(_In_reads_(_Count) const _Elem* _First1,\r\n        _In_reads_(_Count) const _Elem* _First2, size_t _Count) noexcept /* strengthened */ {\r\n        // compare [_First1, _First1 + _Count) with [_First2, ...)\r\n        for (; 0 < _Count; --_Count, ++_First1, ++_First2) {\r\n            if (*_First1 != *_First2) {\r\n                return *_First1 < *_First2 ? -1 : +1;\r\n            }\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static _CONSTEXPR17 size_t length(_In_z_ const _Elem* _First) noexcept /* strengthened */ {\r\n        // find length of null-terminated sequence\r\n        size_t _Count = 0;\r\n        while (*_First != _Elem()) {\r\n            ++_Count;\r\n            ++_First;\r\n        }\r\n\r\n        return _Count;\r\n    }\r\n\r\n    _NODISCARD static _CONSTEXPR17 const _Elem* find(\r\n        _In_reads_(_Count) const _Elem* _First, size_t _Count, const _Elem& _Ch) noexcept /* strengthened */ {\r\n        // look for _Ch in [_First, _First + _Count)\r\n        for (; 0 < _Count; --_Count, ++_First) {\r\n            if (*_First == _Ch) {\r\n                return _First;\r\n            }\r\n        }\r\n\r\n        return nullptr;\r\n    }\r\n\r\n    static _CONSTEXPR20 _Elem* assign(\r\n        _Out_writes_all_(_Count) _Elem* const _First, size_t _Count, const _Elem _Ch) noexcept /* strengthened */ {\r\n        // assign _Count * _Ch to [_First, ...)\r\n        for (_Elem* _Next = _First; _Count > 0; --_Count, ++_Next) {\r\n            *_Next = _Ch;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    static _CONSTEXPR17 void assign(_Elem& _Left, const _Elem& _Right) noexcept {\r\n        _Left = _Right;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool eq(const _Elem _Left, const _Elem _Right) noexcept {\r\n        return _Left == _Right;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool lt(const _Elem _Left, const _Elem _Right) noexcept {\r\n        return _Left < _Right;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Elem to_char_type(const int_type _Meta) noexcept {\r\n        return static_cast<_Elem>(_Meta);\r\n    }\r\n\r\n    _NODISCARD static constexpr int_type to_int_type(const _Elem _Ch) noexcept {\r\n        return static_cast<int_type>(_Ch);\r\n    }\r\n\r\n    _NODISCARD static constexpr bool eq_int_type(const int_type _Left, const int_type _Right) noexcept {\r\n        return _Left == _Right;\r\n    }\r\n\r\n    _NODISCARD static constexpr int_type not_eof(const int_type _Meta) noexcept {\r\n        return _Meta != eof() ? _Meta : !eof();\r\n    }\r\n\r\n    _NODISCARD static constexpr int_type eof() noexcept {\r\n        return static_cast<int_type>(EOF);\r\n    }\r\n};\r\n\r\ntemplate <class _Elem>\r\nstruct _WChar_traits : private _Char_traits<_Elem, unsigned short> {\r\n    // char_traits for the char16_t-likes: char16_t, wchar_t, unsigned short\r\nprivate:\r\n    using _Primary_char_traits = _Char_traits<_Elem, unsigned short>;\r\n\r\npublic:\r\n    using char_type  = _Elem;\r\n    using int_type   = unsigned short;\r\n    using pos_type   = streampos;\r\n    using off_type   = streamoff;\r\n    using state_type = mbstate_t;\r\n#if _HAS_CXX20\r\n    using comparison_category = strong_ordering;\r\n#endif // _HAS_CXX20\r\n\r\n    using _Primary_char_traits::_Copy_s;\r\n    using _Primary_char_traits::copy;\r\n    using _Primary_char_traits::move;\r\n\r\n    _NODISCARD static _CONSTEXPR17 int compare(_In_reads_(_Count) const _Elem* const _First1,\r\n        _In_reads_(_Count) const _Elem* const _First2, const size_t _Count) noexcept /* strengthened */ {\r\n        // compare [_First1, _First1 + _Count) with [_First2, ...)\r\n#if _VECTORIZED_MISMATCH\r\n        if (!_STD _Is_constant_evaluated()) {\r\n            // TRANSITION, GH-2289: Use vectorized algorithms for better performance than __builtin_wmemcmp.\r\n            const size_t _Pos = _Mismatch_vectorized<sizeof(_Elem)>(_First1, _First2, _Count);\r\n            if (_Pos == _Count) {\r\n                return 0;\r\n            } else {\r\n                return _First1[_Pos] < _First2[_Pos] ? -1 : +1;\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_MISMATCH ^^^\r\n\r\n        if constexpr (is_same_v<_Elem, wchar_t>) {\r\n            return __builtin_wmemcmp(_First1, _First2, _Count);\r\n        } else {\r\n            return _Primary_char_traits::compare(_First1, _First2, _Count);\r\n        }\r\n    }\r\n\r\n    _NODISCARD static _CONSTEXPR17 size_t length(_In_z_ const _Elem* _First) noexcept /* strengthened */ {\r\n        // find length of null-terminated sequence\r\n#if _HAS_CXX17\r\n        if (_STD _Is_constant_evaluated()) {\r\n            if constexpr (is_same_v<_Elem, wchar_t>) {\r\n                return __builtin_wcslen(_First);\r\n            } else {\r\n                return _Primary_char_traits::length(_First);\r\n            }\r\n        }\r\n#endif // _HAS_CXX17\r\n\r\n        return _CSTD wcslen(reinterpret_cast<const wchar_t*>(_First));\r\n    }\r\n\r\n    _NODISCARD static _CONSTEXPR17 const _Elem* find(\r\n        _In_reads_(_Count) const _Elem* _First, const size_t _Count, const _Elem& _Ch) noexcept /* strengthened */ {\r\n        // look for _Ch in [_First, _First + _Count)\r\n#if _HAS_CXX17\r\n        if (_STD _Is_constant_evaluated()) {\r\n            if constexpr (is_same_v<_Elem, wchar_t>) {\r\n                return __builtin_wmemchr(_First, _Ch, _Count);\r\n            } else {\r\n                return _Primary_char_traits::find(_First, _Count, _Ch);\r\n            }\r\n        }\r\n#endif // _HAS_CXX17\r\n\r\n        return reinterpret_cast<const _Elem*>(_CSTD wmemchr(reinterpret_cast<const wchar_t*>(_First), _Ch, _Count));\r\n    }\r\n\r\n    static _CONSTEXPR20 _Elem* assign(\r\n        _Out_writes_all_(_Count) _Elem* const _First, size_t _Count, const _Elem _Ch) noexcept /* strengthened */ {\r\n        // assign _Count * _Ch to [_First, ...)\r\n#if _HAS_CXX20\r\n        if (_STD is_constant_evaluated()) {\r\n            return _Primary_char_traits::assign(_First, _Count, _Ch);\r\n        }\r\n#endif // _HAS_CXX20\r\n\r\n        return reinterpret_cast<_Elem*>(_CSTD wmemset(reinterpret_cast<wchar_t*>(_First), _Ch, _Count));\r\n    }\r\n\r\n    static _CONSTEXPR17 void assign(_Elem& _Left, const _Elem& _Right) noexcept {\r\n        _Left = _Right;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool eq(const _Elem _Left, const _Elem _Right) noexcept {\r\n        return _Left == _Right;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool lt(const _Elem _Left, const _Elem _Right) noexcept {\r\n        return _Left < _Right;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Elem to_char_type(const int_type _Meta) noexcept {\r\n        return _Meta;\r\n    }\r\n\r\n    _NODISCARD static constexpr int_type to_int_type(const _Elem _Ch) noexcept {\r\n        return _Ch;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool eq_int_type(const int_type _Left, const int_type _Right) noexcept {\r\n        return _Left == _Right;\r\n    }\r\n\r\n    _NODISCARD static constexpr int_type not_eof(const int_type _Meta) noexcept {\r\n        return _Meta != eof() ? _Meta : static_cast<int_type>(!eof());\r\n    }\r\n\r\n    _NODISCARD static constexpr int_type eof() noexcept {\r\n        return WEOF;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Elem>\r\nstruct char_traits : _Char_traits<_Elem, long> {}; // properties of a string or stream unknown element\r\n\r\ntemplate <>\r\nstruct char_traits<char16_t> : _WChar_traits<char16_t> {};\r\n\r\ntemplate <>\r\nstruct char_traits<char32_t> : _Char_traits<char32_t, unsigned int> {};\r\n\r\ntemplate <>\r\nstruct char_traits<wchar_t> : _WChar_traits<wchar_t> {};\r\n\r\n#ifdef _CRTBLD\r\ntemplate <>\r\nstruct char_traits<unsigned short> : _WChar_traits<unsigned short> {};\r\n#endif // defined(_CRTBLD)\r\n\r\n// signed char and other unsigned integral types are supported as an extension.\r\n// Use of other arithmetic types and nullptr_t should be rejected.\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_implementation_handled_char_like_type = is_arithmetic_v<_Ty> || is_null_pointer_v<_Ty>;\r\n\r\ntemplate <class>\r\nconstexpr bool _Is_implementation_handled_char_traits = false;\r\ntemplate <class _Elem>\r\nconstexpr bool _Is_implementation_handled_char_traits<char_traits<_Elem>> =\r\n    _Is_implementation_handled_char_like_type<_Elem>;\r\n\r\n#if defined(__cpp_char8_t) && !defined(__clang__) && !defined(__EDG__)\r\n#define _HAS_U8_INTRINSICS 1\r\n#else // ^^^ Use intrinsics for char8_t / don't use said intrinsics vvv\r\n#define _HAS_U8_INTRINSICS 0\r\n#endif // Detect u8 intrinsics\r\n\r\ntemplate <class _Elem, class _Int_type>\r\nstruct _Narrow_char_traits : private _Char_traits<_Elem, _Int_type> {\r\n    // Implement char_traits for narrow character types char and char8_t\r\nprivate:\r\n    using _Primary_char_traits = _Char_traits<_Elem, _Int_type>;\r\n\r\npublic:\r\n    using char_type  = _Elem;\r\n    using int_type   = _Int_type;\r\n    using pos_type   = streampos;\r\n    using off_type   = streamoff;\r\n    using state_type = mbstate_t;\r\n#if _HAS_CXX20\r\n    using comparison_category = strong_ordering;\r\n#endif // _HAS_CXX20\r\n\r\n    using _Primary_char_traits::_Copy_s;\r\n    using _Primary_char_traits::copy;\r\n    using _Primary_char_traits::move;\r\n\r\n    _NODISCARD static _CONSTEXPR17 int compare(_In_reads_(_Count) const _Elem* const _First1,\r\n        _In_reads_(_Count) const _Elem* const _First2, const size_t _Count) noexcept /* strengthened */ {\r\n        // compare [_First1, _First1 + _Count) with [_First2, ...)\r\n#if _HAS_CXX17\r\n        return __builtin_memcmp(_First1, _First2, _Count);\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n        return _CSTD memcmp(_First1, _First2, _Count);\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n    }\r\n\r\n    _NODISCARD static _CONSTEXPR17 size_t length(_In_z_ const _Elem* const _First) noexcept /* strengthened */ {\r\n        // find length of null-terminated string\r\n#if _HAS_CXX17\r\n#ifdef __cpp_char8_t\r\n        if constexpr (is_same_v<_Elem, char8_t>) {\r\n#if _HAS_U8_INTRINSICS\r\n            return __builtin_u8strlen(_First);\r\n#else // ^^^ use u8 intrinsics / no u8 intrinsics vvv\r\n            return _Primary_char_traits::length(_First);\r\n#endif // ^^^ no u8 intrinsics ^^^\r\n        } else\r\n#endif // defined(__cpp_char8_t)\r\n        {\r\n            return __builtin_strlen(_First);\r\n        }\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n        return _CSTD strlen(reinterpret_cast<const char*>(_First));\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n    }\r\n\r\n    _NODISCARD static _CONSTEXPR17 const _Elem* find(_In_reads_(_Count) const _Elem* const _First, const size_t _Count,\r\n        const _Elem& _Ch) noexcept /* strengthened */ {\r\n        // look for _Ch in [_First, _First + _Count)\r\n#if _HAS_CXX17\r\n#ifdef __cpp_char8_t\r\n        if constexpr (is_same_v<_Elem, char8_t>) {\r\n#if _HAS_U8_INTRINSICS\r\n            return __builtin_u8memchr(_First, _Ch, _Count);\r\n#else // ^^^ use u8 intrinsics / no u8 intrinsics vvv\r\n            return _Primary_char_traits::find(_First, _Count, _Ch);\r\n#endif // ^^^ no u8 intrinsics ^^^\r\n        } else\r\n#endif // defined(__cpp_char8_t)\r\n        {\r\n            return __builtin_char_memchr(_First, _Ch, _Count);\r\n        }\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n        return static_cast<const _Elem*>(_CSTD memchr(_First, _Ch, _Count));\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n    }\r\n\r\n    static _CONSTEXPR20 _Elem* assign(\r\n        _Out_writes_all_(_Count) _Elem* const _First, size_t _Count, const _Elem _Ch) noexcept /* strengthened */ {\r\n        // assign _Count * _Ch to [_First, ...)\r\n#if _HAS_CXX20\r\n        if (_STD is_constant_evaluated()) {\r\n            return _Primary_char_traits::assign(_First, _Count, _Ch);\r\n        }\r\n#endif // _HAS_CXX20\r\n\r\n        return static_cast<_Elem*>(_CSTD memset(_First, _Ch, _Count));\r\n    }\r\n\r\n    static _CONSTEXPR17 void assign(_Elem& _Left, const _Elem& _Right) noexcept {\r\n        _Left = _Right;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool eq(const _Elem _Left, const _Elem _Right) noexcept {\r\n        return _Left == _Right;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool lt(const _Elem _Left, const _Elem _Right) noexcept {\r\n        return static_cast<unsigned char>(_Left) < static_cast<unsigned char>(_Right);\r\n    }\r\n\r\n    _NODISCARD static constexpr _Elem to_char_type(const int_type _Meta) noexcept {\r\n        return static_cast<_Elem>(_Meta);\r\n    }\r\n\r\n    _NODISCARD static constexpr int_type to_int_type(const _Elem _Ch) noexcept {\r\n        return static_cast<unsigned char>(_Ch);\r\n    }\r\n\r\n    _NODISCARD static constexpr bool eq_int_type(const int_type _Left, const int_type _Right) noexcept {\r\n        return _Left == _Right;\r\n    }\r\n\r\n    _NODISCARD static constexpr int_type not_eof(const int_type _Meta) noexcept {\r\n        return _Meta != eof() ? _Meta : !eof();\r\n    }\r\n\r\n    _NODISCARD static constexpr int_type eof() noexcept {\r\n        return static_cast<int_type>(EOF);\r\n    }\r\n};\r\n\r\n#undef _HAS_U8_INTRINSICS\r\n#undef _HAS_MEMCPY_MEMMOVE_INTRINSICS\r\n\r\ntemplate <>\r\nstruct char_traits<char> : _Narrow_char_traits<char, int> {}; // properties of a string or stream char element\r\n\r\n#ifdef __cpp_char8_t\r\ntemplate <>\r\nstruct char_traits<char8_t> : _Narrow_char_traits<char8_t, unsigned int> {};\r\n#endif // defined(__cpp_char8_t)\r\n\r\ntemplate <class _Elem, class _Traits, class _SizeT>\r\nbasic_ostream<_Elem, _Traits>& _Insert_string(\r\n    basic_ostream<_Elem, _Traits>& _Ostr, const _Elem* const _Data, const _SizeT _Size) {\r\n    // insert a character-type sequence into _Ostr as if through a basic_string copy\r\n    using _Ostr_t                    = basic_ostream<_Elem, _Traits>;\r\n    typename _Ostr_t::iostate _State = _Ostr_t::goodbit;\r\n\r\n    _SizeT _Pad;\r\n    if (_Ostr.width() <= 0 || static_cast<_SizeT>(_Ostr.width()) <= _Size) {\r\n        _Pad = 0;\r\n    } else {\r\n        _Pad = static_cast<_SizeT>(_Ostr.width()) - _Size;\r\n    }\r\n\r\n    const typename _Ostr_t::sentry _Ok(_Ostr);\r\n\r\n    if (!_Ok) {\r\n        _State |= _Ostr_t::badbit;\r\n    } else { // state okay, insert characters\r\n        _TRY_IO_BEGIN\r\n        if ((_Ostr.flags() & _Ostr_t::adjustfield) != _Ostr_t::left) {\r\n            for (; 0 < _Pad; --_Pad) { // pad on left\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ostr.fill()))) {\r\n                    _State |= _Ostr_t::badbit; // insertion failed, quit\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (_State == _Ostr_t::goodbit\r\n            && _Ostr.rdbuf()->sputn(_Data, static_cast<streamsize>(_Size)) != static_cast<streamsize>(_Size)) {\r\n            _State |= _Ostr_t::badbit;\r\n        } else {\r\n            for (; 0 < _Pad; --_Pad) { // pad on right\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Ostr.rdbuf()->sputc(_Ostr.fill()))) {\r\n                    _State |= _Ostr_t::badbit; // insertion failed, quit\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        _Ostr.width(0);\r\n        _CATCH_IO_(_Ostr_t, _Ostr)\r\n    }\r\n\r\n    _Ostr.setstate(_State);\r\n    return _Ostr;\r\n}\r\n\r\ntemplate <class _Traits>\r\nusing _Traits_ch_t = typename _Traits::char_type;\r\n\r\ntemplate <class _Traits>\r\nusing _Traits_ptr_t = const typename _Traits::char_type*;\r\n\r\ntemplate <class _Traits>\r\nconstexpr bool _Traits_equal(_In_reads_(_Left_size) const _Traits_ptr_t<_Traits> _Left, const size_t _Left_size,\r\n    _In_reads_(_Right_size) const _Traits_ptr_t<_Traits> _Right, const size_t _Right_size) noexcept {\r\n    // compare [_Left, _Left + _Left_size) to [_Right, _Right + _Right_size) for equality using _Traits\r\n    if (_Left_size != _Right_size) {\r\n        return false;\r\n    }\r\n\r\n    if (_Left_size == 0u) {\r\n        return true;\r\n    }\r\n\r\n    return _Traits::compare(_Left, _Right, _Left_size) == 0;\r\n}\r\n\r\ntemplate <class _Traits>\r\nconstexpr int _Traits_compare(_In_reads_(_Left_size) const _Traits_ptr_t<_Traits> _Left, const size_t _Left_size,\r\n    _In_reads_(_Right_size) const _Traits_ptr_t<_Traits> _Right, const size_t _Right_size) noexcept {\r\n    // compare [_Left, _Left + _Left_size) to [_Right, _Right + _Right_size) using _Traits\r\n    const int _Ans = _Traits::compare(_Left, _Right, (_STD min) (_Left_size, _Right_size));\r\n\r\n    if (_Ans != 0) {\r\n        return _Ans;\r\n    }\r\n\r\n    if (_Left_size < _Right_size) {\r\n        return -1;\r\n    }\r\n\r\n    if (_Left_size > _Right_size) {\r\n        return 1;\r\n    }\r\n\r\n    return 0;\r\n}\r\n\r\ntemplate <class _Traits>\r\nconstexpr size_t _Traits_find(_In_reads_(_Hay_size) const _Traits_ptr_t<_Traits> _Haystack, const size_t _Hay_size,\r\n    const size_t _Start_at, _In_reads_(_Needle_size) const _Traits_ptr_t<_Traits> _Needle,\r\n    const size_t _Needle_size) noexcept {\r\n    // search [_Haystack, _Haystack + _Hay_size) for [_Needle, _Needle + _Needle_size), at/after _Start_at\r\n    if (_Needle_size > _Hay_size || _Start_at > _Hay_size - _Needle_size) {\r\n        // xpos cannot exist, report failure\r\n        // N4950 [string.view.find]/3 says:\r\n        // 1. _Start_at <= xpos\r\n        // 2. xpos + _Needle_size <= _Hay_size;\r\n        // therefore:\r\n        // 3. _Needle_size <= _Hay_size (by 2) (checked above)\r\n        // 4. _Start_at + _Needle_size <= _Hay_size (substitute 1 into 2)\r\n        // 5. _Start_at <= _Hay_size - _Needle_size (4, move _Needle_size to other side) (also checked above)\r\n        return static_cast<size_t>(-1);\r\n    }\r\n\r\n    if (_Needle_size == 0) { // empty string always matches if xpos is possible\r\n        return _Start_at;\r\n    }\r\n\r\n#if _VECTORIZED_SEARCH\r\n    if constexpr (_Is_implementation_handled_char_traits<_Traits>) {\r\n        if (!_STD _Is_constant_evaluated()) {\r\n            const auto _End = _Haystack + _Hay_size;\r\n            const auto _Ptr = _STD _Search_vectorized(_Haystack + _Start_at, _End, _Needle, _Needle_size);\r\n\r\n            if (_Ptr != _End) {\r\n                return static_cast<size_t>(_Ptr - _Haystack);\r\n            } else {\r\n                return static_cast<size_t>(-1);\r\n            }\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_SEARCH ^^^\r\n\r\n    const auto _Possible_matches_end = _Haystack + (_Hay_size - _Needle_size) + 1;\r\n    for (auto _Match_try = _Haystack + _Start_at;; ++_Match_try) {\r\n        _Match_try = _Traits::find(_Match_try, static_cast<size_t>(_Possible_matches_end - _Match_try), *_Needle);\r\n        if (!_Match_try) { // didn't find first character; report failure\r\n            return static_cast<size_t>(-1);\r\n        }\r\n\r\n        if (_Traits::compare(_Match_try, _Needle, _Needle_size) == 0) { // found match\r\n            return static_cast<size_t>(_Match_try - _Haystack);\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _Traits>\r\nconstexpr size_t _Traits_find_ch(_In_reads_(_Hay_size) const _Traits_ptr_t<_Traits> _Haystack, const size_t _Hay_size,\r\n    const size_t _Start_at, const _Traits_ch_t<_Traits> _Ch) noexcept {\r\n    // search [_Haystack, _Haystack + _Hay_size) for _Ch, at/after _Start_at\r\n    if (_Start_at >= _Hay_size) {\r\n        return static_cast<size_t>(-1); // (npos) no room for match\r\n    }\r\n\r\n#if _VECTORIZED_FIND\r\n    if constexpr (_Is_implementation_handled_char_traits<_Traits>) {\r\n        if (!_STD _Is_constant_evaluated()) {\r\n            const auto _End = _Haystack + _Hay_size;\r\n            const auto _Ptr = _STD _Find_vectorized(_Haystack + _Start_at, _End, _Ch);\r\n\r\n            if (_Ptr != _End) {\r\n                return static_cast<size_t>(_Ptr - _Haystack);\r\n            } else {\r\n                return static_cast<size_t>(-1); // (npos) no match\r\n            }\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_FIND ^^^\r\n\r\n    const auto _Found_at = _Traits::find(_Haystack + _Start_at, _Hay_size - _Start_at, _Ch);\r\n    if (_Found_at) {\r\n        return static_cast<size_t>(_Found_at - _Haystack);\r\n    }\r\n\r\n    return static_cast<size_t>(-1); // (npos) no match\r\n}\r\n\r\ntemplate <class _Traits>\r\nconstexpr size_t _Traits_rfind(_In_reads_(_Hay_size) const _Traits_ptr_t<_Traits> _Haystack, const size_t _Hay_size,\r\n    const size_t _Start_at, _In_reads_(_Needle_size) const _Traits_ptr_t<_Traits> _Needle,\r\n    const size_t _Needle_size) noexcept {\r\n    // search [_Haystack, _Haystack + _Hay_size) for [_Needle, _Needle + _Needle_size) beginning before _Start_at\r\n    if (_Needle_size == 0) {\r\n        return (_STD min) (_Start_at, _Hay_size); // empty string always matches\r\n    }\r\n\r\n    if (_Needle_size > _Hay_size) { // no room for match\r\n        return static_cast<size_t>(-1);\r\n    }\r\n\r\n    const size_t _Actual_start_at = (_STD min) (_Start_at, _Hay_size - _Needle_size);\r\n\r\n#if _VECTORIZED_FIND_END\r\n    if constexpr (_Is_implementation_handled_char_traits<_Traits>) {\r\n        if (!_STD _Is_constant_evaluated()) {\r\n            // _Find_end_vectorized takes into account the needle length when locating the search start.\r\n            // As a potentially earlier start position can be specified, we need to take it into account,\r\n            // and pick between the maximum possible start position and the specified one,\r\n            // and then add _Needle_size, so that it is subtracted back in _Find_end_vectorized.\r\n            const auto _End = _Haystack + _Actual_start_at + _Needle_size;\r\n            const auto _Ptr = _STD _Find_end_vectorized(_Haystack, _End, _Needle, _Needle_size);\r\n\r\n            if (_Ptr != _End) {\r\n                return static_cast<size_t>(_Ptr - _Haystack);\r\n            } else {\r\n                return static_cast<size_t>(-1);\r\n            }\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_FIND_END ^^^\r\n\r\n    for (auto _Match_try = _Haystack + _Actual_start_at;; --_Match_try) {\r\n        if (_Traits::eq(*_Match_try, *_Needle) && _Traits::compare(_Match_try, _Needle, _Needle_size) == 0) {\r\n            return static_cast<size_t>(_Match_try - _Haystack); // found a match\r\n        }\r\n\r\n        if (_Match_try == _Haystack) {\r\n            return static_cast<size_t>(-1); // at beginning, no more chance for match\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _Traits>\r\nconstexpr size_t _Traits_rfind_ch(_In_reads_(_Hay_size) const _Traits_ptr_t<_Traits> _Haystack, const size_t _Hay_size,\r\n    const size_t _Start_at, const _Traits_ch_t<_Traits> _Ch) noexcept {\r\n    // search [_Haystack, _Haystack + _Hay_size) for _Ch before _Start_at\r\n\r\n    if (_Hay_size == 0) { // no room for match\r\n        return static_cast<size_t>(-1);\r\n    }\r\n\r\n    const size_t _Actual_start_at = (_STD min) (_Start_at, _Hay_size - 1);\r\n\r\n#if _VECTORIZED_FIND_LAST\r\n    if constexpr (_Is_implementation_handled_char_traits<_Traits>) {\r\n        if (!_STD _Is_constant_evaluated()) {\r\n            const auto _End = _Haystack + _Actual_start_at + 1;\r\n            const auto _Ptr = _STD _Find_last_vectorized(_Haystack, _End, _Ch);\r\n\r\n            if (_Ptr != _End) {\r\n                return static_cast<size_t>(_Ptr - _Haystack);\r\n            } else {\r\n                return static_cast<size_t>(-1);\r\n            }\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_FIND_LAST ^^^\r\n\r\n    for (auto _Match_try = _Haystack + _Actual_start_at;; --_Match_try) {\r\n        if (_Traits::eq(*_Match_try, _Ch)) {\r\n            return static_cast<size_t>(_Match_try - _Haystack); // found a match\r\n        }\r\n\r\n        if (_Match_try == _Haystack) {\r\n            return static_cast<size_t>(-1); // at beginning, no more chance for match\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _Elem, bool = _Is_character<_Elem>::value>\r\nclass _String_bitmap { // _String_bitmap for character types\r\npublic:\r\n    constexpr bool _Mark(const _Elem* _First, const _Elem* const _Last) noexcept {\r\n        // mark this bitmap such that the characters in [_First, _Last) are intended to match\r\n        // returns whether all inputs can be placed in the bitmap\r\n        for (; _First != _Last; ++_First) {\r\n            _Matches[static_cast<unsigned char>(*_First)] = true;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    constexpr bool _Match(const _Elem _Ch) const noexcept { // test if _Ch is in the bitmap\r\n        // CodeQL [SM01954] This index is valid: we cast to unsigned char and the array has 256 elements.\r\n        return _Matches[static_cast<unsigned char>(_Ch)];\r\n    }\r\n\r\nprivate:\r\n    bool _Matches[256] = {};\r\n};\r\n\r\ntemplate <class _Elem>\r\nclass _String_bitmap<_Elem, false> { // _String_bitmap for wchar_t/unsigned short/char16_t/char32_t/etc. types\r\npublic:\r\n    static_assert(is_unsigned_v<_Elem>, \"Standard char_traits is only provided for char, wchar_t, char8_t, char16_t, \"\r\n                                        \"and char32_t. See N4988 [char.traits]. \"\r\n                                        \"Visual C++ accepts other unsigned integral types as an extension.\");\r\n\r\n    constexpr bool _Mark(const _Elem* _First, const _Elem* const _Last) noexcept {\r\n        // mark this bitmap such that the characters in [_First, _Last) are intended to match\r\n        // returns whether all inputs can be placed in the bitmap\r\n        for (; _First != _Last; ++_First) {\r\n            const auto _Ch = *_First;\r\n            if (_Ch >= 256U) {\r\n                return false;\r\n            }\r\n\r\n            _Matches[static_cast<unsigned char>(_Ch)] = true;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    constexpr bool _Match(const _Elem _Ch) const noexcept { // test if _Ch is in the bitmap\r\n        return _Ch < 256U && _Matches[_Ch];\r\n    }\r\n\r\nprivate:\r\n    bool _Matches[256] = {};\r\n};\r\n\r\ntemplate <class _Traits>\r\nconstexpr size_t _Traits_find_first_of(_In_reads_(_Hay_size) const _Traits_ptr_t<_Traits> _Haystack,\r\n    const size_t _Hay_size, const size_t _Start_at, _In_reads_(_Needle_size) const _Traits_ptr_t<_Traits> _Needle,\r\n    const size_t _Needle_size) noexcept {\r\n    // in [_Haystack, _Haystack + _Hay_size), look for one of [_Needle, _Needle + _Needle_size), at/after _Start_at\r\n    if (_Needle_size == 0 || _Start_at >= _Hay_size) { // no match possible\r\n        return static_cast<size_t>(-1);\r\n    }\r\n\r\n    const auto _Hay_start = _Haystack + _Start_at;\r\n    const auto _Hay_end   = _Haystack + _Hay_size;\r\n\r\n    if constexpr (_Is_implementation_handled_char_traits<_Traits>) {\r\n#if _VECTORIZED_FIND_FIRST_OF\r\n        if (!_STD _Is_constant_evaluated()) {\r\n            const size_t _Remaining_size = _Hay_size - _Start_at;\r\n            if (_Remaining_size + _Needle_size >= _Threshold_find_first_of) {\r\n                size_t _Pos = _Find_first_of_pos_vectorized(_Hay_start, _Remaining_size, _Needle, _Needle_size);\r\n                if (_Pos != static_cast<size_t>(-1)) {\r\n                    _Pos += _Start_at;\r\n                }\r\n                return _Pos;\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_FIND_FIRST_OF ^^^\r\n\r\n        _String_bitmap<typename _Traits::char_type> _Matches;\r\n\r\n        if (_Matches._Mark(_Needle, _Needle + _Needle_size)) {\r\n            for (auto _Match_try = _Hay_start; _Match_try < _Hay_end; ++_Match_try) {\r\n                if (_Matches._Match(*_Match_try)) {\r\n                    return static_cast<size_t>(_Match_try - _Haystack); // found a match\r\n                }\r\n            }\r\n            return static_cast<size_t>(-1); // no match\r\n        }\r\n\r\n        // couldn't put one of the characters into the bitmap, fall back to serial algorithm\r\n    }\r\n\r\n    for (auto _Match_try = _Hay_start; _Match_try < _Hay_end; ++_Match_try) {\r\n        if (_Traits::find(_Needle, _Needle_size, *_Match_try)) {\r\n            return static_cast<size_t>(_Match_try - _Haystack); // found a match\r\n        }\r\n    }\r\n\r\n    return static_cast<size_t>(-1); // no match\r\n}\r\n\r\ntemplate <class _Traits>\r\nconstexpr size_t _Traits_find_last_of(_In_reads_(_Hay_size) const _Traits_ptr_t<_Traits> _Haystack,\r\n    const size_t _Hay_size, const size_t _Start_at, _In_reads_(_Needle_size) const _Traits_ptr_t<_Traits> _Needle,\r\n    const size_t _Needle_size) noexcept {\r\n    // in [_Haystack, _Haystack + _Hay_size), look for last of [_Needle, _Needle + _Needle_size), before _Start_at\r\n    if (_Needle_size == 0 || _Hay_size == 0) { // not worth searching\r\n        return static_cast<size_t>(-1);\r\n    }\r\n\r\n    const auto _Hay_start = (_STD min) (_Start_at, _Hay_size - 1);\r\n\r\n    if constexpr (_Is_implementation_handled_char_traits<_Traits>) {\r\n        using _Elem = typename _Traits::char_type;\r\n#if _VECTORIZED_FIND_LAST_OF\r\n        if constexpr (sizeof(_Elem) <= 2) {\r\n            if (!_STD _Is_constant_evaluated()) {\r\n                const size_t _Remaining_size = _Hay_start + 1;\r\n                if (_Remaining_size + _Needle_size >= _Threshold_find_first_of) { // same threshold for first/last\r\n                    return _Find_last_of_pos_vectorized(_Haystack, _Remaining_size, _Needle, _Needle_size);\r\n                }\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_FIND_LAST_OF ^^^\r\n\r\n        _String_bitmap<_Elem> _Matches;\r\n        if (_Matches._Mark(_Needle, _Needle + _Needle_size)) {\r\n            for (auto _Match_try = _Haystack + _Hay_start;; --_Match_try) {\r\n                if (_Matches._Match(*_Match_try)) {\r\n                    return static_cast<size_t>(_Match_try - _Haystack); // found a match\r\n                }\r\n\r\n                if (_Match_try == _Haystack) {\r\n                    return static_cast<size_t>(-1); // at beginning, no more chance for match\r\n                }\r\n            }\r\n        }\r\n\r\n        // couldn't put one of the characters into the bitmap, fall back to serial algorithm\r\n    }\r\n\r\n    for (auto _Match_try = _Haystack + _Hay_start;; --_Match_try) {\r\n        if (_Traits::find(_Needle, _Needle_size, *_Match_try)) {\r\n            return static_cast<size_t>(_Match_try - _Haystack); // found a match\r\n        }\r\n\r\n        if (_Match_try == _Haystack) {\r\n            return static_cast<size_t>(-1); // at beginning, no more chance for match\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _Traits>\r\nconstexpr size_t _Traits_find_first_not_of(_In_reads_(_Hay_size) const _Traits_ptr_t<_Traits> _Haystack,\r\n    const size_t _Hay_size, const size_t _Start_at, _In_reads_(_Needle_size) const _Traits_ptr_t<_Traits> _Needle,\r\n    const size_t _Needle_size) noexcept {\r\n    // in [_Haystack, _Haystack + _Hay_size), look for none of [_Needle, _Needle + _Needle_size), at/after _Start_at\r\n    if (_Start_at >= _Hay_size) { // no room for match\r\n        return static_cast<size_t>(-1);\r\n    }\r\n\r\n    const auto _Hay_start = _Haystack + _Start_at;\r\n    const auto _Hay_end   = _Haystack + _Hay_size;\r\n\r\n    if constexpr (_Is_implementation_handled_char_traits<_Traits>) {\r\n        using _Elem = typename _Traits::char_type;\r\n#if _VECTORIZED_FIND_FIRST_OF\r\n        if constexpr (sizeof(_Elem) <= 2) {\r\n            if (!_STD _Is_constant_evaluated()) {\r\n                const size_t _Remaining_size = _Hay_size - _Start_at;\r\n                if (_Remaining_size + _Needle_size >= _Threshold_find_first_of) {\r\n                    size_t _Pos = _Find_first_not_of_pos_vectorized(_Hay_start, _Remaining_size, _Needle, _Needle_size);\r\n                    if (_Pos != static_cast<size_t>(-1)) {\r\n                        _Pos += _Start_at;\r\n                    }\r\n                    return _Pos;\r\n                }\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_FIND_FIRST_OF ^^^\r\n\r\n        _String_bitmap<_Elem> _Matches;\r\n        if (_Matches._Mark(_Needle, _Needle + _Needle_size)) {\r\n            for (auto _Match_try = _Hay_start; _Match_try < _Hay_end; ++_Match_try) {\r\n                if (!_Matches._Match(*_Match_try)) {\r\n                    return static_cast<size_t>(_Match_try - _Haystack); // found a match\r\n                }\r\n            }\r\n            return static_cast<size_t>(-1); // no match\r\n        }\r\n\r\n        // couldn't put one of the characters into the bitmap, fall back to the serial algorithm\r\n    }\r\n\r\n    for (auto _Match_try = _Hay_start; _Match_try < _Hay_end; ++_Match_try) {\r\n        if (!_Traits::find(_Needle, _Needle_size, *_Match_try)) {\r\n            return static_cast<size_t>(_Match_try - _Haystack); // found a match\r\n        }\r\n    }\r\n\r\n    return static_cast<size_t>(-1); // no match\r\n}\r\n\r\ntemplate <class _Traits>\r\nconstexpr size_t _Traits_find_not_ch(_In_reads_(_Hay_size) const _Traits_ptr_t<_Traits> _Haystack,\r\n    const size_t _Hay_size, const size_t _Start_at, const _Traits_ch_t<_Traits> _Ch) noexcept {\r\n    // search [_Haystack, _Haystack + _Hay_size) for any value other than _Ch, at/after _Start_at\r\n    if (_Start_at >= _Hay_size) { // no room for match\r\n        return static_cast<size_t>(-1); // no match\r\n    }\r\n\r\n    const auto _End = _Haystack + _Hay_size;\r\n\r\n#if _VECTORIZED_FIND\r\n    if constexpr (_Is_implementation_handled_char_traits<_Traits>) {\r\n        if (!_STD _Is_constant_evaluated()) {\r\n            const auto _Result = _STD _Find_not_ch_vectorized(_Haystack + _Start_at, _End, _Ch);\r\n            if (_Result != _End) {\r\n                return static_cast<size_t>(_Result - _Haystack);\r\n            } else {\r\n                return static_cast<size_t>(-1); // no match\r\n            }\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_FIND ^^^\r\n\r\n    for (auto _Match_try = _Haystack + _Start_at; _Match_try < _End; ++_Match_try) {\r\n        if (!_Traits::eq(*_Match_try, _Ch)) {\r\n            return static_cast<size_t>(_Match_try - _Haystack); // found a match\r\n        }\r\n    }\r\n\r\n    return static_cast<size_t>(-1); // no match\r\n}\r\n\r\ntemplate <class _Traits>\r\nconstexpr size_t _Traits_find_last_not_of(_In_reads_(_Hay_size) const _Traits_ptr_t<_Traits> _Haystack,\r\n    const size_t _Hay_size, const size_t _Start_at, _In_reads_(_Needle_size) const _Traits_ptr_t<_Traits> _Needle,\r\n    const size_t _Needle_size) noexcept {\r\n    // in [_Haystack, _Haystack + _Hay_size), look for none of [_Needle, _Needle + _Needle_size), before _Start_at\r\n    if (_Hay_size == 0) { // no match possible\r\n        return static_cast<size_t>(-1);\r\n    }\r\n\r\n    const auto _Hay_start = (_STD min) (_Start_at, _Hay_size - 1);\r\n\r\n    if constexpr (_Is_implementation_handled_char_traits<_Traits>) {\r\n        using _Elem = typename _Traits::char_type;\r\n#if _VECTORIZED_FIND_LAST_OF\r\n        if constexpr (sizeof(_Elem) <= 2) {\r\n            if (!_STD _Is_constant_evaluated()) {\r\n                const size_t _Remaining_size = _Hay_start + 1;\r\n                if (_Remaining_size + _Needle_size >= _Threshold_find_first_of) { // same threshold for first/last\r\n                    return _Find_last_not_of_pos_vectorized(_Haystack, _Remaining_size, _Needle, _Needle_size);\r\n                }\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_FIND_LAST_OF ^^^\r\n\r\n        _String_bitmap<_Elem> _Matches;\r\n        if (_Matches._Mark(_Needle, _Needle + _Needle_size)) {\r\n            for (auto _Match_try = _Haystack + _Hay_start;; --_Match_try) {\r\n                if (!_Matches._Match(*_Match_try)) {\r\n                    return static_cast<size_t>(_Match_try - _Haystack); // found a match\r\n                }\r\n\r\n                if (_Match_try == _Haystack) {\r\n                    return static_cast<size_t>(-1); // at beginning, no more chance for match\r\n                }\r\n            }\r\n        }\r\n\r\n        // couldn't put one of the characters into the bitmap, fall back to the serial algorithm\r\n    }\r\n\r\n    for (auto _Match_try = _Haystack + _Hay_start;; --_Match_try) {\r\n        if (!_Traits::find(_Needle, _Needle_size, *_Match_try)) {\r\n            return static_cast<size_t>(_Match_try - _Haystack); // found a match\r\n        }\r\n\r\n        if (_Match_try == _Haystack) {\r\n            return static_cast<size_t>(-1); // at beginning, no more chance for match\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _Traits>\r\nconstexpr size_t _Traits_rfind_not_ch(_In_reads_(_Hay_size) const _Traits_ptr_t<_Traits> _Haystack,\r\n    const size_t _Hay_size, const size_t _Start_at, const _Traits_ch_t<_Traits> _Ch) noexcept {\r\n    // search [_Haystack, _Haystack + _Hay_size) for any value other than _Ch before _Start_at\r\n    if (_Hay_size == 0) { // no room for match\r\n        return static_cast<size_t>(-1);\r\n    }\r\n\r\n    const size_t _Actual_start_at = (_STD min) (_Start_at, _Hay_size - 1);\r\n\r\n#if _VECTORIZED_FIND_LAST\r\n    if constexpr (_Is_implementation_handled_char_traits<_Traits>) {\r\n        if (!_STD _Is_constant_evaluated()) {\r\n            return _STD _Find_last_not_ch_pos_vectorized(_Haystack, _Haystack + _Actual_start_at + 1, _Ch);\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_FIND_LAST ^^^\r\n\r\n    for (auto _Match_try = _Haystack + _Actual_start_at;; --_Match_try) {\r\n        if (!_Traits::eq(*_Match_try, _Ch)) {\r\n            return static_cast<size_t>(_Match_try - _Haystack); // found a match\r\n        }\r\n\r\n        if (_Match_try == _Haystack) {\r\n            return static_cast<size_t>(-1); // at beginning, no more chance for match\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_EcharT = _Is_any_of_v<_Ty, char, wchar_t,\r\n#ifdef __cpp_char8_t\r\n    char8_t,\r\n#endif // defined(__cpp_char8_t)\r\n    char16_t, char32_t>;\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass basic_string_view;\r\n\r\ntemplate <class _Traits>\r\nclass _String_view_iterator {\r\npublic:\r\n#if _HAS_CXX20\r\n    using iterator_concept = contiguous_iterator_tag;\r\n#endif // _HAS_CXX20\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = typename _Traits::char_type;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = const value_type*;\r\n    using reference         = const value_type&;\r\n\r\n    constexpr _String_view_iterator() noexcept = default;\r\n\r\nprivate:\r\n    friend basic_string_view<value_type, _Traits>;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n    constexpr _String_view_iterator(const pointer _Data, const size_t _Size, const size_t _Off) noexcept\r\n        : _Mydata(_Data), _Mysize(_Size), _Myoff(_Off) {}\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n    constexpr explicit _String_view_iterator(const pointer _Ptr) noexcept : _Myptr(_Ptr) {}\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n\r\npublic:\r\n    _NODISCARD constexpr reference operator*() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Mydata, \"cannot dereference value-initialized string_view iterator\");\r\n        _STL_VERIFY(_Myoff < _Mysize, \"cannot dereference end string_view iterator\");\r\n        return _Mydata[_Myoff];\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        return *_Myptr;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n\r\n    _NODISCARD constexpr pointer operator->() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Mydata, \"cannot dereference value-initialized string_view iterator\");\r\n        _STL_VERIFY(_Myoff < _Mysize, \"cannot dereference end string_view iterator\");\r\n        return _Mydata + _Myoff;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        return _Myptr;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n\r\n    constexpr _String_view_iterator& operator++() noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Mydata, \"cannot increment value-initialized string_view iterator\");\r\n        _STL_VERIFY(_Myoff < _Mysize, \"cannot increment string_view iterator past end\");\r\n        ++_Myoff;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        ++_Myptr;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n        return *this;\r\n    }\r\n\r\n    constexpr _String_view_iterator operator++(int) noexcept {\r\n        _String_view_iterator _Tmp{*this};\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    constexpr _String_view_iterator& operator--() noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Mydata, \"cannot decrement value-initialized string_view iterator\");\r\n        _STL_VERIFY(_Myoff != 0, \"cannot decrement string_view iterator before begin\");\r\n        --_Myoff;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        --_Myptr;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n        return *this;\r\n    }\r\n\r\n    constexpr _String_view_iterator operator--(int) noexcept {\r\n        _String_view_iterator _Tmp{*this};\r\n        --*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    constexpr void _Verify_offset(const difference_type _Off) const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        if (_Off != 0) {\r\n            _STL_VERIFY(_Mydata, \"cannot seek value-initialized string_view iterator\");\r\n        }\r\n\r\n        if (_Off < 0) {\r\n            _STL_VERIFY(\r\n                _Myoff >= size_t{0} - static_cast<size_t>(_Off), \"cannot seek string_view iterator before begin\");\r\n        }\r\n\r\n        if (_Off > 0) {\r\n            _STL_VERIFY(_Mysize - _Myoff >= static_cast<size_t>(_Off), \"cannot seek string_view iterator after end\");\r\n        }\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        (void) _Off;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n\r\n    constexpr _String_view_iterator& operator+=(const difference_type _Off) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _Verify_offset(_Off);\r\n        _Myoff += static_cast<size_t>(_Off);\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        _Myptr += _Off;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD constexpr _String_view_iterator operator+(const difference_type _Off) const noexcept {\r\n        _String_view_iterator _Tmp{*this};\r\n        _Tmp += _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD friend constexpr _String_view_iterator operator+(\r\n        const difference_type _Off, _String_view_iterator _Right) noexcept {\r\n        _Right += _Off;\r\n        return _Right;\r\n    }\r\n\r\n    constexpr _String_view_iterator& operator-=(const difference_type _Off) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        if (_Off != 0) {\r\n            _STL_VERIFY(_Mydata, \"cannot seek value-initialized string_view iterator\");\r\n        }\r\n\r\n        if (_Off > 0) {\r\n            _STL_VERIFY(_Myoff >= static_cast<size_t>(_Off), \"cannot seek string_view iterator before begin\");\r\n        }\r\n\r\n        if (_Off < 0) {\r\n            _STL_VERIFY(_Mysize - _Myoff >= size_t{0} - static_cast<size_t>(_Off),\r\n                \"cannot seek string_view iterator after end\");\r\n        }\r\n\r\n        _Myoff -= static_cast<size_t>(_Off);\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        _Myptr -= _Off;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD constexpr _String_view_iterator operator-(const difference_type _Off) const noexcept {\r\n        _String_view_iterator _Tmp{*this};\r\n        _Tmp -= _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD constexpr difference_type operator-(const _String_view_iterator& _Right) const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Mydata == _Right._Mydata && _Mysize == _Right._Mysize,\r\n            \"cannot subtract incompatible string_view iterators\");\r\n        return static_cast<difference_type>(_Myoff - _Right._Myoff);\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        return _Myptr - _Right._Myptr;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n\r\n    _NODISCARD constexpr reference operator[](const difference_type _Off) const noexcept {\r\n        return *(*this + _Off);\r\n    }\r\n\r\n    _NODISCARD constexpr bool operator==(const _String_view_iterator& _Right) const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Mydata == _Right._Mydata && _Mysize == _Right._Mysize,\r\n            \"cannot compare incompatible string_view iterators for equality\");\r\n        return _Myoff == _Right._Myoff;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        return _Myptr == _Right._Myptr;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD constexpr strong_ordering operator<=>(const _String_view_iterator& _Right) const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Mydata == _Right._Mydata && _Mysize == _Right._Mysize,\r\n            \"cannot compare incompatible string_view iterators\");\r\n        return _Myoff <=> _Right._Myoff;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        return _Myptr <=> _Right._Myptr;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD constexpr bool operator!=(const _String_view_iterator& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n\r\n    _NODISCARD constexpr bool operator<(const _String_view_iterator& _Right) const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Mydata == _Right._Mydata && _Mysize == _Right._Mysize,\r\n            \"cannot compare incompatible string_view iterators\");\r\n        return _Myoff < _Right._Myoff;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        return _Myptr < _Right._Myptr;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n\r\n    _NODISCARD constexpr bool operator>(const _String_view_iterator& _Right) const noexcept {\r\n        return _Right < *this;\r\n    }\r\n\r\n    _NODISCARD constexpr bool operator<=(const _String_view_iterator& _Right) const noexcept {\r\n        return !(_Right < *this);\r\n    }\r\n\r\n    _NODISCARD constexpr bool operator>=(const _String_view_iterator& _Right) const noexcept {\r\n        return !(*this < _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n    friend constexpr void _Verify_range(const _String_view_iterator& _First, const _String_view_iterator& _Last) {\r\n        _STL_VERIFY(_First._Mydata == _Last._Mydata && _First._Mysize == _Last._Mysize,\r\n            \"string_view iterators in range are from different views\");\r\n        _STL_VERIFY(_First._Myoff <= _Last._Myoff, \"string_view iterator range transposed\");\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n\r\n    using _Prevent_inheriting_unwrap = _String_view_iterator;\r\n\r\n    _NODISCARD constexpr pointer _Unwrapped() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        return _Mydata + _Myoff;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        return _Myptr;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n\r\n    static constexpr bool _Unwrap_when_unverified = _ITERATOR_DEBUG_LEVEL == 0;\r\n\r\n    constexpr void _Seek_to(pointer _It) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _Myoff = static_cast<size_t>(_It - _Mydata);\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        _Myptr = _It;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n\r\nprivate:\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n    pointer _Mydata = nullptr;\r\n    size_t _Mysize  = 0;\r\n    size_t _Myoff   = 0;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n    pointer _Myptr = nullptr;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Traits>\r\nstruct pointer_traits<_String_view_iterator<_Traits>> {\r\n    using pointer         = _String_view_iterator<_Traits>;\r\n    using element_type    = const pointer::value_type;\r\n    using difference_type = pointer::difference_type;\r\n\r\n    _NODISCARD static constexpr element_type* to_address(const pointer& _Iter) noexcept {\r\n        return _Iter._Unwrapped();\r\n    }\r\n};\r\n#endif // _HAS_CXX20\r\n\r\n#pragma warning(push)\r\n// Invalid annotation: 'NullTerminated' property may only be used on buffers whose elements are of integral or pointer\r\n// type\r\n#pragma warning(disable : 6510)\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nclass basic_string_view { // wrapper for any kind of contiguous character buffer\r\npublic:\r\n    static_assert(is_same_v<_Elem, typename _Traits::char_type>,\r\n        \"Bad char_traits for basic_string_view; N4950 [string.view.template.general]/1 \"\r\n        \"\\\"The program is ill-formed if traits::char_type is not the same type as charT.\\\"\");\r\n\r\n    static_assert(!is_array_v<_Elem> && is_trivially_copyable_v<_Elem> && is_trivially_default_constructible_v<_Elem>\r\n                      && is_standard_layout_v<_Elem>,\r\n        \"The character type of basic_string_view must be a non-array trivially copyable standard-layout type T where \"\r\n        \"is_trivially_default_constructible_v<T> is true. See N5001 [strings.general]/1.\");\r\n\r\n    using traits_type            = _Traits;\r\n    using value_type             = _Elem;\r\n    using pointer                = _Elem*;\r\n    using const_pointer          = const _Elem*;\r\n    using reference              = _Elem&;\r\n    using const_reference        = const _Elem&;\r\n    using const_iterator         = _String_view_iterator<_Traits>;\r\n    using iterator               = const_iterator;\r\n    using const_reverse_iterator = _STD reverse_iterator<const_iterator>;\r\n    using reverse_iterator       = const_reverse_iterator;\r\n    using size_type              = size_t;\r\n    using difference_type        = ptrdiff_t;\r\n\r\n    static constexpr auto npos{static_cast<size_type>(-1)};\r\n\r\n    constexpr basic_string_view() noexcept : _Mydata(), _Mysize(0) {}\r\n\r\n    constexpr basic_string_view(const basic_string_view&) noexcept            = default;\r\n    constexpr basic_string_view& operator=(const basic_string_view&) noexcept = default;\r\n\r\n    /* implicit */ constexpr basic_string_view(_In_z_ const const_pointer _Ntcts) noexcept // strengthened\r\n        : _Mydata(_Ntcts), _Mysize(_Traits::length(_Ntcts)) {}\r\n\r\n#if _HAS_CXX23\r\n    basic_string_view(nullptr_t) = delete;\r\n#endif // _HAS_CXX23\r\n\r\n    constexpr basic_string_view(\r\n        _In_reads_(_Count) const const_pointer _Cts, const size_type _Count) noexcept // strengthened\r\n        : _Mydata(_Cts), _Mysize(_Count) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Count == 0 || _Cts, \"cannot construct a string_view from a null pointer and a non-zero size\");\r\n#endif\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    template <contiguous_iterator _Iter, sized_sentinel_for<_Iter> _Sent>\r\n        requires (is_same_v<iter_value_t<_Iter>, _Elem> && !is_convertible_v<_Sent, size_type>)\r\n    constexpr basic_string_view(_Iter _First, _Sent _Last) noexcept(noexcept(_Last - _First)) // strengthened\r\n        : _Mydata(_STD to_address(_First)), _Mysize(static_cast<size_type>(_Last - _First)) {}\r\n\r\n#if _HAS_CXX23\r\n    template <class _Range>\r\n        requires (!same_as<remove_cvref_t<_Range>, basic_string_view> && _RANGES contiguous_range<_Range>\r\n                     && _RANGES sized_range<_Range> && same_as<_RANGES range_value_t<_Range>, _Elem>\r\n                     && !is_convertible_v<_Range, const _Elem*>\r\n                     && !requires(\r\n                         remove_cvref_t<_Range>& _Rng) { _Rng.operator _STD basic_string_view<_Elem, _Traits>(); })\r\n    constexpr explicit basic_string_view(_Range&& _Rng)\r\n        noexcept(noexcept(_RANGES data(_Rng)) && noexcept(_RANGES size(_Rng))) // strengthened\r\n        : _Mydata(_RANGES data(_Rng)), _Mysize(static_cast<size_t>(_RANGES size(_Rng))) {}\r\n#endif // _HAS_CXX23\r\n#endif // _HAS_CXX20\r\n\r\n    _NODISCARD constexpr const_iterator begin() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        return const_iterator(_Mydata, _Mysize, 0);\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        return const_iterator(_Mydata);\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n\r\n    _NODISCARD constexpr const_iterator end() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        return const_iterator(_Mydata, _Mysize, _Mysize);\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        return const_iterator(_Mydata + _Mysize);\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n\r\n    _NODISCARD constexpr const_iterator cbegin() const noexcept {\r\n        return begin();\r\n    }\r\n\r\n    _NODISCARD constexpr const_iterator cend() const noexcept {\r\n        return end();\r\n    }\r\n\r\n    _NODISCARD constexpr const_reverse_iterator rbegin() const noexcept {\r\n        return const_reverse_iterator{end()};\r\n    }\r\n\r\n    _NODISCARD constexpr const_reverse_iterator rend() const noexcept {\r\n        return const_reverse_iterator{begin()};\r\n    }\r\n\r\n    _NODISCARD constexpr const_reverse_iterator crbegin() const noexcept {\r\n        return rbegin();\r\n    }\r\n\r\n    _NODISCARD constexpr const_reverse_iterator crend() const noexcept {\r\n        return rend();\r\n    }\r\n\r\n    constexpr const_pointer _Unchecked_begin() const noexcept {\r\n        return _Mydata;\r\n    }\r\n\r\n    constexpr const_pointer _Unchecked_end() const noexcept {\r\n        return _Mydata + _Mysize;\r\n    }\r\n\r\n    _NODISCARD constexpr size_type size() const noexcept {\r\n        return _Mysize;\r\n    }\r\n\r\n    _NODISCARD constexpr size_type length() const noexcept {\r\n        return _Mysize;\r\n    }\r\n\r\n    _NODISCARD constexpr bool empty() const noexcept {\r\n        return _Mysize == 0;\r\n    }\r\n\r\n    _NODISCARD constexpr const_pointer data() const noexcept {\r\n        return _Mydata;\r\n    }\r\n\r\n    _NODISCARD constexpr size_type max_size() const noexcept {\r\n        // bound to PTRDIFF_MAX to make end() - begin() well defined (also makes room for npos)\r\n        // bound to static_cast<size_t>(-1) / sizeof(_Elem) by address space limits\r\n        return (_STD min) (static_cast<size_t>(PTRDIFF_MAX), static_cast<size_t>(-1) / sizeof(_Elem));\r\n    }\r\n\r\n    _NODISCARD constexpr const_reference operator[](const size_type _Off) const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_BASIC_STRING_VIEW || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Off < _Mysize, \"string_view subscript out of range\");\r\n#endif\r\n\r\n        // CodeQL [SM01954] This index is optionally validated above.\r\n        return _Mydata[_Off];\r\n    }\r\n\r\n    _NODISCARD constexpr const_reference at(const size_type _Off) const {\r\n        // get the character at _Off or throw if that is out of range\r\n        _Check_offset_exclusive(_Off);\r\n        return _Mydata[_Off];\r\n    }\r\n\r\n    _NODISCARD constexpr const_reference front() const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_BASIC_STRING_VIEW || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mysize != 0, \"front() called on empty string_view\");\r\n#endif\r\n\r\n        return _Mydata[0];\r\n    }\r\n\r\n    _NODISCARD constexpr const_reference back() const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_BASIC_STRING_VIEW || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mysize != 0, \"back() called on empty string_view\");\r\n#endif\r\n\r\n        return _Mydata[_Mysize - 1];\r\n    }\r\n\r\n    constexpr void remove_prefix(const size_type _Count) noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_BASIC_STRING_VIEW || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mysize >= _Count, \"cannot remove_prefix() larger than string_view size\");\r\n#endif\r\n\r\n        _Mydata += _Count;\r\n        _Mysize -= _Count;\r\n    }\r\n\r\n    constexpr void remove_suffix(const size_type _Count) noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_BASIC_STRING_VIEW || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mysize >= _Count, \"cannot remove_suffix() larger than string_view size\");\r\n#endif\r\n\r\n        _Mysize -= _Count;\r\n    }\r\n\r\n    constexpr void swap(basic_string_view& _Other) noexcept {\r\n        const basic_string_view _Tmp{_Other}; // note: std::swap is not constexpr before C++20\r\n        _Other = *this;\r\n        *this  = _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR20 size_type copy(\r\n        _Out_writes_(_Count) _Elem* const _Ptr, size_type _Count, const size_type _Off = 0) const {\r\n        // copy [_Off, _Off + Count) to [_Ptr, _Ptr + _Count)\r\n        _Check_offset(_Off);\r\n        _Count = _Clamp_suffix_size(_Off, _Count);\r\n        _Traits::copy(_Ptr, _Mydata + _Off, _Count);\r\n        return _Count;\r\n    }\r\n\r\n    _Pre_satisfies_(_Dest_size >= _Count) _CONSTEXPR20 size_type\r\n        _Copy_s(_Out_writes_all_(_Dest_size) _Elem* const _Dest, const size_type _Dest_size, size_type _Count,\r\n            const size_type _Off = 0) const {\r\n        // copy [_Off, _Off + _Count) to [_Dest, _Dest + _Count)\r\n        _Check_offset(_Off);\r\n        _Count = _Clamp_suffix_size(_Off, _Count);\r\n        _Traits::_Copy_s(_Dest, _Dest_size, _Mydata + _Off, _Count);\r\n        return _Count;\r\n    }\r\n\r\n    _NODISCARD constexpr basic_string_view substr(const size_type _Off = 0, size_type _Count = npos) const {\r\n        // return a new basic_string_view moved forward by _Off and trimmed to _Count elements\r\n        _Check_offset(_Off);\r\n        _Count = _Clamp_suffix_size(_Off, _Count);\r\n        return basic_string_view(_Mydata + _Off, _Count);\r\n    }\r\n\r\n    constexpr bool _Equal(const basic_string_view _Right) const noexcept {\r\n        return _Traits_equal<_Traits>(_Mydata, _Mysize, _Right._Mydata, _Right._Mysize);\r\n    }\r\n\r\n    _NODISCARD constexpr int compare(const basic_string_view _Right) const noexcept {\r\n        return _Traits_compare<_Traits>(_Mydata, _Mysize, _Right._Mydata, _Right._Mysize);\r\n    }\r\n\r\n    _NODISCARD constexpr int compare(const size_type _Off, const size_type _Nx, const basic_string_view _Right) const {\r\n        // compare [_Off, _Off + _Nx) with _Right\r\n        return substr(_Off, _Nx).compare(_Right);\r\n    }\r\n\r\n    _NODISCARD constexpr int compare(const size_type _Off, const size_type _Nx, const basic_string_view _Right,\r\n        const size_type _Roff, const size_type _Count) const {\r\n        // compare [_Off, _Off + _Nx) with _Right [_Roff, _Roff + _Count)\r\n        return substr(_Off, _Nx).compare(_Right.substr(_Roff, _Count));\r\n    }\r\n\r\n    _NODISCARD constexpr int compare(_In_z_ const _Elem* const _Ptr) const noexcept /* strengthened */ {\r\n        // compare [0, _Mysize) with [_Ptr, <null>)\r\n        return compare(basic_string_view(_Ptr));\r\n    }\r\n\r\n    _NODISCARD constexpr int compare(const size_type _Off, const size_type _Nx, _In_z_ const _Elem* const _Ptr) const {\r\n        // compare [_Off, _Off + _Nx) with [_Ptr, <null>)\r\n        return substr(_Off, _Nx).compare(basic_string_view(_Ptr));\r\n    }\r\n\r\n    _NODISCARD constexpr int compare(const size_type _Off, const size_type _Nx,\r\n        _In_reads_(_Count) const _Elem* const _Ptr, const size_type _Count) const {\r\n        // compare [_Off, _Off + _Nx) with [_Ptr, _Ptr + _Count)\r\n        return substr(_Off, _Nx).compare(basic_string_view(_Ptr, _Count));\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD constexpr bool starts_with(const basic_string_view _Right) const noexcept {\r\n        const auto _Rightsize = _Right._Mysize;\r\n        if (_Mysize < _Rightsize) {\r\n            return false;\r\n        }\r\n        return _Traits::compare(_Mydata, _Right._Mydata, _Rightsize) == 0;\r\n    }\r\n\r\n    _NODISCARD constexpr bool starts_with(const _Elem _Right) const noexcept {\r\n        return !empty() && _Traits::eq(front(), _Right);\r\n    }\r\n\r\n    _NODISCARD constexpr bool starts_with(const _Elem* const _Right) const noexcept /* strengthened */ {\r\n        return starts_with(basic_string_view(_Right));\r\n    }\r\n\r\n    _NODISCARD constexpr bool ends_with(const basic_string_view _Right) const noexcept {\r\n        const auto _Rightsize = _Right._Mysize;\r\n        if (_Mysize < _Rightsize) {\r\n            return false;\r\n        }\r\n        return _Traits::compare(_Mydata + (_Mysize - _Rightsize), _Right._Mydata, _Rightsize) == 0;\r\n    }\r\n\r\n    _NODISCARD constexpr bool ends_with(const _Elem _Right) const noexcept {\r\n        return !empty() && _Traits::eq(back(), _Right);\r\n    }\r\n\r\n    _NODISCARD constexpr bool ends_with(const _Elem* const _Right) const noexcept /* strengthened */ {\r\n        return ends_with(basic_string_view(_Right));\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n    _NODISCARD constexpr bool contains(const basic_string_view _Right) const noexcept {\r\n        return find(_Right) != npos;\r\n    }\r\n\r\n    _NODISCARD constexpr bool contains(const _Elem _Right) const noexcept {\r\n        return find(_Right) != npos;\r\n    }\r\n\r\n    _NODISCARD constexpr bool contains(const _Elem* const _Right) const noexcept /* strengthened */ {\r\n        return find(_Right) != npos;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _NODISCARD constexpr size_type find(const basic_string_view _Right, const size_type _Off = 0) const noexcept {\r\n        // look for _Right beginning at or after _Off\r\n        return _Traits_find<_Traits>(_Mydata, _Mysize, _Off, _Right._Mydata, _Right._Mysize);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find(const _Elem _Ch, const size_type _Off = 0) const noexcept {\r\n        // look for _Ch at or after _Off\r\n        return _Traits_find_ch<_Traits>(_Mydata, _Mysize, _Off, _Ch);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find(_In_reads_(_Count) const _Elem* const _Ptr, const size_type _Off,\r\n        const size_type _Count) const noexcept /* strengthened */ {\r\n        // look for [_Ptr, _Ptr + _Count) beginning at or after _Off\r\n        return _Traits_find<_Traits>(_Mydata, _Mysize, _Off, _Ptr, _Count);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find(_In_z_ const _Elem* const _Ptr, const size_type _Off = 0) const noexcept\r\n    /* strengthened */ {\r\n        // look for [_Ptr, <null>) beginning at or after _Off\r\n        return _Traits_find<_Traits>(_Mydata, _Mysize, _Off, _Ptr, _Traits::length(_Ptr));\r\n    }\r\n\r\n    _NODISCARD constexpr size_type rfind(const basic_string_view _Right, const size_type _Off = npos) const noexcept {\r\n        // look for _Right beginning before _Off\r\n        return _Traits_rfind<_Traits>(_Mydata, _Mysize, _Off, _Right._Mydata, _Right._Mysize);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type rfind(const _Elem _Ch, const size_type _Off = npos) const noexcept {\r\n        // look for _Ch before _Off\r\n        return _Traits_rfind_ch<_Traits>(_Mydata, _Mysize, _Off, _Ch);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type rfind(_In_reads_(_Count) const _Elem* const _Ptr, const size_type _Off,\r\n        const size_type _Count) const noexcept /* strengthened */ {\r\n        // look for [_Ptr, _Ptr + _Count) beginning before _Off\r\n        return _Traits_rfind<_Traits>(_Mydata, _Mysize, _Off, _Ptr, _Count);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type rfind(_In_z_ const _Elem* const _Ptr, const size_type _Off = npos) const noexcept\r\n    /* strengthened */ {\r\n        // look for [_Ptr, <null>) beginning before _Off\r\n        return _Traits_rfind<_Traits>(_Mydata, _Mysize, _Off, _Ptr, _Traits::length(_Ptr));\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find_first_of(const basic_string_view _Right,\r\n        const size_type _Off = 0) const noexcept { // look for one of _Right at or after _Off\r\n        return _Traits_find_first_of<_Traits>(_Mydata, _Mysize, _Off, _Right._Mydata, _Right._Mysize);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find_first_of(const _Elem _Ch, const size_type _Off = 0) const noexcept {\r\n        // look for _Ch at or after _Off\r\n        return _Traits_find_ch<_Traits>(_Mydata, _Mysize, _Off, _Ch);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find_first_of(_In_reads_(_Count) const _Elem* const _Ptr, const size_type _Off,\r\n        const size_type _Count) const noexcept /* strengthened */ {\r\n        // look for one of [_Ptr, _Ptr + _Count) at or after _Off\r\n        return _Traits_find_first_of<_Traits>(_Mydata, _Mysize, _Off, _Ptr, _Count);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find_first_of(\r\n        _In_z_ const _Elem* const _Ptr, const size_type _Off = 0) const noexcept /* strengthened */ {\r\n        // look for one of [_Ptr, <null>) at or after _Off\r\n        return _Traits_find_first_of<_Traits>(_Mydata, _Mysize, _Off, _Ptr, _Traits::length(_Ptr));\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find_last_of(const basic_string_view _Right,\r\n        const size_type _Off = npos) const noexcept { // look for one of _Right before _Off\r\n        return _Traits_find_last_of<_Traits>(_Mydata, _Mysize, _Off, _Right._Mydata, _Right._Mysize);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find_last_of(const _Elem _Ch, const size_type _Off = npos) const noexcept {\r\n        // look for _Ch before _Off\r\n        return _Traits_rfind_ch<_Traits>(_Mydata, _Mysize, _Off, _Ch);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find_last_of(_In_reads_(_Count) const _Elem* const _Ptr, const size_type _Off,\r\n        const size_type _Count) const noexcept /* strengthened */ {\r\n        // look for one of [_Ptr, _Ptr + _Count) before _Off\r\n        return _Traits_find_last_of<_Traits>(_Mydata, _Mysize, _Off, _Ptr, _Count);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find_last_of(\r\n        _In_z_ const _Elem* const _Ptr, const size_type _Off = npos) const noexcept /* strengthened */ {\r\n        // look for one of [_Ptr, <null>) before _Off\r\n        return _Traits_find_last_of<_Traits>(_Mydata, _Mysize, _Off, _Ptr, _Traits::length(_Ptr));\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find_first_not_of(const basic_string_view _Right,\r\n        const size_type _Off = 0) const noexcept { // look for none of _Right at or after _Off\r\n        return _Traits_find_first_not_of<_Traits>(_Mydata, _Mysize, _Off, _Right._Mydata, _Right._Mysize);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find_first_not_of(const _Elem _Ch, const size_type _Off = 0) const noexcept {\r\n        // look for any value other than _Ch at or after _Off\r\n        return _Traits_find_not_ch<_Traits>(_Mydata, _Mysize, _Off, _Ch);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find_first_not_of(_In_reads_(_Count) const _Elem* const _Ptr, const size_type _Off,\r\n        const size_type _Count) const noexcept /* strengthened */ {\r\n        // look for none of [_Ptr, _Ptr + _Count) at or after _Off\r\n        return _Traits_find_first_not_of<_Traits>(_Mydata, _Mysize, _Off, _Ptr, _Count);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find_first_not_of(\r\n        _In_z_ const _Elem* const _Ptr, const size_type _Off = 0) const noexcept /* strengthened */ {\r\n        // look for none of [_Ptr, <null>) at or after _Off\r\n        return _Traits_find_first_not_of<_Traits>(_Mydata, _Mysize, _Off, _Ptr, _Traits::length(_Ptr));\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find_last_not_of(const basic_string_view _Right,\r\n        const size_type _Off = npos) const noexcept { // look for none of _Right before _Off\r\n        return _Traits_find_last_not_of<_Traits>(_Mydata, _Mysize, _Off, _Right._Mydata, _Right._Mysize);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find_last_not_of(const _Elem _Ch, const size_type _Off = npos) const noexcept {\r\n        // look for any value other than _Ch before _Off\r\n        return _Traits_rfind_not_ch<_Traits>(_Mydata, _Mysize, _Off, _Ch);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find_last_not_of(_In_reads_(_Count) const _Elem* const _Ptr, const size_type _Off,\r\n        const size_type _Count) const noexcept /* strengthened */ {\r\n        // look for none of [_Ptr, _Ptr + _Count) before _Off\r\n        return _Traits_find_last_not_of<_Traits>(_Mydata, _Mysize, _Off, _Ptr, _Count);\r\n    }\r\n\r\n    _NODISCARD constexpr size_type find_last_not_of(\r\n        _In_z_ const _Elem* const _Ptr, const size_type _Off = npos) const noexcept /* strengthened */ {\r\n        // look for none of [_Ptr, <null>) before _Off\r\n        return _Traits_find_last_not_of<_Traits>(_Mydata, _Mysize, _Off, _Ptr, _Traits::length(_Ptr));\r\n    }\r\n\r\n    _NODISCARD constexpr bool _Starts_with(const basic_string_view _View) const noexcept {\r\n        return _Mysize >= _View._Mysize && _Traits::compare(_Mydata, _View._Mydata, _View._Mysize) == 0;\r\n    }\r\n\r\nprivate:\r\n    constexpr void _Check_offset(const size_type _Off) const { // checks whether _Off is in the bounds of [0, size()]\r\n        if (_Mysize < _Off) {\r\n            _Xran();\r\n        }\r\n    }\r\n\r\n    constexpr void _Check_offset_exclusive(const size_type _Off) const {\r\n        // checks whether _Off is in the bounds of [0, size())\r\n        if (_Mysize <= _Off) {\r\n            _Xran();\r\n        }\r\n    }\r\n\r\n    constexpr size_type _Clamp_suffix_size(const size_type _Off, const size_type _Size) const noexcept {\r\n        // trims _Size to the longest it can be assuming a string at/after _Off\r\n        return (_STD min) (_Size, _Mysize - _Off);\r\n    }\r\n\r\n    [[noreturn]] static void _Xran() {\r\n        _Xout_of_range(\"invalid string_view position\");\r\n    }\r\n\r\n    const_pointer _Mydata;\r\n    size_type _Mysize;\r\n};\r\n\r\n#pragma warning(pop)\r\n\r\n#if _HAS_CXX20\r\ntemplate <contiguous_iterator _Iter, sized_sentinel_for<_Iter> _Sent>\r\nbasic_string_view(_Iter, _Sent) -> basic_string_view<iter_value_t<_Iter>>;\r\n\r\n#if _HAS_CXX23\r\ntemplate <_RANGES contiguous_range _Range>\r\nbasic_string_view(_Range&&) -> basic_string_view<_RANGES range_value_t<_Range>>;\r\n#endif // _HAS_CXX23\r\n\r\nnamespace ranges {\r\n    template <class _Elem, class _Traits>\r\n    constexpr bool enable_view<basic_string_view<_Elem, _Traits>> = true;\r\n    template <class _Elem, class _Traits>\r\n    constexpr bool enable_borrowed_range<basic_string_view<_Elem, _Traits>> = true;\r\n} // namespace ranges\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\n_NODISCARD constexpr bool operator==(const basic_string_view<_Elem, _Traits> _Lhs,\r\n    const type_identity_t<basic_string_view<_Elem, _Traits>> _Rhs) noexcept {\r\n    return _Lhs._Equal(_Rhs);\r\n}\r\n\r\ntemplate <class _Traits>\r\nstruct _Get_comparison_category {\r\n    using type = weak_ordering;\r\n};\r\n\r\ntemplate <class _Traits>\r\n    requires requires { typename _Traits::comparison_category; }\r\nstruct _Get_comparison_category<_Traits> {\r\n    using type = _Traits::comparison_category;\r\n\r\n    static_assert(_Is_any_of_v<type, partial_ordering, weak_ordering, strong_ordering>,\r\n        \"N4971 [string.view.comparison]/4: Mandates: R denotes a comparison category type.\");\r\n};\r\n\r\ntemplate <class _Traits>\r\nusing _Get_comparison_category_t = _Get_comparison_category<_Traits>::type;\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\n_NODISCARD constexpr _Get_comparison_category_t<_Traits> operator<=>(const basic_string_view<_Elem, _Traits> _Lhs,\r\n    const type_identity_t<basic_string_view<_Elem, _Traits>> _Rhs) noexcept {\r\n    return static_cast<_Get_comparison_category_t<_Traits>>(_Lhs.compare(_Rhs) <=> 0);\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Elem, class _Traits>\r\n_NODISCARD constexpr bool operator==(\r\n    const basic_string_view<_Elem, _Traits> _Lhs, const basic_string_view<_Elem, _Traits> _Rhs) noexcept {\r\n    return _Lhs._Equal(_Rhs);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, int = 1> // TRANSITION, VSO-409326\r\n_NODISCARD constexpr bool operator==(\r\n    const _Identity_t<basic_string_view<_Elem, _Traits>> _Lhs, const basic_string_view<_Elem, _Traits> _Rhs) noexcept {\r\n    return _Lhs._Equal(_Rhs);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, int = 2> // TRANSITION, VSO-409326\r\n_NODISCARD constexpr bool operator==(\r\n    const basic_string_view<_Elem, _Traits> _Lhs, const _Identity_t<basic_string_view<_Elem, _Traits>> _Rhs) noexcept {\r\n    return _Lhs._Equal(_Rhs);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits>\r\n_NODISCARD constexpr bool operator!=(\r\n    const basic_string_view<_Elem, _Traits> _Lhs, const basic_string_view<_Elem, _Traits> _Rhs) noexcept {\r\n    return !_Lhs._Equal(_Rhs);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, int = 1> // TRANSITION, VSO-409326\r\n_NODISCARD constexpr bool operator!=(\r\n    const _Identity_t<basic_string_view<_Elem, _Traits>> _Lhs, const basic_string_view<_Elem, _Traits> _Rhs) noexcept {\r\n    return !_Lhs._Equal(_Rhs);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, int = 2> // TRANSITION, VSO-409326\r\n_NODISCARD constexpr bool operator!=(\r\n    const basic_string_view<_Elem, _Traits> _Lhs, const _Identity_t<basic_string_view<_Elem, _Traits>> _Rhs) noexcept {\r\n    return !_Lhs._Equal(_Rhs);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits>\r\n_NODISCARD constexpr bool operator<(\r\n    const basic_string_view<_Elem, _Traits> _Lhs, const basic_string_view<_Elem, _Traits> _Rhs) noexcept {\r\n    return _Lhs.compare(_Rhs) < 0;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, int = 1> // TRANSITION, VSO-409326\r\n_NODISCARD constexpr bool operator<(\r\n    const _Identity_t<basic_string_view<_Elem, _Traits>> _Lhs, const basic_string_view<_Elem, _Traits> _Rhs) noexcept {\r\n    return _Lhs.compare(_Rhs) < 0;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, int = 2> // TRANSITION, VSO-409326\r\n_NODISCARD constexpr bool operator<(\r\n    const basic_string_view<_Elem, _Traits> _Lhs, const _Identity_t<basic_string_view<_Elem, _Traits>> _Rhs) noexcept {\r\n    return _Lhs.compare(_Rhs) < 0;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits>\r\n_NODISCARD constexpr bool operator>(\r\n    const basic_string_view<_Elem, _Traits> _Lhs, const basic_string_view<_Elem, _Traits> _Rhs) noexcept {\r\n    return _Lhs.compare(_Rhs) > 0;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, int = 1> // TRANSITION, VSO-409326\r\n_NODISCARD constexpr bool operator>(\r\n    const _Identity_t<basic_string_view<_Elem, _Traits>> _Lhs, const basic_string_view<_Elem, _Traits> _Rhs) noexcept {\r\n    return _Lhs.compare(_Rhs) > 0;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, int = 2> // TRANSITION, VSO-409326\r\n_NODISCARD constexpr bool operator>(\r\n    const basic_string_view<_Elem, _Traits> _Lhs, const _Identity_t<basic_string_view<_Elem, _Traits>> _Rhs) noexcept {\r\n    return _Lhs.compare(_Rhs) > 0;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits>\r\n_NODISCARD constexpr bool operator<=(\r\n    const basic_string_view<_Elem, _Traits> _Lhs, const basic_string_view<_Elem, _Traits> _Rhs) noexcept {\r\n    return _Lhs.compare(_Rhs) <= 0;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, int = 1> // TRANSITION, VSO-409326\r\n_NODISCARD constexpr bool operator<=(\r\n    const _Identity_t<basic_string_view<_Elem, _Traits>> _Lhs, const basic_string_view<_Elem, _Traits> _Rhs) noexcept {\r\n    return _Lhs.compare(_Rhs) <= 0;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, int = 2> // TRANSITION, VSO-409326\r\n_NODISCARD constexpr bool operator<=(\r\n    const basic_string_view<_Elem, _Traits> _Lhs, const _Identity_t<basic_string_view<_Elem, _Traits>> _Rhs) noexcept {\r\n    return _Lhs.compare(_Rhs) <= 0;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits>\r\n_NODISCARD constexpr bool operator>=(\r\n    const basic_string_view<_Elem, _Traits> _Lhs, const basic_string_view<_Elem, _Traits> _Rhs) noexcept {\r\n    return _Lhs.compare(_Rhs) >= 0;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, int = 1> // TRANSITION, VSO-409326\r\n_NODISCARD constexpr bool operator>=(\r\n    const _Identity_t<basic_string_view<_Elem, _Traits>> _Lhs, const basic_string_view<_Elem, _Traits> _Rhs) noexcept {\r\n    return _Lhs.compare(_Rhs) >= 0;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, int = 2> // TRANSITION, VSO-409326\r\n_NODISCARD constexpr bool operator>=(\r\n    const basic_string_view<_Elem, _Traits> _Lhs, const _Identity_t<basic_string_view<_Elem, _Traits>> _Rhs) noexcept {\r\n    return _Lhs.compare(_Rhs) >= 0;\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD using string_view = basic_string_view<char>;\r\n#ifdef __cpp_lib_char8_t\r\n_EXPORT_STD using u8string_view = basic_string_view<char8_t>;\r\n#endif // defined(__cpp_lib_char8_t)\r\n_EXPORT_STD using u16string_view = basic_string_view<char16_t>;\r\n_EXPORT_STD using u32string_view = basic_string_view<char32_t>;\r\n_EXPORT_STD using wstring_view   = basic_string_view<wchar_t>;\r\n\r\ntemplate <class _Elem>\r\nstruct hash<basic_string_view<_Elem>> : _Conditionally_enabled_hash<basic_string_view<_Elem>, _Is_EcharT<_Elem>> {\r\n    _NODISCARD static size_t _Do_hash(const basic_string_view<_Elem> _Keyval) noexcept {\r\n        return _Hash_array_representation(_Keyval.data(), _Keyval.size());\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& operator<<(\r\n    basic_ostream<_Elem, _Traits>& _Ostr, const basic_string_view<_Elem, _Traits> _Str) {\r\n    return _Insert_string(_Ostr, _Str.data(), _Str.size());\r\n}\r\n\r\ninline namespace literals {\r\n    inline namespace string_view_literals {\r\n        _EXPORT_STD _NODISCARD constexpr string_view operator\"\"sv(const char* _Str, size_t _Len) noexcept {\r\n            return string_view(_Str, _Len);\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr wstring_view operator\"\"sv(const wchar_t* _Str, size_t _Len) noexcept {\r\n            return wstring_view(_Str, _Len);\r\n        }\r\n\r\n#ifdef __cpp_char8_t\r\n        _EXPORT_STD _NODISCARD constexpr basic_string_view<char8_t> operator\"\"sv(\r\n            const char8_t* _Str, size_t _Len) noexcept {\r\n            return basic_string_view<char8_t>(_Str, _Len);\r\n        }\r\n#endif // defined(__cpp_char8_t)\r\n\r\n        _EXPORT_STD _NODISCARD constexpr u16string_view operator\"\"sv(const char16_t* _Str, size_t _Len) noexcept {\r\n            return u16string_view(_Str, _Len);\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr u32string_view operator\"\"sv(const char32_t* _Str, size_t _Len) noexcept {\r\n            return u32string_view(_Str, _Len);\r\n        }\r\n    } // namespace string_view_literals\r\n} // namespace literals\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Elem, class _Traits>\r\nconstexpr bool _Equivalence_is_equality_impl<basic_string_view<_Elem, _Traits>> =\r\n    _Is_implementation_handled_char_traits<_Traits>;\r\n#endif // _HAS_CXX23\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_STRING_VIEW_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_system_error_abi.hpp",
    "content": "// __msvc_system_error_abi.hpp internal header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef __MSVC_SYSTEM_ERROR_ABI_HPP\r\n#define __MSVC_SYSTEM_ERROR_ABI_HPP\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <cstddef>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n#ifdef _M_CEE_PURE\r\n#define __CLRCALL_PURE_OR_STDCALL __clrcall\r\n#else\r\n#define __CLRCALL_PURE_OR_STDCALL __stdcall\r\n#endif\r\n\r\nextern \"C\" {\r\n_NODISCARD size_t __CLRCALL_PURE_OR_STDCALL __std_get_string_size_without_trailing_whitespace(\r\n    const char* _Str, size_t _Size) noexcept;\r\n\r\n_NODISCARD size_t __CLRCALL_PURE_OR_STDCALL __std_system_error_allocate_message(\r\n    unsigned long _Message_id, char** _Ptr_str) noexcept;\r\nvoid __CLRCALL_PURE_OR_STDCALL __std_system_error_deallocate_message(char* _Str) noexcept;\r\n} // extern \"C\"\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_SYSTEM_ERROR_ABI_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_threads_core.hpp",
    "content": "// __msvc_threads_core.hpp internal header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef __MSVC_THREADS_CORE_HPP\r\n#define __MSVC_THREADS_CORE_HPP\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <cstddef>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\nextern \"C\" {\r\nusing _Thrd_id_t = unsigned int;\r\nstruct _Thrd_t { // thread identifier for Win32\r\n    void* _Hnd; // Win32 HANDLE\r\n    _Thrd_id_t _Id;\r\n};\r\n\r\nusing _Smtx_t = void*;\r\n\r\nenum class _Thrd_result : int { _Success, _Nomem, _Timedout, _Busy, _Error };\r\n\r\nstruct _Stl_critical_section {\r\n    void* _Unused       = nullptr; // TRANSITION, ABI: was the vptr\r\n    _Smtx_t _M_srw_lock = nullptr;\r\n};\r\n\r\nstruct _Mtx_internal_imp_t {\r\n// TRANSITION, ABI: We should directly store _M_srw_lock above.\r\n#ifdef _WIN64\r\n    static constexpr size_t _Critical_section_size = 64;\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n    static constexpr size_t _Critical_section_size = 36;\r\n#endif // ^^^ 32-bit ^^^\r\n\r\n    int _Type{};\r\n    union {\r\n        _Stl_critical_section _Critical_section{};\r\n        alignas(void*) unsigned char _Cs_storage[_Critical_section_size];\r\n    };\r\n    long _Thread_id{};\r\n    int _Count{};\r\n};\r\n\r\nusing _Mtx_t = _Mtx_internal_imp_t*;\r\n\r\nstruct _Stl_condition_variable {\r\n    void* _Unused = nullptr; // TRANSITION, ABI: was the vptr\r\n    void* _Win_cv = nullptr;\r\n};\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 26495) // Variable 'meow' is uninitialized. Always initialize a member variable (type.6).\r\nstruct _Cnd_internal_imp_t {\r\n// TRANSITION, ABI: We should directly store _Win_cv above.\r\n#ifdef _WIN64\r\n    static constexpr size_t _Cnd_internal_imp_size = 72;\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n    static constexpr size_t _Cnd_internal_imp_size = 40;\r\n#endif // ^^^ 32-bit ^^^\r\n\r\n    union {\r\n        _Stl_condition_variable _Stl_cv{};\r\n        alignas(void*) unsigned char _Cv_storage[_Cnd_internal_imp_size];\r\n    };\r\n};\r\n#pragma warning(pop)\r\n\r\nusing _Cnd_t = _Cnd_internal_imp_t*;\r\n} // extern \"C\"\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_THREADS_CORE_HPP\r\n\r\n/*\r\n * This file is derived from software bearing the following\r\n * restrictions:\r\n *\r\n * (c) Copyright William E. Kempf 2001\r\n *\r\n * Permission to use, copy, modify, distribute and sell this\r\n * software and its documentation for any purpose is hereby\r\n * granted without fee, provided that the above copyright\r\n * notice appear in all copies and that both that copyright\r\n * notice and this permission notice appear in supporting\r\n * documentation. William E. Kempf makes no representations\r\n * about the suitability of this software for any purpose.\r\n * It is provided \"as is\" without express or implied warranty.\r\n */\r\n"
  },
  {
    "path": "stl/inc/__msvc_tzdb.hpp",
    "content": "// __msvc_tzdb.hpp internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef __MSVC_TZDB_HPP\r\n#define __MSVC_TZDB_HPP\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <type_traits>\r\n#include <xutility>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\nextern \"C\" {\r\n\r\nusing __std_tzdb_epoch_milli = double;\r\n\r\nstruct __std_tzdb_leap_info {\r\n    uint16_t _Year;\r\n    uint16_t _Month;\r\n    uint16_t _Day;\r\n    uint16_t _Hour;\r\n    uint16_t _Negative;\r\n    uint16_t _Reserved;\r\n};\r\n\r\nenum class __std_tzdb_error {\r\n    _Success   = 0,\r\n    _Win_error = 1,\r\n    _Icu_error = 2,\r\n};\r\n\r\nstruct __std_tzdb_time_zones_info {\r\n    __std_tzdb_error _Err;\r\n    // timezone data version currently being used\r\n    const char* _Version;\r\n    size_t _Num_time_zones;\r\n    // ordered list of null-terminated time_zone/time_zone_link names\r\n    const char** _Names;\r\n    // contains corresponding entry for every name, if:\r\n    //    (_Links[i] == nullptr) then _Names[i] is a time_zone\r\n    //    (_Links[i] != nullptr) then _Names[i] is a time_zone_link to time_zone with name _Links[i]\r\n    const char** _Links;\r\n};\r\n\r\nstruct __std_tzdb_current_zone_info {\r\n    __std_tzdb_error _Err;\r\n    const char* _Tz_name;\r\n};\r\n\r\nstruct __std_tzdb_sys_info {\r\n    __std_tzdb_error _Err;\r\n    __std_tzdb_epoch_milli _Begin;\r\n    __std_tzdb_epoch_milli _End;\r\n    int32_t _Offset;\r\n    int32_t _Save;\r\n    const char* _Abbrev;\r\n};\r\n\r\nenum class __std_tzdb_sys_info_type : char {\r\n    // TRANSITION, ABI: In order to be compatible with existing object files which do not know about\r\n    // `__std_tzdb_sys_info_type`, the type is passed in the after-end byte of a string passed with its length to\r\n    // `__std_tzdb_get_sys_info`. Since older object files always pass the `.c_str()` of a `std::string`\r\n    // to that function, the after-end byte will always be '\\0'.\r\n    _Full = '\\0',\r\n    _Offset_only,\r\n    _Offset_and_range,\r\n};\r\n\r\n_NODISCARD __std_tzdb_time_zones_info* __stdcall __std_tzdb_get_time_zones() noexcept;\r\nvoid __stdcall __std_tzdb_delete_time_zones(__std_tzdb_time_zones_info* _Info) noexcept;\r\n\r\n_NODISCARD __std_tzdb_current_zone_info* __stdcall __std_tzdb_get_current_zone() noexcept;\r\nvoid __stdcall __std_tzdb_delete_current_zone(__std_tzdb_current_zone_info* _Info) noexcept;\r\n\r\n_NODISCARD __std_tzdb_sys_info* __stdcall __std_tzdb_get_sys_info(\r\n    const char* _Tz, size_t _Tz_len, __std_tzdb_epoch_milli _Local) noexcept;\r\nvoid __stdcall __std_tzdb_delete_sys_info(__std_tzdb_sys_info* _Info) noexcept;\r\n\r\n_NODISCARD __std_tzdb_leap_info* __stdcall __std_tzdb_get_leap_seconds(\r\n    size_t _Prev_ls_size, size_t* _Current_ls_size) noexcept;\r\nvoid __stdcall __std_tzdb_delete_leap_seconds(__std_tzdb_leap_info* _Info) noexcept;\r\n\r\n_NODISCARD void* __stdcall __std_calloc_crt(size_t _Count, size_t _Size) noexcept;\r\nvoid __stdcall __std_free_crt(void* _Ptr) noexcept;\r\n\r\n} // extern \"C\"\r\n\r\n_STD_BEGIN\r\n\r\ntemplate <class _Ty>\r\nstruct _Tzdb_deleter;\r\n\r\ntemplate <>\r\nstruct _Tzdb_deleter<__std_tzdb_time_zones_info> {\r\n    static void operator()(__std_tzdb_time_zones_info* _Info) noexcept {\r\n        __std_tzdb_delete_time_zones(_Info);\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct _Tzdb_deleter<__std_tzdb_current_zone_info> {\r\n    static void operator()(__std_tzdb_current_zone_info* _Info) noexcept {\r\n        __std_tzdb_delete_current_zone(_Info);\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct _Tzdb_deleter<__std_tzdb_sys_info> {\r\n    static void operator()(__std_tzdb_sys_info* _Info) noexcept {\r\n        __std_tzdb_delete_sys_info(_Info);\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct _Tzdb_deleter<__std_tzdb_leap_info[]> {\r\n    static void operator()(__std_tzdb_leap_info* _Info) noexcept {\r\n        __std_tzdb_delete_leap_seconds(_Info);\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nclass _Crt_allocator {\r\npublic:\r\n    using value_type                             = _Ty;\r\n    using propagate_on_container_move_assignment = true_type;\r\n    using is_always_equal                        = true_type;\r\n\r\n    constexpr _Crt_allocator() noexcept = default;\r\n\r\n    constexpr _Crt_allocator(const _Crt_allocator&) noexcept = default;\r\n    template <class _Other>\r\n    constexpr _Crt_allocator(const _Crt_allocator<_Other>&) noexcept {}\r\n\r\n    _NODISCARD __declspec(allocator) _Ty* allocate(_CRT_GUARDOVERFLOW const size_t _Count) {\r\n        const auto _Ptr = __std_calloc_crt(_Count, sizeof(_Ty));\r\n        if (!_Ptr) {\r\n            _Xbad_alloc();\r\n        }\r\n        return static_cast<_Ty*>(_Ptr);\r\n    }\r\n\r\n    void deallocate(_Ty* const _Ptr, size_t) noexcept {\r\n        __std_free_crt(_Ptr);\r\n    }\r\n\r\n    template <class _Other>\r\n    _NODISCARD bool operator==(const _Crt_allocator<_Other>&) const noexcept {\r\n        return true;\r\n    }\r\n};\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_TZDB_HPP\r\n"
  },
  {
    "path": "stl/inc/__msvc_xlocinfo_types.hpp",
    "content": "// __msvc_xlocinfo_types.hpp internal header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef __MSVC_XLOCINFO_TYPES_HPP\r\n#define __MSVC_XLOCINFO_TYPES_HPP\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\nstruct _Collvec { // stuff needed by _Strcoll, etc.\r\n    unsigned int _Page; // UINT\r\n    wchar_t* _LocaleName;\r\n};\r\n\r\nstruct _Ctypevec { // stuff needed by _Tolower, etc.\r\n    unsigned int _Page; // UINT\r\n    const short* _Table;\r\n    int _Delfl;\r\n    wchar_t* _LocaleName;\r\n};\r\n\r\nstruct _Cvtvec { // stuff needed by _Mbrtowc, etc.\r\n    unsigned int _Page; // UINT\r\n    unsigned int _Mbcurmax;\r\n    int _Isclocale; // LCID == _CLOCALEHANDLE\r\n    unsigned char _Isleadbyte[32]; // 256 bits\r\n};\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_XLOCINFO_TYPES_HPP\r\n"
  },
  {
    "path": "stl/inc/algorithm",
    "content": "// algorithm standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _ALGORITHM_\r\n#define _ALGORITHM_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <__msvc_heap_algorithms.hpp>\r\n#include <__msvc_int128.hpp>\r\n#include <__msvc_minmax.hpp>\r\n#include <xmemory>\r\n\r\n#if _HAS_CXX23\r\n#include <optional>\r\n#endif // _HAS_CXX23\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"lifetimebound\")\r\n#undef msvc\r\n#undef lifetimebound\r\n\r\nextern \"C\" {\r\n// The \"noalias\" attribute tells the compiler optimizer that pointers going into these hand-vectorized algorithms\r\n// won't be stored beyond the lifetime of the function, and that the function will only reference arrays denoted by\r\n// those pointers. The optimizer also assumes in that case that a pointer parameter is not returned to the caller via\r\n// the return value, so functions using \"noalias\" must usually return void. This attribute is valuable because these\r\n// functions are in native code objects that the compiler cannot analyze. In the absence of the noalias attribute, the\r\n// compiler has to assume that the denoted arrays are \"globally address taken\", and that any later calls to\r\n// unanalyzable routines may modify those arrays.\r\n\r\n#if _VECTORIZED_FIND_FIRST_OF\r\nconst void* __stdcall __std_find_first_of_trivial_1(\r\n    const void* _First1, const void* _Last1, const void* _First2, const void* _Last2) noexcept;\r\nconst void* __stdcall __std_find_first_of_trivial_2(\r\n    const void* _First1, const void* _Last1, const void* _First2, const void* _Last2) noexcept;\r\nconst void* __stdcall __std_find_first_of_trivial_4(\r\n    const void* _First1, const void* _Last1, const void* _First2, const void* _Last2) noexcept;\r\nconst void* __stdcall __std_find_first_of_trivial_8(\r\n    const void* _First1, const void* _Last1, const void* _First2, const void* _Last2) noexcept;\r\n#endif // ^^^ _VECTORIZED_FIND_FIRST_OF ^^^\r\n\r\n#if _VECTORIZED_REVERSE_COPY\r\n__declspec(noalias) void __cdecl __std_reverse_copy_trivially_copyable_1(\r\n    const void* _First, const void* _Last, void* _Dest) noexcept;\r\n__declspec(noalias) void __cdecl __std_reverse_copy_trivially_copyable_2(\r\n    const void* _First, const void* _Last, void* _Dest) noexcept;\r\n__declspec(noalias) void __cdecl __std_reverse_copy_trivially_copyable_4(\r\n    const void* _First, const void* _Last, void* _Dest) noexcept;\r\n__declspec(noalias) void __cdecl __std_reverse_copy_trivially_copyable_8(\r\n    const void* _First, const void* _Last, void* _Dest) noexcept;\r\n#endif // ^^^ _VECTORIZED_REVERSE_COPY ^^^\r\n\r\n#if _VECTORIZED_MINMAX_ELEMENT\r\n_Min_max_element_t __stdcall __std_minmax_element_1(const void* _First, const void* _Last, bool _Signed) noexcept;\r\n_Min_max_element_t __stdcall __std_minmax_element_2(const void* _First, const void* _Last, bool _Signed) noexcept;\r\n_Min_max_element_t __stdcall __std_minmax_element_4(const void* _First, const void* _Last, bool _Signed) noexcept;\r\n#if _VECTORIZED_MINMAX_ELEMENT_64BIT_INT\r\n_Min_max_element_t __stdcall __std_minmax_element_8(const void* _First, const void* _Last, bool _Signed) noexcept;\r\n#endif // ^^^ _VECTORIZED_MINMAX_ELEMENT_64BIT_INT ^^^\r\n_Min_max_element_t __stdcall __std_minmax_element_f(const void* _First, const void* _Last, bool _Unused) noexcept;\r\n_Min_max_element_t __stdcall __std_minmax_element_d(const void* _First, const void* _Last, bool _Unused) noexcept;\r\n#endif // ^^^ _VECTORIZED_MINMAX_ELEMENT ^^^\r\n\r\n#if _VECTORIZED_MINMAX\r\n__declspec(noalias) _Min_max_1i __stdcall __std_minmax_1i(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) _Min_max_1u __stdcall __std_minmax_1u(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) _Min_max_2i __stdcall __std_minmax_2i(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) _Min_max_2u __stdcall __std_minmax_2u(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) _Min_max_4i __stdcall __std_minmax_4i(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) _Min_max_4u __stdcall __std_minmax_4u(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) _Min_max_8i __stdcall __std_minmax_8i(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) _Min_max_8u __stdcall __std_minmax_8u(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) _Min_max_f __stdcall __std_minmax_f(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) _Min_max_d __stdcall __std_minmax_d(const void* _First, const void* _Last) noexcept;\r\n#endif // ^^^ _VECTORIZED_MINMAX ^^^\r\n\r\n#if _VECTORIZED_IS_SORTED_UNTIL\r\nconst void* __stdcall __std_is_sorted_until_1i(const void* _First, const void* _Last, bool _Greater) noexcept;\r\nconst void* __stdcall __std_is_sorted_until_1u(const void* _First, const void* _Last, bool _Greater) noexcept;\r\nconst void* __stdcall __std_is_sorted_until_2i(const void* _First, const void* _Last, bool _Greater) noexcept;\r\nconst void* __stdcall __std_is_sorted_until_2u(const void* _First, const void* _Last, bool _Greater) noexcept;\r\nconst void* __stdcall __std_is_sorted_until_4i(const void* _First, const void* _Last, bool _Greater) noexcept;\r\nconst void* __stdcall __std_is_sorted_until_4u(const void* _First, const void* _Last, bool _Greater) noexcept;\r\nconst void* __stdcall __std_is_sorted_until_8i(const void* _First, const void* _Last, bool _Greater) noexcept;\r\nconst void* __stdcall __std_is_sorted_until_8u(const void* _First, const void* _Last, bool _Greater) noexcept;\r\nconst void* __stdcall __std_is_sorted_until_f(const void* _First, const void* _Last, bool _Greater) noexcept;\r\nconst void* __stdcall __std_is_sorted_until_d(const void* _First, const void* _Last, bool _Greater) noexcept;\r\n#endif // ^^^ _VECTORIZED_IS_SORTED_UNTIL ^^^\r\n\r\n#if _VECTORIZED_INCLUDES\r\n__declspec(noalias) bool __stdcall __std_includes_less_1i(\r\n    const void* _First1, const void* _Last1, const void* _First2, const void* _Last2) noexcept;\r\n__declspec(noalias) bool __stdcall __std_includes_less_1u(\r\n    const void* _First1, const void* _Last1, const void* _First2, const void* _Last2) noexcept;\r\n__declspec(noalias) bool __stdcall __std_includes_less_2i(\r\n    const void* _First1, const void* _Last1, const void* _First2, const void* _Last2) noexcept;\r\n__declspec(noalias) bool __stdcall __std_includes_less_2u(\r\n    const void* _First1, const void* _Last1, const void* _First2, const void* _Last2) noexcept;\r\n__declspec(noalias) bool __stdcall __std_includes_less_4i(\r\n    const void* _First1, const void* _Last1, const void* _First2, const void* _Last2) noexcept;\r\n__declspec(noalias) bool __stdcall __std_includes_less_4u(\r\n    const void* _First1, const void* _Last1, const void* _First2, const void* _Last2) noexcept;\r\n__declspec(noalias) bool __stdcall __std_includes_less_8i(\r\n    const void* _First1, const void* _Last1, const void* _First2, const void* _Last2) noexcept;\r\n__declspec(noalias) bool __stdcall __std_includes_less_8u(\r\n    const void* _First1, const void* _Last1, const void* _First2, const void* _Last2) noexcept;\r\n#endif // ^^^ _VECTORIZED_INCLUDES ^^^\r\n\r\n#if _VECTORIZED_REPLACE\r\n// TRANSITION, DevCom-10610477\r\n__declspec(noalias) void __stdcall __std_replace_4(\r\n    void* _First, void* _Last, uint32_t _Old_val, uint32_t _New_val) noexcept;\r\n__declspec(noalias) void __stdcall __std_replace_8(\r\n    void* _First, void* _Last, uint64_t _Old_val, uint64_t _New_val) noexcept;\r\n#endif // ^^^ _VECTORIZED_REPLACE ^^^\r\n\r\n#if _VECTORIZED_REPLACE_COPY\r\n__declspec(noalias) void __stdcall __std_replace_copy_1(\r\n    const void* _First, const void* _Last, void* _Dest, uint8_t _Old_val, uint8_t _New_val) noexcept;\r\n__declspec(noalias) void __stdcall __std_replace_copy_2(\r\n    const void* _First, const void* _Last, void* _Dest, uint16_t _Old_val, uint16_t _New_val) noexcept;\r\n__declspec(noalias) void __stdcall __std_replace_copy_4(\r\n    const void* _First, const void* _Last, void* _Dest, uint32_t _Old_val, uint32_t _New_val) noexcept;\r\n__declspec(noalias) void __stdcall __std_replace_copy_8(\r\n    const void* _First, const void* _Last, void* _Dest, uint64_t _Old_val, uint64_t _New_val) noexcept;\r\n#endif // ^^^ _VECTORIZED_REPLACE_COPY ^^^\r\n\r\n#if _VECTORIZED_SEARCH_N\r\nconst void* __stdcall __std_search_n_1(const void* _First, const void* _Last, size_t _Count, uint8_t _Value) noexcept;\r\nconst void* __stdcall __std_search_n_2(const void* _First, const void* _Last, size_t _Count, uint16_t _Value) noexcept;\r\nconst void* __stdcall __std_search_n_4(const void* _First, const void* _Last, size_t _Count, uint32_t _Value) noexcept;\r\nconst void* __stdcall __std_search_n_8(const void* _First, const void* _Last, size_t _Count, uint64_t _Value) noexcept;\r\n#endif // ^^^ _VECTORIZED_SEARCH_N ^^^\r\n\r\n#if _VECTORIZED_REMOVE_COPY\r\nvoid* __stdcall __std_remove_copy_1(const void* _First, const void* _Last, void* _Out, uint8_t _Val) noexcept;\r\nvoid* __stdcall __std_remove_copy_2(const void* _First, const void* _Last, void* _Out, uint16_t _Val) noexcept;\r\nvoid* __stdcall __std_remove_copy_4(const void* _First, const void* _Last, void* _Out, uint32_t _Val) noexcept;\r\nvoid* __stdcall __std_remove_copy_8(const void* _First, const void* _Last, void* _Out, uint64_t _Val) noexcept;\r\n#endif // ^^^ _VECTORIZED_REMOVE_COPY ^^^\r\n\r\n#if _VECTORIZED_UNIQUE\r\nvoid* __stdcall __std_unique_1(void* _First, void* _Last) noexcept;\r\nvoid* __stdcall __std_unique_2(void* _First, void* _Last) noexcept;\r\nvoid* __stdcall __std_unique_4(void* _First, void* _Last) noexcept;\r\nvoid* __stdcall __std_unique_8(void* _First, void* _Last) noexcept;\r\n#endif // ^^^ _VECTORIZED_UNIQUE ^^^\r\n\r\n#if _VECTORIZED_UNIQUE_COPY\r\nvoid* __stdcall __std_unique_copy_1(const void* _First, const void* _Last, void* _Dest) noexcept;\r\nvoid* __stdcall __std_unique_copy_2(const void* _First, const void* _Last, void* _Dest) noexcept;\r\nvoid* __stdcall __std_unique_copy_4(const void* _First, const void* _Last, void* _Dest) noexcept;\r\nvoid* __stdcall __std_unique_copy_8(const void* _First, const void* _Last, void* _Dest) noexcept;\r\n#endif // ^^^ _VECTORIZED_UNIQUE_COPY ^^^\r\n\r\n} // extern \"C\"\r\n\r\n_STD_BEGIN\r\n\r\n#if _VECTORIZED_FIND_FIRST_OF\r\ntemplate <class _Ty1, class _Ty2>\r\n_Ty1* _Find_first_of_vectorized(\r\n    _Ty1* const _First1, _Ty1* const _Last1, _Ty2* const _First2, _Ty2* const _Last2) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(sizeof(_Ty1) == sizeof(_Ty2));\r\n    if constexpr (sizeof(_Ty1) == 1) {\r\n        return const_cast<_Ty1*>(\r\n            static_cast<const _Ty1*>(::__std_find_first_of_trivial_1(_First1, _Last1, _First2, _Last2)));\r\n    } else if constexpr (sizeof(_Ty1) == 2) {\r\n        return const_cast<_Ty1*>(\r\n            static_cast<const _Ty1*>(::__std_find_first_of_trivial_2(_First1, _Last1, _First2, _Last2)));\r\n    } else if constexpr (sizeof(_Ty1) == 4) {\r\n        return const_cast<_Ty1*>(\r\n            static_cast<const _Ty1*>(::__std_find_first_of_trivial_4(_First1, _Last1, _First2, _Last2)));\r\n    } else if constexpr (sizeof(_Ty1) == 8) {\r\n        return const_cast<_Ty1*>(\r\n            static_cast<const _Ty1*>(::__std_find_first_of_trivial_8(_First1, _Last1, _First2, _Last2)));\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_FIND_FIRST_OF ^^^\r\n\r\n#if _VECTORIZED_REVERSE_COPY\r\ntemplate <size_t _Nx>\r\n__declspec(noalias) void _Reverse_copy_vectorized(const void* _First, const void* _Last, void* _Dest) noexcept {\r\n    if constexpr (_Nx == 1) {\r\n        ::__std_reverse_copy_trivially_copyable_1(_First, _Last, _Dest);\r\n    } else if constexpr (_Nx == 2) {\r\n        ::__std_reverse_copy_trivially_copyable_2(_First, _Last, _Dest);\r\n    } else if constexpr (_Nx == 4) {\r\n        ::__std_reverse_copy_trivially_copyable_4(_First, _Last, _Dest);\r\n    } else if constexpr (_Nx == 8) {\r\n        ::__std_reverse_copy_trivially_copyable_8(_First, _Last, _Dest);\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_REVERSE_COPY ^^^\r\n\r\n#if _VECTORIZED_MINMAX_ELEMENT\r\ntemplate <class _Ty>\r\npair<_Ty*, _Ty*> _Minmax_element_vectorized(_Ty* const _First, _Ty* const _Last) noexcept {\r\n    constexpr bool _Signed = is_signed_v<_Ty>;\r\n\r\n    _Min_max_element_t _Res;\r\n\r\n    if constexpr (is_same_v<remove_const_t<_Ty>, float>) {\r\n        _Res = ::__std_minmax_element_f(_First, _Last, false);\r\n    } else if constexpr (_Is_any_of_v<remove_const_t<_Ty>, double, long double>) {\r\n        _Res = ::__std_minmax_element_d(_First, _Last, false);\r\n    } else if constexpr (sizeof(_Ty) == 1) {\r\n        _Res = ::__std_minmax_element_1(_First, _Last, _Signed);\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        _Res = ::__std_minmax_element_2(_First, _Last, _Signed);\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        _Res = ::__std_minmax_element_4(_First, _Last, _Signed);\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n#if _VECTORIZED_MINMAX_ELEMENT_64BIT_INT\r\n        _Res = ::__std_minmax_element_8(_First, _Last, _Signed);\r\n#else // ^^^ _VECTORIZED_MINMAX_ELEMENT_64BIT_INT / !_VECTORIZED_MINMAX_ELEMENT_64BIT_INT vvv\r\n        static_assert(false, \"unexpected size\");\r\n#endif // ^^^ !_VECTORIZED_MINMAX_ELEMENT_64BIT_INT ^^^\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n\r\n    return {const_cast<_Ty*>(static_cast<const _Ty*>(_Res._Min)), const_cast<_Ty*>(static_cast<const _Ty*>(_Res._Max))};\r\n}\r\n#endif // ^^^ _VECTORIZED_MINMAX_ELEMENT ^^^\r\n\r\n#if _VECTORIZED_MINMAX\r\ntemplate <class _Ty>\r\nauto _Minmax_vectorized(_Ty* const _First, _Ty* const _Last) noexcept {\r\n    constexpr bool _Signed = is_signed_v<_Ty>;\r\n\r\n    if constexpr (is_pointer_v<_Ty>) {\r\n#ifdef _WIN64\r\n        const auto _Result = ::__std_minmax_8u(_First, _Last);\r\n#else\r\n        const auto _Result = ::__std_minmax_4u(_First, _Last);\r\n#endif\r\n        return _Min_max_p{reinterpret_cast<void*>(_Result._Min), reinterpret_cast<void*>(_Result._Max)};\r\n    } else if constexpr (is_same_v<remove_const_t<_Ty>, float>) {\r\n        return ::__std_minmax_f(_First, _Last);\r\n    } else if constexpr (_Is_any_of_v<remove_const_t<_Ty>, double, long double>) {\r\n        return ::__std_minmax_d(_First, _Last);\r\n    } else if constexpr (sizeof(_Ty) == 1) {\r\n        if constexpr (_Signed) {\r\n            return ::__std_minmax_1i(_First, _Last);\r\n        } else {\r\n            return ::__std_minmax_1u(_First, _Last);\r\n        }\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        if constexpr (_Signed) {\r\n            return ::__std_minmax_2i(_First, _Last);\r\n        } else {\r\n            return ::__std_minmax_2u(_First, _Last);\r\n        }\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        if constexpr (_Signed) {\r\n            return ::__std_minmax_4i(_First, _Last);\r\n        } else {\r\n            return ::__std_minmax_4u(_First, _Last);\r\n        }\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        if constexpr (_Signed) {\r\n            return ::__std_minmax_8i(_First, _Last);\r\n        } else {\r\n            return ::__std_minmax_8u(_First, _Last);\r\n        }\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_MINMAX ^^^\r\n\r\n#if _VECTORIZED_IS_SORTED_UNTIL\r\ntemplate <class _Ty>\r\n_Ty* _Is_sorted_until_vectorized(_Ty* const _First, _Ty* const _Last, const bool _Greater) noexcept {\r\n    constexpr bool _Signed = is_signed_v<_Ty>;\r\n\r\n    if constexpr (is_same_v<remove_const_t<_Ty>, float>) {\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_is_sorted_until_f(_First, _Last, _Greater)));\r\n    } else if constexpr (_Is_any_of_v<remove_const_t<_Ty>, double, long double>) {\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_is_sorted_until_d(_First, _Last, _Greater)));\r\n    } else if constexpr (sizeof(_Ty) == 1) {\r\n        if constexpr (_Signed) {\r\n            return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_is_sorted_until_1i(_First, _Last, _Greater)));\r\n        } else {\r\n            return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_is_sorted_until_1u(_First, _Last, _Greater)));\r\n        }\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        if constexpr (_Signed) {\r\n            return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_is_sorted_until_2i(_First, _Last, _Greater)));\r\n        } else {\r\n            return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_is_sorted_until_2u(_First, _Last, _Greater)));\r\n        }\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        if constexpr (_Signed) {\r\n            return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_is_sorted_until_4i(_First, _Last, _Greater)));\r\n        } else {\r\n            return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_is_sorted_until_4u(_First, _Last, _Greater)));\r\n        }\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        if constexpr (_Signed) {\r\n            return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_is_sorted_until_8i(_First, _Last, _Greater)));\r\n        } else {\r\n            return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_is_sorted_until_8u(_First, _Last, _Greater)));\r\n        }\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_IS_SORTED_UNTIL ^^^\r\n\r\n#if _VECTORIZED_INCLUDES\r\ntemplate <class _Ty>\r\nbool _Includes_vectorized(\r\n    const _Ty* const _First1, const _Ty* const _Last1, const _Ty* const _First2, const _Ty* const _Last2) noexcept {\r\n    constexpr bool _Signed = is_signed_v<_Ty>;\r\n\r\n    if constexpr (sizeof(_Ty) == 1) {\r\n        if constexpr (_Signed) {\r\n            return ::__std_includes_less_1i(_First1, _Last1, _First2, _Last2);\r\n        } else {\r\n            return ::__std_includes_less_1u(_First1, _Last1, _First2, _Last2);\r\n        }\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        if constexpr (_Signed) {\r\n            return ::__std_includes_less_2i(_First1, _Last1, _First2, _Last2);\r\n        } else {\r\n            return ::__std_includes_less_2u(_First1, _Last1, _First2, _Last2);\r\n        }\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        if constexpr (_Signed) {\r\n            return ::__std_includes_less_4i(_First1, _Last1, _First2, _Last2);\r\n        } else {\r\n            return ::__std_includes_less_4u(_First1, _Last1, _First2, _Last2);\r\n        }\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        if constexpr (_Signed) {\r\n            return ::__std_includes_less_8i(_First1, _Last1, _First2, _Last2);\r\n        } else {\r\n            return ::__std_includes_less_8u(_First1, _Last1, _First2, _Last2);\r\n        }\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_INCLUDES ^^^\r\n\r\n#if _VECTORIZED_REPLACE\r\ntemplate <class _Ty, class _TVal1, class _TVal2>\r\n__declspec(noalias) void _Replace_vectorized(\r\n    _Ty* const _First, _Ty* const _Last, const _TVal1 _Old_val, const _TVal2 _New_val) noexcept {\r\n    if constexpr (sizeof(_Ty) == 4) {\r\n        ::__std_replace_4(\r\n            _First, _Last, _STD _Find_arg_cast<uint32_t>(_Old_val), _STD _Find_arg_cast<uint32_t>(_New_val));\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        ::__std_replace_8(\r\n            _First, _Last, _STD _Find_arg_cast<uint64_t>(_Old_val), _STD _Find_arg_cast<uint64_t>(_New_val));\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_REPLACE ^^^\r\n\r\n#if _VECTORIZED_REPLACE_COPY\r\ntemplate <class _Ty, class _TVal1, class _TVal2>\r\n__declspec(noalias) void _Replace_copy_vectorized(const _Ty* const _First, const _Ty* const _Last, _Ty* const _Dest,\r\n    const _TVal1 _Old_val, const _TVal2 _New_val) noexcept {\r\n    if constexpr (sizeof(_Ty) == 1) {\r\n        ::__std_replace_copy_1(\r\n            _First, _Last, _Dest, _STD _Find_arg_cast<uint8_t>(_Old_val), _STD _Find_arg_cast<uint8_t>(_New_val));\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        ::__std_replace_copy_2(\r\n            _First, _Last, _Dest, _STD _Find_arg_cast<uint16_t>(_Old_val), _STD _Find_arg_cast<uint16_t>(_New_val));\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        ::__std_replace_copy_4(\r\n            _First, _Last, _Dest, _STD _Find_arg_cast<uint32_t>(_Old_val), _STD _Find_arg_cast<uint32_t>(_New_val));\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        ::__std_replace_copy_8(\r\n            _First, _Last, _Dest, _STD _Find_arg_cast<uint64_t>(_Old_val), _STD _Find_arg_cast<uint64_t>(_New_val));\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_REPLACE_COPY ^^^\r\n\r\n#if _VECTORIZED_SEARCH_N\r\ntemplate <class _Ty, class _TVal>\r\n_Ty* _Search_n_vectorized(_Ty* const _First, _Ty* const _Last, const size_t _Count, const _TVal _Val) noexcept {\r\n    if constexpr (sizeof(_Ty) == 1) {\r\n        return const_cast<_Ty*>(\r\n            static_cast<const _Ty*>(::__std_search_n_1(_First, _Last, _Count, _STD _Find_arg_cast<uint8_t>(_Val))));\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        return const_cast<_Ty*>(\r\n            static_cast<const _Ty*>(::__std_search_n_2(_First, _Last, _Count, _STD _Find_arg_cast<uint16_t>(_Val))));\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        return const_cast<_Ty*>(\r\n            static_cast<const _Ty*>(::__std_search_n_4(_First, _Last, _Count, _STD _Find_arg_cast<uint32_t>(_Val))));\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        return const_cast<_Ty*>(\r\n            static_cast<const _Ty*>(::__std_search_n_8(_First, _Last, _Count, _STD _Find_arg_cast<uint64_t>(_Val))));\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_SEARCH_N ^^^\r\n\r\n#if _VECTORIZED_UNIQUE\r\ntemplate <class _Ty>\r\n_Ty* _Unique_vectorized(_Ty* const _First, _Ty* const _Last) noexcept {\r\n    if constexpr (sizeof(_Ty) == 1) {\r\n        return reinterpret_cast<_Ty*>(::__std_unique_1(_First, _Last));\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        return reinterpret_cast<_Ty*>(::__std_unique_2(_First, _Last));\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        return reinterpret_cast<_Ty*>(::__std_unique_4(_First, _Last));\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        return reinterpret_cast<_Ty*>(::__std_unique_8(_First, _Last));\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_UNIQUE ^^^\r\n\r\n#if _VECTORIZED_REMOVE_COPY\r\ntemplate <class _Ty, class _TVal>\r\n_Ty* _Remove_copy_vectorized(\r\n    const _Ty* const _First, const _Ty* const _Last, _Ty* const _Dest, const _TVal _Val) noexcept {\r\n    if constexpr (sizeof(_Ty) == 1) {\r\n        return reinterpret_cast<_Ty*>(::__std_remove_copy_1(_First, _Last, _Dest, _STD _Find_arg_cast<uint8_t>(_Val)));\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        return reinterpret_cast<_Ty*>(::__std_remove_copy_2(_First, _Last, _Dest, _STD _Find_arg_cast<uint16_t>(_Val)));\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        return reinterpret_cast<_Ty*>(::__std_remove_copy_4(_First, _Last, _Dest, _STD _Find_arg_cast<uint32_t>(_Val)));\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        return reinterpret_cast<_Ty*>(::__std_remove_copy_8(_First, _Last, _Dest, _STD _Find_arg_cast<uint64_t>(_Val)));\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_REMOVE_COPY ^^^\r\n\r\n#if _VECTORIZED_UNIQUE_COPY\r\ntemplate <class _Ty>\r\n_Ty* _Unique_copy_vectorized(const _Ty* const _First, const _Ty* const _Last, _Ty* const _Dest) noexcept {\r\n    if constexpr (sizeof(_Ty) == 1) {\r\n        return reinterpret_cast<_Ty*>(::__std_unique_copy_1(_First, _Last, _Dest));\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        return reinterpret_cast<_Ty*>(::__std_unique_copy_2(_First, _Last, _Dest));\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        return reinterpret_cast<_Ty*>(::__std_unique_copy_4(_First, _Last, _Dest));\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        return reinterpret_cast<_Ty*>(::__std_unique_copy_8(_First, _Last, _Dest));\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_UNIQUE_COPY ^^^\r\n\r\n#if _VECTORIZED_REPLACE\r\n// Can we activate the vector algorithms for replace?\r\ntemplate <class _Iter, class _Ty1>\r\nconstexpr bool _Vector_alg_in_replace_is_safe = _Vector_alg_in_find_is_safe<_Iter, _Ty1> // can search for the value\r\n                                             && sizeof(_Iter_value_t<_Iter>) >= 4; // avx masked op compatible size\r\n\r\n// Can we activate the vector algorithms for ranges::replace?\r\ntemplate <class _Iter, class _Ty1, class _Ty2>\r\nconstexpr bool _Vector_alg_in_ranges_replace_is_safe =\r\n    _Vector_alg_in_replace_is_safe<_Iter, _Ty1> // can search and replace\r\n    && _Vector_alg_in_find_is_safe_elem<_Ty2, _Iter_value_t<_Iter>>; // replacement fits\r\n#endif // ^^^ _VECTORIZED_REPLACE ^^^\r\n\r\n#if _VECTORIZED_SEARCH_N\r\n// Can we activate the vector algorithms for search_n?\r\ntemplate <class _Iter, class _Ty, class _Pr>\r\nconstexpr bool _Vector_alg_in_search_n_is_safe = _Vector_alg_in_find_is_safe<_Iter, _Ty>\r\n                                              && _Is_any_of_v<_Pr,\r\n#if _HAS_CXX20\r\n                                                  ranges::equal_to,\r\n#endif\r\n                                                  equal_to<>>;\r\n#endif // ^^^ _VECTORIZED_SEARCH_N ^^^\r\n\r\n#if _VECTORIZED_UNIQUE || _VECTORIZED_UNIQUE_COPY\r\n// Can we activate the vector algorithms for unique and unique_copy?\r\ntemplate <class _Iter, class _Pr>\r\nconstexpr bool _Vector_alg_in_unique_is_safe = _Vector_alg_in_search_is_safe<_Iter, _Iter, _Pr>;\r\n#endif // ^^^ _VECTORIZED_UNIQUE || _VECTORIZED_UNIQUE_COPY ^^^\r\n\r\n#if _VECTORIZED_REMOVE_COPY || _VECTORIZED_UNIQUE_COPY\r\n// Can we use this output iterator for remove_copy and unique_copy?\r\ntemplate <class _Out, class _In>\r\nconstexpr bool _Output_iterator_for_vector_alg_is_safe() {\r\n    // Before running remove_copy and unique_copy, the output size is unknown. This limits vectorization\r\n    // to pointers (after unwrapping). N5014 [iterator.requirements.general]/13 allows us to convert\r\n    // a range of contiguous iterators to pointers if and only if we know the size of the range ahead of time.\r\n    if constexpr (is_pointer_v<_Out>) {\r\n        return is_same_v<_Iter_value_t<_Out>, remove_const_t<_Iter_value_t<_In>>>;\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_REMOVE_COPY || _VECTORIZED_UNIQUE_COPY ^^^\r\n\r\n#if _VECTORIZED_REPLACE_COPY\r\ntemplate <class _Out, class _In>\r\nconstexpr bool _Output_iterator_for_known_size_vector_alg_is_safe() {\r\n    if constexpr (_Iterator_is_contiguous<_Out>) {\r\n        return is_same_v<_Iter_value_t<_Out>, remove_const_t<_Iter_value_t<_In>>>;\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_REPLACE_COPY ^^^\r\n\r\n#if _VECTORIZED_INCLUDES\r\n// Can we activate the vector algorithms for includes?\r\ntemplate <class _Iter1, class _Iter2, class _Elem = _Iter_value_t<_Iter1>>\r\nconstexpr bool _Vector_alg_includes_iterators_safe =\r\n    _Iterators_are_contiguous<_Iter1, _Iter2> // Iterators must be contiguous so we can get raw pointers.\r\n    && !_Iterator_is_volatile<_Iter1> && !_Iterator_is_volatile<_Iter2> // Iterators must not be volatile.\r\n    && is_same_v<_Elem, _Iter_value_t<_Iter2>> // Iterators have the same value type.\r\n    && disjunction_v<is_integral<_Elem>, is_pointer<_Elem>>; // Integral or pointer type.\r\n#endif // ^^^ _VECTORIZED_INCLUDES ^^^\r\n\r\n#define _REQUIRE_CPP17_MUTABLE_RANDOM_ACCESS_ITERATOR(_Iter) \\\r\n    static_assert(_Is_cpp17_random_iter_v<_Iter>,            \\\r\n        \"This algorithm requires that mutable iterators be Cpp17RandomAccessIterators or stronger.\")\r\n\r\n#define _REQUIRE_BIDIRECTIONAL_ITERATOR(_Iter) \\\r\n    static_assert(_Is_ranges_bidi_iter_v<_Iter>, \"This algorithm requires bidirectional iterators or stronger.\")\r\n\r\n_INLINE_VAR constexpr int _ISORT_MAX = 32; // maximum size for insertion sort\r\n// If _ISORT_MAX is ever changed from 32 == 2^5, re-analyze the implementation of stable_sort for integer overflow.\r\n\r\ntemplate <class _It>\r\nconstexpr _Iter_diff_t<_It> _Isort_max{_ISORT_MAX};\r\n\r\ntemplate <class _Diff>\r\nconstexpr ptrdiff_t _Temporary_buffer_size(const _Diff _Value) noexcept {\r\n    // convert an iterator difference_type to a ptrdiff_t for use in temporary buffers\r\n    using _CT = common_type_t<ptrdiff_t, _Diff>;\r\n    return static_cast<ptrdiff_t>((_STD min) (static_cast<_CT>(PTRDIFF_MAX), static_cast<_CT>(_Value)));\r\n}\r\n\r\ntemplate <class _Ty>\r\nstruct _Optimistic_temporary_buffer2 { // temporary storage with _alloca-like attempt\r\n    static constexpr size_t _Optimistic_size  = 4096; // default to ~1 page\r\n    static constexpr size_t _Optimistic_count = (_STD max) (static_cast<size_t>(1), _Optimistic_size / sizeof(_Ty));\r\n\r\n    template <class _Diff>\r\n    explicit _Optimistic_temporary_buffer2(const _Diff _Requested_size) noexcept { // get temporary storage\r\n        const auto _Attempt = _Temporary_buffer_size(_Requested_size);\r\n        // Since _Diff is a count of elements in a forward range, and forward iterators must denote objects in memory,\r\n        // it must fit in a size_t.\r\n        if (static_cast<size_t>(_Requested_size) <= _Optimistic_count) { // unconditionally engage stack space\r\n            _Data     = reinterpret_cast<_Ty*>(_Stack_space);\r\n            _Capacity = static_cast<ptrdiff_t>(_Requested_size); // in bounds due to if condition\r\n            return;\r\n        }\r\n\r\n        const pair<_Ty*, ptrdiff_t> _Raw = _Get_temporary_buffer<_Ty>(_Attempt);\r\n        if (static_cast<size_t>(_Raw.second) > _Optimistic_count) { // engage heap space\r\n            _Data     = _Raw.first;\r\n            _Capacity = _Raw.second;\r\n            return;\r\n        }\r\n\r\n        // less heap space than stack space, give up and use stack instead\r\n        _STD _Return_temporary_buffer(_Raw.first);\r\n        _Data     = reinterpret_cast<_Ty*>(_Stack_space);\r\n        _Capacity = _Optimistic_count;\r\n    }\r\n\r\n    _Optimistic_temporary_buffer2(const _Optimistic_temporary_buffer2&)            = delete;\r\n    _Optimistic_temporary_buffer2& operator=(const _Optimistic_temporary_buffer2&) = delete;\r\n\r\n    ~_Optimistic_temporary_buffer2() noexcept {\r\n        if (static_cast<size_t>(_Capacity) > _Optimistic_count) {\r\n            _STD _Return_temporary_buffer(_Data);\r\n        }\r\n    }\r\n\r\n    _Ty* _Data; // points to heap memory iff _Capacity > _Optimistic_count\r\n    ptrdiff_t _Capacity;\r\n    alignas(_Ty) unsigned char _Stack_space[sizeof(_Ty) * _Optimistic_count];\r\n};\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In, class _Fun>\r\n    struct in_fun_result {\r\n        /* [[no_unique_address]] */ _In in;\r\n        /* [[no_unique_address]] */ _Fun fun;\r\n\r\n        template <_Convertible_from<const _In&> _IIn, _Convertible_from<const _Fun&> _FFun>\r\n        constexpr operator in_fun_result<_IIn, _FFun>() const& {\r\n            return {in, fun};\r\n        }\r\n\r\n        template <_Convertible_from<_In> _IIn, _Convertible_from<_Fun> _FFun>\r\n        constexpr operator in_fun_result<_IIn, _FFun>() && {\r\n            return {_STD move(in), _STD move(fun)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD template <class _In1, class _In2, class _Out>\r\n    struct in_in_out_result {\r\n        /* [[no_unique_address]] */ _In1 in1;\r\n        /* [[no_unique_address]] */ _In2 in2;\r\n        /* [[no_unique_address]] */ _Out out;\r\n\r\n        template <_Convertible_from<const _In1&> _IIn1, _Convertible_from<const _In2&> _IIn2,\r\n            _Convertible_from<const _Out&> _OOut>\r\n        constexpr operator in_in_out_result<_IIn1, _IIn2, _OOut>() const& {\r\n            return {in1, in2, out};\r\n        }\r\n\r\n        template <_Convertible_from<_In1> _IIn1, _Convertible_from<_In2> _IIn2, _Convertible_from<_Out> _OOut>\r\n        constexpr operator in_in_out_result<_IIn1, _IIn2, _OOut>() && {\r\n            return {_STD move(in1), _STD move(in2), _STD move(out)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD template <class _In, class _Out1, class _Out2>\r\n    struct in_out_out_result {\r\n        /* [[no_unique_address]] */ _In in;\r\n        /* [[no_unique_address]] */ _Out1 out1;\r\n        /* [[no_unique_address]] */ _Out2 out2;\r\n\r\n        template <_Convertible_from<const _In&> _IIn, _Convertible_from<const _Out1&> _OOut1,\r\n            _Convertible_from<const _Out2&> _OOut2>\r\n        constexpr operator in_out_out_result<_IIn, _OOut1, _OOut2>() const& {\r\n            return {in, out1, out2};\r\n        }\r\n\r\n        template <_Convertible_from<_In> _IIn, _Convertible_from<_Out1> _OOut1, _Convertible_from<_Out2> _OOut2>\r\n        constexpr operator in_out_out_result<_IIn, _OOut1, _OOut2>() && {\r\n            return {_STD move(in), _STD move(out1), _STD move(out2)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD template <class _Ty>\r\n    struct min_max_result {\r\n        /* [[no_unique_address]] */ _Ty min;\r\n        /* [[no_unique_address]] */ _Ty max;\r\n\r\n        template <_Convertible_from<const _Ty&> _Ty2>\r\n        constexpr operator min_max_result<_Ty2>() const& {\r\n            return {min, max};\r\n        }\r\n\r\n        template <_Convertible_from<_Ty> _Ty2>\r\n        constexpr operator min_max_result<_Ty2>() && {\r\n            return {_STD move(min), _STD move(max)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD template <class _In>\r\n    struct in_found_result {\r\n        /* [[no_unique_address]] */ _In in;\r\n        bool found;\r\n\r\n        template <_Convertible_from<const _In&> _IIn>\r\n        constexpr operator in_found_result<_IIn>() const& {\r\n            return {in, found};\r\n        }\r\n\r\n        template <_Convertible_from<_In> _IIn>\r\n        constexpr operator in_found_result<_IIn>() && {\r\n            return {_STD move(in), found};\r\n        }\r\n    };\r\n\r\n#if _HAS_CXX23\r\n    _EXPORT_STD template <class _In, class _Ty>\r\n    struct in_value_result {\r\n        _MSVC_NO_UNIQUE_ADDRESS _In in;\r\n        _MSVC_NO_UNIQUE_ADDRESS _Ty value;\r\n\r\n        template <class _IIn, class _TTy>\r\n            requires convertible_to<const _In&, _IIn> && convertible_to<const _Ty&, _TTy>\r\n        constexpr operator in_value_result<_IIn, _TTy>() const& {\r\n            return {in, value};\r\n        }\r\n\r\n        template <class _IIn, class _TTy>\r\n            requires convertible_to<_In, _IIn> && convertible_to<_Ty, _TTy>\r\n        constexpr operator in_value_result<_IIn, _TTy>() && {\r\n            return {_STD move(in), _STD move(value)};\r\n        }\r\n    };\r\n#endif // _HAS_CXX23\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _InIt, class _Fn>\r\n_CONSTEXPR20 _Fn for_each(_InIt _First, _InIt _Last, _Fn _Func) { // perform function for each element [_First, _Last)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        _Func(*_UFirst);\r\n    }\r\n\r\n    return _Func;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Fn, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid for_each(_ExPo&& _Exec, _FwdIt _First, _FwdIt _Last, _Fn _Func) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _InIt, class _Diff, class _Fn>\r\n_CONSTEXPR20 _InIt for_each_n(_InIt _First, const _Diff _Count_raw, _Fn _Func) {\r\n    // perform function for each element [_First, _First + _Count)\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    if (0 < _Count) {\r\n        auto _UFirst = _STD _Get_unwrapped_n(_First, _Count);\r\n        do {\r\n            _Func(*_UFirst);\r\n            --_Count;\r\n            ++_UFirst;\r\n        } while (0 < _Count);\r\n\r\n        _STD _Seek_wrapped(_First, _UFirst);\r\n    }\r\n\r\n    return _First;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Diff, class _Fn, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt for_each_n(_ExPo&& _Exec, _FwdIt _First, _Diff _Count_raw, _Fn _Func) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In, class _Fun>\r\n    using for_each_result = in_fun_result<_In, _Fun>;\r\n\r\n    class _For_each_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirectly_unary_invocable<projected<_It, _Pj>> _Fn>\r\n        static constexpr for_each_result<_It, _Fn> operator()(_It _First, _Se _Last, _Fn _Func, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n\r\n            auto _UResult = _For_each_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD move(_Func), _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            return {_STD move(_First), _STD move(_UResult.fun)};\r\n        }\r\n\r\n        template <input_range _Rng, class _Pj = identity,\r\n            indirectly_unary_invocable<projected<iterator_t<_Rng>, _Pj>> _Fn>\r\n        static constexpr for_each_result<borrowed_iterator_t<_Rng>, _Fn> operator()(\r\n            _Rng&& _Range, _Fn _Func, _Pj _Proj = {}) {\r\n            auto _First = _RANGES begin(_Range);\r\n\r\n            auto _UResult = _For_each_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range),\r\n                _STD move(_Func), _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            return {_STD move(_First), _STD move(_UResult.fun)};\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Pj, class _Fn>\r\n        _NODISCARD static constexpr for_each_result<_It, _Fn> _For_each_unchecked(\r\n            _It _First, const _Se _Last, _Fn _Func, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_unary_invocable<_Fn, projected<_It, _Pj>>);\r\n\r\n            for (; _First != _Last; ++_First) {\r\n                _STD invoke(_Func, _STD invoke(_Proj, *_First));\r\n            }\r\n\r\n            return {_STD move(_First), _STD move(_Func)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _For_each_fn for_each;\r\n\r\n    _EXPORT_STD template <class _In, class _Fun>\r\n    using for_each_n_result = in_fun_result<_In, _Fun>;\r\n\r\n    struct _For_each_n_fn {\r\n        template <input_iterator _It, class _Pj = identity, indirectly_unary_invocable<projected<_It, _Pj>> _Fn>\r\n        static constexpr for_each_n_result<_It, _Fn> operator()(\r\n            _It _First, iter_difference_t<_It> _Count, _Fn _Func, _Pj _Proj = {}) {\r\n            if (0 < _Count) {\r\n                auto _UFirst = _STD _Get_unwrapped_n(_STD move(_First), _Count);\r\n                do {\r\n                    _STD invoke(_Func, _STD invoke(_Proj, *_UFirst));\r\n                    --_Count;\r\n                    ++_UFirst;\r\n                } while (0 < _Count);\r\n\r\n                _STD _Seek_wrapped(_First, _STD move(_UFirst));\r\n            }\r\n\r\n            return {_STD move(_First), _STD move(_Func)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _For_each_n_fn for_each_n;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt find_if(_ExPo&& _Exec, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt, class _Pr>\r\n_NODISCARD _CONSTEXPR20 _InIt find_if_not(_InIt _First, const _InIt _Last, _Pr _Pred) {\r\n    // find first element that satisfies !_Pred\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        if (!_Pred(*_UFirst)) {\r\n            break;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First, _UFirst);\r\n    return _First;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt find_if_not(_ExPo&& _Exec, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Pr>\r\n_NODISCARD _CONSTEXPR20 _FwdIt adjacent_find(const _FwdIt _First, _FwdIt _Last, _Pr _Pred) {\r\n    // find first satisfying _Pred with successor\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst = _STD _Get_unwrapped(_First);\r\n    auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    if (_UFirst != _ULast) {\r\n#if _VECTORIZED_ADJACENT_FIND\r\n        if constexpr (_Vector_alg_in_search_is_safe<decltype(_UFirst), decltype(_UFirst), _Pr>) {\r\n            if (!_STD _Is_constant_evaluated()) {\r\n                const auto _First_ptr = _STD _To_address(_UFirst);\r\n                const auto _Result    = _STD _Adjacent_find_vectorized(_First_ptr, _STD _To_address(_ULast));\r\n\r\n                if constexpr (is_pointer_v<decltype(_ULast)>) {\r\n                    _ULast = _Result;\r\n                } else {\r\n                    _ULast = _UFirst + static_cast<_Iter_diff_t<decltype(_UFirst)>>(_Result - _First_ptr);\r\n                }\r\n\r\n                _STD _Seek_wrapped(_Last, _ULast);\r\n                return _Last;\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_ADJACENT_FIND ^^^\r\n\r\n        for (auto _UNext = _UFirst; ++_UNext != _ULast; _UFirst = _UNext) {\r\n            if (_Pred(*_UFirst, *_UNext)) {\r\n                _ULast = _UFirst;\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Last, _ULast);\r\n    return _Last;\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt>\r\n_NODISCARD _CONSTEXPR20 _FwdIt adjacent_find(const _FwdIt _First, const _FwdIt _Last) { // find first matching successor\r\n    return _STD adjacent_find(_First, _Last, equal_to<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt adjacent_find(_ExPo&& _Exec, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt adjacent_find(_ExPo&& _Exec, const _FwdIt _First, const _FwdIt _Last) noexcept /* terminates */ {\r\n    // find first matching successor\r\n    return _STD adjacent_find(_STD forward<_ExPo>(_Exec), _First, _Last, equal_to{});\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Count_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Ty, class _Pj = identity>\r\n            requires indirect_binary_predicate<ranges::equal_to, projected<_It, _Pj>, const _Ty*>\r\n        _NODISCARD static constexpr iter_difference_t<_It> operator()(\r\n            _It _First, _Se _Last, const _Ty& _Val, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            return _Count_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _Val, _STD _Pass_fn(_Proj));\r\n        }\r\n\r\n        template <input_range _Rng, class _Ty, class _Pj = identity>\r\n            requires indirect_binary_predicate<ranges::equal_to, projected<iterator_t<_Rng>, _Pj>, const _Ty*>\r\n        _NODISCARD static constexpr range_difference_t<_Rng> operator()(\r\n            _Rng&& _Range, const _Ty& _Val, _Pj _Proj = {}) {\r\n            return _Count_unchecked(_Ubegin(_Range), _Uend(_Range), _Val, _STD _Pass_fn(_Proj));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Ty, class _Pj>\r\n        _NODISCARD static constexpr iter_difference_t<_It> _Count_unchecked(\r\n            _It _First, const _Se _Last, const _Ty& _Val, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_binary_predicate<ranges::equal_to, projected<_It, _Pj>, const _Ty*>);\r\n\r\n#if _VECTORIZED_COUNT\r\n            if constexpr (is_same_v<_Pj, identity> && _Vector_alg_in_find_is_safe<_It, _Ty>\r\n                          && sized_sentinel_for<_Se, _It>) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    if (!_STD _Could_compare_equal_to_value_type<_It>(_Val)) {\r\n                        return 0;\r\n                    }\r\n\r\n                    const auto _First_ptr = _STD _To_address(_First);\r\n                    const auto _Last_ptr  = _STD _To_address(_First + (_Last - _First));\r\n\r\n                    return static_cast<iter_difference_t<_It>>(_STD _Count_vectorized(_First_ptr, _Last_ptr, _Val));\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_COUNT ^^^\r\n\r\n            iter_difference_t<_It> _Count = 0;\r\n            for (; _First != _Last; ++_First) {\r\n                if (_STD invoke(_Proj, *_First) == _Val) {\r\n                    ++_Count;\r\n                }\r\n            }\r\n\r\n            return _Count;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Count_fn count;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _InIt, class _Pr>\r\n_NODISCARD _CONSTEXPR20 _Iter_diff_t<_InIt> count_if(_InIt _First, _InIt _Last, _Pr _Pred) {\r\n    // count elements satisfying _Pred\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst               = _STD _Get_unwrapped(_First);\r\n    const auto _ULast          = _STD _Get_unwrapped(_Last);\r\n    _Iter_diff_t<_InIt> _Count = 0;\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        if (_Pred(*_UFirst)) {\r\n            ++_Count;\r\n        }\r\n    }\r\n\r\n    return _Count;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _Iter_diff_t<_FwdIt> count_if(_ExPo&& _Exec, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Count_if_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n        _NODISCARD static constexpr iter_difference_t<_It> operator()(\r\n            _It _First, _Se _Last, _Pr _Pred, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            return _Count_if_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n        }\r\n\r\n        template <input_range _Rng, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n        _NODISCARD static constexpr range_difference_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred, _Pj _Proj = {}) {\r\n            return _Count_if_unchecked(_Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Pj, class _Pr>\r\n        _NODISCARD static constexpr iter_difference_t<_It> _Count_if_unchecked(\r\n            _It _First, const _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n\r\n            iter_difference_t<_It> _Count = 0;\r\n            for (; _First != _Last; ++_First) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                    ++_Count;\r\n                }\r\n            }\r\n\r\n            return _Count;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Count_if_fn count_if;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _Pr>\r\n_NODISCARD _CONSTEXPR20 pair<_InIt1, _InIt2> mismatch(_InIt1 _First1, const _InIt1 _Last1, _InIt2 _First2, _Pr _Pred) {\r\n    // return [_First1, _Last1)/[_First2, ...) mismatch\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped_n(_First2, _STD _Idl_distance<_InIt1>(_UFirst1, _ULast1));\r\n#if _VECTORIZED_MISMATCH\r\n    if constexpr (_Equal_memcmp_is_safe<decltype(_UFirst1), decltype(_UFirst2), _Pr>) {\r\n        if (!_STD _Is_constant_evaluated()) {\r\n            constexpr size_t _Elem_size = sizeof(_Iter_value_t<_InIt1>);\r\n\r\n            const auto _Dist = _STD _Contiguous_iter_distance(_UFirst1, _ULast1);\r\n            _STD _Contiguous_iter_verify(_UFirst2, static_cast<_Iter_diff_t<_InIt2>>(_Dist));\r\n\r\n            const size_t _Pos = _STD _Mismatch_vectorized<_Elem_size>(\r\n                _STD _To_address(_UFirst1), _STD _To_address(_UFirst2), static_cast<size_t>(_Dist));\r\n\r\n            _UFirst1 += static_cast<_Iter_diff_t<_InIt1>>(_Pos);\r\n            _UFirst2 += static_cast<_Iter_diff_t<_InIt2>>(_Pos);\r\n\r\n            _STD _Seek_wrapped(_First2, _UFirst2);\r\n            _STD _Seek_wrapped(_First1, _UFirst1);\r\n            return {_First1, _First2};\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_MISMATCH ^^^\r\n    while (_UFirst1 != _ULast1 && _Pred(*_UFirst1, *_UFirst2)) {\r\n        ++_UFirst1;\r\n        ++_UFirst2;\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First2, _UFirst2);\r\n    _STD _Seek_wrapped(_First1, _UFirst1);\r\n    return {_First1, _First2};\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD pair<_FwdIt1, _FwdIt2> mismatch(\r\n    _ExPo&& _Exec, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _Pr _Pred) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2>\r\n_NODISCARD _CONSTEXPR20 pair<_InIt1, _InIt2> mismatch(const _InIt1 _First1, const _InIt1 _Last1, const _InIt2 _First2) {\r\n    // return [_First1, _Last1)/[_First2, ...) mismatch\r\n    return _STD mismatch(_First1, _Last1, _First2, equal_to<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD pair<_FwdIt1, _FwdIt2> mismatch(\r\n    _ExPo&& _Exec, const _FwdIt1 _First1, const _FwdIt1 _Last1, const _FwdIt2 _First2) noexcept /* terminates */ {\r\n    // return [_First1, _Last1)/[_First2, ...) mismatch\r\n    return _STD mismatch(_STD forward<_ExPo>(_Exec), _First1, _Last1, _First2, equal_to{});\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _Pr>\r\n_NODISCARD _CONSTEXPR20 pair<_InIt1, _InIt2> mismatch(\r\n    _InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _Pr _Pred) {\r\n    // return [_First1, _Last1)/[_First2, _Last2) mismatch\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    auto _ULast1       = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2 = _STD _Get_unwrapped(_Last2);\r\n    if constexpr (_Is_ranges_random_iter_v<_InIt1> && _Is_ranges_random_iter_v<_InIt2>) {\r\n        using _CT         = _Common_diff_t<_InIt1, _InIt2>;\r\n        const _CT _Count1 = _ULast1 - _UFirst1;\r\n        const _CT _Count2 = _ULast2 - _UFirst2;\r\n        const auto _Count = static_cast<_Iter_diff_t<_InIt1>>((_STD min) (_Count1, _Count2));\r\n        _ULast1           = _UFirst1 + _Count;\r\n#if _VECTORIZED_MISMATCH\r\n        if constexpr (_Equal_memcmp_is_safe<decltype(_UFirst1), decltype(_UFirst2), _Pr>) {\r\n            if (!_STD _Is_constant_evaluated()) {\r\n                constexpr size_t _Elem_size = sizeof(_Iter_value_t<_InIt1>);\r\n\r\n                (void) _STD _To_address(_ULast1);\r\n                (void) _STD _To_address(_ULast2);\r\n\r\n                const size_t _Pos = _STD _Mismatch_vectorized<_Elem_size>(\r\n                    _STD _To_address(_UFirst1), _STD _To_address(_UFirst2), static_cast<size_t>(_Count));\r\n\r\n                _UFirst1 += static_cast<_Iter_diff_t<_InIt1>>(_Pos);\r\n                _UFirst2 += static_cast<_Iter_diff_t<_InIt2>>(_Pos);\r\n\r\n                _STD _Seek_wrapped(_First2, _UFirst2);\r\n                _STD _Seek_wrapped(_First1, _UFirst1);\r\n                return {_First1, _First2};\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_MISMATCH ^^^\r\n        while (_UFirst1 != _ULast1 && _Pred(*_UFirst1, *_UFirst2)) {\r\n            ++_UFirst1;\r\n            ++_UFirst2;\r\n        }\r\n    } else {\r\n        while (_UFirst1 != _ULast1 && _UFirst2 != _ULast2 && _Pred(*_UFirst1, *_UFirst2)) {\r\n            ++_UFirst1;\r\n            ++_UFirst2;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First2, _UFirst2);\r\n    _STD _Seek_wrapped(_First1, _UFirst1);\r\n    return {_First1, _First2};\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD pair<_FwdIt1, _FwdIt2> mismatch(\r\n    _ExPo&& _Exec, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _Pr _Pred) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2>\r\n_NODISCARD _CONSTEXPR20 pair<_InIt1, _InIt2> mismatch(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2) {\r\n    // return [_First1, _Last1)/[_First2, _Last2) mismatch\r\n    return _STD mismatch(_First1, _Last1, _First2, _Last2, equal_to<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD pair<_FwdIt1, _FwdIt2> mismatch(\r\n    _ExPo&& _Exec, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2) noexcept /* terminates */ {\r\n    // return [_First1, _Last1)/[_First2, _Last2) mismatch\r\n    return _STD mismatch(_STD forward<_ExPo>(_Exec), _First1, _Last1, _First2, _Last2, equal_to{});\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <input_iterator _It1, input_iterator _It2, _Integer_like _Size, class _Pr, class _Pj1, class _Pj2>\r\n        requires indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>\r\n    _NODISCARD constexpr bool _Equal_count(\r\n        _It1 _First1, _It2 _First2, _Size _Count, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n        _STL_INTERNAL_CHECK(_Count >= 0);\r\n        if constexpr (_Equal_memcmp_is_safe<_It1, _It2, _Pr> && same_as<_Pj1, identity> && same_as<_Pj2, identity>) {\r\n            if (!_STD is_constant_evaluated()) {\r\n                return _STD _Memcmp_count(_First1, _First2, static_cast<size_t>(_Count)) == 0;\r\n            }\r\n        }\r\n\r\n        for (; _Count != 0; ++_First1, (void) ++_First2, --_Count) {\r\n            if (!_STD invoke(_Pred, _STD invoke(_Proj1, *_First1), _STD invoke(_Proj2, *_First2))) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    class _Equal_fn {\r\n    private:\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr bool _Equal_4(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>);\r\n\r\n            for (;;) {\r\n                if (_First1 == _Last1) {\r\n                    return _First2 == _Last2;\r\n                } else if (_First2 == _Last2) {\r\n                    return false;\r\n                }\r\n\r\n                if (!_STD invoke(_Pred, _STD invoke(_Proj1, *_First1), _STD invoke(_Proj2, *_First2))) {\r\n                    return false;\r\n                }\r\n\r\n                ++_First1;\r\n                ++_First2;\r\n            }\r\n        }\r\n\r\n    public:\r\n        template <input_iterator _It1, sentinel_for<_It1> _Se1, input_iterator _It2, sentinel_for<_It2> _Se2,\r\n            class _Pr = ranges::equal_to, class _Pj1 = identity, class _Pj2 = identity>\r\n            requires indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>\r\n        _NODISCARD static constexpr bool operator()(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n            auto _UFirst1 = _RANGES _Unwrap_iter<_Se1>(_STD move(_First1));\r\n            auto _ULast1  = _RANGES _Unwrap_sent<_It1>(_STD move(_Last1));\r\n            auto _UFirst2 = _RANGES _Unwrap_iter<_Se2>(_STD move(_First2));\r\n            auto _ULast2  = _RANGES _Unwrap_sent<_It2>(_STD move(_Last2));\r\n\r\n            if constexpr (sized_sentinel_for<_Se1, _It1> && sized_sentinel_for<_Se2, _It2>) {\r\n                const auto _Count = _ULast1 - _UFirst1;\r\n                if (_Count != _ULast2 - _UFirst2) {\r\n                    return false;\r\n                }\r\n\r\n                return _RANGES _Equal_count(_STD move(_UFirst1), _STD move(_UFirst2), _Count, _STD _Pass_fn(_Pred),\r\n                    _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n            } else {\r\n                return _Equal_4(_STD move(_UFirst1), _STD move(_ULast1), _STD move(_UFirst2), _STD move(_ULast2),\r\n                    _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n            }\r\n        }\r\n\r\n        template <input_range _Rng1, input_range _Rng2, class _Pr = ranges::equal_to, class _Pj1 = identity,\r\n            class _Pj2 = identity>\r\n            requires indirectly_comparable<iterator_t<_Rng1>, iterator_t<_Rng2>, _Pr, _Pj1, _Pj2>\r\n        _NODISCARD static constexpr bool operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            if constexpr (sized_range<_Rng1> && sized_range<_Rng2>) {\r\n                const auto _Count = _RANGES distance(_Range1);\r\n                if (_Count != _RANGES distance(_Range2)) {\r\n                    return false;\r\n                }\r\n                return _RANGES _Equal_count(_Ubegin(_Range1), _Ubegin(_Range2), _Count, _STD _Pass_fn(_Pred),\r\n                    _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n            } else {\r\n                return _Equal_4(_Ubegin(_Range1), _Uend(_Range1), _Ubegin(_Range2), _Uend(_Range2),\r\n                    _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Equal_fn equal;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _FwdIt1, class _FwdIt2, class _Pr>\r\n_NODISCARD _CONSTEXPR20 bool is_permutation(_FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _Pr _Pred) {\r\n    // test if [_First1, _Last1) == permuted [_First2, ...)\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped_n(_First2, _STD _Idl_distance<_FwdIt1>(_UFirst1, _ULast1));\r\n\r\n    for (;; ++_UFirst1, (void) ++_UFirst2) { // trim matching prefix\r\n        if (_UFirst1 == _ULast1) { // everything matched\r\n            return true;\r\n        }\r\n\r\n        if (!_Pred(*_UFirst1, *_UFirst2)) { // found first inequality, check match counts in suffix\r\n            break;\r\n        }\r\n    }\r\n\r\n    // Narrowing _Iter_diff_t<_FwdIt1> to _Iter_diff_t<_FwdIt2> is OK because the second range must be at least as long\r\n    // as the first.\r\n    const auto _Dist2 = static_cast<_Iter_diff_t<_FwdIt2>>(_STD distance(_UFirst1, _ULast1));\r\n    return _STD _Check_match_counts(_UFirst1, _ULast1, _UFirst2, _STD next(_UFirst2, _Dist2), _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt1, class _FwdIt2>\r\n_NODISCARD _CONSTEXPR20 bool is_permutation(_FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2) {\r\n    // test if [_First1, _Last1) == permuted [_First2, ...)\r\n    return _STD is_permutation(_First1, _Last1, _First2, equal_to<>{});\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt1, class _FwdIt2, class _Pr>\r\n_NODISCARD _CONSTEXPR20 bool is_permutation(\r\n    _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _Pr _Pred) {\r\n    // test if [_First1, _Last1) == permuted [_First2, _Last2)\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1 = _STD _Get_unwrapped(_First1);\r\n    auto _ULast1  = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2 = _STD _Get_unwrapped(_First2);\r\n    auto _ULast2  = _STD _Get_unwrapped(_Last2);\r\n    if constexpr (_Is_ranges_random_iter_v<_FwdIt1> && _Is_ranges_random_iter_v<_FwdIt2>) {\r\n        if (_ULast1 - _UFirst1 != _ULast2 - _UFirst2) {\r\n            return false;\r\n        }\r\n\r\n        for (; _UFirst1 != _ULast1; ++_UFirst1, (void) ++_UFirst2) { // trim matching prefix\r\n            if (!_Pred(*_UFirst1, *_UFirst2)) {\r\n                // found first inequality, check match counts in suffix\r\n                return _STD _Check_match_counts(_UFirst1, _ULast1, _UFirst2, _ULast2, _STD _Pass_fn(_Pred));\r\n            }\r\n        }\r\n\r\n        return true;\r\n    } else {\r\n        static_assert(_Is_ranges_fwd_iter_v<_FwdIt1> && _Is_ranges_fwd_iter_v<_FwdIt2>,\r\n            \"Iterators must be at least forward iterators\");\r\n        for (;; ++_UFirst1, (void) ++_UFirst2) { // trim matching prefix\r\n            if (_UFirst1 == _ULast1) {\r\n                return _UFirst2 == _ULast2;\r\n            }\r\n\r\n            if (_UFirst2 == _ULast2) {\r\n                return false;\r\n            }\r\n\r\n            if (!_Pred(*_UFirst1, *_UFirst2)) { // found first inequality, check match counts in suffix\r\n                break;\r\n            }\r\n        }\r\n\r\n        auto _Next1 = _UFirst1;\r\n        auto _Next2 = _UFirst2;\r\n        for (;; ++_Next1, (void) ++_Next2) { // check for same lengths\r\n            if (_Next1 == _ULast1) {\r\n                if (_Next2 == _ULast2) {\r\n                    return _STD _Check_match_counts(_UFirst1, _ULast1, _UFirst2, _ULast2, _STD _Pass_fn(_Pred));\r\n                }\r\n\r\n                return false; // sequence 1 is shorter than sequence 2, not a permutation\r\n            }\r\n\r\n            if (_Next2 == _ULast2) {\r\n                return false; // sequence 1 is longer than sequence 2, not a permutation\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt1, class _FwdIt2>\r\n_NODISCARD _CONSTEXPR20 bool is_permutation(_FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2) {\r\n    // test if [_First1, _Last1) == permuted [_First2, _Last2)\r\n    return _STD is_permutation(_First1, _Last1, _First2, _Last2, equal_to<>{});\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Is_permutation_fn {\r\n    public:\r\n        template <forward_iterator _It1, sentinel_for<_It1> _Se1, forward_iterator _It2, sentinel_for<_It2> _Se2,\r\n            class _Pj1 = identity, class _Pj2 = identity,\r\n            indirect_equivalence_relation<projected<_It1, _Pj1>, projected<_It2, _Pj2>> _Pr = ranges::equal_to>\r\n        _NODISCARD static constexpr bool operator()(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n            auto _UFirst1 = _RANGES _Unwrap_iter<_Se1>(_STD move(_First1));\r\n            auto _ULast1  = _RANGES _Unwrap_sent<_It1>(_STD move(_Last1));\r\n            auto _UFirst2 = _RANGES _Unwrap_iter<_Se2>(_STD move(_First2));\r\n            auto _ULast2  = _RANGES _Unwrap_sent<_It2>(_STD move(_Last2));\r\n\r\n            if constexpr (sized_sentinel_for<_Se1, _It1> && sized_sentinel_for<_Se2, _It2>) {\r\n                const auto _Count = _ULast1 - _UFirst1;\r\n                if (_ULast2 - _UFirst2 != _Count) {\r\n                    return false;\r\n                }\r\n\r\n                return _Is_permutation_sized(_STD move(_UFirst1), _STD move(_ULast1), _STD move(_UFirst2),\r\n                    _STD move(_ULast2), _Count, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n            } else {\r\n                return _Is_permutation_unsized(_STD move(_UFirst1), _STD move(_ULast1), _STD move(_UFirst2),\r\n                    _STD move(_ULast2), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n            }\r\n        }\r\n\r\n        template <forward_range _Rng1, forward_range _Rng2, class _Pj1 = identity, class _Pj2 = identity,\r\n            indirect_equivalence_relation<projected<iterator_t<_Rng1>, _Pj1>, projected<iterator_t<_Rng2>, _Pj2>> _Pr =\r\n                ranges::equal_to>\r\n        _NODISCARD static constexpr bool operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            if constexpr (sized_range<_Rng1> && sized_range<_Rng2>) {\r\n                const auto _Count = _RANGES distance(_Range1);\r\n                if (_RANGES distance(_Range2) != _Count) {\r\n                    return false;\r\n                }\r\n\r\n                return _Is_permutation_sized(_Ubegin(_Range1), _Uend(_Range1), _Ubegin(_Range2), _Uend(_Range2), _Count,\r\n                    _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n            } else {\r\n                return _Is_permutation_unsized(_Ubegin(_Range1), _Uend(_Range1), _Ubegin(_Range2), _Uend(_Range2),\r\n                    _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n            }\r\n        }\r\n\r\n    private:\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr bool _Is_permutation_sized(_It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2,\r\n            iter_difference_t<_It1> _Count, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(\r\n                indirect_equivalence_relation<_Pr, projected<_It1, _Pj1>, projected<_It2, _Pj2>>);\r\n            _STL_INTERNAL_CHECK(_RANGES distance(_First1, _Last1) == _Count);\r\n            _STL_INTERNAL_CHECK(_RANGES distance(_First2, _Last2) == _Count);\r\n\r\n            for (;; ++_First1, (void) ++_First2, --_Count) { // trim matching prefixes\r\n                if (_Count == 0) { // everything matched\r\n                    return true;\r\n                }\r\n\r\n                if (!_STD invoke(_Pred, _STD invoke(_Proj1, *_First1), _STD invoke(_Proj2, *_First2))) { // mismatch\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (_Count == 1) { // single non-matching elements remain; not a permutation\r\n                return false;\r\n            }\r\n            // If we get here, _Count > 1 and initial elements do not match.\r\n\r\n            if constexpr (bidirectional_iterator<_It1> && bidirectional_iterator<_It2>) {\r\n                // determine final iterator values\r\n                auto _Final1 = _RANGES _Find_last_iterator(_First1, _Last1, _Count);\r\n                using _Diff2 = iter_difference_t<_It2>; // avoid truncation warnings; ranges are the same length\r\n                auto _Final2 = _RANGES _Find_last_iterator(_First2, _Last2, static_cast<_Diff2>(_Count));\r\n\r\n                for (;;) { // trim matching suffixes\r\n                    --_Final1;\r\n                    --_Final2;\r\n                    if (!_STD invoke(_Pred, _STD invoke(_Proj1, *_Final1), _STD invoke(_Proj2, *_Final2))) { // mismatch\r\n                        break;\r\n                    }\r\n\r\n                    if (--_Count == 1) {\r\n                        return false; // initial elements still do not match\r\n                    }\r\n                }\r\n                // If we get here, _Count > 1, initial elements do not match, and final elements do not match.\r\n\r\n                // We've trimmed matching prefixes and matching suffixes.\r\n                // Now we need to compare each range's prefix to the other range's suffix.\r\n\r\n                const auto _ProjectedPred = [&]<class _Ty1, class _Ty2>(_Ty1&& _Left, _Ty2&& _Right) -> bool {\r\n                    return _STD invoke(_Pred, _STD invoke(_Proj1, _STD forward<_Ty1>(_Left)),\r\n                        _STD invoke(_Proj2, _STD forward<_Ty2>(_Right)));\r\n                };\r\n\r\n                const _TrimResult _Res = _STD _Trim_completely(_First1, _Final1, _First2, _Final2, _ProjectedPred);\r\n\r\n                if (_Res != _TrimResult::_HaveWorkAfterTrimming) {\r\n                    return _Res == _TrimResult::_ReturnTrue;\r\n                }\r\n\r\n                ++_Final1;\r\n                ++_Final2;\r\n                // If we get here, initial elements do not match, final elements do not match, and ranges have length\r\n                // at least 2 and at most _Count.\r\n\r\n                // We've trimmed matching prefixes, matching suffixes,\r\n                // and each range's prefix matching the other range's suffix. That is, given:\r\n                // Range 1: [A, ..., B]\r\n                // Range 2: [X, ..., Y]\r\n                // we know that A != X, A != Y, B != X, and B != Y.\r\n                // (A == B and X == Y are possible but irrelevant.)\r\n\r\n                return _Match_counts(_STD move(_First1), _STD move(_Final1), _STD move(_First2), _STD move(_Final2),\r\n                    _Pred, _Proj1, _Proj2);\r\n            } else {\r\n                return _Match_counts(_STD move(_First1), _STD move(_Last1), _STD move(_First2), _STD move(_Last2),\r\n                    _Pred, _Proj1, _Proj2);\r\n            }\r\n        }\r\n\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr bool _Is_permutation_unsized(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(\r\n                indirect_equivalence_relation<_Pr, projected<_It1, _Pj1>, projected<_It2, _Pj2>>);\r\n\r\n            for (;; ++_First1, (void) ++_First2) { // trim matching prefixes\r\n                if (_First1 == _Last1) { // first range is a prefix of second\r\n                    return _First2 == _Last2;\r\n                } else if (_First2 == _Last2) { // second range is a proper prefix of first\r\n                    return false;\r\n                }\r\n\r\n                if (!_STD invoke(_Pred, _STD invoke(_Proj1, *_First1), _STD invoke(_Proj2, *_First2))) { // mismatch\r\n                    break;\r\n                }\r\n            }\r\n            // If we get here, initial elements do not match.\r\n\r\n            // determine final iterator values and validate lengths\r\n            auto _Final1 = _First1;\r\n            auto _Final2 = _First2;\r\n            for (;;) {\r\n                ++_Final1;\r\n                ++_Final2;\r\n                if (_Final1 == _Last1) {\r\n                    if (_Final2 == _Last2) {\r\n                        break; // equal lengths\r\n                    }\r\n\r\n                    return false; // different lengths; not a permutation\r\n                } else if (_Final2 == _Last2) {\r\n                    return false; // ditto different lengths\r\n                }\r\n            }\r\n            // If we get here, initial elements do not match and ranges have equal lengths.\r\n\r\n            if constexpr (bidirectional_iterator<_It1> && bidirectional_iterator<_It2>) {\r\n                for (;;) { // trim matching suffixes\r\n                    if (--_Final1 == _First1) {\r\n                        return false; // initial elements still do not match\r\n                    }\r\n                    --_Final2; // since ranges have equal lengths, _Final2 cannot equal _First2\r\n\r\n                    if (!_STD invoke(_Pred, _STD invoke(_Proj1, *_Final1), _STD invoke(_Proj2, *_Final2))) { // mismatch\r\n                        break;\r\n                    }\r\n                }\r\n                // If we get here, initial elements do not match, final elements do not match, and ranges have length\r\n                // at least 2.\r\n\r\n                // We've trimmed matching prefixes and matching suffixes.\r\n                // Now we need to compare each range's prefix to the other range's suffix.\r\n\r\n                const auto _ProjectedPred = [&]<class _Ty1, class _Ty2>(_Ty1&& _Left, _Ty2&& _Right) -> bool {\r\n                    return _STD invoke(_Pred, _STD invoke(_Proj1, _STD forward<_Ty1>(_Left)),\r\n                        _STD invoke(_Proj2, _STD forward<_Ty2>(_Right)));\r\n                };\r\n\r\n                const _TrimResult _Res = _STD _Trim_completely(_First1, _Final1, _First2, _Final2, _ProjectedPred);\r\n\r\n                if (_Res != _TrimResult::_HaveWorkAfterTrimming) {\r\n                    return _Res == _TrimResult::_ReturnTrue;\r\n                }\r\n\r\n                ++_Final1;\r\n                ++_Final2;\r\n                // If we get here, initial elements do not match, final elements do not match, and ranges have length\r\n                // at least 2.\r\n\r\n                // We've trimmed matching prefixes, matching suffixes,\r\n                // and each range's prefix matching the other range's suffix. That is, given:\r\n                // Range 1: [A, ..., B]\r\n                // Range 2: [X, ..., Y]\r\n                // we know that A != X, A != Y, B != X, and B != Y.\r\n                // (A == B and X == Y are possible but irrelevant.)\r\n            }\r\n\r\n            return _Match_counts(\r\n                _STD move(_First1), _STD move(_Final1), _STD move(_First2), _STD move(_Final2), _Pred, _Proj1, _Proj2);\r\n        }\r\n\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr bool _Match_counts(const _It1 _First1, const _Se1 _Last1, const _It2 _First2,\r\n            const _Se2 _Last2, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(\r\n                indirect_equivalence_relation<_Pr, projected<_It1, _Pj1>, projected<_It2, _Pj2>>);\r\n\r\n            for (auto _Current = _First1; _Current != _Last1; ++_Current) {\r\n                bool _Found = false;\r\n                auto _Mid1  = _First1;\r\n                for (; _Mid1 != _Current; ++_Mid1) {\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj1, *_Current), _STD invoke(_Proj1, *_Mid1))) {\r\n                        // this value appears earlier in the first range so we've already counted occurrences\r\n                        _Found = true;\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                if (_Found) {\r\n                    continue;\r\n                }\r\n\r\n                // count occurrences of this value in the first range\r\n                iter_difference_t<_It1> _Occurrences = 1;\r\n                while (++_Mid1 != _Last1) {\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj1, *_Current), _STD invoke(_Proj1, *_Mid1))) {\r\n                        ++_Occurrences;\r\n                    }\r\n                }\r\n\r\n                // subtract occurrences in the second range\r\n                for (auto _Mid2 = _First2; _Mid2 != _Last2; ++_Mid2) {\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj1, *_Current), _STD invoke(_Proj2, *_Mid2))) {\r\n                        if (--_Occurrences < 0) {\r\n                            // value appears more in second range than first; not a permutation\r\n                            return false;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (_Occurrences != 0) {\r\n                    // value appears more in first range than second; not a permutation\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            return true;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Is_permutation_fn is_permutation;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\nstruct _All_of_vbool_traits;\r\nstruct _Any_of_vbool_traits;\r\nstruct _None_of_vbool_traits;\r\n\r\ntemplate <class _Traits, class _VbIt, class _Mapped_fn>\r\n_NODISCARD _CONSTEXPR20 bool _Meow_of_vbool(_VbIt _First, _VbIt _Last, _Mapped_fn _Mapped_func);\r\n\r\n_EXPORT_STD template <class _InIt, class _Pr>\r\n_NODISCARD _CONSTEXPR20 bool all_of(_InIt _First, _InIt _Last, _Pr _Pred) { // test if all elements satisfy _Pred\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n\r\n    if constexpr (_Is_vb_iterator<decltype(_UFirst)> && !is_void_v<_Map_vb_functor_t<_Pr>>) {\r\n        return _Meow_of_vbool<_All_of_vbool_traits>(_UFirst, _ULast, _Map_vb_functor_t<_Pr>{});\r\n    } else {\r\n        for (; _UFirst != _ULast; ++_UFirst) {\r\n            if (!_Pred(*_UFirst)) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return true;\r\n    }\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD bool all_of(_ExPo&&, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _All_of_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n        _NODISCARD static constexpr bool operator()(_It _First, _Se _Last, _Pr _Pred, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n\r\n            return _All_of_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n        }\r\n\r\n        template <input_range _Rng, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n        _NODISCARD static constexpr bool operator()(_Rng&& _Range, _Pr _Pred, _Pj _Proj = {}) {\r\n            return _All_of_unchecked(_Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Pj, class _Pr>\r\n        _NODISCARD static constexpr bool _All_of_unchecked(_It _First, const _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n\r\n            for (; _First != _Last; ++_First) {\r\n                if (!_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            return true;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _All_of_fn all_of;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _InIt, class _Pr>\r\n_NODISCARD _CONSTEXPR20 bool any_of(const _InIt _First, const _InIt _Last, _Pr _Pred) {\r\n    // test if any element satisfies _Pred\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n\r\n    if constexpr (_Is_vb_iterator<decltype(_UFirst)> && !is_void_v<_Map_vb_functor_t<_Pr>>) {\r\n        return _Meow_of_vbool<_Any_of_vbool_traits>(_UFirst, _ULast, _Map_vb_functor_t<_Pr>{});\r\n    } else {\r\n        for (; _UFirst != _ULast; ++_UFirst) {\r\n            if (_Pred(*_UFirst)) {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD bool any_of(_ExPo&&, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Any_of_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n        _NODISCARD static constexpr bool operator()(_It _First, _Se _Last, _Pr _Pred, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n\r\n            return _Any_of_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n        }\r\n\r\n        template <input_range _Rng, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n        _NODISCARD static constexpr bool operator()(_Rng&& _Range, _Pr _Pred, _Pj _Proj = {}) {\r\n            return _Any_of_unchecked(_Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Pj, class _Pr>\r\n        _NODISCARD static constexpr bool _Any_of_unchecked(_It _First, const _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n\r\n            for (; _First != _Last; ++_First) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Any_of_fn any_of;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _InIt, class _Pr>\r\n_NODISCARD _CONSTEXPR20 bool none_of(const _InIt _First, const _InIt _Last, _Pr _Pred) {\r\n    // test if no elements satisfy _Pred\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if constexpr (_Is_vb_iterator<decltype(_UFirst)> && !is_void_v<_Map_vb_functor_t<_Pr>>) {\r\n        return _Meow_of_vbool<_None_of_vbool_traits>(_UFirst, _ULast, _Map_vb_functor_t<_Pr>{});\r\n    } else {\r\n        for (; _UFirst != _ULast; ++_UFirst) {\r\n            if (_Pred(*_UFirst)) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return true;\r\n    }\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD bool none_of(_ExPo&&, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _None_of_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n        _NODISCARD static constexpr bool operator()(_It _First, _Se _Last, _Pr _Pred, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n\r\n            return _None_of_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n        }\r\n\r\n        template <input_range _Rng, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n        _NODISCARD static constexpr bool operator()(_Rng&& _Range, _Pr _Pred, _Pj _Proj = {}) {\r\n            return _None_of_unchecked(_Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Pj, class _Pr>\r\n        _NODISCARD static constexpr bool _None_of_unchecked(_It _First, const _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n\r\n            for (; _First != _Last; ++_First) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            return true;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _None_of_fn none_of;\r\n\r\n#if _HAS_CXX23\r\n    struct _Contains_fn {\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Ty, class _Pj = identity>\r\n            requires indirect_binary_predicate<ranges::equal_to, projected<_It, _Pj>, const _Ty*>\r\n        _NODISCARD static constexpr bool operator()(_It _First, _Se _Last, const _Ty& _Val, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            const auto _ULast   = _RANGES _Unwrap_sent<_It>(_STD move(_Last));\r\n            const auto _UResult = _RANGES _Find_unchecked(\r\n                _RANGES _Unwrap_iter<_Se>(_STD move(_First)), _ULast, _Val, _STD _Pass_fn(_Proj));\r\n            return _UResult != _ULast;\r\n        }\r\n\r\n        template <input_range _Rng, class _Ty, class _Pj = identity>\r\n            requires indirect_binary_predicate<ranges::equal_to, projected<iterator_t<_Rng>, _Pj>, const _Ty*>\r\n        _NODISCARD static constexpr bool operator()(_Rng&& _Range, const _Ty& _Val, _Pj _Proj = {}) {\r\n            const auto _UResult = _RANGES _Find_unchecked(_Ubegin(_Range), _Uend(_Range), _Val, _STD _Pass_fn(_Proj));\r\n            return _UResult != _Uend(_Range);\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Contains_fn contains;\r\n\r\n    struct _Contains_subrange_fn {\r\n        template <forward_iterator _It1, sentinel_for<_It1> _Se1, forward_iterator _It2, sentinel_for<_It2> _Se2,\r\n            class _Pr = ranges::equal_to, class _Pj1 = identity, class _Pj2 = identity>\r\n            requires indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>\r\n        _NODISCARD static constexpr bool operator()(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n            auto _UFirst2 = _RANGES _Unwrap_iter<_Se2>(_STD move(_First2));\r\n            auto _ULast2  = _RANGES _Unwrap_sent<_It2>(_STD move(_Last2));\r\n\r\n            if (_UFirst2 == _ULast2) {\r\n                return true;\r\n            }\r\n\r\n            const auto _Match = _RANGES search(_STD move(_First1), _STD move(_Last1), _STD move(_UFirst2),\r\n                _STD move(_ULast2), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n            return !_Match.empty();\r\n        }\r\n\r\n        template <forward_range _Rng1, forward_range _Rng2, class _Pr = ranges::equal_to, class _Pj1 = identity,\r\n            class _Pj2 = identity>\r\n            requires indirectly_comparable<iterator_t<_Rng1>, iterator_t<_Rng2>, _Pr, _Pj1, _Pj2>\r\n        _NODISCARD static constexpr bool operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            if (_RANGES empty(_Range2)) {\r\n                return true;\r\n            }\r\n\r\n            const auto _Match =\r\n                _RANGES search(_Range1, _Range2, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n            return !_Match.empty();\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Contains_subrange_fn contains_subrange;\r\n#endif // _HAS_CXX23\r\n\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using copy_n_result = in_out_result<_In, _Out>;\r\n\r\n    struct _Copy_n_fn {\r\n        template <input_iterator _It, weakly_incrementable _Out>\r\n            requires indirectly_copyable<_It, _Out>\r\n        static constexpr copy_n_result<_It, _Out> operator()(_It _First, iter_difference_t<_It> _Count, _Out _Output) {\r\n            if (_Count > 0) {\r\n                auto _UFirst  = _STD _Get_unwrapped_n(_STD move(_First), _Count);\r\n                auto _UOutput = _STD _Get_unwrapped_n(_STD move(_Output), _Count);\r\n                if constexpr (_Iter_copy_cat<decltype(_UFirst), decltype(_UOutput)>::_Bitcopy_assignable) {\r\n                    if (!_STD is_constant_evaluated()) {\r\n                        _UOutput = _STD _Copy_memmove_n(_UFirst, static_cast<size_t>(_Count), _STD move(_UOutput));\r\n                        _UFirst += _Count;\r\n                        _STD _Seek_wrapped(_First, _STD move(_UFirst));\r\n                        _STD _Seek_wrapped(_Output, _STD move(_UOutput));\r\n                        return {_STD move(_First), _STD move(_Output)};\r\n                    }\r\n                }\r\n\r\n                for (; _Count > 0; ++_UFirst, (void) ++_UOutput, --_Count) {\r\n                    *_UOutput = *_UFirst;\r\n                }\r\n\r\n                _STD _Seek_wrapped(_First, _STD move(_UFirst));\r\n                _STD _Seek_wrapped(_Output, _STD move(_UOutput));\r\n            }\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Copy_n_fn copy_n;\r\n\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using copy_backward_result = in_out_result<_In, _Out>;\r\n\r\n    struct _Copy_backward_fn {\r\n        template <bidirectional_iterator _It1, sentinel_for<_It1> _Se1, bidirectional_iterator _It2>\r\n            requires indirectly_copyable<_It1, _It2>\r\n        static constexpr copy_backward_result<_It1, _It2> operator()(_It1 _First, _Se1 _Last, _It2 _Output) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se1>(_STD move(_First));\r\n            auto _ULast  = _RANGES _Get_final_iterator_unwrapped<_It1>(_UFirst, _STD move(_Last));\r\n            _STD _Seek_wrapped(_First, _ULast);\r\n            const auto _Count = _RANGES _Idl_distance<_It1>(_UFirst, _ULast);\r\n            auto _UOutput     = _STD _Copy_backward_unchecked(\r\n                    _STD move(_UFirst), _STD move(_ULast), _STD _Get_unwrapped_n(_STD move(_Output), -_Count));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UOutput));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n        template <bidirectional_range _Rng, bidirectional_iterator _It>\r\n            requires indirectly_copyable<iterator_t<_Rng>, _It>\r\n        static constexpr copy_backward_result<borrowed_iterator_t<_Rng>, _It> operator()(_Rng&& _Range, _It _Output) {\r\n            auto _ULast       = _RANGES _Get_final_iterator_unwrapped(_Range);\r\n            const auto _Count = _RANGES _Idl_distance(_Range);\r\n            auto _UOutput     = _STD _Copy_backward_unchecked(\r\n                    _Ubegin(_Range), _ULast, _STD _Get_unwrapped_n(_STD move(_Output), -_Count));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UOutput));\r\n            return {_RANGES _Rewrap_iterator(_Range, _STD move(_ULast)), _STD move(_Output)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Copy_backward_fn copy_backward;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt, class _Pr>\r\n_CONSTEXPR20 _OutIt copy_if(_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred) { // copy each satisfying _Pred\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UDest       = _STD _Get_unwrapped_unverified(_Dest);\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        if (_Pred(*_UFirst)) {\r\n            *_UDest = *_UFirst;\r\n            ++_UDest;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 copy_if(_ExPo&&, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest, _Pr _Pred) noexcept /* terminates */ {\r\n    // copy each satisfying _Pred\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    return _STD copy_if(_First, _Last, _Dest, _STD _Pass_fn(_Pred));\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using copy_if_result = in_out_result<_In, _Out>;\r\n\r\n    class _Copy_if_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, weakly_incrementable _Out, class _Pj = identity,\r\n            indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n            requires indirectly_copyable<_It, _Out>\r\n        static constexpr copy_if_result<_It, _Out> operator()(\r\n            _It _First, _Se _Last, _Out _Output, _Pr _Pred, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _Copy_if_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Get_unwrapped_unverified(_STD move(_Output)),\r\n                _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n        template <input_range _Rng, weakly_incrementable _Out, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n            requires indirectly_copyable<iterator_t<_Rng>, _Out>\r\n        static constexpr copy_if_result<borrowed_iterator_t<_Rng>, _Out> operator()(\r\n            _Rng&& _Range, _Out _Output, _Pr _Pred, _Pj _Proj = {}) {\r\n            auto _First   = _RANGES begin(_Range);\r\n            auto _UResult = _Copy_if_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range),\r\n                _STD _Get_unwrapped_unverified(_STD move(_Output)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Out, class _Pj, class _Pr>\r\n        _NODISCARD static constexpr copy_if_result<_It, _Out> _Copy_if_unchecked(\r\n            _It _First, const _Se _Last, _Out _Output, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_copyable<_It, _Out>);\r\n\r\n            for (; _First != _Last; ++_First) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                    *_Output = *_First;\r\n                    ++_Output;\r\n                }\r\n            }\r\n\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Copy_if_fn copy_if;\r\n\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using move_result = in_out_result<_In, _Out>;\r\n\r\n    template <input_iterator _It, sentinel_for<_It> _Se, weakly_incrementable _Out>\r\n        requires indirectly_movable<_It, _Out>\r\n    constexpr move_result<_It, _Out> _Move_unchecked(_It _First, _Se _Last, _Out _Output) {\r\n        if constexpr (_Iter_move_cat<_It, _Out>::_Bitcopy_assignable) {\r\n            if (!_STD is_constant_evaluated()) {\r\n                auto _Final = _RANGES next(_First, _STD move(_Last));\r\n                _Output     = _STD _Copy_memmove(_STD move(_First), _Final, _STD move(_Output));\r\n                return {_STD move(_Final), _STD move(_Output)};\r\n            }\r\n        }\r\n\r\n        for (; _First != _Last; ++_First, (void) ++_Output) {\r\n            *_Output = _RANGES iter_move(_First);\r\n        }\r\n\r\n        return {_STD move(_First), _STD move(_Output)};\r\n    }\r\n\r\n    struct _Move_fn {\r\n        template <input_iterator _It, sentinel_for<_It> _Se, weakly_incrementable _Out>\r\n            requires indirectly_movable<_It, _Out>\r\n        static constexpr move_result<_It, _Out> operator()(_It _First, _Se _Last, _Out _Output) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst      = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast       = _RANGES _Unwrap_sent<_It>(_STD move(_Last));\r\n            const auto _Count = _RANGES _Idl_distance<_It>(_UFirst, _ULast);\r\n            auto _UResult     = _RANGES _Move_unchecked(\r\n                    _STD move(_UFirst), _STD move(_ULast), _STD _Get_unwrapped_n(_STD move(_Output), _Count));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n        template <input_range _Rng, weakly_incrementable _Out>\r\n            requires indirectly_movable<iterator_t<_Rng>, _Out>\r\n        static constexpr move_result<borrowed_iterator_t<_Rng>, _Out> operator()(_Rng&& _Range, _Out _Output) {\r\n            const auto _Count = _RANGES _Idl_distance(_Range);\r\n            auto _First       = _RANGES begin(_Range);\r\n            auto _UResult = _RANGES _Move_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range),\r\n                _STD _Get_unwrapped_n(_STD move(_Output), _Count));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Move_fn move;\r\n\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using move_backward_result = in_out_result<_In, _Out>;\r\n\r\n    // concept-constrained for strict enforcement as it is used by several algorithms\r\n    template <bidirectional_iterator _It1, bidirectional_iterator _It2>\r\n        requires indirectly_movable<_It1, _It2>\r\n    constexpr _It2 _Move_backward_common(const _It1 _First, _It1 _Last, _It2 _Output) {\r\n        if constexpr (_Iter_move_cat<_It1, _It2>::_Bitcopy_assignable) {\r\n            if (!_STD is_constant_evaluated()) {\r\n                return _STD _Copy_backward_memmove(_First, _Last, _Output);\r\n            }\r\n        }\r\n\r\n        while (_First != _Last) {\r\n            *--_Output = _RANGES iter_move(--_Last);\r\n        }\r\n\r\n        return _Output;\r\n    }\r\n\r\n    struct _Move_backward_fn {\r\n        template <bidirectional_iterator _It1, sentinel_for<_It1> _Se1, bidirectional_iterator _It2>\r\n            requires indirectly_movable<_It1, _It2>\r\n        static constexpr move_backward_result<_It1, _It2> operator()(_It1 _First, _Se1 _Last, _It2 _Output) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se1>(_STD move(_First));\r\n            auto _ULast  = _RANGES _Get_final_iterator_unwrapped<_It1>(_UFirst, _STD move(_Last));\r\n            _STD _Seek_wrapped(_First, _ULast);\r\n            const auto _Count = _RANGES _Idl_distance<_It1>(_UFirst, _ULast);\r\n            auto _UOutput     = _RANGES _Move_backward_common(\r\n                    _STD move(_UFirst), _STD move(_ULast), _STD _Get_unwrapped_n(_STD move(_Output), -_Count));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UOutput));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n        template <bidirectional_range _Rng, bidirectional_iterator _It>\r\n            requires indirectly_movable<iterator_t<_Rng>, _It>\r\n        static constexpr move_backward_result<borrowed_iterator_t<_Rng>, _It> operator()(_Rng&& _Range, _It _Output) {\r\n            auto _ULast       = _RANGES _Get_final_iterator_unwrapped(_Range);\r\n            const auto _Count = _RANGES _Idl_distance(_Range);\r\n            auto _UOutput     = _RANGES _Move_backward_common(\r\n                    _Ubegin(_Range), _ULast, _STD _Get_unwrapped_n(_STD move(_Output), -_Count));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UOutput));\r\n            return {_RANGES _Rewrap_iterator(_Range, _STD move(_ULast)), _STD move(_Output)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Move_backward_fn move_backward;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt1, class _OutIt2, class _Pr>\r\n_CONSTEXPR20 pair<_OutIt1, _OutIt2> partition_copy(\r\n    _InIt _First, _InIt _Last, _OutIt1 _Dest_true, _OutIt2 _Dest_false, _Pr _Pred) {\r\n    // copy true partition to _Dest_true, false to _Dest_false\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UDest_true  = _STD _Get_unwrapped_unverified(_Dest_true);\r\n    auto _UDest_false = _STD _Get_unwrapped_unverified(_Dest_false);\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        if (_Pred(*_UFirst)) {\r\n            *_UDest_true = *_UFirst;\r\n            ++_UDest_true;\r\n        } else {\r\n            *_UDest_false = *_UFirst;\r\n            ++_UDest_false;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest_false, _UDest_false);\r\n    _STD _Seek_wrapped(_Dest_true, _UDest_true);\r\n    return {_Dest_true, _Dest_false};\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _FwdIt3, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\npair<_FwdIt2, _FwdIt3> partition_copy(_ExPo&&, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest_true, _FwdIt3 _Dest_false,\r\n    _Pr _Pred) noexcept /* terminates */ {\r\n    // copy true partition to _Dest_true, false to _Dest_false\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt3);\r\n    return _STD partition_copy(_First, _Last, _Dest_true, _Dest_false, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In, class _Out1, class _Out2>\r\n    using partition_copy_result = in_out_out_result<_In, _Out1, _Out2>;\r\n\r\n    class _Partition_copy_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, weakly_incrementable _Out1, weakly_incrementable _Out2,\r\n            class _Pj = identity, indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n            requires indirectly_copyable<_It, _Out1> && indirectly_copyable<_It, _Out2>\r\n        static constexpr partition_copy_result<_It, _Out1, _Out2> operator()(\r\n            _It _First, _Se _Last, _Out1 _Dest_true, _Out2 _Dest_false, _Pr _Pred, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _Partition_copy_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Get_unwrapped_unverified(_STD move(_Dest_true)),\r\n                _STD _Get_unwrapped_unverified(_STD move(_Dest_false)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Dest_true, _STD move(_UResult.out1));\r\n            _STD _Seek_wrapped(_Dest_false, _STD move(_UResult.out2));\r\n            return {_STD move(_First), _STD move(_Dest_true), _STD move(_Dest_false)};\r\n        }\r\n\r\n        template <input_range _Rng, weakly_incrementable _Out1, weakly_incrementable _Out2, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n            requires indirectly_copyable<iterator_t<_Rng>, _Out1> && indirectly_copyable<iterator_t<_Rng>, _Out2>\r\n        static constexpr partition_copy_result<borrowed_iterator_t<_Rng>, _Out1, _Out2> operator()(\r\n            _Rng&& _Range, _Out1 _Dest_true, _Out2 _Dest_false, _Pr _Pred, _Pj _Proj = {}) {\r\n            auto _First   = _RANGES begin(_Range);\r\n            auto _UResult = _Partition_copy_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)),\r\n                _Uend(_Range), _STD _Get_unwrapped_unverified(_STD move(_Dest_true)),\r\n                _STD _Get_unwrapped_unverified(_STD move(_Dest_false)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Dest_true, _STD move(_UResult.out1));\r\n            _STD _Seek_wrapped(_Dest_false, _STD move(_UResult.out2));\r\n            return {_STD move(_First), _STD move(_Dest_true), _STD move(_Dest_false)};\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Out1, class _Out2, class _Pr, class _Pj>\r\n        _NODISCARD static constexpr partition_copy_result<_It, _Out1, _Out2> _Partition_copy_unchecked(\r\n            _It _First, const _Se _Last, _Out1 _Dest_true, _Out2 _Dest_false, _Pr _Pred, _Pj _Proj) {\r\n            // copy true partition to _Dest_true, false to _Dest_false\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(weakly_incrementable<_Out1> && weakly_incrementable<_Out2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_copyable<_It, _Out1> && indirectly_copyable<_It, _Out2>);\r\n\r\n            for (; _First != _Last; ++_First) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                    *_Dest_true = *_First;\r\n                    ++_Dest_true;\r\n                } else {\r\n                    *_Dest_false = *_First;\r\n                    ++_Dest_false;\r\n                }\r\n            }\r\n\r\n            return {_STD move(_First), _STD move(_Dest_true), _STD move(_Dest_false)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Partition_copy_fn partition_copy;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt, class _Pr>\r\n_NODISCARD _CONSTEXPR20 bool is_partitioned(const _InIt _First, const _InIt _Last, _Pr _Pred) {\r\n    // test if [_First, _Last) partitioned by _Pred\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n\r\n    for (;; ++_UFirst) { // skip true partition\r\n        if (_UFirst == _ULast) {\r\n            return true;\r\n        }\r\n\r\n        if (!_Pred(*_UFirst)) {\r\n            break;\r\n        }\r\n    }\r\n\r\n    while (++_UFirst != _ULast) { // verify false partition\r\n        if (_Pred(*_UFirst)) {\r\n            return false; // found out of place element\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD bool is_partitioned(_ExPo&&, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Is_partitioned_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n        _NODISCARD static constexpr bool operator()(_It _First, _Se _Last, _Pr _Pred, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            return _Is_partitioned_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n        }\r\n\r\n        template <input_range _Rng, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n        _NODISCARD static constexpr bool operator()(_Rng&& _Range, _Pr _Pred, _Pj _Proj = {}) {\r\n            return _Is_partitioned_unchecked(\r\n                _Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Pr, class _Pj>\r\n        _NODISCARD static constexpr bool _Is_partitioned_unchecked(_It _First, const _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n            // test if [_First, _Last) is partitioned with respect to _Pred and _Proj\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n\r\n            for (;; ++_First) { // skip true partition\r\n                if (_First == _Last) {\r\n                    return true;\r\n                }\r\n\r\n                if (!_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                    break;\r\n                }\r\n            }\r\n\r\n            while (++_First != _Last) { // verify false partition\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                    return false; // found out of place element\r\n                }\r\n            }\r\n\r\n            return true;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Is_partitioned_fn is_partitioned;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Pr>\r\n_NODISCARD _CONSTEXPR20 _FwdIt partition_point(_FwdIt _First, _FwdIt _Last, _Pr _Pred) {\r\n    // find beginning of false partition in [_First, _Last)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _Count       = _STD distance(_UFirst, _ULast);\r\n    while (0 < _Count) { // divide and conquer, find half that contains answer\r\n        const auto _Count2 = static_cast<_Iter_diff_t<_FwdIt>>(_Count / 2);\r\n        const auto _UMid   = _STD next(_UFirst, _Count2);\r\n\r\n        if (_Pred(*_UMid)) { // try top half\r\n            _UFirst = _STD _Next_iter(_UMid);\r\n            _Count -= _Count2;\r\n            --_Count;\r\n        } else {\r\n            _Count = _Count2;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First, _UFirst);\r\n    return _First;\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Partition_point_fn {\r\n    public:\r\n        template <forward_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n        _NODISCARD static constexpr _It operator()(_It _First, _Se _Last, _Pr _Pred, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            if constexpr (sized_sentinel_for<_Se, _It>) {\r\n                const auto _Length = _RANGES _Unwrap_sent<_It>(_STD move(_Last)) - _UFirst;\r\n                _UFirst            = _Partition_point_n_unchecked(\r\n                    _STD move(_UFirst), _Length, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            } else {\r\n                _UFirst = _Partition_point_unchecked(_STD move(_UFirst), _RANGES _Unwrap_sent<_It>(_STD move(_Last)),\r\n                    _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            }\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UFirst));\r\n            return _First;\r\n        }\r\n\r\n        template <forward_range _Rng, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n        _NODISCARD static constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred, _Pj _Proj = {}) {\r\n            if constexpr (sized_range<_Rng>) {\r\n                const auto _Length = _RANGES distance(_Range);\r\n                auto _UFirst =\r\n                    _Partition_point_n_unchecked(_Ubegin(_Range), _Length, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_iterator(_Range, _STD move(_UFirst));\r\n            } else {\r\n                auto _UFirst = _Partition_point_unchecked(\r\n                    _Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_iterator(_Range, _STD move(_UFirst));\r\n            }\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Pr, class _Pj>\r\n        _NODISCARD static constexpr _It _Partition_point_n_unchecked(\r\n            _It _First, iter_difference_t<_It> _Length, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n            _STL_INTERNAL_CHECK(_Length >= 0);\r\n\r\n            while (_Length > 0) {\r\n                const auto _Half = static_cast<iter_difference_t<_It>>(_Length / 2);\r\n                auto _Mid        = _RANGES next(_First, _Half);\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_Mid))) { // _Mid is before the partition point\r\n                    _First = _STD move(_Mid);\r\n                    ++_First;\r\n                    _Length -= _Half;\r\n                    --_Length;\r\n                } else { // _Mid is at or past the partition point\r\n                    _Length = _Half;\r\n                }\r\n            }\r\n\r\n            return _First;\r\n        }\r\n\r\n        template <class _It, class _Se, class _Pr, class _Pj>\r\n        _NODISCARD static constexpr _It _Partition_point_unchecked(_It _First, const _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n\r\n            // Instead of blindly seeking the end of the range, probe elements at exponentially increasing intervals to\r\n            // find an element past the partition point.\r\n            iter_difference_t<_It> _Skip = 2;\r\n            for (;;) {\r\n                auto _Mid = _First;\r\n                _Skip -= _RANGES advance(_Mid, _Skip, _Last);\r\n                if (_Mid == _Last) { // we've located the end of the range\r\n                    break;\r\n                }\r\n\r\n                if (!_STD invoke(_Pred, _STD invoke(_Proj, *_Mid))) { // _Mid is at or past the partition point\r\n                    break;\r\n                }\r\n\r\n                _First = _STD move(_Mid);\r\n                ++_First;\r\n\r\n                constexpr auto _Half_max = (numeric_limits<iter_difference_t<_It>>::max)() / 2;\r\n                if (_Skip <= _Half_max) {\r\n                    _Skip <<= 1;\r\n                }\r\n            }\r\n\r\n            return _Partition_point_n_unchecked(_STD move(_First), _Skip, _Pred, _Proj);\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Partition_point_fn partition_point;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _InIt1, class _InIt2, class _Pr>\r\n_NODISCARD _CONSTEXPR20 bool _Equal_rev_pred_unchecked(_InIt1 _First1, _InIt2 _First2, const _InIt2 _Last2, _Pr _Pred) {\r\n    // compare [_First1, ...) to [_First2, _Last2)\r\n    for (; _First2 != _Last2; ++_First1, (void) ++_First2) {\r\n        if (!_Pred(*_First1, *_First2)) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n_EXPORT_STD template <class _FwdItHaystack, class _FwdItPat, class _Pr>\r\n_NODISCARD _CONSTEXPR20 _FwdItHaystack search(_FwdItHaystack _First1, _FwdItHaystack _Last1, const _FwdItPat _First2,\r\n    const _FwdItPat _Last2, _Pr _Pred) { // find first [_First2, _Last2) satisfying _Pred\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1       = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1  = _STD _Get_unwrapped(_Last1);\r\n    const auto _UFirst2 = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2  = _STD _Get_unwrapped(_Last2);\r\n    if constexpr (_Is_ranges_random_iter_v<_FwdItHaystack> && _Is_ranges_random_iter_v<_FwdItPat>) {\r\n        const _Iter_diff_t<_FwdItPat> _Count2 = _ULast2 - _UFirst2;\r\n        if (_ULast1 - _UFirst1 >= _Count2) {\r\n#if _VECTORIZED_SEARCH\r\n            if constexpr (_Vector_alg_in_search_is_safe<decltype(_UFirst1), decltype(_UFirst2), _Pr>) {\r\n                if (!_STD _Is_constant_evaluated()) {\r\n                    const auto _Ptr1 = _STD _To_address(_UFirst1);\r\n                    (void) _STD _To_address(_ULast2);\r\n\r\n                    const auto _Ptr_res1 = _STD _Search_vectorized(\r\n                        _Ptr1, _STD _To_address(_ULast1), _STD _To_address(_UFirst2), static_cast<size_t>(_Count2));\r\n\r\n                    if constexpr (is_pointer_v<decltype(_UFirst1)>) {\r\n                        _UFirst1 = _Ptr_res1;\r\n                    } else {\r\n                        _UFirst1 += static_cast<_Iter_diff_t<decltype(_UFirst1)>>(_Ptr_res1 - _Ptr1);\r\n                    }\r\n\r\n                    _STD _Seek_wrapped(_Last1, _UFirst1);\r\n                    return _Last1;\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_SEARCH ^^^\r\n\r\n            const auto _Last_possible = _ULast1 - static_cast<_Iter_diff_t<_FwdItHaystack>>(_Count2);\r\n            for (;; ++_UFirst1) {\r\n                if (_STD _Equal_rev_pred_unchecked(_UFirst1, _UFirst2, _ULast2, _STD _Pass_fn(_Pred))) {\r\n                    _STD _Seek_wrapped(_Last1, _UFirst1);\r\n                    break;\r\n                }\r\n\r\n                if (_UFirst1 == _Last_possible) {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    } else {\r\n        for (;; ++_UFirst1) { // loop until match or end of a sequence\r\n            auto _UMid1 = _UFirst1;\r\n            for (auto _UMid2 = _UFirst2;; ++_UMid1, (void) ++_UMid2) {\r\n                if (_UMid2 == _ULast2) {\r\n                    _STD _Seek_wrapped(_Last1, _UFirst1);\r\n                    return _Last1;\r\n                } else if (_UMid1 == _ULast1) {\r\n                    return _Last1;\r\n                } else if (!_Pred(*_UMid1, *_UMid2)) {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    return _Last1;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdItHaystack, class _FwdItPat, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdItHaystack search(_ExPo&& _Exec, _FwdItHaystack _First1, _FwdItHaystack _Last1, _FwdItPat _First2,\r\n    _FwdItPat _Last2, _Pr _Pred) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _FwdItHaystack, class _FwdItPat>\r\n_NODISCARD _CONSTEXPR20 _FwdItHaystack search(\r\n    const _FwdItHaystack _First1, const _FwdItHaystack _Last1, const _FwdItPat _First2, const _FwdItPat _Last2) {\r\n    // find first [_First2, _Last2) match\r\n    return _STD search(_First1, _Last1, _First2, _Last2, equal_to<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdItHaystack, class _FwdItPat, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdItHaystack search(_ExPo&& _Exec, const _FwdItHaystack _First1, const _FwdItHaystack _Last1,\r\n    const _FwdItPat _First2, const _FwdItPat _Last2) noexcept /* terminates */ {\r\n    // find first [_First2, _Last2) match\r\n    return _STD search(_STD forward<_ExPo>(_Exec), _First1, _Last1, _First2, _Last2, equal_to{});\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _FwdItHaystack, class _Searcher>\r\n_NODISCARD _CONSTEXPR20 _FwdItHaystack search(\r\n    const _FwdItHaystack _First, const _FwdItHaystack _Last, const _Searcher& _Search) {\r\n    // find _Search's pattern in [_First, _Last)\r\n    return _Search(_First, _Last).first;\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Diff, class _Ty, class _Pr>\r\n_NODISCARD _CONSTEXPR20 _FwdIt search_n(\r\n    const _FwdIt _First, _FwdIt _Last, const _Diff _Count_raw, const _Ty& _Val, _Pr _Pred) {\r\n    // find first _Count * _Val satisfying _Pred\r\n    const _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    if (_Count <= 0) {\r\n        return _First;\r\n    }\r\n\r\n    if constexpr (_Is_any_of_v<_Pr,\r\n#if _HAS_CXX20\r\n                      _RANGES equal_to,\r\n#endif\r\n                      equal_to<>>) {\r\n        if (_Count == 1) {\r\n            return _STD find(_First, _Last, _Val);\r\n        }\r\n    }\r\n\r\n    if (static_cast<uintmax_t>(_Count) > static_cast<uintmax_t>(_STD _Max_limit<_Iter_diff_t<_FwdIt>>())) {\r\n        // if the number of _Vals searched for is larger than the longest possible sequence, we can't find it\r\n        return _Last;\r\n    }\r\n\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if constexpr (_Is_ranges_random_iter_v<_FwdIt>) {\r\n#if _VECTORIZED_SEARCH_N\r\n        if constexpr (_Vector_alg_in_search_n_is_safe<decltype(_UFirst), _Ty, _Pr>) {\r\n            if (!_STD _Is_constant_evaluated()) {\r\n                if (!_STD _Could_compare_equal_to_value_type<decltype(_UFirst)>(_Val)) {\r\n                    return _Last;\r\n                }\r\n\r\n                const auto _First_ptr = _STD _To_address(_UFirst);\r\n                const auto _Result =\r\n                    _STD _Search_n_vectorized(_First_ptr, _STD _To_address(_ULast), static_cast<size_t>(_Count), _Val);\r\n\r\n                if constexpr (is_pointer_v<decltype(_UFirst)>) {\r\n                    _UFirst = _Result;\r\n                } else {\r\n                    _UFirst += static_cast<_Iter_diff_t<decltype(_UFirst)>>(_Result - _First_ptr);\r\n                }\r\n\r\n                _STD _Seek_wrapped(_Last, _UFirst);\r\n                return _Last;\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_SEARCH_N ^^^\r\n\r\n        const auto _Count_diff = static_cast<_Iter_diff_t<_FwdIt>>(_Count);\r\n        auto _UOld_first       = _UFirst;\r\n        for (_Iter_diff_t<_FwdIt> _Inc = 0; _Count_diff <= _ULast - _UOld_first;) { // enough room, look for a match\r\n            _UFirst = _UOld_first + _Inc;\r\n            if (_Pred(*_UFirst, _Val)) { // found part of possible match, check it out\r\n                _Iter_diff_t<_FwdIt> _Count1 = _Count_diff;\r\n                auto _UMid                   = _UFirst;\r\n\r\n                while (_UOld_first != _UFirst\r\n                       && _Pred(*_STD _Prev_iter(_UFirst), _Val)) { // back up over any skipped prefix\r\n                    --_Count1;\r\n                    --_UFirst;\r\n                }\r\n\r\n                if (_Count1 <= _ULast - _UMid) {\r\n                    for (;;) { // enough left, test suffix\r\n                        if (--_Count1 == 0) {\r\n                            _STD _Seek_wrapped(_Last, _UFirst); // found rest of match, report it\r\n                            return _Last;\r\n                        } else if (!_Pred(*++_UMid, _Val)) { // short match not at end\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n                _UOld_first = ++_UMid; // failed match, take small jump\r\n                _Inc        = 0;\r\n            } else { // no match, take big jump and back up as needed\r\n                _UOld_first = _STD _Next_iter(_UFirst);\r\n                _Inc        = _Count_diff - 1;\r\n            }\r\n        }\r\n    } else {\r\n        for (; _UFirst != _ULast; ++_UFirst) {\r\n            if (_Pred(*_UFirst, _Val)) { // found start of possible match, check it out\r\n                auto _UMid = _UFirst;\r\n\r\n                for (_Algorithm_int_t<_Diff> _Count1 = _Count;;) {\r\n                    if (--_Count1 == 0) {\r\n                        _STD _Seek_wrapped(_Last, _UFirst); // found rest of match, report it\r\n                        return _Last;\r\n                    } else if (++_UMid == _ULast) {\r\n                        return _Last; // short match at end\r\n                    } else if (!_Pred(*_UMid, _Val)) { // short match not at end\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                _UFirst = _UMid; // pick up just beyond failed match\r\n            }\r\n        }\r\n    }\r\n\r\n    return _Last;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Diff, class _Ty, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt search_n(_ExPo&& _Exec, _FwdIt _First, _FwdIt _Last, _Diff _Count_raw, const _Ty& _Val,\r\n    _Pr _Pred) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Diff, class _Ty>\r\n_NODISCARD _CONSTEXPR20 _FwdIt search_n(const _FwdIt _First, const _FwdIt _Last, const _Diff _Count, const _Ty& _Val) {\r\n    // find first _Count * _Val match\r\n    return _STD search_n(_First, _Last, _Count, _Val, equal_to<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Diff, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt search_n(_ExPo&& _Exec, const _FwdIt _First, const _FwdIt _Last, const _Diff _Count,\r\n    const _Ty& _Val) noexcept /* terminates */ { // find first _Count * _Val match\r\n    return _STD search_n(_STD forward<_ExPo>(_Exec), _First, _Last, _Count, _Val, equal_to{});\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Search_n_fn {\r\n    public:\r\n        template <forward_iterator _It, sentinel_for<_It> _Se, class _Ty, class _Pr = ranges::equal_to,\r\n            class _Pj = identity>\r\n            requires indirectly_comparable<_It, const _Ty*, _Pr, _Pj>\r\n        _NODISCARD static constexpr subrange<_It> operator()(_It _First, _Se _Last, const iter_difference_t<_It> _Count,\r\n            const _Ty& _Val, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n\r\n            if (_Count <= 0) {\r\n                return {_First, _First};\r\n            }\r\n\r\n            if constexpr (_Is_any_of_v<_Pr, _STD equal_to<>, _RANGES equal_to>) {\r\n                if (_Count == 1) {\r\n                    auto _Res = _RANGES find(_First, _Last, _Val, _Pass_fn(_Proj));\r\n                    if (_Res != _Last) {\r\n                        auto _Res_end = _Res;\r\n                        ++_Res_end;\r\n                        return {_STD move(_Res), _STD move(_Res_end)};\r\n                    } else {\r\n                        return {_Res, _Res};\r\n                    }\r\n                }\r\n            }\r\n\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast  = _RANGES _Unwrap_sent<_It>(_STD move(_Last));\r\n\r\n            if constexpr (sized_sentinel_for<_Se, _It>) {\r\n                const auto _Dist = _ULast - _UFirst;\r\n                auto _UResult    = _Search_n_sized(\r\n                    _STD move(_UFirst), _Dist, _Val, _Count, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_subrange<subrange<_It>>(_First, _STD move(_UResult));\r\n            } else {\r\n                auto _UResult = _Search_n_unsized(\r\n                    _STD move(_UFirst), _STD move(_ULast), _Val, _Count, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_subrange<subrange<_It>>(_First, _STD move(_UResult));\r\n            }\r\n        }\r\n\r\n        template <forward_range _Rng, class _Ty, class _Pr = ranges::equal_to, class _Pj = identity>\r\n            requires indirectly_comparable<iterator_t<_Rng>, const _Ty*, _Pr, _Pj>\r\n        _NODISCARD static constexpr borrowed_subrange_t<_Rng> operator()(\r\n            _Rng&& _Range, const range_difference_t<_Rng> _Count, const _Ty& _Val, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            auto _First = _RANGES begin(_Range);\r\n\r\n            if (_Count <= 0) {\r\n                return {_First, _First};\r\n            }\r\n\r\n            if constexpr (_Is_any_of_v<_Pr, _STD equal_to<>, _RANGES equal_to>) {\r\n                if (_Count == 1) {\r\n                    auto _Res  = _RANGES find(_Range, _Val, _Pass_fn(_Proj));\r\n                    auto _Last = _RANGES end(_Range);\r\n                    if (_Res != _Last) {\r\n                        auto _Res_end = _Res;\r\n                        ++_Res_end;\r\n                        return {_STD move(_Res), _STD move(_Res_end)};\r\n                    } else {\r\n                        return {_Res, _Res};\r\n                    }\r\n                }\r\n            }\r\n\r\n            if constexpr (sized_range<_Rng>) {\r\n                const auto _Dist = _RANGES distance(_Range);\r\n\r\n                auto _UResult = _Search_n_sized(\r\n                    _STD _Get_unwrapped(_First), _Dist, _Val, _Count, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng>>(_First, _STD move(_UResult));\r\n            } else {\r\n                auto _UResult = _Search_n_unsized(_RANGES _Unwrap_range_iter<_Rng>(_First), _Uend(_Range), _Val, _Count,\r\n                    _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng>>(_First, _STD move(_UResult));\r\n            }\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Ty, class _Pr, class _Pj>\r\n        _NODISCARD static constexpr subrange<_It> _Search_n_sized(_It _First, iter_difference_t<_It> _Dist,\r\n            const _Ty& _Val, const iter_difference_t<_It> _Count, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_comparable<_It, const _Ty*, _Pr, _Pj>);\r\n            _STL_INTERNAL_CHECK(_Count > 0);\r\n            // pre: _First + [0, _Dist) is a valid counted range\r\n\r\n            if constexpr (bidirectional_iterator<_It>) {\r\n                if (_Dist < _Count) {\r\n                    _RANGES advance(_First, _Dist);\r\n                    return {_First, _First};\r\n                }\r\n\r\n#if _VECTORIZED_SEARCH_N\r\n                if constexpr (_Vector_alg_in_search_n_is_safe<_It, _Ty, _Pr> && is_same_v<_Pj, identity>) {\r\n                    if (!_STD is_constant_evaluated()) {\r\n                        if (!_STD _Could_compare_equal_to_value_type<_It>(_Val)) {\r\n                            _First += _Dist;\r\n                            return {_First, _First};\r\n                        }\r\n\r\n                        const auto _First_ptr = _STD _To_address(_First);\r\n                        const auto _Last_ptr  = _STD _To_address(_First + _Dist);\r\n                        const auto _Result =\r\n                            _STD _Search_n_vectorized(_First_ptr, _Last_ptr, static_cast<size_t>(_Count), _Val);\r\n\r\n                        if constexpr (is_pointer_v<_It>) {\r\n                            if (_Result != _Last_ptr) {\r\n                                return {_Result, _Result + _Count};\r\n                            } else {\r\n                                return {_Result, _Result};\r\n                            }\r\n                        } else {\r\n                            if (_Result != _Last_ptr) {\r\n                                _First += static_cast<iter_difference_t<_It>>(_Result - _First_ptr);\r\n                                return {_First, _First + _Count};\r\n                            } else {\r\n                                _First += _Dist;\r\n                                return {_First, _First};\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n#endif // ^^^ _VECTORIZED_SEARCH_N ^^^\r\n\r\n                auto _Last = _RANGES next(_First, _Count);\r\n                auto _Mid1 = _First;\r\n                auto _Mid2 = _Last;\r\n                for (;;) {\r\n                    // Invariants: _Last - _First == _Count, [_First, _Mid1) and [_Mid2, _Last) match _Val:\r\n                    //\r\n                    // _First  _Mid1    _Mid2    _Last\r\n                    // |=======|????????|========|??????...\r\n\r\n                    --_Mid2;\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj, *_Mid2), _Val)) {\r\n                        if (_Mid2 == _Mid1) { // [_Mid1, _Mid2) is empty, so [_First, _Last) all match\r\n                            return {_STD move(_First), _STD move(_Last)};\r\n                        }\r\n                    } else { // mismatch; skip past it\r\n                        ++_Mid2;\r\n                        const auto _Delta = _RANGES distance(_First, _Mid2);\r\n\r\n                        if (_Dist - _Delta < _Count) { // not enough space left\r\n                            _First = _STD move(_Last);\r\n                            _Dist -= _Count;\r\n                            break;\r\n                        }\r\n\r\n                        _First = _STD move(_Mid2);\r\n                        _Dist -= _Delta;\r\n                        _Mid1 = _Last;\r\n                        _RANGES advance(_Last, _Delta);\r\n                        _Mid2 = _Last;\r\n                    }\r\n                }\r\n            } else {\r\n                for (; _Dist >= _Count; ++_First, (void) --_Dist) {\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj, *_First), _Val)) {\r\n                        auto _Saved = _First;\r\n                        for (iter_difference_t<_It> _Len = 0;;) {\r\n                            ++_First;\r\n                            if (++_Len == _Count) { // match\r\n                                return {_STD move(_Saved), _STD move(_First)};\r\n                            }\r\n\r\n                            if (!_STD invoke(_Pred, _STD invoke(_Proj, *_First), _Val)) { // mismatch\r\n                                _Dist -= _Len;\r\n                                break;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            _RANGES advance(_First, _Dist);\r\n            return {_First, _First};\r\n        }\r\n\r\n        template <class _It, class _Se, class _Ty, class _Pr, class _Pj>\r\n        _NODISCARD static constexpr subrange<_It> _Search_n_unsized(\r\n            _It _First, const _Se _Last, const _Ty& _Val, const iter_difference_t<_It> _Count, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_comparable<_It, const _Ty*, _Pr, _Pj>);\r\n            _STL_INTERNAL_CHECK(_Count > 0);\r\n\r\n            for (; _First != _Last; ++_First) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_First), _Val)) {\r\n                    auto _Saved = _First;\r\n                    for (auto _Len = _Count;;) {\r\n                        ++_First;\r\n                        if (--_Len == 0) { // match\r\n                            return {_STD move(_Saved), _STD move(_First)};\r\n                        }\r\n\r\n                        if (_First == _Last) { // no more to match against\r\n                            return {_First, _First};\r\n                        }\r\n\r\n                        if (!_STD invoke(_Pred, _STD invoke(_Proj, *_First), _Val)) { // mismatch\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            return {_First, _First};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Search_n_fn search_n;\r\n\r\n#if _HAS_CXX23\r\n    struct _Starts_with_fn {\r\n        template <input_iterator _It1, sentinel_for<_It1> _Se1, input_iterator _It2, sentinel_for<_It2> _Se2,\r\n            class _Pr = ranges::equal_to, class _Pj1 = identity, class _Pj2 = identity>\r\n            requires indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>\r\n        _NODISCARD static constexpr bool operator()(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n\r\n            auto _UFirst1      = _RANGES _Unwrap_iter<_Se1>(_STD move(_First1));\r\n            auto _ULast1       = _RANGES _Unwrap_sent<_It1>(_STD move(_Last1));\r\n            auto _UFirst2      = _RANGES _Unwrap_iter<_Se2>(_STD move(_First2));\r\n            const auto _ULast2 = _RANGES _Unwrap_sent<_It2>(_STD move(_Last2));\r\n            if constexpr (_Sized_or_unreachable_sentinel_for<_Se1, _It1> && sized_sentinel_for<_Se2, _It2>) {\r\n                const iter_difference_t<_It2> _Count2 = _ULast2 - _UFirst2;\r\n                if constexpr (sized_sentinel_for<_Se1, _It1>) {\r\n                    if (_Count2 > _ULast1 - _UFirst1) {\r\n                        return false;\r\n                    }\r\n                }\r\n\r\n                return _RANGES _Equal_count(_STD move(_UFirst1), _STD move(_UFirst2),\r\n                    static_cast<iter_difference_t<_It1>>(_Count2), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1),\r\n                    _STD _Pass_fn(_Proj2));\r\n            } else {\r\n                const auto _Result = _RANGES _Mismatch_4(_STD move(_UFirst1), _STD move(_ULast1), _STD move(_UFirst2),\r\n                    _ULast2, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n                return _Result.in2 == _ULast2;\r\n            }\r\n        }\r\n\r\n        template <input_range _Rng1, input_range _Rng2, class _Pr = ranges::equal_to, class _Pj1 = identity,\r\n            class _Pj2 = identity>\r\n            requires indirectly_comparable<iterator_t<_Rng1>, iterator_t<_Rng2>, _Pr, _Pj1, _Pj2>\r\n        _NODISCARD static constexpr bool operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            if constexpr (_Sized_or_infinite_range<_Rng1> && sized_range<_Rng2>) {\r\n                const range_difference_t<_Rng2> _Count2 = _RANGES distance(_Range2);\r\n                if constexpr (sized_range<_Rng1>) {\r\n                    if (_Count2 > _RANGES distance(_Range1)) {\r\n                        return false;\r\n                    }\r\n                }\r\n\r\n                return _RANGES _Equal_count(_Ubegin(_Range1), _Ubegin(_Range2),\r\n                    static_cast<range_difference_t<_Rng1>>(_Count2), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1),\r\n                    _STD _Pass_fn(_Proj2));\r\n            } else {\r\n                const auto _ULast2 = _Uend(_Range2);\r\n                const auto _Result = _RANGES _Mismatch_4(_Ubegin(_Range1), _Uend(_Range1), _Ubegin(_Range2), _ULast2,\r\n                    _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n                return _Result.in2 == _ULast2;\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Starts_with_fn starts_with;\r\n\r\n    class _Ends_with_fn {\r\n    public:\r\n        template <input_iterator _It1, sentinel_for<_It1> _Se1, input_iterator _It2, sentinel_for<_It2> _Se2,\r\n            class _Pr = ranges::equal_to, class _Pj1 = identity, class _Pj2 = identity>\r\n            requires (forward_iterator<_It1> || sized_sentinel_for<_Se1, _It1>)\r\n                  && (forward_iterator<_It2> || sized_sentinel_for<_Se2, _It2>)\r\n                  && indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>\r\n        _NODISCARD static constexpr bool operator()(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n            auto _UFirst1 = _RANGES _Unwrap_iter<_Se1>(_STD move(_First1));\r\n            auto _ULast1  = _RANGES _Unwrap_sent<_It1>(_STD move(_Last1));\r\n            auto _UFirst2 = _RANGES _Unwrap_iter<_Se2>(_STD move(_First2));\r\n            auto _ULast2  = _RANGES _Unwrap_sent<_It2>(_STD move(_Last2));\r\n\r\n            const auto _Count1 = _Distance_helper(_UFirst1, _ULast1);\r\n            const auto _Count2 = _Distance_helper(_UFirst2, _ULast2);\r\n\r\n            return _Ends_with_impl(_STD move(_UFirst1), _STD move(_ULast1), _Count1, _STD move(_UFirst2),\r\n                _STD move(_ULast2), _Count2, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n        }\r\n\r\n        template <input_range _Rng1, input_range _Rng2, class _Pr = ranges::equal_to, class _Pj1 = identity,\r\n            class _Pj2 = identity>\r\n            requires (forward_range<_Rng1> || sized_range<_Rng1>) && (forward_range<_Rng2> || sized_range<_Rng2>)\r\n                  && indirectly_comparable<iterator_t<_Rng1>, iterator_t<_Rng2>, _Pr, _Pj1, _Pj2>\r\n        _NODISCARD static constexpr bool operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            const auto _Count1 = _Distance_helper(_Range1);\r\n            const auto _Count2 = _Distance_helper(_Range2);\r\n\r\n            return _Ends_with_impl(_Ubegin(_Range1), _Uend(_Range1), _Count1, _Ubegin(_Range2), _Uend(_Range2), _Count2,\r\n                _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n        }\r\n\r\n    private:\r\n        struct _Not_a_difference {};\r\n\r\n        template <class _It, class _Se>\r\n        _NODISCARD static constexpr auto _Distance_helper(const _It& _First, const _Se& _Last) {\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            if constexpr (sized_sentinel_for<_Se, _It>) {\r\n                return _Last - _First;\r\n            } else {\r\n                return _Not_a_difference{};\r\n            }\r\n        }\r\n\r\n        template <class _Rng>\r\n        _NODISCARD static constexpr auto _Distance_helper(_Rng&& _Range) {\r\n            _STL_INTERNAL_STATIC_ASSERT(range<_Rng>);\r\n            if constexpr (sized_range<_Rng>) {\r\n                return _RANGES distance(_Range);\r\n            } else {\r\n                return _Not_a_difference{};\r\n            }\r\n        }\r\n\r\n        template <class _Ty, class _It1, class _It2, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr bool _Match_backwards(\r\n            const _Ty _First1, _It1 _Last1, const _It2 _First2, _It2 _Last2, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(same_as<_Ty, _It1> || same_as<_Ty, unreachable_sentinel_t>);\r\n            _STL_INTERNAL_STATIC_ASSERT(bidirectional_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(bidirectional_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>);\r\n\r\n            for (;;) {\r\n                if (_First2 == _Last2) { // needle exhausted - match\r\n                    return true;\r\n                }\r\n\r\n                if (_First1 == _Last1) { // haystack exhausted - no match\r\n                    return false;\r\n                }\r\n\r\n                --_Last1;\r\n                --_Last2;\r\n                if (!_STD invoke(_Pred, _STD invoke(_Proj1, *_Last1), _STD invoke(_Proj2, *_Last2))) {\r\n                    return false; // non-equal elements - no match\r\n                }\r\n            }\r\n        }\r\n\r\n        template <class _It1, class _Se1, class _Diff1, class _It2, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr bool _Ends_with_sized_needle(_It1 _First1, _Se1 _Last1, _Diff1 _Count1,\r\n            _It2 _First2, iter_difference_t<_It2> _Count2, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It1> && sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It1> || same_as<_Diff1, iter_difference_t<_It1>>);\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>);\r\n\r\n            constexpr bool _Sized1 = !same_as<_Diff1, _Not_a_difference>;\r\n\r\n            if constexpr (random_access_iterator<_It1> && _Sized1) {\r\n                _First1 += static_cast<iter_difference_t<_It1>>(_Count1 - _Count2);\r\n            } else if constexpr (_Bidi_common<_It1, _Se1>) {\r\n                if constexpr (_Sized1) {\r\n                    if ((_Count1 >> 1) >= _Count2) { // beginning of potential match is closer to _Last1\r\n                        _RANGES advance(_Last1, static_cast<iter_difference_t<_It1>>(-_Count2));\r\n                        _First1 = _STD move(_Last1);\r\n                    } else { // beginning of potential match is closer to _First1\r\n                        _RANGES advance(_First1, static_cast<iter_difference_t<_It1>>(_Count1 - _Count2));\r\n                    }\r\n                } else { // Only second range is sized\r\n                    if (_RANGES advance(_Last1, static_cast<iter_difference_t<_It1>>(-_Count2), _First1) != 0) {\r\n                        // distance(_First1, _Last1) < _Count2\r\n                        return false;\r\n                    }\r\n                    _First1 = _STD move(_Last1);\r\n                }\r\n            } else if constexpr (forward_iterator<_It1>) {\r\n                auto _Mid1  = _First1;\r\n                auto _Count = _Count2;\r\n                do {\r\n                    if (_Mid1 == _Last1) { // distance(_First1, _Last1) < _Count2\r\n                        return false;\r\n                    }\r\n\r\n                    ++_Mid1;\r\n                } while (--_Count != 0);\r\n\r\n                // At this point, distance(_First1, _Mid1) == _Count2\r\n                while (_Mid1 != _Last1) {\r\n                    ++_First1;\r\n                    ++_Mid1;\r\n                }\r\n            } else {\r\n                _RANGES advance(_First1, static_cast<iter_difference_t<_It1>>(_Count1 - _Count2));\r\n            }\r\n\r\n            return _RANGES _Equal_count(_STD move(_First1), _STD move(_First2),\r\n                static_cast<iter_difference_t<_It1>>(_Count2), _Pred, _Proj1, _Proj2);\r\n        }\r\n\r\n        template <class _It1, class _Se1, class _Diff1, class _It2, class _Se2, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr bool _Ends_with_unsized_needle(\r\n            _It1 _First1, _Se1 _Last1, _Diff1 _Count1, _It2 _First2, _Se2 _Last2, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It1> && sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It1> || same_as<_Diff1, iter_difference_t<_It1>>);\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It2> && sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>);\r\n\r\n            constexpr bool _Sized1 = !same_as<_Diff1, _Not_a_difference>;\r\n\r\n            iter_difference_t<_It2> _Count2 = 0;\r\n\r\n            if constexpr (_Sized1) {\r\n                for (auto _Mid2 = _First2; _Mid2 != _Last2; ++_Mid2, (void) ++_Count2) {\r\n                    if (_Count2 == _Count1) { // distance(_First1, _Last1) < distance(_First2, _Last2)\r\n                        return false;\r\n                    }\r\n                }\r\n\r\n                _RANGES advance(_First1, static_cast<iter_difference_t<_It1>>(_Count1 - _Count2));\r\n            } else { // first range isn't sized, so must be forward\r\n                auto _Mid1 = _First1;\r\n                for (auto _Mid2 = _First2; _Mid2 != _Last2; ++_Mid1, (void) ++_Mid2, ++_Count2) {\r\n                    if (_Mid1 == _Last1) { // distance(_First1, _Last1) < distance(_First2, _Last2)\r\n                        return false;\r\n                    }\r\n                }\r\n\r\n                // distance(_First1, _Mid1) == distance(_First2, _Last2) == _Count2\r\n                while (_Mid1 != _Last1) {\r\n                    ++_First1;\r\n                    ++_Mid1;\r\n                }\r\n            }\r\n\r\n            return _RANGES _Equal_count(_STD move(_First1), _STD move(_First2),\r\n                static_cast<iter_difference_t<_It1>>(_Count2), _Pred, _Proj1, _Proj2);\r\n        }\r\n\r\n        template <class _It1, class _Se1, class _Diff1, class _It2, class _Se2, class _Diff2, class _Pr, class _Pj1,\r\n            class _Pj2>\r\n        _NODISCARD static constexpr bool _Ends_with_impl(_It1 _First1, _Se1 _Last1, _Diff1 _Count1, _It2 _First2,\r\n            _Se2 _Last2, _Diff2 _Count2, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(_Is_any_of_v<_Diff1, iter_difference_t<_It1>, _Not_a_difference>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(_Is_any_of_v<_Diff2, iter_difference_t<_It2>, _Not_a_difference>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>);\r\n\r\n            constexpr bool _Sized1           = !same_as<_Diff1, _Not_a_difference>;\r\n            constexpr bool _Sized2           = !same_as<_Diff2, _Not_a_difference>;\r\n            constexpr bool _Both_sized       = _Sized1 && _Sized2;\r\n            constexpr bool _Both_bidi_common = _Bidi_common<_It1, _Se1> && _Bidi_common<_It2, _Se2>;\r\n\r\n            if constexpr (_Both_sized) {\r\n                if (_Count2 > _Count1) {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            if constexpr (_Sized2) {\r\n                if (_Count2 == 0) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            if constexpr (_Both_bidi_common && !(random_access_iterator<_It1> && _Both_sized)) {\r\n                if constexpr (_Both_sized) {\r\n                    return _Match_backwards(unreachable_sentinel, _STD move(_Last1), _STD move(_First2),\r\n                        _STD move(_Last2), _Pred, _Proj1, _Proj2);\r\n                } else {\r\n                    return _Match_backwards(_STD move(_First1), _STD move(_Last1), _STD move(_First2),\r\n                        _STD move(_Last2), _Pred, _Proj1, _Proj2);\r\n                }\r\n            } else if constexpr (_Sized2) {\r\n                return _Ends_with_sized_needle(\r\n                    _STD move(_First1), _STD move(_Last1), _Count1, _STD move(_First2), _Count2, _Pred, _Proj1, _Proj2);\r\n            } else {\r\n                return _Ends_with_unsized_needle(_STD move(_First1), _STD move(_Last1), _Count1, _STD move(_First2),\r\n                    _STD move(_Last2), _Pred, _Proj1, _Proj2);\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Ends_with_fn ends_with;\r\n\r\n    template <class _Fn>\r\n    class _Flipped {\r\n    private:\r\n        _Fn _Func;\r\n\r\n    public:\r\n        template <class _Ty, class _Uty>\r\n            requires invocable<_Fn&, _Uty, _Ty>\r\n        invoke_result_t<_Fn&, _Uty, _Ty> operator()(_Ty&&, _Uty&&);\r\n    };\r\n\r\n    template <class _Fn, class _Ty, class _It, class _Uty>\r\n    concept _Indirectly_binary_left_foldable_impl =\r\n        movable<_Ty> && movable<_Uty> && convertible_to<_Ty, _Uty> && invocable<_Fn&, _Uty, iter_reference_t<_It>>\r\n        && assignable_from<_Uty&, invoke_result_t<_Fn&, _Uty, iter_reference_t<_It>>>;\r\n\r\n    template <class _Fn, class _Ty, class _It>\r\n    concept _Indirectly_binary_left_foldable =\r\n        copy_constructible<_Fn> && indirectly_readable<_It> && invocable<_Fn&, _Ty, iter_reference_t<_It>>\r\n        && convertible_to<invoke_result_t<_Fn&, _Ty, iter_reference_t<_It>>,\r\n            decay_t<invoke_result_t<_Fn&, _Ty, iter_reference_t<_It>>>>\r\n        && _Indirectly_binary_left_foldable_impl<_Fn, _Ty, _It,\r\n            decay_t<invoke_result_t<_Fn&, _Ty, iter_reference_t<_It>>>>;\r\n\r\n    template <class _Fn, class _Ty, class _It>\r\n    concept _Indirectly_binary_right_foldable = _Indirectly_binary_left_foldable<_Flipped<_Fn>, _Ty, _It>;\r\n\r\n    _EXPORT_STD template <class _It, class _Ty>\r\n    using fold_left_with_iter_result = in_value_result<_It, _Ty>;\r\n\r\n    _EXPORT_STD template <class _It, class _Ty>\r\n    using fold_left_first_with_iter_result = in_value_result<_It, _Ty>;\r\n\r\n    class _Fold_left_with_iter_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Ty, _Indirectly_binary_left_foldable<_Ty, _It> _Fn>\r\n        _NODISCARD static constexpr auto operator()(_It _First, _Se _Last, _Ty _Init, _Fn _Func) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            return _Fold_left_with_iter_impl<_It>(\r\n                _STD move(_First), _STD move(_Last), _STD move(_Init), _STD _Pass_fn(_Func));\r\n        }\r\n\r\n        template <input_range _Rng, class _Ty, _Indirectly_binary_left_foldable<_Ty, iterator_t<_Rng>> _Fn>\r\n        _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Ty _Init, _Fn _Func) {\r\n            return _Fold_left_with_iter_impl<borrowed_iterator_t<_Rng>>(\r\n                _RANGES begin(_Range), _RANGES end(_Range), _STD move(_Init), _STD _Pass_fn(_Func));\r\n        }\r\n\r\n    private:\r\n        template <class _RetIt, class _It, class _Se, class _Ty, class _Fn>\r\n        _NODISCARD static constexpr auto _Fold_left_with_iter_impl(_It&& _First, _Se&& _Last, _Ty&& _Init, _Fn _Func) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(_Indirectly_binary_left_foldable<_Fn, _Ty, _It>);\r\n\r\n            using _Uty         = decay_t<invoke_result_t<_Fn&, _Ty, iter_reference_t<_It>>>;\r\n            using _Return_type = fold_left_with_iter_result<_RetIt, _Uty>;\r\n\r\n            if (_First == _Last) {\r\n                return _Return_type{_STD move(_First), static_cast<_Uty>(_STD move(_Init))};\r\n            } else {\r\n                auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n                auto _ULast  = _RANGES _Unwrap_sent<_It>(_STD move(_Last));\r\n\r\n                _Uty _Accum = _STD invoke(_Func, _STD move(_Init), *_UFirst);\r\n                for (++_UFirst; _UFirst != _ULast; ++_UFirst) {\r\n                    _Accum = _STD invoke(_Func, _STD move(_Accum), *_UFirst);\r\n                }\r\n\r\n                _STD _Seek_wrapped(_First, _STD move(_UFirst));\r\n                return _Return_type{_STD move(_First), _STD move(_Accum)};\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Fold_left_with_iter_fn fold_left_with_iter;\r\n\r\n    struct _Fold_left_fn {\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Ty, _Indirectly_binary_left_foldable<_Ty, _It> _Fn>\r\n        _NODISCARD static constexpr auto operator()(_It _First, _Se _Last, _Ty _Init, _Fn _Func) {\r\n            return _RANGES fold_left_with_iter(_STD move(_First), _Last, _STD move(_Init), _STD _Pass_fn(_Func)).value;\r\n        }\r\n\r\n        template <input_range _Rng, class _Ty, _Indirectly_binary_left_foldable<_Ty, iterator_t<_Rng>> _Fn>\r\n        _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Ty _Init, _Fn _Func) {\r\n            return _RANGES fold_left_with_iter(_STD forward<_Rng>(_Range), _STD move(_Init), _STD _Pass_fn(_Func))\r\n                .value;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Fold_left_fn fold_left;\r\n\r\n    class _Fold_left_first_with_iter_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se,\r\n            _Indirectly_binary_left_foldable<iter_value_t<_It>, _It> _Fn>\r\n            requires constructible_from<iter_value_t<_It>, iter_reference_t<_It>>\r\n        _NODISCARD static constexpr auto operator()(_It _First, _Se _Last, _Fn _Func) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            return _Fold_left_first_with_iter_impl<_It>(_STD move(_First), _STD move(_Last), _STD _Pass_fn(_Func));\r\n        }\r\n\r\n        template <input_range _Rng, _Indirectly_binary_left_foldable<range_value_t<_Rng>, iterator_t<_Rng>> _Fn>\r\n            requires constructible_from<range_value_t<_Rng>, range_reference_t<_Rng>>\r\n        _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Fn _Func) {\r\n            return _Fold_left_first_with_iter_impl<borrowed_iterator_t<_Rng>>(\r\n                _RANGES begin(_Range), _RANGES end(_Range), _STD _Pass_fn(_Func));\r\n        }\r\n\r\n    private:\r\n        template <class _RetIt, class _It, class _Se, class _Fn>\r\n        _NODISCARD static constexpr auto _Fold_left_first_with_iter_impl(_It&& _First, _Se&& _Last, _Fn _Func) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(_Indirectly_binary_left_foldable<_Fn, iter_value_t<_It>, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(constructible_from<iter_value_t<_It>, iter_reference_t<_It>>);\r\n\r\n            using _Uty =\r\n                decltype(_RANGES fold_left(_STD move(_First), _Last, static_cast<iter_value_t<_It>>(*_First), _Func));\r\n            using _Return_type = fold_left_first_with_iter_result<_RetIt, optional<_Uty>>;\r\n            if (_First == _Last) {\r\n                return _Return_type{_STD move(_First), optional<_Uty>{}};\r\n            } else {\r\n                auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n                auto _ULast  = _RANGES _Unwrap_sent<_It>(_STD move(_Last));\r\n\r\n                optional<_Uty> _Init{in_place, *_UFirst};\r\n                _Uty& _Init_ref = _Init.operator*(); // per LWG-3969\r\n                for (++_UFirst; _UFirst != _ULast; ++_UFirst) {\r\n                    _Init_ref = _STD invoke(_Func, _STD move(_Init_ref), *_UFirst);\r\n                }\r\n\r\n                _STD _Seek_wrapped(_First, _STD move(_UFirst));\r\n                return _Return_type{_STD move(_First), _STD move(_Init)};\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Fold_left_first_with_iter_fn fold_left_first_with_iter;\r\n\r\n    struct _Fold_left_first_fn {\r\n        template <input_iterator _It, sentinel_for<_It> _Se,\r\n            _Indirectly_binary_left_foldable<iter_value_t<_It>, _It> _Fn>\r\n            requires constructible_from<iter_value_t<_It>, iter_reference_t<_It>>\r\n        _NODISCARD static constexpr auto operator()(_It _First, _Se _Last, _Fn _Func) {\r\n            return _RANGES fold_left_first_with_iter(_STD move(_First), _STD move(_Last), _STD _Pass_fn(_Func)).value;\r\n        }\r\n\r\n        template <input_range _Rng, _Indirectly_binary_left_foldable<range_value_t<_Rng>, iterator_t<_Rng>> _Fn>\r\n            requires constructible_from<range_value_t<_Rng>, range_reference_t<_Rng>>\r\n        _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Fn _Func) {\r\n            return _RANGES fold_left_first_with_iter(_STD forward<_Rng>(_Range), _STD _Pass_fn(_Func)).value;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Fold_left_first_fn fold_left_first;\r\n\r\n    template <class _It, class _Se, class _Ty, class _Fn>\r\n    _NODISCARD constexpr auto _Fold_right_unchecked(_It _First, _Se _Last, _Ty _Init, _Fn _Func) {\r\n        _STL_INTERNAL_STATIC_ASSERT(bidirectional_iterator<_It>);\r\n        _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n        _STL_INTERNAL_STATIC_ASSERT(_Indirectly_binary_right_foldable<_Fn, _Ty, _It>);\r\n\r\n        using _Uty = decay_t<invoke_result_t<_Fn&, iter_reference_t<_It>, _Ty>>;\r\n        if (_First == _Last) {\r\n            return static_cast<_Uty>(_STD move(_Init));\r\n        } else {\r\n            _It _Tail   = _RANGES next(_First, _Last);\r\n            _Uty _Accum = _STD invoke(_Func, *--_Tail, _STD move(_Init));\r\n            while (_First != _Tail) {\r\n                _Accum = _STD invoke(_Func, *--_Tail, _STD move(_Accum));\r\n            }\r\n            return _Accum;\r\n        }\r\n    }\r\n\r\n    struct _Fold_right_fn {\r\n        template <bidirectional_iterator _It, sentinel_for<_It> _Se, class _Ty,\r\n            _Indirectly_binary_right_foldable<_Ty, _It> _Fn>\r\n        _NODISCARD static constexpr auto operator()(_It _First, _Se _Last, _Ty _Init, _Fn _Func) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            return _RANGES _Fold_right_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD move(_Init), _STD _Pass_fn(_Func));\r\n        }\r\n\r\n        template <bidirectional_range _Rng, class _Ty, _Indirectly_binary_right_foldable<_Ty, iterator_t<_Rng>> _Fn>\r\n        _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Ty _Init, _Fn _Func) {\r\n            return _RANGES _Fold_right_unchecked(\r\n                _Ubegin(_Range), _Uend(_Range), _STD move(_Init), _STD _Pass_fn(_Func));\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Fold_right_fn fold_right;\r\n\r\n    class _Fold_right_last_fn {\r\n    public:\r\n        template <bidirectional_iterator _It, sentinel_for<_It> _Se,\r\n            _Indirectly_binary_right_foldable<iter_value_t<_It>, _It> _Fn>\r\n            requires constructible_from<iter_value_t<_It>, iter_reference_t<_It>>\r\n        _NODISCARD static constexpr auto operator()(_It _First, _Se _Last, _Fn _Func) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            return _Fold_right_last_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Func));\r\n        }\r\n\r\n        template <bidirectional_range _Rng,\r\n            _Indirectly_binary_right_foldable<range_value_t<_Rng>, iterator_t<_Rng>> _Fn>\r\n            requires constructible_from<range_value_t<_Rng>, range_reference_t<_Rng>>\r\n        _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Fn _Func) {\r\n            return _Fold_right_last_unchecked(_Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Func));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Fn>\r\n        _NODISCARD static constexpr auto _Fold_right_last_unchecked(_It _First, _Se _Last, _Fn _Func) {\r\n            _STL_INTERNAL_STATIC_ASSERT(bidirectional_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(_Indirectly_binary_right_foldable<_Fn, iter_value_t<_It>, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(constructible_from<iter_value_t<_It>, iter_reference_t<_It>>);\r\n\r\n            using _Uty = decltype(_RANGES fold_right(_First, _Last, static_cast<iter_value_t<_It>>(*_First), _Func));\r\n            if (_First == _Last) {\r\n                return optional<_Uty>{};\r\n            } else {\r\n                _It _Tail = _RANGES prev(_RANGES next(_First, _STD move(_Last)));\r\n                return optional<_Uty>{in_place, _RANGES _Fold_right_unchecked(_STD move(_First), _Tail,\r\n                                                    static_cast<iter_value_t<_It>>(*_Tail), _STD move(_Func))};\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Fold_right_last_fn fold_right_last;\r\n\r\n    class _Find_last_fn {\r\n    public:\r\n        template <forward_iterator _It, sentinel_for<_It> _Se, class _Ty, class _Pj = identity>\r\n            requires indirect_binary_predicate<ranges::equal_to, projected<_It, _Pj>, const _Ty*>\r\n        _NODISCARD static constexpr subrange<_It> operator()(_It _First, _Se _Last, const _Ty& _Value, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            if constexpr (bidirectional_iterator<_It>) {\r\n                auto _ULast = _RANGES _Get_final_iterator_unwrapped<_It>(_UFirst, _STD move(_Last));\r\n                auto _UResult =\r\n                    _Find_last_unchecked(_STD move(_UFirst), _STD move(_ULast), _Value, _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_subrange<subrange<_It>>(_First, _STD move(_UResult));\r\n            } else {\r\n                auto _ULast = _RANGES _Unwrap_sent<_It>(_STD move(_Last));\r\n                auto _UResult =\r\n                    _Find_last_unchecked(_STD move(_UFirst), _STD move(_ULast), _Value, _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_subrange<subrange<_It>>(_First, _STD move(_UResult));\r\n            }\r\n        }\r\n\r\n        template <forward_range _Rng, class _Ty, class _Pj = identity>\r\n            requires indirect_binary_predicate<ranges::equal_to, projected<iterator_t<_Rng>, _Pj>, const _Ty*>\r\n        _NODISCARD static constexpr borrowed_subrange_t<_Rng> operator()(\r\n            _Rng&& _Range, const _Ty& _Value, _Pj _Proj = {}) {\r\n            if constexpr (bidirectional_range<_Rng>) {\r\n                auto _UResult = _Find_last_unchecked(\r\n                    _Ubegin(_Range), _RANGES _Get_final_iterator_unwrapped(_Range), _Value, _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng>>(_Range, _STD move(_UResult));\r\n            } else {\r\n                auto _UResult = _Find_last_unchecked(_Ubegin(_Range), _Uend(_Range), _Value, _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng>>(_Range, _STD move(_UResult));\r\n            }\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Ty, class _Pj>\r\n        _NODISCARD static constexpr subrange<_It> _Find_last_unchecked(\r\n            _It _First, _Se _Last, const _Ty& _Value, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_binary_predicate<ranges::equal_to, projected<_It, _Pj>, const _Ty*>);\r\n\r\n#if _VECTORIZED_FIND_LAST\r\n            if constexpr (is_same_v<_Pj, identity> && _Vector_alg_in_find_is_safe<_It, _Ty>\r\n                          && sized_sentinel_for<_Se, _It>) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    const auto _Count = _Last - _First;\r\n\r\n                    if (!_STD _Could_compare_equal_to_value_type<_It>(_Value)) {\r\n                        return {_First + _Count, _First + _Count};\r\n                    }\r\n\r\n                    const auto _First_ptr = _STD _To_address(_First);\r\n                    const auto _Last_ptr  = _STD _To_address(_First + _Count);\r\n\r\n                    const auto _Result = _STD _Find_last_vectorized(_First_ptr, _Last_ptr, _Value);\r\n                    if constexpr (is_pointer_v<_It>) {\r\n                        return {_Result, _Last_ptr};\r\n                    } else {\r\n                        return {_First + static_cast<iter_difference_t<_It>>(_Result - _First_ptr), _First + _Count};\r\n                    }\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_FIND_LAST ^^^\r\n\r\n            if constexpr (_Bidi_common<_It, _Se>) {\r\n                for (auto _Result = _Last; _Result != _First;) {\r\n                    if (_STD invoke(_Proj, *--_Result) == _Value) {\r\n                        return {_STD move(_Result), _STD move(_Last)};\r\n                    }\r\n                }\r\n                return {_Last, _Last};\r\n            } else if constexpr (same_as<_It, _Se>) {\r\n                auto _Result = _Last;\r\n                for (; _First != _Last; ++_First) {\r\n                    if (_STD invoke(_Proj, *_First) == _Value) {\r\n                        _Result = _First;\r\n                    }\r\n                }\r\n                return {_STD move(_Result), _STD move(_Last)};\r\n            } else {\r\n                auto _Result = _First;\r\n                bool _Found  = false;\r\n                for (;; ++_First) {\r\n                    if (_First == _Last) {\r\n                        if (!_Found) {\r\n                            _Result = _First;\r\n                        }\r\n                        break;\r\n                    }\r\n\r\n                    if (_STD invoke(_Proj, *_First) == _Value) {\r\n                        _Result = _First;\r\n                        _Found  = true;\r\n                    }\r\n                }\r\n                return {_STD move(_Result), _STD move(_First)};\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Find_last_fn find_last;\r\n\r\n    template <bool _Search_for>\r\n    class _Find_last_if_fn {\r\n    public:\r\n        template <forward_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n        _NODISCARD static constexpr subrange<_It> operator()(_It _First, _Se _Last, _Pr _Pred, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            if constexpr (bidirectional_iterator<_It>) {\r\n                auto _ULast   = _RANGES _Get_final_iterator_unwrapped<_It>(_UFirst, _STD move(_Last));\r\n                auto _UResult = _Find_last_if_unchecked(\r\n                    _STD move(_UFirst), _STD move(_ULast), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_subrange<subrange<_It>>(_First, _STD move(_UResult));\r\n            } else {\r\n                auto _ULast   = _RANGES _Unwrap_sent<_It>(_STD move(_Last));\r\n                auto _UResult = _Find_last_if_unchecked(\r\n                    _STD move(_UFirst), _STD move(_ULast), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_subrange<subrange<_It>>(_First, _STD move(_UResult));\r\n            }\r\n        }\r\n\r\n        template <forward_range _Rng, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n        _NODISCARD static constexpr borrowed_subrange_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred, _Pj _Proj = {}) {\r\n            if constexpr (bidirectional_range<_Rng>) {\r\n                auto _UResult = _Find_last_if_unchecked(_Ubegin(_Range), _RANGES _Get_final_iterator_unwrapped(_Range),\r\n                    _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng>>(_Range, _STD move(_UResult));\r\n            } else {\r\n                auto _UResult =\r\n                    _Find_last_if_unchecked(_Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng>>(_Range, _STD move(_UResult));\r\n            }\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Pj, class _Pr>\r\n        _NODISCARD static constexpr subrange<_It> _Find_last_if_unchecked(_It _First, _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n\r\n            if constexpr (_Bidi_common<_It, _Se>) {\r\n                for (auto _Result = _Last; _Result != _First;) {\r\n                    if (_STD invoke_r<bool>(_Pred, _STD invoke(_Proj, *--_Result)) == _Search_for) {\r\n                        return {_STD move(_Result), _STD move(_Last)};\r\n                    }\r\n                }\r\n                return {_Last, _Last};\r\n            } else if constexpr (same_as<_It, _Se>) {\r\n                auto _Result = _Last;\r\n                for (; _First != _Last; ++_First) {\r\n                    if (_STD invoke_r<bool>(_Pred, _STD invoke(_Proj, *_First)) == _Search_for) {\r\n                        _Result = _First;\r\n                    }\r\n                }\r\n                return {_STD move(_Result), _STD move(_Last)};\r\n            } else {\r\n                auto _Result = _First;\r\n                bool _Found  = false;\r\n                for (;; ++_First) {\r\n                    if (_First == _Last) {\r\n                        if (!_Found) {\r\n                            _Result = _First;\r\n                        }\r\n                        break;\r\n                    }\r\n\r\n                    if (_STD invoke_r<bool>(_Pred, _STD invoke(_Proj, *_First)) == _Search_for) {\r\n                        _Result = _First;\r\n                        _Found  = true;\r\n                    }\r\n                }\r\n                return {_STD move(_Result), _STD move(_First)};\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Find_last_if_fn<true> find_last_if;\r\n    _EXPORT_STD inline constexpr _Find_last_if_fn<false> find_last_if_not;\r\n#endif // _HAS_CXX23\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _FwdIt1, class _FwdIt2, class _Pr>\r\n_NODISCARD _CONSTEXPR20 _FwdIt1 find_end(\r\n    _FwdIt1 _First1, const _FwdIt1 _Last1, const _FwdIt2 _First2, const _FwdIt2 _Last2, _Pr _Pred) {\r\n    // find last [_First2, _Last2) satisfying _Pred\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1       = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1  = _STD _Get_unwrapped(_Last1);\r\n    const auto _UFirst2 = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2  = _STD _Get_unwrapped(_Last2);\r\n    if constexpr (_Is_ranges_random_iter_v<_FwdIt1> && _Is_ranges_random_iter_v<_FwdIt2>) {\r\n        const _Iter_diff_t<_FwdIt2> _Count2 = _ULast2 - _UFirst2;\r\n        if (_Count2 > 0 && _Count2 <= _ULast1 - _UFirst1) {\r\n#if _VECTORIZED_FIND_END\r\n            if constexpr (_Vector_alg_in_search_is_safe<decltype(_UFirst1), decltype(_UFirst2), _Pr>) {\r\n                if (!_STD _Is_constant_evaluated()) {\r\n                    const auto _Ptr1 = _STD _To_address(_UFirst1);\r\n                    (void) _STD _To_address(_ULast2);\r\n\r\n                    const auto _Ptr_res1 = _STD _Find_end_vectorized(\r\n                        _Ptr1, _STD _To_address(_ULast1), _STD _To_address(_UFirst2), static_cast<size_t>(_Count2));\r\n\r\n                    if constexpr (is_pointer_v<decltype(_UFirst1)>) {\r\n                        _UFirst1 = _Ptr_res1;\r\n                    } else {\r\n                        _UFirst1 += static_cast<_Iter_diff_t<decltype(_UFirst1)>>(_Ptr_res1 - _Ptr1);\r\n                    }\r\n\r\n                    _STD _Seek_wrapped(_First1, _UFirst1);\r\n                    return _First1;\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_FIND_END ^^^\r\n\r\n            for (auto _UCandidate = _ULast1 - static_cast<_Iter_diff_t<_FwdIt1>>(_Count2);; --_UCandidate) {\r\n                if (_STD _Equal_rev_pred_unchecked(_UCandidate, _UFirst2, _ULast2, _STD _Pass_fn(_Pred))) {\r\n                    _STD _Seek_wrapped(_First1, _UCandidate);\r\n                    return _First1;\r\n                }\r\n\r\n                if (_UCandidate == _UFirst1) {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        return _Last1;\r\n    } else if constexpr (_Is_ranges_bidi_iter_v<_FwdIt1> && _Is_ranges_bidi_iter_v<_FwdIt2>) {\r\n        for (auto _UCandidate = _ULast1;; --_UCandidate) { // try a match at _UCandidate\r\n            auto _UNext1 = _UCandidate;\r\n            auto _UNext2 = _ULast2;\r\n            for (;;) { // test if [_UFirst2, _ULast2) is a suffix of [_UFirst1, _UCandidate)\r\n                if (_UFirst2 == _UNext2) { // match found\r\n                    _STD _Seek_wrapped(_First1, _UNext1);\r\n                    return _First1;\r\n                }\r\n\r\n                if (_UFirst1 == _UNext1) {\r\n                    // [_UFirst1, _UCandidate) is shorter than [_UFirst2, _ULast2), remaining candidates nonviable\r\n                    return _Last1;\r\n                }\r\n\r\n                --_UNext1;\r\n                --_UNext2;\r\n                if (!_Pred(*_UNext1, *_UNext2)) { // counterexample found\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    } else {\r\n        auto _UResult = _ULast1;\r\n        for (;;) { // try a match at _UFirst1\r\n            auto _UNext1 = _UFirst1;\r\n            auto _UNext2 = _UFirst2;\r\n            for (;;) { // test if [_UFirst2, _ULast2) is a prefix of [_UFirst1, _ULast1)\r\n                const bool _End_of_needle = static_cast<bool>(_UNext2 == _ULast2);\r\n                if (_End_of_needle) { // match candidate found\r\n                    _UResult = _UFirst1;\r\n                }\r\n\r\n                if (_UNext1 == _ULast1) {\r\n                    // trying the next candidate would make [_UFirst1, _ULast1) shorter than [_UFirst2, _ULast2), done\r\n                    _STD _Seek_wrapped(_First1, _UResult);\r\n                    return _First1;\r\n                }\r\n\r\n                if (_End_of_needle || !_Pred(*_UNext1, *_UNext2)) {\r\n                    break; // end of match or counterexample found, go to the next candidate\r\n                }\r\n\r\n                ++_UNext1;\r\n                ++_UNext2;\r\n            }\r\n\r\n            ++_UFirst1;\r\n        }\r\n\r\n        _STD _Seek_wrapped(_First1, _UResult);\r\n        return _First1;\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt1, class _FwdIt2>\r\n_NODISCARD _CONSTEXPR20 _FwdIt1 find_end(\r\n    _FwdIt1 const _First1, const _FwdIt1 _Last1, const _FwdIt2 _First2, const _FwdIt2 _Last2) {\r\n    // find last [_First2, _Last2) match\r\n    return _STD find_end(_First1, _Last1, _First2, _Last2, equal_to<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt1 find_end(\r\n    _ExPo&& _Exec, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _Pr _Pred) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt1 find_end(_ExPo&& _Exec, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2) noexcept\r\n/* terminates */ { // find last [_First2, _Last2) match\r\n    return _STD find_end(_STD forward<_ExPo>(_Exec), _First1, _Last1, _First2, _Last2, equal_to{});\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Find_end_fn {\r\n    private:\r\n        template <class _It1, class _It2, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr subrange<_It1> _Random_access_sized_ranges(_It1 _First1,\r\n            const iter_difference_t<_It1> _Count1, _It2 _First2, const iter_difference_t<_It2> _Count2, _Pr _Pred,\r\n            _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>);\r\n            // pre: _First1 + [0, _Count1) is a valid counted range\r\n            // pre: _First2 + [0, _Count2) is a valid counted range\r\n\r\n            if (_Count2 > 0 && _Count2 <= _Count1) {\r\n                const auto _Count2_as1 = static_cast<iter_difference_t<_It1>>(_Count2);\r\n#if _VECTORIZED_FIND_END\r\n                if constexpr (_Vector_alg_in_search_is_safe<_It1, _It2, _Pr> && is_same_v<_Pj1, identity>\r\n                              && is_same_v<_Pj2, identity>) {\r\n                    if (!_STD is_constant_evaluated()) {\r\n                        _STD _Contiguous_iter_verify(_First2, _Count2);\r\n\r\n                        const auto _Ptr1      = _STD to_address(_First1);\r\n                        const auto _Ptr2      = _STD to_address(_First2);\r\n                        const auto _Ptr_last1 = _STD to_address(_First1 + _Count1);\r\n\r\n                        const auto _Ptr_res1 =\r\n                            _STD _Find_end_vectorized(_Ptr1, _Ptr_last1, _Ptr2, static_cast<size_t>(_Count2));\r\n\r\n                        if constexpr (is_pointer_v<_It1>) {\r\n                            if (_Ptr_res1 != _Ptr_last1) {\r\n                                return {_Ptr_res1, _Ptr_res1 + _Count2};\r\n                            } else {\r\n                                return {_Ptr_res1, _Ptr_res1};\r\n                            }\r\n                        } else {\r\n                            _First1 += static_cast<iter_difference_t<_It1>>(_Ptr_res1 - _Ptr1);\r\n                            if (_Ptr_res1 != _Ptr_last1) {\r\n                                return {_First1, _First1 + _Count2_as1};\r\n                            } else {\r\n                                return {_First1, _First1};\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n#endif // ^^^ _VECTORIZED_FIND_END ^^^\r\n\r\n                for (auto _Candidate = _First1 + (_Count1 - _Count2_as1);; --_Candidate) {\r\n                    auto _Match_and_mid1 =\r\n                        _RANGES _Equal_rev_pred(_Candidate, _First2, _First2 + _Count2, _Pred, _Proj1, _Proj2);\r\n                    if (_Match_and_mid1.first) {\r\n                        return {_STD move(_Candidate), _STD move(_Match_and_mid1.second)};\r\n                    }\r\n\r\n                    if (_Candidate == _First1) {\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            _First1 += _Count1;\r\n            return {_First1, _First1};\r\n        }\r\n\r\n        template <class _It1, class _It2, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr subrange<_It1> _Bidi_common_ranges(\r\n            _It1 _First1, _It1 _Last1, _It2 _First2, const _It2 _Last2, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(bidirectional_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(bidirectional_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>);\r\n\r\n            for (auto _Candidate = _Last1;; --_Candidate) { // try a match at _Candidate\r\n                auto _Next1 = _Candidate;\r\n                auto _Next2 = _Last2;\r\n                for (;;) { // test if [_First2, _Last2) is a suffix of [_First1, _Candidate)\r\n                    if (_First2 == _Next2) { // match found\r\n                        return {_STD move(_Next1), _STD move(_Candidate)};\r\n                    }\r\n\r\n                    if (_First1 == _Next1) {\r\n                        // [_First1, _Candidate) is shorter than [_First2, _Last2); remaining candidates nonviable\r\n                        return {_Last1, _Last1};\r\n                    }\r\n\r\n                    --_Next1;\r\n                    --_Next2;\r\n                    if (!_STD invoke(_Pred, _STD invoke(_Proj1, *_Next1), _STD invoke(_Proj2, *_Next2))) {\r\n                        break; // mismatch\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr subrange<_It1> _Forward_ranges(\r\n            _It1 _First1, const _Se1 _Last1, _It2 _First2, const _Se2 _Last2, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>);\r\n\r\n            subrange<_It1> _Match{};\r\n            bool _Found = false;\r\n\r\n            for (;; ++_First1) { // try a match at _First1\r\n                auto _Next1 = _First1;\r\n                auto _Next2 = _First2;\r\n                for (;; ++_Next1, (void) ++_Next2) { // test if [_First2, _Last2) is a prefix of [_First1, _Last1)\r\n                    const bool _End_of_needle = _Next2 == _Last2;\r\n                    if (_End_of_needle) { // match candidate found\r\n                        _Match = subrange{_First1, _Next1};\r\n                        _Found = true;\r\n                    }\r\n\r\n                    if (_Next1 == _Last1) { // haystack exhausted\r\n                        if (!_Found) {\r\n                            _Match = subrange{_Next1, _Next1};\r\n                        }\r\n\r\n                        return _Match;\r\n                    }\r\n\r\n                    if (_End_of_needle) {\r\n                        break; // end of match found, go to the next candidate\r\n                    }\r\n\r\n                    if (!_STD invoke(_Pred, _STD invoke(_Proj1, *_Next1), _STD invoke(_Proj2, *_Next2))) {\r\n                        break; // mismatch, go to the next candidate\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n    public:\r\n        template <forward_iterator _It1, sentinel_for<_It1> _Se1, forward_iterator _It2, sentinel_for<_It2> _Se2,\r\n            class _Pr = ranges::equal_to, class _Pj1 = identity, class _Pj2 = identity>\r\n            requires indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>\r\n        _NODISCARD static constexpr subrange<_It1> operator()(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n            auto _UFirst1 = _RANGES _Unwrap_iter<_Se1>(_First1);\r\n            auto _ULast1  = _RANGES _Unwrap_sent<_It1>(_Last1);\r\n            auto _UFirst2 = _RANGES _Unwrap_iter<_Se2>(_First2);\r\n            auto _ULast2  = _RANGES _Unwrap_sent<_It2>(_Last2);\r\n\r\n            if constexpr (random_access_iterator<_It1> && sized_sentinel_for<_Se1, _It1> && random_access_iterator<_It2>\r\n                          && sized_sentinel_for<_Se2, _It2>) {\r\n                const auto _Count1 = _ULast1 - _UFirst1;\r\n                const auto _Count2 = _ULast2 - _UFirst2;\r\n                auto _UResult = _Random_access_sized_ranges(_STD move(_UFirst1), _Count1, _STD move(_UFirst2), _Count2,\r\n                    _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n                return _RANGES _Rewrap_subrange<subrange<_It1>>(_First1, _STD move(_UResult));\r\n            } else if constexpr (_Bidi_common<_It1, _Se1> && _Bidi_common<_It2, _Se2>) {\r\n                auto _UResult = _Bidi_common_ranges(_STD move(_UFirst1), _STD move(_ULast1), _STD move(_UFirst2),\r\n                    _STD move(_ULast2), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n                return _RANGES _Rewrap_subrange<subrange<_It1>>(_First1, _STD move(_UResult));\r\n            } else {\r\n                auto _UResult = _Forward_ranges(_STD move(_UFirst1), _STD move(_ULast1), _STD move(_UFirst2),\r\n                    _STD move(_ULast2), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n                return _RANGES _Rewrap_subrange<subrange<_It1>>(_First1, _STD move(_UResult));\r\n            }\r\n        }\r\n\r\n        template <forward_range _Rng1, forward_range _Rng2, class _Pr = ranges::equal_to, class _Pj1 = identity,\r\n            class _Pj2 = identity>\r\n            requires indirectly_comparable<iterator_t<_Rng1>, iterator_t<_Rng2>, _Pr, _Pj1, _Pj2>\r\n        _NODISCARD static constexpr borrowed_subrange_t<_Rng1> operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            if constexpr (random_access_range<_Rng1> && sized_range<_Rng1> && random_access_range<_Rng2>\r\n                          && sized_range<_Rng2>) {\r\n                auto _UResult =\r\n                    _Random_access_sized_ranges(_Ubegin(_Range1), _RANGES distance(_Range1), _Ubegin(_Range2),\r\n                        _RANGES distance(_Range2), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n                return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng1>>(_Range1, _STD move(_UResult));\r\n            } else if constexpr (_Bidi_common_range<_Rng1> && _Bidi_common_range<_Rng2>) {\r\n                auto _UResult = _Bidi_common_ranges(_Ubegin(_Range1), _Uend(_Range1), _Ubegin(_Range2), _Uend(_Range2),\r\n                    _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n                return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng1>>(_Range1, _STD move(_UResult));\r\n            } else {\r\n                auto _UResult = _Forward_ranges(_Ubegin(_Range1), _Uend(_Range1), _Ubegin(_Range2), _Uend(_Range2),\r\n                    _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n                return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng1>>(_Range1, _STD move(_UResult));\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Find_end_fn find_end;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _FwdIt1, class _FwdIt2, class _Pr>\r\n_NODISCARD _CONSTEXPR20 _FwdIt1 find_first_of(\r\n    _FwdIt1 _First1, const _FwdIt1 _Last1, const _FwdIt2 _First2, const _FwdIt2 _Last2, _Pr _Pred) {\r\n    // look for one of [_First2, _Last2) satisfying _Pred with element\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    auto _ULast1       = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2 = _STD _Get_unwrapped(_Last2);\r\n\r\n    constexpr bool _Is_predicate_equal = _Is_any_of_v<_Pr,\r\n#if _HAS_CXX20\r\n        _RANGES equal_to,\r\n#endif // _HAS_CXX20\r\n        _STD equal_to<>>;\r\n\r\n    if constexpr (_Is_ranges_random_iter_v<decltype(_UFirst2)> && _Is_predicate_equal) {\r\n        const auto _Count2 = _ULast2 - _UFirst2;\r\n        if (_Count2 == 1) {\r\n            _UFirst1 = _STD _Find_unchecked(_STD move(_UFirst1), _STD move(_ULast1), *_UFirst2);\r\n            _STD _Seek_wrapped(_First1, _UFirst1);\r\n            return _First1;\r\n        }\r\n    }\r\n\r\n#if _VECTORIZED_FIND_FIRST_OF\r\n    if constexpr (_Vector_alg_in_search_is_safe<decltype(_UFirst1), decltype(_UFirst2), _Pr>) {\r\n        if (!_STD _Is_constant_evaluated() && _ULast1 - _UFirst1 >= _Threshold_find_first_of) {\r\n            const auto _First1_ptr = _STD _To_address(_UFirst1);\r\n            const auto _Result     = _STD _Find_first_of_vectorized(\r\n                    _First1_ptr, _STD _To_address(_ULast1), _STD _To_address(_UFirst2), _STD _To_address(_ULast2));\r\n\r\n            if constexpr (is_pointer_v<decltype(_UFirst1)>) {\r\n                _UFirst1 = _Result;\r\n            } else {\r\n                _UFirst1 += static_cast<_Iter_diff_t<decltype(_UFirst1)>>(_Result - _First1_ptr);\r\n            }\r\n            _STD _Seek_wrapped(_First1, _UFirst1);\r\n            return _First1;\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_FIND_FIRST_OF ^^^\r\n\r\n    for (; _UFirst1 != _ULast1; ++_UFirst1) {\r\n        for (auto _UMid2 = _UFirst2; _UMid2 != _ULast2; ++_UMid2) {\r\n            if (_Pred(*_UFirst1, *_UMid2)) {\r\n                _STD _Seek_wrapped(_First1, _UFirst1);\r\n                return _First1;\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First1, _UFirst1);\r\n    return _First1;\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt1, class _FwdIt2>\r\n_NODISCARD _CONSTEXPR20 _FwdIt1 find_first_of(const _FwdIt1 _First1, const _FwdIt1 _Last1, const _FwdIt2 _First2,\r\n    const _FwdIt2 _Last2) { // look for one of [_First2, _Last2) that matches element\r\n    return _STD find_first_of(_First1, _Last1, _First2, _Last2, equal_to<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt1 find_first_of(\r\n    _ExPo&& _Exec, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _Pr _Pred) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt1 find_first_of(_ExPo&& _Exec, const _FwdIt1 _First1, const _FwdIt1 _Last1, const _FwdIt2 _First2,\r\n    const _FwdIt2 _Last2) noexcept /* terminates */ { // look for one of [_First2, _Last2) that matches element\r\n    return _STD find_first_of(_STD forward<_ExPo>(_Exec), _First1, _Last1, _First2, _Last2, equal_to{});\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Find_first_of_fn {\r\n    public:\r\n        template <input_iterator _It1, sentinel_for<_It1> _Se1, forward_iterator _It2, sentinel_for<_It2> _Se2,\r\n            class _Pr = ranges::equal_to, class _Pj1 = identity, class _Pj2 = identity>\r\n            requires indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>\r\n        _NODISCARD static constexpr _It1 operator()(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n\r\n            auto _UResult = _Find_first_of_unchecked(_RANGES _Unwrap_iter<_Se1>(_STD move(_First1)),\r\n                _RANGES _Unwrap_sent<_It1>(_STD move(_Last1)), _RANGES _Unwrap_iter<_Se2>(_STD move(_First2)),\r\n                _RANGES _Unwrap_sent<_It2>(_STD move(_Last2)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1),\r\n                _STD _Pass_fn(_Proj2));\r\n\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult));\r\n            return _First1;\r\n        }\r\n\r\n        template <input_range _Rng1, forward_range _Rng2, class _Pr = ranges::equal_to, class _Pj1 = identity,\r\n            class _Pj2 = identity>\r\n            requires indirectly_comparable<iterator_t<_Rng1>, iterator_t<_Rng2>, _Pr, _Pj1, _Pj2>\r\n        _NODISCARD static constexpr borrowed_iterator_t<_Rng1> operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            auto _First1 = _RANGES begin(_Range1);\r\n\r\n            auto _UResult = _Find_first_of_unchecked(_RANGES _Unwrap_range_iter<_Rng1>(_STD move(_First1)),\r\n                _Uend(_Range1), _Ubegin(_Range2), _Uend(_Range2), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1),\r\n                _STD _Pass_fn(_Proj2));\r\n\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult));\r\n            return _First1;\r\n        }\r\n\r\n    private:\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr _It1 _Find_first_of_unchecked(\r\n            _It1 _First1, _Se1 _Last1, const _It2 _First2, const _Se2 _Last2, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>);\r\n\r\n            if constexpr (_Is_ranges_random_iter_v<_It2> && sized_sentinel_for<_Se2, _It2>\r\n                          && _Is_any_of_v<_Pr, _STD equal_to<>, _RANGES equal_to>) {\r\n                const auto _Count2 = _Last2 - _First2;\r\n                if (_Count2 == 1) {\r\n                    return _RANGES _Find_unchecked(\r\n                        _STD move(_First1), _STD move(_Last1), _STD invoke(_Proj2, *_First2), _Proj1);\r\n                }\r\n            }\r\n\r\n#if _VECTORIZED_FIND_FIRST_OF\r\n            if constexpr (_Vector_alg_in_search_is_safe<_It1, _It2, _Pr> && sized_sentinel_for<_Se1, _It1>\r\n                          && sized_sentinel_for<_Se2, _It2> && is_same_v<_Pj1, identity> && is_same_v<_Pj2, identity>) {\r\n                if (!_STD is_constant_evaluated() && _Last1 - _First1 >= _Threshold_find_first_of) {\r\n                    const auto _First1_ptr = _STD _To_address(_First1);\r\n                    const auto _Last1_ptr  = _STD _To_address(_First1 + (_Last1 - _First1));\r\n\r\n                    const auto _First2_ptr = _STD _To_address(_First2);\r\n                    const auto _Last2_ptr  = _STD _To_address(_First2 + (_Last2 - _First2));\r\n\r\n                    const auto _Result =\r\n                        _STD _Find_first_of_vectorized(_First1_ptr, _Last1_ptr, _First2_ptr, _Last2_ptr);\r\n\r\n                    if constexpr (is_pointer_v<_It1>) {\r\n                        return _Result;\r\n                    } else {\r\n                        return _First1 + static_cast<iter_difference_t<_It1>>(_Result - _First1_ptr);\r\n                    }\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_FIND_FIRST_OF ^^^\r\n\r\n            for (; _First1 != _Last1; ++_First1) {\r\n                for (auto _Mid2 = _First2; _Mid2 != _Last2; ++_Mid2) {\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj1, *_First1), _STD invoke(_Proj2, *_Mid2))) {\r\n                        return _First1;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return _First1;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Find_first_of_fn find_first_of;\r\n\r\n    template <class _Ty>\r\n    constexpr bool _Is_trivially_ranges_swappable_v =\r\n        disjunction_v<conjunction<is_scalar<_Ty>, negation<is_enum<_Ty>>>, _Is_trivially_swappable<_Ty>>;\r\n\r\n    template <class _Ty, size_t _Len>\r\n    constexpr bool _Is_trivially_ranges_swappable_v<_Ty[_Len]> = _Is_trivially_ranges_swappable_v<_Ty>;\r\n\r\n    template <class _Ty>\r\n    struct _Is_trivially_ranges_swappable : bool_constant<_Is_trivially_ranges_swappable_v<_Ty>> {};\r\n\r\n    _EXPORT_STD template <class _In1, class _In2>\r\n    using swap_ranges_result = in_in_result<_In1, _In2>;\r\n\r\n    template <class _It1, class _Se1, class _It2, class _Se2>\r\n    _NODISCARD constexpr swap_ranges_result<_It1, _It2> _Swap_ranges_common(\r\n        _It1 _First1, const _Se1 _Last1, _It2 _First2, const _Se2 _Last2) {\r\n        _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It1>);\r\n        _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n        _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It2>);\r\n        _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n        _STL_INTERNAL_STATIC_ASSERT(indirectly_swappable<_It1, _It2>);\r\n\r\n#if _VECTORIZED_SWAP_RANGES\r\n        using _Elem1 = remove_reference_t<iter_reference_t<_It1>>;\r\n        using _Elem2 = remove_reference_t<iter_reference_t<_It2>>;\r\n        if constexpr (same_as<_Elem1, _Elem2> && _Is_trivially_ranges_swappable_v<_Elem1> //\r\n                      && contiguous_iterator<_It1> && _Sized_or_unreachable_sentinel_for<_Se1, _It1> //\r\n                      && contiguous_iterator<_It2> && _Sized_or_unreachable_sentinel_for<_Se2, _It2>) {\r\n            if (!_STD is_constant_evaluated()) {\r\n                constexpr bool _Is_sized1 = sized_sentinel_for<_Se1, _It1>;\r\n                constexpr bool _Is_sized2 = sized_sentinel_for<_Se2, _It2>;\r\n                const auto _First1_addr   = _STD to_address(_First1);\r\n                const auto _First2_addr   = _STD to_address(_First2);\r\n                if constexpr (_Is_sized1 && _Is_sized2) {\r\n                    const size_t _Count =\r\n                        (_STD min) (static_cast<size_t>(_Last1 - _First1), static_cast<size_t>(_Last2 - _First2));\r\n                    const auto _Last1_addr = _STD to_address(_First1 + static_cast<iter_difference_t<_It1>>(_Count));\r\n                    _STD _Contiguous_iter_verify(_First2, static_cast<iter_difference_t<_It2>>(_Count));\r\n                    ::__std_swap_ranges_trivially_swappable_noalias(_First1_addr, _Last1_addr, _First2_addr);\r\n                    return {_First1 + static_cast<iter_difference_t<_It1>>(_Count),\r\n                        _First2 + static_cast<iter_difference_t<_It2>>(_Count)};\r\n                } else if constexpr (_Is_sized1) {\r\n                    const auto _Dist1      = _Last1 - _First1;\r\n                    const auto _Final1     = _First1 + _Dist1;\r\n                    const auto _Last1_addr = _STD to_address(_Final1);\r\n                    _STD _Contiguous_iter_verify(_First2, static_cast<iter_difference_t<_It2>>(_Dist1));\r\n                    ::__std_swap_ranges_trivially_swappable_noalias(_First1_addr, _Last1_addr, _First2_addr);\r\n                    return {_Final1, _First2 + static_cast<iter_difference_t<_It2>>(_Dist1)};\r\n                } else if constexpr (_Is_sized2) {\r\n                    const auto _Dist2      = _Last2 - _First2;\r\n                    const auto _Final2     = _First2 + _Dist2;\r\n                    const auto _Last2_addr = _STD to_address(_Final2);\r\n                    _STD _Contiguous_iter_verify(_First1, static_cast<iter_difference_t<_It1>>(_Dist2));\r\n                    ::__std_swap_ranges_trivially_swappable_noalias(_First2_addr, _Last2_addr, _First1_addr);\r\n                    return {_First1 + static_cast<iter_difference_t<_It1>>(_Dist2), _Final2};\r\n                } else {\r\n                    _STL_ASSERT(false, \"Tried to swap_ranges with two unreachable sentinels\");\r\n                }\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_SWAP_RANGES ^^^\r\n\r\n        for (; _First1 != _Last1 && _First2 != _Last2; ++_First1, (void) ++_First2) {\r\n            _RANGES iter_swap(_First1, _First2);\r\n        }\r\n\r\n        return {_STD move(_First1), _STD move(_First2)};\r\n    }\r\n\r\n    struct _Swap_ranges_fn {\r\n        template <input_iterator _It1, sentinel_for<_It1> _Se1, input_iterator _It2, sentinel_for<_It2> _Se2>\r\n            requires indirectly_swappable<_It1, _It2>\r\n        static constexpr swap_ranges_result<_It1, _It2> operator()(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n\r\n            auto _UResult = _RANGES _Swap_ranges_common(_RANGES _Unwrap_iter<_Se1>(_STD move(_First1)),\r\n                _RANGES _Unwrap_sent<_It1>(_STD move(_Last1)), _RANGES _Unwrap_iter<_Se2>(_STD move(_First2)),\r\n                _RANGES _Unwrap_sent<_It2>(_STD move(_Last2)));\r\n\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in1));\r\n            _STD _Seek_wrapped(_First2, _STD move(_UResult.in2));\r\n            return {_STD move(_First1), _STD move(_First2)};\r\n        }\r\n\r\n        template <input_range _Rng1, input_range _Rng2>\r\n            requires indirectly_swappable<iterator_t<_Rng1>, iterator_t<_Rng2>>\r\n        static constexpr swap_ranges_result<borrowed_iterator_t<_Rng1>, borrowed_iterator_t<_Rng2>> operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2) {\r\n            auto _First1 = _RANGES begin(_Range1);\r\n            auto _First2 = _RANGES begin(_Range2);\r\n\r\n            auto _UResult = _RANGES _Swap_ranges_common(_RANGES _Unwrap_range_iter<_Rng1>(_STD move(_First1)),\r\n                _Uend(_Range1), _RANGES _Unwrap_range_iter<_Rng2>(_STD move(_First2)), _Uend(_Range2));\r\n\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in1));\r\n            _STD _Seek_wrapped(_First2, _STD move(_UResult.in2));\r\n            return {_STD move(_First1), _STD move(_First2)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Swap_ranges_fn swap_ranges;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _FwdIt1, class _FwdIt2>\r\n_CONSTEXPR20 _FwdIt2 swap_ranges(const _FwdIt1 _First1, const _FwdIt1 _Last1, _FwdIt2 _First2) {\r\n    // swap [_First1, _Last1) with [_First2, ...)\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    const auto _UFirst1 = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1  = _STD _Get_unwrapped(_Last1);\r\n    const auto _UFirst2 = _STD _Get_unwrapped_n(_First2, _STD _Idl_distance<_FwdIt1>(_UFirst1, _ULast1));\r\n    _STD _Verify_ranges_do_not_overlap(_UFirst1, _ULast1, _UFirst2);\r\n    _STD _Seek_wrapped(_First2, _STD _Swap_ranges_unchecked(_UFirst1, _ULast1, _UFirst2));\r\n    return _First2;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 swap_ranges(_ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _Dest) noexcept /* terminates */ {\r\n    // swap [_First1, _Last1) with [_Dest, ...)\r\n    // not parallelized as benchmarks show it isn't worth it\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    return _STD swap_ranges(_First1, _Last1, _Dest);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _FwdIt1, class _FwdIt2>\r\n_CONSTEXPR20 void iter_swap(_FwdIt1 _Left, _FwdIt2 _Right) { // swap *_Left and *_Right\r\n    swap(*_Left, *_Right); // intentional ADL\r\n}\r\n\r\ntemplate <class _VbIt, class _OutIt, class _Mapped_fn>\r\n_CONSTEXPR20 _OutIt _Transform_vbool_aligned(_VbIt _First, _VbIt _Last, _OutIt _Dest, _Mapped_fn _Mapped_func);\r\n\r\ntemplate <class _VbIt1, class _VbIt2, class _OutIt, class _Mapped_fn>\r\n_CONSTEXPR20 _OutIt _Transform_vbool_aligned(\r\n    _VbIt1 _First1, _VbIt1 _Last1, _VbIt2 _First2, _OutIt _Dest, _Mapped_fn _Mapped_func);\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt, class _Fn>\r\n_CONSTEXPR20 _OutIt transform(const _InIt _First, const _InIt _Last, _OutIt _Dest, _Fn _Func) {\r\n    // transform [_First, _Last) with _Func\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UDest       = _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_InIt>(_UFirst, _ULast));\r\n\r\n    if constexpr (_Is_vb_iterator<decltype(_UFirst)> && _Is_vb_iterator<decltype(_UDest), true>\r\n                  && !is_void_v<_Map_vb_functor_t<_Fn>>) {\r\n        if (_UFirst._Myoff == 0 && _UDest._Myoff == 0) {\r\n            _UDest = _Transform_vbool_aligned(_UFirst, _ULast, _UDest, _Map_vb_functor_t<_Fn>{});\r\n            _STD _Seek_wrapped(_Dest, _UDest);\r\n            return _Dest;\r\n        }\r\n    }\r\n\r\n    for (; _UFirst != _ULast; ++_UFirst, (void) ++_UDest) {\r\n        *_UDest = _Func(*_UFirst);\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Fn, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 transform(_ExPo&& _Exec, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest, _Fn _Func) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _OutIt, class _Fn>\r\n_CONSTEXPR20 _OutIt transform(\r\n    const _InIt1 _First1, const _InIt1 _Last1, const _InIt2 _First2, _OutIt _Dest, _Fn _Func) {\r\n    // transform [_First1, _Last1) and [_First2, ...) with _Func\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    const auto _Count  = _STD _Idl_distance<_InIt1>(_UFirst1, _ULast1);\r\n    auto _UFirst2      = _STD _Get_unwrapped_n(_First2, _Count);\r\n    auto _UDest        = _STD _Get_unwrapped_n(_Dest, _Count);\r\n\r\n    if constexpr (_Is_vb_iterator<decltype(_UFirst1)> && _Is_vb_iterator<decltype(_UFirst2)>\r\n                  && _Is_vb_iterator<decltype(_UDest), true> && !is_void_v<_Map_vb_functor_t<_Fn>>) {\r\n        if (_UFirst1._Myoff == 0 && _UFirst2._Myoff == 0 && _UDest._Myoff == 0) {\r\n            _UDest = _Transform_vbool_aligned(_UFirst1, _ULast1, _UFirst2, _UDest, _Map_vb_functor_t<_Fn>{});\r\n            _STD _Seek_wrapped(_Dest, _UDest);\r\n            return _Dest;\r\n        }\r\n    }\r\n\r\n    for (; _UFirst1 != _ULast1; ++_UFirst1, (void) ++_UFirst2, ++_UDest) {\r\n        *_UDest = _Func(*_UFirst1, *_UFirst2);\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _FwdIt3, class _Fn,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt3 transform(_ExPo&& _Exec, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt3 _Dest,\r\n    _Fn _Func) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <class _Diff1, class _Diff2>\r\n    _NODISCARD constexpr auto _Idl_dist_min([[maybe_unused]] const _Diff1 _Lhs, [[maybe_unused]] const _Diff2 _Rhs) {\r\n        // returns the minimum of two results from _Idl_distance calls\r\n        if constexpr (is_same_v<_Diff1, _Distance_unknown> || is_same_v<_Diff2, _Distance_unknown>) {\r\n            return _Distance_unknown{};\r\n        } else if constexpr (is_same_v<_Diff1, _Distance_unbounded>) {\r\n            return _Rhs;\r\n        } else if constexpr (is_same_v<_Diff2, _Distance_unbounded>) {\r\n            return _Lhs;\r\n        } else {\r\n            if (_Rhs < _Lhs) {\r\n                return static_cast<_Diff1>(_Rhs);\r\n            } else {\r\n                return _Lhs;\r\n            }\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using unary_transform_result = in_out_result<_In, _Out>;\r\n\r\n    _EXPORT_STD template <class _In1, class _In2, class _Out>\r\n    using binary_transform_result = in_in_out_result<_In1, _In2, _Out>;\r\n\r\n    class _Transform_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, weakly_incrementable _Out, copy_constructible _Fn,\r\n            class _Pj = identity>\r\n            requires indirectly_writable<_Out, indirect_result_t<_Fn&, projected<_It, _Pj>>>\r\n        static constexpr unary_transform_result<_It, _Out> operator()(\r\n            _It _First, _Se _Last, _Out _Output, _Fn _Func, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst      = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast       = _RANGES _Unwrap_sent<_It>(_STD move(_Last));\r\n            const auto _Count = _RANGES _Idl_distance<_It>(_UFirst, _ULast);\r\n\r\n            auto _UResult = _Transform_unary_unchecked(_STD move(_UFirst), _STD move(_ULast),\r\n                _STD _Get_unwrapped_n(_STD move(_Output), _Count), _STD _Pass_fn(_Func), _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n        template <input_range _Rng, weakly_incrementable _Out, copy_constructible _Fn, class _Pj = identity>\r\n            requires indirectly_writable<_Out, indirect_result_t<_Fn&, projected<iterator_t<_Rng>, _Pj>>>\r\n        static constexpr unary_transform_result<borrowed_iterator_t<_Rng>, _Out> operator()(\r\n            _Rng&& _Range, _Out _Output, _Fn _Func, _Pj _Proj = {}) {\r\n            const auto _Count = _RANGES _Idl_distance(_Range);\r\n            auto _First       = _RANGES begin(_Range);\r\n\r\n            auto _UResult =\r\n                _Transform_unary_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range),\r\n                    _STD _Get_unwrapped_n(_STD move(_Output), _Count), _STD _Pass_fn(_Func), _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n        template <input_iterator _It1, sentinel_for<_It1> _Se1, input_iterator _It2, sentinel_for<_It2> _Se2,\r\n            weakly_incrementable _Out, copy_constructible _Fn, class _Pj1 = identity, class _Pj2 = identity>\r\n            requires indirectly_writable<_Out, indirect_result_t<_Fn&, projected<_It1, _Pj1>, projected<_It2, _Pj2>>>\r\n        static constexpr binary_transform_result<_It1, _It2, _Out> operator()(_It1 _First1, _Se1 _Last1, _It2 _First2,\r\n            _Se2 _Last2, _Out _Output, _Fn _Func, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n\r\n            auto _UFirst1      = _RANGES _Unwrap_iter<_Se1>(_STD move(_First1));\r\n            auto _ULast1       = _RANGES _Unwrap_sent<_It1>(_STD move(_Last1));\r\n            const auto _Count1 = _RANGES _Idl_distance<_It1>(_UFirst1, _ULast1);\r\n            auto _UFirst2      = _RANGES _Unwrap_iter<_Se2>(_STD move(_First2));\r\n            auto _ULast2       = _RANGES _Unwrap_sent<_It2>(_STD move(_Last2));\r\n            const auto _Count2 = _RANGES _Idl_distance<_It2>(_UFirst2, _ULast2);\r\n            const auto _Count  = _RANGES _Idl_dist_min(_Count1, _Count2);\r\n\r\n            auto _UResult = _Transform_binary_unchecked(_STD move(_UFirst1), _STD move(_ULast1), _STD move(_UFirst2),\r\n                _STD move(_ULast2), _STD _Get_unwrapped_n(_STD move(_Output), _Count), _STD _Pass_fn(_Func),\r\n                _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in1));\r\n            _STD _Seek_wrapped(_First2, _STD move(_UResult.in2));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First1), _STD move(_First2), _STD move(_Output)};\r\n        }\r\n\r\n        template <input_range _Rng1, input_range _Rng2, weakly_incrementable _Out, copy_constructible _Fn,\r\n            class _Pj1 = identity, class _Pj2 = identity>\r\n            requires indirectly_writable<_Out,\r\n                indirect_result_t<_Fn&, projected<iterator_t<_Rng1>, _Pj1>, projected<iterator_t<_Rng2>, _Pj2>>>\r\n        static constexpr binary_transform_result<borrowed_iterator_t<_Rng1>, borrowed_iterator_t<_Rng2>, _Out>\r\n            operator()(_Rng1&& _Range1, _Rng2&& _Range2, _Out _Output, _Fn _Func, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            const auto _Count = _RANGES _Idl_dist_min(_RANGES _Idl_distance(_Range1), _RANGES _Idl_distance(_Range2));\r\n            auto _First1      = _RANGES begin(_Range1);\r\n            auto _First2      = _RANGES begin(_Range2);\r\n\r\n            auto _UResult = _Transform_binary_unchecked(_RANGES _Unwrap_range_iter<_Rng1>(_STD move(_First1)),\r\n                _Uend(_Range1), _RANGES _Unwrap_range_iter<_Rng2>(_STD move(_First2)), _Uend(_Range2),\r\n                _STD _Get_unwrapped_n(_STD move(_Output), _Count), _STD _Pass_fn(_Func), _STD _Pass_fn(_Proj1),\r\n                _STD _Pass_fn(_Proj2));\r\n\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in1));\r\n            _STD _Seek_wrapped(_First2, _STD move(_UResult.in2));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First1), _STD move(_First2), _STD move(_Output)};\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Out, class _Fn, class _Pj>\r\n        _NODISCARD static constexpr unary_transform_result<_It, _Out> _Transform_unary_unchecked(\r\n            _It _First, const _Se _Last, _Out _Output, _Fn _Func, _Pj _Proj) {\r\n            // transform projected [_First, _Last) with _Func\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(weakly_incrementable<_Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_writable<_Out, indirect_result_t<_Fn&, projected<_It, _Pj>>>);\r\n\r\n            for (; _First != _Last; ++_First, (void) ++_Output) {\r\n                *_Output = _STD invoke(_Func, _STD invoke(_Proj, *_First));\r\n            }\r\n\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Out, class _Fn, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr binary_transform_result<_It1, _It2, _Out> _Transform_binary_unchecked(_It1 _First1,\r\n            const _Se1 _Last1, _It2 _First2, const _Se2 _Last2, _Out _Output, _Fn _Func, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            // transform projected [_First1, _Last1) and projected [_First2, _Last2) with _Func\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(weakly_incrementable<_Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(\r\n                indirectly_writable<_Out, indirect_result_t<_Fn&, projected<_It1, _Pj1>, projected<_It2, _Pj2>>>);\r\n\r\n            for (; _First1 != _Last1 && _First2 != _Last2; ++_First1, (void) ++_First2, ++_Output) {\r\n                *_Output = _STD invoke(_Func, _STD invoke(_Proj1, *_First1), _STD invoke(_Proj2, *_First2));\r\n            }\r\n\r\n            return {_STD move(_First1), _STD move(_First2), _STD move(_Output)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Transform_fn transform;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Ty>\r\n_CONSTEXPR20 void replace(const _FwdIt _First, const _FwdIt _Last, const _Ty& _Oldval, const _Ty& _Newval) {\r\n    // replace each matching _Oldval with _Newval\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n\r\n#if _VECTORIZED_REPLACE\r\n    if constexpr (_Vector_alg_in_replace_is_safe<decltype(_UFirst), _Ty>) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            if (_STD _Could_compare_equal_to_value_type<decltype(_UFirst)>(_Oldval)) {\r\n                _STD _Replace_vectorized(_STD _To_address(_UFirst), _STD _To_address(_ULast), _Oldval, _Newval);\r\n            }\r\n\r\n            return;\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_REPLACE ^^^\r\n\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        if (*_UFirst == _Oldval) {\r\n            *_UFirst = _Newval;\r\n        }\r\n    }\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid replace(_ExPo&& _Exec, _FwdIt _First, _FwdIt _Last, const _Ty& _Oldval,\r\n    const _Ty& _Newval) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Replace_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Ty1, class _Ty2, class _Pj = identity>\r\n            requires indirectly_writable<_It, const _Ty2&>\r\n                  && indirect_binary_predicate<ranges::equal_to, projected<_It, _Pj>, const _Ty1*>\r\n        static constexpr _It operator()(\r\n            _It _First, _Se _Last, const _Ty1& _Oldval, const _Ty2& _Newval, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _Replace_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _Oldval, _Newval, _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult));\r\n            return _First;\r\n        }\r\n\r\n        template <input_range _Rng, class _Ty1, class _Ty2, class _Pj = identity>\r\n            requires indirectly_writable<iterator_t<_Rng>, const _Ty2&>\r\n                  && indirect_binary_predicate<ranges::equal_to, projected<iterator_t<_Rng>, _Pj>, const _Ty1*>\r\n        static constexpr borrowed_iterator_t<_Rng> operator()(\r\n            _Rng&& _Range, const _Ty1& _Oldval, const _Ty2& _Newval, _Pj _Proj = {}) {\r\n            auto _First   = _RANGES begin(_Range);\r\n            auto _UResult = _Replace_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range),\r\n                _Oldval, _Newval, _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult));\r\n            return _First;\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Ty1, class _Ty2, class _Pj>\r\n        _NODISCARD static constexpr _It _Replace_unchecked(\r\n            _It _First, const _Se _Last, const _Ty1& _Oldval, const _Ty2& _Newval, _Pj _Proj) {\r\n            // replace projected _Oldval with _Newval in [_First, _Last)\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_writable<_It, const _Ty2&>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_binary_predicate<ranges::equal_to, projected<_It, _Pj>, const _Ty1*>);\r\n\r\n#if _VECTORIZED_REPLACE\r\n            if constexpr (is_same_v<_Pj, identity> && sized_sentinel_for<_Se, _It>\r\n                          && _Vector_alg_in_ranges_replace_is_safe<_It, _Ty1, _Ty2>) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    const auto _Count = _Last - _First;\r\n\r\n                    if (_STD _Could_compare_equal_to_value_type<_It>(_Oldval)) {\r\n                        const auto _First_ptr = _STD to_address(_First);\r\n                        const auto _Last_ptr  = _STD to_address(_First + _Count);\r\n                        _STD _Replace_vectorized(_First_ptr, _Last_ptr, _Oldval, _Newval);\r\n                    }\r\n\r\n                    return _First + _Count;\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_REPLACE ^^^\r\n\r\n            for (; _First != _Last; ++_First) {\r\n                if (_STD invoke(_Proj, *_First) == _Oldval) {\r\n                    *_First = _Newval;\r\n                }\r\n            }\r\n\r\n            return _First;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Replace_fn replace;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Pr, class _Ty>\r\n_CONSTEXPR20 void replace_if(const _FwdIt _First, const _FwdIt _Last, _Pr _Pred, const _Ty& _Val) {\r\n    // replace each satisfying _Pred with _Val\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        if (_Pred(*_UFirst)) {\r\n            *_UFirst = _Val;\r\n        }\r\n    }\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid replace_if(_ExPo&& _Exec, _FwdIt _First, _FwdIt _Last, _Pr _Pred, const _Ty& _Val) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Replace_if_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Ty, class _Pj = identity,\r\n            indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n            requires indirectly_writable<_It, const _Ty&>\r\n        static constexpr _It operator()(_It _First, _Se _Last, _Pr _Pred, const _Ty& _Newval, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _Replace_if_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Pred), _Newval, _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult));\r\n            return _First;\r\n        }\r\n\r\n        template <input_range _Rng, class _Ty, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n            requires indirectly_writable<iterator_t<_Rng>, const _Ty&>\r\n        static constexpr borrowed_iterator_t<_Rng> operator()(\r\n            _Rng&& _Range, _Pr _Pred, const _Ty& _Newval, _Pj _Proj = {}) {\r\n            auto _First   = _RANGES begin(_Range);\r\n            auto _UResult = _Replace_if_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range),\r\n                _STD _Pass_fn(_Pred), _Newval, _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult));\r\n            return _First;\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Ty, class _Pj, class _Pr>\r\n        _NODISCARD static constexpr _It _Replace_if_unchecked(\r\n            _It _First, const _Se _Last, _Pr _Pred, const _Ty& _Newval, _Pj _Proj) {\r\n            // replace projected _Oldval that fulfills _Pred with _Newval in [_First, _Last)\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_writable<_It, const _Ty&>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n\r\n            for (; _First != _Last; ++_First) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                    *_First = _Newval;\r\n                }\r\n            }\r\n\r\n            return _First;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Replace_if_fn replace_if;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt, class _Ty>\r\n_CONSTEXPR20 _OutIt replace_copy(_InIt _First, _InIt _Last, _OutIt _Dest, const _Ty& _Oldval, const _Ty& _Newval) {\r\n    // copy replacing each matching _Oldval with _Newval\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    _STD _Verify_ranges_do_not_overlap(_First, _Last, _Dest);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UDest       = _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_InIt>(_UFirst, _ULast));\r\n\r\n#if _VECTORIZED_REPLACE_COPY\r\n    if constexpr (_Vector_alg_in_find_is_safe<decltype(_UFirst), _Ty>\r\n                  && _Output_iterator_for_known_size_vector_alg_is_safe<decltype(_UDest), decltype(_UFirst)>()) {\r\n        if (!_STD _Is_constant_evaluated()) {\r\n            const auto _Count = static_cast<_Iter_diff_t<decltype(_UDest)>>(_ULast - _UFirst);\r\n            _STD _Contiguous_iter_verify(_UDest, _Count);\r\n\r\n            const auto _First_ptr = _STD _To_address(_UFirst);\r\n            const auto _Last_ptr  = _STD _To_address(_ULast);\r\n            const auto _Dest_ptr  = _STD _To_address(_UDest);\r\n\r\n            if (_STD _Could_compare_equal_to_value_type<decltype(_UFirst)>(_Oldval)) {\r\n                _STD _Replace_copy_vectorized(_First_ptr, _Last_ptr, _Dest_ptr, _Oldval, _Newval);\r\n            } else {\r\n                _CSTD memcpy(_Dest_ptr, _First_ptr, static_cast<size_t>(_Count) * sizeof(*_Dest_ptr));\r\n            }\r\n\r\n            _UDest += _Count;\r\n            _STD _Seek_wrapped(_Dest, _UDest);\r\n            return _Dest;\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_REPLACE_COPY ^^^\r\n\r\n    for (; _UFirst != _ULast; ++_UFirst, (void) ++_UDest) {\r\n        if (*_UFirst == _Oldval) {\r\n            *_UDest = _Newval;\r\n        } else {\r\n            *_UDest = *_UFirst;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 replace_copy(_ExPo&&, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest, const _Ty& _Oldval,\r\n    const _Ty& _Newval) noexcept /* terminates */ {\r\n    // copy replacing each matching _Oldval with _Newval\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    return _STD replace_copy(_First, _Last, _Dest, _Oldval, _Newval);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using replace_copy_result = in_out_result<_In, _Out>;\r\n\r\n    class _Replace_copy_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Ty1, class _Ty2, output_iterator<const _Ty2&> _Out,\r\n            class _Pj = identity>\r\n            requires indirectly_copyable<_It, _Out>\r\n                  && indirect_binary_predicate<ranges::equal_to, projected<_It, _Pj>, const _Ty1*>\r\n        static constexpr replace_copy_result<_It, _Out> operator()(\r\n            _It _First, _Se _Last, _Out _Output, const _Ty1& _Oldval, const _Ty2& _Newval, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst      = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast       = _RANGES _Unwrap_sent<_It>(_STD move(_Last));\r\n            const auto _Count = _RANGES _Idl_distance<_It>(_UFirst, _ULast);\r\n            auto _UResult     = _Replace_copy_common(_STD move(_UFirst), _STD move(_ULast),\r\n                    _STD _Get_unwrapped_n(_STD move(_Output), _Count), _Oldval, _Newval, _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n        template <input_range _Rng, class _Ty1, class _Ty2, output_iterator<const _Ty2&> _Out, class _Pj = identity>\r\n            requires indirectly_copyable<iterator_t<_Rng>, _Out>\r\n                  && indirect_binary_predicate<ranges::equal_to, projected<iterator_t<_Rng>, _Pj>, const _Ty1*>\r\n        static constexpr replace_copy_result<borrowed_iterator_t<_Rng>, _Out> operator()(\r\n            _Rng&& _Range, _Out _Output, const _Ty1& _Oldval, const _Ty2& _Newval, _Pj _Proj = {}) {\r\n            const auto _Count = _RANGES _Idl_distance(_Range);\r\n            auto _First       = _RANGES begin(_Range);\r\n            auto _UResult     = _Replace_copy_common(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range),\r\n                    _STD _Get_unwrapped_n(_STD move(_Output), _Count), _Oldval, _Newval, _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Ty1, class _Ty2, class _Out, class _Pj>\r\n        _NODISCARD static constexpr replace_copy_result<_It, _Out> _Replace_copy_common(\r\n            _It _First, const _Se _Last, _Out _Output, const _Ty1& _Oldval, const _Ty2& _Newval, _Pj _Proj) {\r\n            // copy [_First, _Last) to _Output while replacing projected _Oldval with _Newval\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(output_iterator<_Out, const _Ty2&>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_copyable<_It, _Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_binary_predicate<equal_to, projected<_It, _Pj>, const _Ty1*>);\r\n\r\n            _STD _Verify_ranges_do_not_overlap(_First, _Last, _Output);\r\n\r\n#if _VECTORIZED_REPLACE_COPY\r\n            if constexpr (is_same_v<_Pj, identity> && sized_sentinel_for<_Se, _It>\r\n                          && _Vector_alg_in_find_is_safe<_It, _Ty1> && _Vector_alg_in_find_is_safe<_It, _Ty2>\r\n                          && _Output_iterator_for_known_size_vector_alg_is_safe<_Out, _It>()) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    const auto _Count = _Last - _First;\r\n                    _STD _Contiguous_iter_verify(_First, _Count);\r\n                    _STD _Contiguous_iter_verify(_Output, static_cast<iter_difference_t<_Out>>(_Count));\r\n\r\n                    const auto _First_ptr = _STD to_address(_First);\r\n                    const auto _Last_ptr  = _First_ptr + static_cast<size_t>(_Count);\r\n                    const auto _Out_ptr   = _STD to_address(_Output);\r\n\r\n                    if (_STD _Could_compare_equal_to_value_type<_It>(_Oldval)) {\r\n                        _STD _Replace_copy_vectorized(_First_ptr, _Last_ptr, _Out_ptr, _Oldval, _Newval);\r\n                    } else {\r\n                        _CSTD memcpy(_Out_ptr, _First_ptr, static_cast<size_t>(_Count) * sizeof(*_Out_ptr));\r\n                    }\r\n\r\n                    _First += _Count;\r\n                    _Output += static_cast<iter_difference_t<_Out>>(_Count);\r\n                    return {_STD move(_First), _STD move(_Output)};\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_REPLACE_COPY ^^^\r\n\r\n            for (; _First != _Last; ++_First, (void) ++_Output) {\r\n                if (_STD invoke(_Proj, *_First) == _Oldval) {\r\n                    *_Output = _Newval;\r\n                } else {\r\n                    *_Output = *_First;\r\n                }\r\n            }\r\n\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Replace_copy_fn replace_copy;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt, class _Pr, class _Ty>\r\n_CONSTEXPR20 _OutIt replace_copy_if(_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred, const _Ty& _Val) {\r\n    // copy replacing each satisfying _Pred with _Val\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    _STD _Verify_ranges_do_not_overlap(_First, _Last, _Dest);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UDest       = _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_InIt>(_UFirst, _ULast));\r\n    for (; _UFirst != _ULast; ++_UFirst, (void) ++_UDest) {\r\n        if (_Pred(*_UFirst)) {\r\n            *_UDest = _Val;\r\n        } else {\r\n            *_UDest = *_UFirst;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr, class _Ty,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 replace_copy_if(_ExPo&&, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest, _Pr _Pred, const _Ty& _Val) noexcept\r\n/* terminates */ {\r\n    // copy replacing each satisfying _Pred with _Val\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    return _STD replace_copy_if(_First, _Last, _Dest, _STD _Pass_fn(_Pred), _Val);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using replace_copy_if_result = in_out_result<_In, _Out>;\r\n\r\n    class _Replace_copy_if_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Ty, output_iterator<const _Ty&> _Out,\r\n            class _Pj = identity, indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n            requires indirectly_copyable<_It, _Out>\r\n        static constexpr replace_copy_if_result<_It, _Out> operator()(\r\n            _It _First, _Se _Last, _Out _Output, _Pr _Pred, const _Ty& _Newval, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst      = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast       = _RANGES _Unwrap_sent<_It>(_STD move(_Last));\r\n            const auto _Count = _RANGES _Idl_distance<_It>(_UFirst, _ULast);\r\n\r\n            auto _UResult = _Replace_copy_if_common(_STD move(_UFirst), _STD move(_ULast),\r\n                _STD _Get_unwrapped_n(_STD move(_Output), _Count), _STD _Pass_fn(_Pred), _Newval, _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n        template <input_range _Rng, class _Ty, output_iterator<const _Ty&> _Out, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n            requires indirectly_copyable<iterator_t<_Rng>, _Out>\r\n        static constexpr replace_copy_if_result<borrowed_iterator_t<_Rng>, _Out> operator()(\r\n            _Rng&& _Range, _Out _Output, _Pr _Pred, const _Ty& _Newval, _Pj _Proj = {}) {\r\n            const auto _Count = _RANGES _Idl_distance(_Range);\r\n            auto _First       = _RANGES begin(_Range);\r\n            auto _UResult = _Replace_copy_if_common(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range),\r\n                _STD _Get_unwrapped_n(_STD move(_Output), _Count), _STD _Pass_fn(_Pred), _Newval, _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Ty, class _Out, class _Pj, class _Pr>\r\n        _NODISCARD static constexpr replace_copy_if_result<_It, _Out> _Replace_copy_if_common(\r\n            _It _First, const _Se _Last, _Out _Output, _Pr _Pred, const _Ty& _Newval, _Pj _Proj) {\r\n            // copy [_First, _Last) to _Output while replacing _Oldval with _Newval if projected _Oldval fulfills _Pred\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(output_iterator<_Out, const _Ty&>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_copyable<_It, _Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n\r\n            _STD _Verify_ranges_do_not_overlap(_First, _Last, _Output);\r\n\r\n            for (; _First != _Last; ++_First, (void) ++_Output) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                    *_Output = _Newval;\r\n                } else {\r\n                    *_Output = *_First;\r\n                }\r\n            }\r\n\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Replace_copy_if_fn replace_copy_if;\r\n\r\n    struct _Fill_fn {\r\n        template <class _Ty, output_iterator<const _Ty&> _It, sentinel_for<_It> _Se>\r\n        static constexpr _It operator()(_It _First, _Se _Last, const _Ty& _Value) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst      = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            const auto _ULast = _RANGES _Unwrap_sent<_It>(_STD move(_Last));\r\n            if (!_STD is_constant_evaluated()) {\r\n                if constexpr (sized_sentinel_for<decltype(_ULast), decltype(_UFirst)>) {\r\n                    if constexpr (_Fill_memset_is_safe<decltype(_UFirst), _Ty>) {\r\n                        const auto _Distance = static_cast<size_t>(_ULast - _UFirst);\r\n                        _STD _Fill_memset(_UFirst, _Value, _Distance);\r\n                        _STD _Seek_wrapped(_First, _UFirst + _Distance);\r\n                        return _First;\r\n                    } else if constexpr (_Fill_zero_memset_is_safe<decltype(_UFirst), _Ty>) {\r\n                        if (_STD _Is_all_bits_zero(_Value)) {\r\n                            const auto _Distance = static_cast<size_t>(_ULast - _UFirst);\r\n                            _STD _Fill_zero_memset(_UFirst, _Distance);\r\n                            _STD _Seek_wrapped(_First, _UFirst + _Distance);\r\n                            return _First;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            for (; _UFirst != _ULast; ++_UFirst) {\r\n                *_UFirst = _Value;\r\n            }\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UFirst));\r\n            return _First;\r\n        }\r\n\r\n        template <class _Ty, output_range<const _Ty&> _Rng>\r\n        static constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, const _Ty& _Value) {\r\n            auto _First = _RANGES begin(_Range);\r\n            _STD _Seek_wrapped(\r\n                _First, operator()(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range), _Value));\r\n            return _First;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Fill_fn fill;\r\n\r\n    class _Generate_fn {\r\n    public:\r\n        template <input_or_output_iterator _Out, sentinel_for<_Out> _Se, copy_constructible _Fn>\r\n            requires invocable<_Fn&> && indirectly_writable<_Out, invoke_result_t<_Fn&>>\r\n        static constexpr _Out operator()(_Out _First, _Se _Last, _Fn _Gen) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            _STD _Seek_wrapped(_First, _Generate_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                                           _RANGES _Unwrap_sent<_Out>(_STD move(_Last)), _STD _Pass_fn(_Gen)));\r\n            return _First;\r\n        }\r\n\r\n        template <class _Rng, copy_constructible _Fn>\r\n            requires invocable<_Fn&> && output_range<_Rng, invoke_result_t<_Fn&>>\r\n        static constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Fn _Gen) {\r\n            auto _First = _RANGES begin(_Range);\r\n            _STD _Seek_wrapped(_First, _Generate_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)),\r\n                                           _Uend(_Range), _STD _Pass_fn(_Gen)));\r\n            return _First;\r\n        }\r\n\r\n    private:\r\n        template <class _Out, class _Se, class _Fn>\r\n        _NODISCARD static constexpr _Out _Generate_unchecked(_Out _First, const _Se _Last, _Fn _Gen) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_or_output_iterator<_Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(copy_constructible<_Fn>);\r\n            _STL_INTERNAL_STATIC_ASSERT(invocable<_Fn&>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_writable<_Out, invoke_result_t<_Fn&>>);\r\n\r\n            for (; _First != _Last; ++_First) {\r\n                *_First = _Gen();\r\n            }\r\n\r\n            return _First;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Generate_fn generate;\r\n\r\n    struct _Generate_n_fn {\r\n        template <input_or_output_iterator _Out, copy_constructible _Fn>\r\n            requires invocable<_Fn&> && indirectly_writable<_Out, invoke_result_t<_Fn&>>\r\n        static constexpr _Out operator()(_Out _First, iter_difference_t<_Out> _Count, _Fn _Gen) {\r\n            if (_Count > 0) {\r\n                auto _UFirst = _STD _Get_unwrapped_n(_STD move(_First), _Count);\r\n                do {\r\n                    *_UFirst = _Gen();\r\n                    ++_UFirst;\r\n                } while (--_Count > 0);\r\n\r\n                _STD _Seek_wrapped(_First, _STD move(_UFirst));\r\n            }\r\n\r\n            return _First;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Generate_n_fn generate_n;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Fn>\r\n_CONSTEXPR20 void generate(_FwdIt _First, _FwdIt _Last, _Fn _Func) { // replace [_First, _Last) with _Func()\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        *_UFirst = _Func();\r\n    }\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Fn, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid generate(_ExPo&&, _FwdIt _First, _FwdIt _Last, _Fn _Func) noexcept /* terminates */ {\r\n    // replace [_First, _Last) with _Func()\r\n    // not parallelized at present due to unclear parallelism requirements on _Func\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt);\r\n    return _STD generate(_First, _Last, _STD _Pass_fn(_Func));\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _OutIt, class _Diff, class _Fn>\r\n_CONSTEXPR20 _OutIt generate_n(_OutIt _Dest, const _Diff _Count_raw, _Fn _Func) {\r\n    // replace [_Dest, _Dest + _Count) with _Func()\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    if (0 < _Count) {\r\n        auto _UDest = _STD _Get_unwrapped_n(_Dest, _Count);\r\n        do {\r\n            *_UDest = _Func();\r\n            --_Count;\r\n            ++_UDest;\r\n        } while (0 < _Count);\r\n\r\n        _STD _Seek_wrapped(_Dest, _UDest);\r\n    }\r\n\r\n    return _Dest;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Diff, class _Fn, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt generate_n(_ExPo&&, const _FwdIt _Dest, const _Diff _Count_raw, _Fn _Func) noexcept /* terminates */ {\r\n    // replace [_Dest, _Dest + _Count) with _Func()\r\n    // not parallelized at present due to unclear parallelism requirements on _Func\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt);\r\n    return _STD generate_n(_Dest, _Count_raw, _STD _Pass_fn(_Func));\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt, class _Ty>\r\n_CONSTEXPR20 _OutIt remove_copy(_InIt _First, _InIt _Last, _OutIt _Dest, const _Ty& _Val) {\r\n    // copy omitting each matching _Val\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UDest       = _STD _Get_unwrapped_unverified(_Dest);\r\n\r\n#if _VECTORIZED_REMOVE_COPY\r\n    if constexpr (_Vector_alg_in_find_is_safe<decltype(_UFirst), _Ty>\r\n                  && _Output_iterator_for_vector_alg_is_safe<decltype(_UDest), decltype(_UFirst)>()) {\r\n        if (!_STD _Is_constant_evaluated()) {\r\n            if (!_STD _Could_compare_equal_to_value_type<decltype(_UFirst)>(_Val)) {\r\n                _UDest = _STD _Copy_unchecked(_UFirst, _ULast, _UDest);\r\n                _STD _Seek_wrapped(_Dest, _UDest);\r\n                return _Dest;\r\n            }\r\n\r\n            const auto _Dest_ptr = _STD _To_address(_UDest);\r\n            const auto _Result =\r\n                _STD _Remove_copy_vectorized(_STD _To_address(_UFirst), _STD _To_address(_ULast), _Dest_ptr, _Val);\r\n\r\n            if constexpr (is_pointer_v<decltype(_UDest)>) {\r\n                _UDest = _Result;\r\n            } else {\r\n                _UDest += static_cast<_Iter_diff_t<decltype(_UDest)>>(_Result - _Dest_ptr);\r\n            }\r\n\r\n            _STD _Seek_wrapped(_Dest, _UDest);\r\n            return _Dest;\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_REMOVE_COPY ^^^\r\n\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        if (!(*_UFirst == _Val)) {\r\n            *_UDest = *_UFirst;\r\n            ++_UDest;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 remove_copy(_ExPo&&, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest, const _Ty& _Val) noexcept /* terminates */ {\r\n    // copy omitting each matching _Val\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    return _STD remove_copy(_First, _Last, _Dest, _Val);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt, class _Pr>\r\n_CONSTEXPR20 _OutIt remove_copy_if(_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred) {\r\n    // copy omitting each element satisfying _Pred\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UDest       = _STD _Get_unwrapped_unverified(_Dest);\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        if (!_Pred(*_UFirst)) {\r\n            *_UDest = *_UFirst;\r\n            ++_UDest;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 remove_copy_if(_ExPo&&, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest, _Pr _Pred) noexcept /* terminates */ {\r\n    // copy omitting each element satisfying _Pred\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    return _STD remove_copy_if(_First, _Last, _Dest, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD_REMOVE_ALG _FwdIt remove(_ExPo&& _Exec, _FwdIt _First, _FwdIt _Last, const _Ty& _Val) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD_REMOVE_ALG _FwdIt remove_if(_ExPo&& _Exec, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Remove_fn {\r\n    public:\r\n        template <permutable _It, sentinel_for<_It> _Se, class _Ty, class _Pj = identity>\r\n            requires indirect_binary_predicate<ranges::equal_to, projected<_It, _Pj>, const _Ty*>\r\n        _NODISCARD_REMOVE_ALG static constexpr subrange<_It> operator()(\r\n            _It _First, _Se _Last, const _Ty& _Val, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _Remove_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _Val, _STD _Pass_fn(_Proj));\r\n\r\n            return _RANGES _Rewrap_subrange<subrange<_It>>(_First, _STD move(_UResult));\r\n        }\r\n\r\n        template <forward_range _Rng, class _Ty, class _Pj = identity>\r\n            requires permutable<iterator_t<_Rng>>\r\n                  && indirect_binary_predicate<ranges::equal_to, projected<iterator_t<_Rng>, _Pj>, const _Ty*>\r\n        _NODISCARD_REMOVE_ALG static constexpr borrowed_subrange_t<_Rng> operator()(\r\n            _Rng&& _Range, const _Ty& _Val, _Pj _Proj = {}) {\r\n            auto _UResult = _Remove_unchecked(_Ubegin(_Range), _Uend(_Range), _Val, _STD _Pass_fn(_Proj));\r\n\r\n            return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng>>(_Range, _STD move(_UResult));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Ty, class _Pj>\r\n        _NODISCARD static constexpr subrange<_It> _Remove_unchecked(\r\n            _It _First, const _Se _Last, const _Ty& _Val, _Pj _Proj) {\r\n            // Remove projected values equal to _Val from [_First, _Last)\r\n            _STL_INTERNAL_STATIC_ASSERT(permutable<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_binary_predicate<ranges::equal_to, projected<_It, _Pj>, const _Ty*>);\r\n\r\n            _First     = _RANGES _Find_unchecked(_STD move(_First), _Last, _Val, _Proj);\r\n            auto _Next = _First;\r\n            if (_First == _Last) {\r\n                return {_STD move(_Next), _STD move(_First)};\r\n            }\r\n\r\n#if _VECTORIZED_REMOVE\r\n            if constexpr (_Vector_alg_in_find_is_safe<_It, _Ty> && sized_sentinel_for<_Se, _It>\r\n                          && is_same_v<_Pj, identity>) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    const auto _Size      = _Last - _First;\r\n                    const auto _First_ptr = _STD to_address(_First);\r\n                    const auto _Last_ptr  = _STD to_address(_First + _Size);\r\n                    const auto _Result    = _STD _Remove_vectorized(_First_ptr, _Last_ptr, _Val);\r\n\r\n                    if constexpr (is_pointer_v<_It>) {\r\n                        return {_Result, _Last_ptr};\r\n                    } else {\r\n                        return {_First + static_cast<iter_difference_t<_It>>(_Result - _First_ptr), _First + _Size};\r\n                    }\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_REMOVE ^^^\r\n\r\n            while (++_First != _Last) {\r\n                if (_STD invoke(_Proj, *_First) != _Val) {\r\n                    *_Next = _RANGES iter_move(_First);\r\n                    ++_Next;\r\n                }\r\n            }\r\n\r\n            return {_STD move(_Next), _STD move(_First)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Remove_fn remove;\r\n\r\n    class _Remove_if_fn {\r\n    public:\r\n        template <permutable _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n        _NODISCARD_REMOVE_ALG static constexpr subrange<_It> operator()(\r\n            _It _First, _Se _Last, _Pr _Pred, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _Remove_if_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n\r\n            return _RANGES _Rewrap_subrange<subrange<_It>>(_First, _STD move(_UResult));\r\n        }\r\n\r\n        template <forward_range _Rng, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n            requires permutable<iterator_t<_Rng>>\r\n        _NODISCARD_REMOVE_ALG static constexpr borrowed_subrange_t<_Rng> operator()(\r\n            _Rng&& _Range, _Pr _Pred, _Pj _Proj = {}) {\r\n            auto _UResult =\r\n                _Remove_if_unchecked(_Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n\r\n            return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng>>(_Range, _STD move(_UResult));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Pr, class _Pj>\r\n        _NODISCARD static constexpr subrange<_It> _Remove_if_unchecked(\r\n            _It _First, const _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n            // Remove values whose projection satisfies _Pred from [_First, _Last)\r\n            _STL_INTERNAL_STATIC_ASSERT(permutable<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n\r\n            _First     = _RANGES _Find_if_unchecked(_STD move(_First), _Last, _Pred, _Proj);\r\n            auto _Next = _First;\r\n            if (_First == _Last) {\r\n                return {_STD move(_Next), _STD move(_First)};\r\n            }\r\n\r\n            while (++_First != _Last) {\r\n                if (!_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                    *_Next = _RANGES iter_move(_First);\r\n                    ++_Next;\r\n                }\r\n            }\r\n\r\n            return {_STD move(_Next), _STD move(_First)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Remove_if_fn remove_if;\r\n\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using remove_copy_result = in_out_result<_In, _Out>;\r\n\r\n    class _Remove_copy_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, weakly_incrementable _Out, class _Ty, class _Pj = identity>\r\n            requires indirectly_copyable<_It, _Out>\r\n                  && indirect_binary_predicate<ranges::equal_to, projected<_It, _Pj>, const _Ty*>\r\n        static constexpr remove_copy_result<_It, _Out> operator()(\r\n            _It _First, _Se _Last, _Out _Output, const _Ty& _Val, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _Remove_copy_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Get_unwrapped_unverified(_STD move(_Output)), _Val,\r\n                _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n        template <input_range _Rng, weakly_incrementable _Out, class _Ty, class _Pj = identity>\r\n            requires indirectly_copyable<iterator_t<_Rng>, _Out>\r\n                  && indirect_binary_predicate<ranges::equal_to, projected<iterator_t<_Rng>, _Pj>, const _Ty*>\r\n        static constexpr remove_copy_result<borrowed_iterator_t<_Rng>, _Out> operator()(\r\n            _Rng&& _Range, _Out _Output, const _Ty& _Val, _Pj _Proj = {}) {\r\n            auto _First   = _RANGES begin(_Range);\r\n            auto _UResult = _Remove_copy_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range),\r\n                _STD _Get_unwrapped_unverified(_STD move(_Output)), _Val, _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Out, class _Ty, class _Pj>\r\n        _NODISCARD static constexpr remove_copy_result<_It, _Out> _Remove_copy_unchecked(\r\n            _It _First, const _Se _Last, _Out _Output, const _Ty& _Val, _Pj _Proj) {\r\n            // Copy [_First, _Last) to _Output except projected values equal to _Val\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(weakly_incrementable<_Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_copyable<_It, _Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_binary_predicate<ranges::equal_to, projected<_It, _Pj>, const _Ty*>);\r\n\r\n#if _VECTORIZED_REMOVE_COPY\r\n            if constexpr (_Vector_alg_in_find_is_safe<_It, _Ty> && _Output_iterator_for_vector_alg_is_safe<_Out, _It>()\r\n                          && sized_sentinel_for<_Se, _It> && is_same_v<_Pj, identity>) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    const auto _Size = _Last - _First;\r\n                    auto _End        = _First + _Size;\r\n\r\n                    if (!_STD _Could_compare_equal_to_value_type<_It>(_Val)) {\r\n                        _Output = _STD _Copy_unchecked(_First, _Last, _Output);\r\n                        return {_STD move(_End), _STD move(_Output)};\r\n                    }\r\n\r\n                    const auto _Dest_ptr = _STD to_address(_Output);\r\n                    const auto _Result =\r\n                        _STD _Remove_copy_vectorized(_STD to_address(_First), _STD to_address(_End), _Dest_ptr, _Val);\r\n\r\n                    if constexpr (is_pointer_v<_Out>) {\r\n                        return {_STD move(_End), _Result};\r\n                    } else {\r\n                        return {_STD move(_End),\r\n                            _STD move(_Output) + static_cast<iter_difference_t<_Out>>(_Result - _Dest_ptr)};\r\n                    }\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_REMOVE_COPY ^^^\r\n\r\n            for (; _First != _Last; ++_First) {\r\n                if (_STD invoke(_Proj, *_First) != _Val) {\r\n                    *_Output = *_First;\r\n                    ++_Output;\r\n                }\r\n            }\r\n\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Remove_copy_fn remove_copy;\r\n\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using remove_copy_if_result = in_out_result<_In, _Out>;\r\n\r\n    class _Remove_copy_if_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, weakly_incrementable _Out, class _Pj = identity,\r\n            indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n            requires indirectly_copyable<_It, _Out>\r\n        static constexpr remove_copy_if_result<_It, _Out> operator()(\r\n            _It _First, _Se _Last, _Out _Output, _Pr _Pred, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _Remove_copy_if_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Get_unwrapped_unverified(_STD move(_Output)),\r\n                _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n        template <input_range _Rng, weakly_incrementable _Out, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n            requires indirectly_copyable<iterator_t<_Rng>, _Out>\r\n        static constexpr remove_copy_if_result<borrowed_iterator_t<_Rng>, _Out> operator()(\r\n            _Rng&& _Range, _Out _Output, _Pr _Pred, _Pj _Proj = {}) {\r\n            auto _First = _RANGES begin(_Range);\r\n            auto _UResult =\r\n                _Remove_copy_if_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range),\r\n                    _STD _Get_unwrapped_unverified(_STD move(_Output)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Out, class _Pr, class _Pj>\r\n        _NODISCARD static constexpr remove_copy_if_result<_It, _Out> _Remove_copy_if_unchecked(\r\n            _It _First, const _Se _Last, _Out _Output, _Pr _Pred, _Pj _Proj) {\r\n            // Copy [_First, _Last) to _Output except projected values that satisfy _Pred\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(weakly_incrementable<_Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_copyable<_It, _Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n\r\n            for (; _First != _Last; ++_First) {\r\n                if (!_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                    *_Output = *_First;\r\n                    ++_Output;\r\n                }\r\n            }\r\n\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Remove_copy_if_fn remove_copy_if;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Pr>\r\n_NODISCARD_UNIQUE_ALG _CONSTEXPR20 _FwdIt unique(_FwdIt _First, _FwdIt _Last, _Pr _Pred) {\r\n    // remove each satisfying _Pred with previous\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n\r\n#if _VECTORIZED_UNIQUE\r\n    if constexpr (_Vector_alg_in_unique_is_safe<decltype(_UFirst), _Pr>) {\r\n        if (!_STD _Is_constant_evaluated()) {\r\n            const auto _First_ptr = _STD _To_address(_UFirst);\r\n            const auto _Result    = _STD _Unique_vectorized(_First_ptr, _STD _To_address(_ULast));\r\n\r\n            if constexpr (is_pointer_v<decltype(_UFirst)>) {\r\n                _UFirst = _Result;\r\n            } else {\r\n                _UFirst += static_cast<_Iter_diff_t<decltype(_UFirst)>>(_Result - _First_ptr);\r\n            }\r\n\r\n            _STD _Seek_wrapped(_Last, _UFirst);\r\n            return _Last;\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_UNIQUE ^^^\r\n\r\n    if (_UFirst != _ULast) {\r\n        for (auto _UFirstb = _UFirst; ++_UFirst != _ULast; _UFirstb = _UFirst) {\r\n            if (_Pred(*_UFirstb, *_UFirst)) { // copy down\r\n                while (++_UFirst != _ULast) {\r\n                    if (!_Pred(*_UFirstb, *_UFirst)) {\r\n                        *++_UFirstb = _STD move(*_UFirst);\r\n                    }\r\n                }\r\n\r\n                _STD _Seek_wrapped(_Last, ++_UFirstb);\r\n                return _Last;\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Last, _ULast);\r\n    return _Last;\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt>\r\n_NODISCARD_UNIQUE_ALG _CONSTEXPR20 _FwdIt unique(_FwdIt _First, _FwdIt _Last) { // remove each matching previous\r\n    return _STD unique(_First, _Last, equal_to<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD_UNIQUE_ALG _FwdIt unique(_ExPo&&, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // remove each satisfying _Pred with previous\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt);\r\n    return _STD unique(_First, _Last, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD_UNIQUE_ALG _FwdIt unique(_ExPo&&, _FwdIt _First, _FwdIt _Last) noexcept /* terminates */ {\r\n    // remove each matching previous\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt);\r\n    return _STD unique(_First, _Last);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Unique_fn {\r\n    public:\r\n        template <permutable _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_equivalence_relation<projected<_It, _Pj>> _Pr = ranges::equal_to>\r\n        _NODISCARD_UNIQUE_ALG static constexpr subrange<_It> operator()(\r\n            _It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _Unique_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n\r\n            return _RANGES _Rewrap_subrange<subrange<_It>>(_First, _STD move(_UResult));\r\n        }\r\n\r\n        template <forward_range _Rng, class _Pj = identity,\r\n            indirect_equivalence_relation<projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::equal_to>\r\n            requires permutable<iterator_t<_Rng>>\r\n        _NODISCARD_UNIQUE_ALG static constexpr borrowed_subrange_t<_Rng> operator()(\r\n            _Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            auto _UResult =\r\n                _Unique_unchecked(_Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n\r\n            return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng>>(_Range, _STD move(_UResult));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Pj, class _Pr>\r\n        _NODISCARD static constexpr subrange<_It> _Unique_unchecked(_It _First, const _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n            // Remove adjacent elements from [_First, _Last) whose projections satisfy _Pred\r\n            _STL_INTERNAL_STATIC_ASSERT(permutable<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_equivalence_relation<_Pr, projected<_It, _Pj>>);\r\n\r\n#if _VECTORIZED_UNIQUE\r\n            if constexpr (is_same_v<_Pj, identity> && sized_sentinel_for<_Se, _It>\r\n                          && _Vector_alg_in_unique_is_safe<_It, _Pr>) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    const auto _Size      = _Last - _First;\r\n                    const auto _First_ptr = _STD to_address(_First);\r\n                    const auto _Last_ptr  = _STD to_address(_First + _Size);\r\n                    const auto _Result    = _STD _Unique_vectorized(_First_ptr, _Last_ptr);\r\n\r\n                    if constexpr (is_pointer_v<_It>) {\r\n                        return {_Result, _Last_ptr};\r\n                    } else {\r\n                        return {_First + static_cast<iter_difference_t<_It>>(_Result - _First_ptr), _First + _Size};\r\n                    }\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_UNIQUE ^^^\r\n\r\n            auto _Current = _First;\r\n            if (_First == _Last) {\r\n                return {_STD move(_Current), _STD move(_First)};\r\n            }\r\n\r\n            for (;; ++_Current) {\r\n                if (++_First == _Last) {\r\n                    ++_Current;\r\n                    return {_STD move(_Current), _STD move(_First)};\r\n                }\r\n\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_Current), _STD invoke(_Proj, *_First))) {\r\n                    break;\r\n                }\r\n            }\r\n\r\n            while (++_First != _Last) {\r\n                if (!_STD invoke(_Pred, _STD invoke(_Proj, *_Current), _STD invoke(_Proj, *_First))) {\r\n                    ++_Current;\r\n                    *_Current = _RANGES iter_move(_First);\r\n                }\r\n            }\r\n            ++_Current;\r\n\r\n            return {_STD move(_Current), _STD move(_First)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Unique_fn unique;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _InIt, class _OutIt>\r\n#if _HAS_CXX20\r\nconcept\r\n#else\r\nconstexpr bool\r\n#endif\r\n    _Can_reread_dest = _Is_cpp17_fwd_iter_v<_OutIt> && is_same_v<_Iter_value_t<_InIt>, _Iter_value_t<_OutIt>>;\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt, class _Pr>\r\n_CONSTEXPR20 _OutIt unique_copy(_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred) {\r\n    // copy compressing pairs that match\r\n    _STD _Adl_verify_range(_First, _Last);\r\n\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n\r\n    if (_UFirst == _ULast) {\r\n        return _Dest;\r\n    }\r\n\r\n    auto _UDest = _STD _Get_unwrapped_unverified(_Dest);\r\n\r\n#if _VECTORIZED_UNIQUE_COPY\r\n    if constexpr (_Vector_alg_in_unique_is_safe<decltype(_UFirst), _Pr>\r\n                  && _Output_iterator_for_vector_alg_is_safe<decltype(_UDest), decltype(_UFirst)>()) {\r\n        if (!_STD _Is_constant_evaluated()) {\r\n            const auto _First_ptr = _STD _To_address(_UFirst);\r\n            const auto _Dest_ptr  = _STD _To_address(_UDest);\r\n            const auto _Result    = _STD _Unique_copy_vectorized(_First_ptr, _STD _To_address(_ULast), _Dest_ptr);\r\n\r\n            if constexpr (is_pointer_v<decltype(_UDest)>) {\r\n                _UDest = _Result;\r\n            } else {\r\n                _UDest += static_cast<_Iter_diff_t<decltype(_UDest)>>(_Result - _Dest_ptr);\r\n            }\r\n\r\n            _STD _Seek_wrapped(_Dest, _UDest);\r\n            return _Dest;\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_UNIQUE_COPY ^^^\r\n\r\n    if constexpr (_Is_ranges_fwd_iter_v<_InIt>) { // can reread the source for comparison\r\n        auto _Firstb = _UFirst;\r\n\r\n        *_UDest = *_Firstb;\r\n        ++_UDest;\r\n\r\n        while (++_UFirst != _ULast) {\r\n            if (!static_cast<bool>(_Pred(*_Firstb, *_UFirst))) { // copy unmatched\r\n                _Firstb = _UFirst;\r\n                *_UDest = *_Firstb;\r\n                ++_UDest;\r\n            }\r\n        }\r\n    } else if constexpr (_Can_reread_dest<_InIt, _OutIt>) { // assignment copies T; can reread dest for comparison\r\n        *_UDest = *_UFirst;\r\n\r\n        while (++_UFirst != _ULast) {\r\n            if (!static_cast<bool>(_Pred(*_UDest, *_UFirst))) {\r\n                *++_UDest = *_UFirst;\r\n            }\r\n        }\r\n\r\n        ++_UDest;\r\n    } else { // can't reread source or dest, construct a temporary\r\n        _Iter_value_t<_InIt> _Val(*_UFirst);\r\n\r\n        *_UDest = _Val;\r\n        ++_UDest;\r\n\r\n        while (++_UFirst != _ULast) {\r\n            if (!static_cast<bool>(_Pred(_Val, *_UFirst))) { // copy unmatched\r\n                _Val    = *_UFirst;\r\n                *_UDest = _Val;\r\n                ++_UDest;\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt>\r\n_CONSTEXPR20 _OutIt unique_copy(_InIt _First, _InIt _Last, _OutIt _Dest) { // copy compressing pairs that match\r\n    return _STD unique_copy(_First, _Last, _Dest, equal_to<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 unique_copy(_ExPo&&, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest, _Pr _Pred) noexcept /* terminates */ {\r\n    // copy compressing pairs that match\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    return _STD unique_copy(_First, _Last, _Dest, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 unique_copy(_ExPo&&, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest) noexcept /* terminates */ {\r\n    // copy compressing pairs that match\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    return _STD unique_copy(_First, _Last, _Dest);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using unique_copy_result = in_out_result<_In, _Out>;\r\n\r\n    template <class _It, class _Ty>\r\n    concept _Is_input_with_value_type = input_iterator<_It> && same_as<iter_value_t<_It>, _Ty>;\r\n\r\n    template <class _It, class _Out>\r\n    concept _Can_reread_or_store = forward_iterator<_It> || _Is_input_with_value_type<_Out, iter_value_t<_It>>\r\n                                || indirectly_copyable_storable<_It, _Out>;\r\n\r\n    class _Unique_copy_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, weakly_incrementable _Out, class _Pj = identity,\r\n            indirect_equivalence_relation<projected<_It, _Pj>> _Pr = ranges::equal_to>\r\n            requires indirectly_copyable<_It, _Out> && _Can_reread_or_store<_It, _Out>\r\n        static constexpr unique_copy_result<_It, _Out> operator()(\r\n            _It _First, _Se _Last, _Out _Output, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _Unique_copy_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Get_unwrapped_unverified(_STD move(_Output)),\r\n                _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n        template <input_range _Rng, weakly_incrementable _Out, class _Pj = identity,\r\n            indirect_equivalence_relation<projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::equal_to>\r\n            requires indirectly_copyable<iterator_t<_Rng>, _Out> && _Can_reread_or_store<iterator_t<_Rng>, _Out>\r\n        static constexpr unique_copy_result<borrowed_iterator_t<_Rng>, _Out> operator()(\r\n            _Rng&& _Range, _Out _Output, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            auto _First   = _RANGES begin(_Range);\r\n            auto _UResult = _Unique_copy_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range),\r\n                _STD _Get_unwrapped_unverified(_STD move(_Output)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Out, class _Pj, class _Pr>\r\n        _NODISCARD static constexpr unique_copy_result<_It, _Out> _Unique_copy_unchecked(\r\n            _It _First, const _Se _Last, _Out _Output, _Pr _Pred, _Pj _Proj) {\r\n            // Copy elements from [_First, _Last) to _Output, compressing adjacent elements whose projections satisfy\r\n            // _Pred\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(weakly_incrementable<_Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_equivalence_relation<_Pr, projected<_It, _Pj>>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_copyable<_It, _Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(_Can_reread_or_store<_It, _Out>);\r\n\r\n            if (_First == _Last) {\r\n                return {_STD move(_First), _STD move(_Output)};\r\n            }\r\n\r\n#if _VECTORIZED_UNIQUE_COPY\r\n            if constexpr (is_same_v<_Pj, identity> && sized_sentinel_for<_Se, _It>\r\n                          && _Vector_alg_in_unique_is_safe<_It, _Pr>\r\n                          && _Output_iterator_for_vector_alg_is_safe<_Out, _It>()) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    const auto _Size       = _Last - _First;\r\n                    const auto _First_ptr  = _STD to_address(_First);\r\n                    const auto _Last_ptr   = _STD to_address(_First + _Size);\r\n                    const auto _Output_ptr = _STD to_address(_Output);\r\n                    const auto _Result     = _STD _Unique_copy_vectorized(_First_ptr, _Last_ptr, _Output_ptr);\r\n\r\n                    if constexpr (is_pointer_v<_It> && is_pointer_v<_Out>) {\r\n                        return {_Last_ptr, _Result};\r\n                    } else {\r\n                        return {_STD move(_First) + _Size,\r\n                            _STD move(_Output) + static_cast<iter_difference_t<_Out>>(_Result - _Output_ptr)};\r\n                    }\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_UNIQUE_COPY ^^^\r\n\r\n            if constexpr (_Is_input_with_value_type<_Out, iter_value_t<_It>>) {\r\n                // Can reread _Output\r\n                *_Output = *_First;\r\n\r\n                while (++_First != _Last) {\r\n                    if (!_STD invoke(_Pred, _STD invoke(_Proj, *_Output), _STD invoke(_Proj, *_First))) {\r\n                        ++_Output;\r\n                        *_Output = *_First;\r\n                    }\r\n                }\r\n            } else if constexpr (forward_iterator<_It>) {\r\n                // Can reread _First\r\n                auto _Current = _First;\r\n                *_Output      = *_First;\r\n\r\n                while (++_First != _Last) {\r\n                    if (!_STD invoke(_Pred, _STD invoke(_Proj, *_Current), _STD invoke(_Proj, *_First))) {\r\n                        _Current = _First;\r\n                        ++_Output;\r\n                        *_Output = *_First;\r\n                    }\r\n                }\r\n            } else {\r\n                // Neither _First nor _Output can be reread, construct temporary\r\n                iter_value_t<_It> _Val(*_First);\r\n\r\n                while (++_First != _Last) {\r\n                    if (!_STD invoke(_Pred, _STD invoke(_Proj, _Val), _STD invoke(_Proj, *_First))) {\r\n                        *_Output = _STD move(_Val);\r\n                        ++_Output;\r\n                        _Val = *_First;\r\n                    }\r\n                }\r\n                *_Output = _STD move(_Val);\r\n            }\r\n            ++_Output;\r\n\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Unique_copy_fn unique_copy;\r\n\r\n    // concept-constrained for strict enforcement as it is used by several algorithms\r\n    template <bidirectional_iterator _It>\r\n        requires permutable<_It>\r\n    constexpr void _Reverse_common(_It _First, _It _Last) {\r\n#if _VECTORIZED_REVERSE\r\n        if constexpr (contiguous_iterator<_It>) {\r\n            using _Elem          = remove_reference_t<iter_reference_t<_It>>;\r\n            constexpr size_t _Nx = sizeof(_Elem);\r\n            constexpr bool _Allow_vectorization =\r\n                conjunction_v<_Is_trivially_ranges_swappable<_Elem>, negation<is_volatile<_Elem>>>;\r\n\r\n            if constexpr (_Allow_vectorization && _Nx <= 8 && (_Nx & (_Nx - 1)) == 0) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    _STD _Reverse_vectorized<_Nx>(_STD to_address(_First), _STD to_address(_Last));\r\n                    return;\r\n                }\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_REVERSE ^^^\r\n\r\n        for (; _First != _Last && _First != --_Last; ++_First) {\r\n            _RANGES iter_swap(_First, _Last);\r\n        }\r\n    }\r\n\r\n    struct _Reverse_fn {\r\n        template <bidirectional_iterator _It, sentinel_for<_It> _Se>\r\n            requires permutable<_It>\r\n        static constexpr _It operator()(_It _First, _Se _Last) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast  = _RANGES _Get_final_iterator_unwrapped<_It>(_UFirst, _STD move(_Last));\r\n            _STD _Seek_wrapped(_First, _ULast);\r\n            _RANGES _Reverse_common(_STD move(_UFirst), _STD move(_ULast));\r\n            return _First;\r\n        }\r\n\r\n        template <bidirectional_range _Rng>\r\n            requires permutable<iterator_t<_Rng>>\r\n        static constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range) {\r\n            auto _ULast = _RANGES _Get_final_iterator_unwrapped(_Range);\r\n            _RANGES _Reverse_common(_Ubegin(_Range), _ULast);\r\n            return _RANGES _Rewrap_iterator(_Range, _STD move(_ULast));\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Reverse_fn reverse;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Ty>\r\nstruct _Is_trivially_copy_assignable_returning_same_reference\r\n    : bool_constant<_Is_trivially_assignable_returning_same_reference_v<_Ty&, const _Ty&>> {};\r\n\r\n_EXPORT_STD template <class _BidIt, class _OutIt>\r\n_CONSTEXPR20 _OutIt reverse_copy(_BidIt _First, _BidIt _Last, _OutIt _Dest) {\r\n    // copy reversing elements in [_First, _Last)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    _STD _Verify_ranges_do_not_overlap(_First, _Last, _Dest);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    auto _ULast        = _STD _Get_unwrapped(_Last);\r\n    auto _UDest        = _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_BidIt>(_UFirst, _ULast));\r\n\r\n#if _VECTORIZED_REVERSE_COPY\r\n    using _Elem                         = remove_reference_t<_Iter_ref_t<remove_const_t<decltype(_UFirst)>>>;\r\n    using _DestElem                     = remove_reference_t<_Iter_ref_t<decltype(_UDest)>>;\r\n    constexpr bool _Allow_vectorization = conjunction_v<is_same<remove_const_t<_Elem>, _DestElem>,\r\n        bool_constant<_Iterators_are_contiguous<decltype(_ULast), decltype(_UDest)>>,\r\n        _Is_trivially_copy_assignable_returning_same_reference<_Elem>, negation<is_volatile<_Elem>>>;\r\n    constexpr size_t _Nx                = sizeof(_Elem);\r\n\r\n    if constexpr (_Allow_vectorization && _Nx <= 8 && (_Nx & (_Nx - 1)) == 0) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            const auto _Dest_dist = static_cast<_Iter_diff_t<decltype(_UDest)>>(_ULast - _UFirst);\r\n            _STD _Contiguous_iter_verify(_UDest, _Dest_dist);\r\n\r\n            _STD _Reverse_copy_vectorized<_Nx>(\r\n                _STD _To_address(_UFirst), _STD _To_address(_ULast), _STD _To_address(_UDest));\r\n            _UDest += _Dest_dist;\r\n            _STD _Seek_wrapped(_Dest, _UDest);\r\n            return _Dest;\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_REVERSE_COPY ^^^\r\n\r\n    for (; _UFirst != _ULast; ++_UDest) {\r\n        *_UDest = *--_ULast;\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _BidIt, class _FwdIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt reverse_copy(_ExPo&&, _BidIt _First, _BidIt _Last, _FwdIt _Dest) noexcept /* terminates */ {\r\n    // copy reversing elements in [_First, _Last)\r\n    // not parallelized as benchmarks show it isn't worth it\r\n    _REQUIRE_BIDIRECTIONAL_ITERATOR(_BidIt);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt);\r\n    return _STD reverse_copy(_First, _Last, _Dest);\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using reverse_copy_result = in_out_result<_In, _Out>;\r\n\r\n    class _Reverse_copy_fn {\r\n    public:\r\n        template <bidirectional_iterator _It, sentinel_for<_It> _Se, weakly_incrementable _Out>\r\n            requires indirectly_copyable<_It, _Out>\r\n        static constexpr reverse_copy_result<_It, _Out> operator()(_It _First, _Se _Last, _Out _Output) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast  = _RANGES _Get_final_iterator_unwrapped<_It>(_UFirst, _STD move(_Last));\r\n            _STD _Seek_wrapped(_First, _ULast);\r\n            const auto _Count = _RANGES _Idl_distance<_It>(_UFirst, _ULast);\r\n            auto _UOutput     = _Reverse_copy_common(\r\n                _STD move(_UFirst), _STD move(_ULast), _STD _Get_unwrapped_n(_STD move(_Output), _Count));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UOutput));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n        template <bidirectional_range _Rng, weakly_incrementable _Out>\r\n            requires indirectly_copyable<iterator_t<_Rng>, _Out>\r\n        static constexpr reverse_copy_result<borrowed_iterator_t<_Rng>, _Out> operator()(_Rng&& _Range, _Out _Output) {\r\n            const auto _Count = _RANGES _Idl_distance(_Range);\r\n            auto _UOutput     = _STD _Get_unwrapped_n(_STD move(_Output), _Count);\r\n            if constexpr (common_range<_Rng>) {\r\n                _UOutput = _Reverse_copy_common(_Ubegin(_Range), _Uend(_Range), _STD move(_UOutput));\r\n                _STD _Seek_wrapped(_Output, _STD move(_UOutput));\r\n                return {_RANGES end(_Range), _STD move(_Output)};\r\n            } else {\r\n                auto _ULast = _RANGES _Get_final_iterator_unwrapped(_Range);\r\n                _UOutput    = _Reverse_copy_common(_Ubegin(_Range), _ULast, _STD move(_UOutput));\r\n                _STD _Seek_wrapped(_Output, _STD move(_UOutput));\r\n                return {_RANGES _Rewrap_iterator(_Range, _STD move(_ULast)), _STD move(_Output)};\r\n            }\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Out>\r\n        _NODISCARD static constexpr _Out _Reverse_copy_common(const _It _First, _It _Last, _Out _Output) {\r\n            _STL_INTERNAL_STATIC_ASSERT(bidirectional_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(weakly_incrementable<_Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_copyable<_It, _Out>);\r\n\r\n            _STD _Verify_ranges_do_not_overlap(_First, _Last, _Output);\r\n\r\n#if _VECTORIZED_REVERSE_COPY\r\n            if constexpr (contiguous_iterator<_It> && contiguous_iterator<_Out>) {\r\n                using _Elem                         = remove_reference_t<iter_reference_t<_It>>;\r\n                using _DestElem                     = remove_reference_t<iter_reference_t<_Out>>;\r\n                constexpr bool _Allow_vectorization = conjunction_v<is_same<remove_const_t<_Elem>, _DestElem>,\r\n                    _Is_trivially_copy_assignable_returning_same_reference<_Elem>, negation<is_volatile<_Elem>>>;\r\n                constexpr size_t _Nx                = sizeof(_Elem);\r\n\r\n                if constexpr (_Allow_vectorization && _Nx <= 8 && (_Nx & (_Nx - 1)) == 0) {\r\n                    if (!_STD is_constant_evaluated()) {\r\n                        const auto _Dest_dist = static_cast<iter_difference_t<_Out>>(_Last - _First);\r\n                        _STD _Contiguous_iter_verify(_Output, _Dest_dist);\r\n                        _STD _Reverse_copy_vectorized<_Nx>(\r\n                            _STD to_address(_First), _STD to_address(_Last), _STD to_address(_Output));\r\n                        _Output += _Dest_dist;\r\n                        return _Output;\r\n                    }\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_REVERSE_COPY ^^^\r\n\r\n            for (; _First != _Last; ++_Output) {\r\n                *_Output = *--_Last;\r\n            }\r\n\r\n            return _Output;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Reverse_copy_fn reverse_copy;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <permutable _It>\r\n    _NODISCARD constexpr subrange<_It> _Reverse_until_mid_unchecked(_It _First, const _It _Mid, _It _Last) {\r\n        // reverse until either _First or _Last hits _Mid\r\n        _STL_INTERNAL_CHECK(_First != _Mid);\r\n        _STL_INTERNAL_CHECK(_Mid != _Last);\r\n\r\n        do {\r\n            _RANGES iter_swap(_First, --_Last);\r\n        } while (++_First != _Mid && _Last != _Mid);\r\n\r\n        return {_STD move(_First), _STD move(_Last)};\r\n    }\r\n\r\n    template <permutable _It, sentinel_for<_It> _Se>\r\n    _NODISCARD constexpr subrange<_It> _Rotate_unchecked(_It _First, _It _Mid, _Se _Last) {\r\n        // Exchange the ranges [_First, _Mid) and [_Mid, _Last)\r\n        // that is, rotates [_First, _Last) left by distance(_First, _Mid) positions\r\n\r\n        if (_First == _Mid) {\r\n            auto _Final = _RANGES _Get_final_iterator_unwrapped<_It>(_Mid, _STD move(_Last));\r\n            return {_Final, _Final};\r\n        }\r\n\r\n        if (_Mid == _Last) {\r\n            return {_STD move(_First), _STD move(_Mid)};\r\n        }\r\n\r\n        if constexpr (bidirectional_iterator<_It>) {\r\n#if _VECTORIZED_ROTATE\r\n            using _Elem = remove_reference_t<iter_reference_t<_It>>;\r\n\r\n            if constexpr (contiguous_iterator<_It> && sized_sentinel_for<_Se, _It>\r\n                          && conjunction_v<_Is_trivially_ranges_swappable<_Elem>, negation<is_volatile<_Elem>>>) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    const _It _Last_it = _First + (_Last - _First);\r\n                    ::__std_rotate(_STD to_address(_First), _STD to_address(_Mid), _STD to_address(_Last_it));\r\n                    return {_First + (_Last - _Mid), _Last};\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_ROTATE ^^^\r\n\r\n            _RANGES _Reverse_common(_First, _Mid);\r\n            auto _Final = _RANGES _Get_final_iterator_unwrapped<_It>(_Mid, _STD move(_Last));\r\n            _RANGES _Reverse_common(_Mid, _Final);\r\n\r\n            if constexpr (random_access_iterator<_It>) {\r\n                _RANGES _Reverse_common(_First, _Final);\r\n                _First += _Final - _Mid;\r\n\r\n                return {_STD move(_First), _STD move(_Final)};\r\n            } else {\r\n                const auto _Result = _RANGES _Reverse_until_mid_unchecked(_STD move(_First), _Mid, _Final);\r\n                auto _Mid_first    = _Result.begin();\r\n                auto _Mid_last     = _Result.end();\r\n                _RANGES _Reverse_common(_Mid_first, _Mid_last);\r\n\r\n                if (_Mid_first == _Mid) {\r\n                    return {_STD move(_Mid_last), _STD move(_Final)};\r\n                } else {\r\n                    return {_STD move(_Mid_first), _STD move(_Final)};\r\n                }\r\n            }\r\n        } else {\r\n            auto _Next = _Mid;\r\n            do { // rotate the first cycle\r\n                _RANGES iter_swap(_First, _Next);\r\n                ++_First;\r\n                ++_Next;\r\n                if (_First == _Mid) {\r\n                    _Mid = _Next;\r\n                }\r\n            } while (_Next != _Last);\r\n\r\n            auto _Begin = _First;\r\n\r\n            while (_Mid != _Last) { // rotate subsequent cycles\r\n                _Next = _Mid;\r\n                do {\r\n                    _RANGES iter_swap(_First, _Next);\r\n                    ++_First;\r\n                    ++_Next;\r\n                    if (_First == _Mid) {\r\n                        _Mid = _Next;\r\n                    }\r\n                } while (_Next != _Last);\r\n            }\r\n            return {_STD move(_Begin), _STD move(_Mid)};\r\n        }\r\n    }\r\n\r\n    struct _Rotate_fn {\r\n        template <permutable _It, sentinel_for<_It> _Se>\r\n        static constexpr subrange<_It> operator()(_It _First, _It _Mid, _Se _Last) {\r\n            _STD _Adl_verify_range(_First, _Mid);\r\n            _STD _Adl_verify_range(_Mid, _Last);\r\n            auto _UResult = _RANGES _Rotate_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_iter<_Se>(_STD move(_Mid)), _RANGES _Unwrap_sent<_It>(_STD move(_Last)));\r\n\r\n            return _RANGES _Rewrap_subrange<subrange<_It>>(_First, _STD move(_UResult));\r\n        }\r\n\r\n        template <forward_range _Rng>\r\n            requires permutable<iterator_t<_Rng>>\r\n        static constexpr borrowed_subrange_t<_Rng> operator()(_Rng&& _Range, iterator_t<_Rng> _Mid) {\r\n            _STD _Adl_verify_range(_RANGES begin(_Range), _Mid);\r\n            _STD _Adl_verify_range(_Mid, _RANGES end(_Range));\r\n            auto _UResult = _RANGES _Rotate_unchecked(\r\n                _Ubegin(_Range), _RANGES _Unwrap_range_iter<_Rng>(_STD move(_Mid)), _Uend(_Range));\r\n\r\n            return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng>>(_Mid, _STD move(_UResult));\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Rotate_fn rotate;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _FwdIt, class _OutIt>\r\n_CONSTEXPR20 _OutIt rotate_copy(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last, _OutIt _Dest) {\r\n    // copy rotating [_First, _Last)\r\n    _STD _Adl_verify_range(_First, _Mid);\r\n    _STD _Adl_verify_range(_Mid, _Last);\r\n    _STD _Verify_ranges_do_not_overlap(_First, _Last, _Dest);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _UMid   = _STD _Get_unwrapped(_Mid);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    auto _UDest        = _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_FwdIt>(_UFirst, _ULast));\r\n    _UDest             = _STD _Copy_unchecked(_UMid, _ULast, _UDest);\r\n    _STD _Seek_wrapped(_Dest, _STD _Copy_unchecked(_UFirst, _UMid, _UDest));\r\n    return _Dest;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 rotate_copy(_ExPo&&, _FwdIt1 _First, _FwdIt1 _Mid, _FwdIt1 _Last, _FwdIt2 _Dest) noexcept /* terminates */ {\r\n    // copy rotating [_First, _Last)\r\n    // not parallelized as benchmarks show it isn't worth it\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    return _STD rotate_copy(_First, _Mid, _Last, _Dest);\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using rotate_copy_result = in_out_result<_In, _Out>;\r\n\r\n    class _Rotate_copy_fn {\r\n    public:\r\n        template <forward_iterator _It, sentinel_for<_It> _Se, weakly_incrementable _Out>\r\n            requires indirectly_copyable<_It, _Out>\r\n        static constexpr rotate_copy_result<_It, _Out> operator()(_It _First, _It _Mid, _Se _Last, _Out _Output) {\r\n            _STD _Adl_verify_range(_First, _Mid);\r\n            _STD _Adl_verify_range(_Mid, _Last);\r\n            auto _UFirst      = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast       = _RANGES _Unwrap_sent<_It>(_STD move(_Last));\r\n            const auto _Count = _RANGES _Idl_distance<_It>(_UFirst, _ULast);\r\n            auto _UResult     = _Rotate_copy_common(_STD move(_UFirst), _RANGES _Unwrap_iter<_Se>(_STD move(_Mid)),\r\n                    _STD move(_ULast), _STD _Get_unwrapped_n(_STD move(_Output), _Count));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n        template <forward_range _Rng, weakly_incrementable _Out>\r\n            requires indirectly_copyable<iterator_t<_Rng>, _Out>\r\n        static constexpr rotate_copy_result<borrowed_iterator_t<_Rng>, _Out> operator()(\r\n            _Rng&& _Range, iterator_t<_Rng> _Mid, _Out _Output) {\r\n            _STD _Adl_verify_range(_RANGES begin(_Range), _Mid);\r\n            _STD _Adl_verify_range(_Mid, _RANGES end(_Range));\r\n            const auto _Count = _RANGES _Idl_distance(_Range);\r\n            auto _UResult     = _Rotate_copy_common(_Ubegin(_Range), _RANGES _Unwrap_range_iter<_Rng>(_STD move(_Mid)),\r\n                    _Uend(_Range), _STD _Get_unwrapped_n(_STD move(_Output), _Count));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_RANGES _Rewrap_iterator(_Range, _STD move(_UResult.in)), _STD move(_Output)};\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Out>\r\n        _NODISCARD static constexpr rotate_copy_result<_It, _Out> _Rotate_copy_common(\r\n            _It _First, _It _Mid, _Se _Last, _Out _Output) {\r\n            // Copy the content of [_Mid, _Last) and [_First, _Mid) to _Output\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(weakly_incrementable<_Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_copyable<_It, _Out>);\r\n\r\n            _STD _Verify_ranges_do_not_overlap(_First, _Last, _Output);\r\n\r\n            auto _UResult1 = _RANGES _Copy_unchecked(_Mid, _STD move(_Last), _STD move(_Output));\r\n            auto _UResult2 = _RANGES _Copy_unchecked(_STD move(_First), _STD move(_Mid), _STD move(_UResult1.out));\r\n            return {_STD move(_UResult1.in), _STD move(_UResult2.out)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Rotate_copy_fn rotate_copy;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class _Diff, class _Urng>\r\nclass _Rng_from_urng_v2 { // wrap a URNG as an RNG\r\npublic:\r\n    using _Ty0 = make_unsigned_t<_Diff>;\r\n    using _Ty1 = _Invoke_result_t<_Urng&>;\r\n\r\n    using _Udiff                              = conditional_t<sizeof(_Ty1) < sizeof(_Ty0), _Ty0, _Ty1>;\r\n    static constexpr unsigned int _Udiff_bits = sizeof(_Udiff) * CHAR_BIT;\r\n    using _Uprod = conditional_t<_Udiff_bits <= 16, uint32_t, conditional_t<_Udiff_bits <= 32, uint64_t, _Unsigned128>>;\r\n\r\n    explicit _Rng_from_urng_v2(_Urng& _Func) noexcept : _Ref(_Func) {}\r\n\r\n    _Diff operator()(_Diff _Index) { // adapt _Urng closed range to [0, _Index)\r\n        // From Daniel Lemire, \"Fast Random Integer Generation in an Interval\",\r\n        // ACM Trans. Model. Comput. Simul. 29 (1), 2019.\r\n        //\r\n        // Algorithm 5 <-> This Code:\r\n        //   m <-> _Product\r\n        //   l <-> _Rem\r\n        //   s <-> _Index\r\n        //   t <-> _Threshold\r\n        //   L <-> _Generated_bits\r\n        //   2^L - 1 <-> _Mask\r\n\r\n        _Udiff _Mask        = _Bmask;\r\n        unsigned int _Niter = 1;\r\n\r\n        if constexpr (_Bits < _Udiff_bits) {\r\n            while (_Mask < static_cast<_Udiff>(_Index - 1)) {\r\n                _Mask <<= _Bits;\r\n                _Mask |= _Bmask;\r\n                ++_Niter;\r\n            }\r\n        }\r\n\r\n        // x <- random integer in [0, 2^L)\r\n        // m <- x * s\r\n        auto _Product = _Get_random_product(_Index, _Niter);\r\n        // l <- m mod 2^L\r\n        auto _Rem = static_cast<_Udiff>(_Product) & _Mask;\r\n\r\n        if (_Rem < static_cast<_Udiff>(_Index)) {\r\n            // t <- (2^L - s) mod s\r\n            const auto _Threshold = (_Mask - _Index + 1) % _Index;\r\n            while (_Rem < _Threshold) {\r\n                _Product = _Get_random_product(_Index, _Niter);\r\n                _Rem     = static_cast<_Udiff>(_Product) & _Mask;\r\n            }\r\n        }\r\n\r\n        unsigned int _Generated_bits;\r\n        if constexpr (_Bits < _Udiff_bits) {\r\n            _Generated_bits = static_cast<unsigned int>(_Popcount(_Mask));\r\n        } else {\r\n            _Generated_bits = _Udiff_bits;\r\n        }\r\n\r\n        // m / 2^L\r\n        return static_cast<_Diff>(_Product >> _Generated_bits);\r\n    }\r\n\r\n    _Udiff _Get_all_bits() {\r\n        _Udiff _Ret = _Get_bits();\r\n\r\n        if constexpr (_Bits < _Udiff_bits) {\r\n            for (unsigned int _Num = _Bits; _Num < _Udiff_bits; _Num += _Bits) { // don't mask away any bits\r\n                _Ret <<= _Bits;\r\n                _Ret |= _Get_bits();\r\n            }\r\n        }\r\n\r\n        return _Ret;\r\n    }\r\n\r\n    _Rng_from_urng_v2(const _Rng_from_urng_v2&)            = delete;\r\n    _Rng_from_urng_v2& operator=(const _Rng_from_urng_v2&) = delete;\r\n\r\nprivate:\r\n    _Udiff _Get_bits() { // return a random value within [0, _Bmask]\r\n        constexpr auto _Urng_min = (_Urng::min) ();\r\n        for (;;) { // repeat until random value is in range\r\n            const _Udiff _Val = static_cast<_Udiff>(_Ref() - _Urng_min);\r\n\r\n            if (_Val <= _Bmask) {\r\n                return _Val;\r\n            }\r\n        }\r\n    }\r\n\r\n    static constexpr size_t _Calc_bits() {\r\n        auto _Bits_local  = _Udiff_bits;\r\n        auto _Bmask_local = static_cast<_Udiff>(-1);\r\n        for (; static_cast<_Udiff>((_Urng::max) () - (_Urng::min) ()) < _Bmask_local; _Bmask_local >>= 1) {\r\n            --_Bits_local;\r\n        }\r\n\r\n        return _Bits_local;\r\n    }\r\n\r\n    _Uprod _Get_random_product(const _Diff _Index, unsigned int _Niter) {\r\n        _Udiff _Ret = _Get_bits();\r\n        if constexpr (_Bits < _Udiff_bits) {\r\n            while (--_Niter > 0) {\r\n                _Ret <<= _Bits;\r\n                _Ret |= _Get_bits();\r\n            }\r\n        }\r\n\r\n        if constexpr (is_same_v<_Udiff, uint64_t>) {\r\n            uint64_t _High;\r\n            const auto _Low = _Base128::_UMul128(_Ret, static_cast<_Udiff>(_Index), _High);\r\n            return _Uprod{_Low, _High};\r\n        } else {\r\n            return _Uprod{_Ret} * static_cast<_Uprod>(_Index);\r\n        }\r\n    }\r\n\r\n    _Urng& _Ref; // reference to URNG\r\n    static constexpr size_t _Bits  = _Calc_bits(); // number of random bits generated by _Get_bits()\r\n    static constexpr _Udiff _Bmask = static_cast<_Udiff>(-1) >> (_Udiff_bits - _Bits); // 2^_Bits - 1\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _PopIt, class _SampleIt, class _Diff, class _RngFn>\r\n_SampleIt _Sample_reservoir_unchecked(\r\n    _PopIt _First, const _PopIt _Last, const _SampleIt _Dest, const _Diff _Count, _RngFn& _RngFunc) {\r\n    // source is input: use reservoir sampling (unstable)\r\n    // pre: _SampleIt is random-access && 0 < _Count && the range [_Dest, _Dest + _Count) is valid\r\n    using _Diff_sample = _Iter_diff_t<_SampleIt>;\r\n    const auto _SCount = static_cast<_Diff_sample>(_Count);\r\n    _Iter_diff_t<_PopIt> _Pop_size{};\r\n    for (; _Pop_size < _SCount; ++_Pop_size, (void) ++_First) {\r\n        // _Pop_size is less than _SCount, and [_Dest, _Dest + _SCount) is valid,\r\n        // so [_Dest, _Dest + _Pop_size) must be valid, so narrowing to _Diff_sample\r\n        // can't overflow\r\n        const auto _Sample_pop = static_cast<_Diff_sample>(_Pop_size);\r\n        if (_First == _Last) {\r\n            return _Dest + _Sample_pop;\r\n        }\r\n\r\n        *(_Dest + _Sample_pop) = *_First;\r\n    }\r\n    for (; _First != _Last; ++_First) {\r\n        const auto _Idx = _RngFunc(++_Pop_size);\r\n        if (_Idx < _SCount) {\r\n            *(_Dest + static_cast<_Diff_sample>(_Idx)) = *_First; // again, valid narrowing because _Idx < _SCount\r\n        }\r\n    }\r\n    return _Dest + _SCount;\r\n}\r\n\r\ntemplate <class _PopIt, class _SampleIt, class _Diff, class _RngFn>\r\n_SampleIt _Sample_selection_unchecked(\r\n    _PopIt _First, _Iter_diff_t<_PopIt> _Pop_size, _SampleIt _Dest, _Diff _Count, _RngFn& _RngFunc) {\r\n    // source is forward *and* we know the source range size: use selection sampling (stable)\r\n    // pre: _PopIt is forward && _Count <= _Pop_size\r\n    using _CT = common_type_t<_Iter_diff_t<_PopIt>, _Diff>;\r\n    for (; _Pop_size > 0; ++_First, (void) --_Pop_size) {\r\n        if (static_cast<_CT>(_RngFunc(_Pop_size)) < static_cast<_CT>(_Count)) {\r\n            --_Count;\r\n            *_Dest = *_First;\r\n            ++_Dest;\r\n        }\r\n    }\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _PopIt, class _SampleIt, class _Diff, class _Urng>\r\n_SampleIt sample(_PopIt _First, _PopIt _Last, _SampleIt _Dest, _Diff _Count, _Urng&& _Func) {\r\n    // randomly select _Count elements from [_First, _Last) into _Dest\r\n    static_assert(_Is_ranges_fwd_iter_v<_PopIt> || _Is_cpp17_random_iter_v<_SampleIt>,\r\n        \"If the source range is not forward, the destination range must be a Cpp17RandomAccessIterator.\");\r\n\r\n    static_assert(is_integral_v<_Diff>, \"The sample size must have an integer type.\");\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    if (0 < _Count) {\r\n        auto _UFirst   = _STD _Get_unwrapped(_First);\r\n        auto _ULast    = _STD _Get_unwrapped(_Last);\r\n        using _PopDiff = _Iter_diff_t<_PopIt>;\r\n        _Rng_from_urng_v2<_PopDiff, remove_reference_t<_Urng>> _RngFunc(_Func);\r\n        if constexpr (_Is_ranges_fwd_iter_v<_PopIt>) {\r\n            // source is forward: use selection sampling (stable)\r\n            using _CT            = common_type_t<_Diff, _PopDiff>;\r\n            const auto _Pop_size = _STD distance(_UFirst, _ULast);\r\n            if (static_cast<_CT>(_Count) > static_cast<_CT>(_Pop_size)) {\r\n                _Count = static_cast<_Diff>(_Pop_size); // narrowing OK because _Count is getting smaller\r\n            }\r\n\r\n            _STD _Seek_wrapped(_Dest, _STD _Sample_selection_unchecked(\r\n                                          _UFirst, _Pop_size, _STD _Get_unwrapped_n(_Dest, _Count), _Count, _RngFunc));\r\n        } else {\r\n            static_assert(_Is_ranges_input_iter_v<_PopIt>, \"Source iterators must be at least input iterators\");\r\n            // source is input: use reservoir sampling (unstable)\r\n            _STD _Seek_wrapped(_Dest, _STD _Sample_reservoir_unchecked(\r\n                                          _UFirst, _ULast, _STD _Get_unwrapped_unverified(_Dest), _Count, _RngFunc));\r\n        }\r\n    }\r\n\r\n    return _Dest;\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty>\r\nconcept uniform_random_bit_generator = invocable<_Ty&> && unsigned_integral<invoke_result_t<_Ty&>> && requires {\r\n    { (_Ty::min)() } -> same_as<invoke_result_t<_Ty&>>;\r\n    { (_Ty::max)() } -> same_as<invoke_result_t<_Ty&>>;\r\n    requires bool_constant<(_Ty::min) () < (_Ty::max) ()>::value;\r\n};\r\n\r\nnamespace ranges {\r\n    class _Sample_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, weakly_incrementable _Out, class _Urng>\r\n            requires (forward_iterator<_It> || random_access_iterator<_Out>)\r\n                  && indirectly_copyable<_It, _Out> && uniform_random_bit_generator<remove_reference_t<_Urng>>\r\n        static _Out operator()(_It _First, _Se _Last, _Out _Output, iter_difference_t<_It> _Count, _Urng&& _Func) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            if (_Count <= 0) {\r\n                return _Output;\r\n            }\r\n\r\n            _Rng_from_urng_v2<iter_difference_t<_It>, remove_reference_t<_Urng>> _RngFunc(_Func);\r\n            if constexpr (forward_iterator<_It>) {\r\n                auto _UFirst   = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n                auto _Pop_size = _RANGES distance(_UFirst, _RANGES _Unwrap_sent<_It>(_STD move(_Last)));\r\n                return _Selection_sample(_STD move(_UFirst), _Pop_size, _STD move(_Output), _Count, _RngFunc);\r\n            } else {\r\n                return _Reservoir_sample(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                    _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD move(_Output), _Count, _RngFunc);\r\n            }\r\n        }\r\n\r\n        template <input_range _Rng, weakly_incrementable _Out, class _Urng>\r\n            requires (forward_range<_Rng> || random_access_iterator<_Out>)\r\n                  && indirectly_copyable<iterator_t<_Rng>, _Out>\r\n                  && uniform_random_bit_generator<remove_reference_t<_Urng>>\r\n        static _Out operator()(_Rng&& _Range, _Out _Output, range_difference_t<_Rng> _Count, _Urng&& _Func) {\r\n            if (_Count <= 0) {\r\n                return _Output;\r\n            }\r\n\r\n            _Rng_from_urng_v2<range_difference_t<_Rng>, remove_reference_t<_Urng>> _RngFunc(_Func);\r\n            if constexpr (forward_range<_Rng>) {\r\n                auto _UFirst   = _Ubegin(_Range);\r\n                auto _Pop_size = _RANGES distance(_UFirst, _Uend(_Range));\r\n                return _Selection_sample(_STD move(_UFirst), _Pop_size, _STD move(_Output), _Count, _RngFunc);\r\n            } else {\r\n                return _Reservoir_sample(_Ubegin(_Range), _Uend(_Range), _STD move(_Output), _Count, _RngFunc);\r\n            }\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Out, class _Rng>\r\n        _NODISCARD static _Out _Selection_sample(\r\n            _It _First, iter_difference_t<_It> _Pop_size, _Out _Output, iter_difference_t<_It> _Count, _Rng& _RngFunc) {\r\n            // Randomly select _Count elements from _First + [0, _Pop_size) into _Output.\r\n            // _First should be already unwrapped, _Output will be unwrapped locally.\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(weakly_incrementable<_Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_copyable<_It, _Out>);\r\n\r\n            if (_Count > _Pop_size) {\r\n                _Count = _Pop_size;\r\n            }\r\n            auto _UOutput = _STD _Get_unwrapped_n(_STD move(_Output), _Count);\r\n\r\n            for (; _Pop_size > 0; ++_First, (void) --_Pop_size) {\r\n                if (_RngFunc(_Pop_size) < _Count) {\r\n                    *_UOutput = *_First;\r\n                    ++_UOutput;\r\n                    if (--_Count == 0) {\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            _STD _Seek_wrapped(_Output, _STD move(_UOutput));\r\n            return _Output;\r\n        }\r\n\r\n        template <class _It, class _Se, class _Out, class _Rng>\r\n        _NODISCARD static _Out _Reservoir_sample(\r\n            _It _First, const _Se _Last, _Out _Output, const iter_difference_t<_It> _Count, _Rng& _RngFunc) {\r\n            // Randomly select _Count elements from [_First, _Last) into _Output.\r\n            // _First should be already unwrapped, _Output will be unwrapped locally.\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<_Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_copyable<_It, _Out>);\r\n\r\n            auto _UOutput = _STD _Get_unwrapped_unverified(_STD move(_Output));\r\n            iter_difference_t<_It> _Pop_size{};\r\n            for (; _Pop_size < _Count; ++_Pop_size, (void) ++_First) {\r\n                if (_First == _Last) {\r\n                    _UOutput += _Pop_size;\r\n                    _STD _Seek_wrapped(_Output, _STD move(_UOutput));\r\n                    return _Output;\r\n                }\r\n\r\n                *(_UOutput + _Pop_size) = *_First;\r\n            }\r\n            for (; _First != _Last; ++_First) {\r\n                const auto _Idx = _RngFunc(++_Pop_size);\r\n                if (_Idx < _Count) {\r\n                    *(_UOutput + _Idx) = *_First;\r\n                }\r\n            }\r\n\r\n            _UOutput += _Count;\r\n            _STD _Seek_wrapped(_Output, _STD move(_UOutput));\r\n            return _Output;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Sample_fn sample;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class _RanIt, class _RngFn>\r\nvoid _Random_shuffle1(_RanIt _First, _RanIt _Last, _RngFn& _RngFunc) {\r\n    // shuffle [_First, _Last) using random function _RngFunc\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if (_UFirst == _ULast) {\r\n        return;\r\n    }\r\n\r\n    using _Diff         = _Iter_diff_t<_RanIt>;\r\n    auto _UTarget       = _UFirst;\r\n    _Diff _Target_index = 1;\r\n    for (; ++_UTarget != _ULast; ++_Target_index) { // randomly place an element from [_First, _Target] at _Target\r\n        _Diff _Off = _RngFunc(static_cast<_Diff>(_Target_index + 1));\r\n        _STL_ASSERT(0 <= _Off && _Off <= _Target_index, \"random value out of range\");\r\n        if (_Off != _Target_index) { // avoid self-move-assignment\r\n            swap(*_UTarget, *(_UFirst + _Off)); // intentional ADL\r\n        }\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt, class _Urng>\r\nvoid shuffle(_RanIt _First, _RanIt _Last, _Urng&& _Func) { // shuffle [_First, _Last) using URNG _Func\r\n    using _Urng0 = remove_reference_t<_Urng>;\r\n    _Rng_from_urng_v2<_Iter_diff_t<_RanIt>, _Urng0> _RngFunc(_Func);\r\n    _STD _Random_shuffle1(_First, _Last, _RngFunc);\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Shuffle_fn {\r\n    public:\r\n        template <random_access_iterator _It, sentinel_for<_It> _Se, class _Urng>\r\n            requires permutable<_It> && uniform_random_bit_generator<remove_reference_t<_Urng>>\r\n        static _It operator()(_It _First, _Se _Last, _Urng&& _Func) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n\r\n            _Rng_from_urng_v2<iter_difference_t<_It>, remove_reference_t<_Urng>> _RngFunc(_Func);\r\n            auto _UResult = _Shuffle_unchecked(\r\n                _RANGES _Unwrap_iter<_Se>(_STD move(_First)), _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _RngFunc);\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult));\r\n            return _First;\r\n        }\r\n\r\n        template <random_access_range _Rng, class _Urng>\r\n            requires permutable<iterator_t<_Rng>> && uniform_random_bit_generator<remove_reference_t<_Urng>>\r\n        static borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Urng&& _Func) {\r\n            _Rng_from_urng_v2<range_difference_t<_Rng>, remove_reference_t<_Urng>> _RngFunc(_Func);\r\n\r\n            return _RANGES _Rewrap_iterator(_Range, _Shuffle_unchecked(_Ubegin(_Range), _Uend(_Range), _RngFunc));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Rng>\r\n        _NODISCARD static _It _Shuffle_unchecked(_It _First, const _Se _Last, _Rng& _Func) {\r\n            // shuffle [_First, _Last) using random function _Func\r\n            _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(permutable<_It>);\r\n\r\n            if (_First == _Last) {\r\n                return _First;\r\n            }\r\n            using _Diff = iter_difference_t<_It>;\r\n\r\n            auto _Target        = _First;\r\n            _Diff _Target_index = 1;\r\n            for (; ++_Target != _Last; ++_Target_index) {\r\n                // randomly place an element from [_First, _Target] at _Target\r\n                const _Diff _Off = _Func(_Target_index + 1);\r\n                _STL_ASSERT(0 <= _Off && _Off <= _Target_index, \"random value out of range\");\r\n                if (_Off != _Target_index) { // avoid self-move-assignment\r\n                    _RANGES iter_swap(_Target, _First + _Off);\r\n                }\r\n            }\r\n            return _Target;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Shuffle_fn shuffle;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_AUTO_PTR_ETC\r\n_EXPORT_STD template <class _RanIt, class _RngFn>\r\nvoid random_shuffle(_RanIt _First, _RanIt _Last, _RngFn&& _RngFunc) {\r\n    // shuffle [_First, _Last) using random function _RngFunc\r\n    _STD _Random_shuffle1(_First, _Last, _RngFunc);\r\n}\r\n\r\nstruct _Rand_urng_from_func { // wrap rand() as a URNG\r\n    using result_type = unsigned int;\r\n\r\n    static constexpr result_type(min)() { // return minimum possible generated value\r\n        return 0;\r\n    }\r\n\r\n    static constexpr result_type(max)() { // return maximum possible generated value\r\n        return RAND_MAX;\r\n    }\r\n\r\n    result_type operator()() { // invoke rand()\r\n        return static_cast<result_type>(_CSTD rand());\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _RanIt>\r\nvoid random_shuffle(_RanIt _First, _RanIt _Last) { // shuffle [_First, _Last) using rand()\r\n    _Rand_urng_from_func _Func;\r\n    _STD shuffle(_First, _Last, _Func);\r\n}\r\n#endif // _HAS_AUTO_PTR_ETC\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _FwdIt>\r\nconstexpr _FwdIt shift_left(\r\n    _FwdIt _First, const _FwdIt _Last, typename iterator_traits<_FwdIt>::difference_type _Pos_to_shift) {\r\n    // shift [_First, _Last) left by _Pos_to_shift\r\n    // positions; returns the end of the resulting range\r\n    _STL_ASSERT(_Pos_to_shift >= 0, \"shift count must be non-negative (N4950 [alg.shift]/1)\");\r\n\r\n    _STD _Adl_verify_range(_First, _Last);\r\n\r\n    if (_Pos_to_shift == 0) {\r\n        return _Last;\r\n    }\r\n\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    auto _Start_at     = _UFirst;\r\n\r\n    if constexpr (_Is_cpp17_random_iter_v<_FwdIt>) {\r\n        if (_Pos_to_shift >= _ULast - _UFirst) {\r\n            return _First;\r\n        }\r\n        _Start_at += _Pos_to_shift;\r\n    } else {\r\n        for (; 0 < _Pos_to_shift; --_Pos_to_shift) {\r\n            if (_Start_at == _ULast) {\r\n                return _First;\r\n            }\r\n            ++_Start_at;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First, _STD _Move_unchecked(_Start_at, _ULast, _UFirst));\r\n    return _First;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt>\r\n    requires requires { typename _Enable_if_execution_policy_t<_ExPo>; }\r\n_FwdIt shift_left(_ExPo&&, _FwdIt _First, _FwdIt _Last,\r\n    typename iterator_traits<_FwdIt>::difference_type _Pos_to_shift) noexcept /* terminates */ {\r\n    // shift [_First, _Last) left by _Pos_to_shift positions\r\n    // not parallelized as benchmarks show it isn't worth it\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt);\r\n    return _STD shift_left(_First, _Last, _Pos_to_shift);\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt>\r\nconstexpr _FwdIt shift_right(\r\n    _FwdIt _First, const _FwdIt _Last, typename iterator_traits<_FwdIt>::difference_type _Pos_to_shift) {\r\n    // shift [_First, _Last) right by _Pos_to_shift\r\n    // positions; returns the beginning of the resulting range\r\n    _STL_ASSERT(_Pos_to_shift >= 0, \"shift count must be non-negative (N4950 [alg.shift]/5)\");\r\n\r\n    _STD _Adl_verify_range(_First, _Last);\r\n\r\n    if (_Pos_to_shift == 0) {\r\n        return _First;\r\n    }\r\n\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n\r\n    if constexpr (_Is_cpp17_bidi_iter_v<_FwdIt>) {\r\n        auto _UEnd_at = _ULast;\r\n        if constexpr (_Is_cpp17_random_iter_v<_FwdIt>) {\r\n            if (_Pos_to_shift >= _ULast - _UFirst) {\r\n                return _Last;\r\n            }\r\n            _UEnd_at -= _Pos_to_shift;\r\n        } else {\r\n            for (; 0 < _Pos_to_shift; --_Pos_to_shift) {\r\n                if (_UEnd_at == _UFirst) {\r\n                    return _Last;\r\n                }\r\n                --_UEnd_at;\r\n            }\r\n        }\r\n\r\n        _STD _Seek_wrapped(_First, _STD _Move_backward_unchecked(_UFirst, _UEnd_at, _ULast));\r\n        return _First;\r\n    } else {\r\n        auto _UResult = _UFirst;\r\n\r\n        for (; 0 < _Pos_to_shift; --_Pos_to_shift) {\r\n            if (_UResult == _ULast) {\r\n                return _Last;\r\n            }\r\n            ++_UResult;\r\n        }\r\n        _STD _Seek_wrapped(_First, _UResult);\r\n\r\n        auto _Trail = _UFirst;\r\n        auto _Lead  = _UResult;\r\n\r\n        for (; _Trail != _UResult; ++_Trail, (void) ++_Lead) {\r\n            if (_Lead == _ULast) {\r\n                _STD _Move_unchecked(_UFirst, _Trail, _UResult);\r\n\r\n                return _First;\r\n            }\r\n        }\r\n\r\n        // Here, _Trail = _UFirst + original _Pos_to_shift\r\n        // Here, _Lead = _UFirst + 2 * original _Pos_to_shift\r\n\r\n        for (;;) {\r\n            // This loop swaps the range [_UFirst, _UResult) with [_Trail, _Lead),\r\n            // advancing _Trail and _Lead by _Pos_to_shift\r\n            for (auto _Mid = _UFirst; _Mid != _UResult; ++_Mid, (void) ++_Trail, ++_Lead) {\r\n                if (_Lead == _ULast) {\r\n                    _Trail = _STD _Move_unchecked(_Mid, _UResult, _Trail);\r\n                    _STD _Move_unchecked(_UFirst, _Mid, _Trail);\r\n\r\n                    return _First;\r\n                }\r\n                swap(*_Mid, *_Trail); // intentional ADL\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt>\r\n    requires requires { typename _Enable_if_execution_policy_t<_ExPo>; }\r\n_FwdIt shift_right(_ExPo&&, _FwdIt _First, _FwdIt _Last,\r\n    typename iterator_traits<_FwdIt>::difference_type _Pos_to_shift) noexcept /* terminates */ {\r\n    // shift [_First, _Last) right by _Pos_to_shift positions\r\n    // not parallelized as benchmarks show it isn't worth it\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt);\r\n    return _STD shift_right(_First, _Last, _Pos_to_shift);\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\nnamespace ranges {\r\n    class _Shift_left_fn {\r\n    public:\r\n        template <permutable _It, sentinel_for<_It> _Se>\r\n        static constexpr subrange<_It> operator()(_It _First, const _Se _Last, iter_difference_t<_It> _Pos_to_shift) {\r\n            _STL_ASSERT(_Pos_to_shift >= 0, \"shift count must be non-negative (N4950 [alg.shift]/1)\");\r\n\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _Result = _First;\r\n            _Unwrap_iter_t<_It, _Se> _UResult;\r\n\r\n            if (_Pos_to_shift == 0) {\r\n                _UResult = _RANGES _Get_final_iterator_unwrapped<_It>(_RANGES _Unwrap_iter<_Se>(_Result), _Last);\r\n            } else {\r\n                _UResult = _Shift_left_impl(\r\n                    _RANGES _Unwrap_iter<_Se>(_First), _RANGES _Unwrap_sent<_It>(_Last), _Pos_to_shift);\r\n            }\r\n            _STD _Seek_wrapped(_Result, _UResult);\r\n            return {_STD move(_First), _STD move(_Result)};\r\n        }\r\n\r\n        template <forward_range _Rng>\r\n            requires permutable<iterator_t<_Rng>>\r\n        static constexpr borrowed_subrange_t<_Rng> operator()(_Rng&& _Range, range_difference_t<_Rng> _Pos_to_shift) {\r\n            _STL_ASSERT(_Pos_to_shift >= 0, \"shift count must be non-negative (N4950 [alg.shift]/1)\");\r\n\r\n            if (_Pos_to_shift == 0) {\r\n                auto _Last = _RANGES _Rewrap_iterator(_Range, _RANGES _Get_final_iterator_unwrapped(_Range));\r\n                return {_RANGES begin(_Range), _STD move(_Last)};\r\n            }\r\n\r\n            if constexpr (sized_range<_Rng>) {\r\n                auto _First = _RANGES begin(_Range);\r\n                if (_RANGES distance(_Range) <= _Pos_to_shift) {\r\n                    return {_First, _First};\r\n                }\r\n\r\n                auto _UFirst   = _RANGES _Unwrap_range_iter<_Rng>(_First);\r\n                auto _Start_at = _RANGES next(_UFirst, _Pos_to_shift);\r\n                auto _Result   = _RANGES _Move_unchecked(_STD move(_Start_at), _Uend(_Range), _UFirst).out;\r\n                return {_STD move(_First), _RANGES _Rewrap_iterator(_Range, _STD move(_Result))};\r\n            } else {\r\n                auto _Result = _Shift_left_impl(_Ubegin(_Range), _Uend(_Range), _Pos_to_shift);\r\n                return {_RANGES begin(_Range), _RANGES _Rewrap_iterator(_Range, _STD move(_Result))};\r\n            }\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se>\r\n        _NODISCARD static constexpr _It _Shift_left_impl(_It _First, _Se _Last, iter_difference_t<_It> _Pos_to_shift) {\r\n            _STL_INTERNAL_STATIC_ASSERT(permutable<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_CHECK(_Pos_to_shift > 0);\r\n\r\n            auto _Start_at = _First;\r\n            if (_RANGES advance(_Start_at, _Pos_to_shift, _Last) != 0) {\r\n                return _First;\r\n            }\r\n\r\n            return _RANGES _Move_unchecked(_STD move(_Start_at), _STD move(_Last), _STD move(_First)).out;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Shift_left_fn shift_left;\r\n\r\n    class _Shift_right_fn {\r\n    public:\r\n        template <permutable _It, sentinel_for<_It> _Se>\r\n        static constexpr subrange<_It> operator()(_It _First, const _Se _Last, iter_difference_t<_It> _Pos_to_shift) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst     = _RANGES _Unwrap_iter<_Se>(_First);\r\n            auto _ULast      = _RANGES _Unwrap_sent<_It>(_Last);\r\n            const auto _Size = _Size_helper(_UFirst, _ULast);\r\n            auto _Result     = _Shift_right_impl(_STD move(_UFirst), _STD move(_ULast), _Pos_to_shift, _Size);\r\n            _STD _Seek_wrapped(_First, _Result.begin());\r\n            auto _Final = _First;\r\n            _STD _Seek_wrapped(_Final, _Result.end());\r\n            return {_STD move(_First), _STD move(_Final)};\r\n        }\r\n\r\n        template <forward_range _Rng>\r\n            requires permutable<iterator_t<_Rng>>\r\n        static constexpr borrowed_subrange_t<_Rng> operator()(_Rng&& _Range, range_difference_t<_Rng> _Pos_to_shift) {\r\n            const auto _Size = _Size_helper(_Range);\r\n            auto _Result     = _Shift_right_impl(_Ubegin(_Range), _Uend(_Range), _Pos_to_shift, _Size);\r\n            auto _First      = _RANGES _Rewrap_iterator(_Range, _Result.begin());\r\n            auto _Final      = _RANGES _Rewrap_iterator(_Range, _Result.end());\r\n            return {_STD move(_First), _STD move(_Final)};\r\n        }\r\n\r\n    private:\r\n        struct _Unsized {};\r\n\r\n        template <range _Rng>\r\n        _NODISCARD static constexpr auto _Size_helper(_Rng&& _Range) {\r\n            if constexpr (sized_range<_Rng>) {\r\n                return _RANGES distance(_Range);\r\n            } else {\r\n                return _Unsized{};\r\n            }\r\n        }\r\n\r\n        template <class _It, sentinel_for<_It> _Se>\r\n        _NODISCARD static constexpr auto _Size_helper(const _It& _First, const _Se& _Last) {\r\n            if constexpr (sized_sentinel_for<_Se, _It>) {\r\n                return _Last - _First;\r\n            } else {\r\n                return _Unsized{};\r\n            }\r\n        }\r\n\r\n        template <input_iterator _It, weakly_incrementable _Out>\r\n            requires indirectly_movable<_It, _Out>\r\n        _NODISCARD static constexpr _Out _Move_n_helper(_It _First, iter_difference_t<_It> _Count, _Out _Output) {\r\n            for (; _Count > 0; ++_First, (void) --_Count, ++_Output) {\r\n                *_Output = _RANGES iter_move(_First);\r\n            }\r\n\r\n            return _Output;\r\n        }\r\n\r\n        template <class _It, class _Se, class _SizeTy>\r\n        _NODISCARD static constexpr subrange<_It> _Shift_right_impl(\r\n            _It _First, _Se _Last, iter_difference_t<_It> _Pos_to_shift, const _SizeTy _Size) {\r\n            _STL_INTERNAL_STATIC_ASSERT(permutable<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_ASSERT(_Pos_to_shift >= 0, \"shift count must be non-negative (N4950 [alg.shift]/5)\");\r\n\r\n            if (_Pos_to_shift == 0) {\r\n                return {_First, _RANGES next(_First, _Last)};\r\n            }\r\n\r\n            constexpr bool _Is_sized = !same_as<_SizeTy, _Unsized>;\r\n\r\n            if constexpr (_Is_sized) {\r\n                if (_Pos_to_shift >= _Size) {\r\n                    if constexpr (same_as<_It, _Se>) {\r\n                        return {_Last, _Last};\r\n                    } else if constexpr (random_access_iterator<_It>) {\r\n                        _First += _Size;\r\n                        return {_First, _First};\r\n                    } else {\r\n                        _RANGES advance(_First, _Last);\r\n                        return {_First, _First};\r\n                    }\r\n                }\r\n            }\r\n\r\n            if constexpr (_Bidi_common<_It, _Se>) {\r\n                auto _Mid = _Last;\r\n                if constexpr (_Is_sized) {\r\n                    // We validated above that the length of the range is more than _Pos_to_shift\r\n                    _RANGES advance(_Mid, -_Pos_to_shift);\r\n                } else {\r\n                    if (_RANGES advance(_Mid, -_Pos_to_shift, _First) != 0) {\r\n                        return {_Last, _Last};\r\n                    }\r\n                }\r\n                return {_RANGES _Move_backward_common(_STD move(_First), _STD move(_Mid), _Last), _Last};\r\n            } else if constexpr (_Is_sized && random_access_iterator<_It>) {\r\n                auto _Final = _First + _Size;\r\n                auto _Mid   = _Final - _Pos_to_shift;\r\n                return {_RANGES _Move_backward_common(_STD move(_First), _STD move(_Mid), _Final), _Final};\r\n            } else {\r\n                auto _Buf = _First;\r\n                if constexpr (_Is_sized) {\r\n                    _RANGES advance(_Buf, _Pos_to_shift);\r\n                } else {\r\n                    if (_RANGES advance(_Buf, _Pos_to_shift, _Last) != 0) {\r\n                        return {_Buf, _Buf};\r\n                    }\r\n                }\r\n\r\n                if constexpr (_Is_sized) {\r\n                    if (_Size < 2 * _Pos_to_shift) {\r\n                        return {_Buf, _Move_n_helper(_First, _Size - _Pos_to_shift, _Buf)};\r\n                    }\r\n                }\r\n\r\n                auto _Lead = _Buf;\r\n                if constexpr (_Is_sized) {\r\n                    // We validated above that the length of the range is at least 2 * _Pos_to_shift\r\n                    _RANGES advance(_Lead, _Pos_to_shift);\r\n                } else {\r\n                    if (auto _Rem = _RANGES advance(_Lead, _Pos_to_shift, _Last); _Rem != 0) {\r\n                        return {_Buf, _Move_n_helper(_First, _Pos_to_shift - _Rem, _Buf)};\r\n                    }\r\n                }\r\n\r\n                auto _Trail = _Buf;\r\n\r\n                // The range is now partitioned like:\r\n                //\r\n                // | _Pos_to_shift elements |           | _Pos_to_shift elements |\r\n                // |------------------------|-----------|------------------------|------------|\r\n                // ^_First              _Buf^     _Trail^                   _Lead^       _Last^\r\n                //\r\n                // From now on, _Mid repeatedly cycles through the [_First, _Buf) window while the\r\n                // [_Trail, _Lead) window advances toward _Last.\r\n\r\n                for (;;) {\r\n                    for (auto _Mid = _First; _Mid != _Buf; ++_Mid, (void) ++_Trail, ++_Lead) {\r\n                        if (_Lead == _Last) {\r\n                            // The leading edge of the [_Trail, _Lead) window has hit the end of\r\n                            // the range, so we have only the final _Pos_to_shift elements to process.\r\n                            // Their original values are lost - shifted off the end of the range -\r\n                            // so we only need to fill them with new values from [_First, _Buf).\r\n                            _Trail = _RANGES _Move_unchecked(_Mid, _Buf, _STD move(_Trail)).out;\r\n                            _Trail = _RANGES _Move_unchecked(_First, _Mid, _STD move(_Trail)).out;\r\n                            _STL_INTERNAL_CHECK(_Trail == _Lead);\r\n                            return {_STD move(_Buf), _STD move(_Trail)};\r\n                        }\r\n\r\n                        _RANGES iter_swap(_Mid, _Trail);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Shift_right_fn shift_right;\r\n} // namespace ranges\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Pr>\r\n_CONSTEXPR20 _FwdIt partition(_FwdIt _First, const _FwdIt _Last, _Pr _Pred) {\r\n    // move elements satisfying _Pred to beginning of sequence\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst = _STD _Get_unwrapped(_First);\r\n    auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    if constexpr (_Is_cpp17_bidi_iter_v<_FwdIt>) {\r\n        for (;;) { // find any out-of-order pair\r\n            for (;;) { // skip in-place elements at beginning\r\n                if (_UFirst == _ULast) {\r\n                    _STD _Seek_wrapped(_First, _UFirst);\r\n                    return _First;\r\n                }\r\n\r\n                if (!_Pred(*_UFirst)) {\r\n                    break;\r\n                }\r\n\r\n                ++_UFirst;\r\n            }\r\n\r\n            do { // skip in-place elements at end\r\n                --_ULast;\r\n                if (_UFirst == _ULast) {\r\n                    _STD _Seek_wrapped(_First, _UFirst);\r\n                    return _First;\r\n                }\r\n            } while (!_Pred(*_ULast));\r\n\r\n            swap(*_UFirst, *_ULast); // out of place, swap and loop; intentional ADL\r\n            ++_UFirst;\r\n        }\r\n    } else {\r\n        for (;;) { // skip in-place elements at beginning\r\n            if (_UFirst == _ULast) {\r\n                _STD _Seek_wrapped(_First, _UFirst);\r\n                return _First;\r\n            }\r\n\r\n            if (!_Pred(*_UFirst)) {\r\n                break;\r\n            }\r\n\r\n            ++_UFirst;\r\n        }\r\n\r\n        for (auto _UNext = _UFirst; ++_UNext != _ULast;) {\r\n            if (_Pred(*_UNext)) {\r\n                swap(*_UFirst, *_UNext); // out of place, swap and loop; intentional ADL\r\n                ++_UFirst;\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First, _UFirst);\r\n    return _First;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt partition(_ExPo&& _Exec, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept; // terminates\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Partition_fn {\r\n    public:\r\n        template <permutable _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n        static constexpr subrange<_It> operator()(_It _First, _Se _Last, _Pr _Pred, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _Partition_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _RANGES _Rewrap_subrange<subrange<_It>>(_First, _STD move(_UResult));\r\n        }\r\n\r\n        template <forward_range _Rng, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n            requires permutable<iterator_t<_Rng>>\r\n        static constexpr borrowed_subrange_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred, _Pj _Proj = {}) {\r\n            auto _UResult =\r\n                _Partition_unchecked(_Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng>>(_Range, _STD move(_UResult));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Pr, class _Pj>\r\n        _NODISCARD static constexpr subrange<_It> _Partition_unchecked(_It _First, _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(permutable<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n\r\n            if constexpr (bidirectional_iterator<_It>) {\r\n                auto _Saved_last = _RANGES next(_First, _Last);\r\n                auto _Tail       = _Saved_last;\r\n                for (;; ++_First) { // find any out-of-order pair\r\n                    for (;; ++_First) { // skip in-place elements at beginning\r\n                        if (_First == _Tail) {\r\n                            return {_STD move(_First), _STD move(_Saved_last)};\r\n                        }\r\n\r\n                        if (!_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                            break;\r\n                        }\r\n                    }\r\n\r\n                    do { // skip in-place elements at end\r\n                        --_Tail;\r\n                        if (_First == _Tail) {\r\n                            return {_STD move(_First), _STD move(_Saved_last)};\r\n                        }\r\n                    } while (!_STD invoke(_Pred, _STD invoke(_Proj, *_Tail)));\r\n\r\n                    _RANGES iter_swap(_First, _Tail); // out of place, swap and loop\r\n                }\r\n\r\n                return {_STD move(_First), _STD move(_Saved_last)};\r\n            } else {\r\n                for (;; ++_First) { // skip in-place elements at beginning\r\n                    if (_First == _Last) {\r\n                        return {_First, _First};\r\n                    }\r\n\r\n                    if (!_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                auto _Next = _First;\r\n                while (++_Next != _Last) {\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj, *_Next))) {\r\n                        _RANGES iter_swap(_First, _Next); // out of place, swap and loop\r\n                        ++_First;\r\n                    }\r\n                }\r\n\r\n                return {_STD move(_First), _STD move(_Next)};\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Partition_fn partition;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class _BidIt>\r\n_BidIt _Buffered_rotate_unchecked(const _BidIt _First, const _BidIt _Mid, const _BidIt _Last,\r\n    const _Iter_diff_t<_BidIt> _Count1, const _Iter_diff_t<_BidIt> _Count2, _Iter_value_t<_BidIt>* const _Temp_ptr,\r\n    const ptrdiff_t _Capacity) { // rotate [_First, _Last) using temp buffer\r\n                                 // precondition: _Count1 == distance(_First, _Mid)\r\n                                 // precondition: _Count2 == distance(_Mid, _Last)\r\n    if (_Count1 == 0) {\r\n        return _Last;\r\n    }\r\n\r\n    if (_Count2 == 0) {\r\n        return _First;\r\n    }\r\n\r\n    if (_Count1 <= _Count2 && _Count1 <= _Capacity) { // buffer left range, then copy parts\r\n        _Uninitialized_backout<_Iter_value_t<_BidIt>*> _Backout{\r\n            _Temp_ptr, _STD _Uninitialized_move_unchecked(_First, _Mid, _Temp_ptr)};\r\n        const _BidIt _New_mid = _STD _Move_unchecked(_Mid, _Last, _First);\r\n        _STD _Move_unchecked(_Backout._First, _Backout._Last, _New_mid);\r\n        return _New_mid; // _Backout destroys elements in temporary buffer\r\n    }\r\n\r\n    if (_Count2 <= _Capacity) { // buffer right range, then copy parts\r\n        _Uninitialized_backout<_Iter_value_t<_BidIt>*> _Backout{\r\n            _Temp_ptr, _STD _Uninitialized_move_unchecked(_Mid, _Last, _Temp_ptr)};\r\n        _STD _Move_backward_unchecked(_First, _Mid, _Last);\r\n        return _STD _Move_unchecked(_Backout._First, _Backout._Last, _First); // ditto _Backout destroys elements\r\n    }\r\n\r\n    // buffer too small, rotate in place\r\n    return _STD rotate(_First, _Mid, _Last);\r\n}\r\n\r\ntemplate <class _BidIt, class _Pr>\r\npair<_BidIt, _Iter_diff_t<_BidIt>> _Stable_partition_unchecked1(_BidIt _First, _BidIt _Last, _Pr _Pred,\r\n    const _Iter_diff_t<_BidIt> _Count, _Iter_value_t<_BidIt>* const _Temp_ptr, const ptrdiff_t _Capacity) {\r\n    // implement stable_partition of [_First, _Last] (note: closed range)\r\n    // precondition: !_Pred(*_First)\r\n    // precondition: _Pred(*_Last)\r\n    // precondition: distance(_First, _Last) + 1 == _Count\r\n    // note: _Count >= 2 and _First != _Last\r\n    // returns: a pair such that first is the partition point, and second is distance(_First, partition point)\r\n    using _Diff = _Iter_diff_t<_BidIt>;\r\n    if (_Count - static_cast<_Diff>(1) <= _Capacity) { // - 1 since we never need to store *_Last\r\n        _Uninitialized_backout<_Iter_value_t<_BidIt>*> _Backout{_Temp_ptr};\r\n        _BidIt _Next = _First;\r\n        _Backout._Emplace_back(_STD move(*_First));\r\n        while (++_First != _Last) { // test each element, copying to _Temp_ptr if it's in the false range, or assigning\r\n                                    // backwards if it's in the true range\r\n            if (_Pred(*_First)) {\r\n                *_Next = _STD move(*_First);\r\n                ++_Next;\r\n            } else {\r\n                _Backout._Emplace_back(_STD move(*_First));\r\n            }\r\n        }\r\n\r\n        // move the last true element, *_Last, to the end of the true range\r\n        *_Next = _STD move(*_Last);\r\n        ++_Next;\r\n        _STD _Move_unchecked(_Backout._First, _Backout._Last, _Next); // copy back the false range\r\n        _Diff _True_distance = static_cast<_Diff>(_Count - static_cast<_Diff>(_Backout._Last - _Backout._First));\r\n        return pair<_BidIt, _Diff>(_Next, _True_distance); // _Backout destroys elements\r\n    }\r\n\r\n    const _Diff _Mid_offset = _Count / static_cast<_Diff>(2); // note: >= 1 because _Count >= 2\r\n    const _BidIt _Mid       = _STD next(_First, _Mid_offset);\r\n\r\n    // form [_First, _Left) true range, [_Left, _Mid) false range\r\n    _BidIt _Left           = _Mid;\r\n    _Diff _Left_true_count = _Mid_offset;\r\n    for (;;) { // skip over the trailing false range before _Mid\r\n        --_Left;\r\n        if (_First == _Left) { // the entire left range is false\r\n            --_Left_true_count; // to exclude *_First\r\n            break;\r\n        }\r\n\r\n        if (_Pred(*_Left)) { // excluded the false range before _Mid, invariants reestablished, recurse\r\n            const pair<_BidIt, _Diff> _Low =\r\n                _STD _Stable_partition_unchecked1(_First, _Left, _Pred, _Left_true_count, _Temp_ptr, _Capacity);\r\n            _Left            = _Low.first;\r\n            _Left_true_count = _Low.second;\r\n            break;\r\n        }\r\n\r\n        --_Left_true_count;\r\n    }\r\n\r\n    // form [_Mid, _Right) true range, [_Right, next(_Last)) false range\r\n    _BidIt _Right           = _Mid;\r\n    _Diff _Right_true_count = 0;\r\n    for (;;) { // skip over the leading true range after and including _Mid\r\n        if (_Right == _Last) { // the entire right range is true\r\n            ++_Right; // to include _Last\r\n            ++_Right_true_count;\r\n            break;\r\n        }\r\n\r\n        if (!_Pred(*_Right)) { // excluded the true range after and including _Mid, invariants reestablished, recurse\r\n            const _Diff _Right_count = _Count - _Mid_offset;\r\n            const _Diff _Remaining   = _Right_count - _Right_true_count;\r\n            const pair<_BidIt, _Diff> _High =\r\n                _STD _Stable_partition_unchecked1(_Right, _Last, _Pred, _Remaining, _Temp_ptr, _Capacity);\r\n            _Right = _High.first;\r\n            _Right_true_count += _High.second;\r\n            break;\r\n        }\r\n\r\n        ++_Right;\r\n        ++_Right_true_count;\r\n    }\r\n\r\n    // swap the [_Left, _Mid) false range with the [_Mid, _Right) true range\r\n    const _BidIt _Partition_point = _STD _Buffered_rotate_unchecked(_Left, _Mid, _Right,\r\n        static_cast<_Diff>(_Mid_offset - _Left_true_count), _Right_true_count, _Temp_ptr, _Capacity);\r\n    return pair<_BidIt, _Diff>(_Partition_point, static_cast<_Diff>(_Left_true_count + _Right_true_count));\r\n}\r\n\r\ntemplate <class _BidIt, class _Pr>\r\n_BidIt _Stable_partition_unchecked(_BidIt _First, _BidIt _Last, _Pr _Pred) {\r\n    // partition preserving order of equivalents\r\n    for (;;) {\r\n        if (_First == _Last) { // the input range is true (already partitioned)\r\n            return _First;\r\n        }\r\n\r\n        if (!_Pred(*_First)) { // excluded the leading true range\r\n            break;\r\n        }\r\n\r\n        ++_First;\r\n    }\r\n\r\n    for (;;) {\r\n        --_Last;\r\n        if (_First == _Last) { // the input range is already partitioned\r\n            return _First;\r\n        }\r\n\r\n        if (_Pred(*_Last)) { // excluded the trailing false range\r\n            break;\r\n        }\r\n    }\r\n\r\n    using _Diff              = _Iter_diff_t<_BidIt>;\r\n    const _Diff _Temp_count  = _STD distance(_First, _Last); // _Total_count - 1 since we never need to store *_Last\r\n    const _Diff _Total_count = _Temp_count + static_cast<_Diff>(1);\r\n    _Optimistic_temporary_buffer2<_Iter_value_t<_BidIt>> _Temp_buf{_Temp_count};\r\n    return _STD _Stable_partition_unchecked1(_First, _Last, _Pred, _Total_count, _Temp_buf._Data, _Temp_buf._Capacity)\r\n        .first;\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt, class _Pr>\r\n_BidIt stable_partition(_BidIt _First, _BidIt _Last, _Pr _Pred) {\r\n    // partition preserving order of equivalents\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    _STD _Seek_wrapped(_First, _STD _Stable_partition_unchecked(\r\n                                   _STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last), _STD _Pass_fn(_Pred)));\r\n    return _First;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _BidIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_BidIt stable_partition(_ExPo&&, _BidIt _First, _BidIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // partition preserving order of equivalents\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_CPP17_MUTABLE_BIDIRECTIONAL_ITERATOR(_BidIt);\r\n    return _STD stable_partition(_First, _Last, _STD _Pass_fn(_Pred));\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <bidirectional_iterator _It>\r\n    _It _Buffered_rotate_common(const _It _First, const _It _Mid, const _It _Last, const iter_difference_t<_It> _Count1,\r\n        const iter_difference_t<_It> _Count2, iter_value_t<_It>* const _Temp_ptr, const ptrdiff_t _Capacity) {\r\n        // rotate [_First, _Last) using temp buffer\r\n        _STL_INTERNAL_CHECK(_Count1 == _RANGES distance(_First, _Mid));\r\n        _STL_INTERNAL_CHECK(_Count2 == _RANGES distance(_Mid, _Last));\r\n\r\n        if (_Count1 == 0) {\r\n            return _Last;\r\n        }\r\n\r\n        if (_Count2 == 0) {\r\n            return _First;\r\n        }\r\n\r\n        if (_Count1 <= _Count2 && _Count1 <= _Capacity) { // buffer left range, then move parts\r\n            _Uninitialized_backout<iter_value_t<_It>*> _Backout{\r\n                _Temp_ptr, _RANGES _Uninitialized_move_unchecked(\r\n                               _First, _Mid, _Temp_ptr, _Temp_ptr + static_cast<ptrdiff_t>(_Count1))\r\n                               .out};\r\n            const _It _New_mid = _RANGES _Move_unchecked(_STD move(_Mid), _STD move(_Last), _STD move(_First)).out;\r\n            _RANGES _Move_unchecked(_Backout._First, _Backout._Last, _New_mid);\r\n            return _New_mid;\r\n        }\r\n\r\n        if (_Count2 <= _Capacity) { // buffer right range, then move parts\r\n            _Uninitialized_backout<iter_value_t<_It>*> _Backout{\r\n                _Temp_ptr, _RANGES _Uninitialized_move_unchecked(\r\n                               _Mid, _Last, _Temp_ptr, _Temp_ptr + static_cast<ptrdiff_t>(_Count2))\r\n                               .out};\r\n            _RANGES _Move_backward_common(_First, _STD move(_Mid), _STD move(_Last));\r\n            return _RANGES _Move_unchecked(_Backout._First, _Backout._Last, _STD move(_First)).out;\r\n        }\r\n\r\n        // buffer too small, rotate in place\r\n        return _RANGES _Rotate_unchecked(_STD move(_First), _STD move(_Mid), _STD move(_Last)).begin();\r\n    }\r\n\r\n    class _Stable_partition_fn {\r\n    public:\r\n        template <bidirectional_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n            requires permutable<_It>\r\n        static subrange<_It> operator()(_It _First, _Se _Last, _Pr _Pred, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast  = _RANGES _Get_final_iterator_unwrapped<_It>(_UFirst, _STD move(_Last));\r\n\r\n            auto _UResult = _Stable_partition_common(\r\n                _STD move(_UFirst), _STD move(_ULast), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _RANGES _Rewrap_subrange<subrange<_It>>(_First, _STD move(_UResult));\r\n        }\r\n\r\n        template <bidirectional_range _Rng, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n            requires permutable<iterator_t<_Rng>>\r\n        static borrowed_subrange_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred, _Pj _Proj = {}) {\r\n            auto _ULast   = _RANGES _Get_final_iterator_unwrapped(_Range);\r\n            auto _UResult = _Stable_partition_common(\r\n                _Ubegin(_Range), _STD move(_ULast), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng>>(_Range, _STD move(_UResult));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Pr, class _Pj>\r\n        _NODISCARD static subrange<_It> _Stable_partition_common(_It _First, _It _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(bidirectional_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(permutable<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n\r\n            // partition preserving order of equivalents\r\n            for (;;) { // skip in-place elements at front\r\n                if (_First == _Last) { // the input range is true (already partitioned)\r\n                    return {_STD move(_First), _STD move(_Last)};\r\n                }\r\n\r\n                if (!_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                    break;\r\n                }\r\n                ++_First;\r\n            }\r\n\r\n            auto _Saved_last = _Last;\r\n            do { // skip in-place elements at end\r\n                --_Last;\r\n                if (_First == _Last) {\r\n                    return {_STD move(_First), _STD move(_Saved_last)};\r\n                }\r\n            } while (!_STD invoke(_Pred, _STD invoke(_Proj, *_Last)));\r\n\r\n            const iter_difference_t<_It> _Temp_count = _RANGES distance(_First, _Last);\r\n            _Optimistic_temporary_buffer2<iter_value_t<_It>> _Temp_buf{_Temp_count};\r\n\r\n            // _Temp_count + 1 since we work on closed ranges\r\n            const auto _Total_count = static_cast<iter_difference_t<_It>>(_Temp_count + 1);\r\n\r\n            auto _Result = _Stable_partition_common_buffered(\r\n                _STD move(_First), _STD move(_Last), _Pred, _Proj, _Total_count, _Temp_buf._Data, _Temp_buf._Capacity);\r\n            return {_STD move(_Result.first), _STD move(_Saved_last)};\r\n        }\r\n\r\n        template <class _It, class _Pr, class _Pj>\r\n        _NODISCARD static pair<_It, iter_difference_t<_It>> _Stable_partition_common_buffered(_It _First, _It _Last,\r\n            _Pr _Pred, _Pj _Proj, const iter_difference_t<_It> _Count, iter_value_t<_It>* const _Temp_ptr,\r\n            const ptrdiff_t _Capacity) {\r\n            // implement stable_partition of [_First, _Last] (note: closed range)\r\n            // note: _Count >= 2 and _First != _Last\r\n            _STL_INTERNAL_STATIC_ASSERT(permutable<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n            _STL_INTERNAL_STATIC_ASSERT(bidirectional_iterator<_It>);\r\n            _STL_INTERNAL_CHECK(!_STD invoke(_Pred, _STD invoke(_Proj, *_First)));\r\n            _STL_INTERNAL_CHECK(_STD invoke(_Pred, _STD invoke(_Proj, *_Last)));\r\n            _STL_INTERNAL_CHECK(_Count == _RANGES distance(_First, _Last) + 1);\r\n\r\n            using _Diff = iter_difference_t<_It>;\r\n            if (_Count - 1 <= _Capacity) { // - 1 since we never need to store *_Last\r\n                _Uninitialized_backout<iter_value_t<_It>*> _Backout{_Temp_ptr};\r\n                _It _Next = _First;\r\n                _Backout._Emplace_back(_RANGES iter_move(_First));\r\n                while (++_First != _Last) {\r\n                    // test each element, moving into the temporary buffer if it's in the false range, or\r\n                    // assigning backwards if it's in the true range\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                        *_Next = _RANGES iter_move(_First);\r\n                        ++_Next;\r\n                    } else {\r\n                        _Backout._Emplace_back(_RANGES iter_move(_First));\r\n                    }\r\n                }\r\n\r\n                // move the last true element, *_Last, to the end of the true range\r\n                *_Next = _RANGES iter_move(_Last);\r\n                ++_Next;\r\n                // copy back the false range\r\n                _RANGES _Move_unchecked(_Backout._First, _Backout._Last, _Next);\r\n                const auto _True_distance = static_cast<_Diff>(_Count - (_Backout._Last - _Backout._First));\r\n                return {_STD move(_Next), _True_distance};\r\n            }\r\n\r\n            const _Diff _Mid_offset = _Count >> 1; // _Mid_offset >= 1 because _Count >= 2\r\n            const _It _Mid          = _RANGES next(_First, _Mid_offset);\r\n            // form [_First, _Left) true range, [_Left, _Mid) false range\r\n            _It _Left              = _Mid;\r\n            _Diff _Left_true_count = _Mid_offset;\r\n            for (;;) { // skip over the trailing false range before _Mid\r\n                --_Left;\r\n                --_Left_true_count;\r\n                if (_First == _Left) { // the entire left range is false\r\n                    break;\r\n                }\r\n\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_Left))) {\r\n                    // excluded the false range before _Mid, invariants reestablished, recurse\r\n                    ++_Left_true_count; // to include *_First\r\n                    const auto _Low = _Stable_partition_common_buffered(\r\n                        _First, _STD move(_Left), _Pred, _Proj, _Left_true_count, _Temp_ptr, _Capacity);\r\n                    _Left            = _STD move(_Low.first);\r\n                    _Left_true_count = _Low.second;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            // form [_Mid, _Right) true range, [_Right, next(_Last)) false range\r\n            _It _Right              = _Mid;\r\n            _Diff _Right_true_count = 0;\r\n            for (;;) { // skip over the leading true range after and including _Mid\r\n                if (_Right == _Last) { // the entire right range is true\r\n                    ++_Right; // to include _Last\r\n                    ++_Right_true_count;\r\n                    break;\r\n                }\r\n\r\n                if (!_STD invoke(_Pred, _STD invoke(_Proj, *_Right))) {\r\n                    // excluded the true range after and including _Mid, invariants reestablished, recurse\r\n                    const auto _Right_count = static_cast<_Diff>(_Count - _Mid_offset);\r\n                    const auto _Remaining   = static_cast<_Diff>(_Right_count - _Right_true_count);\r\n                    const auto _High        = _Stable_partition_common_buffered(\r\n                        _STD move(_Right), _Last, _Pred, _Proj, _Remaining, _Temp_ptr, _Capacity);\r\n                    _Right = _STD move(_High.first);\r\n                    _Right_true_count += _High.second;\r\n                    break;\r\n                }\r\n\r\n                ++_Right;\r\n                ++_Right_true_count;\r\n            }\r\n\r\n            // swap the [_Left, _Mid) false range with the [_Mid, _Right) true range\r\n            auto _Partition_point =\r\n                _RANGES _Buffered_rotate_common(_STD move(_Left), _STD move(_Mid), _STD move(_Right),\r\n                    static_cast<_Diff>(_Mid_offset - _Left_true_count), _Right_true_count, _Temp_ptr, _Capacity);\r\n            return {_STD move(_Partition_point), static_cast<_Diff>(_Left_true_count + _Right_true_count)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Stable_partition_fn stable_partition;\r\n\r\n    template <random_access_iterator _It, class _Ty, class _Pr, class _Pj1, class _Pj2>\r\n        requires sortable<_It, _Pr, _Pj1> && indirectly_writable<_It, _Ty>\r\n              && indirect_strict_weak_order<_Pr, projected<_It, _Pj1>, projected<remove_reference_t<_Ty>*, _Pj2>>\r\n    constexpr void _Push_heap_by_index(const _It _First, iter_difference_t<_It> _Hole,\r\n        const iter_difference_t<_It> _Top, _Ty&& _Val, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n        // percolate _Hole to _Top or where _Val belongs\r\n        while (_Top < _Hole) {\r\n            const auto _Idx = static_cast<iter_difference_t<_It>>((_Hole - 1) >> 1); // shift for codegen\r\n            if (!_STD invoke(_Pred, _STD invoke(_Proj1, *(_First + _Idx)), _STD invoke(_Proj2, _Val))) {\r\n                break;\r\n            }\r\n\r\n            // move _Hole up to parent\r\n            *(_First + _Hole) = _RANGES iter_move(_First + _Idx);\r\n            _Hole             = _Idx;\r\n        }\r\n\r\n        *(_First + _Hole) = _STD forward<_Ty>(_Val); // drop _Val into final hole\r\n    }\r\n\r\n    class _Push_heap_fn {\r\n    public:\r\n        template <random_access_iterator _It, sentinel_for<_It> _Se, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<_It, _Pr, _Pj>\r\n        static constexpr _It operator()(_It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast  = _RANGES _Get_final_iterator_unwrapped<_It>(_UFirst, _STD move(_Last));\r\n            _STD _Seek_wrapped(_First, _ULast);\r\n            _Push_heap_unchecked(_STD move(_UFirst), _STD move(_ULast), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _First;\r\n        }\r\n\r\n        template <random_access_range _Rng, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<iterator_t<_Rng>, _Pr, _Pj>\r\n        static constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            if constexpr (common_range<_Rng>) {\r\n                _Push_heap_unchecked(_Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES end(_Range);\r\n            } else {\r\n                auto _ULast = _RANGES _Get_final_iterator_unwrapped(_Range);\r\n                _Push_heap_unchecked(_Ubegin(_Range), _ULast, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_iterator(_Range, _STD move(_ULast));\r\n            }\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Pr, class _Pj>\r\n        static constexpr void _Push_heap_unchecked(_It _First, _It _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sortable<_It, _Pr, _Pj>);\r\n\r\n            const auto _Count = _Last - _First;\r\n            if (_Count < 2) {\r\n                return;\r\n            }\r\n\r\n            --_Last;\r\n            iter_value_t<_It> _Val(_RANGES iter_move(_Last));\r\n            // NB: if _Proj is a _Ref_fn, this aliases the _Proj1 and _Proj2 parameters of _Push_heap_by_index\r\n            _RANGES _Push_heap_by_index(_STD move(_First), _Count - 1, 0, _STD move(_Val), _Pred, _Proj, _Proj);\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Push_heap_fn push_heap;\r\n\r\n    template <random_access_iterator _It, class _Ty, class _Pr, class _Pj1, class _Pj2>\r\n        requires sortable<_It, _Pr, _Pj1> && indirectly_writable<_It, _Ty>\r\n              && indirect_strict_weak_order<_Pr, projected<_It, _Pj1>, projected<remove_reference_t<_Ty>*, _Pj2>>\r\n    constexpr void _Pop_heap_hole_by_index(_It _First, iter_difference_t<_It> _Hole,\r\n        const iter_difference_t<_It> _Bottom, _Ty&& _Val, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n        // percolate _Hole to _Bottom, then push _Val\r\n        _STL_INTERNAL_CHECK(_Hole >= 0);\r\n        _STL_INTERNAL_CHECK(_Bottom > 0);\r\n\r\n        using _Diff      = iter_difference_t<_It>;\r\n        const _Diff _Top = _Hole;\r\n        _Diff _Idx       = _Hole;\r\n\r\n        // Check whether _Idx can have a child before calculating that child's index, since\r\n        // calculating the child's index can trigger integer overflows\r\n        const _Diff _Max_sequence_non_leaf = (_Bottom - 1) >> 1; // shift for codegen\r\n        while (_Idx < _Max_sequence_non_leaf) { // move _Hole down to larger child\r\n            _Idx      = 2 * _Idx + 2;\r\n            auto _Mid = _First + _Idx;\r\n            if (_STD invoke(_Pred, _STD invoke(_Proj1, *_Mid), _STD invoke(_Proj1, *_RANGES prev(_Mid)))) {\r\n                --_Idx;\r\n                --_Mid;\r\n            }\r\n            *(_First + _Hole) = _RANGES iter_move(_Mid);\r\n            _Hole             = _Idx;\r\n        }\r\n\r\n        if (_Idx == _Max_sequence_non_leaf && _Bottom % 2 == 0) { // only child at bottom, move _Hole down to it\r\n            *(_First + _Hole) = _RANGES iter_move(_First + (_Bottom - 1));\r\n            _Hole             = _Bottom - 1;\r\n        }\r\n\r\n        _RANGES _Push_heap_by_index(_STD move(_First), _Hole, _Top, _STD forward<_Ty>(_Val), _Pred, _Proj1, _Proj2);\r\n    }\r\n\r\n    template <random_access_iterator _It, class _Ty, class _Pr, class _Pj1, class _Pj2>\r\n        requires sortable<_It, _Pr, _Pj1> && indirectly_writable<_It, _Ty>\r\n              && indirect_strict_weak_order<_Pr, projected<_It, _Pj1>, projected<remove_reference_t<_Ty>*, _Pj2>>\r\n    constexpr void _Pop_heap_hole_unchecked(\r\n        _It _First, const _It _Last, const _It _Dest, _Ty&& _Val, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n        // pop *_First to *_Dest and reheap\r\n        _STL_INTERNAL_CHECK(_First != _Last);\r\n        _STL_INTERNAL_CHECK(_First != _Dest);\r\n\r\n        *_Dest            = _RANGES iter_move(_First);\r\n        const auto _Count = _Last - _First;\r\n        _RANGES _Pop_heap_hole_by_index(_STD move(_First), 0, _Count, _STD forward<_Ty>(_Val), _Pred, _Proj1, _Proj2);\r\n    }\r\n\r\n    template <random_access_iterator _It, class _Pr, class _Pj>\r\n        requires sortable<_It, _Pr, _Pj>\r\n    constexpr void _Pop_heap_unchecked(_It _First, _It _Last, _Pr _Pred, _Pj _Proj) {\r\n        // pop *_First to *(_Last - 1) and reheap\r\n        if (_Last - _First < 2) {\r\n            return;\r\n        }\r\n\r\n        --_Last;\r\n        iter_value_t<_It> _Val(_RANGES iter_move(_Last));\r\n        // NB: if _Proj is a _Ref_fn, this aliases the _Proj1 and _Proj2 parameters of _Pop_heap_hole_unchecked\r\n        _RANGES _Pop_heap_hole_unchecked(_STD move(_First), _Last, _Last, _STD move(_Val), _Pred, _Proj, _Proj);\r\n    }\r\n\r\n    struct _Pop_heap_fn {\r\n        template <random_access_iterator _It, sentinel_for<_It> _Se, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<_It, _Pr, _Pj>\r\n        static constexpr _It operator()(_It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast  = _RANGES _Get_final_iterator_unwrapped<_It>(_UFirst, _STD move(_Last));\r\n            _STD _Seek_wrapped(_First, _ULast);\r\n            _RANGES _Pop_heap_unchecked(\r\n                _STD move(_UFirst), _STD move(_ULast), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _First;\r\n        }\r\n\r\n        template <random_access_range _Rng, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<iterator_t<_Rng>, _Pr, _Pj>\r\n        static constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            if constexpr (common_range<_Rng>) {\r\n                _RANGES _Pop_heap_unchecked(_Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES end(_Range);\r\n            } else {\r\n                auto _ULast = _Get_final_iterator_unwrapped(_Range);\r\n                _RANGES _Pop_heap_unchecked(_Ubegin(_Range), _ULast, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _Rewrap_iterator(_Range, _STD move(_ULast));\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Pop_heap_fn pop_heap;\r\n\r\n    template <random_access_iterator _It, class _Pr, class _Pj>\r\n        requires sortable<_It, _Pr, _Pj>\r\n    constexpr void _Make_heap_common(_It _First, _It _Last, _Pr _Pred, _Pj _Proj) {\r\n        // make [_First, _Last) into a heap with respect to _Pred and _Proj\r\n        using _Diff         = iter_difference_t<_It>;\r\n        const _Diff _Bottom = _Last - _First;\r\n        for (_Diff _Hole = _Bottom >> 1; _Hole > 0;) { // shift for codegen\r\n            // reheap top half, bottom to top\r\n            --_Hole;\r\n            iter_value_t<_It> _Val(_RANGES iter_move(_First + _Hole));\r\n            // NB: if _Proj is a _Ref_fn, this aliases the _Proj1 and _Proj2 parameters of _Pop_heap_hole_by_index\r\n            _RANGES _Pop_heap_hole_by_index(_First, _Hole, _Bottom, _STD move(_Val), _Pred, _Proj, _Proj);\r\n        }\r\n    }\r\n\r\n    struct _Make_heap_fn {\r\n        template <random_access_iterator _It, sentinel_for<_It> _Se, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<_It, _Pr, _Pj>\r\n        static constexpr _It operator()(_It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast  = _RANGES _Get_final_iterator_unwrapped<_It>(_UFirst, _STD move(_Last));\r\n            _STD _Seek_wrapped(_First, _ULast);\r\n            _RANGES _Make_heap_common(\r\n                _STD move(_UFirst), _STD move(_ULast), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _First;\r\n        }\r\n\r\n        template <random_access_range _Rng, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<iterator_t<_Rng>, _Pr, _Pj>\r\n        static constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            if constexpr (common_range<_Rng>) {\r\n                _RANGES _Make_heap_common(_Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES end(_Range);\r\n            } else {\r\n                auto _ULast = _RANGES _Get_final_iterator_unwrapped(_Range);\r\n                _RANGES _Make_heap_common(_Ubegin(_Range), _ULast, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_iterator(_Range, _STD move(_ULast));\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Make_heap_fn make_heap;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _RanIt, class _Pr>\r\n_CONSTEXPR20 _RanIt _Is_heap_until_unchecked(_RanIt _First, _RanIt _Last, _Pr _Pred) {\r\n    // find extent of range that is a heap\r\n    using _Diff       = _Iter_diff_t<_RanIt>;\r\n    const _Diff _Size = _Last - _First;\r\n    for (_Diff _Off = 1; _Off < _Size; ++_Off) {\r\n        if (_DEBUG_LT_PRED(_Pred, *(_First + ((_Off - 1) >> 1)), *(_First + _Off))) { // shift for codegen\r\n            return _First + _Off;\r\n        }\r\n    }\r\n\r\n    return _Last;\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt, class _Pr>\r\n_NODISCARD _CONSTEXPR20 _RanIt is_heap_until(_RanIt _First, _RanIt _Last, _Pr _Pred) {\r\n    // find extent of range that is a heap\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    _STD _Seek_wrapped(_First,\r\n        _STD _Is_heap_until_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last), _STD _Pass_fn(_Pred)));\r\n    return _First;\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt, class _Pr>\r\n_NODISCARD _CONSTEXPR20 bool is_heap(_RanIt _First, _RanIt _Last, _Pr _Pred) {\r\n    // test if range is a heap\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    return _STD _Is_heap_until_unchecked(_UFirst, _ULast, _STD _Pass_fn(_Pred)) == _ULast;\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt>\r\n_NODISCARD _CONSTEXPR20 _RanIt is_heap_until(_RanIt _First, _RanIt _Last) {\r\n    // find extent of range that is a heap ordered by operator<\r\n    return _STD is_heap_until(_First, _Last, less<>{});\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt>\r\n_NODISCARD _CONSTEXPR20 bool is_heap(_RanIt _First, _RanIt _Last) { // test if range is a heap ordered by operator<\r\n    return _STD is_heap(_First, _Last, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _RanIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _RanIt is_heap_until(_ExPo&& _Exec, _RanIt _First, _RanIt _Last, _Pr _Pred) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _ExPo, class _RanIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD bool is_heap(_ExPo&& _Exec, _RanIt _First, _RanIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // test if range is a heap\r\n    return _STD is_heap_until(_STD forward<_ExPo>(_Exec), _First, _Last, _STD _Pass_fn(_Pred)) == _Last;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _RanIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _RanIt is_heap_until(_ExPo&& _Exec, _RanIt _First, _RanIt _Last) noexcept /* terminates */ {\r\n    // find extent of range that is a heap ordered by operator<\r\n    return _STD is_heap_until(_STD forward<_ExPo>(_Exec), _First, _Last, less{});\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _RanIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD bool is_heap(_ExPo&& _Exec, _RanIt _First, _RanIt _Last) noexcept /* terminates */ {\r\n    // test if range is a heap ordered by operator<\r\n    return _STD is_heap(_STD forward<_ExPo>(_Exec), _First, _Last, less{});\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <class _It, class _Pr, class _Pj>\r\n    _NODISCARD constexpr _It _Is_heap_until_unchecked(\r\n        _It _First, const iter_difference_t<_It> _Size, _Pr _Pred, _Pj _Proj) {\r\n        // find extent of counted range that is a heap\r\n        _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<_It>);\r\n        _STL_INTERNAL_STATIC_ASSERT(indirect_strict_weak_order<_Pr, projected<_It, _Pj>>);\r\n\r\n        if (_Size == 0) {\r\n            return _First;\r\n        }\r\n\r\n        using _Diff = iter_difference_t<_It>;\r\n        _Diff _Off  = 1;\r\n        for (; _Off < _Size; ++_Off) {\r\n            const auto _Mid1 = _First + static_cast<_Diff>((_Off - 1) >> 1); // shift for codegen\r\n            auto _Mid2       = _First + _Off;\r\n            if (_STD invoke(_Pred, _STD invoke(_Proj, *_Mid1), _STD invoke(_Proj, *_Mid2))) {\r\n                return _Mid2;\r\n            }\r\n        }\r\n\r\n        return _First + _Off;\r\n    }\r\n\r\n    struct _Is_heap_fn {\r\n        template <random_access_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<_It, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr bool operator()(_It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst      = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            const auto _ULast = _RANGES _Unwrap_sent<_It>(_STD move(_Last));\r\n            const auto _Size  = _RANGES distance(_UFirst, _ULast);\r\n            const auto _UResult =\r\n                _RANGES _Is_heap_until_unchecked(_STD move(_UFirst), _Size, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _UResult == _ULast;\r\n        }\r\n\r\n        template <random_access_range _Rng, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr bool operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            const auto _Size = _RANGES distance(_Range);\r\n            const auto _UResult =\r\n                _RANGES _Is_heap_until_unchecked(_Ubegin(_Range), _Size, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _UResult == _Uend(_Range);\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Is_heap_fn is_heap;\r\n\r\n    struct _Is_heap_until_fn {\r\n        template <random_access_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<_It, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr _It operator()(_It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst     = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            const auto _Size = _RANGES distance(_UFirst, _RANGES _Unwrap_sent<_It>(_STD move(_Last)));\r\n            auto _UResult =\r\n                _RANGES _Is_heap_until_unchecked(_STD move(_UFirst), _Size, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult));\r\n            return _First;\r\n        }\r\n\r\n        template <random_access_range _Rng, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr borrowed_iterator_t<_Rng> operator()(\r\n            _Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            const auto _Size = _RANGES distance(_Range);\r\n            auto _UResult =\r\n                _RANGES _Is_heap_until_unchecked(_Ubegin(_Range), _Size, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _RANGES _Rewrap_iterator(_Range, _STD move(_UResult));\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Is_heap_until_fn is_heap_until;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class _RanIt, class _Pr>\r\n_CONSTEXPR20 void _Sort_heap_unchecked(_RanIt _First, _RanIt _Last, _Pr _Pred) {\r\n    // order heap by repeatedly popping\r\n    for (; _Last - _First >= 2; --_Last) {\r\n        _STD _Pop_heap_unchecked(_First, _Last, _Pred);\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt, class _Pr>\r\n_CONSTEXPR20 void sort_heap(_RanIt _First, _RanIt _Last, _Pr _Pred) { // order heap by repeatedly popping\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    const auto _Counterexample = _STD _Is_heap_until_unchecked(_UFirst, _ULast, _STD _Pass_fn(_Pred));\r\n    _STL_VERIFY(_Counterexample == _ULast, \"invalid heap in sort_heap()\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n    _STD _Sort_heap_unchecked(_UFirst, _ULast, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt>\r\n_CONSTEXPR20 void sort_heap(_RanIt _First, _RanIt _Last) { // order heap by repeatedly popping\r\n    _STD sort_heap(_First, _Last, less<>{});\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <random_access_iterator _It, class _Pr, class _Pj>\r\n        requires sortable<_It, _Pr, _Pj>\r\n    constexpr void _Sort_heap_common(const _It _First, _It _Last, _Pr _Pred, _Pj _Proj) {\r\n        // order heap by repeatedly popping\r\n        for (; _Last - _First >= 2; --_Last) {\r\n            _RANGES _Pop_heap_unchecked(_First, _Last, _Pred, _Proj);\r\n        }\r\n    }\r\n\r\n    struct _Sort_heap_fn {\r\n        template <random_access_iterator _It, sentinel_for<_It> _Se, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<_It, _Pr, _Pj>\r\n        static constexpr _It operator()(_It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast  = _RANGES _Get_final_iterator_unwrapped<_It>(_UFirst, _STD move(_Last));\r\n            _STD _Seek_wrapped(_First, _ULast);\r\n            _RANGES _Sort_heap_common(\r\n                _STD move(_UFirst), _STD move(_ULast), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _First;\r\n        }\r\n\r\n        template <random_access_range _Rng, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<iterator_t<_Rng>, _Pr, _Pj>\r\n        static constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            if constexpr (common_range<_Rng>) {\r\n                _RANGES _Sort_heap_common(_Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES end(_Range);\r\n            } else {\r\n                auto _ULast = _RANGES _Get_final_iterator_unwrapped(_Range);\r\n                _RANGES _Sort_heap_common(_Ubegin(_Range), _ULast, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES _Rewrap_iterator(_Range, _STD move(_ULast));\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Sort_heap_fn sort_heap;\r\n\r\n    template <class _It, class _Ty, class _Pr, class _Pj>\r\n    _NODISCARD constexpr _It _Lower_bound_unchecked(\r\n        _It _First, iter_difference_t<_It> _Count, _Ty&& _Val, _Pr _Pred, _Pj _Proj) {\r\n        _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It>);\r\n        _STL_INTERNAL_STATIC_ASSERT(indirect_strict_weak_order<_Pr, add_pointer_t<_Ty>, projected<_It, _Pj>>);\r\n\r\n        using _Diff = iter_difference_t<_It>;\r\n\r\n        while (_Count > 0) { // divide and conquer, check midpoint\r\n            const auto _Half = static_cast<_Diff>(_Count / 2);\r\n            auto _Mid        = _RANGES next(_First, _Half);\r\n            if (_STD invoke(_Pred, _STD invoke(_Proj, *_Mid), _Val)) { // try top half\r\n                _First = _STD move(_Mid);\r\n                ++_First;\r\n                _Count -= static_cast<_Diff>(_Half + 1);\r\n            } else { // try bottom half\r\n                _Count = _Half;\r\n            }\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    struct _Lower_bound_fn {\r\n        template <forward_iterator _It, sentinel_for<_It> _Se, class _Ty, class _Pj = identity,\r\n            indirect_strict_weak_order<const _Ty*, projected<_It, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr _It operator()(\r\n            _It _First, _Se _Last, const _Ty& _Val, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst      = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            const auto _Count = _RANGES distance(_UFirst, _RANGES _Unwrap_sent<_It>(_STD move(_Last)));\r\n            _UFirst           = _RANGES _Lower_bound_unchecked(\r\n                          _STD move(_UFirst), _Count, _Val, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            _STD _Seek_wrapped(_First, _STD move(_UFirst));\r\n            return _First;\r\n        }\r\n\r\n        template <forward_range _Rng, class _Ty, class _Pj = identity,\r\n            indirect_strict_weak_order<const _Ty*, projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr borrowed_iterator_t<_Rng> operator()(\r\n            _Rng&& _Range, const _Ty& _Val, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            const auto _Count = _RANGES distance(_Range);\r\n            auto _UResult     = _RANGES _Lower_bound_unchecked(\r\n                    _Ubegin(_Range), _Count, _Val, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _RANGES _Rewrap_iterator(_Range, _STD move(_UResult));\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Lower_bound_fn lower_bound;\r\n\r\n    template <class _It, class _Ty, class _Pr, class _Pj>\r\n    _NODISCARD constexpr _It _Upper_bound_unchecked(\r\n        _It _First, iter_difference_t<_It> _Count, _Ty&& _Val, _Pr _Pred, _Pj _Proj) {\r\n        _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It>);\r\n        _STL_INTERNAL_STATIC_ASSERT(indirect_strict_weak_order<_Pr, add_pointer_t<_Ty>, projected<_It, _Pj>>);\r\n\r\n        using _Diff = iter_difference_t<_It>;\r\n\r\n        while (_Count > 0) { // divide and conquer: find half that contains answer\r\n            const auto _Half = static_cast<_Diff>(_Count / 2);\r\n            auto _Mid        = _RANGES next(_First, _Half);\r\n            if (_STD invoke(_Pred, _Val, _STD invoke(_Proj, *_Mid))) {\r\n                _Count = _Half;\r\n            } else { // try top half\r\n                _First = _STD move(_Mid);\r\n                ++_First;\r\n                _Count -= static_cast<_Diff>(_Half + 1);\r\n            }\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    struct _Upper_bound_fn {\r\n        template <forward_iterator _It, sentinel_for<_It> _Se, class _Ty, class _Pj = identity,\r\n            indirect_strict_weak_order<const _Ty*, projected<_It, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr _It operator()(\r\n            _It _First, _Se _Last, const _Ty& _Val, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst      = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            const auto _Count = _RANGES distance(_UFirst, _RANGES _Unwrap_sent<_It>(_STD move(_Last)));\r\n            _UFirst           = _RANGES _Upper_bound_unchecked(\r\n                          _STD move(_UFirst), _Count, _Val, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            _STD _Seek_wrapped(_First, _STD move(_UFirst));\r\n            return _First;\r\n        }\r\n\r\n        template <forward_range _Rng, class _Ty, class _Pj = identity,\r\n            indirect_strict_weak_order<const _Ty*, projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr borrowed_iterator_t<_Rng> operator()(\r\n            _Rng&& _Range, const _Ty& _Val, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            const auto _Count = _RANGES distance(_Range);\r\n            auto _UResult     = _RANGES _Upper_bound_unchecked(\r\n                    _Ubegin(_Range), _Count, _Val, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _RANGES _Rewrap_iterator(_Range, _STD move(_UResult));\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Upper_bound_fn upper_bound;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Ty, class _Pr>\r\n_NODISCARD _CONSTEXPR20 pair<_FwdIt, _FwdIt> equal_range(_FwdIt _First, _FwdIt _Last, const _Ty& _Val, _Pr _Pred) {\r\n    // find range equivalent to _Val\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n\r\n    using _Diff  = _Iter_diff_t<_FwdIt>;\r\n    _Diff _Count = _STD distance(_UFirst, _ULast);\r\n\r\n    for (;;) { // divide and conquer, check midpoint\r\n        if (_Count <= 0) {\r\n            _STD _Seek_wrapped(_Last, _UFirst); // empty range\r\n            _STD _Seek_wrapped(_First, _UFirst);\r\n            break;\r\n        }\r\n\r\n        _Diff _Count2    = _Count / 2;\r\n        const auto _UMid = _STD next(_UFirst, _Count2);\r\n        if (_DEBUG_LT_PRED(_Pred, *_UMid, _Val)) { // range begins above _UMid, loop\r\n            _UFirst = _STD _Next_iter(_UMid);\r\n            _Count -= _Count2 + 1;\r\n        } else if (_Pred(_Val, *_UMid)) {\r\n            _Count = _Count2; // range in first half, loop\r\n        } else { // range straddles _UMid, find each end and return\r\n            auto _UFirst2 = _STD lower_bound(_UFirst, _UMid, _Val, _STD _Pass_fn(_Pred));\r\n            _STD advance(_UFirst, _Count);\r\n            auto _ULast2 = _STD upper_bound(_STD _Next_iter(_UMid), _UFirst, _Val, _STD _Pass_fn(_Pred));\r\n            _STD _Seek_wrapped(_Last, _ULast2);\r\n            _STD _Seek_wrapped(_First, _UFirst2);\r\n            break;\r\n        }\r\n    }\r\n\r\n    return {_First, _Last};\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Ty>\r\n_NODISCARD _CONSTEXPR20 pair<_FwdIt, _FwdIt> equal_range(_FwdIt _First, _FwdIt _Last, const _Ty& _Val) {\r\n    // find range equivalent to _Val\r\n    return _STD equal_range(_First, _Last, _Val, less<>{});\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Equal_range_fn {\r\n    public:\r\n        template <forward_iterator _It, sentinel_for<_It> _Se, class _Ty, class _Pj = identity,\r\n            indirect_strict_weak_order<const _Ty*, projected<_It, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr subrange<_It> operator()(\r\n            _It _First, _Se _Last, const _Ty& _Val, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst      = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            const auto _Count = _RANGES distance(_UFirst, _RANGES _Unwrap_sent<_It>(_STD move(_Last)));\r\n            auto _UResult =\r\n                _Equal_range_unchecked(_STD move(_UFirst), _Count, _Val, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _RANGES _Rewrap_subrange<subrange<_It>>(_First, _STD move(_UResult));\r\n        }\r\n\r\n        template <forward_range _Rng, class _Ty, class _Pj = identity,\r\n            indirect_strict_weak_order<const _Ty*, projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr borrowed_subrange_t<_Rng> operator()(\r\n            _Rng&& _Range, const _Ty& _Val, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            const auto _Count = _RANGES distance(_Range);\r\n            auto _UResult =\r\n                _Equal_range_unchecked(_Ubegin(_Range), _Count, _Val, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            auto _Result = _RANGES begin(_Range);\r\n            return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng>>(_Result, _STD move(_UResult));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Ty, class _Pr, class _Pj>\r\n        _NODISCARD static constexpr subrange<_It> _Equal_range_unchecked(\r\n            _It _First, iter_difference_t<_It> _Count, const _Ty& _Val, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_strict_weak_order<_Pr, const _Ty*, projected<_It, _Pj>>);\r\n\r\n            using _Diff = iter_difference_t<_It>;\r\n\r\n            while (_Count > 0) { // divide and conquer, check midpoint\r\n                const auto _Half = static_cast<_Diff>(_Count / 2);\r\n                auto _Mid        = _RANGES next(_First, _Half);\r\n\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_Mid), _Val)) { // range in second half\r\n                    _First = _STD move(_Mid);\r\n                    ++_First;\r\n                    _Count -= static_cast<_Diff>(_Half + 1);\r\n                } else if (_STD invoke(_Pred, _Val, _STD invoke(_Proj, *_Mid))) {\r\n                    _Count = _Half; // range in first half\r\n                } else { // range straddles _Mid, find the ends\r\n                    _First = _RANGES _Lower_bound_unchecked(_STD move(_First), _Half, _Val, _Pred, _Proj);\r\n                    ++_Mid;\r\n                    _Count -= static_cast<_Diff>(_Half + 1);\r\n                    _Mid = _RANGES _Upper_bound_unchecked(_STD move(_Mid), _Count, _Val, _Pred, _Proj);\r\n                    return {_STD move(_First), _STD move(_Mid)};\r\n                }\r\n            }\r\n\r\n            return {_First, _First};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Equal_range_fn equal_range;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Ty, class _Pr>\r\n_NODISCARD _CONSTEXPR20 bool binary_search(_FwdIt _First, _FwdIt _Last, const _Ty& _Val, _Pr _Pred) {\r\n    // test if _Val equivalent to some element\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    _UFirst           = _STD lower_bound(_UFirst, _ULast, _Val, _STD _Pass_fn(_Pred));\r\n    return _UFirst != _ULast && !_Pred(_Val, *_UFirst);\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Ty>\r\n_NODISCARD _CONSTEXPR20 bool binary_search(_FwdIt _First, _FwdIt _Last, const _Ty& _Val) {\r\n    // test if _Val equivalent to some element\r\n    return _STD binary_search(_First, _Last, _Val, less<>{});\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    struct _Binary_search_fn {\r\n        template <forward_iterator _It, sentinel_for<_It> _Se, class _Ty, class _Pj = identity,\r\n            indirect_strict_weak_order<const _Ty*, projected<_It, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr bool operator()(\r\n            _It _First, _Se _Last, const _Ty& _Val, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst      = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            const auto _ULast = _RANGES _Unwrap_sent<_It>(_STD move(_Last));\r\n            const auto _Count = _RANGES distance(_UFirst, _ULast);\r\n            _UFirst           = _RANGES _Lower_bound_unchecked(\r\n                          _STD move(_UFirst), _Count, _Val, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _UFirst != _ULast && !_STD invoke(_Pred, _Val, _STD invoke(_Proj, *_UFirst));\r\n        }\r\n\r\n        template <forward_range _Rng, class _Ty, class _Pj = identity,\r\n            indirect_strict_weak_order<const _Ty*, projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr bool operator()(_Rng&& _Range, const _Ty& _Val, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            const auto _Count  = _RANGES distance(_Range);\r\n            const auto _UFirst = _RANGES _Lower_bound_unchecked(\r\n                _Ubegin(_Range), _Count, _Val, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _UFirst != _Uend(_Range) && !_STD invoke(_Pred, _Val, _STD invoke(_Proj, *_UFirst));\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Binary_search_fn binary_search;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Diff1, class _Diff2>\r\n_NODISCARD constexpr auto _Idl_dist_add(_Diff1 _Lhs, _Diff2 _Rhs) {\r\n    (void) _Lhs;\r\n    (void) _Rhs;\r\n#if _HAS_CXX20\r\n    if constexpr (is_same_v<_Diff1, ranges::_Distance_unbounded> || is_same_v<_Diff2, ranges::_Distance_unbounded>) {\r\n        return ranges::_Distance_unbounded{};\r\n    } else\r\n#endif // _HAS_CXX20\r\n    {\r\n        if constexpr (is_same_v<_Diff1, _Distance_unknown> || is_same_v<_Diff2, _Distance_unknown>) {\r\n            return _Distance_unknown{};\r\n        } else {\r\n            return _Lhs + _Rhs;\r\n        }\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _OutIt, class _Pr>\r\n_CONSTEXPR20 _OutIt merge(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred) {\r\n    // copy merging ranges\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2 = _STD _Get_unwrapped(_Last2);\r\n    _DEBUG_ORDER_SET_UNWRAPPED(_InIt2, _UFirst1, _ULast1, _Pred);\r\n    _DEBUG_ORDER_SET_UNWRAPPED(_InIt1, _UFirst2, _ULast2, _Pred);\r\n    const auto _Count1 = _STD _Idl_distance<_InIt1>(_UFirst1, _ULast1);\r\n    const auto _Count2 = _STD _Idl_distance<_InIt2>(_UFirst2, _ULast2);\r\n    auto _UDest        = _STD _Get_unwrapped_n(_Dest, _STD _Idl_dist_add(_Count1, _Count2));\r\n    if (_UFirst1 != _ULast1 && _UFirst2 != _ULast2) {\r\n        for (;;) {\r\n            if (_DEBUG_LT_PRED(_Pred, *_UFirst2, *_UFirst1)) {\r\n                *_UDest = *_UFirst2;\r\n                ++_UDest;\r\n                ++_UFirst2;\r\n\r\n                if (_UFirst2 == _ULast2) {\r\n                    break;\r\n                }\r\n            } else {\r\n                *_UDest = *_UFirst1;\r\n                ++_UDest;\r\n                ++_UFirst1;\r\n\r\n                if (_UFirst1 == _ULast1) {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    _UDest = _STD _Copy_unchecked(_UFirst1, _ULast1, _UDest); // copy any tail\r\n    _STD _Seek_wrapped(_Dest, _STD _Copy_unchecked(_UFirst2, _ULast2, _UDest));\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _OutIt>\r\n_CONSTEXPR20 _OutIt merge(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest) {\r\n    // copy merging ranges\r\n    return _STD merge(_First1, _Last1, _First2, _Last2, _Dest, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _FwdIt3, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt3 merge(_ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _FwdIt3 _Dest,\r\n    _Pr _Pred) noexcept /* terminates */ {\r\n    // copy merging ranges\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt3);\r\n    return _STD merge(_First1, _Last1, _First2, _Last2, _Dest, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _FwdIt3,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt3 merge(_ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _FwdIt3 _Dest) noexcept\r\n/* terminates */ {\r\n    // copy merging ranges\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt3);\r\n    return _STD merge(_First1, _Last1, _First2, _Last2, _Dest);\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In1, class _In2, class _Out>\r\n    using merge_result = in_in_out_result<_In1, _In2, _Out>;\r\n\r\n    class _Merge_fn {\r\n    public:\r\n        template <input_iterator _It1, sentinel_for<_It1> _Se1, input_iterator _It2, sentinel_for<_It2> _Se2,\r\n            weakly_incrementable _Out, class _Pr = ranges::less, class _Pj1 = identity, class _Pj2 = identity>\r\n            requires mergeable<_It1, _It2, _Out, _Pr, _Pj1, _Pj2>\r\n        static constexpr merge_result<_It1, _It2, _Out> operator()(_It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2,\r\n            _Out _Output, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n            auto _UFirst1      = _RANGES _Unwrap_iter<_Se1>(_STD move(_First1));\r\n            auto _ULast1       = _RANGES _Unwrap_sent<_It1>(_STD move(_Last1));\r\n            const auto _Count1 = _RANGES _Idl_distance<_It1>(_UFirst1, _ULast1);\r\n            auto _UFirst2      = _RANGES _Unwrap_iter<_Se2>(_STD move(_First2));\r\n            auto _ULast2       = _RANGES _Unwrap_sent<_It2>(_STD move(_Last2));\r\n            const auto _Count2 = _RANGES _Idl_distance<_It2>(_UFirst2, _ULast2);\r\n            const auto _Count  = _STD _Idl_dist_add(_Count1, _Count2);\r\n            auto _UResult      = _Merge_unchecked(_STD move(_UFirst1), _STD move(_ULast1), _STD move(_UFirst2),\r\n                     _STD move(_ULast2), _STD _Get_unwrapped_n(_STD move(_Output), _Count), _STD _Pass_fn(_Pred),\r\n                     _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in1));\r\n            _STD _Seek_wrapped(_First2, _STD move(_UResult.in2));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First1), _STD move(_First2), _STD move(_Output)};\r\n        }\r\n\r\n        template <input_range _Rng1, input_range _Rng2, weakly_incrementable _Out, class _Pr = ranges::less,\r\n            class _Pj1 = identity, class _Pj2 = identity>\r\n            requires mergeable<iterator_t<_Rng1>, iterator_t<_Rng2>, _Out, _Pr, _Pj1, _Pj2>\r\n        static constexpr merge_result<borrowed_iterator_t<_Rng1>, borrowed_iterator_t<_Rng2>, _Out> operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2, _Out _Output, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            const auto _Count1 = _RANGES _Idl_distance(_Range1);\r\n            const auto _Count2 = _RANGES _Idl_distance(_Range2);\r\n            const auto _Count  = _STD _Idl_dist_add(_Count1, _Count2);\r\n            auto _First1       = _RANGES begin(_Range1);\r\n            auto _First2       = _RANGES begin(_Range2);\r\n            auto _UResult      = _Merge_unchecked(_RANGES _Unwrap_range_iter<_Rng1>(_STD move(_First1)), _Uend(_Range1),\r\n                     _RANGES _Unwrap_range_iter<_Rng2>(_STD move(_First2)), _Uend(_Range2),\r\n                     _STD _Get_unwrapped_n(_STD move(_Output), _Count), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1),\r\n                     _STD _Pass_fn(_Proj2));\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in1));\r\n            _STD _Seek_wrapped(_First2, _STD move(_UResult.in2));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First1), _STD move(_First2), _STD move(_Output)};\r\n        }\r\n\r\n    private:\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Out, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr merge_result<_It1, _It2, _Out> _Merge_unchecked(_It1 _First1, const _Se1 _Last1,\r\n            _It2 _First2, const _Se2 _Last2, _Out _Output, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(weakly_incrementable<_Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(mergeable<_It1, _It2, _Out, _Pr, _Pj1, _Pj2>);\r\n\r\n            for (;; ++_Output) {\r\n                if (_First1 == _Last1) {\r\n                    auto _Copy_result =\r\n                        _RANGES _Copy_unchecked(_STD move(_First2), _STD move(_Last2), _STD move(_Output));\r\n                    return {_STD move(_First1), _STD move(_Copy_result.in), _STD move(_Copy_result.out)};\r\n                }\r\n\r\n                if (_First2 == _Last2) {\r\n                    auto _Copy_result =\r\n                        _RANGES _Copy_unchecked(_STD move(_First1), _STD move(_Last1), _STD move(_Output));\r\n                    return {_STD move(_Copy_result.in), _STD move(_First2), _STD move(_Copy_result.out)};\r\n                }\r\n\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj2, *_First2), _STD invoke(_Proj1, *_First1))) {\r\n                    *_Output = *_First2;\r\n                    ++_First2;\r\n                } else {\r\n                    *_Output = *_First1;\r\n                    ++_First1;\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Merge_fn merge;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\n// The \"usual invariants\" for the inplace_merge helpers below are:\r\n// [_First, _Mid) and [_Mid, _Last) are sorted\r\n// _Pred(*_Mid, *_First)             note: this means *_Mid is the \"lowest\" element\r\n// _Pred(*prev(_Last), *prev(_Mid))  note: this means *prev(_Mid) is the \"highest\" element\r\n// _Count1 == distance(_First, _Mid)\r\n// _Count2 == distance(_Mid, _Last)\r\n// _Count1 > 1\r\n// _Count2 > 1\r\ntemplate <class _BidIt>\r\nvoid _Rotate_one_right(_BidIt _First, _BidIt _Mid, _BidIt _Last) {\r\n    // exchanges the range [_First, _Mid) with [_Mid, _Last)\r\n    // pre: distance(_Mid, _Last) is 1\r\n    _Iter_value_t<_BidIt> _Temp(_STD move(*_Mid));\r\n    _STD _Move_backward_unchecked(_First, _Mid, _Last);\r\n    *_First = _STD move(_Temp);\r\n}\r\n\r\ntemplate <class _BidIt>\r\nvoid _Rotate_one_left(_BidIt _First, _BidIt _Mid, _BidIt _Last) {\r\n    // exchanges the range [_First, _Mid) with [_Mid, _Last)\r\n    // pre: distance(_First, _Mid) is 1\r\n    _Iter_value_t<_BidIt> _Temp(_STD move(*_First));\r\n    *_STD _Move_unchecked(_Mid, _Last, _First) = _STD move(_Temp);\r\n}\r\n\r\ntemplate <class _BidIt, class _Pr>\r\nvoid _Inplace_merge_buffer_left(\r\n    _BidIt _First, _BidIt _Mid, _BidIt _Last, _Iter_value_t<_BidIt>* const _Temp_ptr, _Pr _Pred) {\r\n    // move the range [_First, _Mid) to _Temp_ptr, and merge it with [_Mid, _Last) to _First\r\n    // usual invariants apply\r\n    using _Ptr_ty = _Iter_value_t<_BidIt>*;\r\n    _Uninitialized_backout<_Ptr_ty> _Backout{_Temp_ptr, _STD _Uninitialized_move_unchecked(_First, _Mid, _Temp_ptr)};\r\n    _Ptr_ty _Left_first      = _Temp_ptr;\r\n    const _Ptr_ty _Left_last = _Backout._Last - 1; // avoid a compare with the highest element\r\n    *_First                  = _STD move(*_Mid); // the lowest element is now in position\r\n    ++_First;\r\n    ++_Mid;\r\n    for (;;) {\r\n        if (_Pred(*_Mid, *_Left_first)) { // take element from the right partition\r\n            *_First = _STD move(*_Mid);\r\n            ++_First;\r\n            ++_Mid;\r\n            if (_Mid == _Last) {\r\n                _STD _Move_unchecked(_Left_first, _Backout._Last, _First); // move any tail (and the highest element)\r\n                return;\r\n            }\r\n        } else { // take element from the left partition\r\n            *_First = _STD move(*_Left_first);\r\n            ++_First;\r\n            ++_Left_first;\r\n            if (_Left_first == _Left_last) {\r\n                // move the remaining right partition and highest element, since *_Left_first is highest\r\n                *_STD _Move_unchecked(_Mid, _Last, _First) = _STD move(*_Left_last);\r\n                return;\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt, class _Pr>\r\nvoid _Inplace_merge_buffer_right(\r\n    _BidIt _First, _BidIt _Mid, _BidIt _Last, _Iter_value_t<_BidIt>* const _Temp_ptr, _Pr _Pred) {\r\n    // move the range [_Mid, _Last) to _Temp_ptr, and merge it with [_First, _Mid) to _Last\r\n    // usual invariants apply\r\n    using _Ptr_ty = _Iter_value_t<_BidIt>*;\r\n    _Uninitialized_backout<_Ptr_ty> _Backout{_Temp_ptr, _STD _Uninitialized_move_unchecked(_Mid, _Last, _Temp_ptr)};\r\n    *--_Last                   = _STD move(*--_Mid); // move the highest element into position\r\n    const _Ptr_ty _Right_first = _Temp_ptr;\r\n    _Ptr_ty _Right_last        = _Backout._Last - 1;\r\n    --_Mid;\r\n    for (;;) {\r\n        if (_Pred(*_Right_last, *_Mid)) { // merge from the left partition\r\n            *--_Last = _STD move(*_Mid);\r\n            if (_First == _Mid) {\r\n                *--_Last = _STD move(*_Right_last); // to make [_Right_first, _Right_last) a half-open range\r\n                _STD _Move_backward_unchecked(_Right_first, _Right_last, _Last); // move any head (and lowest element)\r\n                return;\r\n            }\r\n\r\n            --_Mid;\r\n        } else { // merge from the right partition\r\n            *--_Last = _STD move(*_Right_last);\r\n            --_Right_last;\r\n            if (_Right_first == _Right_last) { // we can't compare with *_Right_first, but we know it is lowest\r\n                *--_Last = _STD move(*_Mid); // restore half-open range [_First, _Mid)\r\n                _STD _Move_backward_unchecked(_First, _Mid, _Last);\r\n                *_First = _STD move(*_Right_first);\r\n                return;\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt, class _Pr>\r\nvoid _Buffered_inplace_merge_unchecked(_BidIt _First, _BidIt _Mid, _BidIt _Last, _Iter_diff_t<_BidIt> _Count1,\r\n    _Iter_diff_t<_BidIt> _Count2, _Iter_value_t<_BidIt>* _Temp_ptr, ptrdiff_t _Capacity, _Pr _Pred);\r\n\r\ntemplate <class _BidIt, class _Pr>\r\nvoid _Buffered_inplace_merge_divide_and_conquer2(_BidIt _First, _BidIt _Mid, _BidIt _Last, _Iter_diff_t<_BidIt> _Count1,\r\n    _Iter_diff_t<_BidIt> _Count2, _Iter_value_t<_BidIt>* const _Temp_ptr, const ptrdiff_t _Capacity, _Pr _Pred,\r\n    _BidIt _Firstn, _BidIt _Lastn, _Iter_diff_t<_BidIt> _Count1n, _Iter_diff_t<_BidIt> _Count2n) {\r\n    // common block of _Buffered_inplace_merge_divide_and_conquer, below\r\n    using _Diff  = _Iter_diff_t<_BidIt>;\r\n    _BidIt _Midn = _STD _Buffered_rotate_unchecked(_Firstn, _Mid, _Lastn, static_cast<_Diff>(_Count1 - _Count1n),\r\n        _Count2n, _Temp_ptr, _Capacity); // rearrange middle\r\n    _STD _Buffered_inplace_merge_unchecked(\r\n        _First, _Firstn, _Midn, _Count1n, _Count2n, _Temp_ptr, _Capacity, _Pred); // merge each new part\r\n    _STD _Buffered_inplace_merge_unchecked(_Midn, _Lastn, _Last, static_cast<_Diff>(_Count1 - _Count1n),\r\n        static_cast<_Diff>(_Count2 - _Count2n), _Temp_ptr, _Capacity, _Pred);\r\n}\r\n\r\ntemplate <class _BidIt, class _Pr>\r\nvoid _Buffered_inplace_merge_divide_and_conquer(_BidIt _First, _BidIt _Mid, _BidIt _Last, _Iter_diff_t<_BidIt> _Count1,\r\n    _Iter_diff_t<_BidIt> _Count2, _Iter_value_t<_BidIt>* const _Temp_ptr, const ptrdiff_t _Capacity, _Pr _Pred) {\r\n    // merge sorted [_First, _Mid) with sorted [_Mid, _Last)\r\n    // usual invariants apply\r\n    using _Diff = _Iter_diff_t<_BidIt>;\r\n    if (_Count1 <= _Count2) {\r\n        const _Diff _Count1n = _Count1 >> 1; // shift for codegen\r\n        const _BidIt _Firstn = _STD next(_First, _Count1n);\r\n        const _BidIt _Lastn  = _STD lower_bound(_Mid, _Last, *_Firstn, _Pred);\r\n        _STD _Buffered_inplace_merge_divide_and_conquer2(_First, _Mid, _Last, _Count1, _Count2, _Temp_ptr, _Capacity,\r\n            _Pred, _Firstn, _Lastn, _Count1n, _STD distance(_Mid, _Lastn));\r\n    } else {\r\n        const _Diff _Count2n = _Count2 >> 1; // shift for codegen\r\n        const _BidIt _Lastn  = _STD next(_Mid, _Count2n);\r\n        const _BidIt _Firstn = _STD upper_bound(_First, _Mid, *_Lastn, _Pred);\r\n        _STD _Buffered_inplace_merge_divide_and_conquer2(_First, _Mid, _Last, _Count1, _Count2, _Temp_ptr, _Capacity,\r\n            _Pred, _Firstn, _Lastn, _STD distance(_First, _Firstn), _Count2n);\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt, class _Pr>\r\nvoid _Buffered_inplace_merge_unchecked_impl(_BidIt _First, _BidIt _Mid, _BidIt _Last, _Iter_diff_t<_BidIt> _Count1,\r\n    _Iter_diff_t<_BidIt> _Count2, _Iter_value_t<_BidIt>* const _Temp_ptr, const ptrdiff_t _Capacity, _Pr _Pred) {\r\n    // merge sorted [_First, _Mid) with sorted [_Mid, _Last)\r\n    // usual invariants apply\r\n    if (_Count1 <= _Count2 && _Count1 <= _Capacity) {\r\n        _STD _Inplace_merge_buffer_left(_First, _Mid, _Last, _Temp_ptr, _Pred);\r\n    } else if (_Count2 <= _Capacity) {\r\n        _STD _Inplace_merge_buffer_right(_First, _Mid, _Last, _Temp_ptr, _Pred);\r\n    } else {\r\n        _STD _Buffered_inplace_merge_divide_and_conquer(\r\n            _First, _Mid, _Last, _Count1, _Count2, _Temp_ptr, _Capacity, _Pred);\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt, class _Pr>\r\nvoid _Buffered_inplace_merge_unchecked(_BidIt _First, _BidIt _Mid, _BidIt _Last, _Iter_diff_t<_BidIt> _Count1,\r\n    _Iter_diff_t<_BidIt> _Count2, _Iter_value_t<_BidIt>* const _Temp_ptr, const ptrdiff_t _Capacity, _Pr _Pred) {\r\n    // merge sorted [_First, _Mid) with sorted [_Mid, _Last)\r\n    // usual invariants *do not* apply; only sortedness applies\r\n    // establish the usual invariants (explained in inplace_merge)\r\n    if (_Mid == _Last) {\r\n        return;\r\n    }\r\n\r\n    for (;;) {\r\n        if (_First == _Mid) {\r\n            return;\r\n        }\r\n\r\n        if (_Pred(*_Mid, *_First)) {\r\n            break;\r\n        }\r\n\r\n        ++_First;\r\n        --_Count1;\r\n    }\r\n\r\n    const auto _Highest = _STD _Prev_iter(_Mid);\r\n    do {\r\n        --_Last;\r\n        --_Count2;\r\n        if (_Mid == _Last) {\r\n            _STD _Rotate_one_right(_First, _Mid, ++_Last);\r\n            return;\r\n        }\r\n    } while (!_Pred(*_Last, *_Highest));\r\n\r\n    ++_Last;\r\n    ++_Count2;\r\n\r\n    if (_Count1 == 1) {\r\n        _STD _Rotate_one_left(_First, _Mid, _Last);\r\n        return;\r\n    }\r\n\r\n    _STD _Buffered_inplace_merge_unchecked_impl(_First, _Mid, _Last, _Count1, _Count2, _Temp_ptr, _Capacity, _Pred);\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt, class _Pr>\r\nvoid inplace_merge(_BidIt _First, _BidIt _Mid, _BidIt _Last, _Pr _Pred) {\r\n    // merge [_First, _Mid) with [_Mid, _Last)\r\n    _STD _Adl_verify_range(_First, _Mid);\r\n    _STD _Adl_verify_range(_Mid, _Last);\r\n    auto _UFirst = _STD _Get_unwrapped(_First);\r\n    auto _UMid   = _STD _Get_unwrapped(_Mid);\r\n    auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    _DEBUG_ORDER_UNWRAPPED(_UFirst, _UMid, _Pred);\r\n\r\n    // establish the usual invariants:\r\n    if (_UMid == _ULast) {\r\n        return;\r\n    }\r\n\r\n    for (;;) {\r\n        if (_UFirst == _UMid) {\r\n            return;\r\n        }\r\n\r\n        if (_Pred(*_UMid, *_UFirst)) { // found that *_UMid goes in *_UFirst's position\r\n            break;\r\n        }\r\n\r\n        ++_UFirst;\r\n    }\r\n\r\n    const auto _Highest = _STD _Prev_iter(_UMid);\r\n    do {\r\n        --_ULast;\r\n        if (_UMid == _ULast) { // rotate only element remaining in right partition to the beginning, without allocating\r\n            _STD _Rotate_one_right(_UFirst, _UMid, ++_ULast);\r\n            return;\r\n        }\r\n    } while (!_Pred(*_ULast, *_Highest)); // found that *_Highest goes in *_ULast's position\r\n\r\n    ++_ULast;\r\n\r\n    const auto _Count1 = _STD distance(_UFirst, _UMid);\r\n    if (_Count1 == 1) { // rotate only element remaining in left partition to the end, without allocating\r\n        _STD _Rotate_one_left(_UFirst, _UMid, _ULast);\r\n        return;\r\n    }\r\n\r\n    const auto _Count2 = _STD distance(_UMid, _ULast);\r\n    _Optimistic_temporary_buffer2<_Iter_value_t<_BidIt>> _Temp_buf{(_STD min) (_Count1, _Count2)};\r\n    _STD _Buffered_inplace_merge_unchecked_impl(\r\n        _UFirst, _UMid, _ULast, _Count1, _Count2, _Temp_buf._Data, _Temp_buf._Capacity, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt>\r\nvoid inplace_merge(_BidIt _First, _BidIt _Mid, _BidIt _Last) {\r\n    // merge [_First, _Mid) with [_Mid, _Last)\r\n    _STD inplace_merge(_First, _Mid, _Last, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _BidIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid inplace_merge(_ExPo&&, _BidIt _First, _BidIt _Mid, _BidIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // merge [_First, _Mid) with [_Mid, _Last)\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_CPP17_MUTABLE_BIDIRECTIONAL_ITERATOR(_BidIt);\r\n    _STD inplace_merge(_First, _Mid, _Last, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _BidIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid inplace_merge(_ExPo&&, _BidIt _First, _BidIt _Mid, _BidIt _Last) noexcept /* terminates */ {\r\n    // merge [_First, _Mid) with [_Mid, _Last)\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_CPP17_MUTABLE_BIDIRECTIONAL_ITERATOR(_BidIt);\r\n    _STD inplace_merge(_First, _Mid, _Last);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <forward_iterator _It, sentinel_for<_It> _Se, class _Pr, class _Pj>\r\n        requires indirect_strict_weak_order<_Pr, projected<_It, _Pj>>\r\n    _NODISCARD constexpr _It _Is_sorted_until_unchecked(_It _First, const _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n        if (_First == _Last) {\r\n            return _First;\r\n        }\r\n\r\n#if _VECTORIZED_IS_SORTED_UNTIL\r\n        if constexpr (_Is_min_max_iterators_safe<_It> && sized_sentinel_for<_Se, _It> && is_same_v<_Pj, identity>) {\r\n            constexpr bool _Is_greater = _Is_predicate_greater<_It, _Pr>;\r\n            if constexpr (_Is_greater || _Is_predicate_less<_It, _Pr>) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    const auto _First_ptr = _STD _To_address(_First);\r\n                    const auto _Last_ptr  = _STD _To_address(_First + (_Last - _First));\r\n                    const auto _Result    = _STD _Is_sorted_until_vectorized(_First_ptr, _Last_ptr, _Is_greater);\r\n\r\n                    if constexpr (is_pointer_v<_It>) {\r\n                        return _Result;\r\n                    } else {\r\n                        return _First + static_cast<iter_difference_t<_It>>(_Result - _First_ptr);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_IS_SORTED_UNTIL ^^^\r\n\r\n        for (auto _Prev = _First; ++_First != _Last; ++_Prev) {\r\n            if (_STD invoke(_Pred, _STD invoke(_Proj, *_First), _STD invoke(_Proj, *_Prev))) {\r\n                break;\r\n            }\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    template <bidirectional_iterator _It>\r\n    void _Rotate_one_right(_It _First, _It _Mid, _It _Last) {\r\n        // exchanges the range [_First, _Mid) with [_Mid, _Last)\r\n        _STL_INTERNAL_CHECK(_RANGES next(_Mid) == _Last);\r\n        iter_value_t<_It> _Temp(_RANGES iter_move(_Mid));\r\n        _RANGES _Move_backward_common(_First, _STD move(_Mid), _STD move(_Last));\r\n        *_First = _STD move(_Temp);\r\n    }\r\n\r\n    template <bidirectional_iterator _It>\r\n    void _Rotate_one_left(_It _First, _It _Mid, _It _Last) {\r\n        // exchanges the range [_First, _Mid) with [_Mid, _Last)\r\n        _STL_INTERNAL_CHECK(_RANGES next(_First) == _Mid);\r\n        iter_value_t<_It> _Temp(_RANGES iter_move(_First));\r\n        auto _Result = _RANGES _Move_unchecked(_STD move(_Mid), _STD move(_Last), _STD move(_First));\r\n        *_Result.out = _STD move(_Temp);\r\n    }\r\n\r\n    template <bidirectional_iterator _It, class _Pr, class _Pj>\r\n        requires sortable<_It, _Pr, _Pj>\r\n    void _Inplace_merge_buffer_left(_It _First, _It _Mid, _It _Last, iter_value_t<_It>* _Left_first,\r\n        const ptrdiff_t _Capacity, _Pr _Pred, _Pj _Proj) {\r\n        // move the range [_First, _Mid) to _Left_first, and merge it with [_Mid, _Last) to _First\r\n        // usual invariants apply\r\n        using _Ty = iter_value_t<_It>;\r\n\r\n        _Ty* _Left_last = _RANGES _Uninitialized_move_unchecked(_First, _Mid, _Left_first, _Left_first + _Capacity).out;\r\n        _Uninitialized_backout<_Ty*> _Backout{_Left_first, _Left_last};\r\n\r\n        // We already know that _Backout._Last - 1 is the highest element, so do not compare against it again.\r\n        --_Left_last;\r\n\r\n        // We already know that _Mid points to the lowest element and that there is more than 1 element left.\r\n        *_First = _RANGES iter_move(_Mid);\r\n        ++_First;\r\n        ++_Mid;\r\n\r\n        for (;;) {\r\n            if (_STD invoke(_Pred, _STD invoke(_Proj, *_Mid), _STD invoke(_Proj, *_Left_first))) {\r\n                *_First = _RANGES iter_move(_Mid); // the lowest element is now in position\r\n                ++_First;\r\n                ++_Mid;\r\n                if (_Mid == _Last) {\r\n                    // move the remaining left partition\r\n                    _RANGES _Move_unchecked(_Left_first, _Backout._Last, _First);\r\n                    return;\r\n                }\r\n            } else {\r\n                *_First = _RANGES iter_move(_Left_first);\r\n                ++_First;\r\n                ++_Left_first;\r\n                if (_Left_first == _Left_last) {\r\n                    // move the remaining right partition and highest element, since *_Left_first is highest\r\n                    const auto _Final = _RANGES _Move_unchecked(_Mid, _Last, _First);\r\n                    *_Final.out       = _RANGES iter_move(_Left_first);\r\n                    return;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    template <bidirectional_iterator _It, class _Pr, class _Pj>\r\n        requires sortable<_It, _Pr, _Pj>\r\n    void _Inplace_merge_buffer_right(_It _First, _It _Mid, _It _Last, iter_value_t<_It>* _Right_first,\r\n        const ptrdiff_t _Capacity, _Pr _Pred, _Pj _Proj) {\r\n        // move the range [_Mid, _Last) to _Right_first, and merge it with [_First, _Mid) to _Last\r\n        // usual invariants apply\r\n        using _Ty = iter_value_t<_It>;\r\n\r\n        _Ty* _Right_last =\r\n            _RANGES _Uninitialized_move_unchecked(_Mid, _Last, _Right_first, _Right_first + _Capacity).out;\r\n        _Uninitialized_backout<_Ty*> _Backout{_Right_first, _Right_last};\r\n\r\n        // We already know that _Mid points to the next highest element and that there is more than 1 element left.\r\n        *--_Last = _RANGES iter_move(--_Mid);\r\n\r\n        // We already know that _Backout._Last - 1 is the highest element, so do not compare against it again.\r\n        --_Mid;\r\n        --_Right_last;\r\n        for (;;) {\r\n            if (_STD invoke(_Pred, _STD invoke(_Proj, *_Right_last), _STD invoke(_Proj, *_Mid))) {\r\n                *--_Last = _RANGES iter_move(_Mid); // the lowest element is now in position\r\n                if (_First == _Mid) {\r\n                    ++_Right_last; // to make [_Right_first, _Right_last) a half-open range\r\n                    _RANGES _Move_backward_common(_Right_first, _Right_last, _STD move(_Last));\r\n                    return;\r\n                }\r\n                --_Mid;\r\n            } else {\r\n                *--_Last = _RANGES iter_move(_Right_last);\r\n                --_Right_last;\r\n                if (_Right_first == _Right_last) { // we can't compare with *_Right_first, but we know it is lowest\r\n                    ++_Mid; // restore half-open range [_First, _Mid)\r\n                    _RANGES _Move_backward_common(_First, _STD move(_Mid), _STD move(_Last));\r\n                    *_First = _RANGES iter_move(_Right_first);\r\n                    return;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    template <bidirectional_iterator _It, class _Pr, class _Pj>\r\n        requires sortable<_It, _Pr, _Pj>\r\n    void _Buffered_inplace_merge_common(_It _First, _It _Mid, _It _Last, iter_difference_t<_It> _Count1,\r\n        iter_difference_t<_It> _Count2, iter_value_t<_It>* _Temp_ptr, ptrdiff_t _Capacity, _Pr _Pred, _Pj _Proj);\r\n\r\n    template <bidirectional_iterator _It, class _Pr, class _Pj>\r\n        requires sortable<_It, _Pr, _Pj>\r\n    void _Buffered_inplace_merge_divide_and_conquer2(_It _First, _It _Mid, _It _Last,\r\n        const iter_difference_t<_It> _Count1, const iter_difference_t<_It> _Count2, iter_value_t<_It>* const _Temp_ptr,\r\n        const ptrdiff_t _Capacity, _Pr _Pred, _Pj _Proj, _It _Firstn, _It _Lastn, const iter_difference_t<_It> _Count1n,\r\n        const iter_difference_t<_It> _Count2n) {\r\n        // common block of _Buffered_inplace_merge_divide_and_conquer, below\r\n        _It _Midn = _RANGES _Buffered_rotate_common(_Firstn, _Mid, _Lastn,\r\n            static_cast<iter_difference_t<_It>>(_Count1 - _Count1n), _Count2n, _Temp_ptr,\r\n            _Capacity); // rearrange middle\r\n        _RANGES _Buffered_inplace_merge_common(\r\n            _First, _Firstn, _Midn, _Count1n, _Count2n, _Temp_ptr, _Capacity, _Pred, _Proj); // merge each new part\r\n        _RANGES _Buffered_inplace_merge_common(_Midn, _Lastn, _Last,\r\n            static_cast<iter_difference_t<_It>>(_Count1 - _Count1n),\r\n            static_cast<iter_difference_t<_It>>(_Count2 - _Count2n), _Temp_ptr, _Capacity, _Pred, _Proj);\r\n    }\r\n\r\n    template <bidirectional_iterator _It, class _Pr, class _Pj>\r\n        requires sortable<_It, _Pr, _Pj>\r\n    void _Buffered_inplace_merge_divide_and_conquer(_It _First, _It _Mid, _It _Last,\r\n        const iter_difference_t<_It> _Count1, const iter_difference_t<_It> _Count2, iter_value_t<_It>* const _Temp_ptr,\r\n        const ptrdiff_t _Capacity, _Pr _Pred, _Pj _Proj) {\r\n        // merge sorted [_First, _Mid) with sorted [_Mid, _Last)\r\n        // usual invariants apply\r\n        if (_Count1 <= _Count2) {\r\n            const iter_difference_t<_It> _Count1n = _Count1 >> 1; // shift for codegen\r\n            _It _Firstn                           = _RANGES next(_First, _Count1n);\r\n            _It _Lastn = _RANGES _Lower_bound_unchecked(_Mid, _Count1, _STD invoke(_Proj, *_Firstn), _Pred, _Proj);\r\n            const auto _Count2n = _RANGES distance(_Mid, _Lastn);\r\n            _RANGES _Buffered_inplace_merge_divide_and_conquer2(_STD move(_First), _STD move(_Mid), _STD move(_Last),\r\n                _Count1, _Count2, _Temp_ptr, _Capacity, _Pred, _Proj, _STD move(_Firstn), _STD move(_Lastn), _Count1n,\r\n                _Count2n);\r\n        } else {\r\n            const iter_difference_t<_It> _Count2n = _Count2 >> 1; // shift for codegen\r\n            _It _Lastn                            = _RANGES next(_Mid, _Count2n);\r\n            _It _Firstn = _RANGES _Upper_bound_unchecked(_First, _Count2, _STD invoke(_Proj, *_Lastn), _Pred, _Proj);\r\n            const auto _Count1n = _RANGES distance(_First, _Firstn);\r\n            _RANGES _Buffered_inplace_merge_divide_and_conquer2(_STD move(_First), _STD move(_Mid), _STD move(_Last),\r\n                _Count1, _Count2, _Temp_ptr, _Capacity, _Pred, _Proj, _STD move(_Firstn), _STD move(_Lastn), _Count1n,\r\n                _Count2n);\r\n        }\r\n    }\r\n\r\n    template <bidirectional_iterator _It, class _Pr, class _Pj>\r\n        requires sortable<_It, _Pr, _Pj>\r\n    void _Buffered_inplace_merge_common(_It _First, _It _Mid, _It _Last, iter_difference_t<_It> _Count1,\r\n        iter_difference_t<_It> _Count2, iter_value_t<_It>* const _Temp_ptr, const ptrdiff_t _Capacity, _Pr _Pred,\r\n        _Pj _Proj) {\r\n        // merge sorted [_First, _Mid) with sorted [_Mid, _Last)\r\n        // usual invariants *do not* apply; only sortedness applies\r\n        // establish the usual invariants\r\n        if (_First == _Mid || _Mid == _Last) {\r\n            return;\r\n        }\r\n\r\n        // Find first element in [_First, _Mid) that is greater than *_Mid\r\n        while (!_STD invoke(_Pred, _STD invoke(_Proj, *_Mid), _STD invoke(_Proj, *_First))) {\r\n            --_Count1;\r\n            if (++_First == _Mid) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        // Find last element in [_Mid, _Last) that is less than *--_Mid\r\n        const auto _Highest = _RANGES prev(_Mid);\r\n        do {\r\n            // Fast early return if there is only one element to be moved\r\n            if (_Mid == --_Last) {\r\n                // rotate only element remaining in right partition to the beginning, without allocating\r\n                _RANGES _Rotate_one_right(_STD move(_First), _STD move(_Mid), _STD move(++_Last));\r\n                return;\r\n            }\r\n            --_Count2;\r\n        } while (!_STD invoke(_Pred, _STD invoke(_Proj, *_Last), _STD invoke(_Proj, *_Highest)));\r\n        ++_Last;\r\n        ++_Count2;\r\n\r\n        if (_Count1 == 1) {\r\n            _RANGES _Rotate_one_left(_STD move(_First), _STD move(_Mid), _STD move(_Last));\r\n            return;\r\n        }\r\n\r\n        if (_Count1 <= _Count2 && _Count1 <= _Capacity) {\r\n            _RANGES _Inplace_merge_buffer_left(\r\n                _STD move(_First), _STD move(_Mid), _STD move(_Last), _Temp_ptr, _Capacity, _Pred, _Proj);\r\n        } else if (_Count2 <= _Capacity) {\r\n            _RANGES _Inplace_merge_buffer_right(\r\n                _STD move(_First), _STD move(_Mid), _STD move(_Last), _Temp_ptr, _Capacity, _Pred, _Proj);\r\n        } else {\r\n            _RANGES _Buffered_inplace_merge_divide_and_conquer(_STD move(_First), _STD move(_Mid), _STD move(_Last),\r\n                _Count1, _Count2, _Temp_ptr, _Capacity, _Pred, _Proj);\r\n        }\r\n    }\r\n\r\n    class _Inplace_merge_fn {\r\n    public:\r\n        template <bidirectional_iterator _It, sentinel_for<_It> _Se, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<_It, _Pr, _Pj>\r\n        static _It operator()(_It _First, _It _Mid, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Mid);\r\n            _STD _Adl_verify_range(_Mid, _Last);\r\n\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast  = _RANGES _Get_final_iterator_unwrapped<_It>(_UFirst, _STD move(_Last));\r\n            _STD _Seek_wrapped(_First, _ULast);\r\n\r\n            _Inplace_merge_common(_STD move(_UFirst), _RANGES _Unwrap_iter<_Se>(_STD move(_Mid)), _STD move(_ULast),\r\n                _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _First;\r\n        }\r\n\r\n        template <bidirectional_range _Rng, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<iterator_t<_Rng>, _Pr, _Pj>\r\n        static borrowed_iterator_t<_Rng> operator()(\r\n            _Rng&& _Range, iterator_t<_Rng> _Mid, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            auto _First = _RANGES begin(_Range);\r\n            auto _Last  = _RANGES end(_Range);\r\n\r\n            _STD _Adl_verify_range(_First, _Mid);\r\n            _STD _Adl_verify_range(_Mid, _Last);\r\n\r\n            auto _UFirst = _RANGES _Unwrap_range_iter<_Rng>(_STD move(_First));\r\n            auto _ULast  = _RANGES _Get_final_iterator_unwrapped<iterator_t<_Rng>>(_UFirst, _STD move(_Last));\r\n            _STD _Seek_wrapped(_First, _ULast);\r\n\r\n            _Inplace_merge_common(_STD move(_UFirst), _RANGES _Unwrap_range_iter<_Rng>(_STD move(_Mid)),\r\n                _STD move(_ULast), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _First;\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Pr, class _Pj>\r\n        static void _Inplace_merge_common(_It _First, _It _Mid, _It _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(bidirectional_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sortable<_It, _Pr, _Pj>);\r\n\r\n            if (_First == _Mid || _Mid == _Last) {\r\n                return;\r\n            }\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n            _STL_VERIFY(_RANGES _Is_sorted_until_unchecked(_First, _Mid, _Pred, _Proj) == _Mid,\r\n                \"ranges::inplace_merge requires the range [first, middle) to be sorted\");\r\n            _STL_VERIFY(_RANGES _Is_sorted_until_unchecked(_Mid, _Last, _Pred, _Proj) == _Last,\r\n                \"ranges::inplace_merge requires the range [middle, last) to be sorted\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n            // Find first element in [_First, _Mid) that is greater than *_Mid\r\n            while (!_STD invoke(_Pred, _STD invoke(_Proj, *_Mid), _STD invoke(_Proj, *_First))) {\r\n                if (++_First == _Mid) {\r\n                    return;\r\n                }\r\n            }\r\n\r\n            // Fast early return if there is only one element to be moved\r\n            if (_Mid == --_Last) {\r\n                // rotate only element remaining in right partition to the beginning, without allocating\r\n                _RANGES _Rotate_one_right(_STD move(_First), _STD move(_Mid), _STD move(++_Last));\r\n                return;\r\n            }\r\n\r\n            // Find last element in [_Mid, _Last) that is less than *--_Mid\r\n            const auto _Highest = _RANGES prev(_Mid);\r\n            while (!_STD invoke(_Pred, _STD invoke(_Proj, *_Last), _STD invoke(_Proj, *_Highest))) {\r\n                if (_Mid == --_Last) {\r\n                    // rotate only element remaining in right partition to the beginning, without allocating\r\n                    _RANGES _Rotate_one_right(_STD move(_First), _STD move(_Mid), _STD move(++_Last));\r\n                    return;\r\n                }\r\n            }\r\n            ++_Last;\r\n\r\n            const iter_difference_t<_It> _Count1 = _RANGES distance(_First, _Mid);\r\n            if (_Count1 == 1) { // rotate only element remaining in left partition to the end, without allocating\r\n                _RANGES _Rotate_one_left(_STD move(_First), _STD move(_Mid), _STD move(_Last));\r\n                return;\r\n            }\r\n\r\n            const iter_difference_t<_It> _Count2 = _RANGES distance(_Mid, _Last);\r\n            _Optimistic_temporary_buffer2<iter_value_t<_It>> _Temp_buf{(_STD min) (_Count1, _Count2)};\r\n            if (_Count1 <= _Count2 && _Count1 <= _Temp_buf._Capacity) {\r\n                _RANGES _Inplace_merge_buffer_left(_STD move(_First), _STD move(_Mid), _STD move(_Last),\r\n                    _Temp_buf._Data, _Temp_buf._Capacity, _Pred, _Proj);\r\n            } else if (_Count2 <= _Temp_buf._Capacity) {\r\n                _RANGES _Inplace_merge_buffer_right(_STD move(_First), _STD move(_Mid), _STD move(_Last),\r\n                    _Temp_buf._Data, _Temp_buf._Capacity, _Pred, _Proj);\r\n            } else {\r\n                _RANGES _Buffered_inplace_merge_divide_and_conquer(_STD move(_First), _STD move(_Mid), _STD move(_Last),\r\n                    _Count1, _Count2, _Temp_buf._Data, _Temp_buf._Capacity, _Pred, _Proj);\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Inplace_merge_fn inplace_merge;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _BidIt, class _Pr>\r\n_CONSTEXPR20 _BidIt _Insertion_sort_unchecked(const _BidIt _First, const _BidIt _Last, _Pr _Pred) {\r\n    // insertion sort [_First, _Last)\r\n    if (_First != _Last) {\r\n        for (_BidIt _Mid = _First; ++_Mid != _Last;) { // order next element\r\n            _BidIt _Hole = _Mid;\r\n            _Iter_value_t<_BidIt> _Val(_STD move(*_Mid));\r\n\r\n            if (_DEBUG_LT_PRED(_Pred, _Val, *_First)) { // found new earliest element, move to front\r\n                _STD _Move_backward_unchecked(_First, _Mid, ++_Hole);\r\n                *_First = _STD move(_Val);\r\n            } else { // look for insertion point after first\r\n                for (_BidIt _Prev = _Hole; _DEBUG_LT_PRED(_Pred, _Val, *--_Prev); _Hole = _Prev) {\r\n                    *_Hole = _STD move(*_Prev); // move hole down\r\n                }\r\n\r\n                *_Hole = _STD move(_Val); // insert element in hole\r\n            }\r\n        }\r\n    }\r\n\r\n    return _Last;\r\n}\r\n\r\ntemplate <class _RanIt, class _Pr>\r\n_CONSTEXPR20 void _Med3_unchecked(_RanIt _First, _RanIt _Mid, _RanIt _Last, _Pr _Pred) {\r\n    // sort median of three elements to middle\r\n    if (_DEBUG_LT_PRED(_Pred, *_Mid, *_First)) {\r\n        swap(*_Mid, *_First); // intentional ADL\r\n    }\r\n\r\n    if (_DEBUG_LT_PRED(_Pred, *_Last, *_Mid)) { // swap middle and last, then test first again\r\n        swap(*_Last, *_Mid); // intentional ADL\r\n\r\n        if (_DEBUG_LT_PRED(_Pred, *_Mid, *_First)) {\r\n            swap(*_Mid, *_First); // intentional ADL\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _RanIt, class _Pr>\r\n_CONSTEXPR20 void _Guess_median_unchecked(_RanIt _First, _RanIt _Mid, _RanIt _Last, _Pr _Pred) {\r\n    // sort median element to middle\r\n    using _Diff        = _Iter_diff_t<_RanIt>;\r\n    const _Diff _Count = _Last - _First;\r\n    if (40 < _Count) { // Tukey's ninther\r\n        const _Diff _Step     = (_Count + 1) >> 3; // +1 can't overflow because range was made inclusive in caller\r\n        const _Diff _Two_step = _Step << 1; // note: intentionally discards low-order bit\r\n        _STD _Med3_unchecked(_First, _First + _Step, _First + _Two_step, _Pred);\r\n        _STD _Med3_unchecked(_Mid - _Step, _Mid, _Mid + _Step, _Pred);\r\n        _STD _Med3_unchecked(_Last - _Two_step, _Last - _Step, _Last, _Pred);\r\n        _STD _Med3_unchecked(_First + _Step, _Mid, _Last - _Step, _Pred);\r\n    } else {\r\n        _STD _Med3_unchecked(_First, _Mid, _Last, _Pred);\r\n    }\r\n}\r\n\r\ntemplate <class _RanIt, class _Pr>\r\n_CONSTEXPR20 pair<_RanIt, _RanIt> _Partition_by_pivot_unchecked(\r\n    _RanIt _First, _RanIt _Pfirst, _RanIt _Last, _Pr _Pred) {\r\n    // partition [_First, _Last) by pivot _Pfirst\r\n    _RanIt _Plast = _STD _Next_iter(_Pfirst);\r\n\r\n    while (_First < _Pfirst && !_DEBUG_LT_PRED(_Pred, *_STD _Prev_iter(_Pfirst), *_Pfirst)\r\n           && !_Pred(*_Pfirst, *_STD _Prev_iter(_Pfirst))) {\r\n        --_Pfirst;\r\n    }\r\n\r\n    while (_Plast < _Last && !_DEBUG_LT_PRED(_Pred, *_Plast, *_Pfirst) && !_Pred(*_Pfirst, *_Plast)) {\r\n        ++_Plast;\r\n    }\r\n\r\n    _RanIt _Gfirst = _Plast;\r\n    _RanIt _Glast  = _Pfirst;\r\n\r\n    for (;;) { // partition\r\n        for (; _Gfirst < _Last; ++_Gfirst) {\r\n            if (_DEBUG_LT_PRED(_Pred, *_Pfirst, *_Gfirst)) {\r\n                continue;\r\n            } else if (_Pred(*_Gfirst, *_Pfirst)) {\r\n                break;\r\n            } else if (_Plast != _Gfirst) {\r\n                swap(*_Plast, *_Gfirst); // intentional ADL\r\n                ++_Plast;\r\n            } else {\r\n                ++_Plast;\r\n            }\r\n        }\r\n\r\n        for (; _First < _Glast; --_Glast) {\r\n            const auto _Glast_prev = _STD _Prev_iter(_Glast);\r\n            if (_DEBUG_LT_PRED(_Pred, *_Glast_prev, *_Pfirst)) {\r\n                continue;\r\n            } else if (_Pred(*_Pfirst, *_Glast_prev)) {\r\n                break;\r\n            } else if (--_Pfirst != _Glast_prev) {\r\n                swap(*_Pfirst, *_Glast_prev); // intentional ADL\r\n            }\r\n        }\r\n\r\n        if (_Glast == _First && _Gfirst == _Last) {\r\n            return pair<_RanIt, _RanIt>(_Pfirst, _Plast);\r\n        }\r\n\r\n        if (_Glast == _First) { // no room at bottom, rotate pivot upward\r\n            if (_Plast != _Gfirst) {\r\n                swap(*_Pfirst, *_Plast); // intentional ADL\r\n            }\r\n\r\n            ++_Plast;\r\n            swap(*_Pfirst, *_Gfirst); // intentional ADL\r\n            ++_Pfirst;\r\n            ++_Gfirst;\r\n        } else if (_Gfirst == _Last) { // no room at top, rotate pivot downward\r\n            if (--_Glast != --_Pfirst) {\r\n                swap(*_Glast, *_Pfirst); // intentional ADL\r\n            }\r\n\r\n            swap(*_Pfirst, *--_Plast); // intentional ADL\r\n        } else {\r\n            swap(*_Gfirst, *--_Glast); // intentional ADL\r\n            ++_Gfirst;\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _RanIt, class _Pr>\r\n_CONSTEXPR20 pair<_RanIt, _RanIt> _Partition_by_median_guess_unchecked(_RanIt _First, _RanIt _Last, _Pr _Pred) {\r\n    // partition [_First, _Last)\r\n    _RanIt _Mid = _First + ((_Last - _First) >> 1); // shift for codegen\r\n    _STD _Guess_median_unchecked(_First, _Mid, _STD _Prev_iter(_Last), _Pred);\r\n\r\n    return _STD _Partition_by_pivot_unchecked(_First, _Mid, _Last, _Pred);\r\n}\r\n\r\ntemplate <class _RanIt, class _Pr>\r\n_CONSTEXPR20 void _Sort_unchecked(_RanIt _First, _RanIt _Last, _Iter_diff_t<_RanIt> _Ideal, _Pr _Pred) {\r\n    // order [_First, _Last)\r\n    for (;;) {\r\n        if (_Last - _First <= _ISORT_MAX) { // small\r\n            _STD _Insertion_sort_unchecked(_First, _Last, _Pred);\r\n            return;\r\n        }\r\n\r\n        if (_Ideal <= 0) { // heap sort if too many divisions\r\n            _STD _Make_heap_unchecked(_First, _Last, _Pred);\r\n            _STD _Sort_heap_unchecked(_First, _Last, _Pred);\r\n            return;\r\n        }\r\n\r\n        // divide and conquer by quicksort\r\n        auto _Mid = _STD _Partition_by_median_guess_unchecked(_First, _Last, _Pred);\r\n\r\n        _Ideal = (_Ideal >> 1) + (_Ideal >> 2); // allow 1.5 log2(N) divisions\r\n\r\n        if (_Mid.first - _First < _Last - _Mid.second) { // loop on second half\r\n            _STD _Sort_unchecked(_First, _Mid.first, _Ideal, _Pred);\r\n            _First = _Mid.second;\r\n        } else { // loop on first half\r\n            _STD _Sort_unchecked(_Mid.second, _Last, _Ideal, _Pred);\r\n            _Last = _Mid.first;\r\n        }\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt, class _Pr>\r\n_CONSTEXPR20 void sort(const _RanIt _First, const _RanIt _Last, _Pr _Pred) { // order [_First, _Last)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    _STD _Sort_unchecked(_UFirst, _ULast, _ULast - _UFirst, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt>\r\n_CONSTEXPR20 void sort(const _RanIt _First, const _RanIt _Last) { // order [_First, _Last)\r\n    _STD sort(_First, _Last, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _RanIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid sort(_ExPo&& _Exec, _RanIt _First, _RanIt _Last, _Pr _Pred) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _ExPo, class _RanIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid sort(_ExPo&& _Exec, const _RanIt _First, const _RanIt _Last) noexcept /* terminates */ {\r\n    // order [_First, _Last)\r\n    _STD sort(_STD forward<_ExPo>(_Exec), _First, _Last, less{});\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <bidirectional_iterator _It, class _Pr, class _Pj>\r\n        requires sortable<_It, _Pr, _Pj>\r\n    constexpr _It _Insertion_sort_common(const _It _First, const _It _Last, _Pr _Pred, _Pj _Proj) {\r\n        // insertion sort [_First, _Last)\r\n\r\n        if (_First == _Last) { // empty range is sorted\r\n            return _Last;\r\n        }\r\n\r\n        for (auto _Mid = _First; ++_Mid != _Last;) { // order next element\r\n            iter_value_t<_It> _Val(_RANGES iter_move(_Mid));\r\n            auto _Hole = _Mid;\r\n\r\n            for (auto _Prev = _Hole;;) {\r\n                --_Prev;\r\n                if (!_STD invoke(_Pred, _STD invoke(_Proj, _Val), _STD invoke(_Proj, *_Prev))) {\r\n                    break;\r\n                }\r\n                *_Hole = _RANGES iter_move(_Prev); // move hole down\r\n                if (--_Hole == _First) {\r\n                    break;\r\n                }\r\n            }\r\n\r\n            *_Hole = _STD move(_Val); // insert element in hole\r\n        }\r\n        return _Last;\r\n    }\r\n\r\n    template <random_access_iterator _It, class _Pr, class _Pj>\r\n        requires sortable<_It, _Pr, _Pj>\r\n    constexpr void _Med3_common(_It _First, _It _Mid, _It _Last, _Pr _Pred, _Pj _Proj) {\r\n        // sort median of three elements to middle\r\n        if (_STD invoke(_Pred, _STD invoke(_Proj, *_Mid), _STD invoke(_Proj, *_First))) {\r\n            _RANGES iter_swap(_Mid, _First);\r\n        }\r\n\r\n        if (!_STD invoke(_Pred, _STD invoke(_Proj, *_Last), _STD invoke(_Proj, *_Mid))) {\r\n            return;\r\n        }\r\n\r\n        // swap middle and last, then test first again\r\n        _RANGES iter_swap(_Last, _Mid);\r\n\r\n        if (_STD invoke(_Pred, _STD invoke(_Proj, *_Mid), _STD invoke(_Proj, *_First))) {\r\n            _RANGES iter_swap(_Mid, _First);\r\n        }\r\n    }\r\n\r\n    template <random_access_iterator _It, class _Pr, class _Pj>\r\n        requires sortable<_It, _Pr, _Pj>\r\n    constexpr void _Guess_median_common(_It _First, _It _Mid, _It _Last, _Pr _Pred, _Pj _Proj) {\r\n        // sort median element to middle\r\n        using _Diff        = iter_difference_t<_It>;\r\n        const _Diff _Count = _Last - _First;\r\n        if (_Count > 40) { // Tukey's ninther\r\n            const _Diff _Step     = (_Count + 1) >> 3; // +1 can't overflow because range was made inclusive in caller\r\n            const _Diff _Two_step = _Step << 1; // note: intentionally discards low-order bit\r\n            _RANGES _Med3_common(_First, _First + _Step, _First + _Two_step, _Pred, _Proj);\r\n            _RANGES _Med3_common(_Mid - _Step, _Mid, _Mid + _Step, _Pred, _Proj);\r\n            _RANGES _Med3_common(_Last - _Two_step, _Last - _Step, _Last, _Pred, _Proj);\r\n            _RANGES _Med3_common(_First + _Step, _Mid, _Last - _Step, _Pred, _Proj);\r\n        } else {\r\n            _RANGES _Med3_common(_First, _Mid, _Last, _Pred, _Proj);\r\n        }\r\n    }\r\n\r\n    template <random_access_iterator _It, class _Pr, class _Pj>\r\n        requires sortable<_It, _Pr, _Pj>\r\n    _NODISCARD constexpr subrange<_It> _Partition_by_pivot_common(\r\n        _It _First, _It _Pfirst, _It _Last, _Pr _Pred, _Pj _Proj) {\r\n        // Partition [_First, _Last) by pivot _Pfirst into elements less than pivot, elements equal to pivot, and\r\n        // elements greater than pivot; return the equal partition as a subrange.\r\n\r\n        _It _Plast = _RANGES next(_Pfirst);\r\n\r\n        while (_First < _Pfirst\r\n               && !_STD invoke(_Pred, _STD invoke(_Proj, *_RANGES prev(_Pfirst)), _STD invoke(_Proj, *_Pfirst))\r\n               && !_STD invoke(_Pred, _STD invoke(_Proj, *_Pfirst), _STD invoke(_Proj, *_RANGES prev(_Pfirst)))) {\r\n            --_Pfirst;\r\n        }\r\n\r\n        while (_Plast < _Last && !_STD invoke(_Pred, _STD invoke(_Proj, *_Plast), _STD invoke(_Proj, *_Pfirst))\r\n               && !_STD invoke(_Pred, _STD invoke(_Proj, *_Pfirst), _STD invoke(_Proj, *_Plast))) {\r\n            ++_Plast;\r\n        }\r\n\r\n        _It _Gfirst = _Plast;\r\n        _It _Glast  = _Pfirst;\r\n\r\n        for (;;) { // partition\r\n            for (; _Gfirst < _Last; ++_Gfirst) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_Pfirst), _STD invoke(_Proj, *_Gfirst))) {\r\n                    continue;\r\n                } else if (_STD invoke(_Pred, _STD invoke(_Proj, *_Gfirst), _STD invoke(_Proj, *_Pfirst))) {\r\n                    break;\r\n                } else if (_Plast != _Gfirst) {\r\n                    _RANGES iter_swap(_Plast, _Gfirst);\r\n                    ++_Plast;\r\n                } else {\r\n                    ++_Plast;\r\n                }\r\n            }\r\n\r\n            for (; _First < _Glast; --_Glast) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_RANGES prev(_Glast)), _STD invoke(_Proj, *_Pfirst))) {\r\n                    continue;\r\n                } else if (_STD invoke(\r\n                               _Pred, _STD invoke(_Proj, *_Pfirst), _STD invoke(_Proj, *_RANGES prev(_Glast)))) {\r\n                    break;\r\n                } else if (--_Pfirst != _RANGES prev(_Glast)) {\r\n                    _RANGES iter_swap(_Pfirst, _RANGES prev(_Glast));\r\n                }\r\n            }\r\n\r\n            if (_Glast == _First && _Gfirst == _Last) {\r\n                return {_STD move(_Pfirst), _STD move(_Plast)};\r\n            }\r\n\r\n            if (_Glast == _First) { // no room at bottom, rotate pivot upward\r\n                if (_Plast != _Gfirst) {\r\n                    _RANGES iter_swap(_Pfirst, _Plast);\r\n                }\r\n\r\n                ++_Plast;\r\n                _RANGES iter_swap(_Pfirst, _Gfirst);\r\n                ++_Pfirst;\r\n                ++_Gfirst;\r\n            } else if (_Gfirst == _Last) { // no room at top, rotate pivot downward\r\n                if (--_Glast != --_Pfirst) {\r\n                    _RANGES iter_swap(_Glast, _Pfirst);\r\n                }\r\n\r\n                _RANGES iter_swap(_Pfirst, --_Plast);\r\n            } else {\r\n                _RANGES iter_swap(_Gfirst, --_Glast);\r\n                ++_Gfirst;\r\n            }\r\n        }\r\n    }\r\n\r\n    template <random_access_iterator _It, class _Pr, class _Pj>\r\n        requires sortable<_It, _Pr, _Pj>\r\n    _NODISCARD constexpr subrange<_It> _Partition_by_median_guess_common(_It _First, _It _Last, _Pr _Pred, _Pj _Proj) {\r\n        // Choose a pivot, partition [_First, _Last) into elements less than pivot, elements equal to pivot, and\r\n        // elements greater than pivot; return the equal partition as a subrange.\r\n\r\n        _It _Mid = _First + ((_Last - _First) >> 1); // shift for codegen\r\n        _RANGES _Guess_median_common(_First, _Mid, _RANGES prev(_Last), _Pred, _Proj);\r\n        return _RANGES _Partition_by_pivot_common(_First, _Mid, _Last, _Pred, _Proj);\r\n    }\r\n\r\n    class _Sort_fn {\r\n    public:\r\n        template <random_access_iterator _It, sentinel_for<_It> _Se, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<_It, _Pr, _Pj>\r\n        static constexpr _It operator()(_It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast  = _RANGES _Get_final_iterator_unwrapped<_It>(_UFirst, _STD move(_Last));\r\n            _STD _Seek_wrapped(_First, _ULast);\r\n            const auto _Count = _ULast - _UFirst;\r\n            _Sort_common(_STD move(_UFirst), _STD move(_ULast), _Count, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _First;\r\n        }\r\n\r\n        template <random_access_range _Rng, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<iterator_t<_Rng>, _Pr, _Pj>\r\n        static constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            auto _UFirst      = _Ubegin(_Range);\r\n            auto _ULast       = _RANGES _Get_final_iterator_unwrapped(_Range);\r\n            const auto _Count = _ULast - _UFirst;\r\n            _Sort_common(_STD move(_UFirst), _ULast, _Count, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _RANGES _Rewrap_iterator(_Range, _STD move(_ULast));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Pr, class _Pj>\r\n        static constexpr void _Sort_common(_It _First, _It _Last, iter_difference_t<_It> _Ideal, _Pr _Pred, _Pj _Proj) {\r\n            // sort [_First, _Last) with respect to _Pred and _Proj\r\n            _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sortable<_It, _Pr, _Pj>);\r\n\r\n            for (;;) {\r\n                if (_Last - _First <= _ISORT_MAX) { // small\r\n                    _RANGES _Insertion_sort_common(_STD move(_First), _STD move(_Last), _Pred, _Proj);\r\n                    return;\r\n                }\r\n\r\n                if (_Ideal <= 0) { // heap sort if too many divisions\r\n                    _RANGES _Make_heap_common(_First, _Last, _Pred, _Proj);\r\n                    _RANGES _Sort_heap_common(_STD move(_First), _STD move(_Last), _Pred, _Proj);\r\n                    return;\r\n                }\r\n\r\n                // divide and conquer by quicksort\r\n                auto _Mid       = _RANGES _Partition_by_median_guess_common(_First, _Last, _Pred, _Proj);\r\n                auto _Mid_first = _Mid.begin();\r\n                auto _Mid_last  = _Mid.end();\r\n\r\n                _Ideal = (_Ideal >> 1) + (_Ideal >> 2); // allow 1.5 log2(N) divisions\r\n\r\n                if (_Mid_first - _First < _Last - _Mid_last) { // loop on second half\r\n                    _Sort_common(_First, _STD move(_Mid_first), _Ideal, _Pred, _Proj);\r\n                    _First = _STD move(_Mid_last);\r\n                } else { // loop on first half\r\n                    _Sort_common(_STD move(_Mid_last), _Last, _Ideal, _Pred, _Proj);\r\n                    _Last = _STD move(_Mid_first);\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Sort_fn sort;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _FwdIt, class _Ty, class _Pr>\r\n_Ty* _Uninitialized_merge_move(_FwdIt _First, const _FwdIt _Mid, const _FwdIt _Last, _Ty* const _Dest, _Pr _Pred) {\r\n    // move merging ranges to uninitialized storage\r\n    // pre: _First != _Mid && _Mid != _Last\r\n    _Uninitialized_backout<_Ty*> _Backout{_Dest};\r\n    _FwdIt _Next = _Mid;\r\n    for (;;) {\r\n        if (_DEBUG_LT_PRED(_Pred, *_Next, *_First)) {\r\n            _Backout._Emplace_back(_STD move(*_Next));\r\n            ++_Next;\r\n\r\n            if (_Next == _Last) {\r\n                _Backout._Last = _STD _Uninitialized_move_unchecked(_First, _Mid, _Backout._Last);\r\n                return _Backout._Release();\r\n            }\r\n        } else {\r\n            _Backout._Emplace_back(_STD move(*_First));\r\n            ++_First;\r\n\r\n            if (_First == _Mid) {\r\n                _Backout._Last = _STD _Uninitialized_move_unchecked(_Next, _Last, _Backout._Last);\r\n                return _Backout._Release();\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _InIt, class _OutIt, class _Pr>\r\n_OutIt _Merge_move_unchecked(_InIt _First, const _InIt _Mid, const _InIt _Last, _OutIt _Dest, _Pr _Pred) {\r\n    // move merging adjacent ranges [_First, _Mid) and [_Mid, _Last) to _Dest\r\n    // pre: _First != _Mid && _Mid != _Last\r\n    _InIt _Next = _Mid;\r\n    for (;;) {\r\n        if (_DEBUG_LT_PRED(_Pred, *_Next, *_First)) {\r\n            *_Dest = _STD move(*_Next);\r\n            ++_Dest;\r\n            ++_Next;\r\n\r\n            if (_Next == _Last) {\r\n                return _STD _Move_unchecked(_First, _Mid, _Dest);\r\n            }\r\n        } else {\r\n            *_Dest = _STD move(*_First);\r\n            ++_Dest;\r\n            ++_First;\r\n\r\n            if (_First == _Mid) {\r\n                return _STD _Move_unchecked(_Next, _Last, _Dest);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt, class _Ty, class _Pr>\r\nvoid _Uninitialized_chunked_merge_unchecked2(\r\n    _BidIt _First, const _BidIt _Last, _Ty* _Dest, _Iter_diff_t<_BidIt> _Count, _Pr _Pred) {\r\n    // move to uninitialized merging adjacent chunks of distance _Isort_max<_BidIt>\r\n    // pre: _Count == distance(_First, _Last)\r\n    // pre: _Chunk > 0\r\n    _Uninitialized_backout<_Ty*> _Backout{_Dest};\r\n    while (_Count > _Isort_max<_BidIt>) {\r\n        _Count -= _Isort_max<_BidIt>;\r\n        const _BidIt _Mid1 = _STD next(_First, _Isort_max<_BidIt>);\r\n        const auto _Chunk2 = (_STD min) (_Isort_max<_BidIt>, _Count);\r\n        _Count -= _Chunk2;\r\n        const _BidIt _Mid2 = _STD next(_Mid1, _Chunk2);\r\n        _Backout._Last     = _STD _Uninitialized_merge_move(_First, _Mid1, _Mid2, _Backout._Last, _Pred);\r\n        _First             = _Mid2;\r\n    }\r\n\r\n    _STD _Uninitialized_move_unchecked(_First, _Last, _Backout._Last); // copy partial last chunk\r\n    _Backout._Release();\r\n}\r\n\r\ntemplate <class _BidIt, class _OutIt, class _Pr>\r\nvoid _Chunked_merge_unchecked(_BidIt _First, const _BidIt _Last, _OutIt _Dest, const _Iter_diff_t<_BidIt> _Chunk,\r\n    _Iter_diff_t<_BidIt> _Count, _Pr _Pred) {\r\n    // move merging adjacent chunks of distance _Chunk\r\n    // pre: _Count == distance(_First, _Last)\r\n    // pre: _Chunk > 0\r\n    while (_Chunk < _Count) {\r\n        _Count -= _Chunk;\r\n        const _BidIt _Mid1 = _STD next(_First, _Chunk);\r\n        const auto _Chunk2 = (_STD min) (_Chunk, _Count);\r\n        _Count -= _Chunk2;\r\n        const _BidIt _Mid2 = _STD next(_Mid1, _Chunk2);\r\n        _Dest              = _STD _Merge_move_unchecked(_First, _Mid1, _Mid2, _Dest, _Pred);\r\n        _First             = _Mid2;\r\n    }\r\n\r\n    _STD _Move_unchecked(_First, _Last, _Dest); // copy partial last chunk\r\n}\r\n\r\ntemplate <class _BidIt, class _Pr>\r\nvoid _Insertion_sort_isort_max_chunks(_BidIt _First, const _BidIt _Last, _Iter_diff_t<_BidIt> _Count, _Pr _Pred) {\r\n    // insertion sort every chunk of distance _Isort_max<_BidIt> in [_First, _Last)\r\n    // pre: _Count == distance(_First, _Last)\r\n    for (; _Isort_max<_BidIt> < _Count; _Count -= _Isort_max<_BidIt>) { // sort chunks\r\n        _First = _STD _Insertion_sort_unchecked(_First, _STD next(_First, _Isort_max<_BidIt>), _Pred);\r\n    }\r\n\r\n    _STD _Insertion_sort_unchecked(_First, _Last, _Pred); // sort partial last chunk\r\n}\r\n\r\ntemplate <class _BidIt, class _Pr>\r\nvoid _Buffered_merge_sort_unchecked(const _BidIt _First, const _BidIt _Last, const _Iter_diff_t<_BidIt> _Count,\r\n    _Iter_value_t<_BidIt>* const _Temp_ptr, _Pr _Pred) {\r\n    // sort using temp buffer for merges\r\n    // pre: _Last - _First == _Count\r\n    // pre: _Count <= capacity of buffer at _Temp_ptr; also allows safe narrowing to ptrdiff_t\r\n    _STD _Insertion_sort_isort_max_chunks(_First, _Last, _Count, _Pred);\r\n    // merge adjacent pairs of chunks to and from temp buffer\r\n    if (_Count <= _Isort_max<_BidIt>) {\r\n        return;\r\n    }\r\n\r\n    // do the first merge, constructing elements in the temporary buffer\r\n    _STD _Uninitialized_chunked_merge_unchecked2(_First, _Last, _Temp_ptr, _Count, _Pred);\r\n    _Uninitialized_backout<_Iter_value_t<_BidIt>*> _Backout{_Temp_ptr, _Temp_ptr + _Count};\r\n    auto _Chunk = _Isort_max<_BidIt>;\r\n    for (;;) {\r\n        // unconditionally merge elements back into the source buffer\r\n\r\n        // _Chunk starts at 2^5 and is doubled twice in this loop.\r\n        // The first doubling (to 2^6, 2^8, 2^10, ...) doesn't check for overflow as it doesn't pose a risk.\r\n        // The second doubling (to 2^7, 2^9, 2^11, ..., 2^15, ..., 2^31, ...) defends against overflow below.\r\n        _Chunk <<= 1;\r\n        _STD _Chunked_merge_unchecked(_Temp_ptr, _Temp_ptr + _Count, _First, static_cast<ptrdiff_t>(_Chunk),\r\n            static_cast<ptrdiff_t>(_Count), _Pred);\r\n\r\n        // This is equivalent to doubling _Chunk followed by returning when `_Count <= _Chunk`,\r\n        // except that it doesn't risk overflowing.\r\n        // Note that returning when `_Count / 2 <= _Chunk` before doubling _Chunk\r\n        // would behave differently for odd _Count due to truncating integer division.\r\n        // Returning when `(_Count - 1) / 2 < _Chunk` correctly handles both even and odd _Count.\r\n        // We have an early return for small _Count above, so `_Count - 1` is safe to form.\r\n        if ((_Count - 1) / 2 < _Chunk) {\r\n            return; // if the input would be a single chunk, it's already sorted and we're done\r\n        }\r\n        _Chunk <<= 1;\r\n\r\n        // more merges necessary; merge to temporary buffer\r\n        _STD _Chunked_merge_unchecked(_First, _Last, _Temp_ptr, _Chunk, _Count, _Pred);\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt, class _Pr>\r\nvoid _Stable_sort_unchecked(const _BidIt _First, const _BidIt _Last, const _Iter_diff_t<_BidIt> _Count,\r\n    _Iter_value_t<_BidIt>* const _Temp_ptr, const ptrdiff_t _Capacity, _Pr _Pred) {\r\n    // sort preserving order of equivalents\r\n    using _Diff = _Iter_diff_t<_BidIt>;\r\n    if (_Count <= _ISORT_MAX) {\r\n        _STD _Insertion_sort_unchecked(_First, _Last, _Pred); // small\r\n    } else { // sort halves and merge\r\n        const auto _Half_count      = static_cast<_Diff>(_Count >> 1); // shift for codegen\r\n        const auto _Half_count_ceil = static_cast<_Diff>(_Count - _Half_count);\r\n        const _BidIt _Mid           = _STD next(_First, _Half_count_ceil);\r\n        if (_Half_count_ceil <= _Capacity) { // temp buffer big enough, sort each half using buffer\r\n            _STD _Buffered_merge_sort_unchecked(_First, _Mid, _Half_count_ceil, _Temp_ptr, _Pred);\r\n            _STD _Buffered_merge_sort_unchecked(_Mid, _Last, _Half_count, _Temp_ptr, _Pred);\r\n        } else { // temp buffer not big enough, divide and conquer\r\n            _STD _Stable_sort_unchecked(_First, _Mid, _Half_count_ceil, _Temp_ptr, _Capacity, _Pred);\r\n            _STD _Stable_sort_unchecked(_Mid, _Last, _Half_count, _Temp_ptr, _Capacity, _Pred);\r\n        }\r\n\r\n        _STD _Buffered_inplace_merge_unchecked(\r\n            _First, _Mid, _Last, _Half_count_ceil, _Half_count, _Temp_ptr, _Capacity, _Pred); // merge halves\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt, class _Pr>\r\nvoid stable_sort(const _BidIt _First, const _BidIt _Last, _Pr _Pred) {\r\n    // sort preserving order of equivalents\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    const auto _Count  = _STD distance(_UFirst, _ULast);\r\n    if (_Count <= _ISORT_MAX) {\r\n        _STD _Insertion_sort_unchecked(_UFirst, _ULast, _STD _Pass_fn(_Pred));\r\n        return;\r\n    }\r\n\r\n    _Optimistic_temporary_buffer2<_Iter_value_t<_BidIt>> _Temp_buf{_Count - _Count / 2};\r\n    _STD _Stable_sort_unchecked(_UFirst, _ULast, _Count, _Temp_buf._Data, _Temp_buf._Capacity, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _BidIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid stable_sort(_ExPo&& _Exec, _BidIt _First, _BidIt _Last, _Pr _Pred) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _BidIt>\r\nvoid stable_sort(const _BidIt _First, const _BidIt _Last) { // sort preserving order of equivalents\r\n    _STD stable_sort(_First, _Last, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _BidIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid stable_sort(_ExPo&& _Exec, _BidIt _First, _BidIt _Last) noexcept /* terminates */ {\r\n    // sort preserving order of equivalents\r\n    _STD stable_sort(_STD forward<_ExPo>(_Exec), _First, _Last, less{});\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Stable_sort_fn {\r\n    public:\r\n        template <random_access_iterator _It, sentinel_for<_It> _Se, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<_It, _Pr, _Pj>\r\n        static _It operator()(_It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast  = _RANGES _Get_final_iterator_unwrapped<_It>(_UFirst, _STD move(_Last));\r\n            _STD _Seek_wrapped(_First, _ULast);\r\n\r\n            const auto _Count = _ULast - _UFirst;\r\n            _Stable_sort_common(\r\n                _STD move(_UFirst), _STD move(_ULast), _Count, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _First;\r\n        }\r\n\r\n        template <random_access_range _Rng, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<iterator_t<_Rng>, _Pr, _Pj>\r\n        static borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            auto _UFirst = _Ubegin(_Range);\r\n            auto _ULast  = _RANGES _Get_final_iterator_unwrapped(_Range);\r\n\r\n            const auto _Count = _ULast - _UFirst;\r\n            _Stable_sort_common(_STD move(_UFirst), _ULast, _Count, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _RANGES _Rewrap_iterator(_Range, _STD move(_ULast));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Pr, class _Pj>\r\n        static void _Stable_sort_common(\r\n            _It _First, _It _Last, const iter_difference_t<_It> _Count, _Pr _Pred, _Pj _Proj) {\r\n            // sort [_First, _Last) with respect to _Pred and _Proj\r\n            _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sortable<_It, _Pr, _Pj>);\r\n            _STL_INTERNAL_CHECK(_RANGES distance(_First, _Last) == _Count);\r\n\r\n            if (_Count <= _Isort_max<_It>) {\r\n                _RANGES _Insertion_sort_common(_STD move(_First), _STD move(_Last), _Pred, _Proj);\r\n                return;\r\n            }\r\n\r\n            _Optimistic_temporary_buffer2<iter_value_t<_It>> _Temp_buf{_Count - _Count / 2};\r\n            _Stable_sort_common_buffered(\r\n                _STD move(_First), _STD move(_Last), _Count, _Temp_buf._Data, _Temp_buf._Capacity, _Pred, _Proj);\r\n        }\r\n\r\n        template <class _It, class _Pr, class _Pj>\r\n        static void _Stable_sort_common_buffered(_It _First, _It _Last, const iter_difference_t<_It> _Count,\r\n            iter_value_t<_It>* const _Temp_ptr, const ptrdiff_t _Capacity, _Pr _Pred, _Pj _Proj) {\r\n            // sort [_First, _Last) with respect to _Pred and _Proj\r\n            _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sortable<_It, _Pr, _Pj>);\r\n            _STL_INTERNAL_CHECK(_RANGES distance(_First, _Last) == _Count);\r\n            // Pre: _Temp_ptr points to empty storage for _Capacity objects\r\n\r\n            if (_Count <= _Isort_max<_It>) {\r\n                _RANGES _Insertion_sort_common(_STD move(_First), _STD move(_Last), _Pred, _Proj);\r\n            } else { // sort halves and merge\r\n                const iter_difference_t<_It> _Half_count      = _Count >> 1; // shift for codegen\r\n                const iter_difference_t<_It> _Half_count_ceil = _Count - _Half_count;\r\n                const _It _Mid                                = _First + _Half_count_ceil;\r\n                if (_Half_count_ceil <= _Capacity) { // temp buffer big enough, sort each half using buffer\r\n                    _Buffered_merge_sort_common(\r\n                        _First, _Mid, static_cast<ptrdiff_t>(_Half_count_ceil), _Temp_ptr, _Pred, _Proj);\r\n                    _Buffered_merge_sort_common(\r\n                        _Mid, _Last, static_cast<ptrdiff_t>(_Half_count), _Temp_ptr, _Pred, _Proj);\r\n                } else { // temp buffer not big enough, divide and conquer\r\n                    _Stable_sort_common_buffered(_First, _Mid, _Half_count_ceil, _Temp_ptr, _Capacity, _Pred, _Proj);\r\n                    _Stable_sort_common_buffered(_Mid, _Last, _Half_count, _Temp_ptr, _Capacity, _Pred, _Proj);\r\n                }\r\n                // merge halves\r\n                _RANGES _Buffered_inplace_merge_common(_STD move(_First), _STD move(_Mid), _STD move(_Last),\r\n                    _Half_count_ceil, _Half_count, _Temp_ptr, _Capacity, _Pred, _Proj);\r\n            }\r\n        }\r\n\r\n        template <class _It, class _Pr, class _Pj>\r\n        static void _Buffered_merge_sort_common(const _It _First, const _It _Last, const ptrdiff_t _Count,\r\n            iter_value_t<_It>* const _Temp_ptr, _Pr _Pred, _Pj _Proj) {\r\n            // sort using temp buffer for merges\r\n            // pre: _Count <= capacity of buffer at _Temp_ptr\r\n            _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sortable<_It, _Pr, _Pj>);\r\n            _STL_INTERNAL_CHECK(_Last - _First == _Count);\r\n\r\n            _Insertion_sort_isort_max_chunks(_First, _Last, _Count, _Pred, _Proj);\r\n            // merge adjacent pairs of chunks to and from temp buffer\r\n            if (_Count <= _ISORT_MAX) {\r\n                return;\r\n            }\r\n\r\n            // do the first merge, constructing elements in the temporary buffer\r\n            _Uninitialized_chunked_merge_common(_First, _Last, _Temp_ptr, _Count, _Pred, _Proj);\r\n            _Uninitialized_backout<iter_value_t<_It>*> _Backout{_Temp_ptr, _Temp_ptr + _Count};\r\n            ptrdiff_t _Chunk_size = _ISORT_MAX;\r\n            for (;;) {\r\n                // unconditionally merge elements back into the source buffer\r\n\r\n                // _Chunk_size starts at 2^5 and is doubled twice in this loop.\r\n                // The first doubling (to 2^6, 2^8, 2^10, ...) doesn't check for overflow as it doesn't pose a risk.\r\n                // The second doubling (to 2^7, 2^9, 2^11, ..., 2^15, ..., 2^31, ...) defends against overflow below.\r\n                _Chunk_size <<= 1;\r\n                _Chunked_merge_common(_Temp_ptr, _Temp_ptr + _Count, _First, _Chunk_size, _Count, _Pred, _Proj);\r\n\r\n                // This is equivalent to doubling _Chunk_size followed by returning when `_Count <= _Chunk_size`,\r\n                // except that it doesn't risk overflowing.\r\n                // Note that returning when `_Count / 2 <= _Chunk_size` before doubling _Chunk_size\r\n                // would behave differently for odd _Count due to truncating integer division.\r\n                // Returning when `(_Count - 1) / 2 < _Chunk_size` correctly handles both even and odd _Count.\r\n                // We have an early return for small _Count above, so `_Count - 1` is safe to form.\r\n                if ((_Count - 1) / 2 < _Chunk_size) {\r\n                    return; // if the input would be a single chunk, it's already sorted and we're done\r\n                }\r\n                _Chunk_size <<= 1;\r\n\r\n                // more merges necessary; merge to temporary buffer\r\n                _Chunked_merge_common(_First, _Last, _Temp_ptr, _Chunk_size, _Count, _Pred, _Proj);\r\n            }\r\n        }\r\n\r\n        template <class _It, class _Pr, class _Pj>\r\n        static void _Insertion_sort_isort_max_chunks(_It _First, _It _Last, ptrdiff_t _Count, _Pr _Pred, _Pj _Proj) {\r\n            // insertion sort every chunk of distance _Isort_max<_It> in [_First, _Last)\r\n            _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sortable<_It, _Pr, _Pj>);\r\n            _STL_INTERNAL_CHECK(_RANGES distance(_First, _Last) == _Count);\r\n\r\n            for (; _ISORT_MAX < _Count; _Count -= _ISORT_MAX) { // sort chunks\r\n                _First = _RANGES _Insertion_sort_common(_First, _First + _Isort_max<_It>, _Pred, _Proj);\r\n            }\r\n\r\n            // sort partial last chunk\r\n            _RANGES _Insertion_sort_common(_STD move(_First), _STD move(_Last), _Pred, _Proj);\r\n        }\r\n\r\n        template <class _It, class _Pr, class _Pj>\r\n        static void _Uninitialized_chunked_merge_common(\r\n            _It _First, const _It _Last, iter_value_t<_It>* const _Dest, ptrdiff_t _Count, _Pr _Pred, _Pj _Proj) {\r\n            // move to uninitialized merging adjacent chunks of distance _Isort_max<_It>\r\n            _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sortable<_It, _Pr, _Pj>);\r\n            _STL_INTERNAL_STATIC_ASSERT(constructible_from<iter_value_t<_It>, iter_rvalue_reference_t<_It>>);\r\n            _STL_INTERNAL_CHECK(_RANGES distance(_First, _Last) == _Count);\r\n\r\n            _Uninitialized_backout<iter_value_t<_It>*> _Backout{_Dest};\r\n            const auto _Backout_end = _Dest + _Count;\r\n            while (_ISORT_MAX < _Count) {\r\n                _Count -= _ISORT_MAX;\r\n                const auto _Chunk2 = (_STD min) (static_cast<ptrdiff_t>(_ISORT_MAX), _Count);\r\n                _Count -= _Chunk2;\r\n\r\n                auto _Mid1     = _First + _Isort_max<_It>;\r\n                auto _Last1    = _Mid1 + static_cast<iter_difference_t<_It>>(_Chunk2);\r\n                auto _Last2    = _Backout._Last + _ISORT_MAX + _Chunk2;\r\n                _Backout._Last = _Uninitialized_merge_move(\r\n                    _STD move(_First), _STD move(_Mid1), _Last1, _Backout._Last, _Last2, _Pred, _Proj);\r\n                _First = _STD move(_Last1);\r\n            }\r\n\r\n            // move partial last chunk\r\n            _RANGES _Uninitialized_move_unchecked(_STD move(_First), _STD move(_Last), _Backout._Last, _Backout_end);\r\n            _Backout._Release();\r\n        }\r\n\r\n        template <class _It, class _Pr, class _Pj>\r\n        _NODISCARD static iter_value_t<_It>* _Uninitialized_merge_move(_It _First, _It _Mid, _It _Last,\r\n            iter_value_t<_It>* const _Dest, iter_value_t<_It>* const _Dest_last, _Pr _Pred, _Pj _Proj) {\r\n            // move merging ranges to uninitialized storage\r\n            _STL_INTERNAL_STATIC_ASSERT(sortable<_It, _Pr, _Pj>);\r\n            _STL_INTERNAL_STATIC_ASSERT(constructible_from<iter_value_t<_It>, iter_rvalue_reference_t<_It>>);\r\n            _STL_INTERNAL_CHECK(_First != _Mid);\r\n            _STL_INTERNAL_CHECK(_Mid != _Last);\r\n            _STL_INTERNAL_CHECK(_RANGES distance(_First, _Last) <= _RANGES distance(_Dest, _Dest_last));\r\n\r\n            _Uninitialized_backout<iter_value_t<_It>*> _Backout{_Dest};\r\n            _It _Next = _Mid;\r\n            for (;;) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_Next), _STD invoke(_Proj, *_First))) {\r\n                    _Backout._Emplace_back(_RANGES iter_move(_Next));\r\n                    ++_Next;\r\n\r\n                    if (_Next == _Last) {\r\n                        _Backout._Last = _RANGES _Uninitialized_move_unchecked(\r\n                            _STD move(_First), _STD move(_Mid), _Backout._Last, _Dest_last)\r\n                                             .out;\r\n                        return _Backout._Release();\r\n                    }\r\n                } else {\r\n                    _Backout._Emplace_back(_RANGES iter_move(_First));\r\n                    ++_First;\r\n\r\n                    if (_First == _Mid) {\r\n                        _Backout._Last = _RANGES _Uninitialized_move_unchecked(\r\n                            _STD move(_Next), _STD move(_Last), _Backout._Last, _Dest_last)\r\n                                             .out;\r\n                        return _Backout._Release();\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        template <class _InIt, class _OutIt, class _Pr, class _Pj>\r\n        _NODISCARD static _OutIt _Merge_move_common(\r\n            _InIt _First, _InIt _Mid, _InIt _Last, _OutIt _Dest, _Pr _Pred, _Pj _Proj) {\r\n            // move merging adjacent ranges [_First, _Mid) and [_Mid, _Last) to _Dest\r\n            _STL_INTERNAL_STATIC_ASSERT(sortable<_InIt, _Pr, _Pj>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_movable<_InIt, _OutIt>);\r\n            _STL_INTERNAL_CHECK(_First != _Mid);\r\n            _STL_INTERNAL_CHECK(_Mid != _Last);\r\n\r\n            _InIt _Next = _Mid;\r\n            for (;;) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_Next), _STD invoke(_Proj, *_First))) {\r\n                    *_Dest = _RANGES iter_move(_Next);\r\n                    ++_Dest;\r\n                    ++_Next;\r\n\r\n                    if (_Next == _Last) {\r\n                        return _RANGES _Move_unchecked(_STD move(_First), _STD move(_Mid), _STD move(_Dest)).out;\r\n                    }\r\n                } else {\r\n                    *_Dest = _RANGES iter_move(_First);\r\n                    ++_Dest;\r\n                    ++_First;\r\n\r\n                    if (_First == _Mid) {\r\n                        return _RANGES _Move_unchecked(_STD move(_Next), _STD move(_Last), _STD move(_Dest)).out;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        template <class _It1, class _It2, class _Pr, class _Pj>\r\n        static void _Chunked_merge_common(_It1 _First, const _It1 _Last, _It2 _Dest, const ptrdiff_t _Chunk_size,\r\n            ptrdiff_t _Count, _Pr _Pred, _Pj _Proj) {\r\n            // move merging adjacent chunks of distance _Chunk_size\r\n            _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sortable<_It1, _Pr, _Pj>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_movable<_It1, _It2>);\r\n            _STL_INTERNAL_CHECK(_Last - _First == _Count);\r\n            _STL_INTERNAL_CHECK(_Chunk_size > 0);\r\n\r\n            while (_Chunk_size < _Count) {\r\n                _Count -= _Chunk_size;\r\n                const auto _Right_chunk_size = (_STD min) (_Chunk_size, _Count);\r\n                _Count -= _Right_chunk_size;\r\n\r\n                auto _Mid1  = _First + static_cast<iter_difference_t<_It1>>(_Chunk_size);\r\n                auto _Last1 = _Mid1 + static_cast<iter_difference_t<_It1>>(_Right_chunk_size);\r\n                _Dest       = _Merge_move_common(_STD move(_First), _STD move(_Mid1), _Last1, _Dest, _Pred, _Proj);\r\n                _First      = _STD move(_Last1);\r\n            }\r\n\r\n            // copy partial last chunk\r\n            _RANGES _Move_unchecked(_STD move(_First), _STD move(_Last), _STD move(_Dest));\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Stable_sort_fn stable_sort;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _RanIt, class _Pr>\r\n_CONSTEXPR20 void partial_sort(_RanIt _First, _RanIt _Mid, _RanIt _Last, _Pr _Pred) {\r\n    // order [_First, _Last) up to _Mid\r\n    _STD _Adl_verify_range(_First, _Mid);\r\n    _STD _Adl_verify_range(_Mid, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _UMid  = _STD _Get_unwrapped(_Mid);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n\r\n    if (_UFirst == _UMid) {\r\n        return; // nothing to do, avoid violating _Pop_heap_hole_unchecked preconditions\r\n    }\r\n\r\n    _STD _Make_heap_unchecked(_UFirst, _UMid, _STD _Pass_fn(_Pred));\r\n    for (auto _UNext = _UMid; _UNext < _ULast; ++_UNext) {\r\n        if (_DEBUG_LT_PRED(_Pred, *_UNext, *_UFirst)) { // replace top with new largest\r\n            _Iter_value_t<_RanIt> _Val(_STD move(*_UNext));\r\n            _STD _Pop_heap_hole_unchecked(_UFirst, _UMid, _UNext, _STD move(_Val), _STD _Pass_fn(_Pred));\r\n        }\r\n    }\r\n\r\n    _STD _Sort_heap_unchecked(_UFirst, _UMid, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt>\r\n_CONSTEXPR20 void partial_sort(_RanIt _First, _RanIt _Mid, _RanIt _Last) {\r\n    // order [_First, _Last) up to _Mid\r\n    _STD partial_sort(_First, _Mid, _Last, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _RanIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid partial_sort(_ExPo&&, _RanIt _First, _RanIt _Mid, _RanIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // order [_First, _Last) up to _Mid\r\n    // parallelism suspected to be infeasible\r\n    _REQUIRE_CPP17_MUTABLE_RANDOM_ACCESS_ITERATOR(_RanIt);\r\n    return _STD partial_sort(_First, _Mid, _Last, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _RanIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid partial_sort(_ExPo&&, _RanIt _First, _RanIt _Mid, _RanIt _Last) noexcept /* terminates */ {\r\n    // order [_First, _Last) up to _Mid\r\n    // parallelism suspected to be infeasible\r\n    _REQUIRE_CPP17_MUTABLE_RANDOM_ACCESS_ITERATOR(_RanIt);\r\n    return _STD partial_sort(_First, _Mid, _Last);\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Partial_sort_fn {\r\n    public:\r\n        template <random_access_iterator _It, sentinel_for<_It> _Se, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<_It, _Pr, _Pj>\r\n        static constexpr _It operator()(_It _First, _It _Mid, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Mid);\r\n            _STD _Adl_verify_range(_Mid, _Last);\r\n\r\n            if constexpr (is_same_v<_It, _Se>) {\r\n                _Partial_sort_common(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                    _RANGES _Unwrap_iter<_Se>(_STD move(_Mid)), _RANGES _Unwrap_sent<_It>(_Last), _STD _Pass_fn(_Pred),\r\n                    _STD _Pass_fn(_Proj));\r\n                return _Last;\r\n            } else {\r\n                auto _UMid  = _RANGES _Unwrap_iter<_Se>(_STD move(_Mid));\r\n                auto _ULast = _RANGES _Get_final_iterator_unwrapped<_It>(_UMid, _STD move(_Last));\r\n                _STD _Seek_wrapped(_Mid, _ULast);\r\n                _Partial_sort_common(_RANGES _Unwrap_iter<_Se>(_STD move(_First)), _STD move(_UMid), _STD move(_ULast),\r\n                    _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _Mid;\r\n            }\r\n        }\r\n\r\n        template <random_access_range _Rng, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<iterator_t<_Rng>, _Pr, _Pj>\r\n        static constexpr borrowed_iterator_t<_Rng> operator()(\r\n            _Rng&& _Range, iterator_t<_Rng> _Mid, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_RANGES begin(_Range), _Mid);\r\n            _STD _Adl_verify_range(_Mid, _RANGES end(_Range));\r\n\r\n            if constexpr (common_range<_Rng>) {\r\n                _Partial_sort_common(_Ubegin(_Range), _RANGES _Unwrap_range_iter<_Rng>(_STD move(_Mid)), _Uend(_Range),\r\n                    _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _RANGES end(_Range);\r\n            } else {\r\n                auto _UMid  = _RANGES _Unwrap_range_iter<_Rng>(_STD move(_Mid));\r\n                auto _ULast = _RANGES _Get_final_iterator_unwrapped(_Range, _UMid);\r\n                _STD _Seek_wrapped(_Mid, _ULast);\r\n                _Partial_sort_common(\r\n                    _Ubegin(_Range), _STD move(_UMid), _STD move(_ULast), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n                return _Mid;\r\n            }\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Pr, class _Pj>\r\n        static constexpr void _Partial_sort_common(_It _First, _It _Mid, const _It _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sortable<_It, _Pr, _Pj>);\r\n\r\n            if (_First == _Mid) {\r\n                return; // nothing to do\r\n            }\r\n\r\n            _RANGES _Make_heap_common(_First, _Mid, _Pred, _Proj);\r\n            for (auto _Next = _Mid; _Next != _Last; ++_Next) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_Next), _STD invoke(_Proj, *_First))) {\r\n                    // replace top with new largest\r\n                    iter_value_t<_It> _Val(_RANGES iter_move(_Next));\r\n                    _RANGES _Pop_heap_hole_unchecked(_First, _Mid, _Next, _STD move(_Val), _Pred, _Proj, _Proj);\r\n                }\r\n            }\r\n\r\n            _RANGES _Sort_heap_common(_STD move(_First), _STD move(_Mid), _Pred, _Proj);\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Partial_sort_fn partial_sort;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt, class _RanIt, class _Pr>\r\n_CONSTEXPR20 _RanIt partial_sort_copy(_InIt _First1, _InIt _Last1, _RanIt _First2, _RanIt _Last2, _Pr _Pred) {\r\n    // copy [_First1, _Last1) into [_First2, _Last2)\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2 = _STD _Get_unwrapped(_Last2);\r\n    auto _UMid2        = _UFirst2;\r\n    if (_UFirst1 != _ULast1 && _UFirst2 != _ULast2) {\r\n        for (; _UFirst1 != _ULast1 && _UMid2 != _ULast2; ++_UFirst1, (void) ++_UMid2) {\r\n            *_UMid2 = *_UFirst1; // copy min(_ULast1 - _UFirst1, _ULast2 - _UFirst2)\r\n        }\r\n\r\n        _STD _Make_heap_unchecked(_UFirst2, _UMid2, _STD _Pass_fn(_Pred));\r\n        for (; _UFirst1 != _ULast1; ++_UFirst1) {\r\n            if (_DEBUG_LT_PRED(_Pred, *_UFirst1, *_UFirst2)) {\r\n                // replace top with new largest:\r\n                using _Diff = _Iter_diff_t<_RanIt>;\r\n                _STD _Pop_heap_hole_by_index(_UFirst2, static_cast<_Diff>(0), static_cast<_Diff>(_UMid2 - _UFirst2),\r\n                    *_UFirst1, _STD _Pass_fn(_Pred));\r\n            }\r\n        }\r\n\r\n        _STD _Sort_heap_unchecked(_UFirst2, _UMid2, _STD _Pass_fn(_Pred));\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First2, _UMid2);\r\n    return _First2;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _RanIt>\r\n_CONSTEXPR20 _RanIt partial_sort_copy(_InIt _First1, _InIt _Last1, _RanIt _First2, _RanIt _Last2) {\r\n    // copy [_First1, _Last1) into [_First2, _Last2)\r\n    return _STD partial_sort_copy(_First1, _Last1, _First2, _Last2, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _RanIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_RanIt partial_sort_copy(_ExPo&&, _FwdIt _First1, _FwdIt _Last1, _RanIt _First2, _RanIt _Last2, _Pr _Pred) noexcept\r\n/* terminates */ {\r\n    // copy [_First1, _Last1) into [_First2, _Last2)\r\n    // parallelism suspected to be infeasible\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_RanIt);\r\n    return _STD partial_sort_copy(_First1, _Last1, _First2, _Last2, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _RanIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_RanIt partial_sort_copy(_ExPo&&, _FwdIt _First1, _FwdIt _Last1, _RanIt _First2, _RanIt _Last2) noexcept\r\n/* terminates */ {\r\n    // copy [_First1, _Last1) into [_First2, _Last2)\r\n    // parallelism suspected to be infeasible\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_RanIt);\r\n    return _STD partial_sort_copy(_First1, _Last1, _First2, _Last2);\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using partial_sort_copy_result = in_out_result<_In, _Out>;\r\n\r\n    class _Partial_sort_copy_fn {\r\n    public:\r\n        template <input_iterator _It1, sentinel_for<_It1> _Se1, random_access_iterator _It2, sentinel_for<_It2> _Se2,\r\n            class _Pr = ranges::less, class _Pj1 = identity, class _Pj2 = identity>\r\n            requires indirectly_copyable<_It1, _It2> && sortable<_It2, _Pr, _Pj2>\r\n                  && indirect_strict_weak_order<_Pr, projected<_It1, _Pj1>, projected<_It2, _Pj2>>\r\n        static constexpr partial_sort_copy_result<_It1, _It2> operator()(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n\r\n            auto _UResult = _Partial_sort_copy_unchecked(_RANGES _Unwrap_iter<_Se1>(_STD move(_First1)),\r\n                _RANGES _Unwrap_sent<_It1>(_STD move(_Last1)), _RANGES _Unwrap_iter<_Se2>(_STD move(_First2)),\r\n                _RANGES _Unwrap_sent<_It2>(_STD move(_Last2)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1),\r\n                _STD _Pass_fn(_Proj2));\r\n\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_First2, _STD move(_UResult.out));\r\n            return {_STD move(_First1), _STD move(_First2)};\r\n        }\r\n\r\n        template <input_range _Rng1, random_access_range _Rng2, class _Pr = ranges::less, class _Pj1 = identity,\r\n            class _Pj2 = identity>\r\n            requires indirectly_copyable<iterator_t<_Rng1>, iterator_t<_Rng2>> && sortable<iterator_t<_Rng2>, _Pr, _Pj2>\r\n                  && indirect_strict_weak_order<_Pr, projected<iterator_t<_Rng1>, _Pj1>,\r\n                      projected<iterator_t<_Rng2>, _Pj2>>\r\n        static constexpr partial_sort_copy_result<borrowed_iterator_t<_Rng1>, borrowed_iterator_t<_Rng2>> operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            auto _First   = _RANGES begin(_Range1);\r\n            auto _UResult = _Partial_sort_copy_unchecked(_RANGES _Unwrap_range_iter<_Rng1>(_STD move(_First)),\r\n                _Uend(_Range1), _Ubegin(_Range2), _Uend(_Range2), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1),\r\n                _STD _Pass_fn(_Proj2));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            return {_STD move(_First), _RANGES _Rewrap_iterator(_Range2, _STD move(_UResult.out))};\r\n        }\r\n\r\n    private:\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr partial_sort_copy_result<_It1, _It2> _Partial_sort_copy_unchecked(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, const _Se2 _Last2, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_copyable<_It1, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sortable<_It2, _Pr, _Pj2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_strict_weak_order<_Pr, projected<_It1, _Pj1>, projected<_It2, _Pj2>>);\r\n\r\n            if (_First1 == _Last1 || _First2 == _Last2) {\r\n                _RANGES advance(_First1, _STD move(_Last1));\r\n                return {_STD move(_First1), _STD move(_First2)};\r\n            }\r\n\r\n            // copy N = min(distance(_First1, _Last1), distance(_First2, _Last2)) elements\r\n            auto _Mid2 = _First2;\r\n            do {\r\n                *_Mid2 = *_First1;\r\n                ++_First1;\r\n                ++_Mid2;\r\n            } while (_First1 != _Last1 && _Mid2 != _Last2);\r\n\r\n            _RANGES _Make_heap_common(_First2, _Mid2, _Pred, _Proj2); // Make a heap\r\n            for (; _First1 != _Last1; ++_First1) { // Scan the remaining elements...\r\n                // ... for values less than the largest in the heap ...\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj1, *_First1), _STD invoke(_Proj2, *_First2))) {\r\n                    // ... to replace the largest, after which we restore the heap invariants.\r\n                    using _Diff = iter_difference_t<_It2>;\r\n                    _RANGES _Pop_heap_hole_by_index(_First2, static_cast<_Diff>(0), static_cast<_Diff>(_Mid2 - _First2),\r\n                        *_First1, _Pred, _Proj2, _Proj1);\r\n                }\r\n            }\r\n\r\n            // the heap contains the N smallest elements; sort them\r\n            _RANGES _Sort_heap_common(_STD move(_First2), _Mid2, _Pred, _Proj2);\r\n            return {_STD move(_First1), _STD move(_Mid2)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Partial_sort_copy_fn partial_sort_copy;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class _RanIt, class _Pr>\r\n_CONSTEXPR20 void _Swap_med5_unchecked(_RanIt _First, _RanIt _Dest, _Pr _Pred) {\r\n    _RanIt _Guess = _First;\r\n    ++_Guess;\r\n    _RanIt _Third = _Guess;\r\n    ++_Third;\r\n    _STD _Med3_unchecked(_First, _Guess, _Third, _Pred);\r\n\r\n    _RanIt _Fourth = _Third;\r\n    ++_Fourth;\r\n    _RanIt _Fifth = _Fourth;\r\n    ++_Fifth;\r\n    if (_DEBUG_LT_PRED(_Pred, *_Fifth, *_Fourth)) {\r\n        swap(*_Fourth, *_Fifth); // intentional ADL\r\n    }\r\n\r\n    // we have _First <= _Guess (second) <= _Third and _Fourth <= _Fifth\r\n    if (_DEBUG_LT_PRED(_Pred, *_Fifth, *_Guess)) {\r\n        if (_DEBUG_LT_PRED(_Pred, *_First, *_Fifth)) {\r\n            _Guess = _Fifth;\r\n        } else {\r\n            _Guess = _First;\r\n        }\r\n    } else if (_DEBUG_LT_PRED(_Pred, *_Guess, *_Fourth)) {\r\n        if (_DEBUG_LT_PRED(_Pred, *_Third, *_Fourth)) {\r\n            _Guess = _Third;\r\n        } else {\r\n            _Guess = _Fourth;\r\n        }\r\n    }\r\n\r\n    swap(*_Dest, *_Guess); // intentional ADL\r\n}\r\n\r\ntemplate <class _RanIt, class _Pr>\r\n_CONSTEXPR20 void _Nth_element_median_of_medians(_RanIt _First, _RanIt _Nth, _RanIt _Last, _Pr _Pred) {\r\n    using _Diff = _Iter_diff_t<_RanIt>;\r\n    for (;;) {\r\n        const auto _Length = _Last - _First;\r\n        if (_Length <= _ISORT_MAX) {\r\n            _STD _Insertion_sort_unchecked(_First, _Last, _Pred); // sort any remainder\r\n            return;\r\n        }\r\n\r\n        // collect the medians of five at the beginning of the range\r\n        const _Diff _Median_count = _Length / static_cast<_Diff>(5);\r\n        const auto _Median_last   = _First + _Median_count;\r\n        auto _Current             = _First;\r\n        for (auto _Median_dest = _First; _Median_dest != _Median_last; ++_Median_dest) {\r\n            _STD _Swap_med5_unchecked(_Current, _Median_dest, _Pred);\r\n            _Current += static_cast<_Diff>(5);\r\n        }\r\n\r\n        // find the median of medians\r\n        const auto _Median_mid = _First + (_Median_count >> 1);\r\n        _STD _Nth_element_median_of_medians(_First, _Median_mid, _Median_last, _Pred);\r\n\r\n        // The medians before and after _Median_mid are\r\n        // less-equal and greater-equal _Median_mid, respectively.\r\n        // Move the ones after _Median_mid near _Last and then partition\r\n        // the elements between the medians at front and back by the pivot _Median_mid\r\n        // so that they do not have to be considered or moved in the partitioning pass.\r\n        const _Diff _Median_greater_count = (_Median_last - _Median_mid) - 1;\r\n        const auto _Median_greater_first  = _Last - _Median_greater_count;\r\n        _STD _Swap_ranges_unchecked(_Median_mid + static_cast<_Diff>(1), _Median_last, _Median_greater_first);\r\n\r\n        // Swap the median of medians to the middle\r\n        // to reduce the number of times it will be moved by the partition function.\r\n        const auto _Middle = _First + (_Length >> 1);\r\n        swap(*_Median_mid, *_Middle); // intentional ADL\r\n\r\n        const auto _Mid = _STD _Partition_by_pivot_unchecked(_Median_mid, _Middle, _Median_greater_first, _Pred);\r\n\r\n        if (_Mid.second <= _Nth) {\r\n            _First = _Mid.second;\r\n        } else if (_Mid.first <= _Nth) {\r\n            return; // _Nth is in the subrange of elements equal to the pivot; done\r\n        } else {\r\n            _Last = _Mid.first;\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _RanIt, class _Pr>\r\n_CONSTEXPR20 void _Nth_element_unchecked(_RanIt _First, _RanIt _Nth, _RanIt _Last, _Pr _Pred) {\r\n    auto _Ideal = _Last - _First;\r\n\r\n    for (;;) {\r\n        const auto _Length = _Last - _First;\r\n        if (_Length <= _ISORT_MAX) {\r\n            _STD _Insertion_sort_unchecked(_First, _Last, _Pred); // sort any remainder\r\n            return;\r\n        }\r\n\r\n        if (_Ideal < (_Length >> 1)) {\r\n            // fall back to medians-of-medians-of-five algorithm to guarantee O(n) runtime performance\r\n            _STD _Nth_element_median_of_medians(_First, _Nth, _Last, _Pred);\r\n            return;\r\n        }\r\n\r\n        const auto _Mid = _STD _Partition_by_median_guess_unchecked(_First, _Last, _Pred);\r\n\r\n        if (_Mid.second <= _Nth) {\r\n            _First = _Mid.second;\r\n        } else if (_Mid.first <= _Nth) {\r\n            return; // _Nth is in the subrange of elements equal to the pivot; done\r\n        } else {\r\n            _Last = _Mid.first;\r\n        }\r\n\r\n        // processed range should be reduced by 25% per iteration on average\r\n        _Ideal = (_Ideal >> 1) + (_Ideal >> 2);\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt, class _Pr>\r\n_CONSTEXPR20 void nth_element(_RanIt _First, _RanIt _Nth, _RanIt _Last, _Pr _Pred) {\r\n    // order Nth element\r\n    _STD _Adl_verify_range(_First, _Nth);\r\n    _STD _Adl_verify_range(_Nth, _Last);\r\n    auto _UFirst     = _STD _Get_unwrapped(_First);\r\n    const auto _UNth = _STD _Get_unwrapped(_Nth);\r\n    auto _ULast      = _STD _Get_unwrapped(_Last);\r\n    if (_UNth == _ULast) {\r\n        return; // nothing to do\r\n    }\r\n\r\n    _STD _Nth_element_unchecked(_UFirst, _UNth, _ULast, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _RanIt>\r\n_CONSTEXPR20 void nth_element(_RanIt _First, _RanIt _Nth, _RanIt _Last) { // order Nth element\r\n    _STD nth_element(_First, _Nth, _Last, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _RanIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid nth_element(_ExPo&&, _RanIt _First, _RanIt _Nth, _RanIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // order Nth element\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_CPP17_MUTABLE_RANDOM_ACCESS_ITERATOR(_RanIt);\r\n    _STD nth_element(_First, _Nth, _Last, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _RanIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid nth_element(_ExPo&&, _RanIt _First, _RanIt _Nth, _RanIt _Last) noexcept /* terminates */ {\r\n    // order Nth element\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_CPP17_MUTABLE_RANDOM_ACCESS_ITERATOR(_RanIt);\r\n    _STD nth_element(_First, _Nth, _Last);\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Nth_element_fn {\r\n    public:\r\n        template <random_access_iterator _It, sentinel_for<_It> _Se, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<_It, _Pr, _Pj>\r\n        static constexpr _It operator()(_It _First, _It _Nth, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Nth);\r\n            _STD _Adl_verify_range(_Nth, _Last);\r\n            auto _UNth   = _RANGES _Unwrap_iter<_Se>(_Nth);\r\n            auto _UFinal = _RANGES _Get_final_iterator_unwrapped<_It>(_UNth, _STD move(_Last));\r\n            _STD _Seek_wrapped(_Nth, _UFinal);\r\n\r\n            _Nth_element_common(_RANGES _Unwrap_iter<_Se>(_STD move(_First)), _STD move(_UNth), _STD move(_UFinal),\r\n                _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _Nth;\r\n        }\r\n\r\n        template <random_access_range _Rng, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<iterator_t<_Rng>, _Pr, _Pj>\r\n        static constexpr borrowed_iterator_t<_Rng> operator()(\r\n            _Rng&& _Range, iterator_t<_Rng> _Nth, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_RANGES begin(_Range), _Nth);\r\n            _STD _Adl_verify_range(_Nth, _RANGES end(_Range));\r\n            auto _UNth   = _RANGES _Unwrap_range_iter<_Rng>(_Nth);\r\n            auto _UFinal = [&] {\r\n                if constexpr (common_range<_Rng>) {\r\n                    return _Uend(_Range);\r\n                } else if constexpr (sized_range<_Rng>) {\r\n                    return _RANGES next(_Ubegin(_Range), _RANGES distance(_Range));\r\n                } else {\r\n                    return _RANGES next(_UNth, _Uend(_Range));\r\n                }\r\n            }();\r\n            _STD _Seek_wrapped(_Nth, _UFinal);\r\n\r\n            _Nth_element_common(\r\n                _Ubegin(_Range), _STD move(_UNth), _STD move(_UFinal), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _Nth;\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Pr, class _Pj>\r\n        static constexpr void _Swap_med5(_It _First, _It _Dest, _Pr _Pred, _Pj _Proj) {\r\n            _It _Guess = _First;\r\n            ++_Guess;\r\n            _It _Third = _Guess;\r\n            ++_Third;\r\n            _RANGES _Med3_common(_First, _Guess, _Third, _Pred, _Proj);\r\n\r\n            _It _Fourth = _Third;\r\n            ++_Fourth;\r\n            _It _Fifth = _Fourth;\r\n            ++_Fifth;\r\n            if (_STD invoke(_Pred, _STD invoke(_Proj, *_Fifth), _STD invoke(_Proj, *_Fourth))) {\r\n                _RANGES iter_swap(_Fourth, _Fifth);\r\n            }\r\n\r\n            // we have _First <= _Guess (second) <= _Third and _Fourth <= _Fifth\r\n            if (_STD invoke(_Pred, _STD invoke(_Proj, *_Fifth), _STD invoke(_Proj, *_Guess))) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_First), _STD invoke(_Proj, *_Fifth))) {\r\n                    _Guess = _STD move(_Fifth);\r\n                } else {\r\n                    _Guess = _STD move(_First);\r\n                }\r\n            } else if (_STD invoke(_Pred, _STD invoke(_Proj, *_Guess), _STD invoke(_Proj, *_Fourth))) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_Third), _STD invoke(_Proj, *_Fourth))) {\r\n                    _Guess = _STD move(_Third);\r\n                } else {\r\n                    _Guess = _STD move(_Fourth);\r\n                }\r\n            }\r\n\r\n            _RANGES iter_swap(_Dest, _Guess);\r\n        }\r\n\r\n        template <class _It, class _Pr, class _Pj>\r\n        static constexpr void _Nth_element_median_of_medians_unchecked(\r\n            _It _First, _It _Nth, _It _Last, _Pr _Pred, _Pj _Proj) {\r\n\r\n            using _Diff = iter_difference_t<_It>;\r\n            for (;;) {\r\n                const auto _Length = _Last - _First;\r\n                if (_Length <= _ISORT_MAX) {\r\n                    // sort any remainder\r\n                    _RANGES _Insertion_sort_common(_STD move(_First), _STD move(_Last), _Pred, _Proj);\r\n                    return;\r\n                }\r\n\r\n                // collect the medians of five at the beginning of the range\r\n                const _Diff _Median_count = _Length / static_cast<_Diff>(5);\r\n                auto _Median_last         = _First + _Median_count;\r\n                auto _Current             = _First;\r\n                for (auto _Median_dest = _First; _Median_dest != _Median_last; ++_Median_dest) {\r\n                    _Swap_med5(_Current, _Median_dest, _Pred, _Proj);\r\n                    _Current += static_cast<_Diff>(5);\r\n                }\r\n\r\n                // find the median of medians\r\n                auto _Median_mid = _First + (_Median_count >> 1);\r\n                _Nth_element_median_of_medians_unchecked(_First, _Median_mid, _Median_last, _Pred, _Proj);\r\n\r\n                // The medians before and after _Median_mid are\r\n                // less-equal and greater-equal _Median_mid, respectively.\r\n                // Move the ones after _Median_mid near _Last and then partition\r\n                // the elements between the medians at front and back by the pivot _Median_mid\r\n                // so that they do not have to be considered or moved in the partitioning pass.\r\n                const _Diff _Median_greater_count = (_Median_last - _Median_mid) - 1;\r\n                auto _Median_greater_first        = _Last - _Median_greater_count;\r\n                (void) _RANGES _Swap_ranges_common(\r\n                    _Median_mid + static_cast<_Diff>(1), _STD move(_Median_last), _Median_greater_first, _Last);\r\n\r\n                // Swap the median of medians to the middle\r\n                // to reduce the number of times it will be moved by the partition function.\r\n                auto _Middle = _First + (_Length >> 1);\r\n                _RANGES iter_swap(_Median_mid, _Middle);\r\n\r\n                const subrange<_It> _Mid = _RANGES _Partition_by_pivot_common(\r\n                    _STD move(_Median_mid), _STD move(_Middle), _STD move(_Median_greater_first), _Pred, _Proj);\r\n\r\n                if (_Mid.end() <= _Nth) {\r\n                    _First = _Mid.end();\r\n                } else if (_Mid.begin() <= _Nth) {\r\n                    return; // _Nth is in the subrange of elements equal to the pivot; done\r\n                } else {\r\n                    _Last = _Mid.begin();\r\n                }\r\n            }\r\n        }\r\n\r\n        template <class _It, class _Pr, class _Pj>\r\n        static constexpr void _Nth_element_common(_It _First, _It _Nth, _It _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sortable<_It, _Pr, _Pj>);\r\n\r\n            if (_Nth == _Last) {\r\n                return; // nothing to do\r\n            }\r\n\r\n            auto _Ideal = _Last - _First;\r\n\r\n            for (;;) {\r\n                const auto _Length = _Last - _First;\r\n                if (_Length <= _ISORT_MAX) {\r\n                    // sort any remainder\r\n                    _RANGES _Insertion_sort_common(_STD move(_First), _STD move(_Last), _Pred, _Proj);\r\n                    return;\r\n                }\r\n\r\n                if (_Ideal < (_Length >> 1)) {\r\n                    // fall back to medians-of-medians-of-five algorithm to guarantee O(n) runtime performance\r\n                    _Nth_element_median_of_medians_unchecked(\r\n                        _STD move(_First), _STD move(_Nth), _STD move(_Last), _Pred, _Proj);\r\n                    return;\r\n                }\r\n\r\n                const subrange<_It> _Mid = _RANGES _Partition_by_median_guess_common(_First, _Last, _Pred, _Proj);\r\n\r\n                if (_Mid.end() <= _Nth) {\r\n                    _First = _Mid.end();\r\n                } else if (_Mid.begin() <= _Nth) {\r\n                    return; // _Nth is in the subrange of elements equal to the pivot; done\r\n                } else {\r\n                    _Last = _Mid.begin();\r\n                }\r\n\r\n                // processed range should be reduced by 25% per iteration on average\r\n                _Ideal = (_Ideal >> 1) + (_Ideal >> 2);\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Nth_element_fn nth_element;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _Pr>\r\n_NODISCARD _CONSTEXPR20 bool includes(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _Pr _Pred) {\r\n    // test if every element in sorted [_First2, _Last2) is in sorted [_First1, _Last1)\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2 = _STD _Get_unwrapped(_Last2);\r\n    _DEBUG_ORDER_SET_UNWRAPPED(_InIt2, _UFirst1, _ULast1, _Pred);\r\n    _DEBUG_ORDER_SET_UNWRAPPED(_InIt1, _UFirst2, _ULast2, _Pred);\r\n\r\n    if (_UFirst2 == _ULast2) {\r\n        return true;\r\n    } else if (_UFirst1 == _ULast1) {\r\n        return false;\r\n    }\r\n\r\n#if _VECTORIZED_INCLUDES\r\n    if constexpr (_Vector_alg_includes_iterators_safe<_InIt1, _InIt2> && _Is_predicate_less<_InIt1, _Pr>) {\r\n        if (!_STD _Is_constant_evaluated()) {\r\n            return _STD _Includes_vectorized(_STD _To_address(_First1), _STD _To_address(_Last1),\r\n                _STD _To_address(_First2), _STD _To_address(_Last2));\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_INCLUDES ^^^\r\n\r\n    for (;;) {\r\n        if (_DEBUG_LT_PRED(_Pred, *_UFirst1, *_UFirst2)) {\r\n            ++_UFirst1;\r\n            if (_UFirst1 == _ULast1) {\r\n                return false;\r\n            }\r\n        } else if (_Pred(*_UFirst2, *_UFirst1)) {\r\n            return false;\r\n        } else {\r\n            ++_UFirst1;\r\n            ++_UFirst2;\r\n            if (_UFirst2 == _ULast2) {\r\n                return true;\r\n            } else if (_UFirst1 == _ULast1) {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2>\r\n_NODISCARD _CONSTEXPR20 bool includes(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2) {\r\n    // test if every element in sorted [_First2, _Last2) is in sorted [_First1, _Last1)\r\n    return _STD includes(_First1, _Last1, _First2, _Last2, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD bool includes(_ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _Pr _Pred) noexcept\r\n/* terminates */ {\r\n    // test if every element in sorted [_First2, _Last2) is in sorted [_First1, _Last1)\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    return _STD includes(_First1, _Last1, _First2, _Last2, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD bool includes(_ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2) noexcept\r\n/* terminates */ {\r\n    // test if every element in sorted [_First2, _Last2) is in sorted [_First1, _Last1)\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    return _STD includes(_First1, _Last1, _First2, _Last2);\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Includes_fn {\r\n    public:\r\n        template <input_iterator _It1, sentinel_for<_It1> _Se1, input_iterator _It2, sentinel_for<_It2> _Se2,\r\n            class _Pj1 = identity, class _Pj2 = identity,\r\n            indirect_strict_weak_order<projected<_It1, _Pj1>, projected<_It2, _Pj2>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr bool operator()(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n            return _Includes_unchecked(_RANGES _Unwrap_iter<_Se1>(_STD move(_First1)),\r\n                _RANGES _Unwrap_sent<_It1>(_STD move(_Last1)), _RANGES _Unwrap_iter<_Se2>(_STD move(_First2)),\r\n                _RANGES _Unwrap_sent<_It2>(_STD move(_Last2)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1),\r\n                _STD _Pass_fn(_Proj2));\r\n        }\r\n\r\n        template <input_range _Rng1, input_range _Rng2, class _Pj1 = identity, class _Pj2 = identity,\r\n            indirect_strict_weak_order<projected<iterator_t<_Rng1>, _Pj1>, projected<iterator_t<_Rng2>, _Pj2>> _Pr =\r\n                ranges::less>\r\n        _NODISCARD static constexpr bool operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            return _Includes_unchecked(_Ubegin(_Range1), _Uend(_Range1), _Ubegin(_Range2), _Uend(_Range2),\r\n                _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n        }\r\n\r\n    private:\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr bool _Includes_unchecked(\r\n            _It1 _First1, const _Se1 _Last1, _It2 _First2, const _Se2 _Last2, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_strict_weak_order<_Pr, projected<_It1, _Pj1>, projected<_It2, _Pj2>>);\r\n\r\n            if (_First2 == _Last2) {\r\n                return true;\r\n            } else if (_First1 == _Last1) {\r\n                return false;\r\n            }\r\n\r\n#if _VECTORIZED_INCLUDES\r\n            if constexpr (_Vector_alg_includes_iterators_safe<_It1, _It2> && _Is_predicate_less<_It1, _Pr>\r\n                          && sized_sentinel_for<_Se1, _It1> && sized_sentinel_for<_Se2, _It2>\r\n                          && is_same_v<_Pj1, identity> && is_same_v<_Pj2, identity>) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    const auto _First1_ptr = _STD to_address(_First1);\r\n                    const auto _First2_ptr = _STD to_address(_First2);\r\n                    const auto _Last1_ptr  = _STD to_address(_First1 + (_Last1 - _First1));\r\n                    const auto _Last2_ptr  = _STD to_address(_First2 + (_Last2 - _First2));\r\n                    return _STD _Includes_vectorized(_First1_ptr, _Last1_ptr, _First2_ptr, _Last2_ptr);\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_INCLUDES ^^^\r\n\r\n            for (;;) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj1, *_First1), _STD invoke(_Proj2, *_First2))) {\r\n                    ++_First1;\r\n                    if (_First1 == _Last1) {\r\n                        return false;\r\n                    }\r\n                } else if (_STD invoke(_Pred, _STD invoke(_Proj2, *_First2), _STD invoke(_Proj1, *_First1))) {\r\n                    return false;\r\n                } else {\r\n                    ++_First1;\r\n                    ++_First2;\r\n                    if (_First2 == _Last2) {\r\n                        return true;\r\n                    } else if (_First1 == _Last1) {\r\n                        return false;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Includes_fn includes;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _OutIt, class _Pr>\r\n_CONSTEXPR20 _OutIt set_union(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred) {\r\n    // OR sets [_First1, _Last1) and [_First2, _Last2)\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2 = _STD _Get_unwrapped(_Last2);\r\n    _DEBUG_ORDER_SET_UNWRAPPED(_InIt2, _UFirst1, _ULast1, _Pred);\r\n    _DEBUG_ORDER_SET_UNWRAPPED(_InIt1, _UFirst2, _ULast2, _Pred);\r\n    auto _UDest = _STD _Get_unwrapped_unverified(_Dest);\r\n    for (; _UFirst1 != _ULast1 && _UFirst2 != _ULast2; ++_UDest) {\r\n        if (_DEBUG_LT_PRED(_Pred, *_UFirst1, *_UFirst2)) { // copy first\r\n            *_UDest = *_UFirst1;\r\n            ++_UFirst1;\r\n        } else if (_Pred(*_UFirst2, *_UFirst1)) { // copy second\r\n            *_UDest = *_UFirst2;\r\n            ++_UFirst2;\r\n        } else { // advance both\r\n            *_UDest = *_UFirst1;\r\n            ++_UFirst1;\r\n            ++_UFirst2;\r\n        }\r\n    }\r\n\r\n    _UDest = _STD _Copy_unchecked(_UFirst1, _ULast1, _UDest);\r\n    _STD _Seek_wrapped(_Dest, _STD _Copy_unchecked(_UFirst2, _ULast2, _UDest));\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _OutIt>\r\n_CONSTEXPR20 _OutIt set_union(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest) {\r\n    // OR sets [_First1, _Last1) and [_First2, _Last2)\r\n    return _STD set_union(_First1, _Last1, _First2, _Last2, _Dest, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _FwdIt3, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt3 set_union(_ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _FwdIt3 _Dest,\r\n    _Pr _Pred) noexcept /* terminates */ {\r\n    // OR sets [_First1, _Last1) and [_First2, _Last2)\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt3);\r\n    return _STD set_union(_First1, _Last1, _First2, _Last2, _Dest, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _FwdIt3,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt3 set_union(_ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _FwdIt3 _Dest) noexcept\r\n/* terminates */ {\r\n    // OR sets [_First1, _Last1) and [_First2, _Last2)\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt3);\r\n    return _STD set_union(_First1, _Last1, _First2, _Last2, _Dest);\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In1, class _In2, class _Out>\r\n    using set_union_result = in_in_out_result<_In1, _In2, _Out>;\r\n\r\n    class _Set_union_fn {\r\n    public:\r\n        template <input_iterator _It1, sentinel_for<_It1> _Se1, input_iterator _It2, sentinel_for<_It2> _Se2,\r\n            weakly_incrementable _Out, class _Pr = ranges::less, class _Pj1 = identity, class _Pj2 = identity>\r\n            requires mergeable<_It1, _It2, _Out, _Pr, _Pj1, _Pj2>\r\n        static constexpr set_union_result<_It1, _It2, _Out> operator()(_It1 _First1, _Se1 _Last1, _It2 _First2,\r\n            _Se2 _Last2, _Out _Output, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n            auto _UResult = _Set_union_unchecked(_RANGES _Unwrap_iter<_Se1>(_STD move(_First1)),\r\n                _RANGES _Unwrap_sent<_It1>(_STD move(_Last1)), _RANGES _Unwrap_iter<_Se2>(_STD move(_First2)),\r\n                _RANGES _Unwrap_sent<_It2>(_STD move(_Last2)), _STD _Get_unwrapped_unverified(_STD move(_Output)),\r\n                _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in1));\r\n            _STD _Seek_wrapped(_First2, _STD move(_UResult.in2));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First1), _STD move(_First2), _STD move(_Output)};\r\n        }\r\n\r\n        template <input_range _Rng1, input_range _Rng2, weakly_incrementable _Out, class _Pr = ranges::less,\r\n            class _Pj1 = identity, class _Pj2 = identity>\r\n            requires mergeable<iterator_t<_Rng1>, iterator_t<_Rng2>, _Out, _Pr, _Pj1, _Pj2>\r\n        static constexpr set_union_result<borrowed_iterator_t<_Rng1>, borrowed_iterator_t<_Rng2>, _Out> operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2, _Out _Output, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            auto _First1  = _RANGES begin(_Range1);\r\n            auto _First2  = _RANGES begin(_Range2);\r\n            auto _UResult = _Set_union_unchecked(_RANGES _Unwrap_range_iter<_Rng1>(_STD move(_First1)), _Uend(_Range1),\r\n                _RANGES _Unwrap_range_iter<_Rng2>(_STD move(_First2)), _Uend(_Range2),\r\n                _STD _Get_unwrapped_unverified(_STD move(_Output)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1),\r\n                _STD _Pass_fn(_Proj2));\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in1));\r\n            _STD _Seek_wrapped(_First2, _STD move(_UResult.in2));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First1), _STD move(_First2), _STD move(_Output)};\r\n        }\r\n\r\n    private:\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Out, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr set_union_result<_It1, _It2, _Out> _Set_union_unchecked(_It1 _First1,\r\n            const _Se1 _Last1, _It2 _First2, const _Se2 _Last2, _Out _Output, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(weakly_incrementable<_Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(mergeable<_It1, _It2, _Out, _Pr, _Pj1, _Pj2>);\r\n\r\n            for (; _First1 != _Last1 && _First2 != _Last2; ++_Output) {\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj2, *_First2), _STD invoke(_Proj1, *_First1))) {\r\n                    *_Output = *_First2;\r\n                    ++_First2;\r\n                } else {\r\n                    *_Output = *_First1;\r\n                    if (!_STD invoke(_Pred, _STD invoke(_Proj1, *_First1), _STD invoke(_Proj2, *_First2))) {\r\n                        ++_First2;\r\n                    }\r\n                    ++_First1;\r\n                }\r\n            }\r\n\r\n            auto _UResult1 = _RANGES _Copy_unchecked(_STD move(_First1), _STD move(_Last1), _STD move(_Output));\r\n            auto _UResult2 = _RANGES _Copy_unchecked(_STD move(_First2), _STD move(_Last2), _STD move(_UResult1.out));\r\n            return {_STD move(_UResult1.in), _STD move(_UResult2.in), _STD move(_UResult2.out)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Set_union_fn set_union;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _OutIt, class _Pr>\r\n_CONSTEXPR20 _OutIt set_intersection(\r\n    _InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred) {\r\n    // AND sets [_First1, _Last1) and [_First2, _Last2)\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2 = _STD _Get_unwrapped(_Last2);\r\n    _DEBUG_ORDER_SET_UNWRAPPED(_InIt2, _UFirst1, _ULast1, _Pred);\r\n    _DEBUG_ORDER_SET_UNWRAPPED(_InIt1, _UFirst2, _ULast2, _Pred);\r\n    auto _UDest = _STD _Get_unwrapped_unverified(_Dest);\r\n    while (_UFirst1 != _ULast1 && _UFirst2 != _ULast2) {\r\n        if (_DEBUG_LT_PRED(_Pred, *_UFirst1, *_UFirst2)) {\r\n            ++_UFirst1;\r\n        } else if (_Pred(*_UFirst2, *_UFirst1)) {\r\n            ++_UFirst2;\r\n        } else {\r\n            *_UDest = *_UFirst1;\r\n            ++_UDest;\r\n            ++_UFirst1;\r\n            ++_UFirst2;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _OutIt>\r\n_CONSTEXPR20 _OutIt set_intersection(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest) {\r\n    // AND sets [_First1, _Last1) and [_First2, _Last2)\r\n    return _STD set_intersection(_First1, _Last1, _First2, _Last2, _Dest, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _FwdIt3, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt3 set_intersection(_ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _FwdIt3 _Dest,\r\n    _Pr _Pred) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _FwdIt3,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt3 set_intersection(_ExPo&& _Exec, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2,\r\n    _FwdIt3 _Dest) noexcept /* terminates */ {\r\n    // AND sets [_First1, _Last1) and [_First2, _Last2)\r\n    return _STD set_intersection(_STD forward<_ExPo>(_Exec), _First1, _Last1, _First2, _Last2, _Dest, less{});\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In1, class _In2, class _Out>\r\n    using set_intersection_result = in_in_out_result<_In1, _In2, _Out>;\r\n\r\n    class _Set_intersection_fn {\r\n    public:\r\n        template <input_iterator _It1, sentinel_for<_It1> _Se1, input_iterator _It2, sentinel_for<_It2> _Se2,\r\n            weakly_incrementable _Out, class _Pr = ranges::less, class _Pj1 = identity, class _Pj2 = identity>\r\n            requires mergeable<_It1, _It2, _Out, _Pr, _Pj1, _Pj2>\r\n        static constexpr set_intersection_result<_It1, _It2, _Out> operator()(_It1 _First1, _Se1 _Last1, _It2 _First2,\r\n            _Se2 _Last2, _Out _Output, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n            auto _UResult = _Set_intersection_unchecked(_RANGES _Unwrap_iter<_Se1>(_STD move(_First1)),\r\n                _RANGES _Unwrap_sent<_It1>(_STD move(_Last1)), _RANGES _Unwrap_iter<_Se2>(_STD move(_First2)),\r\n                _RANGES _Unwrap_sent<_It2>(_STD move(_Last2)), _STD _Get_unwrapped_unverified(_STD move(_Output)),\r\n                _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in1));\r\n            _STD _Seek_wrapped(_First2, _STD move(_UResult.in2));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First1), _STD move(_First2), _STD move(_Output)};\r\n        }\r\n\r\n        template <input_range _Rng1, input_range _Rng2, weakly_incrementable _Out, class _Pr = ranges::less,\r\n            class _Pj1 = identity, class _Pj2 = identity>\r\n            requires mergeable<iterator_t<_Rng1>, iterator_t<_Rng2>, _Out, _Pr, _Pj1, _Pj2>\r\n        static constexpr set_intersection_result<borrowed_iterator_t<_Rng1>, borrowed_iterator_t<_Rng2>, _Out>\r\n            operator()(\r\n                _Rng1&& _Range1, _Rng2&& _Range2, _Out _Output, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            auto _First1  = _RANGES begin(_Range1);\r\n            auto _First2  = _RANGES begin(_Range2);\r\n            auto _UResult = _Set_intersection_unchecked(_RANGES _Unwrap_range_iter<_Rng1>(_STD move(_First1)),\r\n                _Uend(_Range1), _RANGES _Unwrap_range_iter<_Rng2>(_STD move(_First2)), _Uend(_Range2),\r\n                _STD _Get_unwrapped_unverified(_STD move(_Output)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1),\r\n                _STD _Pass_fn(_Proj2));\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in1));\r\n            _STD _Seek_wrapped(_First2, _STD move(_UResult.in2));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First1), _STD move(_First2), _STD move(_Output)};\r\n        }\r\n\r\n    private:\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Out, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr set_intersection_result<_It1, _It2, _Out> _Set_intersection_unchecked(_It1 _First1,\r\n            const _Se1 _Last1, _It2 _First2, const _Se2 _Last2, _Out _Output, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(weakly_incrementable<_Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(mergeable<_It1, _It2, _Out, _Pr, _Pj1, _Pj2>);\r\n\r\n            for (;;) {\r\n                if (_First1 == _Last1) {\r\n                    _RANGES advance(_First2, _Last2);\r\n                    break;\r\n                } else if (_First2 == _Last2) {\r\n                    _RANGES advance(_First1, _Last1);\r\n                    break;\r\n                }\r\n\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj1, *_First1), _STD invoke(_Proj2, *_First2))) {\r\n                    ++_First1;\r\n                } else if (_STD invoke(_Pred, _STD invoke(_Proj2, *_First2), _STD invoke(_Proj1, *_First1))) {\r\n                    ++_First2;\r\n                } else {\r\n                    *_Output = *_First1;\r\n                    ++_Output;\r\n                    ++_First1;\r\n                    ++_First2;\r\n                }\r\n            }\r\n\r\n            return {_STD move(_First1), _STD move(_First2), _STD move(_Output)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Set_intersection_fn set_intersection;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _OutIt, class _Pr>\r\n_CONSTEXPR20 _OutIt set_difference(\r\n    _InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred) {\r\n    // take set [_First2, _Last2) from [_First1, _Last1)\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2 = _STD _Get_unwrapped(_Last2);\r\n    _DEBUG_ORDER_SET_UNWRAPPED(_InIt2, _UFirst1, _ULast1, _Pred);\r\n    _DEBUG_ORDER_SET_UNWRAPPED(_InIt1, _UFirst2, _ULast2, _Pred);\r\n    auto _UDest = _STD _Get_unwrapped_unverified(_Dest);\r\n    while (_UFirst1 != _ULast1 && _UFirst2 != _ULast2) {\r\n        if (_DEBUG_LT_PRED(_Pred, *_UFirst1, *_UFirst2)) { // copy first\r\n            *_UDest = *_UFirst1;\r\n            ++_UDest;\r\n            ++_UFirst1;\r\n        } else {\r\n            if (!_Pred(*_UFirst2, *_UFirst1)) {\r\n                ++_UFirst1;\r\n            }\r\n\r\n            ++_UFirst2;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _STD _Copy_unchecked(_UFirst1, _ULast1, _UDest));\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _OutIt>\r\n_CONSTEXPR20 _OutIt set_difference(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest) {\r\n    // take set [_First2, _Last2) from [_First1, _Last1)\r\n    return _STD set_difference(_First1, _Last1, _First2, _Last2, _Dest, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _FwdIt3, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt3 set_difference(_ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _FwdIt3 _Dest,\r\n    _Pr _Pred) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _FwdIt3,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt3 set_difference(_ExPo&& _Exec, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2,\r\n    _FwdIt3 _Dest) noexcept /* terminates */ {\r\n    // take set [_First2, _Last2) from [_First1, _Last1)\r\n    return _STD set_difference(_STD forward<_ExPo>(_Exec), _First1, _Last1, _First2, _Last2, _Dest, less{});\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using set_difference_result = in_out_result<_In, _Out>;\r\n\r\n    class _Set_difference_fn {\r\n    public:\r\n        template <input_iterator _It1, sentinel_for<_It1> _Se1, input_iterator _It2, sentinel_for<_It2> _Se2,\r\n            weakly_incrementable _Out, class _Pr = ranges::less, class _Pj1 = identity, class _Pj2 = identity>\r\n            requires mergeable<_It1, _It2, _Out, _Pr, _Pj1, _Pj2>\r\n        static constexpr set_difference_result<_It1, _Out> operator()(_It1 _First1, _Se1 _Last1, _It2 _First2,\r\n            _Se2 _Last2, _Out _Output, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n            auto _UResult = _Set_difference_unchecked(_RANGES _Unwrap_iter<_Se1>(_STD move(_First1)),\r\n                _RANGES _Unwrap_sent<_It1>(_STD move(_Last1)), _RANGES _Unwrap_iter<_Se2>(_STD move(_First2)),\r\n                _RANGES _Unwrap_sent<_It2>(_STD move(_Last2)), _STD _Get_unwrapped_unverified(_STD move(_Output)),\r\n                _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First1), _STD move(_Output)};\r\n        }\r\n\r\n        template <input_range _Rng1, input_range _Rng2, weakly_incrementable _Out, class _Pr = ranges::less,\r\n            class _Pj1 = identity, class _Pj2 = identity>\r\n            requires mergeable<iterator_t<_Rng1>, iterator_t<_Rng2>, _Out, _Pr, _Pj1, _Pj2>\r\n        static constexpr set_difference_result<borrowed_iterator_t<_Rng1>, _Out> operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2, _Out _Output, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            auto _First1  = _RANGES begin(_Range1);\r\n            auto _UResult = _Set_difference_unchecked(_RANGES _Unwrap_range_iter<_Rng1>(_STD move(_First1)),\r\n                _Uend(_Range1), _Ubegin(_Range2), _Uend(_Range2), _STD _Get_unwrapped_unverified(_STD move(_Output)),\r\n                _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First1), _STD move(_Output)};\r\n        }\r\n\r\n    private:\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Out, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr set_difference_result<_It1, _Out> _Set_difference_unchecked(_It1 _First1,\r\n            const _Se1 _Last1, _It2 _First2, const _Se2 _Last2, _Out _Output, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(weakly_incrementable<_Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(mergeable<_It1, _It2, _Out, _Pr, _Pj1, _Pj2>);\r\n\r\n            for (;;) {\r\n                if (_First1 == _Last1) {\r\n                    return {_STD move(_First1), _STD move(_Output)};\r\n                }\r\n\r\n                if (_First2 == _Last2) {\r\n                    return _RANGES _Copy_unchecked(_STD move(_First1), _STD move(_Last1), _STD move(_Output));\r\n                }\r\n\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj1, *_First1), _STD invoke(_Proj2, *_First2))) {\r\n                    *_Output = *_First1;\r\n                    ++_Output;\r\n                    ++_First1;\r\n                } else {\r\n                    if (!_STD invoke(_Pred, _STD invoke(_Proj2, *_First2), _STD invoke(_Proj1, *_First1))) {\r\n                        ++_First1;\r\n                    }\r\n\r\n                    ++_First2;\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Set_difference_fn set_difference;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _OutIt, class _Pr>\r\n_CONSTEXPR20 _OutIt set_symmetric_difference(\r\n    _InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred) {\r\n    // XOR sets [_First1, _Last1) and [_First2, _Last2)\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2 = _STD _Get_unwrapped(_Last2);\r\n    _DEBUG_ORDER_SET_UNWRAPPED(_InIt2, _UFirst1, _ULast1, _Pred);\r\n    _DEBUG_ORDER_SET_UNWRAPPED(_InIt1, _UFirst2, _ULast2, _Pred);\r\n    auto _UDest = _STD _Get_unwrapped_unverified(_Dest);\r\n    while (_UFirst1 != _ULast1 && _UFirst2 != _ULast2) {\r\n        if (_DEBUG_LT_PRED(_Pred, *_UFirst1, *_UFirst2)) { // copy first\r\n            *_UDest = *_UFirst1;\r\n            ++_UDest;\r\n            ++_UFirst1;\r\n        } else if (_Pred(*_UFirst2, *_UFirst1)) { // copy second\r\n            *_UDest = *_UFirst2;\r\n            ++_UDest;\r\n            ++_UFirst2;\r\n        } else { // advance both\r\n            ++_UFirst1;\r\n            ++_UFirst2;\r\n        }\r\n    }\r\n\r\n    _UDest = _STD _Copy_unchecked(_UFirst1, _ULast1, _UDest);\r\n    _STD _Seek_wrapped(_Dest, _STD _Copy_unchecked(_UFirst2, _ULast2, _UDest));\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _OutIt>\r\n_CONSTEXPR20 _OutIt set_symmetric_difference(\r\n    _InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2, _OutIt _Dest) {\r\n    // XOR sets [_First1, _Last1) and [_First2, _Last2)\r\n    return _STD set_symmetric_difference(_First1, _Last1, _First2, _Last2, _Dest, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _FwdIt3, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt3 set_symmetric_difference(_ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2,\r\n    _FwdIt3 _Dest, _Pr _Pred) noexcept /* terminates */ {\r\n    // XOR sets [_First1, _Last1) and [_First2, _Last2)\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt3);\r\n    return _STD set_symmetric_difference(_First1, _Last1, _First2, _Last2, _Dest, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _FwdIt3,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt3 set_symmetric_difference(_ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2,\r\n    _FwdIt3 _Dest) noexcept /* terminates */ {\r\n    // XOR sets [_First1, _Last1) and [_First2, _Last2)\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt3);\r\n    return _STD set_symmetric_difference(_First1, _Last1, _First2, _Last2, _Dest);\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In1, class _In2, class _Out>\r\n    using set_symmetric_difference_result = in_in_out_result<_In1, _In2, _Out>;\r\n\r\n    class _Set_symmetric_difference_fn {\r\n    public:\r\n        template <input_iterator _It1, sentinel_for<_It1> _Se1, input_iterator _It2, sentinel_for<_It2> _Se2,\r\n            weakly_incrementable _Out, class _Pr = ranges::less, class _Pj1 = identity, class _Pj2 = identity>\r\n            requires mergeable<_It1, _It2, _Out, _Pr, _Pj1, _Pj2>\r\n        static constexpr set_symmetric_difference_result<_It1, _It2, _Out> operator()(_It1 _First1, _Se1 _Last1,\r\n            _It2 _First2, _Se2 _Last2, _Out _Output, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n            auto _UResult = _Set_symmetric_difference_unchecked(_RANGES _Unwrap_iter<_Se1>(_STD move(_First1)),\r\n                _RANGES _Unwrap_sent<_It1>(_STD move(_Last1)), _RANGES _Unwrap_iter<_Se2>(_STD move(_First2)),\r\n                _RANGES _Unwrap_sent<_It2>(_STD move(_Last2)), _STD _Get_unwrapped_unverified(_STD move(_Output)),\r\n                _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in1));\r\n            _STD _Seek_wrapped(_First2, _STD move(_UResult.in2));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First1), _STD move(_First2), _STD move(_Output)};\r\n        }\r\n\r\n        template <input_range _Rng1, input_range _Rng2, weakly_incrementable _Out, class _Pr = ranges::less,\r\n            class _Pj1 = identity, class _Pj2 = identity>\r\n            requires mergeable<iterator_t<_Rng1>, iterator_t<_Rng2>, _Out, _Pr, _Pj1, _Pj2>\r\n        static constexpr set_symmetric_difference_result<borrowed_iterator_t<_Rng1>, borrowed_iterator_t<_Rng2>, _Out>\r\n            operator()(\r\n                _Rng1&& _Range1, _Rng2&& _Range2, _Out _Output, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            auto _First1  = _RANGES begin(_Range1);\r\n            auto _First2  = _RANGES begin(_Range2);\r\n            auto _UResult = _Set_symmetric_difference_unchecked(_RANGES _Unwrap_range_iter<_Rng1>(_STD move(_First1)),\r\n                _Uend(_Range1), _RANGES _Unwrap_range_iter<_Rng2>(_STD move(_First2)), _Uend(_Range2),\r\n                _STD _Get_unwrapped_unverified(_STD move(_Output)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1),\r\n                _STD _Pass_fn(_Proj2));\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in1));\r\n            _STD _Seek_wrapped(_First2, _STD move(_UResult.in2));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First1), _STD move(_First2), _STD move(_Output)};\r\n        }\r\n\r\n    private:\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Out, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr set_symmetric_difference_result<_It1, _It2, _Out>\r\n            _Set_symmetric_difference_unchecked(_It1 _First1, const _Se1 _Last1, _It2 _First2, const _Se2 _Last2,\r\n                _Out _Output, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(weakly_incrementable<_Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(mergeable<_It1, _It2, _Out, _Pr, _Pj1, _Pj2>);\r\n\r\n            for (;;) {\r\n                if (_First1 == _Last1) {\r\n                    auto _UResult = _RANGES _Copy_unchecked(_STD move(_First2), _STD move(_Last2), _STD move(_Output));\r\n                    return {_STD move(_First1), _STD move(_UResult.in), _STD move(_UResult.out)};\r\n                }\r\n\r\n                if (_First2 == _Last2) {\r\n                    auto _UResult = _RANGES _Copy_unchecked(_STD move(_First1), _STD move(_Last1), _STD move(_Output));\r\n                    return {_STD move(_UResult.in), _STD move(_First2), _STD move(_UResult.out)};\r\n                }\r\n\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj1, *_First1), _STD invoke(_Proj2, *_First2))) {\r\n                    *_Output = *_First1;\r\n                    ++_Output;\r\n                    ++_First1;\r\n                } else if (_STD invoke(_Pred, _STD invoke(_Proj2, *_First2), _STD invoke(_Proj1, *_First1))) {\r\n                    *_Output = *_First2;\r\n                    ++_Output;\r\n                    ++_First2;\r\n                } else {\r\n                    ++_First1;\r\n                    ++_First2;\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Set_symmetric_difference_fn set_symmetric_difference;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class _FwdIt, class _Pr>\r\nconstexpr pair<_FwdIt, _FwdIt> _Minmax_element_unchecked(_FwdIt _First, _FwdIt _Last, _Pr _Pred) {\r\n#if _VECTORIZED_MINMAX_ELEMENT\r\n    if constexpr (_Is_min_max_optimization_safe<_FwdIt, _Pr>) {\r\n        if (!_Is_constant_evaluated()) {\r\n            const auto _First_ptr = _STD _To_address(_First);\r\n            const auto _Result    = _STD _Minmax_element_vectorized(_First_ptr, _STD _To_address(_Last));\r\n            if constexpr (is_pointer_v<_FwdIt>) {\r\n                return _Result;\r\n            } else {\r\n                return {_First + static_cast<_Iter_diff_t<_FwdIt>>(_Result.first - _First_ptr),\r\n                    _First + static_cast<_Iter_diff_t<_FwdIt>>(_Result.second - _First_ptr)};\r\n            }\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_MINMAX_ELEMENT ^^^\r\n\r\n    // find smallest and largest elements\r\n    pair<_FwdIt, _FwdIt> _Found(_First, _First);\r\n\r\n    if (_First != _Last) {\r\n        while (++_First != _Last) { // process one or two elements\r\n            _FwdIt _Next = _First;\r\n            if (++_Next == _Last) { // process last element\r\n                if (_DEBUG_LT_PRED(_Pred, *_First, *_Found.first)) {\r\n                    _Found.first = _First;\r\n                } else if (!_DEBUG_LT_PRED(_Pred, *_First, *_Found.second)) {\r\n                    _Found.second = _First;\r\n                }\r\n            } else { // process next two elements\r\n                if (_DEBUG_LT_PRED(_Pred, *_Next, *_First)) { // test _Next for new smallest\r\n                    if (_DEBUG_LT_PRED(_Pred, *_Next, *_Found.first)) {\r\n                        _Found.first = _Next;\r\n                    }\r\n\r\n                    if (!_DEBUG_LT_PRED(_Pred, *_First, *_Found.second)) {\r\n                        _Found.second = _First;\r\n                    }\r\n                } else { // test _First for new smallest\r\n                    if (_DEBUG_LT_PRED(_Pred, *_First, *_Found.first)) {\r\n                        _Found.first = _First;\r\n                    }\r\n\r\n                    if (!_DEBUG_LT_PRED(_Pred, *_Next, *_Found.second)) {\r\n                        _Found.second = _Next;\r\n                    }\r\n                }\r\n                _First = _Next;\r\n            }\r\n        }\r\n    }\r\n\r\n    return _Found;\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Pr>\r\n_NODISCARD constexpr pair<_FwdIt, _FwdIt> minmax_element(_FwdIt _First, _FwdIt _Last, _Pr _Pred) {\r\n    // find smallest and largest elements\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _Result =\r\n        _STD _Minmax_element_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last), _STD _Pass_fn(_Pred));\r\n    _STD _Seek_wrapped(_Last, _Result.second);\r\n    _STD _Seek_wrapped(_First, _Result.first);\r\n    return {_First, _Last};\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt>\r\n_NODISCARD constexpr pair<_FwdIt, _FwdIt> minmax_element(_FwdIt _First, _FwdIt _Last) {\r\n    // find smallest and largest elements\r\n    return _STD minmax_element(_First, _Last, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD pair<_FwdIt, _FwdIt> minmax_element(_ExPo&&, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept\r\n/* terminates */ {\r\n    // find smallest and largest elements\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    return _STD minmax_element(_First, _Last, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD pair<_FwdIt, _FwdIt> minmax_element(_ExPo&&, _FwdIt _First, _FwdIt _Last) noexcept /* terminates */ {\r\n    // find smallest and largest elements\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    return _STD minmax_element(_First, _Last);\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _Ty>\r\n    using minmax_element_result = min_max_result<_Ty>;\r\n\r\n    class _Minmax_element_fn {\r\n    public:\r\n        template <forward_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<_It, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr minmax_element_result<_It> operator()(\r\n            _It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _Minmax_element_fwd_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.min));\r\n            auto _Second = _First;\r\n            _STD _Seek_wrapped(_Second, _STD move(_UResult.max));\r\n            return {_STD move(_First), _STD move(_Second)};\r\n        }\r\n\r\n        template <forward_range _Rng, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr minmax_element_result<borrowed_iterator_t<_Rng>> operator()(\r\n            _Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            auto _UResult = _Minmax_element_fwd_unchecked(\r\n                _RANGES _Ubegin(_Range), _RANGES _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return {_RANGES _Rewrap_iterator(_Range, _STD move(_UResult.min)),\r\n                _RANGES _Rewrap_iterator(_Range, _STD move(_UResult.max))};\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Pr, class _Pj>\r\n        _NODISCARD static constexpr min_max_result<_It> _Minmax_element_fwd_unchecked(\r\n            _It _First, const _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_strict_weak_order<_Pr, projected<_It, _Pj>>);\r\n\r\n#if _VECTORIZED_MINMAX_ELEMENT\r\n            if constexpr (is_same_v<_Pj, identity> && _Is_min_max_optimization_safe<_It, _Pr>\r\n                          && sized_sentinel_for<_Se, _It>) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    const auto _First_ptr = _STD to_address(_First);\r\n                    const auto _Last_ptr  = _STD to_address(_First + (_Last - _First));\r\n                    const auto _Result    = _STD _Minmax_element_vectorized(_First_ptr, _Last_ptr);\r\n                    if constexpr (is_pointer_v<_It>) {\r\n                        return {_Result.first, _Result.second};\r\n                    } else {\r\n                        return {_First + static_cast<iter_difference_t<_It>>(_Result.first - _First_ptr),\r\n                            _First + static_cast<iter_difference_t<_It>>(_Result.second - _First_ptr)};\r\n                    }\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_MINMAX_ELEMENT ^^^\r\n\r\n            min_max_result<_It> _Found{_First, _First};\r\n\r\n            if (_First == _Last) {\r\n                return _Found;\r\n            }\r\n\r\n            while (++_First != _Last) { // process one or two elements\r\n                _It _Prev = _First;\r\n                if (++_First == _Last) { // process last element\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj, *_Prev), _STD invoke(_Proj, *_Found.min))) {\r\n                        _Found.min = _Prev;\r\n                    } else if (!_STD invoke(_Pred, _STD invoke(_Proj, *_Prev), _STD invoke(_Proj, *_Found.max))) {\r\n                        _Found.max = _Prev;\r\n                    }\r\n\r\n                    break;\r\n                }\r\n\r\n                // process next two elements\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_First), _STD invoke(_Proj, *_Prev))) {\r\n                    // test _First for new smallest\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj, *_First), _STD invoke(_Proj, *_Found.min))) {\r\n                        _Found.min = _First;\r\n                    }\r\n\r\n                    if (!_STD invoke(_Pred, _STD invoke(_Proj, *_Prev), _STD invoke(_Proj, *_Found.max))) {\r\n                        _Found.max = _Prev;\r\n                    }\r\n                } else { // test _Prev for new smallest\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj, *_Prev), _STD invoke(_Proj, *_Found.min))) {\r\n                        _Found.min = _Prev;\r\n                    }\r\n\r\n                    if (!_STD invoke(_Pred, _STD invoke(_Proj, *_First), _STD invoke(_Proj, *_Found.max))) {\r\n                        _Found.max = _First;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return _Found;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Minmax_element_fn minmax_element;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Ty, class _Pr>\r\n_NODISCARD constexpr pair<const _Ty&, const _Ty&> minmax(\r\n    const _Ty& _Left _MSVC_LIFETIMEBOUND, const _Ty& _Right _MSVC_LIFETIMEBOUND, _Pr _Pred)\r\n    noexcept(noexcept(_DEBUG_LT_PRED(_Pred, _Right, _Left))) /* strengthened */ {\r\n    // return pair(leftmost/smaller, rightmost/larger) of _Left and _Right\r\n    if (_DEBUG_LT_PRED(_Pred, _Right, _Left)) {\r\n        return {_Right, _Left};\r\n    }\r\n\r\n    return {_Left, _Right};\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Pr>\r\n_NODISCARD constexpr pair<_Ty, _Ty> minmax(initializer_list<_Ty> _Ilist, _Pr _Pred) {\r\n    // return {leftmost/smallest, rightmost/largest}\r\n    _STL_ASSERT(\r\n        _Ilist.size() != 0, \"An initializer_list passed to std::minmax must not be empty. (N4971 [alg.min.max]/21)\");\r\n#if _VECTORIZED_MINMAX\r\n    if constexpr (_Is_min_max_value_optimization_safe<const _Ty*, _Pr>) {\r\n        if (!_STD _Is_constant_evaluated()) {\r\n            const auto _Result = _STD _Minmax_vectorized(_Ilist.begin(), _Ilist.end());\r\n            return {static_cast<_Ty>(_Result._Min), static_cast<_Ty>(_Result._Max)};\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_MINMAX ^^^\r\n    pair<const _Ty*, const _Ty*> _Res =\r\n        _STD _Minmax_element_unchecked(_Ilist.begin(), _Ilist.end(), _STD _Pass_fn(_Pred));\r\n    return pair<_Ty, _Ty>(*_Res.first, *_Res.second);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD constexpr pair<const _Ty&, const _Ty&> minmax(const _Ty& _Left _MSVC_LIFETIMEBOUND,\r\n    const _Ty& _Right _MSVC_LIFETIMEBOUND) noexcept(noexcept(_Right < _Left)) /* strengthened */ {\r\n    // return pair(leftmost/smaller, rightmost/larger) of _Left and _Right\r\n    if (_Right < _Left) {\r\n        _STL_ASSERT(!(_Left < _Right), \"invalid comparator\");\r\n        return {_Right, _Left};\r\n    }\r\n\r\n    return {_Left, _Right};\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD constexpr pair<_Ty, _Ty> minmax(initializer_list<_Ty> _Ilist) {\r\n    // return {leftmost/smallest, rightmost/largest}\r\n    return _STD minmax(_Ilist, less<>{});\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _Ty>\r\n    using minmax_result = min_max_result<_Ty>;\r\n\r\n    class _Minmax_fn {\r\n    public:\r\n        template <class _Ty, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<const _Ty*, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr minmax_result<const _Ty&> operator()(const _Ty& _Left _MSVC_LIFETIMEBOUND,\r\n            const _Ty& _Right _MSVC_LIFETIMEBOUND, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            if (_STD invoke(_Pred, _STD invoke(_Proj, _Right), _STD invoke(_Proj, _Left))) {\r\n                return {_Right, _Left};\r\n            } else {\r\n                return {_Left, _Right};\r\n            }\r\n        }\r\n\r\n        template <copyable _Ty, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<const _Ty*, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr minmax_result<_Ty> operator()(\r\n            initializer_list<_Ty> _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            const auto _First = _Range.begin();\r\n            const auto _Last  = _Range.end();\r\n            _STL_ASSERT(_First != _Last,\r\n                \"An initializer_list passed to std::ranges::minmax must not be empty. (N4971 [alg.min.max]/21)\");\r\n\r\n#if _VECTORIZED_MINMAX || _VECTORIZED_MINMAX_ELEMENT\r\n            if constexpr (is_same_v<_Pj, identity>) {\r\n#if _VECTORIZED_MINMAX\r\n                if constexpr (_Is_min_max_value_optimization_safe<const _Ty*, _Pr>) {\r\n                    if (!_STD is_constant_evaluated()) {\r\n                        const auto _Result = _STD _Minmax_vectorized(_First, _Last);\r\n                        return {static_cast<_Ty>(_Result._Min), static_cast<_Ty>(_Result._Max)};\r\n                    }\r\n                } else\r\n#endif // ^^^ _VECTORIZED_MINMAX ^^^\r\n                {\r\n#if _VECTORIZED_MINMAX_ELEMENT\r\n                    if constexpr (_Is_min_max_optimization_safe<const _Ty*, _Pr>) {\r\n                        if (!_STD is_constant_evaluated()) {\r\n                            const auto _Result = _STD _Minmax_element_vectorized(_First, _Last);\r\n                            return {*static_cast<const _Ty*>(_Result.first), *static_cast<const _Ty*>(_Result.second)};\r\n                        }\r\n                    }\r\n#endif // ^^^ _VECTORIZED_MINMAX_ELEMENT ^^^\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_MINMAX || _VECTORIZED_MINMAX_ELEMENT ^^^\r\n\r\n            return _Minmax_fwd_unchecked(_First, _Last, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n        }\r\n\r\n        template <input_range _Rng, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>\r\n            requires indirectly_copyable_storable<iterator_t<_Rng>, range_value_t<_Rng>*>\r\n        _NODISCARD static constexpr minmax_result<range_value_t<_Rng>> operator()(\r\n            _Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            auto _UFirst = _RANGES _Ubegin(_Range);\r\n            auto _ULast  = _RANGES _Uend(_Range);\r\n            _STL_ASSERT(\r\n                _UFirst != _ULast, \"A range passed to std::ranges::minmax must not be empty. (N4971 [alg.min.max]/21)\");\r\n            using _Vty = range_value_t<_Rng>;\r\n\r\n#if _VECTORIZED_MINMAX || _VECTORIZED_MINMAX_ELEMENT\r\n            if constexpr (is_same_v<_Pj, identity> && sized_sentinel_for<decltype(_ULast), decltype(_UFirst)>) {\r\n#if _VECTORIZED_MINMAX\r\n                if constexpr (_Is_min_max_value_optimization_safe<decltype(_UFirst), _Pr>) {\r\n                    if (!_STD is_constant_evaluated()) {\r\n                        const auto _First_ptr = _STD to_address(_UFirst);\r\n                        const auto _Last_ptr  = _STD to_address(_UFirst + (_ULast - _UFirst));\r\n                        const auto _Result    = _STD _Minmax_vectorized(_First_ptr, _Last_ptr);\r\n                        return {static_cast<_Vty>(_Result._Min), static_cast<_Vty>(_Result._Max)};\r\n                    }\r\n                } else\r\n#endif // ^^^ _VECTORIZED_MINMAX ^^^\r\n                {\r\n#if _VECTORIZED_MINMAX_ELEMENT\r\n                    if constexpr (_Is_min_max_optimization_safe<decltype(_UFirst), _Pr>) {\r\n                        if (!_STD is_constant_evaluated()) {\r\n                            const auto _First_ptr = _STD to_address(_UFirst);\r\n                            const auto _Last_ptr  = _STD to_address(_UFirst + (_ULast - _UFirst));\r\n                            const auto _Result    = _STD _Minmax_element_vectorized(_First_ptr, _Last_ptr);\r\n                            return {\r\n                                *static_cast<const _Vty*>(_Result.first), *static_cast<const _Vty*>(_Result.second)};\r\n                        }\r\n                    }\r\n#endif // ^^^ _VECTORIZED_MINMAX_ELEMENT ^^^\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_MINMAX || _VECTORIZED_MINMAX_ELEMENT ^^^\r\n\r\n            if constexpr (forward_range<_Rng> && _Prefer_iterator_copies<decltype(_UFirst)>) {\r\n                return _Minmax_fwd_unchecked(\r\n                    _STD move(_UFirst), _STD move(_ULast), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            } else {\r\n                // This initialization is correct, similar to the N4950 [dcl.init.aggr]/6 example\r\n                minmax_result<_Vty> _Found = {static_cast<_Vty>(*_UFirst), _Found.min};\r\n                if (_UFirst == _ULast) {\r\n                    return _Found;\r\n                }\r\n\r\n                while (++_UFirst != _ULast) { // process one or two elements\r\n                    _Vty _Prev(*_UFirst);\r\n                    if (++_UFirst == _ULast) { // process last element\r\n                        if (_STD invoke(_Pred, _STD invoke(_Proj, _Prev), _STD invoke(_Proj, _Found.min))) {\r\n                            _Found.min = _STD move(_Prev);\r\n                        } else if (!_STD invoke(_Pred, _STD invoke(_Proj, _Prev), _STD invoke(_Proj, _Found.max))) {\r\n                            _Found.max = _STD move(_Prev);\r\n                        }\r\n\r\n                        break;\r\n                    }\r\n\r\n                    // process next two elements\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj, *_UFirst), _STD invoke(_Proj, _Prev))) {\r\n                        // test _UFirst for new smallest\r\n                        if (_STD invoke(_Pred, _STD invoke(_Proj, *_UFirst), _STD invoke(_Proj, _Found.min))) {\r\n                            _Found.min = *_UFirst;\r\n                        }\r\n\r\n                        if (!_STD invoke(_Pred, _STD invoke(_Proj, _Prev), _STD invoke(_Proj, _Found.max))) {\r\n                            _Found.max = _STD move(_Prev);\r\n                        }\r\n                    } else { // test _Prev for new smallest\r\n                        if (_STD invoke(_Pred, _STD invoke(_Proj, _Prev), _STD invoke(_Proj, _Found.min))) {\r\n                            _Found.min = _STD move(_Prev);\r\n                        }\r\n\r\n                        if (!_STD invoke(_Pred, _STD invoke(_Proj, *_UFirst), _STD invoke(_Proj, _Found.max))) {\r\n                            _Found.max = *_UFirst;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                return _Found;\r\n            }\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Pr, class _Pj>\r\n        _NODISCARD static constexpr minmax_result<iter_value_t<_It>> _Minmax_fwd_unchecked(\r\n            _It _First, const _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_strict_weak_order<_Pr, projected<_It, _Pj>>);\r\n\r\n            _STL_INTERNAL_CHECK(_First != _Last);\r\n\r\n            using _Vty = iter_value_t<_It>;\r\n\r\n            auto _Found_min = _First;\r\n            if (++_First == _Last) {\r\n                // This initialization is correct, similar to the N4950 [dcl.init.aggr]/6 example\r\n                minmax_result<_Vty> _Result = {static_cast<_Vty>(*_Found_min), _Result.min};\r\n                return _Result;\r\n            }\r\n\r\n            auto _Found_max = _First;\r\n            if (_STD invoke(_Pred, _STD invoke(_Proj, *_Found_max), _STD invoke(_Proj, *_Found_min))) {\r\n                _RANGES swap(_Found_min, _Found_max);\r\n            }\r\n\r\n            while (++_First != _Last) { // process one or two elements\r\n                _It _Prev = _First;\r\n                if (++_First == _Last) { // process last element\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj, *_Prev), _STD invoke(_Proj, *_Found_min))) {\r\n                        _Found_min = _Prev;\r\n                    } else if (!_STD invoke(_Pred, _STD invoke(_Proj, *_Prev), _STD invoke(_Proj, *_Found_max))) {\r\n                        _Found_max = _Prev;\r\n                    }\r\n\r\n                    break;\r\n                }\r\n\r\n                // process two elements\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_First), _STD invoke(_Proj, *_Prev))) {\r\n                    // test _First for new smallest\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj, *_First), _STD invoke(_Proj, *_Found_min))) {\r\n                        _Found_min = _First;\r\n                    }\r\n\r\n                    if (!_STD invoke(_Pred, _STD invoke(_Proj, *_Prev), _STD invoke(_Proj, *_Found_max))) {\r\n                        _Found_max = _Prev;\r\n                    }\r\n                } else { // test _Prev for new smallest\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj, *_Prev), _STD invoke(_Proj, *_Found_min))) {\r\n                        _Found_min = _Prev;\r\n                    }\r\n\r\n                    if (!_STD invoke(_Pred, _STD invoke(_Proj, *_First), _STD invoke(_Proj, *_Found_max))) {\r\n                        _Found_max = _First;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return {static_cast<_Vty>(*_Found_min), static_cast<_Vty>(*_Found_max)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Minmax_fn minmax;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _BidIt, class _Pr>\r\n_CONSTEXPR20 bool next_permutation(_BidIt _First, _BidIt _Last, _Pr _Pred) {\r\n    // permute and test for pure ascending\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UNext       = _ULast;\r\n    if (_UFirst == _ULast || _UFirst == --_UNext) {\r\n        return false;\r\n    }\r\n\r\n    for (;;) { // find rightmost element smaller than successor\r\n        auto _UNext1 = _UNext;\r\n        if (_DEBUG_LT_PRED(_Pred, *--_UNext, *_UNext1)) { // swap with rightmost element that's smaller, flip suffix\r\n            auto _UMid = _ULast;\r\n            do {\r\n                --_UMid;\r\n            } while (!_DEBUG_LT_PRED(_Pred, *_UNext, *_UMid));\r\n\r\n            swap(*_UNext, *_UMid); // intentional ADL\r\n            _STD reverse(_UNext1, _ULast);\r\n            return true;\r\n        }\r\n\r\n        if (_UNext == _UFirst) { // pure descending, flip all\r\n            _STD reverse(_UFirst, _ULast);\r\n            return false;\r\n        }\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt>\r\n_CONSTEXPR20 bool next_permutation(_BidIt _First, _BidIt _Last) {\r\n    // permute and test for pure ascending\r\n    return _STD next_permutation(_First, _Last, less<>{});\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In>\r\n    using next_permutation_result = in_found_result<_In>;\r\n\r\n    class _Next_permutation_fn {\r\n    public:\r\n        template <bidirectional_iterator _It, sentinel_for<_It> _Se, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<_It, _Pr, _Pj>\r\n        static constexpr next_permutation_result<_It> operator()(\r\n            _It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast  = _RANGES _Get_final_iterator_unwrapped<_It>(_UFirst, _STD move(_Last));\r\n            _STD _Seek_wrapped(_First, _ULast);\r\n            const bool _Found = _Next_permutation_common(\r\n                _STD move(_UFirst), _STD move(_ULast), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return {_STD move(_First), _Found};\r\n        }\r\n\r\n        template <bidirectional_range _Rng, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<iterator_t<_Rng>, _Pr, _Pj>\r\n        static constexpr next_permutation_result<borrowed_iterator_t<_Rng>> operator()(\r\n            _Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            auto _ULast = _RANGES _Get_final_iterator_unwrapped(_Range);\r\n            const bool _Found =\r\n                _Next_permutation_common(_Ubegin(_Range), _ULast, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return {_RANGES _Rewrap_iterator(_Range, _STD move(_ULast)), _Found};\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Pr, class _Pj>\r\n        _NODISCARD static constexpr bool _Next_permutation_common(_It _First, _It _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(bidirectional_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sortable<_It, _Pr, _Pj>);\r\n\r\n            auto _Next = _Last;\r\n            if (_First == _Last || _First == --_Next) {\r\n                return false;\r\n            }\r\n\r\n            for (;;) { // find rightmost element smaller than successor\r\n                auto _Next1 = _Next;\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *--_Next), _STD invoke(_Proj, *_Next1))) {\r\n                    // swap with rightmost element that's smaller, flip suffix\r\n                    auto _Mid = _Last;\r\n                    do {\r\n                        --_Mid;\r\n                    } while (!_STD invoke(_Pred, _STD invoke(_Proj, *_Next), _STD invoke(_Proj, *_Mid)));\r\n\r\n                    _RANGES iter_swap(_Next, _Mid);\r\n                    _RANGES _Reverse_common(_STD move(_Next1), _STD move(_Last));\r\n                    return true;\r\n                }\r\n\r\n                if (_Next == _First) { // pure descending, flip all\r\n                    _RANGES _Reverse_common(_STD move(_First), _STD move(_Last));\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Next_permutation_fn next_permutation;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _BidIt, class _Pr>\r\n_CONSTEXPR20 bool prev_permutation(_BidIt _First, _BidIt _Last, _Pr _Pred) {\r\n    // reverse permute and test for pure descending\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UNext       = _ULast;\r\n    if (_UFirst == _ULast || _UFirst == --_UNext) {\r\n        return false;\r\n    }\r\n\r\n    for (;;) { // find rightmost element not smaller than successor\r\n        auto _UNext1 = _UNext;\r\n        if (_DEBUG_LT_PRED(_Pred, *_UNext1, *--_UNext)) { // swap with rightmost element that's not smaller, flip suffix\r\n            auto _UMid = _ULast;\r\n            do {\r\n                --_UMid;\r\n            } while (!_DEBUG_LT_PRED(_Pred, *_UMid, *_UNext));\r\n\r\n            swap(*_UNext, *_UMid); // intentional ADL\r\n            _STD reverse(_UNext1, _ULast);\r\n            return true;\r\n        }\r\n\r\n        if (_UNext == _UFirst) { // pure ascending, flip all\r\n            _STD reverse(_UFirst, _ULast);\r\n            return false;\r\n        }\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt>\r\n_CONSTEXPR20 bool prev_permutation(_BidIt _First, _BidIt _Last) {\r\n    // reverse permute and test for pure descending\r\n    return _STD prev_permutation(_First, _Last, less<>{});\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In>\r\n    using prev_permutation_result = in_found_result<_In>;\r\n\r\n    class _Prev_permutation_fn {\r\n    public:\r\n        template <bidirectional_iterator _It, sentinel_for<_It> _Se, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<_It, _Pr, _Pj>\r\n        static constexpr prev_permutation_result<_It> operator()(\r\n            _It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast  = _RANGES _Get_final_iterator_unwrapped<_It>(_UFirst, _STD move(_Last));\r\n            _STD _Seek_wrapped(_First, _ULast);\r\n            const bool _Found = _Prev_permutation_common(\r\n                _STD move(_UFirst), _STD move(_ULast), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return {_STD move(_First), _Found};\r\n        }\r\n\r\n        template <bidirectional_range _Rng, class _Pr = ranges::less, class _Pj = identity>\r\n            requires sortable<iterator_t<_Rng>, _Pr, _Pj>\r\n        static constexpr prev_permutation_result<borrowed_iterator_t<_Rng>> operator()(\r\n            _Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            auto _ULast = _RANGES _Get_final_iterator_unwrapped(_Range);\r\n            const bool _Found =\r\n                _Prev_permutation_common(_Ubegin(_Range), _ULast, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return {_RANGES _Rewrap_iterator(_Range, _STD move(_ULast)), _Found};\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Pr, class _Pj>\r\n        _NODISCARD static constexpr bool _Prev_permutation_common(_It _First, _It _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(bidirectional_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sortable<_It, _Pr, _Pj>);\r\n\r\n            auto _Next = _Last;\r\n            if (_First == _Last || _First == --_Next) {\r\n                return false;\r\n            }\r\n\r\n            for (;;) { // find rightmost element not smaller than successor\r\n                auto _Next1 = _Next;\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_Next1), _STD invoke(_Proj, *--_Next))) {\r\n                    // swap with rightmost element that's not smaller, flip suffix\r\n                    auto _Mid = _Last;\r\n                    do {\r\n                        --_Mid;\r\n                    } while (!_STD invoke(_Pred, _STD invoke(_Proj, *_Mid), _STD invoke(_Proj, *_Next)));\r\n\r\n                    _RANGES iter_swap(_Next, _Mid);\r\n                    _RANGES _Reverse_common(_STD move(_Next1), _STD move(_Last));\r\n                    return true;\r\n                }\r\n\r\n                if (_Next == _First) { // pure ascending, flip all\r\n                    _RANGES _Reverse_common(_STD move(_First), _STD move(_Last));\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Prev_permutation_fn prev_permutation;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Pr>\r\n_NODISCARD _CONSTEXPR20 _FwdIt is_sorted_until(const _FwdIt _First, _FwdIt _Last, _Pr _Pred) {\r\n    // find extent of range that is ordered by predicate\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst = _STD _Get_unwrapped(_First);\r\n    auto _ULast  = _STD _Get_unwrapped(_Last);\r\n\r\n#if _VECTORIZED_IS_SORTED_UNTIL\r\n    if constexpr (_Is_min_max_iterators_safe<decltype(_UFirst)>) {\r\n        constexpr bool _Is_greater = _Is_predicate_greater<decltype(_UFirst), _Pr>;\r\n        if constexpr (_Is_greater || _Is_predicate_less<decltype(_UFirst), _Pr>) {\r\n            if (!_STD _Is_constant_evaluated()) {\r\n                const auto _First_ptr = _STD _To_address(_UFirst);\r\n                const auto _Result =\r\n                    _STD _Is_sorted_until_vectorized(_First_ptr, _STD _To_address(_ULast), _Is_greater);\r\n\r\n                if constexpr (is_pointer_v<decltype(_UFirst)>) {\r\n                    _UFirst = _Result;\r\n                } else {\r\n                    _UFirst += static_cast<_Iter_diff_t<decltype(_UFirst)>>(_Result - _First_ptr);\r\n                }\r\n\r\n                _STD _Seek_wrapped(_Last, _UFirst);\r\n                return _Last;\r\n            }\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_IS_SORTED_UNTIL ^^^\r\n\r\n    if (_UFirst != _ULast) {\r\n        for (auto _UNext = _UFirst; ++_UNext != _ULast; ++_UFirst) {\r\n            if (_DEBUG_LT_PRED(_Pred, *_UNext, *_UFirst)) {\r\n                _ULast = _UNext;\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Last, _ULast);\r\n    return _Last;\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Pr>\r\n_NODISCARD _CONSTEXPR20 bool is_sorted(_FwdIt _First, _FwdIt _Last, _Pr _Pred) {\r\n    // test if range is ordered by predicate\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    return _STD is_sorted_until(_UFirst, _ULast, _STD _Pass_fn(_Pred)) == _ULast;\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt>\r\n_NODISCARD _CONSTEXPR20 _FwdIt is_sorted_until(_FwdIt _First, _FwdIt _Last) {\r\n    // find extent of range that is ordered by operator<\r\n    return _STD is_sorted_until(_First, _Last, less<>{});\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt>\r\n_NODISCARD _CONSTEXPR20 bool is_sorted(_FwdIt _First, _FwdIt _Last) { // test if range is ordered by operator<\r\n    return _STD is_sorted(_First, _Last, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt is_sorted_until(_ExPo&&, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD bool is_sorted(_ExPo&& _Exec, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // test if range is ordered by predicate\r\n    return _STD is_sorted_until(_STD forward<_ExPo>(_Exec), _First, _Last, _STD _Pass_fn(_Pred)) == _Last;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt is_sorted_until(_ExPo&& _Exec, _FwdIt _First, _FwdIt _Last) noexcept /* terminates */ {\r\n    // find extent of range that is ordered by operator<\r\n    return _STD is_sorted_until(_STD forward<_ExPo>(_Exec), _First, _Last, less{});\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD bool is_sorted(_ExPo&& _Exec, _FwdIt _First, _FwdIt _Last) noexcept /* terminates */ {\r\n    // test if range is ordered by operator<\r\n    return _STD is_sorted(_STD forward<_ExPo>(_Exec), _First, _Last, less{});\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    struct _Is_sorted_fn {\r\n        template <forward_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<_It, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr bool operator()(_It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            const auto _ULast  = _RANGES _Unwrap_sent<_It>(_STD move(_Last));\r\n            const auto _UFirst = _RANGES _Is_sorted_until_unchecked(\r\n                _RANGES _Unwrap_iter<_Se>(_STD move(_First)), _ULast, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _UFirst == _ULast;\r\n        }\r\n\r\n        template <forward_range _Rng, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr bool operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            const auto _ULast = _Uend(_Range);\r\n            const auto _UFirst =\r\n                _RANGES _Is_sorted_until_unchecked(_Ubegin(_Range), _ULast, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _UFirst == _ULast;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Is_sorted_fn is_sorted;\r\n\r\n    struct _Is_sorted_until_fn {\r\n        template <forward_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<_It, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr _It operator()(_It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst = _RANGES _Is_sorted_until_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            _STD _Seek_wrapped(_First, _STD move(_UFirst));\r\n            return _First;\r\n        }\r\n\r\n        template <forward_range _Rng, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr borrowed_iterator_t<_Rng> operator()(\r\n            _Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            auto _UResult = _RANGES _Is_sorted_until_unchecked(\r\n                _Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _RANGES _Rewrap_iterator(_Range, _STD move(_UResult));\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Is_sorted_until_fn is_sorted_until;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty, class _Pr>\r\n_NODISCARD constexpr const _Ty& clamp(const _Ty& _Val _MSVC_LIFETIMEBOUND, const _Ty& _Min_val _MSVC_LIFETIMEBOUND,\r\n    const _Ty& _Max_val _MSVC_LIFETIMEBOUND, _Pr _Pred) {\r\n    // returns _Val constrained to [_Min_val, _Max_val]\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    if (_DEBUG_LT_PRED(_Pred, _Max_val, _Min_val)) {\r\n        _STL_REPORT_ERROR(\"invalid bounds arguments passed to std::clamp\");\r\n        return _Val;\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n    if constexpr (conjunction_v<is_scalar<_Ty>, disjunction<is_same<_Pr, less<>>, is_same<_Pr, less<_Ty>>>>) {\r\n        // Avoid early return to promote branchless code generation; see GH-2334\r\n        const _Ty& _Tmp = _DEBUG_LT_PRED(_Pred, _Val, _Min_val) ? _Min_val : _Val;\r\n        return _DEBUG_LT_PRED(_Pred, _Max_val, _Val) ? _Max_val : _Tmp;\r\n    } else {\r\n        if (_DEBUG_LT_PRED(_Pred, _Max_val, _Val)) {\r\n            return _Max_val;\r\n        }\r\n\r\n        if (_DEBUG_LT_PRED(_Pred, _Val, _Min_val)) {\r\n            return _Min_val;\r\n        }\r\n\r\n        return _Val;\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD constexpr const _Ty& clamp(const _Ty& _Val _MSVC_LIFETIMEBOUND, const _Ty& _Min_val _MSVC_LIFETIMEBOUND,\r\n    const _Ty& _Max_val _MSVC_LIFETIMEBOUND) {\r\n    // returns _Val constrained to [_Min_val, _Max_val]\r\n    return _STD clamp(_Val, _Min_val, _Max_val, less{});\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    struct _Clamp_fn {\r\n        template <class _Ty, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<const _Ty*, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr const _Ty& operator()(const _Ty& _Val _MSVC_LIFETIMEBOUND,\r\n            const _Ty& _Lo _MSVC_LIFETIMEBOUND, const _Ty& _Hi _MSVC_LIFETIMEBOUND, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STL_ASSERT(!_STD invoke(_Pred, _STD invoke(_Proj, _Hi), _STD invoke(_Proj, _Lo)),\r\n                \"The lower bound cannot be greater than the upper bound in a call to std::ranges::clamp \"\r\n                \"(N4950 [alg.clamp]/2).\");\r\n\r\n            auto&& _Temp = _STD invoke(_Proj, _Val);\r\n            if (_STD invoke(_Pred, _STD forward<decltype(_Temp)>(_Temp), _STD invoke(_Proj, _Lo))) {\r\n                return _Lo;\r\n            }\r\n            // The double forward is safe because regular_invocable requires that the invocation of the predicate not\r\n            // modify _Temp in a manner observable to equality-preserving expressions.\r\n            if (_STD invoke(_Pred, _STD invoke(_Proj, _Hi), _STD forward<decltype(_Temp)>(_Temp))) {\r\n                return _Hi;\r\n            }\r\n\r\n            return _Val;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Clamp_fn clamp;\r\n\r\n    class _Lexicographical_compare_fn {\r\n    public:\r\n        template <input_iterator _It1, sentinel_for<_It1> _Se1, input_iterator _It2, sentinel_for<_It2> _Se2,\r\n            class _Pj1 = identity, class _Pj2 = identity,\r\n            indirect_strict_weak_order<projected<_It1, _Pj1>, projected<_It2, _Pj2>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr bool operator()(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n\r\n            return _Lexicographical_compare_unchecked(_RANGES _Unwrap_iter<_Se1>(_STD move(_First1)),\r\n                _RANGES _Unwrap_sent<_It1>(_STD move(_Last1)), _RANGES _Unwrap_iter<_Se2>(_STD move(_First2)),\r\n                _RANGES _Unwrap_sent<_It2>(_STD move(_Last2)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1),\r\n                _STD _Pass_fn(_Proj2));\r\n        }\r\n\r\n        template <input_range _Rng1, input_range _Rng2, class _Pj1 = identity, class _Pj2 = identity,\r\n            indirect_strict_weak_order<projected<iterator_t<_Rng1>, _Pj1>, projected<iterator_t<_Rng2>, _Pj2>> _Pr =\r\n                ranges::less>\r\n        _NODISCARD static constexpr bool operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            return _Lexicographical_compare_unchecked(_Ubegin(_Range1), _Uend(_Range1), _Ubegin(_Range2),\r\n                _Uend(_Range2), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n        }\r\n\r\n    private:\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr bool _Lexicographical_compare_unchecked(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_strict_weak_order<_Pr, projected<_It1, _Pj1>, projected<_It2, _Pj2>>);\r\n\r\n            using _Memcmp_classification_pred = _Lex_compare_memcmp_classify<_It1, _It2, _Pr>;\r\n            constexpr bool _Is_sized1         = sized_sentinel_for<_Se1, _It1>;\r\n            constexpr bool _Is_sized2         = sized_sentinel_for<_Se2, _It2>;\r\n            if constexpr (!is_void_v<_Memcmp_classification_pred> && _Sized_or_unreachable_sentinel_for<_Se1, _It1>\r\n                          && _Sized_or_unreachable_sentinel_for<_Se2, _It2> && same_as<_Pj1, identity>\r\n                          && same_as<_Pj2, identity> && (_Is_sized1 || _Is_sized2)) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    size_t _Num1;\r\n                    if constexpr (_Is_sized1) {\r\n                        _Num1 = static_cast<size_t>(_STD _Contiguous_iter_distance(_First1, _Last1));\r\n                    } else {\r\n                        _Num1 = SIZE_MAX;\r\n                    }\r\n\r\n                    size_t _Num2;\r\n                    if constexpr (_Is_sized2) {\r\n                        _Num2 = static_cast<size_t>(_STD _Contiguous_iter_distance(_First2, _Last2));\r\n                    } else {\r\n                        _Num2 = SIZE_MAX;\r\n                    }\r\n\r\n                    const size_t _Num = (_STD min) (_Num1, _Num2);\r\n#if _VECTORIZED_MISMATCH\r\n                    const auto _First1_ptr = _STD to_address(_First1);\r\n                    const auto _First2_ptr = _STD to_address(_First2);\r\n                    const size_t _Pos      = _Mismatch_vectorized<sizeof(*_First1_ptr)>(_First1_ptr, _First2_ptr, _Num);\r\n                    if (_Pos == _Num2) {\r\n                        return false;\r\n                    } else if (_Pos == _Num1) {\r\n                        return true;\r\n                    } else {\r\n                        return _STD invoke(_Pred, _First1_ptr[_Pos], _First2_ptr[_Pos]);\r\n                    }\r\n#else // ^^^ _VECTORIZED_MISMATCH / !_VECTORIZED_MISMATCH vvv\r\n                    const int _Ans = _STD _Memcmp_count(_First1, _First2, _Num);\r\n                    return _Memcmp_classification_pred{}(_Ans, 0) || (_Ans == 0 && _Num1 < _Num2);\r\n#endif // ^^^ !_VECTORIZED_MISMATCH ^^^\r\n                }\r\n            }\r\n\r\n            for (;; ++_First1, (void) ++_First2) {\r\n                if (_First2 == _Last2) {\r\n                    return false;\r\n                } else if (_First1 == _Last1) {\r\n                    return true;\r\n                } else if (_STD invoke(_Pred, _STD invoke(_Proj1, *_First1), _STD invoke(_Proj2, *_First2))) {\r\n                    return true;\r\n                } else if (_STD invoke(_Pred, _STD invoke(_Proj2, *_First2), _STD invoke(_Proj1, *_First1))) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Lexicographical_compare_fn lexicographical_compare;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\n#undef _REQUIRE_BIDIRECTIONAL_ITERATOR\r\n\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"lifetimebound\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _ALGORITHM_\r\n"
  },
  {
    "path": "stl/inc/any",
    "content": "// any standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _ANY_\r\n#define _ANY_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX17\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <any> are available only with C++17 or later.\");\r\n#elif !_HAS_STATIC_RTTI // ^^^ !_HAS_CXX17 / _HAS_CXX17 vvv\r\n_EMIT_STL_WARNING(STL4040, \"The contents of <any> require static RTTI.\");\r\n#else // ^^^ !_HAS_STATIC_RTTI / _HAS_STATIC_RTTI vvv\r\n#include <initializer_list>\r\n#include <type_traits>\r\n#include <typeinfo>\r\n#include <utility>\r\n#include <xmemory>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\n_EXPORT_STD class _NODISCARD bad_any_cast : public bad_cast { // thrown by failed any_cast\r\npublic:\r\n    _NODISCARD const char* __CLR_OR_THIS_CALL what() const noexcept override {\r\n        return \"Bad any_cast\";\r\n    }\r\n};\r\n\r\n[[noreturn]] inline void _Throw_bad_any_cast() {\r\n    _THROW(bad_any_cast{});\r\n}\r\n\r\ninline constexpr size_t _Any_trivial_space_size = (_Small_object_num_ptrs - 1) * sizeof(void*);\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Any_is_trivial =\r\n    alignof(_Ty) <= alignof(max_align_t) && is_trivially_copyable_v<_Ty> && sizeof(_Ty) <= _Any_trivial_space_size;\r\n\r\ninline constexpr size_t _Any_small_space_size = (_Small_object_num_ptrs - 2) * sizeof(void*);\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Any_is_small = alignof(_Ty) <= alignof(max_align_t)\r\n                            && is_nothrow_move_constructible_v<_Ty> && sizeof(_Ty) <= _Any_small_space_size;\r\n\r\nenum class _Any_representation : uintptr_t { _Trivial, _Big, _Small };\r\n\r\nstruct _Any_big_RTTI { // Hand-rolled vtable for types that must be heap allocated in an any\r\n    using _Destroy_fn = void __CLRCALL_PURE_OR_CDECL(void*) _NOEXCEPT_FNPTR;\r\n    using _Copy_fn    = void* __CLRCALL_PURE_OR_CDECL(const void*);\r\n\r\n    template <class _Ty>\r\n    static void __CLRCALL_PURE_OR_CDECL _Destroy_impl(void* const _Target) noexcept {\r\n        ::delete static_cast<_Ty*>(_Target);\r\n    }\r\n\r\n    template <class _Ty>\r\n    _NODISCARD static void* __CLRCALL_PURE_OR_CDECL _Copy_impl(const void* const _Source) {\r\n        return ::new _Ty(*static_cast<const _Ty*>(_Source));\r\n    }\r\n\r\n    _Destroy_fn* _Destroy;\r\n    _Copy_fn* _Copy;\r\n};\r\n\r\nstruct _Any_small_RTTI { // Hand-rolled vtable for nontrivial types that can be stored internally in an any\r\n    using _Destroy_fn = void __CLRCALL_PURE_OR_CDECL(void*) _NOEXCEPT_FNPTR;\r\n    using _Copy_fn    = void __CLRCALL_PURE_OR_CDECL(void*, const void*);\r\n    using _Move_fn    = void __CLRCALL_PURE_OR_CDECL(void*, void*) _NOEXCEPT_FNPTR;\r\n\r\n    template <class _Ty>\r\n    static void __CLRCALL_PURE_OR_CDECL _Destroy_impl(void* const _Target) noexcept {\r\n        _STD _Destroy_in_place(*static_cast<_Ty*>(_Target));\r\n    }\r\n\r\n    template <class _Ty>\r\n    static void __CLRCALL_PURE_OR_CDECL _Copy_impl(void* const _Target, const void* const _Source) {\r\n        _STD _Construct_in_place(*static_cast<_Ty*>(_Target), *static_cast<const _Ty*>(_Source));\r\n    }\r\n\r\n    template <class _Ty>\r\n    static void __CLRCALL_PURE_OR_CDECL _Move_impl(void* const _Target, void* const _Source) noexcept {\r\n        _STD _Construct_in_place(*static_cast<_Ty*>(_Target), _STD move(*static_cast<_Ty*>(_Source)));\r\n    }\r\n\r\n    _Destroy_fn* _Destroy;\r\n    _Copy_fn* _Copy;\r\n    _Move_fn* _Move;\r\n};\r\n\r\ntemplate <class _Ty>\r\nconstexpr _Any_big_RTTI _Any_big_RTTI_obj = {&_Any_big_RTTI::_Destroy_impl<_Ty>, &_Any_big_RTTI::_Copy_impl<_Ty>};\r\n\r\ntemplate <class _Ty>\r\nconstexpr _Any_small_RTTI _Any_small_RTTI_obj = {\r\n    &_Any_small_RTTI::_Destroy_impl<_Ty>, &_Any_small_RTTI::_Copy_impl<_Ty>, &_Any_small_RTTI::_Move_impl<_Ty>};\r\n\r\n_EXPORT_STD class any { // storage for any (CopyConstructible) type\r\npublic:\r\n    // Construction and destruction [any.cons]\r\n    constexpr any() noexcept {}\r\n\r\n    any(const any& _That) {\r\n        _Storage._TypeData = _That._Storage._TypeData;\r\n        switch (_Rep()) {\r\n        case _Any_representation::_Small:\r\n            _Storage._SmallStorage._RTTI = _That._Storage._SmallStorage._RTTI;\r\n            _Storage._SmallStorage._RTTI->_Copy(&_Storage._SmallStorage._Data, &_That._Storage._SmallStorage._Data);\r\n            break;\r\n        case _Any_representation::_Big:\r\n            _Storage._BigStorage._RTTI = _That._Storage._BigStorage._RTTI;\r\n            _Storage._BigStorage._Ptr  = _Storage._BigStorage._RTTI->_Copy(_That._Storage._BigStorage._Ptr);\r\n            break;\r\n        case _Any_representation::_Trivial:\r\n        default:\r\n            _CSTD memcpy(_Storage._TrivialData, _That._Storage._TrivialData, sizeof(_Storage._TrivialData));\r\n            break;\r\n        }\r\n    }\r\n\r\n    any(any&& _That) noexcept {\r\n        _Move_from(_That);\r\n    }\r\n\r\n    template <class _ValueType,\r\n        enable_if_t<!is_same_v<decay_t<_ValueType>, any> && !_Is_specialization_v<decay_t<_ValueType>, in_place_type_t>,\r\n            int> = 0, // Separate these conditions into two `enable_if_t`s to avoid meta-recursion.\r\n                      // See LLVM-176877 and GH-6109. N5032 [temp.deduct.general]/7 guarantees:\r\n                      // \"The substitution proceeds in lexical order and stops when\r\n                      // a condition that causes deduction to fail is encountered.\"\r\n        enable_if_t<is_copy_constructible_v<decay_t<_ValueType>>, int> = 0>\r\n    any(_ValueType&& _Value) { // initialize with _Value\r\n        _Emplace<decay_t<_ValueType>>(_STD forward<_ValueType>(_Value));\r\n    }\r\n\r\n    template <class _ValueType, class... _Types,\r\n        enable_if_t<\r\n            conjunction_v<is_constructible<decay_t<_ValueType>, _Types...>, is_copy_constructible<decay_t<_ValueType>>>,\r\n            int> = 0>\r\n    explicit any(in_place_type_t<_ValueType>, _Types&&... _Args) {\r\n        // in-place initialize a value of type decay_t<_ValueType> with _Args...\r\n        _Emplace<decay_t<_ValueType>>(_STD forward<_Types>(_Args)...);\r\n    }\r\n\r\n    template <class _ValueType, class _Elem, class... _Types,\r\n        enable_if_t<conjunction_v<is_constructible<decay_t<_ValueType>, initializer_list<_Elem>&, _Types...>,\r\n                        is_copy_constructible<decay_t<_ValueType>>>,\r\n            int> = 0>\r\n    explicit any(in_place_type_t<_ValueType>, initializer_list<_Elem> _Ilist, _Types&&... _Args) {\r\n        // in-place initialize a value of type decay_t<_ValueType> with _Ilist and _Args...\r\n        _Emplace<decay_t<_ValueType>>(_Ilist, _STD forward<_Types>(_Args)...);\r\n    }\r\n\r\n    ~any() noexcept {\r\n        reset();\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n        // The two least significant bits (LSBs) of _Storage._TypeData encode whether we're in _Small, _Big,\r\n        // or _Trivial mode; see _Rep(). The rest of the bits encode the type_info pointer that's used\r\n        // to remember what type of object we're storing; see _TypeInfo(). So, we'll take the tombstone value,\r\n        // clear out the two LSBs with the _Rep_mask, then set the bits for _Small mode.\r\n        // _Small mode will prevent the most misuse, as the pseudo-vtable will be used for _Destroy, _Copy, and _Move.\r\n        // _Big mode wouldn't use the pseudo-vtable for _Move, and _Trivial mode doesn't have a pseudo-vtable at all.\r\n        const uintptr_t _Tombstone_value{_MSVC_STL_UINTPTR_TOMBSTONE_VALUE};\r\n        // Set the pseudo-vtable pointer:\r\n        _Storage._SmallStorage._RTTI = reinterpret_cast<const _Any_small_RTTI*>(_Tombstone_value);\r\n        // Set the combined type_info pointer and representation mode bits:\r\n        _Storage._TypeData = (_Tombstone_value & ~_Rep_mask) | static_cast<uintptr_t>(_Any_representation::_Small);\r\n#endif // _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n    }\r\n\r\n    // Assignment [any.assign]\r\n    any& operator=(const any& _That) {\r\n        any _Tmp = _That;\r\n        _Reset_and_move_from(_Tmp);\r\n        return *this;\r\n    }\r\n\r\n    any& operator=(any&& _That) noexcept {\r\n        any _Tmp = _STD move(_That);\r\n        _Reset_and_move_from(_Tmp);\r\n        return *this;\r\n    }\r\n\r\n    template <class _ValueType, enable_if_t<conjunction_v<negation<is_same<decay_t<_ValueType>, any>>,\r\n                                                is_copy_constructible<decay_t<_ValueType>>>,\r\n                                    int> = 0>\r\n    any& operator=(_ValueType&& _Value) {\r\n        // replace contained value with an object of type decay_t<_ValueType> initialized from _Value\r\n        any _Tmp = _STD forward<_ValueType>(_Value);\r\n        _Reset_and_move_from(_Tmp);\r\n        return *this;\r\n    }\r\n\r\n    // Modifiers [any.modifiers]\r\n    template <class _ValueType, class... _Types,\r\n        enable_if_t<\r\n            conjunction_v<is_constructible<decay_t<_ValueType>, _Types...>, is_copy_constructible<decay_t<_ValueType>>>,\r\n            int> = 0>\r\n    decay_t<_ValueType>& emplace(_Types&&... _Args) {\r\n        // replace contained value with an object of type decay_t<_ValueType> initialized from _Args...\r\n        reset();\r\n        return _Emplace<decay_t<_ValueType>>(_STD forward<_Types>(_Args)...);\r\n    }\r\n    template <class _ValueType, class _Elem, class... _Types,\r\n        enable_if_t<conjunction_v<is_constructible<decay_t<_ValueType>, initializer_list<_Elem>&, _Types...>,\r\n                        is_copy_constructible<decay_t<_ValueType>>>,\r\n            int> = 0>\r\n    decay_t<_ValueType>& emplace(initializer_list<_Elem> _Ilist, _Types&&... _Args) {\r\n        // replace contained value with an object of type decay_t<_ValueType> initialized from _Ilist and _Args...\r\n        reset();\r\n        return _Emplace<decay_t<_ValueType>>(_Ilist, _STD forward<_Types>(_Args)...);\r\n    }\r\n\r\n    void reset() noexcept { // transition to the empty state\r\n        switch (_Rep()) {\r\n        case _Any_representation::_Small:\r\n            _Storage._SmallStorage._RTTI->_Destroy(&_Storage._SmallStorage._Data);\r\n            break;\r\n        case _Any_representation::_Big:\r\n            _Storage._BigStorage._RTTI->_Destroy(_Storage._BigStorage._Ptr);\r\n            break;\r\n        case _Any_representation::_Trivial:\r\n        default:\r\n            break;\r\n        }\r\n        _Storage._TypeData = 0;\r\n    }\r\n\r\n    void swap(any& _That) noexcept {\r\n        any _Tmp = _STD move(*this);\r\n        _Reset_and_move_from(_That);\r\n        _That._Reset_and_move_from(_Tmp);\r\n    }\r\n\r\n    // Observers [any.observers]\r\n    _NODISCARD bool has_value() const noexcept {\r\n        return _Storage._TypeData != 0;\r\n    }\r\n\r\n    _NODISCARD const type_info& type() const noexcept {\r\n        // if *this contains a value of type T, return typeid(T); otherwise typeid(void)\r\n        const type_info* const _Info = _TypeInfo();\r\n        if (_Info) {\r\n            return *_Info;\r\n        }\r\n\r\n        return typeid(void);\r\n    }\r\n\r\n    template <class _Decayed>\r\n    _NODISCARD const _Decayed* _Cast() const noexcept {\r\n        // if *this contains a value of type _Decayed, return a pointer to it\r\n        const type_info* const _Info = _TypeInfo();\r\n        if (!_Info || *_Info != typeid(_Decayed)) {\r\n            return nullptr;\r\n        }\r\n\r\n        if constexpr (_Any_is_trivial<_Decayed>) {\r\n            // get a pointer to the contained _Trivial value of type _Decayed\r\n            return reinterpret_cast<const _Decayed*>(&_Storage._TrivialData);\r\n        } else if constexpr (_Any_is_small<_Decayed>) {\r\n            // get a pointer to the contained _Small value of type _Decayed\r\n            return reinterpret_cast<const _Decayed*>(&_Storage._SmallStorage._Data);\r\n        } else {\r\n            // get a pointer to the contained _Big value of type _Decayed\r\n            return static_cast<const _Decayed*>(_Storage._BigStorage._Ptr);\r\n        }\r\n    }\r\n\r\n    template <class _Decayed>\r\n    _NODISCARD _Decayed* _Cast() noexcept { // if *this contains a value of type _Decayed, return a pointer to it\r\n        return const_cast<_Decayed*>(static_cast<const any*>(this)->_Cast<_Decayed>());\r\n    }\r\n\r\nprivate:\r\n    static constexpr uintptr_t _Rep_mask = 3;\r\n\r\n    _NODISCARD _Any_representation _Rep() const noexcept { // extract the representation format from _TypeData\r\n        return static_cast<_Any_representation>(_Storage._TypeData & _Rep_mask);\r\n    }\r\n    _NODISCARD const type_info* _TypeInfo() const noexcept { // extract the type_info from _TypeData\r\n        return reinterpret_cast<const type_info*>(_Storage._TypeData & ~_Rep_mask);\r\n    }\r\n\r\n    void _Move_from(any& _That) noexcept {\r\n        _STL_INTERNAL_CHECK(_Storage._TypeData == 0); // !has_value()\r\n        _Storage._TypeData = _That._Storage._TypeData;\r\n        switch (_Rep()) {\r\n        case _Any_representation::_Small:\r\n            _Storage._SmallStorage._RTTI = _That._Storage._SmallStorage._RTTI;\r\n            _Storage._SmallStorage._RTTI->_Move(&_Storage._SmallStorage._Data, &_That._Storage._SmallStorage._Data);\r\n            break;\r\n        case _Any_representation::_Big:\r\n            _Storage._BigStorage._RTTI = _That._Storage._BigStorage._RTTI;\r\n            _Storage._BigStorage._Ptr  = _That._Storage._BigStorage._Ptr;\r\n            _That._Storage._TypeData   = 0;\r\n            break;\r\n        case _Any_representation::_Trivial:\r\n        default:\r\n            _CSTD memcpy(_Storage._TrivialData, _That._Storage._TrivialData, sizeof(_Storage._TrivialData));\r\n            break;\r\n        }\r\n    }\r\n\r\n    void _Reset_and_move_from(any& _That) noexcept {\r\n        reset();\r\n        _Move_from(_That);\r\n    }\r\n\r\n    template <class _Decayed, class... _Types>\r\n    _Decayed& _Emplace(_Types&&... _Args) { // emplace construct _Decayed\r\n        _STL_INTERNAL_CHECK(_Storage._TypeData == 0); // !has_value()\r\n        if constexpr (_Any_is_trivial<_Decayed>) {\r\n            // using the _Trivial representation\r\n            auto& _Obj = reinterpret_cast<_Decayed&>(_Storage._TrivialData);\r\n            _STD _Construct_in_place(_Obj, _STD forward<_Types>(_Args)...);\r\n            _Storage._TypeData =\r\n                reinterpret_cast<uintptr_t>(&typeid(_Decayed)) | static_cast<uintptr_t>(_Any_representation::_Trivial);\r\n            return _Obj;\r\n        } else if constexpr (_Any_is_small<_Decayed>) {\r\n            // using the _Small representation\r\n            auto& _Obj = reinterpret_cast<_Decayed&>(_Storage._SmallStorage._Data);\r\n            _STD _Construct_in_place(_Obj, _STD forward<_Types>(_Args)...);\r\n            _Storage._SmallStorage._RTTI = &_Any_small_RTTI_obj<_Decayed>;\r\n            _Storage._TypeData =\r\n                reinterpret_cast<uintptr_t>(&typeid(_Decayed)) | static_cast<uintptr_t>(_Any_representation::_Small);\r\n            return _Obj;\r\n        } else {\r\n            // using the _Big representation\r\n            _Decayed* const _Ptr       = ::new _Decayed(_STD forward<_Types>(_Args)...);\r\n            _Storage._BigStorage._Ptr  = _Ptr;\r\n            _Storage._BigStorage._RTTI = &_Any_big_RTTI_obj<_Decayed>;\r\n            _Storage._TypeData =\r\n                reinterpret_cast<uintptr_t>(&typeid(_Decayed)) | static_cast<uintptr_t>(_Any_representation::_Big);\r\n            return *_Ptr;\r\n        }\r\n    }\r\n\r\n    struct _Small_storage_t {\r\n        unsigned char _Data[_Any_small_space_size];\r\n        const _Any_small_RTTI* _RTTI;\r\n    };\r\n    static_assert(sizeof(_Small_storage_t) == _Any_trivial_space_size);\r\n\r\n    struct _Big_storage_t {\r\n        // Pad so that _Ptr and _RTTI might share _TypeData's cache line\r\n        unsigned char _Padding[_Any_small_space_size - sizeof(void*)];\r\n        void* _Ptr;\r\n        const _Any_big_RTTI* _RTTI;\r\n    };\r\n    static_assert(sizeof(_Big_storage_t) == _Any_trivial_space_size);\r\n\r\n    struct _Storage_t {\r\n        union {\r\n            unsigned char _TrivialData[_Any_trivial_space_size];\r\n            _Small_storage_t _SmallStorage;\r\n            _Big_storage_t _BigStorage;\r\n        };\r\n        uintptr_t _TypeData;\r\n    };\r\n    static_assert(sizeof(_Storage_t) == _Any_trivial_space_size + sizeof(void*));\r\n    static_assert(is_standard_layout_v<_Storage_t>);\r\n\r\n    union {\r\n        _Storage_t _Storage{};\r\n        max_align_t _Dummy;\r\n    };\r\n};\r\n\r\n// Non-member functions [any.nonmembers]\r\n_EXPORT_STD inline void swap(any& _Left, any& _Right) noexcept {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _ValueType, class... _Types,\r\n    enable_if_t<is_constructible_v<any, in_place_type_t<_ValueType>, _Types...>, int> = 0>\r\n_NODISCARD any make_any(_Types&&... _Args) { // construct an any containing a _ValueType initialized with _Args...\r\n    return any{in_place_type<_ValueType>, _STD forward<_Types>(_Args)...};\r\n}\r\n_EXPORT_STD template <class _ValueType, class _Elem, class... _Types,\r\n    enable_if_t<is_constructible_v<any, in_place_type_t<_ValueType>, initializer_list<_Elem>&, _Types...>, int> = 0>\r\n_NODISCARD any make_any(initializer_list<_Elem> _Ilist, _Types&&... _Args) {\r\n    // construct an any containing a _ValueType initialized with _Ilist and _Args...\r\n    return any{in_place_type<_ValueType>, _Ilist, _STD forward<_Types>(_Args)...};\r\n}\r\n\r\n_EXPORT_STD template <class _ValueType>\r\n_NODISCARD const _ValueType* any_cast(const any* const _Any) noexcept {\r\n    // retrieve a pointer to the _ValueType contained in _Any, or null\r\n    static_assert(!is_void_v<_ValueType>, \"std::any cannot contain void.\");\r\n\r\n    if constexpr (is_function_v<_ValueType> || is_array_v<_ValueType>) {\r\n        return nullptr;\r\n    } else {\r\n        if (!_Any) {\r\n            return nullptr;\r\n        }\r\n\r\n        return _Any->_Cast<_Remove_cvref_t<_ValueType>>();\r\n    }\r\n}\r\n_EXPORT_STD template <class _ValueType>\r\n_NODISCARD _ValueType* any_cast(any* const _Any) noexcept {\r\n    // retrieve a pointer to the _ValueType contained in _Any, or null\r\n    static_assert(!is_void_v<_ValueType>, \"std::any cannot contain void.\");\r\n\r\n    if constexpr (is_function_v<_ValueType> || is_array_v<_ValueType>) {\r\n        return nullptr;\r\n    } else {\r\n        if (!_Any) {\r\n            return nullptr;\r\n        }\r\n\r\n        return _Any->_Cast<_Remove_cvref_t<_ValueType>>();\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD remove_cv_t<_Ty> any_cast(const any& _Any) {\r\n    static_assert(is_constructible_v<remove_cv_t<_Ty>, const _Remove_cvref_t<_Ty>&>,\r\n        \"any_cast<T>(const any&) requires remove_cv_t<T> to be constructible from \"\r\n        \"const remove_cv_t<remove_reference_t<T>>&\");\r\n\r\n    const auto _Ptr = _STD any_cast<_Remove_cvref_t<_Ty>>(&_Any);\r\n    if (!_Ptr) {\r\n        _Throw_bad_any_cast();\r\n    }\r\n\r\n    return static_cast<remove_cv_t<_Ty>>(*_Ptr);\r\n}\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD remove_cv_t<_Ty> any_cast(any& _Any) {\r\n    static_assert(is_constructible_v<remove_cv_t<_Ty>, _Remove_cvref_t<_Ty>&>,\r\n        \"any_cast<T>(any&) requires remove_cv_t<T> to be constructible from remove_cv_t<remove_reference_t<T>>&\");\r\n\r\n    const auto _Ptr = _STD any_cast<_Remove_cvref_t<_Ty>>(&_Any);\r\n    if (!_Ptr) {\r\n        _Throw_bad_any_cast();\r\n    }\r\n\r\n    return static_cast<remove_cv_t<_Ty>>(*_Ptr);\r\n}\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD remove_cv_t<_Ty> any_cast(any&& _Any) {\r\n    static_assert(is_constructible_v<remove_cv_t<_Ty>, _Remove_cvref_t<_Ty>>,\r\n        \"any_cast<T>(any&&) requires remove_cv_t<T> to be constructible from remove_cv_t<remove_reference_t<T>>\");\r\n\r\n    const auto _Ptr = _STD any_cast<_Remove_cvref_t<_Ty>>(&_Any);\r\n    if (!_Ptr) {\r\n        _Throw_bad_any_cast();\r\n    }\r\n\r\n    return static_cast<remove_cv_t<_Ty>>(_STD move(*_Ptr));\r\n}\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_STATIC_RTTI ^^^\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _ANY_\r\n"
  },
  {
    "path": "stl/inc/array",
    "content": "// array standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _ARRAY_\r\n#define _ARRAY_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <xutility>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\nstruct _Iterator_base12_compatible { // TRANSITION, ABI\r\n    _Container_proxy* _Myproxy{};\r\n    _Iterator_base12* _Mynextiter{};\r\n};\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\ntemplate <class _Ty, size_t _Size>\r\nclass _Array_const_iterator\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    : private _Iterator_base12_compatible\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n{\r\npublic:\r\n#if _HAS_CXX20\r\n    using iterator_concept = contiguous_iterator_tag;\r\n#endif // _HAS_CXX20\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = _Ty;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = const _Ty*;\r\n    using reference         = const _Ty&;\r\n\r\n    enum { _EEN_SIZE = _Size }; // helper for expression evaluator\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\n    _CONSTEXPR17 _Array_const_iterator() noexcept : _Ptr() {}\r\n\r\n    _CONSTEXPR17 explicit _Array_const_iterator(pointer _Parg, size_t _Off = 0) noexcept : _Ptr(_Parg + _Off) {}\r\n\r\n    _NODISCARD _CONSTEXPR17 reference operator*() const noexcept {\r\n        return *_Ptr;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 pointer operator->() const noexcept {\r\n        return _Ptr;\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_const_iterator& operator++() noexcept {\r\n        ++_Ptr;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_const_iterator operator++(int) noexcept {\r\n        _Array_const_iterator _Tmp = *this;\r\n        ++_Ptr;\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_const_iterator& operator--() noexcept {\r\n        --_Ptr;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_const_iterator operator--(int) noexcept {\r\n        _Array_const_iterator _Tmp = *this;\r\n        --_Ptr;\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_const_iterator& operator+=(const ptrdiff_t _Off) noexcept {\r\n        _Ptr += _Off;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_const_iterator& operator-=(const ptrdiff_t _Off) noexcept {\r\n        _Ptr -= _Off;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 ptrdiff_t operator-(const _Array_const_iterator& _Right) const noexcept {\r\n        return _Ptr - _Right._Ptr;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 reference operator[](const ptrdiff_t _Off) const noexcept {\r\n        return _Ptr[_Off];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 bool operator==(const _Array_const_iterator& _Right) const noexcept {\r\n        return _Ptr == _Right._Ptr;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD constexpr strong_ordering operator<=>(const _Array_const_iterator& _Right) const noexcept {\r\n        return _Ptr <=> _Right._Ptr;\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD _CONSTEXPR17 bool operator<(const _Array_const_iterator& _Right) const noexcept {\r\n        return _Ptr < _Right._Ptr;\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    using _Prevent_inheriting_unwrap = _Array_const_iterator;\r\n\r\n    _NODISCARD constexpr pointer _Unwrapped() const noexcept {\r\n        return _Ptr;\r\n    }\r\n\r\n    static constexpr bool _Unwrap_when_unverified = true;\r\n\r\n    constexpr void _Seek_to(pointer _It) noexcept {\r\n        _Ptr = _It;\r\n    }\r\n\r\nprivate:\r\n    pointer _Ptr; // beginning of array\r\n\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 0 / _ITERATOR_DEBUG_LEVEL != 0 vvv\r\n    _CONSTEXPR17 _Array_const_iterator() noexcept : _Ptr(), _Idx(0) {}\r\n\r\n    _CONSTEXPR17 explicit _Array_const_iterator(pointer _Parg, size_t _Off = 0) noexcept : _Ptr(_Parg), _Idx(_Off) {}\r\n\r\n    _NODISCARD _CONSTEXPR17 reference operator*() const noexcept {\r\n        return *operator->();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 pointer operator->() const noexcept {\r\n        _STL_VERIFY(_Ptr, \"cannot dereference value-initialized array iterator\");\r\n        _STL_VERIFY(_Idx < _Size, \"cannot dereference out of range array iterator\");\r\n        return _Ptr + _Idx;\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_const_iterator& operator++() noexcept {\r\n        _STL_VERIFY(_Ptr, \"cannot increment value-initialized array iterator\");\r\n        _STL_VERIFY(_Idx < _Size, \"cannot increment array iterator past end\");\r\n        ++_Idx;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_const_iterator operator++(int) noexcept {\r\n        _Array_const_iterator _Tmp = *this;\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_const_iterator& operator--() noexcept {\r\n        _STL_VERIFY(_Ptr, \"cannot decrement value-initialized array iterator\");\r\n        _STL_VERIFY(_Idx != 0, \"cannot decrement array iterator before begin\");\r\n        --_Idx;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_const_iterator operator--(int) noexcept {\r\n        _Array_const_iterator _Tmp = *this;\r\n        --*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    constexpr void _Verify_offset(const ptrdiff_t _Off) const noexcept {\r\n        if (_Off != 0) {\r\n            _STL_VERIFY(_Ptr, \"cannot seek value-initialized array iterator\");\r\n        }\r\n\r\n        if (_Off < 0) {\r\n            _STL_VERIFY(_Idx >= size_t{0} - static_cast<size_t>(_Off), \"cannot seek array iterator before begin\");\r\n        }\r\n\r\n        if (_Off > 0) {\r\n            _STL_VERIFY(_Size - _Idx >= static_cast<size_t>(_Off), \"cannot seek array iterator after end\");\r\n        }\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_const_iterator& operator+=(const ptrdiff_t _Off) noexcept {\r\n        _Verify_offset(_Off);\r\n        _Idx += static_cast<size_t>(_Off);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_const_iterator& operator-=(const ptrdiff_t _Off) noexcept {\r\n        return *this += -_Off;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 ptrdiff_t operator-(const _Array_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return static_cast<ptrdiff_t>(_Idx - _Right._Idx);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 reference operator[](const ptrdiff_t _Off) const noexcept {\r\n        return *(*this + _Off);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 bool operator==(const _Array_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return _Idx == _Right._Idx;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD constexpr strong_ordering operator<=>(const _Array_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return _Idx <=> _Right._Idx;\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD _CONSTEXPR17 bool operator<(const _Array_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return _Idx < _Right._Idx;\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    _CONSTEXPR17 void _Compat(const _Array_const_iterator& _Right) const noexcept { // test for compatible iterator pair\r\n        _STL_VERIFY(_Ptr == _Right._Ptr, \"array iterators incompatible\");\r\n    }\r\n\r\n    using _Prevent_inheriting_unwrap = _Array_const_iterator;\r\n\r\n    _NODISCARD constexpr pointer _Unwrapped() const noexcept {\r\n        return _Ptr + _Idx;\r\n    }\r\n\r\n    constexpr void _Verify_with(const _Array_const_iterator& _Last) const noexcept {\r\n        // note _Compat check inside operator<=\r\n        _STL_VERIFY(*this <= _Last, \"array iterator range transposed\");\r\n    }\r\n\r\n    friend constexpr void _Verify_range(\r\n        const _Array_const_iterator& _First, const _Array_const_iterator& _Last) noexcept {\r\n        _First._Verify_with(_Last);\r\n    }\r\n\r\n    constexpr void _Seek_to(pointer _It) noexcept {\r\n        _Idx = static_cast<size_t>(_It - _Ptr);\r\n    }\r\n\r\nprivate:\r\n    pointer _Ptr; // beginning of array\r\n    size_t _Idx; // offset into array\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 0 ^^^\r\n\r\npublic:\r\n    _NODISCARD _CONSTEXPR17 _Array_const_iterator operator+(const ptrdiff_t _Off) const noexcept {\r\n        _Array_const_iterator _Tmp = *this;\r\n        _Tmp += _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 _Array_const_iterator operator-(const ptrdiff_t _Off) const noexcept {\r\n        _Array_const_iterator _Tmp = *this;\r\n        _Tmp -= _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD friend _CONSTEXPR17 _Array_const_iterator operator+(\r\n        const ptrdiff_t _Off, _Array_const_iterator _Next) noexcept {\r\n        _Next += _Off;\r\n        return _Next;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD _CONSTEXPR17 bool operator!=(const _Array_const_iterator& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 bool operator>(const _Array_const_iterator& _Right) const noexcept {\r\n        return _Right < *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 bool operator<=(const _Array_const_iterator& _Right) const noexcept {\r\n        return !(_Right < *this);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 bool operator>=(const _Array_const_iterator& _Right) const noexcept {\r\n        return !(*this < _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty, size_t _Size>\r\nstruct pointer_traits<_Array_const_iterator<_Ty, _Size>> {\r\n    using pointer         = _Array_const_iterator<_Ty, _Size>;\r\n    using element_type    = const _Ty;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    _NODISCARD static constexpr element_type* to_address(const pointer _Iter) noexcept {\r\n        return _Iter._Unwrapped();\r\n    }\r\n};\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Ty, size_t _Size>\r\nclass _Array_iterator : public _Array_const_iterator<_Ty, _Size> {\r\npublic:\r\n    using _Mybase = _Array_const_iterator<_Ty, _Size>;\r\n\r\n#if _HAS_CXX20\r\n    using iterator_concept = contiguous_iterator_tag;\r\n#endif // _HAS_CXX20\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = _Ty;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = _Ty*;\r\n    using reference         = _Ty&;\r\n\r\n    enum { _EEN_SIZE = _Size }; // helper for expression evaluator\r\n\r\n    _CONSTEXPR17 _Array_iterator() noexcept {}\r\n\r\n    _CONSTEXPR17 explicit _Array_iterator(pointer _Parg, size_t _Off = 0) noexcept : _Mybase(_Parg, _Off) {}\r\n\r\n    _NODISCARD _CONSTEXPR17 reference operator*() const noexcept {\r\n        return const_cast<reference>(_Mybase::operator*());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 pointer operator->() const noexcept {\r\n        return const_cast<pointer>(_Mybase::operator->());\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_iterator& operator++() noexcept {\r\n        _Mybase::operator++();\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_iterator operator++(int) noexcept {\r\n        _Array_iterator _Tmp = *this;\r\n        _Mybase::operator++();\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_iterator& operator--() noexcept {\r\n        _Mybase::operator--();\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_iterator operator--(int) noexcept {\r\n        _Array_iterator _Tmp = *this;\r\n        _Mybase::operator--();\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_iterator& operator+=(const ptrdiff_t _Off) noexcept {\r\n        _Mybase::operator+=(_Off);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 _Array_iterator operator+(const ptrdiff_t _Off) const noexcept {\r\n        _Array_iterator _Tmp = *this;\r\n        _Tmp += _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD friend _CONSTEXPR17 _Array_iterator operator+(const ptrdiff_t _Off, _Array_iterator _Next) noexcept {\r\n        _Next += _Off;\r\n        return _Next;\r\n    }\r\n\r\n    _CONSTEXPR17 _Array_iterator& operator-=(const ptrdiff_t _Off) noexcept {\r\n        _Mybase::operator-=(_Off);\r\n        return *this;\r\n    }\r\n\r\n    using _Mybase::operator-;\r\n\r\n    _NODISCARD _CONSTEXPR17 _Array_iterator operator-(const ptrdiff_t _Off) const noexcept {\r\n        _Array_iterator _Tmp = *this;\r\n        _Tmp -= _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 reference operator[](const ptrdiff_t _Off) const noexcept {\r\n        return const_cast<reference>(_Mybase::operator[](_Off));\r\n    }\r\n\r\n    using _Prevent_inheriting_unwrap = _Array_iterator;\r\n\r\n    _NODISCARD constexpr pointer _Unwrapped() const noexcept {\r\n        return const_cast<pointer>(_Mybase::_Unwrapped());\r\n    }\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty, size_t _Size>\r\nstruct pointer_traits<_Array_iterator<_Ty, _Size>> {\r\n    using pointer         = _Array_iterator<_Ty, _Size>;\r\n    using element_type    = _Ty;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    _NODISCARD static constexpr element_type* to_address(const pointer _Iter) noexcept {\r\n        return _Iter._Unwrapped();\r\n    }\r\n};\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Size>\r\nclass array { // fixed size array of values\r\npublic:\r\n    static_assert(is_object_v<_Ty>, \"The C++ Standard forbids containers of non-object types \"\r\n                                    \"because of [container.requirements].\");\r\n\r\n    using value_type      = _Ty;\r\n    using size_type       = size_t;\r\n    using difference_type = ptrdiff_t;\r\n    using pointer         = _Ty*;\r\n    using const_pointer   = const _Ty*;\r\n    using reference       = _Ty&;\r\n    using const_reference = const _Ty&;\r\n\r\n    using iterator       = _Array_iterator<_Ty, _Size>;\r\n    using const_iterator = _Array_const_iterator<_Ty, _Size>;\r\n\r\n    using reverse_iterator       = _STD reverse_iterator<iterator>;\r\n    using const_reverse_iterator = _STD reverse_iterator<const_iterator>;\r\n\r\n    using _Library_defined = array;\r\n\r\n    _CONSTEXPR20 void fill(const _Ty& _Value) {\r\n        _STD fill_n(_Elems, _Size, _Value);\r\n    }\r\n\r\n    _CONSTEXPR20 void swap(array& _Other) noexcept(_Is_nothrow_swappable<_Ty>::value) {\r\n        _STD _Swap_ranges_unchecked(_Elems, _Elems + _Size, _Other._Elems);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 iterator begin() noexcept {\r\n        return iterator(_Elems, 0);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const_iterator begin() const noexcept {\r\n        return const_iterator(_Elems, 0);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 iterator end() noexcept {\r\n        return iterator(_Elems, _Size);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const_iterator end() const noexcept {\r\n        return const_iterator(_Elems, _Size);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 reverse_iterator rbegin() noexcept {\r\n        return reverse_iterator(end());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const_reverse_iterator rbegin() const noexcept {\r\n        return const_reverse_iterator(end());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 reverse_iterator rend() noexcept {\r\n        return reverse_iterator(begin());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const_reverse_iterator rend() const noexcept {\r\n        return const_reverse_iterator(begin());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const_iterator cbegin() const noexcept {\r\n        return begin();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const_iterator cend() const noexcept {\r\n        return end();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const_reverse_iterator crbegin() const noexcept {\r\n        return rbegin();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const_reverse_iterator crend() const noexcept {\r\n        return rend();\r\n    }\r\n\r\n    _CONSTEXPR17 _Ty* _Unchecked_begin() noexcept {\r\n        return _Elems;\r\n    }\r\n\r\n    _CONSTEXPR17 const _Ty* _Unchecked_begin() const noexcept {\r\n        return _Elems;\r\n    }\r\n\r\n    _CONSTEXPR17 _Ty* _Unchecked_end() noexcept {\r\n        return _Elems + _Size;\r\n    }\r\n\r\n    _CONSTEXPR17 const _Ty* _Unchecked_end() const noexcept {\r\n        return _Elems + _Size;\r\n    }\r\n\r\n    _NODISCARD _Ret_range_(==, _Size) constexpr size_type size() const noexcept {\r\n        return _Size;\r\n    }\r\n\r\n    _NODISCARD constexpr size_type max_size() const noexcept {\r\n        return _Size;\r\n    }\r\n\r\n    _NODISCARD_EMPTY_ARRAY_MEMBER constexpr bool empty() const noexcept {\r\n        return false;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 reference at(size_type _Pos) {\r\n        if (_Size <= _Pos) {\r\n            _Xran();\r\n        }\r\n\r\n        return _Elems[_Pos];\r\n    }\r\n\r\n    _NODISCARD constexpr const_reference at(size_type _Pos) const {\r\n        if (_Size <= _Pos) {\r\n            _Xran();\r\n        }\r\n\r\n        return _Elems[_Pos];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 reference operator[](_In_range_(<, _Size) size_type _Pos) noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_ARRAY || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Pos < _Size, \"array subscript out of range\");\r\n#endif\r\n\r\n        return _Elems[_Pos];\r\n    }\r\n\r\n    _NODISCARD constexpr const_reference operator[](_In_range_(<, _Size) size_type _Pos) const noexcept\r\n    /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_ARRAY || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Pos < _Size, \"array subscript out of range\");\r\n#endif\r\n\r\n        return _Elems[_Pos];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 reference front() noexcept /* strengthened */ {\r\n        return _Elems[0];\r\n    }\r\n\r\n    _NODISCARD constexpr const_reference front() const noexcept /* strengthened */ {\r\n        return _Elems[0];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 reference back() noexcept /* strengthened */ {\r\n        return _Elems[_Size - 1];\r\n    }\r\n\r\n    _NODISCARD constexpr const_reference back() const noexcept /* strengthened */ {\r\n        return _Elems[_Size - 1];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 _Ty* data() noexcept {\r\n        return _Elems;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const _Ty* data() const noexcept {\r\n        return _Elems;\r\n    }\r\n\r\n    _Ty _Elems[_Size];\r\n\r\nprivate:\r\n    [[noreturn]] static void _Xran() {\r\n        _Xout_of_range(\"invalid array<T, N> subscript\");\r\n    }\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _First, class... _Rest>\r\nstruct _Enforce_same {\r\n    static_assert(\r\n        conjunction_v<is_same<_First, _Rest>...>, \"N4950 [array.cons]/2: Mandates: (is_same_v<T, U> && ...) is true.\");\r\n    using type = _First;\r\n};\r\n\r\ntemplate <class _First, class... _Rest>\r\narray(_First, _Rest...) -> array<typename _Enforce_same<_First, _Rest...>::type, 1 + sizeof...(_Rest)>;\r\n#endif // _HAS_CXX17\r\n\r\nstruct _Empty_array_element {};\r\n\r\ntemplate <class _Ty>\r\nclass array<_Ty, 0> {\r\npublic:\r\n    static_assert(is_object_v<_Ty>, \"The C++ Standard forbids containers of non-object types \"\r\n                                    \"because of [container.requirements].\");\r\n\r\n    using value_type      = _Ty;\r\n    using size_type       = size_t;\r\n    using difference_type = ptrdiff_t;\r\n    using pointer         = _Ty*;\r\n    using const_pointer   = const _Ty*;\r\n    using reference       = _Ty&;\r\n    using const_reference = const _Ty&;\r\n\r\n    using iterator               = _Array_iterator<_Ty, 0>;\r\n    using const_iterator         = _Array_const_iterator<_Ty, 0>;\r\n    using reverse_iterator       = _STD reverse_iterator<iterator>;\r\n    using const_reverse_iterator = _STD reverse_iterator<const_iterator>;\r\n\r\n    using _Library_defined = array;\r\n\r\n    _CONSTEXPR20 void fill(const _Ty&) {}\r\n\r\n    _CONSTEXPR20 void swap(array&) noexcept {}\r\n\r\n    _NODISCARD _CONSTEXPR17 iterator begin() noexcept {\r\n        return iterator{};\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const_iterator begin() const noexcept {\r\n        return const_iterator{};\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 iterator end() noexcept {\r\n        return iterator{};\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const_iterator end() const noexcept {\r\n        return const_iterator{};\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 reverse_iterator rbegin() noexcept {\r\n        return reverse_iterator(end());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const_reverse_iterator rbegin() const noexcept {\r\n        return const_reverse_iterator(end());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 reverse_iterator rend() noexcept {\r\n        return reverse_iterator(begin());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const_reverse_iterator rend() const noexcept {\r\n        return const_reverse_iterator(begin());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const_iterator cbegin() const noexcept {\r\n        return begin();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const_iterator cend() const noexcept {\r\n        return end();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const_reverse_iterator crbegin() const noexcept {\r\n        return rbegin();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const_reverse_iterator crend() const noexcept {\r\n        return rend();\r\n    }\r\n\r\n    _CONSTEXPR17 _Ty* _Unchecked_begin() noexcept {\r\n        return nullptr;\r\n    }\r\n\r\n    _CONSTEXPR17 const _Ty* _Unchecked_begin() const noexcept {\r\n        return nullptr;\r\n    }\r\n\r\n    _CONSTEXPR17 _Ty* _Unchecked_end() noexcept {\r\n        return nullptr;\r\n    }\r\n\r\n    _CONSTEXPR17 const _Ty* _Unchecked_end() const noexcept {\r\n        return nullptr;\r\n    }\r\n\r\n    _NODISCARD constexpr size_type size() const noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD constexpr size_type max_size() const noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD_EMPTY_ARRAY_MEMBER constexpr bool empty() const noexcept {\r\n        return true;\r\n    }\r\n\r\n    [[noreturn]] reference at(size_type) {\r\n        _Xran();\r\n    }\r\n\r\n    [[noreturn]] const_reference at(size_type) const {\r\n        _Xran();\r\n    }\r\n\r\n    _NODISCARD reference operator[](size_type) noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_ARRAY || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_REPORT_ERROR(\"array<T, 0> subscript is invalid\");\r\n#endif\r\n\r\n        return *data();\r\n    }\r\n\r\n    _NODISCARD const_reference operator[](size_type) const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_ARRAY || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_REPORT_ERROR(\"array<T, 0> subscript is invalid\");\r\n#endif\r\n\r\n        return *data();\r\n    }\r\n\r\n    _NODISCARD reference front() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_ARRAY || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_REPORT_ERROR(\"array<T, 0>::front() is invalid\");\r\n#endif\r\n\r\n        return *data();\r\n    }\r\n\r\n    _NODISCARD const_reference front() const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_ARRAY || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_REPORT_ERROR(\"array<T, 0>::front() is invalid\");\r\n#endif\r\n\r\n        return *data();\r\n    }\r\n\r\n    _NODISCARD reference back() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_ARRAY || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_REPORT_ERROR(\"array<T, 0>::back() is invalid\");\r\n#endif\r\n\r\n        return *data();\r\n    }\r\n\r\n    _NODISCARD const_reference back() const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_ARRAY || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_REPORT_ERROR(\"array<T, 0>::back() is invalid\");\r\n#endif\r\n\r\n        return *data();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 _Ty* data() noexcept {\r\n        return nullptr;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 const _Ty* data() const noexcept {\r\n        return nullptr;\r\n    }\r\n\r\n    conditional_t<disjunction_v<is_default_constructible<_Ty>, _Is_implicitly_default_constructible<_Ty>>, _Ty,\r\n        _Empty_array_element>\r\n        _Elems[1]{};\r\n\r\nprivate:\r\n    [[noreturn]] static void _Xran() {\r\n        _Xout_of_range(\"invalid array<T, 0> subscript\");\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Size, enable_if_t<_Size == 0 || _Is_swappable<_Ty>::value, int> = 0>\r\n_CONSTEXPR20 void swap(array<_Ty, _Size>& _Left, array<_Ty, _Size>& _Right) noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Size>\r\n_NODISCARD _CONSTEXPR20 bool operator==(const array<_Ty, _Size>& _Left, const array<_Ty, _Size>& _Right) {\r\n    return _STD equal(_Left.data(), _Left.data() + _Size, _Right.data());\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty, size_t _Size>\r\n_NODISCARD constexpr _Synth_three_way_result<_Ty> operator<=>(\r\n    const array<_Ty, _Size>& _Left, const array<_Ty, _Size>& _Right) {\r\n    return _STD lexicographical_compare_three_way(\r\n        _Left.data(), _Left.data() + _Size, _Right.data(), _Right.data() + _Size, _Synth_three_way{});\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ty, size_t _Size>\r\n_NODISCARD bool operator!=(const array<_Ty, _Size>& _Left, const array<_Ty, _Size>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _Ty, size_t _Size>\r\n_NODISCARD _CONSTEXPR20 bool operator<(const array<_Ty, _Size>& _Left, const array<_Ty, _Size>& _Right) {\r\n    return _STD lexicographical_compare(_Left.data(), _Left.data() + _Size, _Right.data(), _Right.data() + _Size);\r\n}\r\n\r\ntemplate <class _Ty, size_t _Size>\r\n_NODISCARD _CONSTEXPR20 bool operator>(const array<_Ty, _Size>& _Left, const array<_Ty, _Size>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _Ty, size_t _Size>\r\n_NODISCARD _CONSTEXPR20 bool operator<=(const array<_Ty, _Size>& _Left, const array<_Ty, _Size>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _Ty, size_t _Size>\r\n_NODISCARD _CONSTEXPR20 bool operator>=(const array<_Ty, _Size>& _Left, const array<_Ty, _Size>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty, size_t _Size, size_t... _Idx>\r\n_NODISCARD constexpr array<remove_cv_t<_Ty>, _Size> _To_array_lvalue_impl(\r\n    _Ty (&_Array)[_Size], index_sequence<_Idx...>) {\r\n    return {{_Array[_Idx]...}};\r\n}\r\n\r\ntemplate <class _Ty, size_t _Size, size_t... _Idx>\r\n_NODISCARD constexpr array<remove_cv_t<_Ty>, _Size> _To_array_rvalue_impl(\r\n    _Ty (&&_Array)[_Size], index_sequence<_Idx...>) {\r\n    return {{_STD move(_Array[_Idx])...}};\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Size>\r\n_NODISCARD constexpr array<remove_cv_t<_Ty>, _Size> to_array(_Ty (&_Array)[_Size]) {\r\n    static_assert(!is_array_v<_Ty>, \"N4950 [array.creation]/1: \"\r\n                                    \"to_array does not accept multidimensional arrays.\");\r\n    static_assert(is_constructible_v<_Ty, _Ty&>, \"N4950 [array.creation]/1: \"\r\n                                                 \"to_array requires copy constructible elements.\");\r\n    return _STD _To_array_lvalue_impl(_Array, make_index_sequence<_Size>{});\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Size>\r\n_NODISCARD constexpr array<remove_cv_t<_Ty>, _Size> to_array(_Ty (&&_Array)[_Size]) {\r\n    static_assert(!is_array_v<_Ty>, \"N4950 [array.creation]/4: \"\r\n                                    \"to_array does not accept multidimensional arrays.\");\r\n    static_assert(is_move_constructible_v<_Ty>, \"N4950 [array.creation]/4: \"\r\n                                                \"to_array requires move constructible elements.\");\r\n    return _STD _To_array_rvalue_impl(_STD move(_Array), make_index_sequence<_Size>{});\r\n}\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Ty, class _Enable = void>\r\nconstexpr bool _Is_library_defined = false;\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_library_defined<_Ty, enable_if_t<is_same_v<typename _Ty::_Library_defined, _Ty>>> = true;\r\n\r\n_EXPORT_STD template <size_t _Idx, class _Ty, size_t _Size>\r\n_NODISCARD constexpr _Ty& get(array<_Ty, _Size>& _Arr) noexcept {\r\n    static_assert(_Idx < _Size, \"array index out of bounds\");\r\n    if constexpr (_Is_library_defined<array<_Ty, _Size>>) {\r\n        return _Arr._Elems[_Idx];\r\n    } else {\r\n#if _HAS_CXX17\r\n        return _Arr[_Idx];\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n        return const_cast<_Ty&>(_STD as_const(_Arr)[_Idx]);\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <size_t _Idx, class _Ty, size_t _Size>\r\n_NODISCARD constexpr const _Ty& get(const array<_Ty, _Size>& _Arr) noexcept {\r\n    static_assert(_Idx < _Size, \"array index out of bounds\");\r\n    if constexpr (_Is_library_defined<array<_Ty, _Size>>) {\r\n        return _Arr._Elems[_Idx];\r\n    } else {\r\n        return _Arr[_Idx];\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <size_t _Idx, class _Ty, size_t _Size>\r\n_NODISCARD constexpr _Ty&& get(array<_Ty, _Size>&& _Arr) noexcept {\r\n    static_assert(_Idx < _Size, \"array index out of bounds\");\r\n    if constexpr (_Is_library_defined<array<_Ty, _Size>>) {\r\n        return _STD move(_Arr._Elems[_Idx]);\r\n    } else {\r\n#if _HAS_CXX17\r\n        return _STD move(_Arr[_Idx]);\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n        return const_cast<_Ty&&>(_STD move(_STD as_const(_Arr)[_Idx]));\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <size_t _Idx, class _Ty, size_t _Size>\r\n_NODISCARD constexpr const _Ty&& get(const array<_Ty, _Size>&& _Arr) noexcept {\r\n    static_assert(_Idx < _Size, \"array index out of bounds\");\r\n    if constexpr (_Is_library_defined<array<_Ty, _Size>>) {\r\n        return _STD move(_Arr._Elems[_Idx]);\r\n    } else {\r\n        return _STD move(_Arr[_Idx]);\r\n    }\r\n}\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _ARRAY_\r\n"
  },
  {
    "path": "stl/inc/atomic",
    "content": "// atomic standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _ATOMIC_\r\n#define _ATOMIC_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#ifdef _M_CEE_PURE\r\n#error <atomic> is not supported when compiling with /clr:pure.\r\n#endif // defined(_M_CEE_PURE)\r\n\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstring>\r\n#include <xatomic.h>\r\n#include <xthreads.h>\r\n\r\n#if _HAS_CXX20\r\n#include <xatomic_wait.h>\r\n#endif // _HAS_CXX20\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// Allow _InterlockedCompareExchange128 to be used:\r\n#if defined(__clang__) && defined(_M_X64) && !defined(_M_ARM64EC)\r\n#pragma clang attribute _STD_ATOMIC_HEADER.push([[gnu::target(\"cx16\")]], apply_to = function)\r\n#endif // ^^^ defined(__clang__) && defined(_M_X64) && !defined(_M_ARM64EC) ^^^\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64)\r\n#define _STD_ATOMIC_USE_ARM64_LDAR_STLR 1\r\n#ifdef __clang__\r\n#define __LOAD_ACQUIRE_ARM64(_Width, _Ptr) \\\r\n    static_cast<__int##_Width>(__atomic_load_n(reinterpret_cast<const volatile unsigned __int##_Width*>(_Ptr), 2))\r\n#define __STORE_RELEASE(_Width, _Ptr, _Desired) \\\r\n    _Compiler_barrier();                        \\\r\n    __atomic_store_n(                           \\\r\n        reinterpret_cast<volatile unsigned __int##_Width*>(_Ptr), static_cast<unsigned __int##_Width>(_Desired), 3)\r\n#else // ^^^ Clang / MSVC vvv\r\n#define __LOAD_ACQUIRE_ARM64(_Width, _Ptr) \\\r\n    static_cast<__int##_Width>(__load_acquire##_Width(reinterpret_cast<const volatile unsigned __int##_Width*>(_Ptr)))\r\n#define __STORE_RELEASE(_Width, _Ptr, _Desired) \\\r\n    _Compiler_barrier();                        \\\r\n    __stlr##_Width(                             \\\r\n        reinterpret_cast<volatile unsigned __int##_Width*>(_Ptr), static_cast<unsigned __int##_Width>(_Desired))\r\n#endif // ^^^ MSVC ^^^\r\n#else // ^^^ ARM64/ARM64EC/HYBRID_X86_ARM64 / Other architectures vvv\r\n#define _STD_ATOMIC_USE_ARM64_LDAR_STLR 0\r\n#define __STORE_RELEASE(_Width, _Ptr, _Desired) \\\r\n    _Compiler_or_memory_barrier();              \\\r\n    __iso_volatile_store##_Width((_Ptr), (_Desired))\r\n#endif // ^^^ Other architectures ^^^\r\n\r\n#define ATOMIC_BOOL_LOCK_FREE 2\r\n#define ATOMIC_CHAR_LOCK_FREE 2\r\n#ifdef __cpp_lib_char8_t\r\n#define ATOMIC_CHAR8_T_LOCK_FREE 2\r\n#endif // defined(__cpp_lib_char8_t)\r\n#define ATOMIC_CHAR16_T_LOCK_FREE 2\r\n#define ATOMIC_CHAR32_T_LOCK_FREE 2\r\n#define ATOMIC_WCHAR_T_LOCK_FREE  2\r\n#define ATOMIC_SHORT_LOCK_FREE    2\r\n#define ATOMIC_INT_LOCK_FREE      2\r\n#define ATOMIC_LONG_LOCK_FREE     2\r\n#define ATOMIC_LLONG_LOCK_FREE    2\r\n#define ATOMIC_POINTER_LOCK_FREE  2\r\n\r\n// The following code is SHARED with vcruntime and any updates\r\n// should be mirrored. Also: if any macros are added they should be\r\n// #undefed in vcruntime as well\r\n\r\nextern \"C\" {\r\nenum {\r\n    _Atomic_memory_order_relaxed,\r\n    _Atomic_memory_order_consume,\r\n    _Atomic_memory_order_acquire,\r\n    _Atomic_memory_order_release,\r\n    _Atomic_memory_order_acq_rel,\r\n    _Atomic_memory_order_seq_cst,\r\n};\r\n} // extern \"C\"\r\n\r\n#ifndef _INVALID_MEMORY_ORDER\r\n#ifdef _DEBUG\r\n#define _INVALID_MEMORY_ORDER _STL_REPORT_ERROR(\"Invalid memory order\")\r\n#else // ^^^ defined(_DEBUG) / !defined(_DEBUG) vvv\r\n#define _INVALID_MEMORY_ORDER\r\n#endif // ^^^ !defined(_DEBUG) ^^^\r\n#endif // _INVALID_MEMORY_ORDER\r\n\r\nextern \"C\" inline void _Check_memory_order(const unsigned int _Order) noexcept {\r\n    if (_Order > _Atomic_memory_order_seq_cst) {\r\n        _INVALID_MEMORY_ORDER;\r\n    }\r\n}\r\n\r\n// note: these macros are _not_ always safe to use with a trailing semicolon,\r\n// we avoid wrapping them in do {} while (0) because MSVC generates code for such loops\r\n// in debug mode.\r\n\r\n#if (defined(_M_IX86) && !defined(_M_HYBRID_X86_ARM64)) || (defined(_M_X64) && !defined(_M_ARM64EC))\r\n#define _ATOMIC_CHOOSE_INTRINSIC(_Order, _Result, _Intrinsic, ...) \\\r\n    _Check_memory_order(_Order);                                   \\\r\n    _Result = _Intrinsic(__VA_ARGS__)\r\n#elif defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64)\r\n#define _ATOMIC_CHOOSE_INTRINSIC(_Order, _Result, _Intrinsic, ...) \\\r\n    switch (_Order) {                                              \\\r\n    case _Atomic_memory_order_relaxed:                             \\\r\n        _Result = _INTRIN_RELAXED(_Intrinsic)(__VA_ARGS__);        \\\r\n        break;                                                     \\\r\n    case _Atomic_memory_order_consume:                             \\\r\n    case _Atomic_memory_order_acquire:                             \\\r\n        _Result = _INTRIN_ACQUIRE(_Intrinsic)(__VA_ARGS__);        \\\r\n        break;                                                     \\\r\n    case _Atomic_memory_order_release:                             \\\r\n        _Result = _INTRIN_RELEASE(_Intrinsic)(__VA_ARGS__);        \\\r\n        break;                                                     \\\r\n    default:                                                       \\\r\n        _INVALID_MEMORY_ORDER;                                     \\\r\n        _FALLTHROUGH;                                              \\\r\n    case _Atomic_memory_order_acq_rel:                             \\\r\n    case _Atomic_memory_order_seq_cst:                             \\\r\n        _Result = _Intrinsic(__VA_ARGS__);                         \\\r\n        break;                                                     \\\r\n    }\r\n#endif // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64) ^^^\r\n\r\n#if _STD_ATOMIC_USE_ARM64_LDAR_STLR == 1\r\n\r\n#define _ATOMIC_LOAD_ARM64(_Result, _Width, _Ptr, _Order_var) \\\r\n    _Check_load_memory_order(_Order_var);                     \\\r\n    if (_Order_var == memory_order_relaxed) {                 \\\r\n        _Result = __iso_volatile_load##_Width(_Ptr);          \\\r\n    } else {                                                  \\\r\n        _Result = __LOAD_ACQUIRE_ARM64(_Width, _Ptr);         \\\r\n        _Compiler_barrier();                                  \\\r\n    }\r\n\r\n#endif // _STD_ATOMIC_USE_ARM64_LDAR_STLR == 1\r\n\r\n#define _ATOMIC_POST_LOAD_BARRIER_AS_NEEDED(_Order_var) \\\r\n    _Check_load_memory_order(_Order_var);               \\\r\n    if (_Order_var != memory_order_relaxed) {           \\\r\n        _Compiler_or_memory_barrier();                  \\\r\n    }\r\n\r\n#define _ATOMIC_STORE_SEQ_CST_ARM64(_Width, _Ptr, _Desired) \\\r\n    __STORE_RELEASE(_Width, _Ptr, _Desired);                \\\r\n    _Memory_barrier();\r\n\r\n#define _ATOMIC_STORE_SEQ_CST_X86_X64(_Width, _Ptr, _Desired) (void) _InterlockedExchange##_Width((_Ptr), (_Desired));\r\n#define _ATOMIC_STORE_32_SEQ_CST_X86_X64(_Ptr, _Desired) \\\r\n    (void) _InterlockedExchange(reinterpret_cast<volatile long*>(_Ptr), static_cast<long>(_Desired));\r\n\r\n#define _ATOMIC_STORE_64_SEQ_CST_IX86(_Ptr, _Desired) \\\r\n    _Compiler_barrier();                              \\\r\n    __iso_volatile_store64((_Ptr), (_Desired));       \\\r\n    _Atomic_thread_fence(_Atomic_memory_order_seq_cst);\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64)\r\n#define _ATOMIC_STORE_SEQ_CST(_Width, _Ptr, _Desired) _ATOMIC_STORE_SEQ_CST_ARM64(_Width, (_Ptr), (_Desired))\r\n#define _ATOMIC_STORE_32_SEQ_CST(_Ptr, _Desired)      _ATOMIC_STORE_SEQ_CST_ARM64(32, (_Ptr), (_Desired))\r\n#define _ATOMIC_STORE_64_SEQ_CST(_Ptr, _Desired)      _ATOMIC_STORE_SEQ_CST_ARM64(64, (_Ptr), (_Desired))\r\n#elif defined(_M_IX86) || defined(_M_X64) // ^^^ ARM64/ARM64EC/HYBRID_X86_ARM64 / x86/x64 vvv\r\n#define _ATOMIC_STORE_SEQ_CST(_Width, _Ptr, _Desired) _ATOMIC_STORE_SEQ_CST_X86_X64(_Width, (_Ptr), (_Desired))\r\n#define _ATOMIC_STORE_32_SEQ_CST(_Ptr, _Desired)      _ATOMIC_STORE_32_SEQ_CST_X86_X64((_Ptr), (_Desired))\r\n#ifdef _M_IX86\r\n#define _ATOMIC_STORE_64_SEQ_CST(_Ptr, _Desired) _ATOMIC_STORE_64_SEQ_CST_IX86((_Ptr), (_Desired))\r\n#else // ^^^ x86 / x64 vvv\r\n#define _ATOMIC_STORE_64_SEQ_CST(_Ptr, _Desired) _ATOMIC_STORE_SEQ_CST_X86_X64(64, (_Ptr), (_Desired))\r\n#endif // ^^^ x64 ^^^\r\n#else // ^^^ x86/x64 / unknown architecture vvv\r\n#error Unknown architecture\r\n#endif // ^^^ unknown architecture ^^^\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 6001) // \"Using uninitialized memory '_Guard'\"\r\n#pragma warning(disable : 28113) // \"Accessing a local variable _Guard via an Interlocked function: This is an unusual\r\n                                 // usage which could be reconsidered.\"\r\nextern \"C\" inline void _Atomic_thread_fence(const unsigned int _Order) noexcept {\r\n    if (_Order == _Atomic_memory_order_relaxed) {\r\n        return;\r\n    }\r\n\r\n#if (defined(_M_IX86) && !defined(_M_HYBRID_X86_ARM64)) || (defined(_M_X64) && !defined(_M_ARM64EC))\r\n    _Compiler_barrier();\r\n    if (_Order == _Atomic_memory_order_seq_cst) {\r\n        volatile long _Guard; // Not initialized to avoid an unnecessary operation; the value does not matter\r\n\r\n        // _mm_mfence could have been used, but it is slower on some CPUs.\r\n        // The memory fence provided by interlocked operations has some exceptions, but this is fine:\r\n        // std::atomic_thread_fence works with respect to other atomics only; it may not be a full fence for all ops.\r\n        (void) _InterlockedIncrement(&_Guard);\r\n        _Compiler_barrier();\r\n    }\r\n#elif defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64)\r\n    if (_Order == _Atomic_memory_order_acquire || _Order == _Atomic_memory_order_consume) {\r\n        _Memory_load_acquire_barrier();\r\n    } else {\r\n        _Memory_barrier();\r\n    }\r\n#else // ^^^ ARM64/ARM64EC/HYBRID_X86_ARM64 / unknown architecture vvv\r\n#error Unknown architecture\r\n#endif // ^^^ unknown architecture ^^^\r\n}\r\n#pragma warning(pop)\r\n\r\n// End of code shared with vcruntime\r\n\r\nextern \"C\" {\r\n_Smtx_t* __stdcall __std_atomic_get_mutex(const void* _Key) noexcept;\r\n} // extern \"C\"\r\n// Padding bits should not participate in cmpxchg comparison starting in C++20.\r\n// Clang does not have __builtin_zero_non_value_bits to exclude these bits to implement this C++20 feature.\r\n// The EDG front-end substitutes everything and runs into incomplete types passed to atomic<T>.\r\n#if _HAS_CXX20 && !defined(__clang__) /* TRANSITION, LLVM-46685 */ && !defined(__EDG__)\r\n#define _CMPXCHG_MASK_OUT_PADDING_BITS 1\r\n#else\r\n#define _CMPXCHG_MASK_OUT_PADDING_BITS 0\r\n#endif\r\n\r\n_STD_BEGIN\r\n#if _CMPXCHG_MASK_OUT_PADDING_BITS\r\nstruct _Form_mask_t {};\r\ninline constexpr _Form_mask_t _Form_mask{};\r\n#endif // _CMPXCHG_MASK_OUT_PADDING_BITS\r\n\r\ntemplate <class _Ty>\r\nstruct _Storage_for {\r\n    // uninitialized space to store a _Ty\r\n    alignas(_Ty) unsigned char _Storage[sizeof(_Ty)];\r\n\r\n    _Storage_for()                               = default;\r\n    _Storage_for(const _Storage_for&)            = delete;\r\n    _Storage_for& operator=(const _Storage_for&) = delete;\r\n\r\n#if _CMPXCHG_MASK_OUT_PADDING_BITS\r\n    explicit _Storage_for(_Form_mask_t) noexcept {\r\n        _CSTD memset(_Storage, 0xff, sizeof(_Ty));\r\n        ::__builtin_zero_non_value_bits(_Ptr()); // TRANSITION, DevCom-10456452\r\n    }\r\n#endif // _CMPXCHG_MASK_OUT_PADDING_BITS\r\n\r\n    _NODISCARD _Ty& _Ref() noexcept {\r\n        return reinterpret_cast<_Ty&>(_Storage);\r\n    }\r\n\r\n    _NODISCARD _Ty* _Ptr() noexcept {\r\n        return reinterpret_cast<_Ty*>(&_Storage);\r\n    }\r\n};\r\n\r\n#if _CMPXCHG_MASK_OUT_PADDING_BITS\r\ntemplate <class _Ty>\r\nconstexpr bool _Might_have_non_value_bits = !has_unique_object_representations_v<_Ty> && !is_floating_point_v<_Ty>;\r\n#endif // _CMPXCHG_MASK_OUT_PADDING_BITS\r\n\r\n_EXPORT_STD extern \"C\" inline void atomic_thread_fence(const memory_order _Order) noexcept {\r\n    ::_Atomic_thread_fence(static_cast<unsigned int>(_Order));\r\n}\r\n\r\n_EXPORT_STD extern \"C\" inline void atomic_signal_fence(const memory_order _Order) noexcept {\r\n    if (_Order != memory_order_relaxed) {\r\n        _Compiler_barrier();\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty kill_dependency(_Ty _Arg) noexcept { // \"magic\" template that kills dependency ordering when called\r\n    return _Arg;\r\n}\r\n\r\ninline void _Check_store_memory_order(const memory_order _Order) noexcept {\r\n    switch (_Order) {\r\n    case memory_order_relaxed:\r\n    case memory_order_release:\r\n    case memory_order_seq_cst:\r\n        // nothing to do\r\n        break;\r\n    case memory_order_consume:\r\n    case memory_order_acquire:\r\n    case memory_order_acq_rel:\r\n    default:\r\n        _INVALID_MEMORY_ORDER;\r\n        break;\r\n    }\r\n}\r\n\r\ninline void _Check_load_memory_order(const memory_order _Order) noexcept {\r\n    switch (_Order) {\r\n    case memory_order_relaxed:\r\n    case memory_order_consume:\r\n    case memory_order_acquire:\r\n    case memory_order_seq_cst:\r\n        // nothing to do\r\n        break;\r\n    case memory_order_release:\r\n    case memory_order_acq_rel:\r\n    default:\r\n        _INVALID_MEMORY_ORDER;\r\n        break;\r\n    }\r\n}\r\n\r\n_NODISCARD inline memory_order _Combine_cas_memory_orders(\r\n    const memory_order _Success, const memory_order _Failure) noexcept {\r\n    // Finds upper bound of a compare/exchange memory order\r\n    // pair, according to the following partial order:\r\n    //     seq_cst\r\n    //        |\r\n    //     acq_rel\r\n    //     /     \\\r\n    // acquire  release\r\n    //    |       |\r\n    // consume    |\r\n    //     \\     /\r\n    //     relaxed\r\n    static constexpr memory_order _Combined_memory_orders[6][6] = {// combined upper bounds\r\n        {memory_order_relaxed, memory_order_consume, memory_order_acquire, memory_order_release, memory_order_acq_rel,\r\n            memory_order_seq_cst},\r\n        {memory_order_consume, memory_order_consume, memory_order_acquire, memory_order_acq_rel, memory_order_acq_rel,\r\n            memory_order_seq_cst},\r\n        {memory_order_acquire, memory_order_acquire, memory_order_acquire, memory_order_acq_rel, memory_order_acq_rel,\r\n            memory_order_seq_cst},\r\n        {memory_order_release, memory_order_acq_rel, memory_order_acq_rel, memory_order_release, memory_order_acq_rel,\r\n            memory_order_seq_cst},\r\n        {memory_order_acq_rel, memory_order_acq_rel, memory_order_acq_rel, memory_order_acq_rel, memory_order_acq_rel,\r\n            memory_order_seq_cst},\r\n        {memory_order_seq_cst, memory_order_seq_cst, memory_order_seq_cst, memory_order_seq_cst, memory_order_seq_cst,\r\n            memory_order_seq_cst}};\r\n\r\n    _Check_memory_order(static_cast<unsigned int>(_Success));\r\n    _Check_load_memory_order(_Failure);\r\n    return _Combined_memory_orders[static_cast<int>(_Success)][static_cast<int>(_Failure)];\r\n}\r\n\r\n#if 1 // TRANSITION, ABI\r\ntemplate <class _Ty>\r\nstruct _Atomic_padded {\r\n    alignas(sizeof(_Ty)) mutable _Ty _Value; // align to sizeof(T); x86 stack aligns 8-byte objects on 4-byte boundaries\r\n};\r\n\r\n#else // ^^^ don't break ABI / break ABI vvv\r\ntemplate <class _Ty>\r\nstruct _Atomic_storage_traits { // properties for how _Ty is stored in an atomic\r\n    static constexpr size_t _Storage_size = sizeof(_Ty) == 1 ? 1\r\n                                          : sizeof(_Ty) == 2 ? 2\r\n                                          : sizeof(_Ty) <= 4 ? 4\r\n                                          : sizeof(_Ty) <= 8 ? 8\r\n#if defined(_M_X64) || defined(_M_ARM64) || defined(_M_ARM64EC)\r\n                                          : sizeof(_Ty) <= 16 ? 16\r\n#endif // 64 bits\r\n                                                              : sizeof(_Ty);\r\n\r\n    static constexpr size_t _Padding_size = _Storage_size - sizeof(_Ty);\r\n    static constexpr bool _Uses_padding   = _Padding_size != 0;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_storage_traits<_Ty&> { // properties for how _Ty is stored in an atomic_ref\r\n    static constexpr size_t _Storage_size = sizeof(_Ty);\r\n    static constexpr bool _Uses_padding   = false;\r\n};\r\n\r\ntemplate <class _Ty, bool = _Atomic_storage_traits<_Ty>::_Uses_padding>\r\nstruct _Atomic_padded { // aggregate to allow explicit constexpr zeroing of padding\r\n    alignas(_Atomic_storage_traits<_Ty>::_Storage_size) mutable _Ty _Value;\r\n    mutable unsigned char _Padding[_Atomic_storage_traits<_Ty>::_Padding_size];\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_padded<_Ty, false> {\r\n    alignas(sizeof(_Ty)) mutable _Ty _Value; // align to sizeof(T); x86 stack aligns 8-byte objects on 4-byte boundaries\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_padded<_Ty&, false> {\r\n    _Ty& _Value;\r\n};\r\n\r\n#endif // ^^^ break ABI ^^^\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_storage_types {\r\n    using _TStorage = _Atomic_padded<_Ty>;\r\n    using _Spinlock = long;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_storage_types<_Ty&> {\r\n    using _TStorage = _Ty&;\r\n    using _Spinlock = _Smtx_t*; // POINTER TO mutex\r\n};\r\n\r\n#if 1 // TRANSITION, ABI\r\ntemplate <class _Ty, size_t = sizeof(remove_reference_t<_Ty>)>\r\n#else // ^^^ don't break ABI / break ABI vvv\r\ntemplate <class _Ty, size_t = _Atomic_storage_traits<_Ty>::_Storage_size>\r\n#endif // ^^^ break ABI ^^^\r\nstruct _Atomic_storage;\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty, class _Value_type>\r\nvoid _Atomic_wait_direct(\r\n    const _Atomic_storage<_Ty>* const _This, _Value_type _Expected_bytes, const memory_order _Order) noexcept {\r\n    const auto _Storage_ptr =\r\n        const_cast<const void*>(static_cast<const volatile void*>(_STD addressof(_This->_Storage)));\r\n    for (;;) {\r\n        const _Value_type _Observed_bytes = _STD _Bit_cast<_Value_type>(_This->load(_Order));\r\n        if (_Expected_bytes != _Observed_bytes) {\r\n#if _CMPXCHG_MASK_OUT_PADDING_BITS\r\n            using _TVal = _Remove_cvref_t<_Ty>;\r\n            if constexpr (_Might_have_non_value_bits<_TVal>) {\r\n                _Storage_for<_TVal> _Mask{_Form_mask};\r\n                const _Value_type _Mask_val = _STD _Bit_cast<_Value_type>(_Mask._Ref());\r\n\r\n                if (((_Expected_bytes ^ _Observed_bytes) & _Mask_val) == 0) {\r\n                    _Expected_bytes = _Observed_bytes;\r\n                    continue;\r\n                }\r\n            }\r\n#endif // _CMPXCHG_MASK_OUT_PADDING_BITS\r\n\r\n            return;\r\n        }\r\n\r\n        ::__std_atomic_wait_direct(_Storage_ptr, &_Expected_bytes, sizeof(_Value_type), __std_atomic_wait_no_timeout);\r\n    }\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n#if 1 // TRANSITION, ABI, GH-1151\r\ninline void _Atomic_lock_acquire(long& _Spinlock) noexcept {\r\n#if (defined(_M_IX86) && !defined(_M_HYBRID_X86_ARM64)) || (defined(_M_X64) && !defined(_M_ARM64EC))\r\n    // Algorithm from Intel(R) 64 and IA-32 Architectures Optimization Reference Manual, May 2020\r\n    // Example 2-4. Contended Locks with Increasing Back-off Example - Improved Version, page 2-22\r\n    // The code in mentioned manual is covered by the 0BSD license.\r\n    int _Current_backoff       = 1;\r\n    constexpr int _Max_backoff = 64;\r\n    while (_InterlockedExchange(&_Spinlock, 1) != 0) {\r\n        while (__iso_volatile_load32(&reinterpret_cast<int&>(_Spinlock)) != 0) {\r\n            for (int _Count_down = _Current_backoff; _Count_down != 0; --_Count_down) {\r\n                _mm_pause();\r\n            }\r\n            _Current_backoff = _Current_backoff < _Max_backoff ? _Current_backoff << 1 : _Max_backoff;\r\n        }\r\n    }\r\n#elif defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64)\r\n    while (_InterlockedExchange_acq(&_Spinlock, 1) != 0) {\r\n        while (__iso_volatile_load32(&reinterpret_cast<int&>(_Spinlock)) != 0) {\r\n            __yield();\r\n        }\r\n    }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64) / unknown architecture vvv\r\n#error Unknown architecture\r\n#endif // ^^^ unknown architecture ^^^\r\n}\r\n\r\ninline void _Atomic_lock_release(long& _Spinlock) noexcept {\r\n    __STORE_RELEASE(32, reinterpret_cast<int*>(&_Spinlock), 0);\r\n}\r\n\r\ninline void _Atomic_lock_acquire(_Smtx_t* _Spinlock) noexcept {\r\n    _Smtx_lock_exclusive(_Spinlock);\r\n}\r\n\r\ninline void _Atomic_lock_release(_Smtx_t* _Spinlock) noexcept {\r\n    _Smtx_unlock_exclusive(_Spinlock);\r\n}\r\n\r\ntemplate <class _Spinlock_t>\r\nclass _NODISCARD _Atomic_lock_guard {\r\npublic:\r\n    explicit _Atomic_lock_guard(_Spinlock_t& _Spinlock_) noexcept : _Spinlock(_Spinlock_) {\r\n        _Atomic_lock_acquire(_Spinlock);\r\n    }\r\n\r\n    ~_Atomic_lock_guard() {\r\n        _Atomic_lock_release(_Spinlock);\r\n    }\r\n\r\n    _Atomic_lock_guard(const _Atomic_lock_guard&)            = delete;\r\n    _Atomic_lock_guard& operator=(const _Atomic_lock_guard&) = delete;\r\n\r\nprivate:\r\n    _Spinlock_t& _Spinlock;\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Spinlock_t>\r\nbool __stdcall _Atomic_wait_compare_non_lock_free(\r\n    const void* _Storage, void* _Comparand, size_t _Size, void* _Spinlock_raw) noexcept {\r\n    _Spinlock_t& _Spinlock = *static_cast<_Spinlock_t*>(_Spinlock_raw);\r\n    _Atomic_lock_acquire(_Spinlock);\r\n    const auto _Cmp_result = _CSTD memcmp(_Storage, _Comparand, _Size);\r\n    _Atomic_lock_release(_Spinlock);\r\n    return _Cmp_result == 0;\r\n}\r\n\r\n#ifdef _WIN64\r\ninline bool __stdcall _Atomic_wait_compare_16_bytes(const void* _Storage, void* _Comparand, size_t, void*) noexcept {\r\n    const auto _Dest              = static_cast<long long*>(const_cast<void*>(_Storage));\r\n    const auto _Cmp               = static_cast<const long long*>(_Comparand);\r\n    alignas(16) long long _Tmp[2] = {_Cmp[0], _Cmp[1]};\r\n#if defined(_M_X64) && !defined(_M_ARM64EC)\r\n    return _InterlockedCompareExchange128(_Dest, _Tmp[1], _Tmp[0], _Tmp) != 0;\r\n#else // ^^^ _M_X64 / ARM64, _M_ARM64EC vvv\r\n    return _InterlockedCompareExchange128_nf(_Dest, _Tmp[1], _Tmp[0], _Tmp) != 0;\r\n#endif // ^^^ ARM64, _M_ARM64EC ^^^\r\n}\r\n#endif // _WIN64\r\n#endif // _HAS_CXX20\r\n#endif // TRANSITION, ABI\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class>\r\nstruct atomic_ref;\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Ty, size_t /* = ... */>\r\nstruct _Atomic_storage {\r\n    // Provides operations common to all specializations of std::atomic, load, store, exchange, and CAS.\r\n    // Locking version used when hardware has no atomic operations for sizeof(_Ty).\r\n\r\n    using _TVal  = _Remove_cvref_t<_Ty>;\r\n    using _Guard = _Atomic_lock_guard<typename _Atomic_storage_types<_Ty>::_Spinlock>;\r\n\r\n    _Atomic_storage() = default;\r\n\r\n    /* implicit */ constexpr _Atomic_storage(const _Ty& _Value) noexcept : _Storage(_Value) {\r\n        // non-atomically initialize this atomic\r\n    }\r\n\r\n    void store(const _TVal _Value, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        // store with sequential consistency\r\n        _Check_store_memory_order(_Order);\r\n        _Guard _Lock{_Spinlock};\r\n        _Storage = _Value;\r\n    }\r\n\r\n    _NODISCARD _TVal load(const memory_order _Order = memory_order_seq_cst) const noexcept {\r\n        // load with sequential consistency\r\n        _Check_load_memory_order(_Order);\r\n        _Guard _Lock{_Spinlock};\r\n        _TVal _Local(_Storage);\r\n        return _Local;\r\n    }\r\n\r\n    _TVal exchange(const _TVal _Value, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        // exchange _Value with _Storage with sequential consistency\r\n        _Check_memory_order(static_cast<unsigned int>(_Order));\r\n        _Guard _Lock{_Spinlock};\r\n        _TVal _Result(_Storage);\r\n        _Storage = _Value;\r\n        return _Result;\r\n    }\r\n\r\n    bool compare_exchange_strong(_TVal& _Expected, const _TVal _Desired,\r\n        const memory_order _Order = memory_order_seq_cst) noexcept { // CAS with sequential consistency, plain\r\n        _Check_memory_order(static_cast<unsigned int>(_Order));\r\n        const auto _Storage_ptr  = _STD addressof(_Storage);\r\n        const auto _Expected_ptr = _STD addressof(_Expected);\r\n        bool _Result;\r\n#if _CMPXCHG_MASK_OUT_PADDING_BITS\r\n        ::__builtin_zero_non_value_bits(_Expected_ptr); // TRANSITION, DevCom-10456452\r\n#endif // _CMPXCHG_MASK_OUT_PADDING_BITS\r\n        _Guard _Lock{_Spinlock};\r\n#if _CMPXCHG_MASK_OUT_PADDING_BITS\r\n        if constexpr (_Might_have_non_value_bits<_TVal>) {\r\n            _Storage_for<_TVal> _Local;\r\n            const auto _Local_ptr = _Local._Ptr();\r\n            _CSTD memcpy(_Local_ptr, _Storage_ptr, sizeof(_TVal));\r\n            ::__builtin_zero_non_value_bits(_Local_ptr); // TRANSITION, DevCom-10456452\r\n            _Result = _CSTD memcmp(_Local_ptr, _Expected_ptr, sizeof(_TVal)) == 0;\r\n        } else {\r\n            _Result = _CSTD memcmp(_Storage_ptr, _Expected_ptr, sizeof(_TVal)) == 0;\r\n        }\r\n#else // ^^^ _CMPXCHG_MASK_OUT_PADDING_BITS / !_CMPXCHG_MASK_OUT_PADDING_BITS vvv\r\n        _Result = _CSTD memcmp(_Storage_ptr, _Expected_ptr, sizeof(_TVal)) == 0;\r\n#endif // ^^^ !_CMPXCHG_MASK_OUT_PADDING_BITS ^^^\r\n        if (_Result) {\r\n            _CSTD memcpy(_Storage_ptr, _STD addressof(_Desired), sizeof(_TVal));\r\n        } else {\r\n            _CSTD memcpy(_Expected_ptr, _Storage_ptr, sizeof(_TVal));\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    void wait(_TVal _Expected, memory_order = memory_order_seq_cst) const noexcept {\r\n        const auto _Storage_ptr  = _STD addressof(_Storage);\r\n        const auto _Expected_ptr = _STD addressof(_Expected);\r\n        for (;;) {\r\n            {\r\n                _Guard _Lock{_Spinlock};\r\n                if (_CSTD memcmp(_Storage_ptr, _Expected_ptr, sizeof(_TVal)) != 0) {\r\n                    // contents differed, we might be done, check for padding\r\n#if _CMPXCHG_MASK_OUT_PADDING_BITS\r\n                    if constexpr (_Might_have_non_value_bits<_TVal>) {\r\n                        _Storage_for<_TVal> _Local;\r\n                        const auto _Local_ptr = _Local._Ptr();\r\n                        _CSTD memcpy(_Local_ptr, _Storage_ptr, sizeof(_TVal));\r\n                        ::__builtin_zero_non_value_bits(_Local_ptr); // TRANSITION, DevCom-10456452\r\n                        ::__builtin_zero_non_value_bits(_Expected_ptr); // TRANSITION, DevCom-10456452\r\n                        if (_CSTD memcmp(_Local_ptr, _Expected_ptr, sizeof(_TVal)) == 0) {\r\n                            // _Storage differs from _Expected only by padding; copy the padding from _Storage into\r\n                            // _Expected\r\n                            _CSTD memcpy(_Expected_ptr, _Storage_ptr, sizeof(_TVal));\r\n                        } else {\r\n                            // truly different, we're done\r\n                            return;\r\n                        }\r\n                    } else\r\n#endif // _CMPXCHG_MASK_OUT_PADDING_BITS\r\n                    {\r\n                        return;\r\n                    }\r\n                }\r\n            } // unlock\r\n\r\n            ::__std_atomic_wait_indirect(_Storage_ptr, _Expected_ptr, sizeof(_TVal), &_Spinlock,\r\n                &_Atomic_wait_compare_non_lock_free<decltype(_Spinlock)>, __std_atomic_wait_no_timeout);\r\n        }\r\n    }\r\n\r\n    void notify_one() noexcept {\r\n        ::__std_atomic_notify_one_indirect(_STD addressof(_Storage));\r\n    }\r\n\r\n    void notify_all() noexcept {\r\n        ::__std_atomic_notify_all_indirect(_STD addressof(_Storage));\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n#if 1 // TRANSITION, ABI\r\nprotected:\r\n    void _Init_spinlock_for_ref() noexcept {\r\n        _Spinlock = ::__std_atomic_get_mutex(_STD addressof(_Storage));\r\n    }\r\n\r\nprivate:\r\n    // Spinlock integer for non-lock-free atomic. <xthreads.h> mutex pointer for non-lock-free atomic_ref\r\n    mutable typename _Atomic_storage_types<_Ty>::_Spinlock _Spinlock{};\r\n\r\npublic:\r\n    _Ty _Storage{};\r\n\r\n#else // ^^^ don't break ABI / break ABI vvv\r\n    _Ty _Storage;\r\n    mutable _Smtx_t _Mutex{};\r\n#endif // ^^^ break ABI ^^^\r\n\r\n#if _HAS_CXX20\r\n    template <class>\r\n    friend struct atomic_ref;\r\n#endif // _HAS_CXX20\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_storage<_Ty, 1> { // lock-free using 1-byte intrinsics\r\n    using _TVal = _Remove_cvref_t<_Ty>;\r\n\r\n    _Atomic_storage() = default;\r\n\r\n    /* implicit */ constexpr _Atomic_storage(const _Ty& _Value) noexcept : _Storage{_Value} {\r\n        // non-atomically initialize this atomic\r\n    }\r\n\r\n    void store(const _TVal _Value) noexcept { // store with sequential consistency\r\n        const auto _Mem      = _STD _Atomic_address_as<char>(_Storage);\r\n        const char _As_bytes = _STD _Bit_cast<char>(_Value);\r\n        _ATOMIC_STORE_SEQ_CST(8, _Mem, _As_bytes)\r\n    }\r\n\r\n    void store(const _TVal _Value, const memory_order _Order) noexcept { // store with given memory order\r\n        const auto _Mem      = _STD _Atomic_address_as<char>(_Storage);\r\n        const char _As_bytes = _STD _Bit_cast<char>(_Value);\r\n\r\n        _Check_store_memory_order(_Order);\r\n\r\n        if (_Order == memory_order_relaxed) {\r\n            __iso_volatile_store8(_Mem, _As_bytes);\r\n        } else if (_Order == memory_order_release) {\r\n            __STORE_RELEASE(8, _Mem, _As_bytes);\r\n        } else {\r\n            store(_Value);\r\n        }\r\n    }\r\n\r\n    _NODISCARD _TVal load(\r\n        const memory_order _Order = memory_order_seq_cst) const noexcept { // load with given memory order\r\n        const auto _Mem = _STD _Atomic_address_as<char>(_Storage);\r\n        char _As_bytes;\r\n#if _STD_ATOMIC_USE_ARM64_LDAR_STLR == 1\r\n        _ATOMIC_LOAD_ARM64(_As_bytes, 8, _Mem, _Order)\r\n#else // ^^^ _STD_ATOMIC_USE_ARM64_LDAR_STLR == 1 / _STD_ATOMIC_USE_ARM64_LDAR_STLR == 0 vvv\r\n        _As_bytes = __iso_volatile_load8(_Mem);\r\n        _ATOMIC_POST_LOAD_BARRIER_AS_NEEDED(_Order)\r\n#endif // ^^^ _STD_ATOMIC_USE_ARM64_LDAR_STLR == 0 ^^^\r\n        return reinterpret_cast<_TVal&>(_As_bytes);\r\n    }\r\n\r\n    _TVal exchange(const _TVal _Value, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        // exchange with given memory order\r\n        char _As_bytes;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _As_bytes, _InterlockedExchange8,\r\n            _STD _Atomic_address_as<char>(_Storage), _STD _Bit_cast<char>(_Value));\r\n        return reinterpret_cast<_TVal&>(_As_bytes);\r\n    }\r\n\r\n    bool compare_exchange_strong(_TVal& _Expected, const _TVal _Desired,\r\n        const memory_order _Order = memory_order_seq_cst) noexcept { // CAS with given memory order\r\n        char _Expected_bytes = _STD _Bit_cast<char>(_Expected); // read before atomic operation\r\n        char _Prev_bytes;\r\n\r\n#if _CMPXCHG_MASK_OUT_PADDING_BITS\r\n        if constexpr (_Might_have_non_value_bits<_TVal>) {\r\n            _Storage_for<_TVal> _Mask{_Form_mask};\r\n            const char _Mask_val = _STD _Bit_cast<char>(_Mask._Ref());\r\n\r\n            for (;;) {\r\n                _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Prev_bytes, _InterlockedCompareExchange8,\r\n                    _STD _Atomic_address_as<char>(_Storage), _STD _Bit_cast<char>(_Desired), _Expected_bytes);\r\n                if (_Prev_bytes == _Expected_bytes) {\r\n                    return true;\r\n                }\r\n\r\n                if ((_Prev_bytes ^ _Expected_bytes) & _Mask_val) {\r\n                    reinterpret_cast<char&>(_Expected) = _Prev_bytes;\r\n                    return false;\r\n                }\r\n                _Expected_bytes = (_Expected_bytes & _Mask_val) | (_Prev_bytes & ~_Mask_val);\r\n            }\r\n        }\r\n#endif // _CMPXCHG_MASK_OUT_PADDING_BITS\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Prev_bytes, _InterlockedCompareExchange8,\r\n            _STD _Atomic_address_as<char>(_Storage), _STD _Bit_cast<char>(_Desired), _Expected_bytes);\r\n        if (_Prev_bytes == _Expected_bytes) {\r\n            return true;\r\n        }\r\n\r\n        reinterpret_cast<char&>(_Expected) = _Prev_bytes;\r\n        return false;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    void wait(const _TVal _Expected, const memory_order _Order = memory_order_seq_cst) const noexcept {\r\n        _STD _Atomic_wait_direct(this, _STD _Bit_cast<char>(_Expected), _Order);\r\n    }\r\n\r\n    void notify_one() noexcept {\r\n        const auto _Storage_ptr = const_cast<const void*>(static_cast<const volatile void*>(_STD addressof(_Storage)));\r\n        ::__std_atomic_notify_one_direct(_Storage_ptr);\r\n    }\r\n\r\n    void notify_all() noexcept {\r\n        const auto _Storage_ptr = const_cast<const void*>(static_cast<const volatile void*>(_STD addressof(_Storage)));\r\n        ::__std_atomic_notify_all_direct(_Storage_ptr);\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    typename _Atomic_storage_types<_Ty>::_TStorage _Storage;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_storage<_Ty, 2> { // lock-free using 2-byte intrinsics\r\n    using _TVal = _Remove_cvref_t<_Ty>;\r\n\r\n    _Atomic_storage() = default;\r\n\r\n    /* implicit */ constexpr _Atomic_storage(const _Ty& _Value) noexcept : _Storage{_Value} {\r\n        // non-atomically initialize this atomic\r\n    }\r\n\r\n    void store(const _TVal _Value) noexcept { // store with sequential consistency\r\n        const auto _Mem       = _STD _Atomic_address_as<short>(_Storage);\r\n        const short _As_bytes = _STD _Bit_cast<short>(_Value);\r\n        _ATOMIC_STORE_SEQ_CST(16, _Mem, _As_bytes)\r\n    }\r\n\r\n    void store(const _TVal _Value, const memory_order _Order) noexcept { // store with given memory order\r\n        const auto _Mem       = _STD _Atomic_address_as<short>(_Storage);\r\n        const short _As_bytes = _STD _Bit_cast<short>(_Value);\r\n\r\n        _Check_store_memory_order(_Order);\r\n\r\n        if (_Order == memory_order_relaxed) {\r\n            __iso_volatile_store16(_Mem, _As_bytes);\r\n        } else if (_Order == memory_order_release) {\r\n            __STORE_RELEASE(16, _Mem, _As_bytes);\r\n        } else {\r\n            store(_Value);\r\n        }\r\n    }\r\n\r\n    _NODISCARD _TVal load(\r\n        const memory_order _Order = memory_order_seq_cst) const noexcept { // load with given memory order\r\n        const auto _Mem = _STD _Atomic_address_as<short>(_Storage);\r\n        short _As_bytes;\r\n#if _STD_ATOMIC_USE_ARM64_LDAR_STLR == 1\r\n        _ATOMIC_LOAD_ARM64(_As_bytes, 16, _Mem, _Order)\r\n#else // ^^^ _STD_ATOMIC_USE_ARM64_LDAR_STLR == 1 / _STD_ATOMIC_USE_ARM64_LDAR_STLR == 0 vvv\r\n        _As_bytes = __iso_volatile_load16(_Mem);\r\n        _ATOMIC_POST_LOAD_BARRIER_AS_NEEDED(_Order)\r\n#endif // ^^^ _STD_ATOMIC_USE_ARM64_LDAR_STLR == 0 ^^^\r\n        return reinterpret_cast<_TVal&>(_As_bytes);\r\n    }\r\n\r\n    _TVal exchange(const _TVal _Value, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        // exchange with given memory order\r\n        short _As_bytes;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _As_bytes, _InterlockedExchange16,\r\n            _STD _Atomic_address_as<short>(_Storage), _STD _Bit_cast<short>(_Value));\r\n        return reinterpret_cast<_TVal&>(_As_bytes);\r\n    }\r\n\r\n    bool compare_exchange_strong(_TVal& _Expected, const _TVal _Desired,\r\n        const memory_order _Order = memory_order_seq_cst) noexcept { // CAS with given memory order\r\n        short _Expected_bytes = _STD _Bit_cast<short>(_Expected); // read before atomic operation\r\n        short _Prev_bytes;\r\n#if _CMPXCHG_MASK_OUT_PADDING_BITS\r\n        if constexpr (_Might_have_non_value_bits<_Ty>) {\r\n            _Storage_for<_TVal> _Mask{_Form_mask};\r\n            const short _Mask_val = _STD _Bit_cast<short>(_Mask._Ref());\r\n\r\n            for (;;) {\r\n                _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Prev_bytes, _InterlockedCompareExchange16,\r\n                    _STD _Atomic_address_as<short>(_Storage), _STD _Bit_cast<short>(_Desired), _Expected_bytes);\r\n                if (_Prev_bytes == _Expected_bytes) {\r\n                    return true;\r\n                }\r\n\r\n                if ((_Prev_bytes ^ _Expected_bytes) & _Mask_val) {\r\n                    _CSTD memcpy(_STD addressof(_Expected), &_Prev_bytes, sizeof(_TVal));\r\n                    return false;\r\n                }\r\n                _Expected_bytes = (_Expected_bytes & _Mask_val) | (_Prev_bytes & ~_Mask_val);\r\n            }\r\n        }\r\n#endif // _CMPXCHG_MASK_OUT_PADDING_BITS\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Prev_bytes, _InterlockedCompareExchange16,\r\n            _STD _Atomic_address_as<short>(_Storage), _STD _Bit_cast<short>(_Desired), _Expected_bytes);\r\n        if (_Prev_bytes == _Expected_bytes) {\r\n            return true;\r\n        }\r\n\r\n        _CSTD memcpy(_STD addressof(_Expected), &_Prev_bytes, sizeof(_Ty));\r\n        return false;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    void wait(const _TVal _Expected, const memory_order _Order = memory_order_seq_cst) const noexcept {\r\n        _STD _Atomic_wait_direct(this, _STD _Bit_cast<short>(_Expected), _Order);\r\n    }\r\n\r\n    void notify_one() noexcept {\r\n        const auto _Storage_ptr = const_cast<const void*>(static_cast<const volatile void*>(_STD addressof(_Storage)));\r\n        ::__std_atomic_notify_one_direct(_Storage_ptr);\r\n    }\r\n\r\n    void notify_all() noexcept {\r\n        const auto _Storage_ptr = const_cast<const void*>(static_cast<const volatile void*>(_STD addressof(_Storage)));\r\n        ::__std_atomic_notify_all_direct(_Storage_ptr);\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    typename _Atomic_storage_types<_Ty>::_TStorage _Storage;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_storage<_Ty, 4> { // lock-free using 4-byte intrinsics\r\n    using _TVal = _Remove_cvref_t<_Ty>;\r\n\r\n    _Atomic_storage() = default;\r\n\r\n    /* implicit */ constexpr _Atomic_storage(const _Ty& _Value) noexcept : _Storage{_Value} {\r\n        // non-atomically initialize this atomic\r\n    }\r\n\r\n    void store(const _TVal _Value) noexcept { // store with sequential consistency\r\n        const auto _Mem     = _STD _Atomic_address_as<int>(_Storage);\r\n        const int _As_bytes = _STD _Bit_cast<int>(_Value);\r\n        _ATOMIC_STORE_32_SEQ_CST(_Mem, _As_bytes)\r\n    }\r\n\r\n    void store(const _TVal _Value, const memory_order _Order) noexcept { // store with given memory order\r\n        const auto _Mem     = _STD _Atomic_address_as<int>(_Storage);\r\n        const int _As_bytes = _STD _Bit_cast<int>(_Value);\r\n\r\n        _Check_store_memory_order(_Order);\r\n\r\n        if (_Order == memory_order_relaxed) {\r\n            __iso_volatile_store32(_Mem, _As_bytes);\r\n        } else if (_Order == memory_order_release) {\r\n            __STORE_RELEASE(32, _Mem, _As_bytes);\r\n        } else {\r\n            store(_Value);\r\n        }\r\n    }\r\n\r\n    _NODISCARD _TVal load(\r\n        const memory_order _Order = memory_order_seq_cst) const noexcept { // load with given memory order\r\n        const auto _Mem = _STD _Atomic_address_as<int>(_Storage);\r\n        int _As_bytes;\r\n#if _STD_ATOMIC_USE_ARM64_LDAR_STLR == 1\r\n        _ATOMIC_LOAD_ARM64(_As_bytes, 32, _Mem, _Order)\r\n#else // ^^^ _STD_ATOMIC_USE_ARM64_LDAR_STLR == 1 / _STD_ATOMIC_USE_ARM64_LDAR_STLR == 0 vvv\r\n        _As_bytes = __iso_volatile_load32(_Mem);\r\n        _ATOMIC_POST_LOAD_BARRIER_AS_NEEDED(_Order)\r\n#endif // ^^^ _STD_ATOMIC_USE_ARM64_LDAR_STLR == 0 ^^^\r\n        return reinterpret_cast<_TVal&>(_As_bytes);\r\n    }\r\n\r\n    _TVal exchange(const _TVal _Value, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        // exchange with given memory order\r\n        long _As_bytes;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _As_bytes, _InterlockedExchange,\r\n            _STD _Atomic_address_as<long>(_Storage), _STD _Bit_cast<long>(_Value));\r\n        return reinterpret_cast<_TVal&>(_As_bytes);\r\n    }\r\n\r\n    bool compare_exchange_strong(_TVal& _Expected, const _TVal _Desired,\r\n        const memory_order _Order = memory_order_seq_cst) noexcept { // CAS with given memory order\r\n        long _Expected_bytes = _STD _Bit_cast<long>(_Expected); // read before atomic operation\r\n        long _Prev_bytes;\r\n#if _CMPXCHG_MASK_OUT_PADDING_BITS\r\n        if constexpr (_Might_have_non_value_bits<_TVal>) {\r\n            _Storage_for<_TVal> _Mask{_Form_mask};\r\n            const long _Mask_val = _STD _Bit_cast<long>(_Mask._Ref());\r\n\r\n            for (;;) {\r\n                _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Prev_bytes, _InterlockedCompareExchange,\r\n                    _STD _Atomic_address_as<long>(_Storage), _STD _Bit_cast<long>(_Desired), _Expected_bytes);\r\n                if (_Prev_bytes == _Expected_bytes) {\r\n                    return true;\r\n                }\r\n\r\n                if ((_Prev_bytes ^ _Expected_bytes) & _Mask_val) {\r\n                    _CSTD memcpy(_STD addressof(_Expected), &_Prev_bytes, sizeof(_TVal));\r\n                    return false;\r\n                }\r\n                _Expected_bytes = (_Expected_bytes & _Mask_val) | (_Prev_bytes & ~_Mask_val);\r\n            }\r\n        }\r\n#endif // _CMPXCHG_MASK_OUT_PADDING_BITS\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Prev_bytes, _InterlockedCompareExchange,\r\n            _STD _Atomic_address_as<long>(_Storage), _STD _Bit_cast<long>(_Desired), _Expected_bytes);\r\n        if (_Prev_bytes == _Expected_bytes) {\r\n            return true;\r\n        }\r\n\r\n        _CSTD memcpy(_STD addressof(_Expected), &_Prev_bytes, sizeof(_TVal));\r\n        return false;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    void wait(const _TVal _Expected, const memory_order _Order = memory_order_seq_cst) const noexcept {\r\n        _STD _Atomic_wait_direct(this, _STD _Bit_cast<long>(_Expected), _Order);\r\n    }\r\n\r\n    void notify_one() noexcept {\r\n        const auto _Storage_ptr = const_cast<const void*>(static_cast<const volatile void*>(_STD addressof(_Storage)));\r\n        ::__std_atomic_notify_one_direct(_Storage_ptr);\r\n    }\r\n\r\n    void notify_all() noexcept {\r\n        const auto _Storage_ptr = const_cast<const void*>(static_cast<const volatile void*>(_STD addressof(_Storage)));\r\n        ::__std_atomic_notify_all_direct(_Storage_ptr);\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    typename _Atomic_storage_types<_Ty>::_TStorage _Storage;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_storage<_Ty, 8> { // lock-free using 8-byte intrinsics\r\n    using _TVal = _Remove_cvref_t<_Ty>;\r\n\r\n    _Atomic_storage() = default;\r\n\r\n    /* implicit */ constexpr _Atomic_storage(const _Ty& _Value) noexcept : _Storage{_Value} {\r\n        // non-atomically initialize this atomic\r\n    }\r\n\r\n    void store(const _TVal _Value) noexcept { // store with sequential consistency\r\n        const auto _Mem           = _STD _Atomic_address_as<long long>(_Storage);\r\n        const long long _As_bytes = _STD _Bit_cast<long long>(_Value);\r\n#if defined(__clang__) && defined(_M_IX86) // TRANSITION, LLVM-126516\r\n        static_assert(_M_IX86_FP != 0, \"8 byte atomic store is not supported on clang-cl with /arch:IA32\");\r\n        __atomic_store_n(_Mem, _As_bytes, __ATOMIC_SEQ_CST);\r\n#else // ^^^ workaround / no workaround vvv\r\n        _ATOMIC_STORE_64_SEQ_CST(_Mem, _As_bytes);\r\n#endif // ^^^ no workaround ^^^\r\n    }\r\n\r\n    void store(const _TVal _Value, const memory_order _Order) noexcept { // store with given memory order\r\n        const auto _Mem           = _STD _Atomic_address_as<long long>(_Storage);\r\n        const long long _As_bytes = _STD _Bit_cast<long long>(_Value);\r\n\r\n        _Check_store_memory_order(_Order);\r\n\r\n        if (_Order == memory_order_relaxed) {\r\n#if defined(__clang__) && defined(_M_IX86) // TRANSITION, LLVM-126516\r\n            __atomic_store_n(_Mem, _As_bytes, __ATOMIC_RELAXED);\r\n#else // ^^^ workaround / no workaround vvv\r\n            __iso_volatile_store64(_Mem, _As_bytes);\r\n#endif // ^^^ no workaround ^^^\r\n        } else if (_Order == memory_order_release) {\r\n#if defined(__clang__) && defined(_M_IX86) // TRANSITION, LLVM-126516\r\n            __atomic_store_n(_Mem, _As_bytes, __ATOMIC_RELEASE);\r\n#else // ^^^ workaround / no workaround vvv\r\n            __STORE_RELEASE(64, _Mem, _As_bytes);\r\n#endif // ^^^ no workaround ^^^\r\n        } else {\r\n            store(_Value);\r\n        }\r\n    }\r\n\r\n    _NODISCARD _TVal load(\r\n        const memory_order _Order = memory_order_seq_cst) const noexcept { // load with given memory order\r\n        const auto _Mem = _STD _Atomic_address_as<long long>(_Storage);\r\n        long long _As_bytes;\r\n#if _STD_ATOMIC_USE_ARM64_LDAR_STLR == 1\r\n        _ATOMIC_LOAD_ARM64(_As_bytes, 64, _Mem, _Order)\r\n#else // ^^^ _STD_ATOMIC_USE_ARM64_LDAR_STLR == 1 / _STD_ATOMIC_USE_ARM64_LDAR_STLR != 1 vvv\r\n#if defined(__clang__) && defined(_M_IX86) // TRANSITION, LLVM-126516\r\n        static_assert(_M_IX86_FP != 0, \"8 byte atomic load is not supported on clang-cl with /arch:IA32\");\r\n        _As_bytes = __atomic_load_n(_Mem, __ATOMIC_RELAXED);\r\n#else // ^^^ workaround / no workaround vvv\r\n        _As_bytes = __iso_volatile_load64(_Mem);\r\n#endif // ^^^ no workaround ^^^\r\n        _ATOMIC_POST_LOAD_BARRIER_AS_NEEDED(_Order)\r\n#endif // ^^^ _STD_ATOMIC_USE_ARM64_LDAR_STLR != 1 ^^^\r\n        return reinterpret_cast<_TVal&>(_As_bytes);\r\n    }\r\n\r\n#ifdef _M_IX86\r\n    _TVal exchange(const _TVal _Value, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        // exchange with (effectively) sequential consistency\r\n        _TVal _Temp{load()};\r\n        while (!compare_exchange_strong(_Temp, _Value, _Order)) { // keep trying\r\n        }\r\n\r\n        return _Temp;\r\n    }\r\n#else // ^^^ defined(_M_IX86) / !defined(_M_IX86) vvv\r\n    _TVal exchange(const _TVal _Value, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        // exchange with given memory order\r\n        long long _As_bytes;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _As_bytes, _InterlockedExchange64,\r\n            _STD _Atomic_address_as<long long>(_Storage), _STD _Bit_cast<long long>(_Value));\r\n        return reinterpret_cast<_TVal&>(_As_bytes);\r\n    }\r\n#endif // ^^^ !defined(_M_IX86) ^^^\r\n\r\n    bool compare_exchange_strong(_TVal& _Expected, const _TVal _Desired,\r\n        const memory_order _Order = memory_order_seq_cst) noexcept { // CAS with given memory order\r\n        long long _Expected_bytes = _STD _Bit_cast<long long>(_Expected); // read before atomic operation\r\n        long long _Prev_bytes;\r\n\r\n#if _CMPXCHG_MASK_OUT_PADDING_BITS\r\n        if constexpr (_Might_have_non_value_bits<_TVal>) {\r\n            _Storage_for<_TVal> _Mask{_Form_mask};\r\n            const long long _Mask_val = _STD _Bit_cast<long long>(_Mask._Ref());\r\n\r\n            for (;;) {\r\n                _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Prev_bytes, _InterlockedCompareExchange64,\r\n                    _STD _Atomic_address_as<long long>(_Storage), _STD _Bit_cast<long long>(_Desired), _Expected_bytes);\r\n                if (_Prev_bytes == _Expected_bytes) {\r\n                    return true;\r\n                }\r\n\r\n                if ((_Prev_bytes ^ _Expected_bytes) & _Mask_val) {\r\n                    _CSTD memcpy(_STD addressof(_Expected), &_Prev_bytes, sizeof(_TVal));\r\n                    return false;\r\n                }\r\n                _Expected_bytes = (_Expected_bytes & _Mask_val) | (_Prev_bytes & ~_Mask_val);\r\n            }\r\n        }\r\n#endif // _CMPXCHG_MASK_OUT_PADDING_BITS\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Prev_bytes, _InterlockedCompareExchange64,\r\n            _STD _Atomic_address_as<long long>(_Storage), _STD _Bit_cast<long long>(_Desired), _Expected_bytes);\r\n        if (_Prev_bytes == _Expected_bytes) {\r\n            return true;\r\n        }\r\n\r\n        _CSTD memcpy(_STD addressof(_Expected), &_Prev_bytes, sizeof(_TVal));\r\n        return false;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    void wait(const _TVal _Expected, const memory_order _Order = memory_order_seq_cst) const noexcept {\r\n        _STD _Atomic_wait_direct(this, _STD _Bit_cast<long long>(_Expected), _Order);\r\n    }\r\n\r\n    void notify_one() noexcept {\r\n        const auto _Storage_ptr = const_cast<const void*>(static_cast<const volatile void*>(_STD addressof(_Storage)));\r\n        ::__std_atomic_notify_one_direct(_Storage_ptr);\r\n    }\r\n\r\n    void notify_all() noexcept {\r\n        const auto _Storage_ptr = const_cast<const void*>(static_cast<const volatile void*>(_STD addressof(_Storage)));\r\n        ::__std_atomic_notify_all_direct(_Storage_ptr);\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    typename _Atomic_storage_types<_Ty>::_TStorage _Storage;\r\n};\r\n\r\n#ifdef _WIN64\r\ntemplate <class _Ty>\r\nstruct _Atomic_storage<_Ty&, 16> { // lock-free using 16-byte intrinsics\r\n    // TRANSITION, ABI: replace '_Ty&' with '_Ty' in this specialization\r\n    using _TVal = _Remove_cvref_t<_Ty&>;\r\n\r\n    _Atomic_storage() = default;\r\n\r\n    // TRANSITION, ABI: replace _this_ occurrence of '_Ty&' with 'const _Ty&'\r\n    /* implicit */ constexpr _Atomic_storage(_Ty& _Value) noexcept\r\n        : _Storage{_Value} {} // non-atomically initialize this atomic\r\n\r\n    void store(const _TVal _Value) noexcept { // store with sequential consistency\r\n        (void) exchange(_Value);\r\n    }\r\n\r\n    void store(const _TVal _Value, const memory_order _Order) noexcept { // store with given memory order\r\n        _Check_store_memory_order(_Order);\r\n        (void) exchange(_Value, _Order);\r\n    }\r\n\r\n    _NODISCARD _TVal load() const noexcept { // load with sequential consistency\r\n        long long* const _Storage_ptr = const_cast<long long*>(_STD _Atomic_address_as<const long long>(_Storage));\r\n        _Int128 _Result{}; // atomic CAS 0 with 0\r\n        (void) _InterlockedCompareExchange128(_Storage_ptr, 0, 0, &_Result._Low);\r\n        return reinterpret_cast<_TVal&>(_Result);\r\n    }\r\n\r\n    _NODISCARD _TVal load(const memory_order _Order) const noexcept { // load with given memory order\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        long long* const _Storage_ptr = const_cast<long long*>(_STD _Atomic_address_as<const long long>(_Storage));\r\n        _Int128 _Result{}; // atomic CAS 0 with 0\r\n        switch (_Order) {\r\n        case memory_order_relaxed:\r\n            (void) _INTRIN_RELAXED(_InterlockedCompareExchange128)(_Storage_ptr, 0, 0, &_Result._Low);\r\n            break;\r\n        case memory_order_consume:\r\n        case memory_order_acquire:\r\n            (void) _INTRIN_ACQUIRE(_InterlockedCompareExchange128)(_Storage_ptr, 0, 0, &_Result._Low);\r\n            break;\r\n        case memory_order_release:\r\n        case memory_order_acq_rel:\r\n        default:\r\n            _INVALID_MEMORY_ORDER;\r\n            _FALLTHROUGH;\r\n        case memory_order_seq_cst:\r\n            (void) _InterlockedCompareExchange128(_Storage_ptr, 0, 0, &_Result._Low);\r\n            break;\r\n        }\r\n\r\n        return reinterpret_cast<_TVal&>(_Result);\r\n#else // ^^^ _M_ARM64, _M_ARM64EC / _M_X64 vvv\r\n        _Check_load_memory_order(_Order);\r\n        return load();\r\n#endif // ^^^ _M_X64 ^^^\r\n    }\r\n\r\n    _TVal exchange(const _TVal _Value) noexcept { // exchange with sequential consistency\r\n        _TVal _Result{_Value};\r\n        while (!compare_exchange_strong(_Result, _Value)) { // keep trying\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _TVal exchange(const _TVal _Value, const memory_order _Order) noexcept { // exchange with given memory order\r\n        _TVal _Result{_Value};\r\n        while (!compare_exchange_strong(_Result, _Value, _Order)) { // keep trying\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    bool compare_exchange_strong(_TVal& _Expected, const _TVal _Desired,\r\n        const memory_order _Order = memory_order_seq_cst) noexcept { // CAS with given memory order\r\n        _Int128 _Desired_bytes{};\r\n        _CSTD memcpy(&_Desired_bytes, _STD addressof(_Desired), sizeof(_TVal));\r\n        _Int128 _Expected_temp{};\r\n        _CSTD memcpy(&_Expected_temp, _STD addressof(_Expected), sizeof(_TVal));\r\n        unsigned char _Result;\r\n#if _CMPXCHG_MASK_OUT_PADDING_BITS\r\n        if constexpr (_Might_have_non_value_bits<_TVal>) {\r\n            _Int128 _Expected_originally{};\r\n            _CSTD memcpy(&_Expected_originally, _STD addressof(_Expected), sizeof(_TVal));\r\n\r\n            _Storage_for<_TVal> _Mask{_Form_mask};\r\n            _Int128 _Mask_val{};\r\n            _CSTD memcpy(&_Mask_val, _Mask._Ptr(), sizeof(_TVal));\r\n            for (;;) {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n                _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedCompareExchange128,\r\n                    _STD _Atomic_address_as<long long>(_Storage), _Desired_bytes._High, _Desired_bytes._Low,\r\n                    &_Expected_temp._Low);\r\n#else // ^^^ _M_ARM64, _M_ARM64EC / _M_X64 vvv\r\n                (void) _Order;\r\n                _Result = _InterlockedCompareExchange128(&reinterpret_cast<long long&>(_Storage), _Desired_bytes._High,\r\n                    _Desired_bytes._Low, &_Expected_temp._Low);\r\n#endif // ^^^ _M_X64 ^^^\r\n                if (_Result) {\r\n                    return true;\r\n                }\r\n\r\n                if (((_Expected_temp._Low ^ _Expected_originally._Low) & _Mask_val._Low) != 0\r\n                    || ((_Expected_temp._High ^ _Expected_originally._High) & _Mask_val._High) != 0) {\r\n                    _CSTD memcpy(_STD addressof(_Expected), &_Expected_temp, sizeof(_TVal));\r\n                    return false;\r\n                }\r\n\r\n                _Expected_temp._Low =\r\n                    (_Expected_originally._Low & _Mask_val._Low) | (_Expected_temp._Low & ~_Mask_val._Low);\r\n                _Expected_temp._High =\r\n                    (_Expected_originally._High & _Mask_val._High) | (_Expected_temp._High & ~_Mask_val._High);\r\n            }\r\n        }\r\n#endif // _CMPXCHG_MASK_OUT_PADDING_BITS\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedCompareExchange128,\r\n            _STD _Atomic_address_as<long long>(_Storage), _Desired_bytes._High, _Desired_bytes._Low,\r\n            &_Expected_temp._Low);\r\n#else // ^^^ _M_ARM64, _M_ARM64EC / _M_X64 vvv\r\n        (void) _Order;\r\n        _Result = _InterlockedCompareExchange128(&reinterpret_cast<volatile long long&>(_Storage), _Desired_bytes._High,\r\n            _Desired_bytes._Low, &_Expected_temp._Low);\r\n#endif // ^^^ _M_X64 ^^^\r\n        if (_Result == 0) {\r\n            _CSTD memcpy(_STD addressof(_Expected), &_Expected_temp, sizeof(_TVal));\r\n        }\r\n\r\n        return _Result != 0;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    void wait(_TVal _Expected, memory_order _Order = memory_order_seq_cst) const noexcept {\r\n        const auto _Storage_ptr  = const_cast<const void*>(static_cast<const volatile void*>(_STD addressof(_Storage)));\r\n        const auto _Expected_ptr = _STD addressof(_Expected);\r\n        _Int128 _Expected_bytes  = reinterpret_cast<const _Int128&>(_Expected);\r\n\r\n        for (;;) {\r\n            const _TVal _Observed   = load(_Order);\r\n            _Int128 _Observed_bytes = reinterpret_cast<const _Int128&>(_Observed);\r\n            if (_Observed_bytes._Low != _Expected_bytes._Low || _Observed_bytes._High != _Expected_bytes._High) {\r\n#if _CMPXCHG_MASK_OUT_PADDING_BITS\r\n                if constexpr (_Might_have_non_value_bits<_TVal>) {\r\n                    _Storage_for<_TVal> _Mask{_Form_mask};\r\n                    const _Int128 _Mask_val = reinterpret_cast<const _Int128&>(_Mask._Ref());\r\n\r\n                    if (((_Expected_bytes._Low ^ _Observed_bytes._Low) & _Mask_val._Low) == 0\r\n                        && ((_Expected_bytes._High ^ _Observed_bytes._High) & _Mask_val._High) == 0) {\r\n                        _Expected_bytes = _Observed_bytes;\r\n                        continue;\r\n                    }\r\n                }\r\n#endif // _CMPXCHG_MASK_OUT_PADDING_BITS\r\n\r\n                return;\r\n            }\r\n\r\n            ::__std_atomic_wait_indirect(_Storage_ptr, _Expected_ptr, sizeof(_TVal), nullptr,\r\n                &_Atomic_wait_compare_16_bytes, __std_atomic_wait_no_timeout);\r\n        }\r\n    }\r\n\r\n    void notify_one() noexcept {\r\n        const auto _Storage_ptr = const_cast<const void*>(static_cast<const volatile void*>(_STD addressof(_Storage)));\r\n        ::__std_atomic_notify_one_indirect(_Storage_ptr);\r\n    }\r\n\r\n    void notify_all() noexcept {\r\n        const auto _Storage_ptr = const_cast<const void*>(static_cast<const volatile void*>(_STD addressof(_Storage)));\r\n        ::__std_atomic_notify_all_indirect(_Storage_ptr);\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    struct _Int128 {\r\n        alignas(16) long long _Low;\r\n        long long _High;\r\n    };\r\n\r\n    typename _Atomic_storage_types<_Ty&>::_TStorage _Storage;\r\n};\r\n#endif // defined(_WIN64)\r\n\r\ntemplate <class _Ty, size_t = sizeof(_Ty)>\r\nstruct _Atomic_integral; // not defined\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_integral<_Ty, 1> : _Atomic_storage<_Ty> { // atomic integral operations using 1-byte intrinsics\r\n    using _Base = _Atomic_storage<_Ty>;\r\n    using typename _Base::_TVal;\r\n\r\n    using _Base::_Base;\r\n\r\n    _TVal fetch_add(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        char _Result;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedExchangeAdd8,\r\n            _STD _Atomic_address_as<char>(this->_Storage), static_cast<char>(_Operand));\r\n        return static_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal fetch_and(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        char _Result;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedAnd8,\r\n            _STD _Atomic_address_as<char>(this->_Storage), static_cast<char>(_Operand));\r\n        return static_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal fetch_or(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        char _Result;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedOr8,\r\n            _STD _Atomic_address_as<char>(this->_Storage), static_cast<char>(_Operand));\r\n        return static_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal fetch_xor(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        char _Result;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedXor8,\r\n            _STD _Atomic_address_as<char>(this->_Storage), static_cast<char>(_Operand));\r\n        return static_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal operator++(int) noexcept {\r\n        return static_cast<_TVal>(_InterlockedExchangeAdd8(_STD _Atomic_address_as<char>(this->_Storage), 1));\r\n    }\r\n\r\n    _TVal operator++() noexcept {\r\n        unsigned char _Before =\r\n            static_cast<unsigned char>(_InterlockedExchangeAdd8(_STD _Atomic_address_as<char>(this->_Storage), 1));\r\n        ++_Before;\r\n        return static_cast<_TVal>(_Before);\r\n    }\r\n\r\n    _TVal operator--(int) noexcept {\r\n        return static_cast<_TVal>(_InterlockedExchangeAdd8(_STD _Atomic_address_as<char>(this->_Storage), -1));\r\n    }\r\n\r\n    _TVal operator--() noexcept {\r\n        unsigned char _Before =\r\n            static_cast<unsigned char>(_InterlockedExchangeAdd8(_STD _Atomic_address_as<char>(this->_Storage), -1));\r\n        --_Before;\r\n        return static_cast<_TVal>(_Before);\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_integral<_Ty, 2> : _Atomic_storage<_Ty> { // atomic integral operations using 2-byte intrinsics\r\n    using _Base = _Atomic_storage<_Ty>;\r\n    using typename _Base::_TVal;\r\n\r\n    using _Base::_Base;\r\n\r\n    _TVal fetch_add(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        short _Result;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedExchangeAdd16,\r\n            _STD _Atomic_address_as<short>(this->_Storage), static_cast<short>(_Operand));\r\n        return static_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal fetch_and(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        short _Result;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedAnd16,\r\n            _STD _Atomic_address_as<short>(this->_Storage), static_cast<short>(_Operand));\r\n        return static_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal fetch_or(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        short _Result;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedOr16,\r\n            _STD _Atomic_address_as<short>(this->_Storage), static_cast<short>(_Operand));\r\n        return static_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal fetch_xor(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        short _Result;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedXor16,\r\n            _STD _Atomic_address_as<short>(this->_Storage), static_cast<short>(_Operand));\r\n        return static_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal operator++(int) noexcept {\r\n        unsigned short _After =\r\n            static_cast<unsigned short>(_InterlockedIncrement16(_STD _Atomic_address_as<short>(this->_Storage)));\r\n        --_After;\r\n        return static_cast<_TVal>(_After);\r\n    }\r\n\r\n    _TVal operator++() noexcept {\r\n        return static_cast<_TVal>(_InterlockedIncrement16(_STD _Atomic_address_as<short>(this->_Storage)));\r\n    }\r\n\r\n    _TVal operator--(int) noexcept {\r\n        unsigned short _After =\r\n            static_cast<unsigned short>(_InterlockedDecrement16(_STD _Atomic_address_as<short>(this->_Storage)));\r\n        ++_After;\r\n        return static_cast<_TVal>(_After);\r\n    }\r\n\r\n    _TVal operator--() noexcept {\r\n        return static_cast<_TVal>(_InterlockedDecrement16(_STD _Atomic_address_as<short>(this->_Storage)));\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_integral<_Ty, 4> : _Atomic_storage<_Ty> { // atomic integral operations using 4-byte intrinsics\r\n    using _Base = _Atomic_storage<_Ty>;\r\n    using typename _Base::_TVal;\r\n\r\n    using _Base::_Base;\r\n\r\n    _TVal fetch_add(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        long _Result;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedExchangeAdd,\r\n            _STD _Atomic_address_as<long>(this->_Storage), static_cast<long>(_Operand));\r\n        return static_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal fetch_and(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        long _Result;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedAnd,\r\n            _STD _Atomic_address_as<long>(this->_Storage), static_cast<long>(_Operand));\r\n        return static_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal fetch_or(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        long _Result;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedOr,\r\n            _STD _Atomic_address_as<long>(this->_Storage), static_cast<long>(_Operand));\r\n        return static_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal fetch_xor(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        long _Result;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedXor,\r\n            _STD _Atomic_address_as<long>(this->_Storage), static_cast<long>(_Operand));\r\n        return static_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal operator++(int) noexcept {\r\n        unsigned long _After =\r\n            static_cast<unsigned long>(_InterlockedIncrement(_STD _Atomic_address_as<long>(this->_Storage)));\r\n        --_After;\r\n        return static_cast<_TVal>(_After);\r\n    }\r\n\r\n    _TVal operator++() noexcept {\r\n        return static_cast<_TVal>(_InterlockedIncrement(_STD _Atomic_address_as<long>(this->_Storage)));\r\n    }\r\n\r\n    _TVal operator--(int) noexcept {\r\n        unsigned long _After =\r\n            static_cast<unsigned long>(_InterlockedDecrement(_STD _Atomic_address_as<long>(this->_Storage)));\r\n        ++_After;\r\n        return static_cast<_TVal>(_After);\r\n    }\r\n\r\n    _TVal operator--() noexcept {\r\n        return static_cast<_TVal>(_InterlockedDecrement(_STD _Atomic_address_as<long>(this->_Storage)));\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_integral<_Ty, 8> : _Atomic_storage<_Ty> { // atomic integral operations using 8-byte intrinsics\r\n    using _Base = _Atomic_storage<_Ty>;\r\n    using typename _Base::_TVal;\r\n\r\n    using _Base::_Base;\r\n\r\n#ifdef _M_IX86\r\n    _TVal fetch_add(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        // effectively sequential consistency\r\n        _TVal _Temp{this->load()};\r\n        while (!this->compare_exchange_strong(_Temp, _Temp + _Operand, _Order)) { // keep trying\r\n        }\r\n\r\n        return _Temp;\r\n    }\r\n\r\n    _TVal fetch_and(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        // effectively sequential consistency\r\n        _TVal _Temp{this->load()};\r\n        while (!this->compare_exchange_strong(_Temp, _Temp & _Operand, _Order)) { // keep trying\r\n        }\r\n\r\n        return _Temp;\r\n    }\r\n\r\n    _TVal fetch_or(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        // effectively sequential consistency\r\n        _TVal _Temp{this->load()};\r\n        while (!this->compare_exchange_strong(_Temp, _Temp | _Operand, _Order)) { // keep trying\r\n        }\r\n\r\n        return _Temp;\r\n    }\r\n\r\n    _TVal fetch_xor(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        // effectively sequential consistency\r\n        _TVal _Temp{this->load()};\r\n        while (!this->compare_exchange_strong(_Temp, _Temp ^ _Operand, _Order)) { // keep trying\r\n        }\r\n\r\n        return _Temp;\r\n    }\r\n\r\n    _TVal operator++(int) noexcept {\r\n        return fetch_add(static_cast<_TVal>(1));\r\n    }\r\n\r\n    _TVal operator++() noexcept {\r\n        return fetch_add(static_cast<_TVal>(1)) + static_cast<_TVal>(1);\r\n    }\r\n\r\n    _TVal operator--(int) noexcept {\r\n        return fetch_add(static_cast<_TVal>(-1));\r\n    }\r\n\r\n    _TVal operator--() noexcept {\r\n        return fetch_add(static_cast<_TVal>(-1)) - static_cast<_TVal>(1);\r\n    }\r\n\r\n#else // ^^^ defined(_M_IX86) / !defined(_M_IX86) vvv\r\n    _TVal fetch_add(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        long long _Result;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedExchangeAdd64,\r\n            _STD _Atomic_address_as<long long>(this->_Storage), static_cast<long long>(_Operand));\r\n        return static_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal fetch_and(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        long long _Result;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedAnd64,\r\n            _STD _Atomic_address_as<long long>(this->_Storage), static_cast<long long>(_Operand));\r\n        return static_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal fetch_or(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        long long _Result;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedOr64,\r\n            _STD _Atomic_address_as<long long>(this->_Storage), static_cast<long long>(_Operand));\r\n        return static_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal fetch_xor(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        long long _Result;\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedXor64,\r\n            _STD _Atomic_address_as<long long>(this->_Storage), static_cast<long long>(_Operand));\r\n        return static_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal operator++(int) noexcept {\r\n        unsigned long long _After = static_cast<unsigned long long>(\r\n            _InterlockedIncrement64(_STD _Atomic_address_as<long long>(this->_Storage)));\r\n        --_After;\r\n        return static_cast<_TVal>(_After);\r\n    }\r\n\r\n    _TVal operator++() noexcept {\r\n        return static_cast<_TVal>(_InterlockedIncrement64(_STD _Atomic_address_as<long long>(this->_Storage)));\r\n    }\r\n\r\n    _TVal operator--(int) noexcept {\r\n        unsigned long long _After = static_cast<unsigned long long>(\r\n            _InterlockedDecrement64(_STD _Atomic_address_as<long long>(this->_Storage)));\r\n        ++_After;\r\n        return static_cast<_TVal>(_After);\r\n    }\r\n\r\n    _TVal operator--() noexcept {\r\n        return static_cast<_TVal>(_InterlockedDecrement64(_STD _Atomic_address_as<long long>(this->_Storage)));\r\n    }\r\n#endif // ^^^ !defined(_M_IX86) ^^^\r\n};\r\n\r\n#if 1 // TRANSITION, ABI\r\ntemplate <size_t _TypeSize>\r\nconstexpr bool _Is_always_lock_free = _TypeSize <= 8 && (_TypeSize & (_TypeSize - 1)) == 0;\r\n#else // ^^^ don't break ABI / break ABI vvv\r\ntemplate <size_t _TypeSize>\r\nconstexpr bool _Is_always_lock_free = _TypeSize <= 2 * sizeof(void*);\r\n#endif // ^^^ break ABI ^^^\r\n\r\ntemplate <class _Ty, bool _Is_lock_free = _Is_always_lock_free<sizeof(_Ty)>>\r\nconstexpr bool _Deprecate_non_lock_free_volatile = true;\r\n\r\ntemplate <class _Ty>\r\n_CXX20_DEPRECATE_VOLATILE constexpr bool _Deprecate_non_lock_free_volatile<_Ty, false> = true;\r\n\r\n#if _HAS_CXX20\r\n#define _REQUIRES_CLAUSE(...) requires (__VA_ARGS__)\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n#define _REQUIRES_CLAUSE(...)\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_integral_facade : _Atomic_integral<_Ty> {\r\n    // provides operator overloads and other support for atomic integral specializations\r\n    _STL_INTERNAL_STATIC_ASSERT(!is_const_v<_Ty>);\r\n    _STL_INTERNAL_STATIC_ASSERT(!is_volatile_v<_Ty>);\r\n\r\n    using _Base           = _Atomic_integral<_Ty>;\r\n    using difference_type = _Ty;\r\n\r\n    using _Base::_Base;\r\n\r\n    // _Deprecate_non_lock_free_volatile is unnecessary here.\r\n\r\n    // note: const_cast-ing away volatile is safe because all our intrinsics add volatile back on.\r\n    // We make the primary functions non-volatile for better debug codegen, as non-volatile atomics\r\n    // are far more common than volatile ones.\r\n    using _Base::fetch_add;\r\n    _Ty fetch_add(const _Ty _Operand) volatile noexcept {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_add(_Operand);\r\n    }\r\n\r\n    _Ty fetch_add(const _Ty _Operand, const memory_order _Order) volatile noexcept {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_add(_Operand, _Order);\r\n    }\r\n\r\n    _NODISCARD static _Ty _Negate(const _Ty _Value) noexcept { // returns two's complement negated value of _Value\r\n        return static_cast<_Ty>(0U - static_cast<make_unsigned_t<_Ty>>(_Value));\r\n    }\r\n\r\n    _Ty fetch_sub(const _Ty _Operand) noexcept {\r\n        return fetch_add(_Negate(_Operand));\r\n    }\r\n\r\n    _Ty fetch_sub(const _Ty _Operand) volatile noexcept {\r\n        return fetch_add(_Negate(_Operand));\r\n    }\r\n\r\n    _Ty fetch_sub(const _Ty _Operand, const memory_order _Order) noexcept {\r\n        return fetch_add(_Negate(_Operand), _Order);\r\n    }\r\n\r\n    _Ty fetch_sub(const _Ty _Operand, const memory_order _Order) volatile noexcept {\r\n        return fetch_add(_Negate(_Operand), _Order);\r\n    }\r\n\r\n    using _Base::fetch_and;\r\n    _Ty fetch_and(const _Ty _Operand) volatile noexcept {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_and(_Operand);\r\n    }\r\n\r\n    _Ty fetch_and(const _Ty _Operand, const memory_order _Order) volatile noexcept {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_and(_Operand, _Order);\r\n    }\r\n\r\n    using _Base::fetch_or;\r\n    _Ty fetch_or(const _Ty _Operand) volatile noexcept {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_or(_Operand);\r\n    }\r\n\r\n    _Ty fetch_or(const _Ty _Operand, const memory_order _Order) volatile noexcept {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_or(_Operand, _Order);\r\n    }\r\n\r\n    using _Base::fetch_xor;\r\n    _Ty fetch_xor(const _Ty _Operand) volatile noexcept {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_xor(_Operand);\r\n    }\r\n\r\n    _Ty fetch_xor(const _Ty _Operand, const memory_order _Order) volatile noexcept {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_xor(_Operand, _Order);\r\n    }\r\n\r\n    using _Base::operator++;\r\n    _Ty operator++(int) volatile noexcept {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::operator++(0);\r\n    }\r\n\r\n    _Ty operator++() volatile noexcept {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::operator++();\r\n    }\r\n\r\n    using _Base::operator--;\r\n    _Ty operator--(int) volatile noexcept {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::operator--(0);\r\n    }\r\n\r\n    _Ty operator--() volatile noexcept {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::operator--();\r\n    }\r\n\r\n    _Ty operator+=(const _Ty _Operand) noexcept {\r\n        return static_cast<_Ty>(this->_Base::fetch_add(_Operand) + _Operand);\r\n    }\r\n\r\n    _Ty operator+=(const _Ty _Operand) volatile noexcept {\r\n        return static_cast<_Ty>(const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_add(_Operand) + _Operand);\r\n    }\r\n\r\n    _Ty operator-=(const _Ty _Operand) noexcept {\r\n        return static_cast<_Ty>(fetch_sub(_Operand) - _Operand);\r\n    }\r\n\r\n    _Ty operator-=(const _Ty _Operand) volatile noexcept {\r\n        return static_cast<_Ty>(const_cast<_Atomic_integral_facade*>(this)->fetch_sub(_Operand) - _Operand);\r\n    }\r\n\r\n    _Ty operator&=(const _Ty _Operand) noexcept {\r\n        return static_cast<_Ty>(this->_Base::fetch_and(_Operand) & _Operand);\r\n    }\r\n\r\n    _Ty operator&=(const _Ty _Operand) volatile noexcept {\r\n        return static_cast<_Ty>(const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_and(_Operand) & _Operand);\r\n    }\r\n\r\n    _Ty operator|=(const _Ty _Operand) noexcept {\r\n        return static_cast<_Ty>(this->_Base::fetch_or(_Operand) | _Operand);\r\n    }\r\n\r\n    _Ty operator|=(const _Ty _Operand) volatile noexcept {\r\n        return static_cast<_Ty>(const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_or(_Operand) | _Operand);\r\n    }\r\n\r\n    _Ty operator^=(const _Ty _Operand) noexcept {\r\n        return static_cast<_Ty>(this->_Base::fetch_xor(_Operand) ^ _Operand);\r\n    }\r\n\r\n    _Ty operator^=(const _Ty _Operand) volatile noexcept {\r\n        return static_cast<_Ty>(const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_xor(_Operand) ^ _Operand);\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_integral_facade<_Ty&> : _Atomic_integral<_Ty&> {\r\n    // provides operator overloads and other support for atomic integral specializations\r\n    using _Base           = _Atomic_integral<_Ty&>;\r\n    using difference_type = remove_cv_t<_Ty>;\r\n    using typename _Base::_TVal;\r\n\r\n    using _Base::_Base;\r\n\r\n    _NODISCARD static _TVal _Negate(const _TVal _Value) noexcept { // returns two's complement negated value of _Value\r\n        return static_cast<_TVal>(0U - static_cast<make_unsigned_t<_TVal>>(_Value));\r\n    }\r\n\r\n    _TVal fetch_add(const _TVal _Operand) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_add(_Operand);\r\n    }\r\n\r\n    _TVal fetch_add(const _TVal _Operand, const memory_order _Order) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_add(_Operand, _Order);\r\n    }\r\n\r\n    _TVal fetch_sub(const _TVal _Operand) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return fetch_add(_Negate(_Operand));\r\n    }\r\n\r\n    _TVal fetch_sub(const _TVal _Operand, const memory_order _Order) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return fetch_add(_Negate(_Operand), _Order);\r\n    }\r\n\r\n    _TVal operator++(int) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::operator++(0);\r\n    }\r\n\r\n    _TVal operator++() const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::operator++();\r\n    }\r\n\r\n    _TVal operator--(int) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::operator--(0);\r\n    }\r\n\r\n    _TVal operator--() const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::operator--();\r\n    }\r\n\r\n    _TVal operator+=(const _TVal _Operand) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return static_cast<_TVal>(fetch_add(_Operand) + _Operand);\r\n    }\r\n\r\n    _TVal operator-=(const _TVal _Operand) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return static_cast<_TVal>(fetch_sub(_Operand) - _Operand);\r\n    }\r\n\r\n    _TVal fetch_and(const _TVal _Operand) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_and(_Operand);\r\n    }\r\n\r\n    _TVal fetch_and(const _TVal _Operand, const memory_order _Order) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_and(_Operand, _Order);\r\n    }\r\n\r\n    _TVal fetch_or(const _TVal _Operand) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_or(_Operand);\r\n    }\r\n\r\n    _TVal fetch_or(const _TVal _Operand, const memory_order _Order) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_or(_Operand, _Order);\r\n    }\r\n\r\n    _TVal fetch_xor(const _TVal _Operand) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_xor(_Operand);\r\n    }\r\n\r\n    _TVal fetch_xor(const _TVal _Operand, const memory_order _Order) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return const_cast<_Atomic_integral_facade*>(this)->_Base::fetch_xor(_Operand, _Order);\r\n    }\r\n\r\n    _TVal operator&=(const _TVal _Operand) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return static_cast<_TVal>(fetch_and(_Operand) & _Operand);\r\n    }\r\n\r\n    _TVal operator|=(const _TVal _Operand) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return static_cast<_TVal>(fetch_or(_Operand) | _Operand);\r\n    }\r\n\r\n    _TVal operator^=(const _TVal _Operand) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return static_cast<_TVal>(fetch_xor(_Operand) ^ _Operand);\r\n    }\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty>\r\nstruct _Atomic_floating : _Atomic_storage<_Ty> {\r\n    // provides atomic floating-point operations\r\n    _STL_INTERNAL_STATIC_ASSERT(!is_const_v<_Ty>);\r\n    _STL_INTERNAL_STATIC_ASSERT(!is_volatile_v<_Ty>);\r\n\r\n    using _Base           = _Atomic_storage<_Ty>;\r\n    using difference_type = _Ty;\r\n\r\n    using _Base::_Base;\r\n\r\n    _Ty fetch_add(const _Ty _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        _Ty _Temp{this->load(memory_order_relaxed)};\r\n        while (!this->compare_exchange_strong(_Temp, _Temp + _Operand, _Order)) { // keep trying\r\n        }\r\n\r\n        return _Temp;\r\n    }\r\n\r\n    // _Deprecate_non_lock_free_volatile is unnecessary here.\r\n\r\n    // note: const_cast-ing away volatile is safe because all our intrinsics add volatile back on.\r\n    // We make the primary functions non-volatile for better debug codegen, as non-volatile atomics\r\n    // are far more common than volatile ones.\r\n    _Ty fetch_add(const _Ty _Operand, const memory_order _Order = memory_order_seq_cst) volatile noexcept {\r\n        return const_cast<_Atomic_floating*>(this)->fetch_add(_Operand, _Order);\r\n    }\r\n\r\n    _Ty fetch_sub(const _Ty _Operand, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        _Ty _Temp{this->load(memory_order_relaxed)};\r\n        while (!this->compare_exchange_strong(_Temp, _Temp - _Operand, _Order)) { // keep trying\r\n        }\r\n\r\n        return _Temp;\r\n    }\r\n\r\n    _Ty fetch_sub(const _Ty _Operand, const memory_order _Order = memory_order_seq_cst) volatile noexcept {\r\n        return const_cast<_Atomic_floating*>(this)->fetch_sub(_Operand, _Order);\r\n    }\r\n\r\n    _Ty operator+=(const _Ty _Operand) noexcept {\r\n        return fetch_add(_Operand) + _Operand;\r\n    }\r\n\r\n    _Ty operator+=(const _Ty _Operand) volatile noexcept {\r\n        return const_cast<_Atomic_floating*>(this)->fetch_add(_Operand) + _Operand;\r\n    }\r\n\r\n    _Ty operator-=(const _Ty _Operand) noexcept {\r\n        return fetch_sub(_Operand) - _Operand;\r\n    }\r\n\r\n    _Ty operator-=(const _Ty _Operand) volatile noexcept {\r\n        return const_cast<_Atomic_floating*>(this)->fetch_sub(_Operand) - _Operand;\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_floating<_Ty&> : _Atomic_storage<_Ty&> {\r\n    // provides atomic floating-point operations\r\n    using _Base           = _Atomic_storage<_Ty&>;\r\n    using difference_type = remove_cv_t<_Ty>;\r\n    using typename _Base::_TVal;\r\n\r\n    using _Base::_Base;\r\n\r\n    _TVal fetch_add(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        _TVal _Temp{this->load(memory_order_relaxed)};\r\n        while (!const_cast<_Atomic_floating*>(this)->_Base::compare_exchange_strong(\r\n            _Temp, _Temp + _Operand, _Order)) { // keep trying\r\n        }\r\n\r\n        return _Temp;\r\n    }\r\n\r\n    _TVal fetch_sub(const _TVal _Operand, const memory_order _Order = memory_order_seq_cst) const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        _TVal _Temp{this->load(memory_order_relaxed)};\r\n        while (!const_cast<_Atomic_floating*>(this)->_Base::compare_exchange_strong(\r\n            _Temp, _Temp - _Operand, _Order)) { // keep trying\r\n        }\r\n\r\n        return _Temp;\r\n    }\r\n\r\n    _TVal operator+=(const _TVal _Operand) const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        return fetch_add(_Operand) + _Operand;\r\n    }\r\n\r\n    _TVal operator-=(const _TVal _Operand) const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        return fetch_sub(_Operand) - _Operand;\r\n    }\r\n};\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_pointer : _Atomic_storage<_Ty> {\r\n    using _Base           = _Atomic_storage<_Ty>;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    using _Base::_Base;\r\n\r\n    _Ty fetch_add(const ptrdiff_t _Diff, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        const ptrdiff_t _Shift_bytes =\r\n            static_cast<ptrdiff_t>(static_cast<size_t>(_Diff) * sizeof(remove_pointer_t<_Ty>));\r\n        ptrdiff_t _Result;\r\n#if defined(_M_IX86)\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedExchangeAdd,\r\n            _STD _Atomic_address_as<long>(this->_Storage), _Shift_bytes);\r\n#else // ^^^ 32 bits / 64 bits vvv\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedExchangeAdd64,\r\n            _STD _Atomic_address_as<long long>(this->_Storage), _Shift_bytes);\r\n#endif // ^^^ 64 bits ^^^\r\n        return reinterpret_cast<_Ty>(_Result);\r\n    }\r\n\r\n    // _Deprecate_non_lock_free_volatile is unnecessary here.\r\n\r\n    _Ty fetch_add(const ptrdiff_t _Diff) volatile noexcept {\r\n        return const_cast<_Atomic_pointer*>(this)->fetch_add(_Diff);\r\n    }\r\n\r\n    _Ty fetch_add(const ptrdiff_t _Diff, const memory_order _Order) volatile noexcept {\r\n        return const_cast<_Atomic_pointer*>(this)->fetch_add(_Diff, _Order);\r\n    }\r\n\r\n    _Ty fetch_sub(const ptrdiff_t _Diff) volatile noexcept {\r\n        return fetch_add(static_cast<ptrdiff_t>(0 - static_cast<size_t>(_Diff)));\r\n    }\r\n\r\n    _Ty fetch_sub(const ptrdiff_t _Diff) noexcept {\r\n        return fetch_add(static_cast<ptrdiff_t>(0 - static_cast<size_t>(_Diff)));\r\n    }\r\n\r\n    _Ty fetch_sub(const ptrdiff_t _Diff, const memory_order _Order) volatile noexcept {\r\n        return fetch_add(static_cast<ptrdiff_t>(0 - static_cast<size_t>(_Diff)), _Order);\r\n    }\r\n\r\n    _Ty fetch_sub(const ptrdiff_t _Diff, const memory_order _Order) noexcept {\r\n        return fetch_add(static_cast<ptrdiff_t>(0 - static_cast<size_t>(_Diff)), _Order);\r\n    }\r\n\r\n    _Ty operator++(int) volatile noexcept {\r\n        return fetch_add(1);\r\n    }\r\n\r\n    _Ty operator++(int) noexcept {\r\n        return fetch_add(1);\r\n    }\r\n\r\n    _Ty operator++() volatile noexcept {\r\n        return fetch_add(1) + 1;\r\n    }\r\n\r\n    _Ty operator++() noexcept {\r\n        return fetch_add(1) + 1;\r\n    }\r\n\r\n    _Ty operator--(int) volatile noexcept {\r\n        return fetch_add(-1);\r\n    }\r\n\r\n    _Ty operator--(int) noexcept {\r\n        return fetch_add(-1);\r\n    }\r\n\r\n    _Ty operator--() volatile noexcept {\r\n        return fetch_add(-1) - 1;\r\n    }\r\n\r\n    _Ty operator--() noexcept {\r\n        return fetch_add(-1) - 1;\r\n    }\r\n\r\n    _Ty operator+=(const ptrdiff_t _Diff) volatile noexcept {\r\n        return fetch_add(_Diff) + _Diff;\r\n    }\r\n\r\n    _Ty operator+=(const ptrdiff_t _Diff) noexcept {\r\n        return fetch_add(_Diff) + _Diff;\r\n    }\r\n\r\n    _Ty operator-=(const ptrdiff_t _Diff) volatile noexcept {\r\n        return fetch_add(static_cast<ptrdiff_t>(0 - static_cast<size_t>(_Diff))) - _Diff;\r\n    }\r\n\r\n    _Ty operator-=(const ptrdiff_t _Diff) noexcept {\r\n        return fetch_add(static_cast<ptrdiff_t>(0 - static_cast<size_t>(_Diff))) - _Diff;\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_pointer<_Ty&> : _Atomic_storage<_Ty&> {\r\n    using _Base           = _Atomic_storage<_Ty&>;\r\n    using difference_type = ptrdiff_t;\r\n    using typename _Base::_TVal;\r\n\r\n    using _Base::_Base;\r\n\r\n    _TVal fetch_add(const ptrdiff_t _Diff, const memory_order _Order = memory_order_seq_cst) const noexcept\r\n        _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        const ptrdiff_t _Shift_bytes =\r\n            static_cast<ptrdiff_t>(static_cast<size_t>(_Diff) * sizeof(remove_pointer_t<_Ty>));\r\n        ptrdiff_t _Result;\r\n#if defined(_M_IX86)\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedExchangeAdd,\r\n            _STD _Atomic_address_as<long>(this->_Storage), _Shift_bytes);\r\n#else // ^^^ 32 bits / 64 bits vvv\r\n        _ATOMIC_CHOOSE_INTRINSIC(static_cast<unsigned int>(_Order), _Result, _InterlockedExchangeAdd64,\r\n            _STD _Atomic_address_as<long long>(this->_Storage), _Shift_bytes);\r\n#endif // ^^^ 64 bits ^^^\r\n        return reinterpret_cast<_TVal>(_Result);\r\n    }\r\n\r\n    _TVal fetch_sub(const ptrdiff_t _Diff) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return fetch_add(static_cast<ptrdiff_t>(0 - static_cast<size_t>(_Diff)));\r\n    }\r\n\r\n    _TVal fetch_sub(const ptrdiff_t _Diff, const memory_order _Order) const noexcept\r\n        _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return fetch_add(static_cast<ptrdiff_t>(0 - static_cast<size_t>(_Diff)), _Order);\r\n    }\r\n\r\n    _TVal operator++(int) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return fetch_add(1);\r\n    }\r\n\r\n    _TVal operator++() const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return fetch_add(1) + 1;\r\n    }\r\n\r\n    _TVal operator--(int) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return fetch_add(-1);\r\n    }\r\n\r\n    _TVal operator--() const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return fetch_add(-1) - 1;\r\n    }\r\n\r\n    _TVal operator+=(const ptrdiff_t _Diff) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return fetch_add(_Diff) + _Diff;\r\n    }\r\n\r\n    _TVal operator-=(const ptrdiff_t _Diff) const noexcept _REQUIRES_CLAUSE(!is_const_v<_Ty>) {\r\n        return fetch_add(static_cast<ptrdiff_t>(0 - static_cast<size_t>(_Diff))) - _Diff;\r\n    }\r\n};\r\n\r\n#undef _REQUIRES_CLAUSE\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_nonobject_pointer : _Atomic_storage<_Ty> {\r\n    using _Base           = _Atomic_storage<_Ty>;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    using _Base::_Base;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_nonobject_pointer<_Ty&> : _Atomic_storage<_Ty&> {\r\n    using _Base = _Atomic_storage<_Ty&>;\r\n\r\n    using _Base::_Base;\r\n};\r\n\r\n#define ATOMIC_VAR_INIT(_Value) {_Value}\r\n\r\ntemplate <class _TVal, class _Ty = _TVal>\r\nusing _Choose_atomic_base2_t =\r\n    typename _Select<is_integral_v<_TVal> && !is_same_v<bool, remove_cv_t<_TVal>>>::template _Apply<\r\n        _Atomic_integral_facade<_Ty>, typename _Select<is_pointer_v<_TVal>>::template _Apply<\r\n                                          typename _Select<is_object_v<remove_pointer_t<_TVal>>>::template _Apply<\r\n                                              _Atomic_pointer<_Ty>, _Atomic_nonobject_pointer<_Ty>>,\r\n                                          _Atomic_storage<_Ty>>>;\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _TVal, class _Ty = _TVal>\r\nusing _Choose_atomic_base_t =\r\n    _Select<is_floating_point_v<_TVal>>::template _Apply<_Atomic_floating<_Ty>, _Choose_atomic_base2_t<_TVal, _Ty>>;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _TVal, class _Ty = _TVal>\r\nusing _Choose_atomic_base_t = _Choose_atomic_base2_t<_TVal, _Ty>;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct atomic : _Choose_atomic_base_t<_Ty> { // atomic value\r\nprivate:\r\n    using _Base = _Choose_atomic_base_t<_Ty>;\r\n\r\npublic:\r\n    static_assert(is_trivially_copyable_v<_Ty>, \"atomic<T> requires T to be trivially copyable.\");\r\n    static_assert(is_copy_constructible_v<_Ty>, \"atomic<T> requires T to be copy constructible.\");\r\n    static_assert(is_move_constructible_v<_Ty>, \"atomic<T> requires T to be move constructible.\");\r\n    static_assert(is_copy_assignable_v<_Ty>, \"atomic<T> requires T to be copy assignable.\");\r\n    static_assert(is_move_assignable_v<_Ty>, \"atomic<T> requires T to be move assignable.\");\r\n    static_assert(!is_const_v<_Ty>, \"atomic<T> requires T to be non-const.\");\r\n    static_assert(!is_volatile_v<_Ty>, \"atomic<T> requires T to be non-volatile.\");\r\n\r\n    using value_type = _Ty;\r\n\r\n    template <class _Uty = _Ty, enable_if_t<is_default_constructible_v<_Uty>, int> = 0>\r\n    constexpr atomic() noexcept(is_nothrow_default_constructible_v<_Ty>) : _Base() {}\r\n\r\n    /* implicit */ constexpr atomic(const _Ty _Value) noexcept : _Base(_Value) {}\r\n\r\n    atomic(const atomic&)                     = delete;\r\n    atomic& operator=(const atomic&)          = delete;\r\n    atomic& operator=(const atomic&) volatile = delete;\r\n\r\n#if _HAS_CXX17\r\n    static constexpr bool is_always_lock_free = _Is_always_lock_free<sizeof(_Ty)>;\r\n#endif // _HAS_CXX17\r\n\r\n    _NODISCARD bool is_lock_free() const volatile noexcept {\r\n        return _Is_always_lock_free<sizeof(_Ty)>;\r\n    }\r\n\r\n    _NODISCARD bool is_lock_free() const noexcept {\r\n        return static_cast<const volatile atomic*>(this)->is_lock_free();\r\n    }\r\n\r\n    _Ty operator=(const _Ty _Value) volatile noexcept {\r\n        static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n        this->store(_Value);\r\n        return _Value;\r\n    }\r\n\r\n    _Ty operator=(const _Ty _Value) noexcept {\r\n        this->store(_Value);\r\n        return _Value;\r\n    }\r\n\r\n    // For the following, we do the real implementation in the non-volatile function, and const_cast\r\n    // to call the non-volatile function in the volatile one. This is safe because all of the\r\n    // non-volatile functions reapply volatile, as all our intrinsics accept only volatile T *.\r\n    // We expect most atomic<T>s to be non-volatile, so making the real implementations\r\n    // non-volatile should result in better debug codegen.\r\n    using _Base::store;\r\n    void store(const _Ty _Value) volatile noexcept {\r\n        static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n        const_cast<atomic*>(this)->_Base::store(_Value);\r\n    }\r\n\r\n    void store(const _Ty _Value, const memory_order _Order) volatile noexcept {\r\n        static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n        const_cast<atomic*>(this)->_Base::store(_Value, _Order);\r\n    }\r\n\r\n    using _Base::load;\r\n    _NODISCARD _Ty load() const volatile noexcept {\r\n        static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n        return const_cast<const atomic*>(this)->_Base::load();\r\n    }\r\n\r\n    _NODISCARD _Ty load(const memory_order _Order) const volatile noexcept {\r\n        static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n        return const_cast<const atomic*>(this)->_Base::load(_Order);\r\n    }\r\n\r\n    using _Base::exchange;\r\n    _Ty exchange(const _Ty _Value) volatile noexcept {\r\n        static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n        return const_cast<atomic*>(this)->_Base::exchange(_Value);\r\n    }\r\n\r\n    _Ty exchange(const _Ty _Value, const memory_order _Order) volatile noexcept {\r\n        static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n        return const_cast<atomic*>(this)->_Base::exchange(_Value, _Order);\r\n    }\r\n\r\n    using _Base::compare_exchange_strong;\r\n    bool compare_exchange_strong(_Ty& _Expected, const _Ty _Desired) volatile noexcept {\r\n        static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n        return const_cast<atomic*>(this)->_Base::compare_exchange_strong(_Expected, _Desired);\r\n    }\r\n\r\n    bool compare_exchange_strong(_Ty& _Expected, const _Ty _Desired, const memory_order _Order) volatile noexcept {\r\n        static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n        return const_cast<atomic*>(this)->_Base::compare_exchange_strong(_Expected, _Desired, _Order);\r\n    }\r\n\r\n    bool compare_exchange_strong(_Ty& _Expected, const _Ty _Desired, const memory_order _Success,\r\n        const memory_order _Failure) volatile noexcept {\r\n        static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n        return this->compare_exchange_strong(_Expected, _Desired, _Combine_cas_memory_orders(_Success, _Failure));\r\n    }\r\n\r\n    bool compare_exchange_strong(\r\n        _Ty& _Expected, const _Ty _Desired, const memory_order _Success, const memory_order _Failure) noexcept {\r\n        return this->compare_exchange_strong(_Expected, _Desired, _Combine_cas_memory_orders(_Success, _Failure));\r\n    }\r\n\r\n    bool compare_exchange_weak(_Ty& _Expected, const _Ty _Desired) volatile noexcept {\r\n        // we have no weak CAS intrinsics, even on ARM64, so fall back to strong\r\n        static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n        return this->compare_exchange_strong(_Expected, _Desired);\r\n    }\r\n\r\n    bool compare_exchange_weak(_Ty& _Expected, const _Ty _Desired) noexcept {\r\n        return this->compare_exchange_strong(_Expected, _Desired);\r\n    }\r\n\r\n    bool compare_exchange_weak(_Ty& _Expected, const _Ty _Desired, const memory_order _Order) volatile noexcept {\r\n        static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n        return this->compare_exchange_strong(_Expected, _Desired, _Order);\r\n    }\r\n\r\n    bool compare_exchange_weak(_Ty& _Expected, const _Ty _Desired, const memory_order _Order) noexcept {\r\n        return this->compare_exchange_strong(_Expected, _Desired, _Order);\r\n    }\r\n\r\n    bool compare_exchange_weak(_Ty& _Expected, const _Ty _Desired, const memory_order _Success,\r\n        const memory_order _Failure) volatile noexcept {\r\n        static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n        return this->compare_exchange_strong(_Expected, _Desired, _Combine_cas_memory_orders(_Success, _Failure));\r\n    }\r\n\r\n    bool compare_exchange_weak(\r\n        _Ty& _Expected, const _Ty _Desired, const memory_order _Success, const memory_order _Failure) noexcept {\r\n        return this->compare_exchange_strong(_Expected, _Desired, _Combine_cas_memory_orders(_Success, _Failure));\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    using _Base::wait;\r\n    void wait(const _Ty _Expected, const memory_order _Order = memory_order_seq_cst) const volatile noexcept {\r\n        const_cast<const atomic*>(this)->_Base::wait(_Expected, _Order);\r\n    }\r\n\r\n    using _Base::notify_one;\r\n    void notify_one() volatile noexcept {\r\n        const_cast<atomic*>(this)->_Base::notify_one();\r\n    }\r\n\r\n    using _Base::notify_all;\r\n    void notify_all() volatile noexcept {\r\n        const_cast<atomic*>(this)->_Base::notify_all();\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    operator _Ty() const volatile noexcept {\r\n        static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n        return this->load();\r\n    }\r\n\r\n    operator _Ty() const noexcept {\r\n        return this->load();\r\n    }\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Ty>\r\natomic(_Ty) -> atomic<_Ty>;\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty>\r\nstruct atomic_ref : _Choose_atomic_base_t<_Ty, _Ty&> { // atomic reference\r\nprivate:\r\n    using _Base = _Choose_atomic_base_t<_Ty, _Ty&>;\r\n\r\npublic:\r\n    static_assert(is_trivially_copyable_v<_Ty>, \"atomic_ref<T> requires T to be trivially copyable.\");\r\n\r\n    using value_type = remove_cv_t<_Ty>;\r\n\r\n    explicit atomic_ref(_Ty& _Value) noexcept /* strengthened */ : _Base(_Value) {\r\n        if constexpr (is_always_lock_free) {\r\n            _STL_ASSERT((reinterpret_cast<uintptr_t>(_STD addressof(_Value)) & (required_alignment - 1)) == 0,\r\n                \"atomic_ref underlying object is not aligned as required_alignment\");\r\n        } else {\r\n            this->_Init_spinlock_for_ref();\r\n        }\r\n    }\r\n\r\n    explicit atomic_ref(_Ty&&) = delete; // per LWG-4472\r\n\r\n    atomic_ref(const atomic_ref&) noexcept = default;\r\n\r\n    template <class _Uty>\r\n        requires is_convertible_v<_Uty (*)[], _Ty (*)[]>\r\n    atomic_ref(const atomic_ref<_Uty>& _Ref) noexcept : _Base(_Ref._Storage) {\r\n        if constexpr (!is_always_lock_free) {\r\n#if 1 // TRANSITION, ABI\r\n            this->_Spinlock = _Ref._Spinlock;\r\n#else // ^^^ don't break ABI / break ABI vvv\r\n            this->_Mutex = _Ref._Mutex;\r\n#endif // ^^^ break ABI ^^^\r\n        }\r\n    }\r\n\r\n    atomic_ref& operator=(const atomic_ref&) = delete;\r\n\r\n    static constexpr bool is_always_lock_free =\r\n        sizeof(_Ty) <= 2 * sizeof(void*) && (sizeof(_Ty) & (sizeof(_Ty) - 1)) == 0;\r\n\r\n    static constexpr size_t required_alignment = is_always_lock_free ? sizeof(_Ty) : alignof(_Ty);\r\n\r\n    static_assert(is_always_lock_free || !is_volatile_v<_Ty>,\r\n        \"atomic_ref<T> requires T to be non-volatile when it is not always lock-free.\");\r\n\r\n    _NODISCARD bool is_lock_free() const noexcept {\r\n        return is_always_lock_free;\r\n    }\r\n\r\n    void store(const value_type _Value) const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        const_cast<atomic_ref*>(this)->_Base::store(_Value);\r\n    }\r\n\r\n    void store(const value_type _Value, const memory_order _Order) const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        const_cast<atomic_ref*>(this)->_Base::store(_Value, _Order);\r\n    }\r\n\r\n    value_type operator=(const value_type _Value) const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        store(_Value);\r\n        return _Value;\r\n    }\r\n\r\n    value_type exchange(const value_type _Value) const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        return const_cast<atomic_ref*>(this)->_Base::exchange(_Value);\r\n    }\r\n\r\n    value_type exchange(const value_type _Value, const memory_order _Order) const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        return const_cast<atomic_ref*>(this)->_Base::exchange(_Value, _Order);\r\n    }\r\n\r\n    bool compare_exchange_strong(value_type& _Expected, const value_type _Desired) const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        return const_cast<atomic_ref*>(this)->_Base::compare_exchange_strong(_Expected, _Desired);\r\n    }\r\n\r\n    bool compare_exchange_strong(\r\n        value_type& _Expected, const value_type _Desired, const memory_order _Order) const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        return const_cast<atomic_ref*>(this)->_Base::compare_exchange_strong(_Expected, _Desired, _Order);\r\n    }\r\n\r\n    bool compare_exchange_strong(value_type& _Expected, const value_type _Desired, const memory_order _Success,\r\n        const memory_order _Failure) const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        return compare_exchange_strong(_Expected, _Desired, _Combine_cas_memory_orders(_Success, _Failure));\r\n    }\r\n\r\n    bool compare_exchange_weak(value_type& _Expected, const value_type _Desired) const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        return compare_exchange_strong(_Expected, _Desired);\r\n    }\r\n\r\n    bool compare_exchange_weak(\r\n        value_type& _Expected, const value_type _Desired, const memory_order _Order) const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        return compare_exchange_strong(_Expected, _Desired, _Order);\r\n    }\r\n\r\n    bool compare_exchange_weak(value_type& _Expected, const value_type _Desired, const memory_order _Success,\r\n        const memory_order _Failure) const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        return compare_exchange_strong(_Expected, _Desired, _Combine_cas_memory_orders(_Success, _Failure));\r\n    }\r\n\r\n    operator value_type() const noexcept {\r\n        return this->load();\r\n    }\r\n\r\n    void notify_one() const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        const_cast<atomic_ref*>(this)->_Base::notify_one();\r\n    }\r\n\r\n    void notify_all() const noexcept\r\n        requires (!is_const_v<_Ty>)\r\n    {\r\n        const_cast<atomic_ref*>(this)->_Base::notify_all();\r\n    }\r\n};\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD bool atomic_is_lock_free(const volatile atomic<_Ty>* _Mem) noexcept {\r\n    return _Mem->is_lock_free();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD bool atomic_is_lock_free(const atomic<_Ty>* _Mem) noexcept {\r\n    return _Mem->is_lock_free();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid atomic_store(volatile atomic<_Ty>* const _Mem, const _Identity_t<_Ty> _Value) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    _Mem->store(_Value);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid atomic_store(atomic<_Ty>* const _Mem, const _Identity_t<_Ty> _Value) noexcept {\r\n    _Mem->store(_Value);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid atomic_store_explicit(\r\n    volatile atomic<_Ty>* const _Mem, const _Identity_t<_Ty> _Value, const memory_order _Order) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    _Mem->store(_Value, _Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid atomic_store_explicit(atomic<_Ty>* const _Mem, const _Identity_t<_Ty> _Value, const memory_order _Order) noexcept {\r\n    _Mem->store(_Value, _Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_CXX20_DEPRECATE_ATOMIC_INIT void atomic_init(\r\n    volatile atomic<_Ty>* const _Mem, const typename atomic<_Ty>::value_type _Value) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    _STD atomic_store_explicit(_Mem, _Value, memory_order_relaxed);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_CXX20_DEPRECATE_ATOMIC_INIT void atomic_init(\r\n    atomic<_Ty>* const _Mem, const typename atomic<_Ty>::value_type _Value) noexcept {\r\n    _STD atomic_store_explicit(_Mem, _Value, memory_order_relaxed);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Ty atomic_load(const volatile atomic<_Ty>* const _Mem) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->load();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Ty atomic_load(const atomic<_Ty>* const _Mem) noexcept {\r\n    return _Mem->load();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Ty atomic_load_explicit(const volatile atomic<_Ty>* const _Mem, const memory_order _Order) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->load(_Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Ty atomic_load_explicit(const atomic<_Ty>* const _Mem, const memory_order _Order) noexcept {\r\n    return _Mem->load(_Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_exchange(volatile atomic<_Ty>* const _Mem, const _Identity_t<_Ty> _Value) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->exchange(_Value);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_exchange(atomic<_Ty>* const _Mem, const _Identity_t<_Ty> _Value) noexcept {\r\n    return _Mem->exchange(_Value);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_exchange_explicit(\r\n    volatile atomic<_Ty>* const _Mem, const _Identity_t<_Ty> _Value, const memory_order _Order) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->exchange(_Value, _Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_exchange_explicit(\r\n    atomic<_Ty>* const _Mem, const _Identity_t<_Ty> _Value, const memory_order _Order) noexcept {\r\n    return _Mem->exchange(_Value, _Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nbool atomic_compare_exchange_strong(\r\n    volatile atomic<_Ty>* const _Mem, _Identity_t<_Ty>* const _Expected, const _Identity_t<_Ty> _Desired) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->compare_exchange_strong(*_Expected, _Desired);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nbool atomic_compare_exchange_strong(\r\n    atomic<_Ty>* const _Mem, _Identity_t<_Ty>* const _Expected, const _Identity_t<_Ty> _Desired) noexcept {\r\n    return _Mem->compare_exchange_strong(*_Expected, _Desired);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nbool atomic_compare_exchange_strong_explicit(volatile atomic<_Ty>* const _Mem, _Identity_t<_Ty>* const _Expected,\r\n    const _Identity_t<_Ty> _Desired, const memory_order _Success, const memory_order _Failure) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->compare_exchange_strong(*_Expected, _Desired, _Combine_cas_memory_orders(_Success, _Failure));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nbool atomic_compare_exchange_strong_explicit(atomic<_Ty>* const _Mem, _Identity_t<_Ty>* const _Expected,\r\n    const _Identity_t<_Ty> _Desired, const memory_order _Success, const memory_order _Failure) noexcept {\r\n    return _Mem->compare_exchange_strong(*_Expected, _Desired, _Combine_cas_memory_orders(_Success, _Failure));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nbool atomic_compare_exchange_weak(\r\n    volatile atomic<_Ty>* const _Mem, _Identity_t<_Ty>* const _Expected, const _Identity_t<_Ty> _Desired) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->compare_exchange_strong(*_Expected, _Desired);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nbool atomic_compare_exchange_weak(\r\n    atomic<_Ty>* const _Mem, _Identity_t<_Ty>* const _Expected, const _Identity_t<_Ty> _Desired) noexcept {\r\n    return _Mem->compare_exchange_strong(*_Expected, _Desired);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nbool atomic_compare_exchange_weak_explicit(volatile atomic<_Ty>* const _Mem, _Identity_t<_Ty>* const _Expected,\r\n    const _Identity_t<_Ty> _Desired, const memory_order _Success, const memory_order _Failure) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->compare_exchange_strong(*_Expected, _Desired, _Combine_cas_memory_orders(_Success, _Failure));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nbool atomic_compare_exchange_weak_explicit(atomic<_Ty>* const _Mem, _Identity_t<_Ty>* const _Expected,\r\n    const _Identity_t<_Ty> _Desired, const memory_order _Success, const memory_order _Failure) noexcept {\r\n    return _Mem->compare_exchange_strong(*_Expected, _Desired, _Combine_cas_memory_orders(_Success, _Failure));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_add(volatile atomic<_Ty>* _Mem, const typename atomic<_Ty>::difference_type _Value) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->fetch_add(_Value);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_add(atomic<_Ty>* _Mem, const typename atomic<_Ty>::difference_type _Value) noexcept {\r\n    return _Mem->fetch_add(_Value);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_add_explicit(volatile atomic<_Ty>* _Mem, const typename atomic<_Ty>::difference_type _Value,\r\n    const memory_order _Order) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->fetch_add(_Value, _Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_add_explicit(\r\n    atomic<_Ty>* _Mem, const typename atomic<_Ty>::difference_type _Value, const memory_order _Order) noexcept {\r\n    return _Mem->fetch_add(_Value, _Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_sub(volatile atomic<_Ty>* _Mem, const typename atomic<_Ty>::difference_type _Value) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->fetch_sub(_Value);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_sub(atomic<_Ty>* _Mem, const typename atomic<_Ty>::difference_type _Value) noexcept {\r\n    return _Mem->fetch_sub(_Value);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_sub_explicit(volatile atomic<_Ty>* _Mem, const typename atomic<_Ty>::difference_type _Value,\r\n    const memory_order _Order) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->fetch_sub(_Value, _Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_sub_explicit(\r\n    atomic<_Ty>* _Mem, const typename atomic<_Ty>::difference_type _Value, const memory_order _Order) noexcept {\r\n    return _Mem->fetch_sub(_Value, _Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_and(volatile atomic<_Ty>* _Mem, const typename atomic<_Ty>::value_type _Value) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->fetch_and(_Value);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_and(atomic<_Ty>* _Mem, const typename atomic<_Ty>::value_type _Value) noexcept {\r\n    return _Mem->fetch_and(_Value);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_and_explicit(\r\n    volatile atomic<_Ty>* _Mem, const typename atomic<_Ty>::value_type _Value, const memory_order _Order) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->fetch_and(_Value, _Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_and_explicit(\r\n    atomic<_Ty>* _Mem, const typename atomic<_Ty>::value_type _Value, const memory_order _Order) noexcept {\r\n    return _Mem->fetch_and(_Value, _Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_or(volatile atomic<_Ty>* _Mem, const typename atomic<_Ty>::value_type _Value) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->fetch_or(_Value);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_or(atomic<_Ty>* _Mem, const typename atomic<_Ty>::value_type _Value) noexcept {\r\n    return _Mem->fetch_or(_Value);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_or_explicit(\r\n    volatile atomic<_Ty>* _Mem, const typename atomic<_Ty>::value_type _Value, const memory_order _Order) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->fetch_or(_Value, _Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_or_explicit(\r\n    atomic<_Ty>* _Mem, const typename atomic<_Ty>::value_type _Value, const memory_order _Order) noexcept {\r\n    return _Mem->fetch_or(_Value, _Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_xor(volatile atomic<_Ty>* _Mem, const typename atomic<_Ty>::value_type _Value) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->fetch_xor(_Value);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_xor(atomic<_Ty>* _Mem, const typename atomic<_Ty>::value_type _Value) noexcept {\r\n    return _Mem->fetch_xor(_Value);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_xor_explicit(\r\n    volatile atomic<_Ty>* _Mem, const typename atomic<_Ty>::value_type _Value, const memory_order _Order) noexcept {\r\n    static_assert(_Deprecate_non_lock_free_volatile<_Ty>, \"Never fails\");\r\n    return _Mem->fetch_xor(_Value, _Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty atomic_fetch_xor_explicit(\r\n    atomic<_Ty>* _Mem, const typename atomic<_Ty>::value_type _Value, const memory_order _Order) noexcept {\r\n    return _Mem->fetch_xor(_Value, _Order);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty>\r\nvoid atomic_wait(const volatile atomic<_Ty>* const _Mem, const typename atomic<_Ty>::value_type _Expected) noexcept {\r\n    _Mem->wait(_Expected);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid atomic_wait(const atomic<_Ty>* const _Mem, const typename atomic<_Ty>::value_type _Expected) noexcept {\r\n    _Mem->wait(_Expected);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid atomic_wait_explicit(const volatile atomic<_Ty>* const _Mem, const typename atomic<_Ty>::value_type _Expected,\r\n    const memory_order _Order) noexcept {\r\n    _Mem->wait(_Expected, _Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid atomic_wait_explicit(const atomic<_Ty>* const _Mem, const typename atomic<_Ty>::value_type _Expected,\r\n    const memory_order _Order) noexcept {\r\n    _Mem->wait(_Expected, _Order);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid atomic_notify_one(volatile atomic<_Ty>* const _Mem) noexcept {\r\n    _Mem->notify_one();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid atomic_notify_one(atomic<_Ty>* const _Mem) noexcept {\r\n    _Mem->notify_one();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid atomic_notify_all(volatile atomic<_Ty>* const _Mem) noexcept {\r\n    _Mem->notify_all();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid atomic_notify_all(atomic<_Ty>* const _Mem) noexcept {\r\n    _Mem->notify_all();\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD using atomic_bool = atomic<bool>;\r\n\r\n_EXPORT_STD using atomic_char   = atomic<char>;\r\n_EXPORT_STD using atomic_schar  = atomic<signed char>;\r\n_EXPORT_STD using atomic_uchar  = atomic<unsigned char>;\r\n_EXPORT_STD using atomic_short  = atomic<short>;\r\n_EXPORT_STD using atomic_ushort = atomic<unsigned short>;\r\n_EXPORT_STD using atomic_int    = atomic<int>;\r\n_EXPORT_STD using atomic_uint   = atomic<unsigned int>;\r\n_EXPORT_STD using atomic_long   = atomic<long>;\r\n_EXPORT_STD using atomic_ulong  = atomic<unsigned long>;\r\n_EXPORT_STD using atomic_llong  = atomic<long long>;\r\n_EXPORT_STD using atomic_ullong = atomic<unsigned long long>;\r\n\r\n#ifdef __cpp_lib_char8_t\r\n_EXPORT_STD using atomic_char8_t = atomic<char8_t>;\r\n#endif // defined(__cpp_lib_char8_t)\r\n_EXPORT_STD using atomic_char16_t = atomic<char16_t>;\r\n_EXPORT_STD using atomic_char32_t = atomic<char32_t>;\r\n_EXPORT_STD using atomic_wchar_t  = atomic<wchar_t>;\r\n\r\n_EXPORT_STD using atomic_int8_t   = atomic<int8_t>;\r\n_EXPORT_STD using atomic_uint8_t  = atomic<uint8_t>;\r\n_EXPORT_STD using atomic_int16_t  = atomic<int16_t>;\r\n_EXPORT_STD using atomic_uint16_t = atomic<uint16_t>;\r\n_EXPORT_STD using atomic_int32_t  = atomic<int32_t>;\r\n_EXPORT_STD using atomic_uint32_t = atomic<uint32_t>;\r\n_EXPORT_STD using atomic_int64_t  = atomic<int64_t>;\r\n_EXPORT_STD using atomic_uint64_t = atomic<uint64_t>;\r\n\r\n_EXPORT_STD using atomic_int_least8_t   = atomic<int_least8_t>;\r\n_EXPORT_STD using atomic_uint_least8_t  = atomic<uint_least8_t>;\r\n_EXPORT_STD using atomic_int_least16_t  = atomic<int_least16_t>;\r\n_EXPORT_STD using atomic_uint_least16_t = atomic<uint_least16_t>;\r\n_EXPORT_STD using atomic_int_least32_t  = atomic<int_least32_t>;\r\n_EXPORT_STD using atomic_uint_least32_t = atomic<uint_least32_t>;\r\n_EXPORT_STD using atomic_int_least64_t  = atomic<int_least64_t>;\r\n_EXPORT_STD using atomic_uint_least64_t = atomic<uint_least64_t>;\r\n\r\n_EXPORT_STD using atomic_int_fast8_t   = atomic<int_fast8_t>;\r\n_EXPORT_STD using atomic_uint_fast8_t  = atomic<uint_fast8_t>;\r\n_EXPORT_STD using atomic_int_fast16_t  = atomic<int_fast16_t>;\r\n_EXPORT_STD using atomic_uint_fast16_t = atomic<uint_fast16_t>;\r\n_EXPORT_STD using atomic_int_fast32_t  = atomic<int_fast32_t>;\r\n_EXPORT_STD using atomic_uint_fast32_t = atomic<uint_fast32_t>;\r\n_EXPORT_STD using atomic_int_fast64_t  = atomic<int_fast64_t>;\r\n_EXPORT_STD using atomic_uint_fast64_t = atomic<uint_fast64_t>;\r\n\r\n_EXPORT_STD using atomic_intptr_t  = atomic<intptr_t>;\r\n_EXPORT_STD using atomic_uintptr_t = atomic<uintptr_t>;\r\n_EXPORT_STD using atomic_size_t    = atomic<size_t>;\r\n_EXPORT_STD using atomic_ptrdiff_t = atomic<ptrdiff_t>;\r\n_EXPORT_STD using atomic_intmax_t  = atomic<intmax_t>;\r\n_EXPORT_STD using atomic_uintmax_t = atomic<uintmax_t>;\r\n\r\n#if _HAS_CXX20\r\n// Though there are CMPXCHG8B and CMPXCHG16B,\r\n// the largest atomics with a full set of efficient operations are pointer-sized.\r\n_EXPORT_STD using atomic_signed_lock_free   = atomic_intptr_t;\r\n_EXPORT_STD using atomic_unsigned_lock_free = atomic_uintptr_t;\r\n#endif // _HAS_CXX20\r\n\r\n#define ATOMIC_FLAG_INIT \\\r\n    {                    \\\r\n    }\r\n\r\n_EXPORT_STD struct atomic_flag { // flag with test-and-set semantics\r\n#if _HAS_CXX20\r\n    _NODISCARD bool test(const memory_order _Order = memory_order_seq_cst) const noexcept {\r\n        return _Storage.load(_Order) != 0;\r\n    }\r\n\r\n    _NODISCARD bool test(const memory_order _Order = memory_order_seq_cst) const volatile noexcept {\r\n        return _Storage.load(_Order) != 0;\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    bool test_and_set(const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        return _Storage.exchange(true, _Order) != 0;\r\n    }\r\n\r\n    bool test_and_set(const memory_order _Order = memory_order_seq_cst) volatile noexcept {\r\n        return _Storage.exchange(true, _Order) != 0;\r\n    }\r\n\r\n    void clear(const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        _Storage.store(false, _Order);\r\n    }\r\n\r\n    void clear(const memory_order _Order = memory_order_seq_cst) volatile noexcept {\r\n        _Storage.store(false, _Order);\r\n    }\r\n\r\n    constexpr atomic_flag() noexcept = default;\r\n\r\n#if _HAS_CXX20\r\n    void wait(const bool _Expected, const memory_order _Order = memory_order_seq_cst) const noexcept {\r\n        _Storage.wait(static_cast<decltype(_Storage)::value_type>(_Expected), _Order);\r\n    }\r\n\r\n    void wait(const bool _Expected, const memory_order _Order = memory_order_seq_cst) const volatile noexcept {\r\n        _Storage.wait(static_cast<decltype(_Storage)::value_type>(_Expected), _Order);\r\n    }\r\n\r\n    void notify_one() noexcept {\r\n        _Storage.notify_one();\r\n    }\r\n\r\n    void notify_one() volatile noexcept {\r\n        _Storage.notify_one();\r\n    }\r\n\r\n    void notify_all() noexcept {\r\n        _Storage.notify_all();\r\n    }\r\n\r\n    void notify_all() volatile noexcept {\r\n        _Storage.notify_all();\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n#if 1 // TRANSITION, ABI\r\n    atomic<long> _Storage;\r\n#else // ^^^ don't break ABI / break ABI vvv\r\n    atomic<bool> _Storage;\r\n#endif // ^^^ break ABI ^^^\r\n};\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD _NODISCARD inline bool atomic_flag_test(const volatile atomic_flag* const _Flag) noexcept {\r\n    return _Flag->test();\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline bool atomic_flag_test(const atomic_flag* const _Flag) noexcept {\r\n    return _Flag->test();\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline bool atomic_flag_test_explicit(\r\n    const volatile atomic_flag* const _Flag, const memory_order _Order) noexcept {\r\n    return _Flag->test(_Order);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline bool atomic_flag_test_explicit(\r\n    const atomic_flag* const _Flag, const memory_order _Order) noexcept {\r\n    return _Flag->test(_Order);\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD inline bool atomic_flag_test_and_set(atomic_flag* const _Flag) noexcept {\r\n    return _Flag->test_and_set();\r\n}\r\n\r\n_EXPORT_STD inline bool atomic_flag_test_and_set(volatile atomic_flag* const _Flag) noexcept {\r\n    return _Flag->test_and_set();\r\n}\r\n\r\n_EXPORT_STD inline bool atomic_flag_test_and_set_explicit(\r\n    atomic_flag* const _Flag, const memory_order _Order) noexcept {\r\n    return _Flag->test_and_set(_Order);\r\n}\r\n\r\n_EXPORT_STD inline bool atomic_flag_test_and_set_explicit(\r\n    volatile atomic_flag* const _Flag, const memory_order _Order) noexcept {\r\n    return _Flag->test_and_set(_Order);\r\n}\r\n\r\n_EXPORT_STD inline void atomic_flag_clear(atomic_flag* const _Flag) noexcept {\r\n    _Flag->clear();\r\n}\r\n\r\n_EXPORT_STD inline void atomic_flag_clear(volatile atomic_flag* const _Flag) noexcept {\r\n    _Flag->clear();\r\n}\r\n\r\n_EXPORT_STD inline void atomic_flag_clear_explicit(atomic_flag* const _Flag, const memory_order _Order) noexcept {\r\n    _Flag->clear(_Order);\r\n}\r\n\r\n_EXPORT_STD inline void atomic_flag_clear_explicit(\r\n    volatile atomic_flag* const _Flag, const memory_order _Order) noexcept {\r\n    _Flag->clear(_Order);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD inline void atomic_flag_wait(const volatile atomic_flag* const _Flag, const bool _Expected) noexcept {\r\n    return _Flag->wait(_Expected);\r\n}\r\n\r\n_EXPORT_STD inline void atomic_flag_wait(const atomic_flag* const _Flag, const bool _Expected) noexcept {\r\n    return _Flag->wait(_Expected);\r\n}\r\n\r\n_EXPORT_STD inline void atomic_flag_wait_explicit(\r\n    const volatile atomic_flag* const _Flag, const bool _Expected, const memory_order _Order) noexcept {\r\n    return _Flag->wait(_Expected, _Order);\r\n}\r\n\r\n_EXPORT_STD inline void atomic_flag_wait_explicit(\r\n    const atomic_flag* const _Flag, const bool _Expected, const memory_order _Order) noexcept {\r\n    return _Flag->wait(_Expected, _Order);\r\n}\r\n\r\n_EXPORT_STD inline void atomic_flag_notify_one(volatile atomic_flag* const _Flag) noexcept {\r\n    return _Flag->notify_one();\r\n}\r\n\r\n_EXPORT_STD inline void atomic_flag_notify_one(atomic_flag* const _Flag) noexcept {\r\n    return _Flag->notify_one();\r\n}\r\n\r\n_EXPORT_STD inline void atomic_flag_notify_all(volatile atomic_flag* const _Flag) noexcept {\r\n    return _Flag->notify_all();\r\n}\r\n\r\n_EXPORT_STD inline void atomic_flag_notify_all(atomic_flag* const _Flag) noexcept {\r\n    return _Flag->notify_all();\r\n}\r\n\r\ntemplate <class _Ty>\r\nclass _Locked_pointer {\r\npublic:\r\n    static_assert(alignof(_Ty) >= (1 << 2), \"2 low order bits are needed by _Locked_pointer\");\r\n    static constexpr uintptr_t _Lock_mask                = 3;\r\n    static constexpr uintptr_t _Not_locked               = 0;\r\n    static constexpr uintptr_t _Locked_notify_not_needed = 1;\r\n    static constexpr uintptr_t _Locked_notify_needed     = 2;\r\n    static constexpr uintptr_t _Ptr_value_mask           = ~_Lock_mask;\r\n\r\n    constexpr _Locked_pointer() noexcept : _Storage{} {}\r\n    explicit _Locked_pointer(_Ty* const _Ptr) noexcept : _Storage{reinterpret_cast<uintptr_t>(_Ptr)} {}\r\n\r\n    _Locked_pointer(const _Locked_pointer&)            = delete;\r\n    _Locked_pointer& operator=(const _Locked_pointer&) = delete;\r\n\r\n    _NODISCARD _Ty* _Lock_and_load() noexcept {\r\n        uintptr_t _Rep = _Storage.load(memory_order_relaxed);\r\n        for (;;) {\r\n            switch (_Rep & _Lock_mask) {\r\n            case _Not_locked: // Can try to lock now\r\n                if (_Storage.compare_exchange_weak(_Rep, _Rep | _Locked_notify_not_needed)) {\r\n                    return reinterpret_cast<_Ty*>(_Rep);\r\n                }\r\n                _YIELD_PROCESSOR();\r\n                break;\r\n\r\n            case _Locked_notify_not_needed: // Try to set \"notify needed\" and wait\r\n                if (!_Storage.compare_exchange_weak(_Rep, (_Rep & _Ptr_value_mask) | _Locked_notify_needed)) {\r\n                    // Failed to set notify needed flag, try again\r\n                    _YIELD_PROCESSOR();\r\n                    break;\r\n                }\r\n                _Rep = (_Rep & _Ptr_value_mask) | _Locked_notify_needed;\r\n                [[fallthrough]];\r\n\r\n            case _Locked_notify_needed: // \"Notify needed\" is already set, just wait\r\n                _Storage.wait(_Rep, memory_order_relaxed);\r\n                _Rep = _Storage.load(memory_order_relaxed);\r\n                break;\r\n\r\n            default: // Unrecognized bit pattern\r\n                _STL_REPORT_ERROR(\"atomic shared_ptr invariant broken\");\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    void _Store_and_unlock(_Ty* const _Value) noexcept {\r\n        const auto _Rep = _Storage.exchange(reinterpret_cast<uintptr_t>(_Value));\r\n        if ((_Rep & _Lock_mask) == _Locked_notify_needed) {\r\n            // As we don't count waiters, every waiter is notified, and then some may re-request notification\r\n            _Storage.notify_all();\r\n        }\r\n    }\r\n\r\n    _NODISCARD _Ty* _Unsafe_load_relaxed() const noexcept {\r\n        return reinterpret_cast<_Ty*>(_Storage.load(memory_order_relaxed));\r\n    }\r\n\r\nprivate:\r\n    atomic<uintptr_t> _Storage;\r\n};\r\n#endif // _HAS_CXX20\r\n\r\n_STD_END\r\n\r\n#undef _CMPXCHG_MASK_OUT_PADDING_BITS\r\n\r\n#undef _ATOMIC_CHOOSE_INTRINSIC\r\n#undef _ATOMIC_POST_LOAD_BARRIER_AS_NEEDED\r\n#undef _ATOMIC_STORE_SEQ_CST_X86_X64\r\n#undef _ATOMIC_STORE_32_SEQ_CST_X86_X64\r\n#undef _ATOMIC_STORE_SEQ_CST\r\n#undef _ATOMIC_STORE_32_SEQ_CST\r\n#undef _ATOMIC_STORE_64_SEQ_CST\r\n#undef _ATOMIC_STORE_64_SEQ_CST_IX86\r\n#undef _ATOMIC_STORE_SEQ_CST_ARM64\r\n#undef __LOAD_ACQUIRE_ARM64\r\n#undef _ATOMIC_LOAD_ARM64\r\n#undef __STORE_RELEASE\r\n#undef _STD_ATOMIC_USE_ARM64_LDAR_STLR\r\n\r\n#undef _INVALID_MEMORY_ORDER\r\n\r\n#if defined(__clang__) && defined(_M_X64) && !defined(_M_ARM64EC)\r\n#pragma clang attribute _STD_ATOMIC_HEADER.pop\r\n#endif // ^^^ defined(__clang__) && defined(_M_X64) && !defined(_M_ARM64EC) ^^^\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _ATOMIC_\r\n"
  },
  {
    "path": "stl/inc/barrier",
    "content": "// barrier standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _BARRIER_\r\n#define _BARRIER_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#ifdef _M_CEE_PURE\r\n#error <barrier> is not supported when compiling with /clr:pure.\r\n#endif // defined(_M_CEE_PURE)\r\n\r\n#if !_HAS_CXX20\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <barrier> are available only with C++20 or later.\");\r\n#else // ^^^ !_HAS_CXX20 / _HAS_CXX20 vvv\r\n\r\n#include <atomic>\r\n#include <climits>\r\n#include <type_traits>\r\n#include <xmemory>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\nstruct _No_completion_function {\r\n    void operator()() noexcept {}\r\n};\r\n\r\n_EXPORT_STD template <class _Completion_function = _No_completion_function>\r\nclass barrier;\r\n\r\ninline constexpr ptrdiff_t _Barrier_arrival_token_mask = 1;\r\ninline constexpr ptrdiff_t _Barrier_value_mask         = ~_Barrier_arrival_token_mask;\r\ninline constexpr ptrdiff_t _Barrier_value_shift        = 1;\r\ninline constexpr ptrdiff_t _Barrier_invalid_token      = 0;\r\ninline constexpr ptrdiff_t _Barrier_value_step         = 1 << _Barrier_value_shift;\r\ninline constexpr ptrdiff_t _Barrier_max                = PTRDIFF_MAX >> _Barrier_value_shift;\r\n\r\ntemplate <class _Completion_function>\r\nclass _Arrival_token {\r\npublic:\r\n    _Arrival_token(_Arrival_token&& _Other) noexcept {\r\n        _Value        = _Other._Value;\r\n        _Other._Value = _Barrier_invalid_token;\r\n    }\r\n\r\n    _Arrival_token& operator=(_Arrival_token&& _Other) noexcept {\r\n        _Value        = _Other._Value;\r\n        _Other._Value = _Barrier_invalid_token;\r\n        return *this;\r\n    }\r\n\r\nprivate:\r\n    explicit _Arrival_token(ptrdiff_t _Value_) noexcept : _Value(_Value_) {}\r\n    friend barrier<_Completion_function>;\r\n\r\n    ptrdiff_t _Value;\r\n};\r\n\r\n_EXPORT_STD template <class _Completion_function>\r\nclass barrier {\r\npublic:\r\n    static_assert(\r\n#ifndef __cpp_noexcept_function_type\r\n        is_function_v<remove_pointer_t<_Completion_function>> ||\r\n#endif // !defined(__cpp_noexcept_function_type)\r\n            is_nothrow_invocable_v<_Completion_function&>,\r\n        \"N4950 [thread.barrier.class]/5: is_nothrow_invocable_v<CompletionFunction&> shall be true\");\r\n\r\n    using arrival_token = _Arrival_token<_Completion_function>;\r\n\r\n    constexpr explicit barrier(const ptrdiff_t _Expected, _Completion_function _Fn = _Completion_function())\r\n        noexcept(is_nothrow_move_constructible_v<_Completion_function>) // strengthened\r\n        : _Val(_One_then_variadic_args_t{}, _STD move(_Fn), _Expected << _Barrier_value_shift) {\r\n        _STL_VERIFY(_Expected >= 0 && _Expected <= (max) (),\r\n            \"Precondition: expected >= 0 and expected <= max() (N4950 [thread.barrier.class]/9)\");\r\n    }\r\n\r\n    barrier(const barrier&)            = delete;\r\n    barrier& operator=(const barrier&) = delete;\r\n\r\n    _NODISCARD static constexpr ptrdiff_t(max)() noexcept {\r\n        return _Barrier_max;\r\n    }\r\n\r\n    _NODISCARD_BARRIER_TOKEN arrival_token arrive(ptrdiff_t _Update = 1) noexcept /* strengthened */ {\r\n        _STL_VERIFY(_Update > 0 && _Update <= (max) (), \"Precondition: update > 0 (N4950 [thread.barrier.class]/12)\");\r\n        _Update <<= _Barrier_value_shift;\r\n        // TRANSITION, GH-1133: should be memory_order_release\r\n        ptrdiff_t _Current = _Val._Myval2._Current.fetch_sub(_Update) - _Update;\r\n        _STL_VERIFY(_Current >= 0, \"Precondition: update is less than or equal to the expected count \"\r\n                                   \"for the current barrier phase (N4950 [thread.barrier.class]/12)\");\r\n        if ((_Current & _Barrier_value_mask) == 0) {\r\n            // TRANSITION, GH-1133: should have this fence:\r\n            // atomic_thread_fence(memory_order_acquire);\r\n            _Completion(_Current);\r\n        }\r\n        // Embedding this into the token to provide an additional correctness check that the token is from the same\r\n        // barrier and wasn't used. All bits of this fit, as barrier should be aligned to at least the size of an\r\n        // atomic counter.\r\n        return arrival_token{(_Current & _Barrier_arrival_token_mask) | reinterpret_cast<intptr_t>(this)};\r\n    }\r\n\r\n    void wait(arrival_token&& _Arrival) const noexcept /* strengthened */ {\r\n        _STL_VERIFY((_Arrival._Value & _Barrier_value_mask) == reinterpret_cast<intptr_t>(this),\r\n            \"Preconditions: arrival is associated with the phase synchronization point for the current phase \"\r\n            \"or the immediately preceding phase of the same barrier object (N4950 [thread.barrier.class]/19)\");\r\n        const ptrdiff_t _Arrival_value = _Arrival._Value & _Barrier_arrival_token_mask;\r\n        _Arrival._Value                = _Barrier_invalid_token;\r\n        for (;;) {\r\n            // TRANSITION, GH-1133: should be memory_order_acquire\r\n            const ptrdiff_t _Current = _Val._Myval2._Current.load();\r\n            _STL_VERIFY(_Current >= 0, \"Invariant counter >= 0, possibly caused by preconditions violation \"\r\n                                       \"(N4950 [thread.barrier.class]/12)\");\r\n            if ((_Current & _Barrier_arrival_token_mask) != _Arrival_value) {\r\n                break;\r\n            }\r\n            _Val._Myval2._Current.wait(_Current, memory_order_relaxed);\r\n        }\r\n    }\r\n\r\n    void arrive_and_wait() noexcept /* strengthened */ {\r\n        // TRANSITION, GH-1133: should be memory_order_acq_rel\r\n        ptrdiff_t _Current       = _Val._Myval2._Current.fetch_sub(_Barrier_value_step) - _Barrier_value_step;\r\n        const ptrdiff_t _Arrival = _Current & _Barrier_arrival_token_mask;\r\n        _STL_VERIFY(_Current >= 0, \"Precondition: update is less than or equal to the expected count \"\r\n                                   \"for the current barrier phase (N4950 [thread.barrier.class]/12)\");\r\n        if ((_Current & _Barrier_value_mask) == 0) {\r\n            _Completion(_Current);\r\n            return;\r\n        }\r\n\r\n        for (;;) {\r\n            _Val._Myval2._Current.wait(_Current, memory_order_relaxed);\r\n            // TRANSITION, GH-1133: should be memory_order_acquire\r\n            _Current = _Val._Myval2._Current.load();\r\n            _STL_VERIFY(_Current >= 0, \"Invariant counter >= 0, possibly caused by preconditions violation \"\r\n                                       \"(N4950 [thread.barrier.class]/12)\");\r\n            if ((_Current & _Barrier_arrival_token_mask) != _Arrival) {\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    void arrive_and_drop() noexcept /* strengthened */ {\r\n        const ptrdiff_t _Rem_count =\r\n            _Val._Myval2._Total.fetch_sub(_Barrier_value_step, memory_order_relaxed) - _Barrier_value_step;\r\n        _STL_VERIFY(_Rem_count >= 0, \"Precondition: The expected count for the current barrier phase \"\r\n                                     \"is greater than zero (N4950 [thread.barrier.class]/24) \"\r\n                                     \"(checked initial expected count, which is not less than the current)\");\r\n        (void) arrive(1);\r\n    }\r\n\r\nprivate:\r\n    void _Completion(const ptrdiff_t _Current) noexcept {\r\n        const ptrdiff_t _Rem_count = _Val._Myval2._Total.load(memory_order_relaxed);\r\n        _STL_VERIFY(_Rem_count >= 0, \"Invariant: initial expected count less than zero, \"\r\n                                     \"possibly caused by preconditions violation \"\r\n                                     \"(N4950 [thread.barrier.class]/24)\");\r\n        _Val._Get_first()();\r\n        const ptrdiff_t _New_phase_count = _Rem_count | ((_Current + 1) & _Barrier_arrival_token_mask);\r\n        // TRANSITION, GH-1133: should be memory_order_release\r\n        _Val._Myval2._Current.store(_New_phase_count);\r\n        _Val._Myval2._Current.notify_all();\r\n    }\r\n\r\n    struct _Counter_t {\r\n        constexpr explicit _Counter_t(ptrdiff_t _Initial) : _Current(_Initial), _Total(_Initial) {}\r\n        // wait(arrival_token&&) accepts a token from the current phase or the immediately preceding phase; this means\r\n        // we can track which phase is the current phase using 1 bit which alternates between each phase. For this\r\n        // purpose we use the low order bit of _Current.\r\n        atomic<ptrdiff_t> _Current;\r\n        atomic<ptrdiff_t> _Total;\r\n    };\r\n\r\n    _Compressed_pair<_Completion_function, _Counter_t> _Val;\r\n};\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _BARRIER_\r\n"
  },
  {
    "path": "stl/inc/bit",
    "content": "// bit standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _BIT_\r\n#define _BIT_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#if !_HAS_CXX20\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <bit> are available only with C++20 or later.\");\r\n#else // ^^^ !_HAS_CXX20 / _HAS_CXX20 vvv\r\n\r\n#include <__msvc_bit_utils.hpp>\r\n#include <cstdlib>\r\n#include <type_traits>\r\n\r\n#include _STL_INTRIN_HEADER\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\n_EXPORT_STD template <class _To, class _From>\r\n    requires (sizeof(_To) == sizeof(_From)) && is_trivially_copyable_v<_To> && is_trivially_copyable_v<_From>\r\n_NODISCARD constexpr _To bit_cast(const _From& _Val) noexcept {\r\n    return __builtin_bit_cast(_To, _Val);\r\n}\r\n\r\n#if _HAS_CXX23\r\n_NODISCARD constexpr unsigned short _Byteswap_ushort(const unsigned short _Val) noexcept {\r\n    if (_STD is_constant_evaluated()) {\r\n        return static_cast<unsigned short>((_Val << 8) | (_Val >> 8));\r\n    } else {\r\n        return _byteswap_ushort(_Val);\r\n    }\r\n}\r\n\r\n_NODISCARD constexpr unsigned long _Byteswap_ulong(const unsigned long _Val) noexcept {\r\n    if (_STD is_constant_evaluated()) {\r\n        return (_Val << 24) | ((_Val << 8) & 0x00FF'0000) | ((_Val >> 8) & 0x0000'FF00) | (_Val >> 24);\r\n    } else {\r\n        return _byteswap_ulong(_Val);\r\n    }\r\n}\r\n\r\n_NODISCARD constexpr unsigned long long _Byteswap_uint64(const unsigned long long _Val) noexcept {\r\n    if (_STD is_constant_evaluated()) {\r\n        return (_Val << 56) | ((_Val << 40) & 0x00FF'0000'0000'0000) | ((_Val << 24) & 0x0000'FF00'0000'0000)\r\n             | ((_Val << 8) & 0x0000'00FF'0000'0000) | ((_Val >> 8) & 0x0000'0000'FF00'0000)\r\n             | ((_Val >> 24) & 0x0000'0000'00FF'0000) | ((_Val >> 40) & 0x0000'0000'0000'FF00) | (_Val >> 56);\r\n    } else {\r\n        return _byteswap_uint64(_Val);\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n    requires is_integral_v<_Ty>\r\n_NODISCARD constexpr _Ty byteswap(const _Ty _Val) noexcept {\r\n    if constexpr (sizeof(_Ty) == 1) {\r\n        return _Val;\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        return static_cast<_Ty>(_Byteswap_ushort(static_cast<unsigned short>(_Val)));\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        return static_cast<_Ty>(_Byteswap_ulong(static_cast<unsigned long>(_Val)));\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        return static_cast<_Ty>(_Byteswap_uint64(static_cast<unsigned long long>(_Val)));\r\n    } else {\r\n        static_assert(false); // unexpected size\r\n    }\r\n}\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Ty>\r\nconcept _Standard_unsigned_integral = _Is_standard_unsigned_integer<_Ty>;\r\n\r\n_EXPORT_STD template <_Standard_unsigned_integral _Ty>\r\n_NODISCARD constexpr int countl_zero(_Ty _Val) noexcept;\r\n\r\n_EXPORT_STD template <_Standard_unsigned_integral _Ty>\r\n_NODISCARD constexpr bool has_single_bit(const _Ty _Val) noexcept {\r\n#if _POPCNT_INTRINSICS_ALWAYS_AVAILABLE\r\n    if (!_STD is_constant_evaluated()) {\r\n        return _Unchecked_popcount(_Val) == 1;\r\n    }\r\n#endif // ^^^ _POPCNT_INTRINSICS_ALWAYS_AVAILABLE ^^^\r\n\r\n    return (_Val ^ (_Val - 1)) > _Val - 1;\r\n}\r\n\r\ninline void _Precondition_violation_in_bit_ceil() noexcept {}\r\n\r\n_EXPORT_STD template <_Standard_unsigned_integral _Ty>\r\n_NODISCARD constexpr _Ty bit_ceil(const _Ty _Val) noexcept /* strengthened */ {\r\n    if (_Val <= 1u) {\r\n        return _Ty{1};\r\n    }\r\n\r\n    const int _Num = _Unsigned_integer_digits<_Ty> - _STD countl_zero(static_cast<_Ty>(_Val - 1));\r\n\r\n    if constexpr (sizeof(_Ty) < sizeof(unsigned int)) { // for types subject to integral promotion\r\n        if (_STD is_constant_evaluated()) {\r\n            // Because N4950 [expr.shift]/1 \"integral promotions are performed\"\r\n            // the compiler will not generate a compile time error for\r\n            // uint8_t{1} << 8\r\n            // or\r\n            // uint16_t{1} << 16\r\n            // so we must manually enforce N4950 [bit.pow.two]/5, 8:\r\n            // \"Preconditions: N is representable as a value of type T.\"\r\n            // \"Remarks: A function call expression that violates the precondition in the Preconditions: element\r\n            // is not a core constant expression (7.7).\"\r\n            if (_Num == _Unsigned_integer_digits<_Ty>) {\r\n                _Precondition_violation_in_bit_ceil();\r\n            }\r\n        }\r\n    }\r\n\r\n    return static_cast<_Ty>(_Ty{1} << _Num);\r\n}\r\n\r\n_EXPORT_STD template <_Standard_unsigned_integral _Ty>\r\n_NODISCARD constexpr _Ty bit_floor(const _Ty _Val) noexcept {\r\n    if (_Val == 0) {\r\n        return 0;\r\n    }\r\n\r\n    return static_cast<_Ty>(_Ty{1} << (_Unsigned_integer_digits<_Ty> - 1 - _STD countl_zero(_Val)));\r\n}\r\n\r\n_EXPORT_STD template <_Standard_unsigned_integral _Ty>\r\n_NODISCARD constexpr int bit_width(const _Ty _Val) noexcept {\r\n    return _Unsigned_integer_digits<_Ty> - _STD countl_zero(_Val);\r\n}\r\n\r\n_EXPORT_STD template <_Standard_unsigned_integral _Ty>\r\n_NODISCARD constexpr _Ty rotr(_Ty _Val, int _Rotation) noexcept;\r\n\r\n_EXPORT_STD template <_Standard_unsigned_integral _Ty>\r\n_NODISCARD constexpr _Ty rotl(const _Ty _Val, const int _Rotation) noexcept {\r\n    constexpr auto _Digits = _Unsigned_integer_digits<_Ty>;\r\n\r\n    if (!_STD is_constant_evaluated()) {\r\n        if constexpr (_Digits == 64) {\r\n            return _rotl64(_Val, _Rotation);\r\n        } else if constexpr (_Digits == 32) {\r\n            return _rotl(_Val, _Rotation);\r\n        } else if constexpr (_Digits == 16) {\r\n            return _rotl16(_Val, static_cast<unsigned char>(_Rotation));\r\n        } else {\r\n            _STL_INTERNAL_STATIC_ASSERT(_Digits == 8);\r\n            return _rotl8(_Val, static_cast<unsigned char>(_Rotation));\r\n        }\r\n    }\r\n\r\n    const auto _Remainder = _Rotation % _Digits;\r\n    if (_Remainder > 0) {\r\n        return static_cast<_Ty>(\r\n            static_cast<_Ty>(_Val << _Remainder) | static_cast<_Ty>(_Val >> (_Digits - _Remainder)));\r\n    } else if (_Remainder == 0) {\r\n        return _Val;\r\n    } else { // _Remainder < 0\r\n        return _STD rotr(_Val, -_Remainder);\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <_Standard_unsigned_integral _Ty>\r\n_NODISCARD constexpr _Ty rotr(const _Ty _Val, const int _Rotation) noexcept {\r\n    constexpr auto _Digits = _Unsigned_integer_digits<_Ty>;\r\n\r\n    if (!_STD is_constant_evaluated()) {\r\n        if constexpr (_Digits == 64) {\r\n            return _rotr64(_Val, _Rotation);\r\n        } else if constexpr (_Digits == 32) {\r\n            return _rotr(_Val, _Rotation);\r\n        } else if constexpr (_Digits == 16) {\r\n            return _rotr16(_Val, static_cast<unsigned char>(_Rotation));\r\n        } else {\r\n            _STL_INTERNAL_STATIC_ASSERT(_Digits == 8);\r\n            return _rotr8(_Val, static_cast<unsigned char>(_Rotation));\r\n        }\r\n    }\r\n\r\n    const auto _Remainder = _Rotation % _Digits;\r\n    if (_Remainder > 0) {\r\n        return static_cast<_Ty>(\r\n            static_cast<_Ty>(_Val >> _Remainder) | static_cast<_Ty>(_Val << (_Digits - _Remainder)));\r\n    } else if (_Remainder == 0) {\r\n        return _Val;\r\n    } else { // _Remainder < 0\r\n        return _STD rotl(_Val, -_Remainder);\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <_Standard_unsigned_integral _Ty>\r\n_NODISCARD constexpr int countl_zero(const _Ty _Val) noexcept {\r\n    return _Countl_zero(_Val);\r\n}\r\n\r\n_EXPORT_STD template <_Standard_unsigned_integral _Ty>\r\n_NODISCARD constexpr int countl_one(const _Ty _Val) noexcept {\r\n    return _Countl_zero(static_cast<_Ty>(~_Val));\r\n}\r\n\r\n_EXPORT_STD template <_Standard_unsigned_integral _Ty>\r\n_NODISCARD constexpr int countr_zero(const _Ty _Val) noexcept {\r\n    return _Countr_zero(_Val);\r\n}\r\n\r\n_EXPORT_STD template <_Standard_unsigned_integral _Ty>\r\n_NODISCARD constexpr int countr_one(const _Ty _Val) noexcept {\r\n    return _Countr_zero(static_cast<_Ty>(~_Val));\r\n}\r\n\r\n_EXPORT_STD template <_Standard_unsigned_integral _Ty>\r\n_NODISCARD constexpr int popcount(const _Ty _Val) noexcept {\r\n    return _Popcount(_Val);\r\n}\r\n\r\n_EXPORT_STD enum class endian { little = 0, big = 1, native = little };\r\n\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _HAS_CXX20\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _BIT_\r\n"
  },
  {
    "path": "stl/inc/bitset",
    "content": "// bitset standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _BITSET_\r\n#define _BITSET_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <__msvc_bit_utils.hpp>\r\n#include <iosfwd>\r\n#include <xstring>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef no_specializations\r\n\r\n#ifndef _STD_BITSET_TO_STREAM_STACK_RESERVATION\r\n#define _STD_BITSET_TO_STREAM_STACK_RESERVATION 128\r\n#endif // !defined(_STD_BITSET_TO_STREAM_STACK_RESERVATION)\r\n\r\nextern \"C\" {\r\n// These bitset functions sometimes assume that the bit array has zero padding to a multiple of 2 or 4 bytes.\r\n// The assumptions hold true even for the vNext suggestion to use smaller types for small bitsets (see GH-1498)\r\n// due to vectorization thresholds.\r\n\r\n#if _VECTORIZED_BITSET_TO_STRING\r\n__declspec(noalias) void __stdcall __std_bitset_to_string_1(\r\n    char* _Dest, const void* _Src, size_t _Size_bits, char _Elem0, char _Elem1) noexcept;\r\n__declspec(noalias) void __stdcall __std_bitset_to_string_2(\r\n    wchar_t* _Dest, const void* _Src, size_t _Size_bits, wchar_t _Elem0, wchar_t _Elem1) noexcept;\r\n#endif // ^^^ _VECTORIZED_BITSET_TO_STRING ^^^\r\n\r\n#if _VECTORIZED_BITSET_FROM_STRING\r\n__declspec(noalias) bool __stdcall __std_bitset_from_string_1(void* _Dest, const char* _Src, size_t _Size_bytes,\r\n    size_t _Size_bits, size_t _Size_chars, char _Elem0, char _Elem1) noexcept;\r\n__declspec(noalias) bool __stdcall __std_bitset_from_string_2(void* _Dest, const wchar_t* _Src, size_t _Size_bytes,\r\n    size_t _Size_bits, size_t _Size_chars, wchar_t _Elem0, wchar_t _Elem1) noexcept;\r\n#endif // ^^^ _VECTORIZED_BITSET_FROM_STRING ^^^\r\n\r\n} // extern \"C\"\r\n\r\n_STD_BEGIN\r\ntemplate <class _Elem, size_t _Bits, bool _Dynamic = (_Bits * sizeof(_Elem) > _STD_BITSET_TO_STREAM_STACK_RESERVATION)>\r\nstruct _Buffer_for_bitset {\r\n    _Buffer_for_bitset() noexcept                            = default;\r\n    _Buffer_for_bitset(const _Buffer_for_bitset&)            = delete;\r\n    _Buffer_for_bitset& operator=(const _Buffer_for_bitset&) = delete;\r\n\r\n    ~_Buffer_for_bitset() {\r\n        delete[] _Buf;\r\n    }\r\n\r\n    void _Allocate() {\r\n        _Buf = new _Elem[_Bits];\r\n    }\r\n\r\n    _Elem* _Buf = nullptr;\r\n};\r\n\r\ntemplate <class _Elem, size_t _Bits>\r\nstruct _Buffer_for_bitset<_Elem, _Bits, false> {\r\n    _Buffer_for_bitset() noexcept { /* intentionally not initializing _Buf */ }\r\n    _Buffer_for_bitset(const _Buffer_for_bitset&)            = delete;\r\n    _Buffer_for_bitset& operator=(const _Buffer_for_bitset&) = delete;\r\n\r\n    void _Allocate() noexcept {}\r\n\r\n    _Elem _Buf[(_Bits != 0) ? _Bits : 1];\r\n};\r\n\r\n_EXPORT_STD template <size_t _Bits> // store fixed-length sequence of Boolean elements\r\nclass _NO_SPECIALIZATIONS_CITING(\"N5014 [namespace.std]/2.1\") bitset {\r\nprivate:\r\n#pragma warning(push)\r\n#pragma warning(disable : 4296) // expression is always true (/Wall)\r\n    using _Ty = conditional_t<_Bits <= sizeof(unsigned long) * CHAR_BIT, unsigned long, unsigned long long>;\r\n#pragma warning(pop)\r\n\r\npublic:\r\n    class reference { // proxy for an element\r\n        friend bitset;\r\n\r\n    public:\r\n        _CONSTEXPR23 reference(const reference&) noexcept = default;\r\n\r\n        _CONSTEXPR23 ~reference() noexcept {} // TRANSITION, ABI\r\n\r\n        _CONSTEXPR23 reference& operator=(const bool _Val) noexcept {\r\n            _Pbitset->_Set_unchecked(_Mypos, _Val);\r\n            return *this;\r\n        }\r\n\r\n        _CONSTEXPR23 reference& operator=(const reference& _Bitref) noexcept {\r\n            _Pbitset->_Set_unchecked(_Mypos, static_cast<bool>(_Bitref));\r\n            return *this;\r\n        }\r\n\r\n        _CONSTEXPR23 const reference& operator=(const bool _Val) const noexcept {\r\n            _Pbitset->_Set_unchecked(_Mypos, _Val);\r\n            return *this;\r\n        }\r\n\r\n        _NODISCARD _CONSTEXPR23 bool operator~() const noexcept {\r\n            return !_Pbitset->_Subscript(_Mypos);\r\n        }\r\n\r\n        _CONSTEXPR23 operator bool() const noexcept {\r\n            return _Pbitset->_Subscript(_Mypos);\r\n        }\r\n\r\n        _CONSTEXPR23 reference& flip() noexcept {\r\n            _Pbitset->_Flip_unchecked(_Mypos);\r\n            return *this;\r\n        }\r\n\r\n        friend constexpr void swap(reference _Left, reference _Right) noexcept {\r\n            bool _Val = _Left; // NOT _STD swap\r\n            _Left     = _Right;\r\n            _Right    = _Val;\r\n        }\r\n\r\n        friend constexpr void swap(reference _Left, bool& _Right) noexcept {\r\n            bool _Val = _Left; // NOT _STD swap\r\n            _Left     = _Right;\r\n            _Right    = _Val;\r\n        }\r\n\r\n        friend constexpr void swap(bool& _Left, reference _Right) noexcept {\r\n            swap(_Right, _Left);\r\n        }\r\n\r\n    private:\r\n        _CONSTEXPR23 reference(bitset<_Bits>& _Bitset, const size_t _Pos) noexcept : _Pbitset(&_Bitset), _Mypos(_Pos) {}\r\n\r\n        bitset<_Bits>* _Pbitset;\r\n        size_t _Mypos; // position of element in bitset\r\n    };\r\n\r\nprivate:\r\n    constexpr bool _Subscript(size_t _Pos) const noexcept {\r\n        return (_Array[_Pos / _Bitsperword] & (_Ty{1} << _Pos % _Bitsperword)) != 0;\r\n    }\r\n\r\n    static constexpr bool _Need_mask          = _Bits < CHAR_BIT * sizeof(unsigned long long);\r\n    static constexpr unsigned long long _Mask = (1ULL << (_Need_mask ? _Bits : 0)) - 1ULL;\r\n\r\npublic:\r\n    _NODISCARD constexpr bool operator[](const size_t _Pos) const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_BITSET || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Pos < _Bits, \"bitset subscript out of range\");\r\n#endif\r\n\r\n        return _Subscript(_Pos);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 reference operator[](const size_t _Pos) noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_BITSET || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Pos < _Bits, \"bitset subscript out of range\");\r\n#endif\r\n\r\n        return reference(*this, _Pos);\r\n    }\r\n\r\n    constexpr bitset() noexcept : _Array() {} // construct with all false values\r\n\r\n    constexpr bitset(unsigned long long _Val) noexcept : _Array{static_cast<_Ty>(_Need_mask ? _Val & _Mask : _Val)} {}\r\n\r\nprivate:\r\n    template <class _Traits, class _Elem>\r\n    _CONSTEXPR23 void _Construct(const _Elem* const _Ptr, size_t _Count, const _Elem _Elem0, const _Elem _Elem1) {\r\n#if _VECTORIZED_BITSET_FROM_STRING\r\n        constexpr size_t _Bitset_from_string_vector_threshold = 16;\r\n        if constexpr (_Bits >= _Bitset_from_string_vector_threshold\r\n                      && _Is_implementation_handled_char_traits<_Traits> && sizeof(_Elem) <= 2) {\r\n            if (!_STD _Is_constant_evaluated()) {\r\n                bool _Result;\r\n\r\n                if constexpr (sizeof(_Elem) == 1) {\r\n                    _Result = __std_bitset_from_string_1(_Array, reinterpret_cast<const char*>(_Ptr), sizeof(_Array),\r\n                        _Bits, _Count, static_cast<char>(_Elem0), static_cast<char>(_Elem1));\r\n                } else {\r\n                    _STL_INTERNAL_STATIC_ASSERT(sizeof(_Elem) == 2);\r\n                    _Result = __std_bitset_from_string_2(_Array, reinterpret_cast<const wchar_t*>(_Ptr), sizeof(_Array),\r\n                        _Bits, _Count, static_cast<wchar_t>(_Elem0), static_cast<wchar_t>(_Elem1));\r\n                }\r\n\r\n                if (!_Result) {\r\n                    _Xinv();\r\n                }\r\n\r\n                return;\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_BITSET_FROM_STRING ^^^\r\n\r\n        if (_Count > _Bits) {\r\n            for (size_t _Idx = _Bits; _Idx < _Count; ++_Idx) {\r\n                const auto _Ch = _Ptr[_Idx];\r\n                if (!_Traits::eq(_Elem1, _Ch) && !_Traits::eq(_Elem0, _Ch)) {\r\n                    _Xinv();\r\n                }\r\n            }\r\n\r\n            _Count = _Bits;\r\n        }\r\n\r\n        size_t _Wpos = 0;\r\n        if (_Count != 0) {\r\n            size_t _Bits_used_in_word = 0;\r\n            auto _Last                = _Ptr + _Count;\r\n            _Ty _This_word            = 0;\r\n            do {\r\n                --_Last;\r\n                const auto _Ch = *_Last;\r\n                _This_word |= static_cast<_Ty>(_Traits::eq(_Elem1, _Ch)) << _Bits_used_in_word;\r\n                if (!_Traits::eq(_Elem1, _Ch) && !_Traits::eq(_Elem0, _Ch)) {\r\n                    _Xinv();\r\n                }\r\n\r\n                if (++_Bits_used_in_word == _Bitsperword) {\r\n                    _Array[_Wpos] = _This_word;\r\n                    ++_Wpos;\r\n                    _This_word         = 0;\r\n                    _Bits_used_in_word = 0;\r\n                }\r\n            } while (_Ptr != _Last);\r\n\r\n            if (_Bits_used_in_word != 0) {\r\n                _Array[_Wpos] = _This_word;\r\n                ++_Wpos;\r\n            }\r\n        }\r\n\r\n        for (; _Wpos <= _Words; ++_Wpos) {\r\n            _Array[_Wpos] = 0;\r\n        }\r\n    }\r\n\r\npublic:\r\n    template <class _Elem, class _Traits, class _Alloc>\r\n    _CONSTEXPR23 explicit bitset(const basic_string<_Elem, _Traits, _Alloc>& _Str,\r\n        typename basic_string<_Elem, _Traits, _Alloc>::size_type _Pos   = 0,\r\n        typename basic_string<_Elem, _Traits, _Alloc>::size_type _Count = basic_string<_Elem, _Traits, _Alloc>::npos,\r\n        _Elem _Elem0 = static_cast<_Elem>('0'), _Elem _Elem1 = static_cast<_Elem>('1')) {\r\n        // construct from [_Pos, _Pos + _Count) elements in string\r\n        if (_Str.size() < _Pos) {\r\n            _Xran(); // _Pos off end\r\n        }\r\n\r\n        if (_Str.size() - _Pos < _Count) {\r\n            _Count = _Str.size() - _Pos; // trim _Count to size\r\n        }\r\n\r\n        _Construct<_Traits>(_Str.data() + _Pos, _Count, _Elem0, _Elem1);\r\n    }\r\n\r\n    template <class _Elem, enable_if_t<conjunction_v<negation<is_array<_Elem>>, is_trivially_copyable<_Elem>,\r\n                                           is_standard_layout<_Elem>, is_trivially_default_constructible<_Elem>>,\r\n                               int> = 0>\r\n    _CONSTEXPR23 explicit bitset(const _Elem* _Ntcts,\r\n        typename basic_string<_Elem>::size_type _Count = basic_string<_Elem>::npos,\r\n        _Elem _Elem0 = static_cast<_Elem>('0'), _Elem _Elem1 = static_cast<_Elem>('1')) {\r\n        if (_Count == basic_string<_Elem>::npos) {\r\n            _Count = char_traits<_Elem>::length(_Ntcts);\r\n        }\r\n\r\n        _Construct<char_traits<_Elem>>(_Ntcts, _Count, _Elem0, _Elem1);\r\n    }\r\n\r\n    _CONSTEXPR23 bitset& operator&=(const bitset& _Right) noexcept {\r\n        for (size_t _Wpos = 0; _Wpos <= _Words; ++_Wpos) {\r\n            _Array[_Wpos] &= _Right._Array[_Wpos];\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR23 bitset& operator|=(const bitset& _Right) noexcept {\r\n        for (size_t _Wpos = 0; _Wpos <= _Words; ++_Wpos) {\r\n            _Array[_Wpos] |= _Right._Array[_Wpos];\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR23 bitset& operator^=(const bitset& _Right) noexcept {\r\n        for (size_t _Wpos = 0; _Wpos <= _Words; ++_Wpos) {\r\n            _Array[_Wpos] ^= _Right._Array[_Wpos];\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR23 bitset& operator<<=(size_t _Pos) noexcept { // shift left by _Pos, first by words then by bits\r\n        const auto _Wordshift = static_cast<ptrdiff_t>(_Pos / _Bitsperword);\r\n        if (_Wordshift != 0) {\r\n            for (ptrdiff_t _Wpos = _Words; 0 <= _Wpos; --_Wpos) {\r\n                _Array[_Wpos] = _Wordshift <= _Wpos ? _Array[_Wpos - _Wordshift] : 0;\r\n            }\r\n        }\r\n\r\n        if ((_Pos %= _Bitsperword) != 0) { // 0 < _Pos < _Bitsperword, shift by bits\r\n            for (ptrdiff_t _Wpos = _Words; 0 < _Wpos; --_Wpos) {\r\n                _Array[_Wpos] = (_Array[_Wpos] << _Pos) | (_Array[_Wpos - 1] >> (_Bitsperword - _Pos));\r\n            }\r\n\r\n            _Array[0] <<= _Pos;\r\n        }\r\n        _Trim();\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR23 bitset& operator>>=(size_t _Pos) noexcept { // shift right by _Pos, first by words then by bits\r\n        const auto _Wordshift = static_cast<ptrdiff_t>(_Pos / _Bitsperword);\r\n        if (_Wordshift != 0) {\r\n            for (ptrdiff_t _Wpos = 0; _Wpos <= _Words; ++_Wpos) {\r\n                _Array[_Wpos] = _Wordshift <= _Words - _Wpos ? _Array[_Wpos + _Wordshift] : 0;\r\n            }\r\n        }\r\n\r\n        if ((_Pos %= _Bitsperword) != 0) { // 0 < _Pos < _Bitsperword, shift by bits\r\n            for (ptrdiff_t _Wpos = 0; _Wpos < _Words; ++_Wpos) {\r\n                _Array[_Wpos] = (_Array[_Wpos] >> _Pos) | (_Array[_Wpos + 1] << (_Bitsperword - _Pos));\r\n            }\r\n\r\n            _Array[_Words] >>= _Pos;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR23 bitset& set() noexcept { // set all bits true\r\n#if _HAS_CXX23\r\n        if (_STD is_constant_evaluated()) {\r\n            for (auto& _El : _Array) {\r\n                _El = static_cast<_Ty>(-1);\r\n            }\r\n        } else\r\n#endif // _HAS_CXX23\r\n        {\r\n            _CSTD memset(&_Array, 0xFF, sizeof(_Array));\r\n        }\r\n        _Trim();\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR23 bitset& set(const size_t _Pos, bool _Val = true) { // set bit at _Pos to _Val\r\n        if (_Bits <= _Pos) {\r\n            _Xran(); // _Pos off end\r\n        }\r\n\r\n        return _Set_unchecked(_Pos, _Val);\r\n    }\r\n\r\n    _CONSTEXPR23 bitset& reset() noexcept { // set all bits false\r\n#if _HAS_CXX23\r\n        if (_STD is_constant_evaluated()) {\r\n            for (auto& _El : _Array) {\r\n                _El = 0;\r\n            }\r\n        } else\r\n#endif // _HAS_CXX23\r\n        {\r\n            _CSTD memset(&_Array, 0, sizeof(_Array));\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR23 bitset& reset(const size_t _Pos) { // set bit at _Pos to false\r\n        return set(_Pos, false);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 bitset operator~() const noexcept { // flip all bits\r\n        bitset _Tmp = *this;\r\n        _Tmp.flip();\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR23 bitset& flip() noexcept { // flip all bits\r\n        for (size_t _Wpos = 0; _Wpos <= _Words; ++_Wpos) {\r\n            _Array[_Wpos] = ~_Array[_Wpos];\r\n        }\r\n\r\n        _Trim();\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR23 bitset& flip(const size_t _Pos) { // flip bit at _Pos\r\n        if (_Bits <= _Pos) {\r\n            _Xran(); // _Pos off end\r\n        }\r\n\r\n        return _Flip_unchecked(_Pos);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 unsigned long to_ulong() const noexcept(_Bits <= 32) /* strengthened */ {\r\n        constexpr bool _Bits_zero  = _Bits == 0;\r\n        constexpr bool _Bits_small = _Bits <= 32;\r\n        constexpr bool _Bits_large = _Bits > 64;\r\n        if constexpr (_Bits_zero) {\r\n            return 0;\r\n        } else if constexpr (_Bits_small) {\r\n            return static_cast<unsigned long>(_Array[0]);\r\n        } else {\r\n            if constexpr (_Bits_large) {\r\n                for (size_t _Idx = 1; _Idx <= _Words; ++_Idx) {\r\n                    if (_Array[_Idx] != 0) {\r\n                        _Xoflo(); // fail if any high-order words are nonzero\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (!_STD _In_range<unsigned long>(_Array[0])) {\r\n                _Xoflo();\r\n            }\r\n\r\n            return static_cast<unsigned long>(_Array[0]);\r\n        }\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 unsigned long long to_ullong() const noexcept(_Bits <= 64) /* strengthened */ {\r\n        constexpr bool _Bits_zero  = _Bits == 0;\r\n        constexpr bool _Bits_large = _Bits > 64;\r\n        if constexpr (_Bits_zero) {\r\n            return 0;\r\n        } else {\r\n            if constexpr (_Bits_large) {\r\n                for (size_t _Idx = 1; _Idx <= _Words; ++_Idx) {\r\n                    if (_Array[_Idx] != 0) {\r\n                        _Xoflo(); // fail if any high-order words are nonzero\r\n                    }\r\n                }\r\n            }\r\n\r\n            return _Array[0];\r\n        }\r\n    }\r\n\r\n    template <class _Elem = char, class _Tr = char_traits<_Elem>, class _Alloc = allocator<_Elem>>\r\n    _NODISCARD _CONSTEXPR23 basic_string<_Elem, _Tr, _Alloc> to_string(\r\n        const _Elem _Elem0 = static_cast<_Elem>('0'), const _Elem _Elem1 = static_cast<_Elem>('1')) const {\r\n        // convert bitset to string\r\n        basic_string<_Elem, _Tr, _Alloc> _Str;\r\n        _Str._Resize_and_overwrite(_Bits, [this, _Elem0, _Elem1](_Elem* _Buf, size_t _Len) {\r\n            _To_string(_Buf, _Len, _Elem0, _Elem1);\r\n            return _Len;\r\n        });\r\n        return _Str;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 size_t count() const noexcept { // count number of set bits\r\n        return _Select_popcount_impl<_Ty>([this](auto _Popcount_impl) {\r\n            size_t _Val = 0;\r\n            for (size_t _Wpos = 0; _Wpos <= _Words; ++_Wpos) {\r\n                _Val += _Popcount_impl(_Array[_Wpos]);\r\n            }\r\n\r\n            return _Val;\r\n        });\r\n    }\r\n\r\n    _NODISCARD constexpr size_t size() const noexcept {\r\n        return _Bits;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 bool operator==(const bitset& _Right) const noexcept {\r\n#if _HAS_CXX23\r\n        if (_STD is_constant_evaluated()) {\r\n            for (size_t _Index = 0; _Index <= _Words; ++_Index) {\r\n                if (_Array[_Index] != _Right._Array[_Index]) {\r\n                    return false;\r\n                }\r\n            }\r\n            return true;\r\n        } else\r\n#endif // _HAS_CXX23\r\n        {\r\n            return _CSTD memcmp(&_Array[0], &_Right._Array[0], sizeof(_Array)) == 0;\r\n        }\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD bool operator!=(const bitset& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    _NODISCARD _CONSTEXPR23 bool test(const size_t _Pos) const {\r\n        if (_Bits <= _Pos) {\r\n            _Xran(); // _Pos off end\r\n        }\r\n\r\n        return _Subscript(_Pos);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 bool any() const noexcept {\r\n        for (size_t _Wpos = 0; _Wpos <= _Words; ++_Wpos) {\r\n            if (_Array[_Wpos] != 0) {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 bool none() const noexcept {\r\n        return !any();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 bool all() const noexcept {\r\n        if constexpr (_Bits == 0) { // must test for this, otherwise would count one full word\r\n            return true;\r\n        }\r\n\r\n        constexpr bool _No_padding = _Bits % _Bitsperword == 0;\r\n        for (size_t _Wpos = 0; _Wpos < _Words + _No_padding; ++_Wpos) {\r\n            if (_Array[_Wpos] != ~static_cast<_Ty>(0)) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return _No_padding || _Array[_Words] == (static_cast<_Ty>(1) << (_Bits % _Bitsperword)) - 1;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 bitset operator<<(const size_t _Pos) const noexcept {\r\n        bitset _Tmp = *this;\r\n        _Tmp <<= _Pos;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 bitset operator>>(const size_t _Pos) const noexcept {\r\n        bitset _Tmp = *this;\r\n        _Tmp >>= _Pos;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD _Ty _Getword(size_t _Wpos) const noexcept { // nonstandard extension; get underlying word\r\n        return _Array[_Wpos];\r\n    }\r\n\r\n    template <class _Elem>\r\n    _CONSTEXPR23 void _To_string(\r\n        _Elem* const _Buf, const size_t _Len, const _Elem _Elem0, const _Elem _Elem1) const noexcept {\r\n#if _VECTORIZED_BITSET_TO_STRING\r\n        constexpr size_t _Bitset_to_string_vector_threshold = 32;\r\n        if constexpr (_Bits >= _Bitset_to_string_vector_threshold && is_integral_v<_Elem> && sizeof(_Elem) <= 2) {\r\n            if (!_Is_constant_evaluated()) {\r\n                if constexpr (sizeof(_Elem) == 1) {\r\n                    __std_bitset_to_string_1(reinterpret_cast<char*>(_Buf), _Array, _Len, static_cast<char>(_Elem0),\r\n                        static_cast<char>(_Elem1));\r\n                } else {\r\n                    _STL_INTERNAL_STATIC_ASSERT(sizeof(_Elem) == 2);\r\n                    __std_bitset_to_string_2(reinterpret_cast<wchar_t*>(_Buf), _Array, _Len,\r\n                        static_cast<wchar_t>(_Elem0), static_cast<wchar_t>(_Elem1));\r\n                }\r\n\r\n                return;\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_BITSET_TO_STRING ^^^\r\n\r\n        for (size_t _Pos = 0; _Pos < _Len; ++_Pos) {\r\n            _Buf[_Pos] = _Subscript(_Len - 1 - _Pos) ? _Elem1 : _Elem0;\r\n        }\r\n    }\r\n\r\nprivate:\r\n    friend hash<bitset<_Bits>>;\r\n\r\n    static constexpr ptrdiff_t _Bitsperword = CHAR_BIT * sizeof(_Ty);\r\n    static constexpr ptrdiff_t _Words       = _Bits == 0 ? 0 : (_Bits - 1) / _Bitsperword; // NB: number of words - 1\r\n\r\n    _CONSTEXPR23 void _Trim() noexcept { // clear any trailing bits in last word\r\n        constexpr bool _Work_to_do = _Bits == 0 || _Bits % _Bitsperword != 0;\r\n        if constexpr (_Work_to_do) {\r\n            _Array[_Words] &= (_Ty{1} << _Bits % _Bitsperword) - 1;\r\n        }\r\n    }\r\n\r\n    _CONSTEXPR23 bitset& _Set_unchecked(const size_t _Pos, const bool _Val) noexcept {\r\n        // set bit at _Pos to _Val, no checking\r\n        auto& _Selected_word = _Array[_Pos / _Bitsperword];\r\n        const auto _Bit      = _Ty{1} << _Pos % _Bitsperword;\r\n        if (_Val) {\r\n            _Selected_word |= _Bit;\r\n        } else {\r\n            _Selected_word &= ~_Bit;\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR23 bitset& _Flip_unchecked(const size_t _Pos) noexcept { // flip bit at _Pos, no checking\r\n        _Array[_Pos / _Bitsperword] ^= _Ty{1} << _Pos % _Bitsperword;\r\n        return *this;\r\n    }\r\n\r\n    [[noreturn]] static void _Xinv() {\r\n        _Xinvalid_argument(\"invalid bitset char\");\r\n    }\r\n\r\n    [[noreturn]] static void _Xoflo() {\r\n        _Xoverflow_error(\"bitset overflow\");\r\n    }\r\n\r\n    [[noreturn]] static void _Xran() {\r\n        _Xout_of_range(\"invalid bitset position\");\r\n    }\r\n\r\n    _Ty _Array[_Words + 1];\r\n};\r\n\r\n_EXPORT_STD template <size_t _Bits>\r\n_NODISCARD _CONSTEXPR23 bitset<_Bits> operator&(const bitset<_Bits>& _Left, const bitset<_Bits>& _Right) noexcept {\r\n    bitset<_Bits> _Ans = _Left;\r\n    _Ans &= _Right;\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <size_t _Bits>\r\n_NODISCARD _CONSTEXPR23 bitset<_Bits> operator|(const bitset<_Bits>& _Left, const bitset<_Bits>& _Right) noexcept {\r\n    bitset<_Bits> _Ans = _Left;\r\n    _Ans |= _Right;\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <size_t _Bits>\r\n_NODISCARD _CONSTEXPR23 bitset<_Bits> operator^(const bitset<_Bits>& _Left, const bitset<_Bits>& _Right) noexcept {\r\n    bitset<_Bits> _Ans = _Left;\r\n    _Ans ^= _Right;\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Tr, size_t _Bits>\r\nbasic_ostream<_Elem, _Tr>& operator<<(basic_ostream<_Elem, _Tr>& _Ostr, const bitset<_Bits>& _Right) {\r\n    using _Ctype             = typename basic_ostream<_Elem, _Tr>::_Ctype;\r\n    const _Ctype& _Ctype_fac = _STD use_facet<_Ctype>(_Ostr.getloc());\r\n    const _Elem _Elem0       = _Ctype_fac.widen('0');\r\n    const _Elem _Elem1       = _Ctype_fac.widen('1');\r\n\r\n    _Buffer_for_bitset<_Elem, _Bits> _Buf;\r\n    _Buf._Allocate();\r\n    _Right._To_string(_Buf._Buf, _Bits, _Elem0, _Elem1);\r\n    _Ostr.write(_Buf._Buf, _Bits);\r\n    return _Ostr;\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Tr, size_t _Bits>\r\nbasic_istream<_Elem, _Tr>& operator>>(basic_istream<_Elem, _Tr>& _Istr, bitset<_Bits>& _Right) {\r\n    using _Istr_t                    = basic_istream<_Elem, _Tr>;\r\n    using _Ctype                     = typename _Istr_t::_Ctype;\r\n    const _Ctype& _Ctype_fac         = _STD use_facet<_Ctype>(_Istr.getloc());\r\n    const _Elem _Elem0               = _Ctype_fac.widen('0');\r\n    const _Elem _Elem1               = _Ctype_fac.widen('1');\r\n    typename _Istr_t::iostate _State = _Istr_t::goodbit;\r\n    size_t _Count                    = 0;\r\n    _Buffer_for_bitset<_Elem, _Bits> _Buf;\r\n    const typename _Istr_t::sentry _Ok(_Istr);\r\n\r\n    if (_Ok) { // valid stream, extract elements\r\n        _TRY_IO_BEGIN\r\n        _Buf._Allocate();\r\n        typename _Tr::int_type _Meta = _Istr.rdbuf()->sgetc();\r\n        for (; _Count < _Bits; ++_Count, _Meta = _Istr.rdbuf()->snextc()) {\r\n            // test _Meta\r\n            if (_Tr::eq_int_type(_Tr::eof(), _Meta)) { // end of file, quit\r\n                _State |= _Istr_t::eofbit;\r\n                break;\r\n            }\r\n\r\n            const _Elem _Char = _Tr::to_char_type(_Meta);\r\n\r\n            if (!_Tr::eq(_Char, _Elem0) && !_Tr::eq(_Char, _Elem1)) {\r\n                break; // invalid element\r\n            }\r\n\r\n            // valid, append '0' or '1'\r\n            _Buf._Buf[_Count] = '0' + _Tr::eq(_Char, _Elem1);\r\n        }\r\n\r\n        _CATCH_IO_(_Istr_t, _Istr)\r\n    }\r\n\r\n    constexpr bool _Has_bits = _Bits > 0;\r\n\r\n    if constexpr (_Has_bits) {\r\n        if (_Count == 0) {\r\n            _State |= _Istr_t::failbit;\r\n        }\r\n    }\r\n\r\n    _Istr.setstate(_State);\r\n    _Right = bitset<_Bits>{_Buf._Buf, _Count}; // convert string and store\r\n    return _Istr;\r\n}\r\n\r\ntemplate <size_t _Bits>\r\nstruct hash<bitset<_Bits>> {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = bitset<_Bits>;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = size_t;\r\n\r\n    _NODISCARD static size_t operator()(const bitset<_Bits>& _Keyval) noexcept {\r\n        return _Hash_representation(_Keyval._Array);\r\n    }\r\n};\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _BITSET_\r\n"
  },
  {
    "path": "stl/inc/cassert",
    "content": "// cassert standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// NOTE: no include guard\r\n#include <yvals_core.h>\r\n\r\n#include <assert.h>\r\n"
  },
  {
    "path": "stl/inc/ccomplex",
    "content": "// ccomplex standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CCOMPLEX_\r\n#define _CCOMPLEX_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <complex>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\nusing _Header_ccomplex _CXX17_DEPRECATE_C_HEADER = int;\r\nusing _Hdr_ccomplex                              = _Header_ccomplex;\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CCOMPLEX_\r\n"
  },
  {
    "path": "stl/inc/cctype",
    "content": "// cctype standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CCTYPE_\r\n#define _CCTYPE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <ctype.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD using _CSTD isalnum;\r\n_EXPORT_STD using _CSTD isalpha;\r\n_EXPORT_STD using _CSTD iscntrl;\r\n_EXPORT_STD using _CSTD isdigit;\r\n_EXPORT_STD using _CSTD isgraph;\r\n_EXPORT_STD using _CSTD islower;\r\n_EXPORT_STD using _CSTD isprint;\r\n_EXPORT_STD using _CSTD ispunct;\r\n_EXPORT_STD using _CSTD isspace;\r\n_EXPORT_STD using _CSTD isupper;\r\n_EXPORT_STD using _CSTD isxdigit;\r\n_EXPORT_STD using _CSTD tolower;\r\n_EXPORT_STD using _CSTD toupper;\r\n\r\n_EXPORT_STD using _CSTD isblank;\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CCTYPE_\r\n"
  },
  {
    "path": "stl/inc/cerrno",
    "content": "// cerrno standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CERRNO_\r\n#define _CERRNO_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <errno.h>\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CERRNO_\r\n"
  },
  {
    "path": "stl/inc/cfenv",
    "content": "// cfenv standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CFENV_\r\n#define _CFENV_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <fenv.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD using _CSTD fegetround;\r\n_EXPORT_STD using _CSTD fesetround;\r\n\r\n#if !defined(_M_CEE) || defined(_CRTBLD)\r\n_EXPORT_STD using _CSTD feclearexcept;\r\n_EXPORT_STD using _CSTD fegetenv;\r\n_EXPORT_STD using _CSTD fegetexceptflag;\r\n_EXPORT_STD using _CSTD feholdexcept;\r\n_EXPORT_STD using _CSTD fenv_t;\r\n_EXPORT_STD using _CSTD fesetenv;\r\n_EXPORT_STD using _CSTD fesetexceptflag;\r\n_EXPORT_STD using _CSTD fetestexcept;\r\n_EXPORT_STD using _CSTD fexcept_t;\r\n#endif // !defined(_M_CEE) || defined(_CRTBLD)\r\n\r\n#if !defined(_M_CEE) && !defined(_CRTBLD)\r\n_EXPORT_STD using _CSTD feraiseexcept;\r\n_EXPORT_STD using _CSTD feupdateenv;\r\n#endif // !defined(_M_CEE) && !defined(_CRTBLD)\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CFENV_\r\n"
  },
  {
    "path": "stl/inc/cfloat",
    "content": "// cfloat standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CFLOAT_\r\n#define _CFLOAT_\r\n#include <yvals_core.h>\r\n\r\n#include <float.h>\r\n#endif // _CFLOAT_\r\n"
  },
  {
    "path": "stl/inc/charconv",
    "content": "// charconv standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CHARCONV_\r\n#define _CHARCONV_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX17\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <charconv> are available only with C++17 or later.\");\r\n#else // ^^^ !_HAS_CXX17 / _HAS_CXX17 vvv\r\n#include <cstring>\r\n#include <xbit_ops.h>\r\n#include <xcharconv.h>\r\n#include <xcharconv_ryu.h>\r\n#include <xcharconv_tables.h>\r\n#include <xutility>\r\n\r\n#include _STL_INTRIN_HEADER\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// This implementation is dedicated to the memory of Mary and Thavatchai.\r\n\r\n_STD_BEGIN\r\ninline constexpr char _Charconv_digits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e',\r\n    'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};\r\n_STL_INTERNAL_STATIC_ASSERT(_STD size(_Charconv_digits) == 36);\r\n\r\ntemplate <class _RawTy>\r\n_NODISCARD _CONSTEXPR23 to_chars_result _Integer_to_chars(\r\n    char* _First, char* const _Last, const _RawTy _Raw_value, const int _Base) noexcept {\r\n    _Adl_verify_range(_First, _Last);\r\n    _STL_ASSERT(_Base >= 2 && _Base <= 36, \"invalid base in to_chars()\");\r\n\r\n    using _Unsigned = make_unsigned_t<_RawTy>;\r\n\r\n    _Unsigned _Value = static_cast<_Unsigned>(_Raw_value);\r\n\r\n    if constexpr (is_signed_v<_RawTy>) {\r\n        if (_Raw_value < 0) {\r\n            if (_First == _Last) {\r\n                return {_Last, errc::value_too_large};\r\n            }\r\n\r\n            *_First++ = '-';\r\n\r\n            _Value = static_cast<_Unsigned>(0 - _Value);\r\n        }\r\n    }\r\n\r\n    constexpr size_t _Buff_size = sizeof(_Unsigned) * CHAR_BIT; // enough for base 2\r\n    char _Buff[_Buff_size];\r\n    char* const _Buff_end = _Buff + _Buff_size;\r\n    char* _RNext          = _Buff_end;\r\n\r\n    switch (_Base) {\r\n    case 10:\r\n        { // Derived from _UIntegral_to_buff()\r\n#ifdef _WIN64\r\n            auto _Trunc = _Value;\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n            if constexpr (sizeof(_Unsigned) > 4) { // For 64-bit numbers, work in chunks to avoid 64-bit divisions.\r\n                while (_Value > 0xFFFFFFFFU) {\r\n                    auto _Value_chunk = static_cast<unsigned long>(_Value % 100000000);\r\n                    _Value /= 100000000;\r\n\r\n                    for (int _Idx = 0; _Idx != 3; ++_Idx) {\r\n                        const unsigned long _Value_chunk_part = _Value_chunk % 100;\r\n                        _Value_chunk /= 100;\r\n                        _RNext -= 2;\r\n                        if (!_STD _Is_constant_evaluated()) {\r\n                            _CSTD memcpy(_RNext, _Digit_pairs<char>._Data[_Value_chunk_part], 2);\r\n                        } else {\r\n                            _RNext[0] = _Digit_pairs<char>._Data[_Value_chunk_part][0];\r\n                            _RNext[1] = _Digit_pairs<char>._Data[_Value_chunk_part][1];\r\n                        }\r\n                    }\r\n\r\n                    _RNext -= 2;\r\n                    if (!_STD _Is_constant_evaluated()) {\r\n                        _CSTD memcpy(_RNext, _Digit_pairs<char>._Data[_Value_chunk], 2);\r\n                    } else {\r\n                        _RNext[0] = _Digit_pairs<char>._Data[_Value_chunk][0];\r\n                        _RNext[1] = _Digit_pairs<char>._Data[_Value_chunk][1];\r\n                    }\r\n                }\r\n            }\r\n\r\n            auto _Trunc = static_cast<unsigned long>(_Value);\r\n#endif // ^^^ 32-bit ^^^\r\n\r\n            // If we have a single digit, print [0, 9] and return. (This is necessary to correctly handle 0.)\r\n            if (_Trunc < 10) {\r\n                *--_RNext = static_cast<char>('0' + _Trunc);\r\n                break;\r\n            }\r\n\r\n            // Print one or more pairs of digits.\r\n            do {\r\n                const auto _Trunc_part = static_cast<unsigned long>(_Trunc % 100);\r\n                _Trunc /= 100;\r\n                _RNext -= 2;\r\n                if (!_STD _Is_constant_evaluated()) {\r\n                    _CSTD memcpy(_RNext, _Digit_pairs<char>._Data[_Trunc_part], 2);\r\n                } else {\r\n                    _RNext[0] = _Digit_pairs<char>._Data[_Trunc_part][0];\r\n                    _RNext[1] = _Digit_pairs<char>._Data[_Trunc_part][1];\r\n                }\r\n            } while (_Trunc >= 10);\r\n\r\n            // If we have an unpaired digit, print it.\r\n            // For example, 1729 is printed as 17 29, and 19937 is printed as 1 99 37.\r\n            if (_Trunc != 0) {\r\n                *--_RNext = static_cast<char>('0' + _Trunc);\r\n            }\r\n            break;\r\n        }\r\n\r\n    case 2:\r\n        do {\r\n            *--_RNext = static_cast<char>('0' + (_Value & 0b1));\r\n            _Value >>= 1;\r\n        } while (_Value != 0);\r\n        break;\r\n\r\n    case 4:\r\n        do {\r\n            *--_RNext = static_cast<char>('0' + (_Value & 0b11));\r\n            _Value >>= 2;\r\n        } while (_Value != 0);\r\n        break;\r\n\r\n    case 8:\r\n        do {\r\n            *--_RNext = static_cast<char>('0' + (_Value & 0b111));\r\n            _Value >>= 3;\r\n        } while (_Value != 0);\r\n        break;\r\n\r\n    case 16:\r\n        do {\r\n            *--_RNext = _Charconv_digits[_Value & 0b1111];\r\n            _Value >>= 4;\r\n        } while (_Value != 0);\r\n        break;\r\n\r\n    case 32:\r\n        do {\r\n            *--_RNext = _Charconv_digits[_Value & 0b11111];\r\n            _Value >>= 5;\r\n        } while (_Value != 0);\r\n        break;\r\n\r\n    case 3:\r\n    case 5:\r\n    case 6:\r\n    case 7:\r\n    case 9:\r\n        do {\r\n            *--_RNext = static_cast<char>('0' + _Value % _Base);\r\n            _Value    = static_cast<_Unsigned>(_Value / _Base);\r\n        } while (_Value != 0);\r\n        break;\r\n\r\n    default:\r\n        do {\r\n            *--_RNext = _Charconv_digits[_Value % _Base];\r\n            _Value    = static_cast<_Unsigned>(_Value / _Base);\r\n        } while (_Value != 0);\r\n        break;\r\n    }\r\n\r\n    const ptrdiff_t _Digits_written = _Buff_end - _RNext;\r\n\r\n    if (_Last - _First < _Digits_written) {\r\n        return {_Last, errc::value_too_large};\r\n    }\r\n\r\n    _Copy_n_unchecked4(_RNext, _Digits_written, _First);\r\n\r\n    return {_First + _Digits_written, errc{}};\r\n}\r\n\r\n_EXPORT_STD _CONSTEXPR23 to_chars_result to_chars(\r\n    char* const _First, char* const _Last, const char _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_to_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 to_chars_result to_chars(\r\n    char* const _First, char* const _Last, const signed char _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_to_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 to_chars_result to_chars(char* const _First, char* const _Last, const unsigned char _Value,\r\n    const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_to_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 to_chars_result to_chars(\r\n    char* const _First, char* const _Last, const short _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_to_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 to_chars_result to_chars(char* const _First, char* const _Last, const unsigned short _Value,\r\n    const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_to_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 to_chars_result to_chars(\r\n    char* const _First, char* const _Last, const int _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_to_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 to_chars_result to_chars(char* const _First, char* const _Last, const unsigned int _Value,\r\n    const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_to_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 to_chars_result to_chars(\r\n    char* const _First, char* const _Last, const long _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_to_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 to_chars_result to_chars(char* const _First, char* const _Last, const unsigned long _Value,\r\n    const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_to_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 to_chars_result to_chars(\r\n    char* const _First, char* const _Last, const long long _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_to_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 to_chars_result to_chars(char* const _First, char* const _Last,\r\n    const unsigned long long _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_to_chars(_First, _Last, _Value, _Base);\r\n}\r\n\r\n_EXPORT_STD to_chars_result to_chars(char* _First, char* _Last, bool _Value, int _Base = 10) = delete;\r\n\r\n_EXPORT_STD struct from_chars_result {\r\n    const char* ptr;\r\n    errc ec;\r\n#if _HAS_CXX20\r\n    _NODISCARD friend bool operator==(const from_chars_result&, const from_chars_result&) = default;\r\n#endif // _HAS_CXX20\r\n};\r\n\r\n// convert ['0', '9'] ['A', 'Z'] ['a', 'z'] to [0, 35], everything else to 255\r\ninline constexpr unsigned char _Digit_from_byte[] = {255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\r\n    255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\r\n    255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 255, 255, 255, 255, 255,\r\n    255, 255, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,\r\n    255, 255, 255, 255, 255, 255, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,\r\n    31, 32, 33, 34, 35, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\r\n    255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\r\n    255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\r\n    255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\r\n    255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\r\n    255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255};\r\n_STL_INTERNAL_STATIC_ASSERT(_STD size(_Digit_from_byte) == 256);\r\n\r\n_NODISCARD _CONSTEXPR23 unsigned char _Digit_from_char(const char _Ch) noexcept {\r\n    // convert ['0', '9'] ['A', 'Z'] ['a', 'z'] to [0, 35], everything else to 255\r\n\r\n    // CodeQL [SM01954] This index is valid: we cast to unsigned char and the array has 256 elements.\r\n    return _Digit_from_byte[static_cast<unsigned char>(_Ch)];\r\n}\r\n\r\ntemplate <class _RawTy>\r\n_NODISCARD _CONSTEXPR23 from_chars_result _Integer_from_chars(\r\n    const char* const _First, const char* const _Last, _RawTy& _Raw_value, const int _Base) noexcept {\r\n    _Adl_verify_range(_First, _Last);\r\n    _STL_ASSERT(_Base >= 2 && _Base <= 36, \"invalid base in from_chars()\");\r\n\r\n    bool _Minus_sign = false;\r\n\r\n    const char* _Next = _First;\r\n\r\n    if constexpr (is_signed_v<_RawTy>) {\r\n        if (_Next != _Last && *_Next == '-') {\r\n            _Minus_sign = true;\r\n            ++_Next;\r\n        }\r\n    }\r\n\r\n    using _Unsigned = make_unsigned_t<_RawTy>;\r\n\r\n    constexpr _Unsigned _Uint_max    = static_cast<_Unsigned>(-1);\r\n    constexpr _Unsigned _Int_max     = static_cast<_Unsigned>(_Uint_max >> 1);\r\n#pragma warning(push)\r\n#pragma warning(disable : 26450) // TRANSITION, VSO-1828677\r\n    constexpr _Unsigned _Abs_int_min = static_cast<_Unsigned>(_Int_max + 1);\r\n#pragma warning(pop)\r\n\r\n    _Unsigned _Risky_val;\r\n    _Unsigned _Max_digit;\r\n\r\n    if constexpr (is_signed_v<_RawTy>) {\r\n        if (_Minus_sign) {\r\n            _Risky_val = static_cast<_Unsigned>(_Abs_int_min / _Base);\r\n            _Max_digit = static_cast<_Unsigned>(_Abs_int_min % _Base);\r\n        } else {\r\n            _Risky_val = static_cast<_Unsigned>(_Int_max / _Base);\r\n            _Max_digit = static_cast<_Unsigned>(_Int_max % _Base);\r\n        }\r\n    } else {\r\n        _Risky_val = static_cast<_Unsigned>(_Uint_max / _Base);\r\n        _Max_digit = static_cast<_Unsigned>(_Uint_max % _Base);\r\n    }\r\n\r\n    _Unsigned _Value = 0;\r\n\r\n    bool _Overflowed = false;\r\n\r\n    for (; _Next != _Last; ++_Next) {\r\n        const unsigned char _Digit = _Digit_from_char(*_Next);\r\n\r\n        if (_Digit >= _Base) {\r\n            break;\r\n        }\r\n\r\n        if (_Value < _Risky_val // never overflows\r\n            || (_Value == _Risky_val && _Digit <= _Max_digit)) { // overflows for certain digits\r\n            _Value = static_cast<_Unsigned>(_Value * _Base + _Digit);\r\n        } else { // _Value > _Risky_val always overflows\r\n            _Overflowed = true; // keep going, _Next still needs to be updated, _Value is now irrelevant\r\n        }\r\n    }\r\n\r\n    if (_Next - _First == static_cast<ptrdiff_t>(_Minus_sign)) {\r\n        return {_First, errc::invalid_argument};\r\n    }\r\n\r\n    if (_Overflowed) {\r\n        return {_Next, errc::result_out_of_range};\r\n    }\r\n\r\n    if constexpr (is_signed_v<_RawTy>) {\r\n        if (_Minus_sign) {\r\n            _Value = static_cast<_Unsigned>(0 - _Value);\r\n        }\r\n    }\r\n\r\n    _Raw_value = static_cast<_RawTy>(_Value); // congruent to _Value modulo 2^N for negative, N4950 [conv.integral]/3\r\n\r\n    return {_Next, errc{}};\r\n}\r\n\r\n_EXPORT_STD _CONSTEXPR23 from_chars_result from_chars(\r\n    const char* const _First, const char* const _Last, char& _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_from_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 from_chars_result from_chars(const char* const _First, const char* const _Last,\r\n    signed char& _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_from_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 from_chars_result from_chars(const char* const _First, const char* const _Last,\r\n    unsigned char& _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_from_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 from_chars_result from_chars(const char* const _First, const char* const _Last, short& _Value,\r\n    const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_from_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 from_chars_result from_chars(const char* const _First, const char* const _Last,\r\n    unsigned short& _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_from_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 from_chars_result from_chars(\r\n    const char* const _First, const char* const _Last, int& _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_from_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 from_chars_result from_chars(const char* const _First, const char* const _Last,\r\n    unsigned int& _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_from_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 from_chars_result from_chars(\r\n    const char* const _First, const char* const _Last, long& _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_from_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 from_chars_result from_chars(const char* const _First, const char* const _Last,\r\n    unsigned long& _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_from_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 from_chars_result from_chars(const char* const _First, const char* const _Last,\r\n    long long& _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_from_chars(_First, _Last, _Value, _Base);\r\n}\r\n_EXPORT_STD _CONSTEXPR23 from_chars_result from_chars(const char* const _First, const char* const _Last,\r\n    unsigned long long& _Value, const int _Base = 10) noexcept /* strengthened */ {\r\n    return _Integer_from_chars(_First, _Last, _Value, _Base);\r\n}\r\n\r\n// vvvvvvvvvv DERIVED FROM corecrt_internal_big_integer.h vvvvvvvvvv\r\n\r\n// A lightweight, sufficiently functional high-precision integer type for use in the binary floating-point <=> decimal\r\n// string conversions. We define only the operations (and in some cases, parts of operations) that are actually used.\r\n\r\n// We require sufficient precision to represent the reciprocal of the smallest representable value (the smallest\r\n// denormal, 2^-1074). During parsing, we may also consider up to 768 decimal digits. For this, we require an\r\n// additional log2(10^768) bits of precision. Finally, we require 54 bits of space for pre-division numerator shifting,\r\n// because double explicitly stores 52 bits, implicitly stores 1 bit, and we need 1 more bit for rounding.\r\n\r\n// PERFORMANCE NOTE: We intentionally do not initialize the _Mydata array when a _Big_integer_flt object is constructed.\r\n// Profiling showed that zero-initialization caused a substantial performance hit. Initialization of the _Mydata\r\n// array is not necessary: all operations on the _Big_integer_flt type are carefully written to only access elements at\r\n// indices [0, _Myused), and all operations correctly update _Myused as the utilized size increases.\r\n\r\n// _Big_integer_flt _Xval{}; is direct-list-initialization (N4950 [dcl.init.list]/1).\r\n// N4950 [dcl.init.list]/3.5:\r\n// \"Otherwise, if the initializer list has no elements and T is a class type with a default constructor,\r\n// the object is value-initialized.\"\r\n// N4950 [dcl.init.general]/9, /9.1, /9.1.1:\r\n// \"To value-initialize an object of type T means:\r\n// - if T is a (possibly cv-qualified) class type ([class]), then\r\n//   - if T has either no default constructor ([class.default.ctor]) or a default constructor\r\n//   that is user-provided or deleted, then the object is default-initialized;\"\r\n// N4950 [dcl.init.general]/7, /7.1:\r\n// \"To default-initialize an object of type T means:\r\n// - If T is a (possibly cv-qualified) class type ([class]), constructors are considered. The applicable constructors\r\n// are enumerated ([over.match.ctor]), and the best one for the initializer () is chosen through overload resolution\r\n// ([over.match]).\r\n// The constructor thus selected is called, with an empty argument list, to initialize the object.\"\r\n// N4950 [class.base.init]/9, /9.3:\r\n// \"In a non-delegating constructor other than an implicitly-defined copy/move constructor ([class.copy.ctor]),\r\n// if a given potentially constructed subobject is not designated by a mem-initializer-id (including the case\r\n// where there is no mem-initializer-list because the constructor has no ctor-initializer), then [...]\r\n// - otherwise, the entity is default-initialized ([dcl.init]).\"\r\n// N4950 [dcl.init.general]/7, /7.2, /7.3:\r\n// \"To default-initialize an object of type T means: [...]\r\n// - If T is an array type, each element is default-initialized.\r\n// - Otherwise, no initialization is performed.\"\r\n// Therefore, _Mydata's elements are not initialized.\r\nstruct _Big_integer_flt {\r\n#pragma warning(push)\r\n#pragma warning(disable : 26495) // Variable 'std::_Big_integer_flt::_Mydata' is uninitialized.\r\n                                 // Always initialize a member variable (type.6).\r\n    _Big_integer_flt() noexcept : _Myused(0) {}\r\n#pragma warning(pop)\r\n\r\n    _Big_integer_flt(const _Big_integer_flt& _Other) noexcept : _Myused(_Other._Myused) {\r\n        _CSTD memcpy(_Mydata, _Other._Mydata, _Other._Myused * sizeof(uint32_t));\r\n    }\r\n\r\n    _Big_integer_flt& operator=(const _Big_integer_flt& _Other) noexcept {\r\n        _Myused = _Other._Myused;\r\n        _CSTD memmove(_Mydata, _Other._Mydata, _Other._Myused * sizeof(uint32_t));\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD bool operator<(const _Big_integer_flt& _Rhs) const noexcept {\r\n        if (_Myused != _Rhs._Myused) {\r\n            return _Myused < _Rhs._Myused;\r\n        }\r\n\r\n        for (uint32_t _Ix = _Myused - 1; _Ix != static_cast<uint32_t>(-1); --_Ix) {\r\n            if (_Mydata[_Ix] != _Rhs._Mydata[_Ix]) {\r\n                return _Mydata[_Ix] < _Rhs._Mydata[_Ix];\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    static constexpr uint32_t _Maximum_bits = 1074 // 1074 bits required to represent 2^1074\r\n                                            + 2552 // ceil(log2(10^768))\r\n                                            + 54; // shift space\r\n\r\n    static constexpr uint32_t _Element_bits = 32;\r\n\r\n    static constexpr uint32_t _Element_count = (_Maximum_bits + _Element_bits - 1) / _Element_bits;\r\n\r\n    uint32_t _Myused; // The number of elements currently in use\r\n    uint32_t _Mydata[_Element_count]; // The number, stored in little-endian form\r\n};\r\n\r\n_NODISCARD inline _Big_integer_flt _Make_big_integer_flt_one() noexcept {\r\n    _Big_integer_flt _Xval{};\r\n    _Xval._Mydata[0] = 1;\r\n    _Xval._Myused    = 1;\r\n    return _Xval;\r\n}\r\n\r\n_NODISCARD inline uint32_t _Bit_scan_reverse(const _Big_integer_flt& _Xval) noexcept {\r\n    if (_Xval._Myused == 0) {\r\n        return 0;\r\n    }\r\n\r\n    const uint32_t _Bx = _Xval._Myused - 1;\r\n\r\n    unsigned long _Index; // Intentionally uninitialized for better codegen\r\n\r\n    _STL_INTERNAL_CHECK(_Xval._Mydata[_Bx] != 0); // _Big_integer_flt should always be trimmed\r\n\r\n    // CodeQL [SM02313] _Index is always initialized: we've guaranteed that _Xval._Mydata[_Bx] is non-zero.\r\n    _BitScanReverse(&_Index, _Xval._Mydata[_Bx]);\r\n\r\n    return _Index + 1 + _Bx * _Big_integer_flt::_Element_bits;\r\n}\r\n\r\n// Shifts the high-precision integer _Xval by _Nx bits to the left. Returns true if the left shift was successful;\r\n// false if it overflowed. When overflow occurs, the high-precision integer is reset to zero.\r\n_NODISCARD inline bool _Shift_left(_Big_integer_flt& _Xval, const uint32_t _Nx) noexcept {\r\n    if (_Xval._Myused == 0) {\r\n        return true;\r\n    }\r\n\r\n    const uint32_t _Unit_shift = _Nx / _Big_integer_flt::_Element_bits;\r\n    const uint32_t _Bit_shift  = _Nx % _Big_integer_flt::_Element_bits;\r\n\r\n    if (_Xval._Myused + _Unit_shift > _Big_integer_flt::_Element_count) {\r\n        // Unit shift will overflow.\r\n        _Xval._Myused = 0;\r\n        return false;\r\n    }\r\n\r\n    if (_Bit_shift == 0) {\r\n        _CSTD memmove(_Xval._Mydata + _Unit_shift, _Xval._Mydata, _Xval._Myused * sizeof(uint32_t));\r\n        _Xval._Myused += _Unit_shift;\r\n    } else {\r\n        const bool _Bit_shifts_into_next_unit =\r\n            _Bit_shift > (_Big_integer_flt::_Element_bits - _Bit_scan_reverse(_Xval._Mydata[_Xval._Myused - 1]));\r\n\r\n        const uint32_t _New_used = _Xval._Myused + _Unit_shift + static_cast<uint32_t>(_Bit_shifts_into_next_unit);\r\n\r\n        if (_New_used > _Big_integer_flt::_Element_count) {\r\n            // Bit shift will overflow.\r\n            _Xval._Myused = 0;\r\n            return false;\r\n        }\r\n\r\n        const uint32_t _Msb_bits = _Bit_shift;\r\n        const uint32_t _Lsb_bits = _Big_integer_flt::_Element_bits - _Msb_bits;\r\n\r\n        const uint32_t _Lsb_mask = (1UL << _Lsb_bits) - 1UL;\r\n        const uint32_t _Msb_mask = ~_Lsb_mask;\r\n\r\n        // If _Unit_shift == 0, this will wraparound, which is okay.\r\n        for (uint32_t _Dest_index = _New_used - 1; _Dest_index != _Unit_shift - 1; --_Dest_index) {\r\n            // performance note: PSLLDQ and PALIGNR instructions could be more efficient here\r\n\r\n            // If _Bit_shifts_into_next_unit, the first iteration will trigger the bounds check below, which is okay.\r\n            const uint32_t _Upper_source_index = _Dest_index - _Unit_shift;\r\n\r\n            // When _Dest_index == _Unit_shift, this will wraparound, which is okay (see bounds check below).\r\n            const uint32_t _Lower_source_index = _Dest_index - _Unit_shift - 1;\r\n\r\n            const uint32_t _Upper_source = _Upper_source_index < _Xval._Myused ? _Xval._Mydata[_Upper_source_index] : 0;\r\n            const uint32_t _Lower_source = _Lower_source_index < _Xval._Myused ? _Xval._Mydata[_Lower_source_index] : 0;\r\n\r\n            const uint32_t _Shifted_upper_source = (_Upper_source & _Lsb_mask) << _Msb_bits;\r\n            const uint32_t _Shifted_lower_source = (_Lower_source & _Msb_mask) >> _Lsb_bits;\r\n\r\n            const uint32_t _Combined_shifted_source = _Shifted_upper_source | _Shifted_lower_source;\r\n\r\n            _Xval._Mydata[_Dest_index] = _Combined_shifted_source;\r\n        }\r\n\r\n        _Xval._Myused = _New_used;\r\n    }\r\n\r\n    _CSTD memset(_Xval._Mydata, 0, _Unit_shift * sizeof(uint32_t));\r\n\r\n    return true;\r\n}\r\n\r\n// Adds a 32-bit _Value to the high-precision integer _Xval. Returns true if the addition was successful;\r\n// false if it overflowed. When overflow occurs, the high-precision integer is reset to zero.\r\n_NODISCARD inline bool _Add(_Big_integer_flt& _Xval, const uint32_t _Value) noexcept {\r\n    if (_Value == 0) {\r\n        return true;\r\n    }\r\n\r\n    uint32_t _Carry = _Value;\r\n    for (uint32_t _Ix = 0; _Ix != _Xval._Myused; ++_Ix) {\r\n        const uint64_t _Result = static_cast<uint64_t>(_Xval._Mydata[_Ix]) + _Carry;\r\n        _Xval._Mydata[_Ix]     = static_cast<uint32_t>(_Result);\r\n        _Carry                 = static_cast<uint32_t>(_Result >> 32);\r\n    }\r\n\r\n    if (_Carry != 0) {\r\n        if (_Xval._Myused < _Big_integer_flt::_Element_count) {\r\n            _Xval._Mydata[_Xval._Myused] = _Carry;\r\n            ++_Xval._Myused;\r\n        } else {\r\n            _Xval._Myused = 0;\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n_NODISCARD inline uint32_t _Add_carry(uint32_t& _Ux1, const uint32_t _Ux2, const uint32_t _U_carry) noexcept {\r\n    const uint64_t _Uu = static_cast<uint64_t>(_Ux1) + _Ux2 + _U_carry;\r\n    _Ux1               = static_cast<uint32_t>(_Uu);\r\n    return static_cast<uint32_t>(_Uu >> 32);\r\n}\r\n\r\n_NODISCARD inline uint32_t _Add_multiply_carry(\r\n    uint32_t& _U_add, const uint32_t _U_mul_1, const uint32_t _U_mul_2, const uint32_t _U_carry) noexcept {\r\n    const uint64_t _Uu_res = static_cast<uint64_t>(_U_mul_1) * _U_mul_2 + _U_add + _U_carry;\r\n    _U_add                 = static_cast<uint32_t>(_Uu_res);\r\n    return static_cast<uint32_t>(_Uu_res >> 32);\r\n}\r\n\r\n_NODISCARD inline uint32_t _Multiply_core(\r\n    uint32_t* const _Multiplicand, const uint32_t _Multiplicand_count, const uint32_t _Multiplier) noexcept {\r\n    uint32_t _Carry = 0;\r\n    for (uint32_t _Ix = 0; _Ix != _Multiplicand_count; ++_Ix) {\r\n        const uint64_t _Result = static_cast<uint64_t>(_Multiplicand[_Ix]) * _Multiplier + _Carry;\r\n        _Multiplicand[_Ix]     = static_cast<uint32_t>(_Result);\r\n        _Carry                 = static_cast<uint32_t>(_Result >> 32);\r\n    }\r\n\r\n    return _Carry;\r\n}\r\n\r\n// Multiplies the high-precision _Multiplicand by a 32-bit _Multiplier. Returns true if the multiplication\r\n// was successful; false if it overflowed. When overflow occurs, the _Multiplicand is reset to zero.\r\n_NODISCARD inline bool _Multiply(_Big_integer_flt& _Multiplicand, const uint32_t _Multiplier) noexcept {\r\n    if (_Multiplier == 0) {\r\n        _Multiplicand._Myused = 0;\r\n        return true;\r\n    }\r\n\r\n    if (_Multiplier == 1) {\r\n        return true;\r\n    }\r\n\r\n    if (_Multiplicand._Myused == 0) {\r\n        return true;\r\n    }\r\n\r\n    const uint32_t _Carry = _Multiply_core(_Multiplicand._Mydata, _Multiplicand._Myused, _Multiplier);\r\n    if (_Carry != 0) {\r\n        if (_Multiplicand._Myused < _Big_integer_flt::_Element_count) {\r\n            _Multiplicand._Mydata[_Multiplicand._Myused] = _Carry;\r\n            ++_Multiplicand._Myused;\r\n        } else {\r\n            _Multiplicand._Myused = 0;\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n// This high-precision integer multiplication implementation was translated from the implementation of\r\n// System.Numerics.BigIntegerBuilder.Mul in the .NET Framework sources. It multiplies the _Multiplicand\r\n// by the _Multiplier and returns true if the multiplication was successful; false if it overflowed.\r\n// When overflow occurs, the _Multiplicand is reset to zero.\r\n_NODISCARD inline bool _Multiply(_Big_integer_flt& _Multiplicand, const _Big_integer_flt& _Multiplier) noexcept {\r\n    if (_Multiplicand._Myused == 0) {\r\n        return true;\r\n    }\r\n\r\n    if (_Multiplier._Myused == 0) {\r\n        _Multiplicand._Myused = 0;\r\n        return true;\r\n    }\r\n\r\n    if (_Multiplier._Myused == 1) {\r\n        return _Multiply(_Multiplicand, _Multiplier._Mydata[0]); // when overflow occurs, resets to zero\r\n    }\r\n\r\n    if (_Multiplicand._Myused == 1) {\r\n        const uint32_t _Small_multiplier = _Multiplicand._Mydata[0];\r\n        _Multiplicand                    = _Multiplier;\r\n        return _Multiply(_Multiplicand, _Small_multiplier); // when overflow occurs, resets to zero\r\n    }\r\n\r\n    // We prefer more iterations on the inner loop and fewer on the outer:\r\n    const bool _Multiplier_is_shorter = _Multiplier._Myused < _Multiplicand._Myused;\r\n    const uint32_t* const _Rgu1       = _Multiplier_is_shorter ? _Multiplier._Mydata : _Multiplicand._Mydata;\r\n    const uint32_t* const _Rgu2       = _Multiplier_is_shorter ? _Multiplicand._Mydata : _Multiplier._Mydata;\r\n\r\n    const uint32_t _Cu1 = _Multiplier_is_shorter ? _Multiplier._Myused : _Multiplicand._Myused;\r\n    const uint32_t _Cu2 = _Multiplier_is_shorter ? _Multiplicand._Myused : _Multiplier._Myused;\r\n\r\n    _Big_integer_flt _Result{};\r\n    for (uint32_t _Iu1 = 0; _Iu1 != _Cu1; ++_Iu1) {\r\n        const uint32_t _U_cur = _Rgu1[_Iu1];\r\n        if (_U_cur == 0) {\r\n            if (_Iu1 == _Result._Myused) {\r\n                _Result._Mydata[_Iu1] = 0;\r\n                _Result._Myused       = _Iu1 + 1;\r\n            }\r\n\r\n            continue;\r\n        }\r\n\r\n        uint32_t _U_carry = 0;\r\n        uint32_t _Iu_res  = _Iu1;\r\n        for (uint32_t _Iu2 = 0; _Iu2 != _Cu2 && _Iu_res != _Big_integer_flt::_Element_count; ++_Iu2, ++_Iu_res) {\r\n            if (_Iu_res == _Result._Myused) {\r\n                _Result._Mydata[_Iu_res] = 0;\r\n                _Result._Myused          = _Iu_res + 1;\r\n            }\r\n\r\n            _U_carry = _Add_multiply_carry(_Result._Mydata[_Iu_res], _U_cur, _Rgu2[_Iu2], _U_carry);\r\n        }\r\n\r\n        while (_U_carry != 0 && _Iu_res != _Big_integer_flt::_Element_count) {\r\n            if (_Iu_res == _Result._Myused) {\r\n                _Result._Mydata[_Iu_res] = 0;\r\n                _Result._Myused          = _Iu_res + 1;\r\n            }\r\n\r\n            _U_carry = _Add_carry(_Result._Mydata[_Iu_res++], 0, _U_carry);\r\n        }\r\n\r\n        if (_Iu_res == _Big_integer_flt::_Element_count) {\r\n            _Multiplicand._Myused = 0;\r\n            return false;\r\n        }\r\n    }\r\n\r\n    // Store the _Result in the _Multiplicand and compute the actual number of elements used:\r\n    _Multiplicand = _Result;\r\n    return true;\r\n}\r\n\r\nextern const uint32_t _Large_power_data[578];\r\n\r\n// Multiplies the high-precision integer _Xval by 10^_Power. Returns true if the multiplication was successful;\r\n// false if it overflowed. When overflow occurs, the high-precision integer is reset to zero.\r\n_NODISCARD inline bool _Multiply_by_power_of_ten(_Big_integer_flt& _Xval, const uint32_t _Power) noexcept {\r\n    // To improve performance, we use a table of precomputed powers of ten, from 10^10 through 10^380, in increments\r\n    // of ten. In its unpacked form, as an array of _Big_integer_flt objects, this table consists mostly of zero\r\n    // elements. Thus, we store the table in a packed form, trimming leading and trailing zero elements. We provide an\r\n    // index that is used to unpack powers from the table, using the function that appears after this function in this\r\n    // file.\r\n\r\n    // The minimum value representable with double-precision is 5E-324.\r\n    // With the _Large_power_data table we can thus compute most multiplications with a single multiply.\r\n\r\n    struct _Unpack_index {\r\n        uint16_t _Offset; // The offset of this power's initial element in the array\r\n        uint8_t _Zeroes; // The number of omitted leading zero elements\r\n        uint8_t _Size; // The number of elements present for this power\r\n    };\r\n\r\n    static constexpr _Unpack_index _Large_power_indices[] = {{0, 0, 2}, {2, 0, 3}, {5, 0, 4}, {9, 1, 4}, {13, 1, 5},\r\n        {18, 1, 6}, {24, 2, 6}, {30, 2, 7}, {37, 2, 8}, {45, 3, 8}, {53, 3, 9}, {62, 3, 10}, {72, 4, 10}, {82, 4, 11},\r\n        {93, 4, 12}, {105, 5, 12}, {117, 5, 13}, {130, 5, 14}, {144, 5, 15}, {159, 6, 15}, {174, 6, 16}, {190, 6, 17},\r\n        {207, 7, 17}, {224, 7, 18}, {242, 7, 19}, {261, 8, 19}, {280, 8, 21}, {301, 8, 22}, {323, 9, 22}, {345, 9, 23},\r\n        {368, 9, 24}, {392, 10, 24}, {416, 10, 25}, {441, 10, 26}, {467, 10, 27}, {494, 11, 27}, {521, 11, 28},\r\n        {549, 11, 29}};\r\n\r\n    for (uint32_t _Large_power = _Power / 10; _Large_power != 0;) {\r\n        const uint32_t _Current_power =\r\n            (_STD min) (_Large_power, static_cast<uint32_t>(_STD size(_Large_power_indices)));\r\n\r\n        const _Unpack_index& _Index = _Large_power_indices[_Current_power - 1];\r\n        _Big_integer_flt _Multiplier{};\r\n        _Multiplier._Myused = static_cast<uint32_t>(_Index._Size + _Index._Zeroes);\r\n\r\n        const uint32_t* const _Source = _Large_power_data + _Index._Offset;\r\n\r\n        _CSTD memset(_Multiplier._Mydata, 0, _Index._Zeroes * sizeof(uint32_t));\r\n        _CSTD memcpy(_Multiplier._Mydata + _Index._Zeroes, _Source, _Index._Size * sizeof(uint32_t));\r\n\r\n        if (!_Multiply(_Xval, _Multiplier)) { // when overflow occurs, resets to zero\r\n            return false;\r\n        }\r\n\r\n        _Large_power -= _Current_power;\r\n    }\r\n\r\n    static constexpr uint32_t _Small_powers_of_ten[9] = {\r\n        10, 100, 1'000, 10'000, 100'000, 1'000'000, 10'000'000, 100'000'000, 1'000'000'000};\r\n\r\n    const uint32_t _Small_power = _Power % 10;\r\n\r\n    if (_Small_power == 0) {\r\n        return true;\r\n    }\r\n\r\n    return _Multiply(_Xval, _Small_powers_of_ten[_Small_power - 1]); // when overflow occurs, resets to zero\r\n}\r\n\r\n// Computes the number of zeroes higher than the most significant set bit in _Ux\r\n_NODISCARD inline uint32_t _Count_sequential_high_zeroes(const uint32_t _Ux) noexcept {\r\n    unsigned long _Index; // Intentionally uninitialized for better codegen\r\n    return _BitScanReverse(&_Index, _Ux) ? 31 - _Index : 32;\r\n}\r\n\r\n// This high-precision integer division implementation was translated from the implementation of\r\n// System.Numerics.BigIntegerBuilder.ModDivCore in the .NET Framework sources.\r\n// It computes both quotient and remainder: the remainder is stored in the _Numerator argument,\r\n// and the least significant 64 bits of the quotient are returned from the function.\r\n_NODISCARD inline uint64_t _Divide(_Big_integer_flt& _Numerator, const _Big_integer_flt& _Denominator) noexcept {\r\n    // If the _Numerator is zero, then both the quotient and remainder are zero:\r\n    if (_Numerator._Myused == 0) {\r\n        return 0;\r\n    }\r\n\r\n    // If the _Denominator is zero, then uh oh. We can't divide by zero:\r\n    _STL_INTERNAL_CHECK(_Denominator._Myused != 0); // Division by zero\r\n\r\n    uint32_t _Max_numerator_element_index         = _Numerator._Myused - 1;\r\n    const uint32_t _Max_denominator_element_index = _Denominator._Myused - 1;\r\n\r\n    // The _Numerator and _Denominator are both nonzero.\r\n    // If the _Denominator is only one element wide, we can take the fast route:\r\n    if (_Max_denominator_element_index == 0) {\r\n        const uint32_t _Small_denominator = _Denominator._Mydata[0];\r\n\r\n        if (_Max_numerator_element_index == 0) {\r\n            const uint32_t _Small_numerator = _Numerator._Mydata[0];\r\n\r\n            if (_Small_denominator == 1) {\r\n                _Numerator._Myused = 0;\r\n                return _Small_numerator;\r\n            }\r\n\r\n            _Numerator._Mydata[0] = _Small_numerator % _Small_denominator;\r\n            _Numerator._Myused    = _Numerator._Mydata[0] > 0 ? 1u : 0u;\r\n            return _Small_numerator / _Small_denominator;\r\n        }\r\n\r\n        if (_Small_denominator == 1) {\r\n            uint64_t _Quotient = _Numerator._Mydata[1];\r\n            _Quotient <<= 32;\r\n            _Quotient |= _Numerator._Mydata[0];\r\n            _Numerator._Myused = 0;\r\n            return _Quotient;\r\n        }\r\n\r\n        // We count down in the next loop, so the last assignment to _Quotient will be the correct one.\r\n        uint64_t _Quotient = 0;\r\n\r\n        uint64_t _Uu = 0;\r\n        for (uint32_t _Iv = _Max_numerator_element_index; _Iv != static_cast<uint32_t>(-1); --_Iv) {\r\n            _Uu       = (_Uu << 32) | _Numerator._Mydata[_Iv];\r\n            _Quotient = (_Quotient << 32) + static_cast<uint32_t>(_Uu / _Small_denominator);\r\n            _Uu %= _Small_denominator;\r\n        }\r\n\r\n        _Numerator._Mydata[1] = static_cast<uint32_t>(_Uu >> 32);\r\n        _Numerator._Mydata[0] = static_cast<uint32_t>(_Uu);\r\n\r\n        if (_Numerator._Mydata[1] > 0) {\r\n            _Numerator._Myused = 2u;\r\n        } else if (_Numerator._Mydata[0] > 0) {\r\n            _Numerator._Myused = 1u;\r\n        } else {\r\n            _Numerator._Myused = 0u;\r\n        }\r\n\r\n        return _Quotient;\r\n    }\r\n\r\n    if (_Max_denominator_element_index > _Max_numerator_element_index) {\r\n        return 0;\r\n    }\r\n\r\n    const uint32_t _Cu_den = _Max_denominator_element_index + 1;\r\n    const int32_t _Cu_diff = static_cast<int32_t>(_Max_numerator_element_index - _Max_denominator_element_index);\r\n\r\n    // Determine whether the result will have _Cu_diff or _Cu_diff + 1 digits:\r\n    int32_t _Cu_quo = _Cu_diff;\r\n    for (int32_t _Iu = static_cast<int32_t>(_Max_numerator_element_index);; --_Iu) {\r\n        if (_Iu < _Cu_diff) {\r\n            ++_Cu_quo;\r\n            break;\r\n        }\r\n\r\n        if (_Denominator._Mydata[_Iu - _Cu_diff] != _Numerator._Mydata[_Iu]) {\r\n            if (_Denominator._Mydata[_Iu - _Cu_diff] < _Numerator._Mydata[_Iu]) {\r\n                ++_Cu_quo;\r\n            }\r\n\r\n            break;\r\n        }\r\n    }\r\n\r\n    if (_Cu_quo == 0) {\r\n        return 0;\r\n    }\r\n\r\n    // Get the uint to use for the trial divisions. We normalize so the high bit is set:\r\n    uint32_t _U_den      = _Denominator._Mydata[_Cu_den - 1];\r\n    uint32_t _U_den_next = _Denominator._Mydata[_Cu_den - 2];\r\n\r\n    const uint32_t _Cbit_shift_left  = _Count_sequential_high_zeroes(_U_den);\r\n    const uint32_t _Cbit_shift_right = 32 - _Cbit_shift_left;\r\n    if (_Cbit_shift_left > 0) {\r\n        _U_den = (_U_den << _Cbit_shift_left) | (_U_den_next >> _Cbit_shift_right);\r\n        _U_den_next <<= _Cbit_shift_left;\r\n\r\n        if (_Cu_den > 2) {\r\n            _U_den_next |= _Denominator._Mydata[_Cu_den - 3] >> _Cbit_shift_right;\r\n        }\r\n    }\r\n\r\n    uint64_t _Quotient = 0;\r\n    for (int32_t _Iu = _Cu_quo; --_Iu >= 0;) {\r\n        // Get the high (normalized) bits of the _Numerator:\r\n        const uint32_t _U_num_hi =\r\n            (_Iu + _Cu_den <= _Max_numerator_element_index) ? _Numerator._Mydata[_Iu + _Cu_den] : 0;\r\n\r\n        uint64_t _Uu_num =\r\n            (static_cast<uint64_t>(_U_num_hi) << 32) | static_cast<uint64_t>(_Numerator._Mydata[_Iu + _Cu_den - 1]);\r\n\r\n        uint32_t _U_num_next = _Numerator._Mydata[_Iu + _Cu_den - 2];\r\n        if (_Cbit_shift_left > 0) {\r\n            _Uu_num = (_Uu_num << _Cbit_shift_left) | (_U_num_next >> _Cbit_shift_right);\r\n            _U_num_next <<= _Cbit_shift_left;\r\n\r\n            if (_Iu + _Cu_den >= 3) {\r\n                _U_num_next |= _Numerator._Mydata[_Iu + _Cu_den - 3] >> _Cbit_shift_right;\r\n            }\r\n        }\r\n\r\n        // Divide to get the quotient digit:\r\n        uint64_t _Uu_quo = _Uu_num / _U_den;\r\n        uint64_t _Uu_rem = static_cast<uint32_t>(_Uu_num % _U_den);\r\n\r\n        if (_Uu_quo > UINT32_MAX) {\r\n            _Uu_rem += _U_den * (_Uu_quo - UINT32_MAX);\r\n            _Uu_quo = UINT32_MAX;\r\n        }\r\n\r\n        while (_Uu_rem <= UINT32_MAX && _Uu_quo * _U_den_next > ((_Uu_rem << 32) | _U_num_next)) {\r\n            --_Uu_quo;\r\n            _Uu_rem += _U_den;\r\n        }\r\n\r\n        // Multiply and subtract. Note that _Uu_quo may be one too large.\r\n        // If we have a borrow at the end, we'll add the _Denominator back on and decrement _Uu_quo.\r\n        if (_Uu_quo > 0) {\r\n            uint64_t _Uu_borrow = 0;\r\n\r\n            for (uint32_t _Iu2 = 0; _Iu2 < _Cu_den; ++_Iu2) {\r\n                _Uu_borrow += _Uu_quo * _Denominator._Mydata[_Iu2];\r\n\r\n                const uint32_t _U_sub = static_cast<uint32_t>(_Uu_borrow);\r\n                _Uu_borrow >>= 32;\r\n                if (_Numerator._Mydata[_Iu + _Iu2] < _U_sub) {\r\n                    ++_Uu_borrow;\r\n                }\r\n\r\n                _Numerator._Mydata[_Iu + _Iu2] -= _U_sub;\r\n            }\r\n\r\n            if (_U_num_hi < _Uu_borrow) {\r\n                // Add, tracking carry:\r\n                uint32_t _U_carry = 0;\r\n                for (uint32_t _Iu2 = 0; _Iu2 < _Cu_den; ++_Iu2) {\r\n                    const uint64_t _Sum = static_cast<uint64_t>(_Numerator._Mydata[_Iu + _Iu2])\r\n                                        + static_cast<uint64_t>(_Denominator._Mydata[_Iu2]) + _U_carry;\r\n\r\n                    _Numerator._Mydata[_Iu + _Iu2] = static_cast<uint32_t>(_Sum);\r\n                    _U_carry                       = static_cast<uint32_t>(_Sum >> 32);\r\n                }\r\n\r\n                --_Uu_quo;\r\n            }\r\n\r\n            _Max_numerator_element_index = _Iu + _Cu_den - 1;\r\n        }\r\n\r\n        _Quotient = (_Quotient << 32) + static_cast<uint32_t>(_Uu_quo);\r\n    }\r\n\r\n    // Trim the remainder:\r\n    uint32_t _Used = _Max_numerator_element_index + 1;\r\n\r\n    while (_Used != 0 && _Numerator._Mydata[_Used - 1] == 0) {\r\n        --_Used;\r\n    }\r\n\r\n    _Numerator._Myused = _Used;\r\n\r\n    return _Quotient;\r\n}\r\n\r\n// ^^^^^^^^^^ DERIVED FROM corecrt_internal_big_integer.h ^^^^^^^^^^\r\n\r\n// vvvvvvvvvv DERIVED FROM corecrt_internal_strtox.h vvvvvvvvvv\r\n\r\n// This type is used to hold a partially-parsed string representation of a floating-point number.\r\n// The number is stored in the following form:\r\n\r\n// [sign] 0._Mymantissa * B^_Myexponent\r\n\r\n// The _Mymantissa buffer stores the mantissa digits in big-endian, binary-coded decimal form. The _Mymantissa_count\r\n// stores the number of digits present in the _Mymantissa buffer. The base B is not stored; it must be tracked\r\n// separately. Note that the base of the mantissa digits may not be the same as B (e.g., for hexadecimal\r\n// floating-point, the mantissa digits are in base 16 but the exponent is a base 2 exponent).\r\n\r\n// We consider up to 768 decimal digits during conversion. In most cases, we require nowhere near this many digits\r\n// of precision to compute the correctly rounded binary floating-point value for the input string. The worst case is\r\n// (2 - 3 * 2^-53) * 2^-1022, which has an exact decimal representation of 768 decimal digits after trimming zeroes.\r\n// This value is exactly between 0x1.ffffffffffffep-1022 and 0x1.fffffffffffffp-1022. For round-to-nearest,\r\n// ties-to-even behavior, we also need to consider whether there are any nonzero trailing decimal digits.\r\n\r\n// NOTE: The mantissa buffer count here must be kept in sync with the precision of the _Big_integer_flt type.\r\nstruct _Floating_point_string {\r\n    bool _Myis_negative;\r\n    int32_t _Myexponent;\r\n    uint32_t _Mymantissa_count;\r\n    uint8_t _Mymantissa[768];\r\n};\r\n\r\n// Stores a positive or negative zero into the _Result object\r\ntemplate <class _FloatingType>\r\nvoid _Assemble_floating_point_zero(const bool _Is_negative, _FloatingType& _Result) noexcept {\r\n    using _Floating_traits = _Floating_type_traits<_FloatingType>;\r\n    using _Uint_type       = typename _Floating_traits::_Uint_type;\r\n\r\n    _Uint_type _Sign_component = _Is_negative;\r\n    _Sign_component <<= _Floating_traits::_Sign_shift;\r\n\r\n    _Result = _Bit_cast<_FloatingType>(_Sign_component);\r\n}\r\n\r\n// Stores a positive or negative infinity into the _Result object\r\ntemplate <class _FloatingType>\r\nvoid _Assemble_floating_point_infinity(const bool _Is_negative, _FloatingType& _Result) noexcept {\r\n    using _Floating_traits = _Floating_type_traits<_FloatingType>;\r\n    using _Uint_type       = typename _Floating_traits::_Uint_type;\r\n\r\n    _Uint_type _Sign_component = _Is_negative;\r\n    _Sign_component <<= _Floating_traits::_Sign_shift;\r\n\r\n    constexpr _Uint_type _Exponent_component = _Floating_traits::_Shifted_exponent_mask;\r\n\r\n    _Result = _Bit_cast<_FloatingType>(_Sign_component | _Exponent_component);\r\n}\r\n\r\n// Determines whether a mantissa should be rounded up according to round_to_nearest given [1] the value of the least\r\n// significant bit of the mantissa, [2] the value of the next bit after the least significant bit (the \"round\" bit)\r\n// and [3] whether any trailing bits after the round bit are set.\r\n\r\n// The mantissa is treated as an unsigned integer magnitude.\r\n\r\n// For this function, \"round up\" is defined as \"increase the magnitude\" of the mantissa. (Note that this means that\r\n// if we need to round a negative value to the next largest representable value, we return false, because the next\r\n// largest representable value has a smaller magnitude.)\r\n_NODISCARD inline bool _Should_round_up(\r\n    const bool _Lsb_bit, const bool _Round_bit, const bool _Has_tail_bits) noexcept {\r\n    // If there are no insignificant set bits, the value is exactly-representable and should not be rounded.\r\n    // We could detect this with:\r\n    // const bool _Is_exactly_representable = !_Round_bit && !_Has_tail_bits;\r\n    // if (_Is_exactly_representable) { return false; }\r\n    // However, this is unnecessary given the logic below.\r\n\r\n    // If there are insignificant set bits, we need to round according to round_to_nearest.\r\n    // We need to handle two cases: we round up if either [1] the value is slightly greater\r\n    // than the midpoint between two exactly-representable values or [2] the value is exactly the midpoint\r\n    // between two exactly-representable values and the greater of the two is even (this is \"round-to-even\").\r\n    return _Round_bit && (_Has_tail_bits || _Lsb_bit);\r\n}\r\n\r\n// Computes _Value / 2^_Shift, then rounds the result according to round_to_nearest.\r\n// By the time we call this function, we will already have discarded most digits.\r\n// The caller must pass true for _Has_zero_tail if all discarded bits were zeroes.\r\n_NODISCARD inline uint64_t _Right_shift_with_rounding(\r\n    const uint64_t _Value, const uint32_t _Shift, const bool _Has_zero_tail) noexcept {\r\n    constexpr uint32_t _Total_number_of_bits = 64;\r\n    if (_Shift >= _Total_number_of_bits) {\r\n        if (_Shift == _Total_number_of_bits) {\r\n            constexpr uint64_t _Extra_bits_mask = (1ULL << (_Total_number_of_bits - 1)) - 1;\r\n            constexpr uint64_t _Round_bit_mask  = (1ULL << (_Total_number_of_bits - 1));\r\n\r\n            const bool _Round_bit = (_Value & _Round_bit_mask) != 0;\r\n            const bool _Tail_bits = !_Has_zero_tail || (_Value & _Extra_bits_mask) != 0;\r\n\r\n            // We round up the answer to 1 if the answer is greater than 0.5. Otherwise, we round down the answer to 0\r\n            // if either [1] the answer is less than 0.5 or [2] the answer is exactly 0.5.\r\n            return static_cast<uint64_t>(_Round_bit && _Tail_bits);\r\n        } else {\r\n            // If we'd need to shift 65 or more bits, the answer is less than 0.5 and is always rounded to zero:\r\n            return 0;\r\n        }\r\n    }\r\n\r\n    // Reference implementation with suboptimal codegen:\r\n    // const uint64_t _Extra_bits_mask = (1ULL << (_Shift - 1)) - 1;\r\n    // const uint64_t _Round_bit_mask  = (1ULL << (_Shift - 1));\r\n    // const uint64_t _Lsb_bit_mask    = 1ULL << _Shift;\r\n\r\n    // const bool _Lsb_bit   = (_Value & _Lsb_bit_mask) != 0;\r\n    // const bool _Round_bit = (_Value & _Round_bit_mask) != 0;\r\n    // const bool _Tail_bits = !_Has_zero_tail || (_Value & _Extra_bits_mask) != 0;\r\n\r\n    // return (_Value >> _Shift) + _Should_round_up(_Lsb_bit, _Round_bit, _Tail_bits);\r\n\r\n    // Example for optimized implementation: Let _Shift be 8.\r\n    // Bit index: ...[8]76543210\r\n    //    _Value: ...[L]RTTTTTTT\r\n    // By focusing on the bit at index _Shift, we can avoid unnecessary branching and shifting.\r\n\r\n    // Bit index: ...[8]76543210\r\n    //  _Lsb_bit: ...[L]RTTTTTTT\r\n    const uint64_t _Lsb_bit = _Value;\r\n\r\n    //  Bit index: ...9[8]76543210\r\n    // _Round_bit: ...L[R]TTTTTTT0\r\n    const uint64_t _Round_bit = _Value << 1;\r\n\r\n    // We can detect (without branching) whether any of the trailing bits are set.\r\n    // Due to _Should_round below, this computation will be used if and only if R is 1, so we can assume that here.\r\n    //      Bit index: ...9[8]76543210\r\n    //     _Round_bit: ...L[1]TTTTTTT0\r\n    // _Has_tail_bits: ....[H]........\r\n\r\n    // If all of the trailing bits T are 0, and _Has_zero_tail is true,\r\n    // then `_Round_bit - static_cast<uint64_t>(_Has_zero_tail)` will produce 0 for H (due to R being 1).\r\n    // If any of the trailing bits T are 1, or _Has_zero_tail is false,\r\n    // then `_Round_bit - static_cast<uint64_t>(_Has_zero_tail)` will produce 1 for H (due to R being 1).\r\n    const uint64_t _Has_tail_bits = _Round_bit - static_cast<uint64_t>(_Has_zero_tail);\r\n\r\n    // Finally, we can use _Should_round_up() logic with bitwise-AND and bitwise-OR,\r\n    // selecting just the bit at index _Shift.\r\n    const uint64_t _Should_round = ((_Round_bit & (_Has_tail_bits | _Lsb_bit)) >> _Shift) & uint64_t{1};\r\n\r\n    // This rounding technique is dedicated to the memory of Peppermint. =^..^=\r\n    return (_Value >> _Shift) + _Should_round;\r\n}\r\n\r\n// Converts the floating-point value [sign] (mantissa / 2^(precision-1)) * 2^exponent into the correct form for\r\n// _FloatingType and stores the result into the _Result object.\r\n// The caller must ensure that the mantissa and exponent are correctly computed such that either:\r\n// [1] min_exponent <= exponent <= max_exponent && 2^(precision-1) <= mantissa <= 2^precision, or\r\n// [2] exponent == min_exponent && 0 < mantissa <= 2^(precision-1).\r\n// (The caller should round the mantissa before calling this function. The caller doesn't need to renormalize the\r\n// mantissa when the mantissa carries over to a higher bit after rounding up.)\r\n\r\n// This function correctly handles overflow and stores an infinity in the _Result object.\r\n// (The result overflows if and only if exponent == max_exponent && mantissa == 2^precision)\r\ntemplate <class _FloatingType>\r\nvoid _Assemble_floating_point_value_no_shift(const bool _Is_negative, const int32_t _Exponent,\r\n    const typename _Floating_type_traits<_FloatingType>::_Uint_type _Mantissa, _FloatingType& _Result) noexcept {\r\n    // The following code assembles floating-point values based on an alternative interpretation of the IEEE 754 binary\r\n    // floating-point format. It is valid for all of the following cases:\r\n    // [1] normal value,\r\n    // [2] normal value, needs renormalization and exponent increment after rounding up the mantissa,\r\n    // [3] normal value, overflows after rounding up the mantissa,\r\n    // [4] subnormal value,\r\n    // [5] subnormal value, becomes a normal value after rounding up the mantissa.\r\n\r\n    // Examples for float:\r\n    // | Case |     Input     | Exponent |  Exponent  |  Exponent  |  Rounded  | Result Bits |     Result      |\r\n    // |      |               |          | + Bias - 1 |  Component |  Mantissa |             |                 |\r\n    // | ---- | ------------- | -------- | ---------- | ---------- | --------- | ----------- | --------------- |\r\n    // | [1]  | 1.000000p+0   |     +0   |    126     | 0x3f000000 |  0x800000 | 0x3f800000  | 0x1.000000p+0   |\r\n    // | [2]  | 1.ffffffp+0   |     +0   |    126     | 0x3f000000 | 0x1000000 | 0x40000000  | 0x1.000000p+1   |\r\n    // | [3]  | 1.ffffffp+127 |   +127   |    253     | 0x7e800000 | 0x1000000 | 0x7f800000  |     inf         |\r\n    // | [4]  | 0.fffffep-126 |   -126   |      0     | 0x00000000 |  0x7fffff | 0x007fffff  | 0x0.fffffep-126 |\r\n    // | [5]  | 0.ffffffp-126 |   -126   |      0     | 0x00000000 |  0x800000 | 0x00800000  | 0x1.000000p-126 |\r\n    using _Floating_traits = _Floating_type_traits<_FloatingType>;\r\n    using _Uint_type       = typename _Floating_traits::_Uint_type;\r\n\r\n    _Uint_type _Sign_component = _Is_negative;\r\n    _Sign_component <<= _Floating_traits::_Sign_shift;\r\n\r\n    _Uint_type _Exponent_component = static_cast<uint32_t>(_Exponent + (_Floating_traits::_Exponent_bias - 1));\r\n    _Exponent_component <<= _Floating_traits::_Exponent_shift;\r\n\r\n    _Result = _Bit_cast<_FloatingType>(_Sign_component | (_Exponent_component + _Mantissa));\r\n}\r\n\r\n// Converts the floating-point value [sign] (mantissa / 2^(precision-1)) * 2^exponent into the correct form for\r\n// _FloatingType and stores the result into the _Result object. The caller must ensure that the mantissa and exponent\r\n// are correctly computed such that either [1] the most significant bit of the mantissa is in the correct position for\r\n// the _FloatingType, or [2] the exponent has been correctly adjusted to account for the shift of the mantissa that will\r\n// be required.\r\n\r\n// This function correctly handles range errors and stores a zero or infinity in the _Result object\r\n// on underflow and overflow errors, respectively. This function correctly forms denormal numbers when required.\r\n\r\n// If the provided mantissa has more bits of precision than can be stored in the _Result object, the mantissa is\r\n// rounded to the available precision. Thus, if possible, the caller should provide a mantissa with at least one\r\n// more bit of precision than is required, to ensure that the mantissa is correctly rounded.\r\n// (The caller should not round the mantissa before calling this function.)\r\ntemplate <class _FloatingType>\r\n_NODISCARD errc _Assemble_floating_point_value(const uint64_t _Initial_mantissa, const int32_t _Initial_exponent,\r\n    const bool _Is_negative, const bool _Has_zero_tail, _FloatingType& _Result) noexcept {\r\n    using _Traits = _Floating_type_traits<_FloatingType>;\r\n\r\n    // Assume that the number is representable as a normal value.\r\n    // Compute the number of bits by which we must adjust the mantissa to shift it into the correct position,\r\n    // and compute the resulting base two exponent for the normalized mantissa:\r\n    const uint32_t _Initial_mantissa_bits = _Bit_scan_reverse(_Initial_mantissa);\r\n    const int32_t _Normal_mantissa_shift  = static_cast<int32_t>(_Traits::_Mantissa_bits - _Initial_mantissa_bits);\r\n    const int32_t _Normal_exponent        = _Initial_exponent - _Normal_mantissa_shift;\r\n\r\n    if (_Normal_exponent > _Traits::_Maximum_binary_exponent) {\r\n        // The exponent is too large to be represented by the floating-point type; report the overflow condition:\r\n        _Assemble_floating_point_infinity(_Is_negative, _Result);\r\n        return errc::result_out_of_range; // Overflow example: \"1e+1000\"\r\n    }\r\n\r\n    uint64_t _Mantissa = _Initial_mantissa;\r\n    int32_t _Exponent  = _Normal_exponent;\r\n    errc _Error_code{};\r\n\r\n    if (_Normal_exponent < _Traits::_Minimum_binary_exponent) {\r\n        // The exponent is too small to be represented by the floating-point type as a normal value, but it may be\r\n        // representable as a denormal value.\r\n\r\n        // The exponent of subnormal values (as defined by the mathematical model of floating-point numbers, not the\r\n        // exponent field in the bit representation) is equal to the minimum exponent of normal values.\r\n        _Exponent = _Traits::_Minimum_binary_exponent;\r\n\r\n        // Compute the number of bits by which we need to shift the mantissa in order to form a denormal number.\r\n        const int32_t _Denormal_mantissa_shift = _Initial_exponent - _Exponent;\r\n\r\n        if (_Denormal_mantissa_shift < 0) {\r\n            _Mantissa =\r\n                _Right_shift_with_rounding(_Mantissa, static_cast<uint32_t>(-_Denormal_mantissa_shift), _Has_zero_tail);\r\n\r\n            // from_chars in MSVC STL and strto[f|d|ld] in UCRT reports underflow only when the result is zero after\r\n            // rounding to the floating-point format. This behavior is different from IEEE 754 underflow exception.\r\n            if (_Mantissa == 0) {\r\n                _Error_code = errc::result_out_of_range; // Underflow example: \"1e-1000\"\r\n            }\r\n\r\n            // When we round the mantissa, the result may be so large that the number becomes a normal value.\r\n            // For example, consider the single-precision case where the mantissa is 0x01ffffff and a right shift\r\n            // of 2 is required to shift the value into position. We perform the shift in two steps: we shift by\r\n            // one bit, then we shift again and round using the dropped bit. The initial shift yields 0x00ffffff.\r\n            // The rounding shift then yields 0x007fffff and because the least significant bit was 1, we add 1\r\n            // to this number to round it. The final result is 0x00800000.\r\n\r\n            // 0x00800000 is 24 bits, which is more than the 23 bits available in the mantissa.\r\n            // Thus, we have rounded our denormal number into a normal number.\r\n\r\n            // We detect this case here and re-adjust the mantissa and exponent appropriately, to form a normal number.\r\n            // This is handled by _Assemble_floating_point_value_no_shift.\r\n        } else {\r\n            _Mantissa <<= _Denormal_mantissa_shift;\r\n        }\r\n    } else {\r\n        if (_Normal_mantissa_shift < 0) {\r\n            _Mantissa =\r\n                _Right_shift_with_rounding(_Mantissa, static_cast<uint32_t>(-_Normal_mantissa_shift), _Has_zero_tail);\r\n\r\n            // When we round the mantissa, it may produce a result that is too large. In this case,\r\n            // we divide the mantissa by two and increment the exponent (this does not change the value).\r\n            // This is handled by _Assemble_floating_point_value_no_shift.\r\n\r\n            // The increment of the exponent may have generated a value too large to be represented.\r\n            // In this case, report the overflow:\r\n            if (_Mantissa > _Traits::_Normal_mantissa_mask && _Exponent == _Traits::_Maximum_binary_exponent) {\r\n                _Error_code = errc::result_out_of_range; // Overflow example: \"1.ffffffp+127\" for float\r\n                                                         // Overflow example: \"1.fffffffffffff8p+1023\" for double\r\n            }\r\n        } else {\r\n            _Mantissa <<= _Normal_mantissa_shift;\r\n        }\r\n    }\r\n\r\n    // Assemble the floating-point value from the computed components:\r\n    using _Uint_type = typename _Traits::_Uint_type;\r\n\r\n    _Assemble_floating_point_value_no_shift(_Is_negative, _Exponent, static_cast<_Uint_type>(_Mantissa), _Result);\r\n\r\n    return _Error_code;\r\n}\r\n\r\n// This function is part of the fast track for integer floating-point strings. It takes an integer and a sign and\r\n// converts the value into its _FloatingType representation, storing the result in the _Result object. If the value\r\n// is not representable, +/-infinity is stored and overflow is reported (since this function deals with only integers,\r\n// underflow is impossible).\r\ntemplate <class _FloatingType>\r\n_NODISCARD errc _Assemble_floating_point_value_from_big_integer_flt(const _Big_integer_flt& _Integer_value,\r\n    const uint32_t _Integer_bits_of_precision, const bool _Is_negative, const bool _Has_nonzero_fractional_part,\r\n    _FloatingType& _Result) noexcept {\r\n    using _Traits = _Floating_type_traits<_FloatingType>;\r\n\r\n    constexpr int32_t _Base_exponent = _Traits::_Mantissa_bits - 1;\r\n\r\n    // Very fast case: If we have 64 bits of precision or fewer,\r\n    // we can just take the two low order elements from the _Big_integer_flt:\r\n    if (_Integer_bits_of_precision <= 64) {\r\n        constexpr int32_t _Exponent = _Base_exponent;\r\n\r\n        const uint32_t _Mantissa_low  = _Integer_value._Myused > 0 ? _Integer_value._Mydata[0] : 0;\r\n        const uint32_t _Mantissa_high = _Integer_value._Myused > 1 ? _Integer_value._Mydata[1] : 0;\r\n        const uint64_t _Mantissa      = _Mantissa_low + (static_cast<uint64_t>(_Mantissa_high) << 32);\r\n\r\n        return _Assemble_floating_point_value(\r\n            _Mantissa, _Exponent, _Is_negative, !_Has_nonzero_fractional_part, _Result);\r\n    }\r\n\r\n    const uint32_t _Top_element_bits  = _Integer_bits_of_precision % 32;\r\n    const uint32_t _Top_element_index = _Integer_bits_of_precision / 32;\r\n\r\n    const uint32_t _Middle_element_index = _Top_element_index - 1;\r\n    const uint32_t _Bottom_element_index = _Top_element_index - 2;\r\n\r\n    // Pretty fast case: If the top 64 bits occupy only two elements, we can just combine those two elements:\r\n    if (_Top_element_bits == 0) {\r\n        const int32_t _Exponent = static_cast<int32_t>(_Base_exponent + _Bottom_element_index * 32);\r\n\r\n        const uint64_t _Mantissa = _Integer_value._Mydata[_Bottom_element_index]\r\n                                 + (static_cast<uint64_t>(_Integer_value._Mydata[_Middle_element_index]) << 32);\r\n\r\n        bool _Has_zero_tail = !_Has_nonzero_fractional_part;\r\n        for (uint32_t _Ix = 0; _Has_zero_tail && _Ix != _Bottom_element_index; ++_Ix) {\r\n            _Has_zero_tail = _Integer_value._Mydata[_Ix] == 0;\r\n        }\r\n\r\n        return _Assemble_floating_point_value(_Mantissa, _Exponent, _Is_negative, _Has_zero_tail, _Result);\r\n    }\r\n\r\n    // Not quite so fast case: The top 64 bits span three elements in the _Big_integer_flt. Assemble the three pieces:\r\n    const uint32_t _Top_element_mask  = (1u << _Top_element_bits) - 1;\r\n    const uint32_t _Top_element_shift = 64 - _Top_element_bits; // Left\r\n\r\n    const uint32_t _Middle_element_shift = _Top_element_shift - 32; // Left\r\n\r\n    const uint32_t _Bottom_element_bits  = 32 - _Top_element_bits;\r\n    const uint32_t _Bottom_element_mask  = ~_Top_element_mask;\r\n    const uint32_t _Bottom_element_shift = 32 - _Bottom_element_bits; // Right\r\n\r\n    const int32_t _Exponent = static_cast<int32_t>(_Base_exponent + _Bottom_element_index * 32 + _Top_element_bits);\r\n\r\n    const uint64_t _Mantissa =\r\n        (static_cast<uint64_t>(_Integer_value._Mydata[_Top_element_index] & _Top_element_mask) << _Top_element_shift)\r\n        + (static_cast<uint64_t>(_Integer_value._Mydata[_Middle_element_index]) << _Middle_element_shift)\r\n        + (static_cast<uint64_t>(_Integer_value._Mydata[_Bottom_element_index] & _Bottom_element_mask)\r\n            >> _Bottom_element_shift);\r\n\r\n    bool _Has_zero_tail =\r\n        !_Has_nonzero_fractional_part && (_Integer_value._Mydata[_Bottom_element_index] & _Top_element_mask) == 0;\r\n\r\n    for (uint32_t _Ix = 0; _Has_zero_tail && _Ix != _Bottom_element_index; ++_Ix) {\r\n        _Has_zero_tail = _Integer_value._Mydata[_Ix] == 0;\r\n    }\r\n\r\n    return _Assemble_floating_point_value(_Mantissa, _Exponent, _Is_negative, _Has_zero_tail, _Result);\r\n}\r\n\r\n// Accumulates the decimal digits in [_First_digit, _Last_digit) into the _Result high-precision integer.\r\n// This function assumes that no overflow will occur.\r\ninline void _Accumulate_decimal_digits_into_big_integer_flt(\r\n    const uint8_t* const _First_digit, const uint8_t* const _Last_digit, _Big_integer_flt& _Result) noexcept {\r\n    // We accumulate nine digit chunks, transforming the base ten string into base one billion on the fly,\r\n    // allowing us to reduce the number of high-precision multiplication and addition operations by 8/9.\r\n    uint32_t _Accumulator       = 0;\r\n    uint32_t _Accumulator_count = 0;\r\n    for (const uint8_t* _It = _First_digit; _It != _Last_digit; ++_It) {\r\n        if (_Accumulator_count == 9) {\r\n            [[maybe_unused]] const bool _Success1 = _Multiply(_Result, 1'000'000'000); // assumes no overflow\r\n            _STL_INTERNAL_CHECK(_Success1);\r\n            [[maybe_unused]] const bool _Success2 = _Add(_Result, _Accumulator); // assumes no overflow\r\n            _STL_INTERNAL_CHECK(_Success2);\r\n\r\n            _Accumulator       = 0;\r\n            _Accumulator_count = 0;\r\n        }\r\n\r\n        _Accumulator *= 10;\r\n        _Accumulator += *_It;\r\n        ++_Accumulator_count;\r\n    }\r\n\r\n    if (_Accumulator_count != 0) {\r\n        [[maybe_unused]] const bool _Success3 =\r\n            _Multiply_by_power_of_ten(_Result, _Accumulator_count); // assumes no overflow\r\n        _STL_INTERNAL_CHECK(_Success3);\r\n        [[maybe_unused]] const bool _Success4 = _Add(_Result, _Accumulator); // assumes no overflow\r\n        _STL_INTERNAL_CHECK(_Success4);\r\n    }\r\n}\r\n\r\n// The core floating-point string parser for decimal strings. After a subject string is parsed and converted\r\n// into a _Floating_point_string object, if the subject string was determined to be a decimal string,\r\n// the object is passed to this function. This function converts the decimal real value to floating-point.\r\ntemplate <class _FloatingType>\r\n_NODISCARD errc _Convert_decimal_string_to_floating_type(\r\n    const _Floating_point_string& _Data, _FloatingType& _Result, bool _Has_zero_tail) noexcept {\r\n    using _Traits = _Floating_type_traits<_FloatingType>;\r\n\r\n    // To generate an N bit mantissa we require N + 1 bits of precision. The extra bit is used to correctly round\r\n    // the mantissa (if there are fewer bits than this available, then that's totally okay;\r\n    // in that case we use what we have and we don't need to round).\r\n    constexpr uint32_t _Required_bits_of_precision = static_cast<uint32_t>(_Traits::_Mantissa_bits + 1);\r\n\r\n    // The input is of the form 0.mantissa * 10^exponent, where 'mantissa' are the decimal digits of the mantissa\r\n    // and 'exponent' is the decimal exponent. We decompose the mantissa into two parts: an integer part and a\r\n    // fractional part. If the exponent is positive, then the integer part consists of the first 'exponent' digits,\r\n    // or all present digits if there are fewer digits. If the exponent is zero or negative, then the integer part\r\n    // is empty. In either case, the remaining digits form the fractional part of the mantissa.\r\n    const uint32_t _Positive_exponent      = static_cast<uint32_t>((_STD max) (0, _Data._Myexponent));\r\n    const uint32_t _Integer_digits_present = (_STD min) (_Positive_exponent, _Data._Mymantissa_count);\r\n    const uint32_t _Integer_digits_missing = _Positive_exponent - _Integer_digits_present;\r\n    const uint8_t* const _Integer_first    = _Data._Mymantissa;\r\n    const uint8_t* const _Integer_last     = _Data._Mymantissa + _Integer_digits_present;\r\n\r\n    const uint8_t* const _Fractional_first    = _Integer_last;\r\n    const uint8_t* const _Fractional_last     = _Data._Mymantissa + _Data._Mymantissa_count;\r\n    const uint32_t _Fractional_digits_present = static_cast<uint32_t>(_Fractional_last - _Fractional_first);\r\n\r\n    // First, we accumulate the integer part of the mantissa into a _Big_integer_flt:\r\n    _Big_integer_flt _Integer_value{};\r\n    _Accumulate_decimal_digits_into_big_integer_flt(_Integer_first, _Integer_last, _Integer_value);\r\n\r\n    if (_Integer_digits_missing > 0) {\r\n        if (!_Multiply_by_power_of_ten(_Integer_value, _Integer_digits_missing)) {\r\n            _Assemble_floating_point_infinity(_Data._Myis_negative, _Result);\r\n            return errc::result_out_of_range; // Overflow example: \"1e+2000\"\r\n        }\r\n    }\r\n\r\n    // At this point, the _Integer_value contains the value of the integer part of the mantissa. If either\r\n    // [1] this number has more than the required number of bits of precision or\r\n    // [2] the mantissa has no fractional part, then we can assemble the result immediately:\r\n    const uint32_t _Integer_bits_of_precision = _Bit_scan_reverse(_Integer_value);\r\n    {\r\n        const bool _Has_zero_fractional_part = _Fractional_digits_present == 0 && _Has_zero_tail;\r\n\r\n        if (_Integer_bits_of_precision >= _Required_bits_of_precision || _Has_zero_fractional_part) {\r\n            return _Assemble_floating_point_value_from_big_integer_flt(\r\n                _Integer_value, _Integer_bits_of_precision, _Data._Myis_negative, !_Has_zero_fractional_part, _Result);\r\n        }\r\n    }\r\n\r\n    // Otherwise, we did not get enough bits of precision from the integer part, and the mantissa has a fractional\r\n    // part. We parse the fractional part of the mantissa to obtain more bits of precision. To do this, we convert\r\n    // the fractional part into an actual fraction N/M, where the numerator N is computed from the digits of the\r\n    // fractional part, and the denominator M is computed as the power of 10 such that N/M is equal to the value\r\n    // of the fractional part of the mantissa.\r\n    _Big_integer_flt _Fractional_numerator{};\r\n    _Accumulate_decimal_digits_into_big_integer_flt(_Fractional_first, _Fractional_last, _Fractional_numerator);\r\n\r\n    const uint32_t _Fractional_denominator_exponent =\r\n        _Data._Myexponent < 0 ? _Fractional_digits_present + static_cast<uint32_t>(-_Data._Myexponent)\r\n                              : _Fractional_digits_present;\r\n\r\n    _Big_integer_flt _Fractional_denominator = _Make_big_integer_flt_one();\r\n    if (!_Multiply_by_power_of_ten(_Fractional_denominator, _Fractional_denominator_exponent)) {\r\n        // If there were any digits in the integer part, it is impossible to underflow (because the exponent\r\n        // cannot possibly be small enough), so if we underflow here it is a true underflow and we return zero.\r\n        _Assemble_floating_point_zero(_Data._Myis_negative, _Result);\r\n        return errc::result_out_of_range; // Underflow example: \"1e-2000\"\r\n    }\r\n\r\n    // Because we are using only the fractional part of the mantissa here, the numerator is guaranteed to be smaller\r\n    // than the denominator. We normalize the fraction such that the most significant bit of the numerator is in the\r\n    // same position as the most significant bit in the denominator. This ensures that when we later shift the\r\n    // numerator N bits to the left, we will produce N bits of precision.\r\n    const uint32_t _Fractional_numerator_bits   = _Bit_scan_reverse(_Fractional_numerator);\r\n    const uint32_t _Fractional_denominator_bits = _Bit_scan_reverse(_Fractional_denominator);\r\n\r\n    const uint32_t _Fractional_shift = _Fractional_denominator_bits > _Fractional_numerator_bits\r\n                                         ? _Fractional_denominator_bits - _Fractional_numerator_bits\r\n                                         : 0;\r\n\r\n    if (_Fractional_shift > 0) {\r\n        [[maybe_unused]] const bool _Shift_success1 =\r\n            _Shift_left(_Fractional_numerator, _Fractional_shift); // assumes no overflow\r\n        _STL_INTERNAL_CHECK(_Shift_success1);\r\n    }\r\n\r\n    const uint32_t _Required_fractional_bits_of_precision = _Required_bits_of_precision - _Integer_bits_of_precision;\r\n\r\n    uint32_t _Remaining_bits_of_precision_required = _Required_fractional_bits_of_precision;\r\n    if (_Integer_bits_of_precision > 0) {\r\n        // If the fractional part of the mantissa provides no bits of precision and cannot affect rounding,\r\n        // we can just take whatever bits we got from the integer part of the mantissa. This is the case for numbers\r\n        // like 5.0000000000000000000001, where the significant digits of the fractional part start so far to the\r\n        // right that they do not affect the floating-point representation.\r\n\r\n        // If the fractional shift is exactly equal to the number of bits of precision that we require,\r\n        // then no fractional bits will be part of the result, but the result may affect rounding.\r\n        // This is e.g. the case for large, odd integers with a fractional part greater than or equal to .5.\r\n        // Thus, we need to do the division to correctly round the result.\r\n        if (_Fractional_shift > _Remaining_bits_of_precision_required) {\r\n            return _Assemble_floating_point_value_from_big_integer_flt(_Integer_value, _Integer_bits_of_precision,\r\n                _Data._Myis_negative, _Fractional_digits_present != 0 || !_Has_zero_tail, _Result);\r\n        }\r\n\r\n        _Remaining_bits_of_precision_required -= _Fractional_shift;\r\n    }\r\n\r\n    // If there was no integer part of the mantissa, we will need to compute the exponent from the fractional part.\r\n    // The fractional exponent is the power of two by which we must multiply the fractional part to move it into the\r\n    // range [1.0, 2.0). This will either be the same as the shift we computed earlier, or one greater than that shift:\r\n    const uint32_t _Fractional_exponent =\r\n        _Fractional_numerator < _Fractional_denominator ? _Fractional_shift + 1 : _Fractional_shift;\r\n\r\n    [[maybe_unused]] const bool _Shift_success2 =\r\n        _Shift_left(_Fractional_numerator, _Remaining_bits_of_precision_required); // assumes no overflow\r\n    _STL_INTERNAL_CHECK(_Shift_success2);\r\n\r\n    uint64_t _Fractional_mantissa = _Divide(_Fractional_numerator, _Fractional_denominator);\r\n\r\n    _Has_zero_tail = _Has_zero_tail && _Fractional_numerator._Myused == 0;\r\n\r\n    // We may have produced more bits of precision than were required. Check, and remove any \"extra\" bits:\r\n    const uint32_t _Fractional_mantissa_bits = _Bit_scan_reverse(_Fractional_mantissa);\r\n    if (_Fractional_mantissa_bits > _Required_fractional_bits_of_precision) {\r\n        const uint32_t _Shift = _Fractional_mantissa_bits - _Required_fractional_bits_of_precision;\r\n        _Has_zero_tail        = _Has_zero_tail && (_Fractional_mantissa & ((1ULL << _Shift) - 1)) == 0;\r\n        _Fractional_mantissa >>= _Shift;\r\n    }\r\n\r\n    // Compose the mantissa from the integer and fractional parts:\r\n    const uint32_t _Integer_mantissa_low  = _Integer_value._Myused > 0 ? _Integer_value._Mydata[0] : 0;\r\n    const uint32_t _Integer_mantissa_high = _Integer_value._Myused > 1 ? _Integer_value._Mydata[1] : 0;\r\n    const uint64_t _Integer_mantissa = _Integer_mantissa_low + (static_cast<uint64_t>(_Integer_mantissa_high) << 32);\r\n\r\n    const uint64_t _Complete_mantissa =\r\n        (_Integer_mantissa << _Required_fractional_bits_of_precision) + _Fractional_mantissa;\r\n\r\n    // Compute the final exponent:\r\n    // * If the mantissa had an integer part, then the exponent is one less than the number of bits we obtained\r\n    // from the integer part. (It's one less because we are converting to the form 1.11111,\r\n    // with one 1 to the left of the decimal point.)\r\n    // * If the mantissa had no integer part, then the exponent is the fractional exponent that we computed.\r\n    // Then, in both cases, we subtract an additional one from the exponent,\r\n    // to account for the fact that we've generated an extra bit of precision, for use in rounding.\r\n    const int32_t _Final_exponent = _Integer_bits_of_precision > 0\r\n                                      ? static_cast<int32_t>(_Integer_bits_of_precision - 2)\r\n                                      : -static_cast<int32_t>(_Fractional_exponent) - 1;\r\n\r\n    return _Assemble_floating_point_value(\r\n        _Complete_mantissa, _Final_exponent, _Data._Myis_negative, _Has_zero_tail, _Result);\r\n}\r\n\r\ntemplate <class _FloatingType>\r\n_NODISCARD errc _Convert_hexadecimal_string_to_floating_type(\r\n    const _Floating_point_string& _Data, _FloatingType& _Result, bool _Has_zero_tail) noexcept {\r\n    using _Traits = _Floating_type_traits<_FloatingType>;\r\n\r\n    uint64_t _Mantissa = 0;\r\n    int32_t _Exponent  = _Data._Myexponent + _Traits::_Mantissa_bits - 1;\r\n\r\n    // Accumulate bits into the mantissa buffer\r\n    const uint8_t* const _Mantissa_last = _Data._Mymantissa + _Data._Mymantissa_count;\r\n    const uint8_t* _Mantissa_it         = _Data._Mymantissa;\r\n    while (_Mantissa_it != _Mantissa_last && _Mantissa <= _Traits::_Normal_mantissa_mask) {\r\n        _Mantissa *= 16;\r\n        _Mantissa += *_Mantissa_it++;\r\n        _Exponent -= 4; // The exponent is in binary; log2(16) == 4\r\n    }\r\n\r\n    while (_Has_zero_tail && _Mantissa_it != _Mantissa_last) {\r\n        _Has_zero_tail = *_Mantissa_it++ == 0;\r\n    }\r\n\r\n    return _Assemble_floating_point_value(_Mantissa, _Exponent, _Data._Myis_negative, _Has_zero_tail, _Result);\r\n}\r\n\r\n// ^^^^^^^^^^ DERIVED FROM corecrt_internal_strtox.h ^^^^^^^^^^\r\n\r\n// C11 6.4.2.1 \"General\"\r\n// digit: one of\r\n//     0 1 2 3 4 5 6 7 8 9\r\n\r\n// C11 6.4.4.1 \"Integer constants\"\r\n// hexadecimal-digit: one of\r\n//     0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F\r\n\r\n// C11 6.4.4.2 \"Floating constants\" (without floating-suffix, hexadecimal-prefix)\r\n// amended by C11 7.22.1.3 \"The strtod, strtof, and strtold functions\" making exponents optional\r\n// LWG-3080: \"the sign '+' may only appear in the exponent part\"\r\n\r\n// digit-sequence:\r\n//     digit\r\n//     digit-sequence digit\r\n\r\n// hexadecimal-digit-sequence:\r\n//     hexadecimal-digit\r\n//     hexadecimal-digit-sequence hexadecimal-digit\r\n\r\n// sign: one of\r\n//     + -\r\n\r\n// decimal-floating-constant:\r\n//     fractional-constant exponent-part[opt]\r\n//     digit-sequence exponent-part[opt]\r\n\r\n// fractional-constant:\r\n//     digit-sequence[opt] . digit-sequence\r\n//     digit-sequence .\r\n\r\n// exponent-part:\r\n//     e sign[opt] digit-sequence\r\n//     E sign[opt] digit-sequence\r\n\r\n// hexadecimal-floating-constant:\r\n//     hexadecimal-fractional-constant binary-exponent-part[opt]\r\n//     hexadecimal-digit-sequence binary-exponent-part[opt]\r\n\r\n// hexadecimal-fractional-constant:\r\n//     hexadecimal-digit-sequence[opt] . hexadecimal-digit-sequence\r\n//     hexadecimal-digit-sequence .\r\n\r\n// binary-exponent-part:\r\n//     p sign[opt] digit-sequence\r\n//     P sign[opt] digit-sequence\r\n\r\ntemplate <class _Floating>\r\n_NODISCARD from_chars_result _Ordinary_floating_from_chars(const char* const _First, const char* const _Last,\r\n    _Floating& _Value, const chars_format _Fmt, const bool _Minus_sign, const char* _Next) noexcept {\r\n    // vvvvvvvvvv DERIVED FROM corecrt_internal_strtox.h WITH SIGNIFICANT MODIFICATIONS vvvvvvvvvv\r\n\r\n    const bool _Is_hexadecimal = _Fmt == chars_format::hex;\r\n    const int _Base{_Is_hexadecimal ? 16 : 10};\r\n\r\n    // PERFORMANCE NOTE: _Fp_string is intentionally left uninitialized. Zero-initialization is quite expensive\r\n    // and is unnecessary. The benefit of not zero-initializing is greatest for short inputs.\r\n    _Floating_point_string _Fp_string;\r\n\r\n    // Record the optional minus sign:\r\n    _Fp_string._Myis_negative = _Minus_sign;\r\n\r\n    uint8_t* const _Mantissa_first = _Fp_string._Mymantissa;\r\n    uint8_t* const _Mantissa_last  = _STD end(_Fp_string._Mymantissa);\r\n    uint8_t* _Mantissa_it          = _Mantissa_first;\r\n\r\n    // [_Whole_begin, _Whole_end) will contain 0 or more digits/hexits\r\n    const char* const _Whole_begin = _Next;\r\n\r\n    // Skip past any leading zeroes in the mantissa:\r\n    for (; _Next != _Last && *_Next == '0'; ++_Next) {\r\n    }\r\n    const char* const _Leading_zero_end = _Next;\r\n\r\n    bool _Has_zero_tail = true;\r\n\r\n    // Scan the integer part of the mantissa:\r\n    for (; _Next != _Last; ++_Next) {\r\n        const unsigned char _Digit_value = _Digit_from_char(*_Next);\r\n\r\n        if (_Digit_value >= _Base) {\r\n            break;\r\n        }\r\n\r\n        if (_Mantissa_it != _Mantissa_last) {\r\n            *_Mantissa_it++ = _Digit_value;\r\n        } else {\r\n            _Has_zero_tail = _Has_zero_tail && _Digit_value == 0;\r\n        }\r\n    }\r\n    const char* const _Whole_end = _Next;\r\n\r\n    // The exponent adjustment holds the number of digits in the mantissa buffer that appeared before the radix point.\r\n    // It can be negative, and leading zeroes in the integer part are ignored. Examples:\r\n    // For \"03333.111\", it is 4.\r\n    // For \"00000.111\", it is 0.\r\n    // For \"00000.001\", it is -2.\r\n    ptrdiff_t _Exponent_adjustment = _Whole_end - _Leading_zero_end;\r\n\r\n    // [_Whole_end, _Dot_end) will contain 0 or 1 '.' characters\r\n    if (_Next != _Last && *_Next == '.') {\r\n        ++_Next;\r\n    }\r\n    const char* const _Dot_end = _Next;\r\n\r\n    // [_Dot_end, _Frac_end) will contain 0 or more digits/hexits\r\n\r\n    // If we haven't yet scanned any nonzero digits, continue skipping over zeroes,\r\n    // updating the exponent adjustment to account for the zeroes we are skipping:\r\n    if (_Exponent_adjustment == 0) {\r\n        for (; _Next != _Last && *_Next == '0'; ++_Next) {\r\n        }\r\n\r\n        _Exponent_adjustment = _Dot_end - _Next;\r\n    }\r\n\r\n    // Scan the fractional part of the mantissa:\r\n    for (; _Next != _Last; ++_Next) {\r\n        const unsigned char _Digit_value = _Digit_from_char(*_Next);\r\n\r\n        if (_Digit_value >= _Base) {\r\n            break;\r\n        }\r\n\r\n        if (_Mantissa_it != _Mantissa_last) {\r\n            *_Mantissa_it++ = _Digit_value;\r\n        } else {\r\n            _Has_zero_tail = _Has_zero_tail && _Digit_value == 0;\r\n        }\r\n    }\r\n    const char* const _Frac_end = _Next;\r\n\r\n    // We must have at least 1 digit/hexit\r\n    if (_Whole_begin == _Whole_end && _Dot_end == _Frac_end) {\r\n        return {_First, errc::invalid_argument};\r\n    }\r\n\r\n    const char _Exponent_prefix{_Is_hexadecimal ? 'p' : 'e'};\r\n\r\n    bool _Exponent_is_negative = false;\r\n    bool _Exp_abs_too_large    = false;\r\n    ptrdiff_t _Exponent        = 0;\r\n\r\n    constexpr int _Maximum_temporary_decimal_exponent = 5200;\r\n    constexpr int _Minimum_temporary_decimal_exponent = -5200;\r\n\r\n    if (_Fmt != chars_format::fixed // N4950 [charconv.from.chars]/6.3\r\n                                    // \"if fmt has chars_format::fixed set but not chars_format::scientific,\r\n                                    // the optional exponent part shall not appear\"\r\n        && _Next != _Last && (static_cast<unsigned char>(*_Next) | 0x20) == _Exponent_prefix) { // found exponent prefix\r\n        const char* _Unread = _Next + 1;\r\n\r\n        if (_Unread != _Last && (*_Unread == '+' || *_Unread == '-')) { // found optional sign\r\n            _Exponent_is_negative = *_Unread == '-';\r\n            ++_Unread;\r\n        }\r\n\r\n        while (_Unread != _Last) {\r\n            const unsigned char _Digit_value = _Digit_from_char(*_Unread);\r\n\r\n            if (_Digit_value >= 10) {\r\n                break;\r\n            }\r\n\r\n            // found decimal digit\r\n\r\n            if (_Exponent < PTRDIFF_MAX / 10 || (_Exponent == PTRDIFF_MAX / 10 && _Digit_value <= PTRDIFF_MAX % 10)) {\r\n                _Exponent = _Exponent * 10 + _Digit_value;\r\n            } else {\r\n                _Exp_abs_too_large = true;\r\n            }\r\n\r\n            ++_Unread;\r\n            _Next = _Unread; // consume exponent-part/binary-exponent-part\r\n        }\r\n\r\n        if (_Exponent_is_negative) {\r\n            _Exponent = -_Exponent;\r\n        }\r\n    }\r\n\r\n    // [_Frac_end, _Exponent_end) will either be empty or contain \"[EPep] sign[opt] digit-sequence\"\r\n    const char* const _Exponent_end = _Next;\r\n\r\n    if (_Fmt == chars_format::scientific\r\n        && _Frac_end == _Exponent_end) { // N4950 [charconv.from.chars]/6.2\r\n                                         // \"if fmt has chars_format::scientific set but not chars_format::fixed,\r\n                                         // the otherwise optional exponent part shall appear\"\r\n        return {_First, errc::invalid_argument};\r\n    }\r\n\r\n    // Remove trailing zeroes from mantissa:\r\n    while (_Mantissa_it != _Mantissa_first && *(_Mantissa_it - 1) == 0) {\r\n        --_Mantissa_it;\r\n    }\r\n\r\n    // If the mantissa buffer is empty, the mantissa was composed of all zeroes (so the mantissa is 0).\r\n    // All such strings have the value zero, regardless of what the exponent is (because 0 * b^n == 0 for all b and n).\r\n    // We can return now. Note that we defer this check until after we scan the exponent, so that we can correctly\r\n    // update _Next to point past the end of the exponent.\r\n    if (_Mantissa_it == _Mantissa_first) {\r\n        _STL_INTERNAL_CHECK(_Has_zero_tail);\r\n        _Assemble_floating_point_zero(_Fp_string._Myis_negative, _Value);\r\n        return {_Next, errc{}};\r\n    }\r\n\r\n    // Handle exponent of an overly large absolute value.\r\n    if (_Exp_abs_too_large) {\r\n        if (_Exponent > 0) {\r\n            _Assemble_floating_point_infinity(_Fp_string._Myis_negative, _Value);\r\n            return {_Next, errc::result_out_of_range};\r\n        } else {\r\n            _Assemble_floating_point_zero(_Fp_string._Myis_negative, _Value);\r\n            return {_Next, errc::result_out_of_range};\r\n        }\r\n    }\r\n\r\n    // Adjust _Exponent and _Exponent_adjustment when they have different signedness to avoid overflow.\r\n    if (_Exponent > 0 && _Exponent_adjustment < 0) {\r\n        if (_Is_hexadecimal) {\r\n            const ptrdiff_t _Further_adjustment = (_STD max) (-((_Exponent - 1) / 4 + 1), _Exponent_adjustment);\r\n            _Exponent += _Further_adjustment * 4;\r\n            _Exponent_adjustment -= _Further_adjustment;\r\n        } else {\r\n            const ptrdiff_t _Further_adjustment = (_STD max) (-_Exponent, _Exponent_adjustment);\r\n            _Exponent += _Further_adjustment;\r\n            _Exponent_adjustment -= _Further_adjustment;\r\n        }\r\n    } else if (_Exponent < 0 && _Exponent_adjustment > 0) {\r\n        if (_Is_hexadecimal) {\r\n            const ptrdiff_t _Further_adjustment = (_STD min) ((-_Exponent - 1) / 4 + 1, _Exponent_adjustment);\r\n            _Exponent += _Further_adjustment * 4;\r\n            _Exponent_adjustment -= _Further_adjustment;\r\n        } else {\r\n            const ptrdiff_t _Further_adjustment = (_STD min) (-_Exponent, _Exponent_adjustment);\r\n            _Exponent += _Further_adjustment;\r\n            _Exponent_adjustment -= _Further_adjustment;\r\n        }\r\n    }\r\n\r\n    // In hexadecimal floating constants, the exponent is a base 2 exponent. The exponent adjustment computed during\r\n    // parsing has the same base as the mantissa (so, 16 for hexadecimal floating constants).\r\n    // We therefore need to scale the base 16 multiplier to base 2 by multiplying by log2(16):\r\n    const int _Exponent_adjustment_multiplier{_Is_hexadecimal ? 4 : 1};\r\n\r\n    // And then _Exponent and _Exponent_adjustment are either both non-negative or both non-positive.\r\n    // So we can detect out-of-range cases directly.\r\n    if (_Exponent > _Maximum_temporary_decimal_exponent\r\n        || _Exponent_adjustment > _Maximum_temporary_decimal_exponent / _Exponent_adjustment_multiplier) {\r\n        _Assemble_floating_point_infinity(_Fp_string._Myis_negative, _Value);\r\n        return {_Next, errc::result_out_of_range}; // Overflow example: \"1e+9999\"\r\n    }\r\n\r\n    if (_Exponent < _Minimum_temporary_decimal_exponent\r\n        || _Exponent_adjustment < _Minimum_temporary_decimal_exponent / _Exponent_adjustment_multiplier) {\r\n        _Assemble_floating_point_zero(_Fp_string._Myis_negative, _Value);\r\n        return {_Next, errc::result_out_of_range}; // Underflow example: \"1e-9999\"\r\n    }\r\n\r\n    _Exponent += _Exponent_adjustment * _Exponent_adjustment_multiplier;\r\n\r\n    // Verify that after adjustment the exponent isn't wildly out of range (if it is, it isn't representable\r\n    // in any supported floating-point format).\r\n    if (_Exponent > _Maximum_temporary_decimal_exponent) {\r\n        _Assemble_floating_point_infinity(_Fp_string._Myis_negative, _Value);\r\n        return {_Next, errc::result_out_of_range}; // Overflow example: \"10e+5199\"\r\n    }\r\n\r\n    if (_Exponent < _Minimum_temporary_decimal_exponent) {\r\n        _Assemble_floating_point_zero(_Fp_string._Myis_negative, _Value);\r\n        return {_Next, errc::result_out_of_range}; // Underflow example: \"0.001e-5199\"\r\n    }\r\n\r\n    _Fp_string._Myexponent       = static_cast<int32_t>(_Exponent);\r\n    _Fp_string._Mymantissa_count = static_cast<uint32_t>(_Mantissa_it - _Mantissa_first);\r\n\r\n    if (_Is_hexadecimal) {\r\n        const errc _Ec = _Convert_hexadecimal_string_to_floating_type(_Fp_string, _Value, _Has_zero_tail);\r\n        return {_Next, _Ec};\r\n    } else {\r\n        const errc _Ec = _Convert_decimal_string_to_floating_type(_Fp_string, _Value, _Has_zero_tail);\r\n        return {_Next, _Ec};\r\n    }\r\n\r\n    // ^^^^^^^^^^ DERIVED FROM corecrt_internal_strtox.h WITH SIGNIFICANT MODIFICATIONS ^^^^^^^^^^\r\n}\r\n\r\n_NODISCARD inline bool _Starts_with_case_insensitive(\r\n    const char* _First, const char* const _Last, const char* _Lowercase) noexcept {\r\n    // pre: _Lowercase contains only ['a', 'z'] and is null-terminated\r\n    for (; _First != _Last && *_Lowercase != '\\0'; ++_First, ++_Lowercase) {\r\n        if ((static_cast<unsigned char>(*_First) | 0x20) != *_Lowercase) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return *_Lowercase == '\\0';\r\n}\r\n\r\ntemplate <class _Floating>\r\n_NODISCARD from_chars_result _Infinity_from_chars(const char* const _First, const char* const _Last, _Floating& _Value,\r\n    const bool _Minus_sign, const char* _Next) noexcept {\r\n    // pre: _Next points at 'i' (case-insensitively)\r\n    if (!_Starts_with_case_insensitive(_Next + 1, _Last, \"nf\")) { // definitely invalid\r\n        return {_First, errc::invalid_argument};\r\n    }\r\n\r\n    // definitely inf\r\n    _Next += 3;\r\n\r\n    if (_Starts_with_case_insensitive(_Next, _Last, \"inity\")) { // definitely infinity\r\n        _Next += 5;\r\n    }\r\n\r\n    _Assemble_floating_point_infinity(_Minus_sign, _Value);\r\n\r\n    return {_Next, errc{}};\r\n}\r\n\r\ntemplate <class _Floating>\r\n_NODISCARD from_chars_result _Nan_from_chars(const char* const _First, const char* const _Last, _Floating& _Value,\r\n    bool _Minus_sign, const char* _Next) noexcept {\r\n    // pre: _Next points at 'n' (case-insensitively)\r\n    if (!_Starts_with_case_insensitive(_Next + 1, _Last, \"an\")) { // definitely invalid\r\n        return {_First, errc::invalid_argument};\r\n    }\r\n\r\n    // definitely nan\r\n    _Next += 3;\r\n\r\n    bool _Quiet = true;\r\n\r\n    if (_Next != _Last && *_Next == '(') { // possibly nan(n-char-sequence[opt])\r\n        const char* const _Seq_begin = _Next + 1;\r\n\r\n        for (const char* _Temp = _Seq_begin; _Temp != _Last; ++_Temp) {\r\n            if (*_Temp == ')') { // definitely nan(n-char-sequence[opt])\r\n                _Next = _Temp + 1;\r\n\r\n                if (_Temp - _Seq_begin == 3\r\n                    && _Starts_with_case_insensitive(_Seq_begin, _Temp, \"ind\")) { // definitely nan(ind)\r\n                    // The UCRT considers indeterminate NaN to be negative quiet NaN with no payload bits set.\r\n                    // It parses \"nan(ind)\" and \"-nan(ind)\" identically.\r\n                    _Minus_sign = true;\r\n                } else if (_Temp - _Seq_begin == 4\r\n                           && _Starts_with_case_insensitive(_Seq_begin, _Temp, \"snan\")) { // definitely nan(snan)\r\n                    _Quiet = false;\r\n                }\r\n\r\n                break;\r\n            } else if (*_Temp == '_' || ('0' <= *_Temp && *_Temp <= '9') || ('A' <= *_Temp && *_Temp <= 'Z')\r\n                       || ('a' <= *_Temp && *_Temp <= 'z')) { // possibly nan(n-char-sequence[opt]), keep going\r\n            } else { // definitely nan, not nan(n-char-sequence[opt])\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    // Intentional behavior difference between the UCRT and the STL:\r\n    // strtod()/strtof() parse plain \"nan\" as being a quiet NaN with all payload bits set.\r\n    // numeric_limits::quiet_NaN() returns a quiet NaN with no payload bits set.\r\n    // This implementation of from_chars() has chosen to be consistent with numeric_limits.\r\n\r\n    using _Traits    = _Floating_type_traits<_Floating>;\r\n    using _Uint_type = typename _Traits::_Uint_type;\r\n\r\n    _Uint_type _Uint_value = _Traits::_Shifted_exponent_mask;\r\n\r\n    if (_Minus_sign) {\r\n        _Uint_value |= _Traits::_Shifted_sign_mask;\r\n    }\r\n\r\n    if (_Quiet) {\r\n        _Uint_value |= _Traits::_Special_nan_mantissa_mask;\r\n    } else {\r\n        _Uint_value |= 1;\r\n    }\r\n\r\n    _Value = _Bit_cast<_Floating>(_Uint_value);\r\n\r\n    return {_Next, errc{}};\r\n}\r\n\r\ntemplate <class _Floating>\r\n_NODISCARD from_chars_result _Floating_from_chars(\r\n    const char* const _First, const char* const _Last, _Floating& _Value, const chars_format _Fmt) noexcept {\r\n    _Adl_verify_range(_First, _Last);\r\n\r\n    _STL_ASSERT(_Fmt == chars_format::general || _Fmt == chars_format::scientific || _Fmt == chars_format::fixed\r\n                    || _Fmt == chars_format::hex,\r\n        \"invalid format in from_chars()\");\r\n\r\n    bool _Minus_sign = false;\r\n\r\n    const char* _Next = _First;\r\n\r\n    if (_Next == _Last) {\r\n        return {_First, errc::invalid_argument};\r\n    }\r\n\r\n    if (*_Next == '-') {\r\n        _Minus_sign = true;\r\n        ++_Next;\r\n\r\n        if (_Next == _Last) {\r\n            return {_First, errc::invalid_argument};\r\n        }\r\n    }\r\n\r\n    // Distinguish ordinary numbers versus inf/nan with a single test.\r\n    // ordinary numbers start with ['.'] ['0', '9'] ['A', 'F'] ['a', 'f']\r\n    // inf/nan start with ['I'] ['N'] ['i'] ['n']\r\n    // All other starting characters are invalid.\r\n    // Setting the 0x20 bit folds these ranges in a useful manner.\r\n    // ordinary (and some invalid) starting characters are folded to ['.'] ['0', '9'] ['a', 'f']\r\n    // inf/nan starting characters are folded to ['i'] ['n']\r\n    // These are ordered: ['.'] ['0', '9'] ['a', 'f'] < ['i'] ['n']\r\n    // Note that invalid starting characters end up on both sides of this test.\r\n    const unsigned char _Folded_start = static_cast<unsigned char>(static_cast<unsigned char>(*_Next) | 0x20);\r\n\r\n    if (_Folded_start <= 'f') { // possibly an ordinary number\r\n        return _Ordinary_floating_from_chars(_First, _Last, _Value, _Fmt, _Minus_sign, _Next);\r\n    } else if (_Folded_start == 'i') { // possibly inf\r\n        return _Infinity_from_chars(_First, _Last, _Value, _Minus_sign, _Next);\r\n    } else if (_Folded_start == 'n') { // possibly nan\r\n        return _Nan_from_chars(_First, _Last, _Value, _Minus_sign, _Next);\r\n    } else { // definitely invalid\r\n        return {_First, errc::invalid_argument};\r\n    }\r\n}\r\n\r\n_EXPORT_STD inline from_chars_result from_chars(const char* const _First, const char* const _Last, float& _Value,\r\n    const chars_format _Fmt = chars_format::general) noexcept /* strengthened */ {\r\n    return _Floating_from_chars(_First, _Last, _Value, _Fmt);\r\n}\r\n_EXPORT_STD inline from_chars_result from_chars(const char* const _First, const char* const _Last, double& _Value,\r\n    const chars_format _Fmt = chars_format::general) noexcept /* strengthened */ {\r\n    return _Floating_from_chars(_First, _Last, _Value, _Fmt);\r\n}\r\n_EXPORT_STD inline from_chars_result from_chars(const char* const _First, const char* const _Last, long double& _Value,\r\n    const chars_format _Fmt = chars_format::general) noexcept /* strengthened */ {\r\n    double _Dbl; // intentionally default-init\r\n    const from_chars_result _Result = _Floating_from_chars(_First, _Last, _Dbl, _Fmt);\r\n\r\n    if (_Result.ec == errc{}) {\r\n        _Value = _Dbl;\r\n    }\r\n\r\n    return _Result;\r\n}\r\n\r\ntemplate <class _Floating>\r\n_NODISCARD to_chars_result _Floating_to_chars_hex_precision(\r\n    char* _First, char* const _Last, const _Floating _Value, int _Precision) noexcept {\r\n\r\n    // * Determine the effective _Precision.\r\n    // * Later, we'll decrement _Precision when printing each hexit after the decimal point.\r\n\r\n    // The hexits after the decimal point correspond to the explicitly stored fraction bits.\r\n    // float explicitly stores 23 fraction bits. 23 / 4 == 5.75, which is 6 hexits.\r\n    // double explicitly stores 52 fraction bits. 52 / 4 == 13, which is 13 hexits.\r\n    constexpr int _Full_precision         = is_same_v<_Floating, float> ? 6 : 13;\r\n    constexpr int _Adjusted_explicit_bits = _Full_precision * 4;\r\n\r\n    if (_Precision < 0) {\r\n        // C11 7.21.6.1 \"The fprintf function\"/5: \"A negative precision argument is taken as if the precision were\r\n        // omitted.\" /8: \"if the precision is missing and FLT_RADIX is a power of 2, then the precision is sufficient\r\n        // for an exact representation of the value\"\r\n        _Precision = _Full_precision;\r\n    }\r\n\r\n    // * Extract the _Ieee_mantissa and _Ieee_exponent.\r\n    using _Traits    = _Floating_type_traits<_Floating>;\r\n    using _Uint_type = typename _Traits::_Uint_type;\r\n\r\n    const _Uint_type _Uint_value    = _Bit_cast<_Uint_type>(_Value);\r\n    const _Uint_type _Ieee_mantissa = _Uint_value & _Traits::_Denormal_mantissa_mask;\r\n    const int32_t _Ieee_exponent    = static_cast<int32_t>(_Uint_value >> _Traits::_Exponent_shift);\r\n\r\n    // * Prepare the _Adjusted_mantissa. This is aligned to hexit boundaries,\r\n    // * with the implicit bit restored (0 for zero values and subnormal values, 1 for normal values).\r\n    // * Also calculate the _Unbiased_exponent. This unifies the processing of zero, subnormal, and normal values.\r\n    _Uint_type _Adjusted_mantissa;\r\n\r\n    if constexpr (is_same_v<_Floating, float>) {\r\n        _Adjusted_mantissa = _Ieee_mantissa << 1; // align to hexit boundary (23 isn't divisible by 4)\r\n    } else {\r\n        _Adjusted_mantissa = _Ieee_mantissa; // already aligned (52 is divisible by 4)\r\n    }\r\n\r\n    int32_t _Unbiased_exponent;\r\n\r\n    if (_Ieee_exponent == 0) { // zero or subnormal\r\n        // implicit bit is 0\r\n\r\n        if (_Ieee_mantissa == 0) { // zero\r\n            // C11 7.21.6.1 \"The fprintf function\"/8: \"If the value is zero, the exponent is zero.\"\r\n            _Unbiased_exponent = 0;\r\n        } else { // subnormal\r\n            _Unbiased_exponent = 1 - _Traits::_Exponent_bias;\r\n        }\r\n    } else { // normal\r\n        _Adjusted_mantissa |= _Uint_type{1} << _Adjusted_explicit_bits; // implicit bit is 1\r\n        _Unbiased_exponent = _Ieee_exponent - _Traits::_Exponent_bias;\r\n    }\r\n\r\n    // _Unbiased_exponent is within [-126, 127] for float, [-1022, 1023] for double.\r\n\r\n    // * Decompose _Unbiased_exponent into _Sign_character and _Absolute_exponent.\r\n    char _Sign_character;\r\n    uint32_t _Absolute_exponent;\r\n\r\n    if (_Unbiased_exponent < 0) {\r\n        _Sign_character    = '-';\r\n        _Absolute_exponent = static_cast<uint32_t>(-_Unbiased_exponent);\r\n    } else {\r\n        _Sign_character    = '+';\r\n        _Absolute_exponent = static_cast<uint32_t>(_Unbiased_exponent);\r\n    }\r\n\r\n    // _Absolute_exponent is within [0, 127] for float, [0, 1023] for double.\r\n\r\n    // * Perform a single bounds check.\r\n    {\r\n        int32_t _Exponent_length;\r\n\r\n        if (_Absolute_exponent < 10) {\r\n            _Exponent_length = 1;\r\n        } else if (_Absolute_exponent < 100) {\r\n            _Exponent_length = 2;\r\n        } else if constexpr (is_same_v<_Floating, float>) {\r\n            _Exponent_length = 3;\r\n        } else if (_Absolute_exponent < 1000) {\r\n            _Exponent_length = 3;\r\n        } else {\r\n            _Exponent_length = 4;\r\n        }\r\n\r\n        // _Precision might be enormous; avoid integer overflow by testing it separately.\r\n        ptrdiff_t _Buffer_size = _Last - _First;\r\n\r\n        if (_Buffer_size < _Precision) {\r\n            return {_Last, errc::value_too_large};\r\n        }\r\n\r\n        _Buffer_size -= _Precision;\r\n\r\n        const int32_t _Length_excluding_precision = 1 // leading hexit\r\n                                                  + static_cast<int32_t>(_Precision > 0) // possible decimal point\r\n                                                  // excluding `+ _Precision`, hexits after decimal point\r\n                                                  + 2 // \"p+\" or \"p-\"\r\n                                                  + _Exponent_length; // exponent\r\n\r\n        if (_Buffer_size < _Length_excluding_precision) {\r\n            return {_Last, errc::value_too_large};\r\n        }\r\n    }\r\n\r\n    // * Perform rounding when we've been asked to omit hexits.\r\n    if (_Precision < _Full_precision) {\r\n        // _Precision is within [0, 5] for float, [0, 12] for double.\r\n\r\n        // _Dropped_bits is within [4, 24] for float, [4, 52] for double.\r\n        const int _Dropped_bits = (_Full_precision - _Precision) * 4;\r\n\r\n        // Perform rounding by adding an appropriately-shifted bit.\r\n\r\n        // This can propagate carries all the way into the leading hexit. Examples:\r\n        // \"0.ff9\" rounded to a precision of 2 is \"1.00\".\r\n        // \"1.ff9\" rounded to a precision of 2 is \"2.00\".\r\n\r\n        // Note that the leading hexit participates in the rounding decision. Examples:\r\n        // \"0.8\" rounded to a precision of 0 is \"0\".\r\n        // \"1.8\" rounded to a precision of 0 is \"2\".\r\n\r\n        // Reference implementation with suboptimal codegen:\r\n        // const bool _Lsb_bit       = (_Adjusted_mantissa & (_Uint_type{1} << _Dropped_bits)) != 0;\r\n        // const bool _Round_bit     = (_Adjusted_mantissa & (_Uint_type{1} << (_Dropped_bits - 1))) != 0;\r\n        // const bool _Has_tail_bits = (_Adjusted_mantissa & ((_Uint_type{1} << (_Dropped_bits - 1)) - 1)) != 0;\r\n        // const bool _Should_round = _Should_round_up(_Lsb_bit, _Round_bit, _Has_tail_bits);\r\n        // _Adjusted_mantissa += _Uint_type{_Should_round} << _Dropped_bits;\r\n\r\n        // Example for optimized implementation: Let _Dropped_bits be 8.\r\n        //          Bit index: ...[8]76543210\r\n        // _Adjusted_mantissa: ...[L]RTTTTTTT (not depicting known details, like hexit alignment)\r\n        // By focusing on the bit at index _Dropped_bits, we can avoid unnecessary branching and shifting.\r\n\r\n        // Bit index: ...[8]76543210\r\n        //  _Lsb_bit: ...[L]RTTTTTTT\r\n        const _Uint_type _Lsb_bit = _Adjusted_mantissa;\r\n\r\n        //  Bit index: ...9[8]76543210\r\n        // _Round_bit: ...L[R]TTTTTTT0\r\n        const _Uint_type _Round_bit = _Adjusted_mantissa << 1;\r\n\r\n        // We can detect (without branching) whether any of the trailing bits are set.\r\n        // Due to _Should_round below, this computation will be used if and only if R is 1, so we can assume that here.\r\n        //      Bit index: ...9[8]76543210\r\n        //     _Round_bit: ...L[1]TTTTTTT0\r\n        // _Has_tail_bits: ....[H]........\r\n\r\n        // If all of the trailing bits T are 0, then `_Round_bit - 1` will produce 0 for H (due to R being 1).\r\n        // If any of the trailing bits T are 1, then `_Round_bit - 1` will produce 1 for H (due to R being 1).\r\n        const _Uint_type _Has_tail_bits = _Round_bit - 1;\r\n\r\n        // Finally, we can use _Should_round_up() logic with bitwise-AND and bitwise-OR,\r\n        // selecting just the bit at index _Dropped_bits. This is the appropriately-shifted bit that we want.\r\n        const _Uint_type _Should_round = _Round_bit & (_Has_tail_bits | _Lsb_bit) & (_Uint_type{1} << _Dropped_bits);\r\n\r\n        // This rounding technique is dedicated to the memory of Peppermint. =^..^=\r\n        _Adjusted_mantissa += _Should_round;\r\n    }\r\n\r\n    // * Print the leading hexit, then mask it away.\r\n    {\r\n        const uint32_t _Nibble = static_cast<uint32_t>(_Adjusted_mantissa >> _Adjusted_explicit_bits);\r\n        _STL_INTERNAL_CHECK(_Nibble < 3);\r\n        const char _Leading_hexit = static_cast<char>('0' + _Nibble);\r\n\r\n        *_First++ = _Leading_hexit;\r\n\r\n        constexpr _Uint_type _Mask = (_Uint_type{1} << _Adjusted_explicit_bits) - 1;\r\n        _Adjusted_mantissa &= _Mask;\r\n    }\r\n\r\n    // * Print the decimal point and trailing hexits.\r\n\r\n    // C11 7.21.6.1 \"The fprintf function\"/8:\r\n    // \"if the precision is zero and the # flag is not specified, no decimal-point character appears.\"\r\n    if (_Precision > 0) {\r\n        *_First++ = '.';\r\n\r\n        int32_t _Number_of_bits_remaining = _Adjusted_explicit_bits; // 24 for float, 52 for double\r\n\r\n        for (;;) {\r\n            _STL_INTERNAL_CHECK(_Number_of_bits_remaining >= 4);\r\n            _STL_INTERNAL_CHECK(_Number_of_bits_remaining % 4 == 0);\r\n            _Number_of_bits_remaining -= 4;\r\n\r\n            const uint32_t _Nibble = static_cast<uint32_t>(_Adjusted_mantissa >> _Number_of_bits_remaining);\r\n            _STL_INTERNAL_CHECK(_Nibble < 16);\r\n            const char _Hexit = _Charconv_digits[_Nibble];\r\n\r\n            *_First++ = _Hexit;\r\n\r\n            // _Precision is the number of hexits that still need to be printed.\r\n            --_Precision;\r\n            if (_Precision == 0) {\r\n                break; // We're completely done with this phase.\r\n            }\r\n            // Otherwise, we need to keep printing hexits.\r\n\r\n            if (_Number_of_bits_remaining == 0) {\r\n                // We've finished printing _Adjusted_mantissa, so all remaining hexits are '0'.\r\n                _CSTD memset(_First, '0', static_cast<size_t>(_Precision));\r\n                _First += _Precision;\r\n                break;\r\n            }\r\n\r\n            // Mask away the hexit that we just printed, then keep looping.\r\n            // (We skip this when breaking out of the loop above, because _Adjusted_mantissa isn't used later.)\r\n            const _Uint_type _Mask = (_Uint_type{1} << _Number_of_bits_remaining) - 1;\r\n            _Adjusted_mantissa &= _Mask;\r\n        }\r\n    }\r\n\r\n    // * Print the exponent.\r\n\r\n    // C11 7.21.6.1 \"The fprintf function\"/8: \"The exponent always contains at least one digit, and only as many more\r\n    // digits as necessary to represent the decimal exponent of 2.\"\r\n\r\n    // Performance note: We should take advantage of the known ranges of possible exponents.\r\n\r\n    *_First++ = 'p';\r\n    *_First++ = _Sign_character;\r\n\r\n    // We've already printed '-' if necessary, so uint32_t _Absolute_exponent avoids testing that again.\r\n    return _STD to_chars(_First, _Last, _Absolute_exponent);\r\n}\r\n\r\ntemplate <class _Floating>\r\n_NODISCARD to_chars_result _Floating_to_chars_hex_shortest(\r\n    char* _First, char* const _Last, const _Floating _Value) noexcept {\r\n\r\n    // This prints \"1.728p+0\" instead of \"2.e5p-1\".\r\n    // This prints \"0.000002p-126\" instead of \"1p-149\" for float.\r\n    // This prints \"0.0000000000001p-1022\" instead of \"1p-1074\" for double.\r\n    // This prioritizes being consistent with printf's de facto behavior (and hex-precision's behavior)\r\n    // over minimizing the number of characters printed.\r\n\r\n    using _Traits    = _Floating_type_traits<_Floating>;\r\n    using _Uint_type = typename _Traits::_Uint_type;\r\n\r\n    const _Uint_type _Uint_value = _Bit_cast<_Uint_type>(_Value);\r\n\r\n    if (_Uint_value == 0) { // zero detected; write \"0p+0\" and return\r\n        // C11 7.21.6.1 \"The fprintf function\"/8: \"If the value is zero, the exponent is zero.\"\r\n        // Special-casing zero is necessary because of the exponent.\r\n        const char* const _Str = \"0p+0\";\r\n        constexpr size_t _Len  = 4;\r\n\r\n        if (_Last - _First < static_cast<ptrdiff_t>(_Len)) {\r\n            return {_Last, errc::value_too_large};\r\n        }\r\n\r\n        _CSTD memcpy(_First, _Str, _Len);\r\n\r\n        return {_First + _Len, errc{}};\r\n    }\r\n\r\n    const _Uint_type _Ieee_mantissa = _Uint_value & _Traits::_Denormal_mantissa_mask;\r\n    const int32_t _Ieee_exponent    = static_cast<int32_t>(_Uint_value >> _Traits::_Exponent_shift);\r\n\r\n    char _Leading_hexit; // implicit bit\r\n    int32_t _Unbiased_exponent;\r\n\r\n    if (_Ieee_exponent == 0) { // subnormal\r\n        _Leading_hexit     = '0';\r\n        _Unbiased_exponent = 1 - _Traits::_Exponent_bias;\r\n    } else { // normal\r\n        _Leading_hexit     = '1';\r\n        _Unbiased_exponent = _Ieee_exponent - _Traits::_Exponent_bias;\r\n    }\r\n\r\n    // Performance note: Consider avoiding per-character bounds checking when there's plenty of space.\r\n\r\n    if (_First == _Last) {\r\n        return {_Last, errc::value_too_large};\r\n    }\r\n\r\n    *_First++ = _Leading_hexit;\r\n\r\n    if (_Ieee_mantissa == 0) {\r\n        // The fraction bits are all 0. Trim them away, including the decimal point.\r\n    } else {\r\n        if (_First == _Last) {\r\n            return {_Last, errc::value_too_large};\r\n        }\r\n\r\n        *_First++ = '.';\r\n\r\n        // The hexits after the decimal point correspond to the explicitly stored fraction bits.\r\n        // float explicitly stores 23 fraction bits. 23 / 4 == 5.75, so we'll print at most 6 hexits.\r\n        // double explicitly stores 52 fraction bits. 52 / 4 == 13, so we'll print at most 13 hexits.\r\n        _Uint_type _Adjusted_mantissa;\r\n        int32_t _Number_of_bits_remaining;\r\n\r\n        if constexpr (is_same_v<_Floating, float>) {\r\n            _Adjusted_mantissa        = _Ieee_mantissa << 1; // align to hexit boundary (23 isn't divisible by 4)\r\n            _Number_of_bits_remaining = 24; // 23 fraction bits + 1 alignment bit\r\n        } else {\r\n            _Adjusted_mantissa        = _Ieee_mantissa; // already aligned (52 is divisible by 4)\r\n            _Number_of_bits_remaining = 52; // 52 fraction bits\r\n        }\r\n\r\n        // do-while: The condition _Adjusted_mantissa != 0 is initially true - we have nonzero fraction bits and we've\r\n        // printed the decimal point. Each iteration, we print a hexit, mask it away, and keep looping if we still have\r\n        // nonzero fraction bits. If there would be trailing '0' hexits, this trims them. If there wouldn't be trailing\r\n        // '0' hexits, the same condition works (as we print the final hexit and mask it away); we don't need to test\r\n        // _Number_of_bits_remaining.\r\n        do {\r\n            _STL_INTERNAL_CHECK(_Number_of_bits_remaining >= 4);\r\n            _STL_INTERNAL_CHECK(_Number_of_bits_remaining % 4 == 0);\r\n            _Number_of_bits_remaining -= 4;\r\n\r\n            const uint32_t _Nibble = static_cast<uint32_t>(_Adjusted_mantissa >> _Number_of_bits_remaining);\r\n            _STL_INTERNAL_CHECK(_Nibble < 16);\r\n            const char _Hexit = _Charconv_digits[_Nibble];\r\n\r\n            if (_First == _Last) {\r\n                return {_Last, errc::value_too_large};\r\n            }\r\n\r\n            *_First++ = _Hexit;\r\n\r\n            const _Uint_type _Mask = (_Uint_type{1} << _Number_of_bits_remaining) - 1;\r\n            _Adjusted_mantissa &= _Mask;\r\n        } while (_Adjusted_mantissa != 0);\r\n    }\r\n\r\n    // C11 7.21.6.1 \"The fprintf function\"/8: \"The exponent always contains at least one digit, and only as many more\r\n    // digits as necessary to represent the decimal exponent of 2.\"\r\n\r\n    // Performance note: We should take advantage of the known ranges of possible exponents.\r\n\r\n    // float: _Unbiased_exponent is within [-126, 127].\r\n    // double: _Unbiased_exponent is within [-1022, 1023].\r\n\r\n    if (_Last - _First < 2) {\r\n        return {_Last, errc::value_too_large};\r\n    }\r\n\r\n    *_First++ = 'p';\r\n\r\n    if (_Unbiased_exponent < 0) {\r\n        *_First++          = '-';\r\n        _Unbiased_exponent = -_Unbiased_exponent;\r\n    } else {\r\n        *_First++ = '+';\r\n    }\r\n\r\n    // We've already printed '-' if necessary, so static_cast<uint32_t> avoids testing that again.\r\n    return _STD to_chars(_First, _Last, static_cast<uint32_t>(_Unbiased_exponent));\r\n}\r\n\r\ntemplate <class _Floating>\r\n_NODISCARD to_chars_result _Floating_to_chars_general_precision(\r\n    char* _First, char* const _Last, const _Floating _Value, int _Precision) noexcept {\r\n\r\n    using _Traits    = _Floating_type_traits<_Floating>;\r\n    using _Uint_type = typename _Traits::_Uint_type;\r\n\r\n    const _Uint_type _Uint_value = _Bit_cast<_Uint_type>(_Value);\r\n\r\n    if (_Uint_value == 0) { // zero detected; write \"0\" and return; _Precision is irrelevant due to zero-trimming\r\n        if (_First == _Last) {\r\n            return {_Last, errc::value_too_large};\r\n        }\r\n\r\n        *_First++ = '0';\r\n\r\n        return {_First, errc{}};\r\n    }\r\n\r\n    // C11 7.21.6.1 \"The fprintf function\"/5:\r\n    // \"A negative precision argument is taken as if the precision were omitted.\"\r\n    // /8: \"g,G [...] Let P equal the precision if nonzero, 6 if the precision is omitted,\r\n    // or 1 if the precision is zero.\"\r\n\r\n    // Performance note: It's possible to rewrite this for branchless codegen,\r\n    // but profiling will be necessary to determine whether that's faster.\r\n    if (_Precision < 0) {\r\n        _Precision = 6;\r\n    } else if (_Precision == 0) {\r\n        _Precision = 1;\r\n    } else if (_Precision < 1'000'000) {\r\n        // _Precision is ok.\r\n    } else {\r\n        // Avoid integer overflow.\r\n        // Due to general notation's zero-trimming behavior, we can simply clamp _Precision.\r\n        // This is further clamped below.\r\n        _Precision = 1'000'000;\r\n    }\r\n\r\n    // _Precision is now the Standard's P.\r\n\r\n    // /8: \"Then, if a conversion with style E would have an exponent of X:\r\n    // - if P > X >= -4, the conversion is with style f (or F) and precision P - (X + 1).\r\n    // - otherwise, the conversion is with style e (or E) and precision P - 1.\"\r\n\r\n    // /8: \"Finally, [...] any trailing zeros are removed from the fractional portion of the result\r\n    // and the decimal-point character is removed if there is no fractional portion remaining.\"\r\n\r\n    using _Tables = _General_precision_tables_2<_Floating>;\r\n\r\n    const _Uint_type* _Table_begin;\r\n    const _Uint_type* _Table_end;\r\n\r\n    if (_Precision <= _Tables::_Max_special_P) {\r\n        _Table_begin = _Tables::_Special_X_table + (_Precision - 1) * (_Precision + 10) / 2;\r\n        _Table_end   = _Table_begin + _Precision + 5;\r\n    } else {\r\n        _Table_begin = _Tables::_Ordinary_X_table;\r\n        _Table_end   = _Table_begin + (_STD min) (_Precision, _Tables::_Max_P) + 5;\r\n    }\r\n\r\n    // Profiling indicates that linear search is faster than binary search for small tables.\r\n    // Performance note: lambda captures may have a small performance cost.\r\n    const _Uint_type* const _Table_lower_bound = [=] {\r\n        if constexpr (!is_same_v<_Floating, float>) {\r\n            if (_Precision > 155) { // threshold determined via profiling\r\n                return _STD lower_bound(_Table_begin, _Table_end, _Uint_value, less{});\r\n            }\r\n        }\r\n\r\n        return _STD find_if(_Table_begin, _Table_end, [=](const _Uint_type _Elem) { return _Uint_value <= _Elem; });\r\n    }();\r\n\r\n    const ptrdiff_t _Table_index     = _Table_lower_bound - _Table_begin;\r\n    const int _Scientific_exponent_X = static_cast<int>(_Table_index - 5);\r\n    const bool _Use_fixed_notation   = _Precision > _Scientific_exponent_X && _Scientific_exponent_X >= -4;\r\n\r\n    // Performance note: it might (or might not) be faster to modify Ryu Printf to perform zero-trimming.\r\n    // Such modifications would involve a fairly complicated state machine (notably, both '0' and '9' digits would\r\n    // need to be buffered, due to rounding), and that would have performance costs due to increased branching.\r\n    // Here, we're using a simpler approach: writing into a local buffer, manually zero-trimming, and then copying into\r\n    // the output range. The necessary buffer size is reasonably small, the zero-trimming logic is simple and fast,\r\n    // and the final copying is also fast.\r\n\r\n    constexpr int _Max_output_length =\r\n        is_same_v<_Floating, float> ? 117 : 773; // cases: 0x1.fffffep-126f and 0x1.fffffffffffffp-1022\r\n    constexpr int _Max_fixed_precision =\r\n        is_same_v<_Floating, float> ? 37 : 66; // cases: 0x1.fffffep-14f and 0x1.fffffffffffffp-14\r\n    constexpr int _Max_scientific_precision =\r\n        is_same_v<_Floating, float> ? 111 : 766; // cases: 0x1.fffffep-126f and 0x1.fffffffffffffp-1022\r\n\r\n    // Note that _Max_output_length is determined by scientific notation and is more than enough for fixed notation.\r\n    // 0x1.fffffep+127f is 39 digits, plus 1 for '.', plus _Max_fixed_precision for '0' digits, equals 77.\r\n    // 0x1.fffffffffffffp+1023 is 309 digits, plus 1 for '.', plus _Max_fixed_precision for '0' digits, equals 376.\r\n\r\n    char _Buffer[_Max_output_length];\r\n    const char* const _Significand_first = _Buffer; // e.g. \"1.234\"\r\n    const char* _Significand_last        = nullptr;\r\n    const char* _Exponent_first          = nullptr; // e.g. \"e-05\"\r\n    const char* _Exponent_last           = nullptr;\r\n    int _Effective_precision; // number of digits printed after the decimal point, before trimming\r\n\r\n    // Write into the local buffer.\r\n    // Clamping _Effective_precision allows _Buffer to be as small as possible, and increases efficiency.\r\n    if (_Use_fixed_notation) {\r\n        _Effective_precision = (_STD min) (_Precision - (_Scientific_exponent_X + 1), _Max_fixed_precision);\r\n        const to_chars_result _Buf_result =\r\n            _Floating_to_chars_fixed_precision(_Buffer, _STD end(_Buffer), _Value, _Effective_precision);\r\n        _STL_INTERNAL_CHECK(_Buf_result.ec == errc{});\r\n        _Significand_last = _Buf_result.ptr;\r\n    } else {\r\n        _Effective_precision = (_STD min) (_Precision - 1, _Max_scientific_precision);\r\n        const to_chars_result _Buf_result =\r\n            _Floating_to_chars_scientific_precision(_Buffer, _STD end(_Buffer), _Value, _Effective_precision);\r\n        _STL_INTERNAL_CHECK(_Buf_result.ec == errc{});\r\n        _Significand_last = _STD find(_Buffer, _Buf_result.ptr, 'e');\r\n        _Exponent_first   = _Significand_last;\r\n        _Exponent_last    = _Buf_result.ptr;\r\n    }\r\n\r\n    // If we printed a decimal point followed by digits, perform zero-trimming.\r\n    if (_Effective_precision > 0) {\r\n        while (_Significand_last[-1] == '0') { // will stop at '.' or a nonzero digit\r\n            --_Significand_last;\r\n        }\r\n\r\n        if (_Significand_last[-1] == '.') {\r\n            --_Significand_last;\r\n        }\r\n    }\r\n\r\n    // Copy the significand to the output range.\r\n    const ptrdiff_t _Significand_distance = _Significand_last - _Significand_first;\r\n    if (_Last - _First < _Significand_distance) {\r\n        return {_Last, errc::value_too_large};\r\n    }\r\n    _CSTD memcpy(_First, _Significand_first, static_cast<size_t>(_Significand_distance));\r\n    _First += _Significand_distance;\r\n\r\n    // Copy the exponent to the output range.\r\n    if (!_Use_fixed_notation) {\r\n        const ptrdiff_t _Exponent_distance = _Exponent_last - _Exponent_first;\r\n        if (_Last - _First < _Exponent_distance) {\r\n            return {_Last, errc::value_too_large};\r\n        }\r\n        _CSTD memcpy(_First, _Exponent_first, static_cast<size_t>(_Exponent_distance));\r\n        _First += _Exponent_distance;\r\n    }\r\n\r\n    return {_First, errc{}};\r\n}\r\n\r\nenum class _Floating_to_chars_overload { _Plain, _Format_only, _Format_precision };\r\n\r\ntemplate <_Floating_to_chars_overload _Overload, class _Floating>\r\n_NODISCARD to_chars_result _Floating_to_chars(\r\n    char* _First, char* const _Last, _Floating _Value, const chars_format _Fmt, const int _Precision) noexcept {\r\n    _Adl_verify_range(_First, _Last);\r\n\r\n    if constexpr (_Overload == _Floating_to_chars_overload::_Plain) {\r\n        _STL_INTERNAL_CHECK(_Fmt == chars_format{}); // plain overload must pass chars_format{} internally\r\n    } else {\r\n        _STL_ASSERT(_Fmt == chars_format::general || _Fmt == chars_format::scientific || _Fmt == chars_format::fixed\r\n                        || _Fmt == chars_format::hex,\r\n            \"invalid format in to_chars()\");\r\n    }\r\n\r\n    using _Traits    = _Floating_type_traits<_Floating>;\r\n    using _Uint_type = typename _Traits::_Uint_type;\r\n\r\n    _Uint_type _Uint_value = _Bit_cast<_Uint_type>(_Value);\r\n\r\n    const bool _Was_negative = (_Uint_value & _Traits::_Shifted_sign_mask) != 0;\r\n\r\n    if (_Was_negative) { // sign bit detected; write minus sign and clear sign bit\r\n        if (_First == _Last) {\r\n            return {_Last, errc::value_too_large};\r\n        }\r\n\r\n        *_First++ = '-';\r\n\r\n        _Uint_value &= ~_Traits::_Shifted_sign_mask;\r\n        _Value = _Bit_cast<_Floating>(_Uint_value);\r\n    }\r\n\r\n    if ((_Uint_value & _Traits::_Shifted_exponent_mask) == _Traits::_Shifted_exponent_mask) {\r\n        // inf/nan detected; write appropriate string and return\r\n        const char* _Str;\r\n        size_t _Len;\r\n\r\n        const _Uint_type _Mantissa = _Uint_value & _Traits::_Denormal_mantissa_mask;\r\n\r\n        if (_Mantissa == 0) {\r\n            _Str = \"inf\";\r\n            _Len = 3;\r\n        } else if (_Was_negative && _Mantissa == _Traits::_Special_nan_mantissa_mask) {\r\n            // When a NaN value has the sign bit set, the quiet bit set, and all other mantissa bits cleared,\r\n            // the UCRT interprets it to mean \"indeterminate\", and indicates this by printing \"-nan(ind)\".\r\n            _Str = \"nan(ind)\";\r\n            _Len = 8;\r\n        } else if ((_Mantissa & _Traits::_Special_nan_mantissa_mask) != 0) {\r\n            _Str = \"nan\";\r\n            _Len = 3;\r\n        } else {\r\n            _Str = \"nan(snan)\";\r\n            _Len = 9;\r\n        }\r\n\r\n        if (_Last - _First < static_cast<ptrdiff_t>(_Len)) {\r\n            return {_Last, errc::value_too_large};\r\n        }\r\n\r\n        _CSTD memcpy(_First, _Str, _Len);\r\n\r\n        return {_First + _Len, errc{}};\r\n    }\r\n\r\n    if constexpr (_Overload == _Floating_to_chars_overload::_Plain) {\r\n        return _Floating_to_chars_ryu(_First, _Last, _Value, chars_format{});\r\n    } else if constexpr (_Overload == _Floating_to_chars_overload::_Format_only) {\r\n        if (_Fmt == chars_format::hex) {\r\n            return _Floating_to_chars_hex_shortest(_First, _Last, _Value);\r\n        }\r\n\r\n        return _Floating_to_chars_ryu(_First, _Last, _Value, _Fmt);\r\n    } else if constexpr (_Overload == _Floating_to_chars_overload::_Format_precision) {\r\n        switch (_Fmt) {\r\n        case chars_format::scientific:\r\n            return _Floating_to_chars_scientific_precision(_First, _Last, _Value, _Precision);\r\n        case chars_format::fixed:\r\n            return _Floating_to_chars_fixed_precision(_First, _Last, _Value, _Precision);\r\n        case chars_format::general:\r\n            return _Floating_to_chars_general_precision(_First, _Last, _Value, _Precision);\r\n        case chars_format::hex:\r\n        default: // avoid warning C4715: not all control paths return a value\r\n            return _Floating_to_chars_hex_precision(_First, _Last, _Value, _Precision);\r\n        }\r\n    }\r\n}\r\n\r\n_EXPORT_STD inline to_chars_result to_chars(char* const _First, char* const _Last, const float _Value) noexcept\r\n/* strengthened */ {\r\n    return _Floating_to_chars<_Floating_to_chars_overload::_Plain>(_First, _Last, _Value, chars_format{}, 0);\r\n}\r\n_EXPORT_STD inline to_chars_result to_chars(char* const _First, char* const _Last, const double _Value) noexcept\r\n/* strengthened */ {\r\n    return _Floating_to_chars<_Floating_to_chars_overload::_Plain>(_First, _Last, _Value, chars_format{}, 0);\r\n}\r\n_EXPORT_STD inline to_chars_result to_chars(char* const _First, char* const _Last, const long double _Value) noexcept\r\n/* strengthened */ {\r\n    return _Floating_to_chars<_Floating_to_chars_overload::_Plain>(\r\n        _First, _Last, static_cast<double>(_Value), chars_format{}, 0);\r\n}\r\n_EXPORT_STD inline to_chars_result to_chars(\r\n    char* const _First, char* const _Last, const float _Value, const chars_format _Fmt) noexcept /* strengthened */ {\r\n    return _Floating_to_chars<_Floating_to_chars_overload::_Format_only>(_First, _Last, _Value, _Fmt, 0);\r\n}\r\n_EXPORT_STD inline to_chars_result to_chars(\r\n    char* const _First, char* const _Last, const double _Value, const chars_format _Fmt) noexcept /* strengthened */ {\r\n    return _Floating_to_chars<_Floating_to_chars_overload::_Format_only>(_First, _Last, _Value, _Fmt, 0);\r\n}\r\n_EXPORT_STD inline to_chars_result to_chars(char* const _First, char* const _Last, const long double _Value,\r\n    const chars_format _Fmt) noexcept /* strengthened */ {\r\n    return _Floating_to_chars<_Floating_to_chars_overload::_Format_only>(\r\n        _First, _Last, static_cast<double>(_Value), _Fmt, 0);\r\n}\r\n_EXPORT_STD inline to_chars_result to_chars(char* const _First, char* const _Last, const float _Value,\r\n    const chars_format _Fmt, const int _Precision) noexcept /* strengthened */ {\r\n    return _Floating_to_chars<_Floating_to_chars_overload::_Format_precision>(_First, _Last, _Value, _Fmt, _Precision);\r\n}\r\n_EXPORT_STD inline to_chars_result to_chars(char* const _First, char* const _Last, const double _Value,\r\n    const chars_format _Fmt, const int _Precision) noexcept /* strengthened */ {\r\n    return _Floating_to_chars<_Floating_to_chars_overload::_Format_precision>(_First, _Last, _Value, _Fmt, _Precision);\r\n}\r\n_EXPORT_STD inline to_chars_result to_chars(char* const _First, char* const _Last, const long double _Value,\r\n    const chars_format _Fmt, const int _Precision) noexcept /* strengthened */ {\r\n    return _Floating_to_chars<_Floating_to_chars_overload::_Format_precision>(\r\n        _First, _Last, static_cast<double>(_Value), _Fmt, _Precision);\r\n}\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX17 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CHARCONV_\r\n"
  },
  {
    "path": "stl/inc/chrono",
    "content": "// chrono standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CHRONO_\r\n#define _CHRONO_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <__msvc_chrono.hpp>\r\n\r\n#if _HAS_CXX17\r\n#include <system_error>\r\n#include <xfilesystem_abi.h>\r\n#include <xstring>\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n#include <__msvc_tzdb.hpp>\r\n#include <atomic>\r\n#include <cmath>\r\n#include <compare>\r\n#include <concepts>\r\n#include <cstdint>\r\n#include <format>\r\n#include <forward_list>\r\n#include <iomanip>\r\n#include <istream>\r\n#include <memory>\r\n#include <optional>\r\n#include <sstream>\r\n#include <string>\r\n#include <vector>\r\n#include <xloctime>\r\n#include <xthreads.h>\r\n#endif // _HAS_CXX20\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n#if _HAS_CXX17\r\n_NODISCARD inline int _Check_convert_result(const __std_fs_convert_result _Result) {\r\n    if (_Result._Err != __std_win_error::_Success) {\r\n        _STD _Throw_system_error_from_std_win_error(_Result._Err);\r\n    }\r\n\r\n    return _Result._Len;\r\n}\r\n\r\ntemplate <class _Traits, class _Alloc>\r\n_NODISCARD basic_string<typename _Traits::char_type, _Traits, _Alloc> _Convert_wide_to_narrow(\r\n    const __std_code_page _Code_page, const wstring_view _Input, const _Alloc& _Al) {\r\n    basic_string<typename _Traits::char_type, _Traits, _Alloc> _Output(_Al);\r\n\r\n    if (!_Input.empty()) {\r\n        if (!_STD _In_range<int>(_Input.size())) {\r\n            _STD _Throw_system_error(errc::invalid_argument);\r\n        }\r\n\r\n        const int _Len = _STD _Check_convert_result(\r\n            ::__std_fs_convert_wide_to_narrow(_Code_page, _Input.data(), static_cast<int>(_Input.size()), nullptr, 0));\r\n\r\n        _Output.resize(static_cast<size_t>(_Len));\r\n\r\n        const auto _Data_as_char = reinterpret_cast<char*>(_Output.data());\r\n\r\n        (void) _STD _Check_convert_result(::__std_fs_convert_wide_to_narrow(\r\n            _Code_page, _Input.data(), static_cast<int>(_Input.size()), _Data_as_char, _Len));\r\n    }\r\n\r\n    return _Output;\r\n}\r\n#endif // _HAS_CXX17\r\n\r\nnamespace chrono {\r\n    _EXPORT_STD struct system_clock { // wraps GetSystemTimePreciseAsFileTime\r\n        using rep                       = long long;\r\n        using period                    = ratio<1, 10'000'000>; // 100 nanoseconds\r\n        using duration                  = _CHRONO duration<rep, period>;\r\n        using time_point                = _CHRONO time_point<system_clock>;\r\n        static constexpr bool is_steady = false;\r\n\r\n        _NODISCARD static time_point now() noexcept { // get current time\r\n            return time_point(duration(::_Xtime_get_ticks()));\r\n        }\r\n\r\n        _NODISCARD static __time64_t to_time_t(const time_point& _Time) noexcept { // convert to __time64_t\r\n            return duration_cast<seconds>(_Time.time_since_epoch()).count();\r\n        }\r\n\r\n        _NODISCARD static time_point from_time_t(__time64_t _Tm) noexcept { // convert from __time64_t\r\n            return time_point{seconds{_Tm}};\r\n        }\r\n    };\r\n\r\n#if _HAS_CXX20\r\n    _EXPORT_STD template <class _Duration>\r\n    using sys_time                = time_point<system_clock, _Duration>;\r\n    _EXPORT_STD using sys_seconds = sys_time<seconds>;\r\n    _EXPORT_STD using sys_days    = sys_time<days>;\r\n#endif // _HAS_CXX20\r\n\r\n    _EXPORT_STD using high_resolution_clock = steady_clock;\r\n\r\n#if _HAS_CXX20\r\n    // [time.duration.io]\r\n\r\n#define _IF_PERIOD_RETURN_SUFFIX_ELSE(_TYPE, _SUFFIX) \\\r\n    if constexpr (is_same_v<_Period, _TYPE>) {        \\\r\n        if constexpr (is_same_v<_CharT, char>) {      \\\r\n            return _SUFFIX;                           \\\r\n        } else {                                      \\\r\n            return L##_SUFFIX;                        \\\r\n        }                                             \\\r\n    } else\r\n\r\n    template <class _CharT, class _Period>\r\n    _NODISCARD constexpr const _CharT* _Get_literal_unit_suffix() {\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(atto, \"as\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(femto, \"fs\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(pico, \"ps\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(nano, \"ns\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(micro, \"us\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(milli, \"ms\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(centi, \"cs\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(deci, \"ds\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(seconds::period, \"s\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(deca, \"das\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(hecto, \"hs\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(kilo, \"ks\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(mega, \"Ms\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(giga, \"Gs\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(tera, \"Ts\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(peta, \"Ps\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(exa, \"Es\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(minutes::period, \"min\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(hours::period, \"h\")\r\n        _IF_PERIOD_RETURN_SUFFIX_ELSE(ratio<86400>, \"d\")\r\n\r\n        {\r\n            return nullptr;\r\n        }\r\n    }\r\n\r\n#undef _IF_PERIOD_RETURN_SUFFIX_ELSE\r\n\r\n    template <class _CharT>\r\n    _NODISCARD _CharT* _Get_general_unit_suffix(_CharT* _Rnext, const intmax_t _Num, const intmax_t _Den) {\r\n        // Returns the head pointer of the string, built in reverse.\r\n        _STL_INTERNAL_CHECK(_Num > 0 && _Den > 0);\r\n        *--_Rnext = '\\0';\r\n        *--_Rnext = 's';\r\n        *--_Rnext = ']';\r\n        if (_Den != 1) {\r\n            _Rnext    = _STD _UIntegral_to_buff(_Rnext, static_cast<uintmax_t>(_Den));\r\n            *--_Rnext = '/';\r\n        }\r\n\r\n        _Rnext    = _STD _UIntegral_to_buff(_Rnext, static_cast<uintmax_t>(_Num));\r\n        *--_Rnext = '[';\r\n        return _Rnext;\r\n    }\r\n\r\n    template <class _Period, class _CharT, class _Traits>\r\n    void _Write_unit_suffix(basic_ostream<_CharT, _Traits>& _Os) {\r\n        constexpr auto _Suffix = _CHRONO _Get_literal_unit_suffix<_CharT, _Period>();\r\n        if constexpr (_Suffix == nullptr) {\r\n            _CharT _Buffer[2 * (numeric_limits<intmax_t>::digits10 + 1) + 5] = {}; // 2 numbers + \"[/]s\\0\"\r\n            const _CharT* const _Begin =\r\n                _CHRONO _Get_general_unit_suffix<_CharT>(_STD end(_Buffer), _Period::num, _Period::den);\r\n            _Os << _Begin;\r\n        } else {\r\n            _Os << _Suffix;\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Rep, class _Period>\r\n    basic_ostream<_CharT, _Traits>& operator<<(\r\n        basic_ostream<_CharT, _Traits>& _Os, const duration<_Rep, _Period>& _Dur) {\r\n        basic_ostringstream<_CharT, _Traits> _Sstr;\r\n        _Sstr.flags(_Os.flags());\r\n        _Sstr.imbue(_Os.getloc());\r\n        _Sstr.precision(_Os.precision());\r\n        _Sstr << _Dur.count();\r\n        _CHRONO _Write_unit_suffix<_Period>(_Sstr);\r\n\r\n        return _Os << _Sstr.str();\r\n    }\r\n\r\n    _EXPORT_STD struct local_t {};\r\n\r\n    _EXPORT_STD template <class _Duration>\r\n    using local_time                = time_point<local_t, _Duration>;\r\n    _EXPORT_STD using local_seconds = local_time<seconds>;\r\n    _EXPORT_STD using local_days    = local_time<days>;\r\n\r\n    _EXPORT_STD struct last_spec {\r\n        explicit last_spec() = default;\r\n    };\r\n    _EXPORT_STD inline constexpr last_spec last{};\r\n\r\n    _EXPORT_STD class day {\r\n    public:\r\n        day() = default;\r\n        constexpr explicit day(unsigned int _Val) noexcept : _Day{static_cast<unsigned char>(_Val)} {}\r\n\r\n        constexpr day& operator++() noexcept {\r\n            ++_Day;\r\n            return *this;\r\n        }\r\n        constexpr day operator++(int) noexcept {\r\n            return day{_Day++};\r\n        }\r\n        constexpr day& operator--() noexcept {\r\n            --_Day;\r\n            return *this;\r\n        }\r\n        constexpr day operator--(int) noexcept {\r\n            return day{_Day--};\r\n        }\r\n\r\n        constexpr day& operator+=(const days& _Days) noexcept {\r\n            _Day += static_cast<unsigned char>(_Days.count());\r\n            return *this;\r\n        }\r\n        constexpr day& operator-=(const days& _Days) noexcept {\r\n            _Day -= static_cast<unsigned char>(_Days.count());\r\n            return *this;\r\n        }\r\n\r\n        _NODISCARD constexpr explicit operator unsigned int() const noexcept {\r\n            return _Day;\r\n        }\r\n        _NODISCARD constexpr bool ok() const noexcept {\r\n            return _Day >= 1 && _Day <= 31;\r\n        }\r\n\r\n    private:\r\n        unsigned char _Day;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD constexpr bool operator==(const day& _Left, const day& _Right) noexcept {\r\n        return static_cast<unsigned int>(_Left) == static_cast<unsigned int>(_Right);\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr strong_ordering operator<=>(const day& _Left, const day& _Right) noexcept {\r\n        return static_cast<unsigned int>(_Left) <=> static_cast<unsigned int>(_Right);\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr day operator+(const day& _Left, const days& _Right) noexcept {\r\n        return day{static_cast<unsigned int>(_Left) + _Right.count()};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr day operator+(const days& _Left, const day& _Right) noexcept {\r\n        return _Right + _Left;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr day operator-(const day& _Left, const days& _Right) noexcept {\r\n        return day{static_cast<unsigned int>(_Left) - _Right.count()};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr days operator-(const day& _Left, const day& _Right) noexcept {\r\n        return days{\r\n            static_cast<int>(static_cast<unsigned int>(_Left)) - static_cast<int>(static_cast<unsigned int>(_Right))};\r\n    }\r\n\r\n    _EXPORT_STD class month {\r\n    public:\r\n        month() = default;\r\n        constexpr explicit month(unsigned int _Val) noexcept : _Month{static_cast<unsigned char>(_Val)} {}\r\n\r\n        constexpr month& operator++() noexcept {\r\n            *this += months{1};\r\n            return *this;\r\n        }\r\n        constexpr month operator++(int) noexcept {\r\n            month _Temp{*this};\r\n            ++*this;\r\n            return _Temp;\r\n        }\r\n        constexpr month& operator--() noexcept {\r\n            *this -= months{1};\r\n            return *this;\r\n        }\r\n        constexpr month operator--(int) noexcept {\r\n            month _Temp{*this};\r\n            --*this;\r\n            return _Temp;\r\n        }\r\n\r\n        constexpr month& operator+=(const months& _Months) noexcept;\r\n        constexpr month& operator-=(const months& _Months) noexcept;\r\n\r\n        _NODISCARD constexpr explicit operator unsigned int() const noexcept {\r\n            return _Month;\r\n        }\r\n        _NODISCARD constexpr bool ok() const noexcept {\r\n            return _Month >= 1 && _Month <= 12;\r\n        }\r\n\r\n    private:\r\n        unsigned char _Month;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD constexpr bool operator==(const month& _Left, const month& _Right) noexcept {\r\n        return static_cast<unsigned int>(_Left) == static_cast<unsigned int>(_Right);\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr strong_ordering operator<=>(const month& _Left, const month& _Right) noexcept {\r\n        return static_cast<unsigned int>(_Left) <=> static_cast<unsigned int>(_Right);\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr month operator+(const month& _Left, const months& _Right) noexcept {\r\n        const auto _Mo  = static_cast<long long>(static_cast<unsigned int>(_Left)) + (_Right.count() - 1);\r\n        const auto _Div = (_Mo >= 0 ? _Mo : _Mo - 11) / 12;\r\n        return month{static_cast<unsigned int>(_Mo - _Div * 12 + 1)};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month operator+(const months& _Left, const month& _Right) noexcept {\r\n        return _Right + _Left;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month operator-(const month& _Left, const months& _Right) noexcept {\r\n        return _Left + -_Right;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr months operator-(const month& _Left, const month& _Right) noexcept {\r\n        const auto _Mo = static_cast<unsigned int>(_Left) - static_cast<unsigned int>(_Right);\r\n        return months{_Mo <= 11 ? _Mo : _Mo + 12};\r\n    }\r\n\r\n    constexpr month& month::operator+=(const months& _Months) noexcept {\r\n        *this = *this + _Months;\r\n        return *this;\r\n    }\r\n    constexpr month& month::operator-=(const months& _Months) noexcept {\r\n        *this = *this - _Months;\r\n        return *this;\r\n    }\r\n\r\n    _EXPORT_STD class year {\r\n    public:\r\n        year() = default;\r\n        constexpr explicit year(int _Val) noexcept : _Year{static_cast<short>(_Val)} {}\r\n\r\n        constexpr year& operator++() noexcept {\r\n            ++_Year;\r\n            return *this;\r\n        }\r\n        constexpr year operator++(int) noexcept {\r\n            return year{_Year++};\r\n        }\r\n        constexpr year& operator--() noexcept {\r\n            --_Year;\r\n            return *this;\r\n        }\r\n        constexpr year operator--(int) noexcept {\r\n            return year{_Year--};\r\n        }\r\n\r\n        constexpr year& operator+=(const years& _Years) noexcept {\r\n#ifdef __EDG__ // TRANSITION, VSO-1271098\r\n            _Year = static_cast<short>(_Year + _Years.count());\r\n#else // ^^^ workaround / no workaround vvv\r\n            _Year += static_cast<short>(_Years.count());\r\n#endif // ^^^ no workaround ^^^\r\n            return *this;\r\n        }\r\n        constexpr year& operator-=(const years& _Years) noexcept {\r\n#ifdef __EDG__ // TRANSITION, VSO-1271098\r\n            _Year = static_cast<short>(_Year - _Years.count());\r\n#else // ^^^ workaround / no workaround vvv\r\n            _Year -= static_cast<short>(_Years.count());\r\n#endif // ^^^ no workaround ^^^\r\n            return *this;\r\n        }\r\n\r\n        _NODISCARD constexpr year operator+() const noexcept {\r\n            return *this;\r\n        }\r\n        _NODISCARD constexpr year operator-() const noexcept {\r\n            return year{-_Year};\r\n        }\r\n\r\n        _NODISCARD constexpr bool is_leap() const noexcept {\r\n            return _Year % 4 == 0 && (_Year % 100 != 0 || _Year % 400 == 0);\r\n        }\r\n\r\n        _NODISCARD constexpr explicit operator int() const noexcept {\r\n            return _Year;\r\n        }\r\n\r\n        _NODISCARD constexpr bool ok() const noexcept {\r\n            return _Year_min <= _Year && _Year <= _Year_max;\r\n        }\r\n\r\n        _NODISCARD static constexpr year(min)() noexcept {\r\n            return year{_Year_min};\r\n        }\r\n        _NODISCARD static constexpr year(max)() noexcept {\r\n            return year{_Year_max};\r\n        }\r\n\r\n    private:\r\n        short _Year;\r\n        static constexpr int _Year_min = -32767;\r\n        static constexpr int _Year_max = 32767;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD constexpr bool operator==(const year& _Left, const year& _Right) noexcept {\r\n        return static_cast<int>(_Left) == static_cast<int>(_Right);\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr strong_ordering operator<=>(const year& _Left, const year& _Right) noexcept {\r\n        return static_cast<int>(_Left) <=> static_cast<int>(_Right);\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr year operator+(const year& _Left, const years& _Right) noexcept {\r\n        return year{static_cast<int>(_Left) + _Right.count()};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year operator+(const years& _Left, const year& _Right) noexcept {\r\n        return _Right + _Left;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year operator-(const year& _Left, const years& _Right) noexcept {\r\n        return _Left + -_Right;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr years operator-(const year& _Left, const year& _Right) noexcept {\r\n        return years{static_cast<int>(_Left) - static_cast<int>(_Right)};\r\n    }\r\n\r\n    _EXPORT_STD class weekday_indexed;\r\n    _EXPORT_STD class weekday_last;\r\n\r\n    _EXPORT_STD class weekday {\r\n    public:\r\n        weekday() = default;\r\n        constexpr explicit weekday(unsigned int _Val) noexcept\r\n            : _Weekday{static_cast<unsigned char>(_Val == 7 ? 0 : _Val)} {}\r\n        constexpr weekday(const sys_days& _Sys_day) noexcept\r\n            : _Weekday{static_cast<unsigned char>(_Weekday_from_days(_Sys_day.time_since_epoch().count()))} {}\r\n        constexpr explicit weekday(const local_days& _Local_day) noexcept\r\n            : _Weekday{static_cast<unsigned char>(_Weekday_from_days(_Local_day.time_since_epoch().count()))} {}\r\n\r\n        constexpr weekday& operator++() noexcept {\r\n            return *this += days{1};\r\n        }\r\n        constexpr weekday operator++(int) noexcept {\r\n            weekday _Temp{*this};\r\n            ++*this;\r\n            return _Temp;\r\n        }\r\n        constexpr weekday& operator--() noexcept {\r\n            return *this -= days{1};\r\n        }\r\n        constexpr weekday operator--(int) noexcept {\r\n            weekday _Temp{*this};\r\n            --*this;\r\n            return _Temp;\r\n        }\r\n\r\n        constexpr weekday& operator+=(const days& _Days) noexcept;\r\n        constexpr weekday& operator-=(const days& _Days) noexcept;\r\n\r\n        _NODISCARD constexpr unsigned int c_encoding() const noexcept {\r\n            return _Weekday;\r\n        }\r\n        _NODISCARD constexpr unsigned int iso_encoding() const noexcept {\r\n            return _Weekday == 0u ? 7u : _Weekday;\r\n        }\r\n        _NODISCARD constexpr bool ok() const noexcept {\r\n            return _Weekday <= 6;\r\n        }\r\n\r\n        _NODISCARD constexpr weekday_indexed operator[](unsigned int _Index) const noexcept;\r\n        _NODISCARD constexpr weekday_last operator[](last_spec) const noexcept;\r\n\r\n    private:\r\n        unsigned char _Weekday;\r\n\r\n        // courtesy of Howard Hinnant (modified to avoid overflow)\r\n        // https://howardhinnant.github.io/date_algorithms.html#weekday_from_days\r\n        _NODISCARD static constexpr unsigned int _Weekday_from_days(int _Tp) noexcept {\r\n            _STL_INTERNAL_STATIC_ASSERT(~0u % 7u == 3u); // offset for `_Tp < 0` needs to change\r\n            const auto _Before_modulo = static_cast<unsigned int>(_Tp) + (_Tp >= 0 ? 4u : 0u);\r\n            return _Before_modulo % 7u; // separate expression for MSVC codegen, see GH-5153\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD constexpr bool operator==(const weekday& _Left, const weekday& _Right) noexcept {\r\n        return _Left.c_encoding() == _Right.c_encoding();\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr weekday operator+(const weekday& _Left, const days& _Right) noexcept {\r\n        const auto _Wd  = static_cast<long long>(_Left.c_encoding()) + _Right.count();\r\n        const auto _Div = (_Wd >= 0 ? _Wd : _Wd - 6) / 7;\r\n        return weekday{static_cast<unsigned int>(_Wd - _Div * 7)};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr weekday operator+(const days& _Left, const weekday& _Right) noexcept {\r\n        return _Right + _Left;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr weekday operator-(const weekday& _Left, const days& _Right) noexcept {\r\n        return _Left + -_Right;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr days operator-(const weekday& _Left, const weekday& _Right) noexcept {\r\n        const auto _Wd = _Left.c_encoding() - _Right.c_encoding();\r\n        const auto _Wk = _Wd <= 6 ? _Wd : _Wd + 7;\r\n        return days{_Wk};\r\n    }\r\n\r\n    constexpr weekday& weekday::operator+=(const days& _Days) noexcept {\r\n        *this = *this + _Days;\r\n        return *this;\r\n    }\r\n    constexpr weekday& weekday::operator-=(const days& _Days) noexcept {\r\n        *this = *this - _Days;\r\n        return *this;\r\n    }\r\n\r\n    _EXPORT_STD class weekday_indexed {\r\n    public:\r\n        weekday_indexed() = default;\r\n        constexpr weekday_indexed(const weekday& _Wd, unsigned int _Idx) noexcept\r\n            : _Weekday{_Wd}, _Index{static_cast<unsigned char>(_Idx)} {}\r\n\r\n        _NODISCARD constexpr weekday weekday() const noexcept {\r\n            return _Weekday;\r\n        }\r\n        _NODISCARD constexpr unsigned int index() const noexcept {\r\n            return _Index;\r\n        }\r\n        _NODISCARD constexpr bool ok() const noexcept {\r\n            return _Weekday.ok() && _Index >= 1 && _Index <= 5;\r\n        }\r\n\r\n    private:\r\n        _CHRONO weekday _Weekday;\r\n        unsigned char _Index;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD constexpr bool operator==(\r\n        const weekday_indexed& _Left, const weekday_indexed& _Right) noexcept {\r\n        return _Left.weekday() == _Right.weekday() && _Left.index() == _Right.index();\r\n    }\r\n\r\n    _EXPORT_STD class weekday_last {\r\n    public:\r\n        constexpr explicit weekday_last(const weekday& _Wd) noexcept : _Weekday{_Wd} {}\r\n\r\n        _NODISCARD constexpr weekday weekday() const noexcept {\r\n            return _Weekday;\r\n        }\r\n        _NODISCARD constexpr bool ok() const noexcept {\r\n            return _Weekday.ok();\r\n        }\r\n\r\n    private:\r\n        _CHRONO weekday _Weekday;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD constexpr bool operator==(const weekday_last& _Left, const weekday_last& _Right) noexcept {\r\n        return _Left.weekday() == _Right.weekday();\r\n    }\r\n\r\n    _NODISCARD constexpr weekday_indexed weekday::operator[](unsigned int _Index) const noexcept {\r\n        return {*this, _Index};\r\n    }\r\n    _NODISCARD constexpr weekday_last weekday::operator[](last_spec) const noexcept {\r\n        return weekday_last{*this};\r\n    }\r\n\r\n    _EXPORT_STD class month_day {\r\n    public:\r\n        month_day() = default;\r\n        constexpr month_day(const month& _Month_, const day& _Day_) noexcept : _Month{_Month_}, _Day{_Day_} {}\r\n\r\n        _NODISCARD constexpr month month() const noexcept {\r\n            return _Month;\r\n        }\r\n        _NODISCARD constexpr day day() const noexcept {\r\n            return _Day;\r\n        }\r\n        _NODISCARD constexpr bool ok() const noexcept {\r\n            if (!_Month.ok() || !_Day.ok()) {\r\n                return false;\r\n            }\r\n\r\n            const auto _Da = static_cast<unsigned int>(_Day);\r\n            const auto _Mo = static_cast<unsigned int>(_Month);\r\n            if (_Mo == 2) {\r\n                return _Da <= 29;\r\n            }\r\n\r\n            if (_Mo == 4 || _Mo == 6 || _Mo == 9 || _Mo == 11) {\r\n                return _Da <= 30;\r\n            }\r\n            return true;\r\n        }\r\n\r\n    private:\r\n        _CHRONO month _Month;\r\n        _CHRONO day _Day;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD constexpr bool operator==(const month_day& _Left, const month_day& _Right) noexcept {\r\n        return _Left.month() == _Right.month() && _Left.day() == _Right.day();\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr strong_ordering operator<=>(\r\n        const month_day& _Left, const month_day& _Right) noexcept {\r\n        const auto _Comp = _Left.month() <=> _Right.month();\r\n        if (_Comp != 0) {\r\n            return _Comp;\r\n        }\r\n\r\n        return _Left.day() <=> _Right.day();\r\n    }\r\n\r\n    _EXPORT_STD class month_day_last {\r\n    public:\r\n        constexpr explicit month_day_last(const month& _Month_) noexcept : _Month{_Month_} {}\r\n\r\n        _NODISCARD constexpr month month() const noexcept {\r\n            return _Month;\r\n        }\r\n        _NODISCARD constexpr bool ok() const noexcept {\r\n            return _Month.ok();\r\n        }\r\n\r\n    private:\r\n        _CHRONO month _Month;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD constexpr bool operator==(\r\n        const month_day_last& _Left, const month_day_last& _Right) noexcept {\r\n        return _Left.month() == _Right.month();\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr strong_ordering operator<=>(\r\n        const month_day_last& _Left, const month_day_last& _Right) noexcept {\r\n        return _Left.month() <=> _Right.month();\r\n    }\r\n\r\n    _EXPORT_STD class month_weekday {\r\n    public:\r\n        constexpr month_weekday(const month& _Month_, const weekday_indexed& _Wdi) noexcept\r\n            : _Month{_Month_}, _Weekday_index{_Wdi} {}\r\n\r\n        _NODISCARD constexpr month month() const noexcept {\r\n            return _Month;\r\n        }\r\n        _NODISCARD constexpr weekday_indexed weekday_indexed() const noexcept {\r\n            return _Weekday_index;\r\n        }\r\n\r\n        _NODISCARD constexpr bool ok() const noexcept {\r\n            return _Month.ok() && _Weekday_index.ok();\r\n        }\r\n\r\n    private:\r\n        _CHRONO month _Month;\r\n        _CHRONO weekday_indexed _Weekday_index;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD constexpr bool operator==(const month_weekday& _Left, const month_weekday& _Right) noexcept {\r\n        return _Left.month() == _Right.month() && _Left.weekday_indexed() == _Right.weekday_indexed();\r\n    }\r\n\r\n    _EXPORT_STD class month_weekday_last {\r\n    public:\r\n        constexpr month_weekday_last(const month& _Month_, const weekday_last& _Wdl) noexcept\r\n            : _Month{_Month_}, _Weekday_last{_Wdl} {}\r\n\r\n        _NODISCARD constexpr month month() const noexcept {\r\n            return _Month;\r\n        }\r\n        _NODISCARD constexpr weekday_last weekday_last() const noexcept {\r\n            return _Weekday_last;\r\n        }\r\n        _NODISCARD constexpr bool ok() const noexcept {\r\n            return _Month.ok() && _Weekday_last.ok();\r\n        }\r\n\r\n    private:\r\n        _CHRONO month _Month;\r\n        _CHRONO weekday_last _Weekday_last;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD constexpr bool operator==(\r\n        const month_weekday_last& _Left, const month_weekday_last& _Right) noexcept {\r\n        return _Left.month() == _Right.month() && _Left.weekday_last() == _Right.weekday_last();\r\n    }\r\n\r\n    _EXPORT_STD class year_month {\r\n    public:\r\n        year_month() = default;\r\n        constexpr year_month(const year& _Year_, const month& _Month_) noexcept : _Year{_Year_}, _Month{_Month_} {}\r\n\r\n        _NODISCARD constexpr year year() const noexcept {\r\n            return _Year;\r\n        }\r\n        _NODISCARD constexpr month month() const noexcept {\r\n            return _Month;\r\n        }\r\n\r\n        template <int = 0>\r\n        constexpr year_month& operator+=(const months& _Months) noexcept;\r\n        template <int = 0>\r\n        constexpr year_month& operator-=(const months& _Months) noexcept;\r\n        constexpr year_month& operator+=(const years& _Years) noexcept;\r\n        constexpr year_month& operator-=(const years& _Years) noexcept;\r\n\r\n        _NODISCARD constexpr bool ok() const noexcept {\r\n            return _Year.ok() && _Month.ok();\r\n        }\r\n\r\n    private:\r\n        _CHRONO year _Year;\r\n        _CHRONO month _Month;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD constexpr bool operator==(const year_month& _Left, const year_month& _Right) noexcept {\r\n        return _Left.year() == _Right.year() && _Left.month() == _Right.month();\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr strong_ordering operator<=>(\r\n        const year_month& _Left, const year_month& _Right) noexcept {\r\n        const auto _Comp = _Left.year() <=> _Right.year();\r\n        if (_Comp != 0) {\r\n            return _Comp;\r\n        }\r\n\r\n        return _Left.month() <=> _Right.month();\r\n    }\r\n\r\n    _EXPORT_STD template <int = 0>\r\n    _NODISCARD constexpr year_month operator+(const year_month& _Left, const months& _Right) noexcept {\r\n        const auto _Mo  = static_cast<long long>(static_cast<unsigned int>(_Left.month())) + (_Right.count() - 1);\r\n        const auto _Div = (_Mo >= 0 ? _Mo : _Mo - 11) / 12;\r\n        return year_month{_Left.year() + years{_Div}, month{static_cast<unsigned int>(_Mo - _Div * 12 + 1)}};\r\n    }\r\n    _EXPORT_STD template <int = 0>\r\n    _NODISCARD constexpr year_month operator+(const months& _Left, const year_month& _Right) noexcept {\r\n        return _Right + _Left;\r\n    }\r\n\r\n    _EXPORT_STD template <int = 0>\r\n    _NODISCARD constexpr year_month operator-(const year_month& _Left, const months& _Right) noexcept {\r\n        return _Left + -_Right;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr months operator-(const year_month& _Left, const year_month& _Right) noexcept {\r\n        return _Left.year() - _Right.year()\r\n             + months{static_cast<int>(static_cast<unsigned int>(_Left.month()))\r\n                      - static_cast<int>(static_cast<unsigned int>(_Right.month()))};\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr year_month operator+(const year_month& _Left, const years& _Right) noexcept {\r\n        return {year{_Left.year() + _Right}, _Left.month()};\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr year_month operator+(const years& _Left, const year_month& _Right) noexcept {\r\n        return _Right + _Left;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr year_month operator-(const year_month& _Left, const years& _Right) noexcept {\r\n        return _Left + -_Right;\r\n    }\r\n\r\n    template <int>\r\n    constexpr year_month& year_month::operator+=(const months& _Months) noexcept {\r\n        *this = *this + _Months;\r\n        return *this;\r\n    }\r\n    template <int>\r\n    constexpr year_month& year_month::operator-=(const months& _Months) noexcept {\r\n        *this = *this - _Months;\r\n        return *this;\r\n    }\r\n    constexpr year_month& year_month::operator+=(const years& _Years) noexcept {\r\n        *this = *this + _Years;\r\n        return *this;\r\n    }\r\n    constexpr year_month& year_month::operator-=(const years& _Years) noexcept {\r\n        *this = *this - _Years;\r\n        return *this;\r\n    }\r\n\r\n    // To prevent UB by going out of bounds, four extra days with an invalid day are added.\r\n    inline constexpr day _Last_day_table[] = {day{31}, day{28}, day{31}, day{30}, day{31}, day{30}, day{31}, day{31},\r\n        day{30}, day{31}, day{30}, day{31}, day{255}, day{255}, day{255}, day{255}};\r\n\r\n    _NODISCARD constexpr day _Last_day(const year& _Year, const month& _Month) {\r\n        if (_Month == month{2} && _Year.is_leap()) {\r\n            return day{29};\r\n        }\r\n\r\n        return _Last_day_table[(static_cast<unsigned int>(_Month) - 1) & 0xF];\r\n    }\r\n\r\n    _EXPORT_STD class year_month_day_last;\r\n\r\n    _EXPORT_STD class year_month_day {\r\n    public:\r\n        year_month_day() = default;\r\n        constexpr year_month_day(const year& _Year_, const month& _Month_, const day& _Day_) noexcept\r\n            : _Year{_Year_}, _Month{_Month_}, _Day{_Day_} {}\r\n        constexpr year_month_day(const year_month_day_last& _Ymdl) noexcept;\r\n        constexpr year_month_day(const sys_days& _Sys_days) noexcept\r\n            : year_month_day{_Civil_from_days(_Sys_days.time_since_epoch().count())} {}\r\n        constexpr explicit year_month_day(const local_days& _Local_days) noexcept\r\n            : year_month_day{_Civil_from_days(_Local_days.time_since_epoch().count())} {}\r\n\r\n        template <int = 0>\r\n        constexpr year_month_day& operator+=(const months& _Months) noexcept;\r\n        template <int = 0>\r\n        constexpr year_month_day& operator-=(const months& _Months) noexcept;\r\n        constexpr year_month_day& operator+=(const years& _Years) noexcept;\r\n        constexpr year_month_day& operator-=(const years& _Years) noexcept;\r\n\r\n        _NODISCARD constexpr year year() const noexcept {\r\n            return _Year;\r\n        }\r\n        _NODISCARD constexpr month month() const noexcept {\r\n            return _Month;\r\n        }\r\n        _NODISCARD constexpr day day() const noexcept {\r\n            return _Day;\r\n        }\r\n\r\n        _NODISCARD constexpr operator sys_days() const noexcept {\r\n            return sys_days{_Days_from_civil()};\r\n        }\r\n        _NODISCARD constexpr explicit operator local_days() const noexcept {\r\n            return local_days{static_cast<sys_days>(*this).time_since_epoch()};\r\n        }\r\n        _NODISCARD constexpr bool ok() const noexcept {\r\n            if (!_Year.ok() || !_Month.ok()) {\r\n                return false;\r\n            }\r\n\r\n            return _Day >= _CHRONO day{1} && _Day <= _CHRONO _Last_day(_Year, _Month);\r\n        }\r\n\r\n        _NODISCARD constexpr int _Calculate_weekday() const noexcept {\r\n            const int _Day_int   = static_cast<int>(static_cast<unsigned int>(_Day));\r\n            const int _Month_int = static_cast<int>(static_cast<unsigned int>(_Month));\r\n\r\n            const int _Era_year = static_cast<int>(_Year) - (_Month_int <= 2);\r\n            const int _Era      = (_Era_year >= 0 ? _Era_year : _Era_year - 399) / 400;\r\n            const int _Yoe      = _Era_year - _Era * 400;\r\n            const int _Yday_era = ((979 * (_Month_int + (_Month_int > 2 ? -3 : 9)) + 19) >> 5) + _Day_int - 1;\r\n            const int _Doe      = ((1461 * _Yoe) >> 2) - _Yoe / 100 + _Yday_era;\r\n            return (_Doe + 3) % 7; // the era began on a Wednesday\r\n        }\r\n\r\n    private:\r\n        _CHRONO year _Year;\r\n        _CHRONO month _Month;\r\n        _CHRONO day _Day;\r\n\r\n        // _Civil_from_days and _Days_from_civil perform conversions between the dates in the (proleptic) Gregorian\r\n        // calendar and the continuous count of days since 1970-01-01.\r\n\r\n        // To simplify the handling of leap days (February 29th), the algorithm below uses a modified calendar\r\n        // internally, in which each year begins on March 1st, while January and February belong to the previous year.\r\n        // We denote the modified year and month number as _Yp and _Mp. We also define modified centuries that begin on\r\n        // each modified year whose _Yp is a multiple of 100.\r\n\r\n        // _Mp | Month     | Day of Year\r\n        // --- | --------- | -----------\r\n        //  0  | March     | [  0,  30]\r\n        //  1  | April     | [ 31,  60]\r\n        //  2  | May       | [ 61,  91]\r\n        //  3  | June      | [ 92, 121]\r\n        //  4  | July      | [122, 152]\r\n        //  5  | August    | [153, 183]\r\n        //  6  | September | [184, 213]\r\n        //  7  | October   | [214, 244]\r\n        //  8  | November  | [245, 274]\r\n        //  9  | December  | [275, 305]\r\n        // 10  | January   | [306, 336]\r\n        // 11  | February  | [337, 365] on leap years, [337, 364] on regular years\r\n\r\n        // _Yp |  First Day  | Last Day (inclusive) | Leap Year?\r\n        // --- | ----------- | -------------------- | ----------\r\n        //  -4 | -0004-03-01 |     -0003-02-28      |     No\r\n        //  -3 | -0003-03-01 |     -0002-02-28      |     No\r\n        //  -2 | -0002-03-01 |     -0001-02-28      |     No\r\n        //  -1 | -0001-03-01 |      0000-02-29      |     Yes\r\n        //   0 |  0000-03-01 |      0001-02-28      |     No\r\n        //   1 |  0001-03-01 |      0002-02-28      |     No\r\n        //   2 |  0002-03-01 |      0003-02-28      |     No\r\n        //   3 |  0003-03-01 |      0004-02-29      |     Yes\r\n\r\n        // _Century |  First Day  | Last Day (inclusive) | Long Century?\r\n        // -------- | ----------- | -------------------- | -------------\r\n        //    -4    | -0400-03-01 |     -0300-02-28      |      No\r\n        //    -3    | -0300-03-01 |     -0200-02-28      |      No\r\n        //    -2    | -0200-03-01 |     -0100-02-28      |      No\r\n        //    -1    | -0100-03-01 |      0000-02-29      |      Yes\r\n        //     0    |  0000-03-01 |      0100-02-28      |      No\r\n        //     1    |  0100-03-01 |      0200-02-28      |      No\r\n        //     2    |  0200-03-01 |      0300-02-28      |      No\r\n        //     3    |  0300-03-01 |      0400-02-29      |      Yes\r\n\r\n        // The structure of the modified calendar:\r\n        // 1 ) It has a period of 4 centuries.\r\n        // 2 ) Each calendar period (146097 days) contains 3 regular centuries followed by a long century (36525 days).\r\n        // 3 ) Each regular century (36524 days) contains 24 regular 4-year spans followed by a short 4-year span.\r\n        // 3') Each long century (36525 days) contains 25 regular 4-year spans.\r\n        // 4 ) Each regular 4-year span (1461 days) contains 3 regular years followed by a leap year.\r\n        // 4') Each short 4-year span (1460 days) contains 4 regular years.\r\n\r\n        // Formula 1: Compute _Day_of_year of the first day of month _Mp\r\n        //\r\n        //   _Day_of_year = (979 * _Mp + 19) >> 5\r\n        //\r\n        // A more well-known formula is 30 * _Mp + floor((3 * _Mp + 2) / 5) or floor((153 * _Mp + 2) / 5), which is used\r\n        // in Howard Hinnant's paper.\r\n        //\r\n        // The formula above returns the same result for all _Mp in [0, 11].\r\n        // Note that 979 / 2^5 = 30.59375 ~= 30.6 = 153 / 5.\r\n\r\n        // Formula 1': Compute _Mp from _Day_of_year\r\n        //\r\n        //   _Mp = (535 * _Day_of_year + 333) >> 14\r\n        //\r\n        // Howard Hinnant's paper uses floor((5 * _Day_of_year + 2) / 153), the inverse of floor((153 * _Mp + 2) / 5) or\r\n        // ceil((153 * _Mp - 2) / 5).\r\n        //\r\n        // The formula above returns the same result for all _Day_of_year in [0, 365].\r\n        // Note that 2^14 / 535 = 30.624... ~= 30.6 = 153 / 5.\r\n\r\n        // Formula 2: Compute _Zx of the first day of year _Yp, where _Zx is the continuous count of days since\r\n        // 0000-03-01.\r\n        //\r\n        //   _Zx = ((1461 * _Yp) >> 2) - _Century + (_Century >> 2)\r\n        //\r\n        // Start with multiplying by the number of days in regular years (365), add one day for the leap year in each\r\n        // 4-year span, subtract one day for the short 4-year span in each century, and finally add one day for the long\r\n        // century in each calendar period. This gives us 365 * _Yp + floor(_Yp / 4) - _Century + floor(_Century / 4).\r\n\r\n        // Formula 2-1: Compute _Day_of_century of the first day of year _Year_of_century\r\n        //\r\n        //   _Day_of_century = (1461 * _Year_of_century) >> 2\r\n        //\r\n        // Start with multiplying by the number of days in regular years (365), add one day for the leap year in each\r\n        // 4-year span. This gives us 365 * _Year_of_century + floor(_Year_of_century / 4)\r\n        // == floor(1461 * _Year_of_century / 4).\r\n\r\n        // Formula 2-1': Compute _Year_of_century from _Day_of_century\r\n        //\r\n        //   _Year_of_century = (91867 * (_Day_of_century + 1)) >> 25\r\n        //\r\n        // The inverse of floor(1461 * _Year_of_century / 4) or ceil((1461 * _Year_of_century - 3) / 4) is\r\n        // floor((4 * _Day_of_century + 3) / 1461).\r\n        //\r\n        // The formula above returns the same result for all _Day_of_century in [0, 36524].\r\n        // Note that 2^25 / 91867 = 365.2501... ~= 365.25 = 1461 / 4.\r\n\r\n        // Formula 2-2: Compute _Zx of the first day of century _Century, where _Zx is the continuous count of days\r\n        // since 0000-03-01.\r\n        //\r\n        //   _Zx = (146097 * _Century) >> 2\r\n        //\r\n        // Start with multiplying by the number of days in regular centuries (36524), add one day for the long century\r\n        // in each calendar period. This gives us 36524 * _Century + floor(_Century / 4) = floor(146097 * _Century / 4).\r\n\r\n        // Formula 2-2': Compute _Century from _Zx, where _Zx is the continuous count of days since 0000-03-01.\r\n        //\r\n        //   _Century = floor((4 * _Zx + 3) / 146097)\r\n        //\r\n        // This is the inverse of floor(146097 * _Year_of_century / 4) or ceil((146097 * _Year_of_century - 3) / 4)\r\n\r\n        // courtesy of Howard Hinnant\r\n        // https://howardhinnant.github.io/date_algorithms.html#civil_from_days\r\n        _NODISCARD static constexpr year_month_day _Civil_from_days(int _Tp) noexcept {\r\n            static_assert(numeric_limits<unsigned int>::digits >= 32);\r\n            static_assert(numeric_limits<int>::digits >= 26);\r\n            const int _Zx = _Tp + 719468; // Shift epoch to 0000-03-01\r\n            // Formula 2-2'\r\n            const int _Century = (_Zx >= 0 ? 4 * _Zx + 3 : 4 * _Zx - 146093) / 146097;\r\n            // Formula 2-2\r\n            const unsigned int _Day_of_century =\r\n                static_cast<unsigned int>(_Zx - ((146097 * _Century) >> 2)); // [0, 36524]\r\n            // Formula 2-1'\r\n            const unsigned int _Year_of_century = (91867 * (_Day_of_century + 1)) >> 25; // [0, 99]\r\n            const int _Yp = static_cast<int>(_Year_of_century) + _Century * 100; // Where March is the first month\r\n            // Formula 2-1\r\n            const unsigned int _Day_of_year = _Day_of_century - ((1461 * _Year_of_century) >> 2); // [0, 365]\r\n            // Formula 1'\r\n            const unsigned int _Mp = (535 * _Day_of_year + 333) >> 14; // [0, 11]\r\n            // Formula 1\r\n            const unsigned int _Day   = _Day_of_year - ((979 * _Mp + 19) >> 5) + 1; // [1, 31]\r\n            const unsigned int _Month = _Mp + (_Mp < 10 ? 3 : static_cast<unsigned int>(-9)); // [1, 12]\r\n            return year_month_day{_CHRONO year{_Yp + (_Month <= 2)}, _CHRONO month{_Month}, _CHRONO day{_Day}};\r\n        }\r\n        // courtesy of Howard Hinnant\r\n        // https://howardhinnant.github.io/date_algorithms.html#days_from_civil\r\n        _NODISCARD constexpr days _Days_from_civil() const noexcept {\r\n            static_assert(numeric_limits<unsigned int>::digits >= 18);\r\n            static_assert(numeric_limits<int>::digits >= 26);\r\n            const unsigned int _Mo = static_cast<unsigned int>(_Month); // [1, 12]\r\n            const int _Yp          = static_cast<int>(_Year) - (_Mo <= 2);\r\n            const int _Century     = (_Yp >= 0 ? _Yp : _Yp - 99) / 100;\r\n            const unsigned int _Mp = _Mo + (_Mo > 2 ? static_cast<unsigned int>(-3) : 9); // [0, 11]\r\n            // Formula 1\r\n            const int _Day_of_year = static_cast<int>(((979 * _Mp + 19) >> 5) + static_cast<unsigned int>(_Day)) - 1;\r\n            // Formula 2\r\n            return days{((1461 * _Yp) >> 2) - _Century + (_Century >> 2) + _Day_of_year - 719468};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD constexpr bool operator==(\r\n        const year_month_day& _Left, const year_month_day& _Right) noexcept {\r\n        return _Left.year() == _Right.year() && _Left.month() == _Right.month() && _Left.day() == _Right.day();\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr strong_ordering operator<=>(\r\n        const year_month_day& _Left, const year_month_day& _Right) noexcept {\r\n        auto _Comp = _Left.year() <=> _Right.year();\r\n        if (_Comp != 0) {\r\n            return _Comp;\r\n        }\r\n\r\n        _Comp = _Left.month() <=> _Right.month();\r\n        if (_Comp != 0) {\r\n            return _Comp;\r\n        }\r\n\r\n        return _Left.day() <=> _Right.day();\r\n    }\r\n\r\n    _EXPORT_STD template <int = 0>\r\n    _NODISCARD constexpr year_month_day operator+(const year_month_day& _Left, const months& _Right) noexcept {\r\n        const auto _Ym = year_month{_Left.year(), _Left.month()} + _Right;\r\n        return {_Ym.year(), _Ym.month(), _Left.day()};\r\n    }\r\n\r\n    _EXPORT_STD template <int = 0>\r\n    _NODISCARD constexpr year_month_day operator+(const months& _Left, const year_month_day& _Right) noexcept {\r\n        return _Right + _Left;\r\n    }\r\n\r\n    _EXPORT_STD template <int = 0>\r\n    _NODISCARD constexpr year_month_day operator-(const year_month_day& _Left, const months& _Right) noexcept {\r\n        return _Left + -_Right;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day operator+(\r\n        const year_month_day& _Left, const years& _Right) noexcept {\r\n        return {_Left.year() + _Right, _Left.month(), _Left.day()};\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day operator+(\r\n        const years& _Left, const year_month_day& _Right) noexcept {\r\n        return _Right + _Left;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day operator-(\r\n        const year_month_day& _Left, const years& _Right) noexcept {\r\n        return _Left + -_Right;\r\n    }\r\n\r\n    template <int>\r\n    constexpr year_month_day& year_month_day::operator+=(const months& _Months) noexcept {\r\n        *this = *this + _Months;\r\n        return *this;\r\n    }\r\n    template <int>\r\n    constexpr year_month_day& year_month_day::operator-=(const months& _Months) noexcept {\r\n        *this = *this - _Months;\r\n        return *this;\r\n    }\r\n    constexpr year_month_day& year_month_day::operator+=(const years& _Years) noexcept {\r\n        *this = *this + _Years;\r\n        return *this;\r\n    }\r\n    constexpr year_month_day& year_month_day::operator-=(const years& _Years) noexcept {\r\n        *this = *this - _Years;\r\n        return *this;\r\n    }\r\n\r\n    _EXPORT_STD class year_month_day_last {\r\n    public:\r\n        constexpr year_month_day_last(const year& _Year_, const month_day_last& _Mdl) noexcept\r\n            : _Year{_Year_}, _Month_day_last{_Mdl} {}\r\n\r\n        template <int = 0>\r\n        constexpr year_month_day_last& operator+=(const months& _Months) noexcept;\r\n        template <int = 0>\r\n        constexpr year_month_day_last& operator-=(const months& _Months) noexcept;\r\n        constexpr year_month_day_last& operator+=(const years& _Years) noexcept;\r\n        constexpr year_month_day_last& operator-=(const years& _Years) noexcept;\r\n\r\n        _NODISCARD constexpr year year() const noexcept {\r\n            return _Year;\r\n        }\r\n        _NODISCARD constexpr month month() const noexcept {\r\n            return _Month_day_last.month();\r\n        }\r\n        _NODISCARD constexpr month_day_last month_day_last() const noexcept {\r\n            return _Month_day_last;\r\n        }\r\n        _NODISCARD constexpr day day() const noexcept {\r\n            return _CHRONO _Last_day(year(), month());\r\n        }\r\n\r\n        _NODISCARD constexpr operator sys_days() const noexcept {\r\n            return sys_days{year_month_day{year(), month(), day()}};\r\n        }\r\n        _NODISCARD constexpr explicit operator local_days() const noexcept {\r\n            return local_days{static_cast<sys_days>(*this).time_since_epoch()};\r\n        }\r\n        _NODISCARD constexpr bool ok() const noexcept {\r\n            return _Year.ok() && _Month_day_last.ok();\r\n        }\r\n\r\n    private:\r\n        _CHRONO year _Year;\r\n        _CHRONO month_day_last _Month_day_last;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD constexpr bool operator==(\r\n        const year_month_day_last& _Left, const year_month_day_last& _Right) noexcept {\r\n        return _Left.year() == _Right.year() && _Left.month_day_last() == _Right.month_day_last();\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr strong_ordering operator<=>(\r\n        const year_month_day_last& _Left, const year_month_day_last& _Right) noexcept {\r\n        const auto _Comp = _Left.year() <=> _Right.year();\r\n        if (_Comp != 0) {\r\n            return _Comp;\r\n        }\r\n\r\n        return _Left.month_day_last() <=> _Right.month_day_last();\r\n    }\r\n\r\n    _EXPORT_STD template <int = 0>\r\n    _NODISCARD constexpr year_month_day_last operator+(\r\n        const year_month_day_last& _Left, const months& _Right) noexcept {\r\n        const auto _Ym = year_month{_Left.year(), _Left.month()} + _Right;\r\n        return {_Ym.year(), month_day_last{_Ym.month()}};\r\n    }\r\n    _EXPORT_STD template <int = 0>\r\n    _NODISCARD constexpr year_month_day_last operator+(\r\n        const months& _Left, const year_month_day_last& _Right) noexcept {\r\n        return _Right + _Left;\r\n    }\r\n\r\n    _EXPORT_STD template <int = 0>\r\n    _NODISCARD constexpr year_month_day_last operator-(\r\n        const year_month_day_last& _Left, const months& _Right) noexcept {\r\n        return _Left + -_Right;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day_last operator+(\r\n        const year_month_day_last& _Left, const years& _Right) noexcept {\r\n        return {_Left.year() + _Right, _Left.month_day_last()};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day_last operator+(\r\n        const years& _Left, const year_month_day_last& _Right) noexcept {\r\n        return _Right + _Left;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day_last operator-(\r\n        const year_month_day_last& _Left, const years& _Right) noexcept {\r\n        return _Left + -_Right;\r\n    }\r\n\r\n    template <int>\r\n    constexpr year_month_day_last& year_month_day_last::operator+=(const months& _Months) noexcept {\r\n        *this = *this + _Months;\r\n        return *this;\r\n    }\r\n    template <int>\r\n    constexpr year_month_day_last& year_month_day_last::operator-=(const months& _Months) noexcept {\r\n        *this = *this - _Months;\r\n        return *this;\r\n    }\r\n    constexpr year_month_day_last& year_month_day_last::operator+=(const years& _Years) noexcept {\r\n        *this = *this + _Years;\r\n        return *this;\r\n    }\r\n    constexpr year_month_day_last& year_month_day_last::operator-=(const years& _Years) noexcept {\r\n        *this = *this - _Years;\r\n        return *this;\r\n    }\r\n\r\n    constexpr year_month_day::year_month_day(const year_month_day_last& _Ymdl) noexcept\r\n        : _Year{_Ymdl.year()}, _Month{_Ymdl.month()}, _Day{_Ymdl.day()} {}\r\n\r\n    _EXPORT_STD class year_month_weekday {\r\n    public:\r\n        year_month_weekday() = default;\r\n        constexpr year_month_weekday(const year& _Year_, const month& _Month_, const weekday_indexed& _Wdi) noexcept\r\n            : _Year{_Year_}, _Month{_Month_}, _Weekday_index{_Wdi} {}\r\n        constexpr year_month_weekday(const sys_days& _Sys_days) noexcept\r\n            : year_month_weekday{_Ymwd_from_days(_Sys_days.time_since_epoch())} {}\r\n        constexpr explicit year_month_weekday(const local_days& _Local_days) noexcept\r\n            : year_month_weekday{_Ymwd_from_days(_Local_days.time_since_epoch())} {}\r\n\r\n        template <int = 0>\r\n        constexpr year_month_weekday& operator+=(const months& _Months) noexcept;\r\n        template <int = 0>\r\n        constexpr year_month_weekday& operator-=(const months& _Months) noexcept;\r\n        constexpr year_month_weekday& operator+=(const years& _Years) noexcept;\r\n        constexpr year_month_weekday& operator-=(const years& _Years) noexcept;\r\n\r\n        _NODISCARD constexpr year year() const noexcept {\r\n            return _Year;\r\n        }\r\n        _NODISCARD constexpr month month() const noexcept {\r\n            return _Month;\r\n        }\r\n        _NODISCARD constexpr weekday weekday() const noexcept {\r\n            return _Weekday_index.weekday();\r\n        }\r\n        _NODISCARD constexpr unsigned int index() const noexcept {\r\n            return _Weekday_index.index();\r\n        }\r\n        _NODISCARD constexpr weekday_indexed weekday_indexed() const noexcept {\r\n            return _Weekday_index;\r\n        }\r\n\r\n        _NODISCARD constexpr operator sys_days() const noexcept {\r\n            const sys_days _First = year_month_day{_Year, _Month, day{1}};\r\n            const days _Diff      = weekday() - _CHRONO weekday{_First};\r\n            const days _Days      = _Diff + days{(static_cast<int>(index()) - 1) * 7};\r\n            return _First + _Days;\r\n        }\r\n        _NODISCARD constexpr explicit operator local_days() const noexcept {\r\n            return local_days{static_cast<sys_days>(*this).time_since_epoch()};\r\n        }\r\n        _NODISCARD constexpr bool ok() const noexcept {\r\n            if (!_Year.ok() || !_Month.ok() || !_Weekday_index.ok()) {\r\n                return false;\r\n            }\r\n\r\n            if (_Weekday_index.index() <= 4) {\r\n                return true;\r\n            }\r\n\r\n            // As index() == 5 is not always valid\r\n            // Determine the date of the first weekday and check if + days{28} is <= last day of the month\r\n            const sys_days _First_of_month = year_month_day{_Year, _Month, day{1}};\r\n            const days _First_weekday      = weekday() - _CHRONO weekday{_First_of_month} + days{1};\r\n            const days _Last               = _First_weekday + days{28};\r\n            return static_cast<unsigned int>(_Last.count())\r\n                <= static_cast<unsigned int>(_CHRONO _Last_day(_Year, _Month));\r\n        }\r\n\r\n    private:\r\n        _CHRONO year _Year;\r\n        _CHRONO month _Month;\r\n        _CHRONO weekday_indexed _Weekday_index;\r\n\r\n        _NODISCARD static constexpr year_month_weekday _Ymwd_from_days(days _Dp) noexcept {\r\n            const _CHRONO year_month_day _Ymd = sys_days{_Dp};\r\n            const _CHRONO weekday _Wd         = sys_days{_Dp};\r\n            const auto _Idx                   = ((static_cast<unsigned int>(_Ymd.day()) - 1) / 7) + 1;\r\n            return {_Ymd.year(), _Ymd.month(), _Wd[_Idx]};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD constexpr bool operator==(\r\n        const year_month_weekday& _Left, const year_month_weekday& _Right) noexcept {\r\n        return _Left.year() == _Right.year() && _Left.month() == _Right.month()\r\n            && _Left.weekday_indexed() == _Right.weekday_indexed();\r\n    }\r\n\r\n    _EXPORT_STD template <int = 0>\r\n    _NODISCARD constexpr year_month_weekday operator+(const year_month_weekday& _Left, const months& _Right) noexcept {\r\n        const auto _Ym = year_month{_Left.year(), _Left.month()} + _Right;\r\n        return {_Ym.year(), _Ym.month(), _Left.weekday_indexed()};\r\n    }\r\n    _EXPORT_STD template <int = 0>\r\n    _NODISCARD constexpr year_month_weekday operator+(const months& _Left, const year_month_weekday& _Right) noexcept {\r\n        return _Right + _Left;\r\n    }\r\n\r\n    _EXPORT_STD template <int = 0>\r\n    _NODISCARD constexpr year_month_weekday operator-(const year_month_weekday& _Left, const months& _Right) noexcept {\r\n        return _Left + -_Right;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr year_month_weekday operator+(\r\n        const year_month_weekday& _Left, const years& _Right) noexcept {\r\n        return year_month_weekday{_Left.year() + _Right, _Left.month(), _Left.weekday_indexed()};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_weekday operator+(\r\n        const years& _Left, const year_month_weekday& _Right) noexcept {\r\n        return _Right + _Left;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr year_month_weekday operator-(\r\n        const year_month_weekday& _Left, const years& _Right) noexcept {\r\n        return _Left + -_Right;\r\n    }\r\n\r\n    template <int>\r\n    constexpr year_month_weekday& year_month_weekday::operator+=(const months& _Months) noexcept {\r\n        *this = *this + _Months;\r\n        return *this;\r\n    }\r\n    template <int>\r\n    constexpr year_month_weekday& year_month_weekday::operator-=(const months& _Months) noexcept {\r\n        *this = *this - _Months;\r\n        return *this;\r\n    }\r\n    constexpr year_month_weekday& year_month_weekday::operator+=(const years& _Years) noexcept {\r\n        *this = *this + _Years;\r\n        return *this;\r\n    }\r\n    constexpr year_month_weekday& year_month_weekday::operator-=(const years& _Years) noexcept {\r\n        *this = *this - _Years;\r\n        return *this;\r\n    }\r\n\r\n    _EXPORT_STD class year_month_weekday_last {\r\n    public:\r\n        constexpr year_month_weekday_last(const year& _Year_, const month& _Month_, const weekday_last& _Wdl) noexcept\r\n            : _Year{_Year_}, _Month{_Month_}, _Weekday_last{_Wdl} {}\r\n\r\n        template <int = 0>\r\n        constexpr year_month_weekday_last& operator+=(const months& _Months) noexcept;\r\n        template <int = 0>\r\n        constexpr year_month_weekday_last& operator-=(const months& _Months) noexcept;\r\n        constexpr year_month_weekday_last& operator+=(const years& _Years) noexcept;\r\n        constexpr year_month_weekday_last& operator-=(const years& _Years) noexcept;\r\n\r\n        _NODISCARD constexpr year year() const noexcept {\r\n            return _Year;\r\n        }\r\n        _NODISCARD constexpr month month() const noexcept {\r\n            return _Month;\r\n        }\r\n        _NODISCARD constexpr weekday weekday() const noexcept {\r\n            return _Weekday_last.weekday();\r\n        }\r\n\r\n        _NODISCARD constexpr weekday_last weekday_last() const noexcept {\r\n            return _Weekday_last;\r\n        }\r\n\r\n        _NODISCARD constexpr operator sys_days() const noexcept {\r\n            const sys_days _Last = year_month_day_last{_Year, month_day_last{_Month}};\r\n            const auto _Diff     = _CHRONO weekday{_Last} - weekday();\r\n            return _Last - _Diff;\r\n        }\r\n        _NODISCARD constexpr explicit operator local_days() const noexcept {\r\n            return local_days{static_cast<sys_days>(*this).time_since_epoch()};\r\n        }\r\n        _NODISCARD constexpr bool ok() const noexcept {\r\n            return _Year.ok() && _Month.ok() && _Weekday_last.ok();\r\n        }\r\n\r\n    private:\r\n        _CHRONO year _Year;\r\n        _CHRONO month _Month;\r\n        _CHRONO weekday_last _Weekday_last;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD constexpr bool operator==(\r\n        const year_month_weekday_last& _Left, const year_month_weekday_last& _Right) noexcept {\r\n        return _Left.year() == _Right.year() && _Left.month() == _Right.month()\r\n            && _Left.weekday_last() == _Right.weekday_last();\r\n    }\r\n\r\n    _EXPORT_STD template <int = 0>\r\n    _NODISCARD constexpr year_month_weekday_last operator+(\r\n        const year_month_weekday_last& _Left, const months& _Right) noexcept {\r\n        const auto _Ym = year_month{_Left.year(), _Left.month()} + _Right;\r\n        return {_Ym.year(), _Ym.month(), _Left.weekday_last()};\r\n    }\r\n    _EXPORT_STD template <int = 0>\r\n    _NODISCARD constexpr year_month_weekday_last operator+(\r\n        const months& _Left, const year_month_weekday_last& _Right) noexcept {\r\n        return _Right + _Left;\r\n    }\r\n\r\n    _EXPORT_STD template <int = 0>\r\n    _NODISCARD constexpr year_month_weekday_last operator-(\r\n        const year_month_weekday_last& _Left, const months& _Right) noexcept {\r\n        return _Left + -_Right;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr year_month_weekday_last operator+(\r\n        const year_month_weekday_last& _Left, const years& _Right) noexcept {\r\n        return {_Left.year() + _Right, _Left.month(), _Left.weekday_last()};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_weekday_last operator+(\r\n        const years& _Left, const year_month_weekday_last& _Right) noexcept {\r\n        return _Right + _Left;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr year_month_weekday_last operator-(\r\n        const year_month_weekday_last& _Left, const years& _Right) noexcept {\r\n        return _Left + -_Right;\r\n    }\r\n\r\n    template <int>\r\n    constexpr year_month_weekday_last& year_month_weekday_last::operator+=(const months& _Months) noexcept {\r\n        *this = *this + _Months;\r\n        return *this;\r\n    }\r\n    template <int>\r\n    constexpr year_month_weekday_last& year_month_weekday_last::operator-=(const months& _Months) noexcept {\r\n        *this = *this - _Months;\r\n        return *this;\r\n    }\r\n    constexpr year_month_weekday_last& year_month_weekday_last::operator+=(const years& _Years) noexcept {\r\n        *this = *this + _Years;\r\n        return *this;\r\n    }\r\n    constexpr year_month_weekday_last& year_month_weekday_last::operator-=(const years& _Years) noexcept {\r\n        *this = *this - _Years;\r\n        return *this;\r\n    }\r\n\r\n    // Civil calendar conventional syntax operators\r\n    _EXPORT_STD _NODISCARD constexpr year_month operator/(const year& _Year, const month& _Month) noexcept {\r\n        return {_Year, _Month};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month operator/(const year& _Year, int _Month) noexcept {\r\n        return _Year / month{static_cast<unsigned int>(_Month)};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_day operator/(const month& _Month, const day& _Day) noexcept {\r\n        return {_Month, _Day};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_day operator/(const month& _Month, int _Day) noexcept {\r\n        return _Month / day{static_cast<unsigned int>(_Day)};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_day operator/(int _Month, const day& _Day) noexcept {\r\n        return month{static_cast<unsigned int>(_Month)} / _Day;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_day operator/(const day& _Day, const month& _Month) noexcept {\r\n        return _Month / _Day;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_day operator/(const day& _Day, int _Month) noexcept {\r\n        return month{static_cast<unsigned int>(_Month)} / _Day;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_day_last operator/(const month& _Month, last_spec) noexcept {\r\n        return month_day_last{_Month};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_day_last operator/(int _Month, last_spec) noexcept {\r\n        return month{static_cast<unsigned int>(_Month)} / last;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_day_last operator/(last_spec, const month& _Month) noexcept {\r\n        return _Month / last;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_day_last operator/(last_spec, int _Month) noexcept {\r\n        return month{static_cast<unsigned int>(_Month)} / last;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_weekday operator/(\r\n        const month& _Month, const weekday_indexed& _Wdi) noexcept {\r\n        return {_Month, _Wdi};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_weekday operator/(int _Month, const weekday_indexed& _Wdi) noexcept {\r\n        return month{static_cast<unsigned int>(_Month)} / _Wdi;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_weekday operator/(\r\n        const weekday_indexed& _Wdi, const month& _Month) noexcept {\r\n        return _Month / _Wdi;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_weekday operator/(const weekday_indexed& _Wdi, int _Month) noexcept {\r\n        return month{static_cast<unsigned int>(_Month)} / _Wdi;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_weekday_last operator/(\r\n        const month& _Month, const weekday_last& _Wdl) noexcept {\r\n        return {_Month, _Wdl};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_weekday_last operator/(int _Month, const weekday_last& _Wdl) noexcept {\r\n        return month{static_cast<unsigned int>(_Month)} / _Wdl;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_weekday_last operator/(\r\n        const weekday_last& _Wdl, const month& _Month) noexcept {\r\n        return _Month / _Wdl;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr month_weekday_last operator/(const weekday_last& _Wdl, int _Month) noexcept {\r\n        return month{static_cast<unsigned int>(_Month)} / _Wdl;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day operator/(const year_month& _Ym, const day& _Day) noexcept {\r\n        return {_Ym.year(), _Ym.month(), _Day};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day operator/(const year_month& _Ym, int _Day) noexcept {\r\n        return _Ym / day{static_cast<unsigned int>(_Day)};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day operator/(const year& _Year, const month_day& _Md) noexcept {\r\n        return _Year / _Md.month() / _Md.day();\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day operator/(int _Year, const month_day& _Md) noexcept {\r\n        return year{_Year} / _Md.month() / _Md.day();\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day operator/(const month_day& _Md, const year& _Year) noexcept {\r\n        return _Year / _Md.month() / _Md.day();\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day operator/(const month_day& _Md, int _Year) noexcept {\r\n        return year{_Year} / _Md.month() / _Md.day();\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day_last operator/(const year_month& _Ym, last_spec) noexcept {\r\n        return {_Ym.year(), month_day_last{_Ym.month()}};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day_last operator/(\r\n        const year& _Year, const month_day_last& _Mdl) noexcept {\r\n        return {_Year, _Mdl};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day_last operator/(int _Year, const month_day_last& _Mdl) noexcept {\r\n        return year{_Year} / _Mdl;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day_last operator/(\r\n        const month_day_last& _Mdl, const year& _Year) noexcept {\r\n        return _Year / _Mdl;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_day_last operator/(const month_day_last& _Mdl, int _Year) noexcept {\r\n        return year{_Year} / _Mdl;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_weekday operator/(\r\n        const year_month& _Ym, const weekday_indexed& _Wdi) noexcept {\r\n        return year_month_weekday{_Ym.year(), _Ym.month(), _Wdi};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_weekday operator/(\r\n        const year& _Year, const month_weekday& _Mwd) noexcept {\r\n        return year_month_weekday{_Year, _Mwd.month(), _Mwd.weekday_indexed()};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_weekday operator/(int _Year, const month_weekday& _Mwd) noexcept {\r\n        return year{_Year} / _Mwd;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_weekday operator/(\r\n        const month_weekday& _Mwd, const year& _Year) noexcept {\r\n        return _Year / _Mwd;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_weekday operator/(const month_weekday& _Mwd, int _Year) noexcept {\r\n        return year{_Year} / _Mwd;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_weekday_last operator/(\r\n        const year_month& _Ym, const weekday_last& _Wdl) noexcept {\r\n        return {_Ym.year(), _Ym.month(), _Wdl};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_weekday_last operator/(\r\n        const year& _Year, const month_weekday_last& _Mwdl) noexcept {\r\n        return {_Year, _Mwdl.month(), _Mwdl.weekday_last()};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_weekday_last operator/(\r\n        int _Year, const month_weekday_last& _Mwdl) noexcept {\r\n        return year{_Year} / _Mwdl;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_weekday_last operator/(\r\n        const month_weekday_last& _Mwdl, const year& _Year) noexcept {\r\n        return _Year / _Mwdl;\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr year_month_weekday_last operator/(\r\n        const month_weekday_last& _Mwdl, int _Year) noexcept {\r\n        return year{_Year} / _Mwdl;\r\n    }\r\n\r\n    // Calendrical constants\r\n    _EXPORT_STD inline constexpr weekday Sunday{0};\r\n    _EXPORT_STD inline constexpr weekday Monday{1};\r\n    _EXPORT_STD inline constexpr weekday Tuesday{2};\r\n    _EXPORT_STD inline constexpr weekday Wednesday{3};\r\n    _EXPORT_STD inline constexpr weekday Thursday{4};\r\n    _EXPORT_STD inline constexpr weekday Friday{5};\r\n    _EXPORT_STD inline constexpr weekday Saturday{6};\r\n\r\n    _EXPORT_STD inline constexpr month January{1};\r\n    _EXPORT_STD inline constexpr month February{2};\r\n    _EXPORT_STD inline constexpr month March{3};\r\n    _EXPORT_STD inline constexpr month April{4};\r\n    _EXPORT_STD inline constexpr month May{5};\r\n    _EXPORT_STD inline constexpr month June{6};\r\n    _EXPORT_STD inline constexpr month July{7};\r\n    _EXPORT_STD inline constexpr month August{8};\r\n    _EXPORT_STD inline constexpr month September{9};\r\n    _EXPORT_STD inline constexpr month October{10};\r\n    _EXPORT_STD inline constexpr month November{11};\r\n    _EXPORT_STD inline constexpr month December{12};\r\n\r\n    _NODISCARD constexpr intmax_t _Pow10(const unsigned int _Exp) {\r\n        intmax_t _Result = 1;\r\n        for (unsigned int _Ix = 0; _Ix < _Exp; ++_Ix) {\r\n            _Result *= 10;\r\n        }\r\n        return _Result;\r\n    }\r\n\r\n    template <class _To, class _From>\r\n    constexpr bool _Duration_underflows_with = !treat_as_floating_point_v<typename _From::rep>\r\n                                            && _From::period::den / _STD _Gcd(_From::period::den, _To::period::den)\r\n                                                   > INTMAX_MAX\r\n                                                         / (_To::period::num\r\n                                                             / _STD _Gcd(_From::period::num, _To::period::num));\r\n\r\n    template <class _To, class _From>\r\n    _NODISCARD constexpr _To _Duration_cast_underflow_to_zero(const _From& _Dur) {\r\n        if constexpr (_Duration_underflows_with<_To, _From>) {\r\n            return _To{};\r\n        } else {\r\n            return _CHRONO duration_cast<_To>(_Dur);\r\n        }\r\n    }\r\n\r\n    template <class _To, class _From>\r\n    _NODISCARD constexpr common_type_t<_To, _From> _Remove_duration_part(const _From& _Val) {\r\n        if constexpr (_Duration_underflows_with<_To, _From>) {\r\n            return _Val;\r\n        } else {\r\n            const auto _Dp = _CHRONO duration_cast<_To>(_Val);\r\n            return _Val - _Dp;\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD template <class _Duration>\r\n    class hh_mm_ss {\r\n    public:\r\n        static_assert(_Is_duration_v<_Duration>,\r\n            \"N4950 [time.hms.overview]/2 mandates Duration to be a specialization of chrono::duration.\");\r\n\r\n        static constexpr unsigned int fractional_width = [] {\r\n            // Returns the number of fractional digits of _Num / _Den in the range [0, 18].\r\n            // If it can't be represented, 6 is returned.\r\n            // Example: _Fractional_width(1, 8) would return 3 for 0.125.\r\n\r\n            _STL_INTERNAL_STATIC_ASSERT(_Duration::period::num > 0); // N5001 [time.duration.general]/3\r\n            _STL_INTERNAL_STATIC_ASSERT(_Duration::period::den > 0); // N5001 [ratio.ratio]/1, /2.2\r\n\r\n            auto _Den                       = _Duration::period::den;\r\n            unsigned int _Power_of_2_in_den = 0u;\r\n            unsigned int _Power_of_5_in_den = 0u;\r\n            for (; _Den % 2 == 0; _Den /= 2, ++_Power_of_2_in_den) {\r\n            }\r\n            for (; _Den % 5 == 0; _Den /= 5, ++_Power_of_5_in_den) {\r\n            }\r\n\r\n            if (_Den != 1) {\r\n                return 6u;\r\n            }\r\n            const auto _Result = (_STD max) (_Power_of_2_in_den, _Power_of_5_in_den);\r\n            return _Result > 18u ? 6u : _Result;\r\n        }();\r\n        using precision =\r\n            duration<common_type_t<typename _Duration::rep, seconds::rep>, ratio<1, _CHRONO _Pow10(fractional_width)>>;\r\n\r\n        constexpr hh_mm_ss() noexcept : hh_mm_ss{_Duration::zero()} {}\r\n        constexpr explicit hh_mm_ss(_Duration _Dur)\r\n            : _Is_neg{_Dur < _Duration::zero()},\r\n              _Hours{_CHRONO _Duration_cast_underflow_to_zero<_CHRONO hours>(_Abs_if_needed(_Dur, _Is_neg))},\r\n              _Mins{_CHRONO _Duration_cast_underflow_to_zero<_CHRONO minutes>(\r\n                  _CHRONO _Remove_duration_part<_CHRONO hours>(_Abs_if_needed(_Dur, _Is_neg)))},\r\n              _Secs{_CHRONO _Duration_cast_underflow_to_zero<_CHRONO seconds>(\r\n                  _CHRONO _Remove_duration_part<_CHRONO minutes>(\r\n                      _CHRONO _Remove_duration_part<_CHRONO hours>(_Abs_if_needed(_Dur, _Is_neg))))} {\r\n            if constexpr (treat_as_floating_point_v<typename precision::rep>) {\r\n                // no need to deal with underflow here, because floating durations allow it\r\n                _Sub_secs = _Abs_if_needed(_Dur, _Is_neg) - hours() - minutes() - seconds();\r\n            } else {\r\n                _Sub_secs = _CHRONO duration_cast<precision>(\r\n                    _CHRONO _Remove_duration_part<_CHRONO seconds>(_Abs_if_needed(_Dur, _Is_neg)));\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr bool is_negative() const noexcept {\r\n            return _Is_neg;\r\n        }\r\n        _NODISCARD constexpr hours hours() const noexcept {\r\n            return _Hours;\r\n        }\r\n        _NODISCARD constexpr minutes minutes() const noexcept {\r\n            return _Mins;\r\n        }\r\n        _NODISCARD constexpr seconds seconds() const noexcept {\r\n            return _Secs;\r\n        }\r\n        _NODISCARD constexpr precision subseconds() const noexcept {\r\n            return _Sub_secs;\r\n        }\r\n\r\n        _NODISCARD constexpr explicit operator precision() const noexcept {\r\n            return to_duration();\r\n        }\r\n        _NODISCARD constexpr precision to_duration() const noexcept {\r\n            const auto _Dur = _Hours + _Mins + _Secs + _Sub_secs;\r\n            return _Is_neg ? -_Dur : _Dur;\r\n        }\r\n\r\n    private:\r\n        _NODISCARD static constexpr _Duration _Abs_if_needed(_Duration _Dur, bool _Is_neg) {\r\n            if constexpr (is_unsigned_v<typename _Duration::rep>) {\r\n                return _Dur;\r\n            } else {\r\n                return _Is_neg ? -_Dur : _Dur;\r\n            }\r\n        }\r\n\r\n        bool _Is_neg;\r\n        _CHRONO hours _Hours;\r\n        _CHRONO minutes _Mins;\r\n        _CHRONO seconds _Secs;\r\n        precision _Sub_secs;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD constexpr bool is_am(const hours& _Hours) noexcept {\r\n        return _Hours >= hours{0} && _Hours <= hours{11};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr bool is_pm(const hours& _Hours) noexcept {\r\n        return _Hours >= hours{12} && _Hours <= hours{23};\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD constexpr hours make12(const hours& _Hours) noexcept {\r\n        const auto _H_count{_Hours.count()};\r\n        auto _Ret{_H_count == 0 ? 12 : _H_count};\r\n        if (_Ret > 12) {\r\n            _Ret -= 12;\r\n        }\r\n\r\n        return hours{_Ret};\r\n    }\r\n    _EXPORT_STD _NODISCARD constexpr hours make24(const hours& _Hours, bool _Is_pm) noexcept {\r\n        const auto _H_count{_Hours.count()};\r\n        auto _Ret{_H_count == 12 ? 0 : _H_count};\r\n        if (_Is_pm) {\r\n            _Ret += 12;\r\n        }\r\n\r\n        return hours{_Ret};\r\n    }\r\n\r\n    // [time.zone.info]\r\n\r\n    _EXPORT_STD struct sys_info {\r\n        sys_seconds begin;\r\n        sys_seconds end;\r\n        seconds offset;\r\n        minutes save;\r\n        string abbrev;\r\n    };\r\n\r\n    _EXPORT_STD struct local_info {\r\n        static constexpr int unique      = 0;\r\n        static constexpr int nonexistent = 1;\r\n        static constexpr int ambiguous   = 2;\r\n\r\n        int result;\r\n        sys_info first;\r\n        sys_info second;\r\n    };\r\n\r\n    _EXPORT_STD class _NODISCARD nonexistent_local_time : public runtime_error {\r\n    public:\r\n#if _HAS_EXCEPTIONS\r\n        template <class _Duration>\r\n        nonexistent_local_time(const local_time<_Duration>& _Tp, const local_info& _Info)\r\n            : runtime_error(_Make_string(_Tp, _Info)) {}\r\n#else // ^^^ _HAS_EXCEPTIONS / !_HAS_EXCEPTIONS vvv\r\n        template <class _Duration>\r\n        nonexistent_local_time(const local_time<_Duration>&, const local_info&)\r\n            : runtime_error(\"nonexistent local time\") {}\r\n#endif // ^^^ !_HAS_EXCEPTIONS ^^^\r\n\r\n    private:\r\n        template <class _Duration>\r\n        _NODISCARD static string _Make_string(const local_time<_Duration>& _Tp, const local_info& _Info);\r\n    };\r\n\r\n    template <class _Duration>\r\n    [[noreturn]] void _Throw_nonexistent_local_time(const local_time<_Duration>& _Tp, const local_info& _Info) {\r\n        _THROW(nonexistent_local_time{_Tp, _Info});\r\n    }\r\n\r\n    _EXPORT_STD class _NODISCARD ambiguous_local_time : public runtime_error {\r\n    public:\r\n#if _HAS_EXCEPTIONS\r\n        template <class _Duration>\r\n        ambiguous_local_time(const local_time<_Duration>& _Tp, const local_info& _Info)\r\n            : runtime_error(_Make_string(_Tp, _Info)) {}\r\n#else // ^^^ _HAS_EXCEPTIONS / !_HAS_EXCEPTIONS vvv\r\n        template <class _Duration>\r\n        ambiguous_local_time(const local_time<_Duration>&, const local_info&) : runtime_error(\"ambiguous local time\") {}\r\n#endif // ^^^ !_HAS_EXCEPTIONS ^^^\r\n\r\n    private:\r\n        template <class _Duration>\r\n        _NODISCARD static string _Make_string(const local_time<_Duration>& _Tp, const local_info& _Info);\r\n    };\r\n\r\n    template <class _Duration>\r\n    [[noreturn]] void _Throw_ambiguous_local_time(const local_time<_Duration>& _Tp, const local_info& _Info) {\r\n        _THROW(ambiguous_local_time{_Tp, _Info});\r\n    }\r\n\r\n    // [time.zone.timezone]\r\n\r\n    template <auto& _Get_tzdb_info, class... _Types>\r\n    _NODISCARD auto _Make_unique_tzdb_info(_Types&&... _Args) {\r\n        const auto _Raw_ptr = _Get_tzdb_info(_STD forward<_Types>(_Args)...);\r\n\r\n        using _Tzdb_info = remove_pointer_t<decltype(_Raw_ptr)>;\r\n\r\n        unique_ptr<_Tzdb_info, _Tzdb_deleter<_Tzdb_info>> _Info{_Raw_ptr};\r\n\r\n        if (_Info == nullptr) {\r\n            _STD _Xbad_alloc();\r\n        } else if (_Info->_Err == __std_tzdb_error::_Win_error) {\r\n            _STD _XGetLastError();\r\n        } else if (_Info->_Err == __std_tzdb_error::_Icu_error) {\r\n            _STD _Xruntime_error(\"Internal error loading IANA database information\");\r\n        }\r\n\r\n        return _Info;\r\n    }\r\n\r\n    _EXPORT_STD enum class choose { earliest, latest };\r\n\r\n    struct _Secret_time_zone_construct_tag {\r\n        explicit _Secret_time_zone_construct_tag() = default;\r\n    };\r\n\r\n    _EXPORT_STD class time_zone {\r\n    public:\r\n        explicit time_zone(_Secret_time_zone_construct_tag, string_view _Name_) : _Name(_Name_) {}\r\n\r\n        time_zone(time_zone&&)            = default;\r\n        time_zone& operator=(time_zone&&) = default;\r\n\r\n        _NODISCARD string_view name() const noexcept {\r\n            return _Name;\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD sys_info get_info(const sys_time<_Duration>& _Sys) const {\r\n            return _Get_info(_Sys.time_since_epoch(), __std_tzdb_sys_info_type::_Full);\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD local_info get_info(const local_time<_Duration>& _Local) const {\r\n            return _Get_local_info(_Local, __std_tzdb_sys_info_type::_Full);\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD sys_time<common_type_t<_Duration, seconds>> to_sys(const local_time<_Duration>& _Local) const {\r\n            const auto _Info = get_info(_Local);\r\n            if (_Info.result == local_info::nonexistent) {\r\n                _CHRONO _Throw_nonexistent_local_time(_Local, _Info);\r\n            } else if (_Info.result == local_info::ambiguous) {\r\n                _CHRONO _Throw_ambiguous_local_time(_Local, _Info);\r\n            }\r\n\r\n            return sys_time<common_type_t<_Duration, seconds>>{_Local.time_since_epoch() - _Info.first.offset};\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD sys_time<common_type_t<_Duration, seconds>> to_sys(\r\n            const local_time<_Duration>& _Local, const choose _Choose) const {\r\n            const auto _Info = _Get_local_info(_Local, __std_tzdb_sys_info_type::_Offset_and_range);\r\n            if (_Info.result == local_info::nonexistent) {\r\n                return _Info.first.end;\r\n            }\r\n\r\n            const auto _Offset = (_Info.result == local_info::unique || _Choose == choose::earliest)\r\n                                   ? _Info.first.offset\r\n                                   : _Info.second.offset;\r\n            return sys_time<common_type_t<_Duration, seconds>>{_Local.time_since_epoch() - _Offset};\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD local_time<common_type_t<_Duration, seconds>> to_local(const sys_time<_Duration>& _Sys) const {\r\n            const auto _Info = _Get_info(_Sys.time_since_epoch(), __std_tzdb_sys_info_type::_Offset_only);\r\n            return local_time<common_type_t<_Duration, seconds>>{_Sys.time_since_epoch() + _Info.offset};\r\n        }\r\n\r\n        static constexpr sys_seconds _Min_seconds{sys_days{(year::min) () / January / 1}};\r\n        static constexpr sys_seconds _Max_seconds{sys_seconds{sys_days{(year::max) () / December / 32}} - seconds{1}};\r\n\r\n    private:\r\n        template <class _Duration>\r\n        _NODISCARD sys_info _Get_info(const _Duration& _Dur, __std_tzdb_sys_info_type _Type) const {\r\n            using _Internal_duration = duration<__std_tzdb_epoch_milli, milli>;\r\n            const auto _Internal_dur = _CHRONO duration_cast<_Internal_duration>(_Dur);\r\n\r\n            // TRANSITION, ABI\r\n            // Because the signature of __std_tzdb_get_sys_info cannot be changed, _Type is encoded in the\r\n            // time zone name. In vNext, this should be a dedicated argument.\r\n            const string _Tz_arg = _Name + static_cast<char>(_Type);\r\n\r\n            const auto _Tz_len = _Name.size();\r\n\r\n            const auto _Info = _CHRONO _Make_unique_tzdb_info<__std_tzdb_get_sys_info>(\r\n                _Tz_arg.c_str(), _Tz_len, _Internal_dur.count());\r\n\r\n            constexpr auto _Min_internal =\r\n                _CHRONO duration_cast<_Internal_duration>(_Min_seconds.time_since_epoch()).count();\r\n            constexpr auto _Max_internal =\r\n                _CHRONO duration_cast<_Internal_duration>(_Max_seconds.time_since_epoch()).count();\r\n            const auto _Begin =\r\n                _Info->_Begin <= _Min_internal\r\n                    ? _Min_seconds\r\n                    : sys_seconds{_CHRONO duration_cast<sys_seconds::duration>(_Internal_duration{_Info->_Begin})};\r\n            const auto _End =\r\n                _Info->_End >= _Max_internal\r\n                    ? _Max_seconds\r\n                    : sys_seconds{_CHRONO duration_cast<sys_seconds::duration>(_Internal_duration{_Info->_End})};\r\n            return {.begin = _Begin,\r\n                .end       = _End,\r\n                .offset    = _CHRONO duration_cast<seconds>(_Internal_duration{_Info->_Offset}),\r\n                .save      = _CHRONO duration_cast<minutes>(_Internal_duration{_Info->_Save}),\r\n                .abbrev    = _Info->_Abbrev ? _Info->_Abbrev : \"\"};\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD local_info _Get_local_info(\r\n            const local_time<_Duration>& _Local, __std_tzdb_sys_info_type _Type) const {\r\n            local_info _Info{};\r\n            const auto _Time_since_ep = _Local.time_since_epoch();\r\n            _Info.first               = _Get_info(_Time_since_ep, _Type);\r\n\r\n            const sys_seconds _Local_sys{_CHRONO duration_cast<sys_seconds::duration>(_Time_since_ep)};\r\n            const auto _Curr_sys = _Local_sys - _Info.first.offset;\r\n            if (_Info.first.begin != _Min_seconds && _Curr_sys < _Info.first.begin + days{1}) {\r\n                // get previous transition information\r\n                _Info.second = _Get_info((_Info.first.begin - seconds{1}).time_since_epoch(), _Type);\r\n\r\n                const auto _Transition = _Info.first.begin;\r\n                const auto _Prev_sys   = _Local_sys - _Info.second.offset;\r\n                if (_Curr_sys >= _Transition) {\r\n                    if (_Prev_sys < _Transition) {\r\n                        _Info.result = local_info::ambiguous;\r\n                        _STD swap(_Info.first, _Info.second);\r\n                    } else {\r\n                        _Info.result = local_info::unique;\r\n                        _Info.second = {};\r\n                    }\r\n                } else {\r\n                    if (_Prev_sys >= _Transition) {\r\n                        _Info.result = local_info::nonexistent;\r\n                        _STD swap(_Info.first, _Info.second);\r\n                    } else {\r\n                        _Info.result = local_info::unique;\r\n                        _Info.first  = _STD move(_Info.second);\r\n                        _Info.second = {};\r\n                    }\r\n                }\r\n            } else if (_Info.first.end != _Max_seconds && _Curr_sys > _Info.first.end - days{1}) {\r\n                // get next transition information\r\n                _Info.second = _Get_info((_Info.first.end + seconds{1}).time_since_epoch(), _Type);\r\n\r\n                const auto _Transition = _Info.first.end;\r\n                const auto _Next_sys   = _Local_sys - _Info.second.offset;\r\n                if (_Curr_sys < _Transition) {\r\n                    if (_Next_sys >= _Transition) {\r\n                        _Info.result = local_info::ambiguous;\r\n                    } else {\r\n                        _Info.result = local_info::unique;\r\n                        _Info.second = {};\r\n                    }\r\n                } else {\r\n                    if (_Next_sys < _Transition) {\r\n                        _Info.result = local_info::nonexistent;\r\n                    } else {\r\n                        _Info.result = local_info::unique;\r\n                        _Info.first  = _STD move(_Info.second);\r\n                        _Info.second = {};\r\n                    }\r\n                }\r\n            } else {\r\n                // local time is contained inside of first transition boundaries by at least 1 day\r\n                _Info.result = local_info::unique;\r\n                _Info.second = {};\r\n            }\r\n\r\n            return _Info;\r\n        }\r\n\r\n        string _Name;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD inline bool operator==(const time_zone& _Left, const time_zone& _Right) noexcept {\r\n        return _Left.name() == _Right.name();\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline strong_ordering operator<=>(\r\n        const time_zone& _Left, const time_zone& _Right) noexcept {\r\n        return _Left.name() <=> _Right.name();\r\n    }\r\n\r\n    // [time.zone.leap]\r\n\r\n    _EXPORT_STD class leap_second {\r\n    public:\r\n        leap_second(const leap_second&)            = default;\r\n        leap_second& operator=(const leap_second&) = default;\r\n\r\n        constexpr leap_second(\r\n            const sys_seconds& _Date_, const bool _Is_positive_, const seconds& _Prev_elapsed) noexcept\r\n            : _Date{_Date_}, _Is_positive{_Is_positive_} {\r\n            _Elapsed_offset = _Prev_elapsed + value();\r\n        }\r\n\r\n        _NODISCARD constexpr sys_seconds date() const noexcept {\r\n            return _Date;\r\n        }\r\n\r\n        _NODISCARD constexpr seconds value() const noexcept {\r\n            return _Is_positive ? seconds{1} : seconds{-1};\r\n        }\r\n\r\n        _NODISCARD constexpr bool _Positive() const noexcept {\r\n            return _Is_positive;\r\n        }\r\n\r\n        _NODISCARD constexpr seconds _Elapsed() const noexcept {\r\n            return _Elapsed_offset;\r\n        }\r\n\r\n        _NODISCARD friend constexpr bool operator==(const leap_second& _Left, const leap_second& _Right) noexcept {\r\n            return _Left.date() == _Right.date();\r\n        }\r\n        template <class _Duration>\r\n        _NODISCARD friend constexpr bool operator==(\r\n            const leap_second& _Left, const sys_time<_Duration>& _Right) noexcept {\r\n            return _Left.date() == _Right;\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD friend constexpr bool operator<(\r\n            const leap_second& _Left, const sys_time<_Duration>& _Right) noexcept {\r\n            return _Left.date() < _Right;\r\n        }\r\n        template <class _Duration>\r\n        _NODISCARD friend constexpr bool operator<(\r\n            const sys_time<_Duration>& _Left, const leap_second& _Right) noexcept {\r\n            return _Left < _Right.date();\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD friend constexpr bool operator>(\r\n            const leap_second& _Left, const sys_time<_Duration>& _Right) noexcept {\r\n            return _Right < _Left.date();\r\n        }\r\n        template <class _Duration>\r\n        _NODISCARD friend constexpr bool operator>(\r\n            const sys_time<_Duration>& _Left, const leap_second& _Right) noexcept {\r\n            return _Right.date() < _Left;\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD friend constexpr bool operator<=(\r\n            const leap_second& _Left, const sys_time<_Duration>& _Right) noexcept {\r\n            return !(_Right < _Left.date());\r\n        }\r\n        template <class _Duration>\r\n        _NODISCARD friend constexpr bool operator<=(\r\n            const sys_time<_Duration>& _Left, const leap_second& _Right) noexcept {\r\n            return !(_Right.date() < _Left);\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD friend constexpr bool operator>=(\r\n            const leap_second& _Left, const sys_time<_Duration>& _Right) noexcept {\r\n            return !(_Left.date() < _Right);\r\n        }\r\n        template <class _Duration>\r\n        _NODISCARD friend constexpr bool operator>=(\r\n            const sys_time<_Duration>& _Left, const leap_second& _Right) noexcept {\r\n            return !(_Left < _Right.date());\r\n        }\r\n\r\n        template <class _Duration>\r\n            requires three_way_comparable_with<sys_seconds, sys_time<_Duration>>\r\n        _NODISCARD friend constexpr auto operator<=>(\r\n            const leap_second& _Left, const sys_time<_Duration>& _Right) noexcept {\r\n            return _Left.date() <=> _Right;\r\n        }\r\n        _NODISCARD friend constexpr strong_ordering operator<=>(\r\n            const leap_second& _Left, const leap_second& _Right) noexcept {\r\n            return _Left.date() <=> _Right.date();\r\n        }\r\n\r\n    private:\r\n        sys_seconds _Date;\r\n        bool _Is_positive;\r\n        seconds _Elapsed_offset;\r\n    };\r\n\r\n    // [time.zone.link]\r\n\r\n    struct _Secret_time_zone_link_construct_tag {\r\n        explicit _Secret_time_zone_link_construct_tag() = default;\r\n    };\r\n\r\n    _EXPORT_STD class time_zone_link {\r\n    public:\r\n        explicit time_zone_link(_Secret_time_zone_link_construct_tag, string_view _Name_, string_view _Target_)\r\n            : _Name(_Name_), _Target(_Target_) {}\r\n\r\n        time_zone_link(time_zone_link&&)            = default;\r\n        time_zone_link& operator=(time_zone_link&&) = default;\r\n\r\n        _NODISCARD string_view name() const noexcept {\r\n            return _Name;\r\n        }\r\n\r\n        _NODISCARD string_view target() const noexcept {\r\n            return _Target;\r\n        }\r\n\r\n    private:\r\n        string _Name;\r\n        string _Target;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD inline bool operator==(const time_zone_link& _Left, const time_zone_link& _Right) noexcept {\r\n        return _Left.name() == _Right.name();\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline strong_ordering operator<=>(\r\n        const time_zone_link& _Left, const time_zone_link& _Right) noexcept {\r\n        return _Left.name() <=> _Right.name();\r\n    }\r\n\r\n    // [time.zone.db]\r\n\r\n    _NODISCARD inline string _Tzdb_generate_current_zone() {\r\n        auto _Info = _CHRONO _Make_unique_tzdb_info<__std_tzdb_get_current_zone>();\r\n\r\n        return _Info->_Tz_name;\r\n    }\r\n\r\n    template <class _Ty>\r\n    _NODISCARD const _Ty* _Locate_zone_impl(const vector<_Ty>& _Vec, string_view _Name) {\r\n        // N5008 [time.zone.db.tzdb]/1: \"Each vector in a tzdb object is sorted to enable fast lookup.\"\r\n        const auto _Result = _STD lower_bound(\r\n            _Vec.begin(), _Vec.end(), _Name, [](const auto& _Tz, const auto& _Sv) static { return _Tz.name() < _Sv; });\r\n        if (_Result != _Vec.end() && _Result->name() == _Name) {\r\n            return &*_Result;\r\n        } else {\r\n            return nullptr;\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD struct tzdb {\r\n        string version;\r\n        vector<time_zone> zones;\r\n        vector<time_zone_link> links;\r\n        vector<leap_second> leap_seconds;\r\n        bool _All_ls_positive;\r\n\r\n        _NODISCARD const time_zone* locate_zone(string_view _Tz_name) const {\r\n            auto _Tz = _CHRONO _Locate_zone_impl(zones, _Tz_name);\r\n            if (_Tz != nullptr) {\r\n                return _Tz;\r\n            }\r\n\r\n            const auto _Link = _CHRONO _Locate_zone_impl(links, _Tz_name);\r\n            if (_Link != nullptr) {\r\n                _Tz = _CHRONO _Locate_zone_impl(zones, _Link->target());\r\n                if (_Tz != nullptr) {\r\n                    return _Tz;\r\n                }\r\n            }\r\n\r\n            _STD _Xruntime_error(\"unable to locate time_zone with given name\");\r\n        }\r\n\r\n        _NODISCARD const time_zone* current_zone() const {\r\n            return locate_zone(_CHRONO _Tzdb_generate_current_zone());\r\n        }\r\n    };\r\n\r\n    _NODISCARD inline tuple<string, vector<time_zone>, vector<time_zone_link>> _Tzdb_generate_time_zones() {\r\n        auto _Info = _CHRONO _Make_unique_tzdb_info<__std_tzdb_get_time_zones>();\r\n\r\n        vector<time_zone> _Time_zones;\r\n        vector<time_zone_link> _Time_zone_links;\r\n        for (size_t _Idx = 0; _Idx < _Info->_Num_time_zones; ++_Idx) {\r\n            const string_view _Name{_Info->_Names[_Idx]};\r\n            if (_Info->_Links[_Idx] == nullptr) {\r\n                _Time_zones.emplace_back(_Secret_time_zone_construct_tag{}, _Name);\r\n            } else {\r\n                const string_view _Target{_Info->_Links[_Idx]};\r\n                _Time_zone_links.emplace_back(_Secret_time_zone_link_construct_tag{}, _Name, _Target);\r\n            }\r\n        }\r\n\r\n        return {_Info->_Version, _STD move(_Time_zones), _STD move(_Time_zone_links)};\r\n    }\r\n\r\n    _NODISCARD inline pair<vector<leap_second>, bool> _Tzdb_generate_leap_seconds(const size_t _Current_size) {\r\n        // Returns empty vector if no new leap seconds are found.\r\n        static constexpr leap_second _Known_leap_seconds[]{\r\n            {sys_seconds{seconds{78796800}}, true, seconds{0}},\r\n            {sys_seconds{seconds{94694400}}, true, seconds{1}},\r\n            {sys_seconds{seconds{126230400}}, true, seconds{2}},\r\n            {sys_seconds{seconds{157766400}}, true, seconds{3}},\r\n            {sys_seconds{seconds{189302400}}, true, seconds{4}},\r\n            {sys_seconds{seconds{220924800}}, true, seconds{5}},\r\n            {sys_seconds{seconds{252460800}}, true, seconds{6}},\r\n            {sys_seconds{seconds{283996800}}, true, seconds{7}},\r\n            {sys_seconds{seconds{315532800}}, true, seconds{8}},\r\n            {sys_seconds{seconds{362793600}}, true, seconds{9}},\r\n            {sys_seconds{seconds{394329600}}, true, seconds{10}},\r\n            {sys_seconds{seconds{425865600}}, true, seconds{11}},\r\n            {sys_seconds{seconds{489024000}}, true, seconds{12}},\r\n            {sys_seconds{seconds{567993600}}, true, seconds{13}},\r\n            {sys_seconds{seconds{631152000}}, true, seconds{14}},\r\n            {sys_seconds{seconds{662688000}}, true, seconds{15}},\r\n            {sys_seconds{seconds{709948800}}, true, seconds{16}},\r\n            {sys_seconds{seconds{741484800}}, true, seconds{17}},\r\n            {sys_seconds{seconds{773020800}}, true, seconds{18}},\r\n            {sys_seconds{seconds{820454400}}, true, seconds{19}},\r\n            {sys_seconds{seconds{867715200}}, true, seconds{20}},\r\n            {sys_seconds{seconds{915148800}}, true, seconds{21}},\r\n            {sys_seconds{seconds{1136073600}}, true, seconds{22}},\r\n            {sys_seconds{seconds{1230768000}}, true, seconds{23}},\r\n            {sys_seconds{seconds{1341100800}}, true, seconds{24}},\r\n            {sys_seconds{seconds{1435708800}}, true, seconds{25}},\r\n            {sys_seconds{seconds{1483228800}}, true, seconds{26}},\r\n        };\r\n\r\n        // __std_tzdb_get_leap_seconds gets leap second (LS) data from the registry, but only if it contains more\r\n        // LSs than we already know about. The registry only contains LSs after 2018, so we need to tell it how many of\r\n        // *those* we already know about. The *total* number of LSs known at this point is a combination of what the\r\n        // caller knows (_Current_size, 0 on first call) and the _Known_leap_seconds entries.\r\n        constexpr size_t _Pre_2018_count = 27;\r\n        const size_t _Known_post_2018_ls_size =\r\n            (_STD max) (_Current_size, _STD size(_Known_leap_seconds)) - _Pre_2018_count;\r\n\r\n        size_t _Reg_post_2018_ls_size; // number of post-2018 LSs found in the registry\r\n        unique_ptr<__std_tzdb_leap_info[], _Tzdb_deleter<__std_tzdb_leap_info[]>> _Reg_ls_data{\r\n            ::__std_tzdb_get_leap_seconds(_Known_post_2018_ls_size, &_Reg_post_2018_ls_size)};\r\n\r\n        if (_Reg_post_2018_ls_size > _Known_post_2018_ls_size && !_Reg_ls_data) {\r\n            _STD _Xbad_alloc(); // registry has new data, but failed to allocate storage\r\n        } else if (_Reg_post_2018_ls_size == 0 && _Reg_ls_data) {\r\n            _STD _XGetLastError(); // allocated storage for registry data, but failed to read\r\n        }\r\n\r\n        const size_t _New_size = _Pre_2018_count + _Reg_post_2018_ls_size; // total size with registry data\r\n        vector<leap_second> _Leap_sec_info;\r\n        bool _All_ls_positive = true;\r\n\r\n        if (_New_size > _Current_size) {\r\n            _Leap_sec_info.reserve(_New_size);\r\n            _Leap_sec_info.assign(_STD cbegin(_Known_leap_seconds), _STD cend(_Known_leap_seconds));\r\n\r\n            for (size_t _Idx = 0; _Idx < _Reg_post_2018_ls_size; ++_Idx) {\r\n                // Leap seconds occur at _Ls._Hour:59:59. We store the next second after, so we need to add an entire\r\n                // hour.\r\n                const auto& _Ls = _Reg_ls_data[_Idx];\r\n                const auto _Date =\r\n                    static_cast<sys_days>(year_month_day{year{_Ls._Year}, month{_Ls._Month}, day{_Ls._Day}})\r\n                    + hours{_Ls._Hour + 1};\r\n                _Leap_sec_info.emplace_back(_Date, !_Ls._Negative, _Leap_sec_info.back()._Elapsed());\r\n                _All_ls_positive = _All_ls_positive && !_Ls._Negative;\r\n            }\r\n        }\r\n\r\n        return {_STD move(_Leap_sec_info), _All_ls_positive};\r\n    }\r\n\r\n    _NODISCARD inline string _Tzdb_update_version(const string_view _Version, const size_t _Num_leap_seconds) {\r\n        string _Icu_version{_Version.substr(0, _Version.find_last_of('.'))};\r\n        _Icu_version += '.';\r\n        _Icu_version += _STD to_string(_Num_leap_seconds);\r\n        return _Icu_version;\r\n    }\r\n\r\n    struct _Secret_tzdb_list_construct_tag {\r\n        explicit _Secret_tzdb_list_construct_tag() = default;\r\n    };\r\n\r\n    _EXPORT_STD class tzdb_list {\r\n    private:\r\n        using _ListType = forward_list<tzdb, _Crt_allocator<tzdb>>;\r\n\r\n    public:\r\n        using const_iterator = _ListType::const_iterator;\r\n\r\n        tzdb_list(const tzdb_list&)            = delete;\r\n        tzdb_list& operator=(const tzdb_list&) = delete;\r\n\r\n        explicit tzdb_list(_Secret_tzdb_list_construct_tag) {\r\n            auto [_Icu_version, _Zones, _Links] = _CHRONO _Tzdb_generate_time_zones();\r\n            auto [_Leap_sec, _All_ls_positive]  = _CHRONO _Tzdb_generate_leap_seconds(0);\r\n            auto _Version                       = _Icu_version + \".\" + _STD to_string(_Leap_sec.size());\r\n            _Tzdb_list.emplace_front(\r\n                _STD move(_Version), _STD move(_Zones), _STD move(_Links), _STD move(_Leap_sec), _All_ls_positive);\r\n        }\r\n\r\n        _NODISCARD const tzdb& front() const noexcept {\r\n            _Shared_lock _Lk(_Tzdb_mutex);\r\n            return _Tzdb_list.front();\r\n        }\r\n\r\n        const_iterator erase_after(const_iterator _Where) noexcept /* strengthened */ {\r\n            _Unique_lock _Lk(_Tzdb_mutex);\r\n            return _Tzdb_list.erase_after(_Where);\r\n        }\r\n\r\n        _NODISCARD const_iterator begin() const noexcept {\r\n            _Shared_lock _Lk(_Tzdb_mutex);\r\n            return _Tzdb_list.begin();\r\n        }\r\n\r\n        _NODISCARD const_iterator end() const noexcept {\r\n            return _Tzdb_list.end(); // no lock necessary for forward_list::end()\r\n        }\r\n\r\n        _NODISCARD const_iterator cbegin() const noexcept {\r\n            _Shared_lock _Lk(_Tzdb_mutex);\r\n            return _Tzdb_list.cbegin();\r\n        }\r\n\r\n        _NODISCARD const_iterator cend() const noexcept {\r\n            return _Tzdb_list.cend(); // no lock necessary for forward_list::cend()\r\n        }\r\n\r\n        template <class... _ArgsTy>\r\n        void _Emplace_front(_ArgsTy&&... _Args) {\r\n            _Unique_lock _Lk(_Tzdb_mutex);\r\n            _Tzdb_list.emplace_front(_STD forward<_ArgsTy>(_Args)...);\r\n        }\r\n\r\n        const tzdb& _Reload() {\r\n            _Unique_lock _Lk(_Tzdb_mutex);\r\n            auto [_Leap_sec, _All_ls_positive] =\r\n                _CHRONO _Tzdb_generate_leap_seconds(_Tzdb_list.front().leap_seconds.size());\r\n            if (!_Leap_sec.empty()) {\r\n                const auto& _Tzdb = _Tzdb_list.front();\r\n\r\n                vector<time_zone> _Zones;\r\n                _Zones.reserve(_Tzdb.zones.size());\r\n                for (const auto& _Tz : _Tzdb.zones) {\r\n                    _Zones.emplace_back(_Secret_time_zone_construct_tag{}, _Tz.name());\r\n                }\r\n\r\n                vector<time_zone_link> _Links;\r\n                _Links.reserve(_Tzdb.links.size());\r\n                for (const auto& _Link : _Tzdb.links) {\r\n                    _Links.emplace_back(_Secret_time_zone_link_construct_tag{}, _Link.name(), _Link.target());\r\n                }\r\n\r\n                auto _Version = _CHRONO _Tzdb_update_version(_Tzdb.version, _Leap_sec.size());\r\n                _Tzdb_list.emplace_front(\r\n                    _STD move(_Version), _STD move(_Zones), _STD move(_Links), _STD move(_Leap_sec), _All_ls_positive);\r\n            }\r\n            return _Tzdb_list.front();\r\n        }\r\n\r\n    private:\r\n        _ListType _Tzdb_list;\r\n        mutable _Smtx_t _Tzdb_mutex = {};\r\n\r\n        struct _NODISCARD _Shared_lock {\r\n            explicit _Shared_lock(_Smtx_t& _Mtx_) : _Mtx{&_Mtx_} {\r\n                ::_Smtx_lock_shared(_Mtx);\r\n            }\r\n\r\n            _Shared_lock(const _Shared_lock&)            = delete;\r\n            _Shared_lock& operator=(const _Shared_lock&) = delete;\r\n\r\n            ~_Shared_lock() {\r\n                ::_Smtx_unlock_shared(_Mtx);\r\n            }\r\n\r\n            _Smtx_t* _Mtx;\r\n        };\r\n\r\n        struct _NODISCARD _Unique_lock {\r\n            explicit _Unique_lock(_Smtx_t& _Mtx_) : _Mtx{&_Mtx_} {\r\n                ::_Smtx_lock_exclusive(_Mtx);\r\n            }\r\n\r\n            _Unique_lock(const _Unique_lock&)            = delete;\r\n            _Unique_lock& operator=(const _Unique_lock&) = delete;\r\n\r\n            ~_Unique_lock() {\r\n                ::_Smtx_unlock_exclusive(_Mtx);\r\n            }\r\n\r\n            _Smtx_t* _Mtx;\r\n        };\r\n    };\r\n\r\n    inline atomic<tzdb_list*> _Global_tzdb_list;\r\n\r\n    _EXPORT_STD _NODISCARD inline tzdb_list& get_tzdb_list() {\r\n        auto _Tzdb_ptr = _Global_tzdb_list.load();\r\n        if (_Tzdb_ptr != nullptr) {\r\n            return *_Tzdb_ptr;\r\n        }\r\n\r\n        auto _My_tzdb = static_cast<tzdb_list*>(::__std_calloc_crt(1, sizeof(tzdb_list)));\r\n        if (_My_tzdb == nullptr) {\r\n            _STD _Xruntime_error(\"bad allocation\"); // not bad_alloc, see N4950 [time.zone.db.access]/4\r\n        }\r\n\r\n        _TRY_BEGIN\r\n        _STD construct_at(_My_tzdb, _Secret_tzdb_list_construct_tag{});\r\n        _CATCH(const runtime_error&)\r\n        ::__std_free_crt(_My_tzdb);\r\n        _RERAISE;\r\n        _CATCH(const exception& _Except)\r\n#if _HAS_EXCEPTIONS\r\n        ::__std_free_crt(_My_tzdb);\r\n        _STD _Xruntime_error(_Except.what());\r\n#endif // _HAS_EXCEPTIONS\r\n        _CATCH_END\r\n\r\n        if (_Global_tzdb_list.compare_exchange_strong(_Tzdb_ptr, _My_tzdb)) {\r\n            _Tzdb_ptr = _My_tzdb;\r\n        } else {\r\n            _STD destroy_at(_My_tzdb);\r\n            ::__std_free_crt(_My_tzdb);\r\n        }\r\n\r\n        return *_Tzdb_ptr;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline const tzdb& get_tzdb() {\r\n        return _CHRONO get_tzdb_list().front();\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline const time_zone* locate_zone(string_view _Tz_name) {\r\n        return _CHRONO get_tzdb().locate_zone(_Tz_name);\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline const time_zone* current_zone() {\r\n        return _CHRONO get_tzdb().current_zone();\r\n    }\r\n\r\n    _EXPORT_STD inline const tzdb& reload_tzdb() {\r\n        _TRY_BEGIN\r\n        return _CHRONO get_tzdb_list()._Reload();\r\n        _CATCH(const runtime_error&)\r\n        _RERAISE;\r\n        _CATCH(const exception& _Except)\r\n#if _HAS_EXCEPTIONS\r\n        _STD _Xruntime_error(_Except.what());\r\n#endif // _HAS_EXCEPTIONS\r\n        _CATCH_END\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline string remote_version() {\r\n        const auto& _Tzdb                = _CHRONO get_tzdb();\r\n        const auto& _Version             = _Tzdb.version;\r\n        const auto [_Leap_sec, _Ignored] = _CHRONO _Tzdb_generate_leap_seconds(_Tzdb.leap_seconds.size());\r\n        return _Leap_sec.empty() ? _Version : _CHRONO _Tzdb_update_version(_Version, _Leap_sec.size());\r\n    }\r\n\r\n    // [time.zone.zonedtraits]\r\n\r\n    _EXPORT_STD template <class _Ty>\r\n    struct zoned_traits {};\r\n\r\n    template <>\r\n    struct zoned_traits<const time_zone*> {\r\n        _NODISCARD static const time_zone* default_zone() {\r\n            return _CHRONO get_tzdb().locate_zone(\"UTC\");\r\n        }\r\n\r\n        _NODISCARD static const time_zone* locate_zone(string_view _Name) {\r\n            return _CHRONO get_tzdb().locate_zone(_Name);\r\n        }\r\n    };\r\n\r\n    // [time.zone.zonedtime]\r\n\r\n    _EXPORT_STD template <class _Duration, class _TimeZonePtr = const time_zone*>\r\n    class zoned_time {\r\n    private:\r\n        static_assert(_Is_duration_v<_Duration>,\r\n            \"N4950 [time.zone.zonedtime.overview]/2 mandates Duration to be a specialization of chrono::duration.\");\r\n\r\n        using _Traits = zoned_traits<_TimeZonePtr>;\r\n\r\n    public:\r\n        using duration = common_type_t<_Duration, seconds>;\r\n\r\n        zoned_time()\r\n            requires requires { _Traits::default_zone(); }\r\n            : _Zone{_Traits::default_zone()} {}\r\n\r\n        zoned_time(const zoned_time&)            = default;\r\n        zoned_time& operator=(const zoned_time&) = default;\r\n\r\n        zoned_time(const sys_time<_Duration>& _Sys)\r\n            requires requires { _Traits::default_zone(); }\r\n            : _Zone{_Traits::default_zone()}, _Tp{_Sys} {}\r\n\r\n        explicit zoned_time(_TimeZonePtr _Tz) noexcept /* strengthened */ : _Zone{_STD move(_Tz)} {}\r\n\r\n        explicit zoned_time(string_view _Name)\r\n            requires requires {\r\n                { _Traits::locate_zone(_Name) } -> convertible_to<_TimeZonePtr>;\r\n            }\r\n            : _Zone{_Traits::locate_zone(_Name)} {}\r\n\r\n        template <class _Duration2>\r\n            requires is_convertible_v<sys_time<_Duration2>, sys_time<_Duration>>\r\n        zoned_time(const zoned_time<_Duration2, _TimeZonePtr>& _Zt) noexcept /* strengthened */\r\n            : _Zone{_Zt.get_time_zone()}, _Tp{_Zt.get_sys_time()} {}\r\n\r\n        zoned_time(_TimeZonePtr _Tz, const sys_time<_Duration>& _Sys) : _Zone{_STD move(_Tz)}, _Tp{_Sys} {}\r\n\r\n        zoned_time(string_view _Name, type_identity_t<const sys_time<_Duration>&> _Sys)\r\n            requires requires {\r\n                { _Traits::locate_zone(_Name) } -> convertible_to<_TimeZonePtr>;\r\n            }\r\n            : _Zone{_Traits::locate_zone(_Name)}, _Tp{_Sys} {}\r\n\r\n        zoned_time(_TimeZonePtr _Tz, const local_time<_Duration>& _Local)\r\n            requires requires {\r\n                { _Tz->to_sys(_Local) } -> convertible_to<sys_time<duration>>;\r\n            }\r\n            : _Zone{_STD move(_Tz)}, _Tp{_Zone->to_sys(_Local)} {}\r\n\r\n        zoned_time(string_view _Name, type_identity_t<const local_time<_Duration>&> _Local)\r\n            requires requires {\r\n                { _Traits::locate_zone(_Name) } -> convertible_to<_TimeZonePtr>;\r\n                { _STD declval<_TimeZonePtr&>() -> to_sys(_Local) } -> convertible_to<sys_time<duration>>;\r\n            }\r\n            : _Zone{_Traits::locate_zone(_Name)}, _Tp{_Zone->to_sys(_Local)} {}\r\n\r\n        zoned_time(_TimeZonePtr _Tz, const local_time<_Duration>& _Local, choose _Choose)\r\n            requires requires {\r\n                { _Tz->to_sys(_Local, _Choose) } -> convertible_to<sys_time<duration>>;\r\n            }\r\n            : _Zone{_STD move(_Tz)}, _Tp{_Zone->to_sys(_Local, _Choose)} {}\r\n\r\n        zoned_time(string_view _Name, type_identity_t<const local_time<_Duration>&> _Local, choose _Choose)\r\n            requires requires {\r\n                { _Traits::locate_zone(_Name) } -> convertible_to<_TimeZonePtr>;\r\n                { _STD declval<_TimeZonePtr&>() -> to_sys(_Local, _Choose) } -> convertible_to<sys_time<duration>>;\r\n            }\r\n            : _Zone{_Traits::locate_zone(_Name)}, _Tp{_Zone->to_sys(_Local, _Choose)} {}\r\n\r\n        template <class _Duration2, class _TimeZonePtr2>\r\n            requires is_convertible_v<sys_time<_Duration2>, sys_time<_Duration>>\r\n        zoned_time(_TimeZonePtr _Tz, const zoned_time<_Duration2, _TimeZonePtr2>& _Zt) noexcept /* strengthened */\r\n            : _Zone{_STD move(_Tz)}, _Tp{_Zt.get_sys_time()} {}\r\n\r\n        template <class _Duration2, class _TimeZonePtr2>\r\n            requires is_convertible_v<sys_time<_Duration2>, sys_time<_Duration>>\r\n        zoned_time(\r\n            _TimeZonePtr _Tz, const zoned_time<_Duration2, _TimeZonePtr2>& _Zt, choose) noexcept /* strengthened */\r\n            : _Zone{_STD move(_Tz)}, _Tp{_Zt.get_sys_time()} {}\r\n\r\n        template <class _Duration2, class _TimeZonePtr2>\r\n        zoned_time(string_view _Name, const zoned_time<_Duration2, _TimeZonePtr2>& _Zt)\r\n            requires requires {\r\n                { _Traits::locate_zone(_Name) } -> convertible_to<_TimeZonePtr>;\r\n            } && is_convertible_v<sys_time<_Duration2>, sys_time<_Duration>>\r\n            : _Zone{_Traits::locate_zone(_Name)}, _Tp{_Zt.get_sys_time()} {}\r\n\r\n        template <class _Duration2, class _TimeZonePtr2>\r\n        zoned_time(string_view _Name, const zoned_time<_Duration2, _TimeZonePtr2>& _Zt, choose)\r\n            requires requires {\r\n                { _Traits::locate_zone(_Name) } -> convertible_to<_TimeZonePtr>;\r\n            } && is_convertible_v<sys_time<_Duration2>, sys_time<_Duration>>\r\n            : _Zone{_Traits::locate_zone(_Name)}, _Tp{_Zt.get_sys_time()} {}\r\n\r\n        zoned_time& operator=(const sys_time<_Duration>& _Sys) noexcept /* strengthened */ {\r\n            _Tp = _Sys;\r\n            return *this;\r\n        }\r\n\r\n        zoned_time& operator=(const local_time<_Duration>& _Local) {\r\n            _Tp = _Zone->to_sys(_Local);\r\n            return *this;\r\n        }\r\n\r\n        operator sys_time<duration>() const noexcept /* strengthened */ {\r\n            return get_sys_time();\r\n        }\r\n\r\n        explicit operator local_time<duration>() const {\r\n            return get_local_time();\r\n        }\r\n\r\n        _NODISCARD _TimeZonePtr get_time_zone() const noexcept /* strengthened */ {\r\n            return _Zone;\r\n        }\r\n\r\n        _NODISCARD local_time<duration> get_local_time() const {\r\n            return _Zone->to_local(_Tp);\r\n        }\r\n\r\n        _NODISCARD sys_time<duration> get_sys_time() const noexcept /* strengthened */ {\r\n            return _Tp;\r\n        }\r\n\r\n        _NODISCARD sys_info get_info() const {\r\n            return _Zone->get_info(_Tp);\r\n        }\r\n\r\n    private:\r\n        _TimeZonePtr _Zone;\r\n        sys_time<duration> _Tp{};\r\n    };\r\n\r\n    zoned_time() -> zoned_time<seconds>;\r\n\r\n    template <class _Duration>\r\n    zoned_time(sys_time<_Duration>) -> zoned_time<common_type_t<_Duration, seconds>>;\r\n\r\n    template <class _TimeZonePtrOrName>\r\n    using _Time_zone_representation = conditional_t<is_convertible_v<_TimeZonePtrOrName, string_view>, const time_zone*,\r\n        remove_cvref_t<_TimeZonePtrOrName>>;\r\n\r\n    template <class _TimeZonePtrOrName>\r\n    zoned_time(_TimeZonePtrOrName&&) -> zoned_time<seconds, _Time_zone_representation<_TimeZonePtrOrName>>;\r\n\r\n    template <class _TimeZonePtrOrName, class _Duration>\r\n    zoned_time(_TimeZonePtrOrName&&, sys_time<_Duration>)\r\n        -> zoned_time<common_type_t<_Duration, seconds>, _Time_zone_representation<_TimeZonePtrOrName>>;\r\n\r\n    template <class _TimeZonePtrOrName, class _Duration>\r\n    zoned_time(_TimeZonePtrOrName&&, local_time<_Duration>, choose = choose::earliest)\r\n        -> zoned_time<common_type_t<_Duration, seconds>, _Time_zone_representation<_TimeZonePtrOrName>>;\r\n\r\n    template <class _Duration, class _TimeZonePtrOrName, class _TimeZonePtr2>\r\n    zoned_time(_TimeZonePtrOrName&&, zoned_time<_Duration, _TimeZonePtr2>, choose = choose::earliest)\r\n        -> zoned_time<common_type_t<_Duration, seconds>, _Time_zone_representation<_TimeZonePtrOrName>>;\r\n\r\n    _EXPORT_STD using zoned_seconds = zoned_time<seconds>;\r\n\r\n    _EXPORT_STD template <class _Duration1, class _Duration2, class _TimeZonePtr>\r\n    _NODISCARD bool operator==(\r\n        const zoned_time<_Duration1, _TimeZonePtr>& _Left, const zoned_time<_Duration2, _TimeZonePtr>& _Right) {\r\n        return _Left.get_time_zone() == _Right.get_time_zone() && _Left.get_sys_time() == _Right.get_sys_time();\r\n    }\r\n\r\n    // [time.clock.utc]\r\n\r\n    _EXPORT_STD class utc_clock;\r\n    _EXPORT_STD template <class _Duration>\r\n    using utc_time                = time_point<utc_clock, _Duration>;\r\n    _EXPORT_STD using utc_seconds = utc_time<seconds>;\r\n\r\n    _EXPORT_STD struct leap_second_info {\r\n        bool is_leap_second;\r\n        seconds elapsed;\r\n    };\r\n\r\n    _EXPORT_STD template <class _Duration>\r\n    _NODISCARD leap_second_info get_leap_second_info(const utc_time<_Duration>& _Time) {\r\n        const utc_seconds _Time_floor = _CHRONO floor<seconds>(_Time);\r\n        const auto& _Tzdb             = _CHRONO get_tzdb();\r\n        const auto& _Ls_vector        = _Tzdb.leap_seconds;\r\n\r\n        // Find first leap second after _Time.\r\n        vector<leap_second>::const_iterator _It;\r\n        if (_Tzdb._All_ls_positive) {\r\n            // Where \"target_ls\" is the next leap second at or after _Time, _It either points to:\r\n            //    (1) The 2nd leap second after _Time if _Time_floor is in the range [target_ls - _Elapsed() - 1,\r\n            //    target_ls), or\r\n            //    (2) The leap second just after _Time otherwise.\r\n            // Note that we can always use prev(_It) to determine whether _Time is *during* a leap second insertion,\r\n            // since that falls under case (2) above. However, when we fall under case (1), we need to execute an\r\n            // additional decrement to get the correct elapsed offset. For example, if leap seconds are inserted at\r\n            // seconds {100, 200, 300, 400}, we have:\r\n            //\r\n            //  UTC   sys   *_It\r\n            //   99    99    100\r\n            //  100     X    200\r\n            //  101   100    200\r\n            //  102   101    200\r\n            //  ...\r\n            //  199   198    200\r\n            //  200   199    300^\r\n            //  201     X    300\r\n            //  202   200    300\r\n            //  ...\r\n            //  299   297    300\r\n            //  300   298    400^\r\n            //  301   299    400^\r\n            //  302     X    400\r\n            //  303   300    400\r\n            //\r\n            //  ^_It points to 2nd leap second\r\n\r\n            _It = _STD upper_bound(_Ls_vector.begin(), _Ls_vector.end(), sys_seconds{_Time_floor.time_since_epoch()});\r\n        } else {\r\n            seconds _Prev_elapsed{0};\r\n            for (_It = _Ls_vector.begin(); _It != _Ls_vector.end(); ++_It) {\r\n                // UTC time when leap second insertion begins. In all cases, _It->date() + _It->_Elapsed() is the *end*\r\n                // of the insertion. For a negative leap that's also the beginning, but for a positive one, insertion\r\n                // begins 1 second earlier.\r\n                const utc_seconds _This_ls_begin{\r\n                    _It->date().time_since_epoch() + (_It->_Positive() ? _Prev_elapsed : _It->_Elapsed())};\r\n                if (_This_ls_begin > _Time_floor) {\r\n                    break;\r\n                }\r\n                _Prev_elapsed = _It->_Elapsed();\r\n            }\r\n        }\r\n\r\n        if (_It == _Ls_vector.begin()) {\r\n            return {false, seconds{0}};\r\n        } else {\r\n            // Convert to the last leap second before or equal to _Time.\r\n            const auto& _Last_leap = *--_It;\r\n            const utc_seconds _Utc_leap_second{_Last_leap.date().time_since_epoch() + _It->_Elapsed() - seconds{1}};\r\n            const auto _Leap_cmp = _Utc_leap_second <=> _Time_floor;\r\n            if (_Tzdb._All_ls_positive && _STD is_gt(_Leap_cmp)) { // Case (1)\r\n                --_It;\r\n            }\r\n            return {_Last_leap._Positive() && _STD is_eq(_Leap_cmp), _It->_Elapsed()};\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD class utc_clock {\r\n    public:\r\n        using rep                       = system_clock::rep;\r\n        using period                    = system_clock::period;\r\n        using duration                  = _CHRONO duration<rep, period>;\r\n        using time_point                = _CHRONO time_point<utc_clock>;\r\n        static constexpr bool is_steady = system_clock::is_steady;\r\n\r\n        _NODISCARD static time_point now() {\r\n            return from_sys(system_clock::now());\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD static sys_time<common_type_t<_Duration, seconds>> to_sys(const utc_time<_Duration>& _Utc_time) {\r\n            using _CommonType = common_type_t<_Duration, seconds>;\r\n            const auto _Lsi{_CHRONO get_leap_second_info(_Utc_time)};\r\n            _CommonType _Ticks;\r\n            if (_Lsi.is_leap_second) {\r\n                const auto _Leap_sec_minus_one = _CHRONO floor<seconds>(_Utc_time.time_since_epoch()) - _Lsi.elapsed;\r\n                if constexpr (is_integral_v<typename _Duration::rep>) {\r\n                    constexpr auto _Delta{seconds{1} - _CommonType{1}};\r\n                    _Ticks = _Leap_sec_minus_one + _Delta;\r\n                } else {\r\n                    const auto _Leap_sec_begin = _CHRONO ceil<_CommonType>(_Leap_sec_minus_one + seconds{1});\r\n                    _Ticks = _CommonType{_STD nextafter(_Leap_sec_begin.count(), typename _CommonType::rep{0})};\r\n                }\r\n            } else {\r\n                _Ticks = _Utc_time.time_since_epoch() - _Lsi.elapsed;\r\n            }\r\n            return sys_time<_CommonType>{_Ticks};\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD static utc_time<common_type_t<_Duration, seconds>> from_sys(const sys_time<_Duration>& _Sys_time) {\r\n            const auto& _Tzdb      = _CHRONO get_tzdb();\r\n            const auto& _Ls_vector = _Tzdb.leap_seconds;\r\n            auto _It = _STD upper_bound(_Ls_vector.begin(), _Ls_vector.end(), _CHRONO floor<seconds>(_Sys_time));\r\n            const auto _Offset = _It == _Ls_vector.begin() ? seconds{0} : (--_It)->_Elapsed();\r\n            return utc_time<common_type_t<_Duration, seconds>>{_Sys_time.time_since_epoch() + _Offset};\r\n        }\r\n    };\r\n\r\n    // [time.clock.tai]\r\n\r\n    _EXPORT_STD class tai_clock;\r\n\r\n    _EXPORT_STD template <class _Duration>\r\n    using tai_time                = time_point<tai_clock, _Duration>;\r\n    _EXPORT_STD using tai_seconds = tai_time<seconds>;\r\n\r\n    _EXPORT_STD class tai_clock {\r\n    public:\r\n        using rep                       = system_clock::rep;\r\n        using period                    = system_clock::period;\r\n        using duration                  = _CHRONO duration<rep, period>;\r\n        using time_point                = _CHRONO time_point<tai_clock>;\r\n        static constexpr bool is_steady = system_clock::is_steady;\r\n\r\n        static constexpr seconds _Tai_epoch_adjust{378691210};\r\n\r\n        _NODISCARD static time_point now() {\r\n            return from_utc(utc_clock::now());\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD static utc_time<common_type_t<_Duration, seconds>> to_utc(\r\n            const tai_time<_Duration>& _Time) noexcept {\r\n            return utc_time<common_type_t<_Duration, seconds>>{_Time.time_since_epoch()} - _Tai_epoch_adjust;\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD static tai_time<common_type_t<_Duration, seconds>> from_utc(\r\n            const utc_time<_Duration>& _Time) noexcept {\r\n            return tai_time<common_type_t<_Duration, seconds>>{_Time.time_since_epoch()} + _Tai_epoch_adjust;\r\n        }\r\n    };\r\n\r\n    // [time.clock.gps]\r\n\r\n    _EXPORT_STD class gps_clock;\r\n\r\n    _EXPORT_STD template <class _Duration>\r\n    using gps_time                = time_point<gps_clock, _Duration>;\r\n    _EXPORT_STD using gps_seconds = gps_time<seconds>;\r\n\r\n    _EXPORT_STD class gps_clock {\r\n    public:\r\n        using rep                       = system_clock::rep;\r\n        using period                    = system_clock::period;\r\n        using duration                  = _CHRONO duration<rep, period>;\r\n        using time_point                = _CHRONO time_point<gps_clock>;\r\n        static constexpr bool is_steady = system_clock::is_steady;\r\n\r\n        static constexpr seconds _Gps_epoch_adjust{-315964809};\r\n\r\n        _NODISCARD static time_point now() {\r\n            return from_utc(utc_clock::now());\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD static utc_time<common_type_t<_Duration, seconds>> to_utc(\r\n            const gps_time<_Duration>& _Time) noexcept {\r\n            return utc_time<common_type_t<_Duration, seconds>>{_Time.time_since_epoch()} - _Gps_epoch_adjust;\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD static gps_time<common_type_t<_Duration, seconds>> from_utc(\r\n            const utc_time<_Duration>& _Time) noexcept {\r\n            return gps_time<common_type_t<_Duration, seconds>>{_Time.time_since_epoch()} + _Gps_epoch_adjust;\r\n        }\r\n    };\r\n#endif // _HAS_CXX20\r\n} // namespace chrono\r\n\r\n#if _HAS_CXX20\r\nnamespace filesystem {\r\n    struct _File_time_clock;\r\n} // namespace filesystem\r\n\r\nnamespace chrono {\r\n    _EXPORT_STD using file_clock = filesystem::_File_time_clock;\r\n\r\n    _EXPORT_STD template <class _Duration>\r\n    using file_time = time_point<file_clock, _Duration>;\r\n} // namespace chrono\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n\r\n#if _HAS_CXX17\r\nnamespace filesystem {\r\n    inline constexpr long long __std_fs_file_time_epoch_adjustment = 0x19DB1DED53E8000LL; // TRANSITION, ABI\r\n\r\n    struct _File_time_clock { // Implementation of trivial-clock\r\n        using rep                       = long long;\r\n        using period                    = chrono::system_clock::period;\r\n        using duration                  = chrono::duration<rep, period>;\r\n        using time_point                = chrono::time_point<_File_time_clock>;\r\n        static constexpr bool is_steady = false;\r\n\r\n        _NODISCARD static time_point now() noexcept { // get current time; undo epoch adjustment\r\n            return time_point(duration(::_Xtime_get_ticks() + __std_fs_file_time_epoch_adjustment)); // TRANSITION, ABI\r\n        }\r\n\r\n#if _HAS_CXX20\r\n        // Assumes that FILETIME counts leap seconds since 2018-06-01 (i.e., after the first 27 leap seconds), even\r\n        // though systems can opt out of this behavior.\r\n        static constexpr chrono::seconds _Skipped_filetime_leap_seconds{27};\r\n        static constexpr chrono::sys_days _Cutoff{\r\n            chrono::year_month_day{chrono::year{2018}, chrono::June, chrono::day{1}}};\r\n\r\n        template <class _Duration>\r\n        _NODISCARD static chrono::utc_time<common_type_t<_Duration, chrono::seconds>> to_utc(\r\n            const chrono::file_time<_Duration>& _File_time) {\r\n            using namespace chrono;\r\n            using _CommonType = common_type_t<_Duration, seconds>;\r\n            const auto _Ticks = _File_time.time_since_epoch()\r\n                              - _CHRONO duration_cast<seconds>(duration{__std_fs_file_time_epoch_adjustment});\r\n\r\n            if (_Ticks < _Cutoff.time_since_epoch()) {\r\n                return utc_clock::from_sys(sys_time<_CommonType>{_Ticks});\r\n            } else {\r\n                return utc_time<_CommonType>{_Ticks + _Skipped_filetime_leap_seconds};\r\n            }\r\n        }\r\n\r\n        template <class _Duration>\r\n        _NODISCARD static chrono::file_time<common_type_t<_Duration, chrono::seconds>> from_utc(\r\n            const chrono::utc_time<_Duration>& _Utc_time) {\r\n            using namespace chrono;\r\n            file_time<common_type_t<_Duration, seconds>> _File_time{\r\n                _CHRONO duration_cast<seconds>(duration{__std_fs_file_time_epoch_adjustment})};\r\n\r\n            if (_Utc_time < utc_seconds{_Cutoff.time_since_epoch()} + _Skipped_filetime_leap_seconds) {\r\n                _File_time += utc_clock::to_sys(_Utc_time).time_since_epoch();\r\n            } else {\r\n                _File_time += _Utc_time.time_since_epoch() - _Skipped_filetime_leap_seconds;\r\n            }\r\n\r\n            return _File_time;\r\n        }\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n    };\r\n} // namespace filesystem\r\n#endif // ^^^ _HAS_CXX17 ^^^\r\n\r\n#if _HAS_CXX20\r\nnamespace chrono {\r\n    // [time.clock.conv]\r\n\r\n    _EXPORT_STD template <class _DestClock, class _SourceClock>\r\n    struct clock_time_conversion {};\r\n\r\n    // [time.clock.cast.id]\r\n\r\n    template <class _Clock>\r\n    struct clock_time_conversion<_Clock, _Clock> {\r\n        template <class _Duration>\r\n        _NODISCARD time_point<_Clock, _Duration> operator()(const time_point<_Clock, _Duration>& _Time) const\r\n            noexcept(is_arithmetic_v<typename _Duration::rep>) /* strengthened */ {\r\n            return _Time;\r\n        }\r\n    };\r\n\r\n    template <>\r\n    struct clock_time_conversion<system_clock, system_clock> {\r\n        template <class _Duration>\r\n        _NODISCARD sys_time<_Duration> operator()(const sys_time<_Duration>& _Time) const\r\n            noexcept(is_arithmetic_v<typename _Duration::rep>) /* strengthened */ {\r\n            return _Time;\r\n        }\r\n    };\r\n\r\n    template <>\r\n    struct clock_time_conversion<utc_clock, utc_clock> {\r\n        template <class _Duration>\r\n        _NODISCARD utc_time<_Duration> operator()(const utc_time<_Duration>& _Time) const\r\n            noexcept(is_arithmetic_v<typename _Duration::rep>) /* strengthened */ {\r\n            return _Time;\r\n        }\r\n    };\r\n\r\n    // [time.clock.cast.sys.utc]\r\n\r\n    template <>\r\n    struct clock_time_conversion<utc_clock, system_clock> {\r\n        template <class _Duration>\r\n        _NODISCARD utc_time<common_type_t<_Duration, seconds>> operator()(const sys_time<_Duration>& _Sys_time) const {\r\n            return utc_clock::from_sys(_Sys_time);\r\n        }\r\n    };\r\n\r\n    template <>\r\n    struct clock_time_conversion<system_clock, utc_clock> {\r\n        template <class _Duration>\r\n        _NODISCARD sys_time<common_type_t<_Duration, seconds>> operator()(const utc_time<_Duration>& _Utc_time) const {\r\n            return utc_clock::to_sys(_Utc_time);\r\n        }\r\n    };\r\n\r\n    // [time.clock.cast.sys]\r\n\r\n    template <class _TimePoint, class _Clock>\r\n    constexpr bool _Is_time_point_for_clock = false;\r\n\r\n    template <class _Clock, class _Duration>\r\n    constexpr bool _Is_time_point_for_clock<time_point<_Clock, _Duration>, _Clock> = true;\r\n\r\n    template <class _SourceClock>\r\n    struct clock_time_conversion<system_clock, _SourceClock> {\r\n        template <class _Duration>\r\n            requires requires(const time_point<_SourceClock, _Duration>& _Time) { _SourceClock::to_sys(_Time); }\r\n        _NODISCARD auto operator()(const time_point<_SourceClock, _Duration>& _Time) const\r\n            noexcept(noexcept(_SourceClock::to_sys(_Time))) /* strengthened */ {\r\n            static_assert(_Is_time_point_for_clock<decltype(_SourceClock::to_sys(_Time)), system_clock>,\r\n                \"N4950 [time.clock.cast.sys]/2: Mandates: SourceClock::to_sys(t) \"\r\n                \"returns a sys_time<Duration2> for some type Duration2\");\r\n            return _SourceClock::to_sys(_Time);\r\n        }\r\n    };\r\n\r\n    template <class _DestClock>\r\n    struct clock_time_conversion<_DestClock, system_clock> {\r\n        template <class _Duration>\r\n            requires requires(const sys_time<_Duration>& _Time) { _DestClock::from_sys(_Time); }\r\n        _NODISCARD auto operator()(const sys_time<_Duration>& _Time) const\r\n            noexcept(noexcept(_DestClock::from_sys(_Time))) /* strengthened */ {\r\n            static_assert(_Is_time_point_for_clock<decltype(_DestClock::from_sys(_Time)), _DestClock>,\r\n                \"N4950 [time.clock.cast.sys]/5: Mandates: DestClock::from_sys(t) \"\r\n                \"returns a time_point<DestClock, Duration2> for some type Duration2\");\r\n            return _DestClock::from_sys(_Time);\r\n        }\r\n    };\r\n\r\n    // [time.clock.cast.utc]\r\n\r\n    template <class _SourceClock>\r\n    struct clock_time_conversion<utc_clock, _SourceClock> {\r\n        template <class _Duration>\r\n            requires requires(const time_point<_SourceClock, _Duration>& _Time) { _SourceClock::to_utc(_Time); }\r\n        _NODISCARD auto operator()(const time_point<_SourceClock, _Duration>& _Time) const\r\n            noexcept(noexcept(_SourceClock::to_utc(_Time))) /* strengthened */ {\r\n            static_assert(_Is_time_point_for_clock<decltype(_SourceClock::to_utc(_Time)), utc_clock>,\r\n                \"N4950 [time.clock.cast.utc]/2: Mandates: SourceClock::to_utc(t) \"\r\n                \"returns a utc_time<Duration2> for some type Duration2\");\r\n            return _SourceClock::to_utc(_Time);\r\n        }\r\n    };\r\n\r\n    template <class _DestClock>\r\n    struct clock_time_conversion<_DestClock, utc_clock> {\r\n        template <class _Duration>\r\n            requires requires(const utc_time<_Duration>& _Time) { _DestClock::from_utc(_Time); }\r\n        _NODISCARD auto operator()(const utc_time<_Duration>& _Time) const\r\n            noexcept(noexcept(_DestClock::from_utc(_Time))) /* strengthened */ {\r\n            static_assert(_Is_time_point_for_clock<decltype(_DestClock::from_utc(_Time)), _DestClock>,\r\n                \"N4950 [time.clock.cast.utc]/5: Mandates: DestClock::from_utc(t) \"\r\n                \"returns a time_point<DestClock, Duration2> for some type Duration2\");\r\n            return _DestClock::from_utc(_Time);\r\n        }\r\n    };\r\n\r\n    // [time.clock.cast.fn]\r\n\r\n    enum class _Clock_cast_strategy {\r\n        _Direct,\r\n        _Via_sys,\r\n        _Via_utc,\r\n        _Via_utc_from_sys,\r\n        _Via_sys_from_utc,\r\n        _Two_step_ambiguous,\r\n        _Three_step_ambiguous,\r\n        _None,\r\n    };\r\n\r\n    template <class _Conv1, class _Conv2, class _Tp>\r\n    constexpr bool _Has_two_step_conversion = requires { _Conv1{}(_Conv2{}(_STD declval<_Tp>())); };\r\n\r\n    template <class _Conv1, class _Conv2, class _Conv3, class _Tp>\r\n    constexpr bool _Has_three_step_conversion = requires { _Conv1{}(_Conv2{}(_Conv3{}(_STD declval<_Tp>()))); };\r\n\r\n    template <class _DestClock, class _SourceClock, class _Duration>\r\n    _NODISCARD consteval _Clock_cast_strategy _Choose_clock_cast() noexcept {\r\n        using _Tp = const time_point<_SourceClock, _Duration>&;\r\n\r\n        if constexpr (is_invocable_v<clock_time_conversion<_DestClock, _SourceClock>, _Tp>) {\r\n            return _Clock_cast_strategy::_Direct;\r\n        } else {\r\n            constexpr bool _Has_sys = _Has_two_step_conversion<clock_time_conversion<_DestClock, system_clock>,\r\n                clock_time_conversion<system_clock, _SourceClock>, _Tp>;\r\n\r\n            constexpr bool _Has_utc = _Has_two_step_conversion<clock_time_conversion<_DestClock, utc_clock>,\r\n                clock_time_conversion<utc_clock, _SourceClock>, _Tp>;\r\n\r\n            if constexpr (_Has_sys && _Has_utc) {\r\n                return _Clock_cast_strategy::_Two_step_ambiguous;\r\n            } else if constexpr (_Has_sys) {\r\n                return _Clock_cast_strategy::_Via_sys;\r\n            } else if constexpr (_Has_utc) {\r\n                return _Clock_cast_strategy::_Via_utc;\r\n            } else {\r\n                constexpr bool _Has_utc_from_sys = _Has_three_step_conversion< //\r\n                    clock_time_conversion<_DestClock, utc_clock>, //\r\n                    clock_time_conversion<utc_clock, system_clock>, //\r\n                    clock_time_conversion<system_clock, _SourceClock>, _Tp>;\r\n\r\n                constexpr bool _Has_sys_from_utc = _Has_three_step_conversion< //\r\n                    clock_time_conversion<_DestClock, system_clock>, //\r\n                    clock_time_conversion<system_clock, utc_clock>, //\r\n                    clock_time_conversion<utc_clock, _SourceClock>, _Tp>;\r\n\r\n                if constexpr (_Has_utc_from_sys && _Has_sys_from_utc) {\r\n                    return _Clock_cast_strategy::_Three_step_ambiguous;\r\n                } else if constexpr (_Has_utc_from_sys) {\r\n                    return _Clock_cast_strategy::_Via_utc_from_sys;\r\n                } else if constexpr (_Has_sys_from_utc) {\r\n                    return _Clock_cast_strategy::_Via_sys_from_utc;\r\n                } else {\r\n                    return _Clock_cast_strategy::_None;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    template <class _DestClock, class _SourceClock, class _Duration>\r\n    constexpr auto _Clock_cast_choice = _CHRONO _Choose_clock_cast<_DestClock, _SourceClock, _Duration>();\r\n\r\n    _EXPORT_STD template <class _DestClock, class _SourceClock, class _Duration>\r\n        requires (_Clock_cast_choice<_DestClock, _SourceClock, _Duration> != _Clock_cast_strategy::_None)\r\n    _NODISCARD auto clock_cast(const time_point<_SourceClock, _Duration>& _Time) {\r\n        constexpr auto _Strat = _Clock_cast_choice<_DestClock, _SourceClock, _Duration>;\r\n\r\n        if constexpr (_Strat == _Clock_cast_strategy::_Direct) {\r\n            return clock_time_conversion<_DestClock, _SourceClock>{}(_Time);\r\n        } else if constexpr (_Strat == _Clock_cast_strategy::_Via_sys) {\r\n            return clock_time_conversion<_DestClock, system_clock>{}(\r\n                clock_time_conversion<system_clock, _SourceClock>{}(_Time));\r\n        } else if constexpr (_Strat == _Clock_cast_strategy::_Via_utc) {\r\n            return clock_time_conversion<_DestClock, utc_clock>{}(\r\n                clock_time_conversion<utc_clock, _SourceClock>{}(_Time));\r\n        } else if constexpr (_Strat == _Clock_cast_strategy::_Via_utc_from_sys) {\r\n            return clock_time_conversion<_DestClock, utc_clock>{}( //\r\n                clock_time_conversion<utc_clock, system_clock>{}(\r\n                    clock_time_conversion<system_clock, _SourceClock>{}(_Time)));\r\n        } else if constexpr (_Strat == _Clock_cast_strategy::_Via_sys_from_utc) {\r\n            return clock_time_conversion<_DestClock, system_clock>{}( //\r\n                clock_time_conversion<system_clock, utc_clock>{}(\r\n                    clock_time_conversion<utc_clock, _SourceClock>{}(_Time)));\r\n        } else if constexpr (_Strat == _Clock_cast_strategy::_Two_step_ambiguous) {\r\n            static_assert(false,\r\n                \"A two-step clock time conversion is required to be unique, \"\r\n                \"either through utc_clock or system_clock, but not both (N4950 [time.clock.cast.fn]/2).\");\r\n        } else if constexpr (_Strat == _Clock_cast_strategy::_Three_step_ambiguous) {\r\n            static_assert(false, \"A three-step clock time conversion is required to be unique, \"\r\n                                 \"either utc-to-system or system-to-utc, but not both (N4950 [time.clock.cast.fn]/2).\");\r\n        } else {\r\n            static_assert(false); // unexpected strategy\r\n        }\r\n    }\r\n\r\n    // [time.parse]\r\n    struct _Time_parse_fields {\r\n        using _SubsecondType = duration<int64_t, atto>;\r\n\r\n        // These are the primary fields, used to set the chrono type being parsed.\r\n        optional<int64_t> _Subsecond;\r\n        optional<int> _Second;\r\n        optional<int> _Minute;\r\n        optional<int> _Hour_24;\r\n        optional<int> _Weekday; // 0-based, starts Sunday\r\n        optional<int> _Day; // 1-based\r\n        optional<int> _Month; // 1-based\r\n        optional<int> _Day_of_year; // 1-based\r\n        optional<int> _Two_dig_year;\r\n        optional<int> _Century;\r\n        optional<int> _Utc_offset; // in minutes\r\n        optional<string> _Tz_name;\r\n\r\n        // These are the secondary fields, used to store parsed data. They must be converted to primary fields and\r\n        // checked for consistency.\r\n        optional<int> _Hour_12;\r\n        optional<int> _Ampm;\r\n        optional<int> _Iso_year;\r\n        optional<int> _Two_dig_iso_year;\r\n        optional<int> _Iso_week; // 1-based\r\n        optional<int> _Week_u; // week number, W01 begins on first Sunday\r\n        optional<int> _Week_w; // week number, W01 begins on first Monday\r\n\r\n        enum _FieldFlags : unsigned int {\r\n            _F_sec   = 0x01,\r\n            _F_min   = 0x02,\r\n            _F_hr    = 0x04,\r\n            _F_day   = 0x08,\r\n            _F_wkday = 0x10,\r\n            _F_mon   = 0x20,\r\n            _F_doy   = 0x40,\r\n            _F_year  = 0x80,\r\n        };\r\n\r\n        _NODISCARD unsigned int _Used_fields() const {\r\n            unsigned int _Ret{0};\r\n            if (_Second || _Subsecond) {\r\n                _Ret |= _F_sec;\r\n            }\r\n\r\n            if (_Minute) {\r\n                _Ret |= _F_min;\r\n            }\r\n\r\n            if (_Hour_24) {\r\n                _Ret |= _F_hr;\r\n            }\r\n\r\n            if (_Day) {\r\n                _Ret |= _F_day;\r\n            }\r\n\r\n            if (_Weekday) {\r\n                _Ret |= _F_wkday;\r\n            }\r\n\r\n            if (_Month) {\r\n                _Ret |= _F_mon;\r\n            }\r\n\r\n            if (_Day_of_year) {\r\n                _Ret |= _F_doy;\r\n            }\r\n\r\n            if (_Two_dig_year && _Century) {\r\n                _Ret |= _F_year;\r\n            }\r\n            return _Ret;\r\n        }\r\n\r\n        _NODISCARD static bool _Test_bits(\r\n            const unsigned int _Bits, const unsigned int _Must_set, const unsigned int _Optional = 0) {\r\n            return (_Bits & ~_Optional) == _Must_set;\r\n        }\r\n\r\n        template <class _Ty>\r\n        static constexpr _Ty _Invalid_time_field{numeric_limits<_Ty>::lowest()};\r\n\r\n        static void _Initialize_time_point(tm& _Tp) {\r\n            _Tp.tm_sec  = _Invalid_time_field<int>;\r\n            _Tp.tm_min  = _Invalid_time_field<int>;\r\n            _Tp.tm_hour = _Invalid_time_field<int>;\r\n            _Tp.tm_wday = _Invalid_time_field<int>;\r\n            _Tp.tm_mday = _Invalid_time_field<int>;\r\n            _Tp.tm_mon  = _Invalid_time_field<int>;\r\n            _Tp.tm_yday = _Invalid_time_field<int>;\r\n            _Tp.tm_year = _Invalid_time_field<int>;\r\n        }\r\n\r\n        template <class _Ty>\r\n        _NODISCARD static bool _Update(optional<_Ty>& _Val, const _Ty& _New) {\r\n            // Update a field. Ignores invalid values. If _Val already has a value, returns true or false according to\r\n            // whether the new value matches the current one or not, so that inconsistencies can be detected.\r\n\r\n            if constexpr (!is_same_v<_Ty, string>) {\r\n                if (_New == _Invalid_time_field<_Ty>) {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            if (_Val.has_value()) {\r\n                return _STD exchange(*_Val, _New) == _New;\r\n            }\r\n\r\n            _Val = _New;\r\n            return true;\r\n        }\r\n\r\n        _NODISCARD static pair<int, int> _Decompose_year(const int _Year) {\r\n            int _Two_d_year = _Year % 100;\r\n            if (_Two_d_year < 0) {\r\n                _Two_d_year += 100;\r\n            }\r\n            return {_Year - _Two_d_year, _Two_d_year};\r\n        }\r\n\r\n        _NODISCARD bool _Update_if_valid(const tm& _Tp, const bool _Full_year) {\r\n            bool _No_err{true};\r\n            if (_Tp.tm_hour != _Invalid_time_field<int>) {\r\n                _No_err = _No_err && _Update(_Hour_24, _Tp.tm_hour);\r\n                _No_err = _No_err && _Update(_Ampm, _Hour_24 >= 12 ? 1 : 0);\r\n                _No_err = _No_err && _Update(_Hour_12, _CHRONO make12(hours{*_Hour_24}).count());\r\n            }\r\n\r\n            _No_err = _No_err && _Update(_Minute, _Tp.tm_min);\r\n            _No_err = _No_err && _Update(_Second, _Tp.tm_sec);\r\n            _No_err = _No_err && _Update(_Day, _Tp.tm_mday);\r\n            _No_err = _No_err && _Update(_Weekday, _Tp.tm_wday);\r\n\r\n            if (_Tp.tm_mon != _Invalid_time_field<int>) {\r\n                _No_err = _No_err && _Update(_Month, _Tp.tm_mon + 1);\r\n            }\r\n\r\n            if (_Tp.tm_yday != _Invalid_time_field<int>) {\r\n                _No_err = _No_err && _Update(_Day_of_year, _Tp.tm_yday + 1);\r\n            }\r\n\r\n            if (_Tp.tm_year != _Invalid_time_field<int>) {\r\n                // Sometimes we expect only the last two digits.\r\n                const auto _Year_parts = _Decompose_year(_Tp.tm_year + 1900);\r\n                _No_err                = _No_err && _Update(_Two_dig_year, _Year_parts.second);\r\n                if (_Full_year) {\r\n                    _No_err = _No_err && _Update(_Century, _Year_parts.first);\r\n                }\r\n            }\r\n\r\n            return _No_err;\r\n        }\r\n\r\n        _NODISCARD bool _Yday_to_month_day(const int _Yday, const int _Year) {\r\n            // A day-of-year that's February 28 or earlier, by itself, is a valid month_day. Any later day is\r\n            // ambiguous without a year.\r\n            if (_Out_of_range(_Day_of_year, 1, _Two_dig_year || _Iso_year ? _Days_in_year(_Year) : 59)) {\r\n                return false;\r\n            }\r\n\r\n            if (_Day_of_year <= 31) {\r\n                return _Update(_Day, _Yday) && _Update(_Month, 1);\r\n            }\r\n\r\n            const int _Feb_end{_Is_leap(_Year) ? 60 : 59};\r\n            if (_Day_of_year <= _Feb_end) {\r\n                return _Update(_Day, _Yday - 31) && _Update(_Month, 2);\r\n            }\r\n\r\n            // Shift day-of-year so that 1 == March 1. This is the same as year_month_day::_Civil_from_days, except\r\n            // _Day_of_year --> _Shifted_yday-1 and _Mp --> _Month - 3.\r\n            const int _Shifted_yday{*_Day_of_year - _Feb_end};\r\n            return _Update(_Month, (535 * _Shifted_yday + 48950) >> 14)\r\n                && _Update(_Day, _Shifted_yday - ((979 * *_Month - 2918) >> 5));\r\n        }\r\n\r\n        static constexpr int _Era_begin_wday{3}; // Wednesday\r\n\r\n        _NODISCARD static constexpr int _Jan1_weekday(int _Year) {\r\n            --_Year;\r\n            const int _Era = (_Year >= 0 ? _Year : _Year - 399) / 400;\r\n            const int _Yoe = _Year - _Era * 400;\r\n            // Jan. 1 is always day 306 of the shifted [Mar, ..., Dec, Jan, Feb] year.\r\n            const int _Doe = ((1461 * _Yoe) >> 2) - _Yoe / 100 + 306;\r\n            return (_Doe + _Era_begin_wday) % 7;\r\n        }\r\n\r\n        _NODISCARD static constexpr int _Iso8601_weeks(int _Year) {\r\n            const int _P_y = (_Year + _Year / 4 - _Year / 100 + _Year / 400) % 7;\r\n            --_Year;\r\n            const int _P_ym1 = (_Year + _Year / 4 - _Year / 100 + _Year / 400) % 7;\r\n            return 52 + (_P_y == 4 || _P_ym1 == 3);\r\n        }\r\n\r\n        _NODISCARD static constexpr int _Iso8601_week(const int _Day_of_year, const int _Weekday, const int _Year) {\r\n            // Jan. 4 is always week 1; rollover to next week always happens on Monday.\r\n            const auto _Week{(_Day_of_year + 9 - _Prev_weekday(_Weekday, 1)) / 7};\r\n            if (_Week < 1) {\r\n                return _Iso8601_weeks(_Year - 1);\r\n            } else if (_Week > _Iso8601_weeks(_Year)) {\r\n                return 1;\r\n            } else {\r\n                return _Week;\r\n            }\r\n        }\r\n\r\n        _NODISCARD static constexpr bool _Is_leap(const int _Year) {\r\n            return _Year % 4 == 0 && (_Year % 100 != 0 || _Year % 400 == 0);\r\n        }\r\n\r\n        _NODISCARD static constexpr int _Days_in_year(const int _Year) {\r\n            return _Is_leap(_Year) ? 366 : 365;\r\n        }\r\n\r\n        _NODISCARD static constexpr int _Next_weekday(const int _Wday, const int _Shift) {\r\n            // 0 <= _Shift <= 6\r\n            int _Result = _Wday + _Shift;\r\n            if (_Result >= 7) {\r\n                _Result -= 7;\r\n            }\r\n            return _Result;\r\n        }\r\n\r\n        _NODISCARD static constexpr int _Prev_weekday(const int _Wday, const int _Shift) {\r\n            // 0 <= _Shift <= 6\r\n            return (_Wday >= _Shift ? 0 : 7) + (_Wday - _Shift);\r\n        }\r\n\r\n        _NODISCARD bool _Calculate_ymd_from_week_date(const int _Starting_wday, const int _Week, const int _Year) {\r\n            // (a) Calculate day-of-year of first _Starting_wday in January.\r\n            // (b) Shift *_Weekday so that it's relative to _Starting_wday.\r\n            // (c) Offset to desired week.\r\n            const int _Jan1_wday = _Jan1_weekday(_Year);\r\n            const int _Yday      = 1 + _Prev_weekday(_Starting_wday, _Jan1_wday) // (a)\r\n                            + _Prev_weekday(*_Weekday, _Starting_wday) // (b)\r\n                            + 7 * (_Week - 1); // (c)\r\n            return _Update(_Day_of_year, _Yday) && !_Out_of_range(_Day_of_year, 1, _Days_in_year(_Year))\r\n                && _Yday_to_month_day(*_Day_of_year, _Year);\r\n        }\r\n\r\n        _NODISCARD bool _Calculate_ymd() {\r\n            bool _No_err = true;\r\n            // Flags to indicate if a field should be checked for consistency with other data. Set to false when the\r\n            // field is used to calculate the date, as it's necessarily self-consistent in that case (barring a bug).\r\n            bool _Check_u    = true;\r\n            bool _Check_w    = true;\r\n            bool _Check_iso  = true;\r\n            bool _Check_wday = true;\r\n\r\n            if (_Day_of_year && _Out_of_range(_Day_of_year, 1, 366)) {\r\n                return false;\r\n            }\r\n\r\n            bool _Have_year = false;\r\n            int _Year{0};\r\n            if (_Two_dig_year) {\r\n                _Year      = *_Century + *_Two_dig_year;\r\n                _Have_year = true;\r\n                if (_Day_of_year) {\r\n                    _No_err = _No_err && _Yday_to_month_day(*_Day_of_year, _Year);\r\n                } else if (_Week_u || _Week_w) {\r\n                    _Check_wday = false;\r\n                    if (_Week_u) {\r\n                        _Check_u = false;\r\n                        _No_err  = _No_err && _Calculate_ymd_from_week_date(0 /*Sunday*/, *_Week_u, _Year);\r\n                    }\r\n\r\n                    if (_Week_w) {\r\n                        _Check_w = false;\r\n                        _No_err  = _No_err && _Calculate_ymd_from_week_date(1 /*Monday*/, *_Week_w, _Year);\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (_Iso_year) {\r\n                // ISO weeks begin on Monday. W01 always contains January 4. There is no W00, so the beginning of\r\n                // January can be in W52 or W53 of the previous year. Likewise, the end of December can occur at the\r\n                // beginning of W01 of the following year, depending on where in the week Jan. 4 falls.\r\n                _Check_wday = false;\r\n                _Check_iso  = false;\r\n                _Year       = *_Iso_year;\r\n                _Have_year  = true;\r\n\r\n                // Shift weekdays to Monday-based. Jan. 4 is the anchor of week 1, so calculate where the parsed weekday\r\n                // is relative to that point.\r\n                const int _Jan4_wday        = _Next_weekday(_Jan1_weekday(_Year), 3 - 1);\r\n                const int _Offset_from_jan4 = _Prev_weekday(*_Weekday, 1) - _Jan4_wday;\r\n                int _Trial_yday             = 4 + 7 * (*_Iso_week - 1) + _Offset_from_jan4;\r\n                const int _Ref_num_days     = _Trial_yday < 1 ? _Days_in_year(_Year - 1) : _Days_in_year(_Year);\r\n                if (_Trial_yday < 1) {\r\n                    _Trial_yday += _Ref_num_days;\r\n                    --_Year;\r\n                } else if (_Trial_yday > _Ref_num_days) {\r\n                    _Trial_yday -= _Ref_num_days;\r\n                    ++_Year;\r\n                }\r\n\r\n                const auto _Year_parts = _Decompose_year(_Year);\r\n                _No_err = _No_err && _Update(_Day_of_year, _Trial_yday) && _Yday_to_month_day(*_Day_of_year, _Year)\r\n                       && _Update(_Century, _Year_parts.first) && _Update(_Two_dig_year, _Year_parts.second);\r\n            }\r\n\r\n            // Must have YMD by this point, either parsed directly or calculated above.\r\n            if (!_Have_year || !_Month || !_Day || !_No_err) {\r\n                return false;\r\n            }\r\n\r\n            // consistency checks\r\n            if (_Check_wday && _Weekday) {\r\n                const auto _Era_year = _Year - (*_Month <= 2);\r\n                const int _Era       = (_Era_year >= 0 ? _Era_year : _Era_year - 399) / 400;\r\n                const int _Yoe       = _Era_year - _Era * 400;\r\n                const int _Yday_era  = ((979 * (*_Month + (*_Month > 2 ? -3 : 9)) + 19) >> 5) + *_Day - 1;\r\n                const int _Doe       = ((1461 * _Yoe) >> 2) - _Yoe / 100 + _Yday_era;\r\n                _No_err              = _No_err && _Update(_Weekday, (_Doe + _Era_begin_wday) % 7);\r\n            }\r\n\r\n            if (_Check_u && _Week_u) {\r\n                _No_err = _No_err && _Update(_Week_u, (*_Day_of_year + 6 - *_Weekday) / 7);\r\n            }\r\n\r\n            if (_Check_w && _Week_w) {\r\n                _No_err = _No_err && _Update(_Week_w, (*_Day_of_year + 6 - _Prev_weekday(*_Weekday, 1)) / 7);\r\n            }\r\n\r\n            if (_Check_iso && _Iso_week) {\r\n                _No_err = _No_err && _Update(_Iso_week, _Iso8601_week(*_Day_of_year, *_Weekday, _Year));\r\n            }\r\n\r\n            return _No_err;\r\n        }\r\n\r\n        _NODISCARD bool _Calculate_hour24() {\r\n            if (_Hour_12) {\r\n                return _Update(\r\n                    _Hour_24, _CHRONO make24(hours{*_Hour_12}, static_cast<bool>(_Ampm.value_or(0))).count());\r\n            } else {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        _NODISCARD bool _Calculate_year_fields() {\r\n            bool _No_err = true;\r\n            // The order of these updates is significant. Updating the ISO date second allows\r\n            // formats with %g and %y, but not %C, to get the century implicitly from %y.\r\n            if (_Two_dig_year && !_Century) {\r\n                _No_err = _No_err && _Update(_Century, _Two_dig_year >= 69 ? 1900 : 2000);\r\n            }\r\n\r\n            // %C is only combined with %g if %G is missing, to avoid an unnecessary parse failure when the ISO and\r\n            // Gregorian years are in different centuries.\r\n            if (_Two_dig_iso_year && _Century && !_Iso_year) {\r\n                _No_err = _No_err && _Update(_Iso_year, *_Century + *_Two_dig_iso_year);\r\n            }\r\n\r\n            return _No_err;\r\n        }\r\n\r\n        _NODISCARD static bool _Out_of_range(const optional<int>& _Field, const int _Min, const int _Max) {\r\n            return _Field && (_Field < _Min || _Max < _Field);\r\n        }\r\n\r\n        _NODISCARD bool _Is_complete() const {\r\n            // Check for data that is incomplete, ambiguous, or obviously out-of-range. The exception is 12-hour time\r\n            // without am/pm. Most strptime implementations will assume am in this case, so we'll do that too. Don't\r\n            // check for consistency yet, because the data might not even be representable by the type being parsed,\r\n            // and calendar computations are relatively expensive.\r\n\r\n            // Most time-of-day fields are deferred until we know if we're parsing a time_point.\r\n            if (_Out_of_range(_Hour_12, 1, 12) //\r\n                || _Out_of_range(_Weekday, 0, 6) //\r\n                || _Out_of_range(_Day, 1, 31) //\r\n                || _Out_of_range(_Month, 1, 12)) {\r\n                return false;\r\n            }\r\n\r\n            if (_Iso_year || _Two_dig_iso_year || _Iso_week) {\r\n                // Need to have %G or %C+%g. The century can be parsed explicitly, or derived implicitly from %y.\r\n                const bool _Has_complete_year{_Iso_year || ((_Century || _Two_dig_year) && _Two_dig_iso_year)};\r\n                if (!_Has_complete_year || !_Iso_week || !_Weekday || _Out_of_range(_Iso_week, 1, 53)) {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            if (_Week_u || _Week_w) {\r\n                // Need a weekday and year to be complete.\r\n                if (!_Weekday || !_Two_dig_year) {\r\n                    return false;\r\n                }\r\n\r\n                if (_Out_of_range(_Week_u, 0, 53) || _Out_of_range(_Week_w, 0, 53)) {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        template <class _Duration1, class _Duration2>\r\n        _NODISCARD static constexpr bool _Can_represent() {\r\n            using _Rep1    = _Duration1::rep;\r\n            using _Period1 = _Duration1::period;\r\n            using _Period2 = _Duration2::period;\r\n\r\n            // Returns whether _Duration1 can represent _Duration2{1}. Assumes 1 <= _Period2 <=\r\n            // 86,400, i.e., we're interested in time periods between seconds and days.\r\n            if constexpr (is_integral_v<_Rep1>) {\r\n                // Must have _Period1 <= _Period2 and numeric_limits<_Rep1>::max() >= _Period2 / _Period1. For example,\r\n                // std::days can't represent std::seconds, and duration<int, atto>::max() is ~9.2 seconds.\r\n                constexpr auto _Max_tick = static_cast<intmax_t>((numeric_limits<make_signed_t<_Rep1>>::max)());\r\n\r\n                return ratio_less_equal_v<_Period1, _Period2>\r\n                    && ratio_greater_equal_v<ratio<_Max_tick, _Period2::num>, ratio_divide<ratio<1>, _Period1>>;\r\n            } else if constexpr (is_floating_point_v<_Rep1>) {\r\n                // With the smallest possible _Period1, ratio<1,INTMAX_MAX>, one day has a tick count of\r\n                // 86,400*INTMAX_MAX ~= 7.97e23. This is representable by float and double, so they can always represent\r\n                // at least one day. On the other hand, one second with the largest possible _Period1 needs a tick count\r\n                // of 1/(INTMAX_MAX) ~= 1.08e-19, which is also representable in both float and double. So, both\r\n                // floating-point types can represent durations between one second and one day, regardless of _Period1.\r\n                return true;\r\n            } else {\r\n                // TRANSITION: user-defined arithmetic-like types\r\n                return true;\r\n            }\r\n        }\r\n\r\n        enum class _Parse_tp_or_duration { _Time_point, _Duration };\r\n\r\n        template <_Parse_tp_or_duration _Parse_type, class _DurationType>\r\n        _NODISCARD bool _Apply_duration_fields(_DurationType& _Result) {\r\n            constexpr bool _Can_rep_sec    = _Can_represent<_DurationType, seconds>();\r\n            constexpr bool _Can_rep_min    = _Can_represent<_DurationType, minutes>();\r\n            constexpr bool _Can_rep_hr     = _Can_represent<_DurationType, hours>();\r\n            constexpr bool _Can_rep_day    = _Can_represent<_DurationType, days>();\r\n            constexpr bool _For_time_point = _Parse_type == _Parse_tp_or_duration::_Time_point;\r\n\r\n            const auto _Required{(_For_time_point ? _F_day | _F_mon | _F_year : 0)};\r\n            const auto _Optional{(_For_time_point ? _F_wkday : 0) | (_Can_rep_sec ? _F_sec : 0)\r\n                                 | (_Can_rep_min ? _F_min : 0) | (_Can_rep_hr ? _F_hr : 0)\r\n                                 | (_Can_rep_day ? _F_doy : 0)};\r\n\r\n            const auto _Used{_Used_fields()};\r\n            const auto _Time_out_of_range{\r\n                _For_time_point\r\n                && (_Out_of_range(_Second, 0, 60) || _Out_of_range(_Minute, 0, 59) || _Out_of_range(_Hour_24, 0, 23))};\r\n\r\n            if (_Time_out_of_range || !_Test_bits(_Used, _Required, _Optional)) {\r\n                return false;\r\n            }\r\n\r\n            _Result = _DurationType::zero();\r\n            if constexpr (_Can_rep_sec) {\r\n                if (_Used & _F_sec) {\r\n                    if (_Subsecond) {\r\n                        const _SubsecondType _Sub{*_Subsecond};\r\n\r\n                        if constexpr (!treat_as_floating_point_v<typename _DurationType::rep>) {\r\n                            using _CastedType = duration<int64_t, typename _DurationType::period>;\r\n                            if (_CHRONO duration_cast<_CastedType>(_Sub) != _Sub) {\r\n                                return false;\r\n                            }\r\n                        }\r\n\r\n                        _Result += _CHRONO duration_cast<_DurationType>(_Sub);\r\n                    }\r\n\r\n                    if (_Second) {\r\n                        _Result += _CHRONO duration_cast<_DurationType>(seconds{*_Second});\r\n                    }\r\n                }\r\n            }\r\n\r\n            if constexpr (_Can_rep_min) {\r\n                if (_Used & _F_min) {\r\n                    _Result += _CHRONO duration_cast<_DurationType>(minutes{*_Minute});\r\n                }\r\n\r\n                if (_Utc_offset) {\r\n                    _Result -= _CHRONO duration_cast<_DurationType>(minutes{*_Utc_offset});\r\n                }\r\n            }\r\n\r\n            if constexpr (_Can_rep_hr) {\r\n                if (_Used & _F_hr) {\r\n                    _Result += _CHRONO duration_cast<_DurationType>(hours{*_Hour_24});\r\n                }\r\n            }\r\n\r\n            if constexpr (_Can_rep_day) {\r\n                if (_For_time_point) {\r\n                    const year_month_day _Ymd{year{*_Century + *_Two_dig_year},\r\n                        month{static_cast<unsigned int>(*_Month)}, day{static_cast<unsigned int>(*_Day)}};\r\n                    _Result += _CHRONO duration_cast<_DurationType>(static_cast<sys_days>(_Ymd).time_since_epoch());\r\n                } else if (_Used & _F_doy) {\r\n                    _Result += _CHRONO duration_cast<_DurationType>(days{*_Day_of_year});\r\n                }\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        template <class _Rep, class _Period>\r\n        _NODISCARD bool _Make_duration(duration<_Rep, _Period>& _Duration_result) {\r\n            const bool _Consistent = _Calculate_hour24();\r\n            if (_Consistent) {\r\n                return _Apply_duration_fields<_Parse_tp_or_duration::_Duration>(_Duration_result);\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        enum class _Leap_second_rep : unsigned int {\r\n            _None, // system_clock, tai_clock, gps_clock; oblivious to leap seconds\r\n            _All, // utc_clock\r\n            _File_time // _None before 2018-06-01, _All afterwards.\r\n        };\r\n\r\n        template <class _DurationType>\r\n        _NODISCARD bool _Make_time_point(_DurationType& _Dur, _Leap_second_rep _Leap) {\r\n            const bool _Consistent{_Calculate_hour24() && _Calculate_year_fields() && _Calculate_ymd()};\r\n            if (!_Consistent || !_Apply_duration_fields<_Parse_tp_or_duration::_Time_point>(_Dur)) {\r\n                return false;\r\n            }\r\n\r\n            const _Leap_second_rep _Original_leap{_Leap};\r\n            if (_Leap == _Leap_second_rep::_File_time) {\r\n                _Leap =\r\n                    _Dur < file_clock::_Cutoff.time_since_epoch() ? _Leap_second_rep::_None : _Leap_second_rep::_All;\r\n            }\r\n\r\n            if (_Second > (_Leap == _Leap_second_rep::_All ? 60 : 59)) {\r\n                return false;\r\n            }\r\n\r\n            // A distinction has to be made here between clocks that always count 86,400 seconds/day (system_clock,\r\n            // tai_clock, and gps_clock) and ones that count leap seconds (utc_clock and, since 2018-06-01, file_clock).\r\n            // The correct tick count for the clocks that always count 86,400 seconds/day can be determined without\r\n            // knowing whether any leap seconds have occurred, and there aren't any invalid times due to negative leap\r\n            // second deletions.\r\n\r\n            if (_Leap == _Leap_second_rep::_All) {\r\n                if constexpr (!_Can_represent<_DurationType, seconds>()) {\r\n                    // Error if _Dur can't represent the adjustment below.\r\n                    return false;\r\n                } else {\r\n                    // It's possible that the parsed time doesn't exist because (a) _Seconds == 60 and there *isn't* a\r\n                    // leap second insertion or (b) _Seconds >= 59 and there *is* a leap second deletion.\r\n                    const auto& _Tzdb{_CHRONO get_tzdb()};\r\n\r\n                    const bool _Possible_insertion{_Second == 60};\r\n                    const sys_seconds _Target_sys_time{\r\n                        _CHRONO floor<seconds>(_Dur) - (_Possible_insertion ? seconds{1} : seconds{0})};\r\n                    const auto& _Ls_vector{_Tzdb.leap_seconds};\r\n                    const auto _It{_STD upper_bound(_Ls_vector.begin(), _Ls_vector.end(), _Target_sys_time)};\r\n                    const bool _Match_leap{_It != _Ls_vector.end() && *_It == _Target_sys_time + seconds{1}};\r\n\r\n                    if (_Match_leap) {\r\n                        if (!_It->_Positive()) { // negative leap second\r\n                            if (_Second >= 59) {\r\n                                return false;\r\n                            }\r\n                        }\r\n                    } else { // no leap second\r\n                        if (_Possible_insertion) {\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n                    const auto _Offset = _It == _Ls_vector.begin() ? seconds{0} : _STD _Prev_iter(_It)->_Elapsed();\r\n                    _Dur += _CHRONO duration_cast<_DurationType>(_Offset);\r\n\r\n                    if (_Original_leap == _Leap_second_rep::_File_time) {\r\n                        _Dur -= _CHRONO duration_cast<_DurationType>(\r\n                            filesystem::_File_time_clock::_Skipped_filetime_leap_seconds);\r\n                    }\r\n                }\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        _NODISCARD bool _Make_day(day& _Day_result) {\r\n            if (_Used_fields() == _F_day) {\r\n                _Day_result = day{static_cast<unsigned int>(*_Day)};\r\n                return true;\r\n            } else {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        _NODISCARD bool _Make_weekday(weekday& _Weekday_result) {\r\n            if (_Used_fields() == _F_wkday) {\r\n                _Weekday_result = weekday{static_cast<unsigned int>(*_Weekday)};\r\n                return true;\r\n            } else {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        _NODISCARD bool _Make_month(month& _Month_result) {\r\n            if (_Used_fields() == _F_mon) {\r\n                _Month_result = month{static_cast<unsigned int>(*_Month)};\r\n                return true;\r\n            } else {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        _NODISCARD bool _Make_month_day(month_day& _Month_day_result) {\r\n            if (_Day_of_year && !_Yday_to_month_day(*_Day_of_year, 0)) {\r\n                return false;\r\n            }\r\n\r\n            constexpr auto _Required = _F_mon | _F_day;\r\n            constexpr auto _Optional = _F_doy;\r\n            if (_Test_bits(_Used_fields(), _Required, _Optional)) {\r\n                _Month_day_result =\r\n                    month_day{month{static_cast<unsigned int>(*_Month)}, day{static_cast<unsigned int>(*_Day)}};\r\n                return true;\r\n            } else {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        _NODISCARD bool _Make_year(year& _Year_result) {\r\n            if (_Calculate_year_fields() && _Used_fields() == _F_year) {\r\n                _Year_result = year{*_Century + *_Two_dig_year};\r\n                return true;\r\n            } else {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        _NODISCARD bool _Make_year_month(year_month& _Year_month_result) {\r\n            if (_Calculate_year_fields() && _Used_fields() == (_F_mon | _F_year)) {\r\n                _Year_month_result =\r\n                    year_month{year{*_Century + *_Two_dig_year}, month{static_cast<unsigned int>(*_Month)}};\r\n                return true;\r\n            } else {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        _NODISCARD bool _Make_year_month_day(\r\n            year_month_day& _Year_month_day_result, const bool _For_time_point = false) {\r\n            const bool _Consistent   = _Calculate_year_fields() && _Calculate_ymd();\r\n            constexpr auto _Required = _F_day | _F_mon | _F_year;\r\n            auto _Optional           = _F_wkday | _F_doy;\r\n            if (_For_time_point) {\r\n                // These fields aren't used here, but they might be used later if converting to a time_point.\r\n                _Optional |= _F_sec | _F_min | _F_hr;\r\n            }\r\n\r\n            if (_Consistent && _Test_bits(_Used_fields(), _Required, _Optional)) {\r\n                _Year_month_day_result = year_month_day{year{*_Century + *_Two_dig_year},\r\n                    month{static_cast<unsigned int>(*_Month)}, day{static_cast<unsigned int>(*_Day)}};\r\n                return true;\r\n            } else {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        template <class _CharT, class _Traits>\r\n        _NODISCARD istreambuf_iterator<_CharT, _Traits> _Parse_time_field(istreambuf_iterator<_CharT, _Traits> _First,\r\n            ios_base& _Iosbase, ios_base::iostate& _State, const char _Flag, const char _Modifier,\r\n            const unsigned int _Width, const unsigned int _Subsecond_precision) {\r\n\r\n            const auto& _Ctype_fac = _STD use_facet<ctype<_CharT>>(_Iosbase.getloc());\r\n            const auto& _Time_fac  = _STD use_facet<time_get<_CharT>>(_Iosbase.getloc());\r\n            constexpr istreambuf_iterator<_CharT, _Traits> _Last{};\r\n\r\n            int _Val{0};\r\n            switch (_Flag) {\r\n            case 'a':\r\n            case 'A':\r\n                {\r\n                    tm _Tp;\r\n                    _Tp.tm_wday = _Invalid_time_field<int>;\r\n                    _First      = _Time_fac.get(_First, _Last, _Iosbase, _State, &_Tp, 'a');\r\n                    if (!_Update(_Weekday, _Tp.tm_wday)) {\r\n                        _State |= ios_base::failbit;\r\n                    }\r\n                    break;\r\n                }\r\n\r\n            case 'b':\r\n            case 'B':\r\n            case 'h':\r\n                {\r\n                    tm _Tp;\r\n                    _Tp.tm_mon = _Invalid_time_field<int>;\r\n                    _First     = _Time_fac.get(_First, _Last, _Iosbase, _State, &_Tp, 'b');\r\n                    if (_Tp.tm_mon == _Invalid_time_field<int> || !_Update(_Month, ++_Tp.tm_mon)) {\r\n                        _State |= ios_base::failbit;\r\n                    }\r\n                    break;\r\n                }\r\n\r\n            case 'C':\r\n                if (_Modifier != 'E') {\r\n                    _State |= _Get_int(_First, _Width == 0 ? 2u : _Width, _Val, _Ctype_fac);\r\n                    _Val *= 100;\r\n                } else {\r\n                    tm _Tp;\r\n                    _Tp.tm_year = _Invalid_time_field<int>;\r\n                    _First      = _Time_fac.get(_First, _Last, _Iosbase, _State, &_Tp, 'C', 'E');\r\n                    _Val        = _Tp.tm_year;\r\n                    if (_Tp.tm_year != _Invalid_time_field<int>) {\r\n                        _Val += 1900;\r\n                    }\r\n                }\r\n\r\n                if (!_Update(_Century, _Val)) {\r\n                    _State |= ios_base::failbit;\r\n                }\r\n                break;\r\n\r\n            case 'd':\r\n            case 'e':\r\n                if (_Modifier != 'O') {\r\n                    _State |= _Get_int(_First, _Width == 0 ? 2u : _Width, _Val, _Ctype_fac);\r\n                } else {\r\n                    tm _Tp;\r\n                    _Tp.tm_mday = _Invalid_time_field<int>;\r\n                    _First      = _Time_fac.get(_First, _Last, _Iosbase, _State, &_Tp, 'd', 'O');\r\n                    _Val        = _Tp.tm_mday;\r\n                }\r\n\r\n                if (!_Update(_Day, _Val)) {\r\n                    _State |= ios_base::failbit;\r\n                }\r\n                break;\r\n\r\n            case 'D':\r\n                _First = _Parse_time_field_restricted(_First, _Iosbase, _State, \"%m/%d/%y\");\r\n                break;\r\n\r\n            case 'F':\r\n                {\r\n                    // If modified with a width N, the width is applied to only %Y.\r\n                    _State |= _Get_int(_First, _Width == 0 ? 4u : _Width, _Val, _Ctype_fac);\r\n                    const auto _Year_parts = _Decompose_year(_Val);\r\n                    if (_Update(_Century, _Year_parts.first) && _Update(_Two_dig_year, _Year_parts.second)) {\r\n                        _First = _Parse_time_field_restricted(_First, _Iosbase, _State, \"-%m-%d\");\r\n                    } else {\r\n                        _State |= ios_base::failbit;\r\n                    }\r\n                    break;\r\n                }\r\n\r\n            case 'g':\r\n                _State |= _Get_int(_First, _Width == 0 ? 2u : _Width, _Val, _Ctype_fac);\r\n                if (!_Update(_Two_dig_iso_year, _Val)) {\r\n                    _State |= ios_base::failbit;\r\n                }\r\n                break;\r\n\r\n            case 'G':\r\n                {\r\n                    _State |= _Get_int(_First, _Width == 0 ? 4u : _Width, _Val, _Ctype_fac);\r\n                    const auto _Year_parts = _Decompose_year(_Val);\r\n                    if (!_Update(_Iso_year, _Val) || !_Update(_Two_dig_iso_year, _Year_parts.second)) {\r\n                        _State |= ios_base::failbit;\r\n                    }\r\n                    break;\r\n                }\r\n\r\n            case 'H':\r\n                if (_Modifier != 'O') {\r\n                    _State |= _Get_int(_First, _Width == 0 ? 2u : _Width, _Val, _Ctype_fac);\r\n                } else {\r\n                    tm _Tp;\r\n                    _Tp.tm_hour = _Invalid_time_field<int>;\r\n                    _First      = _Time_fac.get(_First, _Last, _Iosbase, _State, &_Tp, 'H', 'O');\r\n                    _Val        = _Tp.tm_hour;\r\n                }\r\n\r\n                if (!_Update(_Hour_24, _Val)\r\n                    || (_Val < 24\r\n                        && (!_Update(_Ampm, _Val >= 12 ? 1 : 0)\r\n                            || !_Update(_Hour_12, _CHRONO make12(hours{_Val}).count())))) {\r\n                    _State |= ios_base::failbit;\r\n                }\r\n                break;\r\n\r\n            case 'I':\r\n                if (_Modifier != 'O') {\r\n                    _State |= _Get_int(_First, _Width == 0 ? 2u : _Width, _Val, _Ctype_fac);\r\n                } else {\r\n                    tm _Tp;\r\n                    _Tp.tm_hour = _Invalid_time_field<int>;\r\n                    _First      = _Time_fac.get(_First, _Last, _Iosbase, _State, &_Tp, 'I', 'O');\r\n                    _Val        = (_Tp.tm_hour == 0) ? 12 : _Tp.tm_hour;\r\n                }\r\n\r\n                if (!_Update(_Hour_12, _Val)) {\r\n                    _State |= ios_base::failbit;\r\n                }\r\n                break;\r\n\r\n            case 'j':\r\n                _State |= _Get_int(_First, _Width == 0 ? 3u : _Width, _Val, _Ctype_fac);\r\n                if (!_Update(_Day_of_year, _Val)) {\r\n                    _State |= ios_base::failbit;\r\n                }\r\n                break;\r\n\r\n            case 'M':\r\n                if (_Modifier != 'O') {\r\n                    _State |= _Get_int(_First, _Width == 0 ? 2u : _Width, _Val, _Ctype_fac);\r\n                } else {\r\n                    tm _Tp;\r\n                    _Tp.tm_min = _Invalid_time_field<int>;\r\n                    _First     = _Time_fac.get(_First, _Last, _Iosbase, _State, &_Tp, 'M', 'O');\r\n                    _Val       = _Tp.tm_min;\r\n                }\r\n\r\n                if (!_Update(_Minute, _Val)) {\r\n                    _State |= ios_base::failbit;\r\n                }\r\n                break;\r\n\r\n            case 'm':\r\n                if (_Modifier != 'O') {\r\n                    _State |= _Get_int(_First, _Width == 0 ? 2u : _Width, _Val, _Ctype_fac);\r\n                } else {\r\n                    tm _Tp;\r\n                    _Initialize_time_point(_Tp);\r\n                    _First = _Time_fac.get(_First, _Last, _Iosbase, _State, &_Tp, 'm', 'O');\r\n                    _Val   = _Tp.tm_mon;\r\n                    if (_Tp.tm_mon != _Invalid_time_field<int>) {\r\n                        ++_Val;\r\n                    }\r\n                }\r\n\r\n                if (!_Update(_Month, _Val)) {\r\n                    _State |= ios_base::failbit;\r\n                }\r\n                break;\r\n\r\n            case 'p':\r\n                {\r\n                    tm _Tp;\r\n                    _Tp.tm_hour = 0;\r\n                    _First      = _Time_fac.get(_First, _Last, _Iosbase, _State, &_Tp, 'p');\r\n                    if (!_Update(_Ampm, _Tp.tm_hour == 0 ? 0 : 1)) {\r\n                        _State |= ios_base::failbit;\r\n                    }\r\n                    break;\r\n                }\r\n\r\n            case 'c':\r\n            case 'r':\r\n            case 'x':\r\n            case 'X':\r\n                {\r\n                    tm _Tp;\r\n                    _Initialize_time_point(_Tp);\r\n                    const bool _Full_year = (_Flag == 'c'); // 'x' reads two-digit year, 'r' and 'X' read times\r\n                    _First                = _Time_fac.get(_First, _Last, _Iosbase, _State, &_Tp, _Flag, _Modifier);\r\n                    if (!_Update_if_valid(_Tp, _Full_year)) {\r\n                        _State |= ios_base::failbit;\r\n                    }\r\n                    break;\r\n                }\r\n\r\n            case 'R':\r\n                _First = _Parse_time_field_restricted(_First, _Iosbase, _State, \"%H:%M\");\r\n                break;\r\n\r\n            case 'T':\r\n                _First = _Parse_time_field_restricted(_First, _Iosbase, _State, \"%H:%M:%S\", _Subsecond_precision);\r\n                break;\r\n\r\n            case 'S':\r\n                if (_Subsecond_precision == 0) {\r\n                    _State |= _Get_int(_First, _Width == 0 ? 2u : _Width, _Val, _Ctype_fac);\r\n                    if (!_Update(_Second, _Val)) {\r\n                        _State |= ios_base::failbit;\r\n                    }\r\n                } else {\r\n                    const auto& _Numpunct_fac = _STD use_facet<numpunct<_CharT>>(_Iosbase.getloc());\r\n                    _State |=\r\n                        _Get_fixed(_First, _Width == 0 ? 3 + _Subsecond_precision : _Width, _Ctype_fac, _Numpunct_fac);\r\n                }\r\n                break;\r\n\r\n            case 'u':\r\n            case 'w':\r\n                if (_Flag == 'w' && _Modifier == 'O') {\r\n                    tm _Tp;\r\n                    _Tp.tm_wday = _Invalid_time_field<int>;\r\n                    _First      = _Time_fac.get(_First, _Last, _Iosbase, _State, &_Tp, 'w', 'O');\r\n                    _Val        = _Tp.tm_wday;\r\n                } else {\r\n                    _State |= _Get_int(_First, _Width == 0 ? 1u : _Width, _Val, _Ctype_fac);\r\n                    if (_Flag == 'u') {\r\n                        // ISO weekday: [1,7], 7 == Sunday\r\n                        if (_Val == 7) {\r\n                            _Val = 0;\r\n                        } else if (_Val == 0) {\r\n                            _Val = 7; // out of range\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (!_Update(_Weekday, _Val)) {\r\n                    _State |= ios_base::failbit;\r\n                }\r\n                break;\r\n\r\n            case 'U':\r\n            case 'V':\r\n            case 'W':\r\n                {\r\n                    _State |= _Get_int(_First, _Width == 0 ? 2u : _Width, _Val, _Ctype_fac);\r\n                    auto& _Field{(_Flag == 'U') ? _Week_u : (_Flag == 'W' ? _Week_w : _Iso_week)};\r\n                    if (!_Update(_Field, _Val)) {\r\n                        _State |= ios_base::failbit;\r\n                    }\r\n                    break;\r\n                }\r\n\r\n            case 'y':\r\n                if (_Modifier == '\\0') {\r\n                    _State |= _Get_int(_First, _Width == 0 ? 2u : _Width, _Val, _Ctype_fac);\r\n                } else {\r\n                    tm _Tp;\r\n                    _Tp.tm_year = _Invalid_time_field<int>;\r\n                    _First      = _Time_fac.get(_First, _Last, _Iosbase, _State, &_Tp, 'y', _Modifier);\r\n                    if (_Modifier == 'E') {\r\n                        _Val = _Tp.tm_year + 1900; // offset from %EC base year\r\n                    } else {\r\n                        const auto _Year_parts = _Decompose_year(_Tp.tm_year);\r\n                        _Val                   = _Year_parts.second;\r\n                    }\r\n                }\r\n\r\n                if (!_Update(_Two_dig_year, _Val)) {\r\n                    _State |= ios_base::failbit;\r\n                }\r\n                break;\r\n\r\n            case 'Y':\r\n                {\r\n                    if (_Modifier == 'E') {\r\n                        tm _Tp;\r\n                        _Tp.tm_year = _Invalid_time_field<int>;\r\n                        _First      = _Time_fac.get(_First, _Last, _Iosbase, _State, &_Tp, 'Y', 'E');\r\n                        _Val        = _Tp.tm_year + 1900;\r\n                    } else {\r\n                        _State |= _Get_int(_First, _Width == 0 ? 4u : _Width, _Val, _Ctype_fac);\r\n                    }\r\n\r\n                    const auto _Year_parts = _Decompose_year(_Val);\r\n                    if (!_Update(_Century, _Year_parts.first) || !_Update(_Two_dig_year, _Year_parts.second)) {\r\n                        _State |= ios_base::failbit;\r\n                    }\r\n                    break;\r\n                }\r\n\r\n            case 'z':\r\n                _State |= _Get_tz_offset(_First, _Ctype_fac, _Modifier == 'E' || _Modifier == 'O', _Val);\r\n                if (!_Update(_Utc_offset, _Val)) {\r\n                    _State |= ios_base::failbit;\r\n                }\r\n                break;\r\n\r\n            case 'Z':\r\n                {\r\n                    string _Name;\r\n                    _State |= _Get_tz_name(_First, _Ctype_fac, _Name);\r\n                    if (!_Update(_Tz_name, _Name)) {\r\n                        _State |= ios_base::failbit;\r\n                    }\r\n                    break;\r\n                }\r\n\r\n            default:\r\n                // Invalid flag\r\n                _State |= ios_base::failbit;\r\n                break;\r\n            }\r\n\r\n            return _First;\r\n        }\r\n\r\n        template <class _CharT, class _Traits>\r\n        _NODISCARD istreambuf_iterator<_CharT, _Traits> _Parse_time_field_restricted(\r\n            istreambuf_iterator<_CharT, _Traits> _First, ios_base& _Iosbase, ios_base::iostate& _State,\r\n            const char* _Fmt, const unsigned int _Subsecond_precision = 0) {\r\n            // Parses a restricted format string. It generally doesn't handle anything parsed outside of\r\n            // _Parse_time_field:\r\n            //   (a) any whitespace (' ', %n, %t)\r\n            //   (b) %% literal (other literals are parsed, however)\r\n            //   (c) E or O modifiers\r\n            //   (d) width parameter\r\n            // It also assumes a valid format string, specifically that '%' is always followed by a flag.\r\n            const auto& _Ctype_fac{_STD use_facet<ctype<_CharT>>(_Iosbase.getloc())};\r\n            constexpr istreambuf_iterator<_CharT, _Traits> _Last{};\r\n\r\n            while (*_Fmt != '\\0' && (_State & ~ios_base::eofbit) == ios_base::goodbit) {\r\n                if (_First == _Last) {\r\n                    _State |= ios_base::failbit | ios_base::eofbit;\r\n                    break;\r\n                } else if (*_Fmt == '%') {\r\n                    _First = _Parse_time_field(_First, _Iosbase, _State, *++_Fmt, '\\0', 0, _Subsecond_precision);\r\n                } else if (_Ctype_fac.narrow(*_First++) != *_Fmt) {\r\n                    _State |= ios_base::failbit;\r\n                }\r\n                ++_Fmt;\r\n            }\r\n            return _First;\r\n        }\r\n\r\n        template <class _CharT, class _Traits>\r\n        _NODISCARD ios_base::iostate _Get_fixed(istreambuf_iterator<_CharT, _Traits>& _First, unsigned int _Width,\r\n            const ctype<_CharT>& _Ctype_fac, const numpunct<_CharT>& _Numpunct_fac) {\r\n            constexpr istreambuf_iterator<_CharT, _Traits> _Last{};\r\n\r\n            while (_First != _Last && _Ctype_fac.is(ctype_base::space, *_First) && _Width > 0) {\r\n                ++_First;\r\n                --_Width;\r\n            }\r\n\r\n            int _Second_        = 0;\r\n            int64_t _Subsecond_ = 0;\r\n            int64_t _Multiplier = _SubsecondType::period::den;\r\n            bool _Found_point   = false;\r\n            bool _Found_digit   = false;\r\n\r\n            while (_First != _Last && _Width > 0 && _Multiplier >= 10) {\r\n                const auto _Ch = *_First;\r\n                if (_Ch == _Numpunct_fac.decimal_point() && !_Found_point) {\r\n                    _Found_point = true;\r\n                } else if (_Ctype_fac.is(ctype_base::digit, _Ch)) {\r\n                    _Found_digit      = true;\r\n                    const auto _Digit = _Ctype_fac.narrow(_Ch) - '0';\r\n                    if (_Found_point) {\r\n                        _Multiplier /= 10;\r\n                        _Subsecond_ += _Digit * _Multiplier;\r\n                    } else {\r\n                        if (_Second_ > ((numeric_limits<int>::max)() - _Digit) / 10) {\r\n                            return ios_base::failbit;\r\n                        }\r\n\r\n                        _Second_ = _Second_ * 10 + _Digit;\r\n                    }\r\n                } else {\r\n                    break;\r\n                }\r\n                ++_First;\r\n                --_Width;\r\n            }\r\n\r\n            ios_base::iostate _State = ios_base::goodbit;\r\n            if (_First == _Last) {\r\n                _State |= ios_base::eofbit;\r\n            }\r\n\r\n            if (!(_Found_digit && _Update(_Second, _Second_) && _Update(_Subsecond, _Subsecond_))) {\r\n                _State |= ios_base::failbit;\r\n            }\r\n\r\n            return _State;\r\n        }\r\n\r\n        template <class _CharT, class _Traits>\r\n        _NODISCARD ios_base::iostate _Get_int(istreambuf_iterator<_CharT, _Traits>& _First, unsigned int _Width,\r\n            int& _Val, const ctype<_CharT>& _Ctype_fac) {\r\n            constexpr istreambuf_iterator<_CharT, _Traits> _Last{};\r\n\r\n            while (_First != _Last && _Ctype_fac.is(ctype_base::space, *_First) && _Width > 0) {\r\n                ++_First;\r\n                --_Width;\r\n            }\r\n\r\n            char _Ac[_Max_int_dig];\r\n            char* _Ptr = _Ac;\r\n            if (_First != _Last && _Width > 0) {\r\n                const char _Ch = _Ctype_fac.narrow(*_First);\r\n                if (_Ch == '+' || _Ch == '-') { // copy sign\r\n                    *_Ptr++ = _Ch;\r\n                    ++_First;\r\n                    --_Width;\r\n                }\r\n            }\r\n\r\n            bool _Has_leading_zero = false;\r\n            while (_First != _Last && _Width > 0 && _Ctype_fac.narrow(*_First) == '0') { // strip leading zeros\r\n                ++_First;\r\n                --_Width;\r\n                _Has_leading_zero = true;\r\n            }\r\n\r\n            if (_Has_leading_zero) {\r\n                *_Ptr++ = '0';\r\n            }\r\n\r\n            char _Ch;\r\n            while (_First != _Last && _Width > 0 && '0' <= (_Ch = _Ctype_fac.narrow(*_First))\r\n                   && _Ch <= '9') { // copy digits\r\n                *_Ptr = _Ch;\r\n                if (_Ptr < _STD cend(_Ac)) {\r\n                    ++_Ptr; // drop trailing digits if already too large\r\n                }\r\n                ++_First;\r\n                --_Width;\r\n            }\r\n\r\n            *_Ptr      = '\\0';\r\n            int _Errno = 0;\r\n            char* _Ep;\r\n            const long _Ans          = _CSTD _Stolx(_Ac, &_Ep, 10, &_Errno);\r\n            ios_base::iostate _State = ios_base::goodbit;\r\n\r\n            if (_First == _Last) {\r\n                _State |= ios_base::eofbit;\r\n            }\r\n\r\n            if (_Ep == _Ac || _Errno != 0) {\r\n                _State |= ios_base::failbit; // bad conversion\r\n            } else {\r\n                _Val = _Ans; // store valid result\r\n            }\r\n\r\n            return _State;\r\n        }\r\n\r\n        template <class _CharT, class _Traits>\r\n        _NODISCARD ios_base::iostate _Get_tz_offset(istreambuf_iterator<_CharT, _Traits>& _First,\r\n            const ctype<_CharT>& _Ctype_fac, const bool _Is_modified, int& _Offset) {\r\n            constexpr istreambuf_iterator<_CharT, _Traits> _Last{};\r\n            if (_First == _Last) {\r\n                return ios_base::eofbit;\r\n            }\r\n\r\n            bool _Negative = false;\r\n            switch (_Ctype_fac.narrow(*_First)) {\r\n            case '-':\r\n                _Negative = true;\r\n                [[fallthrough]];\r\n            case '+':\r\n                ++_First;\r\n                break;\r\n            default:\r\n                break;\r\n            }\r\n\r\n            // For a regular offset hh[mm], simply read four digits, with the option of an EOF or non-digit after\r\n            // reading two. The modified form h[h][:mm] is similar, except for the following points:\r\n            //  (a) an EOF or non-digit is allowable after reading *one* digit, not two.\r\n            //  (b) after reading one digit, another optional digit keeps us in the same state, except for decrementing\r\n            //      the number of optional digits allowed. In this state, reading a ':' allows parsing to continue.\r\n\r\n            int _Tz_hours        = 0;\r\n            int _Tz_minutes      = 0;\r\n            int _Optional_digits = 1;\r\n            for (int _Count = 0; _Count < 4; ++_Count) {\r\n                const bool _Allow_match_fail{_Count == (_Is_modified ? 1 : 2)};\r\n\r\n                if (_First == _Last) {\r\n                    if (_Allow_match_fail) {\r\n                        break;\r\n                    } else {\r\n                        return ios_base::eofbit | ios_base::failbit;\r\n                    }\r\n                }\r\n\r\n                const char _Ch       = _Ctype_fac.narrow(*_First++);\r\n                const bool _Is_digit = ('0' <= _Ch && _Ch <= '9');\r\n                if (_Is_modified && _Count == 1) {\r\n                    if (_Ch == ':') {\r\n                        continue;\r\n                    } else if (_Is_digit && _Optional_digits > 0) {\r\n                        _Tz_hours = 10 * _Tz_hours + (_Ch - '0');\r\n                        --_Optional_digits;\r\n                        --_Count;\r\n                    } else {\r\n                        if (_Allow_match_fail) {\r\n                            break;\r\n                        } else {\r\n                            return ios_base::failbit;\r\n                        }\r\n                    }\r\n                } else if (_Is_digit) {\r\n                    auto& _Part = _Count < 2 ? _Tz_hours : _Tz_minutes;\r\n                    _Part       = 10 * _Part + (_Ch - '0');\r\n                } else {\r\n                    if (_Allow_match_fail) {\r\n                        break;\r\n                    } else {\r\n                        return ios_base::failbit;\r\n                    }\r\n                }\r\n            }\r\n\r\n            _Offset = 60 * _Tz_hours + _Tz_minutes;\r\n            if (_Negative) {\r\n                _Offset = -_Offset;\r\n            }\r\n            return ios_base::goodbit;\r\n        }\r\n\r\n        template <class _CharT, class _Traits>\r\n        _NODISCARD ios_base::iostate _Get_tz_name(\r\n            istreambuf_iterator<_CharT, _Traits>& _First, const ctype<_CharT>& _Ctype_fac, string& _Tz_name) {\r\n            constexpr istreambuf_iterator<_CharT, _Traits> _Last{};\r\n            _Tz_name.clear();\r\n            while (_First != _Last) {\r\n                const char _Ch{_Ctype_fac.narrow(*_First)};\r\n                if (_STD isalnum(static_cast<unsigned char>(_Ch)) || _Ch == '_' || _Ch == '/' || _Ch == '-'\r\n                    || _Ch == '+') {\r\n                    _Tz_name.push_back(_Ch);\r\n                    ++_First;\r\n                } else {\r\n                    break;\r\n                }\r\n            }\r\n            return _First == _Last ? ios_base::eofbit : ios_base::goodbit;\r\n        }\r\n\r\n        template <class _CharT, class _Traits, class _Alloc = allocator<_CharT>>\r\n        _Time_parse_fields(basic_istream<_CharT, _Traits>& _Istr, const _CharT* _FmtFirst,\r\n            basic_string<_CharT, _Traits, _Alloc>* _Abbrev = nullptr, minutes* _Offset = nullptr,\r\n            unsigned int _Subsecond_precision = 0) {\r\n\r\n            using _Myis = basic_istream<_CharT, _Traits>;\r\n\r\n            const auto& _Ctype_fac       = _STD use_facet<ctype<_CharT>>(_Istr.getloc());\r\n            ios_base::iostate _State     = ios_base::goodbit;\r\n            const _CharT* const _FmtLast = _FmtFirst + _Traits::length(_FmtFirst);\r\n            const typename _Myis::sentry _Ok{_Istr, true};\r\n\r\n            istreambuf_iterator _First{_Istr};\r\n            constexpr decltype(_First) _Last{};\r\n\r\n            if (_Ok) {\r\n                _TRY_IO_BEGIN\r\n                for (; _FmtFirst != _FmtLast && (_State & ~ios_base::eofbit) == ios_base::goodbit; ++_FmtFirst) {\r\n                    if (_First == _Last) {\r\n                        // EOF is not an error if the remaining flags can match zero characters.\r\n                        for (; _FmtFirst != _FmtLast; ++_FmtFirst) {\r\n                            char _Flag{};\r\n                            if (_Ctype_fac.is(ctype_base::space, *_FmtFirst)) {\r\n                                _Flag = ' ';\r\n                            } else {\r\n                                if (_Ctype_fac.narrow(*_FmtFirst) == '%' && ++_FmtFirst != _FmtLast) {\r\n                                    _Flag = _Ctype_fac.narrow(*_FmtFirst);\r\n                                }\r\n                            }\r\n\r\n                            if (_Flag != ' ' && _Flag != 't') {\r\n                                _State |= ios_base::failbit | ios_base::eofbit;\r\n                                break;\r\n                            }\r\n                        }\r\n                        break;\r\n                    } else if (_Ctype_fac.narrow(*_FmtFirst) != '%') { // match literal element\r\n                        if (_Ctype_fac.is(ctype_base::space, *_FmtFirst)) {\r\n                            while (_First != _Last && _Ctype_fac.is(ctype_base::space, *_First)) {\r\n                                ++_First;\r\n                            }\r\n                        } else if (*_First == *_FmtFirst) {\r\n                            ++_First;\r\n                        } else {\r\n                            _State |= ios_base::failbit; // bad literal match\r\n                        }\r\n                    } else if (++_FmtFirst == _FmtLast) { // not enough for a valid flag\r\n                        _State |= ios_base::failbit;\r\n                    } else { // get flag after %\r\n                        char _Flag          = _Ctype_fac.narrow(*_FmtFirst);\r\n                        char _Modifier      = '\\0';\r\n                        unsigned int _Width = 0;\r\n\r\n                        if (_Flag == 'E' || _Flag == 'O') {\r\n                            if (++_FmtFirst == _FmtLast) {\r\n                                _State |= ios_base::failbit;\r\n                                break;\r\n                            }\r\n                            _Modifier = _STD exchange(_Flag, _Ctype_fac.narrow(*_FmtFirst));\r\n                        } else if ('0' <= _Flag && _Flag <= '9') {\r\n                            _Width = static_cast<unsigned int>(_Flag - '0');\r\n                            while (++_FmtFirst != _FmtLast && _Ctype_fac.is(ctype_base::digit, *_FmtFirst)) {\r\n                                const auto _Digit = static_cast<unsigned int>(_Ctype_fac.narrow(*_FmtFirst) - '0');\r\n                                if (_Width > ((numeric_limits<unsigned int>::max)() - _Digit) / 10) {\r\n                                    _State |= ios_base::failbit;\r\n                                    break;\r\n                                }\r\n                                _Width = 10 * _Width + _Digit;\r\n                            }\r\n                            if (_FmtFirst == _FmtLast) {\r\n                                _State |= ios_base::failbit;\r\n                                break;\r\n                            }\r\n                            _Flag = _Ctype_fac.narrow(*_FmtFirst);\r\n                        }\r\n\r\n                        switch (_Flag) {\r\n                        case 'n': // exactly one space\r\n                            if (!_Ctype_fac.is(ctype_base::space, *_First++)) {\r\n                                _State |= ios_base::failbit;\r\n                            }\r\n                            break;\r\n\r\n                        case 't': // zero or one space\r\n                            if (_Ctype_fac.is(ctype_base::space, *_First)) {\r\n                                ++_First;\r\n                            }\r\n                            break;\r\n\r\n                        case '%':\r\n                            if (_Ctype_fac.narrow(*_First++) != '%') {\r\n                                _State |= ios_base::failbit;\r\n                            }\r\n                            break;\r\n\r\n                        default:\r\n                            _First = _Parse_time_field(_First, _Istr, _State, _Flag, _Modifier, _Width,\r\n                                _Subsecond_precision); // convert a single field\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                _CATCH_IO_(ios_base, _Istr)\r\n            }\r\n\r\n            if (!_Is_complete()) {\r\n                _State |= ios_base::failbit;\r\n            }\r\n\r\n            if (!(_State & ios_base::failbit)) {\r\n                if (_Offset != nullptr && _Utc_offset) {\r\n                    *_Offset = minutes{*_Utc_offset};\r\n                }\r\n\r\n                if (_Abbrev != nullptr && _Tz_name) {\r\n                    if constexpr (is_same_v<decltype(_Abbrev), string*>) {\r\n                        *_Abbrev = _STD move(*_Tz_name);\r\n                    } else {\r\n                        _Abbrev->clear();\r\n                        for (const char& _Ch : *_Tz_name) {\r\n                            _Abbrev->push_back(_Ctype_fac.widen(_Ch));\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            _Istr.setstate(_State);\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Rep, class _Period, class _Alloc = allocator<_CharT>>\r\n    basic_istream<_CharT, _Traits>& from_stream(basic_istream<_CharT, _Traits>& _Istr, const _CharT* _Fmt,\r\n        duration<_Rep, _Period>& _Duration, basic_string<_CharT, _Traits, _Alloc>* _Abbrev = nullptr,\r\n        minutes* _Offset = nullptr) {\r\n        _Time_parse_fields _Time{_Istr, _Fmt, _Abbrev, _Offset, hh_mm_ss<duration<_Rep, _Period>>::fractional_width};\r\n        if (_Istr && !_Time._Make_duration(_Duration)) {\r\n            _Istr.setstate(ios_base::failbit);\r\n        }\r\n        return _Istr;\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Alloc = allocator<_CharT>>\r\n    basic_istream<_CharT, _Traits>& from_stream(basic_istream<_CharT, _Traits>& _Istr, const _CharT* _Fmt, weekday& _Wd,\r\n        basic_string<_CharT, _Traits, _Alloc>* _Abbrev = nullptr, minutes* _Offset = nullptr) {\r\n        _Time_parse_fields _Time{_Istr, _Fmt, _Abbrev, _Offset};\r\n        if (_Istr && !_Time._Make_weekday(_Wd)) {\r\n            _Istr.setstate(ios_base::failbit);\r\n        }\r\n        return _Istr;\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Alloc = allocator<_CharT>>\r\n    basic_istream<_CharT, _Traits>& from_stream(basic_istream<_CharT, _Traits>& _Istr, const _CharT* _Fmt, day& _Day,\r\n        basic_string<_CharT, _Traits, _Alloc>* _Abbrev = nullptr, minutes* _Offset = nullptr) {\r\n        _Time_parse_fields _Time{_Istr, _Fmt, _Abbrev, _Offset};\r\n        if (_Istr && !_Time._Make_day(_Day)) {\r\n            _Istr.setstate(ios_base::failbit);\r\n        }\r\n        return _Istr;\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Alloc = allocator<_CharT>>\r\n    basic_istream<_CharT, _Traits>& from_stream(basic_istream<_CharT, _Traits>& _Istr, const _CharT* _Fmt,\r\n        month& _Month, basic_string<_CharT, _Traits, _Alloc>* _Abbrev = nullptr, minutes* _Offset = nullptr) {\r\n        _Time_parse_fields _Time{_Istr, _Fmt, _Abbrev, _Offset};\r\n        if (_Istr && !_Time._Make_month(_Month)) {\r\n            _Istr.setstate(ios_base::failbit);\r\n        }\r\n        return _Istr;\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Alloc = allocator<_CharT>>\r\n    basic_istream<_CharT, _Traits>& from_stream(basic_istream<_CharT, _Traits>& _Istr, const _CharT* _Fmt,\r\n        month_day& _Md, basic_string<_CharT, _Traits, _Alloc>* _Abbrev = nullptr, minutes* _Offset = nullptr) {\r\n        _Time_parse_fields _Time{_Istr, _Fmt, _Abbrev, _Offset};\r\n        if (_Istr && !_Time._Make_month_day(_Md)) {\r\n            _Istr.setstate(ios_base::failbit);\r\n        }\r\n        return _Istr;\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Alloc = allocator<_CharT>>\r\n    basic_istream<_CharT, _Traits>& from_stream(basic_istream<_CharT, _Traits>& _Istr, const _CharT* _Fmt, year& _Year,\r\n        basic_string<_CharT, _Traits, _Alloc>* _Abbrev = nullptr, minutes* _Offset = nullptr) {\r\n        _Time_parse_fields _Time{_Istr, _Fmt, _Abbrev, _Offset};\r\n        if (_Istr && !_Time._Make_year(_Year)) {\r\n            _Istr.setstate(ios_base::failbit);\r\n        }\r\n        return _Istr;\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Alloc = allocator<_CharT>>\r\n    basic_istream<_CharT, _Traits>& from_stream(basic_istream<_CharT, _Traits>& _Istr, const _CharT* _Fmt,\r\n        year_month& _Ym, basic_string<_CharT, _Traits, _Alloc>* _Abbrev = nullptr, minutes* _Offset = nullptr) {\r\n        _Time_parse_fields _Time{_Istr, _Fmt, _Abbrev, _Offset};\r\n        if (_Istr && !_Time._Make_year_month(_Ym)) {\r\n            _Istr.setstate(ios_base::failbit);\r\n        }\r\n        return _Istr;\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Alloc = allocator<_CharT>>\r\n    basic_istream<_CharT, _Traits>& from_stream(basic_istream<_CharT, _Traits>& _Istr, const _CharT* _Fmt,\r\n        year_month_day& _Ymd, basic_string<_CharT, _Traits, _Alloc>* _Abbrev = nullptr, minutes* _Offset = nullptr) {\r\n        _Time_parse_fields _Time{_Istr, _Fmt, _Abbrev, _Offset};\r\n        if (_Istr && !_Time._Make_year_month_day(_Ymd)) {\r\n            _Istr.setstate(ios_base::failbit);\r\n        }\r\n        return _Istr;\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Duration, class _Alloc = allocator<_CharT>>\r\n    basic_istream<_CharT, _Traits>& from_stream(basic_istream<_CharT, _Traits>& _Istr, const _CharT* _Fmt,\r\n        utc_time<_Duration>& _Tp, basic_string<_CharT, _Traits, _Alloc>* _Abbrev = nullptr,\r\n        minutes* _Offset = nullptr) {\r\n        constexpr auto _Subsecond_precision{hh_mm_ss<_Duration>::fractional_width};\r\n        _Time_parse_fields _Time{_Istr, _Fmt, _Abbrev, _Offset, _Subsecond_precision};\r\n        _Duration _Dur;\r\n        if (_Istr && _Time._Make_time_point(_Dur, _Time_parse_fields::_Leap_second_rep::_All)) {\r\n            _Tp = utc_time<_Duration>{_Dur};\r\n        } else {\r\n            _Istr.setstate(ios_base::failbit);\r\n        }\r\n        return _Istr;\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Duration, class _Alloc = allocator<_CharT>>\r\n    basic_istream<_CharT, _Traits>& from_stream(basic_istream<_CharT, _Traits>& _Istr, const _CharT* _Fmt,\r\n        sys_time<_Duration>& _Tp, basic_string<_CharT, _Traits, _Alloc>* _Abbrev = nullptr,\r\n        minutes* _Offset = nullptr) {\r\n        constexpr auto _Subsecond_precision{hh_mm_ss<_Duration>::fractional_width};\r\n        _Time_parse_fields _Time{_Istr, _Fmt, _Abbrev, _Offset, _Subsecond_precision};\r\n        _Duration _Dur;\r\n        if (_Istr && _Time._Make_time_point(_Dur, _Time_parse_fields::_Leap_second_rep::_None)) {\r\n            _Tp = sys_time<_Duration>{_Dur};\r\n        } else {\r\n            _Istr.setstate(ios_base::failbit);\r\n        }\r\n        return _Istr;\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Duration, class _Alloc = allocator<_CharT>>\r\n    basic_istream<_CharT, _Traits>& from_stream(basic_istream<_CharT, _Traits>& _Istr, const _CharT* _Fmt,\r\n        tai_time<_Duration>& _Tp, basic_string<_CharT, _Traits, _Alloc>* _Abbrev = nullptr,\r\n        minutes* _Offset = nullptr) {\r\n        constexpr auto _Subsecond_precision{hh_mm_ss<_Duration>::fractional_width};\r\n        _Time_parse_fields _Time{_Istr, _Fmt, _Abbrev, _Offset, _Subsecond_precision};\r\n        _Duration _Dur;\r\n        if (_Istr && _Time._Make_time_point(_Dur, _Time_parse_fields::_Leap_second_rep::_None)) {\r\n            _Tp = tai_time<_Duration>{_Dur + _CHRONO duration_cast<_Duration>(days{4383})};\r\n        } else {\r\n            _Istr.setstate(ios_base::failbit);\r\n        }\r\n        return _Istr;\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Duration, class _Alloc = allocator<_CharT>>\r\n    basic_istream<_CharT, _Traits>& from_stream(basic_istream<_CharT, _Traits>& _Istr, const _CharT* _Fmt,\r\n        gps_time<_Duration>& _Tp, basic_string<_CharT, _Traits, _Alloc>* _Abbrev = nullptr,\r\n        chrono::minutes* _Offset = nullptr) {\r\n        constexpr auto _Subsecond_precision{hh_mm_ss<_Duration>::fractional_width};\r\n        _Time_parse_fields _Time{_Istr, _Fmt, _Abbrev, _Offset, _Subsecond_precision};\r\n        _Duration _Dur;\r\n        if (_Istr && _Time._Make_time_point(_Dur, _Time_parse_fields::_Leap_second_rep::_None)) {\r\n            _Tp = gps_time<_Duration>{_Dur - _CHRONO duration_cast<_Duration>(days{3657})};\r\n        } else {\r\n            _Istr.setstate(ios_base::failbit);\r\n        }\r\n        return _Istr;\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Duration, class _Alloc = allocator<_CharT>>\r\n    basic_istream<_CharT, _Traits>& from_stream(basic_istream<_CharT, _Traits>& _Istr, const _CharT* _Fmt,\r\n        file_time<_Duration>& _Tp, basic_string<_CharT, _Traits, _Alloc>* _Abbrev = nullptr,\r\n        chrono::minutes* _Offset = nullptr) {\r\n        constexpr auto _Subsecond_precision{hh_mm_ss<_Duration>::fractional_width};\r\n        _Time_parse_fields _Time{_Istr, _Fmt, _Abbrev, _Offset, _Subsecond_precision};\r\n        _Duration _Dur;\r\n        if (_Istr && _Time._Make_time_point(_Dur, _Time_parse_fields::_Leap_second_rep::_File_time)) {\r\n            constexpr auto _File_clock_adj{_CHRONO duration_cast<_Duration>(\r\n                filesystem::_File_time_clock::duration{filesystem::__std_fs_file_time_epoch_adjustment})};\r\n            _Tp = file_time<_Duration>{_Dur} + _File_clock_adj;\r\n        } else {\r\n            _Istr.setstate(ios_base::failbit);\r\n        }\r\n        return _Istr;\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Duration, class _Alloc = allocator<_CharT>>\r\n    basic_istream<_CharT, _Traits>& from_stream(basic_istream<_CharT, _Traits>& _Istr, const _CharT* _Fmt,\r\n        local_time<_Duration>& _Tp, basic_string<_CharT, _Traits, _Alloc>* _Abbrev = nullptr,\r\n        minutes* _Offset = nullptr) {\r\n        constexpr auto _Subsecond_precision{hh_mm_ss<_Duration>::fractional_width};\r\n        _Time_parse_fields _Time{_Istr, _Fmt, _Abbrev, _Offset, _Subsecond_precision};\r\n        // *_Offset is not subtracted from local_time, see N4950 [time.clock.local]/4.\r\n        _Time._Utc_offset.reset();\r\n        _Duration _Dur;\r\n        if (_Istr && _Time._Make_time_point(_Dur, _Time_parse_fields::_Leap_second_rep::_None)) {\r\n            _Tp = local_time<_Duration>{_Dur};\r\n        } else {\r\n            _Istr.setstate(ios_base::failbit);\r\n        }\r\n        return _Istr;\r\n    }\r\n\r\n    namespace _From_stream_adl_only {\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1681199\r\n        void from_stream() = delete; // Block unqualified name lookup\r\n#else // ^^^ no workaround / workaround vvv\r\n        void from_stream();\r\n#endif // ^^^ workaround ^^^\r\n\r\n        template <class _Parsable, class _CharT, class _Traits, class... _Rest>\r\n        concept _Can_from_stream = requires(\r\n            basic_istream<_CharT, _Traits>& __istr, const _CharT* __s, _Parsable& __parsed, _Rest&&... __rest_args) {\r\n            from_stream(__istr, +__s, __parsed, _STD forward<_Rest>(__rest_args)...); // intentional ADL\r\n        };\r\n    } // namespace _From_stream_adl_only\r\n\r\n    using _From_stream_adl_only::_Can_from_stream;\r\n\r\n    template <class _CharT, class _Traits, class _Alloc, class _Parsable>\r\n    struct _Time_parse_iomanip_c_str {\r\n        _Time_parse_iomanip_c_str(const _CharT* _Fmt_, _Parsable& _Tp_,\r\n            basic_string<_CharT, _Traits, _Alloc>* _Abbrev_ = nullptr, minutes* _Offset_ = nullptr)\r\n            : _Fmt{_Fmt_}, _Tp{_Tp_}, _Abbrev{_Abbrev_}, _Offset{_Offset_} {}\r\n\r\n        _Time_parse_iomanip_c_str(_Time_parse_iomanip_c_str&&) = delete;\r\n\r\n        friend basic_istream<_CharT, _Traits>& operator>>(\r\n            basic_istream<_CharT, _Traits>& _Is, _Time_parse_iomanip_c_str&& _Tpi) {\r\n            using _From_stream_adl_only::from_stream;\r\n            from_stream(_Is, _Tpi._Fmt, _Tpi._Tp, _Tpi._Abbrev, _Tpi._Offset); // intentional ADL\r\n            return _Is;\r\n        }\r\n\r\n        const _CharT* _Fmt;\r\n        _Parsable& _Tp;\r\n        basic_string<_CharT, _Traits, _Alloc>* _Abbrev;\r\n        minutes* _Offset;\r\n    };\r\n\r\n    template <class _CharT, class _Traits, class _Alloc, class _Parsable>\r\n    struct _Time_parse_iomanip {\r\n        _Time_parse_iomanip(const basic_string<_CharT, _Traits, _Alloc>& _Fmt_, _Parsable& _Tp_,\r\n            basic_string<_CharT, _Traits, _Alloc>* _Abbrev_ = nullptr, minutes* _Offset_ = nullptr)\r\n            : _Fmt{_Fmt_}, _Tp{_Tp_}, _Abbrev{_Abbrev_}, _Offset{_Offset_} {}\r\n\r\n        _Time_parse_iomanip(_Time_parse_iomanip&&) = delete;\r\n\r\n        friend basic_istream<_CharT, _Traits>& operator>>(\r\n            basic_istream<_CharT, _Traits>& _Is, _Time_parse_iomanip&& _Tpi) {\r\n            using _From_stream_adl_only::from_stream;\r\n            from_stream(_Is, _Tpi._Fmt.c_str(), _Tpi._Tp, _Tpi._Abbrev, _Tpi._Offset); // intentional ADL\r\n            return _Is;\r\n        }\r\n\r\n        const basic_string<_CharT, _Traits, _Alloc>& _Fmt;\r\n        _Parsable& _Tp;\r\n        basic_string<_CharT, _Traits, _Alloc>* _Abbrev;\r\n        minutes* _Offset;\r\n    };\r\n\r\n    _EXPORT_STD template <class _CharT, _Can_from_stream<_CharT, char_traits<_CharT>> _Parsable>\r\n    _NODISCARD auto parse(const _CharT* _Fmt, _Parsable& _Tp) {\r\n        return _Time_parse_iomanip_c_str<_CharT, char_traits<_CharT>, allocator<_CharT>, _Parsable>{_Fmt, _Tp};\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Alloc, _Can_from_stream<_CharT, _Traits> _Parsable>\r\n    _NODISCARD auto parse(const basic_string<_CharT, _Traits, _Alloc>& _Fmt, _Parsable& _Tp) {\r\n        return _Time_parse_iomanip{_Fmt, _Tp};\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Alloc,\r\n        _Can_from_stream<_CharT, _Traits, basic_string<_CharT, _Traits, _Alloc>*> _Parsable>\r\n    _NODISCARD auto parse(const _CharT* _Fmt, _Parsable& _Tp, basic_string<_CharT, _Traits, _Alloc>& _Abbrev) {\r\n        return _Time_parse_iomanip_c_str{_Fmt, _Tp, _STD addressof(_Abbrev)};\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Alloc,\r\n        _Can_from_stream<_CharT, _Traits, basic_string<_CharT, _Traits, _Alloc>*> _Parsable>\r\n    _NODISCARD auto parse(const basic_string<_CharT, _Traits, _Alloc>& _Fmt, _Parsable& _Tp,\r\n        basic_string<_CharT, _Traits, _Alloc>& _Abbrev) {\r\n        return _Time_parse_iomanip{_Fmt, _Tp, _STD addressof(_Abbrev)};\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT,\r\n        _Can_from_stream<_CharT, char_traits<_CharT>, basic_string<_CharT>*, minutes*> _Parsable>\r\n    _NODISCARD auto parse(const _CharT* _Fmt, _Parsable& _Tp, minutes& _Offset) {\r\n        return _Time_parse_iomanip_c_str{_Fmt, _Tp, static_cast<basic_string<_CharT>*>(nullptr), &_Offset};\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Alloc,\r\n        _Can_from_stream<_CharT, _Traits, basic_string<_CharT, _Traits, _Alloc>*, minutes*> _Parsable>\r\n    _NODISCARD auto parse(const basic_string<_CharT, _Traits, _Alloc>& _Fmt, _Parsable& _Tp, minutes& _Offset) {\r\n        return _Time_parse_iomanip{_Fmt, _Tp, static_cast<basic_string<_CharT, _Traits, _Alloc>*>(nullptr), &_Offset};\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Alloc,\r\n        _Can_from_stream<_CharT, _Traits, basic_string<_CharT, _Traits, _Alloc>*, minutes*> _Parsable>\r\n    _NODISCARD auto parse(\r\n        const _CharT* _Fmt, _Parsable& _Tp, basic_string<_CharT, _Traits, _Alloc>& _Abbrev, minutes& _Offset) {\r\n        return _Time_parse_iomanip_c_str{_Fmt, _Tp, _STD addressof(_Abbrev), &_Offset};\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Alloc,\r\n        _Can_from_stream<_CharT, _Traits, basic_string<_CharT, _Traits, _Alloc>*, minutes*> _Parsable>\r\n    _NODISCARD auto parse(const basic_string<_CharT, _Traits, _Alloc>& _Fmt, _Parsable& _Tp,\r\n        basic_string<_CharT, _Traits, _Alloc>& _Abbrev, minutes& _Offset) {\r\n        return _Time_parse_iomanip{_Fmt, _Tp, _STD addressof(_Abbrev), &_Offset};\r\n    }\r\n} // namespace chrono\r\n\r\n// [time.format]\r\n\r\ntemplate <class _Ty, class _CharT>\r\nconcept _Chrono_parse_spec_callbacks =\r\n    _Parse_align_callbacks<_Ty, _CharT> && _Parse_width_callbacks<_Ty, _CharT>\r\n    && _Parse_precision_callbacks<_Ty, _CharT> && _Width_adapter_callbacks<_Ty, _CharT>\r\n    && _Precision_adapter_callbacks<_Ty, _CharT> && requires(_Ty _At, basic_string_view<_CharT> _Sv, _Fmt_align _Aln) {\r\n           { _At._On_conversion_spec(char{}, _CharT{}) } -> same_as<void>;\r\n           { _At._On_lit_char(_CharT{}) } -> same_as<void>;\r\n       };\r\n\r\ntemplate <class _Ty>\r\nconcept _Has_ok = requires(_Ty _At) {\r\n    { _At.ok() } -> same_as<bool>;\r\n};\r\n\r\n// A chrono spec is either a type (with an optional modifier), OR a literal character, never both.\r\ntemplate <class _CharT>\r\nstruct _Chrono_spec {\r\n    _CharT _Lit_char{'\\0'}; // any character other than '{', '}', or '%'\r\n    char _Modifier = '\\0'; // either 'E' or 'O'\r\n    char _Type     = '\\0';\r\n};\r\n\r\ntemplate <class _CharT>\r\nstruct _Chrono_format_specs {\r\n    int _Width                   = 0;\r\n    int _Precision               = -1;\r\n    int _Dynamic_width_index     = -1;\r\n    int _Dynamic_precision_index = -1;\r\n    _Fmt_align _Alignment        = _Fmt_align::_None;\r\n    uint8_t _Fill_length         = 1;\r\n    bool _Localized              = false;\r\n    // At most one codepoint (so one char32_t or four utf-8 char8_t)\r\n    _CharT _Fill[4 / sizeof(_CharT)] = {_CharT{' '}};\r\n    // recursive definition in grammar, so could have any number of these\r\n    vector<_Chrono_spec<_CharT>> _Chrono_specs_list;\r\n};\r\n\r\n// Model of _Chrono_parse_spec_callbacks that fills a _Chrono_format_specs with the parsed data\r\ntemplate <class _CharT, class _ParseContext>\r\nclass _Chrono_specs_setter {\r\npublic:\r\n    constexpr explicit _Chrono_specs_setter(_Chrono_format_specs<_CharT>& _Specs_, _ParseContext& _Parse_ctx_)\r\n        : _Specs(_Specs_), _Parse_ctx(_Parse_ctx_) {}\r\n\r\n    // same as _Specs_setter\r\n    constexpr void _On_align(_Fmt_align _Aln) {\r\n        _Specs._Alignment = _Aln;\r\n    }\r\n\r\n    // same as _Specs_setter\r\n    constexpr void _On_fill(basic_string_view<_CharT> _Sv) {\r\n        if (_Sv.size() > _STD size(_Specs._Fill)) {\r\n            _STD _Throw_format_error(\"Invalid fill (too long).\");\r\n        }\r\n\r\n        const auto _Pos = _STD _Copy_unchecked(_Sv._Unchecked_begin(), _Sv._Unchecked_end(), _Specs._Fill);\r\n        _STD fill(_Pos, _STD end(_Specs._Fill), _CharT{});\r\n        _Specs._Fill_length = static_cast<uint8_t>(_Sv.size());\r\n    }\r\n\r\n    constexpr void _On_width(int _Width) {\r\n        _Specs._Width = _Width;\r\n    }\r\n\r\n    constexpr void _On_precision(int _Prec) {\r\n        _Specs._Precision = _Prec;\r\n    }\r\n\r\n    constexpr void _On_dynamic_width(const size_t _Arg_id) {\r\n        _Parse_ctx.check_arg_id(_Arg_id);\r\n        _Parse_ctx._Check_dynamic_spec_integral(_Arg_id);\r\n        _Specs._Dynamic_width_index = _Verify_dynamic_arg_index_in_range(_Arg_id);\r\n    }\r\n\r\n    constexpr void _On_dynamic_width(_Auto_id_tag) {\r\n        const size_t _Arg_id = _Parse_ctx.next_arg_id();\r\n        _Parse_ctx._Check_dynamic_spec_integral(_Arg_id);\r\n        _Specs._Dynamic_width_index = _Verify_dynamic_arg_index_in_range(_Arg_id);\r\n    }\r\n\r\n    constexpr void _On_dynamic_precision(const size_t _Arg_id) {\r\n        _Parse_ctx.check_arg_id(_Arg_id);\r\n        _Parse_ctx._Check_dynamic_spec_integral(_Arg_id);\r\n        _Specs._Dynamic_precision_index = _Verify_dynamic_arg_index_in_range(_Arg_id);\r\n    }\r\n\r\n    constexpr void _On_dynamic_precision(_Auto_id_tag) {\r\n        const size_t _Arg_id = _Parse_ctx.next_arg_id();\r\n        _Parse_ctx._Check_dynamic_spec_integral(_Arg_id);\r\n        _Specs._Dynamic_precision_index = _Verify_dynamic_arg_index_in_range(_Arg_id);\r\n    }\r\n\r\n    constexpr void _On_localized() {\r\n        _Specs._Localized = true;\r\n    }\r\n\r\n    constexpr void _On_conversion_spec(char _Modifier, _CharT _Type) {\r\n        if (_Modifier != '\\0' && _Modifier != 'E' && _Modifier != 'O') {\r\n            _STD _Throw_format_error(\"Invalid modifier specification.\");\r\n        }\r\n\r\n        if (_Type < 0 || _Type > (numeric_limits<signed char>::max)()) {\r\n            _STD _Throw_format_error(\"Invalid type specification.\");\r\n        }\r\n\r\n        _Chrono_spec<_CharT> _Conv_spec{._Modifier = _Modifier, ._Type = static_cast<char>(_Type)};\r\n        _Specs._Chrono_specs_list.push_back(_Conv_spec);\r\n    }\r\n\r\n    constexpr void _On_lit_char(_CharT _Lit_ch) {\r\n        _Chrono_spec<_CharT> _Lit_char_spec{._Lit_char = _Lit_ch};\r\n        _Specs._Chrono_specs_list.push_back(_Lit_char_spec);\r\n    }\r\n\r\nprivate:\r\n    _Chrono_format_specs<_CharT>& _Specs;\r\n    _ParseContext& _Parse_ctx;\r\n\r\n    _NODISCARD static constexpr int _Verify_dynamic_arg_index_in_range(const size_t _Idx) {\r\n        if (!_STD in_range<int>(_Idx)) {\r\n            _STD _Throw_format_error(\"Dynamic width or precision index too large.\");\r\n        }\r\n\r\n        return static_cast<int>(_Idx);\r\n    }\r\n};\r\n\r\n// assumes that the required '%' at the beginning of a conversion-spec has already been consumed\r\ntemplate <class _CharT, _Chrono_parse_spec_callbacks<_CharT> _Callbacks_type>\r\n_NODISCARD constexpr const _CharT* _Parse_conversion_specs(\r\n    const _CharT* _Begin, const _CharT* _End, _Callbacks_type&& _Callbacks) {\r\n    if (_Begin == _End || *_Begin == '}') {\r\n        _STD _Throw_format_error(\"Invalid format string.\");\r\n    }\r\n\r\n    char _Mod  = '\\0';\r\n    _CharT _Ch = *_Begin;\r\n\r\n    if (_Ch == 'E' || _Ch == 'O') { // includes modifier\r\n        _Mod = static_cast<char>(_Ch);\r\n        ++_Begin;\r\n        if (_Begin == _End || *_Begin == '}') {\r\n            _STD _Throw_format_error(\"Invalid format string - missing type after modifier.\");\r\n        }\r\n    }\r\n\r\n    _CharT _Type = *_Begin;\r\n    _Callbacks._On_conversion_spec(_Mod, _Type);\r\n\r\n    return ++_Begin;\r\n}\r\n\r\ntemplate <class _CharT, _Chrono_parse_spec_callbacks<_CharT> _Callbacks_type>\r\n_NODISCARD constexpr const _CharT* _Parse_chrono_format_specs(\r\n    const _CharT* _Begin, const _CharT* _End, _Callbacks_type&& _Callbacks) {\r\n    if (_Begin == _End || *_Begin == '}') {\r\n        return _Begin;\r\n    }\r\n\r\n    _Begin = _STD _Parse_align(_Begin, _End, _Callbacks);\r\n    if (_Begin == _End) {\r\n        return _Begin;\r\n    }\r\n\r\n    _Begin = _STD _Parse_width(_Begin, _End, _Callbacks);\r\n    if (_Begin == _End) {\r\n        return _Begin;\r\n    }\r\n\r\n    if (*_Begin == '.') {\r\n        _Begin = _STD _Parse_precision(_Begin, _End, _Callbacks);\r\n        if (_Begin == _End) {\r\n            return _Begin;\r\n        }\r\n    }\r\n\r\n    if (*_Begin == 'L') {\r\n        _Callbacks._On_localized();\r\n        ++_Begin;\r\n        if (_Begin == _End) {\r\n            return _Begin;\r\n        }\r\n    }\r\n\r\n    if (*_Begin != '}' && *_Begin != '%') {\r\n        _STD _Throw_format_error(\"Invalid format string - chrono-specs must begin with conversion-spec\");\r\n    }\r\n\r\n    // chrono-spec\r\n    while (_Begin != _End && *_Begin != '}') {\r\n        // Note that in this loop, ++_Begin is safe (and we don't need _Fmt_codec)\r\n        // because '%' isn't used as a non-lead-byte in any supported multibyte encoding.\r\n        if (*_Begin == '%') { // conversion-spec\r\n            if (++_Begin == _End) {\r\n                _STD _Throw_format_error(\"Invalid format string - missing type after %\");\r\n            }\r\n\r\n            switch (*_Begin) {\r\n            case 'n':\r\n                _Callbacks._On_lit_char('\\n');\r\n                ++_Begin;\r\n                break;\r\n            case 't':\r\n                _Callbacks._On_lit_char('\\t');\r\n                ++_Begin;\r\n                break;\r\n            case '%':\r\n                _Callbacks._On_lit_char('%');\r\n                ++_Begin;\r\n                break;\r\n            default: // some other type\r\n                _Begin = _STD _Parse_conversion_specs(_Begin, _End, _Callbacks);\r\n                break;\r\n            }\r\n        } else { // literal-char\r\n            _Callbacks._On_lit_char(*_Begin);\r\n            ++_Begin;\r\n        }\r\n    }\r\n\r\n    return _Begin;\r\n}\r\n\r\nnamespace chrono {\r\n    template <class _Duration>\r\n    struct _Local_time_format_t {\r\n        local_time<_Duration> _Time;\r\n        const string* _Abbrev      = nullptr;\r\n        const seconds* _Offset_sec = nullptr;\r\n\r\n        template <class _CharT, class _Traits>\r\n        friend basic_ostream<_CharT, _Traits>& operator<<(\r\n            basic_ostream<_CharT, _Traits>& _Os, const _Local_time_format_t& _Val) {\r\n            // Doesn't appear in the Standard, but allowed by N4950 [global.functions]/2.\r\n            // Implements N4950 [time.zone.zonedtime.nonmembers]/2 for zoned_time.\r\n            return _Os << _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{:L%F %T %Z}\"), _Val);\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD template <class _Duration>\r\n    _NODISCARD _Local_time_format_t<_Duration> local_time_format(const local_time<_Duration> _Time,\r\n        const string* const _Abbrev = nullptr, const seconds* const _Offset_sec = nullptr) {\r\n        return {_Time, _Abbrev, _Offset_sec};\r\n    }\r\n\r\n    // Replacement for %S, as put_time does not honor writing fractional seconds.\r\n    template <class _CharT, class _Traits, class _Ty>\r\n    void _Write_seconds(basic_ostream<_CharT, _Traits>&, const _Ty&) {\r\n        _STL_INTERNAL_CHECK(false);\r\n    }\r\n\r\n    template <unsigned int _Fractional_width, class _CharT, class _Traits, class _Precision>\r\n    void _Write_fractional_seconds(\r\n        basic_ostream<_CharT, _Traits>& _Os, const seconds& _Seconds, const _Precision& _Subseconds) {\r\n        _Os << _STD format(_STATICALLY_WIDEN(_CharT, \"{:02}\"), _Seconds.count());\r\n        if constexpr (_Fractional_width > 0) {\r\n            _Os << _STD use_facet<numpunct<_CharT>>(_Os.getloc()).decimal_point();\r\n            if constexpr (treat_as_floating_point_v<typename _Precision::rep>) {\r\n                _Os << _STD format(\r\n                    _STATICALLY_WIDEN(_CharT, \"{:0{}.0f}\"), _STD floor(_Subseconds.count()), _Fractional_width);\r\n            } else {\r\n                _Os << _STD format(_STATICALLY_WIDEN(_CharT, \"{:0{}}\"), _Subseconds.count(), _Fractional_width);\r\n            }\r\n        }\r\n    }\r\n\r\n    template <class _CharT, class _Traits, class _Duration>\r\n    void _Write_seconds(basic_ostream<_CharT, _Traits>& _Os, const hh_mm_ss<_Duration>& _Val) {\r\n        _CHRONO _Write_fractional_seconds<hh_mm_ss<_Duration>::fractional_width>(\r\n            _Os, _Val.seconds(), _Val.subseconds());\r\n    }\r\n\r\n    template <class _CharT, class _Traits, class _Clock, class _Duration>\r\n    void _Write_seconds(basic_ostream<_CharT, _Traits>& _Os, const time_point<_Clock, _Duration>& _Val) {\r\n        if constexpr (is_same_v<_Clock, utc_clock>) {\r\n            const auto _Lsi = _CHRONO get_leap_second_info(_Val);\r\n            const auto _Dp =\r\n                _CHRONO floor<days>(_Val - _Lsi.elapsed) + _Lsi.elapsed - seconds{_Lsi.is_leap_second ? 1 : 0};\r\n            const hh_mm_ss _Hms{_Val - _Dp};\r\n            constexpr auto _Fractional_width = decltype(_Hms)::fractional_width;\r\n            if (_Lsi.is_leap_second) {\r\n                _CHRONO _Write_fractional_seconds<_Fractional_width>(\r\n                    _Os, _Hms.seconds() + seconds{60}, _Hms.subseconds());\r\n            } else {\r\n                _CHRONO _Write_fractional_seconds<_Fractional_width>(_Os, _Hms.seconds(), _Hms.subseconds());\r\n            }\r\n        } else {\r\n            const auto _Dp = _CHRONO floor<days>(_Val);\r\n            _CHRONO _Write_seconds(_Os, hh_mm_ss{_Val - _Dp});\r\n        }\r\n    }\r\n\r\n    template <class _CharT, class _Traits, class _Duration>\r\n    void _Write_seconds(basic_ostream<_CharT, _Traits>& _Os, const _Local_time_format_t<_Duration>& _Val) {\r\n        _CHRONO _Write_seconds(_Os, _Val._Time);\r\n    }\r\n\r\n    template <class _CharT, class _Traits, class _Rep, class _Period>\r\n    void _Write_seconds(basic_ostream<_CharT, _Traits>& _Os, const duration<_Rep, _Period>& _Val) {\r\n        _CHRONO _Write_seconds(_Os, hh_mm_ss{_Val});\r\n    }\r\n\r\n    template <class _Ty>\r\n    _NODISCARD tm _Fill_tm(const _Ty& _Val) {\r\n        if constexpr (_Is_specialization_v<_Ty, duration>) {\r\n            return _CHRONO _Fill_tm(hh_mm_ss{_Val});\r\n        } else if constexpr (_Is_specialization_v<_Ty, _Local_time_format_t>) {\r\n            return _CHRONO _Fill_tm(_Val._Time);\r\n        } else if constexpr (_Is_any_of_v<_Ty, year_month_weekday, year_month_weekday_last>) {\r\n            auto _Tm    = _CHRONO _Fill_tm(year_month_day{_Val});\r\n            _Tm.tm_wday = static_cast<int>(_Val.weekday().c_encoding());\r\n            return _Tm;\r\n        } else if constexpr (_Is_any_of_v<_Ty, sys_info, local_info>) {\r\n            return {}; // none of the valid conversion specifiers need tm fields\r\n        } else if constexpr (_Is_specialization_v<_Ty, time_point>) {\r\n            const auto _Dp = _CHRONO floor<days>(_Val);\r\n            const year_month_day _Ymd{_Dp};\r\n            const hh_mm_ss _Time{_Val - _Dp};\r\n            const auto _Hms = _CHRONO _Fill_tm(_Time);\r\n            auto _Tm        = _CHRONO _Fill_tm(_Ymd);\r\n            _Tm.tm_sec      = _Hms.tm_sec;\r\n            _Tm.tm_min      = _Hms.tm_min;\r\n            _Tm.tm_hour     = _Hms.tm_hour;\r\n            return _Tm;\r\n        } else {\r\n            unsigned int _Day   = 0;\r\n            unsigned int _Month = 0;\r\n            int _Year           = 0;\r\n            int _Yearday        = 0;\r\n            int _Weekday        = 0;\r\n            int _Hours          = 0;\r\n            int _Minutes        = 0;\r\n            int _Seconds        = 0;\r\n\r\n            if constexpr (is_same_v<_Ty, day>) {\r\n                _Day = static_cast<unsigned int>(_Val);\r\n            } else if constexpr (is_same_v<_Ty, month>) {\r\n                _Month = static_cast<unsigned int>(_Val);\r\n            } else if constexpr (is_same_v<_Ty, year>) {\r\n                _Year = static_cast<int>(_Val);\r\n            } else if constexpr (is_same_v<_Ty, weekday>) {\r\n                _Weekday = static_cast<int>(_Val.c_encoding());\r\n            } else if constexpr (_Is_any_of_v<_Ty, weekday_indexed, weekday_last>) {\r\n                _Weekday = static_cast<int>(_Val.weekday().c_encoding());\r\n            } else if constexpr (is_same_v<_Ty, month_day>) {\r\n                _Day   = static_cast<unsigned int>(_Val.day());\r\n                _Month = static_cast<unsigned int>(_Val.month());\r\n                if (_Val.month() == January) {\r\n                    _Yearday = static_cast<int>(_Day) - 1;\r\n                } else if (_Val.month() == February) {\r\n                    _Yearday = 31 + static_cast<int>(_Day) - 1;\r\n                }\r\n            } else if constexpr (is_same_v<_Ty, month_day_last>) {\r\n                _Month = static_cast<unsigned int>(_Val.month());\r\n                _Day   = static_cast<unsigned int>(_Last_day_table[(_Month - 1) & 0xF]);\r\n                if (_Val.month() == January) {\r\n                    _Yearday = 30;\r\n                }\r\n            } else if constexpr (is_same_v<_Ty, month_weekday>) {\r\n                _Month   = static_cast<unsigned int>(_Val.month());\r\n                _Weekday = static_cast<int>(_Val.weekday_indexed().weekday().c_encoding());\r\n            } else if constexpr (is_same_v<_Ty, month_weekday_last>) {\r\n                _Month   = static_cast<unsigned int>(_Val.month());\r\n                _Weekday = static_cast<int>(_Val.weekday_last().weekday().c_encoding());\r\n            } else if constexpr (is_same_v<_Ty, year_month>) {\r\n                _Month = static_cast<unsigned int>(_Val.month());\r\n                _Year  = static_cast<int>(_Val.year());\r\n            } else if constexpr (_Is_any_of_v<_Ty, year_month_day, year_month_day_last>) {\r\n                _Day   = static_cast<unsigned int>(_Val.day());\r\n                _Month = static_cast<unsigned int>(_Val.month());\r\n                _Year  = static_cast<int>(_Val.year());\r\n                if (_Val.ok()) {\r\n                    const year_month_day& _Ymd = _Val;\r\n                    _Weekday                   = _Ymd._Calculate_weekday();\r\n                    _Yearday = (static_cast<sys_days>(_Val) - static_cast<sys_days>(_Val.year() / January / 1)).count();\r\n                }\r\n            } else if constexpr (_Is_specialization_v<_Ty, hh_mm_ss>) {\r\n                _Hours   = _Val.hours().count();\r\n                _Minutes = _Val.minutes().count();\r\n                _Seconds = static_cast<int>(_Val.seconds().count());\r\n            }\r\n\r\n            tm _Tm{};\r\n            _Tm.tm_sec  = _Seconds;\r\n            _Tm.tm_min  = _Minutes;\r\n            _Tm.tm_hour = _Hours;\r\n            _Tm.tm_mday = static_cast<int>(_Day);\r\n            _Tm.tm_mon  = static_cast<int>(_Month) - 1;\r\n            _Tm.tm_year = _Year - 1900;\r\n            _Tm.tm_wday = _Weekday;\r\n            _Tm.tm_yday = _Yearday;\r\n            return _Tm;\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const day& _Val) {\r\n        return _Os << (_Val.ok() ? _STD format(_STATICALLY_WIDEN(_CharT, \"{:%d}\"), _Val)\r\n                                 : _STD format(_STATICALLY_WIDEN(_CharT, \"{:%d} is not a valid day\"), _Val));\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const month& _Val) {\r\n        return _Os << (_Val.ok() ? _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{:L%b}\"), _Val)\r\n                                 : _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{} is not a valid month\"),\r\n                                       static_cast<unsigned int>(_Val)));\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const year& _Val) {\r\n        return _Os << (_Val.ok() ? _STD format(_STATICALLY_WIDEN(_CharT, \"{:%Y}\"), _Val)\r\n                                 : _STD format(_STATICALLY_WIDEN(_CharT, \"{:%Y} is not a valid year\"), _Val));\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const weekday& _Val) {\r\n        return _Os << (_Val.ok() ? _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{:L%a}\"), _Val)\r\n                                 : _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{} is not a valid weekday\"),\r\n                                       _Val.c_encoding()));\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const weekday_indexed& _Val) {\r\n        const auto _Idx = _Val.index();\r\n        return _Os << (_Idx >= 1 && _Idx <= 5\r\n                           ? _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{:L}[{}]\"), _Val.weekday(), _Idx)\r\n                           : _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{:L}[{} is not a valid index]\"),\r\n                                 _Val.weekday(), _Idx));\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const weekday_last& _Val) {\r\n        return _Os << _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{:L}[last]\"), _Val.weekday());\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const month_day& _Val) {\r\n        return _Os << _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{:L}/{}\"), _Val.month(), _Val.day());\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const month_day_last& _Val) {\r\n        return _Os << _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{:L}/last\"), _Val.month());\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const month_weekday& _Val) {\r\n        return _Os << _STD format(\r\n                   _Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{:L}/{:L}\"), _Val.month(), _Val.weekday_indexed());\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const month_weekday_last& _Val) {\r\n        return _Os << _STD format(\r\n                   _Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{:L}/{:L}\"), _Val.month(), _Val.weekday_last());\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const year_month& _Val) {\r\n        return _Os << _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{}/{:L}\"), _Val.year(), _Val.month());\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const year_month_day& _Val) {\r\n        return _Os << (_Val.ok() ? _STD format(_STATICALLY_WIDEN(_CharT, \"{:%F}\"), _Val)\r\n                                 : _STD format(_STATICALLY_WIDEN(_CharT, \"{:%F} is not a valid date\"), _Val));\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const year_month_day_last& _Val) {\r\n        return _Os << _STD format(\r\n                   _Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{}/{:L}\"), _Val.year(), _Val.month_day_last());\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const year_month_weekday& _Val) {\r\n        return _Os << _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{}/{:L}/{:L}\"), _Val.year(), _Val.month(),\r\n                   _Val.weekday_indexed());\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(\r\n        basic_ostream<_CharT, _Traits>& _Os, const year_month_weekday_last& _Val) {\r\n        return _Os << _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{}/{:L}/{:L}\"), _Val.year(), _Val.month(),\r\n                   _Val.weekday_last());\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Duration>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const hh_mm_ss<_Duration>& _Val) {\r\n        return _Os << _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{:L%T}\"), _Val);\r\n    }\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4365) // 'argument': conversion from 'char' to 'const wchar_t', signed/unsigned mismatch\r\n    template <class _CharT>\r\n    _NODISCARD decltype(auto) _Widen_string(const string& _Str) {\r\n        if constexpr (is_same_v<_CharT, char>) {\r\n            return _Str;\r\n        } else {\r\n            return wstring{_Str.begin(), _Str.end()}; // TRANSITION, should probably use ctype::widen\r\n        }\r\n    }\r\n#pragma warning(pop)\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const sys_info& _Val) {\r\n        return _Os << _STD format(_Os.getloc(),\r\n                   _STATICALLY_WIDEN(_CharT, \"begin: {}, end: {}, offset: {}, save: {}, abbrev: {}\"), //\r\n                   _Val.begin, _Val.end, _Val.offset, _Val.save, _CHRONO _Widen_string<_CharT>(_Val.abbrev));\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const local_info& _Val) {\r\n        switch (_Val.result) {\r\n        case local_info::unique:\r\n            return _Os << _STD format(_Os.getloc(), //\r\n                       _STATICALLY_WIDEN(_CharT, \"result: unique, first: ({})\"), //\r\n                       _Val.first);\r\n        case local_info::nonexistent:\r\n            return _Os << _STD format(_Os.getloc(),\r\n                       _STATICALLY_WIDEN(_CharT, \"result: nonexistent, first: ({}), second: ({})\"), //\r\n                       _Val.first, _Val.second);\r\n        case local_info::ambiguous:\r\n            return _Os << _STD format(_Os.getloc(),\r\n                       _STATICALLY_WIDEN(_CharT, \"result: ambiguous, first: ({}), second: ({})\"), //\r\n                       _Val.first, _Val.second);\r\n        default:\r\n            return _Os << _STD format(_Os.getloc(), //\r\n                       _STATICALLY_WIDEN(_CharT, \"result: {}, first: ({}), second: ({})\"), //\r\n                       _Val.result, _Val.first, _Val.second);\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Duration>\r\n        requires (!treat_as_floating_point_v<typename _Duration::rep> && _Duration{1} < days{1})\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const sys_time<_Duration>& _Val) {\r\n        return _Os << _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{:L%F %T}\"), _Val);\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const sys_days& _Val) {\r\n        return _Os << year_month_day{_Val};\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Duration>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const utc_time<_Duration>& _Val) {\r\n        return _Os << _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{:L%F %T}\"), _Val);\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Duration>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const tai_time<_Duration>& _Val) {\r\n        return _Os << _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{:L%F %T}\"), _Val);\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Duration>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const gps_time<_Duration>& _Val) {\r\n        return _Os << _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{:L%F %T}\"), _Val);\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Duration>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const file_time<_Duration>& _Val) {\r\n        return _Os << _STD format(_Os.getloc(), _STATICALLY_WIDEN(_CharT, \"{:L%F %T}\"), _Val);\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Duration>\r\n    basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& _Os, const local_time<_Duration>& _Val)\r\n        requires requires { _Os << sys_time<_Duration>{_Val.time_since_epoch()}; }\r\n    {\r\n        return _Os << sys_time<_Duration>{_Val.time_since_epoch()};\r\n    }\r\n\r\n    _EXPORT_STD template <class _CharT, class _Traits, class _Duration, class _TimeZonePtr>\r\n    basic_ostream<_CharT, _Traits>& operator<<(\r\n        basic_ostream<_CharT, _Traits>& _Os, const zoned_time<_Duration, _TimeZonePtr>& _Val) {\r\n        const auto _Info = _Val.get_info();\r\n        return _Os << _Local_time_format_t<common_type_t<_Duration, seconds>>{_Val.get_local_time(), &_Info.abbrev};\r\n    }\r\n\r\n    template <class _CharT>\r\n    _NODISCARD const _CharT* _Fmt_string(const _Chrono_spec<_CharT>& _Spec, _CharT (&_Fmt_str)[4]) {\r\n        size_t _Next_idx      = 0;\r\n        _Fmt_str[_Next_idx++] = _CharT{'%'};\r\n        if (_Spec._Modifier != '\\0') {\r\n            _Fmt_str[_Next_idx++] = static_cast<_CharT>(_Spec._Modifier);\r\n        }\r\n        _Fmt_str[_Next_idx++] = static_cast<_CharT>(_Spec._Type);\r\n        _Fmt_str[_Next_idx]   = _CharT{'\\0'};\r\n        return _Fmt_str;\r\n    }\r\n\r\n    template <class _CharT>\r\n    struct _Chrono_formatter {\r\n        _Chrono_formatter() = default;\r\n\r\n        constexpr explicit _Chrono_formatter(const basic_string_view<_CharT> _Time_zone_abbreviation_)\r\n            : _Time_zone_abbreviation{_Time_zone_abbreviation_} {}\r\n\r\n        template <class _Ty>\r\n        _NODISCARD constexpr auto _Parse(basic_format_parse_context<_CharT>& _Parse_ctx) {\r\n            _Chrono_specs_setter<_CharT, basic_format_parse_context<_CharT>> _Callback{_Specs, _Parse_ctx};\r\n            const auto _It =\r\n                _STD _Parse_chrono_format_specs(_Parse_ctx._Unchecked_begin(), _Parse_ctx._Unchecked_end(), _Callback);\r\n            const auto _Res_iter = _Parse_ctx.begin() + (_It - _Parse_ctx._Unchecked_begin());\r\n\r\n            if (_It != _Parse_ctx._Unchecked_end() && *_It != '}') {\r\n                _STD _Throw_format_error(\"Missing '}' in format string.\");\r\n            }\r\n\r\n            if constexpr (_Is_specialization_v<_Ty, duration>) {\r\n                if constexpr (!treat_as_floating_point_v<typename _Ty::rep>) {\r\n                    if (_Specs._Precision != -1) {\r\n                        _STD _Throw_format_error(\"Precision specification invalid for chrono::duration type with \"\r\n                                                 \"integral representation type, see N4950 [time.format]/1.\");\r\n                    }\r\n                }\r\n            } else {\r\n                if (_Specs._Precision != -1) {\r\n                    _STD _Throw_format_error(\"Precision specification invalid for non-chrono::duration type, \"\r\n                                             \"see N4950 [time.format]/1.\");\r\n                }\r\n            }\r\n\r\n            for (const auto& _Spec : _Specs._Chrono_specs_list) {\r\n                if (_Spec._Type != '\\0' && !_Is_valid_type<_Ty>(_Spec._Type)) {\r\n                    _STD _Throw_format_error(\"Invalid type.\");\r\n                }\r\n\r\n                if (!_Valid_modifier(_Spec._Type, _Spec._Modifier)) {\r\n                    _STD _Throw_format_error(\"Incompatible modifier for type\");\r\n                }\r\n            }\r\n\r\n            return _Res_iter;\r\n        }\r\n\r\n        static constexpr bool _Valid_modifier(const char _Type, const char _Modifier) {\r\n            // N5014 [tab:time.format.spec] lists modified commands.\r\n            if (_Modifier == '\\0') {\r\n                return true;\r\n            }\r\n\r\n            _STL_INTERNAL_CHECK(_Modifier == 'E' || _Modifier == 'O');\r\n\r\n            switch (_Type) {\r\n            case 'c':\r\n            case 'C':\r\n            case 'x':\r\n            case 'X':\r\n            case 'Y':\r\n                return _Modifier == 'E';\r\n\r\n            case 'd':\r\n            case 'e':\r\n            case 'H':\r\n            case 'I':\r\n            case 'm':\r\n            case 'M':\r\n            case 'S':\r\n            case 'u':\r\n            case 'U':\r\n            case 'V':\r\n            case 'w':\r\n            case 'W':\r\n                return _Modifier == 'O';\r\n\r\n            case 'y':\r\n            case 'z':\r\n                return true;\r\n\r\n            default:\r\n                return false;\r\n            }\r\n        }\r\n\r\n        template <class _Ty>\r\n        _NODISCARD static constexpr bool _Is_valid_type(const char _Type) noexcept {\r\n            if constexpr (_Is_specialization_v<_Ty, duration>) {\r\n                return _Type == 'j' || _Type == 'q' || _Type == 'Q' || _Is_valid_type<hh_mm_ss<seconds>>(_Type);\r\n            } else if constexpr (is_same_v<_Ty, day>) {\r\n                return _Type == 'd' || _Type == 'e';\r\n            } else if constexpr (is_same_v<_Ty, month>) {\r\n                return _Type == 'b' || _Type == 'B' || _Type == 'h' || _Type == 'm';\r\n            } else if constexpr (is_same_v<_Ty, year>) {\r\n                return _Type == 'Y' || _Type == 'y' || _Type == 'C';\r\n            } else if constexpr (_Is_any_of_v<_Ty, weekday, weekday_indexed, weekday_last>) {\r\n                return _Type == 'a' || _Type == 'A' || _Type == 'u' || _Type == 'w';\r\n            } else if constexpr (_Is_any_of_v<_Ty, month_day, month_day_last>) {\r\n                return _Type == 'j' || _Is_valid_type<month>(_Type) || _Is_valid_type<day>(_Type);\r\n            } else if constexpr (_Is_any_of_v<_Ty, month_weekday, month_weekday_last>) {\r\n                return _Is_valid_type<month>(_Type) || _Is_valid_type<weekday>(_Type);\r\n            } else if constexpr (is_same_v<_Ty, year_month>) {\r\n                return _Type == 'g' || _Type == 'G' || _Is_valid_type<year>(_Type) || _Is_valid_type<month>(_Type);\r\n            } else if constexpr (_Is_any_of_v<_Ty, year_month_day, year_month_day_last, year_month_weekday,\r\n                                     year_month_weekday_last>) {\r\n                return _Type == 'D' || _Type == 'F' || _Type == 'g' || _Type == 'G' || _Type == 'j' || _Type == 'U'\r\n                    || _Type == 'V' || _Type == 'W' || _Type == 'x' || _Is_valid_type<year>(_Type)\r\n                    || _Is_valid_type<month>(_Type) || _Is_valid_type<day>(_Type) || _Is_valid_type<weekday>(_Type);\r\n            } else if constexpr (_Is_specialization_v<_Ty, hh_mm_ss>) {\r\n                return _Type == 'H' || _Type == 'I' || _Type == 'M' || _Type == 'S' || _Type == 'r' || _Type == 'R'\r\n                    || _Type == 'T' || _Type == 'p' || _Type == 'X';\r\n            } else if constexpr (_Is_any_of_v<_Ty, sys_info, local_info>) {\r\n                return _Type == 'z' || _Type == 'Z';\r\n            } else if constexpr (_Is_specialization_v<_Ty, time_point>) {\r\n                if constexpr (!is_same_v<typename _Ty::clock, local_t>) {\r\n                    if (_Type == 'z' || _Type == 'Z') {\r\n                        return true;\r\n                    }\r\n                }\r\n                return _Type == 'c' || _Is_valid_type<year_month_day>(_Type)\r\n                    || _Is_valid_type<hh_mm_ss<seconds>>(_Type);\r\n            } else if constexpr (_Is_specialization_v<_Ty, _Local_time_format_t>) {\r\n                return _Type == 'z' || _Type == 'Z' || _Is_valid_type<decltype(_Ty::_Time)>(_Type);\r\n            } else {\r\n                static_assert(false); // unexpected type\r\n            }\r\n        }\r\n\r\n        template <class _FormatContext, class _Ty>\r\n        _NODISCARD auto _Write(_FormatContext& _Format_ctx, const _Ty& _Val, const tm& _Time) const {\r\n            basic_ostringstream<_CharT> _Stream;\r\n\r\n            _Stream.imbue(_Specs._Localized ? _Format_ctx.locale() : locale::classic());\r\n            if (_Specs._Chrono_specs_list.empty()) {\r\n                _Stream << _Val; // N4950 [time.format]/7\r\n            } else {\r\n                if constexpr (_Is_specialization_v<_Ty, hh_mm_ss>) {\r\n                    if (_Val.is_negative()) {\r\n                        _Stream << _CharT{'-'};\r\n                    }\r\n                } else if constexpr (_Is_specialization_v<_Ty, duration>) {\r\n                    if (_Val < _Ty::zero()) {\r\n                        _Stream << _CharT{'-'};\r\n                    }\r\n                }\r\n\r\n                for (const auto& _Spec : _Specs._Chrono_specs_list) {\r\n                    if (_Spec._Lit_char != _CharT{'\\0'}) {\r\n                        _Stream << _Spec._Lit_char;\r\n                        continue;\r\n                    }\r\n\r\n                    // We need to manually do certain writes, either because the specification is different from\r\n                    // put_time or custom logic is needed.\r\n                    if (_Custom_write(_Stream, _Spec, _Time, _Val)) {\r\n                        continue;\r\n                    }\r\n\r\n                    _Validate_specifiers(_Spec, _Val);\r\n\r\n#if defined(_MSVC_EXECUTION_CHARACTER_SET) && _MSVC_EXECUTION_CHARACTER_SET == 65001 // TRANSITION, VSO-1468747 (EDG)\r\n                    if constexpr (is_same_v<_CharT, char>) {\r\n                        if (_Specs._Localized) {\r\n                            wostringstream _Wstream;\r\n                            _Wstream.imbue(_Format_ctx.locale());\r\n\r\n                            wchar_t _Fmt_str[4];\r\n                            _Chrono_spec<wchar_t> _Wspec{._Modifier = _Spec._Modifier, ._Type = _Spec._Type};\r\n                            _Wstream << _STD put_time<wchar_t>(&_Time, _CHRONO _Fmt_string(_Wspec, _Fmt_str));\r\n\r\n                            _Stream << _STD _Convert_wide_to_narrow<char_traits<char>>(\r\n                                __std_code_page::_Utf8, _Wstream.view(), allocator<char>{});\r\n\r\n                            continue;\r\n                        }\r\n                    }\r\n#endif // ^^^ no workaround ^^^\r\n\r\n                    _CharT _Fmt_str[4];\r\n                    _Stream << _STD put_time<_CharT>(&_Time, _CHRONO _Fmt_string(_Spec, _Fmt_str));\r\n                }\r\n            }\r\n\r\n            int _Estimated_width = -1;\r\n            (void) _STD _Measure_string_prefix(_Stream.view(), _Estimated_width);\r\n\r\n            auto _Format_specs = _Specs;\r\n            if (_Specs._Dynamic_width_index >= 0) {\r\n                _Format_specs._Width = _STD _Get_dynamic_specs<_Width_checker>(\r\n                    _Format_ctx.arg(static_cast<size_t>(_Specs._Dynamic_width_index)));\r\n            }\r\n\r\n            return _STD _Write_aligned(_STD move(_Format_ctx.out()), _Estimated_width, _Format_specs, _Fmt_align::_Left,\r\n                [&](auto _Out) { return _STD _Fmt_write(_STD move(_Out), _Stream.view()); });\r\n        }\r\n\r\n        // This echoes the functionality of put_time, but is able to handle invalid dates (when !ok()) since the\r\n        // Standard mandates that invalid dates still be formatted properly.  For example, put_time isn't able to handle\r\n        // a tm_mday of 40, but format(\"{:%d}\", day{40}) should return \"40\" and operator<< for day prints\r\n        // \"40 is not a valid day\".\r\n        template <class _Ty>\r\n        bool _Custom_write(\r\n            basic_ostream<_CharT>& _Os, const _Chrono_spec<_CharT>& _Spec, const tm& _Time, const _Ty& _Val) const {\r\n            if constexpr (is_same_v<_Ty, local_info>) {\r\n                if (_Val.result != local_info::unique) {\r\n                    _STD _Throw_format_error(\"Cannot print non-unique local_info\");\r\n                }\r\n            }\r\n\r\n            const auto _Year         = _Time.tm_year + 1900;\r\n            const auto _Month        = _Time.tm_mon + 1;\r\n            const bool _Has_modifier = _Spec._Modifier != '\\0';\r\n            switch (_Spec._Type) {\r\n            case 'd': // Print days as a decimal, even if invalid.\r\n            case 'e':\r\n                // Most months have a proper last day, but February depends on the year.\r\n                if constexpr (is_same_v<_Ty, month_day_last>) {\r\n                    if (_Val.month() == February) {\r\n                        _STD _Throw_format_error(\"Cannot print the last day of February without a year\");\r\n                    }\r\n\r\n                    if (!_Val.ok()) {\r\n                        return false;\r\n                    }\r\n                }\r\n\r\n                if (_Has_modifier) {\r\n                    return false;\r\n                }\r\n\r\n                if (_Time.tm_mday < 10) {\r\n                    _Os << (_Spec._Type == 'd' ? _CharT{'0'} : _CharT{' '});\r\n                }\r\n                _Os << _Time.tm_mday;\r\n                return true;\r\n            case 'g':\r\n            case 'G':\r\n                if constexpr (is_same_v<_Ty, year_month>) {\r\n                    if (_Val.month() == January || _Val.month() == December) {\r\n                        _STD _Throw_format_error(\r\n                            \"The ISO week-based year for a year_month of January or December is ambiguous.\");\r\n                    }\r\n\r\n                    if (!_Val.ok()) {\r\n                        _STD _Throw_format_error(\r\n                            \"The ISO week-based year for an out-of-bounds year_month is ambiguous.\");\r\n                    }\r\n\r\n                    const char _Gregorian_type = _Spec._Type == 'g' ? 'y' : 'Y';\r\n                    _CharT _Fmt_str[4];\r\n                    _Os << _STD put_time(&_Time, _CHRONO _Fmt_string({._Type = _Gregorian_type}, _Fmt_str));\r\n                    return true;\r\n                } else {\r\n                    return false;\r\n                }\r\n            case 'r':\r\n                // put_time uses _Strftime in order to bypass reference-counting that locale uses. This function\r\n                // takes the locale information by pointer, but the pointer (from _Gettnames) returns a copy.\r\n                // _Strftime delegates to other functions but eventually (for the C locale) has the %r specifier\r\n                // rewritten. It checks for the locale by comparing pointers, which do not compare equal as we have\r\n                // a copy of the pointer instead of the original. Therefore, we replace %r for the C locale\r\n                // ourselves.\r\n                if (_Os.getloc() == locale::classic()) {\r\n                    _Os << _STD put_time(&_Time, _STATICALLY_WIDEN(_CharT, \"%I:%M:%S %p\"));\r\n                    return true;\r\n                }\r\n\r\n                return false;\r\n            case 'j':\r\n                if constexpr (_Is_specialization_v<_Ty, duration>) {\r\n                    _Os << _STD abs(_CHRONO _Duration_cast_underflow_to_zero<days>(_Val).count());\r\n                    return true;\r\n                } else {\r\n                    return false;\r\n                }\r\n            case 'q':\r\n                if constexpr (_Is_specialization_v<_Ty, duration>) {\r\n                    _CHRONO _Write_unit_suffix<typename _Ty::period>(_Os);\r\n                } else {\r\n                    _STL_INTERNAL_CHECK(false);\r\n                }\r\n                return true;\r\n            case 'Q':\r\n                if constexpr (_Is_specialization_v<_Ty, duration>) {\r\n                    if constexpr (is_unsigned_v<typename _Ty::rep>) {\r\n                        _Os << _Val.count();\r\n                    } else {\r\n                        _Os << _STD abs(_Val.count());\r\n                    }\r\n                } else {\r\n                    _STL_INTERNAL_CHECK(false);\r\n                }\r\n                return true;\r\n            case 'm': // Print months as a decimal, even if invalid.\r\n                if (_Has_modifier) {\r\n                    return false;\r\n                }\r\n\r\n                if (_Month < 10) {\r\n                    _Os << _CharT{'0'};\r\n                }\r\n                _Os << _Month;\r\n                return true;\r\n            case 'Y': // Print years as a decimal, even if invalid.\r\n                if (_Has_modifier) {\r\n                    return false;\r\n                }\r\n\r\n                if (_Year < 0) {\r\n                    _Os << _CharT{'-'};\r\n                }\r\n                _Os << _STD format(_STATICALLY_WIDEN(_CharT, \"{:04}\"), _STD abs(_Year));\r\n                return true;\r\n            case 'y': // Print the two-digit year as a decimal, even if invalid.\r\n                if (_Has_modifier) {\r\n                    return false;\r\n                }\r\n                _Os << _STD format(\r\n                    _STATICALLY_WIDEN(_CharT, \"{:02}\"), _Time_parse_fields::_Decompose_year(_Year).second);\r\n                return true;\r\n            case 'C': // Print the century as a decimal, even if invalid.\r\n                if (_Has_modifier) {\r\n                    return false;\r\n                }\r\n\r\n                if (_Year < 0) {\r\n                    _Os << _CharT{'-'};\r\n                }\r\n                _Os << _STD format(_STATICALLY_WIDEN(_CharT, \"{:02}\"),\r\n                    _STD abs(_Time_parse_fields::_Decompose_year(_Year).first) / 100);\r\n                return true;\r\n            case 'F': // Print YMD even if invalid.\r\n                _Custom_write(_Os, {._Type = 'Y'}, _Time, _Val);\r\n                _Os << _CharT{'-'};\r\n                _Custom_write(_Os, {._Type = 'm'}, _Time, _Val);\r\n                _Os << _CharT{'-'};\r\n                _Custom_write(_Os, {._Type = 'd'}, _Time, _Val);\r\n                return true;\r\n            case 'D': // Print YMD even if invalid.\r\n                _Custom_write(_Os, {._Type = 'm'}, _Time, _Val);\r\n                _Os << _CharT{'/'};\r\n                _Custom_write(_Os, {._Type = 'd'}, _Time, _Val);\r\n                _Os << _CharT{'/'};\r\n                _Custom_write(_Os, {._Type = 'y'}, _Time, _Val);\r\n                return true;\r\n            case 'H':\r\n                // Print hour even if >= 24.\r\n                _Os << _STD format(_STATICALLY_WIDEN(_CharT, \"{:02}\"), _Time.tm_hour);\r\n                return true;\r\n            case 'T':\r\n                // Alias for %H:%M:%S but we allow hours > 23 and rewrite %S to display fractions of a second.\r\n                _Os << _STD format(_STATICALLY_WIDEN(_CharT, \"{:02}:{:02}:\"), _Time.tm_hour, _Time.tm_min);\r\n                [[fallthrough]];\r\n            case 'S':\r\n                if (_Has_modifier) {\r\n                    return false;\r\n                }\r\n                _CHRONO _Write_seconds(_Os, _Val);\r\n                return true;\r\n            case 'Z':\r\n                if constexpr (is_same_v<_Ty, sys_info>) {\r\n                    _Os << _CHRONO _Widen_string<_CharT>(_Val.abbrev);\r\n                } else if constexpr (is_same_v<_Ty, local_info>) {\r\n                    _Os << _CHRONO _Widen_string<_CharT>(_Val.first.abbrev);\r\n                } else if constexpr (_Is_specialization_v<_Ty, _Local_time_format_t>) {\r\n                    if (_Val._Abbrev == nullptr) {\r\n                        _STD _Throw_format_error(\"Cannot print local-time-format-t with null abbrev.\");\r\n                    }\r\n                    _Os << _CHRONO _Widen_string<_CharT>(*_Val._Abbrev);\r\n                } else {\r\n                    _Os << _Time_zone_abbreviation;\r\n                }\r\n                return true;\r\n            case 'z':\r\n                {\r\n                    hh_mm_ss<seconds> _Offset;\r\n\r\n                    if constexpr (is_same_v<_Ty, sys_info>) {\r\n                        _Offset = hh_mm_ss<seconds>{_Val.offset};\r\n                    } else if constexpr (is_same_v<_Ty, local_info>) {\r\n                        _Offset = hh_mm_ss<seconds>{_Val.first.offset};\r\n                    } else if constexpr (_Is_specialization_v<_Ty, _Local_time_format_t>) {\r\n                        if (_Val._Offset_sec == nullptr) {\r\n                            _STD _Throw_format_error(\"Cannot print local-time-format-t with null offset_sec.\");\r\n                        }\r\n                        _Offset = hh_mm_ss<seconds>{*_Val._Offset_sec};\r\n                    } else {\r\n                        _Offset = hh_mm_ss<seconds>{};\r\n                    }\r\n\r\n                    const auto _Sign = _Offset.is_negative() ? _CharT{'-'} : _CharT{'+'};\r\n                    const auto _Separator =\r\n                        _Has_modifier ? _STATICALLY_WIDEN(_CharT, \":\") : _STATICALLY_WIDEN(_CharT, \"\");\r\n\r\n                    _Os << _STD format(_STATICALLY_WIDEN(_CharT, \"{}{:02}{}{:02}\"), _Sign, _Offset.hours().count(),\r\n                        _Separator, _Offset.minutes().count());\r\n                    return true;\r\n                }\r\n            default:\r\n                return false;\r\n            }\r\n        }\r\n\r\n        template <class _Ty>\r\n        static void _Validate_specifiers(const _Chrono_spec<_CharT>& _Spec, const _Ty& _Val) {\r\n            if constexpr (_Is_specialization_v<_Ty, duration> || is_same_v<_Ty, sys_info>\r\n                          || _Is_specialization_v<_Ty, time_point> || _Is_specialization_v<_Ty, _Local_time_format_t>\r\n                          || _Is_specialization_v<_Ty, hh_mm_ss>) {\r\n                return;\r\n            } else {\r\n                const auto _Validate = [&] {\r\n                    constexpr bool _Is_ymd = _Is_any_of_v<_Ty, year_month_day, year_month_day_last, year_month_weekday,\r\n                        year_month_weekday_last>;\r\n\r\n                    switch (_Spec._Type) {\r\n                    case 'a':\r\n                    case 'A':\r\n                    case 'u':\r\n                    case 'w':\r\n                        if constexpr (_Is_any_of_v<_Ty, weekday, weekday_last>) {\r\n                            return _Val.ok();\r\n                        } else if constexpr (_Is_any_of_v<_Ty, weekday_indexed, year_month_weekday,\r\n                                                 year_month_weekday_last>) {\r\n                            return _Val.weekday().ok();\r\n                        } else if constexpr (is_same_v<_Ty, month_weekday>) {\r\n                            return _Val.weekday_indexed().weekday().ok();\r\n                        } else if constexpr (is_same_v<_Ty, month_weekday_last>) {\r\n                            return _Val.weekday_last().ok();\r\n                        } else if constexpr (_Is_any_of_v<_Ty, year_month_day, year_month_day_last>) {\r\n                            return _Val.ok();\r\n                        }\r\n                        break;\r\n\r\n                    case 'b':\r\n                    case 'B':\r\n                    case 'h':\r\n                    case 'm':\r\n                        if constexpr (is_same_v<_Ty, month>) {\r\n                            return _Val.ok();\r\n                        } else if constexpr (_Is_any_of_v<_Ty, month_day, month_day_last, month_weekday,\r\n                                                 month_weekday_last, year_month>\r\n                                             || _Is_ymd) {\r\n                            return _Val.month().ok();\r\n                        }\r\n                        break;\r\n\r\n                    case 'C':\r\n                    case 'y':\r\n                    case 'Y':\r\n                        if constexpr (is_same_v<_Ty, year>) {\r\n                            return _Val.ok();\r\n                        } else if constexpr (is_same_v<_Ty, year_month> || _Is_ymd) {\r\n                            return _Val.year().ok();\r\n                        }\r\n                        break;\r\n\r\n                    case 'd':\r\n                    case 'e':\r\n                        if constexpr (_Is_any_of_v<_Ty, day, month_day_last>) {\r\n                            return _Val.ok();\r\n                        } else if constexpr (is_same_v<_Ty, month_day>) {\r\n                            return _Val.day().ok();\r\n                        } else if constexpr (_Is_ymd) {\r\n                            const year_month_day& _Ymd{_Val};\r\n                            return _Ymd.day().ok();\r\n                        }\r\n                        break;\r\n\r\n                    case 'D':\r\n                    case 'F':\r\n                        if constexpr (_Has_ok<_Ty>) {\r\n                            return _Val.ok();\r\n                        }\r\n                        break;\r\n\r\n                    case 'j':\r\n                        if constexpr (is_same_v<_Ty, month_day>) {\r\n                            if (_Val.month() > February) {\r\n                                _STD _Throw_format_error(\"The day of year for a month_day past February is ambiguous.\");\r\n                            }\r\n                            return true;\r\n                        } else if constexpr (is_same_v<_Ty, month_day_last>) {\r\n                            if (_Val.month() >= February) {\r\n                                _STD _Throw_format_error(\r\n                                    \"The day of year for a month_day_last other than January is ambiguous\");\r\n                            }\r\n                            return true;\r\n                        } else if constexpr (_Is_ymd) {\r\n                            return _Val.ok();\r\n                        }\r\n                        break;\r\n\r\n                    case 'g':\r\n                    case 'G':\r\n                    case 'U':\r\n                    case 'V':\r\n                    case 'W':\r\n                        if constexpr (_Is_ymd) {\r\n                            return _Val.ok();\r\n                        }\r\n                        break;\r\n\r\n                    default:\r\n                        if constexpr (_Has_ok<_Ty>) {\r\n                            return _Val.ok();\r\n                        }\r\n                        return true;\r\n                    }\r\n                    _STL_INTERNAL_CHECK(false);\r\n                    return false;\r\n                };\r\n                if (!_Validate()) {\r\n                    _STD _Throw_format_error(\"Cannot localize out-of-bounds time point.\");\r\n                }\r\n            }\r\n        }\r\n\r\n        _Chrono_format_specs<_CharT> _Specs{};\r\n        basic_string_view<_CharT> _Time_zone_abbreviation{};\r\n    };\r\n} // namespace chrono\r\n\r\ntemplate <class _Ty, class _CharT>\r\nstruct _Fill_tm_formatter {\r\n    constexpr auto parse(basic_format_parse_context<_CharT>& _Parse_ctx) {\r\n        return _Impl.template _Parse<_Ty>(_Parse_ctx);\r\n    }\r\n\r\n    template <class _FormatContext>\r\n    auto format(const _Ty& _Val, _FormatContext& _Format_ctx) const {\r\n        return _Impl._Write(_Format_ctx, _Val, _CHRONO _Fill_tm(_Val));\r\n    }\r\n\r\nprivate:\r\n    _CHRONO _Chrono_formatter<_CharT> _Impl;\r\n};\r\n\r\n// Per LWG-3997, `_CharT` in library-provided `formatter` specializations is\r\n// constrained to character types supported by `format`.\r\n\r\ntemplate <class _Rep, class _Period, _Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO duration<_Rep, _Period>, _CharT>\r\n    : _Fill_tm_formatter<_CHRONO duration<_Rep, _Period>, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Rep, class _Period>\r\nconstexpr bool enable_nonlocking_formatter_optimization<_CHRONO duration<_Rep, _Period>> =\r\n    enable_nonlocking_formatter_optimization<_Rep>;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO day, _CharT> : _Fill_tm_formatter<_CHRONO day, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO day> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO month, _CharT> : _Fill_tm_formatter<_CHRONO month, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO month> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO year, _CharT> : _Fill_tm_formatter<_CHRONO year, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO year> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO weekday, _CharT> : _Fill_tm_formatter<_CHRONO weekday, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO weekday> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO weekday_indexed, _CharT> : _Fill_tm_formatter<_CHRONO weekday_indexed, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO weekday_indexed> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO weekday_last, _CharT> : _Fill_tm_formatter<_CHRONO weekday_last, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO weekday_last> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO month_day, _CharT> : _Fill_tm_formatter<_CHRONO month_day, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO month_day> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO month_day_last, _CharT> : _Fill_tm_formatter<_CHRONO month_day_last, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO month_day_last> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO month_weekday, _CharT> : _Fill_tm_formatter<_CHRONO month_weekday, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO month_weekday> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO month_weekday_last, _CharT> : _Fill_tm_formatter<_CHRONO month_weekday_last, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO month_weekday_last> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO year_month, _CharT> : _Fill_tm_formatter<_CHRONO year_month, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO year_month> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO year_month_day, _CharT> : _Fill_tm_formatter<_CHRONO year_month_day, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO year_month_day> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO year_month_day_last, _CharT> : _Fill_tm_formatter<_CHRONO year_month_day_last, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO year_month_day_last> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO year_month_weekday, _CharT> : _Fill_tm_formatter<_CHRONO year_month_weekday, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO year_month_weekday> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO year_month_weekday_last, _CharT>\r\n    : _Fill_tm_formatter<_CHRONO year_month_weekday_last, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO year_month_weekday_last> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Rep, class _Period, _Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO hh_mm_ss<_CHRONO duration<_Rep, _Period>>, _CharT>\r\n    : _Fill_tm_formatter<_CHRONO hh_mm_ss<_CHRONO duration<_Rep, _Period>>, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Rep, class _Period>\r\nconstexpr bool enable_nonlocking_formatter_optimization<_CHRONO hh_mm_ss<_CHRONO duration<_Rep, _Period>>> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO sys_info, _CharT> : _Fill_tm_formatter<_CHRONO sys_info, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO sys_info> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO local_info, _CharT> : _Fill_tm_formatter<_CHRONO local_info, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<_CHRONO local_info> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Duration, _Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO sys_time<_Duration>, _CharT> {\r\n    constexpr auto parse(basic_format_parse_context<_CharT>& _Parse_ctx) {\r\n        return _Impl.template _Parse<_CHRONO sys_time<_Duration>>(_Parse_ctx);\r\n    }\r\n\r\n    template <class _FormatContext>\r\n    auto format(const _CHRONO sys_time<_Duration>& _Val, _FormatContext& _Format_ctx) const {\r\n        return _Impl._Write(_Format_ctx, _Val, _CHRONO _Fill_tm(_Val));\r\n    }\r\n\r\nprivate:\r\n    _CHRONO _Chrono_formatter<_CharT> _Impl{_STATICALLY_WIDEN(_CharT, \"UTC\")};\r\n};\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Duration>\r\nconstexpr bool enable_nonlocking_formatter_optimization<_CHRONO sys_time<_Duration>> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Duration, _Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO utc_time<_Duration>, _CharT> {\r\n    constexpr auto parse(basic_format_parse_context<_CharT>& _Parse_ctx) {\r\n        return _Impl.template _Parse<_CHRONO utc_time<_Duration>>(_Parse_ctx);\r\n    }\r\n\r\n    template <class _FormatContext>\r\n    auto format(const _CHRONO utc_time<_Duration>& _Val, _FormatContext& _Format_ctx) const {\r\n        const auto _Sys = _CHRONO utc_clock::to_sys(_Val);\r\n        return _Impl._Write(_Format_ctx, _Val, _CHRONO _Fill_tm(_Sys));\r\n    }\r\n\r\nprivate:\r\n    _CHRONO _Chrono_formatter<_CharT> _Impl{_STATICALLY_WIDEN(_CharT, \"UTC\")};\r\n};\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Duration>\r\nconstexpr bool enable_nonlocking_formatter_optimization<_CHRONO utc_time<_Duration>> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Duration, _Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO tai_time<_Duration>, _CharT> {\r\n    constexpr auto parse(basic_format_parse_context<_CharT>& _Parse_ctx) {\r\n        return _Impl.template _Parse<_CHRONO tai_time<_Duration>>(_Parse_ctx);\r\n    }\r\n\r\n    template <class _FormatContext>\r\n    auto format(const _CHRONO tai_time<_Duration>& _Val, _FormatContext& _Format_ctx) const {\r\n        using namespace chrono;\r\n        using _Common = common_type_t<_Duration, days>; // slightly optimize by performing conversion at compile time\r\n        constexpr _Common _Offset{sys_days{year{1970} / January / 1} - sys_days{year{1958} / January / 1}};\r\n        const auto _Sys = sys_time<_Duration>{_Val.time_since_epoch()} - _Offset;\r\n        return _Impl._Write(_Format_ctx, _Val, _CHRONO _Fill_tm(_Sys));\r\n    }\r\n\r\nprivate:\r\n    _CHRONO _Chrono_formatter<_CharT> _Impl{_STATICALLY_WIDEN(_CharT, \"TAI\")};\r\n};\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Duration>\r\nconstexpr bool enable_nonlocking_formatter_optimization<_CHRONO tai_time<_Duration>> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Duration, _Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO gps_time<_Duration>, _CharT> {\r\n    constexpr auto parse(basic_format_parse_context<_CharT>& _Parse_ctx) {\r\n        return _Impl.template _Parse<_CHRONO gps_time<_Duration>>(_Parse_ctx);\r\n    }\r\n\r\n    template <class _FormatContext>\r\n    auto format(const _CHRONO gps_time<_Duration>& _Val, _FormatContext& _Format_ctx) const {\r\n        using namespace chrono;\r\n        using _Common = common_type_t<_Duration, days>; // slightly optimize by performing conversion at compile time\r\n        constexpr _Common _Offset{sys_days{year{1980} / January / Sunday[1]} - sys_days{year{1970} / January / 1}};\r\n        const auto _Sys = sys_time<_Duration>{_Val.time_since_epoch()} + _Offset;\r\n        return _Impl._Write(_Format_ctx, _Val, _CHRONO _Fill_tm(_Sys));\r\n    }\r\n\r\nprivate:\r\n    _CHRONO _Chrono_formatter<_CharT> _Impl{_STATICALLY_WIDEN(_CharT, \"GPS\")};\r\n};\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Duration>\r\nconstexpr bool enable_nonlocking_formatter_optimization<_CHRONO gps_time<_Duration>> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Duration, _Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO file_time<_Duration>, _CharT> {\r\n    constexpr auto parse(basic_format_parse_context<_CharT>& _Parse_ctx) {\r\n        return _Impl.template _Parse<_CHRONO file_time<_Duration>>(_Parse_ctx);\r\n    }\r\n\r\n    template <class _FormatContext>\r\n    auto format(const _CHRONO file_time<_Duration>& _Val, _FormatContext& _Format_ctx) const {\r\n        const auto _Utc = _CHRONO file_clock::to_utc(_Val);\r\n        const auto _Sys = _CHRONO utc_clock::to_sys(_Utc);\r\n        return _Impl._Write(_Format_ctx, _Utc, _CHRONO _Fill_tm(_Sys));\r\n    }\r\n\r\nprivate:\r\n    _CHRONO _Chrono_formatter<_CharT> _Impl{_STATICALLY_WIDEN(_CharT, \"UTC\")};\r\n};\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Duration>\r\nconstexpr bool enable_nonlocking_formatter_optimization<_CHRONO file_time<_Duration>> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Duration, _Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO local_time<_Duration>, _CharT> : _Fill_tm_formatter<_CHRONO local_time<_Duration>, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Duration>\r\nconstexpr bool enable_nonlocking_formatter_optimization<_CHRONO local_time<_Duration>> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Duration, _Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO _Local_time_format_t<_Duration>, _CharT>\r\n    : _Fill_tm_formatter<_CHRONO _Local_time_format_t<_Duration>, _CharT> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Duration>\r\nconstexpr bool enable_nonlocking_formatter_optimization<_CHRONO _Local_time_format_t<_Duration>> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Duration, class _TimeZonePtr, _Format_supported_charT _CharT>\r\nstruct formatter<_CHRONO zoned_time<_Duration, _TimeZonePtr>, _CharT>\r\n    : formatter<_CHRONO _Local_time_format_t<common_type_t<_Duration, _CHRONO seconds>>, _CharT> {\r\n    template <class _FormatContext>\r\n    auto format(const _CHRONO zoned_time<_Duration, _TimeZonePtr>& _Val, _FormatContext& _Format_ctx) const {\r\n        using _Mybase    = formatter<_CHRONO _Local_time_format_t<common_type_t<_Duration, _CHRONO seconds>>, _CharT>;\r\n        const auto _Info = _Val.get_info();\r\n        return _Mybase::format({_Val.get_local_time(), &_Info.abbrev, &_Info.offset}, _Format_ctx);\r\n    }\r\n};\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Duration>\r\nconstexpr bool enable_nonlocking_formatter_optimization<_CHRONO zoned_time<_Duration, const _CHRONO time_zone*>> = true;\r\n#endif // _HAS_CXX23\r\n\r\nnamespace chrono {\r\n    template <class _Duration>\r\n    _NODISCARD string nonexistent_local_time::_Make_string(const local_time<_Duration>& _Tp, const local_info& _Info) {\r\n        ostringstream _Os;\r\n        _Os << _Tp << \" is in a gap between\\n\"\r\n            << local_seconds{_Info.first.end.time_since_epoch()} + _Info.first.offset << ' ' << _Info.first.abbrev\r\n            << \" and\\n\"\r\n            << local_seconds{_Info.second.begin.time_since_epoch()} + _Info.second.offset << ' ' << _Info.second.abbrev\r\n            << \" which are both equivalent to\\n\"\r\n            << _Info.first.end << \" UTC\";\r\n        return _STD move(_Os).str();\r\n    }\r\n\r\n    template <class _Duration>\r\n    _NODISCARD string ambiguous_local_time::_Make_string(const local_time<_Duration>& _Tp, const local_info& _Info) {\r\n        ostringstream _Os;\r\n        _Os << _Tp << \" is ambiguous.  It could be\\n\"\r\n            << _Tp << ' ' << _Info.first.abbrev << \" == \" << _Tp - _Info.first.offset << \" UTC or\\n\"\r\n            << _Tp << ' ' << _Info.second.abbrev << \" == \" << _Tp - _Info.second.offset << \" UTC\";\r\n        return _STD move(_Os).str();\r\n    }\r\n} // namespace chrono\r\n#endif // _HAS_CXX20\r\n\r\ninline namespace literals {\r\n    inline namespace chrono_literals {\r\n        _EXPORT_STD _NODISCARD constexpr _CHRONO hours operator\"\"h(unsigned long long _Val) noexcept\r\n        /* strengthened */ {\r\n            return _CHRONO hours(_Val);\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr _CHRONO duration<double, ratio<3600>> operator\"\"h(long double _Val) noexcept\r\n        /* strengthened */ {\r\n            return _CHRONO duration<double, ratio<3600>>(_Val);\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr _CHRONO minutes operator\"\"min(unsigned long long _Val) noexcept\r\n        /* strengthened */ {\r\n            return _CHRONO minutes(_Val);\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr _CHRONO duration<double, ratio<60>> operator\"\"min(long double _Val) noexcept\r\n        /* strengthened */ {\r\n            return _CHRONO duration<double, ratio<60>>(_Val);\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr _CHRONO seconds operator\"\"s(unsigned long long _Val) noexcept\r\n        /* strengthened */ {\r\n            return _CHRONO seconds(_Val);\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr _CHRONO duration<double> operator\"\"s(long double _Val) noexcept\r\n        /* strengthened */ {\r\n            return _CHRONO duration<double>(_Val);\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr _CHRONO milliseconds operator\"\"ms(unsigned long long _Val) noexcept\r\n        /* strengthened */ {\r\n            return _CHRONO milliseconds(_Val);\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr _CHRONO duration<double, milli> operator\"\"ms(long double _Val) noexcept\r\n        /* strengthened */ {\r\n            return _CHRONO duration<double, milli>(_Val);\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr _CHRONO microseconds operator\"\"us(unsigned long long _Val) noexcept\r\n        /* strengthened */ {\r\n            return _CHRONO microseconds(_Val);\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr _CHRONO duration<double, micro> operator\"\"us(long double _Val) noexcept\r\n        /* strengthened */ {\r\n            return _CHRONO duration<double, micro>(_Val);\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr _CHRONO nanoseconds operator\"\"ns(unsigned long long _Val) noexcept\r\n        /* strengthened */ {\r\n            return _CHRONO nanoseconds(_Val);\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr _CHRONO duration<double, nano> operator\"\"ns(long double _Val) noexcept\r\n        /* strengthened */ {\r\n            return _CHRONO duration<double, nano>(_Val);\r\n        }\r\n\r\n#if _HAS_CXX20\r\n        _EXPORT_STD _NODISCARD constexpr _CHRONO day operator\"\"d(unsigned long long _Day) noexcept {\r\n            return _CHRONO day{static_cast<unsigned int>(_Day)};\r\n        }\r\n        _EXPORT_STD _NODISCARD constexpr _CHRONO year operator\"\"y(unsigned long long _Year) noexcept {\r\n            return _CHRONO year{static_cast<int>(_Year)};\r\n        }\r\n#endif // _HAS_CXX20\r\n    } // namespace chrono_literals\r\n} // namespace literals\r\n\r\nnamespace chrono {\r\n    _EXPORT_STD using namespace literals::chrono_literals;\r\n} // namespace chrono\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CHRONO_\r\n"
  },
  {
    "path": "stl/inc/cinttypes",
    "content": "// cinttypes standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CINTTYPES_\r\n#define _CINTTYPES_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <cstdint>\r\n#include <inttypes.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD using _CSTD imaxdiv_t; // from <inttypes.h>\r\n\r\n_EXPORT_STD using _CSTD imaxabs;\r\n_EXPORT_STD using _CSTD imaxdiv;\r\n_EXPORT_STD using _CSTD strtoimax;\r\n_EXPORT_STD using _CSTD strtoumax;\r\n_EXPORT_STD using _CSTD wcstoimax;\r\n_EXPORT_STD using _CSTD wcstoumax;\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CINTTYPES_\r\n"
  },
  {
    "path": "stl/inc/ciso646",
    "content": "// ciso646 standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CISO646_\r\n#define _CISO646_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <iso646.h>\r\n\r\nusing _Header_ciso646 _CXX20_REMOVE_CISO646 = int;\r\nusing _Hdr_ciso646                          = _Header_ciso646;\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CISO646_\r\n"
  },
  {
    "path": "stl/inc/climits",
    "content": "// climits standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CLIMITS_\r\n#define _CLIMITS_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <limits.h>\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CLIMITS_\r\n"
  },
  {
    "path": "stl/inc/clocale",
    "content": "// clocale standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CLOCALE_\r\n#define _CLOCALE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <locale.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD using _CSTD lconv;\r\n_EXPORT_STD using _CSTD localeconv;\r\n_EXPORT_STD using _CSTD setlocale;\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CLOCALE_\r\n"
  },
  {
    "path": "stl/inc/cmath",
    "content": "// cmath standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CMATH_\r\n#define _CMATH_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <cstdlib>\r\n#include <xtr1common>\r\n\r\n#if !defined(__clang__) && !defined(_M_CEE) // TRANSITION, VSO-1663104\r\n#define _HAS_CMATH_INTRINSICS 1\r\n#else // ^^^ intrinsics available / intrinsics unavailable vvv\r\n#define _HAS_CMATH_INTRINSICS 0\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n\r\n#if _HAS_CMATH_INTRINSICS\r\n#include _STL_INTRIN_HEADER\r\n#endif // _HAS_CMATH_INTRINSICS\r\n\r\n#if _HAS_CXX20\r\n#include <type_traits>\r\n#endif // _HAS_CXX20\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_EXTERN_CXX_WORKAROUND\r\n_NODISCARD _Check_return_ inline float acos(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD acosf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float acosh(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD acoshf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float asin(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD asinf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float asinh(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD asinhf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float atan(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD atanf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float atanh(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD atanhf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float atan2(_In_ float _Yx, _In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD atan2f(_Yx, _Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float cbrt(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD cbrtf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float ceil(_In_ float _Xx) noexcept /* strengthened */ {\r\n#if _HAS_CMATH_INTRINSICS\r\n    return __ceilf(_Xx);\r\n#elif defined(__clang__)\r\n    return __builtin_ceilf(_Xx);\r\n#else // ^^^ defined(__clang__) / intrinsics unavailable vvv\r\n    return _CSTD ceilf(_Xx);\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float copysign(_In_ float _Number, _In_ float _Sign) noexcept /* strengthened */ {\r\n#if _HAS_CMATH_INTRINSICS\r\n    return __copysignf(_Number, _Sign);\r\n#elif defined(__clang__)\r\n    return __builtin_copysignf(_Number, _Sign);\r\n#else // ^^^ defined(__clang__) / intrinsics unavailable vvv\r\n    return _CSTD copysignf(_Number, _Sign);\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float cos(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD cosf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float cosh(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD coshf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float erf(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD erff(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float erfc(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD erfcf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float exp(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD expf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float exp2(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD exp2f(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float expm1(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD expm1f(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float fabs(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD fabsf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float fdim(_In_ float _Xx, _In_ float _Yx) noexcept /* strengthened */ {\r\n    return _CSTD fdimf(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float floor(_In_ float _Xx) noexcept /* strengthened */ {\r\n#if _HAS_CMATH_INTRINSICS\r\n    return __floorf(_Xx);\r\n#elif defined(__clang__)\r\n    return __builtin_floorf(_Xx);\r\n#else // ^^^ defined(__clang__) / intrinsics unavailable vvv\r\n    return _CSTD floorf(_Xx);\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float fma(_In_ float _Xx, _In_ float _Yx, _In_ float _Zx) noexcept /* strengthened */ {\r\n    return _CSTD fmaf(_Xx, _Yx, _Zx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float fmax(_In_ float _Xx, _In_ float _Yx) noexcept /* strengthened */ {\r\n    return _CSTD fmaxf(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float fmin(_In_ float _Xx, _In_ float _Yx) noexcept /* strengthened */ {\r\n    return _CSTD fminf(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float fmod(_In_ float _Xx, _In_ float _Yx) noexcept /* strengthened */ {\r\n    return _CSTD fmodf(_Xx, _Yx);\r\n}\r\n\r\ninline float frexp(_In_ float _Xx, _Out_ int* _Yx) noexcept /* strengthened */ {\r\n    return _CSTD frexpf(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float hypot(_In_ float _Xx, _In_ float _Yx) noexcept /* strengthened */ {\r\n    return _CSTD hypotf(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline int ilogb(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD ilogbf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float ldexp(_In_ float _Xx, _In_ int _Yx) noexcept /* strengthened */ {\r\n    return _CSTD ldexpf(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float lgamma(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD lgammaf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long long llrint(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD llrintf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long long llround(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD llroundf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float log(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD logf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float log10(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD log10f(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float log1p(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD log1pf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float log2(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD log2f(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float logb(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD logbf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long lrint(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD lrintf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long lround(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD lroundf(_Xx);\r\n}\r\n\r\ninline float modf(_In_ float _Xx, _Out_ float* _Yx) noexcept /* strengthened */ {\r\n    return _CSTD modff(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float nearbyint(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD nearbyintf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float nextafter(_In_ float _Xx, _In_ float _Yx) noexcept /* strengthened */ {\r\n    return _CSTD nextafterf(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float nexttoward(_In_ float _Xx, _In_ long double _Yx) noexcept /* strengthened */ {\r\n    return _CSTD nexttowardf(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float pow(_In_ float _Xx, _In_ float _Yx) noexcept /* strengthened */ {\r\n    return _CSTD powf(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float remainder(_In_ float _Xx, _In_ float _Yx) noexcept /* strengthened */ {\r\n    return _CSTD remainderf(_Xx, _Yx);\r\n}\r\n\r\ninline float remquo(_In_ float _Xx, _In_ float _Yx, _Out_ int* _Zx) noexcept /* strengthened */ {\r\n    return _CSTD remquof(_Xx, _Yx, _Zx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float rint(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD rintf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float round(_In_ float _Xx) noexcept /* strengthened */ {\r\n#if _HAS_CMATH_INTRINSICS\r\n    return __roundf(_Xx);\r\n#elif defined(__clang__)\r\n    return __builtin_roundf(_Xx);\r\n#else // ^^^ defined(__clang__) / intrinsics unavailable vvv\r\n    return _CSTD roundf(_Xx);\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float scalbln(_In_ float _Xx, _In_ long _Yx) noexcept /* strengthened */ {\r\n    return _CSTD scalblnf(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float scalbn(_In_ float _Xx, _In_ int _Yx) noexcept /* strengthened */ {\r\n    return _CSTD scalbnf(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float sin(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD sinf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float sinh(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD sinhf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float sqrt(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD sqrtf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float tan(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD tanf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float tanh(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD tanhf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float tgamma(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD tgammaf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float trunc(_In_ float _Xx) noexcept /* strengthened */ {\r\n#if _HAS_CMATH_INTRINSICS\r\n    return __truncf(_Xx);\r\n#elif defined(__clang__)\r\n    return __builtin_truncf(_Xx);\r\n#else // ^^^ defined(__clang__) / intrinsics unavailable vvv\r\n    return _CSTD truncf(_Xx);\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double acos(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD acosl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double acosh(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD acoshl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double asin(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD asinl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double asinh(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD asinhl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double atan(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD atanl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double atanh(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD atanhl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double atan2(_In_ long double _Yx, _In_ long double _Xx) noexcept\r\n/* strengthened */ {\r\n    return _CSTD atan2l(_Yx, _Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double cbrt(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD cbrtl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double ceil(_In_ long double _Xx) noexcept /* strengthened */ {\r\n#if _HAS_CMATH_INTRINSICS\r\n    return __ceil(static_cast<double>(_Xx));\r\n#elif defined(__clang__)\r\n    return __builtin_ceill(_Xx);\r\n#else // ^^^ defined(__clang__) / intrinsics unavailable vvv\r\n    return _CSTD ceill(_Xx);\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double copysign(_In_ long double _Number, _In_ long double _Sign) noexcept\r\n/* strengthened */ {\r\n#if _HAS_CMATH_INTRINSICS\r\n    return __copysign(static_cast<double>(_Number), static_cast<double>(_Sign));\r\n#elif defined(__clang__)\r\n    return __builtin_copysignl(_Number, _Sign);\r\n#else // ^^^ defined(__clang__) / intrinsics unavailable vvv\r\n    return _CSTD copysignl(_Number, _Sign);\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double cos(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD cosl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double cosh(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD coshl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double erf(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD erfl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double erfc(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD erfcl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double exp(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD expl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double exp2(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD exp2l(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double expm1(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD expm1l(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double fabs(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD fabsl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double fdim(_In_ long double _Xx, _In_ long double _Yx) noexcept\r\n/* strengthened */ {\r\n    return _CSTD fdiml(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double floor(_In_ long double _Xx) noexcept /* strengthened */ {\r\n#if _HAS_CMATH_INTRINSICS\r\n    return __floor(static_cast<double>(_Xx));\r\n#elif defined(__clang__)\r\n    return __builtin_floorl(_Xx);\r\n#else // ^^^ defined(__clang__) / intrinsics unavailable vvv\r\n    return _CSTD floorl(_Xx);\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double fma(\r\n    _In_ long double _Xx, _In_ long double _Yx, _In_ long double _Zx) noexcept /* strengthened */ {\r\n    return _CSTD fmal(_Xx, _Yx, _Zx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double fmax(_In_ long double _Xx, _In_ long double _Yx) noexcept\r\n/* strengthened */ {\r\n    return _CSTD fmaxl(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double fmin(_In_ long double _Xx, _In_ long double _Yx) noexcept\r\n/* strengthened */ {\r\n    return _CSTD fminl(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double fmod(_In_ long double _Xx, _In_ long double _Yx) noexcept\r\n/* strengthened */ {\r\n    return _CSTD fmodl(_Xx, _Yx);\r\n}\r\n\r\ninline long double frexp(_In_ long double _Xx, _Out_ int* _Yx) noexcept /* strengthened */ {\r\n    return _CSTD frexpl(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double hypot(_In_ long double _Xx, _In_ long double _Yx) noexcept\r\n/* strengthened */ {\r\n    return _CSTD hypotl(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline int ilogb(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD ilogbl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double ldexp(_In_ long double _Xx, _In_ int _Yx) noexcept /* strengthened */ {\r\n    return _CSTD ldexpl(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double lgamma(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD lgammal(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long long llrint(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD llrintl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long long llround(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD llroundl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double log(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD logl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double log10(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD log10l(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double log1p(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD log1pl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double log2(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD log2l(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double logb(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD logbl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long lrint(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD lrintl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long lround(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD lroundl(_Xx);\r\n}\r\n\r\ninline long double modf(_In_ long double _Xx, _Out_ long double* _Yx) noexcept /* strengthened */ {\r\n    return _CSTD modfl(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double nearbyint(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD nearbyintl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double nextafter(_In_ long double _Xx, _In_ long double _Yx) noexcept\r\n/* strengthened */ {\r\n    return _CSTD nextafterl(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double nexttoward(_In_ long double _Xx, _In_ long double _Yx) noexcept\r\n/* strengthened */ {\r\n    return _CSTD nexttowardl(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double pow(_In_ long double _Xx, _In_ long double _Yx) noexcept\r\n/* strengthened */ {\r\n    return _CSTD powl(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double remainder(_In_ long double _Xx, _In_ long double _Yx) noexcept\r\n/* strengthened */ {\r\n    return _CSTD remainderl(_Xx, _Yx);\r\n}\r\n\r\ninline long double remquo(_In_ long double _Xx, _In_ long double _Yx, _Out_ int* _Zx) noexcept /* strengthened */ {\r\n    return _CSTD remquol(_Xx, _Yx, _Zx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double rint(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD rintl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double round(_In_ long double _Xx) noexcept /* strengthened */ {\r\n#if _HAS_CMATH_INTRINSICS\r\n    return __round(static_cast<double>(_Xx));\r\n#elif defined(__clang__)\r\n    return __builtin_roundl(_Xx);\r\n#else // ^^^ defined(__clang__) / intrinsics unavailable vvv\r\n    return _CSTD roundl(_Xx);\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double scalbln(_In_ long double _Xx, _In_ long _Yx) noexcept /* strengthened */ {\r\n    return _CSTD scalblnl(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double scalbn(_In_ long double _Xx, _In_ int _Yx) noexcept /* strengthened */ {\r\n    return _CSTD scalbnl(_Xx, _Yx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double sin(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD sinl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double sinh(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD sinhl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double sqrt(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD sqrtl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double tan(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD tanl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double tanh(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD tanhl(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double tgamma(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD tgammal(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double trunc(_In_ long double _Xx) noexcept /* strengthened */ {\r\n#if _HAS_CMATH_INTRINSICS\r\n    return __trunc(static_cast<double>(_Xx));\r\n#elif defined(__clang__)\r\n    return __builtin_truncl(_Xx);\r\n#else // ^^^ defined(__clang__) / intrinsics unavailable vvv\r\n    return _CSTD truncl(_Xx);\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n}\r\n_END_EXTERN_CXX_WORKAROUND\r\n\r\n_STD_BEGIN\r\ntemplate <class _Ty1, class _Ty2>\r\nusing _Common_float_type_t = conditional_t<is_same_v<_Ty1, long double> || is_same_v<_Ty2, long double>, long double,\r\n    conditional_t<is_same_v<_Ty1, float> && is_same_v<_Ty2, float>, float,\r\n        double>>; // find type for two-argument math function\r\n_STD_END\r\n\r\n_EXTERN_CXX_WORKAROUND\r\ntemplate <class _Ty, _STD enable_if_t<_STD is_integral_v<_Ty>, int> = 0>\r\ndouble frexp(_Ty _Value, _Out_ int* const _Exp) noexcept /* strengthened */ {\r\n    return _CSTD frexp(static_cast<double>(_Value), _Exp);\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2, _STD enable_if_t<_STD is_arithmetic_v<_Ty1> && _STD is_arithmetic_v<_Ty2>, int> = 0>\r\n_NODISCARD _STD _Common_float_type_t<_Ty1, _Ty2> pow(_Ty1 _Left, _Ty2 _Right) noexcept /* strengthened */ {\r\n    if constexpr (_STD _Is_nonbool_integral<_Ty2>) {\r\n        if (_Right == 2) {\r\n            return static_cast<double>(_Left) * static_cast<double>(_Left); // TRANSITION, see GH-5768\r\n        }\r\n    }\r\n\r\n    return _CSTD pow(static_cast<double>(_Left), static_cast<double>(_Right));\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2, class _Ty3,\r\n    _STD enable_if_t<_STD is_arithmetic_v<_Ty1> && _STD is_arithmetic_v<_Ty2> && _STD is_arithmetic_v<_Ty3>, int> = 0>\r\n_NODISCARD _STD _Common_float_type_t<_Ty1, _STD _Common_float_type_t<_Ty2, _Ty3>> fma(\r\n    _Ty1 _Left, _Ty2 _Middle, _Ty3 _Right) noexcept /* strengthened */ {\r\n    using _Common = _STD _Common_float_type_t<_Ty1, _STD _Common_float_type_t<_Ty2, _Ty3>>;\r\n    if constexpr (_STD is_same_v<_Common, float>) {\r\n        return _CSTD fmaf(static_cast<_Common>(_Left), static_cast<_Common>(_Middle), static_cast<_Common>(_Right));\r\n    } else if constexpr (_STD is_same_v<_Common, double>) {\r\n        return _CSTD fma(static_cast<_Common>(_Left), static_cast<_Common>(_Middle), static_cast<_Common>(_Right));\r\n    } else {\r\n        return _CSTD fmal(static_cast<_Common>(_Left), static_cast<_Common>(_Middle), static_cast<_Common>(_Right));\r\n    }\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2, _STD enable_if_t<_STD is_arithmetic_v<_Ty1> && _STD is_arithmetic_v<_Ty2>, int> = 0>\r\n_STD _Common_float_type_t<_Ty1, _Ty2> remquo(_Ty1 _Left, _Ty2 _Right, int* _Pquo) noexcept /* strengthened */ {\r\n    using _Common = _STD _Common_float_type_t<_Ty1, _Ty2>;\r\n    if constexpr (_STD is_same_v<_Common, float>) {\r\n        return _CSTD remquof(static_cast<_Common>(_Left), static_cast<_Common>(_Right), _Pquo);\r\n    } else if constexpr (_STD is_same_v<_Common, double>) {\r\n        return _CSTD remquo(static_cast<_Common>(_Left), static_cast<_Common>(_Right), _Pquo);\r\n    } else {\r\n        return _CSTD remquol(static_cast<_Common>(_Left), static_cast<_Common>(_Right), _Pquo);\r\n    }\r\n}\r\n\r\n#ifdef __clang__\r\n// Clang provides efficient builtins; see GH-4609.\r\n// TRANSITION, the UCRT's function templates should take advantage of these builtins.\r\n// As a workaround, we can provide additional overloads that will be\r\n// preferred by overload resolution when the types exactly match.\r\n\r\n#define _CLANG_BUILTIN1_ARG(NAME, ARG)                                                           \\\r\n    _NODISCARD _Check_return_ _CONSTEXPR23 bool NAME(_In_ ARG _Xx) noexcept /* strengthened */ { \\\r\n        return __builtin_##NAME(_Xx);                                                            \\\r\n    }\r\n\r\n// Updated by P0533R9 \"constexpr For <cmath> And <cstdlib>\".\r\n#define _CLANG_BUILTIN2_ARG(NAME, ARG)                                                                      \\\r\n    _NODISCARD _Check_return_ constexpr bool NAME(_In_ ARG _Xx, _In_ ARG _Yx) noexcept /* strengthened */ { \\\r\n        return __builtin_##NAME(_Xx, _Yx);                                                                  \\\r\n    }\r\n\r\n#define _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, ARG)                                                            \\\r\n    template <class _Ty, _STD enable_if_t<_STD is_arithmetic_v<_Ty>, int> = 0>                              \\\r\n    _NODISCARD _Check_return_ constexpr bool NAME(_In_ ARG _Xx, _In_ _Ty _Yx) noexcept /* strengthened */ { \\\r\n        return __builtin_##NAME(static_cast<double>(_Xx), static_cast<double>(_Yx));                        \\\r\n    }\r\n\r\n#ifdef __cpp_char8_t\r\n#define _CLANG_BUILTIN2_ARG_TEMPLATED_CHAR8_T(NAME)                                                             \\\r\n    template <class _Ty, _STD enable_if_t<_STD is_arithmetic_v<_Ty>, int> = 0>                                  \\\r\n    _NODISCARD _Check_return_ constexpr bool NAME(_In_ char8_t _Xx, _In_ _Ty _Yx) noexcept /* strengthened */ { \\\r\n        return __builtin_##NAME(static_cast<double>(_Xx), static_cast<double>(_Yx));                            \\\r\n    }\r\n#else // ^^^ defined(__cpp_char8_t) / !defined(__cpp_char8_t) vvv\r\n#define _CLANG_BUILTIN2_ARG_TEMPLATED_CHAR8_T(NAME)\r\n#endif // ^^^ !defined(__cpp_char8_t) ^^^\r\n\r\n#ifdef _NATIVE_WCHAR_T_DEFINED\r\n#define _CLANG_BUILTIN2_ARG_TEMPLATED_WCHAR_T(NAME)                                                             \\\r\n    template <class _Ty, _STD enable_if_t<_STD is_arithmetic_v<_Ty>, int> = 0>                                  \\\r\n    _NODISCARD _Check_return_ constexpr bool NAME(_In_ wchar_t _Xx, _In_ _Ty _Yx) noexcept /* strengthened */ { \\\r\n        return __builtin_##NAME(static_cast<double>(_Xx), static_cast<double>(_Yx));                            \\\r\n    }\r\n#else // ^^^ defined(_NATIVE_WCHAR_T_DEFINED) / !defined(_NATIVE_WCHAR_T_DEFINED) vvv\r\n#define _CLANG_BUILTIN2_ARG_TEMPLATED_WCHAR_T(NAME)\r\n#endif // ^^^ !defined(_NATIVE_WCHAR_T_DEFINED) ^^^\r\n\r\n#define _CLANG_BUILTIN2_TEMPLATED(NAME)                     \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, float)              \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, double)             \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, long double)        \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, signed char)        \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, short)              \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, int)                \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, long)               \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, long long)          \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, unsigned char)      \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, unsigned short)     \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, unsigned int)       \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, unsigned long)      \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, unsigned long long) \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, bool)               \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, char)               \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED_CHAR8_T(NAME)             \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, char16_t)           \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED(NAME, char32_t)           \\\r\n    _CLANG_BUILTIN2_ARG_TEMPLATED_WCHAR_T(NAME)\r\n\r\n#define _CLANG_BUILTIN1(NAME)         \\\r\n    _CLANG_BUILTIN1_ARG(NAME, float)  \\\r\n    _CLANG_BUILTIN1_ARG(NAME, double) \\\r\n    _CLANG_BUILTIN1_ARG(NAME, long double)\r\n\r\n#define _CLANG_BUILTIN2(NAME)         \\\r\n    _CLANG_BUILTIN2_ARG(NAME, float)  \\\r\n    _CLANG_BUILTIN2_ARG(NAME, double) \\\r\n    _CLANG_BUILTIN2_ARG(NAME, long double)\r\n\r\n_STL_DISABLE_CLANG_WARNING_NAN_INF_DISABLED\r\n_CLANG_BUILTIN1(isfinite)\r\n_CLANG_BUILTIN1(isinf)\r\n_CLANG_BUILTIN1(isnan)\r\n_STL_RESTORE_CLANG_WARNING_NAN_INF_DISABLED\r\n_CLANG_BUILTIN1(isnormal)\r\n\r\n_CLANG_BUILTIN2(isgreater)\r\n_CLANG_BUILTIN2(isgreaterequal)\r\n_CLANG_BUILTIN2(isless)\r\n_CLANG_BUILTIN2(islessequal)\r\n_CLANG_BUILTIN2(islessgreater)\r\n_STL_DISABLE_CLANG_WARNING_NAN_INF_DISABLED\r\n_CLANG_BUILTIN2(isunordered)\r\n_STL_RESTORE_CLANG_WARNING_NAN_INF_DISABLED\r\n\r\n_CLANG_BUILTIN2_TEMPLATED(isgreater)\r\n_CLANG_BUILTIN2_TEMPLATED(isgreaterequal)\r\n_CLANG_BUILTIN2_TEMPLATED(isless)\r\n_CLANG_BUILTIN2_TEMPLATED(islessequal)\r\n_CLANG_BUILTIN2_TEMPLATED(islessgreater)\r\n_STL_DISABLE_CLANG_WARNING_NAN_INF_DISABLED\r\n_CLANG_BUILTIN2_TEMPLATED(isunordered)\r\n_STL_RESTORE_CLANG_WARNING_NAN_INF_DISABLED\r\n\r\n#undef _CLANG_BUILTIN1_ARG\r\n#undef _CLANG_BUILTIN2_ARG\r\n#undef _CLANG_BUILTIN1\r\n#undef _CLANG_BUILTIN2\r\n#undef _CLANG_BUILTIN2_ARG_TEMPLATED\r\n#undef _CLANG_BUILTIN2_ARG_TEMPLATED_CHAR8_T\r\n#undef _CLANG_BUILTIN2_ARG_TEMPLATED_WCHAR_T\r\n#undef _CLANG_BUILTIN2_TEMPLATED\r\n#endif // ^^^ defined(__clang__) ^^^\r\n\r\n// TRANSITION, DevCom-10294165, should be provided by UCRT\r\ntemplate <class _Ty, _STD enable_if_t<_STD is_integral_v<_Ty>, int> = 0>\r\n_NODISCARD _Check_return_ _CONSTEXPR23 int fpclassify(_In_ const _Ty _Ix) noexcept /* strengthened */ {\r\n    return _Ix == 0 ? FP_ZERO : FP_NORMAL;\r\n}\r\n\r\n// TRANSITION, DevCom-10294165, should be provided by UCRT\r\ntemplate <class _Ty, _STD enable_if_t<_STD is_integral_v<_Ty>, int> = 0>\r\n_NODISCARD _Check_return_ _CONSTEXPR23 bool signbit(_In_ const _Ty _Ix) noexcept /* strengthened */ {\r\n    if constexpr (static_cast<_Ty>(-1) < _Ty{}) {\r\n        return _Ix < 0;\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\n// TRANSITION, DevCom-10294165, additional overloads are not templated to avoid ambiguity with the overload in UCRT\r\n#define _GENERIC_MATH_ISNORMAL(TYPE)                                                                        \\\r\n    _NODISCARD _Check_return_ _CONSTEXPR23 bool isnormal(_In_ const TYPE _Ix) noexcept /* strengthened */ { \\\r\n        return _Ix != 0;                                                                                    \\\r\n    }\r\n\r\n_GENERIC_MATH_ISNORMAL(signed char)\r\n_GENERIC_MATH_ISNORMAL(unsigned char)\r\n_GENERIC_MATH_ISNORMAL(short)\r\n_GENERIC_MATH_ISNORMAL(unsigned short)\r\n_GENERIC_MATH_ISNORMAL(int)\r\n_GENERIC_MATH_ISNORMAL(unsigned int)\r\n_GENERIC_MATH_ISNORMAL(long)\r\n_GENERIC_MATH_ISNORMAL(unsigned long)\r\n_GENERIC_MATH_ISNORMAL(long long)\r\n_GENERIC_MATH_ISNORMAL(unsigned long long)\r\n_GENERIC_MATH_ISNORMAL(bool)\r\n_GENERIC_MATH_ISNORMAL(char)\r\n#ifdef __cpp_char8_t\r\n_GENERIC_MATH_ISNORMAL(char8_t)\r\n#endif // defined(__cpp_char8_t)\r\n_GENERIC_MATH_ISNORMAL(char16_t)\r\n_GENERIC_MATH_ISNORMAL(char32_t)\r\n#ifdef _NATIVE_WCHAR_T_DEFINED\r\n_GENERIC_MATH_ISNORMAL(wchar_t)\r\n#endif // defined(_NATIVE_WCHAR_T_DEFINED)\r\n#undef _GENERIC_MATH_ISNORMAL\r\n\r\n#define _GENERIC_MATH1_BASE(NAME, RET, FUN)                                  \\\r\n    template <class _Ty, _STD enable_if_t<_STD is_integral_v<_Ty>, int> = 0> \\\r\n    _NODISCARD RET NAME(_Ty _Left) noexcept /* strengthened */ {             \\\r\n        return FUN(static_cast<double>(_Left));                              \\\r\n    }\r\n\r\n#define _GENERIC_MATH1R(FUN, RET) _GENERIC_MATH1_BASE(FUN, RET, _CSTD FUN)\r\n#define _GENERIC_MATH1(FUN)       _GENERIC_MATH1R(FUN, double)\r\n\r\n#if _HAS_CMATH_INTRINSICS\r\n#define _GENERIC_MATH1I(FUN, CLANG_INTRIN, MSVC_INTRIN) _GENERIC_MATH1_BASE(FUN, double, MSVC_INTRIN)\r\n#elif defined(__clang__)\r\n#define _GENERIC_MATH1I(FUN, CLANG_INTRIN, MSVC_INTRIN) _GENERIC_MATH1_BASE(FUN, double, CLANG_INTRIN)\r\n#else // ^^^ defined(__clang__) / intrinsics unavailable vvv\r\n#define _GENERIC_MATH1I(FUN, CLANG_INTRIN, MSVC_INTRIN) _GENERIC_MATH1_BASE(FUN, double, _CSTD FUN)\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n\r\n#define _GENERIC_MATH1X(FUN, ARG2)                                             \\\r\n    template <class _Ty, _STD enable_if_t<_STD is_integral_v<_Ty>, int> = 0>   \\\r\n    _NODISCARD double FUN(_Ty _Left, ARG2 _Arg2) noexcept /* strengthened */ { \\\r\n        return _CSTD FUN(static_cast<double>(_Left), _Arg2);                   \\\r\n    }\r\n\r\n// When the arguments are both floats or both long doubles, overload resolution prefers the\r\n// non-template overloads to the templates generated from this macro. The templates generated from\r\n// this macro are only selected by overload resolution when both arguments have integral type, or\r\n// when the types of the two arguments differ, in which case _Common_float_type_t is either double\r\n// or long double. Note that double and long double have the same underlying representation on our\r\n// supported platforms.\r\n#define _GENERIC_MATH2_BASE(NAME, FUN)                                                                           \\\r\n    template <class _Ty1, class _Ty2,                                                                            \\\r\n        _STD enable_if_t<_STD is_arithmetic_v<_Ty1> && _STD is_arithmetic_v<_Ty2>, int> = 0>                     \\\r\n    _NODISCARD _STD _Common_float_type_t<_Ty1, _Ty2> NAME(_Ty1 _Left, _Ty2 _Right) noexcept /* strengthened */ { \\\r\n        return FUN(static_cast<double>(_Left), static_cast<double>(_Right));                                     \\\r\n    }\r\n\r\n#define _GENERIC_MATH2(FUN) _GENERIC_MATH2_BASE(FUN, _CSTD FUN)\r\n\r\n#if _HAS_CMATH_INTRINSICS\r\n#define _GENERIC_MATH2I(FUN, CLANG_INTRIN, MSVC_INTRIN) _GENERIC_MATH2_BASE(FUN, MSVC_INTRIN)\r\n#elif defined(__clang__)\r\n#define _GENERIC_MATH2I(FUN, CLANG_INTRIN, MSVC_INTRIN) _GENERIC_MATH2_BASE(FUN, CLANG_INTRIN)\r\n#else // ^^^ defined(__clang__) / intrinsics unavailable vvv\r\n#define _GENERIC_MATH2I(FUN, CLANG_INTRIN, MSVC_INTRIN) _GENERIC_MATH2_BASE(FUN, _CSTD FUN)\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n\r\n// TRANSITION, DevCom-10294165, additional overloads are not templated to avoid ambiguity with the overload in UCRT\r\n#define _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, TYPE)                                \\\r\n    _NODISCARD _Check_return_ _CONSTEXPR23 bool FUN(_In_ TYPE) noexcept /* strengthened */ { \\\r\n        return RETV;                                                                         \\\r\n    }\r\n\r\n#ifdef __cpp_char8_t\r\n#define _GENERIC_MATH_CLASSIFY1_RETV_CHAR8_T(FUN, RETV) _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, char8_t)\r\n#else // ^^^ defined(__cpp_char8_t) / !defined(__cpp_char8_t) vvv\r\n#define _GENERIC_MATH_CLASSIFY1_RETV_CHAR8_T(FUN, RETV)\r\n#endif // ^^^ !defined(__cpp_char8_t) ^^^\r\n\r\n#ifdef _NATIVE_WCHAR_T_DEFINED\r\n#define _GENERIC_MATH_CLASSIFY1_RETV_WCHAR_T(FUN, RETV) _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, wchar_t)\r\n#else // ^^^ defined(_NATIVE_WCHAR_T_DEFINED) / !defined(_NATIVE_WCHAR_T_DEFINED) vvv\r\n#define _GENERIC_MATH_CLASSIFY1_RETV_WCHAR_T(FUN, RETV)\r\n#endif // ^^^ !defined(_NATIVE_WCHAR_T_DEFINED) ^^^\r\n\r\n#define _GENERIC_MATH_CLASSIFY1_RETV(FUN, RETV)                         \\\r\n    _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, signed char)        \\\r\n    _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, unsigned char)      \\\r\n    _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, short)              \\\r\n    _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, unsigned short)     \\\r\n    _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, int)                \\\r\n    _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, unsigned int)       \\\r\n    _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, long)               \\\r\n    _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, unsigned long)      \\\r\n    _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, long long)          \\\r\n    _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, unsigned long long) \\\r\n    _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, bool)               \\\r\n    _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, char)               \\\r\n    _GENERIC_MATH_CLASSIFY1_RETV_CHAR8_T(FUN, RETV)                     \\\r\n    _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, char16_t)           \\\r\n    _GENERIC_MATH_CLASSIFY1_RETV_INTEGER(FUN, RETV, char32_t)           \\\r\n    _GENERIC_MATH_CLASSIFY1_RETV_WCHAR_T(FUN, RETV)\r\n\r\n// The following order matches N4950 [cmath.syn].\r\n_GENERIC_MATH1(acos)\r\n_GENERIC_MATH1(asin)\r\n_GENERIC_MATH1(atan)\r\n_GENERIC_MATH2(atan2)\r\n_GENERIC_MATH1(cos)\r\n_GENERIC_MATH1(sin)\r\n_GENERIC_MATH1(tan)\r\n_GENERIC_MATH1(acosh)\r\n_GENERIC_MATH1(asinh)\r\n_GENERIC_MATH1(atanh)\r\n_GENERIC_MATH1(cosh)\r\n_GENERIC_MATH1(sinh)\r\n_GENERIC_MATH1(tanh)\r\n_GENERIC_MATH1(exp)\r\n_GENERIC_MATH1(exp2)\r\n_GENERIC_MATH1(expm1)\r\n// frexp() is hand-crafted\r\n_GENERIC_MATH1R(ilogb, int)\r\n_GENERIC_MATH1X(ldexp, int)\r\n_GENERIC_MATH1(log)\r\n_GENERIC_MATH1(log10)\r\n_GENERIC_MATH1(log1p)\r\n_GENERIC_MATH1(log2)\r\n_GENERIC_MATH1(logb)\r\n// No modf(), types must match\r\n_GENERIC_MATH1X(scalbn, int)\r\n_GENERIC_MATH1X(scalbln, long)\r\n_GENERIC_MATH1(cbrt)\r\n// abs() has integer overloads\r\n_GENERIC_MATH1(fabs)\r\n_GENERIC_MATH2(hypot)\r\n// 3-arg hypot() is hand-crafted\r\n// pow() is hand-crafted\r\n_GENERIC_MATH1(sqrt)\r\n_GENERIC_MATH1(erf)\r\n_GENERIC_MATH1(erfc)\r\n_GENERIC_MATH1(lgamma)\r\n_GENERIC_MATH1(tgamma)\r\n_GENERIC_MATH1I(ceil, __builtin_ceil, __ceil)\r\n_GENERIC_MATH1I(floor, __builtin_floor, __floor)\r\n_GENERIC_MATH1(nearbyint)\r\n_GENERIC_MATH1(rint)\r\n_GENERIC_MATH1R(lrint, long)\r\n_GENERIC_MATH1R(llrint, long long)\r\n_GENERIC_MATH1I(round, __builtin_round, __round)\r\n_GENERIC_MATH1R(lround, long)\r\n_GENERIC_MATH1R(llround, long long)\r\n_GENERIC_MATH1I(trunc, __builtin_trunc, __trunc)\r\n_GENERIC_MATH2(fmod)\r\n_GENERIC_MATH2(remainder)\r\n// remquo() is hand-crafted\r\n_GENERIC_MATH2I(copysign, __builtin_copysign, __copysign)\r\n// nan(const char*) is exempt\r\n_GENERIC_MATH2(nextafter)\r\n_GENERIC_MATH1X(nexttoward, long double)\r\n_GENERIC_MATH2(fdim)\r\n_GENERIC_MATH2(fmax)\r\n_GENERIC_MATH2(fmin)\r\n// fma() is hand-crafted\r\n// lerp() is hand-crafted\r\n// fpclassify() is hand-crafted\r\n_GENERIC_MATH_CLASSIFY1_RETV(isfinite, true)\r\n_GENERIC_MATH_CLASSIFY1_RETV(isinf, false)\r\n_GENERIC_MATH_CLASSIFY1_RETV(isnan, false)\r\n// isnormal() is half-hand-crafted\r\n// signbit() is hand-crafted\r\n\r\n#undef _GENERIC_MATH1_BASE\r\n#undef _GENERIC_MATH1R\r\n#undef _GENERIC_MATH1\r\n#undef _GENERIC_MATH1I\r\n#undef _GENERIC_MATH1X\r\n#undef _GENERIC_MATH2_BASE\r\n#undef _GENERIC_MATH2\r\n#undef _GENERIC_MATH2I\r\n#undef _GENERIC_MATH_CLASSIFY1_RETV_INTEGER\r\n#undef _GENERIC_MATH_CLASSIFY1_RETV_WCHAR_T\r\n#undef _GENERIC_MATH_CLASSIFY1_RETV_CHAR8_T\r\n#undef _GENERIC_MATH_CLASSIFY1_RETV\r\n#undef _HAS_CMATH_INTRINSICS\r\n_END_EXTERN_CXX_WORKAROUND\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD using _CSTD abs;\r\n_EXPORT_STD using _CSTD acos;\r\n_EXPORT_STD using _CSTD asin;\r\n_EXPORT_STD using _CSTD atan;\r\n_EXPORT_STD using _CSTD atan2;\r\n_EXPORT_STD using _CSTD ceil;\r\n_EXPORT_STD using _CSTD cos;\r\n_EXPORT_STD using _CSTD cosh;\r\n_EXPORT_STD using _CSTD exp;\r\n_EXPORT_STD using _CSTD fabs;\r\n_EXPORT_STD using _CSTD floor;\r\n_EXPORT_STD using _CSTD fmod;\r\n_EXPORT_STD using _CSTD frexp;\r\n_EXPORT_STD using _CSTD ldexp;\r\n_EXPORT_STD using _CSTD log;\r\n_EXPORT_STD using _CSTD log10;\r\n_EXPORT_STD using _CSTD modf;\r\n_EXPORT_STD using _CSTD pow;\r\n_EXPORT_STD using _CSTD sin;\r\n_EXPORT_STD using _CSTD sinh;\r\n_EXPORT_STD using _CSTD sqrt;\r\n_EXPORT_STD using _CSTD tan;\r\n_EXPORT_STD using _CSTD tanh;\r\n\r\n_EXPORT_STD using _CSTD acosf;\r\n_EXPORT_STD using _CSTD asinf;\r\n_EXPORT_STD using _CSTD atanf;\r\n_EXPORT_STD using _CSTD atan2f;\r\n_EXPORT_STD using _CSTD ceilf;\r\n_EXPORT_STD using _CSTD cosf;\r\n_EXPORT_STD using _CSTD coshf;\r\n_EXPORT_STD using _CSTD expf;\r\n_EXPORT_STD using _CSTD fabsf;\r\n_EXPORT_STD using _CSTD floorf;\r\n_EXPORT_STD using _CSTD fmodf;\r\n_EXPORT_STD using _CSTD frexpf;\r\n_EXPORT_STD using _CSTD ldexpf;\r\n_EXPORT_STD using _CSTD logf;\r\n_EXPORT_STD using _CSTD log10f;\r\n_EXPORT_STD using _CSTD modff;\r\n_EXPORT_STD using _CSTD powf;\r\n_EXPORT_STD using _CSTD sinf;\r\n_EXPORT_STD using _CSTD sinhf;\r\n_EXPORT_STD using _CSTD sqrtf;\r\n_EXPORT_STD using _CSTD tanf;\r\n_EXPORT_STD using _CSTD tanhf;\r\n\r\n_EXPORT_STD using _CSTD acosl;\r\n_EXPORT_STD using _CSTD asinl;\r\n_EXPORT_STD using _CSTD atanl;\r\n_EXPORT_STD using _CSTD atan2l;\r\n_EXPORT_STD using _CSTD ceill;\r\n_EXPORT_STD using _CSTD cosl;\r\n_EXPORT_STD using _CSTD coshl;\r\n_EXPORT_STD using _CSTD expl;\r\n_EXPORT_STD using _CSTD fabsl;\r\n_EXPORT_STD using _CSTD floorl;\r\n_EXPORT_STD using _CSTD fmodl;\r\n_EXPORT_STD using _CSTD frexpl;\r\n_EXPORT_STD using _CSTD ldexpl;\r\n_EXPORT_STD using _CSTD logl;\r\n_EXPORT_STD using _CSTD log10l;\r\n_EXPORT_STD using _CSTD modfl;\r\n_EXPORT_STD using _CSTD powl;\r\n_EXPORT_STD using _CSTD sinl;\r\n_EXPORT_STD using _CSTD sinhl;\r\n_EXPORT_STD using _CSTD sqrtl;\r\n_EXPORT_STD using _CSTD tanl;\r\n_EXPORT_STD using _CSTD tanhl;\r\n\r\n_EXPORT_STD using _CSTD float_t;\r\n_EXPORT_STD using _CSTD double_t;\r\n\r\n_EXPORT_STD using _CSTD acosh;\r\n_EXPORT_STD using _CSTD asinh;\r\n_EXPORT_STD using _CSTD atanh;\r\n_EXPORT_STD using _CSTD cbrt;\r\n_EXPORT_STD using _CSTD erf;\r\n_EXPORT_STD using _CSTD erfc;\r\n_EXPORT_STD using _CSTD expm1;\r\n_EXPORT_STD using _CSTD exp2;\r\n\r\ninline namespace _Binary_hypot {\r\n    _EXPORT_STD using _CSTD hypot;\r\n} // namespace _Binary_hypot\r\n\r\n_EXPORT_STD using _CSTD ilogb;\r\n_EXPORT_STD using _CSTD lgamma;\r\n_EXPORT_STD using _CSTD log1p;\r\n_EXPORT_STD using _CSTD log2;\r\n_EXPORT_STD using _CSTD logb;\r\n_EXPORT_STD using _CSTD llrint;\r\n_EXPORT_STD using _CSTD lrint;\r\n_EXPORT_STD using _CSTD nearbyint;\r\n_EXPORT_STD using _CSTD rint;\r\n_EXPORT_STD using _CSTD llround;\r\n_EXPORT_STD using _CSTD lround;\r\n_EXPORT_STD using _CSTD fdim;\r\n_EXPORT_STD using _CSTD fma;\r\n_EXPORT_STD using _CSTD fmax;\r\n_EXPORT_STD using _CSTD fmin;\r\n_EXPORT_STD using _CSTD round;\r\n_EXPORT_STD using _CSTD trunc;\r\n_EXPORT_STD using _CSTD remainder;\r\n_EXPORT_STD using _CSTD remquo;\r\n_EXPORT_STD using _CSTD copysign;\r\n_EXPORT_STD using _CSTD nan;\r\n_EXPORT_STD using _CSTD nextafter;\r\n_EXPORT_STD using _CSTD scalbn;\r\n_EXPORT_STD using _CSTD scalbln;\r\n_EXPORT_STD using _CSTD nexttoward;\r\n_EXPORT_STD using _CSTD tgamma;\r\n\r\n_EXPORT_STD using _CSTD acoshf;\r\n_EXPORT_STD using _CSTD asinhf;\r\n_EXPORT_STD using _CSTD atanhf;\r\n_EXPORT_STD using _CSTD cbrtf;\r\n_EXPORT_STD using _CSTD erff;\r\n_EXPORT_STD using _CSTD erfcf;\r\n_EXPORT_STD using _CSTD expm1f;\r\n_EXPORT_STD using _CSTD exp2f;\r\n_EXPORT_STD using _CSTD hypotf;\r\n_EXPORT_STD using _CSTD ilogbf;\r\n_EXPORT_STD using _CSTD lgammaf;\r\n_EXPORT_STD using _CSTD log1pf;\r\n_EXPORT_STD using _CSTD log2f;\r\n_EXPORT_STD using _CSTD logbf;\r\n_EXPORT_STD using _CSTD llrintf;\r\n_EXPORT_STD using _CSTD lrintf;\r\n_EXPORT_STD using _CSTD nearbyintf;\r\n_EXPORT_STD using _CSTD rintf;\r\n_EXPORT_STD using _CSTD llroundf;\r\n_EXPORT_STD using _CSTD lroundf;\r\n_EXPORT_STD using _CSTD fdimf;\r\n_EXPORT_STD using _CSTD fmaf;\r\n_EXPORT_STD using _CSTD fmaxf;\r\n_EXPORT_STD using _CSTD fminf;\r\n_EXPORT_STD using _CSTD roundf;\r\n_EXPORT_STD using _CSTD truncf;\r\n_EXPORT_STD using _CSTD remainderf;\r\n_EXPORT_STD using _CSTD remquof;\r\n_EXPORT_STD using _CSTD copysignf;\r\n_EXPORT_STD using _CSTD nanf;\r\n_EXPORT_STD using _CSTD nextafterf;\r\n_EXPORT_STD using _CSTD scalbnf;\r\n_EXPORT_STD using _CSTD scalblnf;\r\n_EXPORT_STD using _CSTD nexttowardf;\r\n_EXPORT_STD using _CSTD tgammaf;\r\n\r\n_EXPORT_STD using _CSTD acoshl;\r\n_EXPORT_STD using _CSTD asinhl;\r\n_EXPORT_STD using _CSTD atanhl;\r\n_EXPORT_STD using _CSTD cbrtl;\r\n_EXPORT_STD using _CSTD erfl;\r\n_EXPORT_STD using _CSTD erfcl;\r\n_EXPORT_STD using _CSTD expm1l;\r\n_EXPORT_STD using _CSTD exp2l;\r\n_EXPORT_STD using _CSTD hypotl;\r\n_EXPORT_STD using _CSTD ilogbl;\r\n_EXPORT_STD using _CSTD lgammal;\r\n_EXPORT_STD using _CSTD log1pl;\r\n_EXPORT_STD using _CSTD log2l;\r\n_EXPORT_STD using _CSTD logbl;\r\n_EXPORT_STD using _CSTD llrintl;\r\n_EXPORT_STD using _CSTD lrintl;\r\n_EXPORT_STD using _CSTD nearbyintl;\r\n_EXPORT_STD using _CSTD rintl;\r\n_EXPORT_STD using _CSTD llroundl;\r\n_EXPORT_STD using _CSTD lroundl;\r\n_EXPORT_STD using _CSTD fdiml;\r\n_EXPORT_STD using _CSTD fmal;\r\n_EXPORT_STD using _CSTD fmaxl;\r\n_EXPORT_STD using _CSTD fminl;\r\n_EXPORT_STD using _CSTD roundl;\r\n_EXPORT_STD using _CSTD truncl;\r\n_EXPORT_STD using _CSTD remainderl;\r\n_EXPORT_STD using _CSTD remquol;\r\n_EXPORT_STD using _CSTD copysignl;\r\n_EXPORT_STD using _CSTD nanl;\r\n_EXPORT_STD using _CSTD nextafterl;\r\n_EXPORT_STD using _CSTD scalbnl;\r\n_EXPORT_STD using _CSTD scalblnl;\r\n_EXPORT_STD using _CSTD nexttowardl;\r\n_EXPORT_STD using _CSTD tgammal;\r\n\r\n_EXPORT_STD using _CSTD fpclassify;\r\n_EXPORT_STD using _CSTD signbit;\r\n_EXPORT_STD using _CSTD isfinite;\r\n_EXPORT_STD using _CSTD isinf;\r\n_EXPORT_STD using _CSTD isnan;\r\n_EXPORT_STD using _CSTD isnormal;\r\n_EXPORT_STD using _CSTD isgreater;\r\n_EXPORT_STD using _CSTD isgreaterequal;\r\n_EXPORT_STD using _CSTD isless;\r\n_EXPORT_STD using _CSTD islessequal;\r\n_EXPORT_STD using _CSTD islessgreater;\r\n_EXPORT_STD using _CSTD isunordered;\r\n_STD_END\r\n\r\n#if _HAS_CXX17\r\nextern \"C\" {\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_assoc_laguerre(unsigned int, unsigned int, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_assoc_laguerref(unsigned int, unsigned int, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_assoc_legendre(unsigned int, unsigned int, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_assoc_legendref(unsigned int, unsigned int, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_beta(double, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_betaf(float, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_comp_ellint_1(double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_comp_ellint_1f(float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_comp_ellint_2(double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_comp_ellint_2f(float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_comp_ellint_3(double, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_comp_ellint_3f(float, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_cyl_bessel_i(double, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_cyl_bessel_if(float, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_cyl_bessel_j(double, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_cyl_bessel_jf(float, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_cyl_bessel_k(double, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_cyl_bessel_kf(float, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_cyl_neumann(double, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_cyl_neumannf(float, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_ellint_1(double, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_ellint_1f(float, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_ellint_2(double, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_ellint_2f(float, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_ellint_3(double, double, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_ellint_3f(float, float, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_expint(double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_expintf(float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_hermite(unsigned int, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_hermitef(unsigned int, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_laguerre(unsigned int, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_laguerref(unsigned int, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_legendre(unsigned int, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_legendref(unsigned int, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_riemann_zeta(double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_riemann_zetaf(float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_sph_bessel(unsigned int, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_sph_besself(unsigned int, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_sph_legendre(unsigned int, unsigned int, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_sph_legendref(unsigned int, unsigned int, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_sph_neumann(unsigned int, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_sph_neumannf(unsigned int, float) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 double __stdcall __std_smf_hypot3(double, double, double) noexcept;\r\n_NODISCARD _CRT_SATELLITE_2 float __stdcall __std_smf_hypot3f(float, float, float) noexcept;\r\n} // extern \"C\"\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD _NODISCARD inline double assoc_laguerre(\r\n    const unsigned int _Degree, const unsigned int _Order, const double _Value) noexcept /* strengthened */ {\r\n    return __std_smf_assoc_laguerre(_Degree, _Order, _Value);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float assoc_laguerref(\r\n    const unsigned int _Degree, const unsigned int _Order, const float _Value) noexcept /* strengthened */ {\r\n    return __std_smf_assoc_laguerref(_Degree, _Order, _Value);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double assoc_laguerrel(\r\n    const unsigned int _Degree, const unsigned int _Order, const long double _Value) noexcept /* strengthened */ {\r\n    return __std_smf_assoc_laguerre(_Degree, _Order, static_cast<double>(_Value));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double assoc_legendre(\r\n    const unsigned int _Degree, const unsigned int _Order, const double _Value) noexcept /* strengthened */ {\r\n    return __std_smf_assoc_legendre(_Degree, _Order, _Value);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float assoc_legendref(\r\n    const unsigned int _Degree, const unsigned int _Order, const float _Value) noexcept /* strengthened */ {\r\n    return __std_smf_assoc_legendref(_Degree, _Order, _Value);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double assoc_legendrel(\r\n    const unsigned int _Degree, const unsigned int _Order, const long double _Value) noexcept /* strengthened */ {\r\n    return __std_smf_assoc_legendre(_Degree, _Order, static_cast<double>(_Value));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double beta(const double _Arg1, const double _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_beta(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float betaf(const float _Arg1, const float _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_betaf(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double betal(const long double _Arg1, const long double _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_beta(static_cast<double>(_Arg1), static_cast<double>(_Arg2));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double comp_ellint_1(const double _Arg) noexcept /* strengthened */ {\r\n    return __std_smf_comp_ellint_1(_Arg);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float comp_ellint_1f(const float _Arg) noexcept /* strengthened */ {\r\n    return __std_smf_comp_ellint_1f(_Arg);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double comp_ellint_1l(const long double _Arg) noexcept /* strengthened */ {\r\n    return __std_smf_comp_ellint_1(static_cast<double>(_Arg));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double comp_ellint_2(const double _Arg) noexcept /* strengthened */ {\r\n    return __std_smf_comp_ellint_2(_Arg);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float comp_ellint_2f(const float _Arg) noexcept /* strengthened */ {\r\n    return __std_smf_comp_ellint_2f(_Arg);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double comp_ellint_2l(const long double _Arg) noexcept /* strengthened */ {\r\n    return __std_smf_comp_ellint_2(static_cast<double>(_Arg));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double comp_ellint_3(const double _Arg1, const double _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_comp_ellint_3(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float comp_ellint_3f(const float _Arg1, const float _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_comp_ellint_3f(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double comp_ellint_3l(const long double _Arg1, const long double _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_comp_ellint_3(static_cast<double>(_Arg1), static_cast<double>(_Arg2));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double cyl_bessel_i(const double _Arg1, const double _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_cyl_bessel_i(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float cyl_bessel_if(const float _Arg1, const float _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_cyl_bessel_if(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double cyl_bessel_il(const long double _Arg1, const long double _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_cyl_bessel_i(static_cast<double>(_Arg1), static_cast<double>(_Arg2));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double cyl_bessel_j(const double _Arg1, const double _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_cyl_bessel_j(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float cyl_bessel_jf(const float _Arg1, const float _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_cyl_bessel_jf(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double cyl_bessel_jl(const long double _Arg1, const long double _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_cyl_bessel_j(static_cast<double>(_Arg1), static_cast<double>(_Arg2));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double cyl_bessel_k(const double _Arg1, const double _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_cyl_bessel_k(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float cyl_bessel_kf(const float _Arg1, const float _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_cyl_bessel_kf(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double cyl_bessel_kl(const long double _Arg1, const long double _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_cyl_bessel_k(static_cast<double>(_Arg1), static_cast<double>(_Arg2));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double cyl_neumann(const double _Arg1, const double _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_cyl_neumann(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float cyl_neumannf(const float _Arg1, const float _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_cyl_neumannf(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double cyl_neumannl(const long double _Arg1, const long double _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_cyl_neumann(static_cast<double>(_Arg1), static_cast<double>(_Arg2));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double ellint_1(const double _Arg1, const double _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_ellint_1(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float ellint_1f(const float _Arg1, const float _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_ellint_1f(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double ellint_1l(const long double _Arg1, const long double _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_ellint_1(static_cast<double>(_Arg1), static_cast<double>(_Arg2));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double ellint_2(const double _Arg1, const double _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_ellint_2(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float ellint_2f(const float _Arg1, const float _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_ellint_2f(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double ellint_2l(const long double _Arg1, const long double _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_ellint_2(static_cast<double>(_Arg1), static_cast<double>(_Arg2));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double ellint_3(const double _Arg1, const double _Arg2, const double _Arg3) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_ellint_3(_Arg1, _Arg2, _Arg3);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float ellint_3f(const float _Arg1, const float _Arg2, const float _Arg3) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_ellint_3f(_Arg1, _Arg2, _Arg3);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double ellint_3l(\r\n    const long double _Arg1, const long double _Arg2, const long double _Arg3) noexcept /* strengthened */ {\r\n    return __std_smf_ellint_3(static_cast<double>(_Arg1), static_cast<double>(_Arg2), static_cast<double>(_Arg3));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double expint(const double _Arg) noexcept /* strengthened */ {\r\n    return __std_smf_expint(_Arg);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float expintf(const float _Arg) noexcept /* strengthened */ {\r\n    return __std_smf_expintf(_Arg);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double expintl(const long double _Arg) noexcept /* strengthened */ {\r\n    return __std_smf_expint(static_cast<double>(_Arg));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double hermite(const unsigned int _Arg1, const double _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_hermite(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float hermitef(const unsigned int _Arg1, const float _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_hermitef(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double hermitel(const unsigned int _Arg1, const long double _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_hermite(_Arg1, static_cast<double>(_Arg2));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double laguerre(const unsigned int _Arg1, const double _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_laguerre(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float laguerref(const unsigned int _Arg1, const float _Arg2) noexcept /* strengthened */ {\r\n    return __std_smf_laguerref(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double laguerrel(const unsigned int _Arg1, const long double _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_laguerre(_Arg1, static_cast<double>(_Arg2));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double legendre(const unsigned int _Degree, const double _Value) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_legendre(_Degree, _Value);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float legendref(const unsigned int _Degree, const float _Value) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_legendref(_Degree, _Value);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double legendrel(const unsigned int _Degree, const long double _Value) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_legendre(_Degree, static_cast<double>(_Value));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double riemann_zeta(const double _Arg) noexcept /* strengthened */ {\r\n    return __std_smf_riemann_zeta(_Arg);\r\n}\r\n_EXPORT_STD _NODISCARD inline float riemann_zetaf(const float _Arg) noexcept /* strengthened */ {\r\n    return __std_smf_riemann_zetaf(_Arg);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double riemann_zetal(const long double _Arg) noexcept /* strengthened */ {\r\n    return __std_smf_riemann_zeta(static_cast<double>(_Arg));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double sph_bessel(const unsigned int _Arg1, const double _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_sph_bessel(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float sph_besself(const unsigned int _Arg1, const float _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_sph_besself(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double sph_bessell(const unsigned int _Arg1, const long double _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_sph_bessel(_Arg1, static_cast<double>(_Arg2));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double sph_legendre(\r\n    const unsigned int _Arg1, const unsigned int _Arg2, const double _Theta) noexcept /* strengthened */ {\r\n    return __std_smf_sph_legendre(_Arg1, _Arg2, _Theta);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float sph_legendref(\r\n    const unsigned int _Arg1, const unsigned int _Arg2, const float _Theta) noexcept /* strengthened */ {\r\n    return __std_smf_sph_legendref(_Arg1, _Arg2, _Theta);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double sph_legendrel(\r\n    const unsigned int _Arg1, const unsigned int _Arg2, const long double _Theta) noexcept /* strengthened */ {\r\n    return __std_smf_sph_legendre(_Arg1, _Arg2, static_cast<double>(_Theta));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double sph_neumann(const unsigned int _Arg1, const double _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_sph_neumann(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float sph_neumannf(const unsigned int _Arg1, const float _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_sph_neumannf(_Arg1, _Arg2);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double sph_neumannl(const unsigned int _Arg1, const long double _Arg2) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_sph_neumann(_Arg1, static_cast<double>(_Arg2));\r\n}\r\n\r\n#define _GENERIC_MATH_SPECIAL1(NAME)                                                  \\\r\n    _EXPORT_STD template <class _Ty, enable_if_t<is_arithmetic_v<_Ty>, int> = 0>      \\\r\n    _NODISCARD auto NAME(const _Ty _Arg) noexcept /* strengthened */ {                \\\r\n        using _Common = conditional_t<is_integral_v<_Ty>, double, _Ty>;               \\\r\n        if constexpr (is_same_v<_Common, float>) {                                    \\\r\n            return __std_smf_##NAME##f(_Arg);                                         \\\r\n        } else {                                                                      \\\r\n            return static_cast<_Common>(__std_smf_##NAME(static_cast<double>(_Arg))); \\\r\n        }                                                                             \\\r\n    }\r\n\r\n#define _GENERIC_MATH_SPECIAL2(NAME)                                                                               \\\r\n    _EXPORT_STD template <class _Ty1, class _Ty2,                                                                  \\\r\n        enable_if_t<is_arithmetic_v<_Ty1> && is_arithmetic_v<_Ty2>, int> = 0>                                      \\\r\n    _NODISCARD auto NAME(const _Ty1 _Arg1, const _Ty2 _Arg2) noexcept /* strengthened */ {                         \\\r\n        using _Common = _Common_float_type_t<_Ty1, _Ty2>;                                                          \\\r\n        if constexpr (is_same_v<_Common, float>) {                                                                 \\\r\n            return __std_smf_##NAME##f(_Arg1, _Arg2);                                                              \\\r\n        } else {                                                                                                   \\\r\n            return static_cast<_Common>(__std_smf_##NAME(static_cast<double>(_Arg1), static_cast<double>(_Arg2))); \\\r\n        }                                                                                                          \\\r\n    }\r\n\r\n#define _GENERIC_MATH_SPECIAL3(NAME)                                                                                   \\\r\n    _EXPORT_STD template <class _Ty1, class _Ty2, class _Ty3,                                                          \\\r\n        enable_if_t<is_arithmetic_v<_Ty1> && is_arithmetic_v<_Ty2> && is_arithmetic_v<_Ty3>, int> = 0>                 \\\r\n    _NODISCARD auto NAME(const _Ty1 _Arg1, const _Ty2 _Arg2, const _Ty3 _Arg3) noexcept /* strengthened */ {           \\\r\n        using _Common = _Common_float_type_t<_Ty1, _Common_float_type_t<_Ty2, _Ty3>>;                                  \\\r\n        if constexpr (is_same_v<_Common, float>) {                                                                     \\\r\n            return __std_smf_##NAME##f(_Arg1, _Arg2, _Arg3);                                                           \\\r\n        } else {                                                                                                       \\\r\n            return static_cast<_Common>(                                                                               \\\r\n                __std_smf_##NAME(static_cast<double>(_Arg1), static_cast<double>(_Arg2), static_cast<double>(_Arg3))); \\\r\n        }                                                                                                              \\\r\n    }\r\n\r\n#define _GENERIC_MATH_SPECIAL_UINT1(NAME)                                                         \\\r\n    _EXPORT_STD template <class _Ty, enable_if_t<is_arithmetic_v<_Ty>, int> = 0>                  \\\r\n    _NODISCARD auto NAME(const unsigned int _Arg1, const _Ty _Arg2) noexcept /* strengthened */ { \\\r\n        using _Common = conditional_t<is_integral_v<_Ty>, double, _Ty>;                           \\\r\n        if constexpr (is_same_v<_Common, float>) {                                                \\\r\n            return __std_smf_##NAME##f(_Arg1, _Arg2);                                             \\\r\n        } else {                                                                                  \\\r\n            return static_cast<_Common>(__std_smf_##NAME(_Arg1, static_cast<double>(_Arg2)));     \\\r\n        }                                                                                         \\\r\n    }\r\n\r\n#define _GENERIC_MATH_SPECIAL_UINT2(NAME)                                                                  \\\r\n    _EXPORT_STD template <class _Ty, enable_if_t<is_arithmetic_v<_Ty>, int> = 0>                           \\\r\n    _NODISCARD auto NAME(                                                                                  \\\r\n        const unsigned int _Arg1, const unsigned int _Arg2, const _Ty _Arg3) noexcept /* strengthened */ { \\\r\n        using _Common = conditional_t<is_integral_v<_Ty>, double, _Ty>;                                    \\\r\n        if constexpr (is_same_v<_Common, float>) {                                                         \\\r\n            return __std_smf_##NAME##f(_Arg1, _Arg2, _Arg3);                                               \\\r\n        } else {                                                                                           \\\r\n            return static_cast<_Common>(__std_smf_##NAME(_Arg1, _Arg2, static_cast<double>(_Arg3)));       \\\r\n        }                                                                                                  \\\r\n    }\r\n\r\n// per LWG-3234 and LWG-3693\r\n_GENERIC_MATH_SPECIAL_UINT2(assoc_laguerre)\r\n_GENERIC_MATH_SPECIAL_UINT2(assoc_legendre)\r\n_GENERIC_MATH_SPECIAL2(beta)\r\n_GENERIC_MATH_SPECIAL1(comp_ellint_1)\r\n_GENERIC_MATH_SPECIAL1(comp_ellint_2)\r\n_GENERIC_MATH_SPECIAL2(comp_ellint_3)\r\n_GENERIC_MATH_SPECIAL2(cyl_bessel_i)\r\n_GENERIC_MATH_SPECIAL2(cyl_bessel_j)\r\n_GENERIC_MATH_SPECIAL2(cyl_bessel_k)\r\n_GENERIC_MATH_SPECIAL2(cyl_neumann)\r\n_GENERIC_MATH_SPECIAL2(ellint_1)\r\n_GENERIC_MATH_SPECIAL2(ellint_2)\r\n_GENERIC_MATH_SPECIAL3(ellint_3)\r\n_GENERIC_MATH_SPECIAL1(expint)\r\n_GENERIC_MATH_SPECIAL_UINT1(hermite)\r\n_GENERIC_MATH_SPECIAL_UINT1(laguerre)\r\n_GENERIC_MATH_SPECIAL_UINT1(legendre)\r\n_GENERIC_MATH_SPECIAL1(riemann_zeta)\r\n_GENERIC_MATH_SPECIAL_UINT1(sph_bessel)\r\n_GENERIC_MATH_SPECIAL_UINT2(sph_legendre)\r\n_GENERIC_MATH_SPECIAL_UINT1(sph_neumann)\r\n\r\n#undef _GENERIC_MATH_SPECIAL1\r\n#undef _GENERIC_MATH_SPECIAL2\r\n#undef _GENERIC_MATH_SPECIAL3\r\n#undef _GENERIC_MATH_SPECIAL_UINT1\r\n#undef _GENERIC_MATH_SPECIAL_UINT2\r\n\r\n_EXPORT_STD _NODISCARD inline double hypot(const double _Dx, const double _Dy, const double _Dz) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_hypot3(_Dx, _Dy, _Dz);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float hypot(const float _Dx, const float _Dy, const float _Dz) noexcept\r\n/* strengthened */ {\r\n    return __std_smf_hypot3f(_Dx, _Dy, _Dz);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double hypot(\r\n    const long double _Dx, const long double _Dy, const long double _Dz) noexcept /* strengthened */ {\r\n    return __std_smf_hypot3(static_cast<double>(_Dx), static_cast<double>(_Dy), static_cast<double>(_Dz));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2, class _Ty3,\r\n    enable_if_t<is_arithmetic_v<_Ty1> && is_arithmetic_v<_Ty2> && is_arithmetic_v<_Ty3>, int> = 0>\r\n_NODISCARD auto hypot(const _Ty1 _Dx, const _Ty2 _Dy, const _Ty3 _Dz) noexcept /* strengthened */ {\r\n    // N4950 [cmath.syn]/3 \"Sufficient additional overloads\"\r\n    // Note that this template is selected by overload resolution only when at least one\r\n    // argument is double/long double/integral but not all three are double or long double.\r\n    using _Common      = _Common_float_type_t<_Ty1, _Common_float_type_t<_Ty2, _Ty3>>; // TRANSITION, fold expressions\r\n    const auto _Result = __std_smf_hypot3(static_cast<double>(_Dx), static_cast<double>(_Dy), static_cast<double>(_Dz));\r\n    return static_cast<_Common>(_Result);\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr _Ty _Linear_for_lerp(const _Ty _ArgA, const _Ty _ArgB, const _Ty _ArgT) noexcept {\r\n    if (_STD is_constant_evaluated()) {\r\n        auto _Smaller     = _ArgT;\r\n        auto _Larger      = _ArgB - _ArgA;\r\n        auto _Abs_smaller = _Float_abs(_Smaller);\r\n        auto _Abs_larger  = _Float_abs(_Larger);\r\n        if (_Abs_larger < _Abs_smaller) {\r\n            _Ty _Tmp = _Smaller;\r\n            _Smaller = _Larger;\r\n            _Larger  = _Tmp;\r\n\r\n            _Tmp         = _Abs_smaller;\r\n            _Abs_smaller = _Abs_larger;\r\n            _Abs_larger  = _Tmp;\r\n        }\r\n\r\n        if (_Abs_smaller > 1) {\r\n            // _Larger is too large to be subnormal, so scaling by 0.5 is exact, and the product _Smaller * _Larger is\r\n            // large enough that if _ArgA is subnormal, it will be too small to contribute anyway and this way can\r\n            // sometimes avoid overflow problems.\r\n            return 2 * (_Ty{0.5} * _ArgA + _Smaller * (_Ty{0.5} * _Larger));\r\n        } else {\r\n            return _ArgA + _Smaller * _Larger;\r\n        }\r\n    }\r\n\r\n    return _STD fma(_ArgT, _ArgB - _ArgA, _ArgA);\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr _Ty _Common_lerp(const _Ty _ArgA, const _Ty _ArgB, const _Ty _ArgT) noexcept {\r\n    // on a line intersecting {(0.0, _ArgA), (1.0, _ArgB)}, return the Y value for X == _ArgT\r\n\r\n    const bool _T_is_finite = _Is_finite(_ArgT);\r\n    if (_T_is_finite && _Is_finite(_ArgA) && _Is_finite(_ArgB)) {\r\n        // 99% case, put it first; this block comes from P0811R3\r\n        if ((_ArgA <= 0 && _ArgB >= 0) || (_ArgA >= 0 && _ArgB <= 0)) {\r\n            // exact, monotonic, bounded, determinate, and (for _ArgA == _ArgB == 0) consistent:\r\n            return _ArgT * _ArgB + (1 - _ArgT) * _ArgA;\r\n        }\r\n\r\n        if (_ArgT == 1) {\r\n            // exact\r\n            return _ArgB;\r\n        }\r\n\r\n        // exact at _ArgT == 0, monotonic except near _ArgT == 1, bounded, determinate, and consistent:\r\n        const auto _Candidate = _Linear_for_lerp(_ArgA, _ArgB, _ArgT);\r\n        // monotonic near _ArgT == 1:\r\n        if ((_ArgT > 1) == (_ArgB > _ArgA)) {\r\n            if (_ArgB > _Candidate) {\r\n                return _ArgB;\r\n            }\r\n        } else {\r\n            if (_Candidate > _ArgB) {\r\n                return _ArgB;\r\n            }\r\n        }\r\n\r\n        return _Candidate;\r\n    }\r\n\r\n    if (_STD is_constant_evaluated()) {\r\n        if (_Is_nan(_ArgA)) {\r\n            return _ArgA;\r\n        }\r\n\r\n        if (_Is_nan(_ArgB)) {\r\n            return _ArgB;\r\n        }\r\n\r\n        if (_Is_nan(_ArgT)) {\r\n            return _ArgT;\r\n        }\r\n    } else {\r\n        // raise FE_INVALID if at least one of _ArgA, _ArgB, and _ArgT is signaling NaN\r\n        if (_Is_nan(_ArgA) || _Is_nan(_ArgB)) {\r\n            return (_ArgA + _ArgB) + _ArgT;\r\n        }\r\n\r\n        if (_Is_nan(_ArgT)) {\r\n            return _ArgT + _ArgT;\r\n        }\r\n    }\r\n\r\n    if (_T_is_finite) {\r\n        // _ArgT is finite, _ArgA and/or _ArgB is infinity\r\n        if (_ArgT < 0) {\r\n            // if _ArgT < 0:     return infinity in the \"direction\" of _ArgA if that exists, NaN otherwise\r\n            return _ArgA - _ArgB;\r\n        } else if (_ArgT <= 1) {\r\n            // if _ArgT == 0:    return _ArgA (infinity) if _ArgB is finite, NaN otherwise\r\n            // if 0 < _ArgT < 1: return infinity \"between\" _ArgA and _ArgB if that exists, NaN otherwise\r\n            // if _ArgT == 1:    return _ArgB (infinity) if _ArgA is finite, NaN otherwise\r\n            return _ArgT * _ArgB + (1 - _ArgT) * _ArgA;\r\n        } else {\r\n            // if _ArgT > 1:     return infinity in the \"direction\" of _ArgB if that exists, NaN otherwise\r\n            return _ArgB - _ArgA;\r\n        }\r\n    } else {\r\n        // _ArgT is an infinity; return infinity in the \"direction\" of _ArgA and _ArgB if that exists, NaN otherwise\r\n        return _ArgT * (_ArgB - _ArgA);\r\n    }\r\n}\r\n\r\n_EXPORT_STD _NODISCARD constexpr inline float lerp(const float _ArgA, const float _ArgB, const float _ArgT) noexcept {\r\n    return _Common_lerp(_ArgA, _ArgB, _ArgT);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD constexpr inline double lerp(\r\n    const double _ArgA, const double _ArgB, const double _ArgT) noexcept {\r\n    return _Common_lerp(_ArgA, _ArgB, _ArgT);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD constexpr inline long double lerp(\r\n    const long double _ArgA, const long double _ArgB, const long double _ArgT) noexcept {\r\n    return _Common_lerp(static_cast<double>(_ArgA), static_cast<double>(_ArgB), static_cast<double>(_ArgT));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2, class _Ty3>\r\n    requires is_arithmetic_v<_Ty1> && is_arithmetic_v<_Ty2> && is_arithmetic_v<_Ty3>\r\n_NODISCARD constexpr auto lerp(const _Ty1 _ArgA, const _Ty2 _ArgB, const _Ty3 _ArgT) noexcept {\r\n    using _Common = _Common_float_type_t<_Ty1, _Common_float_type_t<_Ty2, _Ty3>>;\r\n    return static_cast<_Common>(\r\n        _Common_lerp(static_cast<double>(_ArgA), static_cast<double>(_ArgB), static_cast<double>(_ArgT)));\r\n}\r\n#endif // _HAS_CXX20\r\n_STD_END\r\n#endif // _HAS_CXX17\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CMATH_\r\n"
  },
  {
    "path": "stl/inc/codecvt",
    "content": "// codecvt standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CODECVT_\r\n#define _CODECVT_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <cwchar>\r\n#include <locale>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_INLINE_VAR constexpr int _Little_first = 1;\r\n_INLINE_VAR constexpr int _Big_first    = 2;\r\n\r\n_EXPORT_STD enum _CXX17_DEPRECATE_CODECVT_HEADER codecvt_mode {\r\n    consume_header  = 4,\r\n    generate_header = 2,\r\n    little_endian   = 1\r\n};\r\n\r\nusing _Statype = _CSTD mbstate_t;\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\n_EXPORT_STD template <class _Elem, unsigned long _Mymax = 0x10ffff, codecvt_mode _Mymode = codecvt_mode{}>\r\nclass _CXX17_DEPRECATE_CODECVT_HEADER codecvt_utf8 : public codecvt<_Elem, char, _Statype> {\r\n    // facet for converting between _Elem and UTF-8 byte sequences\r\npublic:\r\n    using _Mybase     = codecvt<_Elem, char, _Statype>;\r\n    using result      = typename _Mybase::result;\r\n    using _Byte       = char;\r\n    using intern_type = _Elem;\r\n    using extern_type = _Byte;\r\n    using state_type  = _Statype;\r\n\r\n    explicit codecvt_utf8(size_t _Refs = 0) : _Mybase(_Refs) {}\r\n\r\n    __CLR_OR_THIS_CALL ~codecvt_utf8() noexcept override {}\r\n\r\nprotected:\r\n    result __CLR_OR_THIS_CALL do_in(_Statype& _State, const _Byte* _First1, const _Byte* _Last1, const _Byte*& _Mid1,\r\n        _Elem* _First2, _Elem* _Last2, _Elem*& _Mid2) const override {\r\n        // convert bytes [_First1, _Last1) to [_First2, _Last2)\r\n        char* _Pstate = reinterpret_cast<char*>(&_State);\r\n        _Mid1         = _First1;\r\n        _Mid2         = _First2;\r\n\r\n        while (_Mid1 != _Last1 && _Mid2 != _Last2) { // convert a multibyte sequence\r\n            unsigned long _By = static_cast<unsigned char>(*_Mid1);\r\n            unsigned long _Ch;\r\n            int _Nextra;\r\n\r\n            if (_By < 0x80u) {\r\n                _Ch     = _By;\r\n                _Nextra = 0;\r\n            } else if (_By < 0xc0u) { // 0x80-0xbf not first byte\r\n                ++_Mid1;\r\n                return _Mybase::error;\r\n            } else if (_By < 0xe0u) {\r\n                _Ch     = _By & 0x1f;\r\n                _Nextra = 1;\r\n            } else if (_By < 0xf0u) {\r\n                _Ch     = _By & 0x0f;\r\n                _Nextra = 2;\r\n            } else if (_By < 0xf8u) {\r\n                _Ch     = _By & 0x07;\r\n                _Nextra = 3;\r\n            } else {\r\n                _Ch     = _By & 0x03;\r\n                _Nextra = _By < 0xfc ? 4 : 5;\r\n            }\r\n\r\n            if (_Nextra == 0) {\r\n                ++_Mid1;\r\n            } else if (_Last1 - _Mid1 < _Nextra + 1) {\r\n                break; // not enough input\r\n            } else {\r\n                for (++_Mid1; 0 < _Nextra; --_Nextra, ++_Mid1) {\r\n                    if ((_By = static_cast<unsigned char>(*_Mid1)) < 0x80u || 0xc0u <= _By) {\r\n                        return _Mybase::error; // not continuation byte\r\n                    } else {\r\n                        _Ch = _Ch << 6 | (_By & 0x3f);\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (*_Pstate == 0) { // first time, maybe look for and consume header\r\n                *_Pstate = 1;\r\n\r\n                if constexpr ((_Mymode & consume_header) != 0) {\r\n                    if (_Ch == 0xfeff) { // drop header and retry\r\n                        const result _Ans = do_in(_State, _Mid1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n\r\n                        if (_Ans == _Mybase::partial) { // roll back header determination\r\n                            *_Pstate = 0;\r\n                            _Mid1    = _First1;\r\n                        }\r\n\r\n                        return _Ans;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (_Mymax < _Ch) {\r\n                return _Mybase::error; // code too large\r\n            }\r\n\r\n            *_Mid2++ = static_cast<_Elem>(_Ch);\r\n        }\r\n\r\n        return _First1 == _Mid1 ? _Mybase::partial : _Mybase::ok;\r\n    }\r\n\r\n    result __CLR_OR_THIS_CALL do_out(_Statype& _State, const _Elem* _First1, const _Elem* _Last1, const _Elem*& _Mid1,\r\n        _Byte* _First2, _Byte* _Last2, _Byte*& _Mid2) const override {\r\n        // convert [_First1, _Last1) to bytes [_First2, _Last2)\r\n        char* _Pstate = reinterpret_cast<char*>(&_State);\r\n        _Mid1         = _First1;\r\n        _Mid2         = _First2;\r\n\r\n        while (_Mid1 != _Last1 && _Mid2 != _Last2) { // convert and put a wide char\r\n            _Byte _By;\r\n            int _Nextra;\r\n            unsigned long _Ch = static_cast<unsigned long>(*_Mid1);\r\n\r\n            if (_Mymax < _Ch) {\r\n                return _Mybase::error;\r\n            }\r\n\r\n            if (_Ch < 0x0080u) {\r\n                _By     = static_cast<_Byte>(_Ch);\r\n                _Nextra = 0;\r\n            } else if (_Ch < 0x0800u) {\r\n                _By     = static_cast<_Byte>(0xc0 | _Ch >> 6);\r\n                _Nextra = 1;\r\n            } else if (_Ch < 0x00010000u) {\r\n                _By     = static_cast<_Byte>(0xe0 | _Ch >> 12);\r\n                _Nextra = 2;\r\n            } else if (_Ch < 0x00200000u) {\r\n                _By     = static_cast<_Byte>(0xf0 | _Ch >> 18);\r\n                _Nextra = 3;\r\n            } else if (_Ch < 0x04000000u) {\r\n                _By     = static_cast<_Byte>(0xf8 | _Ch >> 24);\r\n                _Nextra = 4;\r\n            } else {\r\n                _By     = static_cast<_Byte>(0xfc | (_Ch >> 30 & 0x03));\r\n                _Nextra = 5;\r\n            }\r\n\r\n            if (*_Pstate == 0) { // first time, maybe generate header\r\n                *_Pstate = 1;\r\n\r\n                if constexpr ((_Mymode & generate_header) != 0) {\r\n                    if (_Last2 - _Mid2 < 3 + 1 + _Nextra) {\r\n                        return _Mybase::partial; // not enough room for both\r\n                    }\r\n\r\n                    // prepend header\r\n                    *_Mid2++ = '\\xef';\r\n                    *_Mid2++ = '\\xbb';\r\n                    *_Mid2++ = '\\xbf';\r\n                }\r\n            }\r\n\r\n            if (_Last2 - _Mid2 < 1 + _Nextra) {\r\n                break; // not enough room for output\r\n            }\r\n\r\n            ++_Mid1;\r\n            for (*_Mid2++ = _By; 0 < _Nextra;) {\r\n                *_Mid2++ = static_cast<_Byte>((_Ch >> 6 * --_Nextra & 0x3f) | 0x80);\r\n            }\r\n        }\r\n\r\n        return _First1 == _Mid1 ? _Mybase::partial : _Mybase::ok;\r\n    }\r\n\r\n    result __CLR_OR_THIS_CALL do_unshift(_Statype&, _Byte* _First2, _Byte*, _Byte*& _Mid2) const override {\r\n        // generate bytes to return to default shift state\r\n        _Mid2 = _First2;\r\n        return _Mybase::noconv;\r\n    }\r\n\r\n    friend int _Codecvt_do_length<>(const codecvt_utf8&, _Statype&, const _Byte*, const _Byte*, size_t);\r\n\r\n    int __CLR_OR_THIS_CALL do_length(\r\n        _Statype& _State, const _Byte* _First1, const _Byte* _Last1, size_t _Count) const noexcept override {\r\n        return _Codecvt_do_length(*this, _State, _First1, _Last1, _Count);\r\n    }\r\n\r\n    bool __CLR_OR_THIS_CALL do_always_noconv() const noexcept override {\r\n        // return true if conversions never change input\r\n        return false;\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_max_length() const noexcept override {\r\n        // return maximum length required for a conversion\r\n        if constexpr ((_Mymode & (consume_header | generate_header)) != 0) {\r\n            return 9;\r\n        } else {\r\n            return 6;\r\n        }\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_encoding() const noexcept override {\r\n        // return length of code sequence (from codecvt)\r\n        if constexpr ((_Mymode & (consume_header | generate_header)) != 0) {\r\n            return -1; // -1 => state dependent\r\n        } else {\r\n            return 0; // 0 => varying length\r\n        }\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, unsigned long _Mymax = 0x10ffff, codecvt_mode _Mymode = codecvt_mode{}>\r\nclass _CXX17_DEPRECATE_CODECVT_HEADER codecvt_utf16 : public codecvt<_Elem, char, _Statype> {\r\n    // facet for converting between _Elem and UTF-16 multibyte sequences\r\nprivate:\r\n    enum { _Bytes_per_word = 2 };\r\n\r\npublic:\r\n    using _Mybase     = codecvt<_Elem, char, _Statype>;\r\n    using result      = typename _Mybase::result;\r\n    using _Byte       = char;\r\n    using intern_type = _Elem;\r\n    using extern_type = _Byte;\r\n    using state_type  = _Statype;\r\n\r\n    explicit codecvt_utf16(size_t _Refs = 0) : _Mybase(_Refs) {}\r\n\r\n    __CLR_OR_THIS_CALL ~codecvt_utf16() noexcept override {}\r\n\r\nprotected:\r\n    result __CLR_OR_THIS_CALL do_in(_Statype& _State, const _Byte* _First1, const _Byte* _Last1, const _Byte*& _Mid1,\r\n        _Elem* _First2, _Elem* _Last2, _Elem*& _Mid2) const override {\r\n        // convert bytes [_First1, _Last1) to [_First2, _Last2)\r\n        char* _Pstate = reinterpret_cast<char*>(&_State);\r\n        _Mid1         = _First1;\r\n        _Mid2         = _First2;\r\n\r\n        while (_Bytes_per_word <= _Last1 - _Mid1 && _Mid2 != _Last2) { // convert a multibyte sequence\r\n            const auto _Ptr = reinterpret_cast<const unsigned char*>(_Mid1);\r\n            unsigned long _Ch;\r\n            unsigned short _Ch0;\r\n            unsigned short _Ch1;\r\n\r\n            if (*_Pstate == _Little_first) {\r\n                _Ch0 = static_cast<unsigned short>(_Ptr[1] << 8 | _Ptr[0]);\r\n            } else if (*_Pstate == _Big_first) {\r\n                _Ch0 = static_cast<unsigned short>(_Ptr[0] << 8 | _Ptr[1]);\r\n            } else { // no header seen yet, try preferred mode\r\n                constexpr bool _Prefer_LE      = (_Mymode & little_endian) != 0;\r\n                constexpr char _Default_endian = _Prefer_LE ? _Little_first : _Big_first;\r\n\r\n                if constexpr (_Prefer_LE) {\r\n                    _Ch0 = static_cast<unsigned short>(_Ptr[1] << 8 | _Ptr[0]);\r\n                } else {\r\n                    _Ch0 = static_cast<unsigned short>(_Ptr[0] << 8 | _Ptr[1]);\r\n                }\r\n\r\n                *_Pstate = _Default_endian;\r\n\r\n                if constexpr ((_Mymode & consume_header) != 0) {\r\n                    if (_Ch0 == 0xfffeu) {\r\n                        *_Pstate = 3 - _Default_endian;\r\n                    }\r\n\r\n                    if (_Ch0 == 0xfffeu || _Ch0 == 0xfeffu) { // consume header, fixate on endianness, and retry\r\n                        _Mid1 += _Bytes_per_word;\r\n                        result _Ans = do_in(_State, _Mid1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n\r\n                        if (_Ans == _Mybase::partial) { // not enough bytes, roll back header\r\n                            *_Pstate = 0;\r\n                            _Mid1    = _First1;\r\n                        }\r\n\r\n                        return _Ans;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (_Ch0 < 0xd800u || 0xdc00u <= _Ch0) { // one word, consume bytes\r\n                _Mid1 += _Bytes_per_word;\r\n                _Ch = _Ch0;\r\n            } else if (_Last1 - _Mid1 < 2 * _Bytes_per_word) {\r\n                break;\r\n            } else { // get second word\r\n                if (*_Pstate == _Little_first) {\r\n                    _Ch1 = static_cast<unsigned short>(_Ptr[3] << 8 | _Ptr[2]);\r\n                } else {\r\n                    _Ch1 = static_cast<unsigned short>(_Ptr[2] << 8 | _Ptr[3]);\r\n                }\r\n\r\n                if (_Ch1 < 0xdc00u || 0xe000u <= _Ch1) {\r\n                    return _Mybase::error;\r\n                }\r\n\r\n                _Mid1 += 2 * _Bytes_per_word;\r\n                _Ch = static_cast<unsigned long>(_Ch0 - 0xd800 + 0x0040) << 10 | (_Ch1 - 0xdc00);\r\n            }\r\n\r\n            if (_Mymax < _Ch) {\r\n                return _Mybase::error; // code too large\r\n            }\r\n\r\n            *_Mid2++ = static_cast<_Elem>(_Ch);\r\n        }\r\n\r\n        return _First1 == _Mid1 ? _Mybase::partial : _Mybase::ok;\r\n    }\r\n\r\n    result __CLR_OR_THIS_CALL do_out(_Statype& _State, const _Elem* _First1, const _Elem* _Last1, const _Elem*& _Mid1,\r\n        _Byte* _First2, _Byte* _Last2, _Byte*& _Mid2) const override {\r\n        // convert [_First1, _Last1) to bytes [_First2, _Last2)\r\n        char* _Pstate = reinterpret_cast<char*>(&_State);\r\n        _Mid1         = _First1;\r\n        _Mid2         = _First2;\r\n\r\n        if (*_Pstate == 0) { // determine endianness once, maybe generate header\r\n            if constexpr ((_Mymode & little_endian) != 0) {\r\n                *_Pstate = _Little_first;\r\n            } else {\r\n                *_Pstate = _Big_first;\r\n            }\r\n\r\n            if constexpr ((_Mymode & generate_header) != 0) {\r\n                if (_Last2 - _Mid2 < 3 * _Bytes_per_word) {\r\n                    return _Mybase::partial; // not enough room for all\r\n                }\r\n\r\n                if (*_Pstate == _Little_first) { // put header LS byte first\r\n                    *_Mid2++ = '\\xff';\r\n                    *_Mid2++ = '\\xfe';\r\n                } else { // put header MS byte first\r\n                    *_Mid2++ = '\\xfe';\r\n                    *_Mid2++ = '\\xff';\r\n                }\r\n            }\r\n        }\r\n\r\n        while (_Mid1 != _Last1 && _Bytes_per_word <= _Last2 - _Mid2) { // convert and put a wide char\r\n            bool _Extra       = false;\r\n            unsigned long _Ch = static_cast<unsigned long>(*_Mid1++);\r\n\r\n            if ((_Mymax < 0x10ffffu ? _Mymax : 0x10ffffu) < _Ch) {\r\n                return _Mybase::error; // value too large\r\n            }\r\n\r\n            if (_Ch <= 0xffffu) { // one word, can't be code for first of two\r\n                if (0xd800u <= _Ch && _Ch < 0xdc00u) {\r\n                    return _Mybase::error;\r\n                }\r\n            } else if (_Last2 - _Mid2 < 2 * _Bytes_per_word) { // not enough room for two-word output, back up\r\n                --_Mid1;\r\n                return _Mybase::partial;\r\n            } else {\r\n                _Extra = true;\r\n            }\r\n\r\n            if (*_Pstate == _Little_first) {\r\n                if (_Extra) { // put a pair of words LS byte first\r\n                    unsigned short _Ch0 =\r\n                        static_cast<unsigned short>(0xd800 | static_cast<unsigned short>(_Ch >> 10) - 0x0040);\r\n                    *_Mid2++ = static_cast<_Byte>(_Ch0);\r\n                    *_Mid2++ = static_cast<_Byte>(_Ch0 >> 8);\r\n\r\n                    _Ch0     = static_cast<unsigned short>(0xdc00 | (static_cast<unsigned short>(_Ch) & 0x03ff));\r\n                    *_Mid2++ = static_cast<_Byte>(_Ch0);\r\n                    *_Mid2++ = static_cast<_Byte>(_Ch0 >> 8);\r\n                } else { // put a single word LS byte first\r\n                    *_Mid2++ = static_cast<_Byte>(_Ch);\r\n                    *_Mid2++ = static_cast<_Byte>(_Ch >> 8);\r\n                }\r\n            } else {\r\n                if (_Extra) { // put a pair of words MS byte first\r\n                    unsigned short _Ch0 =\r\n                        static_cast<unsigned short>(0xd800 | static_cast<unsigned short>(_Ch >> 10) - 0x0040);\r\n                    *_Mid2++ = static_cast<_Byte>(_Ch0 >> 8);\r\n                    *_Mid2++ = static_cast<_Byte>(_Ch0);\r\n\r\n                    _Ch0     = static_cast<unsigned short>(0xdc00 | (static_cast<unsigned short>(_Ch) & 0x03ff));\r\n                    *_Mid2++ = static_cast<_Byte>(_Ch0 >> 8);\r\n                    *_Mid2++ = static_cast<_Byte>(_Ch0);\r\n                } else { // put a single word MS byte first\r\n                    *_Mid2++ = static_cast<_Byte>(_Ch >> 8);\r\n                    *_Mid2++ = static_cast<_Byte>(_Ch);\r\n                }\r\n            }\r\n        }\r\n\r\n        return _First1 == _Mid1 ? _Mybase::partial : _Mybase::ok;\r\n    }\r\n\r\n    result __CLR_OR_THIS_CALL do_unshift(_Statype&, _Byte* _First2, _Byte*, _Byte*& _Mid2) const override {\r\n        // generate bytes to return to default shift state\r\n        _Mid2 = _First2;\r\n        return _Mybase::noconv;\r\n    }\r\n\r\n    friend int _Codecvt_do_length<>(const codecvt_utf16&, _Statype&, const _Byte*, const _Byte*, size_t);\r\n\r\n    int __CLR_OR_THIS_CALL do_length(\r\n        _Statype& _State, const _Byte* _First1, const _Byte* _Last1, size_t _Count) const noexcept override {\r\n        return _Codecvt_do_length(*this, _State, _First1, _Last1, _Count);\r\n    }\r\n\r\n    bool __CLR_OR_THIS_CALL do_always_noconv() const noexcept override {\r\n        // return true if conversions never change input\r\n        return false;\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_max_length() const noexcept override {\r\n        // return maximum length required for a conversion\r\n        if constexpr ((_Mymode & (consume_header | generate_header)) != 0) {\r\n            return 3 * _Bytes_per_word;\r\n        } else {\r\n            return 6 * _Bytes_per_word;\r\n        }\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_encoding() const noexcept override {\r\n        // return length of code sequence (from codecvt)\r\n        if constexpr ((_Mymode & (consume_header | generate_header)) != 0) {\r\n            return -1; // -1 => state dependent\r\n        } else {\r\n            return 0; // 0 => varying length\r\n        }\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, unsigned long _Mymax = 0x10ffff, codecvt_mode _Mymode = codecvt_mode{}>\r\nclass _CXX17_DEPRECATE_CODECVT_HEADER codecvt_utf8_utf16\r\n    : public codecvt<_Elem, char, _Statype> { // facet for converting between UTF-16 _Elem and UTF-8 byte sequences\r\npublic:\r\n    using _Mybase     = codecvt<_Elem, char, _Statype>;\r\n    using result      = typename _Mybase::result;\r\n    using _Byte       = char;\r\n    using intern_type = _Elem;\r\n    using extern_type = _Byte;\r\n    using state_type  = _Statype;\r\n\r\n    static_assert(sizeof(unsigned short) <= sizeof(state_type), \"state_type too small\");\r\n\r\n    explicit codecvt_utf8_utf16(size_t _Refs = 0) : _Mybase(_Refs) {}\r\n\r\n    __CLR_OR_THIS_CALL ~codecvt_utf8_utf16() noexcept override {}\r\n\r\nprotected:\r\n    result __CLR_OR_THIS_CALL do_in(_Statype& _State, const _Byte* _First1, const _Byte* _Last1, const _Byte*& _Mid1,\r\n        _Elem* _First2, _Elem* _Last2, _Elem*& _Mid2) const override {\r\n        // convert bytes [_First1, _Last1) to [_First2, _Last2)\r\n        unsigned short* _Pstate = reinterpret_cast<unsigned short*>(&_State);\r\n        _Mid1                   = _First1;\r\n        _Mid2                   = _First2;\r\n\r\n        while (_Mid1 != _Last1 && _Mid2 != _Last2) { // convert a multibyte sequence\r\n            unsigned long _By = static_cast<unsigned char>(*_Mid1);\r\n            unsigned long _Ch;\r\n            int _Nextra;\r\n            int _Nskip;\r\n\r\n            if (*_Pstate > 1u) {\r\n                if (_By < 0x80u || 0xc0u <= _By) {\r\n                    return _Mybase::error; // not continuation byte\r\n                }\r\n\r\n                // deliver second half of two-word value\r\n                ++_Mid1;\r\n                *_Mid2++ = static_cast<_Elem>(*_Pstate | (_By & 0x3f));\r\n                *_Pstate = 1;\r\n                continue;\r\n            }\r\n\r\n            if (_By < 0x80u) {\r\n                _Ch     = _By;\r\n                _Nextra = 0;\r\n            } else if (_By < 0xc0u) { // 0x80-0xbf not first byte\r\n                ++_Mid1;\r\n                return _Mybase::error;\r\n            } else if (_By < 0xe0u) {\r\n                _Ch     = _By & 0x1f;\r\n                _Nextra = 1;\r\n            } else if (_By < 0xf0u) {\r\n                _Ch     = _By & 0x0f;\r\n                _Nextra = 2;\r\n            } else if (_By < 0xf8u) {\r\n                _Ch     = _By & 0x07;\r\n                _Nextra = 3;\r\n            } else {\r\n                _Ch     = _By & 0x03;\r\n                _Nextra = _By < 0xfc ? 4 : 5;\r\n            }\r\n\r\n            _Nskip  = _Nextra < 3 ? 0 : 1; // leave a byte for 2nd word\r\n            _First1 = _Mid1; // roll back point\r\n\r\n            if (_Nextra == 0) {\r\n                ++_Mid1;\r\n            } else if (_Last1 - _Mid1 < _Nextra + 1 - _Nskip) {\r\n                break; // not enough input\r\n            } else {\r\n                for (++_Mid1; _Nskip < _Nextra; --_Nextra, ++_Mid1) {\r\n                    if ((_By = static_cast<unsigned char>(*_Mid1)) < 0x80u || 0xc0u <= _By) {\r\n                        return _Mybase::error; // not continuation byte\r\n                    }\r\n\r\n                    _Ch = _Ch << 6 | (_By & 0x3f);\r\n                }\r\n            }\r\n\r\n            if (0 < _Nskip) {\r\n                _Ch <<= 6; // get last byte on next call\r\n            }\r\n\r\n            if ((_Mymax < 0x10ffffu ? _Mymax : 0x10ffffu) < _Ch) {\r\n                return _Mybase::error; // value too large\r\n            }\r\n\r\n            if (0xffffu < _Ch) { // deliver first half of two-word value, save second word\r\n                unsigned short _Ch0 = static_cast<unsigned short>(0xd800 | (_Ch >> 10) - 0x0040);\r\n\r\n                *_Mid2++ = static_cast<_Elem>(_Ch0);\r\n                *_Pstate = static_cast<unsigned short>(0xdc00 | (_Ch & 0x03ff));\r\n                continue;\r\n            }\r\n\r\n            if (_Nskip != 0) {\r\n                if (_Mid1 == _Last1) { // not enough bytes, noncanonical value\r\n                    _Mid1 = _First1;\r\n                    break;\r\n                }\r\n\r\n                if ((_By = static_cast<unsigned char>(*_Mid1++)) < 0x80u || 0xc0u <= _By) {\r\n                    return _Mybase::error; // not continuation byte\r\n                }\r\n\r\n                _Ch |= _By & 0x3f; // complete noncanonical value\r\n            }\r\n\r\n            if (*_Pstate == 0u) { // first time, maybe look for and consume header\r\n                *_Pstate = 1;\r\n\r\n                if constexpr ((_Mymode & consume_header) != 0) {\r\n                    if (_Ch == 0xfeffu) { // drop header and retry\r\n                        result _Ans = do_in(_State, _Mid1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n\r\n                        if (_Ans == _Mybase::partial) { // roll back header determination\r\n                            *_Pstate = 0;\r\n                            _Mid1    = _First1;\r\n                        }\r\n\r\n                        return _Ans;\r\n                    }\r\n                }\r\n            }\r\n\r\n            *_Mid2++ = static_cast<_Elem>(_Ch);\r\n        }\r\n\r\n        return _First1 == _Mid1 ? _Mybase::partial : _Mybase::ok;\r\n    }\r\n\r\n    result __CLR_OR_THIS_CALL do_out(_Statype& _State, const _Elem* _First1, const _Elem* _Last1, const _Elem*& _Mid1,\r\n        _Byte* _First2, _Byte* _Last2, _Byte*& _Mid2) const override {\r\n        // convert [_First1, _Last1) to bytes [_First2, _Last2)\r\n        unsigned short* _Pstate = reinterpret_cast<unsigned short*>(&_State);\r\n        _Mid1                   = _First1;\r\n        _Mid2                   = _First2;\r\n\r\n        while (_Mid1 != _Last1 && _Mid2 != _Last2) { // convert and put a wide char\r\n            unsigned long _Ch;\r\n            unsigned short _Ch1 = static_cast<unsigned short>(*_Mid1);\r\n            bool _Save          = false;\r\n\r\n            if (1u < *_Pstate) { // get saved MS 11 bits from *_Pstate\r\n                if (_Ch1 < 0xdc00u || 0xe000u <= _Ch1) {\r\n                    return _Mybase::error; // bad second word\r\n                }\r\n\r\n                _Ch = static_cast<unsigned long>((*_Pstate << 10) | (_Ch1 - 0xdc00));\r\n            } else if (0xd800u <= _Ch1 && _Ch1 < 0xdc00u) { // get new first word\r\n                _Ch   = static_cast<unsigned long>((_Ch1 - 0xd800 + 0x0040) << 10);\r\n                _Save = true; // put only first byte, rest with second word\r\n            } else {\r\n                _Ch = _Ch1; // not first word, just put it\r\n            }\r\n\r\n            _Byte _By;\r\n            int _Nextra;\r\n\r\n            if (_Ch < 0x0080u) {\r\n                _By     = static_cast<_Byte>(_Ch);\r\n                _Nextra = 0;\r\n            } else if (_Ch < 0x0800u) {\r\n                _By     = static_cast<_Byte>(0xc0 | _Ch >> 6);\r\n                _Nextra = 1;\r\n            } else if (_Ch < 0x10000u) {\r\n                _By     = static_cast<_Byte>(0xe0 | _Ch >> 12);\r\n                _Nextra = 2;\r\n            } else {\r\n                _By     = static_cast<_Byte>(0xf0 | _Ch >> 18);\r\n                _Nextra = 3;\r\n            }\r\n\r\n            int _Nput = _Nextra < 3 ? _Nextra + 1 : _Save ? 1 : 3;\r\n\r\n            if (_Last2 - _Mid2 < _Nput) {\r\n                break; // not enough room, even without header\r\n            }\r\n\r\n            if constexpr ((_Mymode & generate_header) != 0) { // header to put\r\n                if (*_Pstate == 0u) {\r\n                    if (_Last2 - _Mid2 < 3 + _Nput) {\r\n                        break; // not enough room for header + output\r\n                    }\r\n\r\n                    // prepend header\r\n                    *_Mid2++ = '\\xef';\r\n                    *_Mid2++ = '\\xbb';\r\n                    *_Mid2++ = '\\xbf';\r\n                }\r\n            }\r\n\r\n            ++_Mid1;\r\n            if (_Save || _Nextra < 3) { // put first byte of sequence, if not already put\r\n                *_Mid2++ = _By;\r\n                --_Nput;\r\n            }\r\n\r\n            for (; 0 < _Nput; --_Nput) {\r\n                *_Mid2++ = static_cast<_Byte>((_Ch >> 6 * --_Nextra & 0x3f) | 0x80);\r\n            }\r\n\r\n            *_Pstate = static_cast<unsigned short>(_Save ? _Ch >> 10 : 1);\r\n        }\r\n\r\n        return _First1 == _Mid1 ? _Mybase::partial : _Mybase::ok;\r\n    }\r\n\r\n    result __CLR_OR_THIS_CALL do_unshift(_Statype&, _Byte* _First2, _Byte*, _Byte*& _Mid2) const override {\r\n        // generate bytes to return to default shift state\r\n        _Mid2 = _First2;\r\n        return _Mybase::noconv;\r\n    }\r\n\r\n    friend int _Codecvt_do_length<>(const codecvt_utf8_utf16&, _Statype&, const _Byte*, const _Byte*, size_t);\r\n\r\n    int __CLR_OR_THIS_CALL do_length(\r\n        _Statype& _State, const _Byte* _First1, const _Byte* _Last1, size_t _Count) const noexcept override {\r\n        return _Codecvt_do_length(*this, _State, _First1, _Last1, _Count);\r\n    }\r\n\r\n    bool __CLR_OR_THIS_CALL do_always_noconv() const noexcept override {\r\n        // return true if conversions never change input\r\n        return false;\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_max_length() const noexcept override {\r\n        // return maximum length required for a conversion\r\n        if constexpr ((_Mymode & consume_header) != 0) {\r\n            return 9; // header + max input\r\n        } else if constexpr ((_Mymode & generate_header) != 0) {\r\n            return 7; // header + max output\r\n        } else {\r\n            return 6; // 6-byte max input sequence, no 3-byte header\r\n        }\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_encoding() const noexcept override {\r\n        // return length of code sequence (from codecvt)\r\n        return 0; // 0 => varying length\r\n    }\r\n};\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CODECVT_\r\n"
  },
  {
    "path": "stl/inc/compare",
    "content": "// compare standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _COMPARE_\r\n#define _COMPARE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX20\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <compare> are available only with C++20 or later.\");\r\n#else // ^^^ !_HAS_CXX20 / _HAS_CXX20 vvv\r\n#include <concepts>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\nvoid _Literal_zero_is_expected();\r\n\r\nstruct _Literal_zero {\r\n    template <class _Ty>\r\n        requires is_same_v<_Ty, int>\r\n    consteval _Literal_zero(_Ty _Zero) noexcept {\r\n        // Can't use _STL_VERIFY because this is a core header\r\n        if (_Zero != 0) {\r\n            _Literal_zero_is_expected();\r\n        }\r\n    }\r\n};\r\n\r\nusing _Compare_t = signed char;\r\n\r\n// These \"pretty\" enumerator names are safe since they reuse names of user-facing entities.\r\nenum class _Compare_eq : _Compare_t { equal = 0, equivalent = equal };\r\nenum class _Compare_ord : _Compare_t { less = -1, greater = 1 };\r\nenum class _Compare_ncmp : _Compare_t { unordered = -128 };\r\n\r\n_EXPORT_STD struct partial_ordering {\r\n    static const partial_ordering less;\r\n    static const partial_ordering equivalent;\r\n    static const partial_ordering greater;\r\n    static const partial_ordering unordered;\r\n\r\n    _NODISCARD friend constexpr bool operator==(const partial_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val._Value == 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator==(partial_ordering, partial_ordering) noexcept = default;\r\n\r\n    _NODISCARD friend constexpr bool operator<(const partial_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val._Value == static_cast<_Compare_t>(_Compare_ord::less);\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator>(const partial_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val._Value > 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator<=(const partial_ordering _Val, _Literal_zero) noexcept {\r\n        // The stored value is either less (0xff), equivalent (0x00), greater (0x01), or unordered (0x80).\r\n        // Subtracting from 0 produces either 0x01, 0x00, 0xff, or 0x80. The result is greater than or equal to 0\r\n        // if and only if the initial value was less or equivalent, for which we want to return true.\r\n        return static_cast<signed char>(0 - static_cast<unsigned int>(_Val._Value)) >= 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator>=(const partial_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val._Value >= 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator<(_Literal_zero, const partial_ordering _Val) noexcept {\r\n        return _Val > 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator>(_Literal_zero, const partial_ordering _Val) noexcept {\r\n        return _Val < 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator<=(_Literal_zero, const partial_ordering _Val) noexcept {\r\n        return _Val >= 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator>=(_Literal_zero, const partial_ordering _Val) noexcept {\r\n        return _Val <= 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr partial_ordering operator<=>(const partial_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val;\r\n    }\r\n\r\n    _NODISCARD friend constexpr partial_ordering operator<=>(_Literal_zero, const partial_ordering _Val) noexcept {\r\n        // The stored value is either less (0xff), equivalent (0x00), greater (0x01), or unordered (0x80).\r\n        // Subtracting from 0 produces either 0x01, 0x00, 0xff, or 0x80. Note that the effect is to\r\n        // exchange less for greater (and vice versa), while leaving equivalent and unordered unchanged.\r\n        return {static_cast<_Compare_t>(0 - static_cast<unsigned int>(_Val._Value))};\r\n    }\r\n\r\n    _Compare_t _Value;\r\n};\r\n\r\ninline constexpr partial_ordering partial_ordering::less{static_cast<_Compare_t>(_Compare_ord::less)};\r\ninline constexpr partial_ordering partial_ordering::equivalent{static_cast<_Compare_t>(_Compare_eq::equivalent)};\r\ninline constexpr partial_ordering partial_ordering::greater{static_cast<_Compare_t>(_Compare_ord::greater)};\r\ninline constexpr partial_ordering partial_ordering::unordered{static_cast<_Compare_t>(_Compare_ncmp::unordered)};\r\n\r\n_EXPORT_STD struct weak_ordering {\r\n    static const weak_ordering less;\r\n    static const weak_ordering equivalent;\r\n    static const weak_ordering greater;\r\n\r\n    constexpr operator partial_ordering() const noexcept {\r\n        return {static_cast<_Compare_t>(_Value)};\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator==(const weak_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val._Value == 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator==(weak_ordering, weak_ordering) noexcept = default;\r\n\r\n    _NODISCARD friend constexpr bool operator<(const weak_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val._Value < 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator>(const weak_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val._Value > 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator<=(const weak_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val._Value <= 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator>=(const weak_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val._Value >= 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator<(_Literal_zero, const weak_ordering _Val) noexcept {\r\n        return _Val > 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator>(_Literal_zero, const weak_ordering _Val) noexcept {\r\n        return _Val < 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator<=(_Literal_zero, const weak_ordering _Val) noexcept {\r\n        return _Val >= 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator>=(_Literal_zero, const weak_ordering _Val) noexcept {\r\n        return _Val <= 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr weak_ordering operator<=>(const weak_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val;\r\n    }\r\n\r\n    _NODISCARD friend constexpr weak_ordering operator<=>(_Literal_zero, const weak_ordering _Val) noexcept {\r\n        return {static_cast<_Compare_t>(-_Val._Value)};\r\n    }\r\n\r\n    _Compare_t _Value;\r\n};\r\n\r\ninline constexpr weak_ordering weak_ordering::less{static_cast<_Compare_t>(_Compare_ord::less)};\r\ninline constexpr weak_ordering weak_ordering::equivalent{static_cast<_Compare_t>(_Compare_eq::equivalent)};\r\ninline constexpr weak_ordering weak_ordering::greater{static_cast<_Compare_t>(_Compare_ord::greater)};\r\n\r\n_EXPORT_STD struct strong_ordering {\r\n    static const strong_ordering less;\r\n    static const strong_ordering equal;\r\n    static const strong_ordering equivalent;\r\n    static const strong_ordering greater;\r\n\r\n    constexpr operator partial_ordering() const noexcept {\r\n        return {static_cast<_Compare_t>(_Value)};\r\n    }\r\n\r\n    constexpr operator weak_ordering() const noexcept {\r\n        return {static_cast<_Compare_t>(_Value)};\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator==(const strong_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val._Value == 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator==(strong_ordering, strong_ordering) noexcept = default;\r\n\r\n    _NODISCARD friend constexpr bool operator<(const strong_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val._Value < 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator>(const strong_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val._Value > 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator<=(const strong_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val._Value <= 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator>=(const strong_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val._Value >= 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator<(_Literal_zero, const strong_ordering _Val) noexcept {\r\n        return _Val > 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator>(_Literal_zero, const strong_ordering _Val) noexcept {\r\n        return _Val < 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator<=(_Literal_zero, const strong_ordering _Val) noexcept {\r\n        return _Val >= 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator>=(_Literal_zero, const strong_ordering _Val) noexcept {\r\n        return _Val <= 0;\r\n    }\r\n\r\n    _NODISCARD friend constexpr strong_ordering operator<=>(const strong_ordering _Val, _Literal_zero) noexcept {\r\n        return _Val;\r\n    }\r\n\r\n    _NODISCARD friend constexpr strong_ordering operator<=>(_Literal_zero, const strong_ordering _Val) noexcept {\r\n        return {static_cast<_Compare_t>(-_Val._Value)};\r\n    }\r\n\r\n    _Compare_t _Value;\r\n};\r\n\r\ninline constexpr strong_ordering strong_ordering::less{static_cast<_Compare_t>(_Compare_ord::less)};\r\ninline constexpr strong_ordering strong_ordering::equal{static_cast<_Compare_t>(_Compare_eq::equal)};\r\ninline constexpr strong_ordering strong_ordering::equivalent{static_cast<_Compare_t>(_Compare_eq::equivalent)};\r\ninline constexpr strong_ordering strong_ordering::greater{static_cast<_Compare_t>(_Compare_ord::greater)};\r\n\r\n_EXPORT_STD _NODISCARD constexpr bool is_eq(const partial_ordering _Comp) noexcept {\r\n    return _Comp == 0;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD constexpr bool is_neq(const partial_ordering _Comp) noexcept {\r\n    return _Comp != 0;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD constexpr bool is_lt(const partial_ordering _Comp) noexcept {\r\n    return _Comp < 0;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD constexpr bool is_lteq(const partial_ordering _Comp) noexcept {\r\n    return _Comp <= 0;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD constexpr bool is_gt(const partial_ordering _Comp) noexcept {\r\n    return _Comp > 0;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD constexpr bool is_gteq(const partial_ordering _Comp) noexcept {\r\n    return _Comp >= 0;\r\n}\r\n\r\nenum _Comparison_category : unsigned char {\r\n    _Comparison_category_none    = 1,\r\n    _Comparison_category_partial = 2,\r\n    _Comparison_category_weak    = 4,\r\n    _Comparison_category_strong  = 0,\r\n};\r\n\r\ntemplate <class... _Types>\r\nconstexpr unsigned char _Classify_category =\r\n    _Comparison_category{(_Classify_category<_Types> | ... | _Comparison_category_strong)};\r\ntemplate <class _Ty>\r\nconstexpr unsigned char _Classify_category<_Ty> = _Comparison_category_none;\r\ntemplate <>\r\ninline constexpr unsigned char _Classify_category<partial_ordering> = _Comparison_category_partial;\r\ntemplate <>\r\ninline constexpr unsigned char _Classify_category<weak_ordering> = _Comparison_category_weak;\r\ntemplate <>\r\ninline constexpr unsigned char _Classify_category<strong_ordering> = _Comparison_category_strong;\r\n\r\n_EXPORT_STD template <class... _Types>\r\nusing common_comparison_category_t =\r\n    conditional_t<((_Classify_category<_Types...> & _Comparison_category_none) != 0), void,\r\n        conditional_t<((_Classify_category<_Types...> & _Comparison_category_partial) != 0), partial_ordering,\r\n            conditional_t<((_Classify_category<_Types...> & _Comparison_category_weak) != 0), weak_ordering,\r\n                strong_ordering>>>;\r\n\r\n_EXPORT_STD template <class... _Types>\r\nstruct common_comparison_category {\r\n    using type = common_comparison_category_t<_Types...>;\r\n};\r\n\r\ntemplate <class _Ty, class _Cat>\r\nconcept _Compares_as = same_as<common_comparison_category_t<_Ty, _Cat>, _Cat>;\r\n\r\n_EXPORT_STD template <class _Ty, class _Cat = partial_ordering>\r\nconcept three_way_comparable = _Half_equality_comparable<_Ty, _Ty> && _Half_ordered<_Ty, _Ty>\r\n                            && requires(const remove_reference_t<_Ty>& __a, const remove_reference_t<_Ty>& __b) {\r\n                                   { __a <=> __b } -> _Compares_as<_Cat>;\r\n                               };\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2, class _Cat = partial_ordering>\r\nconcept three_way_comparable_with =\r\n    three_way_comparable<_Ty1, _Cat> && three_way_comparable<_Ty2, _Cat> && _Comparison_common_type_with<_Ty1, _Ty2>\r\n    && three_way_comparable<common_reference_t<const remove_reference_t<_Ty1>&, const remove_reference_t<_Ty2>&>, _Cat>\r\n    && _Weakly_equality_comparable_with<_Ty1, _Ty2> && _Partially_ordered_with<_Ty1, _Ty2>\r\n    && requires(const remove_reference_t<_Ty1>& __t, const remove_reference_t<_Ty2>& __u) {\r\n           { __t <=> __u } -> _Compares_as<_Cat>;\r\n           { __u <=> __t } -> _Compares_as<_Cat>;\r\n       };\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2 = _Ty1>\r\nusing compare_three_way_result_t =\r\n    decltype(_STD declval<const remove_reference_t<_Ty1>&>() <=> _STD declval<const remove_reference_t<_Ty2>&>());\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2 = _Ty1>\r\nstruct _NO_SPECIALIZATIONS_CITING(\"N5014 [cmp.result]/1\") compare_three_way_result {};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n    requires requires { typename compare_three_way_result_t<_Ty1, _Ty2>; }\r\nstruct compare_three_way_result<_Ty1, _Ty2> {\r\n    using type = compare_three_way_result_t<_Ty1, _Ty2>;\r\n};\r\n\r\n_EXPORT_STD struct compare_three_way {\r\n    template <class _Ty1, class _Ty2>\r\n        requires three_way_comparable_with<_Ty1, _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const\r\n        noexcept(noexcept(_STD forward<_Ty1>(_Left) <=> _STD forward<_Ty2>(_Right))) /* strengthened */ {\r\n        return _STD forward<_Ty1>(_Left) <=> _STD forward<_Ty2>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\nstruct _Synth_three_way {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD static constexpr auto operator()(const _Ty1& _Left, const _Ty2& _Right)\r\n        requires requires {\r\n            { _Left < _Right } -> _Boolean_testable;\r\n            { _Right < _Left } -> _Boolean_testable;\r\n        }\r\n    {\r\n        if constexpr (three_way_comparable_with<_Ty1, _Ty2>) {\r\n            return _Left <=> _Right;\r\n        } else {\r\n            if (_Left < _Right) {\r\n                return weak_ordering::less;\r\n            } else if (_Right < _Left) {\r\n                return weak_ordering::greater;\r\n            } else {\r\n                return weak_ordering::equivalent;\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2 = _Ty1>\r\nusing _Synth_three_way_result = decltype(_Synth_three_way{}(_STD declval<_Ty1&>(), _STD declval<_Ty2&>()));\r\n\r\n// Note: The following CPOs are passing arguments as lvalues; see GH-1374.\r\n\r\nnamespace _Strong_order {\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1681199\r\n    void strong_order() = delete; // Block unqualified name lookup\r\n#else // ^^^ no workaround / workaround vvv\r\n    void strong_order();\r\n#endif // ^^^ workaround ^^^\r\n\r\n    template <class _Ty1, class _Ty2>\r\n    concept _Has_ADL = requires(_Ty1& _Left, _Ty2& _Right) {\r\n        static_cast<strong_ordering>(strong_order(_Left, _Right)); // intentional ADL\r\n    };\r\n\r\n    template <class _Ty1, class _Ty2>\r\n    concept _Can_compare_three_way =\r\n        requires(_Ty1& _Left, _Ty2& _Right) { static_cast<strong_ordering>(compare_three_way{}(_Left, _Right)); };\r\n\r\n    class _Cpo {\r\n    private:\r\n        enum class _St { _None, _Adl, _Floating, _Three };\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n            if constexpr (!same_as<decay_t<_Ty1>, decay_t<_Ty2>>) {\r\n                return {_St::_None};\r\n            } else if constexpr (_Has_ADL<_Ty1, _Ty2>) {\r\n                return {_St::_Adl, noexcept(static_cast<strong_ordering>(\r\n                                       strong_order(_STD declval<_Ty1&>(), _STD declval<_Ty2&>())))}; // intentional ADL\r\n            } else if constexpr (floating_point<decay_t<_Ty1>>) {\r\n                return {_St::_Floating, true};\r\n            } else if constexpr (_Can_compare_three_way<_Ty1, _Ty2>) {\r\n                return {_St::_Three, noexcept(static_cast<strong_ordering>(\r\n                                         compare_three_way{}(_STD declval<_Ty1&>(), _STD declval<_Ty2&>())))};\r\n            } else {\r\n                return {_St::_None};\r\n            }\r\n        }\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        static constexpr _Choice_t<_St> _Choice = _Choose<_Ty1, _Ty2>();\r\n\r\n    public:\r\n        template <class _Ty1, class _Ty2>\r\n            requires (_Choice<_Ty1&, _Ty2&>._Strategy != _St::_None)\r\n        _NODISCARD static constexpr strong_ordering operator()(_Ty1&& _Left, _Ty2&& _Right)\r\n            noexcept(_Choice<_Ty1&, _Ty2&>._No_throw) {\r\n            constexpr _St _Strat = _Choice<_Ty1&, _Ty2&>._Strategy;\r\n            if constexpr (_Strat == _St::_Adl) {\r\n                return static_cast<strong_ordering>(strong_order(_Left, _Right)); // intentional ADL\r\n            } else if constexpr (_Strat == _St::_Floating) {\r\n                using _Floating_type = decay_t<_Ty1>;\r\n                using _Traits        = _Floating_type_traits<_Floating_type>;\r\n                using _Uint_type     = _Traits::_Uint_type;\r\n                using _Sint_type     = make_signed_t<_Uint_type>;\r\n\r\n                const auto _Left_uint  = _Bit_cast<_Uint_type>(_Left);\r\n                const auto _Right_uint = _Bit_cast<_Uint_type>(_Right);\r\n\r\n                // 1. Ultra-fast path: equal representations are equal.\r\n                if (_Left_uint == _Right_uint) {\r\n                    return strong_ordering::equal;\r\n                }\r\n\r\n                // 2. Examine the sign bits.\r\n                const _Uint_type _Left_shifted_sign  = _Left_uint & _Traits::_Shifted_sign_mask;\r\n                const _Uint_type _Right_shifted_sign = _Right_uint & _Traits::_Shifted_sign_mask;\r\n\r\n                // 3. Interpret floating-point bit patterns as sign magnitude representations of integers,\r\n                //    and then transform them into ones' complement representation.\r\n                // (Ones' complement representations of positive zero and negative zero are different.)\r\n                const _Uint_type _Left_sign  = _Left_shifted_sign >> _Traits::_Sign_shift;\r\n                const _Uint_type _Right_sign = _Right_shifted_sign >> _Traits::_Sign_shift;\r\n\r\n                const _Uint_type _Left_xor  = _Left_shifted_sign - _Left_sign;\r\n                const _Uint_type _Right_xor = _Right_shifted_sign - _Right_sign;\r\n\r\n                const _Uint_type _Left_ones_complement_uint  = _Left_uint ^ _Left_xor;\r\n                const _Uint_type _Right_ones_complement_uint = _Right_uint ^ _Right_xor;\r\n\r\n                const auto _Left_ones_complement  = static_cast<_Sint_type>(_Left_ones_complement_uint);\r\n                const auto _Right_ones_complement = static_cast<_Sint_type>(_Right_ones_complement_uint);\r\n\r\n                // 4. Perform the final comparison.\r\n                return _Left_ones_complement <=> _Right_ones_complement;\r\n            } else if constexpr (_Strat == _St::_Three) {\r\n                return static_cast<strong_ordering>(compare_three_way{}(_Left, _Right));\r\n            } else {\r\n                static_assert(false); // unexpected strategy\r\n            }\r\n        }\r\n    };\r\n} // namespace _Strong_order\r\n\r\ninline namespace _Cpos {\r\n    _EXPORT_STD inline constexpr _Strong_order::_Cpo strong_order;\r\n}\r\n\r\nnamespace _Weak_order {\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1681199\r\n    void weak_order() = delete; // Block unqualified name lookup\r\n#else // ^^^ no workaround / workaround vvv\r\n    void weak_order();\r\n#endif // ^^^ workaround ^^^\r\n\r\n    template <class _Ty1, class _Ty2>\r\n    concept _Has_ADL = requires(_Ty1& _Left, _Ty2& _Right) {\r\n        static_cast<weak_ordering>(weak_order(_Left, _Right)); // intentional ADL\r\n    };\r\n\r\n    template <class _Ty1, class _Ty2>\r\n    concept _Can_compare_three_way =\r\n        requires(_Ty1& _Left, _Ty2& _Right) { static_cast<weak_ordering>(compare_three_way{}(_Left, _Right)); };\r\n\r\n    // Throughput optimization: attempting to use _STD strong_order will always select ADL strong_order here.\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1681199\r\n    void strong_order() = delete; // Block unqualified name lookup\r\n#else // ^^^ no workaround / workaround vvv\r\n    void strong_order();\r\n#endif // ^^^ workaround ^^^\r\n\r\n    class _Cpo {\r\n    private:\r\n        enum class _St { _None, _Adl, _Floating, _Three, _Strong };\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n            if constexpr (!same_as<decay_t<_Ty1>, decay_t<_Ty2>>) {\r\n                return {_St::_None};\r\n            } else if constexpr (_Has_ADL<_Ty1, _Ty2>) {\r\n                return {_St::_Adl, noexcept(static_cast<weak_ordering>(\r\n                                       weak_order(_STD declval<_Ty1&>(), _STD declval<_Ty2&>())))}; // intentional ADL\r\n            } else if constexpr (floating_point<decay_t<_Ty1>>) {\r\n                return {_St::_Floating, true};\r\n            } else if constexpr (_Can_compare_three_way<_Ty1, _Ty2>) {\r\n                return {_St::_Three, noexcept(static_cast<weak_ordering>(\r\n                                         compare_three_way{}(_STD declval<_Ty1&>(), _STD declval<_Ty2&>())))};\r\n            } else if constexpr (_Strong_order::_Has_ADL<_Ty1, _Ty2>) {\r\n                // throughput optimization (see above):\r\n                return {_St::_Strong, noexcept(static_cast<weak_ordering>(static_cast<strong_ordering>(strong_order(\r\n                                          _STD declval<_Ty1&>(), _STD declval<_Ty2&>()))))}; // intentional ADL\r\n            } else {\r\n                return {_St::_None};\r\n            }\r\n        }\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        static constexpr _Choice_t<_St> _Choice = _Choose<_Ty1, _Ty2>();\r\n\r\n    public:\r\n        template <class _Ty1, class _Ty2>\r\n            requires (_Choice<_Ty1&, _Ty2&>._Strategy != _St::_None)\r\n        _NODISCARD static constexpr weak_ordering operator()(_Ty1&& _Left, _Ty2&& _Right)\r\n            noexcept(_Choice<_Ty1&, _Ty2&>._No_throw) {\r\n            constexpr _St _Strat = _Choice<_Ty1&, _Ty2&>._Strategy;\r\n            if constexpr (_Strat == _St::_Adl) {\r\n                return static_cast<weak_ordering>(weak_order(_Left, _Right)); // intentional ADL\r\n            } else if constexpr (_Strat == _St::_Floating) {\r\n                using _Floating_type = decay_t<_Ty1>;\r\n                using _Traits        = _Floating_type_traits<_Floating_type>;\r\n                using _Uint_type     = _Traits::_Uint_type;\r\n                using _Sint_type     = make_signed_t<_Uint_type>;\r\n\r\n                auto _Left_uint  = _Bit_cast<_Uint_type>(_Left);\r\n                auto _Right_uint = _Bit_cast<_Uint_type>(_Right);\r\n\r\n                // 1. Ultra-fast path: equal representations are equivalent.\r\n                if (_Left_uint == _Right_uint) {\r\n                    return weak_ordering::equivalent;\r\n                }\r\n\r\n                // 2. Examine the sign bits.\r\n                const _Uint_type _Left_shifted_sign  = _Left_uint & _Traits::_Shifted_sign_mask;\r\n                const _Uint_type _Right_shifted_sign = _Right_uint & _Traits::_Shifted_sign_mask;\r\n\r\n                // 3. Fold all NaN values together.\r\n                // (The fact that _Infinity_plus_one represents a signaling NaN is irrelevant here.)\r\n                constexpr _Uint_type _Infinity_plus_one = _Traits::_Shifted_exponent_mask + 1;\r\n\r\n                const _Uint_type _Left_magnitude  = _Left_uint & ~_Traits::_Shifted_sign_mask;\r\n                const _Uint_type _Right_magnitude = _Right_uint & ~_Traits::_Shifted_sign_mask;\r\n\r\n                if (_Left_magnitude > _Infinity_plus_one) {\r\n                    _Left_uint = _Left_shifted_sign | _Infinity_plus_one;\r\n                }\r\n\r\n                if (_Right_magnitude > _Infinity_plus_one) {\r\n                    _Right_uint = _Right_shifted_sign | _Infinity_plus_one;\r\n                }\r\n\r\n                // 4. Interpret floating-point bit patterns as sign magnitude representations of integers,\r\n                //    and then transform them into two's complement representation.\r\n                // (Two's complement representations of positive zero and negative zero are the same.)\r\n                const _Uint_type _Left_sign  = _Left_shifted_sign >> _Traits::_Sign_shift;\r\n                const _Uint_type _Right_sign = _Right_shifted_sign >> _Traits::_Sign_shift;\r\n\r\n                const _Uint_type _Left_xor  = _Left_shifted_sign - _Left_sign;\r\n                const _Uint_type _Right_xor = _Right_shifted_sign - _Right_sign;\r\n\r\n                const _Uint_type _Left_twos_complement_uint  = (_Left_uint ^ _Left_xor) + _Left_sign;\r\n                const _Uint_type _Right_twos_complement_uint = (_Right_uint ^ _Right_xor) + _Right_sign;\r\n\r\n                const auto _Left_twos_complement  = static_cast<_Sint_type>(_Left_twos_complement_uint);\r\n                const auto _Right_twos_complement = static_cast<_Sint_type>(_Right_twos_complement_uint);\r\n\r\n                // 5. Perform the final comparison.\r\n                return static_cast<weak_ordering>(_Left_twos_complement <=> _Right_twos_complement);\r\n            } else if constexpr (_Strat == _St::_Three) {\r\n                return static_cast<weak_ordering>(compare_three_way{}(_Left, _Right));\r\n            } else if constexpr (_Strat == _St::_Strong) {\r\n                // throughput optimization (see above):\r\n                return static_cast<weak_ordering>(\r\n                    static_cast<strong_ordering>(strong_order(_Left, _Right))); // intentional ADL\r\n            } else {\r\n                static_assert(false); // unexpected strategy\r\n            }\r\n        }\r\n    };\r\n} // namespace _Weak_order\r\n\r\ninline namespace _Cpos {\r\n    _EXPORT_STD inline constexpr _Weak_order::_Cpo weak_order;\r\n}\r\n\r\nnamespace _Partial_order {\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1681199\r\n    void partial_order() = delete; // Block unqualified name lookup\r\n#else // ^^^ no workaround / workaround vvv\r\n    void partial_order();\r\n#endif // ^^^ workaround ^^^\r\n\r\n    template <class _Ty1, class _Ty2>\r\n    concept _Has_ADL = requires(_Ty1& _Left, _Ty2& _Right) {\r\n        static_cast<partial_ordering>(partial_order(_Left, _Right)); // intentional ADL\r\n    };\r\n\r\n    template <class _Ty1, class _Ty2>\r\n    concept _Can_compare_three_way =\r\n        requires(_Ty1& _Left, _Ty2& _Right) { static_cast<partial_ordering>(compare_three_way{}(_Left, _Right)); };\r\n\r\n    // Throughput optimization: attempting to use _STD weak_order\r\n    // will attempt to select ADL weak_order, followed by ADL strong_order, here.\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1681199\r\n    void weak_order()   = delete; // Block unqualified name lookup\r\n    void strong_order() = delete; // Block unqualified name lookup\r\n#else // ^^^ no workaround / workaround vvv\r\n    void weak_order();\r\n    void strong_order();\r\n#endif // ^^^ workaround ^^^\r\n\r\n    class _Cpo {\r\n    private:\r\n        enum class _St { _None, _Adl, _Three, _Weak, _Strong };\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n            if constexpr (!same_as<decay_t<_Ty1>, decay_t<_Ty2>>) {\r\n                return {_St::_None};\r\n            } else if constexpr (_Has_ADL<_Ty1, _Ty2>) {\r\n                return {_St::_Adl, noexcept(static_cast<partial_ordering>(partial_order(\r\n                                       _STD declval<_Ty1&>(), _STD declval<_Ty2&>())))}; // intentional ADL\r\n            } else if constexpr (_Can_compare_three_way<_Ty1, _Ty2>) {\r\n                return {_St::_Three, noexcept(static_cast<partial_ordering>(\r\n                                         compare_three_way{}(_STD declval<_Ty1&>(), _STD declval<_Ty2&>())))};\r\n            } else if constexpr (_Weak_order::_Has_ADL<_Ty1, _Ty2>) {\r\n                // throughput optimization (see above):\r\n                return {_St::_Weak, noexcept(static_cast<partial_ordering>(static_cast<weak_ordering>(\r\n                                        weak_order(_STD declval<_Ty1&>(), _STD declval<_Ty2&>()))))}; // intentional ADL\r\n            } else if constexpr (_Strong_order::_Has_ADL<_Ty1, _Ty2>) {\r\n                // throughput optimization (see above):\r\n                return {_St::_Strong, noexcept(static_cast<partial_ordering>(static_cast<strong_ordering>(strong_order(\r\n                                          _STD declval<_Ty1&>(), _STD declval<_Ty2&>()))))}; // intentional ADL\r\n            } else {\r\n                return {_St::_None};\r\n            }\r\n        }\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        static constexpr _Choice_t<_St> _Choice = _Choose<_Ty1, _Ty2>();\r\n\r\n    public:\r\n        template <class _Ty1, class _Ty2>\r\n            requires (_Choice<_Ty1&, _Ty2&>._Strategy != _St::_None)\r\n        _NODISCARD static constexpr partial_ordering operator()(_Ty1&& _Left, _Ty2&& _Right)\r\n            noexcept(_Choice<_Ty1&, _Ty2&>._No_throw) {\r\n            constexpr _St _Strat = _Choice<_Ty1&, _Ty2&>._Strategy;\r\n            if constexpr (_Strat == _St::_Adl) {\r\n                return static_cast<partial_ordering>(/* ADL */ partial_order(_Left, _Right));\r\n            } else if constexpr (_Strat == _St::_Three) {\r\n                return static_cast<partial_ordering>(compare_three_way{}(_Left, _Right));\r\n            } else if constexpr (_Strat == _St::_Weak) {\r\n                // throughput optimization (see above):\r\n                return static_cast<partial_ordering>(\r\n                    static_cast<weak_ordering>(weak_order(_Left, _Right))); // intentional ADL\r\n            } else if constexpr (_Strat == _St::_Strong) {\r\n                // throughput optimization (see above):\r\n                return static_cast<partial_ordering>(\r\n                    static_cast<strong_ordering>(strong_order(_Left, _Right))); // intentional ADL\r\n            } else {\r\n                static_assert(false); // unexpected strategy\r\n            }\r\n        }\r\n    };\r\n} // namespace _Partial_order\r\n\r\ninline namespace _Cpos {\r\n    _EXPORT_STD inline constexpr _Partial_order::_Cpo partial_order;\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nconcept _Can_fallback_eq_lt = requires(_Ty1& _Left, _Ty2& _Right) {\r\n    { _Left == _Right } -> _Boolean_testable;\r\n    { _Left < _Right } -> _Boolean_testable;\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nconcept _Can_strong_order = requires(_Ty1& _Left, _Ty2& _Right) { _STD strong_order(_Left, _Right); };\r\n\r\nnamespace _Compare_strong_order_fallback {\r\n    class _Cpo {\r\n    private:\r\n        enum class _St { _None, _Strong, _Fallback };\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n            if constexpr (!same_as<decay_t<_Ty1>, decay_t<_Ty2>>) {\r\n                return {_St::_None};\r\n            } else if constexpr (_Can_strong_order<_Ty1, _Ty2>) {\r\n                return {_St::_Strong, noexcept(_STD strong_order(_STD declval<_Ty1&>(), _STD declval<_Ty2&>()))};\r\n            } else if constexpr (_Can_fallback_eq_lt<_Ty1, _Ty2>) {\r\n                return {_St::_Fallback,\r\n                    noexcept(_STD declval<_Ty1&>() == _STD declval<_Ty2&>()  ? strong_ordering::equal\r\n                             : _STD declval<_Ty1&>() < _STD declval<_Ty2&>() ? strong_ordering::less\r\n                                                                             : strong_ordering::greater)};\r\n            } else {\r\n                return {_St::_None};\r\n            }\r\n        }\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        static constexpr _Choice_t<_St> _Choice = _Choose<_Ty1, _Ty2>();\r\n\r\n    public:\r\n        template <class _Ty1, class _Ty2>\r\n            requires (_Choice<_Ty1&, _Ty2&>._Strategy != _St::_None)\r\n        _NODISCARD static constexpr strong_ordering operator()(_Ty1&& _Left, _Ty2&& _Right)\r\n            noexcept(_Choice<_Ty1&, _Ty2&>._No_throw) {\r\n            constexpr _St _Strat = _Choice<_Ty1&, _Ty2&>._Strategy;\r\n            if constexpr (_Strat == _St::_Strong) {\r\n                return _STD strong_order(_Left, _Right);\r\n            } else if constexpr (_Strat == _St::_Fallback) {\r\n                return _Left == _Right ? strong_ordering::equal\r\n                     : _Left < _Right  ? strong_ordering::less\r\n                                       : strong_ordering::greater;\r\n            } else {\r\n                static_assert(false); // unexpected strategy\r\n            }\r\n        }\r\n    };\r\n} // namespace _Compare_strong_order_fallback\r\n\r\ninline namespace _Cpos {\r\n    _EXPORT_STD inline constexpr _Compare_strong_order_fallback::_Cpo compare_strong_order_fallback;\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nconcept _Can_weak_order = requires(_Ty1& _Left, _Ty2& _Right) { _STD weak_order(_Left, _Right); };\r\n\r\nnamespace _Compare_weak_order_fallback {\r\n    class _Cpo {\r\n    private:\r\n        enum class _St { _None, _Weak, _Fallback };\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n            if constexpr (!same_as<decay_t<_Ty1>, decay_t<_Ty2>>) {\r\n                return {_St::_None};\r\n            } else if constexpr (_Can_weak_order<_Ty1, _Ty2>) {\r\n                return {_St::_Weak, noexcept(_STD weak_order(_STD declval<_Ty1&>(), _STD declval<_Ty2&>()))};\r\n            } else if constexpr (_Can_fallback_eq_lt<_Ty1, _Ty2>) {\r\n                return {\r\n                    _St::_Fallback, noexcept(_STD declval<_Ty1&>() == _STD declval<_Ty2&>()  ? weak_ordering::equivalent\r\n                                             : _STD declval<_Ty1&>() < _STD declval<_Ty2&>() ? weak_ordering::less\r\n                                                                                             : weak_ordering::greater)};\r\n            } else {\r\n                return {_St::_None};\r\n            }\r\n        }\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        static constexpr _Choice_t<_St> _Choice = _Choose<_Ty1, _Ty2>();\r\n\r\n    public:\r\n        template <class _Ty1, class _Ty2>\r\n            requires (_Choice<_Ty1&, _Ty2&>._Strategy != _St::_None)\r\n        _NODISCARD static constexpr weak_ordering operator()(_Ty1&& _Left, _Ty2&& _Right)\r\n            noexcept(_Choice<_Ty1&, _Ty2&>._No_throw) {\r\n            constexpr _St _Strat = _Choice<_Ty1&, _Ty2&>._Strategy;\r\n            if constexpr (_Strat == _St::_Weak) {\r\n                return _STD weak_order(_Left, _Right);\r\n            } else if constexpr (_Strat == _St::_Fallback) {\r\n                return _Left == _Right ? weak_ordering::equivalent\r\n                     : _Left < _Right  ? weak_ordering::less\r\n                                       : weak_ordering::greater;\r\n            } else {\r\n                static_assert(false); // unexpected strategy\r\n            }\r\n        }\r\n    };\r\n} // namespace _Compare_weak_order_fallback\r\n\r\ninline namespace _Cpos {\r\n    _EXPORT_STD inline constexpr _Compare_weak_order_fallback::_Cpo compare_weak_order_fallback;\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nconcept _Can_partial_order = requires(_Ty1& _Left, _Ty2& _Right) { _STD partial_order(_Left, _Right); };\r\n\r\nnamespace _Compare_partial_order_fallback {\r\n    template <class _Ty1, class _Ty2>\r\n    concept _Can_fallback_eq_lt_twice = requires(_Ty1& _Left, _Ty2& _Right) {\r\n        { _Left == _Right } -> _Boolean_testable;\r\n        { _Left < _Right } -> _Boolean_testable;\r\n        { _Right < _Left } -> _Boolean_testable;\r\n    };\r\n\r\n    class _Cpo {\r\n    private:\r\n        enum class _St { _None, _Partial, _Fallback };\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n            if constexpr (!same_as<decay_t<_Ty1>, decay_t<_Ty2>>) {\r\n                return {_St::_None};\r\n            } else if constexpr (_Can_partial_order<_Ty1, _Ty2>) {\r\n                return {_St::_Partial, noexcept(_STD partial_order(_STD declval<_Ty1&>(), _STD declval<_Ty2&>()))};\r\n            } else if constexpr (_Can_fallback_eq_lt_twice<_Ty1, _Ty2>) {\r\n                return {_St::_Fallback,\r\n                    noexcept(_STD declval<_Ty1&>() == _STD declval<_Ty2&>()  ? partial_ordering::equivalent\r\n                             : _STD declval<_Ty1&>() < _STD declval<_Ty2&>() ? partial_ordering::less\r\n                             : _STD declval<_Ty2&>() < _STD declval<_Ty1&>() ? partial_ordering::greater\r\n                                                                             : partial_ordering::unordered)};\r\n            } else {\r\n                return {_St::_None};\r\n            }\r\n        }\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        static constexpr _Choice_t<_St> _Choice = _Choose<_Ty1, _Ty2>();\r\n\r\n    public:\r\n        template <class _Ty1, class _Ty2>\r\n            requires (_Choice<_Ty1&, _Ty2&>._Strategy != _St::_None)\r\n        _NODISCARD static constexpr partial_ordering operator()(_Ty1&& _Left, _Ty2&& _Right)\r\n            noexcept(_Choice<_Ty1&, _Ty2&>._No_throw) {\r\n            constexpr _St _Strat = _Choice<_Ty1&, _Ty2&>._Strategy;\r\n            if constexpr (_Strat == _St::_Partial) {\r\n                return _STD partial_order(_Left, _Right);\r\n            } else if constexpr (_Strat == _St::_Fallback) {\r\n                return _Left == _Right ? partial_ordering::equivalent\r\n                     : _Left < _Right  ? partial_ordering::less\r\n                     : _Right < _Left  ? partial_ordering::greater\r\n                                       : partial_ordering::unordered;\r\n            } else {\r\n                static_assert(false); // unexpected strategy\r\n            }\r\n        }\r\n    };\r\n} // namespace _Compare_partial_order_fallback\r\n\r\ninline namespace _Cpos {\r\n    _EXPORT_STD inline constexpr _Compare_partial_order_fallback::_Cpo compare_partial_order_fallback;\r\n}\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _HAS_CXX20\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _COMPARE_\r\n"
  },
  {
    "path": "stl/inc/complex",
    "content": "// complex standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _COMPLEX_\r\n#define _COMPLEX_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <cmath>\r\n#include <cstdint>\r\n#include <limits>\r\n#include <sstream>\r\n#include <type_traits>\r\n#include <xutility>\r\n#include <ymath.h>\r\n\r\n#ifdef _M_CEE_PURE\r\n// no intrinsics for /clr:pure\r\n#elif defined(_M_ARM64) || defined(_M_ARM64EC)\r\n// https://learn.microsoft.com/cpp/build/arm64-windows-abi-conventions#base-requirements\r\n// Both floating-point and NEON support are presumed to be present in hardware.\r\n#define _FMP_USING_STD_FMA\r\n#elif defined(_M_IX86) || defined(_M_X64)\r\n#define _FMP_USING_X86_X64_INTRINSICS\r\n#include <__msvc_bit_utils.hpp>\r\n#include <intrin.h>\r\n#endif // ^^^ defined(_M_IX86) || defined(_M_X64) ^^^\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n#ifndef _C_COMPLEX_T\r\n#define _C_COMPLEX_T // Also defined by UCRT <complex.h>\r\n\r\nextern \"C\" {\r\nstruct _C_double_complex {\r\n    double _Val[2];\r\n};\r\n\r\nstruct _C_float_complex {\r\n    float _Val[2];\r\n};\r\n\r\nstruct _C_ldouble_complex {\r\n    long double _Val[2];\r\n};\r\n} // extern \"C\"\r\n#endif // _C_COMPLEX_T\r\n\r\n// complex _Val offsets\r\n#define _RE 0\r\n#define _IM 1\r\n\r\n_STD_BEGIN\r\n// TRANSITION, workaround x86 ABI\r\n// On x86 ABI, floating-point by-value arguments and return values are passed in 80-bit x87 registers.\r\n// When the value is a 32-bit or 64-bit signaling NaN, the conversion to/from 80-bit raises FE_INVALID\r\n// and turns it into a quiet NaN. This behavior is undesirable if we want to test for signaling NaNs.\r\ntemplate <class _Ty, enable_if_t<is_floating_point_v<_Ty>, int> = 0>\r\n_NODISCARD constexpr bool _Is_signaling_nan(const _Ty& _Xx) noexcept { // returns true if input is a signaling NaN\r\n    using _Traits        = _Floating_type_traits<_Ty>;\r\n    const auto _Abs_bits = _Float_abs_bits(_Xx);\r\n    return _Abs_bits > _Traits::_Shifted_exponent_mask && ((_Abs_bits & _Traits::_Special_nan_mantissa_mask) == 0);\r\n}\r\n\r\ntemplate <class _Ty, enable_if_t<is_floating_point_v<_Ty>, int> = 0>\r\n_NODISCARD constexpr bool _Is_inf(const _Ty _Xx) noexcept { // constexpr isinf()\r\n    using _Traits = _Floating_type_traits<_Ty>;\r\n    return _Float_abs_bits(_Xx) == _Traits::_Shifted_exponent_mask;\r\n}\r\n\r\n// implements multi-precision floating-point arithmetic for numerical algorithms\r\n#pragma float_control(precise, on, push)\r\nnamespace _Float_multi_prec {\r\n    // multi-precision floating-point types\r\n    template <class _Ty, int _Prec>\r\n    struct _Fmp_t;\r\n\r\n    template <class _Ty>\r\n    struct _Fmp_t<_Ty, 2> {\r\n        static_assert(is_floating_point_v<_Ty>, \"_Ty must be floating-point\");\r\n        _Ty _Val0; // most significant numeric_limits<_Ty>::precision bits\r\n        _Ty _Val1; // least significant numeric_limits<_Ty>::precision bits\r\n    };\r\n\r\n    // addition\r\n\r\n    // 1x precision + 1x precision -> 2x precision\r\n    // the result is exact when:\r\n    // 1) no internal overflow occurs\r\n    // 2) either underflow is gradual, or no internal underflow occurs\r\n    // 3) intermediate precision is either the same as _Ty, or greater than twice the precision of _Ty\r\n    // 4) parameters and local variables do not retain extra intermediate precision\r\n    // 5) rounding mode is rounding to nearest\r\n    // violation of condition 3 or 5 could lead to relative error on the order of epsilon^2\r\n    // violation of other conditions could lead to worse results\r\n    template <class _Ty>\r\n    _NODISCARD constexpr _Fmp_t<_Ty, 2> _Add_x2(const _Ty _Xval, const _Ty _Yval) noexcept {\r\n        const _Ty _Sum0 = _Xval + _Yval;\r\n        const _Ty _Ymod = _Sum0 - _Xval;\r\n        const _Ty _Xmod = _Sum0 - _Ymod;\r\n        const _Ty _Yerr = _Yval - _Ymod;\r\n        const _Ty _Xerr = _Xval - _Xmod;\r\n        return {_Sum0, _Xerr + _Yerr};\r\n    }\r\n\r\n    // 1x precision + 1x precision -> 2x precision\r\n    // requires: exponent(_Xval) + countr_zero(significand(_Xval)) >= exponent(_Yval) || _Xval == 0\r\n    // the result is exact when:\r\n    // 0) the requirement above is satisfied\r\n    // 1) the result doesn't overflow\r\n    // 2) either underflow is gradual, or no internal underflow occurs\r\n    // 3) intermediate precision is either the same as _Ty, or greater than twice the precision of _Ty\r\n    // 4) parameters and local variables do not retain extra intermediate precision\r\n    // 5) rounding mode is rounding to nearest\r\n    // violation of condition 3 or 5 could lead to relative error on the order of epsilon^2\r\n    // violation of other conditions could lead to worse results\r\n    template <class _Ty>\r\n    _NODISCARD constexpr _Fmp_t<_Ty, 2> _Add_small_x2(const _Ty _Xval, const _Ty _Yval) noexcept {\r\n        const _Ty _Sum0 = _Xval + _Yval;\r\n        const _Ty _Ymod = _Sum0 - _Xval;\r\n        const _Ty _Yerr = _Yval - _Ymod;\r\n        return {_Sum0, _Yerr};\r\n    }\r\n\r\n    // 1x precision + 2x precision -> 2x precision\r\n    // requires: exponent(_Xval) + countr_zero(significand(_Xval)) >= exponent(_Yval._Val0) || _Xval == 0\r\n    template <class _Ty>\r\n    _NODISCARD constexpr _Fmp_t<_Ty, 2> _Add_small_x2(const _Ty _Xval, const _Fmp_t<_Ty, 2>& _Yval) noexcept {\r\n        const _Fmp_t<_Ty, 2> _Sum0 = _Add_small_x2(_Xval, _Yval._Val0);\r\n        return _Add_small_x2(_Sum0._Val0, _Sum0._Val1 + _Yval._Val1);\r\n    }\r\n\r\n    // 2x precision + 2x precision -> 1x precision\r\n    template <class _Ty>\r\n    _NODISCARD constexpr _Ty _Add_x1(const _Fmp_t<_Ty, 2>& _Xval, const _Fmp_t<_Ty, 2>& _Yval) noexcept {\r\n        const _Fmp_t<_Ty, 2> _Sum00 = _Add_x2(_Xval._Val0, _Yval._Val0);\r\n        return _Sum00._Val0 + (_Sum00._Val1 + (_Xval._Val1 + _Yval._Val1));\r\n    }\r\n\r\n    // multiplication\r\n\r\n    // round to 26 significant bits, ties toward zero\r\n    _NODISCARD constexpr double _High_half(const double _Val) noexcept {\r\n        const auto _Bits           = _Bit_cast<unsigned long long>(_Val);\r\n        const auto _High_half_bits = (_Bits + 0x3ff'ffffULL) & 0xffff'ffff'f800'0000ULL;\r\n        return _Bit_cast<double>(_High_half_bits);\r\n    }\r\n\r\n    // _Xval * _Xval - _Prod0\r\n    // the result is exact when:\r\n    // 1) _Prod0 is _Xval^2 faithfully rounded\r\n    // 2) no internal overflow or underflow occurs\r\n    // violation of condition 1 could lead to relative error on the order of epsilon\r\n    _NODISCARD constexpr double _Sqr_error_fallback(const double _Xval, const double _Prod0) noexcept {\r\n        const double _Xhigh = _High_half(_Xval);\r\n        const double _Xlow  = _Xval - _Xhigh;\r\n        return ((_Xhigh * _Xhigh - _Prod0) + 2.0 * _Xhigh * _Xlow) + _Xlow * _Xlow;\r\n    }\r\n\r\n#ifdef _FMP_USING_X86_X64_INTRINSICS\r\n#ifdef __clang__\r\n    [[__gnu__::__target__(\"fma\")]]\r\n#endif // defined(__clang__)\r\n    _NODISCARD inline double\r\n        _Sqr_error_x86_x64_fma(const double _Xval, const double _Prod0) noexcept {\r\n        const __m128d _Mx      = _mm_set_sd(_Xval);\r\n        const __m128d _Mprod0  = _mm_set_sd(_Prod0);\r\n        const __m128d _Mresult = _mm_fmsub_sd(_Mx, _Mx, _Mprod0);\r\n        double _Result;\r\n        _mm_store_sd(&_Result, _Mresult);\r\n        return _Result;\r\n    }\r\n#endif // defined(_FMP_USING_X86_X64_INTRINSICS)\r\n\r\n#ifdef _FMP_USING_STD_FMA\r\n    _NODISCARD inline double _Sqr_error_std_fma(const double _Xval, const double _Prod0) noexcept {\r\n        return _STD fma(_Xval, _Xval, -_Prod0);\r\n    }\r\n#endif // defined(_FMP_USING_STD_FMA)\r\n\r\n    // square(1x precision) -> 2x precision\r\n    // the result is exact when no internal overflow or underflow occurs\r\n    _NODISCARD inline _Fmp_t<double, 2> _Sqr_x2(const double _Xval) noexcept {\r\n        const double _Prod0 = _Xval * _Xval;\r\n\r\n#if defined(_FMP_USING_X86_X64_INTRINSICS)\r\n#ifndef __AVX2__\r\n        const bool _Definitely_have_fma = __isa_available >= _Stl_isa_available_avx2;\r\n        if (!_Definitely_have_fma) {\r\n            return {_Prod0, _Sqr_error_fallback(_Xval, _Prod0)};\r\n        }\r\n#endif // ^^^ !defined(__AVX2__) ^^^\r\n        return {_Prod0, _Sqr_error_x86_x64_fma(_Xval, _Prod0)};\r\n#elif defined(_FMP_USING_STD_FMA)\r\n        return {_Prod0, _Sqr_error_std_fma(_Xval, _Prod0)};\r\n#else // ^^^ defined(_FMP_USING_STD_FMA) / not using intrinsics vvv\r\n        return {_Prod0, _Sqr_error_fallback(_Xval, _Prod0)};\r\n#endif // ^^^ not using intrinsics ^^^\r\n    }\r\n} // namespace _Float_multi_prec\r\n#pragma float_control(pop)\r\n\r\n#undef _FMP_USING_X86_X64_INTRINSICS\r\n#undef _FMP_USING_STD_FMA\r\n\r\n#define _FMP _STD _Float_multi_prec::\r\n\r\n// implements numerical algorithms for <complex>\r\nnamespace _Math_algorithms {\r\n    // TRANSITION: sqrt() isn't constexpr\r\n    // _Hypot_leg_huge = _Ty{0.5} * _STD sqrt((_STD numeric_limits<_Ty>::max)());\r\n    // _Hypot_leg_tiny = _STD sqrt(_Ty{2.0} * (_STD numeric_limits<_Ty>::min)() / _STD numeric_limits<_Ty>::epsilon());\r\n    template <class _Ty>\r\n    struct _Hypot_leg_huge_helper {\r\n        static constexpr _Ty value{6.703903964971298e+153};\r\n    };\r\n    template <>\r\n    struct _Hypot_leg_huge_helper<float> {\r\n        static constexpr float value{9.2233715e+18f};\r\n    };\r\n    template <class _Ty>\r\n    constexpr _Ty _Hypot_leg_huge = _Hypot_leg_huge_helper<_Ty>::value;\r\n\r\n    template <class _Ty>\r\n    struct _Hypot_leg_tiny_helper {\r\n        static constexpr _Ty value{1.4156865331029228e-146};\r\n    };\r\n    template <>\r\n    struct _Hypot_leg_tiny_helper<float> {\r\n        static constexpr float value{4.440892e-16f};\r\n    };\r\n    template <class _Ty>\r\n    constexpr _Ty _Hypot_leg_tiny = _Hypot_leg_tiny_helper<_Ty>::value;\r\n\r\n    template <class _Ty>\r\n    _NODISCARD _Ty _Norm_minus_one(const _Ty _Xval, const _Ty _Yval) noexcept {\r\n        // requires |_Xval| >= |_Yval| and 0.5 <= |_Xval| < 2^12\r\n        // returns _Xval * _Xval + _Yval * _Yval - 1\r\n        const _FMP _Fmp_t<_Ty, 2> _Xsqr    = _FMP _Sqr_x2(_Xval);\r\n        const _FMP _Fmp_t<_Ty, 2> _Ysqr    = _FMP _Sqr_x2(_Yval);\r\n        const _FMP _Fmp_t<_Ty, 2> _Xsqr_m1 = _FMP _Add_small_x2(_Ty{-1.0}, _Xsqr);\r\n        return _Add_x1(_Xsqr_m1, _Ysqr);\r\n    }\r\n\r\n    _NODISCARD inline float _Norm_minus_one(const float _Xval, const float _Yval) noexcept {\r\n        const auto _Dx = static_cast<double>(_Xval);\r\n        const auto _Dy = static_cast<double>(_Yval);\r\n        return static_cast<float>((_Dx * _Dx - 1.0) + _Dy * _Dy);\r\n    }\r\n\r\n    // TRANSITION: CRT log1p can be inaccurate for tiny inputs under directed rounding modes\r\n    template <class _Ty>\r\n    _NODISCARD _Ty _Logp1(const _Ty _Xval) noexcept { // returns log(1 + _Xval)\r\n        static_assert(is_floating_point_v<_Ty>, \"_Ty must be floating-point\");\r\n\r\n        if (_Is_nan(_Xval)) { // NaN\r\n            return _Xval + _Xval; // raise FE_INVALID if _Xval is a signaling NaN\r\n        }\r\n\r\n        if (_Xval <= _Ty{-0.5} || _Ty{2.0} <= _Xval) { // naive formula is moderately accurate\r\n            if (_Xval == (numeric_limits<_Ty>::max)()) { // avoid overflow\r\n                return _STD log(_Xval);\r\n            }\r\n\r\n            return _STD log(_Ty{1.0} + _Xval);\r\n        }\r\n\r\n        const _Ty _Xabs = _Float_abs(_Xval);\r\n        if (_Xabs < numeric_limits<_Ty>::epsilon()) { // zero or tiny\r\n            if (_Xval == _Ty{0.0}) {\r\n                return _Xval;\r\n            }\r\n\r\n            // honor rounding mode, raise FE_INEXACT\r\n            return _Xval - _Ty{0.5} * _Xval * _Xval;\r\n        }\r\n\r\n        // compute log(1 + _Xval) with fixup for small _Xval\r\n        const _FMP _Fmp_t<_Ty, 2> _Xp1 = _FMP _Add_small_x2(_Ty{1.0}, _Xval);\r\n        return _STD log(_Xp1._Val0) + _Xp1._Val1 / _Xp1._Val0;\r\n    }\r\n\r\n    template <class _Ty>\r\n    _NODISCARD _Ty _Log_hypot(const _Ty _Xval, const _Ty _Yval) noexcept { // returns log(hypot(_Xval, _Yval))\r\n        static_assert(is_floating_point_v<_Ty>, \"_Ty must be floating-point\");\r\n\r\n        if (!_Is_finite(_Xval) || !_Is_finite(_Yval)) { // Inf or NaN\r\n            // raise FE_INVALID and return NaN if at least one of them is a signaling NaN\r\n            if (_Is_signaling_nan(_Xval) || _Is_signaling_nan(_Yval)) {\r\n                return _Xval + _Yval;\r\n            }\r\n\r\n            // return +Inf if at least one of them is an infinity, even when the other is a quiet NaN\r\n            if (_Is_inf(_Xval)) {\r\n                return _Float_abs(_Xval);\r\n            }\r\n\r\n            if (_Is_inf(_Yval)) {\r\n                return _Float_abs(_Yval);\r\n            }\r\n\r\n            // at least one of them is a quiet NaN, and the other is not an infinity\r\n            return _Xval + _Yval;\r\n        }\r\n\r\n        _Ty _Av = _Float_abs(_Xval);\r\n        _Ty _Bv = _Float_abs(_Yval);\r\n\r\n        if (_Av < _Bv) { // ensure that _Bv <= _Av\r\n            _STD swap(_Av, _Bv);\r\n        }\r\n\r\n        if (_Bv == 0) {\r\n            return _STD log(_Av);\r\n        }\r\n\r\n        if (_Hypot_leg_tiny<_Ty> < _Av && _Av < _Hypot_leg_huge<_Ty>) { // no overflow or harmful underflow\r\n            constexpr _Ty _Norm_small{0.5};\r\n            constexpr _Ty _Norm_big{3.0};\r\n\r\n            const _Ty _Bv_sqr = _Bv * _Bv;\r\n\r\n            if (_Av == _Ty{1.0}) { // correctly return +0 when _Av == 1 and _Bv * _Bv underflows\r\n                                   // _Norm_minus_one(_Av, _Bv) could return -0 under FE_DOWNWARD rounding mode\r\n                return _Logp1(_Bv_sqr) * _Ty{0.5};\r\n            }\r\n\r\n            const _Ty _Norm = _Av * _Av + _Bv_sqr;\r\n\r\n            if (_Norm_small < _Norm && _Norm < _Norm_big) { // avoid catastrophic cancellation\r\n                return _Logp1(_Norm_minus_one(_Av, _Bv)) * _Ty{0.5};\r\n            } else {\r\n                return _STD log(_Norm) * _Ty{0.5};\r\n            }\r\n        } else { // use 1 1/2 precision to preserve bits\r\n            constexpr _Ty _Cm = _Ty{22713.0L / 32768.0L};\r\n            constexpr _Ty _Cl = _Ty{1.4286068203094172321214581765680755e-6L};\r\n\r\n            const int _Exponent      = _STD ilogb(_Av);\r\n            const _Ty _Av_scaled     = _STD scalbn(_Av, -_Exponent);\r\n            const _Ty _Bv_scaled     = _STD scalbn(_Bv, -_Exponent);\r\n            const _Ty _Bv_scaled_sqr = _Bv_scaled * _Bv_scaled;\r\n            const _Ty _Norm_scaled   = _Av_scaled * _Av_scaled + _Bv_scaled_sqr;\r\n            const _Ty _Real_shifted  = _STD log(_Norm_scaled) * _Ty{0.5};\r\n            const auto _Fexponent    = static_cast<_Ty>(_Exponent);\r\n            return (_Real_shifted + _Fexponent * _Cl) + _Fexponent * _Cm;\r\n        }\r\n    }\r\n} // namespace _Math_algorithms\r\n\r\n#undef _FMP\r\n\r\nusing _Dcomplex_value = _CSTD _C_double_complex;\r\nusing _Fcomplex_value = _CSTD _C_float_complex;\r\nusing _Lcomplex_value = _CSTD _C_ldouble_complex;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass complex;\r\ntemplate <>\r\nclass complex<float>;\r\ntemplate <>\r\nclass complex<double>;\r\ntemplate <>\r\nclass complex<long double>;\r\n\r\ntemplate <class _Ty>\r\nclass _Ctraits {\r\npublic:\r\n    static constexpr _Ty _Flt_eps() { // get epsilon\r\n        return numeric_limits<_Ty>::epsilon();\r\n    }\r\n\r\n    static constexpr _Ty _Flt_max() {\r\n        return (numeric_limits<_Ty>::max)();\r\n    }\r\n\r\n    static constexpr _Ty _Flt_norm_min() {\r\n        return (numeric_limits<_Ty>::min)() > 0 ? (numeric_limits<_Ty>::min)() : 0;\r\n    }\r\n\r\n    static _Ty _Abs(_Ty _Left) {\r\n        return static_cast<_Ty>(_Signbit(_Left) ? -_Left : _Left);\r\n    }\r\n\r\n    static _Ty _Cosh(_Ty _Left, _Ty _Right) { // return cosh(_Left) * _Right\r\n        return static_cast<_Ty>(_CSTD _Cosh(static_cast<double>(_Left), static_cast<double>(_Right)));\r\n    }\r\n\r\n    static _Ty _Copysign(_Ty _Magnitude, _Ty _Sign) {\r\n        return static_cast<_Ty>(_Signbit(_Sign) ? -_Abs(_Magnitude) : _Abs(_Magnitude));\r\n    }\r\n\r\n    static short _Exp(_Ty* _Pleft, _Ty _Right, short _Exponent) { // compute exp(*_Pleft) * _Right * 2 ^ _Exponent\r\n        double _Tmp = static_cast<double>(*_Pleft);\r\n        short _Ans  = _CSTD _Exp(&_Tmp, static_cast<double>(_Right), _Exponent);\r\n        *_Pleft     = static_cast<_Ty>(_Tmp);\r\n        return _Ans;\r\n    }\r\n\r\n    static constexpr _Ty _Infv() { // return infinity\r\n        return numeric_limits<_Ty>::infinity();\r\n    }\r\n\r\n    static bool _Isinf(_Ty _Left) { // test for infinity\r\n        const auto _Tmp  = static_cast<double>(_Left);\r\n        const auto _Uint = _Bit_cast<uint64_t>(_Tmp);\r\n        return (_Uint & 0x7fffffffffffffffU) == 0x7ff0000000000000U;\r\n    }\r\n\r\n    static _CONSTEXPR20 bool _Isnan(_Ty _Left) {\r\n        const auto _Tmp  = static_cast<double>(_Left);\r\n        const auto _Uint = _Bit_cast<uint64_t>(_Tmp);\r\n        return (_Uint & 0x7fffffffffffffffU) > 0x7ff0000000000000U;\r\n    }\r\n\r\n    static constexpr _Ty _Nanv() { // return NaN\r\n        return numeric_limits<_Ty>::quiet_NaN();\r\n    }\r\n\r\n    static bool _Signbit(_Ty _Left) {\r\n        return (_STD signbit) (static_cast<double>(_Left));\r\n    }\r\n\r\n    static _Ty _Sinh(_Ty _Left, _Ty _Right) { // return sinh(_Left) * _Right\r\n        return static_cast<_Ty>(_CSTD _Sinh(static_cast<double>(_Left), static_cast<double>(_Right)));\r\n    }\r\n\r\n    static _Ty asinh(_Ty _Left) {\r\n        if (_Left == 0 || _Isnan(_Left) || _Isinf(_Left)) {\r\n            return _Left;\r\n        }\r\n\r\n        constexpr _Ty _Ln2 = 0.69314718055994530941723212145817658L;\r\n\r\n        const _Ty _Old_left = _Left;\r\n        _Ty _Ans;\r\n\r\n        _Left = _Abs(_Left);\r\n\r\n        if (_Left < 2 / _Flt_eps()) {\r\n            _Ans = log1p(_Left + _Left * _Left / (1 + sqrt(_Left * _Left + 1)));\r\n        } else {\r\n            _Ans = log(_Left) + _Ln2;\r\n        }\r\n\r\n        return _Copysign(_Ans, _Old_left);\r\n    }\r\n\r\n    static _Ty atan2(_Ty _Yval, _Ty _Xval) { // return atan(_Yval / _Xval)\r\n        return static_cast<_Ty>(_CSTD atan2(static_cast<double>(_Yval), static_cast<double>(_Xval)));\r\n    }\r\n\r\n    static _Ty cos(_Ty _Left) {\r\n        return static_cast<_Ty>(_CSTD cos(static_cast<double>(_Left)));\r\n    }\r\n\r\n    static _Ty exp(_Ty _Left) {\r\n        return static_cast<_Ty>(_CSTD exp(static_cast<double>(_Left)));\r\n    }\r\n\r\n    static _Ty ldexp(_Ty _Left, int _Exponent) { // return _Left * 2 ^ _Exponent\r\n        return static_cast<_Ty>(_CSTD ldexp(static_cast<double>(_Left), _Exponent));\r\n    }\r\n\r\n    static _Ty log(_Ty _Left) {\r\n        return static_cast<_Ty>(_CSTD log(static_cast<double>(_Left)));\r\n    }\r\n\r\n    static _Ty log1p(_Ty _Left) { // return log(1 + _Left)\r\n        if (_Left < -1) {\r\n            return _Nanv();\r\n        } else if (_Left == 0) {\r\n            return _Left;\r\n        } else { // compute log(1 + _Left) with fixup for small _Left\r\n            _Ty _Leftp1 = 1 + _Left;\r\n            return log(_Leftp1) - ((_Leftp1 - 1) - _Left) / _Leftp1;\r\n        }\r\n    }\r\n\r\n    static _Ty pow(_Ty _Left, _Ty _Right) {\r\n        return static_cast<_Ty>(_CSTD pow(static_cast<double>(_Left), static_cast<double>(_Right)));\r\n    }\r\n\r\n    static _Ty sin(_Ty _Left) {\r\n        return static_cast<_Ty>(_CSTD sin(static_cast<double>(_Left)));\r\n    }\r\n\r\n    static _Ty sqrt(_Ty _Left) {\r\n        return static_cast<_Ty>(_CSTD sqrt(static_cast<double>(_Left)));\r\n    }\r\n\r\n    static _Ty tan(_Ty _Left) {\r\n        return static_cast<_Ty>(_CSTD tan(static_cast<double>(_Left)));\r\n    }\r\n\r\n    static _Ty hypot(_Ty _Left, _Ty _Right) {\r\n        return static_cast<_Ty>(_CSTD hypot(static_cast<double>(_Left), static_cast<double>(_Right)));\r\n    }\r\n};\r\n\r\ntemplate <>\r\nclass _Ctraits<long double> {\r\npublic:\r\n    using _Ty = long double;\r\n\r\n    static constexpr _Ty _Flt_eps() noexcept { // get epsilon\r\n        return numeric_limits<long double>::epsilon();\r\n    }\r\n\r\n    static constexpr _Ty _Flt_max() noexcept {\r\n        return (numeric_limits<long double>::max)();\r\n    }\r\n\r\n    static constexpr _Ty _Flt_norm_min() noexcept {\r\n        return (numeric_limits<long double>::min)();\r\n    }\r\n\r\n    static _Ty _Abs(_Ty _Left) noexcept {\r\n        // testing _Left < 0 would be incorrect when _Left is -0.0\r\n        return _CSTD fabsl(_Left);\r\n    }\r\n\r\n    static _Ty _Cosh(_Ty _Left, _Ty _Right) noexcept { // return cosh(_Left) * _Right\r\n        return _CSTD _LCosh(_Left, _Right);\r\n    }\r\n\r\n    static _Ty _Copysign(_Ty _Magnitude, _Ty _Sign) noexcept {\r\n        // testing _Sign < 0 would be incorrect when _Sign is -0.0\r\n        return _CSTD copysignl(_Magnitude, _Sign);\r\n    }\r\n\r\n    static short _Exp(_Ty* _Pleft, _Ty _Right, short _Exponent) noexcept {\r\n        // compute exp(*_Pleft) * _Right * 2 ^ _Exponent\r\n        return _CSTD _LExp(_Pleft, _Right, _Exponent);\r\n    }\r\n\r\n    static constexpr _Ty _Infv() noexcept { // return infinity\r\n        return numeric_limits<long double>::infinity();\r\n    }\r\n\r\n    static bool _Isinf(_Ty _Left) noexcept { // test for infinity\r\n#if defined(__LDBL_DIG__) && __LDBL_DIG__ == 18\r\n        return _CSTD _LDtest(&_Left) == FP_INFINITE;\r\n#else // ^^^ 80-bit long double (not supported by MSVC in general, see GH-1316) / 64-bit long double vvv\r\n        const auto _Uint = _Bit_cast<uint64_t>(_Left);\r\n        return (_Uint & 0x7fffffffffffffffU) == 0x7ff0000000000000U;\r\n#endif // ^^^ 64-bit long double ^^^\r\n    }\r\n\r\n    static _CONSTEXPR20 bool _Isnan(_Ty _Left) noexcept {\r\n#if defined(__LDBL_DIG__) && __LDBL_DIG__ == 18\r\n        return _CSTD _LDtest(&_Left) == FP_NAN;\r\n#else // ^^^ 80-bit long double (not supported by MSVC in general, see GH-1316) / 64-bit long double vvv\r\n        const auto _Uint = _Bit_cast<uint64_t>(_Left);\r\n        return (_Uint & 0x7fffffffffffffffU) > 0x7ff0000000000000U;\r\n#endif // ^^^ 64-bit long double ^^^\r\n    }\r\n\r\n    static constexpr _Ty _Nanv() noexcept { // return NaN\r\n        return numeric_limits<long double>::quiet_NaN();\r\n    }\r\n\r\n    static bool _Signbit(_Ty _Left) noexcept {\r\n        // testing _Left < 0 would be incorrect when _Left is -0.0\r\n        return (_STD signbit) (_Left);\r\n    }\r\n\r\n    static _Ty _Sinh(_Ty _Left, _Ty _Right) noexcept { // return sinh(_Left) * _Right\r\n        return _CSTD _LSinh(_Left, _Right);\r\n    }\r\n\r\n    static _Ty asinh(_Ty _Left) noexcept {\r\n        if (_Left == 0 || _Isnan(_Left) || _Isinf(_Left)) {\r\n            return _Left;\r\n        }\r\n\r\n        constexpr _Ty _Ln2 = 0.69314718055994530941723212145817658L;\r\n\r\n        const _Ty _Old_left = _Left;\r\n        _Ty _Ans;\r\n\r\n        _Left = _Abs(_Left);\r\n\r\n        if (_Left < 2 / _Flt_eps()) {\r\n            _Ans = log1p(_Left + _Left * _Left / (1 + sqrt(_Left * _Left + 1)));\r\n        } else {\r\n            _Ans = log(_Left) + _Ln2;\r\n        }\r\n\r\n        return _Copysign(_Ans, _Old_left);\r\n    }\r\n\r\n    static _Ty atan2(_Ty _Yval, _Ty _Xval) noexcept { // return atan(_Yval / _Xval)\r\n        return _CSTD atan2l(_Yval, _Xval);\r\n    }\r\n\r\n    static _Ty cos(_Ty _Left) noexcept {\r\n        return _CSTD cosl(_Left);\r\n    }\r\n\r\n    static _Ty exp(_Ty _Left) noexcept {\r\n        return _CSTD expl(_Left);\r\n    }\r\n\r\n    static _Ty ldexp(_Ty _Left, int _Exponent) noexcept { // return _Left * 2 ^ _Exponent\r\n        return _CSTD ldexpl(_Left, _Exponent);\r\n    }\r\n\r\n    static _Ty log(_Ty _Left) noexcept {\r\n        return _CSTD logl(_Left);\r\n    }\r\n\r\n    static _Ty log1p(_Ty _Left) noexcept { // return log(1 + _Left)\r\n        if (_Left < -1) {\r\n            return _Nanv();\r\n        } else if (_Left == 0) {\r\n            return _Left;\r\n        } else { // compute log(1 + _Left) with fixup for small _Left\r\n            _Ty _Leftp1 = 1 + _Left;\r\n            return log(_Leftp1) - ((_Leftp1 - 1) - _Left) / _Leftp1;\r\n        }\r\n    }\r\n\r\n    static _Ty pow(_Ty _Left, _Ty _Right) noexcept {\r\n        return _CSTD powl(_Left, _Right);\r\n    }\r\n\r\n    static _Ty sin(_Ty _Left) noexcept {\r\n        return _CSTD sinl(_Left);\r\n    }\r\n\r\n    static _Ty sqrt(_Ty _Left) noexcept {\r\n        return _CSTD sqrtl(_Left);\r\n    }\r\n\r\n    static _Ty tan(_Ty _Left) noexcept {\r\n        return _CSTD tanl(_Left);\r\n    }\r\n\r\n    static _Ty hypot(_Ty _Left, _Ty _Right) noexcept {\r\n        return _CSTD hypotl(_Left, _Right);\r\n    }\r\n};\r\n\r\ntemplate <>\r\nclass _Ctraits<double> {\r\npublic:\r\n    using _Ty = double;\r\n\r\n    static constexpr _Ty _Flt_eps() noexcept { // get epsilon\r\n        return numeric_limits<double>::epsilon();\r\n    }\r\n\r\n    static constexpr _Ty _Flt_max() noexcept {\r\n        return (numeric_limits<double>::max)();\r\n    }\r\n\r\n    static constexpr _Ty _Flt_norm_min() noexcept {\r\n        return (numeric_limits<double>::min)();\r\n    }\r\n\r\n    static _Ty _Abs(_Ty _Left) noexcept {\r\n        // testing _Left < 0 would be incorrect when _Left is -0.0\r\n        return _CSTD fabs(_Left);\r\n    }\r\n\r\n    static _Ty _Cosh(_Ty _Left, _Ty _Right) noexcept { // return cosh(_Left) * _Right\r\n        return _CSTD _Cosh(_Left, _Right);\r\n    }\r\n\r\n    static _Ty _Copysign(_Ty _Magnitude, _Ty _Sign) noexcept {\r\n        // testing _Sign < 0 would be incorrect when _Sign is -0.0\r\n        return _CSTD copysign(_Magnitude, _Sign);\r\n    }\r\n\r\n    static short _Exp(_Ty* _Pleft, _Ty _Right, short _Exponent) noexcept {\r\n        // compute exp(*_Pleft) * _Right * 2 ^ _Exponent\r\n        return _CSTD _Exp(_Pleft, _Right, _Exponent);\r\n    }\r\n\r\n    static constexpr _Ty _Infv() noexcept { // return infinity\r\n        return numeric_limits<double>::infinity();\r\n    }\r\n\r\n    static bool _Isinf(_Ty _Left) noexcept { // test for infinity\r\n        const auto _Uint = _Bit_cast<uint64_t>(_Left);\r\n        return (_Uint & 0x7fffffffffffffffU) == 0x7ff0000000000000U;\r\n    }\r\n\r\n    static _CONSTEXPR20 bool _Isnan(_Ty _Left) noexcept {\r\n        const auto _Uint = _Bit_cast<uint64_t>(_Left);\r\n        return (_Uint & 0x7fffffffffffffffU) > 0x7ff0000000000000U;\r\n    }\r\n\r\n    static constexpr _Ty _Nanv() noexcept { // return NaN\r\n        return numeric_limits<double>::quiet_NaN();\r\n    }\r\n\r\n    static bool _Signbit(_Ty _Left) noexcept {\r\n        // testing _Left < 0 would be incorrect when _Left is -0.0\r\n        return (_STD signbit) (_Left);\r\n    }\r\n\r\n    static _Ty _Sinh(_Ty _Left, _Ty _Right) noexcept { // return sinh(_Left) * _Right\r\n        return _CSTD _Sinh(_Left, _Right);\r\n    }\r\n\r\n    static _Ty asinh(_Ty _Left) noexcept {\r\n        if (_Isnan(_Left) || _Isinf(_Left) || _Left == 0) {\r\n            return _Left;\r\n        } else { // _Left finite nonzero\r\n            const _Ty _Old_left = _Left;\r\n            _Ty _Ans;\r\n\r\n            _Left = _Abs(_Left);\r\n\r\n            if (_Left < 2 / _Flt_eps()) {\r\n                _Ans = log1p(_Left + _Left * _Left / (1 + sqrt(_Left * _Left + 1)));\r\n            } else {\r\n                _Ans = log(_Left) // _Left big, compute log(_Left+_Left)\r\n                     + static_cast<_Ty>(0.69314718055994530941723212145817658L);\r\n            }\r\n\r\n            return _Copysign(_Ans, _Old_left);\r\n        }\r\n    }\r\n\r\n    static _Ty atan2(_Ty _Yval, _Ty _Xval) noexcept { // return atan(_Yval / _Xval)\r\n        return _CSTD atan2(_Yval, _Xval);\r\n    }\r\n\r\n    static _Ty cos(_Ty _Left) noexcept {\r\n        return _CSTD cos(_Left);\r\n    }\r\n\r\n    static _Ty exp(_Ty _Left) noexcept {\r\n        return _CSTD exp(_Left);\r\n    }\r\n\r\n    static _Ty ldexp(_Ty _Left, int _Exponent) noexcept { // return _Left * 2 ^ _Exponent\r\n        return _CSTD ldexp(_Left, _Exponent);\r\n    }\r\n\r\n    static _Ty log(_Ty _Left) noexcept {\r\n        return _CSTD log(_Left);\r\n    }\r\n\r\n    static _Ty log1p(_Ty _Left) noexcept { // return log(1 + _Left)\r\n        if (_Isnan(_Left) || _Left == 0 || (_Isinf(_Left) && 0 < _Left)) {\r\n            return _Left;\r\n        } else if (_Left < -1) {\r\n            return _Nanv();\r\n        } else if (_Left == -1) {\r\n            return -_Infv();\r\n        } else if (_Left == 0) {\r\n            return _Left;\r\n        } else { // compute log(1 + _Left) with fixup for small _Left\r\n            _Ty _Leftp1 = 1 + _Left;\r\n            return log(_Leftp1) - ((_Leftp1 - 1) - _Left) / _Leftp1;\r\n        }\r\n    }\r\n\r\n    static _Ty pow(_Ty _Left, _Ty _Right) noexcept {\r\n        return _CSTD pow(_Left, _Right);\r\n    }\r\n\r\n    static _Ty sin(_Ty _Left) noexcept {\r\n        return _CSTD sin(_Left);\r\n    }\r\n\r\n    static _Ty sqrt(_Ty _Left) noexcept {\r\n        return _CSTD sqrt(_Left);\r\n    }\r\n\r\n    static _Ty tan(_Ty _Left) noexcept {\r\n        return _CSTD tan(_Left);\r\n    }\r\n\r\n    static _Ty hypot(_Ty _Left, _Ty _Right) noexcept {\r\n        return _CSTD hypot(_Left, _Right);\r\n    }\r\n};\r\n\r\ntemplate <>\r\nclass _Ctraits<float> {\r\npublic:\r\n    using _Ty = float;\r\n\r\n    static constexpr _Ty _Flt_eps() noexcept { // get epsilon\r\n        return numeric_limits<float>::epsilon();\r\n    }\r\n\r\n    static constexpr _Ty _Flt_max() noexcept {\r\n        return (numeric_limits<float>::max)();\r\n    }\r\n\r\n    static constexpr _Ty _Flt_norm_min() noexcept {\r\n        return (numeric_limits<float>::min)();\r\n    }\r\n\r\n    static _Ty _Abs(_Ty _Left) noexcept {\r\n        // testing _Left < 0 would be incorrect when _Left is -0.0\r\n        return _CSTD fabsf(_Left);\r\n    }\r\n\r\n    static _Ty _Cosh(_Ty _Left, _Ty _Right) noexcept { // return cosh(_Left) * _Right\r\n        return _CSTD _FCosh(_Left, _Right);\r\n    }\r\n\r\n    static _Ty _Copysign(_Ty _Magnitude, _Ty _Sign) noexcept {\r\n        // testing _Sign < 0 would be incorrect when _Sign is -0.0\r\n        return _CSTD copysignf(_Magnitude, _Sign);\r\n    }\r\n\r\n    static short _Exp(_Ty* _Pleft, _Ty _Right, short _Exponent) noexcept {\r\n        // compute exp(*_Pleft) * _Right * 2 ^ _Exponent\r\n        return _CSTD _FExp(_Pleft, _Right, _Exponent);\r\n    }\r\n\r\n    static constexpr _Ty _Infv() noexcept { // return infinity\r\n        return numeric_limits<float>::infinity();\r\n    }\r\n\r\n    static bool _Isinf(_Ty _Left) noexcept { // test for infinity\r\n        const auto _Uint = _Bit_cast<uint32_t>(_Left);\r\n        return (_Uint & 0x7fffffffU) == 0x7f800000U;\r\n    }\r\n\r\n    static _CONSTEXPR20 bool _Isnan(_Ty _Left) noexcept {\r\n        const auto _Uint = _Bit_cast<uint32_t>(_Left);\r\n        return (_Uint & 0x7fffffffU) > 0x7f800000U;\r\n    }\r\n\r\n    static constexpr _Ty _Nanv() noexcept { // return NaN\r\n        return numeric_limits<float>::quiet_NaN();\r\n    }\r\n\r\n    static bool _Signbit(_Ty _Left) noexcept {\r\n        // testing _Left < 0 would be incorrect when _Left is -0.0\r\n        return (_STD signbit) (_Left);\r\n    }\r\n\r\n    static _Ty _Sinh(_Ty _Left, _Ty _Right) noexcept { // return sinh(_Left) * _Right\r\n        return _CSTD _FSinh(_Left, _Right);\r\n    }\r\n\r\n    static _Ty asinh(_Ty _Left) noexcept {\r\n        if (_Left == 0 || _Isnan(_Left) || _Isinf(_Left)) {\r\n            return _Left;\r\n        }\r\n\r\n        constexpr _Ty _Ln2 = 0.69314718055994530941723212145817658F;\r\n\r\n        const _Ty _Old_left = _Left;\r\n        _Ty _Ans;\r\n\r\n        _Left = _Abs(_Left);\r\n\r\n        if (_Left < 2 / _Flt_eps()) {\r\n            _Ans = log1p(_Left + _Left * _Left / (1 + sqrt(_Left * _Left + 1)));\r\n        } else {\r\n            _Ans = log(_Left) + _Ln2;\r\n        }\r\n\r\n        return _Copysign(_Ans, _Old_left);\r\n    }\r\n\r\n    static _Ty atan2(_Ty _Yval, _Ty _Xval) noexcept { // return atan(_Yval / _Xval)\r\n        return _CSTD atan2f(_Yval, _Xval);\r\n    }\r\n\r\n    static _Ty cos(_Ty _Left) noexcept {\r\n        return _CSTD cosf(_Left);\r\n    }\r\n\r\n    static _Ty exp(_Ty _Left) noexcept {\r\n        return _CSTD expf(_Left);\r\n    }\r\n\r\n    static _Ty ldexp(_Ty _Left, int _Exponent) noexcept { // return _Left * 2 ^ _Exponent\r\n        return _CSTD ldexpf(_Left, _Exponent);\r\n    }\r\n\r\n    static _Ty log(_Ty _Left) noexcept {\r\n        return _CSTD logf(_Left);\r\n    }\r\n\r\n    static _Ty log1p(_Ty _Left) noexcept { // return log(1 + _Left)\r\n        if (_Left < -1) {\r\n            return _Nanv();\r\n        } else if (_Left == 0) {\r\n            return _Left;\r\n        } else { // compute log(1 + _Left) with fixup for small _Left\r\n            _Ty _Leftp1 = 1 + _Left;\r\n            return log(_Leftp1) - ((_Leftp1 - 1) - _Left) / _Leftp1;\r\n        }\r\n    }\r\n\r\n    static _Ty pow(_Ty _Left, _Ty _Right) noexcept {\r\n        return _CSTD powf(_Left, _Right);\r\n    }\r\n\r\n    static _Ty sin(_Ty _Left) noexcept {\r\n        return _CSTD sinf(_Left);\r\n    }\r\n\r\n    static _Ty sqrt(_Ty _Left) noexcept {\r\n        return _CSTD sqrtf(_Left);\r\n    }\r\n\r\n    static _Ty tan(_Ty _Left) noexcept {\r\n        return _CSTD tanf(_Left);\r\n    }\r\n\r\n    static _Ty hypot(_Ty _Left, _Ty _Right) noexcept {\r\n        return _CSTD hypotf(_Left, _Right);\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_unqual_fp = _Is_any_of_v<_Ty, float, double, long double>;\r\n\r\ntemplate <class _Ty>\r\nstruct _Complex_value {\r\n    enum { _Re = 0, _Im = 1 };\r\n    _Ty _Val[2];\r\n};\r\n\r\ntemplate <class _Ty, class _Valbase>\r\nclass _Complex_base : public _Valbase {\r\nprivate:\r\n    static constexpr bool _Is_for_standard_complex = _Is_any_of_v<_Complex_base, _Complex_base<float, _Fcomplex_value>,\r\n        _Complex_base<double, _Dcomplex_value>, _Complex_base<long double, _Lcomplex_value>>;\r\n\r\npublic:\r\n    using _Myctraits = _Ctraits<_Ty>;\r\n    using value_type = _Ty;\r\n\r\n    constexpr _Complex_base(const _Ty& _Realval, const _Ty& _Imagval) noexcept(_Is_for_standard_complex)\r\n        : _Valbase{{_Realval, _Imagval}} {}\r\n\r\n    _CONSTEXPR20 void real(const _Ty& _Right) noexcept(_Is_for_standard_complex) /* strengthened */ {\r\n        // set real component\r\n        this->_Val[_RE] = _Right;\r\n    }\r\n\r\n    _CONSTEXPR20 void imag(const _Ty& _Right) noexcept(_Is_for_standard_complex) /* strengthened */ {\r\n        // set imaginary component\r\n        this->_Val[_IM] = _Right;\r\n    }\r\n\r\n    _NODISCARD constexpr _Ty real() const noexcept(_Is_for_standard_complex) /* strengthened */ {\r\n        // return real component\r\n        return this->_Val[_RE];\r\n    }\r\n\r\n    _NODISCARD constexpr _Ty imag() const noexcept(_Is_for_standard_complex) /* strengthened */ {\r\n        // return imaginary component\r\n        return this->_Val[_IM];\r\n    }\r\n\r\nprotected:\r\n    template <class _Other>\r\n    _CONSTEXPR20 void _Add(const complex<_Other>& _Right) noexcept(_Is_for_standard_complex && _Is_unqual_fp<_Other>) {\r\n        this->_Val[_RE] = this->_Val[_RE] + static_cast<_Ty>(_Right.real());\r\n        this->_Val[_IM] = this->_Val[_IM] + static_cast<_Ty>(_Right.imag());\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 void _Sub(const complex<_Other>& _Right) noexcept(_Is_for_standard_complex && _Is_unqual_fp<_Other>) {\r\n        this->_Val[_RE] = this->_Val[_RE] - static_cast<_Ty>(_Right.real());\r\n        this->_Val[_IM] = this->_Val[_IM] - static_cast<_Ty>(_Right.imag());\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 void _Mul(const complex<_Other>& _Right) noexcept(_Is_for_standard_complex && _Is_unqual_fp<_Other>) {\r\n        _Ty _Rightreal = static_cast<_Ty>(_Right.real());\r\n        _Ty _Rightimag = static_cast<_Ty>(_Right.imag());\r\n\r\n        _Ty _Tmp        = this->_Val[_RE] * _Rightreal - this->_Val[_IM] * _Rightimag;\r\n        this->_Val[_IM] = this->_Val[_RE] * _Rightimag + this->_Val[_IM] * _Rightreal;\r\n        this->_Val[_RE] = _Tmp;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 void _Div(const complex<_Other>& _Right) noexcept(_Is_for_standard_complex && _Is_unqual_fp<_Other>) {\r\n        using _Myctraits = _Ctraits<_Ty>;\r\n\r\n        _Ty _Rightreal = static_cast<_Ty>(_Right.real());\r\n        _Ty _Rightimag = static_cast<_Ty>(_Right.imag());\r\n\r\n        if (_Myctraits::_Isnan(_Rightreal) || _Myctraits::_Isnan(_Rightimag)) { // set NaN result\r\n            this->_Val[_RE] = _Myctraits::_Nanv();\r\n            this->_Val[_IM] = this->_Val[_RE];\r\n        } else if ((_Rightimag < 0 ? -_Rightimag : +_Rightimag)\r\n                   < (_Rightreal < 0 ? -_Rightreal : +_Rightreal)) { // |_Right.imag()| < |_Right.real()|\r\n            _Ty _Wr = _Rightimag / _Rightreal;\r\n            _Ty _Wd = _Rightreal + _Wr * _Rightimag;\r\n\r\n            if (_Myctraits::_Isnan(_Wd) || _Wd == 0) { // set NaN result\r\n                this->_Val[_RE] = _Myctraits::_Nanv();\r\n                this->_Val[_IM] = this->_Val[_RE];\r\n            } else { // compute representable result\r\n                _Ty _Tmp        = (this->_Val[_RE] + this->_Val[_IM] * _Wr) / _Wd;\r\n                this->_Val[_IM] = (this->_Val[_IM] - this->_Val[_RE] * _Wr) / _Wd;\r\n                this->_Val[_RE] = _Tmp;\r\n            }\r\n        } else if (_Rightimag == 0) { // _Right.real() == 0 && _Right.imag() == 0\r\n            this->_Val[_RE] /= _Rightreal;\r\n            this->_Val[_IM] /= _Rightreal;\r\n        } else { // 0 < |_Right.real()| <= |_Right.imag()|\r\n            _Ty _Wr = _Rightreal / _Rightimag;\r\n            _Ty _Wd = _Rightimag + _Wr * _Rightreal;\r\n\r\n            if (_Myctraits::_Isnan(_Wd) || _Wd == 0) { // set NaN result\r\n                this->_Val[_RE] = _Myctraits::_Nanv();\r\n                this->_Val[_IM] = this->_Val[_RE];\r\n            } else { // compute representable result\r\n                _Ty _Tmp        = (this->_Val[_RE] * _Wr + this->_Val[_IM]) / _Wd;\r\n                this->_Val[_IM] = (this->_Val[_IM] * _Wr - this->_Val[_RE]) / _Wd;\r\n                this->_Val[_RE] = _Tmp;\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <>\r\nclass complex<float> : public _Complex_base<float, _Fcomplex_value> {\r\npublic:\r\n    using _Ty = float;\r\n\r\n    constexpr explicit complex(const complex<double>&) noexcept; // strengthened, defined below\r\n    constexpr explicit complex(const complex<long double>&) noexcept; // strengthened, defined below\r\n\r\n    constexpr complex(const _Ty& _Realval = 0, const _Ty& _Imagval = 0) noexcept // strengthened\r\n        : _Complex_base<float, _Fcomplex_value>(_Realval, _Imagval) {}\r\n\r\n    _CONSTEXPR20 complex& operator=(const _Ty& _Right) noexcept /* strengthened */ {\r\n        _Val[_RE] = _Right;\r\n        _Val[_IM] = 0;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator+=(const _Ty& _Right) noexcept /* strengthened */ {\r\n        _Val[_RE] = _Val[_RE] + _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator-=(const _Ty& _Right) noexcept /* strengthened */ {\r\n        _Val[_RE] = _Val[_RE] - _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator*=(const _Ty& _Right) noexcept /* strengthened */ {\r\n        _Val[_RE] = _Val[_RE] * _Right;\r\n        _Val[_IM] = _Val[_IM] * _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator/=(const _Ty& _Right) noexcept /* strengthened */ {\r\n        _Val[_RE] = _Val[_RE] / _Right;\r\n        _Val[_IM] = _Val[_IM] / _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator+=(const complex& _Right) noexcept /* strengthened */ {\r\n        this->_Add(_Right);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator-=(const complex& _Right) noexcept /* strengthened */ {\r\n        this->_Sub(_Right);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator*=(const complex& _Right) noexcept /* strengthened */ {\r\n        this->_Mul(_Right);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator/=(const complex& _Right) noexcept /* strengthened */ {\r\n        this->_Div(_Right);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator=(const complex<_Other>& _Right) noexcept(_Is_unqual_fp<_Other>) /* strengthened */ {\r\n        _Val[_RE] = static_cast<_Ty>(_Right._Val[_RE]);\r\n        _Val[_IM] = static_cast<_Ty>(_Right._Val[_IM]);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator+=(const complex<_Other>& _Right) noexcept(_Is_unqual_fp<_Other>) /* strengthened */ {\r\n        this->_Add(_Right);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator-=(const complex<_Other>& _Right) noexcept(_Is_unqual_fp<_Other>) /* strengthened */ {\r\n        this->_Sub(_Right);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator*=(const complex<_Other>& _Right) noexcept(_Is_unqual_fp<_Other>) /* strengthened */ {\r\n        this->_Mul(_Right);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator/=(const complex<_Other>& _Right) noexcept(_Is_unqual_fp<_Other>) /* strengthened */ {\r\n        this->_Div(_Right);\r\n        return *this;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nclass complex<double> : public _Complex_base<double, _Dcomplex_value> {\r\npublic:\r\n    using _Ty = double;\r\n\r\n    constexpr complex(const complex<float>&) noexcept; // strengthened, defined below\r\n    constexpr explicit complex(const complex<long double>&) noexcept; // strengthened, defined below\r\n\r\n    constexpr complex(const _Ty& _Realval = 0, const _Ty& _Imagval = 0) noexcept // strengthened\r\n        : _Complex_base<double, _Dcomplex_value>(_Realval, _Imagval) {}\r\n\r\n    _CONSTEXPR20 complex& operator=(const _Ty& _Right) noexcept /* strengthened */ {\r\n        _Val[_RE] = _Right;\r\n        _Val[_IM] = 0;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator+=(const _Ty& _Right) noexcept /* strengthened */ {\r\n        _Val[_RE] = _Val[_RE] + _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator-=(const _Ty& _Right) noexcept /* strengthened */ {\r\n        _Val[_RE] = _Val[_RE] - _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator*=(const _Ty& _Right) noexcept /* strengthened */ {\r\n        _Val[_RE] = _Val[_RE] * _Right;\r\n        _Val[_IM] = _Val[_IM] * _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator/=(const _Ty& _Right) noexcept /* strengthened */ {\r\n        _Val[_RE] = _Val[_RE] / _Right;\r\n        _Val[_IM] = _Val[_IM] / _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator+=(const complex& _Right) noexcept /* strengthened */ {\r\n        this->_Add(_Right);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator-=(const complex& _Right) noexcept /* strengthened */ {\r\n        this->_Sub(_Right);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator*=(const complex& _Right) noexcept /* strengthened */ {\r\n        this->_Mul(_Right);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator/=(const complex& _Right) noexcept /* strengthened */ {\r\n        this->_Div(_Right);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator=(const complex<_Other>& _Right) noexcept(_Is_unqual_fp<_Other>) /* strengthened */ {\r\n        _Val[_RE] = static_cast<_Ty>(_Right._Val[_RE]);\r\n        _Val[_IM] = static_cast<_Ty>(_Right._Val[_IM]);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator+=(const complex<_Other>& _Right) noexcept(_Is_unqual_fp<_Other>) /* strengthened */ {\r\n        this->_Add(_Right);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator-=(const complex<_Other>& _Right) noexcept(_Is_unqual_fp<_Other>) /* strengthened */ {\r\n        this->_Sub(_Right);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator*=(const complex<_Other>& _Right) noexcept(_Is_unqual_fp<_Other>) /* strengthened */ {\r\n        this->_Mul(_Right);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator/=(const complex<_Other>& _Right) noexcept(_Is_unqual_fp<_Other>) /* strengthened */ {\r\n        this->_Div(_Right);\r\n        return *this;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nclass complex<long double> : public _Complex_base<long double, _Lcomplex_value> {\r\npublic:\r\n    using _Ty = long double;\r\n\r\n    constexpr complex(const complex<float>&) noexcept; // strengthened, defined below\r\n    constexpr complex(const complex<double>&) noexcept; // strengthened, defined below\r\n\r\n    constexpr complex(const _Ty& _Realval = 0, const _Ty& _Imagval = 0) noexcept // strengthened\r\n        : _Complex_base<long double, _Lcomplex_value>(_Realval, _Imagval) {}\r\n\r\n    _CONSTEXPR20 complex& operator=(const _Ty& _Right) noexcept /* strengthened */ {\r\n        _Val[_RE] = _Right;\r\n        _Val[_IM] = 0;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator+=(const _Ty& _Right) noexcept /* strengthened */ {\r\n        _Val[_RE] = _Val[_RE] + _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator-=(const _Ty& _Right) noexcept /* strengthened */ {\r\n        _Val[_RE] = _Val[_RE] - _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator*=(const _Ty& _Right) noexcept /* strengthened */ {\r\n        _Val[_RE] = _Val[_RE] * _Right;\r\n        _Val[_IM] = _Val[_IM] * _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator/=(const _Ty& _Right) noexcept /* strengthened */ {\r\n        _Val[_RE] = _Val[_RE] / _Right;\r\n        _Val[_IM] = _Val[_IM] / _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator+=(const complex& _Right) noexcept /* strengthened */ {\r\n        this->_Add(_Right);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator-=(const complex& _Right) noexcept /* strengthened */ {\r\n        this->_Sub(_Right);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator*=(const complex& _Right) noexcept /* strengthened */ {\r\n        this->_Mul(_Right);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator/=(const complex& _Right) noexcept /* strengthened */ {\r\n        this->_Div(_Right);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator=(const complex<_Other>& _Right) noexcept(_Is_unqual_fp<_Other>) /* strengthened */ {\r\n        _Val[_RE] = static_cast<_Ty>(_Right._Val[_RE]);\r\n        _Val[_IM] = static_cast<_Ty>(_Right._Val[_IM]);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator+=(const complex<_Other>& _Right) noexcept(_Is_unqual_fp<_Other>) /* strengthened */ {\r\n        this->_Add(_Right);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator-=(const complex<_Other>& _Right) noexcept(_Is_unqual_fp<_Other>) /* strengthened */ {\r\n        this->_Sub(_Right);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator*=(const complex<_Other>& _Right) noexcept(_Is_unqual_fp<_Other>) /* strengthened */ {\r\n        this->_Mul(_Right);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator/=(const complex<_Other>& _Right) noexcept(_Is_unqual_fp<_Other>) /* strengthened */ {\r\n        this->_Div(_Right);\r\n        return *this;\r\n    }\r\n};\r\n\r\nconstexpr complex<float>::complex(const complex<double>& _Right) noexcept // strengthened\r\n    : _Complex_base<float, _Fcomplex_value>(static_cast<_Ty>(_Right.real()), static_cast<_Ty>(_Right.imag())) {}\r\n\r\nconstexpr complex<float>::complex(const complex<long double>& _Right) noexcept // strengthened\r\n    : _Complex_base<float, _Fcomplex_value>(static_cast<_Ty>(_Right.real()), static_cast<_Ty>(_Right.imag())) {}\r\n\r\nconstexpr complex<double>::complex(const complex<float>& _Right) noexcept // strengthened\r\n    : _Complex_base<double, _Dcomplex_value>(_Right.real(), _Right.imag()) {}\r\n\r\nconstexpr complex<double>::complex(const complex<long double>& _Right) noexcept // strengthened\r\n    : _Complex_base<double, _Dcomplex_value>(static_cast<_Ty>(_Right.real()), static_cast<_Ty>(_Right.imag())) {}\r\n\r\nconstexpr complex<long double>::complex(const complex<float>& _Right) noexcept // strengthened\r\n    : _Complex_base<long double, _Lcomplex_value>(_Right.real(), _Right.imag()) {}\r\n\r\nconstexpr complex<long double>::complex(const complex<double>& _Right) noexcept // strengthened\r\n    : _Complex_base<long double, _Lcomplex_value>(_Right.real(), _Right.imag()) {}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass complex : public _Complex_base<_Ty, _Complex_value<_Ty>> {\r\npublic:\r\n    using _Mybase = _Complex_base<_Ty, _Complex_value<_Ty>>;\r\n\r\n    _DEPRECATE_NONFLOATING_COMPLEX\r\n    constexpr complex(const _Ty& _Realval = _Ty(), const _Ty& _Imagval = _Ty()) : _Mybase(_Realval, _Imagval) {}\r\n\r\n    _CONSTEXPR20 complex& operator=(const _Ty& _Right) {\r\n        this->_Val[_RE] = _Right;\r\n        this->_Val[_IM] = _Ty();\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _DEPRECATE_NONFLOATING_COMPLEX constexpr complex(const complex<_Other>& _Right)\r\n        : _Mybase(static_cast<_Ty>(_Right.real()), static_cast<_Ty>(_Right.imag())) {}\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator=(const complex<_Other>& _Right) {\r\n        this->_Val[_RE] = static_cast<_Ty>(_Right.real());\r\n        this->_Val[_IM] = static_cast<_Ty>(_Right.imag());\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator+=(const _Ty& _Right) {\r\n        this->_Val[_RE] = this->_Val[_RE] + _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator-=(const _Ty& _Right) {\r\n        this->_Val[_RE] = this->_Val[_RE] - _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator*=(const _Ty& _Right) {\r\n        this->_Val[_RE] = this->_Val[_RE] * _Right;\r\n        this->_Val[_IM] = this->_Val[_IM] * _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator/=(const _Ty& _Right) {\r\n        this->_Val[_RE] = this->_Val[_RE] / _Right;\r\n        this->_Val[_IM] = this->_Val[_IM] / _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator+=(const complex& _Right) {\r\n        this->_Add(_Right);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator-=(const complex& _Right) {\r\n        this->_Sub(_Right);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator*=(const complex& _Right) {\r\n        this->_Mul(_Right);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 complex& operator/=(const complex& _Right) {\r\n        this->_Div(_Right);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator+=(const complex<_Other>& _Right) {\r\n        this->_Add(_Right);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator-=(const complex<_Other>& _Right) {\r\n        this->_Sub(_Right);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator*=(const complex<_Other>& _Right) {\r\n        this->_Mul(_Right);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    _CONSTEXPR20 complex& operator/=(const complex<_Other>& _Right) {\r\n        this->_Div(_Right);\r\n        return *this;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 complex<_Ty> operator+(const complex<_Ty>& _Left, const complex<_Ty>& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    complex<_Ty> _Tmp(_Left);\r\n    _Tmp += _Right;\r\n    return _Tmp;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 complex<_Ty> operator+(const complex<_Ty>& _Left, const _Ty& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    complex<_Ty> _Tmp(_Left);\r\n    _Tmp += _Right;\r\n    return _Tmp;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 complex<_Ty> operator+(const _Ty& _Left, const complex<_Ty>& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    complex<_Ty> _Tmp(_Right);\r\n    _Tmp += _Left;\r\n    return _Tmp;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 complex<_Ty> operator-(const complex<_Ty>& _Left, const complex<_Ty>& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    complex<_Ty> _Tmp(_Left);\r\n    _Tmp -= _Right;\r\n    return _Tmp;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 complex<_Ty> operator-(const complex<_Ty>& _Left, const _Ty& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    complex<_Ty> _Tmp(_Left);\r\n    _Tmp -= _Right;\r\n    return _Tmp;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 complex<_Ty> operator-(const _Ty& _Left, const complex<_Ty>& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    complex<_Ty> _Tmp(_Left);\r\n    _Tmp -= _Right;\r\n    return _Tmp;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 complex<_Ty> operator*(const complex<_Ty>& _Left, const complex<_Ty>& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    complex<_Ty> _Tmp(_Left);\r\n    _Tmp *= _Right;\r\n    return _Tmp;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 complex<_Ty> operator*(const complex<_Ty>& _Left, const _Ty& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    complex<_Ty> _Tmp(_Left);\r\n    _Tmp *= _Right;\r\n    return _Tmp;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 complex<_Ty> operator*(const _Ty& _Left, const complex<_Ty>& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    complex<_Ty> _Tmp(_Right);\r\n    _Tmp *= _Left;\r\n    return _Tmp;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 complex<_Ty> operator/(const complex<_Ty>& _Left, const complex<_Ty>& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    complex<_Ty> _Tmp(_Left);\r\n    _Tmp /= _Right;\r\n    return _Tmp;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 complex<_Ty> operator/(const complex<_Ty>& _Left, const _Ty& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    complex<_Ty> _Tmp(_Left);\r\n    _Tmp /= _Right;\r\n    return _Tmp;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 complex<_Ty> operator/(const _Ty& _Left, const complex<_Ty>& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    complex<_Ty> _Tmp(_Left);\r\n    _Tmp /= _Right;\r\n    return _Tmp;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 complex<_Ty> operator+(const complex<_Ty>& _Left)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    return _Left;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 complex<_Ty> operator-(const complex<_Ty>& _Left)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    return complex<_Ty>(-_Left.real(), -_Left.imag());\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD constexpr bool operator==(const complex<_Ty>& _Left, const complex<_Ty>& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    return _Left.real() == _Right.real() && _Left.imag() == _Right.imag();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD constexpr bool operator==(const complex<_Ty>& _Left, const _Ty& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    return _Left.real() == _Right && _Left.imag() == 0;\r\n}\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr bool operator==(const _Ty& _Left, const complex<_Ty>& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    return _Left == _Right.real() && 0 == _Right.imag();\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr bool operator!=(const complex<_Ty>& _Left, const complex<_Ty>& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr bool operator!=(const complex<_Ty>& _Left, const _Ty& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr bool operator!=(const _Ty& _Left, const complex<_Ty>& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    return !(_Left == _Right);\r\n}\r\n#endif // !_HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD constexpr _Ty imag(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    return _Left.imag();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD constexpr _Ty real(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    return _Left.real();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> sqrt(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */;\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Ty abs(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    return _Ctraits<_Ty>::hypot(_Left.real(), _Left.imag());\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> acos(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    const _Ty _Arcbig     = static_cast<_Ty>(0.25) * _Ctraits<_Ty>::sqrt(_Ctraits<_Ty>::_Flt_max());\r\n    constexpr _Ty _Pi_val = static_cast<_Ty>(3.1415926535897932384626433832795029L);\r\n\r\n    const _Ty _Re = real(_Left);\r\n    const _Ty _Im = imag(_Left);\r\n    _Ty _Ux;\r\n    _Ty _Vx;\r\n\r\n    if (_Ctraits<_Ty>::_Isnan(_Re) || _Ctraits<_Ty>::_Isnan(_Im)) { // at least one NaN\r\n        _Ux = _Ctraits<_Ty>::_Nanv();\r\n        _Vx = _Ux;\r\n    } else if (_Ctraits<_Ty>::_Isinf(_Re)) { // (+/-Inf, not NaN)\r\n        if (_Ctraits<_Ty>::_Isinf(_Im)) {\r\n            if (_Re < 0) {\r\n                _Ux = static_cast<_Ty>(0.75) * _Pi_val; // (-Inf, +/-Inf)\r\n            } else {\r\n                _Ux = static_cast<_Ty>(0.25) * _Pi_val; // (+Inf, +/-Inf)\r\n            }\r\n        } else if (_Re < 0) {\r\n            _Ux = _Pi_val; // (-Inf, finite)\r\n        } else {\r\n            _Ux = 0; // (+Inf, finite)\r\n        }\r\n        _Vx = -_Ctraits<_Ty>::_Copysign(_Ctraits<_Ty>::_Infv(), _Im);\r\n    } else if (_Ctraits<_Ty>::_Isinf(_Im)) { // (finite, finite)\r\n        _Ux = static_cast<_Ty>(0.50) * _Pi_val; // (finite, +/-Inf)\r\n        _Vx = -_Im;\r\n    } else { // (finite, finite)\r\n        const complex<_Ty> _Wx = sqrt(complex<_Ty>(1 + _Re, -_Im));\r\n        const complex<_Ty> _Zx = sqrt(complex<_Ty>(1 - _Re, -_Im));\r\n        const _Ty _Wr          = real(_Wx);\r\n        const _Ty _Wi          = imag(_Wx);\r\n        const _Ty _Zr          = real(_Zx);\r\n        const _Ty _Zi          = imag(_Zx);\r\n        _Ty _Alfa;\r\n        _Ty _Beta;\r\n\r\n        _Ux = 2 * _Ctraits<_Ty>::atan2(_Zr, _Wr);\r\n\r\n        if (_Arcbig < _Wr) { // real parts large\r\n            _Alfa = _Wr;\r\n            _Beta = _Zi + _Wi * (_Zr / _Alfa);\r\n        } else if (_Arcbig < _Wi) { // imag parts large\r\n            _Alfa = _Wi;\r\n            _Beta = _Wr * (_Zi / _Alfa) + _Zr;\r\n        } else if (_Wi < -_Arcbig) { // imag part of w large negative\r\n            _Alfa = -_Wi;\r\n            _Beta = _Wr * (_Zi / _Alfa) - _Zr;\r\n        } else { // shouldn't overflow\r\n            _Alfa = 0;\r\n            _Beta = _Wr * _Zi + _Wi * _Zr; // Im(w * z)\r\n        }\r\n\r\n        _Vx = _Ctraits<_Ty>::asinh(_Beta);\r\n        if (_Alfa != 0) {\r\n            if (0 <= _Vx) {\r\n                _Vx += _Ctraits<_Ty>::log(_Alfa);\r\n            } else {\r\n                _Vx -= _Ctraits<_Ty>::log(_Alfa); // asinh(a*b) = asinh(a)+log(b)\r\n            }\r\n        }\r\n    }\r\n    return complex<_Ty>(_Ux, _Vx);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> acosh(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    const _Ty _Arcbig     = static_cast<_Ty>(0.25) * _Ctraits<_Ty>::sqrt(_Ctraits<_Ty>::_Flt_max());\r\n    constexpr _Ty _Pi_val = static_cast<_Ty>(3.1415926535897932384626433832795029L);\r\n\r\n    const _Ty _Re = real(_Left);\r\n    _Ty _Im       = imag(_Left);\r\n    _Ty _Ux;\r\n    _Ty _Vx;\r\n\r\n    if (_Ctraits<_Ty>::_Isnan(_Re) || _Ctraits<_Ty>::_Isnan(_Im)) { // at least one NaN\r\n        _Ux = _Ctraits<_Ty>::_Nanv();\r\n        _Vx = _Ux;\r\n    } else if (_Ctraits<_Ty>::_Isinf(_Re)) { // (+/-Inf, not NaN)\r\n        _Ux = _Ctraits<_Ty>::_Infv();\r\n\r\n        if (_Ctraits<_Ty>::_Isinf(_Im)) {\r\n            if (_Re < 0) {\r\n                _Vx = static_cast<_Ty>(0.75) * _Pi_val; // (-Inf, +/-Inf)\r\n            } else {\r\n                _Vx = static_cast<_Ty>(0.25) * _Pi_val; // (+Inf, +/-Inf)\r\n            }\r\n        } else if (_Re < 0) {\r\n            _Vx = _Pi_val; // (-Inf, finite)\r\n        } else {\r\n            _Vx = 0; // (+Inf, finite)\r\n        }\r\n\r\n        _Vx = _Ctraits<_Ty>::_Copysign(_Vx, _Im);\r\n    } else if (_Ctraits<_Ty>::_Isinf(_Im)) { // (finite, +/-Inf)\r\n        _Ux = _Ctraits<_Ty>::_Infv();\r\n        _Vx = _Ctraits<_Ty>::_Copysign(static_cast<_Ty>(0.50) * _Pi_val, _Im);\r\n    } else { // (finite, finite)\r\n        const complex<_Ty> _Wx = sqrt(complex<_Ty>(_Re - 1, -_Im));\r\n        const complex<_Ty> _Zx = sqrt(complex<_Ty>(_Re + 1, _Im));\r\n        const _Ty _Wr          = real(_Wx);\r\n        const _Ty _Wi          = imag(_Wx);\r\n        const _Ty _Zr          = real(_Zx);\r\n        const _Ty _Zi          = imag(_Zx);\r\n        _Ty _Alfa;\r\n        _Ty _Beta;\r\n\r\n        if (_Arcbig < _Wr) { // real parts large\r\n            _Alfa = _Wr;\r\n            _Beta = _Zr - _Wi * (_Zi / _Alfa);\r\n        } else if (_Arcbig < _Wi) { // imag parts large\r\n            _Alfa = _Wi;\r\n            _Beta = _Wr * (_Zr / _Alfa) - _Zi;\r\n        } else if (_Wi < -_Arcbig) { // imag part of w large negative\r\n            _Alfa = -_Wi;\r\n            _Beta = _Wr * (_Zr / _Alfa) + _Zi;\r\n        } else { // shouldn't overflow\r\n            _Alfa = 0;\r\n            _Beta = _Wr * _Zr - _Wi * _Zi; // Re(w * z)\r\n        }\r\n\r\n        _Ux = _Ctraits<_Ty>::asinh(_Beta);\r\n        if (_Alfa != 0) {\r\n            if (0 <= _Ux) {\r\n                _Ux += _Ctraits<_Ty>::log(_Alfa);\r\n            } else {\r\n                _Ux -= _Ctraits<_Ty>::log(_Alfa); // asinh(a*b) = asinh(a)+log(b)\r\n            }\r\n        }\r\n\r\n        _Vx = 2 * _Ctraits<_Ty>::atan2(imag(sqrt(complex<_Ty>(_Re - 1, _Im))), _Zr);\r\n    }\r\n    return complex<_Ty>(_Ux, _Vx);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> asinh(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    const _Ty _Arcbig     = static_cast<_Ty>(0.25) * _Ctraits<_Ty>::sqrt(_Ctraits<_Ty>::_Flt_max());\r\n    constexpr _Ty _Pi_val = static_cast<_Ty>(3.1415926535897932384626433832795029L);\r\n\r\n    const _Ty _Re = real(_Left);\r\n    _Ty _Im       = imag(_Left);\r\n    _Ty _Ux;\r\n    _Ty _Vx;\r\n\r\n    if (_Ctraits<_Ty>::_Isnan(_Re) || _Ctraits<_Ty>::_Isnan(_Im)) { // at least one NaN/Inf\r\n        _Ux = _Ctraits<_Ty>::_Nanv();\r\n        _Vx = _Ux;\r\n    } else if (_Ctraits<_Ty>::_Isinf(_Re)) { // (+/-Inf, not NaN)\r\n        _Ux = _Ctraits<_Ty>::_Infv();\r\n\r\n        if (_Ctraits<_Ty>::_Isinf(_Im)) { // (+/-Inf, +/-Inf)\r\n            _Ux = _Re;\r\n            _Vx = _Ctraits<_Ty>::_Copysign(static_cast<_Ty>(0.25) * _Pi_val, _Im);\r\n        } else { // (+/-Inf, finite)\r\n            _Ux = _Re;\r\n            _Vx = _Ctraits<_Ty>::_Copysign(_Ty{0}, _Im);\r\n        }\r\n    } else if (_Ctraits<_Ty>::_Isinf(_Im)) { // (finite, +/-Inf)\r\n        _Ux = _Ctraits<_Ty>::_Copysign(_Ctraits<_Ty>::_Infv(), _Re);\r\n        _Vx = _Ctraits<_Ty>::_Copysign(static_cast<_Ty>(0.50) * _Pi_val, _Im);\r\n    } else { // (finite, finite)\r\n        const complex<_Ty> _Wx = sqrt(complex<_Ty>(1 - _Im, _Re));\r\n        const complex<_Ty> _Zx = sqrt(complex<_Ty>(1 + _Im, -_Re));\r\n        const _Ty _Wr          = real(_Wx);\r\n        const _Ty _Wi          = imag(_Wx);\r\n        const _Ty _Zr          = real(_Zx);\r\n        const _Ty _Zi          = imag(_Zx);\r\n        _Ty _Alfa;\r\n        _Ty _Beta;\r\n\r\n        if (_Arcbig < _Wr) { // real parts large\r\n            _Alfa = _Wr;\r\n            _Beta = _Wi * (_Zr / _Alfa) - _Zi;\r\n        } else if (_Arcbig < _Wi) { // imag parts large\r\n            _Alfa = _Wi;\r\n            _Beta = _Zr - _Wr * (_Zi / _Alfa);\r\n        } else if (_Wi < -_Arcbig) { // imag part of w large negative\r\n            _Alfa = -_Wi;\r\n            _Beta = -_Zr - _Wr * (_Zi / _Alfa);\r\n        } else { // shouldn't overflow\r\n            _Alfa = 0;\r\n            _Beta = _Wi * _Zr - _Wr * _Zi; // Im(w * conj(z))\r\n        }\r\n\r\n        _Ux = _Ctraits<_Ty>::asinh(_Beta);\r\n        if (_Alfa != 0) {\r\n            if (0 <= _Ux) {\r\n                _Ux += _Ctraits<_Ty>::log(_Alfa);\r\n            } else {\r\n                _Ux -= _Ctraits<_Ty>::log(_Alfa); // asinh(a*b) = asinh(a)+log(b)\r\n            }\r\n        }\r\n\r\n        _Vx = _Ctraits<_Ty>::atan2(_Im, real(_Wx * _Zx));\r\n    }\r\n\r\n    return complex<_Ty>(_Ux, _Vx);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> asin(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    complex<_Ty> _Asinh = _STD asinh(complex<_Ty>(-imag(_Left), real(_Left)));\r\n\r\n    return complex<_Ty>(imag(_Asinh), -real(_Asinh));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> atanh(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    const _Ty _Arcbig    = static_cast<_Ty>(0.25) * _Ctraits<_Ty>::sqrt(_Ctraits<_Ty>::_Flt_max());\r\n    constexpr _Ty _Piby2 = static_cast<_Ty>(1.5707963267948966192313216916397514L);\r\n\r\n    _Ty _Re = real(_Left);\r\n    _Ty _Im = imag(_Left);\r\n    _Ty _Ux;\r\n    _Ty _Vx;\r\n\r\n    if (_Ctraits<_Ty>::_Isnan(_Re) || _Ctraits<_Ty>::_Isnan(_Im)) { // at least one NaN\r\n        _Ux = _Ctraits<_Ty>::_Nanv();\r\n        _Vx = _Ux;\r\n    } else if (_Ctraits<_Ty>::_Isinf(_Re)) { // (+/-Inf, not NaN)\r\n        _Ux = _Ctraits<_Ty>::_Copysign(_Ty{0}, _Re);\r\n        _Vx = _Ctraits<_Ty>::_Copysign(_Piby2, _Im);\r\n    } else { // (finite, not _NaN)\r\n        const _Ty _Magim  = _Ctraits<_Ty>::_Abs(_Im);\r\n        const _Ty _Old_re = _Re;\r\n\r\n        _Re = _Ctraits<_Ty>::_Abs(_Re);\r\n\r\n        if (_Arcbig < _Re) { // |re| is large\r\n            _Ty _Fx = _Im / _Re;\r\n\r\n            _Ux = 1 / _Re / (1 + _Fx * _Fx);\r\n            _Vx = _Ctraits<_Ty>::_Copysign(_Piby2, _Im);\r\n        } else if (_Arcbig < _Magim) { // |im| is large\r\n            _Ty _Fx = _Re / _Im;\r\n\r\n            _Ux = _Fx / _Im / (1 + _Fx * _Fx);\r\n            _Vx = _Ctraits<_Ty>::_Copysign(_Piby2, _Im);\r\n        } else if (_Re != 1) { // |re| is small\r\n            _Ty _Refrom1 = 1 - _Re;\r\n            _Ty _Imeps2  = _Magim * _Magim;\r\n\r\n            _Ux = static_cast<_Ty>(0.25) * _Ctraits<_Ty>::log1p(4 * _Re / (_Refrom1 * _Refrom1 + _Imeps2));\r\n            _Vx = static_cast<_Ty>(0.50) * _Ctraits<_Ty>::atan2(2 * _Im, _Refrom1 * (1 + _Re) - _Imeps2);\r\n        } else if (_Im == 0) { // {+/-1, 0)\r\n            _Ux = _Ctraits<_Ty>::_Infv();\r\n            _Vx = _Im;\r\n        } else { // {+/-1, nonzero)\r\n            _Ux = _Ctraits<_Ty>::log(\r\n                _Ctraits<_Ty>::sqrt(_Ctraits<_Ty>::sqrt(4 + _Im * _Im)) / _Ctraits<_Ty>::sqrt(_Magim));\r\n            _Vx = _Ctraits<_Ty>::_Copysign(static_cast<_Ty>(0.50) * (_Piby2 + _Ctraits<_Ty>::atan2(_Magim, 2)), _Im);\r\n        }\r\n\r\n        _Ux = _Ctraits<_Ty>::_Copysign(_Ux, _Old_re);\r\n    }\r\n    return complex<_Ty>(_Ux, _Vx);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> atan(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    complex<_Ty> _Atanh = _STD atanh(complex<_Ty>(-imag(_Left), real(_Left)));\r\n\r\n    return complex<_Ty>(imag(_Atanh), -real(_Atanh));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> cosh(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    return complex<_Ty>(_Ctraits<_Ty>::_Cosh(real(_Left), _Ctraits<_Ty>::cos(imag(_Left))),\r\n        _Ctraits<_Ty>::_Sinh(real(_Left), _Ctraits<_Ty>::sin(imag(_Left))));\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD complex<_Ty> _Polar_positive_nan_inf_zero_rho(const _Ty& _Rho, const _Ty& _Theta)\r\n    noexcept(_Is_unqual_fp<_Ty>) { // _Rho is +NaN/+Inf/+0\r\n    if (_Ctraits<_Ty>::_Isnan(_Theta) || _Ctraits<_Ty>::_Isinf(_Theta)) { // _Theta is NaN/Inf\r\n        if (_Ctraits<_Ty>::_Isinf(_Rho)) {\r\n            return complex<_Ty>(_Rho, _Ctraits<_Ty>::sin(_Theta)); // (Inf, NaN/Inf)\r\n        } else {\r\n            return complex<_Ty>(_Rho, _Ctraits<_Ty>::_Copysign(_Rho, _Theta)); // (NaN/0, NaN/Inf)\r\n        }\r\n    } else if (_Theta == _Ty{0}) { // _Theta is zero\r\n        return complex<_Ty>(_Rho, _Theta); // (NaN/Inf/0, 0)\r\n    } else { // _Theta is finite non-zero\r\n        // (NaN/Inf/0, finite non-zero)\r\n        return complex<_Ty>(_Rho * _Ctraits<_Ty>::cos(_Theta), _Rho * _Ctraits<_Ty>::sin(_Theta));\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> exp(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    const _Ty _Log_rho = _STD real(_Left);\r\n    const _Ty _Theta   = _STD imag(_Left);\r\n\r\n    if (!_Ctraits<_Ty>::_Isnan(_Log_rho) && !_Ctraits<_Ty>::_Isinf(_Log_rho)) { // real component is finite\r\n        _Ty _Real = _Log_rho;\r\n        _Ty _Imag = _Log_rho;\r\n        _Ctraits<_Ty>::_Exp(&_Real, _Ctraits<_Ty>::cos(_Theta), 0);\r\n        _Ctraits<_Ty>::_Exp(&_Imag, _Ctraits<_Ty>::sin(_Theta), 0);\r\n        return complex<_Ty>(_Real, _Imag);\r\n    }\r\n\r\n    // real component is NaN/Inf\r\n    // return polar(exp(re), im)\r\n    if (_Ctraits<_Ty>::_Isinf(_Log_rho)) {\r\n        if (_Log_rho < _Ty{0}) {\r\n            return _Polar_positive_nan_inf_zero_rho(_Ty{0}, _Theta); // exp(-Inf) = +0\r\n        } else {\r\n            return _Polar_positive_nan_inf_zero_rho(_Log_rho, _Theta); // exp(+Inf) = +Inf\r\n        }\r\n    } else {\r\n        return _Polar_positive_nan_inf_zero_rho(_Ctraits<_Ty>::_Abs(_Log_rho), _Theta); // exp(NaN) = +NaN\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\n_Ty _Fabs(const complex<_Ty>& _Left, int* _Pexp) noexcept(_Is_unqual_fp<_Ty>) {\r\n    // Used by sqrt(), return magnitude and scale factor.\r\n    // Returns a non-zero even integer in *_Pexp when _Left is finite and non-zero.\r\n    // Returns 0 in *_Pexp when _Left is zero, infinity, or NaN.\r\n    *_Pexp  = 0;\r\n    _Ty _Av = _Ctraits<_Ty>::_Abs(_STD real(_Left));\r\n    _Ty _Bv = _Ctraits<_Ty>::_Abs(_STD imag(_Left));\r\n\r\n    if (_Ctraits<_Ty>::_Isinf(_Av) || _Ctraits<_Ty>::_Isinf(_Bv)) {\r\n        return _Ctraits<_Ty>::_Infv(); // at least one component is INF\r\n    } else if (_Ctraits<_Ty>::_Isnan(_Av)) {\r\n        return _Av; // real component is NaN\r\n    } else if (_Ctraits<_Ty>::_Isnan(_Bv)) {\r\n        return _Bv; // imaginary component is NaN\r\n    } else { // neither component is NaN or INF\r\n        if (_Av < _Bv) { // ensure that |_Bv| <= |_Av|\r\n            _STD swap(_Av, _Bv);\r\n        }\r\n\r\n        if (_Av == 0) {\r\n            return _Av; // |0| == 0\r\n        }\r\n\r\n        if (1 <= _Av) {\r\n            *_Pexp = 4;\r\n            _Av    = _Av * static_cast<_Ty>(0.0625);\r\n            _Bv    = _Bv * static_cast<_Ty>(0.0625);\r\n        } else {\r\n            constexpr _Ty _Flt_eps = _Ctraits<_Ty>::_Flt_eps();\r\n            // TRANSITION, workaround for non-floating-point _Ty\r\n            constexpr _Ty _Leg_tiny = _Flt_eps == 0 ? _Ty{0} : 2 * _Ctraits<_Ty>::_Flt_norm_min() / _Flt_eps;\r\n\r\n            if (_Av < _Leg_tiny) {\r\n                constexpr int _Exponent = -2 * numeric_limits<_Ty>::digits;\r\n\r\n                *_Pexp = _Exponent;\r\n                _Av    = _Ctraits<_Ty>::ldexp(_Av, -_Exponent);\r\n                _Bv    = _Ctraits<_Ty>::ldexp(_Bv, -_Exponent);\r\n            } else {\r\n                *_Pexp = -2;\r\n                _Av    = _Av * 4;\r\n                _Bv    = _Bv * 4;\r\n            }\r\n        }\r\n\r\n        const _Ty _Tmp = _Av - _Bv;\r\n        if (_Tmp == _Av) {\r\n            return _Av; // _Bv unimportant\r\n        } else if (_Bv < _Tmp) { // use simple approximation\r\n            const _Ty _Qv = _Av / _Bv;\r\n            return _Av + _Bv / (_Qv + _Ctraits<_Ty>::sqrt(_Qv * _Qv + 1));\r\n        } else { // use 1 1/2 precision to preserve bits\r\n            constexpr _Ty _Root2            = static_cast<_Ty>(1.4142135623730950488016887242096981L);\r\n            constexpr _Ty _Oneplusroot2high = static_cast<_Ty>(10125945.0 / 4194304.0); // exact if prec >= 24 bits\r\n            constexpr _Ty _Oneplusroot2low  = static_cast<_Ty>(1.4341252375973918872420969807856967e-7L);\r\n\r\n            const _Ty _Qv = _Tmp / _Bv;\r\n            const _Ty _Rv = (_Qv + 2) * _Qv;\r\n            const _Ty _Sv = _Rv / (_Root2 + _Ctraits<_Ty>::sqrt(_Rv + 2)) + _Oneplusroot2low + _Qv + _Oneplusroot2high;\r\n            return _Av + _Bv / _Sv;\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD _Ty _Log_abs(const complex<_Ty>& _Left) noexcept { // for double, long double, and non-floating-point types\r\n    return static_cast<_Ty>(\r\n        _Math_algorithms::_Log_hypot(static_cast<double>(_STD real(_Left)), static_cast<double>(_STD imag(_Left))));\r\n}\r\n\r\n_NODISCARD inline float _Log_abs(const complex<float>& _Left) noexcept {\r\n    return _Math_algorithms::_Log_hypot(_STD real(_Left), _STD imag(_Left));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> log(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    const _Ty _Log_abs_v = _Log_abs(_Left); // get logarithm of magnitude\r\n    const _Ty _Theta     = _Ctraits<_Ty>::atan2(_STD imag(_Left), _STD real(_Left)); // get phase\r\n    return complex<_Ty>(_Log_abs_v, _Theta);\r\n}\r\n\r\ntemplate <class _Ty>\r\ncomplex<_Ty> _Pow(const _Ty& _Left, const _Ty& _Right) noexcept(_Is_unqual_fp<_Ty>) {\r\n    if (0 <= _Left) {\r\n        return complex<_Ty>(_Ctraits<_Ty>::pow(_Left, _Right), _Ctraits<_Ty>::_Copysign(_Ty{0}, _Right));\r\n    } else {\r\n        return exp(_Right * log(complex<_Ty>(_Left)));\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> pow(const complex<_Ty>& _Left, const _Ty& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    if (imag(_Left) == 0) {\r\n        if (_Ctraits<_Ty>::_Signbit(imag(_Left))) {\r\n            return conj(_Pow(real(_Left), _Right));\r\n        } else {\r\n            return _Pow(real(_Left), _Right);\r\n        }\r\n    } else {\r\n        return exp(_Right * log(_Left));\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> pow(const _Ty& _Left, const complex<_Ty>& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    if (imag(_Right) == 0) {\r\n        return _Pow(_Left, real(_Right));\r\n    } else if (0 < _Left) {\r\n        return exp(_Right * _Ctraits<_Ty>::log(_Left));\r\n    } else {\r\n        return exp(_Right * log(complex<_Ty>(_Left)));\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> pow(const complex<_Ty>& _Left, const complex<_Ty>& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    if (imag(_Right) == 0) {\r\n        return pow(_Left, real(_Right));\r\n    } else if (imag(_Left) == 0 && 0 < real(_Left)) {\r\n        return exp(_Right * _Ctraits<_Ty>::log(real(_Left)));\r\n    } else {\r\n        return exp(_Right * log(_Left));\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> sinh(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    return complex<_Ty>(_Ctraits<_Ty>::_Sinh(real(_Left), _Ctraits<_Ty>::cos(imag(_Left))),\r\n        _Ctraits<_Ty>::_Cosh(real(_Left), _Ctraits<_Ty>::sin(imag(_Left))));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> sqrt(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    int _Leftexp;\r\n    _Ty _Rho = _Fabs(_Left, &_Leftexp); // get magnitude and scale factor\r\n\r\n    if (_Leftexp == 0) {\r\n        // argument is zero, INF, or NaN\r\n        if (_Rho == 0) {\r\n            return complex<_Ty>(_Ty{0}, imag(_Left));\r\n        } else if (_Ctraits<_Ty>::_Isinf(_Rho)) {\r\n            const _Ty _Re = real(_Left);\r\n            const _Ty _Im = imag(_Left);\r\n\r\n            if (_Ctraits<_Ty>::_Isinf(_Im)) {\r\n                return complex<_Ty>(_Ctraits<_Ty>::_Infv(), _Im); // (any, +/-Inf)\r\n            } else if (_Ctraits<_Ty>::_Isnan(_Im)) {\r\n                if (_Re < 0) {\r\n                    return complex<_Ty>(_Ctraits<_Ty>::_Abs(_Im), _Ctraits<_Ty>::_Copysign(_Re, _Im)); // (-Inf, NaN)\r\n                } else {\r\n                    return _Left; // (+Inf, NaN)\r\n                }\r\n            } else {\r\n                if (_Re < 0) {\r\n                    return complex<_Ty>(_Ty{0}, _Ctraits<_Ty>::_Copysign(_Re, _Im)); // (-Inf, finite)\r\n                } else {\r\n                    return complex<_Ty>(_Re, _Ctraits<_Ty>::_Copysign(_Ty{0}, _Im)); // (+Inf, finite)\r\n                }\r\n            }\r\n        } else {\r\n            return complex<_Ty>(_Rho, _Rho);\r\n        }\r\n    } else { // compute in safest quadrant\r\n        _Ty _Realmag = _Ctraits<_Ty>::ldexp(_Ctraits<_Ty>::_Abs(real(_Left)), -_Leftexp);\r\n        _Rho         = _Ctraits<_Ty>::ldexp(_Ctraits<_Ty>::sqrt(2 * (_Realmag + _Rho)), _Leftexp / 2 - 1);\r\n\r\n        if (0 <= real(_Left)) {\r\n            return complex<_Ty>(_Rho, imag(_Left) / (2 * _Rho));\r\n        } else {\r\n            return complex<_Ty>(\r\n                _Ctraits<_Ty>::_Abs(imag(_Left) / (2 * _Rho)), _Ctraits<_Ty>::_Copysign(_Rho, imag(_Left)));\r\n        }\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> tanh(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    _Ty _Tv = _Ctraits<_Ty>::tan(imag(_Left));\r\n    _Ty _Sv = _Ctraits<_Ty>::_Sinh(real(_Left), _Ty{1});\r\n    _Ty _Bv = _Sv * (_Ty{1} + _Tv * _Tv);\r\n    _Ty _Dv = _Ty{1} + _Bv * _Sv;\r\n\r\n    if (_Ctraits<_Ty>::_Isinf(_Dv)) {\r\n        _Ty _Real;\r\n\r\n        if (_Sv < _Ty{0}) {\r\n            _Real = -_Ty{1};\r\n        } else {\r\n            _Real = _Ty{1};\r\n        }\r\n\r\n        return complex<_Ty>(_Real, _Tv * _Ty{0});\r\n    }\r\n\r\n    return complex<_Ty>((_Ctraits<_Ty>::sqrt(_Ty{1} + _Sv * _Sv)) * _Bv / _Dv, _Tv / _Dv);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Ty arg(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    // return phase angle of complex as real\r\n    return _Ctraits<_Ty>::atan2(imag(_Left), real(_Left));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 complex<_Ty> conj(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    // return complex conjugate\r\n    return complex<_Ty>(real(_Left), -imag(_Left));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> proj(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    // return complex projection\r\n    if (_Ctraits<_Ty>::_Isinf(real(_Left)) || _Ctraits<_Ty>::_Isinf(imag(_Left))) {\r\n        const _Ty _Imag = _Ctraits<_Ty>::_Copysign(_Ty{0}, imag(_Left));\r\n        return complex<_Ty>(_Ctraits<_Ty>::_Infv(), _Imag);\r\n    }\r\n\r\n    return _Left;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> cos(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    return complex<_Ty>(_Ctraits<_Ty>::_Cosh(imag(_Left), _Ctraits<_Ty>::cos(real(_Left))),\r\n        -_Ctraits<_Ty>::_Sinh(imag(_Left), _Ctraits<_Ty>::sin(real(_Left))));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> log10(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    return log(_Left) * static_cast<_Ty>(0.43429448190325182765112891891660508L);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 _Ty norm(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    // return squared magnitude\r\n    return real(_Left) * real(_Left) + imag(_Left) * imag(_Left);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> polar(const _Ty& _Rho, const _Ty& _Theta) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    // return _Rho * exp(i * _Theta) as complex\r\n    if (!_Ctraits<_Ty>::_Isnan(_Rho) && !_Ctraits<_Ty>::_Isinf(_Rho) && _Rho != _Ty{0}) { // _Rho is finite non-zero\r\n        return complex<_Ty>(_Rho * _Ctraits<_Ty>::cos(_Theta), _Rho * _Ctraits<_Ty>::sin(_Theta));\r\n    }\r\n\r\n    // _Rho is NaN/Inf/0\r\n    if (_Ctraits<_Ty>::_Signbit(_Rho)) {\r\n        return -_Polar_positive_nan_inf_zero_rho(-_Rho, _Theta);\r\n    } else {\r\n        return _Polar_positive_nan_inf_zero_rho(_Rho, _Theta);\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> polar(const _Ty& _Rho) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    // return _Rho * exp(i * 0) as complex\r\n    return complex<_Ty>(_Rho, _Ty{0});\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> sin(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    return complex<_Ty>(_Ctraits<_Ty>::_Cosh(imag(_Left), _Ctraits<_Ty>::sin(real(_Left))),\r\n        _Ctraits<_Ty>::_Sinh(imag(_Left), _Ctraits<_Ty>::cos(real(_Left))));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD complex<_Ty> tan(const complex<_Ty>& _Left) noexcept(_Is_unqual_fp<_Ty>) /* strengthened */ {\r\n    complex<_Ty> _Zv(tanh(complex<_Ty>(-imag(_Left), real(_Left))));\r\n    return complex<_Ty>(imag(_Zv), -real(_Zv));\r\n}\r\n\r\ntemplate <class _Ty>\r\nusing _Upgrade_to_double = conditional_t<is_integral_v<_Ty>, double, _Ty>;\r\n\r\n_EXPORT_STD template <class _Ty, enable_if_t<is_arithmetic_v<_Ty>, int> = 0>\r\n_NODISCARD _Upgrade_to_double<_Ty> arg(_Ty _Left) noexcept /* strengthened */ {\r\n    using _Upgraded = _Upgrade_to_double<_Ty>;\r\n    const auto _Val = static_cast<_Upgraded>(_Left);\r\n\r\n    return _Ctraits<_Upgraded>::atan2(0, _Val);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, enable_if_t<is_arithmetic_v<_Ty>, int> = 0>\r\n_NODISCARD _CONSTEXPR20 _Upgrade_to_double<_Ty> imag(_Ty) noexcept /* strengthened */ {\r\n    return 0;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, enable_if_t<is_arithmetic_v<_Ty>, int> = 0>\r\n_NODISCARD _CONSTEXPR20 _Upgrade_to_double<_Ty> real(_Ty _Left) noexcept /* strengthened */ {\r\n    using _Upgraded = _Upgrade_to_double<_Ty>;\r\n    const auto _Val = static_cast<_Upgraded>(_Left);\r\n\r\n    return _Val;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, enable_if_t<is_arithmetic_v<_Ty>, int> = 0>\r\n_NODISCARD _CONSTEXPR20 _Upgrade_to_double<_Ty> norm(_Ty _Left) noexcept /* strengthened */ {\r\n    using _Upgraded = _Upgrade_to_double<_Ty>;\r\n    const auto _Val = static_cast<_Upgraded>(_Left);\r\n\r\n    return _Val * _Val;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, enable_if_t<is_arithmetic_v<_Ty>, int> = 0>\r\n_NODISCARD _CONSTEXPR20 complex<_Upgrade_to_double<_Ty>> conj(_Ty _Left) noexcept /* strengthened */ {\r\n    using _Upgraded = _Upgrade_to_double<_Ty>;\r\n    const auto _Val = static_cast<_Upgraded>(_Left);\r\n\r\n    return complex<_Upgraded>(_Val, -_Upgraded{0});\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, enable_if_t<is_arithmetic_v<_Ty>, int> = 0>\r\n_NODISCARD complex<_Upgrade_to_double<_Ty>> proj(_Ty _Left) noexcept /* strengthened */ {\r\n    using _Upgraded = _Upgrade_to_double<_Ty>;\r\n    const auto _Val = static_cast<_Upgraded>(_Left);\r\n\r\n    if (_Ctraits<_Upgraded>::_Isinf(_Val)) {\r\n        // C11 7.3.9.5/2: \"z projects to z except that all complex infinities [...]\r\n        // project to positive infinity on the real axis.\"\r\n        return complex<_Upgraded>(_Ctraits<_Upgraded>::_Infv(), 0);\r\n    }\r\n\r\n    return complex<_Upgraded>(_Val, 0);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD complex<_Common_float_type_t<_Ty1, _Ty2>> pow(const complex<_Ty1>& _Left, const complex<_Ty2>& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty1> && _Is_unqual_fp<_Ty2>) /* strengthened */ {\r\n    using _Type = complex<_Common_float_type_t<_Ty1, _Ty2>>;\r\n    return _STD pow(_Type(_Left), _Type(_Right));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2, enable_if_t<is_arithmetic_v<_Ty2>, int> = 0>\r\n_NODISCARD complex<_Common_float_type_t<_Ty1, _Ty2>> pow(const complex<_Ty1>& _Left, const _Ty2& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty1>) /* strengthened */ {\r\n    using _Promoted = _Common_float_type_t<_Ty1, _Ty2>;\r\n    using _Type     = complex<_Promoted>;\r\n    return _STD pow(_Type(_Left), _Type(static_cast<_Promoted>(_Right)));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2, enable_if_t<is_arithmetic_v<_Ty1>, int> = 0>\r\n_NODISCARD complex<_Common_float_type_t<_Ty1, _Ty2>> pow(const _Ty1& _Left, const complex<_Ty2>& _Right)\r\n    noexcept(_Is_unqual_fp<_Ty2>) /* strengthened */ {\r\n    using _Promoted = _Common_float_type_t<_Ty1, _Ty2>;\r\n    using _Type     = complex<_Promoted>;\r\n    return _STD pow(_Type(static_cast<_Promoted>(_Left)), _Type(_Right));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Elem, class _Tr>\r\nbasic_istream<_Elem, _Tr>& operator>>(basic_istream<_Elem, _Tr>& _Istr, complex<_Ty>& _Right) {\r\n    const ctype<_Elem>& _Ctype_fac = _STD use_facet<ctype<_Elem>>(_Istr.getloc());\r\n    _Elem _Ch                      = 0;\r\n    long double _Real              = 0;\r\n    long double _Imag              = 0;\r\n\r\n    if (_Istr >> _Ch && _Ch != _Ctype_fac.widen('(')) { // no leading '(', treat as real only\r\n        _Istr.putback(_Ch);\r\n        _Istr >> _Real;\r\n        _Imag = 0;\r\n    } else if (_Istr >> _Real >> _Ch && _Ch != _Ctype_fac.widen(',')) {\r\n        if (_Ch == _Ctype_fac.widen(')')) {\r\n            _Imag = 0; // (real)\r\n        } else { // no trailing ')' after real, treat as bad field\r\n            _Istr.putback(_Ch);\r\n            _Istr.setstate(ios_base::failbit);\r\n        }\r\n    } else if (_Istr >> _Imag >> _Ch && _Ch != _Ctype_fac.widen(')')) { // no imag or trailing ')', treat as bad field\r\n        _Istr.putback(_Ch);\r\n        _Istr.setstate(ios_base::failbit);\r\n    }\r\n\r\n    if (!_Istr.fail()) { // store valid result\r\n        _Ty _Tyreal(static_cast<_Ty>(_Real)), _Tyimag(static_cast<_Ty>(_Imag));\r\n        _Right = complex<_Ty>(_Tyreal, _Tyimag);\r\n    }\r\n    return _Istr;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Elem, class _Tr>\r\nbasic_ostream<_Elem, _Tr>& operator<<(basic_ostream<_Elem, _Tr>& _Ostr, const complex<_Ty>& _Right) {\r\n    const ctype<_Elem>& _Ctype_fac = _STD use_facet<ctype<_Elem>>(_Ostr.getloc());\r\n    basic_ostringstream<_Elem, _Tr, allocator<_Elem>> _Sstr;\r\n\r\n    _Sstr.flags(_Ostr.flags());\r\n    _Sstr.imbue(_Ostr.getloc());\r\n    _Sstr.precision(_Ostr.precision());\r\n    _Sstr << _Ctype_fac.widen('(') << real(_Right) << _Ctype_fac.widen(',') << imag(_Right) << _Ctype_fac.widen(')');\r\n\r\n    return _Ostr << _Sstr.str();\r\n}\r\n\r\ninline namespace literals {\r\n    inline namespace complex_literals {\r\n        _EXPORT_STD _NODISCARD constexpr complex<long double> operator\"\"il(long double _Val) noexcept\r\n        /* strengthened */ {\r\n            return complex<long double>(0.0L, static_cast<long double>(_Val));\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr complex<long double> operator\"\"il(unsigned long long _Val) noexcept\r\n        /* strengthened */ {\r\n            return complex<long double>(0.0L, static_cast<long double>(_Val));\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr complex<double> operator\"\"i(long double _Val) noexcept /* strengthened */ {\r\n            return complex<double>(0.0, static_cast<double>(_Val));\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr complex<double> operator\"\"i(unsigned long long _Val) noexcept\r\n        /* strengthened */ {\r\n            return complex<double>(0.0, static_cast<double>(_Val));\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr complex<float> operator\"\"if(long double _Val) noexcept /* strengthened */ {\r\n            return complex<float>(0.0f, static_cast<float>(_Val));\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD constexpr complex<float> operator\"\"if(unsigned long long _Val) noexcept\r\n        /* strengthened */ {\r\n            return complex<float>(0.0f, static_cast<float>(_Val));\r\n        }\r\n    } // namespace complex_literals\r\n} // namespace literals\r\n\r\n_STD_END\r\n\r\n#undef _RE\r\n#undef _IM\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _COMPLEX_\r\n"
  },
  {
    "path": "stl/inc/concepts",
    "content": "// concepts standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CONCEPTS_\r\n#define _CONCEPTS_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX20\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <concepts> are available only with C++20 or later.\");\r\n#else // ^^^ !_HAS_CXX20 / _HAS_CXX20 vvv\r\n#include <type_traits>\r\n#include <vcruntime_new.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _Ty1, class _Ty2>\r\nconcept _Same_impl = // Must be a distinct concept to provide symmetric subsumption for same_as\r\n#ifdef __clang__\r\n    __is_same(_Ty1, _Ty2);\r\n#else // ^^^ use intrinsic / no intrinsic vvv\r\n    is_same_v<_Ty1, _Ty2>;\r\n#endif // ^^^ no intrinsic ^^^\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\nconcept same_as = _Same_impl<_Ty1, _Ty2> && _Same_impl<_Ty2, _Ty1>;\r\n\r\n_EXPORT_STD template <class _Derived, class _Base>\r\nconcept derived_from =\r\n    __is_base_of(_Base, _Derived) && __is_convertible_to(const volatile _Derived*, const volatile _Base*);\r\n\r\ntemplate <class _From, class _To>\r\nconcept _Implicitly_convertible_to = is_convertible_v<_From, _To>;\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\nconcept common_reference_with =\r\n    requires {\r\n        typename common_reference_t<_Ty1, _Ty2>;\r\n        typename common_reference_t<_Ty2, _Ty1>;\r\n    } && same_as<common_reference_t<_Ty1, _Ty2>, common_reference_t<_Ty2, _Ty1>>\r\n    && convertible_to<_Ty1, common_reference_t<_Ty1, _Ty2>> && convertible_to<_Ty2, common_reference_t<_Ty1, _Ty2>>;\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\nconcept common_with =\r\n    requires {\r\n        typename common_type_t<_Ty1, _Ty2>;\r\n        typename common_type_t<_Ty2, _Ty1>;\r\n    } //\r\n    && same_as<common_type_t<_Ty1, _Ty2>, common_type_t<_Ty2, _Ty1>> //\r\n    && requires {\r\n        static_cast<common_type_t<_Ty1, _Ty2>>(_STD declval<_Ty1>());\r\n        static_cast<common_type_t<_Ty1, _Ty2>>(_STD declval<_Ty2>());\r\n    } //\r\n    && common_reference_with<add_lvalue_reference_t<const _Ty1>, add_lvalue_reference_t<const _Ty2>> //\r\n    && common_reference_with<add_lvalue_reference_t<common_type_t<_Ty1, _Ty2>>,\r\n        common_reference_t<add_lvalue_reference_t<const _Ty1>, add_lvalue_reference_t<const _Ty2>>>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept integral = is_integral_v<_Ty>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept signed_integral = integral<_Ty> && static_cast<_Ty>(-1) < static_cast<_Ty>(0);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept unsigned_integral = integral<_Ty> && !signed_integral<_Ty>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept floating_point = is_floating_point_v<_Ty>;\r\n\r\n_EXPORT_STD template <class _LTy, class _RTy>\r\nconcept assignable_from = is_lvalue_reference_v<_LTy>\r\n                       && common_reference_with<const remove_reference_t<_LTy>&, const remove_reference_t<_RTy>&>\r\n                       && requires(_LTy _Left, _RTy&& _Right) {\r\n                              { _Left = static_cast<_RTy &&>(_Right) } -> same_as<_LTy>;\r\n                          };\r\n\r\n// swappable and swappable_with are defined below, since they depend on move_constructible.\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept destructible = __is_nothrow_destructible(_Ty);\r\n\r\n_EXPORT_STD template <class _Ty, class... _ArgTys>\r\nconcept constructible_from = destructible<_Ty> && __is_constructible(_Ty, _ArgTys...);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept default_initializable = constructible_from<_Ty> && requires {\r\n    _Ty{};\r\n    ::new (static_cast<void*>(nullptr)) _Ty; // is-default-initializable<_Ty>\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept move_constructible = constructible_from<_Ty, _Ty> && convertible_to<_Ty, _Ty>;\r\n\r\ntemplate <class _Ty>\r\nconcept _Has_class_or_enum_type =\r\n    __is_class(remove_reference_t<_Ty>) || __is_enum(remove_reference_t<_Ty>) || __is_union(remove_reference_t<_Ty>);\r\n\r\nnamespace ranges {\r\n    namespace _Swap {\r\n        template <class _Ty>\r\n        void swap(_Ty&, _Ty&) = delete;\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        concept _Use_ADL_swap =\r\n            (_Has_class_or_enum_type<_Ty1> || _Has_class_or_enum_type<_Ty2>) && requires(_Ty1&& __t, _Ty2&& __u) {\r\n                swap(static_cast<_Ty1 &&>(__t), static_cast<_Ty2 &&>(__u)); // intentional ADL\r\n            };\r\n\r\n        struct _Cpo {\r\n            template <class _Ty1, class _Ty2>\r\n                requires _Use_ADL_swap<_Ty1, _Ty2>\r\n            static constexpr void operator()(_Ty1&& __t, _Ty2&& __u)\r\n                noexcept(noexcept(swap(static_cast<_Ty1&&>(__t), static_cast<_Ty2&&>(__u)))) { // intentional ADL\r\n                swap(static_cast<_Ty1&&>(__t), static_cast<_Ty2&&>(__u)); // intentional ADL\r\n            }\r\n\r\n            template <class _Ty>\r\n                requires (!_Use_ADL_swap<_Ty&, _Ty&> && move_constructible<_Ty> && assignable_from<_Ty&, _Ty>)\r\n            static constexpr void operator()(_Ty& __x, _Ty& __y)\r\n                noexcept(is_nothrow_move_constructible_v<_Ty> && is_nothrow_move_assignable_v<_Ty>) {\r\n                _Ty __tmp(static_cast<_Ty&&>(__x));\r\n                __x = static_cast<_Ty&&>(__y);\r\n                __y = static_cast<_Ty&&>(__tmp);\r\n            }\r\n\r\n            template <class _Ty1, class _Ty2, size_t _Size>\r\n            static constexpr void operator()(_Ty1 (&__t)[_Size], _Ty2 (&__u)[_Size])\r\n                noexcept(noexcept(operator()(__t[0], __u[0])))\r\n                requires requires(_Cpo __fn) { __fn(__t[0], __u[0]); }\r\n            {\r\n                if constexpr (is_same_v<_Ty1, _Ty2> && _Is_trivially_swappable_v<_Ty1>) {\r\n                    if (!_STD is_constant_evaluated()) {\r\n                        _STD _Swap_trivial_arrays(__t, __u);\r\n                        return;\r\n                    }\r\n                }\r\n\r\n                for (size_t __i = 0; __i < _Size; ++__i) {\r\n                    operator()(__t[__i], __u[__i]);\r\n                }\r\n            }\r\n        };\r\n    } // namespace _Swap\r\n\r\n    inline namespace _Cpos {\r\n        _EXPORT_STD inline constexpr _Swap::_Cpo swap;\r\n    }\r\n} // namespace ranges\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept swappable = requires(_Ty& __x, _Ty& __y) { _RANGES swap(__x, __y); };\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\nconcept swappable_with = common_reference_with<_Ty1, _Ty2> && requires(_Ty1&& __t, _Ty2&& __u) {\r\n    _RANGES swap(static_cast<_Ty1 &&>(__t), static_cast<_Ty1 &&>(__t));\r\n    _RANGES swap(static_cast<_Ty2 &&>(__u), static_cast<_Ty2 &&>(__u));\r\n    _RANGES swap(static_cast<_Ty1 &&>(__t), static_cast<_Ty2 &&>(__u));\r\n    _RANGES swap(static_cast<_Ty2 &&>(__u), static_cast<_Ty1 &&>(__t));\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept copy_constructible = move_constructible<_Ty> && constructible_from<_Ty, _Ty&> && convertible_to<_Ty&, _Ty>\r\n                          && constructible_from<_Ty, const _Ty&> && convertible_to<const _Ty&, _Ty>\r\n                          && constructible_from<_Ty, const _Ty> && convertible_to<const _Ty, _Ty>;\r\n\r\ntemplate <class _Ty>\r\nconcept _Boolean_testable_impl = convertible_to<_Ty, bool>;\r\n\r\ntemplate <class _Ty>\r\nconcept _Boolean_testable = _Boolean_testable_impl<_Ty> && requires(_Ty&& __t) {\r\n    { !static_cast<_Ty &&>(__t) } -> _Boolean_testable_impl;\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nconcept _Half_equality_comparable = requires(const remove_reference_t<_Ty1>& __x, const remove_reference_t<_Ty2>& __y) {\r\n    { __x == __y } -> _Boolean_testable;\r\n    { __x != __y } -> _Boolean_testable;\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nconcept _Weakly_equality_comparable_with =\r\n    _Half_equality_comparable<_Ty1, _Ty2> && _Half_equality_comparable<_Ty2, _Ty1>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept equality_comparable = _Half_equality_comparable<_Ty, _Ty>;\r\n\r\ntemplate <class _Ty1, class _Ty2, class _Ref = common_reference_t<const _Ty1&, const _Ty2&>>\r\nconcept _Comparison_common_type_with_impl = same_as<_Ref, common_reference_t<const _Ty2&, const _Ty1&>> && requires {\r\n    requires convertible_to<const _Ty1&, const _Ref&> || convertible_to<_Ty1, const _Ref&>;\r\n    requires convertible_to<const _Ty2&, const _Ref&> || convertible_to<_Ty2, const _Ref&>;\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nconcept _Comparison_common_type_with = _Comparison_common_type_with_impl<remove_cvref_t<_Ty1>, remove_cvref_t<_Ty2>>;\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\nconcept equality_comparable_with =\r\n    equality_comparable<_Ty1> && equality_comparable<_Ty2> && _Comparison_common_type_with<_Ty1, _Ty2>\r\n    && equality_comparable<common_reference_t<const remove_reference_t<_Ty1>&, const remove_reference_t<_Ty2>&>>\r\n    && _Weakly_equality_comparable_with<_Ty1, _Ty2>;\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nconcept _Half_ordered = requires(const remove_reference_t<_Ty1>& __t, const remove_reference_t<_Ty2>& __u) {\r\n    { __t < __u } -> _Boolean_testable;\r\n    { __t > __u } -> _Boolean_testable;\r\n    { __t <= __u } -> _Boolean_testable;\r\n    { __t >= __u } -> _Boolean_testable;\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nconcept _Partially_ordered_with = _Half_ordered<_Ty1, _Ty2> && _Half_ordered<_Ty2, _Ty1>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept totally_ordered = equality_comparable<_Ty> && _Half_ordered<_Ty, _Ty>;\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\nconcept totally_ordered_with =\r\n    totally_ordered<_Ty1> && totally_ordered<_Ty2> && equality_comparable_with<_Ty1, _Ty2>\r\n    && totally_ordered<common_reference_t<const remove_reference_t<_Ty1>&, const remove_reference_t<_Ty2>&>>\r\n    && _Partially_ordered_with<_Ty1, _Ty2>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept movable = is_object_v<_Ty> && move_constructible<_Ty> && assignable_from<_Ty&, _Ty> && swappable<_Ty>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept copyable = copy_constructible<_Ty> && movable<_Ty> && assignable_from<_Ty&, _Ty&>\r\n                && assignable_from<_Ty&, const _Ty&> && assignable_from<_Ty&, const _Ty>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept semiregular = copyable<_Ty> && default_initializable<_Ty>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept regular = semiregular<_Ty> && equality_comparable<_Ty>;\r\n\r\n_EXPORT_STD template <class _FTy, class... _ArgTys>\r\nconcept invocable = requires(\r\n    _FTy&& _Fn, _ArgTys&&... _Args) { _STD invoke(static_cast<_FTy &&>(_Fn), static_cast<_ArgTys &&>(_Args)...); };\r\n\r\n_EXPORT_STD template <class _FTy, class... _ArgTys>\r\nconcept regular_invocable = invocable<_FTy, _ArgTys...>;\r\n\r\n_EXPORT_STD template <class _FTy, class... _ArgTys>\r\nconcept predicate = regular_invocable<_FTy, _ArgTys...> && _Boolean_testable<invoke_result_t<_FTy, _ArgTys...>>;\r\n\r\n_EXPORT_STD template <class _FTy, class _Ty1, class _Ty2>\r\nconcept relation = predicate<_FTy, _Ty1, _Ty1> && predicate<_FTy, _Ty2, _Ty2> && predicate<_FTy, _Ty1, _Ty2>\r\n                && predicate<_FTy, _Ty2, _Ty1>;\r\n\r\n_EXPORT_STD template <class _FTy, class _Ty1, class _Ty2>\r\nconcept equivalence_relation = relation<_FTy, _Ty1, _Ty2>;\r\n\r\n_EXPORT_STD template <class _FTy, class _Ty1, class _Ty2>\r\nconcept strict_weak_order = relation<_FTy, _Ty1, _Ty2>;\r\n\r\ntemplate <class _Ty>\r\nstruct _Choice_t {\r\n    _Ty _Strategy  = _Ty{};\r\n    bool _No_throw = false;\r\n};\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _HAS_CXX20\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CONCEPTS_\r\n"
  },
  {
    "path": "stl/inc/condition_variable",
    "content": "// condition_variable standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CONDITION_VARIABLE_\r\n#define _CONDITION_VARIABLE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#ifdef _M_CEE_PURE\r\n#error <condition_variable> is not supported when compiling with /clr:pure.\r\n#endif // defined(_M_CEE_PURE)\r\n\r\n#include <__msvc_chrono.hpp>\r\n#include <memory>\r\n#include <mutex>\r\n#include <xthreads.h>\r\n\r\n#if _HAS_CXX20\r\n#include <stop_token>\r\n#endif // _HAS_CXX20\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _Lock>\r\nstruct _NODISCARD _Unlock_guard {\r\n    explicit _Unlock_guard(_Lock& _Mtx_) : _Mtx(_Mtx_) {\r\n        _Mtx.unlock();\r\n    }\r\n\r\n    ~_Unlock_guard() noexcept /* terminates */ {\r\n        // relock mutex or terminate()\r\n        // condition_variable_any wait functions are required to terminate if\r\n        // the mutex cannot be relocked;\r\n        // we slam into noexcept here for easier user debugging.\r\n        _Mtx.lock();\r\n    }\r\n\r\n    _Unlock_guard(const _Unlock_guard&)            = delete;\r\n    _Unlock_guard& operator=(const _Unlock_guard&) = delete;\r\n\r\nprivate:\r\n    _Lock& _Mtx;\r\n};\r\n\r\n_EXPORT_STD class condition_variable_any { // class for waiting for conditions with any kind of mutex\r\npublic:\r\n    condition_variable_any() : _Myptr{_STD make_shared<mutex>()} {\r\n#ifdef _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR\r\n        _Cnd_init_in_situ(_Mycnd());\r\n#endif // ^^^ defined(_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR) ^^^\r\n    }\r\n\r\n    ~condition_variable_any() noexcept = default;\r\n\r\n    condition_variable_any(const condition_variable_any&)            = delete;\r\n    condition_variable_any& operator=(const condition_variable_any&) = delete;\r\n\r\n    void notify_one() noexcept { // wake up one waiter\r\n        lock_guard<mutex> _Guard{*_Myptr};\r\n        _Cnd_signal(_Mycnd());\r\n    }\r\n\r\n    void notify_all() noexcept { // wake up all waiters\r\n        lock_guard<mutex> _Guard{*_Myptr};\r\n        _Cnd_broadcast(_Mycnd());\r\n    }\r\n\r\n    template <class _Lock>\r\n    void wait(_Lock& _Lck) noexcept /* terminates */ { // wait for signal\r\n        const shared_ptr<mutex> _Ptr = _Myptr; // for immunity to *this destruction\r\n        unique_lock<mutex> _Guard{*_Ptr};\r\n        _Unlock_guard<_Lock> _Unlock_outer{_Lck};\r\n        _Cnd_wait(_Mycnd(), _Ptr->_Mymtx());\r\n        _Guard.unlock();\r\n    } // relock _Lck\r\n\r\n    template <class _Lock, class _Predicate>\r\n    void wait(_Lock& _Lck, _Predicate _Pred) noexcept(noexcept(static_cast<bool>(_Pred()))) /* strengthened */ {\r\n        // wait for signal and check predicate\r\n        while (!static_cast<bool>(_Pred())) {\r\n            wait(_Lck);\r\n        }\r\n    }\r\n\r\n    template <class _Lock, class _Clock, class _Duration>\r\n    cv_status wait_until(_Lock& _Lck, const chrono::time_point<_Clock, _Duration> _Abs_time) {\r\n        // wait until time point\r\n        static_assert(chrono::_Is_clock_v<_Clock>, \"Clock type required\");\r\n        const auto _Now                  = _Clock::now();\r\n        using _Common_duration           = decltype(_Abs_time - _Now);\r\n        const _Common_duration _Rel_time = (_Abs_time <= _Now) ? _Common_duration::zero() : _Abs_time - _Now;\r\n        return wait_for(_Lck, _Rel_time);\r\n    }\r\n\r\n    template <class _Lock, class _Clock, class _Duration, class _Predicate>\r\n    bool wait_until(_Lock& _Lck, const chrono::time_point<_Clock, _Duration> _Abs_time, _Predicate _Pred) {\r\n        // wait for signal with timeout and check predicate\r\n#if _HAS_CXX20\r\n        static_assert(chrono::is_clock_v<_Clock>, \"Clock type required\");\r\n#endif // _HAS_CXX20\r\n        while (!_Pred()) {\r\n            if (wait_until(_Lck, _Abs_time) == cv_status::timeout) {\r\n                return _Pred();\r\n            }\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    template <class _Lock, class _Rep, class _Period>\r\n    cv_status wait_for(_Lock& _Lck, const chrono::duration<_Rep, _Period> _Rel_time) { // wait for duration\r\n        if (_Rel_time <= chrono::duration<_Rep, _Period>::zero()) {\r\n            _Unlock_guard<_Lock> _Unlock_outer{_Lck};\r\n            (void) _Unlock_outer;\r\n            return cv_status::timeout;\r\n        }\r\n\r\n        const auto _Rel_time_ms = _Clamped_rel_time_ms_count(_Rel_time);\r\n\r\n        // wait for signal with timeout\r\n        const shared_ptr<mutex> _Ptr = _Myptr; // for immunity to *this destruction\r\n        const auto _Start            = _CHRONO steady_clock::now();\r\n        const auto _Target           = _Start + _Rel_time;\r\n\r\n        unique_lock<mutex> _Guard{*_Ptr};\r\n        _Unlock_guard<_Lock> _Unlock_outer{_Lck};\r\n        const _Thrd_result _Res = _Cnd_timedwait_for_unchecked(_Mycnd(), _Ptr->_Mymtx(), _Rel_time_ms._Count);\r\n        _Guard.unlock();\r\n\r\n        if (_Res == _Thrd_result::_Success) {\r\n            return cv_status::no_timeout; // Real or WinAPI-internal spurious wake\r\n        } else if (_Rel_time_ms._Clamped) {\r\n            return cv_status::no_timeout; // Spuriously wake due to clamped timeout\r\n        } else if (_CHRONO steady_clock::now() < _Target) {\r\n            return cv_status::no_timeout; // Spuriously wake due to premature timeout\r\n        } else {\r\n            return cv_status::timeout;\r\n        }\r\n    }\r\n\r\n    template <class _Lock, class _Rep, class _Period, class _Predicate>\r\n    bool wait_for(_Lock& _Lck, const chrono::duration<_Rep, _Period> _Rel_time, _Predicate _Pred) {\r\n        // wait for signal with timeout and check predicate\r\n        return wait_until(_Lck, _To_absolute_time(_Rel_time), _STD move(_Pred));\r\n    }\r\n\r\n#if _HAS_CXX20\r\nprivate:\r\n    struct _Cv_any_notify_all {\r\n        condition_variable_any* _This;\r\n\r\n        explicit _Cv_any_notify_all(condition_variable_any* _This_) noexcept : _This{_This_} {}\r\n\r\n        _Cv_any_notify_all(const _Cv_any_notify_all&)            = delete;\r\n        _Cv_any_notify_all& operator=(const _Cv_any_notify_all&) = delete;\r\n\r\n        void operator()() const noexcept {\r\n            _This->notify_all();\r\n        }\r\n    };\r\n\r\npublic:\r\n    template <class _Lock, class _Predicate>\r\n    bool wait(_Lock& _Lck, stop_token _Stoken, _Predicate _Pred)\r\n        noexcept(noexcept(static_cast<bool>(_Pred()))) /* strengthened */ {\r\n        // TRANSITION, ABI: Due to the unsynchronized delivery of notify_all by _Stoken,\r\n        // this implementation cannot tolerate *this destruction while an interruptible wait\r\n        // is outstanding. A future ABI should store both the internal CV and internal mutex\r\n        // in the reference counted block to allow this.\r\n        stop_callback<_Cv_any_notify_all> _Cb{_Stoken, this};\r\n        for (;;) {\r\n            if (_Pred()) {\r\n                return true;\r\n            }\r\n\r\n            unique_lock<mutex> _Guard{*_Myptr};\r\n            if (_Stoken.stop_requested()) {\r\n                _Guard.unlock();\r\n                return _Pred();\r\n            }\r\n\r\n            _Unlock_guard<_Lock> _Unlock_outer{_Lck};\r\n            _Cnd_wait(_Mycnd(), _Myptr->_Mymtx());\r\n            _Guard.unlock();\r\n        } // relock\r\n    }\r\n\r\n    template <class _Lock, class _Clock, class _Duration, class _Predicate>\r\n    bool wait_until(\r\n        _Lock& _Lck, stop_token _Stoken, const chrono::time_point<_Clock, _Duration> _Abs_time, _Predicate _Pred) {\r\n        static_assert(chrono::is_clock_v<_Clock>, \"Clock type required\");\r\n        stop_callback<_Cv_any_notify_all> _Cb{_Stoken, this};\r\n        for (;;) {\r\n            if (_Pred()) {\r\n                return true;\r\n            }\r\n\r\n            unique_lock<mutex> _Guard{*_Myptr};\r\n            if (_Stoken.stop_requested()) {\r\n                break;\r\n            }\r\n\r\n            _Unlock_guard<_Lock> _Unlock_outer{_Lck};\r\n            unique_lock<mutex> _Guard_unlocks_before_locking_outer{_STD move(_Guard)};\r\n\r\n            const auto _Now = _Clock::now();\r\n            if (_Now >= _Abs_time) {\r\n                break;\r\n            }\r\n\r\n            const unsigned long _Rel_ms_count = _Clamped_rel_time_ms_count(_Abs_time - _Now)._Count;\r\n            (void) _Cnd_timedwait_for_unchecked(_Mycnd(), _Myptr->_Mymtx(), _Rel_ms_count);\r\n            _Guard_unlocks_before_locking_outer.unlock();\r\n        } // relock\r\n\r\n        return _Pred();\r\n    }\r\n\r\n    template <class _Lock, class _Rep, class _Period, class _Predicate>\r\n    bool wait_for(_Lock& _Lck, stop_token _Stoken, const chrono::duration<_Rep, _Period> _Rel_time, _Predicate _Pred) {\r\n        return wait_until(_Lck, _STD move(_Stoken), _To_absolute_time(_Rel_time), _STD move(_Pred));\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\nprivate:\r\n    shared_ptr<mutex> _Myptr;\r\n\r\n    _Cnd_internal_imp_t _Cnd_storage{};\r\n\r\n    _NODISCARD _Cnd_t _Mycnd() noexcept {\r\n        return &_Cnd_storage;\r\n    }\r\n};\r\n\r\n_EXPORT_STD inline void notify_all_at_thread_exit(condition_variable& _Cnd, unique_lock<mutex> _Lck) noexcept\r\n/* strengthened */ {\r\n    // register _Cnd for release at thread exit\r\n    _Cnd._Register(_Lck, nullptr);\r\n}\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CONDITION_VARIABLE_\r\n"
  },
  {
    "path": "stl/inc/coroutine",
    "content": "// coroutine standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _COROUTINE_\r\n#define _COROUTINE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#ifdef _RESUMABLE_FUNCTIONS_SUPPORTED\r\n_EMIT_STL_WARNING(STL4039, \"The <coroutine> header is incompatible with the deprecated /await compiler option.\");\r\n#elif !defined(__cpp_lib_coroutine)\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <coroutine> are available only with C++20 or later \"\r\n                           \"(or /await:strict in C++14/17).\");\r\n#else // ^^^ <coroutine> is not available / <coroutine> is available vvv\r\n#ifndef _ALLOW_COROUTINE_ABI_MISMATCH\r\n#pragma detect_mismatch(\"_COROUTINE_ABI\", \"2\")\r\n#endif // !defined(_ALLOW_COROUTINE_ABI_MISMATCH)\r\n\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#endif // _HAS_CXX20\r\n#include <type_traits>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\n\r\ntemplate <class _Ret, class = void>\r\nstruct _Coroutine_traits {};\r\n\r\ntemplate <class _Ret>\r\nstruct _Coroutine_traits<_Ret, void_t<typename _Ret::promise_type>> {\r\n    using promise_type = typename _Ret::promise_type;\r\n};\r\n\r\n_EXPORT_STD template <class _Ret, class...>\r\nstruct coroutine_traits : _Coroutine_traits<_Ret> {};\r\n\r\n_EXPORT_STD template <class = void>\r\nstruct _NO_SPECIALIZATIONS_CITING(\"N5014 [coroutine.handle.general]/2\") coroutine_handle;\r\n\r\ntemplate <>\r\nstruct coroutine_handle<void> {\r\n    constexpr coroutine_handle() noexcept = default;\r\n    constexpr coroutine_handle(nullptr_t) noexcept {}\r\n\r\n    coroutine_handle& operator=(nullptr_t) noexcept {\r\n        _Ptr = nullptr;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD constexpr void* address() const noexcept {\r\n        return _Ptr;\r\n    }\r\n\r\n    _NODISCARD static constexpr coroutine_handle from_address(void* const _Addr) noexcept { // strengthened\r\n        coroutine_handle _Result;\r\n        _Result._Ptr = _Addr;\r\n        return _Result;\r\n    }\r\n\r\n    constexpr explicit operator bool() const noexcept {\r\n        return _Ptr != nullptr;\r\n    }\r\n\r\n    _NODISCARD bool done() const noexcept { // strengthened\r\n        return __builtin_coro_done(_Ptr);\r\n    }\r\n\r\n    void operator()() const {\r\n        __builtin_coro_resume(_Ptr);\r\n    }\r\n\r\n    void resume() const {\r\n        __builtin_coro_resume(_Ptr);\r\n    }\r\n\r\n    void destroy() const noexcept { // strengthened\r\n        __builtin_coro_destroy(_Ptr);\r\n    }\r\n\r\nprivate:\r\n    void* _Ptr = nullptr;\r\n};\r\n\r\n_EXPORT_STD template <class _CoroPromise>\r\nstruct _NO_SPECIALIZATIONS_CITING(\"N5014 [coroutine.handle.general]/2\") coroutine_handle {\r\n    constexpr coroutine_handle() noexcept = default;\r\n    constexpr coroutine_handle(nullptr_t) noexcept {}\r\n\r\n    _NODISCARD static coroutine_handle from_promise(_CoroPromise& _Prom) noexcept { // strengthened\r\n        const auto _Prom_ptr  = const_cast<void*>(static_cast<const volatile void*>(_STD addressof(_Prom)));\r\n        const auto _Frame_ptr = __builtin_coro_promise(_Prom_ptr, 0, true);\r\n        coroutine_handle _Result;\r\n        _Result._Ptr = _Frame_ptr;\r\n        return _Result;\r\n    }\r\n\r\n    coroutine_handle& operator=(nullptr_t) noexcept {\r\n        _Ptr = nullptr;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD constexpr void* address() const noexcept {\r\n        return _Ptr;\r\n    }\r\n\r\n    _NODISCARD static constexpr coroutine_handle from_address(void* const _Addr) noexcept { // strengthened\r\n        coroutine_handle _Result;\r\n        _Result._Ptr = _Addr;\r\n        return _Result;\r\n    }\r\n\r\n    constexpr operator coroutine_handle<>() const noexcept {\r\n        return coroutine_handle<>::from_address(_Ptr);\r\n    }\r\n\r\n    constexpr explicit operator bool() const noexcept {\r\n        return _Ptr != nullptr;\r\n    }\r\n\r\n    _NODISCARD bool done() const noexcept { // strengthened\r\n        return __builtin_coro_done(_Ptr);\r\n    }\r\n\r\n    void operator()() const {\r\n        __builtin_coro_resume(_Ptr);\r\n    }\r\n\r\n    void resume() const {\r\n        __builtin_coro_resume(_Ptr);\r\n    }\r\n\r\n    void destroy() const noexcept { // strengthened\r\n        __builtin_coro_destroy(_Ptr);\r\n    }\r\n\r\n    _NODISCARD _CoroPromise& promise() const noexcept { // strengthened\r\n        return *reinterpret_cast<_CoroPromise*>(__builtin_coro_promise(_Ptr, 0, false));\r\n    }\r\n\r\nprivate:\r\n    void* _Ptr = nullptr;\r\n};\r\n\r\n_EXPORT_STD _NODISCARD constexpr bool operator==(\r\n    const coroutine_handle<> _Left, const coroutine_handle<> _Right) noexcept {\r\n    return _Left.address() == _Right.address();\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD _NODISCARD constexpr strong_ordering operator<=>(\r\n    const coroutine_handle<> _Left, const coroutine_handle<> _Right) noexcept {\r\n    return compare_three_way{}(_Left.address(), _Right.address());\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n_NODISCARD constexpr bool operator!=(const coroutine_handle<> _Left, const coroutine_handle<> _Right) noexcept {\r\n    return !(_Left == _Right);\r\n}\r\n\r\n_NODISCARD constexpr bool operator<(const coroutine_handle<> _Left, const coroutine_handle<> _Right) noexcept {\r\n    return less<void*>{}(_Left.address(), _Right.address());\r\n}\r\n\r\n_NODISCARD constexpr bool operator>(const coroutine_handle<> _Left, const coroutine_handle<> _Right) noexcept {\r\n    return _Right < _Left;\r\n}\r\n\r\n_NODISCARD constexpr bool operator<=(const coroutine_handle<> _Left, const coroutine_handle<> _Right) noexcept {\r\n    return !(_Left > _Right);\r\n}\r\n\r\n_NODISCARD constexpr bool operator>=(const coroutine_handle<> _Left, const coroutine_handle<> _Right) noexcept {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\ntemplate <class _CoroPromise>\r\nstruct hash<coroutine_handle<_CoroPromise>> {\r\n    _NODISCARD static size_t operator()(const coroutine_handle<_CoroPromise>& _Coro) noexcept {\r\n        return _Hash_representation(_Coro.address());\r\n    }\r\n};\r\n\r\n_EXPORT_STD struct noop_coroutine_promise {};\r\n\r\ntemplate <>\r\nstruct coroutine_handle<noop_coroutine_promise> {\r\n    friend coroutine_handle noop_coroutine() noexcept;\r\n\r\n    constexpr operator coroutine_handle<>() const noexcept {\r\n        return coroutine_handle<>::from_address(_Ptr);\r\n    }\r\n\r\n    constexpr explicit operator bool() const noexcept {\r\n        return true;\r\n    }\r\n    _NODISCARD constexpr bool done() const noexcept {\r\n        return false;\r\n    }\r\n\r\n    constexpr void operator()() const noexcept {}\r\n    constexpr void resume() const noexcept {}\r\n    constexpr void destroy() const noexcept {}\r\n\r\n    _NODISCARD noop_coroutine_promise& promise() const noexcept {\r\n        // Returns a reference to the associated promise\r\n        return *static_cast<noop_coroutine_promise*>(__builtin_coro_promise(_Ptr, 0, false));\r\n    }\r\n\r\n    _NODISCARD constexpr void* address() const noexcept {\r\n        return _Ptr;\r\n    }\r\n\r\nprivate:\r\n    coroutine_handle() noexcept = default;\r\n\r\n    void* _Ptr = __builtin_coro_noop();\r\n};\r\n\r\n_EXPORT_STD using noop_coroutine_handle = coroutine_handle<noop_coroutine_promise>;\r\n\r\n_EXPORT_STD _NODISCARD inline noop_coroutine_handle noop_coroutine() noexcept {\r\n    // Returns a handle to a coroutine that has no observable effects when resumed or destroyed.\r\n    return noop_coroutine_handle{};\r\n}\r\n\r\n_EXPORT_STD struct suspend_never {\r\n    _NODISCARD constexpr bool await_ready() const noexcept {\r\n        return true;\r\n    }\r\n\r\n    constexpr void await_suspend(coroutine_handle<>) const noexcept {}\r\n    constexpr void await_resume() const noexcept {}\r\n};\r\n\r\n_EXPORT_STD struct suspend_always {\r\n    _NODISCARD constexpr bool await_ready() const noexcept {\r\n        return false;\r\n    }\r\n\r\n    constexpr void await_suspend(coroutine_handle<>) const noexcept {}\r\n    constexpr void await_resume() const noexcept {}\r\n};\r\n\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // ^^^ <coroutine> is available ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _COROUTINE_\r\n"
  },
  {
    "path": "stl/inc/csetjmp",
    "content": "// csetjmp standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CSETJMP_\r\n#define _CSETJMP_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <setjmp.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD using ::jmp_buf;\r\n_EXPORT_STD using ::longjmp;\r\nusing ::setjmp;\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CSETJMP_\r\n"
  },
  {
    "path": "stl/inc/csignal",
    "content": "// csignal standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CSIGNAL_\r\n#define _CSIGNAL_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <signal.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD using _CSTD sig_atomic_t;\r\n_EXPORT_STD using _CSTD raise;\r\n#ifndef _M_CEE_PURE\r\n_EXPORT_STD using _CSTD signal;\r\n#endif // !defined(_M_CEE_PURE)\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CSIGNAL_\r\n"
  },
  {
    "path": "stl/inc/cstdalign",
    "content": "// cstdalign standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CSTDALIGN_\r\n#define _CSTDALIGN_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n#define __alignas_is_defined 1\r\n#define __alignof_is_defined 1\r\n\r\nusing _Header_cstdalign _CXX17_DEPRECATE_C_HEADER = int;\r\nusing _Hdr_cstdalign                              = _Header_cstdalign;\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CSTDALIGN_\r\n"
  },
  {
    "path": "stl/inc/cstdarg",
    "content": "// cstdarg standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CSTDARG_\r\n#define _CSTDARG_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <stdarg.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD using ::va_list;\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CSTDARG_\r\n"
  },
  {
    "path": "stl/inc/cstdbool",
    "content": "// cstdbool standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CSTDBOOL_\r\n#define _CSTDBOOL_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <stdbool.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\nusing _Header_cstdbool _CXX17_DEPRECATE_C_HEADER = int;\r\nusing _Hdr_cstdbool                              = _Header_cstdbool;\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CSTDBOOL_\r\n"
  },
  {
    "path": "stl/inc/cstddef",
    "content": "// cstddef standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CSTDDEF_\r\n#define _CSTDDEF_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <stddef.h>\r\n#include <xtr1common>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"intrinsic\")\r\n#undef msvc\r\n#undef intrinsic\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD using _CSTD ptrdiff_t;\r\n_EXPORT_STD using _CSTD size_t;\r\n_EXPORT_STD using max_align_t = double; // most aligned type\r\n_EXPORT_STD using nullptr_t   = decltype(nullptr);\r\n\r\n#ifdef __cpp_lib_byte\r\n_EXPORT_STD enum class byte : unsigned char {};\r\n\r\n_EXPORT_STD template <class _IntType, enable_if_t<is_integral_v<_IntType>, int> = 0>\r\n_NODISCARD constexpr byte operator<<(const byte _Arg, const _IntType _Shift) noexcept {\r\n    // every static_cast is intentional\r\n    return static_cast<byte>(static_cast<unsigned char>(static_cast<unsigned int>(_Arg) << _Shift));\r\n}\r\n\r\n_EXPORT_STD template <class _IntType, enable_if_t<is_integral_v<_IntType>, int> = 0>\r\n_NODISCARD constexpr byte operator>>(const byte _Arg, const _IntType _Shift) noexcept {\r\n    // every static_cast is intentional\r\n    return static_cast<byte>(static_cast<unsigned char>(static_cast<unsigned int>(_Arg) >> _Shift));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD constexpr byte operator|(const byte _Left, const byte _Right) noexcept {\r\n    // every static_cast is intentional\r\n    return static_cast<byte>(\r\n        static_cast<unsigned char>(static_cast<unsigned int>(_Left) | static_cast<unsigned int>(_Right)));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD constexpr byte operator&(const byte _Left, const byte _Right) noexcept {\r\n    // every static_cast is intentional\r\n    return static_cast<byte>(\r\n        static_cast<unsigned char>(static_cast<unsigned int>(_Left) & static_cast<unsigned int>(_Right)));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD constexpr byte operator^(const byte _Left, const byte _Right) noexcept {\r\n    // every static_cast is intentional\r\n    return static_cast<byte>(\r\n        static_cast<unsigned char>(static_cast<unsigned int>(_Left) ^ static_cast<unsigned int>(_Right)));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD constexpr byte operator~(const byte _Arg) noexcept {\r\n    // every static_cast is intentional\r\n    return static_cast<byte>(static_cast<unsigned char>(~static_cast<unsigned int>(_Arg)));\r\n}\r\n\r\n_EXPORT_STD template <class _IntType, enable_if_t<is_integral_v<_IntType>, int> = 0>\r\nconstexpr byte& operator<<=(byte& _Arg, const _IntType _Shift) noexcept {\r\n    return _Arg = _Arg << _Shift;\r\n}\r\n\r\n_EXPORT_STD template <class _IntType, enable_if_t<is_integral_v<_IntType>, int> = 0>\r\nconstexpr byte& operator>>=(byte& _Arg, const _IntType _Shift) noexcept {\r\n    return _Arg = _Arg >> _Shift;\r\n}\r\n\r\n_EXPORT_STD constexpr byte& operator|=(byte& _Left, const byte _Right) noexcept {\r\n    return _Left = _Left | _Right;\r\n}\r\n\r\n_EXPORT_STD constexpr byte& operator&=(byte& _Left, const byte _Right) noexcept {\r\n    return _Left = _Left & _Right;\r\n}\r\n\r\n_EXPORT_STD constexpr byte& operator^=(byte& _Left, const byte _Right) noexcept {\r\n    return _Left = _Left ^ _Right;\r\n}\r\n\r\n_EXPORT_STD template <class _IntType, enable_if_t<is_integral_v<_IntType>, int> = 0>\r\n_NODISCARD _MSVC_INTRINSIC constexpr _IntType to_integer(const byte _Arg) noexcept {\r\n    return static_cast<_IntType>(_Arg);\r\n}\r\n#endif // defined(__cpp_lib_byte)\r\n\r\n_STD_END\r\n\r\n_EXTERN_CXX_WORKAROUND\r\nusing _STD max_align_t; // intentional, for historical reasons\r\n_END_EXTERN_CXX_WORKAROUND\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"intrinsic\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CSTDDEF_\r\n"
  },
  {
    "path": "stl/inc/cstdint",
    "content": "// cstdint standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CSTDINT_\r\n#define _CSTDINT_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <stdint.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD using _CSTD int8_t;\r\n_EXPORT_STD using _CSTD int16_t;\r\n_EXPORT_STD using _CSTD int32_t;\r\n_EXPORT_STD using _CSTD int64_t;\r\n_EXPORT_STD using _CSTD uint8_t;\r\n_EXPORT_STD using _CSTD uint16_t;\r\n_EXPORT_STD using _CSTD uint32_t;\r\n_EXPORT_STD using _CSTD uint64_t;\r\n\r\n_EXPORT_STD using _CSTD int_least8_t;\r\n_EXPORT_STD using _CSTD int_least16_t;\r\n_EXPORT_STD using _CSTD int_least32_t;\r\n_EXPORT_STD using _CSTD int_least64_t;\r\n_EXPORT_STD using _CSTD uint_least8_t;\r\n_EXPORT_STD using _CSTD uint_least16_t;\r\n_EXPORT_STD using _CSTD uint_least32_t;\r\n_EXPORT_STD using _CSTD uint_least64_t;\r\n\r\n_EXPORT_STD using _CSTD int_fast8_t;\r\n_EXPORT_STD using _CSTD int_fast16_t;\r\n_EXPORT_STD using _CSTD int_fast32_t;\r\n_EXPORT_STD using _CSTD int_fast64_t;\r\n_EXPORT_STD using _CSTD uint_fast8_t;\r\n_EXPORT_STD using _CSTD uint_fast16_t;\r\n_EXPORT_STD using _CSTD uint_fast32_t;\r\n_EXPORT_STD using _CSTD uint_fast64_t;\r\n\r\n_EXPORT_STD using _CSTD intmax_t;\r\n_EXPORT_STD using _CSTD intptr_t;\r\n_EXPORT_STD using _CSTD uintmax_t;\r\n_EXPORT_STD using _CSTD uintptr_t;\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CSTDINT_\r\n"
  },
  {
    "path": "stl/inc/cstdio",
    "content": "// cstdio standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CSTDIO_\r\n#define _CSTDIO_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <stdio.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// undef common macro overrides\r\n#undef clearerr\r\n#undef feof\r\n#undef ferror\r\n#undef getc\r\n#undef getchar\r\n#undef putc\r\n#undef putchar\r\n\r\n_STD_BEGIN\r\n#pragma warning(push)\r\n#pragma warning(disable : 4995) // name was marked as #pragma deprecated\r\n\r\nusing _CSTD _Mbstatet;\r\n\r\n_EXPORT_STD using _CSTD size_t;\r\n_EXPORT_STD using _CSTD fpos_t;\r\n_EXPORT_STD using _CSTD FILE;\r\n_EXPORT_STD using _CSTD clearerr;\r\n_EXPORT_STD using _CSTD fclose;\r\n_EXPORT_STD using _CSTD feof;\r\n_EXPORT_STD using _CSTD ferror;\r\n_EXPORT_STD using _CSTD fflush;\r\n_EXPORT_STD using _CSTD fgetc;\r\n_EXPORT_STD using _CSTD fgetpos;\r\n_EXPORT_STD using _CSTD fgets;\r\n_EXPORT_STD using _CSTD fopen;\r\n_EXPORT_STD using _CSTD fprintf;\r\n_EXPORT_STD using _CSTD fputc;\r\n_EXPORT_STD using _CSTD fputs;\r\n_EXPORT_STD using _CSTD fread;\r\n_EXPORT_STD using _CSTD freopen;\r\n_EXPORT_STD using _CSTD fscanf;\r\n_EXPORT_STD using _CSTD fseek;\r\n_EXPORT_STD using _CSTD fsetpos;\r\n_EXPORT_STD using _CSTD ftell;\r\n_EXPORT_STD using _CSTD fwrite;\r\n_EXPORT_STD using _CSTD getc;\r\n_EXPORT_STD using _CSTD getchar;\r\n_EXPORT_STD using _CSTD perror;\r\n_EXPORT_STD using _CSTD putc;\r\n_EXPORT_STD using _CSTD putchar;\r\n_EXPORT_STD using _CSTD printf;\r\n_EXPORT_STD using _CSTD puts;\r\n_EXPORT_STD using _CSTD remove;\r\n_EXPORT_STD using _CSTD rename;\r\n_EXPORT_STD using _CSTD rewind;\r\n_EXPORT_STD using _CSTD scanf;\r\n_EXPORT_STD using _CSTD setbuf;\r\n_EXPORT_STD using _CSTD setvbuf;\r\n_EXPORT_STD using _CSTD sprintf;\r\n_EXPORT_STD using _CSTD sscanf;\r\n_EXPORT_STD using _CSTD tmpfile;\r\n_EXPORT_STD using _CSTD tmpnam;\r\n_EXPORT_STD using _CSTD ungetc;\r\n_EXPORT_STD using _CSTD vfprintf;\r\n_EXPORT_STD using _CSTD vprintf;\r\n_EXPORT_STD using _CSTD vsprintf;\r\n\r\n_EXPORT_STD using _CSTD snprintf;\r\n_EXPORT_STD using _CSTD vsnprintf;\r\n_EXPORT_STD using _CSTD vfscanf;\r\n_EXPORT_STD using _CSTD vscanf;\r\n_EXPORT_STD using _CSTD vsscanf;\r\n\r\n#pragma warning(pop)\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CSTDIO_\r\n"
  },
  {
    "path": "stl/inc/cstdlib",
    "content": "// cstdlib standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CSTDLIB_\r\n#define _CSTDLIB_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <math.h>\r\n#include <stdlib.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_EXTERN_CXX_WORKAROUND\r\n// <stdlib.h> has abs(long) and abs(long long)\r\n_NODISCARD _Check_return_ inline double abs(_In_ double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD fabs(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline float abs(_In_ float _Xx) noexcept /* strengthened */ {\r\n    return _CSTD fabsf(_Xx);\r\n}\r\n\r\n_NODISCARD _Check_return_ inline long double abs(_In_ long double _Xx) noexcept /* strengthened */ {\r\n    return _CSTD fabsl(_Xx);\r\n}\r\n_END_EXTERN_CXX_WORKAROUND\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD using _CSTD size_t;\r\n_EXPORT_STD using _CSTD div_t;\r\n_EXPORT_STD using _CSTD ldiv_t;\r\n_EXPORT_STD using _CSTD abort;\r\n_EXPORT_STD using _CSTD abs;\r\n_EXPORT_STD using _CSTD atexit;\r\n_EXPORT_STD using _CSTD atof;\r\n_EXPORT_STD using _CSTD atoi;\r\n_EXPORT_STD using _CSTD atol;\r\n_EXPORT_STD using _CSTD bsearch;\r\n_EXPORT_STD using _CSTD calloc;\r\n_EXPORT_STD using _CSTD div;\r\n_EXPORT_STD using _CSTD exit;\r\n_EXPORT_STD using _CSTD free;\r\n_EXPORT_STD using _CSTD labs;\r\n_EXPORT_STD using _CSTD ldiv;\r\n_EXPORT_STD using _CSTD malloc;\r\n_EXPORT_STD using _CSTD mblen;\r\n_EXPORT_STD using _CSTD mbstowcs;\r\n_EXPORT_STD using _CSTD mbtowc;\r\n_EXPORT_STD using _CSTD qsort;\r\n_EXPORT_STD using _CSTD rand;\r\n_EXPORT_STD using _CSTD realloc;\r\n_EXPORT_STD using _CSTD srand;\r\n_EXPORT_STD using _CSTD strtod;\r\n_EXPORT_STD using _CSTD strtol;\r\n_EXPORT_STD using _CSTD strtoul;\r\n_EXPORT_STD using _CSTD wcstombs;\r\n_EXPORT_STD using _CSTD wctomb;\r\n\r\n_EXPORT_STD using _CSTD lldiv_t;\r\n\r\n_EXPORT_STD using _CSTD getenv;\r\n_EXPORT_STD using _CSTD system;\r\n\r\n_EXPORT_STD using _CSTD atoll;\r\n_EXPORT_STD using _CSTD llabs;\r\n_EXPORT_STD using _CSTD lldiv;\r\n_EXPORT_STD using _CSTD strtof;\r\n_EXPORT_STD using _CSTD strtold;\r\n_EXPORT_STD using _CSTD strtoll;\r\n_EXPORT_STD using _CSTD strtoull;\r\n\r\n_EXPORT_STD using _CSTD _Exit;\r\n_EXPORT_STD using _CSTD at_quick_exit;\r\n_EXPORT_STD using _CSTD quick_exit;\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CSTDLIB_\r\n"
  },
  {
    "path": "stl/inc/cstring",
    "content": "// cstring standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CSTRING_\r\n#define _CSTRING_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <string.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n#pragma warning(push)\r\n#pragma warning(disable : 4995) // name was marked as #pragma deprecated\r\n\r\n_EXPORT_STD using _CSTD size_t;\r\n_EXPORT_STD using _CSTD memchr;\r\n_EXPORT_STD using _CSTD memcmp;\r\n_EXPORT_STD using _CSTD memcpy;\r\n_EXPORT_STD using _CSTD memmove;\r\n_EXPORT_STD using _CSTD memset;\r\n_EXPORT_STD using _CSTD strcat;\r\n_EXPORT_STD using _CSTD strchr;\r\n_EXPORT_STD using _CSTD strcmp;\r\n_EXPORT_STD using _CSTD strcoll;\r\n_EXPORT_STD using _CSTD strcpy;\r\n_EXPORT_STD using _CSTD strcspn;\r\n_EXPORT_STD using _CSTD strerror;\r\n_EXPORT_STD using _CSTD strlen;\r\n_EXPORT_STD using _CSTD strncat;\r\n_EXPORT_STD using _CSTD strncmp;\r\n_EXPORT_STD using _CSTD strncpy;\r\n_EXPORT_STD using _CSTD strpbrk;\r\n_EXPORT_STD using _CSTD strrchr;\r\n_EXPORT_STD using _CSTD strspn;\r\n_EXPORT_STD using _CSTD strstr;\r\n_EXPORT_STD using _CSTD strtok;\r\n_EXPORT_STD using _CSTD strxfrm;\r\n\r\n#pragma warning(pop)\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CSTRING_\r\n"
  },
  {
    "path": "stl/inc/ctgmath",
    "content": "// ctgmath standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CTGMATH_\r\n#define _CTGMATH_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <cmath>\r\n#include <complex>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\nusing _Header_ctgmath _CXX17_DEPRECATE_C_HEADER = int;\r\nusing _Hdr_ctgmath                              = _Header_ctgmath;\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CTGMATH_\r\n"
  },
  {
    "path": "stl/inc/ctime",
    "content": "// ctime standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CTIME_\r\n#define _CTIME_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <time.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD using _CSTD clock_t;\r\n_EXPORT_STD using _CSTD size_t;\r\n_EXPORT_STD using _CSTD time_t;\r\n_EXPORT_STD using _CSTD tm;\r\n_EXPORT_STD using _CSTD asctime;\r\n_EXPORT_STD using _CSTD clock;\r\n_EXPORT_STD using _CSTD strftime;\r\n#if _HAS_CXX17\r\n_EXPORT_STD using _CSTD timespec;\r\n#endif // _HAS_CXX17\r\n\r\n// `_STATIC_INLINE_UCRT_FUNCTIONS` is exposed by the UCRT starting with Windows SDK 10.0.26100.6901.\r\n// When set to `1`, several UCRT functions are declared as `static inline` (for historical compatibility),\r\n// preventing them from being directly exported by modules. In that case (and when an older UCRT doesn't define\r\n// the macro), we use templates to shadow their names, allowing us to export the templates as an approximation.\r\n#if defined(_BUILD_STD_MODULE) && (!defined(_STATIC_INLINE_UCRT_FUNCTIONS) || _STATIC_INLINE_UCRT_FUNCTIONS == 1)\r\n_STL_DISABLE_DEPRECATED_WARNING\r\n\r\n_EXPORT_STD template <int = 0>\r\n_Check_return_ _CRT_INSECURE_DEPRECATE(ctime_s)\r\nchar* __CRTDECL ctime(_In_ const time_t* const _Time) noexcept /* strengthened */ {\r\n    return _CSTD _ctime64(_Time);\r\n}\r\n\r\n_EXPORT_STD template <int = 0>\r\n_Check_return_ double __CRTDECL difftime(_In_ const time_t _Time1, _In_ const time_t _Time2) noexcept\r\n/* strengthened */ {\r\n    return _CSTD _difftime64(_Time1, _Time2);\r\n}\r\n\r\n_EXPORT_STD template <int = 0>\r\n_Check_return_ _CRT_INSECURE_DEPRECATE(gmtime_s)\r\ntm* __CRTDECL gmtime(_In_ const time_t* const _Time) noexcept /* strengthened */ {\r\n    return _CSTD _gmtime64(_Time);\r\n}\r\n\r\n_EXPORT_STD template <int = 0>\r\n_CRT_INSECURE_DEPRECATE(localtime_s)\r\ntm* __CRTDECL localtime(_In_ const time_t* const _Time) noexcept /* strengthened */ {\r\n    return _CSTD _localtime64(_Time);\r\n}\r\n\r\n_EXPORT_STD template <int = 0>\r\n_Check_return_opt_ time_t __CRTDECL mktime(_Inout_ tm* const _Tm) noexcept /* strengthened */ {\r\n    return _CSTD _mktime64(_Tm);\r\n}\r\n\r\n_EXPORT_STD template <int = 0>\r\ntime_t __CRTDECL time(_Out_opt_ time_t* const _Time) noexcept /* strengthened */ {\r\n    return _CSTD _time64(_Time);\r\n}\r\n\r\n_EXPORT_STD template <int = 0>\r\n_Check_return_ int __CRTDECL timespec_get(_Out_ timespec* const _Ts, _In_ const int _Base) noexcept /* strengthened */ {\r\n    return _CSTD _timespec64_get(reinterpret_cast<_timespec64*>(_Ts), _Base);\r\n}\r\n\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n#else // ^^^ workaround / no workaround vvv\r\n\r\n_EXPORT_STD using _CSTD ctime;\r\n_EXPORT_STD using _CSTD difftime;\r\n_EXPORT_STD using _CSTD gmtime;\r\n_EXPORT_STD using _CSTD localtime;\r\n_EXPORT_STD using _CSTD mktime;\r\n_EXPORT_STD using _CSTD time;\r\n#if _HAS_CXX17\r\n_EXPORT_STD using _CSTD timespec_get;\r\n#endif // _HAS_CXX17\r\n\r\n#endif // ^^^ no workaround ^^^\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CTIME_\r\n"
  },
  {
    "path": "stl/inc/cuchar",
    "content": "// cuchar standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CUCHAR_\r\n#define _CUCHAR_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <uchar.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD using _CSTD mbstate_t;\r\n_EXPORT_STD using _CSTD size_t;\r\n_EXPORT_STD using _CSTD mbrtoc16;\r\n_EXPORT_STD using _CSTD c16rtomb;\r\n_EXPORT_STD using _CSTD mbrtoc32;\r\n_EXPORT_STD using _CSTD c32rtomb;\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CUCHAR_\r\n"
  },
  {
    "path": "stl/inc/cwchar",
    "content": "// cwchar standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CWCHAR_\r\n#define _CWCHAR_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <cstdio> // TRANSITION, VSO-661721\r\n#include <wchar.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_EXTERN_CXX_WORKAROUND\r\nusing _Mbstatet = mbstate_t;\r\n_END_EXTERN_CXX_WORKAROUND\r\n\r\n_STD_BEGIN\r\n#pragma warning(push)\r\n#pragma warning(disable : 4995) // name was marked as #pragma deprecated\r\n\r\nusing _CSTD _Mbstatet;\r\n\r\n_EXPORT_STD using _CSTD mbstate_t;\r\n_EXPORT_STD using _CSTD size_t;\r\n_EXPORT_STD using _CSTD tm;\r\n_EXPORT_STD using _CSTD wint_t;\r\n\r\n_EXPORT_STD using _CSTD btowc;\r\n_EXPORT_STD using _CSTD fgetwc;\r\n_EXPORT_STD using _CSTD fgetws;\r\n_EXPORT_STD using _CSTD fputwc;\r\n_EXPORT_STD using _CSTD fputws;\r\n_EXPORT_STD using _CSTD fwide;\r\n_EXPORT_STD using _CSTD fwprintf;\r\n_EXPORT_STD using _CSTD fwscanf;\r\n_EXPORT_STD using _CSTD getwc;\r\n_EXPORT_STD using _CSTD getwchar;\r\n_EXPORT_STD using _CSTD mbrlen;\r\n_EXPORT_STD using _CSTD mbrtowc;\r\n_EXPORT_STD using _CSTD mbsrtowcs;\r\n_EXPORT_STD using _CSTD mbsinit;\r\n_EXPORT_STD using _CSTD putwc;\r\n_EXPORT_STD using _CSTD putwchar;\r\n_EXPORT_STD using _CSTD swprintf;\r\n_EXPORT_STD using _CSTD swscanf;\r\n_EXPORT_STD using _CSTD ungetwc;\r\n_EXPORT_STD using _CSTD vfwprintf;\r\n_EXPORT_STD using _CSTD vswprintf;\r\n_EXPORT_STD using _CSTD vwprintf;\r\n_EXPORT_STD using _CSTD wcrtomb;\r\n_EXPORT_STD using _CSTD wprintf;\r\n_EXPORT_STD using _CSTD wscanf;\r\n_EXPORT_STD using _CSTD wcsrtombs;\r\n_EXPORT_STD using _CSTD wcstol;\r\n_EXPORT_STD using _CSTD wcscat;\r\n_EXPORT_STD using _CSTD wcschr;\r\n_EXPORT_STD using _CSTD wcscmp;\r\n_EXPORT_STD using _CSTD wcscoll;\r\n_EXPORT_STD using _CSTD wcscpy;\r\n_EXPORT_STD using _CSTD wcscspn;\r\n_EXPORT_STD using _CSTD wcslen;\r\n_EXPORT_STD using _CSTD wcsncat;\r\n_EXPORT_STD using _CSTD wcsncmp;\r\n_EXPORT_STD using _CSTD wcsncpy;\r\n_EXPORT_STD using _CSTD wcspbrk;\r\n_EXPORT_STD using _CSTD wcsrchr;\r\n_EXPORT_STD using _CSTD wcsspn;\r\n_EXPORT_STD using _CSTD wcstod;\r\n_EXPORT_STD using _CSTD wcstoul;\r\n_EXPORT_STD using _CSTD wcsstr;\r\n_EXPORT_STD using _CSTD wcstok;\r\n_EXPORT_STD using _CSTD wcsxfrm;\r\n_EXPORT_STD using _CSTD wctob;\r\n_EXPORT_STD using _CSTD wmemchr;\r\n_EXPORT_STD using _CSTD wmemcmp;\r\n_EXPORT_STD using _CSTD wmemcpy;\r\n_EXPORT_STD using _CSTD wmemmove;\r\n_EXPORT_STD using _CSTD wmemset;\r\n_EXPORT_STD using _CSTD wcsftime;\r\n\r\n_EXPORT_STD using _CSTD vfwscanf;\r\n_EXPORT_STD using _CSTD vswscanf;\r\n_EXPORT_STD using _CSTD vwscanf;\r\n_EXPORT_STD using _CSTD wcstof;\r\n_EXPORT_STD using _CSTD wcstold;\r\n_EXPORT_STD using _CSTD wcstoll;\r\n_EXPORT_STD using _CSTD wcstoull;\r\n\r\n#pragma warning(pop)\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CWCHAR_\r\n"
  },
  {
    "path": "stl/inc/cwctype",
    "content": "// cwctype standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _CWCTYPE_\r\n#define _CWCTYPE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <wctype.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, /clr:pure (see corecrt_wctype.h): remove any (improper) macro overrides\r\n#undef iswalnum\r\n#undef iswalpha\r\n#undef iswblank\r\n#undef iswcntrl\r\n#undef iswctype\r\n#undef iswdigit\r\n#undef iswgraph\r\n#undef iswlower\r\n#undef iswprint\r\n#undef iswpunct\r\n#undef iswspace\r\n#undef iswupper\r\n#undef iswxdigit\r\n#undef towctrans\r\n#undef towlower\r\n#undef towupper\r\n#undef wctrans\r\n#undef wctype\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD using _CSTD wint_t;\r\n_EXPORT_STD using _CSTD wctrans_t;\r\n_EXPORT_STD using _CSTD wctype_t;\r\n\r\n_EXPORT_STD using _CSTD iswalnum;\r\n_EXPORT_STD using _CSTD iswalpha;\r\n_EXPORT_STD using _CSTD iswcntrl;\r\n_EXPORT_STD using _CSTD iswctype;\r\n_EXPORT_STD using _CSTD iswdigit;\r\n_EXPORT_STD using _CSTD iswgraph;\r\n_EXPORT_STD using _CSTD iswlower;\r\n_EXPORT_STD using _CSTD iswprint;\r\n_EXPORT_STD using _CSTD iswpunct;\r\n_EXPORT_STD using _CSTD iswspace;\r\n_EXPORT_STD using _CSTD iswupper;\r\n_EXPORT_STD using _CSTD iswxdigit;\r\n_EXPORT_STD using _CSTD towctrans;\r\n_EXPORT_STD using _CSTD towlower;\r\n_EXPORT_STD using _CSTD towupper;\r\n_EXPORT_STD using _CSTD wctrans;\r\n_EXPORT_STD using _CSTD wctype;\r\n\r\n_EXPORT_STD using _CSTD iswblank;\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _CWCTYPE_\r\n"
  },
  {
    "path": "stl/inc/deque",
    "content": "// deque standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _DEQUE_\r\n#define _DEQUE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <xmemory>\r\n\r\n#if _HAS_CXX17\r\n#include <xpolymorphic_allocator.h>\r\n#endif // _HAS_CXX17\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _Mydeque>\r\nclass _Deque_unchecked_const_iterator {\r\nprivate:\r\n    using _Size_type = typename _Mydeque::size_type;\r\n\r\n    static constexpr int _Block_size = _Mydeque::_Block_size;\r\n\r\npublic:\r\n    using iterator_category = random_access_iterator_tag;\r\n\r\n    using value_type      = typename _Mydeque::value_type;\r\n    using difference_type = typename _Mydeque::difference_type;\r\n    using pointer         = typename _Mydeque::const_pointer;\r\n    using reference       = const value_type&;\r\n\r\n    _Deque_unchecked_const_iterator() noexcept : _Mycont(), _Myoff(0) {}\r\n\r\n    _Deque_unchecked_const_iterator(_Size_type _Off, const _Container_base12* _Pdeque) noexcept\r\n        : _Mycont(static_cast<const _Mydeque*>(_Pdeque)), _Myoff(_Off) {}\r\n\r\n    _NODISCARD reference operator*() const noexcept {\r\n        return _Mycont->_Subscript(_Myoff);\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _Deque_unchecked_const_iterator& operator++() noexcept {\r\n        ++_Myoff;\r\n        return *this;\r\n    }\r\n\r\n    _Deque_unchecked_const_iterator operator++(int) noexcept {\r\n        _Deque_unchecked_const_iterator _Tmp = *this;\r\n        ++_Myoff;\r\n        return _Tmp;\r\n    }\r\n\r\n    _Deque_unchecked_const_iterator& operator--() noexcept {\r\n        --_Myoff;\r\n        return *this;\r\n    }\r\n\r\n    _Deque_unchecked_const_iterator operator--(int) noexcept {\r\n        _Deque_unchecked_const_iterator _Tmp = *this;\r\n        --_Myoff;\r\n        return _Tmp;\r\n    }\r\n\r\n    _Deque_unchecked_const_iterator& operator+=(const difference_type _Off) noexcept {\r\n        _Myoff = static_cast<_Size_type>(_Myoff + _Off);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _Deque_unchecked_const_iterator operator+(const difference_type _Off) const noexcept {\r\n        _Deque_unchecked_const_iterator _Tmp = *this;\r\n        _Tmp += _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD friend _Deque_unchecked_const_iterator operator+(\r\n        const difference_type _Off, _Deque_unchecked_const_iterator _Next) noexcept {\r\n        _Next += _Off;\r\n        return _Next;\r\n    }\r\n\r\n    _Deque_unchecked_const_iterator& operator-=(const difference_type _Off) noexcept {\r\n        _Myoff = static_cast<_Size_type>(_Myoff - _Off);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _Deque_unchecked_const_iterator operator-(const difference_type _Off) const noexcept {\r\n        _Deque_unchecked_const_iterator _Tmp = *this;\r\n        _Tmp -= _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD difference_type operator-(const _Deque_unchecked_const_iterator& _Right) const noexcept {\r\n        return static_cast<difference_type>(_Myoff - _Right._Myoff);\r\n    }\r\n\r\n    _NODISCARD reference operator[](const difference_type _Off) const noexcept {\r\n        return *(*this + _Off);\r\n    }\r\n\r\n    _NODISCARD bool operator==(const _Deque_unchecked_const_iterator& _Right) const noexcept {\r\n        return _Myoff == _Right._Myoff;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD strong_ordering operator<=>(const _Deque_unchecked_const_iterator& _Right) const noexcept {\r\n        return _Myoff <=> _Right._Myoff;\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD bool operator!=(const _Deque_unchecked_const_iterator& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n\r\n    _NODISCARD bool operator<(const _Deque_unchecked_const_iterator& _Right) const noexcept {\r\n        return _Myoff < _Right._Myoff;\r\n    }\r\n\r\n    _NODISCARD bool operator>(const _Deque_unchecked_const_iterator& _Right) const noexcept {\r\n        return _Right < *this;\r\n    }\r\n\r\n    _NODISCARD bool operator<=(const _Deque_unchecked_const_iterator& _Right) const noexcept {\r\n        return !(_Right < *this);\r\n    }\r\n\r\n    _NODISCARD bool operator>=(const _Deque_unchecked_const_iterator& _Right) const noexcept {\r\n        return !(*this < _Right);\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    const _Container_base12* _Getcont() const noexcept { // get container pointer\r\n        return _Mycont;\r\n    }\r\n\r\n    const _Mydeque* _Mycont;\r\n    _Size_type _Myoff; // offset of element in deque\r\n};\r\n\r\ntemplate <class _Mydeque>\r\nclass _Deque_unchecked_iterator : public _Deque_unchecked_const_iterator<_Mydeque> {\r\nprivate:\r\n    using _Size_type = typename _Mydeque::size_type;\r\n    using _Mybase    = _Deque_unchecked_const_iterator<_Mydeque>;\r\n\r\npublic:\r\n    using iterator_category = random_access_iterator_tag;\r\n\r\n    using value_type      = typename _Mydeque::value_type;\r\n    using difference_type = typename _Mydeque::difference_type;\r\n    using pointer         = typename _Mydeque::pointer;\r\n    using reference       = value_type&;\r\n\r\n    using _Mybase::_Mybase;\r\n\r\n    _NODISCARD reference operator*() const noexcept {\r\n        return const_cast<reference>(_Mybase::operator*());\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _Deque_unchecked_iterator& operator++() noexcept {\r\n        _Mybase::operator++();\r\n        return *this;\r\n    }\r\n\r\n    _Deque_unchecked_iterator operator++(int) noexcept {\r\n        _Deque_unchecked_iterator _Tmp = *this;\r\n        _Mybase::operator++();\r\n        return _Tmp;\r\n    }\r\n\r\n    _Deque_unchecked_iterator& operator--() noexcept {\r\n        _Mybase::operator--();\r\n        return *this;\r\n    }\r\n\r\n    _Deque_unchecked_iterator operator--(int) noexcept {\r\n        _Deque_unchecked_iterator _Tmp = *this;\r\n        _Mybase::operator--();\r\n        return _Tmp;\r\n    }\r\n\r\n    _Deque_unchecked_iterator& operator+=(const difference_type _Off) noexcept {\r\n        _Mybase::operator+=(_Off);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _Deque_unchecked_iterator operator+(const difference_type _Off) const noexcept {\r\n        _Deque_unchecked_iterator _Tmp = *this;\r\n        _Tmp += _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD friend _Deque_unchecked_iterator operator+(\r\n        const difference_type _Off, _Deque_unchecked_iterator _Next) noexcept {\r\n        _Next += _Off;\r\n        return _Next;\r\n    }\r\n\r\n    _Deque_unchecked_iterator& operator-=(const difference_type _Off) noexcept {\r\n        _Mybase::operator-=(_Off);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _Deque_unchecked_iterator operator-(const difference_type _Off) const noexcept {\r\n        _Deque_unchecked_iterator _Tmp = *this;\r\n        _Tmp -= _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD difference_type operator-(const _Mybase& _Right) const noexcept {\r\n        return _Mybase::operator-(_Right);\r\n    }\r\n\r\n    _NODISCARD reference operator[](const difference_type _Off) const noexcept {\r\n        return const_cast<reference>(_Mybase::operator[](_Off));\r\n    }\r\n};\r\n\r\ntemplate <class _Mydeque>\r\nclass _Deque_const_iterator : public _Iterator_base12 {\r\nprivate:\r\n    using _Size_type = typename _Mydeque::size_type;\r\n\r\n    static constexpr int _Block_size = _Mydeque::_Block_size;\r\n\r\npublic:\r\n    using iterator_category = random_access_iterator_tag;\r\n\r\n    using value_type      = typename _Mydeque::value_type;\r\n    using difference_type = typename _Mydeque::difference_type;\r\n    using pointer         = typename _Mydeque::const_pointer;\r\n    using reference       = const value_type&;\r\n\r\n    using _Mydeque_t = _Mydeque; // helper for expression evaluator\r\n    enum { _EEN_DS = _Block_size }; // helper for expression evaluator\r\n    _Deque_const_iterator() noexcept : _Myoff(0) {\r\n        _Setcont(nullptr);\r\n    }\r\n\r\n    _Deque_const_iterator(_Size_type _Off, const _Container_base12* _Pdeque) noexcept : _Myoff(_Off) {\r\n        _Setcont(static_cast<const _Mydeque*>(_Pdeque));\r\n    }\r\n\r\n    _NODISCARD reference operator*() const noexcept {\r\n        const auto _Mycont = static_cast<const _Mydeque*>(this->_Getcont());\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mycont, \"cannot dereference value-initialized deque iterator\");\r\n        _STL_VERIFY(_Mycont->_Myoff <= this->_Myoff && this->_Myoff < _Mycont->_Myoff + _Mycont->_Mysize,\r\n            \"cannot deference out of range deque iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return _Mycont->_Subscript(_Myoff);\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _Deque_const_iterator& operator++() noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Mycont = static_cast<const _Mydeque*>(this->_Getcont());\r\n        _STL_VERIFY(_Mycont, \"cannot increment value-initialized deque iterator\");\r\n        _STL_VERIFY(this->_Myoff < _Mycont->_Myoff + _Mycont->_Mysize, \"cannot increment deque iterator past end\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        ++_Myoff;\r\n        return *this;\r\n    }\r\n\r\n    _Deque_const_iterator operator++(int) noexcept {\r\n        _Deque_const_iterator _Tmp = *this;\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _Deque_const_iterator& operator--() noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Mycont = static_cast<const _Mydeque*>(this->_Getcont());\r\n        _STL_VERIFY(_Mycont, \"cannot decrement value-initialized deque iterator\");\r\n        _STL_VERIFY(_Mycont->_Myoff < this->_Myoff, \"cannot decrement deque iterator before begin\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        --_Myoff;\r\n        return *this;\r\n    }\r\n\r\n    _Deque_const_iterator operator--(int) noexcept {\r\n        _Deque_const_iterator _Tmp = *this;\r\n        --*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _Deque_const_iterator& operator+=(const difference_type _Off) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        if (_Off != 0) {\r\n            const auto _Mycont = static_cast<const _Mydeque*>(this->_Getcont());\r\n            _STL_VERIFY(_Mycont, \"cannot seek value-initialized deque iterator\");\r\n            _STL_VERIFY(\r\n                _Mycont->_Myoff <= this->_Myoff + _Off && this->_Myoff + _Off <= _Mycont->_Myoff + _Mycont->_Mysize,\r\n                \"cannot seek deque iterator out of range\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        _Myoff = static_cast<_Size_type>(_Myoff + _Off);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _Deque_const_iterator operator+(const difference_type _Off) const noexcept {\r\n        _Deque_const_iterator _Tmp = *this;\r\n        _Tmp += _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD friend _Deque_const_iterator operator+(\r\n        const difference_type _Off, _Deque_const_iterator _Next) noexcept {\r\n        _Next += _Off;\r\n        return _Next;\r\n    }\r\n\r\n    _Deque_const_iterator& operator-=(const difference_type _Off) noexcept {\r\n        return *this += -_Off;\r\n    }\r\n\r\n    _NODISCARD _Deque_const_iterator operator-(const difference_type _Off) const noexcept {\r\n        _Deque_const_iterator _Tmp = *this;\r\n        _Tmp -= _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD difference_type operator-(const _Deque_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return static_cast<difference_type>(this->_Myoff - _Right._Myoff);\r\n    }\r\n\r\n    _NODISCARD reference operator[](const difference_type _Off) const noexcept {\r\n        return *(*this + _Off);\r\n    }\r\n\r\n    _NODISCARD bool operator==(const _Deque_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return this->_Myoff == _Right._Myoff;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD strong_ordering operator<=>(const _Deque_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return this->_Myoff <=> _Right._Myoff;\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD bool operator!=(const _Deque_const_iterator& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n\r\n    _NODISCARD bool operator<(const _Deque_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return this->_Myoff < _Right._Myoff;\r\n    }\r\n\r\n    _NODISCARD bool operator>(const _Deque_const_iterator& _Right) const noexcept {\r\n        return _Right < *this;\r\n    }\r\n\r\n    _NODISCARD bool operator<=(const _Deque_const_iterator& _Right) const noexcept {\r\n        return !(_Right < *this);\r\n    }\r\n\r\n    _NODISCARD bool operator>=(const _Deque_const_iterator& _Right) const noexcept {\r\n        return !(*this < _Right);\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    void _Compat(const _Deque_const_iterator& _Right) const noexcept { // test for compatible iterator pair\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\n        (void) _Right;\r\n#else\r\n        _STL_VERIFY(this->_Getcont() == _Right._Getcont(), \"deque iterators incompatible\");\r\n#endif\r\n    }\r\n\r\n    void _Setcont(const _Mydeque* _Pdeque) noexcept { // set container pointer\r\n        this->_Adopt(_Pdeque);\r\n    }\r\n\r\n    using _Prevent_inheriting_unwrap = _Deque_const_iterator;\r\n\r\n    _NODISCARD _Deque_unchecked_const_iterator<_Mydeque> _Unwrapped() const noexcept {\r\n        return {this->_Myoff, this->_Getcont()};\r\n    }\r\n\r\n    void _Verify_offset(const difference_type _Off) const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\n        (void) _Off;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 0 / _ITERATOR_DEBUG_LEVEL != 0 vvv\r\n        if (_Off != 0) {\r\n            const auto _Mycont = static_cast<const _Mydeque*>(this->_Getcont());\r\n            _STL_VERIFY(_Mycont, \"cannot use value-initialized deque iterator\");\r\n            _STL_VERIFY(\r\n                _Mycont->_Myoff <= this->_Myoff + _Off && this->_Myoff + _Off <= _Mycont->_Myoff + _Mycont->_Mysize,\r\n                \"cannot seek deque iterator out of range\");\r\n        }\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 0 ^^^\r\n    }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    friend void _Verify_range(const _Deque_const_iterator& _First, const _Deque_const_iterator& _Last) noexcept {\r\n        // note _Compat check inside operator<=\r\n        _STL_VERIFY(_First <= _Last, \"deque iterators transposed\");\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    void _Seek_to(const _Deque_unchecked_const_iterator<_Mydeque>& _UIt) noexcept {\r\n        _Myoff = _UIt._Myoff;\r\n    }\r\n\r\n    _Size_type _Myoff; // offset of element in deque\r\n};\r\n\r\ntemplate <class _Mydeque>\r\nclass _Deque_iterator : public _Deque_const_iterator<_Mydeque> {\r\nprivate:\r\n    using _Size_type = typename _Mydeque::size_type;\r\n    using _Mybase    = _Deque_const_iterator<_Mydeque>;\r\n\r\npublic:\r\n    using iterator_category = random_access_iterator_tag;\r\n\r\n    using value_type      = typename _Mydeque::value_type;\r\n    using difference_type = typename _Mydeque::difference_type;\r\n    using pointer         = typename _Mydeque::pointer;\r\n    using reference       = value_type&;\r\n\r\n    using _Mybase::_Mybase;\r\n\r\n    _NODISCARD reference operator*() const noexcept {\r\n        return const_cast<reference>(_Mybase::operator*());\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _Deque_iterator& operator++() noexcept {\r\n        _Mybase::operator++();\r\n        return *this;\r\n    }\r\n\r\n    _Deque_iterator operator++(int) noexcept {\r\n        _Deque_iterator _Tmp = *this;\r\n        _Mybase::operator++();\r\n        return _Tmp;\r\n    }\r\n\r\n    _Deque_iterator& operator--() noexcept {\r\n        _Mybase::operator--();\r\n        return *this;\r\n    }\r\n\r\n    _Deque_iterator operator--(int) noexcept {\r\n        _Deque_iterator _Tmp = *this;\r\n        _Mybase::operator--();\r\n        return _Tmp;\r\n    }\r\n\r\n    _Deque_iterator& operator+=(const difference_type _Off) noexcept {\r\n        _Mybase::operator+=(_Off);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _Deque_iterator operator+(const difference_type _Off) const noexcept {\r\n        _Deque_iterator _Tmp = *this;\r\n        _Tmp += _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD friend _Deque_iterator operator+(const difference_type _Off, _Deque_iterator _Next) noexcept {\r\n        _Next += _Off;\r\n        return _Next;\r\n    }\r\n\r\n    _Deque_iterator& operator-=(const difference_type _Off) noexcept {\r\n        _Mybase::operator-=(_Off);\r\n        return *this;\r\n    }\r\n\r\n    using _Mybase::operator-;\r\n\r\n    _NODISCARD _Deque_iterator operator-(const difference_type _Off) const noexcept {\r\n        _Deque_iterator _Tmp = *this;\r\n        _Tmp -= _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD reference operator[](const difference_type _Off) const noexcept {\r\n        return const_cast<reference>(_Mybase::operator[](_Off));\r\n    }\r\n\r\n    using _Prevent_inheriting_unwrap = _Deque_iterator;\r\n\r\n    _NODISCARD _Deque_unchecked_iterator<_Mydeque> _Unwrapped() const noexcept {\r\n        return {this->_Myoff, this->_Getcont()};\r\n    }\r\n};\r\n\r\ntemplate <class _Value_type, class _Size_type, class _Difference_type, class _Pointer, class _Const_pointer,\r\n    class _Mapptr_type>\r\nstruct _Deque_iter_types {\r\n    using value_type      = _Value_type;\r\n    using size_type       = _Size_type;\r\n    using difference_type = _Difference_type;\r\n    using pointer         = _Pointer;\r\n    using const_pointer   = _Const_pointer;\r\n    using _Mapptr         = _Mapptr_type;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Deque_simple_types : _Simple_types<_Ty> {\r\n    using _Mapptr = _Ty**;\r\n};\r\n\r\ntemplate <class _Val_types>\r\nclass _Deque_val : public _Container_base12 {\r\npublic:\r\n    using value_type      = typename _Val_types::value_type;\r\n    using size_type       = typename _Val_types::size_type;\r\n    using difference_type = typename _Val_types::difference_type;\r\n    using pointer         = typename _Val_types::pointer;\r\n    using const_pointer   = typename _Val_types::const_pointer;\r\n    using reference       = value_type&;\r\n    using const_reference = const value_type&;\r\n    using _Mapptr         = typename _Val_types::_Mapptr;\r\n\r\nprivate:\r\n    using _Map_difference_type = typename iterator_traits<_Mapptr>::difference_type;\r\n\r\n    static constexpr size_t _Bytes = sizeof(value_type);\r\n\r\npublic:\r\n    static constexpr int _Block_size = _Bytes <= 1 ? 16\r\n                                     : _Bytes <= 2 ? 8\r\n                                     : _Bytes <= 4 ? 4\r\n                                     : _Bytes <= 8 ? 2\r\n                                                   : 1; // elements per block (a power of 2)\r\n\r\n    _Deque_val() noexcept : _Map(), _Mapsize(0), _Myoff(0), _Mysize(0) {}\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n    ~_Deque_val() noexcept {\r\n        if constexpr (is_pointer_v<_Mapptr>) {\r\n            const auto _Tombstone{reinterpret_cast<_Mapptr>(_MSVC_STL_UINTPTR_TOMBSTONE_VALUE)};\r\n            _Map     = _Tombstone;\r\n            _Mapsize = 0;\r\n            _Myoff   = 0;\r\n            _Mysize  = 0;\r\n        }\r\n    }\r\n#endif // _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n\r\n    _Map_difference_type _Getblock(size_type _Off) const noexcept {\r\n        // NB: _Mapsize and _Block_size are guaranteed to be powers of 2\r\n        return static_cast<_Map_difference_type>((_Off / _Block_size) & (_Mapsize - 1));\r\n    }\r\n\r\n    reference _Subscript(size_type _Off) noexcept {\r\n        const auto _Block     = _Getblock(_Off);\r\n        const auto _Block_off = static_cast<difference_type>(_Off % _Block_size);\r\n        return _Map[_Block][_Block_off];\r\n    }\r\n\r\n    const_reference _Subscript(size_type _Off) const noexcept {\r\n        const auto _Block     = _Getblock(_Off);\r\n        const auto _Block_off = static_cast<difference_type>(_Off % _Block_size);\r\n        return _Map[_Block][_Block_off];\r\n    }\r\n\r\n    value_type* _Address_subscript(size_type _Off) noexcept {\r\n        const auto _Block     = _Getblock(_Off);\r\n        const auto _Block_off = static_cast<difference_type>(_Off % _Block_size);\r\n        return _STD _Unfancy(_Map[_Block] + _Block_off);\r\n    }\r\n\r\n    _Mapptr _Map; // pointer to array of pointers to blocks\r\n    size_type _Mapsize; // size of map array, zero or 2^N\r\n    size_type _Myoff; // offset of initial element\r\n    size_type _Mysize; // current length of sequence\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc = allocator<_Ty>>\r\nclass deque {\r\nprivate:\r\n    friend _Tidy_guard<deque>;\r\n    static_assert(!_ENFORCE_MATCHING_ALLOCATORS || is_same_v<_Ty, typename _Alloc::value_type>,\r\n        _MISMATCHED_ALLOCATOR_MESSAGE(\"deque<T, Allocator>\", \"T\"));\r\n    static_assert(is_object_v<_Ty>, \"The C++ Standard forbids containers of non-object types \"\r\n                                    \"because of [container.requirements].\");\r\n\r\n    using _Alty         = _Rebind_alloc_t<_Alloc, _Ty>;\r\n    using _Alty_traits  = allocator_traits<_Alty>;\r\n    using _Alpty        = _Rebind_alloc_t<_Alloc, typename _Alty_traits::pointer>;\r\n    using _Alpty_traits = allocator_traits<_Alpty>;\r\n    using _Mapptr       = typename _Alpty_traits::pointer;\r\n    using _Alproxy_ty   = _Rebind_alloc_t<_Alty, _Container_proxy>;\r\n\r\n    using _Map_difference_type = typename iterator_traits<_Mapptr>::difference_type;\r\n\r\n    using _Scary_val = _Deque_val<conditional_t<_Is_simple_alloc_v<_Alty>, _Deque_simple_types<_Ty>,\r\n        _Deque_iter_types<_Ty, typename _Alty_traits::size_type, typename _Alty_traits::difference_type,\r\n            typename _Alty_traits::pointer, typename _Alty_traits::const_pointer, _Mapptr>>>;\r\n\r\n    static constexpr int _Minimum_map_size = 8;\r\n    static constexpr int _Block_size       = _Scary_val::_Block_size;\r\n\r\npublic:\r\n    using allocator_type  = _Alloc;\r\n    using value_type      = _Ty;\r\n    using size_type       = typename _Alty_traits::size_type;\r\n    using difference_type = typename _Alty_traits::difference_type;\r\n    using pointer         = typename _Alty_traits::pointer;\r\n    using const_pointer   = typename _Alty_traits::const_pointer;\r\n    using reference       = _Ty&;\r\n    using const_reference = const _Ty&;\r\n\r\n    using iterator                  = _Deque_iterator<_Scary_val>;\r\n    using const_iterator            = _Deque_const_iterator<_Scary_val>;\r\n    using _Unchecked_iterator       = _Deque_unchecked_iterator<_Scary_val>;\r\n    using _Unchecked_const_iterator = _Deque_unchecked_const_iterator<_Scary_val>;\r\n\r\n    using reverse_iterator       = _STD reverse_iterator<iterator>;\r\n    using const_reverse_iterator = _STD reverse_iterator<const_iterator>;\r\n    enum { _EEN_DS = _Block_size }; // helper for expression evaluator\r\n\r\n    deque() : _Mypair(_Zero_then_variadic_args_t{}) {\r\n        _Get_data()._Alloc_proxy(static_cast<_Alproxy_ty>(_Getal()));\r\n    }\r\n\r\n    explicit deque(const _Alloc& _Al) : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Get_data()._Alloc_proxy(static_cast<_Alproxy_ty>(_Getal()));\r\n    }\r\n\r\n    explicit deque(_CRT_GUARDOVERFLOW size_type _Count, const _Alloc& _Al = _Alloc())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Alproxy_ty _Alproxy(_Getal());\r\n        _Container_proxy_ptr12<_Alproxy_ty> _Proxy(_Alproxy, _Get_data());\r\n        _Tidy_guard<deque> _Guard{this};\r\n        resize(_Count);\r\n        _Guard._Target = nullptr;\r\n        _Proxy._Release();\r\n    }\r\n\r\n    deque(_CRT_GUARDOVERFLOW size_type _Count, const _Ty& _Val) : _Mypair(_Zero_then_variadic_args_t{}) {\r\n        _Construct_n(_Count, _Val);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _Alloc2 = _Alloc, enable_if_t<_Is_allocator<_Alloc2>::value, int> = 0>\r\n#endif // _HAS_CXX17\r\n    deque(_CRT_GUARDOVERFLOW size_type _Count, const _Ty& _Val, const _Alloc& _Al)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Construct_n(_Count, _Val);\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    deque(_Iter _First, _Iter _Last) : _Mypair(_Zero_then_variadic_args_t{}) {\r\n        _Construct(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    deque(_Iter _First, _Iter _Last, const _Alloc& _Al) : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Construct(_First, _Last);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    deque(from_range_t, _Rng&& _Range) : _Mypair(_Zero_then_variadic_args_t{}) {\r\n        _Construct(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    deque(from_range_t, _Rng&& _Range, const _Alloc& _Al) : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Construct(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    deque(const deque& _Right)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Alty_traits::select_on_container_copy_construction(_Right._Getal())) {\r\n        _Construct(_Right._Unchecked_begin(), _Right._Unchecked_end());\r\n    }\r\n\r\n    deque(const deque& _Right, const _Identity_t<_Alloc>& _Al) : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Construct(_Right._Unchecked_begin(), _Right._Unchecked_end());\r\n    }\r\n\r\n    deque(deque&& _Right) : _Mypair(_One_then_variadic_args_t{}, _STD move(_Right._Getal())) {\r\n        _Get_data()._Alloc_proxy(static_cast<_Alproxy_ty>(_Getal()));\r\n        _Take_contents(_Right);\r\n    }\r\n\r\n    deque(deque&& _Right, const _Identity_t<_Alloc>& _Al) : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        if constexpr (!_Alty_traits::is_always_equal::value) {\r\n            if (_Getal() != _Right._Getal()) {\r\n                _Construct(_STD make_move_iterator(_Right._Unchecked_begin()),\r\n                    _STD make_move_iterator(_Right._Unchecked_end()));\r\n                return;\r\n            }\r\n        }\r\n\r\n        _Get_data()._Alloc_proxy(static_cast<_Alproxy_ty>(_Getal()));\r\n        _Take_contents(_Right);\r\n    }\r\n\r\n    deque(initializer_list<_Ty> _Ilist, const _Alloc& _Al = allocator_type())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Construct(_Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\nprivate:\r\n    template <class _Iter, class _Sent>\r\n    void _Construct(_Iter _First, const _Sent _Last) { // initialize from input range [_First, _Last)\r\n        _Alproxy_ty _Alproxy(_Getal());\r\n        _Container_proxy_ptr12<_Alproxy_ty> _Proxy(_Alproxy, _Get_data());\r\n\r\n        _Tidy_guard<deque> _Guard{this};\r\n        for (; _First != _Last; ++_First) {\r\n            _Emplace_back_internal(*_First);\r\n        }\r\n\r\n        _Guard._Target = nullptr;\r\n        _Proxy._Release();\r\n    }\r\n\r\n    void _Construct_n(size_type _Count, const _Ty& _Val) { // construct from _Count * _Val\r\n        _Alproxy_ty _Alproxy(_Getal());\r\n        _Container_proxy_ptr12<_Alproxy_ty> _Proxy(_Alproxy, _Get_data());\r\n\r\n        _Tidy_guard<deque> _Guard{this};\r\n        for (; _Count > 0; --_Count) {\r\n            _Emplace_back_internal(_Val);\r\n        }\r\n\r\n        _Guard._Target = nullptr;\r\n        _Proxy._Release();\r\n    }\r\n\r\n    void _Take_contents(deque& _Right) noexcept {\r\n        // move from _Right, stealing its contents\r\n        // pre: _Getal() == _Right._Getal()\r\n        auto& _My_data    = _Get_data();\r\n        auto& _Right_data = _Right._Get_data();\r\n        _My_data._Swap_proxy_and_iterators(_Right_data);\r\n        _My_data._Map     = _Right_data._Map;\r\n        _My_data._Mapsize = _Right_data._Mapsize;\r\n        _My_data._Myoff   = _Right_data._Myoff;\r\n        _My_data._Mysize  = _Right_data._Mysize;\r\n\r\n        _Right_data._Map     = nullptr;\r\n        _Right_data._Mapsize = 0;\r\n        _Right_data._Myoff   = 0;\r\n        _Right_data._Mysize  = 0;\r\n    }\r\n\r\npublic:\r\n    ~deque() noexcept {\r\n        _Tidy();\r\n        _Alproxy_ty _Proxy_allocator(_Getal());\r\n        _Delete_plain_internal(_Proxy_allocator, _STD exchange(_Get_data()._Myproxy, nullptr));\r\n    }\r\n\r\n    deque& operator=(const deque& _Right) {\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n        auto& _Al       = _Getal();\r\n        auto& _Right_al = _Right._Getal();\r\n        if constexpr (_Choose_pocca_v<_Alty>) {\r\n            if (_Al != _Right_al) {\r\n                _Tidy();\r\n                _Get_data()._Reload_proxy(static_cast<_Alproxy_ty>(_Al), static_cast<_Alproxy_ty>(_Right_al));\r\n            }\r\n        }\r\n\r\n        _Pocca(_Al, _Right_al);\r\n        assign(_Right._Unchecked_begin(), _Right._Unchecked_end());\r\n\r\n        return *this;\r\n    }\r\n\r\n    deque& operator=(deque&& _Right) noexcept(_Alty_traits::is_always_equal::value) {\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n        auto& _Al                 = _Getal();\r\n        auto& _Right_al           = _Right._Getal();\r\n        constexpr auto _Pocma_val = _Choose_pocma_v<_Alty>;\r\n        if constexpr (_Pocma_val == _Pocma_values::_Propagate_allocators) {\r\n            if (_Al != _Right_al) {\r\n                _Alproxy_ty _Alproxy(_Al);\r\n                _Alproxy_ty _Right_alproxy(_Right_al);\r\n                _Container_proxy_ptr12<_Alproxy_ty> _Proxy(_Right_alproxy, _Leave_proxy_unbound{});\r\n                _Tidy();\r\n                _Pocma(_Al, _Right_al);\r\n                _Proxy._Bind(_Alproxy, _STD addressof(_Get_data()));\r\n                _Take_contents(_Right);\r\n                return *this;\r\n            }\r\n        } else if constexpr (_Pocma_val == _Pocma_values::_No_propagate_allocators) {\r\n            if (_Al != _Right_al) {\r\n                assign(_STD make_move_iterator(_Right._Unchecked_begin()),\r\n                    _STD make_move_iterator(_Right._Unchecked_end()));\r\n                return *this;\r\n            }\r\n        }\r\n\r\n        _Tidy();\r\n        _Pocma(_Al, _Right_al);\r\n        _Take_contents(_Right);\r\n\r\n        return *this;\r\n    }\r\n\r\n    deque& operator=(initializer_list<_Ty> _Ilist) {\r\n        assign(_Ilist.begin(), _Ilist.end());\r\n        return *this;\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    void assign(_Iter _First, _Iter _Last) {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        _Assign_range(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    void assign_range(_Rng&& _Range) {\r\n        static_assert(assignable_from<_Ty&, _RANGES range_reference_t<_Rng>>,\r\n            \"Elements must be assignable from the range's reference type (N4993 [sequence.reqmts]/60).\");\r\n        _Assign_range(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    void assign(_CRT_GUARDOVERFLOW size_type _Count, const _Ty& _Val) { // assign _Count * _Val\r\n        _Orphan_all();\r\n        auto _Myfirst       = _Unchecked_begin();\r\n        const auto _Oldsize = _Mysize();\r\n        auto _Assign_count  = (_STD min) (_Count, _Oldsize);\r\n        for (; _Assign_count > 0; --_Assign_count) {\r\n            *_Myfirst = _Val;\r\n            ++_Myfirst;\r\n        }\r\n\r\n        const auto _Shrink_by = _Oldsize - _Assign_count;\r\n        auto _Extend_by       = _Count - _Assign_count;\r\n        _Erase_last_n(_Shrink_by);\r\n        for (; _Extend_by > 0; --_Extend_by) {\r\n            _Emplace_back_internal(_Val);\r\n        }\r\n    }\r\n\r\n    void assign(initializer_list<_Ty> _Ilist) {\r\n        assign(_Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\n    _NODISCARD allocator_type get_allocator() const noexcept {\r\n        return static_cast<allocator_type>(_Getal());\r\n    }\r\n\r\nprivate:\r\n    template <class _Iter, class _Sent>\r\n    void _Assign_range(_Iter _First, const _Sent _Last) {\r\n        _Orphan_all();\r\n        auto _Myfirst      = _Unchecked_begin();\r\n        const auto _Mylast = _Unchecked_end();\r\n        // Reuse existing elements\r\n        for (; _Myfirst != _Mylast; ++_Myfirst, (void) ++_First) {\r\n            if (_First == _Last) {\r\n                _Erase_last_n(static_cast<size_type>(_Mylast - _Myfirst));\r\n                return;\r\n            }\r\n\r\n            *_Myfirst = *_First;\r\n        }\r\n\r\n        // Allocate new elements for remaining tail of values\r\n        for (; _First != _Last; ++_First) {\r\n            _Emplace_back_internal(*_First);\r\n        }\r\n    }\r\n\r\npublic:\r\n    _NODISCARD iterator begin() noexcept {\r\n        return iterator(_Myoff(), _STD addressof(_Get_data()));\r\n    }\r\n\r\n    _NODISCARD const_iterator begin() const noexcept {\r\n        return const_iterator(_Myoff(), _STD addressof(_Get_data()));\r\n    }\r\n\r\n    _NODISCARD iterator end() noexcept {\r\n        return iterator(_Myoff() + _Mysize(), _STD addressof(_Get_data()));\r\n    }\r\n\r\n    _NODISCARD const_iterator end() const noexcept {\r\n        return const_iterator(_Myoff() + _Mysize(), _STD addressof(_Get_data()));\r\n    }\r\n\r\n    _Unchecked_iterator _Unchecked_begin() noexcept {\r\n        return _Unchecked_iterator(_Myoff(), _STD addressof(_Get_data()));\r\n    }\r\n\r\n    _Unchecked_const_iterator _Unchecked_begin() const noexcept {\r\n        return _Unchecked_const_iterator(_Myoff(), _STD addressof(_Get_data()));\r\n    }\r\n\r\n    _Unchecked_iterator _Unchecked_end() noexcept {\r\n        return _Unchecked_iterator(_Myoff() + _Mysize(), _STD addressof(_Get_data()));\r\n    }\r\n\r\n    _Unchecked_const_iterator _Unchecked_end() const noexcept {\r\n        return _Unchecked_const_iterator(_Myoff() + _Mysize(), _STD addressof(_Get_data()));\r\n    }\r\n\r\n    iterator _Make_iter(const_iterator _Where) const noexcept {\r\n        return iterator(_Where._Myoff, _STD addressof(_Get_data()));\r\n    }\r\n\r\n    _NODISCARD reverse_iterator rbegin() noexcept {\r\n        return reverse_iterator(end());\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator rbegin() const noexcept {\r\n        return const_reverse_iterator(end());\r\n    }\r\n\r\n    _NODISCARD reverse_iterator rend() noexcept {\r\n        return reverse_iterator(begin());\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator rend() const noexcept {\r\n        return const_reverse_iterator(begin());\r\n    }\r\n\r\n    _NODISCARD const_iterator cbegin() const noexcept {\r\n        return begin();\r\n    }\r\n\r\n    _NODISCARD const_iterator cend() const noexcept {\r\n        return end();\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator crbegin() const noexcept {\r\n        return rbegin();\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator crend() const noexcept {\r\n        return rend();\r\n    }\r\n\r\n    _NODISCARD_EMPTY_MEMBER bool empty() const noexcept {\r\n        return _Mysize() == 0;\r\n    }\r\n\r\n    _NODISCARD size_type size() const noexcept {\r\n        return _Mysize();\r\n    }\r\n\r\n    _NODISCARD size_type max_size() const noexcept {\r\n        return (_STD min) (static_cast<size_type>(_STD _Max_limit<difference_type>()), //\r\n            _Alty_traits::max_size(_Getal()));\r\n    }\r\n\r\n    void resize(_CRT_GUARDOVERFLOW size_type _Newsize) {\r\n        _Orphan_all();\r\n        while (_Mysize() < _Newsize) {\r\n            _Emplace_back_internal();\r\n        }\r\n\r\n        while (_Mysize() > _Newsize) {\r\n            pop_back();\r\n        }\r\n    }\r\n\r\n    void resize(_CRT_GUARDOVERFLOW size_type _Newsize, const _Ty& _Val) {\r\n        _Orphan_all();\r\n        while (_Mysize() < _Newsize) {\r\n            _Emplace_back_internal(_Val);\r\n        }\r\n\r\n        while (_Mysize() > _Newsize) {\r\n            pop_back();\r\n        }\r\n    }\r\n\r\n    void shrink_to_fit() {\r\n        if (empty()) {\r\n            if (_Map() != nullptr) {\r\n                _Reset_map();\r\n            }\r\n            return;\r\n        }\r\n\r\n        const auto _Mask = static_cast<size_type>(_Mapsize() - 1);\r\n\r\n        const auto _Unmasked_first_used_block_idx = static_cast<size_type>(_Myoff() / _Block_size);\r\n        const auto _First_used_block_idx          = static_cast<size_type>(_Unmasked_first_used_block_idx & _Mask);\r\n\r\n        // (_Myoff() + _Mysize() - 1) is for the last element, i.e. the back() of the deque.\r\n        // Divide by _Block_size to get the unmasked index of the last used block.\r\n        // Add 1 to get the unmasked index of the first unused block.\r\n        const auto _Unmasked_first_unused_block_idx =\r\n            static_cast<size_type>(((_Myoff() + _Mysize() - 1) / _Block_size) + 1);\r\n\r\n        const auto _First_unused_block_idx = static_cast<size_type>(_Unmasked_first_unused_block_idx & _Mask);\r\n\r\n        // deallocate unused blocks, traversing over the circular buffer until the first used block index\r\n        for (auto _Block_idx = _First_unused_block_idx; _Block_idx != _First_used_block_idx;\r\n            _Block_idx       = static_cast<size_type>((_Block_idx + 1) & _Mask)) {\r\n            auto& _Block_ptr = _Map()[static_cast<_Map_difference_type>(_Block_idx)];\r\n            if (_Block_ptr != nullptr) {\r\n                _Getal().deallocate(_Block_ptr, _Block_size);\r\n                _Block_ptr = nullptr;\r\n            }\r\n        }\r\n\r\n        const auto _Used_block_count =\r\n            static_cast<size_type>(_Unmasked_first_unused_block_idx - _Unmasked_first_used_block_idx);\r\n\r\n        size_type _New_block_count = _Minimum_map_size; // should be power of 2\r\n\r\n        while (_New_block_count < _Used_block_count) {\r\n            _New_block_count *= 2;\r\n        }\r\n\r\n        if (_New_block_count >= _Mapsize()) {\r\n            return;\r\n        }\r\n\r\n        // worth shrinking the internal map, do it\r\n\r\n        _Alpty _Almap(_Getal());\r\n        const auto _New_map = _Almap.allocate(_New_block_count);\r\n\r\n        _Orphan_all(); // the map can be shrunk, invalidate all iterators\r\n\r\n        // transfer the ownership of blocks to pointers in the new map\r\n        for (size_type _Block = 0; _Block != _Used_block_count; ++_Block) {\r\n            const auto _New_block_idx = static_cast<_Map_difference_type>(_Block);\r\n            const auto _Old_block_idx = static_cast<_Map_difference_type>((_First_used_block_idx + _Block) & _Mask);\r\n            _STD _Construct_in_place(_New_map[_New_block_idx], _Map()[_Old_block_idx]);\r\n        }\r\n\r\n        // null out the rest of the new map\r\n        _STD _Uninitialized_value_construct_n_unchecked1(\r\n            _New_map + static_cast<_Map_difference_type>(_Used_block_count), _New_block_count - _Used_block_count);\r\n\r\n        for (auto _Block = _Map_distance(); _Block > 0;) {\r\n            --_Block;\r\n            _STD _Destroy_in_place(_Map()[_Block]); // destroy pointer to block\r\n        }\r\n        _Almap.deallocate(_Map(), _Mapsize()); // free storage for map\r\n\r\n        _Map()     = _New_map;\r\n        _Mapsize() = _New_block_count;\r\n        _Myoff() %= _Block_size; // the first element is within block index 0 of the new map\r\n    }\r\n\r\n    _NODISCARD const_reference operator[](size_type _Pos) const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_DEQUE || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Pos < _Mysize(), \"deque subscript out of range\");\r\n#endif\r\n\r\n        return _Subscript(_Pos);\r\n    }\r\n\r\n    _NODISCARD reference operator[](size_type _Pos) noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_DEQUE || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Pos < _Mysize(), \"deque subscript out of range\");\r\n#endif\r\n\r\n        return _Subscript(_Pos);\r\n    }\r\n\r\n    _NODISCARD const_reference at(size_type _Pos) const {\r\n        if (_Mysize() <= _Pos) {\r\n            _Xran();\r\n        }\r\n\r\n        return _Subscript(_Pos);\r\n    }\r\n\r\n    _NODISCARD reference at(size_type _Pos) {\r\n        if (_Mysize() <= _Pos) {\r\n            _Xran();\r\n        }\r\n\r\n        return _Subscript(_Pos);\r\n    }\r\n\r\n    _NODISCARD reference front() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_DEQUE || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(!empty(), \"front() called on empty deque\");\r\n#endif\r\n\r\n        return _Subscript(0);\r\n    }\r\n\r\n    _NODISCARD const_reference front() const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_DEQUE || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(!empty(), \"front() called on empty deque\");\r\n#endif\r\n\r\n        return _Subscript(0);\r\n    }\r\n\r\n    _NODISCARD reference back() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_DEQUE || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(!empty(), \"back() called on empty deque\");\r\n#endif\r\n\r\n        return _Subscript(_Mysize() - 1);\r\n    }\r\n\r\n    _NODISCARD const_reference back() const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_DEQUE || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(!empty(), \"back() called on empty deque\");\r\n#endif\r\n\r\n        return _Subscript(_Mysize() - 1);\r\n    }\r\n\r\nprivate:\r\n    template <class... _Tys>\r\n    void _Emplace_back_internal(_Tys&&... _Vals) {\r\n        if ((_Myoff() + _Mysize()) % _Block_size == 0 && _Mapsize() <= (_Mysize() + _Block_size) / _Block_size) {\r\n            _Growmap(1);\r\n        }\r\n        _Myoff() &= _Mapsize() * _Block_size - 1;\r\n        const auto _Newoff = static_cast<size_type>(_Myoff() + _Mysize());\r\n        const auto _Block  = _Getblock(_Newoff);\r\n        if (_Map()[_Block] == nullptr) {\r\n            _Map()[_Block] = _Getal().allocate(_Block_size);\r\n        }\r\n\r\n        _Alty_traits::construct(_Getal(), _Get_data()._Address_subscript(_Newoff), _STD forward<_Tys>(_Vals)...);\r\n\r\n        ++_Mysize();\r\n    }\r\n\r\n    template <class... _Tys>\r\n    void _Emplace_front_internal(_Tys&&... _Vals) {\r\n        if (_Myoff() % _Block_size == 0 && _Mapsize() <= (_Mysize() + _Block_size) / _Block_size) {\r\n            _Growmap(1);\r\n        }\r\n        _Myoff() &= _Mapsize() * _Block_size - 1;\r\n        const auto _Newoff = static_cast<size_type>((_Myoff() != 0 ? _Myoff() : _Mapsize() * _Block_size) - 1);\r\n        const auto _Block  = _Getblock(_Newoff);\r\n        if (_Map()[_Block] == nullptr) {\r\n            _Map()[_Block] = _Getal().allocate(_Block_size);\r\n        }\r\n\r\n        _Alty_traits::construct(_Getal(), _Get_data()._Address_subscript(_Newoff), _STD forward<_Tys>(_Vals)...);\r\n\r\n        _Myoff() = _Newoff;\r\n        ++_Mysize();\r\n    }\r\n\r\npublic:\r\n    template <class... _Valty>\r\n    _CONTAINER_EMPLACE_RETURN emplace_front(_Valty&&... _Val) {\r\n        _Orphan_all();\r\n        _Emplace_front_internal(_STD forward<_Valty>(_Val)...);\r\n#if _HAS_CXX17\r\n        return front();\r\n#endif // _HAS_CXX17\r\n    }\r\n\r\n    template <class... _Valty>\r\n    _CONTAINER_EMPLACE_RETURN emplace_back(_Valty&&... _Val) {\r\n        _Orphan_all();\r\n        _Emplace_back_internal(_STD forward<_Valty>(_Val)...);\r\n\r\n#if _HAS_CXX17\r\n        return back();\r\n#endif // _HAS_CXX17\r\n    }\r\n\r\n    template <class... _Valty>\r\n    iterator emplace(const_iterator _Where, _Valty&&... _Val) {\r\n        const auto _Off = static_cast<size_type>(_Where - begin());\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Off <= _Mysize(), \"deque emplace iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        _Orphan_all();\r\n        if (_Off == 0) { // at the beginning\r\n            _Emplace_front_internal(_STD forward<_Valty>(_Val)...);\r\n        } else if (_Off == _Mysize()) { // at the end\r\n            _Emplace_back_internal(_STD forward<_Valty>(_Val)...);\r\n        } else {\r\n            _Alloc_temporary2<_Alty> _Obj(_Getal(), _STD forward<_Valty>(_Val)...); // handle aliasing\r\n\r\n            if (_Off <= _Mysize() / 2) { // closer to front\r\n                _Emplace_front_internal(_STD move(*_Unchecked_begin()));\r\n\r\n                auto _Moving_dst       = _STD _Next_iter(_Unchecked_begin());\r\n                auto _Moving_src_begin = _STD _Next_iter(_Moving_dst);\r\n                auto _Moving_src_end   = _Moving_dst + static_cast<difference_type>(_Off);\r\n\r\n                auto _Moving_dst_end = _STD _Move_unchecked(_Moving_src_begin, _Moving_src_end, _Moving_dst);\r\n                *_Moving_dst_end     = _STD move(_Obj._Get_value());\r\n            } else { // closer to back\r\n                _Emplace_back_internal(_STD move(*_STD _Prev_iter(_Unchecked_end())));\r\n\r\n                auto _Moving_dst_end   = _STD _Prev_iter(_Unchecked_end());\r\n                auto _Moving_src_end   = _STD _Prev_iter(_Moving_dst_end);\r\n                auto _Moving_src_begin = _Unchecked_begin() + static_cast<difference_type>(_Off);\r\n\r\n                _STD _Move_backward_unchecked(_Moving_src_begin, _Moving_src_end, _Moving_dst_end);\r\n                *_Moving_src_begin = _STD move(_Obj._Get_value());\r\n            }\r\n        }\r\n\r\n        return begin() + static_cast<difference_type>(_Off);\r\n    }\r\n\r\n    void push_front(const _Ty& _Val) {\r\n        _Orphan_all();\r\n        _Emplace_front_internal(_Val);\r\n    }\r\n\r\n    void push_front(_Ty&& _Val) {\r\n        _Orphan_all();\r\n        _Emplace_front_internal(_STD move(_Val));\r\n    }\r\n\r\n    void push_back(const _Ty& _Val) {\r\n        _Orphan_all();\r\n        _Emplace_back_internal(_Val);\r\n    }\r\n\r\n    void push_back(_Ty&& _Val) {\r\n        _Orphan_all();\r\n        _Emplace_back_internal(_STD move(_Val));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    void prepend_range(_Rng&& _Range) {\r\n        _Orphan_all();\r\n\r\n        const auto _Oldsize = _Mysize();\r\n        _Restore_old_size_guard<_Pop_direction::_Front> _Guard{this, _Oldsize};\r\n        if constexpr (_RANGES bidirectional_range<_Rng>) {\r\n            const auto _UFirst = _RANGES _Ubegin(_Range);\r\n            auto _ULast        = _RANGES _Get_final_iterator_unwrapped(_Range);\r\n            while (_UFirst != _ULast) {\r\n                _Emplace_front_internal(*--_ULast); // prepend in order\r\n            }\r\n        } else {\r\n            auto _UFirst      = _RANGES _Ubegin(_Range);\r\n            const auto _ULast = _RANGES _Uend(_Range);\r\n            for (; _UFirst != _ULast; ++_UFirst) {\r\n                _Emplace_front_internal(*_UFirst); // prepend flipped\r\n            }\r\n\r\n            const auto _Num = static_cast<difference_type>(_Mysize() - _Oldsize);\r\n            _STD reverse(_Unchecked_begin(), _Unchecked_begin() + _Num);\r\n        }\r\n        _Guard._Container = nullptr;\r\n    }\r\n\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    void append_range(_Rng&& _Range) {\r\n        _Orphan_all();\r\n\r\n        const auto _Oldsize = _Mysize();\r\n        auto _UFirst        = _RANGES _Ubegin(_Range);\r\n        const auto _ULast   = _RANGES _Uend(_Range);\r\n\r\n        _Restore_old_size_guard<_Pop_direction::_Back> _Guard{this, _Oldsize};\r\n        for (; _UFirst != _ULast; ++_UFirst) {\r\n            _Emplace_back_internal(*_UFirst);\r\n        }\r\n        _Guard._Container = nullptr;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    iterator insert(const_iterator _Where, const _Ty& _Val) {\r\n        return emplace(_Where, _Val);\r\n    }\r\n\r\n    iterator insert(const_iterator _Where, _Ty&& _Val) {\r\n        return emplace(_Where, _STD move(_Val));\r\n    }\r\n\r\n    iterator insert(const_iterator _Where, _CRT_GUARDOVERFLOW size_type _Count, const _Ty& _Val) {\r\n        // insert _Count * _Val at _Where\r\n        size_type _Off = static_cast<size_type>(_Where - begin());\r\n        _Insert_n(_Where, _Count, _Val);\r\n        return begin() + static_cast<difference_type>(_Off);\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    iterator insert(const_iterator _Where, _Iter _First, _Iter _Last) {\r\n        // insert [_First, _Last) at _Where\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        const size_type _Off = static_cast<size_type>(_Where - begin());\r\n        return _Insert_range<static_cast<_Is_bidi>(_Is_cpp17_bidi_iter_v<_Iter>)>(\r\n            _Off, _STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    iterator insert_range(const_iterator _Where, _Rng&& _Range) {\r\n        const size_type _Off = static_cast<size_type>(_Where - begin());\r\n\r\n        if constexpr (_RANGES bidirectional_range<_Rng>) {\r\n            return _Insert_range<_Is_bidi::_Yes>(\r\n                _Off, _RANGES _Ubegin(_Range), _RANGES _Get_final_iterator_unwrapped(_Range));\r\n        } else {\r\n            return _Insert_range<_Is_bidi::_Nope>(_Off, _RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    iterator insert(const_iterator _Where, initializer_list<_Ty> _Ilist) {\r\n        return insert(_Where, _Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\nprivate:\r\n    enum class _Pop_direction : bool {\r\n        _Front,\r\n        _Back,\r\n    };\r\n\r\n    template <_Pop_direction _Direction>\r\n    struct _NODISCARD _Restore_old_size_guard {\r\n        deque* _Container;\r\n        const size_type _Oldsize;\r\n\r\n        ~_Restore_old_size_guard() { // restore old size, at least\r\n            if (_Container) {\r\n                while (_Oldsize < _Container->_Mysize()) {\r\n                    if constexpr (_Direction == _Pop_direction::_Front) {\r\n                        _Container->pop_front();\r\n                    } else {\r\n                        _Container->pop_back();\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    enum class _Is_bidi : bool { _Nope, _Yes };\r\n\r\n    template <_Is_bidi _Bidi, class _Iter, class _Sent>\r\n    iterator _Insert_range(const size_type _Off, _Iter _First, _Sent _Last) {\r\n        // insert [_First, _Last) at begin() + _Off\r\n        // Pre: _Bidi == _Is_bidi::_Yes implies that _Iter and _Sent are the same type, and that\r\n        //      _Iter is either a bidirectional_iterator or a Cpp17BidirectionalIterator.\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Mysize() >= _Off, \"deque insert iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        if (_First == _Last) {\r\n            return begin() + static_cast<difference_type>(_Off);\r\n        }\r\n\r\n        const size_type _Oldsize = _Mysize();\r\n\r\n        _Orphan_all();\r\n        if (_Off <= _Oldsize / 2) { // closer to front, push to front then rotate\r\n            _Restore_old_size_guard<_Pop_direction::_Front> _Guard{this, _Oldsize};\r\n            if constexpr (_Bidi == _Is_bidi::_Yes) {\r\n                while (_First != _Last) {\r\n                    _Emplace_front_internal(*--_Last); // prepend in order\r\n                }\r\n            } else {\r\n                for (; _First != _Last; ++_First) {\r\n                    _Emplace_front_internal(*_First); // prepend flipped\r\n                }\r\n            }\r\n\r\n            _Guard._Container = nullptr;\r\n\r\n            const auto _Num     = static_cast<difference_type>(_Mysize() - _Oldsize);\r\n            const auto _Myfirst = _Unchecked_begin();\r\n            const auto _Mymid   = _Myfirst + _Num;\r\n            if constexpr (_Bidi == _Is_bidi::_Nope) {\r\n                _STD reverse(_Myfirst, _Mymid); // flip new stuff in place\r\n            }\r\n            _STD rotate(_Myfirst, _Mymid, _Mymid + static_cast<difference_type>(_Off));\r\n            return begin() + static_cast<difference_type>(_Off);\r\n        }\r\n\r\n        _Restore_old_size_guard<_Pop_direction::_Back> _Guard{this, _Oldsize};\r\n        for (; _First != _Last; ++_First) {\r\n            _Emplace_back_internal(*_First);\r\n        }\r\n\r\n        _Guard._Container = nullptr;\r\n\r\n        const auto _Myfirst = _Unchecked_begin();\r\n        _STD rotate(_Myfirst + static_cast<difference_type>(_Off), _Myfirst + static_cast<difference_type>(_Oldsize),\r\n            _Unchecked_end());\r\n\r\n        return begin() + static_cast<difference_type>(_Off);\r\n    }\r\n\r\n    void _Insert_n(const_iterator _Where, size_type _Count, const _Ty& _Val) { // insert _Count * _Val at _Where\r\n        _Unchecked_iterator _Mid;\r\n        size_type _Num;\r\n        size_type _Off     = static_cast<size_type>(_Where - begin());\r\n        size_type _Oldsize = _Mysize();\r\n        size_type _Rem     = _Oldsize - _Off;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Off <= _Oldsize, \"deque insert iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        if (_Off < _Rem) { // closer to front\r\n            _Restore_old_size_guard<_Pop_direction::_Front> _Guard{this, _Oldsize};\r\n            if (_Off < _Count) { // insert longer than prefix\r\n                for (_Num = _Count - _Off; _Num > 0; --_Num) {\r\n                    push_front(_Val); // push excess values\r\n                }\r\n                for (_Num = _Off; _Num > 0; --_Num) {\r\n                    push_front(_Subscript(_Count - 1)); // push prefix\r\n                }\r\n\r\n                _Mid = _Unchecked_begin() + static_cast<difference_type>(_Count);\r\n                _STD fill_n(_Mid, _Off, _Val); // fill in rest of values\r\n            } else { // insert not longer than prefix\r\n                for (_Num = _Count; _Num > 0; --_Num) {\r\n                    push_front(_Subscript(_Count - 1)); // push part of prefix\r\n                }\r\n\r\n                _Mid = _Unchecked_begin() + static_cast<difference_type>(_Count);\r\n                _Alloc_temporary2<_Alty> _Tmp(_Getal(), _Val); // in case _Val is in sequence\r\n                _STD move(_Mid + static_cast<difference_type>(_Count), _Mid + static_cast<difference_type>(_Off),\r\n                    _Mid); // copy rest of prefix\r\n                _STD fill(_Unchecked_begin() + static_cast<difference_type>(_Off),\r\n                    _Mid + static_cast<difference_type>(_Off), _Tmp._Get_value()); // fill in values\r\n            }\r\n            _Guard._Container = nullptr;\r\n        } else { // closer to back\r\n            _Restore_old_size_guard<_Pop_direction::_Back> _Guard{this, _Oldsize};\r\n            if (_Rem < _Count) { // insert longer than suffix\r\n                _Orphan_all();\r\n                for (_Num = _Count - _Rem; _Num > 0; --_Num) {\r\n                    _Emplace_back_internal(_Val); // push excess values\r\n                }\r\n                for (_Num = 0; _Num < _Rem; ++_Num) {\r\n                    _Emplace_back_internal(_Subscript(_Off + _Num)); // push suffix\r\n                }\r\n\r\n                _Mid = _Unchecked_begin() + static_cast<difference_type>(_Off);\r\n                _STD fill_n(_Mid, _Rem, _Val); // fill in rest of values\r\n            } else { // insert not longer than prefix\r\n                for (_Num = 0; _Num < _Count; ++_Num) {\r\n                    _Emplace_back_internal(_Subscript(_Off + _Rem - _Count + _Num)); // push part of prefix\r\n                }\r\n\r\n                _Mid = _Unchecked_begin() + static_cast<difference_type>(_Off);\r\n                _Alloc_temporary2<_Alty> _Tmp(_Getal(), _Val); // in case _Val is in sequence\r\n                _STD move_backward(_Mid, _Mid + static_cast<difference_type>(_Rem - _Count),\r\n                    _Mid + static_cast<difference_type>(_Rem)); // copy rest of prefix\r\n                _STD fill_n(_Mid, _Count, _Tmp._Get_value()); // fill in values\r\n            }\r\n            _Guard._Container = nullptr;\r\n        }\r\n    }\r\n\r\npublic:\r\n    void pop_front() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_DEQUE || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(!empty(), \"pop_front() called on empty deque\");\r\n#endif\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _Orphan_off(_Myoff());\r\n#endif\r\n        _Alty_traits::destroy(_Getal(), _Get_data()._Address_subscript(_Myoff()));\r\n        if (--_Mysize() == 0) {\r\n            _Myoff() = 0;\r\n        } else {\r\n            ++_Myoff();\r\n        }\r\n    }\r\n\r\n    void pop_back() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_DEQUE || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(!empty(), \"pop_back() called on empty deque\");\r\n#endif\r\n\r\n        size_type _Newoff = _Myoff() + _Mysize() - 1;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _Orphan_off(_Newoff);\r\n#endif\r\n        _Alty_traits::destroy(_Getal(), _Get_data()._Address_subscript(_Newoff));\r\n        if (--_Mysize() == 0) {\r\n            _Myoff() = 0;\r\n        }\r\n    }\r\n\r\n    iterator erase(const_iterator _Where) noexcept(is_nothrow_move_assignable_v<value_type>) /* strengthened */ {\r\n        return erase(_Where, _Next_iter(_Where));\r\n    }\r\n\r\n    iterator erase(const_iterator _First_arg, const_iterator _Last_arg)\r\n        noexcept(is_nothrow_move_assignable_v<value_type>) /* strengthened */ {\r\n        iterator _First = _Make_iter(_First_arg);\r\n        iterator _Last  = _Make_iter(_Last_arg);\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_First <= _Last && begin() <= _First && _Last <= end(), \"deque erase iterator outside range\");\r\n        _STD _Adl_verify_range(_First, _Last);\r\n#endif\r\n\r\n        auto _Off   = static_cast<size_type>(_First - begin());\r\n        auto _Count = static_cast<size_type>(_Last - _First);\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        const bool _Moved = _Off > 0 && _Off + _Count < _Mysize();\r\n#endif\r\n\r\n        if (_Count == 0) {\r\n            return _First;\r\n        }\r\n\r\n        auto _Unchecked_first = _First._Unwrapped();\r\n        auto _Unchecked_last  = _Last._Unwrapped();\r\n\r\n        if (_Off < static_cast<size_type>(_Unchecked_end() - _Unchecked_last)) { // closer to front\r\n            _STD move_backward(_Unchecked_begin(), _Unchecked_first, _Unchecked_last); // copy over hole\r\n            for (; _Count > 0; --_Count) {\r\n                pop_front(); // pop copied elements\r\n            }\r\n        } else { // closer to back\r\n            _STD move(_Unchecked_last, _Unchecked_end(), _Unchecked_first); // copy over hole\r\n            for (; _Count > 0; --_Count) {\r\n                pop_back(); // pop copied elements\r\n            }\r\n        }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        if (_Moved) {\r\n            _Orphan_all();\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        return begin() + static_cast<difference_type>(_Off);\r\n    }\r\n\r\nprivate:\r\n    void _Erase_last_n(size_type _Count) noexcept {\r\n        for (; _Count > 0; --_Count) {\r\n            pop_back();\r\n        }\r\n    }\r\n\r\npublic:\r\n    void clear() noexcept { // erase all\r\n        _Tidy();\r\n    }\r\n\r\n    void swap(deque& _Right) noexcept /* strengthened */ {\r\n        using _STD swap;\r\n        if (this != _STD addressof(_Right)) {\r\n            _Pocs(_Getal(), _Right._Getal());\r\n            auto& _My_data    = _Get_data();\r\n            auto& _Right_data = _Right._Get_data();\r\n            _My_data._Swap_proxy_and_iterators(_Right_data);\r\n            swap(_My_data._Map, _Right_data._Map); // intentional ADL\r\n            _STD swap(_My_data._Mapsize, _Right_data._Mapsize);\r\n            _STD swap(_My_data._Myoff, _Right_data._Myoff);\r\n            _STD swap(_My_data._Mysize, _Right_data._Mysize);\r\n        }\r\n    }\r\n\r\nprivate:\r\n    [[noreturn]] static void _Xlen() {\r\n        _Xlength_error(\"deque<T> too long\");\r\n    }\r\n\r\n    [[noreturn]] static void _Xran() {\r\n        _Xout_of_range(\"invalid deque<T> subscript\");\r\n    }\r\n\r\n    void _Growmap(size_type _Count) { // grow map by at least _Count pointers, _Mapsize() a power of 2\r\n        static_assert(_Minimum_map_size > 1, \"The _Xlen() test should always be performed.\");\r\n\r\n        _Alpty _Almap(_Getal());\r\n        size_type _Newsize = _Mapsize() > 0 ? _Mapsize() : 1;\r\n        while (_Newsize - _Mapsize() < _Count || _Newsize < _Minimum_map_size) {\r\n            // scale _Newsize to 2^N >= _Mapsize() + _Count\r\n            if (max_size() / _Block_size - _Newsize < _Newsize) {\r\n                _Xlen(); // result too long\r\n            }\r\n\r\n            _Newsize *= 2;\r\n        }\r\n\r\n        size_type _Allocsize = _Newsize;\r\n\r\n        const auto _Myboff  = static_cast<size_type>(_Myoff() / _Block_size);\r\n        const auto _Map_off = static_cast<_Map_difference_type>(_Myboff);\r\n        _Mapptr _Newmap     = _Allocate_at_least_helper(_Almap, _Allocsize);\r\n        _Mapptr _Myptr      = _Newmap + _Map_off;\r\n        _STL_ASSERT(_Allocsize >= _Newsize, \"_Allocsize >= _Newsize\");\r\n        while (_Newsize <= _Allocsize / 2) {\r\n            _Newsize *= 2;\r\n        }\r\n\r\n        _Count = _Newsize - _Mapsize();\r\n\r\n        const auto _Map_count = static_cast<_Map_difference_type>(_Count);\r\n\r\n        _Myptr = _STD uninitialized_copy(_Map() + _Map_off, _Map() + _Map_distance(), _Myptr); // copy initial to end\r\n        if (_Myboff <= _Count) { // increment greater than offset of initial block\r\n            _Myptr = _STD uninitialized_copy(_Map(), _Map() + _Map_off, _Myptr); // copy rest of old\r\n            _Uninitialized_value_construct_n_unchecked1(_Myptr, _Count - _Myboff); // clear suffix of new\r\n            _Uninitialized_value_construct_n_unchecked1(_Newmap, _Myboff); // clear prefix of new\r\n        } else { // increment not greater than offset of initial block\r\n            _STD uninitialized_copy(_Map(), _Map() + _Map_count, _Myptr); // copy more old\r\n            _Myptr = _STD uninitialized_copy(_Map() + _Map_count, _Map() + _Map_off, _Newmap); // copy rest of old\r\n            _Uninitialized_value_construct_n_unchecked1(_Myptr, _Count); // clear rest to initial block\r\n        }\r\n\r\n        if (_Map() != nullptr) {\r\n            _Destroy_range(_Map(), _Map() + _Map_distance());\r\n            _Almap.deallocate(_Map(), _Mapsize()); // free storage for old\r\n        }\r\n\r\n        _Map() = _Newmap; // point at new\r\n        _Mapsize() += _Count;\r\n    }\r\n\r\n    void _Reset_map() noexcept {\r\n        // pre: each block pointer is either null or pointing to a block without constructed elements\r\n\r\n        for (auto _Block = _Map_distance(); _Block > 0;) { // free storage for a block and destroy pointer\r\n            --_Block;\r\n            auto& _Block_ptr = _Map()[_Block];\r\n            if (_Block_ptr) { // free block\r\n                _Getal().deallocate(_Block_ptr, _Block_size);\r\n            }\r\n            _STD _Destroy_in_place(_Block_ptr); // destroy pointer to block\r\n        }\r\n\r\n        _Alpty _Almap(_Getal());\r\n        _Almap.deallocate(_Map(), _Mapsize()); // free storage for map\r\n\r\n        _Map()     = nullptr;\r\n        _Mapsize() = 0;\r\n    }\r\n\r\n    void _Tidy() noexcept { // free all storage\r\n        _Orphan_all();\r\n\r\n        while (!empty()) {\r\n            pop_back();\r\n        }\r\n\r\n        if (_Map() != nullptr) {\r\n            _Reset_map();\r\n        }\r\n\r\n        _STL_INTERNAL_CHECK(_Mapsize() == 0); // null map should always be paired with zero mapsize\r\n    }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    void _Orphan_off(size_type _Offlo) const noexcept { // orphan iterators with specified offset(s)\r\n        size_type _Offhigh = _Myoff() + _Mysize() <= _Offlo + 1 ? static_cast<size_type>(-1) : _Offlo;\r\n        if (_Offlo == _Myoff()) {\r\n            _Offlo = 0;\r\n        }\r\n\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        _Iterator_base12** _Pnext = &_Get_data()._Myproxy->_Myfirstiter;\r\n        while (*_Pnext) {\r\n            const auto _Pnextoff = static_cast<const_iterator&>(**_Pnext)._Myoff;\r\n            if (_Pnextoff < _Offlo || _Offhigh < _Pnextoff) {\r\n                _Pnext = &(*_Pnext)->_Mynextiter;\r\n            } else { // orphan the iterator\r\n                (*_Pnext)->_Myproxy = nullptr;\r\n                *_Pnext             = (*_Pnext)->_Mynextiter;\r\n            }\r\n        }\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n    _Map_difference_type _Getblock(size_type _Off) const noexcept {\r\n        return _Get_data()._Getblock(_Off);\r\n    }\r\n\r\n    void _Orphan_all() noexcept {\r\n        _Get_data()._Orphan_all();\r\n    }\r\n\r\n    _Alty& _Getal() noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    const _Alty& _Getal() const noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    _Scary_val& _Get_data() noexcept {\r\n        return _Mypair._Myval2;\r\n    }\r\n\r\n    const _Scary_val& _Get_data() const noexcept {\r\n        return _Mypair._Myval2;\r\n    }\r\n\r\n    _Mapptr& _Map() noexcept {\r\n        return _Get_data()._Map;\r\n    }\r\n\r\n    const _Mapptr& _Map() const noexcept {\r\n        return _Get_data()._Map;\r\n    }\r\n\r\n    size_type& _Mapsize() noexcept {\r\n        return _Get_data()._Mapsize;\r\n    }\r\n\r\n    const size_type& _Mapsize() const noexcept {\r\n        return _Get_data()._Mapsize;\r\n    }\r\n\r\n    size_type& _Myoff() noexcept {\r\n        return _Get_data()._Myoff;\r\n    }\r\n\r\n    const size_type& _Myoff() const noexcept {\r\n        return _Get_data()._Myoff;\r\n    }\r\n\r\n    size_type& _Mysize() noexcept {\r\n        return _Get_data()._Mysize;\r\n    }\r\n\r\n    const size_type& _Mysize() const noexcept {\r\n        return _Get_data()._Mysize;\r\n    }\r\n\r\n    _Map_difference_type _Map_distance() const noexcept {\r\n        return static_cast<_Map_difference_type>(_Get_data()._Mapsize);\r\n    }\r\n\r\n    reference _Subscript(size_type _Pos) noexcept {\r\n        return _Get_data()._Subscript(_Myoff() + _Pos);\r\n    }\r\n\r\n    const_reference _Subscript(size_type _Pos) const noexcept {\r\n        return _Get_data()._Subscript(_Myoff() + _Pos);\r\n    }\r\n\r\n    _Compressed_pair<_Alty, _Scary_val> _Mypair;\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Iter, class _Alloc = allocator<_Iter_value_t<_Iter>>,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>>, int> = 0>\r\ndeque(_Iter, _Iter, _Alloc = _Alloc()) -> deque<_Iter_value_t<_Iter>, _Alloc>;\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc = allocator<_RANGES range_value_t<_Rng>>>\r\ndeque(from_range_t, _Rng&&, _Alloc = _Alloc()) -> deque<_RANGES range_value_t<_Rng>, _Alloc>;\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc>\r\nvoid swap(deque<_Ty, _Alloc>& _Left, deque<_Ty, _Alloc>& _Right) noexcept /* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc>\r\n_NODISCARD bool operator==(const deque<_Ty, _Alloc>& _Left, const deque<_Ty, _Alloc>& _Right) {\r\n    return _Left.size() == _Right.size()\r\n        && _STD equal(_Left._Unchecked_begin(), _Left._Unchecked_end(), _Right._Unchecked_begin());\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty, class _Alloc>\r\n_NODISCARD _Synth_three_way_result<_Ty> operator<=>(const deque<_Ty, _Alloc>& _Left, const deque<_Ty, _Alloc>& _Right) {\r\n    return _STD lexicographical_compare_three_way(_Left._Unchecked_begin(), _Left._Unchecked_end(),\r\n        _Right._Unchecked_begin(), _Right._Unchecked_end(), _Synth_three_way{});\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD bool operator!=(const deque<_Ty, _Alloc>& _Left, const deque<_Ty, _Alloc>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD bool operator<(const deque<_Ty, _Alloc>& _Left, const deque<_Ty, _Alloc>& _Right) {\r\n    return _STD lexicographical_compare(\r\n        _Left._Unchecked_begin(), _Left._Unchecked_end(), _Right._Unchecked_begin(), _Right._Unchecked_end());\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD bool operator<=(const deque<_Ty, _Alloc>& _Left, const deque<_Ty, _Alloc>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD bool operator>(const deque<_Ty, _Alloc>& _Left, const deque<_Ty, _Alloc>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD bool operator>=(const deque<_Ty, _Alloc>& _Left, const deque<_Ty, _Alloc>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty, class _Alloc, class _Uty>\r\ndeque<_Ty, _Alloc>::size_type erase(deque<_Ty, _Alloc>& _Cont, const _Uty& _Val) {\r\n    return _STD _Erase_remove(_Cont, _Val);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc, class _Pr>\r\ndeque<_Ty, _Alloc>::size_type erase_if(deque<_Ty, _Alloc>& _Cont, _Pr _Pred) {\r\n    return _STD _Erase_remove_if(_Cont, _STD _Pass_fn(_Pred));\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX17\r\nnamespace pmr {\r\n    _EXPORT_STD template <class _Ty>\r\n    using deque = _STD deque<_Ty, polymorphic_allocator<_Ty>>;\r\n} // namespace pmr\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Ty, class _Alloc>\r\nconstexpr bool _Has_guaranteed_push_back<deque<_Ty, _Alloc>> = true;\r\n\r\ntemplate <class _Ty, class _Alloc>\r\nconstexpr bool _Has_guaranteed_append_range<deque<_Ty, _Alloc>> = true;\r\n#endif // _HAS_CXX23\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _DEQUE_\r\n"
  },
  {
    "path": "stl/inc/exception",
    "content": "// exception standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _EXCEPTION_\r\n#define _EXCEPTION_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <cstdlib>\r\n#include <type_traits>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\n#if _HAS_DEPRECATED_UNCAUGHT_EXCEPTION\r\n_EXPORT_STD extern \"C++\" _CXX17_DEPRECATE_UNCAUGHT_EXCEPTION _NODISCARD _CRTIMP2_PURE bool __CLRCALL_PURE_OR_CDECL\r\n    uncaught_exception() noexcept;\r\n#endif // _HAS_DEPRECATED_UNCAUGHT_EXCEPTION\r\n_EXPORT_STD extern \"C++\" _NODISCARD _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL uncaught_exceptions() noexcept;\r\n\r\n_STD_END\r\n\r\n#if _HAS_EXCEPTIONS\r\n\r\n#include <malloc.h> // TRANSITION, VSO-2048380: This is unnecessary, but many projects assume it as of 2024-04-29\r\n#include <vcruntime_exception.h>\r\n\r\n_STD_BEGIN\r\n\r\n_EXPORT_STD using ::terminate;\r\n\r\n#ifndef _M_CEE_PURE\r\n_EXPORT_STD using ::set_terminate;\r\n_EXPORT_STD using ::terminate_handler;\r\n\r\n_EXPORT_STD _NODISCARD inline terminate_handler __CRTDECL get_terminate() noexcept {\r\n    // get current terminate handler\r\n    return _get_terminate();\r\n}\r\n#endif // !defined(_M_CEE_PURE)\r\n\r\n#if _HAS_UNEXPECTED\r\nusing ::unexpected;\r\n\r\n#ifndef _M_CEE_PURE\r\nusing ::set_unexpected;\r\nusing ::unexpected_handler;\r\n\r\n_NODISCARD inline unexpected_handler __CRTDECL get_unexpected() noexcept {\r\n    // get current unexpected handler\r\n    return _get_unexpected();\r\n}\r\n#endif // !defined(_M_CEE_PURE)\r\n#endif // _HAS_UNEXPECTED\r\n\r\n_STD_END\r\n\r\n#else // ^^^ _HAS_EXCEPTIONS / !_HAS_EXCEPTIONS vvv\r\n\r\n#pragma push_macro(\"stdext\")\r\n#undef stdext\r\n\r\n#define _STDEXT_BEGIN      \\\r\n    _EXTERN_CXX_WORKAROUND \\\r\n    namespace stdext {\r\n\r\n#define _STDEXT_END \\\r\n    }               \\\r\n    _END_EXTERN_CXX_WORKAROUND\r\n\r\n#define _STDEXT ::stdext::\r\n\r\n_STDEXT_BEGIN\r\nclass _NODISCARD exception;\r\n_STDEXT_END\r\n\r\n_STD_BEGIN\r\n\r\n_EXPORT_STD using _STDEXT exception;\r\n\r\nusing _Prhand = void(__cdecl*)(const exception&);\r\n\r\nextern _CRTIMP2_PURE_IMPORT _Prhand _Raise_handler; // pointer to raise handler\r\n\r\n_STD_END\r\n\r\n_STDEXT_BEGIN\r\nclass _NODISCARD exception { // base of all library exceptions\r\npublic:\r\n    static _STD _Prhand _Set_raise_handler(_STD _Prhand _Pnew) { // register a handler for _Raise calls\r\n        const _STD _Prhand _Pold = _STD _Raise_handler;\r\n        _STD _Raise_handler      = _Pnew;\r\n        return _Pold;\r\n    }\r\n\r\n    // this constructor is necessary to compile\r\n    // successfully header new for _HAS_EXCEPTIONS==0 scenario\r\n    explicit __CLR_OR_THIS_CALL exception(const char* _Message = \"unknown\", int = 1) noexcept : _Ptr(_Message) {}\r\n\r\n    __CLR_OR_THIS_CALL exception(const exception& _Right) noexcept : _Ptr(_Right._Ptr) {}\r\n\r\n    exception& __CLR_OR_THIS_CALL operator=(const exception& _Right) noexcept {\r\n        _Ptr = _Right._Ptr;\r\n        return *this;\r\n    }\r\n\r\n    virtual __CLR_OR_THIS_CALL ~exception() noexcept {}\r\n\r\n    _NODISCARD virtual const char* __CLR_OR_THIS_CALL what() const noexcept { // return pointer to message string\r\n        return _Ptr ? _Ptr : \"unknown exception\";\r\n    }\r\n\r\n    [[noreturn]] void __CLR_OR_THIS_CALL _Raise() const { // raise the exception\r\n        if (_STD _Raise_handler) {\r\n            (*_STD _Raise_handler)(*this); // call raise handler if present\r\n        }\r\n\r\n        _Doraise(); // call the protected virtual\r\n        _RAISE(*this); // raise this exception\r\n    }\r\n\r\nprotected:\r\n    virtual void __CLR_OR_THIS_CALL _Doraise() const {} // perform class-specific exception handling\r\n\r\n    const char* _Ptr; // the message pointer\r\n};\r\n\r\nclass _NODISCARD bad_exception : public exception { // base of all bad exceptions\r\npublic:\r\n    __CLR_OR_THIS_CALL bad_exception(const char* _Message = \"bad exception\") noexcept : exception(_Message) {}\r\n\r\n    __CLR_OR_THIS_CALL ~bad_exception() noexcept override {}\r\n\r\nprotected:\r\n    void __CLR_OR_THIS_CALL _Doraise() const override { // raise this exception\r\n        _RAISE(*this);\r\n    }\r\n};\r\n\r\nclass _NODISCARD bad_array_new_length;\r\n\r\nclass _NODISCARD bad_alloc : public exception { // base of all bad allocation exceptions\r\npublic:\r\n    __CLR_OR_THIS_CALL bad_alloc() noexcept\r\n        : exception(\"bad allocation\", 1) {} // construct from message string with no memory allocation\r\n\r\n    __CLR_OR_THIS_CALL ~bad_alloc() noexcept override {}\r\n\r\nprivate:\r\n    friend bad_array_new_length;\r\n\r\n    __CLR_OR_THIS_CALL bad_alloc(const char* _Message) noexcept\r\n        : exception(_Message, 1) {} // construct from message string with no memory allocation\r\n\r\nprotected:\r\n    void __CLR_OR_THIS_CALL _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n};\r\n\r\nclass _NODISCARD bad_array_new_length : public bad_alloc {\r\npublic:\r\n    bad_array_new_length() noexcept : bad_alloc(\"bad array new length\") {}\r\n};\r\n\r\n_STDEXT_END\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD using terminate_handler = void(__cdecl*)();\r\n\r\n_EXPORT_STD inline terminate_handler __CRTDECL set_terminate(terminate_handler) noexcept {\r\n    // register a terminate handler\r\n    return nullptr;\r\n}\r\n\r\n_EXPORT_STD [[noreturn]] inline void __CRTDECL terminate() noexcept {\r\n    // handle exception termination\r\n    _CSTD abort();\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline terminate_handler __CRTDECL get_terminate() noexcept {\r\n    // get current terminate handler\r\n    return nullptr;\r\n}\r\n\r\n#if _HAS_UNEXPECTED\r\nusing unexpected_handler = void(__cdecl*)();\r\n\r\ninline unexpected_handler __CRTDECL set_unexpected(unexpected_handler) noexcept {\r\n    // register an unexpected handler\r\n    return nullptr;\r\n}\r\n\r\ninline void __CRTDECL unexpected() {} // handle unexpected exception\r\n\r\n_NODISCARD inline unexpected_handler __CRTDECL get_unexpected() noexcept {\r\n    // get current unexpected handler\r\n    return nullptr;\r\n}\r\n#endif // _HAS_UNEXPECTED\r\n\r\n_EXPORT_STD using _STDEXT bad_alloc;\r\n_EXPORT_STD using _STDEXT bad_array_new_length;\r\n_EXPORT_STD using _STDEXT bad_exception;\r\n\r\n_STD_END\r\n\r\n#undef _STDEXT_BEGIN\r\n#undef _STDEXT_END\r\n#undef _STDEXT\r\n\r\n#pragma pop_macro(\"stdext\")\r\n\r\n#endif // ^^^ !_HAS_EXCEPTIONS ^^^\r\n\r\nextern \"C++\" _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL __ExceptionPtrCreate(_Out_ void*) noexcept;\r\nextern \"C++\" _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL __ExceptionPtrDestroy(_Inout_ void*) noexcept;\r\nextern \"C++\" _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL __ExceptionPtrCopy(_Out_ void*, _In_ const void*) noexcept;\r\nextern \"C++\" _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL __ExceptionPtrAssign(_Inout_ void*, _In_ const void*) noexcept;\r\nextern \"C++\" _CRTIMP2_PURE bool __CLRCALL_PURE_OR_CDECL __ExceptionPtrCompare(\r\n    _In_ const void*, _In_ const void*) noexcept;\r\nextern \"C++\" _CRTIMP2_PURE bool __CLRCALL_PURE_OR_CDECL __ExceptionPtrToBool(_In_ const void*) noexcept;\r\nextern \"C++\" _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL __ExceptionPtrSwap(_Inout_ void*, _Inout_ void*) noexcept;\r\nextern \"C++\" _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL __ExceptionPtrCurrentException(void*) noexcept;\r\nextern \"C++\" [[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL __ExceptionPtrRethrow(_In_ const void*);\r\nextern \"C++\" _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL __ExceptionPtrCopyException(\r\n    _Inout_ void*, _In_ const void*, _In_ const void*) noexcept;\r\n\r\n_STD_BEGIN\r\n\r\n_EXPORT_STD class exception_ptr {\r\npublic:\r\n    exception_ptr() noexcept {\r\n        __ExceptionPtrCreate(this);\r\n    }\r\n\r\n    exception_ptr(nullptr_t) noexcept {\r\n        __ExceptionPtrCreate(this);\r\n    }\r\n\r\n    ~exception_ptr() noexcept {\r\n        __ExceptionPtrDestroy(this);\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n        const auto _Tombstone{reinterpret_cast<void*>(_MSVC_STL_UINTPTR_TOMBSTONE_VALUE)};\r\n        _Data1 = _Tombstone;\r\n        _Data2 = _Tombstone;\r\n#endif // _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n    }\r\n\r\n    exception_ptr(const exception_ptr& _Rhs) noexcept {\r\n        __ExceptionPtrCopy(this, &_Rhs);\r\n    }\r\n\r\n    exception_ptr& operator=(const exception_ptr& _Rhs) noexcept {\r\n        __ExceptionPtrAssign(this, &_Rhs);\r\n        return *this;\r\n    }\r\n\r\n    exception_ptr& operator=(nullptr_t) noexcept {\r\n        exception_ptr _Ptr;\r\n        __ExceptionPtrAssign(this, &_Ptr);\r\n        return *this;\r\n    }\r\n\r\n    explicit operator bool() const noexcept {\r\n        return __ExceptionPtrToBool(this);\r\n    }\r\n\r\n    static exception_ptr _Copy_exception(_In_ void* _Except, _In_ const void* _Ptr) {\r\n        exception_ptr _Retval;\r\n        if (!_Ptr) {\r\n            // unsupported exceptions\r\n            return _Retval;\r\n        }\r\n        __ExceptionPtrCopyException(&_Retval, _Except, _Ptr);\r\n        return _Retval;\r\n    }\r\n\r\n    friend void swap(exception_ptr& _Lhs, exception_ptr& _Rhs) noexcept {\r\n        __ExceptionPtrSwap(&_Lhs, &_Rhs);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const exception_ptr& _Lhs, const exception_ptr& _Rhs) noexcept {\r\n        return __ExceptionPtrCompare(&_Lhs, &_Rhs);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const exception_ptr& _Lhs, nullptr_t) noexcept {\r\n        return !_Lhs;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator==(nullptr_t, const exception_ptr& _Rhs) noexcept {\r\n        return !_Rhs;\r\n    }\r\n\r\n    _NODISCARD friend bool operator!=(const exception_ptr& _Lhs, const exception_ptr& _Rhs) noexcept {\r\n        return !(_Lhs == _Rhs);\r\n    }\r\n\r\n    _NODISCARD friend bool operator!=(const exception_ptr& _Lhs, nullptr_t) noexcept {\r\n        return !(_Lhs == nullptr);\r\n    }\r\n\r\n    _NODISCARD friend bool operator!=(nullptr_t, const exception_ptr& _Rhs) noexcept {\r\n        return !(nullptr == _Rhs);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\nprivate:\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wunused-private-field\"\r\n#endif // defined(__clang__)\r\n    void* _Data1{};\r\n    void* _Data2{};\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n};\r\n\r\n_EXPORT_STD _NODISCARD inline exception_ptr current_exception() noexcept {\r\n    exception_ptr _Retval;\r\n    __ExceptionPtrCurrentException(&_Retval);\r\n    return _Retval;\r\n}\r\n\r\n_EXPORT_STD [[noreturn]] inline void rethrow_exception(_In_ exception_ptr _Ptr) {\r\n    __ExceptionPtrRethrow(&_Ptr);\r\n}\r\n\r\ntemplate <class _Ex>\r\nvoid* __GetExceptionInfo(_Ex);\r\n\r\n_EXPORT_STD template <class _Ex>\r\n_NODISCARD_SMART_PTR_ALLOC exception_ptr make_exception_ptr(_Ex _Except) noexcept {\r\n    return exception_ptr::_Copy_exception(_STD addressof(_Except), __GetExceptionInfo(_Except));\r\n}\r\n\r\n_EXPORT_STD class nested_exception { // wrap an exception_ptr\r\npublic:\r\n    nested_exception() noexcept : _Exc(_STD current_exception()) {}\r\n\r\n    nested_exception(const nested_exception&) noexcept            = default;\r\n    nested_exception& operator=(const nested_exception&) noexcept = default;\r\n    virtual ~nested_exception() noexcept {}\r\n\r\n    [[noreturn]] void rethrow_nested() const { // throw wrapped exception_ptr\r\n        if (_Exc) {\r\n            _STD rethrow_exception(_Exc);\r\n        } else {\r\n            _STD terminate(); // per N4950 [except.nested]/4\r\n        }\r\n    }\r\n\r\n    _NODISCARD exception_ptr nested_ptr() const noexcept { // return wrapped exception_ptr\r\n        return _Exc;\r\n    }\r\n\r\nprivate:\r\n    exception_ptr _Exc;\r\n};\r\n\r\ntemplate <class _Uty>\r\nstruct _With_nested_v2 : _Uty, nested_exception { // glue user exception to nested_exception\r\n    template <class _Ty>\r\n    explicit _With_nested_v2(_Ty&& _Arg)\r\n        : _Uty(_STD forward<_Ty>(_Arg)), nested_exception() {} // store user exception and current_exception()\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n[[noreturn]] void throw_with_nested(_Ty&& _Arg) {\r\n    // throw user exception, glued to nested_exception if possible\r\n    using _Uty = decay_t<_Ty>;\r\n\r\n    if constexpr (is_class_v<_Uty> && !is_base_of_v<nested_exception, _Uty> && !is_final_v<_Uty>) {\r\n        // throw user exception glued to nested_exception\r\n        _THROW(_With_nested_v2<_Uty>(_STD forward<_Ty>(_Arg)));\r\n    } else {\r\n        // throw user exception by itself\r\n        _THROW(_STD forward<_Ty>(_Arg));\r\n    }\r\n}\r\n\r\n#ifdef _CPPRTTI\r\n_EXPORT_STD template <class _Ty>\r\nvoid rethrow_if_nested(const _Ty& _Arg) {\r\n    // detect nested_exception inheritance\r\n    constexpr bool _Can_use_dynamic_cast =\r\n        is_polymorphic_v<_Ty> && (!is_base_of_v<nested_exception, _Ty> || is_convertible_v<_Ty*, nested_exception*>);\r\n\r\n    if constexpr (_Can_use_dynamic_cast) {\r\n        const auto _Nested = dynamic_cast<const nested_exception*>(_STD addressof(_Arg));\r\n\r\n        if (_Nested) {\r\n            _Nested->rethrow_nested();\r\n        }\r\n    }\r\n}\r\n#else // ^^^ defined(_CPPRTTI) / !defined(_CPPRTTI) vvv\r\n_EXPORT_STD template <class _Ty>\r\nvoid rethrow_if_nested(const _Ty&) = delete; // requires /GR option\r\n#endif // ^^^ !defined(_CPPRTTI) ^^^\r\n\r\n_EXPORT_STD class _NODISCARD bad_variant_access : public exception {\r\n    // exception for visit of a valueless variant or get<I> on a variant with index() != I\r\npublic:\r\n    bad_variant_access() noexcept = default;\r\n\r\n    _NODISCARD const char* __CLR_OR_THIS_CALL what() const noexcept override {\r\n        return \"bad variant access\";\r\n    }\r\n\r\n#if !_HAS_EXCEPTIONS\r\nprotected:\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n#endif // ^^^ !_HAS_EXCEPTIONS ^^^\r\n};\r\n\r\n[[noreturn]] inline void _Throw_bad_variant_access() {\r\n    _THROW(bad_variant_access{});\r\n}\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _EXCEPTION_\r\n"
  },
  {
    "path": "stl/inc/execution",
    "content": "// execution standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _EXECUTION_\r\n#define _EXECUTION_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX17\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <execution> are available only with C++17 or later.\");\r\n#else // ^^^ !_HAS_CXX17 / _HAS_CXX17 vvv\r\n#include <algorithm>\r\n#include <atomic>\r\n#include <memory>\r\n#include <mutex>\r\n#include <numeric>\r\n#include <queue>\r\n#include <vector>\r\n#include <xbit_ops.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\nextern \"C\" {\r\n#ifdef _M_CEE\r\nusing __std_TP_WORK              = void;\r\nusing __std_TP_CALLBACK_INSTANCE = void;\r\nusing __std_TP_CALLBACK_ENVIRON  = void;\r\n#else // ^^^ defined(_M_CEE) / !defined(_M_CEE) vvv\r\nstruct __std_TP_WORK; // not defined\r\nstruct __std_TP_CALLBACK_INSTANCE; // not defined\r\nstruct __std_TP_CALLBACK_ENVIRON; // not defined\r\n#endif // ^^^ !defined(_M_CEE) ^^^\r\n\r\nusing __std_PTP_WORK              = __std_TP_WORK*;\r\nusing __std_PTP_CALLBACK_INSTANCE = __std_TP_CALLBACK_INSTANCE*;\r\nusing __std_PTP_CALLBACK_ENVIRON  = __std_TP_CALLBACK_ENVIRON*;\r\n\r\n_NODISCARD unsigned int __stdcall __std_parallel_algorithms_hw_threads() noexcept;\r\n\r\nusing __std_PTP_WORK_CALLBACK = void(__stdcall*)(\r\n    _Inout_ __std_PTP_CALLBACK_INSTANCE, _Inout_opt_ void*, _Inout_ __std_PTP_WORK);\r\n\r\n_NODISCARD __std_PTP_WORK __stdcall __std_create_threadpool_work(\r\n    _In_ __std_PTP_WORK_CALLBACK, _Inout_opt_ void*, _In_opt_ __std_PTP_CALLBACK_ENVIRON) noexcept;\r\n\r\nvoid __stdcall __std_submit_threadpool_work(_Inout_ __std_PTP_WORK) noexcept;\r\n\r\nvoid __stdcall __std_bulk_submit_threadpool_work(_Inout_ __std_PTP_WORK, _In_ size_t) noexcept;\r\n\r\nvoid __stdcall __std_close_threadpool_work(_Inout_ __std_PTP_WORK) noexcept;\r\n\r\nvoid __stdcall __std_wait_for_threadpool_work_callbacks(_Inout_ __std_PTP_WORK, _In_ int) noexcept;\r\n\r\nvoid __stdcall __std_execution_wait_on_uchar(\r\n    _In_ const volatile unsigned char* _Address, _In_ unsigned char _Compare) noexcept;\r\n\r\nvoid __stdcall __std_execution_wake_by_address_all(_In_ const volatile void* _Address) noexcept;\r\n} // extern \"C\"\r\n\r\n_STD_BEGIN\r\ninline constexpr size_t _Oversubscription_multiplier = 32;\r\ninline constexpr size_t _Oversubmission_multiplier   = 4;\r\ninline constexpr size_t _Still_active                = static_cast<size_t>(-1);\r\n\r\nnamespace execution {\r\n    _EXPORT_STD class sequenced_policy {\r\n        // indicates support for only sequential execution, and requests termination on exceptions\r\n    public:\r\n        explicit sequenced_policy() = default; // per LWG-4273\r\n\r\n        using _Standard_execution_policy   = int;\r\n        static constexpr bool _Parallelize = false;\r\n        static constexpr bool _Ivdep       = false;\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr sequenced_policy seq{};\r\n\r\n    _EXPORT_STD class parallel_policy {\r\n        // indicates support by element access functions for parallel execution with parallel forward progress\r\n        // guarantees, and requests termination on exceptions\r\n    public:\r\n        explicit parallel_policy() = default; // per LWG-4273\r\n\r\n        using _Standard_execution_policy   = int;\r\n        static constexpr bool _Parallelize = true;\r\n        static constexpr bool _Ivdep       = true;\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr parallel_policy par{};\r\n\r\n    _EXPORT_STD class parallel_unsequenced_policy {\r\n        // indicates support by element access functions for parallel execution with weakly parallel forward progress\r\n        // guarantees, and requests termination on exceptions\r\n        //\r\n        // (at this time, equivalent to parallel_policy)\r\n    public:\r\n        explicit parallel_unsequenced_policy() = default; // per LWG-4273\r\n\r\n        using _Standard_execution_policy   = int;\r\n        static constexpr bool _Parallelize = true;\r\n        static constexpr bool _Ivdep       = true;\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr parallel_unsequenced_policy par_unseq{};\r\n\r\n#if _HAS_CXX20\r\n    _EXPORT_STD class unsequenced_policy {\r\n        // indicates support by element access functions for weakly parallel forward progress guarantees, and for\r\n        // executing interleaved on the same thread, and requests termination on exceptions\r\n        //\r\n        // (at this time, equivalent to sequenced_policy except for for_each(_n), destroy(_n),\r\n        // uninitialized_default_construct(_n), and uninitialized_value_construct(_n))\r\n    public:\r\n        explicit unsequenced_policy() = default; // per LWG-4273\r\n\r\n        using _Standard_execution_policy   = int;\r\n        static constexpr bool _Parallelize = false;\r\n        static constexpr bool _Ivdep       = true;\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr unsequenced_policy unseq{};\r\n#endif // _HAS_CXX20\r\n\r\n} // namespace execution\r\n\r\n// All of the above are execution policies:\r\ntemplate <>\r\nstruct is_execution_policy<execution::sequenced_policy> : true_type {};\r\n\r\ntemplate <>\r\nstruct is_execution_policy<execution::parallel_policy> : true_type {};\r\n\r\ntemplate <>\r\nstruct is_execution_policy<execution::parallel_unsequenced_policy> : true_type {};\r\n\r\n#if _HAS_CXX20\r\ntemplate <>\r\nstruct is_execution_policy<execution::unsequenced_policy> : true_type {};\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Ty, class _UnaryOp, class _FwdIt>\r\nvoid _Construct_in_place_by_transform_deref(_Ty& _Val, _UnaryOp _Transform_op, const _FwdIt& _Iter) {\r\n    ::new (static_cast<void*>(_STD addressof(_Val))) _Ty(_Transform_op(*_Iter));\r\n}\r\n\r\ntemplate <class _Ty, class _BinaryOp, class _ArgTy>\r\nvoid _Implicitly_construct_in_place_by_binary_op(_Ty& _Val, _BinaryOp _Reduce_op, _ArgTy& _Left, _ArgTy& _Right) {\r\n    ::new (static_cast<void*>(_STD addressof(_Val))) _Ty([&]() -> _Ty { return _Reduce_op(_Left, _Right); }());\r\n}\r\n\r\ntemplate <class _Ty, class _BinaryOp, class _LeftTy, class _FwdIt>\r\nvoid _Implicitly_construct_in_place_by_binary_op_deref_rhs(\r\n    _Ty& _Val, _BinaryOp _Reduce_op, _LeftTy&& _Left, const _FwdIt& _Iter) {\r\n    ::new (static_cast<void*>(_STD addressof(_Val)))\r\n        _Ty([&]() -> _Ty { return _Reduce_op(_STD forward<_LeftTy>(_Left), *_Iter); }());\r\n}\r\n\r\ntemplate <class _Ty, class _BinaryOp, class _UnaryOp, class _LeftTy, class _FwdIt>\r\nvoid _Implicitly_construct_in_place_by_binary_op_transform_deref_rhs(\r\n    _Ty& _Val, _BinaryOp _Reduce_op, _UnaryOp _Transform_op, _LeftTy&& _Left, const _FwdIt& _Iter) {\r\n    ::new (static_cast<void*>(_STD addressof(_Val)))\r\n        _Ty([&]() -> _Ty { return _Reduce_op(_STD forward<_LeftTy>(_Left), _Transform_op(*_Iter)); }());\r\n}\r\n\r\nstruct _NODISCARD _Parallelism_resources_exhausted : exception {\r\n    _NODISCARD const char* __CLR_OR_THIS_CALL what() const noexcept override {\r\n        // return pointer to message string\r\n        return \"Insufficient resources were available to use additional parallelism.\";\r\n    }\r\n\r\n#if !_HAS_EXCEPTIONS\r\nprotected:\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n#endif // !_HAS_EXCEPTIONS\r\n};\r\n\r\n[[noreturn]] inline void _Throw_parallelism_resources_exhausted() {\r\n    _THROW(_Parallelism_resources_exhausted{});\r\n}\r\n\r\nenum class _Cancellation_status : bool { _Running, _Canceled };\r\n\r\nstruct _Cancellation_token {\r\n    atomic<_Cancellation_status> _Is_canceled_impl{_Cancellation_status::_Running};\r\n\r\n    bool _Is_canceled() const {\r\n        return _Is_canceled_impl.load() == _Cancellation_status::_Canceled;\r\n    }\r\n\r\n    bool _Is_canceled_relaxed() const {\r\n        return _Is_canceled_impl.load(memory_order_relaxed) == _Cancellation_status::_Canceled;\r\n    }\r\n\r\n    void _Cancel() {\r\n        _Is_canceled_impl.store(_Cancellation_status::_Canceled);\r\n    }\r\n\r\n    _Cancellation_status _Status() const {\r\n        return _Is_canceled_impl.load();\r\n    }\r\n};\r\n\r\nclass _Work_ptr {\r\npublic:\r\n    template <class _Work, enable_if_t<!is_same_v<remove_cv_t<_Work>, _Work_ptr>, int> = 0>\r\n    explicit _Work_ptr(_Work& _Operation)\r\n        : _Ptp_work(::__std_create_threadpool_work(&_Work::_Threadpool_callback, _STD addressof(_Operation), nullptr)) {\r\n        // register work with the thread pool\r\n        // usually, after _Work_ptr is constructed, a parallel algorithm runs to completion or terminates\r\n        static_assert(noexcept(_Work::_Threadpool_callback(_STD declval<__std_PTP_CALLBACK_INSTANCE>(),\r\n                          _STD declval<void*>(), _STD declval<__std_PTP_WORK>())),\r\n            \"Threadpool callbacks must be noexcept to enforce termination\");\r\n        if (!_Ptp_work) {\r\n            // usually, the last place a bailout to serial execution can occur\r\n            _Throw_parallelism_resources_exhausted();\r\n        }\r\n    }\r\n\r\n    _Work_ptr(const _Work_ptr&)            = delete;\r\n    _Work_ptr& operator=(const _Work_ptr&) = delete;\r\n\r\n    ~_Work_ptr() noexcept {\r\n        __std_wait_for_threadpool_work_callbacks(_Ptp_work, true);\r\n        __std_close_threadpool_work(_Ptp_work);\r\n    }\r\n\r\n    void _Submit() const noexcept {\r\n        __std_submit_threadpool_work(_Ptp_work);\r\n    }\r\n\r\n    void _Submit(const size_t _Submissions) const noexcept {\r\n        __std_bulk_submit_threadpool_work(_Ptp_work, _Submissions);\r\n    }\r\n\r\n    void _Submit_for_chunks(const size_t _Hw_threads, const size_t _Chunks) const noexcept {\r\n        _Submit((_STD min) (_Hw_threads * _Oversubmission_multiplier, _Chunks));\r\n    }\r\n\r\nprivate:\r\n    __std_PTP_WORK _Ptp_work;\r\n};\r\n\r\ntemplate <class _Work>\r\nvoid _Run_available_chunked_work(_Work& _Operation) {\r\n    while (_Operation._Process_chunk() == _Cancellation_status::_Running) { // process while there are chunks remaining\r\n    }\r\n}\r\n\r\ntemplate <class _Work>\r\nvoid _Run_chunked_parallel_work(const size_t _Hw_threads, _Work& _Operation) {\r\n    // process chunks of _Operation on the thread pool\r\n    const _Work_ptr _Work_op{_Operation};\r\n    // setup complete, hereafter nothrow or terminate\r\n    _Work_op._Submit_for_chunks(_Hw_threads, _Operation._Team._Chunks);\r\n    _STD _Run_available_chunked_work(_Operation);\r\n}\r\n\r\n// The parallel algorithms library below assumes that distance(first, last) fits into a size_t;\r\n// forward iterators must refer to objects in memory and therefore must meet this requirement.\r\n//\r\n// Unlike the serial algorithms library, which can stay in the difference_type domain, here we need\r\n// to talk with vector (which speaks size_t), and with Windows, which wants to speak unsigned int.\r\n//\r\n// This assumption should be localized to the chunk calculation functions; the rest of\r\n// the library assumes that chunk numbers can be static_cast into the difference_type domain.\r\n\r\ntemplate <class _Diff>\r\nconstexpr size_t _Get_chunked_work_chunk_count(const size_t _Hw_threads, const _Diff _Count) {\r\n    // get the number of chunks to break work into to parallelize\r\n    const auto _Size_count = static_cast<size_t>(_Count); // no overflow due to forward iterators\r\n    // we assume _Hw_threads * _Oversubscription_multiplier does not overflow\r\n    return (_STD min) (_Hw_threads * _Oversubscription_multiplier, _Size_count);\r\n}\r\n\r\ntemplate <class _Diff>\r\nconstexpr size_t _Get_least2_chunked_work_chunk_count(const size_t _Hw_threads, const _Diff _Count) {\r\n    // get the number of chunks to break work into to parallelize, assuming chunks must be of size 2\r\n    const auto _Size_count = static_cast<size_t>(_Count); // no overflow due to forward iterators\r\n    // we assume _Hw_threads * _Oversubscription_multiplier does not overflow\r\n    return _Get_chunked_work_chunk_count(_Hw_threads, _Size_count / 2);\r\n}\r\n\r\nstruct _Parallelism_allocate_traits {\r\n    __declspec(allocator) static void* _Allocate(const size_t _Bytes) {\r\n        void* _Result = ::operator new(_Bytes, nothrow);\r\n        if (!_Result) {\r\n            _Throw_parallelism_resources_exhausted();\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n#ifdef __cpp_aligned_new\r\n    __declspec(allocator) static void* _Allocate_aligned(const size_t _Bytes, const size_t _Align) {\r\n        void* _Result = ::operator new(_Bytes, align_val_t{_Align}, nothrow);\r\n        if (!_Result) {\r\n            _Throw_parallelism_resources_exhausted();\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n#endif // defined(__cpp_aligned_new)\r\n};\r\n\r\ntemplate <class _Ty = void>\r\nstruct _Parallelism_allocator {\r\n    using value_type = _Ty;\r\n\r\n    _Parallelism_allocator() = default;\r\n\r\n    template <class _Other>\r\n    constexpr _Parallelism_allocator(const _Parallelism_allocator<_Other>&) noexcept {}\r\n\r\n    _Ty* allocate(const size_t _Count) {\r\n        return static_cast<_Ty*>(\r\n            _Allocate<_New_alignof<_Ty>, _Parallelism_allocate_traits>(_Get_size_of_n<sizeof(_Ty)>(_Count)));\r\n    }\r\n\r\n    void deallocate(_Ty* const _Ptr, const size_t _Count) {\r\n        // no overflow check on the following multiply; we assume _Allocate did that check\r\n        _STD _Deallocate<_New_alignof<_Ty>>(_Ptr, sizeof(_Ty) * _Count);\r\n    }\r\n\r\n    template <class _Other>\r\n    bool operator==(const _Parallelism_allocator<_Other>&) const noexcept {\r\n        return true;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    template <class _Other>\r\n    bool operator!=(const _Parallelism_allocator<_Other>&) const noexcept {\r\n        return false;\r\n    }\r\n#endif // !_HAS_CXX20\r\n};\r\n\r\ntemplate <class _Ty>\r\nusing _Parallel_vector = vector<_Ty, _Parallelism_allocator<_Ty>>;\r\n\r\ntemplate <class _Ty>\r\nstruct _Generalized_sum_drop { // drop off point for GENERALIZED_SUM intermediate results\r\n    _Ty* _Data;\r\n    size_t _Slots;\r\n    atomic<size_t> _Frontier;\r\n\r\n    explicit _Generalized_sum_drop(const size_t _Slots)\r\n        : _Data(static_cast<_Ty*>(\r\n              _Allocate<_New_alignof<_Ty>, _Parallelism_allocate_traits>(_Get_size_of_n<sizeof(_Ty)>(_Slots)))),\r\n          _Slots(_Slots), _Frontier(0) {}\r\n\r\n    ~_Generalized_sum_drop() noexcept {\r\n        // pre: the caller has synchronized with all threads that modify _Data.\r\n        _STD _Destroy_range(begin(), end());\r\n        // no overflow check on the following multiply; we assume _Allocate did that check\r\n        _STD _Deallocate<_New_alignof<_Ty>>(_Data, sizeof(_Ty) * _Slots);\r\n    }\r\n\r\n    template <class... _Args>\r\n    void _Add_result(_Args&&... _Vals) noexcept /* terminates */ {\r\n        // constructs a _Ty in place with _Vals parameters perfectly forwarded\r\n        // pre: the number of results added is less than the size the drop was constructed with\r\n        const size_t _Target = _Frontier++;\r\n        _STD _Construct_in_place(_Data[_Target], _STD forward<_Args>(_Vals)...);\r\n    }\r\n\r\n    _Ty* begin() {\r\n        return _Data;\r\n    }\r\n\r\n    _Ty* end() {\r\n        return _Data + _Frontier.load(memory_order_relaxed);\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Atomic_is_usually_lock_free : bool_constant<atomic<_Ty>::is_always_lock_free> {\r\n    // deferred evaluation of atomic::is_always_lock_free\r\n};\r\n\r\ntemplate <class _FwdIt>\r\nconstexpr bool _Use_atomic_iterator = conjunction_v<bool_constant<_Is_ranges_random_iter_v<_FwdIt>>,\r\n    is_trivially_copyable<_FwdIt>, _Atomic_is_usually_lock_free<_FwdIt>>;\r\n\r\ntemplate <class _Ty>\r\nstruct _Parallel_choose_min_result { // parallel results collector which uses atomic<_Ty> to choose the minimum value\r\n    _Ty _Last;\r\n    atomic<_Ty> _Result;\r\n\r\n    explicit _Parallel_choose_min_result(_Ty _Last_) : _Last{_Last_}, _Result{_Last} {}\r\n\r\n    _Ty _Get_result() const { // load the imbued value\r\n        return _Result.load(memory_order_relaxed);\r\n    }\r\n\r\n    bool _Complete() const { // tests whether a result has been found\r\n        return _Result.load(memory_order_relaxed) != _Last;\r\n    }\r\n\r\n    void _Imbue(size_t, const _Ty _Local_result) { // atomically sets the result to min(result, _Local_result)\r\n        _Ty _Expected{_Last};\r\n        while (!_Result.compare_exchange_weak(_Expected, _Local_result) && _Expected > _Local_result) { // keep trying\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Parallel_choose_max_result { // parallel results collector which uses atomic<_Ty> to choose the maximum value\r\n    _Ty _Last;\r\n    atomic<_Ty> _Result;\r\n\r\n    explicit _Parallel_choose_max_result(_Ty _Last_) : _Last{_Last_}, _Result{_Last} {}\r\n\r\n    _Ty _Get_result() const { // load the imbued value\r\n        return _Result.load(memory_order_relaxed);\r\n    }\r\n\r\n    bool _Complete() const { // tests whether a result has been found\r\n        return _Result.load(memory_order_relaxed) != _Last;\r\n    }\r\n\r\n    void _Imbue(size_t, const _Ty _Local_result) { // atomically sets the result to max(result, _Local_result)\r\n        _Ty _Expected{_Last};\r\n        if (_Result.compare_exchange_strong(_Expected, _Local_result)) {\r\n            return;\r\n        }\r\n\r\n        while (_Expected < _Local_result && !_Result.compare_exchange_weak(_Expected, _Local_result)) { // keep trying\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Parallel_choose_min_chunk {\r\n    // parallel results collector which uses atomic<chunk number> to choose the lowest chunk's result\r\n    _Ty _Result;\r\n    atomic<size_t> _Selected_chunk;\r\n    mutex _Mtx;\r\n\r\n    explicit _Parallel_choose_min_chunk(_Ty _Last) : _Result(_Last), _Selected_chunk{_Still_active}, _Mtx{} {}\r\n\r\n    _Ty _Get_result() const { // load the imbued value\r\n        return _Result;\r\n    }\r\n\r\n    bool _Complete() const { // tests whether a result has been found\r\n        return _Selected_chunk.load(memory_order_relaxed) != _Still_active;\r\n    }\r\n\r\n    void _Imbue(const size_t _Chunk, const _Ty _Local_result) {\r\n        // atomically sets the result to the lowest chunk's value\r\n        size_t _Expected = _Still_active;\r\n        while (!_Selected_chunk.compare_exchange_weak(_Expected, _Chunk)) {\r\n            // note: _Still_active is the maximum possible value, so it gets ignored implicitly\r\n            if (_Chunk > _Expected) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        lock_guard _Lck(_Mtx);\r\n        if (_Selected_chunk.load(memory_order_relaxed) == _Chunk) {\r\n            _Result = _Local_result;\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Parallel_choose_max_chunk {\r\n    // parallel results collector which uses atomic<chunk number> to choose the highest chunk's result\r\n    _Ty _Result;\r\n    atomic<size_t> _Selected_chunk;\r\n    mutex _Mtx;\r\n\r\n    explicit _Parallel_choose_max_chunk(_Ty _Last) : _Result(_Last), _Selected_chunk{_Still_active}, _Mtx{} {}\r\n\r\n    _Ty _Get_result() const { // load the imbued value\r\n        return _Result;\r\n    }\r\n\r\n    bool _Complete() const { // tests whether a result has been found\r\n        return _Selected_chunk.load(memory_order_relaxed) != _Still_active;\r\n    }\r\n\r\n    void _Imbue(const size_t _Chunk, const _Ty _Local_result) {\r\n        // atomically sets the result to the highest chunk's value\r\n        size_t _Expected = _Still_active;\r\n        while (!_Selected_chunk.compare_exchange_weak(_Expected, _Chunk)) {\r\n            // wrap _Still_active down to 0 so that only 1 branch is necessary:\r\n            if (_Chunk + 1 < _Expected + 1) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        lock_guard _Lck(_Mtx);\r\n        if (_Selected_chunk.load(memory_order_relaxed) == _Chunk) {\r\n            _Result = _Local_result;\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct alignas(_Ty) alignas(size_t) alignas(_Atomic_counter_t) _Circular_buffer { // work stealing deque extent type\r\n    static_assert(is_trivially_copyable_v<_Ty> && is_trivially_default_constructible_v<_Ty>,\r\n        \"Work stealing deques work only with trivial operations\");\r\n\r\n    size_t _Log_size;\r\n    _Atomic_counter_t _Ref_count;\r\n\r\n    void _Release() {\r\n        static_assert(is_trivially_destructible_v<_Circular_buffer>, \"global delete requires trivial destruction\");\r\n        if (_MT_DECR(_Ref_count) == 0) {\r\n            ::operator delete(this);\r\n        }\r\n    }\r\n\r\n    static _Circular_buffer* _Allocate_circular_buffer(const size_t _New_log_size) {\r\n        // allocate a circular buffer with space for 2^_New_log_size elements\r\n        if (_New_log_size >= 32) {\r\n            _Throw_parallelism_resources_exhausted();\r\n        }\r\n\r\n        const size_t _Count         = static_cast<size_t>(1) << _New_log_size;\r\n        constexpr size_t _Max_bytes = static_cast<size_t>(-1) - sizeof(_Circular_buffer);\r\n        if (_Max_bytes / sizeof(_Ty) < _Count) {\r\n            _Throw_parallelism_resources_exhausted();\r\n        }\r\n\r\n        const size_t _Result_bytes = _Count * sizeof(_Ty) + sizeof(_Circular_buffer);\r\n        static_assert(alignof(_Ty) <= alignof(max_align_t), \"incapable of supporting the requested alignment\");\r\n        const auto _Result  = static_cast<_Circular_buffer*>(::operator new(_Result_bytes));\r\n        _Result->_Log_size  = _New_log_size;\r\n        _Result->_Ref_count = 1;\r\n        return _Result;\r\n    }\r\n\r\n    static _Circular_buffer* _New_circular_buffer() { // allocate a circular buffer with a default number of elements\r\n        return _Allocate_circular_buffer(6); // start with 64 elements\r\n    }\r\n\r\n    _Ty* _Get_base() { // get the base address where the _Ty instances are stored\r\n        return reinterpret_cast<_Ty*>(this + 1);\r\n    }\r\n\r\n    const _Ty* _Get_base() const { // get the base address where the _Ty instances are stored\r\n        return reinterpret_cast<const _Ty*>(this + 1);\r\n    }\r\n\r\n    _Ty& _Subscript(const size_t _Idx) { // get a reference to the _Idxth element\r\n        const auto _Mask = (static_cast<size_t>(1) << _Log_size) - static_cast<size_t>(1);\r\n        return _Get_base()[_Idx & _Mask];\r\n    }\r\n\r\n    const _Ty& _Subscript(const size_t _Idx) const { // get a reference to the _Idxth element\r\n        const auto _Mask = (static_cast<size_t>(1) << _Log_size) - static_cast<size_t>(1);\r\n        return _Get_base()[_Idx & _Mask];\r\n    }\r\n\r\n    _Circular_buffer* _Grow(const size_t _Bottom, const size_t _Top) const {\r\n        // create a bigger _Circular_buffer suitable for use by a _Work_stealing_deque<_Ty> with bounds _Bottom and _Top\r\n        const size_t _New_log_size = _Log_size + 1;\r\n        _Circular_buffer* _Result  = _Allocate_circular_buffer(_New_log_size);\r\n        for (size_t _Idx = _Top; _Idx < _Bottom; ++_Idx) {\r\n            _Result->_Subscript(_Idx) = _Subscript(_Idx);\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nclass alignas(hardware_destructive_interference_size) _Work_stealing_deque {\r\n    // thread-local work-stealing deque, which allows efficient access from a single owner thread at the \"bottom\"\r\n    // of the queue, and any thread access to the \"top\" of the queue. Originally described in the paper\r\n    // \"Dynamic Circular Work-Stealing Deque\" by David Chase and Yossi Lev\r\npublic:\r\n    _Work_stealing_deque()                                       = default;\r\n    _Work_stealing_deque(const _Work_stealing_deque&)            = delete;\r\n    _Work_stealing_deque& operator=(const _Work_stealing_deque&) = delete;\r\n\r\n    ~_Work_stealing_deque() noexcept {\r\n        _Segment->_Release();\r\n    }\r\n\r\n    void _Push_bottom(_Ty& _Val) {\r\n        // attempts to push _Val onto the bottom of this queue\r\n        // may be accessed by owning thread only\r\n        const auto _Local_b = _Bottom.load();\r\n        if (_Local_b == SIZE_MAX) {\r\n            // we assume that any input range won't be divided into more than SIZE_MAX subproblems;\r\n            // treat overflow of that kind as OOM\r\n            _Throw_parallelism_resources_exhausted();\r\n        }\r\n\r\n        const auto _Local_t = _Top.load();\r\n        const auto _Size    = _Local_b - _Local_t;\r\n        if (_Size >= (static_cast<size_t>(1) << _Segment->_Log_size)) {\r\n            auto _New_segment = _Segment->_Grow(_Local_b, _Local_t);\r\n            _Circular_buffer<_Ty>* _Detached_segment;\r\n            {\r\n                lock_guard _Lck(_Segment_lock);\r\n                _Detached_segment = _STD exchange(_Segment, _New_segment);\r\n            } // unlock\r\n\r\n            _Detached_segment->_Release();\r\n        }\r\n\r\n        _Segment->_Subscript(_Local_b) = _Val;\r\n        _Bottom.store(_Local_b + 1U);\r\n    }\r\n\r\n    bool _Steal(_Ty& _Val) noexcept {\r\n        // attempt to pop an item from the top of this deque\r\n        // may be accessed by any thread\r\n        // returns false if the deque was empty and _Val is indeterminate; otherwise, returns true and sets _Val to the\r\n        // element retrieved from the top of the deque.\r\n        auto _Local_t = _Top.load();\r\n        size_t _Desired_t;\r\n        do {\r\n            if (_Bottom.load() <= _Local_t) { // deque was empty\r\n                return false;\r\n            }\r\n\r\n            _Circular_buffer<_Ty>* _Stealing_segment;\r\n            {\r\n                lock_guard _Lck(_Segment_lock);\r\n                _Stealing_segment = _Segment;\r\n                _MT_INCR(_Stealing_segment->_Ref_count);\r\n            }\r\n\r\n            _Val = _Stealing_segment->_Subscript(_Local_t); // speculative read/write data race\r\n            _Stealing_segment->_Release();\r\n            // The above is technically prohibited by the C++ memory model, but happens\r\n            // to be well defined on all hardware this implementation targets.\r\n            // Hardware with trap representations or similar must not use this implementation.\r\n            _Desired_t = _Local_t + 1U;\r\n        } while (!_Top.compare_exchange_strong(_Local_t, _Desired_t)); // if a data race occurred, try again\r\n\r\n        return true;\r\n    }\r\n\r\n    bool _Try_pop_bottom(_Ty& _Val) noexcept {\r\n        // attempt to pop an item from the bottom of this deque into _Val\r\n        // may be accessed by owning thread only\r\n        auto _Local_b = _Bottom.load();\r\n        if (_Local_b == 0) { // queue never contained any elements (should never happen)\r\n            return false;\r\n        }\r\n\r\n        --_Local_b;\r\n        _Bottom.store(_Local_b);\r\n        auto _Local_t = _Top.load();\r\n        if (_Local_b < _Local_t) { // all elements were stolen before we got here\r\n            _Bottom.store(_Local_t);\r\n            return false;\r\n        }\r\n\r\n        // memory model says following load is OK, since _Push_bottom can't run concurrently\r\n        _Val = _Segment->_Subscript(_Local_b);\r\n\r\n        if (_Local_b > _Local_t) {\r\n            // other threads only look at top, so we get the bottom without synchronization\r\n            return true;\r\n        }\r\n\r\n        // We're trying to read the last element that another thread may be trying to steal;\r\n        // see who gets to keep the element through _Top (effectively, steal from ourselves)\r\n        const auto _Desired_top = _Local_t + 1U;\r\n        if (_Top.compare_exchange_strong(_Local_t, _Desired_top)) {\r\n            _Bottom.store(_Desired_top);\r\n            return true;\r\n        } else {\r\n            _Bottom.store(_Local_t);\r\n            return false;\r\n        }\r\n    }\r\n\r\nprivate:\r\n    atomic<size_t> _Bottom{0}; // modified by only owning thread\r\n    atomic<size_t> _Top{0}; // modified by all threads\r\n    // clang-format off: clang-format 20 doesn't understand _Guarded_by_ and will damage the following code\r\n    _Guarded_by_(_Segment_lock) _Circular_buffer<_Ty>* _Segment { _Circular_buffer<_Ty>::_New_circular_buffer() };\r\n    // clang-format on\r\n    mutex _Segment_lock{};\r\n};\r\n\r\nenum class _Steal_result { _Success, _Abort, _Done };\r\n\r\ntemplate <class _Ty>\r\nstruct _Work_stealing_team;\r\n\r\ntemplate <class _Ty>\r\nstruct _Work_stealing_membership { // thread-local \"ticket\" that team members use to talk with a _Work_stealing_team\r\n    using _Diff = typename _Ty::difference_type;\r\n\r\n    size_t _Id;\r\n    _Work_stealing_team<_Ty>* _Team;\r\n    _Diff _Work_complete;\r\n\r\n    void _Push_bottom(_Ty& _Val) {\r\n        _Team->_Queues[_Id]._Push_bottom(_Val);\r\n    }\r\n\r\n    bool _Try_pop_bottom(_Ty& _Val) noexcept {\r\n        return _Team->_Queues[_Id]._Try_pop_bottom(_Val);\r\n    }\r\n\r\n    _Steal_result _Steal(_Ty& _Val) noexcept {\r\n        _Diff _Remaining;\r\n        const auto _Completed_this_time = _STD exchange(_Work_complete, {});\r\n        if (_Completed_this_time == 0) {\r\n            _Remaining = _Team->_Remaining_work.load();\r\n        } else {\r\n            _Remaining = _Team->_Remaining_work -= _Completed_this_time;\r\n        }\r\n\r\n        if (_Remaining == 0) {\r\n            return _Steal_result::_Done;\r\n        }\r\n\r\n        const size_t _High = _Team->_Queues_used.load() + 1;\r\n        size_t _Idx        = _Id;\r\n        for (;;) {\r\n            if (_Idx == 0) {\r\n                _Idx = _High;\r\n            }\r\n\r\n            --_Idx;\r\n            if (_Idx == _Id) {\r\n                return _Steal_result::_Abort;\r\n            }\r\n\r\n            if (_Team->_Queues[_Idx]._Steal(_Val)) {\r\n                return _Steal_result::_Success;\r\n            }\r\n        }\r\n    }\r\n\r\n    void _Leave() noexcept {\r\n        _Team->_Leave_team(_Id);\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Work_stealing_team { // inter-thread communication for threads working on a single task\r\n    using _Diff = typename _Ty::difference_type;\r\n\r\n    static _Parallel_vector<size_t> _Get_queues(const size_t _Queue_count) {\r\n        _Parallel_vector<size_t> _Result(_Queue_count);\r\n        _STD iota(_Result.begin(), _Result.end(), size_t{});\r\n        return _Result;\r\n    }\r\n\r\n    _Work_stealing_team(size_t _Threads, _Diff _Total_work)\r\n        : _Queues(_Threads), _Queues_used(0), _Remaining_work(_Total_work), _Available_mutex(),\r\n          _Available_queues(greater{}, _Get_queues(_Threads)) {} // register work with the thread pool\r\n\r\n    _Work_stealing_membership<_Ty> _Join_team() noexcept {\r\n        size_t _Id;\r\n        {\r\n            lock_guard _Lck(_Available_mutex);\r\n            _Id = _Available_queues.top();\r\n            _Available_queues.pop();\r\n        } // unlock\r\n\r\n        // set _Queues_used to the high water mark of queues used\r\n        size_t _High_water = _Queues_used.load();\r\n        while (_High_water < _Id && !_Queues_used.compare_exchange_weak(_High_water, _Id)) { // keep trying\r\n        }\r\n\r\n        return _Work_stealing_membership<_Ty>{_Id, this, 0};\r\n    }\r\n\r\n    void _Leave_team(size_t _Id) noexcept {\r\n        lock_guard _Lck(_Available_mutex);\r\n        _Available_queues.push(_Id);\r\n    }\r\n\r\n    _Parallel_vector<_Work_stealing_deque<_Ty>> _Queues;\r\n    atomic<size_t> _Queues_used;\r\n    atomic<_Diff> _Remaining_work;\r\n\r\n    mutex _Available_mutex;\r\n    priority_queue<size_t, _Parallel_vector<size_t>, greater<>> _Available_queues;\r\n};\r\n\r\ntemplate <class _Diff>\r\nstruct _Static_partition_key { // \"pointer\" identifying a static partition\r\n    size_t _Chunk_number; // In range [0, numeric_limits<_Diff>::max()]\r\n    _Diff _Start_at;\r\n    _Diff _Size;\r\n\r\n    explicit operator bool() const { // test if this is a valid key\r\n        return _Chunk_number != static_cast<size_t>(-1);\r\n    }\r\n};\r\n\r\ntemplate <class _Diff>\r\nstruct _Static_partition_team { // common data for all static partitioned ops\r\n    atomic<size_t> _Consumed_chunks;\r\n    size_t _Chunks;\r\n    _Diff _Count;\r\n    _Diff _Chunk_size;\r\n    _Diff _Unchunked_items;\r\n\r\n    _Static_partition_team(const _Diff _Count_, const size_t _Chunks_)\r\n        : _Consumed_chunks{0}, _Chunks{_Chunks_}, _Count{_Count_},\r\n          _Chunk_size{static_cast<_Diff>(_Count_ / static_cast<_Diff>(_Chunks_))},\r\n          _Unchunked_items{static_cast<_Diff>(_Count_ % static_cast<_Diff>(_Chunks_))} {\r\n        // Calculate common data for statically partitioning iterator ranges.\r\n        // pre: _Count_ >= _Chunks_ && _Chunks_ >= 1\r\n    }\r\n\r\n    _Static_partition_key<_Diff> _Get_chunk_key(const size_t _This_chunk) const {\r\n        const auto _This_chunk_diff = static_cast<_Diff>(_This_chunk);\r\n        auto _This_chunk_size       = _Chunk_size;\r\n        auto _This_chunk_start_at   = static_cast<_Diff>(_This_chunk_diff * _This_chunk_size);\r\n        if (_This_chunk_diff < _Unchunked_items) {\r\n            // chunks at index lower than _Unchunked_items get an extra item,\r\n            // and need to shift forward by all their predecessors' extra items\r\n            _This_chunk_start_at += _This_chunk_diff;\r\n            ++_This_chunk_size;\r\n        } else { // chunks without an extra item need to account for all the extra items\r\n            _This_chunk_start_at += _Unchunked_items;\r\n        }\r\n\r\n        return {_This_chunk, _This_chunk_start_at, _This_chunk_size};\r\n    }\r\n\r\n    _Diff _Get_chunk_offset(const size_t _This_chunk) const {\r\n        const auto _This_chunk_diff = static_cast<_Diff>(_This_chunk);\r\n        return _This_chunk_diff * _Chunk_size + (_STD min) (_This_chunk_diff, _Unchunked_items);\r\n    }\r\n\r\n    _Static_partition_key<_Diff> _Get_next_key() {\r\n        // retrieves the next static partition key to process, if it exists;\r\n        // otherwise, retrieves an invalid partition key\r\n        const auto _This_chunk = _Consumed_chunks++;\r\n        if (_This_chunk < _Chunks) {\r\n            return _Get_chunk_key(_This_chunk);\r\n        }\r\n\r\n        return {static_cast<size_t>(-1), 0, 0};\r\n    }\r\n};\r\n\r\ntemplate <class _FwdIt>\r\nstruct _Iterator_range { // record of a partition of work\r\n    _FwdIt _First;\r\n    _FwdIt _Last;\r\n};\r\n\r\ntemplate <class _FwdIt, class _Diff = _Iter_diff_t<_FwdIt>, bool = _Is_ranges_random_iter_v<_FwdIt>>\r\nstruct _Static_partition_range;\r\n\r\ntemplate <class _RanIt, class _Diff>\r\nstruct _Static_partition_range<_RanIt, _Diff, true> {\r\n    using _Target_diff = _Iter_diff_t<_RanIt>;\r\n    using _URanIt      = _Unwrapped_t<const _RanIt&>;\r\n    using _Chunk_type  = _Iterator_range<_URanIt>;\r\n\r\n    _URanIt _Start_at;\r\n\r\n    _RanIt _Populate(const _Static_partition_team<_Diff>& _Team, _RanIt _First) {\r\n        // statically partition a random-access iterator range and return next(_First, _Team._Count)\r\n        // pre: _Populate hasn't yet been called on this instance\r\n        auto _Result = _First + static_cast<_Target_diff>(_Team._Count); // does verification\r\n        _Start_at    = _STD _Get_unwrapped(_First);\r\n        return _Result;\r\n    }\r\n\r\n    bool _Populate(const _Static_partition_team<_Diff>& _Team, _RanIt _First, _RanIt _Last) {\r\n        // statically partition a random-access iterator range and check if the range ends at _Last\r\n        // pre: _Populate hasn't yet been called on this instance\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        _Start_at = _STD _Get_unwrapped(_First);\r\n        return _Team._Count == _Last - _First;\r\n    }\r\n\r\n    _URanIt _Get_first(size_t /* _Chunk_number */, const _Diff _Offset) {\r\n        // get the first iterator for _Chunk _Chunk_number (which is at offset _Offset)\r\n        return _Start_at + static_cast<_Target_diff>(_Offset);\r\n    }\r\n\r\n    _Chunk_type _Get_chunk(const _Static_partition_key<_Diff> _Key) const {\r\n        // get a static partition chunk from a random-access range\r\n        // pre: _Key was generated by the _Static_partition_team instance passed to a previous call to _Populate\r\n        const auto _First = _Start_at + static_cast<_Target_diff>(_Key._Start_at);\r\n        return {_First, _First + static_cast<_Target_diff>(_Key._Size)};\r\n    }\r\n};\r\n\r\ntemplate <class _FwdIt, class _Diff>\r\nstruct _Static_partition_range<_FwdIt, _Diff, false> {\r\n    using _Target_diff = _Iter_diff_t<_FwdIt>;\r\n    using _UFwdIt      = _Unwrapped_t<const _FwdIt&>;\r\n    using _Chunk_type  = _Iterator_range<_UFwdIt>;\r\n\r\n    _Parallel_vector<_UFwdIt> _Division_points;\r\n\r\n    _FwdIt _Populate(const _Static_partition_team<_Diff>& _Team, _FwdIt _First) {\r\n        // statically partition a forward iterator range and return next(_First, _Team._Count)\r\n        // pre: _Populate hasn't yet been called on this instance\r\n        const auto _Chunks = _Team._Chunks;\r\n        _Division_points.resize(_Chunks + 1);\r\n        // The following potentially narrowing cast is OK because caller has ensured\r\n        // next(_First, _Team._Count) is valid (and _Count <= _Chunk_size)\r\n        const auto _Chunk_size      = static_cast<_Target_diff>(_Team._Chunk_size);\r\n        const auto _Unchunked_items = _Team._Unchunked_items;\r\n        auto _Result                = _Division_points.begin();\r\n        *_Result                    = _STD _Get_unwrapped(_First);\r\n        for (_Diff _Idx{}; _Idx < _Unchunked_items; ++_Idx) { // record bounds of chunks with an extra item\r\n            _STD advance(_First, static_cast<_Target_diff>(_Chunk_size + 1));\r\n            *++_Result = _STD _Get_unwrapped(_First);\r\n        }\r\n\r\n        const auto _Diff_chunks = static_cast<_Diff>(_Chunks);\r\n        for (_Diff _Idx = _Unchunked_items; _Idx < _Diff_chunks; ++_Idx) { // record bounds of chunks with no extra item\r\n            _STD advance(_First, _Chunk_size);\r\n            *++_Result = _STD _Get_unwrapped(_First);\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    bool _Populate(const _Static_partition_team<_Diff>& _Team, _FwdIt _First, _FwdIt _Last) {\r\n        // statically partition a forward iterator range and check if the range ends at _Last\r\n        // pre: _Populate hasn't yet been called on this instance\r\n        const auto _Chunks = _Team._Chunks;\r\n        _Division_points.resize(_Chunks + 1);\r\n        const auto _Chunk_size      = _Team._Chunk_size;\r\n        const auto _Unchunked_items = _Team._Unchunked_items;\r\n        auto _Result                = _Division_points.begin();\r\n        *_Result                    = _STD _Get_unwrapped(_First);\r\n        for (_Diff _Idx{}; _Idx < _Unchunked_items; ++_Idx) { // record bounds of chunks with an extra item\r\n            for (_Diff _This_chunk_size = _Chunk_size + 1; 0 < _This_chunk_size--;) {\r\n                if (_First == _Last) {\r\n                    return false;\r\n                }\r\n\r\n                ++_First;\r\n            }\r\n\r\n            *++_Result = _STD _Get_unwrapped(_First);\r\n        }\r\n\r\n        const auto _Diff_chunks = static_cast<_Diff>(_Chunks);\r\n        for (_Diff _Idx = _Unchunked_items; _Idx < _Diff_chunks; ++_Idx) { // record bounds of chunks with no extra item\r\n            for (_Diff _This_chunk_size = _Chunk_size; 0 < _This_chunk_size--;) {\r\n                if (_First == _Last) {\r\n                    return false;\r\n                }\r\n\r\n                ++_First;\r\n            }\r\n\r\n            *++_Result = _STD _Get_unwrapped(_First);\r\n        }\r\n\r\n        return _First == _Last;\r\n    }\r\n\r\n    _UFwdIt _Get_first(const size_t _Chunk_number, _Diff /* _Offset */) {\r\n        // get the first iterator for _Chunk _Chunk_number (which is at offset _Offset)\r\n        return _Division_points[_Chunk_number];\r\n    }\r\n\r\n    _Chunk_type _Get_chunk(const _Static_partition_key<_Diff> _Key) const {\r\n        // get a static partition chunk from a forward range\r\n        // pre: _Key was generated by the _Static_partition_team instance passed to a previous call to _Populate\r\n        return {_Division_points[_Key._Chunk_number], _Division_points[_Key._Chunk_number + 1]};\r\n    }\r\n};\r\n\r\ntemplate <class _BidIt, class _Diff = _Iter_diff_t<_BidIt>, bool = _Is_ranges_random_iter_v<_BidIt>>\r\nstruct _Static_partition_range_backward;\r\n\r\ntemplate <class _RanIt, class _Diff>\r\nstruct _Static_partition_range_backward<_RanIt, _Diff, true> {\r\n    using _Target_diff = _Iter_diff_t<_RanIt>;\r\n    using _Chunk_type  = _Iterator_range<_Unwrapped_t<const _RanIt&>>;\r\n\r\n    _Unwrapped_t<const _RanIt&> _Start_at;\r\n\r\n    void _Populate(const _Static_partition_team<_Diff>& _Team, _RanIt _Last) {\r\n        // statically partition a random-access iterator range ending at _Last\r\n        // pre: _Populate hasn't yet been called on this instance\r\n        _Start_at = _STD _Get_unwrapped_n(_Last, -static_cast<_Target_diff>(_Team._Count));\r\n    }\r\n\r\n    _Chunk_type _Get_chunk(const _Static_partition_key<_Diff> _Key) const {\r\n        // get a static partition chunk from a random-access range\r\n        // pre: _Key was generated by the _Static_partition_team instance passed to a previous call to _Populate\r\n        const auto _Last = _Start_at - static_cast<_Target_diff>(_Key._Start_at);\r\n        return {_Last - static_cast<_Target_diff>(_Key._Size), _Last};\r\n    }\r\n};\r\n\r\ntemplate <class _BidIt, class _Diff>\r\nstruct _Static_partition_range_backward<_BidIt, _Diff, false> {\r\n    using _Target_diff = _Iter_diff_t<_BidIt>;\r\n    using _Chunk_type  = _Iterator_range<_Unwrapped_t<const _BidIt&>>;\r\n\r\n    _Parallel_vector<_Unwrapped_t<const _BidIt&>> _Division_points;\r\n\r\n    void _Populate(const _Static_partition_team<_Diff>& _Team, _BidIt _Last) {\r\n        // statically partition a bidirectional iterator range ending at _Last\r\n        // pre: _Populate hasn't yet been called on this instance\r\n        const auto _Chunks = _Team._Chunks;\r\n        _Division_points.resize(_Chunks + 1);\r\n        const auto _Neg_chunk_size  = static_cast<_Target_diff>(-_Team._Chunk_size);\r\n        const auto _Unchunked_items = _Team._Unchunked_items;\r\n        auto _Result = _Division_points.begin(); // does range checking by incrementing in the checked domain\r\n        *_Result     = _STD _Get_unwrapped(_Last);\r\n        for (_Diff _Idx{}; _Idx < _Unchunked_items; ++_Idx) {\r\n            _STD advance(_Last, static_cast<_Target_diff>(_Neg_chunk_size - 1));\r\n            *++_Result = _STD _Get_unwrapped(_Last);\r\n        }\r\n\r\n        const auto _Diff_chunks = static_cast<_Diff>(_Chunks);\r\n        for (_Diff _Idx = _Unchunked_items; _Idx < _Diff_chunks; ++_Idx) {\r\n            _STD advance(_Last, _Neg_chunk_size);\r\n            *++_Result = _STD _Get_unwrapped(_Last);\r\n        }\r\n    }\r\n\r\n    _Chunk_type _Get_chunk(const _Static_partition_key<_Diff> _Key) const {\r\n        // get a static partition chunk from a bidirectional range\r\n        // pre: _Key was generated by the _Static_partition_team instance passed to a previous call to _Populate\r\n        return {_Division_points[_Key._Chunk_number + 1], _Division_points[_Key._Chunk_number]};\r\n    }\r\n};\r\n\r\ntemplate <class _InIt1, class _InIt2>\r\n_Common_diff_t<_InIt1, _InIt2> _Distance_any(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2) {\r\n    // get the distance from 2 ranges which should have identical lengths\r\n    if constexpr (_Is_ranges_random_iter_v<_InIt1>) {\r\n        return _Last1 - _First1;\r\n    } else if constexpr (_Is_ranges_random_iter_v<_InIt2>) {\r\n        return _Last2 - _First2;\r\n    } else {\r\n        return _STD distance(_First1, _Last1);\r\n    }\r\n}\r\n\r\ntemplate <class _InIt1, class _InIt2>\r\n_Common_diff_t<_InIt1, _InIt2> _Distance_min(_InIt1 _First1, const _InIt1 _Last1, _InIt2 _First2, const _InIt2 _Last2) {\r\n    // get min(distance(_First1, _Last1), distance(_First2, _Last2))\r\n    using _CT = _Common_diff_t<_InIt1, _InIt2>;\r\n    _CT _Result{};\r\n    if constexpr (_Is_ranges_random_iter_v<_InIt1> && _Is_ranges_random_iter_v<_InIt2>) {\r\n        const _CT _Count1 = _Last1 - _First1;\r\n        const _CT _Count2 = _Last2 - _First2;\r\n        _Result           = (_STD min) (_Count1, _Count2);\r\n    } else if constexpr (_Is_ranges_random_iter_v<_InIt1>) {\r\n        for (auto _Count1 = _Last1 - _First1; 0 < _Count1 && _First2 != _Last2; --_Count1) {\r\n            ++_First2;\r\n            ++_Result;\r\n        }\r\n    } else if constexpr (_Is_ranges_random_iter_v<_InIt2>) {\r\n        for (auto _Count2 = _Last2 - _First2; 0 < _Count2 && _First1 != _Last1; --_Count2) {\r\n            ++_First1;\r\n            ++_Result;\r\n        }\r\n    } else {\r\n        while (_First1 != _Last1 && _First2 != _Last2) {\r\n            ++_First1;\r\n            ++_First2;\r\n            ++_Result;\r\n        }\r\n    }\r\n\r\n    return _Result;\r\n}\r\n\r\ntemplate <bool _Invert, class _FwdIt, class _Pr>\r\nstruct _Static_partitioned_all_of_family2 { // all_of/any_of/none_of task scheduled on the system thread pool\r\n    _Static_partition_team<_Iter_diff_t<_FwdIt>> _Team;\r\n    _Static_partition_range<_FwdIt> _Basis;\r\n    _Pr _Pred;\r\n    _Cancellation_token _Cancel_token;\r\n\r\n    _Static_partitioned_all_of_family2(\r\n        _FwdIt _First, const size_t _Hw_threads, const _Iter_diff_t<_FwdIt> _Count, _Pr _Pred_)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis{}, _Pred(_Pred_), _Cancel_token{} {\r\n        _Basis._Populate(_Team, _First);\r\n    }\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        if (_Cancel_token._Is_canceled()) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n        // Once _Key is obtained, the amount of work should not be discarded (see GH-818).\r\n\r\n        const auto _Range = _Basis._Get_chunk(_Key);\r\n        for (auto _First = _Range._First; _First != _Range._Last; ++_First) {\r\n            if (_Pred(*_First) ? _Invert : !_Invert) {\r\n                _Cancel_token._Cancel();\r\n                return _Cancellation_status::_Canceled;\r\n            }\r\n        }\r\n\r\n        return _Cancellation_status::_Running;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_all_of_family2*>(_Context));\r\n    }\r\n};\r\n\r\ntemplate <bool _Invert, class _FwdIt, class _Pr>\r\nbool _All_of_family_parallel(_FwdIt _First, const _FwdIt _Last, _Pr _Pred) {\r\n    // test if all elements in [_First, _Last) satisfy _Pred (or !_Pred if _Invert is true) in parallel\r\n    const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n    if (_Hw_threads > 1) { // parallelize on multiprocessor machines...\r\n        const auto _Count = _STD distance(_First, _Last);\r\n        if (_Count >= 2) { // ... with at least 2 elements\r\n            _TRY_BEGIN\r\n            _Static_partitioned_all_of_family2<_Invert, _FwdIt, _Pr> _Operation{_First, _Hw_threads, _Count, _Pred};\r\n            _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n            return !_Operation._Cancel_token._Is_canceled_relaxed();\r\n            _CATCH(const _Parallelism_resources_exhausted&)\r\n            // fall through to serial case below\r\n            _CATCH_END\r\n        }\r\n    }\r\n\r\n    for (; _First != _Last; ++_First) {\r\n        if (_Pred(*_First) ? _Invert : !_Invert) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD bool all_of(_ExPo&&, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // test if all elements in [_First, _Last) satisfy _Pred with the indicated execution policy\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        return _STD _All_of_family_parallel<false>(_UFirst, _ULast, _STD _Pass_fn(_Pred));\r\n    } else {\r\n        return _STD all_of(_UFirst, _ULast, _STD _Pass_fn(_Pred));\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD bool any_of(_ExPo&&, const _FwdIt _First, const _FwdIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // test if any element in [_First, _Last) satisfies _Pred with the indicated execution policy\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        return !_STD _All_of_family_parallel<true>(_UFirst, _ULast, _STD _Pass_fn(_Pred));\r\n    } else {\r\n        return _STD any_of(_UFirst, _ULast, _STD _Pass_fn(_Pred));\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD bool none_of(_ExPo&&, const _FwdIt _First, const _FwdIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // test if no element in [_First, _Last) satisfies _Pred with the indicated execution policy\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        return _STD _All_of_family_parallel<true>(_UFirst, _ULast, _STD _Pass_fn(_Pred));\r\n    } else {\r\n        return _STD none_of(_UFirst, _ULast, _STD _Pass_fn(_Pred));\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Fn>\r\nvoid _For_each_ivdep(_FwdIt _First, const _FwdIt _Last, _Fn _Func) {\r\n    // perform function for each element [_First, _Last) assuming independent loop bodies\r\n#pragma loop(ivdep)\r\n    for (; _First != _Last; ++_First) {\r\n        _Func(*_First);\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Diff, class _Fn>\r\nstruct _Static_partitioned_for_each2 { // for_each task scheduled on the system thread pool\r\n    _Static_partition_team<_Diff> _Team;\r\n    _Static_partition_range<_FwdIt, _Diff> _Basis;\r\n    _Fn _Func;\r\n\r\n    _Static_partitioned_for_each2(const size_t _Hw_threads, const _Diff _Count, _Fn _Fx)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis{}, _Func(_Fx) {}\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (_Key) {\r\n            const auto _Chunk = _Basis._Get_chunk(_Key);\r\n            _STD _For_each_ivdep(_Chunk._First, _Chunk._Last, _Func);\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        return _Cancellation_status::_Canceled;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_for_each2*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Fn, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\nvoid for_each(_ExPo&&, _FwdIt _First, _FwdIt _Last, _Fn _Func) noexcept /* terminates */ {\r\n    // perform function for each element [_First, _Last) with the indicated execution policy\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines...\r\n            auto _Count = _STD distance(_UFirst, _ULast);\r\n            if (_Count >= 2) { // ... with at least 2 elements\r\n                _TRY_BEGIN\r\n                auto _Passed_fn = _STD _Pass_fn(_Func);\r\n                _Static_partitioned_for_each2<decltype(_UFirst), decltype(_Count), decltype(_Passed_fn)> _Operation{\r\n                    _Hw_threads, _Count, _Passed_fn};\r\n                _Operation._Basis._Populate(_Operation._Team, _UFirst);\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                return;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n        }\r\n\r\n        _STD _For_each_ivdep(_UFirst, _ULast, _STD _Pass_fn(_Func));\r\n    } else if constexpr (remove_reference_t<_ExPo>::_Ivdep) {\r\n        _STD _For_each_ivdep(_UFirst, _ULast, _STD _Pass_fn(_Func));\r\n    } else {\r\n        for (; _UFirst != _ULast; ++_UFirst) {\r\n            _Func(*_UFirst);\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Diff, class _Fn>\r\n_FwdIt _For_each_n_ivdep(_FwdIt _First, _Diff _Count, _Fn _Func) {\r\n    // perform function for each element [_First, _First + _Count) assuming independent loop bodies\r\n#pragma loop(ivdep)\r\n    for (; 0 < _Count; --_Count, (void) ++_First) {\r\n        _Func(*_First);\r\n    }\r\n\r\n    return _First;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Diff, class _Fn, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_FwdIt for_each_n(_ExPo&&, _FwdIt _First, const _Diff _Count_raw, _Fn _Func) noexcept /* terminates */ {\r\n    // perform function for each element [_First, _First + _Count)\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    if (0 < _Count) {\r\n        auto _UFirst = _STD _Get_unwrapped_n(_First, _Count);\r\n        if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n            const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n            if (_Hw_threads > 1 && _Count >= 2) { // parallelize on multiprocessor machines with at least 2 elements\r\n                _TRY_BEGIN\r\n                auto _Passed_fn = _STD _Pass_fn(_Func);\r\n                _Static_partitioned_for_each2<decltype(_UFirst), decltype(_Count), decltype(_Passed_fn)> _Operation{\r\n                    _Hw_threads, _Count, _Passed_fn};\r\n                _STD _Seek_wrapped(_First, _Operation._Basis._Populate(_Operation._Team, _UFirst));\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                return _First;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n\r\n            _STD _Seek_wrapped(_First, _STD _For_each_n_ivdep(_UFirst, _Count, _STD _Pass_fn(_Func)));\r\n        } else if constexpr (remove_reference_t<_ExPo>::_Ivdep) {\r\n            _STD _Seek_wrapped(_First, _STD _For_each_n_ivdep(_UFirst, _Count, _STD _Pass_fn(_Func)));\r\n        } else {\r\n            for (; 0 < _Count; --_Count, (void) ++_UFirst) {\r\n                _Func(*_UFirst);\r\n            }\r\n\r\n            _STD _Seek_wrapped(_First, _UFirst);\r\n        }\r\n    }\r\n\r\n    return _First;\r\n}\r\n\r\ntemplate <class _FwdIt>\r\nusing _Parallel_find_results = conditional_t<_Use_atomic_iterator<_FwdIt>, _Parallel_choose_min_result<_FwdIt>,\r\n    _Parallel_choose_min_chunk<_FwdIt>>;\r\n\r\ntemplate <class _FwdIt, class _Find_fx>\r\nstruct _Static_partitioned_find3 {\r\n    _Static_partition_team<_Iter_diff_t<_FwdIt>> _Team;\r\n    _Static_partition_range<_FwdIt> _Basis;\r\n    _Parallel_find_results<_FwdIt> _Results;\r\n    _Find_fx _Fx;\r\n\r\n    _Static_partitioned_find3(\r\n        const size_t _Hw_threads, const _Iter_diff_t<_FwdIt> _Count, const _FwdIt _Last, const _Find_fx _Fx_)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis{}, _Results(_Last), _Fx(_Fx_) {}\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        if (_Results._Complete()) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n        // Once _Key is obtained, the amount of work should not be discarded (see GH-818).\r\n\r\n        const auto _Range     = _Basis._Get_chunk(_Key);\r\n        const auto _This_find = _Fx(_Range._First, _Range._Last);\r\n        if (_This_find == _Range._Last) {\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        _Results._Imbue(_Key._Chunk_number, _This_find);\r\n        return _Cancellation_status::_Canceled;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_find3*>(_Context));\r\n    }\r\n};\r\n\r\ntemplate <class _ExPo, class _FwdIt, class _Find_fx>\r\n_FwdIt _Find_parallel_unchecked(_ExPo&&, const _FwdIt _First, const _FwdIt _Last, const _Find_fx _Fx) {\r\n    // find first matching _Val, potentially in parallel\r\n    if (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) {\r\n            const auto _Count = _STD distance(_First, _Last);\r\n            if (_Count >= 2) {\r\n                _TRY_BEGIN\r\n                _Static_partitioned_find3 _Operation{_Hw_threads, _Count, _Last, _Fx};\r\n                _Operation._Basis._Populate(_Operation._Team, _First);\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                return _Operation._Results._Get_result();\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to _Fx below\r\n                _CATCH_END\r\n            }\r\n        }\r\n    }\r\n\r\n    return _Fx(_First, _Last);\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Ty, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD _FwdIt find(_ExPo&& _Exec, _FwdIt _First, const _FwdIt _Last, const _Ty& _Val) noexcept /* terminates */ {\r\n    // find first matching _Val\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    using _UFwdIt = _Unwrapped_t<const _FwdIt&>;\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    _STD _Seek_wrapped(_First, _STD _Find_parallel_unchecked(_STD forward<_ExPo>(_Exec), _STD _Get_unwrapped(_First),\r\n                                   _STD _Get_unwrapped(_Last), [&](const _UFwdIt _LFirst, const _UFwdIt _LLast) {\r\n                                       return _STD _Find_unchecked(_LFirst, _LLast, _Val);\r\n                                   }));\r\n    return _First;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD _FwdIt find_if(_ExPo&& _Exec, _FwdIt _First, const _FwdIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // find first satisfying _Pred\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    using _UFwdIt = _Unwrapped_t<const _FwdIt&>;\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _Pass_pred = _STD _Pass_fn(_Pred);\r\n    _STD _Seek_wrapped(_First, _STD _Find_parallel_unchecked(_STD forward<_ExPo>(_Exec), _STD _Get_unwrapped(_First),\r\n                                   _STD _Get_unwrapped(_Last), [=](const _UFwdIt _LFirst, const _UFwdIt _LLast) {\r\n                                       return _STD find_if(_LFirst, _LLast, _Pass_pred);\r\n                                   }));\r\n    return _First;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD _FwdIt find_if_not(_ExPo&& _Exec, _FwdIt _First, const _FwdIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // find first satisfying !_Pred\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    using _UFwdIt = _Unwrapped_t<const _FwdIt&>;\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _Pass_pred = _STD _Pass_fn(_Pred);\r\n    _STD _Seek_wrapped(_First, _STD _Find_parallel_unchecked(_STD forward<_ExPo>(_Exec), _STD _Get_unwrapped(_First),\r\n                                   _STD _Get_unwrapped(_Last), [=](const _UFwdIt _LFirst, const _UFwdIt _LLast) {\r\n                                       return _STD find_if_not(_LFirst, _LLast, _Pass_pred);\r\n                                   }));\r\n    return _First;\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2>\r\n_Iter_diff_t<_FwdIt1> _Get_find_end_forward_partition_size(\r\n    _FwdIt1 _First1, const _FwdIt1 _Last1, _FwdIt2 _First2, const _FwdIt2 _Last2) {\r\n    // get the count of the range of possible matches in a find_end operation for forward iterators\r\n    if (_First2 == _Last2) {\r\n        return 0;\r\n    }\r\n\r\n    for (;;) {\r\n        if (_First1 == _Last1) { // haystack is shorter than needle\r\n            return 0;\r\n        }\r\n\r\n        ++_First2;\r\n        if (_First2 == _Last2) { // seek complete\r\n            return _STD distance(_First1, _Last1);\r\n        }\r\n\r\n        ++_First1;\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _Pr>\r\nstruct _Static_partitioned_find_end_forward2 {\r\n    _Static_partition_team<_Iter_diff_t<_FwdIt1>> _Team;\r\n    _Static_partition_range<_FwdIt1> _Basis;\r\n    _Iterator_range<_FwdIt2> _Range2;\r\n    _Pr _Pred;\r\n    conditional_t<_Use_atomic_iterator<_FwdIt1>, _Parallel_choose_max_result<_FwdIt1>,\r\n        _Parallel_choose_max_chunk<_FwdIt1>>\r\n        _Results;\r\n\r\n    _Static_partitioned_find_end_forward2(const size_t _Hw_threads, const _Iter_diff_t<_FwdIt1> _Count,\r\n        const _FwdIt1 _Last1, const _FwdIt2 _First2, const _FwdIt2 _Last2, const _Pr _Pred_)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis{}, _Range2{_First2, _Last2},\r\n          _Pred{_Pred_}, _Results(_Last1) {}\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Chunk_number = _Key._Chunk_number;\r\n        const auto _Range        = _Basis._Get_chunk(_Key);\r\n        _FwdIt1 _Result          = _Range._Last;\r\n        for (auto _First1 = _Range._First; _First1 != _Range._Last; ++_First1) {\r\n            if (_Equal_rev_pred_unchecked(_First1, _Range2._First, _Range2._Last, _Pred)) {\r\n                _Result = _First1;\r\n            }\r\n        }\r\n\r\n        if (_Result != _Range._Last) {\r\n            _Results._Imbue(_Chunk_number, _Result);\r\n        }\r\n\r\n        return _Cancellation_status::_Running;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        (void) static_cast<_Static_partitioned_find_end_forward2*>(_Context)->_Process_chunk();\r\n    }\r\n};\r\n\r\ntemplate <class _BidIt1, class _FwdIt2>\r\n_BidIt1 _Get_find_end_backward_partition_start(\r\n    const _BidIt1 _First1, _BidIt1 _Last1, _FwdIt2 _First2, const _FwdIt2 _Last2) {\r\n    // gets the end of the range of possible matches for a find_end operation\r\n    if constexpr (_Is_ranges_random_iter_v<_BidIt1> && _Is_ranges_random_iter_v<_FwdIt2>) {\r\n        using _CT         = _Common_diff_t<_BidIt1, _FwdIt2>;\r\n        const _CT _Count1 = _Last1 - _First1;\r\n        const _CT _Count2 = _Last2 - _First2;\r\n        _Iter_diff_t<_BidIt1> _Count{};\r\n        if (0 < _Count2 && _Count2 <= _Count1) {\r\n            _Count = static_cast<_Iter_diff_t<_BidIt1>>(_Count1 - _Count2 + 1);\r\n        }\r\n        return _First1 + _Count;\r\n    } else {\r\n        if (_First2 == _Last2) { // always 0 matches, give up\r\n            return _First1;\r\n        }\r\n\r\n        for (;;) {\r\n            if (_First1 == _Last1) { // haystack is shorter than needle, give up\r\n                return _First1;\r\n            }\r\n\r\n            ++_First2;\r\n            if (_First2 == _Last2) { // seek complete\r\n                return _Last1;\r\n            }\r\n\r\n            --_Last1;\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt1, class _FwdIt2, class _Pr>\r\nstruct _Static_partitioned_find_end_backward3 {\r\n    _Static_partition_team<_Iter_diff_t<_BidIt1>> _Team;\r\n    _Static_partition_range_backward<_BidIt1> _Basis;\r\n    conditional_t<_Use_atomic_iterator<_BidIt1>, _Parallel_choose_max_result<_BidIt1>,\r\n        _Parallel_choose_min_chunk<_BidIt1>>\r\n        _Results;\r\n    _Iterator_range<_FwdIt2> _Range2;\r\n    _Pr _Pred;\r\n\r\n    _Static_partitioned_find_end_backward3(const size_t _Hw_threads, const _Iter_diff_t<_BidIt1> _Count,\r\n        const _BidIt1 _Last1, const _FwdIt2 _First2, const _FwdIt2 _Last2, const _Pr _Pred_)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis{}, _Results(_Last1),\r\n          _Range2{_First2, _Last2}, _Pred{_Pred_} {}\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        if (_Results._Complete()) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n        // Once _Key is obtained, the amount of work should not be discarded (see GH-818).\r\n\r\n        const auto _Chunk_number = _Key._Chunk_number;\r\n        const auto _Range        = _Basis._Get_chunk(_Key);\r\n        auto _Last1              = _Range._Last;\r\n        do {\r\n            --_Last1;\r\n            if (_STD _Equal_rev_pred_unchecked(_Last1, _Range2._First, _Range2._Last, _Pred)) {\r\n                _Results._Imbue(_Chunk_number, _Last1);\r\n                return _Cancellation_status::_Canceled;\r\n            }\r\n        } while (_Last1 != _Range._First);\r\n        return _Cancellation_status::_Running;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_find_end_backward3*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD _FwdIt1 find_end(_ExPo&&, _FwdIt1 _First1, const _FwdIt1 _Last1, const _FwdIt2 _First2, const _FwdIt2 _Last2,\r\n    _Pr _Pred) noexcept /* terminates */ {\r\n    // find last [_First2, _Last2) satisfying _Pred\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    const auto _UFirst1 = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1  = _STD _Get_unwrapped(_Last1);\r\n    const auto _UFirst2 = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2  = _STD _Get_unwrapped(_Last2);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) {\r\n            if constexpr (_Is_ranges_bidi_iter_v<_FwdIt1>) {\r\n                const auto _Partition_start =\r\n                    _STD _Get_find_end_backward_partition_start(_UFirst1, _ULast1, _UFirst2, _ULast2);\r\n                if (_UFirst1 == _Partition_start) {\r\n                    _STD _Seek_wrapped(_First1, _ULast1);\r\n                    return _First1;\r\n                }\r\n\r\n                const auto _Count = _STD distance(_UFirst1, _Partition_start);\r\n                if (_Count >= 2) {\r\n                    _TRY_BEGIN\r\n                    _Static_partitioned_find_end_backward3 _Operation{\r\n                        _Hw_threads, _Count, _ULast1, _UFirst2, _ULast2, _STD _Pass_fn(_Pred)};\r\n                    _Operation._Basis._Populate(_Operation._Team, _Partition_start);\r\n                    _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                    _STD _Seek_wrapped(_First1, _Operation._Results._Get_result());\r\n                    return _First1;\r\n                    _CATCH(const _Parallelism_resources_exhausted&)\r\n                    // fall through to serial case below\r\n                    _CATCH_END\r\n                }\r\n            } else {\r\n                const auto _Count = _STD _Get_find_end_forward_partition_size(_UFirst1, _ULast1, _UFirst2, _ULast2);\r\n                if (_Count >= 2) {\r\n                    _TRY_BEGIN\r\n                    _Static_partitioned_find_end_forward2 _Operation{\r\n                        _Hw_threads, _Count, _ULast1, _UFirst2, _ULast2, _STD _Pass_fn(_Pred)};\r\n                    _Operation._Basis._Populate(_Operation._Team, _UFirst1);\r\n                    _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                    _STD _Seek_wrapped(_First1, _Operation._Results._Get_result());\r\n                    return _First1;\r\n                    _CATCH(const _Parallelism_resources_exhausted&)\r\n                    // fall through to serial case below\r\n                    _CATCH_END\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First1, _STD find_end(_UFirst1, _ULast1, _UFirst2, _ULast2, _STD _Pass_fn(_Pred)));\r\n    return _First1;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD _FwdIt1 find_first_of(_ExPo&& _Exec, const _FwdIt1 _First1, _FwdIt1 _Last1, const _FwdIt2 _First2,\r\n    const _FwdIt2 _Last2, _Pr _Pred) noexcept /* terminates */ {\r\n    // look for one of [_First2, _Last2) that matches element\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    using _UFwdIt1 = _Unwrapped_t<const _FwdIt1&>;\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    const auto _UFirst2 = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2  = _STD _Get_unwrapped(_Last2);\r\n    if (_UFirst2 == _ULast2) {\r\n        return _Last1;\r\n    }\r\n\r\n    auto _Pass_pred = _STD _Pass_fn(_Pred);\r\n    _STD _Seek_wrapped(_Last1, _STD _Find_parallel_unchecked(_STD forward<_ExPo>(_Exec), _STD _Get_unwrapped(_First1),\r\n                                   _STD _Get_unwrapped(_Last1), [=](const _UFwdIt1 _LFirst1, const _UFwdIt1 _LLast1) {\r\n                                       return _STD find_first_of(_LFirst1, _LLast1, _UFirst2, _ULast2, _Pass_pred);\r\n                                   }));\r\n    return _Last1;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Pr>\r\nstruct _Static_partitioned_adjacent_find3 {\r\n    _Static_partition_team<_Iter_diff_t<_FwdIt>> _Team;\r\n    _Static_partition_range<_FwdIt> _Basis;\r\n    _Parallel_find_results<_FwdIt> _Results;\r\n    _Pr _Pred;\r\n\r\n    _Static_partitioned_adjacent_find3(\r\n        const size_t _Hw_threads, const _Iter_diff_t<_FwdIt> _Count, const _FwdIt _Last, const _Pr _Pred_)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis{}, _Results{_Last}, _Pred{_Pred_} {}\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        if (_Results._Complete()) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n        // Once _Key is obtained, the amount of work should not be discarded (see GH-818).\r\n\r\n        const auto _Chunk_number = _Key._Chunk_number;\r\n        const auto _Range        = _Basis._Get_chunk(_Key);\r\n        // tests [_First, _Last) for _Pred(*_Result, *next(_Result));\r\n        // note: intentionally dereferences _Last\r\n        auto _First = _Range._First;\r\n        for (auto _Next = _First; _First != _Range._Last; _First = _Next) {\r\n            ++_Next;\r\n            if (_Pred(*_First, *_Next)) { // found match\r\n                _Results._Imbue(_Chunk_number, _First);\r\n                return _Cancellation_status::_Canceled;\r\n            }\r\n        }\r\n\r\n        return _Cancellation_status::_Running;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_adjacent_find3*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD _FwdIt adjacent_find(_ExPo&&, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // find first satisfying _Pred with successor\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) {\r\n            const auto _Count = static_cast<_Iter_diff_t<_FwdIt>>(_STD distance(_UFirst, _ULast) - 1);\r\n            if (_Count >= 2) {\r\n                _TRY_BEGIN\r\n                _Static_partitioned_adjacent_find3 _Operation{_Hw_threads, _Count, _ULast, _STD _Pass_fn(_Pred)};\r\n                _Operation._Basis._Populate(_Operation._Team, _UFirst);\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                _STD _Seek_wrapped(_Last, _Operation._Results._Get_result());\r\n                return _Last;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to adjacent_find below\r\n                _CATCH_END\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Last, _STD adjacent_find(_UFirst, _ULast, _STD _Pass_fn(_Pred)));\r\n    return _Last;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Pr>\r\nstruct _Static_partitioned_count_if2 {\r\n    using _Diff = _Iter_diff_t<_FwdIt>;\r\n    _Static_partition_team<_Diff> _Team;\r\n    _Static_partition_range<_FwdIt> _Basis;\r\n    _Pr _Pred;\r\n    atomic<_Diff> _Results;\r\n\r\n    _Static_partitioned_count_if2(const _Diff _Count, const size_t _Chunks, const _FwdIt _First, const _Pr _Pred_)\r\n        : _Team{_Count, _Chunks}, _Basis{}, _Pred{_Pred_}, _Results{} {\r\n        _Basis._Populate(_Team, _First);\r\n    }\r\n\r\n    _Diff _Process_chunks() {\r\n        _Diff _Result{};\r\n        while (const auto _Key = _Team._Get_next_key()) {\r\n            const auto _Range = _Basis._Get_chunk(_Key);\r\n            _Result += _STD count_if(_Range._First, _Range._Last, _Pred);\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        const auto _This = static_cast<_Static_partitioned_count_if2*>(_Context);\r\n        _This->_Results.fetch_add(_This->_Process_chunks(), memory_order_relaxed);\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD _Iter_diff_t<_FwdIt> count_if(_ExPo&&, const _FwdIt _First, const _FwdIt _Last, _Pr _Pred) noexcept\r\n/* terminates */ {\r\n    // count elements satisfying _Pred\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) {\r\n            const auto _Count = _STD distance(_UFirst, _ULast);\r\n            if (_Count >= 2) {\r\n                const auto _Chunks = _Get_chunked_work_chunk_count(_Hw_threads, _Count);\r\n                _TRY_BEGIN\r\n                _Static_partitioned_count_if2 _Operation{_Count, _Chunks, _UFirst, _STD _Pass_fn(_Pred)};\r\n                _Iter_diff_t<_FwdIt> _Foreground_count;\r\n                {\r\n                    const _Work_ptr _Work{_Operation};\r\n                    // setup complete, hereafter nothrow or terminate\r\n                    _Work._Submit_for_chunks(_Hw_threads, _Chunks);\r\n                    _Foreground_count = _Operation._Process_chunks();\r\n                } // join with _Work_ptr threads\r\n\r\n                return _Operation._Results.load(memory_order_relaxed) + _Foreground_count;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to count_if below\r\n                _CATCH_END\r\n            }\r\n        }\r\n    }\r\n\r\n    return _STD count_if(_UFirst, _ULast, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Ty, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD _Iter_diff_t<_FwdIt> count(_ExPo&& _Exec, const _FwdIt _First, const _FwdIt _Last, const _Ty& _Val) noexcept\r\n/* terminates */ {\r\n    // count elements that match _Val\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    return _STD count_if(_STD forward<_ExPo>(_Exec), _STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last),\r\n        [&_Val](auto&& _Iter_val) { return _STD forward<decltype(_Iter_val)>(_Iter_val) == _Val; });\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2,\r\n    bool = _Use_atomic_iterator<_Unwrapped_t<const _FwdIt1&>> && _Is_ranges_random_iter_v<_FwdIt2>,\r\n    bool = _Use_atomic_iterator<_Unwrapped_t<const _FwdIt2&>> && _Is_ranges_random_iter_v<_FwdIt1>>\r\nstruct _Static_partitioned_mismatch_results;\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, bool _Unused>\r\nstruct _Static_partitioned_mismatch_results<_FwdIt1, _FwdIt2, true, _Unused> {\r\n    // atomically manipulate atomic<_FwdIt1> and calculate the second iterator by adding distance to it\r\n    _Parallel_choose_min_result<_FwdIt1> _Storage;\r\n\r\n    _Static_partitioned_mismatch_results(const _FwdIt1 _Last1, const _Unwrapped_t<const _FwdIt2&>&)\r\n        : _Storage(_Last1) {}\r\n\r\n    void _Imbue(const size_t _Chunk_number, const _FwdIt1 _First1, const _Unwrapped_t<const _FwdIt2&>&) {\r\n        _Storage._Imbue(_Chunk_number, _First1);\r\n    }\r\n\r\n    pair<_FwdIt1, _FwdIt2> _Get_result(const _FwdIt1 _First1, const _FwdIt2 _First2) const {\r\n        const _FwdIt1 _Result1 = _Storage._Get_result();\r\n        return {_Result1, _First2 + static_cast<_Iter_diff_t<_FwdIt2>>(_Result1 - _First1)};\r\n    }\r\n};\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2>\r\nstruct _Static_partitioned_mismatch_results<_FwdIt1, _FwdIt2, false, true> {\r\n    // atomically manipulate atomic<_FwdIt2> and calculate the first iterator by adding distance to it\r\n    _Parallel_choose_min_result<_FwdIt2> _Storage;\r\n\r\n    _Static_partitioned_mismatch_results(const _Unwrapped_t<const _FwdIt1&>&, const _FwdIt2 _Last2)\r\n        : _Storage(_Last2) {}\r\n\r\n    void _Imbue(const size_t _Chunk_number, const _Unwrapped_t<const _FwdIt1&>&, const _FwdIt2 _First2) {\r\n        _Storage._Imbue(_Chunk_number, _First2);\r\n    }\r\n\r\n    pair<_FwdIt1, _FwdIt2> _Get_result(const _FwdIt1 _First1, const _FwdIt2 _First2) const {\r\n        const _FwdIt2 _Result2 = _Storage._Get_result();\r\n        return {_First1 + static_cast<_Iter_diff_t<_FwdIt1>>(_Result2 - _First2), _Result2};\r\n    }\r\n};\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2>\r\nstruct _Static_partitioned_mismatch_results<_FwdIt1, _FwdIt2, false, false> {\r\n    // get both iterators by manipulating them under lock\r\n    using _UFwdIt1 = _Unwrapped_t<const _FwdIt1&>;\r\n    using _UFwdIt2 = _Unwrapped_t<const _FwdIt2&>;\r\n    _Parallel_choose_min_chunk<pair<_UFwdIt1, _UFwdIt2>> _Storage;\r\n\r\n    _Static_partitioned_mismatch_results(const _UFwdIt1 _Last1, const _UFwdIt2 _Last2) : _Storage({_Last1, _Last2}) {}\r\n\r\n    void _Imbue(const size_t _Chunk_number, const _UFwdIt1 _First1, const _UFwdIt2 _First2) {\r\n        _Storage._Imbue(_Chunk_number, {_First1, _First2});\r\n    }\r\n\r\n    pair<_FwdIt1, _FwdIt2> _Get_result(_FwdIt1 _First1, _FwdIt2 _First2) const {\r\n        const auto _Result = _Storage._Get_result();\r\n        _STD _Seek_wrapped(_First2, _Result.second);\r\n        _STD _Seek_wrapped(_First1, _Result.first);\r\n        return {_First1, _First2};\r\n    }\r\n};\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _Pr>\r\nstruct _Static_partitioned_mismatch3 {\r\n    using _Diff = _Common_diff_t<_FwdIt1, _FwdIt2>;\r\n    _Static_partition_team<_Diff> _Team;\r\n    _Static_partition_range<_FwdIt1, _Diff> _Basis1;\r\n    _Static_partition_range<_FwdIt2, _Diff> _Basis2;\r\n    _Static_partitioned_mismatch_results<_FwdIt1, _FwdIt2> _Results;\r\n    _Pr _Pred;\r\n\r\n    _Static_partitioned_mismatch3(\r\n        const size_t _Hw_threads, const _Diff _Count, const _FwdIt1 _First1, const _FwdIt2 _First2, const _Pr _Pred_)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis1{}, _Basis2{},\r\n          _Results(_STD _Get_unwrapped(_Basis1._Populate(_Team, _First1)),\r\n              _STD _Get_unwrapped(_Basis2._Populate(_Team, _First2))),\r\n          _Pred(_Pred_) {}\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        if (_Results._Storage._Complete()) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n        // Once _Key is obtained, the amount of work should not be discarded (see GH-818).\r\n\r\n        const auto _Chunk_number = _Key._Chunk_number;\r\n        const auto _Range1       = _Basis1._Get_chunk(_Key);\r\n        auto _First1             = _Range1._First;\r\n        auto _First2             = _Basis2._Get_chunk(_Key)._First;\r\n        for (;;) {\r\n            if (_First1 == _Range1._Last) {\r\n                return _Cancellation_status::_Running;\r\n            }\r\n\r\n            if (!_Pred(*_First1, *_First2)) {\r\n                _Results._Imbue(_Chunk_number, _First1, _First2);\r\n                return _Cancellation_status::_Canceled;\r\n            }\r\n\r\n            ++_First1;\r\n            ++_First2;\r\n        }\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_mismatch3*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD pair<_FwdIt1, _FwdIt2> mismatch(\r\n    _ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _Pr _Pred) noexcept /* terminates */ {\r\n    // return [_First1, _Last1)/[_First2, ...) mismatch\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    const auto _UFirst1 = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1  = _STD _Get_unwrapped(_Last1);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) {\r\n            const auto _Count   = _STD distance(_UFirst1, _ULast1);\r\n            const auto _UFirst2 = _STD _Get_unwrapped_n(_First2, _Count);\r\n            if (_Count >= 2) {\r\n                _TRY_BEGIN\r\n                _Static_partitioned_mismatch3 _Operation{_Hw_threads, _Count, _UFirst1, _UFirst2, _STD _Pass_fn(_Pred)};\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                const auto _Result = _Operation._Results._Get_result(_UFirst1, _UFirst2);\r\n                _STD _Seek_wrapped(_First2, _Result.second);\r\n                _STD _Seek_wrapped(_First1, _Result.first);\r\n                return {_First1, _First2};\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n\r\n            const auto _Result = _STD mismatch(_UFirst1, _ULast1, _UFirst2, _STD _Pass_fn(_Pred));\r\n            _STD _Seek_wrapped(_First2, _Result.second);\r\n            _STD _Seek_wrapped(_First1, _Result.first);\r\n            return {_First1, _First2};\r\n        }\r\n    }\r\n\r\n    const auto _Result = _STD mismatch(_UFirst1, _ULast1,\r\n        _STD _Get_unwrapped_n(_First2, _STD _Idl_distance<_FwdIt1>(_UFirst1, _ULast1)), _STD _Pass_fn(_Pred));\r\n    _STD _Seek_wrapped(_First2, _Result.second);\r\n    _STD _Seek_wrapped(_First1, _Result.first);\r\n    return {_First1, _First2};\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD pair<_FwdIt1, _FwdIt2> mismatch(\r\n    _ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _Pr _Pred) noexcept /* terminates */ {\r\n    // return [_First1, _Last1)/[_First2, _Last2) mismatch\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    const auto _UFirst1 = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1  = _STD _Get_unwrapped(_Last1);\r\n    const auto _UFirst2 = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2  = _STD _Get_unwrapped(_Last2);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) {\r\n            const auto _Count =\r\n                static_cast<_Iter_diff_t<_FwdIt1>>(_STD _Distance_min(_UFirst1, _ULast1, _UFirst2, _ULast2));\r\n            if (_Count >= 2) {\r\n                _TRY_BEGIN\r\n                _Static_partitioned_mismatch3 _Operation{_Hw_threads, _Count, _UFirst1, _UFirst2, _STD _Pass_fn(_Pred)};\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                const auto _Result = _Operation._Results._Get_result(_UFirst1, _UFirst2);\r\n                _STD _Seek_wrapped(_First2, _Result.second);\r\n                _STD _Seek_wrapped(_First1, _Result.first);\r\n                return {_First1, _First2};\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial below\r\n                _CATCH_END\r\n            }\r\n        }\r\n    }\r\n\r\n    const auto _Result = _STD mismatch(_UFirst1, _ULast1, _UFirst2, _ULast2, _STD _Pass_fn(_Pred));\r\n    _STD _Seek_wrapped(_First2, _Result.second);\r\n    _STD _Seek_wrapped(_First1, _Result.first);\r\n    return {_First1, _First2};\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _Pr>\r\nstruct _Static_partitioned_equal2 {\r\n    using _Diff = _Common_diff_t<_FwdIt1, _FwdIt2>;\r\n    _Static_partition_team<_Diff> _Team;\r\n    _Static_partition_range<_FwdIt1, _Diff> _Basis1;\r\n    _Static_partition_range<_FwdIt2, _Diff> _Basis2;\r\n    _Pr _Pred;\r\n    _Cancellation_token _Cancel_token;\r\n\r\n    _Static_partitioned_equal2(const size_t _Hw_threads, const _Diff _Count, _Pr _Pred_, const _FwdIt1&, const _FwdIt2&)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis1{}, _Basis2{}, _Pred(_Pred_),\r\n          _Cancel_token{} {}\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        if (_Cancel_token._Is_canceled()) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n        // Once _Key is obtained, the amount of work should not be discarded (see GH-818).\r\n\r\n        const auto _Range1       = _Basis1._Get_chunk(_Key);\r\n        const auto _Range2_first = _Basis2._Get_chunk(_Key)._First;\r\n        if (_STD equal(_Range1._First, _Range1._Last, _Range2_first, _Pred)) {\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        _Cancel_token._Cancel();\r\n        return _Cancellation_status::_Canceled;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_equal2*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD bool equal(_ExPo&&, const _FwdIt1 _First1, const _FwdIt1 _Last1, const _FwdIt2 _First2, _Pr _Pred) noexcept\r\n/* terminates */ {\r\n    // compare [_First1, _Last1) to [_First2, ...)\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    const auto _UFirst1 = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1  = _STD _Get_unwrapped(_Last1);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) {\r\n            const auto _Count   = _STD distance(_UFirst1, _ULast1);\r\n            const auto _UFirst2 = _STD _Get_unwrapped_n(_First2, _Count);\r\n            if (_Count >= 2) {\r\n                _TRY_BEGIN\r\n                _Static_partitioned_equal2 _Operation{_Hw_threads, _Count, _STD _Pass_fn(_Pred), _UFirst1, _UFirst2};\r\n                _Operation._Basis1._Populate(_Operation._Team, _UFirst1);\r\n                _Operation._Basis2._Populate(_Operation._Team, _UFirst2);\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                return !_Operation._Cancel_token._Is_canceled_relaxed();\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n\r\n            return _STD equal(_UFirst1, _ULast1, _UFirst2, _STD _Pass_fn(_Pred));\r\n        }\r\n    }\r\n\r\n    return _STD equal(_UFirst1, _ULast1, _First2, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD bool equal(_ExPo&&, const _FwdIt1 _First1, const _FwdIt1 _Last1, const _FwdIt2 _First2, const _FwdIt2 _Last2,\r\n    _Pr _Pred) noexcept /* terminates */ {\r\n    // compare [_First1, _Last1) to [_First2, _Last2)\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    const auto _UFirst1 = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1  = _STD _Get_unwrapped(_Last1);\r\n    const auto _UFirst2 = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2  = _STD _Get_unwrapped(_Last2);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) {\r\n            const auto _Count = _STD _Distance_any(_UFirst1, _ULast1, _UFirst2, _ULast2);\r\n            if (_Count >= 2) {\r\n                _TRY_BEGIN\r\n                _Static_partitioned_equal2 _Operation{_Hw_threads, _Count, _STD _Pass_fn(_Pred), _UFirst1, _UFirst2};\r\n                if (!_Operation._Basis1._Populate(_Operation._Team, _UFirst1, _ULast1)) {\r\n                    // left sequence didn't have length _Count\r\n                    return false;\r\n                }\r\n\r\n                if (!_Operation._Basis2._Populate(_Operation._Team, _UFirst2, _ULast2)) {\r\n                    // right sequence didn't have length _Count\r\n                    return false;\r\n                }\r\n\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                return !_Operation._Cancel_token._Is_canceled_relaxed();\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to equal below\r\n                _CATCH_END\r\n            }\r\n        }\r\n    }\r\n\r\n    return _STD equal(_UFirst1, _ULast1, _UFirst2, _ULast2, _STD _Pass_fn(_Pred));\r\n}\r\n\r\ntemplate <class _FwdItHaystack, class _FwdItPat, class _Pr>\r\nstruct _Static_partitioned_search3 {\r\n    _Static_partition_team<_Iter_diff_t<_FwdItHaystack>> _Team;\r\n    _Static_partition_range<_FwdItHaystack> _Basis;\r\n    _Parallel_find_results<_FwdItHaystack> _Results;\r\n    _FwdItPat _First2;\r\n    _FwdItPat _Last2;\r\n    _Pr _Pred;\r\n\r\n    _Static_partitioned_search3(const size_t _Hw_threads, const _Iter_diff_t<_FwdItHaystack> _Count,\r\n        const _FwdItHaystack _First1, const _FwdItHaystack _Last1, const _FwdItPat _First2_, const _FwdItPat _Last2_,\r\n        _Pr _Pred_)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis{}, _Results(_Last1),\r\n          _First2(_First2_), _Last2(_Last2_), _Pred(_Pred_) {\r\n        _Basis._Populate(_Team, _First1);\r\n    }\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        if (_Results._Complete()) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n        // Once _Key is obtained, the amount of work should not be discarded (see GH-818).\r\n\r\n        const auto _Range = _Basis._Get_chunk(_Key);\r\n        for (auto _Candidate = _Range._First; _Candidate != _Range._Last; ++_Candidate) {\r\n            if (_STD _Equal_rev_pred_unchecked(_Candidate, _First2, _Last2, _Pred)) {\r\n                _Results._Imbue(_Key._Chunk_number, _Candidate);\r\n                return _Cancellation_status::_Canceled;\r\n            }\r\n        }\r\n\r\n        return _Cancellation_status::_Running;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_search3*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdItHaystack, class _FwdItPat, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD _FwdItHaystack search(_ExPo&&, const _FwdItHaystack _First1, _FwdItHaystack _Last1, const _FwdItPat _First2,\r\n    const _FwdItPat _Last2, _Pr _Pred) noexcept /* terminates */ {\r\n    // find first [_First2, _Last2) match\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdItHaystack);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdItPat);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    const auto _UFirst2 = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2  = _STD _Get_unwrapped(_Last2);\r\n    if (_UFirst2 == _ULast2) {\r\n        return _First1;\r\n    }\r\n\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    const auto _UFirst1 = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1  = _STD _Get_unwrapped(_Last1);\r\n\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) {\r\n            _Iter_diff_t<_FwdItHaystack> _Count;\r\n            if constexpr (_Is_ranges_random_iter_v<_FwdItHaystack> && _Is_ranges_random_iter_v<_FwdItPat>) {\r\n                const auto _HaystackDist = _ULast1 - _UFirst1;\r\n                const auto _NeedleDist   = _ULast2 - _UFirst2;\r\n                if (_NeedleDist > _HaystackDist) { // needle is longer than haystack, no match possible\r\n                    return _Last1;\r\n                }\r\n\r\n                // +1 can't overflow because _NeedleDist > 0 because _First2 != _Last2\r\n                _Count = static_cast<_Iter_diff_t<_FwdItHaystack>>(_HaystackDist - _NeedleDist + 1);\r\n            } else {\r\n                auto _UFirst1c = _UFirst1;\r\n                auto _UFirst2c = _UFirst2;\r\n                for (;;) {\r\n                    if (_UFirst1c == _ULast1) {\r\n                        // either haystack was shorter than needle so no match is possible, or haystack was empty so\r\n                        // returning _Last1 is the same as returning _First1\r\n                        return _Last1;\r\n                    }\r\n\r\n                    ++_UFirst2c;\r\n                    if (_UFirst2c == _ULast2) {\r\n                        _Count = _STD distance(_UFirst1c, _ULast1);\r\n                        break;\r\n                    }\r\n\r\n                    ++_UFirst1c;\r\n                }\r\n            }\r\n\r\n            if (_Count == 1) {\r\n                // 1 match possible == ranges are of equal length -- do better than serial search because we've done the\r\n                // work to calculate distance() of the inputs\r\n                if (_STD _Equal_rev_pred_unchecked(_UFirst1, _UFirst2, _ULast2, _STD _Pass_fn(_Pred))) {\r\n                    return _First1;\r\n                }\r\n\r\n                return _Last1;\r\n            }\r\n\r\n            _TRY_BEGIN\r\n            _Static_partitioned_search3 _Operation{\r\n                _Hw_threads, _Count, _UFirst1, _ULast1, _UFirst2, _ULast2, _STD _Pass_fn(_Pred)};\r\n            _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n            _STD _Seek_wrapped(_Last1, _Operation._Results._Get_result());\r\n            return _Last1;\r\n            _CATCH(const _Parallelism_resources_exhausted&)\r\n            // fall through to search, below\r\n            _CATCH_END\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Last1, _STD search(_UFirst1, _ULast1, _UFirst2, _ULast2, _STD _Pass_fn(_Pred)));\r\n    return _Last1;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Ty, class _Pr>\r\nstruct _Static_partitioned_search_n3 {\r\n    _Static_partition_team<_Iter_diff_t<_FwdIt>> _Team;\r\n    _Static_partition_range<_FwdIt> _Basis;\r\n    _Parallel_find_results<_FwdIt> _Results;\r\n    _Iter_diff_t<_FwdIt> _Target_count;\r\n    const _Ty& _Val;\r\n    _Pr _Pred;\r\n\r\n    _Static_partitioned_search_n3(const size_t _Hw_threads, const _Iter_diff_t<_FwdIt> _Candidates, const _FwdIt _First,\r\n        const _FwdIt _Last, const _Iter_diff_t<_FwdIt> _Target_count_, const _Ty& _Val_, _Pr _Pred_)\r\n        : _Team{_Candidates, _Get_chunked_work_chunk_count(_Hw_threads, _Candidates)}, _Basis{}, _Results(_Last),\r\n          _Target_count(_Target_count_), _Val(_Val_), _Pred(_Pred_) {\r\n        _Basis._Populate(_Team, _First);\r\n    }\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        if (_Results._Complete()) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n        // Once _Key is obtained, the amount of work should not be discarded (see GH-818).\r\n\r\n        const auto _Range = _Basis._Get_chunk(_Key);\r\n\r\n        // any match in this chunk will have at least 1 element in _Range, so the furthest off the\r\n        // end of the candidate range we will need to search is _Target_count - 1\r\n        const _Iter_diff_t<_FwdIt> _Overshoot = _Target_count - 1;\r\n        const auto _Serial_last               = _STD next(_Range._Last, _Overshoot);\r\n\r\n        // we delegate to the serial algorithm targeting [_First, _Last + _Overshoot)\r\n        // which we know is safe because we only partitioned _First + _Candidates start positions\r\n        // if we have a match, it will be within [_First, _Last); otherwise the serial algorithm\r\n        // will tell us _Last + _Overshoot\r\n        const auto _Candidate = _STD search_n(_Range._First, _Serial_last, _Target_count, _Val, _Pred);\r\n        if (_Candidate == _Serial_last) {\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        _Results._Imbue(_Key._Chunk_number, _Candidate);\r\n        return _Cancellation_status::_Canceled;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_search_n3*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Diff, class _Ty, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD _FwdIt search_n(_ExPo&&, const _FwdIt _First, _FwdIt _Last, const _Diff _Count_raw, const _Ty& _Val,\r\n    _Pr _Pred) noexcept /* terminates */ {\r\n    // find first _Count * _Val satisfying _Pred\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    const _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    if (_Count <= 0) {\r\n        _Last = _First;\r\n        return _Last;\r\n    }\r\n\r\n    if (static_cast<uintmax_t>(_Count) > static_cast<uintmax_t>(_STD _Max_limit<_Iter_diff_t<_FwdIt>>())) {\r\n        // if the number of _Vals searched for is larger than the longest possible sequence, we can't find it\r\n        return _Last;\r\n    }\r\n\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) {\r\n            const auto _Haystack_count = _STD distance(_UFirst, _ULast);\r\n            if (_Count > _Haystack_count) {\r\n                return _Last;\r\n            }\r\n\r\n            // +1 can't overflow because _Count > 0\r\n            const auto _Candidates = static_cast<_Iter_diff_t<_FwdIt>>(_Haystack_count - _Count + 1);\r\n            _TRY_BEGIN\r\n            _Static_partitioned_search_n3 _Operation{_Hw_threads, _Candidates, _UFirst, _ULast,\r\n                static_cast<_Iter_diff_t<_FwdIt>>(_Count), _Val, _STD _Pass_fn(_Pred)};\r\n            _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n            _STD _Seek_wrapped(_Last, _Operation._Results._Get_result());\r\n            return _Last;\r\n            _CATCH(const _Parallelism_resources_exhausted&)\r\n            // fall through to search_n, below\r\n            _CATCH_END\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Last, _STD search_n(_UFirst, _ULast, _Count, _Val, _STD _Pass_fn(_Pred)));\r\n    return _Last;\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _Fn>\r\nstruct _Static_partitioned_unary_transform2 {\r\n    using _Diff = _Common_diff_t<_FwdIt1, _FwdIt2>;\r\n    _Static_partition_team<_Diff> _Team;\r\n    _Static_partition_range<_FwdIt1, _Diff> _Source_basis;\r\n    _Static_partition_range<_FwdIt2, _Diff> _Dest_basis;\r\n    _Fn _Func;\r\n\r\n    _Static_partitioned_unary_transform2(\r\n        const size_t _Hw_threads, const _Diff _Count, const _FwdIt1 _First, _Fn _Fx, const _FwdIt2&)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Source_basis{}, _Dest_basis{},\r\n          _Func(_Fx) {\r\n        _Source_basis._Populate(_Team, _First);\r\n    }\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (_Key) {\r\n            const auto _Source = _Source_basis._Get_chunk(_Key);\r\n            _STD transform(_Source._First, _Source._Last, _Dest_basis._Get_chunk(_Key)._First, _Func);\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        return _Cancellation_status::_Canceled;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_unary_transform2*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Fn,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_FwdIt2 transform(_ExPo&&, const _FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _Fn _Func) noexcept\r\n/* terminates */ {\r\n    // transform [_First, _Last) with _Func\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines...\r\n            const auto _Count = _STD distance(_UFirst, _ULast);\r\n            const auto _UDest = _STD _Get_unwrapped_n(_Dest, _Count);\r\n            if (_Count >= 2) { // ... with at least 2 elements\r\n                _TRY_BEGIN\r\n                _Static_partitioned_unary_transform2 _Operation{\r\n                    _Hw_threads, _Count, _UFirst, _STD _Pass_fn(_Func), _UDest};\r\n                _STD _Seek_wrapped(_Dest, _Operation._Dest_basis._Populate(_Operation._Team, _UDest));\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                return _Dest;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n\r\n            _STD _Seek_wrapped(_Dest, _STD transform(_UFirst, _ULast, _UDest, _STD _Pass_fn(_Func)));\r\n            return _Dest;\r\n        } else {\r\n            _STD _Seek_wrapped(_Dest,\r\n                _STD transform(_UFirst, _ULast,\r\n                    _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_FwdIt1>(_UFirst, _ULast)), _STD _Pass_fn(_Func)));\r\n            return _Dest;\r\n        }\r\n    } else {\r\n        _STD _Seek_wrapped(_Dest,\r\n            _STD transform(_UFirst, _ULast, _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_FwdIt1>(_UFirst, _ULast)),\r\n                _STD _Pass_fn(_Func)));\r\n        return _Dest;\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _FwdIt3, class _Fn>\r\nstruct _Static_partitioned_binary_transform2 {\r\n    using _Diff = _Common_diff_t<_FwdIt1, _FwdIt2, _FwdIt3>;\r\n    _Static_partition_team<_Diff> _Team;\r\n    _Static_partition_range<_FwdIt1, _Diff> _Source1_basis;\r\n    _Static_partition_range<_FwdIt2, _Diff> _Source2_basis;\r\n    _Static_partition_range<_FwdIt3, _Diff> _Dest_basis;\r\n    _Fn _Func;\r\n\r\n    _Static_partitioned_binary_transform2(\r\n        const size_t _Hw_threads, const _Diff _Count, _FwdIt1 _First1, _FwdIt2 _First2, _Fn _Fx, const _FwdIt3&)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Source1_basis{}, _Source2_basis{},\r\n          _Dest_basis{}, _Func(_Fx) {\r\n        _Source1_basis._Populate(_Team, _First1);\r\n        _Source2_basis._Populate(_Team, _First2);\r\n    }\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (_Key) {\r\n            const auto _Source1 = _Source1_basis._Get_chunk(_Key);\r\n            _STD transform(_Source1._First, _Source1._Last, _Source2_basis._Get_chunk(_Key)._First,\r\n                _Dest_basis._Get_chunk(_Key)._First, _Func);\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        return _Cancellation_status::_Canceled;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_binary_transform2*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _FwdIt3, class _Fn,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_FwdIt3 transform(_ExPo&&, const _FwdIt1 _First1, const _FwdIt1 _Last1, const _FwdIt2 _First2, _FwdIt3 _Dest,\r\n    _Fn _Func) noexcept /* terminates */ {\r\n    // transform [_First1, _Last1) and [_First2, ...) with _Func\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt3);\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    const auto _UFirst1 = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1  = _STD _Get_unwrapped(_Last1);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines...\r\n            const auto _Count   = _STD distance(_UFirst1, _ULast1);\r\n            const auto _UFirst2 = _STD _Get_unwrapped_n(_First2, _Count);\r\n            const auto _UDest   = _STD _Get_unwrapped_n(_Dest, _Count);\r\n            if (_Count >= 2) { // ... with at least 2 elements\r\n                _TRY_BEGIN\r\n                _Static_partitioned_binary_transform2 _Operation{\r\n                    _Hw_threads, _Count, _UFirst1, _UFirst2, _STD _Pass_fn(_Func), _UDest};\r\n                _STD _Seek_wrapped(_Dest, _Operation._Dest_basis._Populate(_Operation._Team, _UDest));\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                return _Dest;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n\r\n            _STD _Seek_wrapped(_Dest, _STD transform(_UFirst1, _ULast1, _UFirst2, _UDest, _STD _Pass_fn(_Func)));\r\n            return _Dest;\r\n        } else {\r\n            const auto _Count = _STD _Idl_distance<_FwdIt1>(_UFirst1, _ULast1);\r\n            _STD _Seek_wrapped(_Dest, _STD transform(_UFirst1, _ULast1, _STD _Get_unwrapped_n(_First2, _Count),\r\n                                          _STD _Get_unwrapped_n(_Dest, _Count), _STD _Pass_fn(_Func)));\r\n            return _Dest;\r\n        }\r\n    } else {\r\n        const auto _Count = _STD _Idl_distance<_FwdIt1>(_UFirst1, _ULast1);\r\n        _STD _Seek_wrapped(_Dest, _STD transform(_UFirst1, _ULast1, _STD _Get_unwrapped_n(_First2, _Count),\r\n                                      _STD _Get_unwrapped_n(_Dest, _Count), _STD _Pass_fn(_Func)));\r\n        return _Dest;\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Ty, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\nvoid replace(_ExPo&& _Exec, const _FwdIt _First, const _FwdIt _Last, const _Ty& _Oldval, const _Ty& _Newval) noexcept\r\n/* terminates */ {\r\n    // replace each matching _Oldval with _Newval\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt);\r\n    _STD for_each(_STD forward<_ExPo>(_Exec), _First, _Last, [&](auto&& _Value) {\r\n        if (_STD forward<decltype(_Value)>(_Value) == _Oldval) {\r\n            _STD forward<decltype(_Value)>(_Value) = _Newval;\r\n        }\r\n    });\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, class _Ty, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\nvoid replace_if(_ExPo&& _Exec, const _FwdIt _First, const _FwdIt _Last, _Pr _Pred, const _Ty& _Val) noexcept\r\n/* terminates */ {\r\n    // replace each satisfying _Pred with _Val\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt);\r\n    auto _Lambda_pred = _STD _Pass_fn(_Pred); // TRANSITION, DevCom-10456445\r\n    _STD for_each(_STD forward<_ExPo>(_Exec), _First, _Last, [&_Val, _Lambda_pred](auto&& _Value) mutable {\r\n        if (_Lambda_pred(_STD forward<decltype(_Value)>(_Value))) {\r\n            _STD forward<decltype(_Value)>(_Value) = _Val;\r\n        }\r\n    });\r\n}\r\n\r\ntemplate <class _FwdIt, class _Pr>\r\n_FwdIt _Remove_move_if_unchecked(_FwdIt _First, const _FwdIt _Last, _FwdIt _Dest, _Pr _Pred) {\r\n    // move omitting each element satisfying _Pred\r\n    for (; _First != _Last; ++_First) {\r\n        if (!_Pred(*_First)) {\r\n            *_Dest = _STD move(*_First);\r\n            ++_Dest;\r\n        }\r\n    }\r\n\r\n    return _Dest;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Pr>\r\nstruct _Static_partitioned_remove_if2 {\r\n    enum class _Chunk_state : unsigned char {\r\n        _Serial, // while a chunk is in the serial state, it is touched only by an owner thread\r\n        _Merging, // while a chunk is in the merging state, threads all try to CAS the chunk _Merging -> _Moving\r\n                  // the thread that succeeds takes responsibility for moving the keepers from that chunk to the\r\n                  // results\r\n        _Moving, // while a chunk is in the moving state, the keepers are being moved to _Results\r\n                 // only one chunk at a time is ever _Moving; this also serves to synchronize access to _Results\r\n        _Done // when a chunk becomes _Done, it is complete / will never need to touch _Results again\r\n\r\n        // as an optimization, if a thread sees that it has no predecessor (or its predecessor is _Done), it\r\n        // may transition from _Serial directly to _Done, doing the moving step implicitly.\r\n    };\r\n\r\n    struct alignas(hardware_destructive_interference_size) alignas(_FwdIt) _Chunk_local_data {\r\n        atomic<_Chunk_state> _State;\r\n        _FwdIt _New_end;\r\n    };\r\n\r\n    _Static_partition_team<_Iter_diff_t<_FwdIt>> _Team;\r\n    _Static_partition_range<_FwdIt> _Basis;\r\n    _Pr _Pred;\r\n    _Parallel_vector<_Chunk_local_data> _Chunk_locals;\r\n    _FwdIt _Results;\r\n\r\n    _Static_partitioned_remove_if2(\r\n        const size_t _Hw_threads, const _Iter_diff_t<_FwdIt> _Count, const _FwdIt _First, const _Pr _Pred_)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis{}, _Pred{_Pred_},\r\n          _Chunk_locals(_Team._Chunks), _Results{_First} {\r\n        _Basis._Populate(_Team, _First);\r\n    }\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        // remove phase:\r\n        auto _Merge_index = _Key._Chunk_number; // merge step will start from this index\r\n        {\r\n            auto& _Chunk_data = _Chunk_locals[_Merge_index];\r\n            const auto _Range = _Basis._Get_chunk(_Key);\r\n            if (_Merge_index == 0 || _Chunk_locals[_Merge_index - 1]._State.load() == _Chunk_state::_Done) {\r\n                // no predecessor, so run serial algorithm directly into results\r\n                if (_Merge_index == 0 || _Results == _Range._First) {\r\n                    _Results = _STD remove_if(_Range._First, _Range._Last, _Pred);\r\n                } else {\r\n                    _Results = _STD _Remove_move_if_unchecked(_Range._First, _Range._Last, _Results, _Pred);\r\n                }\r\n\r\n                _Chunk_data._State.store(_Chunk_state::_Done);\r\n                ++_Merge_index; // this chunk is already merged\r\n            } else { // predecessor, run serial algorithm in place and attempt to merge later\r\n                _Chunk_data._New_end = _STD remove_if(_Range._First, _Range._Last, _Pred);\r\n                _Chunk_data._State.store(_Chunk_state::_Merging);\r\n                if (_Chunk_locals[_Merge_index - 1]._State.load() != _Chunk_state::_Done) {\r\n                    // if the predecessor isn't done, whichever thread merges our predecessor will merge us too\r\n                    return _Cancellation_status::_Running;\r\n                }\r\n            }\r\n        }\r\n\r\n        // merge phase: at this point, we have observed that our predecessor chunk has been merged to the output,\r\n        // attempt to become the new merging thread if the previous merger gave up\r\n        // note: it is an invariant when we get here that _Chunk_locals[_Merge_index - 1]._State == _Chunk_state::_Done\r\n        for (; _Merge_index != _Team._Chunks; ++_Merge_index) {\r\n            auto& _Merge_chunk_data = _Chunk_locals[_Merge_index];\r\n            auto _Expected          = _Chunk_state::_Merging;\r\n            if (!_Merge_chunk_data._State.compare_exchange_strong(_Expected, _Chunk_state::_Moving)) {\r\n                // either the _Merge_index chunk isn't ready to merge yet, or another thread will do it\r\n                return _Cancellation_status::_Running;\r\n            }\r\n\r\n            const auto _Merge_first   = _Basis._Get_first(_Merge_index, _Team._Get_chunk_offset(_Merge_index));\r\n            const auto _Merge_new_end = _STD exchange(_Merge_chunk_data._New_end, {});\r\n            if (_Results == _Merge_first) { // entire range up to now had no removals, don't bother moving\r\n                _Results = _Merge_new_end;\r\n            } else {\r\n                _Results = _STD _Move_unchecked(_Merge_first, _Merge_new_end, _Results);\r\n            }\r\n\r\n            _Merge_chunk_data._State.store(_Chunk_state::_Done);\r\n        }\r\n\r\n        return _Cancellation_status::_Canceled;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_remove_if2*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD_REMOVE_ALG _FwdIt remove_if(_ExPo&&, _FwdIt _First, const _FwdIt _Last, _Pr _Pred) noexcept\r\n/* terminates */ {\r\n    // remove each satisfying _Pred\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) {\r\n            const auto _Count = _STD distance(_UFirst, _ULast);\r\n            if (_Count >= 2) {\r\n                _TRY_BEGIN\r\n                _Static_partitioned_remove_if2 _Operation{_Hw_threads, _Count, _UFirst, _STD _Pass_fn(_Pred)};\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                _STD _Seek_wrapped(_First, _Operation._Results);\r\n                return _First;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First, _STD remove_if(_UFirst, _ULast, _STD _Pass_fn(_Pred)));\r\n    return _First;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Ty, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD_REMOVE_ALG _FwdIt remove(_ExPo&& _Exec, const _FwdIt _First, const _FwdIt _Last, const _Ty& _Val) noexcept\r\n/* terminates */ {\r\n    // remove each matching _Val\r\n    return _STD remove_if(_STD forward<_ExPo>(_Exec), _First, _Last,\r\n        [&_Val](auto&& _Lhs) { return _STD forward<decltype(_Lhs)>(_Lhs) == _Val; });\r\n}\r\n\r\ntemplate <class _Diff>\r\nstruct _Sort_work_item_impl { // data describing an individual sort work item\r\n    using difference_type = _Diff;\r\n\r\n    _Diff _Offset;\r\n    _Diff _Size;\r\n    _Diff _Ideal;\r\n};\r\n\r\ntemplate <class _RanIt>\r\nusing _Sort_work_item = _Sort_work_item_impl<_Iter_diff_t<_RanIt>>;\r\n\r\ntemplate <class _RanIt, class _Pr>\r\nbool _Process_sort_work_item(const _RanIt _Basis, _Pr _Pred, _Sort_work_item<_RanIt>& _Wi,\r\n    _Sort_work_item<_RanIt>& _Right_fork_wi, _Iter_diff_t<_RanIt>& _Work_complete) noexcept /* terminates */ {\r\n    // processes the sort work item, _Wi, relative to _Basis\r\n    // if the sort is divided into quicksort sub-problems:\r\n    //   the return value is true\r\n    //   _Wi contains the left sub-problem; the caller should continue with this\r\n    //   _Right_fork_wi contains the right sub-problem; the caller should allow this to be stolen\r\n    // otherwise:\r\n    //   the return value is false\r\n    //   _Wi's range is completely sorted\r\n    //   _Right_fork_wi is unmodified\r\n    const auto _Size  = _Wi._Size;\r\n    const auto _First = _Basis + _Wi._Offset;\r\n    const auto _Last  = _First + _Size;\r\n    const auto _Ideal = _Wi._Ideal;\r\n    if (_Size <= _Isort_max<_RanIt>) {\r\n        _STD _Insertion_sort_unchecked(_First, _Last, _Pred);\r\n        _Work_complete += _Size;\r\n        return false;\r\n    }\r\n\r\n    if (0 < _Ideal) { // divide and conquer by partitioning (quicksort)\r\n        const auto _Mid = _STD _Partition_by_median_guess_unchecked(_First, _Last, _Pred);\r\n        const auto _New_ideal =\r\n            static_cast<_Iter_diff_t<_RanIt>>(_Ideal / 2 + _Ideal / 4); // allow 1.5 log2(N) divisions\r\n        _Wi._Size      = _Mid.first - _First;\r\n        _Wi._Ideal     = _New_ideal;\r\n        _Right_fork_wi = {_Mid.second - _Basis, _Last - _Mid.second, _New_ideal};\r\n        _Work_complete += _Mid.second - _Mid.first;\r\n        return true;\r\n    }\r\n\r\n    // too many divisions; heap sort\r\n    _STD _Make_heap_unchecked(_First, _Last, _Pred);\r\n    _STD _Sort_heap_unchecked(_First, _Last, _Pred);\r\n    _Work_complete += _Size;\r\n    return false;\r\n}\r\n\r\ntemplate <class _RanIt, class _Pr>\r\nvoid _Process_sort_queue(const _RanIt _Basis, _Pr _Pred, _Work_stealing_membership<_Sort_work_item<_RanIt>>& _My_ticket,\r\n    _Sort_work_item<_RanIt>& _Wi) noexcept /* terminates */ {\r\n    _Sort_work_item<_RanIt> _Right_fork_wi;\r\n    do { // process work items in the local queue\r\n        while (_STD _Process_sort_work_item(_Basis, _Pred, _Wi, _Right_fork_wi, _My_ticket._Work_complete)) {\r\n            _TRY_BEGIN\r\n            _My_ticket._Push_bottom(_Right_fork_wi);\r\n            _CATCH(const _Parallelism_resources_exhausted&)\r\n            // local queue is full and memory can't be acquired, process _Right_fork_wi serially\r\n            const auto _First = _Basis + _Right_fork_wi._Offset;\r\n            _STD _Sort_unchecked(_First, _First + _Right_fork_wi._Size, _Right_fork_wi._Ideal, _Pred);\r\n            _My_ticket._Work_complete += _Right_fork_wi._Size;\r\n            _CATCH_END\r\n        }\r\n    } while (_My_ticket._Try_pop_bottom(_Wi));\r\n}\r\n\r\ntemplate <class _RanIt, class _Pr>\r\nstruct _Sort_operation { // context for background threads\r\n    _RanIt _Basis;\r\n    _Pr _Pred;\r\n    _Work_stealing_team<_Sort_work_item<_RanIt>> _Team;\r\n\r\n    _Sort_operation(_RanIt _First, _Pr _Pred_arg, size_t _Threads, _Iter_diff_t<_RanIt> _Count)\r\n        : _Basis(_First), _Pred(_Pred_arg), _Team(_Threads, _Count) {}\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, const __std_PTP_WORK _Work) noexcept /* terminates */ {\r\n        const auto _This  = static_cast<_Sort_operation*>(_Context);\r\n        const auto _Basis = _This->_Basis;\r\n        const auto _Pred  = _This->_Pred;\r\n        auto& _Team       = _This->_Team;\r\n        auto _My_ticket   = _Team._Join_team();\r\n        _Sort_work_item<_RanIt> _Wi;\r\n        for (;;) {\r\n            switch (_My_ticket._Steal(_Wi)) {\r\n            case _Steal_result::_Success:\r\n                _STD _Process_sort_queue(_Basis, _Pred, _My_ticket, _Wi);\r\n                break;\r\n            case _Steal_result::_Abort:\r\n                _My_ticket._Leave();\r\n                __std_submit_threadpool_work(_Work);\r\n                return;\r\n            case _Steal_result::_Done:\r\n                return;\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _RanIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\nvoid sort(_ExPo&&, const _RanIt _First, const _RanIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // order [_First, _Last)\r\n    _REQUIRE_CPP17_MUTABLE_RANDOM_ACCESS_ITERATOR(_RanIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst                = _STD _Get_unwrapped(_First);\r\n    const auto _ULast                 = _STD _Get_unwrapped(_Last);\r\n    const _Iter_diff_t<_RanIt> _Ideal = _ULast - _UFirst;\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        size_t _Threads;\r\n        if (_Ideal > _ISORT_MAX && (_Threads = __std_parallel_algorithms_hw_threads()) > 1) {\r\n            // parallelize when input is large enough and we aren't on a uniprocessor machine\r\n            _TRY_BEGIN\r\n            _Sort_operation _Operation(_UFirst, _STD _Pass_fn(_Pred), _Threads, _Ideal); // throws\r\n            const _Work_ptr _Work{_Operation}; // throws\r\n            auto& _Team     = _Operation._Team;\r\n            auto _My_ticket = _Team._Join_team();\r\n            _Work._Submit(_Threads - 1);\r\n            _Sort_work_item<_RanIt> _Wi{0, _Ideal, _Ideal};\r\n            _Steal_result _Sr;\r\n            do {\r\n                _STD _Process_sort_queue(_UFirst, _STD _Pass_fn(_Pred), _My_ticket, _Wi);\r\n\r\n                do {\r\n                    _Sr = _My_ticket._Steal(_Wi);\r\n                } while (_Sr == _Steal_result::_Abort);\r\n            } while (_Sr != _Steal_result::_Done);\r\n            return;\r\n            _CATCH(const _Parallelism_resources_exhausted&)\r\n            // fall through to _Sort_unchecked, below\r\n            _CATCH_END\r\n        }\r\n    }\r\n\r\n    _STD _Sort_unchecked(_UFirst, _ULast, _Ideal, _STD _Pass_fn(_Pred));\r\n}\r\n\r\ntemplate <class _Ty>\r\nstruct _Static_partitioned_temporary_buffer3 {\r\n    _Optimistic_temporary_buffer2<_Ty>& _Temp_buf;\r\n    ptrdiff_t _Chunk_size;\r\n    ptrdiff_t _Unchunked_items;\r\n\r\n    template <class _Diff>\r\n    explicit _Static_partitioned_temporary_buffer3(\r\n        _Optimistic_temporary_buffer2<_Ty>& _Temp_buf_raw, _Static_partition_team<_Diff>& _Team)\r\n        : _Temp_buf(_Temp_buf_raw), _Chunk_size(static_cast<ptrdiff_t>(_Temp_buf._Capacity / _Team._Chunks)),\r\n          _Unchunked_items(static_cast<ptrdiff_t>(_Temp_buf._Capacity % _Team._Chunks)) {}\r\n\r\n    pair<_Ty*, ptrdiff_t> _Get_temp_buffer_for_chunk(const size_t _Chunk_number) {\r\n        // get a view of the region of the temporary buffer allocated to chunk _Chunk_number\r\n        return _Get_temp_buffer_for_chunk_range(_Chunk_number, _Chunk_number + 1);\r\n    }\r\n\r\n    pair<_Ty*, ptrdiff_t> _Get_temp_buffer_for_chunk_range(const size_t _Base, const size_t _End) {\r\n        // get a view of the region of the temporary buffer allocated to the region of chunks [_Base, _End)\r\n        const auto _Offset = _Get_offset(_Base);\r\n        return {_Temp_buf._Data + _Offset, _Offset - _Get_offset(_End)};\r\n    }\r\n\r\n    _Ty* _Get_first(const size_t _Chunk_number) {\r\n        // get a pointer to the first element of the temporary buffer allocated to chunk _Chunk_number\r\n        return _Temp_buf._Data + _Get_offset(_Chunk_number);\r\n    }\r\n\r\n    ptrdiff_t _Get_offset(const size_t _Chunk_number) {\r\n        // get the offset of the first element of the temporary buffer allocated to chunk _Chunk_number\r\n        auto _Diff_chunk = static_cast<ptrdiff_t>(_Chunk_number);\r\n        return _Diff_chunk * _Chunk_size + (_STD min) (_Diff_chunk, _Unchunked_items);\r\n    }\r\n\r\n    void _Destroy_all() { // destroy each element of the temporary buffer\r\n        _STD _Destroy_range(_Temp_buf._Data, _Temp_buf._Data + _Temp_buf._Capacity);\r\n    }\r\n};\r\n\r\ninline size_t _Get_stable_sort_tree_height(const size_t _Count, const size_t _Hw_threads) {\r\n    // Get height of merge tree for parallel stable_sort, a bottom-up merge sort.\r\n    // * each merge takes two chunks from a buffer and copies to the other buffer in sorted order\r\n    // * we want the overall result to end up in the input buffer and not into _Temp_buf; each merge\r\n    //   \"level\" switches between the input buffer and the temporary buffer; as a result we want\r\n    //   the number of merge \"levels\" to be even (and thus chunks must be 2 raised to an even power)\r\n    // * the smallest chunk must be at least of size _ISORT_MAX\r\n    // * we want a number of chunks as close to _Ideal_chunks as we can to minimize scheduling\r\n    //   overhead, but can use more chunks than that\r\n    const auto _Count_max_chunks       = _Count / _ISORT_MAX;\r\n    const size_t _Log_count_max_chunks = _Floor_of_log_2(_Count_max_chunks);\r\n\r\n    // if _Log_count_max_chunks is odd, that would break our 2 to even power invariant, so\r\n    // go to the next smaller power of 2\r\n    const auto _Count_max_tree_height = _Log_count_max_chunks & ~static_cast<size_t>(1);\r\n\r\n    const auto _Ideal_chunks       = _Hw_threads * _Oversubscription_multiplier;\r\n    const size_t _Log_ideal_chunks = _Floor_of_log_2(_Ideal_chunks);\r\n#ifdef _WIN64\r\n    constexpr size_t _Max_tree_height = 62; // to avoid ptrdiff_t overflow\r\n#else // ^^^ defined(_WIN64) / !defined(_WIN64) vvv\r\n    constexpr size_t _Max_tree_height = 30;\r\n#endif // ^^^ !defined(_WIN64) ^^^\r\n    const size_t _Clamped_ideal_chunks = (_STD min) (_Max_tree_height, _Log_ideal_chunks);\r\n\r\n    // similarly, if _Clamped_ideal_chunks is odd, that would break our 2 to even power invariant,\r\n    // so go to the next higher power of 2\r\n    const auto _Ideal_tree_height = _Clamped_ideal_chunks + (_Clamped_ideal_chunks & 0x1U);\r\n\r\n    return (_STD min) (_Count_max_tree_height, _Ideal_tree_height);\r\n}\r\n\r\nstruct _Bottom_up_merge_tree {\r\n    // merge tree / cells:\r\n    // each level of the tree has the next 1 bit turned on:\r\n    // 0 == done\r\n    //         1               1\r\n    //         2       3       1x\r\n    //         4   5   6   7   1xx\r\n    // chunks: 0 1 2 3 4 5 6 7\r\n    // the starting cell for a given chunk is (_Chunk_number >> 1) + (1 << (height - 1))\r\n    // (divide the chunk number by 2, and add the starting index of the bottom row of the tree)\r\n    // a cell's parent is just left shifting the current cell by 1\r\n    size_t _Height;\r\n    // each cell's data is stored at _Buckets[_Cell - 1], since the 0th cell is unused / indicates termination\r\n    _Parallel_vector<atomic<bool>> _Buckets;\r\n\r\n    explicit _Bottom_up_merge_tree(const size_t _Height_)\r\n        : _Height(_Height_), _Buckets((static_cast<size_t>(1) << _Height_) - 1) {}\r\n};\r\n\r\nstruct _Bottom_up_tree_visitor {\r\n    size_t _Cell;\r\n    size_t _Base;\r\n    size_t _Shift;\r\n\r\n    _Bottom_up_tree_visitor(const size_t _Tree_height, const size_t _Initial_chunk)\r\n        : _Cell((_Initial_chunk >> 1) + (static_cast<size_t>(1) << (_Tree_height - 1))),\r\n          _Base(_Initial_chunk & ~static_cast<size_t>(1)), _Shift(1) {}\r\n\r\n    bool _Try_give_up_merge_to_peer(_Bottom_up_merge_tree& _Merge_tree) const {\r\n        // Attempt to mark that this child is done, to let our peer do the merge.\r\n        // Returns whether we successfully gave responsibility for doing the current merge to our peer.\r\n        return !_Merge_tree._Buckets[_Cell - 1].exchange(true);\r\n    }\r\n\r\n    bool _Go_to_parent() {\r\n        // Attempt to go to the parent in the merge tree; returns whether the move to the parent was successful.\r\n        _Shift <<= 1;\r\n        _Base -= _Shift * (_Cell & static_cast<size_t>(1));\r\n        _Cell >>= 1;\r\n        return _Cell != 0;\r\n    }\r\n};\r\n\r\ntemplate <class _BidIt, class _Pr>\r\nstruct _Static_partitioned_stable_sort4 {\r\n    using _Diff = _Iter_diff_t<_BidIt>;\r\n    _Static_partition_team<_Diff> _Team;\r\n    _Static_partition_range<_BidIt> _Basis;\r\n    _Bottom_up_merge_tree _Merge_tree;\r\n    _Static_partitioned_temporary_buffer3<_Iter_value_t<_BidIt>> _Temp_buf;\r\n    _Pr _Pred;\r\n\r\n    _Static_partitioned_stable_sort4(_Optimistic_temporary_buffer2<_Iter_value_t<_BidIt>>& _Temp_buf_raw,\r\n        const _Diff _Count, const size_t _Merge_tree_height_, const _BidIt _First, _Pr _Pred_)\r\n        : _Team(_Count, static_cast<size_t>(1) << _Merge_tree_height_), _Basis{}, _Merge_tree(_Merge_tree_height_),\r\n          _Temp_buf(_Temp_buf_raw, _Team), _Pred{_Pred_} {\r\n        _Basis._Populate(_Team, _First);\r\n    }\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        {\r\n            const auto _Serial_chunk = _Basis._Get_chunk(_Key);\r\n            const auto _Temp_chunk   = _Temp_buf._Get_temp_buffer_for_chunk(_Key._Chunk_number);\r\n            _STD _Stable_sort_unchecked(\r\n                _Serial_chunk._First, _Serial_chunk._Last, _Key._Size, _Temp_chunk.first, _Temp_chunk.second, _Pred);\r\n        }\r\n\r\n        _Bottom_up_tree_visitor _Visitor{_Merge_tree._Height, _Key._Chunk_number};\r\n        if (_Visitor._Try_give_up_merge_to_peer(_Merge_tree)) { // peer will do the work to merge\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        if (_Temp_buf._Temp_buf._Capacity >= _Team._Count) { // enough space, combine using merge\r\n            { // first merge is special; constructs the elements in the temporary buffer space\r\n                const size_t _Base = _Visitor._Base;\r\n                _STD _Uninitialized_merge_move(_Basis._Get_first(_Base, _Team._Get_chunk_offset(_Base)),\r\n                    _Basis._Get_first(_Base + 1, _Team._Get_chunk_offset(_Base + 1)),\r\n                    _Basis._Get_first(_Base + 2, _Team._Get_chunk_offset(_Base + 2)), _Temp_buf._Get_first(_Base),\r\n                    _Pred);\r\n            }\r\n\r\n            for (;;) { // walk remaining merge tree\r\n                (void) _Visitor._Go_to_parent(); // can't be complete because the data is in the temporary buffer\r\n                if (_Visitor._Try_give_up_merge_to_peer(_Merge_tree)) { // the other child will do the merge\r\n                    return _Cancellation_status::_Running;\r\n                }\r\n\r\n                { // merge two sub-ranges from temporary buffer to input\r\n                    const size_t _Base = _Visitor._Base;\r\n                    const size_t _Mid  = _Base + _Visitor._Shift;\r\n                    const size_t _End  = _Mid + _Visitor._Shift;\r\n                    _STD _Merge_move_unchecked(_Temp_buf._Get_first(_Base), _Temp_buf._Get_first(_Mid),\r\n                        _Temp_buf._Get_first(_End), _Basis._Get_first(_Base, _Team._Get_chunk_offset(_Base)), _Pred);\r\n                }\r\n\r\n                if (!_Visitor._Go_to_parent()) {\r\n                    // temporary bits have been copied back to the input, no parent, so we're done\r\n                    _Temp_buf._Destroy_all();\r\n                    return _Cancellation_status::_Canceled;\r\n                }\r\n\r\n                if (_Visitor._Try_give_up_merge_to_peer(_Merge_tree)) { // the other child will do the merge\r\n                    return _Cancellation_status::_Running;\r\n                }\r\n\r\n                { // merge two sub-ranges from input to temporary buffer\r\n                    const size_t _Base = _Visitor._Base;\r\n                    const size_t _Mid  = _Base + _Visitor._Shift;\r\n                    const size_t _End  = _Mid + _Visitor._Shift;\r\n                    _STD _Merge_move_unchecked(_Basis._Get_first(_Base, _Team._Get_chunk_offset(_Base)),\r\n                        _Basis._Get_first(_Mid, _Team._Get_chunk_offset(_Mid)),\r\n                        _Basis._Get_first(_End, _Team._Get_chunk_offset(_End)), _Temp_buf._Get_first(_Base), _Pred);\r\n                }\r\n            }\r\n        } else { // not enough space, combine using inplace_merge\r\n            for (;;) {\r\n                const size_t _Base      = _Visitor._Base;\r\n                const size_t _Mid       = _Base + _Visitor._Shift;\r\n                const size_t _End       = _Mid + _Visitor._Shift;\r\n                const auto _Base_offset = _Team._Get_chunk_offset(_Base);\r\n                const auto _Mid_offset  = _Team._Get_chunk_offset(_Mid);\r\n                const auto _End_offset  = _Team._Get_chunk_offset(_End);\r\n                const auto _Temp_range  = _Temp_buf._Get_temp_buffer_for_chunk_range(_Base, _End);\r\n                _STD _Buffered_inplace_merge_unchecked(_Basis._Get_first(_Base, _Base_offset),\r\n                    _Basis._Get_first(_Mid, _Mid_offset), _Basis._Get_first(_End, _End_offset),\r\n                    _Mid_offset - _Base_offset, _End_offset - _Mid_offset, _Temp_range.first, _Temp_range.second,\r\n                    _Pred);\r\n\r\n                if (!_Visitor._Go_to_parent()) { // no parent, so we're done\r\n                    return _Cancellation_status::_Canceled;\r\n                }\r\n\r\n                if (_Visitor._Try_give_up_merge_to_peer(_Merge_tree)) { // the other child will do the merge\r\n                    return _Cancellation_status::_Running;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_stable_sort4*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _BidIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\nvoid stable_sort(_ExPo&&, const _BidIt _First, const _BidIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // sort preserving order of equivalents\r\n    _REQUIRE_CPP17_MUTABLE_BIDIRECTIONAL_ITERATOR(_BidIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    const auto _Count  = _STD distance(_UFirst, _ULast);\r\n    if (_Count <= _ISORT_MAX) {\r\n        _STD _Insertion_sort_unchecked(_UFirst, _ULast, _STD _Pass_fn(_Pred));\r\n        return;\r\n    }\r\n\r\n    size_t _Hw_threads;\r\n    bool _Attempt_parallelism;\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        _Hw_threads          = __std_parallel_algorithms_hw_threads();\r\n        _Attempt_parallelism = _Hw_threads > 1;\r\n    } else {\r\n        _Attempt_parallelism = false;\r\n    }\r\n\r\n    _Optimistic_temporary_buffer2<_Iter_value_t<_BidIt>> _Temp_buf{_Attempt_parallelism ? _Count : _Count - _Count / 2};\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        if (_Attempt_parallelism) {\r\n            // forward+ iterator overflow assumption for size_t cast\r\n            const auto _Tree_height = _Get_stable_sort_tree_height(static_cast<size_t>(_Count), _Hw_threads);\r\n            if (_Tree_height != 0) {\r\n                _TRY_BEGIN\r\n                _Static_partitioned_stable_sort4 _Operation{\r\n                    _Temp_buf, _Count, _Tree_height, _UFirst, _STD _Pass_fn(_Pred)};\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                return;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Stable_sort_unchecked(_UFirst, _ULast, _Count, _Temp_buf._Data, _Temp_buf._Capacity, _STD _Pass_fn(_Pred));\r\n}\r\n\r\ntemplate <class _FwdIt, class _Pr>\r\nstruct _Static_partitioned_is_sorted_until2 {\r\n    _Static_partition_team<_Iter_diff_t<_FwdIt>> _Team;\r\n    // note offset partitioning:\r\n    _Static_partition_range<_FwdIt> _Basis; // contains partition of [_First, _Last - 1)\r\n    _Pr _Pred;\r\n    _Parallel_find_results<_FwdIt> _Results;\r\n\r\n    _Static_partitioned_is_sorted_until2(\r\n        _FwdIt _First, _FwdIt _Last, const size_t _Hw_threads, const _Iter_diff_t<_FwdIt> _Count, _Pr _Pred_)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis{}, _Pred(_Pred_), _Results(_Last) {\r\n        _Basis._Populate(_Team, _First);\r\n    }\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        if (_Results._Complete()) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n        // Once _Key is obtained, the amount of work should not be discarded (see GH-818).\r\n\r\n        auto _Range = _Basis._Get_chunk(_Key);\r\n        auto _Next  = _Range._First;\r\n        do {\r\n            ++_Next;\r\n            if (_DEBUG_LT_PRED(_Pred, *_Next, *_Range._First)) {\r\n                _Results._Imbue(_Key._Chunk_number, _Next);\r\n                return _Cancellation_status::_Canceled;\r\n            }\r\n\r\n            _Range._First = _Next;\r\n        } while (_Range._First != _Range._Last);\r\n\r\n        return _Cancellation_status::_Running;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_is_sorted_until2*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD _FwdIt is_sorted_until(_ExPo&&, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // find extent of range that is ordered by predicate\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines\r\n            auto _Count = _STD distance(_UFirst, _ULast);\r\n            if (_Count >= 3) { // ... with at least 3 elements\r\n                _TRY_BEGIN\r\n                --_Count; // note unusual offset partitioning\r\n                _Static_partitioned_is_sorted_until2 _Operation{\r\n                    _UFirst, _ULast, _Hw_threads, _Count, _STD _Pass_fn(_Pred)};\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                _STD _Seek_wrapped(_First, _Operation._Results._Get_result());\r\n                return _First;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First, _STD is_sorted_until(_UFirst, _ULast, _STD _Pass_fn(_Pred)));\r\n    return _First;\r\n}\r\n\r\ninline constexpr unsigned char _Contains_counterexample = 0;\r\ninline constexpr unsigned char _Contains_true           = 1;\r\ninline constexpr unsigned char _Contains_false          = 2;\r\n\r\ntemplate <class _FwdIt, class _Pr>\r\nunsigned char _Chunk_is_partitioned_status(_FwdIt _First, _FwdIt _Last, _Pr _Pred) {\r\n    // Returns the is_partitioned status for this range.\r\n    // pre: Range is non-empty\r\n    unsigned char _Result = 0;\r\n    if (_Pred(*_First)) { // starts with T\r\n        _Result = _Contains_true;\r\n        for (;;) { // skip T partition\r\n            ++_First;\r\n            if (_First == _Last) { // all T\r\n                return _Contains_true;\r\n            }\r\n\r\n            if (!_Pred(*_First)) { // range contains a switching point from T to F\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    _Result |= _Contains_false;\r\n    while (++_First != _Last) { // verify F partition\r\n        if (_Pred(*_First)) { // found an out of place element\r\n            return _Contains_counterexample;\r\n        }\r\n    }\r\n\r\n    return _Result;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Pr>\r\nstruct _Static_partitioned_is_partitioned {\r\n    _Static_partition_team<_Iter_diff_t<_FwdIt>> _Team;\r\n    _Static_partition_range<_FwdIt> _Basis;\r\n    atomic<size_t> _Rightmost_true; // chunk number of the rightmost chunk found so far containing a T element\r\n    atomic<size_t> _Leftmost_false; // chunk number of the leftmost chunk found so far containing an F element\r\n    _Pr _Pred;\r\n\r\n    _Static_partitioned_is_partitioned(\r\n        const size_t _Hw_threads, const _Iter_diff_t<_FwdIt> _Count, const _FwdIt _First, _Pr _Pred_)\r\n        : _Team(_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)), _Basis{}, _Rightmost_true(0),\r\n          _Leftmost_false(SIZE_MAX - 1), _Pred(_Pred_) {\r\n        _Basis._Populate(_Team, _First);\r\n    }\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        // Note that the cancellation status here is not used in the final returned answer of is_partitioned. Returning\r\n        // _Cancellation_status::_Canceled is simply used as an \"early fail\" mechanism to avoid doing unnecessary work.\r\n        // A final comparison of _Rightmost_true and _Leftmost_false is used to determine the final return value from\r\n        // a call to is_partitioned.\r\n        if (_Rightmost_true.load(memory_order_relaxed) > _Leftmost_false.load(memory_order_relaxed)) {\r\n            // we've found a T to the right of an F, so we know the range cannot be partitioned and we can stop\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n        // Once _Key is obtained, the amount of work should not be discarded (see GH-818).\r\n\r\n        // looking at chunks from either end, moving in towards the middle\r\n        auto _Target_chunk_number = _Key._Chunk_number >> 1;\r\n        if (!(_Key._Chunk_number & static_cast<size_t>(1))) {\r\n            _Target_chunk_number = _Team._Chunks - _Target_chunk_number - 1;\r\n        }\r\n\r\n        const auto _Target_chunk_key  = _Team._Get_chunk_key(_Target_chunk_number);\r\n        const auto _Chunk             = _Basis._Get_chunk(_Target_chunk_key);\r\n        const auto _This_chunk_status = _STD _Chunk_is_partitioned_status(_Chunk._First, _Chunk._Last, _Pred);\r\n\r\n        if (_This_chunk_status == _Contains_counterexample) {\r\n            // indicating that this chunk contains a counterexample, so the range is not partitioned\r\n            _Rightmost_true.store(SIZE_MAX);\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        // after determining the is_partitioned status for this chunk,\r\n        // we need to update the chunk numbers for leftmost F and rightmost T\r\n        auto _Old_true = _Rightmost_true.load();\r\n        if (_This_chunk_status & _Contains_true) {\r\n            while (_Target_chunk_number > _Old_true) {\r\n                if (_Rightmost_true.compare_exchange_weak(_Old_true, _Target_chunk_number)) {\r\n                    _Old_true = _Target_chunk_number;\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        // try to bail before doing more work if possible\r\n        auto _Old_false = _Leftmost_false.load();\r\n        if (_Old_true > _Old_false) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        if (_This_chunk_status & _Contains_false) {\r\n            while (_Target_chunk_number < _Old_false) {\r\n                if (_Leftmost_false.compare_exchange_weak(_Old_false, _Target_chunk_number)) {\r\n                    _Old_false = _Target_chunk_number;\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        // Other loads/stores may have been reordered around the loads of _Old_false and _Old_true, but this check may\r\n        // allow us to avoid more atomic loads.\r\n        // If such loads/stores have been reordered around the loads of _Old_false and _Old_true, then the next call to\r\n        // _Process_chunk will exit given the check on the _Rightmost_true and _Leftmost_false values at the top of the\r\n        // method.\r\n        if (_Old_true > _Old_false) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        return _Cancellation_status::_Running;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_is_partitioned*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD bool is_partitioned(_ExPo&&, const _FwdIt _First, const _FwdIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // test if [_First, _Last) is partitioned by _Pred\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines\r\n            const auto _Count = _STD distance(_UFirst, _ULast);\r\n            if (_Count >= 2) { // ... with at least 2 elements\r\n                _TRY_BEGIN\r\n                _Static_partitioned_is_partitioned _Operation{_Hw_threads, _Count, _UFirst, _STD _Pass_fn(_Pred)};\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                return _Operation._Rightmost_true.load(memory_order_relaxed)\r\n                    <= _Operation._Leftmost_false.load(memory_order_relaxed);\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n        }\r\n    }\r\n\r\n    return _STD is_partitioned(_UFirst, _ULast, _STD _Pass_fn(_Pred));\r\n}\r\n\r\ntemplate <class _RanIt, class _Pr>\r\nstruct _Static_partitioned_is_heap_until2 {\r\n    using _Diff = _Iter_diff_t<_RanIt>;\r\n    _Static_partition_team<_Diff> _Team;\r\n    _RanIt _Range_first;\r\n    _Pr _Pred;\r\n    _Parallel_find_results<_RanIt> _Results;\r\n\r\n    _Static_partitioned_is_heap_until2(\r\n        _RanIt _First, _RanIt _Last, const size_t _Hw_threads, const _Diff _Count, _Pr _Pred_)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Range_first(_First), _Pred(_Pred_),\r\n          _Results(_Last) {}\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        if (_Results._Complete()) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n        // Once _Key is obtained, the amount of work should not be discarded (see GH-818).\r\n\r\n        const auto _Chunk_range_size = _Key._Size;\r\n        const auto _Chunk_offset     = _Key._Start_at;\r\n        const auto _Last             = _Chunk_offset + _Chunk_range_size;\r\n\r\n        const auto _Initial = (_STD max) (_Chunk_offset, _Diff{1});\r\n        for (_Diff _Off = _Initial; _Off < _Last; ++_Off) {\r\n            if (_DEBUG_LT_PRED(_Pred, *(_Range_first + ((_Off - 1) >> 1)), *(_Range_first + _Off))) {\r\n                _Results._Imbue(_Key._Chunk_number, _Range_first + _Off);\r\n                return _Cancellation_status::_Canceled;\r\n            }\r\n        }\r\n\r\n        return _Cancellation_status::_Running;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_is_heap_until2*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _RanIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD _RanIt is_heap_until(_ExPo&&, _RanIt _First, _RanIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // find extent of range that is a heap\r\n    _REQUIRE_PARALLEL_ITERATOR(_RanIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines\r\n            const auto _Count = _ULast - _UFirst;\r\n            if (_Count >= 3) { // ... with at least 3 elements\r\n                _TRY_BEGIN\r\n                _Static_partitioned_is_heap_until2 _Operation{\r\n                    _UFirst, _ULast, _Hw_threads, _Count, _STD _Pass_fn(_Pred)};\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                _STD _Seek_wrapped(_First, _Operation._Results._Get_result());\r\n                return _First;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First, _STD is_heap_until(_UFirst, _ULast, _STD _Pass_fn(_Pred)));\r\n    return _First;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Pr>\r\npair<_FwdIt, _Iter_diff_t<_FwdIt>> _Partition_with_count_unchecked(_FwdIt _First, _FwdIt _Last, _Pr _Pred) {\r\n    // move elements satisfying _Pred to front and track how many elements satisfy _Pred\r\n    if constexpr (_Is_cpp17_random_iter_v<_FwdIt>) {\r\n        auto _Mid = _STD partition(_First, _Last, _Pred);\r\n        return {_Mid, _Mid - _First};\r\n    } else if constexpr (_Is_cpp17_bidi_iter_v<_FwdIt>) {\r\n        _Iter_diff_t<_FwdIt> _Trues{};\r\n        for (;;) { // find any out-of-order pair\r\n            for (;;) { // skip in-place elements at beginning\r\n                if (_First == _Last) {\r\n                    return {_First, _Trues};\r\n                }\r\n\r\n                if (!_Pred(*_First)) {\r\n                    break;\r\n                }\r\n\r\n                ++_First;\r\n                ++_Trues;\r\n            }\r\n\r\n            do { // skip in-place elements at end\r\n                --_Last;\r\n                if (_First == _Last) {\r\n                    return {_First, _Trues};\r\n                }\r\n            } while (!_Pred(*_Last));\r\n\r\n            swap(*_First, *_Last); // out of place, swap and loop; intentional ADL\r\n            ++_First;\r\n            ++_Trues;\r\n        }\r\n    } else {\r\n        _Iter_diff_t<_FwdIt> _Trues{};\r\n        for (;;) { // skip in-place elements at beginning\r\n            if (_First == _Last) {\r\n                return {_First, _Trues};\r\n            }\r\n\r\n            if (!_Pred(*_First)) {\r\n                break;\r\n            }\r\n\r\n            ++_First;\r\n            ++_Trues;\r\n        }\r\n\r\n        for (_FwdIt _Next = _First; ++_Next != _Last;) {\r\n            if (_Pred(*_Next)) {\r\n                swap(*_First, *_Next); // out of place, swap and loop; intentional ADL\r\n                ++_First;\r\n                ++_Trues;\r\n            }\r\n        }\r\n\r\n        return {_First, _Trues};\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Pr>\r\npair<_FwdIt, _Iter_diff_t<_FwdIt>> _Partition_swap_backward(\r\n    _FwdIt _First, _FwdIt _Last, _FwdIt _Beginning_of_falses, _Pr _Pred) {\r\n    // Swap elements in [_First, _Last) satisfying _Pred with elements from _Beginning_of_falses.\r\n    // Pre: _Beginning_of_falses < _First\r\n    _Iter_diff_t<_FwdIt> _Trues{};\r\n    if constexpr (_Is_cpp17_bidi_iter_v<_FwdIt>) {\r\n        while (_First != _Last) {\r\n            --_Last;\r\n            if (_Pred(*_Last)) {\r\n                swap(*_Beginning_of_falses, *_Last); // intentional ADL\r\n                ++_Beginning_of_falses;\r\n                ++_Trues;\r\n                if (_Beginning_of_falses == _First) {\r\n                    auto _Remain = _STD _Partition_with_count_unchecked(_First, _Last, _Pred);\r\n                    return {_Remain.first, static_cast<_Iter_diff_t<_FwdIt>>(_Remain.second + _Trues)};\r\n                }\r\n            }\r\n        }\r\n    } else {\r\n        for (; _First != _Last; ++_First) {\r\n            if (_Pred(*_First)) {\r\n                swap(*_First, *_Beginning_of_falses); // intentional ADL\r\n                ++_Beginning_of_falses;\r\n                ++_Trues;\r\n            }\r\n        }\r\n    }\r\n\r\n    return {_Beginning_of_falses, _Trues};\r\n}\r\n\r\ntemplate <class _FwdIt>\r\n_FwdIt _Partition_merge(const _FwdIt _False_first, const _FwdIt _True_first, const _FwdIt _True_last,\r\n    const _Iter_diff_t<_FwdIt> _Count1, const _Iter_diff_t<_FwdIt> _Count2) {\r\n    // Merge partition ranges where [_False_first, _True_first) are falses, [_True_first, _True_last) are trues\r\n    // pre: _Count1 == distance(_False_first, _True_first) && _Count2 == distance(_True_first, _True_last)\r\n    if (_Count1 < _Count2) { // move the false range to the end of the true range\r\n        const _Iter_diff_t<_FwdIt> _Offset = _Count2 - _Count1;\r\n        auto _Result                       = _True_first;\r\n        if constexpr (_Is_cpp17_random_iter_v<_FwdIt>) {\r\n            _Result += _Offset;\r\n        } else if constexpr (_Is_cpp17_bidi_iter_v<_FwdIt>) {\r\n            if (_Count1 < _Offset) {\r\n                _Result = _True_last;\r\n                _STD advance(_Result, -_Count1);\r\n            } else {\r\n                _STD advance(_Result, _Offset);\r\n            }\r\n        } else {\r\n            _STD advance(_Result, _Offset);\r\n        }\r\n\r\n        _Swap_ranges_unchecked(_False_first, _True_first, _Result);\r\n        return _Result;\r\n    }\r\n\r\n    // move the true range to the beginning of the false range\r\n    return _Swap_ranges_unchecked(_True_first, _True_last, _False_first);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Pr>\r\nstruct _Static_partitioned_partition2 {\r\n    using _Diff = _Iter_diff_t<_FwdIt>;\r\n\r\n    enum class _Chunk_state : unsigned char {\r\n        _Serial, // while a chunk is in the serial state, it is touched only by an owner thread\r\n        _Merging, // while a chunk is in the merging state, threads all try to CAS the chunk _Merging -> _Swapping\r\n                  // the thread that succeeds takes responsibility for swapping the trues from that chunk to the\r\n                  // results\r\n        _Swapping, // while a chunk is in the swapping state, the trues are being merged with _Results\r\n                   // only one chunk at a time is ever _Swapping; this also serves to synchronize access to\r\n                   // _Results and _Results_falses\r\n        _Done // when a chunk becomes _Done, it is complete / will never need to touch _Results again\r\n    };\r\n\r\n    struct alignas(hardware_destructive_interference_size) alignas(_FwdIt) _Chunk_local_data {\r\n        atomic<_Chunk_state> _State;\r\n        _FwdIt _Beginning_of_falses;\r\n        _Diff _Chunk_trues;\r\n    };\r\n\r\n    _Static_partition_team<_Diff> _Team;\r\n    _Static_partition_range<_FwdIt> _Basis;\r\n    _Pr _Pred;\r\n    _Parallel_vector<_Chunk_local_data> _Chunk_locals;\r\n    _FwdIt _Results;\r\n    _Diff _Results_falses;\r\n\r\n    _Static_partitioned_partition2(const size_t _Hw_threads, const _Diff _Count, const _FwdIt _First, const _Pr _Pred_)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis{}, _Pred{_Pred_},\r\n          _Chunk_locals(_Team._Chunks), _Results{_First}, _Results_falses{} {\r\n        _Basis._Populate(_Team, _First);\r\n    }\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        // serial-on-each-chunk phase:\r\n        auto _Merge_index = _Key._Chunk_number; // merge step will start from this index\r\n        {\r\n            auto& _Chunk_data = _Chunk_locals[_Merge_index];\r\n            const auto _Range = _Basis._Get_chunk(_Key);\r\n            if (_Merge_index == 0 || _Chunk_locals[_Merge_index - 1]._State.load() == _Chunk_state::_Done) {\r\n                // no predecessor, so run serial algorithm directly into results\r\n                const auto _Chunk_results =\r\n                    _Merge_index == 0 || _Results == _Range._First\r\n                        ? _STD _Partition_with_count_unchecked(_Range._First, _Range._Last, _Pred)\r\n                        : _STD _Partition_swap_backward(_Range._First, _Range._Last, _Results, _Pred);\r\n                _Results                 = _Chunk_results.first;\r\n                _Chunk_data._Chunk_trues = _Chunk_results.second;\r\n                _Results_falses += _Key._Size - _Chunk_results.second;\r\n                _Chunk_data._State.store(_Chunk_state::_Done);\r\n                ++_Merge_index; // this chunk is already merged\r\n            } else {\r\n                // predecessor, run serial algorithm in place and attempt to merge later\r\n                auto _Chunk_results = _STD _Partition_with_count_unchecked(_Range._First, _Range._Last, _Pred);\r\n                _Chunk_data._Beginning_of_falses = _Chunk_results.first;\r\n                _Chunk_data._Chunk_trues         = _Chunk_results.second;\r\n                _Chunk_data._State.store(_Chunk_state::_Merging);\r\n                if (_Chunk_locals[_Merge_index - 1]._State.load() != _Chunk_state::_Done) {\r\n                    // if the predecessor isn't done, whichever thread merges our predecessor will merge us too\r\n                    return _Cancellation_status::_Running;\r\n                }\r\n            }\r\n        }\r\n\r\n        // merge phase: at this point, we have observed that our predecessor chunk has been merged to the output,\r\n        // attempt to become the new merging thread if the previous merger gave up\r\n        // note: it is an invariant when we get here that _Chunk_locals[_Merge_index - 1]._State == _Chunk_state::_Done\r\n        for (; _Merge_index != _Team._Chunks; ++_Merge_index) {\r\n            auto& _Merge_chunk_data = _Chunk_locals[_Merge_index];\r\n            auto _Expected          = _Chunk_state::_Merging;\r\n            if (!_Merge_chunk_data._State.compare_exchange_strong(_Expected, _Chunk_state::_Swapping)) {\r\n                // either the _Merge_index chunk isn't ready to merge yet, or another thread will do it\r\n                return _Cancellation_status::_Running;\r\n            }\r\n\r\n            const auto _Merge_key   = _Team._Get_chunk_key(_Merge_index);\r\n            const auto _Chunk_trues = _Merge_chunk_data._Chunk_trues;\r\n\r\n            _Results = _Partition_merge(_Results, _Basis._Get_first(_Merge_index, _Merge_key._Start_at),\r\n                _STD exchange(_Merge_chunk_data._Beginning_of_falses, {}), _Results_falses, _Chunk_trues);\r\n            _Results_falses += _Merge_key._Size - _Chunk_trues;\r\n            _Merge_chunk_data._State.store(_Chunk_state::_Done);\r\n        }\r\n\r\n        return _Cancellation_status::_Canceled;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_partition2*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_FwdIt partition(_ExPo&&, _FwdIt _First, const _FwdIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // move elements satisfying _Pred to beginning of sequence\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) {\r\n            const auto _Count = _STD distance(_UFirst, _ULast);\r\n            if (_Count >= 2) {\r\n                _TRY_BEGIN\r\n                _Static_partitioned_partition2 _Operation{_Hw_threads, _Count, _UFirst, _STD _Pass_fn(_Pred)};\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                _STD _Seek_wrapped(_First, _Operation._Results);\r\n                return _First;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First, _STD partition(_UFirst, _ULast, _STD _Pass_fn(_Pred)));\r\n    return _First;\r\n}\r\n\r\ninline constexpr unsigned char _Local_available = 1;\r\ninline constexpr unsigned char _Sum_available   = 2;\r\n\r\n// For scan algorithms: if the intermediate and output types are the same, we can directly store the binary operation\r\n// result in the output. If not, then we need a place to store intermediate results.\r\ntemplate <class _Ty, class _Iter>\r\nconstexpr bool _Scan_reuse_output = is_same_v<_Ty, typename iterator_traits<_Iter>::value_type>;\r\n\r\ntemplate <class _Ty, class _Iter, bool = _Scan_reuse_output<_Ty, _Iter>>\r\nclass _Scan_intermediate_storage {\r\nprivate:\r\n    _Parallel_vector<_Ty> _Data;\r\n\r\npublic:\r\n    template <class _Diff>\r\n    explicit _Scan_intermediate_storage(const _Static_partition_team<_Diff>&) noexcept {}\r\n\r\n    _NODISCARD _Parallel_vector<_Ty>& operator[](size_t) noexcept {\r\n        return _Data;\r\n    }\r\n};\r\n\r\ntemplate <class _Ty, class _Iter>\r\nclass _Scan_intermediate_storage<_Ty, _Iter, false> {\r\nprivate:\r\n    _Parallel_vector<_Parallel_vector<_Ty>> _Data;\r\n\r\npublic:\r\n    template <class _Diff>\r\n    explicit _Scan_intermediate_storage(const _Static_partition_team<_Diff>& _Team) : _Data(_Team._Chunks) {\r\n        const auto _Chunk_size = static_cast<size_t>(_Team._Chunk_size);\r\n        for (auto& _Vec : _Data) {\r\n            _Vec.reserve(_Chunk_size);\r\n        }\r\n    }\r\n\r\n    _NODISCARD _Parallel_vector<_Ty>& operator[](const size_t _Idx) noexcept {\r\n        _STL_INTERNAL_CHECK(_Idx < _Data.size());\r\n        return _Data[_Idx];\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Scan_decoupled_lookback {\r\n    // inter-chunk communication block in \"Single-pass Parallel Prefix Scan with Decoupled Look-back\" by Merrill and\r\n    // Garland\r\n    using value_type = _Ty;\r\n    atomic<unsigned char> _State;\r\n    _Storage_for<_Ty> _Local; // owned by thread iff _State < _Local_available; otherwise const and shared\r\n    _Storage_for<_Ty> _Sum; // owned by thread iff _State < _Sum_available\r\n\r\n    unsigned char _Get_available_state() const {\r\n        for (;;) {\r\n            const unsigned char _Local_state = _State.load();\r\n            if (_Local_state != 0) {\r\n                return _Local_state;\r\n            }\r\n\r\n            __std_execution_wait_on_uchar(reinterpret_cast<const unsigned char*>(&_State), _Local_state);\r\n        }\r\n    }\r\n\r\n    void _Store_available_state(const unsigned char _New_state) {\r\n        _State.store(_New_state);\r\n        __std_execution_wake_by_address_all(&_State);\r\n    }\r\n\r\n    template <class _FwdIt, class _BinOp>\r\n    void _Apply_exclusive_predecessor(\r\n        _Ty& _Preceding, _FwdIt _First, _Ty* _First2, const _FwdIt _Last, _BinOp _Reduce_op) {\r\n        // apply _Preceding to [_First, _Last) and _Sum._Ref(), using _Reduce_op\r\n        _STD _Implicitly_construct_in_place_by_binary_op(_Sum._Ref(), _Reduce_op, _Preceding, _Local._Ref());\r\n        _State.store(_Local_available | _Sum_available);\r\n        *_First = _Preceding;\r\n\r\n#pragma loop(ivdep)\r\n        while (++_First != _Last) {\r\n            if constexpr (_Scan_reuse_output<_Ty, _FwdIt>) {\r\n                *_First = _Reduce_op(_Preceding, _STD move(*_First));\r\n            } else {\r\n                ++_First2;\r\n                *_First = _Reduce_op(_Preceding, _STD move(*_First2));\r\n            }\r\n        }\r\n    }\r\n\r\n    template <class _FwdIt, class _BinOp>\r\n    void _Apply_inclusive_predecessor(\r\n        _Ty& _Preceding, _FwdIt _First, _Ty* _First2, const _FwdIt _Last, _BinOp _Reduce_op) {\r\n        // apply _Preceding to [_First, _Last) and _Sum._Ref(), using _Reduce_op\r\n        _STD _Implicitly_construct_in_place_by_binary_op(_Sum._Ref(), _Reduce_op, _Preceding, _Local._Ref());\r\n        _State.store(_Local_available | _Sum_available);\r\n\r\n#pragma loop(ivdep)\r\n        for (; _First != _Last; ++_First) {\r\n            if constexpr (_Scan_reuse_output<_Ty, _FwdIt>) {\r\n                *_First = _Reduce_op(_Preceding, _STD move(*_First));\r\n            } else {\r\n                *_First = _Reduce_op(_Preceding, _STD move(*_First2));\r\n                ++_First2;\r\n            }\r\n        }\r\n    }\r\n\r\n    ~_Scan_decoupled_lookback() {\r\n        const auto _State_bits = _State.load(memory_order_relaxed);\r\n        if (_State_bits & _Sum_available) {\r\n            _STD _Destroy_in_place(_Sum._Ref());\r\n        }\r\n\r\n        if (_State_bits & _Local_available) {\r\n            _STD _Destroy_in_place(_Local._Ref());\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _BidIt, class _BinOp>\r\ntypename _Iter_value_t<_BidIt>::value_type _Get_lookback_sum(const _BidIt _Current, _BinOp _Reduce_op) {\r\n    // Calculate the sum of the _Scan_decoupled_lookback referenced by _Current.\r\n    // pre: _Current->_State & _Local_available\r\n    // pre: Some iterator i exists before _Current such that i->_Get_available_state & _Sum_available\r\n    static_assert(_Is_specialization_v<_Iter_value_t<_BidIt>, _Scan_decoupled_lookback>, \"Bad _Get_lookback_sum\");\r\n    auto _Prev = _Current;\r\n    --_Prev;\r\n    auto _Prev_state = _Prev->_Get_available_state();\r\n    typename _Iter_value_t<_BidIt>::value_type _Result =\r\n        _Reduce_op(_Prev_state & _Sum_available ? _Prev->_Sum._Ref() : _Prev->_Local._Ref(), _Current->_Local._Ref());\r\n    while (!(_Prev_state & _Sum_available)) {\r\n        --_Prev;\r\n        _Prev_state = _Prev->_Get_available_state();\r\n        _Result =\r\n            _Reduce_op(_Prev_state & _Sum_available ? _Prev->_Sum._Ref() : _Prev->_Local._Ref(), _STD move(_Result));\r\n    }\r\n\r\n    return _Result;\r\n}\r\n\r\ntemplate <class _Ty>\r\nstruct _Casty_plus {\r\n    // Adds the two arguments together and casts the result back to _Ty.\r\n    // pre: the result from adding the two arguments together can fit in _Ty\r\n    _NODISCARD static constexpr _Ty operator()(_Ty _Val1, _Ty _Val2) noexcept\r\n    /* terminates */ {\r\n        return static_cast<_Ty>(_Val1 + _Val2);\r\n    }\r\n};\r\n\r\ntemplate <class _Diff>\r\nvoid _Surrender_elements_to_next_chunk(const size_t _Chunk_number,\r\n    const typename _Parallel_vector<_Scan_decoupled_lookback<_Diff>>::iterator _Chunk_lookback_data) {\r\n    // Deals with the case in which all of the elements in the chunk corresponding to _Chunk_lookback_data will be\r\n    // handled by the following chunk, so this chunk needs to publish its results accordingly.\r\n    if (_Chunk_number == 0) {\r\n        // This is the first chunk, so we can immediately publish results. No need to set\r\n        // _Chunk_lookback_data->_Local._Ref() to be 0, since chunk 0 has no predecessors and its local and total sums\r\n        // are the same. Chunk_lookback_data->_Sum is already 0, so we can just publish results immediately.\r\n        _Chunk_lookback_data->_Store_available_state(_Sum_available);\r\n        return;\r\n    }\r\n\r\n    // We need to pass the previous chunk's sum to the right.\r\n    // _Chunk_lookback_data->_Local is already 0, so we can just publish results immediately.\r\n    _Chunk_lookback_data->_Store_available_state(_Local_available);\r\n\r\n    const auto _Prev_chunk_lookback_data = _Prev_iter(_Chunk_lookback_data);\r\n    _Diff _Prev_chunk_sum;\r\n    if (_Prev_chunk_lookback_data->_Get_available_state() & _Sum_available) {\r\n        _Prev_chunk_sum = _Prev_chunk_lookback_data->_Sum._Ref();\r\n    } else {\r\n        // Note that we can use _Casty_plus because _Diff is defined as _Common_diff<..., _RanIt3> and the maximum value\r\n        // that will be placed in _Lookback by adding two of the previous sums together is the total number of elements\r\n        // in the result. Assuming that _Dest has enough space for the result, the value produced by adding two previous\r\n        // sums should fit inside _Diff.\r\n        _Prev_chunk_sum = _STD _Get_lookback_sum(_Prev_chunk_lookback_data, _Casty_plus<_Diff>{});\r\n    }\r\n\r\n    _Chunk_lookback_data->_Sum._Ref() = _Prev_chunk_sum;\r\n    _Chunk_lookback_data->_Store_available_state(_Sum_available);\r\n}\r\n\r\ntemplate <class _RanIt1, class _RanIt2, class _RanIt3>\r\nvoid _Place_elements_from_indices(\r\n    const _RanIt1 _First, _RanIt2 _Dest, _RanIt3 _Indices_first, const ptrdiff_t _Num_results) {\r\n    // Places _Num_results elements at indices in _Indices_first from the range indicated by _First into _Dest.\r\n    const auto _Last_index = _Indices_first + _Num_results;\r\n    for (; _Indices_first != _Last_index; ++_Indices_first) {\r\n        const auto _Curr_index = *_Indices_first;\r\n        *_Dest                 = *(_First + static_cast<_Iter_diff_t<_RanIt1>>(_Curr_index));\r\n        ++_Dest;\r\n    }\r\n}\r\n\r\ntemplate <class _RanIt1, class _RanIt2, class _RanIt3, class _Pr, class _SetOper>\r\nstruct _Static_partitioned_set_subtraction {\r\n    using _Diff = _Common_diff_t<_RanIt1, _RanIt2, _RanIt3>;\r\n    _Static_partition_team<_Diff> _Team;\r\n    _Static_partition_range<_RanIt1, _Diff> _Basis;\r\n    _Parallel_vector<_Diff> _Index_indicator; // buffer used to store information about indices in Range 1\r\n    _Iterator_range<_RanIt2> _Range2;\r\n    _RanIt3 _Dest;\r\n    _Parallel_vector<_Scan_decoupled_lookback<_Diff>> _Lookback; // the \"Single-pass Parallel Prefix Scan with\r\n                                                                 // Decoupled Look-back\" is used here to track\r\n                                                                 // information about how many elements were placed\r\n                                                                 // in _Dest by preceding chunks\r\n    _Pr _Pred;\r\n    _SetOper _Set_oper_per_chunk;\r\n\r\n    _Static_partitioned_set_subtraction(const size_t _Hw_threads, const _Diff _Count, _RanIt1 _First1, _RanIt2 _First2,\r\n        const _RanIt2 _Last2, _RanIt3 _Dest_, _Pr _Pred_, _SetOper _Set_oper)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis{},\r\n          _Index_indicator(static_cast<size_t>(_Count)), _Range2{_First2, _Last2}, _Dest(_Dest_),\r\n          _Lookback(_Team._Chunks), _Pred(_Pred_), _Set_oper_per_chunk(_Set_oper) {\r\n        _Basis._Populate(_Team, _First1);\r\n    }\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Chunk_number        = _Key._Chunk_number;\r\n        const auto _Chunk_lookback_data = _Lookback.begin() + static_cast<ptrdiff_t>(_Chunk_number);\r\n\r\n        // iterators for the actual beginning of this chunk's range in _Range1 (after adjustments below)\r\n        auto [_Range1_chunk_first, _Range1_chunk_last] = _Basis._Get_chunk(_Key);\r\n        const bool _Last_chunk                         = _Chunk_number == _Team._Chunks - 1;\r\n\r\n        // Get appropriate range for _Range1.\r\n        // We don't want any spans of equal elements to reach across chunk boundaries.\r\n        if (!_Last_chunk) {\r\n            // Slide _Range1_chunk_last to the left so that there are no copies of *_Range1_chunk_last in _Range1_chunk.\r\n            // Note that we know that this chunk is not the last, so we can look at the element at _Range1_chunk_last.\r\n            _Range1_chunk_last = _STD lower_bound(_Range1_chunk_first, _Range1_chunk_last, *_Range1_chunk_last, _Pred);\r\n\r\n            if (_Range1_chunk_last <= _Range1_chunk_first) {\r\n                // All of the elements in _Range1's chunk are equal to the element at _Range1_chunk_last, so they will\r\n                // be handled by the next chunk.\r\n                _Surrender_elements_to_next_chunk<_Diff>(_Chunk_number, _Chunk_lookback_data);\r\n                return _Cancellation_status::_Running;\r\n            }\r\n        }\r\n\r\n        // Slide _Range1_chunk_first to the left so that all copies of *_Range1_chunk_first are in this chunk\r\n        // of Range 1.\r\n        _Range1_chunk_first = _STD lower_bound(_Basis._Start_at, _Range1_chunk_first, *_Range1_chunk_first, _Pred);\r\n\r\n        // Get chunk in _Range2 that corresponds to our current chunk from _Range1\r\n        auto _Range2_chunk_first = _STD lower_bound(_Range2._First, _Range2._Last, *_Range1_chunk_first, _Pred);\r\n        auto _Range2_chunk_last =\r\n            _STD upper_bound(_Range2_chunk_first, _Range2._Last, *_STD _Prev_iter(_Range1_chunk_last), _Pred);\r\n\r\n        // Publish results to rest of chunks.\r\n        if (_Chunk_number == 0) {\r\n            // Chunk 0 is special as it has no predecessor;\r\n            // its local and total sums are the same and we can immediately put its results in _Dest.\r\n            const auto _Num_results = _Set_oper_per_chunk._Update_dest(\r\n                _Range1_chunk_first, _Range1_chunk_last, _Range2_chunk_first, _Range2_chunk_last, _Dest, _Pred);\r\n\r\n            _Chunk_lookback_data->_Sum._Ref() = _Num_results;\r\n            _Chunk_lookback_data->_Store_available_state(_Sum_available);\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        const auto _Prev_chunk_lookback_data = _Prev_iter(_Chunk_lookback_data);\r\n        if (_Prev_chunk_lookback_data->_State.load() & _Sum_available) {\r\n            // If the predecessor sum is already complete, we can incorporate its value directly for 1 pass.\r\n            const auto _Prev_chunk_sum = _Prev_chunk_lookback_data->_Sum._Ref();\r\n            auto _Chunk_specific_dest  = _Dest + static_cast<_Iter_diff_t<_RanIt3>>(_Prev_chunk_sum);\r\n            const auto _Num_results    = _Set_oper_per_chunk._Update_dest(_Range1_chunk_first, _Range1_chunk_last,\r\n                   _Range2_chunk_first, _Range2_chunk_last, _Chunk_specific_dest, _Pred);\r\n\r\n            _Chunk_lookback_data->_Sum._Ref() = static_cast<_Diff>(_Num_results + _Prev_chunk_sum);\r\n            _Chunk_lookback_data->_Store_available_state(_Sum_available);\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        // Get range we can use for this chunk of range 1 in the buffer.\r\n        auto _Index_chunk_first =\r\n            _Index_indicator.begin() + static_cast<ptrdiff_t>(_Range1_chunk_first - _Basis._Start_at);\r\n\r\n        // Determine the indices of elements that should be in the result from this chunk.\r\n        const auto _Num_results             = _Set_oper_per_chunk._Mark_indices(_Range1_chunk_first, _Range1_chunk_last,\r\n                        _Range2_chunk_first, _Range2_chunk_last, _Index_chunk_first, _Pred);\r\n        _Chunk_lookback_data->_Local._Ref() = _Num_results;\r\n        _Chunk_lookback_data->_Store_available_state(_Local_available);\r\n\r\n        // Apply the predecessor overall sum to current overall sum and elements.\r\n        _Diff _Prev_chunk_sum;\r\n        if (_Prev_chunk_lookback_data->_Get_available_state() & _Sum_available) {\r\n            // Predecessor overall sum is done, use directly.\r\n            _Prev_chunk_sum = _Prev_chunk_lookback_data->_Sum._Ref();\r\n        } else {\r\n            _Prev_chunk_sum = _STD _Get_lookback_sum(_Prev_chunk_lookback_data, _Casty_plus<_Diff>{});\r\n        }\r\n\r\n        _Chunk_lookback_data->_Sum._Ref() = static_cast<_Diff>(_Num_results + _Prev_chunk_sum);\r\n        _Chunk_lookback_data->_Store_available_state(_Sum_available);\r\n\r\n        // Place elements from _Range1 in _Dest according to the offsets previously calculated.\r\n        auto _Chunk_specific_dest = _Dest + static_cast<_Iter_diff_t<_RanIt3>>(_Prev_chunk_sum);\r\n        _STD _Place_elements_from_indices(\r\n            _Range1_chunk_first, _Chunk_specific_dest, _Index_chunk_first, static_cast<ptrdiff_t>(_Num_results));\r\n        return _Cancellation_status::_Running;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_set_subtraction*>(_Context));\r\n    }\r\n};\r\n\r\nstruct _Set_intersection_per_chunk {\r\n    template <class _RanIt1, class _RanIt2, class _RanIt3, class _Pr>\r\n    _Common_diff_t<_RanIt1, _RanIt2, _RanIt3> _Update_dest(\r\n        _RanIt1 _First1, const _RanIt1 _Last1, _RanIt2 _First2, const _RanIt2 _Last2, _RanIt3 _Dest, _Pr _Pred) {\r\n        // Copy elements from [_First, _Last1) that are also present in [_First2, _Last2) according to _Pred, to\r\n        // _Dest. Returns the number of elements stored.\r\n        return _STD set_intersection(_First1, _Last1, _First2, _Last2, _Dest, _Pred) - _Dest;\r\n    }\r\n\r\n    template <class _RanIt1, class _RanIt2, class _BidIt, class _Pr>\r\n    _Iter_value_t<_BidIt> _Mark_indices(_RanIt1 _First1, const _RanIt1 _Last1, _RanIt2 _First2, const _RanIt2 _Last2,\r\n        _BidIt _Index_chunk_first, _Pr _Pred) {\r\n        // Stores offsets of elements in [_First1, _Last1) that are also present in [_First2, _Last2) according to\r\n        // _Pred, to _Index_chunk_first. Returns the number of offsets stored.\r\n        static_assert(is_integral_v<_Iter_value_t<_BidIt>>);\r\n        static_assert(\r\n            is_same_v<_Iter_value_t<_BidIt>, common_type_t<_Iter_value_t<_BidIt>, _Common_diff_t<_RanIt1, _RanIt2>>>);\r\n        _DEBUG_ORDER_SET_UNWRAPPED(_RanIt2, _First1, _Last1, _Pred);\r\n        _DEBUG_ORDER_SET_UNWRAPPED(_RanIt1, _First2, _Last2, _Pred);\r\n        const auto _Index_chunk_first_save       = _Index_chunk_first;\r\n        _Iter_diff_t<_RanIt1> _Curr_range1_index = 0;\r\n        _Iter_diff_t<_RanIt2> _Curr_range2_index = 0;\r\n        const auto _Range1_dist                  = _Last1 - _First1;\r\n        const auto _Range2_dist                  = _Last2 - _First2;\r\n        while (_Curr_range1_index < _Range1_dist && _Curr_range1_index < _Range2_dist) {\r\n            if (_DEBUG_LT_PRED(_Pred, *(_First1 + _Curr_range1_index), *(_First2 + _Curr_range2_index))) {\r\n                ++_Curr_range1_index;\r\n            } else {\r\n                if (!_Pred(*(_First2 + _Curr_range2_index), *(_First1 + _Curr_range1_index))) {\r\n                    *_Index_chunk_first = static_cast<_Iter_value_t<_BidIt>>(_Curr_range1_index);\r\n                    ++_Index_chunk_first;\r\n                    ++_Curr_range1_index;\r\n                }\r\n\r\n                ++_Curr_range2_index;\r\n            }\r\n        }\r\n\r\n        return static_cast<_Iter_value_t<_BidIt>>(_Index_chunk_first - _Index_chunk_first_save);\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _FwdIt3, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_FwdIt3 set_intersection(_ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _FwdIt3 _Dest,\r\n    _Pr _Pred) noexcept /* terminates */ {\r\n    // AND sets [_First1, _Last1) and [_First2, _Last2)\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt3);\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2 = _STD _Get_unwrapped(_Last2);\r\n    auto _UDest        = _STD _Get_unwrapped_unverified(_Dest);\r\n    using _Diff        = _Common_diff_t<_FwdIt1, _FwdIt2, _FwdIt3>;\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize && _Is_ranges_random_iter_v<_FwdIt1>\r\n                  && _Is_ranges_random_iter_v<_FwdIt2> && _Is_cpp17_random_iter_v<_FwdIt3>) {\r\n        // only parallelize if desired, and all of the iterators given are random access\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines\r\n            const _Diff _Count1 = _ULast1 - _UFirst1;\r\n            const _Diff _Count2 = _ULast2 - _UFirst2;\r\n            if (_Count1 >= 2 && _Count2 >= 2) { // ... with each range containing at least 2 elements\r\n                _TRY_BEGIN\r\n                _Static_partitioned_set_subtraction _Operation(_Hw_threads, _Count1, _UFirst1, _UFirst2, _ULast2,\r\n                    _UDest, _STD _Pass_fn(_Pred), _Set_intersection_per_chunk());\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                _UDest += static_cast<_Iter_diff_t<_FwdIt3>>(_Operation._Lookback.back()._Sum._Ref());\r\n                _STD _Seek_wrapped(_Dest, _UDest);\r\n                return _Dest;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(\r\n        _Dest, _STD set_intersection(_UFirst1, _ULast1, _UFirst2, _ULast2, _UDest, _STD _Pass_fn(_Pred)));\r\n    return _Dest;\r\n}\r\n\r\nstruct _Set_difference_per_chunk {\r\n    template <class _RanIt1, class _RanIt2, class _RanIt3, class _Pr>\r\n    _Common_diff_t<_RanIt1, _RanIt2, _RanIt3> _Update_dest(\r\n        _RanIt1 _First1, const _RanIt1 _Last1, _RanIt2 _First2, _RanIt2 _Last2, _RanIt3 _Dest, _Pr _Pred) {\r\n        // Copy elements from [_First1, _Last1), except those in [_First2, _Last2) according to _Pred, to _Dest.\r\n        // Returns the number of elements stored.\r\n        return _STD set_difference(_First1, _Last1, _First2, _Last2, _Dest, _Pred) - _Dest;\r\n    }\r\n\r\n    template <class _RanIt1, class _RanIt2, class _BidIt, class _Pr>\r\n    _Iter_value_t<_BidIt> _Mark_indices(_RanIt1 _First1, const _RanIt1 _Last1, _RanIt2 _First2, const _RanIt2 _Last2,\r\n        _BidIt _Index_chunk_first, _Pr _Pred) {\r\n        // Stores offsets of elements in [_First1, _Last1), except those in [_First2, _Last2) according to _Pred, to\r\n        // _Index_chunk_first. Returns the number of offsets stored.\r\n        static_assert(is_integral_v<_Iter_value_t<_BidIt>>);\r\n        static_assert(\r\n            is_same_v<_Iter_value_t<_BidIt>, common_type_t<_Iter_value_t<_BidIt>, _Common_diff_t<_RanIt1, _RanIt2>>>);\r\n        _DEBUG_ORDER_SET_UNWRAPPED(_RanIt2, _First1, _Last1, _Pred);\r\n        _DEBUG_ORDER_SET_UNWRAPPED(_RanIt1, _First2, _Last2, _Pred);\r\n        const auto _Index_chunk_first_save       = _Index_chunk_first;\r\n        _Iter_diff_t<_RanIt1> _Curr_range1_index = 0;\r\n        _Iter_diff_t<_RanIt2> _Curr_range2_index = 0;\r\n        const auto _Range1_dist                  = _Last1 - _First1;\r\n        const auto _Range2_dist                  = _Last2 - _First2;\r\n        while (_Curr_range1_index < _Range1_dist && _Curr_range2_index < _Range2_dist) {\r\n            if (_DEBUG_LT_PRED(_Pred, *(_First1 + _Curr_range1_index), *(_First2 + _Curr_range2_index))) {\r\n                *_Index_chunk_first = static_cast<_Iter_value_t<_BidIt>>(_Curr_range1_index);\r\n                ++_Index_chunk_first;\r\n                ++_Curr_range1_index;\r\n            } else {\r\n                if (!_Pred(*(_First2 + _Curr_range2_index), *(_First1 + _Curr_range1_index))) {\r\n                    ++_Curr_range1_index;\r\n                }\r\n\r\n                ++_Curr_range2_index;\r\n            }\r\n        }\r\n\r\n        // If we haven't traversed all of range 1 yet, we want to include the rest of it in the results.\r\n        for (; _Curr_range1_index < _Range1_dist; ++_Curr_range1_index) {\r\n            *_Index_chunk_first = static_cast<_Iter_value_t<_BidIt>>(_Curr_range1_index);\r\n            ++_Index_chunk_first;\r\n        }\r\n\r\n        return static_cast<_Iter_value_t<_BidIt>>(_Index_chunk_first - _Index_chunk_first_save);\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _FwdIt3, class _Pr,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_FwdIt3 set_difference(_ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _FwdIt3 _Dest,\r\n    _Pr _Pred) noexcept /* terminates */ {\r\n    // take set [_First2, _Last2) from [_First1, _Last1)\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt3);\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2 = _STD _Get_unwrapped(_Last2);\r\n    auto _UDest        = _STD _Get_unwrapped_unverified(_Dest);\r\n    using _Diff        = _Common_diff_t<_FwdIt1, _FwdIt2, _FwdIt3>;\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize && _Is_ranges_random_iter_v<_FwdIt1>\r\n                  && _Is_ranges_random_iter_v<_FwdIt2> && _Is_cpp17_random_iter_v<_FwdIt3>) {\r\n        // only parallelize if desired, and all of the iterators given are random access\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines\r\n            const _Diff _Count = _ULast1 - _UFirst1;\r\n            if (_Count >= 2) { // ... with at least 2 elements in [_First1, _Last1)\r\n                _TRY_BEGIN\r\n                _Static_partitioned_set_subtraction _Operation(_Hw_threads, _Count, _UFirst1, _UFirst2, _ULast2, _UDest,\r\n                    _STD _Pass_fn(_Pred), _Set_difference_per_chunk());\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                _UDest += static_cast<_Iter_diff_t<_FwdIt3>>(_Operation._Lookback.back()._Sum._Ref());\r\n                _STD _Seek_wrapped(_Dest, _UDest);\r\n                return _Dest;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _STD set_difference(_UFirst1, _ULast1, _UFirst2, _ULast2, _UDest, _STD _Pass_fn(_Pred)));\r\n    return _Dest;\r\n}\r\n\r\ntemplate <class _InIt, class _Ty, class _BinOp>\r\n_Ty _Reduce_move_unchecked(_InIt _First, const _InIt _Last, _Ty _Val, _BinOp _Reduce_op) {\r\n    // return reduction, choose optimization\r\n#if _STD_VECTORIZE_WITH_FLOAT_CONTROL\r\n    if constexpr (_Plus_on_arithmetic_ranges_reduction_v<_Unwrapped_t<const _InIt&>, _Ty, _BinOp>) {\r\n        return _STD _Reduce_plus_arithmetic_ranges(_First, _Last, _Val);\r\n    } else\r\n#endif // ^^^ _STD_VECTORIZE_WITH_FLOAT_CONTROL ^^^\r\n    {\r\n        for (; _First != _Last; ++_First) {\r\n            _Val = _Reduce_op(_STD move(_Val), _STD move(*_First)); // Requirement missing from N4950\r\n        }\r\n\r\n        return _Val;\r\n    }\r\n}\r\n\r\ntemplate <class _Ty, class _FwdIt, class _BinOp>\r\n_Ty _Reduce_at_least_two(const _FwdIt _First, const _FwdIt _Last, _BinOp _Reduce_op) {\r\n    // return reduction with no initial value\r\n    // pre: distance(_First, _Last) >= 2\r\n#if _STD_VECTORIZE_WITH_FLOAT_CONTROL\r\n    if constexpr (_Plus_on_arithmetic_ranges_reduction_v<_FwdIt, _Ty, _BinOp>) {\r\n        return _STD _Reduce_plus_arithmetic_ranges(_First, _Last, _Ty{0});\r\n    } else\r\n#endif // ^^^ _STD_VECTORIZE_WITH_FLOAT_CONTROL ^^^\r\n    {\r\n        auto _Next = _First;\r\n        _Ty _Val   = _Reduce_op(*_First, *++_Next);\r\n        while (++_Next != _Last) {\r\n            _Val = _Reduce_op(_STD move(_Val), *_Next); // Requirement missing from N4950\r\n        }\r\n\r\n        return _Val;\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Ty, class _BinOp>\r\nstruct _Static_partitioned_reduce2 {\r\n    // reduction task scheduled on the system thread pool\r\n    _Static_partition_team<_Iter_diff_t<_FwdIt>> _Team;\r\n    _Static_partition_range<_FwdIt> _Basis;\r\n    _BinOp _Reduce_op;\r\n    _Generalized_sum_drop<_Ty> _Results;\r\n\r\n    _Static_partitioned_reduce2(\r\n        const _Iter_diff_t<_FwdIt> _Count, const size_t _Chunks, const _FwdIt _First, _BinOp _Reduce_op_)\r\n        : _Team{_Count, _Chunks}, _Basis{}, _Reduce_op(_Reduce_op_), _Results{_Team._Chunks} {\r\n        _Basis._Populate(_Team, _First);\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        const auto _This = static_cast<_Static_partitioned_reduce2*>(_Context);\r\n        auto _Key        = _This->_Team._Get_next_key();\r\n        if (_Key) {\r\n            auto _Chunk        = _This->_Basis._Get_chunk(_Key);\r\n            auto _Local_result = _STD _Reduce_at_least_two<_Ty>(_Chunk._First, _Chunk._Last, _This->_Reduce_op);\r\n            while ((_Key = _This->_Team._Get_next_key())) {\r\n                _Chunk        = _This->_Basis._Get_chunk(_Key);\r\n                _Local_result = _STD reduce(_Chunk._First, _Chunk._Last, _STD move(_Local_result), _This->_Reduce_op);\r\n            }\r\n\r\n            _This->_Results._Add_result(_STD move(_Local_result));\r\n        }\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Ty, class _BinOp,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD _Ty reduce(_ExPo&&, const _FwdIt _First, const _FwdIt _Last, _Ty _Val, _BinOp _Reduce_op) noexcept\r\n/* terminates */ {\r\n    // return commutative and associative reduction of _Val and [_First, _Last), using _Reduce_op\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines...\r\n            const auto _Count  = _STD distance(_UFirst, _ULast);\r\n            const auto _Chunks = _Get_least2_chunked_work_chunk_count(_Hw_threads, _Count);\r\n            if (_Chunks > 1) {\r\n                _TRY_BEGIN\r\n                auto _Passed_fn = _STD _Pass_fn(_Reduce_op);\r\n                _Static_partitioned_reduce2<decltype(_UFirst), _Ty, decltype(_Passed_fn)> _Operation{\r\n                    _Count, _Chunks, _UFirst, _Passed_fn};\r\n                {\r\n                    // we don't use _Run_chunked_parallel_work here because the initial value on background threads\r\n                    // is synthesized from the input, but on this thread the initial value is _Val\r\n                    const _Work_ptr _Work{_Operation};\r\n                    // setup complete, hereafter nothrow or terminate\r\n                    _Work._Submit_for_chunks(_Hw_threads, _Chunks);\r\n                    while (const auto _Stolen_key = _Operation._Team._Get_next_key()) {\r\n                        auto _Chunk = _Operation._Basis._Get_chunk(_Stolen_key);\r\n                        _Val = _STD reduce(_Chunk._First, _Chunk._Last, _STD move(_Val), _STD _Pass_fn(_Reduce_op));\r\n                    }\r\n                } // join with _Work_ptr threads\r\n\r\n                auto& _Results = _Operation._Results;\r\n                return _STD _Reduce_move_unchecked(\r\n                    _Results.begin(), _Results.end(), _STD move(_Val), _STD _Pass_fn(_Reduce_op));\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n        }\r\n    }\r\n\r\n    return _STD reduce(_UFirst, _ULast, _STD move(_Val), _STD _Pass_fn(_Reduce_op));\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _Ty, class _BinOp1, class _BinOp2>\r\nstruct _Static_partitioned_transform_reduce_binary2 { // transform-reduction task scheduled on the system thread pool\r\n    using _Diff = _Common_diff_t<_FwdIt1, _FwdIt2>;\r\n    _Static_partition_team<_Diff> _Team;\r\n    _Static_partition_range<_FwdIt1, _Diff> _Basis1;\r\n    _Static_partition_range<_FwdIt2, _Diff> _Basis2;\r\n    _BinOp1 _Reduce_op;\r\n    _BinOp2 _Transform_op;\r\n    _Generalized_sum_drop<_Ty> _Results;\r\n\r\n    _Static_partitioned_transform_reduce_binary2(const _Diff _Count, const size_t _Chunks, const _FwdIt1 _First1,\r\n        const _FwdIt2 _First2, _BinOp1 _Reduce_op_, _BinOp2 _Transform_op_)\r\n        : _Team{_Count, _Chunks}, _Basis1{}, _Basis2{}, _Reduce_op(_Reduce_op_), _Transform_op(_Transform_op_),\r\n          _Results{_Chunks} {\r\n        _Basis1._Populate(_Team, _First1);\r\n        _Basis2._Populate(_Team, _First2);\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        const auto _This = static_cast<_Static_partitioned_transform_reduce_binary2*>(_Context);\r\n        auto _Key        = _This->_Team._Get_next_key();\r\n        if (_Key) {\r\n            auto _Reduce_op    = _This->_Reduce_op;\r\n            auto _Transform_op = _This->_Transform_op;\r\n            auto _Chunk1       = _This->_Basis1._Get_chunk(_Key);\r\n            auto _First2 =\r\n                _This->_Basis2._Get_first(_Key._Chunk_number, _This->_Team._Get_chunk_offset(_Key._Chunk_number));\r\n            auto _Next1 = _Chunk1._First;\r\n            auto _Next2 = _First2;\r\n            // Requirement missing from N4950:\r\n            _Ty _Val = _Reduce_op(_Transform_op(*_Chunk1._First, *_First2), _Transform_op(*++_Next1, *++_Next2));\r\n            while (++_Next1 != _Chunk1._Last) {\r\n                // Requirement missing from N4950:\r\n                _Val = _Reduce_op(_STD move(_Val), _Transform_op(*_Next1, *++_Next2));\r\n            }\r\n\r\n            while ((_Key = _This->_Team._Get_next_key())) {\r\n                _Chunk1 = _This->_Basis1._Get_chunk(_Key);\r\n                _First2 =\r\n                    _This->_Basis2._Get_first(_Key._Chunk_number, _This->_Team._Get_chunk_offset(_Key._Chunk_number));\r\n                _Next1 = _Chunk1._First;\r\n                _Next2 = _First2;\r\n                for (; _Next1 != _Chunk1._Last; ++_Next1, (void) ++_Next2) {\r\n                    // Requirement missing from N4950:\r\n                    _Val = _Reduce_op(_STD move(_Val), _Transform_op(*_Next1, *_Next2));\r\n                }\r\n            }\r\n\r\n            _This->_Results._Add_result(_STD move(_Val));\r\n        }\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Ty, class _BinOp1, class _BinOp2,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD _Ty transform_reduce(_ExPo&&, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _Ty _Val, _BinOp1 _Reduce_op,\r\n    _BinOp2 _Transform_op) noexcept /* terminates */ {\r\n    // return commutative and associative transform-reduction of sequences, using _Reduce_op and _Transform_op\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines...\r\n            const auto _Count  = _STD distance(_UFirst1, _ULast1);\r\n            auto _UFirst2      = _STD _Get_unwrapped_n(_First2, _Count);\r\n            const auto _Chunks = _Get_least2_chunked_work_chunk_count(_Hw_threads, _Count);\r\n            if (_Chunks > 1) {\r\n                _TRY_BEGIN\r\n                auto _Passed_reduce    = _STD _Pass_fn(_Reduce_op);\r\n                auto _Passed_transform = _STD _Pass_fn(_Transform_op);\r\n                _Static_partitioned_transform_reduce_binary2<decltype(_UFirst1), decltype(_UFirst2), _Ty,\r\n                    decltype(_Passed_reduce), decltype(_Passed_transform)>\r\n                    _Operation{_Count, _Chunks, _UFirst1, _UFirst2, _Passed_reduce, _Passed_transform};\r\n                { // ditto no _Run_chunked_parallel_work for the same reason as reduce\r\n                    const _Work_ptr _Work{_Operation};\r\n                    // setup complete, hereafter nothrow or terminate\r\n                    _Work._Submit_for_chunks(_Hw_threads, _Chunks);\r\n                    while (const auto _Stolen_key = _Operation._Team._Get_next_key()) {\r\n                        const auto _Chunk_number = _Stolen_key._Chunk_number;\r\n                        const auto _Chunk1       = _Operation._Basis1._Get_chunk(_Stolen_key);\r\n\r\n                        _Val = _STD transform_reduce(_Chunk1._First, _Chunk1._Last,\r\n                            _Operation._Basis2._Get_first(\r\n                                _Chunk_number, _Operation._Team._Get_chunk_offset(_Chunk_number)),\r\n                            _STD move(_Val), _STD _Pass_fn(_Reduce_op), _STD _Pass_fn(_Transform_op));\r\n                    }\r\n                } // join with _Work_ptr threads\r\n\r\n                auto& _Results = _Operation._Results; // note: already transformed\r\n                return _STD _Reduce_move_unchecked(\r\n                    _Results.begin(), _Results.end(), _STD move(_Val), _STD _Pass_fn(_Reduce_op));\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n\r\n            return _STD transform_reduce(\r\n                _UFirst1, _ULast1, _UFirst2, _STD move(_Val), _STD _Pass_fn(_Reduce_op), _STD _Pass_fn(_Transform_op));\r\n        }\r\n    }\r\n\r\n    return _STD transform_reduce(_UFirst1, _ULast1,\r\n        _STD _Get_unwrapped_n(_First2, _STD _Idl_distance<_FwdIt1>(_UFirst1, _ULast1)), _STD move(_Val),\r\n        _STD _Pass_fn(_Reduce_op), _STD _Pass_fn(_Transform_op));\r\n}\r\n\r\ntemplate <class _FwdIt, class _Ty, class _BinOp, class _UnaryOp>\r\nstruct _Static_partitioned_transform_reduce2 { // transformed reduction task scheduled on the system thread pool\r\n    _Static_partition_team<_Iter_diff_t<_FwdIt>> _Team;\r\n    _Static_partition_range<_FwdIt> _Basis;\r\n    _BinOp _Reduce_op;\r\n    _UnaryOp _Transform_op;\r\n    _Generalized_sum_drop<_Ty> _Results;\r\n\r\n    _Static_partitioned_transform_reduce2(const _Iter_diff_t<_FwdIt> _Count, const size_t _Chunks, _FwdIt _First,\r\n        _BinOp _Reduce_op_, _UnaryOp _Transform_op_)\r\n        : _Team{_Count, _Chunks}, _Basis{}, _Reduce_op(_Reduce_op_), _Transform_op(_Transform_op_), _Results{_Chunks} {\r\n        _Basis._Populate(_Team, _First);\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        const auto _This = static_cast<_Static_partitioned_transform_reduce2*>(_Context);\r\n        auto _Key        = _This->_Team._Get_next_key();\r\n        if (_Key) {\r\n            auto& _Reduce_op    = _This->_Reduce_op;\r\n            auto& _Transform_op = _This->_Transform_op;\r\n            auto _Chunk         = _This->_Basis._Get_chunk(_Key);\r\n            auto _Next          = _Chunk._First;\r\n\r\n            _Ty _Val = _Reduce_op(_Transform_op(*_Chunk._First), _Transform_op(*++_Next));\r\n            while (++_Next != _Chunk._Last) {\r\n                _Val = _Reduce_op(_STD move(_Val), _Transform_op(*_Next));\r\n            }\r\n\r\n            while ((_Key = _This->_Team._Get_next_key())) {\r\n                _Chunk = _This->_Basis._Get_chunk(_Key);\r\n                _Next  = _Chunk._First;\r\n                for (; _Next != _Chunk._Last; ++_Next) {\r\n                    _Val = _Reduce_op(_STD move(_Val), _Transform_op(*_Next));\r\n                }\r\n            }\r\n\r\n            _This->_Results._Add_result(_STD move(_Val));\r\n        }\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Ty, class _BinOp, class _UnaryOp,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NODISCARD _Ty transform_reduce(_ExPo&&, const _FwdIt _First, const _FwdIt _Last, _Ty _Val, _BinOp _Reduce_op,\r\n    _UnaryOp _Transform_op) noexcept /* terminates */ {\r\n    // return commutative and associative reduction of transformed sequence, using _Reduce_op and _Transform_op\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines...\r\n            const auto _Count  = _STD distance(_UFirst, _ULast);\r\n            const auto _Chunks = _Get_least2_chunked_work_chunk_count(_Hw_threads, _Count);\r\n            if (_Chunks > 1) {\r\n                _TRY_BEGIN\r\n                auto _Passed_reduce    = _STD _Pass_fn(_Reduce_op);\r\n                auto _Passed_transform = _STD _Pass_fn(_Transform_op);\r\n                _Static_partitioned_transform_reduce2<decltype(_UFirst), _Ty, decltype(_Passed_reduce),\r\n                    decltype(_Passed_transform)>\r\n                    _Operation{_Count, _Chunks, _UFirst, _Passed_reduce, _Passed_transform};\r\n                { // ditto no _Run_chunked_parallel_work for the same reason as reduce\r\n                    const _Work_ptr _Work{_Operation};\r\n                    // setup complete, hereafter nothrow or terminate\r\n                    _Work._Submit_for_chunks(_Hw_threads, _Chunks);\r\n                    while (auto _Stolen_key = _Operation._Team._Get_next_key()) {\r\n                        // keep processing remaining chunks to comply with N4950 [intro.progress]/14\r\n                        auto _Chunk = _Operation._Basis._Get_chunk(_Stolen_key);\r\n                        _Val        = _STD transform_reduce(_Chunk._First, _Chunk._Last, _STD move(_Val),\r\n                                   _STD _Pass_fn(_Reduce_op), _STD _Pass_fn(_Transform_op));\r\n                    }\r\n                } // join with _Work_ptr threads\r\n\r\n                auto& _Results = _Operation._Results; // note: already transformed\r\n                return _STD _Reduce_move_unchecked(\r\n                    _Results.begin(), _Results.end(), _STD move(_Val), _STD _Pass_fn(_Reduce_op));\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n        }\r\n    }\r\n\r\n    return _STD transform_reduce(\r\n        _UFirst, _ULast, _STD move(_Val), _STD _Pass_fn(_Reduce_op), _STD _Pass_fn(_Transform_op));\r\n}\r\n\r\nstruct _No_init_tag {\r\n    explicit _No_init_tag() = default;\r\n}; // tag to indicate that no initial value is to be used\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _BinOp, class _Ty>\r\n_FwdIt2 _Exclusive_scan_per_chunk(_FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op, _Ty& _Val,\r\n    _Parallel_vector<_Ty>& _Intermediate_result) {\r\n    // local-sum for parallel exclusive_scan; writes local sums into [_Dest + 1, _Dest + (_Last - _First)) and stores\r\n    // successor sum in _Val\r\n    // pre: _Val is *uninitialized* && _First != _Last\r\n    _STD _Construct_in_place(_Val, *_First);\r\n    for (;;) {\r\n        ++_First;\r\n        ++_Dest;\r\n        if (_First == _Last) {\r\n            return _Dest;\r\n        }\r\n\r\n        _Ty _Tmp = _Reduce_op(_Val, *_First); // temp to enable _First == _Dest\r\n        if constexpr (_Scan_reuse_output<_Ty, _FwdIt2>) {\r\n            *_Dest = _Val;\r\n        } else {\r\n            _STL_INTERNAL_CHECK(_Intermediate_result.size() < _Intermediate_result.capacity());\r\n            *_Dest = _Intermediate_result.emplace_back(_STD move(_Val));\r\n        }\r\n        _Val = _STD move(_Tmp);\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _BinOp, class _Ty>\r\nvoid _Exclusive_scan_per_chunk_complete(\r\n    _FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op, _Ty& _Val, _Ty& _Init) {\r\n    // Sum for parallel exclusive_scan with predecessor available, into [_Dest, _Dest + (_Last - _First)) and stores\r\n    // successor sum in _Val.\r\n    // Pre: _Val is *uninitialized* && _First != _Last && predecessor sum is in _Init\r\n    _STD _Implicitly_construct_in_place_by_binary_op_deref_rhs(_Val, _Reduce_op, _Init, _First);\r\n    *_Dest = _Init;\r\n    while (++_First != _Last) {\r\n        ++_Dest;\r\n        _Ty _Tmp = _Reduce_op(_Val, *_First); // temp to enable _First == _Dest\r\n        *_Dest   = _STD move(_Val);\r\n        _Val     = _STD move(_Tmp);\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _Ty, class _BinOp>\r\nstruct _Static_partitioned_exclusive_scan3 {\r\n    using _Diff = _Common_diff_t<_FwdIt1, _FwdIt2>;\r\n    _Static_partition_team<_Diff> _Team;\r\n    _Static_partition_range<_FwdIt1, _Diff> _Basis1;\r\n    _Static_partition_range<_FwdIt2, _Diff> _Basis2;\r\n    _Parallel_vector<_Scan_decoupled_lookback<_Ty>> _Lookback;\r\n    _Scan_intermediate_storage<_Ty, _FwdIt2> _Intermediate_result;\r\n    _Ty& _Initial;\r\n    _BinOp _Reduce_op;\r\n\r\n    _Static_partitioned_exclusive_scan3(const size_t _Hw_threads, const _Diff _Count, const _FwdIt1 _First,\r\n        _Ty& _Initial_, _BinOp _Reduce_op_, const _FwdIt2&)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis1{}, _Basis2{},\r\n          _Lookback(_Team._Chunks), _Intermediate_result{_Team}, _Initial(_Initial_), _Reduce_op(_Reduce_op_) {\r\n        _Basis1._Populate(_Team, _First);\r\n    }\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Chunk_number = _Key._Chunk_number;\r\n        const auto _In_rng       = _Basis1._Get_chunk(_Key);\r\n        const auto _Dest         = _Basis2._Get_first(_Chunk_number, _Team._Get_chunk_offset(_Chunk_number));\r\n        // Run local exclusive_scan on this chunk\r\n        const auto _Chunk = _Lookback.data() + static_cast<ptrdiff_t>(_Chunk_number);\r\n        if (_Chunk_number == 0) { // chunk 0 is special as it has no predecessor; its local and total sums are the same\r\n            _STD _Exclusive_scan_per_chunk_complete(\r\n                _In_rng._First, _In_rng._Last, _Dest, _Reduce_op, _Chunk->_Sum._Ref(), _Initial);\r\n            _Chunk->_Store_available_state(_Sum_available);\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        const auto _Prev_chunk = _STD _Prev_iter(_Chunk);\r\n        if (_Prev_chunk->_State.load() & _Sum_available) {\r\n            // if predecessor sum already complete, we can incorporate its value directly for 1 pass\r\n            _STD _Exclusive_scan_per_chunk_complete(\r\n                _In_rng._First, _In_rng._Last, _Dest, _Reduce_op, _Chunk->_Sum._Ref(), _Prev_chunk->_Sum._Ref());\r\n            _Chunk->_Store_available_state(_Sum_available);\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        // Calculate local sum and publish to other threads\r\n        const auto _Last = _STD _Exclusive_scan_per_chunk(_In_rng._First, _In_rng._Last, _Dest, _Reduce_op,\r\n            _Chunk->_Local._Ref(), _Intermediate_result[_Chunk_number]);\r\n        _Chunk->_Store_available_state(_Local_available);\r\n\r\n        // Apply the predecessor overall sum to current overall sum and elements\r\n        if (_Prev_chunk->_Get_available_state() & _Sum_available) { // predecessor overall sum done, use directly\r\n            _Chunk->_Apply_exclusive_predecessor(\r\n                _Prev_chunk->_Sum._Ref(), _Dest, _Intermediate_result[_Chunk_number].data(), _Last, _Reduce_op);\r\n        } else {\r\n            auto _Tmp = _STD _Get_lookback_sum(_Prev_chunk, _Reduce_op);\r\n            _Chunk->_Apply_exclusive_predecessor(\r\n                _Tmp, _Dest, _Intermediate_result[_Chunk_number].data(), _Last, _Reduce_op);\r\n        }\r\n\r\n        if constexpr (!_Scan_reuse_output<_Ty, _FwdIt2>) {\r\n            _Intermediate_result[_Chunk_number].clear();\r\n        }\r\n        return _Cancellation_status::_Running;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_exclusive_scan3*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Ty, class _BinOp,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_FwdIt2 exclusive_scan(_ExPo&&, const _FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _Ty _Val,\r\n    _BinOp _Reduce_op) noexcept /* terminates */ {\r\n    // set each value in [_Dest, _Dest + (_Last - _First)) to the associative reduction of predecessors and _Val\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines\r\n            const auto _Count = _STD distance(_UFirst, _ULast);\r\n            const auto _UDest = _STD _Get_unwrapped_n(_Dest, _Count);\r\n            if (_Count >= 2) { // ... with at least 2 elements\r\n                _TRY_BEGIN\r\n                _Static_partitioned_exclusive_scan3 _Operation{\r\n                    _Hw_threads, _Count, _UFirst, _Val, _STD _Pass_fn(_Reduce_op), _UDest};\r\n                _STD _Seek_wrapped(_Dest, _Operation._Basis2._Populate(_Operation._Team, _UDest));\r\n                // Note that _Val is used as temporary storage by whichever thread runs the first chunk.\r\n                // If any thread starts any chunk, initialization is complete, so we can't enter the\r\n                // catch or serial fallback below, so that's OK.\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                return _Dest;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n\r\n            _STD _Seek_wrapped(\r\n                _Dest, _STD exclusive_scan(_UFirst, _ULast, _UDest, _STD move(_Val), _STD _Pass_fn(_Reduce_op)));\r\n            return _Dest;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest,\r\n        _STD exclusive_scan(_UFirst, _ULast, _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_FwdIt1>(_UFirst, _ULast)),\r\n            _STD move(_Val), _STD _Pass_fn(_Reduce_op)));\r\n    return _Dest;\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _BinOp, class _Ty, class _Ty_fwd, class... _VectorTy>\r\n_FwdIt2 _Inclusive_scan_per_chunk(_FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op, _Ty& _Val,\r\n    _Ty_fwd&& _Predecessor, [[maybe_unused]] _VectorTy&... _Intermediate_result) {\r\n    // local-sum for parallel inclusive_scan; writes local inclusive prefix sums into _Dest and stores overall sum in\r\n    // _Val.\r\n    // pre: _Val is *uninitialized* && _First != _Last\r\n    if constexpr (is_same_v<_No_init_tag, remove_const_t<remove_reference_t<_Ty_fwd>>>) {\r\n        _STD _Construct_in_place_by_deref(_Val, _First);\r\n    } else {\r\n        _STD _Implicitly_construct_in_place_by_binary_op_deref_rhs(\r\n            _Val, _Reduce_op, _STD forward<_Ty_fwd>(_Predecessor), _First);\r\n    }\r\n\r\n    for (;;) {\r\n        *_Dest = _Val;\r\n        ++_Dest;\r\n        ++_First;\r\n        if (_First == _Last) {\r\n            return _Dest;\r\n        }\r\n\r\n        if constexpr (sizeof...(_VectorTy) == 0 || _Scan_reuse_output<_Ty, _FwdIt2>) {\r\n            _Val = _Reduce_op(_STD move(_Val), *_First);\r\n        } else {\r\n            _STL_INTERNAL_CHECK(((_Intermediate_result.size() < _Intermediate_result.capacity()) && ...));\r\n            _Val = _Reduce_op(_Intermediate_result.emplace_back(_STD move(_Val))..., *_First);\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _Ty, class _Init_ty, class _FwdIt1, class _FwdIt2, class _BinOp>\r\nstruct _Static_partitioned_inclusive_scan3 {\r\n    using _Diff = _Common_diff_t<_FwdIt1, _FwdIt2>;\r\n    _Static_partition_team<_Diff> _Team;\r\n    _Static_partition_range<_FwdIt1, _Diff> _Basis1;\r\n    _Static_partition_range<_FwdIt2, _Diff> _Basis2;\r\n    _Parallel_vector<_Scan_decoupled_lookback<_Ty>> _Lookback;\r\n    _Scan_intermediate_storage<_Ty, _FwdIt2> _Intermediate_result;\r\n    _BinOp _Reduce_op;\r\n    _Init_ty& _Initial;\r\n\r\n    _Static_partitioned_inclusive_scan3(\r\n        const size_t _Hw_threads, const _Diff _Count, _BinOp _Reduce_op_, _Init_ty& _Initial_)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis1{}, _Basis2{},\r\n          _Lookback(_Team._Chunks), _Intermediate_result{_Team}, _Reduce_op(_Reduce_op_), _Initial(_Initial_) {}\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Chunk_number = _Key._Chunk_number;\r\n        const auto _In_rng       = _Basis1._Get_chunk(_Key);\r\n        const auto _Dest         = _Basis2._Get_first(_Chunk_number, _Team._Get_chunk_offset(_Chunk_number));\r\n        // Run local inclusive_scan on this chunk\r\n        const auto _Chunk = _Lookback.data() + static_cast<ptrdiff_t>(_Chunk_number);\r\n        if (_Chunk_number == 0) { // chunk 0 is special as it has no predecessor; its local and total sums are the same\r\n            _STD _Inclusive_scan_per_chunk(\r\n                _In_rng._First, _In_rng._Last, _Dest, _Reduce_op, _Chunk->_Sum._Ref(), _STD move(_Initial));\r\n            _Chunk->_Store_available_state(_Sum_available);\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        const auto _Prev_chunk = _STD _Prev_iter(_Chunk);\r\n        if (_Prev_chunk->_State.load() & _Sum_available) {\r\n            // if predecessor sum already complete, we can incorporate its value directly for 1 pass\r\n            _STD _Inclusive_scan_per_chunk(\r\n                _In_rng._First, _In_rng._Last, _Dest, _Reduce_op, _Chunk->_Sum._Ref(), _Prev_chunk->_Sum._Ref());\r\n            _Chunk->_Store_available_state(_Sum_available);\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        // Calculate local sum and publish to other threads\r\n        const auto _Last = _STD _Inclusive_scan_per_chunk(_In_rng._First, _In_rng._Last, _Dest, _Reduce_op,\r\n            _Chunk->_Local._Ref(), _No_init_tag{}, _Intermediate_result[_Chunk_number]);\r\n        _Chunk->_Store_available_state(_Local_available);\r\n\r\n        // Apply the predecessor overall sum to current overall sum and elements\r\n        if (_Prev_chunk->_Get_available_state() & _Sum_available) { // predecessor overall sum done, use directly\r\n            _Chunk->_Apply_inclusive_predecessor(\r\n                _Prev_chunk->_Sum._Ref(), _Dest, _Intermediate_result[_Chunk_number].data(), _Last, _Reduce_op);\r\n        } else {\r\n            auto _Tmp = _STD _Get_lookback_sum(_Prev_chunk, _Reduce_op);\r\n            _Chunk->_Apply_inclusive_predecessor(\r\n                _Tmp, _Dest, _Intermediate_result[_Chunk_number].data(), _Last, _Reduce_op);\r\n        }\r\n\r\n        if constexpr (!_Scan_reuse_output<_Ty, _FwdIt2>) {\r\n            _Intermediate_result[_Chunk_number].clear();\r\n        }\r\n        return _Cancellation_status::_Running;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_inclusive_scan3*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _BinOp, class _Ty,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_FwdIt2 inclusive_scan(_ExPo&&, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op, _Ty _Val) noexcept\r\n/* terminates */ {\r\n    // compute partial noncommutative and associative reductions including _Val into _Dest, using _Reduce_op\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines\r\n            const auto _Count = _STD distance(_First, _Last);\r\n            auto _UDest       = _STD _Get_unwrapped_n(_Dest, _Count);\r\n            if (_Count >= 2) { // ... with at least 2 elements\r\n                _TRY_BEGIN\r\n                auto _Passed_op = _STD _Pass_fn(_Reduce_op);\r\n                _Static_partitioned_inclusive_scan3<_Ty, _Ty, _Unwrapped_t<const _FwdIt1&>, decltype(_UDest),\r\n                    decltype(_Passed_op)>\r\n                    _Operation{_Hw_threads, _Count, _Passed_op, _Val};\r\n                _Operation._Basis1._Populate(_Operation._Team, _UFirst);\r\n                _STD _Seek_wrapped(_Dest, _Operation._Basis2._Populate(_Operation._Team, _UDest));\r\n                // Note that _Val is moved from by whichever thread runs the first chunk.\r\n                // If any thread starts any chunk, initialization is complete, so we can't enter the\r\n                // catch or serial fallback below.\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                return _Dest;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n\r\n            _STD _Seek_wrapped(\r\n                _Dest, _STD inclusive_scan(_UFirst, _ULast, _UDest, _STD _Pass_fn(_Reduce_op), _STD move(_Val)));\r\n            return _Dest;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest,\r\n        _STD inclusive_scan(_UFirst, _ULast, _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_FwdIt1>(_UFirst, _ULast)),\r\n            _STD _Pass_fn(_Reduce_op), _STD move(_Val)));\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _BinOp,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_FwdIt2 inclusive_scan(_ExPo&&, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op) noexcept\r\n/* terminates */ {\r\n    // compute partial noncommutative and associative reductions into _Dest, using _Reduce_op\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines\r\n            const auto _Count = _STD distance(_UFirst, _ULast);\r\n            auto _UDest       = _STD _Get_unwrapped_n(_Dest, _Count);\r\n            if (_Count >= 2) { // ... with at least 2 elements\r\n                _TRY_BEGIN\r\n                _No_init_tag _Tag;\r\n                auto _Passed_op = _STD _Pass_fn(_Reduce_op);\r\n                _Static_partitioned_inclusive_scan3<_Iter_value_t<_FwdIt1>, _No_init_tag, _Unwrapped_t<const _FwdIt1&>,\r\n                    decltype(_UDest), decltype(_Passed_op)>\r\n                    _Operation{_Hw_threads, _Count, _Passed_op, _Tag};\r\n                _Operation._Basis1._Populate(_Operation._Team, _UFirst);\r\n                _STD _Seek_wrapped(_Dest, _Operation._Basis2._Populate(_Operation._Team, _UDest));\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                return _Dest;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n\r\n            _STD _Seek_wrapped(_Dest, _STD inclusive_scan(_UFirst, _ULast, _UDest, _STD _Pass_fn(_Reduce_op)));\r\n            return _Dest;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest,\r\n        _STD inclusive_scan(_UFirst, _ULast, _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_FwdIt1>(_UFirst, _ULast)),\r\n            _STD _Pass_fn(_Reduce_op)));\r\n    return _Dest;\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _BinOp, class _UnaryOp, class _Ty>\r\n_FwdIt2 _Transform_exclusive_scan_per_chunk(_FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op,\r\n    _UnaryOp _Transform_op, _Ty& _Val, _Parallel_vector<_Ty>& _Intermediate_result) {\r\n    // Local-sum for parallel transform_exclusive_scan; writes local sums into [_Dest + 1, _Dest + (_Last - _First)) and\r\n    // stores successor sum in _Val.\r\n    // pre: _Val is *uninitialized* && _First != _Last\r\n    _STD _Construct_in_place_by_transform_deref(_Val, _Transform_op, _First);\r\n    for (;;) {\r\n        ++_First;\r\n        ++_Dest;\r\n        if (_First == _Last) {\r\n            return _Dest;\r\n        }\r\n\r\n        _Ty _Tmp = _Reduce_op(_Val, _Transform_op(*_First)); // temp to enable _First == _Dest\r\n        if constexpr (_Scan_reuse_output<_Ty, _FwdIt2>) {\r\n            *_Dest = _Val;\r\n        } else {\r\n            _STL_INTERNAL_CHECK(_Intermediate_result.size() < _Intermediate_result.capacity());\r\n            *_Dest = _Intermediate_result.emplace_back(_STD move(_Val));\r\n        }\r\n        _Val = _STD move(_Tmp);\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _BinOp, class _UnaryOp, class _Ty>\r\nvoid _Transform_exclusive_scan_per_chunk_complete(_FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op,\r\n    _UnaryOp _Transform_op, _Ty& _Val, _Ty& _Init) {\r\n    // Sum for parallel transform_exclusive_scan with predecessor available, into [_Dest, _Dest + (_Last - _First)) and\r\n    // stores successor sum in _Val.\r\n    // pre: _Val is *uninitialized* && _First != _Last && predecessor sum is in _Init\r\n    _STD _Implicitly_construct_in_place_by_binary_op_transform_deref_rhs(\r\n        _Val, _Reduce_op, _Transform_op, _Init, _First);\r\n    *_Dest = _Init;\r\n    while (++_First != _Last) {\r\n        ++_Dest;\r\n        _Ty _Tmp = _Reduce_op(_Val, _Transform_op(*_First)); // temp to enable _First == _Dest\r\n        *_Dest   = _STD move(_Val);\r\n        _Val     = _STD move(_Tmp);\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _Ty, class _BinOp, class _UnaryOp>\r\nstruct _Static_partitioned_transform_exclusive_scan3 {\r\n    using _Diff = _Common_diff_t<_FwdIt1, _FwdIt2>;\r\n    _Static_partition_team<_Diff> _Team;\r\n    _Static_partition_range<_FwdIt1, _Diff> _Basis1;\r\n    _Static_partition_range<_FwdIt2, _Diff> _Basis2;\r\n    _Parallel_vector<_Scan_decoupled_lookback<_Ty>> _Lookback;\r\n    _Scan_intermediate_storage<_Ty, _FwdIt2> _Intermediate_result;\r\n    _Ty& _Initial;\r\n    _BinOp _Reduce_op;\r\n    _UnaryOp _Transform_op;\r\n\r\n    _Static_partitioned_transform_exclusive_scan3(const size_t _Hw_threads, const _Diff _Count, const _FwdIt1 _First,\r\n        _Ty& _Initial_, _BinOp _Reduce_op_, _UnaryOp _Transform_op_, const _FwdIt2&)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis1{}, _Basis2{},\r\n          _Lookback(_Team._Chunks), _Intermediate_result{_Team}, _Initial(_Initial_), _Reduce_op(_Reduce_op_),\r\n          _Transform_op(_Transform_op_) {\r\n        _Basis1._Populate(_Team, _First);\r\n    }\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Chunk_number = _Key._Chunk_number;\r\n        const auto _In_rng       = _Basis1._Get_chunk(_Key);\r\n        const auto _Dest         = _Basis2._Get_first(_Chunk_number, _Team._Get_chunk_offset(_Chunk_number));\r\n        // Run local transform_exclusive_scan on this chunk\r\n        const auto _Chunk = _Lookback.data() + static_cast<ptrdiff_t>(_Chunk_number);\r\n        if (_Chunk_number == 0) { // chunk 0 is special as it has no predecessor; its local and total sums are the same\r\n            _STD _Transform_exclusive_scan_per_chunk_complete(\r\n                _In_rng._First, _In_rng._Last, _Dest, _Reduce_op, _Transform_op, _Chunk->_Sum._Ref(), _Initial);\r\n            _Chunk->_Store_available_state(_Sum_available);\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        const auto _Prev_chunk = _STD _Prev_iter(_Chunk);\r\n        if (_Prev_chunk->_State.load() & _Sum_available) {\r\n            // if predecessor sum already complete, we can incorporate its value directly for 1 pass\r\n            _STD _Transform_exclusive_scan_per_chunk_complete(_In_rng._First, _In_rng._Last, _Dest, _Reduce_op,\r\n                _Transform_op, _Chunk->_Sum._Ref(), _Prev_chunk->_Sum._Ref());\r\n            _Chunk->_Store_available_state(_Sum_available);\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        // Calculate local sum and publish to other threads\r\n        const auto _Last = _STD _Transform_exclusive_scan_per_chunk(_In_rng._First, _In_rng._Last, _Dest, _Reduce_op,\r\n            _Transform_op, _Chunk->_Local._Ref(), _Intermediate_result[_Chunk_number]);\r\n        _Chunk->_Store_available_state(_Local_available);\r\n\r\n        // Apply the predecessor overall sum to current overall sum and elements\r\n        if (_Prev_chunk->_Get_available_state() & _Sum_available) { // predecessor overall sum done, use directly\r\n            _Chunk->_Apply_exclusive_predecessor(\r\n                _Prev_chunk->_Sum._Ref(), _Dest, _Intermediate_result[_Chunk_number].data(), _Last, _Reduce_op);\r\n        } else {\r\n            auto _Tmp = _STD _Get_lookback_sum(_Prev_chunk, _Reduce_op);\r\n            _Chunk->_Apply_exclusive_predecessor(\r\n                _Tmp, _Dest, _Intermediate_result[_Chunk_number].data(), _Last, _Reduce_op);\r\n        }\r\n\r\n        if constexpr (!_Scan_reuse_output<_Ty, _FwdIt2>) {\r\n            _Intermediate_result[_Chunk_number].clear();\r\n        }\r\n        return _Cancellation_status::_Running;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_transform_exclusive_scan3*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Ty, class _BinOp, class _UnaryOp,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_FwdIt2 transform_exclusive_scan(_ExPo&&, const _FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _Ty _Val,\r\n    _BinOp _Reduce_op, _UnaryOp _Transform_op) noexcept /* terminates */ {\r\n    // set each value in [_Dest, _Dest + (_Last - _First)) to the associative reduction of transformed predecessors\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines\r\n            const auto _Count = _STD distance(_UFirst, _ULast);\r\n            const auto _UDest = _STD _Get_unwrapped_n(_Dest, _Count);\r\n            if (_Count >= 2) { // ... with at least 2 elements\r\n                _TRY_BEGIN\r\n                _Static_partitioned_transform_exclusive_scan3 _Operation{_Hw_threads, _Count, _UFirst, _Val,\r\n                    _STD _Pass_fn(_Reduce_op), _STD _Pass_fn(_Transform_op), _UDest};\r\n                _STD _Seek_wrapped(_Dest, _Operation._Basis2._Populate(_Operation._Team, _UDest));\r\n                // Note that _Val is used as temporary storage by whichever thread runs the first chunk.\r\n                // If any thread starts any chunk, initialization is complete, so we can't enter the\r\n                // catch or serial fallback below, so that's OK.\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                return _Dest;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n\r\n            _STD _Seek_wrapped(_Dest, _STD transform_exclusive_scan(_UFirst, _ULast, _UDest, _STD move(_Val),\r\n                                          _STD _Pass_fn(_Reduce_op), _STD _Pass_fn(_Transform_op)));\r\n            return _Dest;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _STD transform_exclusive_scan(_UFirst, _ULast,\r\n                                  _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_FwdIt1>(_UFirst, _ULast)),\r\n                                  _STD move(_Val), _STD _Pass_fn(_Reduce_op), _STD _Pass_fn(_Transform_op)));\r\n    return _Dest;\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _BinOp, class _UnaryOp, class _Ty, class _Ty_fwd, class... _VectorTy>\r\n_FwdIt2 _Transform_inclusive_scan_per_chunk(_FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op,\r\n    _UnaryOp _Transform_op, _Ty& _Val, _Ty_fwd&& _Predecessor, [[maybe_unused]] _VectorTy&... _Intermediate_result) {\r\n    // local-sum for parallel transform_inclusive_scan; writes local inclusive prefix sums into _Dest and stores overall\r\n    // sum in _Val\r\n    // pre: _Val is *uninitialized* && _First != _Last\r\n    if constexpr (is_same_v<_No_init_tag, remove_const_t<remove_reference_t<_Ty_fwd>>>) {\r\n        _STD _Construct_in_place_by_transform_deref(_Val, _Transform_op, _First);\r\n    } else {\r\n        _STD _Implicitly_construct_in_place_by_binary_op_transform_deref_rhs(\r\n            _Val, _Reduce_op, _Transform_op, _STD forward<_Ty_fwd>(_Predecessor), _First);\r\n    }\r\n\r\n    for (;;) {\r\n        *_Dest = _Val;\r\n        ++_Dest;\r\n        ++_First;\r\n        if (_First == _Last) {\r\n            return _Dest;\r\n        }\r\n\r\n        if constexpr (sizeof...(_VectorTy) == 0 || _Scan_reuse_output<_Ty, _FwdIt2>) {\r\n            _Val = _Reduce_op(_STD move(_Val), _Transform_op(*_First));\r\n        } else {\r\n            _STL_INTERNAL_CHECK(((_Intermediate_result.size() < _Intermediate_result.capacity()) && ...));\r\n            _Val = _Reduce_op(_Intermediate_result.emplace_back(_STD move(_Val))..., _Transform_op(*_First));\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _Ty, class _Init_ty, class _FwdIt1, class _FwdIt2, class _BinOp, class _UnaryOp>\r\nstruct _Static_partitioned_transform_inclusive_scan3 {\r\n    using _Diff = _Common_diff_t<_FwdIt1, _FwdIt2>;\r\n    _Static_partition_team<_Diff> _Team;\r\n    _Static_partition_range<_FwdIt1, _Diff> _Basis1;\r\n    _Static_partition_range<_FwdIt2, _Diff> _Basis2;\r\n    _Parallel_vector<_Scan_decoupled_lookback<_Ty>> _Lookback;\r\n    _Scan_intermediate_storage<_Ty, _FwdIt2> _Intermediate_result;\r\n    _BinOp _Reduce_op;\r\n    _UnaryOp _Transform_op;\r\n    _Init_ty& _Initial;\r\n\r\n    _Static_partitioned_transform_inclusive_scan3(\r\n        const size_t _Hw_threads, const _Diff _Count, _BinOp _Reduce_op_, _UnaryOp _Transform_op_, _Init_ty& _Initial_)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis1{}, _Basis2{},\r\n          _Lookback(_Team._Chunks), _Intermediate_result{_Team}, _Reduce_op(_Reduce_op_), _Transform_op(_Transform_op_),\r\n          _Initial(_Initial_) {}\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Chunk_number = _Key._Chunk_number;\r\n        const auto _In_rng       = _Basis1._Get_chunk(_Key);\r\n        const auto _Dest         = _Basis2._Get_first(_Chunk_number, _Team._Get_chunk_offset(_Chunk_number));\r\n        // Run local transform_inclusive_scan on this chunk\r\n        const auto _Chunk = _Lookback.data() + static_cast<ptrdiff_t>(_Chunk_number);\r\n        if (_Chunk_number == 0) { // chunk 0 is special as it has no predecessor; its local and total sums are the same\r\n            _STD _Transform_inclusive_scan_per_chunk(_In_rng._First, _In_rng._Last, _Dest, _Reduce_op, _Transform_op,\r\n                _Chunk->_Sum._Ref(), _STD move(_Initial));\r\n            _Chunk->_Store_available_state(_Sum_available);\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        const auto _Prev_chunk = _STD _Prev_iter(_Chunk);\r\n        if (_Prev_chunk->_State.load() & _Sum_available) {\r\n            // if predecessor sum already complete, we can incorporate its value directly for 1 pass\r\n            _STD _Transform_inclusive_scan_per_chunk(_In_rng._First, _In_rng._Last, _Dest, _Reduce_op, _Transform_op,\r\n                _Chunk->_Sum._Ref(), _Prev_chunk->_Sum._Ref());\r\n            _Chunk->_Store_available_state(_Sum_available);\r\n            return _Cancellation_status::_Running;\r\n        }\r\n\r\n        // Calculate local sum and publish to other threads\r\n        const auto _Last = _STD _Transform_inclusive_scan_per_chunk(_In_rng._First, _In_rng._Last, _Dest, _Reduce_op,\r\n            _Transform_op, _Chunk->_Local._Ref(), _No_init_tag{}, _Intermediate_result[_Chunk_number]);\r\n        _Chunk->_Store_available_state(_Local_available);\r\n\r\n        // Apply the predecessor overall sum to current overall sum and elements\r\n        if (_Prev_chunk->_Get_available_state() & _Sum_available) { // predecessor overall sum done, use directly\r\n            _Chunk->_Apply_inclusive_predecessor(\r\n                _Prev_chunk->_Sum._Ref(), _Dest, _Intermediate_result[_Chunk_number].data(), _Last, _Reduce_op);\r\n        } else {\r\n            auto _Tmp = _STD _Get_lookback_sum(_Prev_chunk, _Reduce_op);\r\n            _Chunk->_Apply_inclusive_predecessor(\r\n                _Tmp, _Dest, _Intermediate_result[_Chunk_number].data(), _Last, _Reduce_op);\r\n        }\r\n\r\n        if constexpr (!_Scan_reuse_output<_Ty, _FwdIt2>) {\r\n            _Intermediate_result[_Chunk_number].clear();\r\n        }\r\n        return _Cancellation_status::_Running;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_transform_inclusive_scan3*>(_Context));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Ty, class _BinOp, class _UnaryOp,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_FwdIt2 transform_inclusive_scan(_ExPo&&, const _FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op,\r\n    _UnaryOp _Transform_op, _Ty _Val) noexcept /* terminates */ {\r\n    // compute partial noncommutative and associative transformed reductions including _Val into _Dest\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines\r\n            const auto _Count = _STD distance(_UFirst, _ULast);\r\n            auto _UDest       = _STD _Get_unwrapped_n(_Dest, _Count);\r\n            if (_Count >= 2) { // ... with at least 2 elements\r\n                _TRY_BEGIN\r\n                auto _Passed_reduce    = _STD _Pass_fn(_Reduce_op);\r\n                auto _Passed_transform = _STD _Pass_fn(_Transform_op);\r\n                _Static_partitioned_transform_inclusive_scan3<_Ty, _Ty, _Unwrapped_t<const _FwdIt1&>, decltype(_UDest),\r\n                    decltype(_Passed_reduce), decltype(_Passed_transform)>\r\n                    _Operation{_Hw_threads, _Count, _Passed_reduce, _Passed_transform, _Val};\r\n                _Operation._Basis1._Populate(_Operation._Team, _UFirst);\r\n                _STD _Seek_wrapped(_Dest, _Operation._Basis2._Populate(_Operation._Team, _UDest));\r\n                // Note that _Val is moved from by whichever thread runs the first chunk.\r\n                // If any thread starts any chunk, initialization is complete, so we can't enter the\r\n                // catch or serial fallback below.\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                return _Dest;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n\r\n            _STD _Seek_wrapped(_Dest, _STD transform_inclusive_scan(_UFirst, _ULast, _UDest, _STD _Pass_fn(_Reduce_op),\r\n                                          _STD _Pass_fn(_Transform_op), _STD move(_Val)));\r\n            return _Dest;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _STD transform_inclusive_scan(_UFirst, _ULast,\r\n                                  _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_FwdIt1>(_UFirst, _ULast)),\r\n                                  _STD _Pass_fn(_Reduce_op), _STD _Pass_fn(_Transform_op), _STD move(_Val)));\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _BinOp, class _UnaryOp,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_FwdIt2 transform_inclusive_scan(_ExPo&&, const _FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op,\r\n    _UnaryOp _Transform_op) noexcept /* terminates */ {\r\n    // compute partial noncommutative and associative transformed reductions into _Dest\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines\r\n            const auto _Count = _STD distance(_UFirst, _ULast);\r\n            auto _UDest       = _STD _Get_unwrapped_n(_Dest, _Count);\r\n            if (_Count >= 2) { // ... with at least 2 elements\r\n                _TRY_BEGIN\r\n                _No_init_tag _Tag;\r\n                auto _Passed_reduce    = _STD _Pass_fn(_Reduce_op);\r\n                auto _Passed_transform = _STD _Pass_fn(_Transform_op);\r\n                using _Intermediate_t  = decay_t<decltype(_Transform_op(*_UFirst))>;\r\n                _Static_partitioned_transform_inclusive_scan3<_Intermediate_t, _No_init_tag,\r\n                    _Unwrapped_t<const _FwdIt1&>, decltype(_UDest), decltype(_Passed_reduce),\r\n                    decltype(_Passed_transform)>\r\n                    _Operation{_Hw_threads, _Count, _Passed_reduce, _Passed_transform, _Tag};\r\n                _Operation._Basis1._Populate(_Operation._Team, _UFirst);\r\n                _STD _Seek_wrapped(_Dest, _Operation._Basis2._Populate(_Operation._Team, _UDest));\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                return _Dest;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n\r\n            _STD _Seek_wrapped(_Dest, _STD transform_inclusive_scan(_UFirst, _ULast, _UDest, _STD _Pass_fn(_Reduce_op),\r\n                                          _STD _Pass_fn(_Transform_op)));\r\n            return _Dest;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _STD transform_inclusive_scan(_UFirst, _ULast,\r\n                                  _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_FwdIt1>(_UFirst, _ULast)),\r\n                                  _STD _Pass_fn(_Reduce_op), _STD _Pass_fn(_Transform_op)));\r\n    return _Dest;\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _BinOp>\r\nstruct _Static_partitioned_adjacent_difference2 {\r\n    using _Diff = _Common_diff_t<_FwdIt1, _FwdIt2>;\r\n    _Static_partition_team<_Diff> _Team;\r\n    // note offset partitioning:\r\n    _Static_partition_range<_FwdIt1, _Diff> _Basis1; // contains partition of [_First, _Last - 1)\r\n    _Static_partition_range<_FwdIt2, _Diff> _Basis2; // contains partition of [_Dest + 1, _Dest + (_Last - _First))\r\n    _BinOp _Diff_op;\r\n\r\n    _Static_partitioned_adjacent_difference2(\r\n        const size_t _Hw_threads, const _Diff _Count, const _FwdIt1 _First, _BinOp _Diff_op_, const _FwdIt2&)\r\n        : _Team{_Count, _Get_chunked_work_chunk_count(_Hw_threads, _Count)}, _Basis1{}, _Basis2{}, _Diff_op(_Diff_op_) {\r\n        _Basis1._Populate(_Team, _First);\r\n    }\r\n\r\n    _Cancellation_status _Process_chunk() {\r\n        const auto _Key = _Team._Get_next_key();\r\n        if (!_Key) {\r\n            return _Cancellation_status::_Canceled;\r\n        }\r\n\r\n        const auto _Chunk_number = _Key._Chunk_number;\r\n        auto _In_rng             = _Basis1._Get_chunk(_Key);\r\n        auto _Dest               = _Basis2._Get_first(_Chunk_number, _Team._Get_chunk_offset(_Chunk_number));\r\n        auto _Next               = _In_rng._First;\r\n        do {\r\n            ++_Next; // note: steps 1 element into the following chunk\r\n            *_Dest = _Diff_op(*_Next, *_In_rng._First);\r\n            ++_Dest;\r\n            _In_rng._First = _Next;\r\n        } while (_In_rng._First != _In_rng._Last);\r\n\r\n        return _Cancellation_status::_Running;\r\n    }\r\n\r\n    static void __stdcall _Threadpool_callback(\r\n        __std_PTP_CALLBACK_INSTANCE, void* const _Context, __std_PTP_WORK) noexcept /* terminates */ {\r\n        _STD _Run_available_chunked_work(*static_cast<_Static_partitioned_adjacent_difference2*>(_Context));\r\n    }\r\n};\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _BinOp>\r\n_FwdIt2 _Adjacent_difference_seq(_FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Diff_op) {\r\n    // compute adjacent differences into _Dest, serially\r\n    if (_First != _Last) {\r\n        *_Dest = *_First;\r\n        ++_Dest;\r\n        for (auto _Next = _First; ++_Next != _Last; _First = _Next) {\r\n            *_Dest = _Diff_op(*_Next, *_First);\r\n            ++_Dest;\r\n        }\r\n    }\r\n\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _BinOp,\r\n    _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_FwdIt2 adjacent_difference(_ExPo&&, const _FwdIt1 _First, const _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Diff_op) noexcept\r\n/* terminates */ {\r\n    // compute adjacent differences into _Dest\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines\r\n            auto _Count       = _STD distance(_UFirst, _ULast);\r\n            const auto _UDest = _STD _Get_unwrapped_n(_Dest, _Count);\r\n            if (_Count >= 2) { // ... with at least 2 elements\r\n                _TRY_BEGIN\r\n                --_Count; // note unusual offset partitioning\r\n                _Static_partitioned_adjacent_difference2 _Operation{\r\n                    _Hw_threads, _Count, _UFirst, _STD _Pass_fn(_Diff_op), _UDest};\r\n                auto _Result = _Operation._Basis2._Populate(_Operation._Team, _STD _Next_iter(_UDest));\r\n                const _Work_ptr _Work_op{_Operation};\r\n                // setup complete, hereafter nothrow or terminate\r\n                _Work_op._Submit_for_chunks(_Hw_threads, _Operation._Team._Chunks);\r\n                // must be done after setup is complete to avoid duplicate assign in serial fallback:\r\n                *_UDest = *_UFirst;\r\n                _STD _Run_available_chunked_work(_Operation);\r\n                _STD _Seek_wrapped(_Dest, _Result);\r\n                return _Dest;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n\r\n            _STD _Seek_wrapped(_Dest, _STD _Adjacent_difference_seq(_UFirst, _ULast, _UDest, _STD _Pass_fn(_Diff_op)));\r\n            return _Dest;\r\n        }\r\n    }\r\n\r\n    // Don't call serial adjacent_difference because it's described as creating a temporary we can avoid\r\n    _STD _Seek_wrapped(_Dest,\r\n        _STD _Adjacent_difference_seq(_UFirst, _ULast,\r\n            _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_FwdIt1>(_UFirst, _ULast)), _STD _Pass_fn(_Diff_op)));\r\n    return _Dest;\r\n}\r\n\r\ntemplate <class _Ty>\r\nstruct _Inplace_destroy_fn {\r\n    static void operator()(_Ty& _Obj) noexcept {\r\n        _STD _Destroy_in_place(_Obj);\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _NoThrowFwdIt, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\nvoid destroy(_ExPo&& _Exec, const _NoThrowFwdIt _First, const _NoThrowFwdIt _Last) noexcept /* terminates */ {\r\n    // destroy all elements in [_First, _Last)\r\n    _REQUIRE_PARALLEL_LVALUE_ITERATOR(_NoThrowFwdIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    using _Ty = remove_reference_t<_Iter_ref_t<_NoThrowFwdIt>>;\r\n    if constexpr (!is_trivially_destructible_v<_Ty>) {\r\n        _STD for_each(_STD forward<_ExPo>(_Exec), _First, _Last, _Inplace_destroy_fn<_Ty>{});\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _NoThrowFwdIt, class _Diff, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NoThrowFwdIt destroy_n(_ExPo&& _Exec, _NoThrowFwdIt _First, const _Diff _Count_raw) noexcept /* terminates */ {\r\n    // destroy all elements in [_First, _First + _Count)\r\n    _REQUIRE_PARALLEL_LVALUE_ITERATOR(_NoThrowFwdIt);\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    if (_Count <= 0) {\r\n        return _First;\r\n    }\r\n\r\n    using _Ty = remove_reference_t<_Iter_ref_t<_NoThrowFwdIt>>;\r\n    if constexpr (is_trivially_destructible_v<_Ty>) {\r\n        _STD advance(_First, _Count);\r\n        return _First;\r\n    } else {\r\n        return _STD for_each_n(_STD forward<_ExPo>(_Exec), _First, _Count, _Inplace_destroy_fn<_Ty>{});\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\nstruct _Inplace_default_construct_fn {\r\n    static void operator()(_Ty& _Obj) noexcept(is_nothrow_default_constructible_v<_Ty>) {\r\n        _STD _Default_construct_in_place(_Obj);\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _NoThrowFwdIt, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\nvoid uninitialized_default_construct(_ExPo&& _Exec, const _NoThrowFwdIt _First, const _NoThrowFwdIt _Last) noexcept\r\n/* terminates */ {\r\n    // default-initialize all elements in [_First, _Last)\r\n    _REQUIRE_PARALLEL_LVALUE_ITERATOR(_NoThrowFwdIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    using _Ty = remove_reference_t<_Iter_ref_t<_NoThrowFwdIt>>;\r\n    if constexpr (!is_trivially_default_constructible_v<_Ty>) {\r\n        _STD for_each(_STD forward<_ExPo>(_Exec), _First, _Last, _Inplace_default_construct_fn<_Ty>{});\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _NoThrowFwdIt, class _Diff, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NoThrowFwdIt uninitialized_default_construct_n(_ExPo&& _Exec, _NoThrowFwdIt _First, const _Diff _Count_raw) noexcept\r\n/* terminates */ {\r\n    // default-initialize all elements in [_First, _First + _Count)\r\n    _REQUIRE_PARALLEL_LVALUE_ITERATOR(_NoThrowFwdIt);\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    if (_Count <= 0) {\r\n        return _First;\r\n    }\r\n\r\n    using _Ty = remove_reference_t<_Iter_ref_t<_NoThrowFwdIt>>;\r\n    if constexpr (is_trivially_default_constructible_v<_Ty>) {\r\n        _STD advance(_First, _Count);\r\n        return _First;\r\n    } else {\r\n        return _STD for_each_n(_STD forward<_ExPo>(_Exec), _First, _Count, _Inplace_default_construct_fn<_Ty>{});\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\nstruct _Inplace_value_construct_fn {\r\n    static void operator()(_Ty& _Obj) noexcept(is_nothrow_default_constructible_v<_Ty>) {\r\n        _STD _Construct_in_place(_Obj);\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ExPo, class _NoThrowFwdIt, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\nvoid uninitialized_value_construct(_ExPo&&, _NoThrowFwdIt _First, _NoThrowFwdIt _Last) noexcept /* terminates */ {\r\n    // value-initialize all elements in [_First, _Last)\r\n    _REQUIRE_PARALLEL_LVALUE_ITERATOR(_NoThrowFwdIt);\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n\r\n    if constexpr (_Use_memset_value_construct_v<decltype(_UFirst)>) {\r\n        _STD _Zero_range(_UFirst, _ULast);\r\n    } else if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = _CSTD __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1) { // parallelize on multiprocessor machines...\r\n            auto _Count = _STD distance(_UFirst, _ULast);\r\n            if (_Count >= 2) { // ... with at least 2 elements\r\n                _TRY_BEGIN\r\n                using _Ty      = remove_reference_t<_Iter_ref_t<_NoThrowFwdIt>>;\r\n                using _Ctor_fn = _Inplace_value_construct_fn<_Ty>;\r\n                _Static_partitioned_for_each2<decltype(_UFirst), decltype(_Count), _Ctor_fn> _Operation{\r\n                    _Hw_threads, _Count, _Ctor_fn{}};\r\n                _Operation._Basis._Populate(_Operation._Team, _UFirst);\r\n                _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n                return;\r\n                _CATCH(const _Parallelism_resources_exhausted&)\r\n                // fall through to serial case below\r\n                _CATCH_END\r\n            }\r\n        }\r\n\r\n#pragma loop(ivdep)\r\n        for (; _UFirst != _ULast; ++_UFirst) {\r\n            _STD _Construct_in_place(*_UFirst);\r\n        }\r\n    } else if constexpr (remove_reference_t<_ExPo>::_Ivdep) {\r\n#pragma loop(ivdep)\r\n        for (; _UFirst != _ULast; ++_UFirst) {\r\n            _STD _Construct_in_place(*_UFirst);\r\n        }\r\n    } else {\r\n        for (; _UFirst != _ULast; ++_UFirst) {\r\n            _STD _Construct_in_place(*_UFirst);\r\n        }\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _NoThrowFwdIt, class _Diff, _Enable_if_execution_policy_t<_ExPo> /* = 0 */>\r\n_NoThrowFwdIt uninitialized_value_construct_n(_ExPo&&, _NoThrowFwdIt _First, const _Diff _Count_raw) noexcept\r\n/* terminates */ {\r\n    // value-initialize all elements in [_First, _First + _Count)\r\n    _REQUIRE_PARALLEL_LVALUE_ITERATOR(_NoThrowFwdIt);\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n\r\n    if (_Count <= 0) {\r\n        return _First;\r\n    }\r\n\r\n    auto _UFirst = _STD _Get_unwrapped_n(_First, _Count);\r\n    if constexpr (_Use_memset_value_construct_v<decltype(_UFirst)>) {\r\n        _STD _Zero_range(_UFirst, _UFirst + _Count);\r\n        _STD _Seek_wrapped(_First, _UFirst + _Count);\r\n    } else if constexpr (remove_reference_t<_ExPo>::_Parallelize) {\r\n        const size_t _Hw_threads = _CSTD __std_parallel_algorithms_hw_threads();\r\n        if (_Hw_threads > 1 && _Count >= 2) { // parallelize on multiprocessor machines with at least 2 elements\r\n            _TRY_BEGIN\r\n            using _Ty      = remove_reference_t<_Iter_ref_t<_NoThrowFwdIt>>;\r\n            using _Ctor_fn = _Inplace_value_construct_fn<_Ty>;\r\n            _Static_partitioned_for_each2<decltype(_UFirst), decltype(_Count), _Ctor_fn> _Operation{\r\n                _Hw_threads, _Count, _Ctor_fn{}};\r\n            _STD _Seek_wrapped(_First, _Operation._Basis._Populate(_Operation._Team, _UFirst));\r\n            _STD _Run_chunked_parallel_work(_Hw_threads, _Operation);\r\n            return _First;\r\n            _CATCH(const _Parallelism_resources_exhausted&)\r\n            // fall through to serial case below\r\n            _CATCH_END\r\n        }\r\n\r\n#pragma loop(ivdep)\r\n        for (; _Count > 0; --_Count, (void) ++_UFirst) {\r\n            _STD _Construct_in_place(*_UFirst);\r\n        }\r\n        _STD _Seek_wrapped(_First, _UFirst);\r\n    } else if constexpr (remove_reference_t<_ExPo>::_Ivdep) {\r\n#pragma loop(ivdep)\r\n        for (; _Count > 0; --_Count, (void) ++_UFirst) {\r\n            _STD _Construct_in_place(*_UFirst);\r\n        }\r\n        _STD _Seek_wrapped(_First, _UFirst);\r\n    } else {\r\n        for (; _Count > 0; --_Count, (void) ++_UFirst) {\r\n            _STD _Construct_in_place(*_UFirst);\r\n        }\r\n        _STD _Seek_wrapped(_First, _UFirst);\r\n    }\r\n\r\n    return _First;\r\n}\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX17 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _EXECUTION_\r\n"
  },
  {
    "path": "stl/inc/expected",
    "content": "// expected standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _EXPECTED_\r\n#define _EXPECTED_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#if !_HAS_CXX23\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <expected> are available only with C++23 or later.\");\r\n#else // ^^^ !_HAS_CXX23 / _HAS_CXX23 vvv\r\n#include <exception>\r\n#include <initializer_list>\r\n#include <type_traits>\r\n#include <xutility>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\n_EXPORT_STD template <class _Err>\r\nclass _NODISCARD unexpected;\r\n\r\ntemplate <class _Err>\r\nstruct _Check_unexpected_argument : true_type {\r\n    static_assert(is_object_v<_Err>, \"E must be an object type. (N4950 [expected.un.general]/2)\");\r\n    static_assert(!is_array_v<_Err>, \"E must not be an array type. (N4950 [expected.un.general]/2)\");\r\n    static_assert(!is_const_v<_Err>, \"E must not be const. (N4950 [expected.un.general]/2)\");\r\n    static_assert(!is_volatile_v<_Err>, \"E must not be volatile. (N4950 [expected.un.general]/2)\");\r\n    static_assert(!_Is_specialization_v<_Err, unexpected>,\r\n        \"E must not be a specialization of unexpected. (N4950 [expected.un.general]/2)\");\r\n};\r\n\r\n// [expected.un.general]\r\n_EXPORT_STD template <class _Err>\r\nclass _NODISCARD unexpected {\r\n    static_assert(_Check_unexpected_argument<_Err>::value);\r\n\r\n    template <class _Ty, class _Err2>\r\n    friend class expected;\r\n\r\npublic:\r\n    // [expected.un.cons]\r\n    template <class _UError = _Err>\r\n        requires (!is_same_v<remove_cvref_t<_UError>, unexpected> && !is_same_v<remove_cvref_t<_UError>, in_place_t>\r\n                  && is_constructible_v<_Err, _UError>)\r\n    constexpr explicit unexpected(_UError&& _Unex) noexcept(is_nothrow_constructible_v<_Err, _UError>) // strengthened\r\n        : _Unexpected(_STD forward<_UError>(_Unex)) {}\r\n\r\n    template <class... _Args>\r\n        requires is_constructible_v<_Err, _Args...>\r\n    constexpr explicit unexpected(in_place_t, _Args&&... _Vals)\r\n        noexcept(is_nothrow_constructible_v<_Err, _Args...>) // strengthened\r\n        : _Unexpected(_STD forward<_Args>(_Vals)...) {}\r\n\r\n    template <class _Uty, class... _Args>\r\n        requires is_constructible_v<_Err, initializer_list<_Uty>&, _Args...>\r\n    constexpr explicit unexpected(in_place_t, initializer_list<_Uty> _Ilist, _Args&&... _Vals)\r\n        noexcept(is_nothrow_constructible_v<_Err, initializer_list<_Uty>&, _Args...>) // strengthened\r\n        : _Unexpected(_Ilist, _STD forward<_Args>(_Vals)...) {}\r\n\r\n    // [expected.un.obs]\r\n    _NODISCARD constexpr const _Err& error() const& noexcept {\r\n        return _Unexpected;\r\n    }\r\n    _NODISCARD constexpr _Err& error() & noexcept {\r\n        return _Unexpected;\r\n    }\r\n    _NODISCARD constexpr const _Err&& error() const&& noexcept {\r\n        return _STD move(_Unexpected);\r\n    }\r\n    _NODISCARD constexpr _Err&& error() && noexcept {\r\n        return _STD move(_Unexpected);\r\n    }\r\n\r\n    // [expected.un.swap]\r\n    constexpr void swap(unexpected& _Other) noexcept(is_nothrow_swappable_v<_Err>) {\r\n        static_assert(is_swappable_v<_Err>, \"E must be swappable\");\r\n        using _STD swap;\r\n        swap(_Unexpected, _Other._Unexpected); // intentional ADL\r\n    }\r\n\r\n    friend constexpr void swap(unexpected& _Left, unexpected& _Right) noexcept(is_nothrow_swappable_v<_Err>)\r\n        requires is_swappable<_Err>::value // TRANSITION, /permissive needs ::value\r\n    {\r\n        _Left.swap(_Right);\r\n    }\r\n\r\n    // [expected.un.eq]\r\n    template <class _UErr>\r\n    _NODISCARD friend constexpr bool operator==(const unexpected& _Left, const unexpected<_UErr>& _Right)\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Unexpected == _Right.error()))) /* strengthened */ {\r\n        return _Left._Unexpected == _Right.error();\r\n    }\r\n\r\nprivate:\r\n    _Err _Unexpected;\r\n};\r\n\r\ntemplate <class _Err>\r\nunexpected(_Err) -> unexpected<_Err>;\r\n\r\n_EXPORT_STD template <class _Err>\r\nclass _NODISCARD bad_expected_access;\r\n\r\ntemplate <>\r\nclass _NODISCARD bad_expected_access<void> : public exception {\r\npublic:\r\n    _NODISCARD const char* __CLR_OR_THIS_CALL what() const noexcept override {\r\n        return \"Bad expected access\";\r\n    }\r\n\r\nprotected:\r\n    bad_expected_access()                                      = default;\r\n    bad_expected_access(const bad_expected_access&)            = default;\r\n    bad_expected_access(bad_expected_access&&)                 = default;\r\n    bad_expected_access& operator=(const bad_expected_access&) = default;\r\n    bad_expected_access& operator=(bad_expected_access&&)      = default;\r\n\r\n#if !_HAS_EXCEPTIONS\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n#endif // !_HAS_EXCEPTIONS\r\n};\r\n\r\n_EXPORT_STD template <class _Err>\r\nclass _NODISCARD bad_expected_access : public bad_expected_access<void> {\r\npublic:\r\n    explicit bad_expected_access(_Err _Unex) noexcept(is_nothrow_move_constructible_v<_Err>) // strengthened\r\n        : _Unexpected(_STD move(_Unex)) {}\r\n\r\n    _NODISCARD const _Err& error() const& noexcept {\r\n        return _Unexpected;\r\n    }\r\n    _NODISCARD _Err& error() & noexcept {\r\n        return _Unexpected;\r\n    }\r\n    _NODISCARD const _Err&& error() const&& noexcept {\r\n        return _STD move(_Unexpected);\r\n    }\r\n    _NODISCARD _Err&& error() && noexcept {\r\n        return _STD move(_Unexpected);\r\n    }\r\n\r\nprivate:\r\n    _Err _Unexpected;\r\n};\r\n\r\n_EXPORT_STD struct unexpect_t {\r\n    explicit unexpect_t() = default;\r\n};\r\n\r\n_EXPORT_STD inline constexpr unexpect_t unexpect{};\r\n\r\nstruct _Construct_expected_from_invoke_result_tag {\r\n    explicit _Construct_expected_from_invoke_result_tag() = default;\r\n};\r\n\r\ntemplate <class _Fn, class... _Tys>\r\nconcept _Is_invoke_constructible = requires(_Fn&& _Func, _Tys&&... _Vals) {\r\n    static_cast<remove_cvref_t<invoke_result_t<_Fn, _Tys...>>>(\r\n        _STD invoke(_STD forward<_Fn>(_Func), _STD forward<_Tys>(_Vals)...));\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Check_expected_argument : true_type {\r\n    static_assert(!is_reference_v<_Ty>, \"T must not be a reference type. (N4950 [expected.object.general]/2)\");\r\n    static_assert(!is_function_v<_Ty>, \"T must not be a function type. (N4950 [expected.object.general]/2)\");\r\n    static_assert(!is_array_v<_Ty>, \"T must not be an array type. (N4950 [expected.object.general]/2)\");\r\n    static_assert(!is_same_v<remove_cv_t<_Ty>, in_place_t>,\r\n        \"T must not be (possibly cv-qualified) in_place_t. (N4950 [expected.object.general]/2)\");\r\n    static_assert(!is_same_v<remove_cv_t<_Ty>, unexpect_t>,\r\n        \"T must not be (possibly cv-qualified) unexpect_t. (N4950 [expected.object.general]/2)\");\r\n    static_assert(!_Is_specialization_v<remove_cv_t<_Ty>, unexpected>,\r\n        \"T must not be a (possibly cv-qualified) specialization of unexpected. (N4950 [expected.object.general]/2)\");\r\n};\r\n\r\ntemplate <class _Ty, class _Err>\r\nconcept _Expected_binary_copy_assignable =\r\n    is_copy_assignable_v<_Ty> && is_copy_constructible_v<_Ty> //\r\n    && is_copy_assignable_v<_Err> && is_copy_constructible_v<_Err>\r\n    && (is_nothrow_move_constructible_v<_Ty> || is_nothrow_move_constructible_v<_Err>);\r\n\r\ntemplate <class _Ty, class _Err>\r\nconcept _Expected_binary_move_assignable =\r\n    is_move_assignable_v<_Ty> && is_move_constructible_v<_Ty> //\r\n    && is_move_assignable_v<_Err> && is_move_constructible_v<_Err>\r\n    && (is_nothrow_move_constructible_v<_Ty> || is_nothrow_move_constructible_v<_Err>);\r\n\r\ntemplate <class _Type> // used with both _Ty and _Err\r\nconcept _Trivially_copy_constructible_assignable_destructible =\r\n    is_trivially_copy_constructible_v<_Type> && is_trivially_copy_assignable_v<_Type>\r\n    && is_trivially_destructible_v<_Type>;\r\n\r\ntemplate <class _Type> // used with both _Ty and _Err\r\nconcept _Trivially_move_constructible_assignable_destructible =\r\n    is_trivially_move_constructible_v<_Type> && is_trivially_move_assignable_v<_Type>\r\n    && is_trivially_destructible_v<_Type>;\r\n\r\n_EXPORT_STD template <class _Ty, class _Err>\r\nclass _NODISCARD expected {\r\nprivate:\r\n    static_assert(_Check_expected_argument<_Ty>::value);\r\n    static_assert(_Check_unexpected_argument<_Err>::value);\r\n\r\n    template <class _UTy, class _UErr>\r\n    friend class expected;\r\n\r\n    template <class _Uty, class _UErr>\r\n    static constexpr bool _Allow_unwrapping = disjunction_v<is_same<remove_cv_t<_Ty>, bool>,\r\n                                                  negation<disjunction<is_constructible<_Ty, expected<_Uty, _UErr>&>, //\r\n                                                      is_constructible<_Ty, expected<_Uty, _UErr>>, //\r\n                                                      is_constructible<_Ty, const expected<_Uty, _UErr>&>, //\r\n                                                      is_constructible<_Ty, const expected<_Uty, _UErr>>, //\r\n                                                      is_convertible<expected<_Uty, _UErr>&, _Ty>, //\r\n                                                      is_convertible<expected<_Uty, _UErr>&&, _Ty>, //\r\n                                                      is_convertible<const expected<_Uty, _UErr>&, _Ty>, //\r\n                                                      is_convertible<const expected<_Uty, _UErr>&&, _Ty>>>>\r\n                                           && !is_constructible_v<unexpected<_Err>, expected<_Uty, _UErr>&>\r\n                                           && !is_constructible_v<unexpected<_Err>, expected<_Uty, _UErr>>\r\n                                           && !is_constructible_v<unexpected<_Err>, const expected<_Uty, _UErr>&>\r\n                                           && !is_constructible_v<unexpected<_Err>, const expected<_Uty, _UErr>>;\r\n\r\npublic:\r\n    using value_type      = _Ty;\r\n    using error_type      = _Err;\r\n    using unexpected_type = unexpected<_Err>;\r\n\r\n    template <class _Uty>\r\n    using rebind = expected<_Uty, error_type>;\r\n\r\n    // [expected.object.cons]\r\n    constexpr expected() noexcept(is_nothrow_default_constructible_v<_Ty>) // strengthened\r\n        requires is_default_constructible_v<_Ty>\r\n        : _Value(), _Has_value(true) {}\r\n\r\n    constexpr expected(const expected& _Other)\r\n        noexcept(is_nothrow_copy_constructible_v<_Ty> && is_nothrow_copy_constructible_v<_Err>) // strengthened\r\n        requires (!(is_trivially_copy_constructible_v<_Ty> && is_trivially_copy_constructible_v<_Err>)\r\n                  && is_copy_constructible_v<_Ty> && is_copy_constructible_v<_Err>)\r\n        : _Has_value(_Other._Has_value) {\r\n        if (_Has_value) {\r\n            _STD construct_at(_STD addressof(_Value), _Other._Value);\r\n        } else {\r\n            _STD construct_at(_STD addressof(_Unexpected), _Other._Unexpected);\r\n        }\r\n    }\r\n\r\n    expected(const expected&)\r\n        requires is_trivially_copy_constructible_v<_Ty> && is_trivially_copy_constructible_v<_Err>\r\n    = default;\r\n\r\n    expected(const expected&) = delete;\r\n\r\n    constexpr expected(expected&& _Other)\r\n        noexcept(is_nothrow_move_constructible_v<_Ty> && is_nothrow_move_constructible_v<_Err>)\r\n        requires (!(is_trivially_move_constructible_v<_Ty> && is_trivially_move_constructible_v<_Err>)\r\n                  && is_move_constructible_v<_Ty> && is_move_constructible_v<_Err>)\r\n        : _Has_value(_Other._Has_value) {\r\n        if (_Has_value) {\r\n            _STD construct_at(_STD addressof(_Value), _STD move(_Other._Value));\r\n        } else {\r\n            _STD construct_at(_STD addressof(_Unexpected), _STD move(_Other._Unexpected));\r\n        }\r\n    }\r\n\r\n    expected(expected&&)\r\n        requires is_trivially_move_constructible_v<_Ty> && is_trivially_move_constructible_v<_Err>\r\n    = default;\r\n\r\n    template <class _Uty, class _UErr>\r\n        requires _Different_from<expected<_Uty, _UErr>, expected> && is_constructible_v<_Ty, const _Uty&>\r\n              && is_constructible_v<_Err, const _UErr&> && _Allow_unwrapping<_Uty, _UErr>\r\n    constexpr explicit(!is_convertible_v<const _Uty&, _Ty> || !is_convertible_v<const _UErr&, _Err>)\r\n        expected(const expected<_Uty, _UErr>& _Other)\r\n            noexcept(is_nothrow_constructible_v<_Ty, const _Uty&>\r\n                     && is_nothrow_constructible_v<_Err, const _UErr&>) // strengthened\r\n        : _Has_value(_Other._Has_value) {\r\n        if (_Has_value) {\r\n            _STD construct_at(_STD addressof(_Value), _Other._Value);\r\n        } else {\r\n            _STD construct_at(_STD addressof(_Unexpected), _Other._Unexpected);\r\n        }\r\n    }\r\n\r\n    template <class _Uty, class _UErr>\r\n        requires _Different_from<expected<_Uty, _UErr>, expected> && is_constructible_v<_Ty, _Uty>\r\n              && is_constructible_v<_Err, _UErr> && _Allow_unwrapping<_Uty, _UErr>\r\n    constexpr explicit(!is_convertible_v<_Uty, _Ty> || !is_convertible_v<_UErr, _Err>)\r\n        expected(expected<_Uty, _UErr>&& _Other)\r\n            noexcept(is_nothrow_constructible_v<_Ty, _Uty> && is_nothrow_constructible_v<_Err, _UErr>) // strengthened\r\n        : _Has_value(_Other._Has_value) {\r\n        if (_Has_value) {\r\n            _STD construct_at(_STD addressof(_Value), _STD move(_Other._Value));\r\n        } else {\r\n            _STD construct_at(_STD addressof(_Unexpected), _STD move(_Other._Unexpected));\r\n        }\r\n    }\r\n\r\n    template <class _Uty = remove_cv_t<_Ty>>\r\n        requires (!is_same_v<remove_cvref_t<_Uty>, in_place_t> && !is_same_v<remove_cvref_t<_Uty>, expected>\r\n                     && !is_same_v<remove_cvref_t<_Uty>, unexpect_t>\r\n                     && !_Is_specialization_v<remove_cvref_t<_Uty>, unexpected>\r\n                     && (!is_same_v<remove_cv_t<_Ty>, bool> || !_Is_specialization_v<remove_cvref_t<_Uty>, expected>)\r\n                     && is_constructible_v<_Ty, _Uty>)\r\n    constexpr explicit(!is_convertible_v<_Uty, _Ty>) expected(_Uty&& _Other)\r\n        noexcept(is_nothrow_constructible_v<_Ty, _Uty>) // strengthened\r\n        : _Value(_STD forward<_Uty>(_Other)), _Has_value(true) {}\r\n\r\n    template <class _UErr>\r\n        requires is_constructible_v<_Err, const _UErr&>\r\n    constexpr explicit(!is_convertible_v<const _UErr&, _Err>) expected(const unexpected<_UErr>& _Other) //\r\n        noexcept(is_nothrow_constructible_v<_Err, const _UErr&>) // strengthened\r\n        : _Unexpected(_Other._Unexpected), _Has_value(false) {}\r\n\r\n    template <class _UErr>\r\n        requires is_constructible_v<_Err, _UErr>\r\n    constexpr explicit(!is_convertible_v<_UErr, _Err>) expected(unexpected<_UErr>&& _Other) //\r\n        noexcept(is_nothrow_constructible_v<_Err, _UErr>) // strengthened\r\n        : _Unexpected(_STD move(_Other._Unexpected)), _Has_value(false) {}\r\n\r\n    template <class... _Args>\r\n        requires is_constructible_v<_Ty, _Args...>\r\n    constexpr explicit expected(in_place_t, _Args&&... _Vals)\r\n        noexcept(is_nothrow_constructible_v<_Ty, _Args...>) // strengthened\r\n        : _Value(_STD forward<_Args>(_Vals)...), _Has_value(true) {}\r\n\r\n    template <class _Uty, class... _Args>\r\n        requires is_constructible_v<_Ty, initializer_list<_Uty>&, _Args...>\r\n    constexpr explicit expected(in_place_t, initializer_list<_Uty> _Ilist, _Args&&... _Vals)\r\n        noexcept(is_nothrow_constructible_v<_Ty, initializer_list<_Uty>&, _Args...>) // strengthened\r\n        : _Value(_Ilist, _STD forward<_Args>(_Vals)...), _Has_value(true) {}\r\n\r\n    template <class... _Args>\r\n        requires is_constructible_v<_Err, _Args...>\r\n    constexpr explicit expected(unexpect_t, _Args&&... _Vals)\r\n        noexcept(is_nothrow_constructible_v<_Err, _Args...>) // strengthened\r\n        : _Unexpected(_STD forward<_Args>(_Vals)...), _Has_value(false) {}\r\n\r\n    template <class _Uty, class... _Args>\r\n        requires is_constructible_v<_Err, initializer_list<_Uty>&, _Args...>\r\n    constexpr explicit expected(unexpect_t, initializer_list<_Uty> _Ilist, _Args&&... _Vals)\r\n        noexcept(is_nothrow_constructible_v<_Err, initializer_list<_Uty>&, _Args...>) // strengthened\r\n        : _Unexpected(_Ilist, _STD forward<_Args>(_Vals)...), _Has_value(false) {}\r\n\r\n    // [expected.object.dtor]\r\n    constexpr ~expected()\r\n#ifndef __clang__ // TRANSITION, LLVM-59854\r\n        noexcept\r\n#endif // ^^^ no workaround ^^^\r\n    {\r\n        if (_Has_value) {\r\n            if constexpr (!is_trivially_destructible_v<_Ty>) {\r\n                _Value.~_Ty();\r\n            }\r\n        } else {\r\n            if constexpr (!is_trivially_destructible_v<_Err>) {\r\n                _Unexpected.~_Err();\r\n            }\r\n        }\r\n    }\r\n\r\n    ~expected()\r\n        requires is_trivially_destructible_v<_Ty> && is_trivially_destructible_v<_Err>\r\n    = default;\r\n\r\n    // [expected.object.assign]\r\n    template <class _Uty>\r\n        requires is_nothrow_move_constructible_v<_Uty>\r\n    struct _NODISCARD _GuardTy {\r\n        constexpr _GuardTy(_Uty* _Target_, _Uty* _Tmp_) noexcept : _Target(_Target_), _Tmp(_Tmp_) {}\r\n        constexpr ~_GuardTy() noexcept {\r\n            if (_Target) {\r\n                _STD construct_at(_Target, _STD move(*_Tmp));\r\n            }\r\n        }\r\n        _Uty* _Target;\r\n        _Uty* _Tmp;\r\n    };\r\n\r\n    template <class _First, class _Second, class... _Args>\r\n    static constexpr void _Reinit_expected(_First& _New_val, _Second& _Old_val, _Args&&... _Vals)\r\n        noexcept(is_nothrow_constructible_v<_First, _Args...>) /* strengthened */ {\r\n        if constexpr (is_nothrow_constructible_v<_First, _Args...>) {\r\n            if constexpr (!is_trivially_destructible_v<_Second>) {\r\n                _Old_val.~_Second();\r\n            }\r\n            _STD construct_at(_STD addressof(_New_val), _STD forward<_Args>(_Vals)...);\r\n        } else if constexpr (is_nothrow_move_constructible_v<_First>) {\r\n            _First _Tmp(_STD forward<_Args>(_Vals)...);\r\n            if constexpr (!is_trivially_destructible_v<_Second>) {\r\n                _Old_val.~_Second();\r\n            }\r\n            _STD construct_at(_STD addressof(_New_val), _STD move(_Tmp));\r\n        } else {\r\n            _Second _Tmp(_STD move(_Old_val));\r\n            if constexpr (!is_trivially_destructible_v<_Second>) {\r\n                _Old_val.~_Second();\r\n            }\r\n\r\n            _GuardTy<_Second> _Guard{_STD addressof(_Old_val), _STD addressof(_Tmp)};\r\n            _STD construct_at(_STD addressof(_New_val), _STD forward<_Args>(_Vals)...);\r\n            _Guard._Target = nullptr;\r\n        }\r\n    }\r\n\r\n    constexpr expected& operator=(const expected& _Other)\r\n        noexcept(is_nothrow_copy_constructible_v<_Ty> && is_nothrow_copy_constructible_v<_Err>\r\n                 && is_nothrow_copy_assignable_v<_Ty> && is_nothrow_copy_assignable_v<_Err>) // strengthened\r\n        requires _Expected_binary_copy_assignable<_Ty, _Err>\r\n    {\r\n        if (_Has_value && _Other._Has_value) {\r\n            _Value = _Other._Value;\r\n        } else if (_Has_value) {\r\n            _Reinit_expected(_Unexpected, _Value, _Other._Unexpected);\r\n        } else if (_Other._Has_value) {\r\n            _Reinit_expected(_Value, _Unexpected, _Other._Value);\r\n        } else {\r\n            _Unexpected = _Other._Unexpected;\r\n        }\r\n\r\n        _Has_value = _Other._Has_value;\r\n        return *this;\r\n    }\r\n\r\n    expected& operator=(const expected&)\r\n        requires _Expected_binary_copy_assignable<_Ty, _Err>\r\n                  && _Trivially_copy_constructible_assignable_destructible<_Ty>\r\n                  && _Trivially_copy_constructible_assignable_destructible<_Err>\r\n    = default;\r\n\r\n    expected& operator=(const expected&) = delete;\r\n\r\n    constexpr expected& operator=(expected&& _Other)\r\n        noexcept(is_nothrow_move_constructible_v<_Ty> && is_nothrow_move_constructible_v<_Err>\r\n                 && is_nothrow_move_assignable_v<_Ty> && is_nothrow_move_assignable_v<_Err>)\r\n        requires _Expected_binary_move_assignable<_Ty, _Err>\r\n    {\r\n        if (_Has_value && _Other._Has_value) {\r\n            _Value = _STD move(_Other._Value);\r\n        } else if (_Has_value) {\r\n            _Reinit_expected(_Unexpected, _Value, _STD move(_Other._Unexpected));\r\n        } else if (_Other._Has_value) {\r\n            _Reinit_expected(_Value, _Unexpected, _STD move(_Other._Value));\r\n        } else {\r\n            _Unexpected = _STD move(_Other._Unexpected);\r\n        }\r\n\r\n        _Has_value = _Other._Has_value;\r\n        return *this;\r\n    }\r\n\r\n    expected& operator=(expected&&)\r\n        requires _Expected_binary_move_assignable<_Ty, _Err>\r\n                  && _Trivially_move_constructible_assignable_destructible<_Ty>\r\n                  && _Trivially_move_constructible_assignable_destructible<_Err>\r\n    = default;\r\n\r\n    template <class _Uty = remove_cv_t<_Ty>>\r\n        requires (!is_same_v<remove_cvref_t<_Uty>, expected> && !_Is_specialization_v<remove_cvref_t<_Uty>, unexpected>\r\n                  && is_constructible_v<_Ty, _Uty> && is_assignable_v<_Ty&, _Uty>\r\n                  && (is_nothrow_constructible_v<_Ty, _Uty> || is_nothrow_move_constructible_v<_Ty>\r\n                      || is_nothrow_move_constructible_v<_Err>) )\r\n    constexpr expected& operator=(_Uty&& _Other)\r\n        noexcept(is_nothrow_constructible_v<_Ty, _Uty> && is_nothrow_assignable_v<_Ty&, _Uty>) /* strengthened */ {\r\n        if (_Has_value) {\r\n            _Value = _STD forward<_Uty>(_Other);\r\n        } else {\r\n            _Reinit_expected(_Value, _Unexpected, _STD forward<_Uty>(_Other));\r\n            _Has_value = true;\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    template <class _UErr>\r\n        requires (is_constructible_v<_Err, const _UErr&> && is_assignable_v<_Err&, const _UErr&>\r\n                  && (is_nothrow_constructible_v<_Err, const _UErr&> || is_nothrow_move_constructible_v<_Ty>\r\n                      || is_nothrow_move_constructible_v<_Err>) )\r\n    constexpr expected& operator=(const unexpected<_UErr>& _Other)\r\n        noexcept(is_nothrow_constructible_v<_Err, const _UErr&>\r\n                 && is_nothrow_assignable_v<_Err&, const _UErr&>) /* strengthened */ {\r\n        if (_Has_value) {\r\n            _Reinit_expected(_Unexpected, _Value, _Other._Unexpected);\r\n            _Has_value = false;\r\n        } else {\r\n            _Unexpected = _Other._Unexpected;\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    template <class _UErr>\r\n        requires (is_constructible_v<_Err, _UErr> && is_assignable_v<_Err&, _UErr>\r\n                  && (is_nothrow_constructible_v<_Err, _UErr> || is_nothrow_move_constructible_v<_Ty>\r\n                      || is_nothrow_move_constructible_v<_Err>) )\r\n    constexpr expected& operator=(unexpected<_UErr>&& _Other)\r\n        noexcept(is_nothrow_constructible_v<_Err, _UErr> && is_nothrow_assignable_v<_Err&, _UErr>) /* strengthened */ {\r\n        if (_Has_value) {\r\n            _Reinit_expected(_Unexpected, _Value, _STD move(_Other._Unexpected));\r\n            _Has_value = false;\r\n        } else {\r\n            _Unexpected = _STD move(_Other._Unexpected);\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    template <class... _Args>\r\n        requires is_nothrow_constructible_v<_Ty, _Args...>\r\n    constexpr _Ty& emplace(_Args&&... _Vals) noexcept {\r\n        if (_Has_value) {\r\n            if constexpr (!is_trivially_destructible_v<_Ty>) {\r\n                _Value.~_Ty();\r\n            }\r\n        } else {\r\n            if constexpr (!is_trivially_destructible_v<_Err>) {\r\n                _Unexpected.~_Err();\r\n            }\r\n            _Has_value = true;\r\n        }\r\n\r\n        return *_STD construct_at(_STD addressof(_Value), _STD forward<_Args>(_Vals)...);\r\n    }\r\n\r\n    template <class _Uty, class... _Args>\r\n        requires is_nothrow_constructible_v<_Ty, initializer_list<_Uty>&, _Args...>\r\n    constexpr _Ty& emplace(initializer_list<_Uty> _Ilist, _Args&&... _Vals) noexcept {\r\n        if (_Has_value) {\r\n            if constexpr (!is_trivially_destructible_v<_Ty>) {\r\n                _Value.~_Ty();\r\n            }\r\n        } else {\r\n            if constexpr (!is_trivially_destructible_v<_Err>) {\r\n                _Unexpected.~_Err();\r\n            }\r\n            _Has_value = true;\r\n        }\r\n\r\n        return *_STD construct_at(_STD addressof(_Value), _Ilist, _STD forward<_Args>(_Vals)...);\r\n    }\r\n\r\n    // [expected.object.swap]\r\n    constexpr void swap(expected& _Other)\r\n        noexcept(is_nothrow_move_constructible_v<_Ty> && is_nothrow_swappable_v<_Ty>\r\n                 && is_nothrow_move_constructible_v<_Err> && is_nothrow_swappable_v<_Err>)\r\n        requires is_swappable_v<_Ty> && is_swappable_v<_Err> //\r\n              && is_move_constructible_v<_Ty> && is_move_constructible_v<_Err>\r\n              && (is_nothrow_move_constructible_v<_Ty> || is_nothrow_move_constructible_v<_Err>)\r\n    {\r\n        using _STD swap;\r\n        if (_Has_value && _Other._Has_value) {\r\n            swap(_Value, _Other._Value); // intentional ADL\r\n        } else if (_Has_value) {\r\n            if constexpr (is_nothrow_move_constructible_v<_Err>) {\r\n                _Err _Tmp(_STD move(_Other._Unexpected));\r\n                if constexpr (!is_trivially_destructible_v<_Err>) {\r\n                    _Other._Unexpected.~_Err();\r\n                }\r\n\r\n                if constexpr (is_nothrow_move_constructible_v<_Ty>) {\r\n                    _STD construct_at(_STD addressof(_Other._Value), _STD move(_Value));\r\n                } else {\r\n                    _GuardTy<_Err> _Guard{_STD addressof(_Other._Unexpected), _STD addressof(_Tmp)};\r\n                    _STD construct_at(_STD addressof(_Other._Value), _STD move(_Value));\r\n                    _Guard._Target = nullptr;\r\n                }\r\n\r\n                if constexpr (!is_trivially_destructible_v<_Ty>) {\r\n                    _Value.~_Ty();\r\n                }\r\n                _STD construct_at(_STD addressof(_Unexpected), _STD move(_Tmp));\r\n            } else {\r\n                _Ty _Tmp(_STD move(_Value));\r\n                if constexpr (!is_trivially_destructible_v<_Ty>) {\r\n                    _Value.~_Ty();\r\n                }\r\n\r\n                _GuardTy<_Ty> _Guard{_STD addressof(_Value), _STD addressof(_Tmp)};\r\n                _STD construct_at(_STD addressof(_Unexpected), _STD move(_Other._Unexpected));\r\n                _Guard._Target = nullptr;\r\n\r\n                if constexpr (!is_trivially_destructible_v<_Err>) {\r\n                    _Other._Unexpected.~_Err();\r\n                }\r\n                _STD construct_at(_STD addressof(_Other._Value), _STD move(_Tmp));\r\n            }\r\n\r\n            _Has_value        = false;\r\n            _Other._Has_value = true;\r\n        } else if (_Other._Has_value) {\r\n            _Other.swap(*this);\r\n        } else {\r\n            swap(_Unexpected, _Other._Unexpected); // intentional ADL\r\n        }\r\n    }\r\n\r\n    friend constexpr void swap(expected& _Lhs, expected& _Rhs)\r\n        noexcept(is_nothrow_move_constructible_v<_Ty> && is_nothrow_swappable_v<_Ty>\r\n                 && is_nothrow_move_constructible_v<_Err> && is_nothrow_swappable_v<_Err>)\r\n        requires is_swappable<_Ty>::value && is_swappable<_Err>::value // TRANSITION, /permissive needs ::value\r\n              && is_move_constructible_v<_Ty> && is_move_constructible_v<_Err>\r\n              && (is_nothrow_move_constructible_v<_Ty> || is_nothrow_move_constructible_v<_Err>)\r\n    {\r\n        _Lhs.swap(_Rhs);\r\n    }\r\n\r\n    // [expected.object.obs]\r\n    _NODISCARD constexpr const _Ty* operator->() const noexcept {\r\n#if _MSVC_STL_HARDENING_EXPECTED || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Has_value, \"operator->() called on a std::expected that contains an error, not a value\");\r\n#endif\r\n\r\n        return _STD addressof(_Value);\r\n    }\r\n    _NODISCARD constexpr _Ty* operator->() noexcept {\r\n#if _MSVC_STL_HARDENING_EXPECTED || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Has_value, \"operator->() called on a std::expected that contains an error, not a value\");\r\n#endif\r\n\r\n        return _STD addressof(_Value);\r\n    }\r\n\r\n    _NODISCARD constexpr const _Ty& operator*() const& noexcept {\r\n#if _MSVC_STL_HARDENING_EXPECTED || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Has_value, \"operator*() called on a std::expected that contains an error, not a value\");\r\n#endif\r\n\r\n        return _Value;\r\n    }\r\n    _NODISCARD constexpr _Ty& operator*() & noexcept {\r\n#if _MSVC_STL_HARDENING_EXPECTED || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Has_value, \"operator*() called on a std::expected that contains an error, not a value\");\r\n#endif\r\n\r\n        return _Value;\r\n    }\r\n    _NODISCARD constexpr const _Ty&& operator*() const&& noexcept {\r\n#if _MSVC_STL_HARDENING_EXPECTED || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Has_value, \"operator*() called on a std::expected that contains an error, not a value\");\r\n#endif\r\n\r\n        return _STD move(_Value);\r\n    }\r\n    _NODISCARD constexpr _Ty&& operator*() && noexcept {\r\n#if _MSVC_STL_HARDENING_EXPECTED || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Has_value, \"operator*() called on a std::expected that contains an error, not a value\");\r\n#endif\r\n\r\n        return _STD move(_Value);\r\n    }\r\n\r\n    _NODISCARD constexpr explicit operator bool() const noexcept {\r\n        return _Has_value;\r\n    }\r\n    _NODISCARD constexpr bool has_value() const noexcept {\r\n        return _Has_value;\r\n    }\r\n\r\n    _NODISCARD constexpr const _Ty& value() const& {\r\n        if (_Has_value) {\r\n            return _Value;\r\n        }\r\n\r\n        _Throw_bad_expected_access_lv();\r\n    }\r\n    _NODISCARD constexpr _Ty& value() & {\r\n        if (_Has_value) {\r\n            return _Value;\r\n        }\r\n\r\n        _Throw_bad_expected_access_lv();\r\n    }\r\n    _NODISCARD constexpr const _Ty&& value() const&& {\r\n        // TRANSITION, DevCom-1638273 and LLVM-53224\r\n        static_assert(\r\n            is_copy_constructible_v<_Err>, \"is_copy_constructible_v<E> must be true. N4950 [expected.object.obs]/11\");\r\n        static_assert(is_constructible_v<_Err, const _Err&&>,\r\n            \"is_constructible_v<E, const E&&> must be true. N4950 [expected.object.obs]/11\");\r\n\r\n        if (_Has_value) {\r\n            return _STD move(_Value);\r\n        }\r\n\r\n        _Throw_bad_expected_access_rv();\r\n    }\r\n    _NODISCARD constexpr _Ty&& value() && {\r\n        // TRANSITION, DevCom-1638273 and LLVM-53224\r\n        static_assert(\r\n            is_copy_constructible_v<_Err>, \"is_copy_constructible_v<E> must be true. N4950 [expected.object.obs]/11\");\r\n        static_assert(\r\n            is_move_constructible_v<_Err>, \"is_constructible_v<E, E&&> must be true. N4950 [expected.object.obs]/11\");\r\n\r\n        if (_Has_value) {\r\n            return _STD move(_Value);\r\n        }\r\n\r\n        _Throw_bad_expected_access_rv();\r\n    }\r\n\r\n    _NODISCARD constexpr const _Err& error() const& noexcept {\r\n#if _MSVC_STL_HARDENING_EXPECTED || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(!_Has_value, \"error() called on a std::expected that contains a value, not an error\");\r\n#endif\r\n\r\n        return _Unexpected;\r\n    }\r\n    _NODISCARD constexpr _Err& error() & noexcept {\r\n#if _MSVC_STL_HARDENING_EXPECTED || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(!_Has_value, \"error() called on a std::expected that contains a value, not an error\");\r\n#endif\r\n\r\n        return _Unexpected;\r\n    }\r\n    _NODISCARD constexpr const _Err&& error() const&& noexcept {\r\n#if _MSVC_STL_HARDENING_EXPECTED || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(!_Has_value, \"error() called on a std::expected that contains a value, not an error\");\r\n#endif\r\n\r\n        return _STD move(_Unexpected);\r\n    }\r\n    _NODISCARD constexpr _Err&& error() && noexcept {\r\n#if _MSVC_STL_HARDENING_EXPECTED || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(!_Has_value, \"error() called on a std::expected that contains a value, not an error\");\r\n#endif\r\n\r\n        return _STD move(_Unexpected);\r\n    }\r\n\r\n    template <class _Uty = remove_cv_t<_Ty>>\r\n    _NODISCARD constexpr remove_cv_t<_Ty> value_or(_Uty&& _Other) const& noexcept(\r\n        is_nothrow_convertible_v<const _Ty&, remove_cv_t<_Ty>>\r\n        && is_nothrow_convertible_v<_Uty, remove_cv_t<_Ty>>) /* strengthened */ {\r\n        static_assert(is_convertible_v<const _Ty&, remove_cv_t<_Ty>>,\r\n            \"is_convertible_v<const T&, remove_cv_t<T>> must be true. \"\r\n            \"(N5001 [expected.object.obs]/18 as modified by LWG-3424)\");\r\n        static_assert(is_convertible_v<_Uty, remove_cv_t<_Ty>>,\r\n            \"is_convertible_v<U, remove_cv_t<T>> must be true. \"\r\n            \"(N5001 [expected.object.obs]/18 as modified by LWG-3424)\");\r\n\r\n        if (_Has_value) {\r\n            return _Value;\r\n        } else {\r\n            return static_cast<remove_cv_t<_Ty>>(_STD forward<_Uty>(_Other));\r\n        }\r\n    }\r\n    template <class _Uty = remove_cv_t<_Ty>>\r\n    _NODISCARD constexpr remove_cv_t<_Ty> value_or(_Uty&& _Other) && noexcept(\r\n        is_nothrow_convertible_v<_Ty, remove_cv_t<_Ty>>\r\n        && is_nothrow_convertible_v<_Uty, remove_cv_t<_Ty>>) /* strengthened */ {\r\n        static_assert(is_convertible_v<_Ty, remove_cv_t<_Ty>>,\r\n            \"is_convertible_v<T, remove_cv_t<T>> must be true. \"\r\n            \"(N5001 [expected.object.obs]/20 as modified by LWG-3424)\");\r\n        static_assert(is_convertible_v<_Uty, remove_cv_t<_Ty>>,\r\n            \"is_convertible_v<U, remove_cv_t<T>> must be true. \"\r\n            \"(N5001 [expected.object.obs]/20 as modified by LWG-3424)\");\r\n\r\n        if (_Has_value) {\r\n            return _STD move(_Value);\r\n        } else {\r\n            return static_cast<remove_cv_t<_Ty>>(_STD forward<_Uty>(_Other));\r\n        }\r\n    }\r\n\r\n    template <class _Uty = _Err>\r\n    _NODISCARD constexpr _Err error_or(_Uty&& _Other) const& noexcept(\r\n        is_nothrow_copy_constructible_v<_Err> && is_nothrow_convertible_v<_Uty, _Err>) /* strengthened */ {\r\n        static_assert(\r\n            is_copy_constructible_v<_Err>, \"is_copy_constructible_v<E> must be true. (N4950 [expected.object.obs]/22)\");\r\n        static_assert(\r\n            is_convertible_v<_Uty, _Err>, \"is_convertible_v<G, E> must be true. (N4950 [expected.object.obs]/22)\");\r\n\r\n        if (_Has_value) {\r\n            return _STD forward<_Uty>(_Other);\r\n        } else {\r\n            return _Unexpected;\r\n        }\r\n    }\r\n\r\n    template <class _Uty = _Err>\r\n    _NODISCARD constexpr _Err error_or(_Uty&& _Other) && noexcept(\r\n        is_nothrow_move_constructible_v<_Err> && is_nothrow_convertible_v<_Uty, _Err>) /* strengthened */ {\r\n        static_assert(\r\n            is_move_constructible_v<_Err>, \"is_move_constructible_v<E> must be true. (N4950 [expected.object.obs]/24)\");\r\n        static_assert(\r\n            is_convertible_v<_Uty, _Err>, \"is_convertible_v<G, E> must be true. (N4950 [expected.object.obs]/24)\");\r\n\r\n        if (_Has_value) {\r\n            return _STD forward<_Uty>(_Other);\r\n        } else {\r\n            return _STD move(_Unexpected);\r\n        }\r\n    }\r\n\r\n    // [expected.object.monadic]\r\n    template <class _Fn>\r\n        requires is_constructible_v<_Err, _Err&>\r\n    constexpr auto and_then(_Fn&& _Func) & {\r\n        using _Uty = remove_cvref_t<invoke_result_t<_Fn, _Ty&>>;\r\n\r\n        static_assert(_Is_specialization_v<_Uty, expected>,\r\n            \"expected<T, E>::and_then(F) requires the return type of F to be a specialization of expected. \"\r\n            \"(N4950 [expected.object.monadic]/3)\");\r\n        static_assert(is_same_v<typename _Uty::error_type, _Err>,\r\n            \"expected<T, E>::and_then(F) requires the error type of the return type of F to be E. \"\r\n            \"(N4950 [expected.object.monadic]/3)\");\r\n\r\n        if (_Has_value) {\r\n            return _STD invoke(_STD forward<_Fn>(_Func), _Value);\r\n        } else {\r\n            return _Uty{unexpect, _Unexpected};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_copy_constructible_v<_Err>\r\n    constexpr auto and_then(_Fn&& _Func) const& {\r\n        using _Uty = remove_cvref_t<invoke_result_t<_Fn, const _Ty&>>;\r\n\r\n        static_assert(_Is_specialization_v<_Uty, expected>,\r\n            \"expected<T, E>::and_then(F) requires the return type of F to be a specialization of expected. \"\r\n            \"(N4950 [expected.object.monadic]/3)\");\r\n        static_assert(is_same_v<typename _Uty::error_type, _Err>,\r\n            \"expected<T, E>::and_then(F) requires the error type of the return type of F to be E. \"\r\n            \"(N4950 [expected.object.monadic]/3)\");\r\n\r\n        if (_Has_value) {\r\n            return _STD invoke(_STD forward<_Fn>(_Func), _Value);\r\n        } else {\r\n            return _Uty{unexpect, _Unexpected};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_move_constructible_v<_Err>\r\n    constexpr auto and_then(_Fn&& _Func) && {\r\n        using _Uty = remove_cvref_t<invoke_result_t<_Fn, _Ty>>;\r\n\r\n        static_assert(_Is_specialization_v<_Uty, expected>,\r\n            \"expected<T, E>::and_then(F) requires the return type of F to be a specialization of expected. \"\r\n            \"(N4950 [expected.object.monadic]/7)\");\r\n        static_assert(is_same_v<typename _Uty::error_type, _Err>,\r\n            \"expected<T, E>::and_then(F) requires the error type of the return type of F to be E. \"\r\n            \"(N4950 [expected.object.monadic]/7)\");\r\n\r\n        if (_Has_value) {\r\n            return _STD invoke(_STD forward<_Fn>(_Func), _STD move(_Value));\r\n        } else {\r\n            return _Uty{unexpect, _STD move(_Unexpected)};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_constructible_v<_Err, const _Err>\r\n    constexpr auto and_then(_Fn&& _Func) const&& {\r\n        using _Uty = remove_cvref_t<invoke_result_t<_Fn, const _Ty>>;\r\n\r\n        static_assert(_Is_specialization_v<_Uty, expected>,\r\n            \"expected<T, E>::and_then(F) requires the return type of F to be a specialization of expected. \"\r\n            \"(N4950 [expected.object.monadic]/7)\");\r\n        static_assert(is_same_v<typename _Uty::error_type, _Err>,\r\n            \"expected<T, E>::and_then(F) requires the error type of the return type of F to be E. \"\r\n            \"(N4950 [expected.object.monadic]/7)\");\r\n\r\n        if (_Has_value) {\r\n            return _STD invoke(_STD forward<_Fn>(_Func), _STD move(_Value));\r\n        } else {\r\n            return _Uty{unexpect, _STD move(_Unexpected)};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_constructible_v<_Ty, _Ty&>\r\n    constexpr auto or_else(_Fn&& _Func) & {\r\n        using _Uty = remove_cvref_t<invoke_result_t<_Fn, _Err&>>;\r\n\r\n        static_assert(_Is_specialization_v<_Uty, expected>,\r\n            \"expected<T, E>::or_else(F) requires the return type of F to be a specialization of expected. \"\r\n            \"(N4950 [expected.object.monadic]/11)\");\r\n        static_assert(is_same_v<typename _Uty::value_type, _Ty>,\r\n            \"expected<T, E>::or_else(F) requires the value type of the return type of F to be T. \"\r\n            \"(N4950 [expected.object.monadic]/11)\");\r\n\r\n        if (_Has_value) {\r\n            return _Uty{in_place, _Value};\r\n        } else {\r\n            return _STD invoke(_STD forward<_Fn>(_Func), _Unexpected);\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_copy_constructible_v<_Ty>\r\n    constexpr auto or_else(_Fn&& _Func) const& {\r\n        using _Uty = remove_cvref_t<invoke_result_t<_Fn, const _Err&>>;\r\n\r\n        static_assert(_Is_specialization_v<_Uty, expected>,\r\n            \"expected<T, E>::or_else(F) requires the return type of F to be a specialization of expected. \"\r\n            \"(N4950 [expected.object.monadic]/11)\");\r\n        static_assert(is_same_v<typename _Uty::value_type, _Ty>,\r\n            \"expected<T, E>::or_else(F) requires the value type of the return type of F to be T. \"\r\n            \"(N4950 [expected.object.monadic]/11)\");\r\n\r\n        if (_Has_value) {\r\n            return _Uty{in_place, _Value};\r\n        } else {\r\n            return _STD invoke(_STD forward<_Fn>(_Func), _Unexpected);\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_move_constructible_v<_Ty>\r\n    constexpr auto or_else(_Fn&& _Func) && {\r\n        using _Uty = remove_cvref_t<invoke_result_t<_Fn, _Err>>;\r\n\r\n        static_assert(_Is_specialization_v<_Uty, expected>,\r\n            \"expected<T, E>::or_else(F) requires the return type of F to be a specialization of expected. \"\r\n            \"(N4950 [expected.object.monadic]/15)\");\r\n        static_assert(is_same_v<typename _Uty::value_type, _Ty>,\r\n            \"expected<T, E>::or_else(F) requires the value type of the return type of F to be T. \"\r\n            \"(N4950 [expected.object.monadic]/15)\");\r\n\r\n        if (_Has_value) {\r\n            return _Uty{in_place, _STD move(_Value)};\r\n        } else {\r\n            return _STD invoke(_STD forward<_Fn>(_Func), _STD move(_Unexpected));\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_constructible_v<_Ty, const _Ty>\r\n    constexpr auto or_else(_Fn&& _Func) const&& {\r\n        using _Uty = remove_cvref_t<invoke_result_t<_Fn, const _Err>>;\r\n\r\n        static_assert(_Is_specialization_v<_Uty, expected>,\r\n            \"expected<T, E>::or_else(F) requires the return type of F to be a specialization of expected. \"\r\n            \"(N4950 [expected.object.monadic]/15)\");\r\n        static_assert(is_same_v<typename _Uty::value_type, _Ty>,\r\n            \"expected<T, E>::or_else(F) requires the value type of the return type of F to be T. \"\r\n            \"(N4950 [expected.object.monadic]/15)\");\r\n\r\n        if (_Has_value) {\r\n            return _Uty{in_place, _STD move(_Value)};\r\n        } else {\r\n            return _STD invoke(_STD forward<_Fn>(_Func), _STD move(_Unexpected));\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_constructible_v<_Err, _Err&>\r\n    constexpr auto transform(_Fn&& _Func) & {\r\n        static_assert(invocable<_Fn, _Ty&>, \"expected<T, E>::transform(F) requires that F is invocable with T. \"\r\n                                            \"(N4950 [expected.object.monadic]/19)\");\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn, _Ty&>>;\r\n\r\n        if constexpr (!is_void_v<_Uty>) {\r\n            static_assert(_Is_invoke_constructible<_Fn, _Ty&>,\r\n                \"expected<T, E>::transform(F) requires that the return type of F is constructible with the result of \"\r\n                \"invoking f. (N4950 [expected.object.monadic]/19)\");\r\n        }\r\n        static_assert(_Check_expected_argument<_Uty>::value);\r\n\r\n        if (_Has_value) {\r\n            if constexpr (is_void_v<_Uty>) {\r\n                _STD invoke(_STD forward<_Fn>(_Func), _Value);\r\n                return expected<_Uty, _Err>{};\r\n            } else {\r\n                return expected<_Uty, _Err>{\r\n                    _Construct_expected_from_invoke_result_tag{}, _STD forward<_Fn>(_Func), _Value};\r\n            }\r\n        } else {\r\n            return expected<_Uty, _Err>{unexpect, _Unexpected};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_copy_constructible_v<_Err>\r\n    constexpr auto transform(_Fn&& _Func) const& {\r\n        static_assert(invocable<_Fn, const _Ty&>, \"expected<T, E>::transform(F) requires that F is invocable with T. \"\r\n                                                  \"(N4950 [expected.object.monadic]/19)\");\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn, const _Ty&>>;\r\n\r\n        if constexpr (!is_void_v<_Uty>) {\r\n            static_assert(_Is_invoke_constructible<_Fn, const _Ty&>,\r\n                \"expected<T, E>::transform(F) requires that the return type of F is constructible with the result of \"\r\n                \"invoking f. (N4950 [expected.object.monadic]/19)\");\r\n        }\r\n        static_assert(_Check_expected_argument<_Uty>::value);\r\n\r\n        if (_Has_value) {\r\n            if constexpr (is_void_v<_Uty>) {\r\n                _STD invoke(_STD forward<_Fn>(_Func), _Value);\r\n                return expected<_Uty, _Err>{};\r\n            } else {\r\n                return expected<_Uty, _Err>{\r\n                    _Construct_expected_from_invoke_result_tag{}, _STD forward<_Fn>(_Func), _Value};\r\n            }\r\n        } else {\r\n            return expected<_Uty, _Err>{unexpect, _Unexpected};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_move_constructible_v<_Err>\r\n    constexpr auto transform(_Fn&& _Func) && {\r\n        static_assert(invocable<_Fn, _Ty>, \"expected<T, E>::transform(F) requires that F is invocable with T. \"\r\n                                           \"(N4950 [expected.object.monadic]/23)\");\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn, _Ty>>;\r\n\r\n        if constexpr (!is_void_v<_Uty>) {\r\n            static_assert(_Is_invoke_constructible<_Fn, _Ty>,\r\n                \"expected<T, E>::transform(F) requires that the return type of F is constructible with the result of \"\r\n                \"invoking f. (N4950 [expected.object.monadic]/23)\");\r\n        }\r\n        static_assert(_Check_expected_argument<_Uty>::value);\r\n\r\n        if (_Has_value) {\r\n            if constexpr (is_void_v<_Uty>) {\r\n                _STD invoke(_STD forward<_Fn>(_Func), _STD move(_Value));\r\n                return expected<_Uty, _Err>{};\r\n            } else {\r\n                return expected<_Uty, _Err>{\r\n                    _Construct_expected_from_invoke_result_tag{}, _STD forward<_Fn>(_Func), _STD move(_Value)};\r\n            }\r\n        } else {\r\n            return expected<_Uty, _Err>{unexpect, _STD move(_Unexpected)};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_constructible_v<_Err, const _Err>\r\n    constexpr auto transform(_Fn&& _Func) const&& {\r\n        static_assert(invocable<_Fn, const _Ty>, \"expected<T, E>::transform(F) requires that F is invocable with T. \"\r\n                                                 \"(N4950 [expected.object.monadic]/23)\");\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn, const _Ty>>;\r\n\r\n        if constexpr (!is_void_v<_Uty>) {\r\n            static_assert(_Is_invoke_constructible<_Fn, const _Ty>,\r\n                \"expected<T, E>::transform(F) requires that the return type of F is constructible with the result of \"\r\n                \"invoking f. (N4950 [expected.object.monadic]/23)\");\r\n        }\r\n        static_assert(_Check_expected_argument<_Uty>::value);\r\n\r\n        if (_Has_value) {\r\n            if constexpr (is_void_v<_Uty>) {\r\n                _STD invoke(_STD forward<_Fn>(_Func), _STD move(_Value));\r\n                return expected<_Uty, _Err>{};\r\n            } else {\r\n                return expected<_Uty, _Err>{\r\n                    _Construct_expected_from_invoke_result_tag{}, _STD forward<_Fn>(_Func), _STD move(_Value)};\r\n            }\r\n        } else {\r\n            return expected<_Uty, _Err>{unexpect, _STD move(_Unexpected)};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_constructible_v<_Ty, _Ty&>\r\n    constexpr auto transform_error(_Fn&& _Func) & {\r\n        static_assert(invocable<_Fn, _Err&>, \"expected<T, E>::transform_error(F) requires that F is invocable with E. \"\r\n                                             \"(N4950 [expected.object.monadic]/27)\");\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn, _Err&>>;\r\n        static_assert(_Is_invoke_constructible<_Fn, _Err&>,\r\n            \"expected<T, E>::transform_error(F) requires that the return type of F is constructible with the result of \"\r\n            \"invoking f. (N4950 [expected.object.monadic]/27)\");\r\n\r\n        static_assert(_Check_unexpected_argument<_Uty>::value);\r\n\r\n        if (_Has_value) {\r\n            return expected<_Ty, _Uty>{in_place, _Value};\r\n        } else {\r\n            return expected<_Ty, _Uty>{\r\n                _Construct_expected_from_invoke_result_tag{}, unexpect, _STD forward<_Fn>(_Func), _Unexpected};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_copy_constructible_v<_Ty>\r\n    constexpr auto transform_error(_Fn&& _Func) const& {\r\n        static_assert(invocable<_Fn, const _Err&>,\r\n            \"expected<T, E>::transform_error(F) requires that F is invocable with E. \"\r\n            \"(N4950 [expected.object.monadic]/27)\");\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn, const _Err&>>;\r\n        static_assert(_Is_invoke_constructible<_Fn, const _Err&>,\r\n            \"expected<T, E>::transform_error(F) requires that the return type of F is constructible with the result of \"\r\n            \"invoking f. (N4950 [expected.object.monadic]/27)\");\r\n\r\n        static_assert(_Check_unexpected_argument<_Uty>::value);\r\n\r\n        if (_Has_value) {\r\n            return expected<_Ty, _Uty>{in_place, _Value};\r\n        } else {\r\n            return expected<_Ty, _Uty>{\r\n                _Construct_expected_from_invoke_result_tag{}, unexpect, _STD forward<_Fn>(_Func), _Unexpected};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_move_constructible_v<_Ty>\r\n    constexpr auto transform_error(_Fn&& _Func) && {\r\n        static_assert(invocable<_Fn, _Err>, \"expected<T, E>::transform_error(F) requires that F is invocable with E. \"\r\n                                            \"(N4950 [expected.object.monadic]/31)\");\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn, _Err>>;\r\n        static_assert(_Is_invoke_constructible<_Fn, _Err>,\r\n            \"expected<T, E>::transform_error(F) requires that the return type of F is constructible with the result of \"\r\n            \"invoking f. (N4950 [expected.object.monadic]/31)\");\r\n\r\n        static_assert(_Check_unexpected_argument<_Uty>::value);\r\n\r\n        if (_Has_value) {\r\n            return expected<_Ty, _Uty>{in_place, _STD move(_Value)};\r\n        } else {\r\n            return expected<_Ty, _Uty>{_Construct_expected_from_invoke_result_tag{}, unexpect, _STD forward<_Fn>(_Func),\r\n                _STD move(_Unexpected)};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_constructible_v<_Ty, const _Ty>\r\n    constexpr auto transform_error(_Fn&& _Func) const&& {\r\n        static_assert(invocable<_Fn, const _Err>,\r\n            \"expected<T, E>::transform_error(F) requires that F is invocable with E. \"\r\n            \"(N4950 [expected.object.monadic]/31)\");\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn, const _Err>>;\r\n        static_assert(_Is_invoke_constructible<_Fn, const _Err>,\r\n            \"expected<T, E>::transform_error(F) requires that the return type of F is constructible with the result of \"\r\n            \"invoking f. (N4950 [expected.object.monadic]/31)\");\r\n\r\n        static_assert(_Check_unexpected_argument<_Uty>::value);\r\n\r\n        if (_Has_value) {\r\n            return expected<_Ty, _Uty>{in_place, _STD move(_Value)};\r\n        } else {\r\n            return expected<_Ty, _Uty>{_Construct_expected_from_invoke_result_tag{}, unexpect, _STD forward<_Fn>(_Func),\r\n                _STD move(_Unexpected)};\r\n        }\r\n    }\r\n\r\n    // [expected.object.eq]\r\n    template <class _Uty, class _UErr>\r\n        requires (!is_void_v<_Uty>)\r\n    _NODISCARD friend constexpr bool operator==(const expected& _Left, const expected<_Uty, _UErr>& _Right)\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Value == *_Right))\r\n                 && noexcept(_STD _Fake_copy_init<bool>(_Left._Unexpected == _Right.error()))) /* strengthened */ {\r\n        if (_Left._Has_value != _Right.has_value()) {\r\n            return false;\r\n        } else if (_Left._Has_value) {\r\n            return _Left._Value == *_Right;\r\n        } else {\r\n            return _Left._Unexpected == _Right.error();\r\n        }\r\n    }\r\n\r\n    template <class _Uty>\r\n    _NODISCARD friend constexpr bool operator==(const expected& _Left, const _Uty& _Right)\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Value == _Right))) /* strengthened */ {\r\n        if (_Left._Has_value) {\r\n            return _Left._Value == _Right;\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    template <class _UErr>\r\n    _NODISCARD friend constexpr bool operator==(const expected& _Left, const unexpected<_UErr>& _Right)\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Unexpected == _Right.error()))) /* strengthened */ {\r\n        if (_Left._Has_value) {\r\n            return false;\r\n        } else {\r\n            return _Left._Unexpected == _Right.error();\r\n        }\r\n    }\r\n\r\nprivate:\r\n    // These overloads force copy elision from the invoke call into _Value\r\n    template <class _Fn, class _Ux>\r\n    constexpr expected(_Construct_expected_from_invoke_result_tag, _Fn&& _Func, _Ux&& _Arg)\r\n        noexcept(noexcept(static_cast<_Ty>(_STD invoke(_STD forward<_Fn>(_Func), _STD forward<_Ux>(_Arg)))))\r\n        : _Value(_STD invoke(_STD forward<_Fn>(_Func), _STD forward<_Ux>(_Arg))), _Has_value{true} {}\r\n\r\n    // For when transform is called on an expected<void, E> and requires calling _Func with no arg\r\n    template <class _Fn>\r\n    constexpr expected(_Construct_expected_from_invoke_result_tag, _Fn&& _Func)\r\n        noexcept(noexcept(static_cast<_Ty>(_STD forward<_Fn>(_Func)()))) // f() is equivalent to invoke(f)\r\n        : _Value(_STD forward<_Fn>(_Func)()), _Has_value{true} {} // f() is equivalent to invoke(f)\r\n\r\n    template <class _Fn, class _Ux>\r\n    constexpr expected(_Construct_expected_from_invoke_result_tag, unexpect_t, _Fn&& _Func, _Ux&& _Arg)\r\n        noexcept(noexcept(static_cast<_Err>(_STD invoke(_STD forward<_Fn>(_Func), _STD forward<_Ux>(_Arg)))))\r\n        : _Unexpected(_STD invoke(_STD forward<_Fn>(_Func), _STD forward<_Ux>(_Arg))), _Has_value{false} {}\r\n\r\n    [[noreturn]] void _Throw_bad_expected_access_lv() const {\r\n        _THROW(bad_expected_access{_Unexpected});\r\n    }\r\n    [[noreturn]] void _Throw_bad_expected_access_rv() const {\r\n        _THROW(bad_expected_access{_STD move(_Unexpected)});\r\n    }\r\n    [[noreturn]] void _Throw_bad_expected_access_rv() {\r\n        _THROW(bad_expected_access{_STD move(_Unexpected)});\r\n    }\r\n\r\n    union {\r\n        _Ty _Value;\r\n        _Err _Unexpected;\r\n    };\r\n    bool _Has_value;\r\n};\r\n\r\ntemplate <class _Err>\r\nconcept _Expected_unary_copy_assignable = is_copy_assignable_v<_Err> && is_copy_constructible_v<_Err>;\r\n\r\ntemplate <class _Err>\r\nconcept _Expected_unary_move_assignable = is_move_assignable_v<_Err> && is_move_constructible_v<_Err>;\r\n\r\ntemplate <class _Ty, class _Err>\r\n    requires is_void_v<_Ty>\r\nclass _NODISCARD expected<_Ty, _Err> {\r\nprivate:\r\n    static_assert(_Check_unexpected_argument<_Err>::value);\r\n\r\n    template <class _UTy, class _UErr>\r\n    friend class expected;\r\n\r\n    template <class _Uty, class _UErr>\r\n    static constexpr bool _Allow_unwrapping = !is_constructible_v<unexpected<_Err>, expected<_Uty, _UErr>&>\r\n                                           && !is_constructible_v<unexpected<_Err>, expected<_Uty, _UErr>>\r\n                                           && !is_constructible_v<unexpected<_Err>, const expected<_Uty, _UErr>&>\r\n                                           && !is_constructible_v<unexpected<_Err>, const expected<_Uty, _UErr>>;\r\n\r\npublic:\r\n    using value_type      = _Ty;\r\n    using error_type      = _Err;\r\n    using unexpected_type = unexpected<_Err>;\r\n\r\n    template <class _Uty>\r\n    using rebind = expected<_Uty, error_type>;\r\n\r\n    // [expected.void.cons]\r\n    constexpr expected() noexcept : _Has_value(true) {}\r\n\r\n    constexpr expected(const expected& _Other) noexcept(is_nothrow_copy_constructible_v<_Err>) // strengthened\r\n        requires (!is_trivially_copy_constructible_v<_Err> && is_copy_constructible_v<_Err>)\r\n        : _Has_value(_Other._Has_value) {\r\n        if (!_Has_value) {\r\n            _STD construct_at(_STD addressof(_Unexpected), _Other._Unexpected);\r\n        }\r\n    }\r\n\r\n    expected(const expected&)\r\n        requires is_trivially_copy_constructible_v<_Err>\r\n    = default;\r\n\r\n    expected(const expected&) = delete;\r\n\r\n    constexpr expected(expected&& _Other) noexcept(is_nothrow_move_constructible_v<_Err>)\r\n        requires (!is_trivially_move_constructible_v<_Err> && is_move_constructible_v<_Err>)\r\n        : _Has_value(_Other._Has_value) {\r\n        if (!_Has_value) {\r\n            _STD construct_at(_STD addressof(_Unexpected), _STD move(_Other._Unexpected));\r\n        }\r\n    }\r\n\r\n    expected(expected&&)\r\n        requires is_trivially_move_constructible_v<_Err>\r\n    = default;\r\n\r\n    template <class _Uty, class _UErr>\r\n        requires _Different_from<expected<_Uty, _UErr>, expected> && is_void_v<_Uty>\r\n              && is_constructible_v<_Err, const _UErr&> && _Allow_unwrapping<_Uty, _UErr>\r\n    constexpr explicit(!is_convertible_v<const _UErr&, _Err>) expected(const expected<_Uty, _UErr>& _Other)\r\n        noexcept(is_nothrow_constructible_v<_Err, const _UErr&>) // strengthened\r\n        : _Has_value(_Other._Has_value) {\r\n        if (!_Has_value) {\r\n            _STD construct_at(_STD addressof(_Unexpected), _Other._Unexpected);\r\n        }\r\n    }\r\n\r\n    template <class _Uty, class _UErr>\r\n        requires _Different_from<expected<_Uty, _UErr>, expected> && is_void_v<_Uty> && is_constructible_v<_Err, _UErr>\r\n              && _Allow_unwrapping<_Uty, _UErr>\r\n    constexpr explicit(!is_convertible_v<_UErr, _Err>) expected(expected<_Uty, _UErr>&& _Other)\r\n        noexcept(is_nothrow_constructible_v<_Err, _UErr>) // strengthened\r\n        : _Has_value(_Other._Has_value) {\r\n        if (!_Has_value) {\r\n            _STD construct_at(_STD addressof(_Unexpected), _STD move(_Other._Unexpected));\r\n        }\r\n    }\r\n\r\n    template <class _UErr>\r\n        requires is_constructible_v<_Err, const _UErr&>\r\n    constexpr explicit(!is_convertible_v<const _UErr&, _Err>) expected(const unexpected<_UErr>& _Other)\r\n        noexcept(is_nothrow_constructible_v<_Err, const _UErr&>) // strengthened\r\n        : _Unexpected(_Other._Unexpected), _Has_value(false) {}\r\n\r\n    template <class _UErr>\r\n        requires is_constructible_v<_Err, _UErr>\r\n    constexpr explicit(!is_convertible_v<_UErr, _Err>) expected(unexpected<_UErr>&& _Other)\r\n        noexcept(is_nothrow_constructible_v<_Err, _UErr>) // strengthened\r\n        : _Unexpected(_STD move(_Other._Unexpected)), _Has_value(false) {}\r\n\r\n    constexpr explicit expected(in_place_t) noexcept : _Has_value(true) {}\r\n\r\n    template <class... _Args>\r\n        requires is_constructible_v<_Err, _Args...>\r\n    constexpr explicit expected(unexpect_t, _Args&&... _Vals)\r\n        noexcept(is_nothrow_constructible_v<_Err, _Args...>) // strengthened\r\n        : _Unexpected(_STD forward<_Args>(_Vals)...), _Has_value(false) {}\r\n\r\n    template <class _Uty, class... _Args>\r\n        requires is_constructible_v<_Err, initializer_list<_Uty>&, _Args...>\r\n    constexpr explicit expected(unexpect_t, initializer_list<_Uty> _Ilist, _Args&&... _Vals)\r\n        noexcept(is_nothrow_constructible_v<_Err, initializer_list<_Uty>&, _Args...>) // strengthened\r\n        : _Unexpected(_Ilist, _STD forward<_Args>(_Vals)...), _Has_value(false) {}\r\n\r\n    // [expected.void.dtor]\r\n    constexpr ~expected()\r\n#ifndef __clang__ // TRANSITION, LLVM-59854\r\n        noexcept\r\n#endif // ^^^ no workaround ^^^\r\n    {\r\n        if (!_Has_value) {\r\n            _Unexpected.~_Err();\r\n        }\r\n    }\r\n\r\n    ~expected()\r\n        requires is_trivially_destructible_v<_Err>\r\n    = default;\r\n\r\n    // [expected.void.assign]\r\n    constexpr expected& operator=(const expected& _Other)\r\n        noexcept(is_nothrow_copy_constructible_v<_Err> && is_nothrow_copy_assignable_v<_Err>) // strengthened\r\n        requires _Expected_unary_copy_assignable<_Err>\r\n    {\r\n        if (_Has_value && _Other._Has_value) {\r\n            // nothing to do\r\n        } else if (_Has_value) {\r\n            _STD construct_at(_STD addressof(_Unexpected), _Other._Unexpected);\r\n            _Has_value = false;\r\n        } else if (_Other._Has_value) {\r\n            if constexpr (!is_trivially_destructible_v<_Err>) {\r\n                _Unexpected.~_Err();\r\n            }\r\n            _Has_value = true;\r\n        } else {\r\n            _Unexpected = _Other._Unexpected;\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    expected& operator=(const expected&)\r\n        requires _Expected_unary_copy_assignable<_Err> && _Trivially_copy_constructible_assignable_destructible<_Err>\r\n    = default;\r\n\r\n    expected& operator=(const expected&) = delete;\r\n\r\n    constexpr expected& operator=(expected&& _Other)\r\n        noexcept(is_nothrow_move_constructible_v<_Err> && is_nothrow_move_assignable_v<_Err>)\r\n        requires _Expected_unary_move_assignable<_Err>\r\n    {\r\n        if (_Has_value && _Other._Has_value) {\r\n            // nothing to do\r\n        } else if (_Has_value) {\r\n            _STD construct_at(_STD addressof(_Unexpected), _STD move(_Other._Unexpected));\r\n            _Has_value = false;\r\n        } else if (_Other._Has_value) {\r\n            if constexpr (!is_trivially_destructible_v<_Err>) {\r\n                _Unexpected.~_Err();\r\n            }\r\n            _Has_value = true;\r\n        } else {\r\n            _Unexpected = _STD move(_Other._Unexpected);\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    expected& operator=(expected&&)\r\n        requires _Expected_unary_move_assignable<_Err> && _Trivially_move_constructible_assignable_destructible<_Err>\r\n    = default;\r\n\r\n    template <class _UErr>\r\n        requires is_constructible_v<_Err, const _UErr&> && is_assignable_v<_Err&, const _UErr&>\r\n    constexpr expected& operator=(const unexpected<_UErr>& _Other)\r\n        noexcept(is_nothrow_constructible_v<_Err, const _UErr&>\r\n                 && is_nothrow_assignable_v<_Err&, const _UErr&>) /* strengthened */ {\r\n        if (_Has_value) {\r\n            _STD construct_at(_STD addressof(_Unexpected), _Other._Unexpected);\r\n            _Has_value = false;\r\n        } else {\r\n            _Unexpected = _Other._Unexpected;\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    template <class _UErr>\r\n        requires is_constructible_v<_Err, _UErr> && is_assignable_v<_Err&, _UErr>\r\n    constexpr expected& operator=(unexpected<_UErr>&& _Other)\r\n        noexcept(is_nothrow_constructible_v<_Err, _UErr> && is_nothrow_assignable_v<_Err&, _UErr>) /* strengthened */ {\r\n        if (_Has_value) {\r\n            _STD construct_at(_STD addressof(_Unexpected), _STD move(_Other._Unexpected));\r\n            _Has_value = false;\r\n        } else {\r\n            _Unexpected = _STD move(_Other._Unexpected);\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    constexpr void emplace() noexcept {\r\n        if (!_Has_value) {\r\n            if constexpr (!is_trivially_destructible_v<_Err>) {\r\n                _Unexpected.~_Err();\r\n            }\r\n            _Has_value = true;\r\n        }\r\n    }\r\n\r\n    // [expected.void.swap]\r\n    constexpr void swap(expected& _Other)\r\n        noexcept(is_nothrow_move_constructible_v<_Err> && is_nothrow_swappable_v<_Err>)\r\n        requires is_swappable_v<_Err> && is_move_constructible_v<_Err>\r\n    {\r\n        using _STD swap;\r\n        if (_Has_value && _Other._Has_value) {\r\n            // nothing\r\n        } else if (_Has_value) {\r\n            _STD construct_at(_STD addressof(_Unexpected), _STD move(_Other._Unexpected));\r\n            if constexpr (!is_trivially_destructible_v<_Err>) {\r\n                _Other._Unexpected.~_Err();\r\n            }\r\n            _Has_value        = false;\r\n            _Other._Has_value = true;\r\n        } else if (_Other._Has_value) {\r\n            _STD construct_at(_STD addressof(_Other._Unexpected), _STD move(_Unexpected));\r\n            if constexpr (!is_trivially_destructible_v<_Err>) {\r\n                _Unexpected.~_Err();\r\n            }\r\n            _Has_value        = true;\r\n            _Other._Has_value = false;\r\n        } else {\r\n            swap(_Unexpected, _Other._Unexpected); // intentional ADL\r\n        }\r\n    }\r\n\r\n    friend constexpr void swap(expected& _Left, expected& _Right)\r\n        noexcept(is_nothrow_move_constructible_v<_Err> && is_nothrow_swappable_v<_Err>)\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, /permissive\r\n        requires is_swappable_v<_Err>\r\n#else // ^^^ no workaround / workaround vvv\r\n        requires is_swappable<_Err>::value\r\n#endif // ^^^ workaround ^^^\r\n              && is_move_constructible_v<_Err>\r\n    {\r\n        _Left.swap(_Right);\r\n    }\r\n\r\n    // [expected.void.obs]\r\n    _NODISCARD constexpr explicit operator bool() const noexcept {\r\n        return _Has_value;\r\n    }\r\n    _NODISCARD constexpr bool has_value() const noexcept {\r\n        return _Has_value;\r\n    }\r\n\r\n    constexpr void operator*() const noexcept {\r\n#if _MSVC_STL_HARDENING_EXPECTED || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Has_value, \"operator*() called on a std::expected that contains an error, not a value\");\r\n#endif\r\n    }\r\n\r\n    constexpr void value() const& {\r\n        if (!_Has_value) {\r\n            _Throw_bad_expected_access_lv();\r\n        }\r\n    }\r\n    constexpr void value() && {\r\n        // TRANSITION, DevCom-1638273 and LLVM-53224\r\n        static_assert(is_copy_constructible_v<_Err>, \"is_copy_constructible_v<E> must be true\");\r\n        static_assert(is_move_constructible_v<_Err>, \"is_move_constructible_v<E> must be true\");\r\n\r\n        if (!_Has_value) {\r\n            _Throw_bad_expected_access_rv();\r\n        }\r\n    }\r\n\r\n    _NODISCARD constexpr const _Err& error() const& noexcept {\r\n#if _MSVC_STL_HARDENING_EXPECTED || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(!_Has_value, \"error() called on a std::expected that contains a value, not an error\");\r\n#endif\r\n\r\n        return _Unexpected;\r\n    }\r\n    _NODISCARD constexpr _Err& error() & noexcept {\r\n#if _MSVC_STL_HARDENING_EXPECTED || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(!_Has_value, \"error() called on a std::expected that contains a value, not an error\");\r\n#endif\r\n\r\n        return _Unexpected;\r\n    }\r\n    _NODISCARD constexpr const _Err&& error() const&& noexcept {\r\n#if _MSVC_STL_HARDENING_EXPECTED || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(!_Has_value, \"error() called on a std::expected that contains a value, not an error\");\r\n#endif\r\n\r\n        return _STD move(_Unexpected);\r\n    }\r\n    _NODISCARD constexpr _Err&& error() && noexcept {\r\n#if _MSVC_STL_HARDENING_EXPECTED || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(!_Has_value, \"error() called on a std::expected that contains a value, not an error\");\r\n#endif\r\n\r\n        return _STD move(_Unexpected);\r\n    }\r\n\r\n    template <class _Uty = _Err>\r\n    _NODISCARD constexpr _Err error_or(_Uty&& _Other) const& noexcept(\r\n        is_nothrow_copy_constructible_v<_Err> && is_nothrow_convertible_v<_Uty, _Err>) /* strengthened */ {\r\n        static_assert(\r\n            is_copy_constructible_v<_Err>, \"is_copy_constructible_v<E> must be true. (N4950 [expected.void.obs]/9)\");\r\n        static_assert(\r\n            is_convertible_v<_Uty, _Err>, \"is_convertible_v<G, E> must be true. (N4950 [expected.void.obs]/9)\");\r\n\r\n        if (_Has_value) {\r\n            return _STD forward<_Uty>(_Other);\r\n        } else {\r\n            return _Unexpected;\r\n        }\r\n    }\r\n\r\n    template <class _Uty = _Err>\r\n    _NODISCARD constexpr _Err error_or(_Uty&& _Other) && noexcept(\r\n        is_nothrow_move_constructible_v<_Err> && is_nothrow_convertible_v<_Uty, _Err>) /* strengthened */ {\r\n        static_assert(\r\n            is_move_constructible_v<_Err>, \"is_move_constructible_v<E> must be true. (N4950 [expected.void.obs]/11)\");\r\n        static_assert(\r\n            is_convertible_v<_Uty, _Err>, \"is_convertible_v<G, E> must be true. (N4950 [expected.void.obs]/11)\");\r\n\r\n        if (_Has_value) {\r\n            return _STD forward<_Uty>(_Other);\r\n        } else {\r\n            return _STD move(_Unexpected);\r\n        }\r\n    }\r\n\r\n    // [expected.void.monadic]\r\n    template <class _Fn>\r\n        requires is_constructible_v<_Err, _Err&>\r\n    constexpr auto and_then(_Fn&& _Func) & {\r\n        using _Uty = remove_cvref_t<invoke_result_t<_Fn>>;\r\n\r\n        static_assert(_Is_specialization_v<_Uty, expected>,\r\n            \"expected<void, E>::and_then(F) requires the return type of F to be a specialization of expected. \"\r\n            \"(N4950 [expected.void.monadic]/3)\");\r\n        static_assert(is_same_v<typename _Uty::error_type, _Err>,\r\n            \"expected<void, E>::and_then(F) requires the error type of the return type of F to be E. \"\r\n            \"(N4950 [expected.void.monadic]/3)\");\r\n\r\n        if (_Has_value) {\r\n            return _STD forward<_Fn>(_Func)(); // f() is equivalent to invoke(f)\r\n        } else {\r\n            return _Uty{unexpect, _Unexpected};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_copy_constructible_v<_Err>\r\n    constexpr auto and_then(_Fn&& _Func) const& {\r\n        using _Uty = remove_cvref_t<invoke_result_t<_Fn>>;\r\n\r\n        static_assert(_Is_specialization_v<_Uty, expected>,\r\n            \"expected<void, E>::and_then(F) requires the return type of F to be a specialization of expected. \"\r\n            \"(N4950 [expected.void.monadic]/3)\");\r\n        static_assert(is_same_v<typename _Uty::error_type, _Err>,\r\n            \"expected<void, E>::and_then(F) requires the error type of the return type of F to be E. \"\r\n            \"(N4950 [expected.void.monadic]/3)\");\r\n\r\n        if (_Has_value) {\r\n            return _STD forward<_Fn>(_Func)(); // f() is equivalent to invoke(f)\r\n        } else {\r\n            return _Uty{unexpect, _Unexpected};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_move_constructible_v<_Err>\r\n    constexpr auto and_then(_Fn&& _Func) && {\r\n        using _Uty = remove_cvref_t<invoke_result_t<_Fn>>;\r\n\r\n        static_assert(_Is_specialization_v<_Uty, expected>,\r\n            \"expected<void, E>::and_then(F) requires the return type of F to be a specialization of expected. \"\r\n            \"(N4950 [expected.void.monadic]/7)\");\r\n        static_assert(is_same_v<typename _Uty::error_type, _Err>,\r\n            \"expected<void, E>::and_then(F) requires the error type of the return type of F to be E. \"\r\n            \"(N4950 [expected.void.monadic]/7)\");\r\n\r\n        if (_Has_value) {\r\n            return _STD forward<_Fn>(_Func)(); // f() is equivalent to invoke(f)\r\n        } else {\r\n            return _Uty{unexpect, _STD move(_Unexpected)};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_constructible_v<_Err, const _Err>\r\n    constexpr auto and_then(_Fn&& _Func) const&& {\r\n        using _Uty = remove_cvref_t<invoke_result_t<_Fn>>;\r\n\r\n        static_assert(_Is_specialization_v<_Uty, expected>,\r\n            \"expected<void, E>::and_then(F) requires the return type of F to be a specialization of expected. \"\r\n            \"(N4950 [expected.void.monadic]/7)\");\r\n        static_assert(is_same_v<typename _Uty::error_type, _Err>,\r\n            \"expected<void, E>::and_then(F) requires the error type of the return type of F to be E. \"\r\n            \"(N4950 [expected.void.monadic]/7)\");\r\n\r\n        if (_Has_value) {\r\n            return _STD forward<_Fn>(_Func)(); // f() is equivalent to invoke(f)\r\n        } else {\r\n            return _Uty{unexpect, _STD move(_Unexpected)};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n    constexpr auto or_else(_Fn&& _Func) & {\r\n        using _Uty = remove_cvref_t<invoke_result_t<_Fn, _Err&>>;\r\n\r\n        static_assert(_Is_specialization_v<_Uty, expected>,\r\n            \"expected<void, E>::or_else(F) requires the return type of F to be a specialization of expected. \"\r\n            \"(N4950 [expected.void.monadic]/10)\");\r\n        static_assert(is_same_v<typename _Uty::value_type, _Ty>,\r\n            \"expected<void, E>::or_else(F) requires the value type of the return type of F to be T. \"\r\n            \"(N4950 [expected.void.monadic]/10)\");\r\n\r\n        if (_Has_value) {\r\n            return _Uty{};\r\n        } else {\r\n            return _STD invoke(_STD forward<_Fn>(_Func), _Unexpected);\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n    constexpr auto or_else(_Fn&& _Func) const& {\r\n        using _Uty = remove_cvref_t<invoke_result_t<_Fn, const _Err&>>;\r\n\r\n        static_assert(_Is_specialization_v<_Uty, expected>,\r\n            \"expected<void, E>::or_else(F) requires the return type of F to be a specialization of expected. \"\r\n            \"(N4950 [expected.void.monadic]/10)\");\r\n        static_assert(is_same_v<typename _Uty::value_type, _Ty>,\r\n            \"expected<void, E>::or_else(F) requires the value type of the return type of F to be T. \"\r\n            \"(N4950 [expected.void.monadic]/10)\");\r\n\r\n        if (_Has_value) {\r\n            return _Uty{};\r\n        } else {\r\n            return _STD invoke(_STD forward<_Fn>(_Func), _Unexpected);\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n    constexpr auto or_else(_Fn&& _Func) && {\r\n        using _Uty = remove_cvref_t<invoke_result_t<_Fn, _Err>>;\r\n\r\n        static_assert(_Is_specialization_v<_Uty, expected>,\r\n            \"expected<void, E>::or_else(F) requires the return type of F to be a specialization of expected. \"\r\n            \"(N4950 [expected.void.monadic]/13)\");\r\n        static_assert(is_same_v<typename _Uty::value_type, _Ty>,\r\n            \"expected<void, E>::or_else(F) requires the value type of the return type of F to be T. \"\r\n            \"(N4950 [expected.void.monadic]/13)\");\r\n\r\n        if (_Has_value) {\r\n            return _Uty{};\r\n        } else {\r\n            return _STD invoke(_STD forward<_Fn>(_Func), _STD move(_Unexpected));\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n    constexpr auto or_else(_Fn&& _Func) const&& {\r\n        using _Uty = remove_cvref_t<invoke_result_t<_Fn, const _Err>>;\r\n\r\n        static_assert(_Is_specialization_v<_Uty, expected>,\r\n            \"expected<void, E>::or_else(F) requires the return type of F to be a specialization of expected. \"\r\n            \"(N4950 [expected.void.monadic]/13)\");\r\n        static_assert(is_same_v<typename _Uty::value_type, _Ty>,\r\n            \"expected<void, E>::or_else(F) requires the value type of the return type of F to be T. \"\r\n            \"(N4950 [expected.void.monadic]/13)\");\r\n\r\n        if (_Has_value) {\r\n            return _Uty{};\r\n        } else {\r\n            return _STD invoke(_STD forward<_Fn>(_Func), _STD move(_Unexpected));\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_constructible_v<_Err, _Err&>\r\n    constexpr auto transform(_Fn&& _Func) & {\r\n        static_assert(invocable<_Fn>, \"expected<void, E>::transform(F) requires that F is invocable with no arguments. \"\r\n                                      \"(N4950 [expected.void.monadic]/17)\");\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn>>;\r\n\r\n        if constexpr (!is_void_v<_Uty>) {\r\n            static_assert(_Is_invoke_constructible<_Fn>, \"expected<void, E>::transform(F) requires that the return \"\r\n                                                         \"type of F is constructible with the result of \"\r\n                                                         \"invoking f. (N4950 [expected.void.monadic]/17)\");\r\n        }\r\n        static_assert(_Check_expected_argument<_Uty>::value);\r\n\r\n        if (_Has_value) {\r\n            if constexpr (is_void_v<_Uty>) {\r\n                _STD forward<_Fn>(_Func)(); // f() is equivalent to invoke(f)\r\n                return expected<_Uty, _Err>{};\r\n            } else {\r\n                return expected<_Uty, _Err>{_Construct_expected_from_invoke_result_tag{}, _STD forward<_Fn>(_Func)};\r\n            }\r\n        } else {\r\n            return expected<_Uty, _Err>{unexpect, _Unexpected};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_copy_constructible_v<_Err>\r\n    constexpr auto transform(_Fn&& _Func) const& {\r\n        static_assert(invocable<_Fn>, \"expected<void, E>::transform(F) requires that F is invocable with no arguments. \"\r\n                                      \"(N4950 [expected.void.monadic]/17)\");\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn>>;\r\n\r\n        if constexpr (!is_void_v<_Uty>) {\r\n            static_assert(_Is_invoke_constructible<_Fn>, \"expected<void, E>::transform(F) requires that the return \"\r\n                                                         \"type of F is constructible with the result of \"\r\n                                                         \"invoking f. (N4950 [expected.void.monadic]/17)\");\r\n        }\r\n        static_assert(_Check_expected_argument<_Uty>::value);\r\n\r\n        if (_Has_value) {\r\n            if constexpr (is_void_v<_Uty>) {\r\n                _STD forward<_Fn>(_Func)(); // f() is equivalent to invoke(f)\r\n                return expected<_Uty, _Err>{};\r\n            } else {\r\n                return expected<_Uty, _Err>{_Construct_expected_from_invoke_result_tag{}, _STD forward<_Fn>(_Func)};\r\n            }\r\n        } else {\r\n            return expected<_Uty, _Err>{unexpect, _Unexpected};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_move_constructible_v<_Err>\r\n    constexpr auto transform(_Fn&& _Func) && {\r\n        static_assert(invocable<_Fn>, \"expected<void, E>::transform(F) requires that F is invocable with no arguments. \"\r\n                                      \"(N4950 [expected.void.monadic]/21)\");\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn>>;\r\n\r\n        if constexpr (!is_void_v<_Uty>) {\r\n            static_assert(_Is_invoke_constructible<_Fn>, \"expected<void, E>::transform(F) requires that the return \"\r\n                                                         \"type of F is constructible with the result of \"\r\n                                                         \"invoking f. (N4950 [expected.void.monadic]/21)\");\r\n        }\r\n        static_assert(_Check_expected_argument<_Uty>::value);\r\n\r\n        if (_Has_value) {\r\n            if constexpr (is_void_v<_Uty>) {\r\n                _STD forward<_Fn>(_Func)(); // f() is equivalent to invoke(f)\r\n                return expected<_Uty, _Err>{};\r\n            } else {\r\n                return expected<_Uty, _Err>{_Construct_expected_from_invoke_result_tag{}, _STD forward<_Fn>(_Func)};\r\n            }\r\n        } else {\r\n            return expected<_Uty, _Err>{unexpect, _STD move(_Unexpected)};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_constructible_v<_Err, const _Err>\r\n    constexpr auto transform(_Fn&& _Func) const&& {\r\n        static_assert(invocable<_Fn>, \"expected<void, E>::transform(F) requires that F is invocable with no arguments. \"\r\n                                      \"(N4950 [expected.void.monadic]/21)\");\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn>>;\r\n\r\n        if constexpr (!is_void_v<_Uty>) {\r\n            static_assert(_Is_invoke_constructible<_Fn>, \"expected<void, E>::transform(F) requires that the return \"\r\n                                                         \"type of F is constructible with the result of \"\r\n                                                         \"invoking f. (N4950 [expected.void.monadic]/21)\");\r\n        }\r\n        static_assert(_Check_expected_argument<_Uty>::value);\r\n\r\n        if (_Has_value) {\r\n            if constexpr (is_void_v<_Uty>) {\r\n                _STD forward<_Fn>(_Func)(); // f() is equivalent to invoke(f)\r\n                return expected<_Uty, _Err>{};\r\n            } else {\r\n                return expected<_Uty, _Err>{_Construct_expected_from_invoke_result_tag{}, _STD forward<_Fn>(_Func)};\r\n            }\r\n        } else {\r\n            return expected<_Uty, _Err>{unexpect, _STD move(_Unexpected)};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n    constexpr auto transform_error(_Fn&& _Func) & {\r\n        static_assert(invocable<_Fn, _Err&>,\r\n            \"expected<void, E>::transform_error(F) requires that F is invocable with E. \"\r\n            \"(N4950 [expected.void.monadic]/24)\");\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn, _Err&>>;\r\n        static_assert(_Is_invoke_constructible<_Fn, _Err&>, \"expected<void, E>::transform_error(F) requires that the \"\r\n                                                            \"return type of F is constructible with the result of \"\r\n                                                            \"invoking f. (N4950 [expected.void.monadic]/24)\");\r\n\r\n        static_assert(_Check_unexpected_argument<_Uty>::value);\r\n\r\n        if (_Has_value) {\r\n            return expected<_Ty, _Uty>{};\r\n        } else {\r\n            return expected<_Ty, _Uty>{\r\n                _Construct_expected_from_invoke_result_tag{}, unexpect, _STD forward<_Fn>(_Func), _Unexpected};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n    constexpr auto transform_error(_Fn&& _Func) const& {\r\n        static_assert(invocable<_Fn, const _Err&>,\r\n            \"expected<void, E>::transform_error(F) requires that F is invocable with E. \"\r\n            \"(N4950 [expected.void.monadic]/24)\");\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn, const _Err&>>;\r\n        static_assert(_Is_invoke_constructible<_Fn, const _Err&>,\r\n            \"expected<void, E>::transform_error(F) requires that the \"\r\n            \"return type of F is constructible with the result of \"\r\n            \"invoking f. (N4950 [expected.void.monadic]/24)\");\r\n\r\n        static_assert(_Check_unexpected_argument<_Uty>::value);\r\n\r\n        if (_Has_value) {\r\n            return expected<_Ty, _Uty>{};\r\n        } else {\r\n            return expected<_Ty, _Uty>{\r\n                _Construct_expected_from_invoke_result_tag{}, unexpect, _STD forward<_Fn>(_Func), _Unexpected};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n    constexpr auto transform_error(_Fn&& _Func) && {\r\n        static_assert(invocable<_Fn, _Err>,\r\n            \"expected<void, E>::transform_error(F) requires that F is invocable with E. \"\r\n            \"(N4950 [expected.void.monadic]/27)\");\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn, _Err>>;\r\n        static_assert(_Is_invoke_constructible<_Fn, _Err>, \"expected<void, E>::transform_error(F) requires that the \"\r\n                                                           \"return type of F is constructible with the result of \"\r\n                                                           \"invoking f. (N4950 [expected.void.monadic]/27)\");\r\n\r\n        static_assert(_Check_unexpected_argument<_Uty>::value);\r\n\r\n        if (_Has_value) {\r\n            return expected<_Ty, _Uty>{};\r\n        } else {\r\n            return expected<_Ty, _Uty>{_Construct_expected_from_invoke_result_tag{}, unexpect, _STD forward<_Fn>(_Func),\r\n                _STD move(_Unexpected)};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n    constexpr auto transform_error(_Fn&& _Func) const&& {\r\n        static_assert(invocable<_Fn, const _Err>,\r\n            \"expected<void, E>::transform_error(F) requires that F is invocable with E. \"\r\n            \"(N4950 [expected.void.monadic]/27)\");\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn, const _Err>>;\r\n        static_assert(_Is_invoke_constructible<_Fn, const _Err>,\r\n            \"expected<void, E>::transform_error(F) requires that the \"\r\n            \"return type of F is constructible with the result of \"\r\n            \"invoking f. (N4950 [expected.void.monadic]/27)\");\r\n\r\n        static_assert(_Check_unexpected_argument<_Uty>::value);\r\n\r\n        if (_Has_value) {\r\n            return expected<_Ty, _Uty>{};\r\n        } else {\r\n            return expected<_Ty, _Uty>{_Construct_expected_from_invoke_result_tag{}, unexpect, _STD forward<_Fn>(_Func),\r\n                _STD move(_Unexpected)};\r\n        }\r\n    }\r\n\r\n    // [expected.void.eq]\r\n    template <class _Uty, class _UErr>\r\n        requires is_void_v<_Uty>\r\n    _NODISCARD friend constexpr bool operator==(const expected& _Left, const expected<_Uty, _UErr>& _Right)\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Unexpected == _Right.error()))) /* strengthened */ {\r\n        if (_Left._Has_value != _Right.has_value()) {\r\n            return false;\r\n        } else {\r\n            if (_Left._Has_value) {\r\n                return true;\r\n            } else {\r\n                return _Left._Unexpected == _Right.error();\r\n            }\r\n        }\r\n    }\r\n\r\n    template <class _UErr>\r\n    _NODISCARD friend constexpr bool operator==(const expected& _Left, const unexpected<_UErr>& _Right)\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Unexpected == _Right.error()))) /* strengthened */ {\r\n        if (_Left._Has_value) {\r\n            return false;\r\n        } else {\r\n            return _Left._Unexpected == _Right.error();\r\n        }\r\n    }\r\n\r\nprivate:\r\n    template <class _Fn, class _Ux>\r\n    constexpr expected(_Construct_expected_from_invoke_result_tag, unexpect_t, _Fn&& _Func, _Ux&& _Arg)\r\n        noexcept(noexcept(_Err(_STD invoke(_STD forward<_Fn>(_Func), _STD forward<_Ux>(_Arg)))))\r\n        : _Unexpected(_STD invoke(_STD forward<_Fn>(_Func), _STD forward<_Ux>(_Arg))), _Has_value{false} {}\r\n\r\n    [[noreturn]] void _Throw_bad_expected_access_lv() const {\r\n        _THROW(bad_expected_access{_Unexpected});\r\n    }\r\n    [[noreturn]] void _Throw_bad_expected_access_rv() {\r\n        _THROW(bad_expected_access{_STD move(_Unexpected)});\r\n    }\r\n\r\n    union {\r\n        _Err _Unexpected;\r\n    };\r\n    bool _Has_value;\r\n};\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _EXPECTED_\r\n"
  },
  {
    "path": "stl/inc/experimental/coroutine",
    "content": "// coroutine experimental header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Library support of coroutines TS, https://wg21.link/p0057\r\n\r\n#ifndef _EXPERIMENTAL_COROUTINE_\r\n#define _EXPERIMENTAL_COROUTINE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <cstdint>\r\n#include <memory>\r\n#include <new>\r\n#include <type_traits>\r\n\r\n#if _HAS_EXCEPTIONS\r\n#include <exception>\r\n#endif\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n#ifdef __clang__\r\n_EMIT_STL_ERROR(STL1009, \"The <experimental/coroutine>, <experimental/generator>, and <experimental/resumable> \"\r\n                         \"headers do not support Clang, but the C++20 <coroutine> and C++23 <generator> headers do.\");\r\n#elif defined(__cpp_impl_coroutine)\r\n_EMIT_STL_ERROR(STL1010, \"You're compiling with support for standard C++20 coroutines \"\r\n                         \"(also available with /await:strict in C++14/17), so you should include <coroutine> \"\r\n                         \"instead of <experimental/coroutine> and <experimental/resumable>.\");\r\n#elif !defined(_SILENCE_EXPERIMENTAL_COROUTINE_DEPRECATION_WARNINGS)\r\n_EMIT_STL_ERROR(STL1011, \"The /await compiler option, <experimental/coroutine>, <experimental/generator>, and \"\r\n                         \"<experimental/resumable> are deprecated by Microsoft and will be REMOVED SOON. \"\r\n                         \"They are superseded by the C++20 <coroutine> and C++23 <generator> headers. You can define \"\r\n                         \"_SILENCE_EXPERIMENTAL_COROUTINE_DEPRECATION_WARNINGS to suppress this error for now.\");\r\n#endif // _SILENCE_EXPERIMENTAL_COROUTINE_DEPRECATION_WARNINGS\r\n\r\n// intrinsics used in implementation of coroutine_handle\r\nextern \"C\" size_t _coro_resume(void*) noexcept;\r\nextern \"C\" void _coro_destroy(void*) noexcept;\r\nextern \"C\" size_t _coro_done(void*) noexcept;\r\n#pragma intrinsic(_coro_resume)\r\n#pragma intrinsic(_coro_destroy)\r\n#pragma intrinsic(_coro_done)\r\n\r\n#ifndef _ALLOW_COROUTINE_ABI_MISMATCH\r\n#pragma detect_mismatch(\"_COROUTINE_ABI\", \"1\")\r\n#endif // _ALLOW_COROUTINE_ABI_MISMATCH\r\n\r\n_STD_BEGIN\r\n\r\nnamespace experimental {\r\n\r\n    template <class _Ret, class = void>\r\n    struct _Coroutine_traits_sfinae {};\r\n\r\n    template <class _Ret>\r\n    struct _Coroutine_traits_sfinae<_Ret, void_t<typename _Ret::promise_type>> {\r\n        using promise_type = typename _Ret::promise_type;\r\n    };\r\n\r\n    template <class _Ret, class... _Ts>\r\n    struct coroutine_traits : _Coroutine_traits_sfinae<_Ret> {};\r\n\r\n    template <class _PromiseT = void>\r\n    struct coroutine_handle;\r\n\r\n    template <>\r\n    struct coroutine_handle<void> { // no promise access\r\n        coroutine_handle() noexcept {}\r\n\r\n        coroutine_handle(nullptr_t) noexcept {}\r\n\r\n        coroutine_handle& operator=(nullptr_t) noexcept {\r\n            _Ptr = nullptr;\r\n            return *this;\r\n        }\r\n\r\n        static coroutine_handle from_address(void* _Addr) noexcept {\r\n            coroutine_handle _Result;\r\n            _Result._Ptr = static_cast<_Resumable_frame_prefix*>(_Addr);\r\n            return _Result;\r\n        }\r\n\r\n        void* address() const noexcept {\r\n            return _Ptr;\r\n        }\r\n\r\n        [[deprecated(\"coroutine_handle::to_address() is deprecated. \"\r\n                     \"Use coroutine_handle::address() instead.\")]] void*\r\n            to_address() const noexcept {\r\n            return _Ptr;\r\n        }\r\n\r\n        void operator()() const {\r\n            resume();\r\n        }\r\n\r\n        explicit operator bool() const noexcept {\r\n            return _Ptr != nullptr;\r\n        }\r\n\r\n        void resume() const {\r\n            _coro_resume(_Ptr);\r\n        }\r\n\r\n        void destroy() {\r\n            _coro_destroy(_Ptr);\r\n        }\r\n\r\n        bool done() const {\r\n            // REVISIT: should return _coro_done() == 0; when intrinsic is\r\n            // hooked up\r\n            return _Ptr->_Index == 0;\r\n        }\r\n\r\n        struct _Resumable_frame_prefix {\r\n            using _Resume_fn = void(__cdecl*)(void*);\r\n\r\n            _Resume_fn _Fn;\r\n            uint16_t _Index;\r\n            uint16_t _Flags;\r\n        };\r\n\r\n    protected:\r\n        _Resumable_frame_prefix* _Ptr = nullptr;\r\n    };\r\n\r\n    template <class _PromiseT>\r\n    struct coroutine_handle : coroutine_handle<> { // general form\r\n        using coroutine_handle<>::coroutine_handle;\r\n\r\n        [[deprecated(\"coroutine_handle::from_promise(T*) with pointer parameter is deprecated. \"\r\n                     \"Use coroutine_handle::from_promise(T&) instead.\")]] static coroutine_handle\r\n            from_promise(_PromiseT* _Prom) noexcept {\r\n            return from_promise(*_Prom);\r\n        }\r\n\r\n        static coroutine_handle from_promise(_PromiseT& _Prom) noexcept {\r\n            auto _FramePtr = reinterpret_cast<char*>(_STD addressof(_Prom)) + _ALIGNED_SIZE;\r\n            coroutine_handle<_PromiseT> _Result;\r\n            _Result._Ptr = reinterpret_cast<_Resumable_frame_prefix*>(_FramePtr);\r\n            return _Result;\r\n        }\r\n\r\n        static coroutine_handle from_address(void* _Addr) noexcept {\r\n            coroutine_handle _Result;\r\n            _Result._Ptr = static_cast<_Resumable_frame_prefix*>(_Addr);\r\n            return _Result;\r\n        }\r\n\r\n        coroutine_handle& operator=(nullptr_t) noexcept {\r\n            _Ptr = nullptr;\r\n            return *this;\r\n        }\r\n\r\n        static const size_t _ALIGN_REQ = sizeof(void*) * 2;\r\n\r\n        static const size_t _ALIGNED_SIZE =\r\n            is_empty_v<_PromiseT> ? 0 : ((sizeof(_PromiseT) + _ALIGN_REQ - 1) & ~(_ALIGN_REQ - 1));\r\n\r\n        _PromiseT& promise() const noexcept {\r\n            return *const_cast<_PromiseT*>(\r\n                reinterpret_cast<const _PromiseT*>(reinterpret_cast<const char*>(_Ptr) - _ALIGNED_SIZE));\r\n        }\r\n    };\r\n\r\n    _NODISCARD inline bool operator==(coroutine_handle<> _Left, coroutine_handle<> _Right) noexcept {\r\n        return _Left.address() == _Right.address();\r\n    }\r\n\r\n    _NODISCARD inline bool operator<(coroutine_handle<> _Left, coroutine_handle<> _Right) noexcept {\r\n        return less<void*>()(_Left.address(), _Right.address());\r\n    }\r\n\r\n    _NODISCARD inline bool operator!=(coroutine_handle<> _Left, coroutine_handle<> _Right) noexcept {\r\n        return !(_Left == _Right);\r\n    }\r\n\r\n    _NODISCARD inline bool operator>(coroutine_handle<> _Left, coroutine_handle<> _Right) noexcept {\r\n        return _Right < _Left;\r\n    }\r\n\r\n    _NODISCARD inline bool operator<=(coroutine_handle<> _Left, coroutine_handle<> _Right) noexcept {\r\n        return !(_Left > _Right);\r\n    }\r\n\r\n    _NODISCARD inline bool operator>=(coroutine_handle<> _Left, coroutine_handle<> _Right) noexcept {\r\n        return !(_Left < _Right);\r\n    }\r\n\r\n    struct suspend_if {\r\n        bool _Ready;\r\n\r\n        explicit suspend_if(bool _Condition) noexcept : _Ready(!_Condition) {}\r\n\r\n        bool await_ready() noexcept {\r\n            return _Ready;\r\n        }\r\n\r\n        void await_suspend(coroutine_handle<>) noexcept {}\r\n\r\n        void await_resume() noexcept {}\r\n    };\r\n\r\n    struct suspend_always {\r\n        bool await_ready() noexcept {\r\n            return false;\r\n        }\r\n\r\n        void await_suspend(coroutine_handle<>) noexcept {}\r\n\r\n        void await_resume() noexcept {}\r\n    };\r\n\r\n    struct suspend_never {\r\n        bool await_ready() noexcept {\r\n            return true;\r\n        }\r\n\r\n        void await_suspend(coroutine_handle<>) noexcept {}\r\n\r\n        void await_resume() noexcept {}\r\n    };\r\n\r\n    // _Resumable_helper_traits class isolates front-end from public surface\r\n    // naming changes\r\n\r\n    template <class _Ret, class... _Ts>\r\n    struct _Resumable_helper_traits {\r\n        using _Traits      = coroutine_traits<_Ret, _Ts...>;\r\n        using _PromiseT    = typename _Traits::promise_type;\r\n        using _Handle_type = coroutine_handle<_PromiseT>;\r\n\r\n        static _PromiseT* _Promise_from_frame(void* _Addr) noexcept {\r\n            return reinterpret_cast<_PromiseT*>(reinterpret_cast<char*>(_Addr) - _Handle_type::_ALIGNED_SIZE);\r\n        }\r\n\r\n        static _Handle_type _Handle_from_frame(void* _Addr) noexcept {\r\n            return _Handle_type::from_promise(*_Promise_from_frame(_Addr));\r\n        }\r\n\r\n        static void _Set_exception(void* _Addr) {\r\n            _Promise_from_frame(_Addr)->set_exception(_STD current_exception());\r\n        }\r\n\r\n        static void _ConstructPromise(void* _Addr, void* _Resume_addr, int _HeapElision) {\r\n            *reinterpret_cast<void**>(_Addr) = _Resume_addr;\r\n            *reinterpret_cast<uint32_t*>(reinterpret_cast<uintptr_t>(_Addr) + sizeof(void*)) =\r\n                2u + (_HeapElision ? 0u : 0x10000u);\r\n            auto _Prom = _Promise_from_frame(_Addr);\r\n            ::new (static_cast<void*>(_Prom)) _PromiseT();\r\n        }\r\n\r\n        static void _DestructPromise(void* _Addr) {\r\n            _Promise_from_frame(_Addr)->~_PromiseT();\r\n        }\r\n    };\r\n} // namespace experimental\r\n\r\n_STD_END\r\n\r\n// resumable functions support intrinsics\r\n\r\nextern \"C\" size_t _coro_frame_size() noexcept;\r\nextern \"C\" void* _coro_frame_ptr() noexcept;\r\nextern \"C\" void _coro_init_block() noexcept;\r\nextern \"C\" void* _coro_resume_addr() noexcept;\r\nextern \"C\" void _coro_init_frame(void*) noexcept;\r\nextern \"C\" void _coro_save(size_t) noexcept;\r\nextern \"C\" void _coro_suspend(size_t) noexcept;\r\nextern \"C\" void _coro_cancel() noexcept;\r\nextern \"C\" void _coro_resume_block() noexcept;\r\n\r\n#pragma intrinsic(_coro_frame_size)\r\n#pragma intrinsic(_coro_frame_ptr)\r\n#pragma intrinsic(_coro_init_block)\r\n#pragma intrinsic(_coro_resume_addr)\r\n#pragma intrinsic(_coro_init_frame)\r\n#pragma intrinsic(_coro_save)\r\n#pragma intrinsic(_coro_suspend)\r\n#pragma intrinsic(_coro_cancel)\r\n#pragma intrinsic(_coro_resume_block)\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _EXPERIMENTAL_COROUTINE_\r\n"
  },
  {
    "path": "stl/inc/experimental/generator",
    "content": "// generator experimental header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _EXPERIMENTAL_GENERATOR_\r\n#define _EXPERIMENTAL_GENERATOR_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#ifdef _CPPUNWIND\r\n#include <exception>\r\n#endif\r\n\r\n#include <memory>\r\n\r\n#ifdef __clang__\r\n_EMIT_STL_ERROR(STL1009, \"The <experimental/coroutine>, <experimental/generator>, and <experimental/resumable> \"\r\n                         \"headers do not support Clang, but the C++20 <coroutine> and C++23 <generator> headers do.\");\r\n#elif !defined(_SILENCE_EXPERIMENTAL_COROUTINE_DEPRECATION_WARNINGS)\r\n_EMIT_STL_ERROR(STL1011, \"The /await compiler option, <experimental/coroutine>, <experimental/generator>, and \"\r\n                         \"<experimental/resumable> are deprecated by Microsoft and will be REMOVED SOON. \"\r\n                         \"They are superseded by the C++20 <coroutine> and C++23 <generator> headers. You can define \"\r\n                         \"_SILENCE_EXPERIMENTAL_COROUTINE_DEPRECATION_WARNINGS to suppress this error for now.\");\r\n#elif defined(__cpp_impl_coroutine)\r\n#include <coroutine>\r\n#elif defined(__cpp_coroutines)\r\n#include <experimental/resumable>\r\n#else // ^^^ legacy coroutines / no coroutine support vvv\r\n_EMIT_STL_ERROR(STL1012, \"You've included the <experimental/generator> header without compiler support for \"\r\n                         \"legacy coroutines (available with the deprecated /await compiler option) or \"\r\n                         \"standard C++20 coroutines (also available with /await:strict in C++14/17). \"\r\n                         \"You should include C++23 <generator> instead of <experimental/generator>.\");\r\n#endif // ^^^ no coroutine support ^^^\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\nnamespace experimental {\r\n    // NOTE WELL: _CPPUNWIND currently affects the ABI of generator.\r\n    template <class _Ty, class _Alloc = allocator<char>>\r\n    struct generator {\r\n        struct promise_type {\r\n            const _Ty* _Value;\r\n#ifdef _CPPUNWIND\r\n            exception_ptr _Exception;\r\n#endif // defined(_CPPUNWIND)\r\n\r\n            generator get_return_object() noexcept {\r\n                return generator{*this};\r\n            }\r\n\r\n            suspend_always initial_suspend() noexcept {\r\n                return {};\r\n            }\r\n\r\n            suspend_always final_suspend() noexcept {\r\n                return {};\r\n            }\r\n\r\n#ifndef _KERNEL_MODE\r\n#ifdef _CPPUNWIND\r\n            void unhandled_exception() noexcept {\r\n                _Exception = _STD current_exception();\r\n            }\r\n#else // ^^^ defined(_CPPUNWIND) / !defined(_CPPUNWIND) vvv\r\n            void unhandled_exception() noexcept {}\r\n#endif // ^^^ !defined(_CPPUNWIND) ^^^\r\n#endif // !defined(_KERNEL_MODE)\r\n\r\n#ifdef _CPPUNWIND\r\n            void _Rethrow_if_exception() {\r\n                if (_Exception) {\r\n                    _STD rethrow_exception(_Exception);\r\n                }\r\n            }\r\n#endif // defined(_CPPUNWIND)\r\n\r\n            suspend_always yield_value(const _Ty& _Val) noexcept {\r\n                _Value = _STD addressof(_Val);\r\n                return {};\r\n            }\r\n\r\n            void return_void() noexcept {}\r\n\r\n            template <class _Uty>\r\n            _Uty&& await_transform(_Uty&& _Whatever) {\r\n                static_assert(false, \"co_await is not supported in coroutines of type std::experimental::generator\");\r\n                return _STD forward<_Uty>(_Whatever);\r\n            }\r\n\r\n            using _Alloc_char = _Rebind_alloc_t<_Alloc, char>;\r\n            static_assert(is_same_v<char*, typename allocator_traits<_Alloc_char>::pointer>,\r\n                \"generator does not support allocators with fancy pointer types\");\r\n            static_assert(\r\n                allocator_traits<_Alloc_char>::is_always_equal::value && is_default_constructible_v<_Alloc_char>,\r\n                \"generator supports only stateless allocators\");\r\n\r\n            static void* operator new(size_t _Size) {\r\n                _Alloc_char _Al{};\r\n                return allocator_traits<_Alloc_char>::allocate(_Al, _Size);\r\n            }\r\n\r\n            static void operator delete(void* _Ptr, size_t _Size) noexcept {\r\n                _Alloc_char _Al{};\r\n                return allocator_traits<_Alloc_char>::deallocate(_Al, static_cast<char*>(_Ptr), _Size);\r\n            }\r\n        };\r\n\r\n        struct iterator {\r\n            using iterator_category = input_iterator_tag;\r\n            using difference_type   = ptrdiff_t;\r\n            using value_type        = _Ty;\r\n            using reference         = const _Ty&;\r\n            using pointer           = const _Ty*;\r\n\r\n            coroutine_handle<promise_type> _Coro = nullptr;\r\n\r\n            iterator() = default;\r\n            explicit iterator(coroutine_handle<promise_type> _Coro_) noexcept : _Coro(_Coro_) {}\r\n\r\n            iterator& operator++() {\r\n                _Coro.resume();\r\n                if (_Coro.done()) {\r\n#ifdef _CPPUNWIND\r\n                    _STD exchange(_Coro, nullptr).promise()._Rethrow_if_exception();\r\n#else // ^^^ defined(_CPPUNWIND) / !defined(_CPPUNWIND) vvv\r\n                    _Coro = nullptr;\r\n#endif // ^^^ !defined(_CPPUNWIND) ^^^\r\n                }\r\n\r\n                return *this;\r\n            }\r\n\r\n            void operator++(int) {\r\n                // This operator meets the requirements of the C++20 input_iterator concept,\r\n                // but not the Cpp17InputIterator requirements.\r\n                ++*this;\r\n            }\r\n\r\n            _NODISCARD bool operator==(const iterator& _Right) const noexcept {\r\n                return _Coro == _Right._Coro;\r\n            }\r\n\r\n            _NODISCARD bool operator!=(const iterator& _Right) const noexcept {\r\n                return !(*this == _Right);\r\n            }\r\n\r\n            _NODISCARD reference operator*() const noexcept {\r\n                return *_Coro.promise()._Value;\r\n            }\r\n\r\n            _NODISCARD pointer operator->() const noexcept {\r\n                return _Coro.promise()._Value;\r\n            }\r\n        };\r\n\r\n        _NODISCARD iterator begin() {\r\n            if (_Coro) {\r\n                _Coro.resume();\r\n                if (_Coro.done()) {\r\n#ifdef _CPPUNWIND\r\n                    _Coro.promise()._Rethrow_if_exception();\r\n#endif // ^^^ defined(_CPPUNWIND) ^^^\r\n                    return {};\r\n                }\r\n            }\r\n\r\n            return iterator{_Coro};\r\n        }\r\n\r\n        _NODISCARD iterator end() noexcept {\r\n            return {};\r\n        }\r\n\r\n        explicit generator(promise_type& _Prom) noexcept : _Coro(coroutine_handle<promise_type>::from_promise(_Prom)) {}\r\n\r\n        generator() = default;\r\n\r\n        generator(generator&& _Right) noexcept : _Coro(_STD exchange(_Right._Coro, nullptr)) {}\r\n\r\n        generator& operator=(generator&& _Right) noexcept {\r\n            _Coro = _STD exchange(_Right._Coro, nullptr);\r\n            return *this;\r\n        }\r\n\r\n        ~generator() {\r\n            if (_Coro) {\r\n                _Coro.destroy();\r\n            }\r\n        }\r\n\r\n    private:\r\n        coroutine_handle<promise_type> _Coro = nullptr;\r\n    };\r\n} // namespace experimental\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _EXPERIMENTAL_GENERATOR_\r\n"
  },
  {
    "path": "stl/inc/experimental/resumable",
    "content": "// resumable experimental header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Library support of coroutines TS, https://wg21.link/p0057\r\n\r\n#ifndef _EXPERIMENTAL_RESUMABLE_\r\n#define _EXPERIMENTAL_RESUMABLE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <cstdint>\r\n#include <experimental/coroutine>\r\n#include <memory>\r\n#include <new>\r\n#include <type_traits>\r\n\r\n#if _HAS_EXCEPTIONS\r\n#include <exception>\r\n#endif\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\nnamespace experimental {\r\n\r\n#ifndef __EDG__\r\n    struct noop_coroutine_promise {};\r\n\r\n    template <>\r\n    struct coroutine_handle<noop_coroutine_promise> : coroutine_handle<> {\r\n        friend coroutine_handle noop_coroutine() noexcept;\r\n        constexpr explicit operator bool() const noexcept {\r\n            return true;\r\n        }\r\n        _NODISCARD constexpr bool done() const noexcept {\r\n            return false;\r\n        }\r\n        constexpr void operator()() const noexcept {}\r\n        constexpr void resume() const noexcept {}\r\n        constexpr void destroy() const noexcept {}\r\n\r\n        using _Promise = noop_coroutine_promise;\r\n\r\n        static const size_t _ALIGN_REQ = sizeof(void*) * 2;\r\n\r\n        static const size_t _ALIGNED_SIZE =\r\n            is_empty_v<_Promise> ? 0 : ((sizeof(_Promise) + _ALIGN_REQ - 1) & ~(_ALIGN_REQ - 1));\r\n\r\n        _NODISCARD _Promise& promise() const noexcept {\r\n            // Returns a reference to the associated promise.\r\n            return *const_cast<_Promise*>(\r\n                reinterpret_cast<const _Promise*>(reinterpret_cast<const char*>(_Ptr) - _ALIGNED_SIZE));\r\n        }\r\n\r\n    private:\r\n        coroutine_handle() noexcept {\r\n            _Ptr = reinterpret_cast<_Resumable_frame_prefix*>(__builtin_coro_noop());\r\n        }\r\n    };\r\n\r\n    using noop_coroutine_handle = coroutine_handle<noop_coroutine_promise>;\r\n\r\n    _NODISCARD inline noop_coroutine_handle noop_coroutine() noexcept {\r\n        // Returns a handle to a coroutine that has no observable effects when resumed or destroyed.\r\n        return noop_coroutine_handle{};\r\n    }\r\n#endif // ^^^ !defined(__EDG__) ^^^\r\n} // namespace experimental\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _EXPERIMENTAL_RESUMABLE_\r\n"
  },
  {
    "path": "stl/inc/filesystem",
    "content": "// filesystem standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _FILESYSTEM_\r\n#define _FILESYSTEM_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX17\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <filesystem> are available only with C++17 or later.\");\r\n#else // ^^^ !_HAS_CXX17 / _HAS_CXX17 vvv\r\n#include <algorithm>\r\n#include <chrono>\r\n#include <cwchar>\r\n#include <iomanip>\r\n#include <locale>\r\n#include <memory>\r\n#include <system_error>\r\n#include <utility>\r\n#include <vector>\r\n#include <xfilesystem_abi.h>\r\n#include <xstring>\r\n\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#endif // _HAS_CXX20\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\nnamespace filesystem {\r\n    _NODISCARD inline wstring _Convert_narrow_to_wide(const __std_code_page _Code_page, const string_view _Input) {\r\n        wstring _Output;\r\n\r\n        if (!_Input.empty()) {\r\n            if (!_STD _In_range<int>(_Input.size())) {\r\n                _Throw_system_error(errc::invalid_argument);\r\n            }\r\n\r\n            const int _Len = _Check_convert_result(__std_fs_convert_narrow_to_wide(\r\n                _Code_page, _Input.data(), static_cast<int>(_Input.size()), nullptr, 0));\r\n\r\n            _Output.resize(static_cast<size_t>(_Len));\r\n\r\n            (void) _Check_convert_result(__std_fs_convert_narrow_to_wide(\r\n                _Code_page, _Input.data(), static_cast<int>(_Input.size()), _Output.data(), _Len));\r\n        }\r\n\r\n        return _Output;\r\n    }\r\n\r\n    // More lenient version of _Convert_wide_to_narrow: Instead of failing on non-representable characters,\r\n    // replace them with a replacement character.\r\n    template <class _Traits, class _Alloc>\r\n    _NODISCARD basic_string<typename _Traits::char_type, _Traits, _Alloc> _Convert_wide_to_narrow_replace_chars(\r\n        const __std_code_page _Code_page, const wstring_view _Input, const _Alloc& _Al) {\r\n        basic_string<typename _Traits::char_type, _Traits, _Alloc> _Output(_Al);\r\n\r\n        if (!_Input.empty()) {\r\n            if (!_STD _In_range<int>(_Input.size())) {\r\n                _Throw_system_error(errc::invalid_argument);\r\n            }\r\n\r\n            const int _Len = _Check_convert_result(__std_fs_convert_wide_to_narrow_replace_chars(\r\n                _Code_page, _Input.data(), static_cast<int>(_Input.size()), nullptr, 0));\r\n\r\n            _Output.resize(static_cast<size_t>(_Len));\r\n\r\n            const auto _Data_as_char = reinterpret_cast<char*>(_Output.data());\r\n\r\n            (void) _Check_convert_result(__std_fs_convert_wide_to_narrow_replace_chars(\r\n                _Code_page, _Input.data(), static_cast<int>(_Input.size()), _Data_as_char, _Len));\r\n        }\r\n\r\n        return _Output;\r\n    }\r\n\r\n    _NODISCARD inline wstring _Convert_utf32_to_wide(const u32string_view _Input) {\r\n        wstring _Output;\r\n\r\n        _Output.reserve(_Input.size()); // ideal when surrogate pairs are uncommon\r\n\r\n        for (const auto& _Code_point : _Input) {\r\n            if (_Code_point <= 0xD7FFU) {\r\n                _Output.push_back(static_cast<wchar_t>(_Code_point));\r\n            } else if (_Code_point <= 0xDFFFU) {\r\n                _Throw_system_error(errc::invalid_argument);\r\n            } else if (_Code_point <= 0xFFFFU) {\r\n                _Output.push_back(static_cast<wchar_t>(_Code_point));\r\n            } else if (_Code_point <= 0x10FFFFU) {\r\n                _Output.push_back(static_cast<wchar_t>(0xD7C0U + (_Code_point >> 10)));\r\n                _Output.push_back(static_cast<wchar_t>(0xDC00U + (_Code_point & 0x3FFU)));\r\n            } else {\r\n                _Throw_system_error(errc::invalid_argument);\r\n            }\r\n        }\r\n\r\n        return _Output;\r\n    }\r\n\r\n    template <class _Traits, class _Alloc>\r\n    _NODISCARD basic_string<char32_t, _Traits, _Alloc> _Convert_wide_to_utf32(\r\n        const wstring_view _Input, const _Alloc& _Al) {\r\n        basic_string<char32_t, _Traits, _Alloc> _Output(_Al);\r\n\r\n        _Output.reserve(_Input.size()); // ideal when surrogate pairs are uncommon\r\n\r\n        const wchar_t* _First      = _Input.data();\r\n        const wchar_t* const _Last = _First + _Input.size();\r\n\r\n        for (; _First != _Last; ++_First) {\r\n            if (*_First <= 0xD7FFU) {\r\n                _Output.push_back(*_First);\r\n            } else if (*_First <= 0xDBFFU) { // found leading surrogate\r\n                const char32_t _Leading = *_First; // widen for later math\r\n\r\n                ++_First;\r\n\r\n                if (_First == _Last) { // missing trailing surrogate\r\n                    _Throw_system_error(errc::invalid_argument);\r\n                }\r\n\r\n                const char32_t _Trailing = *_First; // widen for later math\r\n\r\n                if (0xDC00U <= _Trailing && _Trailing <= 0xDFFFU) { // valid trailing surrogate\r\n                    _Output.push_back(0xFCA02400U + (_Leading << 10) + _Trailing);\r\n                } else { // invalid trailing surrogate\r\n                    _Throw_system_error(errc::invalid_argument);\r\n                }\r\n            } else if (*_First <= 0xDFFFU) { // found trailing surrogate by itself, invalid\r\n                _Throw_system_error(errc::invalid_argument);\r\n            } else {\r\n                _Output.push_back(*_First);\r\n            }\r\n        }\r\n\r\n        return _Output;\r\n    }\r\n\r\n    template <class _Traits, class _Alloc, class _EcharT = typename _Traits::char_type>\r\n    _NODISCARD basic_string<_EcharT, _Traits, _Alloc> _Convert_wide_to(const wstring_view _Input, const _Alloc& _Al) {\r\n        if constexpr (is_same_v<_EcharT, char>) {\r\n            return _Convert_wide_to_narrow<_Traits>(__std_fs_code_page(), _Input, _Al);\r\n        }\r\n#ifdef __cpp_char8_t\r\n        else if constexpr (is_same_v<_EcharT, char8_t>) {\r\n            return _Convert_wide_to_narrow<_Traits>(__std_code_page::_Utf8, _Input, _Al);\r\n        }\r\n#endif // defined(__cpp_char8_t)\r\n        else if constexpr (is_same_v<_EcharT, char32_t>) {\r\n            return _Convert_wide_to_utf32<_Traits>(_Input, _Al);\r\n        } else { // wchar_t, char16_t\r\n            return basic_string<_EcharT, _Traits, _Alloc>(_Input.data(), _Input.data() + _Input.size(), _Al);\r\n        }\r\n    }\r\n\r\n    template <class _Ty, class = void>\r\n    constexpr bool _Is_Source_impl = false;\r\n\r\n    template <class _Ty>\r\n    constexpr bool _Is_Source_impl<_Ty, void_t<typename iterator_traits<_Ty>::value_type>> =\r\n        _Is_EcharT<typename iterator_traits<_Ty>::value_type>;\r\n\r\n    template <class _Ty>\r\n    constexpr bool _Is_Source = _Is_Source_impl<decay_t<_Ty>>;\r\n\r\n    _EXPORT_STD class path;\r\n\r\n    template <>\r\n    inline constexpr bool _Is_Source<path> = false; // to avoid constraint recursion via the converting constructor and\r\n                                                    // iterator_traits when determining if path is copyable.\r\n\r\n    template <class _Elem, class _Traits, class _Alloc>\r\n    constexpr bool _Is_Source<basic_string<_Elem, _Traits, _Alloc>> = _Is_EcharT<_Elem>;\r\n\r\n    template <class _Elem, class _Traits>\r\n    constexpr bool _Is_Source<basic_string_view<_Elem, _Traits>> = _Is_EcharT<_Elem>;\r\n\r\n    struct _Normal_conversion {};\r\n\r\n    struct _Utf8_conversion {};\r\n\r\n    // A \"stringoid\" is basic_string_view<_EcharT> or basic_string<_EcharT>.\r\n\r\n    template <class _Conversion>\r\n    _NODISCARD wstring _Convert_stringoid_to_wide(const string_view _Input, _Conversion) {\r\n        _STL_INTERNAL_STATIC_ASSERT(_Is_any_of_v<_Conversion, _Normal_conversion, _Utf8_conversion>);\r\n\r\n        if constexpr (is_same_v<_Conversion, _Normal_conversion>) {\r\n            return _Convert_narrow_to_wide(__std_fs_code_page(), _Input);\r\n        } else {\r\n            return _Convert_narrow_to_wide(__std_code_page::_Utf8, _Input);\r\n        }\r\n    }\r\n\r\n    template <class _Conversion>\r\n    _NODISCARD wstring _Convert_stringoid_to_wide(const wstring_view _Input, _Conversion) {\r\n        static_assert(\r\n            is_same_v<_Conversion, _Normal_conversion>, \"invalid value_type, see N4950 [depr.fs.path.factory]/1\");\r\n        return wstring{_Input};\r\n    }\r\n\r\n#ifdef __cpp_char8_t\r\n    template <class _Conversion>\r\n    _NODISCARD wstring _Convert_stringoid_to_wide(const basic_string_view<char8_t> _Input, _Conversion) {\r\n        _STL_INTERNAL_STATIC_ASSERT(_Is_any_of_v<_Conversion, _Normal_conversion, _Utf8_conversion>);\r\n\r\n        const string_view _Input_as_char{reinterpret_cast<const char*>(_Input.data()), _Input.size()};\r\n        return _Convert_narrow_to_wide(__std_code_page::_Utf8, _Input_as_char);\r\n    }\r\n#endif // defined(__cpp_char8_t)\r\n\r\n    template <class _Conversion>\r\n    _NODISCARD wstring _Convert_stringoid_to_wide(const u16string_view _Input, _Conversion) {\r\n        static_assert(\r\n            is_same_v<_Conversion, _Normal_conversion>, \"invalid value_type, see N4950 [depr.fs.path.factory]/1\");\r\n        return wstring{_Input.data(), _Input.data() + _Input.size()};\r\n    }\r\n\r\n    template <class _Conversion>\r\n    _NODISCARD wstring _Convert_stringoid_to_wide(const u32string_view _Input, _Conversion) {\r\n        static_assert(\r\n            is_same_v<_Conversion, _Normal_conversion>, \"invalid value_type, see N4950 [depr.fs.path.factory]/1\");\r\n        return _Convert_utf32_to_wide(_Input);\r\n    }\r\n\r\n    template <class _EcharT, class _Traits>\r\n    _NODISCARD auto _Stringoid_from_Source(const basic_string_view<_EcharT, _Traits>& _Source) {\r\n        return basic_string_view<_EcharT>(_Source.data(), _Source.size()); // erase mismatching _Traits\r\n    }\r\n\r\n    template <class _EcharT, class _Traits, class _Alloc>\r\n    _NODISCARD auto _Stringoid_from_Source(const basic_string<_EcharT, _Traits, _Alloc>& _Source) {\r\n        return basic_string_view<_EcharT>(_Source.data(), _Source.size()); // erase mismatching _Traits\r\n    }\r\n\r\n    template <class _Src>\r\n    _NODISCARD auto _Stringoid_from_Source(const _Src& _Source) {\r\n        using _EcharT = _Iter_value_t<decay_t<_Src>>;\r\n        if constexpr (is_pointer_v<_Unwrapped_unverified_t<const _Src&>>) {\r\n            return basic_string_view<_EcharT>(_Get_unwrapped_unverified(_Source));\r\n        } else if constexpr (is_pointer_v<_Unwrapped_t<const _Src&>>) {\r\n            const auto _Data = _Get_unwrapped(_Source);\r\n            auto _Next       = _Source;\r\n            while (*_Next != _EcharT{}) {\r\n                ++_Next;\r\n            }\r\n\r\n            return basic_string_view<_EcharT>(_Data, static_cast<size_t>(_Get_unwrapped(_Next) - _Data));\r\n        } else {\r\n            basic_string<_EcharT> _Str;\r\n            for (auto _Next = _Source; *_Next != _EcharT{}; ++_Next) {\r\n                _Str.push_back(*_Next);\r\n            }\r\n\r\n            return _Str;\r\n        }\r\n    }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    template <class _EcharT, size_t _SourceSize>\r\n    _NODISCARD basic_string_view<_EcharT> _Stringoid_from_Source(const _EcharT (&_Src)[_SourceSize]) {\r\n        for (size_t _Idx = 0;; ++_Idx) {\r\n            _STL_VERIFY(_Idx < _SourceSize, \"path input not null terminated\");\r\n            if (_Src[_Idx] == _EcharT{}) {\r\n                return basic_string_view<_EcharT>(_Src, _Idx);\r\n            }\r\n        }\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n    template <class _Src, class _Conversion = _Normal_conversion>\r\n    _NODISCARD wstring _Convert_Source_to_wide(const _Src& _Source, _Conversion _Tag = {}) {\r\n        return _Convert_stringoid_to_wide(_Stringoid_from_Source(_Source), _Tag);\r\n    }\r\n\r\n    template <class _InIt>\r\n    _NODISCARD auto _Stringoid_from_range(_InIt _First, _InIt _Last) {\r\n        _Adl_verify_range(_First, _Last);\r\n        const auto _UFirst = _Get_unwrapped(_First);\r\n        const auto _ULast  = _Get_unwrapped(_Last);\r\n\r\n        if constexpr (is_pointer_v<decltype(_UFirst)>) {\r\n            return basic_string_view<_Iter_value_t<_InIt>>(_UFirst, static_cast<size_t>(_ULast - _UFirst));\r\n        } else {\r\n            return basic_string<_Iter_value_t<_InIt>>(_UFirst, _ULast);\r\n        }\r\n    }\r\n\r\n    template <class _InIt, class _Conversion = _Normal_conversion>\r\n    _NODISCARD wstring _Convert_range_to_wide(_InIt _First, _InIt _Last, _Conversion _Tag = {}) {\r\n        return _Convert_stringoid_to_wide(_Stringoid_from_range(_First, _Last), _Tag);\r\n    }\r\n\r\n    _NODISCARD inline wstring _Convert_stringoid_with_locale_to_wide(const string_view _Input, const locale& _Loc) {\r\n        const auto& _Facet = _STD use_facet<codecvt<wchar_t, char, mbstate_t>>(_Loc);\r\n\r\n        wstring _Output(_Input.size(), L'\\0'); // almost always sufficient\r\n\r\n        for (;;) {\r\n            mbstate_t _State{};\r\n            const char* const _From_begin = _Input.data();\r\n            const char* const _From_end   = _From_begin + _Input.size();\r\n            const char* _From_next        = nullptr;\r\n            wchar_t* const _To_begin      = _Output.data();\r\n            wchar_t* const _To_end        = _To_begin + _Output.size();\r\n            wchar_t* _To_next             = nullptr;\r\n\r\n            const auto _Result = _Facet.in(_State, _From_begin, _From_end, _From_next, _To_begin, _To_end, _To_next);\r\n\r\n            if (_From_next < _From_begin || _From_next > _From_end || _To_next < _To_begin || _To_next > _To_end) {\r\n                _Throw_system_error(errc::invalid_argument);\r\n            }\r\n\r\n            switch (_Result) {\r\n            case codecvt_base::ok:\r\n                _Output.resize(static_cast<size_t>(_To_next - _To_begin));\r\n                return _Output;\r\n\r\n            case codecvt_base::partial:\r\n                // N4950 [locale.codecvt.virtuals]/5:\r\n                // \"A return value of partial, if (from_next == from_end), indicates that either the\r\n                // destination sequence has not absorbed all the available destination elements,\r\n                // or that additional source elements are needed before another destination element can be produced.\"\r\n                if ((_From_next == _From_end && _To_next != _To_end) || _Output.size() > _Output.max_size() / 2) {\r\n                    _Throw_system_error(errc::invalid_argument);\r\n                }\r\n\r\n                _Output.resize(_Output.size() * 2);\r\n                break; // out of switch, keep looping\r\n\r\n            case codecvt_base::error:\r\n            case codecvt_base::noconv:\r\n            default:\r\n                _Throw_system_error(errc::invalid_argument);\r\n            }\r\n        }\r\n    }\r\n\r\n    struct _Is_slash_oper { // predicate testing if input is a preferred-separator or fallback-separator\r\n        _NODISCARD static constexpr bool operator()(const wchar_t _Ch) {\r\n            return _Ch == L'\\\\' || _Ch == L'/';\r\n        }\r\n    };\r\n\r\n    inline constexpr _Is_slash_oper _Is_slash{};\r\n\r\n    _NODISCARD inline bool _Is_drive_prefix(const wchar_t* const _First) {\r\n        // test if _First points to a prefix of the form X:\r\n        // pre: _First points to at least 2 wchar_t instances\r\n        // pre: Little endian\r\n        unsigned int _Value;\r\n        _CSTD memcpy(&_Value, _First, sizeof(_Value)); // load from possibly unaligned address\r\n        _Value &= 0xFFFF'FFDFu; // transform lowercase drive letters into uppercase ones\r\n        _Value -= (static_cast<unsigned int>(L':') << (sizeof(wchar_t) * CHAR_BIT)) | L'A';\r\n        return _Value < 26;\r\n    }\r\n\r\n    _NODISCARD inline bool _Has_drive_letter_prefix(const wchar_t* const _First, const wchar_t* const _Last) {\r\n        // test if [_First, _Last) has a prefix of the form X:\r\n        return _Last - _First >= 2 && _Is_drive_prefix(_First);\r\n    }\r\n\r\n    _NODISCARD inline const wchar_t* _Find_root_name_end(const wchar_t* const _First, const wchar_t* const _Last) {\r\n        // attempt to parse [_First, _Last) as a path and return the end of root-name if it exists; otherwise, _First\r\n\r\n        // This is the place in the generic grammar where library implementations have the most freedom.\r\n        // Below are example Windows paths, and what we've decided to do with them:\r\n        // * X:DriveRelative, X:\\DosAbsolute\r\n        //   We parse X: as root-name, if and only if \\ is present we consider that root-directory\r\n        // * \\RootRelative\r\n        //   We parse no root-name, and \\ as root-directory\r\n        // * \\\\server\\share\r\n        //   We parse \\\\server as root-name, \\ as root-directory, and share as the first element in relative-path.\r\n        //   Technically, Windows considers all of \\\\server\\share the logical \"root\", but for purposes\r\n        //   of decomposition we want those split, so that path{R\"(\\\\server\\share)\"}.replace_filename(\"other_share\")\r\n        //   is \\\\server\\other_share\r\n        // * \\\\?\\device\r\n        // * \\??\\device\r\n        // * \\\\.\\device\r\n        //   CreateFile appears to treat these as the same thing; we will set the first three characters as root-name\r\n        //   and the first \\ as root-directory. Support for these prefixes varies by particular Windows version, but\r\n        //   for the purposes of path decomposition we don't need to worry about that.\r\n        // * \\\\?\\UNC\\server\\share\r\n        //   MSDN explicitly documents the \\\\?\\UNC syntax as a special case. What actually happens is that the device\r\n        //   Mup, or \"Multiple UNC provider\", owns the path \\\\?\\UNC in the NT namespace, and is responsible for the\r\n        //   network file access. When the user says \\\\server\\share, CreateFile translates that into\r\n        //   \\\\?\\UNC\\server\\share to get the remote server access behavior. Because NT treats this like any other\r\n        //   device, we have chosen to treat this as the \\\\?\\ case above.\r\n        if (_Last - _First < 2) {\r\n            return _First;\r\n        }\r\n\r\n        if (_Has_drive_letter_prefix(_First, _Last)) { // check for X: first because it's the most common root-name\r\n            return _First + 2;\r\n        }\r\n\r\n        if (!_Is_slash(_First[0])) { // all the other root-names start with a slash; check that first because\r\n                                     // we expect paths without a leading slash to be very common\r\n            return _First;\r\n        }\r\n\r\n        // $ means anything other than a slash, including potentially the end of the input\r\n        if (_Last - _First >= 4 && _Is_slash(_First[3]) && (_Last - _First == 4 || !_Is_slash(_First[4])) // \\xx\\$\r\n            && ((_Is_slash(_First[1]) && (_First[2] == L'?' || _First[2] == L'.')) // \\\\?\\$ or \\\\.\\$\r\n                || (_First[1] == L'?' && _First[2] == L'?'))) { // \\??\\$\r\n            return _First + 3;\r\n        }\r\n\r\n        if (_Last - _First >= 3 && _Is_slash(_First[1]) && !_Is_slash(_First[2])) { // \\\\server\r\n            return _STD find_if(_First + 3, _Last, _Is_slash);\r\n        }\r\n\r\n        // no match\r\n        return _First;\r\n    }\r\n\r\n    _NODISCARD inline wstring_view _Parse_root_name(const wstring_view _Str) {\r\n        // attempt to parse _Str as a path and return the root-name if it exists; otherwise, an empty view\r\n        const auto _First = _Str.data();\r\n        const auto _Last  = _First + _Str.size();\r\n        return wstring_view(_First, static_cast<size_t>(_Find_root_name_end(_First, _Last) - _First));\r\n    }\r\n\r\n    _NODISCARD inline const wchar_t* _Find_relative_path(const wchar_t* const _First, const wchar_t* const _Last) {\r\n        // attempt to parse [_First, _Last) as a path and return the start of relative-path\r\n        return _STD find_if_not(_Find_root_name_end(_First, _Last), _Last, _Is_slash);\r\n    }\r\n\r\n    _NODISCARD inline wstring_view _Parse_root_directory(const wstring_view _Str) {\r\n        // attempt to parse _Str as a path and return the root-directory if it exists; otherwise, an empty view\r\n        const auto _First         = _Str.data();\r\n        const auto _Last          = _First + _Str.size();\r\n        const auto _Root_name_end = _Find_root_name_end(_First, _Last);\r\n        const auto _Relative_path = _STD find_if_not(_Root_name_end, _Last, _Is_slash);\r\n        return wstring_view(_Root_name_end, static_cast<size_t>(_Relative_path - _Root_name_end));\r\n    }\r\n\r\n    _NODISCARD inline wstring_view _Parse_root_path(const wstring_view _Str) {\r\n        // attempt to parse _Str as a path and return the root-path if it exists; otherwise, an empty view\r\n        const auto _First = _Str.data();\r\n        const auto _Last  = _First + _Str.size();\r\n        return wstring_view(_First, static_cast<size_t>(_Find_relative_path(_First, _Last) - _First));\r\n    }\r\n\r\n    _NODISCARD inline wstring_view _Parse_relative_path(const wstring_view _Str) {\r\n        // attempt to parse _Str as a path and return the relative-path if it exists; otherwise, an empty view\r\n        const auto _First         = _Str.data();\r\n        const auto _Last          = _First + _Str.size();\r\n        const auto _Relative_path = _Find_relative_path(_First, _Last);\r\n        return wstring_view(_Relative_path, static_cast<size_t>(_Last - _Relative_path));\r\n    }\r\n\r\n    _NODISCARD inline wstring_view _Parse_parent_path(const wstring_view _Str) {\r\n        // attempt to parse _Str as a path and return the parent_path if it exists; otherwise, an empty view\r\n        const auto _First         = _Str.data();\r\n        auto _Last                = _First + _Str.size();\r\n        const auto _Relative_path = _Find_relative_path(_First, _Last);\r\n        // case 1: relative-path ends in a directory-separator, remove the separator to remove \"magic empty path\"\r\n        //  for example: R\"(/cat/dog/\\//\\)\"\r\n        // case 2: relative-path doesn't end in a directory-separator, remove the filename and last directory-separator\r\n        //  to prevent creation of a \"magic empty path\"\r\n        //  for example: \"/cat/dog\"\r\n        while (_Relative_path != _Last && !_Is_slash(_Last[-1])) {\r\n            // handle case 2 by removing trailing filename, puts us into case 1\r\n            --_Last;\r\n        }\r\n\r\n        while (_Relative_path != _Last && _Is_slash(_Last[-1])) { // handle case 1 by removing trailing slashes\r\n            --_Last;\r\n        }\r\n\r\n        return wstring_view(_First, static_cast<size_t>(_Last - _First));\r\n    }\r\n\r\n    _NODISCARD inline const wchar_t* _Find_filename(const wchar_t* const _First, const wchar_t* _Last) {\r\n        // attempt to parse [_First, _Last) as a path and return the start of filename if it exists; otherwise, _Last\r\n        const auto _Relative_path = _Find_relative_path(_First, _Last);\r\n        while (_Relative_path != _Last && !_Is_slash(_Last[-1])) {\r\n            --_Last;\r\n        }\r\n\r\n        return _Last;\r\n    }\r\n\r\n    _NODISCARD inline wstring_view _Parse_filename(const wstring_view _Str) {\r\n        // attempt to parse _Str as a path and return the filename if it exists; otherwise, an empty view\r\n        const auto _First    = _Str.data();\r\n        const auto _Last     = _First + _Str.size();\r\n        const auto _Filename = _Find_filename(_First, _Last);\r\n        return wstring_view(_Filename, static_cast<size_t>(_Last - _Filename));\r\n    }\r\n\r\n    _NODISCARD constexpr const wchar_t* _Find_extension(const wchar_t* const _Filename, const wchar_t* const _Ads) {\r\n        // find dividing point between stem and extension in a generic format filename consisting of [_Filename, _Ads)\r\n        auto _Extension = _Ads;\r\n        if (_Filename == _Extension) { // empty path\r\n            return _Ads;\r\n        }\r\n\r\n        --_Extension;\r\n        if (_Filename == _Extension) {\r\n            // path is length 1 and either dot, or has no dots; either way, extension() is empty\r\n            return _Ads;\r\n        }\r\n\r\n        if (*_Extension == L'.') { // we might have found the end of stem\r\n            if (_Filename == _Extension - 1 && _Extension[-1] == L'.') { // dotdot special case\r\n                return _Ads;\r\n            } else { // x.\r\n                return _Extension;\r\n            }\r\n        }\r\n\r\n        while (_Filename != --_Extension) {\r\n            if (*_Extension == L'.') { // found a dot which is not in first position, so it starts extension()\r\n                return _Extension;\r\n            }\r\n        }\r\n\r\n        // if we got here, either there are no dots, in which case extension is empty, or the first element\r\n        // is a dot, in which case we have the leading single dot special case, which also makes extension empty\r\n        return _Ads;\r\n    }\r\n\r\n    _NODISCARD inline wstring_view _Parse_stem(const wstring_view _Str) {\r\n        // attempt to parse _Str as a path and return the stem if it exists; otherwise, an empty view\r\n        const auto _First    = _Str.data();\r\n        const auto _Last     = _First + _Str.size();\r\n        const auto _Filename = _Find_filename(_First, _Last);\r\n        const auto _Ads =\r\n            _STD find(_Filename, _Last, L':'); // strip alternate data streams in intra-filename decomposition\r\n        const auto _Extension = _Find_extension(_Filename, _Ads);\r\n        return wstring_view(_Filename, static_cast<size_t>(_Extension - _Filename));\r\n    }\r\n\r\n    _NODISCARD inline wstring_view _Parse_extension(const wstring_view _Str) {\r\n        // attempt to parse _Str as a path and return the extension if it exists; otherwise, an empty view\r\n        const auto _First    = _Str.data();\r\n        const auto _Last     = _First + _Str.size();\r\n        const auto _Filename = _Find_filename(_First, _Last);\r\n        const auto _Ads =\r\n            _STD find(_Filename, _Last, L':'); // strip alternate data streams in intra-filename decomposition\r\n        const auto _Extension = _Find_extension(_Filename, _Ads);\r\n        return wstring_view(_Extension, static_cast<size_t>(_Ads - _Extension));\r\n    }\r\n\r\n    _NODISCARD inline int _Range_compare(const wchar_t* const _Lfirst, const wchar_t* const _Llast,\r\n        const wchar_t* const _Rfirst, const wchar_t* const _Rlast) {\r\n        // 3 way compare [_Lfirst, _Llast) with [_Rfirst, _Rlast)\r\n        return _Traits_compare<char_traits<wchar_t>>(\r\n            _Lfirst, static_cast<size_t>(_Llast - _Lfirst), _Rfirst, static_cast<size_t>(_Rlast - _Rfirst));\r\n    }\r\n\r\n    _NODISCARD inline bool _Is_drive_prefix_with_slash_slash_question(const wstring_view _Text) {\r\n        // test if _Text starts with a \\\\?\\X: prefix\r\n        return _Text.size() >= 6 && _Text._Starts_with(LR\"(\\\\?\\)\"sv) && _Is_drive_prefix(_Text.data() + 4);\r\n    }\r\n\r\n    _NODISCARD inline bool _Is_dot_or_dotdot(const __std_fs_find_data& _Data) {\r\n        // tests if _File_name of __std_fs_find_data is . or ..\r\n        if (_Data._File_name[0] != L'.') {\r\n            return false;\r\n        }\r\n\r\n        const auto _Second_char = _Data._File_name[1];\r\n        if (_Second_char == 0) {\r\n            return true;\r\n        }\r\n\r\n        if (_Second_char != L'.') {\r\n            return false;\r\n        }\r\n\r\n        return _Data._File_name[2] == 0;\r\n    }\r\n\r\n    struct _Find_file_handle {\r\n        __std_fs_dir_handle _Handle = __std_fs_dir_handle::_Invalid;\r\n\r\n        _Find_file_handle() noexcept = default;\r\n        _Find_file_handle(_Find_file_handle&& _Rhs) noexcept\r\n            : _Handle(_STD exchange(_Rhs._Handle, __std_fs_dir_handle::_Invalid)) {}\r\n\r\n        _Find_file_handle& operator=(_Find_file_handle&& _Rhs) noexcept {\r\n            auto _Tmp = _STD exchange(_Rhs._Handle, __std_fs_dir_handle::_Invalid);\r\n            _Tmp      = _STD exchange(_Handle, _Tmp);\r\n            __std_fs_directory_iterator_close(_Tmp);\r\n            return *this;\r\n        }\r\n\r\n        _NODISCARD __std_win_error _Open(const wchar_t* _Path_spec, __std_fs_find_data* _Results) noexcept {\r\n            return __std_fs_directory_iterator_open(_Path_spec, &_Handle, _Results);\r\n        }\r\n\r\n        ~_Find_file_handle() noexcept {\r\n            __std_fs_directory_iterator_close(_Handle);\r\n        }\r\n\r\n        explicit operator bool() const noexcept {\r\n            return _Handle != __std_fs_dir_handle::_Invalid;\r\n        }\r\n    };\r\n\r\n    template <class _Base_iter>\r\n    class _Path_iterator;\r\n\r\n    _EXPORT_STD class path {\r\n        template <class _Base_iter>\r\n        friend class _Path_iterator;\r\n        friend inline path absolute(const path& _Input, error_code& _Ec);\r\n        friend inline __std_win_error _Canonical(path& _Result, const wstring& _Text);\r\n        friend inline path _Temp_directory_path_impl(error_code& _Ec);\r\n        friend inline path current_path(error_code& _Ec);\r\n        friend inline void current_path(const path& _To);\r\n        friend inline void current_path(const path& _To, error_code& _Ec) noexcept;\r\n        friend inline __std_win_error _Read_symlink(const path& _Symlink_path, path& _Result);\r\n\r\n    public:\r\n        using value_type  = wchar_t;\r\n        using string_type = _STD wstring;\r\n\r\n        static constexpr wchar_t preferred_separator = L'\\\\';\r\n\r\n        enum format { auto_format, native_format, generic_format };\r\n\r\n        path()                           = default;\r\n        path(const path&)                = default;\r\n        path(path&&)                     = default;\r\n        ~path()                          = default;\r\n        path& operator=(const path&)     = default;\r\n        path& operator=(path&&) noexcept = default;\r\n\r\n        path(string_type&& _Source) : _Text(_STD move(_Source)) {}\r\n\r\n        path(string_type&& _Source, format) : _Text(_STD move(_Source)) {\r\n            // format has no meaning for this implementation, as the generic grammar is acceptable as a native path\r\n        }\r\n\r\n        template <class _Src, enable_if_t<_Is_Source<_Src>, int> = 0>\r\n        path(const _Src& _Source, format = auto_format) : _Text(_Convert_Source_to_wide(_Source)) {\r\n            // format has no meaning for this implementation, as the generic grammar is acceptable as a native path\r\n        }\r\n\r\n        template <class _InIt>\r\n        path(_InIt _First, _InIt _Last, format = auto_format) : _Text(_Convert_range_to_wide(_First, _Last)) {\r\n            // format has no meaning for this implementation, as the generic grammar is acceptable as a native path\r\n            static_assert(_Is_EcharT<_Iter_value_t<_InIt>>, \"invalid value_type, see N4950 [fs.req]/3\");\r\n        }\r\n\r\n        template <class _Src, enable_if_t<_Is_Source<_Src>, int> = 0>\r\n        path(const _Src& _Source, const locale& _Loc, format = auto_format)\r\n            : _Text(_Convert_stringoid_with_locale_to_wide(_Stringoid_from_Source(_Source), _Loc)) {\r\n            // format has no meaning for this implementation, as the generic grammar is acceptable as a native path\r\n            using _Stringoid = decltype(_Stringoid_from_Source(_Source));\r\n            static_assert(is_same_v<typename _Stringoid::value_type, char>,\r\n                \"invalid value_type, see N4950 [fs.path.construct]/5\");\r\n        }\r\n\r\n        template <class _InIt>\r\n        path(_InIt _First, _InIt _Last, const locale& _Loc, format = auto_format)\r\n            : _Text(_Convert_stringoid_with_locale_to_wide(_Stringoid_from_range(_First, _Last), _Loc)) {\r\n            // format has no meaning for this implementation, as the generic grammar is acceptable as a native path\r\n            static_assert(is_same_v<_Iter_value_t<_InIt>, char>, \"invalid value_type, see N4950 [fs.path.construct]/5\");\r\n        }\r\n\r\n        path& operator=(string_type&& _Source) noexcept /* strengthened */ {\r\n            // set native() to _Source\r\n            _Text = _STD move(_Source);\r\n            return *this;\r\n        }\r\n\r\n        path& assign(string_type&& _Source) noexcept /* strengthened */ {\r\n            // set native() to _Source\r\n            _Text = _STD move(_Source);\r\n            return *this;\r\n        }\r\n\r\n        template <class _Src, enable_if_t<_Is_Source<_Src>, int> = 0>\r\n        path& operator=(const _Src& _Source) { // set native() to _Source\r\n            _Text = _Convert_Source_to_wide(_Source);\r\n            return *this;\r\n        }\r\n\r\n        template <class _Src, enable_if_t<_Is_Source<_Src>, int> = 0>\r\n        path& assign(const _Src& _Source) { // set native() to _Source\r\n            _Text = _Convert_Source_to_wide(_Source);\r\n            return *this;\r\n        }\r\n\r\n        template <class _InIt>\r\n        path& assign(_InIt _First, _InIt _Last) { // set native() to [_First, _Last)\r\n            static_assert(_Is_EcharT<_Iter_value_t<_InIt>>, \"invalid value_type, see N4950 [fs.req]/3\");\r\n            _Text = _Convert_range_to_wide(_First, _Last);\r\n            return *this;\r\n        }\r\n\r\n        path& operator/=(const path& _Other) {\r\n            // set *this to the path lexically resolved by _Other relative to *this\r\n            // examples:\r\n            // path{\"cat\"} / \"c:/dog\"; // yields \"c:/dog\"\r\n            // path{\"cat\"} / \"c:\"; // yields \"c:\"\r\n            // path{\"c:\"} / \"\"; // yields \"c:\"\r\n            // path{\"c:cat\"} / \"/dog\"; // yields \"c:/dog\"\r\n            // path{\"c:cat\"} / \"c:dog\"; // yields \"c:cat/dog\"\r\n            // path{\"c:cat\"} / \"d:dog\"; // yields \"d:dog\"\r\n            // several places herein quote the standard, but the standard's variable p is replaced with _Other\r\n\r\n            if (_Other.is_absolute()) { // if _Other.is_absolute(), then op=(_Other)\r\n                return operator=(_Other);\r\n            }\r\n\r\n            const auto _My_first            = _Text.data();\r\n            const auto _My_last             = _My_first + _Text.size();\r\n            const auto _Other_first         = _Other._Text.data();\r\n            const auto _Other_last          = _Other_first + _Other._Text.size();\r\n            const auto _My_root_name_end    = _Find_root_name_end(_My_first, _My_last);\r\n            const auto _Other_root_name_end = _Find_root_name_end(_Other_first, _Other_last);\r\n            if (_Other_first != _Other_root_name_end\r\n                && _Range_compare(_My_first, _My_root_name_end, _Other_first, _Other_root_name_end) != 0) {\r\n                // if _Other.has_root_name() && _Other.root_name() != root_name(), then op=(_Other)\r\n                return operator=(_Other);\r\n            }\r\n\r\n            if (_Other_root_name_end != _Other_last && _Is_slash(*_Other_root_name_end)) {\r\n                // If _Other.has_root_directory() removes any root directory and relative-path from *this\r\n                _Text.erase(static_cast<size_t>(_My_root_name_end - _My_first));\r\n            } else {\r\n                // Otherwise, if (!has_root_directory && is_absolute) || has_filename appends path::preferred_separator\r\n                if (_My_root_name_end == _My_last) {\r\n                    // Here, !has_root_directory && !has_filename\r\n                    // Going through our root_name kinds:\r\n                    // X: can't be absolute here, since those paths are absolute only when has_root_directory\r\n                    // \\\\?\\ can't exist without has_root_directory\r\n                    // \\\\server can be absolute here\r\n                    if (_My_root_name_end - _My_first >= 3) {\r\n                        _Text.push_back(preferred_separator);\r\n                    }\r\n                } else {\r\n                    // Here, has_root_directory || has_filename\r\n                    // If there is a trailing slash, the trailing slash might be part of root_directory.\r\n                    // If it is, has_root_directory && !has_filename, so the test fails.\r\n                    // If there is a trailing slash not part of root_directory, then !has_filename, so only\r\n                    // (!has_root_directory && is_absolute) remains\r\n                    // Going through our root_name kinds:\r\n                    // X:cat\\ needs a root_directory to be absolute\r\n                    // \\\\server\\cat must have a root_directory to exist with a relative_path\r\n                    // \\\\?\\ must have a root_directory to exist\r\n                    // As a result, the test fails if there is a trailing slash.\r\n                    // If there is no trailing slash, then has_filename, so the test passes.\r\n                    // Therefore, the test passes if and only if there is no trailing slash.\r\n                    if (!_Is_slash(_My_last[-1])) {\r\n                        _Text.push_back(preferred_separator);\r\n                    }\r\n                }\r\n            }\r\n\r\n            // Then appends the native format pathname of _Other, omitting any root-name from its generic format\r\n            // pathname, to the native format pathname.\r\n            _Text.append(_Other_root_name_end, static_cast<size_t>(_Other_last - _Other_root_name_end));\r\n            return *this;\r\n        }\r\n\r\n        template <class _Src, enable_if_t<_Is_Source<_Src>, int> = 0>\r\n        path& operator/=(const _Src& _Source) {\r\n            return operator/=(path{_Source});\r\n        }\r\n\r\n        template <class _Src, enable_if_t<_Is_Source<_Src>, int> = 0>\r\n        path& append(const _Src& _Source) {\r\n            return operator/=(path{_Source});\r\n        }\r\n\r\n        template <class _InIt>\r\n        path& append(_InIt _First, _InIt _Last) {\r\n            static_assert(_Is_EcharT<_Iter_value_t<_InIt>>, \"invalid value_type, see N4950 [fs.req]/3\");\r\n            return operator/=(path{_First, _Last});\r\n        }\r\n\r\n        path& operator+=(const path& _Added) { // concat _Added to native()\r\n            return operator+=(_Added._Text);\r\n        }\r\n\r\n        path& operator+=(const string_type& _Added) { // concat _Added to native()\r\n            _Text._Orphan_all();\r\n            _Text += _Added;\r\n            return *this;\r\n        }\r\n\r\n        path& operator+=(const wstring_view _Added) { // concat _Added to native()\r\n            _Text._Orphan_all();\r\n            _Text += _Added;\r\n            return *this;\r\n        }\r\n\r\n        path& operator+=(const value_type* const _Added) { // concat _Added to native()\r\n            _Text._Orphan_all();\r\n            _Text += _Added;\r\n            return *this;\r\n        }\r\n\r\n        path& operator+=(const value_type _Added) { // concat _Added to native()\r\n            _Text._Orphan_all();\r\n            _Text += _Added;\r\n            return *this;\r\n        }\r\n\r\n        template <class _Src, enable_if_t<_Is_Source<_Src>, int> = 0>\r\n        path& operator+=(const _Src& _Added) { // concat _Added to native()\r\n            return operator+=(path{_Added}._Text);\r\n        }\r\n\r\n        template <class _EcharT, enable_if_t<_Is_EcharT<_EcharT>, int> = 0>\r\n        path& operator+=(const _EcharT _Added) { // concat _Added to native()\r\n            return operator+=(path{&_Added, &_Added + 1}._Text);\r\n        }\r\n\r\n        template <class _Src, enable_if_t<_Is_Source<_Src>, int> = 0>\r\n        path& concat(const _Src& _Added) { // concat _Added to native()\r\n            return operator+=(path{_Added}._Text);\r\n        }\r\n\r\n        template <class _InIt>\r\n        path& concat(_InIt _First, _InIt _Last) { // concat [_First, _Last) to native()\r\n            static_assert(_Is_EcharT<_Iter_value_t<_InIt>>, \"invalid value_type, see N4950 [fs.req]/3\");\r\n            return operator+=(path{_First, _Last}._Text);\r\n        }\r\n\r\n        void clear() noexcept { // set *this to the empty path\r\n            _Text._Orphan_all();\r\n            _Text.clear();\r\n        }\r\n\r\n        path& make_preferred() noexcept /* strengthened */ {\r\n            // transform each fallback-separator into preferred-separator\r\n            _Text._Orphan_all();\r\n            _STD replace(_Text.begin(), _Text.end(), L'/', L'\\\\');\r\n            return *this;\r\n        }\r\n\r\n        path& remove_filename() noexcept /* strengthened */ {\r\n            // remove any filename from *this\r\n            const auto _First    = _Text.data();\r\n            const auto _Last     = _First + _Text.size();\r\n            const auto _Filename = _Find_filename(_First, _Last);\r\n            _Text._Orphan_all();\r\n            _Text.erase(static_cast<size_t>(_Filename - _First));\r\n            return *this;\r\n        }\r\n\r\n        void _Remove_filename_and_separator() noexcept { // remove filename and preceding non-root directory-separator\r\n            const auto _First         = _Text.data();\r\n            const auto _Last          = _First + _Text.size();\r\n            const auto _Root_name_end = _Find_root_name_end(_First, _Last);\r\n            const auto _Root_dir_end =\r\n                (_Root_name_end != _Last && _Is_slash(*_Root_name_end)) ? _Root_name_end + 1 : _Root_name_end;\r\n\r\n            using _Reverse_iter = reverse_iterator<const wchar_t*>;\r\n\r\n            const _Reverse_iter _Rbegin{_Last};\r\n            const _Reverse_iter _Rend{_Root_dir_end};\r\n\r\n            const auto _Rslash_first = _STD find_if(_Rbegin, _Rend, _Is_slash);\r\n            const auto _Rslash_last  = _STD find_if_not(_Rslash_first, _Rend, _Is_slash);\r\n\r\n            const _Reverse_iter _Rlast{_First};\r\n\r\n            _Text._Orphan_all();\r\n            _Text.erase(static_cast<size_t>(_Rlast - _Rslash_last));\r\n        }\r\n\r\n        path& replace_filename(const path& _Replacement) { // remove any filename from *this and append _Replacement\r\n            remove_filename();\r\n            return operator/=(_Replacement);\r\n        }\r\n\r\n        path& replace_extension(/* const path& _Replacement = {} */) noexcept /* strengthened */ {\r\n            // remove any extension() (and alternate data stream references) from *this's filename()\r\n            const wchar_t* _First = _Text.data();\r\n            const auto _Last      = _First + _Text.size();\r\n            const auto _Filename  = _Find_filename(_First, _Last);\r\n            const auto _Ads       = _STD find(_Filename, _Last, L':');\r\n            const auto _Extension = _Find_extension(_Filename, _Ads);\r\n            _Text._Orphan_all();\r\n            _Text.erase(static_cast<size_t>(_Extension - _First));\r\n            return *this;\r\n        }\r\n\r\n        path& replace_extension(const path& _Replacement) {\r\n            // remove any extension() (and alternate data stream references) from *this's filename(), and concatenate\r\n            // _Replacement\r\n            replace_extension();\r\n            if (!_Replacement.empty() && _Replacement._Text[0] != L'.') {\r\n                _Text.push_back(L'.');\r\n            }\r\n\r\n            return operator+=(_Replacement._Text);\r\n        }\r\n\r\n        void swap(path& _Rhs) noexcept {\r\n            _Text.swap(_Rhs._Text);\r\n        }\r\n\r\n        _NODISCARD const string_type& native() const noexcept {\r\n            // return a reference to the internally stored wstring in the native format\r\n            return _Text;\r\n        }\r\n\r\n        _NODISCARD const value_type* c_str() const noexcept {\r\n            // return a NTCTS to the internally stored path in the native format\r\n            return _Text.c_str();\r\n        }\r\n\r\n        operator string_type() const { // implicitly convert *this into a string containing the native format\r\n            return _Text;\r\n        }\r\n\r\n        template <class _EcharT, class _Traits = char_traits<_EcharT>, class _Alloc = allocator<_EcharT>,\r\n            enable_if_t<_Is_EcharT<_EcharT>, int> = 0>\r\n        _NODISCARD basic_string<_EcharT, _Traits, _Alloc> string(const _Alloc& _Al = _Alloc()) const {\r\n            // convert the native path from this instance into a basic_string\r\n            return _Convert_wide_to<_Traits>(_Text, _Al);\r\n        }\r\n\r\n        _NODISCARD _STD string string() const { // convert the native path from this instance into a string\r\n            return string<char>();\r\n        }\r\n\r\n        _NODISCARD _STD wstring wstring() const { // copy the native path from this instance into a wstring\r\n            return _Text;\r\n        }\r\n\r\n        _NODISCARD auto u8string() const { // convert the native path from this instance into a UTF-8 string\r\n#ifdef __cpp_lib_char8_t\r\n            using _U8Ty = char8_t;\r\n#else // ^^^ defined(__cpp_lib_char8_t) / !defined(__cpp_lib_char8_t) vvv\r\n            using _U8Ty = char;\r\n#endif // ^^^ !defined(__cpp_lib_char8_t) ^^^\r\n            return _Convert_wide_to_narrow<char_traits<_U8Ty>>(__std_code_page::_Utf8, _Text, allocator<_U8Ty>{});\r\n        }\r\n\r\n        _NODISCARD _STD u16string u16string() const { // convert the native path from this instance into a u16string\r\n            return string<char16_t>();\r\n        }\r\n\r\n        _NODISCARD _STD u32string u32string() const { // convert the native path from this instance into a u32string\r\n            return string<char32_t>();\r\n        }\r\n\r\n        template <class _EcharT, class _Traits = char_traits<_EcharT>, class _Alloc = allocator<_EcharT>,\r\n            enable_if_t<_Is_EcharT<_EcharT>, int> = 0>\r\n        _NODISCARD basic_string<_EcharT, _Traits, _Alloc> generic_string(const _Alloc& _Al = _Alloc()) const {\r\n            // convert the native path from this instance into a generic basic_string\r\n            using _Alwide = _Rebind_alloc_t<_Alloc, wchar_t>;\r\n            _Alwide _Al_wchar(_Al);\r\n            basic_string<wchar_t, char_traits<wchar_t>, _Alwide> _Generic_str(_Al_wchar);\r\n            _Generic_str.resize(_Text.size());\r\n            _STD replace_copy(_Text.begin(), _Text.end(), _Generic_str.begin(), L'\\\\', L'/');\r\n            return _Convert_wide_to<_Traits>(_Generic_str, _Al);\r\n        }\r\n\r\n        _NODISCARD _STD string generic_string() const {\r\n            // convert the native path from this instance into a generic string\r\n            return generic_string<char>();\r\n        }\r\n\r\n        _NODISCARD _STD wstring generic_wstring() const {\r\n            // convert the current native path into a copy of it in the generic format\r\n            // note: intra-filename() observers stem() and extension() strip alternate data\r\n            // streams, but filenames with alternate data streams inside can serve as\r\n            // perfectly valid values of filename in the generic format, so in the interest of\r\n            // destroying less information we have preserved them here.\r\n            _STD wstring _Result;\r\n            _Result.resize(_Text.size());\r\n            _STD replace_copy(_Text.begin(), _Text.end(), _Result.begin(), L'\\\\', L'/');\r\n            return _Result;\r\n        }\r\n\r\n        _NODISCARD auto generic_u8string() const {\r\n            // convert the native path from this instance into a generic UTF-8 string\r\n            auto _Result = u8string();\r\n            using _U8Ty  = decltype(_Result)::value_type;\r\n            _STD replace(_Result.begin(), _Result.end(), _U8Ty{u8'\\\\'}, _U8Ty{u8'/'});\r\n            return _Result;\r\n        }\r\n\r\n        _NODISCARD _STD u16string generic_u16string() const {\r\n            // convert the native path from this instance into a generic u16string\r\n            _STD u16string _Result = u16string();\r\n            _STD replace(_Result.begin(), _Result.end(), u'\\\\', u'/');\r\n            return _Result;\r\n        }\r\n\r\n        _NODISCARD _STD u32string generic_u32string() const {\r\n            // convert the native path from this instance into a generic u32string\r\n            _STD u32string _Result = u32string();\r\n            _STD replace(_Result.begin(), _Result.end(), U'\\\\', U'/');\r\n            return _Result;\r\n        }\r\n\r\n        _NODISCARD int compare(const path& _Other) const noexcept { // compare *this with _Other\r\n            return compare(static_cast<wstring_view>(_Other._Text));\r\n        }\r\n\r\n        _NODISCARD int compare(const string_type& _Other) const noexcept /* strengthened */ {\r\n            // compare *this with _Other\r\n            return compare(static_cast<wstring_view>(_Other));\r\n        }\r\n\r\n        _NODISCARD int compare(const basic_string_view<value_type> _Other) const noexcept /* strengthened */ {\r\n            // compare *this with _Other\r\n            // several places herein quote the standard, but the standard's variable p is replaced with _Other\r\n            const auto _My_first            = _Text.data();\r\n            const auto _My_last             = _My_first + _Text.size();\r\n            const auto _My_root_name_end    = _Find_root_name_end(_My_first, _My_last);\r\n            const auto _Other_first         = _Other.data();\r\n            const auto _Other_last          = _Other_first + _Other.size();\r\n            const auto _Other_root_name_end = _Find_root_name_end(_Other_first, _Other_last);\r\n\r\n            // Let rootNameComparison be the result of this->root_name().native().compare(_Other.root_name().native())\r\n            const int _Root_cmp = _Range_compare(_My_first, _My_root_name_end, _Other_first, _Other_root_name_end);\r\n            if (_Root_cmp != 0) { // If rootNameComparison is not 0, rootNameComparison\r\n                return _Root_cmp;\r\n            }\r\n\r\n            auto _My_relative               = _STD find_if_not(_My_root_name_end, _My_last, _Is_slash);\r\n            auto _Other_relative            = _STD find_if_not(_Other_root_name_end, _Other_last, _Is_slash);\r\n            const bool _My_has_root_name    = _My_root_name_end != _My_relative;\r\n            const bool _Other_has_root_name = _Other_root_name_end != _Other_relative;\r\n            // If !this->has_root_directory() and _Other.has_root_directory(), a value less than 0\r\n            // If this->has_root_directory() and !_Other.has_root_directory(), a value greater than 0\r\n            const int _Root_name_cmp = _My_has_root_name - _Other_has_root_name;\r\n            if (_Root_name_cmp != 0) {\r\n                return _Root_name_cmp;\r\n            }\r\n\r\n            // Otherwise, lexicographic by element\r\n            for (;;) {\r\n                const bool _My_empty    = _My_relative == _My_last;\r\n                const bool _Other_empty = _Other_relative == _Other_last;\r\n                const int _Empty_cmp    = _Other_empty - _My_empty;\r\n                if (_My_empty || _Empty_cmp != 0) {\r\n                    return _Empty_cmp;\r\n                }\r\n\r\n                const bool _My_slash    = _Is_slash(*_My_relative);\r\n                const bool _Other_slash = _Is_slash(*_Other_relative);\r\n                const int _Slash_cmp    = _Other_slash - _My_slash;\r\n                if (_Slash_cmp != 0) {\r\n                    return _Slash_cmp;\r\n                }\r\n\r\n                if (_My_slash) { // comparing directory-separator\r\n                    _My_relative    = _STD find_if_not(_My_relative + 1, _My_last, _Is_slash);\r\n                    _Other_relative = _STD find_if_not(_Other_relative + 1, _Other_last, _Is_slash);\r\n                    continue;\r\n                }\r\n\r\n                const int _Cmp = *_My_relative - *_Other_relative;\r\n                if (_Cmp != 0) {\r\n                    return _Cmp;\r\n                }\r\n\r\n                ++_My_relative;\r\n                ++_Other_relative;\r\n            }\r\n        }\r\n\r\n        _NODISCARD int compare(const value_type* const _Other) const noexcept /* strengthened */ {\r\n            // compare *this with _Other\r\n            return compare(static_cast<wstring_view>(_Other));\r\n        }\r\n\r\n        _NODISCARD path root_name() const {\r\n            // parse the root-name from *this and return a copy if present; otherwise, return the empty path\r\n            return _Parse_root_name(_Text);\r\n        }\r\n\r\n        _NODISCARD path root_directory() const {\r\n            // parse the root-directory from *this and return a copy if present; otherwise, return the empty path\r\n            return _Parse_root_directory(_Text);\r\n        }\r\n\r\n        _NODISCARD path root_path() const {\r\n            // parse the root-path from *this and return a copy if present; otherwise, return the empty path\r\n            return _Parse_root_path(_Text);\r\n        }\r\n\r\n        _NODISCARD path relative_path() const {\r\n            // parse the relative-path from *this and return a copy if present; otherwise, return the empty path\r\n            return _Parse_relative_path(_Text);\r\n        }\r\n\r\n        _NODISCARD path parent_path() const {\r\n            // parse the parent-path from *this and return a copy if present; otherwise, return the empty path\r\n            return _Parse_parent_path(_Text);\r\n        }\r\n\r\n        _NODISCARD path filename() const {\r\n            // parse the filename from *this and return a copy if present; otherwise, return the empty path\r\n            return _Parse_filename(_Text);\r\n        }\r\n\r\n        _NODISCARD path stem() const {\r\n            // parse the stem from *this and return a copy if present; otherwise, return the empty path\r\n            return _Parse_stem(_Text);\r\n        }\r\n\r\n        _NODISCARD path extension() const {\r\n            // parse the extension from *this and return a copy if present; otherwise, return the empty path\r\n            return _Parse_extension(_Text);\r\n        }\r\n\r\n        _NODISCARD bool empty() const noexcept {\r\n            return _Text.empty();\r\n        }\r\n\r\n        _NODISCARD bool has_root_name() const noexcept /* strengthened */ {\r\n            // parse the root-name from *this and return whether it exists\r\n            return !_Parse_root_name(_Text).empty();\r\n        }\r\n\r\n        _NODISCARD bool has_root_directory() const noexcept /* strengthened */ {\r\n            // parse the root-directory from *this and return whether it exists\r\n            return !_Parse_root_directory(_Text).empty();\r\n        }\r\n\r\n        _NODISCARD bool has_root_path() const noexcept /* strengthened */ {\r\n            // parse the root-path from *this and return whether it exists\r\n            return !_Parse_root_path(_Text).empty();\r\n        }\r\n\r\n        _NODISCARD bool has_relative_path() const noexcept /* strengthened */ {\r\n            // parse the relative-path from *this and return whether it exists\r\n            return !_Parse_relative_path(_Text).empty();\r\n        }\r\n\r\n        _NODISCARD bool has_parent_path() const noexcept /* strengthened */ {\r\n            // parse the parent-path from *this and return whether it exists\r\n            return !_Parse_parent_path(_Text).empty();\r\n        }\r\n\r\n        _NODISCARD bool has_filename() const noexcept /* strengthened */ {\r\n            // parse the filename from *this and return whether it exists\r\n            return !_Parse_filename(_Text).empty();\r\n        }\r\n\r\n        _NODISCARD bool has_stem() const noexcept /* strengthened */ {\r\n            // parse the stem from *this and return whether it exists\r\n            return !_Parse_stem(_Text).empty();\r\n        }\r\n\r\n        _NODISCARD bool has_extension() const noexcept /* strengthened */ {\r\n            // parse the extension from *this and return whether it exists\r\n            return !_Parse_extension(_Text).empty();\r\n        }\r\n\r\n        _NODISCARD bool is_absolute() const noexcept /* strengthened */ {\r\n            // paths with a root-name that is a drive letter and no root-directory are drive relative, such as x:example\r\n            // paths with no root-name or root-directory are relative, such as example\r\n            // paths with no root-name but a root-directory are root relative, such as \\example\r\n            // all other paths are absolute\r\n            const auto _First = _Text.data();\r\n            const auto _Last  = _First + _Text.size();\r\n            if (_Has_drive_letter_prefix(_First, _Last)) { // test for X:\\ but not X:cat\r\n                return _Last - _First >= 3 && _Is_slash(_First[2]);\r\n            }\r\n\r\n            // if root-name is otherwise nonempty, then it must be one of the always-absolute prefixes like\r\n            // \\\\?\\ or \\\\server, so the path is absolute. Otherwise it is relative.\r\n            return _First != _Find_root_name_end(_First, _Last);\r\n        }\r\n\r\n        _NODISCARD bool is_relative() const noexcept /* strengthened */ {\r\n            // test if *this is a relative path\r\n            return !is_absolute();\r\n        }\r\n\r\n        _NODISCARD path lexically_normal() const {\r\n            constexpr wstring_view _Dot     = L\".\"sv;\r\n            constexpr wstring_view _Dot_dot = L\"..\"sv;\r\n\r\n            // N4950 [fs.path.generic]/6:\r\n            // \"Normalization of a generic format pathname means:\"\r\n\r\n            // \"1. If the path is empty, stop.\"\r\n            if (empty()) {\r\n                return {};\r\n            }\r\n\r\n            // \"2. Replace each slash character in the root-name with a preferred-separator.\"\r\n            const auto _First         = _Text.data();\r\n            const auto _Last          = _First + _Text.size();\r\n            const auto _Root_name_end = _Find_root_name_end(_First, _Last);\r\n            string_type _Normalized(_First, _Root_name_end);\r\n            _STD replace(_Normalized.begin(), _Normalized.end(), L'/', L'\\\\');\r\n\r\n            // \"3. Replace each directory-separator with a preferred-separator.\r\n            // [ Note 4: The generic pathname grammar defines directory-separator\r\n            // as one or more slashes and preferred-separators. -end note ]\"\r\n            vector<wstring_view> _Vec; // Empty wstring_view means directory-separator\r\n                                       // that will be normalized to a preferred-separator.\r\n                                       // Non-empty wstring_view means filename.\r\n            _Vec.reserve(19); // avoid frequent re-allocations\r\n            bool _Has_root_directory = false; // true: there is a slash right after root-name.\r\n            auto _Ptr                = _Root_name_end;\r\n            if (_Ptr != _Last && _Is_slash(*_Ptr)) {\r\n                _Has_root_directory = true;\r\n                _Normalized += preferred_separator;\r\n                ++_Ptr;\r\n                while (_Ptr != _Last && _Is_slash(*_Ptr)) {\r\n                    ++_Ptr;\r\n                }\r\n            }\r\n            // _Vec will start with a filename (if not empty).\r\n            while (_Ptr != _Last) {\r\n                if (_Is_slash(*_Ptr)) {\r\n                    if (_Vec.empty() || !_Vec.back().empty()) {\r\n                        // collapse one or more slashes and preferred-separators to one empty wstring_view\r\n                        _Vec.emplace_back();\r\n                    }\r\n                    ++_Ptr;\r\n                } else {\r\n                    const auto _Filename_end = _STD find_if(_Ptr + 1, _Last, _Is_slash);\r\n                    _Vec.emplace_back(_Ptr, static_cast<size_t>(_Filename_end - _Ptr));\r\n                    _Ptr = _Filename_end;\r\n                }\r\n            }\r\n\r\n            // \"4. Remove each dot filename and any immediately following directory-separator.\"\r\n            // \"5. As long as any appear, remove a non-dot-dot filename immediately followed by a\r\n            // directory-separator and a dot-dot filename, along with any immediately following directory-separator.\"\r\n            // \"6. If there is a root-directory, remove all dot-dot filenames\r\n            // and any directory-separators immediately following them.\r\n            // [ Note 5: These dot-dot filenames attempt to refer to nonexistent parent directories. -end note ]\"\r\n            auto _New_end = _Vec.begin();\r\n            for (auto _Pos = _Vec.begin(); _Pos != _Vec.end();) {\r\n                const auto _Elem = *_Pos++; // _Pos points at a filename here; it points at end or a separator after ++.\r\n                if (_Elem == _Dot) {\r\n                    // ignore dot (and following separator).\r\n                    if (_Pos == _Vec.end()) {\r\n                        break;\r\n                    }\r\n                } else if (_Elem != _Dot_dot) {\r\n                    // append normal filename and separator.\r\n                    *_New_end++ = _Elem; // _New_end points at end or a separator after ++.\r\n                    if (_Pos == _Vec.end()) {\r\n                        break;\r\n                    }\r\n                    ++_New_end; // _New_end(<=_Pos) doesn't point at end; accept separator.\r\n                } else { // _Dot_dot\r\n                    if (_New_end != _Vec.begin() && _New_end[-2] != _Dot_dot) {\r\n                        // _New_end == _Vec.begin() + 2n here.\r\n                        // remove preceding non-dot-dot filename and separator.\r\n                        _New_end -= 2;\r\n                        if (_Pos == _Vec.end()) {\r\n                            break;\r\n                        }\r\n                    } else if (!_Has_root_directory) {\r\n                        // due to 6, append dot-dot and separator only if !_Has_root_directory.\r\n                        *_New_end++ = _Dot_dot;\r\n                        if (_Pos == _Vec.end()) {\r\n                            break;\r\n                        }\r\n                        ++_New_end;\r\n                    } else {\r\n                        // ignore dot-dot and separator.\r\n                        if (_Pos == _Vec.end()) {\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n                ++_Pos; // _Pos points at a separator here; it points at end or a filename after ++.\r\n            }\r\n            _Vec.erase(_New_end, _Vec.end());\r\n\r\n            // \"7. If the last filename is dot-dot, remove any trailing directory-separator.\"\r\n            if (_Vec.size() >= 2 && _Vec.back().empty() && _Vec.end()[-2] == _Dot_dot) {\r\n                _Vec.pop_back();\r\n            }\r\n\r\n            // Build up _Normalized by flattening _Vec.\r\n            for (const auto& _Elem : _Vec) {\r\n                if (_Elem.empty()) {\r\n                    _Normalized += preferred_separator;\r\n                } else {\r\n                    _Normalized += _Elem;\r\n                }\r\n            }\r\n\r\n            // \"8. If the path is empty, add a dot.\"\r\n            if (_Normalized.empty()) {\r\n                _Normalized = _Dot;\r\n            }\r\n\r\n            // \"The result of normalization is a path in normal form, which is said to be normalized.\"\r\n            return path(_STD move(_Normalized));\r\n        }\r\n\r\n        _NODISCARD inline path lexically_relative(const path& _Base) const;\r\n\r\n        _NODISCARD path lexically_proximate(const path& _Base) const {\r\n            path _Result = lexically_relative(_Base);\r\n\r\n            if (_Result.empty()) {\r\n                _Result = *this;\r\n            }\r\n\r\n            return _Result;\r\n        }\r\n\r\n        using iterator       = _Path_iterator<string_type::const_iterator>;\r\n        using const_iterator = iterator;\r\n\r\n        _NODISCARD inline iterator begin() const;\r\n        _NODISCARD inline iterator end() const noexcept; // strengthened\r\n\r\n        template <class _Elem, class _Traits>\r\n        friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr, const path& _Path) {\r\n            // insert a path into a stream\r\n            return _Ostr << _STD quoted(_Path.string<_Elem, _Traits>());\r\n        }\r\n\r\n        template <class _Elem, class _Traits>\r\n        friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr, path& _Path) {\r\n            // extract a path from a stream\r\n            basic_string<_Elem, _Traits> _Tmp;\r\n            _Istr >> _STD quoted(_Tmp);\r\n            _Path = _STD move(_Tmp); // obvious optimization not depicted in N4950 [fs.path.io]/3\r\n            return _Istr;\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const path& _Left, const path& _Right) noexcept {\r\n            return _Left.compare(_Right._Text) == 0;\r\n        }\r\n\r\n#if _HAS_CXX20\r\n        _NODISCARD friend strong_ordering operator<=>(const path& _Left, const path& _Right) noexcept {\r\n            return _Left.compare(_Right._Text) <=> 0;\r\n        }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n        _NODISCARD friend bool operator!=(const path& _Left, const path& _Right) noexcept {\r\n            return _Left.compare(_Right) != 0;\r\n        }\r\n\r\n        _NODISCARD friend bool operator<(const path& _Left, const path& _Right) noexcept {\r\n            return _Left.compare(_Right) < 0;\r\n        }\r\n\r\n        _NODISCARD friend bool operator>(const path& _Left, const path& _Right) noexcept {\r\n            return _Left.compare(_Right) > 0;\r\n        }\r\n\r\n        _NODISCARD friend bool operator<=(const path& _Left, const path& _Right) noexcept {\r\n            return _Left.compare(_Right) <= 0;\r\n        }\r\n\r\n        _NODISCARD friend bool operator>=(const path& _Left, const path& _Right) noexcept {\r\n            return _Left.compare(_Right) >= 0;\r\n        }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n        _NODISCARD friend path operator/(const path& _Left, const path& _Right) { // append a pair of paths together\r\n            const auto _Right_size  = _Right._Text.size();\r\n            const auto _Right_first = _Right._Text.data();\r\n            const auto _Right_last  = _Right_first + _Right_size;\r\n\r\n            // Handle the most common case: !has_root_name(_Right) && !has_root_directory(_Right)\r\n            if (_Right_size != 0 && !_Has_drive_letter_prefix(_Right_first, _Right_last) && !_Is_slash(*_Right_first)) {\r\n                const auto _Left_size  = _Left._Text.size();\r\n                const auto _Left_first = _Left._Text.data();\r\n                const auto _Left_last  = _Left_first + _Left_size;\r\n\r\n                // Appending a slash to \"X:\" would make it an absolute path\r\n                const bool _Left_is_just_drive = _Left_size == 2 && _Is_drive_prefix(_Left_first);\r\n                const bool _Is_slash_needed    = _Left_size != 0 && !_Left_is_just_drive && !_Is_slash(_Left_last[-1]);\r\n\r\n                const auto _Total_size = _Left_size + static_cast<size_t>(_Is_slash_needed) + _Right_size;\r\n\r\n                path _Tmp;\r\n                _Tmp._Text._Resize_and_overwrite(_Total_size, [=](wchar_t* _Ptr, const size_t _Size) {\r\n                    _CSTD memcpy(_Ptr, _Left_first, _Left_size * sizeof(wchar_t));\r\n                    _Ptr += _Left_size;\r\n                    if (_Is_slash_needed) {\r\n                        *_Ptr++ = preferred_separator;\r\n                    }\r\n                    _CSTD memcpy(_Ptr, _Right_first, _Right_size * sizeof(wchar_t));\r\n                    return _Size;\r\n                });\r\n                return _Tmp;\r\n            }\r\n\r\n            path _Tmp = _Left;\r\n            _Tmp /= _Right;\r\n            return _Tmp;\r\n        }\r\n\r\n    private:\r\n        string_type _Text;\r\n    };\r\n\r\n    _EXPORT_STD template <class _Src, enable_if_t<_Is_Source<_Src>, int> = 0>\r\n    _CXX20_DEPRECATE_U8PATH _NODISCARD path u8path(const _Src& _Source) { // construct a path from UTF-8 _Source\r\n        return path{_Convert_Source_to_wide(_Source, _Utf8_conversion{})};\r\n    }\r\n\r\n    _EXPORT_STD template <class _InIt>\r\n    _CXX20_DEPRECATE_U8PATH _NODISCARD path u8path(_InIt _First, _InIt _Last) {\r\n        // construct a path from UTF-8 [_First, _Last)\r\n        static_assert(_Is_EcharT<_Iter_value_t<_InIt>>, \"invalid value_type, see N4950 [fs.req]/3\");\r\n        return path{_Convert_range_to_wide(_First, _Last, _Utf8_conversion{})};\r\n    }\r\n\r\n    template <class _Base_iter>\r\n    class _Path_iterator { // almost bidirectional iterator for path\r\n    public:\r\n        // Note that the path::iterator can be decremented and can be dereferenced multiple times,\r\n        // but doesn't actually meet the forward iterator requirements. See N4950 [fs.path.itr]/2:\r\n        //  ... for dereferenceable iterators a and b of type path::iterator with a == b, there is no requirement\r\n        //  that *a and *b are bound to the same object\r\n        // This means that you can't give path::iterator to std::reverse_iterator, as operator* there ends\r\n        // up returning a reference to a destroyed temporary. Other algorithms requiring bidirectional\r\n        // iterators may be similarly affected, so we've marked input for now.\r\n        // Also note, in the vector<path>(p.begin(), p.end()) case, the user actually probably wants\r\n        // input behavior, as distance()-ing a path is fairly expensive.\r\n        using iterator_category = input_iterator_tag;\r\n        using value_type        = path;\r\n        using difference_type   = ptrdiff_t;\r\n        using pointer           = const path*;\r\n        using reference         = const path&;\r\n\r\n        _Path_iterator() = default;\r\n\r\n        _Path_iterator(const _Base_iter& _Position_, const path* _Mypath_) noexcept\r\n            : _Position(_Position_), _Element(), _Mypath(_Mypath_) {}\r\n\r\n        _Path_iterator(const _Base_iter& _Position_, const path& _Element_, const path* _Mypath_)\r\n            : _Position(_Position_), _Element(_Element_), _Mypath(_Mypath_) {}\r\n        _Path_iterator(const _Base_iter& _Position_, path&& _Element_, const path* _Mypath_)\r\n            : _Position(_Position_), _Element(_STD move(_Element_)), _Mypath(_Mypath_) {}\r\n\r\n        _Path_iterator(const _Path_iterator&)            = default;\r\n        _Path_iterator(_Path_iterator&&)                 = default;\r\n        _Path_iterator& operator=(const _Path_iterator&) = default;\r\n        _Path_iterator& operator=(_Path_iterator&&)      = default;\r\n\r\n        _NODISCARD reference operator*() const noexcept {\r\n            return _Element;\r\n        }\r\n\r\n        _NODISCARD pointer operator->() const noexcept {\r\n            return _STD addressof(_Element);\r\n        }\r\n\r\n        _Path_iterator& operator++() {\r\n            const auto& _Text = _Mypath->native();\r\n            const auto _Size  = _Element.native().size();\r\n            _Adl_verify_range(_Text.begin(), _Position); // engaged when *this is checked\r\n            const auto _Begin = _Text.data();\r\n            const auto _End   = _Begin + _Text.size();\r\n            _Adl_verify_range(_Begin, _Position); // engaged when *this is unchecked\r\n            if (_Begin == _Get_unwrapped(_Position)) { // test if the next element will be root-directory\r\n                _Position += static_cast<ptrdiff_t>(_Size);\r\n                const auto _First              = _Text.data();\r\n                const auto _Last               = _First + _Text.size();\r\n                const auto _Root_name_end      = _Find_root_name_end(_First, _Last);\r\n                const auto _Root_directory_end = _STD find_if_not(_Root_name_end, _Last, _Is_slash);\r\n                if (_First != _Root_name_end && _Root_name_end != _Root_directory_end) {\r\n                    // current element is root-name, root-directory exists, so next is root-directory\r\n                    _Element._Text.assign(_Root_name_end, _Root_directory_end);\r\n                    return *this;\r\n                }\r\n\r\n                // If we get here, either there is no root-name, and by !_Is_slash(*_Position), no root-directory,\r\n                // or, current element is root-name, and root-directory doesn't exist.\r\n                // Either way, the next element is the first of relative-path\r\n            } else if (_Is_slash(*_Position)) { // current element is root-directory, or the \"magic empty path\"\r\n                if (_Size == 0) { // current element was \"magic empty path\", become end()\r\n                    ++_Position;\r\n                    return *this;\r\n                }\r\n\r\n                // current element was root-directory, advance to relative-path\r\n                _Position += static_cast<ptrdiff_t>(_Size);\r\n            } else { // current element is one of relative-path\r\n                _Position += static_cast<ptrdiff_t>(_Size);\r\n            }\r\n\r\n            if (_Get_unwrapped(_Position) == _End) {\r\n                _Element.clear();\r\n                return *this;\r\n            }\r\n\r\n            // at this point, the next element is a standard filename from relative_path(), and _Position\r\n            // points at the preferred-separator or fallback-separator after the previous element\r\n            while (_Is_slash(*_Position)) { // advance to the start of the following path element\r\n                if (_Get_unwrapped(++_Position) == _End) { // \"magic\" empty element selected\r\n                    --_Position;\r\n                    _Element.clear();\r\n                    return *this;\r\n                }\r\n            }\r\n\r\n            _Element._Text.assign(_Get_unwrapped(_Position), _STD find_if(_Get_unwrapped(_Position), _End, _Is_slash));\r\n            return *this;\r\n        }\r\n\r\n        _Path_iterator operator++(int) {\r\n            _Path_iterator _Tmp = *this;\r\n            ++*this;\r\n            return _Tmp;\r\n        }\r\n\r\n        _Path_iterator& operator--() {\r\n            const auto& _Text = _Mypath->native();\r\n            _Adl_verify_range(_Text.begin(), _Position); // engaged when *this is checked\r\n            const auto _First = _Text.data();\r\n            _Adl_verify_range(_First, _Position); // engaged when *this is unchecked\r\n            const auto _Last                   = _First + _Text.size();\r\n            const auto _Root_name_end_ptr      = _Find_root_name_end(_First, _Last);\r\n            const auto _Root_directory_end_ptr = _STD find_if_not(_Root_name_end_ptr, _Last, _Is_slash);\r\n\r\n            if (_Root_name_end_ptr != _Root_directory_end_ptr && _Get_unwrapped(_Position) == _Root_directory_end_ptr) {\r\n                // current element is the first of relative-path, and the prev element is root-directory\r\n                _Seek_wrapped(_Position, _Root_name_end_ptr);\r\n                _Element._Text.assign(\r\n                    _Root_name_end_ptr, static_cast<size_t>(_Root_directory_end_ptr - _Root_name_end_ptr));\r\n                return *this;\r\n            }\r\n\r\n            if (_First != _Root_name_end_ptr && _Get_unwrapped(_Position) == _Root_name_end_ptr) {\r\n                // current element is root-directory or, if that doesn't exist, first\r\n                // element of relative-path prev element therefore is root-name\r\n                _Seek_wrapped(_Position, _First);\r\n                _Element._Text.assign(_First, static_cast<size_t>(_Root_name_end_ptr - _First));\r\n                return *this;\r\n            }\r\n\r\n            // from here, the result will be somewhere in relative-path\r\n            if (_Get_unwrapped(_Position) == _Last && _Is_slash(_Position[-1])) { // target is \"magic empty path\"\r\n                --_Position;\r\n                _Element.clear();\r\n                return *this;\r\n            }\r\n\r\n            while (_Root_directory_end_ptr != _Get_unwrapped(_Position) && _Is_slash(_Position[-1])) {\r\n                --_Position;\r\n            }\r\n\r\n            const auto _New_end = _Position;\r\n            while (_Root_directory_end_ptr != _Get_unwrapped(_Position) && !_Is_slash(_Position[-1])) {\r\n                --_Position;\r\n            }\r\n\r\n            _Element._Text.assign(_Position, _New_end);\r\n            return *this;\r\n        }\r\n\r\n        _Path_iterator operator--(int) {\r\n            _Path_iterator _Tmp = *this;\r\n            --*this;\r\n            return _Tmp;\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const _Path_iterator& _Lhs, const _Path_iterator& _Rhs) {\r\n            return _Lhs._Position == _Rhs._Position;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const _Path_iterator& _Lhs, const _Path_iterator& _Rhs) {\r\n            return _Lhs._Position != _Rhs._Position;\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        friend void _Verify_range(const _Path_iterator& _Lhs, const _Path_iterator& _Rhs) {\r\n            _Verify_range(_Lhs._Position, _Rhs._Position);\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        using _Prevent_inheriting_unwrap = _Path_iterator;\r\n\r\n        template <class _Iter2 = _Base_iter, enable_if_t<_Unwrappable_v<const _Iter2&>, int> = 0>\r\n        _NODISCARD _Path_iterator<_Unwrapped_t<const _Iter2&>> _Unwrapped() const& {\r\n            return {_Position._Unwrapped(), _Element, _Mypath};\r\n        }\r\n        template <class _Iter2 = _Base_iter, enable_if_t<_Unwrappable_v<_Iter2>, int> = 0>\r\n        _NODISCARD _Path_iterator<_Unwrapped_t<_Iter2>> _Unwrapped() && noexcept {\r\n            _STL_INTERNAL_STATIC_ASSERT(_Has_nothrow_unwrapped<_Iter2>);\r\n            return {_Position._Unwrapped(), _STD move(_Element), _Mypath};\r\n        }\r\n\r\n        static constexpr bool _Unwrap_when_unverified = _Do_unwrap_when_unverified_v<_Base_iter>;\r\n\r\n        template <class _Other>\r\n        friend class _Path_iterator;\r\n\r\n        template <class _Other, enable_if_t<_Wrapped_seekable_v<_Base_iter, const _Other&>, int> = 0>\r\n        constexpr void _Seek_to(const _Path_iterator<_Other>& _It) {\r\n            _Position._Seek_to(_It._Position);\r\n            _Element = _It._Element;\r\n            // _Mypath intentionally unchanged\r\n        }\r\n\r\n    private:\r\n        // if the current element is the \"magic empty path\",\r\n        //   points to preferred-separator or fallback-separator immediately before\r\n        // otherwise, points to the first element of _Element\r\n        _Base_iter _Position{};\r\n        path _Element{};\r\n        const path* _Mypath{};\r\n    };\r\n\r\n    _EXPORT_STD inline void swap(path& _Left, path& _Right) noexcept {\r\n        _Left.swap(_Right);\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline size_t hash_value(const path& _Path) noexcept {\r\n        // calculate a hash value for _Path\r\n        // See path::compare; we effectively decompose the path with special handling for root_name, root_directory.\r\n        // Examples:\r\n        // c:\\cat\\dog =>  {\"c:\", true , \"cat\", \"dog\"}\r\n        // c:cat\\dog =>   {\"c:\", false, \"cat\", \"dog\"}\r\n        // \\cat\\dog =>    {\"\"  , true , \"cat\", \"dog\"}\r\n        // cat\\dog =>     {\"\"  , false, \"cat\", \"dog\"}\r\n        // c:\\cat\\dog\\ => {\"c:\", true , \"cat\", \"dog\", \"\"}\r\n        size_t _Val       = _FNV_offset_basis;\r\n        const auto& _Text = _Path.native();\r\n        const auto _First = _Text.data();\r\n        const auto _Last  = _First + _Text.size();\r\n\r\n        // First, like compare, examine the raw root_name directly\r\n        auto _Next = _Find_root_name_end(_First, _Last);\r\n        _Val       = _Fnv1a_append_range(_Val, _First, _Next);\r\n\r\n        // The remaining path elements, including root_directory, are effectively hashed by normalizing each\r\n        // directory-separator into a single preferred-separator when that goes into the hash function.\r\n        // path::compare has special handling for root_directory to ensure c:\\cat sorts before c:cat, but hash only\r\n        // cares about equality, so no special case is necessary.\r\n        bool _Slash_inserted = false;\r\n        for (; _Next != _Last; ++_Next) {\r\n            if (_Is_slash(*_Next)) {\r\n                if (!_Slash_inserted) {\r\n                    _Val            = _Fnv1a_append_value(_Val, path::preferred_separator);\r\n                    _Slash_inserted = true;\r\n                }\r\n            } else {\r\n                _Val            = _Fnv1a_append_value(_Val, *_Next);\r\n                _Slash_inserted = false;\r\n            }\r\n        }\r\n\r\n        return _Val;\r\n    }\r\n\r\n    _NODISCARD inline bool _Starts_with_root_name(const wchar_t* const _First, const wchar_t* const _Last) {\r\n        return _Find_root_name_end(_First, _Last) != _First;\r\n    }\r\n\r\n    _NODISCARD inline bool _Relative_path_contains_root_name(const path& _Path) {\r\n        const auto& _Native = _Path.native();\r\n        auto _First         = _Native.data();\r\n        const auto _Last    = _First + _Native.size();\r\n        _First              = _Find_relative_path(_First, _Last);\r\n        while (_First != _Last) {\r\n            const auto _Next = _STD find_if(_First, _Last, _Is_slash);\r\n            if (_Starts_with_root_name(_First, _Next)) {\r\n                return true;\r\n            }\r\n            _First = _STD find_if_not(_Next, _Last, _Is_slash);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    _NODISCARD inline path path::lexically_relative(const path& _Base_raw) const {\r\n        constexpr wstring_view _Dot     = L\".\"sv;\r\n        constexpr wstring_view _Dot_dot = L\"..\"sv;\r\n\r\n        // LWG-3699: `lexically_relative` on UNC drive paths (`\\\\?\\C:\\...`) results in a default-constructed value\r\n        // This avoids doing any unnecessary copies;\r\n        // the return value of `relative_path()` is lifetime-extended if necessary.\r\n        const bool _Both_unc_paths = _Is_drive_prefix_with_slash_slash_question(_Text)\r\n                                  && _Is_drive_prefix_with_slash_slash_question(_Base_raw._Text);\r\n        const path& _This = _Both_unc_paths ? relative_path() : *this;\r\n        const path& _Base = _Both_unc_paths ? _Base_raw.relative_path() : _Base_raw;\r\n\r\n        path _Result;\r\n\r\n        if (_This.root_name() != _Base.root_name() || _This.is_absolute() != _Base.is_absolute()\r\n            || (!_This.has_root_directory() && _Base.has_root_directory())\r\n            || (_Relative_path_contains_root_name(_This) || _Relative_path_contains_root_name(_Base))) {\r\n            return _Result;\r\n        }\r\n\r\n        const iterator _This_end   = _This.end();\r\n        const iterator _Base_begin = _Base.begin();\r\n        const iterator _Base_end   = _Base.end();\r\n\r\n        auto _Mismatched  = _STD mismatch(_This.begin(), _This_end, _Base_begin, _Base_end);\r\n        iterator& _A_iter = _Mismatched.first;\r\n        iterator& _B_iter = _Mismatched.second;\r\n\r\n        if (_A_iter == _This_end && _B_iter == _Base_end) {\r\n            _Result = _Dot;\r\n            return _Result;\r\n        }\r\n\r\n        { // Skip root-name and root-directory elements, N4950 [fs.path.itr]/4.1, 4.2\r\n            ptrdiff_t _B_dist = _STD distance(_Base_begin, _B_iter);\r\n\r\n            const ptrdiff_t _Base_root_dist =\r\n                static_cast<ptrdiff_t>(_Base.has_root_name()) + static_cast<ptrdiff_t>(_Base.has_root_directory());\r\n\r\n            while (_B_dist < _Base_root_dist) {\r\n                ++_B_iter;\r\n                ++_B_dist;\r\n            }\r\n        }\r\n\r\n        ptrdiff_t _Num = 0;\r\n\r\n        for (; _B_iter != _Base_end; ++_B_iter) {\r\n            const path& _Elem = *_B_iter;\r\n\r\n            if (_Elem.empty()) { // skip empty element, N4950 [fs.path.itr]/4.4\r\n            } else if (_Elem == _Dot) { // skip filename elements that are dot, N4950 [fs.path.gen]/3.6\r\n            } else if (_Elem == _Dot_dot) {\r\n                --_Num;\r\n            } else {\r\n                ++_Num;\r\n            }\r\n        }\r\n\r\n        if (_Num < 0) {\r\n            return _Result;\r\n        }\r\n\r\n        if (_Num == 0 && (_A_iter == _This_end || _A_iter->empty())) {\r\n            _Result = _Dot;\r\n            return _Result;\r\n        }\r\n\r\n        for (; _Num > 0; --_Num) {\r\n            _Result /= _Dot_dot;\r\n        }\r\n\r\n        for (; _A_iter != _This_end; ++_A_iter) {\r\n            _Result /= *_A_iter;\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD inline path::iterator path::begin() const {\r\n        const auto _First         = _Text.data();\r\n        const auto _Last          = _First + _Text.size();\r\n        const auto _Root_name_end = _Find_root_name_end(_First, _Last);\r\n        const wchar_t* _First_end;\r\n        if (_First == _Root_name_end) { // first element isn't root-name\r\n            auto _Root_directory_end = _STD find_if_not(_Root_name_end, _Last, _Is_slash);\r\n            if (_First == _Root_directory_end) { // first element is first relative-path entry\r\n                _First_end = _STD find_if(_Root_directory_end, _Last, _Is_slash);\r\n            } else { // first element is root-directory\r\n                _First_end = _Root_directory_end;\r\n            }\r\n        } else { // first element is root-name\r\n            _First_end = _Root_name_end;\r\n        }\r\n\r\n        return iterator(_Text.cbegin(), wstring_view(_First, static_cast<size_t>(_First_end - _First)), this);\r\n    }\r\n\r\n    _NODISCARD inline path::iterator path::end() const noexcept /* strengthened */ {\r\n        return iterator(_Text.cend(), this);\r\n    }\r\n\r\n    _EXPORT_STD class _NODISCARD filesystem_error : public system_error { // base of all filesystem-error exceptions\r\n    public:\r\n        filesystem_error(const string& _Message, const error_code _Errcode)\r\n            : system_error(_Errcode, _Message), _What(runtime_error::what()) {}\r\n\r\n        filesystem_error(const string& _Message, const path& _Path1_arg, const error_code _Errcode)\r\n            : system_error(_Errcode, _Message), _Path1(_Path1_arg), _Path2(),\r\n              _What(_Pretty_message(runtime_error::what(), _Path1_arg)) {}\r\n\r\n        filesystem_error(\r\n            const string& _Message, const path& _Path1_arg, const path& _Path2_arg, const error_code _Errcode)\r\n            : system_error(_Errcode, _Message), _Path1(_Path1_arg), _Path2(_Path2_arg),\r\n              _What(_Pretty_message(runtime_error::what(), _Path1_arg, _Path2_arg)) {}\r\n\r\n        _NODISCARD const path& path1() const noexcept {\r\n            return _Path1;\r\n        }\r\n\r\n        _NODISCARD const path& path2() const noexcept {\r\n            return _Path2;\r\n        }\r\n\r\n        _NODISCARD const char* what() const noexcept override {\r\n            return _What.c_str();\r\n        }\r\n\r\n    private:\r\n        static string _Pretty_message(const string_view _Op, const path& _Path1, const path& _Path2 = {}) {\r\n            string _Result;\r\n            // Convert the paths to narrow encoding in a way that gracefully handles non-encodable characters\r\n            const auto _Code_page   = __std_fs_code_page();\r\n            const string _Path1_str = _Convert_wide_to_narrow_replace_chars<char_traits<char>>(\r\n                _Code_page, _Path1.native(), allocator<char>{});\r\n            const string _Path2_str = _Convert_wide_to_narrow_replace_chars<char_traits<char>>(\r\n                _Code_page, _Path2.native(), allocator<char>{});\r\n            _Result.reserve(_Op.size() + (_Path2_str.empty() ? 4 : 8) + _Path1_str.size() + _Path2_str.size());\r\n            _Result += _Op;\r\n            _Result += R\"(: \")\"sv; // 3 chars\r\n            _Result += _Path1_str;\r\n            if (!_Path2_str.empty()) {\r\n                _Result += R\"(\", \")\"sv; // 4 chars\r\n                _Result += _Path2_str;\r\n            }\r\n            _Result += '\"'; // 1 char\r\n            return _Result;\r\n        }\r\n\r\n        path _Path1;\r\n        path _Path2;\r\n        string _What;\r\n\r\n#if !_HAS_EXCEPTIONS\r\n    protected:\r\n        void _Doraise() const override { // perform class-specific exception handling\r\n            _RAISE(*this);\r\n        }\r\n#endif // !_HAS_EXCEPTIONS\r\n    };\r\n\r\n    [[noreturn]] inline void _Throw_fs_error(const char* _Op, __std_win_error _Error) {\r\n        _THROW(filesystem_error(_Op, _Make_ec(_Error)));\r\n    }\r\n\r\n    [[noreturn]] inline void _Throw_fs_error(const char* _Op, __std_win_error _Error, const path& _Path1) {\r\n        _THROW(filesystem_error(_Op, _Path1, _Make_ec(_Error)));\r\n    }\r\n\r\n    [[noreturn]] inline void _Throw_fs_error(\r\n        const char* _Op, __std_win_error _Error, const path& _Path1, const path& _Path2) {\r\n        _THROW(filesystem_error(_Op, _Path1, _Path2, _Make_ec(_Error)));\r\n    }\r\n\r\n    [[noreturn]] inline void _Throw_fs_error(const char* _Op, const error_code& _Error) {\r\n        _THROW(filesystem_error(_Op, _Error));\r\n    }\r\n\r\n    [[noreturn]] inline void _Throw_fs_error(const char* _Op, const error_code& _Error, const path& _Path1) {\r\n        _THROW(filesystem_error(_Op, _Path1, _Error));\r\n    }\r\n\r\n    [[noreturn]] inline void _Throw_fs_error(\r\n        const char* _Op, const error_code& _Error, const path& _Path1, const path& _Path2) {\r\n        _THROW(filesystem_error(_Op, _Path1, _Path2, _Error));\r\n    }\r\n\r\n    _EXPORT_STD enum class file_type {\r\n        none,\r\n        not_found,\r\n        regular,\r\n        directory,\r\n        symlink,\r\n\r\n        block, // not used on Windows\r\n        character, // not used in this implementation; theoretically some special files like CON\r\n                   // might qualify, but querying for this is extremely expensive and unlikely\r\n                   // to be useful in practice\r\n\r\n        fifo, // not used on Windows (\\\\.\\pipe named pipes don't behave exactly like POSIX fifos)\r\n        socket, // not used on Windows\r\n        unknown,\r\n\r\n        junction // implementation-defined value indicating an NT junction\r\n    };\r\n\r\n    _EXPORT_STD enum class perms {\r\n        none = 0,\r\n\r\n        owner_read  = 0400,\r\n        owner_write = 0200,\r\n        owner_exec  = 0100,\r\n        owner_all   = 0700,\r\n\r\n        group_read  = 0040,\r\n        group_write = 0020,\r\n        group_exec  = 0010,\r\n        group_all   = 0070,\r\n\r\n        others_read  = 0004,\r\n        others_write = 0002,\r\n        others_exec  = 0001,\r\n        others_all   = 0007,\r\n\r\n        all        = 0777, // returned for all files without FILE_ATTRIBUTE_READONLY\r\n        set_uid    = 04000,\r\n        set_gid    = 02000,\r\n        sticky_bit = 01000,\r\n        mask       = 07777,\r\n        unknown    = 0xFFFF,\r\n\r\n        _All_write               = owner_write | group_write | others_write,\r\n        _File_attribute_readonly = all & ~_All_write // returned for files with FILE_ATTRIBUTE_READONLY\r\n    };\r\n\r\n    _BITMASK_OPS(_EXPORT_STD, perms)\r\n\r\n    _EXPORT_STD enum class copy_options {\r\n        none = static_cast<int>(__std_fs_copy_options::_None),\r\n\r\n        _Existing_mask     = static_cast<int>(__std_fs_copy_options::_Existing_mask),\r\n        skip_existing      = static_cast<int>(__std_fs_copy_options::_Skip_existing),\r\n        overwrite_existing = static_cast<int>(__std_fs_copy_options::_Overwrite_existing),\r\n        update_existing    = static_cast<int>(__std_fs_copy_options::_Update_existing),\r\n\r\n        recursive = 0x10,\r\n\r\n        _Symlinks_mask = 0xF00,\r\n        copy_symlinks  = 0x100,\r\n        skip_symlinks  = 0x200,\r\n\r\n        _Copy_form_mask   = 0xF000,\r\n        directories_only  = 0x1000,\r\n        create_symlinks   = 0x2000,\r\n        create_hard_links = 0x4000,\r\n\r\n        _Unspecified_copy_prevention_tag = 0x10000 // to be removed by LWG-3057\r\n    };\r\n\r\n    _BITMASK_OPS(_EXPORT_STD, copy_options)\r\n\r\n    _EXPORT_STD class file_status {\r\n    public:\r\n        // [fs.file_status.cons], constructors and destructor\r\n        file_status() noexcept = default;\r\n        explicit file_status(file_type _Ft, perms _Perms = perms::unknown) noexcept : _Myftype(_Ft), _Myperms(_Perms) {}\r\n        file_status(const file_status&) noexcept = default;\r\n        file_status(file_status&&) noexcept      = default;\r\n        ~file_status() noexcept                  = default;\r\n\r\n        // assignments\r\n        file_status& operator=(const file_status&) noexcept = default;\r\n        file_status& operator=(file_status&&) noexcept      = default;\r\n\r\n        // [fs.file_status.mods], modifiers\r\n        void type(file_type _Ft) noexcept {\r\n            _Myftype = _Ft;\r\n        }\r\n\r\n        void permissions(perms _Perms) noexcept {\r\n            _Myperms = _Perms;\r\n        }\r\n\r\n        // [fs.file_status.obs], observers\r\n        _NODISCARD file_type type() const noexcept {\r\n            return _Myftype;\r\n        }\r\n\r\n        _NODISCARD perms permissions() const noexcept {\r\n            return _Myperms;\r\n        }\r\n\r\n#if _HAS_CXX20\r\n        _NODISCARD friend bool operator==(const file_status& _Lhs, const file_status& _Rhs) noexcept {\r\n            return _Lhs._Myftype == _Rhs._Myftype && _Lhs._Myperms == _Rhs._Myperms;\r\n        }\r\n#endif // _HAS_CXX20\r\n\r\n        void _Refresh(const __std_win_error _Error, const __std_fs_stats& _Stats) noexcept {\r\n            if (_Error == __std_win_error::_Success) {\r\n                const auto _Attrs = _Stats._Attributes;\r\n\r\n                if (_Bitmask_includes_any(_Attrs, __std_fs_file_attr::_Readonly)) {\r\n                    this->permissions(perms::_File_attribute_readonly);\r\n                } else {\r\n                    this->permissions(perms::all);\r\n                }\r\n\r\n                if (_Bitmask_includes_any(_Attrs, __std_fs_file_attr::_Reparse_point)) {\r\n                    if (_Stats._Reparse_point_tag == __std_fs_reparse_tag::_Symlink) {\r\n                        this->type(file_type::symlink);\r\n                        return;\r\n                    }\r\n\r\n                    if (_Stats._Reparse_point_tag == __std_fs_reparse_tag::_Mount_point) {\r\n                        this->type(file_type::junction);\r\n                        return;\r\n                    }\r\n\r\n                    // All other reparse points considered ordinary files or directories\r\n                }\r\n\r\n                if (_Bitmask_includes_any(_Attrs, __std_fs_file_attr::_Directory)) {\r\n                    this->type(file_type::directory);\r\n                } else {\r\n                    this->type(file_type::regular);\r\n                }\r\n\r\n                return;\r\n            }\r\n\r\n            this->permissions(perms::unknown);\r\n            this->type(__std_is_file_not_found(_Error) ? file_type::not_found : file_type::none);\r\n        }\r\n\r\n    private:\r\n        file_type _Myftype = file_type::none;\r\n        perms _Myperms     = perms::unknown;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD inline bool exists(const file_status _Status) noexcept {\r\n        // tests whether _Status indicates an existing file\r\n        switch (_Status.type()) {\r\n        case file_type::none:\r\n        case file_type::not_found:\r\n            return false;\r\n        case file_type::regular:\r\n        case file_type::directory:\r\n        case file_type::symlink:\r\n        case file_type::block:\r\n        case file_type::character:\r\n        case file_type::fifo:\r\n        case file_type::socket:\r\n        case file_type::unknown:\r\n        case file_type::junction:\r\n        default:\r\n            return true;\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_block_file(const file_status _Status) noexcept {\r\n        // tests whether _Status indicates a block file\r\n        return _Status.type() == file_type::block;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_character_file(const file_status _Status) noexcept {\r\n        // tests whether _Status indicates a character file\r\n        return _Status.type() == file_type::character;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_directory(const file_status _Status) noexcept {\r\n        // tests whether _Status indicates a directory\r\n        return _Status.type() == file_type::directory;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_fifo(const file_status _Status) noexcept {\r\n        // tests whether _Status indicates a fifo\r\n        return _Status.type() == file_type::fifo;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_other(const file_status _Status) noexcept {\r\n        // tests whether _Status indicates other file types\r\n        switch (_Status.type()) {\r\n        case file_type::none:\r\n        case file_type::not_found:\r\n        case file_type::regular:\r\n        case file_type::directory:\r\n        case file_type::symlink:\r\n            return false;\r\n        case file_type::block:\r\n        case file_type::character:\r\n        case file_type::fifo:\r\n        case file_type::socket:\r\n        case file_type::unknown:\r\n        case file_type::junction:\r\n        default:\r\n            return true;\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_regular_file(const file_status _Status) noexcept {\r\n        // tests whether _Status indicates a regular file\r\n        return _Status.type() == file_type::regular;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_socket(const file_status _Status) noexcept {\r\n        // tests whether _Status indicates a socket\r\n        return _Status.type() == file_type::socket;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_symlink(const file_status _Status) noexcept {\r\n        // tests whether _Status indicates a symlink\r\n        return _Status.type() == file_type::symlink;\r\n    }\r\n\r\n    struct _File_status_and_error {\r\n        file_status _Status;\r\n        __std_win_error _Error;\r\n\r\n        _NODISCARD bool _Not_good() const noexcept {\r\n            // [fs.op.status]/Throws: result values of file_status(file_type::not_found) and\r\n            // file_status(file_type::unknown) are not considered failures and do not cause an exception to be thrown.\r\n            return _Error != __std_win_error::_Success && _Status.type() != file_type::not_found\r\n                && _Status.type() != file_type::unknown;\r\n        }\r\n    };\r\n\r\n    inline constexpr auto _Status_stats_flags =\r\n        __std_fs_stats_flags::_Attributes | __std_fs_stats_flags::_Follow_symlinks;\r\n\r\n    inline constexpr auto _Symlink_status_stats_flags =\r\n        __std_fs_stats_flags::_Attributes | __std_fs_stats_flags::_Reparse_tag;\r\n\r\n#if _HAS_CXX20\r\n    _EXPORT_STD using file_time_type = _CHRONO time_point<_CHRONO file_clock>;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    using file_time_type = _CHRONO time_point<filesystem::_File_time_clock>;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    struct _Dir_enum_impl;\r\n    struct _Recursive_dir_enum_impl;\r\n\r\n    _EXPORT_STD class directory_entry {\r\n    public:\r\n        // [fs.dir.entry.cons], constructors and destructor\r\n        directory_entry() noexcept : _Cached_data{}, _Path() {}\r\n\r\n        directory_entry(const directory_entry&)     = default;\r\n        directory_entry(directory_entry&&) noexcept = default;\r\n        explicit directory_entry(const filesystem::path& _Path_arg) : _Cached_data{}, _Path(_Path_arg) {\r\n            refresh();\r\n        }\r\n\r\n        directory_entry(const filesystem::path& _Path_arg, error_code& _Ec) : _Cached_data{}, _Path(_Path_arg) {\r\n            refresh(_Ec);\r\n            if (_Ec) {\r\n                _Path.clear();\r\n            }\r\n        }\r\n\r\n        ~directory_entry() = default;\r\n\r\n        // assignments\r\n        directory_entry& operator=(const directory_entry&)     = default;\r\n        directory_entry& operator=(directory_entry&&) noexcept = default;\r\n\r\n        // [fs.dir.entry.mods], modifiers\r\n        void assign(const filesystem::path& _Path_arg) {\r\n            _Path.assign(_Path_arg);\r\n            refresh();\r\n        }\r\n\r\n        void assign(const filesystem::path& _Path_arg, error_code& _Ec) {\r\n            _Ec.clear(); // for exception safety\r\n            _Path.assign(_Path_arg);\r\n            refresh(_Ec);\r\n        }\r\n\r\n        void replace_filename(const filesystem::path& _Path_arg) {\r\n            _Path.replace_filename(_Path_arg);\r\n            refresh();\r\n        }\r\n\r\n        void replace_filename(const filesystem::path& _Path_arg, error_code& _Ec) {\r\n            _Ec.clear(); // for exception safety\r\n            _Path.replace_filename(_Path_arg);\r\n            refresh(_Ec);\r\n        }\r\n\r\n        void refresh() {\r\n            const auto _Error = _Refresh(_Cached_data, _Path);\r\n            if (_Error != __std_win_error::_Success && !__std_is_file_not_found(_Error)) {\r\n                _Throw_fs_error(\"directory_entry::refresh\", _Error, _Path);\r\n            }\r\n        }\r\n\r\n        void refresh(error_code& _Ec) noexcept {\r\n            _Ec.clear();\r\n            const auto _Error = _Refresh(_Cached_data, _Path);\r\n            if (_Error != __std_win_error::_Success && !__std_is_file_not_found(_Error)) {\r\n                _Ec = _Make_ec(_Error);\r\n            }\r\n        }\r\n\r\n    private:\r\n        _NODISCARD bool _Has_cached_attribute(const __std_fs_file_attr _Attrs) const noexcept {\r\n            return _Bitmask_includes_any(_Cached_data._Attributes, _Attrs);\r\n        }\r\n\r\n    public:\r\n        // [fs.dir.entry.obs], observers\r\n        _NODISCARD const filesystem::path& path() const noexcept {\r\n            return _Path;\r\n        }\r\n\r\n        operator const filesystem::path&() const noexcept {\r\n            return _Path;\r\n        }\r\n\r\n        _NODISCARD bool exists() const {\r\n            const auto _Type = this->status().type();\r\n            return _Type != file_type::not_found && _Type != file_type::none;\r\n        }\r\n\r\n        _NODISCARD bool exists(error_code& _Ec) const noexcept {\r\n            const auto _Type = this->status(_Ec).type();\r\n            return _Type != file_type::not_found && _Type != file_type::none;\r\n        }\r\n\r\n        _NODISCARD bool is_block_file() const {\r\n            return false;\r\n        }\r\n\r\n        _NODISCARD bool is_block_file(error_code& _Ec) const noexcept {\r\n            _Ec.clear();\r\n            return false;\r\n        }\r\n\r\n        _NODISCARD bool is_character_file() const {\r\n            return false;\r\n        }\r\n\r\n        _NODISCARD bool is_character_file(error_code& _Ec) const noexcept {\r\n            _Ec.clear();\r\n            return false;\r\n        }\r\n\r\n        _NODISCARD bool is_directory() const {\r\n            return _STD filesystem::is_directory(this->status());\r\n        }\r\n\r\n        _NODISCARD bool is_directory(error_code& _Ec) const noexcept {\r\n            return _STD filesystem::is_directory(this->status(_Ec));\r\n        }\r\n\r\n        _NODISCARD bool is_fifo() const {\r\n            return false;\r\n        }\r\n\r\n        _NODISCARD bool is_fifo(error_code& _Ec) const noexcept {\r\n            _Ec.clear();\r\n            return false;\r\n        }\r\n\r\n        _NODISCARD bool is_other() const {\r\n            return _STD filesystem::is_other(this->status());\r\n        }\r\n\r\n        _NODISCARD bool is_other(error_code& _Ec) const noexcept {\r\n            return _STD filesystem::is_other(this->status(_Ec));\r\n        }\r\n\r\n        _NODISCARD bool is_regular_file() const {\r\n            return _STD filesystem::is_regular_file(this->status());\r\n        }\r\n\r\n        _NODISCARD bool is_regular_file(error_code& _Ec) const noexcept {\r\n            return _STD filesystem::is_regular_file(this->status(_Ec));\r\n        }\r\n\r\n        _NODISCARD bool is_socket() const {\r\n            return false;\r\n        }\r\n\r\n        _NODISCARD bool is_socket(error_code& _Ec) const noexcept {\r\n            _Ec.clear();\r\n            return false;\r\n        }\r\n\r\n        _NODISCARD bool _Is_symlink_or_junction() const noexcept {\r\n            return _Has_cached_attribute(__std_fs_file_attr::_Reparse_point)\r\n                && (_Cached_data._Reparse_point_tag == __std_fs_reparse_tag::_Symlink\r\n                    || _Cached_data._Reparse_point_tag == __std_fs_reparse_tag::_Mount_point);\r\n        }\r\n\r\n        _NODISCARD bool is_symlink() const {\r\n            return _STD filesystem::is_symlink(this->symlink_status());\r\n        }\r\n\r\n        _NODISCARD bool is_symlink(error_code& _Ec) const noexcept {\r\n            return _STD filesystem::is_symlink(this->symlink_status(_Ec));\r\n        }\r\n\r\n        _NODISCARD bool _Available(const __std_fs_stats_flags _Flags) const noexcept {\r\n            return _Bitmask_includes_any(_Cached_data._Available, _Flags);\r\n        }\r\n\r\n    private:\r\n        _NODISCARD __std_win_error _File_size(uintmax_t& _Result) const noexcept {\r\n            if (_Available(__std_fs_stats_flags::_File_size)) {\r\n                _Result = _Cached_data._File_size;\r\n                return __std_win_error::_Success;\r\n            }\r\n\r\n            __std_fs_stats _Stats;\r\n            constexpr auto _Flags = __std_fs_stats_flags::_File_size | __std_fs_stats_flags::_Follow_symlinks;\r\n            const auto _Error =\r\n                __std_fs_get_stats(_Path.c_str(), &_Stats, _Flags, _Cached_data._Symlink_hint_attributes());\r\n            if (_Error == __std_win_error::_Success) {\r\n                _Result = _Stats._File_size;\r\n            } else {\r\n                _Result = static_cast<uintmax_t>(-1);\r\n            }\r\n\r\n            return _Error;\r\n        }\r\n\r\n    public:\r\n        _NODISCARD uintmax_t file_size() const {\r\n            uintmax_t _Result;\r\n            const auto _Error = _File_size(_Result);\r\n            if (_Error != __std_win_error::_Success) {\r\n                _Throw_fs_error(\"directory_entry::file_size\", _Error, _Path);\r\n            }\r\n\r\n            return _Result;\r\n        }\r\n\r\n        _NODISCARD uintmax_t file_size(error_code& _Ec) const noexcept {\r\n            uintmax_t _Result;\r\n            _Ec = _Make_ec(_File_size(_Result));\r\n            return _Result;\r\n        }\r\n\r\n    private:\r\n        _NODISCARD __std_win_error _Hard_link_count(uintmax_t& _Result) const noexcept {\r\n            if (_Available(__std_fs_stats_flags::_Link_count)) {\r\n                _Result = _Cached_data._Link_count;\r\n                return __std_win_error::_Success;\r\n            }\r\n\r\n            __std_fs_stats _Stats;\r\n            constexpr auto _Flags = __std_fs_stats_flags::_Link_count | __std_fs_stats_flags::_Follow_symlinks;\r\n            const auto _Error =\r\n                __std_fs_get_stats(_Path.c_str(), &_Stats, _Flags, _Cached_data._Symlink_hint_attributes());\r\n            if (_Error == __std_win_error::_Success) {\r\n                _Result = _Stats._Link_count;\r\n            } else {\r\n                _Result = static_cast<uintmax_t>(-1);\r\n            }\r\n\r\n            return _Error;\r\n        }\r\n\r\n    public:\r\n        _NODISCARD uintmax_t hard_link_count() const {\r\n            uintmax_t _Result;\r\n            const auto _Error = _Hard_link_count(_Result);\r\n            if (_Error != __std_win_error::_Success) {\r\n                _Throw_fs_error(\"directory_entry::hard_link_count\", _Error, _Path);\r\n            }\r\n\r\n            return _Result;\r\n        }\r\n\r\n        _NODISCARD uintmax_t hard_link_count(error_code& _Ec) const noexcept {\r\n            uintmax_t _Result;\r\n            _Ec = _Make_ec(_Hard_link_count(_Result));\r\n            return _Result;\r\n        }\r\n\r\n    private:\r\n        _NODISCARD __std_win_error _Last_write_time(file_time_type& _Result) const noexcept {\r\n            if (_Available(__std_fs_stats_flags::_Last_write_time)) {\r\n                _Result = file_time_type{file_time_type::duration{_Cached_data._Last_write_time}};\r\n                return __std_win_error::_Success;\r\n            }\r\n\r\n            __std_fs_stats _Stats;\r\n            constexpr auto _Flags = __std_fs_stats_flags::_Last_write_time | __std_fs_stats_flags::_Follow_symlinks;\r\n            const auto _Error =\r\n                __std_fs_get_stats(_Path.c_str(), &_Stats, _Flags, _Cached_data._Symlink_hint_attributes());\r\n            if (_Error == __std_win_error::_Success) {\r\n                _Result = file_time_type{file_time_type::duration{_Stats._Last_write_time}};\r\n            } else {\r\n                _Result = file_time_type{file_time_type::duration{LLONG_MIN}};\r\n            }\r\n\r\n            return _Error;\r\n        }\r\n\r\n    public:\r\n        _NODISCARD file_time_type last_write_time() const {\r\n            file_time_type _Result;\r\n            const auto _Error = _Last_write_time(_Result);\r\n            if (_Error != __std_win_error::_Success) {\r\n                _Throw_fs_error(\"directory_entry::last_write_time\", _Error, _Path);\r\n            }\r\n\r\n            return _Result;\r\n        }\r\n\r\n        _NODISCARD file_time_type last_write_time(error_code& _Ec) const noexcept {\r\n            file_time_type _Result;\r\n            _Ec = _Make_ec(_Last_write_time(_Result));\r\n            return _Result;\r\n        }\r\n\r\n    private:\r\n        _NODISCARD _File_status_and_error _Get_any_status(const __std_fs_stats_flags _Flags) const noexcept {\r\n            _File_status_and_error _Result;\r\n            __std_fs_stats _Stats;\r\n\r\n            if (_Bitmask_includes_all(_Cached_data._Available, _Flags)) {\r\n                _Result._Error = __std_win_error::_Success;\r\n                _Result._Status._Refresh(__std_win_error::_Success, _Cached_data);\r\n            } else {\r\n                const auto _Error =\r\n                    __std_fs_get_stats(_Path.c_str(), &_Stats, _Flags, _Cached_data._Symlink_hint_attributes());\r\n                _Result._Error = _Error;\r\n                _Result._Status._Refresh(_Error, _Stats);\r\n            }\r\n\r\n            return _Result;\r\n        }\r\n\r\n    public:\r\n        _NODISCARD file_status status() const {\r\n            const auto _Result = _Get_any_status(_Status_stats_flags);\r\n            if (_Result._Not_good()) {\r\n                _Throw_fs_error(\"directory_entry::status\", _Result._Error, _Path);\r\n            }\r\n\r\n            return _Result._Status;\r\n        }\r\n\r\n        _NODISCARD file_status status(error_code& _Ec) const noexcept {\r\n            const auto _Result = _Get_any_status(_Status_stats_flags);\r\n            _Ec                = _Make_ec(_Result._Error);\r\n            return _Result._Status;\r\n        }\r\n\r\n        _NODISCARD file_status symlink_status() const {\r\n            const auto _Result = _Get_any_status(_Symlink_status_stats_flags);\r\n            if (_Result._Not_good()) {\r\n                _Throw_fs_error(\"directory_entry::symlink_status\", _Result._Error, _Path);\r\n            }\r\n\r\n            return _Result._Status;\r\n        }\r\n\r\n        _NODISCARD file_status symlink_status(error_code& _Ec) const noexcept {\r\n            const auto _Result = _Get_any_status(_Symlink_status_stats_flags);\r\n            _Ec                = _Make_ec(_Result._Error);\r\n            return _Result._Status;\r\n        }\r\n\r\n        _NODISCARD bool operator==(const directory_entry& _Rhs) const noexcept {\r\n            return _Path == _Rhs._Path;\r\n        }\r\n\r\n#if _HAS_CXX20\r\n        _NODISCARD strong_ordering operator<=>(const directory_entry& _Rhs) const noexcept {\r\n            return _Path <=> _Rhs._Path;\r\n        }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n        _NODISCARD bool operator!=(const directory_entry& _Rhs) const noexcept {\r\n            return _Path != _Rhs._Path;\r\n        }\r\n\r\n        _NODISCARD bool operator<(const directory_entry& _Rhs) const noexcept {\r\n            return _Path < _Rhs._Path;\r\n        }\r\n\r\n        _NODISCARD bool operator<=(const directory_entry& _Rhs) const noexcept {\r\n            return _Path <= _Rhs._Path;\r\n        }\r\n\r\n        _NODISCARD bool operator>(const directory_entry& _Rhs) const noexcept {\r\n            return _Path > _Rhs._Path;\r\n        }\r\n\r\n        _NODISCARD bool operator>=(const directory_entry& _Rhs) const noexcept {\r\n            return _Path >= _Rhs._Path;\r\n        }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n        // [fs.dir.entry.io], inserter\r\n        template <class _Elem, class _Traits>\r\n        friend basic_ostream<_Elem, _Traits>& operator<<(\r\n            basic_ostream<_Elem, _Traits>& _Ostr, const directory_entry& _Entry) {\r\n            // insert a directory_entry into a stream\r\n            return _Ostr << _Entry.path();\r\n        }\r\n\r\n    private:\r\n        void _Refresh(const __std_fs_find_data& _Data) noexcept {\r\n            _Cached_data._Attributes        = _Data._Attributes;\r\n            _Cached_data._Reparse_point_tag = _Data._Reparse_point_tag;\r\n            _Cached_data._Available         = __std_fs_stats_flags::_Attributes | __std_fs_stats_flags::_Reparse_tag;\r\n            if (!_Bitmask_includes_any(_Data._Attributes, __std_fs_file_attr::_Reparse_point)) {\r\n                _Cached_data._File_size = (static_cast<uintmax_t>(_Data._File_size_high) << 32)\r\n                                        + static_cast<uintmax_t>(_Data._File_size_low);\r\n                _CSTD memcpy(\r\n                    &_Cached_data._Last_write_time, &_Data._Last_write_time, sizeof(_Cached_data._Last_write_time));\r\n                _Cached_data._Available |= __std_fs_stats_flags::_File_size | __std_fs_stats_flags::_Last_write_time;\r\n            }\r\n        }\r\n\r\n        _NODISCARD static __std_win_error _Refresh(__std_fs_stats& _Stats, const filesystem::path& _Path) noexcept {\r\n            const auto _Error = __std_fs_get_stats(_Path.c_str(), &_Stats, __std_fs_stats_flags::_All_data);\r\n            if (_Error == __std_win_error::_Success) {\r\n                if (_Bitmask_includes_any(_Stats._Attributes, __std_fs_file_attr::_Reparse_point)) {\r\n                    _Stats._Available = __std_fs_stats_flags::_Attributes | __std_fs_stats_flags::_Reparse_tag;\r\n                } else {\r\n                    _Stats._Available = __std_fs_stats_flags::_All_data;\r\n                }\r\n            } else {\r\n                _Stats._Available = __std_fs_stats_flags::_None;\r\n            }\r\n\r\n            return _Error;\r\n        }\r\n\r\n        friend _Dir_enum_impl;\r\n        friend _Recursive_dir_enum_impl;\r\n        friend void _Copy_impl(\r\n            const directory_entry& _From, const _STD filesystem::path& _To, copy_options _Options, error_code& _Ec);\r\n\r\n        __std_fs_stats _Cached_data;\r\n        filesystem::path _Path;\r\n    };\r\n\r\n    _EXPORT_STD enum class directory_options { none = 0, follow_directory_symlink = 1, skip_permission_denied = 2 };\r\n    _BITMASK_OPS(_EXPORT_STD, directory_options)\r\n\r\n    _EXPORT_STD _NODISCARD inline bool exists(const path& _Target, error_code& _Ec) noexcept;\r\n\r\n    struct _Dir_enum_impl {\r\n        _NODISCARD static __std_win_error _Advance_and_reset_if_no_more_files(shared_ptr<_Dir_enum_impl>& _Ptr) {\r\n            auto& _Impl = *_Ptr;\r\n            __std_fs_find_data _Data;\r\n            do {\r\n                const auto _Error = __std_fs_directory_iterator_advance(_Impl._Dir._Handle, &_Data);\r\n                if (_Error == __std_win_error::_No_more_files) {\r\n                    _Ptr.reset();\r\n                    return __std_win_error::_Success;\r\n                }\r\n\r\n                if (_Error != __std_win_error::_Success) {\r\n                    return _Error;\r\n                }\r\n            } while (_Is_dot_or_dotdot(_Data));\r\n            _Impl._Refresh(_Data); // can throw\r\n            return __std_win_error::_Success;\r\n        }\r\n\r\n        _NODISCARD static __std_win_error _Skip_dots(\r\n            __std_fs_dir_handle _Dir_handle, __std_fs_find_data& _Data) noexcept {\r\n            while (_Is_dot_or_dotdot(_Data)) {\r\n                const auto _Error = __std_fs_directory_iterator_advance(_Dir_handle, &_Data);\r\n                if (_Error != __std_win_error::_Success) {\r\n                    return _Error;\r\n                }\r\n            }\r\n\r\n            return __std_win_error::_Success;\r\n        }\r\n\r\n        _NODISCARD static __std_win_error _Open_dir(\r\n            path& _Path, const directory_options _Options_arg, _Find_file_handle& _Dir, __std_fs_find_data& _Data) {\r\n            const size_t _Null_term_len = _CSTD wcslen(_Path.c_str());\r\n            if (_Null_term_len == 0 || _Null_term_len != _Path.native().size()) {\r\n                return __std_win_error::_File_not_found;\r\n            }\r\n\r\n            const path _Original_path = _Path;\r\n            _Path /= L\"*\"sv;\r\n            auto _Error = _Dir._Open(_Path.c_str(), &_Data);\r\n            if (_Error == __std_win_error::_Success) {\r\n                return _Skip_dots(_Dir._Handle, _Data);\r\n            }\r\n\r\n            if (_Error == __std_win_error::_Access_denied\r\n                && _Bitmask_includes_any(_Options_arg, directory_options::skip_permission_denied)) {\r\n                _Error = __std_win_error::_No_more_files;\r\n            } else if (_Error == __std_win_error::_File_not_found) {\r\n                error_code _Ignored; // When exists() returns true, that implies that the error_code is successful.\r\n                // When exists() returns false, we don't want to interfere with _Open_dir()'s behavior,\r\n                // as it's going to return __std_win_error::_File_not_found.\r\n                if (_STD filesystem::exists(_Original_path, _Ignored)) {\r\n                    _Error = __std_win_error::_No_more_files; // Handle empty volumes, see GH-4291\r\n                }\r\n            }\r\n\r\n            return _Error;\r\n        }\r\n\r\n        struct _Creator { // factored out part common to recursive and non-recursive implementation\r\n            path _Path;\r\n            _Find_file_handle _Dir;\r\n            __std_fs_find_data _Find_data;\r\n\r\n            struct _Create_status {\r\n                bool _Should_create_impl;\r\n                __std_win_error _Error;\r\n            };\r\n\r\n            _Create_status _Status;\r\n\r\n            _Creator(const path& _Path_arg, const directory_options _Options) : _Path(_Path_arg) {\r\n                const auto _Error = _Open_dir(_Path, _Options, _Dir, _Find_data);\r\n                if (_Error == __std_win_error::_Success) {\r\n                    _Status = {true, __std_win_error::_Success};\r\n                } else if (_Error == __std_win_error::_No_more_files) {\r\n                    _Status = {false, __std_win_error::_Success};\r\n                } else {\r\n                    _Status = {false, _Error};\r\n                }\r\n            }\r\n        };\r\n\r\n        void _Refresh(const __std_fs_find_data& _Data) {\r\n            _Entry._Refresh(_Data);\r\n            _Entry._Path.replace_filename(wstring_view{_Data._File_name});\r\n        }\r\n\r\n        explicit _Dir_enum_impl(_Creator&& _Create_data, const directory_options = {})\r\n            : _Dir(_STD move(_Create_data._Dir)) {\r\n            // directory_options provided, but unused to keep signature identical to recursive_directory_iterator\r\n            _Entry._Path = _STD move(_Create_data._Path);\r\n            _Refresh(_Create_data._Find_data);\r\n        }\r\n\r\n        template <class _Dir_enum_kind>\r\n        _NODISCARD static __std_win_error _Initialize_dir_enum(\r\n            shared_ptr<_Dir_enum_kind>& _Impl, const path& _Path, const directory_options _Options = {}) {\r\n            _Creator _Create_data(_Path, _Options);\r\n            if (_Create_data._Status._Should_create_impl) {\r\n                _Impl = _STD make_shared<_Dir_enum_kind>(_STD move(_Create_data), _Options);\r\n            }\r\n            return _Create_data._Status._Error;\r\n        }\r\n\r\n        directory_entry _Entry;\r\n        _Find_file_handle _Dir;\r\n    };\r\n\r\n    _EXPORT_STD class directory_iterator;\r\n    _EXPORT_STD class recursive_directory_iterator;\r\n\r\n    struct _Directory_entry_proxy {\r\n        _NODISCARD directory_entry operator*() && noexcept {\r\n            return _STD move(_Entry);\r\n        }\r\n\r\n    private:\r\n        friend directory_iterator;\r\n        friend recursive_directory_iterator;\r\n\r\n        explicit _Directory_entry_proxy(const directory_entry& _Entry_arg) : _Entry(_Entry_arg) {}\r\n\r\n        directory_entry _Entry;\r\n    };\r\n\r\n    _EXPORT_STD class directory_iterator {\r\n    public:\r\n        using iterator_category = input_iterator_tag;\r\n        using value_type        = directory_entry;\r\n        using difference_type   = ptrdiff_t;\r\n        using pointer           = const directory_entry*;\r\n        using reference         = const directory_entry&;\r\n\r\n        // [fs.dir.itr.members], member functions\r\n        directory_iterator() noexcept = default;\r\n        explicit directory_iterator(const path& _Path) {\r\n            const auto _Error = _Dir_enum_impl::_Initialize_dir_enum(_Impl, _Path);\r\n            if (_Error != __std_win_error::_Success) {\r\n                _Throw_fs_error(\"directory_iterator::directory_iterator\", _Error, _Path);\r\n            }\r\n        }\r\n\r\n        directory_iterator(const path& _Path, const directory_options _Options) {\r\n            const auto _Error = _Dir_enum_impl::_Initialize_dir_enum(_Impl, _Path, _Options);\r\n            if (_Error != __std_win_error::_Success) {\r\n                _Throw_fs_error(\"directory_iterator::directory_iterator\", _Error, _Path);\r\n            }\r\n        }\r\n\r\n        directory_iterator(const path& _Path, error_code& _Ec) {\r\n            _Ec = _Make_ec(_Dir_enum_impl::_Initialize_dir_enum(_Impl, _Path));\r\n        }\r\n\r\n        directory_iterator(const path& _Path, const directory_options _Options, error_code& _Ec) {\r\n            _Ec = _Make_ec(_Dir_enum_impl::_Initialize_dir_enum(_Impl, _Path, _Options));\r\n        }\r\n\r\n        directory_iterator(const directory_iterator&) noexcept = default; // strengthened\r\n        directory_iterator(directory_iterator&&) noexcept      = default;\r\n        ~directory_iterator() noexcept                         = default;\r\n\r\n        directory_iterator& operator=(const directory_iterator&) noexcept = default; // strengthened\r\n        directory_iterator& operator=(directory_iterator&&) noexcept      = default;\r\n\r\n        _NODISCARD const directory_entry& operator*() const noexcept /* strengthened */ {\r\n            return _Impl->_Entry;\r\n        }\r\n\r\n        _NODISCARD const directory_entry* operator->() const noexcept /* strengthened */ {\r\n            return &**this;\r\n        }\r\n\r\n        directory_iterator& operator++() {\r\n            const auto _Error = _Dir_enum_impl::_Advance_and_reset_if_no_more_files(_Impl);\r\n            if (_Error != __std_win_error::_Success) {\r\n                _Throw_fs_error(\"directory_iterator::operator++\", _Error);\r\n            }\r\n\r\n            return *this;\r\n        }\r\n\r\n        directory_iterator& increment(error_code& _Ec) {\r\n            _Ec = _Make_ec(_Dir_enum_impl::_Advance_and_reset_if_no_more_files(_Impl));\r\n            return *this;\r\n        }\r\n\r\n        // other members as required by [input.iterators]:\r\n        _NODISCARD bool operator==(const directory_iterator& _Rhs) const noexcept /* strengthened */ {\r\n            return _Impl == _Rhs._Impl;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD bool operator!=(const directory_iterator& _Rhs) const noexcept /* strengthened */ {\r\n            return _Impl != _Rhs._Impl;\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n#if _HAS_CXX20\r\n        _NODISCARD bool operator==(default_sentinel_t) const noexcept {\r\n            return !_Impl;\r\n        }\r\n#endif // _HAS_CXX20\r\n\r\n        _Directory_entry_proxy operator++(int) {\r\n            _Directory_entry_proxy _Proxy(**this);\r\n            ++*this;\r\n            return _Proxy;\r\n        }\r\n\r\n        _NODISCARD bool _At_end() const noexcept {\r\n            return !_Impl;\r\n        }\r\n\r\n    private:\r\n        shared_ptr<_Dir_enum_impl> _Impl;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD inline directory_iterator begin(directory_iterator _Iter) noexcept {\r\n        return _Iter;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline directory_iterator end(directory_iterator) noexcept {\r\n        return {};\r\n    }\r\n\r\n    struct _Should_recurse_result {\r\n        bool _Should_recurse;\r\n        __std_win_error _Error;\r\n    };\r\n\r\n    struct _Recursive_dir_enum_impl : _Dir_enum_impl {\r\n        vector<_Find_file_handle> _Stack;\r\n        directory_options _Options = {};\r\n        bool _Recursion_pending    = true;\r\n\r\n        _NODISCARD _Should_recurse_result _Should_recurse() const noexcept {\r\n            bool _Should_recurse   = false;\r\n            __std_win_error _Error = __std_win_error::_Success;\r\n            if (_Recursion_pending) {\r\n                if (_Entry._Is_symlink_or_junction()) {\r\n                    if (_Bitmask_includes_any(_Options, directory_options::follow_directory_symlink)) {\r\n                        // check for broken symlink/junction\r\n                        __std_fs_stats _Target_stats;\r\n                        constexpr auto _Flags =\r\n                            __std_fs_stats_flags::_Attributes | __std_fs_stats_flags::_Follow_symlinks;\r\n                        _Error = __std_fs_get_stats(\r\n                            _Entry._Path.c_str(), &_Target_stats, _Flags, _Entry._Cached_data._Attributes);\r\n                        if (_Error == __std_win_error::_Success) {\r\n                            _Should_recurse =\r\n                                _Bitmask_includes_any(_Target_stats._Attributes, __std_fs_file_attr::_Directory);\r\n                        } else if (__std_is_file_not_found(_Error)\r\n                                   || (_Error == __std_win_error::_Access_denied\r\n                                       && _Bitmask_includes_any(_Options, directory_options::skip_permission_denied))) {\r\n                            // skip broken symlinks and permission denied (when configured)\r\n                            _Error = __std_win_error::_Success;\r\n                        }\r\n                    }\r\n                } else {\r\n                    _Should_recurse = _Entry._Has_cached_attribute(__std_fs_file_attr::_Directory);\r\n                }\r\n            }\r\n\r\n            return {_Should_recurse, _Error};\r\n        }\r\n\r\n        _NODISCARD __std_win_error _Advance_and_skip_dots(__std_fs_find_data& _Data) noexcept {\r\n            const auto _Error = __std_fs_directory_iterator_advance(_Dir._Handle, &_Data);\r\n            if (_Error != __std_win_error::_Success) {\r\n                return _Error;\r\n            }\r\n\r\n            return _Skip_dots(_Dir._Handle, _Data);\r\n        }\r\n\r\n        _NODISCARD static __std_win_error _Pop_and_reset_if_no_more_files(shared_ptr<_Recursive_dir_enum_impl>& _Ptr) {\r\n            __std_win_error _Error;\r\n            auto& _Impl = *_Ptr;\r\n            __std_fs_find_data _Data;\r\n\r\n            _Impl._Recursion_pending = true;\r\n\r\n            do {\r\n                if (_Impl._Stack.empty()) {\r\n                    _Error = __std_win_error::_Success;\r\n                    break;\r\n                }\r\n\r\n                _Impl._Dir = _STD move(_Impl._Stack.back());\r\n                _Impl._Stack.pop_back();\r\n                _Impl._Entry._Path._Remove_filename_and_separator();\r\n                _Error = _Impl._Advance_and_skip_dots(_Data);\r\n\r\n                if (_Error == __std_win_error::_Success) {\r\n                    _Impl._Refresh(_Data);\r\n                    return __std_win_error::_Success;\r\n                }\r\n            } while (_Error == __std_win_error::_No_more_files);\r\n\r\n            _Ptr.reset();\r\n            return _Error;\r\n        }\r\n\r\n        _NODISCARD static __std_win_error _Advance_and_reset_if_no_more_files(\r\n            shared_ptr<_Recursive_dir_enum_impl>& _Ptr) {\r\n            auto& _Impl = *_Ptr;\r\n            __std_fs_find_data _Data;\r\n            auto [_Should_recurse, _Error] = _Impl._Should_recurse();\r\n            if (_Error != __std_win_error::_Success) {\r\n                _Ptr.reset();\r\n                return _Error;\r\n            }\r\n\r\n            if (_Should_recurse) {\r\n                _Impl._Stack.push_back(_STD move(_Impl._Dir));\r\n                _Error = _Open_dir(_Impl._Entry._Path, _Impl._Options, _Impl._Dir, _Data);\r\n            } else {\r\n                _Error = _Impl._Advance_and_skip_dots(_Data);\r\n            }\r\n\r\n            _Impl._Recursion_pending = true;\r\n            for (;; _Error = _Impl._Advance_and_skip_dots(_Data)) {\r\n                if (_Error == __std_win_error::_Success) {\r\n                    _Impl._Refresh(_Data);\r\n                    return __std_win_error::_Success;\r\n                }\r\n\r\n                if (_Error != __std_win_error::_No_more_files) {\r\n                    break;\r\n                }\r\n\r\n                // no more files at this level, see if we can pop\r\n                if (_Impl._Stack.empty()) { // nothing to pop, clear the error, reset and return\r\n                    _Error = __std_win_error::_Success;\r\n                    break;\r\n                }\r\n\r\n                _Impl._Dir = _STD move(_Impl._Stack.back());\r\n                _Impl._Stack.pop_back();\r\n                _Impl._Entry._Path._Remove_filename_and_separator();\r\n            }\r\n\r\n            _Ptr.reset();\r\n            return _Error;\r\n        }\r\n\r\n        _Recursive_dir_enum_impl(_Dir_enum_impl::_Creator&& _Create_data, const directory_options _Options_arg)\r\n            : _Dir_enum_impl(_STD move(_Create_data)), _Options(_Options_arg) {}\r\n    };\r\n\r\n    _EXPORT_STD class recursive_directory_iterator {\r\n    public:\r\n        using iterator_category = input_iterator_tag;\r\n        using value_type        = directory_entry;\r\n        using difference_type   = ptrdiff_t;\r\n        using pointer           = const directory_entry*;\r\n        using reference         = const directory_entry&;\r\n\r\n        // [fs.rec.dir.itr.members], constructors and destructor\r\n\r\n        recursive_directory_iterator() noexcept = default;\r\n        explicit recursive_directory_iterator(const path& _Path) {\r\n            const auto _Error = _Dir_enum_impl::_Initialize_dir_enum(_Impl, _Path);\r\n            if (_Error != __std_win_error::_Success) {\r\n                _Throw_fs_error(\"recursive_directory_iterator::recursive_directory_iterator\", _Error, _Path);\r\n            }\r\n        }\r\n\r\n        recursive_directory_iterator(const path& _Path, const directory_options _Options) {\r\n            const auto _Error = _Dir_enum_impl::_Initialize_dir_enum(_Impl, _Path, _Options);\r\n            if (_Error != __std_win_error::_Success) {\r\n                _Throw_fs_error(\"recursive_directory_iterator::recursive_directory_iterator\", _Error, _Path);\r\n            }\r\n        }\r\n\r\n        recursive_directory_iterator(const path& _Path, const directory_options _Options, error_code& _Ec) {\r\n            _Ec = _Make_ec(_Dir_enum_impl::_Initialize_dir_enum(_Impl, _Path, _Options));\r\n        }\r\n\r\n        recursive_directory_iterator(const path& _Path, error_code& _Ec) {\r\n            _Ec = _Make_ec(_Dir_enum_impl::_Initialize_dir_enum(_Impl, _Path));\r\n        }\r\n\r\n        recursive_directory_iterator(const recursive_directory_iterator&) noexcept = default; // strengthened\r\n        recursive_directory_iterator(recursive_directory_iterator&&) noexcept      = default;\r\n        ~recursive_directory_iterator() noexcept                                   = default;\r\n\r\n        // [fs.rec.dir.itr.members], observers\r\n        _NODISCARD directory_options options() const noexcept /* strengthened */ {\r\n            return _Impl->_Options;\r\n        }\r\n        _NODISCARD int depth() const noexcept /* strengthened */ {\r\n            // NT uses uint32_t to store the length of the path\r\n            // that allows us 2^31 wchar_t per path.\r\n            // A directory name should be at least 1 character, otherwise\r\n            // adjacent directory separators will be treated as one.\r\n            // Hence, we can only get to 2^30 entries in the stack.\r\n            return static_cast<int>(_Impl->_Stack.size());\r\n        }\r\n        _NODISCARD bool recursion_pending() const noexcept /* strengthened */ {\r\n            return _Impl->_Recursion_pending;\r\n        }\r\n\r\n        _NODISCARD const directory_entry& operator*() const noexcept /* strengthened */ {\r\n            return _Impl->_Entry;\r\n        }\r\n\r\n        _NODISCARD const directory_entry* operator->() const noexcept /* strengthened */ {\r\n            return &**this;\r\n        }\r\n\r\n        // [fs.rec.dir.itr.members], modifiers\r\n        recursive_directory_iterator& operator=(recursive_directory_iterator&&) noexcept      = default;\r\n        recursive_directory_iterator& operator=(const recursive_directory_iterator&) noexcept = default; // strengthened\r\n\r\n        recursive_directory_iterator& operator++() {\r\n            const auto _Error = _Recursive_dir_enum_impl::_Advance_and_reset_if_no_more_files(_Impl);\r\n            if (_Error != __std_win_error::_Success) {\r\n                _Throw_fs_error(\"recursive_directory_iterator::operator++\", _Error);\r\n            }\r\n            return *this;\r\n        }\r\n\r\n        recursive_directory_iterator& increment(error_code& _Ec) {\r\n            _Ec = _Make_ec(_Recursive_dir_enum_impl::_Advance_and_reset_if_no_more_files(_Impl));\r\n            return *this;\r\n        }\r\n\r\n        void pop() {\r\n            const auto _Error = _Recursive_dir_enum_impl::_Pop_and_reset_if_no_more_files(_Impl);\r\n            if (_Error != __std_win_error::_Success) {\r\n                _Throw_fs_error(\"recursive_directory_iterator::pop\", _Error);\r\n            }\r\n        }\r\n\r\n        void pop(error_code& _Ec) {\r\n            _Ec = _Make_ec(_Recursive_dir_enum_impl::_Pop_and_reset_if_no_more_files(_Impl));\r\n        }\r\n\r\n        void disable_recursion_pending() noexcept {\r\n            _Impl->_Recursion_pending = false;\r\n        }\r\n\r\n        // other members as required by [input.iterators]:\r\n        _NODISCARD bool operator==(const recursive_directory_iterator& _Rhs) const noexcept {\r\n            return _Impl == _Rhs._Impl;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD bool operator!=(const recursive_directory_iterator& _Rhs) const noexcept {\r\n            return _Impl != _Rhs._Impl;\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n#if _HAS_CXX20\r\n        _NODISCARD bool operator==(default_sentinel_t) const noexcept {\r\n            return !_Impl;\r\n        }\r\n#endif // _HAS_CXX20\r\n\r\n        _Directory_entry_proxy operator++(int) {\r\n            _Directory_entry_proxy _Proxy(**this);\r\n            ++*this;\r\n            return _Proxy;\r\n        }\r\n\r\n    private:\r\n        shared_ptr<_Recursive_dir_enum_impl> _Impl;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD inline recursive_directory_iterator begin(recursive_directory_iterator _Iter) noexcept {\r\n        return _Iter;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline recursive_directory_iterator end(recursive_directory_iterator) noexcept {\r\n        return {};\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path absolute(const path& _Input, error_code& _Ec) {\r\n        // normalize path according to system semantics, without touching the disk\r\n        // calls GetFullPathNameW\r\n        _Ec.clear(); // for exception safety\r\n        path _Result;\r\n        if (!_Input._Text.empty()) {\r\n            _Result._Text.resize(__std_fs_max_path);\r\n            for (;;) {\r\n                const auto _Requested_size = static_cast<unsigned long>(_Result._Text.size());\r\n                const auto _Full_path_result =\r\n                    __std_fs_get_full_path_name(_Input._Text.c_str(), _Requested_size, _Result._Text.data());\r\n                _Result._Text.resize(_Full_path_result._Size);\r\n                if (_Full_path_result._Size < _Requested_size) {\r\n                    _Ec = _Make_ec(_Full_path_result._Error);\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path absolute(const path& _Input) {\r\n        // normalize path according to system semantics, without touching the disk\r\n        // calls GetFullPathNameW\r\n        error_code _Ec;\r\n        path _Result(_STD filesystem::absolute(_Input, _Ec));\r\n        if (_Ec) {\r\n            _Throw_fs_error(\"absolute\", _Ec, _Input);\r\n        }\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD inline __std_win_error _Canonical(path& _Result, const wstring& _Text) { // pre: _Result.empty()\r\n        if (_Text.empty()) {\r\n            return __std_win_error::_Success;\r\n        }\r\n\r\n        auto _Name_kind = __std_fs_volume_name_kind::_Dos;\r\n        {\r\n            __std_win_error _Err;\r\n            const _Fs_file _Handle(_Text.c_str(), __std_access_rights::_File_read_attributes,\r\n                __std_fs_file_flags::_Backup_semantics, &_Err);\r\n            if (_Err != __std_win_error::_Success) {\r\n                return _Err;\r\n            }\r\n\r\n            _Result._Text.resize(__std_fs_max_path);\r\n            for (;;) {\r\n                const auto _Requested_size    = static_cast<unsigned long>(_Result._Text.size());\r\n                const auto _Final_path_result = __std_fs_get_final_path_name_by_handle(\r\n                    _Handle._Raw, _Result._Text.data(), _Requested_size, _Name_kind);\r\n                _Err = _Final_path_result._Error;\r\n                if (_Final_path_result._Size == 0) {\r\n                    if (_Err == __std_win_error::_Path_not_found && _Name_kind == __std_fs_volume_name_kind::_Dos) {\r\n                        // maybe there is no DOS name for the supplied path, retry with NT path\r\n                        _Name_kind = __std_fs_volume_name_kind::_Nt;\r\n                        continue;\r\n                    }\r\n\r\n                    _Result._Text.clear();\r\n                    return _Err;\r\n                }\r\n\r\n                _Result._Text.resize(_Final_path_result._Size);\r\n                if (_Final_path_result._Size < _Requested_size) {\r\n                    break;\r\n                }\r\n            }\r\n        } // close _Handle\r\n\r\n        if (_Name_kind == __std_fs_volume_name_kind::_Dos) {\r\n            if (_Is_drive_prefix_with_slash_slash_question(_Result._Text)) {\r\n                // the result contains a \\\\?\\ prefix but is just a drive letter, strip the \\\\?\\ prefix\r\n                _Result._Text.erase(0, 4);\r\n            } else if (_Result._Text._Starts_with(LR\"(\\\\?\\UNC\\)\"sv)) {\r\n                // the result contains a \\\\?\\UNC\\ prefix, replace with the simpler \\\\ prefix\r\n                _Result._Text.erase(2, 6); // chop out ?\\UNC\\ leaving two preferred-separators\r\n            }\r\n        } else { // result is in the NT namespace, so apply the DOS to NT namespace prefix\r\n            _Result._Text.insert(0, LR\"(\\\\?\\GLOBALROOT)\"sv);\r\n        }\r\n\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path canonical(const path& _Input) {\r\n        // resolve the final path according to system semantics, by opening the file\r\n        // calls GetFinalPathNameByHandleW\r\n        path _Result;\r\n        const auto _Err = _Canonical(_Result, _Input.native());\r\n        if (_Err != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"canonical\", _Err, _Input);\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path canonical(const path& _Input, error_code& _Ec) {\r\n        // resolve the final path according to system semantics, by opening the file\r\n        // calls GetFinalPathNameByHandleW\r\n        _Ec.clear(); // for exception safety\r\n        path _Result;\r\n        _Ec = _Make_ec(_Canonical(_Result, _Input.native()));\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD inline unique_ptr<wchar_t[]> _Get_cleaned_symlink_target(const path& _To) noexcept {\r\n        // transforms /s in the root-name to \\s, and all other directory-separators into single \\s\r\n        // example: a/\\/b -> a\\b\r\n        // example: //server/a////////b////////c////////d -> \\\\server\\a\\b\\c\\d\r\n        const auto& _To_str = _To.native();\r\n        // protected from overflow by wstring's max_size cap:\r\n        unique_ptr<wchar_t[]> _Cleaned_link(::new (nothrow) wchar_t[_To_str.size() + 1]);\r\n        if (!_Cleaned_link) {\r\n            return _Cleaned_link;\r\n        }\r\n\r\n        const auto _First = _To_str.c_str();\r\n        const auto _Last  = _First + _To_str.size();\r\n        auto _Next        = _Find_root_name_end(_First, _Last);\r\n        auto _Dest        = _STD replace_copy_if(_First, _Next, _Cleaned_link.get(), _Is_slash, L'\\\\');\r\n        for (;;) {\r\n            const wchar_t _Ch = *_Next;\r\n            if (_Is_slash(_Ch)) {\r\n                *_Dest = L'\\\\';\r\n                do {\r\n                    ++_Next;\r\n                } while (_Is_slash(*_Next));\r\n            } else {\r\n                *_Dest = _Ch;\r\n                if (_Ch == L'\\0') {\r\n                    break;\r\n                }\r\n\r\n                ++_Next;\r\n            }\r\n\r\n            ++_Dest;\r\n        }\r\n\r\n        return _Cleaned_link;\r\n    }\r\n\r\n    _EXPORT_STD inline void create_directory_symlink(const path& _To, const path& _New_symlink) {\r\n        // create a symlink for a directory, _New_symlink -> _To\r\n        const auto _Cleaned = _Get_cleaned_symlink_target(_To);\r\n        if (!_Cleaned) {\r\n            _Xbad_alloc();\r\n        }\r\n\r\n        // note reversed parameter order:\r\n        const auto _Err = __std_fs_create_directory_symbolic_link(_New_symlink.c_str(), _Cleaned.get());\r\n        if (_Err != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"create_directory_symlink\", _Err, _To, _New_symlink);\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD inline void create_directory_symlink(\r\n        const path& _To, const path& _New_symlink, error_code& _Ec) noexcept {\r\n        // create a symlink for a directory, _New_symlink -> _To\r\n        const auto _Cleaned = _Get_cleaned_symlink_target(_To);\r\n        if (_Cleaned) {\r\n            // note reversed parameter order:\r\n            _Ec = _Make_ec(__std_fs_create_directory_symbolic_link(_New_symlink.c_str(), _Cleaned.get()));\r\n        } else {\r\n            _Ec = _STD make_error_code(errc::not_enough_memory);\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD inline void create_hard_link(const path& _To, const path& _New_hard_link) {\r\n        // create a hard link for a file, _New_hard_link -> _To\r\n        // note reversed parameter order:\r\n        const auto _Err = __std_fs_create_hard_link(_New_hard_link.c_str(), _To.c_str());\r\n        if (_Err != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"create_hard_link\", _Err, _To, _New_hard_link);\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD inline void create_hard_link(const path& _To, const path& _New_hard_link, error_code& _Ec) noexcept {\r\n        // create a hard link for a file, _New_hard_link -> _To\r\n        // note reversed parameter order:\r\n        _Ec = _Make_ec(__std_fs_create_hard_link(_New_hard_link.c_str(), _To.c_str()));\r\n    }\r\n\r\n    _EXPORT_STD inline void create_symlink(const path& _To, const path& _New_symlink) {\r\n        // create a symlink for a file, _New_symlink -> _To\r\n        const auto _Cleaned = _Get_cleaned_symlink_target(_To);\r\n        if (!_Cleaned) {\r\n            _Xbad_alloc();\r\n        }\r\n\r\n        // note reversed parameter order:\r\n        const auto _Err = __std_fs_create_symbolic_link(_New_symlink.c_str(), _Cleaned.get());\r\n        if (_Err != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"create_symlink\", _Err, _To, _New_symlink);\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD inline void create_symlink(const path& _To, const path& _New_symlink, error_code& _Ec) noexcept {\r\n        // create a symlink for a file, _New_symlink -> _To\r\n        const auto _Cleaned = _Get_cleaned_symlink_target(_To);\r\n        if (_Cleaned) {\r\n            // note reversed parameter order:\r\n            _Ec = _Make_ec(__std_fs_create_symbolic_link(_New_symlink.c_str(), _Cleaned.get()));\r\n        } else {\r\n            _Ec = _STD make_error_code(errc::not_enough_memory);\r\n        }\r\n    }\r\n\r\n    _NODISCARD inline __std_win_error _Read_reparse_data(\r\n        const _Fs_file& _Handle, unique_ptr<char[]>& _Buffer_unique_ptr) noexcept {\r\n        constexpr auto _Buffer_size = 16 * 1024; // MAXIMUM_REPARSE_DATA_BUFFER_SIZE\r\n\r\n        _Buffer_unique_ptr.reset(::new (nothrow) char[_Buffer_size]);\r\n        if (!_Buffer_unique_ptr) {\r\n            return __std_win_error::_Not_enough_memory;\r\n        }\r\n\r\n        const auto _Buffer         = reinterpret_cast<__std_fs_reparse_data_buffer*>(_Buffer_unique_ptr.get());\r\n        const __std_win_error _Err = __std_fs_read_reparse_data_buffer(_Handle._Raw, _Buffer, _Buffer_size);\r\n        if (_Err != __std_win_error::_Success) {\r\n            return _Err;\r\n        }\r\n\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    _NODISCARD inline __std_win_error _Read_symlink(const path& _Symlink_path, path& _Result) {\r\n        __std_win_error _Err;\r\n        unique_ptr<char[]> _Buffer_unique_ptr;\r\n        {\r\n            const _Fs_file _Handle(_Symlink_path.c_str(), __std_access_rights::_File_read_attributes,\r\n                __std_fs_file_flags::_Backup_semantics | __std_fs_file_flags::_Open_reparse_point, &_Err);\r\n            if (_Err != __std_win_error::_Success) {\r\n                return _Err;\r\n            }\r\n\r\n            _Err = _Read_reparse_data(_Handle, _Buffer_unique_ptr);\r\n            if (_Err != __std_win_error::_Success) {\r\n                return _Err;\r\n            }\r\n        } // Close _Handle\r\n\r\n        const auto _Buffer = reinterpret_cast<__std_fs_reparse_data_buffer*>(_Buffer_unique_ptr.get());\r\n        unsigned short _Length;\r\n        wchar_t* _Offset;\r\n        _Err = __std_fs_read_name_from_reparse_data_buffer(_Buffer, &_Offset, &_Length);\r\n        if (_Err != __std_win_error::_Success) {\r\n            return _Err;\r\n        }\r\n\r\n        _Result._Text.assign(_Offset, _Length);\r\n\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path read_symlink(const path& _Symlink_path, error_code& _Ec) {\r\n        _Ec.clear();\r\n        path _Result;\r\n        _Ec = _Make_ec(_Read_symlink(_Symlink_path, _Result));\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path read_symlink(const path& _Symlink_path) {\r\n        path _Result;\r\n        const auto _Err = _Read_symlink(_Symlink_path, _Result);\r\n        if (_Err != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"read_symlink\", _Err, _Symlink_path);\r\n        }\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD inline __std_win_error _Copy_symlink(const path& _Symlink, const path& _New_symlink) noexcept {\r\n        __std_win_error _Err;\r\n        unique_ptr<char[]> _Buffer_unique_ptr;\r\n        bool _Is_directory;\r\n        {\r\n            const _Fs_file _Handle(_Symlink.c_str(), __std_access_rights::_File_read_attributes,\r\n                __std_fs_file_flags::_Backup_semantics | __std_fs_file_flags::_Open_reparse_point, &_Err);\r\n            if (_Err != __std_win_error::_Success) {\r\n                return _Err;\r\n            }\r\n\r\n            _Err = _Read_reparse_data(_Handle, _Buffer_unique_ptr);\r\n            if (_Err != __std_win_error::_Success) {\r\n                return _Err;\r\n            }\r\n\r\n            unsigned long _File_attributes;\r\n            _Err = __std_fs_get_file_attributes_by_handle(_Handle._Raw, &_File_attributes);\r\n            if (_Err != __std_win_error::_Success) {\r\n                return _Err;\r\n            }\r\n\r\n            _Is_directory = (_File_attributes & static_cast<unsigned long>(__std_fs_file_attr::_Directory)) != 0;\r\n        } // Close _Handle\r\n\r\n        const auto _Buffer = reinterpret_cast<__std_fs_reparse_data_buffer*>(_Buffer_unique_ptr.get());\r\n\r\n        // LWG-3744: `copy_symlink(junction, new_symlink)`'s behavior is unclear\r\n        // `read_symlink(junction)` should be allowed, but `copy_symlink(junction)` is not.\r\n        if (__std_fs_is_junction_from_reparse_data_buffer(_Buffer)) {\r\n            _Err = __std_win_error::_Reparse_tag_invalid;\r\n            return _Err;\r\n        }\r\n\r\n        unsigned short _Length;\r\n        wchar_t* _Offset;\r\n        _Err = __std_fs_read_name_from_reparse_data_buffer(_Buffer, &_Offset, &_Length);\r\n        if (_Err != __std_win_error::_Success) {\r\n            return _Err;\r\n        }\r\n\r\n        _Offset[_Length] = L'\\0';\r\n\r\n        if (_Is_directory) {\r\n            _Err = __std_fs_create_directory_symbolic_link(_New_symlink.c_str(), _Offset);\r\n        } else {\r\n            _Err = __std_fs_create_symbolic_link(_New_symlink.c_str(), _Offset);\r\n        }\r\n\r\n        return _Err;\r\n    }\r\n\r\n    _NODISCARD inline __std_win_error _Copy_junction(const path& _Junction, const path& _New_junction) noexcept {\r\n        __std_win_error _Err;\r\n        unique_ptr<char[]> _Buffer_unique_ptr;\r\n        {\r\n            const _Fs_file _Handle(_Junction.c_str(), __std_access_rights::_File_read_attributes,\r\n                __std_fs_file_flags::_Backup_semantics | __std_fs_file_flags::_Open_reparse_point, &_Err);\r\n            if (_Err != __std_win_error::_Success) {\r\n                return _Err;\r\n            }\r\n\r\n            _Err = _Read_reparse_data(_Handle, _Buffer_unique_ptr);\r\n            if (_Err != __std_win_error::_Success) {\r\n                return _Err;\r\n            }\r\n        } // Close _Handle\r\n\r\n        const auto _Buffer = reinterpret_cast<__std_fs_reparse_data_buffer*>(_Buffer_unique_ptr.get());\r\n\r\n        const auto _Create_dir_res = __std_fs_create_directory(_New_junction.c_str());\r\n\r\n        if (_Create_dir_res._Error != __std_win_error::_Success) {\r\n            return _Create_dir_res._Error;\r\n        } else if (!_Create_dir_res._Created) {\r\n            return __std_win_error::_Already_exists;\r\n        }\r\n\r\n        struct _NODISCARD _Delete_directory_scope_guard {\r\n            const wchar_t* _Path;\r\n            ~_Delete_directory_scope_guard() {\r\n                if (_Path) {\r\n                    (void) __std_fs_remove(_Path);\r\n                }\r\n            }\r\n        };\r\n        _Delete_directory_scope_guard _Delete_directory{_New_junction.c_str()};\r\n\r\n        _Fs_file _To_handle{_New_junction.c_str(), __std_access_rights::_File_write_attributes,\r\n            __std_fs_file_flags::_Backup_semantics, &_Err};\r\n        if (_Err != __std_win_error::_Success) {\r\n            return _Err;\r\n        }\r\n        _Err = __std_fs_write_reparse_data_buffer(_To_handle._Raw, _Buffer);\r\n        if (_Err == __std_win_error::_Success) {\r\n            // don't delete the directory if we succeeded in making it a junction\r\n            _Delete_directory._Path = nullptr;\r\n        }\r\n\r\n        return _Err;\r\n    }\r\n\r\n    _EXPORT_STD inline void copy_symlink(const path& _Symlink, const path& _New_symlink, error_code& _Ec) {\r\n        _Ec = _Make_ec(_Copy_symlink(_Symlink, _New_symlink));\r\n    }\r\n\r\n    _EXPORT_STD inline void copy_symlink(const path& _Symlink, const path& _New_symlink) {\r\n        const auto _Err = _Copy_symlink(_Symlink, _New_symlink);\r\n        if (_Err != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"copy_symlink\", _Err, _Symlink, _New_symlink);\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD inline bool copy_file(\r\n        const path& _From, const path& _To, const copy_options _Options, error_code& _Ec) noexcept /* strengthened */ {\r\n        // copy a file _From -> _To according to _Options\r\n        const auto _Result =\r\n            __std_fs_copy_file(_From.c_str(), _To.c_str(), static_cast<__std_fs_copy_options>(_Options));\r\n        _Ec = _Make_ec(_Result._Error);\r\n        return _Result._Copied;\r\n    }\r\n\r\n    _EXPORT_STD inline bool copy_file(const path& _From, const path& _To, const copy_options _Options) {\r\n        // copy a file _From -> _To according to _Options\r\n        const auto _Result =\r\n            __std_fs_copy_file(_From.c_str(), _To.c_str(), static_cast<__std_fs_copy_options>(_Options));\r\n        if (_Result._Error != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"copy_file\", _Result._Error, _From, _To);\r\n        }\r\n\r\n        return _Result._Copied;\r\n    }\r\n\r\n    _EXPORT_STD inline bool copy_file(const path& _From, const path& _To, error_code& _Ec) noexcept /* strengthened */ {\r\n        // copy a file _From -> _To, failing if the destination exists\r\n        return _STD filesystem::copy_file(_From, _To, copy_options::none, _Ec);\r\n    }\r\n\r\n    _EXPORT_STD inline bool copy_file(const path& _From, const path& _To) {\r\n        // copy a file _From -> _To, failing if the destination exists\r\n        return _STD filesystem::copy_file(_From, _To, copy_options::none);\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool equivalent(const path& _Lhs, const path& _Rhs) {\r\n        // test if the paths _Lhs and _Rhs refer to the same file\r\n        const auto _Result = __std_fs_equivalent(_Lhs.c_str(), _Rhs.c_str());\r\n        if (_Result._Error != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"equivalent\", _Result._Error, _Lhs, _Rhs);\r\n        }\r\n\r\n        return _Result._Equivalent;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool equivalent(const path& _Lhs, const path& _Rhs, error_code& _Ec) noexcept {\r\n        // test if the paths _Lhs and _Rhs refer to the same file\r\n        const auto _Result = __std_fs_equivalent(_Lhs.c_str(), _Rhs.c_str());\r\n        _Ec                = _Make_ec(_Result._Error);\r\n        return _Result._Equivalent;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline file_status status(const path& _Path);\r\n    _EXPORT_STD _NODISCARD inline file_status status(const path& _Path, error_code& _Ec) noexcept;\r\n    _EXPORT_STD _NODISCARD inline file_status symlink_status(const path& _Path);\r\n    _EXPORT_STD _NODISCARD inline file_status symlink_status(const path& _Path, error_code& _Ec) noexcept;\r\n\r\n    _EXPORT_STD _NODISCARD inline bool exists(const path& _Target, error_code& _Ec) noexcept {\r\n        const auto _Type = _STD filesystem::status(_Target, _Ec).type();\r\n        if (_Type != file_type::none) {\r\n            _Ec.clear();\r\n            return _Type != file_type::not_found;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool exists(const path& _Target) {\r\n        error_code _Ec;\r\n        const bool _Result = _STD filesystem::exists(_Target, _Ec);\r\n        if (_Ec) {\r\n            _Throw_fs_error(\"exists\", _Ec, _Target);\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD inline __std_win_error _File_size(const path& _Path, uintmax_t& _Result) noexcept {\r\n        __std_fs_stats _Stats;\r\n        const auto _Error = __std_fs_get_stats(\r\n            _Path.c_str(), &_Stats, __std_fs_stats_flags::_Follow_symlinks | __std_fs_stats_flags::_File_size);\r\n        if (_Error == __std_win_error::_Success) {\r\n            _Result = _Stats._File_size;\r\n        } else {\r\n            _Result = static_cast<uintmax_t>(-1);\r\n        }\r\n\r\n        return _Error;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline uintmax_t file_size(const path& _Path) {\r\n        uintmax_t _Result;\r\n        const auto _Error = _File_size(_Path, _Result);\r\n        if (_Error != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"file_size\", _Error, _Path);\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline uintmax_t file_size(const path& _Path, error_code& _Ec) noexcept {\r\n        uintmax_t _Result;\r\n        _Ec = _Make_ec(_File_size(_Path, _Result));\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD inline __std_win_error _Hard_link_count(const path& _Path, uintmax_t& _Result) noexcept {\r\n        __std_fs_stats _Stats;\r\n        const auto _Error = __std_fs_get_stats(\r\n            _Path.c_str(), &_Stats, __std_fs_stats_flags::_Follow_symlinks | __std_fs_stats_flags::_Link_count);\r\n        if (_Error == __std_win_error::_Success) {\r\n            _Result = _Stats._Link_count;\r\n        } else {\r\n            _Result = static_cast<uintmax_t>(-1);\r\n        }\r\n\r\n        return _Error;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline uintmax_t hard_link_count(const path& _Target) {\r\n        // get the number of hard links to _Target\r\n        uintmax_t _Result;\r\n        const auto _Err = _Hard_link_count(_Target.c_str(), _Result);\r\n        if (_Err != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"hard_link_count\", _Err, _Target);\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline uintmax_t hard_link_count(const path& _Target, error_code& _Ec) noexcept {\r\n        // get the number of hard links to _Target\r\n        uintmax_t _Result;\r\n        _Ec = _Make_ec(_Hard_link_count(_Target.c_str(), _Result));\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_block_file(const path&) noexcept /* strengthened */ {\r\n        // tests whether the input path is a block special file (never on Windows)\r\n        return false;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_block_file(const path& _Path, error_code& _Ec) noexcept {\r\n        // tests whether the input path is a block special file (never on Windows)\r\n        (void) _STD filesystem::status(_Path, _Ec);\r\n        return false; // note status sets _Ec to an error on nonexistent input\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_character_file(const path&) noexcept /* strengthened */ {\r\n        // tests whether the input path is a character special file (never on Windows)\r\n        return false;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_character_file(const path& _Path, error_code& _Ec) noexcept {\r\n        // tests whether the input path is a character special file (never on Windows)\r\n        (void) _STD filesystem::status(_Path, _Ec);\r\n        return false; // note status sets _Ec to an error on nonexistent input\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_directory(const path& _Path) {\r\n        // tests whether _Path is a directory\r\n        return _STD filesystem::is_directory(_STD filesystem::status(_Path));\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_directory(const path& _Path, error_code& _Ec) noexcept {\r\n        // tests whether _Path is a directory\r\n        return _STD filesystem::is_directory(_STD filesystem::status(_Path, _Ec));\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_empty(const path& _Path, error_code& _Ec) {\r\n        // test whether _Path refers to a zero sized file or empty directory\r\n        constexpr auto _Flags = __std_fs_stats_flags::_Attributes | __std_fs_stats_flags::_File_size\r\n                              | __std_fs_stats_flags::_Follow_symlinks;\r\n        __std_fs_stats _Stats;\r\n        const auto _Error = __std_fs_get_stats(_Path.c_str(), &_Stats, _Flags);\r\n        _Ec               = _Make_ec(_Error);\r\n        if (_Error != __std_win_error::_Success) {\r\n            return false;\r\n        }\r\n\r\n        if ((_Stats._Attributes & __std_fs_file_attr::_Directory) == __std_fs_file_attr{}) {\r\n            return _Stats._File_size == 0;\r\n        } else {\r\n            directory_iterator _Iter(_Path, _Ec);\r\n            return !_Ec && _Iter._At_end();\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_empty(const path& _Path) {\r\n        // test whether _Path refers to a zero sized file or empty directory\r\n        error_code _Ec;\r\n        const bool _Result = is_empty(_Path, _Ec);\r\n        if (_Ec) {\r\n            _Throw_fs_error(\"is_empty\", _Ec, _Path);\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_fifo(const path&) noexcept /* strengthened */ {\r\n        // tests whether the input path is a fifo (never on Windows)\r\n        return false;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_fifo(const path& _Path, error_code& _Ec) noexcept {\r\n        // tests whether the input path is a fifo (never on Windows)\r\n        (void) _STD filesystem::status(_Path, _Ec);\r\n        return false; // note status sets _Ec to an error on nonexistent input\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_other(const path& _Path) {\r\n        // tests whether _Path is an \"other\" file (such as a junction)\r\n        return _STD filesystem::is_other(_STD filesystem::status(_Path));\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_other(const path& _Path, error_code& _Ec) noexcept {\r\n        // tests whether _Path is an \"other\" file (such as a junction)\r\n        return _STD filesystem::is_other(_STD filesystem::status(_Path, _Ec));\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_regular_file(const path& _Path) {\r\n        // tests whether _Path is a regular file\r\n        return _STD filesystem::is_regular_file(_STD filesystem::status(_Path));\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_regular_file(const path& _Path, error_code& _Ec) noexcept {\r\n        // tests whether _Path is a regular file\r\n        return _STD filesystem::is_regular_file(_STD filesystem::status(_Path, _Ec));\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_socket(const path&) noexcept /* strengthened */ {\r\n        // tests whether the input path is a socket (never on Windows)\r\n        return false;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_socket(const path& _Path, error_code& _Ec) noexcept {\r\n        // tests whether the input path is a socket (never on Windows)\r\n        (void) _STD filesystem::status(_Path, _Ec);\r\n        return false; // note status sets _Ec to an error on nonexistent input\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_symlink(const path& _Path) {\r\n        // tests whether _Path is a symlink\r\n        return _STD filesystem::is_symlink(_STD filesystem::symlink_status(_Path));\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool is_symlink(const path& _Path, error_code& _Ec) noexcept {\r\n        // tests whether _Path is a symlink\r\n        return _STD filesystem::is_symlink(_STD filesystem::symlink_status(_Path, _Ec));\r\n    }\r\n\r\n    _EXPORT_STD inline bool remove(const path& _Target) {\r\n        // remove file _Target (even if it is a directory); returns whether the file was removed\r\n        // note !exists(_Target) is not an error, and merely returns false\r\n        const auto _Result = __std_fs_remove(_Target.c_str());\r\n        if (_Result._Error != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"remove\", _Result._Error, _Target);\r\n        }\r\n\r\n        return _Result._Removed;\r\n    }\r\n\r\n    _EXPORT_STD inline bool remove(const path& _Target, error_code& _Ec) noexcept {\r\n        // remove file _Target (even if it is a directory); returns whether the file was removed\r\n        // note !exists(_Target) is not an error, and merely returns false\r\n        const auto _Result = __std_fs_remove(_Target.c_str());\r\n        _Ec                = _Make_ec(_Result._Error);\r\n        return _Result._Removed;\r\n    }\r\n\r\n    _EXPORT_STD inline void rename(const path& _Old_p, const path& _New_p) {\r\n        // rename _Old_p to _New_p, overwriting _New_p if it is an existing non-directory file\r\n        // the standard explicitly allows an implementation to not replace _New_p if it is a directory,\r\n        // and we take advantage of that here to be able to use MoveFileEx(... MOVEFILE_REPLACE_EXISTING)\r\n        const auto _Err = __std_fs_rename(_Old_p.c_str(), _New_p.c_str());\r\n        if (_Err != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"rename\", _Err, _Old_p, _New_p);\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD inline void rename(const path& _Old_p, const path& _New_p, error_code& _Ec) noexcept {\r\n        // rename _Old_p to _New_p, overwriting _New_p if it is an existing non-directory file\r\n        // the standard explicitly allows an implementation to not replace _New_p if it is a directory,\r\n        // and we take advantage of that here to be able to use MoveFileEx(... MOVEFILE_REPLACE_EXISTING)\r\n        _Ec = _Make_ec(__std_fs_rename(_Old_p.c_str(), _New_p.c_str()));\r\n    }\r\n\r\n    _EXPORT_STD inline void resize_file(const path& _Target, const uintmax_t _New_size) {\r\n        // set the size of _Target to _New_size\r\n        const auto _Err = __std_fs_resize_file(_Target.c_str(), _New_size);\r\n        if (_Err != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"resize_file\", _Err, _Target);\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD inline void resize_file(const path& _Target, const uintmax_t _New_size, error_code& _Ec) noexcept {\r\n        // set the size of _Target to _New_size\r\n        _Ec = _Make_ec(__std_fs_resize_file(_Target.c_str(), _New_size));\r\n    }\r\n\r\n    _EXPORT_STD struct space_info {\r\n        uintmax_t capacity;\r\n        uintmax_t free;\r\n        uintmax_t available;\r\n\r\n#if _HAS_CXX20\r\n        _NODISCARD friend constexpr bool operator==(const space_info&, const space_info&) noexcept = default;\r\n#endif // _HAS_CXX20\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD inline space_info space(const path& _Target) {\r\n        // get capacity information for the volume on which the file _Target resides\r\n        space_info _Result;\r\n        const auto _Last_error = __std_fs_space(_Target.c_str(), &_Result.available, &_Result.capacity, &_Result.free);\r\n        if (_Last_error != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"space\", _Last_error, _Target);\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline space_info space(const path& _Target, error_code& _Ec) noexcept {\r\n        // get capacity information for the volume on which the file _Target resides\r\n        space_info _Result;\r\n        _Ec = _Make_ec(__std_fs_space(_Target.c_str(), &_Result.available, &_Result.capacity, &_Result.free));\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline bool status_known(const file_status _Status) noexcept {\r\n        return _Status.type() != file_type::none;\r\n    }\r\n\r\n    _NODISCARD inline _File_status_and_error _Get_any_status(\r\n        const path& _Path, const __std_fs_stats_flags _Flags) noexcept {\r\n        _File_status_and_error _Result;\r\n        __std_fs_stats _Stats;\r\n\r\n        const auto _Error = __std_fs_get_stats(_Path.c_str(), &_Stats, _Flags);\r\n        _Result._Error    = _Error;\r\n        _Result._Status._Refresh(_Error, _Stats);\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline file_status status(const path& _Path, error_code& _Ec) noexcept {\r\n        const auto _Result = _Get_any_status(_Path, _Status_stats_flags);\r\n        _Ec                = _Make_ec(_Result._Error);\r\n        return _Result._Status;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline file_status status(const path& _Path) {\r\n        const auto _Result = _Get_any_status(_Path, _Status_stats_flags);\r\n        if (_Result._Not_good()) {\r\n            _Throw_fs_error(\"status\", _Result._Error, _Path);\r\n        }\r\n        return _Result._Status;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline file_status symlink_status(const path& _Path, error_code& _Ec) noexcept {\r\n        const auto _Result = _Get_any_status(_Path, _Symlink_status_stats_flags);\r\n        _Ec                = _Make_ec(_Result._Error);\r\n        return _Result._Status;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline file_status symlink_status(const path& _Path) {\r\n        const auto _Result = _Get_any_status(_Path, _Symlink_status_stats_flags);\r\n        if (_Result._Not_good()) {\r\n            _Throw_fs_error(\"symlink_status\", _Result._Error, _Path);\r\n        }\r\n\r\n        return _Result._Status;\r\n    }\r\n\r\n    _EXPORT_STD inline bool create_directory(const path& _Path) {\r\n        const auto _Result = __std_fs_create_directory(_Path.c_str());\r\n        if (_Result._Error != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"create_directory\", _Result._Error, _Path);\r\n        }\r\n\r\n        return _Result._Created;\r\n    }\r\n\r\n    _EXPORT_STD inline bool create_directory(const path& _Path, error_code& _Ec) noexcept {\r\n        const auto _Result = __std_fs_create_directory(_Path.c_str());\r\n        _Ec                = _Make_ec(_Result._Error);\r\n        return _Result._Created;\r\n    }\r\n\r\n    _EXPORT_STD inline bool create_directory(const path& _Path, const path& _Existing_p) {\r\n        const auto _Result = __std_fs_create_directory(_Path.c_str());\r\n        if (_Result._Error != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"create_directory\", _Result._Error, _Path, _Existing_p);\r\n        }\r\n\r\n        return _Result._Created;\r\n    }\r\n\r\n    _EXPORT_STD inline bool create_directory(const path& _Path, const path&, error_code& _Ec) noexcept {\r\n        const auto _Result = __std_fs_create_directory(_Path.c_str());\r\n        _Ec                = _Make_ec(_Result._Error);\r\n        return _Result._Created;\r\n    }\r\n\r\n    _EXPORT_STD inline bool create_directories(const path& _Path, error_code& _Ec) {\r\n        if (_Path.empty()) {\r\n            _Ec = _Make_ec(__std_win_error::_Path_not_found);\r\n            return false;\r\n        }\r\n\r\n        _Ec.clear(); // for exception safety\r\n        const wstring& _Text = _Path.native();\r\n        wstring _Tmp;\r\n        _Tmp.reserve(_Text.size());\r\n        auto _Cursor        = _Text.data();\r\n        const auto _End     = _Text.data() + _Text.size();\r\n        auto _Root_path_end = _Find_relative_path(_Cursor, _End);\r\n        if (_Root_path_end != _Cursor && _End - _Root_path_end >= 3 && _Is_drive_prefix(_Root_path_end)\r\n            && _Is_slash(_Root_path_end[2])) {\r\n            // \\\\?\\ prefixes may have a drive letter suffix Windows will reject, strip\r\n            _Root_path_end += 2;\r\n        }\r\n\r\n        _Tmp.append(_Cursor, _Root_path_end);\r\n        _Cursor = _Root_path_end;\r\n\r\n        // When creating directories, sometimes we get error reports on earlier directories.\r\n        // Consider a case like X:\\cat\\dog\\elk, where we get the following errors:\r\n        // X: ERROR_ACCESS_DENIED\r\n        // X:\\cat ERROR_ALREADY_EXISTS\r\n        // X:\\cat\\dog ERROR_ACCESS_DENIED\r\n        // X:\\cat\\dog\\elk ERROR_FILE_NOT_FOUND\r\n        // Here, the previous access denied error prevented us from creating a parent directory,\r\n        // and the subsequent ERROR_FILE_NOT_FOUND is not the interesting error for the user.\r\n        // Therefore:\r\n        //   If the last directory creation reports success, we return success.\r\n        //   If the last directory creation fails, we return the most recent non-file-not-found error.\r\n        //   If there is no such non-file-not-found error, we return the most recent error.\r\n\r\n        bool _Created_last                              = false;\r\n        __std_win_error _Error                          = __std_win_error::_Success;\r\n        __std_win_error _Most_recent_not_file_not_found = __std_win_error::_Success;\r\n        while (_Cursor != _End) {\r\n            const auto _Added_end = _STD find_if(_STD find_if_not(_Cursor, _End, _Is_slash), _End, _Is_slash);\r\n            _Tmp.append(_Cursor, _Added_end);\r\n            const auto _Create_result = __std_fs_create_directory(_Tmp.c_str());\r\n            _Error                    = _Create_result._Error;\r\n            _Created_last             = _Create_result._Created;\r\n            if (_Error != __std_win_error::_Success && !__std_is_file_not_found(_Error)) {\r\n                _Most_recent_not_file_not_found = _Error;\r\n            }\r\n\r\n            _Cursor = _Added_end;\r\n        }\r\n\r\n        if (_Error != __std_win_error::_Success && _Most_recent_not_file_not_found != __std_win_error::_Success) {\r\n            _Error = _Most_recent_not_file_not_found;\r\n        }\r\n\r\n        _Ec = _Make_ec(_Error);\r\n        return _Created_last;\r\n    }\r\n\r\n    _EXPORT_STD inline bool create_directories(const path& _Path) {\r\n        error_code _Ec;\r\n        const bool _Result = _STD filesystem::create_directories(_Path, _Ec);\r\n        if (_Ec) {\r\n            _Throw_fs_error(\"create_directories\", _Ec, _Path);\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    inline constexpr int _Remove_all_retry_count = 10;\r\n\r\n    inline void _Remove_all_dir(const path& _Path, error_code& _Ec, uintmax_t& _Removed_count) {\r\n        // remove _Path, including any contents\r\n        for (directory_iterator _It(_Path, _Ec);; _It.increment(_Ec)) { // remove nonempty directory contents\r\n            if (_Ec) {\r\n                if (_Ec.category() != _STD system_category()\r\n                    || !__std_is_file_not_found(static_cast<__std_win_error>(_Ec.value()))) {\r\n                    return;\r\n                }\r\n\r\n                break;\r\n            }\r\n\r\n            if (_It._At_end()) {\r\n                break;\r\n            }\r\n\r\n            const auto& _Subpath  = _It->path();\r\n            const auto _Substatus = _It->symlink_status(_Ec);\r\n            if (_Ec) {\r\n                return;\r\n            }\r\n\r\n            if (_Substatus.type() == file_type::directory) {\r\n                _Remove_all_dir(_Subpath, _Ec, _Removed_count);\r\n            } else {\r\n                _Removed_count += _STD filesystem::remove(_Subpath, _Ec);\r\n            }\r\n\r\n            if (_Ec) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        for (int _Retry = 0; _Retry < _Remove_all_retry_count; ++_Retry) {\r\n            // retry up to _Remove_all_retry_count for resilience against\r\n            // A/V tools, search indexers, backup tools, etc.\r\n            const auto _Path_remove_result = __std_fs_remove(_Path.c_str());\r\n            _Removed_count += _Path_remove_result._Removed;\r\n            _Ec = _Make_ec(_Path_remove_result._Error);\r\n            if (_Path_remove_result._Error != __std_win_error::_Directory_not_empty\r\n                && _Path_remove_result._Error != __std_win_error::_Access_denied) {\r\n                // ERROR_DIRECTORY_NOT_EMPTY if we're waiting for handles to children to be closed,\r\n                // ERROR_ACCESS_DENIED if the directory we're targeting itself is marked for deletion.\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD inline uintmax_t remove_all(const path& _Path, error_code& _Ec) {\r\n        // remove _Path, including any contents\r\n        _Ec.clear(); // for exception safety\r\n        const auto _First_remove_result = __std_fs_remove(_Path.c_str());\r\n        uintmax_t _Removed_count        = _First_remove_result._Removed;\r\n        _Ec                             = _Make_ec(_First_remove_result._Error);\r\n        if (_First_remove_result._Error == __std_win_error::_Directory_not_empty) {\r\n            _Remove_all_dir(_Path, _Ec, _Removed_count);\r\n        }\r\n\r\n        if (_Ec) {\r\n            _Removed_count = static_cast<uintmax_t>(-1);\r\n        }\r\n\r\n        return _Removed_count;\r\n    }\r\n\r\n    _EXPORT_STD inline uintmax_t remove_all(const path& _Path) {\r\n        error_code _Ec;\r\n        const auto _Removed_count = _STD filesystem::remove_all(_Path, _Ec);\r\n        if (_Ec) {\r\n            _Throw_fs_error(\"remove_all\", _Ec, _Path);\r\n        }\r\n\r\n        return _Removed_count;\r\n    }\r\n\r\n    _NODISCARD inline __std_win_error _Last_write_time(const path& _Path, file_time_type& _Result) noexcept {\r\n        __std_fs_stats _Stats;\r\n        const auto _Error = __std_fs_get_stats(\r\n            _Path.c_str(), &_Stats, __std_fs_stats_flags::_Follow_symlinks | __std_fs_stats_flags::_Last_write_time);\r\n        if (_Error == __std_win_error::_Success) {\r\n            _Result = file_time_type{file_time_type::duration{_Stats._Last_write_time}};\r\n        } else {\r\n            _Result = (file_time_type::min) ();\r\n        }\r\n\r\n        return _Error;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline file_time_type last_write_time(const path& _Path) {\r\n        file_time_type _Result;\r\n        const auto _Error = _Last_write_time(_Path, _Result);\r\n        if (_Error != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"last_write_time\", _Error, _Path);\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline file_time_type last_write_time(const path& _Path, error_code& _Ec) noexcept {\r\n        file_time_type _Result;\r\n        _Ec = _Make_ec(_Last_write_time(_Path, _Result));\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD inline void last_write_time(const path& _Target, const file_time_type _New_time) {\r\n        // set the last write time of _Target to _New_time\r\n        const auto _Err = __std_fs_set_last_write_time(_New_time.time_since_epoch().count(), _Target.c_str());\r\n        if (_Err != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"last_write_time\", _Err, _Target);\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD inline void last_write_time(\r\n        const path& _Target, const file_time_type _New_time, error_code& _Ec) noexcept {\r\n        // set the last write time of _Target to _New_time\r\n        _Ec = _Make_ec(__std_fs_set_last_write_time(_New_time.time_since_epoch().count(), _Target.c_str()));\r\n    }\r\n\r\n    _EXPORT_STD enum class perm_options { replace = 0x1, add = 0x2, remove = 0x4, nofollow = 0x8 };\r\n\r\n    _BITMASK_OPS(_EXPORT_STD, perm_options)\r\n\r\n    _NODISCARD inline __std_win_error _Permissions(\r\n        const path& _Target, const perms _Perms, perm_options _Options) noexcept {\r\n        bool _Readonly;\r\n        const bool _Follow_symlinks = (_Options & perm_options::nofollow) == perm_options{};\r\n        _Options &= ~perm_options::nofollow;\r\n        const auto _Write_perms = _Perms & perms::_All_write;\r\n        switch (_Options) {\r\n        case perm_options::replace:\r\n            // always apply FILE_ATTRIBUTE_READONLY according to _Perms\r\n            _Readonly = _Write_perms == perms::none;\r\n            break;\r\n        case perm_options::add:\r\n            if (_Write_perms == perms::none) {\r\n                // if we aren't adding any write bits, then we won't change\r\n                // FILE_ATTRIBUTE_READONLY, so there's nothing to do\r\n                return __std_win_error::_Success;\r\n            }\r\n\r\n            _Readonly = false;\r\n            break;\r\n        case perm_options::remove:\r\n            if (_Write_perms != perms::_All_write) {\r\n                // if we aren't removing all write bits, then we won't change\r\n                // FILE_ATTRIBUTE_READONLY, so there's nothing to do\r\n                return __std_win_error::_Success;\r\n            }\r\n\r\n            _Readonly = true;\r\n            break;\r\n        case perm_options::nofollow: // avoid C4061\r\n        default:\r\n            return __std_win_error::_Invalid_parameter;\r\n        }\r\n\r\n        return __std_fs_change_permissions(_Target.c_str(), _Follow_symlinks, _Readonly);\r\n    }\r\n\r\n    _EXPORT_STD inline void permissions(\r\n        const path& _Target, const perms _Perms, const perm_options _Options = perm_options::replace) {\r\n        const auto _Err = _Permissions(_Target, _Perms, _Options);\r\n        if (_Err != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"permissions\", _Err, _Target);\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD inline void permissions(\r\n        const path& _Target, const perms _Perms, const perm_options _Options, error_code& _Ec) noexcept {\r\n        _Ec = _Make_ec(_Permissions(_Target, _Perms, _Options));\r\n    }\r\n\r\n    _EXPORT_STD inline void permissions(const path& _Target, const perms _Perms, error_code& _Ec) noexcept {\r\n        _STD filesystem::permissions(_Target, _Perms, perm_options::replace, _Ec);\r\n    }\r\n\r\n    _NODISCARD inline path _Temp_directory_path_impl(error_code& _Ec) {\r\n        // get a location suitable for temporary storage, and verify that it is a directory\r\n        path _Result;\r\n        _Result._Text.resize(__std_fs_temp_path_max);\r\n        const auto _Temp_result = __std_fs_get_temp_path(_Result._Text.data());\r\n        _Result._Text.resize(_Temp_result._Size);\r\n        if (_Temp_result._Error == __std_win_error::_Max) { // path could be retrieved, but was not a directory\r\n            _Ec = _STD make_error_code(errc::not_a_directory);\r\n        } else {\r\n            _Ec = _Make_ec(_Temp_result._Error);\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path temp_directory_path(error_code& _Ec) {\r\n        _Ec.clear(); // for exception safety\r\n        path _Result(_STD filesystem::_Temp_directory_path_impl(_Ec));\r\n        if (_Ec) {\r\n            // returns path() if an error occurs. (N5008 [fs.op.temp.dir.path]/3)\r\n            return {};\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path temp_directory_path() {\r\n        // get a location suitable for temporary storage, and verify that it is a directory\r\n        error_code _Ec; // unusual arrangement to allow thrown error_code to have generic_category()\r\n        path _Result(_STD filesystem::_Temp_directory_path_impl(_Ec));\r\n        if (_Ec) {\r\n            _Throw_fs_error(\"temp_directory_path\", _Ec, _Result);\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path current_path(error_code& _Ec) {\r\n        _Ec.clear(); // for exception safety\r\n        path _Result;\r\n        _Result._Text.resize(__std_fs_max_path);\r\n        for (;;) {\r\n            const auto _Requested_size = static_cast<unsigned long>(_Result._Text.size());\r\n            const auto _Temp_result    = __std_fs_get_current_path(_Requested_size, _Result._Text.data());\r\n            _Result._Text.resize(_Temp_result._Size);\r\n            if (_Temp_result._Size < _Requested_size) {\r\n                _Ec = _Make_ec(_Temp_result._Error);\r\n                return _Result;\r\n            }\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path current_path() {\r\n        error_code _Ec;\r\n        path _Result(_STD filesystem::current_path(_Ec));\r\n        if (_Ec) {\r\n            _Throw_fs_error(\"current_path()\", _Ec);\r\n        }\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD inline void current_path(const path& _To, error_code& _Ec) noexcept { // set the current path\r\n        _Ec = _Make_ec(__std_fs_set_current_path(_To._Text.data()));\r\n    }\r\n\r\n    _EXPORT_STD inline void current_path(const path& _To) { // set the current path\r\n        const auto _Err = __std_fs_set_current_path(_To._Text.data());\r\n        if (_Err != __std_win_error::_Success) {\r\n            _Throw_fs_error(\"current_path(const path&)\", _Err, _To);\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path weakly_canonical(const path& _Input, error_code& _Ec) {\r\n        // eventually calls GetFinalPathNameByHandleW\r\n        _Ec.clear(); // for exception safety\r\n\r\n        path _Temp;\r\n\r\n        {\r\n            const auto _Err = _Canonical(_Temp, _Input.native());\r\n\r\n            if (_Err == __std_win_error::_Success) {\r\n                return _Temp;\r\n            }\r\n\r\n            if (!__std_is_file_not_found(_Err)) {\r\n                _Ec = _Make_ec(_Err);\r\n                return {};\r\n            }\r\n        }\r\n\r\n        const path _Normalized = _Input.lexically_normal();\r\n\r\n        path _Result = _Normalized.root_path();\r\n\r\n        const path _Normalized_relative = _Normalized.relative_path();\r\n\r\n        bool _Call_canonical = true;\r\n\r\n        for (const auto& _Elem : _Normalized_relative) {\r\n            _Result /= _Elem;\r\n\r\n            if (_Call_canonical) {\r\n                _Temp.clear();\r\n\r\n                const auto _Err = _Canonical(_Temp, _Result.native());\r\n\r\n                if (_Err == __std_win_error::_Success) {\r\n                    _Result = _STD move(_Temp);\r\n                } else if (__std_is_file_not_found(_Err)) {\r\n                    _Call_canonical = false;\r\n                } else {\r\n                    _Ec = _Make_ec(_Err);\r\n                    return {};\r\n                }\r\n            }\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path weakly_canonical(const path& _Input) {\r\n        // eventually calls GetFinalPathNameByHandleW\r\n        error_code _Ec;\r\n\r\n        path _Result = _STD filesystem::weakly_canonical(_Input, _Ec);\r\n\r\n        if (_Ec) {\r\n            _Throw_fs_error(\"weakly_canonical\", _Ec, _Input);\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path proximate(\r\n        const path& _Path, const path& _Base = _STD filesystem::current_path()) {\r\n        // eventually calls GetFinalPathNameByHandleW\r\n        const path _Weakly_canonical_path = _STD filesystem::weakly_canonical(_Path);\r\n        const path _Weakly_canonical_base = _STD filesystem::weakly_canonical(_Base);\r\n        return _Weakly_canonical_path.lexically_proximate(_Weakly_canonical_base);\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path proximate(const path& _Path, const path& _Base, error_code& _Ec) {\r\n        // eventually calls GetFinalPathNameByHandleW\r\n        const path _Weakly_canonical_path = _STD filesystem::weakly_canonical(_Path, _Ec);\r\n\r\n        if (_Ec) {\r\n            return {};\r\n        }\r\n\r\n        const path _Weakly_canonical_base = _STD filesystem::weakly_canonical(_Base, _Ec);\r\n\r\n        if (_Ec) {\r\n            return {};\r\n        }\r\n\r\n        return _Weakly_canonical_path.lexically_proximate(_Weakly_canonical_base);\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path proximate(const path& _Path, error_code& _Ec) {\r\n        // eventually calls GetFinalPathNameByHandleW\r\n        const path _Base = _STD filesystem::current_path(_Ec);\r\n        // N4950 [fs.op.proximate]/1 incorrectly calls current_path()\r\n        if (_Ec) {\r\n            return {};\r\n        }\r\n\r\n        return _STD filesystem::proximate(_Path, _Base, _Ec);\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path relative(\r\n        const path& _Path, const path& _Base = _STD filesystem::current_path()) {\r\n        // eventually calls GetFinalPathNameByHandleW\r\n        const path _Weakly_canonical_path = _STD filesystem::weakly_canonical(_Path);\r\n        const path _Weakly_canonical_base = _STD filesystem::weakly_canonical(_Base);\r\n        return _Weakly_canonical_path.lexically_relative(_Weakly_canonical_base);\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path relative(const path& _Path, const path& _Base, error_code& _Ec) {\r\n        // eventually calls GetFinalPathNameByHandleW\r\n        const path _Weakly_canonical_path = _STD filesystem::weakly_canonical(_Path, _Ec);\r\n\r\n        if (_Ec) {\r\n            return {};\r\n        }\r\n\r\n        const path _Weakly_canonical_base = _STD filesystem::weakly_canonical(_Base, _Ec);\r\n\r\n        if (_Ec) {\r\n            return {};\r\n        }\r\n\r\n        return _Weakly_canonical_path.lexically_relative(_Weakly_canonical_base);\r\n    }\r\n\r\n    _EXPORT_STD _NODISCARD inline path relative(const path& _Path, error_code& _Ec) {\r\n        // eventually calls GetFinalPathNameByHandleW\r\n        const path _Base = _STD filesystem::current_path(_Ec);\r\n        // N4950 [fs.op.relative]/1 incorrectly calls current_path()\r\n        if (_Ec) {\r\n            return {};\r\n        }\r\n\r\n        return _STD filesystem::relative(_Path, _Base, _Ec);\r\n    }\r\n\r\n    inline void _Copy_impl(\r\n        const directory_entry& _From, const path& _To, const copy_options _Options, error_code& _Ec) {\r\n        // implement copy, does not clear _Ec for callers\r\n        // Standard quotes herein are relative to N4950\r\n        // The following parts of LWG-3057 are implemented:\r\n        // * guarding equivalent() from nonexistent to\r\n        // * replacing unspecified recursion prevention tag with copy_options::directories_only\r\n        // Other parts of LWG-3057 remain under discussion in the committee and are not yet implemented.\r\n        //  (In particular, changes to existing destination flags, and error handling).\r\n        const bool _Flink = (_Options & (copy_options::skip_symlinks | copy_options::copy_symlinks))\r\n                         != copy_options::none; // create_symlinks intentionally removed by LWG-3057\r\n        const auto _Fstat = _From._Get_any_status(_Flink ? _Symlink_status_stats_flags : _Status_stats_flags);\r\n        if (_Fstat._Error != __std_win_error::_Success) { // report an error if exists(f) is false\r\n            _Ec = _Make_ec(_Fstat._Error);\r\n            return;\r\n        }\r\n\r\n        const bool _Tlink =\r\n            (_Options & (copy_options::create_symlinks | copy_options::skip_symlinks)) != copy_options::none;\r\n        const auto _Tstat = _Get_any_status(_To, _Tlink ? _Symlink_status_stats_flags : _Status_stats_flags);\r\n        if (_Tstat._Not_good()) {\r\n            _Ec = _Make_ec(_Tstat._Error);\r\n            return;\r\n        }\r\n\r\n        if (_STD filesystem::exists(_Tstat._Status)) {\r\n            if (_STD filesystem::equivalent(_From, _To, _Ec)) { // report an error if equivalent(from, to) is true\r\n                _Ec = _STD make_error_code(errc::file_exists);\r\n                return;\r\n            }\r\n\r\n            if (_Ec) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        const bool _Fstat_is_other =\r\n            _STD filesystem::is_other(_Fstat._Status) && _Fstat._Status.type() != file_type::junction;\r\n        const bool _Tstat_is_other =\r\n            _STD filesystem::is_other(_Tstat._Status) && _Tstat._Status.type() != file_type::junction;\r\n        if (_Fstat_is_other || _Tstat_is_other) {\r\n            // report an error if is_other(f) || is_other(t) is true, and it's not a junction\r\n            _Ec = _STD make_error_code(errc::operation_not_supported);\r\n            return;\r\n        }\r\n\r\n        if (_STD filesystem::is_directory(_Fstat._Status) && _STD filesystem::is_regular_file(_Tstat._Status)) {\r\n            // report an error if is_directory(f) && is_regular_file(t) is true\r\n            _Ec = _STD make_error_code(errc::file_exists);\r\n            return;\r\n        }\r\n\r\n        if (_Fstat._Status.type() == file_type::junction) {\r\n            if ((_Options & copy_options::skip_symlinks) != copy_options::none) {\r\n                return;\r\n            }\r\n\r\n            // _Options includes copy_options::copy_symlinks,\r\n            // since _Fstat is only allowed to be a symbolic link when either skip_symlinks or copy_symlinks\r\n            if (!_STD filesystem::exists(_Tstat._Status)) {\r\n                _Ec = _Make_ec(_Copy_junction(_From, _To));\r\n            }\r\n        }\r\n\r\n        if (_STD filesystem::is_symlink(_Fstat._Status)) {\r\n            if ((_Options & copy_options::skip_symlinks) != copy_options::none) {\r\n                return;\r\n            }\r\n\r\n            // _Options includes copy_options::copy_symlinks,\r\n            // since _Fstat is only allowed to be a symbolic link when either skip_symlinks or copy_symlinks\r\n            if (!_STD filesystem::exists(_Tstat._Status)) {\r\n                _STD filesystem::copy_symlink(_From, _To, _Ec);\r\n                return;\r\n            }\r\n\r\n            // otherwise report an error\r\n            _Ec = _STD make_error_code(errc::operation_not_supported);\r\n            return;\r\n        }\r\n\r\n        if (_STD filesystem::is_regular_file(_Fstat._Status)) {\r\n            if ((_Options & copy_options::directories_only) != copy_options::none) {\r\n                return;\r\n            }\r\n\r\n            if ((_Options & copy_options::create_symlinks) != copy_options::none) {\r\n                // Otherwise, if (condition) then create a symbolic link to the source file\r\n                _STD filesystem::create_symlink(_From, _To, _Ec);\r\n                return;\r\n            }\r\n\r\n            if ((_Options & copy_options::create_hard_links) != copy_options::none) {\r\n                // Otherwise, if (condition) then create a hard link to the source file\r\n                _STD filesystem::create_hard_link(_From, _To, _Ec);\r\n                return;\r\n            }\r\n\r\n            if (_STD filesystem::is_directory(_Tstat._Status)) {\r\n                // Otherwise, if is_directory(t), then copy_file(from, to / from.filename(), options)\r\n                _STD filesystem::copy_file(_From, _To / _From.path().filename(), _Options, _Ec);\r\n                return;\r\n            }\r\n\r\n            // Otherwise, copy_file(_From, _To, _Options)\r\n            _STD filesystem::copy_file(_From, _To, _Options, _Ec);\r\n            return;\r\n        }\r\n\r\n        // The following condition modified by LWG-3057:\r\n        if (_STD filesystem::is_directory(_Fstat._Status)) {\r\n            if ((_Options & copy_options::create_symlinks) != copy_options::none) {\r\n                _Ec = _STD make_error_code(errc::is_a_directory);\r\n                return;\r\n            }\r\n\r\n            _STD filesystem::create_directory(_To, _From, _Ec);\r\n            if (_Ec) {\r\n                return;\r\n            }\r\n\r\n            // Note LWG-3057 uses directories_only as the flag, instead of an unspecified copy_options value:\r\n            if ((_Options & copy_options::recursive) != copy_options::none\r\n                || (_Options & copy_options::directories_only) == copy_options::none) {\r\n                for (directory_iterator _It(_From, _Ec);; _It.increment(_Ec)) {\r\n                    if (_Ec || _It._At_end()) {\r\n                        return;\r\n                    }\r\n\r\n                    // if ((options & copy_options::recursive) != copy_options::none ||\r\n                    //      !is_directory(linkf ? symlink_status(x.path()) : status(x.path())))\r\n                    //        copy(x.path(), to/x.path().filename(), options);\r\n                    bool _Recurse = (_Options & copy_options::recursive) != copy_options::none;\r\n                    if (!_Recurse) {\r\n                        const auto _Child_status_result =\r\n                            _It->_Get_any_status(_Flink ? _Symlink_status_stats_flags : _Status_stats_flags);\r\n                        if (_Child_status_result._Error != __std_win_error::_Success) {\r\n                            _Ec = _Make_ec(_Child_status_result._Error);\r\n                            return;\r\n                        }\r\n\r\n                        _Recurse = !_STD filesystem::is_directory(_Child_status_result._Status);\r\n                    }\r\n\r\n                    if (_Recurse) {\r\n                        _Copy_impl(*_It, _To / _It->path().filename(), _Options, _Ec);\r\n                        if (_Ec) {\r\n                            return;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        // Otherwise, no effects.\r\n    }\r\n\r\n    _EXPORT_STD inline void copy(const path& _From, const path& _To, const copy_options _Options, error_code& _Ec) {\r\n        const directory_entry _From_dir(_From, _Ec);\r\n        if (_Ec) { // report an error if exists(f) is false\r\n            return;\r\n        }\r\n\r\n        _Copy_impl(_From_dir, _To, _Options, _Ec);\r\n    }\r\n\r\n    _EXPORT_STD inline void copy(const path& _From, const path& _To, const copy_options _Options) {\r\n        error_code _Ec;\r\n        _STD filesystem::copy(_From, _To, _Options, _Ec);\r\n        if (_Ec) {\r\n            _Throw_fs_error(\"copy\", _Ec, _From, _To);\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD inline void copy(const path& _From, const path& _To, error_code& _Ec) {\r\n        return _STD filesystem::copy(_From, _To, copy_options::none, _Ec);\r\n    }\r\n\r\n    _EXPORT_STD inline void copy(const path& _From, const path& _To) {\r\n        return _STD filesystem::copy(_From, _To, copy_options::none);\r\n    }\r\n} // namespace filesystem\r\n\r\ntemplate <>\r\nstruct hash<filesystem::path> {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = filesystem::path;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = size_t;\r\n    _NODISCARD static size_t operator()(const filesystem::path& _Path) noexcept {\r\n        return _STD filesystem::hash_value(_Path);\r\n    }\r\n};\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <>\r\n    inline constexpr bool enable_borrowed_range<filesystem::directory_iterator> = true;\r\n    template <>\r\n    inline constexpr bool enable_borrowed_range<filesystem::recursive_directory_iterator> = true;\r\n    template <>\r\n    inline constexpr bool enable_view<filesystem::directory_iterator> = true;\r\n    template <>\r\n    inline constexpr bool enable_view<filesystem::recursive_directory_iterator> = true;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX17 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _FILESYSTEM_\r\n"
  },
  {
    "path": "stl/inc/flat_map",
    "content": "// flat_map standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _FLAT_MAP_\r\n#define _FLAT_MAP_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#if !_HAS_CXX23\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <flat_map> are available only with C++23 or later.\");\r\n#else // ^^^ !_HAS_CXX23 / _HAS_CXX23 vvv\r\n\r\n#include <algorithm>\r\n#include <compare>\r\n#include <concepts>\r\n#include <initializer_list>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n#include <xmemory>\r\n#include <xutility>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#undef msvc\r\n\r\n_STD_BEGIN\r\ntemplate <bool _IsUnique, class _Key, class _Mapped, class _Compare, class _KeyContainer, class _MappedContainer>\r\nclass _Flat_map_base;\r\n\r\ntemplate <class _KeyIter, class _MappedIter, class _MappedConvIter>\r\nstruct _Pairing_iterator_provider;\r\n\r\ntemplate <class _KeyIter, class _MappedIter, class _MappedConvIter>\r\nconcept _Can_unwrap_pairing_iterator =\r\n    !conjunction_v<is_same<_Unwrapped_t<_KeyIter>, _KeyIter>, is_same<_Unwrapped_t<_MappedIter>, _MappedIter>>;\r\n\r\ntemplate <class _KeyIter, class _MappedIter, class _MappedConvIter>\r\nstruct _Pairing_iterator_provider {\r\n    class _Iterator {\r\n    public:\r\n        using iterator_category = input_iterator_tag;\r\n        using iterator_concept  = random_access_iterator_tag;\r\n        using difference_type   = ptrdiff_t;\r\n        using value_type        = pair<iter_value_t<_KeyIter>, iter_value_t<_MappedIter>>;\r\n        using reference         = pair<iter_reference_t<_KeyIter>, iter_reference_t<_MappedIter>>;\r\n\r\n        _Iterator() = default;\r\n\r\n    private:\r\n        template <bool _IsUnique, class _Key, class _Mapped, class _Compare, class _KeyContainer,\r\n            class _MappedContainer>\r\n        friend class _Flat_map_base;\r\n        template <class _KeyIter2, class _MappedIter2, class _MappedConvIter2>\r\n        friend struct _Pairing_iterator_provider;\r\n\r\n        explicit _Iterator(_KeyIter _Key_iter, _MappedIter _Mapped_iter)\r\n            noexcept(is_nothrow_move_constructible_v<_KeyIter> && is_nothrow_move_constructible_v<_MappedIter>)\r\n            : _Key_it(_STD move(_Key_iter)), _Mapped_it(_STD move(_Mapped_iter)) {}\r\n\r\n        using _Const_iterator     = _Pairing_iterator_provider<_KeyIter, _MappedConvIter, _MappedConvIter>::_Iterator;\r\n        using _Unwrapped_iterator = _Pairing_iterator_provider<_Unwrapped_t<_KeyIter>, _Unwrapped_t<_MappedIter>,\r\n            _Unwrapped_t<_MappedConvIter>>::_Iterator;\r\n\r\n        class _Arrow_proxy {\r\n        public:\r\n            _NODISCARD const reference* operator->() const noexcept {\r\n                return _STD addressof(_Ref);\r\n            }\r\n\r\n        private:\r\n            friend _Iterator;\r\n\r\n            explicit _Arrow_proxy(const _Iterator& _Iter) : _Ref{*_Iter} {}\r\n\r\n            reference _Ref;\r\n        };\r\n\r\n    public:\r\n        using pointer = _Arrow_proxy;\r\n\r\n        _NODISCARD reference operator*() const {\r\n            return reference{*_Key_it, *_Mapped_it};\r\n        }\r\n\r\n        _NODISCARD friend pair<iter_rvalue_reference_t<_KeyIter>, iter_rvalue_reference_t<_MappedIter>> iter_move(\r\n            const _Iterator& _It) {\r\n            return {_RANGES iter_move(_It._Key_it), _RANGES iter_move(_It._Mapped_it)};\r\n        }\r\n\r\n        _NODISCARD pointer operator->() const {\r\n            return pointer{*this};\r\n        }\r\n\r\n        _Iterator& operator++() {\r\n            ++_Key_it;\r\n            ++_Mapped_it;\r\n            return *this;\r\n        }\r\n\r\n        _Iterator operator++(int) {\r\n            auto _Old = *this;\r\n            ++*this;\r\n            return _Old;\r\n        }\r\n\r\n        _NODISCARD bool operator==(const _Iterator& _Right) const {\r\n            _Compat(_Right);\r\n            return _Key_it == _Right._Key_it;\r\n        }\r\n\r\n        _NODISCARD auto operator<=>(const _Iterator& _Right) const {\r\n            _Compat(_Right);\r\n            return _Synth_three_way{}(_Key_it, _Right._Key_it);\r\n        }\r\n\r\n        _Iterator& operator--() {\r\n            --_Key_it;\r\n            --_Mapped_it;\r\n            return *this;\r\n        }\r\n\r\n        _Iterator operator--(int) {\r\n            auto _Old = *this;\r\n            --*this;\r\n            return _Old;\r\n        }\r\n\r\n        _Iterator& operator+=(const difference_type _Off) {\r\n            _Key_it += static_cast<iter_difference_t<_KeyIter>>(_Off);\r\n            _Mapped_it += static_cast<iter_difference_t<_MappedIter>>(_Off);\r\n            return *this;\r\n        }\r\n\r\n        _Iterator& operator-=(const difference_type _Off) {\r\n            _Key_it -= static_cast<iter_difference_t<_KeyIter>>(_Off);\r\n            _Mapped_it -= static_cast<iter_difference_t<_MappedIter>>(_Off);\r\n            return *this;\r\n        }\r\n\r\n        _NODISCARD _Iterator operator+(const difference_type _Off) const {\r\n            auto _Tmp = *this;\r\n            _Tmp += _Off;\r\n            return _Tmp;\r\n        }\r\n\r\n        _NODISCARD _Iterator operator-(const difference_type _Off) const {\r\n            auto _Tmp = *this;\r\n            _Tmp -= _Off;\r\n            return _Tmp;\r\n        }\r\n\r\n        _NODISCARD reference operator[](const difference_type _Off) const {\r\n            return *(*this + _Off);\r\n        }\r\n\r\n        _NODISCARD difference_type operator-(const _Iterator& _Right) const {\r\n            _Compat(_Right);\r\n            return _Key_it - _Right._Key_it;\r\n        }\r\n\r\n        _NODISCARD friend _Iterator operator+(const difference_type _Off, const _Iterator& _Right) {\r\n            return _Right + _Off;\r\n        }\r\n\r\n        _NODISCARD operator _Const_iterator() const\r\n            requires (!is_same_v<_MappedIter, _MappedConvIter>)\r\n        {\r\n            return _Const_iterator{_Key_it, _Mapped_it};\r\n        }\r\n\r\n        void _Compat([[maybe_unused]] const _Iterator& _Right) const noexcept { // test for compatible iterator pair\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(\r\n                _Key_it - _Right._Key_it == _Mapped_it - _Right._Mapped_it, \"iterators from inconsistent ranges\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        }\r\n\r\n        using _Prevent_inheriting_unwrap = _Iterator;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        friend void _Verify_range(const _Iterator& _First, const _Iterator& _Last) noexcept {\r\n            if constexpr (_Range_verifiable_v<_KeyIter>) {\r\n                _Verify_range(_First._Key_it, _Last._Key_it); // intentional ADL\r\n            }\r\n\r\n            if constexpr (_Range_verifiable_v<_MappedIter>) {\r\n                _Verify_range(_First._Mapped_it, _Last._Mapped_it); // intentional ADL\r\n            }\r\n\r\n            _First._Compat(_Last);\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        void _Verify_offset(const difference_type _Off) const noexcept {\r\n            if constexpr (_Offset_verifiable_v<_KeyIter>) {\r\n                _Key_it._Verify_offset(_Off);\r\n            }\r\n\r\n            if constexpr (_Offset_verifiable_v<_MappedIter>) {\r\n                _Mapped_it._Verify_offset(_Off);\r\n            }\r\n        }\r\n\r\n        _NODISCARD auto _Unwrapped() const\r\n            requires _Can_unwrap_pairing_iterator<_KeyIter, _MappedIter, _MappedConvIter>\r\n        {\r\n            return _Unwrapped_iterator{_STD _Get_unwrapped(_Key_it), _STD _Get_unwrapped(_Mapped_it)};\r\n        }\r\n\r\n        static constexpr bool _Unwrap_when_unverified = _Do_unwrap_when_unverified_v<_KeyIter>\r\n                                                     && _Do_unwrap_when_unverified_v<_MappedIter>\r\n                                                     && _Do_unwrap_when_unverified_v<_MappedConvIter>;\r\n\r\n        void _Seek_to(const _Unwrapped_iterator& _Dst)\r\n            requires _Can_unwrap_pairing_iterator<_KeyIter, _MappedIter, _MappedConvIter>\r\n        {\r\n            _STD _Seek_wrapped(_Key_it, _Dst._Key_it);\r\n            _STD _Seek_wrapped(_Mapped_it, _Dst._Mapped_it);\r\n        }\r\n\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n    public:\r\n#else\r\n    private:\r\n#endif\r\n        _KeyIter _Key_it;\r\n        _MappedIter _Mapped_it;\r\n    };\r\n};\r\n\r\ntemplate <bool _IsNoexcept, class _Containers>\r\nstruct _NODISCARD _Flat_map_swap_clear_guard {\r\n    // Invariant: (_Target1 == nullptr) == (_Target2 == nullptr)\r\n    _Containers* _Target1;\r\n    _Containers* _Target2;\r\n\r\n    _Flat_map_swap_clear_guard& operator=(const _Flat_map_swap_clear_guard&) = delete;\r\n\r\n    void _Dismiss() noexcept {\r\n        _Target1 = nullptr;\r\n        _Target2 = nullptr;\r\n    }\r\n\r\n    ~_Flat_map_swap_clear_guard() {\r\n        if (_Target1) {\r\n            _Target1->keys.clear();\r\n            _Target1->values.clear();\r\n            _Target2->keys.clear();\r\n            _Target2->values.clear();\r\n        }\r\n    }\r\n};\r\ntemplate <class _Containers>\r\nstruct _NODISCARD _Flat_map_swap_clear_guard<true, _Containers> {\r\n    constexpr explicit _Flat_map_swap_clear_guard(_Containers*, _Containers*) noexcept {}\r\n\r\n    _Flat_map_swap_clear_guard& operator=(const _Flat_map_swap_clear_guard&) = delete;\r\n\r\n    void _Dismiss() noexcept {}\r\n};\r\n\r\n_EXPORT_STD template <class _Key, class _Mapped, class _Compare = less<_Key>, class _KeyContainer = vector<_Key>,\r\n    class _MappedContainer = vector<_Mapped>>\r\nclass flat_map;\r\n\r\n_EXPORT_STD template <class _Key, class _Mapped, class _Compare = less<_Key>, class _KeyContainer = vector<_Key>,\r\n    class _MappedContainer = vector<_Mapped>>\r\nclass flat_multimap;\r\n\r\ntemplate <bool _IsUnique, class _Key, class _Mapped, class _Compare, class _KeyContainer, class _MappedContainer>\r\nclass _Flat_map_base {\r\nprivate:\r\n    using _Sorted_t = conditional_t<_IsUnique, sorted_unique_t, sorted_equivalent_t>;\r\n    using _Derived  = conditional_t<_IsUnique, flat_map<_Key, _Mapped, _Compare, _KeyContainer, _MappedContainer>,\r\n         flat_multimap<_Key, _Mapped, _Compare, _KeyContainer, _MappedContainer>>;\r\n\r\n    static constexpr const char* _Msg_not_sorted_maybe_unique =\r\n        _IsUnique ? \"Keys were not sorted-unique! (N5032 [flat.map.overview]/10)\"\r\n                  : \"Keys were not sorted! (N5032 [flat.multimap.overview]/10)\";\r\n    static constexpr const char* _Msg_replace_not_sorted_maybe_unique =\r\n        _IsUnique ? \"Keys were not sorted-unique! (N5032 [flat.map.modifiers]/37)\"\r\n                  : \"Keys were not sorted! (N5032 [flat.map.modifiers]/37, [flat.multimap.overview]/4)\";\r\n    static constexpr const char* _Msg_different_sizes =\r\n        _IsUnique ? \"Containers were different sizes! (N5032 [flat.map.overview]/9)\"\r\n                  : \"Containers were different sizes! (N5032 [flat.multimap.overview]/9)\";\r\n    static constexpr const char* _Msg_replace_different_sizes =\r\n        _IsUnique ? \"Containers were different sizes! (N5032 [flat.map.modifiers]/37)\"\r\n                  : \"Containers were different sizes! (N5032 [flat.map.modifiers]/37, [flat.multimap.overview]/4)\";\r\n\r\npublic:\r\n    // [flat.map.defn] Types\r\n    using key_type              = _Key;\r\n    using mapped_type           = _Mapped;\r\n    using value_type            = pair<key_type, mapped_type>;\r\n    using key_compare           = _Compare;\r\n    using reference             = pair<const key_type&, mapped_type&>;\r\n    using const_reference       = pair<const key_type&, const mapped_type&>;\r\n    using size_type             = size_t;\r\n    using difference_type       = ptrdiff_t;\r\n    using key_container_type    = _KeyContainer;\r\n    using mapped_container_type = _MappedContainer;\r\n\r\n    using iterator = _Pairing_iterator_provider<typename key_container_type::const_iterator,\r\n        typename mapped_container_type::iterator, typename mapped_container_type::const_iterator>::_Iterator;\r\n\r\n    using const_iterator = _Pairing_iterator_provider<typename key_container_type::const_iterator,\r\n        typename mapped_container_type::const_iterator, typename mapped_container_type::const_iterator>::_Iterator;\r\n\r\n    using reverse_iterator       = _STD reverse_iterator<iterator>;\r\n    using const_reverse_iterator = _STD reverse_iterator<const_iterator>;\r\n\r\n    static_assert(is_same_v<key_type, typename key_container_type::value_type>,\r\n        \"key_type and key_container_type::value_type must be the same. \"\r\n        \"(N5032 [flat.map.overview]/8, [flat.multimap.overview]/8)\");\r\n    static_assert(is_same_v<mapped_type, typename mapped_container_type::value_type>,\r\n        \"mapped_type and mapped_container_type::value_type must be the same. \"\r\n        \"(N5032 [flat.map.overview]/8, [flat.multimap.overview]/8)\");\r\n    static_assert(!_Is_vector_bool<key_container_type>,\r\n        \"key_container_type cannot be vector<bool> because it is not a sequence container. \"\r\n        \"(N5032 [flat.map.overview]/7, [flat.multimap.overview]/7)\");\r\n    static_assert(!_Is_vector_bool<mapped_container_type>,\r\n        \"mapped_container_type cannot be vector<bool> because it is not a sequence container. \"\r\n        \"(N5032 [flat.map.overview]/7, [flat.multimap.overview]/7)\");\r\n    static_assert(random_access_iterator<typename key_container_type::const_iterator>,\r\n        \"key_container_type must support random-access iterators in order to be adapted. \"\r\n        \"(N5032 [flat.map.overview]/7, [flat.multimap.overview]/7)\");\r\n    static_assert(random_access_iterator<typename mapped_container_type::const_iterator>,\r\n        \"mapped_container_type must support random-access iterators in order to be adapted. \"\r\n        \"(N5032 [flat.map.overview]/7, [flat.multimap.overview]/7)\");\r\n\r\n    class value_compare {\r\n    public:\r\n        _NODISCARD bool operator()(const_reference _Lhs, const_reference _Rhs) const {\r\n            return _Key_comparator(_Lhs.first, _Rhs.first);\r\n        }\r\n\r\n    private:\r\n        friend _Flat_map_base;\r\n\r\n        explicit value_compare(const key_compare& _Comp) : _Key_comparator(_Comp) {}\r\n\r\n        key_compare _Key_comparator;\r\n    };\r\n\r\n    struct containers {\r\n        key_container_type keys;\r\n        mapped_container_type values;\r\n    };\r\n\r\n    // [flat.map.cons] Constructors\r\n    _Flat_map_base() : _Data(), _Key_compare() {}\r\n\r\n    _Flat_map_base(const _Flat_map_base&) = default;\r\n\r\n    _Flat_map_base(_Flat_map_base&& _Other) noexcept(is_nothrow_move_constructible_v<key_container_type>\r\n                                                     && is_nothrow_move_constructible_v<mapped_container_type>\r\n                                                     && is_nothrow_copy_constructible_v<key_compare>) // strengthened\r\n        : _Data(_STD move(_Other).extract()),\r\n          _Key_compare(_Other._Key_compare) // intentionally copy comparator, see LWG-2227\r\n    {}\r\n\r\n    explicit _Flat_map_base(const key_compare& _Comp) : _Data(), _Key_compare(_Comp) {}\r\n\r\n    _Flat_map_base(\r\n        key_container_type _Key_cont, mapped_container_type _Mapped_cont, const key_compare& _Comp = key_compare())\r\n        : _Data{.keys = _STD move(_Key_cont), .values = _STD move(_Mapped_cont)}, _Key_compare(_Comp) {\r\n        _STL_ASSERT(_Data.keys.size() == _Data.values.size(), _Msg_different_sizes);\r\n        _Establish_invariants();\r\n    }\r\n\r\n    _Flat_map_base(_Sorted_t, key_container_type _Key_cont, mapped_container_type _Mapped_cont,\r\n        const key_compare& _Comp = key_compare())\r\n        : _Data{.keys = _STD move(_Key_cont), .values = _STD move(_Mapped_cont)}, _Key_compare(_Comp) {\r\n        _STL_ASSERT(_Data.keys.size() == _Data.values.size(), _Msg_different_sizes);\r\n        _STL_ASSERT(_Is_sorted_maybe_unique(), _Msg_not_sorted_maybe_unique);\r\n    }\r\n\r\n    template <_Iterator_for_container _InIt>\r\n    _Flat_map_base(const _InIt _First, const _InIt _Last, const key_compare& _Comp = key_compare())\r\n        : _Data(), _Key_compare(_Comp) {\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <_Iterator_for_container _InIt>\r\n    _Flat_map_base(_Sorted_t _Tag, const _InIt _First, const _InIt _Last, const key_compare& _Comp = key_compare())\r\n        : _Data(), _Key_compare(_Comp) {\r\n        insert(_Tag, _First, _Last);\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    _Flat_map_base(from_range_t, _Rng&& _Range) : _Data(), _Key_compare() {\r\n        insert_range(_STD forward<_Rng>(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    _Flat_map_base(from_range_t, _Rng&& _Range, const key_compare& _Comp) : _Data(), _Key_compare(_Comp) {\r\n        insert_range(_STD forward<_Rng>(_Range));\r\n    }\r\n\r\n    _Flat_map_base(const initializer_list<value_type> _Ilist, const key_compare& _Comp = key_compare())\r\n        : _Data(), _Key_compare(_Comp) {\r\n        insert(_Ilist);\r\n    }\r\n\r\n    _Flat_map_base(_Sorted_t _Tag, const initializer_list<value_type> _Ilist, const key_compare& _Comp = key_compare())\r\n        : _Data(), _Key_compare(_Comp) {\r\n        insert(_Tag, _Ilist);\r\n    }\r\n\r\n    // [flat.map.cons.alloc] Constructors with allocators\r\n    template <_Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    explicit _Flat_map_base(const _Alloc& _Al)\r\n        : _Data{.keys = _STD make_obj_using_allocator<key_container_type>(_Al),\r\n              .values = _STD make_obj_using_allocator<mapped_container_type>(_Al)},\r\n          _Key_compare() {}\r\n\r\n    template <_Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(const key_compare& _Comp, const _Alloc& _Al)\r\n        : _Data{.keys = _STD make_obj_using_allocator<key_container_type>(_Al),\r\n              .values = _STD make_obj_using_allocator<mapped_container_type>(_Al)},\r\n          _Key_compare(_Comp) {}\r\n\r\n    template <_Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(const key_container_type& _Key_cont, const mapped_container_type& _Mapped_cont, const _Alloc& _Al)\r\n        : _Flat_map_base(_Key_cont, _Mapped_cont, key_compare(), _Al) {}\r\n\r\n    template <_Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(const key_container_type& _Key_cont, const mapped_container_type& _Mapped_cont,\r\n        const key_compare& _Comp, const _Alloc& _Al)\r\n        : _Data{.keys = _STD make_obj_using_allocator<key_container_type>(_Al, _Key_cont),\r\n              .values = _STD make_obj_using_allocator<mapped_container_type>(_Al, _Mapped_cont)},\r\n          _Key_compare(_Comp) {\r\n        _STL_ASSERT(_Data.keys.size() == _Data.values.size(), _Msg_different_sizes);\r\n        _Establish_invariants();\r\n    }\r\n\r\n    template <_Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(_Sorted_t _Tag, const key_container_type& _Key_cont, const mapped_container_type& _Mapped_cont,\r\n        const _Alloc& _Al)\r\n        : _Flat_map_base(_Tag, _Key_cont, _Mapped_cont, key_compare(), _Al) {}\r\n\r\n    template <_Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(_Sorted_t, const key_container_type& _Key_cont, const mapped_container_type& _Mapped_cont,\r\n        const key_compare& _Comp, const _Alloc& _Al)\r\n        : _Data{.keys = _STD make_obj_using_allocator<key_container_type>(_Al, _Key_cont),\r\n              .values = _STD make_obj_using_allocator<mapped_container_type>(_Al, _Mapped_cont)},\r\n          _Key_compare(_Comp) {\r\n        _STL_ASSERT(_Data.keys.size() == _Data.values.size(), _Msg_different_sizes);\r\n        _STL_ASSERT(_Is_sorted_maybe_unique(), _Msg_not_sorted_maybe_unique);\r\n    }\r\n\r\n    template <_Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(const _Flat_map_base& _Other, const _Alloc& _Al)\r\n        : _Data{.keys = _STD make_obj_using_allocator<key_container_type>(_Al, _Other._Data.keys),\r\n              .values = _STD make_obj_using_allocator<mapped_container_type>(_Al, _Other._Data.values)},\r\n          _Key_compare(_Other._Key_compare) {}\r\n\r\nprivate:\r\n    template <class _Alloc>\r\n    _NODISCARD containers _Extract_using_allocator(const _Alloc& _Al) && {\r\n        _Clear_guard _Always_clear{this};\r\n        return containers{.keys = _STD make_obj_using_allocator<key_container_type>(_Al, _STD move(_Data.keys)),\r\n            .values             = _STD make_obj_using_allocator<mapped_container_type>(_Al, _STD move(_Data.values))};\r\n    }\r\n\r\npublic:\r\n    template <_Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(_Flat_map_base&& _Other, const _Alloc& _Al)\r\n        : _Data{_STD move(_Other)._Extract_using_allocator(_Al)},\r\n          _Key_compare(_Other._Key_compare) // intentionally copy comparator, see LWG-2227\r\n    {}\r\n\r\n    template <_Iterator_for_container _InIt, _Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(const _InIt _First, const _InIt _Last, const _Alloc& _Al) : _Flat_map_base(_Al) {\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <_Iterator_for_container _InIt, _Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(const _InIt _First, const _InIt _Last, const key_compare& _Comp, const _Alloc& _Al)\r\n        : _Flat_map_base(_Comp, _Al) {\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <_Iterator_for_container _InIt, _Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(_Sorted_t _Tag, const _InIt _First, const _InIt _Last, const _Alloc& _Al) : _Flat_map_base(_Al) {\r\n        insert(_Tag, _First, _Last);\r\n    }\r\n\r\n    template <_Iterator_for_container _InIt, _Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(_Sorted_t _Tag, const _InIt _First, const _InIt _Last, const key_compare& _Comp, const _Alloc& _Al)\r\n        : _Flat_map_base(_Comp, _Al) {\r\n        insert(_Tag, _First, _Last);\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng,\r\n        _Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(from_range_t, _Rng&& _Range, const _Alloc& _Al) : _Flat_map_base(_Al) {\r\n        insert_range(_STD forward<_Rng>(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng,\r\n        _Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(from_range_t, _Rng&& _Range, const key_compare& _Comp, const _Alloc& _Al)\r\n        : _Flat_map_base(_Comp, _Al) {\r\n        insert_range(_STD forward<_Rng>(_Range));\r\n    }\r\n\r\n    template <_Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(const initializer_list<value_type> _Ilist, const _Alloc& _Al) : _Flat_map_base(_Al) {\r\n        insert(_Ilist);\r\n    }\r\n\r\n    template <_Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(const initializer_list<value_type> _Ilist, const key_compare& _Comp, const _Alloc& _Al)\r\n        : _Flat_map_base(_Comp, _Al) {\r\n        insert(_Ilist);\r\n    }\r\n\r\n    template <_Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(_Sorted_t _Tag, const initializer_list<value_type> _Ilist, const _Alloc& _Al) : _Flat_map_base(_Al) {\r\n        insert(_Tag, _Ilist);\r\n    }\r\n\r\n    template <_Usable_allocator_for<key_container_type, mapped_container_type> _Alloc>\r\n    _Flat_map_base(\r\n        _Sorted_t _Tag, const initializer_list<value_type> _Ilist, const key_compare& _Comp, const _Alloc& _Al)\r\n        : _Flat_map_base(_Comp, _Al) {\r\n        insert(_Tag, _Ilist);\r\n    }\r\n\r\n    // Assignment operators\r\n    _Flat_map_base& operator=(const _Flat_map_base& _Other) {\r\n        _Clear_guard _Guard{this};\r\n        _Data          = _Other._Data;\r\n        _Key_compare   = _Other._Key_compare;\r\n        _Guard._Target = nullptr;\r\n        return *this;\r\n    }\r\n\r\n    _Flat_map_base& operator=(_Flat_map_base&& _Other)\r\n        noexcept(is_nothrow_move_assignable_v<key_container_type> && is_nothrow_move_assignable_v<mapped_container_type>\r\n                 && is_nothrow_copy_assignable_v<key_compare>) /* strengthened */ {\r\n        if (this != _STD addressof(_Other)) {\r\n            _Clear_guard _Guard{this};\r\n            _Clear_guard _Always_clear{_STD addressof(_Other)};\r\n            _Data          = _STD move(_Other._Data);\r\n            _Key_compare   = _Other._Key_compare; // intentionally copy comparator, see LWG-2227\r\n            _Guard._Target = nullptr;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    // Iterators\r\n    _NODISCARD iterator begin() noexcept {\r\n        _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<iterator>);\r\n        return iterator{_Data.keys.cbegin(), _Data.values.begin()};\r\n    }\r\n    _NODISCARD const_iterator begin() const noexcept {\r\n        _STL_INTERNAL_STATIC_ASSERT(random_access_iterator<const_iterator>);\r\n        _STL_INTERNAL_STATIC_ASSERT(convertible_to<iterator, const_iterator>);\r\n        return const_iterator{_Data.keys.cbegin(), _Data.values.cbegin()};\r\n    }\r\n    _NODISCARD iterator end() noexcept {\r\n        return iterator{_Data.keys.cend(), _Data.values.end()};\r\n    }\r\n    _NODISCARD const_iterator end() const noexcept {\r\n        return const_iterator{_Data.keys.cend(), _Data.values.cend()};\r\n    }\r\n\r\n    _NODISCARD reverse_iterator rbegin() noexcept {\r\n        return reverse_iterator{end()};\r\n    }\r\n    _NODISCARD const_reverse_iterator rbegin() const noexcept {\r\n        return const_reverse_iterator{end()};\r\n    }\r\n    _NODISCARD reverse_iterator rend() noexcept {\r\n        return reverse_iterator{begin()};\r\n    }\r\n    _NODISCARD const_reverse_iterator rend() const noexcept {\r\n        return const_reverse_iterator{begin()};\r\n    }\r\n\r\n    _NODISCARD const_iterator cbegin() const noexcept {\r\n        return const_iterator{_Data.keys.cbegin(), _Data.values.cbegin()};\r\n    }\r\n    _NODISCARD const_iterator cend() const noexcept {\r\n        return const_iterator{_Data.keys.cend(), _Data.values.cend()};\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator crbegin() const noexcept {\r\n        return const_reverse_iterator{cend()};\r\n    }\r\n    _NODISCARD const_reverse_iterator crend() const noexcept {\r\n        return const_reverse_iterator{cbegin()};\r\n    }\r\n\r\n    // [flat.map.capacity] Capacity\r\n    _NODISCARD_EMPTY_MEMBER bool empty() const noexcept {\r\n        return _Data.keys.empty();\r\n    }\r\n\r\n    _NODISCARD size_type size() const noexcept {\r\n        return _Data.keys.size();\r\n    }\r\n\r\n    _NODISCARD size_type max_size() const noexcept {\r\n        return (_STD min) (_Data.keys.max_size(), _Data.values.max_size());\r\n    }\r\n\r\n    // [flat.map.modifiers] Modifiers\r\n    template <class... _ArgTypes>\r\n    auto emplace(_ArgTypes&&... _Args)\r\n        requires is_constructible_v<value_type, _ArgTypes...>\r\n    {\r\n        value_type _Val(_STD forward<_ArgTypes>(_Args)...);\r\n        return _Try_emplace(_STD move(_Val.first), _STD move(_Val.second));\r\n    }\r\n\r\n    template <class... _ArgTypes>\r\n    iterator emplace_hint(const const_iterator _Position, _ArgTypes&&... _Args)\r\n        requires is_constructible_v<value_type, _ArgTypes...>\r\n    {\r\n        value_type _Val(_STD forward<_ArgTypes>(_Args)...);\r\n        return _Emplace_hint<false>(_Position, _STD move(_Val.first), _STD move(_Val.second));\r\n    }\r\n\r\n    auto insert(const value_type& _Val) {\r\n        return _Try_emplace(_Val.first, _Val.second);\r\n    }\r\n    auto insert(value_type&& _Val) {\r\n        return _Try_emplace(_STD move(_Val.first), _STD move(_Val.second));\r\n    }\r\n\r\n    iterator insert(const const_iterator _Position, const value_type& _Val) {\r\n        return _Emplace_hint<false>(_Position, _Val.first, _Val.second);\r\n    }\r\n    iterator insert(const const_iterator _Position, value_type&& _Val) {\r\n        return _Emplace_hint<false>(_Position, _STD move(_Val.first), _STD move(_Val.second));\r\n    }\r\n\r\n    template <class _OtherPair>\r\n    auto insert(_OtherPair&& _Val)\r\n        requires is_constructible_v<value_type, _OtherPair>\r\n    {\r\n        return emplace(_STD forward<_OtherPair>(_Val));\r\n    }\r\n\r\n    template <class _OtherPair>\r\n    iterator insert(const const_iterator _Position, _OtherPair&& _Val)\r\n        requires is_constructible_v<value_type, _OtherPair>\r\n    {\r\n        return emplace_hint(_Position, _STD forward<_OtherPair>(_Val));\r\n    }\r\n\r\n    template <_Iterator_for_container _InIt>\r\n    void insert(const _InIt _First, const _InIt _Last) {\r\n        _Insert_range<true>(_First, _Last);\r\n    }\r\n    template <_Iterator_for_container _InIt>\r\n    void insert(_Sorted_t, const _InIt _First, const _InIt _Last) {\r\n        _Insert_range<false>(_First, _Last);\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    void insert_range(_Rng&& _Range) {\r\n        _Insert_range<true>(_RANGES begin(_Range), _RANGES end(_Range));\r\n    }\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    void insert_range(_Sorted_t, _Rng&& _Range) {\r\n        _Insert_range<false>(_RANGES begin(_Range), _RANGES end(_Range));\r\n    }\r\n\r\n    void insert(const initializer_list<value_type> _Ilist) {\r\n        _Insert_range<true>(_Ilist.begin(), _Ilist.end());\r\n    }\r\n    void insert(_Sorted_t, const initializer_list<value_type> _Ilist) {\r\n        _Insert_range<false>(_Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\n    _NODISCARD containers extract() && noexcept(\r\n        is_nothrow_move_constructible_v<key_container_type>\r\n        && is_nothrow_move_constructible_v<mapped_container_type>) /* strengthened */ {\r\n        // always clears the container (N5032 [flat.map.modifiers]/35 and [flat.multimap.overview]/4)\r\n        _Clear_guard _Always_clear{this};\r\n        return _STD move(_Data);\r\n    }\r\n\r\n    void replace(key_container_type&& _Key_cont, mapped_container_type&& _Mapped_cont) {\r\n        _STL_ASSERT(_Key_cont.size() == _Mapped_cont.size(), _Msg_replace_different_sizes);\r\n        _STL_ASSERT(_Is_sorted_maybe_unique(_Key_cont.begin(), _Key_cont.end()), _Msg_replace_not_sorted_maybe_unique);\r\n        _Clear_guard _Guard{this};\r\n        _Data.keys     = _STD move(_Key_cont);\r\n        _Data.values   = _STD move(_Mapped_cont);\r\n        _Guard._Target = nullptr;\r\n    }\r\n\r\n    iterator erase(const iterator _Position) {\r\n        return erase(static_cast<const_iterator>(_Position));\r\n    }\r\n\r\n    iterator erase(const const_iterator _Position) {\r\n        _Clear_guard _Guard{this};\r\n        auto _Key_it   = _Data.keys.erase(_Position._Key_it);\r\n        auto _Val_it   = _Data.values.erase(_Position._Mapped_it);\r\n        _Guard._Target = nullptr;\r\n        return iterator{_STD move(_Key_it), _STD move(_Val_it)};\r\n    }\r\n\r\n    size_type erase(const key_type& _Key_val) {\r\n        return _Erase_key(_Key_val);\r\n    }\r\n\r\n    template <class _OtherKey>\r\n        requires _Transparent<key_compare> && (!is_convertible_v<_OtherKey, iterator>)\r\n              && (!is_convertible_v<_OtherKey, const_iterator>)\r\n    size_type erase(_OtherKey&& _Key_val) {\r\n        return _Erase_key(_STD forward<_OtherKey>(_Key_val));\r\n    }\r\n\r\n    iterator erase(const const_iterator _First, const const_iterator _Last) {\r\n        _Clear_guard _Guard{this};\r\n        auto _Key_it   = _Data.keys.erase(_First._Key_it, _Last._Key_it);\r\n        auto _Val_it   = _Data.values.erase(_First._Mapped_it, _Last._Mapped_it);\r\n        _Guard._Target = nullptr;\r\n        return iterator{_STD move(_Key_it), _STD move(_Val_it)};\r\n    }\r\n\r\n    void swap(_Derived& _Other)\r\n        noexcept(is_nothrow_swappable_v<key_container_type> && is_nothrow_swappable_v<mapped_container_type>\r\n                 && is_nothrow_swappable_v<key_compare>) {\r\n        constexpr bool _Is_noexcept = is_nothrow_swappable_v<key_container_type>\r\n                                   && is_nothrow_swappable_v<mapped_container_type>\r\n                                   && is_nothrow_swappable_v<key_compare>;\r\n        _Flat_map_swap_clear_guard<_Is_noexcept, containers> _Guard{\r\n            _STD addressof(_Data), _STD addressof(_Other._Data)};\r\n        _RANGES swap(_Data.keys, _Other._Data.keys);\r\n        _RANGES swap(_Data.values, _Other._Data.values);\r\n        _RANGES swap(_Key_compare, _Other._Key_compare);\r\n        _Guard._Dismiss();\r\n    }\r\n\r\n    void clear() noexcept {\r\n        _Data.keys.clear();\r\n        _Data.values.clear();\r\n    }\r\n\r\n    // Observers\r\n    _NODISCARD key_compare key_comp() const {\r\n        return _Key_compare;\r\n    }\r\n\r\n    _NODISCARD value_compare value_comp() const {\r\n        return value_compare{_Key_compare};\r\n    }\r\n\r\n    _NODISCARD const key_container_type& keys() const noexcept {\r\n        return _Data.keys;\r\n    }\r\n\r\n    _NODISCARD const mapped_container_type& values() const noexcept {\r\n        return _Data.values;\r\n    }\r\n\r\n    // map operations\r\n    _NODISCARD iterator find(const key_type& _Key_val) {\r\n        return _Find(_Key_val);\r\n    }\r\n    _NODISCARD const_iterator find(const key_type& _Key_val) const {\r\n        return _Find(_Key_val);\r\n    }\r\n    template <class _OtherKey>\r\n    _NODISCARD iterator find(const _OtherKey& _Key_val)\r\n        requires _Transparent<key_compare>\r\n    {\r\n        return _Find(_Key_val);\r\n    }\r\n    template <class _OtherKey>\r\n    _NODISCARD const_iterator find(const _OtherKey& _Key_val) const\r\n        requires _Transparent<key_compare>\r\n    {\r\n        return _Find(_Key_val);\r\n    }\r\n\r\n    _NODISCARD size_type count(const key_type& _Key_val) const {\r\n        return _Count(_Key_val);\r\n    }\r\n    template <class _OtherKey>\r\n    _NODISCARD size_type count(const _OtherKey& _Key_val) const\r\n        requires _Transparent<key_compare>\r\n    {\r\n        return _Count(_Key_val);\r\n    }\r\n\r\n    _NODISCARD bool contains(const key_type& _Key_val) const {\r\n        return _Contains(_Key_val);\r\n    }\r\n    template <class _OtherKey>\r\n    _NODISCARD bool contains(const _OtherKey& _Key_val) const\r\n        requires _Transparent<key_compare>\r\n    {\r\n        return _Contains(_Key_val);\r\n    }\r\n\r\n    _NODISCARD iterator lower_bound(const key_type& _Key_val) {\r\n        return _Lower_bound(_Key_val);\r\n    }\r\n    _NODISCARD const_iterator lower_bound(const key_type& _Key_val) const {\r\n        return _Lower_bound(_Key_val);\r\n    }\r\n    template <class _OtherKey>\r\n    _NODISCARD iterator lower_bound(const _OtherKey& _Key_val)\r\n        requires _Transparent<key_compare>\r\n    {\r\n        return _Lower_bound(_Key_val);\r\n    }\r\n    template <class _OtherKey>\r\n    _NODISCARD const_iterator lower_bound(const _OtherKey& _Key_val) const\r\n        requires _Transparent<key_compare>\r\n    {\r\n        return _Lower_bound(_Key_val);\r\n    }\r\n\r\n    _NODISCARD iterator upper_bound(const key_type& _Key_val) {\r\n        return _Upper_bound(_Key_val);\r\n    }\r\n    _NODISCARD const_iterator upper_bound(const key_type& _Key_val) const {\r\n        return _Upper_bound(_Key_val);\r\n    }\r\n    template <class _OtherKey>\r\n    _NODISCARD iterator upper_bound(const _OtherKey& _Key_val)\r\n        requires _Transparent<key_compare>\r\n    {\r\n        return _Upper_bound(_Key_val);\r\n    }\r\n    template <class _OtherKey>\r\n    _NODISCARD const_iterator upper_bound(const _OtherKey& _Key_val) const\r\n        requires _Transparent<key_compare>\r\n    {\r\n        return _Upper_bound(_Key_val);\r\n    }\r\n\r\n    _NODISCARD pair<iterator, iterator> equal_range(const key_type& _Key_val) {\r\n        return _Equal_range(_Key_val);\r\n    }\r\n    _NODISCARD pair<const_iterator, const_iterator> equal_range(const key_type& _Key_val) const {\r\n        return _Equal_range(_Key_val);\r\n    }\r\n    template <class _OtherKey>\r\n    _NODISCARD pair<iterator, iterator> equal_range(const _OtherKey& _Key_val)\r\n        requires _Transparent<key_compare>\r\n    {\r\n        return _Equal_range(_Key_val);\r\n    }\r\n    template <class _OtherKey>\r\n    _NODISCARD pair<const_iterator, const_iterator> equal_range(const _OtherKey& _Key_val) const\r\n        requires _Transparent<key_compare>\r\n    {\r\n        return _Equal_range(_Key_val);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const _Derived& _Lhs, const _Derived& _Rhs) {\r\n        return _STD equal(_Lhs.cbegin(), _Lhs.cend(), _Rhs.cbegin(), _Rhs.cend());\r\n    }\r\n\r\n    _NODISCARD friend auto operator<=>(const _Derived& _Lhs, const _Derived& _Rhs) {\r\n        return _STD lexicographical_compare_three_way(\r\n            _Lhs.cbegin(), _Lhs.cend(), _Rhs.cbegin(), _Rhs.cend(), _Synth_three_way{});\r\n    }\r\n\r\n    friend void swap(_Derived& _Lhs, _Derived& _Rhs) noexcept(noexcept(_Lhs.swap(_Rhs))) {\r\n        _Lhs.swap(_Rhs);\r\n    }\r\n\r\nprotected:\r\n    template <class _OtherKey, class... _MappedArgTypes>\r\n    _NODISCARD conditional_t<_IsUnique, pair<iterator, bool>, iterator> _Try_emplace(\r\n        _OtherKey&& _Key_val, _MappedArgTypes&&... _Mapped_args) {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_constructible_v<mapped_type, _MappedArgTypes...>);\r\n        _STL_INTERNAL_STATIC_ASSERT(is_same_v<remove_cvref_t<_OtherKey>, key_type>\r\n                                    || (is_constructible_v<key_type, _OtherKey> && _Transparent<key_compare>) );\r\n\r\n        const auto _Key_it = _STD upper_bound(_Data.keys.begin(), _Data.keys.end(), _Key_val, _Pass_key_comp());\r\n        const auto _Index  = _Key_it - _Data.keys.begin();\r\n        if constexpr (_IsUnique) {\r\n            if (_Key_it != _Data.keys.begin() && !_Compare_keys(*(_Key_it - 1), _Key_val)) {\r\n                // Previous element is equivalent to key, no insert needed\r\n                return {begin() + (_Index - 1), false};\r\n            }\r\n        }\r\n\r\n        // Need to insert\r\n        _Emplace_exact(\r\n            cbegin() + _Index, _STD forward<_OtherKey>(_Key_val), _STD forward<_MappedArgTypes>(_Mapped_args)...);\r\n\r\n        if constexpr (_IsUnique) {\r\n            return {begin() + _Index, true};\r\n        } else {\r\n            return begin() + _Index;\r\n        }\r\n    }\r\n\r\n    template <bool _OverwriteIfExists, class _OtherKey, class... _MappedArgTypes>\r\n    _NODISCARD iterator _Emplace_hint(\r\n        const const_iterator _Position, _OtherKey&& _Key_val, _MappedArgTypes&&... _Mapped_args) {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_constructible_v<mapped_type, _MappedArgTypes...>);\r\n        _STL_INTERNAL_STATIC_ASSERT(is_same_v<remove_cvref_t<_OtherKey>, key_type>\r\n                                    || (is_constructible_v<key_type, _OtherKey> && _Transparent<key_compare>) );\r\n\r\n        // Overwriting is not supported when the container allows multiple copies of a key.\r\n        _STL_INTERNAL_STATIC_ASSERT(_IsUnique || !_OverwriteIfExists);\r\n\r\n        const const_iterator _Begin = cbegin();\r\n        const const_iterator _End   = cend();\r\n\r\n        const weak_ordering _Hint_order = [&] {\r\n            if constexpr (_IsUnique) {\r\n                if (_Position == _End || _Compare_keys(_Key_val, *_Position._Key_it)) {\r\n                    if (_Position == _Begin || _Compare_keys(*(_Position._Key_it - 1), _Key_val)) {\r\n                        return weak_ordering::equivalent;\r\n                    } else {\r\n                        return weak_ordering::greater;\r\n                    }\r\n                }\r\n            } else {\r\n                if (_Position == _End || !_Compare_keys(*_Position._Key_it, _Key_val)) {\r\n                    if (_Position == _Begin || !_Compare_keys(_Key_val, *(_Position._Key_it - 1))) {\r\n                        return weak_ordering::equivalent;\r\n                    } else {\r\n                        return weak_ordering::greater;\r\n                    }\r\n                }\r\n            }\r\n            return weak_ordering::less;\r\n        }();\r\n\r\n        const auto _New_position = _Iterator_from_key_iterator(\r\n            _Hint_order == weak_ordering::equivalent ? _Position._Key_it\r\n            : _Hint_order == weak_ordering::less\r\n                ? _STD lower_bound(_Position._Key_it, _Data.keys.cend(), _Key_val, _Pass_key_comp())\r\n                : _STD upper_bound(_Data.keys.cbegin(), _Position._Key_it, _Key_val, _Pass_key_comp()));\r\n\r\n        if constexpr (_IsUnique) {\r\n            if (_Hint_order == weak_ordering::less) {\r\n                if (_New_position != _End && !_Compare_keys(_Key_val, *_New_position._Key_it)) {\r\n                    if constexpr (_OverwriteIfExists) {\r\n                        *_New_position._Mapped_it = mapped_type(_STD forward<_MappedArgTypes>(_Mapped_args)...);\r\n                    }\r\n                    return _New_position;\r\n                }\r\n            } else if (_Hint_order == weak_ordering::greater) {\r\n                if (_New_position != _Begin && !_Compare_keys(*(_New_position._Key_it - 1), _Key_val)) {\r\n                    const auto _It = _New_position - 1;\r\n                    if constexpr (_OverwriteIfExists) {\r\n                        *_It._Mapped_it = mapped_type(_STD forward<_MappedArgTypes>(_Mapped_args)...);\r\n                    }\r\n                    return _It;\r\n                }\r\n            }\r\n        }\r\n\r\n        const auto _Dist = _New_position - begin();\r\n        _Emplace_exact(\r\n            _New_position, _STD forward<_OtherKey>(_Key_val), _STD forward<_MappedArgTypes>(_Mapped_args)...);\r\n        return begin() + _Dist;\r\n    }\r\n\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\npublic:\r\n#else\r\nprivate:\r\n#endif\r\n    _NODISCARD bool _Is_sorted_maybe_unique() const {\r\n        return _Is_sorted_maybe_unique(_Data.keys.begin(), _Data.keys.end());\r\n    }\r\n\r\nprivate:\r\n    _NODISCARD bool _Is_sorted_maybe_unique(\r\n        const key_container_type::const_iterator _It, const key_container_type::const_iterator _End) const {\r\n        if constexpr (_IsUnique) {\r\n            // sorted-unique\r\n            auto _Negated = [this](const key_type& _Lhs, const key_type& _Rhs) { return !_Compare_keys(_Lhs, _Rhs); };\r\n            return _STD adjacent_find(_It, _End, _Negated) == _End;\r\n        } else {\r\n            return _STD is_sorted(_It, _End, _Pass_key_comp());\r\n        }\r\n    }\r\n\r\n    _NODISCARD auto _View_to_mutate() {\r\n        using _Mutating_iterator = _Pairing_iterator_provider<typename key_container_type::iterator,\r\n            typename mapped_container_type::iterator, typename mapped_container_type::iterator>::_Iterator;\r\n        return _RANGES subrange<_Mutating_iterator>{_Mutating_iterator{_Data.keys.begin(), _Data.values.begin()},\r\n            _Mutating_iterator{_Data.keys.end(), _Data.values.end()}};\r\n    }\r\n\r\n    struct _Value_compare_to_pass {\r\n        static constexpr bool _Efficiently_copyable = conjunction_v<bool_constant<sizeof(key_compare) <= sizeof(void*)>,\r\n            is_trivially_copy_constructible<key_compare>, is_trivially_destructible<key_compare>>;\r\n\r\n        using _Copy_or_ref = conditional_t<_Efficiently_copyable, key_compare, const key_compare&>;\r\n\r\n        _Copy_or_ref _Key_comparator;\r\n\r\n        template <class _Pair1, class _Pair2>\r\n        _NODISCARD bool operator()(const _Pair1& _Lhs, const _Pair2& _Rhs) const {\r\n            return _Key_comparator(_Lhs.first, _Rhs.first);\r\n        }\r\n    };\r\n\r\n    _NODISCARD auto _Erase_dupes_if_not_multi_pred() {\r\n        _STL_INTERNAL_STATIC_ASSERT(_IsUnique);\r\n        if constexpr (_Equivalence_is_equality<key_compare, key_type>) {\r\n            return [](const auto& _Lhs, const auto& _Rhs) static { return _Lhs.first == _Rhs.first; };\r\n        } else {\r\n            return [this](const auto& _Lhs, const auto& _Rhs) {\r\n#ifdef __clang__ // TRANSITION, LLVM-81243\r\n                return !this->_Compare_keys(_Lhs.first, _Rhs.first);\r\n#else // ^^^ workaround / no workaround vvv\r\n                return !_Compare_keys(_Lhs.first, _Rhs.first);\r\n#endif // ^^^ no workaround ^^^\r\n            };\r\n        }\r\n    }\r\n\r\n    template <bool _NeedSorting>\r\n    void _Restore_invariants(const size_type _Old_size) {\r\n        // No _Clear_guard needed. This is called only by _Insert_range() (which has a _Clear_guard)\r\n        // and _Establish_invariants() (which is called only by constructors which don't need guards).\r\n\r\n        auto _View          = _View_to_mutate();\r\n        const auto _Begin   = _View.begin();\r\n        const auto _Old_end = _Begin + static_cast<difference_type>(_Old_size);\r\n        const auto _End     = _View.end();\r\n\r\n        if constexpr (_NeedSorting) {\r\n            _RANGES sort(_Old_end, _End, _Value_compare_to_pass{_Key_compare});\r\n        } else {\r\n            [[maybe_unused]] const auto _Diff = static_cast<key_container_type::difference_type>(_Old_size);\r\n            _STL_ASSERT(\r\n                _Is_sorted_maybe_unique(_Data.keys.begin() + _Diff, _Data.keys.end()), _Msg_not_sorted_maybe_unique);\r\n        }\r\n\r\n        _RANGES inplace_merge(_View, _Old_end, _Value_compare_to_pass{_Key_compare});\r\n\r\n        if constexpr (_IsUnique) {\r\n            const auto _New_last = _RANGES unique(_View, _Erase_dupes_if_not_multi_pred()).begin();\r\n            _Data.keys.erase(_New_last._Key_it, _Data.keys.end());\r\n            _Data.values.erase(_New_last._Mapped_it, _Data.values.end());\r\n        }\r\n\r\n        _STL_INTERNAL_CHECK(_Is_sorted_maybe_unique());\r\n    }\r\n\r\n    void _Establish_invariants() {\r\n        if (_Data.keys.empty()) {\r\n            return;\r\n        }\r\n\r\n        const auto _Begin        = _Data.keys.begin();\r\n        const auto _End          = _Data.keys.end();\r\n        const auto _Sorted_until = _STD is_sorted_until(_Begin, _End, _Pass_key_comp()); // O(N) if already sorted.\r\n        const auto _Sorted_size  = static_cast<size_type>(_Sorted_until - _Begin);\r\n        _Restore_invariants<true>(_Sorted_size);\r\n    }\r\n\r\n    template <class _OtherKey, class... _MappedArgTypes>\r\n    void _Emplace_exact(const const_iterator _Position, _OtherKey&& _Key_val, _MappedArgTypes&&... _Mapped_args) {\r\n        _Clear_guard _Guard{this};\r\n        _Data.keys.emplace(_Position._Key_it, _STD forward<_OtherKey>(_Key_val));\r\n        _Data.values.emplace(_Position._Mapped_it, _STD forward<_MappedArgTypes>(_Mapped_args)...);\r\n        _Guard._Target = nullptr;\r\n    }\r\n\r\n    template <bool _NeedSorting, class _InIt, class _Sentinel>\r\n    void _Insert_range(_InIt _First, const _Sentinel _Last) {\r\n        _Clear_guard _Guard{this};\r\n\r\n        const size_type _Old_size = size();\r\n\r\n        // Insert the new elements at the end\r\n        for (; _First != _Last; ++_First) {\r\n            value_type _Val = *_First;\r\n            if constexpr (_Has_guaranteed_push_back<key_container_type>) {\r\n                _Data.keys.push_back(_STD move(_Val.first));\r\n            } else {\r\n                _Data.keys.insert(_Data.keys.end(), _STD move(_Val.first));\r\n            }\r\n\r\n            if constexpr (_Has_guaranteed_push_back<mapped_container_type>) {\r\n                _Data.values.push_back(_STD move(_Val.second));\r\n            } else {\r\n                _Data.values.insert(_Data.values.end(), _STD move(_Val.second));\r\n            }\r\n        }\r\n\r\n        _Restore_invariants<_NeedSorting>(_Old_size);\r\n\r\n        _Guard._Target = nullptr;\r\n    }\r\n\r\n    template <class _KeyTy>\r\n    _NODISCARD size_type _Erase_key(const _KeyTy& _Key_val) {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_same_v<_KeyTy, key_type> || _Transparent<key_compare>);\r\n        const auto _Equal_pos = _Equal_range(_Key_val);\r\n        const auto _Count     = static_cast<size_type>(_Equal_pos.second - _Equal_pos.first);\r\n        erase(_Equal_pos.first, _Equal_pos.second);\r\n        return _Count;\r\n    }\r\n\r\n    // size_type is always size_t\r\n    template <class _Key2, class _Mapped2, class _Compare2, class _KeyContainer2, class _MappedContainer2,\r\n        class _Predicate2>\r\n    friend size_t erase_if(flat_map<_Key2, _Mapped2, _Compare2, _KeyContainer2, _MappedContainer2>&, _Predicate2);\r\n    template <class _Key2, class _Mapped2, class _Compare2, class _KeyContainer2, class _MappedContainer2,\r\n        class _Predicate2>\r\n    friend size_t erase_if(flat_multimap<_Key2, _Mapped2, _Compare2, _KeyContainer2, _MappedContainer2>&, _Predicate2);\r\n\r\n    template <class _Predicate>\r\n    _NODISCARD size_t _Erase_if(_Predicate _Pred) {\r\n        _Clear_guard _Guard{this};\r\n\r\n        // N5032 [flat.map.erasure]/2 and [flat.multimap.erasure]/2\r\n        const auto _Proj     = [](const auto& _Element) static { return const_reference{_Element}; };\r\n        const auto _New_last = _RANGES remove_if(_View_to_mutate(), _Pred, _Proj).begin();\r\n        const auto _Old_size = size();\r\n\r\n        _Data.keys.erase(_New_last._Key_it, _Data.keys.end());\r\n        _Data.values.erase(_New_last._Mapped_it, _Data.values.end());\r\n\r\n        _Guard._Target = nullptr;\r\n        return _Old_size - size();\r\n    }\r\n\r\n    template <class _SelfTy, class _KeyTy>\r\n    _NODISCARD auto _Find(this _SelfTy& _Self, const _KeyTy& _Key_val) {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_same_v<_KeyTy, key_type> || _Transparent<key_compare>);\r\n        const auto _Position =\r\n            _STD lower_bound(_Self._Data.keys.begin(), _Self._Data.keys.end(), _Key_val, _Self._Pass_key_comp());\r\n        if (_Position != _Self._Data.keys.end() && !_Self._Compare_keys(_Key_val, *_Position)) {\r\n            return _Self._Iterator_from_key_iterator(_Position);\r\n        } else {\r\n            return _Self.end();\r\n        }\r\n    }\r\n\r\n    template <class _KeyTy>\r\n    _NODISCARD size_type _Count(const _KeyTy& _Key_val) const {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_same_v<_KeyTy, key_type> || _Transparent<key_compare>);\r\n        if constexpr (_IsUnique && is_same_v<_KeyTy, key_type>) { // Optimization restricted due to GH-5992\r\n            return _Contains(_Key_val);\r\n        } else {\r\n            const auto [_First, _Last] =\r\n                _STD equal_range(_Data.keys.begin(), _Data.keys.end(), _Key_val, _Pass_key_comp());\r\n            return static_cast<size_type>(_Last - _First);\r\n        }\r\n    }\r\n\r\n    template <class _KeyTy>\r\n    _NODISCARD bool _Contains(const _KeyTy& _Key_val) const {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_same_v<_KeyTy, key_type> || _Transparent<key_compare>);\r\n        return _STD binary_search(_Data.keys.begin(), _Data.keys.end(), _Key_val, _Pass_key_comp());\r\n    }\r\n\r\n    template <class _SelfTy, class _KeyTy>\r\n    _NODISCARD auto _Lower_bound(this _SelfTy& _Self, const _KeyTy& _Key_val) {\r\n        return _Self._Iterator_from_key_iterator(\r\n            _STD lower_bound(_Self._Data.keys.begin(), _Self._Data.keys.end(), _Key_val, _Self._Pass_key_comp()));\r\n    }\r\n\r\n    template <class _SelfTy, class _KeyTy>\r\n    _NODISCARD auto _Upper_bound(this _SelfTy& _Self, const _KeyTy& _Key_val) {\r\n        return _Self._Iterator_from_key_iterator(\r\n            _STD upper_bound(_Self._Data.keys.begin(), _Self._Data.keys.end(), _Key_val, _Self._Pass_key_comp()));\r\n    }\r\n\r\n    template <class _SelfTy, class _KeyTy>\r\n    _NODISCARD auto _Equal_range(this _SelfTy& _Self, const _KeyTy& _Key_val) {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_same_v<_KeyTy, key_type> || _Transparent<key_compare>);\r\n        if constexpr (_IsUnique && is_same_v<_KeyTy, key_type>) { // Optimization restricted due to GH-5992\r\n            // In a non-multi container, equal_range can have size at most 1\r\n            const auto _First =\r\n                _STD lower_bound(_Self._Data.keys.begin(), _Self._Data.keys.end(), _Key_val, _Self._Pass_key_comp());\r\n            const bool _Missing = _First == _Self._Data.keys.end() || _Self._Compare_keys(_Key_val, *_First);\r\n            return pair{_Self._Iterator_from_key_iterator(_First),\r\n                _Self._Iterator_from_key_iterator(_Missing ? _First : _First + 1)};\r\n        } else {\r\n            const auto [_First, _Last] =\r\n                _STD equal_range(_Self._Data.keys.begin(), _Self._Data.keys.end(), _Key_val, _Self._Pass_key_comp());\r\n            return pair{_Self._Iterator_from_key_iterator(_First), _Self._Iterator_from_key_iterator(_Last)};\r\n        }\r\n    }\r\n\r\n    template <class _SelfTy>\r\n    _NODISCARD conditional_t<is_const_v<_SelfTy>, const_iterator, iterator> _Iterator_from_key_iterator(\r\n        this _SelfTy& _Self, const key_container_type::const_iterator& _Iter) {\r\n        const difference_type _Offset = _Iter - _Self._Data.keys.cbegin();\r\n        return _Self.begin() + _Offset;\r\n    }\r\n\r\n    template <class _Lty, class _Rty>\r\n    _NODISCARD bool _Compare_keys(const _Lty& _Lhs, const _Rty& _Rhs) const\r\n        noexcept(noexcept(_DEBUG_LT_PRED(_Key_compare, _Lhs, _Rhs))) {\r\n        _STL_INTERNAL_STATIC_ASSERT(\r\n            (is_same_v<_Lty, key_type> && is_same_v<_Rty, key_type>) || _Transparent<key_compare>);\r\n\r\n        return _DEBUG_LT_PRED(_Key_compare, _Lhs, _Rhs);\r\n    }\r\n\r\n    _NODISCARD auto _Pass_key_comp() const noexcept {\r\n        return _STD _Pass_fn(_Key_compare);\r\n    }\r\n\r\n    containers _Data;\r\n    _MSVC_NO_UNIQUE_ADDRESS key_compare _Key_compare;\r\n};\r\n\r\n_EXPORT_STD template <class _Key, class _Mapped, class _Compare, class _KeyContainer, class _MappedContainer>\r\nclass flat_map : public _Flat_map_base<true, _Key, _Mapped, _Compare, _KeyContainer, _MappedContainer> {\r\nprivate:\r\n    using _Mybase = _Flat_map_base<true, _Key, _Mapped, _Compare, _KeyContainer, _MappedContainer>;\r\n\r\npublic:\r\n    using _Mybase::_Mybase;\r\n    flat_map(const flat_map&) = default;\r\n    flat_map(flat_map&&)      = default;\r\n\r\n    using typename _Mybase::const_iterator;\r\n    using typename _Mybase::iterator;\r\n    using typename _Mybase::key_compare;\r\n    using typename _Mybase::key_type;\r\n    using typename _Mybase::mapped_type;\r\n    using typename _Mybase::value_type;\r\n\r\n    flat_map& operator=(const flat_map&) = default;\r\n    flat_map& operator=(flat_map&&)      = default;\r\n\r\n    flat_map& operator=(const initializer_list<value_type> _Ilist) {\r\n        this->clear();\r\n        this->insert(_Ilist.begin(), _Ilist.end());\r\n        return *this;\r\n    }\r\n\r\n    // [flat.map.access] Access\r\n    mapped_type& operator[](const key_type& _Key_val)\r\n        requires is_default_constructible_v<mapped_type>\r\n    {\r\n        return try_emplace(_Key_val).first->second;\r\n    }\r\n    mapped_type& operator[](key_type&& _Key_val)\r\n        requires is_default_constructible_v<mapped_type>\r\n    {\r\n        return try_emplace(_STD move(_Key_val)).first->second;\r\n    }\r\n    template <class _OtherKey>\r\n    mapped_type& operator[](_OtherKey&& _Key_val)\r\n        requires _Transparent<key_compare> && is_constructible_v<key_type, _OtherKey>\r\n              && is_default_constructible_v<mapped_type>\r\n    {\r\n        return try_emplace(_STD forward<_OtherKey>(_Key_val)).first->second;\r\n    }\r\n\r\n    _NODISCARD mapped_type& at(const key_type& _Key_val) {\r\n        return _At(_Key_val);\r\n    }\r\n    _NODISCARD const mapped_type& at(const key_type& _Key_val) const {\r\n        return _At(_Key_val);\r\n    }\r\n    template <class _OtherKey>\r\n    _NODISCARD mapped_type& at(const _OtherKey& _Key_val)\r\n        requires _Transparent<key_compare>\r\n    {\r\n        return _At(_Key_val);\r\n    }\r\n    template <class _OtherKey>\r\n    _NODISCARD const mapped_type& at(const _OtherKey& _Key_val) const\r\n        requires _Transparent<key_compare>\r\n    {\r\n        return _At(_Key_val);\r\n    }\r\n\r\n    // [flat.map.modifiers] Modifiers\r\n    template <class... _MappedArgTypes>\r\n        requires is_constructible_v<mapped_type, _MappedArgTypes...>\r\n    pair<iterator, bool> try_emplace(const key_type& _Key_val, _MappedArgTypes&&... _Mapped_args) {\r\n        return this->_Try_emplace(_Key_val, _STD forward<_MappedArgTypes>(_Mapped_args)...);\r\n    }\r\n\r\n    template <class... _MappedArgTypes>\r\n        requires is_constructible_v<mapped_type, _MappedArgTypes...>\r\n    pair<iterator, bool> try_emplace(key_type&& _Key_val, _MappedArgTypes&&... _Mapped_args) {\r\n        return this->_Try_emplace(_STD move(_Key_val), _STD forward<_MappedArgTypes>(_Mapped_args)...);\r\n    }\r\n\r\n    template <class _OtherKey, class... _MappedArgTypes>\r\n        requires _Transparent<key_compare> && is_constructible_v<key_type, _OtherKey>\r\n              && is_constructible_v<mapped_type, _MappedArgTypes...> && (!is_convertible_v<_OtherKey, const_iterator>)\r\n              && (!is_convertible_v<_OtherKey, iterator>)\r\n    pair<iterator, bool> try_emplace(_OtherKey&& _Key_val, _MappedArgTypes&&... _Mapped_args) {\r\n        return this->_Try_emplace(_STD forward<_OtherKey>(_Key_val), _STD forward<_MappedArgTypes>(_Mapped_args)...);\r\n    }\r\n\r\n    template <class... _MappedArgTypes>\r\n    iterator try_emplace(const const_iterator _Position, const key_type& _Key_val, _MappedArgTypes&&... _Mapped_args)\r\n        requires is_constructible_v<mapped_type, _MappedArgTypes...>\r\n    {\r\n        return this->template _Emplace_hint<false>(_Position, _Key_val, _STD forward<_MappedArgTypes>(_Mapped_args)...);\r\n    }\r\n\r\n    template <class... _MappedArgTypes>\r\n    iterator try_emplace(const const_iterator _Position, key_type&& _Key_val, _MappedArgTypes&&... _Mapped_args)\r\n        requires is_constructible_v<mapped_type, _MappedArgTypes...>\r\n    {\r\n        return this->template _Emplace_hint<false>(\r\n            _Position, _STD move(_Key_val), _STD forward<_MappedArgTypes>(_Mapped_args)...);\r\n    }\r\n\r\n    template <class _OtherKey, class... _MappedArgTypes>\r\n    iterator try_emplace(const const_iterator _Position, _OtherKey&& _Key_val, _MappedArgTypes&&... _Mapped_args)\r\n        requires _Transparent<key_compare> && is_constructible_v<key_type, _OtherKey>\r\n              && is_constructible_v<mapped_type, _MappedArgTypes...>\r\n    {\r\n        return this->template _Emplace_hint<false>(\r\n            _Position, _STD forward<_OtherKey>(_Key_val), _STD forward<_MappedArgTypes>(_Mapped_args)...);\r\n    }\r\n\r\n    template <class _OtherMapped>\r\n    pair<iterator, bool> insert_or_assign(const key_type& _Key_val, _OtherMapped&& _Mapped_val)\r\n        requires is_assignable_v<mapped_type&, _OtherMapped> && is_constructible_v<mapped_type, _OtherMapped>\r\n    {\r\n        return _Insert_or_assign(_Key_val, _STD forward<_OtherMapped>(_Mapped_val));\r\n    }\r\n\r\n    template <class _OtherMapped>\r\n    pair<iterator, bool> insert_or_assign(key_type&& _Key_val, _OtherMapped&& _Mapped_val)\r\n        requires is_assignable_v<mapped_type&, _OtherMapped> && is_constructible_v<mapped_type, _OtherMapped>\r\n    {\r\n        return _Insert_or_assign(_STD move(_Key_val), _STD forward<_OtherMapped>(_Mapped_val));\r\n    }\r\n\r\n    template <class _OtherKey, class _OtherMapped>\r\n    pair<iterator, bool> insert_or_assign(_OtherKey&& _Key_val, _OtherMapped&& _Mapped_val)\r\n        requires _Transparent<key_compare> && is_constructible_v<key_type, _OtherKey>\r\n              && is_assignable_v<mapped_type&, _OtherMapped> && is_constructible_v<mapped_type, _OtherMapped>\r\n    {\r\n        return _Insert_or_assign(_STD forward<_OtherKey>(_Key_val), _STD forward<_OtherMapped>(_Mapped_val));\r\n    }\r\n\r\n    template <class _OtherMapped>\r\n    iterator insert_or_assign(const const_iterator _Position, const key_type& _Key_val, _OtherMapped&& _Mapped_val)\r\n        requires is_assignable_v<mapped_type&, _OtherMapped> && is_constructible_v<mapped_type, _OtherMapped>\r\n    {\r\n        return this->template _Emplace_hint<true>(_Position, _Key_val, _STD forward<_OtherMapped>(_Mapped_val));\r\n    }\r\n\r\n    template <class _OtherMapped>\r\n    iterator insert_or_assign(const const_iterator _Position, key_type&& _Key_val, _OtherMapped&& _Mapped_val)\r\n        requires is_assignable_v<mapped_type&, _OtherMapped> && is_constructible_v<mapped_type, _OtherMapped>\r\n    {\r\n        return this->template _Emplace_hint<true>(\r\n            _Position, _STD move(_Key_val), _STD forward<_OtherMapped>(_Mapped_val));\r\n    }\r\n\r\n    template <class _OtherKey, class _OtherMapped>\r\n    iterator insert_or_assign(const const_iterator _Position, _OtherKey&& _Key_val, _OtherMapped&& _Mapped_val)\r\n        requires _Transparent<key_compare> && is_constructible_v<key_type, _OtherKey>\r\n              && is_assignable_v<mapped_type&, _OtherMapped> && is_constructible_v<mapped_type, _OtherMapped>\r\n    {\r\n        return this->template _Emplace_hint<true>(\r\n            _Position, _STD forward<_OtherKey>(_Key_val), _STD forward<_OtherMapped>(_Mapped_val));\r\n    }\r\n\r\nprivate:\r\n    template <class _SelfTy, class _KeyTy>\r\n    _NODISCARD auto& _At(this _SelfTy& _Self, const _KeyTy& _Key_val) {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_same_v<_KeyTy, key_type> || _Transparent<key_compare>);\r\n        const auto _Position = _Self.find(_Key_val);\r\n        if (_Position == _Self.end()) {\r\n            _Xout_of_range(\"invalid flat_map key\");\r\n        }\r\n\r\n        return _Position->second;\r\n    }\r\n\r\n    template <class _KeyTy, class _OtherMapped>\r\n    _NODISCARD pair<iterator, bool> _Insert_or_assign(_KeyTy&& _Key_val, _OtherMapped&& _Mapped_val) {\r\n        auto _Res = this->_Try_emplace(_STD forward<_KeyTy>(_Key_val), _STD forward<_OtherMapped>(_Mapped_val));\r\n        if (!_Res.second) { // Already exists\r\n            _Res.first->second = _STD forward<_OtherMapped>(_Mapped_val);\r\n        }\r\n        return _Res;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Key, class _Mapped, class _Compare, class _KeyContainer, class _MappedContainer>\r\nclass flat_multimap : public _Flat_map_base<false, _Key, _Mapped, _Compare, _KeyContainer, _MappedContainer> {\r\nprivate:\r\n    using _Mybase = _Flat_map_base<false, _Key, _Mapped, _Compare, _KeyContainer, _MappedContainer>;\r\n\r\npublic:\r\n    using typename _Mybase::value_type;\r\n\r\n    using _Mybase::_Mybase;\r\n    flat_multimap(const flat_multimap&) = default;\r\n    flat_multimap(flat_multimap&&)      = default;\r\n\r\n    flat_multimap& operator=(const flat_multimap&) = default;\r\n    flat_multimap& operator=(flat_multimap&&)      = default;\r\n\r\n    flat_multimap& operator=(const initializer_list<value_type> _Ilist) {\r\n        this->clear();\r\n        this->insert(_Ilist.begin(), _Ilist.end());\r\n        return *this;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Key, class _Mapped, class _Compare, class _KeyContainer, class _MappedContainer,\r\n    class _Predicate>\r\nsize_t erase_if(flat_map<_Key, _Mapped, _Compare, _KeyContainer, _MappedContainer>& _Cont, _Predicate _Pred) {\r\n    return _Cont._Erase_if(_STD _Pass_fn(_Pred));\r\n}\r\n_EXPORT_STD template <class _Key, class _Mapped, class _Compare, class _KeyContainer, class _MappedContainer,\r\n    class _Predicate>\r\nsize_t erase_if(flat_multimap<_Key, _Mapped, _Compare, _KeyContainer, _MappedContainer>& _Cont, _Predicate _Pred) {\r\n    return _Cont._Erase_if(_STD _Pass_fn(_Pred));\r\n}\r\n\r\ntemplate <class _Key, class _Mapped, class _Compare, class _KeyContainer, class _MappedContainer, class _Alloc>\r\nstruct uses_allocator<flat_map<_Key, _Mapped, _Compare, _KeyContainer, _MappedContainer>, _Alloc>\r\n    : bool_constant<uses_allocator_v<_KeyContainer, _Alloc> && uses_allocator_v<_MappedContainer, _Alloc>> {};\r\n\r\ntemplate <class _Key, class _Mapped, class _Compare, class _KeyContainer, class _MappedContainer, class _Alloc>\r\nstruct uses_allocator<flat_multimap<_Key, _Mapped, _Compare, _KeyContainer, _MappedContainer>, _Alloc>\r\n    : bool_constant<uses_allocator_v<_KeyContainer, _Alloc> && uses_allocator_v<_MappedContainer, _Alloc>> {};\r\n\r\ntemplate <_Not_allocator_for_container _KeyContainer, _Not_allocator_for_container _MappedContainer,\r\n    _Valid_compare_for_container<_KeyContainer> _Compare = less<typename _KeyContainer::value_type>>\r\nflat_map(_KeyContainer, _MappedContainer, _Compare = _Compare()) -> flat_map<typename _KeyContainer::value_type,\r\n    typename _MappedContainer::value_type, _Compare, _KeyContainer, _MappedContainer>;\r\n\r\ntemplate <_Not_allocator_for_container _KeyContainer, _Not_allocator_for_container _MappedContainer,\r\n    _Usable_allocator_for<_KeyContainer, _MappedContainer> _Alloc>\r\nflat_map(_KeyContainer, _MappedContainer, _Alloc) -> flat_map<typename _KeyContainer::value_type,\r\n    typename _MappedContainer::value_type, less<typename _KeyContainer::value_type>, _KeyContainer, _MappedContainer>;\r\n\r\ntemplate <_Not_allocator_for_container _KeyContainer, _Not_allocator_for_container _MappedContainer,\r\n    _Valid_compare_for_container<_KeyContainer> _Compare, _Usable_allocator_for<_KeyContainer, _MappedContainer> _Alloc>\r\nflat_map(_KeyContainer, _MappedContainer, _Compare, _Alloc) -> flat_map<typename _KeyContainer::value_type,\r\n    typename _MappedContainer::value_type, _Compare, _KeyContainer, _MappedContainer>;\r\n\r\ntemplate <_Not_allocator_for_container _KeyContainer, _Not_allocator_for_container _MappedContainer,\r\n    _Valid_compare_for_container<_KeyContainer> _Compare = less<typename _KeyContainer::value_type>>\r\nflat_map(sorted_unique_t, _KeyContainer, _MappedContainer, _Compare = _Compare())\r\n    -> flat_map<typename _KeyContainer::value_type, typename _MappedContainer::value_type, _Compare, _KeyContainer,\r\n        _MappedContainer>;\r\n\r\ntemplate <_Not_allocator_for_container _KeyContainer, _Not_allocator_for_container _MappedContainer,\r\n    _Usable_allocator_for<_KeyContainer, _MappedContainer> _Alloc>\r\nflat_map(sorted_unique_t, _KeyContainer, _MappedContainer, _Alloc) -> flat_map<typename _KeyContainer::value_type,\r\n    typename _MappedContainer::value_type, less<typename _KeyContainer::value_type>, _KeyContainer, _MappedContainer>;\r\n\r\ntemplate <_Not_allocator_for_container _KeyContainer, _Not_allocator_for_container _MappedContainer,\r\n    _Valid_compare_for_container<_KeyContainer> _Compare, _Usable_allocator_for<_KeyContainer, _MappedContainer> _Alloc>\r\nflat_map(sorted_unique_t, _KeyContainer, _MappedContainer, _Compare, _Alloc)\r\n    -> flat_map<typename _KeyContainer::value_type, typename _MappedContainer::value_type, _Compare, _KeyContainer,\r\n        _MappedContainer>;\r\n\r\n#if 1 // TRANSITION, P2582R1 (MSVC, Clang, EDG)\r\ntemplate <class _Key, class _Mapped, class _Compare, class _KeyContainer, class _MappedContainer,\r\n    _Usable_allocator_for<_KeyContainer, _MappedContainer> _Alloc>\r\nflat_map(flat_map<_Key, _Mapped, _Compare, _KeyContainer, _MappedContainer>, _Alloc)\r\n    -> flat_map<_Key, _Mapped, _Compare, _KeyContainer, _MappedContainer>;\r\n#endif // ^^^ workaround ^^^\r\n\r\ntemplate <_Iterator_for_container _InIt, _Not_allocator_for_container _Compare = less<_Guide_key_t<_InIt>>>\r\nflat_map(_InIt, _InIt, _Compare = _Compare()) -> flat_map<_Guide_key_t<_InIt>, _Guide_val_t<_InIt>, _Compare>;\r\n\r\ntemplate <_Iterator_for_container _InIt, _Not_allocator_for_container _Compare = less<_Guide_key_t<_InIt>>>\r\nflat_map(sorted_unique_t, _InIt, _InIt, _Compare = _Compare())\r\n    -> flat_map<_Guide_key_t<_InIt>, _Guide_val_t<_InIt>, _Compare>;\r\n\r\n#ifdef __cpp_lib_byte\r\n// TRANSITION, CWG-2369, should just use constrained template parameters.\r\ntemplate <_RANGES input_range _Rng, _Not_allocator_for_container _Compare = less<_Range_key_type<_Rng>>,\r\n    class _Alloc = allocator<byte>, enable_if_t<_Allocator_for_container<_Alloc>, int> = 0>\r\nflat_map(from_range_t, _Rng&&, _Compare = _Compare(), _Alloc = _Alloc()) -> flat_map<_Range_key_type<_Rng>,\r\n    _Range_mapped_type<_Rng>, _Compare, vector<_Range_key_type<_Rng>, _Rebind_alloc_t<_Alloc, _Range_key_type<_Rng>>>,\r\n    vector<_Range_mapped_type<_Rng>, _Rebind_alloc_t<_Alloc, _Range_mapped_type<_Rng>>>>;\r\n#else // ^^^ defined(__cpp_lib_byte) / !defined(__cpp_lib_byte) vvv\r\ntemplate <_RANGES input_range _Rng, _Not_allocator_for_container _Compare = less<_Range_key_type<_Rng>>>\r\nflat_map(from_range_t, _Rng&&, _Compare = _Compare()) -> flat_map<_Range_key_type<_Rng>, _Range_mapped_type<_Rng>,\r\n    _Compare, vector<_Range_key_type<_Rng>>, vector<_Range_mapped_type<_Rng>>>;\r\n\r\n// TRANSITION, CWG-2369, should just use constrained template parameters.\r\ntemplate <_RANGES input_range _Rng, _Not_allocator_for_container _Compare, class _Alloc,\r\n    enable_if_t<_Allocator_for_container<_Alloc>, int> = 0>\r\nflat_map(from_range_t, _Rng&&, _Compare, _Alloc) -> flat_map<_Range_key_type<_Rng>, _Range_mapped_type<_Rng>, _Compare,\r\n    vector<_Range_key_type<_Rng>, _Rebind_alloc_t<_Alloc, _Range_key_type<_Rng>>>,\r\n    vector<_Range_mapped_type<_Rng>, _Rebind_alloc_t<_Alloc, _Range_mapped_type<_Rng>>>>;\r\n#endif // ^^^ !defined(__cpp_lib_byte) ^^^\r\n\r\n// TRANSITION, CWG-2369, should just use constrained template parameters.\r\ntemplate <_RANGES input_range _Rng, class _Alloc, enable_if_t<_Allocator_for_container<_Alloc>, int> = 0>\r\nflat_map(from_range_t, _Rng&&, _Alloc) -> flat_map<_Range_key_type<_Rng>, _Range_mapped_type<_Rng>,\r\n    less<_Range_key_type<_Rng>>, vector<_Range_key_type<_Rng>, _Rebind_alloc_t<_Alloc, _Range_key_type<_Rng>>>,\r\n    vector<_Range_mapped_type<_Rng>, _Rebind_alloc_t<_Alloc, _Range_mapped_type<_Rng>>>>;\r\n\r\ntemplate <class _Key, class _Mapped, _Not_allocator_for_container _Compare = less<_Key>>\r\nflat_map(initializer_list<pair<_Key, _Mapped>>, _Compare = _Compare()) -> flat_map<_Key, _Mapped, _Compare>;\r\n\r\ntemplate <class _Key, class _Mapped, _Not_allocator_for_container _Compare = less<_Key>>\r\nflat_map(sorted_unique_t, initializer_list<pair<_Key, _Mapped>>, _Compare = _Compare())\r\n    -> flat_map<_Key, _Mapped, _Compare>;\r\n\r\ntemplate <_Not_allocator_for_container _KeyContainer, _Not_allocator_for_container _MappedContainer,\r\n    _Valid_compare_for_container<_KeyContainer> _Compare = less<typename _KeyContainer::value_type>>\r\nflat_multimap(_KeyContainer, _MappedContainer, _Compare = _Compare())\r\n    -> flat_multimap<typename _KeyContainer::value_type, typename _MappedContainer::value_type, _Compare, _KeyContainer,\r\n        _MappedContainer>;\r\n\r\ntemplate <_Not_allocator_for_container _KeyContainer, _Not_allocator_for_container _MappedContainer,\r\n    _Usable_allocator_for<_KeyContainer, _MappedContainer> _Alloc>\r\nflat_multimap(_KeyContainer, _MappedContainer, _Alloc) -> flat_multimap<typename _KeyContainer::value_type,\r\n    typename _MappedContainer::value_type, less<typename _KeyContainer::value_type>, _KeyContainer, _MappedContainer>;\r\n\r\ntemplate <_Not_allocator_for_container _KeyContainer, _Not_allocator_for_container _MappedContainer,\r\n    _Valid_compare_for_container<_KeyContainer> _Compare, _Usable_allocator_for<_KeyContainer, _MappedContainer> _Alloc>\r\nflat_multimap(_KeyContainer, _MappedContainer, _Compare, _Alloc) -> flat_multimap<typename _KeyContainer::value_type,\r\n    typename _MappedContainer::value_type, _Compare, _KeyContainer, _MappedContainer>;\r\n\r\ntemplate <_Not_allocator_for_container _KeyContainer, _Not_allocator_for_container _MappedContainer,\r\n    _Valid_compare_for_container<_KeyContainer> _Compare = less<typename _KeyContainer::value_type>>\r\nflat_multimap(sorted_equivalent_t, _KeyContainer, _MappedContainer, _Compare = _Compare())\r\n    -> flat_multimap<typename _KeyContainer::value_type, typename _MappedContainer::value_type, _Compare, _KeyContainer,\r\n        _MappedContainer>;\r\n\r\ntemplate <_Not_allocator_for_container _KeyContainer, _Not_allocator_for_container _MappedContainer,\r\n    _Usable_allocator_for<_KeyContainer, _MappedContainer> _Alloc>\r\nflat_multimap(sorted_equivalent_t, _KeyContainer, _MappedContainer, _Alloc)\r\n    -> flat_multimap<typename _KeyContainer::value_type, typename _MappedContainer::value_type,\r\n        less<typename _KeyContainer::value_type>, _KeyContainer, _MappedContainer>;\r\n\r\ntemplate <_Not_allocator_for_container _KeyContainer, _Not_allocator_for_container _MappedContainer,\r\n    _Valid_compare_for_container<_KeyContainer> _Compare, _Usable_allocator_for<_KeyContainer, _MappedContainer> _Alloc>\r\nflat_multimap(sorted_equivalent_t, _KeyContainer, _MappedContainer, _Compare, _Alloc)\r\n    -> flat_multimap<typename _KeyContainer::value_type, typename _MappedContainer::value_type, _Compare, _KeyContainer,\r\n        _MappedContainer>;\r\n\r\n#if 1 // TRANSITION, P2582R1 (MSVC, Clang, EDG)\r\ntemplate <class _Key, class _Mapped, class _Compare, class _KeyContainer, class _MappedContainer,\r\n    _Usable_allocator_for<_KeyContainer, _MappedContainer> _Alloc>\r\nflat_multimap(flat_multimap<_Key, _Mapped, _Compare, _KeyContainer, _MappedContainer>, _Alloc)\r\n    -> flat_multimap<_Key, _Mapped, _Compare, _KeyContainer, _MappedContainer>;\r\n#endif // ^^^ workaround ^^^\r\n\r\ntemplate <_Iterator_for_container _InIt, _Not_allocator_for_container _Compare = less<_Guide_key_t<_InIt>>>\r\nflat_multimap(_InIt, _InIt, _Compare = _Compare()) -> flat_multimap<_Guide_key_t<_InIt>, _Guide_val_t<_InIt>, _Compare>;\r\n\r\ntemplate <_Iterator_for_container _InIt, _Not_allocator_for_container _Compare = less<_Guide_key_t<_InIt>>>\r\nflat_multimap(sorted_equivalent_t, _InIt, _InIt, _Compare = _Compare())\r\n    -> flat_multimap<_Guide_key_t<_InIt>, _Guide_val_t<_InIt>, _Compare>;\r\n\r\n#ifdef __cpp_lib_byte\r\n// TRANSITION, CWG-2369, should just use constrained template parameters.\r\ntemplate <_RANGES input_range _Rng, _Not_allocator_for_container _Compare = less<_Range_key_type<_Rng>>,\r\n    class _Alloc = allocator<byte>, enable_if_t<_Allocator_for_container<_Alloc>, int> = 0>\r\nflat_multimap(from_range_t, _Rng&&, _Compare = _Compare(), _Alloc = _Alloc()) -> flat_multimap<_Range_key_type<_Rng>,\r\n    _Range_mapped_type<_Rng>, _Compare, vector<_Range_key_type<_Rng>, _Rebind_alloc_t<_Alloc, _Range_key_type<_Rng>>>,\r\n    vector<_Range_mapped_type<_Rng>, _Rebind_alloc_t<_Alloc, _Range_mapped_type<_Rng>>>>;\r\n#else // ^^^ defined(__cpp_lib_byte) / !defined(__cpp_lib_byte) vvv\r\ntemplate <_RANGES input_range _Rng, _Not_allocator_for_container _Compare = less<_Range_key_type<_Rng>>>\r\nflat_multimap(from_range_t, _Rng&&, _Compare = _Compare()) -> flat_multimap<_Range_key_type<_Rng>,\r\n    _Range_mapped_type<_Rng>, _Compare, vector<_Range_key_type<_Rng>>, vector<_Range_mapped_type<_Rng>>>;\r\n\r\n// TRANSITION, CWG-2369, should just use constrained template parameters.\r\ntemplate <_RANGES input_range _Rng, _Not_allocator_for_container _Compare, class _Alloc,\r\n    enable_if_t<_Allocator_for_container<_Alloc>, int> = 0>\r\nflat_multimap(from_range_t, _Rng&&, _Compare, _Alloc) -> flat_multimap<_Range_key_type<_Rng>, _Range_mapped_type<_Rng>,\r\n    _Compare, vector<_Range_key_type<_Rng>, _Rebind_alloc_t<_Alloc, _Range_key_type<_Rng>>>,\r\n    vector<_Range_mapped_type<_Rng>, _Rebind_alloc_t<_Alloc, _Range_mapped_type<_Rng>>>>;\r\n#endif // ^^^ !defined(__cpp_lib_byte) ^^^\r\n\r\n// TRANSITION, CWG-2369, should just use constrained template parameters.\r\ntemplate <_RANGES input_range _Rng, class _Alloc, enable_if_t<_Allocator_for_container<_Alloc>, int> = 0>\r\nflat_multimap(from_range_t, _Rng&&, _Alloc) -> flat_multimap<_Range_key_type<_Rng>, _Range_mapped_type<_Rng>,\r\n    less<_Range_key_type<_Rng>>, vector<_Range_key_type<_Rng>, _Rebind_alloc_t<_Alloc, _Range_key_type<_Rng>>>,\r\n    vector<_Range_mapped_type<_Rng>, _Rebind_alloc_t<_Alloc, _Range_mapped_type<_Rng>>>>;\r\n\r\ntemplate <class _Key, class _Mapped, _Not_allocator_for_container _Compare = less<_Key>>\r\nflat_multimap(initializer_list<pair<_Key, _Mapped>>, _Compare = _Compare()) -> flat_multimap<_Key, _Mapped, _Compare>;\r\n\r\ntemplate <class _Key, class _Mapped, _Not_allocator_for_container _Compare = less<_Key>>\r\nflat_multimap(sorted_equivalent_t, initializer_list<pair<_Key, _Mapped>>, _Compare = _Compare())\r\n    -> flat_multimap<_Key, _Mapped, _Compare>;\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _FLAT_MAP_\r\n"
  },
  {
    "path": "stl/inc/flat_set",
    "content": "// flat_set standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _FLAT_SET_\r\n#define _FLAT_SET_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#if !_HAS_CXX23\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <flat_set> are available only with C++23 or later.\");\r\n#else // ^^^ !_HAS_CXX23 / _HAS_CXX23 vvv\r\n#include <algorithm>\r\n#include <compare>\r\n#include <initializer_list>\r\n#include <vector>\r\n#include <xutility>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#undef msvc\r\n\r\n_STD_BEGIN\r\ntemplate <bool _IsNoexcept, class _Container>\r\nstruct _NODISCARD _Flat_set_swap_clear_guard {\r\n    // Invariant: (_Target1 == nullptr) == (_Target2 == nullptr)\r\n    _Container* _Target1;\r\n    _Container* _Target2;\r\n\r\n    _Flat_set_swap_clear_guard& operator=(const _Flat_set_swap_clear_guard&) = delete;\r\n\r\n    void _Dismiss() noexcept {\r\n        _Target1 = nullptr;\r\n        _Target2 = nullptr;\r\n    }\r\n\r\n    ~_Flat_set_swap_clear_guard() {\r\n        if (_Target1) {\r\n            _Target1->clear();\r\n            _Target2->clear();\r\n        }\r\n    }\r\n};\r\ntemplate <class _Container>\r\nstruct _NODISCARD _Flat_set_swap_clear_guard<true, _Container> {\r\n    constexpr explicit _Flat_set_swap_clear_guard(_Container*, _Container*) noexcept {}\r\n\r\n    _Flat_set_swap_clear_guard& operator=(const _Flat_set_swap_clear_guard&) = delete;\r\n\r\n    void _Dismiss() noexcept {}\r\n};\r\n\r\n_EXPORT_STD template <class _Key, class _Compare = less<_Key>, class _Container = vector<_Key>>\r\nclass flat_set;\r\n\r\n_EXPORT_STD template <class _Key, class _Compare = less<_Key>, class _Container = vector<_Key>>\r\nclass flat_multiset;\r\n\r\ntemplate <bool _IsUnique, class _Key, class _Compare, class _Container>\r\nclass _Flat_set_base {\r\nprivate:\r\n    using _Sorted_t = conditional_t<_IsUnique, sorted_unique_t, sorted_equivalent_t>;\r\n    using _Derived =\r\n        conditional_t<_IsUnique, flat_set<_Key, _Compare, _Container>, flat_multiset<_Key, _Compare, _Container>>;\r\n\r\n    static constexpr const char* _Msg_not_sorted_maybe_unique =\r\n        _IsUnique ? \"Input was not sorted-unique! (N5032 [flat.set.overview]/9)\"\r\n                  : \"Input was not sorted! (N5032 [flat.multiset.overview]/9)\";\r\n    static constexpr const char* _Msg_replace_not_sorted_maybe_unique =\r\n        _IsUnique ? \"Input was not sorted-unique! (N5032 [flat.set.modifiers]/18)\"\r\n                  : \"Input was not sorted! (N5032 [flat.multiset.modifiers]/17)\";\r\n    static constexpr const char* _Msg_heterogeneous_insertion_inconsistent_with_lookup =\r\n        \"The conversion from the heterogeneous key to key_type should be consistent with the heterogeneous lookup!\";\r\n\r\npublic:\r\n    // [flat.set.defn] Types\r\n    using key_type               = _Key;\r\n    using value_type             = _Key;\r\n    using key_compare            = _Compare;\r\n    using value_compare          = _Compare;\r\n    using reference              = value_type&;\r\n    using const_reference        = const value_type&;\r\n    using size_type              = _Container::size_type;\r\n    using difference_type        = _Container::difference_type;\r\n    using const_iterator         = _Container::const_iterator;\r\n    using iterator               = const_iterator;\r\n    using const_reverse_iterator = _STD reverse_iterator<const_iterator>;\r\n    using reverse_iterator       = const_reverse_iterator;\r\n    using container_type         = _Container;\r\n\r\n    static_assert(same_as<key_type, typename container_type::value_type>,\r\n        \"key_type and container_type::value_type must be the same. \"\r\n        \"(N5032 [flat.set.overview]/8, [flat.multiset.overview]/8)\");\r\n    static_assert(!_Is_vector_bool<container_type>,\r\n        \"vector<bool> cannot be adapted because it is not a sequence container. \"\r\n        \"(N5032 [flat.set.overview]/7, [flat.multiset.overview]/7)\");\r\n    static_assert(random_access_iterator<typename container_type::const_iterator>,\r\n        \"Sequence containers must support random-access iterators in order to be adapted. \"\r\n        \"(N5032 [flat.set.overview]/7, [flat.multiset.overview]/7)\");\r\n\r\n    // [flat.set.cons] Constructors\r\n    _Flat_set_base() : _Data(), _Key_compare() {}\r\n\r\n    _Flat_set_base(const _Flat_set_base&) = default;\r\n\r\n    _Flat_set_base(_Flat_set_base&& _Other) noexcept(\r\n        is_nothrow_move_constructible_v<container_type> && is_nothrow_copy_constructible_v<key_compare>) // strengthened\r\n        : _Data(_STD move(_Other).extract()),\r\n          _Key_compare(_Other._Key_compare) // intentionally copy comparator, see LWG-2227\r\n    {}\r\n\r\n    explicit _Flat_set_base(const key_compare& _Comp) : _Data(), _Key_compare(_Comp) {}\r\n\r\n    explicit _Flat_set_base(container_type _Cont, const key_compare& _Comp = key_compare())\r\n        : _Data(_STD move(_Cont)), _Key_compare(_Comp) {\r\n        _Establish_invariants();\r\n    }\r\n\r\n    _Flat_set_base(_Sorted_t, container_type _Cont, const key_compare& _Comp = key_compare())\r\n        : _Data(_STD move(_Cont)), _Key_compare(_Comp) {\r\n        _STL_ASSERT(_Is_sorted_maybe_unique(), _Msg_not_sorted_maybe_unique);\r\n    }\r\n\r\n    template <_Iterator_for_container _InIt>\r\n    _Flat_set_base(const _InIt _First, const _InIt _Last, const key_compare& _Comp = key_compare())\r\n        : _Data(_First, _Last), _Key_compare(_Comp) {\r\n        _Establish_invariants();\r\n    }\r\n\r\n    template <_Iterator_for_container _InIt>\r\n    _Flat_set_base(_Sorted_t, const _InIt _First, const _InIt _Last, const key_compare& _Comp = key_compare())\r\n        : _Data(_First, _Last), _Key_compare(_Comp) {\r\n        _STL_ASSERT(_Is_sorted_maybe_unique(), _Msg_not_sorted_maybe_unique);\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    _Flat_set_base(from_range_t, _Rng&& _Range) : _Data(from_range, _STD forward<_Rng>(_Range)), _Key_compare() {\r\n        _Establish_invariants();\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    _Flat_set_base(from_range_t, _Rng&& _Range, const key_compare& _Comp)\r\n        : _Data(from_range, _STD forward<_Rng>(_Range)), _Key_compare(_Comp) {\r\n        _Establish_invariants();\r\n    }\r\n\r\n    _Flat_set_base(const initializer_list<value_type> _Ilist, const key_compare& _Comp = key_compare())\r\n        : _Data(_Ilist.begin(), _Ilist.end()), _Key_compare(_Comp) {\r\n        _Establish_invariants();\r\n    }\r\n\r\n    _Flat_set_base(_Sorted_t, const initializer_list<value_type> _Ilist, const key_compare& _Comp = key_compare())\r\n        : _Data(_Ilist.begin(), _Ilist.end()), _Key_compare(_Comp) {\r\n        _STL_ASSERT(_Is_sorted_maybe_unique(), _Msg_not_sorted_maybe_unique);\r\n    }\r\n\r\n    // [flat.set.cons.alloc] Constructors with allocators\r\n    template <_Usable_allocator_for<container_type> _Alloc>\r\n    explicit _Flat_set_base(const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al)), _Key_compare() {}\r\n\r\n    template <_Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(const key_compare& _Comp, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al)), _Key_compare(_Comp) {}\r\n\r\n    template <_Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(const container_type& _Cont, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al, _Cont)), _Key_compare() {\r\n        _Establish_invariants();\r\n    }\r\n\r\n    template <_Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(const container_type& _Cont, const key_compare& _Comp, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al, _Cont)), _Key_compare(_Comp) {\r\n        _Establish_invariants();\r\n    }\r\n\r\n    template <_Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(_Sorted_t, const container_type& _Cont, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al, _Cont)), _Key_compare() {\r\n        _STL_ASSERT(_Is_sorted_maybe_unique(), _Msg_not_sorted_maybe_unique);\r\n    }\r\n\r\n    template <_Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(_Sorted_t, const container_type& _Cont, const key_compare& _Comp, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al, _Cont)), _Key_compare(_Comp) {\r\n        _STL_ASSERT(_Is_sorted_maybe_unique(), _Msg_not_sorted_maybe_unique);\r\n    }\r\n\r\n    template <_Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(const _Flat_set_base& _Other, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al, _Other._Data)), _Key_compare(_Other._Key_compare) {}\r\n\r\n    template <_Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(_Flat_set_base&& _Other, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al, _STD move(_Other).extract())),\r\n          _Key_compare(_Other._Key_compare) // intentionally copy comparator, see LWG-2227\r\n    {}\r\n\r\n    template <_Iterator_for_container _InIt, _Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(const _InIt _First, const _InIt _Last, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al, _First, _Last)), _Key_compare() {\r\n        _Establish_invariants();\r\n    }\r\n\r\n    template <_Iterator_for_container _InIt, _Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(const _InIt _First, const _InIt _Last, const key_compare& _Comp, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al, _First, _Last)), _Key_compare(_Comp) {\r\n        _Establish_invariants();\r\n    }\r\n\r\n    template <_Iterator_for_container _InIt, _Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(_Sorted_t, const _InIt _First, const _InIt _Last, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al, _First, _Last)), _Key_compare() {\r\n        _STL_ASSERT(_Is_sorted_maybe_unique(), _Msg_not_sorted_maybe_unique);\r\n    }\r\n\r\n    template <_Iterator_for_container _InIt, _Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(_Sorted_t, const _InIt _First, const _InIt _Last, const key_compare& _Comp, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al, _First, _Last)), _Key_compare(_Comp) {\r\n        _STL_ASSERT(_Is_sorted_maybe_unique(), _Msg_not_sorted_maybe_unique);\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng, _Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(from_range_t, _Rng&& _Range, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al, from_range, _STD forward<_Rng>(_Range))),\r\n          _Key_compare() {\r\n        _Establish_invariants();\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng, _Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(from_range_t, _Rng&& _Range, const key_compare& _Comp, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al, from_range, _STD forward<_Rng>(_Range))),\r\n          _Key_compare(_Comp) {\r\n        _Establish_invariants();\r\n    }\r\n\r\n    template <_Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(const initializer_list<value_type> _Ilist, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al, _Ilist.begin(), _Ilist.end())), _Key_compare() {\r\n        _Establish_invariants();\r\n    }\r\n\r\n    template <_Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(const initializer_list<value_type> _Ilist, const key_compare& _Comp, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al, _Ilist.begin(), _Ilist.end())), _Key_compare(_Comp) {\r\n        _Establish_invariants();\r\n    }\r\n\r\n    template <_Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(_Sorted_t, const initializer_list<value_type> _Ilist, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al, _Ilist.begin(), _Ilist.end())), _Key_compare() {\r\n        _STL_ASSERT(_Is_sorted_maybe_unique(), _Msg_not_sorted_maybe_unique);\r\n    }\r\n\r\n    template <_Usable_allocator_for<container_type> _Alloc>\r\n    _Flat_set_base(_Sorted_t, const initializer_list<value_type> _Ilist, const key_compare& _Comp, const _Alloc& _Al)\r\n        : _Data(_STD make_obj_using_allocator<container_type>(_Al, _Ilist.begin(), _Ilist.end())), _Key_compare(_Comp) {\r\n        _STL_ASSERT(_Is_sorted_maybe_unique(), _Msg_not_sorted_maybe_unique);\r\n    }\r\n\r\n    // Assignment operators\r\n    _Flat_set_base& operator=(const _Flat_set_base& _Other) {\r\n        _Clear_guard _Guard{this};\r\n        _Data          = _Other._Data;\r\n        _Key_compare   = _Other._Key_compare;\r\n        _Guard._Target = nullptr;\r\n        return *this;\r\n    }\r\n\r\n    _Flat_set_base& operator=(_Flat_set_base&& _Other) noexcept(\r\n        is_nothrow_move_assignable_v<container_type> && is_nothrow_copy_assignable_v<key_compare>) /* strengthened */ {\r\n        if (this != _STD addressof(_Other)) {\r\n            _Clear_guard _Guard{this};\r\n            _Clear_guard _Always_clear{_STD addressof(_Other)};\r\n            _Data          = _STD move(_Other._Data);\r\n            _Key_compare   = _Other._Key_compare; // intentionally copy comparator, see LWG-2227\r\n            _Guard._Target = nullptr;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    // Iterators\r\n    // NB: The non-const overloads are intentionally removed for brevity. This will not result in behavioral changes.\r\n    _NODISCARD const_iterator begin() const noexcept {\r\n        return _Data.begin();\r\n    }\r\n    _NODISCARD const_iterator end() const noexcept {\r\n        return _Data.end();\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator rbegin() const noexcept {\r\n        return const_reverse_iterator{_Data.end()};\r\n    }\r\n    _NODISCARD const_reverse_iterator rend() const noexcept {\r\n        return const_reverse_iterator{_Data.begin()};\r\n    }\r\n\r\n    _NODISCARD const_iterator cbegin() const noexcept {\r\n        return _Data.begin();\r\n    }\r\n    _NODISCARD const_iterator cend() const noexcept {\r\n        return _Data.end();\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator crbegin() const noexcept {\r\n        return const_reverse_iterator{_Data.end()};\r\n    }\r\n    _NODISCARD const_reverse_iterator crend() const noexcept {\r\n        return const_reverse_iterator{_Data.begin()};\r\n    }\r\n\r\n    // Capacity\r\n    _NODISCARD_EMPTY_MEMBER bool empty() const noexcept {\r\n        return _Data.empty();\r\n    }\r\n    _NODISCARD size_type size() const noexcept {\r\n        return _Data.size();\r\n    }\r\n    _NODISCARD size_type max_size() const noexcept {\r\n        return _Data.max_size();\r\n    }\r\n\r\n    // [flat.set.modifiers] Modifiers\r\n    template <class... _ArgTypes>\r\n    auto emplace(_ArgTypes&&... _Args)\r\n        requires is_constructible_v<value_type, _ArgTypes...>\r\n    {\r\n        constexpr bool _Is_key_type = _In_place_key_extract_set<key_type, _ArgTypes...>::_Extractable;\r\n        if constexpr (_Is_key_type) {\r\n            return _Emplace(_STD forward<_ArgTypes>(_Args)...);\r\n        } else {\r\n            return _Emplace(key_type(_STD forward<_ArgTypes>(_Args)...));\r\n        }\r\n    }\r\n\r\n    template <class... _ArgTypes>\r\n    iterator emplace_hint(const const_iterator _Position, _ArgTypes&&... _Args)\r\n        requires is_constructible_v<value_type, _ArgTypes...>\r\n    {\r\n        constexpr bool _Is_key_type = _In_place_key_extract_set<key_type, _ArgTypes...>::_Extractable;\r\n        if constexpr (_Is_key_type) {\r\n            return _Emplace_hint(_Position, _STD forward<_ArgTypes>(_Args)...);\r\n        } else {\r\n            return _Emplace_hint(_Position, key_type(_STD forward<_ArgTypes>(_Args)...));\r\n        }\r\n    }\r\n\r\n    auto insert(const value_type& _Val) {\r\n        return _Emplace(_Val);\r\n    }\r\n    auto insert(value_type&& _Val) {\r\n        return _Emplace(_STD move(_Val));\r\n    }\r\n    template <_Different_from<value_type> _Other>\r\n        requires _IsUnique && _Transparent<key_compare> && is_constructible_v<value_type, _Other>\r\n    auto insert(_Other&& _Val) {\r\n        return _Emplace(_STD forward<_Other>(_Val));\r\n    }\r\n\r\n    iterator insert(const const_iterator _Position, const value_type& _Val) {\r\n        return _Emplace_hint(_Position, _Val);\r\n    }\r\n    iterator insert(const const_iterator _Position, value_type&& _Val) {\r\n        return _Emplace_hint(_Position, _STD move(_Val));\r\n    }\r\n    template <_Different_from<value_type> _Other>\r\n        requires _IsUnique && _Transparent<key_compare> && is_constructible_v<value_type, _Other>\r\n    iterator insert(const const_iterator _Position, _Other&& _Val) {\r\n        return _Emplace_hint(_Position, _STD forward<_Other>(_Val));\r\n    }\r\n\r\n    template <_Iterator_for_container _InIt>\r\n    void insert(const _InIt _First, const _InIt _Last) {\r\n        _Insert_range<true>(_First, _Last);\r\n    }\r\n    template <_Iterator_for_container _InIt>\r\n    void insert(_Sorted_t, const _InIt _First, const _InIt _Last) {\r\n        _Insert_range<false>(_First, _Last);\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    void insert_range(_Rng&& _Range) {\r\n        _Insert_range<true>(_STD forward<_Rng>(_Range));\r\n    }\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    void insert_range(_Sorted_t, _Rng&& _Range) {\r\n        _Insert_range<false>(_STD forward<_Rng>(_Range));\r\n    }\r\n\r\n    void insert(const initializer_list<value_type> _Ilist) {\r\n        _Insert_range<true>(_Ilist.begin(), _Ilist.end());\r\n    }\r\n    void insert(_Sorted_t, const initializer_list<value_type> _Ilist) {\r\n        _Insert_range<false>(_Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\n    _NODISCARD container_type extract() && noexcept(\r\n        is_nothrow_move_constructible_v<container_type>) /* strengthened */ {\r\n        // always clears the container (N5032 [flat.set.modifiers]/16 and [flat.multiset.modifiers]/15)\r\n        _Clear_guard _Always_clear{this};\r\n        return _STD move(_Data);\r\n    }\r\n\r\n    void replace(container_type&& _Cont) {\r\n        _STL_ASSERT(_Is_sorted_maybe_unique(_Cont.begin(), _Cont.end()), _Msg_replace_not_sorted_maybe_unique);\r\n        _Clear_guard _Guard{this};\r\n        _Data          = _STD move(_Cont);\r\n        _Guard._Target = nullptr;\r\n    }\r\n\r\n    // NB: `erase(iterator)` is identical to `erase(const_iterator)`\r\n    iterator erase(const const_iterator _Position) {\r\n        _Clear_guard _Guard{this};\r\n        const auto _Ret = _Data.erase(_Position);\r\n        _Guard._Target  = nullptr;\r\n        return _Ret;\r\n    }\r\n\r\n    size_type erase(const key_type& _Val) {\r\n        return _Erase_key(_Val);\r\n    }\r\n    template <_Different_from<key_type> _Other>\r\n        requires _Transparent<key_compare> && (!is_convertible_v<_Other, const_iterator>)\r\n    size_type erase(_Other&& _Val) {\r\n        return _Erase_key(_Val);\r\n    }\r\n\r\n    iterator erase(const const_iterator _First, const const_iterator _Last) {\r\n        _Clear_guard _Guard{this};\r\n        const auto _Ret = _Data.erase(_First, _Last);\r\n        _Guard._Target  = nullptr;\r\n        return _Ret;\r\n    }\r\n\r\n    void swap(_Derived& _Other)\r\n        noexcept(is_nothrow_swappable_v<container_type> && is_nothrow_swappable_v<key_compare>) {\r\n        constexpr bool _Is_noexcept = is_nothrow_swappable_v<container_type> && is_nothrow_swappable_v<key_compare>;\r\n        _Flat_set_swap_clear_guard<_Is_noexcept, container_type> _Guard{\r\n            _STD addressof(_Data), _STD addressof(_Other._Data)};\r\n        _RANGES swap(_Data, _Other._Data);\r\n        _RANGES swap(_Key_compare, _Other._Key_compare);\r\n        _Guard._Dismiss();\r\n    }\r\n\r\n    void clear() noexcept {\r\n        _Data.clear();\r\n    }\r\n\r\n    // Observers\r\n    _NODISCARD key_compare key_comp() const {\r\n        return _Key_compare;\r\n    }\r\n    _NODISCARD value_compare value_comp() const {\r\n        return _Key_compare;\r\n    }\r\n\r\n    // Set operations\r\n    // NB: The non-const overloads are intentionally removed for brevity. This will not result in behavioral changes.\r\n    _NODISCARD const_iterator find(const key_type& _Val) const {\r\n        return _Find(_Val);\r\n    }\r\n    template <class _Other>\r\n        requires _Transparent<key_compare>\r\n    _NODISCARD const_iterator find(const _Other& _Val) const {\r\n        return _Find(_Val);\r\n    }\r\n\r\n    _NODISCARD size_type count(const key_type& _Val) const {\r\n        return _Count(_Val);\r\n    }\r\n    template <class _Other>\r\n        requires _Transparent<key_compare>\r\n    _NODISCARD size_type count(const _Other& _Val) const {\r\n        return _Count(_Val);\r\n    }\r\n\r\n    _NODISCARD bool contains(const key_type& _Val) const {\r\n        return _STD binary_search(cbegin(), cend(), _Val, _Pass_comp());\r\n    }\r\n    template <class _Other>\r\n        requires _Transparent<key_compare>\r\n    _NODISCARD bool contains(const _Other& _Val) const {\r\n        return _STD binary_search(cbegin(), cend(), _Val, _Pass_comp());\r\n    }\r\n\r\n    _NODISCARD const_iterator lower_bound(const key_type& _Val) const {\r\n        return _STD lower_bound(cbegin(), cend(), _Val, _Pass_comp());\r\n    }\r\n    template <class _Other>\r\n        requires _Transparent<key_compare>\r\n    _NODISCARD const_iterator lower_bound(const _Other& _Val) const {\r\n        return _STD lower_bound(cbegin(), cend(), _Val, _Pass_comp());\r\n    }\r\n\r\n    _NODISCARD const_iterator upper_bound(const key_type& _Val) const {\r\n        return _STD upper_bound(cbegin(), cend(), _Val, _Pass_comp());\r\n    }\r\n    template <class _Other>\r\n        requires _Transparent<key_compare>\r\n    _NODISCARD const_iterator upper_bound(const _Other& _Val) const {\r\n        return _STD upper_bound(cbegin(), cend(), _Val, _Pass_comp());\r\n    }\r\n\r\n    _NODISCARD pair<const_iterator, const_iterator> equal_range(const key_type& _Val) const {\r\n        return _Equal_range(_Val);\r\n    }\r\n    template <class _Other>\r\n        requires _Transparent<key_compare>\r\n    _NODISCARD pair<const_iterator, const_iterator> equal_range(const _Other& _Val) const {\r\n        return _Equal_range(_Val);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const _Derived& _Lhs, const _Derived& _Rhs) {\r\n        return _STD equal(_Lhs._Data.begin(), _Lhs._Data.end(), _Rhs._Data.begin(), _Rhs._Data.end());\r\n    }\r\n\r\n    _NODISCARD friend auto operator<=>(const _Derived& _Lhs, const _Derived& _Rhs) {\r\n        return _STD lexicographical_compare_three_way(\r\n            _Lhs._Data.begin(), _Lhs._Data.end(), _Rhs._Data.begin(), _Rhs._Data.end(), _Synth_three_way{});\r\n    }\r\n\r\n    friend void swap(_Derived& _Lhs, _Derived& _Rhs) noexcept(noexcept(_Lhs.swap(_Rhs))) {\r\n        _Lhs.swap(_Rhs);\r\n    }\r\n\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\npublic:\r\n#else\r\nprivate:\r\n#endif\r\n    _NODISCARD bool _Is_sorted_maybe_unique() const {\r\n        return _Is_sorted_maybe_unique(_Data.begin(), _Data.end());\r\n    }\r\n\r\nprivate:\r\n    _NODISCARD bool _Is_sorted_maybe_unique(const const_iterator _It, const const_iterator _End) const {\r\n        if constexpr (_IsUnique) {\r\n            // sorted-unique\r\n            auto _Negated = [this](const key_type& _Lhs, const key_type& _Rhs) { return !_Compare_keys(_Lhs, _Rhs); };\r\n            return _STD adjacent_find(_It, _End, _Negated) == _End;\r\n        } else {\r\n            return _STD is_sorted(_It, _End, _Pass_comp());\r\n        }\r\n    }\r\n\r\n    _NODISCARD auto _Erase_dupes_if_not_multi_pred() {\r\n        _STL_INTERNAL_STATIC_ASSERT(_IsUnique);\r\n        if constexpr (_Equivalence_is_equality<key_compare, key_type>) {\r\n            return equal_to<>{};\r\n        } else {\r\n            return [this](const key_type& _Lhs, const key_type& _Rhs) { return !_Compare_keys(_Lhs, _Rhs); };\r\n        }\r\n    }\r\n\r\n    template <bool _NeedSorting>\r\n    void _Restore_invariants(const size_type _Old_size) {\r\n        // No _Clear_guard needed. This is called only by _Insert_range() (which has a _Clear_guard)\r\n        // and _Establish_invariants() (which is called only by constructors which don't need guards).\r\n\r\n        const auto _Begin   = _Data.begin();\r\n        const auto _Old_end = _Begin + static_cast<difference_type>(_Old_size);\r\n        const auto _End     = _Data.end();\r\n\r\n        if constexpr (_NeedSorting) {\r\n            _STD sort(_Old_end, _End, _Pass_comp());\r\n        } else {\r\n            _STL_ASSERT(_Is_sorted_maybe_unique(_Old_end, _End), _Msg_not_sorted_maybe_unique);\r\n        }\r\n\r\n        _STD inplace_merge(_Begin, _Old_end, _End, _Pass_comp());\r\n\r\n        if constexpr (_IsUnique) {\r\n            _Data.erase(_STD unique(_Begin, _End, _Erase_dupes_if_not_multi_pred()), _End);\r\n        }\r\n\r\n        _STL_INTERNAL_CHECK(_Is_sorted_maybe_unique());\r\n    }\r\n\r\n    void _Establish_invariants() {\r\n        if (_Data.empty()) {\r\n            return;\r\n        }\r\n\r\n        const auto _Begin        = _Data.begin();\r\n        const auto _End          = _Data.end();\r\n        const auto _Sorted_until = _STD is_sorted_until(_Begin, _End, _Pass_comp()); // O(N) if already sorted.\r\n        const auto _Sorted_size  = static_cast<size_type>(_Sorted_until - _Begin);\r\n        _Restore_invariants<true>(_Sorted_size);\r\n    }\r\n\r\n    template <class _Ty>\r\n    _NODISCARD bool _Can_insert(const const_iterator _Where, const _Ty& _Val) const {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_same_v<_Ty, key_type>); // only accepts key_type\r\n\r\n        // check that _Val can be inserted before _Where\r\n        if constexpr (_IsUnique) {\r\n            // check that _Where is the lower_bound for _Val, and *_Where is not equivalent to _Val\r\n            // equivalent to checking *(_Where-1) < _Val < *_Where\r\n            return (_Where == cend() || _Compare_keys(_Val, *_Where))\r\n                && (_Where == cbegin() || _Compare_keys(*(_Where - 1), _Val));\r\n        } else {\r\n            // check that _Where is the upper_bound for _Val\r\n            // equivalent to checking *(_Where-1) <= _Val < *_Where\r\n            return (_Where == cend() || _Compare_keys(_Val, *_Where))\r\n                && (_Where == cbegin() || !_Compare_keys(_Val, *(_Where - 1)));\r\n        }\r\n    }\r\n\r\n    template <class _Ty>\r\n    _NODISCARD iterator _Emplace_with_clear_guard(const const_iterator _Where, _Ty&& _Val) {\r\n        if constexpr (_Has_guaranteed_single_insertion<container_type>) {\r\n            return _Data.emplace(_Where, _STD forward<_Ty>(_Val));\r\n        } else {\r\n            _Clear_guard _Guard{this};\r\n            auto _Iter     = _Data.emplace(_Where, _STD forward<_Ty>(_Val));\r\n            _Guard._Target = nullptr;\r\n            return _Iter;\r\n        }\r\n    }\r\n\r\n    template <class _Ty>\r\n    _NODISCARD conditional_t<_IsUnique, pair<iterator, bool>, iterator> _Emplace(_Ty&& _Val) {\r\n        if constexpr (_IsUnique) {\r\n            const const_iterator _Where = lower_bound(_Val);\r\n            if (_Where != cend() && !_Compare_keys(_Val, *_Where)) {\r\n                return pair{_Where, false};\r\n            }\r\n\r\n            if constexpr (is_same_v<remove_cvref_t<_Ty>, key_type>) {\r\n                _STL_INTERNAL_CHECK(_Can_insert(_Where, _Val));\r\n                return pair{_Emplace_with_clear_guard(_Where, _STD forward<_Ty>(_Val)), true};\r\n            } else {\r\n                // heterogeneous insertion\r\n                _STL_INTERNAL_STATIC_ASSERT(_Transparent<key_compare> && is_constructible_v<key_type, _Ty>);\r\n                key_type _Keyval(_STD forward<_Ty>(_Val));\r\n                _STL_ASSERT(_Can_insert(_Where, _Keyval), _Msg_heterogeneous_insertion_inconsistent_with_lookup);\r\n                return pair{_Emplace_with_clear_guard(_Where, _STD move(_Keyval)), true};\r\n            }\r\n        } else {\r\n            _STL_INTERNAL_STATIC_ASSERT(is_same_v<remove_cvref_t<_Ty>, key_type>);\r\n            return _Emplace_with_clear_guard(upper_bound(_Val), _STD forward<_Ty>(_Val));\r\n        }\r\n    }\r\n\r\n    template <class _Ty>\r\n    _NODISCARD iterator _Emplace_hint(const_iterator _Where, _Ty&& _Val) {\r\n        const const_iterator _Begin = cbegin();\r\n        const const_iterator _End   = cend();\r\n\r\n        if constexpr (_IsUnique) {\r\n            // look for lower_bound(_Val)\r\n            if (_Where == _End || !_Compare_keys(*_Where, _Val)) {\r\n                // _Val <= *_Where\r\n                if (_Where == _Begin || _Compare_keys(*(_Where - 1), _Val)) {\r\n                    // _Val > *(_Where-1) ~ lower_bound is _Where\r\n                } else {\r\n                    // _Val <= *(_Where-1) ~ lower_bound is in [_Begin,_Where-1]\r\n                    _Where = _STD lower_bound(_Begin, _Where - 1, _Val, _Pass_comp());\r\n                }\r\n            } else {\r\n                // _Val > *_Where ~ lower_bound is in [_Where+1,_End]\r\n                _Where = _STD lower_bound(_Where + 1, _End, _Val, _Pass_comp());\r\n            }\r\n\r\n            if (_Where != _End && !_Compare_keys(_Val, *_Where)) {\r\n                return _Where;\r\n            }\r\n\r\n            if constexpr (is_same_v<remove_cvref_t<_Ty>, key_type>) {\r\n                _STL_INTERNAL_CHECK(_Can_insert(_Where, _Val));\r\n                return _Emplace_with_clear_guard(_Where, _STD forward<_Ty>(_Val));\r\n            } else {\r\n                // heterogeneous insertion\r\n                _STL_INTERNAL_STATIC_ASSERT(_Transparent<key_compare> && is_constructible_v<key_type, _Ty>);\r\n                key_type _Keyval(_STD forward<_Ty>(_Val));\r\n                _STL_ASSERT(_Can_insert(_Where, _Keyval), _Msg_heterogeneous_insertion_inconsistent_with_lookup);\r\n                return _Emplace_with_clear_guard(_Where, _STD move(_Keyval));\r\n            }\r\n        } else {\r\n            _STL_INTERNAL_STATIC_ASSERT(is_same_v<remove_cvref_t<_Ty>, key_type>);\r\n\r\n            // look for closest position just prior to _Where, respecting ordering\r\n            if (_Where == _End || _Compare_keys(_Val, *_Where)) {\r\n                // _Val < *_Where\r\n                if (_Where == _Begin || !_Compare_keys(_Val, *(_Where - 1))) {\r\n                    // _Val >= *(_Where-1) ~ closest valid position is _Where\r\n                } else {\r\n                    // _Val < *(_Where-1) ~ closest valid position is upper_bound(_Val) located in [_Begin,_Where-1]\r\n                    _Where = _STD upper_bound(_Begin, _Where - 1, _Val, _Pass_comp());\r\n                }\r\n                // _Val < *_Where, so upper_bound is indeed \"as close as possible\"\r\n                _STL_INTERNAL_CHECK(_Can_insert(_Where, _Val));\r\n            } else {\r\n                // _Val >= *_Where ~ search for lower_bound in [_Where,_End] to place _Val \"as close as possible\"\r\n                _Where = _STD lower_bound(_Where, _End, _Val, _Pass_comp());\r\n            }\r\n\r\n            return _Emplace_with_clear_guard(_Where, _STD forward<_Ty>(_Val));\r\n        }\r\n    }\r\n\r\n    template <bool _NeedSorting, class _InIt>\r\n    void _Insert_range(const _InIt _First, const _InIt _Last) {\r\n        _Clear_guard _Guard{this};\r\n        const size_type _Old_size = size();\r\n        _Data.insert(_Data.end(), _First, _Last);\r\n        _Restore_invariants<_NeedSorting>(_Old_size);\r\n        _Guard._Target = nullptr;\r\n    }\r\n\r\n    template <bool _NeedSorting, _Container_compatible_range<value_type> _Rng>\r\n    void _Insert_range(_Rng&& _Range) {\r\n        _Clear_guard _Guard{this};\r\n        const size_type _Old_size = size();\r\n        if constexpr (_Has_guaranteed_append_range<container_type>) {\r\n            _Data.append_range(_STD forward<_Rng>(_Range));\r\n        } else {\r\n            _Data.insert_range(_Data.end(), _STD forward<_Rng>(_Range));\r\n        }\r\n        _Restore_invariants<_NeedSorting>(_Old_size);\r\n        _Guard._Target = nullptr;\r\n    }\r\n\r\n    template <class _KeyTy>\r\n    _NODISCARD size_type _Erase_key(const _KeyTy& _Key_val) {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_same_v<_KeyTy, key_type> || _Transparent<key_compare>);\r\n\r\n        if constexpr (_IsUnique && is_same_v<_KeyTy, key_type>) { // Optimization restricted due to GH-5992\r\n            const const_iterator _Where = lower_bound(_Key_val);\r\n            if (_Where != cend() && !_Compare_keys(_Key_val, *_Where)) {\r\n                _Clear_guard _Guard{this};\r\n                _Data.erase(_Where);\r\n                _Guard._Target = nullptr;\r\n                return 1;\r\n            }\r\n            return 0;\r\n        } else {\r\n            const auto [_First, _Last] = equal_range(_Key_val);\r\n\r\n            const auto _Removed = static_cast<size_type>(_Last - _First);\r\n            _Clear_guard _Guard{this};\r\n            _Data.erase(_First, _Last);\r\n            _Guard._Target = nullptr;\r\n            return _Removed;\r\n        }\r\n    }\r\n\r\n    // typename is a workaround for VSO-2680018 (EDG)\r\n    template <class _Key2, class _Compare2, class _Container2, class _Predicate2>\r\n    friend typename _Container2::size_type erase_if(flat_set<_Key2, _Compare2, _Container2>&, _Predicate2);\r\n    template <class _Key2, class _Compare2, class _Container2, class _Predicate2>\r\n    friend typename _Container2::size_type erase_if(flat_multiset<_Key2, _Compare2, _Container2>&, _Predicate2);\r\n\r\n    template <class _Predicate>\r\n    _NODISCARD size_type _Erase_if(_Predicate _Pred) {\r\n        // Maintain invariants when an exception is thrown (N5032 [flat.set.erasure]/5, [flat.multiset.erasure]/5)\r\n        _Clear_guard _Guard{this};\r\n        const auto _Erased_count = _STD _Erase_remove_if(_Data, _Pred);\r\n        _Guard._Target           = nullptr;\r\n        return _Erased_count;\r\n    }\r\n\r\n    template <class _KeyTy>\r\n    _NODISCARD const_iterator _Find(const _KeyTy& _Key_val) const {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_same_v<_KeyTy, key_type> || _Transparent<key_compare>);\r\n\r\n        const const_iterator _End   = cend();\r\n        const const_iterator _Where = lower_bound(_Key_val);\r\n        if (_Where != _End && !_Compare_keys(_Key_val, *_Where)) {\r\n            return _Where;\r\n        } else {\r\n            return _End;\r\n        }\r\n    }\r\n\r\n    template <class _KeyTy>\r\n    _NODISCARD size_type _Count(const _KeyTy& _Key_val) const {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_same_v<_KeyTy, key_type> || _Transparent<key_compare>);\r\n        if constexpr (_IsUnique && is_same_v<_KeyTy, key_type>) { // Optimization restricted due to GH-5992\r\n            return contains(_Key_val);\r\n        } else {\r\n            const auto [_First, _Last] = _Equal_range(_Key_val);\r\n            return static_cast<size_type>(_Last - _First);\r\n        }\r\n    }\r\n\r\n    template <class _KeyTy>\r\n    _NODISCARD pair<const_iterator, const_iterator> _Equal_range(const _KeyTy& _Key_val) const {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_same_v<_KeyTy, key_type> || _Transparent<key_compare>);\r\n        if constexpr (_IsUnique && is_same_v<_KeyTy, key_type>) { // Optimization restricted due to GH-5992\r\n            // In a non-multi container, equal_range can have size at most 1\r\n            const auto _First   = _STD lower_bound(_Data.begin(), _Data.end(), _Key_val, _Pass_comp());\r\n            const bool _Missing = _First == _Data.end() || _Compare_keys(_Key_val, *_First);\r\n            return pair{_First, _Missing ? _First : _First + 1};\r\n        } else {\r\n            return _STD equal_range(begin(), end(), _Key_val, _Pass_comp());\r\n        }\r\n    }\r\n\r\n    template <class _Lty, class _Rty>\r\n    _NODISCARD bool _Compare_keys(const _Lty& _Lhs, const _Rty& _Rhs) const\r\n        noexcept(noexcept(_DEBUG_LT_PRED(_Key_compare, _Lhs, _Rhs))) {\r\n        _STL_INTERNAL_STATIC_ASSERT(\r\n            (is_same_v<_Lty, key_type> && is_same_v<_Rty, key_type>) || _Transparent<key_compare>);\r\n\r\n        return _DEBUG_LT_PRED(_Key_compare, _Lhs, _Rhs);\r\n    }\r\n\r\n    _NODISCARD auto _Pass_comp() const noexcept {\r\n        return _STD _Pass_fn(_Key_compare);\r\n    }\r\n\r\n    container_type _Data;\r\n    _MSVC_NO_UNIQUE_ADDRESS key_compare _Key_compare;\r\n};\r\n\r\n_EXPORT_STD template <class _Key, class _Compare, class _Container>\r\nclass flat_set : public _Flat_set_base<true, _Key, _Compare, _Container> {\r\nprivate:\r\n    using _Mybase = _Flat_set_base<true, _Key, _Compare, _Container>;\r\n\r\npublic:\r\n    using _Mybase::_Mybase;\r\n    flat_set(const flat_set&) = default;\r\n    flat_set(flat_set&&)      = default;\r\n\r\n    flat_set& operator=(const flat_set&) = default;\r\n    flat_set& operator=(flat_set&&)      = default;\r\n\r\n    flat_set& operator=(const initializer_list<_Key> _Ilist) {\r\n        this->clear();\r\n        this->insert(_Ilist.begin(), _Ilist.end());\r\n        return *this;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Key, class _Compare, class _Container>\r\nclass flat_multiset : public _Flat_set_base<false, _Key, _Compare, _Container> {\r\nprivate:\r\n    using _Mybase = _Flat_set_base<false, _Key, _Compare, _Container>;\r\n\r\npublic:\r\n    using _Mybase::_Mybase;\r\n    flat_multiset(const flat_multiset&) = default;\r\n    flat_multiset(flat_multiset&&)      = default;\r\n\r\n    flat_multiset& operator=(const flat_multiset&) = default;\r\n    flat_multiset& operator=(flat_multiset&&)      = default;\r\n\r\n    flat_multiset& operator=(const initializer_list<_Key> _Ilist) {\r\n        this->clear();\r\n        this->insert(_Ilist.begin(), _Ilist.end());\r\n        return *this;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Key, class _Compare, class _Container, class _Predicate>\r\n_Container::size_type erase_if(flat_set<_Key, _Compare, _Container>& _Cont, _Predicate _Pred) {\r\n    return _Cont._Erase_if(_STD _Pass_fn(_Pred));\r\n}\r\n_EXPORT_STD template <class _Key, class _Compare, class _Container, class _Predicate>\r\n_Container::size_type erase_if(flat_multiset<_Key, _Compare, _Container>& _Cont, _Predicate _Pred) {\r\n    return _Cont._Erase_if(_STD _Pass_fn(_Pred));\r\n}\r\n\r\ntemplate <class _Key, class _Compare, class _Container, class _Alloc>\r\nstruct uses_allocator<flat_set<_Key, _Compare, _Container>, _Alloc>\r\n    : bool_constant<uses_allocator_v<_Container, _Alloc>> {};\r\n\r\ntemplate <class _Key, class _Compare, class _Container, class _Alloc>\r\nstruct uses_allocator<flat_multiset<_Key, _Compare, _Container>, _Alloc>\r\n    : bool_constant<uses_allocator_v<_Container, _Alloc>> {};\r\n\r\ntemplate <_Not_allocator_for_container _Container,\r\n    _Valid_compare_for_container<_Container> _Compare = less<typename _Container::value_type>>\r\nflat_set(_Container, _Compare = _Compare()) -> flat_set<typename _Container::value_type, _Compare, _Container>;\r\ntemplate <_Not_allocator_for_container _Container, _Usable_allocator_for<_Container> _Alloc>\r\nflat_set(_Container, _Alloc)\r\n    -> flat_set<typename _Container::value_type, less<typename _Container::value_type>, _Container>;\r\ntemplate <_Not_allocator_for_container _Container, _Valid_compare_for_container<_Container> _Compare,\r\n    _Usable_allocator_for<_Container> _Alloc>\r\nflat_set(_Container, _Compare, _Alloc) -> flat_set<typename _Container::value_type, _Compare, _Container>;\r\n\r\ntemplate <_Not_allocator_for_container _Container,\r\n    _Valid_compare_for_container<_Container> _Compare = less<typename _Container::value_type>>\r\nflat_set(sorted_unique_t, _Container, _Compare = _Compare())\r\n    -> flat_set<typename _Container::value_type, _Compare, _Container>;\r\ntemplate <_Not_allocator_for_container _Container, _Usable_allocator_for<_Container> _Alloc>\r\nflat_set(sorted_unique_t, _Container, _Alloc)\r\n    -> flat_set<typename _Container::value_type, less<typename _Container::value_type>, _Container>;\r\ntemplate <_Not_allocator_for_container _Container, _Valid_compare_for_container<_Container> _Compare,\r\n    _Usable_allocator_for<_Container> _Alloc>\r\nflat_set(sorted_unique_t, _Container, _Compare, _Alloc)\r\n    -> flat_set<typename _Container::value_type, _Compare, _Container>;\r\n\r\n#if 1 // TRANSITION, P2582R1 (MSVC, Clang, EDG)\r\ntemplate <class _Key, class _Compare, class _Container, _Usable_allocator_for<_Container> _Alloc>\r\nflat_set(flat_set<_Key, _Compare, _Container>, _Alloc) -> flat_set<_Key, _Compare, _Container>;\r\n#endif // ^^^ workaround ^^^\r\n\r\ntemplate <_Iterator_for_container _InIt, _Not_allocator_for_container _Compare = less<iter_value_t<_InIt>>>\r\nflat_set(_InIt, _InIt, _Compare = _Compare()) -> flat_set<iter_value_t<_InIt>, _Compare>;\r\ntemplate <_Iterator_for_container _InIt, _Not_allocator_for_container _Compare = less<iter_value_t<_InIt>>>\r\nflat_set(sorted_unique_t, _InIt, _InIt, _Compare = _Compare()) -> flat_set<iter_value_t<_InIt>, _Compare>;\r\n\r\n// TRANSITION, CWG-2369, should just use constrained template parameters.\r\ntemplate <_RANGES input_range _Range, _Not_allocator_for_container _Compare = less<_RANGES range_value_t<_Range>>,\r\n    class _Alloc = allocator<_RANGES range_value_t<_Range>>, enable_if_t<_Allocator_for_container<_Alloc>, int> = 0>\r\nflat_set(from_range_t, _Range&&, _Compare = _Compare(), _Alloc = _Alloc()) -> flat_set<_RANGES range_value_t<_Range>,\r\n    _Compare, vector<_RANGES range_value_t<_Range>, _Rebind_alloc_t<_Alloc, _RANGES range_value_t<_Range>>>>;\r\n\r\n// TRANSITION, CWG-2369, should just use constrained template parameters.\r\ntemplate <_RANGES input_range _Range, class _Alloc, enable_if_t<_Allocator_for_container<_Alloc>, int> = 0>\r\nflat_set(from_range_t, _Range&&, _Alloc) -> flat_set<_RANGES range_value_t<_Range>, less<_RANGES range_value_t<_Range>>,\r\n    vector<_RANGES range_value_t<_Range>, _Rebind_alloc_t<_Alloc, _RANGES range_value_t<_Range>>>>;\r\n\r\ntemplate <class _Key, _Not_allocator_for_container _Compare = less<_Key>>\r\nflat_set(initializer_list<_Key>, _Compare = _Compare()) -> flat_set<_Key, _Compare>;\r\ntemplate <class _Key, _Not_allocator_for_container _Compare = less<_Key>>\r\nflat_set(sorted_unique_t, initializer_list<_Key>, _Compare = _Compare()) -> flat_set<_Key, _Compare>;\r\n\r\ntemplate <_Not_allocator_for_container _Container,\r\n    _Valid_compare_for_container<_Container> _Compare = less<typename _Container::value_type>>\r\nflat_multiset(_Container, _Compare = _Compare())\r\n    -> flat_multiset<typename _Container::value_type, _Compare, _Container>;\r\ntemplate <_Not_allocator_for_container _Container, _Usable_allocator_for<_Container> _Alloc>\r\nflat_multiset(_Container, _Alloc)\r\n    -> flat_multiset<typename _Container::value_type, less<typename _Container::value_type>, _Container>;\r\ntemplate <_Not_allocator_for_container _Container, _Valid_compare_for_container<_Container> _Compare,\r\n    _Usable_allocator_for<_Container> _Alloc>\r\nflat_multiset(_Container, _Compare, _Alloc) -> flat_multiset<typename _Container::value_type, _Compare, _Container>;\r\n\r\ntemplate <_Not_allocator_for_container _Container,\r\n    _Valid_compare_for_container<_Container> _Compare = less<typename _Container::value_type>>\r\nflat_multiset(sorted_equivalent_t, _Container, _Compare = _Compare())\r\n    -> flat_multiset<typename _Container::value_type, _Compare, _Container>;\r\ntemplate <_Not_allocator_for_container _Container, _Usable_allocator_for<_Container> _Alloc>\r\nflat_multiset(sorted_equivalent_t, _Container, _Alloc)\r\n    -> flat_multiset<typename _Container::value_type, less<typename _Container::value_type>, _Container>;\r\ntemplate <_Not_allocator_for_container _Container, _Valid_compare_for_container<_Container> _Compare,\r\n    _Usable_allocator_for<_Container> _Alloc>\r\nflat_multiset(sorted_equivalent_t, _Container, _Compare, _Alloc)\r\n    -> flat_multiset<typename _Container::value_type, _Compare, _Container>;\r\n\r\n#if 1 // TRANSITION, P2582R1 (MSVC, Clang, EDG)\r\ntemplate <class _Key, class _Compare, class _Container, _Usable_allocator_for<_Container> _Alloc>\r\nflat_multiset(flat_multiset<_Key, _Compare, _Container>, _Alloc) -> flat_multiset<_Key, _Compare, _Container>;\r\n#endif // ^^^ workaround ^^^\r\n\r\ntemplate <_Iterator_for_container _InIt, _Not_allocator_for_container _Compare = less<iter_value_t<_InIt>>>\r\nflat_multiset(_InIt, _InIt, _Compare = _Compare()) -> flat_multiset<iter_value_t<_InIt>, _Compare>;\r\ntemplate <_Iterator_for_container _InIt, _Not_allocator_for_container _Compare = less<iter_value_t<_InIt>>>\r\nflat_multiset(sorted_equivalent_t, _InIt, _InIt, _Compare = _Compare()) -> flat_multiset<iter_value_t<_InIt>, _Compare>;\r\n\r\n// TRANSITION, CWG-2369, should just use constrained template parameters.\r\ntemplate <_RANGES input_range _Range, _Not_allocator_for_container _Compare = less<_RANGES range_value_t<_Range>>,\r\n    class _Alloc = allocator<_RANGES range_value_t<_Range>>, enable_if_t<_Allocator_for_container<_Alloc>, int> = 0>\r\nflat_multiset(from_range_t, _Range&&, _Compare = _Compare(), _Alloc = _Alloc())\r\n    -> flat_multiset<_RANGES range_value_t<_Range>, _Compare,\r\n        vector<_RANGES range_value_t<_Range>, _Rebind_alloc_t<_Alloc, _RANGES range_value_t<_Range>>>>;\r\n\r\n// TRANSITION, CWG-2369, should just use constrained template parameters.\r\ntemplate <_RANGES input_range _Range, class _Alloc, enable_if_t<_Allocator_for_container<_Alloc>, int> = 0>\r\nflat_multiset(from_range_t, _Range&&, _Alloc)\r\n    -> flat_multiset<_RANGES range_value_t<_Range>, less<_RANGES range_value_t<_Range>>,\r\n        vector<_RANGES range_value_t<_Range>, _Rebind_alloc_t<_Alloc, _RANGES range_value_t<_Range>>>>;\r\n\r\ntemplate <class _Key, _Not_allocator_for_container _Compare = less<_Key>>\r\nflat_multiset(initializer_list<_Key>, _Compare = _Compare()) -> flat_multiset<_Key, _Compare>;\r\ntemplate <class _Key, _Not_allocator_for_container _Compare = less<_Key>>\r\nflat_multiset(sorted_equivalent_t, initializer_list<_Key>, _Compare = _Compare()) -> flat_multiset<_Key, _Compare>;\r\n\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _FLAT_SET_\r\n"
  },
  {
    "path": "stl/inc/format",
    "content": "// format standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// NOTE:\r\n// The contents of this header are derived in part from libfmt under the following license:\r\n\r\n// Copyright (c) 2012 - present, Victor Zverovich\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining\r\n// a copy of this software and associated documentation files (the\r\n// \"Software\"), to deal in the Software without restriction, including\r\n// without limitation the rights to use, copy, modify, merge, publish,\r\n// distribute, sublicense, and/or sell copies of the Software, and to\r\n// permit persons to whom the Software is furnished to do so, subject to\r\n// the following conditions:\r\n//\r\n// The above copyright notice and this permission notice shall be\r\n// included in all copies or substantial portions of the Software.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n//\r\n// --- Optional exception to the license ---\r\n//\r\n// As an exception, if, as a result of your compiling your source code, portions\r\n// of this Software are embedded into a machine-executable object form of such\r\n// source code, you may redistribute such embedded portions in such object form\r\n// without including the above copyright and permission notices.\r\n\r\n#ifndef _FORMAT_\r\n#define _FORMAT_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#if !_HAS_CXX20\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <format> are available only with C++20 or later.\");\r\n#else // ^^^ !_HAS_CXX20 / _HAS_CXX20 vvv\r\n\r\n#include <__msvc_format_ucd_tables.hpp>\r\n#include <__msvc_formatter.hpp>\r\n#include <__msvc_print.hpp>\r\n#include <__msvc_ranges_tuple_formatter.hpp>\r\n#include <bit>\r\n#include <charconv>\r\n#include <concepts>\r\n#include <cstdint>\r\n#include <iterator>\r\n#include <locale>\r\n#include <stdexcept>\r\n#include <xcall_once.h>\r\n#include <xfilesystem_abi.h>\r\n#include <xstring>\r\n#include <xutility>\r\n\r\n#if _HAS_CXX23\r\n#include <tuple>\r\n#endif // _HAS_CXX23\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\nextern \"C\" _NODISCARD __std_win_error __stdcall __std_get_cvt(__std_code_page _Codepage, _Cvtvec* _Pcvt) noexcept;\r\n\r\n_STD_BEGIN\r\n_NODISCARD constexpr bool _Is_integral_fmt_type(_Basic_format_arg_type _Ty) {\r\n    return _Ty > _Basic_format_arg_type::_None && _Ty <= _Basic_format_arg_type::_Char_type;\r\n}\r\n\r\n_NODISCARD constexpr bool _Is_arithmetic_fmt_type(_Basic_format_arg_type _Ty) {\r\n    return _Ty > _Basic_format_arg_type::_None && _Ty <= _Basic_format_arg_type::_Long_double_type;\r\n}\r\n\r\nstruct _Auto_id_tag {\r\n    explicit _Auto_id_tag() = default;\r\n};\r\n\r\ntemplate <class _Ty, class _CharT>\r\nconcept _Parse_arg_id_callbacks = requires(_Ty _At) {\r\n    { _At._On_auto_id() } -> same_as<void>;\r\n    { _At._On_manual_id(size_t{}) } -> same_as<void>;\r\n};\r\n\r\ntemplate <class _Ty, class _CharT>\r\nconcept _Parse_replacement_field_callbacks = requires(_Ty _At, const _CharT* _First, const _CharT* _Last) {\r\n    { _At._Parse_context };\r\n    { _At._On_text(_First, _Last) } -> same_as<void>;\r\n    { _At._On_replacement_field(size_t{}, static_cast<const _CharT*>(nullptr)) } -> same_as<void>;\r\n    { _At._On_format_specs(size_t{}, _First, _Last) } -> same_as<const _CharT*>;\r\n};\r\n\r\ntemplate <class _Ty, class _CharT>\r\nconcept _Parse_align_callbacks = requires(_Ty _At, basic_string_view<_CharT> _Sv, _Fmt_align _Aln) {\r\n    { _At._On_fill(_Sv) } -> same_as<void>;\r\n    { _At._On_align(_Aln) } -> same_as<void>;\r\n};\r\n\r\ntemplate <class _Ty, class _CharT>\r\nconcept _Parse_width_callbacks = requires(_Ty _At) {\r\n    { _At._On_width(int{}) } -> same_as<void>;\r\n};\r\n\r\ntemplate <class _Ty, class _CharT>\r\nconcept _Parse_precision_callbacks = requires(_Ty _At) {\r\n    { _At._On_precision(int{}) } -> same_as<void>;\r\n};\r\n\r\ntemplate <class _Ty, class _CharT>\r\nconcept _Width_adapter_callbacks = requires(_Ty _At) {\r\n    { _At._On_dynamic_width(_Auto_id_tag{}) } -> same_as<void>;\r\n    { _At._On_dynamic_width(size_t{}) } -> same_as<void>;\r\n};\r\n\r\ntemplate <class _Ty, class _CharT>\r\nconcept _Precision_adapter_callbacks = requires(_Ty _At) {\r\n    { _At._On_dynamic_precision(_Auto_id_tag{}) } -> same_as<void>;\r\n    { _At._On_dynamic_precision(size_t{}) } -> same_as<void>;\r\n};\r\n\r\ntemplate <class _Ty, class _CharT>\r\nconcept _Parse_spec_callbacks = _Parse_align_callbacks<_Ty, _CharT> && _Parse_width_callbacks<_Ty, _CharT>\r\n                             && _Parse_precision_callbacks<_Ty, _CharT> && _Width_adapter_callbacks<_Ty, _CharT>\r\n                             && _Precision_adapter_callbacks<_Ty, _CharT> && requires(_Ty _At, _Fmt_sign _Sgn) {\r\n                                    { _At._On_sign(_Sgn) } -> same_as<void>;\r\n                                    { _At._On_hash() } -> same_as<void>;\r\n                                    { _At._On_zero() } -> same_as<void>;\r\n                                    { _At._On_localized() } -> same_as<void>;\r\n                                    { _At._On_type(_CharT{}) } -> same_as<void>;\r\n                                };\r\n\r\ntemplate <class _CharT>\r\nstruct _Decode_result {\r\n    const _CharT* _Next_ptr;\r\n    bool _Is_unicode_scalar_value; // Also _Is_usv below, see https://www.unicode.org/glossary/#unicode_scalar_value\r\n    // _Is_unicode_scalar_value is also used for non-Unicode encodings, to indicate that the input can be converted to\r\n    // Unicode.\r\n};\r\n\r\n// _Decode_utf decodes UTF-8 or UTF-16 encoded unsigned char or wchar_t strings respectively\r\n_NODISCARD constexpr _Decode_result<wchar_t> _Decode_utf(\r\n    const wchar_t* _First, const wchar_t* _Last, char32_t& _Val) noexcept {\r\n    _STL_INTERNAL_CHECK(_First < _Last);\r\n    _Val = static_cast<char32_t>(*_First);\r\n    if (_Val < 0xD800) {\r\n        return {_First + 1, true};\r\n    } else if (_Val <= 0xDBFF) {\r\n        // 0xD800 <= _Val <= 0xDBFF: High surrogate\r\n        if (_First + 1 == _Last) {\r\n            _Val = 0xFFFD;\r\n            return {_Last, false};\r\n        }\r\n\r\n        if (_First[1] < 0xDC00 || _First[1] > 0xDFFF) {\r\n            // unpaired high surrogate\r\n            _Val = 0xFFFD;\r\n            return {_First + 1, false};\r\n        }\r\n\r\n        _Val = (_Val - 0xD800) << 10;\r\n        _Val += _First[1] - 0xDC00;\r\n        _Val += 0x10000;\r\n        return {_First + 2, true};\r\n    } else if (_Val <= 0xDFFF) {\r\n        // unpaired low surrogate\r\n        _Val = 0xFFFD;\r\n        return {_First + 1, false};\r\n    }\r\n\r\n    return {_First + 1, true};\r\n}\r\n\r\n_NODISCARD constexpr _Decode_result<char> _Decode_utf(const char* _First, const char* _Last, char32_t& _Val) noexcept {\r\n    _STL_INTERNAL_CHECK(_First < _Last);\r\n    // Decode a UTF-8 encoded codepoint starting at _First and not exceeding _Last, returning\r\n    // one past the end of the character decoded. Any invalid codepoints will result in\r\n    // _Val == U+FFFD and _Decode_utf will return one past the\r\n    // maximal subpart of the ill-formed subsequence. So, most invalid UTF-8 will result in\r\n    // one U+FFFD for each byte of invalid data. Truncated but otherwise valid UTF-8 may\r\n    // result in one U+FFFD for more than one input byte.\r\n    _Val = static_cast<char32_t>(static_cast<unsigned char>(*_First));\r\n\r\n    // All UTF-8 text is at least one byte.\r\n    // The zero extended values of the \"prefix\" bytes for\r\n    // a multi-byte sequence are the lowest numeric value (in two's complement)\r\n    // that any leading byte could have for a code unit of that size, so\r\n    // we just sum the comparisons to get the number of trailing bytes.\r\n    int _Num_bytes;\r\n    if (_Val <= 0x7F) {\r\n        return {_First + 1, true};\r\n    } else if (_Val >= 0xC2 && _Val <= 0xDF) {\r\n        _Num_bytes = 2;\r\n    } else if (_Val >= 0xE0 && _Val <= 0xEF) {\r\n        _Num_bytes = 3;\r\n    } else if (_Val >= 0xF0 && _Val <= 0xF4) {\r\n        _Num_bytes = 4;\r\n    } else {\r\n        // definitely not valid\r\n        _Val = 0xFFFD;\r\n        return {_First + 1, false};\r\n    }\r\n\r\n    if (_First + 1 == _Last) {\r\n        // We got a multibyte sequence and the next byte is off the end, we need\r\n        // to check just the next byte here since we need to look for overlong sequences.\r\n        // We want to return one past the end of a truncated sequence if everything is\r\n        // otherwise valid, so we can't check if _First + _Num_bytes is off the end.\r\n        _Val = 0xFFFD;\r\n        return {_Last, false};\r\n    }\r\n\r\n    switch (_Val) {\r\n    case 0xE0:\r\n        // we know _First[1] is in range because we just checked above,\r\n        // and a leader of 0xE0 implies _Num_bytes == 3\r\n        if (static_cast<unsigned char>(_First[1]) < 0xA0) {\r\n            // note, we just increment forward one-byte,\r\n            // even though _Num_bytes would imply the next\r\n            // codepoint starts at _First + 2, this is because\r\n            // we don't consume trailing bytes of ill-formed subsequences\r\n            _Val = 0xFFFD;\r\n            return {_First + 1, false};\r\n        }\r\n        break;\r\n    case 0xED:\r\n        if (static_cast<unsigned char>(_First[1]) > 0x9F) {\r\n            _Val = 0xFFFD;\r\n            return {_First + 1, false};\r\n        }\r\n        break;\r\n    case 0xF0:\r\n        if (static_cast<unsigned char>(_First[1]) < 0x90) {\r\n            _Val = 0xFFFD;\r\n            return {_First + 1, false};\r\n        }\r\n        break;\r\n    case 0xF4:\r\n        if (static_cast<unsigned char>(_First[1]) > 0x8F) {\r\n            _Val = 0xFFFD;\r\n            return {_First + 1, false};\r\n        }\r\n        break;\r\n    default:\r\n        break;\r\n    }\r\n\r\n    // mask out the \"value bits\" in the leading byte,\r\n    // for one-byte codepoints there is no leader,\r\n    // two-byte codepoints have the same number of value\r\n    // bits as trailing bytes (including the leading zero)\r\n    switch (_Num_bytes) {\r\n    case 2:\r\n        _Val &= 0b1'1111u;\r\n        break;\r\n    case 3:\r\n        _Val &= 0b1111u;\r\n        break;\r\n    case 4:\r\n        _Val &= 0b111u;\r\n        break;\r\n    default:\r\n        _STL_UNREACHABLE; // can't happen, see how the value of _Num_bytes is determined\r\n        break;\r\n    }\r\n\r\n    for (int _Idx = 1; _Idx < _Num_bytes; ++_Idx) {\r\n        if (_First + _Idx >= _Last || static_cast<unsigned char>(_First[_Idx]) < 0x80\r\n            || static_cast<unsigned char>(_First[_Idx]) > 0xBF) {\r\n            // truncated sequence\r\n            _Val = 0xFFFD;\r\n            return {_First + _Idx, false};\r\n        }\r\n        // we know we're always in range due to the above check.\r\n        _Val = (_Val << 6) | (static_cast<unsigned char>(_First[_Idx]) & 0b11'1111u);\r\n    }\r\n    return {_First + _Num_bytes, true};\r\n}\r\n\r\n_NODISCARD constexpr _Decode_result<char32_t> _Decode_utf(\r\n    const char32_t* _First, const char32_t* _Last, char32_t& _Val) noexcept {\r\n    _STL_INTERNAL_CHECK(_First < _Last);\r\n    (void) _Last;\r\n    _Val               = *_First;\r\n    const bool _Is_usv = _Val < 0xD800 || (_Val > 0xDFFF && _Val <= 0x10FFFF);\r\n    return {_First + 1, _Is_usv};\r\n}\r\n\r\ntemplate <class _CharT>\r\nclass _Unicode_codepoint_iterator {\r\nprivate:\r\n    const _CharT* _First = nullptr;\r\n    const _CharT* _Last  = nullptr;\r\n    const _CharT* _Next  = nullptr;\r\n    char32_t _Val        = 0;\r\n\r\npublic:\r\n    using value_type      = char32_t;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    constexpr _Unicode_codepoint_iterator(const _CharT* _First_val, const _CharT* _Last_val) noexcept\r\n        : _First(_First_val), _Last(_Last_val) {\r\n        if (_First != _Last) {\r\n            _Next = _Decode_utf(_First, _Last, _Val)._Next_ptr;\r\n        }\r\n    }\r\n\r\n    constexpr _Unicode_codepoint_iterator() = default;\r\n\r\n    constexpr _Unicode_codepoint_iterator& operator++() noexcept {\r\n        _First = _Next;\r\n        if (_First != _Last) {\r\n            _Next = _Decode_utf(_First, _Last, _Val)._Next_ptr;\r\n        }\r\n\r\n        return *this;\r\n    }\r\n    constexpr _Unicode_codepoint_iterator operator++(int) noexcept {\r\n        auto _Old = *this;\r\n        ++*this;\r\n        return _Old;\r\n    }\r\n\r\n    _NODISCARD constexpr value_type operator*() const noexcept {\r\n        return _Val;\r\n    }\r\n\r\n    _NODISCARD constexpr const _CharT* _Position() const noexcept {\r\n        return _First;\r\n    }\r\n\r\n    _NODISCARD constexpr bool operator==(default_sentinel_t) const noexcept {\r\n        return _First == _Last;\r\n    }\r\n    _NODISCARD constexpr bool operator==(const _Unicode_codepoint_iterator& _Other) const noexcept {\r\n        _STL_INTERNAL_CHECK(_Last == _Other._Last);\r\n        return _First == _Other._First && _Last == _Other._Last;\r\n    }\r\n};\r\n\r\n// Implements a DFA matching the regex of the rule GB9c. The DFA is:\r\n//\r\n//                             Consonant\r\n//                       +-------------------+\r\n//                       |                   |\r\n// +---+   Consonant   +-v-+    Linker     +-+-+\r\n// | 1 +---------------> 2 +---------------> 3 |\r\n// +---+               ++-^+               ++-^+\r\n//                      | |                 | |\r\n//                      +-+                 +-+\r\n//                      Extend       Linker or Extend\r\n//\r\n// State '3' is the accepting state.\r\nclass _GB9c_regex {\r\nprivate:\r\n    enum _State_t : uint8_t { _Start, _Consonant, _Linker };\r\n\r\n    _State_t _State = _Start;\r\n\r\npublic:\r\n    _NODISCARD constexpr bool operator==(const _GB9c_regex&) const noexcept = default;\r\n\r\n    _NODISCARD constexpr bool _Match(const _Indic_Conjunct_Break_property_values _Left_InCB) noexcept {\r\n        switch (_State) {\r\n        case _Start:\r\n            if (_Left_InCB == _Indic_Conjunct_Break_property_values::_Consonant_value) {\r\n                _State = _Consonant;\r\n            }\r\n            return false;\r\n\r\n        case _Consonant:\r\n            if (_Left_InCB == _Indic_Conjunct_Break_property_values::_Consonant_value) {\r\n                return false;\r\n            }\r\n\r\n            if (_Left_InCB == _Indic_Conjunct_Break_property_values::_Extend_value) {\r\n                return false;\r\n            }\r\n\r\n            if (_Left_InCB == _Indic_Conjunct_Break_property_values::_Linker_value) {\r\n                _State = _Linker;\r\n                return true;\r\n            }\r\n            break;\r\n\r\n        case _Linker:\r\n            if (_Left_InCB == _Indic_Conjunct_Break_property_values::_Consonant_value) {\r\n                _State = _Consonant;\r\n                return false;\r\n            }\r\n\r\n            if (_Left_InCB == _Indic_Conjunct_Break_property_values::_Extend_value\r\n                || _Left_InCB == _Indic_Conjunct_Break_property_values::_Linker_value) {\r\n                return true;\r\n            }\r\n            break;\r\n\r\n        default:\r\n            _STL_INTERNAL_CHECK(false);\r\n            break;\r\n        }\r\n\r\n        _State = _Start;\r\n        return false;\r\n    }\r\n};\r\n\r\n// Implements a DFA matching the regex on the left side of rule GB11. The DFA is:\r\n//\r\n// +---+   ExtPic      +---+    ZWJ        +---+\r\n// | 1 +---------------> 2 +---------------> 3 |\r\n// +---+               ++-^+               +---+\r\n//                      | |\r\n//                      +-+\r\n//                      Extend\r\n//\r\n// Note state 3 is never explicitly transitioned to, since it's the \"accept\" state, we just\r\n// transition back to state 1 and return true.\r\nclass _GB11_LeftHand_regex {\r\nprivate:\r\n    enum _State_t : bool { _Start, _ExtPic };\r\n\r\n    _State_t _State = _Start;\r\n\r\npublic:\r\n    _NODISCARD constexpr bool operator==(const _GB11_LeftHand_regex&) const noexcept = default;\r\n\r\n    _NODISCARD constexpr bool _Match(\r\n        const _Grapheme_Break_property_values _Left_gbp, _Extended_Pictographic_property_values _Left_ExtPic) noexcept {\r\n        switch (_State) {\r\n        case _Start:\r\n            if (_Left_ExtPic == _Extended_Pictographic_property_values::_Extended_Pictographic_value) {\r\n                _State = _ExtPic;\r\n            }\r\n            return false;\r\n        case _ExtPic:\r\n            if (_Left_gbp == _Grapheme_Break_property_values::_ZWJ_value) {\r\n                _State = _Start;\r\n                return true;\r\n            } else if (_Left_gbp != _Grapheme_Break_property_values::_Extend_value) {\r\n                _State = _Start;\r\n                return false;\r\n            }\r\n            return false;\r\n        default:\r\n            _STL_INTERNAL_CHECK(false);\r\n            return false;\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _CharT>\r\nclass _Grapheme_break_property_iterator2 {\r\nprivate:\r\n    using _Wrapped_iter_type = _Unicode_codepoint_iterator<_CharT>;\r\n\r\n    _Wrapped_iter_type _WrappedIter;\r\n    _GB9c_regex _GB9c_rx;\r\n    _GB11_LeftHand_regex _GB11_rx;\r\n\r\npublic:\r\n    using value_type      = iter_value_t<_Wrapped_iter_type>;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    _NODISCARD constexpr bool operator==(default_sentinel_t) const noexcept {\r\n        return _WrappedIter == default_sentinel;\r\n    }\r\n\r\n    _NODISCARD constexpr bool operator==(const _Grapheme_break_property_iterator2&) const noexcept = default;\r\n\r\n    constexpr _Grapheme_break_property_iterator2(const _CharT* _First, const _CharT* _Last)\r\n        : _WrappedIter(_First, _Last) {}\r\n\r\n    constexpr _Grapheme_break_property_iterator2() = default;\r\n\r\n    constexpr _Grapheme_break_property_iterator2& operator++() noexcept {\r\n        auto _Left_gbp     = _Grapheme_Break_property_data._Get_property_for_codepoint(*_WrappedIter);\r\n        auto _Left_InCB    = _Indic_Conjunct_Break_property_data._Get_property_for_codepoint(*_WrappedIter);\r\n        auto _Left_ExtPic  = _Extended_Pictographic_property_data._Get_property_for_codepoint(*_WrappedIter);\r\n        auto _Right_gbp    = _Grapheme_Break_property_values::_No_value;\r\n        auto _Right_ExtPic = _Extended_Pictographic_property_values::_No_value;\r\n        size_t _Num_RIs    = 0;\r\n        for (;; _Left_gbp    = _Right_gbp,\r\n                _Left_InCB   = _Indic_Conjunct_Break_property_data._Get_property_for_codepoint(*_WrappedIter),\r\n                _Left_ExtPic = _Right_ExtPic) {\r\n            ++_WrappedIter;\r\n            if (_WrappedIter == default_sentinel) {\r\n                return *this; // GB2 Any % eot\r\n            }\r\n            _Right_gbp    = _Grapheme_Break_property_data._Get_property_for_codepoint(*_WrappedIter);\r\n            _Right_ExtPic = _Extended_Pictographic_property_data._Get_property_for_codepoint(*_WrappedIter);\r\n            // match GB9c and GB11 now, so that we're sure to update them for every character,\r\n            // not just ones where the rules are considered\r\n            const bool _GB9c_Match = _GB9c_rx._Match(_Left_InCB);\r\n            const bool _GB11_Match = _GB11_rx._Match(_Left_gbp, _Left_ExtPic);\r\n            // Also update the number of sequential RIs immediately\r\n            if (_Left_gbp == _Grapheme_Break_property_values::_Regional_Indicator_value) {\r\n                ++_Num_RIs;\r\n            } else {\r\n                _Num_RIs = 0;\r\n            }\r\n\r\n            if (_Left_gbp == _Grapheme_Break_property_values::_CR_value\r\n                && _Right_gbp == _Grapheme_Break_property_values::_LF_value) {\r\n                continue; // GB3 CR x LF\r\n            }\r\n\r\n            if (_Left_gbp == _Grapheme_Break_property_values::_Control_value\r\n                || _Left_gbp == _Grapheme_Break_property_values::_CR_value\r\n                || _Left_gbp == _Grapheme_Break_property_values::_LF_value) {\r\n                return *this; // GB4 (Control | CR | LF) % Any\r\n            }\r\n\r\n            if (_Right_gbp == _Grapheme_Break_property_values::_Control_value\r\n                || _Right_gbp == _Grapheme_Break_property_values::_CR_value\r\n                || _Right_gbp == _Grapheme_Break_property_values::_LF_value) {\r\n                return *this; // GB5 Any % (Control | CR | LF)\r\n            }\r\n\r\n            if (_Left_gbp == _Grapheme_Break_property_values::_L_value\r\n                && (_Right_gbp == _Grapheme_Break_property_values::_L_value\r\n                    || _Right_gbp == _Grapheme_Break_property_values::_V_value\r\n                    || _Right_gbp == _Grapheme_Break_property_values::_LV_value\r\n                    || _Right_gbp == _Grapheme_Break_property_values::_LVT_value)) {\r\n                continue; // GB6 L x (L | V | LV | LVT)\r\n            }\r\n\r\n            if ((_Left_gbp == _Grapheme_Break_property_values::_LV_value\r\n                    || _Left_gbp == _Grapheme_Break_property_values::_V_value)\r\n                && (_Right_gbp == _Grapheme_Break_property_values::_V_value\r\n                    || _Right_gbp == _Grapheme_Break_property_values::_T_value)) {\r\n                continue; // GB7 (LV | V) x (V | T)\r\n            }\r\n\r\n            if ((_Left_gbp == _Grapheme_Break_property_values::_LVT_value\r\n                    || _Left_gbp == _Grapheme_Break_property_values::_T_value)\r\n                && _Right_gbp == _Grapheme_Break_property_values::_T_value) {\r\n                continue; // GB8 (LVT | T) x T\r\n            }\r\n\r\n            if (_Right_gbp == _Grapheme_Break_property_values::_Extend_value\r\n                || _Right_gbp == _Grapheme_Break_property_values::_ZWJ_value) {\r\n                continue; // GB9 x (Extend | ZWJ)\r\n            }\r\n\r\n            if (_Right_gbp == _Grapheme_Break_property_values::_SpacingMark_value) {\r\n                continue; // GB9a x SpacingMark\r\n            }\r\n\r\n            if (_Left_gbp == _Grapheme_Break_property_values::_Prepend_value) {\r\n                continue; // GB9b Prepend x\r\n            }\r\n\r\n            if (_GB9c_Match) {\r\n                // GB9c (since Unicode 15.1)\r\n                // \\p{InCB=Consonant}[ \\p{InCB=Extend} \\p{InCB=Linker} ]* \\p{InCB=Linker} [ \\p{InCB=Extend}\r\n                // \\p{InCB=Linker} ]* x \\p{InCB=Consonant}\r\n                continue;\r\n            }\r\n\r\n            if (_GB11_Match && _Right_ExtPic == _Extended_Pictographic_property_values::_Extended_Pictographic_value) {\r\n                continue; // GB11 \\p{ExtendedPictographic} Extend* ZWJ x \\p{ExtendedPictographic}\r\n            }\r\n\r\n            if (_Left_gbp == _Grapheme_Break_property_values::_Regional_Indicator_value\r\n                && _Right_gbp == _Grapheme_Break_property_values::_Regional_Indicator_value && _Num_RIs % 2 != 0) {\r\n                continue; // GB12 and 13, do not break between RIs if there are an odd number of RIs before the\r\n                          // breakpoint\r\n            }\r\n            return *this;\r\n        }\r\n    }\r\n    constexpr _Grapheme_break_property_iterator2 operator++(int) noexcept {\r\n        auto _Old = *this;\r\n        ++*this;\r\n        return _Old;\r\n    }\r\n\r\n    _NODISCARD constexpr const _CharT* _Position() const noexcept {\r\n        return _WrappedIter._Position();\r\n    }\r\n\r\n    _NODISCARD constexpr value_type operator*() const noexcept {\r\n        return *_WrappedIter;\r\n    }\r\n};\r\n\r\ntemplate <class _Ty, class _CharT>\r\nconcept _CharT_or_bool = same_as<_Ty, _CharT> || same_as<_Ty, bool>;\r\n\r\ntemplate <class _Ty, class _Context, class _Formatter = _Context::template formatter_type<remove_const_t<_Ty>>>\r\nconcept _Formattable_with_non_const = semiregular<_Formatter>\r\n                                   && requires(_Formatter& __f, _Ty&& __t, _Context __fc,\r\n                                       basic_format_parse_context<typename _Context::char_type> __pc) {\r\n                                          { __f.parse(__pc) } -> same_as<typename decltype(__pc)::iterator>;\r\n                                          { __f.format(__t, __fc) } -> same_as<typename _Context::iterator>;\r\n                                      };\r\n\r\n// we need to implement this ourselves because from_chars does not work with wide characters and isn't constexpr\r\ntemplate <class _CharT>\r\n_NODISCARD constexpr const _CharT* _Parse_nonnegative_integer(\r\n    const _CharT* _First, const _CharT* _Last, unsigned int& _Value) {\r\n    _STL_INTERNAL_CHECK(_First != _Last && '0' <= *_First && *_First <= '9');\r\n\r\n    constexpr auto _Max_int = static_cast<unsigned int>(_STD _Max_limit<int>());\r\n    constexpr auto _Big_int = _Max_int / 10u;\r\n\r\n    _Value = 0;\r\n\r\n    do {\r\n        if (_Value > _Big_int) {\r\n            _Value = _Max_int + 1;\r\n            break;\r\n        }\r\n        _Value = _Value * 10 + static_cast<unsigned int>(*_First - '0');\r\n        ++_First;\r\n    } while (_First != _Last && '0' <= *_First && *_First <= '9');\r\n\r\n    if (_Value > _Max_int) {\r\n        _Throw_format_error(\"Number is too big\");\r\n    }\r\n\r\n    return _First;\r\n}\r\n\r\ntemplate <class _CharT>\r\n_NODISCARD constexpr const _CharT* _Parse_nonnegative_integer(const _CharT* _First, const _CharT* _Last, int& _Value) {\r\n    unsigned int _Val_unsigned = 0;\r\n\r\n    _First = _Parse_nonnegative_integer(_First, _Last, _Val_unsigned);\r\n    // Never invalid because _Parse_nonnegative_integer throws an error for values that don't fit in signed integers\r\n    _Value = static_cast<int>(_Val_unsigned);\r\n    return _First;\r\n}\r\n\r\ntemplate <class _CharT, _Parse_arg_id_callbacks<_CharT> _Callbacks_type>\r\n_NODISCARD constexpr const _CharT* _Parse_arg_id(\r\n    const _CharT* _First, const _CharT* _Last, _Callbacks_type&& _Callbacks) {\r\n    _STL_INTERNAL_CHECK(_First != _Last);\r\n    _CharT _Ch = *_First;\r\n    // No id provided, format string is using automatic indexing.\r\n    if (_Ch == '}' || _Ch == ':') {\r\n        _Callbacks._On_auto_id();\r\n        return _First;\r\n    }\r\n\r\n    if (_Ch >= '0' && _Ch <= '9') {\r\n        unsigned int _Index = 0;\r\n        // arg_id is not allowed to have any leading zeros, but is allowed to be\r\n        // equal to zero (but not '00'). So if _Ch is zero we skip the parsing, leave\r\n        // _Index set to zero and let the validity checks below ensure that the arg_id\r\n        // wasn't something like \"00\", or \"023\".\r\n        if (_Ch == '0') {\r\n            ++_First;\r\n        } else {\r\n            _First = _Parse_nonnegative_integer(_First, _Last, _Index);\r\n        }\r\n\r\n        // The format string shouldn't end right after the index number.\r\n        // The only things permitted after the index are the end of the replacement field ('}')\r\n        // or the beginning of the format spec (':').\r\n        if (_First == _Last || (*_First != '}' && *_First != ':')) {\r\n            _Throw_format_error(\"Invalid format string.\");\r\n        }\r\n\r\n        _Callbacks._On_manual_id(_Index);\r\n        return _First;\r\n    }\r\n    // This is where we would parse named arg ids if std::format were to support them.\r\n    _Throw_format_error(\"Invalid format string.\");\r\n}\r\n\r\n_NODISCARD constexpr bool _Is_execution_charset_self_synchronizing() {\r\n#ifdef _MSVC_EXECUTION_CHARACTER_SET\r\n    // This is a list of charset codes (as reported by _MSVC_EXECUTION_CHARACTER_SET) that are\r\n    // self-synchronizing (and \"narrow\" so 1200 (utf-16) and 1201 (unicodeFFFE) are not listed).\r\n    // We care about this because if a charset is self-synchronizing then we can search through it\r\n    // for formatting control characters _without_ generally decoding the format string.\r\n    switch (_MSVC_EXECUTION_CHARACTER_SET) {\r\n    // See: https://learn.microsoft.com/windows/win32/intl/code-page-identifiers\r\n    case 874: // Thai (Windows)\r\n    case 1250: // ANSI Central European; Central European (Windows)\r\n    case 1251: // ANSI Cyrillic; Cyrillic (Windows)\r\n    case 1252: // ANSI Latin 1; Western European (Windows)\r\n    case 1253: // ANSI Greek; Greek (Windows)\r\n    case 1254: // ANSI Turkish; Turkish (Windows)\r\n    case 1255: // ANSI Hebrew; Hebrew (Windows)\r\n    case 1256: // ANSI Arabic; Arabic (Windows)\r\n    case 1257: // ANSI Baltic; Baltic (Windows)\r\n    case 1258: // ANSI/OEM Vietnamese; Vietnamese (Windows)\r\n    case 65001: // Unicode (UTF-8)\r\n        return true;\r\n    default:\r\n        return false;\r\n    }\r\n#else // ^^^ no workaround / EDG workaround vvv\r\n    return false; // TRANSITION, VSO-1468747 (EDG) - safe fallback response\r\n#endif // ^^^ EDG workaround ^^^\r\n}\r\n\r\n_NODISCARD constexpr int _Unicode_width_estimate(const char32_t _Ch) noexcept {\r\n    // Computes the width estimation for Unicode characters from N4950 [format.string.std]/13\r\n    // The two branches are functionally equivalent; `12` is chosen for performance here.\r\n    constexpr char32_t _Linear_search_threshold = _Width_estimate_intervals_v2[12];\r\n    if (_Ch < _Linear_search_threshold) {\r\n        int _Result = 1;\r\n        for (const auto& _Bound : _Width_estimate_intervals_v2) {\r\n            if (_Ch < _Bound) {\r\n                return _Result;\r\n            }\r\n            _Result ^= 0b11u; // Flip between 1 and 2 on each iteration\r\n        }\r\n        return 1;\r\n    } else {\r\n        const ptrdiff_t _Upper_bound_index =\r\n            _STD upper_bound(_Width_estimate_intervals_v2, _STD end(_Width_estimate_intervals_v2), _Ch)\r\n            - _Width_estimate_intervals_v2;\r\n        return 1 + (_Upper_bound_index & 1);\r\n    }\r\n}\r\n\r\ntemplate <class _CharT, bool _Statically_Utf8 = _Is_execution_charset_self_synchronizing()>\r\nclass _Fmt_codec;\r\n\r\ntemplate <bool _Statically_Utf8>\r\nclass _Fmt_codec_base {};\r\n\r\ntemplate <>\r\nclass _Fmt_codec_base<false> {\r\nprotected:\r\n    _Cvtvec _Cvt;\r\n\r\n    _NODISCARD int _Double_byte_encoding_code_units_in_next_character(\r\n        const char* const _First, const char* const _Last) const {\r\n        // Returns the number of code units that compose the first encoded character in [_First, _Last),\r\n        // or -1 if [_First, _Last) doesn't contain an entire encoded character or *_First is not a valid lead byte.\r\n        wchar_t _Wide;\r\n        mbstate_t _St{};\r\n        const auto _Len   = static_cast<size_t>(_Last - _First);\r\n        const int _Result = _Mbrtowc(&_Wide, _First, _Len, &_St, &_Cvt);\r\n        if (_Result > 0) {\r\n            return _Result;\r\n        } else if (_Result < 0) { // invalid or incomplete encoded character\r\n            return -1;\r\n        } else { // next code unit is '\\0'\r\n            return 1;\r\n        }\r\n    }\r\n\r\n    _Fmt_codec_base() {\r\n#ifdef _MSVC_EXECUTION_CHARACTER_SET\r\n        constexpr __std_code_page _Format_codepage{_MSVC_EXECUTION_CHARACTER_SET};\r\n#else // ^^^ no workaround / workaround vvv\r\n      // TRANSITION, VSO-1468747 (EDG) - constructor isn't constexpr, so value is unimportant\r\n        constexpr __std_code_page _Format_codepage{65001};\r\n#endif // ^^^ workaround ^^^\r\n        [[maybe_unused]] const __std_win_error _Result = __std_get_cvt(_Format_codepage, &_Cvt);\r\n        _STL_INTERNAL_CHECK(_Result == __std_win_error::_Success);\r\n    }\r\n};\r\n\r\ntemplate <bool _Statically_Utf8>\r\nclass _Fmt_codec<char, _Statically_Utf8> : private _Fmt_codec_base<_Statically_Utf8> {\r\nprivate:\r\n    _NODISCARD static constexpr int _Utf8_code_units_in_next_character(\r\n        const char* const _First, const char* const _Last) noexcept {\r\n        char32_t _Ch;\r\n        const auto [_Next, _Is_usv] = _Decode_utf(_First, _Last, _Ch);\r\n        _STL_INTERNAL_CHECK(_Next - _First <= 4);\r\n        return _Is_usv ? static_cast<int>(_Next - _First) : -1;\r\n    }\r\n\r\npublic:\r\n    _NODISCARD constexpr const char* _Find_encoded(const char* _First, const char* const _Last, const char _Val) const {\r\n        // Returns the first occurrence of _Val as an encoded character (and not, for example, as a\r\n        // continuation byte) in [_First, _Last).\r\n        if constexpr (_Statically_Utf8) {\r\n            return _STD _Find_unchecked(_First, _Last, _Val);\r\n        } else {\r\n            if (this->_Cvt._Mbcurmax == 1 || this->_Cvt._Mbcurmax == 4) {\r\n                // As above and in _Mbrtowc, assume 4-byte encodings are UTF-8\r\n                return _STD _Find_unchecked(_First, _Last, _Val);\r\n            }\r\n\r\n            while (_First != _Last && *_First != _Val) {\r\n                const int _Units = this->_Double_byte_encoding_code_units_in_next_character(_First, _Last);\r\n                if (_Units < 0) {\r\n                    _Throw_format_error(\"Invalid encoded character in format string.\");\r\n                }\r\n                _First += _Units;\r\n            }\r\n\r\n            return _First;\r\n        }\r\n    }\r\n\r\n    _NODISCARD constexpr int _Units_in_next_character(\r\n        const char* const _First, const char* const _Last) const noexcept {\r\n        // Returns the number of code units that compose the first encoded character in\r\n        // [_First, _Last), or -1 if [_First, _Last) doesn't contain an entire encoded character or\r\n        // *_First is not a valid lead byte.\r\n        _STL_INTERNAL_CHECK(_First < _Last);\r\n\r\n        if constexpr (_Statically_Utf8) {\r\n            return _Utf8_code_units_in_next_character(_First, _Last);\r\n        } else {\r\n            switch (this->_Cvt._Mbcurmax) {\r\n            default:\r\n                _STL_INTERNAL_CHECK(!\"Bad number of encoding units for this code page\");\r\n                [[fallthrough]];\r\n            case 1:\r\n                return 1; // all characters have only one code unit\r\n\r\n            case 2:\r\n                return this->_Double_byte_encoding_code_units_in_next_character(_First, _Last);\r\n\r\n            case 4: // Assume UTF-8 (as does _Mbrtowc)\r\n                return _Utf8_code_units_in_next_character(_First, _Last);\r\n            }\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    _NODISCARD _Decode_result<char> _Decode(const char* const _First, const char* const _Last, char32_t& _Val) const {\r\n        _STL_INTERNAL_CHECK(_First < _Last);\r\n\r\n        if constexpr (_Is_ordinary_literal_encoding_utf8()) {\r\n            return _Decode_utf(_First, _Last, _Val);\r\n#ifdef _MSVC_EXECUTION_CHARACTER_SET // TRANSITION, VSO-1468747 (EDG)\r\n        } else if constexpr (_Is_execution_charset_self_synchronizing()) {\r\n            wchar_t _Wide;\r\n            const auto _Res =\r\n                __std_fs_convert_narrow_to_wide(__std_code_page{_MSVC_EXECUTION_CHARACTER_SET}, _First, 1, &_Wide, 1);\r\n            _Val = _Wide;\r\n            return {_First + 1, _Res._Len != 0};\r\n#endif // ^^^ no workaround ^^^\r\n        } else {\r\n            if (*_First == '\\0') {\r\n                _Val = U'\\0';\r\n                return {_First + 1, true};\r\n            }\r\n\r\n            wchar_t _Wide;\r\n            mbstate_t _St{};\r\n            const auto _Len   = static_cast<size_t>(_Last - _First);\r\n            const int _Result = _Mbrtowc(&_Wide, _First, _Len, &_St, &this->_Cvt);\r\n            if (_Result < 0) {\r\n                return {_First + 1, false};\r\n            } else {\r\n                _Val = _Wide;\r\n                return {_First + _Result, true};\r\n            }\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n};\r\n\r\ntemplate <bool _Statically_Utf8>\r\nclass _Fmt_codec<wchar_t, _Statically_Utf8> {\r\npublic:\r\n    _NODISCARD constexpr const wchar_t* _Find_encoded(\r\n        const wchar_t* const _First, const wchar_t* const _Last, const wchar_t _Val) const {\r\n        return _STD _Find_unchecked(_First, _Last, _Val);\r\n    }\r\n\r\n    _NODISCARD constexpr int _Units_in_next_character(\r\n        const wchar_t* _First, const wchar_t* const _Last) const noexcept {\r\n        char32_t _Ch;\r\n        const auto [_Next, _Is_usv] = _Decode_utf(_First, _Last, _Ch);\r\n        _STL_INTERNAL_CHECK(_Next - _First <= 2);\r\n        return _Is_usv ? static_cast<int>(_Next - _First) : -1;\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    _NODISCARD constexpr _Decode_result<wchar_t> _Decode(\r\n        const wchar_t* const _First, const wchar_t* const _Last, char32_t& _Val) const noexcept {\r\n        return _Decode_utf(_First, _Last, _Val);\r\n    }\r\n#endif // _HAS_CXX23\r\n};\r\n\r\ntemplate <class _CharT>\r\n_NODISCARD constexpr _Fmt_codec<_CharT> _Get_fmt_codec() {\r\n    return {};\r\n}\r\n\r\ntemplate <class _CharT>\r\n    requires (is_same_v<_CharT, char> && !_Is_execution_charset_self_synchronizing())\r\n_NODISCARD const _Fmt_codec<_CharT>& _Get_fmt_codec() {\r\n    using _CodecType = _Fmt_codec<_CharT>;\r\n\r\n    static once_flag _Flag;\r\n    alignas(_CodecType) static unsigned char _Storage[sizeof(_CodecType)];\r\n\r\n    _STD call_once(_Flag, [] { _STD construct_at(reinterpret_cast<_CodecType*>(&_Storage)); });\r\n\r\n    return *_STD launder(reinterpret_cast<const _CodecType*>(&_Storage));\r\n}\r\n\r\ntemplate <class _CharT, _Parse_align_callbacks<_CharT> _Callbacks_type>\r\n_NODISCARD constexpr const _CharT* _Parse_align(\r\n    const _CharT* _First, const _CharT* _Last, _Callbacks_type&& _Callbacks) {\r\n    // align and fill\r\n    _STL_INTERNAL_CHECK(_First != _Last && *_First != '}');\r\n    auto _Parsed_align = _Fmt_align::_None;\r\n\r\n    const int _Units = _Get_fmt_codec<_CharT>()._Units_in_next_character(_First, _Last);\r\n    if (_Units < 0) { // invalid fill character encoding\r\n        _Throw_format_error(\"Invalid format string.\");\r\n    }\r\n    auto _Align_pt = _First + _Units;\r\n\r\n    if (_Align_pt == _Last) {\r\n        _Align_pt = _First;\r\n    }\r\n\r\n    for (;;) {\r\n        switch (*_Align_pt) {\r\n        case '<':\r\n            _Parsed_align = _Fmt_align::_Left;\r\n            break;\r\n        case '>':\r\n            _Parsed_align = _Fmt_align::_Right;\r\n            break;\r\n        case '^':\r\n            _Parsed_align = _Fmt_align::_Center;\r\n            break;\r\n        default:\r\n            break;\r\n        }\r\n\r\n        if (_Parsed_align != _Fmt_align::_None) {\r\n            if (_Align_pt != _First) {\r\n                if (*_First == '{') {\r\n                    _Throw_format_error(\"invalid fill character '{'\");\r\n                }\r\n                _Callbacks._On_fill({_First, static_cast<size_t>(_Align_pt - _First)});\r\n                _First = _Align_pt + 1;\r\n            } else {\r\n                ++_First;\r\n            }\r\n            _Callbacks._On_align(_Parsed_align);\r\n            break;\r\n        } else if (_Align_pt == _First) {\r\n            break;\r\n        }\r\n        _Align_pt = _First;\r\n    }\r\n\r\n    return _First;\r\n}\r\n\r\n// Adapts a type modeling _Width_adapter_callbacks to model _Parse_arg_id_callbacks.\r\n// Used in _Parse_width so that _Parse_arg_id can be used to parse dynamic widths.\r\ntemplate <class _CharT, _Width_adapter_callbacks<_CharT> _Callbacks_type>\r\nstruct _Width_adapter {\r\n    _Callbacks_type& _Callbacks;\r\n\r\n    constexpr explicit _Width_adapter(_Callbacks_type& _Handler) : _Callbacks(_Handler) {}\r\n\r\n    constexpr void _On_auto_id() {\r\n        _Callbacks._On_dynamic_width(_Auto_id_tag{});\r\n    }\r\n    constexpr void _On_manual_id(const size_t _Id) {\r\n        _Callbacks._On_dynamic_width(_Id);\r\n    }\r\n};\r\n\r\n// Adapts a type modeling _Precision_adapter_callbacks to model _Parse_arg_id_callbacks.\r\n// Used in _Parse_precision so that _Parse_arg_id can be used to parse dynamic precisions.\r\ntemplate <class _CharT, _Precision_adapter_callbacks<_CharT> _Callbacks_type>\r\nstruct _Precision_adapter {\r\n    _Callbacks_type& _Callbacks;\r\n\r\n    constexpr explicit _Precision_adapter(_Callbacks_type& _Handler) : _Callbacks(_Handler) {}\r\n\r\n    constexpr void _On_auto_id() {\r\n        _Callbacks._On_dynamic_precision(_Auto_id_tag{});\r\n    }\r\n    constexpr void _On_manual_id(const size_t _Id) {\r\n        _Callbacks._On_dynamic_precision(_Id);\r\n    }\r\n};\r\n\r\n// _Parse_arg_id expects a handler when it finds an argument id, however\r\n// _Parse_replacement_field actually needs to know the value of that argument ID to pass on\r\n// to _Handler._On_replacement_field or _Handler._On_format_specs. This _Parse_arg_id wrapper\r\n// stores the value of the arg id for later use, so _Parse_replacement_field has access to it.\r\ntemplate <class _CharT>\r\nstruct _Id_adapter {\r\n    basic_format_parse_context<_CharT>& _Parse_context;\r\n    size_t _Arg_id = static_cast<size_t>(-1);\r\n\r\n    constexpr void _On_auto_id() {\r\n        _Arg_id = _Parse_context.next_arg_id();\r\n        _STL_INTERNAL_CHECK(_Arg_id != static_cast<size_t>(-1));\r\n    }\r\n    constexpr void _On_manual_id(const size_t _Id) {\r\n        _Parse_context.check_arg_id(_Id);\r\n        _Arg_id = _Id;\r\n        _STL_INTERNAL_CHECK(_Arg_id != static_cast<size_t>(-1));\r\n    }\r\n};\r\n\r\ntemplate <class _CharT, _Parse_width_callbacks<_CharT> _Callbacks_type>\r\n_NODISCARD constexpr const _CharT* _Parse_width(\r\n    const _CharT* _First, const _CharT* _Last, _Callbacks_type&& _Callbacks) {\r\n    _STL_INTERNAL_CHECK(_First != _Last);\r\n    if ('1' <= *_First && *_First <= '9') {\r\n        int _Value = 0;\r\n        _First     = _Parse_nonnegative_integer(_First, _Last, _Value);\r\n        _Callbacks._On_width(_Value);\r\n    } else if (*_First == '{') {\r\n        ++_First;\r\n        if (_First != _Last) {\r\n            _First = _Parse_arg_id(_First, _Last, _Width_adapter<_CharT, _Callbacks_type>{_Callbacks});\r\n        }\r\n\r\n        if (_First == _Last || *_First != '}') {\r\n            _Throw_format_error(\"Invalid format string.\");\r\n        }\r\n        ++_First;\r\n    }\r\n    return _First;\r\n}\r\n\r\ntemplate <class _CharT, _Parse_precision_callbacks<_CharT> _Callbacks_type>\r\n_NODISCARD constexpr const _CharT* _Parse_precision(\r\n    const _CharT* _First, const _CharT* _Last, _Callbacks_type&& _Callbacks) {\r\n    ++_First;\r\n    _CharT _Ch = '\\0';\r\n    if (_First != _Last) {\r\n        _Ch = *_First;\r\n    }\r\n\r\n    if ('0' <= _Ch && _Ch <= '9') {\r\n        int _Precision = 0;\r\n        _First         = _Parse_nonnegative_integer(_First, _Last, _Precision);\r\n        _Callbacks._On_precision(_Precision);\r\n    } else if (_Ch == '{') {\r\n        ++_First;\r\n        if (_First != _Last) {\r\n            _First = _Parse_arg_id(_First, _Last, _Precision_adapter<_CharT, _Callbacks_type>{_Callbacks});\r\n        }\r\n\r\n        if (_First == _Last || *_First != '}') {\r\n            _Throw_format_error(\"Invalid format string.\");\r\n        }\r\n        ++_First;\r\n    } else {\r\n        _Throw_format_error(\"Missing precision specifier.\");\r\n    }\r\n\r\n    return _First;\r\n}\r\n\r\ntemplate <class _CharT, _Parse_spec_callbacks<_CharT> _Callbacks_type>\r\n_NODISCARD constexpr const _CharT* _Parse_format_specs(\r\n    const _CharT* _First, const _CharT* _Last, _Callbacks_type&& _Callbacks) {\r\n    if (_First == _Last || *_First == '}') {\r\n        return _First;\r\n    }\r\n\r\n    _First = _Parse_align(_First, _Last, _Callbacks);\r\n    if (_First == _Last) {\r\n        return _First;\r\n    }\r\n\r\n    switch (*_First) {\r\n    case '+':\r\n        _Callbacks._On_sign(_Fmt_sign::_Plus);\r\n        ++_First;\r\n        break;\r\n    case '-':\r\n        _Callbacks._On_sign(_Fmt_sign::_Minus);\r\n        ++_First;\r\n        break;\r\n    case ' ':\r\n        _Callbacks._On_sign(_Fmt_sign::_Space);\r\n        ++_First;\r\n        break;\r\n    default:\r\n        break;\r\n    }\r\n\r\n    if (_First == _Last) {\r\n        return _First;\r\n    }\r\n\r\n    if (*_First == '#') {\r\n        _Callbacks._On_hash();\r\n        if (++_First == _Last) {\r\n            return _First;\r\n        }\r\n    }\r\n\r\n    if (*_First == '0') {\r\n        _Callbacks._On_zero();\r\n        if (++_First == _Last) {\r\n            return _First;\r\n        }\r\n    }\r\n\r\n    _First = _Parse_width(_First, _Last, _Callbacks);\r\n    if (_First == _Last) {\r\n        return _First;\r\n    }\r\n\r\n    if (*_First == '.') {\r\n        _First = _Parse_precision(_First, _Last, _Callbacks);\r\n        if (_First == _Last) {\r\n            return _First;\r\n        }\r\n    }\r\n\r\n    if (*_First == 'L') {\r\n        _Callbacks._On_localized();\r\n        if (++_First == _Last) {\r\n            return _First;\r\n        }\r\n    }\r\n\r\n    // If there's anything remaining we assume it's a type.\r\n    if (*_First != '}') {\r\n        _Callbacks._On_type(*_First);\r\n        ++_First;\r\n    } else {\r\n        // call the type callback so it gets a default type, this is required\r\n        // since _Specs_checker needs to be able to tell that it got a default type\r\n        // to raise an error for default formatted bools with a sign modifier\r\n        _Callbacks._On_type(static_cast<_CharT>('\\0'));\r\n    }\r\n\r\n    return _First;\r\n}\r\n\r\ntemplate <class _CharT, _Parse_replacement_field_callbacks<_CharT> _HandlerT>\r\n_NODISCARD constexpr const _CharT* _Parse_replacement_field(\r\n    const _CharT* _First, const _CharT* _Last, _HandlerT&& _Handler) {\r\n    ++_First;\r\n    if (_First == _Last) {\r\n        _Throw_format_error(\"Invalid format string.\");\r\n    }\r\n\r\n    if (*_First == '}') {\r\n        // string was \"{}\", and we have a replacement field\r\n        _Handler._On_replacement_field(_Handler._Parse_context.next_arg_id(), _First);\r\n    } else if (*_First == '{') {\r\n        // string was \"{{\", so we have a literal \"{\" to print\r\n        _Handler._On_text(_First, _First + 1);\r\n    } else {\r\n        _Id_adapter<_CharT> _Adapter{_Handler._Parse_context};\r\n        _First = _Parse_arg_id(_First, _Last, _Adapter);\r\n        _CharT _Ch{};\r\n        if (_First != _Last) {\r\n            _Ch = *_First;\r\n        }\r\n\r\n        if (_Ch == '}') {\r\n            _Handler._On_replacement_field(_Adapter._Arg_id, _First);\r\n        } else if (_Ch == ':') {\r\n            _First = _Handler._On_format_specs(_Adapter._Arg_id, _First + 1, _Last);\r\n            if (_First == _Last || *_First != '}') {\r\n                _Throw_format_error(\"Unknown format specifier.\");\r\n            }\r\n        } else {\r\n            _Throw_format_error(\"Missing '}' in format string.\");\r\n        }\r\n    }\r\n\r\n    return _First + 1;\r\n}\r\n\r\ntemplate <class _CharT, _Parse_replacement_field_callbacks<_CharT> _HandlerT>\r\nconstexpr void _Parse_format_string(basic_string_view<_CharT> _Format_str, _HandlerT&& _Handler) {\r\n    auto _First        = _Format_str.data();\r\n    auto _Last         = _First + _Format_str.size();\r\n    const auto& _Codec = _Get_fmt_codec<_CharT>();\r\n\r\n    while (_First != _Last) {\r\n        const _CharT* _OpeningCurl = _First;\r\n        if (*_First != '{') {\r\n            _OpeningCurl = _Codec._Find_encoded(_First, _Last, _CharT{'{'});\r\n\r\n            for (;;) {\r\n                const _CharT* _ClosingCurl = _Codec._Find_encoded(_First, _OpeningCurl, _CharT{'}'});\r\n\r\n                // In this case there are neither closing nor opening curls in [_First, _OpeningCurl)\r\n                // Write the whole thing out.\r\n                if (_ClosingCurl == _OpeningCurl) {\r\n                    _Handler._On_text(_First, _OpeningCurl);\r\n                    break;\r\n                }\r\n                // We know _ClosingCurl isn't past the end because\r\n                // the above condition was not met.\r\n                ++_ClosingCurl;\r\n                if (_ClosingCurl == _OpeningCurl || *_ClosingCurl != '}') {\r\n                    _Throw_format_error(\"Unmatched '}' in format string.\");\r\n                }\r\n                // We found two closing curls, so output only one of them\r\n                _Handler._On_text(_First, _ClosingCurl);\r\n\r\n                // skip over the second closing curl\r\n                _First = _ClosingCurl + 1;\r\n            }\r\n\r\n            // We are done, there were no replacement fields.\r\n            if (_OpeningCurl == _Last) {\r\n                return;\r\n            }\r\n        }\r\n        // Parse the replacement field starting at _OpeningCurl and ending sometime before _Last.\r\n        _First = _Parse_replacement_field(_OpeningCurl, _Last, _Handler);\r\n    }\r\n}\r\n\r\n// Model of _Parse_spec_callbacks that fills a _Basic_format_specs with the parsed data.\r\ntemplate <class _CharT>\r\nclass _Specs_setter {\r\npublic:\r\n    constexpr explicit _Specs_setter(_Basic_format_specs<_CharT>& _Specs_) : _Specs(_Specs_) {}\r\n\r\n    constexpr void _On_align(const _Fmt_align _Aln) {\r\n        _Specs._Alignment = _Aln;\r\n    }\r\n\r\n    constexpr void _On_fill(const basic_string_view<_CharT> _Sv) {\r\n        if (_Sv.size() > _STD size(_Specs._Fill)) {\r\n            _Throw_format_error(\"Invalid fill (too long).\");\r\n        }\r\n\r\n        const auto _Pos = _STD _Copy_unchecked(_Sv._Unchecked_begin(), _Sv._Unchecked_end(), _Specs._Fill);\r\n        _STD fill(_Pos, _STD end(_Specs._Fill), _CharT{});\r\n        _Specs._Fill_length = static_cast<uint8_t>(_Sv.size());\r\n    }\r\n\r\n    constexpr void _On_sign(const _Fmt_sign _Sgn) {\r\n        _Specs._Sgn = _Sgn;\r\n    }\r\n\r\n    constexpr void _On_hash() {\r\n        _Specs._Alt = true;\r\n    }\r\n\r\n    constexpr void _On_zero() {\r\n        _Specs._Leading_zero = true;\r\n    }\r\n\r\n    constexpr void _On_width(const int _Width) {\r\n        _Specs._Width = _Width;\r\n    }\r\n\r\n    constexpr void _On_precision(const int _Precision) {\r\n        _Specs._Precision = _Precision;\r\n    }\r\n\r\n    constexpr void _On_localized() {\r\n        _Specs._Localized = true;\r\n    }\r\n\r\n    constexpr void _On_type(const _CharT _Type) {\r\n        _Specs._Type = static_cast<char>(_Type);\r\n    }\r\n\r\nprotected:\r\n    _Basic_format_specs<_CharT>& _Specs;\r\n};\r\n\r\ntemplate <class _Context>\r\n_NODISCARD constexpr basic_format_arg<_Context> _Get_arg(const _Context& _Ctx, const size_t _Arg_id) {\r\n    // note: while this is parameterized on the _Arg_id type in libfmt we don't\r\n    // need to do that in std::format because it's only called with either an integer\r\n    // id or a named id (which we do not support in std::format)\r\n    auto _Arg = _Ctx.arg(_Arg_id);\r\n    if (!_Arg) {\r\n        _Throw_format_error(\"Argument not found.\");\r\n    }\r\n\r\n    return _Arg;\r\n}\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_signed_or_unsigned_large_integer_t =\r\n    _Is_any_of_v<remove_cv_t<_Ty>, int, unsigned int, long, unsigned long, long long, unsigned long long>;\r\n\r\n// Checks that the type and value of an argument associated with a dynamic\r\n// width specifier are valid.\r\nclass _Width_checker {\r\npublic:\r\n    template <class _Ty>\r\n    _NODISCARD static constexpr unsigned long long operator()(const _Ty _Value) {\r\n        if constexpr (_Is_signed_or_unsigned_large_integer_t<_Ty>) {\r\n            if constexpr (is_signed_v<_Ty>) {\r\n                if (_Value < 0) {\r\n                    _Throw_format_error(\"Negative width.\");\r\n                }\r\n            }\r\n            return static_cast<unsigned long long>(_Value);\r\n        } else {\r\n            _Throw_format_error(\"Width is not an integer.\");\r\n        }\r\n    }\r\n};\r\n\r\n// Checks that the type and value of an argument associated with a dynamic\r\n// precision specifier are valid.\r\nclass _Precision_checker {\r\npublic:\r\n    template <class _Ty>\r\n    _NODISCARD static constexpr unsigned long long operator()(const _Ty _Value) {\r\n        if constexpr (_Is_signed_or_unsigned_large_integer_t<_Ty>) {\r\n            if constexpr (is_signed_v<_Ty>) {\r\n                if (_Value < 0) {\r\n                    _Throw_format_error(\"Negative precision.\");\r\n                }\r\n            }\r\n            return static_cast<unsigned long long>(_Value);\r\n        } else {\r\n            _Throw_format_error(\"Precision is not an integer.\");\r\n        }\r\n    }\r\n};\r\n\r\n// Fetch the value of an argument associated with a dynamic\r\n// width or precision specifier. This will be called with either\r\n// _Width_checker or _Precision_checker as \"_Handler\".\r\ntemplate <class _Handler, class _FormatArg>\r\n_NODISCARD constexpr int _Get_dynamic_specs(const _FormatArg _Arg) {\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_any_of_v<_Handler, _Width_checker, _Precision_checker>);\r\n    const unsigned long long _Val = _STD visit_format_arg(_Handler{}, _Arg);\r\n    if (!_STD in_range<int>(_Val)) {\r\n        _Throw_format_error(\"Number is too big.\");\r\n    }\r\n\r\n    return static_cast<int>(_Val);\r\n}\r\n\r\n// Parses standard format specs into a _Basic_format_specs using _Specs_setter, and\r\n// additionally handles dynamic width and precision. This is separate from _Specs_setter\r\n// because it needs to know about the current basic_format_parse_context and basic_format_context\r\n// in order to fetch the width from the arguments.\r\ntemplate <class _ParseContext, class _Context>\r\nclass _Specs_handler : public _Specs_setter<typename _Context::char_type> {\r\npublic:\r\n    using _CharT = _Context::char_type;\r\n\r\n    constexpr _Specs_handler(_Basic_format_specs<_CharT>& _Specs_, _ParseContext& _Parse_ctx_, _Context& _Ctx_)\r\n        : _Specs_setter<_CharT>(_Specs_), _Parse_ctx(_Parse_ctx_), _Ctx(_Ctx_) {}\r\n\r\n    template <class _Id>\r\n    constexpr void _On_dynamic_width(const _Id _Arg_id) {\r\n        this->_Specs._Width = _Get_dynamic_specs<_Width_checker>(_Get_arg(_Arg_id));\r\n    }\r\n\r\n    template <class _Id>\r\n    constexpr void _On_dynamic_precision(const _Id _Arg_id) {\r\n        this->_Specs._Precision = _Get_dynamic_specs<_Precision_checker>(_Get_arg(_Arg_id));\r\n    }\r\n\r\nprivate:\r\n    _ParseContext& _Parse_ctx;\r\n    _Context& _Ctx;\r\n\r\n    _NODISCARD constexpr basic_format_arg<_Context> _Get_arg(_Auto_id_tag) {\r\n        return _STD _Get_arg(_Ctx, _Parse_ctx.next_arg_id());\r\n    }\r\n\r\n    _NODISCARD constexpr basic_format_arg<_Context> _Get_arg(const size_t _Arg_id) {\r\n        _Parse_ctx.check_arg_id(_Arg_id);\r\n        return _STD _Get_arg(_Ctx, _Arg_id);\r\n    }\r\n};\r\n\r\ntemplate <class _ParseContext>\r\nclass _Dynamic_specs_handler : public _Specs_setter<typename _ParseContext::char_type> {\r\npublic:\r\n    using _CharT = _ParseContext::char_type;\r\n\r\n    constexpr _Dynamic_specs_handler(_Dynamic_format_specs<_CharT>& _Specs_, _ParseContext& _Parse_ctx_)\r\n        : _Specs_setter<_CharT>(_Specs_), _Dynamic_specs(_Specs_), _Parse_ctx(_Parse_ctx_) {}\r\n\r\n    constexpr void _On_dynamic_width(const size_t _Arg_id) {\r\n        _Parse_ctx.check_arg_id(_Arg_id);\r\n        _Parse_ctx._Check_dynamic_spec_integral(_Arg_id);\r\n        _Dynamic_specs._Dynamic_width_index = _Verify_dynamic_arg_index_in_range(_Arg_id);\r\n    }\r\n\r\n    constexpr void _On_dynamic_width(_Auto_id_tag) {\r\n        const size_t _Arg_id = _Parse_ctx.next_arg_id();\r\n        _Parse_ctx._Check_dynamic_spec_integral(_Arg_id);\r\n        _Dynamic_specs._Dynamic_width_index = _Verify_dynamic_arg_index_in_range(_Arg_id);\r\n    }\r\n\r\n    constexpr void _On_dynamic_precision(const size_t _Arg_id) {\r\n        _Parse_ctx.check_arg_id(_Arg_id);\r\n        _Parse_ctx._Check_dynamic_spec_integral(_Arg_id);\r\n        _Dynamic_specs._Dynamic_precision_index = _Verify_dynamic_arg_index_in_range(_Arg_id);\r\n    }\r\n\r\n    constexpr void _On_dynamic_precision(_Auto_id_tag) {\r\n        const size_t _Arg_id = _Parse_ctx.next_arg_id();\r\n        _Parse_ctx._Check_dynamic_spec_integral(_Arg_id);\r\n        _Dynamic_specs._Dynamic_precision_index = _Verify_dynamic_arg_index_in_range(_Arg_id);\r\n    }\r\n\r\nprivate:\r\n    _Dynamic_format_specs<_CharT>& _Dynamic_specs;\r\n    _ParseContext& _Parse_ctx;\r\n\r\n    _NODISCARD static constexpr int _Verify_dynamic_arg_index_in_range(const size_t _Idx) {\r\n        if (!_STD in_range<int>(_Idx)) {\r\n            _Throw_format_error(\"Dynamic width or precision index too large.\");\r\n        }\r\n\r\n        return static_cast<int>(_Idx);\r\n    }\r\n};\r\n\r\n// Checks that the type of the argument printed by a replacement\r\n// field with format specs actually satisfies the requirements for\r\n// that format spec. If the requirements are met then calls the base class\r\n// handler method.\r\ntemplate <class _Handler>\r\nclass _Specs_checker : public _Handler {\r\nprivate:\r\n    _Basic_format_arg_type _Arg_type;\r\n\r\n    // Set for the hash and sign modifiers.\r\n    bool _Need_arithmetic_presentation_type = false;\r\n\r\n    // Set for the zero modifier.\r\n    bool _Need_arithmetic_or_pointer_presentation_type = false;\r\n\r\npublic:\r\n    constexpr explicit _Specs_checker(const _Handler& _Handler_inst, const _Basic_format_arg_type _Arg_type_)\r\n        : _Handler(_Handler_inst), _Arg_type(_Arg_type_) {}\r\n\r\n    constexpr void _Require_numeric_argument() const {\r\n        if (!_Is_arithmetic_fmt_type(_Arg_type)) {\r\n            _Throw_format_error(\"Format specifier requires numeric argument.\");\r\n        }\r\n    }\r\n\r\n    constexpr void _Require_numeric_or_pointer_argument() const {\r\n        if (!_Is_arithmetic_fmt_type(_Arg_type) && _Arg_type != _Basic_format_arg_type::_Pointer_type) {\r\n            _Throw_format_error(\"Format specifier requires numeric or pointer argument.\");\r\n        }\r\n    }\r\n\r\n    constexpr void _Check_precision() const {\r\n        if (_Is_integral_fmt_type(_Arg_type) || _Arg_type == _Basic_format_arg_type::_Pointer_type) {\r\n            _Throw_format_error(\"Precision not allowed for this argument type.\");\r\n        }\r\n    }\r\n\r\n    // _On_align has no checking, since we don't implement numeric alignments.\r\n\r\n    constexpr void _On_localized() {\r\n        _Require_numeric_argument();\r\n        _Handler::_On_localized();\r\n    }\r\n\r\n    constexpr void _On_hash() {\r\n        _Need_arithmetic_presentation_type = true;\r\n        _Require_numeric_argument();\r\n        _Handler::_On_hash();\r\n    }\r\n\r\n    constexpr void _On_sign(_Fmt_sign _Sgn) {\r\n        _Need_arithmetic_presentation_type = true;\r\n        _Require_numeric_argument();\r\n        _Handler::_On_sign(_Sgn);\r\n    }\r\n\r\n    constexpr void _On_zero() {\r\n        _Need_arithmetic_or_pointer_presentation_type = true;\r\n        _Require_numeric_or_pointer_argument();\r\n        _Handler::_On_zero();\r\n    }\r\n\r\n    constexpr void _On_precision(int _Precision) {\r\n        _Check_precision();\r\n        _Handler::_On_precision(_Precision);\r\n    }\r\n\r\n    template <class _Ty>\r\n    constexpr void _On_dynamic_precision(const _Ty _Val) {\r\n        _Check_precision();\r\n        _Handler::_On_dynamic_precision(_Val);\r\n    }\r\n\r\n    template <class _CharT>\r\n    constexpr void _On_type(_CharT _Type) {\r\n        if (_Type < 0 || _Type > _STD _Max_limit<signed char>()) {\r\n            _Throw_format_error(\"Invalid type specification.\");\r\n        }\r\n        const char _Narrow_type = static_cast<char>(_Type);\r\n        enum class _Presentation_type_category {\r\n            _Default,\r\n            _Integer,\r\n            _Floating,\r\n            _String,\r\n            _Pointer,\r\n            _Char,\r\n#if _HAS_CXX23\r\n            _Escape,\r\n#endif // _HAS_CXX23\r\n        };\r\n        auto _Cat = _Presentation_type_category::_Default;\r\n        switch (_Narrow_type) {\r\n        case '\\0':\r\n            break;\r\n#if _HAS_CXX23\r\n        case '?':\r\n            _Cat = _Presentation_type_category::_Escape;\r\n            break;\r\n#endif // _HAS_CXX23\r\n        case 's':\r\n            _Cat = _Presentation_type_category::_String;\r\n            break;\r\n        case 'c':\r\n            _Cat = _Presentation_type_category::_Char;\r\n            break;\r\n        case 'd':\r\n        case 'B':\r\n        case 'b':\r\n        case 'X':\r\n        case 'x':\r\n        case 'o':\r\n            _Cat = _Presentation_type_category::_Integer;\r\n            break;\r\n        case 'A':\r\n        case 'a':\r\n        case 'E':\r\n        case 'e':\r\n        case 'F':\r\n        case 'f':\r\n        case 'G':\r\n        case 'g':\r\n            _Cat = _Presentation_type_category::_Floating;\r\n            break;\r\n        case 'p':\r\n        case 'P':\r\n            _Cat = _Presentation_type_category::_Pointer;\r\n            break;\r\n        default:\r\n            _Throw_format_error(\"Invalid presentation type specifier\");\r\n        }\r\n\r\n        switch (_Arg_type) {\r\n        case _Basic_format_arg_type::_None:\r\n            _STL_INTERNAL_CHECK(!\"Invalid argument type.\");\r\n            break;\r\n        case _Basic_format_arg_type::_Bool_type:\r\n            if (_Cat == _Presentation_type_category::_Default) {\r\n                _Cat = _Presentation_type_category::_String;\r\n            }\r\n            // note, we don't get a call if there isn't a type, but none is valid for everything.\r\n            if (_Cat != _Presentation_type_category::_String && _Cat != _Presentation_type_category::_Integer) {\r\n                _Throw_format_error(\"Invalid presentation type for bool\");\r\n            }\r\n            break;\r\n        case _Basic_format_arg_type::_Char_type:\r\n            if (_Cat == _Presentation_type_category::_Default) {\r\n                _Cat = _Presentation_type_category::_Char;\r\n            }\r\n\r\n            if (_Cat != _Presentation_type_category::_Char && _Cat != _Presentation_type_category::_Integer\r\n#if _HAS_CXX23\r\n                && _Cat != _Presentation_type_category::_Escape\r\n#endif // _HAS_CXX23\r\n            ) {\r\n                if constexpr (is_same_v<_CharT, char>) {\r\n                    _Throw_format_error(\"Invalid presentation type for char\");\r\n                } else {\r\n                    _Throw_format_error(\"Invalid presentation type for wchar_t\");\r\n                }\r\n            }\r\n            break;\r\n        case _Basic_format_arg_type::_Int_type:\r\n        case _Basic_format_arg_type::_UInt_type:\r\n        case _Basic_format_arg_type::_Long_long_type:\r\n        case _Basic_format_arg_type::_ULong_long_type:\r\n            if (_Cat == _Presentation_type_category::_Default) {\r\n                _Cat = _Presentation_type_category::_Integer;\r\n            }\r\n\r\n            if (_Cat != _Presentation_type_category::_Integer && _Cat != _Presentation_type_category::_Char) {\r\n                _Throw_format_error(\"Invalid presentation type for integer\");\r\n            }\r\n            break;\r\n        case _Basic_format_arg_type::_Float_type:\r\n        case _Basic_format_arg_type::_Double_type:\r\n        case _Basic_format_arg_type::_Long_double_type:\r\n            if (_Cat == _Presentation_type_category::_Default) {\r\n                _Cat = _Presentation_type_category::_Floating;\r\n            }\r\n\r\n            if (_Cat != _Presentation_type_category::_Floating) {\r\n                _Throw_format_error(\"Invalid presentation type for floating-point\");\r\n            }\r\n            break;\r\n        case _Basic_format_arg_type::_CString_type:\r\n        case _Basic_format_arg_type::_String_type:\r\n            if (_Cat == _Presentation_type_category::_Default) {\r\n                _Cat = _Presentation_type_category::_String;\r\n            }\r\n\r\n            if (_Cat != _Presentation_type_category::_String\r\n#if _HAS_CXX23\r\n                && _Cat != _Presentation_type_category::_Escape\r\n#endif // _HAS_CXX23\r\n            ) {\r\n                _Throw_format_error(\"Invalid presentation type for string\");\r\n            }\r\n            break;\r\n        case _Basic_format_arg_type::_Pointer_type:\r\n            if (_Cat == _Presentation_type_category::_Default) {\r\n                _Cat = _Presentation_type_category::_Pointer;\r\n            }\r\n\r\n            if (_Cat != _Presentation_type_category::_Pointer) {\r\n                _Throw_format_error(\"Invalid presentation type for pointer\");\r\n            }\r\n            break;\r\n        case _Basic_format_arg_type::_Custom_type:\r\n            // there's no checking we can do here for custom types\r\n            // (however if a custom type uses a standard formatter\r\n            // to do its spec parsing it should get the above checks)\r\n            break;\r\n        }\r\n\r\n        if (_Need_arithmetic_presentation_type && _Cat != _Presentation_type_category::_Integer\r\n            && _Cat != _Presentation_type_category::_Floating) {\r\n            // N4971 [format.string.std]/5: \"The sign option is only valid for arithmetic types\r\n            // other than charT and bool or when an integer presentation type is specified.\"\r\n            // N4971 [format.string.std]/7: \"The # option [...] is valid for arithmetic types\r\n            // other than charT and bool or when an integer presentation type is specified, and not otherwise.\"\r\n            _Throw_format_error(\"Hash/sign modifier requires an arithmetic presentation type\");\r\n        }\r\n\r\n        if (_Need_arithmetic_or_pointer_presentation_type && _Cat != _Presentation_type_category::_Integer\r\n            && _Cat != _Presentation_type_category::_Floating && _Cat != _Presentation_type_category::_Pointer) {\r\n            // N4971 [format.string.std]/8: \"The 0 option is valid for arithmetic types\r\n            // other than charT and bool, pointer types, or when an integer presentation type is specified.\"\r\n            _Throw_format_error(\"Zero modifier requires an arithmetic or pointer presentation type\");\r\n        }\r\n        _Handler::_On_type(_Type);\r\n    }\r\n};\r\n\r\nclass _Fmt_fixed_buffer_traits {\r\nprivate:\r\n    ptrdiff_t _Count_ = 0;\r\n    ptrdiff_t _Limit_;\r\n\r\npublic:\r\n    explicit _Fmt_fixed_buffer_traits(const ptrdiff_t _Limit) noexcept : _Limit_(_Limit) {}\r\n\r\n    _NODISCARD size_t _Count() const noexcept {\r\n        return static_cast<size_t>(_Count_);\r\n    }\r\n\r\n    _NODISCARD size_t _Limit(const size_t _Size) noexcept {\r\n        size_t _Avail = static_cast<size_t>(_Limit_ > _Count_ ? _Limit_ - _Count_ : 0);\r\n        _Count_ += _Size;\r\n        return _Size < _Avail ? _Size : _Avail;\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nclass _Fmt_counting_buffer final : public _Fmt_buffer<_Ty> {\r\nprivate:\r\n    _Ty _Data[_Fmt_buffer_size];\r\n    size_t _Count_ = 0;\r\n\r\n    void _Grow(size_t) final {\r\n        if (this->_Size() != _Fmt_buffer_size) {\r\n            return;\r\n        }\r\n        _Count_ += this->_Size();\r\n        this->_Clear();\r\n    }\r\n\r\npublic:\r\n    _Fmt_counting_buffer() : _Fmt_buffer<_Ty>(_Data, 0, _Fmt_buffer_size) {}\r\n\r\n    _NODISCARD size_t _Count() const noexcept {\r\n        return _Count_ + this->_Size();\r\n    }\r\n};\r\n\r\ntemplate <class _CharT>\r\nusing _Basic_fmt_it = back_insert_iterator<_Fmt_buffer<_CharT>>;\r\n\r\nusing _Fmt_it  = _Basic_fmt_it<char>;\r\nusing _Fmt_wit = _Basic_fmt_it<wchar_t>;\r\n\r\ntemplate <class _CharT>\r\nusing _Default_format_context = basic_format_context<_Basic_fmt_it<_CharT>, _CharT>;\r\n\r\n_EXPORT_STD using format_context  = _Default_format_context<char>;\r\n_EXPORT_STD using wformat_context = _Default_format_context<wchar_t>;\r\n\r\n_FMT_P2286_BEGIN\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, monostate) {\r\n    _STL_INTERNAL_CHECK(false);\r\n    return _Out;\r\n}\r\n\r\n// This size is derived from the maximum length of an arithmetic type. The contenders for widest are:\r\n// (a) long long has a max length of 20 characters: LLONG_MIN is \"-9223372036854775807\".\r\n// (b) unsigned long long has a max length of 20 characters: ULLONG_MAX is \"18446744073709551615\".\r\n// (c) double has a max length of 24 characters: -DBL_MAX is \"-1.7976931348623158e+308\".\r\n// That's 17 characters for numeric_limits<double>::max_digits10,\r\n// plus 1 character for the sign,\r\n// plus 1 character for the decimal point,\r\n// plus 1 character for 'e',\r\n// plus 1 character for the exponent's sign,\r\n// plus 3 characters for the max exponent.\r\ninline constexpr size_t _Format_min_buffer_length = 24;\r\n\r\ntemplate <class _CharT, class _OutputIt, class _Arithmetic>\r\n    requires (is_arithmetic_v<_Arithmetic> && !_CharT_or_bool<_Arithmetic, _CharT>)\r\n_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, _Arithmetic _Value);\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, bool _Value);\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, _CharT _Value);\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, const void* _Value);\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, const _CharT* _Value);\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, basic_string_view<_CharT> _Value);\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Widen_and_copy(const char* _First, const char* const _Last, _OutputIt _Out) {\r\n    for (; _First != _Last; ++_First, (void) ++_Out) {\r\n        *_Out = static_cast<_CharT>(*_First);\r\n    }\r\n\r\n    return _Out;\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt, class _Arithmetic>\r\n    requires (is_arithmetic_v<_Arithmetic> && !_CharT_or_bool<_Arithmetic, _CharT>)\r\n_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, const _Arithmetic _Value) {\r\n    // TRANSITION, Reusable buffer\r\n    char _Buffer[_Format_min_buffer_length];\r\n    char* _End = _Buffer;\r\n\r\n    if constexpr (is_floating_point_v<_Arithmetic>) {\r\n        if ((_STD isnan) (_Value)) {\r\n            if ((_STD signbit) (_Value)) {\r\n                *_End++ = '-';\r\n            }\r\n\r\n            _CSTD memcpy(_End, \"nan\", 3);\r\n            _End += 3;\r\n        }\r\n    }\r\n\r\n    if (_End == _Buffer) {\r\n        const to_chars_result _Result = _STD to_chars(_Buffer, _STD end(_Buffer), _Value);\r\n        _STL_INTERNAL_CHECK(_Result.ec == errc{});\r\n        _End = _Result.ptr;\r\n    }\r\n\r\n    return _Widen_and_copy<_CharT>(_Buffer, _End, _STD move(_Out));\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, const bool _Value) {\r\n    if constexpr (is_same_v<_CharT, wchar_t>) {\r\n        return _Fmt_write(_STD move(_Out), _Value ? L\"true\" : L\"false\");\r\n    } else {\r\n        return _Fmt_write(_STD move(_Out), _Value ? \"true\" : \"false\");\r\n    }\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, const _CharT _Value) {\r\n    *_Out++ = _Value;\r\n    return _Out;\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, const void* const _Value) {\r\n    // TRANSITION, Reusable buffer\r\n    char _Buffer[_Format_min_buffer_length];\r\n    const auto [_End, _Ec] = _STD to_chars(_Buffer, _STD end(_Buffer), reinterpret_cast<uintptr_t>(_Value), 16);\r\n    _STL_INTERNAL_CHECK(_Ec == errc{});\r\n    *_Out++ = '0';\r\n    *_Out++ = 'x';\r\n    return _Widen_and_copy<_CharT>(_Buffer, _End, _STD move(_Out));\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, const _CharT* _Value) {\r\n    if (!_Value) {\r\n        _Throw_format_error(\"String pointer is null.\");\r\n    }\r\n\r\n    while (*_Value) {\r\n        *_Out++ = *_Value++;\r\n    }\r\n\r\n    return _Out;\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, const basic_string_view<_CharT> _Value) {\r\n    return _RANGES copy(_Value, _STD move(_Out)).out;\r\n}\r\n\r\ntemplate <class _OutputIt, class _Specs_type, class _Func>\r\n_NODISCARD _OutputIt _Write_aligned(\r\n    _OutputIt _Out, const int _Width, const _Specs_type& _Specs, const _Fmt_align _Default_align, _Func&& _Fn) {\r\n    int _Fill_left  = 0;\r\n    int _Fill_right = 0;\r\n    auto _Alignment = _Specs._Alignment;\r\n\r\n    if (_Alignment == _Fmt_align::_None) {\r\n        _Alignment = _Default_align;\r\n    }\r\n\r\n    if (_Width < _Specs._Width) {\r\n        switch (_Alignment) {\r\n        case _Fmt_align::_Left:\r\n            _Fill_right = _Specs._Width - _Width;\r\n            break;\r\n        case _Fmt_align::_Right:\r\n            _Fill_left = _Specs._Width - _Width;\r\n            break;\r\n        case _Fmt_align::_Center:\r\n            _Fill_left  = (_Specs._Width - _Width) / 2;\r\n            _Fill_right = _Specs._Width - _Width - _Fill_left;\r\n            break;\r\n        case _Fmt_align::_None:\r\n            _STL_ASSERT(false, \"Invalid alignment\");\r\n            break;\r\n        }\r\n    }\r\n\r\n    const basic_string_view _Fill_char{_Specs._Fill, _Specs._Fill_length};\r\n    for (; _Fill_left > 0; --_Fill_left) {\r\n        _Out = _RANGES copy(_Fill_char, _STD move(_Out)).out;\r\n    }\r\n\r\n    _Out = _Fn(_STD move(_Out));\r\n\r\n    for (; _Fill_right > 0; --_Fill_right) {\r\n        _Out = _RANGES copy(_Fill_char, _STD move(_Out)).out;\r\n    }\r\n\r\n    return _Out;\r\n}\r\n\r\ntemplate <integral _Integral>\r\n_NODISCARD constexpr string_view _Get_integral_prefix(const char _Type, const _Integral _Value) noexcept {\r\n    switch (_Type) {\r\n    case 'b':\r\n        return \"0b\"sv;\r\n    case 'B':\r\n        return \"0B\"sv;\r\n    case 'x':\r\n        return \"0x\"sv;\r\n    case 'X':\r\n        return \"0X\"sv;\r\n    case 'o':\r\n        if (_Value != _Integral{0}) {\r\n            return \"0\"sv;\r\n        }\r\n        return {};\r\n    default:\r\n        return {};\r\n    }\r\n}\r\n\r\ntemplate <class _OutputIt>\r\n_NODISCARD _OutputIt _Write_sign(_OutputIt _Out, const _Fmt_sign _Sgn, const bool _Is_negative) {\r\n    if (_Is_negative) {\r\n        *_Out++ = '-';\r\n    } else {\r\n        switch (_Sgn) {\r\n        case _Fmt_sign::_Plus:\r\n            *_Out++ = '+';\r\n            break;\r\n        case _Fmt_sign::_Space:\r\n            *_Out++ = ' ';\r\n            break;\r\n        case _Fmt_sign::_None:\r\n        case _Fmt_sign::_Minus:\r\n            break;\r\n        }\r\n    }\r\n    return _Out;\r\n}\r\n\r\ninline void _Buffer_to_uppercase(char* _First, const char* _Last) noexcept {\r\n    for (; _First != _Last; ++_First) {\r\n        if (*_First >= 'a' && *_First <= 'z') {\r\n            *_First -= 'a' - 'A';\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\nusing _Make_standard_integer = conditional_t<is_signed_v<_Ty>, make_signed_t<_Ty>, make_unsigned_t<_Ty>>;\r\n\r\ntemplate <class _CharT, integral _Ty>\r\n_NODISCARD constexpr bool _In_bounds(const _Ty _Value) {\r\n    return _STD in_range<_Make_standard_integer<_CharT>>(static_cast<_Make_standard_integer<_Ty>>(_Value));\r\n}\r\n\r\n_NODISCARD inline int _Count_separators(size_t _Digits, const string_view _Groups) {\r\n    if (_Groups.empty()) {\r\n        return 0;\r\n    }\r\n\r\n    // Calculate the amount of separators that are going to be inserted based on the groupings of the locale.\r\n    int _Separators = 0;\r\n    auto _Group_it  = _Groups.begin();\r\n    while (_Digits > static_cast<size_t>(*_Group_it)) {\r\n        _Digits -= static_cast<size_t>(*_Group_it);\r\n        ++_Separators;\r\n        if (_Group_it + 1 != _Groups.end()) {\r\n            ++_Group_it;\r\n        }\r\n    }\r\n\r\n    return _Separators;\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Write_separated_integer(const char* _First, const char* const _Last, const string_view _Groups,\r\n    const _CharT _Separator, int _Separators, _OutputIt _Out) {\r\n    auto _Group_it = _Groups.begin();\r\n    auto _Repeats  = 0;\r\n    auto _Grouped  = 0;\r\n\r\n    for (int _Section = 0; _Section < _Separators; ++_Section) {\r\n        _Grouped += *_Group_it;\r\n        if (_Group_it + 1 != _Groups.end()) {\r\n            ++_Group_it;\r\n        } else {\r\n            ++_Repeats;\r\n        }\r\n    }\r\n    _Out   = _Widen_and_copy<_CharT>(_First, _Last - _Grouped, _STD move(_Out));\r\n    _First = _Last - _Grouped;\r\n\r\n    for (; _Separators > 0; --_Separators) {\r\n        if (_Repeats > 0) {\r\n            --_Repeats;\r\n        } else {\r\n            --_Group_it;\r\n        }\r\n\r\n        *_Out++ = _Separator;\r\n        _Out    = _Widen_and_copy<_CharT>(_First, _First + *_Group_it, _STD move(_Out));\r\n        _First += *_Group_it;\r\n    }\r\n    _STL_INTERNAL_CHECK(_First == _Last);\r\n    return _Out;\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, monostate, const _Basic_format_specs<_CharT>&, _Lazy_locale) {\r\n    _STL_INTERNAL_CHECK(false);\r\n    return _Out;\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt, integral _Integral>\r\n_NODISCARD _OutputIt _Write_integral(\r\n    _OutputIt _Out, _Integral _Value, _Basic_format_specs<_CharT> _Specs, _Lazy_locale _Locale);\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Write_escaped(\r\n    _OutputIt _Out, basic_string_view<_CharT> _Value, _Basic_format_specs<_CharT> _Specs, char _Delim);\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _CharT, class _OutputIt, integral _Integral>\r\n    requires (!_CharT_or_bool<_Integral, _CharT>)\r\n_NODISCARD _OutputIt _Fmt_write(\r\n    _OutputIt _Out, _Integral _Value, const _Basic_format_specs<_CharT>& _Specs, _Lazy_locale _Locale);\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, bool _Value, _Basic_format_specs<_CharT> _Specs, _Lazy_locale _Locale);\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(\r\n    _OutputIt _Out, _CharT _Value, _Basic_format_specs<_CharT> _Specs, _Lazy_locale _Locale);\r\n\r\ntemplate <class _CharT, class _OutputIt, floating_point _Float>\r\n_NODISCARD _OutputIt _Fmt_write(\r\n    _OutputIt _Out, _Float _Value, const _Basic_format_specs<_CharT>& _Specs, _Lazy_locale _Locale);\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(\r\n    _OutputIt _Out, const void* _Value, const _Basic_format_specs<_CharT>& _Specs, _Lazy_locale);\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(\r\n    _OutputIt _Out, const _CharT* _Value, const _Basic_format_specs<_CharT>& _Specs, _Lazy_locale _Locale);\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(\r\n    _OutputIt _Out, basic_string_view<_CharT> _Value, const _Basic_format_specs<_CharT>& _Specs, _Lazy_locale);\r\n\r\ntemplate <class _CharT, class _OutputIt, integral _Integral>\r\n_NODISCARD _OutputIt _Write_integral(\r\n    _OutputIt _Out, const _Integral _Value, _Basic_format_specs<_CharT> _Specs, _Lazy_locale _Locale) {\r\n    if (_Specs._Type == 'c') {\r\n        if (!_In_bounds<_CharT>(_Value)) {\r\n            if constexpr (is_same_v<_CharT, char>) {\r\n                _Throw_format_error(\"integral cannot be stored in char\");\r\n            } else {\r\n                _Throw_format_error(\"integral cannot be stored in wchar_t\");\r\n            }\r\n        }\r\n        _Specs._Alt = false;\r\n        return _Fmt_write(_STD move(_Out), static_cast<_CharT>(_Value), _Specs, _Locale);\r\n    }\r\n\r\n    _STL_INTERNAL_CHECK(_Specs._Precision == -1);\r\n\r\n    if (_Specs._Sgn == _Fmt_sign::_None) {\r\n        _Specs._Sgn = _Fmt_sign::_Minus;\r\n    }\r\n\r\n    int _Base = 10;\r\n\r\n    switch (_Specs._Type) {\r\n    case 'B':\r\n    case 'b':\r\n        _Base = 2;\r\n        break;\r\n    case 'X':\r\n    case 'x':\r\n        _Base = 16;\r\n        break;\r\n    case 'o':\r\n        _Base = 8;\r\n        break;\r\n    default:\r\n        break;\r\n    }\r\n\r\n    // long long -1 representation in binary is 64 bits + sign\r\n    char _Buffer[65];\r\n    const auto [_End, _Ec] = _STD to_chars(_Buffer, _STD end(_Buffer), _Value, _Base);\r\n    _STL_INTERNAL_CHECK(_Ec == errc{});\r\n\r\n    auto _Buffer_start = _Buffer;\r\n    auto _Width        = static_cast<int>(_End - _Buffer_start);\r\n\r\n    bool _Negative = false;\r\n    if constexpr (signed_integral<_Integral>) {\r\n        _Negative = _Value < _Integral{0};\r\n    }\r\n\r\n    if (_Negative) {\r\n        // Remove the '-', it will be dealt with directly\r\n        _Buffer_start += 1;\r\n    } else if (_Specs._Sgn != _Fmt_sign::_Minus) {\r\n        _Width += 1;\r\n    }\r\n\r\n    if (_Specs._Type == 'X') {\r\n        _Buffer_to_uppercase(_Buffer_start, _End);\r\n    }\r\n\r\n    string_view _Prefix;\r\n    if (_Specs._Alt) {\r\n        _Prefix = _Get_integral_prefix(_Specs._Type, _Value);\r\n        _Width += static_cast<int>(_Prefix.size());\r\n    }\r\n\r\n    auto _Separators = 0;\r\n    string _Groups;\r\n    if (_Specs._Localized) {\r\n        _Groups     = _STD use_facet<numpunct<_CharT>>(_Locale._Get()).grouping();\r\n        _Separators = _Count_separators(static_cast<size_t>(_End - _Buffer_start), _Groups);\r\n        // TRANSITION, separators may be wider for wide chars\r\n        _Width += _Separators;\r\n    }\r\n\r\n    const bool _Write_leading_zeroes = _Specs._Leading_zero && _Specs._Alignment == _Fmt_align::_None;\r\n    auto _Writer                     = [&, _End = _End](_OutputIt _Out) {\r\n        if constexpr (signed_integral<_Integral>) {\r\n            _Out = _Write_sign(_STD move(_Out), _Specs._Sgn, _Value < _Integral{0});\r\n        } else {\r\n            _Out = _Write_sign(_STD move(_Out), _Specs._Sgn, false);\r\n        }\r\n        _Out = _Widen_and_copy<_CharT>(_Prefix.data(), _Prefix.data() + _Prefix.size(), _STD move(_Out));\r\n        if (_Write_leading_zeroes && _Width < _Specs._Width) {\r\n            _Out = _RANGES fill_n(_STD move(_Out), _Specs._Width - _Width, _CharT{'0'});\r\n        }\r\n\r\n        if (_Separators > 0) {\r\n            return _Write_separated_integer(_Buffer_start, _End, _Groups,\r\n                                    _STD use_facet<numpunct<_CharT>>(_Locale._Get()).thousands_sep(), //\r\n                                    _Separators, _STD move(_Out));\r\n        }\r\n        return _Widen_and_copy<_CharT>(_Buffer_start, _End, _STD move(_Out));\r\n    };\r\n\r\n    if (_Write_leading_zeroes) {\r\n        return _Writer(_STD move(_Out));\r\n    }\r\n\r\n    return _Write_aligned(_STD move(_Out), _Width, _Specs, _Fmt_align::_Right, _Writer);\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt, integral _Integral>\r\n    requires (!_CharT_or_bool<_Integral, _CharT>)\r\n_NODISCARD _OutputIt _Fmt_write(\r\n    _OutputIt _Out, const _Integral _Value, const _Basic_format_specs<_CharT>& _Specs, _Lazy_locale _Locale) {\r\n    return _Write_integral(_STD move(_Out), _Value, _Specs, _Locale);\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(\r\n    _OutputIt _Out, const bool _Value, _Basic_format_specs<_CharT> _Specs, _Lazy_locale _Locale) {\r\n    if (_Specs._Type != '\\0' && _Specs._Type != 's') {\r\n        return _Write_integral(_STD move(_Out), static_cast<unsigned char>(_Value), _Specs, _Locale);\r\n    }\r\n\r\n    _STL_INTERNAL_CHECK(_Specs._Precision == -1);\r\n\r\n    if (_Specs._Localized) {\r\n        _Specs._Localized  = false;\r\n        const auto& _Facet = _STD use_facet<numpunct<_CharT>>(_Locale._Get());\r\n        return _Fmt_write(_STD move(_Out),\r\n            _Value ? static_cast<basic_string_view<_CharT>>(_Facet.truename())\r\n                   : static_cast<basic_string_view<_CharT>>(_Facet.falsename()),\r\n            _Specs, _Locale);\r\n    }\r\n\r\n    if constexpr (is_same_v<_CharT, wchar_t>) {\r\n        return _Fmt_write(_STD move(_Out), _Value ? L\"true\" : L\"false\", _Specs, _Locale);\r\n    } else {\r\n        return _Fmt_write(_STD move(_Out), _Value ? \"true\" : \"false\", _Specs, _Locale);\r\n    }\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(\r\n    _OutputIt _Out, const _CharT _Value, _Basic_format_specs<_CharT> _Specs, _Lazy_locale _Locale) {\r\n    if (_Specs._Type != '\\0' && _Specs._Type != 'c'\r\n#if _HAS_CXX23\r\n        && _Specs._Type != '?'\r\n#endif // _HAS_CXX23\r\n    ) {\r\n        return _Write_integral(_STD move(_Out), static_cast<make_unsigned_t<_CharT>>(_Value), _Specs, _Locale);\r\n    }\r\n\r\n    _STL_INTERNAL_CHECK(_Specs._Precision == -1);\r\n\r\n#if _HAS_CXX23\r\n    if (_Specs._Type == '?') {\r\n        return _Write_escaped(_STD move(_Out), basic_string_view<_CharT>{&_Value, 1}, _Specs, '\\'');\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    return _Fmt_write(_STD move(_Out), basic_string_view<_CharT>{&_Value, 1}, _Specs, _Locale);\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt, floating_point _Float>\r\n_NODISCARD _OutputIt _Fmt_write(\r\n    _OutputIt _Out, const _Float _Value, const _Basic_format_specs<_CharT>& _Specs, _Lazy_locale _Locale) {\r\n    auto _Sgn = _Specs._Sgn;\r\n    if (_Sgn == _Fmt_sign::_None) {\r\n        _Sgn = _Fmt_sign::_Minus;\r\n    }\r\n\r\n    auto _To_upper  = false;\r\n    auto _Format    = chars_format::general;\r\n    auto _Exponent  = 'e';\r\n    auto _Precision = _Specs._Precision;\r\n    auto _None_type = false;\r\n\r\n    switch (_Specs._Type) {\r\n    case 'A':\r\n        _To_upper = true;\r\n        [[fallthrough]];\r\n    case 'a':\r\n        _Format   = chars_format::hex;\r\n        _Exponent = 'p';\r\n        break;\r\n    case 'E':\r\n        _To_upper = true;\r\n        [[fallthrough]];\r\n    case 'e':\r\n        if (_Precision == -1) {\r\n            _Precision = 6;\r\n        }\r\n        _Format = chars_format::scientific;\r\n        break;\r\n    case 'F':\r\n        _To_upper = true;\r\n        [[fallthrough]];\r\n    case 'f':\r\n        if (_Precision == -1) {\r\n            _Precision = 6;\r\n        }\r\n        _Format = chars_format::fixed;\r\n        break;\r\n    case 'G':\r\n        _To_upper = true;\r\n        [[fallthrough]];\r\n    case 'g':\r\n        if (_Precision == -1) {\r\n            _Precision = 6;\r\n        } else if (_Precision == 0) {\r\n            _Precision = 1;\r\n        }\r\n        _Format = chars_format::general;\r\n        break;\r\n    default:\r\n        _None_type = true;\r\n        break;\r\n    }\r\n\r\n    // Consider the powers of 2 in decimal:\r\n    // 2^-1 = 0.5\r\n    // 2^-2 = 0.25\r\n    // 2^-3 = 0.125\r\n    // 2^-4 = 0.0625\r\n    // Each power of 2 consumes one more decimal digit. This is because:\r\n    // 2^-N * 5^-N = 10^-N\r\n    // 2^-N = 10^-N * 5^N\r\n    // Example: 2^-4 = 10^-4 * 5^4 = 0.0001 * 625\r\n    // Therefore, the min subnormal 2^-1074 consumes 1074 digits of precision (digits after the decimal point).\r\n    // We need 3 more characters for a potential negative sign, the zero integer part, and the decimal point.\r\n    // Therefore, the precision can be clamped to 1074.\r\n    // The largest number consumes 309 digits before the decimal point. With a precision of 1074, and it being\r\n    // negative, it would use a buffer of size 1074+309+2. We need to add an additional number to the max\r\n    // exponent to accommodate the ones place.\r\n    constexpr auto _Max_precision = 1074;\r\n    constexpr auto _Buffer_size   = _Max_precision + DBL_MAX_10_EXP + 3;\r\n    char _Buffer[_Buffer_size];\r\n    to_chars_result _Result;\r\n\r\n    auto _Extra_precision = 0;\r\n    if (_Precision > _Max_precision) {\r\n        _Extra_precision = _Precision - _Max_precision;\r\n        _Precision       = _Max_precision;\r\n    }\r\n\r\n    const auto _Is_negative = (_STD signbit) (_Value);\r\n\r\n    if ((_STD isnan) (_Value)) {\r\n        _Result.ptr = _Buffer;\r\n        if (_Is_negative) {\r\n            ++_Result.ptr; // pretend to skip over a '-' that to_chars would put in _Buffer[0]\r\n        }\r\n\r\n        _CSTD memcpy(_Result.ptr, \"nan\", 3);\r\n        _Result.ptr += 3;\r\n    } else {\r\n        if (_Precision == -1) {\r\n            if (_None_type) {\r\n                _Result = _STD to_chars(_Buffer, _STD end(_Buffer), _Value);\r\n            } else {\r\n                _Result = _STD to_chars(_Buffer, _STD end(_Buffer), _Value, _Format);\r\n            }\r\n        } else {\r\n            _Result = _STD to_chars(_Buffer, _STD end(_Buffer), _Value, _Format, _Precision);\r\n        }\r\n\r\n        _STL_INTERNAL_CHECK(_Result.ec == errc{});\r\n    }\r\n\r\n    auto _Buffer_start = _Buffer;\r\n    auto _Width        = static_cast<int>(_Result.ptr - _Buffer_start);\r\n\r\n    if (_Is_negative) {\r\n        // Remove the '-', it will be dealt with directly\r\n        _Buffer_start += 1;\r\n    } else {\r\n        if (_Sgn != _Fmt_sign::_Minus) {\r\n            _Width += 1;\r\n        }\r\n    }\r\n\r\n    _STL_INTERNAL_CHECK(_Exponent == 'e' || _Exponent == 'p');\r\n    if (_To_upper) {\r\n        _Buffer_to_uppercase(_Buffer_start, _Result.ptr);\r\n        _Exponent -= 'a' - 'A';\r\n    }\r\n\r\n    const auto _Is_finite = (_STD isfinite) (_Value);\r\n\r\n    auto _Append_decimal   = false;\r\n    auto _Exponent_start   = _Result.ptr;\r\n    auto _Radix_point      = _Result.ptr;\r\n    auto _Integral_end     = _Result.ptr;\r\n    auto _Zeroes_to_append = 0;\r\n    auto _Separators       = 0;\r\n    string _Groups;\r\n\r\n    if (_Is_finite) {\r\n        if (_Specs._Alt || _Specs._Localized) {\r\n            for (auto _It = _Buffer_start; _It < _Result.ptr; ++_It) {\r\n                if (*_It == '.') {\r\n                    _Radix_point = _It;\r\n                } else if (*_It == _Exponent) {\r\n                    _Exponent_start = _It;\r\n                }\r\n            }\r\n            _Integral_end = (_STD min) (_Radix_point, _Exponent_start);\r\n\r\n            if (_Specs._Alt && _Radix_point == _Result.ptr) {\r\n                // TRANSITION, decimal point may be wider\r\n                ++_Width;\r\n                _Append_decimal = true;\r\n            }\r\n\r\n            if (_Specs._Localized) {\r\n                _Groups     = _STD use_facet<numpunct<_CharT>>(_Locale._Get()).grouping();\r\n                _Separators = _Count_separators(static_cast<size_t>(_Integral_end - _Buffer_start), _Groups);\r\n                _Width += _Separators;\r\n            }\r\n        }\r\n\r\n        switch (_Format) {\r\n        case chars_format::hex:\r\n        case chars_format::scientific:\r\n            if (_Extra_precision != 0 && !_Specs._Alt && !_Specs._Localized) {\r\n                // Trailing zeroes are in front of the exponent\r\n                while (*--_Exponent_start != _Exponent) {\r\n                }\r\n            }\r\n            [[fallthrough]];\r\n        case chars_format::fixed:\r\n            _Zeroes_to_append = _Extra_precision;\r\n            break;\r\n        case chars_format::general:\r\n            if (_Specs._Alt && (_Specs._Type == 'g' || _Specs._Type == 'G')) {\r\n                auto _Digits = static_cast<int>(_Exponent_start - _Buffer_start);\r\n\r\n                if (!_Append_decimal) {\r\n                    --_Digits;\r\n                }\r\n\r\n                _Zeroes_to_append = _Extra_precision + _Precision - _Digits;\r\n\r\n                // Leading zeroes are not significant if we used fixed point notation.\r\n                if (_Exponent_start == _Result.ptr && _STD abs(_Value) < 1.0 && _Value != 0.0) {\r\n                    for (auto _It = _Buffer_start; _It < _Result.ptr; ++_It) {\r\n                        if (*_It == '0') {\r\n                            ++_Zeroes_to_append;\r\n                        } else if (*_It != '.') {\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            break;\r\n        default:\r\n            _STL_UNREACHABLE;\r\n        }\r\n    }\r\n\r\n    _Width += _Zeroes_to_append;\r\n\r\n    const bool _Write_leading_zeroes = _Specs._Leading_zero && _Specs._Alignment == _Fmt_align::_None && _Is_finite;\r\n\r\n    auto _Writer = [&](_OutputIt _Out) {\r\n        _Out = _Write_sign(_STD move(_Out), _Sgn, _Is_negative);\r\n\r\n        if (_Write_leading_zeroes && _Width < _Specs._Width) {\r\n            _Out = _RANGES fill_n(_STD move(_Out), _Specs._Width - _Width, _CharT{'0'});\r\n        }\r\n\r\n        if (_Specs._Localized) {\r\n            const auto& _Facet = _STD use_facet<numpunct<_CharT>>(_Locale._Get());\r\n\r\n            _Out = _Write_separated_integer(\r\n                _Buffer_start, _Integral_end, _Groups, _Facet.thousands_sep(), _Separators, _STD move(_Out));\r\n            if (_Radix_point != _Result.ptr || _Append_decimal) {\r\n                *_Out++         = _Facet.decimal_point();\r\n                _Append_decimal = false;\r\n            }\r\n            _Buffer_start = _Integral_end;\r\n            if (_Radix_point != _Result.ptr) {\r\n                ++_Buffer_start;\r\n            }\r\n        }\r\n\r\n        _Out = _Widen_and_copy<_CharT>(_Buffer_start, _Exponent_start, _STD move(_Out));\r\n        if (_Specs._Alt && _Append_decimal) {\r\n            *_Out++ = '.';\r\n        }\r\n\r\n        for (; _Zeroes_to_append > 0; --_Zeroes_to_append) {\r\n            *_Out++ = '0';\r\n        }\r\n\r\n        return _Widen_and_copy<_CharT>(_Exponent_start, _Result.ptr, _STD move(_Out));\r\n    };\r\n\r\n    if (_Write_leading_zeroes) {\r\n        return _Writer(_STD move(_Out));\r\n    }\r\n\r\n    return _Write_aligned(_STD move(_Out), _Width, _Specs, _Fmt_align::_Right, _Writer);\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(\r\n    _OutputIt _Out, const void* const _Value, const _Basic_format_specs<_CharT>& _Specs, _Lazy_locale) {\r\n    _STL_INTERNAL_CHECK(_Specs._Type == '\\0' || _Specs._Type == 'p' || _Specs._Type == 'P');\r\n    _STL_INTERNAL_CHECK(_Specs._Sgn == _Fmt_sign::_None);\r\n    _STL_INTERNAL_CHECK(!_Specs._Alt);\r\n    _STL_INTERNAL_CHECK(_Specs._Precision == -1);\r\n    _STL_INTERNAL_CHECK(!_Specs._Localized);\r\n\r\n    char _Buffer[2 * sizeof(void*)]; // 2 hexits per byte: 8 hexits for 32-bit, 16 hexits for 64-bit\r\n    const auto [_End, _Ec] = _STD to_chars(_Buffer, _STD end(_Buffer), reinterpret_cast<uintptr_t>(_Value), 16);\r\n    _STL_INTERNAL_CHECK(_Ec == errc{});\r\n    const int _Width = 2 + static_cast<int>(_End - _Buffer);\r\n\r\n    _CharT _Prefix[2] = {_CharT{'0'}, _CharT{'x'}};\r\n    if (_Specs._Type == 'P') {\r\n        _Prefix[1] = _CharT{'X'};\r\n        _Buffer_to_uppercase(_Buffer, _End);\r\n    }\r\n\r\n    const bool _Write_leading_zeroes = _Specs._Leading_zero && _Specs._Alignment == _Fmt_align::_None;\r\n    auto _Writer                     = [&](_OutputIt _Out) {\r\n        _Out = _RANGES copy(_Prefix, _Prefix + 2, _STD move(_Out)).out;\r\n        if (_Write_leading_zeroes && _Width < _Specs._Width) {\r\n            _Out = _RANGES fill_n(_STD move(_Out), _Specs._Width - _Width, _CharT{'0'});\r\n        }\r\n        return _STD _Widen_and_copy<_CharT>(_Buffer, _End, _STD move(_Out));\r\n    };\r\n\r\n    if (_Write_leading_zeroes) {\r\n        return _Writer(_STD move(_Out));\r\n    }\r\n\r\n    return _STD _Write_aligned(_STD move(_Out), _Width, _Specs, _Fmt_align::_Right, _Writer);\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(\r\n    _OutputIt _Out, const _CharT* _Value, const _Basic_format_specs<_CharT>& _Specs, _Lazy_locale _Locale) {\r\n    return _Fmt_write(_STD move(_Out), basic_string_view<_CharT>{_Value}, _Specs, _Locale);\r\n}\r\n\r\n// width iterator for UTF-8 and UTF-16\r\ntemplate <class _CharT>\r\nclass _Measure_string_prefix_iterator_utf2 {\r\nprivate:\r\n    _Grapheme_break_property_iterator2<_CharT> _WrappedIter;\r\n\r\npublic:\r\n    using value_type      = int;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    _NODISCARD constexpr bool operator==(const _Measure_string_prefix_iterator_utf2&) const noexcept = default;\r\n\r\n    _NODISCARD constexpr bool operator==(default_sentinel_t) const noexcept {\r\n        return _WrappedIter == default_sentinel;\r\n    }\r\n\r\n    constexpr _Measure_string_prefix_iterator_utf2(const _CharT* _First, const _CharT* _Last)\r\n        : _WrappedIter(_First, _Last) {}\r\n\r\n    constexpr _Measure_string_prefix_iterator_utf2() = default;\r\n\r\n    _NODISCARD constexpr value_type operator*() const {\r\n        return _Unicode_width_estimate(*_WrappedIter);\r\n    }\r\n\r\n    constexpr _Measure_string_prefix_iterator_utf2& operator++() noexcept {\r\n        ++_WrappedIter;\r\n        return *this;\r\n    }\r\n\r\n    constexpr _Measure_string_prefix_iterator_utf2 operator++(int) noexcept {\r\n        auto _Old = *this;\r\n        ++*this;\r\n        return _Old;\r\n    }\r\n\r\n    _NODISCARD constexpr const _CharT* _Position() const {\r\n        return _WrappedIter._Position();\r\n    }\r\n};\r\n\r\nclass _Measure_string_prefix_iterator_legacy {\r\nprivate:\r\n    _Fmt_codec<char> _Codec = _Get_fmt_codec<char>();\r\n    const char* _First      = nullptr;\r\n    const char* _Last       = nullptr;\r\n    int _Units              = 0;\r\n\r\n    void _Update_units() {\r\n        if (_First < _Last) {\r\n            _Units = _Codec._Units_in_next_character(_First, _Last);\r\n        } else {\r\n            _Units = -1;\r\n        }\r\n    }\r\n\r\npublic:\r\n    using value_type      = int;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    _NODISCARD bool operator==(default_sentinel_t) const noexcept {\r\n        return _First == _Last;\r\n    }\r\n    _NODISCARD bool operator==(const _Measure_string_prefix_iterator_legacy& _Rhs) const noexcept {\r\n        return _First == _Rhs._First && _Last == _Rhs._Last;\r\n    }\r\n\r\n    _Measure_string_prefix_iterator_legacy(const char* _First_val, const char* _Last_val)\r\n        : _First(_First_val), _Last(_Last_val) {\r\n        _Update_units();\r\n    }\r\n\r\n    _Measure_string_prefix_iterator_legacy() = default;\r\n\r\n    _Measure_string_prefix_iterator_legacy& operator++() noexcept {\r\n        _First += _Units;\r\n        _Update_units();\r\n        return *this;\r\n    }\r\n    _Measure_string_prefix_iterator_legacy operator++(int) noexcept {\r\n        auto _Old = *this;\r\n        ++*this;\r\n        return _Old;\r\n    }\r\n    _NODISCARD value_type operator*() const noexcept {\r\n        return _Units;\r\n    }\r\n\r\n    _NODISCARD const char* _Position() const noexcept {\r\n        return _First;\r\n    }\r\n};\r\n\r\ntemplate <class _CharT>\r\nusing _Measure_string_prefix_iterator =\r\n    conditional_t<is_same_v<_CharT, char> && !_Is_execution_charset_self_synchronizing(),\r\n        _Measure_string_prefix_iterator_legacy, _Measure_string_prefix_iterator_utf2<_CharT>>;\r\n\r\ntemplate <class _CharT>\r\n_NODISCARD const _CharT* _Measure_string_prefix(const basic_string_view<_CharT> _Value, int& _Width) {\r\n    // Returns a pointer past-the-end of the largest prefix of _Value that fits in _Width, or all\r\n    // of _Value if _Width is negative. Updates _Width to the estimated width of that prefix.\r\n    const int _Max_width = _Width;\r\n    const auto _First    = _Value.data();\r\n    const auto _Last     = _First + _Value.size();\r\n    _Measure_string_prefix_iterator<_CharT> _Pfx_iter(_First, _Last);\r\n    int _Estimated_width = 0; // the estimated width of [_First, _Pfx_iter)\r\n\r\n    constexpr auto _Max_int = _STD _Max_limit<int>();\r\n\r\n    while (_Pfx_iter != default_sentinel) {\r\n        if (_Estimated_width == _Max_width && _Max_width >= 0) {\r\n            // We're at our maximum length\r\n            break;\r\n        }\r\n\r\n        const int _Character_width = *_Pfx_iter;\r\n\r\n        if (_Max_int - _Character_width < _Estimated_width) { // avoid overflow\r\n            // Either _Max_width isn't set, or adding this character will exceed it.\r\n            if (_Max_width < 0) { // unset; saturate width estimate and take all characters\r\n                _Width = _Max_int;\r\n                return _Last;\r\n            }\r\n            break;\r\n        }\r\n\r\n        _Estimated_width += _Character_width;\r\n        if (_Estimated_width > _Max_width && _Max_width >= 0) {\r\n            // with this character, we exceed the maximum length\r\n            _Estimated_width -= _Character_width;\r\n            break;\r\n        }\r\n        ++_Pfx_iter;\r\n    }\r\n\r\n    _Width = _Estimated_width;\r\n    return _Pfx_iter._Position();\r\n}\r\n\r\n#if _HAS_CXX23\r\n_NODISCARD constexpr bool _Is_printable(char32_t _Val) {\r\n    return __printable_property_data._Get_property_for_codepoint(_Val) == __printable_property_values::_Yes_value;\r\n}\r\n\r\n_NODISCARD constexpr bool _Is_grapheme_extend(char32_t _Val) {\r\n    // TRANSITION, should reuse _Grapheme_Break_property_data to save space.\r\n    // (Grapheme_Extend=Yes is Grapheme_Cluster_Break=Extend minus Emoji_Modifier=Yes.)\r\n    return _Grapheme_Extend_property_data._Get_property_for_codepoint(_Val)\r\n        == _Grapheme_Extend_property_values::_Grapheme_Extend_value;\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Write_escaped(_OutputIt _Out, basic_string_view<_CharT> _Value, char _Delim) {\r\n    auto _First        = _Value.data();\r\n    const auto _Last   = _First + _Value.size();\r\n    const auto& _Codec = _Get_fmt_codec<_CharT>();\r\n\r\n    _STL_INTERNAL_CHECK(_Delim == '\"' || _Delim == '\\'');\r\n    *_Out++ = static_cast<_CharT>(_Delim);\r\n\r\n    bool _Escape_grapheme_extend = true;\r\n\r\n    char _Buffer[8];\r\n\r\n    while (_First != _Last) {\r\n        const auto _Ch = *_First;\r\n\r\n        if (_Ch == static_cast<_CharT>('\\t')) {\r\n            _Out                    = _Fmt_write(_STD move(_Out), _STATICALLY_WIDEN(_CharT, R\"(\\t)\"));\r\n            _Escape_grapheme_extend = true;\r\n            ++_First;\r\n        } else if (_Ch == static_cast<_CharT>('\\n')) {\r\n            _Out                    = _Fmt_write(_STD move(_Out), _STATICALLY_WIDEN(_CharT, R\"(\\n)\"));\r\n            _Escape_grapheme_extend = true;\r\n            ++_First;\r\n        } else if (_Ch == static_cast<_CharT>('\\r')) {\r\n            _Out                    = _Fmt_write(_STD move(_Out), _STATICALLY_WIDEN(_CharT, R\"(\\r)\"));\r\n            _Escape_grapheme_extend = true;\r\n            ++_First;\r\n        } else if (_Ch == static_cast<_CharT>(_Delim)) {\r\n            *_Out++                 = static_cast<_CharT>('\\\\');\r\n            *_Out++                 = static_cast<_CharT>(_Delim);\r\n            _Escape_grapheme_extend = true;\r\n            ++_First;\r\n        } else if (_Ch == static_cast<_CharT>('\\\\')) {\r\n            _Out                    = _Fmt_write(_STD move(_Out), _STATICALLY_WIDEN(_CharT, R\"(\\\\)\"));\r\n            _Escape_grapheme_extend = true;\r\n            ++_First;\r\n        } else {\r\n            char32_t _Decoded_ch;\r\n            const auto [_Next, _Is_usv] = _Codec._Decode(_First, _Last, _Decoded_ch);\r\n\r\n            if (_Is_usv) {\r\n                const bool _Needs_escape =\r\n                    !_Is_printable(_Decoded_ch) || (_Escape_grapheme_extend && _Is_grapheme_extend(_Decoded_ch));\r\n\r\n                if (_Needs_escape) {\r\n                    _Out = _Fmt_write(_STD move(_Out), _STATICALLY_WIDEN(_CharT, R\"(\\u{)\"));\r\n\r\n                    const auto [_End, _Ec] =\r\n                        _STD to_chars(_Buffer, _STD end(_Buffer), static_cast<uint32_t>(_Decoded_ch), 16);\r\n                    _STL_INTERNAL_CHECK(_Ec == errc{});\r\n\r\n                    _Out = _Widen_and_copy<_CharT>(_Buffer, _End, _STD move(_Out));\r\n\r\n                    *_Out++                 = static_cast<_CharT>('}');\r\n                    _Escape_grapheme_extend = true;\r\n                } else {\r\n                    _Out                    = _STD _Copy_unchecked(_First, _Next, _STD move(_Out));\r\n                    _Escape_grapheme_extend = false;\r\n                }\r\n\r\n                _First = _Next;\r\n            } else {\r\n                for (; _First != _Next; ++_First) {\r\n                    _Out = _Fmt_write(_STD move(_Out), _STATICALLY_WIDEN(_CharT, R\"(\\x{)\"));\r\n\r\n                    const auto [_End, _Ec] =\r\n                        _STD to_chars(_Buffer, _STD end(_Buffer), static_cast<make_unsigned_t<_CharT>>(*_First), 16);\r\n                    _STL_INTERNAL_CHECK(_Ec == errc{});\r\n\r\n                    _Out = _Widen_and_copy<_CharT>(_Buffer, _End, _STD move(_Out));\r\n\r\n                    *_Out++ = static_cast<_CharT>('}');\r\n                }\r\n                _Escape_grapheme_extend = true;\r\n            }\r\n        }\r\n    }\r\n\r\n    *_Out++ = static_cast<_CharT>(_Delim);\r\n\r\n    return _STD move(_Out);\r\n}\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Write_escaped(\r\n    _OutputIt _Out, basic_string_view<_CharT> _Value, _Basic_format_specs<_CharT> _Specs, char _Delim) {\r\n    if (_Specs._Precision < 0 && _Specs._Width <= 0) {\r\n        return _Write_escaped(_STD move(_Out), _Value, _Delim);\r\n    }\r\n\r\n    basic_string<_CharT> _Temp;\r\n    {\r\n        _Fmt_iterator_buffer<back_insert_iterator<basic_string<_CharT>>, _CharT> _Buf(back_insert_iterator{_Temp});\r\n        (void) _Write_escaped(back_insert_iterator<_Fmt_buffer<_CharT>>{_Buf}, _Value, _Delim);\r\n    }\r\n\r\n    int _Width          = _Specs._Precision;\r\n    const _CharT* _Last = _Measure_string_prefix<_CharT>(_Temp, _Width);\r\n\r\n    return _Write_aligned(_STD move(_Out), _Width, _Specs, _Fmt_align::_Left, [&_Temp, _Last](_OutputIt _Out) {\r\n        return _Fmt_write(_STD move(_Out), basic_string_view<_CharT>{_Temp.data(), _Last});\r\n    });\r\n}\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _CharT, class _OutputIt>\r\n_NODISCARD _OutputIt _Fmt_write(\r\n    _OutputIt _Out, const basic_string_view<_CharT> _Value, const _Basic_format_specs<_CharT>& _Specs, _Lazy_locale) {\r\n    _STL_INTERNAL_CHECK(_Specs._Type == '\\0' || _Specs._Type == 'c' || _Specs._Type == 's' || _Specs._Type == '?');\r\n    _STL_INTERNAL_CHECK(_Specs._Sgn == _Fmt_sign::_None);\r\n    _STL_INTERNAL_CHECK(!_Specs._Alt);\r\n    _STL_INTERNAL_CHECK(!_Specs._Leading_zero);\r\n\r\n#if _HAS_CXX23\r\n    if (_Specs._Type == '?') {\r\n        return _Write_escaped(_STD move(_Out), _Value, _Specs, '\"');\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    if (_Specs._Precision < 0 && _Specs._Width <= 0) {\r\n        return _Fmt_write(_STD move(_Out), _Value);\r\n    }\r\n\r\n    int _Width          = _Specs._Precision;\r\n    const _CharT* _Last = _Measure_string_prefix(_Value, _Width);\r\n\r\n    return _Write_aligned(_STD move(_Out), _Width, _Specs, _Fmt_align::_Left,\r\n        [=](_OutputIt _Out) { return _Fmt_write(_STD move(_Out), basic_string_view<_CharT>{_Value.data(), _Last}); });\r\n}\r\n\r\n// This is the visitor that's used for \"simple\" replacement fields.\r\n// It could be a generic lambda, but that's bad for throughput.\r\n// A simple replacement field is a replacement field that's just \"{}\",\r\n// without any format specs.\r\ntemplate <class _OutputIt, class _CharT>\r\nstruct _Default_arg_formatter {\r\n    using _Context = basic_format_context<_OutputIt, _CharT>;\r\n\r\n    _OutputIt _Out;\r\n    basic_format_args<_Context> _Args;\r\n    _Lazy_locale _Loc;\r\n    basic_format_parse_context<_CharT>& _Parse_ctx;\r\n\r\n    template <class _Ty>\r\n    _OutputIt operator()(_Ty _Val) && {\r\n        return _Fmt_write<_CharT>(_STD move(_Out), _Val);\r\n    }\r\n\r\n    _OutputIt operator()(basic_format_arg<_Context>::handle _Handle) && {\r\n        auto _Format_ctx = _Context::_Make_from(_STD move(_Out), _Args, _Loc);\r\n        _Handle.format(_Parse_ctx, _Format_ctx);\r\n        return _Format_ctx.out();\r\n    }\r\n};\r\n\r\n// Visitor used for replacement fields that contain specs\r\ntemplate <class _OutputIt, class _CharT>\r\nstruct _Arg_formatter {\r\n    using _Context = basic_format_context<_OutputIt, _CharT>;\r\n\r\n    _Context* _Ctx                      = nullptr;\r\n    _Basic_format_specs<_CharT>* _Specs = nullptr;\r\n\r\n    _OutputIt operator()(basic_format_arg<_Context>::handle) {\r\n        _STL_REPORT_ERROR(\"The custom handler should be structurally unreachable for _Arg_formatter\");\r\n        _STL_INTERNAL_CHECK(_Ctx);\r\n        return _Ctx->out();\r\n    }\r\n\r\n    template <class _Ty>\r\n    _OutputIt operator()(_Ty _Val) {\r\n        _STL_INTERNAL_CHECK(_Specs);\r\n        _STL_INTERNAL_CHECK(_Ctx);\r\n        return _Fmt_write(_Ctx->out(), _Val, *_Specs, _Ctx->_Get_lazy_locale());\r\n    }\r\n};\r\n\r\n// Special compile time version of _Parse_format_specs. This version is parameterized on\r\n// the type of the argument associated with the format specifier, since we don't really\r\n// care about avoiding code bloat for code that never runs at runtime, and we can't form\r\n// the erased basic_format_args structure at compile time.\r\ntemplate <class _Ty, class _ParseContext>\r\nconsteval _ParseContext::iterator _Compile_time_parse_format_specs(_ParseContext& _Parse_ctx) {\r\n    using _CharT                = _ParseContext::char_type;\r\n    using _Context              = basic_format_context<back_insert_iterator<_Fmt_buffer<_CharT>>, _CharT>;\r\n    using _ArgTraits            = _Format_arg_traits<_Context>;\r\n    using _FormattedTypeMapping = _ArgTraits::template _Storage_type<_Ty>;\r\n    // If the type is going to use a custom formatter we should just use that,\r\n    // instead of trying to instantiate a custom formatter for its erased handle\r\n    // type\r\n    using _FormattedType = conditional_t<is_same_v<_FormattedTypeMapping, typename basic_format_arg<_Context>::handle>,\r\n        _Ty, _FormattedTypeMapping>;\r\n    formatter<_FormattedType, _CharT> _Formatter{};\r\n    return _Formatter.parse(_Parse_ctx);\r\n}\r\n\r\n// set of format parsing actions that only checks for validity\r\ntemplate <class _CharT, class... _Args>\r\nstruct _Format_checker {\r\n    using _ParseContext = basic_format_parse_context<_CharT>;\r\n    using _ParseFunc    = _ParseContext::iterator (*)(_ParseContext&);\r\n\r\n    static constexpr size_t _Num_args = sizeof...(_Args);\r\n    _Compile_time_parse_context<_CharT> _Parse_context;\r\n    _ParseFunc _Parse_funcs[_Num_args > 0 ? _Num_args : 1];\r\n\r\n    consteval explicit _Format_checker(basic_string_view<_CharT> _Fmt, const _Basic_format_arg_type* _Arg_type) noexcept\r\n        : _Parse_context(_Fmt, _Num_args, _Arg_type),\r\n          _Parse_funcs{&_Compile_time_parse_format_specs<_Args, _ParseContext>...} {}\r\n    constexpr void _On_text(const _CharT*, const _CharT*) const noexcept {}\r\n    constexpr void _On_replacement_field(const size_t _Id, const _CharT* _Last) {\r\n        _Parse_context.advance_to(_Parse_context.begin() + (_Last - _Parse_context.begin()._Unwrapped()));\r\n        (void) _Parse_funcs[_Id](_Parse_context);\r\n    }\r\n    constexpr const _CharT* _On_format_specs(const size_t _Id, const _CharT* _First, const _CharT*) {\r\n        _Parse_context.advance_to(_Parse_context.begin() + (_First - _Parse_context.begin()._Unwrapped()));\r\n        if (_Id < _Num_args) {\r\n            auto _Iter = _Parse_funcs[_Id](_Parse_context); // TRANSITION, VSO-1451773 (workaround: named variable)\r\n            return _Iter._Unwrapped();\r\n        } else {\r\n            return _First;\r\n        }\r\n    }\r\n};\r\n\r\n// The top level set of parsing \"actions\".\r\ntemplate <class _CharT>\r\nstruct _Format_handler {\r\n    using _OutputIt = back_insert_iterator<_Fmt_buffer<_CharT>>;\r\n    using _Context  = basic_format_context<_OutputIt, _CharT>;\r\n\r\n    basic_format_parse_context<_CharT> _Parse_context;\r\n    _Context _Ctx;\r\n\r\n    explicit _Format_handler(_OutputIt _Out, basic_string_view<_CharT> _Str, basic_format_args<_Context> _Format_args,\r\n        const _Lazy_locale& _Loc)\r\n        : _Parse_context(_Str), _Ctx(_Context::_Make_from(_STD move(_Out), _Format_args, _Loc)) {}\r\n\r\n    void _On_text(const _CharT* _First, const _CharT* _Last) {\r\n        _Ctx.advance_to(_RANGES _Copy_unchecked(_First, _Last, _Ctx.out()).out);\r\n    }\r\n\r\n    void _On_replacement_field(const size_t _Id, const _CharT* _Last) {\r\n        auto _Arg = _Get_arg(_Ctx, _Id);\r\n        if (_Arg._Active_state == _Basic_format_arg_type::_Custom_type) {\r\n            _Parse_context.advance_to(_Parse_context.begin() + (_Last - _Parse_context.begin()._Unwrapped()));\r\n        }\r\n        _Ctx.advance_to(_STD visit_format_arg(_Default_arg_formatter<_OutputIt, _CharT>{_Ctx.out(), _Ctx._Get_args(),\r\n                                                  _Ctx._Get_lazy_locale(), _Parse_context},\r\n            _Arg));\r\n    }\r\n\r\n    const _CharT* _On_format_specs(const size_t _Id, const _CharT* _First, const _CharT* _Last) {\r\n        _Parse_context.advance_to(_Parse_context.begin() + (_First - _Parse_context.begin()._Unwrapped()));\r\n        auto _Arg = _Get_arg(_Ctx, _Id);\r\n        if (_Arg._Active_state == _Basic_format_arg_type::_Custom_type) {\r\n            _Arg._Custom_state.format(_Parse_context, _Ctx);\r\n            return _Parse_context.begin()._Unwrapped();\r\n        }\r\n\r\n        _Basic_format_specs<_CharT> _Specs;\r\n        _Specs_checker<_Specs_handler<basic_format_parse_context<_CharT>, _Context>> _Handler(\r\n            _Specs_handler<basic_format_parse_context<_CharT>, _Context>{_Specs, _Parse_context, _Ctx},\r\n            _Arg._Active_state);\r\n        _First = _Parse_format_specs(_First, _Last, _Handler);\r\n        if (_First == _Last || *_First != '}') {\r\n            _Throw_format_error(\"Missing '}' in format string.\");\r\n        }\r\n\r\n        _Ctx.advance_to(_STD visit_format_arg(\r\n            _Arg_formatter<_OutputIt, _CharT>{._Ctx = _STD addressof(_Ctx), ._Specs = _STD addressof(_Specs)}, _Arg));\r\n        return _First;\r\n    }\r\n};\r\n\r\n// declared in <__msvc_formatter.hpp>\r\ntemplate <class _Ty, class _CharT, _Basic_format_arg_type _ArgType>\r\ntemplate <class _ParseContext>\r\nconstexpr _ParseContext::iterator _Formatter_base<_Ty, _CharT, _ArgType>::parse(\r\n    type_identity_t<_ParseContext&> _Parse_ctx) {\r\n    _Specs_checker<_Dynamic_specs_handler<_ParseContext>> _Handler(\r\n        _Dynamic_specs_handler<_ParseContext>{_Specs, _Parse_ctx}, _ArgType);\r\n    const auto _It = _Parse_format_specs(_Parse_ctx._Unchecked_begin(), _Parse_ctx._Unchecked_end(), _Handler);\r\n    if (_It != _Parse_ctx._Unchecked_end() && *_It != '}') {\r\n        _Throw_format_error(\"Missing '}' in format string.\");\r\n    }\r\n    return _Parse_ctx.begin() + (_It - _Parse_ctx._Unchecked_begin());\r\n}\r\n\r\n// declared in <__msvc_formatter.hpp>\r\ntemplate <class _Ty, class _CharT, _Basic_format_arg_type _ArgType>\r\ntemplate <class _FormatContext>\r\n_FormatContext::iterator _Formatter_base<_Ty, _CharT, _ArgType>::format(\r\n    const _Ty& _Val, _FormatContext& _Format_ctx) const {\r\n    _Dynamic_format_specs<_CharT> _Format_specs = _Specs;\r\n    if (_Specs._Dynamic_width_index >= 0) {\r\n        _Format_specs._Width =\r\n            _Get_dynamic_specs<_Width_checker>(_Format_ctx.arg(static_cast<size_t>(_Specs._Dynamic_width_index)));\r\n    }\r\n\r\n    if (_Specs._Dynamic_precision_index >= 0) {\r\n        _Format_specs._Precision = _Get_dynamic_specs<_Precision_checker>(\r\n            _Format_ctx.arg(static_cast<size_t>(_Specs._Dynamic_precision_index)));\r\n    }\r\n\r\n    return _STD visit_format_arg(\r\n        _Arg_formatter<typename _FormatContext::iterator, _CharT>{\r\n            ._Ctx = _STD addressof(_Format_ctx), ._Specs = _STD addressof(_Format_specs)},\r\n        basic_format_arg<_FormatContext>::_Make_from(_Val));\r\n}\r\n_FMT_P2286_END\r\n\r\n_EXPORT_STD template <class _CharT, class... _Args>\r\nstruct basic_format_string {\r\npublic:\r\n    template <class _Ty>\r\n        requires convertible_to<const _Ty&, basic_string_view<_CharT>>\r\n    consteval basic_format_string(const _Ty& _Str_val) : _Str(_Str_val) {\r\n        if constexpr (!is_same_v<_CharT, char> || _Is_execution_charset_self_synchronizing()) {\r\n            using _Context             = basic_format_context<back_insert_iterator<_Fmt_buffer<_CharT>>, _CharT>;\r\n            constexpr size_t _Num_args = sizeof...(_Args);\r\n            constexpr _Basic_format_arg_type _Arg_types[_Num_args > 0 ? _Num_args : 1] = {\r\n                _STD _Get_format_arg_type<_Context, _Args>()...};\r\n\r\n            _Parse_format_string(_Str, _Format_checker<_CharT, remove_cvref_t<_Args>...>{_Str, _Arg_types});\r\n        }\r\n    }\r\n\r\n    _NODISCARD constexpr basic_string_view<_CharT> get() const noexcept {\r\n        return _Str;\r\n    }\r\n\r\nprivate:\r\n    basic_string_view<_CharT> _Str;\r\n};\r\n\r\n_EXPORT_STD template <class... _Args>\r\nusing format_string = basic_format_string<char, type_identity_t<_Args>...>;\r\n\r\n_EXPORT_STD template <class... _Args>\r\nusing wformat_string = basic_format_string<wchar_t, type_identity_t<_Args>...>;\r\n\r\n_EXPORT_STD using format_args  = basic_format_args<format_context>;\r\n_EXPORT_STD using wformat_args = basic_format_args<wformat_context>;\r\n\r\n_EXPORT_STD template <class _Context = format_context, class... _Args>\r\n_NODISCARD auto make_format_args(_Args&... _Vals) {\r\n    if constexpr ((_Formattable_with_non_const<remove_const_t<_Args>, _Context> && ...)) {\r\n        static_assert((_Formattable_with<remove_const_t<_Args>, _Context> && ...),\r\n            \"The format() member function can't be called on const formatter<T>. \"\r\n            \"To make the formatter usable, add const to format(). \"\r\n            \"See N4971 [format.arg.store]/2 and [formatter.requirements].\");\r\n    } else {\r\n        static_assert((_Formattable_with<remove_const_t<_Args>, _Context> && ...),\r\n            \"Cannot format an argument. To make T formattable, provide a formatter<T> specialization. \"\r\n            \"See N4971 [format.arg.store]/2 and [formatter.requirements].\");\r\n    }\r\n    return _Format_arg_store<_Context, _Args...>{_Vals...};\r\n}\r\n\r\n_EXPORT_STD template <class... _Args>\r\n_NODISCARD auto make_wformat_args(_Args&... _Vals) {\r\n    return _STD make_format_args<wformat_context>(_Vals...);\r\n}\r\n\r\n_FMT_P2286_BEGIN\r\ntemplate <class _CharT, output_iterator<const _CharT&> _OutputIt, class _Context>\r\n_OutputIt _Format_to_it(_OutputIt _Out, const basic_string_view<_CharT> _Fmt, const basic_format_args<_Context> _Args,\r\n    const _Lazy_locale _Loc) {\r\n    using _Fmt_it_char = _Basic_fmt_it<_CharT>;\r\n    if constexpr (is_same_v<_OutputIt, _Fmt_it_char>) {\r\n        _Format_handler<_CharT> _Handler(_Out, _Fmt, _Args, _Loc);\r\n        _Parse_format_string(_Fmt, _Handler);\r\n        return _Out;\r\n    } else {\r\n        _Fmt_iterator_buffer<_OutputIt, _CharT> _Buf(_STD move(_Out));\r\n        _Format_handler<_CharT> _Handler(_Fmt_it_char{_Buf}, _Fmt, _Args, _Loc);\r\n        _Parse_format_string(_Fmt, _Handler);\r\n        return _Buf._Out();\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <output_iterator<const char&> _OutputIt>\r\n_OutputIt vformat_to(_OutputIt _Out, const string_view _Fmt, const format_args _Args) {\r\n    return _Format_to_it(_STD move(_Out), _Fmt, _Args, _Lazy_locale{});\r\n}\r\n\r\n_EXPORT_STD template <output_iterator<const wchar_t&> _OutputIt>\r\n_OutputIt vformat_to(_OutputIt _Out, const wstring_view _Fmt, const wformat_args _Args) {\r\n    return _Format_to_it(_STD move(_Out), _Fmt, _Args, _Lazy_locale{});\r\n}\r\n\r\n_EXPORT_STD template <output_iterator<const char&> _OutputIt>\r\n_OutputIt vformat_to(_OutputIt _Out, const locale& _Loc, const string_view _Fmt, const format_args _Args) {\r\n    return _Format_to_it(_STD move(_Out), _Fmt, _Args, _Lazy_locale{_Loc});\r\n}\r\n\r\n_EXPORT_STD template <output_iterator<const wchar_t&> _OutputIt>\r\n_OutputIt vformat_to(_OutputIt _Out, const locale& _Loc, const wstring_view _Fmt, const wformat_args _Args) {\r\n    return _Format_to_it(_STD move(_Out), _Fmt, _Args, _Lazy_locale{_Loc});\r\n}\r\n\r\n_EXPORT_STD template <output_iterator<const char&> _OutputIt, class... _Types>\r\n_OutputIt format_to(_OutputIt _Out, const format_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    return _STD vformat_to(_STD move(_Out), _Fmt.get(), _STD make_format_args(_Args...));\r\n}\r\n\r\n_EXPORT_STD template <output_iterator<const wchar_t&> _OutputIt, class... _Types>\r\n_OutputIt format_to(_OutputIt _Out, const wformat_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    return _STD vformat_to(_STD move(_Out), _Fmt.get(), _STD make_wformat_args(_Args...));\r\n}\r\n\r\n_EXPORT_STD template <output_iterator<const char&> _OutputIt, class... _Types>\r\n_OutputIt format_to(_OutputIt _Out, const locale& _Loc, const format_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    return _STD vformat_to(_STD move(_Out), _Loc, _Fmt.get(), _STD make_format_args(_Args...));\r\n}\r\n\r\n_EXPORT_STD template <output_iterator<const wchar_t&> _OutputIt, class... _Types>\r\n_OutputIt format_to(_OutputIt _Out, const locale& _Loc, const wformat_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    return _STD vformat_to(_STD move(_Out), _Loc, _Fmt.get(), _STD make_wformat_args(_Args...));\r\n}\r\n\r\n_EXPORT_STD template <int = 0> // improves throughput, see GH-2329\r\n_NODISCARD string vformat(const string_view _Fmt, const format_args _Args) {\r\n    string _Str;\r\n    _Str.reserve(_Fmt.size() + _Args._Estimate_required_capacity());\r\n    _STD vformat_to(back_insert_iterator{_Str}, _Fmt, _Args);\r\n    return _Str;\r\n}\r\n\r\n_EXPORT_STD template <int = 0> // improves throughput, see GH-2329\r\n_NODISCARD wstring vformat(const wstring_view _Fmt, const wformat_args _Args) {\r\n    wstring _Str;\r\n    _Str.reserve(_Fmt.size() + _Args._Estimate_required_capacity());\r\n    _STD vformat_to(back_insert_iterator{_Str}, _Fmt, _Args);\r\n    return _Str;\r\n}\r\n\r\n_EXPORT_STD template <int = 0> // improves throughput, see GH-2329\r\n_NODISCARD string vformat(const locale& _Loc, const string_view _Fmt, const format_args _Args) {\r\n    string _Str;\r\n    _Str.reserve(_Fmt.size() + _Args._Estimate_required_capacity());\r\n    _STD vformat_to(back_insert_iterator{_Str}, _Loc, _Fmt, _Args);\r\n    return _Str;\r\n}\r\n\r\n_EXPORT_STD template <int = 0> // improves throughput, see GH-2329\r\n_NODISCARD wstring vformat(const locale& _Loc, const wstring_view _Fmt, const wformat_args _Args) {\r\n    wstring _Str;\r\n    _Str.reserve(_Fmt.size() + _Args._Estimate_required_capacity());\r\n    _STD vformat_to(back_insert_iterator{_Str}, _Loc, _Fmt, _Args);\r\n    return _Str;\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD string format(const format_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    return _STD vformat(_Fmt.get(), _STD make_format_args(_Args...));\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD wstring format(const wformat_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    return _STD vformat(_Fmt.get(), _STD make_wformat_args(_Args...));\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD string format(const locale& _Loc, const format_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    return _STD vformat(_Loc, _Fmt.get(), _STD make_format_args(_Args...));\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD wstring format(const locale& _Loc, const wformat_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    return _STD vformat(_Loc, _Fmt.get(), _STD make_wformat_args(_Args...));\r\n}\r\n_FMT_P2286_END\r\n\r\n_EXPORT_STD template <class _OutputIt>\r\nstruct format_to_n_result {\r\n    _OutputIt out;\r\n    iter_difference_t<_OutputIt> size;\r\n};\r\n\r\n_FMT_P2286_BEGIN\r\n_EXPORT_STD template <output_iterator<const char&> _OutputIt, class... _Types>\r\nformat_to_n_result<_OutputIt> format_to_n(\r\n    _OutputIt _Out, const iter_difference_t<_OutputIt> _Max, const format_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    _Fmt_iterator_buffer<_OutputIt, char, _Fmt_fixed_buffer_traits> _Buf(_STD move(_Out), _Max);\r\n    _STD vformat_to(_Fmt_it{_Buf}, _Fmt.get(), _STD make_format_args(_Args...));\r\n    return {.out = _Buf._Out(), .size = _Buf._Count()};\r\n}\r\n\r\n_EXPORT_STD template <output_iterator<const wchar_t&> _OutputIt, class... _Types>\r\nformat_to_n_result<_OutputIt> format_to_n(\r\n    _OutputIt _Out, const iter_difference_t<_OutputIt> _Max, const wformat_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    _Fmt_iterator_buffer<_OutputIt, wchar_t, _Fmt_fixed_buffer_traits> _Buf(_STD move(_Out), _Max);\r\n    _STD vformat_to(_Fmt_wit{_Buf}, _Fmt.get(), _STD make_wformat_args(_Args...));\r\n    return {.out = _Buf._Out(), .size = _Buf._Count()};\r\n}\r\n\r\n_EXPORT_STD template <output_iterator<const char&> _OutputIt, class... _Types>\r\nformat_to_n_result<_OutputIt> format_to_n(_OutputIt _Out, const iter_difference_t<_OutputIt> _Max, const locale& _Loc,\r\n    const format_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    _Fmt_iterator_buffer<_OutputIt, char, _Fmt_fixed_buffer_traits> _Buf(_STD move(_Out), _Max);\r\n    _STD vformat_to(_Fmt_it{_Buf}, _Loc, _Fmt.get(), _STD make_format_args(_Args...));\r\n    return {.out = _Buf._Out(), .size = _Buf._Count()};\r\n}\r\n\r\n_EXPORT_STD template <output_iterator<const wchar_t&> _OutputIt, class... _Types>\r\nformat_to_n_result<_OutputIt> format_to_n(_OutputIt _Out, const iter_difference_t<_OutputIt> _Max, const locale& _Loc,\r\n    const wformat_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    _Fmt_iterator_buffer<_OutputIt, wchar_t, _Fmt_fixed_buffer_traits> _Buf(_STD move(_Out), _Max);\r\n    _STD vformat_to(_Fmt_wit{_Buf}, _Loc, _Fmt.get(), _STD make_wformat_args(_Args...));\r\n    return {.out = _Buf._Out(), .size = _Buf._Count()};\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD size_t formatted_size(const format_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    _Fmt_counting_buffer<char> _Buf;\r\n    _STD vformat_to(_Fmt_it{_Buf}, _Fmt.get(), _STD make_format_args(_Args...));\r\n    return _Buf._Count();\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD size_t formatted_size(const wformat_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    _Fmt_counting_buffer<wchar_t> _Buf;\r\n    _STD vformat_to(_Fmt_wit{_Buf}, _Fmt.get(), _STD make_wformat_args(_Args...));\r\n    return _Buf._Count();\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD size_t formatted_size(const locale& _Loc, const format_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    _Fmt_counting_buffer<char> _Buf;\r\n    _STD vformat_to(_Fmt_it{_Buf}, _Loc, _Fmt.get(), _STD make_format_args(_Args...));\r\n    return _Buf._Count();\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD size_t formatted_size(const locale& _Loc, const wformat_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    _Fmt_counting_buffer<wchar_t> _Buf;\r\n    _STD vformat_to(_Fmt_wit{_Buf}, _Loc, _Fmt.get(), _STD make_wformat_args(_Args...));\r\n    return _Buf._Count();\r\n}\r\n_FMT_P2286_END\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _CharT>\r\n_NODISCARD int _Measure_display_width(const basic_string_view<_CharT> _Value) {\r\n    int _Width = -1;\r\n    (void) _Measure_string_prefix(_Value, _Width);\r\n    return _Width;\r\n}\r\n\r\ntemplate <class _CharT>\r\nclass _Fill_align_and_width_specs_setter {\r\npublic:\r\n    constexpr explicit _Fill_align_and_width_specs_setter(\r\n        _Fill_align_and_width_specs<_CharT>& _Specs_, basic_format_parse_context<_CharT>& _Parse_ctx_)\r\n        : _Specs(_Specs_), _Parse_ctx(_Parse_ctx_) {}\r\n\r\n    constexpr void _On_align(const _Fmt_align _Aln) {\r\n        _Specs._Alignment = _Aln;\r\n    }\r\n\r\n    constexpr void _On_fill(const basic_string_view<_CharT> _Sv) {\r\n        if (_Sv.size() > _STD size(_Specs._Fill)) {\r\n            _Throw_format_error(\"Invalid fill (too long).\");\r\n        }\r\n\r\n        const auto _Pos = _STD _Copy_unchecked(_Sv._Unchecked_begin(), _Sv._Unchecked_end(), _Specs._Fill);\r\n        _STD fill(_Pos, _STD end(_Specs._Fill), _CharT{});\r\n        _Specs._Fill_length = static_cast<uint8_t>(_Sv.size());\r\n    }\r\n\r\n    constexpr void _On_width(const int _Width) {\r\n        _Specs._Width = _Width;\r\n    }\r\n\r\n    constexpr void _On_dynamic_width(const size_t _Arg_id) {\r\n        _Parse_ctx.check_arg_id(_Arg_id);\r\n        _Parse_ctx._Check_dynamic_spec_integral(_Arg_id);\r\n        _Specs._Dynamic_width_index = _Verify_dynamic_arg_index_in_range(_Arg_id);\r\n    }\r\n\r\n    constexpr void _On_dynamic_width(_Auto_id_tag) {\r\n        const size_t _Arg_id = _Parse_ctx.next_arg_id();\r\n        _Parse_ctx._Check_dynamic_spec_integral(_Arg_id);\r\n        _Specs._Dynamic_width_index = _Verify_dynamic_arg_index_in_range(_Arg_id);\r\n    }\r\n\r\nprotected:\r\n    _Fill_align_and_width_specs<_CharT>& _Specs;\r\n\r\nprivate:\r\n    basic_format_parse_context<_CharT>& _Parse_ctx;\r\n\r\n    _NODISCARD static constexpr int _Verify_dynamic_arg_index_in_range(const size_t _Idx) {\r\n        if (!_STD in_range<int>(_Idx)) {\r\n            _Throw_format_error(\"Dynamic width index is too large.\");\r\n        }\r\n\r\n        return static_cast<int>(_Idx);\r\n    }\r\n};\r\n\r\ntemplate <class _CharT>\r\nclass _Range_specs_setter : public _Fill_align_and_width_specs_setter<_CharT> {\r\npublic:\r\n    constexpr explicit _Range_specs_setter(\r\n        _Range_specs<_CharT>& _Specs_, basic_format_parse_context<_CharT>& _Parse_ctx_)\r\n        : _Fill_align_and_width_specs_setter<_CharT>(_Specs_, _Parse_ctx_) {}\r\n\r\n    constexpr void _On_no_brackets() {\r\n        static_cast<_Range_specs<_CharT>&>(this->_Specs)._No_brackets = true;\r\n    }\r\n\r\n    constexpr void _On_type(const _CharT _Type) {\r\n        _STL_INTERNAL_CHECK(_Type == 'm' || _Type == 's' || _Type == '?');\r\n        static_cast<_Range_specs<_CharT>&>(this->_Specs)._Type = static_cast<char>(_Type);\r\n    }\r\n};\r\n\r\ntemplate <class _CharT>\r\n_NODISCARD constexpr const _CharT* _Parse_range_specs(\r\n    const _CharT* _Begin, const _CharT* const _End, _Range_specs_setter<_CharT>& _Callbacks) {\r\n    if (_Begin == _End || *_Begin == '}' || *_Begin == ':') {\r\n        return _Begin;\r\n    }\r\n\r\n    _Begin = _Parse_align(_Begin, _End, _Callbacks);\r\n    if (_Begin == _End) {\r\n        return _Begin;\r\n    }\r\n\r\n    _Begin = _Parse_width(_Begin, _End, _Callbacks);\r\n    if (_Begin == _End) {\r\n        return _Begin;\r\n    }\r\n\r\n    if (*_Begin == 'n') {\r\n        _Callbacks._On_no_brackets();\r\n        if (++_Begin == _End) {\r\n            return _Begin;\r\n        }\r\n    }\r\n\r\n    switch (const _CharT _Maybe_type = *_Begin) {\r\n    case '?':\r\n        if (++_Begin == _End || *_Begin != 's') {\r\n            _Throw_format_error(\"Invalid range-type '?'; was '?s' intended?\");\r\n        }\r\n        [[fallthrough]];\r\n    case 'm':\r\n    case 's':\r\n        _Callbacks._On_type(_Maybe_type);\r\n        ++_Begin;\r\n        break;\r\n    default:\r\n        break;\r\n    }\r\n\r\n    return _Begin;\r\n}\r\n\r\n// declared in <__msvc_ranges_tuple_formatter.hpp>\r\ntemplate <class _Ty, class _CharT>\r\n    requires same_as<remove_cvref_t<_Ty>, _Ty> && formattable<_Ty, _CharT>\r\ntemplate <class _ParseContext>\r\nconstexpr _ParseContext::iterator range_formatter<_Ty, _CharT>::parse(_ParseContext& _Ctx) {\r\n    _Range_specs_setter<_CharT> _Callback{_Specs, _Ctx};\r\n    auto _It = _STD _Parse_range_specs(_Ctx._Unchecked_begin(), _Ctx._Unchecked_end(), _Callback);\r\n\r\n    _Ctx.advance_to(_Ctx.begin() + (_It - _Ctx._Unchecked_begin()));\r\n    bool _Has_underlying_spec = false;\r\n    if (_It != _Ctx._Unchecked_end()) {\r\n        if (*_It == ':') {\r\n            _Has_underlying_spec = true;\r\n            _Ctx.advance_to(_Ctx.begin() + 1);\r\n        } else if (*_It != '}') {\r\n            _Throw_format_error(\"Invalid range-format-spec.\");\r\n        }\r\n    }\r\n\r\n    _It = _Underlying.parse(_Ctx)._Unwrapped();\r\n    if (_It != _Ctx._Unchecked_end() && *_It != '}') {\r\n        _Throw_format_error(\"Missing '}' in format string.\");\r\n    }\r\n\r\n    switch (_Specs._Type) {\r\n    case 'm':\r\n        if constexpr (_Is_two_tuple<_Ty>) {\r\n            _Opening_bracket = _STATICALLY_WIDEN(_CharT, \"{\");\r\n            _Closing_bracket = _STATICALLY_WIDEN(_CharT, \"}\");\r\n            _Separator       = _STATICALLY_WIDEN(_CharT, \", \");\r\n            _Underlying.set_brackets({}, {});\r\n            _Underlying.set_separator(_STATICALLY_WIDEN(_CharT, \": \"));\r\n        } else {\r\n            _Throw_format_error(\"Range-type 'm' requires type T to be a pair or a 2-element tuple.\");\r\n        }\r\n        [[fallthrough]];\r\n\r\n    case '\\0':\r\n        if constexpr (requires { _Underlying.set_debug_format(); }) {\r\n            if (!_Has_underlying_spec) {\r\n                _Underlying.set_debug_format();\r\n            }\r\n        }\r\n        break;\r\n\r\n    case 's':\r\n    case '?':\r\n        if constexpr (same_as<_Ty, _CharT>) {\r\n            if (_Specs._No_brackets) {\r\n                _Throw_format_error(\"Range-types 's' and '?s' cannot be combined with the 'n' option.\");\r\n            } else if (_Has_underlying_spec) {\r\n                _Throw_format_error(\"Range-types 's' and '?s' cannot be combined with a range-underlying-spec.\");\r\n            }\r\n        } else {\r\n            _Throw_format_error(\"Range-types 's' and '?s' require type T to be charT.\");\r\n        }\r\n\r\n        break;\r\n\r\n    default:\r\n        _STL_UNREACHABLE; // can't happen, we've handled all possible outputs from _Parse_range_specs()\r\n        break;\r\n    }\r\n\r\n    if (_Specs._No_brackets) {\r\n        _Opening_bracket = basic_string_view<_CharT>{};\r\n        _Closing_bracket = basic_string_view<_CharT>{};\r\n    }\r\n\r\n    return _Ctx.begin() + (_It - _Ctx._Unchecked_begin());\r\n}\r\n\r\ntemplate <class _Ty, class _CharT, _RANGES input_range _Range, class _FormatContext>\r\nvoid _Range_formatter_format_as_sequence(const formatter<_Ty, _CharT>& _Underlying,\r\n    const basic_string_view<_CharT> _Separator, const basic_string_view<_CharT> _Opening_bracket,\r\n    const basic_string_view<_CharT> _Closing_bracket, _Range&& _Rng, _FormatContext& _Ctx) {\r\n    _Ctx.advance_to(_STD _Fmt_write(_Ctx.out(), _Opening_bracket));\r\n    bool _Separate   = false;\r\n    auto _Iter       = _RANGES begin(_Rng);\r\n    const auto _Sent = _RANGES end(_Rng);\r\n    for (; _Iter != _Sent; ++_Iter) {\r\n        auto&& _Elem = *_Iter;\r\n        if (_Separate) {\r\n            _Ctx.advance_to(_STD _Fmt_write(_Ctx.out(), _Separator));\r\n        }\r\n\r\n        _Separate = true;\r\n        _Ctx.advance_to(_Underlying.format(_Elem, _Ctx));\r\n    }\r\n\r\n    (void) _STD _Fmt_write(_Ctx.out(), _Closing_bracket);\r\n}\r\n\r\ntemplate <class _CharT, _RANGES input_range _Range, class _FormatContext>\r\nvoid _Range_formatter_format_as_string(_Range&& _Rng, _FormatContext& _Ctx, const bool _Debug) {\r\n    if constexpr (_RANGES contiguous_range<_Range>) {\r\n        const auto _Dist = _RANGES distance(_Rng);\r\n\r\n#ifdef _DEBUG\r\n        const auto _Size = _STD _To_unsigned_like(_Dist);\r\n        if constexpr (sizeof(_Size) > sizeof(size_t)) {\r\n            _STL_VERIFY(_Size <= size_t{PTRDIFF_MAX}, \"contiguous range has impossible size.\");\r\n        }\r\n#endif // defined(_DEBUG)\r\n\r\n        formatter<basic_string_view<_CharT>, _CharT> _String_view_formatter;\r\n        if (_Debug) {\r\n            _String_view_formatter.set_debug_format();\r\n        }\r\n\r\n        const auto _First = _RANGES begin(_Rng);\r\n        const basic_string_view<_CharT> _Str(_STD to_address(_First), _STD to_address(_First + _Dist));\r\n        _String_view_formatter.format(_Str, _Ctx);\r\n    } else {\r\n        using _String = basic_string<_CharT>;\r\n        formatter<_String, _CharT> _String_formatter;\r\n        if (_Debug) {\r\n            _String_formatter.set_debug_format();\r\n        }\r\n\r\n        _String_formatter.format(_String{from_range, _Rng}, _Ctx);\r\n    }\r\n}\r\n\r\n// declared in <__msvc_ranges_tuple_formatter.hpp>\r\ntemplate <class _Ty, class _CharT>\r\n    requires same_as<remove_cvref_t<_Ty>, _Ty>\r\n          && formattable<_Ty, _CharT>\r\n             template <_RANGES input_range _Range, class _FormatContext>\r\n                 requires _Is_specialization_v<typename _FormatContext::iterator, back_insert_iterator>\r\n                       && derived_from<typename _FormatContext::iterator::container_type, _Fmt_buffer<_CharT>>\r\n_FormatContext::iterator range_formatter<_Ty, _CharT>::_Format(_Range&& _Rng, _FormatContext& _Ctx) const {\r\n    auto _Format_specs = _Specs;\r\n    if (_Specs._Dynamic_width_index >= 0) {\r\n        _Format_specs._Width =\r\n            _STD _Get_dynamic_specs<_Width_checker>(_Ctx.arg(static_cast<size_t>(_Specs._Dynamic_width_index)));\r\n    }\r\n\r\n    basic_string<_CharT> _Buffer;\r\n    {\r\n        _Fmt_iterator_buffer<back_insert_iterator<basic_string<_CharT>>, _CharT> _Fmt_buf(\r\n            back_insert_iterator{_Buffer});\r\n        using _Inserter      = back_insert_iterator<_Fmt_buffer<_CharT>>;\r\n        auto _Nested_context = basic_format_context<_Inserter, _CharT>::_Make_from(\r\n            _Inserter{_Fmt_buf}, _Ctx._Get_args(), _Ctx._Get_lazy_locale());\r\n\r\n        if constexpr (same_as<_Ty, _CharT>) {\r\n            if (_Specs._Type == 's' || _Specs._Type == '?') {\r\n                _STD _Range_formatter_format_as_string<_CharT>(\r\n                    _STD forward<_Range>(_Rng), _Nested_context, _Specs._Type == '?');\r\n            } else {\r\n                _STD _Range_formatter_format_as_sequence(_Underlying, _Separator, _Opening_bracket, _Closing_bracket,\r\n                    _STD forward<_Range>(_Rng), _Nested_context);\r\n            }\r\n        } else {\r\n            _STD _Range_formatter_format_as_sequence(_Underlying, _Separator, _Opening_bracket, _Closing_bracket,\r\n                _STD forward<_Range>(_Rng), _Nested_context);\r\n        }\r\n    }\r\n\r\n    const int _Width = _STD _Measure_display_width<_CharT>(_Buffer);\r\n    return _STD _Write_aligned(_Ctx.out(), _Width, _Format_specs, _Fmt_align::_Left,\r\n        [&](_FormatContext::iterator _Out) { return _STD _Fmt_write(_STD move(_Out), basic_string_view{_Buffer}); });\r\n}\r\n\r\nenum class _Fmt_tuple_type : uint8_t { _None, _Key_value, _No_brackets };\r\n\r\ntemplate <class _CharT, bool _IsTwoTuple>\r\nclass _Tuple_format_specs_setter {\r\npublic:\r\n    constexpr explicit _Tuple_format_specs_setter(_Fill_align_and_width_specs<_CharT>& _Specs_,\r\n        _Fmt_tuple_type& _Fmt_type_, basic_format_parse_context<_CharT>& _Parse_ctx_)\r\n        : _Specs(_Specs_), _Fmt_type(_Fmt_type_), _Parse_ctx(_Parse_ctx_) {}\r\n\r\n    constexpr void _On_align(const _Fmt_align _Aln) {\r\n        _Specs._Alignment = _Aln;\r\n    }\r\n\r\n    constexpr void _On_fill(const basic_string_view<_CharT> _Sv) {\r\n        if (_Sv.size() > _STD size(_Specs._Fill)) {\r\n            _Throw_format_error(\"Invalid fill (too long).\");\r\n        }\r\n\r\n        if (_Sv == _STATICALLY_WIDEN(_CharT, \":\")) {\r\n            _Throw_format_error(R\"(Invalid fill \":\" for tuples and pairs.)\");\r\n        }\r\n\r\n        const auto _Pos = _STD _Copy_unchecked(_Sv._Unchecked_begin(), _Sv._Unchecked_end(), _Specs._Fill);\r\n        _STD fill(_Pos, _STD end(_Specs._Fill), _CharT{});\r\n        _Specs._Fill_length = static_cast<uint8_t>(_Sv.size());\r\n    }\r\n\r\n    constexpr void _On_width(const int _Width) {\r\n        _Specs._Width = _Width;\r\n    }\r\n\r\n    constexpr void _On_dynamic_width(const size_t _Arg_id) {\r\n        _Parse_ctx.check_arg_id(_Arg_id);\r\n        _Parse_ctx._Check_dynamic_spec_integral(_Arg_id);\r\n        _Specs._Dynamic_width_index = _Verify_dynamic_arg_index_in_range(_Arg_id);\r\n    }\r\n\r\n    constexpr void _On_dynamic_width(_Auto_id_tag) {\r\n        const size_t _Arg_id = _Parse_ctx.next_arg_id();\r\n        _Parse_ctx._Check_dynamic_spec_integral(_Arg_id);\r\n        _Specs._Dynamic_width_index = _Verify_dynamic_arg_index_in_range(_Arg_id);\r\n    }\r\n\r\n    constexpr void _On_type(const _CharT _Type) {\r\n        if (_Type == _CharT{}) {\r\n            return;\r\n        }\r\n\r\n        if (_Type == static_cast<_CharT>('n')) {\r\n            _Fmt_type = _Fmt_tuple_type::_No_brackets;\r\n            return;\r\n        }\r\n\r\n        if constexpr (_IsTwoTuple) {\r\n            if (_Type == static_cast<_CharT>('m')) {\r\n                _Fmt_type = _Fmt_tuple_type::_Key_value;\r\n                return;\r\n            }\r\n        }\r\n\r\n        _Throw_format_error(\"Invalid type specification.\");\r\n    }\r\n\r\nprivate:\r\n    _Fill_align_and_width_specs<_CharT>& _Specs;\r\n    _Fmt_tuple_type& _Fmt_type;\r\n    basic_format_parse_context<_CharT>& _Parse_ctx;\r\n\r\n    _NODISCARD static constexpr int _Verify_dynamic_arg_index_in_range(const size_t _Idx) {\r\n        if (!_STD in_range<int>(_Idx)) {\r\n            _Throw_format_error(\"Dynamic width index is too large.\");\r\n        }\r\n\r\n        return static_cast<int>(_Idx);\r\n    }\r\n};\r\n\r\ntemplate <class _CharT, class _Callbacks_type>\r\n_NODISCARD constexpr const _CharT* _Parse_tuple_format_specs(\r\n    const _CharT* _Begin, const _CharT* _End, _Callbacks_type&& _Callbacks) {\r\n    if (_Begin == _End || *_Begin == '}') {\r\n        return _Begin;\r\n    }\r\n\r\n    _Begin = _STD _Parse_align(_Begin, _End, _Callbacks);\r\n    if (_Begin == _End) {\r\n        return _Begin;\r\n    }\r\n\r\n    _Begin = _STD _Parse_width(_Begin, _End, _Callbacks);\r\n    if (_Begin == _End) {\r\n        return _Begin;\r\n    }\r\n\r\n    // If there's anything remaining we assume it's a type.\r\n    if (*_Begin != '}') {\r\n        _Callbacks._On_type(*_Begin);\r\n        ++_Begin;\r\n    } else {\r\n        // call the type callback so it gets a default type, this is required\r\n        // since _Specs_checker needs to be able to tell that it got a default type\r\n        // to raise an error for default formatted bools with a sign modifier\r\n        _Callbacks._On_type(_CharT{});\r\n    }\r\n\r\n    return _Begin;\r\n}\r\n\r\ntemplate <class _FormatterType, class _ParseContext>\r\nconstexpr void _Set_tuple_debug_format(_FormatterType& _Formatter, _ParseContext& _Parse_ctx) {\r\n    _Formatter.parse(_Parse_ctx);\r\n    if constexpr (requires { _Formatter.set_debug_format(); }) {\r\n        _Formatter.set_debug_format();\r\n    }\r\n}\r\n\r\n// declared in <__msvc_ranges_tuple_formatter.hpp>\r\ntemplate <class _CharT, formattable<_CharT>... _Types>\r\ntemplate <class _ParseContext>\r\nconstexpr _ParseContext::iterator _Tuple_formatter_common_base<_CharT, _Types...>::parse(_ParseContext& _Ctx) {\r\n    _Fmt_tuple_type _Fmt_type = _Fmt_tuple_type::_None;\r\n    _Tuple_format_specs_setter<_CharT, sizeof...(_Types) == 2> _Callback{_Specs, _Fmt_type, _Ctx};\r\n    const auto _It = _STD _Parse_tuple_format_specs(_Ctx._Unchecked_begin(), _Ctx._Unchecked_end(), _Callback);\r\n    if (_It != _Ctx._Unchecked_end() && *_It != '}') {\r\n        _STD _Throw_format_error(\"Missing '}' in format string.\");\r\n    }\r\n\r\n    if (_Fmt_type == _Fmt_tuple_type::_No_brackets) {\r\n        _Opening_bracket = basic_string_view<_CharT>{};\r\n        _Closing_bracket = basic_string_view<_CharT>{};\r\n    } else if constexpr (sizeof...(_Types) == 2) {\r\n        if (_Fmt_type == _Fmt_tuple_type::_Key_value) {\r\n            _Separator       = _STATICALLY_WIDEN(_CharT, \": \");\r\n            _Opening_bracket = basic_string_view<_CharT>{};\r\n            _Closing_bracket = basic_string_view<_CharT>{};\r\n        }\r\n    }\r\n\r\n    _Ctx.advance_to(_Ctx.begin() + (_It - _Ctx._Unchecked_begin()));\r\n    _STD apply([&_Ctx](auto&... _Elems) { (_STD _Set_tuple_debug_format(_Elems, _Ctx), ...); }, _Underlying);\r\n\r\n    return _Ctx.begin();\r\n}\r\n\r\ntemplate <class... _Types, class _CharT, class _FormatContext, class... _ArgTypes>\r\nvoid _Tuple_formatter_format_to_context(const tuple<formatter<_Types, _CharT>...>& _Underlying,\r\n    const basic_string_view<_CharT> _Separator, const basic_string_view<_CharT> _Opening_bracket,\r\n    const basic_string_view<_CharT> _Closing_bracket, _FormatContext& _Fmt_ctx, _ArgTypes&... _Args) {\r\n    _STD _Copy_unchecked(_Opening_bracket._Unchecked_begin(), _Opening_bracket._Unchecked_end(), _Fmt_ctx.out());\r\n    [&]<size_t... _Indices>(index_sequence<_Indices...>) {\r\n        auto _Single_writer = [&]<size_t _Idx>(auto& _Arg) {\r\n            if constexpr (_Idx != 0) {\r\n                _STD _Copy_unchecked(_Separator._Unchecked_begin(), _Separator._Unchecked_end(), _Fmt_ctx.out());\r\n            }\r\n            _STD get<_Idx>(_Underlying).format(_Arg, _Fmt_ctx);\r\n        };\r\n        (_Single_writer.template operator()<_Indices>(_Args), ...);\r\n    }(index_sequence_for<_ArgTypes...>{});\r\n    _STD _Copy_unchecked(_Closing_bracket._Unchecked_begin(), _Closing_bracket._Unchecked_end(), _Fmt_ctx.out());\r\n}\r\n\r\n// declared in <__msvc_ranges_tuple_formatter.hpp>\r\ntemplate <class _CharT, formattable<_CharT>... _Types>\r\ntemplate <class _FormatContext, class... _ArgTypes>\r\n_FormatContext::iterator _Tuple_formatter_common_base<_CharT, _Types...>::_Format(\r\n    _FormatContext& _Fmt_ctx, _ArgTypes&... _Args) const {\r\n    _STL_INTERNAL_STATIC_ASSERT(\r\n        (is_same_v<_ArgTypes, remove_reference_t<_Maybe_const<_Is_const_formattable, _Types>>> && ...));\r\n\r\n    auto _Format_specs = _Specs;\r\n    if (_Specs._Dynamic_width_index >= 0) {\r\n        _Format_specs._Width =\r\n            _STD _Get_dynamic_specs<_Width_checker>(_Fmt_ctx.arg(static_cast<size_t>(_Specs._Dynamic_width_index)));\r\n    }\r\n\r\n    if (_Format_specs._Width <= 0) {\r\n        _STD _Tuple_formatter_format_to_context(\r\n            _Underlying, _Separator, _Opening_bracket, _Closing_bracket, _Fmt_ctx, _Args...);\r\n        return _Fmt_ctx.out();\r\n    }\r\n\r\n    basic_string<_CharT> _Tmp_str;\r\n    if constexpr (is_same_v<_FormatContext, _Default_format_context<_CharT>>) {\r\n        _Fmt_iterator_buffer<back_insert_iterator<basic_string<_CharT>>, _CharT> _Tmp_buf{\r\n            back_insert_iterator{_Tmp_str}};\r\n        auto _Tmp_ctx = _FormatContext::_Make_from(\r\n            _Basic_fmt_it<_CharT>{_Tmp_buf}, _Fmt_ctx._Get_args(), _Fmt_ctx._Get_lazy_locale());\r\n        _STD _Tuple_formatter_format_to_context(\r\n            _Underlying, _Separator, _Opening_bracket, _Closing_bracket, _Tmp_ctx, _Args...);\r\n    } else {\r\n        _STL_REPORT_ERROR(\"no basic_format_context object other than _Default_format_context can be created\");\r\n    }\r\n\r\n    const int _Width = _STD _Measure_display_width<_CharT>(_Tmp_str);\r\n    return _STD _Write_aligned(\r\n        _Fmt_ctx.out(), _Width, _Format_specs, _Fmt_align::_Left, [&](_FormatContext::iterator _Out) {\r\n            return _STD _Fmt_write(_STD move(_Out), basic_string_view<_CharT>{_Tmp_str});\r\n        });\r\n}\r\n\r\nenum class _Add_newline : bool { _Nope, _Yes };\r\n\r\n_NODISCARD inline string _Unescape_braces(const _Add_newline _Add_nl, const string_view _Old_str) {\r\n    string _Unescaped_str;\r\n\r\n    if (_Old_str.empty()) {\r\n        if (_Add_nl == _Add_newline::_Yes) {\r\n            _Unescaped_str.push_back('\\n');\r\n        }\r\n\r\n        return _Unescaped_str;\r\n    }\r\n\r\n    size_t _Unescaped_str_expected_size = _Old_str.size();\r\n\r\n    if (_Add_nl == _Add_newline::_Yes) {\r\n        ++_Unescaped_str_expected_size;\r\n    }\r\n\r\n    _Unescaped_str.resize_and_overwrite(_Unescaped_str_expected_size, [_Add_nl, _Old_str](char* _Dest_ptr, size_t) {\r\n        char _Prev_char           = _Old_str.front();\r\n        size_t _Num_chars_written = 1;\r\n        *_Dest_ptr++              = _Prev_char;\r\n\r\n        for (const auto _Curr_char : _Old_str.substr(1)) {\r\n            if ((_Curr_char == '{' && _Prev_char == '{') || (_Curr_char == '}' && _Prev_char == '}')) {\r\n                _Prev_char = '\\0';\r\n            } else {\r\n                *_Dest_ptr++ = _Curr_char;\r\n                ++_Num_chars_written;\r\n\r\n                _Prev_char = _Curr_char;\r\n            }\r\n        }\r\n\r\n        if (_Add_nl == _Add_newline::_Yes) {\r\n            *_Dest_ptr = '\\n';\r\n            ++_Num_chars_written;\r\n        }\r\n\r\n        return _Num_chars_written;\r\n    });\r\n\r\n    return _Unescaped_str;\r\n}\r\n\r\ntemplate <class _CharT, class _Callbacks_type>\r\n_NODISCARD constexpr const _CharT* _Parse_fill_align_and_width_specs(\r\n    const _CharT* _Begin, const _CharT* _End, _Callbacks_type&& _Callbacks) {\r\n    if (_Begin == _End || *_Begin == '}') {\r\n        return _Begin;\r\n    }\r\n\r\n    _Begin = _Parse_align(_Begin, _End, _Callbacks);\r\n    if (_Begin == _End) {\r\n        return _Begin;\r\n    }\r\n\r\n    return _Parse_width(_Begin, _End, _Callbacks);\r\n}\r\n\r\n// declared in <__msvc_formatter.hpp>\r\ntemplate <class _CharT>\r\ntemplate <class _ParseContext>\r\n_NODISCARD constexpr _ParseContext::iterator _Fill_align_and_width_formatter<_CharT>::_Parse(\r\n    type_identity_t<_ParseContext&> _Parse_ctx) {\r\n    _Fill_align_and_width_specs_setter<_CharT> _Callback{_Specs, _Parse_ctx};\r\n    const auto _It =\r\n        _Parse_fill_align_and_width_specs(_Parse_ctx._Unchecked_begin(), _Parse_ctx._Unchecked_end(), _Callback);\r\n    if (_It != _Parse_ctx._Unchecked_end() && *_It != '}') {\r\n        _Throw_format_error(\"Missing '}' in format string.\");\r\n    }\r\n\r\n    return _Parse_ctx.begin() + (_It - _Parse_ctx._Unchecked_begin());\r\n}\r\n\r\n// declared in <__msvc_formatter.hpp>\r\ntemplate <class _CharT>\r\ntemplate <class _FormatContext, class _Func>\r\n_NODISCARD _FormatContext::iterator _Fill_align_and_width_formatter<_CharT>::_Format(\r\n    _FormatContext& _Format_ctx, const int _Width, _Fmt_align _Default_align, _Func&& _Fn) const {\r\n    _Fill_align_and_width_specs _Format_specs = _Specs;\r\n    if (_Specs._Dynamic_width_index >= 0) {\r\n        _Format_specs._Width =\r\n            _Get_dynamic_specs<_Width_checker>(_Format_ctx.arg(static_cast<size_t>(_Specs._Dynamic_width_index)));\r\n    }\r\n\r\n    return _Write_aligned(_Format_ctx.out(), _Width, _Format_specs, _Default_align, _STD forward<_Func>(_Fn));\r\n}\r\n#endif // _HAS_CXX23\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _FORMAT_\r\n"
  },
  {
    "path": "stl/inc/forward_list",
    "content": "// forward_list standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _FORWARD_LIST_\r\n#define _FORWARD_LIST_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <xmemory>\r\n\r\n#if _HAS_CXX17\r\n#include <xpolymorphic_allocator.h>\r\n#endif // _HAS_CXX17\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _Mylist, class _Base = _Iterator_base0>\r\nclass _Flist_unchecked_const_iterator : public _Base {\r\npublic:\r\n    using iterator_category = forward_iterator_tag;\r\n\r\n    using _Nodeptr        = typename _Mylist::_Nodeptr;\r\n    using value_type      = typename _Mylist::value_type;\r\n    using difference_type = typename _Mylist::difference_type;\r\n    using pointer         = typename _Mylist::const_pointer;\r\n    using reference       = const value_type&;\r\n\r\n    _Flist_unchecked_const_iterator() noexcept : _Ptr() {}\r\n\r\n    _Flist_unchecked_const_iterator(_Nodeptr _Pnode, const _Mylist* _Plist) noexcept : _Ptr(_Pnode) {\r\n        this->_Adopt(_Plist);\r\n    }\r\n\r\n    _NODISCARD reference operator*() const noexcept {\r\n        return _Ptr->_Myval;\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _Flist_unchecked_const_iterator& operator++() noexcept {\r\n        _Ptr = _Ptr->_Next;\r\n        return *this;\r\n    }\r\n\r\n    _Flist_unchecked_const_iterator operator++(int) noexcept {\r\n        _Flist_unchecked_const_iterator _Tmp = *this;\r\n        _Ptr                                 = _Ptr->_Next;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD bool operator==(const _Flist_unchecked_const_iterator& _Right) const noexcept {\r\n        return _Ptr == _Right._Ptr;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD bool operator!=(const _Flist_unchecked_const_iterator& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    _NODISCARD bool operator==(_Default_sentinel) const noexcept {\r\n        return _Ptr == nullptr;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD bool operator!=(_Default_sentinel) const noexcept {\r\n        return _Ptr != nullptr;\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    _Nodeptr _Ptr; // pointer to node\r\n};\r\n\r\ntemplate <class _Mylist>\r\nclass _Flist_unchecked_iterator : public _Flist_unchecked_const_iterator<_Mylist> {\r\npublic:\r\n    using _Mybase           = _Flist_unchecked_const_iterator<_Mylist>;\r\n    using iterator_category = forward_iterator_tag;\r\n\r\n    using _Nodeptr        = typename _Mylist::_Nodeptr;\r\n    using value_type      = typename _Mylist::value_type;\r\n    using difference_type = typename _Mylist::difference_type;\r\n    using pointer         = typename _Mylist::pointer;\r\n    using reference       = value_type&;\r\n\r\n    using _Mybase::_Mybase;\r\n\r\n    _NODISCARD reference operator*() const noexcept {\r\n        return const_cast<reference>(_Mybase::operator*());\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _Flist_unchecked_iterator& operator++() noexcept {\r\n        _Mybase::operator++();\r\n        return *this;\r\n    }\r\n\r\n    _Flist_unchecked_iterator operator++(int) noexcept {\r\n        _Flist_unchecked_iterator _Tmp = *this;\r\n        _Mybase::operator++();\r\n        return _Tmp;\r\n    }\r\n};\r\n\r\ntemplate <class _Mylist>\r\nclass _Flist_const_iterator : public _Flist_unchecked_const_iterator<_Mylist, _Iterator_base> {\r\npublic:\r\n    using _Mybase           = _Flist_unchecked_const_iterator<_Mylist, _Iterator_base>;\r\n    using iterator_category = forward_iterator_tag;\r\n\r\n    using _Nodeptr        = typename _Mylist::_Nodeptr;\r\n    using value_type      = typename _Mylist::value_type;\r\n    using difference_type = typename _Mylist::difference_type;\r\n    using pointer         = typename _Mylist::const_pointer;\r\n    using reference       = const value_type&;\r\n\r\n    using _Mybase::_Mybase;\r\n\r\n    _NODISCARD reference operator*() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        const auto _Mycont = static_cast<const _Mylist*>(this->_Getcont());\r\n        _STL_VERIFY(_Mycont, \"cannot dereference value-initialized forward_list iterator\");\r\n        _STL_VERIFY(this->_Ptr != _Mycont->_Before_head(), \"cannot dereference forward_list before_begin\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        return this->_Ptr->_Myval;\r\n    }\r\n\r\n    _Flist_const_iterator& operator++() noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(this->_Getcont(), \"forward_list iterator not incrementable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        this->_Ptr = this->_Ptr->_Next;\r\n        return *this;\r\n    }\r\n\r\n    _Flist_const_iterator operator++(int) noexcept {\r\n        _Flist_const_iterator _Tmp = *this;\r\n        this->_Ptr                 = this->_Ptr->_Next;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD bool operator==(const _Flist_const_iterator& _Right) const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(this->_Getcont() == _Right._Getcont(), \"forward_list iterators incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        return this->_Ptr == _Right._Ptr;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD bool operator!=(const _Flist_const_iterator& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    friend void _Verify_range(const _Flist_const_iterator& _First, const _Flist_const_iterator& _Last) noexcept {\r\n        _STL_VERIFY(\r\n            _First._Getcont() == _Last._Getcont(), \"forward_list iterators in range are from different containers\");\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n    using _Prevent_inheriting_unwrap = _Flist_const_iterator;\r\n\r\n    _NODISCARD _Flist_unchecked_const_iterator<_Mylist> _Unwrapped() const noexcept {\r\n        return _Flist_unchecked_const_iterator<_Mylist>(this->_Ptr, static_cast<const _Mylist*>(this->_Getcont()));\r\n    }\r\n\r\n    void _Seek_to(const _Flist_unchecked_const_iterator<_Mylist> _It) noexcept {\r\n        this->_Ptr = _It._Ptr;\r\n    }\r\n};\r\n\r\ntemplate <class _Mylist>\r\nclass _Flist_iterator : public _Flist_const_iterator<_Mylist> {\r\npublic:\r\n    using _Mybase           = _Flist_const_iterator<_Mylist>;\r\n    using iterator_category = forward_iterator_tag;\r\n\r\n    using _Nodeptr        = typename _Mylist::_Nodeptr;\r\n    using value_type      = typename _Mylist::value_type;\r\n    using difference_type = typename _Mylist::difference_type;\r\n    using pointer         = typename _Mylist::pointer;\r\n    using reference       = value_type&;\r\n\r\n    using _Mybase::_Mybase;\r\n\r\n    _NODISCARD reference operator*() const noexcept {\r\n        return const_cast<reference>(_Mybase::operator*());\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _Flist_iterator& operator++() noexcept {\r\n        _Mybase::operator++();\r\n        return *this;\r\n    }\r\n\r\n    _Flist_iterator operator++(int) noexcept {\r\n        _Flist_iterator _Tmp = *this;\r\n        _Mybase::operator++();\r\n        return _Tmp;\r\n    }\r\n\r\n    using _Prevent_inheriting_unwrap = _Flist_iterator;\r\n\r\n    _NODISCARD _Flist_unchecked_iterator<_Mylist> _Unwrapped() const noexcept {\r\n        return _Flist_unchecked_iterator<_Mylist>(this->_Ptr, static_cast<const _Mylist*>(this->_Getcont()));\r\n    }\r\n};\r\n\r\ntemplate <class _Value_type, class _Size_type, class _Difference_type, class _Pointer, class _Const_pointer,\r\n    class _Nodeptr_type>\r\nstruct _Flist_iter_types {\r\n    using value_type      = _Value_type;\r\n    using size_type       = _Size_type;\r\n    using difference_type = _Difference_type;\r\n    using pointer         = _Pointer;\r\n    using const_pointer   = _Const_pointer;\r\n    using _Nodeptr        = _Nodeptr_type;\r\n};\r\n\r\ntemplate <class _Value_type, class _Voidptr>\r\nstruct _Flist_node { // forward_list node\r\n    using _Nodeptr = _Rebind_pointer_t<_Voidptr, _Flist_node>;\r\n\r\n    _Nodeptr _Next;\r\n    _Value_type _Myval = _Returns_exactly<_Value_type>(); // fake a viable constructor to workaround GH-2749\r\n\r\n    _Flist_node()                              = default;\r\n    _Flist_node(const _Flist_node&)            = delete;\r\n    _Flist_node& operator=(const _Flist_node&) = delete;\r\n\r\n    template <class _Alnode>\r\n    static void _Freenode(_Alnode& _Al, _Nodeptr _Pnode) noexcept {\r\n        _Destroy_in_place(_Pnode->_Next);\r\n        allocator_traits<_Alnode>::destroy(_Al, _STD addressof(_Pnode->_Myval));\r\n        _Al.deallocate(_Pnode, 1);\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Flist_simple_types : _Simple_types<_Ty> {\r\n    using _Node    = _Flist_node<_Ty, void*>;\r\n    using _Nodeptr = _Node*;\r\n};\r\n\r\ntemplate <class _Val_types>\r\nclass _Flist_val : public _Container_base {\r\npublic:\r\n    using _Nodeptr = typename _Val_types::_Nodeptr;\r\n    using _Node    = typename pointer_traits<_Nodeptr>::element_type;\r\n\r\n    using value_type      = typename _Val_types::value_type;\r\n    using size_type       = typename _Val_types::size_type;\r\n    using difference_type = typename _Val_types::difference_type;\r\n    using pointer         = typename _Val_types::pointer;\r\n    using const_pointer   = typename _Val_types::const_pointer;\r\n    using reference       = value_type&;\r\n    using const_reference = const value_type&;\r\n\r\n    _Flist_val() noexcept : _Myhead() {} // initialize data\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n    ~_Flist_val() noexcept {\r\n        if constexpr (is_pointer_v<_Nodeptr>) {\r\n            const auto _Tombstone{reinterpret_cast<_Nodeptr>(_MSVC_STL_UINTPTR_TOMBSTONE_VALUE)};\r\n            _Myhead = _Tombstone;\r\n        }\r\n    }\r\n#endif // _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n\r\n    _Nodeptr _Before_head() const noexcept { // return pointer to the \"before begin\" pseudo node\r\n        return pointer_traits<_Nodeptr>::pointer_to(reinterpret_cast<_Node&>(const_cast<_Nodeptr&>(_Myhead)));\r\n    }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    void _Orphan_ptr(_Nodeptr _Ptr) noexcept { // orphan iterators with specified node pointers\r\n        const auto _BHead = _Before_head();\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        _Iterator_base12** _Pnext = &this->_Myproxy->_Myfirstiter;\r\n        while (*_Pnext) {\r\n            const auto _Pnextptr = static_cast<_Flist_const_iterator<_Flist_val>&>(**_Pnext)._Ptr;\r\n            if (_Pnextptr == _BHead || (_Ptr != nullptr && _Pnextptr != _Ptr)) {\r\n                _Pnext = &(*_Pnext)->_Mynextiter;\r\n            } else { // orphan the iterator\r\n                (*_Pnext)->_Myproxy = nullptr;\r\n                *_Pnext             = (*_Pnext)->_Mynextiter;\r\n            }\r\n        }\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n    template <class _Pr2>\r\n    static _Nodeptr _Inplace_merge(_Nodeptr _BFirst1, const _Nodeptr _BMid, const _Nodeptr _BLast, _Pr2 _Pred) {\r\n        // Merge the sorted ranges (_BFirst1, _BMid] and (_BMid, _BLast)\r\n        // Returns one before the new logical end of the range.\r\n        auto _First2 = _BMid->_Next;\r\n        for (;;) { // process 1 splice\r\n            _Nodeptr _First1;\r\n            for (;;) { // advance _BFirst1 over elements already in position\r\n                if (_BFirst1 == _BMid) {\r\n                    return _BLast;\r\n                }\r\n\r\n                _First1 = _BFirst1->_Next;\r\n                if (_DEBUG_LT_PRED(_Pred, _First2->_Myval, _First1->_Myval)) {\r\n                    // _First2->_Myval is out of order\r\n                    break;\r\n                }\r\n\r\n                // _First1->_Myval is already in position; advance\r\n                _BFirst1 = _First1;\r\n            }\r\n\r\n            // find the end of the \"run\" of elements less than _First1->_Myval in the 2nd range\r\n            auto _BRun_end = _First2;\r\n            _Nodeptr _Run_end;\r\n            for (;;) {\r\n                _Run_end = _BRun_end->_Next;\r\n                if (_BRun_end == _BLast) {\r\n                    break;\r\n                }\r\n\r\n                if (!_DEBUG_LT_PRED(_Pred, _Run_end->_Myval, _First1->_Myval)) {\r\n                    // _Run_end is the first element in (_BMid->_Myval, _BLast->_Myval) that shouldn't precede\r\n                    // _First1->_Myval.\r\n                    // After the splice _First1->_Myval will be in position and must not be compared again.\r\n                    break;\r\n                }\r\n\r\n                _BRun_end = _Run_end;\r\n            }\r\n\r\n            _BMid->_Next     = _Run_end; // snip out the run from its old position\r\n            _BFirst1->_Next  = _First2; // insert into new position\r\n            _BRun_end->_Next = _First1;\r\n            if (_BRun_end == _BLast) {\r\n                return _BMid;\r\n            }\r\n\r\n            _BFirst1 = _First1;\r\n            _First2  = _Run_end;\r\n        }\r\n    }\r\n\r\n    template <class _Pr2>\r\n    static _Nodeptr _Sort2(const _Nodeptr _BFirst, _Pr2 _Pred) {\r\n        // Sort (_BFirst, _BFirst + 2], unless nullptr is encountered.\r\n        // Returns a pointer one before the end of the sorted region.\r\n        const auto _First1 = _BFirst->_Next;\r\n        if (!_First1) {\r\n            return _BFirst;\r\n        }\r\n\r\n        auto _First2 = _First1->_Next;\r\n        if (!_First2 || !_DEBUG_LT_PRED(_Pred, _First2->_Myval, _First1->_Myval)) {\r\n            return _First1;\r\n        }\r\n\r\n        // swap _First2 and _First1\r\n        _First1->_Next = _First2->_Next; // snip out *_First2\r\n        _BFirst->_Next = _First2; // insert *_First2 before *_First1\r\n        _First2->_Next = _First1;\r\n        return _First2;\r\n    }\r\n\r\n    template <class _Pr2>\r\n    static _Nodeptr _Sort(const _Nodeptr _BFirst, size_type _Bound, _Pr2 _Pred) {\r\n        // Sort (_BFirst, _BFirst + _Bound), unless nullptr is encountered.\r\n        // Returns a pointer one before the end of the sorted region.\r\n        if (_Bound <= 2) {\r\n            return _Sort2(_BFirst, _Pred);\r\n        }\r\n\r\n        const auto _Half_bound = _Bound / 2;\r\n        const auto _BMid       = _Sort(_BFirst, _Half_bound, _Pred);\r\n        if (!_BMid->_Next) {\r\n            return _BMid;\r\n        }\r\n\r\n        const auto _BLast = _Sort(_BMid, _Half_bound, _Pred);\r\n        return _Inplace_merge(_BFirst, _BMid, _BLast, _Pred);\r\n    }\r\n\r\n    template <class _Pr2>\r\n    static void _Sort(_Nodeptr _BFirst, _Pr2 _Pred) {\r\n        auto _BMid       = _Sort2(_BFirst, _Pred);\r\n        size_type _Bound = 2;\r\n        do {\r\n            if (!_BMid->_Next) {\r\n                return;\r\n            }\r\n\r\n            const auto _BLast = _Sort(_BMid, _Bound, _Pred);\r\n            _BMid             = _Inplace_merge(_BFirst, _BMid, _BLast, _Pred);\r\n            _Bound <<= 1;\r\n        } while (_Bound != 0);\r\n    }\r\n\r\n    _Nodeptr _Myhead; // pointer to head node\r\n};\r\n\r\ntemplate <class _Alnode>\r\nstruct _Flist_insert_after_op2 {\r\n    // forward_list insert-after operation which maintains exception safety\r\n    using _Alnode_traits = allocator_traits<_Alnode>;\r\n    using pointer        = typename _Alnode_traits::pointer;\r\n    using value_type     = typename _Alnode_traits::value_type;\r\n\r\n    explicit _Flist_insert_after_op2(_Alnode& _Al_) : _Al(_Al_), _Tail() {}\r\n\r\n    _Flist_insert_after_op2(const _Flist_insert_after_op2&)            = delete;\r\n    _Flist_insert_after_op2& operator=(const _Flist_insert_after_op2&) = delete;\r\n\r\n    template <class... _CArgT>\r\n    void _Append_n(typename _Alnode_traits::size_type _Count, const _CArgT&... _Carg) {\r\n        // Append _Count elements, constructed from _Carg\r\n        if (_Count <= 0) {\r\n            return;\r\n        }\r\n\r\n        _Alloc_construct_ptr<_Alnode> _Newnode(_Al);\r\n        if (_Tail == pointer{}) {\r\n            _Newnode._Allocate(); // throws\r\n            _Alnode_traits::construct(_Al, _STD addressof(_Newnode._Ptr->_Myval), _Carg...); // throws\r\n            _Head = _Newnode._Ptr;\r\n            _Tail = _Newnode._Ptr;\r\n            --_Count;\r\n        }\r\n\r\n        for (; 0 < _Count; --_Count) {\r\n            _Newnode._Allocate(); // throws\r\n            _Alnode_traits::construct(_Al, _STD addressof(_Newnode._Ptr->_Myval), _Carg...); // throws\r\n            _Construct_in_place(_Tail->_Next, _Newnode._Ptr);\r\n            _Tail = _Newnode._Ptr;\r\n        }\r\n\r\n        (void) _Newnode._Release();\r\n    }\r\n\r\n    template <class _InIt, class _Sentinel>\r\n    void _Append_range_unchecked(_InIt _First, const _Sentinel _Last) {\r\n        // Append the values in [_First, _Last)\r\n        if (_First == _Last) { // throws\r\n            return;\r\n        }\r\n\r\n        _Alloc_construct_ptr<_Alnode> _Newnode(_Al);\r\n        if (_Tail == pointer{}) {\r\n            _Newnode._Allocate(); // throws\r\n            _Alnode_traits::construct(_Al, _STD addressof(_Newnode._Ptr->_Myval), *_First); // throws\r\n            const auto _Newhead = _Newnode._Release();\r\n            _Head               = _Newhead;\r\n            _Tail               = _Newhead;\r\n            ++_First; // throws\r\n        }\r\n\r\n        while (_First != _Last) { // throws\r\n            _Newnode._Allocate(); // throws\r\n            _Alnode_traits::construct(_Al, _STD addressof(_Newnode._Ptr->_Myval), *_First); // throws\r\n            const auto _Newtail = _Newnode._Release();\r\n            _Construct_in_place(_Tail->_Next, _Newtail);\r\n            _Tail = _Newtail;\r\n            ++_First; // throws\r\n        }\r\n    }\r\n\r\n    pointer _Attach_after(pointer _After) noexcept {\r\n        // Attaches the elements in *this after _After, and resets *this to the default-initialized state\r\n        const auto _Local_tail = _Tail;\r\n        if (_Local_tail == pointer{}) {\r\n            return _After;\r\n        }\r\n\r\n        _Construct_in_place(_Local_tail->_Next, _After->_Next);\r\n        _After->_Next = _Head;\r\n        _Tail         = pointer{};\r\n\r\n        return _Local_tail;\r\n    }\r\n\r\n    ~_Flist_insert_after_op2() {\r\n        if (_Tail == pointer{}) {\r\n            return;\r\n        }\r\n\r\n        _Construct_in_place(_Tail->_Next, pointer{});\r\n        pointer _Subject = _Head;\r\n        while (_Subject) {\r\n            value_type::_Freenode(_Al, _STD exchange(_Subject, _Subject->_Next));\r\n        }\r\n    }\r\n\r\nprivate:\r\n    _Alnode& _Al;\r\n    pointer _Tail; // Points to the most recently constructed node. If pointer{}, the value of _Head is indeterminate.\r\n                   // _Tail->_Next is not constructed.\r\n    pointer _Head; // Points at the first constructed node.\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc = allocator<_Ty>>\r\nclass forward_list { // singly linked list\r\nprivate:\r\n    using _Alty          = _Rebind_alloc_t<_Alloc, _Ty>;\r\n    using _Alty_traits   = allocator_traits<_Alty>;\r\n    using _Node          = _Flist_node<_Ty, typename _Alty_traits::void_pointer>;\r\n    using _Alnode        = _Rebind_alloc_t<_Alloc, _Node>;\r\n    using _Alnode_traits = allocator_traits<_Alnode>;\r\n    using _Nodeptr       = typename _Alnode_traits::pointer;\r\n\r\n    static_assert(!_ENFORCE_MATCHING_ALLOCATORS || is_same_v<_Ty, typename _Alloc::value_type>,\r\n        _MISMATCHED_ALLOCATOR_MESSAGE(\"forward_list<T, Allocator>\", \"T\"));\r\n    static_assert(is_object_v<_Ty>, \"The C++ Standard forbids containers of non-object types \"\r\n                                    \"because of [container.requirements].\");\r\n\r\n    using _Scary_val = _Flist_val<conditional_t<_Is_simple_alloc_v<_Alnode>, _Flist_simple_types<_Ty>,\r\n        _Flist_iter_types<_Ty, typename _Alty_traits::size_type, typename _Alty_traits::difference_type,\r\n            typename _Alty_traits::pointer, typename _Alty_traits::const_pointer, _Nodeptr>>>;\r\n\r\npublic:\r\n    using value_type      = _Ty;\r\n    using allocator_type  = _Alloc;\r\n    using size_type       = typename _Alty_traits::size_type;\r\n    using difference_type = typename _Alty_traits::difference_type;\r\n    using pointer         = typename _Alty_traits::pointer;\r\n    using const_pointer   = typename _Alty_traits::const_pointer;\r\n    using reference       = value_type&;\r\n    using const_reference = const value_type&;\r\n\r\n    using iterator                  = _Flist_iterator<_Scary_val>;\r\n    using const_iterator            = _Flist_const_iterator<_Scary_val>;\r\n    using _Unchecked_iterator       = _Flist_unchecked_iterator<_Scary_val>;\r\n    using _Unchecked_const_iterator = _Flist_unchecked_const_iterator<_Scary_val>;\r\n\r\n    forward_list() noexcept(is_nothrow_default_constructible_v<_Alnode>) // strengthened\r\n        : _Mypair(_Zero_then_variadic_args_t{}) {\r\n        _Alloc_proxy();\r\n    }\r\n\r\n    explicit forward_list(_CRT_GUARDOVERFLOW size_type _Count, const _Alloc& _Al = _Alloc())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) { // construct list from _Count * _Ty(), optional allocator\r\n        _Flist_insert_after_op2<_Alnode> _Insert_op(_Getal());\r\n        _Insert_op._Append_n(_Count);\r\n        _Alloc_proxy();\r\n        _Insert_op._Attach_after(_Mypair._Myval2._Before_head());\r\n    }\r\n\r\n    forward_list(_CRT_GUARDOVERFLOW size_type _Count, const _Ty& _Val)\r\n        : _Mypair(_Zero_then_variadic_args_t{}) { // construct list from _Count * _Val\r\n        _Flist_insert_after_op2<_Alnode> _Insert_op(_Getal());\r\n        _Insert_op._Append_n(_Count, _Val);\r\n        _Alloc_proxy();\r\n        _Insert_op._Attach_after(_Mypair._Myval2._Before_head());\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _Alloc2 = _Alloc, enable_if_t<_Is_allocator<_Alloc2>::value, int> = 0>\r\n#endif // _HAS_CXX17\r\n    forward_list(_CRT_GUARDOVERFLOW size_type _Count, const _Ty& _Val, const _Alloc& _Al)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) { // construct list from _Count * _Val, allocator\r\n        _Flist_insert_after_op2<_Alnode> _Insert_op(_Getal());\r\n        _Insert_op._Append_n(_Count, _Val);\r\n        _Alloc_proxy();\r\n        _Insert_op._Attach_after(_Mypair._Myval2._Before_head());\r\n    }\r\n\r\n    explicit forward_list(const _Alloc& _Al) noexcept // strengthened\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Alloc_proxy();\r\n    }\r\n\r\n    forward_list(const forward_list& _Right)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Alnode_traits::select_on_container_copy_construction(_Right._Getal())) {\r\n        _Flist_insert_after_op2<_Alnode> _Insert_op(_Getal());\r\n        _Insert_op._Append_range_unchecked(_Right._Unchecked_begin(), _Right._Unchecked_end());\r\n        _Alloc_proxy();\r\n        _Insert_op._Attach_after(_Mypair._Myval2._Before_head());\r\n    }\r\n\r\n    forward_list(const forward_list& _Right, const _Identity_t<_Alloc>& _Al)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Flist_insert_after_op2<_Alnode> _Insert_op(_Getal());\r\n        _Insert_op._Append_range_unchecked(_Right._Unchecked_begin(), _Right._Unchecked_end());\r\n        _Alloc_proxy();\r\n        _Insert_op._Attach_after(_Mypair._Myval2._Before_head());\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    forward_list(_Iter _First, _Iter _Last) : _Mypair(_Zero_then_variadic_args_t{}) {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        _Flist_insert_after_op2<_Alnode> _Insert_op(_Getal());\r\n        _Insert_op._Append_range_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last));\r\n        _Alloc_proxy();\r\n        _Insert_op._Attach_after(_Mypair._Myval2._Before_head());\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    forward_list(_Iter _First, _Iter _Last, const _Alloc& _Al) : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        _Flist_insert_after_op2<_Alnode> _Insert_op(_Getal());\r\n        _Insert_op._Append_range_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last));\r\n        _Alloc_proxy();\r\n        _Insert_op._Attach_after(_Mypair._Myval2._Before_head());\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    forward_list(from_range_t, _Rng&& _Range) : _Mypair(_Zero_then_variadic_args_t{}) {\r\n        _Flist_insert_after_op2<_Alnode> _Insert_op(_Getal());\r\n        _Insert_op._Append_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n        _Alloc_proxy();\r\n        _Insert_op._Attach_after(_Mypair._Myval2._Before_head());\r\n    }\r\n\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    forward_list(from_range_t, _Rng&& _Range, const _Alloc& _Al) : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Flist_insert_after_op2<_Alnode> _Insert_op(_Getal());\r\n        _Insert_op._Append_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n        _Alloc_proxy();\r\n        _Insert_op._Attach_after(_Mypair._Myval2._Before_head());\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    forward_list(forward_list&& _Right) noexcept // strengthened\r\n        : _Mypair(_One_then_variadic_args_t{}, _STD move(_Right._Getal())) {\r\n        _Alloc_proxy();\r\n        _Take_head(_Right);\r\n    }\r\n\r\n    forward_list(forward_list&& _Right, const _Identity_t<_Alloc>& _Al)\r\n        noexcept(_Alnode_traits::is_always_equal::value) // strengthened\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        if constexpr (!_Alty_traits::is_always_equal::value) {\r\n            if (_Getal() != _Right._Getal()) {\r\n                _Flist_insert_after_op2<_Alnode> _Insert_op(_Getal());\r\n                _Insert_op._Append_range_unchecked(\r\n                    _STD make_move_iterator(_Right._Unchecked_begin()), _Default_sentinel{});\r\n                _Alloc_proxy();\r\n                _Insert_op._Attach_after(_Mypair._Myval2._Before_head());\r\n                return;\r\n            }\r\n        }\r\n\r\n        _Alloc_proxy();\r\n        _Take_head(_Right);\r\n    }\r\n\r\n    forward_list& operator=(forward_list&& _Right)\r\n        noexcept(_Choose_pocma_v<_Alnode> != _Pocma_values::_No_propagate_allocators) /* strengthened */ {\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n        auto& _Al                 = _Getal();\r\n        auto& _Right_al           = _Right._Getal();\r\n        constexpr auto _Pocma_val = _Choose_pocma_v<_Alnode>;\r\n        if constexpr (_Pocma_val == _Pocma_values::_Propagate_allocators) {\r\n            if (_Al != _Right_al) {\r\n                _Mypair._Myval2._Orphan_all();\r\n                clear();\r\n                _Mypair._Myval2._Reload_proxy(_STD _Get_proxy_allocator(_Al), _STD _Get_proxy_allocator(_Right_al));\r\n                _Pocma(_Al, _Right_al);\r\n                _Take_head(_Right);\r\n                return *this;\r\n            }\r\n        } else if constexpr (_Pocma_val == _Pocma_values::_No_propagate_allocators) {\r\n            if (_Al != _Right_al) {\r\n                _Assign_unchecked(_STD make_move_iterator(_Right._Unchecked_begin()), _Right._Unchecked_end());\r\n                return *this;\r\n            }\r\n        }\r\n\r\n        clear();\r\n        _Pocma(_Al, _Right_al);\r\n        _Take_head(_Right);\r\n        return *this;\r\n    }\r\n\r\nprivate:\r\n    void _Take_head(forward_list& _Right) noexcept { // take contents from _Right, same allocator\r\n        _Swap_proxy_and_iterators(_Right);\r\n        _Mypair._Myval2._Myhead = _STD exchange(_Right._Mypair._Myval2._Myhead, nullptr);\r\n    }\r\n\r\npublic:\r\n    void push_front(_Ty&& _Val) { // insert element at beginning\r\n        _Insert_after(_Mypair._Myval2._Before_head(), _STD move(_Val));\r\n    }\r\n\r\n    iterator insert_after(const_iterator _Where, _Ty&& _Val) { // insert _Val after _Where\r\n        return emplace_after(_Where, _STD move(_Val));\r\n    }\r\n\r\n    template <class... _Valty>\r\n    _CONTAINER_EMPLACE_RETURN emplace_front(_Valty&&... _Val) { // insert element at beginning\r\n        _Insert_after(_Mypair._Myval2._Before_head(), _STD forward<_Valty>(_Val)...);\r\n\r\n#if _HAS_CXX17\r\n        return front();\r\n#endif // _HAS_CXX17\r\n    }\r\n\r\n    template <class... _Valty>\r\n    iterator emplace_after(const_iterator _Where, _Valty&&... _Val) { // insert element after _Where\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(\r\n            _Where._Getcont() == _STD addressof(_Mypair._Myval2), \"forward_list emplace_after iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        _Insert_after(_Where._Ptr, _STD forward<_Valty>(_Val)...);\r\n        return _Make_iter(_Where._Ptr->_Next);\r\n    }\r\n\r\nprivate:\r\n    template <class... _Valty>\r\n    void _Insert_after(_Nodeptr _Pnode, _Valty&&... _Val) { // insert element after _Where\r\n        _Alloc_construct_ptr<_Alnode> _Newnode(_Getal());\r\n        _Newnode._Allocate(); // throws\r\n        _Alnode_traits::construct(\r\n            _Newnode._Al, _STD addressof(_Newnode._Ptr->_Myval), _STD forward<_Valty>(_Val)...); // throws\r\n        _Construct_in_place(_Newnode._Ptr->_Next, _Pnode->_Next);\r\n        _Pnode->_Next = _Newnode._Release();\r\n    }\r\n\r\npublic:\r\n    forward_list(initializer_list<_Ty> _Ilist, const _Alloc& _Al = allocator_type())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        auto _Alproxy = _STD _Get_proxy_allocator(_Getal());\r\n        _Container_proxy_ptr<_Alty> _Proxy(_Alproxy, _Mypair._Myval2);\r\n        insert_after(before_begin(), _Ilist.begin(), _Ilist.end());\r\n        _Proxy._Release();\r\n    }\r\n\r\n    forward_list& operator=(initializer_list<_Ty> _Ilist) {\r\n        assign(_Ilist.begin(), _Ilist.end());\r\n        return *this;\r\n    }\r\n\r\n    void assign(initializer_list<_Ty> _Ilist) {\r\n        assign(_Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\n    iterator insert_after(const_iterator _Where,\r\n        initializer_list<_Ty> _Ilist) { // insert initializer_list\r\n        return insert_after(_Where, _Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\n    ~forward_list() noexcept {\r\n        clear();\r\n#if _ITERATOR_DEBUG_LEVEL != 0 // TRANSITION, ABI\r\n        auto _Alproxy = _STD _Get_proxy_allocator(_Getal());\r\n        _Delete_plain_internal(_Alproxy, _Mypair._Myval2._Myproxy);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    forward_list& operator=(const forward_list& _Right) {\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n        auto& _Al       = _Getal();\r\n        auto& _Right_al = _Right._Getal();\r\n        if constexpr (_Choose_pocca_v<_Alnode>) {\r\n            if (_Al != _Right_al) {\r\n                _Mypair._Myval2._Orphan_all();\r\n                clear();\r\n                _Mypair._Myval2._Reload_proxy(_STD _Get_proxy_allocator(_Al), _STD _Get_proxy_allocator(_Right_al));\r\n            }\r\n        }\r\n\r\n        _Pocca(_Al, _Right_al);\r\n        _Assign_unchecked(_Right._Unchecked_begin(), _Right._Unchecked_end());\r\n\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD iterator before_begin() noexcept {\r\n        return iterator(_Mypair._Myval2._Before_head(), _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _NODISCARD const_iterator before_begin() const noexcept {\r\n        return const_iterator(_Mypair._Myval2._Before_head(), _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _NODISCARD const_iterator cbefore_begin() const noexcept {\r\n        return before_begin();\r\n    }\r\n\r\n    _NODISCARD iterator begin() noexcept {\r\n        return iterator(_Mypair._Myval2._Myhead, _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _NODISCARD const_iterator begin() const noexcept {\r\n        return const_iterator(_Mypair._Myval2._Myhead, _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _NODISCARD iterator end() noexcept {\r\n        return iterator(nullptr, _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _NODISCARD const_iterator end() const noexcept {\r\n        return const_iterator(nullptr, _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _Unchecked_iterator _Unchecked_before_begin() noexcept {\r\n        return _Unchecked_iterator(_Mypair._Myval2._Before_head(), nullptr);\r\n    }\r\n\r\n    _Unchecked_iterator _Unchecked_begin() noexcept {\r\n        return _Unchecked_iterator(_Mypair._Myval2._Myhead, nullptr);\r\n    }\r\n\r\n    _Unchecked_const_iterator _Unchecked_begin() const noexcept {\r\n        return _Unchecked_const_iterator(_Mypair._Myval2._Myhead, nullptr);\r\n    }\r\n\r\n    _Default_sentinel _Unchecked_end() const noexcept {\r\n        return {};\r\n    }\r\n\r\n    _Unchecked_const_iterator _Unchecked_end_iter() const noexcept {\r\n        return _Unchecked_const_iterator(nullptr, nullptr);\r\n    }\r\n\r\n    iterator _Make_iter(_Nodeptr _Where) const noexcept {\r\n        return iterator(_Where, _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _NODISCARD const_iterator cbegin() const noexcept {\r\n        return begin();\r\n    }\r\n\r\n    _NODISCARD const_iterator cend() const noexcept {\r\n        return end();\r\n    }\r\n\r\nprivate:\r\n    template <class... _Args>\r\n    void _Resize(_CRT_GUARDOVERFLOW size_type _Newsize, const _Args&... _Vals) {\r\n        auto& _Al = _Getal();\r\n        auto _Ptr = _Mypair._Myval2._Before_head();\r\n        for (;;) {\r\n            auto _Next = _Ptr->_Next;\r\n            if (!_Next) {\r\n                // list too short, insert remaining _Newsize objects initialized from _Vals...\r\n                _Flist_insert_after_op2<_Alnode> _Insert_op(_Al);\r\n                _Insert_op._Append_n(_Newsize, _Vals...);\r\n                _Insert_op._Attach_after(_Ptr);\r\n                return;\r\n            }\r\n\r\n            if (_Newsize == 0) {\r\n                // list is too long, erase the _Next and after\r\n                _Ptr->_Next = nullptr;\r\n                do {\r\n                    const auto _Nextafter = _Next->_Next;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n                    _Mypair._Myval2._Orphan_ptr(_Next);\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n                    _Node::_Freenode(_Al, _Next);\r\n                    _Next = _Nextafter;\r\n                } while (_Next);\r\n\r\n                return;\r\n            }\r\n\r\n            _Ptr = _Next;\r\n            --_Newsize;\r\n        }\r\n    }\r\n\r\npublic:\r\n    void resize(_CRT_GUARDOVERFLOW size_type _Newsize) {\r\n        _Resize(_Newsize);\r\n    }\r\n\r\n    void resize(_CRT_GUARDOVERFLOW size_type _Newsize, const _Ty& _Val) {\r\n        _Resize(_Newsize, _Val);\r\n    }\r\n\r\n    _NODISCARD size_type max_size() const noexcept {\r\n        return (_STD min) (static_cast<size_type>(_STD _Max_limit<difference_type>()), //\r\n            _Alnode_traits::max_size(_Getal()));\r\n    }\r\n\r\n    _NODISCARD_EMPTY_MEMBER bool empty() const noexcept {\r\n        return _Mypair._Myval2._Myhead == nullptr;\r\n    }\r\n\r\n    _NODISCARD allocator_type get_allocator() const noexcept {\r\n        return static_cast<allocator_type>(_Getal());\r\n    }\r\n\r\n    _NODISCARD reference front() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_FORWARD_LIST || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mypair._Myval2._Myhead != nullptr, \"front() called on empty forward_list\");\r\n#endif\r\n\r\n        return _Mypair._Myval2._Myhead->_Myval;\r\n    }\r\n\r\n    _NODISCARD const_reference front() const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_FORWARD_LIST || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mypair._Myval2._Myhead != nullptr, \"front() called on empty forward_list\");\r\n#endif\r\n\r\n        return _Mypair._Myval2._Myhead->_Myval;\r\n    }\r\n\r\n    void push_front(const _Ty& _Val) {\r\n        _Insert_after(_Mypair._Myval2._Before_head(), _Val);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    void prepend_range(_Rng&& _Range) {\r\n        _Insert_range_after(_Mypair._Myval2._Before_head(), _RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    void pop_front() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_FORWARD_LIST || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mypair._Myval2._Myhead != nullptr, \"pop_front() called on empty forward_list\");\r\n#endif\r\n\r\n        _Erase_after(_Mypair._Myval2._Before_head());\r\n    }\r\n\r\nprivate:\r\n    template <class _UIter, class _Sentinel>\r\n    void _Assign_unchecked(_UIter _UFirst, const _Sentinel _ULast) {\r\n        auto _Myfirst = _Mypair._Myval2._Before_head();\r\n        for (; _UFirst != _ULast; ++_UFirst) {\r\n            const auto _Next = _Myfirst->_Next;\r\n            if (!_Next) {\r\n                _Flist_insert_after_op2<_Alnode> _Insert_op(_Getal());\r\n                _Insert_op._Append_range_unchecked(_STD move(_UFirst), _ULast);\r\n                _Insert_op._Attach_after(_Myfirst);\r\n                return;\r\n            }\r\n\r\n            _Next->_Myval = *_UFirst;\r\n            _Myfirst      = _Next;\r\n        }\r\n\r\n        for (auto _To_delete = _STD exchange(_Myfirst->_Next, nullptr); _To_delete;) {\r\n            const auto _Next = _To_delete->_Next;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n            _Mypair._Myval2._Orphan_ptr(_To_delete);\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n            _Node::_Freenode(_Getal(), _To_delete);\r\n            _To_delete = _Next;\r\n        }\r\n    }\r\n\r\npublic:\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    void assign(_Iter _First, _Iter _Last) {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        _Assign_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    void assign_range(_Rng&& _Range) {\r\n        static_assert(assignable_from<_Ty&, _RANGES range_reference_t<_Rng>>,\r\n            \"Elements must be assignable from the range's reference type (N4993 [sequence.reqmts]/60).\");\r\n        _Assign_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    void assign(_CRT_GUARDOVERFLOW size_type _Count, const _Ty& _Val) {\r\n        clear();\r\n        insert_after(before_begin(), _Count, _Val);\r\n    }\r\n\r\n    iterator insert_after(const_iterator _Where, const _Ty& _Val) { // insert _Val after _Where\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(\r\n            _Where._Getcont() == _STD addressof(_Mypair._Myval2), \"forward_list insert_after location incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        _Insert_after(_Where._Ptr, _Val);\r\n        return _Make_iter(_Where._Ptr->_Next);\r\n    }\r\n\r\n    iterator insert_after(const_iterator _Where, _CRT_GUARDOVERFLOW size_type _Count, const _Ty& _Val) {\r\n        // insert _Count * _Val after _Where\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(\r\n            _Where._Getcont() == _STD addressof(_Mypair._Myval2), \"forward_list insert_after location incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        if (_Count != 0) {\r\n            _Flist_insert_after_op2<_Alnode> _Insert_op(_Getal());\r\n            _Insert_op._Append_n(_Count, _Val);\r\n            _Where._Ptr = _Insert_op._Attach_after(_Where._Ptr);\r\n        }\r\n\r\n        return _Make_iter(_Where._Ptr);\r\n    }\r\n\r\nprivate:\r\n    template <class _Iter, class _Sent>\r\n    iterator _Insert_range_after(_Nodeptr _Pnode, _Iter _First, const _Sent _Last) {\r\n        // insert [_First, _Last) after _Pnode\r\n        if (_First == _Last) {\r\n            return _Make_iter(_Pnode);\r\n        }\r\n\r\n        _Flist_insert_after_op2<_Alnode> _Insert_op(_Getal());\r\n        _Insert_op._Append_range_unchecked(_STD move(_First), _Last);\r\n        return _Make_iter(_Insert_op._Attach_after(_Pnode));\r\n    }\r\n\r\npublic:\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    iterator insert_after(const_iterator _Where, _Iter _First, _Iter _Last) {\r\n        // insert [_First, _Last) after _Where\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(\r\n            _Where._Getcont() == _STD addressof(_Mypair._Myval2), \"forward_list insert_after location incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        return _Insert_range_after(_Where._Ptr, _STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    iterator insert_range_after(const_iterator _Where, _Rng&& _Range) {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2),\r\n            \"forward_list insert_range_after location incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        return _Insert_range_after(_Where._Ptr, _RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\nprivate:\r\n    void _Erase_after(_Nodeptr _Pnode) noexcept { // erase element after _Pnode\r\n        auto _Subject = _Pnode->_Next;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _Mypair._Myval2._Orphan_ptr(_Subject);\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        _Pnode->_Next = _Subject->_Next;\r\n        _Node::_Freenode(_Getal(), _Subject);\r\n    }\r\n\r\npublic:\r\n    iterator erase_after(const_iterator _Where) noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(\r\n            _Where._Getcont() == _STD addressof(_Mypair._Myval2), \"forward_list erase_after iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        _Erase_after(_Where._Ptr);\r\n        return _Make_iter(_Where._Ptr->_Next);\r\n    }\r\n\r\n    iterator erase_after(const_iterator _First, const_iterator _Last) noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        const auto _Mycont = _STD addressof(_Mypair._Myval2);\r\n        _STL_VERIFY(_First._Getcont() == _Mycont && _Last._Getcont() == _Mycont,\r\n            \"forward_list erase_after iterator range from incorrect container\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        auto _Before = _First._Ptr;\r\n        if (_Before != _Last._Ptr) {\r\n            auto& _Al = _Getal();\r\n            for (;;) {\r\n                const auto _Subject = _Before->_Next;\r\n                if (_Subject == _Last._Ptr) {\r\n                    break;\r\n                }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n                _Mypair._Myval2._Orphan_ptr(_Subject);\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n                _Before->_Next = _Subject->_Next;\r\n                _Node::_Freenode(_Al, _Subject);\r\n            }\r\n        }\r\n\r\n        return _Make_iter(_Last._Ptr);\r\n    }\r\n\r\n    void clear() noexcept { // erase all\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _Mypair._Myval2._Orphan_ptr(nullptr);\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        _Nodeptr _Pnext;\r\n        _Nodeptr _Pnode = _STD exchange(_Mypair._Myval2._Myhead, nullptr);\r\n\r\n        auto& _Al = _Getal();\r\n        for (; _Pnode; _Pnode = _Pnext) { // delete an element\r\n            _Pnext = _Pnode->_Next;\r\n            _Node::_Freenode(_Al, _Pnode);\r\n        }\r\n    }\r\n\r\n    void swap(forward_list& _Right) noexcept /* strengthened */ {\r\n        using _STD swap;\r\n        if (this != _STD addressof(_Right)) {\r\n            _Pocs(_Getal(), _Right._Getal());\r\n            _Swap_proxy_and_iterators(_Right);\r\n            swap(_Mypair._Myval2._Myhead, _Right._Mypair._Myval2._Myhead); // intentional ADL\r\n        }\r\n    }\r\n\r\n    void splice_after(const_iterator _Where, forward_list& _Right) noexcept /* strengthened */ {\r\n        // splice all of _Right after _Where\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(\r\n            _Where._Getcont() == _STD addressof(_Mypair._Myval2), \"forward_list splice_after iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        if (this != _STD addressof(_Right) && !_Right.empty()) { // worth splicing, do it\r\n            _Splice_after(_Where._Unwrapped(), _Right, _Right._Unchecked_before_begin(), _Default_sentinel{});\r\n        }\r\n    }\r\n\r\n    void splice_after(const_iterator _Where, forward_list&& _Right) noexcept /* strengthened */ {\r\n        // splice all of _Right after _Where\r\n        splice_after(_Where, _Right);\r\n    }\r\n\r\n    void splice_after(const_iterator _Where, forward_list& _Right, const_iterator _First) noexcept /* strengthened */ {\r\n        // splice _Right (_First, _First + 2) after _Where\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(\r\n            _Where._Getcont() == _STD addressof(_Mypair._Myval2), \"forward_list splice_after iterator outside range\");\r\n        _STL_VERIFY(_First._Getcont() == _STD addressof(_Right._Mypair._Myval2),\r\n            \"forward_list splice_after iterator outside range\");\r\n        _STL_VERIFY(_First._Ptr->_Next != nullptr, \"forward_list splice_after iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        _Splice_after(_Where._Ptr, _Right, _First._Ptr);\r\n    }\r\n\r\n    void splice_after(const_iterator _Where, forward_list&& _Right, const_iterator _First) noexcept /* strengthened */ {\r\n        // splice _Right (_First, _First + 2) after _Where\r\n        splice_after(_Where, _Right, _First);\r\n    }\r\n\r\n    void splice_after(const_iterator _Where, forward_list& _Right, const_iterator _First, const_iterator _Last) noexcept\r\n    /* strengthened */ {\r\n        // splice _Right (_First, _Last) after _Where\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(\r\n            _Where._Getcont() == _STD addressof(_Mypair._Myval2), \"forward_list splice_after iterator outside range\");\r\n        const auto _Rightcont = _STD addressof(_Right._Mypair._Myval2);\r\n        _STL_VERIFY(_First._Getcont() == _Rightcont && _Last._Getcont() == _Rightcont,\r\n            \"forward_list splice_after range outside right\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        _Splice_after(_Where._Unwrapped(), _Right, _First._Unwrapped(), _Last._Unwrapped());\r\n    }\r\n\r\n    void splice_after(const_iterator _Where, forward_list&& _Right, const_iterator _First,\r\n        const_iterator _Last) noexcept /* strengthened */ {\r\n        // splice _Right [_First, _Last) after _Where\r\n        splice_after(_Where, _Right, _First, _Last);\r\n    }\r\n\r\n    struct _Flist_node_remove_op {\r\n        // tracks nodes pending removal in a remove operation, so that program-defined predicates may reference those\r\n        // elements until the removal is complete.\r\n\r\n        explicit _Flist_node_remove_op(forward_list& _List_) noexcept\r\n            : _List(_List_), _Head(), _Tail(_STD addressof(_Head)) {}\r\n\r\n        _Flist_node_remove_op(const _Flist_node_remove_op&)            = delete;\r\n        _Flist_node_remove_op& operator=(const _Flist_node_remove_op&) = delete;\r\n\r\n        _Nodeptr _Transfer_back(const _Nodeptr _Predecessor) noexcept {\r\n            // extract _Predecessor->_Next from the container, and add it to the singly-linked list of nodes to destroy\r\n            // returns the successor of the removed node\r\n\r\n            // snip the node out\r\n            const auto _Removed = _Predecessor->_Next;\r\n            const auto _Next    = _Removed->_Next;\r\n            _Removed->_Next     = nullptr;\r\n            _Predecessor->_Next = _Next;\r\n\r\n            *_Tail = _Removed;\r\n            _Tail  = _STD addressof(_Removed->_Next);\r\n\r\n            return _Next;\r\n        }\r\n\r\n        ~_Flist_node_remove_op() {\r\n            auto& _Al    = _List._Getal();\r\n            auto _Target = _Head;\r\n            while (_Target) {\r\n                auto _Next = _Target->_Next;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n                _List._Mypair._Myval2._Orphan_ptr(_Target);\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n                _Alnode_traits::destroy(_Al, _STD addressof(_Target->_Next));\r\n                _Alnode_traits::destroy(_Al, _STD addressof(_Target->_Myval));\r\n                _Al.deallocate(_Target, 1);\r\n                _Target = _Next;\r\n            }\r\n        }\r\n\r\n        forward_list& _List;\r\n        _Nodeptr _Head;\r\n        _Nodeptr* _Tail;\r\n    };\r\n\r\n    _LIST_REMOVE_RETURN remove(const _Ty& _Val) { // erase each element matching _Val\r\n        return remove_if([&](const _Ty& _Other) -> bool { return _Other == _Val; });\r\n    }\r\n\r\n    template <class _Pr1>\r\n    _LIST_REMOVE_RETURN remove_if(_Pr1 _Pred) { // erase each element satisfying _Pr1\r\n        _Flist_node_remove_op _Op(*this);\r\n        auto _Firstb       = _Unchecked_before_begin();\r\n        size_type _Removed = 0;\r\n\r\n        for (auto _First = _Unchecked_begin(); _First._Ptr;) {\r\n            if (_Pred(*_First)) {\r\n                _First._Ptr = _Op._Transfer_back(_Firstb._Ptr);\r\n                ++_Removed;\r\n            } else { // advance iterators\r\n                _Firstb = _First;\r\n                ++_First;\r\n            }\r\n        }\r\n\r\n#if _HAS_CXX20\r\n        return _Removed;\r\n#else\r\n        (void) _Removed;\r\n#endif\r\n    }\r\n\r\n    _LIST_REMOVE_RETURN unique() { // erase each element matching previous\r\n        return unique(equal_to<>{});\r\n    }\r\n\r\n    template <class _Pr2>\r\n    _LIST_REMOVE_RETURN unique(_Pr2 _Pred) { // erase each element satisfying _Pred with previous\r\n        _Flist_node_remove_op _Op(*this);\r\n        auto _First        = _Unchecked_begin();\r\n        size_type _Removed = 0;\r\n        if (_First._Ptr) { // worth doing\r\n            auto _After = _First;\r\n            ++_After;\r\n            while (_After._Ptr) {\r\n                if (_Pred(*_First, *_After)) {\r\n                    _After._Ptr = _Op._Transfer_back(_First._Ptr);\r\n                    ++_Removed;\r\n                } else {\r\n                    _First = _After;\r\n                    ++_After;\r\n                }\r\n            }\r\n        }\r\n\r\n#if _HAS_CXX20\r\n        return _Removed;\r\n#else\r\n        (void) _Removed;\r\n#endif\r\n    }\r\n\r\n    void merge(forward_list& _Right) { // merge in elements from _Right, both ordered by operator<\r\n        _Merge1(_Right, less<>{});\r\n    }\r\n\r\n    void merge(forward_list&& _Right) { // merge in elements from _Right, both ordered by operator<\r\n        _Merge1(_Right, less<>{});\r\n    }\r\n\r\n    template <class _Pr2>\r\n    void merge(forward_list& _Right, _Pr2 _Pred) { // merge in elements from _Right, both ordered by _Pred\r\n        _Merge1(_Right, _STD _Pass_fn(_Pred));\r\n    }\r\n\r\n    template <class _Pr2>\r\n    void merge(forward_list&& _Right, _Pr2 _Pred) { // merge in elements from _Right, both ordered by _Pred\r\n        _Merge1(_Right, _STD _Pass_fn(_Pred));\r\n    }\r\n\r\nprivate:\r\n    template <class _Pr2>\r\n    void _Merge1(forward_list& _Right, _Pr2 _Pred) { // merge in elements from _Right, both ordered by _Pred\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _DEBUG_ORDER_UNWRAPPED(_Unchecked_begin(), _Default_sentinel{}, _Pred);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        if (this == _STD addressof(_Right)) {\r\n            return;\r\n        }\r\n\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        auto& _Right_data = _Right._Mypair._Myval2;\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _DEBUG_ORDER_UNWRAPPED(_Right._Unchecked_begin(), _Default_sentinel{}, _Pred);\r\n        if constexpr (!_Alnode_traits::is_always_equal::value) {\r\n            _STL_VERIFY(_Getal() == _Right._Getal(), \"forward_list allocators incompatible for merge\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        if (!_My_data._Myhead) {\r\n            // *this is empty; take all elements of _Right with no comparisons\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n            {\r\n                _Lockit _Lock(_LOCK_DEBUG);\r\n                _Transfer_non_before_begin_ownership(_Right);\r\n            } // unlock\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n            _My_data._Myhead    = _Right_data._Myhead;\r\n            _Right_data._Myhead = nullptr;\r\n            return;\r\n        }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        constexpr bool _Noexcept =\r\n            noexcept(_DEBUG_LT_PRED(_Pred, _My_data._Myhead->_Myval, _Right_data._Myhead->_Myval));\r\n        if constexpr (_Noexcept) {\r\n            // if the comparison is noexcept, we can take all the iterators in one go and avoid quadratic updates of\r\n            // the iterator chain\r\n            _Lockit _Lock(_LOCK_DEBUG);\r\n            _Transfer_non_before_begin_ownership(_Right);\r\n        } // unlock\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        if (!_Right_data._Myhead) {\r\n            return;\r\n        }\r\n\r\n        auto _BFirst1 = _My_data._Before_head();\r\n        auto _First2  = _Right_data._Myhead;\r\n        for (;;) { // process 1 splice\r\n            _Nodeptr _First1;\r\n            for (;;) { // advance _BFirst1 over elements already in position\r\n                _First1 = _BFirst1->_Next;\r\n                if (!_First1) { // all elements in _Right are greater than elements in *this, splice them all\r\n                    _BFirst1->_Next     = _First2;\r\n                    _Right_data._Myhead = nullptr;\r\n                    return;\r\n                }\r\n\r\n                if (_DEBUG_LT_PRED(_Pred, _First2->_Myval, _First1->_Myval)) {\r\n                    // _First2->_Myval is out of order\r\n                    break;\r\n                }\r\n\r\n                // _First1->_Myval is already in position; advance\r\n                _BFirst1 = _First1;\r\n            }\r\n\r\n            // find the end of the \"run\" of elements less than _First1->_Myval in _Right\r\n            auto _BRun_end = _First2;\r\n            _Nodeptr _Run_end;\r\n            for (;;) {\r\n                _Run_end = _BRun_end->_Next;\r\n                if (!_Run_end) {\r\n                    break;\r\n                }\r\n\r\n                if (!_DEBUG_LT_PRED(_Pred, _Run_end->_Myval, _First1->_Myval)) {\r\n                    // _Run_end is the first element in _Right that shouldn't precede _First1->_Myval.\r\n                    // After the splice _First1->_Myval will be in position and must not be compared again.\r\n                    break;\r\n                }\r\n\r\n                _BRun_end = _Run_end;\r\n            }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n            if constexpr (!_Noexcept) {\r\n                _Lockit _Lock(_LOCK_DEBUG);\r\n                for (auto _Next = _First2; _Next != _Run_end; _Next = _Next->_Next) {\r\n                    _Transfer_ownership(_Right, _Next);\r\n                }\r\n            } // unlock\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n            _Right_data._Myhead = _Run_end; // snip out the run from its old position\r\n            _BFirst1->_Next     = _First2; // insert into new position\r\n            _BRun_end->_Next    = _First1;\r\n            if (!_Run_end) {\r\n                return;\r\n            }\r\n\r\n            _BFirst1 = _First1;\r\n            _First2  = _Run_end;\r\n        }\r\n    }\r\n\r\npublic:\r\n    void sort() { // order sequence\r\n        _Scary_val::_Sort(_Mypair._Myval2._Before_head(), less<>{});\r\n    }\r\n\r\n    template <class _Pr2>\r\n    void sort(_Pr2 _Pred) { // order sequence\r\n        _Scary_val::_Sort(_Mypair._Myval2._Before_head(), _STD _Pass_fn(_Pred));\r\n    }\r\n\r\n    void reverse() noexcept { // reverse sequence\r\n        auto _Current = _Mypair._Myval2._Myhead;\r\n        if (!_Current) {\r\n            // empty forward_list\r\n            return;\r\n        }\r\n\r\n        _Nodeptr _Prev{};\r\n        for (;;) {\r\n            const auto _Next = _Current->_Next;\r\n            _Current->_Next  = _Prev;\r\n            if (!_Next) {\r\n                _Mypair._Myval2._Myhead = _Current;\r\n                return;\r\n            }\r\n\r\n            _Prev    = _Current;\r\n            _Current = _Next;\r\n        }\r\n    }\r\n\r\nprivate:\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    void _Transfer_non_before_begin_ownership(forward_list& _Right) noexcept {\r\n        // requires holding the debug lock\r\n        const auto _Mycont            = _STD addressof(_Mypair._Myval2);\r\n        const auto _Myproxy           = _Mycont->_Myproxy;\r\n        const auto _Right_before_head = _Right._Mypair._Myval2._Before_head();\r\n        _Iterator_base12** _Pnext     = &_Right._Mypair._Myval2._Myproxy->_Myfirstiter;\r\n        while (*_Pnext) {\r\n            const auto _Pnextptr = static_cast<const_iterator&>(**_Pnext)._Ptr;\r\n            if (_Pnextptr == _Right_before_head) {\r\n                _Pnext = &(*_Pnext)->_Mynextiter;\r\n            } else { // take the iterator\r\n                const auto _Extracted   = *_Pnext;\r\n                *_Pnext                 = (*_Pnext)->_Mynextiter;\r\n                _Extracted->_Myproxy    = _Myproxy;\r\n                _Extracted->_Mynextiter = _Myproxy->_Myfirstiter;\r\n                _Myproxy->_Myfirstiter  = _Extracted;\r\n            }\r\n        }\r\n    }\r\n\r\n    void _Transfer_ownership(forward_list& _Right, _Nodeptr _Target) noexcept {\r\n        // requires holding the debug lock\r\n        const auto _Mycont        = _STD addressof(_Mypair._Myval2);\r\n        const auto _Myproxy       = _Mycont->_Myproxy;\r\n        _Iterator_base12** _Pnext = &_Right._Mypair._Myval2._Myproxy->_Myfirstiter;\r\n        while (*_Pnext) {\r\n            const auto _Pnextptr = static_cast<const_iterator&>(**_Pnext)._Ptr;\r\n            if (_Pnextptr != _Target) {\r\n                _Pnext = &(*_Pnext)->_Mynextiter;\r\n            } else { // take the iterator\r\n                const auto _Extracted   = *_Pnext;\r\n                *_Pnext                 = (*_Pnext)->_Mynextiter;\r\n                _Extracted->_Myproxy    = _Myproxy;\r\n                _Extracted->_Mynextiter = _Myproxy->_Myfirstiter;\r\n                _Myproxy->_Myfirstiter  = _Extracted;\r\n            }\r\n        }\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n    void _Splice_after(_Nodeptr _Where, forward_list& _Right, _Nodeptr _Prev) noexcept {\r\n        // splice _Right (_Prev, _Prev + 2) after _Where\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\n        (void) _Right;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 0 / _ITERATOR_DEBUG_LEVEL != 0 vvv\r\n        if constexpr (!_Alnode_traits::is_always_equal::value) {\r\n            _STL_VERIFY(_Getal() == _Right._Getal(), \"forward_list containers incompatible for splice_after\");\r\n        }\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 0 ^^^\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        if (this != _STD addressof(_Right)) {\r\n            _Lockit _Lock(_LOCK_DEBUG);\r\n            _Transfer_ownership(_Right, _Prev->_Next);\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        if (_Where != _Prev) {\r\n            const auto _First = _Prev->_Next;\r\n            if (_Where != _First) {\r\n                _Prev->_Next  = _First->_Next;\r\n                _First->_Next = _Where->_Next;\r\n                _Where->_Next = _First;\r\n            }\r\n        }\r\n    }\r\n\r\n    template <class _Sentinel>\r\n    void _Splice_after(_Unchecked_const_iterator _Where, forward_list& _Right, _Unchecked_const_iterator _First,\r\n        _Sentinel _Last) noexcept {\r\n        // splice _Right (_First, _Last) just after _Where\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\n        (void) _Right;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 0 / _ITERATOR_DEBUG_LEVEL != 0 vvv\r\n        if constexpr (!_Alnode_traits::is_always_equal::value) {\r\n            _STL_VERIFY(_Getal() == _Right._Getal(), \"forward_list containers incompatible for splice_after\");\r\n        }\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 0 ^^^\r\n\r\n        if (_First == _Last) {\r\n            return;\r\n        }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        if (this != _STD addressof(_Right)) { // transfer ownership of (_First, _Last)\r\n            _Lockit _Lock(_LOCK_DEBUG);\r\n            _Unchecked_const_iterator _Next = _First;\r\n            while (++_Next != _Last) { // transfer ownership\r\n                _Transfer_ownership(_Right, _Next._Ptr);\r\n            }\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        // find prev(_Last)\r\n        _Unchecked_const_iterator _After = _First;\r\n        ++_After;\r\n        if (_After == _Last) {\r\n            return;\r\n        }\r\n\r\n        _Unchecked_const_iterator _Prev_last = _First;\r\n        do {\r\n            _Prev_last = _After;\r\n            ++_After;\r\n        } while (_After != _Last);\r\n\r\n        const auto _Extracted_head = _First._Ptr->_Next;\r\n        _First._Ptr->_Next         = _After._Ptr;\r\n        _Prev_last._Ptr->_Next     = _Where._Ptr->_Next;\r\n        _Where._Ptr->_Next         = _Extracted_head;\r\n    }\r\n\r\n    void _Alloc_proxy() {\r\n        _Mypair._Myval2._Alloc_proxy(_STD _Get_proxy_allocator(_Getal()));\r\n    }\r\n\r\n    void _Swap_proxy_and_iterators(forward_list& _Right) noexcept {\r\n        _Mypair._Myval2._Swap_proxy_and_iterators(_Right._Mypair._Myval2);\r\n    }\r\n\r\n    _Alnode& _Getal() noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    const _Alnode& _Getal() const noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    _Compressed_pair<_Alnode, _Scary_val> _Mypair;\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Iter, class _Alloc = allocator<_Iter_value_t<_Iter>>,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>>, int> = 0>\r\nforward_list(_Iter, _Iter, _Alloc = _Alloc()) -> forward_list<_Iter_value_t<_Iter>, _Alloc>;\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc = allocator<_RANGES range_value_t<_Rng>>>\r\nforward_list(from_range_t, _Rng&&, _Alloc = _Alloc()) -> forward_list<_RANGES range_value_t<_Rng>, _Alloc>;\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc>\r\nvoid swap(forward_list<_Ty, _Alloc>& _Left, forward_list<_Ty, _Alloc>& _Right) noexcept /* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc>\r\n_NODISCARD bool operator==(const forward_list<_Ty, _Alloc>& _Left, const forward_list<_Ty, _Alloc>& _Right) {\r\n    return _STD equal(\r\n        _Left._Unchecked_begin(), _Left._Unchecked_end_iter(), _Right._Unchecked_begin(), _Right._Unchecked_end_iter());\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty, class _Alloc>\r\n_NODISCARD _Synth_three_way_result<_Ty> operator<=>(\r\n    const forward_list<_Ty, _Alloc>& _Left, const forward_list<_Ty, _Alloc>& _Right) {\r\n    return _STD lexicographical_compare_three_way(_Left._Unchecked_begin(), _Left._Unchecked_end_iter(),\r\n        _Right._Unchecked_begin(), _Right._Unchecked_end_iter(), _Synth_three_way{});\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD bool operator!=(const forward_list<_Ty, _Alloc>& _Left, const forward_list<_Ty, _Alloc>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD bool operator<(const forward_list<_Ty, _Alloc>& _Left, const forward_list<_Ty, _Alloc>& _Right) {\r\n    return _STD lexicographical_compare(\r\n        _Left._Unchecked_begin(), _Left._Unchecked_end_iter(), _Right._Unchecked_begin(), _Right._Unchecked_end_iter());\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD bool operator>(const forward_list<_Ty, _Alloc>& _Left, const forward_list<_Ty, _Alloc>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD bool operator<=(const forward_list<_Ty, _Alloc>& _Left, const forward_list<_Ty, _Alloc>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD bool operator>=(const forward_list<_Ty, _Alloc>& _Left, const forward_list<_Ty, _Alloc>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty, class _Alloc, class _Uty>\r\nforward_list<_Ty, _Alloc>::size_type erase(forward_list<_Ty, _Alloc>& _Cont, const _Uty& _Val) {\r\n    return _Cont.remove_if([&](const _Ty& _Elem) -> bool { return _Elem == _Val; });\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc, class _Pr>\r\nforward_list<_Ty, _Alloc>::size_type erase_if(forward_list<_Ty, _Alloc>& _Cont, _Pr _Pred) {\r\n    return _Cont.remove_if(_STD _Pass_fn(_Pred));\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX17\r\nnamespace pmr {\r\n    _EXPORT_STD template <class _Ty>\r\n    using forward_list = _STD forward_list<_Ty, polymorphic_allocator<_Ty>>;\r\n} // namespace pmr\r\n#endif // _HAS_CXX17\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _FORWARD_LIST_\r\n"
  },
  {
    "path": "stl/inc/fstream",
    "content": "// fstream standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _FSTREAM_\r\n#define _FSTREAM_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <__msvc_filebuf.hpp>\r\n#include <istream>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nclass basic_ifstream : public basic_istream<_Elem, _Traits> { // input stream associated with a C stream\r\npublic:\r\n    using _Mybase = basic_istream<_Elem, _Traits>;\r\n    using _Myfb   = basic_filebuf<_Elem, _Traits>;\r\n    using _Myios  = basic_ios<_Elem, _Traits>;\r\n\r\n    basic_ifstream() : _Mybase(_STD addressof(_Filebuffer)) {}\r\n\r\n    explicit basic_ifstream(\r\n        const char* _Filename, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot)\r\n        : _Mybase(_STD addressof(_Filebuffer)) {\r\n        // _Prot is an extension\r\n        if (!_Filebuffer.open(_Filename, _Mode | ios_base::in, _Prot)) {\r\n            _Myios::setstate(ios_base::failbit);\r\n        }\r\n    }\r\n\r\n    explicit basic_ifstream(\r\n        const string& _Str, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot)\r\n        : basic_ifstream(_Str.c_str(), _Mode, _Prot) {} // _Prot is an extension\r\n\r\n    explicit basic_ifstream(\r\n        const wchar_t* _Filename, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot)\r\n        : _Mybase(_STD addressof(_Filebuffer)) {\r\n        // in standard as const std::filesystem::path::value_type *; _Prot is an extension\r\n        if (!_Filebuffer.open(_Filename, _Mode | ios_base::in, _Prot)) {\r\n            _Myios::setstate(ios_base::failbit);\r\n        }\r\n    }\r\n\r\n    explicit basic_ifstream(\r\n        const wstring& _Str, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot)\r\n        : basic_ifstream(_Str.c_str(), _Mode, _Prot) {} // extension\r\n\r\n#if _HAS_CXX17\r\n    template <class _Ty, enable_if_t<is_same_v<_Ty, filesystem::path>, int> = 0>\r\n    explicit basic_ifstream(\r\n        const _Ty& _Path, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot)\r\n        : basic_ifstream(_Path.c_str(), _Mode, _Prot) {} // _Prot is an extension\r\n#endif // _HAS_CXX17\r\n\r\n    explicit basic_ifstream(FILE* _File)\r\n        : _Mybase(_STD addressof(_Filebuffer)), _Filebuffer(_File) {} // extension, no ownership taking\r\n\r\n    basic_ifstream(basic_ifstream&& _Right) : _Mybase(_STD addressof(_Filebuffer)) {\r\n        _Assign_rv(_STD move(_Right));\r\n    }\r\n\r\n    basic_ifstream& operator=(basic_ifstream&& _Right) {\r\n        _Assign_rv(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    void _Assign_rv(basic_ifstream&& _Right) {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Filebuffer.close();\r\n            this->swap(_Right);\r\n        }\r\n    }\r\n\r\n    void swap(basic_ifstream& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Mybase::swap(_Right);\r\n            _Filebuffer.swap(_Right._Filebuffer);\r\n        }\r\n    }\r\n\r\n    basic_ifstream(const basic_ifstream&)            = delete;\r\n    basic_ifstream& operator=(const basic_ifstream&) = delete;\r\n\r\n    void open(\r\n        const wchar_t* _Filename, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot) {\r\n        // in standard as const std::filesystem::path::value_type *; _Prot is an extension\r\n        if (_Filebuffer.open(_Filename, _Mode | ios_base::in, _Prot)) {\r\n            _Myios::clear();\r\n        } else {\r\n            _Myios::setstate(ios_base::failbit);\r\n        }\r\n    }\r\n\r\n    void open(const wstring& _Str, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot) {\r\n        // extension\r\n        open(_Str.c_str(), _Mode, _Prot);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <int = 0, class _Path_ish = filesystem::path>\r\n    void open(const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode = ios_base::in,\r\n        int _Prot = ios_base::_Default_open_prot) {\r\n        // _Prot is an extension\r\n        open(_Path.c_str(), _Mode, _Prot);\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    void open(const wchar_t* _Filename, ios_base::open_mode _Mode) {\r\n        // in standard as const std::filesystem::path::value_type *\r\n        open(_Filename, static_cast<ios_base::openmode>(_Mode));\r\n    }\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    __CLR_OR_THIS_CALL ~basic_ifstream() noexcept override {}\r\n\r\n    _NODISCARD _Myfb* rdbuf() const noexcept /* strengthened */ {\r\n        return const_cast<_Myfb*>(_STD addressof(_Filebuffer));\r\n    }\r\n\r\n    _NODISCARD bool is_open() const noexcept /* strengthened */ {\r\n        return _Filebuffer.is_open();\r\n    }\r\n\r\n    void open(\r\n        const char* _Filename, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot) {\r\n        // _Prot is an extension\r\n        if (_Filebuffer.open(_Filename, _Mode | ios_base::in, _Prot)) {\r\n            _Myios::clear();\r\n        } else {\r\n            _Myios::setstate(ios_base::failbit);\r\n        }\r\n    }\r\n\r\n    void open(const string& _Str, ios_base::openmode _Mode = ios_base::in, int _Prot = ios_base::_Default_open_prot) {\r\n        // _Prot is an extension\r\n        open(_Str.c_str(), _Mode, _Prot);\r\n    }\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    void open(const char* _Filename, ios_base::open_mode _Mode) {\r\n        open(_Filename, static_cast<ios_base::openmode>(_Mode));\r\n    }\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    void close() {\r\n        if (!_Filebuffer.close()) {\r\n            _Myios::setstate(ios_base::failbit);\r\n        }\r\n    }\r\n\r\nprivate:\r\n    _Myfb _Filebuffer;\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nvoid swap(basic_ifstream<_Elem, _Traits>& _Left, basic_ifstream<_Elem, _Traits>& _Right) noexcept /* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nclass basic_ofstream : public basic_ostream<_Elem, _Traits> { // output stream associated with a C stream\r\npublic:\r\n    using _Mybase = basic_ostream<_Elem, _Traits>;\r\n    using _Myfb   = basic_filebuf<_Elem, _Traits>;\r\n    using _Myios  = basic_ios<_Elem, _Traits>;\r\n\r\n    basic_ofstream() : _Mybase(_STD addressof(_Filebuffer)) {}\r\n\r\n    explicit basic_ofstream(const char* _Filename, ios_base::openmode _Mode = ios_base::out,\r\n        int _Prot = ios_base::_Default_open_prot)\r\n        : _Mybase(_STD addressof(_Filebuffer)) { // _Prot is an extension\r\n        if (!_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot)) {\r\n            _Myios::setstate(ios_base::failbit);\r\n        }\r\n    }\r\n\r\n    explicit basic_ofstream(\r\n        const string& _Str, ios_base::openmode _Mode = ios_base::out, int _Prot = ios_base::_Default_open_prot)\r\n        : basic_ofstream(_Str.c_str(), _Mode, _Prot) {} // _Prot is an extension\r\n\r\n    explicit basic_ofstream(\r\n        const wchar_t* _Filename, ios_base::openmode _Mode = ios_base::out, int _Prot = ios_base::_Default_open_prot)\r\n        : _Mybase(_STD addressof(_Filebuffer)) {\r\n        // in standard as const std::filesystem::path::value_type *; _Prot is an extension\r\n        if (!_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot)) {\r\n            _Myios::setstate(ios_base::failbit);\r\n        }\r\n    }\r\n\r\n    explicit basic_ofstream(\r\n        const wstring& _Str, ios_base::openmode _Mode = ios_base::out, int _Prot = ios_base::_Default_open_prot)\r\n        : basic_ofstream(_Str.c_str(), _Mode, _Prot) {} // extension\r\n\r\n#if _HAS_CXX17\r\n    template <class _Ty, enable_if_t<is_same_v<_Ty, filesystem::path>, int> = 0>\r\n    explicit basic_ofstream(\r\n        const _Ty& _Path, ios_base::openmode _Mode = ios_base::out, int _Prot = ios_base::_Default_open_prot)\r\n        : basic_ofstream(_Path.c_str(), _Mode, _Prot) {} // _Prot is an extension\r\n#endif // _HAS_CXX17\r\n\r\n    explicit basic_ofstream(FILE* _File)\r\n        : _Mybase(_STD addressof(_Filebuffer)), _Filebuffer(_File) {} // extension, no ownership taking\r\n\r\n    basic_ofstream(basic_ofstream&& _Right) : _Mybase(_STD addressof(_Filebuffer)) {\r\n        _Assign_rv(_STD move(_Right));\r\n    }\r\n\r\n    basic_ofstream& operator=(basic_ofstream&& _Right) {\r\n        _Assign_rv(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    void _Assign_rv(basic_ofstream&& _Right) {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Filebuffer.close();\r\n            this->swap(_Right);\r\n        }\r\n    }\r\n\r\n    void swap(basic_ofstream& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Mybase::swap(_Right);\r\n            _Filebuffer.swap(_Right._Filebuffer);\r\n        }\r\n    }\r\n\r\n    basic_ofstream(const basic_ofstream&)            = delete;\r\n    basic_ofstream& operator=(const basic_ofstream&) = delete;\r\n\r\n    void open(\r\n        const wchar_t* _Filename, ios_base::openmode _Mode = ios_base::out, int _Prot = ios_base::_Default_open_prot) {\r\n        // in standard as const std::filesystem::path::value_type *; _Prot is an extension\r\n        if (_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot)) {\r\n            _Myios::clear();\r\n        } else {\r\n            _Myios::setstate(ios_base::failbit);\r\n        }\r\n    }\r\n\r\n    void open(const wstring& _Str, ios_base::openmode _Mode = ios_base::out, int _Prot = ios_base::_Default_open_prot) {\r\n        // extension\r\n        open(_Str.c_str(), _Mode, _Prot);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <int = 0, class _Path_ish = filesystem::path>\r\n    void open(const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode = ios_base::out,\r\n        int _Prot = ios_base::_Default_open_prot) {\r\n        // _Prot is an extension\r\n        open(_Path.c_str(), _Mode, _Prot);\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    void open(const wchar_t* _Filename, ios_base::open_mode _Mode) {\r\n        // in standard as const std::filesystem::path::value_type *\r\n        open(_Filename, static_cast<ios_base::openmode>(_Mode));\r\n    }\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    __CLR_OR_THIS_CALL ~basic_ofstream() noexcept override {}\r\n\r\n    _NODISCARD _Myfb* rdbuf() const noexcept /* strengthened */ {\r\n        return const_cast<_Myfb*>(_STD addressof(_Filebuffer));\r\n    }\r\n\r\n    _NODISCARD bool is_open() const noexcept /* strengthened */ {\r\n        return _Filebuffer.is_open();\r\n    }\r\n\r\n    void open(\r\n        const char* _Filename, ios_base::openmode _Mode = ios_base::out, int _Prot = ios_base::_Default_open_prot) {\r\n        // _Prot is an extension\r\n        if (_Filebuffer.open(_Filename, _Mode | ios_base::out, _Prot)) {\r\n            _Myios::clear();\r\n        } else {\r\n            _Myios::setstate(ios_base::failbit);\r\n        }\r\n    }\r\n\r\n    void open(const string& _Str, ios_base::openmode _Mode = ios_base::out, int _Prot = ios_base::_Default_open_prot) {\r\n        // _Prot is an extension\r\n        open(_Str.c_str(), _Mode, _Prot);\r\n    }\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    void open(const char* _Filename, ios_base::open_mode _Mode) {\r\n        open(_Filename, static_cast<ios_base::openmode>(_Mode));\r\n    }\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    void close() {\r\n        if (!_Filebuffer.close()) {\r\n            _Myios::setstate(ios_base::failbit);\r\n        }\r\n    }\r\n\r\nprivate:\r\n    _Myfb _Filebuffer;\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nvoid swap(basic_ofstream<_Elem, _Traits>& _Left, basic_ofstream<_Elem, _Traits>& _Right) noexcept /* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nclass basic_fstream : public basic_iostream<_Elem, _Traits> { // input/output stream associated with a C stream\r\npublic:\r\n    using _Mybase     = basic_iostream<_Elem, _Traits>;\r\n    using _Myfb       = basic_filebuf<_Elem, _Traits>;\r\n    using _Myios      = basic_ios<_Elem, _Traits>;\r\n    using char_type   = _Elem;\r\n    using traits_type = _Traits;\r\n    using int_type    = typename _Traits::int_type;\r\n    using pos_type    = typename _Traits::pos_type;\r\n    using off_type    = typename _Traits::off_type;\r\n\r\n    basic_fstream() : _Mybase(_STD addressof(_Filebuffer)) {}\r\n\r\n    explicit basic_fstream(const char* _Filename, ios_base::openmode _Mode = ios_base::in | ios_base::out,\r\n        int _Prot = ios_base::_Default_open_prot)\r\n        : _Mybase(_STD addressof(_Filebuffer)) { // _Prot is an extension\r\n        if (!_Filebuffer.open(_Filename, _Mode, _Prot)) {\r\n            _Myios::setstate(ios_base::failbit);\r\n        }\r\n    }\r\n\r\n    explicit basic_fstream(const string& _Str, ios_base::openmode _Mode = ios_base::in | ios_base::out,\r\n        int _Prot = ios_base::_Default_open_prot)\r\n        : basic_fstream(_Str.c_str(), _Mode, _Prot) {} // _Prot is an extension\r\n\r\n    explicit basic_fstream(const wchar_t* _Filename, ios_base::openmode _Mode = ios_base::in | ios_base::out,\r\n        int _Prot = ios_base::_Default_open_prot)\r\n        : _Mybase(_STD addressof(_Filebuffer)) {\r\n        // in standard as const std::filesystem::path::value_type *; _Prot is an extension\r\n        if (!_Filebuffer.open(_Filename, _Mode, _Prot)) {\r\n            _Myios::setstate(ios_base::failbit);\r\n        }\r\n    }\r\n\r\n    explicit basic_fstream(const wstring& _Str, ios_base::openmode _Mode = ios_base::in | ios_base::out,\r\n        int _Prot = ios_base::_Default_open_prot)\r\n        : basic_fstream(_Str.c_str(), _Mode, _Prot) {} // extension\r\n\r\n#if _HAS_CXX17\r\n    template <class _Ty, enable_if_t<is_same_v<_Ty, filesystem::path>, int> = 0>\r\n    explicit basic_fstream(const _Ty& _Path, ios_base::openmode _Mode = ios_base::in | ios_base::out,\r\n        int _Prot = ios_base::_Default_open_prot)\r\n        : basic_fstream(_Path.c_str(), _Mode, _Prot) {} // _Prot is an extension\r\n#endif // _HAS_CXX17\r\n\r\n    explicit basic_fstream(FILE* _File)\r\n        : _Mybase(_STD addressof(_Filebuffer)), _Filebuffer(_File) {} // extension, no ownership taking\r\n\r\n    basic_fstream(basic_fstream&& _Right) : _Mybase(_STD addressof(_Filebuffer)) {\r\n        _Assign_rv(_STD move(_Right));\r\n    }\r\n\r\n    basic_fstream& operator=(basic_fstream&& _Right) {\r\n        _Assign_rv(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    void _Assign_rv(basic_fstream&& _Right) {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Filebuffer.close();\r\n            this->swap(_Right);\r\n        }\r\n    }\r\n\r\n    void swap(basic_fstream& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Mybase::swap(_Right);\r\n            _Filebuffer.swap(_Right._Filebuffer);\r\n        }\r\n    }\r\n\r\n    basic_fstream(const basic_fstream&)            = delete;\r\n    basic_fstream& operator=(const basic_fstream&) = delete;\r\n\r\n    void open(const wchar_t* _Filename, ios_base::openmode _Mode = ios_base::in | ios_base::out,\r\n        int _Prot = ios_base::_Default_open_prot) {\r\n        // in standard as const std::filesystem::path::value_type *; _Prot is an extension\r\n        if (_Filebuffer.open(_Filename, _Mode, _Prot)) {\r\n            _Myios::clear();\r\n        } else {\r\n            _Myios::setstate(ios_base::failbit);\r\n        }\r\n    }\r\n\r\n    void open(const wstring& _Str, ios_base::openmode _Mode = ios_base::in | ios_base::out,\r\n        int _Prot = ios_base::_Default_open_prot) {\r\n        // extension\r\n        open(_Str.c_str(), _Mode, _Prot);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <int = 0, class _Path_ish = filesystem::path>\r\n    void open(const _Identity_t<_Path_ish>& _Path, ios_base::openmode _Mode = ios_base::in | ios_base::out,\r\n        int _Prot = ios_base::_Default_open_prot) {\r\n        // _Prot is an extension\r\n        open(_Path.c_str(), _Mode, _Prot);\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    void open(const wchar_t* _Filename, ios_base::open_mode _Mode) {\r\n        // in standard as const std::filesystem::path::value_type *\r\n        open(_Filename, static_cast<ios_base::openmode>(_Mode));\r\n    }\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    __CLR_OR_THIS_CALL ~basic_fstream() noexcept override {}\r\n\r\n    _NODISCARD _Myfb* rdbuf() const noexcept /* strengthened */ {\r\n        return const_cast<_Myfb*>(_STD addressof(_Filebuffer));\r\n    }\r\n\r\n    _NODISCARD bool is_open() const noexcept /* strengthened */ {\r\n        return _Filebuffer.is_open();\r\n    }\r\n\r\n    void open(const char* _Filename, ios_base::openmode _Mode = ios_base::in | ios_base::out,\r\n        int _Prot = ios_base::_Default_open_prot) {\r\n        // _Prot is an extension\r\n        if (_Filebuffer.open(_Filename, _Mode, _Prot)) {\r\n            _Myios::clear();\r\n        } else {\r\n            _Myios::setstate(ios_base::failbit);\r\n        }\r\n    }\r\n\r\n    void open(const string& _Str, ios_base::openmode _Mode = ios_base::in | ios_base::out,\r\n        int _Prot = ios_base::_Default_open_prot) {\r\n        // _Prot is an extension\r\n        open(_Str.c_str(), _Mode, _Prot);\r\n    }\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    void open(const char* _Filename, ios_base::open_mode _Mode) {\r\n        open(_Filename, static_cast<ios_base::openmode>(_Mode));\r\n    }\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    void close() {\r\n        if (!_Filebuffer.close()) {\r\n            _Myios::setstate(ios_base::failbit);\r\n        }\r\n    }\r\n\r\nprivate:\r\n    _Myfb _Filebuffer;\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nvoid swap(basic_fstream<_Elem, _Traits>& _Left, basic_fstream<_Elem, _Traits>& _Right) noexcept /* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _FSTREAM_\r\n"
  },
  {
    "path": "stl/inc/functional",
    "content": "// functional standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _FUNCTIONAL_\r\n#define _FUNCTIONAL_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <exception>\r\n#include <tuple>\r\n#include <typeinfo>\r\n#include <xmemory>\r\n\r\n#if _HAS_CXX17\r\n#ifdef _LEGACY_CODE_ASSUMES_FUNCTIONAL_INCLUDES_MEMORY\r\n#include <memory>\r\n#endif // defined(_LEGACY_CODE_ASSUMES_FUNCTIONAL_INCLUDES_MEMORY)\r\n#include <unordered_map>\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#endif // _HAS_CXX20\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\n// plus, minus, and multiplies are defined in <xutility>\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct divides {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = _Ty;\r\n\r\n    _NODISCARD constexpr _Ty operator()(const _Ty& _Left, const _Ty& _Right) const {\r\n        return _Left / _Right;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct modulus {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = _Ty;\r\n\r\n    _NODISCARD constexpr _Ty operator()(const _Ty& _Left, const _Ty& _Right) const {\r\n        return _Left % _Right;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct negate {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = _Ty;\r\n\r\n    _NODISCARD constexpr _Ty operator()(const _Ty& _Left) const {\r\n        return -_Left;\r\n    }\r\n};\r\n\r\n// less is defined in <type_traits>\r\n// equal_to, not_equal_to, greater, greater_equal, and less_equal are defined in <xutility>\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct logical_and {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = bool;\r\n\r\n    _NODISCARD constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const {\r\n        return _Left && _Right;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct logical_or {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = bool;\r\n\r\n    _NODISCARD constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const {\r\n        return _Left || _Right;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct logical_not {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = bool;\r\n\r\n    _NODISCARD constexpr bool operator()(const _Ty& _Left) const {\r\n        return !_Left;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct bit_and {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = _Ty;\r\n\r\n    _NODISCARD constexpr _Ty operator()(const _Ty& _Left, const _Ty& _Right) const {\r\n        return _Left & _Right;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct bit_or {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = _Ty;\r\n\r\n    _NODISCARD constexpr _Ty operator()(const _Ty& _Left, const _Ty& _Right) const {\r\n        return _Left | _Right;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct bit_xor {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = _Ty;\r\n\r\n    _NODISCARD constexpr _Ty operator()(const _Ty& _Left, const _Ty& _Right) const {\r\n        return _Left ^ _Right;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct bit_not {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = _Ty;\r\n\r\n    _NODISCARD constexpr _Ty operator()(const _Ty& _Left) const {\r\n        return ~_Left;\r\n    }\r\n};\r\n\r\n// void specializations of plus, minus, and multiplies are defined in <xutility>\r\n\r\ntemplate <>\r\nstruct divides<void> {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const //\r\n        -> decltype(_STD forward<_Ty1>(_Left) / _STD forward<_Ty2>(_Right)) {\r\n        return _STD forward<_Ty1>(_Left) / _STD forward<_Ty2>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <>\r\nstruct modulus<void> {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const //\r\n        -> decltype(_STD forward<_Ty1>(_Left) % _STD forward<_Ty2>(_Right)) {\r\n        return _STD forward<_Ty1>(_Left) % _STD forward<_Ty2>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <>\r\nstruct negate<void> {\r\n    template <class _Ty>\r\n    _NODISCARD constexpr auto operator()(_Ty&& _Left) const -> decltype(-_STD forward<_Ty>(_Left)) {\r\n        return -_STD forward<_Ty>(_Left);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n// void specialization of less is defined in <type_traits>\r\n// void specializations of equal_to, not_equal_to, greater, greater_equal, and less_equal are defined in <xutility>\r\n\r\ntemplate <>\r\nstruct logical_and<void> {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const //\r\n        -> decltype(_STD forward<_Ty1>(_Left) && _STD forward<_Ty2>(_Right)) {\r\n        return _STD forward<_Ty1>(_Left) && _STD forward<_Ty2>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <>\r\nstruct logical_or<void> {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const //\r\n        -> decltype(_STD forward<_Ty1>(_Left) || _STD forward<_Ty2>(_Right)) {\r\n        return _STD forward<_Ty1>(_Left) || _STD forward<_Ty2>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <>\r\nstruct logical_not<void> {\r\n    template <class _Ty>\r\n    _NODISCARD constexpr auto operator()(_Ty&& _Left) const -> decltype(!_STD forward<_Ty>(_Left)) {\r\n        return !_STD forward<_Ty>(_Left);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <>\r\nstruct bit_and<void> {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const //\r\n        -> decltype(_STD forward<_Ty1>(_Left) & _STD forward<_Ty2>(_Right)) {\r\n        return _STD forward<_Ty1>(_Left) & _STD forward<_Ty2>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <>\r\nstruct bit_or<void> {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const //\r\n        -> decltype(_STD forward<_Ty1>(_Left) | _STD forward<_Ty2>(_Right)) {\r\n        return _STD forward<_Ty1>(_Left) | _STD forward<_Ty2>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <>\r\nstruct bit_xor<void> {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const //\r\n        -> decltype(_STD forward<_Ty1>(_Left) ^ _STD forward<_Ty2>(_Right)) {\r\n        return _STD forward<_Ty1>(_Left) ^ _STD forward<_Ty2>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <>\r\nstruct bit_not<void> {\r\n    template <class _Ty>\r\n    _NODISCARD constexpr auto operator()(_Ty&& _Left) const -> decltype(~_STD forward<_Ty>(_Left)) {\r\n        return ~_STD forward<_Ty>(_Left);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\nstruct _Bit_xnor {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const //\r\n        -> decltype(~(_STD forward<_Ty1>(_Left) ^ _STD forward<_Ty2>(_Right))) {\r\n        return ~(_STD forward<_Ty1>(_Left) ^ _STD forward<_Ty2>(_Right));\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\nstruct _Bit_imply {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const //\r\n        -> decltype(~_STD forward<_Ty1>(_Left) | _STD forward<_Ty2>(_Right)) {\r\n        return ~_STD forward<_Ty1>(_Left) | _STD forward<_Ty2>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\nstruct _Bit_cimply {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const //\r\n        -> decltype(_STD forward<_Ty1>(_Left) | ~_STD forward<_Ty2>(_Right)) {\r\n        return _STD forward<_Ty1>(_Left) | ~_STD forward<_Ty2>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\nstruct _Bit_nimply {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const //\r\n        -> decltype(_STD forward<_Ty1>(_Left) & ~_STD forward<_Ty2>(_Right)) {\r\n        return _STD forward<_Ty1>(_Left) & ~_STD forward<_Ty2>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\nstruct _Bit_cnimply {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const //\r\n        -> decltype(~_STD forward<_Ty1>(_Left) & _STD forward<_Ty2>(_Right)) {\r\n        return ~_STD forward<_Ty1>(_Left) & _STD forward<_Ty2>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_vbool_functor_arg = is_void_v<_Ty> || is_integral_v<_Ty>;\r\n\r\ntemplate <class _Ty>\r\nstruct _Map_vb_functor<logical_and<_Ty>> {\r\n    using type = conditional_t<_Is_vbool_functor_arg<_Ty>, bit_and<>, void>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Map_vb_functor<bit_and<_Ty>> {\r\n    using type = conditional_t<_Is_vbool_functor_arg<_Ty>, bit_and<>, void>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Map_vb_functor<logical_or<_Ty>> {\r\n    using type = conditional_t<_Is_vbool_functor_arg<_Ty>, bit_or<>, void>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Map_vb_functor<bit_or<_Ty>> {\r\n    using type = conditional_t<_Is_vbool_functor_arg<_Ty>, bit_or<>, void>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Map_vb_functor<not_equal_to<_Ty>> {\r\n    using type = conditional_t<_Is_vbool_functor_arg<_Ty>, bit_xor<>, void>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Map_vb_functor<bit_xor<_Ty>> {\r\n    using type = conditional_t<_Is_vbool_functor_arg<_Ty>, bit_xor<>, void>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Map_vb_functor<equal_to<_Ty>> {\r\n    using type = conditional_t<_Is_vbool_functor_arg<_Ty>, _Bit_xnor, void>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Map_vb_functor<less_equal<_Ty>> {\r\n    using type = conditional_t<_Is_vbool_functor_arg<_Ty>, _Bit_imply, void>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Map_vb_functor<greater_equal<_Ty>> {\r\n    using type = conditional_t<_Is_vbool_functor_arg<_Ty>, _Bit_cimply, void>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Map_vb_functor<less<_Ty>> {\r\n    using type = conditional_t<_Is_vbool_functor_arg<_Ty>, _Bit_cnimply, void>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Map_vb_functor<greater<_Ty>> {\r\n    using type = conditional_t<_Is_vbool_functor_arg<_Ty>, _Bit_nimply, void>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Map_vb_functor<logical_not<_Ty>> {\r\n    using type = conditional_t<_Is_vbool_functor_arg<_Ty>, bit_not<>, void>;\r\n};\r\n\r\n// bit_not isn't mapped to itself because it emits MSVC warning C4804 \"'~': unsafe use of type 'bool' in operation\"\r\n// and Clang -Wbool-operation \"bitwise negation of a boolean expression; did you mean logical negation?\".\r\n\r\n#if _HAS_DEPRECATED_NEGATORS\r\n_STL_DISABLE_DEPRECATED_WARNING\r\n_EXPORT_STD template <class _Fn>\r\nclass _CXX17_DEPRECATE_NEGATORS unary_negate {\r\npublic:\r\n    using argument_type = typename _Fn::argument_type;\r\n    using result_type   = bool;\r\n\r\n    constexpr explicit unary_negate(const _Fn& _Func) : _Functor(_Func) {}\r\n\r\n    _NODISCARD constexpr bool operator()(const argument_type& _Left) const {\r\n        return !_Functor(_Left);\r\n    }\r\n\r\nprivate:\r\n    _Fn _Functor;\r\n};\r\n\r\n_EXPORT_STD template <class _Fn>\r\n_CXX17_DEPRECATE_NEGATORS _NODISCARD constexpr unary_negate<_Fn> not1(const _Fn& _Func) {\r\n    return unary_negate<_Fn>(_Func);\r\n}\r\n\r\n_EXPORT_STD template <class _Fn>\r\nclass _CXX17_DEPRECATE_NEGATORS binary_negate {\r\npublic:\r\n    using first_argument_type  = typename _Fn::first_argument_type;\r\n    using second_argument_type = typename _Fn::second_argument_type;\r\n    using result_type          = bool;\r\n\r\n    constexpr explicit binary_negate(const _Fn& _Func) : _Functor(_Func) {}\r\n\r\n    _NODISCARD constexpr bool operator()(const first_argument_type& _Left, const second_argument_type& _Right) const {\r\n        return !_Functor(_Left, _Right);\r\n    }\r\n\r\nprivate:\r\n    _Fn _Functor;\r\n};\r\n\r\n_EXPORT_STD template <class _Fn>\r\n_CXX17_DEPRECATE_NEGATORS _NODISCARD constexpr binary_negate<_Fn> not2(const _Fn& _Func) {\r\n    return binary_negate<_Fn>(_Func);\r\n}\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n#endif // _HAS_DEPRECATED_NEGATORS\r\n\r\n#if _HAS_AUTO_PTR_ETC\r\n_EXPORT_STD template <class _Arg, class _Result>\r\nstruct _NO_SPECIALIZATIONS_CITING(\"N4140 [depr.base]/1\") unary_function { // base class for unary functions\r\n    using argument_type = _Arg;\r\n    using result_type   = _Result;\r\n};\r\n\r\n_EXPORT_STD template <class _Arg1, class _Arg2, class _Result>\r\nstruct _NO_SPECIALIZATIONS_CITING(\"N4140 [depr.base]/1\") binary_function { // base class for binary functions\r\n    using first_argument_type  = _Arg1;\r\n    using second_argument_type = _Arg2;\r\n    using result_type          = _Result;\r\n};\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\n_EXPORT_STD template <class _Fn>\r\nclass binder1st : public unary_function<typename _Fn::second_argument_type,\r\n                      typename _Fn::result_type> { // functor adapter _Func(stored, right)\r\npublic:\r\n    using _Base         = unary_function<typename _Fn::second_argument_type, typename _Fn::result_type>;\r\n    using argument_type = typename _Base::argument_type;\r\n    using result_type   = typename _Base::result_type;\r\n\r\n    binder1st(const _Fn& _Func, const typename _Fn::first_argument_type& _Left) : op(_Func), value(_Left) {}\r\n\r\n    result_type operator()(const argument_type& _Right) const {\r\n        return op(value, _Right);\r\n    }\r\n\r\n    result_type operator()(argument_type& _Right) const {\r\n        return op(value, _Right);\r\n    }\r\n\r\nprotected:\r\n    _Fn op;\r\n    typename _Fn::first_argument_type value; // the left operand\r\n};\r\n\r\n_EXPORT_STD template <class _Fn, class _Ty>\r\n_NODISCARD binder1st<_Fn> bind1st(const _Fn& _Func, const _Ty& _Left) {\r\n    typename _Fn::first_argument_type _Val(_Left);\r\n    return binder1st<_Fn>(_Func, _Val);\r\n}\r\n\r\n_EXPORT_STD template <class _Fn>\r\nclass binder2nd : public unary_function<typename _Fn::first_argument_type,\r\n                      typename _Fn::result_type> { // functor adapter _Func(left, stored)\r\npublic:\r\n    using _Base         = unary_function<typename _Fn::first_argument_type, typename _Fn::result_type>;\r\n    using argument_type = typename _Base::argument_type;\r\n    using result_type   = typename _Base::result_type;\r\n\r\n    binder2nd(const _Fn& _Func, const typename _Fn::second_argument_type& _Right) : op(_Func), value(_Right) {}\r\n\r\n    result_type operator()(const argument_type& _Left) const {\r\n        return op(_Left, value);\r\n    }\r\n\r\n    result_type operator()(argument_type& _Left) const {\r\n        return op(_Left, value);\r\n    }\r\n\r\nprotected:\r\n    _Fn op;\r\n    typename _Fn::second_argument_type value; // the right operand\r\n};\r\n\r\n_EXPORT_STD template <class _Fn, class _Ty>\r\n_NODISCARD binder2nd<_Fn> bind2nd(const _Fn& _Func, const _Ty& _Right) {\r\n    typename _Fn::second_argument_type _Val(_Right);\r\n    return binder2nd<_Fn>(_Func, _Val);\r\n}\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n\r\n_EXPORT_STD template <class _Arg, class _Result, class _Fn = _Result (*)(_Arg)>\r\nclass pointer_to_unary_function : public unary_function<_Arg, _Result> { // functor adapter (*pfunc)(left)\r\npublic:\r\n    explicit pointer_to_unary_function(_Fn _Left) : _Pfun(_Left) {}\r\n\r\n    _Result operator()(_Arg _Left) const {\r\n        return _Pfun(_Left);\r\n    }\r\n\r\nprotected:\r\n    _Fn _Pfun; // the function pointer\r\n};\r\n\r\n_EXPORT_STD template <class _Arg1, class _Arg2, class _Result, class _Fn = _Result (*)(_Arg1, _Arg2)>\r\nclass pointer_to_binary_function\r\n    : public binary_function<_Arg1, _Arg2, _Result> { // functor adapter (*pfunc)(left, right)\r\npublic:\r\n    explicit pointer_to_binary_function(_Fn _Left) : _Pfun(_Left) {}\r\n\r\n    _Result operator()(_Arg1 _Left, _Arg2 _Right) const {\r\n        return _Pfun(_Left, _Right);\r\n    }\r\n\r\nprotected:\r\n    _Fn _Pfun; // the function pointer\r\n};\r\n\r\n#define _PTR_FUN(CALL_OPT, X1, X2, X3)                                                                      \\\r\n    _EXPORT_STD template <class _Arg, class _Result>                                                        \\\r\n    _NODISCARD pointer_to_unary_function<_Arg, _Result, _Result(CALL_OPT*)(_Arg)> ptr_fun(                  \\\r\n        _Result(CALL_OPT* _Left)(_Arg)) {                                                                   \\\r\n        return pointer_to_unary_function<_Arg, _Result, _Result(CALL_OPT*)(_Arg)>(_Left);                   \\\r\n    }                                                                                                       \\\r\n    _EXPORT_STD template <class _Arg1, class _Arg2, class _Result>                                          \\\r\n    _NODISCARD pointer_to_binary_function<_Arg1, _Arg2, _Result, _Result(CALL_OPT*)(_Arg1, _Arg2)> ptr_fun( \\\r\n        _Result(CALL_OPT* _Left)(_Arg1, _Arg2)) {                                                           \\\r\n        return pointer_to_binary_function<_Arg1, _Arg2, _Result, _Result(CALL_OPT*)(_Arg1, _Arg2)>(_Left);  \\\r\n    }\r\n\r\n_NON_MEMBER_CALL(_PTR_FUN, X1, X2, X3)\r\n#undef _PTR_FUN\r\n\r\n_EXPORT_STD template <class _Result, class _Ty>\r\nclass mem_fun_t : public unary_function<_Ty*, _Result> { // functor adapter (*p->*pfunc)(), non-const *pfunc\r\npublic:\r\n    explicit mem_fun_t(_Result (_Ty::*_Pm)()) : _Pmemfun(_Pm) {}\r\n\r\n    _Result operator()(_Ty* _Pleft) const {\r\n        return (_Pleft->*_Pmemfun)();\r\n    }\r\n\r\nprivate:\r\n    _Result (_Ty::*_Pmemfun)(); // the member function pointer\r\n};\r\n\r\n_EXPORT_STD template <class _Result, class _Ty, class _Arg>\r\nclass mem_fun1_t : public binary_function<_Ty*, _Arg, _Result> { // functor adapter (*p->*pfunc)(val), non-const *pfunc\r\npublic:\r\n    explicit mem_fun1_t(_Result (_Ty::*_Pm)(_Arg)) : _Pmemfun(_Pm) {}\r\n\r\n    _Result operator()(_Ty* _Pleft, _Arg _Right) const {\r\n        return (_Pleft->*_Pmemfun)(_Right);\r\n    }\r\n\r\nprivate:\r\n    _Result (_Ty::*_Pmemfun)(_Arg); // the member function pointer\r\n};\r\n\r\n_EXPORT_STD template <class _Result, class _Ty>\r\nclass const_mem_fun_t : public unary_function<const _Ty*, _Result> { // functor adapter (*p->*pfunc)(), const *pfunc\r\npublic:\r\n    explicit const_mem_fun_t(_Result (_Ty::*_Pm)() const) : _Pmemfun(_Pm) {}\r\n\r\n    _Result operator()(const _Ty* _Pleft) const {\r\n        return (_Pleft->*_Pmemfun)();\r\n    }\r\n\r\nprivate:\r\n    _Result (_Ty::*_Pmemfun)() const; // the member function pointer\r\n};\r\n\r\n_EXPORT_STD template <class _Result, class _Ty, class _Arg>\r\nclass const_mem_fun1_t\r\n    : public binary_function<const _Ty*, _Arg, _Result> { // functor adapter (*p->*pfunc)(val), const *pfunc\r\npublic:\r\n    explicit const_mem_fun1_t(_Result (_Ty::*_Pm)(_Arg) const) : _Pmemfun(_Pm) {}\r\n\r\n    _Result operator()(const _Ty* _Pleft, _Arg _Right) const {\r\n        return (_Pleft->*_Pmemfun)(_Right);\r\n    }\r\n\r\nprivate:\r\n    _Result (_Ty::*_Pmemfun)(_Arg) const; // the member function pointer\r\n};\r\n\r\n_EXPORT_STD template <class _Result, class _Ty>\r\n_NODISCARD mem_fun_t<_Result, _Ty> mem_fun(_Result (_Ty::*_Pm)()) {\r\n    return mem_fun_t<_Result, _Ty>(_Pm);\r\n}\r\n\r\n_EXPORT_STD template <class _Result, class _Ty, class _Arg>\r\n_NODISCARD mem_fun1_t<_Result, _Ty, _Arg> mem_fun(_Result (_Ty::*_Pm)(_Arg)) {\r\n    return mem_fun1_t<_Result, _Ty, _Arg>(_Pm);\r\n}\r\n\r\n_EXPORT_STD template <class _Result, class _Ty>\r\n_NODISCARD const_mem_fun_t<_Result, _Ty> mem_fun(_Result (_Ty::*_Pm)() const) {\r\n    return const_mem_fun_t<_Result, _Ty>(_Pm);\r\n}\r\n\r\n_EXPORT_STD template <class _Result, class _Ty, class _Arg>\r\n_NODISCARD const_mem_fun1_t<_Result, _Ty, _Arg> mem_fun(_Result (_Ty::*_Pm)(_Arg) const) {\r\n    return const_mem_fun1_t<_Result, _Ty, _Arg>(_Pm);\r\n}\r\n\r\n_EXPORT_STD template <class _Result, class _Ty>\r\nclass mem_fun_ref_t : public unary_function<_Ty, _Result> { // functor adapter (*left.*pfunc)(), non-const *pfunc\r\npublic:\r\n    explicit mem_fun_ref_t(_Result (_Ty::*_Pm)()) : _Pmemfun(_Pm) {}\r\n\r\n    _Result operator()(_Ty& _Left) const {\r\n        return (_Left.*_Pmemfun)();\r\n    }\r\n\r\nprivate:\r\n    _Result (_Ty::*_Pmemfun)(); // the member function pointer\r\n};\r\n\r\n_EXPORT_STD template <class _Result, class _Ty, class _Arg>\r\nclass mem_fun1_ref_t\r\n    : public binary_function<_Ty, _Arg, _Result> { // functor adapter (*left.*pfunc)(val), non-const *pfunc\r\npublic:\r\n    explicit mem_fun1_ref_t(_Result (_Ty::*_Pm)(_Arg)) : _Pmemfun(_Pm) {}\r\n\r\n    _Result operator()(_Ty& _Left, _Arg _Right) const {\r\n        return (_Left.*_Pmemfun)(_Right);\r\n    }\r\n\r\nprivate:\r\n    _Result (_Ty::*_Pmemfun)(_Arg); // the member function pointer\r\n};\r\n\r\n_EXPORT_STD template <class _Result, class _Ty>\r\nclass const_mem_fun_ref_t : public unary_function<_Ty, _Result> { // functor adapter (*left.*pfunc)(), const *pfunc\r\npublic:\r\n    explicit const_mem_fun_ref_t(_Result (_Ty::*_Pm)() const) : _Pmemfun(_Pm) {}\r\n\r\n    _Result operator()(const _Ty& _Left) const {\r\n        return (_Left.*_Pmemfun)();\r\n    }\r\n\r\nprivate:\r\n    _Result (_Ty::*_Pmemfun)() const; // the member function pointer\r\n};\r\n\r\n_EXPORT_STD template <class _Result, class _Ty, class _Arg>\r\nclass const_mem_fun1_ref_t\r\n    : public binary_function<_Ty, _Arg, _Result> { // functor adapter (*left.*pfunc)(val), const *pfunc\r\npublic:\r\n    explicit const_mem_fun1_ref_t(_Result (_Ty::*_Pm)(_Arg) const) : _Pmemfun(_Pm) {}\r\n\r\n    _Result operator()(const _Ty& _Left, _Arg _Right) const {\r\n        return (_Left.*_Pmemfun)(_Right);\r\n    }\r\n\r\nprivate:\r\n    _Result (_Ty::*_Pmemfun)(_Arg) const; // the member function pointer\r\n};\r\n\r\n_EXPORT_STD template <class _Result, class _Ty>\r\n_NODISCARD mem_fun_ref_t<_Result, _Ty> mem_fun_ref(_Result (_Ty::*_Pm)()) {\r\n    return mem_fun_ref_t<_Result, _Ty>(_Pm);\r\n}\r\n\r\n_EXPORT_STD template <class _Result, class _Ty, class _Arg>\r\n_NODISCARD mem_fun1_ref_t<_Result, _Ty, _Arg> mem_fun_ref(_Result (_Ty::*_Pm)(_Arg)) {\r\n    return mem_fun1_ref_t<_Result, _Ty, _Arg>(_Pm);\r\n}\r\n\r\n_EXPORT_STD template <class _Result, class _Ty>\r\n_NODISCARD const_mem_fun_ref_t<_Result, _Ty> mem_fun_ref(_Result (_Ty::*_Pm)() const) {\r\n    return const_mem_fun_ref_t<_Result, _Ty>(_Pm);\r\n}\r\n\r\n_EXPORT_STD template <class _Result, class _Ty, class _Arg>\r\n_NODISCARD const_mem_fun1_ref_t<_Result, _Ty, _Arg> mem_fun_ref(_Result (_Ty::*_Pm)(_Arg) const) {\r\n    return const_mem_fun1_ref_t<_Result, _Ty, _Arg>(_Pm);\r\n}\r\n#endif // _HAS_AUTO_PTR_ETC\r\n\r\ntemplate <class _Memptr>\r\nclass _Mem_fn : public _Weak_types<_Memptr> {\r\nprivate:\r\n    _Memptr _Pm;\r\n\r\npublic:\r\n    constexpr explicit _Mem_fn(_Memptr _Val) noexcept : _Pm(_Val) {}\r\n\r\n    template <class... _Types>\r\n    _CONSTEXPR20 auto operator()(_Types&&... _Args) const\r\n        noexcept(noexcept(_STD invoke(_Pm, _STD forward<_Types>(_Args)...))) //\r\n        -> decltype(_STD invoke(_Pm, _STD forward<_Types>(_Args)...)) {\r\n        return _STD invoke(_Pm, _STD forward<_Types>(_Args)...);\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Rx, class _Ty>\r\n_NODISCARD _CONSTEXPR20 _Mem_fn<_Rx _Ty::*> mem_fn(_Rx _Ty::* _Pm) noexcept {\r\n    return _Mem_fn<_Rx _Ty::*>(_Pm);\r\n}\r\n\r\n#if _HAS_CXX17\r\n#if _HAS_CXX20\r\ntemplate <class _Callable, class... _Types>\r\nconcept _Can_invoke_then_negate = requires(\r\n    _Callable&& _Fx, _Types&&... _Args) { !_STD invoke(_STD forward<_Callable>(_Fx), _STD forward<_Types>(_Args)...); };\r\n#endif // _HAS_CXX20\r\n\r\nstruct _Not_fn_tag {\r\n    explicit _Not_fn_tag() = default;\r\n};\r\n\r\ntemplate <class _Decayed>\r\nclass _Not_fn : private _Ebco_base<_Decayed> {\r\nprivate:\r\n    using _Mybase = _Ebco_base<_Decayed>;\r\n\r\npublic:\r\n    template <class _Callable, class _Tag, enable_if_t<is_same_v<_Tag, _Not_fn_tag>, int> = 0>\r\n    constexpr explicit _Not_fn(_Callable&& _Obj, _Tag)\r\n        noexcept(is_nothrow_constructible_v<_Decayed, _Callable>) // strengthened\r\n        : _Mybase(_STD forward<_Callable>(_Obj)) {} // store a callable object\r\n\r\n    constexpr _Not_fn(const _Not_fn&) = default;\r\n    constexpr _Not_fn(_Not_fn&&)      = default;\r\n\r\n#if _HAS_CXX20\r\n    template <class... _Types>\r\n        requires _Can_invoke_then_negate<_Decayed&, _Types...>\r\n    constexpr decltype(auto) operator()(_Types&&... _Args) & noexcept(\r\n        noexcept(!_STD invoke(this->_Get_val(), _STD forward<_Types>(_Args)...))) {\r\n        return !_STD invoke(this->_Get_val(), _STD forward<_Types>(_Args)...);\r\n    }\r\n\r\n    template <class... _Types>\r\n        requires _Can_invoke_then_negate<const _Decayed&, _Types...>\r\n    constexpr decltype(auto) operator()(_Types&&... _Args) const& noexcept(\r\n        noexcept(!_STD invoke(this->_Get_val(), _STD forward<_Types>(_Args)...))) {\r\n        return !_STD invoke(this->_Get_val(), _STD forward<_Types>(_Args)...);\r\n    }\r\n\r\n    template <class... _Types>\r\n        requires _Can_invoke_then_negate<_Decayed, _Types...>\r\n    constexpr decltype(auto) operator()(_Types&&... _Args) && noexcept(\r\n        noexcept(!_STD invoke(_STD move(this->_Get_val()), _STD forward<_Types>(_Args)...))) {\r\n        return !_STD invoke(_STD move(this->_Get_val()), _STD forward<_Types>(_Args)...);\r\n    }\r\n\r\n    template <class... _Types>\r\n        requires _Can_invoke_then_negate<const _Decayed, _Types...>\r\n    constexpr decltype(auto) operator()(_Types&&... _Args) const&& noexcept(\r\n        noexcept(!_STD invoke(_STD move(this->_Get_val()), _STD forward<_Types>(_Args)...))) {\r\n        return !_STD invoke(_STD move(this->_Get_val()), _STD forward<_Types>(_Args)...);\r\n    }\r\n\r\n    template <class... _Types>\r\n    void operator()(_Types&&...) & = delete;\r\n\r\n    template <class... _Types>\r\n    void operator()(_Types&&...) const& = delete;\r\n\r\n    template <class... _Types>\r\n    void operator()(_Types&&...) && = delete;\r\n\r\n    template <class... _Types>\r\n    void operator()(_Types&&...) const&& = delete;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    template <class... _Types>\r\n    auto operator()(_Types&&... _Args) & noexcept(\r\n        noexcept(!_STD invoke(this->_Get_val(), _STD forward<_Types>(_Args)...))) //\r\n        -> decltype(!_STD declval<invoke_result_t<_Decayed&, _Types...>>()) {\r\n        return !_STD invoke(this->_Get_val(), _STD forward<_Types>(_Args)...);\r\n    }\r\n\r\n    template <class... _Types>\r\n    auto operator()(_Types&&... _Args) const& noexcept(\r\n        noexcept(!_STD invoke(this->_Get_val(), _STD forward<_Types>(_Args)...))) //\r\n        -> decltype(!_STD declval<invoke_result_t<const _Decayed&, _Types...>>()) {\r\n        return !_STD invoke(this->_Get_val(), _STD forward<_Types>(_Args)...);\r\n    }\r\n\r\n    template <class... _Types>\r\n    auto operator()(_Types&&... _Args) && noexcept(\r\n        noexcept(!_STD invoke(_STD move(this->_Get_val()), _STD forward<_Types>(_Args)...))) //\r\n        -> decltype(!_STD declval<invoke_result_t<_Decayed, _Types...>>()) {\r\n        return !_STD invoke(_STD move(this->_Get_val()), _STD forward<_Types>(_Args)...);\r\n    }\r\n\r\n    template <class... _Types>\r\n    auto operator()(_Types&&... _Args) const&& noexcept(\r\n        noexcept(!_STD invoke(_STD move(this->_Get_val()), _STD forward<_Types>(_Args)...))) //\r\n        -> decltype(!_STD declval<invoke_result_t<const _Decayed, _Types...>>()) {\r\n        return !_STD invoke(_STD move(this->_Get_val()), _STD forward<_Types>(_Args)...);\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n};\r\n\r\n_EXPORT_STD template <class _Callable>\r\n_NODISCARD _CONSTEXPR20 _Not_fn<decay_t<_Callable>> not_fn(_Callable&& _Obj)\r\n    noexcept(is_nothrow_constructible_v<decay_t<_Callable>, _Callable>) /* strengthened */ {\r\n    // wrap a callable object to be negated\r\n    static_assert(is_move_constructible_v<decay_t<_Callable>>,\r\n        \"the callable type used with std::not_fn should be move constructible.\");\r\n    return _Not_fn<decay_t<_Callable>>(_STD forward<_Callable>(_Obj), _Not_fn_tag{});\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD class _NODISCARD bad_function_call : public exception {\r\n    // exception thrown when an empty std::function is called\r\npublic:\r\n    bad_function_call() noexcept {}\r\n\r\n    _NODISCARD const char* __CLR_OR_THIS_CALL what() const noexcept override {\r\n        // return pointer to message string\r\n        return \"bad function call\";\r\n    }\r\n};\r\n\r\nextern \"C++\" [[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xbad_function_call();\r\n\r\n_EXPORT_STD template <class _Fty>\r\nclass function;\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Testable_callable_v =\r\n    disjunction_v<is_pointer<_Ty>, _Is_specialization<_Ty, function>, is_member_pointer<_Ty>>;\r\n\r\ntemplate <class _Ty>\r\nbool _Test_callable(const _Ty& _Arg) noexcept { // determine whether std::function must store _Arg\r\n    if constexpr (_Testable_callable_v<_Ty>) {\r\n        return static_cast<bool>(_Arg);\r\n    } else {\r\n        return true;\r\n    }\r\n}\r\n\r\ntemplate <class _Rx, class... _Types>\r\nclass __declspec(novtable) _Func_base { // abstract base for implementation types\r\npublic:\r\n    virtual _Func_base* _Copy(void*) const                 = 0;\r\n    virtual _Func_base* _Move(void*) noexcept              = 0;\r\n    virtual _Rx _Do_call(_Types&&...)                      = 0;\r\n    virtual const type_info& _Target_type() const noexcept = 0;\r\n    virtual void _Delete_this(bool) noexcept               = 0;\r\n\r\n#if _HAS_STATIC_RTTI\r\n    const void* _Target(const type_info& _Info) const noexcept {\r\n        return _Target_type() == _Info ? _Get() : nullptr;\r\n    }\r\n#endif // _HAS_STATIC_RTTI\r\n\r\n    _Func_base()                             = default;\r\n    _Func_base(const _Func_base&)            = delete;\r\n    _Func_base& operator=(const _Func_base&) = delete;\r\n    // dtor non-virtual due to _Delete_this()\r\n\r\nprivate:\r\n    virtual const void* _Get() const noexcept = 0;\r\n};\r\n\r\n_INLINE_VAR constexpr size_t _Space_size = (_Small_object_num_ptrs - 1) * sizeof(void*);\r\n\r\ntemplate <class _Impl> // determine whether _Impl must be dynamically allocated\r\nconstexpr bool _Is_large = sizeof(_Impl) > _Space_size || alignof(_Impl) > alignof(max_align_t)\r\n                        || !_Impl::_Nothrow_move::value;\r\n\r\ntemplate <class _Callable, class _Alloc, class _Rx, class... _Types>\r\nclass _Func_impl final : public _Func_base<_Rx, _Types...> {\r\n    // derived class for specific implementation types that use allocators\r\npublic:\r\n    using _Mybase        = _Func_base<_Rx, _Types...>;\r\n    using _Myalty        = _Rebind_alloc_t<_Alloc, _Func_impl>;\r\n    using _Myalty_traits = allocator_traits<_Myalty>;\r\n    using _Nothrow_move  = is_nothrow_move_constructible<_Callable>;\r\n\r\n    template <class _Other1, class _Other2>\r\n    _Func_impl(_Other1&& _Val, _Other2&& _Ax)\r\n        : _Mypair(_One_then_variadic_args_t{}, _STD forward<_Other2>(_Ax), _STD forward<_Other1>(_Val)) {}\r\n\r\n    // dtor non-virtual due to _Delete_this()\r\n\r\nprivate:\r\n    _Mybase* _Copy(void* _Where) const override {\r\n        auto& _Myax = _Mypair._Get_first();\r\n        if constexpr (!is_copy_constructible_v<_Callable>) { // used exclusively for packaged_task\r\n            (void) _Myax;\r\n            _STL_REPORT_ERROR(\"this callable object should not be copied\");\r\n            return nullptr;\r\n        } else if constexpr (_Is_large<_Func_impl>) {\r\n            _Myalty _Rebound(_Myax);\r\n            _Alloc_construct_ptr<_Myalty> _Constructor{_Rebound};\r\n            _Constructor._Allocate();\r\n            _STD _Construct_in_place(*_Constructor._Ptr, _Mypair._Myval2, _Myax);\r\n            return _Constructor._Release();\r\n        } else {\r\n            const auto _Ptr = static_cast<_Func_impl*>(_Where);\r\n            _STD _Construct_in_place(*_Ptr, _Mypair._Myval2, _Myax);\r\n            return _Ptr;\r\n        }\r\n    }\r\n\r\n    _Mybase* _Move(void* _Where) noexcept override {\r\n        if constexpr (_Is_large<_Func_impl>) {\r\n            return nullptr;\r\n        } else {\r\n            const auto _Ptr = static_cast<_Func_impl*>(_Where);\r\n            _STD _Construct_in_place(*_Ptr, _STD move(_Mypair._Myval2), _STD move(_Mypair._Get_first()));\r\n            return _Ptr;\r\n        }\r\n    }\r\n\r\n    _Rx _Do_call(_Types&&... _Args) override { // call wrapped function\r\n        if constexpr (is_void_v<_Rx>) {\r\n            (void) _STD invoke(_Mypair._Myval2, _STD forward<_Types>(_Args)...);\r\n        } else {\r\n            return _STD invoke(_Mypair._Myval2, _STD forward<_Types>(_Args)...);\r\n        }\r\n    }\r\n\r\n#if _HAS_STATIC_RTTI\r\n    const type_info& _Target_type() const noexcept override {\r\n        return typeid(_Callable);\r\n    }\r\n#else // ^^^ _HAS_STATIC_RTTI / !_HAS_STATIC_RTTI vvv\r\n    [[noreturn]] const type_info& _Target_type() const noexcept override {\r\n        _STL_REPORT_ERROR(\"type info is disabled\");\r\n        _STL_UNREACHABLE; // no return value available for \"continue on error\"\r\n    }\r\n#endif // ^^^ !_HAS_STATIC_RTTI ^^^\r\n\r\n    const void* _Get() const noexcept override {\r\n        return _STD addressof(_Mypair._Myval2);\r\n    }\r\n\r\n    void _Delete_this(bool _Deallocate) noexcept override { // destroy self\r\n        _Myalty _Al(_Mypair._Get_first());\r\n        _STD _Destroy_in_place(*this);\r\n        if (_Deallocate) {\r\n            _STD _Deallocate_plain(_Al, this);\r\n        }\r\n    }\r\n\r\n    _Compressed_pair<_Alloc, _Callable> _Mypair;\r\n};\r\n\r\ntemplate <class _Ty, class... _Types>\r\n_Ty* _Global_new(_Types&&... _Args) { // acts as \"new\" while disallowing user overload selection\r\n    struct _NODISCARD _Guard_type {\r\n        void* _Result;\r\n        ~_Guard_type() {\r\n            if (_Result) {\r\n                _STD _Deallocate<_New_alignof<_Ty>>(_Result, sizeof(_Ty));\r\n            }\r\n        }\r\n    };\r\n\r\n    _Guard_type _Guard{_Allocate<_New_alignof<_Ty>>(sizeof(_Ty))};\r\n    ::new (_Guard._Result) _Ty(_STD forward<_Types>(_Args)...);\r\n    return static_cast<_Ty*>(_STD exchange(_Guard._Result, nullptr));\r\n}\r\n\r\ntemplate <class _Callable, class _Rx, class... _Types>\r\nclass _Func_impl_no_alloc final : public _Func_base<_Rx, _Types...> {\r\n    // derived class for specific implementation types that don't use allocators\r\npublic:\r\n    using _Mybase       = _Func_base<_Rx, _Types...>;\r\n    using _Nothrow_move = is_nothrow_move_constructible<_Callable>;\r\n\r\n    template <class _Other, enable_if_t<!is_same_v<_Func_impl_no_alloc, decay_t<_Other>>, int> = 0>\r\n    explicit _Func_impl_no_alloc(_Other&& _Val) : _Callee(_STD forward<_Other>(_Val)) {}\r\n\r\n    // dtor non-virtual due to _Delete_this()\r\n\r\nprivate:\r\n    _Mybase* _Copy(void* _Where) const override {\r\n        if constexpr (!is_copy_constructible_v<_Callable>) { // used exclusively for packaged_task\r\n            _STL_REPORT_ERROR(\"this callable object should not be copied\");\r\n            return nullptr;\r\n        } else if constexpr (_Is_large<_Func_impl_no_alloc>) {\r\n            return _STD _Global_new<_Func_impl_no_alloc>(_Callee);\r\n        } else {\r\n            return ::new (_Where) _Func_impl_no_alloc(_Callee);\r\n        }\r\n    }\r\n\r\n    _Mybase* _Move(void* _Where) noexcept override {\r\n        if constexpr (_Is_large<_Func_impl_no_alloc>) {\r\n            return nullptr;\r\n        } else {\r\n            return ::new (_Where) _Func_impl_no_alloc(_STD move(_Callee));\r\n        }\r\n    }\r\n\r\n    _Rx _Do_call(_Types&&... _Args) override { // call wrapped function\r\n        if constexpr (is_void_v<_Rx>) {\r\n            (void) _STD invoke(_Callee, _STD forward<_Types>(_Args)...);\r\n        } else {\r\n            return _STD invoke(_Callee, _STD forward<_Types>(_Args)...);\r\n        }\r\n    }\r\n\r\n#if _HAS_STATIC_RTTI\r\n    const type_info& _Target_type() const noexcept override {\r\n        return typeid(_Callable);\r\n    }\r\n#else // ^^^ _HAS_STATIC_RTTI / !_HAS_STATIC_RTTI vvv\r\n    [[noreturn]] const type_info& _Target_type() const noexcept override {\r\n        _STL_REPORT_ERROR(\"type info is disabled\");\r\n        _STL_UNREACHABLE; // no return value available for \"continue on error\"\r\n    }\r\n#endif // ^^^ !_HAS_STATIC_RTTI ^^^\r\n\r\n    const void* _Get() const noexcept override {\r\n        return _STD addressof(_Callee);\r\n    }\r\n\r\n    void _Delete_this(bool _Dealloc) noexcept override { // destroy self\r\n        this->~_Func_impl_no_alloc();\r\n        if (_Dealloc) {\r\n            _STD _Deallocate<alignof(_Func_impl_no_alloc)>(this, sizeof(_Func_impl_no_alloc));\r\n        }\r\n    }\r\n\r\n    _Callable _Callee;\r\n};\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Rx, class... _Types>\r\nclass _Function_base;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Ret, class... _Types>\r\nclass _Func_class : public _Arg_types<_Types...> {\r\npublic:\r\n    using result_type = _Ret;\r\n\r\n    using _Ptrt = _Func_base<_Ret, _Types...>;\r\n\r\n    _Func_class() noexcept {\r\n        _Set(nullptr);\r\n    }\r\n\r\n    _Ret operator()(_Types... _Args) const {\r\n        if (_Empty()) {\r\n            _Xbad_function_call();\r\n        }\r\n        const auto _Impl = _Getimpl();\r\n        return _Impl->_Do_call(_STD forward<_Types>(_Args)...);\r\n    }\r\n\r\n    ~_Func_class() noexcept {\r\n        _Tidy();\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n        const auto _Tombstone{reinterpret_cast<_Ptrt*>(_MSVC_STL_UINTPTR_TOMBSTONE_VALUE)};\r\n        _Set(_Tombstone);\r\n#endif // _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n    }\r\n\r\nprotected:\r\n    template <class _Fx, class _Function>\r\n    using _Enable_if_callable_t = enable_if_t<conjunction_v<negation<is_same<_Remove_cvref_t<_Fx>, _Function>>,\r\n                                                  _Is_invocable_r<_Ret, decay_t<_Fx>&, _Types...>>,\r\n        int>;\r\n\r\n    bool _Empty() const noexcept {\r\n        return !_Getimpl();\r\n    }\r\n\r\n    void _Reset_copy(const _Func_class& _Right) { // copy _Right's stored object\r\n        if (!_Right._Empty()) {\r\n            _Set(_Right._Getimpl()->_Copy(&_Mystorage));\r\n        }\r\n    }\r\n\r\n    void _Reset_move(_Func_class&& _Right) noexcept { // move _Right's stored object\r\n        if (!_Right._Empty()) {\r\n            if (_Right._Local()) { // move and tidy\r\n                _Set(_Right._Getimpl()->_Move(&_Mystorage));\r\n                _Right._Tidy();\r\n            } else { // steal from _Right\r\n                _Set(_Right._Getimpl());\r\n                _Right._Set(nullptr);\r\n            }\r\n        }\r\n    }\r\n\r\n    template <class _Fx>\r\n    void _Reset(_Fx&& _Val) { // store copy of _Val\r\n        if (!_STD _Test_callable(_Val)) { // null member pointer/function pointer/std::function\r\n            return; // already empty\r\n        }\r\n\r\n        using _Impl = _Func_impl_no_alloc<decay_t<_Fx>, _Ret, _Types...>;\r\n        if constexpr (_Is_large<_Impl>) {\r\n            // dynamically allocate _Val\r\n            _Set(_STD _Global_new<_Impl>(_STD forward<_Fx>(_Val)));\r\n        } else {\r\n            // store _Val in-situ\r\n            _Set(::new (static_cast<void*>(&_Mystorage)) _Impl(_STD forward<_Fx>(_Val)));\r\n        }\r\n    }\r\n\r\n    template <class _Fx, class _Alloc>\r\n    void _Reset_alloc(_Fx&& _Val, const _Alloc& _Ax) { // store copy of _Val with allocator\r\n        if (!_STD _Test_callable(_Val)) { // null member pointer/function pointer/std::function\r\n            return; // already empty\r\n        }\r\n\r\n        using _Myimpl = _Func_impl<decay_t<_Fx>, _Alloc, _Ret, _Types...>;\r\n        if constexpr (_Is_large<_Myimpl>) {\r\n            // dynamically allocate _Val\r\n            using _Alimpl = _Rebind_alloc_t<_Alloc, _Myimpl>;\r\n            _Alimpl _Al(_Ax);\r\n            _Alloc_construct_ptr<_Alimpl> _Constructor{_Al};\r\n            _Constructor._Allocate();\r\n            _STD _Construct_in_place(*_Constructor._Ptr, _STD forward<_Fx>(_Val), _Ax);\r\n            _Set(_STD _Unfancy(_Constructor._Release()));\r\n        } else {\r\n            // store _Val in-situ\r\n            const auto _Ptr = reinterpret_cast<_Myimpl*>(&_Mystorage);\r\n            _STD _Construct_in_place(*_Ptr, _STD forward<_Fx>(_Val), _Ax);\r\n            _Set(_Ptr);\r\n        }\r\n    }\r\n\r\n    void _Tidy() noexcept {\r\n        if (!_Empty()) { // destroy callable object and maybe delete it\r\n            _Getimpl()->_Delete_this(!_Local());\r\n            _Set(nullptr);\r\n        }\r\n    }\r\n\r\n    void _Swap(_Func_class& _Right) noexcept { // swap contents with contents of _Right\r\n        if (!_Local() && !_Right._Local()) { // just swap pointers\r\n            _Ptrt* _Temp = _Getimpl();\r\n            _Set(_Right._Getimpl());\r\n            _Right._Set(_Temp);\r\n        } else { // do three-way move\r\n            _Func_class _Temp;\r\n            _Temp._Reset_move(_STD move(*this));\r\n            _Reset_move(_STD move(_Right));\r\n            _Right._Reset_move(_STD move(_Temp));\r\n        }\r\n    }\r\n\r\n#if _HAS_STATIC_RTTI\r\n    const type_info& _Target_type() const noexcept {\r\n        return _Getimpl() ? _Getimpl()->_Target_type() : typeid(void);\r\n    }\r\n\r\n    const void* _Target(const type_info& _Info) const noexcept {\r\n        return _Getimpl() ? _Getimpl()->_Target(_Info) : nullptr;\r\n    }\r\n#endif // _HAS_STATIC_RTTI\r\n\r\nprivate:\r\n#if _HAS_CXX23\r\n    friend _Function_base<_Ret, _Types...>;\r\n#endif // _HAS_CXX23\r\n\r\n    bool _Local() const noexcept { // test for locally stored copy of object\r\n        return _Getimpl() == static_cast<const void*>(&_Mystorage);\r\n    }\r\n\r\n    union _Storage { // storage for small objects (basic_string is small)\r\n        max_align_t _Dummy1; // for maximum alignment\r\n        char _Dummy2[_Space_size]; // to permit aliasing\r\n        _Ptrt* _Ptrs[_Small_object_num_ptrs]; // _Ptrs[_Small_object_num_ptrs - 1] is reserved\r\n    };\r\n\r\n    _Storage _Mystorage;\r\n    enum { _EEN_IMPL = _Small_object_num_ptrs - 1 }; // helper for expression evaluator\r\n    _Ptrt* _Getimpl() const noexcept { // get pointer to object\r\n        return _Mystorage._Ptrs[_Small_object_num_ptrs - 1];\r\n    }\r\n\r\n    void _Set(_Ptrt* _Ptr) noexcept { // store pointer to object\r\n        _Mystorage._Ptrs[_Small_object_num_ptrs - 1] = _Ptr;\r\n    }\r\n};\r\n\r\ntemplate <class _Tx>\r\nstruct _Get_function_impl {\r\n    static_assert(false, \"std::function only accepts function types as template arguments.\");\r\n};\r\n\r\n#define _GET_FUNCTION_IMPL(CALL_OPT, X1, X2, X3)                                                  \\\r\n    template <class _Ret, class... _Types>                                                        \\\r\n    struct _Get_function_impl<_Ret CALL_OPT(_Types...)> { /* determine type from argument list */ \\\r\n        using type = _Func_class<_Ret, _Types...>;                                                \\\r\n    };\r\n\r\n_NON_MEMBER_CALL(_GET_FUNCTION_IMPL, X1, X2, X3)\r\n#undef _GET_FUNCTION_IMPL\r\n\r\n#ifdef __cpp_noexcept_function_type\r\n#define _GET_FUNCTION_IMPL_NOEXCEPT(CALL_OPT, X1, X2, X3)                                                     \\\r\n    template <class _Ret, class... _Types>                                                                    \\\r\n    struct _Get_function_impl<_Ret CALL_OPT(_Types...) noexcept> {                                            \\\r\n        static_assert(false, \"std::function does not accept noexcept function types as template arguments.\"); \\\r\n    };\r\n_NON_MEMBER_CALL(_GET_FUNCTION_IMPL_NOEXCEPT, X1, X2, X3)\r\n#undef _GET_FUNCTION_IMPL_NOEXCEPT\r\n#endif // defined(__cpp_noexcept_function_type)\r\n\r\nstruct _Secret_copyability_ignoring_tag { // used exclusively for packaged_task\r\n    explicit _Secret_copyability_ignoring_tag() = default;\r\n};\r\n\r\n_EXPORT_STD template <class _Fty>\r\nclass function : public _Get_function_impl<_Fty>::type { // wrapper for callable objects\r\nprivate:\r\n    using _Mybase = typename _Get_function_impl<_Fty>::type;\r\n\r\npublic:\r\n    function() noexcept {}\r\n\r\n    function(nullptr_t) noexcept {}\r\n\r\n    function(const function& _Right) {\r\n        this->_Reset_copy(_Right);\r\n    }\r\n\r\n    template <class _Fx, typename _Mybase::template _Enable_if_callable_t<_Fx, function> = 0>\r\n    function(_Fx&& _Func) {\r\n        static_assert(is_copy_constructible_v<decay_t<_Fx>>,\r\n            \"The target function object type must be copy constructible (N4988 [func.wrap.func.con]/10.1).\");\r\n        this->_Reset(_STD forward<_Fx>(_Func));\r\n    }\r\n\r\n    template <class _SecretTag, class _Fx,\r\n        enable_if_t<is_same_v<_SecretTag, _Secret_copyability_ignoring_tag>, int> = 0,\r\n        typename _Mybase::template _Enable_if_callable_t<_Fx, function>           = 0>\r\n    explicit function(_SecretTag, _Fx&& _Func) { // used exclusively for packaged_task\r\n        this->_Reset(_STD forward<_Fx>(_Func));\r\n    }\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n    template <class _Alloc>\r\n    function(allocator_arg_t, const _Alloc&) noexcept {}\r\n\r\n    template <class _Alloc>\r\n    function(allocator_arg_t, const _Alloc&, nullptr_t) noexcept {}\r\n\r\n    template <class _Alloc>\r\n    function(allocator_arg_t, const _Alloc& _Ax, const function& _Right) {\r\n        this->_Reset_alloc(_Right, _Ax);\r\n    }\r\n\r\n    template <class _Fx, class _Alloc, typename _Mybase::template _Enable_if_callable_t<_Fx, function> = 0>\r\n    function(allocator_arg_t, const _Alloc& _Ax, _Fx&& _Func) {\r\n        static_assert(is_copy_constructible_v<decay_t<_Fx>>,\r\n            \"The target function object type must be copy constructible (N4140 [func.wrap.func.con]/7).\");\r\n        this->_Reset_alloc(_STD forward<_Fx>(_Func), _Ax);\r\n    }\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n\r\n    template <class _SecretTag, class _Fx, class _Alloc,\r\n        enable_if_t<is_same_v<_SecretTag, _Secret_copyability_ignoring_tag>, int> = 0,\r\n        typename _Mybase::template _Enable_if_callable_t<_Fx, function>           = 0>\r\n    explicit function(_SecretTag, allocator_arg_t, const _Alloc& _Ax, _Fx&& _Func) {\r\n        // used exclusively for packaged_task\r\n        this->_Reset_alloc(_STD forward<_Fx>(_Func), _Ax);\r\n    }\r\n\r\n    function& operator=(const function& _Right) {\r\n        function(_Right).swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    function(function&& _Right) noexcept {\r\n        this->_Reset_move(_STD move(_Right));\r\n    }\r\n\r\n    template <class _SecretTag, class _Alloc,\r\n        enable_if_t<is_same_v<_SecretTag, _Secret_copyability_ignoring_tag>, int> = 0>\r\n    explicit function(_SecretTag, allocator_arg_t, const _Alloc& _Al, function&& _Right) {\r\n        this->_Reset_alloc(_STD move(_Right), _Al);\r\n    }\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n    template <class _Alloc>\r\n    function(allocator_arg_t, const _Alloc& _Al, function&& _Right)\r\n        : function(_Secret_copyability_ignoring_tag{}, allocator_arg, _Al, _STD move(_Right)) {}\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n\r\n    function& operator=(function&& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            this->_Tidy();\r\n            this->_Reset_move(_STD move(_Right));\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    template <class _Fx, typename _Mybase::template _Enable_if_callable_t<_Fx, function> = 0>\r\n    function& operator=(_Fx&& _Func) {\r\n        function(_STD forward<_Fx>(_Func)).swap(*this);\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n    template <class _Fx, class _Alloc>\r\n    void assign(_Fx&& _Func, const _Alloc& _Ax) {\r\n        function(allocator_arg, _Ax, _STD forward<_Fx>(_Func)).swap(*this);\r\n    }\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n\r\n    function& operator=(nullptr_t) noexcept {\r\n        this->_Tidy();\r\n        return *this;\r\n    }\r\n\r\n    template <class _Fx>\r\n    function& operator=(reference_wrapper<_Fx> _Func) noexcept {\r\n        this->_Tidy();\r\n        this->_Reset(_Func);\r\n        return *this;\r\n    }\r\n\r\n    void swap(function& _Right) noexcept {\r\n        this->_Swap(_Right);\r\n    }\r\n\r\n    explicit operator bool() const noexcept {\r\n        return !this->_Empty();\r\n    }\r\n\r\n#if _HAS_STATIC_RTTI\r\n    _NODISCARD const type_info& target_type() const noexcept {\r\n        return this->_Target_type();\r\n    }\r\n\r\n    template <class _Fx>\r\n    _NODISCARD _Fx* target() noexcept {\r\n        if constexpr (is_function_v<_Fx>) {\r\n            return nullptr;\r\n        } else {\r\n            return reinterpret_cast<_Fx*>(const_cast<void*>(this->_Target(typeid(_Fx))));\r\n        }\r\n    }\r\n\r\n    template <class _Fx>\r\n    _NODISCARD const _Fx* target() const noexcept {\r\n        if constexpr (is_function_v<_Fx>) {\r\n            return nullptr;\r\n        } else {\r\n            return reinterpret_cast<const _Fx*>(this->_Target(typeid(_Fx)));\r\n        }\r\n    }\r\n#else // ^^^ _HAS_STATIC_RTTI / !_HAS_STATIC_RTTI vvv\r\n    const type_info& target_type() const noexcept = delete; // requires static RTTI\r\n\r\n    template <class _Fx>\r\n    _Fx* target() noexcept = delete; // requires static RTTI\r\n\r\n    template <class _Fx>\r\n    const _Fx* target() const noexcept = delete; // requires static RTTI\r\n#endif // ^^^ !_HAS_STATIC_RTTI ^^^\r\n};\r\n\r\n#if _HAS_CXX17\r\n#define _FUNCTION_POINTER_DEDUCTION_GUIDE(CALL_OPT, X1, X2, X3) \\\r\n    template <class _Ret, class... _Types>                      \\\r\n    function(_Ret(CALL_OPT*)(_Types...)) -> function<_Ret(_Types...)>; // intentionally discards CALL_OPT\r\n\r\n_NON_MEMBER_CALL(_FUNCTION_POINTER_DEDUCTION_GUIDE, X1, X2, X3)\r\n#undef _FUNCTION_POINTER_DEDUCTION_GUIDE\r\n\r\ntemplate <class _Fx, class _Call_op, class = void>\r\nstruct _Deduce_from_call_operator : _Is_memfunptr<_Call_op>::_Guide_type {}; // N4958 [func.wrap.func.con]/16.1\r\n\r\n#if _HAS_CXX23\r\ntemplate <class>\r\nstruct _Inspect_static_call_operator {};\r\n\r\n#define _STATIC_CALL_OPERATOR_GUIDES(CALL_OPT, CV_OPT, REF_OPT, NOEXCEPT_OPT)      \\\r\n    template <class _Ret, class... _Args>                                          \\\r\n    struct _Inspect_static_call_operator<_Ret(CALL_OPT*)(_Args...) NOEXCEPT_OPT> { \\\r\n        using type = _Ret(_Args...);                                               \\\r\n    };\r\n\r\n_NON_MEMBER_CALL(_STATIC_CALL_OPERATOR_GUIDES, , , )\r\n#ifdef __cpp_noexcept_function_type\r\n_NON_MEMBER_CALL(_STATIC_CALL_OPERATOR_GUIDES, , , noexcept)\r\n#endif // ^^^ defined(__cpp_noexcept_function_type) ^^^\r\n\r\n#undef _STATIC_CALL_OPERATOR_GUIDES\r\n\r\ntemplate <class _Fx, class _Call_op>\r\nstruct _Deduce_from_call_operator<_Fx, _Call_op, void_t<decltype(_STD declval<_Fx>().operator())>>\r\n    : _Inspect_static_call_operator<_Call_op> {}; // N4958 [func.wrap.func.con]/16.2\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Fx, class = void>\r\nstruct _Deduce_signature {}; // can't deduce signature when &_Fx::operator() is missing, inaccessible, or ambiguous\r\n\r\ntemplate <class _Fx>\r\nstruct _Deduce_signature<_Fx, void_t<decltype(&_Fx::operator())>>\r\n    : _Deduce_from_call_operator<_Fx, decltype(&_Fx::operator())> {};\r\n\r\ntemplate <class _Fx>\r\nfunction(_Fx) -> function<typename _Deduce_signature<_Fx>::type>;\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Fty>\r\nvoid swap(function<_Fty>& _Left, function<_Fty>& _Right) noexcept {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Fty>\r\n_NODISCARD bool operator==(const function<_Fty>& _Other, nullptr_t) noexcept {\r\n    return !_Other;\r\n}\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _Fty>\r\n_NODISCARD bool operator==(nullptr_t, const function<_Fty>& _Other) noexcept {\r\n    return !_Other;\r\n}\r\n\r\ntemplate <class _Fty>\r\n_NODISCARD bool operator!=(const function<_Fty>& _Other, nullptr_t) noexcept {\r\n    return static_cast<bool>(_Other);\r\n}\r\n\r\ntemplate <class _Fty>\r\n_NODISCARD bool operator!=(nullptr_t, const function<_Fty>& _Other) noexcept {\r\n    return static_cast<bool>(_Other);\r\n}\r\n#endif // !_HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\nenum class _Function_storage_mode { _Small, _Large };\r\n\r\n// _Function_data is defined as an array of pointers.\r\n// The first element is always a pointer to _Function_base::_Impl_t; it emulates a vtable pointer.\r\n// The other pointers are used as storage for a small functor;\r\n// if the functor does not fit in, the second pointer is the pointer to allocated storage, the rest are unused.\r\nunion alignas(max_align_t) _Function_data {\r\n    void* _Pointers[_Small_object_num_ptrs];\r\n    const void* _Impl;\r\n    char _Data; // For aliasing\r\n\r\n    template <class _Fn>\r\n    static constexpr size_t _Buf_offset =\r\n        alignof(_Fn) <= sizeof(_Impl) ? sizeof(_Impl) // Store _Fn immediately after _Impl\r\n                                      : alignof(_Fn); // Pad _Fn to next alignment\r\n\r\n    template <class _Fn>\r\n    static constexpr size_t _Buf_size = sizeof(_Pointers) - _Buf_offset<_Fn>;\r\n\r\n    template <class _Fn>\r\n    _NODISCARD void* _Buf_ptr() noexcept {\r\n        return &_Data + _Buf_offset<_Fn>;\r\n    }\r\n\r\n    template <class _Fn, _Function_storage_mode _Mode>\r\n    _NODISCARD _Fn* _Fn_ptr() noexcept {\r\n        if constexpr (_Mode == _Function_storage_mode::_Small) {\r\n            return static_cast<_Fn*>(_Buf_ptr<_Fn>());\r\n        } else {\r\n            return static_cast<_Fn*>(_Pointers[1]);\r\n        }\r\n    }\r\n\r\n    void _Set_large_fn_ptr(void* const _Value) noexcept {\r\n        _Pointers[1] = _Value;\r\n    }\r\n};\r\n\r\n// Size of a large function. Treat an empty function as if it has this size.\r\n// Treat a small function as if it has this size too if it fits and is trivially copyable.\r\ninline constexpr size_t _Minimum_function_size = 2 * sizeof(void*);\r\n\r\n// The below functions are __stdcall as they are called by pointers from _Function_base::_Impl_t.\r\n// (We use explicit __stdcall to make the ABI stable for translation units with different calling convention options.)\r\n// Non-template functions are still defined inline, as the compiler may be able to devirtualize some calls.\r\n\r\ntemplate <class _Rx, class... _Types>\r\n[[noreturn]] _Rx __stdcall _Function_not_callable(void*, _Types&&...) noexcept {\r\n    _STL_REPORT_ERROR(\"empty move_only_function call (N5008 [func.wrap.move.inv]/2)\");\r\n    _STL_UNREACHABLE; // no return value available for \"continue on error\"\r\n}\r\n\r\ntemplate <class _Rx, class... _Types>\r\n[[noreturn]] _Rx __stdcall _Function_old_not_callable(void*, _Types&&...) {\r\n    _Xbad_function_call();\r\n}\r\n\r\ntemplate <class _Vt, class _VtInvQuals, _Function_storage_mode _Mode, class _Rx, bool _Noex, class... _Types>\r\n_NODISCARD _Rx __stdcall _Function_inv(void* const _Self, _Types&&... _Args) noexcept(_Noex) {\r\n    const auto _Ptr = static_cast<_Function_data*>(_Self)->_Fn_ptr<_Vt, _Mode>();\r\n    if constexpr (is_void_v<_Rx>) {\r\n        (void) _STD invoke(static_cast<_VtInvQuals>(*_Ptr), _STD forward<_Types>(_Args)...);\r\n    } else {\r\n        return _STD invoke(static_cast<_VtInvQuals>(*_Ptr), _STD forward<_Types>(_Args)...);\r\n    }\r\n}\r\n\r\ntemplate <class _Fn, _Function_storage_mode _Mode, class _Rx, class... _Types>\r\n_NODISCARD _Rx __stdcall _Function_inv_old(void* const _Self, _Types&&... _Args) {\r\n    const auto _Ptr = static_cast<_Function_data*>(_Self)->_Fn_ptr<_Fn, _Mode>();\r\n    return _Ptr->_Do_call(_STD forward<_Types>(_Args)...);\r\n}\r\n\r\ntemplate <class _Vt>\r\nvoid __stdcall _Function_move_small(_Function_data& _Self, _Function_data& _Src) noexcept {\r\n    const auto _Src_fn_ptr = _Src._Fn_ptr<_Vt, _Function_storage_mode::_Small>();\r\n    ::new (_Self._Buf_ptr<_Vt>()) _Vt(_STD move(*_Src_fn_ptr));\r\n    _Src_fn_ptr->~_Vt();\r\n    _Self._Impl = _Src._Impl;\r\n}\r\n\r\ntemplate <size_t _Size>\r\nvoid __stdcall _Function_move_memcpy(_Function_data& _Self, _Function_data& _Src) noexcept {\r\n    _CSTD memcpy(&_Self._Data, &_Src._Data, _Size); // Copy Impl* and functor data\r\n}\r\n\r\ninline void __stdcall _Function_move_large(_Function_data& _Self, _Function_data& _Src) noexcept {\r\n    _CSTD memcpy(&_Self._Data, &_Src._Data, _Minimum_function_size); // Copy Impl* and functor data\r\n}\r\n\r\n#ifdef _WIN64\r\ntemplate <class _Fn>\r\nvoid __stdcall _Function_move_old_small(_Function_data& _Self, _Function_data& _Src) noexcept {\r\n    _Fn* const _Old_fn_impl = _Src._Fn_ptr<_Fn, _Function_storage_mode::_Small>();\r\n    _Old_fn_impl->_Move(_Self._Buf_ptr<void*>());\r\n    _Old_fn_impl->_Delete_this(false);\r\n    _Self._Impl = _Src._Impl;\r\n}\r\n#endif // ^^^ 64-bit ^^^\r\n\r\ntemplate <class _Vt>\r\nvoid __stdcall _Function_destroy_small(_Function_data& _Self) noexcept {\r\n    _Self._Fn_ptr<_Vt, _Function_storage_mode::_Small>()->~_Vt();\r\n}\r\n\r\ninline void __stdcall _Function_deallocate_large_default_aligned(_Function_data& _Self) noexcept {\r\n    ::operator delete(_Self._Fn_ptr<void, _Function_storage_mode::_Large>());\r\n}\r\n\r\ntemplate <class _Fn>\r\nvoid __stdcall _Function_destroy_old_large(_Function_data& _Self) noexcept {\r\n    _Self._Fn_ptr<_Fn, _Function_storage_mode::_Large>()->_Delete_this(true);\r\n}\r\n\r\n#ifdef _WIN64\r\ntemplate <class _Fn>\r\nvoid __stdcall _Function_destroy_old_small(_Function_data& _Self) noexcept {\r\n    _Self._Fn_ptr<_Fn, _Function_storage_mode::_Small>()->_Delete_this(false);\r\n}\r\n#else // ^^^ 64-bit / 32-bit vvv\r\ntemplate <class _Fn>\r\nvoid __stdcall _Function_destroy_old_small_as_large(_Function_data& _Self) noexcept {\r\n    _Fn* const _Old_fn_impl = _Self._Fn_ptr<_Fn, _Function_storage_mode::_Large>();\r\n    _Old_fn_impl->_Delete_this(false);\r\n    ::operator delete(static_cast<void*>(_Old_fn_impl));\r\n}\r\n#endif // ^^^ 32-bit ^^^\r\n\r\ntemplate <size_t _Align>\r\nvoid __stdcall _Function_deallocate_large_overaligned(_Function_data& _Self) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(_Align > __STDCPP_DEFAULT_NEW_ALIGNMENT__);\r\n#ifdef __cpp_aligned_new\r\n    ::operator delete(_Self._Fn_ptr<void, _Function_storage_mode::_Large>(), align_val_t{_Align});\r\n#else // ^^^ defined(__cpp_aligned_new) / !defined(__cpp_aligned_new) vvv\r\n    ::operator delete(_Self._Fn_ptr<void, _Function_storage_mode::_Large>());\r\n#endif // ^^^ !defined(__cpp_aligned_new) ^^^\r\n}\r\n\r\ntemplate <class _Vt>\r\nvoid __stdcall _Function_destroy_large(_Function_data& _Self) noexcept {\r\n    const auto _Pfn = _Self._Fn_ptr<_Vt, _Function_storage_mode::_Large>();\r\n    _Pfn->~_Vt();\r\n#ifdef __cpp_aligned_new\r\n    if constexpr (alignof(_Vt) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n        ::operator delete(static_cast<void*>(_Pfn), align_val_t{alignof(_Vt)});\r\n    } else\r\n#endif // defined(__cpp_aligned_new)\r\n    {\r\n        ::operator delete(static_cast<void*>(_Pfn));\r\n    }\r\n}\r\n\r\ntemplate <class _Vt>\r\nconstexpr size_t _Function_small_copy_size = // We copy Impl* and the functor data at once\r\n    _Function_data::_Buf_offset<_Vt> // Impl* plus possible alignment\r\n    + (size_t{sizeof(_Vt) + sizeof(void*) - 1} & ~size_t{sizeof(void*) - 1}); // size in whole pointers\r\n\r\ntemplate <class _Vt, class... _CTypes>\r\n_NODISCARD void* _Function_new_large(_CTypes&&... _Args) {\r\n    struct _NODISCARD _Guard_type {\r\n        void* _Ptr;\r\n\r\n        ~_Guard_type() {\r\n            // _Ptr is not nullptr only if an exception is thrown as a result of _Vt construction.\r\n            // Check _Ptr before calling operator delete to save the call in the common case.\r\n            if (_Ptr) {\r\n#ifdef __cpp_aligned_new\r\n                if constexpr (alignof(_Vt) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n                    ::operator delete(_Ptr, align_val_t{alignof(_Vt)});\r\n                } else\r\n#endif // defined(__cpp_aligned_new)\r\n                {\r\n                    ::operator delete(_Ptr);\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    void* _Ptr;\r\n#ifdef __cpp_aligned_new\r\n    if constexpr (alignof(_Vt) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n        _Ptr = ::operator new(sizeof(_Vt), align_val_t{alignof(_Vt)});\r\n    } else\r\n#endif // defined(__cpp_aligned_new)\r\n    {\r\n        _Ptr = ::operator new(sizeof(_Vt));\r\n    }\r\n    _Guard_type _Guard{_Ptr};\r\n    ::new (_Ptr) _Vt(_STD forward<_CTypes>(_Args)...);\r\n    _Guard._Ptr = nullptr;\r\n    return _Ptr;\r\n}\r\n\r\ntemplate <class _Rx, class... _Types>\r\nclass _Function_base {\r\npublic:\r\n    using result_type                    = _Rx;\r\n    using _Signature_without_cv_ref_noex = _Rx(_Types...);\r\n\r\n    struct _Impl_t { // A per-callable-type structure acting as a virtual function table.\r\n        // Using vtable emulations gives more flexibility for optimizations and reduces the amount of RTTI data.\r\n        // (The RTTI savings may be significant as with lambdas and binds there may be many distinct callable types.\r\n        // Here we don't have a distinct wrapper class for each callable type, only distinct functions when needed.)\r\n\r\n        // _Move and _Destroy are nullptr if trivial. Besides being an optimization, this enables assigning an\r\n        // empty function from a DLL that is unloaded later, and then safely moving/destroying that empty function.\r\n\r\n        // Calls target\r\n        _Rx(__stdcall* _Invoke)(void*, _Types&&...);\r\n        // Moves the data, including pointer to \"vtable\", AND destroys old data (not resetting its \"vtable\").\r\n        // nullptr if we can trivially move two pointers.\r\n        void(__stdcall* _Move)(_Function_data&, _Function_data&) _NOEXCEPT_FNPTR;\r\n        // Destroys data (not resetting its \"vtable\").\r\n        // nullptr if destruction is a no-op.\r\n        void(__stdcall* _Destroy)(_Function_data&) _NOEXCEPT_FNPTR;\r\n    };\r\n\r\n    enum class _Impl_kind {\r\n        _Usual        = 0,\r\n        _Old_fn_null  = 1,\r\n        _Old_fn_large = 2,\r\n#ifdef _WIN64\r\n        _Old_fn_small = 3,\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n        _Old_fn_small_as_large = 4,\r\n#endif // ^^^ 32-bit ^^^\r\n    };\r\n\r\n    _Function_data _Data;\r\n\r\n    _Function_base() noexcept = default; // leaves the data member uninitialized\r\n\r\n    _Function_base(_Function_base&& _Other) noexcept {\r\n        _Checked_move(_Data, _Other._Data);\r\n        _Other._Reset_to_null();\r\n    }\r\n\r\n    void _Reset_to_null() noexcept {\r\n        _Data._Impl = nullptr;\r\n    }\r\n\r\n    template <class _Vt, class _Fn>\r\n    void _Construct_with_old_fn(_Fn&& _Func) {\r\n        const auto _Old_fn_impl = _Func._Getimpl();\r\n        if (_Old_fn_impl == nullptr) {\r\n            _Data._Impl = _Create_impl_ptr<_Impl_kind::_Old_fn_null, _Vt, false, void>();\r\n        } else if (_Func._Local()) {\r\n#ifdef _WIN64\r\n            _STL_INTERNAL_STATIC_ASSERT(alignof(max_align_t) == alignof(void*));\r\n            // 64-bit target, can put small function into small move_only_function directly\r\n            _Data._Impl = _Create_impl_ptr<_Impl_kind::_Old_fn_small, _Vt, false, void>();\r\n            if constexpr (is_lvalue_reference_v<_Fn>) {\r\n                _Old_fn_impl->_Copy(_Data._Buf_ptr<void*>());\r\n            } else {\r\n                _Old_fn_impl->_Move(_Data._Buf_ptr<void*>());\r\n                _Func._Tidy();\r\n            }\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n            _STL_INTERNAL_STATIC_ASSERT(alignof(max_align_t) > alignof(void*));\r\n            // 32-bit target, cannot put small function into small move_only_function directly\r\n            // due to potentially not enough alignment. Allocate large function\r\n            void* _Where = ::operator new((_Small_object_num_ptrs - 1) * sizeof(void*));\r\n            if constexpr (is_lvalue_reference_v<_Fn>) {\r\n                struct _NODISCARD _Guard_type {\r\n                    void* _Ptr;\r\n\r\n                    ~_Guard_type() {\r\n                        // _Ptr is not nullptr only if an exception is thrown as a result of _Copy.\r\n                        // Check _Ptr before calling operator delete to save the call in the common case.\r\n                        if (_Ptr) {\r\n                            ::operator delete(_Ptr);\r\n                        }\r\n                    }\r\n                };\r\n\r\n                _Guard_type _Guard{_Where};\r\n                _Old_fn_impl->_Copy(_Where);\r\n                _Guard._Ptr = nullptr;\r\n            } else {\r\n                _Old_fn_impl->_Move(_Where);\r\n                _Func._Tidy();\r\n            }\r\n\r\n            _Data._Impl = _Create_impl_ptr<_Impl_kind::_Old_fn_small_as_large, _Vt, false, void>();\r\n            _Data._Set_large_fn_ptr(_Where);\r\n#endif // ^^^ 32-bit ^^^\r\n        } else {\r\n            // Just take ownership of the inner impl pointer\r\n            _Data._Impl = _Create_impl_ptr<_Impl_kind::_Old_fn_large, _Vt, false, void>();\r\n            if constexpr (is_lvalue_reference_v<_Fn>) {\r\n                _Data._Set_large_fn_ptr(_Old_fn_impl->_Copy(nullptr));\r\n            } else {\r\n                _Data._Set_large_fn_ptr(_Old_fn_impl);\r\n                _Func._Set(nullptr);\r\n            }\r\n        }\r\n    }\r\n\r\n    template <class _Vt, bool _Noexcept, class _VtInvQuals, class... _CTypes>\r\n    void _Construct_with_fn(_CTypes&&... _Args) {\r\n        _Data._Impl = _Create_impl_ptr<_Impl_kind::_Usual, _Vt, _Noexcept, _VtInvQuals>();\r\n        if constexpr (_Large_function_engaged<_Vt>) {\r\n            _Data._Set_large_fn_ptr(_STD _Function_new_large<_Vt>(_STD forward<_CTypes>(_Args)...));\r\n        } else {\r\n            ::new (_Data._Buf_ptr<_Vt>()) _Vt(_STD forward<_CTypes>(_Args)...);\r\n        }\r\n    }\r\n\r\n    static void _Checked_destroy(_Function_data& _Data) noexcept {\r\n        const auto _Impl = _Get_impl(_Data);\r\n        if (_Impl->_Destroy) {\r\n            _Impl->_Destroy(_Data);\r\n        }\r\n    }\r\n\r\n    static void _Checked_move(_Function_data& _Data, _Function_data& _Src) noexcept {\r\n        const auto _Impl = _Get_impl(_Src);\r\n        if (_Impl->_Move) {\r\n            _Impl->_Move(_Data, _Src);\r\n        } else {\r\n            _Function_move_large(_Data, _Src);\r\n        }\r\n    }\r\n\r\n    void _Move_assign(_Function_base&& _Other) noexcept {\r\n        // As specified in N4950 [func.wrap.move.ctor]/22, we are expected to first move the new target,\r\n        // then finally destroy the old target.\r\n        // It is more efficient to do the reverse - this way no temporary storage for the old target will be used.\r\n        // In some cases when some operations are trivial, it can be optimized,\r\n        // as the order change is unobservable, and everything is noexcept here.\r\n        const auto _This_impl         = _Get_impl(_Data);\r\n        const auto _Other_impl_move   = _Get_impl(_Other._Data)->_Move;\r\n        const auto _This_impl_destroy = _This_impl->_Destroy;\r\n\r\n        if (!_Other_impl_move) {\r\n            // Move is trivial, destroy first if needed\r\n            if (_This_impl_destroy) {\r\n                _This_impl_destroy(_Data);\r\n            }\r\n            _Function_move_large(_Data, _Other._Data);\r\n        } else if (!_This_impl_destroy) {\r\n            // Destroy is trivial, just move\r\n            _Other_impl_move(_Data, _Other._Data);\r\n        } else {\r\n            // General case involving a temporary\r\n            _Function_data _Tmp;\r\n\r\n            if (_This_impl->_Move) {\r\n                _This_impl->_Move(_Tmp, _Data);\r\n            } else {\r\n                _Function_move_large(_Tmp, _Data);\r\n            }\r\n\r\n            _Other_impl_move(_Data, _Other._Data);\r\n            _This_impl_destroy(_Tmp);\r\n        }\r\n        _Other._Reset_to_null();\r\n    }\r\n\r\n    void _Swap(_Function_base& _Other) noexcept {\r\n        _Function_data _Tmp;\r\n\r\n        _Checked_move(_Tmp, _Data);\r\n        _Checked_move(_Data, _Other._Data);\r\n        _Checked_move(_Other._Data, _Tmp);\r\n    }\r\n\r\n    _NODISCARD bool _Is_null() const noexcept {\r\n        return _Data._Impl == nullptr;\r\n    }\r\n\r\n    template <class _Vt>\r\n    static constexpr bool _Large_function_engaged = alignof(_Vt) > alignof(max_align_t)\r\n                                                 || sizeof(_Vt) > _Function_data::_Buf_size<_Vt>\r\n                                                 || !is_nothrow_move_constructible_v<_Vt>;\r\n\r\n    template <bool _Noexcept>\r\n    _NODISCARD auto _Get_invoke() const noexcept {\r\n        if constexpr (_Noexcept) {\r\n#ifdef __cpp_noexcept_function_type\r\n            return reinterpret_cast<_Rx(__stdcall*)(void*, _Types&&...) noexcept>(_Get_impl(_Data)->_Invoke);\r\n#else\r\n            static_assert(false); // when noexcept isn't in the type system, this should never be selected\r\n#endif\r\n        } else {\r\n            return _Get_impl(_Data)->_Invoke;\r\n        }\r\n    }\r\n\r\n    _NODISCARD static const _Impl_t* _Get_impl(const _Function_data& _Data) noexcept {\r\n        static constexpr _Impl_t _Null_move_only_function = {\r\n            _Function_not_callable<_Rx, _Types...>,\r\n            nullptr,\r\n            nullptr,\r\n        };\r\n\r\n        const auto _Ret = static_cast<const _Impl_t*>(_Data._Impl);\r\n        return _Ret ? _Ret : &_Null_move_only_function;\r\n    }\r\n\r\n    template <_Impl_kind _Kind, class _Vt, bool _Noexcept, class _VtInvQuals>\r\n    _NODISCARD static constexpr _Impl_t _Create_impl() noexcept {\r\n        _Impl_t _Impl{};\r\n        if constexpr (_Kind != _Impl_kind::_Usual) {\r\n            _STL_INTERNAL_STATIC_ASSERT(!_Noexcept);\r\n            _STL_INTERNAL_STATIC_ASSERT(is_void_v<_VtInvQuals>);\r\n            using _Fn = remove_pointer_t<decltype(_STD declval<_Vt>()._Getimpl())>;\r\n            if constexpr (_Kind == _Impl_kind::_Old_fn_null) {\r\n                _Impl._Invoke  = _Function_old_not_callable<_Rx, _Types...>;\r\n                _Impl._Move    = nullptr;\r\n                _Impl._Destroy = nullptr;\r\n            } else if constexpr (_Kind == _Impl_kind::_Old_fn_large) {\r\n                _Impl._Invoke  = _Function_inv_old<_Fn, _Function_storage_mode::_Large, _Rx, _Types...>;\r\n                _Impl._Move    = nullptr;\r\n                _Impl._Destroy = _Function_destroy_old_large<_Fn>;\r\n            } else {\r\n#ifdef _WIN64\r\n                static_assert(_Kind == _Impl_kind::_Old_fn_small);\r\n                _Impl._Invoke  = _Function_inv_old<_Fn, _Function_storage_mode::_Small, _Rx, _Types...>;\r\n                _Impl._Move    = _Function_move_old_small<_Fn>;\r\n                _Impl._Destroy = _Function_destroy_old_small<_Fn>;\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n                static_assert(_Kind == _Impl_kind::_Old_fn_small_as_large);\r\n                _Impl._Invoke  = _Function_inv_old<_Fn, _Function_storage_mode::_Large, _Rx, _Types...>;\r\n                _Impl._Move    = nullptr;\r\n                _Impl._Destroy = _Function_destroy_old_small_as_large<_Fn>;\r\n#endif // ^^^ 32-bit ^^^\r\n            }\r\n        } else if constexpr (_Large_function_engaged<_Vt>) {\r\n            _Impl._Invoke = _Function_inv<_Vt, _VtInvQuals, _Function_storage_mode::_Large, _Rx, _Noexcept, _Types...>;\r\n            _Impl._Move   = nullptr;\r\n\r\n            if constexpr (is_trivially_destructible_v<_Vt>) {\r\n                if constexpr (alignof(_Vt) <= __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n                    _Impl._Destroy = _Function_deallocate_large_default_aligned;\r\n                } else {\r\n                    _Impl._Destroy = _Function_deallocate_large_overaligned<alignof(_Vt)>;\r\n                }\r\n            } else {\r\n                _Impl._Destroy = _Function_destroy_large<_Vt>;\r\n            }\r\n        } else {\r\n            _Impl._Invoke = _Function_inv<_Vt, _VtInvQuals, _Function_storage_mode::_Small, _Rx, _Noexcept, _Types...>;\r\n\r\n            if constexpr (is_trivially_copyable_v<_Vt> && is_trivially_destructible_v<_Vt>) {\r\n                if constexpr ((_Function_small_copy_size<_Vt>) > _Minimum_function_size) {\r\n                    _Impl._Move = _Function_move_memcpy<_Function_small_copy_size<_Vt>>;\r\n                } else {\r\n                    _Impl._Move = nullptr;\r\n                }\r\n            } else {\r\n                _Impl._Move = _Function_move_small<_Vt>;\r\n            }\r\n\r\n            if constexpr (is_trivially_destructible_v<_Vt>) {\r\n                _Impl._Destroy = nullptr;\r\n            } else {\r\n                _Impl._Destroy = _Function_destroy_small<_Vt>;\r\n            }\r\n        }\r\n        return _Impl;\r\n    }\r\n\r\n    template <_Impl_kind _Kind, class _Vt, bool _Noexcept, class _VtInvQuals>\r\n    _NODISCARD static const _Impl_t* _Create_impl_ptr() noexcept {\r\n        static constexpr _Impl_t _Impl = _Create_impl<_Kind, _Vt, _Noexcept, _VtInvQuals>();\r\n        return &_Impl;\r\n    }\r\n};\r\n\r\ntemplate <class... _Signature>\r\nclass _Function_call {\r\n    static_assert(false, \"std::move_only_function only accepts function types as template arguments, \"\r\n                         \"with possibly const/ref/noexcept qualifiers. Also, unlike std::function, \"\r\n                         \"std::move_only_function does not define class template argument deduction guides.\");\r\n};\r\n\r\n// A script to generate the specializations is at\r\n// /tools/scripts/move_only_function_specializations.py\r\n// (Avoiding C++ preprocessor for better IDE navigation and debugging experience)\r\n\r\n// Beginning of generated code - DO NOT EDIT manually!\r\ntemplate <class _Rx, class... _Types>\r\nclass _Function_call<_Rx(_Types...)> // Generated code - DO NOT EDIT manually!\r\n    : public _Function_base<_Rx, _Types...> {\r\npublic:\r\n    template <class _Vt>\r\n    using _VtInvQuals = _Vt&;\r\n\r\n    template <class _Vt>\r\n    static constexpr bool _Is_callable_from =\r\n        is_invocable_r_v<_Rx, _Vt, _Types...> && is_invocable_r_v<_Rx, _Vt&, _Types...>;\r\n\r\n    static constexpr bool _Noexcept = false;\r\n\r\n    _Rx operator()(_Types... _Args) {\r\n        return this->template _Get_invoke<_Noexcept>()(&this->_Data, _STD forward<_Types>(_Args)...);\r\n    }\r\n};\r\n\r\ntemplate <class _Rx, class... _Types>\r\nclass _Function_call<_Rx(_Types...) &> // Generated code - DO NOT EDIT manually!\r\n    : public _Function_base<_Rx, _Types...> {\r\npublic:\r\n    template <class _Vt>\r\n    using _VtInvQuals = _Vt&;\r\n\r\n    template <class _Vt>\r\n    static constexpr bool _Is_callable_from = is_invocable_r_v<_Rx, _Vt&, _Types...>;\r\n\r\n    static constexpr bool _Noexcept = false;\r\n\r\n    _Rx operator()(_Types... _Args) & {\r\n        return this->template _Get_invoke<_Noexcept>()(&this->_Data, _STD forward<_Types>(_Args)...);\r\n    }\r\n};\r\n\r\ntemplate <class _Rx, class... _Types>\r\nclass _Function_call<_Rx(_Types...) &&> // Generated code - DO NOT EDIT manually!\r\n    : public _Function_base<_Rx, _Types...> {\r\npublic:\r\n    template <class _Vt>\r\n    using _VtInvQuals = _Vt&&;\r\n\r\n    template <class _Vt>\r\n    static constexpr bool _Is_callable_from = is_invocable_r_v<_Rx, _Vt, _Types...>;\r\n\r\n    static constexpr bool _Noexcept = false;\r\n\r\n    _Rx operator()(_Types... _Args) && {\r\n        return this->template _Get_invoke<_Noexcept>()(&this->_Data, _STD forward<_Types>(_Args)...);\r\n    }\r\n};\r\n\r\ntemplate <class _Rx, class... _Types>\r\nclass _Function_call<_Rx(_Types...) const> // Generated code - DO NOT EDIT manually!\r\n    : public _Function_base<_Rx, _Types...> {\r\npublic:\r\n    template <class _Vt>\r\n    using _VtInvQuals = const _Vt&;\r\n\r\n    template <class _Vt>\r\n    static constexpr bool _Is_callable_from =\r\n        is_invocable_r_v<_Rx, const _Vt, _Types...> && is_invocable_r_v<_Rx, const _Vt&, _Types...>;\r\n\r\n    static constexpr bool _Noexcept = false;\r\n\r\n    _Rx operator()(_Types... _Args) const {\r\n        return this->template _Get_invoke<_Noexcept>()(\r\n            const_cast<_Function_data*>(&this->_Data), _STD forward<_Types>(_Args)...);\r\n    }\r\n};\r\n\r\ntemplate <class _Rx, class... _Types>\r\nclass _Function_call<_Rx(_Types...) const&> // Generated code - DO NOT EDIT manually!\r\n    : public _Function_base<_Rx, _Types...> {\r\npublic:\r\n    template <class _Vt>\r\n    using _VtInvQuals = const _Vt&;\r\n\r\n    template <class _Vt>\r\n    static constexpr bool _Is_callable_from = is_invocable_r_v<_Rx, const _Vt&, _Types...>;\r\n\r\n    static constexpr bool _Noexcept = false;\r\n\r\n    _Rx operator()(_Types... _Args) const& {\r\n        return this->template _Get_invoke<_Noexcept>()(\r\n            const_cast<_Function_data*>(&this->_Data), _STD forward<_Types>(_Args)...);\r\n    }\r\n};\r\n\r\ntemplate <class _Rx, class... _Types>\r\nclass _Function_call<_Rx(_Types...) const&&> // Generated code - DO NOT EDIT manually!\r\n    : public _Function_base<_Rx, _Types...> {\r\npublic:\r\n    template <class _Vt>\r\n    using _VtInvQuals = const _Vt&&;\r\n\r\n    template <class _Vt>\r\n    static constexpr bool _Is_callable_from = is_invocable_r_v<_Rx, const _Vt, _Types...>;\r\n\r\n    static constexpr bool _Noexcept = false;\r\n\r\n    _Rx operator()(_Types... _Args) const&& {\r\n        return this->template _Get_invoke<_Noexcept>()(\r\n            const_cast<_Function_data*>(&this->_Data), _STD forward<_Types>(_Args)...);\r\n    }\r\n};\r\n\r\n#ifdef __cpp_noexcept_function_type\r\ntemplate <class _Rx, class... _Types>\r\nclass _Function_call<_Rx(_Types...) noexcept> // Generated code - DO NOT EDIT manually!\r\n    : public _Function_base<_Rx, _Types...> {\r\npublic:\r\n    template <class _Vt>\r\n    using _VtInvQuals = _Vt&;\r\n\r\n    template <class _Vt>\r\n    static constexpr bool _Is_callable_from =\r\n        is_nothrow_invocable_r_v<_Rx, _Vt, _Types...> && is_nothrow_invocable_r_v<_Rx, _Vt&, _Types...>;\r\n\r\n    static constexpr bool _Noexcept = true;\r\n\r\n    _Rx operator()(_Types... _Args) noexcept {\r\n        return this->template _Get_invoke<_Noexcept>()(&this->_Data, _STD forward<_Types>(_Args)...);\r\n    }\r\n};\r\n\r\ntemplate <class _Rx, class... _Types>\r\nclass _Function_call<_Rx(_Types...) & noexcept> // Generated code - DO NOT EDIT manually!\r\n    : public _Function_base<_Rx, _Types...> {\r\npublic:\r\n    template <class _Vt>\r\n    using _VtInvQuals = _Vt&;\r\n\r\n    template <class _Vt>\r\n    static constexpr bool _Is_callable_from = is_nothrow_invocable_r_v<_Rx, _Vt&, _Types...>;\r\n\r\n    static constexpr bool _Noexcept = true;\r\n\r\n    _Rx operator()(_Types... _Args) & noexcept {\r\n        return this->template _Get_invoke<_Noexcept>()(&this->_Data, _STD forward<_Types>(_Args)...);\r\n    }\r\n};\r\n\r\ntemplate <class _Rx, class... _Types>\r\nclass _Function_call<_Rx(_Types...) && noexcept> // Generated code - DO NOT EDIT manually!\r\n    : public _Function_base<_Rx, _Types...> {\r\npublic:\r\n    template <class _Vt>\r\n    using _VtInvQuals = _Vt&&;\r\n\r\n    template <class _Vt>\r\n    static constexpr bool _Is_callable_from = is_nothrow_invocable_r_v<_Rx, _Vt, _Types...>;\r\n\r\n    static constexpr bool _Noexcept = true;\r\n\r\n    _Rx operator()(_Types... _Args) && noexcept {\r\n        return this->template _Get_invoke<_Noexcept>()(&this->_Data, _STD forward<_Types>(_Args)...);\r\n    }\r\n};\r\n\r\ntemplate <class _Rx, class... _Types>\r\nclass _Function_call<_Rx(_Types...) const noexcept> // Generated code - DO NOT EDIT manually!\r\n    : public _Function_base<_Rx, _Types...> {\r\npublic:\r\n    template <class _Vt>\r\n    using _VtInvQuals = const _Vt&;\r\n\r\n    template <class _Vt>\r\n    static constexpr bool _Is_callable_from =\r\n        is_nothrow_invocable_r_v<_Rx, const _Vt, _Types...> && is_nothrow_invocable_r_v<_Rx, const _Vt&, _Types...>;\r\n\r\n    static constexpr bool _Noexcept = true;\r\n\r\n    _Rx operator()(_Types... _Args) const noexcept {\r\n        return this->template _Get_invoke<_Noexcept>()(\r\n            const_cast<_Function_data*>(&this->_Data), _STD forward<_Types>(_Args)...);\r\n    }\r\n};\r\n\r\ntemplate <class _Rx, class... _Types>\r\nclass _Function_call<_Rx(_Types...) const & noexcept> // Generated code - DO NOT EDIT manually!\r\n    : public _Function_base<_Rx, _Types...> {\r\npublic:\r\n    template <class _Vt>\r\n    using _VtInvQuals = const _Vt&;\r\n\r\n    template <class _Vt>\r\n    static constexpr bool _Is_callable_from = is_nothrow_invocable_r_v<_Rx, const _Vt&, _Types...>;\r\n\r\n    static constexpr bool _Noexcept = true;\r\n\r\n    _Rx operator()(_Types... _Args) const& noexcept {\r\n        return this->template _Get_invoke<_Noexcept>()(\r\n            const_cast<_Function_data*>(&this->_Data), _STD forward<_Types>(_Args)...);\r\n    }\r\n};\r\n\r\ntemplate <class _Rx, class... _Types>\r\nclass _Function_call<_Rx(_Types...) const && noexcept> // Generated code - DO NOT EDIT manually!\r\n    : public _Function_base<_Rx, _Types...> {\r\npublic:\r\n    template <class _Vt>\r\n    using _VtInvQuals = const _Vt&&;\r\n\r\n    template <class _Vt>\r\n    static constexpr bool _Is_callable_from = is_nothrow_invocable_r_v<_Rx, const _Vt, _Types...>;\r\n\r\n    static constexpr bool _Noexcept = true;\r\n\r\n    _Rx operator()(_Types... _Args) const&& noexcept {\r\n        return this->template _Get_invoke<_Noexcept>()(\r\n            const_cast<_Function_data*>(&this->_Data), _STD forward<_Types>(_Args)...);\r\n    }\r\n};\r\n#endif // defined(__cpp_noexcept_function_type)\r\n// End of generated code - DO NOT EDIT manually!\r\n\r\n_EXPORT_STD template <class... _Signature>\r\nclass move_only_function : private _Function_call<_Signature...> {\r\nprivate:\r\n    using _Call = _Function_call<_Signature...>;\r\n\r\n    template <class _Fn>\r\n    static constexpr bool _Enable_one_arg_constructor = !is_same_v<remove_cvref_t<_Fn>, move_only_function>\r\n                                                     && !_Is_specialization_v<remove_cvref_t<_Fn>, in_place_type_t>\r\n                                                     && _Call::template _Is_callable_from<decay_t<_Fn>>;\r\n\r\n    template <class _Fn, class... _CTypes>\r\n    static constexpr bool _Enable_in_place_constructor =\r\n        is_constructible_v<decay_t<_Fn>, _CTypes...> && _Call::template _Is_callable_from<decay_t<_Fn>>;\r\n\r\n    template <class _Fn, class _Ux, class... _CTypes>\r\n    static constexpr bool _Enable_in_place_list_constructor =\r\n        is_constructible_v<decay_t<_Fn>, initializer_list<_Ux>&, _CTypes...>\r\n        && _Call::template _Is_callable_from<decay_t<_Fn>>;\r\n\r\n    template <class...>\r\n    friend class move_only_function;\r\n\r\n    template <class _Vt>\r\n    static constexpr bool _Is_move_only_function_varying_cv_ref_noex() {\r\n        if constexpr (_Is_specialization_v<_Vt, move_only_function>) {\r\n            return is_same_v<typename _Call::_Signature_without_cv_ref_noex,\r\n                typename _Vt::_Signature_without_cv_ref_noex>;\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\npublic:\r\n    using typename _Call::result_type;\r\n\r\n    move_only_function() noexcept {\r\n        this->_Reset_to_null();\r\n    }\r\n\r\n    move_only_function(nullptr_t) noexcept {\r\n        this->_Reset_to_null();\r\n    }\r\n\r\n    move_only_function(move_only_function&&) noexcept = default;\r\n\r\n    template <class _Fn>\r\n        requires _Enable_one_arg_constructor<_Fn>\r\n    move_only_function(_Fn&& _Callable) {\r\n        using _Vt = decay_t<_Fn>;\r\n        static_assert(is_constructible_v<_Vt, _Fn>, \"_Vt should be constructible from _Fn. \"\r\n                                                    \"(N4950 [func.wrap.move.ctor]/6)\");\r\n        if constexpr (is_same_v<_Vt, function<typename _Call::_Signature_without_cv_ref_noex>>) {\r\n            this->template _Construct_with_old_fn<_Vt>(_STD forward<_Fn>(_Callable));\r\n        } else {\r\n            if constexpr (is_member_pointer_v<_Vt> || is_pointer_v<_Vt>\r\n                          || _Is_specialization_v<_Vt, move_only_function>) {\r\n                if (_Callable == nullptr) {\r\n                    this->_Reset_to_null();\r\n                    return;\r\n                }\r\n            }\r\n\r\n            if constexpr (_Is_move_only_function_varying_cv_ref_noex<_Vt>()) {\r\n                _Call::_Checked_move(this->_Data, _Callable._Data);\r\n                _Callable._Reset_to_null();\r\n            } else {\r\n                using _VtInvQuals = _Call::template _VtInvQuals<_Vt>;\r\n                this->template _Construct_with_fn<_Vt, _Call::_Noexcept, _VtInvQuals>(_STD forward<_Fn>(_Callable));\r\n            }\r\n        }\r\n    }\r\n\r\n    template <class _Fn, class... _CTypes>\r\n        requires _Enable_in_place_constructor<_Fn, _CTypes...>\r\n    explicit move_only_function(in_place_type_t<_Fn>, _CTypes&&... _Args) {\r\n        using _Vt = decay_t<_Fn>;\r\n        static_assert(is_same_v<_Vt, _Fn>, \"_Vt should be the same type as _Fn. (N4950 [func.wrap.move.ctor]/12)\");\r\n\r\n        using _VtInvQuals = _Call::template _VtInvQuals<_Vt>;\r\n        this->template _Construct_with_fn<_Vt, _Call::_Noexcept, _VtInvQuals>(_STD forward<_CTypes>(_Args)...);\r\n    }\r\n\r\n    template <class _Fn, class _Ux, class... _CTypes>\r\n        requires _Enable_in_place_list_constructor<_Fn, _Ux, _CTypes...>\r\n    explicit move_only_function(in_place_type_t<_Fn>, initializer_list<_Ux> _Li, _CTypes&&... _Args) {\r\n        using _Vt = decay_t<_Fn>;\r\n        static_assert(is_same_v<_Vt, _Fn>, \"_Vt should be the same type as _Fn. (N4950 [func.wrap.move.ctor]/18)\");\r\n\r\n        using _VtInvQuals = _Call::template _VtInvQuals<_Vt>;\r\n        this->template _Construct_with_fn<_Vt, _Call::_Noexcept, _VtInvQuals>(_Li, _STD forward<_CTypes>(_Args)...);\r\n    }\r\n\r\n    ~move_only_function() {\r\n        // Do cleanup in this class destructor rather than base,\r\n        // so that if object construction throws, the unnecessary cleanup isn't called.\r\n        this->_Checked_destroy(this->_Data);\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n        const auto _Tombstone{reinterpret_cast<const void*>(_MSVC_STL_UINTPTR_TOMBSTONE_VALUE)};\r\n        this->_Data._Impl = _Tombstone;\r\n#endif // _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n    }\r\n\r\n    move_only_function& operator=(nullptr_t) noexcept {\r\n        this->_Checked_destroy(this->_Data);\r\n        this->_Reset_to_null();\r\n        return *this;\r\n    }\r\n\r\n    move_only_function& operator=(move_only_function&& _Other)\r\n    // intentionally noexcept(false), leaving the door open to adding allocator support in the future; see GH-2278\r\n    {\r\n        if (this != _STD addressof(_Other)) {\r\n            this->_Move_assign(_STD move(_Other));\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    template <class _Fn>\r\n        requires is_constructible_v<move_only_function, _Fn>\r\n    move_only_function& operator=(_Fn&& _Callable) {\r\n        this->_Move_assign(move_only_function{_STD forward<_Fn>(_Callable)});\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD explicit operator bool() const noexcept {\r\n        return !this->_Is_null();\r\n    }\r\n\r\n    using _Call::operator();\r\n\r\n    void swap(move_only_function& _Other) noexcept {\r\n        this->_Swap(_Other);\r\n    }\r\n\r\n    friend void swap(move_only_function& _Fn1, move_only_function& _Fn2) noexcept {\r\n        _Fn1._Swap(_Fn2);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const move_only_function& _This, nullptr_t) noexcept {\r\n        return _This._Is_null();\r\n    }\r\n};\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <int _Nx>\r\nstruct _Ph { // placeholder\r\n    static_assert(_Nx > 0, \"invalid placeholder index\");\r\n};\r\n\r\n_EXPORT_STD template <class _Tx>\r\nstruct is_placeholder : integral_constant<int, 0> {}; // _Tx is not a placeholder\r\n\r\ntemplate <int _Nx>\r\nstruct is_placeholder<_Ph<_Nx>> : integral_constant<int, _Nx> {}; // _Ph is a placeholder\r\n\r\ntemplate <class _Tx>\r\nstruct is_placeholder<const _Tx> : is_placeholder<_Tx>::type {}; // ignore cv-qualifiers\r\n\r\ntemplate <class _Tx>\r\nstruct is_placeholder<volatile _Tx> : is_placeholder<_Tx>::type {}; // ignore cv-qualifiers\r\n\r\ntemplate <class _Tx>\r\nstruct is_placeholder<const volatile _Tx> : is_placeholder<_Tx>::type {}; // ignore cv-qualifiers\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES constexpr int is_placeholder_v = is_placeholder<_Ty>::value;\r\n\r\ntemplate <class _Ret, class _Fx, class... _Types>\r\nclass _Binder;\r\n\r\n_EXPORT_STD template <class _Tx>\r\nstruct is_bind_expression : false_type {}; // _Tx is not a bind expression\r\n\r\ntemplate <class _Ret, class _Fx, class... _Types>\r\nstruct is_bind_expression<_Binder<_Ret, _Fx, _Types...>> : true_type {}; // _Binder is a bind expression\r\n\r\ntemplate <class _Tx>\r\nstruct is_bind_expression<const _Tx> : is_bind_expression<_Tx>::type {}; // ignore cv-qualifiers\r\n\r\ntemplate <class _Tx>\r\nstruct is_bind_expression<volatile _Tx> : is_bind_expression<_Tx>::type {}; // ignore cv-qualifiers\r\n\r\ntemplate <class _Tx>\r\nstruct is_bind_expression<const volatile _Tx> : is_bind_expression<_Tx>::type {}; // ignore cv-qualifiers\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES constexpr bool is_bind_expression_v = is_bind_expression<_Ty>::value;\r\n\r\ntemplate <class _Cv_TiD, bool = _Is_specialization_v<remove_cv_t<_Cv_TiD>, reference_wrapper>,\r\n    bool = is_bind_expression_v<_Cv_TiD>, int = is_placeholder_v<_Cv_TiD>>\r\nstruct _Select_fixer;\r\n\r\ntemplate <class _Cv_TiD>\r\nstruct _Select_fixer<_Cv_TiD, true, false, 0> { // reference_wrapper fixer\r\n    template <class _Untuple>\r\n    static constexpr auto _Fix(_Cv_TiD& _Tid, _Untuple&&) noexcept -> typename _Cv_TiD::type& {\r\n        // unwrap a reference_wrapper\r\n        return _Tid.get();\r\n    }\r\n};\r\n\r\ntemplate <class _Cv_TiD>\r\nstruct _Select_fixer<_Cv_TiD, false, true, 0> { // nested bind fixer\r\n    template <class _Untuple, size_t... _Jx,\r\n        enable_if_t<conjunction_v<bool_constant<(_Jx < tuple_size_v<_Untuple>)>...>, int> = 0>\r\n    static constexpr auto _Apply(_Cv_TiD& _Tid, _Untuple&& _Ut, index_sequence<_Jx...>)\r\n        noexcept(noexcept(_Tid(_STD get<_Jx>(_STD move(_Ut))...))) -> decltype(_Tid(_STD get<_Jx>(_STD move(_Ut))...)) {\r\n        // call a nested bind expression\r\n        return _Tid(_STD get<_Jx>(_STD move(_Ut))...);\r\n    }\r\n\r\n    template <class _Untuple>\r\n    static constexpr auto _Fix(_Cv_TiD& _Tid, _Untuple&& _Ut)\r\n        noexcept(noexcept(_Apply(_Tid, _STD move(_Ut), make_index_sequence<tuple_size_v<_Untuple>>{})))\r\n            -> decltype(_Apply(_Tid, _STD move(_Ut), make_index_sequence<tuple_size_v<_Untuple>>{})) {\r\n        // call a nested bind expression\r\n        return _Apply(_Tid, _STD move(_Ut), make_index_sequence<tuple_size_v<_Untuple>>{});\r\n    }\r\n};\r\n\r\ntemplate <class _Cv_TiD>\r\nstruct _Select_fixer<_Cv_TiD, false, false, 0> { // identity fixer\r\n    template <class _Untuple>\r\n    static constexpr _Cv_TiD& _Fix(_Cv_TiD& _Tid, _Untuple&&) noexcept {\r\n        // pass a bound argument as an lvalue (important!)\r\n        return _Tid;\r\n    }\r\n};\r\n\r\ntemplate <class _Cv_TiD, int _Jx>\r\nstruct _Select_fixer<_Cv_TiD, false, false, _Jx> { // placeholder fixer\r\n    static_assert(_Jx > 0, \"invalid is_placeholder value\");\r\n\r\n    template <class _Untuple, enable_if_t<(_Jx <= tuple_size_v<_Untuple>), int> = 0>\r\n    static constexpr auto _Fix(_Cv_TiD&, _Untuple&& _Ut) noexcept\r\n        -> decltype(_STD get<_Jx - 1>(_STD move(_Ut))) { // choose the Jth unbound argument (1-based indexing)\r\n        return _STD get<_Jx - 1>(_STD move(_Ut));\r\n    }\r\n};\r\n\r\ntemplate <class _Cv_TiD, class _Untuple>\r\nconstexpr auto _Fix_arg(_Cv_TiD& _Tid, _Untuple&& _Ut)\r\n    noexcept(noexcept(_Select_fixer<_Cv_TiD>::_Fix(_Tid, _STD move(_Ut)))) //\r\n    -> decltype(_Select_fixer<_Cv_TiD>::_Fix(_Tid, _STD move(_Ut))) { // translate an argument for bind\r\n    return _Select_fixer<_Cv_TiD>::_Fix(_Tid, _STD move(_Ut));\r\n}\r\n\r\nstruct _Unforced { // tag to distinguish bind() from bind<R>()\r\n    explicit _Unforced() = default;\r\n};\r\n\r\n// helper to give INVOKE an explicit return type; avoids undesirable Expression SFINAE\r\ntemplate <class _Rx>\r\nstruct _Invoker_ret { // selected for all _Rx other than _Unforced\r\n    template <class _Fx, class... _Valtys,\r\n        enable_if_t<_Select_invoke_traits<_Fx, _Valtys...>::template _Is_invocable_r<_Rx>::value, int> = 0>\r\n    static _CONSTEXPR20 _Rx _Call(_Fx&& _Func, _Valtys&&... _Vals) noexcept(_Select_invoke_traits<_Fx,\r\n        _Valtys...>::template _Is_nothrow_invocable_r<_Rx>::value) { // INVOKE, implicitly converted\r\n        if constexpr (is_void_v<_Rx>) {\r\n            _STL_INTERNAL_STATIC_ASSERT(\r\n                _Select_invoke_traits<_Fx, _Valtys...>::_Is_nothrow_invocable::value\r\n                == _Select_invoke_traits<_Fx, _Valtys...>::template _Is_nothrow_invocable_r<_Rx>::value);\r\n            _STD invoke(static_cast<_Fx&&>(_Func), static_cast<_Valtys&&>(_Vals)...);\r\n        } else {\r\n            return _STD invoke(static_cast<_Fx&&>(_Func), static_cast<_Valtys&&>(_Vals)...);\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct _Invoker_ret<_Unforced> { // selected for _Rx being _Unforced\r\n    template <class _Fx, class... _Valtys>\r\n    static _CONSTEXPR20 auto _Call(_Fx&& _Func, _Valtys&&... _Vals)\r\n        noexcept(_Select_invoke_traits<_Fx, _Valtys...>::_Is_nothrow_invocable::value)\r\n            -> decltype(_STD invoke(static_cast<_Fx&&>(_Func), static_cast<_Valtys&&>(_Vals)...)) { // INVOKE, unchanged\r\n        return _STD invoke(static_cast<_Fx&&>(_Func), static_cast<_Valtys&&>(_Vals)...);\r\n    }\r\n};\r\n\r\ntemplate <class _Ret, size_t... _Ix, class _Cv_FD, class _Cv_tuple_TiD, class _Untuple>\r\n_CONSTEXPR20 auto _Call_binder(\r\n    _Invoker_ret<_Ret>, index_sequence<_Ix...>, _Cv_FD& _Obj, _Cv_tuple_TiD& _Tpl, _Untuple&& _Ut)\r\n    noexcept(noexcept(_Invoker_ret<_Ret>::_Call(_Obj, _STD _Fix_arg(_STD get<_Ix>(_Tpl), _STD move(_Ut))...)))\r\n        -> decltype(_Invoker_ret<_Ret>::_Call(_Obj, _STD _Fix_arg(_STD get<_Ix>(_Tpl), _STD move(_Ut))...)) {\r\n    // bind() and bind<R>() invocation\r\n    return _Invoker_ret<_Ret>::_Call(_Obj, _STD _Fix_arg(_STD get<_Ix>(_Tpl), _STD move(_Ut))...);\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ret, class _CvFD, class _IntSeq, class _CvBoundTuple, class _UnboundTuple>\r\nconcept _Can_call_binder = requires(_CvFD& _Fx, _CvBoundTuple& _Bound_tuple, _UnboundTuple&& _Unbound_tuple) {\r\n    _STD _Call_binder(_Invoker_ret<_Ret>{}, _IntSeq{}, _Fx, _Bound_tuple, _STD move(_Unbound_tuple));\r\n};\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ret, class _CvFD, class _IntSeq, class _CvBoundTuple, class _UnboundTuple, class = void>\r\nconstexpr bool _Can_call_binder = false;\r\n\r\ntemplate <class _Ret, class _CvFD, class _IntSeq, class _CvBoundTuple, class _UnboundTuple>\r\nconstexpr bool _Can_call_binder<_Ret, _CvFD, _IntSeq, _CvBoundTuple, _UnboundTuple,\r\n    void_t<decltype(_STD _Call_binder(_Invoker_ret<_Ret>{}, _IntSeq{}, _STD declval<_CvFD&>(),\r\n        _STD declval<_CvBoundTuple&>(), _STD declval<_UnboundTuple>()))>> = true;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\ntemplate <class _Ret>\r\nstruct _Forced_result_type { // used by bind<R>()\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ret;\r\n};\r\n\r\ntemplate <class _Ret, class _Fx>\r\nstruct _Binder_result_type { // provide result_type (sometimes)\r\n    using _Decayed = decay_t<_Fx>;\r\n\r\n    using _All_weak_types = _Weak_types<_Decayed>;\r\n\r\n    using type =\r\n        conditional_t<is_same_v<_Ret, _Unforced>, _Weak_result_type<_All_weak_types>, _Forced_result_type<_Ret>>;\r\n};\r\n\r\ntemplate <class _Ret, class _Fx, class... _Types>\r\nclass _Binder : public _Binder_result_type<_Ret, _Fx>::type { // wrap bound callable object and arguments\r\nprivate:\r\n    using _Seq         = index_sequence_for<_Types...>;\r\n    using _Fd          = decay_t<_Fx>;\r\n    using _Bound_tuple = tuple<decay_t<_Types>...>;\r\n\r\n    _Compressed_pair<_Fd, _Bound_tuple> _Mypair;\r\n\r\npublic:\r\n    constexpr explicit _Binder(_Fx&& _Func, _Types&&... _Args)\r\n        : _Mypair(_One_then_variadic_args_t{}, _STD forward<_Fx>(_Func), _STD forward<_Types>(_Args)...) {}\r\n\r\n#define _CALL_BINDER                                                                       \\\r\n    _STD _Call_binder(_Invoker_ret<_Ret>{}, _Seq{}, _Mypair._Get_first(), _Mypair._Myval2, \\\r\n        _STD forward_as_tuple(_STD forward<_Unbound>(_Unbargs)...))\r\n\r\n#if _HAS_CXX20\r\n    template <class... _Unbound>\r\n        requires _Can_call_binder<_Ret, _Fd, _Seq, _Bound_tuple, tuple<_Unbound&&...>>\r\n    constexpr decltype(auto) operator()(_Unbound&&... _Unbargs) noexcept(noexcept(_CALL_BINDER)) {\r\n        return _CALL_BINDER;\r\n    }\r\n\r\n    template <class... _Unbound>\r\n    void operator()(_Unbound&&...) = delete;\r\n\r\n    template <class... _Unbound>\r\n        requires _Can_call_binder<_Ret, const _Fd, _Seq, const _Bound_tuple, tuple<_Unbound&&...>>\r\n    constexpr decltype(auto) operator()(_Unbound&&... _Unbargs) const noexcept(noexcept(_CALL_BINDER)) {\r\n        return _CALL_BINDER;\r\n    }\r\n\r\n    template <class... _Unbound>\r\n    void operator()(_Unbound&&...) const = delete;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    template <class... _Unbound,\r\n        enable_if_t<_Can_call_binder<_Ret, _Fd, _Seq, _Bound_tuple, tuple<_Unbound&&...>>, int> = 0>\r\n    _CONSTEXPR20 decltype(auto) operator()(_Unbound&&... _Unbargs) noexcept(noexcept(_CALL_BINDER)) {\r\n        return _CALL_BINDER;\r\n    }\r\n\r\n    template <class... _Unbound,\r\n        enable_if_t<!_Can_call_binder<_Ret, _Fd, _Seq, _Bound_tuple, tuple<_Unbound&&...>>, int> = 0>\r\n    void operator()(_Unbound&&...) = delete;\r\n\r\n    template <class... _Unbound,\r\n        enable_if_t<_Can_call_binder<_Ret, const _Fd, _Seq, const _Bound_tuple, tuple<_Unbound&&...>>, int> = 0>\r\n    _CONSTEXPR20 decltype(auto) operator()(_Unbound&&... _Unbargs) const noexcept(noexcept(_CALL_BINDER)) {\r\n        return _CALL_BINDER;\r\n    }\r\n\r\n    template <class... _Unbound,\r\n        enable_if_t<!_Can_call_binder<_Ret, const _Fd, _Seq, const _Bound_tuple, tuple<_Unbound&&...>>, int> = 0>\r\n    void operator()(_Unbound&&...) const = delete;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n#undef _CALL_BINDER\r\n};\r\n\r\n_EXPORT_STD template <class _Fx, class... _Types>\r\n_NODISCARD _CONSTEXPR20 _Binder<_Unforced, _Fx, _Types...> bind(_Fx&& _Func, _Types&&... _Args) {\r\n    return _Binder<_Unforced, _Fx, _Types...>(_STD forward<_Fx>(_Func), _STD forward<_Types>(_Args)...);\r\n}\r\n\r\n_EXPORT_STD template <class _Ret, class _Fx, class... _Types>\r\n_NODISCARD _CONSTEXPR20 _Binder<_Ret, _Fx, _Types...> bind(_Fx&& _Func, _Types&&... _Args) {\r\n    return _Binder<_Ret, _Fx, _Types...>(_STD forward<_Fx>(_Func), _STD forward<_Types>(_Args)...);\r\n}\r\n\r\nnamespace placeholders {\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<1> _1{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<2> _2{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<3> _3{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<4> _4{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<5> _5{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<6> _6{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<7> _7{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<8> _8{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<9> _9{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<10> _10{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<11> _11{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<12> _12{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<13> _13{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<14> _14{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<15> _15{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<16> _16{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<17> _17{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<18> _18{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<19> _19{};\r\n    _EXPORT_STD _INLINE_VAR constexpr _Ph<20> _20{};\r\n} // namespace placeholders\r\n\r\n#if _HAS_CXX20\r\ntemplate <size_t... _Ix, class _Cv_FD, class _Cv_tuple_TiD, class... _Unbound>\r\nconstexpr auto _Call_front_binder(index_sequence<_Ix...>, _Cv_FD&& _Obj, _Cv_tuple_TiD&& _Tpl, _Unbound&&... _Unbargs)\r\n    noexcept(noexcept(_STD invoke(_STD forward<_Cv_FD>(_Obj), _STD get<_Ix>(_STD forward<_Cv_tuple_TiD>(_Tpl))...,\r\n        _STD forward<_Unbound>(_Unbargs)...))) //\r\n    -> decltype(_STD invoke(_STD forward<_Cv_FD>(_Obj), _STD get<_Ix>(_STD forward<_Cv_tuple_TiD>(_Tpl))...,\r\n        _STD forward<_Unbound>(_Unbargs)...)) {\r\n    return _STD invoke(_STD forward<_Cv_FD>(_Obj), _STD get<_Ix>(_STD forward<_Cv_tuple_TiD>(_Tpl))...,\r\n        _STD forward<_Unbound>(_Unbargs)...);\r\n}\r\n\r\ntemplate <class _IntSeq, class _CvFD, class _CvBoundTuple, class... _Unbound>\r\nconcept _Can_call_front_binder = requires(_CvFD&& _Fx, _CvBoundTuple&& _Bound_tuple, _Unbound&&... _Unbound_args) {\r\n    _STD _Call_front_binder(_IntSeq{}, _STD forward<_CvFD>(_Fx), _STD forward<_CvBoundTuple>(_Bound_tuple),\r\n        _STD forward<_Unbound>(_Unbound_args)...);\r\n};\r\n\r\ntemplate <class _Fx, class... _Types>\r\nclass _Front_binder { // wrap bound callable object and arguments\r\nprivate:\r\n    using _Seq = index_sequence_for<_Types...>;\r\n\r\n    _Compressed_pair<_Fx, tuple<_Types...>> _Mypair;\r\n\r\n    _STL_INTERNAL_STATIC_ASSERT(is_same_v<_Fx, decay_t<_Fx>>);\r\n    _STL_INTERNAL_STATIC_ASSERT((is_same_v<_Types, decay_t<_Types>> && ...));\r\n\r\npublic:\r\n    template <class _FxInit, class... _TypesInit>\r\n        requires (sizeof...(_TypesInit) != 0 || !is_same_v<remove_cvref_t<_FxInit>, _Front_binder>)\r\n    constexpr explicit _Front_binder(_FxInit&& _Func, _TypesInit&&... _Args)\r\n        : _Mypair(_One_then_variadic_args_t{}, _STD forward<_FxInit>(_Func), _STD forward<_TypesInit>(_Args)...) {}\r\n\r\n    template <class... _Unbound>\r\n        requires _Can_call_front_binder<_Seq, _Fx&, tuple<_Types...>&, _Unbound...>\r\n    constexpr decltype(auto) operator()(_Unbound&&... _Unbargs) & noexcept(noexcept(\r\n        _STD _Call_front_binder(_Seq{}, _Mypair._Get_first(), _Mypair._Myval2, _STD forward<_Unbound>(_Unbargs)...))) {\r\n        return _STD _Call_front_binder(\r\n            _Seq{}, _Mypair._Get_first(), _Mypair._Myval2, _STD forward<_Unbound>(_Unbargs)...);\r\n    }\r\n\r\n    template <class... _Unbound>\r\n    void operator()(_Unbound&&...) & = delete;\r\n\r\n    template <class... _Unbound>\r\n        requires _Can_call_front_binder<_Seq, const _Fx&, const tuple<_Types...>&, _Unbound...>\r\n    constexpr decltype(auto) operator()(_Unbound&&... _Unbargs) const& noexcept(noexcept(\r\n        _STD _Call_front_binder(_Seq{}, _Mypair._Get_first(), _Mypair._Myval2, _STD forward<_Unbound>(_Unbargs)...))) {\r\n        return _STD _Call_front_binder(\r\n            _Seq{}, _Mypair._Get_first(), _Mypair._Myval2, _STD forward<_Unbound>(_Unbargs)...);\r\n    }\r\n\r\n    template <class... _Unbound>\r\n    void operator()(_Unbound&&...) const& = delete;\r\n\r\n    template <class... _Unbound>\r\n        requires _Can_call_front_binder<_Seq, _Fx, tuple<_Types...>, _Unbound...>\r\n    constexpr decltype(auto) operator()(_Unbound&&... _Unbargs) && noexcept(noexcept(_STD _Call_front_binder(\r\n        _Seq{}, _STD move(_Mypair._Get_first()), _STD move(_Mypair._Myval2), _STD forward<_Unbound>(_Unbargs)...))) {\r\n        return _STD _Call_front_binder(\r\n            _Seq{}, _STD move(_Mypair._Get_first()), _STD move(_Mypair._Myval2), _STD forward<_Unbound>(_Unbargs)...);\r\n    }\r\n\r\n    template <class... _Unbound>\r\n    void operator()(_Unbound&&...) && = delete;\r\n\r\n    template <class... _Unbound>\r\n        requires _Can_call_front_binder<_Seq, const _Fx, const tuple<_Types...>, _Unbound...>\r\n    constexpr decltype(auto) operator()(_Unbound&&... _Unbargs) const&& noexcept(noexcept(_STD _Call_front_binder(\r\n        _Seq{}, _STD move(_Mypair._Get_first()), _STD move(_Mypair._Myval2), _STD forward<_Unbound>(_Unbargs)...))) {\r\n        return _STD _Call_front_binder(\r\n            _Seq{}, _STD move(_Mypair._Get_first()), _STD move(_Mypair._Myval2), _STD forward<_Unbound>(_Unbargs)...);\r\n    }\r\n\r\n    template <class... _Unbound>\r\n    void operator()(_Unbound&&...) const&& = delete;\r\n};\r\n\r\n_EXPORT_STD template <class _Fx, class... _Types>\r\n_NODISCARD constexpr auto bind_front(_Fx&& _Func, _Types&&... _Args) {\r\n    static_assert(is_constructible_v<decay_t<_Fx>, _Fx>,\r\n        \"std::bind_front requires the decayed callable to be constructible from an undecayed callable\");\r\n    static_assert(is_move_constructible_v<decay_t<_Fx>>,\r\n        \"std::bind_front requires the decayed callable to be move constructible\");\r\n    static_assert(conjunction_v<is_constructible<decay_t<_Types>, _Types>...>,\r\n        \"std::bind_front requires the decayed bound arguments to be constructible from undecayed bound arguments\");\r\n    static_assert(conjunction_v<is_move_constructible<decay_t<_Types>>...>,\r\n        \"std::bind_front requires the decayed bound arguments to be move constructible\");\r\n\r\n    return _Front_binder<decay_t<_Fx>, decay_t<_Types>...>(_STD forward<_Fx>(_Func), _STD forward<_Types>(_Args)...);\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\ntemplate <size_t... _Ix, class _Cv_FD, class _Cv_tuple_TiD, class... _Unbound>\r\nconstexpr auto _Call_back_binder(index_sequence<_Ix...>, _Cv_FD&& _Obj, _Cv_tuple_TiD&& _Tpl, _Unbound&&... _Unbargs)\r\n    noexcept(noexcept(_STD invoke(_STD forward<_Cv_FD>(_Obj), _STD forward<_Unbound>(_Unbargs)...,\r\n        _STD get<_Ix>(_STD forward<_Cv_tuple_TiD>(_Tpl))...))) -> decltype(_STD invoke(_STD forward<_Cv_FD>(_Obj),\r\n        _STD forward<_Unbound>(_Unbargs)..., _STD get<_Ix>(_STD forward<_Cv_tuple_TiD>(_Tpl))...)) {\r\n    return _STD invoke(_STD forward<_Cv_FD>(_Obj), _STD forward<_Unbound>(_Unbargs)...,\r\n        _STD get<_Ix>(_STD forward<_Cv_tuple_TiD>(_Tpl))...);\r\n}\r\n\r\ntemplate <class _IntSeq, class _CvFD, class _CvBoundTuple, class... _Unbound>\r\nconcept _Can_call_back_binder = requires(_CvFD&& _Fx, _CvBoundTuple&& _Bound_tuple, _Unbound&&... _Unbound_args) {\r\n    _STD _Call_back_binder(_IntSeq{}, _STD forward<_CvFD>(_Fx), _STD forward<_CvBoundTuple>(_Bound_tuple),\r\n        _STD forward<_Unbound>(_Unbound_args)...);\r\n};\r\n\r\ntemplate <class _Fx, class... _Types>\r\nclass _Back_binder { // wrap bound callable object and arguments\r\nprivate:\r\n    using _Seq = index_sequence_for<_Types...>;\r\n\r\n    _Compressed_pair<_Fx, tuple<_Types...>> _Mypair;\r\n\r\n    _STL_INTERNAL_STATIC_ASSERT(is_same_v<_Fx, decay_t<_Fx>>);\r\n    _STL_INTERNAL_STATIC_ASSERT((is_same_v<_Types, decay_t<_Types>> && ...));\r\n\r\npublic:\r\n    template <class _FxInit, class... _TypesInit>\r\n        requires (sizeof...(_TypesInit) != 0 || !is_same_v<remove_cvref_t<_FxInit>, _Back_binder>)\r\n    constexpr explicit _Back_binder(_FxInit&& _Func, _TypesInit&&... _Args)\r\n        : _Mypair(_One_then_variadic_args_t{}, _STD forward<_FxInit>(_Func), _STD forward<_TypesInit>(_Args)...) {}\r\n\r\n    template <class... _Unbound>\r\n        requires _Can_call_back_binder<_Seq, _Fx&, tuple<_Types...>&, _Unbound...>\r\n    constexpr decltype(auto) operator()(_Unbound&&... _Unbargs) & noexcept(noexcept(\r\n        _STD _Call_back_binder(_Seq{}, _Mypair._Get_first(), _Mypair._Myval2, _STD forward<_Unbound>(_Unbargs)...))) {\r\n        return _STD _Call_back_binder(\r\n            _Seq{}, _Mypair._Get_first(), _Mypair._Myval2, _STD forward<_Unbound>(_Unbargs)...);\r\n    }\r\n\r\n    template <class... _Unbound>\r\n    void operator()(_Unbound&&...) & = delete;\r\n\r\n    template <class... _Unbound>\r\n        requires _Can_call_back_binder<_Seq, const _Fx&, const tuple<_Types...>&, _Unbound...>\r\n    constexpr decltype(auto) operator()(_Unbound&&... _Unbargs) const& noexcept(noexcept(\r\n        _STD _Call_back_binder(_Seq{}, _Mypair._Get_first(), _Mypair._Myval2, _STD forward<_Unbound>(_Unbargs)...))) {\r\n        return _STD _Call_back_binder(\r\n            _Seq{}, _Mypair._Get_first(), _Mypair._Myval2, _STD forward<_Unbound>(_Unbargs)...);\r\n    }\r\n\r\n    template <class... _Unbound>\r\n    void operator()(_Unbound&&...) const& = delete;\r\n\r\n    template <class... _Unbound>\r\n        requires _Can_call_back_binder<_Seq, _Fx, tuple<_Types...>, _Unbound...>\r\n    constexpr decltype(auto) operator()(_Unbound&&... _Unbargs) && noexcept(noexcept(_STD _Call_back_binder(\r\n        _Seq{}, _STD move(_Mypair._Get_first()), _STD move(_Mypair._Myval2), _STD forward<_Unbound>(_Unbargs)...))) {\r\n        return _STD _Call_back_binder(\r\n            _Seq{}, _STD move(_Mypair._Get_first()), _STD move(_Mypair._Myval2), _STD forward<_Unbound>(_Unbargs)...);\r\n    }\r\n\r\n    template <class... _Unbound>\r\n    void operator()(_Unbound&&...) && = delete;\r\n\r\n    template <class... _Unbound>\r\n        requires _Can_call_back_binder<_Seq, const _Fx, const tuple<_Types...>, _Unbound...>\r\n    constexpr decltype(auto) operator()(_Unbound&&... _Unbargs) const&& noexcept(noexcept(_STD _Call_back_binder(\r\n        _Seq{}, _STD move(_Mypair._Get_first()), _STD move(_Mypair._Myval2), _STD forward<_Unbound>(_Unbargs)...))) {\r\n        return _STD _Call_back_binder(\r\n            _Seq{}, _STD move(_Mypair._Get_first()), _STD move(_Mypair._Myval2), _STD forward<_Unbound>(_Unbargs)...);\r\n    }\r\n\r\n    template <class... _Unbound>\r\n    void operator()(_Unbound&&...) const&& = delete;\r\n};\r\n\r\n_EXPORT_STD template <class _Fx, class... _Types>\r\n_NODISCARD constexpr auto bind_back(_Fx&& _Func, _Types&&... _Args) {\r\n    static_assert(is_constructible_v<decay_t<_Fx>, _Fx>,\r\n        \"std::bind_back requires the decayed callable to be constructible from an undecayed callable\");\r\n    static_assert(\r\n        is_move_constructible_v<decay_t<_Fx>>, \"std::bind_back requires the decayed callable to be move constructible\");\r\n    static_assert(conjunction_v<is_constructible<decay_t<_Types>, _Types>...>,\r\n        \"std::bind_back requires the decayed bound arguments to be constructible from undecayed bound arguments\");\r\n    static_assert(conjunction_v<is_move_constructible<decay_t<_Types>>...>,\r\n        \"std::bind_back requires the decayed bound arguments to be move constructible\");\r\n\r\n    return _Back_binder<decay_t<_Fx>, decay_t<_Types>...>(_STD forward<_Fx>(_Func), _STD forward<_Types>(_Args)...);\r\n}\r\n#endif // _HAS_CXX23\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\ntemplate <class _Fty, class _Alloc>\r\nstruct uses_allocator<function<_Fty>, _Alloc> : true_type {}; // true_type if container allocator enabled\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n\r\n#if _HAS_CXX17\r\ninline void _Add_alloc_size(size_t& _Size, const size_t _Size_added, const size_t _Alignment) {\r\n    // moves _Size up to account for storing an object of size _Size_added with alignment _Alignment in a memory buffer\r\n    // assumes that the memory buffer will be allocated for the \"worst\" alignment used in the resulting buffer\r\n    const size_t _Align_masked = _Size & (_Alignment - 1u);\r\n    _Size += _Size_added;\r\n    if (_Align_masked != 0) {\r\n        _Size += _Alignment - _Align_masked;\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\nvoid _Add_alloc_size(size_t& _Size) { // moves _Size up to account for allocating a _Ty\r\n    _Add_alloc_size(_Size, sizeof(_Ty), alignof(_Ty));\r\n}\r\n\r\ntemplate <class _Ty>\r\nvoid _Add_alloc_size(size_t& _Size, const size_t _Count) {\r\n    // moves _Size up to account for allocating an array of _Count _Ty instances\r\n    _Add_alloc_size(_Size, _Get_size_of_n<sizeof(_Ty)>(_Count), alignof(_Ty));\r\n}\r\n\r\ninline void* _Decode_aligned_block(void*& _Base, size_t _Size, const size_t _Alignment) {\r\n    // \"allocates\" an object of size _Size and alignment _Alignment from _Base, and shifts\r\n    // _Base up by the size necessary to decode that object.\r\n    auto _Space  = static_cast<size_t>(-1);\r\n    auto _Result = _STD align(_Alignment, _Size, _Base, _Space);\r\n    _Base        = static_cast<char*>(_Base) + _Size;\r\n    return _Result;\r\n}\r\n\r\ntemplate <class _Ty>\r\n_Ty* _Decode_aligned_block(void*& _Base) { // \"allocates\" a _Ty from _Base\r\n    return static_cast<_Ty*>(_Decode_aligned_block(_Base, sizeof(_Ty), alignof(_Ty)));\r\n}\r\n\r\ntemplate <class _Ty>\r\n_Ty* _Decode_aligned_block(void*& _Base, const size_t _Count) {\r\n    // \"allocates\" an array of _Count _Ty instances from _Base\r\n    return static_cast<_Ty*>(_Decode_aligned_block(_Base, sizeof(_Ty) * _Count, alignof(_Ty)));\r\n}\r\n\r\ntemplate <class _FwdItHaystack, class _FwdItPat, class _Pred_eq>\r\n_CONSTEXPR20 pair<_FwdItHaystack, _FwdItHaystack> _Search_pair_unchecked(\r\n    _FwdItHaystack _First1, _FwdItHaystack _Last1, _FwdItPat _First2, _FwdItPat _Last2, _Pred_eq& _Eq) {\r\n    // find first [_First2, _Last2) satisfying _Eq\r\n    if constexpr (_Is_ranges_random_iter_v<_FwdItHaystack> && _Is_ranges_random_iter_v<_FwdItPat>) {\r\n        _Iter_diff_t<_FwdItHaystack> _Count1 = _Last1 - _First1;\r\n        _Iter_diff_t<_FwdItPat> _Count2      = _Last2 - _First2;\r\n\r\n#if _VECTORIZED_SEARCH\r\n        if constexpr (_Vector_alg_in_search_is_safe<_FwdItHaystack, _FwdItPat, _Pred_eq>) {\r\n            if (!_STD _Is_constant_evaluated()) {\r\n                const auto _Ptr1 = _STD _To_address(_First1);\r\n                (void) _STD _To_address(_Last2);\r\n\r\n                const auto _Ptr_res1 = _STD _Search_vectorized(\r\n                    _Ptr1, _STD _To_address(_Last1), _STD _To_address(_First2), static_cast<size_t>(_Count2));\r\n\r\n                if constexpr (is_pointer_v<_FwdItHaystack>) {\r\n                    _First1 = _Ptr_res1;\r\n                } else {\r\n                    _First1 += _Ptr_res1 - _Ptr1;\r\n                }\r\n\r\n                if (_First1 != _Last1) {\r\n                    return {_First1, _First1 + static_cast<_Iter_diff_t<_FwdItHaystack>>(_Count2)};\r\n                } else {\r\n                    return {_Last1, _Last1};\r\n                }\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_SEARCH ^^^\r\n\r\n        for (; _Count2 <= _Count1; ++_First1, (void) --_Count1) { // room for match, try it\r\n            _FwdItHaystack _Mid1 = _First1;\r\n            for (_FwdItPat _Mid2 = _First2;; ++_Mid1, (void) ++_Mid2) {\r\n                if (_Mid2 == _Last2) {\r\n                    return {_First1, _Mid1};\r\n                }\r\n\r\n                if (!_Eq(*_Mid1, *_Mid2)) {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        return {_Last1, _Last1};\r\n    } else {\r\n        static_assert(_Is_ranges_fwd_iter_v<_FwdItHaystack> && _Is_ranges_fwd_iter_v<_FwdItPat>,\r\n            \"Iterators must be at least forward iterators\");\r\n        for (;; ++_First1) { // loop until match or end of a sequence\r\n            _FwdItHaystack _Mid1 = _First1;\r\n            for (_FwdItPat _Mid2 = _First2;; ++_Mid1, (void) ++_Mid2) {\r\n                if (_Mid2 == _Last2) {\r\n                    return {_First1, _Mid1};\r\n                }\r\n\r\n                if (_Mid1 == _Last1) {\r\n                    return {_Last1, _Last1};\r\n                }\r\n\r\n                if (!_Eq(*_Mid1, *_Mid2)) {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _FwdItPat, class _Pred_eq = equal_to<>>\r\nclass default_searcher { // functor to search haystacks for needles\r\npublic:\r\n    _CONSTEXPR20 default_searcher(_FwdItPat _First, _FwdItPat _Last, _Pred_eq _Eq = _Pred_eq())\r\n        : _Data{_One_then_variadic_args_t{}, _STD move(_Eq), pair<_FwdItPat, _FwdItPat>{_First, _Last}} {\r\n        const auto& _Pat = _Data._Myval2;\r\n        _STD _Adl_verify_range(_Pat.first, _Pat.second);\r\n    }\r\n\r\n    template <class _FwdItHaystack>\r\n    _NODISCARD _CONSTEXPR20 pair<_FwdItHaystack, _FwdItHaystack> operator()(\r\n        _FwdItHaystack _First, _FwdItHaystack _Last) const {\r\n        // search [_First, _Last) for the searcher's pattern\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        const auto& _Eq  = _Data._Get_first();\r\n        const auto& _Pat = _Data._Myval2;\r\n        _STD _Adl_verify_range(_Pat.first, _Pat.second); // check again to ensure container is not destroyed\r\n        const auto _Result = _STD _Search_pair_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last),\r\n            _STD _Get_unwrapped(_Pat.first), _STD _Get_unwrapped(_Pat.second), _Eq);\r\n        _STD _Seek_wrapped(_Last, _Result.second);\r\n        _STD _Seek_wrapped(_First, _Result.first);\r\n        return {_First, _Last};\r\n    }\r\n\r\nprivate:\r\n    _Compressed_pair<_Pred_eq, pair<_FwdItPat, _FwdItPat>> _Data;\r\n};\r\n\r\ntemplate <class _RanItPat, class _Hash_ty, class _Pred_eq>\r\nstruct _Boyer_moore_hash_delta_1_table { // stores the Boyer-Moore delta_1 table using a hash table\r\n    using _Value_t = _Iter_value_t<_RanItPat>;\r\n    using _Diff    = _Iter_diff_t<_RanItPat>;\r\n\r\n    _Boyer_moore_hash_delta_1_table(_RanItPat _Pat_first_arg, _Unwrapped_t<const _RanItPat&> _UPat_first,\r\n        const _Diff _Pat_size_arg, _Hash_ty&& _Hash_fn, _Pred_eq&& _Eq)\r\n        : _Pat_first(_Pat_first_arg), _Pat_size(_Pat_size_arg),\r\n          _Map(0, _STD move(_Hash_fn), _STD move(_Eq)) { // initialize a delta_1 hash table\r\n        for (_Diff _Idx = 1; _Idx <= _Pat_size; ++_Idx, (void) ++_UPat_first) {\r\n            _Map.insert_or_assign(*_UPat_first, _Pat_size - _Idx);\r\n        }\r\n    }\r\n\r\n    _Diff _Lookup(const _Value_t& _Value) const {\r\n        // lookup the \"character\" _Value in the table, returning the maximum shift if found\r\n        const auto _Iter = _Map.find(_Value);\r\n        if (_Iter == _Map.end()) {\r\n            return _Pat_size;\r\n        }\r\n\r\n        return _Iter->second;\r\n    }\r\n\r\n    _Pred_eq _Get_eq() const {\r\n        return _Map.key_eq();\r\n    }\r\n\r\n    const _RanItPat _Pat_first;\r\n    const _Diff _Pat_size;\r\n\r\nprivate:\r\n    unordered_map<_Value_t, _Diff, _Hash_ty, _Pred_eq> _Map;\r\n};\r\n\r\ntemplate <class _RanItPat, _Iter_diff_t<_RanItPat> _Limit>\r\nstruct _Boyer_moore_flat_delta_1_table { // stores the Boyer-Moore delta_1 table using a plain array lookup\r\n    using _Value_t = _Iter_value_t<_RanItPat>;\r\n    using _Diff    = _Iter_diff_t<_RanItPat>;\r\n\r\n    _Boyer_moore_flat_delta_1_table(_RanItPat _Pat_first_arg, _Unwrapped_t<const _RanItPat&> _UPat_first,\r\n        const _Diff _Pat_size_arg, _Unused_parameter, _Unused_parameter)\r\n        : _Pat_first(_Pat_first_arg), _Pat_size(_Pat_size_arg) { // initialize a delta_1 flat table\r\n        _STD fill(_STD begin(_Table), _STD end(_Table), _Pat_size);\r\n        for (_Diff _Idx = 1; _Idx <= _Pat_size; ++_Idx, (void) ++_UPat_first) {\r\n            _Table[_Unsigned_value(*_UPat_first)] = _Pat_size - _Idx;\r\n        }\r\n    }\r\n\r\n    _Diff _Lookup(const _Value_t _Value) const { // lookup the \"character\" _Value in the table\r\n        const auto _UValue = _Unsigned_value(_Value);\r\n        if (_UValue < _STD size(_Table)) {\r\n            return _Table[_UValue];\r\n        }\r\n\r\n        return _Pat_size;\r\n    }\r\n\r\n    equal_to<> _Get_eq() const {\r\n        return {};\r\n    }\r\n\r\n    const _RanItPat _Pat_first;\r\n    const _Diff _Pat_size;\r\n\r\nprivate:\r\n    _Diff _Table[_Limit];\r\n};\r\n\r\n// _Mini_ptr avoids needing to include <memory> which includes <atomic>.\r\n// It doesn't attempt to provide all of unique_ptr's safety features; use carefully.\r\nenum class _Deletion_kind { _Global_scalar, _Normal_array };\r\n\r\ntemplate <class _Ty, _Deletion_kind _Del>\r\nclass _Mini_ptr {\r\npublic:\r\n    explicit _Mini_ptr(_Ty* const _Ptr_) noexcept : _Ptr(_Ptr_) {}\r\n\r\n    ~_Mini_ptr() noexcept {\r\n        if (_Ptr) {\r\n            if constexpr (_Del == _Deletion_kind::_Global_scalar) {\r\n                ::operator delete(_Ptr);\r\n            } else if constexpr (_Del == _Deletion_kind::_Normal_array) {\r\n                delete[] _Ptr;\r\n            } else {\r\n                static_assert(false); // unexpected strategy\r\n            }\r\n        }\r\n    }\r\n\r\n    _NODISCARD _Ty* _Get() const noexcept {\r\n        return _Ptr;\r\n    }\r\n\r\n    _NODISCARD _Ty* _Release() noexcept {\r\n        return _STD exchange(_Ptr, nullptr);\r\n    }\r\n\r\n    _Mini_ptr(const _Mini_ptr&)            = delete;\r\n    _Mini_ptr& operator=(const _Mini_ptr&) = delete;\r\n\r\nprivate:\r\n    _Ty* _Ptr;\r\n};\r\n\r\ntemplate <class _RanItPat, class _Pred_eq>\r\nvoid _Build_boyer_moore_delta_2_table(_Iter_diff_t<_RanItPat>* const _Shifts, const _RanItPat _Pat_first,\r\n    const _Iter_diff_t<_RanItPat> _Pat_size, _Pred_eq& _Eq) {\r\n    // Builds Boyer-Moore's delta_2 table from a pattern [_Pat_first, _Pat_first + _Pat_size).\r\n    // pre: _Shifts is a pointer to _Pat_size _Iter_diff_t<_RanItPat>s.\r\n    // This is the `dd'` algorithm from \"Fast Pattern Matching In Strings\" by Knuth, Morris, and Pratt (1977).\r\n    // Note that the published algorithm used 1-based indexing!\r\n    using _Diff = _Iter_diff_t<_RanItPat>;\r\n\r\n    if (_Pat_size == 0) {\r\n        return;\r\n    }\r\n\r\n    if (_STD _Max_limit<_Diff>() - _Pat_size < _Pat_size) {\r\n        _Xlength_error(\"Boyer-Moore pattern is too long\");\r\n    }\r\n\r\n    const auto _Mx = static_cast<size_t>(_Pat_size);\r\n\r\n    const _Mini_ptr<size_t, _Deletion_kind::_Normal_array> _Fx_ptr{new size_t[_Mx]};\r\n    size_t* const _Fx = _Fx_ptr._Get();\r\n\r\n    for (size_t _Kx = 1; _Kx <= _Mx; ++_Kx) {\r\n        _Shifts[_Kx - 1] = static_cast<_Diff>(2 * _Mx - _Kx);\r\n    }\r\n\r\n    size_t _Tx = _Mx + 1;\r\n    for (size_t _Jx = _Mx; _Jx > 0; --_Jx, --_Tx) {\r\n        _Fx[_Jx - 1] = _Tx;\r\n        while (_Tx <= _Mx && !_Eq(_Pat_first[_Jx - 1], _Pat_first[_Tx - 1])) {\r\n            _Shifts[_Tx - 1] = (_STD min) (_Shifts[_Tx - 1], static_cast<_Diff>(_Mx - _Jx));\r\n            _Tx              = _Fx[_Tx - 1];\r\n        }\r\n    }\r\n\r\n    // The code below is the \"Rytter correction\" from \"Algorithms For String Searching: A Survey\" by Baeza-Yates (1989),\r\n    // originally from \"A Correct Preprocessing Algorithm For Boyer-Moore String-Searching\" by Rytter (1980).\r\n\r\n    size_t _Qx = _Tx;\r\n    _Tx        = _Mx + 1 - _Qx;\r\n    for (size_t _Jx = 1, _Tx1 = 0; _Jx <= _Tx; ++_Tx1, ++_Jx) {\r\n        _Fx[_Jx - 1] = _Tx1;\r\n        while (_Tx1 >= 1 && !_Eq(_Pat_first[_Jx - 1], _Pat_first[_Tx1 - 1])) {\r\n            _Tx1 = _Fx[_Tx1 - 1];\r\n        }\r\n    }\r\n\r\n    size_t _Qx1 = 1;\r\n    while (_Qx < _Mx) {\r\n        for (size_t _Kx = _Qx1; _Kx <= _Qx; ++_Kx) {\r\n            _Shifts[_Kx - 1] = (_STD min) (_Shifts[_Kx - 1], static_cast<_Diff>(_Mx + _Qx - _Kx));\r\n        }\r\n        _Qx1 = _Qx + 1;\r\n\r\n        const size_t _Temp = _Fx[_Tx - 1];\r\n\r\n        _Qx = _Qx + _Tx - _Temp;\r\n        _Tx = _Temp;\r\n    }\r\n}\r\n\r\ntemplate <class _Delta1_t, class _RanItHaystack>\r\npair<_RanItHaystack, _RanItHaystack> _Boyer_moore_search(\r\n    const _Delta1_t& _Delta1, typename _Delta1_t::_Diff* _Delta2, _RanItHaystack _First, _RanItHaystack _Last) {\r\n    static_assert(is_same_v<typename _Delta1_t::_Value_t, _Iter_value_t<_RanItHaystack>>,\r\n        \"boyer_moore_searcher requires matching iterator value types\");\r\n    using _Diff = typename _Delta1_t::_Diff;\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst         = _STD _Get_unwrapped(_First);\r\n    const auto _ULast    = _STD _Get_unwrapped(_Last);\r\n    const auto _Pat_size = _Delta1._Pat_size;\r\n    if (_Pat_size == 0) {\r\n        return {_First, _First};\r\n    }\r\n\r\n    const auto _UPat_first = _STD _Get_unwrapped_n(_Delta1._Pat_first, _Pat_size);\r\n    const auto _Eq         = _Delta1._Get_eq();\r\n    _Diff _Shift           = _Pat_size - 1;\r\n    while (_Shift < _ULast - _UFirst) {\r\n        _UFirst += _Shift;\r\n        _Shift = _Delta1._Lookup(*_UFirst);\r\n        if (_Shift == 0) { // that is, *_UFirst == \"_Pat.back()\"\r\n            _Diff _Idx = _Pat_size - 1;\r\n            do {\r\n                if (_Idx == 0) {\r\n                    _STD _Seek_wrapped(_Last, _UFirst + _Pat_size);\r\n                    _STD _Seek_wrapped(_First, _UFirst);\r\n                    return {_First, _Last};\r\n                }\r\n\r\n                --_Idx;\r\n                --_UFirst;\r\n            } while (_Eq(*_UFirst, _UPat_first[_Idx]));\r\n            _Shift = (_STD max) (_Delta1._Lookup(*_UFirst), _Delta2[_Idx]);\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Last, _ULast);\r\n    _STD _Seek_wrapped(_First, _ULast);\r\n    return {_First, _Last};\r\n}\r\n\r\ntemplate <class _Delta1_t, class _RanItHaystack>\r\npair<_RanItHaystack, _RanItHaystack> _Boyer_moore_horspool_search(\r\n    const _Delta1_t& _Delta1, _RanItHaystack _First, _RanItHaystack _Last) {\r\n    static_assert(is_same_v<typename _Delta1_t::_Value_t, _Iter_value_t<_RanItHaystack>>,\r\n        \"boyer_moore_horspool_searcher requires matching iterator value types\");\r\n    using _Diff = typename _Delta1_t::_Diff;\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _Pat_size = _Delta1._Pat_size;\r\n    if (_Pat_size == 0) {\r\n        return {_First, _First};\r\n    }\r\n\r\n    auto _UFirst           = _STD _Get_unwrapped(_First);\r\n    const auto _ULast      = _STD _Get_unwrapped(_Last);\r\n    const auto _UPat_first = _STD _Get_unwrapped_n(_Delta1._Pat_first, _Pat_size);\r\n    const auto _Eq         = _Delta1._Get_eq();\r\n    _Diff _Shift           = _Pat_size - 1;\r\n    while (_Shift < _ULast - _UFirst) {\r\n        _UFirst += _Shift;\r\n        _Shift = _Delta1._Lookup(*_UFirst);\r\n        if (_Shift == 0) { // that is, *_UFirst == \"_Pat.back()\"\r\n            const auto _Candidate = _UFirst - (_Pat_size - 1);\r\n            if (_STD equal(_UPat_first, _UPat_first + (_Pat_size - 1), _Candidate, _STD _Pass_fn(_Eq))) {\r\n                _STD _Seek_wrapped(_Last, _Candidate + _Pat_size);\r\n                _STD _Seek_wrapped(_First, _Candidate);\r\n                return {_First, _Last};\r\n            }\r\n\r\n            _Shift = 1;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Last, _ULast);\r\n    _STD _Seek_wrapped(_First, _ULast);\r\n    return {_First, _Last};\r\n}\r\n\r\ntemplate <class _RanItPat, class _Hash_ty, class _Pred_eq, class _Delta1_t>\r\nstruct _Single_delta1_type_boyer_moore_traits {\r\n    using _Diff = _Iter_diff_t<_RanItPat>;\r\n\r\n    // uses buffers of the form {\r\n    // _Atomic_counter_t _Ref_count\r\n    // _Delta1_t _Delta1\r\n    // _Diff _Delta2[_Pattern_size] // not used for Boyer-Moore-Horspool\r\n    // }\r\n\r\n    template <bool _Build_delta2>\r\n    static void* _Build_boyer_moore(_RanItPat _First, _RanItPat _Last, _Hash_ty _Hash_fn, _Pred_eq _Eq) {\r\n        // builds data tables for the Boyer-Moore string search algorithm\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        const auto _UFirst       = _STD _Get_unwrapped(_First);\r\n        const auto _Pat_size_raw = _STD _Get_unwrapped(_Last) - _UFirst;\r\n        using _CT                = common_type_t<_Iter_diff_t<_RanItPat>, size_t>;\r\n        if (static_cast<_CT>(_Pat_size_raw) > static_cast<_CT>(SIZE_MAX)) {\r\n            _Xbad_alloc();\r\n        }\r\n\r\n        const auto _Pat_size = static_cast<size_t>(_Pat_size_raw);\r\n        size_t _Buf_size     = 0;\r\n        _Add_alloc_size<_Atomic_counter_t>(_Buf_size);\r\n        _Add_alloc_size<_Delta1_t>(_Buf_size);\r\n        if (_Build_delta2) {\r\n            _Add_alloc_size<_Diff>(_Buf_size, _Pat_size);\r\n        }\r\n\r\n        _Mini_ptr<void, _Deletion_kind::_Global_scalar> _Buf_bytes(::operator new(_Buf_size));\r\n        void* _Buf                                      = _Buf_bytes._Get();\r\n        *_Decode_aligned_block<_Atomic_counter_t>(_Buf) = 1;\r\n        void* const _Delta1                             = _Decode_aligned_block<_Delta1_t>(_Buf);\r\n        if (_Build_delta2) {\r\n            _STD _Build_boyer_moore_delta_2_table(\r\n                _Decode_aligned_block<_Diff>(_Buf, _Pat_size), _UFirst, _Pat_size_raw, _Eq);\r\n        }\r\n\r\n        ::new (_Delta1) _Delta1_t(_First, _UFirst, _Pat_size_raw, _STD move(_Hash_fn), _STD move(_Eq));\r\n        return _Buf_bytes._Release();\r\n    }\r\n\r\n    template <class _RanItHaystack>\r\n    static pair<_RanItHaystack, _RanItHaystack> _Use_boyer_moore(\r\n        void* _Data, _RanItHaystack _First, _RanItHaystack _Last) {\r\n        // decodes data tables for the Boyer-Moore string search algorithm\r\n        (void) _Decode_aligned_block<_Atomic_counter_t>(_Data);\r\n        const auto _Delta1 = _Decode_aligned_block<_Delta1_t>(_Data);\r\n        const auto _Delta2 = _Decode_aligned_block<_Diff>(_Data, static_cast<size_t>(_Delta1->_Pat_size));\r\n        return _STD _Boyer_moore_search(*_Delta1, _Delta2, _First, _Last);\r\n    }\r\n\r\n    template <class _RanItHaystack>\r\n    static pair<_RanItHaystack, _RanItHaystack> _Use_boyer_moore_horspool(\r\n        void* _Data, _RanItHaystack _First, _RanItHaystack _Last) {\r\n        // decodes data tables for the Boyer-Moore string search algorithm\r\n        (void) _Decode_aligned_block<_Atomic_counter_t>(_Data);\r\n        const auto _Delta1 = _Decode_aligned_block<_Delta1_t>(_Data);\r\n        return _STD _Boyer_moore_horspool_search(*_Delta1, _First, _Last);\r\n    }\r\n\r\n    static void _Destroy(void* const _Base) noexcept {\r\n        // destroys data tables for either the Boyer-Moore or Boyer-Moore-Horspool string search algorithms\r\n        void* _Data = _Base;\r\n        (void) _Decode_aligned_block<_Atomic_counter_t>(_Data);\r\n        _Decode_aligned_block<_Delta1_t>(_Data)->~_Delta1_t();\r\n        ::operator delete(_Base);\r\n    }\r\n};\r\n\r\ntemplate <class _RanItPat, class _Hash_ty, class _Pred_eq>\r\nusing _Boyer_moore_traits_char_mode = _Single_delta1_type_boyer_moore_traits<_RanItPat, _Hash_ty, _Pred_eq,\r\n    _Boyer_moore_flat_delta_1_table<_RanItPat, 256>>;\r\n\r\ntemplate <class _RanItPat>\r\nstruct _Boyer_moore_traits_wchar_t_mode {\r\n    using _Value_t       = _Iter_value_t<_RanItPat>;\r\n    using _Diff          = _Iter_diff_t<_RanItPat>;\r\n    using _Big_table_t   = _Boyer_moore_flat_delta_1_table<_RanItPat, 65536>;\r\n    using _Small_table_t = _Boyer_moore_flat_delta_1_table<_RanItPat, 256>;\r\n\r\n    // uses buffers of the form {\r\n    // _Atomic_counter_t _Ref_count\r\n    // bool _Use_large_table // true if anything in the pattern is > 255\r\n    // conditional_t<_Use_large_table, _Big_table_t, _Small_table_t> _Delta1\r\n    // _Diff _Delta2[_Pattern_size] // not used for Boyer-Moore-Horspool\r\n    // }\r\n\r\n    template <bool _Build_delta2>\r\n    static void* _Build_boyer_moore(_RanItPat _First, _RanItPat _Last, _Unused_parameter, _Unused_parameter) {\r\n        // builds data tables for the Boyer-Moore string search algorithm\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        const auto _UFirst       = _STD _Get_unwrapped(_First);\r\n        const auto _ULast        = _STD _Get_unwrapped(_Last);\r\n        const auto _Pat_size_raw = _ULast - _UFirst;\r\n        using _CT                = common_type_t<_Iter_diff_t<_RanItPat>, size_t>;\r\n        if (static_cast<_CT>(_Pat_size_raw) > static_cast<_CT>(SIZE_MAX)) {\r\n            _Xbad_alloc();\r\n        }\r\n\r\n        const auto _Pat_size = static_cast<size_t>(_Pat_size_raw);\r\n        size_t _Buf_size     = 0;\r\n        _Add_alloc_size<_Atomic_counter_t>(_Buf_size);\r\n        bool _Use_large_table = false;\r\n\r\n        for (auto _Temp = _UFirst; _Temp != _ULast; ++_Temp) {\r\n            if (_Unsigned_value(*_Temp) > 255) {\r\n                _Use_large_table = true;\r\n                break;\r\n            }\r\n        }\r\n\r\n        _Add_alloc_size<bool>(_Buf_size);\r\n        if (_Use_large_table) {\r\n            _Add_alloc_size<_Big_table_t>(_Buf_size);\r\n        } else {\r\n            _Add_alloc_size<_Small_table_t>(_Buf_size);\r\n        }\r\n\r\n        if (_Build_delta2) {\r\n            _Add_alloc_size<_Diff>(_Buf_size, _Pat_size);\r\n        }\r\n\r\n        _Mini_ptr<void, _Deletion_kind::_Global_scalar> _Buf_bytes(::operator new(_Buf_size));\r\n        void* _Buf                                      = _Buf_bytes._Get();\r\n        *_Decode_aligned_block<_Atomic_counter_t>(_Buf) = 1;\r\n        *_Decode_aligned_block<bool>(_Buf)              = _Use_large_table;\r\n        if (_Use_large_table) {\r\n            using _Delta1_t = _Big_table_t;\r\n            ::new (static_cast<void*>(_Decode_aligned_block<_Delta1_t>(_Buf)))\r\n                _Delta1_t(_First, _UFirst, _Pat_size_raw, {}, {});\r\n        } else {\r\n            using _Delta1_t = _Small_table_t;\r\n            ::new (static_cast<void*>(_Decode_aligned_block<_Delta1_t>(_Buf)))\r\n                _Delta1_t(_First, _UFirst, _Pat_size_raw, {}, {});\r\n        }\r\n\r\n        if (_Build_delta2) {\r\n            equal_to<> _Eq;\r\n            _STD _Build_boyer_moore_delta_2_table(\r\n                _Decode_aligned_block<_Diff>(_Buf, _Pat_size), _UFirst, _Pat_size_raw, _Eq);\r\n        }\r\n\r\n        return _Buf_bytes._Release();\r\n    }\r\n\r\n    template <class _RanItHaystack>\r\n    static pair<_RanItHaystack, _RanItHaystack> _Use_boyer_moore(\r\n        void* _Data, _RanItHaystack _First, _RanItHaystack _Last) {\r\n        // decodes data tables for the Boyer-Moore string search algorithm\r\n        (void) _Decode_aligned_block<_Atomic_counter_t>(_Data);\r\n        if (*_Decode_aligned_block<bool>(_Data)) {\r\n            const auto _Delta1 = _Decode_aligned_block<_Big_table_t>(_Data);\r\n            const auto _Delta2 = _Decode_aligned_block<_Diff>(_Data, static_cast<size_t>(_Delta1->_Pat_size));\r\n            return _STD _Boyer_moore_search(*_Delta1, _Delta2, _First, _Last);\r\n        } else {\r\n            const auto _Delta1 = _Decode_aligned_block<_Small_table_t>(_Data);\r\n            const auto _Delta2 = _Decode_aligned_block<_Diff>(_Data, static_cast<size_t>(_Delta1->_Pat_size));\r\n            return _STD _Boyer_moore_search(*_Delta1, _Delta2, _First, _Last);\r\n        }\r\n    }\r\n\r\n    template <class _RanItHaystack>\r\n    static pair<_RanItHaystack, _RanItHaystack> _Use_boyer_moore_horspool(\r\n        void* _Data, _RanItHaystack _First, _RanItHaystack _Last) {\r\n        // decodes data tables for the Boyer-Moore string search algorithm\r\n        (void) _Decode_aligned_block<_Atomic_counter_t>(_Data);\r\n        if (*_Decode_aligned_block<bool>(_Data)) {\r\n            const auto _Delta1 = _Decode_aligned_block<_Big_table_t>(_Data);\r\n            return _STD _Boyer_moore_horspool_search(*_Delta1, _First, _Last);\r\n        } else {\r\n            const auto _Delta1 = _Decode_aligned_block<_Small_table_t>(_Data);\r\n            return _STD _Boyer_moore_horspool_search(*_Delta1, _First, _Last);\r\n        }\r\n    }\r\n\r\n    static void _Destroy(void* const _Base) noexcept {\r\n        // destroys data tables for either the Boyer-Moore or Boyer-Moore-Horspool string search algorithms\r\n        void* _Data = _Base;\r\n        (void) _Decode_aligned_block<_Atomic_counter_t>(_Data);\r\n        if (*_Decode_aligned_block<bool>(_Data)) {\r\n            const auto _Delta1 = _Decode_aligned_block<_Big_table_t>(_Data);\r\n            _Delta1->~_Big_table_t();\r\n        } else {\r\n            const auto _Delta1 = _Decode_aligned_block<_Small_table_t>(_Data);\r\n            _Delta1->~_Small_table_t();\r\n        }\r\n        static_assert(is_trivially_destructible_v<_Diff>, \"allows Boyer-Moore and Boyer-Moore-Horspool to \"\r\n                                                          \"share cleanup functions\");\r\n        ::operator delete(_Base);\r\n    }\r\n};\r\n\r\ntemplate <class _RanItPat, class _Hash_ty, class _Pred_eq>\r\nusing _Boyer_moore_traits_general_mode = _Single_delta1_type_boyer_moore_traits<_RanItPat, _Hash_ty, _Pred_eq,\r\n    _Boyer_moore_hash_delta_1_table<_RanItPat, _Hash_ty, _Pred_eq>>;\r\n\r\ntemplate <class _RanItPat, class _Hash_ty, class _Pred_eq, class _Value_t = _Iter_value_t<_RanItPat>>\r\nusing _Boyer_moore_traits =\r\n    conditional_t<is_integral_v<_Value_t> && sizeof(_Value_t) <= 2\r\n                      && (is_same_v<equal_to<>, _Pred_eq> || is_same_v<equal_to<_Value_t>, _Pred_eq>),\r\n        conditional_t<sizeof(_Value_t) == 1, _Boyer_moore_traits_char_mode<_RanItPat, _Hash_ty, _Pred_eq>,\r\n            _Boyer_moore_traits_wchar_t_mode<_RanItPat>>,\r\n        _Boyer_moore_traits_general_mode<_RanItPat, _Hash_ty, _Pred_eq>>;\r\n\r\n_EXPORT_STD template <class _RanItPat, class _Hash_ty = hash<_Iter_value_t<_RanItPat>>, class _Pred_eq = equal_to<>>\r\nclass boyer_moore_searcher {\r\npublic:\r\n    boyer_moore_searcher(\r\n        const _RanItPat _First, const _RanItPat _Last, _Hash_ty _Hash_fn = _Hash_ty(), _Pred_eq _Eq = _Pred_eq())\r\n        : _Data(_Traits::template _Build_boyer_moore<true>(_First, _Last, _STD move(_Hash_fn), _STD move(_Eq))) {\r\n        // preprocess a pattern for use with the Boyer-Moore string search algorithm\r\n    }\r\n\r\n    boyer_moore_searcher(const boyer_moore_searcher& _Other) noexcept // strengthened\r\n        : _Data(_Other._Data) {\r\n        _MT_INCR(*static_cast<_Atomic_counter_t*>(_Data));\r\n    }\r\n\r\n    ~boyer_moore_searcher() noexcept {\r\n        if (_MT_DECR(*static_cast<_Atomic_counter_t*>(_Data)) == 0) {\r\n            _Traits::_Destroy(_Data);\r\n        }\r\n    }\r\n\r\n    boyer_moore_searcher& operator=(const boyer_moore_searcher& _Other) noexcept /* strengthened */ {\r\n        boyer_moore_searcher _Cpy(_Other);\r\n        _STD swap(_Data, _Cpy._Data);\r\n        return *this;\r\n    }\r\n\r\n    template <class _RanItHaystack>\r\n    _NODISCARD pair<_RanItHaystack, _RanItHaystack> operator()(\r\n        const _RanItHaystack _First, const _RanItHaystack _Last) const {\r\n        // search for the preprocessed pattern in [_First, _Last)\r\n        return _Traits::_Use_boyer_moore(_Data, _First, _Last);\r\n    }\r\n\r\nprivate:\r\n    using _Traits = _Boyer_moore_traits<_RanItPat, _Hash_ty, _Pred_eq>;\r\n    void* _Data;\r\n};\r\n\r\n_EXPORT_STD template <class _RanItPat, class _Hash_ty = hash<_Iter_value_t<_RanItPat>>, class _Pred_eq = equal_to<>>\r\nclass boyer_moore_horspool_searcher { // equivalent to Boyer-Moore without the second table\r\npublic:\r\n    boyer_moore_horspool_searcher(\r\n        const _RanItPat _First, const _RanItPat _Last, _Hash_ty _Hash_fn = _Hash_ty(), _Pred_eq _Eq = _Pred_eq())\r\n        : _Data(_Traits::template _Build_boyer_moore<false>(_First, _Last, _STD move(_Hash_fn), _STD move(_Eq))) {\r\n        // preprocess a pattern for use with the Boyer-Moore-Horspool string search algorithm\r\n    }\r\n\r\n    boyer_moore_horspool_searcher(const boyer_moore_horspool_searcher& _Other) noexcept // strengthened\r\n        : _Data(_Other._Data) {\r\n        _MT_INCR(*static_cast<_Atomic_counter_t*>(_Data));\r\n    }\r\n\r\n    ~boyer_moore_horspool_searcher() noexcept {\r\n        if (_MT_DECR(*static_cast<_Atomic_counter_t*>(_Data)) == 0) {\r\n            _Traits::_Destroy(_Data);\r\n        }\r\n    }\r\n\r\n    boyer_moore_horspool_searcher& operator=(const boyer_moore_horspool_searcher& _Other) noexcept /* strengthened */ {\r\n        boyer_moore_horspool_searcher _Cpy(_Other);\r\n        _STD swap(_Data, _Cpy._Data);\r\n        return *this;\r\n    }\r\n\r\n    template <class _RanItHaystack>\r\n    _NODISCARD pair<_RanItHaystack, _RanItHaystack> operator()(\r\n        const _RanItHaystack _First, const _RanItHaystack _Last) const {\r\n        // search for the preprocessed pattern in [_First, _Last)\r\n        return _Traits::_Use_boyer_moore_horspool(_Data, _First, _Last);\r\n    }\r\n\r\nprivate:\r\n    using _Traits = _Boyer_moore_traits<_RanItPat, _Hash_ty, _Pred_eq>;\r\n    void* _Data;\r\n};\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD struct not_equal_to {\r\n        template <class _Ty1, class _Ty2>\r\n            requires equality_comparable_with<_Ty1, _Ty2>\r\n        _NODISCARD constexpr bool operator()(_Ty1&& _Left, _Ty2&& _Right) const noexcept(\r\n            noexcept(static_cast<bool>(static_cast<_Ty1&&>(_Left) == static_cast<_Ty2&&>(_Right)))) /* strengthened */ {\r\n            return !static_cast<bool>(static_cast<_Ty1&&>(_Left) == static_cast<_Ty2&&>(_Right));\r\n        }\r\n\r\n        using is_transparent = int;\r\n    };\r\n\r\n    _EXPORT_STD struct greater_equal {\r\n        template <class _Ty1, class _Ty2>\r\n            requires totally_ordered_with<_Ty1, _Ty2>\r\n        _NODISCARD constexpr bool operator()(_Ty1&& _Left, _Ty2&& _Right) const noexcept(\r\n            noexcept(static_cast<bool>(static_cast<_Ty1&&>(_Left) < static_cast<_Ty2&&>(_Right)))) /* strengthened */ {\r\n            return !static_cast<bool>(static_cast<_Ty1&&>(_Left) < static_cast<_Ty2&&>(_Right));\r\n        }\r\n\r\n        using is_transparent = int;\r\n    };\r\n\r\n    _EXPORT_STD struct less_equal {\r\n        template <class _Ty1, class _Ty2>\r\n            requires totally_ordered_with<_Ty1, _Ty2>\r\n        _NODISCARD constexpr bool operator()(_Ty1&& _Left, _Ty2&& _Right) const noexcept(\r\n            noexcept(static_cast<bool>(static_cast<_Ty2&&>(_Right) < static_cast<_Ty1&&>(_Left)))) /* strengthened */ {\r\n            return !static_cast<bool>(static_cast<_Ty2&&>(_Right) < static_cast<_Ty1&&>(_Left));\r\n        }\r\n\r\n        using is_transparent = int;\r\n    };\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _FUNCTIONAL_\r\n"
  },
  {
    "path": "stl/inc/future",
    "content": "// future standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _FUTURE_\r\n#define _FUTURE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#ifdef _M_CEE_PURE\r\n#error <future> is not supported when compiling with /clr:pure.\r\n#endif // defined(_M_CEE_PURE)\r\n\r\n#ifdef _RESUMABLE_FUNCTIONS_SUPPORTED\r\n#include <experimental/resumable>\r\n#endif // _RESUMABLE_FUNCTIONS_SUPPORTED\r\n\r\n#include <__msvc_chrono.hpp>\r\n#include <condition_variable>\r\n#include <functional>\r\n#include <memory>\r\n#include <mutex>\r\n#include <ppltasks.h>\r\n#include <system_error>\r\n#include <thread>\r\n#include <utility>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _Alloc>\r\nstruct _Allocator_deleter {\r\n    _Alloc _Al;\r\n\r\n    using pointer = typename allocator_traits<_Alloc>::pointer;\r\n    void operator()(pointer _Ptr) noexcept { // delete the pointer\r\n        _STD _Destroy_in_place(*_Ptr);\r\n        _Al.deallocate(_Ptr, 1);\r\n    }\r\n};\r\n\r\ntemplate <class _Alloc>\r\nusing _Unique_ptr_alloc = unique_ptr<typename _Alloc::value_type, _Allocator_deleter<_Alloc>>;\r\n\r\ntemplate <class _Alloc, class... _Args>\r\n_NODISCARD _Unique_ptr_alloc<_Alloc> _Make_unique_alloc(_Alloc& _Al, _Args&&... _Vals) {\r\n    // construct an object with an allocator and return it owned by a unique_ptr\r\n    _Alloc_construct_ptr<_Alloc> _Constructor{_Al};\r\n    _Constructor._Allocate();\r\n    _STD _Construct_in_place(*_Constructor._Ptr, _STD forward<_Args>(_Vals)...);\r\n    return _Unique_ptr_alloc<_Alloc>(_Constructor._Release(), _Allocator_deleter<_Alloc>{_Al});\r\n}\r\n\r\nstruct _From_raw_state_tag { // internal tag type for constructing a future from a raw state\r\n    explicit _From_raw_state_tag() = default;\r\n};\r\n\r\n_EXPORT_STD enum class future_errc { // names for futures errors\r\n    broken_promise = 1,\r\n    future_already_retrieved,\r\n    promise_already_satisfied,\r\n    no_state\r\n};\r\n\r\n_EXPORT_STD enum class launch { // names for launch options passed to async\r\n    async    = 0x1,\r\n    deferred = 0x2\r\n};\r\n\r\n_BITMASK_OPS(_EXPORT_STD, launch)\r\n\r\n_EXPORT_STD enum class future_status { // names for timed wait function returns\r\n    ready,\r\n    timeout,\r\n    deferred\r\n};\r\n\r\ntemplate <>\r\nstruct is_error_code_enum<future_errc> : true_type {};\r\n\r\n_EXPORT_STD _NODISCARD const error_category& future_category() noexcept;\r\n\r\n_EXPORT_STD _NODISCARD inline error_code make_error_code(future_errc _Ec) noexcept {\r\n    return error_code(static_cast<int>(_Ec), _STD future_category());\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline error_condition make_error_condition(future_errc _Ec) noexcept {\r\n    return error_condition(static_cast<int>(_Ec), _STD future_category());\r\n}\r\n\r\n_NODISCARD inline const char* _Future_error_map(int _Errcode) noexcept { // convert to name of future error\r\n    switch (static_cast<future_errc>(_Errcode)) { // switch on error code value\r\n    case future_errc::broken_promise:\r\n        return \"broken promise\";\r\n\r\n    case future_errc::future_already_retrieved:\r\n        return \"future already retrieved\";\r\n\r\n    case future_errc::promise_already_satisfied:\r\n        return \"promise already satisfied\";\r\n\r\n    case future_errc::no_state:\r\n        return \"no state\";\r\n\r\n    default:\r\n        return nullptr;\r\n    }\r\n}\r\n\r\n_EXPORT_STD class _NODISCARD future_error : public logic_error { // future exception\r\npublic:\r\n    explicit future_error(error_code _Errcode) // internal, TRANSITION, will be removed\r\n        : logic_error(\"\"), _Mycode(_Errcode) {}\r\n\r\n    explicit future_error(future_errc _Ec) : logic_error(\"\"), _Mycode(_STD make_error_code(_Ec)) {}\r\n\r\n    _NODISCARD const error_code& code() const noexcept {\r\n        return _Mycode;\r\n    }\r\n\r\n    _NODISCARD const char* __CLR_OR_THIS_CALL what() const noexcept override { // get message string\r\n        return _Future_error_map(_Mycode.value());\r\n    }\r\n\r\n#if !_HAS_EXCEPTIONS\r\nprotected:\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n#endif // !_HAS_EXCEPTIONS\r\n\r\nprivate:\r\n    error_code _Mycode; // the stored error code\r\n};\r\n\r\n// TRANSITION, ABI: remove `2` suffix\r\n[[noreturn]] inline void _Throw_future_error2(const future_errc _Ec) {\r\n    _THROW(future_error{_Ec});\r\n}\r\n\r\nclass _Future_error_category2 : public error_category { // categorize a future error\r\npublic:\r\n    constexpr _Future_error_category2() noexcept : error_category(_Future_addr) {}\r\n\r\n    const char* name() const noexcept override {\r\n        return \"future\";\r\n    }\r\n\r\n    string message(int _Errcode) const override {\r\n        const char* _Name = _Future_error_map(_Errcode);\r\n        if (_Name) {\r\n            return _Name;\r\n        }\r\n\r\n        return _Syserror_map(_Errcode);\r\n    }\r\n};\r\n\r\n_EXPORT_STD _NODISCARD inline const error_category& future_category() noexcept {\r\n    return _Immortalize_memcpy_image<_Future_error_category2>();\r\n}\r\n\r\ntemplate <class _Ty>\r\nclass _Associated_state;\r\n\r\ntemplate <class _Ty>\r\nstruct __declspec(novtable) _Deleter_base { // abstract base class for managing deletion of state objects\r\n    virtual void _Delete(_Associated_state<_Ty>*) noexcept = 0;\r\n    virtual ~_Deleter_base() = default; // TRANSITION, ABI (make non-virtual, never called polymorphically)\r\n};\r\n\r\ntemplate <class _Ty, class _Derived, class _Alloc>\r\nstruct _State_deleter : _Deleter_base<_Ty> { // manage allocator and deletion state objects\r\n    _State_deleter(const _Alloc& _Al) : _My_alloc(_Al) {}\r\n\r\n    _State_deleter(const _State_deleter&)            = delete;\r\n    _State_deleter& operator=(const _State_deleter&) = delete;\r\n\r\n    void _Delete(_Associated_state<_Ty>* _State) noexcept override;\r\n\r\n    _Alloc _My_alloc;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct __declspec(novtable) _Clonable_deleter_base : _Deleter_base<_Ty> {\r\n    // TRANSITION, ABI, should be fused into _Deleter_base\r\n    virtual _Associated_state<_Ty>* _Move_clone(_Associated_state<_Ty>&&) = 0;\r\n};\r\n\r\ntemplate <class _Ty, class _Derived, class _Alloc>\r\nstruct _State_deleter_v2 : _Clonable_deleter_base<_Ty> { // manage allocator and deletion state objects\r\n    _State_deleter_v2(const _Alloc& _Al) : _My_alloc(_Al) {}\r\n\r\n    _State_deleter_v2(const _State_deleter_v2&)            = delete;\r\n    _State_deleter_v2& operator=(const _State_deleter_v2&) = delete;\r\n\r\n    void _Delete(_Associated_state<_Ty>* _State) noexcept override;\r\n    _Associated_state<_Ty>* _Move_clone(_Associated_state<_Ty>&& _Src) override;\r\n\r\n    _Alloc _My_alloc;\r\n};\r\n\r\ntemplate <class _Ty>\r\nunion _Result_holder {\r\n    _Result_holder() noexcept {}\r\n    ~_Result_holder() noexcept {}\r\n\r\n    _Ty _Held_value;\r\n};\r\n\r\ntemplate <class _Ty>\r\nclass _Associated_state { // class for managing associated synchronous state\r\npublic:\r\n    using _State_type = _Ty;\r\n    using _Mydel      = _Deleter_base<_Ty>;\r\n\r\n    // TRANSITION, incorrectly default constructs _Result when _Ty is default constructible\r\n    _Associated_state(_Mydel* _Dp = nullptr)\r\n        : _Refs(1), // non-atomic initialization\r\n          _Result(), _Exception(), _Retrieved(false), _Ready(false), _Ready_at_thread_exit(false),\r\n          _Has_stored_result(false), _Running(false), _Deleter(_Dp) {}\r\n\r\n    virtual ~_Associated_state() noexcept {\r\n        if (_Already_has_stored_result() && !_Ready) { // registered for release at thread exit\r\n            _Cond._Unregister(_Mtx);\r\n        }\r\n\r\n        if constexpr (!is_default_constructible_v<_Ty>) {\r\n            if (_Has_stored_result) {\r\n                _Result._Held_value.~_Ty();\r\n            }\r\n        }\r\n    }\r\n\r\n    void _Retain() noexcept { // increment reference count\r\n        _MT_INCR(_Refs);\r\n    }\r\n\r\n    void _Release() noexcept { // decrement reference count and destroy when zero\r\n        if (_MT_DECR(_Refs) == 0) {\r\n            _Delete_this();\r\n        }\r\n    }\r\n\r\nprivate:\r\n    _Atomic_counter_t _Refs;\r\n\r\npublic:\r\n    virtual void _Wait() { // wait for signal\r\n        unique_lock<mutex> _Lock(_Mtx);\r\n        _Maybe_run_deferred_function(_Lock);\r\n        while (!_Ready) {\r\n            _Cond.wait(_Lock);\r\n        }\r\n    }\r\n\r\n    struct _Test_ready { // wraps _Associated_state\r\n        _Test_ready(const _Associated_state* _St) : _State(_St) {}\r\n\r\n        bool operator()() const { // test state\r\n            return _State->_Ready != 0;\r\n        }\r\n        const _Associated_state* _State;\r\n    };\r\n\r\n    template <class _Rep, class _Per>\r\n    future_status _Wait_for(const chrono::duration<_Rep, _Per>& _Rel_time) { // wait for duration\r\n        unique_lock<mutex> _Lock(_Mtx);\r\n        if (_Has_deferred_function()) {\r\n            return future_status::deferred;\r\n        }\r\n\r\n        if (_Cond.wait_for(_Lock, _Rel_time, _Test_ready(this))) {\r\n            return future_status::ready;\r\n        }\r\n\r\n        return future_status::timeout;\r\n    }\r\n\r\n    template <class _Clock, class _Dur>\r\n    future_status _Wait_until(const chrono::time_point<_Clock, _Dur>& _Abs_time) { // wait until time point\r\n        unique_lock<mutex> _Lock(_Mtx);\r\n        if (_Has_deferred_function()) {\r\n            return future_status::deferred;\r\n        }\r\n\r\n        if (_Cond.wait_until(_Lock, _Abs_time, _Test_ready(this))) {\r\n            return future_status::ready;\r\n        }\r\n\r\n        return future_status::timeout;\r\n    }\r\n\r\n    virtual _Ty& _Get_value(bool _Get_only_once) {\r\n        unique_lock<mutex> _Lock(_Mtx);\r\n        if (_Get_only_once && _Retrieved) {\r\n            _Throw_future_error2(future_errc::future_already_retrieved);\r\n        }\r\n\r\n        if (_Exception) {\r\n            _STD rethrow_exception(_Exception);\r\n        }\r\n\r\n        // TRANSITION: `_Retrieved` should be assigned before `_Exception` is thrown so that a `future::get`\r\n        // that throws a stored exception invalidates the future (N4950 [futures.unique.future]/17)\r\n        _Retrieved = true;\r\n        _Maybe_run_deferred_function(_Lock);\r\n        while (!_Ready) {\r\n            _Cond.wait(_Lock);\r\n        }\r\n\r\n        if (_Exception) {\r\n            _STD rethrow_exception(_Exception);\r\n        }\r\n\r\n        if constexpr (is_default_constructible_v<_Ty>) {\r\n            return _Result;\r\n        } else {\r\n            return _Result._Held_value;\r\n        }\r\n    }\r\n\r\n    template <class _Ty2>\r\n    void _Emplace_result(_Ty2&& _Val) {\r\n        // TRANSITION, incorrectly assigns _Result when _Ty is default constructible\r\n        if constexpr (is_default_constructible_v<_Ty>) {\r\n            _Result = _STD forward<_Ty2>(_Val);\r\n        } else {\r\n            ::new (static_cast<void*>(_STD addressof(_Result._Held_value))) _Ty(_STD forward<_Ty2>(_Val));\r\n            _Has_stored_result = true;\r\n        }\r\n    }\r\n\r\n    void _Set_value(const _Ty& _Val, bool _At_thread_exit) { // store a result\r\n        unique_lock<mutex> _Lock(_Mtx);\r\n        _Set_value_raw(_Val, &_Lock, _At_thread_exit);\r\n    }\r\n\r\n    void _Set_value_raw(const _Ty& _Val, unique_lock<mutex>* _Lock, bool _At_thread_exit) {\r\n        // store a result while inside a locked block\r\n        if (_Already_has_stored_result()) {\r\n            _Throw_future_error2(future_errc::promise_already_satisfied);\r\n        }\r\n\r\n        _Emplace_result(_Val);\r\n        _Do_notify(_Lock, _At_thread_exit);\r\n    }\r\n\r\n    void _Set_value(_Ty&& _Val, bool _At_thread_exit) { // store a result\r\n        unique_lock<mutex> _Lock(_Mtx);\r\n        _Set_value_raw(_STD forward<_Ty>(_Val), &_Lock, _At_thread_exit);\r\n    }\r\n\r\n    void _Set_value_raw(_Ty&& _Val, unique_lock<mutex>* _Lock, bool _At_thread_exit) {\r\n        // store a result while inside a locked block\r\n        if (_Already_has_stored_result()) {\r\n            _Throw_future_error2(future_errc::promise_already_satisfied);\r\n        }\r\n\r\n        _Emplace_result(_STD forward<_Ty>(_Val));\r\n        _Do_notify(_Lock, _At_thread_exit);\r\n    }\r\n\r\n    void _Set_exception(exception_ptr _Exc, bool _At_thread_exit) { // store a result\r\n        unique_lock<mutex> _Lock(_Mtx);\r\n        _Set_exception_raw(_Exc, &_Lock, _At_thread_exit);\r\n    }\r\n\r\n    void _Set_exception_raw(exception_ptr _Exc, unique_lock<mutex>* _Lock, bool _At_thread_exit) {\r\n        // store a result while inside a locked block\r\n        if (_Already_has_stored_result()) {\r\n            _Throw_future_error2(future_errc::promise_already_satisfied);\r\n        }\r\n\r\n        _STL_ASSERT(_Exc != nullptr, \"promise<T>::set_exception/set_exception_at_thread_exit called with a null \"\r\n                                     \"std::exception_ptr, which is invalid per N4950 [futures.promise]/20\");\r\n        _Exception = _Exc;\r\n        _Do_notify(_Lock, _At_thread_exit);\r\n    }\r\n\r\n    bool _Is_ready() const noexcept {\r\n        return _Ready != 0;\r\n    }\r\n\r\n    bool _Already_has_stored_result() const noexcept { // Has a result or an exception\r\n        if constexpr (is_default_constructible_v<_Ty>) {\r\n            return _Has_stored_result;\r\n        } else {\r\n            return _Has_stored_result || _Exception;\r\n        }\r\n    }\r\n\r\n    bool _Already_retrieved() const noexcept {\r\n        return _Retrieved;\r\n    }\r\n\r\n    void _Abandon() { // abandon shared state\r\n        unique_lock<mutex> _Lock(_Mtx);\r\n        if (!_Already_has_stored_result()) { // queue exception\r\n            future_error _Fut(_STD make_error_code(future_errc::broken_promise));\r\n            _Set_exception_raw(_STD make_exception_ptr(_Fut), &_Lock, false);\r\n        }\r\n    }\r\n\r\n    _Mydel* _Get_deleter() const noexcept { // get deleter for cloning\r\n        return _Deleter;\r\n    }\r\n\r\nprotected:\r\n    void _Maybe_run_deferred_function(unique_lock<mutex>& _Lock) { // run a deferred function if not already done\r\n        if (!_Running) { // run the function\r\n            _Running = true;\r\n            _Run_deferred_function(_Lock);\r\n        }\r\n    }\r\n\r\npublic:\r\n    conditional_t<is_default_constructible_v<_Ty>, _Ty, _Result_holder<_Ty>> _Result;\r\n    exception_ptr _Exception;\r\n    mutex _Mtx;\r\n    condition_variable _Cond;\r\n    bool _Retrieved;\r\n    int _Ready;\r\n    bool _Ready_at_thread_exit; // TRANSITION, ABI\r\n    bool _Has_stored_result;\r\n    bool _Running;\r\n\r\nprivate:\r\n    virtual bool _Has_deferred_function() const noexcept { // overridden by _Deferred_async_state\r\n        return false;\r\n    }\r\n\r\n    virtual void _Run_deferred_function(unique_lock<mutex>&) {} // do nothing\r\n\r\n    virtual void _Do_notify(unique_lock<mutex>* _Lock, bool _At_thread_exit) { // notify waiting threads\r\n        // TRANSITION, ABI: This is virtual, but never overridden.\r\n        if constexpr (is_default_constructible_v<_Ty>) {\r\n            _Has_stored_result = true;\r\n        }\r\n\r\n        if (_At_thread_exit) { // notify at thread exit\r\n            _Cond._Register(*_Lock, &_Ready);\r\n        } else { // notify immediately\r\n            _Ready = true;\r\n            _Cond.notify_all();\r\n        }\r\n    }\r\n\r\n    void _Delete_this() noexcept { // delete this object\r\n        if (_Deleter) {\r\n            _Deleter->_Delete(this);\r\n        } else {\r\n            delete this;\r\n        }\r\n    }\r\n\r\n    _Mydel* _Deleter;\r\n\r\npublic:\r\n    _Associated_state(const _Associated_state&)            = delete;\r\n    _Associated_state& operator=(const _Associated_state&) = delete;\r\n};\r\n\r\ntemplate <class _Ty, class _Derived, class _Alloc>\r\nvoid _State_deleter<_Ty, _Derived, _Alloc>::_Delete(_Associated_state<_Ty>* _State) noexcept {\r\n    // delete _State and this using stored allocator\r\n    using _State_allocator = _Rebind_alloc_t<_Alloc, _Derived>;\r\n    _State_allocator _St_alloc(_My_alloc);\r\n\r\n    using _Deleter_allocator = _Rebind_alloc_t<_Alloc, _State_deleter>;\r\n    _Deleter_allocator _Del_alloc(_My_alloc);\r\n\r\n    _Derived* _Ptr = static_cast<_Derived*>(_State);\r\n\r\n    _STD _Delete_plain_internal(_St_alloc, _Ptr);\r\n    _STD _Delete_plain_internal(_Del_alloc, this);\r\n}\r\n\r\ntemplate <class _Fret>\r\nstruct _P_arg_type { // type for functions returning T\r\n    using type = _Fret;\r\n};\r\n\r\ntemplate <class _Fret>\r\nstruct _P_arg_type<_Fret&> { // type for functions returning reference to T\r\n    using type = _Fret*;\r\n};\r\n\r\ntemplate <>\r\nstruct _P_arg_type<void> { // type for functions returning void\r\n    using type = int;\r\n};\r\n\r\ntemplate <class _Ret>\r\nusing _P_arg_type_t = typename _P_arg_type<_Ret>::type;\r\n\r\ntemplate <class>\r\nclass _Packaged_state;\r\n\r\n// class for managing associated asynchronous state for packaged_task\r\ntemplate <class _Ret, class... _ArgTypes>\r\nclass _Packaged_state<_Ret(_ArgTypes...)> : public _Associated_state<_P_arg_type_t<_Ret>> {\r\npublic:\r\n    using _Mybase        = _Associated_state<_P_arg_type_t<_Ret>>;\r\n    using _Mydel         = typename _Mybase::_Mydel;\r\n    using _Function_type = function<_Ret(_ArgTypes...)>; // TRANSITION, ABI, should not use std::function\r\n\r\n    explicit _Packaged_state(const _Function_type& _Fnarg) : _Fn(_Fnarg) {}\r\n\r\n    explicit _Packaged_state(_Function_type&& _Fnarg) noexcept : _Fn(_STD move(_Fnarg)) {}\r\n\r\n    template <class _Fty2, enable_if_t<!is_same_v<_Remove_cvref_t<_Fty2>, _Function_type>, int> = 0>\r\n    explicit _Packaged_state(_Fty2&& _Fnarg) : _Fn(_Secret_copyability_ignoring_tag{}, _STD forward<_Fty2>(_Fnarg)) {}\r\n\r\n    template <class _Alloc>\r\n    _Packaged_state(_Function_type&& _Fnarg, const _Alloc& _Al, _Mydel* _Dp)\r\n        : _Mybase(_Dp), _Fn(_Secret_copyability_ignoring_tag{}, allocator_arg, _Al, _STD move(_Fnarg)) {}\r\n\r\n    template <class _Fty2, class _Alloc, enable_if_t<!is_same_v<_Remove_cvref_t<_Fty2>, _Function_type>, int> = 0>\r\n    _Packaged_state(_Fty2&& _Fnarg, const _Alloc& _Al, _Mydel* _Dp)\r\n        : _Mybase(_Dp), _Fn(_Secret_copyability_ignoring_tag{}, allocator_arg, _Al, _STD forward<_Fty2>(_Fnarg)) {}\r\n\r\n    void _Call_deferred(_ArgTypes... _Args) { // set deferred call\r\n        _TRY_BEGIN\r\n        // call function object and catch exceptions\r\n        if constexpr (is_same_v<_Ret, void>) {\r\n            _Fn(_STD forward<_ArgTypes>(_Args)...);\r\n            this->_Set_value(1, true);\r\n        } else if constexpr (is_lvalue_reference_v<_Ret>) {\r\n            this->_Set_value(_STD addressof(_Fn(_STD forward<_ArgTypes>(_Args)...)), true);\r\n        } else {\r\n            this->_Set_value(_Fn(_STD forward<_ArgTypes>(_Args)...), true);\r\n        }\r\n        _CATCH_ALL\r\n        // function object threw exception; record result\r\n        this->_Set_exception(_STD current_exception(), true);\r\n        _CATCH_END\r\n    }\r\n\r\n    void _Call_immediate(_ArgTypes... _Args) { // call function object\r\n        _TRY_BEGIN\r\n        // call function object and catch exceptions\r\n        if constexpr (is_same_v<_Ret, void>) {\r\n            _Fn(_STD forward<_ArgTypes>(_Args)...);\r\n            this->_Set_value(1, false);\r\n        } else if constexpr (is_lvalue_reference_v<_Ret>) {\r\n            this->_Set_value(_STD addressof(_Fn(_STD forward<_ArgTypes>(_Args)...)), false);\r\n        } else {\r\n            this->_Set_value(_Fn(_STD forward<_ArgTypes>(_Args)...), false);\r\n        }\r\n        _CATCH_ALL\r\n        // function object threw exception; record result\r\n        this->_Set_exception(_STD current_exception(), false);\r\n        _CATCH_END\r\n    }\r\n\r\n    _Function_type&& _Get_fn() && noexcept {\r\n        return _STD move(_Fn);\r\n    }\r\n\r\nprivate:\r\n    _Function_type _Fn;\r\n};\r\n\r\ntemplate <class _Ty, class _Alloc>\r\n_Associated_state<_Ty>* _Make_associated_state(const _Alloc& _Al) {\r\n    // construct an _Associated_state object with an allocator\r\n    using _Delty   = _State_deleter<_Ty, _Associated_state<_Ty>, _Alloc>;\r\n    using _Aldelty = _Rebind_alloc_t<_Alloc, _Delty>;\r\n    using _Alstate = _Rebind_alloc_t<_Alloc, _Associated_state<_Ty>>;\r\n\r\n    _Aldelty _Del_alloc(_Al);\r\n    _Alstate _State_alloc(_Al);\r\n    auto _Del = _STD _Make_unique_alloc(_Del_alloc, _Al);\r\n    auto _Res = _STD _Make_unique_alloc(_State_alloc, _STD _Unfancy(_Del.get()));\r\n    (void) _Del.release(); // ownership of _Del.get() now transferred to _Res\r\n    return _STD _Unfancy(_Res.release()); // ownership transferred to caller\r\n}\r\n\r\ntemplate <class _Pack_state, class _Fty2, class _Alloc>\r\n_Pack_state* _Make_packaged_state(_Fty2&& _Fnarg, const _Alloc& _Al) {\r\n    // construct a _Packaged_state object with an allocator from an rvalue function object\r\n#ifdef _CPPRTTI // TRANSITION, ABI, should not rely on RTTI\r\n    using _Delty = _State_deleter_v2<typename _Pack_state::_Mybase::_State_type, _Pack_state, _Alloc>;\r\n#else // ^^^ defined(_CPPRTTI) / !defined(_CPPRTTI) vvv\r\n    using _Delty = _State_deleter<typename _Pack_state::_Mybase::_State_type, _Pack_state, _Alloc>;\r\n#endif // ^^^ !defined(_CPPRTTI) ^^^\r\n    using _Aldelty = _Rebind_alloc_t<_Alloc, _Delty>;\r\n    using _Alstate = _Rebind_alloc_t<_Alloc, _Pack_state>;\r\n\r\n    _Aldelty _Del_alloc(_Al);\r\n    _Alstate _State_alloc(_Al);\r\n    auto _Del = _STD _Make_unique_alloc(_Del_alloc, _Al);\r\n    auto _Res = _STD _Make_unique_alloc(_State_alloc, _STD forward<_Fty2>(_Fnarg), _Al, _STD _Unfancy(_Del.get()));\r\n    (void) _Del.release(); // ownership of _Del.get() now transferred to _Res\r\n    return _STD _Unfancy(_Res.release()); // ownership transferred to caller\r\n}\r\n\r\ntemplate <class _Ty, class _Derived, class _Alloc>\r\nvoid _State_deleter_v2<_Ty, _Derived, _Alloc>::_Delete(_Associated_state<_Ty>* _State) noexcept {\r\n    // delete _State and this using stored allocator\r\n    using _State_allocator = _Rebind_alloc_t<_Alloc, _Derived>;\r\n    _State_allocator _St_alloc(_My_alloc);\r\n\r\n    using _Deleter_allocator = _Rebind_alloc_t<_Alloc, _State_deleter_v2>;\r\n    _Deleter_allocator _Del_alloc(_My_alloc);\r\n\r\n    _Derived* _Ptr = static_cast<_Derived*>(_State);\r\n\r\n    _STD _Delete_plain_internal(_St_alloc, _Ptr);\r\n    _STD _Delete_plain_internal(_Del_alloc, this);\r\n}\r\n\r\ntemplate <class _Ty, class _Derived, class _Alloc>\r\n_Associated_state<_Ty>* _State_deleter_v2<_Ty, _Derived, _Alloc>::_Move_clone(_Associated_state<_Ty>&& _Src) {\r\n    return _STD _Make_packaged_state<_Derived>(static_cast<_Derived&&>(_Src)._Get_fn(), _My_alloc);\r\n}\r\n\r\ntemplate <class _Rx>\r\nclass _Deferred_async_state : public _Packaged_state<_Rx()> {\r\n    // class for managing associated synchronous state for deferred execution from async\r\npublic:\r\n    template <class _Fty2>\r\n    _Deferred_async_state(const _Fty2& _Fnarg) : _Packaged_state<_Rx()>(_Fnarg) {}\r\n\r\n    template <class _Fty2>\r\n    _Deferred_async_state(_Fty2&& _Fnarg) : _Packaged_state<_Rx()>(_STD forward<_Fty2>(_Fnarg)) {}\r\n\r\nprivate:\r\n    bool _Has_deferred_function() const noexcept override {\r\n        // this function is considered to be deferred until it's invoked\r\n        return !this->_Running;\r\n    }\r\n\r\n    void _Run_deferred_function(unique_lock<mutex>& _Lock) override { // run the deferred function\r\n        _Lock.unlock();\r\n        _Packaged_state<_Rx()>::_Call_immediate();\r\n        _Lock.lock();\r\n    }\r\n};\r\n\r\ntemplate <class _Rx>\r\nclass _Task_async_state : public _Packaged_state<_Rx()> {\r\n    // class for managing associated synchronous state for asynchronous execution from async\r\npublic:\r\n    using _Mybase     = _Packaged_state<_Rx()>;\r\n    using _State_type = typename _Mybase::_State_type;\r\n\r\n    template <class _Fty2>\r\n    _Task_async_state(_Fty2&& _Fnarg) : _Mybase(_STD forward<_Fty2>(_Fnarg)) {\r\n        _Task = ::Concurrency::create_task([this]() { // do it now\r\n            this->_Call_immediate();\r\n        });\r\n\r\n        this->_Running = true;\r\n    }\r\n\r\n    ~_Task_async_state() noexcept override {\r\n        _Wait();\r\n    }\r\n\r\n    void _Wait() override { // wait for completion\r\n        _Task.wait();\r\n    }\r\n\r\n    _State_type& _Get_value(bool _Get_only_once) override {\r\n        // return the stored result or throw stored exception\r\n        _Task.wait();\r\n        return _Mybase::_Get_value(_Get_only_once);\r\n    }\r\n\r\nprivate:\r\n    ::Concurrency::task<void> _Task;\r\n};\r\n\r\ntemplate <class _Ty>\r\nclass _State_manager {\r\n    // class for managing possibly non-existent associated asynchronous state object\r\npublic:\r\n    _State_manager() = default; // construct with no associated asynchronous state object\r\n\r\n    _State_manager(_Associated_state<_Ty>* _New_state, bool _Get_once) noexcept\r\n        : _Assoc_state(_New_state), _Get_only_once(_Get_once) {} // construct with _New_state\r\n\r\n    _State_manager(const _State_manager& _Other, bool _Get_once = false) noexcept\r\n        : _Assoc_state(_Other._Assoc_state), _Get_only_once(_Get_once) {\r\n        if (_Assoc_state) { // do the copy\r\n            _Assoc_state->_Retain();\r\n        }\r\n    }\r\n\r\n    _State_manager(_State_manager&& _Other, bool _Get_once = false) noexcept\r\n        : _Assoc_state(_STD exchange(_Other._Assoc_state, nullptr)), _Get_only_once(_Get_once) {}\r\n\r\n    ~_State_manager() noexcept {\r\n        if (_Assoc_state) {\r\n            _Assoc_state->_Release();\r\n        }\r\n    }\r\n\r\n    _State_manager& operator=(const _State_manager& _Other) noexcept {\r\n        // copy stored associated asynchronous state object from _Other\r\n        if (_Other._Assoc_state) {\r\n            _Other._Assoc_state->_Retain();\r\n        }\r\n\r\n        if (_Assoc_state) {\r\n            _Assoc_state->_Release();\r\n        }\r\n\r\n        _Assoc_state   = _Other._Assoc_state;\r\n        _Get_only_once = _Other._Get_only_once;\r\n        return *this;\r\n    }\r\n\r\n    _State_manager& operator=(_State_manager&& _Other) noexcept {\r\n        // move stored associated asynchronous state object from _Other\r\n        if (this != _STD addressof(_Other)) {\r\n            if (_Assoc_state) {\r\n                _Assoc_state->_Release();\r\n            }\r\n\r\n            _Assoc_state   = _STD exchange(_Other._Assoc_state, nullptr);\r\n            _Get_only_once = _Other._Get_only_once;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD bool valid() const noexcept {\r\n        return _Assoc_state && !(_Get_only_once && _Assoc_state->_Already_retrieved());\r\n    }\r\n\r\n    void wait() const { // wait for signal\r\n        if (!valid()) {\r\n            _Throw_future_error2(future_errc::no_state);\r\n        }\r\n\r\n        _Assoc_state->_Wait();\r\n    }\r\n\r\n    template <class _Rep, class _Per>\r\n    future_status wait_for(const chrono::duration<_Rep, _Per>& _Rel_time) const { // wait for duration\r\n        if (!valid()) {\r\n            _Throw_future_error2(future_errc::no_state);\r\n        }\r\n\r\n        return _Assoc_state->_Wait_for(_Rel_time);\r\n    }\r\n\r\n    template <class _Clock, class _Dur>\r\n    future_status wait_until(const chrono::time_point<_Clock, _Dur>& _Abs_time) const { // wait until time point\r\n        static_assert(chrono::_Is_clock_v<_Clock>, \"Clock type required\");\r\n        if (!valid()) {\r\n            _Throw_future_error2(future_errc::no_state);\r\n        }\r\n\r\n        return _Assoc_state->_Wait_until(_Abs_time);\r\n    }\r\n\r\n    _Ty& _Get_value() const {\r\n        if (!valid()) {\r\n            _Throw_future_error2(future_errc::no_state);\r\n        }\r\n\r\n        return _Assoc_state->_Get_value(_Get_only_once);\r\n    }\r\n\r\n    void _Set_value(const _Ty& _Val, bool _Defer) { // store a result\r\n        if (!valid()) {\r\n            _Throw_future_error2(future_errc::no_state);\r\n        }\r\n\r\n        _Assoc_state->_Set_value(_Val, _Defer);\r\n    }\r\n\r\n    void _Set_value(_Ty&& _Val, bool _Defer) { // store a result\r\n        if (!valid()) {\r\n            _Throw_future_error2(future_errc::no_state);\r\n        }\r\n\r\n        _Assoc_state->_Set_value(_STD forward<_Ty>(_Val), _Defer);\r\n    }\r\n\r\n    void _Abandon() { // abandon shared state\r\n        if (_Assoc_state) {\r\n            _Assoc_state->_Abandon();\r\n        }\r\n    }\r\n\r\n    void _Set_exception(exception_ptr _Exc, bool _Defer) { // store a result\r\n        if (!valid()) {\r\n            _Throw_future_error2(future_errc::no_state);\r\n        }\r\n\r\n        _Assoc_state->_Set_exception(_Exc, _Defer);\r\n    }\r\n\r\n    void _Swap(_State_manager& _Other) noexcept { // exchange with _Other\r\n        _STD swap(_Assoc_state, _Other._Assoc_state);\r\n    }\r\n\r\n    _Associated_state<_Ty>* _Ptr() const noexcept {\r\n        return _Assoc_state;\r\n    }\r\n\r\n    bool _Is_ready() const noexcept {\r\n        return _Assoc_state && _Assoc_state->_Is_ready();\r\n    }\r\n\r\nprivate:\r\n    _Associated_state<_Ty>* _Assoc_state = nullptr;\r\n    bool _Get_only_once                  = false;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass shared_future;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass future : public _State_manager<_Ty> {\r\n    // class that defines a non-copyable asynchronous return object that holds a value\r\nprivate:\r\n    using _Mybase = _State_manager<_Ty>;\r\n\r\npublic:\r\n    static_assert(!is_array_v<_Ty> && is_object_v<_Ty> && is_destructible_v<_Ty>,\r\n        \"T in future<T> must meet the Cpp17Destructible requirements (N4950 [futures.unique.future]/4).\");\r\n\r\n    future() = default;\r\n\r\n    future(future&& _Other) noexcept : _Mybase(_STD move(_Other), true) {}\r\n\r\n    future& operator=(future&&) = default;\r\n\r\n    future(_From_raw_state_tag, const _Mybase& _State) noexcept : _Mybase(_State, true) {}\r\n\r\n    _Ty get() {\r\n        // block until ready then return the stored result or throw the stored exception\r\n        future _Local{_STD move(*this)};\r\n        return _STD move(_Local._Get_value());\r\n    }\r\n\r\n    _NODISCARD shared_future<_Ty> share() noexcept {\r\n        return shared_future<_Ty>(_STD move(*this));\r\n    }\r\n\r\n    future(const future&)            = delete;\r\n    future& operator=(const future&) = delete;\r\n};\r\n\r\ntemplate <class _Ty>\r\nclass future<_Ty&> : public _State_manager<_Ty*> {\r\n    // class that defines a non-copyable asynchronous return object that holds a reference\r\nprivate:\r\n    using _Mybase = _State_manager<_Ty*>;\r\n\r\npublic:\r\n    future() = default;\r\n\r\n    future(future&& _Other) noexcept : _Mybase(_STD move(_Other), true) {}\r\n\r\n    future& operator=(future&&) = default;\r\n\r\n    future(_From_raw_state_tag, const _Mybase& _State) noexcept : _Mybase(_State, true) {}\r\n\r\n    _Ty& get() {\r\n        // block until ready then return the stored result or throw the stored exception\r\n        future _Local{_STD move(*this)};\r\n        return *_Local._Get_value();\r\n    }\r\n\r\n    _NODISCARD shared_future<_Ty&> share() noexcept {\r\n        return shared_future<_Ty&>(_STD move(*this));\r\n    }\r\n\r\n    future(const future&)            = delete;\r\n    future& operator=(const future&) = delete;\r\n};\r\n\r\ntemplate <>\r\nclass future<void> : public _State_manager<int> {\r\n    // class that defines a non-copyable asynchronous return object that does not hold a value\r\nprivate:\r\n    using _Mybase = _State_manager<int>;\r\n\r\npublic:\r\n    future() = default;\r\n\r\n    future(future&& _Other) noexcept : _Mybase(_STD move(_Other), true) {}\r\n\r\n    future& operator=(future&&) = default;\r\n\r\n    future(_From_raw_state_tag, const _Mybase& _State) noexcept : _Mybase(_State, true) {}\r\n\r\n    void get() {\r\n        // block until ready then return or throw the stored exception\r\n        future _Local{_STD move(*this)};\r\n        _Local._Get_value();\r\n    }\r\n\r\n    _NODISCARD shared_future<void> share() noexcept;\r\n\r\n    future(const future&)            = delete;\r\n    future& operator=(const future&) = delete;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass shared_future : public _State_manager<_Ty> {\r\n    // class that defines a copyable asynchronous return object that holds a value\r\nprivate:\r\n    using _Mybase = _State_manager<_Ty>;\r\n\r\npublic:\r\n    static_assert(!is_array_v<_Ty> && is_object_v<_Ty> && is_destructible_v<_Ty>,\r\n        \"T in shared_future<T> must meet the Cpp17Destructible requirements (N4950 [futures.shared.future]/4).\");\r\n\r\n    shared_future() = default;\r\n\r\n    shared_future(const shared_future& _Other) noexcept : _Mybase(_Other) {}\r\n\r\n    shared_future& operator=(const shared_future&) = default;\r\n\r\n    shared_future(future<_Ty>&& _Other) noexcept : _Mybase(static_cast<_Mybase&&>(_Other)) {}\r\n\r\n    shared_future(shared_future&& _Other) noexcept : _Mybase(_STD move(_Other)) {}\r\n\r\n    shared_future& operator=(shared_future&&) = default;\r\n\r\n    const _Ty& get() const {\r\n        // block until ready then return the stored result or throw the stored exception\r\n        return this->_Get_value();\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nclass shared_future<_Ty&> : public _State_manager<_Ty*> {\r\n    // class that defines a copyable asynchronous return object that holds a reference\r\nprivate:\r\n    using _Mybase = _State_manager<_Ty*>;\r\n\r\npublic:\r\n    shared_future() = default;\r\n\r\n    shared_future(const shared_future& _Other) noexcept : _Mybase(_Other) {}\r\n\r\n    shared_future& operator=(const shared_future&) = default;\r\n\r\n    shared_future(future<_Ty&>&& _Other) noexcept : _Mybase(static_cast<_Mybase&&>(_Other)) {}\r\n\r\n    shared_future(shared_future&& _Other) noexcept : _Mybase(_STD move(_Other)) {}\r\n\r\n    shared_future& operator=(shared_future&&) = default;\r\n\r\n    _Ty& get() const {\r\n        // block until ready then return the stored result or throw the stored exception\r\n        return *this->_Get_value();\r\n    }\r\n};\r\n\r\ntemplate <>\r\nclass shared_future<void> : public _State_manager<int> {\r\n    // class that defines a copyable asynchronous return object that does not hold a value\r\nprivate:\r\n    using _Mybase = _State_manager<int>;\r\n\r\npublic:\r\n    shared_future() noexcept {}\r\n\r\n    shared_future(const shared_future& _Other) noexcept : _Mybase(_Other) {}\r\n\r\n    shared_future& operator=(const shared_future&) = default;\r\n\r\n    shared_future(shared_future&& _Other) noexcept : _Mybase(_STD move(_Other)) {}\r\n\r\n    shared_future(future<void>&& _Other) noexcept : _Mybase(static_cast<_Mybase&&>(_Other)) {}\r\n\r\n    shared_future& operator=(shared_future&&) = default;\r\n\r\n    void get() const { // block until ready then return or throw the stored exception\r\n        this->_Get_value();\r\n    }\r\n};\r\n\r\n_NODISCARD inline shared_future<void> future<void>::share() noexcept {\r\n    return shared_future<void>(_STD move(*this));\r\n}\r\n\r\ntemplate <class _Ty>\r\nclass _Promise {\r\npublic:\r\n    _Promise(_Associated_state<_Ty>* _State_ptr) noexcept : _State(_State_ptr, false), _Future_retrieved(false) {}\r\n\r\n    _Promise(_Promise&&) = default;\r\n\r\n    _Promise& operator=(_Promise&&) = default;\r\n\r\n    void _Swap(_Promise& _Other) noexcept {\r\n        _State._Swap(_Other._State);\r\n        _STD swap(_Future_retrieved, _Other._Future_retrieved);\r\n    }\r\n\r\n    const _State_manager<_Ty>& _Get_state() const noexcept {\r\n        return _State;\r\n    }\r\n    _State_manager<_Ty>& _Get_state() noexcept {\r\n        return _State;\r\n    }\r\n\r\n    _State_manager<_Ty>& _Get_state_for_set() {\r\n        if (!_State.valid()) {\r\n            _Throw_future_error2(future_errc::no_state);\r\n        }\r\n\r\n        return _State;\r\n    }\r\n\r\n    _State_manager<_Ty>& _Get_state_for_future() {\r\n        if (!_State.valid()) {\r\n            _Throw_future_error2(future_errc::no_state);\r\n        }\r\n\r\n        if (_Future_retrieved) {\r\n            _Throw_future_error2(future_errc::future_already_retrieved);\r\n        }\r\n\r\n        _Future_retrieved = true;\r\n        return _State;\r\n    }\r\n\r\n    bool _Is_valid() const noexcept {\r\n        return _State.valid();\r\n    }\r\n\r\n    bool _Is_ready() const noexcept {\r\n        return _State._Is_ready();\r\n    }\r\n\r\n    _Promise(const _Promise&)            = delete;\r\n    _Promise& operator=(const _Promise&) = delete;\r\n\r\nprivate:\r\n    _State_manager<_Ty> _State;\r\n    bool _Future_retrieved;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass promise { // class that defines an asynchronous provider that holds a value\r\npublic:\r\n    static_assert(!is_array_v<_Ty> && is_object_v<_Ty> && is_destructible_v<_Ty>,\r\n        \"T in promise<T> must meet the Cpp17Destructible requirements (N4950 [futures.promise]/1).\");\r\n\r\n    promise() : _MyPromise(new _Associated_state<_Ty>) {}\r\n\r\n    template <class _Alloc>\r\n    promise(allocator_arg_t, const _Alloc& _Al) : _MyPromise(_Make_associated_state<_Ty>(_Al)) {}\r\n\r\n    promise(promise&&) = default;\r\n\r\n    promise& operator=(promise&& _Other) noexcept {\r\n        promise(_STD move(_Other)).swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    ~promise() noexcept {\r\n        if (_MyPromise._Is_valid() && !_MyPromise._Is_ready()) {\r\n            // exception if destroyed before function object returns\r\n            future_error _Fut(_STD make_error_code(future_errc::broken_promise));\r\n            _MyPromise._Get_state()._Set_exception(_STD make_exception_ptr(_Fut), false);\r\n        }\r\n    }\r\n\r\n    void swap(promise& _Other) noexcept {\r\n        _MyPromise._Swap(_Other._MyPromise);\r\n    }\r\n\r\n    _NODISCARD_GET_FUTURE future<_Ty> get_future() {\r\n        return future<_Ty>(_From_raw_state_tag{}, _MyPromise._Get_state_for_future());\r\n    }\r\n\r\n    void set_value(const _Ty& _Val) {\r\n        _MyPromise._Get_state_for_set()._Set_value(_Val, false);\r\n    }\r\n\r\n    void set_value_at_thread_exit(const _Ty& _Val) {\r\n        _MyPromise._Get_state_for_set()._Set_value(_Val, true);\r\n    }\r\n\r\n    void set_value(_Ty&& _Val) {\r\n        _MyPromise._Get_state_for_set()._Set_value(_STD forward<_Ty>(_Val), false);\r\n    }\r\n\r\n    void set_value_at_thread_exit(_Ty&& _Val) {\r\n        _MyPromise._Get_state_for_set()._Set_value(_STD forward<_Ty>(_Val), true);\r\n    }\r\n\r\n    void set_exception(exception_ptr _Exc) {\r\n        _MyPromise._Get_state_for_set()._Set_exception(_Exc, false);\r\n    }\r\n\r\n    void set_exception_at_thread_exit(exception_ptr _Exc) {\r\n        _MyPromise._Get_state_for_set()._Set_exception(_Exc, true);\r\n    }\r\n\r\n    promise(const promise&)            = delete;\r\n    promise& operator=(const promise&) = delete;\r\n\r\nprivate:\r\n    _Promise<_Ty> _MyPromise;\r\n};\r\n\r\ntemplate <class _Ty>\r\nclass promise<_Ty&> { // class that defines an asynchronous provider that holds a reference\r\npublic:\r\n    promise() : _MyPromise(new _Associated_state<_Ty*>) {}\r\n\r\n    template <class _Alloc>\r\n    promise(allocator_arg_t, const _Alloc& _Al) : _MyPromise(_Make_associated_state<_Ty*>(_Al)) {}\r\n\r\n    promise(promise&&) = default;\r\n\r\n    promise& operator=(promise&& _Other) noexcept {\r\n        promise(_STD move(_Other)).swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    ~promise() noexcept {\r\n        if (_MyPromise._Is_valid() && !_MyPromise._Is_ready()) {\r\n            // exception if destroyed before function object returns\r\n            future_error _Fut(_STD make_error_code(future_errc::broken_promise));\r\n            _MyPromise._Get_state()._Set_exception(_STD make_exception_ptr(_Fut), false);\r\n        }\r\n    }\r\n\r\n    void swap(promise& _Other) noexcept {\r\n        _MyPromise._Swap(_Other._MyPromise);\r\n    }\r\n\r\n    _NODISCARD_GET_FUTURE future<_Ty&> get_future() {\r\n        return future<_Ty&>(_From_raw_state_tag{}, _MyPromise._Get_state_for_future());\r\n    }\r\n\r\n    void set_value(_Ty& _Val) {\r\n        _MyPromise._Get_state_for_set()._Set_value(_STD addressof(_Val), false);\r\n    }\r\n\r\n    void set_value_at_thread_exit(_Ty& _Val) {\r\n        _MyPromise._Get_state_for_set()._Set_value(_STD addressof(_Val), true);\r\n    }\r\n\r\n    void set_exception(exception_ptr _Exc) {\r\n        _MyPromise._Get_state_for_set()._Set_exception(_Exc, false);\r\n    }\r\n\r\n    void set_exception_at_thread_exit(exception_ptr _Exc) {\r\n        _MyPromise._Get_state_for_set()._Set_exception(_Exc, true);\r\n    }\r\n\r\n    promise(const promise&)            = delete;\r\n    promise& operator=(const promise&) = delete;\r\n\r\nprivate:\r\n    _Promise<_Ty*> _MyPromise;\r\n};\r\n\r\ntemplate <>\r\nclass promise<void> { // defines an asynchronous provider that does not hold a value\r\npublic:\r\n    promise() : _MyPromise(new _Associated_state<int>) {}\r\n\r\n    template <class _Alloc>\r\n    promise(allocator_arg_t, const _Alloc& _Al) : _MyPromise(_Make_associated_state<int>(_Al)) {}\r\n\r\n    promise(promise&&) = default;\r\n\r\n    promise& operator=(promise&& _Other) noexcept {\r\n        promise(_STD move(_Other)).swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    ~promise() noexcept {\r\n        if (_MyPromise._Is_valid() && !_MyPromise._Is_ready()) {\r\n            // exception if destroyed before function object returns\r\n            future_error _Fut(_STD make_error_code(future_errc::broken_promise));\r\n            _MyPromise._Get_state()._Set_exception(_STD make_exception_ptr(_Fut), false);\r\n        }\r\n    }\r\n\r\n    void swap(promise& _Other) noexcept {\r\n        _MyPromise._Swap(_Other._MyPromise);\r\n    }\r\n\r\n    _NODISCARD_GET_FUTURE future<void> get_future() {\r\n        return future<void>(_From_raw_state_tag{}, _MyPromise._Get_state_for_future());\r\n    }\r\n\r\n    void set_value() {\r\n        _MyPromise._Get_state_for_set()._Set_value(1, false);\r\n    }\r\n\r\n    void set_value_at_thread_exit() {\r\n        _MyPromise._Get_state_for_set()._Set_value(1, true);\r\n    }\r\n\r\n    void set_exception(exception_ptr _Exc) {\r\n        _MyPromise._Get_state_for_set()._Set_exception(_Exc, false);\r\n    }\r\n\r\n    void set_exception_at_thread_exit(exception_ptr _Exc) {\r\n        _MyPromise._Get_state_for_set()._Set_exception(_Exc, true);\r\n    }\r\n\r\n    promise(const promise&)            = delete;\r\n    promise& operator=(const promise&) = delete;\r\n\r\nprivate:\r\n    _Promise<int> _MyPromise;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid swap(promise<_Ty>& _Left, promise<_Ty>& _Right) noexcept {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class>\r\nclass packaged_task; // not defined\r\n\r\ntemplate <class _Ret, class... _ArgTypes>\r\nclass packaged_task<_Ret(_ArgTypes...)> {\r\n    // class that defines an asynchronous provider that returns the result of a call to a function object\r\nprivate:\r\n    using _Ptype              = _P_arg_type_t<_Ret>;\r\n    using _MyPromiseType      = _Promise<_Ptype>;\r\n    using _MyStateManagerType = _State_manager<_Ptype>;\r\n    using _MyStateType        = _Packaged_state<_Ret(_ArgTypes...)>;\r\n\r\npublic:\r\n    packaged_task() = default;\r\n\r\n    template <class _Fty2, enable_if_t<!is_same_v<_Remove_cvref_t<_Fty2>, packaged_task>, int> = 0>\r\n    explicit packaged_task(_Fty2&& _Fnarg) : _MyPromise(new _MyStateType(_STD forward<_Fty2>(_Fnarg))) {\r\n        static_assert(_Is_invocable_r<_Ret, decay_t<_Fty2>&, _ArgTypes...>::value,\r\n            \"The function object must be callable with _ArgTypes... and return _Ret (N5014 [futures.task.members]/4).\");\r\n    }\r\n\r\n    packaged_task(packaged_task&&) noexcept = default;\r\n\r\n    packaged_task& operator=(packaged_task&&) noexcept = default;\r\n\r\n    template <class _Fty2, class _Alloc, enable_if_t<!is_same_v<_Remove_cvref_t<_Fty2>, packaged_task>, int> = 0>\r\n    explicit packaged_task(allocator_arg_t, const _Alloc& _Al, _Fty2&& _Fnarg)\r\n        : _MyPromise(_STD _Make_packaged_state<_MyStateType>(_STD forward<_Fty2>(_Fnarg), _Al)) {\r\n        static_assert(_Is_invocable_r<_Ret, decay_t<_Fty2>&, _ArgTypes...>::value,\r\n            \"The function object must be callable with _ArgTypes... and return _Ret (N5014 [futures.task.members]/4).\");\r\n    }\r\n\r\n    ~packaged_task() noexcept {\r\n        _MyPromise._Get_state()._Abandon();\r\n    }\r\n\r\n    void swap(packaged_task& _Other) noexcept {\r\n        _STD swap(_MyPromise, _Other._MyPromise);\r\n    }\r\n\r\n    _NODISCARD bool valid() const noexcept {\r\n        return _MyPromise._Is_valid();\r\n    }\r\n\r\n    _NODISCARD_GET_FUTURE future<_Ret> get_future() {\r\n        return future<_Ret>(_From_raw_state_tag{}, _MyPromise._Get_state_for_future());\r\n    }\r\n\r\n    void operator()(_ArgTypes... _Args) {\r\n        if (_MyPromise._Is_ready()) {\r\n            _Throw_future_error2(future_errc::promise_already_satisfied);\r\n        }\r\n\r\n        _MyStateManagerType& _State = _MyPromise._Get_state_for_set();\r\n        _MyStateType* _Ptr          = static_cast<_MyStateType*>(_State._Ptr());\r\n        _Ptr->_Call_immediate(_STD forward<_ArgTypes>(_Args)...);\r\n    }\r\n\r\n    void make_ready_at_thread_exit(_ArgTypes... _Args) {\r\n        if (_MyPromise._Is_ready()) {\r\n            _Throw_future_error2(future_errc::promise_already_satisfied);\r\n        }\r\n\r\n        _MyStateManagerType& _State = _MyPromise._Get_state_for_set();\r\n        if (_State._Ptr()->_Already_has_stored_result()) {\r\n            _Throw_future_error2(future_errc::promise_already_satisfied);\r\n        }\r\n\r\n        _MyStateType* _Ptr = static_cast<_MyStateType*>(_State._Ptr());\r\n        _Ptr->_Call_deferred(_STD forward<_ArgTypes>(_Args)...);\r\n    }\r\n\r\n    void reset() { // reset to newly constructed state\r\n        _MyStateManagerType& _State_mgr = _MyPromise._Get_state_for_set();\r\n        _MyStateType& _MyState          = *static_cast<_MyStateType*>(_State_mgr._Ptr());\r\n\r\n        const auto _New_state_ptr = [&_MyState]() -> _Associated_state<_P_arg_type_t<_Ret>>* {\r\n#ifdef _CPPRTTI // TRANSITION, ABI, should not rely on RTTI\r\n            using _Clonable_deleter_t = _Clonable_deleter_base<_P_arg_type_t<_Ret>>;\r\n            if (const auto _Clonable_deleter = dynamic_cast<_Clonable_deleter_t*>(_MyState._Get_deleter())) {\r\n                return _Clonable_deleter->_Move_clone(_STD move(_MyState));\r\n            } else {\r\n                return new _MyStateType(_STD move(_MyState)._Get_fn());\r\n            }\r\n#else // ^^^ defined(_CPPRTTI) / !defined(_CPPRTTI) vvv\r\n            return new _MyStateType(_STD move(_MyState)._Get_fn());\r\n#endif // ^^^ !defined(_CPPRTTI) ^^^\r\n        }();\r\n        _MyPromiseType _New_promise{_New_state_ptr};\r\n        _MyPromise._Get_state()._Abandon();\r\n        _MyPromise._Swap(_New_promise);\r\n    }\r\n\r\n    packaged_task(const packaged_task&)            = delete;\r\n    packaged_task& operator=(const packaged_task&) = delete;\r\n\r\nprivate:\r\n    _MyPromiseType _MyPromise{nullptr};\r\n};\r\n\r\n#if _HAS_CXX17\r\n#define _PACKAGED_TASK_DEDUCTION_GUIDE(CALL_OPT, X1, X2, X3) \\\r\n    template <class _Ret, class... _Types>                   \\\r\n    packaged_task(_Ret(CALL_OPT*)(_Types...)) -> packaged_task<_Ret(_Types...)>; // intentionally discards CALL_OPT\r\n\r\n_NON_MEMBER_CALL(_PACKAGED_TASK_DEDUCTION_GUIDE, X1, X2, X3)\r\n#undef _PACKAGED_TASK_DEDUCTION_GUIDE\r\n\r\ntemplate <class _Fx>\r\npackaged_task(_Fx) -> packaged_task<typename _Deduce_signature<_Fx>::type>;\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid swap(packaged_task<_Ty>& _Left, packaged_task<_Ty>& _Right) noexcept {\r\n    _Left.swap(_Right);\r\n}\r\n\r\ntemplate <class... _Types, size_t... _Indices>\r\ndecltype(auto) _Invoke_stored_explicit(\r\n    tuple<_Types...>&& _Tuple, index_sequence<_Indices...>) { // invoke() a tuple with explicit parameter ordering\r\n    return _STD invoke(_STD get<_Indices>(_STD move(_Tuple))...);\r\n}\r\n\r\ntemplate <class... _Types>\r\ndecltype(auto) _Invoke_stored(tuple<_Types...>&& _Tuple) { // invoke() a tuple\r\n    return _Invoke_stored_explicit(_STD move(_Tuple), index_sequence_for<_Types...>{});\r\n}\r\n\r\ntemplate <class... _Types>\r\nclass _Fake_no_copy_callable_adapter {\r\n    // async() is built on packaged_task internals which incorrectly use\r\n    // std::function, which requires that things be copyable. We can't fix this in an\r\n    // update, so this adapter turns copies into _STL_REPORT_ERROR(). When VSO-153581 is\r\n    // fixed, remove this adapter.\r\nprivate:\r\n    using _Storaget = tuple<decay_t<_Types>...>;\r\n\r\npublic:\r\n    explicit _Fake_no_copy_callable_adapter(_Types&&... _Vals) : _Storage(_STD forward<_Types>(_Vals)...) {\r\n        // Initializes _Fake_no_copy_callable_adapter with a decayed callable object and arguments\r\n    }\r\n\r\n    [[noreturn]] _Fake_no_copy_callable_adapter(const _Fake_no_copy_callable_adapter& _Other)\r\n        : _Storage(_STD move(_Other._Storage)) {\r\n        _STL_REPORT_ERROR(\"this callable object should not be copied\"); // shouldn't be called\r\n    }\r\n\r\n    _Fake_no_copy_callable_adapter(_Fake_no_copy_callable_adapter&& _Other)          = default;\r\n    _Fake_no_copy_callable_adapter& operator=(const _Fake_no_copy_callable_adapter&) = delete;\r\n    _Fake_no_copy_callable_adapter& operator=(_Fake_no_copy_callable_adapter&&)      = delete;\r\n\r\n    decltype(auto) operator()() {\r\n        return _Invoke_stored(_STD move(_Storage));\r\n    }\r\n\r\nprivate:\r\n    mutable _Storaget _Storage;\r\n};\r\n\r\ntemplate <class _Ret, class _Fty>\r\n_Associated_state<_P_arg_type_t<_Ret>>* _Get_associated_state(launch _Psync, _Fty&& _Fnarg) {\r\n    // construct associated asynchronous state object for the launch type\r\n    switch (_Psync) { // select launch type\r\n    case launch::deferred:\r\n        return new _Deferred_async_state<_Ret>(_STD forward<_Fty>(_Fnarg));\r\n    case launch::async: // TRANSITION, ABI, should create a new thread here\r\n    default:\r\n        return new _Task_async_state<_Ret>(_STD forward<_Fty>(_Fnarg));\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Fty, class... _ArgTypes>\r\n_NODISCARD_ASYNC future<_Invoke_result_t<decay_t<_Fty>, decay_t<_ArgTypes>...>> async(\r\n    launch _Policy, _Fty&& _Fnarg, _ArgTypes&&... _Args) {\r\n    // manages a callable object launched with supplied policy\r\n    using _Ret   = _Invoke_result_t<decay_t<_Fty>, decay_t<_ArgTypes>...>;\r\n    using _Ptype = _P_arg_type_t<_Ret>;\r\n    _Promise<_Ptype> _Pr(\r\n        _Get_associated_state<_Ret>(_Policy, _Fake_no_copy_callable_adapter<_Fty, _ArgTypes...>(\r\n                                                 _STD forward<_Fty>(_Fnarg), _STD forward<_ArgTypes>(_Args)...)));\r\n\r\n    return future<_Ret>(_From_raw_state_tag{}, _Pr._Get_state_for_future());\r\n}\r\n\r\n_EXPORT_STD template <class _Fty, class... _ArgTypes>\r\n_NODISCARD_ASYNC future<_Invoke_result_t<decay_t<_Fty>, decay_t<_ArgTypes>...>> async(\r\n    _Fty&& _Fnarg, _ArgTypes&&... _Args) {\r\n    // manages a callable object launched with default policy\r\n    return _STD async(launch::async | launch::deferred, _STD forward<_Fty>(_Fnarg), _STD forward<_ArgTypes>(_Args)...);\r\n}\r\n\r\n#ifdef _RESUMABLE_FUNCTIONS_SUPPORTED\r\n// Experimental coroutine support for std::future. Subject to change/removal!\r\nnamespace experimental {\r\n    template <class _Ty, class... _ArgTypes>\r\n    struct coroutine_traits<future<_Ty>, _ArgTypes...> {\r\n        // defines resumable traits for functions returning future<_Ty>\r\n        struct promise_type {\r\n            promise<_Ty> _MyPromise;\r\n\r\n            future<_Ty> get_return_object() {\r\n                return _MyPromise.get_future();\r\n            }\r\n\r\n            suspend_never initial_suspend() const noexcept {\r\n                return {};\r\n            }\r\n\r\n            suspend_never final_suspend() const noexcept {\r\n                return {};\r\n            }\r\n\r\n            template <class _Ut>\r\n            void return_value(_Ut&& _Value) {\r\n                _MyPromise.set_value(_STD forward<_Ut>(_Value));\r\n            }\r\n\r\n            void unhandled_exception() {\r\n                _MyPromise.set_exception(_STD current_exception());\r\n            }\r\n        };\r\n    };\r\n\r\n    template <class... _ArgTypes>\r\n    struct coroutine_traits<future<void>, _ArgTypes...> {\r\n        // defines resumable traits for functions returning future<void>\r\n        struct promise_type {\r\n            promise<void> _MyPromise;\r\n\r\n            future<void> get_return_object() {\r\n                return _MyPromise.get_future();\r\n            }\r\n\r\n            suspend_never initial_suspend() const noexcept {\r\n                return {};\r\n            }\r\n\r\n            suspend_never final_suspend() const noexcept {\r\n                return {};\r\n            }\r\n\r\n            void return_void() {\r\n                _MyPromise.set_value();\r\n            }\r\n\r\n            void unhandled_exception() {\r\n                _MyPromise.set_exception(_STD current_exception());\r\n            }\r\n        };\r\n    };\r\n\r\n    template <class _Ty>\r\n    struct _Future_awaiter {\r\n        future<_Ty>& _Fut;\r\n\r\n        bool await_ready() const {\r\n            return _Fut._Is_ready();\r\n        }\r\n\r\n        void await_suspend(experimental::coroutine_handle<> _ResumeCb) {\r\n            thread _WaitingThread([&_Fut = _Fut, _ResumeCb]() mutable {\r\n                _Fut.wait();\r\n                _ResumeCb();\r\n            });\r\n            _WaitingThread.detach();\r\n        }\r\n\r\n        decltype(auto) await_resume() {\r\n            return _Fut.get();\r\n        }\r\n    };\r\n\r\n} // namespace experimental\r\n\r\n// Coroutines TS and C++20 coroutine adapter.\r\ntemplate <class _Ty>\r\nauto operator co_await(future<_Ty>&& _Fut) {\r\n    return experimental::_Future_awaiter<_Ty>{_Fut};\r\n}\r\n\r\ntemplate <class _Ty>\r\nauto operator co_await(future<_Ty>& _Fut) {\r\n    return experimental::_Future_awaiter<_Ty>{_Fut};\r\n}\r\n#endif // _RESUMABLE_FUNCTIONS_SUPPORTED\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _FUTURE_\r\n"
  },
  {
    "path": "stl/inc/generator",
    "content": "// generator standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _GENERATOR_\r\n#define _GENERATOR_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX23\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <generator> are available only with C++23 or later.\");\r\n#else // ^^^ !_HAS_CXX23 / _HAS_CXX23 vvv\r\n\r\n#include <coroutine>\r\n#include <exception>\r\n#include <xmemory>\r\n\r\n#ifdef __cpp_lib_byte\r\n#include <xpolymorphic_allocator.h>\r\n#endif // defined(__cpp_lib_byte)\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"no_specializations\")\r\n#pragma push_macro(\"empty_bases\")\r\n#undef msvc\r\n#undef no_specializations\r\n#undef empty_bases\r\n\r\n_STD_BEGIN\r\n\r\nstruct alignas(__STDCPP_DEFAULT_NEW_ALIGNMENT__) _Aligned_block {\r\n    unsigned char _Pad[__STDCPP_DEFAULT_NEW_ALIGNMENT__];\r\n};\r\n\r\ntemplate <class _Alloc>\r\nconstexpr bool _Stateless_allocator = default_initializable<_Alloc> && allocator_traits<_Alloc>::is_always_equal::value;\r\n\r\n_EXPORT_STD template <class _Rty, class _Vty = void, class _Alloc = void>\r\nclass _NO_SPECIALIZATIONS_CITING(\"N5014 [coro.generator.class]/4\") generator;\r\n\r\nnamespace _Gen_detail {\r\n    template <class _Alloc>\r\n    concept _Valid_allocator = same_as<_Alloc, void> || is_pointer_v<typename allocator_traits<_Alloc>::pointer>;\r\n\r\n    template <class _Alloc>\r\n    _NODISCARD _Alloc* _Get_allocator_address(void* const _Ptr, const size_t _Size) noexcept {\r\n        _STL_INTERNAL_STATIC_ASSERT(!_Stateless_allocator<_Alloc>);\r\n        const auto _Al_address =\r\n            (reinterpret_cast<uintptr_t>(_Ptr) + _Size + alignof(_Alloc) - 1) & ~(alignof(_Alloc) - 1);\r\n        return reinterpret_cast<_Alloc*>(_Al_address);\r\n    }\r\n\r\n    template <class _Proto_allocator>\r\n    class _Promise_allocator { // statically specified allocator type\r\n    private:\r\n        using _Alloc           = _Rebind_alloc_t<_Proto_allocator, _Aligned_block>;\r\n        using _Alloc_size_type = allocator_traits<_Alloc>::size_type;\r\n\r\n        _NODISCARD static size_t _Allocation_block_size(const size_t _Size) noexcept {\r\n            // Compute the number of _Aligned_blocks needed to store a coroutine\r\n            // frame of _Size bytes and, if necessary, an _Alloc.\r\n            if constexpr (_Stateless_allocator<_Alloc>) {\r\n                // allocator is stateless, we need not store it\r\n                return (_Size + sizeof(_Aligned_block) - 1) / sizeof(_Aligned_block);\r\n            } else {\r\n                // allocator is stateful, we need storage for it\r\n                constexpr size_t _Align = (_STD max) (alignof(_Alloc), sizeof(_Aligned_block));\r\n                return (_Size + sizeof(_Alloc) + _Align - 1) / sizeof(_Aligned_block);\r\n            }\r\n        }\r\n\r\n        _NODISCARD_RAW_PTR_ALLOC static void* _Allocate(_Alloc _Al, const size_t _Size) {\r\n            // memory layout:\r\n            // |--- coroutine frame --|- alignment padding -|---- _Alloc -----|\r\n            // |--- always present ---|----------- stateful only -------------|\r\n            // all rounded up to an integral number of _Aligned_blocks\r\n\r\n            const size_t _Size_in_blocks = _Allocation_block_size(_Size);\r\n            void* const _Ptr             = _Al.allocate(_Convert_size<_Alloc_size_type>(_Size_in_blocks));\r\n\r\n            if constexpr (!_Stateless_allocator<_Alloc>) {\r\n                // store only stateful allocators\r\n                const auto _Al_address = _Get_allocator_address<_Alloc>(_Ptr, _Size);\r\n                _STD construct_at(_Al_address, _STD move(_Al));\r\n            }\r\n\r\n            return _Ptr;\r\n        }\r\n\r\n        _NODISCARD static _Alloc _Get_allocator(\r\n            [[maybe_unused]] void* const _Ptr, [[maybe_unused]] const size_t _Size) noexcept {\r\n            // recreate or retrieve a copy of the allocator used to allocate _Ptr\r\n            if constexpr (_Stateless_allocator<_Alloc>) {\r\n                return _Alloc{};\r\n            } else {\r\n                const auto _Al_address = _Get_allocator_address<_Alloc>(_Ptr, _Size);\r\n                return *_Al_address;\r\n            }\r\n        }\r\n\r\n    public:\r\n        _NODISCARD_RAW_PTR_ALLOC static void* operator new(const size_t _Size)\r\n            requires default_initializable<_Alloc>\r\n        {\r\n            return _Allocate(_Alloc{}, _Size);\r\n        }\r\n\r\n        template <class _Alloc2, class... _Args>\r\n        _NODISCARD_RAW_PTR_ALLOC static void* operator new(\r\n            const size_t _Size, allocator_arg_t, const _Alloc2& _Al, const _Args&...) {\r\n            static_assert(convertible_to<const _Alloc2&, _Proto_allocator>,\r\n                \"Allocator argument must be convertible to the allocator type (N5001 [coro.generator.promise]/18)\");\r\n            return _Allocate(static_cast<_Alloc>(static_cast<_Proto_allocator>(_Al)), _Size);\r\n        }\r\n\r\n        template <class _This, class _Alloc2, class... _Args>\r\n        _NODISCARD_RAW_PTR_ALLOC static void* operator new(\r\n            const size_t _Size, const _This&, allocator_arg_t, const _Alloc2& _Al, const _Args&...) {\r\n            static_assert(convertible_to<const _Alloc2&, _Proto_allocator>,\r\n                \"Allocator argument must be convertible to the allocator type (N5001 [coro.generator.promise]/18)\");\r\n            return _Allocate(static_cast<_Alloc>(static_cast<_Proto_allocator>(_Al)), _Size);\r\n        }\r\n\r\n        static void operator delete(void* const _Ptr, const size_t _Size) noexcept {\r\n            _Alloc _Al                   = _Get_allocator(_Ptr, _Size);\r\n            const size_t _Size_in_blocks = _Allocation_block_size(_Size);\r\n            _Al.deallocate(static_cast<_Aligned_block*>(_Ptr), static_cast<_Alloc_size_type>(_Size_in_blocks));\r\n        }\r\n    };\r\n\r\n    template <>\r\n    class _Promise_allocator<void> { // type-erased allocator\r\n    private:\r\n        using _Dealloc_fn = void(__stdcall*)(void*, size_t) _NOEXCEPT_FNPTR;\r\n\r\n        template <class _Alloc>\r\n        _NODISCARD static size_t _Allocation_block_size(const size_t _Size) noexcept {\r\n            size_t _Bytes = _Size + sizeof(_Dealloc_fn);\r\n            if constexpr (_Stateless_allocator<_Alloc>) {\r\n                _Bytes += sizeof(_Aligned_block) - 1;\r\n            } else {\r\n                constexpr size_t _Align = (_STD max) (alignof(_Alloc), sizeof(_Aligned_block));\r\n                _Bytes += sizeof(_Alloc) + _Align - 1;\r\n            }\r\n            return _Bytes / sizeof(_Aligned_block);\r\n        }\r\n\r\n        template <class _Alloc>\r\n        static void __stdcall _Dealloc_stateless(void* const _Ptr, const size_t _Size) noexcept {\r\n            _STL_INTERNAL_STATIC_ASSERT(_Stateless_allocator<_Alloc>);\r\n            _Alloc _Al{};\r\n            const size_t _Size_in_blocks = _Allocation_block_size<_Alloc>(_Size);\r\n            const auto _Alloc_size       = static_cast<allocator_traits<_Alloc>::size_type>(_Size_in_blocks);\r\n            _Al.deallocate(static_cast<_Aligned_block*>(_Ptr), _Alloc_size);\r\n        }\r\n\r\n        template <class _Alloc>\r\n        static void __stdcall _Dealloc_stateful(void* const _Ptr, const size_t _Size) noexcept {\r\n            _STL_INTERNAL_STATIC_ASSERT(!_Stateless_allocator<_Alloc>);\r\n            const auto _Al_address = _Get_allocator_address<_Alloc>(_Ptr, _Size + sizeof(_Dealloc_fn));\r\n            auto& _Stored_al       = *_Al_address;\r\n            _Alloc _Al{_STD move(_Stored_al)};\r\n            _Stored_al.~_Alloc();\r\n\r\n            const size_t _Size_in_blocks = _Allocation_block_size<_Alloc>(_Size);\r\n            const auto _Alloc_size       = static_cast<allocator_traits<_Alloc>::size_type>(_Size_in_blocks);\r\n            _Al.deallocate(static_cast<_Aligned_block*>(_Ptr), _Alloc_size);\r\n        }\r\n\r\n        static void __stdcall _Dealloc_default(void* const _Ptr, const size_t _Size) noexcept {\r\n            ::operator delete(_Ptr, _Size + sizeof(_Dealloc_fn));\r\n        }\r\n\r\n        template <class _ProtoAlloc>\r\n        _NODISCARD_RAW_PTR_ALLOC static void* _Allocate(const _ProtoAlloc& _Proto, const size_t _Size) {\r\n            // memory layout:\r\n            // |--- coroutine frame (_Size bytes) ---|--- _Dealloc_fn ---|-- alignment padding --|--- _Alloc ---|\r\n            // |-------------------- always present -----(not aligned)---|------------ stateful only -----------|\r\n            // all rounded up to an integral number of _Aligned_blocks\r\n\r\n            using _Alloc           = _Rebind_alloc_t<_ProtoAlloc, _Aligned_block>;\r\n            using _Alloc_size_type = allocator_traits<_Alloc>::size_type;\r\n\r\n            _Alloc _Al{_Proto};\r\n            const size_t _Size_in_blocks = _Allocation_block_size<_Alloc>(_Size);\r\n            const auto _Alloc_size       = _Convert_size<_Alloc_size_type>(_Size_in_blocks);\r\n            void* const _Ptr             = _Al.allocate(_Alloc_size);\r\n\r\n            if constexpr (_Stateless_allocator<_Alloc>) {\r\n                // don't store stateless allocator\r\n                const _Dealloc_fn _Dealloc = _Dealloc_stateless<_Alloc>;\r\n                _CSTD memcpy(static_cast<char*>(_Ptr) + _Size, &_Dealloc, sizeof(_Dealloc_fn));\r\n                return _Ptr;\r\n            } else {\r\n                // store stateful allocator\r\n                const _Dealloc_fn _Dealloc = _Dealloc_stateful<_Alloc>;\r\n                _CSTD memcpy(static_cast<char*>(_Ptr) + _Size, &_Dealloc, sizeof(_Dealloc_fn));\r\n\r\n                const auto _Al_address = _Get_allocator_address<_Alloc>(_Ptr, _Size + sizeof(_Dealloc_fn));\r\n                _STD construct_at(_Al_address, _STD move(_Al));\r\n                return _Ptr;\r\n            }\r\n        }\r\n\r\n    public:\r\n        _NODISCARD_RAW_PTR_ALLOC static void* operator new(const size_t _Size) {\r\n            void* const _Ptr           = ::operator new(_Size + sizeof(_Dealloc_fn));\r\n            const _Dealloc_fn _Dealloc = _Dealloc_default;\r\n            _CSTD memcpy(static_cast<char*>(_Ptr) + _Size, &_Dealloc, sizeof(_Dealloc_fn));\r\n            return _Ptr;\r\n        }\r\n\r\n        template <class _Alloc, class... _Args>\r\n        _NODISCARD_RAW_PTR_ALLOC static void* operator new(\r\n            const size_t _Size, allocator_arg_t, const _Alloc& _Al, const _Args&...) {\r\n            static_assert(_Valid_allocator<_Alloc>, \"generator allocators must use raw pointers \"\r\n                                                    \"(N4988 [coro.generator.class]/1.1)\");\r\n            return _Allocate(_Al, _Size);\r\n        }\r\n\r\n        template <class _This, class _Alloc, class... _Args>\r\n        _NODISCARD_RAW_PTR_ALLOC static void* operator new(\r\n            const size_t _Size, const _This&, allocator_arg_t, const _Alloc& _Al, const _Args&...) {\r\n            static_assert(_Valid_allocator<_Alloc>, \"generator allocators must use raw pointers \"\r\n                                                    \"(N4988 [coro.generator.class]/1.1)\");\r\n            return _Allocate(_Al, _Size);\r\n        }\r\n\r\n        static void operator delete(void* const _Ptr, const size_t _Size) noexcept {\r\n            _Dealloc_fn _Dealloc;\r\n            _CSTD memcpy(&_Dealloc, static_cast<const char*>(_Ptr) + _Size, sizeof(_Dealloc_fn));\r\n            _Dealloc(_Ptr, _Size);\r\n        }\r\n    };\r\n\r\n    template <class _Rty, class _Vty>\r\n    using _Value_t = conditional_t<is_void_v<_Vty>, remove_cvref_t<_Rty>, _Vty>;\r\n    template <class _Rty, class _Vty>\r\n    using _Reference_t = conditional_t<is_void_v<_Vty>, _Rty&&, _Rty>;\r\n    template <class _Ref>\r\n    using _Yield_t = conditional_t<is_reference_v<_Ref>, _Ref, const _Ref&>;\r\n\r\n    template <class, class>\r\n    struct _Iter_provider {\r\n        class _Iterator;\r\n    };\r\n\r\n    template <class _Yielded>\r\n    class _Promise_base {\r\n    public:\r\n        _STL_INTERNAL_STATIC_ASSERT(is_reference_v<_Yielded>);\r\n\r\n#ifndef _PREFAST_ // TRANSITION, VSO-1662733\r\n        _NODISCARD\r\n#endif // ^^^ no workaround ^^^\r\n        suspend_always initial_suspend() const noexcept {\r\n            return {};\r\n        }\r\n\r\n        _NODISCARD auto final_suspend() noexcept {\r\n            return _Final_awaiter{};\r\n        }\r\n\r\n        _NODISCARD suspend_always yield_value(_Yielded _Val) noexcept {\r\n            _Ptr = _STD addressof(_Val);\r\n            return {};\r\n        }\r\n\r\n        _NODISCARD auto yield_value(const remove_reference_t<_Yielded>& _Val)\r\n            noexcept(is_nothrow_constructible_v<remove_cvref_t<_Yielded>,\r\n                const remove_reference_t<_Yielded>&>) /* strengthened */\r\n            requires is_rvalue_reference_v<_Yielded>\r\n                  && constructible_from<remove_cvref_t<_Yielded>, const remove_reference_t<_Yielded>&>\r\n        {\r\n            return _Element_awaiter{_Val};\r\n        }\r\n\r\n        template <class _Rty, class _Vty, class _Alloc, class _Unused>\r\n            requires same_as<_Yield_t<_Reference_t<_Rty, _Vty>>, _Yielded>\r\n        _NODISCARD auto yield_value(_RANGES elements_of<generator<_Rty, _Vty, _Alloc>&&, _Unused> _Elem) noexcept {\r\n            using _Nested_awaitable = _Nested_awaitable_provider<_Rty, _Vty, _Alloc>::_Awaitable;\r\n            return _Nested_awaitable{_STD move(_Elem.range)};\r\n        }\r\n\r\n        template <class _Rty, class _Vty, class _Alloc, class _Unused>\r\n            requires same_as<_Yield_t<_Reference_t<_Rty, _Vty>>, _Yielded>\r\n        _NODISCARD auto yield_value(_RANGES elements_of<generator<_Rty, _Vty, _Alloc>&, _Unused> _Elem) noexcept {\r\n            using _Nested_awaitable = _Nested_awaitable_provider<_Rty, _Vty, _Alloc>::_Awaitable;\r\n            return _Nested_awaitable{_STD move(_Elem.range)};\r\n        }\r\n\r\n        template <_RANGES input_range _Rng, class _Alloc>\r\n            requires convertible_to<_RANGES range_reference_t<_Rng>, _Yielded>\r\n        _NODISCARD auto yield_value(_RANGES elements_of<_Rng, _Alloc> _Elem) {\r\n            using _Nested_awaitable = _Nested_awaitable_provider<_Yielded, void, _Alloc>::_Awaitable;\r\n\r\n            auto _Lambda = [](allocator_arg_t, _Alloc, _RANGES iterator_t<_Rng> _It,\r\n                               const _RANGES sentinel_t<_Rng> _Se) static -> generator<_Yielded, void, _Alloc> {\r\n                for (; _It != _Se; ++_It) {\r\n                    co_yield static_cast<_Yielded>(*_It);\r\n                }\r\n            };\r\n            return _Nested_awaitable{\r\n                _Lambda(allocator_arg, _Elem.allocator, _RANGES begin(_Elem.range), _RANGES end(_Elem.range))};\r\n        }\r\n\r\n        void await_transform() = delete;\r\n\r\n        void return_void() const noexcept {}\r\n\r\n        void unhandled_exception() {\r\n            if (const auto _Info = _Try_get_nest_info()) {\r\n                _Info->_Except = _STD current_exception();\r\n            } else {\r\n                _RERAISE;\r\n            }\r\n        }\r\n\r\n    private:\r\n        struct _Element_awaiter {\r\n            remove_cvref_t<_Yielded> _Val;\r\n\r\n            explicit _Element_awaiter(const remove_reference_t<_Yielded>& _Val_)\r\n                noexcept(is_nothrow_constructible_v<remove_cvref_t<_Yielded>, const remove_reference_t<_Yielded>&>)\r\n                : _Val(_Val_) {}\r\n\r\n            _NODISCARD constexpr bool await_ready() const noexcept {\r\n                return false;\r\n            }\r\n\r\n            template <class _CoroPromise>\r\n            constexpr void await_suspend(coroutine_handle<_CoroPromise> _Handle) noexcept {\r\n#ifdef __cpp_lib_is_pointer_interconvertible // TRANSITION, LLVM-48860\r\n                _STL_INTERNAL_STATIC_ASSERT(is_pointer_interconvertible_base_of_v<_Promise_base, _CoroPromise>);\r\n#endif // ^^^ no workaround ^^^\r\n\r\n                _Promise_base& _Current = _Handle.promise();\r\n                _Current._Ptr           = _STD addressof(_Val);\r\n            }\r\n\r\n            constexpr void await_resume() const noexcept {}\r\n        };\r\n\r\n        // generator's stack of nested coroutines is realized as a linked list of promises. The \"root\" promise is the\r\n        // original that existed before any nested yields. The \"top\" promise is the one currently being iterated over.\r\n        // Iterators hold handles for the root's coroutine and the root promise holds a link to the top promise so\r\n        // iterators can resume it to generate the next element when incremented. Each promise keeps a link to the root\r\n        // so they can update the top link as promises are pushed and popped. It looks a bit like:\r\n        //\r\n        //    +--------------------------- Top ---------------------------+\r\n        //    v                                                           |\r\n        // +=====+             +=====+             +=====+             +=====+\r\n        // |     |-- Parent -->|     |-- Parent -->|     |-- Parent -->|     |\r\n        // +=====+             +=====+             +=====+             +=====+\r\n        //    |                   |                   |                   ^\r\n        //    +------- Root ------+------- Root ------+------- Root ------+\r\n        //\r\n        // The parent and root links are actually stored out-of-line in a _Nest_info. Since a promise is either a root\r\n        // or is nested, the single promise member _Data can be used to store either a top link or a pointer to a\r\n        // _Nest_info.\r\n\r\n        struct _Nest_info {\r\n            exception_ptr _Except;\r\n            coroutine_handle<_Promise_base> _Parent;\r\n            coroutine_handle<_Promise_base> _Root;\r\n        };\r\n\r\n        struct _Final_awaiter {\r\n            _NODISCARD bool await_ready() const noexcept {\r\n                return false;\r\n            }\r\n\r\n            template <class _CoroPromise>\r\n            _NODISCARD coroutine_handle<> await_suspend(coroutine_handle<_CoroPromise> _Handle) const noexcept {\r\n                // Resume _Handle's parent coroutine, if any.\r\n#ifdef __cpp_lib_is_pointer_interconvertible // TRANSITION, LLVM-48860\r\n                _STL_INTERNAL_STATIC_ASSERT(is_pointer_interconvertible_base_of_v<_Promise_base, _CoroPromise>);\r\n#endif // ^^^ no workaround ^^^\r\n\r\n                if (const auto _Info = _Handle.promise()._Try_get_nest_info()) {\r\n                    coroutine_handle<_Promise_base> _Cont = _Info->_Parent;\r\n                    _Info->_Root.promise()._Set_top(_Cont);\r\n                    return _Cont;\r\n                }\r\n\r\n                return _STD noop_coroutine();\r\n            }\r\n\r\n            void await_resume() const noexcept {}\r\n        };\r\n\r\n        template <class _Rty, class _Vty, class _Alloc>\r\n        struct _Nested_awaitable_provider {\r\n            struct _Awaitable {\r\n                _STL_INTERNAL_STATIC_ASSERT(same_as<_Yield_t<_Reference_t<_Rty, _Vty>>, _Yielded>);\r\n\r\n                _Nest_info _Nested;\r\n                generator<_Rty, _Vty, _Alloc> _Gen;\r\n\r\n                explicit _Awaitable(generator<_Rty, _Vty, _Alloc>&& _Gen_) noexcept : _Gen(_STD move(_Gen_)) {}\r\n\r\n                _NODISCARD bool await_ready() const noexcept {\r\n                    return !_Gen._Coro;\r\n                }\r\n\r\n                template <class _CoroPromise>\r\n                _NODISCARD coroutine_handle<_Promise_base> await_suspend(\r\n                    coroutine_handle<_CoroPromise> _Current) noexcept {\r\n                    // Push _Gen's coroutine onto the coroutine stack that _Current is at the top of.\r\n#ifdef __cpp_lib_is_pointer_interconvertible // TRANSITION, LLVM-48860\r\n                    _STL_INTERNAL_STATIC_ASSERT(is_pointer_interconvertible_base_of_v<_Promise_base, _CoroPromise>);\r\n#endif // ^^^ no workaround ^^^\r\n                    auto _Target    = coroutine_handle<_Promise_base>::from_address(_Gen._Coro.address());\r\n                    _Nested._Parent = coroutine_handle<_Promise_base>::from_address(_Current.address());\r\n                    if (const auto _Parent_nest_info = _Nested._Parent.promise()._Try_get_nest_info()) {\r\n                        _Nested._Root = _Parent_nest_info->_Root;\r\n                    } else {\r\n                        _Nested._Root = _Nested._Parent;\r\n                    }\r\n                    _Nested._Root.promise()._Set_top(_Target);\r\n                    _Target.promise()._Set_nest_info(_STD addressof(_Nested));\r\n                    return _Target;\r\n                }\r\n\r\n                void await_resume() {\r\n                    if (_Nested._Except) {\r\n                        _STD rethrow_exception(_STD move(_Nested._Except));\r\n                    }\r\n                }\r\n            };\r\n        };\r\n\r\n        _NODISCARD _Nest_info* _Try_get_nest_info() const noexcept {\r\n            if ((_Data & 1U) != 0) {\r\n                return reinterpret_cast<_Nest_info*>(_Data ^ 1U);\r\n            }\r\n\r\n            return nullptr;\r\n        }\r\n\r\n        _NODISCARD coroutine_handle<_Promise_base> _Get_top() const noexcept {\r\n            _STL_INTERNAL_CHECK((_Data & 1U) == 0);\r\n            return coroutine_handle<_Promise_base>::from_address(reinterpret_cast<void*>(_Data));\r\n        }\r\n\r\n        void _Set_nest_info(_Nest_info* _Info) noexcept {\r\n            _Data = reinterpret_cast<uintptr_t>(_Info) | 1U;\r\n        }\r\n\r\n        void _Set_top(coroutine_handle<_Promise_base> _Top) noexcept {\r\n            _Data = reinterpret_cast<uintptr_t>(_Top.address());\r\n        }\r\n\r\n        template <class, class>\r\n        friend struct _Iter_provider;\r\n\r\n        // Least significant bit of `_Data` indicates stored information:\r\n        // LSB 0: `_Data` is a top coroutine handle,\r\n        // LSB 1: `_Data ^ 1U` is a pointer to an object of type `_Nest_info`.\r\n        uintptr_t _Data = reinterpret_cast<uintptr_t>(coroutine_handle<_Promise_base>::from_promise(*this).address());\r\n        add_pointer_t<_Yielded> _Ptr = nullptr;\r\n    };\r\n\r\n    struct _Secret_tag {\r\n        explicit _Secret_tag() = default;\r\n    };\r\n\r\n    template <class _Value, class _Ref>\r\n    class _Iter_provider<_Value, _Ref>::_Iterator {\r\n    public:\r\n        using value_type      = _Value;\r\n        using difference_type = ptrdiff_t;\r\n\r\n        _Iterator(_Iterator&& _That) noexcept : _Coro{_STD exchange(_That._Coro, {})} {}\r\n\r\n        _Iterator& operator=(_Iterator&& _That) noexcept {\r\n            _Coro = _STD exchange(_That._Coro, {});\r\n            return *this;\r\n        }\r\n\r\n        _NODISCARD _Ref operator*() const\r\n            noexcept(noexcept(static_cast<_Ref>(*_Coro.promise()._Get_top().promise()._Ptr))) /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(!_Coro.done(), \"Can't dereference generator end iterator\");\r\n#endif\r\n            return static_cast<_Ref>(*_Coro.promise()._Get_top().promise()._Ptr);\r\n        }\r\n\r\n        _Iterator& operator++() {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(!_Coro.done(), \"Can't increment generator end iterator\");\r\n#endif\r\n            _Coro.promise()._Get_top().resume();\r\n            return *this;\r\n        }\r\n\r\n        void operator++(int) {\r\n            ++*this;\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const _Iterator& _It, default_sentinel_t) noexcept /* strengthened */ {\r\n            return _It._Coro.done();\r\n        }\r\n\r\n    private:\r\n        template <class, class, class>\r\n        friend class _STD generator;\r\n\r\n        explicit _Iterator(_Secret_tag, coroutine_handle<_Promise_base<_Yield_t<_Ref>>> _Coro_) noexcept\r\n            : _Coro{_Coro_} {}\r\n\r\n        coroutine_handle<_Promise_base<_Yield_t<_Ref>>> _Coro;\r\n    };\r\n} // namespace _Gen_detail\r\n\r\n_EXPORT_STD template <class _Rty, class _Vty, class _Alloc>\r\nclass _NO_SPECIALIZATIONS_CITING(\"N5014 [coro.generator.class]/4\") generator\r\n    : public _RANGES view_interface<generator<_Rty, _Vty, _Alloc>> {\r\nprivate:\r\n    static_assert(_Gen_detail::_Valid_allocator<_Alloc>,\r\n        \"generator allocators must use raw pointers (N4988 [coro.generator.class]/1.1)\");\r\n\r\n    using _Value = _Gen_detail::_Value_t<_Rty, _Vty>;\r\n    static_assert(same_as<remove_cvref_t<_Value>, _Value> && is_object_v<_Value>,\r\n        \"generator's value type must be a cv-unqualified object type (N4988 [coro.generator.class]/1.2)\");\r\n\r\n    using _Ref = _Gen_detail::_Reference_t<_Rty, _Vty>;\r\n    static_assert(\r\n        is_reference_v<_Ref> || (is_object_v<_Ref> && same_as<remove_cv_t<_Ref>, _Ref> && copy_constructible<_Ref>),\r\n        \"generator's selected reference type must be an actual reference type or a cv-unqualified copy-constructible \"\r\n        \"object type (N4988 [coro.generator.class]/1.3)\");\r\n\r\n    using _RRef = conditional_t<is_reference_v<_Ref>, remove_reference_t<_Ref>&&, _Ref>;\r\n\r\n    static_assert(common_reference_with<_Ref&&, _Value&> && common_reference_with<_Ref&&, _RRef&&>\r\n                      && common_reference_with<_RRef&&, const _Value&>,\r\n        \"generator's iterator type must model indirectly_readable, but that's impossible with the selected value and \"\r\n        \"reference types (N4988 [coro.generator.class]/1.4)\");\r\n\r\npublic:\r\n    using yielded = _Gen_detail::_Yield_t<_Ref>;\r\n\r\n    friend _Gen_detail::_Promise_base<yielded>;\r\n\r\n    struct __declspec(empty_bases) promise_type : _Gen_detail::_Promise_allocator<_Alloc>,\r\n                                                  _Gen_detail::_Promise_base<yielded> {\r\n        _NODISCARD generator get_return_object() noexcept {\r\n            return generator{_Gen_detail::_Secret_tag{}, coroutine_handle<promise_type>::from_promise(*this)};\r\n        }\r\n    };\r\n    _STL_INTERNAL_STATIC_ASSERT(is_standard_layout_v<promise_type>);\r\n#ifdef __cpp_lib_is_pointer_interconvertible // TRANSITION, LLVM-48860\r\n    _STL_INTERNAL_STATIC_ASSERT(\r\n        is_pointer_interconvertible_base_of_v<_Gen_detail::_Promise_base<yielded>, promise_type>);\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    generator(generator&& _That) noexcept : _Coro(_STD exchange(_That._Coro, {})) {}\r\n\r\n    ~generator() {\r\n        if (_Coro) {\r\n            _Coro.destroy();\r\n        }\r\n    }\r\n\r\n    generator& operator=(generator _That) noexcept {\r\n        _STD swap(_Coro, _That._Coro);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _Gen_detail::_Iter_provider<_Value, _Ref>::_Iterator begin() {\r\n        // Pre: _Coro is suspended at its initial suspend point\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Coro, \"Can't call begin on moved-from generator\");\r\n#endif\r\n        _Coro.resume();\r\n        return typename _Gen_detail::_Iter_provider<_Value, _Ref>::_Iterator{_Gen_detail::_Secret_tag{},\r\n            coroutine_handle<_Gen_detail::_Promise_base<yielded>>::from_address(_Coro.address())};\r\n    }\r\n\r\n    _NODISCARD default_sentinel_t end() const noexcept {\r\n        return default_sentinel;\r\n    }\r\n\r\nprivate:\r\n    coroutine_handle<promise_type> _Coro = nullptr;\r\n    // The stack of coroutine handles depicted in the Standard is realized by a linked structure of promises and\r\n    // awaitable objects, so all necessary storage is allocated in coroutine frames. See the description in the body of\r\n    // _Gen_detail::_Promise_base.\r\n\r\n    explicit generator(_Gen_detail::_Secret_tag, coroutine_handle<promise_type> _Coro_) noexcept : _Coro(_Coro_) {}\r\n};\r\n\r\n#ifdef __cpp_lib_byte\r\nnamespace pmr {\r\n    _EXPORT_STD template <class _Rty, class _Vty = void>\r\n    using generator = _STD generator<_Rty, _Vty, polymorphic_allocator<>>;\r\n} // namespace pmr\r\n#endif // defined(__cpp_lib_byte)\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"empty_bases\")\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _GENERATOR_\r\n"
  },
  {
    "path": "stl/inc/header-units.json",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n{\r\n    \"Version\": \"1.0\",\r\n    \"BuildAsHeaderUnits\": [\r\n        // \"__msvc_all_public_headers.hpp\", // for testing, not production\r\n        \"__msvc_bit_utils.hpp\",\r\n        \"__msvc_chrono.hpp\",\r\n        \"__msvc_cxx_stdatomic.hpp\",\r\n        \"__msvc_filebuf.hpp\",\r\n        \"__msvc_format_ucd_tables.hpp\",\r\n        \"__msvc_formatter.hpp\",\r\n        \"__msvc_heap_algorithms.hpp\",\r\n        \"__msvc_int128.hpp\",\r\n        \"__msvc_iter_core.hpp\",\r\n        \"__msvc_minmax.hpp\",\r\n        \"__msvc_ostream.hpp\",\r\n        \"__msvc_print.hpp\",\r\n        \"__msvc_ranges_to.hpp\",\r\n        \"__msvc_ranges_tuple_formatter.hpp\",\r\n        \"__msvc_sanitizer_annotate_container.hpp\",\r\n        \"__msvc_string_view.hpp\",\r\n        \"__msvc_system_error_abi.hpp\",\r\n        \"__msvc_threads_core.hpp\",\r\n        \"__msvc_tzdb.hpp\",\r\n        \"__msvc_xlocinfo_types.hpp\",\r\n        \"algorithm\",\r\n        \"any\",\r\n        \"array\",\r\n        \"atomic\",\r\n        \"barrier\",\r\n        \"bit\",\r\n        \"bitset\",\r\n        // \"cassert\", // design is permanently incompatible with header units\r\n        // \"ccomplex\", // removed in C++20\r\n        \"cctype\",\r\n        \"cerrno\",\r\n        \"cfenv\",\r\n        \"cfloat\",\r\n        \"charconv\",\r\n        \"chrono\",\r\n        \"cinttypes\",\r\n        // \"ciso646\", // removed in C++20\r\n        \"climits\",\r\n        \"clocale\",\r\n        \"cmath\",\r\n        \"codecvt\",\r\n        \"compare\",\r\n        \"complex\",\r\n        \"concepts\",\r\n        \"condition_variable\",\r\n        \"coroutine\",\r\n        \"csetjmp\",\r\n        \"csignal\",\r\n        // \"cstdalign\", // removed in C++20\r\n        \"cstdarg\",\r\n        // \"cstdbool\", // removed in C++20\r\n        \"cstddef\",\r\n        \"cstdint\",\r\n        \"cstdio\",\r\n        \"cstdlib\",\r\n        \"cstring\",\r\n        // \"ctgmath\", // removed in C++20\r\n        \"ctime\",\r\n        \"cuchar\",\r\n        \"cwchar\",\r\n        \"cwctype\",\r\n        \"deque\",\r\n        \"exception\",\r\n        \"execution\",\r\n        \"expected\",\r\n        \"filesystem\",\r\n        \"flat_map\",\r\n        \"flat_set\",\r\n        \"format\",\r\n        \"forward_list\",\r\n        \"fstream\",\r\n        \"functional\",\r\n        \"future\",\r\n        \"generator\",\r\n        \"initializer_list\",\r\n        \"iomanip\",\r\n        \"ios\",\r\n        \"iosfwd\",\r\n        \"iostream\",\r\n        \"iso646.h\",\r\n        \"istream\",\r\n        \"iterator\",\r\n        \"latch\",\r\n        \"limits\",\r\n        \"list\",\r\n        \"locale\",\r\n        \"map\",\r\n        \"mdspan\",\r\n        \"memory\",\r\n        \"memory_resource\",\r\n        \"mutex\",\r\n        \"new\",\r\n        \"numbers\",\r\n        \"numeric\",\r\n        \"optional\",\r\n        \"ostream\",\r\n        \"print\",\r\n        \"queue\",\r\n        \"random\",\r\n        \"ranges\",\r\n        \"ratio\",\r\n        \"regex\",\r\n        \"scoped_allocator\",\r\n        \"semaphore\",\r\n        \"set\",\r\n        \"shared_mutex\",\r\n        \"source_location\",\r\n        \"span\",\r\n        \"spanstream\",\r\n        \"sstream\",\r\n        \"stack\",\r\n        \"stacktrace\",\r\n        \"stdexcept\",\r\n        \"stdfloat\",\r\n        \"stop_token\",\r\n        \"streambuf\",\r\n        \"string\",\r\n        \"string_view\",\r\n        \"strstream\",\r\n        \"syncstream\",\r\n        \"system_error\",\r\n        \"thread\",\r\n        \"tuple\",\r\n        \"type_traits\",\r\n        \"typeindex\",\r\n        \"typeinfo\",\r\n        \"unordered_map\",\r\n        \"unordered_set\",\r\n        // \"use_ansi.h\", // internal header, incompatible with being a separate header unit\r\n        \"utility\",\r\n        \"valarray\",\r\n        \"variant\",\r\n        \"vector\",\r\n        // \"version\", // importable, but provides feature-test macros only, which can control header inclusion\r\n        \"xatomic.h\",\r\n        \"xatomic_wait.h\",\r\n        \"xbit_ops.h\",\r\n        \"xcall_once.h\",\r\n        \"xcharconv.h\",\r\n        \"xcharconv_ryu.h\",\r\n        \"xcharconv_ryu_tables.h\",\r\n        \"xcharconv_tables.h\",\r\n        \"xerrc.h\",\r\n        \"xfacet\",\r\n        \"xfilesystem_abi.h\",\r\n        \"xhash\",\r\n        \"xiosbase\",\r\n        // \"xkeycheck.h\", // internal header, provides no machinery, scans for macroized keywords only\r\n        \"xlocale\",\r\n        \"xlocbuf\",\r\n        \"xlocinfo\",\r\n        \"xlocmes\",\r\n        \"xlocmon\",\r\n        \"xlocnum\",\r\n        \"xloctime\",\r\n        \"xmemory\",\r\n        \"xnode_handle.h\",\r\n        \"xpolymorphic_allocator.h\",\r\n        \"xsmf_control.h\",\r\n        \"xstring\",\r\n        \"xthreads.h\",\r\n        \"xtimec.h\",\r\n        \"xtr1common\",\r\n        \"xtree\",\r\n        \"xutility\",\r\n        \"ymath.h\"\r\n        // \"yvals.h\", // internal header, provides macros that control header inclusion\r\n        // \"yvals_core.h\" // internal header, provides macros that control header inclusion\r\n    ]\r\n}\r\n"
  },
  {
    "path": "stl/inc/initializer_list",
    "content": "// initializer_list standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _INITIALIZER_LIST_\r\n#define _INITIALIZER_LIST_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <cstddef>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD template <class _Elem>\r\nclass _NO_SPECIALIZATIONS_CITING(\"N5014 [initializer.list.syn]/2\") initializer_list {\r\npublic:\r\n    using value_type      = _Elem;\r\n    using reference       = const _Elem&;\r\n    using const_reference = const _Elem&;\r\n    using size_type       = size_t;\r\n\r\n    using iterator       = const _Elem*;\r\n    using const_iterator = const _Elem*;\r\n\r\n    constexpr initializer_list() noexcept : _First(nullptr), _Last(nullptr) {}\r\n\r\n    constexpr initializer_list(const _Elem* _First_arg, const _Elem* _Last_arg) noexcept\r\n        : _First(_First_arg), _Last(_Last_arg) {}\r\n\r\n    _NODISCARD constexpr const _Elem* begin() const noexcept {\r\n        return _First;\r\n    }\r\n\r\n    _NODISCARD constexpr const _Elem* end() const noexcept {\r\n        return _Last;\r\n    }\r\n\r\n    _NODISCARD constexpr size_t size() const noexcept {\r\n        return static_cast<size_t>(_Last - _First);\r\n    }\r\n\r\n    _NODISCARD constexpr bool empty() const noexcept {\r\n        return _First == _Last;\r\n    }\r\n\r\n    _NODISCARD constexpr const _Elem* data() const noexcept {\r\n        return _First;\r\n    }\r\n\r\nprivate:\r\n    const _Elem* _First;\r\n    const _Elem* _Last;\r\n};\r\n\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _INITIALIZER_LIST_\r\n"
  },
  {
    "path": "stl/inc/iomanip",
    "content": "// iomanip standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _IOMANIP_\r\n#define _IOMANIP_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <istream>\r\n#include <type_traits>\r\n#include <xlocmon>\r\n#include <xloctime>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _Elem>\r\nstruct _Fillobj { // store fill character\r\n    _Fillobj(_Elem _Ch) : _Fill(_Ch) {}\r\n\r\n    template <class _Elem2, class _Traits>\r\n    friend basic_ostream<_Elem2, _Traits>& operator<<(basic_ostream<_Elem2, _Traits>& _Ostr, const _Fillobj& _Manip) {\r\n        // set fill character in output stream\r\n        static_assert(is_same_v<_Elem, _Elem2>, \"wrong character type for setfill\");\r\n\r\n        _Ostr.fill(_Manip._Fill);\r\n        return _Ostr;\r\n    }\r\n\r\n    _Elem _Fill; // the fill character\r\n};\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD _Fillobj<_Elem> setfill(_Elem _Ch) {\r\n    return _Fillobj<_Elem>(_Ch);\r\n}\r\n\r\ntemplate <class _Money>\r\nstruct _Monobj { // store reference to monetary amount\r\n    _Monobj(_Money& _Val_arg, bool _Intl_arg) : _Val(_Val_arg), _Intl(_Intl_arg) {}\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr, const _Monobj& _Manip) {\r\n        // get monetary amount from input stream\r\n        using _Myis   = basic_istream<_Elem, _Traits>;\r\n        using _Iter   = istreambuf_iterator<_Elem, _Traits>;\r\n        using _Mymget = money_get<_Elem, _Iter>;\r\n\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const typename _Myis::sentry _Ok(_Istr);\r\n\r\n        if (_Ok) { // state okay, extract monetary amount\r\n            const _Mymget& _Mget_fac = _STD use_facet<_Mymget>(_Istr.getloc());\r\n            _TRY_IO_BEGIN\r\n            _Mget_fac.get(_Iter(_Istr.rdbuf()), _Iter(nullptr), _Manip._Intl, _Istr, _State, _Manip._Val);\r\n            _CATCH_IO_(ios_base, _Istr)\r\n        }\r\n\r\n        _Istr.setstate(_State);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr, const _Monobj& _Manip) {\r\n        // put monetary amount to output stream\r\n        using _Myos   = basic_ostream<_Elem, _Traits>;\r\n        using _Iter   = ostreambuf_iterator<_Elem, _Traits>;\r\n        using _Mymput = money_put<_Elem, _Iter>;\r\n\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const typename _Myos::sentry _Ok(_Ostr);\r\n\r\n        if (_Ok) { // state okay, insert monetary amount\r\n            const _Mymput& _Mput_fac = _STD use_facet<_Mymput>(_Ostr.getloc());\r\n            _TRY_IO_BEGIN\r\n            if (_Mput_fac.put(_Iter(_Ostr.rdbuf()), _Manip._Intl, _Ostr, _Ostr.fill(), _Manip._Val).failed()) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_(ios_base, _Ostr)\r\n        }\r\n\r\n        _Ostr.setstate(_State);\r\n        return _Ostr;\r\n    }\r\n\r\n    _Money& _Val; // the monetary amount reference\r\n    bool _Intl; // international flag\r\n};\r\n\r\n_EXPORT_STD template <class _Money>\r\n_NODISCARD _Monobj<_Money> get_money(_Money& _Val_arg, bool _Intl_arg = false) {\r\n    static_assert(is_same_v<_Money, long double> || _Is_specialization_v<_Money, basic_string>,\r\n        \"_Money must be either long double or a basic_string specialization (N5032 [ext.manip]/2).\");\r\n    return _Monobj<_Money>(_Val_arg, _Intl_arg);\r\n}\r\n\r\n_EXPORT_STD template <class _Money>\r\n_NODISCARD _Monobj<const _Money> put_money(const _Money& _Val_arg, bool _Intl_arg = false) {\r\n    static_assert(is_same_v<_Money, long double> || _Is_specialization_v<_Money, basic_string>,\r\n        \"_Money must be either long double or a basic_string specialization (N5032 [ext.manip]/5).\");\r\n    return _Monobj<const _Money>(_Val_arg, _Intl_arg);\r\n}\r\n\r\ntemplate <class _Elem, class _Ptr>\r\nstruct _Timeobj { // store reference to tm object and format\r\n    _Timeobj(_Ptr _Tptr_arg, const _Elem* _Fmt_arg) : _Tptr(_Tptr_arg), _Fmtfirst(_Fmt_arg) {\r\n        for (_Fmtlast = _Fmtfirst; *_Fmtlast != 0; ++_Fmtlast) { // find end of format string\r\n        }\r\n    }\r\n\r\n    template <class _Elem2, class _Traits>\r\n    friend basic_istream<_Elem2, _Traits>& operator>>(basic_istream<_Elem2, _Traits>& _Istr, const _Timeobj& _Manip) {\r\n        // get time information from input stream\r\n        static_assert(is_same_v<_Elem, _Elem2>, \"wrong character type for get_time\");\r\n\r\n        using _Myis   = basic_istream<_Elem, _Traits>;\r\n        using _Iter   = istreambuf_iterator<_Elem, _Traits>;\r\n        using _Mytget = time_get<_Elem, _Iter>;\r\n\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const typename _Myis::sentry _Ok(_Istr);\r\n\r\n        if (_Ok) { // state okay, extract time amounts\r\n            const _Mytget& _Tget_fac = _STD use_facet<_Mytget>(_Istr.getloc());\r\n            _TRY_IO_BEGIN\r\n            _Tget_fac.get(\r\n                _Iter(_Istr.rdbuf()), _Iter(nullptr), _Istr, _State, _Manip._Tptr, _Manip._Fmtfirst, _Manip._Fmtlast);\r\n            _CATCH_IO_(ios_base, _Istr)\r\n        }\r\n\r\n        _Istr.setstate(_State);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem2, class _Traits>\r\n    friend basic_ostream<_Elem2, _Traits>& operator<<(basic_ostream<_Elem2, _Traits>& _Ostr, const _Timeobj& _Manip) {\r\n        // put time information to output stream\r\n        static_assert(is_same_v<_Elem, _Elem2>, \"wrong character type for put_time\");\r\n\r\n        using _Myos   = basic_ostream<_Elem, _Traits>;\r\n        using _Iter   = ostreambuf_iterator<_Elem, _Traits>;\r\n        using _Mytput = time_put<_Elem, _Iter>;\r\n\r\n        const typename _Myos::sentry _Ok(_Ostr);\r\n\r\n        if (_Ok) { // state okay, insert monetary amount\r\n            const _Mytput& _Tput_fac = _STD use_facet<_Mytput>(_Ostr.getloc());\r\n            _TRY_IO_BEGIN\r\n            if (_Tput_fac\r\n                    .put(_Iter(_Ostr.rdbuf()), _Ostr, _Ostr.fill(), _Manip._Tptr, _Manip._Fmtfirst, _Manip._Fmtlast)\r\n                    .failed()) {\r\n                _Ostr.setstate(ios_base::badbit);\r\n            }\r\n            _CATCH_IO_(ios_base, _Ostr)\r\n        }\r\n\r\n        return _Ostr;\r\n    }\r\n\r\n    _Ptr _Tptr; // the tm struct pointer\r\n    const _Elem* _Fmtfirst; // format string start\r\n    const _Elem* _Fmtlast; // format string end\r\n};\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD _Timeobj<_Elem, tm*> get_time(tm* _Tptr_arg, const _Elem* _Fmt_arg) {\r\n    return _Timeobj<_Elem, tm*>(_Tptr_arg, _Fmt_arg);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD _Timeobj<_Elem, const tm*> put_time(const tm* _Tptr_arg, const _Elem* _Fmt_arg) {\r\n    return _Timeobj<_Elem, const tm*>(_Tptr_arg, _Fmt_arg);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Sizet>\r\nstruct _Quote_out { // store pointer/length for string\r\n    _Quote_out(const _Elem* _Ptr_obj, _Sizet _Size_obj, _Elem _Delim_obj, _Elem _Escape_obj)\r\n        : _Ptr(_Ptr_obj), _Size(_Size_obj), _Delim(_Delim_obj), _Escape(_Escape_obj) {}\r\n\r\n    _Quote_out(const _Quote_out&) = default;\r\n\r\n    template <class _OsTraits, class _QuTraits = _Traits>\r\n    friend basic_ostream<_Elem, _OsTraits>& operator<<(\r\n        basic_ostream<_Elem, _OsTraits>& _Ostr, const _Quote_out& _Manip) {\r\n        // put quoted string to output stream\r\n        static_assert(\r\n            is_void_v<_QuTraits> || is_same_v<_QuTraits, _OsTraits>, \"quoted() traits must match basic_ostream traits\");\r\n\r\n        using _Myos = basic_ostream<_Elem, _OsTraits>;\r\n\r\n        const _Elem* const _Last = _Manip._Ptr + _Manip._Size;\r\n\r\n        _Sizet _Size = _Manip._Size + 2; // allow for delimiters\r\n        for (const _Elem* _Ptr = _Manip._Ptr; _Ptr != _Last; ++_Ptr) {\r\n            if (_OsTraits::eq(*_Ptr, _Manip._Delim) || _OsTraits::eq(*_Ptr, _Manip._Escape)) {\r\n                ++_Size; // count escapes\r\n            }\r\n        }\r\n\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n\r\n        _Sizet _Pad;\r\n        if (_Ostr.width() <= 0 || static_cast<_Sizet>(_Ostr.width()) <= _Size) {\r\n            _Pad = 0;\r\n        } else {\r\n            _Pad = static_cast<_Sizet>(_Ostr.width()) - _Size;\r\n        }\r\n\r\n        const typename _Myos::sentry _Ok(_Ostr);\r\n\r\n        if (!_Ok) {\r\n            _State |= ios_base::badbit;\r\n        } else { // state okay, insert characters\r\n            _TRY_IO_BEGIN\r\n            if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left) {\r\n                for (; 0 < _Pad; --_Pad) { // pad on left\r\n                    if (_OsTraits::eq_int_type(_OsTraits::eof(), _Ostr.rdbuf()->sputc(_Ostr.fill()))) {\r\n                        _State |= ios_base::badbit; // insertion failed, quit\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (_State == ios_base::goodbit\r\n                && _OsTraits::eq_int_type(_OsTraits::eof(),\r\n                    _Ostr.rdbuf()->sputc(_Manip._Delim))) { // put delimiter\r\n                _State |= ios_base::badbit;\r\n            }\r\n\r\n            for (const _Elem* _Ptr = _Manip._Ptr; _Ptr != _Last; ++_Ptr) { // put (possibly escaped) element\r\n                if ((_OsTraits::eq(*_Ptr, _Manip._Delim) || _OsTraits::eq(*_Ptr, _Manip._Escape))\r\n                    && _State == ios_base::goodbit\r\n                    && _OsTraits::eq_int_type(_OsTraits::eof(),\r\n                        _Ostr.rdbuf()->sputc(_Manip._Escape))) { // put escape\r\n                    _State |= ios_base::badbit; // insertion failed, quit\r\n                    break;\r\n                }\r\n\r\n                if (_State == ios_base::goodbit\r\n                    && _OsTraits::eq_int_type(_OsTraits::eof(),\r\n                        _Ostr.rdbuf()->sputc(*_Ptr))) { // put element\r\n                    _State |= ios_base::badbit; // insertion failed, quit\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (_State == ios_base::goodbit\r\n                && _OsTraits::eq_int_type(_OsTraits::eof(),\r\n                    _Ostr.rdbuf()->sputc(_Manip._Delim))) { // put delimiter\r\n                _State |= ios_base::badbit;\r\n            }\r\n\r\n            if (_State == ios_base::goodbit) {\r\n                for (; 0 < _Pad; --_Pad) { // pad on right\r\n                    if (_OsTraits::eq_int_type(_OsTraits::eof(), _Ostr.rdbuf()->sputc(_Ostr.fill()))) {\r\n                        _State |= ios_base::badbit; // insertion failed, quit\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            _Ostr.width(0);\r\n            _CATCH_IO_(ios_base, _Ostr)\r\n        }\r\n\r\n        _Ostr.setstate(_State);\r\n        return _Ostr;\r\n    }\r\n\r\n    const _Elem* _Ptr; // pointer to string\r\n    _Sizet _Size; // length of string\r\n    _Elem _Delim; // delimiter element\r\n    _Elem _Escape; // escape element\r\n\r\n    _Quote_out& operator=(const _Quote_out&) = delete;\r\n};\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\nstruct _Quote_in { // store reference to string\r\n    using _Mystr = basic_string<_Elem, _Traits, _Alloc>;\r\n\r\n    _Quote_in(_Mystr& _Str_obj, _Elem _Delim_obj, _Elem _Escape_obj)\r\n        : _Str(_Str_obj), _Delim(_Delim_obj), _Escape(_Escape_obj) {}\r\n\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr, const _Quote_in& _Manip) {\r\n        // put quoted string to output stream\r\n        using _Out_type = _Quote_out<_Elem, _Traits, typename _Mystr::size_type>;\r\n\r\n        return _Ostr << _Out_type{_Manip._Str.c_str(), _Manip._Str.size(), _Manip._Delim, _Manip._Escape};\r\n    }\r\n\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr, const _Quote_in& _Manip) {\r\n        // get quoted string from input stream\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const typename basic_istream<_Elem, _Traits>::sentry _Ok(_Istr);\r\n\r\n        if (_Ok) { // state okay, extract characters\r\n            _TRY_IO_BEGIN\r\n            const auto _Buf   = _Istr.rdbuf();\r\n            auto& _Str        = _Manip._Str;\r\n            const auto _Delim = _Traits::to_int_type(_Manip._Delim);\r\n            auto _Meta        = _Buf->sgetc();\r\n\r\n            if (!_Traits::eq_int_type(_Meta, _Delim)) { // no leading delimiter\r\n                return _Istr >> _Str;\r\n            }\r\n\r\n            const auto _Escape = _Traits::to_int_type(_Manip._Escape);\r\n            _Str.clear();\r\n            for (;;) {\r\n                _Meta = _Buf->snextc();\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Meta)) { // no trailing delimiter; fail\r\n                    _State = ios_base::eofbit | ios_base::failbit;\r\n                    break;\r\n                } else if (_Traits::eq_int_type(_Meta, _Escape)) { // escape; read next character literally\r\n                    _Meta = _Buf->snextc();\r\n                    if (_Traits::eq_int_type(_Traits::eof(), _Meta)) { // bad escape; fail\r\n                        _State = ios_base::eofbit | ios_base::failbit;\r\n                        break;\r\n                    }\r\n                } else if (_Traits::eq_int_type(_Meta, _Delim)) { // found trailing delimiter\r\n                    if (_Traits::eq_int_type(_Traits::eof(), _Buf->sbumpc())) { // consume trailing delimiter\r\n                        _State = ios_base::eofbit;\r\n                    }\r\n\r\n                    break;\r\n                }\r\n\r\n                _Str.push_back(_Traits::to_char_type(_Meta));\r\n            }\r\n            _CATCH_IO_(ios_base, _Istr)\r\n        }\r\n\r\n        _Istr.setstate(_State);\r\n        return _Istr;\r\n    }\r\n\r\n    _Mystr& _Str; // reference to string\r\n    _Elem _Delim; // delimiter element\r\n    _Elem _Escape; // escape element\r\n};\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD _Quote_out<_Elem, void, size_t> quoted(\r\n    const _Elem* _Ptr, _Elem _Delim = _Elem('\"'), _Elem _Escape = _Elem('\\\\')) {\r\n    const size_t _Size = char_traits<_Elem>::length(_Ptr);\r\n    return {_Ptr, _Size, _Delim, _Escape};\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD _Quote_out<_Elem, _Traits, typename basic_string<_Elem, _Traits, _Alloc>::size_type> quoted(\r\n    const basic_string<_Elem, _Traits, _Alloc>& _Str, _Elem _Delim = _Elem('\"'), _Elem _Escape = _Elem('\\\\')) {\r\n    return {_Str.c_str(), _Str.size(), _Delim, _Escape};\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\n_NODISCARD _Quote_out<_Elem, _Traits, size_t> quoted(\r\n    const basic_string_view<_Elem, _Traits> _Str, _Elem _Delim = _Elem('\"'), _Elem _Escape = _Elem('\\\\')) {\r\n    return {_Str.data(), _Str.size(), _Delim, _Escape};\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD _Quote_in<_Elem, _Traits, _Alloc> quoted(\r\n    basic_string<_Elem, _Traits, _Alloc>& _Str, _Elem _Delim = _Elem('\"'), _Elem _Escape = _Elem('\\\\')) {\r\n    return {_Str, _Delim, _Escape};\r\n}\r\n\r\ntemplate <class _Arg>\r\nstruct _Smanip { // store function pointer and argument value\r\n    _Smanip(void(__cdecl* _Left)(ios_base&, _Arg), _Arg _Val) : _Pfun(_Left), _Manarg(_Val) {}\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr, const _Smanip& _Manip) {\r\n        // extract by calling function with input stream and argument\r\n        (*_Manip._Pfun)(_Istr, _Manip._Manarg);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr, const _Smanip& _Manip) {\r\n        // insert by calling function with output stream and argument\r\n        (*_Manip._Pfun)(_Ostr, _Manip._Manarg);\r\n        return _Ostr;\r\n    }\r\n\r\n    void(__cdecl* _Pfun)(ios_base&, _Arg); // the function pointer\r\n    _Arg _Manarg; // the argument value\r\n};\r\n\r\n_EXPORT_STD extern \"C++\" _NODISCARD _MRTIMP2 _Smanip<ios_base::fmtflags> __cdecl resetiosflags(ios_base::fmtflags);\r\n_EXPORT_STD extern \"C++\" _NODISCARD _MRTIMP2 _Smanip<ios_base::fmtflags> __cdecl setiosflags(ios_base::fmtflags);\r\n_EXPORT_STD extern \"C++\" _NODISCARD _MRTIMP2 _Smanip<int> __cdecl setbase(int);\r\n_EXPORT_STD extern \"C++\" _NODISCARD _MRTIMP2 _Smanip<streamsize> __cdecl setprecision(streamsize);\r\n_EXPORT_STD extern \"C++\" _NODISCARD _MRTIMP2 _Smanip<streamsize> __cdecl setw(streamsize);\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _IOMANIP_\r\n"
  },
  {
    "path": "stl/inc/ios",
    "content": "// ios standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _IOS_\r\n#define _IOS_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <xlocnum>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _Traits>\r\nclass basic_ios : public ios_base { // base class for basic_istream/basic_ostream\r\npublic:\r\n    using _Myos       = basic_ostream<_Elem, _Traits>;\r\n    using _Mysb       = basic_streambuf<_Elem, _Traits>;\r\n    using _Ctype      = ctype<_Elem>;\r\n    using char_type   = _Elem;\r\n    using traits_type = _Traits;\r\n    using int_type    = typename _Traits::int_type;\r\n    using pos_type    = typename _Traits::pos_type;\r\n    using off_type    = typename _Traits::off_type;\r\n\r\n    explicit __CLR_OR_THIS_CALL basic_ios(_Mysb* _Strbuf) {\r\n        init(_Strbuf);\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ~basic_ios() noexcept override {}\r\n\r\n    void __CLR_OR_THIS_CALL clear(iostate _State = goodbit, bool _Reraise = false) {\r\n        // set state, possibly reraise exception\r\n        ios_base::clear(_State | (_Mystrbuf ? ios_base::goodbit : ios_base::badbit), _Reraise);\r\n    }\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    void __CLR_OR_THIS_CALL clear(io_state _State) { // set state to _State\r\n        clear(static_cast<iostate>(_State));\r\n    }\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    void __CLR_OR_THIS_CALL setstate(iostate _State, bool _Reraise = false) {\r\n        // merge _State into state, possibly reraise exception\r\n        clear(rdstate() | _State, _Reraise);\r\n    }\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    void __CLR_OR_THIS_CALL setstate(io_state _State) { // merge _State into state\r\n        setstate(static_cast<iostate>(_State));\r\n    }\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    basic_ios& __CLR_OR_THIS_CALL copyfmt(const basic_ios& _Right) { // copy format parameters\r\n        _Tiestr = _Right.tie();\r\n        _Fillch = _Right.fill();\r\n        ios_base::copyfmt(_Right);\r\n        return *this;\r\n    }\r\n\r\n    _Myos* __CLR_OR_THIS_CALL tie() const noexcept /* strengthened */ {\r\n        return _Tiestr;\r\n    }\r\n\r\n    _Myos* __CLR_OR_THIS_CALL tie(_Myos* _Newtie) noexcept /* strengthened */ { // set tie pointer\r\n        _Myos* _Oldtie = _Tiestr;\r\n        _Tiestr        = _Newtie;\r\n        return _Oldtie;\r\n    }\r\n\r\n    _NODISCARD _Mysb* __CLR_OR_THIS_CALL rdbuf() const noexcept /* strengthened */ {\r\n        return _Mystrbuf;\r\n    }\r\n\r\n    _Mysb* __CLR_OR_THIS_CALL rdbuf(_Mysb* _Strbuf) { // set stream buffer pointer\r\n        _Mysb* _Oldstrbuf = _Mystrbuf;\r\n        _Mystrbuf         = _Strbuf;\r\n        clear();\r\n        return _Oldstrbuf;\r\n    }\r\n\r\n    locale __CLR_OR_THIS_CALL imbue(const locale& _Loc) { // set locale to argument\r\n        locale _Oldlocale = ios_base::imbue(_Loc);\r\n        const auto _Rdbuf = rdbuf();\r\n        if (_Rdbuf) {\r\n            _Rdbuf->pubimbue(_Loc);\r\n        }\r\n\r\n        return _Oldlocale;\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL fill() const noexcept /* strengthened */ {\r\n        return _Fillch;\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL fill(_Elem _Newfill) noexcept /* strengthened */ { // set fill character\r\n        _Elem _Oldfill = _Fillch;\r\n        _Fillch        = _Newfill;\r\n        return _Oldfill;\r\n    }\r\n\r\n    char __CLR_OR_THIS_CALL narrow(_Elem _Ch, char _Dflt = '\\0') const { // convert _Ch to byte using imbued locale\r\n        return _STD use_facet<_Ctype>(getloc()).narrow(_Ch, _Dflt);\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL widen(char _Byte) const { // convert _Byte to character using imbued locale\r\n        return _STD use_facet<_Ctype>(getloc()).widen(_Byte);\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL move(basic_ios& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Mystrbuf = nullptr;\r\n            _Tiestr   = nullptr;\r\n            this->swap(_Right);\r\n        }\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL move(basic_ios&& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Mystrbuf = nullptr;\r\n            _Tiestr   = nullptr;\r\n            this->swap(_Right);\r\n        }\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL swap(basic_ios& _Right) noexcept { // swap all but rdbuf() with right\r\n        ios_base::swap(_Right);\r\n        _STD swap(_Fillch, _Right._Fillch);\r\n        _STD swap(_Tiestr, _Right._Tiestr);\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL set_rdbuf(_Mysb* _Strbuf) noexcept /* strengthened */ {\r\n        // set stream buffer pointer without changing state\r\n        _Mystrbuf = _Strbuf;\r\n    }\r\n\r\nprotected:\r\n    void __CLR_OR_THIS_CALL init(_Mysb* _Strbuf = nullptr, bool _Isstd = false) {\r\n        // initialize with stream buffer pointer\r\n        _Init(); // initialize ios_base\r\n        _Mystrbuf = _Strbuf;\r\n        _Tiestr   = nullptr;\r\n        _Fillch   = widen(' ');\r\n\r\n        if (!_Mystrbuf) {\r\n            setstate(badbit);\r\n        }\r\n\r\n        if (_Isstd) {\r\n            _Addstd(this); // special handling for standard streams\r\n        }\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL basic_ios() {}\r\n\r\nprivate:\r\n    _Mysb* _Mystrbuf{}; // pointer to stream buffer\r\n    _Myos* _Tiestr{}; // pointer to tied output stream\r\n    _Elem _Fillch{}; // the fill character\r\n\r\npublic:\r\n    __CLR_OR_THIS_CALL basic_ios(const basic_ios&)            = delete;\r\n    basic_ios& __CLR_OR_THIS_CALL operator=(const basic_ios&) = delete;\r\n};\r\n\r\n#if defined(_DLL_CPPLIB)\r\n\r\n#if !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\ntemplate class _CRTIMP2_PURE_IMPORT basic_ios<char, char_traits<char>>;\r\ntemplate class _CRTIMP2_PURE_IMPORT basic_ios<wchar_t, char_traits<wchar_t>>;\r\n#endif // !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\n\r\n#ifdef __FORCE_INSTANCE\r\ntemplate class _CRTIMP2_PURE_IMPORT basic_ios<unsigned short, char_traits<unsigned short>>;\r\n#endif // defined(__FORCE_INSTANCE)\r\n#endif // defined(_DLL_CPPLIB)\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL boolalpha(ios_base& _Iosbase) { // set boolalpha\r\n    _Iosbase.setf(ios_base::boolalpha);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL dec(ios_base& _Iosbase) { // set basefield to dec\r\n    _Iosbase.setf(ios_base::dec, ios_base::basefield);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL defaultfloat(ios_base& _Iosbase) { // clear floatfield\r\n    _Iosbase.unsetf(ios_base::floatfield);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL fixed(ios_base& _Iosbase) { // set floatfield to fixed\r\n    _Iosbase.setf(ios_base::fixed, ios_base::floatfield);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL hex(ios_base& _Iosbase) { // set basefield to hex\r\n    _Iosbase.setf(ios_base::hex, ios_base::basefield);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL hexfloat(ios_base& _Iosbase) { // set floatfield to (scientific | fixed)\r\n    _Iosbase.setf(ios_base::scientific | ios_base::fixed, ios_base::floatfield);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL internal(ios_base& _Iosbase) { // set adjustfield to internal\r\n    _Iosbase.setf(ios_base::internal, ios_base::adjustfield);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL left(ios_base& _Iosbase) { // set adjustfield to left\r\n    _Iosbase.setf(ios_base::left, ios_base::adjustfield);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL noboolalpha(ios_base& _Iosbase) { // clear boolalpha\r\n    _Iosbase.unsetf(ios_base::boolalpha);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL noshowbase(ios_base& _Iosbase) { // clear showbase\r\n    _Iosbase.unsetf(ios_base::showbase);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL noshowpoint(ios_base& _Iosbase) { // clear showpoint\r\n    _Iosbase.unsetf(ios_base::showpoint);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL noshowpos(ios_base& _Iosbase) { // clear showpos\r\n    _Iosbase.unsetf(ios_base::showpos);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL noskipws(ios_base& _Iosbase) { // clear skipws\r\n    _Iosbase.unsetf(ios_base::skipws);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL nounitbuf(ios_base& _Iosbase) { // clear unitbuf\r\n    _Iosbase.unsetf(ios_base::unitbuf);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL nouppercase(ios_base& _Iosbase) { // clear uppercase\r\n    _Iosbase.unsetf(ios_base::uppercase);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL oct(ios_base& _Iosbase) { // set oct in basefield\r\n    _Iosbase.setf(ios_base::oct, ios_base::basefield);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL right(ios_base& _Iosbase) { // set right in adjustfield\r\n    _Iosbase.setf(ios_base::right, ios_base::adjustfield);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL scientific(ios_base& _Iosbase) { // set scientific in floatfield\r\n    _Iosbase.setf(ios_base::scientific, ios_base::floatfield);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL showbase(ios_base& _Iosbase) { // set showbase\r\n    _Iosbase.setf(ios_base::showbase);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL showpoint(ios_base& _Iosbase) { // set showpoint\r\n    _Iosbase.setf(ios_base::showpoint);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL showpos(ios_base& _Iosbase) { // set showpos\r\n    _Iosbase.setf(ios_base::showpos);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL skipws(ios_base& _Iosbase) { // set skipws\r\n    _Iosbase.setf(ios_base::skipws);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL unitbuf(ios_base& _Iosbase) { // set unitbuf\r\n    _Iosbase.setf(ios_base::unitbuf);\r\n    return _Iosbase;\r\n}\r\n\r\n_EXPORT_STD inline ios_base& __CLRCALL_OR_CDECL uppercase(ios_base& _Iosbase) { // set uppercase\r\n    _Iosbase.setf(ios_base::uppercase);\r\n    return _Iosbase;\r\n}\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _IOS_\r\n"
  },
  {
    "path": "stl/inc/iosfwd",
    "content": "// iosfwd standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _IOSFWD_\r\n#define _IOSFWD_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <cstdio>\r\n#include <cstring>\r\n#include <cwchar>\r\n#include <xtr1common>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\n#if _HAS_EXCEPTIONS\r\n#define _TRY_IO_BEGIN _TRY_BEGIN // begin try block\r\n\r\n#define _CATCH_IO_END                                                          \\\r\n    _CATCH_ALL /* catch block for _Myios */                                    \\\r\n        _Myios::setstate(ios_base::badbit, true); /* set badbit and rethrow */ \\\r\n    _CATCH_END\r\n\r\n#define _CATCH_IO_(xtype, x)                                             \\\r\n    _CATCH_ALL /* catch block for basic_ios x */                         \\\r\n        (x)                                                              \\\r\n            .setstate(xtype::badbit, true); /* set badbit and rethrow */ \\\r\n    _CATCH_END\r\n\r\n#else // ^^^ _HAS_EXCEPTIONS / !_HAS_EXCEPTIONS vvv\r\n#define _TRY_IO_BEGIN        { // begin try block\r\n#define _CATCH_IO_END        } // catch block for _Myios\r\n#define _CATCH_IO_(xtype, x) } // catch block for basic_ios x\r\n#endif // ^^^ !_HAS_EXCEPTIONS ^^^\r\n\r\n// from <streambuf>\r\n_EXPORT_STD using streamoff  = long long;\r\n_EXPORT_STD using streamsize = long long;\r\n\r\n_EXPORT_STD template <class _Statetype>\r\nclass fpos { // store arbitrary file position\r\npublic:\r\n    /* implicit */ fpos(streamoff _Off = 0) : _Myoff(_Off), _Fpos(0), _Mystate() {}\r\n\r\n    fpos(_Statetype _State, fpos_t _Fileposition) : _Myoff(_Fileposition), _Fpos(0), _Mystate(_State) {}\r\n\r\n    _NODISCARD _Statetype state() const {\r\n        return _Mystate;\r\n    }\r\n\r\n    void state(_Statetype _State) {\r\n        _Mystate = _State;\r\n    }\r\n\r\n    operator streamoff() const noexcept /* strengthened */ {\r\n        // TRANSITION, ABI: We currently always set _Fpos to 0 but older .objs containing old\r\n        // basic_filebuf would set _Fpos.\r\n        return _Myoff + _Fpos;\r\n    }\r\n\r\n    _NODISCARD streamoff operator-(const fpos& _Right) const noexcept /* strengthened */ {\r\n        return static_cast<streamoff>(*this) - static_cast<streamoff>(_Right);\r\n    }\r\n\r\n    fpos& operator+=(streamoff _Off) noexcept /* strengthened */ { // add offset\r\n        _Myoff += _Off;\r\n        return *this;\r\n    }\r\n\r\n    fpos& operator-=(streamoff _Off) noexcept /* strengthened */ { // subtract offset\r\n        _Myoff -= _Off;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD fpos operator+(streamoff _Off) const {\r\n        fpos _Tmp = *this;\r\n        _Tmp += _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD fpos operator-(streamoff _Off) const {\r\n        fpos _Tmp = *this;\r\n        _Tmp -= _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD bool operator==(const fpos& _Right) const noexcept /* strengthened */ {\r\n        return static_cast<streamoff>(*this) == static_cast<streamoff>(_Right);\r\n    }\r\n\r\n    template <class _Int, enable_if_t<is_integral_v<_Int>, int> = 0>\r\n    _NODISCARD friend bool operator==(const fpos& _Left, const _Int _Right) noexcept /* strengthened */ {\r\n        return static_cast<streamoff>(_Left) == _Right;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    template <class _Int, enable_if_t<is_integral_v<_Int>, int> = 0>\r\n    _NODISCARD friend bool operator==(const _Int _Left, const fpos& _Right) noexcept /* strengthened */ {\r\n        return _Left == static_cast<streamoff>(_Right);\r\n    }\r\n\r\n    _NODISCARD bool operator!=(const fpos& _Right) const noexcept /* strengthened */ {\r\n        return static_cast<streamoff>(*this) != static_cast<streamoff>(_Right);\r\n    }\r\n\r\n    template <class _Int, enable_if_t<is_integral_v<_Int>, int> = 0>\r\n    _NODISCARD friend bool operator!=(const fpos& _Left, const _Int _Right) noexcept /* strengthened */ {\r\n        return static_cast<streamoff>(_Left) != _Right;\r\n    }\r\n\r\n    template <class _Int, enable_if_t<is_integral_v<_Int>, int> = 0>\r\n    _NODISCARD friend bool operator!=(const _Int _Left, const fpos& _Right) noexcept /* strengthened */ {\r\n        return _Left != static_cast<streamoff>(_Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\nprivate:\r\n    streamoff _Myoff; // stream offset\r\n    fpos_t _Fpos; // TRANSITION, ABI. C file position, not currently used\r\n    _Statetype _Mystate; // current conversion state\r\n};\r\n\r\n_EXPORT_STD using streampos  = fpos<_Mbstatet>;\r\n_EXPORT_STD using wstreampos = streampos;\r\n#ifdef __cpp_lib_char8_t\r\n_EXPORT_STD using u8streampos = streampos;\r\n#endif // defined(__cpp_lib_char8_t)\r\n_EXPORT_STD using u16streampos = streampos;\r\n_EXPORT_STD using u32streampos = streampos;\r\n\r\n_EXPORT_STD extern \"C++\" class locale;\r\n_EXPORT_STD template <class _Facet>\r\nconst _Facet& __CRTDECL use_facet(const locale&);\r\n\r\n_EXPORT_STD template <class _Elem>\r\nstruct char_traits;\r\ntemplate <>\r\nstruct char_traits<char>;\r\n#ifdef __cpp_char8_t\r\ntemplate <>\r\nstruct char_traits<char8_t>;\r\n#endif // defined(__cpp_char8_t)\r\ntemplate <>\r\nstruct char_traits<char16_t>;\r\ntemplate <>\r\nstruct char_traits<char32_t>;\r\ntemplate <>\r\nstruct char_traits<wchar_t>;\r\n#ifdef _CRTBLD\r\ntemplate <>\r\nstruct char_traits<unsigned short>;\r\n#endif // defined(_CRTBLD)\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass allocator;\r\n_EXPORT_STD extern \"C++\" class ios_base;\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass basic_ios;\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass istreambuf_iterator;\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass ostreambuf_iterator;\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass basic_streambuf;\r\n\r\n#pragma vtordisp(push, 2) // compiler bug workaround\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass basic_istream;\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass basic_ostream;\r\n#pragma vtordisp(pop) // compiler bug workaround\r\n\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass basic_iostream;\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>, class _Alloc = allocator<_Elem>>\r\nclass basic_stringbuf;\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>, class _Alloc = allocator<_Elem>>\r\nclass basic_istringstream;\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>, class _Alloc = allocator<_Elem>>\r\nclass basic_ostringstream;\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>, class _Alloc = allocator<_Elem>>\r\nclass basic_stringstream;\r\n#if _HAS_CXX23\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass basic_spanbuf;\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass basic_ispanstream;\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass basic_ospanstream;\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass basic_spanstream;\r\n#endif // _HAS_CXX23\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass basic_filebuf;\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass basic_ifstream;\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass basic_ofstream;\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass basic_fstream;\r\n#if _HAS_CXX20\r\ntemplate <class _Elem, class _Traits = char_traits<_Elem>>\r\nclass _Basic_syncbuf_impl;\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>, class _Alloc = allocator<_Elem>>\r\nclass basic_syncbuf;\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>, class _Alloc = allocator<_Elem>>\r\nclass basic_osyncstream;\r\n#endif // _HAS_CXX20\r\n\r\n#if defined(_DLL_CPPLIB)\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _InIt>\r\nclass num_get;\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _OutIt>\r\nclass num_put;\r\n_EXPORT_STD template <class _Elem>\r\nclass collate;\r\n#endif // defined(_DLL_CPPLIB)\r\n\r\n_EXPORT_STD using ios           = basic_ios<char, char_traits<char>>;\r\n_EXPORT_STD using streambuf     = basic_streambuf<char, char_traits<char>>;\r\n_EXPORT_STD using istream       = basic_istream<char, char_traits<char>>;\r\n_EXPORT_STD using ostream       = basic_ostream<char, char_traits<char>>;\r\n_EXPORT_STD using iostream      = basic_iostream<char, char_traits<char>>;\r\n_EXPORT_STD using stringbuf     = basic_stringbuf<char, char_traits<char>, allocator<char>>;\r\n_EXPORT_STD using istringstream = basic_istringstream<char, char_traits<char>, allocator<char>>;\r\n_EXPORT_STD using ostringstream = basic_ostringstream<char, char_traits<char>, allocator<char>>;\r\n_EXPORT_STD using stringstream  = basic_stringstream<char, char_traits<char>, allocator<char>>;\r\n_EXPORT_STD using filebuf       = basic_filebuf<char, char_traits<char>>;\r\n_EXPORT_STD using ifstream      = basic_ifstream<char, char_traits<char>>;\r\n_EXPORT_STD using ofstream      = basic_ofstream<char, char_traits<char>>;\r\n_EXPORT_STD using fstream       = basic_fstream<char, char_traits<char>>;\r\n#if _HAS_CXX20\r\n_EXPORT_STD using syncbuf     = basic_syncbuf<char>;\r\n_EXPORT_STD using osyncstream = basic_osyncstream<char>;\r\n#endif // _HAS_CXX20\r\n#if _HAS_CXX23\r\n_EXPORT_STD using spanbuf     = basic_spanbuf<char>;\r\n_EXPORT_STD using ispanstream = basic_ispanstream<char>;\r\n_EXPORT_STD using ospanstream = basic_ospanstream<char>;\r\n_EXPORT_STD using spanstream  = basic_spanstream<char>;\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD using wios           = basic_ios<wchar_t, char_traits<wchar_t>>;\r\n_EXPORT_STD using wstreambuf     = basic_streambuf<wchar_t, char_traits<wchar_t>>;\r\n_EXPORT_STD using wistream       = basic_istream<wchar_t, char_traits<wchar_t>>;\r\n_EXPORT_STD using wostream       = basic_ostream<wchar_t, char_traits<wchar_t>>;\r\n_EXPORT_STD using wiostream      = basic_iostream<wchar_t, char_traits<wchar_t>>;\r\n_EXPORT_STD using wstringbuf     = basic_stringbuf<wchar_t, char_traits<wchar_t>, allocator<wchar_t>>;\r\n_EXPORT_STD using wistringstream = basic_istringstream<wchar_t, char_traits<wchar_t>, allocator<wchar_t>>;\r\n_EXPORT_STD using wostringstream = basic_ostringstream<wchar_t, char_traits<wchar_t>, allocator<wchar_t>>;\r\n_EXPORT_STD using wstringstream  = basic_stringstream<wchar_t, char_traits<wchar_t>, allocator<wchar_t>>;\r\n_EXPORT_STD using wfilebuf       = basic_filebuf<wchar_t, char_traits<wchar_t>>;\r\n_EXPORT_STD using wifstream      = basic_ifstream<wchar_t, char_traits<wchar_t>>;\r\n_EXPORT_STD using wofstream      = basic_ofstream<wchar_t, char_traits<wchar_t>>;\r\n_EXPORT_STD using wfstream       = basic_fstream<wchar_t, char_traits<wchar_t>>;\r\n#if _HAS_CXX20\r\n_EXPORT_STD using wsyncbuf     = basic_syncbuf<wchar_t>;\r\n_EXPORT_STD using wosyncstream = basic_osyncstream<wchar_t>;\r\n#endif // _HAS_CXX20\r\n#if _HAS_CXX23\r\n_EXPORT_STD using wspanbuf     = basic_spanbuf<wchar_t>;\r\n_EXPORT_STD using wispanstream = basic_ispanstream<wchar_t>;\r\n_EXPORT_STD using wospanstream = basic_ospanstream<wchar_t>;\r\n_EXPORT_STD using wspanstream  = basic_spanstream<wchar_t>;\r\n#endif // _HAS_CXX23\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _IOSFWD_\r\n"
  },
  {
    "path": "stl/inc/iostream",
    "content": "// iostream standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _IOSTREAM_\r\n#define _IOSTREAM_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <istream>\r\n#include <ostream>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n_STD_BEGIN\r\n#ifdef _M_CEE_PURE\r\n__PURE_APPDOMAIN_GLOBAL extern istream cin;\r\n__PURE_APPDOMAIN_GLOBAL extern ostream cout;\r\n__PURE_APPDOMAIN_GLOBAL extern ostream cerr;\r\n__PURE_APPDOMAIN_GLOBAL extern ostream clog;\r\n__PURE_APPDOMAIN_GLOBAL extern istream* _Ptr_cin;\r\n__PURE_APPDOMAIN_GLOBAL extern ostream* _Ptr_cout;\r\n__PURE_APPDOMAIN_GLOBAL extern ostream* _Ptr_cerr;\r\n__PURE_APPDOMAIN_GLOBAL extern ostream* _Ptr_clog;\r\n\r\n__PURE_APPDOMAIN_GLOBAL extern wistream wcin;\r\n__PURE_APPDOMAIN_GLOBAL extern wostream wcout;\r\n__PURE_APPDOMAIN_GLOBAL extern wostream wcerr;\r\n__PURE_APPDOMAIN_GLOBAL extern wostream wclog;\r\n__PURE_APPDOMAIN_GLOBAL extern wistream* _Ptr_wcin;\r\n__PURE_APPDOMAIN_GLOBAL extern wostream* _Ptr_wcout;\r\n__PURE_APPDOMAIN_GLOBAL extern wostream* _Ptr_wcerr;\r\n__PURE_APPDOMAIN_GLOBAL extern wostream* _Ptr_wclog;\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n_EXPORT_STD extern \"C++\" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT istream cin;\r\n_EXPORT_STD extern \"C++\" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT ostream cout;\r\n_EXPORT_STD extern \"C++\" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT ostream cerr;\r\n_EXPORT_STD extern \"C++\" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT ostream clog;\r\nextern \"C++\" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT istream* _Ptr_cin;\r\nextern \"C++\" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT ostream* _Ptr_cout;\r\nextern \"C++\" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT ostream* _Ptr_cerr;\r\nextern \"C++\" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT ostream* _Ptr_clog;\r\n\r\n_EXPORT_STD extern \"C++\" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT wistream wcin;\r\n_EXPORT_STD extern \"C++\" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT wostream wcout;\r\n_EXPORT_STD extern \"C++\" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT wostream wcerr;\r\n_EXPORT_STD extern \"C++\" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT wostream wclog;\r\nextern \"C++\" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT wistream* _Ptr_wcin;\r\nextern \"C++\" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT wostream* _Ptr_wcout;\r\nextern \"C++\" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT wostream* _Ptr_wcerr;\r\nextern \"C++\" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT wostream* _Ptr_wclog;\r\n\r\n#ifdef _CRTBLD // TRANSITION, ABI: _Winit appears to be unused\r\nclass _CRTIMP2_PURE_IMPORT _Winit {\r\npublic:\r\n    __thiscall _Winit();\r\n    __thiscall ~_Winit() noexcept;\r\n\r\nprivate:\r\n    __PURE_APPDOMAIN_GLOBAL static int _Init_cnt;\r\n};\r\n#endif // defined(_CRTBLD)\r\n\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _IOSTREAM_\r\n"
  },
  {
    "path": "stl/inc/iso646.h",
    "content": "// iso646.h standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _ISO646\r\n#define _ISO646\r\n\r\n#if defined(RC_INVOKED) || defined(Q_MOC_RUN) || defined(__midl)\r\n// do nothing, see _STL_COMPILER_PREPROCESSOR in yvals_core.h\r\n#else // ^^^ non-compiler tools / C and C++ compilers vvv\r\n\r\n#if !defined(__cplusplus) || defined(_MSC_EXTENSIONS)\r\n#define and    &&\r\n#define and_eq &=\r\n#define bitand &\r\n#define bitor  |\r\n#define compl  ~\r\n#define not    !\r\n#define not_eq !=\r\n#define or     ||\r\n#define or_eq  |=\r\n#define xor    ^\r\n#define xor_eq ^=\r\n#endif // !defined(__cplusplus) || defined(_MSC_EXTENSIONS)\r\n\r\n#endif // ^^^ C and C++ compilers ^^^\r\n#endif // _ISO646\r\n"
  },
  {
    "path": "stl/inc/istream",
    "content": "// istream standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _ISTREAM_\r\n#define _ISTREAM_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <__msvc_ostream.hpp>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _Elem>\r\nstruct _NODISCARD _Null_terminator_guard {\r\n    _Elem** _Str_ref;\r\n    ~_Null_terminator_guard() {\r\n        if (_Str_ref) {\r\n            **_Str_ref = _Elem(); // add terminating null character\r\n        }\r\n    }\r\n};\r\n\r\n#pragma vtordisp(push, 2) // compiler bug workaround\r\n\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _Traits>\r\nclass basic_istream : virtual public basic_ios<_Elem, _Traits> { // control extractions from a stream buffer\r\npublic:\r\n    using _Myios = basic_ios<_Elem, _Traits>;\r\n    using _Mysb  = basic_streambuf<_Elem, _Traits>;\r\n    using _Iter  = istreambuf_iterator<_Elem, _Traits>;\r\n    using _Ctype = ctype<_Elem>;\r\n    using _Nget  = num_get<_Elem, _Iter>;\r\n\r\n#if defined(__FORCE_INSTANCE)\r\n    explicit __CLR_OR_THIS_CALL basic_istream(_Mysb* _Strbuf, bool _Isstd, bool _Skip_init) : _Chcount(0) {\r\n        if (!_Skip_init) {\r\n            _Myios::init(_Strbuf, _Isstd);\r\n        }\r\n    }\r\n#endif // defined(__FORCE_INSTANCE)\r\n\r\n    explicit __CLR_OR_THIS_CALL basic_istream(_Mysb* _Strbuf, bool _Isstd = false) : _Chcount(0) {\r\n        _Myios::init(_Strbuf, _Isstd);\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL basic_istream(_Uninitialized) {\r\n        this->_Addstd(this);\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL basic_istream(basic_istream&& _Right) noexcept(false) : _Chcount(_Right._Chcount) {\r\n        _Myios::init();\r\n        _Myios::move(_STD move(_Right));\r\n        _Right._Chcount = 0;\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator=(basic_istream&& _Right) noexcept /* strengthened */ {\r\n        this->swap(_Right);\r\n        return *this;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL swap(basic_istream& _Right) noexcept /* strengthened */ {\r\n        _Myios::swap(_Right);\r\n        _STD swap(_Chcount, _Right._Chcount);\r\n    }\r\n\r\npublic:\r\n    __CLR_OR_THIS_CALL basic_istream(const basic_istream&)            = delete;\r\n    basic_istream& __CLR_OR_THIS_CALL operator=(const basic_istream&) = delete;\r\n\r\n    __CLR_OR_THIS_CALL ~basic_istream() noexcept override {}\r\n\r\n    using int_type = typename _Traits::int_type;\r\n    using pos_type = typename _Traits::pos_type;\r\n    using off_type = typename _Traits::off_type;\r\n\r\n    class _Sentry_base {\r\n    public:\r\n        __CLR_OR_THIS_CALL _Sentry_base(basic_istream& _Istr) : _Myistr(_Istr) {\r\n            const auto _Rdbuf = _Myistr.rdbuf();\r\n            if (_Rdbuf) {\r\n                _Rdbuf->_Lock();\r\n            }\r\n        }\r\n\r\n        __CLR_OR_THIS_CALL ~_Sentry_base() noexcept {\r\n            const auto _Rdbuf = _Myistr.rdbuf();\r\n            if (_Rdbuf) {\r\n                _Rdbuf->_Unlock();\r\n            }\r\n        }\r\n\r\n        basic_istream& _Myistr;\r\n\r\n        _Sentry_base& operator=(const _Sentry_base&) = delete;\r\n    };\r\n\r\n    class sentry : public _Sentry_base {\r\n    public:\r\n        explicit __CLR_OR_THIS_CALL sentry(basic_istream& _Istr, bool _Noskip = false)\r\n            : _Sentry_base(_Istr), _Ok(_Sentry_base::_Myistr._Ipfx(_Noskip)) {}\r\n\r\n        explicit __CLR_OR_THIS_CALL operator bool() const {\r\n            return _Ok;\r\n        }\r\n\r\n        __CLR_OR_THIS_CALL sentry(const sentry&)            = delete;\r\n        sentry& __CLR_OR_THIS_CALL operator=(const sentry&) = delete;\r\n\r\n    private:\r\n        bool _Ok; // true if _Ipfx succeeded at construction\r\n    };\r\n\r\n    bool __CLR_OR_THIS_CALL _Ipfx(bool _Noskip = false) { // test stream state and skip whitespace as needed\r\n        if (!this->good()) {\r\n            _Myios::setstate(ios_base::failbit);\r\n            return false;\r\n        }\r\n\r\n        // state okay, flush tied stream and skip whitespace\r\n        const auto _Tied = _Myios::tie();\r\n        if (_Tied) {\r\n            _Tied->flush();\r\n        }\r\n\r\n        bool _Eof = false;\r\n        if (!_Noskip && this->flags() & ios_base::skipws) { // skip whitespace\r\n            const _Ctype& _Ctype_fac = _STD use_facet<_Ctype>(this->getloc());\r\n\r\n            _TRY_IO_BEGIN\r\n            int_type _Meta = _Myios::rdbuf()->sgetc();\r\n\r\n            for (;; _Meta = _Myios::rdbuf()->snextc()) {\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Meta)) { // end of file, quit\r\n                    _Eof = true;\r\n                    break;\r\n                } else if (!_Ctype_fac.is(_Ctype::space, _Traits::to_char_type(_Meta))) {\r\n                    break; // not whitespace, quit\r\n                }\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        if (_Eof) {\r\n            _Myios::setstate(ios_base::eofbit | ios_base::failbit);\r\n        }\r\n\r\n        return this->good();\r\n    }\r\n\r\n#ifdef _CRTBLD\r\n    // TRANSITION, ABI: non-Standard ipfx() is preserved for binary compatibility\r\n    bool __CLR_OR_THIS_CALL ipfx(bool _Noskip = false) {\r\n        // test stream state and skip whitespace as needed\r\n        return _Ipfx(_Noskip);\r\n    }\r\n\r\n    // TRANSITION, ABI: non-Standard isfx() is preserved for binary compatibility\r\n    void __CLR_OR_THIS_CALL isfx() {} // perform any wrapup\r\n#endif // ^^^ defined(_CRTBLD) ^^^\r\n\r\n#ifdef _M_CEE_PURE\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(basic_istream&(__clrcall* _Pfn)(basic_istream&) ) {\r\n        // call basic_istream manipulator\r\n        return _Pfn(*this);\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(_Myios&(__clrcall* _Pfn)(_Myios&) ) { // call basic_ios manipulator\r\n        _Pfn(*this);\r\n        return *this;\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(ios_base&(__clrcall* _Pfn)(ios_base&) ) { // call ios_base manipulator\r\n        _Pfn(*this);\r\n        return *this;\r\n    }\r\n#endif // defined(_M_CEE_PURE)\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(basic_istream&(__cdecl* _Pfn)(basic_istream&) ) {\r\n        // call basic_istream manipulator\r\n        return _Pfn(*this);\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(_Myios&(__cdecl* _Pfn)(_Myios&) ) { // call basic_ios manipulator\r\n        _Pfn(*this);\r\n        return *this;\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(ios_base&(__cdecl* _Pfn)(ios_base&) ) { // call ios_base manipulator\r\n        _Pfn(*this);\r\n        return *this;\r\n    }\r\n\r\nprivate:\r\n    template <class _Ty>\r\n    basic_istream& _Common_extract_with_num_get(_Ty& _Val) { // formatted extract with num_get\r\n        ios_base::iostate _Err = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (_Ok) { // state okay, use facet to extract\r\n            _TRY_IO_BEGIN\r\n            _STD use_facet<_Nget>(this->getloc()).get(*this, {}, *this, _Err, _Val);\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_Err);\r\n        return *this;\r\n    }\r\n\r\n    template <class = void>\r\n    void _Increment_gcount() noexcept {\r\n        if (_Chcount != _STD _Max_limit<streamsize>()) {\r\n            ++_Chcount;\r\n        }\r\n    }\r\n\r\npublic:\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(bool& _Val) { // extract a boolean\r\n        return _Common_extract_with_num_get(_Val);\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(short& _Val) { // extract a short\r\n        ios_base::iostate _Err = ios_base::goodbit;\r\n        const sentry _Ok(*this);\r\n\r\n        if (_Ok) { // state okay, use facet to extract\r\n            _TRY_IO_BEGIN\r\n            long _Lval;\r\n            _STD use_facet<_Nget>(this->getloc()).get(*this, {}, *this, _Err, _Lval);\r\n            if (_Lval < SHRT_MIN) {\r\n                _Err |= ios_base::failbit;\r\n                _Val = SHRT_MIN;\r\n            } else if (_Lval > SHRT_MAX) {\r\n                _Err |= ios_base::failbit;\r\n                _Val = SHRT_MAX;\r\n            } else {\r\n                _Val = static_cast<short>(_Lval);\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_Err);\r\n        return *this;\r\n    }\r\n\r\n    // NOTE:\r\n    // If you are not using native wchar_t, the unsigned short extractor\r\n    // is masked by an explicit specialization that treats an unsigned\r\n    // short as a wide character.\r\n\r\n    // To read or write unsigned shorts as integers with wchar_t streams,\r\n    // make wchar_t a native type with the command line option /Zc:wchar_t.\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(unsigned short& _Val) { // extract an unsigned short\r\n        return _Common_extract_with_num_get(_Val);\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(int& _Val) { // extract an int\r\n        static_assert(sizeof(int) == sizeof(long), \"Bad overflow assumptions due to sizeof(int) != sizeof(long)\");\r\n        long _Result = _Val;\r\n        _Common_extract_with_num_get(_Result);\r\n        _Val = _Result;\r\n        return *this;\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(unsigned int& _Val) { // extract an unsigned int\r\n        return _Common_extract_with_num_get(_Val);\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(long& _Val) { // extract a long\r\n        return _Common_extract_with_num_get(_Val);\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(unsigned long& _Val) { // extract an unsigned long\r\n        return _Common_extract_with_num_get(_Val);\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(long long& _Val) { // extract a long long\r\n        return _Common_extract_with_num_get(_Val);\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(unsigned long long& _Val) { // extract an unsigned long long\r\n        return _Common_extract_with_num_get(_Val);\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(float& _Val) { // extract a float\r\n        return _Common_extract_with_num_get(_Val);\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(double& _Val) { // extract a double\r\n        return _Common_extract_with_num_get(_Val);\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(long double& _Val) { // extract a long double\r\n        return _Common_extract_with_num_get(_Val);\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(void*& _Val) { // extract a void pointer\r\n        return _Common_extract_with_num_get(_Val);\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL operator>>(_Mysb* _Strbuf) { // extract until end-of-file into a stream buffer\r\n        _Chcount = 0; // behaves as an unformatted input function\r\n        const sentry _Ok(*this, true);\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        if (_Ok && _Strbuf) { // state okay, extract characters\r\n            _TRY_IO_BEGIN\r\n            for (int_type _Meta = _Myios::rdbuf()->sgetc();; _Meta = _Myios::rdbuf()->snextc()) {\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Meta)) { // end of file, quit\r\n                    _State |= ios_base::eofbit;\r\n                    break;\r\n                }\r\n                // got a character, insert it into buffer\r\n                _TRY_BEGIN\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Strbuf->sputc(_Traits::to_char_type(_Meta)))) {\r\n                    break;\r\n                }\r\n\r\n                _CATCH_ALL\r\n                break;\r\n                _CATCH_END\r\n\r\n                _Increment_gcount();\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        if (_Chcount == 0) { // If the function inserts no characters, it calls setstate(failbit)\r\n            _State |= ios_base::failbit;\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    int_type __CLR_OR_THIS_CALL get() { // extract a metacharacter\r\n        int_type _Meta           = 0;\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        _Chcount                 = 0;\r\n        const sentry _Ok(*this, true);\r\n\r\n        if (!_Ok) {\r\n            _Meta = _Traits::eof(); // state not okay, return EOF\r\n        } else { // state okay, extract a character\r\n            _TRY_IO_BEGIN\r\n            _Meta = _Myios::rdbuf()->sgetc();\r\n\r\n            if (_Traits::eq_int_type(_Traits::eof(), _Meta)) {\r\n                _State |= ios_base::eofbit | ios_base::failbit; // end of file\r\n            } else { // got a character, count it\r\n                _Myios::rdbuf()->sbumpc();\r\n                _Chcount = 1;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return _Meta;\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL get(_Elem* _Str, streamsize _Count) { // get up to _Count characters into NTCS\r\n        return get(_Str, _Count, _Myios::widen('\\n'));\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL get(_Elem* _Str, streamsize _Count, _Elem _Delim) {\r\n        // get up to _Count characters into NTCS, stop before _Delim\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        _Chcount                 = 0;\r\n\r\n        // ensure null termination of buffer with nonzero length\r\n        const _Null_terminator_guard<_Elem> _Guard{0 < _Count ? &_Str : nullptr};\r\n\r\n        const sentry _Ok(*this, true);\r\n\r\n        if (_Ok && 0 < _Count) { // state okay, extract characters\r\n            _TRY_IO_BEGIN\r\n            int_type _Meta = _Myios::rdbuf()->sgetc();\r\n\r\n            for (; 0 < --_Count; _Meta = _Myios::rdbuf()->snextc()) {\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Meta)) { // end of file, quit\r\n                    _State |= ios_base::eofbit;\r\n                    break;\r\n                } else if (_Traits::to_char_type(_Meta) == _Delim) {\r\n                    break; // got a delimiter, quit\r\n                } else { // got a character, add it to string\r\n                    *_Str++ = _Traits::to_char_type(_Meta);\r\n                    _Increment_gcount();\r\n                }\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_Chcount == 0 ? _State | ios_base::failbit : _State);\r\n        return *this;\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL get(_Elem& _Ch) { // get a character\r\n        int_type _Meta = get();\r\n        if (!_Traits::eq_int_type(_Traits::eof(), _Meta)) {\r\n            _Ch = _Traits::to_char_type(_Meta);\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL get(_Mysb& _Strbuf) { // extract up to newline and insert into stream buffer\r\n        return get(_Strbuf, _Myios::widen('\\n'));\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL get(_Mysb& _Strbuf, _Elem _Delim) {\r\n        // extract up to delimiter and insert into stream buffer\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        _Chcount                 = 0;\r\n        const sentry _Ok(*this, true);\r\n\r\n        if (_Ok) { // state okay, use facet to extract\r\n            _TRY_IO_BEGIN\r\n            int_type _Meta = _Myios::rdbuf()->sgetc();\r\n\r\n            for (;; _Meta = _Myios::rdbuf()->snextc()) {\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Meta)) { // end of file, quit\r\n                    _State |= ios_base::eofbit;\r\n                    break;\r\n                } else { // got a character, insert it into stream buffer\r\n                    _TRY_BEGIN\r\n                    _Elem _Ch = _Traits::to_char_type(_Meta);\r\n                    if (_Ch == _Delim || _Traits::eq_int_type(_Traits::eof(), _Strbuf.sputc(_Ch))) {\r\n                        break;\r\n                    }\r\n                    _CATCH_ALL\r\n                    break;\r\n                    _CATCH_END\r\n                    _Increment_gcount();\r\n                }\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        if (_Chcount == 0) {\r\n            _State |= ios_base::failbit;\r\n        }\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL getline(_Elem* _Str, streamsize _Count) {\r\n        // get up to _Count characters into NTCS, discard newline\r\n        return getline(_Str, _Count, _Myios::widen('\\n'));\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL getline(_Elem* _Str, streamsize _Count, _Elem _Delim) {\r\n        // get up to _Count characters into NTCS, discard _Delim\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        _Chcount                 = 0;\r\n\r\n        // ensure null termination of buffer with nonzero length\r\n        const _Null_terminator_guard<_Elem> _Guard{0 < _Count ? &_Str : nullptr};\r\n\r\n        const sentry _Ok(*this, true);\r\n\r\n        if (_Ok && 0 < _Count) { // state okay, use facet to extract\r\n            int_type _Metadelim = _Traits::to_int_type(_Delim);\r\n\r\n            _TRY_IO_BEGIN\r\n            int_type _Meta = _Myios::rdbuf()->sgetc();\r\n\r\n            for (;; _Meta = _Myios::rdbuf()->snextc()) {\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Meta)) { // end of file, quit\r\n                    _State |= ios_base::eofbit;\r\n                    break;\r\n                } else if (_Meta == _Metadelim) { // got a delimiter, discard it and quit\r\n                    _Increment_gcount();\r\n                    _Myios::rdbuf()->sbumpc();\r\n                    break;\r\n                } else if (--_Count <= 0) { // buffer full, quit\r\n                    _State |= ios_base::failbit;\r\n                    break;\r\n                } else { // got a character, add it to string\r\n                    *_Str++ = _Traits::to_char_type(_Meta);\r\n                    _Increment_gcount();\r\n                }\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_Chcount == 0 ? _State | ios_base::failbit : _State);\r\n        return *this;\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL ignore(streamsize _Count = 1, int_type _Metadelim = _Traits::eof()) {\r\n        // ignore up to _Count characters, discarding delimiter\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        _Chcount                 = 0;\r\n        const sentry _Ok(*this, true);\r\n\r\n        if (_Ok && 0 < _Count) { // state okay, use facet to extract\r\n            _TRY_IO_BEGIN\r\n            for (;;) { // get a metacharacter if more room in buffer\r\n                int_type _Meta;\r\n                if (_Count != _STD _Max_limit<streamsize>() && --_Count < 0) {\r\n                    break; // buffer full, quit\r\n                } else if (_Traits::eq_int_type(_Traits::eof(),\r\n                               _Meta = _Myios::rdbuf()->sbumpc())) { // end of file, quit\r\n                    _State |= ios_base::eofbit;\r\n                    break;\r\n                } else { // got a character, count it\r\n                    _Increment_gcount();\r\n                    if (_Meta == _Metadelim) {\r\n                        break; // got a delimiter, quit\r\n                    }\r\n                }\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    template <class _CharType = _Elem, enable_if_t<is_same_v<_CharType, char>, int> = 0>\r\n    basic_istream& ignore(const streamsize _Count, const _Elem _Delim) {\r\n        return ignore(_Count, _Traits::to_int_type(_Delim));\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL read(_Elem* _Str, streamsize _Count) { // read up to _Count characters into buffer\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        _Chcount                 = 0;\r\n        const sentry _Ok(*this, true);\r\n\r\n        if (_Ok && 0 < _Count) { // state okay, use facet to extract\r\n            _TRY_IO_BEGIN\r\n            const streamsize _Num = _Myios::rdbuf()->sgetn(_Str, _Count);\r\n            _Chcount              = _Num;\r\n\r\n            if (_Num != _Count) {\r\n                _State |= ios_base::eofbit | ios_base::failbit; // short read\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    streamsize __CLR_OR_THIS_CALL readsome(_Elem* _Str, streamsize _Count) {\r\n        // read up to _Count characters into buffer, without blocking\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        _Chcount                 = 0;\r\n        const sentry _Ok(*this, true);\r\n        streamsize _Num;\r\n\r\n        if (!_Ok) {\r\n            _State |= ios_base::failbit; // no buffer, fail\r\n        } else if ((_Num = _Myios::rdbuf()->in_avail()) < 0) {\r\n            _State |= ios_base::eofbit; // no characters available\r\n        } else if (0 < _Count && 0 < _Num) { // read available\r\n            read(_Str, _Num < _Count ? _Num : _Count);\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return gcount();\r\n    }\r\n\r\n    int_type __CLR_OR_THIS_CALL peek() {\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        _Chcount                 = 0;\r\n        int_type _Meta           = 0;\r\n        const sentry _Ok(*this, true);\r\n\r\n        if (!_Ok) {\r\n            _Meta = _Traits::eof(); // state not okay, return EOF\r\n        } else { // state okay, read a character\r\n            _TRY_IO_BEGIN\r\n            if (_Traits::eq_int_type(_Traits::eof(), _Meta = _Myios::rdbuf()->sgetc())) {\r\n                _State |= ios_base::eofbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return _Meta;\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL putback(_Elem _Ch) { // put back a character\r\n        _Chcount                    = 0;\r\n        ios_base::iostate _State    = ios_base::goodbit;\r\n        ios_base::iostate _Oldstate = _Myios::rdstate();\r\n        _Myios::clear(_Oldstate & ~ios_base::eofbit);\r\n        const sentry _Ok(*this, true);\r\n\r\n        if (_Ok) { // state okay, put character back\r\n            _TRY_IO_BEGIN\r\n            if (_Traits::eq_int_type(_Traits::eof(), _Myios::rdbuf()->sputbackc(_Ch))) {\r\n                _State |= ios_base::badbit | _Oldstate;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL unget() { // put back last read character\r\n        _Chcount                    = 0;\r\n        ios_base::iostate _State    = ios_base::goodbit;\r\n        ios_base::iostate _Oldstate = _Myios::rdstate();\r\n        _Myios::clear(_Oldstate & ~ios_base::eofbit);\r\n        const sentry _Ok(*this, true);\r\n\r\n        if (_Ok) { // state okay, put character back\r\n            _TRY_IO_BEGIN\r\n            if (_Traits::eq_int_type(_Traits::eof(), _Myios::rdbuf()->sungetc())) {\r\n                _State |= ios_base::badbit | _Oldstate;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD streamsize __CLR_OR_THIS_CALL gcount() const noexcept /* strengthened */ {\r\n        // get count from last extraction\r\n        return _Chcount;\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL sync() { // synchronize with input source\r\n        const sentry _Ok(*this, true);\r\n\r\n        const auto _Rdbuf = _Myios::rdbuf();\r\n        if (!_Rdbuf) {\r\n            return -1;\r\n        }\r\n\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        _TRY_BEGIN\r\n        if (_Rdbuf->pubsync() == -1) {\r\n            _State |= ios_base::badbit;\r\n        }\r\n        _CATCH_ALL\r\n        _Myios::setstate(ios_base::badbit, true);\r\n        return -1;\r\n        _CATCH_END\r\n\r\n        if (_State & ios_base::badbit) {\r\n            _Myios::setstate(ios_base::badbit);\r\n            return -1;\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL seekg(pos_type _Pos) { // set input stream position to _Pos\r\n        ios_base::iostate _State    = ios_base::goodbit;\r\n        ios_base::iostate _Oldstate = _Myios::rdstate();\r\n        _Myios::clear(_Oldstate & ~ios_base::eofbit);\r\n        const sentry _Ok(*this, true);\r\n\r\n        if (!this->fail()) {\r\n            _TRY_IO_BEGIN\r\n            if (static_cast<off_type>(_Myios::rdbuf()->pubseekpos(_Pos, ios_base::in)) == -1) {\r\n                _State |= ios_base::failbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    basic_istream& __CLR_OR_THIS_CALL seekg(off_type _Off, ios_base::seekdir _Way) {\r\n        // change input stream position by _Off, according to _Way\r\n        ios_base::iostate _State    = ios_base::goodbit;\r\n        ios_base::iostate _Oldstate = _Myios::rdstate();\r\n        _Myios::clear(_Oldstate & ~ios_base::eofbit);\r\n        const sentry _Ok(*this, true);\r\n\r\n        if (!this->fail()) {\r\n            _TRY_IO_BEGIN\r\n            if (static_cast<off_type>(_Myios::rdbuf()->pubseekoff(_Off, _Way, ios_base::in)) == -1) {\r\n                _State |= ios_base::failbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        _Myios::setstate(_State);\r\n        return *this;\r\n    }\r\n\r\n    pos_type __CLR_OR_THIS_CALL tellg() {\r\n        const sentry _Ok(*this, true);\r\n\r\n        if (!this->fail()) {\r\n            _TRY_IO_BEGIN\r\n            return _Myios::rdbuf()->pubseekoff(0, ios_base::cur, ios_base::in);\r\n            _CATCH_IO_END\r\n        }\r\n\r\n        return pos_type{off_type{-1}};\r\n    }\r\n\r\nprivate:\r\n    streamsize _Chcount{}; // the character count\r\n};\r\n\r\n#pragma vtordisp(pop) // compiler bug workaround\r\n\r\n#ifndef _NATIVE_WCHAR_T_DEFINED\r\ntemplate <class _Elem, class _Traits>\r\nbasic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr, _Elem& _Ch);\r\n\r\n// NOTE:\r\n// If you are not using native wchar_t, the following explicit\r\n// specialization will mask the member function (above) that treats\r\n// an unsigned short as an integer.\r\n\r\n// To read or write unsigned shorts as integers with wchar_t streams,\r\n// make wchar_t a native type with the command line option /Zc:wchar_t.\r\n\r\ntemplate <>\r\ninline basic_istream<unsigned short, char_traits<unsigned short>>& __CLR_OR_THIS_CALL basic_istream<unsigned short,\r\n    char_traits<unsigned short>>::operator>>(unsigned short& _Ch) { // extract a character\r\n    return _STD operator>>(*this, _Ch);\r\n}\r\n#endif // !defined(_NATIVE_WCHAR_T_DEFINED)\r\n\r\n#if defined(_DLL_CPPLIB)\r\n\r\n#if !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\ntemplate class _CRTIMP2_PURE_IMPORT basic_istream<char, char_traits<char>>;\r\ntemplate class _CRTIMP2_PURE_IMPORT basic_istream<wchar_t, char_traits<wchar_t>>;\r\n#endif // !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\n\r\n#ifdef __FORCE_INSTANCE\r\ntemplate class _CRTIMP2_PURE_IMPORT basic_istream<unsigned short, char_traits<unsigned short>>;\r\n#endif // defined(__FORCE_INSTANCE)\r\n#endif // defined(_DLL_CPPLIB)\r\n\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _Traits>\r\nclass basic_iostream : public basic_istream<_Elem, _Traits>,\r\n                       public basic_ostream<_Elem, _Traits> { // control insertions and extractions from a stream buffer\r\npublic:\r\n    using _Myis       = basic_istream<_Elem, _Traits>;\r\n    using _Myos       = basic_ostream<_Elem, _Traits>;\r\n    using _Myios      = basic_ios<_Elem, _Traits>;\r\n    using char_type   = _Elem;\r\n    using traits_type = _Traits;\r\n    using int_type    = typename _Traits::int_type;\r\n    using pos_type    = typename _Traits::pos_type;\r\n    using off_type    = typename _Traits::off_type;\r\n\r\n    explicit __CLR_OR_THIS_CALL basic_iostream(basic_streambuf<_Elem, _Traits>* _Strbuf)\r\n        : _Myis(_Strbuf, false), _Myos(_Noinit, false) {}\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL basic_iostream(basic_iostream&& _Right) noexcept(false)\r\n        : _Myis(_Right.rdbuf(), false), _Myos(_Noinit, false) {\r\n        _Myios::init();\r\n        _Myios::move(_STD move(_Right));\r\n    }\r\n\r\n    basic_iostream& __CLR_OR_THIS_CALL operator=(basic_iostream&& _Right) noexcept /* strengthened */ {\r\n        this->swap(_Right);\r\n        return *this;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL swap(basic_iostream& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Myios::swap(_Right);\r\n        }\r\n    }\r\n\r\npublic:\r\n    __CLR_OR_THIS_CALL basic_iostream(const basic_iostream&)            = delete;\r\n    basic_iostream& __CLR_OR_THIS_CALL operator=(const basic_iostream&) = delete;\r\n\r\n    __CLR_OR_THIS_CALL ~basic_iostream() noexcept override {}\r\n};\r\n\r\n#if defined(_DLL_CPPLIB)\r\n\r\n#if !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\ntemplate class _CRTIMP2_PURE_IMPORT basic_iostream<char, char_traits<char>>;\r\ntemplate class _CRTIMP2_PURE_IMPORT basic_iostream<wchar_t, char_traits<wchar_t>>;\r\n#endif // !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\n\r\n#ifdef __FORCE_INSTANCE\r\ntemplate class _CRTIMP2_PURE_IMPORT basic_iostream<unsigned short, char_traits<unsigned short>>;\r\n#endif // defined(__FORCE_INSTANCE)\r\n#endif // defined(_DLL_CPPLIB)\r\n\r\ntemplate <class _Elem, class _Traits>\r\nbasic_istream<_Elem, _Traits>& _Istream_extract_into_buffer(\r\n    basic_istream<_Elem, _Traits>& _Istr, size_t _Size, _Elem* _Str) {\r\n    using _Myis              = basic_istream<_Elem, _Traits>;\r\n    using _Ctype             = ctype<_Elem>;\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n    size_t _Current          = 0;\r\n    const typename _Myis::sentry _Ok(_Istr);\r\n\r\n    if (_Ok) { // state okay, extract characters\r\n        const _Ctype& _Ctype_fac = _STD use_facet<_Ctype>(_Istr.getloc());\r\n\r\n        _TRY_IO_BEGIN\r\n        size_t _Count       = _Size;\r\n        const size_t _Width = static_cast<size_t>(_Istr.width());\r\n        if (_Width > 0 && _Width < _Size) {\r\n            _Count = _Width;\r\n        }\r\n\r\n        typename _Myis::int_type _Meta = _Istr.rdbuf()->sgetc();\r\n        _Elem _Ch;\r\n\r\n        for (; _Current < _Count - 1; _Meta = _Istr.rdbuf()->snextc(), (void) ++_Current) {\r\n            if (_Traits::eq_int_type(_Traits::eof(), _Meta)) { // end of file, quit\r\n                _State |= ios_base::eofbit;\r\n                break;\r\n            } else if (_Ctype_fac.is(_Ctype::space, _Ch = _Traits::to_char_type(_Meta)) || _Ch == _Elem()) {\r\n                break; // whitespace or nul, quit\r\n            } else {\r\n                _Str[_Current] = _Traits::to_char_type(_Meta); // add it to string\r\n            }\r\n        }\r\n        _CATCH_IO_(ios_base, _Istr)\r\n    }\r\n    _Analysis_assume_(static_cast<size_t>(_Current) < _Size); // TRANSITION, VSO-860375\r\n    _Str[_Current] = _Elem(); // add terminating null character\r\n    _Istr.width(0);\r\n    if (_Current == 0) {\r\n        _State |= ios_base::failbit;\r\n    }\r\n    _Istr.setstate(_State);\r\n    return _Istr;\r\n}\r\n\r\n#if _HAS_CXX20 // P0487R1 Fixing operator>>(basic_istream&, CharT*)\r\n#pragma warning(push)\r\n#pragma warning(disable : 6001) // Using uninitialized memory '_Str'.\r\n_EXPORT_STD template <class _Elem, class _Traits, size_t _Size>\r\nbasic_istream<_Elem, _Traits>& operator>>(\r\n    basic_istream<_Elem, _Traits>& _Istr, _Out_writes_z_(_Size) _Elem (&_Str)[_Size]) {\r\n    return _Istream_extract_into_buffer(_Istr, _Size, _Str);\r\n}\r\n\r\n_EXPORT_STD template <class _Traits, size_t _Size>\r\nbasic_istream<char, _Traits>& operator>>(\r\n    basic_istream<char, _Traits>& _Istr, _Out_writes_z_(_Size) signed char (&_Str)[_Size]) {\r\n    return _Istream_extract_into_buffer(_Istr, _Size, reinterpret_cast<char*>(_Str));\r\n}\r\n\r\n_EXPORT_STD template <class _Traits, size_t _Size>\r\nbasic_istream<char, _Traits>& operator>>(\r\n    basic_istream<char, _Traits>& _Istr, _Out_writes_z_(_Size) unsigned char (&_Str)[_Size]) {\r\n    return _Istream_extract_into_buffer(_Istr, _Size, reinterpret_cast<char*>(_Str));\r\n}\r\n#pragma warning(pop)\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Elem, class _Traits>\r\nbasic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr, _Elem* _Str) {\r\n    return _Istream_extract_into_buffer(_Istr, SIZE_MAX, _Str);\r\n}\r\n\r\ntemplate <class _Traits>\r\nbasic_istream<char, _Traits>& operator>>(basic_istream<char, _Traits>& _Istr, signed char* _Str) {\r\n    return _Istream_extract_into_buffer(_Istr, SIZE_MAX, reinterpret_cast<char*>(_Str));\r\n}\r\n\r\ntemplate <class _Traits>\r\nbasic_istream<char, _Traits>& operator>>(basic_istream<char, _Traits>& _Istr, unsigned char* _Str) {\r\n    return _Istream_extract_into_buffer(_Istr, SIZE_MAX, reinterpret_cast<char*>(_Str));\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr, _Elem& _Ch) { // extract a character\r\n    using _Myis = basic_istream<_Elem, _Traits>;\r\n\r\n    typename _Myis::int_type _Meta;\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n    const typename _Myis::sentry _Ok(_Istr);\r\n\r\n    if (_Ok) { // state okay, extract characters\r\n        _TRY_IO_BEGIN\r\n        _Meta = _Istr.rdbuf()->sbumpc();\r\n        if (_Traits::eq_int_type(_Traits::eof(), _Meta)) {\r\n            _State |= ios_base::eofbit | ios_base::failbit; // end of file\r\n        } else {\r\n            _Ch = _Traits::to_char_type(_Meta); // got a character\r\n        }\r\n        _CATCH_IO_(ios_base, _Istr)\r\n    }\r\n\r\n    _Istr.setstate(_State);\r\n    return _Istr;\r\n}\r\n\r\n_EXPORT_STD template <class _Traits>\r\nbasic_istream<char, _Traits>& operator>>(basic_istream<char, _Traits>& _Istr, signed char& _Ch) {\r\n    // extract a signed char\r\n    return _Istr >> reinterpret_cast<char&>(_Ch);\r\n}\r\n\r\n_EXPORT_STD template <class _Traits>\r\nbasic_istream<char, _Traits>& operator>>(basic_istream<char, _Traits>& _Istr, unsigned char& _Ch) {\r\n    // extract an unsigned char\r\n    return _Istr >> reinterpret_cast<char&>(_Ch);\r\n}\r\n\r\ntemplate <class _Istr, class _Ty, class = void>\r\nstruct _Can_stream_in : false_type {};\r\n\r\ntemplate <class _Istr, class _Ty>\r\nstruct _Can_stream_in<_Istr, _Ty, void_t<decltype(_STD declval<_Istr&>() >> _STD declval<_Ty>())>> : true_type {};\r\n\r\n_EXPORT_STD template <class _Istr, class _Ty,\r\n    enable_if_t<conjunction_v<is_convertible<_Istr*, ios_base*>, _Can_stream_in<_Istr, _Ty>>, int> = 0>\r\n_Istr&& operator>>(_Istr&& _Is, _Ty&& _Val) { // extract from rvalue stream\r\n    _Is >> _STD forward<_Ty>(_Val);\r\n    return _STD move(_Is);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_istream<_Elem, _Traits>& __CLRCALL_OR_CDECL ws(basic_istream<_Elem, _Traits>& _Istr) { // consume whitespace\r\n    const typename basic_istream<_Elem, _Traits>::sentry _Ok(_Istr, true);\r\n\r\n    if (_Ok) { // state okay, extract characters\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const auto& _Ctype_fac   = _STD use_facet<ctype<_Elem>>(_Istr.getloc());\r\n\r\n        _TRY_IO_BEGIN\r\n        for (typename _Traits::int_type _Meta = _Istr.rdbuf()->sgetc();; _Meta = _Istr.rdbuf()->snextc()) {\r\n            if (_Traits::eq_int_type(_Traits::eof(), _Meta)) { // end of file, quit\r\n                _State |= ios_base::eofbit;\r\n                break;\r\n            } else if (!_Ctype_fac.is(ctype<_Elem>::space, _Traits::to_char_type(_Meta))) {\r\n                break; // not whitespace, quit\r\n            }\r\n        }\r\n        _CATCH_IO_(ios_base, _Istr)\r\n        _Istr.setstate(_State);\r\n    }\r\n\r\n    return _Istr;\r\n}\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _ISTREAM_\r\n"
  },
  {
    "path": "stl/inc/iterator",
    "content": "// iterator standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _ITERATOR_\r\n#define _ITERATOR_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <iosfwd>\r\n#include <xutility>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD template <class _Container>\r\nclass back_insert_iterator { // wrap pushes to back of container as output iterator\r\npublic:\r\n    using iterator_category = output_iterator_tag;\r\n    using value_type        = void;\r\n    using pointer           = void;\r\n    using reference         = void;\r\n\r\n    using container_type = _Container;\r\n\r\n#if _HAS_CXX20\r\n    using difference_type = ptrdiff_t;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    using difference_type = void;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    _CONSTEXPR20 explicit back_insert_iterator(_Container& _Cont) noexcept /* strengthened */\r\n        : container(_STD addressof(_Cont)) {}\r\n\r\n    _CONSTEXPR20 back_insert_iterator& operator=(const typename _Container::value_type& _Val) {\r\n        container->push_back(_Val);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 back_insert_iterator& operator=(typename _Container::value_type&& _Val) {\r\n        container->push_back(_STD move(_Val));\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 back_insert_iterator& operator*() noexcept /* strengthened */ {\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 back_insert_iterator& operator++() noexcept /* strengthened */ {\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 back_insert_iterator operator++(int) noexcept /* strengthened */ {\r\n        return *this;\r\n    }\r\n\r\nprotected:\r\n    _Container* container;\r\n};\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD _CONSTEXPR20 back_insert_iterator<_Container> back_inserter(_Container& _Cont) noexcept /* strengthened */ {\r\n    // return a back_insert_iterator\r\n    return back_insert_iterator<_Container>(_Cont);\r\n}\r\n\r\n_EXPORT_STD template <class _Container>\r\nclass front_insert_iterator { // wrap pushes to front of container as output iterator\r\npublic:\r\n    using iterator_category = output_iterator_tag;\r\n    using value_type        = void;\r\n    using pointer           = void;\r\n    using reference         = void;\r\n\r\n    using container_type = _Container;\r\n\r\n#if _HAS_CXX20\r\n    using difference_type = ptrdiff_t;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    using difference_type = void;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    _CONSTEXPR20 explicit front_insert_iterator(_Container& _Cont) : container(_STD addressof(_Cont)) {}\r\n\r\n    _CONSTEXPR20 front_insert_iterator& operator=(const typename _Container::value_type& _Val) {\r\n        // push value into container\r\n        container->push_front(_Val);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 front_insert_iterator& operator=(typename _Container::value_type&& _Val) { // push value into container\r\n        container->push_front(_STD move(_Val));\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 front_insert_iterator& operator*() { // pretend to return designated value\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 front_insert_iterator& operator++() { // pretend to preincrement\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 front_insert_iterator operator++(int) { // pretend to postincrement\r\n        return *this;\r\n    }\r\n\r\nprotected:\r\n    _Container* container;\r\n};\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD _CONSTEXPR20 front_insert_iterator<_Container> front_inserter(_Container& _Cont) {\r\n    return front_insert_iterator<_Container>(_Cont);\r\n}\r\n\r\n_EXPORT_STD template <class _Container>\r\nclass insert_iterator { // wrap inserts into container as output iterator\r\npublic:\r\n    using iterator_category = output_iterator_tag;\r\n    using value_type        = void;\r\n    using pointer           = void;\r\n    using reference         = void;\r\n\r\n    using container_type = _Container;\r\n#if _HAS_CXX20\r\n    using difference_type = ptrdiff_t;\r\n    using _Wrapped_iter   = ranges::iterator_t<_Container>;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    using difference_type = void;\r\n    using _Wrapped_iter   = typename _Container::iterator;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    _CONSTEXPR20 insert_iterator(_Container& _Cont, _Wrapped_iter _Where)\r\n        : container(_STD addressof(_Cont)), iter(_STD move(_Where)) {}\r\n\r\n    _CONSTEXPR20 insert_iterator& operator=(const typename _Container::value_type& _Val) {\r\n        // insert into container and increment stored iterator\r\n        iter = container->insert(iter, _Val);\r\n        ++iter;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 insert_iterator& operator=(typename _Container::value_type&& _Val) { // push value into container\r\n        iter = container->insert(iter, _STD move(_Val));\r\n        ++iter;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 insert_iterator& operator*() { // pretend to return designated value\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 insert_iterator& operator++() { // pretend to preincrement\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 insert_iterator& operator++(int) { // pretend to postincrement\r\n        return *this;\r\n    }\r\n\r\nprotected:\r\n    _Container* container;\r\n    _Wrapped_iter iter;\r\n};\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _Container>\r\n_NODISCARD _CONSTEXPR20 insert_iterator<_Container> inserter(_Container& _Cont, typename _Container::iterator _Where) {\r\n    return insert_iterator<_Container>(_Cont, _Where);\r\n}\r\n#else // ^^^ !_HAS_CXX20 / _HAS_CXX20 vvv\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD constexpr insert_iterator<_Container> inserter(_Container& _Cont, _RANGES iterator_t<_Container> _Where) {\r\n    return insert_iterator<_Container>(_Cont, _Where);\r\n}\r\n\r\n_EXPORT_STD template <semiregular _Se>\r\nclass move_sentinel {\r\npublic:\r\n    constexpr move_sentinel() = default;\r\n\r\n    constexpr explicit move_sentinel(_Se _Val) noexcept(is_nothrow_move_constructible_v<_Se>) // strengthened\r\n        : _Last(_STD move(_Val)) {}\r\n\r\n    template <class _Se2>\r\n        requires convertible_to<const _Se2&, _Se>\r\n    constexpr move_sentinel(const move_sentinel<_Se2>& _Val)\r\n        noexcept(is_nothrow_constructible_v<_Se, const _Se2&>) // strengthened\r\n        : _Last(_Val._Get_last()) {}\r\n\r\n    template <class _Se2>\r\n        requires assignable_from<_Se&, const _Se2&>\r\n    constexpr move_sentinel& operator=(const move_sentinel<_Se2>& _Val)\r\n        noexcept(is_nothrow_assignable_v<_Se&, const _Se2&>) /* strengthened */ {\r\n        _Last = _Val._Get_last();\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD constexpr _Se base() const noexcept(is_nothrow_copy_constructible_v<_Se>) /* strengthened */ {\r\n        return _Last;\r\n    }\r\n\r\n    _NODISCARD constexpr const _Se& _Get_last() const noexcept {\r\n        return _Last;\r\n    }\r\n\r\n    using _Prevent_inheriting_unwrap = move_sentinel;\r\n\r\n    _NODISCARD constexpr move_sentinel<_Unwrapped_t<const _Se&>> _Unwrapped() const& noexcept(\r\n        noexcept(move_sentinel<_Unwrapped_t<const _Se&>>{_Last._Unwrapped()}))\r\n        requires (_RANGES _Weakly_unwrappable_sentinel<_Se>)\r\n    {\r\n        return move_sentinel<_Unwrapped_t<const _Se&>>{_Last._Unwrapped()};\r\n    }\r\n    _NODISCARD constexpr move_sentinel<_Unwrapped_t<_Se>> _Unwrapped() && noexcept(\r\n        noexcept(move_sentinel<_Unwrapped_t<_Se>>{_STD move(_Last)._Unwrapped()}))\r\n        requires (_RANGES _Weakly_unwrappable_sentinel<_Se>)\r\n    {\r\n        return move_sentinel<_Unwrapped_t<_Se>>{_STD move(_Last)._Unwrapped()};\r\n    }\r\n\r\nprivate:\r\n    _Se _Last{};\r\n};\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class _Ty, class _Elem = char, class _Traits = char_traits<_Elem>, class _Diff = ptrdiff_t>\r\nclass istream_iterator {\r\npublic:\r\n    using iterator_category = input_iterator_tag;\r\n    using value_type        = _Ty;\r\n    using difference_type   = _Diff;\r\n    using pointer           = const _Ty*;\r\n    using reference         = const _Ty&;\r\n    using char_type         = _Elem;\r\n    using traits_type       = _Traits;\r\n    using istream_type      = basic_istream<_Elem, _Traits>;\r\n\r\n    static_assert(conjunction_v<is_default_constructible<_Ty>, is_copy_constructible<_Ty>, is_copy_assignable<_Ty>>,\r\n        \"istream_iterator<T> requires T to be default constructible, copy constructible, and copy assignable. \"\r\n        \"(N4950 [istream.iterator]/2)\");\r\n\r\n    constexpr istream_iterator() noexcept(is_nothrow_default_constructible_v<_Ty>) /* strengthened */ {}\r\n\r\n#if _HAS_CXX20\r\n    constexpr istream_iterator(default_sentinel_t)\r\n        noexcept(is_nothrow_default_constructible_v<_Ty>) /* strengthened */ {}\r\n#endif // _HAS_CXX20\r\n\r\n    istream_iterator(istream_type& _Istr) : _Myistr(_STD addressof(_Istr)) {\r\n        _Getval();\r\n    }\r\n\r\n    _NODISCARD const _Ty& operator*() const noexcept /* strengthened */ {\r\n        _STL_ASSERT(_Myistr, \"The stored stream pointer in_stream must be non-null\");\r\n        return _Myval;\r\n    }\r\n\r\n    _NODISCARD const _Ty* operator->() const noexcept /* strengthened */ {\r\n        _STL_ASSERT(_Myistr, \"The stored stream pointer in_stream must be non-null\");\r\n        return _STD addressof(_Myval);\r\n    }\r\n\r\n    istream_iterator& operator++() {\r\n        _Getval();\r\n        return *this;\r\n    }\r\n\r\n    istream_iterator operator++(int) {\r\n        istream_iterator _Tmp = *this;\r\n        _Getval();\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD bool _Equal(const istream_iterator& _Right) const noexcept {\r\n        return _Myistr == _Right._Myistr;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD friend bool operator==(const istream_iterator& _Left, default_sentinel_t) noexcept /* strengthened */ {\r\n        return !_Left._Myistr;\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\nprivate:\r\n    void _Getval() { // get a _Ty value if possible\r\n        _STL_ASSERT(_Myistr, \"The stored stream pointer in_stream must be non-null\");\r\n        if (!(*_Myistr >> _Myval)) {\r\n            _Myistr = nullptr;\r\n        }\r\n    }\r\n\r\n    istream_type* _Myistr{nullptr}; // pointer to input stream\r\n    _Ty _Myval{}; // lookahead value (valid if _Myistr is not null)\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, class _Elem, class _Traits, class _Diff>\r\n_NODISCARD bool operator==(const istream_iterator<_Ty, _Elem, _Traits, _Diff>& _Left,\r\n    const istream_iterator<_Ty, _Elem, _Traits, _Diff>& _Right) noexcept /* strengthened */ {\r\n    return _Left._Equal(_Right);\r\n}\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _Ty, class _Elem, class _Traits, class _Diff>\r\n_NODISCARD bool operator!=(const istream_iterator<_Ty, _Elem, _Traits, _Diff>& _Left,\r\n    const istream_iterator<_Ty, _Elem, _Traits, _Diff>& _Right) noexcept /* strengthened */ {\r\n    return !(_Left == _Right);\r\n}\r\n#endif // !_HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty, class _Elem = char, class _Traits = char_traits<_Elem>>\r\nclass ostream_iterator {\r\npublic:\r\n    using iterator_category = output_iterator_tag;\r\n    using value_type        = void;\r\n#if _HAS_CXX20\r\n    using difference_type = ptrdiff_t;\r\n#else\r\n    using difference_type = void;\r\n#endif\r\n    using pointer      = void;\r\n    using reference    = void;\r\n    using char_type    = _Elem;\r\n    using traits_type  = _Traits;\r\n    using ostream_type = basic_ostream<_Elem, _Traits>;\r\n\r\n    ostream_iterator(ostream_type& _Ostr, const _Elem* const _Delim = nullptr) noexcept /* strengthened */\r\n        : _Mydelim(_Delim), _Myostr(_STD addressof(_Ostr)) {}\r\n\r\n    ostream_iterator& operator=(const _Ty& _Val) { // insert value into output stream, followed by delimiter\r\n        *_Myostr << _Val;\r\n        if (_Mydelim) {\r\n            *_Myostr << _Mydelim;\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD ostream_iterator& operator*() noexcept /* strengthened */ {\r\n        return *this;\r\n    }\r\n\r\n    ostream_iterator& operator++() noexcept /* strengthened */ {\r\n        return *this;\r\n    }\r\n\r\n    ostream_iterator& operator++(int) noexcept /* strengthened */ {\r\n        return *this;\r\n    }\r\n\r\nprivate:\r\n    const _Elem* _Mydelim; // pointer to delimiter string (NB: not freed)\r\n    ostream_type* _Myostr; // pointer to output stream\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nclass istreambuf_iterator {\r\npublic:\r\n    using iterator_category = input_iterator_tag;\r\n    using value_type        = _Elem;\r\n    using difference_type   = typename _Traits::off_type;\r\n    using pointer           = const _Elem*;\r\n    using reference         = _Elem;\r\n    using char_type         = _Elem;\r\n    using traits_type       = _Traits;\r\n    using int_type          = typename traits_type::int_type;\r\n    using streambuf_type    = basic_streambuf<_Elem, _Traits>;\r\n    using istream_type      = basic_istream<_Elem, _Traits>;\r\n\r\n    constexpr istreambuf_iterator() noexcept : _Strbuf(nullptr), _Got(true), _Val() {}\r\n#if _HAS_CXX20\r\n    constexpr istreambuf_iterator(default_sentinel_t) noexcept : _Strbuf(nullptr), _Got(true), _Val() {}\r\n#endif // _HAS_CXX20\r\n\r\n    istreambuf_iterator(istream_type& _Istr) noexcept : _Strbuf(_Istr.rdbuf()), _Got(!_Strbuf), _Val() {}\r\n\r\n    istreambuf_iterator(streambuf_type* _Sb) noexcept : _Strbuf(_Sb), _Got(!_Sb), _Val() {}\r\n\r\nprivate:\r\n    class _Istreambuf_proxy {\r\n    public:\r\n        _NODISCARD _Elem operator*() const noexcept(is_nothrow_copy_constructible_v<_Elem>) /* strengthened */ {\r\n            return _Keep;\r\n        }\r\n\r\n    private:\r\n        friend istreambuf_iterator;\r\n        _Istreambuf_proxy(streambuf_type* _Strbuf_, _Elem _Keep_)\r\n            noexcept(is_nothrow_copy_constructible_v<_Elem>) // strengthened\r\n            : _Strbuf(_Strbuf_), _Keep(_Keep_) {}\r\n\r\n        streambuf_type* _Strbuf;\r\n        _Elem _Keep;\r\n    };\r\n\r\npublic:\r\n    istreambuf_iterator(const _Istreambuf_proxy& _Px) noexcept : _Strbuf(_Px._Strbuf), _Got(!_Strbuf), _Val() {}\r\n\r\n    _NODISCARD _Elem operator*() const {\r\n        if (!_Got) {\r\n            _Peek();\r\n        }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Strbuf, \"istreambuf_iterator is not dereferenceable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        return _Val;\r\n    }\r\n\r\n    istreambuf_iterator& operator++() {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Strbuf, \"istreambuf_iterator is not incrementable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        _Inc();\r\n        return *this;\r\n    }\r\n\r\n    _Istreambuf_proxy operator++(int) {\r\n        if (!_Got) {\r\n            _Peek();\r\n        }\r\n\r\n        _Istreambuf_proxy _Tmp{_Strbuf, _Val};\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD bool equal(const istreambuf_iterator& _Right) const {\r\n        if (!_Got) {\r\n            _Peek();\r\n        }\r\n\r\n        if (!_Right._Got) {\r\n            _Right._Peek();\r\n        }\r\n\r\n        return (!_Strbuf && !_Right._Strbuf) || (_Strbuf && _Right._Strbuf);\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD friend bool operator==(const istreambuf_iterator& _Left, default_sentinel_t) {\r\n        if (!_Left._Got) {\r\n            _Left._Peek();\r\n        }\r\n\r\n        return !_Left._Strbuf;\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\nprivate:\r\n    void _Inc() { // skip to next input element\r\n        if (!_Strbuf || traits_type::eq_int_type(traits_type::eof(), _Strbuf->sbumpc())) {\r\n            _Strbuf = nullptr;\r\n            _Got    = true;\r\n        } else {\r\n            _Got = false;\r\n        }\r\n    }\r\n\r\n    _Elem _Peek() const { // peek at next input element\r\n        int_type _Meta;\r\n        if (!_Strbuf || traits_type::eq_int_type(traits_type::eof(), _Meta = _Strbuf->sgetc())) {\r\n            _Strbuf = nullptr;\r\n        } else {\r\n            _Val = traits_type::to_char_type(_Meta);\r\n        }\r\n\r\n        _Got = true;\r\n        return _Val;\r\n    }\r\n\r\n    mutable streambuf_type* _Strbuf; // the wrapped stream buffer\r\n    mutable bool _Got; // true if _Val is valid\r\n    mutable _Elem _Val; // next element to deliver\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\n_NODISCARD bool operator==(\r\n    const istreambuf_iterator<_Elem, _Traits>& _Left, const istreambuf_iterator<_Elem, _Traits>& _Right) {\r\n    return _Left.equal(_Right);\r\n}\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _Elem, class _Traits>\r\n_NODISCARD bool operator!=(\r\n    const istreambuf_iterator<_Elem, _Traits>& _Left, const istreambuf_iterator<_Elem, _Traits>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n#endif // !_HAS_CXX20\r\n\r\n#if _HAS_CXX20 && !defined(__clang__) && !defined(__EDG__) // TRANSITION, /permissive, avoid checking constraints\r\ntemplate <class _Elem, class _Traits>\r\nconstexpr bool _Iterator_is_contiguous<istreambuf_iterator<_Elem, _Traits>> = false;\r\n#endif // ^^^ workaround ^^^\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nclass ostreambuf_iterator {\r\npublic:\r\n    using iterator_category = output_iterator_tag;\r\n    using value_type        = void;\r\n#if _HAS_CXX20\r\n    using difference_type = ptrdiff_t;\r\n#else\r\n    using difference_type = void;\r\n#endif\r\n    using pointer        = void;\r\n    using reference      = void;\r\n    using char_type      = _Elem;\r\n    using traits_type    = _Traits;\r\n    using streambuf_type = basic_streambuf<_Elem, _Traits>;\r\n    using ostream_type   = basic_ostream<_Elem, _Traits>;\r\n\r\n    ostreambuf_iterator(streambuf_type* _Sb) noexcept : _Strbuf(_Sb) {}\r\n\r\n    ostreambuf_iterator(ostream_type& _Ostr) noexcept : _Strbuf(_Ostr.rdbuf()) {}\r\n\r\n    ostreambuf_iterator& operator=(_Elem _Right) { // store element and increment\r\n        if (!_Strbuf || traits_type::eq_int_type(_Traits::eof(), _Strbuf->sputc(_Right))) {\r\n            _Failed = true;\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD ostreambuf_iterator& operator*() noexcept /* strengthened */ {\r\n        return *this;\r\n    }\r\n\r\n    ostreambuf_iterator& operator++() noexcept /* strengthened */ {\r\n        return *this;\r\n    }\r\n\r\n    ostreambuf_iterator& operator++(int) noexcept /* strengthened */ {\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD bool failed() const noexcept {\r\n        return _Failed;\r\n    }\r\n\r\nprivate:\r\n    bool _Failed = false; // true if any stores have failed\r\n    streambuf_type* _Strbuf;\r\n};\r\n\r\n#if _HAS_CXX20 && !defined(__clang__) && !defined(__EDG__) // TRANSITION, /permissive, avoid checking constraints\r\ntemplate <class _Elem, class _Traits>\r\nconstexpr bool _Iterator_is_contiguous<ostreambuf_iterator<_Elem, _Traits>> = false;\r\n#endif // ^^^ workaround ^^^\r\n\r\n#if _HAS_CXX20\r\nenum class _Variantish_state : unsigned char { _Nothing, _Holds_first, _Holds_second };\r\n\r\nstruct _Variantish_empty_tag {\r\n    explicit _Variantish_empty_tag() = default;\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nclass _Variantish {\r\npublic:\r\n    constexpr explicit _Variantish(_Variantish_empty_tag) noexcept : _Contains{_Variantish_state::_Nothing} {}\r\n\r\n    constexpr _Variantish() noexcept(is_nothrow_default_constructible_v<_Ty1>)\r\n        requires default_initializable<_Ty1>\r\n        : _First{}, _Contains{_Variantish_state::_Holds_first} {}\r\n\r\n    template <class... _Types>\r\n    constexpr explicit _Variantish(in_place_type_t<_Ty1>, _Types&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Ty1, _Types...>)\r\n        : _First(_STD forward<_Types>(_Args)...), _Contains{_Variantish_state::_Holds_first} {}\r\n\r\n    template <class... _Types>\r\n        requires _Different_from<_Ty1, _Ty2>\r\n    constexpr explicit _Variantish(in_place_type_t<_Ty2>, _Types&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Ty2, _Types...>)\r\n        : _Second(_STD forward<_Types>(_Args)...), _Contains{_Variantish_state::_Holds_second} {}\r\n\r\n    template <class _Uty1, class _Uty2>\r\n        requires _Different_from<_Variantish<_Uty1, _Uty2>, _Variantish>\r\n    constexpr _Variantish(const _Variantish<_Uty1, _Uty2>& _That)\r\n        noexcept(is_nothrow_constructible_v<_Ty1, const _Uty1&> && is_nothrow_constructible_v<_Ty2, const _Uty2&>)\r\n        : _Contains{_That._Contains} {\r\n        switch (_That._Contains) {\r\n        case _Variantish_state::_Holds_first:\r\n            _STD _Construct_in_place(_First, _That._Get_first());\r\n            break;\r\n        case _Variantish_state::_Holds_second:\r\n            _STD _Construct_in_place(_Second, _That._Get_second());\r\n            break;\r\n        case _Variantish_state::_Nothing:\r\n            break;\r\n        }\r\n    }\r\n\r\n    constexpr _Variantish(const _Variantish&)\r\n        requires is_trivially_copy_constructible_v<_Ty1> && is_trivially_copy_constructible_v<_Ty2>\r\n    = default;\r\n\r\n    constexpr _Variantish(const _Variantish& _That)\r\n        noexcept(is_nothrow_copy_constructible_v<_Ty1> && is_nothrow_copy_constructible_v<_Ty2>)\r\n        : _Contains{_That._Contains} {\r\n        switch (_Contains) {\r\n        case _Variantish_state::_Holds_first:\r\n            _STD _Construct_in_place(_First, _That._Get_first());\r\n            break;\r\n        case _Variantish_state::_Holds_second:\r\n            _STD _Construct_in_place(_Second, _That._Get_second());\r\n            break;\r\n        case _Variantish_state::_Nothing:\r\n            break;\r\n        }\r\n    }\r\n\r\n    constexpr _Variantish(_Variantish&&)\r\n        requires is_trivially_move_constructible_v<_Ty1> && is_trivially_move_constructible_v<_Ty2>\r\n    = default;\r\n\r\n    constexpr _Variantish(_Variantish&& _That)\r\n        noexcept(is_nothrow_move_constructible_v<_Ty1> && is_nothrow_move_constructible_v<_Ty2>)\r\n        : _Contains{_That._Contains} {\r\n        switch (_Contains) {\r\n        case _Variantish_state::_Holds_first:\r\n            _STD _Construct_in_place(_First, _STD move(_That._Get_first()));\r\n            break;\r\n        case _Variantish_state::_Holds_second:\r\n            _STD _Construct_in_place(_Second, _STD move(_That._Get_second()));\r\n            break;\r\n        case _Variantish_state::_Nothing:\r\n            break;\r\n        }\r\n    }\r\n\r\n    constexpr ~_Variantish() {\r\n        _Raw_clear();\r\n    }\r\n\r\n    constexpr ~_Variantish()\r\n        requires is_trivially_destructible_v<_Ty1> && is_trivially_destructible_v<_Ty2>\r\n    = default;\r\n\r\n    constexpr _Variantish& operator=(const _Variantish&)\r\n        requires is_trivially_destructible_v<_Ty1> && is_trivially_destructible_v<_Ty2>\r\n                  && is_trivially_copy_constructible_v<_Ty1> && is_trivially_copy_constructible_v<_Ty2>\r\n                  && is_trivially_copy_assignable_v<_Ty1> && is_trivially_copy_assignable_v<_Ty2>\r\n    = default;\r\n\r\n    constexpr _Variantish& operator=(const _Variantish& _That)\r\n        noexcept(is_nothrow_copy_constructible_v<_Ty1> && is_nothrow_copy_constructible_v<_Ty2>\r\n                 && is_nothrow_copy_assignable_v<_Ty1> && is_nothrow_copy_assignable_v<_Ty2>) {\r\n        if (_Contains == _That._Contains) {\r\n            switch (_Contains) {\r\n            case _Variantish_state::_Holds_first:\r\n                _Get_first() = _That._Get_first();\r\n                break;\r\n            case _Variantish_state::_Holds_second:\r\n                _Get_second() = _That._Get_second();\r\n                break;\r\n            case _Variantish_state::_Nothing:\r\n                break;\r\n            }\r\n\r\n            return *this;\r\n        }\r\n\r\n        _Clear();\r\n\r\n        switch (_That._Contains) {\r\n        case _Variantish_state::_Holds_first:\r\n            _STD _Construct_in_place(_First, _That._Get_first());\r\n            break;\r\n        case _Variantish_state::_Holds_second:\r\n            _STD _Construct_in_place(_Second, _That._Get_second());\r\n            break;\r\n        case _Variantish_state::_Nothing:\r\n            break;\r\n        }\r\n\r\n        _Contains = _That._Contains;\r\n\r\n        return *this;\r\n    }\r\n\r\n    constexpr _Variantish& operator=(_Variantish&&)\r\n        requires is_trivially_destructible_v<_Ty1> && is_trivially_destructible_v<_Ty2>\r\n                  && is_trivially_move_constructible_v<_Ty1> && is_trivially_move_constructible_v<_Ty2>\r\n                  && is_trivially_move_assignable_v<_Ty1> && is_trivially_move_assignable_v<_Ty2>\r\n    = default;\r\n\r\n    constexpr _Variantish& operator=(_Variantish&& _That)\r\n        noexcept(is_nothrow_move_constructible_v<_Ty1> && is_nothrow_move_constructible_v<_Ty2>\r\n                 && is_nothrow_move_assignable_v<_Ty1> && is_nothrow_move_assignable_v<_Ty2>) {\r\n        if (_Contains == _That._Contains) {\r\n            switch (_Contains) {\r\n            case _Variantish_state::_Holds_first:\r\n                _Get_first() = _STD move(_That._Get_first());\r\n                break;\r\n            case _Variantish_state::_Holds_second:\r\n                _Get_second() = _STD move(_That._Get_second());\r\n                break;\r\n            case _Variantish_state::_Nothing:\r\n                break;\r\n            }\r\n\r\n            return *this;\r\n        }\r\n\r\n        _Clear();\r\n\r\n        switch (_That._Contains) {\r\n        case _Variantish_state::_Holds_first:\r\n            _STD _Construct_in_place(_First, _STD move(_That._Get_first()));\r\n            break;\r\n        case _Variantish_state::_Holds_second:\r\n            _STD _Construct_in_place(_Second, _STD move(_That._Get_second()));\r\n            break;\r\n        case _Variantish_state::_Nothing:\r\n            break;\r\n        }\r\n\r\n        _Contains = _That._Contains;\r\n\r\n        return *this;\r\n    }\r\n\r\n    template <class _Uty1, class _Uty2>\r\n        requires _Different_from<_Variantish<_Uty1, _Uty2>, _Variantish>\r\n    constexpr _Variantish& operator=(const _Variantish<_Uty1, _Uty2>& _That)\r\n        noexcept(is_nothrow_constructible_v<_Ty1, const _Uty1&> && is_nothrow_constructible_v<_Ty2, const _Uty2&>\r\n                 && is_nothrow_assignable_v<_Ty1&, const _Uty1&> && is_nothrow_assignable_v<_Ty2&, const _Uty2&>) {\r\n        if (_Contains == _That._Contains) {\r\n            switch (_Contains) {\r\n            case _Variantish_state::_Holds_first:\r\n                _Get_first() = _That._Get_first();\r\n                break;\r\n            case _Variantish_state::_Holds_second:\r\n                _Get_second() = _That._Get_second();\r\n                break;\r\n            case _Variantish_state::_Nothing:\r\n                break;\r\n            }\r\n\r\n            return *this;\r\n        }\r\n\r\n        _Clear();\r\n\r\n        switch (_That._Contains) {\r\n        case _Variantish_state::_Holds_first:\r\n            _STD _Construct_in_place(_First, _That._Get_first());\r\n            break;\r\n        case _Variantish_state::_Holds_second:\r\n            _STD _Construct_in_place(_Second, _That._Get_second());\r\n            break;\r\n        case _Variantish_state::_Nothing:\r\n            break;\r\n        }\r\n\r\n        _Contains = _That._Contains;\r\n\r\n        return *this;\r\n    }\r\n\r\n    friend constexpr void swap(_Variantish& _Left, _Variantish& _Right)\r\n        noexcept(is_nothrow_move_constructible_v<_Ty1> && is_nothrow_move_constructible_v<_Ty2>\r\n                 && is_nothrow_swappable_v<_Ty1> && is_nothrow_swappable_v<_Ty2>)\r\n        requires (!_Is_trivially_swappable_v<_Ty1> || !_Is_trivially_swappable_v<_Ty2>)\r\n    {\r\n        if (_Left._Contains == _Right._Contains) {\r\n            switch (_Left._Contains) {\r\n            case _Variantish_state::_Holds_first:\r\n                _RANGES swap(_Left._Get_first(), _Right._Get_first());\r\n                break;\r\n            case _Variantish_state::_Holds_second:\r\n                _RANGES swap(_Left._Get_second(), _Right._Get_second());\r\n                break;\r\n            case _Variantish_state::_Nothing:\r\n                break;\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        auto _Tmp = _STD move(_Left);\r\n        _Left     = _STD move(_Right);\r\n        _Right    = _STD move(_Tmp);\r\n    }\r\n\r\n    constexpr void _Raw_clear() noexcept {\r\n        switch (_Contains) {\r\n        case _Variantish_state::_Holds_first:\r\n            _First.~_Ty1();\r\n            break;\r\n        case _Variantish_state::_Holds_second:\r\n            _Second.~_Ty2();\r\n            break;\r\n        case _Variantish_state::_Nothing:\r\n            break;\r\n        }\r\n    }\r\n\r\n    _NODISCARD constexpr _Ty1& _Get_first() noexcept {\r\n        return _First;\r\n    }\r\n    _NODISCARD constexpr const _Ty1& _Get_first() const noexcept {\r\n        return _First;\r\n    }\r\n\r\n    _NODISCARD constexpr _Ty2& _Get_second() noexcept {\r\n        return _Second;\r\n    }\r\n    _NODISCARD constexpr const _Ty2& _Get_second() const noexcept {\r\n        return _Second;\r\n    }\r\n\r\n    constexpr void _Clear() noexcept {\r\n        _Raw_clear();\r\n        _Contains = _Variantish_state::_Nothing;\r\n    }\r\n\r\n    template <class... _Types>\r\n    constexpr void _Emplace_first(_Types&&... _Args) noexcept(is_nothrow_constructible_v<_Ty1, _Types...>) {\r\n        _Clear();\r\n\r\n        _STD _Construct_in_place(_First, _STD forward<_Types>(_Args)...);\r\n        _Contains = _Variantish_state::_Holds_first;\r\n    }\r\n\r\n    template <class... _Types>\r\n    constexpr void _Emplace_second(_Types&&... _Args) noexcept(is_nothrow_constructible_v<_Ty2, _Types...>) {\r\n        _Clear();\r\n\r\n        _STD _Construct_in_place(_Second, _STD forward<_Types>(_Args)...);\r\n        _Contains = _Variantish_state::_Holds_second;\r\n    }\r\n\r\n    union {\r\n        remove_cv_t<_Ty1> _First;\r\n        remove_cv_t<_Ty2> _Second;\r\n    };\r\n\r\n    _Variantish_state _Contains;\r\n};\r\n\r\ntemplate <class _Iter>\r\nconcept _Use_postfix_proxy =\r\n    !requires(_Iter& __it) {\r\n        { *__it++ } -> _Can_reference;\r\n    } && indirectly_readable<_Iter> && constructible_from<iter_value_t<_Iter>, iter_reference_t<_Iter>>\r\n    && move_constructible<iter_value_t<_Iter>>;\r\n\r\n_EXPORT_STD template <input_or_output_iterator _Iter, sentinel_for<_Iter> _Se>\r\n    requires (!same_as<_Iter, _Se> && copyable<_Iter>)\r\nclass common_iterator {\r\nprivate:\r\n    struct _Proxy_base {\r\n        iter_value_t<_Iter> _Keep;\r\n\r\n        constexpr explicit _Proxy_base(iter_reference_t<_Iter>&& _Right)\r\n            noexcept(is_nothrow_constructible_v<iter_value_t<_Iter>, iter_reference_t<_Iter>>) // strengthened\r\n            : _Keep(_STD forward<iter_reference_t<_Iter>>(_Right)) {}\r\n    };\r\n\r\npublic:\r\n    constexpr common_iterator()\r\n        requires default_initializable<_Iter>\r\n    = default;\r\n\r\n    constexpr common_iterator(_Iter _Right) noexcept(is_nothrow_move_constructible_v<_Iter>) // strengthened\r\n        : _Val{in_place_type<_Iter>, _STD move(_Right)} {}\r\n\r\n    constexpr common_iterator(_Se _Right) noexcept(is_nothrow_move_constructible_v<_Se>) // strengthened\r\n        : _Val{in_place_type<_Se>, _STD move(_Right)} {}\r\n\r\n    constexpr explicit common_iterator(_Variantish_empty_tag _Tag) noexcept : _Val{_Tag} {}\r\n\r\n    template <class _OIter, class _OSe>\r\n        requires convertible_to<const _OIter&, _Iter> && convertible_to<const _OSe&, _Se>\r\n    constexpr common_iterator(const common_iterator<_OIter, _OSe>& _Right)\r\n        noexcept(is_nothrow_constructible_v<_Iter, const _OIter&>\r\n                 && is_nothrow_constructible_v<_Se, const _OSe&>) // strengthened\r\n        : _Val{_Right._Get_val_for_hardened_construction()} {}\r\n\r\n    template <class _OIter, class _OSe>\r\n        requires convertible_to<const _OIter&, _Iter> && convertible_to<const _OSe&, _Se>\r\n              && assignable_from<_Iter&, const _OIter&> && assignable_from<_Se&, const _OSe&>\r\n    constexpr common_iterator& operator=(const common_iterator<_OIter, _OSe>& _Right)\r\n        noexcept(is_nothrow_constructible_v<_Iter, const _OIter&> && is_nothrow_constructible_v<_Se, const _OSe&>\r\n                 && is_nothrow_assignable_v<_Iter&, const _OIter&>\r\n                 && is_nothrow_assignable_v<_Se&, const _OSe&>) /* strengthened */ {\r\n        auto& _Right_val = _Right._Get_val();\r\n#if _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Right_val._Contains != _Variantish_state::_Nothing,\r\n            \"common_iterator can only be assigned from if it holds a value\");\r\n#endif // _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _Val = _Right_val;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD constexpr decltype(auto) operator*() {\r\n#if _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Val._Contains == _Variantish_state::_Holds_first,\r\n            \"common_iterator can only be dereferenced if it holds an iterator\");\r\n#endif // _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        return *_Val._Get_first();\r\n    }\r\n\r\n    _NODISCARD constexpr decltype(auto) operator*() const\r\n        requires _Dereferenceable<const _Iter>\r\n    {\r\n#if _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Val._Contains == _Variantish_state::_Holds_first,\r\n            \"common_iterator can only be dereferenced if it holds an iterator\");\r\n#endif // _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        return *_Val._Get_first();\r\n    }\r\n\r\n    _NODISCARD constexpr auto operator->() const\r\n        requires indirectly_readable<const _Iter>\r\n              && (_Has_member_arrow<const _Iter&> || is_reference_v<iter_reference_t<_Iter>>\r\n                  || constructible_from<iter_value_t<_Iter>, iter_reference_t<_Iter>>)\r\n    {\r\n#if _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Val._Contains == _Variantish_state::_Holds_first,\r\n            \"common_iterator can only be dereferenced if it holds an iterator\");\r\n#endif // _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (_Has_member_arrow<const _Iter&> || is_pointer_v<_Iter>) {\r\n            return _Val._Get_first();\r\n        } else if constexpr (is_reference_v<iter_reference_t<_Iter>>) {\r\n            auto&& _Tmp = *_Val._Get_first();\r\n            return _STD addressof(_Tmp);\r\n        } else {\r\n            class _Arrow_proxy : private _Proxy_base {\r\n            public:\r\n                friend common_iterator;\r\n\r\n                using _Proxy_base::_Proxy_base;\r\n\r\n                _NODISCARD constexpr const iter_value_t<_Iter>* operator->() const noexcept {\r\n                    return _STD addressof(this->_Keep);\r\n                }\r\n            };\r\n\r\n            return _Arrow_proxy{*_Val._Get_first()};\r\n        }\r\n    }\r\n\r\n    constexpr common_iterator& operator++() {\r\n#if _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Val._Contains == _Variantish_state::_Holds_first,\r\n            \"common_iterator can only be incremented if it holds an iterator\");\r\n#endif // _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        ++_Val._Get_first();\r\n        return *this;\r\n    }\r\n\r\n    constexpr decltype(auto) operator++(int) {\r\n#if _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Val._Contains == _Variantish_state::_Holds_first,\r\n            \"common_iterator can only be incremented if it holds an iterator\");\r\n#endif // _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (forward_iterator<_Iter>) {\r\n            common_iterator _Tmp = *this;\r\n            ++_Val._Get_first();\r\n            return _Tmp;\r\n        } else if constexpr (_Use_postfix_proxy<_Iter>) {\r\n            class _Postfix_proxy : private _Proxy_base {\r\n            public:\r\n                friend common_iterator;\r\n\r\n                using _Proxy_base::_Proxy_base;\r\n\r\n                _NODISCARD constexpr const iter_value_t<_Iter>& operator*() const noexcept {\r\n                    return this->_Keep;\r\n                }\r\n            };\r\n\r\n            _Postfix_proxy _Tmp{*_Val._Get_first()};\r\n            ++_Val._Get_first();\r\n            return _Tmp;\r\n        } else {\r\n            return _Val._Get_first()++;\r\n        }\r\n    }\r\n\r\n    template <class _OIter, sentinel_for<_Iter> _OSe>\r\n        requires sentinel_for<_Se, _OIter>\r\n    _NODISCARD friend constexpr bool operator==(\r\n        const common_iterator& _Left, const common_iterator<_OIter, _OSe>& _Right) {\r\n        auto& _Right_val = _Right._Get_val();\r\n#if _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(\r\n            _Left._Val._Contains != _Variantish_state::_Nothing && _Right_val._Contains != _Variantish_state::_Nothing,\r\n            \"common_iterators can only be compared if both hold a value\");\r\n#endif // _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        if (_Left._Val._Contains == _Variantish_state::_Holds_first) {\r\n            if (_Right_val._Contains == _Variantish_state::_Holds_first) {\r\n                if constexpr (equality_comparable_with<_Iter, _OIter>) {\r\n                    return _Left._Val._Get_first() == _Right_val._Get_first();\r\n                } else {\r\n                    return true;\r\n                }\r\n            } else {\r\n                return _Left._Val._Get_first() == _Right_val._Get_second();\r\n            }\r\n        } else {\r\n            if (_Right_val._Contains == _Variantish_state::_Holds_first) {\r\n                return _Left._Val._Get_second() == _Right_val._Get_first();\r\n            } else {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n\r\n    template <sized_sentinel_for<_Iter> _OIter, sized_sentinel_for<_Iter> _OSe>\r\n        requires sized_sentinel_for<_Se, _OIter>\r\n    _NODISCARD friend constexpr iter_difference_t<_OIter> operator-(\r\n        const common_iterator& _Left, const common_iterator<_OIter, _OSe>& _Right) {\r\n        auto& _Right_val = _Right._Get_val();\r\n#if _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(\r\n            _Left._Val._Contains != _Variantish_state::_Nothing && _Right_val._Contains != _Variantish_state::_Nothing,\r\n            \"Cannot take difference of valueless common_iterators\");\r\n#endif // _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        if (_Left._Val._Contains == _Variantish_state::_Holds_first) {\r\n            if (_Right_val._Contains == _Variantish_state::_Holds_first) {\r\n                return _Left._Val._Get_first() - _Right_val._Get_first();\r\n            } else {\r\n                return _Left._Val._Get_first() - _Right_val._Get_second();\r\n            }\r\n        } else {\r\n            if (_Right_val._Contains == _Variantish_state::_Holds_first) {\r\n                return _Left._Val._Get_second() - _Right_val._Get_first();\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n    }\r\n\r\n    _NODISCARD friend constexpr decltype(auto) iter_move(const common_iterator& _Right)\r\n        noexcept(noexcept(_RANGES iter_move(_Right._Val._Get_first())))\r\n        requires input_iterator<_Iter>\r\n    {\r\n#if _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Right._Val._Contains == _Variantish_state::_Holds_first,\r\n            \"can only iter_move from common_iterator if it holds an iterator\");\r\n#endif // _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        return _RANGES iter_move(_Right._Val._Get_first());\r\n    }\r\n\r\n    template <indirectly_swappable<_Iter> _OIter, class _OSe>\r\n    friend constexpr void iter_swap(const common_iterator& _Left, const common_iterator<_OIter, _OSe>& _Right)\r\n        noexcept(noexcept(_RANGES iter_swap(_Left._Val._Get_first(), _Right._Get_val()._Get_first()))) {\r\n        auto& _Right_val = _Right._Get_val();\r\n#if _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Left._Val._Contains == _Variantish_state::_Holds_first\r\n                        && _Right_val._Contains == _Variantish_state::_Holds_first,\r\n            \"can only iter_swap common_iterators if both hold iterators\");\r\n#endif // _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        return _RANGES iter_swap(_Left._Val._Get_first(), _Right_val._Get_first());\r\n    }\r\n\r\n    _NODISCARD constexpr _Variantish<_Iter, _Se>& _Get_val() noexcept {\r\n        return _Val;\r\n    }\r\n    _NODISCARD constexpr const _Variantish<_Iter, _Se>& _Get_val() const noexcept {\r\n        return _Val;\r\n    }\r\n\r\n    _NODISCARD constexpr const _Variantish<_Iter, _Se>& _Get_val_for_hardened_construction() const noexcept {\r\n#if _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Val._Contains != _Variantish_state::_Nothing,\r\n            \"common_iterator can only be constructed from if it holds a value\");\r\n#endif // _MSVC_STL_HARDENING_COMMON_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        return _Val;\r\n    }\r\n\r\nprivate:\r\n    _Variantish<_Iter, _Se> _Val;\r\n};\r\n\r\ntemplate <class _Iter, class _Se>\r\nstruct incrementable_traits<common_iterator<_Iter, _Se>> {\r\n    using difference_type = iter_difference_t<_Iter>;\r\n};\r\n\r\ntemplate <class, class>\r\nstruct _Common_iterator_pointer_type {\r\n    using pointer = void;\r\n};\r\n\r\ntemplate <class _Iter, class _Se>\r\n    requires _Has_member_arrow<const common_iterator<_Iter, _Se>&>\r\nstruct _Common_iterator_pointer_type<_Iter, _Se> {\r\n    using pointer = decltype(_STD declval<const common_iterator<_Iter, _Se>&>().operator->());\r\n};\r\n\r\ntemplate <class _Iter>\r\nconcept _Has_forward_category = requires {\r\n    typename _Iter_cat_t<_Iter>;\r\n    requires derived_from<_Iter_cat_t<_Iter>, forward_iterator_tag>;\r\n};\r\n\r\ntemplate <class _Iter>\r\nstruct _Common_iterator_category_base {};\r\n\r\ntemplate <class _Iter>\r\n    requires is_integral_v<iter_difference_t<_Iter>>\r\nstruct _Common_iterator_category_base<_Iter> {\r\n    using iterator_category = conditional_t<_Has_forward_category<_Iter>, forward_iterator_tag, input_iterator_tag>;\r\n};\r\n\r\ntemplate <input_iterator _Iter, class _Se>\r\nstruct iterator_traits<common_iterator<_Iter, _Se>> : _Common_iterator_category_base<_Iter> {\r\n    using iterator_concept = conditional_t<forward_iterator<_Iter>, forward_iterator_tag, input_iterator_tag>;\r\n    using value_type       = iter_value_t<_Iter>;\r\n    using difference_type  = iter_difference_t<_Iter>;\r\n    using pointer          = _Common_iterator_pointer_type<_Iter, _Se>::pointer;\r\n    using reference        = iter_reference_t<_Iter>;\r\n};\r\n\r\ntemplate <class _Iter>\r\nstruct _Counted_iterator_value_type_base {};\r\n\r\ntemplate <indirectly_readable _Iter>\r\nstruct _Counted_iterator_value_type_base<_Iter> {\r\n    using value_type = iter_value_t<_Iter>;\r\n};\r\n\r\ntemplate <class _Iter>\r\nstruct _Counted_iterator_category_base : _Counted_iterator_value_type_base<_Iter> {};\r\n\r\ntemplate <_Has_member_iterator_category _Iter>\r\nstruct _Counted_iterator_category_base<_Iter> : _Counted_iterator_value_type_base<_Iter> {\r\n    using iterator_category = _Iter::iterator_category;\r\n};\r\n\r\ntemplate <class _Iter>\r\nstruct _Counted_iterator_concept_base : _Counted_iterator_category_base<_Iter> {};\r\n\r\ntemplate <_Has_member_iterator_concept _Iter>\r\nstruct _Counted_iterator_concept_base<_Iter> : _Counted_iterator_category_base<_Iter> {\r\n    using iterator_concept = _Iter::iterator_concept;\r\n};\r\n\r\n_EXPORT_STD template <input_or_output_iterator _Iter>\r\nclass counted_iterator : public _Counted_iterator_concept_base<_Iter> {\r\npublic:\r\n    using iterator_type   = _Iter;\r\n    using difference_type = iter_difference_t<_Iter>;\r\n\r\n    // [counted.iter.const]\r\n    constexpr counted_iterator()\r\n        requires default_initializable<_Iter>\r\n    = default;\r\n\r\n    constexpr counted_iterator(_Iter _Right, const iter_difference_t<_Iter> _Diff)\r\n        noexcept(is_nothrow_move_constructible_v<_Iter>) // strengthened\r\n        : _Current(_STD move(_Right)), _Length(_Diff) {\r\n#if _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Diff >= 0, \"counted_iterator requires non-negative length n\");\r\n#endif // _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    template <class _Other>\r\n        requires convertible_to<const _Other&, _Iter>\r\n    constexpr counted_iterator(const counted_iterator<_Other>& _Right)\r\n        noexcept(is_nothrow_constructible_v<_Iter, const _Other&>) // strengthened\r\n        : _Current(_Right.base()), _Length(_Right.count()) {}\r\n\r\n    template <class _Other>\r\n        requires assignable_from<_Iter&, const _Other&>\r\n    constexpr counted_iterator& operator=(const counted_iterator<_Other>& _Right)\r\n        noexcept(is_nothrow_assignable_v<_Iter&, const _Other&>) /* strengthened */ {\r\n        _Current = _Right.base();\r\n        _Length  = _Right.count();\r\n        return *this;\r\n    }\r\n\r\n    // [counted.iter.access]\r\n    _NODISCARD constexpr const _Iter& base() const& noexcept {\r\n        return _Current;\r\n    }\r\n\r\n    _NODISCARD constexpr _Iter base() && noexcept(is_nothrow_move_constructible_v<_Iter>) /* strengthened */ {\r\n        return _STD move(_Current);\r\n    }\r\n\r\n    _NODISCARD constexpr iter_difference_t<_Iter> count() const noexcept {\r\n        return _Length;\r\n    }\r\n\r\n    // [counted.iter.elem]\r\n    _NODISCARD constexpr decltype(auto) operator*() noexcept(noexcept(*_Current)) /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Length > 0, \"counted_iterator dereference beyond end of range\");\r\n#endif // _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        return *_Current;\r\n    }\r\n\r\n    _NODISCARD constexpr decltype(auto) operator*() const noexcept(noexcept(*_Current)) /* strengthened */\r\n        requires _Dereferenceable<const _Iter>\r\n    {\r\n#if _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Length > 0, \"counted_iterator dereference beyond end of range\");\r\n#endif // _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        return *_Current;\r\n    }\r\n\r\n    _NODISCARD constexpr auto operator->() const noexcept\r\n        requires contiguous_iterator<_Iter>\r\n    {\r\n        return _STD to_address(_Current);\r\n    }\r\n\r\n    _NODISCARD constexpr decltype(auto) operator[](const iter_difference_t<_Iter> _Diff) const\r\n        requires random_access_iterator<_Iter>\r\n    {\r\n#if _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Diff < _Length, \"counted_iterator index out of range\");\r\n#endif // _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        return _Current[_Diff];\r\n    }\r\n\r\n    // [counted.iter.nav]\r\n    constexpr counted_iterator& operator++() {\r\n#if _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Length > 0, \"counted_iterator increment beyond end of range\");\r\n#endif // _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        ++_Current;\r\n        --_Length;\r\n        return *this;\r\n    }\r\n\r\n    constexpr decltype(auto) operator++(int) {\r\n#if _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Length > 0, \"counted_iterator increment beyond end of range\");\r\n#endif // _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        --_Length;\r\n        _TRY_BEGIN\r\n        return _Current++;\r\n\r\n        _CATCH_ALL\r\n        ++_Length;\r\n\r\n        _RERAISE;\r\n        _CATCH_END\r\n    }\r\n\r\n    constexpr counted_iterator operator++(int)\r\n        requires forward_iterator<_Iter>\r\n    {\r\n#if _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Length > 0, \"counted_iterator increment beyond end of range\");\r\n#endif // _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        counted_iterator _Tmp = *this;\r\n        ++_Current;\r\n        --_Length;\r\n        return _Tmp;\r\n    }\r\n\r\n    constexpr counted_iterator& operator--()\r\n        requires bidirectional_iterator<_Iter>\r\n    {\r\n        --_Current;\r\n        ++_Length;\r\n        return *this;\r\n    }\r\n\r\n    constexpr counted_iterator operator--(int)\r\n        requires bidirectional_iterator<_Iter>\r\n    {\r\n        counted_iterator _Tmp = *this;\r\n        --_Current;\r\n        ++_Length;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD constexpr counted_iterator operator+(const iter_difference_t<_Iter> _Diff) const\r\n        requires random_access_iterator<_Iter>\r\n    {\r\n        return counted_iterator{_Current + _Diff, static_cast<iter_difference_t<_Iter>>(_Length - _Diff)};\r\n    }\r\n\r\n    _NODISCARD friend constexpr counted_iterator operator+(\r\n        const iter_difference_t<_Iter> _Diff, const counted_iterator& _Right)\r\n        requires random_access_iterator<_Iter>\r\n    {\r\n        return counted_iterator{_Right._Current + _Diff, static_cast<iter_difference_t<_Iter>>(_Right._Length - _Diff)};\r\n    }\r\n\r\n    constexpr counted_iterator& operator+=(const iter_difference_t<_Iter> _Diff)\r\n        requires random_access_iterator<_Iter>\r\n    {\r\n#if _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Diff <= _Length, \"counted_iterator seek beyond end of range\");\r\n#endif // _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _Current += _Diff;\r\n        _Length -= _Diff;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD constexpr counted_iterator operator-(const iter_difference_t<_Iter> _Diff) const\r\n        requires random_access_iterator<_Iter>\r\n    {\r\n        return counted_iterator{_Current - _Diff, static_cast<iter_difference_t<_Iter>>(_Length + _Diff)};\r\n    }\r\n\r\n    template <common_with<_Iter> _Other>\r\n    _NODISCARD friend constexpr iter_difference_t<_Other> operator-(\r\n        const counted_iterator& _Left, const counted_iterator<_Other>& _Right) noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _Same_sequence(_Left, _Right);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        return _Right.count() - _Left._Length;\r\n    }\r\n\r\n    _NODISCARD friend constexpr iter_difference_t<_Iter> operator-(\r\n        const counted_iterator& _Left, default_sentinel_t) noexcept {\r\n        return -_Left._Length;\r\n    }\r\n\r\n    _NODISCARD friend constexpr iter_difference_t<_Iter> operator-(\r\n        default_sentinel_t, const counted_iterator& _Right) noexcept {\r\n        return _Right._Length;\r\n    }\r\n\r\n    constexpr counted_iterator& operator-=(const iter_difference_t<_Iter> _Diff)\r\n        requires random_access_iterator<_Iter>\r\n    {\r\n#if _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(-_Diff <= _Length, \"counted_iterator decrement beyond end of range\");\r\n#endif // _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _Current -= _Diff;\r\n        _Length += _Diff;\r\n        return *this;\r\n    }\r\n\r\n    // [counted.iter.cmp]\r\n    template <common_with<_Iter> _Other>\r\n    _NODISCARD friend constexpr bool operator==(\r\n        const counted_iterator& _Left, const counted_iterator<_Other>& _Right) noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _Same_sequence(_Left, _Right);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        return _Left._Length == _Right.count();\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator==(const counted_iterator& _Left, default_sentinel_t) noexcept {\r\n        return _Left._Length == 0;\r\n    }\r\n\r\n    template <common_with<_Iter> _Other>\r\n    _NODISCARD friend constexpr strong_ordering operator<=>(\r\n        const counted_iterator& _Left, const counted_iterator<_Other>& _Right) noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _Same_sequence(_Left, _Right);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        return _Right.count() <=> _Left._Length;\r\n    }\r\n\r\n    // [counted.iter.cust]\r\n    _NODISCARD friend constexpr decltype(auto) iter_move(const counted_iterator& _Right)\r\n        noexcept(noexcept(_RANGES iter_move(_Right._Current)))\r\n        requires input_iterator<_Iter>\r\n    {\r\n#if _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Right._Length > 0, \"iter_move on a counted_iterator beyond end of range\");\r\n#endif // _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        return _RANGES iter_move(_Right._Current);\r\n    }\r\n\r\n    template <indirectly_swappable<_Iter> _Other>\r\n    friend constexpr void iter_swap(const counted_iterator& _Left, const counted_iterator<_Other>& _Right)\r\n        noexcept(noexcept(_RANGES iter_swap(_Left._Current, _Right.base()))) {\r\n#if _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Left._Length > 0 && _Right.count() > 0, \"iter_swap on a counted_iterator beyond end of range\");\r\n#endif // _MSVC_STL_HARDENING_COUNTED_ITERATOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _RANGES iter_swap(_Left._Current, _Right.base());\r\n    }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    template <common_with<_Iter> _Other>\r\n    friend constexpr void _Same_sequence(\r\n        const counted_iterator& _Left, const counted_iterator<_Other>& _Right) noexcept {\r\n#ifdef _M_CEE // TRANSITION, VSO-1665606\r\n        (void) _Left;\r\n        (void) _Right;\r\n#else // ^^^ workaround / no workaround vvv\r\n\r\n        // Per N4950 [counted.iterator]/3, two counted_iterators x and y refer to elements of the same sequence iff\r\n        // for some integer n, next(x.base(), x.count() + n) and next(y.base(), y.count() + n)\r\n        // \"refer to the same (possibly past-the-end) element\".\r\n        // Iterator equality is a fair proxy for the vaguely-defined \"refer to the same element\".\r\n        if constexpr (forward_iterator<_Iter> && forward_iterator<_Other>) {\r\n            using _CIter = common_type_t<_Iter, _Other>;\r\n            using _CDiff = common_type_t<iter_difference_t<_Iter>, iter_difference_t<_Other>>;\r\n\r\n            const _CDiff _Diff = static_cast<_CDiff>(_Left._Length) - static_cast<_CDiff>(_Right.count());\r\n            if (_Diff < 0) {\r\n                _STL_VERIFY(\r\n                    static_cast<_CIter>(_Left._Current) == _RANGES next(static_cast<_CIter>(_Right.base()), -_Diff),\r\n                    \"counted_iterators are from different ranges\");\r\n            } else {\r\n                _STL_VERIFY(\r\n                    _RANGES next(static_cast<_CIter>(_Left._Current), _Diff) == static_cast<_CIter>(_Right.base()),\r\n                    \"counted_iterators are from different ranges\");\r\n            }\r\n        }\r\n#endif // ^^^ no workaround ^^^\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    template <common_with<_Iter> _Other>\r\n    friend constexpr void _Verify_range(const counted_iterator& _Left, const counted_iterator<_Other>& _Right) {\r\n        if constexpr (_Range_verifiable_v<_Iter, _Other>) {\r\n            _Verify_range(_Left._Current, _Right.base());\r\n        }\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _Same_sequence(_Left, _Right);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    constexpr void _Verify_offset(const iter_difference_t<_Iter> _Off) const {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Off <= _Length, \"Offset larger than counted_iterator length\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (_Offset_verifiable_v<_Iter>) {\r\n            _Current._Verify_offset(_Off);\r\n        }\r\n    }\r\n\r\n    using _Prevent_inheriting_unwrap = counted_iterator;\r\n\r\n    _NODISCARD constexpr counted_iterator<_Unwrapped_t<const _Iter&>> _Unwrapped() const& noexcept(\r\n        noexcept(counted_iterator<_Unwrapped_t<const _Iter&>>{_Current._Unwrapped(), _Length}))\r\n        requires _Unwrappable_v<const _Iter&>\r\n    {\r\n        return counted_iterator<_Unwrapped_t<const _Iter&>>{_Current._Unwrapped(), _Length};\r\n    }\r\n\r\n    _NODISCARD constexpr counted_iterator<_Unwrapped_t<_Iter>> _Unwrapped() && noexcept(\r\n        noexcept(counted_iterator<_Unwrapped_t<_Iter>>{_STD move(_Current)._Unwrapped(), _Length}))\r\n        requires _Unwrappable_v<_Iter>\r\n    {\r\n        return counted_iterator<_Unwrapped_t<_Iter>>{_STD move(_Current)._Unwrapped(), _Length};\r\n    }\r\n\r\n    static constexpr bool _Unwrap_when_unverified = _Do_unwrap_when_unverified_v<_Iter>;\r\n\r\n    template <class _Other>\r\n        requires _Wrapped_seekable_v<_Iter, const _Other&>\r\n    constexpr void _Seek_to(const counted_iterator<_Other>& _It) {\r\n        _Current._Seek_to(_It.base());\r\n        _Length = _It.count();\r\n    }\r\n\r\n    template <class _Other>\r\n        requires _Wrapped_seekable_v<_Iter, _Other>\r\n    constexpr void _Seek_to(counted_iterator<_Other>&& _It) {\r\n        _Current._Seek_to(_STD move(_It).base());\r\n        _Length = _It.count();\r\n    }\r\n\r\nprivate:\r\n    _Iter _Current{};\r\n    iter_difference_t<_Iter> _Length = 0;\r\n};\r\n\r\ntemplate <input_iterator _Iter>\r\n    requires (!_Is_from_primary<iterator_traits<_Iter>>)\r\nstruct iterator_traits<counted_iterator<_Iter>> : iterator_traits<_Iter> {\r\n    using pointer = conditional_t<contiguous_iterator<_Iter>, add_pointer_t<iter_reference_t<_Iter>>, void>;\r\n};\r\n#endif // _HAS_CXX20\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _ITERATOR_\r\n"
  },
  {
    "path": "stl/inc/latch",
    "content": "// latch standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _LATCH_\r\n#define _LATCH_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#ifdef _M_CEE_PURE\r\n#error <latch> is not supported when compiling with /clr:pure.\r\n#endif // defined(_M_CEE_PURE)\r\n\r\n#if !_HAS_CXX20\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <latch> are available only with C++20 or later.\");\r\n#else // ^^^ !_HAS_CXX20 / _HAS_CXX20 vvv\r\n\r\n#include <atomic>\r\n#include <climits>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\n_EXPORT_STD class latch {\r\npublic:\r\n    _NODISCARD static constexpr ptrdiff_t(max)() noexcept {\r\n        return PTRDIFF_MAX;\r\n    }\r\n\r\n    constexpr explicit latch(const ptrdiff_t _Expected) noexcept /* strengthened */ : _Counter{_Expected} {\r\n        _STL_VERIFY(_Expected >= 0, \"Precondition: expected >= 0 (N4950 [thread.latch.class]/4)\");\r\n    }\r\n\r\n    latch(const latch&)            = delete;\r\n    latch& operator=(const latch&) = delete;\r\n\r\n    void count_down(const ptrdiff_t _Update = 1) noexcept /* strengthened */ {\r\n        _STL_VERIFY(_Update >= 0, \"Precondition: update >= 0 (N4950 [thread.latch.class]/7)\");\r\n        // TRANSITION, GH-1133: should be memory_order_release\r\n        const ptrdiff_t _Current = _Counter.fetch_sub(_Update) - _Update;\r\n        if (_Current == 0) {\r\n            _Counter.notify_all();\r\n        } else {\r\n            _STL_VERIFY(_Current >= 0, \"Precondition: update <= counter (N4950 [thread.latch.class]/7)\");\r\n        }\r\n    }\r\n\r\n    _NODISCARD_TRY_WAIT bool try_wait() const noexcept {\r\n        // TRANSITION, GH-1133: should be memory_order_acquire\r\n        return _Counter.load() == 0;\r\n    }\r\n\r\n    void wait() const noexcept /* strengthened */ {\r\n        for (;;) {\r\n            // TRANSITION, GH-1133: should be memory_order_acquire\r\n            const ptrdiff_t _Current = _Counter.load();\r\n            if (_Current == 0) {\r\n                return;\r\n            } else {\r\n                _STL_VERIFY(_Current > 0, \"Invariant counter >= 0, possibly caused by preconditions violation \"\r\n                                          \"(N4950 [thread.latch.class]/7)\");\r\n            }\r\n            _Counter.wait(_Current, memory_order_relaxed);\r\n        }\r\n    }\r\n\r\n    void arrive_and_wait(const ptrdiff_t _Update = 1) noexcept /* strengthened */ {\r\n        _STL_VERIFY(_Update >= 0, \"Precondition: update >= 0 (N4950 [thread.latch.class]/7)\");\r\n        // TRANSITION, GH-1133: should be memory_order_acq_rel\r\n        const ptrdiff_t _Current = _Counter.fetch_sub(_Update) - _Update;\r\n        if (_Current == 0) {\r\n            _Counter.notify_all();\r\n        } else {\r\n            _STL_VERIFY(_Current > 0, \"Precondition: update <= counter (N4950 [thread.latch.class]/7)\");\r\n            _Counter.wait(_Current, memory_order_relaxed);\r\n            wait();\r\n        }\r\n    }\r\n\r\nprivate:\r\n    atomic<ptrdiff_t> _Counter;\r\n};\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _LATCH_\r\n"
  },
  {
    "path": "stl/inc/limits",
    "content": "// limits standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _LIMITS_\r\n#define _LIMITS_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <cfloat>\r\n#include <climits>\r\n#include <cwchar> // TRANSITION, see GH-3631: Lots of user code assumes that <limits> drags in <cwchar>\r\n#include <xtr1common>\r\n\r\n#include _STL_INTRIN_HEADER\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n// constants for different IEEE float denormalization styles\r\n_EXPORT_STD enum _CXX23_DEPRECATE_DENORM float_denorm_style {\r\n    denorm_indeterminate = -1,\r\n    denorm_absent        = 0,\r\n    denorm_present       = 1\r\n};\r\n\r\n_EXPORT_STD enum float_round_style { // constants for different IEEE rounding styles\r\n    round_indeterminate       = -1,\r\n    round_toward_zero         = 0,\r\n    round_to_nearest          = 1,\r\n    round_toward_infinity     = 2,\r\n    round_toward_neg_infinity = 3\r\n};\r\n\r\nstruct _Num_base { // base for all types, with common defaults\r\n    _STL_DISABLE_DEPRECATED_WARNING\r\n    _CXX23_DEPRECATE_DENORM static constexpr float_denorm_style has_denorm = denorm_absent;\r\n    _CXX23_DEPRECATE_DENORM static constexpr bool has_denorm_loss          = false;\r\n    _STL_RESTORE_DEPRECATED_WARNING\r\n\r\n    static constexpr bool has_infinity             = false;\r\n    static constexpr bool has_quiet_NaN            = false;\r\n    static constexpr bool has_signaling_NaN        = false;\r\n    static constexpr bool is_bounded               = false;\r\n    static constexpr bool is_exact                 = false;\r\n    static constexpr bool is_iec559                = false;\r\n    static constexpr bool is_integer               = false;\r\n    static constexpr bool is_modulo                = false;\r\n    static constexpr bool is_signed                = false;\r\n    static constexpr bool is_specialized           = false;\r\n    static constexpr bool tinyness_before          = false;\r\n    static constexpr bool traps                    = false;\r\n    static constexpr float_round_style round_style = round_toward_zero;\r\n    static constexpr int digits                    = 0;\r\n    static constexpr int digits10                  = 0;\r\n    static constexpr int max_digits10              = 0;\r\n    static constexpr int max_exponent              = 0;\r\n    static constexpr int max_exponent10            = 0;\r\n    static constexpr int min_exponent              = 0;\r\n    static constexpr int min_exponent10            = 0;\r\n    static constexpr int radix                     = 0;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass numeric_limits : public _Num_base { // numeric limits for arbitrary type _Ty (say little or nothing)\r\npublic:\r\n    _NODISCARD static constexpr _Ty(min)() noexcept {\r\n        return _Ty();\r\n    }\r\n\r\n    _NODISCARD static constexpr _Ty(max)() noexcept {\r\n        return _Ty();\r\n    }\r\n\r\n    _NODISCARD static constexpr _Ty lowest() noexcept {\r\n        return _Ty();\r\n    }\r\n\r\n    _NODISCARD static constexpr _Ty epsilon() noexcept {\r\n        return _Ty();\r\n    }\r\n\r\n    _NODISCARD static constexpr _Ty round_error() noexcept {\r\n        return _Ty();\r\n    }\r\n\r\n    _NODISCARD static constexpr _Ty denorm_min() noexcept {\r\n        return _Ty();\r\n    }\r\n\r\n    _NODISCARD static constexpr _Ty infinity() noexcept {\r\n        return _Ty();\r\n    }\r\n\r\n    _NODISCARD static constexpr _Ty quiet_NaN() noexcept {\r\n        return _Ty();\r\n    }\r\n\r\n    _NODISCARD static constexpr _Ty signaling_NaN() noexcept {\r\n        return _Ty();\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nclass numeric_limits<const _Ty> : public numeric_limits<_Ty> {}; // numeric limits for const types\r\n\r\ntemplate <class _Ty>\r\nclass numeric_limits<volatile _Ty> : public numeric_limits<_Ty> {}; // numeric limits for volatile types\r\n\r\ntemplate <class _Ty>\r\nclass numeric_limits<const volatile _Ty> : public numeric_limits<_Ty> {}; // numeric limits for const volatile types\r\n\r\nstruct _Num_int_base : _Num_base { // base for integer types\r\n    static constexpr bool is_bounded     = true;\r\n    static constexpr bool is_exact       = true;\r\n    static constexpr bool is_integer     = true;\r\n    static constexpr bool is_specialized = true;\r\n#if !defined(__clang__) || (defined(_M_X64) && !defined(_M_ARM64EC)) || defined(_M_IX86)\r\n    static constexpr bool traps = true;\r\n#endif\r\n    static constexpr int radix = 2;\r\n};\r\n\r\nstruct _Num_float_base : _Num_base { // base for floating-point types\r\n    _STL_DISABLE_DEPRECATED_WARNING\r\n    _CXX23_DEPRECATE_DENORM static constexpr float_denorm_style has_denorm = denorm_present;\r\n    _STL_RESTORE_DEPRECATED_WARNING\r\n\r\n    static constexpr bool has_infinity             = true;\r\n    static constexpr bool has_quiet_NaN            = true;\r\n    static constexpr bool has_signaling_NaN        = true;\r\n    static constexpr bool is_bounded               = true;\r\n    static constexpr bool is_iec559                = true;\r\n    static constexpr bool is_signed                = true;\r\n    static constexpr bool is_specialized           = true;\r\n    static constexpr float_round_style round_style = round_to_nearest;\r\n    static constexpr int radix                     = FLT_RADIX;\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<bool> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr bool(min)() noexcept {\r\n        return false;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool(max)() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr bool epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr bool traps = false;\r\n    static constexpr int digits = 1;\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<char> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr char(min)() noexcept {\r\n        return CHAR_MIN;\r\n    }\r\n\r\n    _NODISCARD static constexpr char(max)() noexcept {\r\n        return CHAR_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr char lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr char epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr bool is_signed = CHAR_MIN != 0;\r\n    static constexpr bool is_modulo = CHAR_MIN == 0;\r\n    static constexpr bool traps     = false;\r\n    static constexpr int digits     = 8 - (CHAR_MIN != 0);\r\n    static constexpr int digits10   = 2;\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<signed char> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr signed char(min)() noexcept {\r\n        return SCHAR_MIN;\r\n    }\r\n\r\n    _NODISCARD static constexpr signed char(max)() noexcept {\r\n        return SCHAR_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr signed char lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr signed char epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr signed char round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr signed char denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr signed char infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr signed char quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr signed char signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr bool is_signed = true;\r\n    static constexpr bool traps     = false;\r\n    static constexpr int digits     = 7;\r\n    static constexpr int digits10   = 2;\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<unsigned char> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr unsigned char(min)() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned char(max)() noexcept {\r\n        return UCHAR_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned char lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned char epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned char round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned char denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned char infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned char quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned char signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr bool is_modulo = true;\r\n    static constexpr bool traps     = false;\r\n    static constexpr int digits     = 8;\r\n    static constexpr int digits10   = 2;\r\n};\r\n\r\n#ifdef __cpp_char8_t\r\ntemplate <>\r\nclass numeric_limits<char8_t> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr char8_t(min)() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char8_t(max)() noexcept {\r\n        return UCHAR_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr char8_t lowest() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char8_t epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char8_t round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char8_t denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char8_t infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char8_t quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char8_t signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr bool is_modulo = true;\r\n    static constexpr bool traps     = false;\r\n    static constexpr int digits     = 8;\r\n    static constexpr int digits10   = 2;\r\n};\r\n#endif // defined(__cpp_char8_t)\r\n\r\ntemplate <>\r\nclass numeric_limits<char16_t> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr char16_t(min)() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char16_t(max)() noexcept {\r\n        return USHRT_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr char16_t lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr char16_t epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char16_t round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char16_t denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char16_t infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char16_t quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char16_t signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr bool is_modulo = true;\r\n    static constexpr bool traps     = false;\r\n    static constexpr int digits     = 16;\r\n    static constexpr int digits10   = 4;\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<char32_t> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr char32_t(min)() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char32_t(max)() noexcept {\r\n        return UINT_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr char32_t lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr char32_t epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char32_t round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char32_t denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char32_t infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char32_t quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr char32_t signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr bool is_modulo = true;\r\n    static constexpr bool traps     = false;\r\n    static constexpr int digits     = 32;\r\n    static constexpr int digits10   = 9;\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<wchar_t> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr wchar_t(min)() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr wchar_t(max)() noexcept {\r\n        return 0xffff;\r\n    }\r\n\r\n    _NODISCARD static constexpr wchar_t lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr wchar_t epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr wchar_t round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr wchar_t denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr wchar_t infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr wchar_t quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr wchar_t signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr bool is_modulo = true;\r\n    static constexpr bool traps     = false;\r\n    static constexpr int digits     = 16;\r\n    static constexpr int digits10   = 4;\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<short> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr short(min)() noexcept {\r\n        return SHRT_MIN;\r\n    }\r\n\r\n    _NODISCARD static constexpr short(max)() noexcept {\r\n        return SHRT_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr short lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr short epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr short round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr short denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr short infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr short quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr short signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr bool is_signed = true;\r\n    static constexpr bool traps     = false;\r\n    static constexpr int digits     = 15;\r\n    static constexpr int digits10   = 4;\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<int> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr int(min)() noexcept {\r\n        return INT_MIN;\r\n    }\r\n\r\n    _NODISCARD static constexpr int(max)() noexcept {\r\n        return INT_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr int lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr int epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr int round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr int denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr int infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr int quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr int signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr bool is_signed = true;\r\n    static constexpr int digits     = 31;\r\n    static constexpr int digits10   = 9;\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<long> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr long(min)() noexcept {\r\n        return LONG_MIN;\r\n    }\r\n\r\n    _NODISCARD static constexpr long(max)() noexcept {\r\n        return LONG_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr long lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr long epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr long round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr long denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr long infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr long quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr long signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static_assert(sizeof(int) == sizeof(long), \"LLP64 assumption\");\r\n    static constexpr bool is_signed = true;\r\n    static constexpr int digits     = 31;\r\n    static constexpr int digits10   = 9;\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<long long> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr long long(min)() noexcept {\r\n        return LLONG_MIN;\r\n    }\r\n\r\n    _NODISCARD static constexpr long long(max)() noexcept {\r\n        return LLONG_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr long long lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr long long epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr long long round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr long long denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr long long infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr long long quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr long long signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr bool is_signed = true;\r\n    static constexpr int digits     = 63;\r\n    static constexpr int digits10   = 18;\r\n};\r\n\r\n#ifdef _NATIVE_WCHAR_T_DEFINED\r\ntemplate <>\r\nclass numeric_limits<unsigned short> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr unsigned short(min)() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned short(max)() noexcept {\r\n        return USHRT_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned short lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned short epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned short round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned short denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned short infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned short quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned short signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr bool is_modulo = true;\r\n    static constexpr bool traps     = false;\r\n    static constexpr int digits     = 16;\r\n    static constexpr int digits10   = 4;\r\n};\r\n#endif // _NATIVE_WCHAR_T_DEFINED\r\n\r\ntemplate <>\r\nclass numeric_limits<unsigned int> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr unsigned int(min)() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned int(max)() noexcept {\r\n        return UINT_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned int lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned int epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned int round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned int denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned int infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned int quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned int signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr bool is_modulo = true;\r\n    static constexpr int digits     = 32;\r\n    static constexpr int digits10   = 9;\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<unsigned long> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr unsigned long(min)() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned long(max)() noexcept {\r\n        return ULONG_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned long lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned long epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned long round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned long denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned long infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned long quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned long signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static_assert(sizeof(unsigned int) == sizeof(unsigned long), \"LLP64 assumption\");\r\n    static constexpr bool is_modulo = true;\r\n    static constexpr int digits     = 32;\r\n    static constexpr int digits10   = 9;\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<unsigned long long> : public _Num_int_base {\r\npublic:\r\n    _NODISCARD static constexpr unsigned long long(min)() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned long long(max)() noexcept {\r\n        return ULLONG_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned long long lowest() noexcept {\r\n        return (min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned long long epsilon() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned long long round_error() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned long long denorm_min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned long long infinity() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned long long quiet_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr unsigned long long signaling_NaN() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr bool is_modulo = true;\r\n    static constexpr int digits     = 64;\r\n    static constexpr int digits10   = 19;\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<float> : public _Num_float_base {\r\npublic:\r\n    _NODISCARD static constexpr float(min)() noexcept {\r\n        return FLT_MIN;\r\n    }\r\n\r\n    _NODISCARD static constexpr float(max)() noexcept {\r\n        return FLT_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr float lowest() noexcept {\r\n        return -(max) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr float epsilon() noexcept {\r\n        return FLT_EPSILON;\r\n    }\r\n\r\n    _NODISCARD static constexpr float round_error() noexcept {\r\n        return 0.5F;\r\n    }\r\n\r\n    _NODISCARD static constexpr float denorm_min() noexcept {\r\n        return FLT_TRUE_MIN;\r\n    }\r\n\r\n    _STL_DISABLE_CLANG_WARNING_NAN_INF_DISABLED\r\n    _NODISCARD static constexpr float infinity() noexcept {\r\n        return __builtin_huge_valf();\r\n    }\r\n\r\n    _NODISCARD static constexpr float quiet_NaN() noexcept {\r\n        return __builtin_nanf(\"0\");\r\n    }\r\n\r\n    _NODISCARD static constexpr float signaling_NaN() noexcept {\r\n        return __builtin_nansf(\"1\");\r\n    }\r\n    _STL_RESTORE_CLANG_WARNING_NAN_INF_DISABLED\r\n\r\n    static constexpr int digits         = FLT_MANT_DIG;\r\n    static constexpr int digits10       = FLT_DIG;\r\n    static constexpr int max_digits10   = 9;\r\n    static constexpr int max_exponent   = FLT_MAX_EXP;\r\n    static constexpr int max_exponent10 = FLT_MAX_10_EXP;\r\n    static constexpr int min_exponent   = FLT_MIN_EXP;\r\n    static constexpr int min_exponent10 = FLT_MIN_10_EXP;\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<double> : public _Num_float_base {\r\npublic:\r\n    _NODISCARD static constexpr double(min)() noexcept {\r\n        return DBL_MIN;\r\n    }\r\n\r\n    _NODISCARD static constexpr double(max)() noexcept {\r\n        return DBL_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr double lowest() noexcept {\r\n        return -(max) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr double epsilon() noexcept {\r\n        return DBL_EPSILON;\r\n    }\r\n\r\n    _NODISCARD static constexpr double round_error() noexcept {\r\n        return 0.5;\r\n    }\r\n\r\n    _NODISCARD static constexpr double denorm_min() noexcept {\r\n        return DBL_TRUE_MIN;\r\n    }\r\n\r\n    _STL_DISABLE_CLANG_WARNING_NAN_INF_DISABLED\r\n    _NODISCARD static constexpr double infinity() noexcept {\r\n        return __builtin_huge_val();\r\n    }\r\n\r\n    _NODISCARD static constexpr double quiet_NaN() noexcept {\r\n        return __builtin_nan(\"0\");\r\n    }\r\n\r\n    _NODISCARD static constexpr double signaling_NaN() noexcept {\r\n        return __builtin_nans(\"1\");\r\n    }\r\n    _STL_RESTORE_CLANG_WARNING_NAN_INF_DISABLED\r\n\r\n    static constexpr int digits         = DBL_MANT_DIG;\r\n    static constexpr int digits10       = DBL_DIG;\r\n    static constexpr int max_digits10   = 17;\r\n    static constexpr int max_exponent   = DBL_MAX_EXP;\r\n    static constexpr int max_exponent10 = DBL_MAX_10_EXP;\r\n    static constexpr int min_exponent   = DBL_MIN_EXP;\r\n    static constexpr int min_exponent10 = DBL_MIN_10_EXP;\r\n};\r\n\r\ntemplate <>\r\nclass numeric_limits<long double> : public _Num_float_base {\r\npublic:\r\n    _NODISCARD static constexpr long double(min)() noexcept {\r\n        return LDBL_MIN;\r\n    }\r\n\r\n    _NODISCARD static constexpr long double(max)() noexcept {\r\n        return LDBL_MAX;\r\n    }\r\n\r\n    _NODISCARD static constexpr long double lowest() noexcept {\r\n        return -(max) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr long double epsilon() noexcept {\r\n        return LDBL_EPSILON;\r\n    }\r\n\r\n    _NODISCARD static constexpr long double round_error() noexcept {\r\n        return 0.5L;\r\n    }\r\n\r\n    _NODISCARD static constexpr long double denorm_min() noexcept {\r\n        return LDBL_TRUE_MIN;\r\n    }\r\n\r\n    _STL_DISABLE_CLANG_WARNING_NAN_INF_DISABLED\r\n    _NODISCARD static constexpr long double infinity() noexcept {\r\n        return __builtin_huge_val();\r\n    }\r\n\r\n    _NODISCARD static constexpr long double quiet_NaN() noexcept {\r\n        return __builtin_nan(\"0\");\r\n    }\r\n\r\n    _NODISCARD static constexpr long double signaling_NaN() noexcept {\r\n        return __builtin_nans(\"1\");\r\n    }\r\n    _STL_RESTORE_CLANG_WARNING_NAN_INF_DISABLED\r\n\r\n    static constexpr int digits         = LDBL_MANT_DIG;\r\n    static constexpr int digits10       = LDBL_DIG;\r\n    static constexpr int max_digits10   = 2 + LDBL_MANT_DIG * 301L / 1000;\r\n    static constexpr int max_exponent   = LDBL_MAX_EXP;\r\n    static constexpr int max_exponent10 = LDBL_MAX_10_EXP;\r\n    static constexpr int min_exponent   = LDBL_MIN_EXP;\r\n    static constexpr int min_exponent10 = LDBL_MIN_10_EXP;\r\n};\r\n\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _LIMITS_\r\n"
  },
  {
    "path": "stl/inc/list",
    "content": "// list standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _LIST_\r\n#define _LIST_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <xmemory>\r\n\r\n#if _HAS_CXX17\r\n#include <xpolymorphic_allocator.h>\r\n#endif // _HAS_CXX17\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _Mylist, class _Base = _Iterator_base0>\r\nclass _List_unchecked_const_iterator : public _Base {\r\npublic:\r\n    using iterator_category = bidirectional_iterator_tag;\r\n\r\n    using _Nodeptr        = typename _Mylist::_Nodeptr;\r\n    using value_type      = typename _Mylist::value_type;\r\n    using difference_type = typename _Mylist::difference_type;\r\n    using pointer         = typename _Mylist::const_pointer;\r\n    using reference       = const value_type&;\r\n\r\n    _List_unchecked_const_iterator() noexcept : _Ptr() {}\r\n\r\n    _List_unchecked_const_iterator(_Nodeptr _Pnode, const _Mylist* _Plist) noexcept : _Ptr(_Pnode) {\r\n        this->_Adopt(_Plist);\r\n    }\r\n\r\n    _NODISCARD reference operator*() const noexcept {\r\n        return _Ptr->_Myval;\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _List_unchecked_const_iterator& operator++() noexcept {\r\n        _Ptr = _Ptr->_Next;\r\n        return *this;\r\n    }\r\n\r\n    _List_unchecked_const_iterator operator++(int) noexcept {\r\n        _List_unchecked_const_iterator _Tmp = *this;\r\n        _Ptr                                = _Ptr->_Next;\r\n        return _Tmp;\r\n    }\r\n\r\n    _List_unchecked_const_iterator& operator--() noexcept {\r\n        _Ptr = _Ptr->_Prev;\r\n        return *this;\r\n    }\r\n\r\n    _List_unchecked_const_iterator operator--(int) noexcept {\r\n        _List_unchecked_const_iterator _Tmp = *this;\r\n        _Ptr                                = _Ptr->_Prev;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD bool operator==(const _List_unchecked_const_iterator& _Right) const noexcept {\r\n        return _Ptr == _Right._Ptr;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD bool operator!=(const _List_unchecked_const_iterator& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    _Nodeptr _Ptr; // pointer to node\r\n};\r\n\r\ntemplate <class _Mylist>\r\nclass _List_unchecked_iterator : public _List_unchecked_const_iterator<_Mylist> {\r\npublic:\r\n    using _Mybase           = _List_unchecked_const_iterator<_Mylist>;\r\n    using iterator_category = bidirectional_iterator_tag;\r\n\r\n    using _Nodeptr        = typename _Mylist::_Nodeptr;\r\n    using value_type      = typename _Mylist::value_type;\r\n    using difference_type = typename _Mylist::difference_type;\r\n    using pointer         = typename _Mylist::pointer;\r\n    using reference       = value_type&;\r\n\r\n    using _Mybase::_Mybase;\r\n\r\n    _NODISCARD reference operator*() const noexcept {\r\n        return const_cast<reference>(_Mybase::operator*());\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _List_unchecked_iterator& operator++() noexcept {\r\n        _Mybase::operator++();\r\n        return *this;\r\n    }\r\n\r\n    _List_unchecked_iterator operator++(int) noexcept {\r\n        _List_unchecked_iterator _Tmp = *this;\r\n        _Mybase::operator++();\r\n        return _Tmp;\r\n    }\r\n\r\n    _List_unchecked_iterator& operator--() noexcept {\r\n        _Mybase::operator--();\r\n        return *this;\r\n    }\r\n\r\n    _List_unchecked_iterator operator--(int) noexcept {\r\n        _List_unchecked_iterator _Tmp = *this;\r\n        _Mybase::operator--();\r\n        return _Tmp;\r\n    }\r\n};\r\n\r\ntemplate <class _Mylist>\r\nclass _List_const_iterator : public _List_unchecked_const_iterator<_Mylist, _Iterator_base> {\r\npublic:\r\n    using _Mybase           = _List_unchecked_const_iterator<_Mylist, _Iterator_base>;\r\n    using iterator_category = bidirectional_iterator_tag;\r\n\r\n    using _Nodeptr        = typename _Mylist::_Nodeptr;\r\n    using value_type      = typename _Mylist::value_type;\r\n    using difference_type = typename _Mylist::difference_type;\r\n    using pointer         = typename _Mylist::const_pointer;\r\n    using reference       = const value_type&;\r\n\r\n    using _Mybase::_Mybase;\r\n\r\n    _NODISCARD reference operator*() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        const auto _Mycont = static_cast<const _Mylist*>(this->_Getcont());\r\n        _STL_VERIFY(_Mycont, \"cannot dereference value-initialized list iterator\");\r\n        _STL_VERIFY(this->_Ptr != _Mycont->_Myhead, \"cannot dereference end list iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        return this->_Ptr->_Myval;\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _List_const_iterator& operator++() noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        const auto _Mycont = static_cast<const _Mylist*>(this->_Getcont());\r\n        _STL_VERIFY(_Mycont, \"cannot increment value-initialized list iterator\");\r\n        _STL_VERIFY(this->_Ptr != _Mycont->_Myhead, \"cannot increment end list iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        this->_Ptr = this->_Ptr->_Next;\r\n        return *this;\r\n    }\r\n\r\n    _List_const_iterator operator++(int) noexcept {\r\n        _List_const_iterator _Tmp = *this;\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _List_const_iterator& operator--() noexcept {\r\n        const auto _New_ptr = this->_Ptr->_Prev;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        const auto _Mycont = static_cast<const _Mylist*>(this->_Getcont());\r\n        _STL_VERIFY(_Mycont, \"cannot decrement value-initialized list iterator\");\r\n        _STL_VERIFY(_New_ptr != _Mycont->_Myhead, \"cannot decrement begin list iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        this->_Ptr = _New_ptr;\r\n        return *this;\r\n    }\r\n\r\n    _List_const_iterator operator--(int) noexcept {\r\n        _List_const_iterator _Tmp = *this;\r\n        --*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD bool operator==(const _List_const_iterator& _Right) const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(this->_Getcont() == _Right._Getcont(), \"list iterators incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        return this->_Ptr == _Right._Ptr;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD bool operator!=(const _List_const_iterator& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    friend void _Verify_range(const _List_const_iterator& _First, const _List_const_iterator& _Last) noexcept {\r\n        _STL_VERIFY(_First._Getcont() == _Last._Getcont(), \"list iterators in range are from different containers\");\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n    using _Prevent_inheriting_unwrap = _List_const_iterator;\r\n\r\n    _NODISCARD _List_unchecked_const_iterator<_Mylist> _Unwrapped() const noexcept {\r\n        return _List_unchecked_const_iterator<_Mylist>(this->_Ptr, static_cast<const _Mylist*>(this->_Getcont()));\r\n    }\r\n\r\n    void _Seek_to(const _List_unchecked_const_iterator<_Mylist> _It) noexcept {\r\n        this->_Ptr = _It._Ptr;\r\n    }\r\n};\r\n\r\ntemplate <class _Mylist>\r\nclass _List_iterator : public _List_const_iterator<_Mylist> {\r\npublic:\r\n    using _Mybase           = _List_const_iterator<_Mylist>;\r\n    using iterator_category = bidirectional_iterator_tag;\r\n\r\n    using _Nodeptr        = typename _Mylist::_Nodeptr;\r\n    using value_type      = typename _Mylist::value_type;\r\n    using difference_type = typename _Mylist::difference_type;\r\n    using pointer         = typename _Mylist::pointer;\r\n    using reference       = value_type&;\r\n\r\n    using _Mybase::_Mybase;\r\n\r\n    _NODISCARD reference operator*() const noexcept {\r\n        return const_cast<reference>(_Mybase::operator*());\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _List_iterator& operator++() noexcept {\r\n        _Mybase::operator++();\r\n        return *this;\r\n    }\r\n\r\n    _List_iterator operator++(int) noexcept {\r\n        _List_iterator _Tmp = *this;\r\n        _Mybase::operator++();\r\n        return _Tmp;\r\n    }\r\n\r\n    _List_iterator& operator--() noexcept {\r\n        _Mybase::operator--();\r\n        return *this;\r\n    }\r\n\r\n    _List_iterator operator--(int) noexcept {\r\n        _List_iterator _Tmp = *this;\r\n        _Mybase::operator--();\r\n        return _Tmp;\r\n    }\r\n\r\n    using _Prevent_inheriting_unwrap = _List_iterator;\r\n\r\n    _NODISCARD _List_unchecked_iterator<_Mylist> _Unwrapped() const noexcept {\r\n        return _List_unchecked_iterator<_Mylist>(this->_Ptr, static_cast<const _Mylist*>(this->_Getcont()));\r\n    }\r\n};\r\n\r\ntemplate <class _Value_type, class _Size_type, class _Difference_type, class _Pointer, class _Const_pointer,\r\n    class _Nodeptr_type>\r\nstruct _List_iter_types {\r\n    using value_type      = _Value_type;\r\n    using size_type       = _Size_type;\r\n    using difference_type = _Difference_type;\r\n    using pointer         = _Pointer;\r\n    using const_pointer   = _Const_pointer;\r\n    using _Nodeptr        = _Nodeptr_type;\r\n};\r\n\r\ntemplate <class _Value_type, class _Voidptr>\r\nstruct _List_node { // list node\r\n    using value_type = _Value_type;\r\n    using _Nodeptr   = _Rebind_pointer_t<_Voidptr, _List_node>;\r\n    _Nodeptr _Next; // successor node, or first element if head\r\n    _Nodeptr _Prev; // predecessor node, or last element if head\r\n    _Value_type _Myval = // the stored value, unused if head\r\n        _Returns_exactly<_Value_type>(); // fake a viable constructor to workaround GH-2749\r\n\r\n    _List_node()                             = default;\r\n    _List_node(const _List_node&)            = delete;\r\n    _List_node& operator=(const _List_node&) = delete;\r\n\r\n    template <class _Alnode>\r\n    static _Nodeptr _Buyheadnode(_Alnode& _Al) {\r\n        const auto _Result = _Al.allocate(1);\r\n        _Construct_in_place(_Result->_Next, _Result);\r\n        _Construct_in_place(_Result->_Prev, _Result);\r\n        return _Result;\r\n    }\r\n\r\n    template <class _Alnode>\r\n    static void _Freenode0(_Alnode& _Al, _Nodeptr _Ptr) noexcept {\r\n        // destroy pointer members in _Ptr and deallocate with _Al\r\n        static_assert(is_same_v<typename _Alnode::value_type, _List_node>, \"Bad _Freenode0 call\");\r\n        _Destroy_in_place(_Ptr->_Next);\r\n        _Destroy_in_place(_Ptr->_Prev);\r\n        allocator_traits<_Alnode>::deallocate(_Al, _Ptr, 1);\r\n    }\r\n\r\n    template <class _Alnode>\r\n    static void _Freenode(_Alnode& _Al, _Nodeptr _Ptr) noexcept { // destroy all members in _Ptr and deallocate with _Al\r\n        allocator_traits<_Alnode>::destroy(_Al, _STD addressof(_Ptr->_Myval));\r\n        _Freenode0(_Al, _Ptr);\r\n    }\r\n\r\n    template <class _Alnode>\r\n    static void _Free_non_head(\r\n        _Alnode& _Al, _Nodeptr _Head) noexcept { // free a list starting at _First and terminated at nullptr\r\n        _Head->_Prev->_Next = nullptr;\r\n\r\n        auto _Pnode = _Head->_Next;\r\n        for (_Nodeptr _Pnext; _Pnode; _Pnode = _Pnext) {\r\n            _Pnext = _Pnode->_Next;\r\n            _Freenode(_Al, _Pnode);\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _List_simple_types : _Simple_types<_Ty> {\r\n    using _Node    = _List_node<_Ty, void*>;\r\n    using _Nodeptr = _Node*;\r\n};\r\n\r\ntemplate <class _Val_types>\r\nclass _List_val : public _Container_base {\r\npublic:\r\n    using _Nodeptr = typename _Val_types::_Nodeptr;\r\n\r\n    using value_type      = typename _Val_types::value_type;\r\n    using size_type       = typename _Val_types::size_type;\r\n    using difference_type = typename _Val_types::difference_type;\r\n    using pointer         = typename _Val_types::pointer;\r\n    using const_pointer   = typename _Val_types::const_pointer;\r\n    using reference       = value_type&;\r\n    using const_reference = const value_type&;\r\n\r\n    _List_val() noexcept : _Myhead(), _Mysize(0) {} // initialize data\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n    ~_List_val() noexcept {\r\n        if constexpr (is_pointer_v<_Nodeptr>) {\r\n            const auto _Tombstone{reinterpret_cast<_Nodeptr>(_MSVC_STL_UINTPTR_TOMBSTONE_VALUE)};\r\n            _Myhead = _Tombstone;\r\n            _Mysize = 0;\r\n        }\r\n    }\r\n#endif // _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n\r\n    void _Orphan_ptr2(_Nodeptr _Ptr) noexcept { // orphan iterators with specified node pointers\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        _Iterator_base12** _Pnext = &this->_Myproxy->_Myfirstiter;\r\n        const auto _Head          = _Myhead;\r\n        while (*_Pnext) {\r\n            _Iterator_base12** _Pnextnext = &(*_Pnext)->_Mynextiter;\r\n            const auto _Pnextptr          = static_cast<_List_const_iterator<_List_val>&>(**_Pnext)._Ptr;\r\n            if (_Pnextptr == _Head || _Pnextptr != _Ptr) {\r\n                // iterator is end() or doesn't point at the one we are orphaning, move on\r\n                _Pnext = _Pnextnext;\r\n            } else { // orphan the iterator\r\n                (*_Pnext)->_Myproxy = nullptr;\r\n                *_Pnext             = *_Pnextnext;\r\n            }\r\n        }\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 2 / _ITERATOR_DEBUG_LEVEL != 2 vvv\r\n        (void) _Ptr;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 2 ^^^\r\n    }\r\n\r\n    void _Orphan_non_end() noexcept { // orphan iterators except end()\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        _Iterator_base12** _Pnext = &this->_Myproxy->_Myfirstiter;\r\n        const auto _Head          = _Myhead;\r\n        while (*_Pnext) {\r\n            _Iterator_base12** _Pnextnext = &(*_Pnext)->_Mynextiter;\r\n            if (static_cast<_List_const_iterator<_List_val>&>(**_Pnext)._Ptr == _Head) { // iterator is end(), move on\r\n                _Pnext = _Pnextnext;\r\n            } else { // orphan the iterator\r\n                (*_Pnext)->_Myproxy = nullptr;\r\n                *_Pnext             = *_Pnextnext;\r\n            }\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n    }\r\n\r\n    _Nodeptr _Unlinknode(_Nodeptr _Pnode) noexcept { // unlink node at _Where from the list\r\n        _Orphan_ptr2(_Pnode);\r\n        _Pnode->_Prev->_Next = _Pnode->_Next;\r\n        _Pnode->_Next->_Prev = _Pnode->_Prev;\r\n        --_Mysize;\r\n        return _Pnode;\r\n    }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    void _Adopt_unique(_List_val& _Other, _Nodeptr _Pnode) noexcept {\r\n        // adopt iterators pointing to the spliced node\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        _Iterator_base12** _Pnext = &_Other._Myproxy->_Myfirstiter;\r\n        const auto _Myproxy       = this->_Myproxy;\r\n        while (*_Pnext) {\r\n            auto& _Iter = static_cast<_List_const_iterator<_List_val>&>(**_Pnext);\r\n            if (_Iter._Ptr == _Pnode) { // adopt the iterator\r\n                *_Pnext                = _Iter._Mynextiter;\r\n                _Iter._Myproxy         = _Myproxy;\r\n                _Iter._Mynextiter      = _Myproxy->_Myfirstiter;\r\n                _Myproxy->_Myfirstiter = _STD addressof(_Iter);\r\n            } else { // skip the iterator\r\n                _Pnext = &_Iter._Mynextiter;\r\n            }\r\n        }\r\n    }\r\n\r\n    void _Adopt_all(_List_val& _Other) noexcept {\r\n        // adopt all iterators (except _Other.end())\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        _Iterator_base12** _Pnext = &_Other._Myproxy->_Myfirstiter;\r\n        const auto _Myproxy       = this->_Myproxy;\r\n        const auto _Otherhead     = _Other._Myhead;\r\n        while (*_Pnext) {\r\n            auto& _Iter = static_cast<_List_const_iterator<_List_val>&>(**_Pnext);\r\n            if (_Iter._Ptr != _Otherhead) { // adopt the iterator\r\n                *_Pnext                = _Iter._Mynextiter;\r\n                _Iter._Myproxy         = _Myproxy;\r\n                _Iter._Mynextiter      = _Myproxy->_Myfirstiter;\r\n                _Myproxy->_Myfirstiter = _STD addressof(_Iter);\r\n            } else { // skip the iterator\r\n                _Pnext = &_Iter._Mynextiter;\r\n            }\r\n        }\r\n    }\r\n\r\n    void _Adopt_range(_List_val& _Other, const _Nodeptr _First, const _Nodeptr _Last) noexcept {\r\n        // adopt all iterators pointing to nodes in the \"range\" [_First, _Last) by marking nodes\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        _Iterator_base12** _Pnext = &_Other._Myproxy->_Myfirstiter;\r\n        const auto _Myproxy       = this->_Myproxy;\r\n        _Nodeptr _Oldprev         = _First->_Prev;\r\n        for (_Nodeptr _Ptr = _First; _Ptr != _Last; _Ptr = _Ptr->_Next) { // mark _Prev pointers\r\n            _Ptr->_Prev = nullptr;\r\n        }\r\n\r\n        while (*_Pnext) { // check the iterator\r\n            auto& _Iter = static_cast<_List_const_iterator<_List_val>&>(**_Pnext);\r\n            if (_Iter._Ptr->_Prev) { // skip the iterator\r\n                _Pnext = &_Iter._Mynextiter;\r\n            } else { // adopt the iterator\r\n                *_Pnext                = _Iter._Mynextiter;\r\n                _Iter._Myproxy         = _Myproxy;\r\n                _Iter._Mynextiter      = _Myproxy->_Myfirstiter;\r\n                _Myproxy->_Myfirstiter = _STD addressof(_Iter);\r\n            }\r\n        }\r\n\r\n        for (_Nodeptr _Ptr = _First; _Ptr != _Last; _Ptr = _Ptr->_Next) { // restore _Prev pointers\r\n            _Ptr->_Prev = _Oldprev;\r\n            _Oldprev    = _Ptr;\r\n        }\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n    static _Nodeptr _Unchecked_splice(const _Nodeptr _Before, const _Nodeptr _First, const _Nodeptr _Last) noexcept {\r\n        // splice [_First, _Last) before _Before; returns _Last\r\n        _STL_INTERNAL_CHECK(_Before != _First && _Before != _Last && _First != _Last);\r\n        // 3 reads and 6 writes\r\n\r\n        // fixup the _Next values\r\n        const auto _First_prev  = _First->_Prev;\r\n        _First_prev->_Next      = _Last;\r\n        const auto _Last_prev   = _Last->_Prev;\r\n        _Last_prev->_Next       = _Before;\r\n        const auto _Before_prev = _Before->_Prev;\r\n        _Before_prev->_Next     = _First;\r\n\r\n        // fixup the _Prev values\r\n        _Before->_Prev = _Last_prev;\r\n        _Last->_Prev   = _First_prev;\r\n        _First->_Prev  = _Before_prev;\r\n\r\n        return _Last;\r\n    }\r\n\r\n    static _Nodeptr _Unchecked_splice(const _Nodeptr _Before, const _Nodeptr _First) noexcept {\r\n        // splice [_First, _First->_Next) before _Before; returns _First->_Next\r\n        _STL_INTERNAL_CHECK(_Before != _First && _First->_Next != _Before);\r\n        // still 3 reads and 6 writes, but 1 less read if the caller was going to get _First->_Next\r\n        const auto _Last = _First->_Next;\r\n\r\n        // fixup the _Next values\r\n        const auto _First_prev = _First->_Prev;\r\n        _First_prev->_Next     = _Last;\r\n        // const auto _Last_prev = _First;\r\n        _First->_Next           = _Before;\r\n        const auto _Before_prev = _Before->_Prev;\r\n        _Before_prev->_Next     = _First;\r\n\r\n        // fixup the _Prev values\r\n        _Before->_Prev = _First;\r\n        _Last->_Prev   = _First_prev;\r\n        _First->_Prev  = _Before_prev;\r\n\r\n        return _Last;\r\n    }\r\n\r\n    template <class _Pr2>\r\n    static _Nodeptr _Merge_same(_Nodeptr _First, _Nodeptr _Mid, const _Nodeptr _Last, _Pr2 _Pred) {\r\n        // Merge the sorted ranges [_First, _Mid) and [_Mid, _Last)\r\n        // Returns the new beginning of the range (which won't be _First if it was spliced elsewhere)\r\n        _STL_INTERNAL_CHECK(_First != _Mid && _Mid != _Last);\r\n        _Nodeptr _Newfirst;\r\n        if (_DEBUG_LT_PRED(_Pred, _Mid->_Myval, _First->_Myval)) {\r\n            // _Mid will be spliced to the front of the range\r\n            _Newfirst = _Mid;\r\n        } else {\r\n            // Establish _Pred(_Mid->_Myval, _First->_Myval) by skipping over elements from the first\r\n            // range already in position.\r\n            _Newfirst = _First;\r\n            do {\r\n                _First = _First->_Next;\r\n                if (_First == _Mid) {\r\n                    return _Newfirst;\r\n                }\r\n            } while (!_DEBUG_LT_PRED(_Pred, _Mid->_Myval, _First->_Myval));\r\n        }\r\n\r\n        for (;;) { // process one run splice\r\n            auto _Run_start = _Mid;\r\n            do { // find the end of the \"run\" of elements we need to splice from the second range into the first\r\n                _Mid = _Mid->_Next;\r\n            } while (_Mid != _Last && _DEBUG_LT_PRED(_Pred, _Mid->_Myval, _First->_Myval));\r\n\r\n            // [_Run_start, _Mid) goes before _First->_Myval\r\n            _Unchecked_splice(_First, _Run_start, _Mid);\r\n            if (_Mid == _Last) {\r\n                return _Newfirst;\r\n            }\r\n\r\n            // Reestablish _Pred(_Mid->_Myval, _First->_Myval) by skipping over elements from the first\r\n            // range already in position.\r\n            do {\r\n                _First = _First->_Next;\r\n                if (_First == _Mid) {\r\n                    return _Newfirst;\r\n                }\r\n            } while (!_DEBUG_LT_PRED(_Pred, _Mid->_Myval, _First->_Myval));\r\n        }\r\n    }\r\n\r\n    template <class _Pr2>\r\n    static _Nodeptr _Sort(_Nodeptr& _First, const size_type _Size, _Pr2 _Pred) {\r\n        // order [_First, _First + _Size), return _First + _Size\r\n        switch (_Size) {\r\n        case 0:\r\n            return _First;\r\n        case 1:\r\n            return _First->_Next;\r\n        default:\r\n            break;\r\n        }\r\n\r\n        auto _Mid        = _Sort(_First, _Size / 2, _Pred);\r\n        const auto _Last = _Sort(_Mid, _Size - _Size / 2, _Pred);\r\n        _First           = _Merge_same(_First, _Mid, _Last, _Pred);\r\n        return _Last;\r\n    }\r\n\r\n    _Nodeptr _Myhead; // pointer to head node\r\n    size_type _Mysize; // number of elements\r\n};\r\n\r\ntemplate <class _Alnode>\r\nstruct _List_node_emplace_op2 : _Alloc_construct_ptr<_Alnode> {\r\n    using _Alnode_traits = allocator_traits<_Alnode>;\r\n    using pointer        = typename _Alnode_traits::pointer;\r\n\r\n    template <class... _Valtys>\r\n    explicit _List_node_emplace_op2(_Alnode& _Al_, _Valtys&&... _Vals) : _Alloc_construct_ptr<_Alnode>(_Al_) {\r\n        this->_Allocate();\r\n        _Alnode_traits::construct(this->_Al, _STD addressof(this->_Ptr->_Myval), _STD forward<_Valtys>(_Vals)...);\r\n    }\r\n\r\n    ~_List_node_emplace_op2() {\r\n        if (this->_Ptr != pointer{}) {\r\n            _Alnode_traits::destroy(this->_Al, _STD addressof(this->_Ptr->_Myval));\r\n        }\r\n    }\r\n\r\n    _List_node_emplace_op2(const _List_node_emplace_op2&)            = delete;\r\n    _List_node_emplace_op2& operator=(const _List_node_emplace_op2&) = delete;\r\n\r\n    pointer _Transfer_before(const pointer _Insert_before) noexcept {\r\n        const pointer _Insert_after = _Insert_before->_Prev;\r\n        _Construct_in_place(this->_Ptr->_Next, _Insert_before);\r\n        _Construct_in_place(this->_Ptr->_Prev, _Insert_after);\r\n        const auto _Result    = this->_Ptr;\r\n        this->_Ptr            = pointer{};\r\n        _Insert_before->_Prev = _Result;\r\n        _Insert_after->_Next  = _Result;\r\n        return _Result;\r\n    }\r\n};\r\n\r\ntemplate <class _Alnode>\r\nstruct _List_node_insert_op2 {\r\n    // list insert operation which maintains exception safety\r\n    using _Alnode_traits = allocator_traits<_Alnode>;\r\n    using pointer        = typename _Alnode_traits::pointer;\r\n    using size_type      = typename _Alnode_traits::size_type;\r\n    using value_type     = typename _Alnode_traits::value_type;\r\n\r\n    explicit _List_node_insert_op2(_Alnode& _Al_) : _Al(_Al_), _Added(0) {}\r\n\r\n    _List_node_insert_op2(const _List_node_insert_op2&)            = delete;\r\n    _List_node_insert_op2& operator=(const _List_node_insert_op2&) = delete;\r\n\r\n    template <class... _CArgT>\r\n    void _Append_n(size_type _Count, const _CArgT&... _Carg) {\r\n        // Append _Count elements constructed from _Carg\r\n        if (_Count <= 0) {\r\n            return;\r\n        }\r\n\r\n        _Alloc_construct_ptr<_Alnode> _Newnode(_Al);\r\n        if (_Added == 0) {\r\n            _Newnode._Allocate(); // throws\r\n            _Alnode_traits::construct(_Al, _STD addressof(_Newnode._Ptr->_Myval), _Carg...); // throws\r\n            _Head = _Newnode._Ptr;\r\n            _Tail = _Newnode._Ptr;\r\n            ++_Added;\r\n            --_Count;\r\n        }\r\n\r\n        for (; 0 < _Count; --_Count) {\r\n            _Newnode._Allocate(); // throws\r\n            _Alnode_traits::construct(_Al, _STD addressof(_Newnode._Ptr->_Myval), _Carg...); // throws\r\n            _Construct_in_place(_Tail->_Next, _Newnode._Ptr);\r\n            _Construct_in_place(_Newnode._Ptr->_Prev, _Tail);\r\n            _Tail = _Newnode._Ptr;\r\n            ++_Added;\r\n        }\r\n\r\n        _Newnode._Ptr = pointer{};\r\n    }\r\n\r\n    template <class _InIt, class _Sentinel>\r\n    void _Append_range_unchecked(_InIt _First, const _Sentinel _Last) {\r\n        // Append the values in [_First, _Last)\r\n        if (_First == _Last) { // throws\r\n            return;\r\n        }\r\n\r\n        _Alloc_construct_ptr<_Alnode> _Newnode(_Al);\r\n        if (_Added == 0) {\r\n            _Newnode._Allocate(); // throws\r\n            _Alnode_traits::construct(_Al, _STD addressof(_Newnode._Ptr->_Myval), *_First); // throws\r\n            const auto _Newhead = _STD exchange(_Newnode._Ptr, pointer{});\r\n            _Head               = _Newhead;\r\n            _Tail               = _Newhead;\r\n            ++_Added;\r\n            ++_First; // throws\r\n        }\r\n\r\n        while (_First != _Last) { // throws\r\n            _Newnode._Allocate(); // throws\r\n            _Alnode_traits::construct(_Al, _STD addressof(_Newnode._Ptr->_Myval), *_First); // throws\r\n            _Construct_in_place(_Tail->_Next, _Newnode._Ptr);\r\n            _Construct_in_place(_Newnode._Ptr->_Prev, _Tail);\r\n            _Tail = _STD exchange(_Newnode._Ptr, pointer{});\r\n            ++_Added;\r\n            ++_First; // throws\r\n        }\r\n    }\r\n\r\n    template <class _Val_types>\r\n    pointer _Attach_before(_List_val<_Val_types>& _List_data, const pointer _Insert_before) noexcept {\r\n        // Attach the elements in *this before _Insert_before.\r\n        // If *this is empty, returns _Insert_before; otherwise returns a pointer to the first inserted list node.\r\n        // Resets *this to the default-initialized state.\r\n\r\n        const auto _Local_added = _Added;\r\n        if (_Local_added == 0) {\r\n            return _Insert_before;\r\n        }\r\n\r\n        const auto _Local_head   = _Head;\r\n        const auto _Local_tail   = _Tail;\r\n        const auto _Insert_after = _Insert_before->_Prev;\r\n\r\n        _Construct_in_place(_Local_head->_Prev, _Insert_after);\r\n        _Insert_after->_Next = _Local_head;\r\n        _Construct_in_place(_Local_tail->_Next, _Insert_before);\r\n        _Insert_before->_Prev = _Local_tail;\r\n\r\n        _List_data._Mysize += _Local_added;\r\n        _Added = 0;\r\n        return _Local_head;\r\n    }\r\n\r\n    template <class _Val_types>\r\n    void _Attach_at_end(_List_val<_Val_types>& _List_data) noexcept {\r\n        _Attach_before(_List_data, _List_data._Myhead);\r\n    }\r\n\r\n    template <class _Val_types>\r\n    void _Attach_head(_List_val<_Val_types>& _List_data) {\r\n        _Alloc_construct_ptr<_Alnode> _Newnode(_Al);\r\n        _Newnode._Allocate(); // throws\r\n        const auto _Local_added = _STD exchange(_Added, size_type{0});\r\n        if (_Local_added == 0) {\r\n            _Construct_in_place(_Newnode._Ptr->_Next, _Newnode._Ptr);\r\n            _Construct_in_place(_Newnode._Ptr->_Prev, _Newnode._Ptr);\r\n        } else {\r\n            const auto _Local_head = _Head;\r\n            const auto _Local_tail = _Tail;\r\n            _Construct_in_place(_Newnode._Ptr->_Next, _Local_head);\r\n            _Construct_in_place(_Newnode._Ptr->_Prev, _Local_tail);\r\n            _Construct_in_place(_Local_head->_Prev, _Newnode._Ptr);\r\n            _Construct_in_place(_Local_tail->_Next, _Newnode._Ptr);\r\n        }\r\n\r\n        _List_data._Mysize = _Local_added;\r\n        _List_data._Myhead = _Newnode._Release();\r\n    }\r\n\r\n    ~_List_node_insert_op2() {\r\n        if (_Added == 0) {\r\n            return;\r\n        }\r\n\r\n        _Construct_in_place(_Head->_Prev, pointer{});\r\n        _Construct_in_place(_Tail->_Next, pointer{});\r\n        pointer _Subject = _Head;\r\n        while (_Subject) {\r\n            value_type::_Freenode(_Al, _STD exchange(_Subject, _Subject->_Next));\r\n        }\r\n    }\r\n\r\nprivate:\r\n    _Alnode& _Al;\r\n    size_type _Added; // if 0, the values of _Head and _Tail are indeterminate\r\n    pointer _Tail{}; // points to the most recently appended element; it doesn't have _Next constructed\r\n    pointer _Head{}; // points to the first appended element; it doesn't have _Prev constructed\r\n};\r\n\r\ntemplate <class _Traits>\r\nclass _Hash;\r\n\r\nstruct _Move_allocator_tag {\r\n    explicit _Move_allocator_tag() = default;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc = allocator<_Ty>>\r\nclass list { // bidirectional linked list\r\nprivate:\r\n    template <class>\r\n    friend class _Hash;\r\n    template <class _Traits>\r\n    friend bool _Hash_equal(const _Hash<_Traits>&, const _Hash<_Traits>&);\r\n\r\n    using _Alty          = _Rebind_alloc_t<_Alloc, _Ty>;\r\n    using _Alty_traits   = allocator_traits<_Alty>;\r\n    using _Node          = _List_node<_Ty, typename allocator_traits<_Alloc>::void_pointer>;\r\n    using _Alnode        = _Rebind_alloc_t<_Alloc, _Node>;\r\n    using _Alnode_traits = allocator_traits<_Alnode>;\r\n    using _Nodeptr       = typename _Alnode_traits::pointer;\r\n\r\n    using _Val_types = conditional_t<_Is_simple_alloc_v<_Alnode>, _List_simple_types<_Ty>,\r\n        _List_iter_types<_Ty, typename _Alty_traits::size_type, typename _Alty_traits::difference_type,\r\n            typename _Alty_traits::pointer, typename _Alty_traits::const_pointer, _Nodeptr>>;\r\n\r\n    using _Scary_val = _List_val<_Val_types>;\r\n\r\npublic:\r\n    static_assert(!_ENFORCE_MATCHING_ALLOCATORS || is_same_v<_Ty, typename _Alloc::value_type>,\r\n        _MISMATCHED_ALLOCATOR_MESSAGE(\"list<T, Allocator>\", \"T\"));\r\n    static_assert(is_object_v<_Ty>, \"The C++ Standard forbids containers of non-object types \"\r\n                                    \"because of [container.requirements].\");\r\n\r\n    using value_type      = _Ty;\r\n    using allocator_type  = _Alloc;\r\n    using size_type       = typename _Alty_traits::size_type;\r\n    using difference_type = typename _Alty_traits::difference_type;\r\n    using pointer         = typename _Alty_traits::pointer;\r\n    using const_pointer   = typename _Alty_traits::const_pointer;\r\n    using reference       = value_type&;\r\n    using const_reference = const value_type&;\r\n\r\n    using iterator                  = _List_iterator<_Scary_val>;\r\n    using const_iterator            = _List_const_iterator<_Scary_val>;\r\n    using _Unchecked_iterator       = _List_unchecked_iterator<_Scary_val>;\r\n    using _Unchecked_const_iterator = _List_unchecked_const_iterator<_Scary_val>;\r\n\r\n    using reverse_iterator       = _STD reverse_iterator<iterator>;\r\n    using const_reverse_iterator = _STD reverse_iterator<const_iterator>;\r\n\r\n    list() : _Mypair(_Zero_then_variadic_args_t{}) {\r\n        _Alloc_sentinel_and_proxy();\r\n    }\r\n\r\n    explicit list(const _Alloc& _Al) : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Alloc_sentinel_and_proxy();\r\n    }\r\n\r\nprivate:\r\n    template <class _Tag, class _Any_alloc, enable_if_t<is_same_v<_Tag, _Move_allocator_tag>, int> = 0>\r\n    explicit list(_Tag, _Any_alloc& _Al) : _Mypair(_One_then_variadic_args_t{}, _STD move(_Al)) {\r\n        _Alloc_sentinel_and_proxy();\r\n    }\r\n\r\n    void _Construct_n(_CRT_GUARDOVERFLOW size_type _Count) {\r\n        auto _Alproxy = _STD _Get_proxy_allocator(_Getal());\r\n        _Container_proxy_ptr<_Alty> _Proxy(_Alproxy, _Mypair._Myval2);\r\n        _List_node_insert_op2<_Alnode> _Appended(_Getal());\r\n        _Appended._Append_n(_Count);\r\n        _Appended._Attach_head(_Mypair._Myval2);\r\n        _Proxy._Release();\r\n    }\r\n\r\npublic:\r\n    explicit list(_CRT_GUARDOVERFLOW size_type _Count)\r\n        : _Mypair(_Zero_then_variadic_args_t{}) { // construct list from _Count * _Ty()\r\n        _Construct_n(_Count);\r\n    }\r\n\r\n    explicit list(_CRT_GUARDOVERFLOW size_type _Count, const _Alloc& _Al)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) { // construct list from _Count * _Ty(), with allocator\r\n        _Construct_n(_Count);\r\n    }\r\n\r\nprivate:\r\n    void _Construct_n(_CRT_GUARDOVERFLOW size_type _Count, const _Ty& _Val) {\r\n        auto _Alproxy = _STD _Get_proxy_allocator(_Getal());\r\n        _Container_proxy_ptr<_Alty> _Proxy(_Alproxy, _Mypair._Myval2);\r\n        _List_node_insert_op2<_Alnode> _Appended(_Getal());\r\n        _Appended._Append_n(_Count, _Val);\r\n        _Appended._Attach_head(_Mypair._Myval2);\r\n        _Proxy._Release();\r\n    }\r\n\r\npublic:\r\n    list(_CRT_GUARDOVERFLOW size_type _Count, const _Ty& _Val)\r\n        : _Mypair(_Zero_then_variadic_args_t{}) { // construct list from _Count * _Val\r\n        _Construct_n(_Count, _Val);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _Alloc2 = _Alloc, enable_if_t<_Is_allocator<_Alloc2>::value, int> = 0>\r\n#endif // _HAS_CXX17\r\n    list(_CRT_GUARDOVERFLOW size_type _Count, const _Ty& _Val, const _Alloc& _Al)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) { // construct list from _Count * _Val, allocator\r\n        _Construct_n(_Count, _Val);\r\n    }\r\n\r\nprivate:\r\n    template <class _Iter, class _Sent>\r\n    void _Construct_range_unchecked(_Iter _First, const _Sent _Last) {\r\n        auto _Alproxy = _STD _Get_proxy_allocator(_Getal());\r\n        _Container_proxy_ptr<_Alty> _Proxy(_Alproxy, _Mypair._Myval2);\r\n        _List_node_insert_op2<_Alnode> _Appended(_Getal());\r\n        _Appended._Append_range_unchecked(_STD move(_First), _Last);\r\n        _Appended._Attach_head(_Mypair._Myval2);\r\n        _Proxy._Release();\r\n    }\r\n\r\npublic:\r\n    list(const list& _Right)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Alnode_traits::select_on_container_copy_construction(_Right._Getal())) {\r\n        _Construct_range_unchecked(_Right._Unchecked_begin(), _Right._Unchecked_end());\r\n    }\r\n\r\n    list(const list& _Right, const _Identity_t<_Alloc>& _Al) : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Construct_range_unchecked(_Right._Unchecked_begin(), _Right._Unchecked_end());\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    list(_Iter _First, _Iter _Last) : _Mypair(_Zero_then_variadic_args_t{}) {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        _Construct_range_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last));\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    list(_Iter _First, _Iter _Last, const _Alloc& _Al) : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        _Construct_range_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    list(from_range_t, _Rng&& _Range) : _Mypair(_Zero_then_variadic_args_t{}) {\r\n        _Construct_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    list(from_range_t, _Rng&& _Range, const _Alloc& _Al) : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Construct_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    list(list&& _Right) noexcept(false) : _Mypair(_One_then_variadic_args_t{}, _STD move(_Right._Getal())) {\r\n        _Alloc_sentinel_and_proxy();\r\n        _Swap_val(_Right);\r\n    }\r\n\r\n    list(list&& _Right, const _Identity_t<_Alloc>& _Al) : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        if constexpr (!_Alnode_traits::is_always_equal::value) {\r\n            if (_Getal() != _Right._Getal()) {\r\n                _Construct_range_unchecked(_STD make_move_iterator(_Right._Unchecked_begin()),\r\n                    _STD make_move_iterator(_Right._Unchecked_end()));\r\n                return;\r\n            }\r\n        }\r\n\r\n        _Alloc_sentinel_and_proxy();\r\n        _Swap_val(_Right);\r\n    }\r\n\r\n    list& operator=(list&& _Right) noexcept(_Alnode_traits::is_always_equal::value) {\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n        auto& _Al                 = _Getal();\r\n        auto& _Right_al           = _Right._Getal();\r\n        constexpr auto _Pocma_val = _Choose_pocma_v<_Alnode>;\r\n        if constexpr (_Pocma_val == _Pocma_values::_Propagate_allocators) {\r\n            if (_Al != _Right_al) {\r\n                auto _Alproxy       = _STD _Get_proxy_allocator(_Al);\r\n                auto _Right_alproxy = _STD _Get_proxy_allocator(_Right_al);\r\n                _Container_proxy_ptr<_Alty> _Proxy(_Right_alproxy, _Leave_proxy_unbound{});\r\n                auto& _My_data      = _Mypair._Myval2;\r\n                auto& _Right_data   = _Right._Mypair._Myval2;\r\n                const auto _Newhead = _STD exchange(_Right_data._Myhead, _Node::_Buyheadnode(_Right_al));\r\n                const auto _Newsize = _STD exchange(_Right_data._Mysize, size_type{0});\r\n                _Tidy();\r\n                _Pocma(_Al, _Right_al);\r\n                _My_data._Myhead = _Newhead;\r\n                _My_data._Mysize = _Newsize;\r\n                _Proxy._Bind(_Alproxy, _STD addressof(_My_data));\r\n                _My_data._Swap_proxy_and_iterators(_Right_data);\r\n                return *this;\r\n            }\r\n        } else if constexpr (_Pocma_val == _Pocma_values::_No_propagate_allocators) {\r\n            if (_Al != _Right_al) {\r\n                assign(_STD make_move_iterator(_Right._Unchecked_begin()),\r\n                    _STD make_move_iterator(_Right._Unchecked_end()));\r\n                return *this;\r\n            }\r\n        }\r\n\r\n        clear();\r\n        _Pocma(_Al, _Right_al);\r\n        _Swap_val(_Right);\r\n\r\n        return *this;\r\n    }\r\n\r\nprivate:\r\n    void _Swap_val(list& _Right) noexcept { // swap with _Right, same allocator\r\n        using _STD swap;\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        auto& _Right_data = _Right._Mypair._Myval2;\r\n        _My_data._Swap_proxy_and_iterators(_Right_data);\r\n        swap(_My_data._Myhead, _Right_data._Myhead); // intentional ADL\r\n        _STD swap(_My_data._Mysize, _Right_data._Mysize);\r\n    }\r\n\r\npublic:\r\n    void push_front(_Ty&& _Val) { // insert element at beginning\r\n        _Emplace(_Mypair._Myval2._Myhead->_Next, _STD move(_Val));\r\n    }\r\n\r\n    void push_back(_Ty&& _Val) { // insert element at end\r\n        _Emplace(_Mypair._Myval2._Myhead, _STD move(_Val));\r\n    }\r\n\r\n    iterator insert(const_iterator _Where, _Ty&& _Val) { // insert _Val at _Where\r\n        return emplace(_Where, _STD move(_Val));\r\n    }\r\n\r\n    template <class... _Valty>\r\n    _CONTAINER_EMPLACE_RETURN emplace_front(_Valty&&... _Val) { // insert element at beginning\r\n        reference _Result = _Emplace(_Mypair._Myval2._Myhead->_Next, _STD forward<_Valty>(_Val)...)->_Myval;\r\n\r\n#if _HAS_CXX17\r\n        return _Result;\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n        (void) _Result;\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n    }\r\n\r\n    template <class... _Valty>\r\n    _CONTAINER_EMPLACE_RETURN emplace_back(_Valty&&... _Val) { // insert element at end\r\n        reference _Result = _Emplace(_Mypair._Myval2._Myhead, _STD forward<_Valty>(_Val)...)->_Myval;\r\n\r\n#if _HAS_CXX17\r\n        return _Result;\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n        (void) _Result;\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n    }\r\n\r\n    template <class... _Valty>\r\n    iterator emplace(const const_iterator _Where, _Valty&&... _Val) { // insert element at _Where\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2), \"list emplace iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        return _Make_iter(_Emplace(_Where._Ptr, _STD forward<_Valty>(_Val)...));\r\n    }\r\n\r\n    template <class... _Valty>\r\n    _Nodeptr _Emplace(const _Nodeptr _Where, _Valty&&... _Val) { // insert element at _Where\r\n        size_type& _Mysize = _Mypair._Myval2._Mysize;\r\n        if (_Mysize == max_size()) {\r\n            _Xlength_error(\"list too long\");\r\n        }\r\n\r\n        _List_node_emplace_op2<_Alnode> _Op{_Getal(), _STD forward<_Valty>(_Val)...};\r\n        ++_Mysize;\r\n        return _Op._Transfer_before(_Where);\r\n    }\r\n\r\n    list(initializer_list<_Ty> _Ilist) : _Mypair(_Zero_then_variadic_args_t{}) {\r\n        _Construct_range_unchecked(_Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\n    list(initializer_list<_Ty> _Ilist, const _Alloc& _Al) : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Construct_range_unchecked(_Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\n    list& operator=(initializer_list<_Ty> _Ilist) {\r\n        assign(_Ilist.begin(), _Ilist.end());\r\n        return *this;\r\n    }\r\n\r\n    void assign(initializer_list<_Ty> _Ilist) {\r\n        assign(_Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\n    iterator insert(const_iterator _Where, initializer_list<_Ty> _Ilist) { // insert initializer_list\r\n        return insert(_Where, _Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\n    ~list() noexcept {\r\n        _Tidy();\r\n#if _ITERATOR_DEBUG_LEVEL != 0 // TRANSITION, ABI\r\n        auto _Alproxy = _STD _Get_proxy_allocator(_Getal());\r\n        _Delete_plain_internal(_Alproxy, _Mypair._Myval2._Myproxy);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\nprivate:\r\n    void _Reload_sentinel_and_proxy(const list& _Right) { // reload sentinel / proxy from unequal POCCA _Right\r\n        auto& _Al           = _Getal();\r\n        auto _Alproxy       = _STD _Get_proxy_allocator(_Al);\r\n        auto& _Right_al     = _Right._Getal();\r\n        auto _Right_alproxy = _STD _Get_proxy_allocator(_Right_al);\r\n        _Container_proxy_ptr<_Alty> _Proxy(_Right_alproxy, _Leave_proxy_unbound{});\r\n        auto _Right_al_non_const = _Right_al;\r\n        auto _Newhead            = _Node::_Buyheadnode(_Right_al_non_const);\r\n        _Tidy();\r\n        _Pocca(_Al, _Right_al);\r\n        _Mypair._Myval2._Myhead = _Newhead;\r\n        _Mypair._Myval2._Mysize = 0;\r\n        _Proxy._Bind(_Alproxy, _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\npublic:\r\n    list& operator=(const list& _Right) {\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n        auto& _Al       = _Getal();\r\n        auto& _Right_al = _Right._Getal();\r\n        if constexpr (_Choose_pocca_v<_Alnode>) {\r\n            if (_Al != _Right_al) {\r\n                _Reload_sentinel_and_proxy(_Right);\r\n            }\r\n        } else {\r\n            _Pocca(_Al, _Right_al);\r\n        }\r\n\r\n        assign(_Right._Unchecked_begin(), _Right._Unchecked_end());\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD iterator begin() noexcept {\r\n        return iterator(_Mypair._Myval2._Myhead->_Next, _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _NODISCARD const_iterator begin() const noexcept {\r\n        return const_iterator(_Mypair._Myval2._Myhead->_Next, _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _NODISCARD iterator end() noexcept {\r\n        return iterator(_Mypair._Myval2._Myhead, _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _NODISCARD const_iterator end() const noexcept {\r\n        return const_iterator(_Mypair._Myval2._Myhead, _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _Unchecked_iterator _Unchecked_begin() noexcept {\r\n        return _Unchecked_iterator(_Mypair._Myval2._Myhead->_Next, nullptr);\r\n    }\r\n\r\n    _Unchecked_const_iterator _Unchecked_begin() const noexcept {\r\n        return _Unchecked_const_iterator(_Mypair._Myval2._Myhead->_Next, nullptr);\r\n    }\r\n\r\n    _Unchecked_iterator _Unchecked_end() noexcept {\r\n        return _Unchecked_iterator(_Mypair._Myval2._Myhead, nullptr);\r\n    }\r\n\r\n    _Unchecked_const_iterator _Unchecked_end() const noexcept {\r\n        return _Unchecked_const_iterator(_Mypair._Myval2._Myhead, nullptr);\r\n    }\r\n\r\n    iterator _Make_iter(_Nodeptr _Where) const noexcept {\r\n        return iterator(_Where, _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    const_iterator _Make_const_iter(_Nodeptr _Where) const noexcept {\r\n        return const_iterator(_Where, _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _NODISCARD reverse_iterator rbegin() noexcept {\r\n        return reverse_iterator(end());\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator rbegin() const noexcept {\r\n        return const_reverse_iterator(end());\r\n    }\r\n\r\n    _NODISCARD reverse_iterator rend() noexcept {\r\n        return reverse_iterator(begin());\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator rend() const noexcept {\r\n        return const_reverse_iterator(begin());\r\n    }\r\n\r\n    _NODISCARD const_iterator cbegin() const noexcept {\r\n        return begin();\r\n    }\r\n\r\n    _NODISCARD const_iterator cend() const noexcept {\r\n        return end();\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator crbegin() const noexcept {\r\n        return rbegin();\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator crend() const noexcept {\r\n        return rend();\r\n    }\r\n\r\n    void resize(_CRT_GUARDOVERFLOW size_type _Newsize) { // determine new length, padding with _Ty() elements as needed\r\n        auto& _My_data = _Mypair._Myval2;\r\n        if (_My_data._Mysize < _Newsize) { // pad to make larger\r\n            _List_node_insert_op2<_Alnode> _Op(_Getal());\r\n            _Op._Append_n(_Newsize - _My_data._Mysize);\r\n            _Op._Attach_at_end(_My_data);\r\n        } else {\r\n            while (_Newsize < _My_data._Mysize) {\r\n                pop_back();\r\n            }\r\n        }\r\n    }\r\n\r\n    void resize(_CRT_GUARDOVERFLOW size_type _Newsize, const _Ty& _Val) {\r\n        // determine new length, padding with _Val elements as needed\r\n        auto& _My_data = _Mypair._Myval2;\r\n        if (_My_data._Mysize < _Newsize) { // pad to make larger\r\n            _List_node_insert_op2<_Alnode> _Op(_Getal());\r\n            _Op._Append_n(_Newsize - _My_data._Mysize, _Val);\r\n            _Op._Attach_at_end(_My_data);\r\n        } else {\r\n            while (_Newsize < _My_data._Mysize) {\r\n                pop_back();\r\n            }\r\n        }\r\n    }\r\n\r\n    _NODISCARD size_type size() const noexcept {\r\n        return _Mypair._Myval2._Mysize;\r\n    }\r\n\r\n    _NODISCARD size_type max_size() const noexcept {\r\n        return (_STD min) (static_cast<size_type>(_STD _Max_limit<difference_type>()), //\r\n            _Alnode_traits::max_size(_Getal()));\r\n    }\r\n\r\n    _NODISCARD_EMPTY_MEMBER bool empty() const noexcept {\r\n        return _Mypair._Myval2._Mysize == 0;\r\n    }\r\n\r\n    _NODISCARD allocator_type get_allocator() const noexcept {\r\n        return static_cast<allocator_type>(_Getal());\r\n    }\r\n\r\n    _NODISCARD reference front() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_LIST || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mypair._Myval2._Mysize != 0, \"front() called on empty list\");\r\n#endif\r\n\r\n        return _Mypair._Myval2._Myhead->_Next->_Myval;\r\n    }\r\n\r\n    _NODISCARD const_reference front() const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_LIST || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mypair._Myval2._Mysize != 0, \"front() called on empty list\");\r\n#endif\r\n\r\n        return _Mypair._Myval2._Myhead->_Next->_Myval;\r\n    }\r\n\r\n    _NODISCARD reference back() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_LIST || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mypair._Myval2._Mysize != 0, \"back() called on empty list\");\r\n#endif\r\n\r\n        return _Mypair._Myval2._Myhead->_Prev->_Myval;\r\n    }\r\n\r\n    _NODISCARD const_reference back() const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_LIST || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mypair._Myval2._Mysize != 0, \"back() called on empty list\");\r\n#endif\r\n\r\n        return _Mypair._Myval2._Myhead->_Prev->_Myval;\r\n    }\r\n\r\n    void push_front(const _Ty& _Val) {\r\n        _Emplace(_Mypair._Myval2._Myhead->_Next, _Val);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    void prepend_range(_Rng&& _Range) {\r\n        _List_node_insert_op2<_Alnode> _Op(_Getal());\r\n        _Op._Append_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n        _Op._Attach_before(_Mypair._Myval2, _Mypair._Myval2._Myhead->_Next);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    void pop_front() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_LIST || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mypair._Myval2._Mysize != 0, \"pop_front() called on empty list\");\r\n#endif\r\n\r\n        _Unchecked_erase(_Mypair._Myval2._Myhead->_Next);\r\n    }\r\n\r\n    void push_back(const _Ty& _Val) {\r\n        _Emplace(_Mypair._Myval2._Myhead, _Val);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    void append_range(_Rng&& _Range) {\r\n        _List_node_insert_op2<_Alnode> _Op(_Getal());\r\n        _Op._Append_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n        _Op._Attach_at_end(_Mypair._Myval2);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    void pop_back() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_LIST || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mypair._Myval2._Mysize != 0, \"pop_back() called on empty list\");\r\n#endif\r\n\r\n        _Unchecked_erase(_Mypair._Myval2._Myhead->_Prev);\r\n    }\r\n\r\nprivate:\r\n    template <class _Target_ref, class _UIter>\r\n    void _Assign_cast(_UIter _UFirst, const _UIter _ULast) {\r\n        // assign [_UFirst, _ULast), casting existing nodes to _Target_ref\r\n        const auto _Myend = _Mypair._Myval2._Myhead;\r\n        auto _Old         = _Myend->_Next;\r\n        for (;;) { // attempt to reuse a node\r\n            if (_Old == _Myend) { // no more nodes to reuse, append the rest\r\n                _List_node_insert_op2<_Alnode> _Op(_Getal());\r\n                _Op._Append_range_unchecked(_UFirst, _ULast);\r\n                _Op._Attach_at_end(_Mypair._Myval2);\r\n                return;\r\n            }\r\n\r\n            if (_UFirst == _ULast) {\r\n                // input sequence was shorter than existing list, destroy and deallocate what's left\r\n                _Unchecked_erase(_Old, _Myend);\r\n                return;\r\n            }\r\n\r\n            // reuse the node\r\n            reinterpret_cast<_Target_ref>(_Old->_Myval) = *_UFirst;\r\n            _Old                                        = _Old->_Next;\r\n            ++_UFirst;\r\n        }\r\n    }\r\n\r\n    template <class _Iter, class _Sent>\r\n    void _Assign_unchecked(_Iter _First, const _Sent _Last) {\r\n        // assign [_First, _Last)\r\n        const auto _Myend = _Mypair._Myval2._Myhead;\r\n        auto _Old         = _Myend->_Next;\r\n        for (;;) { // attempt to reuse a node\r\n            if (_First == _Last) {\r\n                // input sequence exhausted; destroy and deallocate any tail of unneeded nodes\r\n                _Unchecked_erase(_Old, _Myend);\r\n                return;\r\n            }\r\n\r\n            if (_Old == _Myend) { // no more nodes to reuse, append the rest\r\n                _List_node_insert_op2<_Alnode> _Op(_Getal());\r\n                _Op._Append_range_unchecked(_STD move(_First), _Last);\r\n                _Op._Attach_at_end(_Mypair._Myval2);\r\n                return;\r\n            }\r\n\r\n            // reuse the node\r\n            _Old->_Myval = *_First;\r\n            _Old         = _Old->_Next;\r\n            ++_First;\r\n        }\r\n    }\r\n\r\npublic:\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    void assign(_Iter _First, _Iter _Last) {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        _Assign_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    void assign_range(_Rng&& _Range) {\r\n        static_assert(assignable_from<_Ty&, _RANGES range_reference_t<_Rng>>,\r\n            \"Elements must be assignable from the range's reference type (N4993 [sequence.reqmts]/60).\");\r\n        _Assign_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    void assign(_CRT_GUARDOVERFLOW size_type _Count, const _Ty& _Val) { // assign _Count * _Val\r\n        const auto _Myend = _Mypair._Myval2._Myhead;\r\n        auto _Old         = _Myend->_Next;\r\n        for (;;) { // attempt to reuse a node\r\n            if (_Old == _Myend) { // no more nodes to reuse, append the rest\r\n                _List_node_insert_op2<_Alnode> _Op(_Getal());\r\n                _Op._Append_n(_Count, _Val);\r\n                _Op._Attach_at_end(_Mypair._Myval2);\r\n                return;\r\n            }\r\n\r\n            if (_Count == 0) {\r\n                // input sequence was shorter than existing list, destroy and deallocate what's left\r\n                _Unchecked_erase(_Old, _Myend);\r\n                return;\r\n            }\r\n\r\n            // reuse the node\r\n            _Old->_Myval = _Val;\r\n            _Old         = _Old->_Next;\r\n            --_Count;\r\n        }\r\n    }\r\n\r\n    iterator insert(const_iterator _Where, const _Ty& _Val) { // insert _Val at _Where\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2), \"list insert iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        return _Make_iter(_Emplace(_Where._Ptr, _Val));\r\n    }\r\n\r\n    iterator insert(const_iterator _Where, _CRT_GUARDOVERFLOW size_type _Count, const _Ty& _Val) {\r\n        // insert _Count * _Val before _Where\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2), \"list insert iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        _List_node_insert_op2<_Alnode> _Op(_Getal());\r\n        _Op._Append_n(_Count, _Val);\r\n        return _Make_iter(_Op._Attach_before(_Mypair._Myval2, _Where._Ptr));\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    iterator insert(const const_iterator _Where, _Iter _First, _Iter _Last) { // insert [_First, _Last) before _Where\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2), \"list insert iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        _List_node_insert_op2<_Alnode> _Op(_Getal());\r\n        _Op._Append_range_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last));\r\n        return _Make_iter(_Op._Attach_before(_Mypair._Myval2, _Where._Ptr));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    iterator insert_range(const_iterator _Where, _Rng&& _Range) {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2), \"list insert_range iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        _List_node_insert_op2<_Alnode> _Op(_Getal());\r\n        _Op._Append_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n        return _Make_iter(_Op._Attach_before(_Mypair._Myval2, _Where._Ptr));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    iterator erase(const const_iterator _Where) noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2), \"list erase iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        const auto _Result = _Where._Ptr->_Next;\r\n        _Node::_Freenode(_Getal(), _Mypair._Myval2._Unlinknode(_Where._Ptr));\r\n        return _Make_iter(_Result);\r\n    }\r\n\r\nprivate:\r\n    _Nodeptr _Unchecked_erase(const _Nodeptr _Pnode) noexcept { // erase element at _Pnode\r\n        const auto _Result = _Pnode->_Next;\r\n        _Mypair._Myval2._Orphan_ptr2(_Pnode);\r\n        --_Mypair._Myval2._Mysize;\r\n        _Pnode->_Prev->_Next = _Result;\r\n        _Result->_Prev       = _Pnode->_Prev;\r\n        _Node::_Freenode(_Getal(), _Pnode);\r\n        return _Result;\r\n    }\r\n\r\npublic:\r\n    iterator erase(const const_iterator _First, const const_iterator _Last) noexcept /* strengthened */ {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        return _Make_iter(_Unchecked_erase(_First._Ptr, _Last._Ptr));\r\n    }\r\n\r\nprivate:\r\n    _Nodeptr _Unchecked_erase(_Nodeptr _First, const _Nodeptr _Last) noexcept { // erase [_First, _Last)\r\n        if (_First == _Last) {\r\n            return _Last;\r\n        }\r\n\r\n        const auto _Predecessor = _First->_Prev;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        const auto _Head = _Mypair._Myval2._Myhead;\r\n        if (_First == _Head->_Next && _Last == _Head) { // orphan all non-end iterators\r\n            _Mypair._Myval2._Orphan_non_end();\r\n        } else { // orphan erased iterators\r\n            _Lockit _Lock(_LOCK_DEBUG);\r\n            for (auto _Marked = _First; _Marked != _Last; _Marked = _Marked->_Next) { // mark erased nodes\r\n                _Marked->_Prev = nullptr;\r\n            }\r\n\r\n            _Iterator_base12** _Pnext = &_Mypair._Myval2._Myproxy->_Myfirstiter;\r\n            while (*_Pnext) {\r\n                _Iterator_base12** _Pnextnext = &(*_Pnext)->_Mynextiter;\r\n                if (static_cast<const_iterator&>(**_Pnext)._Ptr->_Prev) { // node still has a _Prev, skip\r\n                    _Pnext = _Pnextnext;\r\n                } else { // orphan the iterator\r\n                    (*_Pnext)->_Myproxy = nullptr;\r\n                    *_Pnext             = *_Pnextnext;\r\n                }\r\n            }\r\n\r\n            // _Prev pointers not restored because we're about to delete the nodes of which they are a member anyway\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        // snip out the removed range\r\n        _Predecessor->_Next = _Last;\r\n        _Last->_Prev        = _Predecessor;\r\n\r\n        // count and deallocate the removed nodes\r\n        auto& _Al           = _Getal();\r\n        size_type _Erasures = 0;\r\n        do {\r\n            const auto _Next = _First->_Next;\r\n            _Node::_Freenode(_Al, _First);\r\n            _First = _Next;\r\n            ++_Erasures;\r\n        } while (_First != _Last);\r\n\r\n        _Mypair._Myval2._Mysize -= _Erasures;\r\n        return _Last;\r\n    }\r\n\r\npublic:\r\n    void clear() noexcept { // erase all\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _My_data._Orphan_non_end();\r\n        _Node::_Free_non_head(_Getal(), _My_data._Myhead);\r\n        _My_data._Myhead->_Next = _My_data._Myhead;\r\n        _My_data._Myhead->_Prev = _My_data._Myhead;\r\n        _My_data._Mysize        = 0;\r\n    }\r\n\r\nprivate:\r\n    void _Tidy() noexcept {\r\n        auto& _Al      = _Getal();\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _My_data._Orphan_all();\r\n        _Node::_Free_non_head(_Al, _My_data._Myhead);\r\n        _Node::_Freenode0(_Al, _My_data._Myhead);\r\n    }\r\n\r\npublic:\r\n    void swap(list& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Pocs(_Getal(), _Right._Getal());\r\n            _Swap_val(_Right);\r\n        }\r\n    }\r\n\r\n    void splice(const const_iterator _Where, list& _Right) { // splice all of _Right at _Where\r\n        auto& _Right_data = _Right._Mypair._Myval2;\r\n        if (this != _STD addressof(_Right) && _Right_data._Mysize != 0) { // worth splicing, do it\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n            _STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2), \"list splice iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n            const auto _Right_head = _Right_data._Myhead;\r\n            _Splice(_Where._Ptr, _Right, _Right_head->_Next, _Right_head, _Right_data._Mysize);\r\n        }\r\n    }\r\n\r\n    void splice(const const_iterator _Where, list&& _Right) { // splice all of _Right at _Where\r\n        splice(_Where, _Right);\r\n    }\r\n\r\n    void splice(const const_iterator _Where, list& _Right, const const_iterator _First) {\r\n        // splice _Right [_First, _First + 1) at _Where\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2)\r\n                        && _First._Getcont() == _STD addressof(_Right._Mypair._Myval2),\r\n            \"list splice iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        const auto _UWhere = _Where._Ptr;\r\n        const auto _UFirst = _First._Ptr;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_UFirst != _Right._Mypair._Myval2._Myhead, \"list splice iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        const auto _ULast = _UFirst->_Next;\r\n        if (this != _STD addressof(_Right) || (_UWhere != _UFirst && _UWhere != _ULast)) {\r\n            _Splice(_UWhere, _Right, _UFirst, _ULast, 1);\r\n        }\r\n    }\r\n\r\n    void splice(const const_iterator _Where, list&& _Right, const const_iterator _First) {\r\n        // splice _Right [_First, _First + 1) at _Where\r\n        splice(_Where, _Right, _First);\r\n    }\r\n\r\n    void splice(const const_iterator _Where, list& _Right, const const_iterator _First, const const_iterator _Last) {\r\n        // splice _Right [_First, _Last) at _Where\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        const auto _Right_data_ptr = _STD addressof(_Right._Mypair._Myval2);\r\n        _STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2) && _First._Getcont() == _Right_data_ptr\r\n                        && _Last._Getcont() == _Right_data_ptr,\r\n            \"list splice iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        const auto _UWhere = _Where._Ptr;\r\n        const auto _UFirst = _First._Ptr;\r\n        const auto _ULast  = _Last._Ptr;\r\n\r\n        if (_UFirst != _ULast && (this != _STD addressof(_Right) || _UWhere != _ULast)) { // worth splicing, do it\r\n            size_type _Count = 0;\r\n\r\n            if (this != _STD addressof(_Right)) {\r\n                const auto _Right_end = _Right._Mypair._Myval2._Myhead;\r\n                if (_UFirst == _Right_end->_Next && _ULast == _Right_end) {\r\n                    _Count = _Right._Mypair._Myval2._Mysize; // splice in whole list\r\n                } else { // count nodes and check for knot\r\n                    for (auto _To_check = _UFirst; _To_check != _ULast; _To_check = _To_check->_Next, (void) ++_Count) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                        _STL_VERIFY(_To_check != _Right_end, \"list bad splice\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                    }\r\n                }\r\n            }\r\n\r\n            _Splice(_UWhere, _Right, _UFirst, _ULast, _Count);\r\n        }\r\n    }\r\n\r\n    void splice(const const_iterator _Where, list&& _Right, const const_iterator _First, const const_iterator _Last) {\r\n        // splice _Right [_First, _Last) at _Where\r\n        splice(_Where, _Right, _First, _Last);\r\n    }\r\n\r\n    struct _List_node_remove_op {\r\n        // tracks nodes pending removal in a remove operation, so that program-defined predicates may reference those\r\n        // elements until the removal is complete.\r\n\r\n        explicit _List_node_remove_op(list& _List_) noexcept : _List(_List_), _Head(), _Tail(_STD addressof(_Head)) {}\r\n\r\n        _List_node_remove_op(const _List_node_remove_op&)            = delete;\r\n        _List_node_remove_op& operator=(const _List_node_remove_op&) = delete;\r\n\r\n        _Nodeptr _Transfer_back(const _Nodeptr _Removed) noexcept {\r\n            // extract _Removed from the list, and add it to the singly-linked list of nodes to destroy\r\n            // returns the node after _Removed\r\n            _STL_INTERNAL_CHECK(_List._Mypair._Myval2._Myhead != _Removed);\r\n\r\n            // snip the node out\r\n            --_List._Mypair._Myval2._Mysize;\r\n            const auto _Next = _STD exchange(_Removed->_Next, nullptr);\r\n            const auto _Prev = _Removed->_Prev;\r\n            _Prev->_Next     = _Next;\r\n            _Next->_Prev     = _Prev;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n            // mark removed node for IDL to snip out later\r\n            _Removed->_Prev = nullptr;\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n            *_Tail = _Removed;\r\n            _Tail  = _STD addressof(_Removed->_Next);\r\n\r\n            return _Next;\r\n        }\r\n\r\n        ~_List_node_remove_op() {\r\n            auto& _Al = _List._Getal();\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n            {\r\n                _Lockit _Lock(_LOCK_DEBUG);\r\n                _Iterator_base12** _Pnext = &_List._Mypair._Myval2._Myproxy->_Myfirstiter;\r\n                while (*_Pnext) {\r\n                    _Iterator_base12** _Pnextnext = &(*_Pnext)->_Mynextiter;\r\n                    const auto _Pnextptr          = static_cast<const_iterator&>(**_Pnext)._Ptr;\r\n                    if (_Pnextptr->_Prev) {\r\n                        // iterator doesn't point to one of the elements we're removing\r\n                        _Pnext = _Pnextnext;\r\n                    } else { // orphan the iterator\r\n                        (*_Pnext)->_Myproxy = nullptr;\r\n                        *_Pnext             = *_Pnextnext;\r\n                    }\r\n                }\r\n            }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n            auto _Target = _Head;\r\n            while (_Target) {\r\n                auto _Next = _Target->_Next;\r\n                _List._Mypair._Myval2._Orphan_ptr2(_Target);\r\n                _Alnode_traits::destroy(_Al, _STD addressof(_Target->_Next));\r\n                _Alnode_traits::destroy(_Al, _STD addressof(_Target->_Prev));\r\n                _Alnode_traits::destroy(_Al, _STD addressof(_Target->_Myval));\r\n                _Al.deallocate(_Target, 1);\r\n                _Target = _Next;\r\n            }\r\n        }\r\n\r\n        list& _List;\r\n        _Nodeptr _Head; // singly linked list of nodes to remove; their _Prev pointers set to nullptr\r\n        _Nodeptr* _Tail;\r\n    };\r\n\r\n    _LIST_REMOVE_RETURN remove(const _Ty& _Val) { // erase each element matching _Val\r\n        return remove_if([&](const _Ty& _Other) -> bool { return _Other == _Val; });\r\n    }\r\n\r\n    template <class _Pr1>\r\n    _LIST_REMOVE_RETURN remove_if(_Pr1 _Pred) { // erase each element satisfying _Pred\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _List_node_remove_op _Op(*this);\r\n        const auto _Last         = _My_data._Myhead;\r\n        const size_type _Oldsize = _My_data._Mysize;\r\n        for (auto _First = _Last->_Next; _First != _Last;) {\r\n            auto _Next = _First->_Next;\r\n            if (_Pred(_First->_Myval)) {\r\n                _Op._Transfer_back(_First);\r\n            }\r\n\r\n            _First = _Next;\r\n        }\r\n\r\n#if _HAS_CXX20\r\n        return _Oldsize - _My_data._Mysize;\r\n#else\r\n        (void) _Oldsize;\r\n#endif\r\n    }\r\n\r\n    _LIST_REMOVE_RETURN unique() { // erase each element matching previous\r\n        return unique(equal_to<>{});\r\n    }\r\n\r\n    template <class _Pr2>\r\n    _LIST_REMOVE_RETURN unique(_Pr2 _Pred) { // erase each element satisfying _Pred with previous\r\n        _List_node_remove_op _Op(*this);\r\n        const _Nodeptr _Phead    = _Mypair._Myval2._Myhead;\r\n        _Nodeptr _Pprev          = _Phead->_Next;\r\n        _Nodeptr _Pnode          = _Pprev->_Next;\r\n        const size_type _Oldsize = _Mypair._Myval2._Mysize;\r\n        while (_Pnode != _Phead) {\r\n            if (_Pred(_Pprev->_Myval, _Pnode->_Myval)) { // match, remove it\r\n                _Pnode = _Op._Transfer_back(_Pnode);\r\n            } else { // no match, advance\r\n                _Pprev = _Pnode;\r\n                _Pnode = _Pnode->_Next;\r\n            }\r\n        }\r\n\r\n#if _HAS_CXX20\r\n        return _Oldsize - _Mypair._Myval2._Mysize;\r\n#else\r\n        (void) _Oldsize;\r\n#endif\r\n    }\r\n\r\n    void merge(list& _Right) { // merge in elements from _Right, both ordered by operator<\r\n        _Merge1(_Right, less<>{});\r\n    }\r\n\r\n    void merge(list&& _Right) { // merge in elements from _Right, both ordered by operator<\r\n        _Merge1(_Right, less<>{});\r\n    }\r\n\r\n    template <class _Pr2>\r\n    void merge(list& _Right, _Pr2 _Pred) { // merge in elements from _Right, both ordered by _Pred\r\n        _Merge1(_Right, _STD _Pass_fn(_Pred));\r\n    }\r\n\r\n    template <class _Pr2>\r\n    void merge(list&& _Right, _Pr2 _Pred) { // merge in elements from _Right, both ordered by _Pred\r\n        _Merge1(_Right, _STD _Pass_fn(_Pred));\r\n    }\r\n\r\nprivate:\r\n    template <class _Pr2>\r\n    void _Merge1(list& _Right, _Pr2 _Pred) { // merge in elements from _Right, both ordered by _Pred\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _DEBUG_ORDER_UNWRAPPED(_Unchecked_begin(), _Unchecked_end(), _Pred);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        if (this == _STD addressof(_Right)) {\r\n            return;\r\n        }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _DEBUG_ORDER_UNWRAPPED(_Right._Unchecked_begin(), _Right._Unchecked_end(), _Pred);\r\n        if constexpr (!_Alnode_traits::is_always_equal::value) {\r\n            _STL_VERIFY(_Getal() == _Right._Getal(), \"list allocators incompatible for merge\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        const auto _Right_size = _Right._Mypair._Myval2._Mysize;\r\n        if (_Right_size == 0) {\r\n            // nothing to do\r\n            return;\r\n        }\r\n\r\n        // splice all _Right's nodes on the end of *this\r\n        const auto _Myhead     = _Mypair._Myval2._Myhead;\r\n        const auto _Right_head = _Right._Mypair._Myval2._Myhead;\r\n        const auto _Mid        = _Right_head->_Next;\r\n        _Splice(_Myhead, _Right, _Mid, _Right_head, _Right_size);\r\n\r\n        // if *this had any elements, run the merge op between the range we just spliced and the old elements\r\n        if (_Myhead->_Next != _Mid) {\r\n            _Scary_val::_Merge_same(_Myhead->_Next, _Mid, _Myhead, _Pred);\r\n        }\r\n    }\r\n\r\npublic:\r\n    void sort() { // order sequence\r\n        sort(less<>{});\r\n    }\r\n\r\n    template <class _Pr2>\r\n    void sort(_Pr2 _Pred) { // order sequence\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _Scary_val::_Sort(_My_data._Myhead->_Next, _My_data._Mysize, _STD _Pass_fn(_Pred));\r\n    }\r\n\r\n    void reverse() noexcept { // reverse sequence\r\n        const _Nodeptr _Phead = _Mypair._Myval2._Myhead;\r\n        _Nodeptr _Pnode       = _Phead;\r\n\r\n        for (;;) { // flip pointers in a node\r\n            const _Nodeptr _Pnext = _Pnode->_Next;\r\n            _Pnode->_Next         = _Pnode->_Prev;\r\n            _Pnode->_Prev         = _Pnext;\r\n\r\n            if (_Pnext == _Phead) {\r\n                break;\r\n            }\r\n\r\n            _Pnode = _Pnext;\r\n        }\r\n    }\r\n\r\nprivate:\r\n    _Nodeptr _Splice(\r\n        const _Nodeptr _Where, list& _Right, const _Nodeptr _First, const _Nodeptr _Last, const size_type _Count) {\r\n        // splice _Right [_First, _Last) before _Where; returns _Last\r\n        if (this != _STD addressof(_Right)) { // splicing from another list, adjust counts\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            if constexpr (!_Alnode_traits::is_always_equal::value) {\r\n                _STL_VERIFY(_Getal() == _Right._Getal(), \"list allocators incompatible for splice\");\r\n            }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n            auto& _My_data = _Mypair._Myval2;\r\n            if (max_size() - _My_data._Mysize < _Count) {\r\n                _Xlength_error(\"list too long\");\r\n            }\r\n\r\n            auto& _Right_data = _Right._Mypair._Myval2;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n            // transfer ownership\r\n            if (_Count == 1) {\r\n                _My_data._Adopt_unique(_Right_data, _First);\r\n            } else if (_Count == _Right_data._Mysize) {\r\n                _My_data._Adopt_all(_Right_data);\r\n            } else {\r\n                _My_data._Adopt_range(_Right_data, _First, _Last);\r\n            }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n            _My_data._Mysize += _Count;\r\n            _Right_data._Mysize -= _Count;\r\n        }\r\n\r\n        return _Scary_val::_Unchecked_splice(_Where, _First, _Last);\r\n    }\r\n\r\n    void _Alloc_sentinel_and_proxy() {\r\n        auto _Alproxy = _STD _Get_proxy_allocator(_Getal());\r\n        _Container_proxy_ptr<_Alty> _Proxy(_Alproxy, _Mypair._Myval2);\r\n        auto& _Al     = _Getal();\r\n        auto _Newhead = _Al.allocate(1);\r\n        _Construct_in_place(_Newhead->_Next, _Newhead);\r\n        _Construct_in_place(_Newhead->_Prev, _Newhead);\r\n        _Mypair._Myval2._Myhead = _Newhead;\r\n        _Proxy._Release();\r\n    }\r\n\r\n    void _Orphan_all() noexcept {\r\n        _Mypair._Myval2._Orphan_all();\r\n    }\r\n\r\n    _Alnode& _Getal() noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    const _Alnode& _Getal() const noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    _Compressed_pair<_Alnode, _Scary_val> _Mypair;\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Iter, class _Alloc = allocator<_Iter_value_t<_Iter>>,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>>, int> = 0>\r\nlist(_Iter, _Iter, _Alloc = _Alloc()) -> list<_Iter_value_t<_Iter>, _Alloc>;\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc = allocator<_RANGES range_value_t<_Rng>>>\r\nlist(from_range_t, _Rng&&, _Alloc = _Alloc()) -> list<_RANGES range_value_t<_Rng>, _Alloc>;\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc>\r\nvoid swap(list<_Ty, _Alloc>& _Left, list<_Ty, _Alloc>& _Right) noexcept /* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc>\r\n_NODISCARD bool operator==(const list<_Ty, _Alloc>& _Left, const list<_Ty, _Alloc>& _Right) {\r\n    return _Left.size() == _Right.size()\r\n        && _STD equal(_Left._Unchecked_begin(), _Left._Unchecked_end(), _Right._Unchecked_begin());\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty, class _Alloc>\r\n_NODISCARD _Synth_three_way_result<_Ty> operator<=>(const list<_Ty, _Alloc>& _Left, const list<_Ty, _Alloc>& _Right) {\r\n    return _STD lexicographical_compare_three_way(_Left._Unchecked_begin(), _Left._Unchecked_end(),\r\n        _Right._Unchecked_begin(), _Right._Unchecked_end(), _Synth_three_way{});\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD bool operator!=(const list<_Ty, _Alloc>& _Left, const list<_Ty, _Alloc>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD bool operator<(const list<_Ty, _Alloc>& _Left, const list<_Ty, _Alloc>& _Right) {\r\n    return _STD lexicographical_compare(\r\n        _Left._Unchecked_begin(), _Left._Unchecked_end(), _Right._Unchecked_begin(), _Right._Unchecked_end());\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD bool operator>(const list<_Ty, _Alloc>& _Left, const list<_Ty, _Alloc>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD bool operator<=(const list<_Ty, _Alloc>& _Left, const list<_Ty, _Alloc>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD bool operator>=(const list<_Ty, _Alloc>& _Left, const list<_Ty, _Alloc>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty, class _Alloc, class _Uty>\r\nlist<_Ty, _Alloc>::size_type erase(list<_Ty, _Alloc>& _Cont, const _Uty& _Val) {\r\n    return _Cont.remove_if([&](const _Ty& _Elem) -> bool { return _Elem == _Val; });\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc, class _Pr>\r\nlist<_Ty, _Alloc>::size_type erase_if(list<_Ty, _Alloc>& _Cont, _Pr _Pred) {\r\n    return _Cont.remove_if(_STD _Pass_fn(_Pred));\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX17\r\nnamespace pmr {\r\n    _EXPORT_STD template <class _Ty>\r\n    using list = _STD list<_Ty, polymorphic_allocator<_Ty>>;\r\n} // namespace pmr\r\n#endif // _HAS_CXX17\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _LIST_\r\n"
  },
  {
    "path": "stl/inc/locale",
    "content": "// locale standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _LOCALE_\r\n#define _LOCALE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <xlocbuf>\r\n#include <xlocmes>\r\n#include <xlocmon>\r\n#include <xlocnum>\r\n#include <xloctime>\r\n#include <xstring>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _Elem>\r\nint _LStrcoll(const _Elem* _First1, const _Elem* _Last1, const _Elem* _First2, const _Elem* _Last2,\r\n    const _Locinfo::_Collvec* _Vector) { // perform locale-specific comparison of _Elem sequences\r\n    if constexpr (is_same_v<_Elem, char>) {\r\n        return _Strcoll(_First1, _Last1, _First2, _Last2, _Vector);\r\n    } else if constexpr (_Is_wchar_or_crtbld_ushort<_Elem>) { // no-op casts if _Elem is wchar_t\r\n        return _Wcscoll(reinterpret_cast<const wchar_t*>(_First1), reinterpret_cast<const wchar_t*>(_Last1),\r\n            reinterpret_cast<const wchar_t*>(_First2), reinterpret_cast<const wchar_t*>(_Last2), _Vector);\r\n    } else {\r\n        for (; _First1 != _Last1 && _First2 != _Last2; ++_First1, ++_First2) {\r\n            if (*_First1 < *_First2) {\r\n                return -1; // [_First1, _Last1) < [_First2, _Last2)\r\n            } else if (*_First2 < *_First1) {\r\n                return +1; // [_First1, _Last1) > [_First2, _Last2)\r\n            }\r\n        }\r\n\r\n        return _First2 != _Last2 ? -1 : _First1 != _Last1 ? +1 : 0;\r\n    }\r\n}\r\n\r\ntemplate <class _Elem>\r\nsize_t _LStrxfrm(_Out_writes_(_Last1 - _First1) _Post_readable_size_(return) _Elem* _First1, _Elem* _Last1,\r\n    _In_reads_(_Last2 - _First2) const _Elem* _First2, const _Elem* _Last2,\r\n    _In_opt_ const _Locinfo::_Collvec* _Vector) {\r\n    // perform locale-specific transform of _Elems [_First1, _Last1)\r\n    if constexpr (is_same_v<_Elem, char>) {\r\n        return _Strxfrm(_First1, _Last1, _First2, _Last2, _Vector);\r\n    } else if constexpr (_Is_wchar_or_crtbld_ushort<_Elem>) { // no-op casts if _Elem is wchar_t\r\n        return _Wcsxfrm(reinterpret_cast<wchar_t*>(_First1), reinterpret_cast<wchar_t*>(_Last1),\r\n            reinterpret_cast<const wchar_t*>(_First2), reinterpret_cast<const wchar_t*>(_Last2), _Vector);\r\n    } else {\r\n        const ptrdiff_t _Count = _Last2 - _First2;\r\n        if (_Count <= _Last1 - _First1) {\r\n            _CSTD memcpy(_First1, _First2, _Count * sizeof(_Elem));\r\n        }\r\n\r\n        return _Count;\r\n    }\r\n}\r\n\r\ntemplate <class _Elem>\r\nclass _Regex_traits;\r\n\r\n_EXPORT_STD template <class _Elem>\r\nclass collate : public locale::facet { // facet for ordering sequences of elements\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    using char_type   = _Elem;\r\n    using string_type = basic_string<_Elem, char_traits<_Elem>, allocator<_Elem>>;\r\n\r\n    _NODISCARD int compare(const _Elem* _First1, const _Elem* _Last1, const _Elem* _First2, const _Elem* _Last2) const {\r\n        // compare [_First1, _Last1) to [_First2, _Last2)\r\n        return do_compare(_First1, _Last1, _First2, _Last2);\r\n    }\r\n\r\n    _NODISCARD string_type transform(const _Elem* _First, const _Elem* _Last) const {\r\n        // transform [_First, _Last) to key string\r\n        return do_transform(_First, _Last);\r\n    }\r\n\r\n    _NODISCARD long hash(const _Elem* _First, const _Elem* _Last) const { // compute hash code for [_First, _Last)\r\n        return do_hash(_First, _Last);\r\n    }\r\n\r\n    __PURE_APPDOMAIN_GLOBAL _CRTIMP2_PURE_IMPORT static locale::id id; // unique facet id\r\n\r\n    explicit collate(size_t _Refs = 0) : locale::facet(_Refs) { // construct from current locale\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    collate(const _Locinfo& _Lobj, size_t _Refs = 0) : locale::facet(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new collate<_Elem>(_Locinfo(_Ploc->name().c_str()));\r\n        }\r\n\r\n        return _X_COLLATE;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~collate() noexcept override {\r\n        _CSTD free(_Coll._LocaleName);\r\n    }\r\n\r\n    collate(const char* _Locname, size_t _Refs = 0) : locale::facet(_Refs) {\r\n        _BEGIN_LOCINFO(_Lobj(_Locname))\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    void _Init(const _Locinfo& _Lobj) { // initialize from _Lobj\r\n        _Coll = _Lobj._Getcoll();\r\n    }\r\n\r\n    _NODISCARD virtual int __CLR_OR_THIS_CALL do_compare(\r\n        const _Elem* _First1, const _Elem* _Last1, const _Elem* _First2, const _Elem* _Last2) const {\r\n        // compare [_First1, _Last1) to [_First2, _Last2)\r\n        _Adl_verify_range(_First1, _Last1);\r\n        _Adl_verify_range(_First2, _Last2);\r\n        int _Ans = _LStrcoll(_First1, _Last1, _First2, _Last2, &_Coll);\r\n        return _Ans < 0 ? -1 : _Ans == 0 ? 0 : +1;\r\n    }\r\n\r\n    _NODISCARD virtual string_type __CLR_OR_THIS_CALL do_transform(const _Elem* _First, const _Elem* _Last) const {\r\n        // transform [_First, _Last) to key string\r\n        _Adl_verify_range(_First, _Last);\r\n        size_t _Count;\r\n        string_type _Str;\r\n\r\n        for (_Count = static_cast<size_t>(_Last - _First); _Str.size() < _Count;) {\r\n            // grow string if locale-specific strxfrm fails\r\n            _Str.resize(_Count);\r\n            _Count = _LStrxfrm(&_Str[0], &_Str[0] + _Str.size(), _First, _Last, &_Coll);\r\n\r\n            if (_Count == static_cast<size_t>(-1)) {\r\n                // return empty string in case of error\r\n                _Count = 0;\r\n                break;\r\n            }\r\n        }\r\n        _Str.resize(_Count);\r\n        return _Str;\r\n    }\r\n\r\n    _NODISCARD virtual long __CLR_OR_THIS_CALL do_hash(const _Elem* _First, const _Elem* _Last) const {\r\n        // compute hash code for [_First, _Last)\r\n        const auto _Sortkey = collate::do_transform(_First, _Last);\r\n        return static_cast<long>(_Hash_array_representation(_Sortkey.data(), _Sortkey.size()));\r\n    }\r\n\r\nprivate:\r\n    _Locinfo::_Collvec _Coll; // used by _LStrcoll and _LStrxfrm\r\n\r\n    friend _Regex_traits<_Elem>;\r\n};\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdllimport-static-field-def\"\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _Elem>\r\n__PURE_APPDOMAIN_GLOBAL locale::id collate<_Elem>::id;\r\n\r\n#if defined(_DLL_CPPLIB)\r\n\r\n#if !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id collate<char>::id;\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id collate<wchar_t>::id;\r\n#endif // !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\n\r\n#ifdef __FORCE_INSTANCE\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id collate<unsigned short>::id;\r\n#endif // defined(__FORCE_INSTANCE)\r\n#endif // defined(_DLL_CPPLIB)\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n\r\n_EXPORT_STD template <class _Elem>\r\nclass collate_byname : public collate<_Elem> { // collate for named locale\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    explicit collate_byname(const char* _Locname, size_t _Refs = 0)\r\n        : collate<_Elem>(_Locname, _Refs) {} // construct for named locale\r\n\r\n    explicit collate_byname(const string& _Str, size_t _Refs = 0)\r\n        : collate<_Elem>(_Locinfo(_Str.c_str()), _Refs) {} // construct for named locale\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~collate_byname() noexcept override {}\r\n};\r\n\r\n_EXPORT_STD template <class _Facet>\r\n_NODISCARD bool has_facet(const locale& _Loc) noexcept {\r\n    _BEGIN_LOCK(_LOCK_LOCALE) // the thread lock, make get atomic\r\n    size_t _Id = _Facet::id._Get_index();\r\n    return _Loc._Getfacet(_Id) || _Facet::_Getcat() != static_cast<size_t>(-1);\r\n    _END_LOCK()\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD bool isalnum(_Elem _Ch, const locale& _Loc) {\r\n    return _STD use_facet<ctype<_Elem>>(_Loc).is(ctype_base::alnum, _Ch);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD bool isalpha(_Elem _Ch, const locale& _Loc) {\r\n    return _STD use_facet<ctype<_Elem>>(_Loc).is(ctype_base::alpha, _Ch);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD bool isblank(_Elem _Ch, const locale& _Loc) {\r\n    return _STD use_facet<ctype<_Elem>>(_Loc).is(ctype_base::blank, _Ch);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD bool iscntrl(_Elem _Ch, const locale& _Loc) {\r\n    return _STD use_facet<ctype<_Elem>>(_Loc).is(ctype_base::cntrl, _Ch);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD bool isdigit(_Elem _Ch, const locale& _Loc) {\r\n    return _STD use_facet<ctype<_Elem>>(_Loc).is(ctype_base::digit, _Ch);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD bool isgraph(_Elem _Ch, const locale& _Loc) {\r\n    return _STD use_facet<ctype<_Elem>>(_Loc).is(ctype_base::graph, _Ch);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD bool islower(_Elem _Ch, const locale& _Loc) {\r\n    return _STD use_facet<ctype<_Elem>>(_Loc).is(ctype_base::lower, _Ch);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD bool isprint(_Elem _Ch, const locale& _Loc) {\r\n    return _STD use_facet<ctype<_Elem>>(_Loc).is(ctype_base::print, _Ch);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD bool ispunct(_Elem _Ch, const locale& _Loc) {\r\n    return _STD use_facet<ctype<_Elem>>(_Loc).is(ctype_base::punct, _Ch);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD bool isspace(_Elem _Ch, const locale& _Loc) {\r\n    return _STD use_facet<ctype<_Elem>>(_Loc).is(ctype_base::space, _Ch);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD bool isupper(_Elem _Ch, const locale& _Loc) {\r\n    return _STD use_facet<ctype<_Elem>>(_Loc).is(ctype_base::upper, _Ch);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD bool isxdigit(_Elem _Ch, const locale& _Loc) {\r\n    return _STD use_facet<ctype<_Elem>>(_Loc).is(ctype_base::xdigit, _Ch);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD _Elem tolower(_Elem _Ch, const locale& _Loc) {\r\n    return _STD use_facet<ctype<_Elem>>(_Loc).tolower(_Ch);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD _Elem toupper(_Elem _Ch, const locale& _Loc) {\r\n    return _STD use_facet<ctype<_Elem>>(_Loc).toupper(_Ch);\r\n}\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _LOCALE_\r\n"
  },
  {
    "path": "stl/inc/map",
    "content": "// map standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _MAP_\r\n#define _MAP_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <tuple>\r\n#include <xtree>\r\n\r\n#if _HAS_CXX17\r\n#include <xpolymorphic_allocator.h>\r\n#endif // _HAS_CXX17\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n_STD_BEGIN\r\ntemplate <class _Kty, // key type\r\n    class _Ty, // mapped type\r\n    class _Pr, // comparator predicate type\r\n    class _Alloc, // actual allocator type (should be value allocator)\r\n    bool _Mfl> // true if multiple equivalent keys are permitted\r\nclass _Tmap_traits { // traits required to make _Tree behave like a map\r\npublic:\r\n    using key_type       = _Kty;\r\n    using value_type     = pair<const _Kty, _Ty>;\r\n    using key_compare    = _Pr;\r\n    using allocator_type = _Alloc;\r\n#if _HAS_CXX17\r\n    using node_type = _Node_handle<_Tree_node<value_type, typename allocator_traits<_Alloc>::void_pointer>, _Alloc,\r\n        _Node_handle_map_base, _Kty, _Ty>;\r\n#endif // _HAS_CXX17\r\n\r\n    static constexpr bool _Multi = _Mfl;\r\n\r\n    template <class... _Args>\r\n    using _In_place_key_extractor = _In_place_key_extract_map<_Kty, _Args...>;\r\n\r\n    class value_compare {\r\n    public:\r\n        using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = value_type;\r\n        using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = value_type;\r\n        using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = bool;\r\n\r\n        _NODISCARD bool operator()(const value_type& _Left, const value_type& _Right) const {\r\n            // test if _Left precedes _Right by comparing just keys\r\n            return comp(_Left.first, _Right.first);\r\n        }\r\n\r\n    protected:\r\n        friend _Tree<_Tmap_traits>;\r\n\r\n        value_compare(key_compare _Pred) : comp(_Pred) {}\r\n\r\n        key_compare comp; // the comparator predicate for keys\r\n    };\r\n\r\n    template <class _Ty1, class _Ty2>\r\n    static const _Kty& _Kfn(const pair<_Ty1, _Ty2>& _Val) { // extract key from element value\r\n        return _Val.first;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Pr = less<_Kty>, class _Alloc = allocator<pair<const _Kty, _Ty>>>\r\nclass map : public _Tree<_Tmap_traits<_Kty, _Ty, _Pr, _Alloc, false>> {\r\n    // ordered red-black tree of {key, mapped} values, unique keys\r\npublic:\r\n    static_assert(!_ENFORCE_MATCHING_ALLOCATORS || is_same_v<pair<const _Kty, _Ty>, typename _Alloc::value_type>,\r\n        _MISMATCHED_ALLOCATOR_MESSAGE(\"map<Key, Value, Compare, Allocator>\", \"pair<const Key, Value>\"));\r\n    static_assert(is_object_v<_Kty>, \"The C++ Standard forbids containers of non-object types \"\r\n                                     \"because of [container.requirements].\");\r\n\r\n    using _Mybase                = _Tree<_Tmap_traits<_Kty, _Ty, _Pr, _Alloc, false>>;\r\n    using _Nodeptr               = typename _Mybase::_Nodeptr;\r\n    using key_type               = _Kty;\r\n    using mapped_type            = _Ty;\r\n    using key_compare            = _Pr;\r\n    using value_compare          = typename _Mybase::value_compare;\r\n    using value_type             = pair<const _Kty, _Ty>;\r\n    using allocator_type         = typename _Mybase::allocator_type;\r\n    using size_type              = typename _Mybase::size_type;\r\n    using difference_type        = typename _Mybase::difference_type;\r\n    using pointer                = typename _Mybase::pointer;\r\n    using const_pointer          = typename _Mybase::const_pointer;\r\n    using reference              = value_type&;\r\n    using const_reference        = const value_type&;\r\n    using iterator               = typename _Mybase::iterator;\r\n    using const_iterator         = typename _Mybase::const_iterator;\r\n    using reverse_iterator       = typename _Mybase::reverse_iterator;\r\n    using const_reverse_iterator = typename _Mybase::const_reverse_iterator;\r\n\r\n    using _Alnode        = typename _Mybase::_Alnode;\r\n    using _Alnode_traits = typename _Mybase::_Alnode_traits;\r\n\r\n#if _HAS_CXX17\r\n    using insert_return_type = _Insert_return_type<iterator, typename _Mybase::node_type>;\r\n#endif // _HAS_CXX17\r\n\r\n    map() : _Mybase(key_compare()) {}\r\n\r\n    explicit map(const allocator_type& _Al) : _Mybase(key_compare(), _Al) {}\r\n\r\n    map(const map& _Right) : _Mybase(_Right, _Alnode_traits::select_on_container_copy_construction(_Right._Getal())) {}\r\n\r\n    map(const map& _Right, const allocator_type& _Al) : _Mybase(_Right, _Al) {}\r\n\r\n    explicit map(const key_compare& _Pred) : _Mybase(_Pred) {}\r\n\r\n    map(const key_compare& _Pred, const allocator_type& _Al) : _Mybase(_Pred, _Al) {}\r\n\r\n    template <class _Iter>\r\n    map(_Iter _First, _Iter _Last) : _Mybase(key_compare()) {\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    map(_Iter _First, _Iter _Last, const key_compare& _Pred) : _Mybase(_Pred) {\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    map(_Iter _First, _Iter _Last, const allocator_type& _Al) : _Mybase(key_compare(), _Al) {\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    map(_Iter _First, _Iter _Last, const key_compare& _Pred, const allocator_type& _Al) : _Mybase(_Pred, _Al) {\r\n        insert(_First, _Last);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    map(from_range_t, _Rng&& _Range) : _Mybase(key_compare()) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    map(from_range_t, _Rng&& _Range, const key_compare& _Pred) : _Mybase(_Pred) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    map(from_range_t, _Rng&& _Range, const key_compare& _Pred, const allocator_type& _Al) : _Mybase(_Pred, _Al) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    map(from_range_t, _Rng&& _Range, const allocator_type& _Al) : _Mybase(key_compare(), _Al) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    map& operator=(const map& _Right) {\r\n        _Mybase::operator=(_Right);\r\n        return *this;\r\n    }\r\n\r\n    map(map&& _Right) : _Mybase(_STD move(_Right)) {}\r\n\r\n    map(map&& _Right, const allocator_type& _Al) : _Mybase(_STD move(_Right), _Al) {}\r\n\r\n    map& operator=(map&& _Right) noexcept(_Alnode_traits::is_always_equal::value && is_nothrow_move_assignable_v<_Pr>) {\r\n        _Mybase::operator=(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    mapped_type& operator[](key_type&& _Keyval) { // find element matching _Keyval or insert value-initialized value\r\n        return _Try_emplace(_STD move(_Keyval)).first->_Myval.second;\r\n    }\r\n\r\n    void swap(map& _Right) noexcept(noexcept(_Mybase::swap(_Right))) {\r\n        _Mybase::swap(_Right);\r\n    }\r\n\r\n    using _Mybase::insert;\r\n\r\n    template <class _Valty, enable_if_t<is_constructible_v<value_type, _Valty>, int> = 0>\r\n    pair<iterator, bool> insert(_Valty&& _Val) {\r\n        return this->emplace(_STD forward<_Valty>(_Val));\r\n    }\r\n\r\n    template <class _Valty, enable_if_t<is_constructible_v<value_type, _Valty>, int> = 0>\r\n    iterator insert(const_iterator _Where, _Valty&& _Val) {\r\n        return this->emplace_hint(_Where, _STD forward<_Valty>(_Val));\r\n    }\r\n\r\nprivate:\r\n    template <class _Keyty, class... _Mappedty>\r\n    pair<_Nodeptr, bool> _Try_emplace(_Keyty&& _Keyval, _Mappedty&&... _Mapval) {\r\n        const auto _Loc = _Mybase::_Find_lower_bound(_Keyval);\r\n        if (_Mybase::_Lower_bound_duplicate(_Loc._Bound, _Keyval)) {\r\n            return {_Loc._Bound, false};\r\n        }\r\n\r\n        _Mybase::_Check_grow_by_1();\r\n\r\n        const auto _Scary    = _Mybase::_Get_scary();\r\n        const auto _Inserted = _Tree_temp_node<_Alnode>(_Mybase::_Getal(), _Scary->_Myhead, piecewise_construct,\r\n            _STD forward_as_tuple(_STD forward<_Keyty>(_Keyval)),\r\n            _STD forward_as_tuple(_STD forward<_Mappedty>(_Mapval)...))\r\n                                   ._Release();\r\n\r\n        // nothrow hereafter\r\n        return {_Scary->_Insert_node(_Loc._Location, _Inserted), true};\r\n    }\r\n\r\n    template <class _Keyty, class... _Mappedty>\r\n    _Nodeptr _Try_emplace_hint(const _Nodeptr _Hint, _Keyty&& _Keyval, _Mappedty&&... _Mapval) {\r\n        const auto _Loc = _Mybase::_Find_hint(_Hint, _Keyval);\r\n        if (_Loc._Duplicate) {\r\n            return _Loc._Location._Parent;\r\n        }\r\n\r\n        _Mybase::_Check_grow_by_1();\r\n\r\n        const auto _Scary    = _Mybase::_Get_scary();\r\n        const auto _Inserted = _Tree_temp_node<_Alnode>(_Mybase::_Getal(), _Scary->_Myhead, piecewise_construct,\r\n            _STD forward_as_tuple(_STD forward<_Keyty>(_Keyval)),\r\n            _STD forward_as_tuple(_STD forward<_Mappedty>(_Mapval)...))\r\n                                   ._Release();\r\n\r\n        // nothrow hereafter\r\n        return _Scary->_Insert_node(_Loc._Location, _Inserted);\r\n    }\r\n\r\npublic:\r\n    template <class... _Mappedty>\r\n    pair<iterator, bool> try_emplace(const key_type& _Keyval, _Mappedty&&... _Mapval) {\r\n        const auto _Result = _Try_emplace(_Keyval, _STD forward<_Mappedty>(_Mapval)...);\r\n        return {iterator(_Result.first, _Mybase::_Get_scary()), _Result.second};\r\n    }\r\n\r\n    template <class... _Mappedty>\r\n    iterator try_emplace(const const_iterator _Hint, const key_type& _Keyval, _Mappedty&&... _Mapval) {\r\n        return iterator(\r\n            _Try_emplace_hint(_Hint._Ptr, _Keyval, _STD forward<_Mappedty>(_Mapval)...), _Mybase::_Get_scary());\r\n    }\r\n\r\n    template <class... _Mappedty>\r\n    pair<iterator, bool> try_emplace(key_type&& _Keyval, _Mappedty&&... _Mapval) {\r\n        const auto _Result = _Try_emplace(_STD move(_Keyval), _STD forward<_Mappedty>(_Mapval)...);\r\n        return {iterator(_Result.first, _Mybase::_Get_scary()), _Result.second};\r\n    }\r\n\r\n    template <class... _Mappedty>\r\n    iterator try_emplace(const const_iterator _Hint, key_type&& _Keyval, _Mappedty&&... _Mapval) {\r\n        return iterator(_Try_emplace_hint(_Hint._Ptr, _STD move(_Keyval), _STD forward<_Mappedty>(_Mapval)...),\r\n            _Mybase::_Get_scary());\r\n    }\r\n\r\nprivate:\r\n    template <class _Keyty, class _Mappedty>\r\n    pair<_Nodeptr, bool> _Insert_or_assign(_Keyty&& _Keyval, _Mappedty&& _Mapval) {\r\n        const auto _Loc = _Mybase::_Find_lower_bound(_Keyval);\r\n        if (_Mybase::_Lower_bound_duplicate(_Loc._Bound, _Keyval)) {\r\n            _Loc._Bound->_Myval.second = _STD forward<_Mappedty>(_Mapval);\r\n            return {_Loc._Bound, false};\r\n        }\r\n\r\n        _Mybase::_Check_grow_by_1();\r\n\r\n        const auto _Scary    = _Mybase::_Get_scary();\r\n        const auto _Inserted = _Tree_temp_node<_Alnode>(\r\n            _Mybase::_Getal(), _Scary->_Myhead, _STD forward<_Keyty>(_Keyval), _STD forward<_Mappedty>(_Mapval))\r\n                                   ._Release();\r\n\r\n        // nothrow hereafter\r\n        return {_Scary->_Insert_node(_Loc._Location, _Inserted), true};\r\n    }\r\n\r\n    template <class _Keyty, class _Mappedty>\r\n    _Nodeptr _Insert_or_assign_hint(const _Nodeptr _Hint, _Keyty&& _Keyval, _Mappedty&& _Mapval) {\r\n        const auto _Loc = _Mybase::_Find_hint(_Hint, _Keyval);\r\n        if (_Loc._Duplicate) {\r\n            _Loc._Location._Parent->_Myval.second = _STD forward<_Mappedty>(_Mapval);\r\n            return _Loc._Location._Parent;\r\n        }\r\n\r\n        _Mybase::_Check_grow_by_1();\r\n\r\n        const auto _Scary    = _Mybase::_Get_scary();\r\n        const auto _Inserted = _Tree_temp_node<_Alnode>(\r\n            _Mybase::_Getal(), _Scary->_Myhead, _STD forward<_Keyty>(_Keyval), _STD forward<_Mappedty>(_Mapval))\r\n                                   ._Release();\r\n\r\n        // nothrow hereafter\r\n        return _Scary->_Insert_node(_Loc._Location, _Inserted);\r\n    }\r\n\r\npublic:\r\n    template <class _Mappedty>\r\n    pair<iterator, bool> insert_or_assign(const key_type& _Keyval, _Mappedty&& _Mapval) {\r\n        const auto _Result = _Insert_or_assign(_Keyval, _STD forward<_Mappedty>(_Mapval));\r\n        return {iterator(_Result.first, _Mybase::_Get_scary()), _Result.second};\r\n    }\r\n\r\n    template <class _Mappedty>\r\n    iterator insert_or_assign(const const_iterator _Hint, const key_type& _Keyval, _Mappedty&& _Mapval) {\r\n        return iterator(\r\n            _Insert_or_assign_hint(_Hint._Ptr, _Keyval, _STD forward<_Mappedty>(_Mapval)), _Mybase::_Get_scary());\r\n    }\r\n\r\n    template <class _Mappedty>\r\n    pair<iterator, bool> insert_or_assign(key_type&& _Keyval, _Mappedty&& _Mapval) {\r\n        const auto _Result = _Insert_or_assign(_STD move(_Keyval), _STD forward<_Mappedty>(_Mapval));\r\n        return {iterator(_Result.first, _Mybase::_Get_scary()), _Result.second};\r\n    }\r\n\r\n    template <class _Mappedty>\r\n    iterator insert_or_assign(const const_iterator _Hint, key_type&& _Keyval, _Mappedty&& _Mapval) {\r\n        return iterator(_Insert_or_assign_hint(_Hint._Ptr, _STD move(_Keyval), _STD forward<_Mappedty>(_Mapval)),\r\n            _Mybase::_Get_scary());\r\n    }\r\n\r\n    map(initializer_list<value_type> _Ilist) : _Mybase(key_compare()) {\r\n        insert(_Ilist);\r\n    }\r\n\r\n    map(initializer_list<value_type> _Ilist, const key_compare& _Pred) : _Mybase(_Pred) {\r\n        insert(_Ilist);\r\n    }\r\n\r\n    map(initializer_list<value_type> _Ilist, const allocator_type& _Al) : _Mybase(key_compare(), _Al) {\r\n        insert(_Ilist);\r\n    }\r\n\r\n    map(initializer_list<value_type> _Ilist, const key_compare& _Pred, const allocator_type& _Al)\r\n        : _Mybase(_Pred, _Al) {\r\n        insert(_Ilist);\r\n    }\r\n\r\n    map& operator=(initializer_list<value_type> _Ilist) {\r\n        _Mybase::clear();\r\n        insert(_Ilist);\r\n        return *this;\r\n    }\r\n\r\n    mapped_type& operator[](const key_type& _Keyval) {\r\n        return _Try_emplace(_Keyval).first->_Myval.second;\r\n    }\r\n\r\n    _NODISCARD mapped_type& at(const key_type& _Keyval) {\r\n        const auto _Loc = _Mybase::_Find_lower_bound(_Keyval);\r\n        if (!_Mybase::_Lower_bound_duplicate(_Loc._Bound, _Keyval)) {\r\n            _Xout_of_range(\"invalid map<K, T> key\");\r\n        }\r\n\r\n        return _Loc._Bound->_Myval.second;\r\n    }\r\n\r\n    _NODISCARD const mapped_type& at(const key_type& _Keyval) const {\r\n        const auto _Loc = _Mybase::_Find_lower_bound(_Keyval);\r\n        if (!_Mybase::_Lower_bound_duplicate(_Loc._Bound, _Keyval)) {\r\n            _Xout_of_range(\"invalid map<K, T> key\");\r\n        }\r\n\r\n        return _Loc._Bound->_Myval.second;\r\n    }\r\n\r\n    using _Mybase::_Unchecked_begin;\r\n    using _Mybase::_Unchecked_end;\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Iter, class _Pr = less<_Guide_key_t<_Iter>>, class _Alloc = allocator<_Guide_pair_t<_Iter>>,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, negation<_Is_allocator<_Pr>>, _Is_allocator<_Alloc>>, int> = 0>\r\nmap(_Iter, _Iter, _Pr = _Pr(), _Alloc = _Alloc()) -> map<_Guide_key_t<_Iter>, _Guide_val_t<_Iter>, _Pr, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Ty, class _Pr = less<_Kty>, class _Alloc = allocator<pair<const _Kty, _Ty>>,\r\n    enable_if_t<conjunction_v<negation<_Is_allocator<_Pr>>, _Is_allocator<_Alloc>>, int> = 0>\r\nmap(initializer_list<pair<_Kty, _Ty>>, _Pr = _Pr(), _Alloc = _Alloc()) -> map<_Kty, _Ty, _Pr, _Alloc>;\r\n\r\ntemplate <class _Iter, class _Alloc, enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>>, int> = 0>\r\nmap(_Iter, _Iter, _Alloc) -> map<_Guide_key_t<_Iter>, _Guide_val_t<_Iter>, less<_Guide_key_t<_Iter>>, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Ty, class _Alloc, enable_if_t<_Is_allocator<_Alloc>::value, int> = 0>\r\nmap(initializer_list<pair<_Kty, _Ty>>, _Alloc) -> map<_Kty, _Ty, less<_Kty>, _Alloc>;\r\n\r\n#if _HAS_CXX23\r\ntemplate <_RANGES input_range _Rng, _Not_allocator_for_container _Pr = less<_Range_key_type<_Rng>>,\r\n    _Allocator_for_container _Alloc = allocator<_Range_to_alloc_type<_Rng>>>\r\nmap(from_range_t, _Rng&&, _Pr = _Pr(), _Alloc = _Alloc())\r\n    -> map<_Range_key_type<_Rng>, _Range_mapped_type<_Rng>, _Pr, _Alloc>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc>\r\nmap(from_range_t, _Rng&&, _Alloc)\r\n    -> map<_Range_key_type<_Rng>, _Range_mapped_type<_Rng>, less<_Range_key_type<_Rng>>, _Alloc>;\r\n#endif // _HAS_CXX23\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator==(const map<_Kty, _Ty, _Pr, _Alloc>& _Left, const map<_Kty, _Ty, _Pr, _Alloc>& _Right) {\r\n    return _Left.size() == _Right.size()\r\n        && _STD equal(_Left._Unchecked_begin(), _Left._Unchecked_end_iter(), _Right._Unchecked_begin());\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Pr, class _Alloc>\r\n_NODISCARD _Synth_three_way_result<pair<const _Kty, _Ty>> operator<=>(\r\n    const map<_Kty, _Ty, _Pr, _Alloc>& _Left, const map<_Kty, _Ty, _Pr, _Alloc>& _Right) {\r\n    return _STD lexicographical_compare_three_way(_Left._Unchecked_begin(), _Left._Unchecked_end_iter(),\r\n        _Right._Unchecked_begin(), _Right._Unchecked_end_iter(), _Synth_three_way{});\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Kty, class _Ty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator!=(const map<_Kty, _Ty, _Pr, _Alloc>& _Left, const map<_Kty, _Ty, _Pr, _Alloc>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _Kty, class _Ty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator<(const map<_Kty, _Ty, _Pr, _Alloc>& _Left, const map<_Kty, _Ty, _Pr, _Alloc>& _Right) {\r\n    return _STD lexicographical_compare(\r\n        _Left._Unchecked_begin(), _Left._Unchecked_end_iter(), _Right._Unchecked_begin(), _Right._Unchecked_end_iter());\r\n}\r\n\r\ntemplate <class _Kty, class _Ty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator>(const map<_Kty, _Ty, _Pr, _Alloc>& _Left, const map<_Kty, _Ty, _Pr, _Alloc>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _Kty, class _Ty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator<=(const map<_Kty, _Ty, _Pr, _Alloc>& _Left, const map<_Kty, _Ty, _Pr, _Alloc>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _Kty, class _Ty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator>=(const map<_Kty, _Ty, _Pr, _Alloc>& _Left, const map<_Kty, _Ty, _Pr, _Alloc>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Pr, class _Alloc>\r\nvoid swap(map<_Kty, _Ty, _Pr, _Alloc>& _Left, map<_Kty, _Ty, _Pr, _Alloc>& _Right)\r\n    noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Keylt, class _Alloc, class _Pr>\r\nmap<_Kty, _Ty, _Keylt, _Alloc>::size_type erase_if(map<_Kty, _Ty, _Keylt, _Alloc>& _Cont, _Pr _Pred) {\r\n    return _STD _Erase_nodes_if(_Cont, _STD _Pass_fn(_Pred));\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Pr = less<_Kty>, class _Alloc = allocator<pair<const _Kty, _Ty>>>\r\nclass multimap : public _Tree<_Tmap_traits<_Kty, _Ty, _Pr, _Alloc, true>> {\r\n    // ordered red-black tree of {key, mapped} values, non-unique keys\r\npublic:\r\n    static_assert(!_ENFORCE_MATCHING_ALLOCATORS || is_same_v<pair<const _Kty, _Ty>, typename _Alloc::value_type>,\r\n        _MISMATCHED_ALLOCATOR_MESSAGE(\"multimap<Key, Value, Compare, Allocator>\", \"pair<const Key, Value>\"));\r\n    static_assert(is_object_v<_Kty>, \"The C++ Standard forbids containers of non-object types \"\r\n                                     \"because of [container.requirements].\");\r\n\r\n    using _Mybase                = _Tree<_Tmap_traits<_Kty, _Ty, _Pr, _Alloc, true>>;\r\n    using key_type               = _Kty;\r\n    using mapped_type            = _Ty;\r\n    using key_compare            = _Pr;\r\n    using value_compare          = typename _Mybase::value_compare;\r\n    using value_type             = pair<const _Kty, _Ty>;\r\n    using allocator_type         = typename _Mybase::allocator_type;\r\n    using size_type              = typename _Mybase::size_type;\r\n    using difference_type        = typename _Mybase::difference_type;\r\n    using pointer                = typename _Mybase::pointer;\r\n    using const_pointer          = typename _Mybase::const_pointer;\r\n    using reference              = value_type&;\r\n    using const_reference        = const value_type&;\r\n    using iterator               = typename _Mybase::iterator;\r\n    using const_iterator         = typename _Mybase::const_iterator;\r\n    using reverse_iterator       = typename _Mybase::reverse_iterator;\r\n    using const_reverse_iterator = typename _Mybase::const_reverse_iterator;\r\n\r\n    using _Alnode        = typename _Mybase::_Alnode;\r\n    using _Alnode_traits = typename _Mybase::_Alnode_traits;\r\n\r\n    multimap() : _Mybase(key_compare()) {}\r\n\r\n    explicit multimap(const allocator_type& _Al) : _Mybase(key_compare(), _Al) {}\r\n\r\n    multimap(const multimap& _Right)\r\n        : _Mybase(_Right, _Alnode_traits::select_on_container_copy_construction(_Right._Getal())) {}\r\n\r\n    multimap(const multimap& _Right, const allocator_type& _Al) : _Mybase(_Right, _Al) {}\r\n\r\n    explicit multimap(const key_compare& _Pred) : _Mybase(_Pred) {}\r\n\r\n    multimap(const key_compare& _Pred, const allocator_type& _Al) : _Mybase(_Pred, _Al) {}\r\n\r\n    template <class _Iter>\r\n    multimap(_Iter _First, _Iter _Last) : _Mybase(key_compare()) {\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    multimap(_Iter _First, _Iter _Last, const key_compare& _Pred) : _Mybase(_Pred) {\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    multimap(_Iter _First, _Iter _Last, const allocator_type& _Al) : _Mybase(key_compare(), _Al) {\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    multimap(_Iter _First, _Iter _Last, const key_compare& _Pred, const allocator_type& _Al) : _Mybase(_Pred, _Al) {\r\n        insert(_First, _Last);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    multimap(from_range_t, _Rng&& _Range) : _Mybase(key_compare()) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    multimap(from_range_t, _Rng&& _Range, const key_compare& _Pred) : _Mybase(_Pred) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    multimap(from_range_t, _Rng&& _Range, const key_compare& _Pred, const allocator_type& _Al) : _Mybase(_Pred, _Al) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    multimap(from_range_t, _Rng&& _Range, const allocator_type& _Al) : _Mybase(key_compare(), _Al) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    multimap& operator=(const multimap& _Right) {\r\n        _Mybase::operator=(_Right);\r\n        return *this;\r\n    }\r\n\r\n    multimap(multimap&& _Right) : _Mybase(_STD move(_Right)) {}\r\n\r\n    multimap(multimap&& _Right, const allocator_type& _Al) : _Mybase(_STD move(_Right), _Al) {}\r\n\r\n    multimap& operator=(multimap&& _Right)\r\n        noexcept(_Alnode_traits::is_always_equal::value && is_nothrow_move_assignable_v<_Pr>) {\r\n        _Mybase::operator=(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    template <class... _Valty>\r\n    iterator emplace(_Valty&&... _Val) {\r\n        return _Mybase::emplace(_STD forward<_Valty>(_Val)...).first;\r\n    }\r\n\r\n    void swap(multimap& _Right) noexcept(noexcept(_Mybase::swap(_Right))) {\r\n        _Mybase::swap(_Right);\r\n    }\r\n\r\n    using _Mybase::insert;\r\n\r\n    template <class _Valty, enable_if_t<is_constructible_v<value_type, _Valty>, int> = 0>\r\n    iterator insert(_Valty&& _Val) {\r\n        return this->emplace(_STD forward<_Valty>(_Val));\r\n    }\r\n\r\n    template <class _Valty, enable_if_t<is_constructible_v<value_type, _Valty>, int> = 0>\r\n    iterator insert(const_iterator _Where, _Valty&& _Val) {\r\n        return this->emplace_hint(_Where, _STD forward<_Valty>(_Val));\r\n    }\r\n\r\n    multimap(initializer_list<value_type> _Ilist) : _Mybase(key_compare()) {\r\n        insert(_Ilist);\r\n    }\r\n\r\n    multimap(initializer_list<value_type> _Ilist, const key_compare& _Pred) : _Mybase(_Pred) {\r\n        insert(_Ilist);\r\n    }\r\n\r\n    multimap(initializer_list<value_type> _Ilist, const allocator_type& _Al) : _Mybase(key_compare(), _Al) {\r\n        insert(_Ilist);\r\n    }\r\n\r\n    multimap(initializer_list<value_type> _Ilist, const key_compare& _Pred, const allocator_type& _Al)\r\n        : _Mybase(_Pred, _Al) {\r\n        insert(_Ilist);\r\n    }\r\n\r\n    multimap& operator=(initializer_list<value_type> _Ilist) {\r\n        _Mybase::clear();\r\n        insert(_Ilist);\r\n        return *this;\r\n    }\r\n\r\n    using _Mybase::_Unchecked_begin;\r\n    using _Mybase::_Unchecked_end;\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Iter, class _Pr = less<_Guide_key_t<_Iter>>, class _Alloc = allocator<_Guide_pair_t<_Iter>>,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, negation<_Is_allocator<_Pr>>, _Is_allocator<_Alloc>>, int> = 0>\r\nmultimap(_Iter, _Iter, _Pr = _Pr(), _Alloc = _Alloc())\r\n    -> multimap<_Guide_key_t<_Iter>, _Guide_val_t<_Iter>, _Pr, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Ty, class _Pr = less<_Kty>, class _Alloc = allocator<pair<const _Kty, _Ty>>,\r\n    enable_if_t<conjunction_v<negation<_Is_allocator<_Pr>>, _Is_allocator<_Alloc>>, int> = 0>\r\nmultimap(initializer_list<pair<_Kty, _Ty>>, _Pr = _Pr(), _Alloc = _Alloc()) -> multimap<_Kty, _Ty, _Pr, _Alloc>;\r\n\r\ntemplate <class _Iter, class _Alloc, enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>>, int> = 0>\r\nmultimap(_Iter, _Iter, _Alloc) -> multimap<_Guide_key_t<_Iter>, _Guide_val_t<_Iter>, less<_Guide_key_t<_Iter>>, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Ty, class _Alloc, enable_if_t<_Is_allocator<_Alloc>::value, int> = 0>\r\nmultimap(initializer_list<pair<_Kty, _Ty>>, _Alloc) -> multimap<_Kty, _Ty, less<_Kty>, _Alloc>;\r\n\r\n#if _HAS_CXX23\r\ntemplate <_RANGES input_range _Rng, _Not_allocator_for_container _Pr = less<_Range_key_type<_Rng>>,\r\n    _Allocator_for_container _Alloc = allocator<_Range_to_alloc_type<_Rng>>>\r\nmultimap(from_range_t, _Rng&&, _Pr = _Pr(), _Alloc = _Alloc())\r\n    -> multimap<_Range_key_type<_Rng>, _Range_mapped_type<_Rng>, _Pr, _Alloc>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc>\r\nmultimap(from_range_t, _Rng&&, _Alloc)\r\n    -> multimap<_Range_key_type<_Rng>, _Range_mapped_type<_Rng>, less<_Range_key_type<_Rng>>, _Alloc>;\r\n#endif // _HAS_CXX23\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator==(\r\n    const multimap<_Kty, _Ty, _Pr, _Alloc>& _Left, const multimap<_Kty, _Ty, _Pr, _Alloc>& _Right) {\r\n    return _Left.size() == _Right.size()\r\n        && _STD equal(_Left._Unchecked_begin(), _Left._Unchecked_end_iter(), _Right._Unchecked_begin());\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Pr, class _Alloc>\r\n_NODISCARD _Synth_three_way_result<pair<const _Kty, _Ty>> operator<=>(\r\n    const multimap<_Kty, _Ty, _Pr, _Alloc>& _Left, const multimap<_Kty, _Ty, _Pr, _Alloc>& _Right) {\r\n    return _STD lexicographical_compare_three_way(_Left._Unchecked_begin(), _Left._Unchecked_end_iter(),\r\n        _Right._Unchecked_begin(), _Right._Unchecked_end_iter(), _Synth_three_way{});\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Kty, class _Ty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator!=(\r\n    const multimap<_Kty, _Ty, _Pr, _Alloc>& _Left, const multimap<_Kty, _Ty, _Pr, _Alloc>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _Kty, class _Ty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator<(\r\n    const multimap<_Kty, _Ty, _Pr, _Alloc>& _Left, const multimap<_Kty, _Ty, _Pr, _Alloc>& _Right) {\r\n    return _STD lexicographical_compare(\r\n        _Left._Unchecked_begin(), _Left._Unchecked_end_iter(), _Right._Unchecked_begin(), _Right._Unchecked_end_iter());\r\n}\r\n\r\ntemplate <class _Kty, class _Ty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator>(\r\n    const multimap<_Kty, _Ty, _Pr, _Alloc>& _Left, const multimap<_Kty, _Ty, _Pr, _Alloc>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _Kty, class _Ty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator<=(\r\n    const multimap<_Kty, _Ty, _Pr, _Alloc>& _Left, const multimap<_Kty, _Ty, _Pr, _Alloc>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _Kty, class _Ty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator>=(\r\n    const multimap<_Kty, _Ty, _Pr, _Alloc>& _Left, const multimap<_Kty, _Ty, _Pr, _Alloc>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Pr, class _Alloc>\r\nvoid swap(multimap<_Kty, _Ty, _Pr, _Alloc>& _Left, multimap<_Kty, _Ty, _Pr, _Alloc>& _Right)\r\n    noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Keylt, class _Alloc, class _Pr>\r\nmultimap<_Kty, _Ty, _Keylt, _Alloc>::size_type erase_if(multimap<_Kty, _Ty, _Keylt, _Alloc>& _Cont, _Pr _Pred) {\r\n    return _STD _Erase_nodes_if(_Cont, _STD _Pass_fn(_Pred));\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX17\r\nnamespace pmr {\r\n    _EXPORT_STD template <class _Kty, class _Ty, class _Pr = less<_Kty>>\r\n    using map = _STD map<_Kty, _Ty, _Pr, polymorphic_allocator<pair<const _Kty, _Ty>>>;\r\n\r\n    _EXPORT_STD template <class _Kty, class _Ty, class _Pr = less<_Kty>>\r\n    using multimap = _STD multimap<_Kty, _Ty, _Pr, polymorphic_allocator<pair<const _Kty, _Ty>>>;\r\n} // namespace pmr\r\n#endif // _HAS_CXX17\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _MAP_\r\n"
  },
  {
    "path": "stl/inc/mdspan",
    "content": "// mdspan standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _MDSPAN_\r\n#define _MDSPAN_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#if !_HAS_CXX23\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <mdspan> are available only with C++23 or later.\");\r\n#else // ^^^ !_HAS_CXX23 / _HAS_CXX23 vvv\r\n#include <algorithm>\r\n#include <array>\r\n#include <span>\r\n#include <tuple>\r\n#include <type_traits>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\ntemplate <class _IndexType, size_t _Size>\r\nstruct _Maybe_empty_array {\r\n    array<_IndexType, _Size> _Array{};\r\n};\r\n\r\ntemplate <class _IndexType>\r\nstruct _Maybe_empty_array<_IndexType, 0> {};\r\n\r\ntemplate <size_t... _Extents>\r\nconstexpr size_t _Calculate_rank_dynamic = (static_cast<size_t>(_Extents == dynamic_extent) + ... + 0);\r\n\r\nstruct _Extents_from_tuple {\r\n    explicit _Extents_from_tuple() = default;\r\n};\r\n\r\n_EXPORT_STD template <class _IndexType, size_t... _Extents>\r\nclass extents : private _Maybe_empty_array<_IndexType, _Calculate_rank_dynamic<_Extents...>> {\r\npublic:\r\n    using index_type = _IndexType;\r\n    using size_type  = make_unsigned_t<index_type>;\r\n    using rank_type  = size_t;\r\n\r\n    static_assert(_Is_standard_integer<index_type>,\r\n        \"IndexType must be a signed or unsigned integer type (N4950 [mdspan.extents.overview]/1.1).\");\r\n    static_assert(((_Extents == dynamic_extent || _STD in_range<index_type>(_Extents)) && ...),\r\n        \"Each element of Extents must either be equal to dynamic_extent, or be representable as a value of type \"\r\n        \"IndexType (N4950 [mdspan.extents.overview]/1.2).\");\r\n\r\n    static constexpr rank_type _Rank                                = sizeof...(_Extents);\r\n    static constexpr rank_type _Rank_dynamic                        = _Calculate_rank_dynamic<_Extents...>;\r\n    static constexpr array<rank_type, _Rank> _Static_extents        = {_Extents...};\r\n    static constexpr bool _Multidim_index_space_size_is_always_zero = ((_Extents == 0) || ...);\r\n\r\nprivate:\r\n    _NODISCARD static consteval auto _Make_dynamic_indices() noexcept {\r\n        array<rank_type, _Rank + 1> _Result{};\r\n        rank_type _Counter = 0;\r\n        for (rank_type _Idx = 0; _Idx < _Rank; ++_Idx) {\r\n            _Result[_Idx] = _Counter;\r\n            if (_Static_extents[_Idx] == dynamic_extent) {\r\n                ++_Counter;\r\n            }\r\n        }\r\n        _Result[_Rank] = _Counter;\r\n        return _Result;\r\n    }\r\n\r\n    static constexpr array<rank_type, _Rank + 1> _Dynamic_indices = _Make_dynamic_indices();\r\n\r\n    _NODISCARD static consteval auto _Make_dynamic_indices_inv() noexcept {\r\n        array<rank_type, _Rank_dynamic> _Result{};\r\n        rank_type _Counter = 0;\r\n        for (rank_type _Idx = 0; _Idx < _Rank; ++_Idx) {\r\n            if (_Static_extents[_Idx] == dynamic_extent) {\r\n                _Analysis_assume_(_Counter < _Rank_dynamic); // guaranteed by how _Rank_dynamic is calculated\r\n                _Result[_Counter] = _Idx;\r\n                ++_Counter;\r\n            }\r\n        }\r\n        return _Result;\r\n    }\r\n\r\n    static constexpr array<rank_type, _Rank_dynamic> _Dynamic_indices_inv = _Make_dynamic_indices_inv();\r\n\r\n    using _Base = _Maybe_empty_array<_IndexType, _Rank_dynamic>;\r\n\r\n    template <class _OtherIndexType, size_t... _OtherExtents, size_t... _Indices>\r\n    constexpr explicit extents(\r\n        const extents<_OtherIndexType, _OtherExtents...>& _Other, index_sequence<_Indices...>) noexcept\r\n        : _Base{static_cast<index_type>(_Other.extent(_Dynamic_indices_inv[_Indices]))...} {\r\n        _STL_INTERNAL_STATIC_ASSERT(sizeof...(_OtherExtents) == _Rank);\r\n        _STL_INTERNAL_STATIC_ASSERT(\r\n            ((_OtherExtents == dynamic_extent || _Extents == dynamic_extent || _OtherExtents == _Extents) && ...));\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (rank() > 0) {\r\n            for (rank_type _Idx = 0; _Idx < _Rank; ++_Idx) {\r\n                if constexpr (rank() != rank_dynamic()) {\r\n                    _STL_VERIFY(_Static_extents[_Idx] == dynamic_extent\r\n                                    || _STD cmp_equal(_Static_extents[_Idx], _Other.extent(_Idx)),\r\n                        \"Value of other.extent(r) must be equal to extent(r) for each r for which extent(r) is a \"\r\n                        \"static extent (N4950 [mdspan.extents.cons]/2.1)\");\r\n                }\r\n                _STL_VERIFY(_STD in_range<index_type>(_Other.extent(_Idx)),\r\n                    \"Value of other.extent(r) must be representable as a value of type index_type for every rank index \"\r\n                    \"r (N4950 [mdspan.extents.cons]/2.2)\");\r\n            }\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    template <class _ExtsTuple, size_t... _Indices>\r\n        requires (tuple_size_v<_ExtsTuple> == _Rank_dynamic)\r\n    constexpr explicit extents(_Extents_from_tuple, _ExtsTuple _Tpl, index_sequence<_Indices...>) noexcept\r\n        : _Base{static_cast<index_type>(_STD move(_STD get<_Indices>(_Tpl)))...} {}\r\n\r\n    template <class _ExtsTuple, size_t... _DynIndices>\r\n        requires (tuple_size_v<_ExtsTuple> != _Rank_dynamic)\r\n    constexpr explicit extents(_Extents_from_tuple, _ExtsTuple _Tpl, index_sequence<_DynIndices...>) noexcept\r\n        : _Base{static_cast<index_type>(_STD move(_STD get<_Dynamic_indices_inv[_DynIndices]>(_Tpl)))...} {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        [&]<size_t... _MixedIndices>(index_sequence<_MixedIndices...>) {\r\n            _STL_VERIFY(((_Static_extents[_MixedIndices] == dynamic_extent\r\n                             || _STD cmp_equal(_Static_extents[_MixedIndices],\r\n                                 static_cast<index_type>(_STD move(_STD get<_MixedIndices>(_Tpl)))))\r\n                            && ...),\r\n                \"Value of exts_arr[r] must be equal to extent(r) for each r for which extent(r) is a static extent \"\r\n                \"(N4950 [mdspan.extents.cons]/7.1)\");\r\n        }(make_index_sequence<rank()>{});\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    template <class _OtherIndexType, size_t... _Indices>\r\n    constexpr explicit extents(span<_OtherIndexType, _Rank_dynamic> _Dynamic_exts, index_sequence<_Indices...>) noexcept\r\n        : _Base{static_cast<index_type>(_STD as_const(_Dynamic_exts[_Indices]))...} {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_convertible_v<const _OtherIndexType&, index_type>\r\n                                    && is_nothrow_constructible_v<index_type, const _OtherIndexType&>);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (_Is_standard_integer<remove_cv_t<_OtherIndexType>> && _Rank_dynamic != 0) {\r\n            _STL_VERIFY(((_Dynamic_exts[_Indices] >= 0 && _STD in_range<index_type>(_Dynamic_exts[_Indices])) && ...),\r\n                \"exts[r] must be representable as a nonnegative value of type index_type for every rank index r \"\r\n                \"(N4950 [mdspan.extents.cons]/10.2)\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    template <class _OtherIndexType, size_t _Size, size_t... _Indices>\r\n    constexpr explicit extents(span<_OtherIndexType, _Size> _Mixed_exts, index_sequence<_Indices...>) noexcept\r\n        : _Base{static_cast<index_type>(_STD as_const(_Mixed_exts[_Dynamic_indices_inv[_Indices]]))...} {\r\n        _STL_INTERNAL_STATIC_ASSERT(_Size != _Rank_dynamic);\r\n        _STL_INTERNAL_STATIC_ASSERT(is_convertible_v<const _OtherIndexType&, index_type>\r\n                                    && is_nothrow_constructible_v<index_type, const _OtherIndexType&>);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (_Is_standard_integer<remove_cv_t<_OtherIndexType>>) {\r\n            for (rank_type _Idx = 0; _Idx < _Rank; ++_Idx) {\r\n                _STL_VERIFY(\r\n                    _Static_extents[_Idx] == dynamic_extent || _STD cmp_equal(_Static_extents[_Idx], _Mixed_exts[_Idx]),\r\n                    \"Value of exts[r] must be equal to extent(r) for each r for which extent(r) is a static extent \"\r\n                    \"(N4950 [mdspan.extents.cons]/10.1)\");\r\n                _STL_VERIFY(_Mixed_exts[_Idx] >= 0 && _STD in_range<index_type>(_Mixed_exts[_Idx]),\r\n                    \"exts[r] must be representable as a nonnegative value of type index_type for every rank index r \"\r\n                    \"(N4950 [mdspan.extents.cons]/10.2)\");\r\n            }\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\npublic:\r\n    _NODISCARD _Ret_range_(==, _Rank) static constexpr rank_type rank() noexcept {\r\n        return _Rank;\r\n    }\r\n\r\n    _NODISCARD static constexpr rank_type rank_dynamic() noexcept {\r\n        return _Rank_dynamic;\r\n    }\r\n\r\n    _NODISCARD static constexpr size_t static_extent(_In_range_(<, _Rank) const rank_type _Idx) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Idx < _Rank, \"Index must be less than rank() (N4950 [mdspan.extents.obs]/1)\");\r\n#endif\r\n        return _Static_extents[_Idx];\r\n    }\r\n\r\n    _NODISCARD constexpr index_type extent(_In_range_(<, _Rank) const rank_type _Idx) const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Idx < _Rank, \"Index must be less than rank() (N4950 [mdspan.extents.obs]/3)\");\r\n#endif\r\n        if constexpr (rank_dynamic() == 0) {\r\n            return static_cast<index_type>(_Static_extents[_Idx]);\r\n        } else if constexpr (rank_dynamic() == rank()) {\r\n            return this->_Array[_Idx];\r\n        } else {\r\n            if (_Static_extents[_Idx] == dynamic_extent) {\r\n                return this->_Array[_Dynamic_indices[_Idx]];\r\n            } else {\r\n                return static_cast<index_type>(_Static_extents[_Idx]);\r\n            }\r\n        }\r\n    }\r\n\r\n    constexpr extents() noexcept = default;\r\n\r\n    template <class _OtherIndexType, size_t... _OtherExtents>\r\n        requires (sizeof...(_OtherExtents) == rank())\r\n              && ((_OtherExtents == dynamic_extent || _Extents == dynamic_extent || _OtherExtents == _Extents) && ...)\r\n    constexpr explicit(((_Extents != dynamic_extent && _OtherExtents == dynamic_extent) || ...)\r\n                       || _STD _Max_limit<index_type>() < _STD _Max_limit<_OtherIndexType>())\r\n        extents(const extents<_OtherIndexType, _OtherExtents...>& _Other) noexcept\r\n        : extents(_Other, make_index_sequence<rank_dynamic()>{}) {}\r\n\r\n    template <class... _OtherIndexTypes>\r\n        requires conjunction_v<is_convertible<_OtherIndexTypes, index_type>...,\r\n                     is_nothrow_constructible<index_type, _OtherIndexTypes>...>\r\n              && (sizeof...(_OtherIndexTypes) == rank_dynamic() || sizeof...(_OtherIndexTypes) == rank())\r\n    constexpr explicit extents(_OtherIndexTypes... _Exts) noexcept\r\n        : extents(_Extents_from_tuple{}, _STD tie(_Exts...), make_index_sequence<rank_dynamic()>{}) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        auto _Check_extent = []<class _Ty>(const _Ty& _Ext) {\r\n            if constexpr (_Is_standard_integer<_Ty>) {\r\n                return _Ext >= 0 && _STD in_range<index_type>(_Ext);\r\n            } else if constexpr (integral<_Ty> && !same_as<_Ty, bool>) { // NB: character types\r\n                const auto _Integer_ext = static_cast<long long>(_Ext);\r\n                return _Integer_ext >= 0 && _STD in_range<index_type>(_Integer_ext);\r\n            } else {\r\n                return true; // NB: We cannot check preconditions\r\n            }\r\n        };\r\n        _STL_VERIFY((_Check_extent(_Exts) && ...), \"Each argument must be representable as a nonnegative value of type \"\r\n                                                   \"index_type (N4950 [mdspan.extents.cons]/7.2)\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    template <class _OtherIndexType, size_t _Size>\r\n        requires is_convertible_v<const _OtherIndexType&, index_type>\r\n              && is_nothrow_constructible_v<index_type, const _OtherIndexType&>\r\n              && (_Size == rank_dynamic() || _Size == rank())\r\n    constexpr explicit(_Size != rank_dynamic()) extents(span<_OtherIndexType, _Size> _Exts) noexcept\r\n        : extents(_Exts, make_index_sequence<rank_dynamic()>{}) {}\r\n\r\n    template <class _OtherIndexType, size_t _Size>\r\n        requires is_convertible_v<const _OtherIndexType&, index_type>\r\n              && is_nothrow_constructible_v<index_type, const _OtherIndexType&>\r\n              && (_Size == rank_dynamic() || _Size == rank())\r\n    constexpr explicit(_Size != rank_dynamic()) extents(const array<_OtherIndexType, _Size>& _Exts) noexcept\r\n        : extents(span{_Exts}, make_index_sequence<rank_dynamic()>{}) {}\r\n\r\n    template <class _OtherIndexType, size_t... _OtherExtents>\r\n    _NODISCARD friend constexpr bool operator==(\r\n        const extents& _Left, const extents<_OtherIndexType, _OtherExtents...>& _Right) noexcept {\r\n        if constexpr (rank() != sizeof...(_OtherExtents)) {\r\n            return false;\r\n        } else {\r\n            for (rank_type _Idx = 0; _Idx < _Rank; ++_Idx) {\r\n                if (_STD cmp_not_equal(_Left.extent(_Idx), _Right.extent(_Idx))) {\r\n                    return false;\r\n                }\r\n            }\r\n            return true;\r\n        }\r\n    }\r\n\r\n    _NODISCARD static consteval bool _Is_static_multidim_index_space_size_representable() noexcept {\r\n        // Pre: rank_dynamic() == 0\r\n        if constexpr (_Multidim_index_space_size_is_always_zero) {\r\n            return true;\r\n        } else {\r\n            index_type _Result{1};\r\n            const bool _Overflow = (_Mul_overflow(static_cast<index_type>(_Extents), _Result, _Result) || ...);\r\n            return !_Overflow;\r\n        }\r\n    }\r\n\r\n    template <integral _Ty = index_type>\r\n    _NODISCARD constexpr bool _Is_dynamic_multidim_index_space_size_representable() const noexcept {\r\n        // Pre: rank_dynamic() != 0\r\n        if constexpr (_Multidim_index_space_size_is_always_zero) {\r\n            return true;\r\n        } else {\r\n            bool _Overflow = false;\r\n            _Ty _Result    = 1;\r\n            for (rank_type _Idx = 0; _Idx < _Rank; ++_Idx) {\r\n                const auto _Ext = static_cast<_Ty>(extent(_Idx));\r\n                if (_Ext == 0) {\r\n                    return true;\r\n                }\r\n\r\n                if (!_Overflow) {\r\n                    _Overflow = _Mul_overflow(_Ext, _Result, _Result);\r\n                }\r\n            }\r\n\r\n            return !_Overflow;\r\n        }\r\n    }\r\n\r\n    template <size_t... _Seq, class... _IndexTypes>\r\n    _NODISCARD constexpr bool _Contains_multidimensional_index(\r\n        index_sequence<_Seq...>, _IndexTypes... _Indices) const noexcept {\r\n        _STL_INTERNAL_STATIC_ASSERT(conjunction_v<is_same<_IndexTypes, index_type>...>);\r\n        if constexpr (unsigned_integral<index_type>) {\r\n            return ((_Indices < extent(_Seq)) && ...);\r\n        } else {\r\n            return ((0 <= _Indices && _Indices < extent(_Seq)) && ...);\r\n        }\r\n    }\r\n\r\n    template <class _ExtentsT>\r\n    friend constexpr size_t _Count_dynamic_extents_equal_to_one(\r\n        const _ExtentsT&) noexcept; // NB: used by 'layout_stride::mapping<E>::is_exhaustive'\r\n};\r\n\r\ntemplate <class>\r\nconstexpr size_t _Repeat_dynamic_extent = dynamic_extent;\r\n\r\ntemplate <class... _Integrals>\r\n    requires conjunction_v<is_convertible<_Integrals, size_t>...>\r\nexplicit extents(_Integrals...) -> extents<size_t, _Repeat_dynamic_extent<_Integrals>...>;\r\n\r\ntemplate <class _IndexType, class _Indices>\r\nstruct _Dextents_impl;\r\n\r\ntemplate <class _IndexType, size_t... _Indices>\r\nstruct _Dextents_impl<_IndexType, index_sequence<_Indices...>> {\r\n    using type = extents<_IndexType, ((void) _Indices, dynamic_extent)...>;\r\n};\r\n\r\n_EXPORT_STD template <class _IndexType, size_t _Rank>\r\nusing dextents = _Dextents_impl<_IndexType, make_index_sequence<_Rank>>::type;\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_extents = false;\r\n\r\ntemplate <class _IndexType, size_t... _Args>\r\nconstexpr bool _Is_extents<extents<_IndexType, _Args...>> = true;\r\n\r\ntemplate <class _Extents>\r\nclass _Fwd_prod_of_extents {\r\npublic:\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_extents<_Extents>);\r\n\r\n    _NODISCARD static constexpr _Extents::index_type _Calculate(const _Extents& _Exts, const size_t _Idx) noexcept {\r\n        _STL_INTERNAL_CHECK(_Idx <= _Extents::_Rank);\r\n        if constexpr (_Extents::rank() == 0) {\r\n            return 1;\r\n        } else {\r\n            // Use an unsigned type to prevent overflow when called from mdspan::size.\r\n            typename _Extents::size_type _Result = 1;\r\n            for (size_t _Dim = 0; _Dim < _Idx; ++_Dim) {\r\n                _Result *= static_cast<_Extents::size_type>(_Exts.extent(_Dim));\r\n            }\r\n\r\n            return static_cast<_Extents::index_type>(_Result);\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Extents>\r\n    requires (_Extents::rank() > 0) && (_Extents::rank_dynamic() == 0)\r\nclass _Fwd_prod_of_extents<_Extents> {\r\nprivate:\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_extents<_Extents>);\r\n\r\n    _NODISCARD static consteval auto _Make_prods() noexcept {\r\n        array<typename _Extents::index_type, _Extents::rank() + 1> _Result;\r\n        _Result.front() = 1;\r\n        for (size_t _Idx = 1; _Idx < _Extents::_Rank + 1; ++_Idx) {\r\n            _Result[_Idx] = static_cast<_Extents::index_type>(_Result[_Idx - 1] * _Extents::_Static_extents[_Idx - 1]);\r\n        }\r\n        return _Result;\r\n    }\r\n\r\n    static constexpr array<typename _Extents::index_type, _Extents::rank() + 1> _Cache = _Make_prods();\r\n\r\npublic:\r\n    _NODISCARD static constexpr _Extents::index_type _Calculate(const _Extents&, const size_t _Idx) noexcept {\r\n        _STL_INTERNAL_CHECK(_Idx <= _Extents::_Rank);\r\n        return _Cache[_Idx];\r\n    }\r\n};\r\n\r\ntemplate <class _Extents>\r\nclass _Rev_prod_of_extents {\r\npublic:\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_extents<_Extents>);\r\n    _STL_INTERNAL_STATIC_ASSERT(_Extents::rank() > 0);\r\n\r\n    _NODISCARD static constexpr _Extents::index_type _Calculate(const _Extents& _Exts, const size_t _Idx) noexcept {\r\n        _STL_INTERNAL_CHECK(_Idx < _Extents::_Rank);\r\n        typename _Extents::index_type _Result = 1;\r\n        for (size_t _Dim = _Idx + 1; _Dim < _Extents::_Rank; ++_Dim) {\r\n            _Result *= _Exts.extent(_Dim);\r\n        }\r\n        return _Result;\r\n    }\r\n};\r\n\r\ntemplate <class _Extents>\r\n    requires (_Extents::rank_dynamic() == 0)\r\nclass _Rev_prod_of_extents<_Extents> {\r\nprivate:\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_extents<_Extents>);\r\n    _STL_INTERNAL_STATIC_ASSERT(_Extents::rank() > 0);\r\n\r\n    _NODISCARD static consteval auto _Make_prods() noexcept {\r\n        array<typename _Extents::index_type, _Extents::rank()> _Result;\r\n        _Result.back() = 1;\r\n        for (size_t _Idx = _Extents::_Rank; _Idx-- > 1;) {\r\n            _Result[_Idx - 1] = static_cast<_Extents::index_type>(_Result[_Idx] * _Extents::_Static_extents[_Idx]);\r\n        }\r\n        return _Result;\r\n    }\r\n\r\n    static constexpr array<typename _Extents::index_type, _Extents::rank()> _Cache = _Make_prods();\r\n\r\npublic:\r\n    _NODISCARD static constexpr _Extents::index_type _Calculate(const _Extents&, const size_t _Idx) noexcept {\r\n        _STL_INTERNAL_CHECK(_Idx < _Extents::_Rank);\r\n        return _Cache[_Idx];\r\n    }\r\n};\r\n\r\ntemplate <class _Layout, class _Mapping>\r\nconstexpr bool _Is_mapping_of =\r\n    is_same_v<typename _Layout::template mapping<typename _Mapping::extents_type>, _Mapping>;\r\n\r\n_EXPORT_STD struct layout_left {\r\n    template <class _Extents>\r\n    class _NO_SPECIALIZATIONS_OF_MEMBER_CLASS_TEMPLATES mapping;\r\n};\r\n\r\n_EXPORT_STD struct layout_right {\r\n    template <class _Extents>\r\n    class _NO_SPECIALIZATIONS_OF_MEMBER_CLASS_TEMPLATES mapping;\r\n};\r\n\r\n_EXPORT_STD struct layout_stride {\r\n    template <class _Extents>\r\n    class _NO_SPECIALIZATIONS_OF_MEMBER_CLASS_TEMPLATES mapping;\r\n};\r\n\r\ntemplate <class _Extents>\r\nstruct _Maybe_fully_static_extents {\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_extents<_Extents>);\r\n\r\n    constexpr _Maybe_fully_static_extents() noexcept = default;\r\n\r\n    template <class _OtherExtents>\r\n    constexpr explicit _Maybe_fully_static_extents(const _OtherExtents& _Exts_) : _Exts(_Exts_) {}\r\n\r\n    _Extents _Exts{};\r\n};\r\n\r\ntemplate <class _Extents>\r\n    requires (_Extents::rank_dynamic() == 0)\r\nstruct _Maybe_fully_static_extents<_Extents> {\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_extents<_Extents>);\r\n\r\n    constexpr _Maybe_fully_static_extents() noexcept = default;\r\n\r\n    template <class _OtherExtents>\r\n    constexpr explicit _Maybe_fully_static_extents([[maybe_unused]] const _OtherExtents& _Exts_) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        (void) _Extents{_Exts_}; // NB: temporary created for preconditions check\r\n#endif\r\n    }\r\n\r\n    static constexpr _Extents _Exts{};\r\n};\r\n\r\ntemplate <class _Extents>\r\nclass _NO_SPECIALIZATIONS_OF_MEMBER_CLASS_TEMPLATES layout_left::mapping\r\n    : private _Maybe_fully_static_extents<_Extents> {\r\npublic:\r\n    using extents_type = _Extents;\r\n    using index_type   = extents_type::index_type;\r\n    using size_type    = extents_type::size_type;\r\n    using rank_type    = extents_type::rank_type;\r\n    using layout_type  = layout_left;\r\n\r\nprivate:\r\n    using _Base = _Maybe_fully_static_extents<extents_type>;\r\n\r\n    static_assert(_Is_extents<extents_type>,\r\n        \"Extents must be a specialization of std::extents (N4950 [mdspan.layout.left.overview]/2).\");\r\n    static_assert(\r\n        extents_type::rank_dynamic() != 0 || extents_type::_Is_static_multidim_index_space_size_representable(),\r\n        \"If Extents::rank_dynamic() == 0 is true, then the size of the multidimensional index space Extents() must be \"\r\n        \"representable as a value of type typename Extents::index_type (N4950 [mdspan.layout.left.overview]/4).\");\r\n\r\npublic:\r\n    constexpr mapping() noexcept               = default;\r\n    constexpr mapping(const mapping&) noexcept = default;\r\n\r\n    constexpr mapping(const extents_type& _Exts_) noexcept : _Base(_Exts_) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (extents_type::rank_dynamic() != 0) {\r\n            _STL_VERIFY(_Exts_._Is_dynamic_multidim_index_space_size_representable(),\r\n                \"The size of the multidimensional index space e must be representable as a value of type index_type \"\r\n                \"(N4950 [mdspan.layout.left.cons]/1).\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    template <class _OtherExtents>\r\n        requires is_constructible_v<extents_type, _OtherExtents>\r\n    constexpr explicit(!is_convertible_v<_OtherExtents, extents_type>)\r\n        mapping(const mapping<_OtherExtents>& _Other) noexcept\r\n        : _Base(_Other.extents()) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_STD in_range<index_type>(_Other.required_span_size()),\r\n            \"Value of other.required_span_size() must be representable as a value of type index_type (N4950 \"\r\n            \"[mdspan.layout.left.cons]/4).\");\r\n#endif\r\n    }\r\n\r\n    template <class _OtherExtents>\r\n        requires (extents_type::rank() <= 1) && is_constructible_v<extents_type, _OtherExtents>\r\n    constexpr explicit(!is_convertible_v<_OtherExtents, extents_type>)\r\n        mapping(const layout_right::mapping<_OtherExtents>& _Other) noexcept\r\n        : _Base(_Other.extents()) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_STD in_range<index_type>(_Other.required_span_size()),\r\n            \"Value of other.required_span_size() must be representable as a value of type index_type (N4950 \"\r\n            \"[mdspan.layout.left.cons]/7).\");\r\n#endif\r\n    }\r\n\r\n    template <class _OtherExtents>\r\n        requires is_constructible_v<extents_type, _OtherExtents>\r\n    constexpr explicit(!(extents_type::rank() == 0 && is_convertible_v<_OtherExtents, extents_type>) )\r\n        mapping(const layout_stride::mapping<_OtherExtents>& _Other) noexcept // strengthened\r\n        : _Base(_Other.extents()) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (extents_type::rank() > 0) {\r\n            index_type _Prod = 1;\r\n            for (size_t _Idx = 0; _Idx < extents_type::_Rank; ++_Idx) {\r\n                _STL_VERIFY(_STD cmp_equal(_Other.stride(_Idx), _Prod),\r\n                    \"For all r in the range [0, extents_type::rank()), other.stride(r) must be equal to \"\r\n                    \"extents().fwd-prod-of-extents(r) (N4950 [mdspan.layout.left.cons]/10.1).\");\r\n                _Prod = static_cast<index_type>(_Prod * this->_Exts.extent(_Idx));\r\n            }\r\n        }\r\n        _STL_VERIFY(_STD in_range<index_type>(_Other.required_span_size()),\r\n            \"Value of other.required_span_size() must be representable as a value of type index_type (N4950 \"\r\n            \"[mdspan.layout.left.cons]/10.2).\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    constexpr mapping& operator=(const mapping&) noexcept = default;\r\n\r\n    _NODISCARD constexpr const extents_type& extents() const noexcept {\r\n        return this->_Exts;\r\n    }\r\n\r\n    _NODISCARD constexpr index_type required_span_size() const noexcept {\r\n        return _Fwd_prod_of_extents<extents_type>::_Calculate(this->_Exts, extents_type::_Rank);\r\n    }\r\n\r\n    template <class... _IndexTypes>\r\n        requires (sizeof...(_IndexTypes) == extents_type::rank())\r\n              && conjunction_v<is_convertible<_IndexTypes, index_type>...,\r\n                  is_nothrow_constructible<index_type, _IndexTypes>...>\r\n    _NODISCARD constexpr index_type operator()(_IndexTypes... _Indices) const noexcept {\r\n        return _Index_impl(make_index_sequence<extents_type::rank()>{}, static_cast<index_type>(_Indices)...);\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_always_unique() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_always_exhaustive() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_always_strided() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_unique() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_exhaustive() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_strided() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD constexpr index_type stride(_In_range_(<, extents_type::_Rank) const rank_type _Idx) const noexcept\r\n        requires (extents_type::rank() > 0)\r\n    {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Idx < extents_type::_Rank,\r\n            \"Value of i must be less than extents_type::rank() (N4950 [mdspan.layout.left.obs]/6).\");\r\n#endif\r\n        return _Fwd_prod_of_extents<extents_type>::_Calculate(this->_Exts, _Idx);\r\n    }\r\n\r\n    template <class _OtherExtents>\r\n        requires (extents_type::rank() == _OtherExtents::rank())\r\n    _NODISCARD friend constexpr bool operator==(const mapping& _Left, const mapping<_OtherExtents>& _Right) noexcept {\r\n        return _Left._Exts == _Right.extents();\r\n    }\r\n\r\nprivate:\r\n    template <class... _IndexTypes, size_t... _Seq>\r\n    _NODISCARD constexpr index_type _Index_impl(\r\n        [[maybe_unused]] index_sequence<_Seq...> _Index_seq, _IndexTypes... _Indices) const noexcept {\r\n        _STL_INTERNAL_STATIC_ASSERT(conjunction_v<is_same<_IndexTypes, index_type>...>);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(this->_Exts._Contains_multidimensional_index(_Index_seq, _Indices...),\r\n            \"Value of extents_type::index-cast(i) must be a multidimensional index in extents_ (N4950 \"\r\n            \"[mdspan.layout.left.obs]/3).\");\r\n#endif\r\n\r\n        index_type _Stride = 1;\r\n        index_type _Result = 0;\r\n        (((_Result += _Indices * _Stride), (_Stride *= this->_Exts.extent(_Seq))), ...);\r\n        return _Result;\r\n    }\r\n};\r\n\r\ntemplate <class _Extents>\r\nclass _NO_SPECIALIZATIONS_OF_MEMBER_CLASS_TEMPLATES layout_right::mapping\r\n    : private _Maybe_fully_static_extents<_Extents> {\r\npublic:\r\n    using extents_type = _Extents;\r\n    using index_type   = extents_type::index_type;\r\n    using size_type    = extents_type::size_type;\r\n    using rank_type    = extents_type::rank_type;\r\n    using layout_type  = layout_right;\r\n\r\nprivate:\r\n    using _Base = _Maybe_fully_static_extents<extents_type>;\r\n\r\n    static_assert(_Is_extents<extents_type>,\r\n        \"Extents must be a specialization of std::extents (N4950 [mdspan.layout.right.overview]/2).\");\r\n    static_assert(\r\n        extents_type::rank_dynamic() != 0 || extents_type::_Is_static_multidim_index_space_size_representable(),\r\n        \"If Extents::rank_dynamic() == 0 is true, then the size of the multidimensional index space Extents() must be \"\r\n        \"representable as a value of type typename Extents::index_type (N4950 [mdspan.layout.right.overview]/4).\");\r\n\r\npublic:\r\n    constexpr mapping() noexcept               = default;\r\n    constexpr mapping(const mapping&) noexcept = default;\r\n\r\n    constexpr mapping(const extents_type& _Exts_) noexcept : _Base(_Exts_) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (extents_type::rank_dynamic() != 0) {\r\n            _STL_VERIFY(_Exts_._Is_dynamic_multidim_index_space_size_representable(),\r\n                \"The size of the multidimensional index space e must be representable as a value of type index_type \"\r\n                \"(N4950 [mdspan.layout.right.cons]/1).\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    template <class _OtherExtents>\r\n        requires is_constructible_v<extents_type, _OtherExtents>\r\n    constexpr explicit(!is_convertible_v<_OtherExtents, extents_type>)\r\n        mapping(const mapping<_OtherExtents>& _Other) noexcept\r\n        : _Base(_Other.extents()) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_STD in_range<index_type>(_Other.required_span_size()),\r\n            \"Value of other.required_span_size() must be representable as a value of type index_type (N4950 \"\r\n            \"[mdspan.layout.right.cons]/4).\");\r\n#endif\r\n    }\r\n\r\n    template <class _OtherExtents>\r\n        requires (extents_type::rank() <= 1) && is_constructible_v<extents_type, _OtherExtents>\r\n    constexpr explicit(!is_convertible_v<_OtherExtents, extents_type>)\r\n        mapping(const layout_left::mapping<_OtherExtents>& _Other) noexcept\r\n        : _Base(_Other.extents()) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_STD in_range<index_type>(_Other.required_span_size()),\r\n            \"Value of other.required_span_size() must be representable as a value of type index_type (N4950 \"\r\n            \"[mdspan.layout.right.cons]/7).\");\r\n#endif\r\n    }\r\n\r\n    template <class _OtherExtents>\r\n        requires is_constructible_v<extents_type, _OtherExtents>\r\n    constexpr explicit(!(extents_type::rank() == 0 && is_convertible_v<_OtherExtents, extents_type>) )\r\n        mapping(const layout_stride::mapping<_OtherExtents>& _Other) noexcept\r\n        : _Base(_Other.extents()) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (extents_type::rank() > 0) {\r\n            index_type _Prod = 1;\r\n            for (size_t _Idx = extents_type::_Rank; _Idx-- > 0;) {\r\n                _STL_VERIFY(_STD cmp_equal(_Prod, _Other.stride(_Idx)),\r\n                    \"For all r in the range [0, extents_type::rank()), other.stride(r) must be equal to \"\r\n                    \"extents().rev-prod-of-extents(r) (N4950 [mdspan.layout.right.cons]/10.1).\");\r\n                _Prod = static_cast<index_type>(_Prod * this->_Exts.extent(_Idx));\r\n            }\r\n        }\r\n        _STL_VERIFY(_STD in_range<index_type>(_Other.required_span_size()),\r\n            \"Value of other.required_span_size() must be representable as a value of type index_type (N4950 \"\r\n            \"[mdspan.layout.right.cons]/10.2).\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    constexpr mapping& operator=(const mapping&) noexcept = default;\r\n\r\n    _NODISCARD constexpr const extents_type& extents() const noexcept {\r\n        return this->_Exts;\r\n    }\r\n\r\n    _NODISCARD constexpr index_type required_span_size() const noexcept {\r\n        return _Fwd_prod_of_extents<extents_type>::_Calculate(this->_Exts, extents_type::_Rank);\r\n    }\r\n\r\n    template <class... _IndexTypes>\r\n        requires (sizeof...(_IndexTypes) == extents_type::rank())\r\n              && conjunction_v<is_convertible<_IndexTypes, index_type>...,\r\n                  is_nothrow_constructible<index_type, _IndexTypes>...>\r\n    _NODISCARD constexpr index_type operator()(_IndexTypes... _Indices) const noexcept {\r\n        return _Index_impl(make_index_sequence<extents_type::rank()>{}, static_cast<index_type>(_Indices)...);\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_always_unique() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_always_exhaustive() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_always_strided() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_unique() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_exhaustive() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_strided() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD constexpr index_type stride(_In_range_(<, extents_type::_Rank) const rank_type _Idx) const noexcept\r\n        requires (extents_type::rank() > 0)\r\n    {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Idx < extents_type::_Rank,\r\n            \"Value of i must be less than extents_type::rank() (N4950 [mdspan.layout.right.obs]/6).\");\r\n#endif\r\n        return _Rev_prod_of_extents<extents_type>::_Calculate(this->_Exts, _Idx);\r\n    }\r\n\r\n    template <class _OtherExtents>\r\n        requires (extents_type::rank() == _OtherExtents::rank())\r\n    _NODISCARD friend constexpr bool operator==(const mapping& _Left, const mapping<_OtherExtents>& _Right) noexcept {\r\n        return _Left._Exts == _Right.extents();\r\n    }\r\n\r\nprivate:\r\n    template <class... _IndexTypes, size_t... _Seq>\r\n    _NODISCARD constexpr index_type _Index_impl(\r\n        [[maybe_unused]] index_sequence<_Seq...> _Index_seq, _IndexTypes... _Indices) const noexcept {\r\n        _STL_INTERNAL_STATIC_ASSERT(conjunction_v<is_same<_IndexTypes, index_type>...>);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(this->_Exts._Contains_multidimensional_index(_Index_seq, _Indices...),\r\n            \"Value of extents_type::index-cast(i) must be a multidimensional index in extents_ (N4950 \"\r\n            \"[mdspan.layout.right.obs]/3).\");\r\n#endif\r\n\r\n        index_type _Result = 0;\r\n        ((_Result = static_cast<index_type>(_Indices + this->_Exts.extent(_Seq) * _Result)), ...);\r\n        return _Result;\r\n    }\r\n};\r\n\r\ntemplate <class _Mp>\r\nconcept _Layout_mapping_alike = requires {\r\n    requires _Is_extents<typename _Mp::extents_type>;\r\n    { _Mp::is_always_strided() } -> same_as<bool>;\r\n    { _Mp::is_always_exhaustive() } -> same_as<bool>;\r\n    { _Mp::is_always_unique() } -> same_as<bool>;\r\n    bool_constant<_Mp::is_always_strided()>::value;\r\n    bool_constant<_Mp::is_always_exhaustive()>::value;\r\n    bool_constant<_Mp::is_always_unique()>::value;\r\n};\r\n\r\ntemplate <class _Extents>\r\n_NODISCARD constexpr size_t _Count_dynamic_extents_equal_to_one(const _Extents& _Exts) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_extents<_Extents> && _Extents::rank_dynamic() != 0);\r\n    return static_cast<size_t>(_RANGES count(_Exts._Array, static_cast<_Extents::index_type>(1)));\r\n}\r\n\r\ntemplate <class _Extents>\r\nclass _NO_SPECIALIZATIONS_OF_MEMBER_CLASS_TEMPLATES layout_stride::mapping\r\n    : private _Maybe_fully_static_extents<_Extents>,\r\n      private _Maybe_empty_array<typename _Extents::index_type, _Extents::rank()> {\r\npublic:\r\n    using extents_type = _Extents;\r\n    using index_type   = extents_type::index_type;\r\n    using size_type    = extents_type::size_type;\r\n    using rank_type    = extents_type::rank_type;\r\n    using layout_type  = layout_stride;\r\n\r\nprivate:\r\n    using _Extents_base       = _Maybe_fully_static_extents<extents_type>;\r\n    using _Strides_base       = _Maybe_empty_array<index_type, _Extents::rank()>;\r\n    using _Stride_extent_pair = pair<index_type, index_type>;\r\n\r\n    static_assert(_Is_extents<extents_type>,\r\n        \"Extents must be a specialization of std::extents (N4950 [mdspan.layout.stride.overview]/2).\");\r\n    static_assert(\r\n        extents_type::rank_dynamic() != 0 || extents_type::_Is_static_multidim_index_space_size_representable(),\r\n        \"If Extents::rank_dynamic() == 0 is true, then the size of the multidimensional index space Extents() must be \"\r\n        \"representable as a value of type typename Extents::index_type (N4950 [mdspan.layout.stride.overview]/4).\");\r\n\r\n    template <class _OtherIndexType, size_t... _Indices>\r\n    constexpr mapping(const extents_type& _Exts_, span<_OtherIndexType, extents_type::rank()> _Strides_,\r\n        index_sequence<_Indices...>) noexcept\r\n        : _Extents_base(_Exts_), _Strides_base{static_cast<index_type>(_STD as_const(_Strides_[_Indices]))...} {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_convertible_v<const _OtherIndexType&, index_type>\r\n                                    && is_nothrow_constructible_v<index_type, const _OtherIndexType&>);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (extents_type::rank() != 0) {\r\n            bool _Found_zero          = false;\r\n            bool _Overflow            = false;\r\n            index_type _Req_span_size = 0;\r\n            array<_Stride_extent_pair, extents_type::rank()> _Pairs;\r\n            for (rank_type _Idx = 0; _Idx < extents_type::_Rank; ++_Idx) {\r\n                const index_type _Stride = this->_Array[_Idx];\r\n                _STL_VERIFY(_Stride > 0, \"Value of s[i] must be greater than 0 for all i in the range [0, rank_) \"\r\n                                         \"(N4950 [mdspan.layout.stride.cons]/4.1).\");\r\n                const index_type _Ext = this->_Exts.extent(_Idx);\r\n                if (_Ext == 0) {\r\n                    _Found_zero = true;\r\n                }\r\n\r\n                if (!_Found_zero && !_Overflow) {\r\n                    index_type _Prod;\r\n                    _Overflow = _Mul_overflow(static_cast<index_type>(_Ext - 1), _Stride, _Prod)\r\n                             || _Add_overflow(_Req_span_size, _Prod, _Req_span_size);\r\n                }\r\n\r\n                _Pairs[_Idx] = {_Stride, _Ext};\r\n            }\r\n            _STL_VERIFY(_Found_zero || !_Overflow, \"REQUIRED-SPAN-SIZE(e, s) must be representable as a value of type \"\r\n                                                   \"index_type (N4950 [mdspan.layout.stride.cons]/4.2).\");\r\n\r\n            if (!_Found_zero) {\r\n                _RANGES sort(_Pairs);\r\n                for (rank_type _Idx = 1; _Idx < extents_type::_Rank; ++_Idx) {\r\n                    _STL_VERIFY(_Pairs[_Idx].first >= _Pairs[_Idx - 1].first * _Pairs[_Idx - 1].second,\r\n                        \"If rank_ is greater than 0, then there must exist a permutation P of the integers in the \"\r\n                        \"range [0, rank_), such that 's[p(i)] >= s[p(i-1)] * e.extent(p(i-1))' is true for all i in \"\r\n                        \"the range [1, rank_), where p(i) is the i-th element of P (N5008 \"\r\n                        \"[mdspan.layout.stride.cons]/4.3).\");\r\n                }\r\n            }\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\npublic:\r\n    constexpr mapping() noexcept : _Extents_base(extents_type{}) {\r\n        if constexpr (extents_type::rank() != 0) {\r\n            this->_Array.back() = 1;\r\n            for (rank_type _Idx = extents_type::_Rank - 1; _Idx-- > 0;) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                const bool _Overflow =\r\n                    _Mul_overflow(this->_Array[_Idx + 1], this->_Exts.extent(_Idx + 1), this->_Array[_Idx]);\r\n                // NB: N4950 requires value of 'layout_right::mapping<extents_type>().required_span_size()' to be\r\n                // representable as a value of type 'index_type', but this is not enough. We need to require every\r\n                // single stride to be representable as a value of type 'index_type', so we can get desired effects.\r\n                _STL_VERIFY(!_Overflow,\r\n                    \"Value of layout_right::mapping<extents_type>().required_span_size() must be \"\r\n                    \"representable as a value of type index_type (N4950 [mdspan.layout.stride.cons]/1).\");\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL != 0 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n                this->_Array[_Idx] = static_cast<index_type>(this->_Array[_Idx + 1] * this->_Exts.extent(_Idx + 1));\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n            }\r\n        }\r\n    }\r\n\r\n    constexpr mapping(const mapping&) noexcept = default;\r\n\r\n    template <class _OtherIndexType>\r\n        requires is_convertible_v<const _OtherIndexType&, index_type>\r\n              && is_nothrow_constructible_v<index_type, const _OtherIndexType&>\r\n    constexpr mapping(const extents_type& _Exts_, span<_OtherIndexType, extents_type::rank()> _Strides_) noexcept\r\n        : mapping(_Exts_, _Strides_, make_index_sequence<extents_type::rank()>{}) {}\r\n\r\n    template <class _OtherIndexType>\r\n        requires is_convertible_v<const _OtherIndexType&, index_type>\r\n              && is_nothrow_constructible_v<index_type, const _OtherIndexType&>\r\n    constexpr mapping(\r\n        const extents_type& _Exts_, const array<_OtherIndexType, extents_type::rank()>& _Strides_) noexcept\r\n        : mapping(_Exts_, span{_Strides_}, make_index_sequence<extents_type::rank()>{}) {}\r\n\r\n    template <class _StridedLayoutMapping>\r\n        requires _Layout_mapping_alike<_StridedLayoutMapping>\r\n              && is_constructible_v<extents_type, typename _StridedLayoutMapping::extents_type>\r\n              && (_StridedLayoutMapping::is_always_unique()) && (_StridedLayoutMapping::is_always_strided())\r\n    constexpr explicit(!(\r\n        is_convertible_v<typename _StridedLayoutMapping::extents_type, extents_type>\r\n        && (_Is_mapping_of<layout_left, _StridedLayoutMapping> || _Is_mapping_of<layout_right, _StridedLayoutMapping>\r\n            || _Is_mapping_of<layout_stride, _StridedLayoutMapping>) ))\r\n        mapping(const _StridedLayoutMapping& _Other) noexcept\r\n        : _Extents_base(_Other.extents()) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_STD in_range<index_type>(_Other.required_span_size()),\r\n            \"Value of other.required_span_size() must be representable as a value of type index_type (N4950 \"\r\n            \"[mdspan.layout.stride.cons]/7.3).\");\r\n        _STL_VERIFY(\r\n            _Offset(_Other) == 0, \"Value of OFFSET(other) must be equal to 0 (N4950 [mdspan.layout.stride.cons]/7.4).\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (extents_type::_Rank != 0) {\r\n            for (rank_type _Idx = 0; _Idx < extents_type::_Rank; ++_Idx) {\r\n                const auto _Stride = _Other.stride(_Idx);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Stride > 0, \"Value of other.stride(r) must be greater than 0 for every rank index r of \"\r\n                                         \"extents() (N4950 [mdspan.layout.stride.cons]/7.2).\");\r\n#endif\r\n                this->_Array[_Idx] = static_cast<index_type>(_Stride);\r\n            }\r\n        }\r\n    }\r\n\r\n    constexpr mapping& operator=(const mapping&) noexcept = default;\r\n\r\n    _NODISCARD constexpr const extents_type& extents() const noexcept {\r\n        return this->_Exts;\r\n    }\r\n\r\n    _NODISCARD constexpr array<index_type, extents_type::rank()> strides() const noexcept {\r\n        if constexpr (extents_type::rank() == 0) {\r\n            return {};\r\n        } else {\r\n            return this->_Array;\r\n        }\r\n    }\r\n\r\n    _NODISCARD constexpr index_type required_span_size() const noexcept {\r\n        if constexpr (extents_type::rank() == 0) {\r\n            return 1;\r\n        } else {\r\n            index_type _Result = 1;\r\n            for (rank_type _Idx = 0; _Idx < extents_type::_Rank; ++_Idx) {\r\n                const index_type _Ext = this->_Exts.extent(_Idx);\r\n                if (_Ext == 0) {\r\n                    return 0;\r\n                }\r\n\r\n                _Result += (_Ext - 1) * this->_Array[_Idx];\r\n            }\r\n\r\n            return _Result;\r\n        }\r\n    }\r\n\r\n    template <class... _IndexTypes>\r\n        requires (sizeof...(_IndexTypes) == extents_type::rank())\r\n              && conjunction_v<is_convertible<_IndexTypes, index_type>...,\r\n                  is_nothrow_constructible<index_type, _IndexTypes>...>\r\n    _NODISCARD constexpr index_type operator()(_IndexTypes... _Indices) const noexcept {\r\n        return _Index_impl(make_index_sequence<extents_type::rank()>{}, static_cast<index_type>(_Indices)...);\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_always_unique() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_always_exhaustive() noexcept {\r\n        return extents_type::_Rank == 0 || extents_type::_Multidim_index_space_size_is_always_zero;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_always_strided() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_unique() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD constexpr bool is_exhaustive() const noexcept {\r\n        if constexpr (is_always_exhaustive()) {\r\n            return true;\r\n        } else if constexpr (extents_type::rank() == 1) {\r\n            return this->_Array[0] == 1 || this->_Exts.extent(0) == 0;\r\n        } else if constexpr (extents_type::rank() == 2) {\r\n            return (this->_Array[0] == 1 && this->_Array[1] == this->_Exts.extent(0))\r\n                || (this->_Array[1] == 1 && this->_Array[0] == this->_Exts.extent(1)) || this->_Exts.extent(0) == 0\r\n                || this->_Exts.extent(1) == 0;\r\n        } else if constexpr (_RANGES count(extents_type::_Static_extents, static_cast<rank_type>(1)) != 0) {\r\n            // NB: Extents equal to 1 are problematic - sometimes in such cases even when the mapping is exhaustive\r\n            // this function should return false.\r\n            // For example, when the extents are [2, 1, 2] and the strides are [1, 5, 2], the mapping is exhaustive\r\n            // per N5008 [mdspan.layout.reqmts]/16 but not per N5008 [mdspan.layout.stride.obs]/5.2.\r\n            return _Is_exhaustive_special_case();\r\n        } else if constexpr (extents_type::rank_dynamic() == 0) {\r\n            return _Is_exhaustive_common_case();\r\n        } else {\r\n            if (_Count_dynamic_extents_equal_to_one(this->_Exts) != 0) {\r\n                return _Is_exhaustive_special_case();\r\n            }\r\n\r\n            return _Is_exhaustive_common_case();\r\n        }\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_strided() noexcept {\r\n        return true;\r\n    }\r\n\r\n    _NODISCARD constexpr index_type stride(_In_range_(<, extents_type::_Rank) const rank_type _Idx) const noexcept {\r\n        if constexpr (extents_type::rank() == 0) {\r\n            _STL_REPORT_ERROR(\"The argument to stride must be nonnegative and less than extents_type::rank().\");\r\n            return 1;\r\n        } else {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Idx < extents_type::_Rank,\r\n                \"The argument to stride must be nonnegative and less than extents_type::rank().\");\r\n#endif\r\n            return this->_Array[_Idx];\r\n        }\r\n    }\r\n\r\n    template <class _OtherMapping>\r\n        requires _Layout_mapping_alike<_OtherMapping> && (extents_type::rank() == _OtherMapping::extents_type::rank())\r\n              && (_OtherMapping::is_always_strided())\r\n    _NODISCARD friend constexpr bool operator==(const mapping& _Left, const _OtherMapping& _Right) noexcept {\r\n        if constexpr (extents_type::rank() != 0) {\r\n            if (_Left.extents() != _Right.extents()) {\r\n                return false;\r\n            }\r\n\r\n            for (rank_type _Idx = 0; _Idx < extents_type::_Rank; ++_Idx) {\r\n                if (_STD cmp_not_equal(_Left.stride(_Idx), _Right.stride(_Idx))) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n\r\n        return _Offset(_Right) == 0;\r\n    }\r\n\r\nprivate:\r\n    template <class _OtherMapping>\r\n    _NODISCARD static constexpr _OtherMapping::index_type _Offset(_OtherMapping& _Mapping) noexcept {\r\n        if constexpr (extents_type::rank() == 0) {\r\n            return _Mapping();\r\n        } else {\r\n            for (rank_type _Idx = 0; _Idx < extents_type::_Rank; ++_Idx) {\r\n                if (_Mapping.extents().extent(_Idx) == 0) {\r\n                    return 0;\r\n                }\r\n            }\r\n\r\n            return [&]<size_t... _Indices>(index_sequence<_Indices...>) { return _Mapping(((void) _Indices, 0)...); }(\r\n                       make_index_sequence<extents_type::rank()>{});\r\n        }\r\n    }\r\n\r\n    template <class... _IndexTypes, size_t... _Seq>\r\n    _NODISCARD constexpr index_type _Index_impl(\r\n        [[maybe_unused]] index_sequence<_Seq...> _Index_seq, _IndexTypes... _Indices) const noexcept {\r\n        _STL_INTERNAL_STATIC_ASSERT(conjunction_v<is_same<_IndexTypes, index_type>...>);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(this->_Exts._Contains_multidimensional_index(_Index_seq, _Indices...),\r\n            \"Value of extents_type::index-cast(i) must be a multidimensional index in extents_ (N4950 \"\r\n            \"[mdspan.layout.stride.obs]/3).\");\r\n#endif\r\n\r\n        return static_cast<index_type>(((_Indices * this->_Array[_Seq]) + ... + 0));\r\n    }\r\n\r\n    _NODISCARD constexpr bool _Is_exhaustive_common_case() const noexcept {\r\n        const index_type _Prod = _Fwd_prod_of_extents<extents_type>::_Calculate(this->_Exts, extents_type::_Rank);\r\n        return _Prod == required_span_size() || _Prod == 0;\r\n    }\r\n\r\n    _NODISCARD constexpr bool _Is_exhaustive_special_case() const noexcept {\r\n        array<_Stride_extent_pair, extents_type::rank()> _Pairs;\r\n        for (rank_type _Idx = 0; _Idx < extents_type::_Rank; ++_Idx) {\r\n            const index_type _Ext = this->_Exts.extent(_Idx);\r\n            if (_Ext == 0) {\r\n                return true;\r\n            }\r\n\r\n            _Pairs[_Idx] = {this->_Array[_Idx], _Ext};\r\n        }\r\n\r\n        _RANGES sort(_Pairs);\r\n        if (_Pairs[0].first != 1) {\r\n            return false;\r\n        }\r\n\r\n        for (rank_type _Idx = 1; _Idx < extents_type::_Rank; ++_Idx) {\r\n            if (_Pairs[_Idx].first != _Pairs[_Idx - 1].first * _Pairs[_Idx - 1].second) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return true;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _ElementType>\r\nstruct default_accessor {\r\n    using offset_policy    = default_accessor;\r\n    using element_type     = _ElementType;\r\n    using reference        = _ElementType&;\r\n    using data_handle_type = _ElementType*;\r\n\r\n    static_assert(\r\n        sizeof(element_type) > 0, \"ElementType must be a complete type (N4950 [mdspan.accessor.default.overview]/2).\");\r\n    static_assert(!is_abstract_v<element_type>,\r\n        \"ElementType cannot be an abstract type (N4950 [mdspan.accessor.default.overview]/2).\");\r\n    static_assert(\r\n        !is_array_v<element_type>, \"ElementType cannot be an array type (N4950 [mdspan.accessor.default.overview]/2).\");\r\n\r\n    constexpr default_accessor() noexcept = default;\r\n\r\n    template <class _OtherElementType>\r\n        requires is_convertible_v<_OtherElementType (*)[], element_type (*)[]>\r\n    constexpr default_accessor(default_accessor<_OtherElementType>) noexcept {}\r\n\r\n    _NODISCARD constexpr reference access(data_handle_type _Ptr, size_t _Idx) const noexcept {\r\n        return _Ptr[_Idx];\r\n    }\r\n\r\n    _NODISCARD constexpr data_handle_type offset(data_handle_type _Ptr, size_t _Idx) const noexcept {\r\n        return _Ptr + _Idx;\r\n    }\r\n};\r\n\r\ntemplate <class _LayoutPolicy, class _Extents>\r\nconcept _Elidable_layout_mapping =\r\n    (_Is_any_of_v<_LayoutPolicy, layout_left, layout_right> && _Extents::rank_dynamic() == 0)\r\n    || (same_as<_LayoutPolicy, layout_stride> && _Extents::rank() == 0);\r\n\r\ntemplate <class _Extents, class _LayoutPolicy>\r\nstruct _Mdspan_mapping_holder {\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_extents<_Extents>);\r\n\r\n    using _Mapping = _LayoutPolicy::template mapping<_Extents>;\r\n\r\n    constexpr _Mdspan_mapping_holder() noexcept = default;\r\n\r\n    constexpr explicit _Mdspan_mapping_holder(const _Extents& _Exts) : _Map(_Exts) {}\r\n\r\n    constexpr explicit _Mdspan_mapping_holder(_Extents&& _Exts) : _Map(_STD move(_Exts)) {}\r\n\r\n    template <class _OtherMapping>\r\n    constexpr explicit _Mdspan_mapping_holder(const _OtherMapping& _Map_) : _Map(_Map_) {}\r\n\r\n    _MSVC_NO_UNIQUE_ADDRESS _Mapping _Map = _Mapping();\r\n};\r\n\r\ntemplate <class _Extents, _Elidable_layout_mapping<_Extents> _LayoutPolicy>\r\nstruct _Mdspan_mapping_holder<_Extents, _LayoutPolicy> {\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_extents<_Extents>);\r\n\r\n    using _Mapping = _LayoutPolicy::template mapping<_Extents>;\r\n\r\n    constexpr _Mdspan_mapping_holder() noexcept = default;\r\n\r\n    constexpr explicit _Mdspan_mapping_holder(const _Extents&) noexcept {}\r\n\r\n    constexpr explicit _Mdspan_mapping_holder(_Extents&&) noexcept {}\r\n\r\n    template <class _OtherMapping>\r\n    constexpr explicit _Mdspan_mapping_holder(const _OtherMapping& _Map_) {\r\n        // NB: Constructing _Mapping from _OtherMapping may have side effects - we should create a temporary.\r\n        if constexpr (!_Elidable_layout_mapping<typename _OtherMapping::layout_type, _Extents>) {\r\n            (void) _Mapping{_Map_};\r\n        }\r\n    }\r\n\r\n    static constexpr _Mapping _Map{};\r\n};\r\n\r\ntemplate <class _AccessorPolicy>\r\nconcept _Elidable_accessor_policy = _Is_specialization_v<_AccessorPolicy, default_accessor>;\r\n\r\ntemplate <class _AccessorPolicy>\r\nstruct _Mdspan_accessor_holder {\r\n    constexpr _Mdspan_accessor_holder() noexcept = default;\r\n\r\n    template <class _OtherAccessorPolicy>\r\n    constexpr explicit _Mdspan_accessor_holder(const _OtherAccessorPolicy& _Acc_) : _Acc(_Acc_) {}\r\n\r\n    _MSVC_NO_UNIQUE_ADDRESS _AccessorPolicy _Acc = _AccessorPolicy();\r\n};\r\n\r\ntemplate <_Elidable_accessor_policy _AccessorPolicy>\r\nstruct _Mdspan_accessor_holder<_AccessorPolicy> {\r\n    constexpr _Mdspan_accessor_holder() noexcept = default;\r\n\r\n    template <class _OtherAccessorPolicy>\r\n    constexpr explicit _Mdspan_accessor_holder(const _OtherAccessorPolicy& _Acc_) {\r\n        // NB: Constructing _AccessorPolicy from _OtherAccessorPolicy may have side effects - we should create a\r\n        // temporary.\r\n        if constexpr (!_Elidable_accessor_policy<_OtherAccessorPolicy>) {\r\n            (void) _AccessorPolicy{_Acc_};\r\n        }\r\n    }\r\n\r\n    static constexpr _AccessorPolicy _Acc{};\r\n};\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\ntemplate <class _IndexType, class _OtherIndexType>\r\n_NODISCARD constexpr _IndexType _Mdspan_checked_index_cast(_OtherIndexType&& _Idx)\r\n    noexcept(is_nothrow_constructible_v<_IndexType, _OtherIndexType>) {\r\n    _STL_INTERNAL_STATIC_ASSERT(is_integral_v<_IndexType> && is_constructible_v<_IndexType, _OtherIndexType>);\r\n\r\n    using _Arg_value_t = remove_cvref_t<_OtherIndexType>;\r\n    if constexpr (is_integral_v<_Arg_value_t> && !is_same_v<_Arg_value_t, bool>) {\r\n        _STL_VERIFY(_STD in_range<_IndexType>(_Idx),\r\n            \"Each argument to operator[] must be representable by index_type in order for the pack of arguments to be \"\r\n            \"a valid multidimensional index (N4964 [mdspan.mdspan.members]/3).\");\r\n    }\r\n    return static_cast<_IndexType>(_STD forward<_OtherIndexType>(_Idx));\r\n}\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n_EXPORT_STD template <class _ElementType, class _Extents, class _LayoutPolicy = layout_right,\r\n    class _AccessorPolicy = default_accessor<_ElementType>>\r\nclass mdspan {\r\npublic:\r\n    using extents_type     = _Extents;\r\n    using layout_type      = _LayoutPolicy;\r\n    using accessor_type    = _AccessorPolicy;\r\n    using mapping_type     = layout_type::template mapping<extents_type>;\r\n    using element_type     = _ElementType;\r\n    using value_type       = remove_cv_t<element_type>;\r\n    using index_type       = extents_type::index_type;\r\n    using size_type        = extents_type::size_type;\r\n    using rank_type        = extents_type::rank_type;\r\n    using data_handle_type = accessor_type::data_handle_type;\r\n    using reference        = accessor_type::reference;\r\n\r\nprivate:\r\n    static_assert(\r\n        sizeof(element_type) > 0, \"ElementType must be a complete type (N4950 [mdspan.mdspan.overview]/2.1).\");\r\n    static_assert(\r\n        !is_abstract_v<element_type>, \"ElementType cannot be an abstract type (N4950 [mdspan.mdspan.overview]/2.1).\");\r\n    static_assert(\r\n        !is_array_v<element_type>, \"ElementType cannot be an array type (N4950 [mdspan.mdspan.overview]/2.1).\");\r\n    static_assert(_Is_extents<extents_type>,\r\n        \"Extents must be a specialization of std::extents (N4950 [mdspan.mdspan.overview]/2.2).\");\r\n    static_assert(is_same_v<element_type, typename accessor_type::element_type>,\r\n        \"ElementType and typename AccessorPolicy::element_type must be the same type (N4950 \"\r\n        \"[mdspan.mdspan.overview]/2.3).\");\r\n\r\npublic:\r\n    _NODISCARD _Ret_range_(==, extents_type::_Rank) static constexpr rank_type rank() noexcept {\r\n        return extents_type::_Rank;\r\n    }\r\n\r\n    _NODISCARD static constexpr rank_type rank_dynamic() noexcept {\r\n        return extents_type::_Rank_dynamic;\r\n    }\r\n\r\n    _NODISCARD static constexpr size_t static_extent(_In_range_(<, extents_type::_Rank) const rank_type _Idx) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Idx < extents_type::_Rank, \"Index must be less than rank() (N4950 [mdspan.extents.obs]/1)\");\r\n#endif\r\n        return extents_type::_Static_extents[_Idx];\r\n    }\r\n\r\n    _NODISCARD constexpr index_type extent(_In_range_(<, extents_type::_Rank) const rank_type _Idx) const noexcept {\r\n        return _Mapping._Map.extents().extent(_Idx);\r\n    }\r\n\r\n    constexpr mdspan() noexcept(is_nothrow_default_constructible_v<data_handle_type>\r\n                                && is_nothrow_default_constructible_v<mapping_type>\r\n                                && is_nothrow_default_constructible_v<accessor_type>) // strengthened\r\n        requires (rank_dynamic() > 0) && is_default_constructible_v<data_handle_type>\r\n              && is_default_constructible_v<mapping_type> && is_default_constructible_v<accessor_type>\r\n    {}\r\n\r\n    constexpr mdspan(const mdspan&) = default;\r\n    constexpr mdspan(mdspan&&)      = default;\r\n\r\n    template <class... _OtherIndexTypes>\r\n        requires conjunction_v<is_convertible<_OtherIndexTypes, index_type>...,\r\n                     is_nothrow_constructible<index_type, _OtherIndexTypes>...>\r\n                  && (sizeof...(_OtherIndexTypes) == rank() || sizeof...(_OtherIndexTypes) == rank_dynamic())\r\n                  && is_constructible_v<mapping_type, extents_type> && is_default_constructible_v<accessor_type>\r\n    constexpr explicit mdspan(data_handle_type _Ptr_, _OtherIndexTypes... _Exts)\r\n        noexcept(is_nothrow_constructible_v<mapping_type, extents_type>\r\n                 && is_nothrow_default_constructible_v<accessor_type>) // strengthened\r\n        : _Mapping(extents_type{static_cast<index_type>(_STD move(_Exts))...}), _Accessor(), _Ptr(_STD move(_Ptr_)) {}\r\n\r\n    template <class _OtherIndexType, size_t _Size>\r\n        requires is_convertible_v<const _OtherIndexType&, index_type>\r\n                  && is_nothrow_constructible_v<index_type, const _OtherIndexType&>\r\n                  && (_Size == rank() || _Size == rank_dynamic())\r\n                  && is_constructible_v<mapping_type, extents_type> && is_default_constructible_v<accessor_type>\r\n    constexpr explicit(_Size != rank_dynamic()) mdspan(data_handle_type _Ptr_, span<_OtherIndexType, _Size> _Exts)\r\n        noexcept(is_nothrow_constructible_v<mapping_type, extents_type>\r\n                 && is_nothrow_default_constructible_v<accessor_type>) // strengthened\r\n        : _Mapping(extents_type{_Exts}), _Accessor(), _Ptr(_STD move(_Ptr_)) {}\r\n\r\n    template <class _OtherIndexType, size_t _Size>\r\n        requires is_convertible_v<const _OtherIndexType&, index_type>\r\n                  && is_nothrow_constructible_v<index_type, const _OtherIndexType&>\r\n                  && (_Size == rank() || _Size == rank_dynamic())\r\n                  && is_constructible_v<mapping_type, extents_type> && is_default_constructible_v<accessor_type>\r\n    constexpr explicit(_Size != rank_dynamic())\r\n        mdspan(data_handle_type _Ptr_, const array<_OtherIndexType, _Size>& _Exts)\r\n            noexcept(is_nothrow_constructible_v<mapping_type, extents_type>\r\n                     && is_nothrow_default_constructible_v<accessor_type>) // strengthened\r\n        : _Mapping(extents_type{_Exts}), _Accessor(), _Ptr(_STD move(_Ptr_)) {}\r\n\r\n    constexpr mdspan(data_handle_type _Ptr_, const extents_type& _Exts)\r\n        noexcept(is_nothrow_constructible_v<mapping_type, const extents_type&>\r\n                 && is_nothrow_default_constructible_v<accessor_type>) // strengthened\r\n        requires is_constructible_v<mapping_type, const extents_type&> && is_default_constructible_v<accessor_type>\r\n        : _Mapping(_Exts), _Accessor(), _Ptr(_STD move(_Ptr_)) {}\r\n\r\n    constexpr mdspan(data_handle_type _Ptr_, const mapping_type& _Map_)\r\n        noexcept(is_nothrow_copy_constructible_v<mapping_type>\r\n                 && is_nothrow_default_constructible_v<accessor_type>) // strengthened\r\n        requires is_default_constructible_v<accessor_type>\r\n        : _Mapping(_Map_), _Accessor(), _Ptr(_STD move(_Ptr_)) {}\r\n\r\n    constexpr mdspan(data_handle_type _Ptr_, const mapping_type& _Map_, const accessor_type& _Acc_) noexcept(\r\n        is_nothrow_copy_constructible_v<mapping_type> && is_nothrow_copy_constructible_v<accessor_type>) // strengthened\r\n        : _Mapping(_Map_), _Accessor(_Acc_), _Ptr(_STD move(_Ptr_)) {}\r\n\r\n    template <class _OtherElementType, class _OtherExtents, class _OtherLayoutPolicy, class _OtherAccessor>\r\n        requires is_constructible_v<mapping_type, const typename _OtherLayoutPolicy::template mapping<_OtherExtents>&>\r\n                  && is_constructible_v<accessor_type, const _OtherAccessor&>\r\n    constexpr explicit(\r\n        !is_convertible_v<const typename _OtherLayoutPolicy::template mapping<_OtherExtents>&, mapping_type>\r\n        || !is_convertible_v<const _OtherAccessor&, accessor_type>)\r\n        mdspan(const mdspan<_OtherElementType, _OtherExtents, _OtherLayoutPolicy, _OtherAccessor>& _Other)\r\n            noexcept(is_nothrow_constructible_v<data_handle_type, const typename _OtherAccessor::data_handle_type&>\r\n                     && is_nothrow_constructible_v<mapping_type,\r\n                         const typename _OtherLayoutPolicy::template mapping<_OtherExtents>&>\r\n                     && is_nothrow_constructible_v<accessor_type, const _OtherAccessor&>) // strengthened\r\n        : _Mapping(_Other.mapping()), _Accessor(_Other.accessor()), _Ptr(_Other.data_handle()) {\r\n        static_assert(is_constructible_v<data_handle_type, const typename _OtherAccessor::data_handle_type&>,\r\n            \"The data_handle_type must be constructible from const typename OtherAccessor::data_handle_type& (N4950 \"\r\n            \"[mdspan.mdspan.cons]/20.1).\");\r\n        static_assert(is_constructible_v<extents_type, _OtherExtents>,\r\n            \"The extents_type must be constructible from OtherExtents (N4950 [mdspan.mdspan.cons]/20.2).\");\r\n#if _MSVC_STL_HARDENING_MDSPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n        for (rank_type _Idx = 0; _Idx < extents_type::_Rank; ++_Idx) {\r\n            const auto _Static_ext = extents_type::_Static_extents[_Idx];\r\n            _STL_VERIFY(_STD cmp_equal(_Static_ext, dynamic_extent) || _STD cmp_equal(_Static_ext, _Other.extent(_Idx)),\r\n                \"For each rank index r of extents_type, static_extent(r) == dynamic_extent || static_extent(r) == \"\r\n                \"other.extent(r) must be true (N4950 [mdspan.mdspan.cons]/21.1).\");\r\n        }\r\n#endif // _MSVC_STL_HARDENING_MDSPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    constexpr mdspan& operator=(const mdspan&) = default;\r\n    constexpr mdspan& operator=(mdspan&&)      = default;\r\n\r\n    template <class... _OtherIndexTypes>\r\n        requires conjunction_v<is_convertible<_OtherIndexTypes, index_type>...,\r\n                     is_nothrow_constructible<index_type, _OtherIndexTypes>...>\r\n              && (sizeof...(_OtherIndexTypes) == rank())\r\n    _NODISCARD constexpr reference operator[](_OtherIndexTypes... _Indices) const\r\n        noexcept(noexcept(_Access_impl(static_cast<index_type>(_STD move(_Indices))...))) /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        return _Access_impl(_STD _Mdspan_checked_index_cast<index_type>(_STD move(_Indices))...);\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL != 0 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        return _Access_impl(static_cast<index_type>(_STD move(_Indices))...);\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n\r\nprivate:\r\n    template <class _OtherIndexType, size_t... _Seq>\r\n    _NODISCARD constexpr reference _Multidimensional_subscript(\r\n        span<_OtherIndexType, rank()> _Indices, index_sequence<_Seq...>) const\r\n        noexcept(noexcept(_Access_impl(static_cast<index_type>(_STD as_const(_Indices[_Seq]))...))) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        return _Access_impl(_STD _Mdspan_checked_index_cast<index_type>(_STD as_const(_Indices[_Seq]))...);\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL != 0 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        return _Access_impl(static_cast<index_type>(_STD as_const(_Indices[_Seq]))...);\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n\r\npublic:\r\n    template <class _OtherIndexType>\r\n        requires is_convertible_v<const _OtherIndexType&, index_type>\r\n              && is_nothrow_constructible_v<index_type, const _OtherIndexType&>\r\n    _NODISCARD constexpr reference operator[](span<_OtherIndexType, rank()> _Indices) const\r\n        noexcept(noexcept(_Multidimensional_subscript(_Indices, make_index_sequence<rank()>{}))) /* strengthened */ {\r\n        return _Multidimensional_subscript(_Indices, make_index_sequence<rank()>{});\r\n    }\r\n\r\n    template <class _OtherIndexType>\r\n        requires is_convertible_v<const _OtherIndexType&, index_type>\r\n              && is_nothrow_constructible_v<index_type, const _OtherIndexType&>\r\n    _NODISCARD constexpr reference operator[](const array<_OtherIndexType, rank()>& _Indices) const noexcept(\r\n        noexcept(_Multidimensional_subscript(span{_Indices}, make_index_sequence<rank()>{}))) /* strengthened */ {\r\n        return _Multidimensional_subscript(span{_Indices}, make_index_sequence<rank()>{});\r\n    }\r\n\r\n    _NODISCARD constexpr size_type size() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (rank_dynamic() != 0) {\r\n            _STL_VERIFY(\r\n                _Mapping._Map.extents().template _Is_dynamic_multidim_index_space_size_representable<size_type>(),\r\n                \"The size of the multidimensional index space extents() must be representable as a value of type \"\r\n                \"size_type (N4950 [mdspan.mdspan.members]/7).\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        return static_cast<size_type>(\r\n            _Fwd_prod_of_extents<extents_type>::_Calculate(_Mapping._Map.extents(), extents_type::_Rank));\r\n    }\r\n\r\n    _NODISCARD constexpr bool empty() const noexcept {\r\n        if constexpr (extents_type::_Multidim_index_space_size_is_always_zero) {\r\n            return true;\r\n        } else {\r\n            const extents_type& _Exts = _Mapping._Map.extents();\r\n            for (rank_type _Idx = 0; _Idx < extents_type::_Rank; ++_Idx) {\r\n                if (_Exts.extent(_Idx) == 0) {\r\n                    return true;\r\n                }\r\n            }\r\n            return false;\r\n        }\r\n    }\r\n\r\n    friend constexpr void swap(mdspan& _Left, mdspan& _Right) noexcept {\r\n        swap(_Left._Ptr, _Right._Ptr); // intentional ADL\r\n\r\n        if constexpr (!_Elidable_layout_mapping<layout_type, extents_type>) {\r\n            swap(_Left._Mapping._Map, _Right._Mapping._Map); // intentional ADL\r\n        }\r\n\r\n        if constexpr (!_Elidable_accessor_policy<accessor_type>) {\r\n            swap(_Left._Accessor._Acc, _Right._Accessor._Acc); // intentional ADL\r\n        }\r\n    }\r\n\r\n    _NODISCARD constexpr const extents_type& extents() const noexcept {\r\n        return _Mapping._Map.extents();\r\n    }\r\n\r\n    _NODISCARD constexpr const data_handle_type& data_handle() const noexcept {\r\n        return _Ptr;\r\n    }\r\n\r\n    _NODISCARD constexpr const mapping_type& mapping() const noexcept {\r\n        return _Mapping._Map;\r\n    }\r\n\r\n    _NODISCARD constexpr const accessor_type& accessor() const noexcept {\r\n        return _Accessor._Acc;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_always_unique() noexcept /* strengthened */ {\r\n        constexpr bool _Result = mapping_type::is_always_unique();\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_always_exhaustive() noexcept /* strengthened */ {\r\n        constexpr bool _Result = mapping_type::is_always_exhaustive();\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD static constexpr bool is_always_strided() noexcept /* strengthened */ {\r\n        constexpr bool _Result = mapping_type::is_always_strided();\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD constexpr bool is_unique() const noexcept(noexcept(_Mapping._Map.is_unique())) /* strengthened */ {\r\n        return _Mapping._Map.is_unique();\r\n    }\r\n\r\n    _NODISCARD constexpr bool is_exhaustive() const\r\n        noexcept(noexcept(_Mapping._Map.is_exhaustive())) /* strengthened */ {\r\n        return _Mapping._Map.is_exhaustive();\r\n    }\r\n\r\n    _NODISCARD constexpr bool is_strided() const noexcept(noexcept(_Mapping._Map.is_strided())) /* strengthened */ {\r\n        return _Mapping._Map.is_strided();\r\n    }\r\n\r\n    _NODISCARD constexpr index_type stride(const rank_type _Idx) const\r\n        noexcept(noexcept(_Mapping._Map.stride(_Idx))) /* strengthened */ {\r\n        return _Mapping._Map.stride(_Idx);\r\n    }\r\n\r\nprivate:\r\n    template <class... _OtherIndexTypes>\r\n    _NODISCARD constexpr reference _Access_impl(_OtherIndexTypes... _Indices) const\r\n        noexcept(noexcept(_Accessor._Acc.access(_Ptr, static_cast<size_t>(_Mapping._Map(_Indices...))))) {\r\n        _STL_INTERNAL_STATIC_ASSERT(conjunction_v<is_same<_OtherIndexTypes, index_type>...>);\r\n#if _MSVC_STL_HARDENING_MDSPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(\r\n            _Mapping._Map.extents()._Contains_multidimensional_index(make_index_sequence<rank()>{}, _Indices...),\r\n            \"mdspan subscript out of range; extents_type::index-cast(std::move(indices)) must be a multidimensional \"\r\n            \"index in extents() (N5001 [mdspan.mdspan.members]/3).\");\r\n#endif\r\n\r\n        return _Accessor._Acc.access(_Ptr, static_cast<size_t>(_Mapping._Map(_Indices...)));\r\n    }\r\n\r\n    _MSVC_NO_UNIQUE_ADDRESS _Mdspan_mapping_holder<extents_type, layout_type> _Mapping;\r\n    _MSVC_NO_UNIQUE_ADDRESS _Mdspan_accessor_holder<accessor_type> _Accessor;\r\n    _MSVC_NO_UNIQUE_ADDRESS data_handle_type _Ptr = data_handle_type();\r\n};\r\n\r\ntemplate <class _CArray>\r\n    requires (is_array_v<_CArray> && rank_v<_CArray> == 1)\r\nmdspan(_CArray&) -> mdspan<remove_all_extents_t<_CArray>, extents<size_t, extent_v<_CArray, 0>>>;\r\n\r\ntemplate <class _Pointer>\r\n    requires (is_pointer_v<remove_reference_t<_Pointer>>)\r\nmdspan(_Pointer&&) -> mdspan<remove_pointer_t<remove_reference_t<_Pointer>>, extents<size_t>>;\r\n\r\ntemplate <class _ElementType, class... _Integrals>\r\n    requires conjunction_v<is_convertible<_Integrals, size_t>...> && (sizeof...(_Integrals) > 0)\r\nexplicit mdspan(_ElementType*, _Integrals...) -> mdspan<_ElementType, dextents<size_t, sizeof...(_Integrals)>>;\r\n\r\ntemplate <class _ElementType, class _OtherIndexType, size_t _Nx>\r\nmdspan(_ElementType*, span<_OtherIndexType, _Nx>) -> mdspan<_ElementType, dextents<size_t, _Nx>>;\r\n\r\ntemplate <class _ElementType, class _OtherIndexType, size_t _Nx>\r\nmdspan(_ElementType*, const array<_OtherIndexType, _Nx>&) -> mdspan<_ElementType, dextents<size_t, _Nx>>;\r\n\r\ntemplate <class _ElementType, class _IndexType, size_t... _ExtentsPack>\r\nmdspan(_ElementType*, const extents<_IndexType, _ExtentsPack...>&)\r\n    -> mdspan<_ElementType, extents<_IndexType, _ExtentsPack...>>;\r\n\r\ntemplate <class _ElementType, class _MappingType>\r\nmdspan(_ElementType*, const _MappingType&)\r\n    -> mdspan<_ElementType, typename _MappingType::extents_type, typename _MappingType::layout_type>;\r\n\r\ntemplate <class _MappingType, class _AccessorType>\r\nmdspan(const typename _AccessorType::data_handle_type&, const _MappingType&, const _AccessorType&)\r\n    -> mdspan<typename _AccessorType::element_type, typename _MappingType::extents_type,\r\n        typename _MappingType::layout_type, _AccessorType>;\r\n\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _MDSPAN_\r\n"
  },
  {
    "path": "stl/inc/memory",
    "content": "// memory standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _MEMORY_\r\n#define _MEMORY_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <exception>\r\n#include <iosfwd>\r\n#include <type_traits>\r\n#include <typeinfo>\r\n#include <xmemory>\r\n\r\n#if _HAS_CXX20\r\n#include <atomic>\r\n#endif // _HAS_CXX20\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#undef msvc\r\n\r\n_STD_BEGIN\r\n#if _HAS_CXX17\r\n#define _REQUIRE_PARALLEL_LVALUE_ITERATOR(_Iter)                                                                     \\\r\n    static_assert(_Is_ranges_fwd_iter_v<_Iter> && is_lvalue_reference_v<_Iter_ref_t<_Iter>>,                         \\\r\n        \"Parallel specialized <memory> algorithms require the iterator type to be forward iterator and dereference \" \\\r\n        \"to lvalues.\")\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _NoThrowFwdIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NoThrowFwdIt uninitialized_copy(_ExPo&&, const _FwdIt _First, const _FwdIt _Last, _NoThrowFwdIt _Dest) noexcept\r\n/* terminates */ {\r\n    // copy [_First, _Last) to raw [_Dest, ...)\r\n    // not parallelized at present\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _REQUIRE_PARALLEL_LVALUE_ITERATOR(_NoThrowFwdIt);\r\n\r\n    return _STD uninitialized_copy(_First, _Last, _Dest);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using uninitialized_copy_result = in_out_result<_In, _Out>;\r\n\r\n    class _Uninitialized_copy_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, _No_throw_forward_iterator _Out,\r\n            _No_throw_sentinel_for<_Out> _OSe>\r\n            requires constructible_from<iter_value_t<_Out>, iter_reference_t<_It>>\r\n        static uninitialized_copy_result<_It, _Out> operator()(_It _First1, _Se _Last1, _Out _First2, _OSe _Last2) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n            auto _UResult = _Uninitialized_copy_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First1)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last1)), _RANGES _Unwrap_iter<_OSe>(_STD move(_First2)),\r\n                _RANGES _Unwrap_sent<_Out>(_STD move(_Last2)));\r\n\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_First2, _STD move(_UResult.out));\r\n            return {_STD move(_First1), _STD move(_First2)};\r\n        }\r\n\r\n        template <input_range _Rng1, _No_throw_forward_range _Rng2>\r\n            requires constructible_from<range_value_t<_Rng2>, range_reference_t<_Rng1>>\r\n        static uninitialized_copy_result<borrowed_iterator_t<_Rng1>, borrowed_iterator_t<_Rng2>> operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2) {\r\n            auto _First1  = _RANGES begin(_Range1);\r\n            auto _UResult = _Uninitialized_copy_unchecked(_RANGES _Unwrap_range_iter<_Rng1>(_STD move(_First1)),\r\n                _Uend(_Range1), _Ubegin(_Range2), _Uend(_Range2));\r\n\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in));\r\n            return {_STD move(_First1), _RANGES _Rewrap_iterator(_Range2, _STD move(_UResult.out))};\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Out, class _OSe>\r\n        _NODISCARD static uninitialized_copy_result<_It, _Out> _Uninitialized_copy_unchecked(\r\n            _It _IFirst, _Se _ILast, _Out _OFirst, _OSe _OLast) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(_No_throw_forward_iterator<_Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(_No_throw_sentinel_for<_OSe, _Out>);\r\n            _STL_INTERNAL_STATIC_ASSERT(constructible_from<iter_value_t<_Out>, iter_reference_t<_It>>);\r\n\r\n            constexpr bool _Is_sized1  = sized_sentinel_for<_Se, _It>;\r\n            constexpr bool _Is_sized2  = sized_sentinel_for<_OSe, _Out>;\r\n            constexpr bool _Can_memcpy = _Iter_copy_cat<_It, _Out>::_Bitcopy_constructible\r\n                                      && _Sized_or_unreachable_sentinel_for<_Se, _It>\r\n                                      && _Sized_or_unreachable_sentinel_for<_OSe, _Out>;\r\n            if constexpr (_Can_memcpy && (_Is_sized1 || _Is_sized2)) {\r\n                if constexpr (_Is_sized1 && _Is_sized2) {\r\n                    return _RANGES _Copy_memcpy_common(_IFirst, _RANGES next(_IFirst, _STD move(_ILast)), _OFirst,\r\n                        _RANGES next(_OFirst, _STD move(_OLast)));\r\n                } else if constexpr (_Is_sized1) {\r\n                    const auto _Dist = _ILast - _IFirst;\r\n                    _STD _Contiguous_iter_verify(_OFirst, static_cast<iter_difference_t<_Out>>(_Dist));\r\n                    return _RANGES _Copy_memcpy_distance(_IFirst, _OFirst, _IFirst, _IFirst + _Dist);\r\n                } else {\r\n                    _STL_INTERNAL_STATIC_ASSERT(_Is_sized2);\r\n                    const auto _Dist = _OLast - _OFirst;\r\n                    _STD _Contiguous_iter_verify(_IFirst, static_cast<iter_difference_t<_It>>(_Dist));\r\n                    return _RANGES _Copy_memcpy_distance(_IFirst, _OFirst, _OFirst, _OFirst + _Dist);\r\n                }\r\n            } else {\r\n                if constexpr (_Can_memcpy) {\r\n                    // We were eligible for the memcpy optimization above, except for both sentinels being unreachable.\r\n                    // The following classic code is doomed, because no exceptions will end the infinite loop.\r\n                    // Following our usual pattern, let's emit a debug assertion, then run the loop anyways.\r\n                    _STL_ASSERT(false, \"Tried to std::uninitialized_copy() two ranges with unreachable sentinels\");\r\n                }\r\n\r\n                _Uninitialized_backout _Backout{_STD move(_OFirst)};\r\n\r\n                for (; _IFirst != _ILast && _Backout._Last != _OLast; ++_IFirst) {\r\n                    _Backout._Emplace_back(*_IFirst);\r\n                }\r\n\r\n                return {_STD move(_IFirst), _Backout._Release()};\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Uninitialized_copy_fn uninitialized_copy;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _InIt, class _Diff, class _NoThrowFwdIt>\r\n_NoThrowFwdIt uninitialized_copy_n(const _InIt _First, const _Diff _Count_raw, _NoThrowFwdIt _Dest) {\r\n    // copy [_First, _First + _Count) to [_Dest, ...)\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    if (_Count <= 0) {\r\n        return _Dest;\r\n    }\r\n\r\n    auto _UFirst = _STD _Get_unwrapped_n(_First, _Count);\r\n    auto _UDest  = _STD _Get_unwrapped_n(_Dest, _Count);\r\n    if constexpr (_Iter_copy_cat<decltype(_UFirst), decltype(_UDest)>::_Bitcopy_constructible) {\r\n        _UDest = _STD _Copy_memmove_n(_UFirst, static_cast<size_t>(_Count), _UDest);\r\n    } else {\r\n        _Uninitialized_backout<decltype(_UDest)> _Backout{_UDest};\r\n\r\n        for (; _Count > 0; --_Count, (void) ++_UFirst) {\r\n            _Backout._Emplace_back_deref(_UFirst);\r\n        }\r\n\r\n        _UDest = _Backout._Release();\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Diff, class _NoThrowFwdIt,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NoThrowFwdIt uninitialized_copy_n(_ExPo&&, const _FwdIt _First, const _Diff _Count_raw, _NoThrowFwdIt _Dest) noexcept\r\n/* terminates */ {\r\n    // copy [_First, _First + _Count) to raw [_Dest, ...)\r\n    // not parallelized at present\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _REQUIRE_PARALLEL_LVALUE_ITERATOR(_NoThrowFwdIt);\r\n\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    return _STD uninitialized_copy_n(_First, _Count, _Dest);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using uninitialized_copy_n_result = in_out_result<_In, _Out>;\r\n\r\n    struct _Uninitialized_copy_n_fn {\r\n        template <input_iterator _It, _No_throw_forward_iterator _Out, _No_throw_sentinel_for<_Out> _OSe>\r\n            requires constructible_from<iter_value_t<_Out>, iter_reference_t<_It>>\r\n        static uninitialized_copy_n_result<_It, _Out> operator()(\r\n            _It _First1, iter_difference_t<_It> _Count, _Out _First2, _OSe _Last2) {\r\n            if (_Count <= 0) {\r\n                return {_STD move(_First1), _STD move(_First2)};\r\n            }\r\n\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n            auto _IFirst = _STD _Get_unwrapped_n(_STD move(_First1), _Count);\r\n            auto _OFirst = _RANGES _Unwrap_iter<_OSe>(_STD move(_First2));\r\n            auto _OLast  = _RANGES _Unwrap_sent<_Out>(_STD move(_Last2));\r\n            if constexpr (_Iter_copy_cat<_It, _Out>::_Bitcopy_constructible\r\n                          && _Sized_or_unreachable_sentinel_for<_OSe, _Out>) {\r\n                if constexpr (sized_sentinel_for<_OSe, _Out>) {\r\n                    auto _UResult = _RANGES _Copy_memcpy_common(\r\n                        _IFirst, _IFirst + _Count, _OFirst, _RANGES next(_OFirst, _STD move(_OLast)));\r\n                    _IFirst = _STD move(_UResult.in);\r\n                    _OFirst = _STD move(_UResult.out);\r\n                } else {\r\n                    _STD _Contiguous_iter_verify(_IFirst, _Count);\r\n                    _STD _Contiguous_iter_verify(_OFirst, static_cast<iter_difference_t<_Out>>(_Count));\r\n                    auto _UResult = _RANGES _Copy_memcpy_count(_IFirst, _OFirst, static_cast<size_t>(_Count));\r\n                    _IFirst       = _STD move(_UResult.in);\r\n                    _OFirst       = _STD move(_UResult.out);\r\n                }\r\n            } else {\r\n                _Uninitialized_backout _Backout{_STD move(_OFirst)};\r\n\r\n                for (; _Count > 0 && _Backout._Last != _OLast; --_Count, (void) ++_IFirst) {\r\n                    _Backout._Emplace_back(*_IFirst);\r\n                }\r\n\r\n                _OFirst = _Backout._Release();\r\n            }\r\n\r\n            _STD _Seek_wrapped(_First1, _STD move(_IFirst));\r\n            _STD _Seek_wrapped(_First2, _STD move(_OFirst));\r\n            return {_STD move(_First1), _STD move(_First2)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Uninitialized_copy_n_fn uninitialized_copy_n;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _InIt, class _NoThrowFwdIt>\r\n_NoThrowFwdIt uninitialized_move(const _InIt _First, const _InIt _Last, _NoThrowFwdIt _Dest) {\r\n    // move [_First, _Last) to raw [_Dest, ...)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    const auto _UDest  = _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_InIt>(_UFirst, _ULast));\r\n    _STD _Seek_wrapped(_Dest, _STD _Uninitialized_move_unchecked(_UFirst, _ULast, _UDest));\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _NoThrowFwdIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NoThrowFwdIt uninitialized_move(_ExPo&&, const _FwdIt _First, const _FwdIt _Last, _NoThrowFwdIt _Dest) noexcept\r\n/* terminates */ {\r\n    // move [_First, _Last) to raw [_Dest, ...)\r\n    // not parallelized at present\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _REQUIRE_PARALLEL_LVALUE_ITERATOR(_NoThrowFwdIt);\r\n\r\n    return _STD uninitialized_move(_First, _Last, _Dest);\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    struct _Uninitialized_move_fn {\r\n        template <input_iterator _It, sentinel_for<_It> _Se, _No_throw_forward_iterator _Out,\r\n            _No_throw_sentinel_for<_Out> _OSe>\r\n            requires constructible_from<iter_value_t<_Out>, iter_rvalue_reference_t<_It>>\r\n        static uninitialized_move_result<_It, _Out> operator()(_It _First1, _Se _Last1, _Out _First2, _OSe _Last2) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n            auto _UResult = _RANGES _Uninitialized_move_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First1)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last1)), _RANGES _Unwrap_iter<_OSe>(_STD move(_First2)),\r\n                _RANGES _Unwrap_sent<_Out>(_STD move(_Last2)));\r\n\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_First2, _STD move(_UResult.out));\r\n            return {_STD move(_First1), _STD move(_First2)};\r\n        }\r\n\r\n        template <input_range _Rng1, _No_throw_forward_range _Rng2>\r\n            requires constructible_from<range_value_t<_Rng2>, range_rvalue_reference_t<_Rng1>>\r\n        static uninitialized_move_result<borrowed_iterator_t<_Rng1>, borrowed_iterator_t<_Rng2>> operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2) {\r\n            auto _First1  = _RANGES begin(_Range1);\r\n            auto _UResult = _RANGES _Uninitialized_move_unchecked(_RANGES _Unwrap_range_iter<_Rng1>(_STD move(_First1)),\r\n                _Uend(_Range1), _Ubegin(_Range2), _Uend(_Range2));\r\n\r\n            _STD _Seek_wrapped(_First1, _STD move(_UResult.in));\r\n            return {_STD move(_First1), _RANGES _Rewrap_iterator(_Range2, _STD move(_UResult.out))};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Uninitialized_move_fn uninitialized_move;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _InIt, class _Diff, class _NoThrowFwdIt>\r\npair<_InIt, _NoThrowFwdIt> uninitialized_move_n(_InIt _First, const _Diff _Count_raw, _NoThrowFwdIt _Dest) {\r\n    // move [_First, _First + _Count) to [_Dest, ...)\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    if (_Count <= 0) {\r\n        return {_First, _Dest};\r\n    }\r\n\r\n    auto _UFirst = _STD _Get_unwrapped_n(_First, _Count);\r\n    auto _UDest  = _STD _Get_unwrapped_n(_Dest, _Count);\r\n    if constexpr (_Iter_move_cat<decltype(_UFirst), decltype(_UDest)>::_Bitcopy_constructible) {\r\n        _UDest = _STD _Copy_memmove_n(_UFirst, static_cast<size_t>(_Count), _UDest);\r\n        _UFirst += _Count;\r\n    } else {\r\n        _Uninitialized_backout<decltype(_UDest)> _Backout{_UDest};\r\n\r\n        for (; _Count > 0; --_Count, (void) ++_UFirst) {\r\n            _Backout._Emplace_back_deref_move(_UFirst);\r\n        }\r\n\r\n        _UDest = _Backout._Release();\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    _STD _Seek_wrapped(_First, _UFirst);\r\n    return {_First, _Dest};\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Diff, class _NoThrowFwdIt,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\npair<_FwdIt, _NoThrowFwdIt> uninitialized_move_n(\r\n    _ExPo&&, const _FwdIt _First, const _Diff _Count_raw, _NoThrowFwdIt _Dest) noexcept /* terminates */ {\r\n    // move [_First, _First + _Count) to raw [_Dest, ...)\r\n    // not parallelized at present\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    _REQUIRE_PARALLEL_LVALUE_ITERATOR(_NoThrowFwdIt);\r\n\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    return _STD uninitialized_move_n(_First, _Count, _Dest);\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _NoThrowFwdIt, class _Tval, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid uninitialized_fill(_ExPo&&, const _NoThrowFwdIt _First, const _NoThrowFwdIt _Last, const _Tval& _Val) noexcept\r\n/* terminates */ {\r\n    // copy _Val throughout raw [_First, _Last)\r\n    // not parallelized at present\r\n    _REQUIRE_PARALLEL_LVALUE_ITERATOR(_NoThrowFwdIt);\r\n\r\n    _STD uninitialized_fill(_First, _Last, _Val);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using uninitialized_move_n_result = in_out_result<_In, _Out>;\r\n\r\n    struct _Uninitialized_move_n_fn {\r\n        template <input_iterator _It, _No_throw_forward_iterator _Out, _No_throw_sentinel_for<_Out> _OSe>\r\n            requires constructible_from<iter_value_t<_Out>, iter_rvalue_reference_t<_It>>\r\n        static uninitialized_move_n_result<_It, _Out> operator()(\r\n            _It _First1, iter_difference_t<_It> _Count, _Out _First2, _OSe _Last2) {\r\n            if (_Count <= 0) {\r\n                return {_STD move(_First1), _STD move(_First2)};\r\n            }\r\n\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n            auto _IFirst      = _STD _Get_unwrapped_n(_STD move(_First1), _Count);\r\n            auto _OFirst      = _RANGES _Unwrap_iter<_OSe>(_STD move(_First2));\r\n            const auto _OLast = _RANGES _Unwrap_sent<_Out>(_STD move(_Last2));\r\n            if constexpr (_Iter_move_cat<_It, _Out>::_Bitcopy_constructible\r\n                          && _Sized_or_unreachable_sentinel_for<_OSe, _Out>) {\r\n                if constexpr (sized_sentinel_for<_OSe, _Out>) {\r\n                    auto _UResult = _RANGES _Copy_memcpy_common(\r\n                        _IFirst, _IFirst + _Count, _OFirst, _RANGES next(_OFirst, _STD move(_OLast)));\r\n                    _IFirst = _STD move(_UResult.in);\r\n                    _OFirst = _STD move(_UResult.out);\r\n                } else {\r\n                    _STD _Contiguous_iter_verify(_IFirst, _Count);\r\n                    _STD _Contiguous_iter_verify(_OFirst, static_cast<iter_difference_t<_Out>>(_Count));\r\n                    auto _UResult = _RANGES _Copy_memcpy_count(_IFirst, _OFirst, static_cast<size_t>(_Count));\r\n                    _IFirst       = _STD move(_UResult.in);\r\n                    _OFirst       = _STD move(_UResult.out);\r\n                }\r\n            } else {\r\n                _Uninitialized_backout _Backout{_STD move(_OFirst)};\r\n\r\n                for (; _Count > 0 && _Backout._Last != _OLast; --_Count, (void) ++_IFirst) {\r\n                    _Backout._Emplace_back(_RANGES iter_move(_IFirst));\r\n                }\r\n\r\n                _OFirst = _Backout._Release();\r\n            }\r\n\r\n            _STD _Seek_wrapped(_First1, _STD move(_IFirst));\r\n            _STD _Seek_wrapped(_First2, _STD move(_OFirst));\r\n            return {_STD move(_First1), _STD move(_First2)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Uninitialized_move_n_fn uninitialized_move_n;\r\n\r\n    class _Uninitialized_fill_fn {\r\n    public:\r\n        template <_No_throw_forward_iterator _It, _No_throw_sentinel_for<_It> _Se, class _Ty>\r\n            requires constructible_from<iter_value_t<_It>, const _Ty&>\r\n        static _It operator()(_It _First, _Se _Last, const _Ty& _Val) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _Uninitialized_fill_unchecked(\r\n                _RANGES _Unwrap_iter<_Se>(_STD move(_First)), _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _Val);\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult));\r\n            return _First;\r\n        }\r\n\r\n        template <_No_throw_forward_range _Rng, class _Ty>\r\n            requires constructible_from<range_value_t<_Rng>, const _Ty&>\r\n        static borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, const _Ty& _Val) {\r\n            return _RANGES _Rewrap_iterator(\r\n                _Range, _Uninitialized_fill_unchecked(_Ubegin(_Range), _Uend(_Range), _Val));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Ty>\r\n        _NODISCARD static _It _Uninitialized_fill_unchecked(_It _OFirst, _Se _OLast, const _Ty& _Val) {\r\n            _STL_INTERNAL_STATIC_ASSERT(_No_throw_forward_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(_No_throw_sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(constructible_from<iter_value_t<_It>, const _Ty&>);\r\n\r\n            if constexpr (_Fill_memset_is_safe<_It, _Ty>) {\r\n                const auto _OFinal = _RANGES next(_OFirst, _STD move(_OLast));\r\n                _STD _Fill_memset(_OFirst, _Val, static_cast<size_t>(_OFinal - _OFirst));\r\n                return _OFinal;\r\n            } else {\r\n                if constexpr (_Fill_zero_memset_is_safe<_It, _Ty>) {\r\n                    if (_STD _Is_all_bits_zero(_Val)) {\r\n                        const auto _OFinal = _RANGES next(_OFirst, _STD move(_OLast));\r\n                        _STD _Fill_zero_memset(_OFirst, static_cast<size_t>(_OFinal - _OFirst));\r\n                        return _OFinal;\r\n                    }\r\n                }\r\n\r\n                _Uninitialized_backout _Backout{_STD move(_OFirst)};\r\n\r\n                while (_Backout._Last != _OLast) {\r\n                    _Backout._Emplace_back(_Val);\r\n                }\r\n\r\n                return _Backout._Release();\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Uninitialized_fill_fn uninitialized_fill;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _NoThrowFwdIt, class _Diff, class _Tval>\r\n_NoThrowFwdIt uninitialized_fill_n(_NoThrowFwdIt _First, const _Diff _Count_raw, const _Tval& _Val) {\r\n    // copy _Count copies of _Val to raw _First\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    if (_Count <= 0) {\r\n        return _First;\r\n    }\r\n\r\n    auto _UFirst = _STD _Get_unwrapped_n(_First, _Count);\r\n    if constexpr (_Fill_memset_is_safe<decltype(_UFirst), _Tval>) {\r\n        _STD _Fill_memset(_UFirst, _Val, static_cast<size_t>(_Count));\r\n        _UFirst += _Count;\r\n    } else {\r\n        if constexpr (_Fill_zero_memset_is_safe<decltype(_UFirst), _Tval>) {\r\n            if (_STD _Is_all_bits_zero(_Val)) {\r\n                _STD _Fill_zero_memset(_UFirst, static_cast<size_t>(_Count));\r\n                _STD _Seek_wrapped(_First, _UFirst + _Count);\r\n                return _First;\r\n            }\r\n        }\r\n\r\n        _Uninitialized_backout<decltype(_UFirst)> _Backout{_UFirst};\r\n\r\n        for (; _Count > 0; --_Count) {\r\n            _Backout._Emplace_back(_Val);\r\n        }\r\n\r\n        _UFirst = _Backout._Release();\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First, _UFirst);\r\n    return _First;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _NoThrowFwdIt, class _Diff, class _Tval,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NoThrowFwdIt uninitialized_fill_n(\r\n    _ExPo&&, const _NoThrowFwdIt _First, const _Diff _Count_raw, const _Tval& _Val) noexcept\r\n/* terminates */ {\r\n    // copy _Count copies of _Val to raw _First\r\n    // not parallelized at present\r\n    _REQUIRE_PARALLEL_LVALUE_ITERATOR(_NoThrowFwdIt);\r\n\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    return _STD uninitialized_fill_n(_First, _Count, _Val);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    struct _Uninitialized_fill_n_fn {\r\n        template <_No_throw_forward_iterator _It, class _Ty>\r\n            requires constructible_from<iter_value_t<_It>, const _Ty&>\r\n        static _It operator()(_It _First, iter_difference_t<_It> _Count, const _Ty& _Val) {\r\n            if (_Count <= 0) {\r\n                return _First;\r\n            }\r\n\r\n            auto _UFirst = _STD _Get_unwrapped_n(_STD move(_First), _Count);\r\n            if constexpr (_Fill_memset_is_safe<decltype(_UFirst), _Ty>) {\r\n                _STD _Fill_memset(_UFirst, _Val, static_cast<size_t>(_Count));\r\n                _STD _Seek_wrapped(_First, _UFirst + _Count);\r\n            } else {\r\n                if constexpr (_Fill_zero_memset_is_safe<decltype(_UFirst), _Ty>) {\r\n                    if (_STD _Is_all_bits_zero(_Val)) {\r\n                        _STD _Fill_zero_memset(_UFirst, static_cast<size_t>(_Count));\r\n                        _STD _Seek_wrapped(_First, _UFirst + _Count);\r\n                        return _First;\r\n                    }\r\n                }\r\n\r\n                _Uninitialized_backout _Backout{_STD move(_UFirst)};\r\n\r\n                for (; _Count > 0; --_Count) {\r\n                    _Backout._Emplace_back(_Val);\r\n                }\r\n\r\n                _STD _Seek_wrapped(_First, _Backout._Release());\r\n            }\r\n            return _First;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Uninitialized_fill_n_fn uninitialized_fill_n;\r\n\r\n    struct _Construct_at_fn {\r\n        template <class _Ty, class... _Types>\r\n            requires (!is_unbounded_array_v<_Ty>) && requires(_Ty* _Ptr, _Types&&... _Args) {\r\n                ::new (static_cast<void*>(_Ptr)) _Ty(static_cast<_Types &&>(_Args)...); // per LWG-3888\r\n            }\r\n        static constexpr _Ty* operator()(_Ty* _Location, _Types&&... _Args) noexcept(\r\n            noexcept(::new (static_cast<void*>(_Location)) _Ty(_STD forward<_Types>(_Args)...))) /* strengthened */ {\r\n#ifdef __EDG__\r\n            return _STD construct_at(_Location, _STD forward<_Types>(_Args)...);\r\n#else // ^^^ EDG / Other vvv\r\n            if constexpr (is_array_v<_Ty>) {\r\n                static_assert(sizeof...(_Types) == 0, \"The array is only allowed to be value-initialized by \"\r\n                                                      \"std::ranges::construct_at. (N5032 [specialized.construct]/2)\");\r\n#if defined(__clang__) // TRANSITION, LLVM-117294\r\n                ::new (static_cast<void*>(_Location)) _Ty();\r\n                return __builtin_launder(_Location); // per old resolution of LWG-3436\r\n#else // ^^^ workaround / no workaround vvv\r\n                _MSVC_CONSTEXPR return ::new (static_cast<void*>(_Location)) _Ty[1]();\r\n#endif // ^^^ no workaround ^^^\r\n            } else {\r\n                _MSVC_CONSTEXPR return ::new (static_cast<void*>(_Location)) _Ty(_STD forward<_Types>(_Args)...);\r\n            }\r\n#endif // ^^^ Other ^^^\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Construct_at_fn construct_at;\r\n\r\n    template <_No_throw_input_iterator _It, _No_throw_sentinel_for<_It> _Se>\r\n        requires destructible<iter_value_t<_It>>\r\n    _NODISCARD constexpr _It _Destroy_unchecked(_It _First, _Se _Last) noexcept;\r\n\r\n    struct _Destroy_at_fn {\r\n        template <destructible _Ty>\r\n        static constexpr void operator()(_Ty* const _Location) noexcept {\r\n            if constexpr (is_array_v<_Ty>) {\r\n                (void) _RANGES _Destroy_unchecked(_RANGES begin(*_Location), _RANGES end(*_Location));\r\n            } else {\r\n                _Location->~_Ty();\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Destroy_at_fn destroy_at;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _NoThrowFwdIt>\r\n_CONSTEXPR20 void destroy(const _NoThrowFwdIt _First, const _NoThrowFwdIt _Last) {\r\n    // destroy all elements in [_First, _Last)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    _STD _Destroy_range(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _NoThrowFwdIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid destroy(_ExPo&& _Exec, _NoThrowFwdIt _First, _NoThrowFwdIt _Last) noexcept; // terminates\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <_No_throw_input_iterator _It, _No_throw_sentinel_for<_It> _Se>\r\n        requires destructible<iter_value_t<_It>>\r\n    _NODISCARD constexpr _It _Destroy_unchecked(_It _First, _Se _Last) noexcept {\r\n        if (_STD is_constant_evaluated()) {\r\n            for (; _First != _Last; ++_First) {\r\n                _RANGES destroy_at(_STD addressof(*_First));\r\n            }\r\n        } else {\r\n            if constexpr (is_trivially_destructible_v<iter_value_t<_It>>) {\r\n                _RANGES advance(_First, _STD move(_Last));\r\n            } else {\r\n                for (; _First != _Last; ++_First) {\r\n                    _RANGES destroy_at(_STD addressof(*_First));\r\n                }\r\n            }\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    struct _Destroy_fn {\r\n        template <_No_throw_input_iterator _It, _No_throw_sentinel_for<_It> _Se>\r\n            requires destructible<iter_value_t<_It>>\r\n        static constexpr _It operator()(_It _First, _Se _Last) noexcept {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            _STD _Seek_wrapped(_First, _RANGES _Destroy_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                                           _RANGES _Unwrap_sent<_It>(_STD move(_Last))));\r\n            return _First;\r\n        }\r\n\r\n        template <_No_throw_input_range _Rng>\r\n            requires destructible<range_value_t<_Rng>>\r\n        static constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range) noexcept {\r\n            auto _First = _RANGES begin(_Range);\r\n            _STD _Seek_wrapped(\r\n                _First, _RANGES _Destroy_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range)));\r\n            return _First;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Destroy_fn destroy;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _NoThrowFwdIt, class _Diff>\r\n_CONSTEXPR20 _NoThrowFwdIt destroy_n(_NoThrowFwdIt _First, const _Diff _Count_raw) {\r\n    // destroy all elements in [_First, _First + _Count)\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    if (_Count <= 0) {\r\n        return _First;\r\n    }\r\n\r\n    auto _UFirst = _STD _Get_unwrapped_n(_First, _Count);\r\n#if _HAS_CXX20\r\n    if (_STD is_constant_evaluated()) {\r\n        for (; _Count > 0; --_Count, (void) ++_UFirst) {\r\n            _STD _Destroy_in_place(*_UFirst);\r\n        }\r\n    } else\r\n#endif // _HAS_CXX20\r\n    {\r\n        if constexpr (is_trivially_destructible_v<_Iter_value_t<_NoThrowFwdIt>>) {\r\n            _STD advance(_UFirst, _Count);\r\n        } else {\r\n            for (; _Count > 0; --_Count, (void) ++_UFirst) {\r\n                _STD _Destroy_in_place(*_UFirst);\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First, _UFirst);\r\n    return _First;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _NoThrowFwdIt, class _Diff, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NoThrowFwdIt destroy_n(_ExPo&& _Exec, _NoThrowFwdIt _First, _Diff _Count_raw) noexcept; // terminates\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    struct _Destroy_n_fn {\r\n        template <_No_throw_input_iterator _It>\r\n            requires destructible<iter_value_t<_It>>\r\n        static constexpr _It operator()(_It _First, iter_difference_t<_It> _Count) noexcept {\r\n            if (_Count <= 0) {\r\n                return _First;\r\n            }\r\n\r\n            auto _UFirst = _STD _Get_unwrapped_n(_STD move(_First), _Count);\r\n            if (_STD is_constant_evaluated()) {\r\n                do {\r\n                    _RANGES destroy_at(_STD addressof(*_UFirst));\r\n                    ++_UFirst;\r\n                    --_Count;\r\n                } while (_Count > 0);\r\n            } else {\r\n                if constexpr (is_trivially_destructible_v<iter_value_t<_It>>) {\r\n                    _RANGES advance(_UFirst, _Count);\r\n                } else {\r\n                    do {\r\n                        _RANGES destroy_at(_STD addressof(*_UFirst));\r\n                        ++_UFirst;\r\n                        --_Count;\r\n                    } while (_Count > 0);\r\n                }\r\n            }\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UFirst));\r\n            return _First;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Destroy_n_fn destroy_n;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _NoThrowFwdIt>\r\nvoid uninitialized_default_construct(const _NoThrowFwdIt _First, const _NoThrowFwdIt _Last) {\r\n    // default-initialize all elements in [_First, _Last)\r\n    using _Ty = remove_reference_t<_Iter_ref_t<_NoThrowFwdIt>>;\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    if constexpr (!is_trivially_default_constructible_v<_Ty>) {\r\n        _Uninitialized_backout _Backout{_STD _Get_unwrapped(_First)};\r\n\r\n        for (const auto _ULast = _STD _Get_unwrapped(_Last); _Backout._Last != _ULast; ++_Backout._Last) {\r\n            _STD _Default_construct_in_place(*_Backout._Last);\r\n        }\r\n\r\n        _Backout._Release();\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _NoThrowFwdIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid uninitialized_default_construct(_ExPo&& _Exec, _NoThrowFwdIt _First, _NoThrowFwdIt _Last) noexcept; // terminates\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Uninitialized_default_construct_fn {\r\n    public:\r\n        template <_No_throw_forward_iterator _It, _No_throw_sentinel_for<_It> _Se>\r\n            requires default_initializable<iter_value_t<_It>>\r\n        static _It operator()(_It _First, _Se _Last) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _Uninitialized_default_construct_unchecked(\r\n                _RANGES _Unwrap_iter<_Se>(_STD move(_First)), _RANGES _Unwrap_sent<_It>(_STD move(_Last)));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult));\r\n            return _First;\r\n        }\r\n\r\n        template <_No_throw_forward_range _Rng>\r\n            requires default_initializable<range_value_t<_Rng>>\r\n        static borrowed_iterator_t<_Rng> operator()(_Rng&& _Range) {\r\n            auto _UResult = _Uninitialized_default_construct_unchecked(_Ubegin(_Range), _Uend(_Range));\r\n\r\n            return _RANGES _Rewrap_iterator(_Range, _STD move(_UResult));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se>\r\n        _NODISCARD static _It _Uninitialized_default_construct_unchecked(_It _OFirst, const _Se _OLast) {\r\n            _STL_INTERNAL_STATIC_ASSERT(_No_throw_forward_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(_No_throw_sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(default_initializable<iter_value_t<_It>>);\r\n\r\n            using _Ty = remove_reference_t<iter_reference_t<_It>>;\r\n            if constexpr (is_trivially_default_constructible_v<_Ty>) {\r\n                _RANGES advance(_OFirst, _OLast);\r\n                return _OFirst;\r\n            } else {\r\n                _Uninitialized_backout _Backout{_STD move(_OFirst)};\r\n\r\n                for (; _Backout._Last != _OLast; ++_Backout._Last) {\r\n                    _STD _Default_construct_in_place(*_Backout._Last);\r\n                }\r\n\r\n                return _Backout._Release();\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Uninitialized_default_construct_fn uninitialized_default_construct;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _NoThrowFwdIt, class _Diff>\r\n_NoThrowFwdIt uninitialized_default_construct_n(_NoThrowFwdIt _First, const _Diff _Count_raw) {\r\n    // default-initialize all elements in [_First, _First + _Count)\r\n    using _Ty                      = _Iter_value_t<_NoThrowFwdIt>;\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    if (_Count <= 0) {\r\n        return _First;\r\n    }\r\n\r\n    if constexpr (is_trivially_default_constructible_v<_Ty>) {\r\n        _STD advance(_First, _Count);\r\n    } else {\r\n        _Uninitialized_backout _Backout{_STD _Get_unwrapped_n(_First, _Count)};\r\n\r\n        for (; _Count > 0; ++_Backout._Last, (void) --_Count) {\r\n            _STD _Default_construct_in_place(*_Backout._Last);\r\n        }\r\n\r\n        _STD _Seek_wrapped(_First, _Backout._Release());\r\n    }\r\n    return _First;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _NoThrowFwdIt, class _Diff, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NoThrowFwdIt uninitialized_default_construct_n(\r\n    _ExPo&& _Exec, _NoThrowFwdIt _First, _Diff _Count_raw) noexcept; // terminates\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    struct _Uninitialized_default_construct_n_fn {\r\n        template <_No_throw_forward_iterator _It>\r\n            requires default_initializable<iter_value_t<_It>>\r\n        static _It operator()(_It _First, iter_difference_t<_It> _Count) {\r\n            if (_Count <= 0) {\r\n                return _First;\r\n            }\r\n\r\n            using _Ty = remove_reference_t<iter_reference_t<_It>>;\r\n            if constexpr (is_trivially_default_constructible_v<_Ty>) {\r\n                _RANGES advance(_First, _Count);\r\n            } else {\r\n                _Uninitialized_backout _Backout{_STD _Get_unwrapped_n(_STD move(_First), _Count)};\r\n\r\n                for (; _Count > 0; --_Count, (void) ++_Backout._Last) {\r\n                    _STD _Default_construct_in_place(*_Backout._Last);\r\n                }\r\n\r\n                _STD _Seek_wrapped(_First, _Backout._Release());\r\n            }\r\n            return _First;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Uninitialized_default_construct_n_fn uninitialized_default_construct_n;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _NoThrowFwdIt>\r\nvoid uninitialized_value_construct(const _NoThrowFwdIt _First, const _NoThrowFwdIt _Last) {\r\n    // value-initialize all elements in [_First, _Last)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    if constexpr (_Use_memset_value_construct_v<_Unwrapped_t<const _NoThrowFwdIt&>>) {\r\n        _STD _Zero_range(_UFirst, _ULast);\r\n    } else {\r\n        _Uninitialized_backout _Backout{_UFirst};\r\n\r\n        while (_Backout._Last != _ULast) {\r\n            _Backout._Emplace_back();\r\n        }\r\n\r\n        _Backout._Release();\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _NoThrowFwdIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid uninitialized_value_construct(_ExPo&& _Exec, _NoThrowFwdIt _First, _NoThrowFwdIt _Last) noexcept; // terminates\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    class _Uninitialized_value_construct_fn {\r\n    public:\r\n        template <_No_throw_forward_iterator _It, _No_throw_sentinel_for<_It> _Se>\r\n            requires default_initializable<iter_value_t<_It>>\r\n        static _It operator()(_It _First, _Se _Last) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _Uninitialized_value_construct_unchecked(\r\n                _RANGES _Unwrap_iter<_Se>(_STD move(_First)), _RANGES _Unwrap_sent<_It>(_STD move(_Last)));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult));\r\n            return _First;\r\n        }\r\n\r\n        template <_No_throw_forward_range _Rng>\r\n            requires default_initializable<range_value_t<_Rng>>\r\n        static borrowed_iterator_t<_Rng> operator()(_Rng&& _Range) {\r\n            auto _UResult = _Uninitialized_value_construct_unchecked(_Ubegin(_Range), _Uend(_Range));\r\n\r\n            return _RANGES _Rewrap_iterator(_Range, _STD move(_UResult));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se>\r\n        _NODISCARD static _It _Uninitialized_value_construct_unchecked(_It _OFirst, _Se _OLast) {\r\n            _STL_INTERNAL_STATIC_ASSERT(_No_throw_forward_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(_No_throw_sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(default_initializable<iter_value_t<_It>>);\r\n\r\n            if constexpr (_Use_memset_value_construct_v<_It>) {\r\n                return _STD _Zero_range(_OFirst, _RANGES next(_OFirst, _STD move(_OLast)));\r\n            } else {\r\n                _Uninitialized_backout _Backout{_STD move(_OFirst)};\r\n\r\n                while (_Backout._Last != _OLast) {\r\n                    _Backout._Emplace_back();\r\n                }\r\n\r\n                return _Backout._Release();\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Uninitialized_value_construct_fn uninitialized_value_construct;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _NoThrowFwdIt, class _Diff>\r\n_NoThrowFwdIt uninitialized_value_construct_n(_NoThrowFwdIt _First, const _Diff _Count_raw) {\r\n    // value-initialize all elements in [_First, _First + _Count)\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    if (_Count <= 0) {\r\n        return _First;\r\n    }\r\n\r\n    _STD _Seek_wrapped(\r\n        _First, _STD _Uninitialized_value_construct_n_unchecked1(_STD _Get_unwrapped_n(_First, _Count), _Count));\r\n    return _First;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _NoThrowFwdIt, class _Diff, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NoThrowFwdIt uninitialized_value_construct_n(\r\n    _ExPo&& _Exec, _NoThrowFwdIt _First, _Diff _Count_raw) noexcept; // terminates\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    struct _Uninitialized_value_construct_n_fn {\r\n        template <_No_throw_forward_iterator _It>\r\n            requires default_initializable<iter_value_t<_It>>\r\n        static _It operator()(_It _First, iter_difference_t<_It> _Count) {\r\n            if (_Count <= 0) {\r\n                return _First;\r\n            }\r\n\r\n            auto _UFirst = _STD _Get_unwrapped_n(_STD move(_First), _Count);\r\n            if constexpr (_Use_memset_value_construct_v<_It>) {\r\n                _STD _Seek_wrapped(_First, _STD _Zero_range(_UFirst, _UFirst + _Count));\r\n            } else {\r\n                _Uninitialized_backout _Backout{_STD move(_UFirst)};\r\n\r\n                for (; _Count > 0; --_Count) {\r\n                    _Backout._Emplace_back();\r\n                }\r\n\r\n                _STD _Seek_wrapped(_First, _Backout._Release());\r\n            }\r\n            return _First;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Uninitialized_value_construct_n_fn uninitialized_value_construct_n;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _PtrTy>\r\n_NODISCARD void* _Voidify_unfancy(_PtrTy _Ptr) noexcept {\r\n    if constexpr (is_pointer_v<_PtrTy>) {\r\n        return _Ptr;\r\n    } else {\r\n        return _STD addressof(*_Ptr);\r\n    }\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_DEPRECATED_RAW_STORAGE_ITERATOR\r\n_EXPORT_STD template <class _OutIt, class _Ty>\r\nclass _CXX17_DEPRECATE_RAW_STORAGE_ITERATOR raw_storage_iterator { // wrap stores to raw buffer as output iterator\r\npublic:\r\n    using iterator_category = output_iterator_tag;\r\n    using value_type        = void;\r\n#if _HAS_CXX20\r\n    using difference_type = ptrdiff_t;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    using difference_type = void;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n    using pointer   = void;\r\n    using reference = void;\r\n\r\n    explicit raw_storage_iterator(_OutIt _First) : _Next(_First) {}\r\n\r\n    _NODISCARD raw_storage_iterator& operator*() { // pretend to return designated value\r\n        return *this;\r\n    }\r\n\r\n    raw_storage_iterator& operator=(const _Ty& _Val) { // construct value designated by stored iterator\r\n        _STD _Construct_in_place(const_cast<_Remove_cvref_t<decltype(*_Next)>&>(*_Next), _Val);\r\n        return *this;\r\n    }\r\n\r\n    raw_storage_iterator& operator=(_Ty&& _Val) { // construct value designated by stored iterator\r\n        _STD _Construct_in_place(const_cast<_Remove_cvref_t<decltype(*_Next)>&>(*_Next), _STD move(_Val));\r\n        return *this;\r\n    }\r\n\r\n    raw_storage_iterator& operator++() {\r\n        ++_Next;\r\n        return *this;\r\n    }\r\n\r\n    raw_storage_iterator operator++(int) {\r\n        raw_storage_iterator _Ans = *this;\r\n        ++_Next;\r\n        return _Ans;\r\n    }\r\n\r\n    _NODISCARD _OutIt base() const {\r\n        return _Next;\r\n    }\r\n\r\nprivate:\r\n    _OutIt _Next;\r\n};\r\n#endif // _HAS_DEPRECATED_RAW_STORAGE_ITERATOR\r\n\r\n#if _HAS_AUTO_PTR_ETC\r\n_EXPORT_STD template <class _Ty>\r\nclass auto_ptr;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct auto_ptr_ref { // proxy reference for auto_ptr copying\r\n    explicit auto_ptr_ref(_Ty* _Right) : _Ref(_Right) {}\r\n\r\n    _Ty* _Ref; // generic pointer to auto_ptr ptr\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass auto_ptr { // wrap an object pointer to ensure destruction\r\npublic:\r\n    using element_type = _Ty;\r\n\r\n    explicit auto_ptr(_Ty* _Ptr = nullptr) noexcept : _Myptr(_Ptr) {}\r\n\r\n    auto_ptr(auto_ptr& _Right) noexcept : _Myptr(_Right.release()) {}\r\n\r\n    auto_ptr(auto_ptr_ref<_Ty> _Right) noexcept {\r\n        _Ty* _Ptr   = _Right._Ref;\r\n        _Right._Ref = nullptr; // release old\r\n        _Myptr      = _Ptr; // reset this\r\n    }\r\n\r\n    template <class _Other>\r\n    operator auto_ptr<_Other>() noexcept { // convert to compatible auto_ptr\r\n        return auto_ptr<_Other>(*this);\r\n    }\r\n\r\n    template <class _Other>\r\n    operator auto_ptr_ref<_Other>() noexcept { // convert to compatible auto_ptr_ref\r\n        _Other* _Cvtptr = _Myptr; // test implicit conversion\r\n        auto_ptr_ref<_Other> _Ans(_Cvtptr);\r\n        _Myptr = nullptr; // pass ownership to auto_ptr_ref\r\n        return _Ans;\r\n    }\r\n\r\n    template <class _Other>\r\n    auto_ptr& operator=(auto_ptr<_Other>& _Right) noexcept {\r\n        reset(_Right.release());\r\n        return *this;\r\n    }\r\n\r\n    template <class _Other>\r\n    auto_ptr(auto_ptr<_Other>& _Right) noexcept : _Myptr(_Right.release()) {}\r\n\r\n    auto_ptr& operator=(auto_ptr& _Right) noexcept {\r\n        reset(_Right.release());\r\n        return *this;\r\n    }\r\n\r\n    auto_ptr& operator=(auto_ptr_ref<_Ty> _Right) noexcept {\r\n        _Ty* _Ptr   = _Right._Ref;\r\n        _Right._Ref = 0; // release old\r\n        reset(_Ptr); // set new\r\n        return *this;\r\n    }\r\n\r\n    ~auto_ptr() noexcept {\r\n        delete _Myptr;\r\n    }\r\n\r\n    _NODISCARD _Ty& operator*() const noexcept {\r\n        return *get();\r\n    }\r\n\r\n    _NODISCARD _Ty* operator->() const noexcept {\r\n        return get();\r\n    }\r\n\r\n    _NODISCARD _Ty* get() const noexcept {\r\n        return _Myptr;\r\n    }\r\n\r\n    _Ty* release() noexcept {\r\n        _Ty* _Tmp = _Myptr;\r\n        _Myptr    = nullptr;\r\n        return _Tmp;\r\n    }\r\n\r\n    void reset(_Ty* _Ptr = nullptr) noexcept { // destroy designated object and store new pointer\r\n        if (_Ptr != _Myptr) {\r\n            delete _Myptr;\r\n        }\r\n\r\n        _Myptr = _Ptr;\r\n    }\r\n\r\nprivate:\r\n    _Ty* _Myptr; // the wrapped object pointer\r\n};\r\n\r\ntemplate <>\r\nclass auto_ptr<void> {\r\npublic:\r\n    using element_type = void;\r\n};\r\n#endif // _HAS_AUTO_PTR_ETC\r\n\r\n_EXPORT_STD class _NODISCARD bad_weak_ptr : public exception {\r\n    // exception type for invalid use of expired weak_ptr object\r\npublic:\r\n    bad_weak_ptr() noexcept {}\r\n\r\n    _NODISCARD const char* __CLR_OR_THIS_CALL what() const noexcept override {\r\n        // return pointer to message string\r\n        return \"bad_weak_ptr\";\r\n    }\r\n};\r\n\r\n[[noreturn]] inline void _Throw_bad_weak_ptr() {\r\n    _THROW(bad_weak_ptr{});\r\n}\r\n\r\nclass __declspec(novtable) _Ref_count_base { // common code for reference counting\r\nprivate:\r\n#ifdef _M_CEE_PURE\r\n    // permanent workaround to avoid mentioning _purecall in msvcurt.lib, ptrustu.lib, or other support libs\r\n    virtual void _Destroy() noexcept {\r\n        _STL_REPORT_ERROR(\"_Ref_count_base base class member functions should not be called\");\r\n    }\r\n\r\n    virtual void _Delete_this() noexcept {\r\n        _STL_REPORT_ERROR(\"_Ref_count_base base class member functions should not be called\");\r\n    }\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n    virtual void _Destroy() noexcept     = 0; // destroy managed resource\r\n    virtual void _Delete_this() noexcept = 0; // destroy self\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\n    _Atomic_counter_t _Uses  = 1;\r\n    _Atomic_counter_t _Weaks = 1;\r\n\r\nprotected:\r\n    constexpr _Ref_count_base() noexcept = default; // non-atomic initializations\r\n\r\npublic:\r\n    _Ref_count_base(const _Ref_count_base&)            = delete;\r\n    _Ref_count_base& operator=(const _Ref_count_base&) = delete;\r\n\r\n    virtual ~_Ref_count_base() noexcept {} // TRANSITION, should be non-virtual\r\n\r\n    bool _Incref_nz() noexcept { // increment use count if not zero, return true if successful\r\n        auto& _Volatile_uses = reinterpret_cast<volatile long&>(_Uses);\r\n#ifdef _M_CEE_PURE\r\n        long _Count = *_Atomic_address_as<const long>(&_Volatile_uses);\r\n#else\r\n        long _Count = __iso_volatile_load32(reinterpret_cast<volatile int*>(&_Volatile_uses));\r\n#endif\r\n        while (_Count != 0) {\r\n            const long _Old_value = _INTRIN_RELAXED(_InterlockedCompareExchange)(&_Volatile_uses, _Count + 1, _Count);\r\n            if (_Old_value == _Count) {\r\n                return true;\r\n            }\r\n\r\n            _Count = _Old_value;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    void _Incref() noexcept { // increment use count\r\n        _MT_INCR(_Uses);\r\n    }\r\n\r\n    void _Incwref() noexcept { // increment weak reference count\r\n        _MT_INCR(_Weaks);\r\n    }\r\n\r\n    void _Decref() noexcept { // decrement use count\r\n        if (_MT_DECR(_Uses) == 0) {\r\n            _Destroy();\r\n            _Decwref();\r\n        }\r\n    }\r\n\r\n    void _Decwref() noexcept { // decrement weak reference count\r\n        if (_MT_DECR(_Weaks) == 0) {\r\n            _Delete_this();\r\n        }\r\n    }\r\n\r\n    long _Use_count() const noexcept {\r\n        return static_cast<long>(_Uses);\r\n    }\r\n\r\n    virtual void* _Get_deleter(const type_info&) const noexcept {\r\n        return nullptr;\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nclass _Ref_count : public _Ref_count_base { // handle reference counting for pointer without deleter\r\npublic:\r\n    explicit _Ref_count(_Ty* _Px) : _Ref_count_base(), _Ptr(_Px) {}\r\n\r\nprivate:\r\n    void _Destroy() noexcept override { // destroy managed resource\r\n        delete _Ptr;\r\n    }\r\n\r\n    void _Delete_this() noexcept override { // destroy self\r\n        delete this;\r\n    }\r\n\r\n    _Ty* _Ptr;\r\n};\r\n\r\ntemplate <class _Resource, class _Dx>\r\nclass _Ref_count_resource : public _Ref_count_base { // handle reference counting for object with deleter\r\npublic:\r\n    _Ref_count_resource(_Resource _Px, _Dx _Dt)\r\n        : _Ref_count_base(), _Mypair(_One_then_variadic_args_t{}, _STD move(_Dt), _Px) {}\r\n\r\n    ~_Ref_count_resource() noexcept override = default; // TRANSITION, should be non-virtual\r\n\r\n    void* _Get_deleter(const type_info& _Typeid) const noexcept override {\r\n#if _HAS_STATIC_RTTI\r\n        if (_Typeid == typeid(_Dx)) {\r\n            return const_cast<_Dx*>(_STD addressof(_Mypair._Get_first()));\r\n        }\r\n#else // ^^^ _HAS_STATIC_RTTI / !_HAS_STATIC_RTTI vvv\r\n        (void) _Typeid;\r\n#endif // ^^^ !_HAS_STATIC_RTTI ^^^\r\n\r\n        return nullptr;\r\n    }\r\n\r\nprivate:\r\n    void _Destroy() noexcept override { // destroy managed resource\r\n        _Mypair._Get_first()(_Mypair._Myval2);\r\n    }\r\n\r\n    void _Delete_this() noexcept override { // destroy self\r\n        delete this;\r\n    }\r\n\r\n    _Compressed_pair<_Dx, _Resource> _Mypair;\r\n};\r\n\r\ntemplate <class _Resource, class _Dx, class _Alloc>\r\nclass _Ref_count_resource_alloc : public _Ref_count_base {\r\n    // handle reference counting for object with deleter and allocator\r\npublic:\r\n    _Ref_count_resource_alloc(_Resource _Px, _Dx _Dt, const _Alloc& _Ax)\r\n        : _Ref_count_base(),\r\n          _Mypair(_One_then_variadic_args_t{}, _STD move(_Dt), _One_then_variadic_args_t{}, _Ax, _Px) {}\r\n\r\n    ~_Ref_count_resource_alloc() noexcept override = default; // TRANSITION, should be non-virtual\r\n\r\n    void* _Get_deleter(const type_info& _Typeid) const noexcept override {\r\n#if _HAS_STATIC_RTTI\r\n        if (_Typeid == typeid(_Dx)) {\r\n            return const_cast<_Dx*>(_STD addressof(_Mypair._Get_first()));\r\n        }\r\n#else // ^^^ _HAS_STATIC_RTTI / !_HAS_STATIC_RTTI vvv\r\n        (void) _Typeid;\r\n#endif // ^^^ !_HAS_STATIC_RTTI ^^^\r\n\r\n        return nullptr;\r\n    }\r\n\r\nprivate:\r\n    using _Myalty = _Rebind_alloc_t<_Alloc, _Ref_count_resource_alloc>;\r\n\r\n    void _Destroy() noexcept override { // destroy managed resource\r\n        _Mypair._Get_first()(_Mypair._Myval2._Myval2);\r\n    }\r\n\r\n    void _Delete_this() noexcept override { // destroy self\r\n        _Myalty _Al = _Mypair._Myval2._Get_first();\r\n        this->~_Ref_count_resource_alloc();\r\n        _STD _Deallocate_plain(_Al, this);\r\n    }\r\n\r\n    _Compressed_pair<_Dx, _Compressed_pair<_Myalty, _Resource>> _Mypair;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct default_delete;\r\n\r\n_EXPORT_STD template <class _Ty, class _Dx = default_delete<_Ty>>\r\nclass unique_ptr;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass shared_ptr;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass weak_ptr;\r\n\r\ntemplate <class _Yty, class = void>\r\nstruct _Can_enable_shared : false_type {}; // detect unambiguous and accessible inheritance from enable_shared_from_this\r\n\r\ntemplate <class _Yty>\r\nstruct _Can_enable_shared<_Yty, void_t<typename _Yty::_Esft_type>>\r\n    : is_convertible<remove_cv_t<_Yty>*, typename _Yty::_Esft_type*>::type {\r\n    // is_convertible is necessary to verify unambiguous inheritance\r\n};\r\n\r\nstruct _Exception_ptr_access;\r\n\r\ntemplate <class _Ty>\r\nclass _Ptr_base { // base class for shared_ptr and weak_ptr\r\npublic:\r\n    using element_type = remove_extent_t<_Ty>;\r\n\r\n    _NODISCARD long use_count() const noexcept {\r\n        return _Rep ? _Rep->_Use_count() : 0;\r\n    }\r\n\r\n    template <class _Ty2>\r\n    _NODISCARD bool owner_before(const _Ptr_base<_Ty2>& _Right) const noexcept { // compare addresses of manager objects\r\n        return _Rep < _Right._Rep;\r\n    }\r\n\r\n    _Ptr_base(const _Ptr_base&)            = delete;\r\n    _Ptr_base& operator=(const _Ptr_base&) = delete;\r\n\r\nprotected:\r\n    _NODISCARD element_type* get() const noexcept {\r\n        return _Ptr;\r\n    }\r\n\r\n    constexpr _Ptr_base() noexcept = default;\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n    ~_Ptr_base() noexcept {\r\n        const uintptr_t _Tombstone_value{_MSVC_STL_UINTPTR_TOMBSTONE_VALUE};\r\n        _Ptr = reinterpret_cast<element_type*>(_Tombstone_value);\r\n        _Rep = reinterpret_cast<_Ref_count_base*>(_Tombstone_value);\r\n    }\r\n#else // ^^^ _MSVC_STL_DESTRUCTOR_TOMBSTONES / !_MSVC_STL_DESTRUCTOR_TOMBSTONES vvv\r\n    ~_Ptr_base() = default;\r\n#endif // ^^^ !_MSVC_STL_DESTRUCTOR_TOMBSTONES ^^^\r\n\r\n    template <class _Ty2>\r\n    void _Move_construct_from(_Ptr_base<_Ty2>&& _Right) noexcept {\r\n        // implement shared_ptr's (converting) move ctor and weak_ptr's move ctor\r\n        _Ptr = _Right._Ptr;\r\n        _Rep = _Right._Rep;\r\n\r\n        _Right._Ptr = nullptr;\r\n        _Right._Rep = nullptr;\r\n    }\r\n\r\n    template <class _Ty2>\r\n    void _Copy_construct_from(const shared_ptr<_Ty2>& _Other) noexcept {\r\n        // implement shared_ptr's (converting) copy ctor\r\n        _Other._Incref();\r\n\r\n        _Ptr = _Other._Ptr;\r\n        _Rep = _Other._Rep;\r\n    }\r\n\r\n    template <class _Ty2>\r\n    void _Alias_construct_from(const shared_ptr<_Ty2>& _Other, element_type* _Px) noexcept {\r\n        // implement shared_ptr's aliasing ctor\r\n        _Other._Incref();\r\n\r\n        _Ptr = _Px;\r\n        _Rep = _Other._Rep;\r\n    }\r\n\r\n    template <class _Ty2>\r\n    void _Alias_move_construct_from(shared_ptr<_Ty2>&& _Other, element_type* _Px) noexcept {\r\n        // implement shared_ptr's aliasing move ctor\r\n        _Ptr = _Px;\r\n        _Rep = _Other._Rep;\r\n\r\n        _Other._Ptr = nullptr;\r\n        _Other._Rep = nullptr;\r\n    }\r\n\r\n    template <class _Ty0>\r\n    friend class weak_ptr; // specifically, weak_ptr::lock()\r\n\r\n    template <class _Ty2>\r\n    bool _Construct_from_weak(const weak_ptr<_Ty2>& _Other) noexcept {\r\n        // implement shared_ptr's ctor from weak_ptr, and weak_ptr::lock()\r\n        if (_Other._Rep && _Other._Rep->_Incref_nz()) {\r\n            _Ptr = _Other._Ptr;\r\n            _Rep = _Other._Rep;\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    void _Incref() const noexcept {\r\n        if (_Rep) {\r\n            _Rep->_Incref();\r\n        }\r\n    }\r\n\r\n    void _Decref() noexcept { // decrement reference count\r\n        if (_Rep) {\r\n            _Rep->_Decref();\r\n        }\r\n    }\r\n\r\n    void _Swap(_Ptr_base& _Right) noexcept { // swap pointers\r\n        _STD swap(_Ptr, _Right._Ptr);\r\n        _STD swap(_Rep, _Right._Rep);\r\n    }\r\n\r\n    template <class _Ty2>\r\n    void _Weakly_construct_from(const _Ptr_base<_Ty2>& _Other) noexcept { // implement weak_ptr's ctors\r\n        if (_Other._Rep) {\r\n            _Ptr = _Other._Ptr;\r\n            _Rep = _Other._Rep;\r\n            _Rep->_Incwref();\r\n        } else {\r\n            _STL_INTERNAL_CHECK(!_Ptr && !_Rep);\r\n        }\r\n    }\r\n\r\n    template <class _Ty2>\r\n    void _Weakly_convert_lvalue_avoiding_expired_conversions(const _Ptr_base<_Ty2>& _Other) noexcept {\r\n        // implement weak_ptr's copy converting ctor\r\n        if (_Other._Rep) {\r\n            _Rep = _Other._Rep; // always share ownership\r\n            _Rep->_Incwref();\r\n\r\n            if (_Rep->_Incref_nz()) {\r\n                _Ptr = _Other._Ptr; // keep resource alive during conversion, handling virtual inheritance\r\n                _Rep->_Decref();\r\n            } else {\r\n                _STL_INTERNAL_CHECK(!_Ptr);\r\n            }\r\n        } else {\r\n            _STL_INTERNAL_CHECK(!_Ptr && !_Rep);\r\n        }\r\n    }\r\n\r\n    template <class _Ty2>\r\n    void _Weakly_convert_rvalue_avoiding_expired_conversions(_Ptr_base<_Ty2>&& _Other) noexcept {\r\n        // implement weak_ptr's move converting ctor\r\n        _Rep        = _Other._Rep; // always transfer ownership\r\n        _Other._Rep = nullptr;\r\n\r\n        if (_Rep && _Rep->_Incref_nz()) {\r\n            _Ptr = _Other._Ptr; // keep resource alive during conversion, handling virtual inheritance\r\n            _Rep->_Decref();\r\n        } else {\r\n            _STL_INTERNAL_CHECK(!_Ptr);\r\n        }\r\n\r\n        _Other._Ptr = nullptr;\r\n    }\r\n\r\n    void _Incwref() const noexcept {\r\n        if (_Rep) {\r\n            _Rep->_Incwref();\r\n        }\r\n    }\r\n\r\n    void _Decwref() noexcept { // decrement weak reference count\r\n        if (_Rep) {\r\n            _Rep->_Decwref();\r\n        }\r\n    }\r\n\r\nprivate:\r\n    element_type* _Ptr{nullptr};\r\n    _Ref_count_base* _Rep{nullptr};\r\n\r\n    template <class _Ty0>\r\n    friend class _Ptr_base;\r\n\r\n    friend shared_ptr<_Ty>;\r\n\r\n    template <class _Ty0>\r\n    friend struct atomic;\r\n\r\n    friend _Exception_ptr_access;\r\n\r\n#if _HAS_STATIC_RTTI\r\n    template <class _Dx, class _Ty0>\r\n    friend _Dx* get_deleter(const shared_ptr<_Ty0>& _Sx) noexcept;\r\n#endif // _HAS_STATIC_RTTI\r\n};\r\n\r\ntemplate <class _Yty, class = void>\r\nstruct _Can_scalar_delete : false_type {};\r\ntemplate <class _Yty>\r\nstruct _Can_scalar_delete<_Yty, void_t<decltype(delete _STD declval<_Yty*>())>> : bool_constant<!is_void_v<_Yty>> {};\r\n\r\ntemplate <class _Yty, class = void>\r\nstruct _Can_array_delete : false_type {};\r\ntemplate <class _Yty>\r\nstruct _Can_array_delete<_Yty, void_t<decltype(delete[] _STD declval<_Yty*>())>> : true_type {};\r\n\r\ntemplate <class _Fx, class _Arg, class = void>\r\nstruct _Can_call_function_object : false_type {};\r\ntemplate <class _Fx, class _Arg>\r\nstruct _Can_call_function_object<_Fx, _Arg, void_t<decltype(_STD declval<_Fx>()(_STD declval<_Arg>()))>> : true_type {};\r\n\r\ntemplate <class _Yty, class _Ty, class = void>\r\nstruct _SP_convertible : is_convertible<_Yty*, _Ty*>::type {};\r\n\r\ntemplate <class _Yty, class _Uty, class _Void>\r\nstruct _SP_convertible<_Yty, _Uty[], _Void> : false_type {};\r\ntemplate <class _Yty, class _Uty>\r\nstruct _SP_convertible<_Yty, _Uty[], void_t<_Yty (*)[]>> : is_convertible<_Yty (*)[], _Uty (*)[]>::type {};\r\n\r\ntemplate <class _Yty, class _Uty, size_t _Ext, class _Void>\r\nstruct _SP_convertible<_Yty, _Uty[_Ext], _Void> : false_type {};\r\ntemplate <class _Yty, class _Uty, size_t _Ext>\r\nstruct _SP_convertible<_Yty, _Uty[_Ext], void_t<_Yty (*)[_Ext]>>\r\n    : is_convertible<_Yty (*)[_Ext], _Uty (*)[_Ext]>::type {};\r\n\r\ntemplate <class _Yty, class _Ty>\r\nstruct _SP_pointer_compatible : is_convertible<_Yty*, _Ty*>::type {\r\n    // N4950 [util.smartptr.shared.general]/6 \"a pointer type Y* is said to be compatible\r\n    // with a pointer type T* when either Y* is convertible to T* ...\"\r\n};\r\ntemplate <class _Uty, size_t _Ext>\r\nstruct _SP_pointer_compatible<_Uty[_Ext], _Uty[]> : true_type {\r\n    // N4950 [util.smartptr.shared.general]/6 \"... or Y is U[N] and T is cv U[].\"\r\n};\r\ntemplate <class _Uty, size_t _Ext>\r\nstruct _SP_pointer_compatible<_Uty[_Ext], const _Uty[]> : true_type {\r\n    // N4950 [util.smartptr.shared.general]/6 \"... or Y is U[N] and T is cv U[].\"\r\n};\r\ntemplate <class _Uty, size_t _Ext>\r\nstruct _SP_pointer_compatible<_Uty[_Ext], volatile _Uty[]> : true_type {\r\n    // N4950 [util.smartptr.shared.general]/6 \"... or Y is U[N] and T is cv U[].\"\r\n};\r\ntemplate <class _Uty, size_t _Ext>\r\nstruct _SP_pointer_compatible<_Uty[_Ext], const volatile _Uty[]> : true_type {\r\n    // N4950 [util.smartptr.shared.general]/6 \"... or Y is U[N] and T is cv U[].\"\r\n};\r\n\r\ntemplate <class _Ux>\r\nstruct _Temporary_owner {\r\n    _Ux* _Ptr;\r\n\r\n    explicit _Temporary_owner(_Ux* const _Ptr_) noexcept : _Ptr(_Ptr_) {}\r\n    _Temporary_owner(const _Temporary_owner&)            = delete;\r\n    _Temporary_owner& operator=(const _Temporary_owner&) = delete;\r\n    ~_Temporary_owner() {\r\n        delete _Ptr;\r\n    }\r\n};\r\n\r\ntemplate <class _UxptrOrNullptr, class _Dx>\r\nstruct _Temporary_owner_del {\r\n    _UxptrOrNullptr _Ptr;\r\n    _Dx& _Dt;\r\n    bool _Call_deleter = true;\r\n\r\n    explicit _Temporary_owner_del(const _UxptrOrNullptr _Ptr_, _Dx& _Dt_) noexcept : _Ptr(_Ptr_), _Dt(_Dt_) {}\r\n    _Temporary_owner_del(const _Temporary_owner_del&)            = delete;\r\n    _Temporary_owner_del& operator=(const _Temporary_owner_del&) = delete;\r\n    ~_Temporary_owner_del() {\r\n        if (_Call_deleter) {\r\n            _Dt(_Ptr);\r\n        }\r\n    }\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty>\r\nconcept _Not_builtin_array = !is_array_v<_Ty>;\r\n\r\ntemplate <class _Ty>\r\nconcept _Bounded_builtin_array = is_bounded_array_v<_Ty>;\r\n\r\ntemplate <class _Ty>\r\nconcept _Unbounded_builtin_array = is_unbounded_array_v<_Ty>;\r\n\r\ntemplate <class _Ty>\r\nconcept _Not_unbounded_builtin_array = !is_unbounded_array_v<_Ty>;\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass shared_ptr : public _Ptr_base<_Ty> { // class for reference counted resource management\r\nprivate:\r\n    using _Mybase = _Ptr_base<_Ty>;\r\n\r\npublic:\r\n    using typename _Mybase::element_type;\r\n\r\n#if _HAS_CXX17\r\n    using weak_type = weak_ptr<_Ty>;\r\n#endif // _HAS_CXX17\r\n\r\n    constexpr shared_ptr() noexcept = default;\r\n\r\n    constexpr shared_ptr(nullptr_t) noexcept {} // construct empty shared_ptr\r\n\r\n    template <class _Ux,\r\n        enable_if_t<conjunction_v<conditional_t<is_array_v<_Ty>, _Can_array_delete<_Ux>, _Can_scalar_delete<_Ux>>,\r\n                        _SP_convertible<_Ux, _Ty>>,\r\n            int> = 0>\r\n    explicit shared_ptr(_Ux* _Px) { // construct shared_ptr object that owns _Px\r\n        if constexpr (is_array_v<_Ty>) {\r\n            _Setpd(_Px, default_delete<_Ux[]>{});\r\n        } else {\r\n            _Temporary_owner<_Ux> _Owner(_Px);\r\n            _Set_ptr_rep_and_enable_shared(_Owner._Ptr, new _Ref_count<_Ux>(_Owner._Ptr));\r\n            _Owner._Ptr = nullptr;\r\n        }\r\n    }\r\n\r\n    template <class _Ux, class _Dx,\r\n        enable_if_t<conjunction_v<is_move_constructible<_Dx>, _Can_call_function_object<_Dx&, _Ux*&>,\r\n                        _SP_convertible<_Ux, _Ty>>,\r\n            int> = 0>\r\n    shared_ptr(_Ux* _Px, _Dx _Dt) { // construct with _Px, deleter\r\n        _Setpd(_Px, _STD move(_Dt));\r\n    }\r\n\r\n    template <class _Ux, class _Dx, class _Alloc,\r\n        enable_if_t<conjunction_v<is_move_constructible<_Dx>, _Can_call_function_object<_Dx&, _Ux*&>,\r\n                        _SP_convertible<_Ux, _Ty>>,\r\n            int> = 0>\r\n    shared_ptr(_Ux* _Px, _Dx _Dt, _Alloc _Ax) { // construct with _Px, deleter, allocator\r\n        _Setpda(_Px, _STD move(_Dt), _Ax);\r\n    }\r\n\r\n    template <class _Dx,\r\n        enable_if_t<conjunction_v<is_move_constructible<_Dx>, _Can_call_function_object<_Dx&, nullptr_t&>>, int> = 0>\r\n    shared_ptr(nullptr_t, _Dx _Dt) { // construct with nullptr, deleter\r\n        _Setpd(nullptr, _STD move(_Dt));\r\n    }\r\n\r\n    template <class _Dx, class _Alloc,\r\n        enable_if_t<conjunction_v<is_move_constructible<_Dx>, _Can_call_function_object<_Dx&, nullptr_t&>>, int> = 0>\r\n    shared_ptr(nullptr_t, _Dx _Dt, _Alloc _Ax) { // construct with nullptr, deleter, allocator\r\n        _Setpda(nullptr, _STD move(_Dt), _Ax);\r\n    }\r\n\r\n    template <class _Ty2>\r\n    shared_ptr(const shared_ptr<_Ty2>& _Right, element_type* _Px) noexcept {\r\n        // construct shared_ptr object that aliases _Right\r\n        this->_Alias_construct_from(_Right, _Px);\r\n    }\r\n\r\n    template <class _Ty2>\r\n    shared_ptr(shared_ptr<_Ty2>&& _Right, element_type* _Px) noexcept {\r\n        // move construct shared_ptr object that aliases _Right\r\n        this->_Alias_move_construct_from(_STD move(_Right), _Px);\r\n    }\r\n\r\n    shared_ptr(const shared_ptr& _Other) noexcept { // construct shared_ptr object that owns same resource as _Other\r\n        this->_Copy_construct_from(_Other);\r\n    }\r\n\r\n    template <class _Ty2, enable_if_t<_SP_pointer_compatible<_Ty2, _Ty>::value, int> = 0>\r\n    shared_ptr(const shared_ptr<_Ty2>& _Other) noexcept {\r\n        // construct shared_ptr object that owns same resource as _Other\r\n        this->_Copy_construct_from(_Other);\r\n    }\r\n\r\n    shared_ptr(shared_ptr&& _Right) noexcept { // construct shared_ptr object that takes resource from _Right\r\n        this->_Move_construct_from(_STD move(_Right));\r\n    }\r\n\r\n    template <class _Ty2, enable_if_t<_SP_pointer_compatible<_Ty2, _Ty>::value, int> = 0>\r\n    shared_ptr(shared_ptr<_Ty2>&& _Right) noexcept { // construct shared_ptr object that takes resource from _Right\r\n        this->_Move_construct_from(_STD move(_Right));\r\n    }\r\n\r\n    template <class _Ty2, enable_if_t<_SP_pointer_compatible<_Ty2, _Ty>::value, int> = 0>\r\n    explicit shared_ptr(const weak_ptr<_Ty2>& _Other) { // construct shared_ptr object that owns resource *_Other\r\n        if (!this->_Construct_from_weak(_Other)) {\r\n            _Throw_bad_weak_ptr();\r\n        }\r\n    }\r\n\r\n#if _HAS_AUTO_PTR_ETC\r\n    template <class _Ty2, enable_if_t<is_convertible_v<_Ty2*, _Ty*>, int> = 0>\r\n    shared_ptr(auto_ptr<_Ty2>&& _Other) { // construct shared_ptr object that owns *_Other.get()\r\n        _Ty2* _Px = _Other.get();\r\n        _Set_ptr_rep_and_enable_shared(_Px, new _Ref_count<_Ty2>(_Px));\r\n        _Other.release();\r\n    }\r\n#endif // _HAS_AUTO_PTR_ETC\r\n\r\n    template <class _Ux, class _Dx,\r\n        enable_if_t<conjunction_v<_SP_pointer_compatible<_Ux, _Ty>,\r\n                        is_convertible<typename unique_ptr<_Ux, _Dx>::pointer, element_type*>>,\r\n            int> = 0>\r\n    shared_ptr(unique_ptr<_Ux, _Dx>&& _Other) {\r\n        using _Fancy_t   = typename unique_ptr<_Ux, _Dx>::pointer;\r\n        using _Raw_t     = typename unique_ptr<_Ux, _Dx>::element_type*;\r\n        using _Deleter_t = conditional_t<is_reference_v<_Dx>, decltype(_STD ref(_Other.get_deleter())), _Dx>;\r\n\r\n        const _Fancy_t _Fancy = _Other.get();\r\n\r\n        if (_Fancy) {\r\n            const _Raw_t _Raw = _Fancy;\r\n            const auto _Rx =\r\n                new _Ref_count_resource<_Fancy_t, _Deleter_t>(_Fancy, _STD forward<_Dx>(_Other.get_deleter()));\r\n            _Set_ptr_rep_and_enable_shared(_Raw, _Rx);\r\n            _Other.release();\r\n        }\r\n    }\r\n\r\n    ~shared_ptr() noexcept { // release resource\r\n        this->_Decref();\r\n    }\r\n\r\n    shared_ptr& operator=(const shared_ptr& _Right) noexcept {\r\n        shared_ptr(_Right).swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Ty2, enable_if_t<_SP_pointer_compatible<_Ty2, _Ty>::value, int> = 0>\r\n    shared_ptr& operator=(const shared_ptr<_Ty2>& _Right) noexcept {\r\n        shared_ptr(_Right).swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    shared_ptr& operator=(shared_ptr&& _Right) noexcept { // take resource from _Right\r\n        shared_ptr(_STD move(_Right)).swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Ty2, enable_if_t<_SP_pointer_compatible<_Ty2, _Ty>::value, int> = 0>\r\n    shared_ptr& operator=(shared_ptr<_Ty2>&& _Right) noexcept { // take resource from _Right\r\n        shared_ptr(_STD move(_Right)).swap(*this);\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_AUTO_PTR_ETC\r\n    template <class _Ty2, enable_if_t<is_convertible_v<_Ty2*, _Ty*>, int> = 0>\r\n    shared_ptr& operator=(auto_ptr<_Ty2>&& _Right) {\r\n        shared_ptr(_STD move(_Right)).swap(*this);\r\n        return *this;\r\n    }\r\n#endif // _HAS_AUTO_PTR_ETC\r\n\r\n    template <class _Ux, class _Dx,\r\n        enable_if_t<conjunction_v<_SP_pointer_compatible<_Ux, _Ty>,\r\n                        is_convertible<typename unique_ptr<_Ux, _Dx>::pointer, element_type*>>,\r\n            int> = 0>\r\n    shared_ptr& operator=(unique_ptr<_Ux, _Dx>&& _Right) { // move from unique_ptr\r\n        shared_ptr(_STD move(_Right)).swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    void swap(shared_ptr& _Other) noexcept {\r\n        this->_Swap(_Other);\r\n    }\r\n\r\n    void reset() noexcept { // release resource and convert to empty shared_ptr object\r\n        shared_ptr().swap(*this);\r\n    }\r\n\r\n    template <class _Ux,\r\n        enable_if_t<conjunction_v<conditional_t<is_array_v<_Ty>, _Can_array_delete<_Ux>, _Can_scalar_delete<_Ux>>,\r\n                        _SP_convertible<_Ux, _Ty>>,\r\n            int> = 0>\r\n    void reset(_Ux* _Px) { // release, take ownership of _Px\r\n        shared_ptr(_Px).swap(*this);\r\n    }\r\n\r\n    template <class _Ux, class _Dx,\r\n        enable_if_t<conjunction_v<is_move_constructible<_Dx>, _Can_call_function_object<_Dx&, _Ux*&>,\r\n                        _SP_convertible<_Ux, _Ty>>,\r\n            int> = 0>\r\n    void reset(_Ux* _Px, _Dx _Dt) { // release, take ownership of _Px, with deleter _Dt\r\n        shared_ptr(_Px, _Dt).swap(*this);\r\n    }\r\n\r\n    template <class _Ux, class _Dx, class _Alloc,\r\n        enable_if_t<conjunction_v<is_move_constructible<_Dx>, _Can_call_function_object<_Dx&, _Ux*&>,\r\n                        _SP_convertible<_Ux, _Ty>>,\r\n            int> = 0>\r\n    void reset(_Ux* _Px, _Dx _Dt, _Alloc _Ax) { // release, take ownership of _Px, with deleter _Dt, allocator _Ax\r\n        shared_ptr(_Px, _Dt, _Ax).swap(*this);\r\n    }\r\n\r\n    using _Mybase::get;\r\n\r\n    template <class _Ty2 = _Ty, enable_if_t<!disjunction_v<is_array<_Ty2>, is_void<_Ty2>>, int> = 0>\r\n    _NODISCARD _Ty2& operator*() const noexcept {\r\n        return *get();\r\n    }\r\n\r\n    template <class _Ty2 = _Ty, enable_if_t<!is_array_v<_Ty2>, int> = 0>\r\n    _NODISCARD _Ty2* operator->() const noexcept {\r\n        return get();\r\n    }\r\n\r\n    template <class _Ty2 = _Ty, class _Elem = element_type, enable_if_t<is_array_v<_Ty2>, int> = 0>\r\n    _NODISCARD _Elem& operator[](ptrdiff_t _Idx) const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_SHARED_PTR_ARRAY || _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (extent_v<_Ty> != 0) {\r\n            _STL_VERIFY(\r\n                _Idx >= 0 && static_cast<size_t>(_Idx) < extent_v<_Ty>, \"shared_ptr<T[N]> subscript out of range\");\r\n        } else {\r\n            _STL_VERIFY(_Idx >= 0, \"shared_ptr<T[]> subscript out of range\");\r\n        }\r\n#endif // _MSVC_STL_HARDENING_SHARED_PTR_ARRAY || _ITERATOR_DEBUG_LEVEL != 0\r\n        return get()[_Idx];\r\n    }\r\n\r\n#if _HAS_DEPRECATED_SHARED_PTR_UNIQUE\r\n    _CXX17_DEPRECATE_SHARED_PTR_UNIQUE _NODISCARD bool unique() const noexcept {\r\n        // return true if no other shared_ptr object owns this resource\r\n        return this->use_count() == 1;\r\n    }\r\n#endif // _HAS_DEPRECATED_SHARED_PTR_UNIQUE\r\n\r\n    explicit operator bool() const noexcept {\r\n        return get() != nullptr;\r\n    }\r\n\r\nprivate:\r\n    template <class _UxptrOrNullptr, class _Dx>\r\n    void _Setpd(const _UxptrOrNullptr _Px, _Dx _Dt) { // take ownership of _Px, deleter _Dt\r\n        _Temporary_owner_del<_UxptrOrNullptr, _Dx> _Owner(_Px, _Dt);\r\n        _Set_ptr_rep_and_enable_shared(\r\n            _Owner._Ptr, new _Ref_count_resource<_UxptrOrNullptr, _Dx>(_Owner._Ptr, _STD move(_Dt)));\r\n        _Owner._Call_deleter = false;\r\n    }\r\n\r\n    template <class _UxptrOrNullptr, class _Dx, class _Alloc>\r\n    void _Setpda(const _UxptrOrNullptr _Px, _Dx _Dt, _Alloc _Ax) { // take ownership of _Px, deleter _Dt, allocator _Ax\r\n        using _Alref_alloc = _Rebind_alloc_t<_Alloc, _Ref_count_resource_alloc<_UxptrOrNullptr, _Dx, _Alloc>>;\r\n\r\n        _Temporary_owner_del<_UxptrOrNullptr, _Dx> _Owner(_Px, _Dt);\r\n        _Alref_alloc _Alref(_Ax);\r\n        _Alloc_construct_ptr<_Alref_alloc> _Constructor(_Alref);\r\n        _Constructor._Allocate();\r\n        _STD _Construct_in_place(*_Constructor._Ptr, _Owner._Ptr, _STD move(_Dt), _Ax);\r\n        _Set_ptr_rep_and_enable_shared(_Owner._Ptr, _STD _Unfancy(_Constructor._Ptr));\r\n        _Constructor._Ptr    = nullptr;\r\n        _Owner._Call_deleter = false;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    template <_Not_builtin_array _Ty0, class... _Types>\r\n    friend shared_ptr<_Ty0> make_shared(_Types&&... _Args);\r\n\r\n    template <_Not_builtin_array _Ty0, class _Alloc, class... _Types>\r\n    friend shared_ptr<_Ty0> allocate_shared(const _Alloc& _Al_arg, _Types&&... _Args);\r\n\r\n    template <_Bounded_builtin_array _Ty0>\r\n    friend shared_ptr<_Ty0> make_shared();\r\n\r\n    template <_Bounded_builtin_array _Ty0, class _Alloc>\r\n    friend shared_ptr<_Ty0> allocate_shared(const _Alloc& _Al_arg);\r\n\r\n    template <_Bounded_builtin_array _Ty0>\r\n    friend shared_ptr<_Ty0> make_shared(const remove_extent_t<_Ty0>& _Val);\r\n\r\n    template <_Bounded_builtin_array _Ty0, class _Alloc>\r\n    friend shared_ptr<_Ty0> allocate_shared(const _Alloc& _Al_arg, const remove_extent_t<_Ty0>& _Val);\r\n\r\n    template <_Not_unbounded_builtin_array _Ty0>\r\n    friend shared_ptr<_Ty0> make_shared_for_overwrite();\r\n\r\n    template <_Not_unbounded_builtin_array _Ty0, class _Alloc>\r\n    friend shared_ptr<_Ty0> allocate_shared_for_overwrite(const _Alloc& _Al_arg);\r\n\r\n    template <class _Ty0, class... _ArgTypes>\r\n    friend shared_ptr<_Ty0> _Make_shared_unbounded_array(size_t _Count, const _ArgTypes&... _Args);\r\n\r\n    template <bool _IsForOverwrite, class _Ty0, class _Alloc, class... _ArgTypes>\r\n    friend shared_ptr<_Ty0> _Allocate_shared_unbounded_array(\r\n        const _Alloc& _Al, size_t _Count, const _ArgTypes&... _Args);\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    template <class _Ty0, class... _Types>\r\n    friend shared_ptr<_Ty0> make_shared(_Types&&... _Args);\r\n\r\n    template <class _Ty0, class _Alloc, class... _Types>\r\n    friend shared_ptr<_Ty0> allocate_shared(const _Alloc& _Al_arg, _Types&&... _Args);\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    template <class _Ux>\r\n    void _Set_ptr_rep_and_enable_shared(_Ux* const _Px, _Ref_count_base* const _Rx) noexcept { // take ownership of _Px\r\n        this->_Ptr = _Px;\r\n        this->_Rep = _Rx;\r\n        if constexpr (conjunction_v<negation<is_array<_Ty>>, negation<is_volatile<_Ux>>, _Can_enable_shared<_Ux>>) {\r\n            if (_Px && _Px->_Wptr.expired()) {\r\n                _Px->_Wptr = shared_ptr<remove_cv_t<_Ux>>(*this, const_cast<remove_cv_t<_Ux>*>(_Px));\r\n            }\r\n        }\r\n    }\r\n\r\n    void _Set_ptr_rep_and_enable_shared(nullptr_t, _Ref_count_base* const _Rx) noexcept { // take ownership of nullptr\r\n        this->_Ptr = nullptr;\r\n        this->_Rep = _Rx;\r\n    }\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Ty>\r\nshared_ptr(weak_ptr<_Ty>) -> shared_ptr<_Ty>;\r\n\r\ntemplate <class _Ty, class _Dx>\r\nshared_ptr(unique_ptr<_Ty, _Dx>) -> shared_ptr<_Ty>;\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD bool operator==(const shared_ptr<_Ty1>& _Left, const shared_ptr<_Ty2>& _Right) noexcept {\r\n    return _Left.get() == _Right.get();\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD strong_ordering operator<=>(const shared_ptr<_Ty1>& _Left, const shared_ptr<_Ty2>& _Right) noexcept {\r\n    return _Left.get() <=> _Right.get();\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ty1, class _Ty2>\r\n_NODISCARD bool operator!=(const shared_ptr<_Ty1>& _Left, const shared_ptr<_Ty2>& _Right) noexcept {\r\n    return _Left.get() != _Right.get();\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n_NODISCARD bool operator<(const shared_ptr<_Ty1>& _Left, const shared_ptr<_Ty2>& _Right) noexcept {\r\n    return _Left.get() < _Right.get();\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n_NODISCARD bool operator>=(const shared_ptr<_Ty1>& _Left, const shared_ptr<_Ty2>& _Right) noexcept {\r\n    return _Left.get() >= _Right.get();\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n_NODISCARD bool operator>(const shared_ptr<_Ty1>& _Left, const shared_ptr<_Ty2>& _Right) noexcept {\r\n    return _Left.get() > _Right.get();\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n_NODISCARD bool operator<=(const shared_ptr<_Ty1>& _Left, const shared_ptr<_Ty2>& _Right) noexcept {\r\n    return _Left.get() <= _Right.get();\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD bool operator==(const shared_ptr<_Ty>& _Left, nullptr_t) noexcept {\r\n    return _Left.get() == nullptr;\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD strong_ordering operator<=>(const shared_ptr<_Ty>& _Left, nullptr_t) noexcept {\r\n    return _Left.get() <=> static_cast<shared_ptr<_Ty>::element_type*>(nullptr);\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ty>\r\n_NODISCARD bool operator==(nullptr_t, const shared_ptr<_Ty>& _Right) noexcept {\r\n    return nullptr == _Right.get();\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD bool operator!=(const shared_ptr<_Ty>& _Left, nullptr_t) noexcept {\r\n    return _Left.get() != nullptr;\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD bool operator!=(nullptr_t, const shared_ptr<_Ty>& _Right) noexcept {\r\n    return nullptr != _Right.get();\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD bool operator<(const shared_ptr<_Ty>& _Left, nullptr_t) noexcept {\r\n    return _Left.get() < static_cast<typename shared_ptr<_Ty>::element_type*>(nullptr);\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD bool operator<(nullptr_t, const shared_ptr<_Ty>& _Right) noexcept {\r\n    return static_cast<typename shared_ptr<_Ty>::element_type*>(nullptr) < _Right.get();\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD bool operator>=(const shared_ptr<_Ty>& _Left, nullptr_t) noexcept {\r\n    return _Left.get() >= static_cast<typename shared_ptr<_Ty>::element_type*>(nullptr);\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD bool operator>=(nullptr_t, const shared_ptr<_Ty>& _Right) noexcept {\r\n    return static_cast<typename shared_ptr<_Ty>::element_type*>(nullptr) >= _Right.get();\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD bool operator>(const shared_ptr<_Ty>& _Left, nullptr_t) noexcept {\r\n    return _Left.get() > static_cast<typename shared_ptr<_Ty>::element_type*>(nullptr);\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD bool operator>(nullptr_t, const shared_ptr<_Ty>& _Right) noexcept {\r\n    return static_cast<typename shared_ptr<_Ty>::element_type*>(nullptr) > _Right.get();\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD bool operator<=(const shared_ptr<_Ty>& _Left, nullptr_t) noexcept {\r\n    return _Left.get() <= static_cast<typename shared_ptr<_Ty>::element_type*>(nullptr);\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD bool operator<=(nullptr_t, const shared_ptr<_Ty>& _Right) noexcept {\r\n    return static_cast<typename shared_ptr<_Ty>::element_type*>(nullptr) <= _Right.get();\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Ty>\r\nbasic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Out, const shared_ptr<_Ty>& _Px) {\r\n    // write contained pointer to stream\r\n    return _Out << _Px.get();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid swap(shared_ptr<_Ty>& _Left, shared_ptr<_Ty>& _Right) noexcept {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD shared_ptr<_Ty1> static_pointer_cast(const shared_ptr<_Ty2>& _Other) noexcept {\r\n    // static_cast for shared_ptr that properly respects the reference count control block\r\n    const auto _Ptr = static_cast<typename shared_ptr<_Ty1>::element_type*>(_Other.get());\r\n    return shared_ptr<_Ty1>(_Other, _Ptr);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD shared_ptr<_Ty1> static_pointer_cast(shared_ptr<_Ty2>&& _Other) noexcept {\r\n    // static_cast for shared_ptr that properly respects the reference count control block\r\n    const auto _Ptr = static_cast<typename shared_ptr<_Ty1>::element_type*>(_Other.get());\r\n    return shared_ptr<_Ty1>(_STD move(_Other), _Ptr);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD shared_ptr<_Ty1> const_pointer_cast(const shared_ptr<_Ty2>& _Other) noexcept {\r\n    // const_cast for shared_ptr that properly respects the reference count control block\r\n    const auto _Ptr = const_cast<typename shared_ptr<_Ty1>::element_type*>(_Other.get());\r\n    return shared_ptr<_Ty1>(_Other, _Ptr);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD shared_ptr<_Ty1> const_pointer_cast(shared_ptr<_Ty2>&& _Other) noexcept {\r\n    // const_cast for shared_ptr that properly respects the reference count control block\r\n    const auto _Ptr = const_cast<typename shared_ptr<_Ty1>::element_type*>(_Other.get());\r\n    return shared_ptr<_Ty1>(_STD move(_Other), _Ptr);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD shared_ptr<_Ty1> reinterpret_pointer_cast(const shared_ptr<_Ty2>& _Other) noexcept {\r\n    // reinterpret_cast for shared_ptr that properly respects the reference count control block\r\n    const auto _Ptr = reinterpret_cast<typename shared_ptr<_Ty1>::element_type*>(_Other.get());\r\n    return shared_ptr<_Ty1>(_Other, _Ptr);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD shared_ptr<_Ty1> reinterpret_pointer_cast(shared_ptr<_Ty2>&& _Other) noexcept {\r\n    // reinterpret_cast for shared_ptr that properly respects the reference count control block\r\n    const auto _Ptr = reinterpret_cast<typename shared_ptr<_Ty1>::element_type*>(_Other.get());\r\n    return shared_ptr<_Ty1>(_STD move(_Other), _Ptr);\r\n}\r\n\r\n#ifdef _CPPRTTI\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD shared_ptr<_Ty1> dynamic_pointer_cast(const shared_ptr<_Ty2>& _Other) noexcept {\r\n    // dynamic_cast for shared_ptr that properly respects the reference count control block\r\n    const auto _Ptr = dynamic_cast<typename shared_ptr<_Ty1>::element_type*>(_Other.get());\r\n\r\n    if (_Ptr) {\r\n        return shared_ptr<_Ty1>(_Other, _Ptr);\r\n    }\r\n\r\n    return {};\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD shared_ptr<_Ty1> dynamic_pointer_cast(shared_ptr<_Ty2>&& _Other) noexcept {\r\n    // dynamic_cast for shared_ptr that properly respects the reference count control block\r\n    const auto _Ptr = dynamic_cast<typename shared_ptr<_Ty1>::element_type*>(_Other.get());\r\n\r\n    if (_Ptr) {\r\n        return shared_ptr<_Ty1>(_STD move(_Other), _Ptr);\r\n    }\r\n\r\n    return {};\r\n}\r\n#else // ^^^ defined(_CPPRTTI) / !defined(_CPPRTTI) vvv\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\nshared_ptr<_Ty1> dynamic_pointer_cast(const shared_ptr<_Ty2>&) noexcept = delete; // requires /GR option\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\nshared_ptr<_Ty1> dynamic_pointer_cast(shared_ptr<_Ty2>&&) noexcept = delete; // requires /GR option\r\n#endif // ^^^ !defined(_CPPRTTI) ^^^\r\n\r\n#if _HAS_STATIC_RTTI\r\n_EXPORT_STD template <class _Dx, class _Ty>\r\n_NODISCARD _Dx* get_deleter(const shared_ptr<_Ty>& _Sx) noexcept {\r\n    // return pointer to shared_ptr's deleter object if its type is _Dx\r\n    if (_Sx._Rep) {\r\n        return static_cast<_Dx*>(_Sx._Rep->_Get_deleter(typeid(_Dx)));\r\n    }\r\n\r\n    return nullptr;\r\n}\r\n#else // ^^^ _HAS_STATIC_RTTI / !_HAS_STATIC_RTTI vvv\r\n_EXPORT_STD template <class _Dx, class _Ty>\r\n_Dx* get_deleter(const shared_ptr<_Ty>&) noexcept = delete; // requires static RTTI\r\n#endif // ^^^ !_HAS_STATIC_RTTI ^^^\r\n\r\n#if _HAS_CXX20\r\nstruct _For_overwrite_tag {\r\n    explicit _For_overwrite_tag() = default;\r\n};\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Ty>\r\nclass _Ref_count_obj2 : public _Ref_count_base { // handle reference counting for object in control block, no allocator\r\npublic:\r\n    template <class... _Types>\r\n    explicit _Ref_count_obj2(_Types&&... _Args) : _Ref_count_base() {\r\n#if _HAS_CXX20\r\n        if constexpr (sizeof...(_Types) == 1 && (is_same_v<_For_overwrite_tag, remove_cvref_t<_Types>> && ...)) {\r\n            _STD _Default_construct_in_place(_Storage._Value);\r\n            ((void) _Args, ...);\r\n        } else\r\n#endif // _HAS_CXX20\r\n        {\r\n            _STD _Construct_in_place(_Storage._Value, _STD forward<_Types>(_Args)...);\r\n        }\r\n    }\r\n\r\n    ~_Ref_count_obj2() noexcept override { // TRANSITION, should be non-virtual\r\n        // nothing to do, _Storage._Value was already destroyed in _Destroy\r\n\r\n        // N4950 [class.dtor]/7:\r\n        // \"A defaulted destructor for a class X is defined as deleted if:\r\n        // X is a union-like class that has a variant member with a non-trivial destructor\"\r\n    }\r\n\r\n    union {\r\n        _Wrap<remove_cv_t<_Ty>> _Storage;\r\n    };\r\n\r\nprivate:\r\n    void _Destroy() noexcept override { // destroy managed resource\r\n        _STD _Destroy_in_place(_Storage._Value);\r\n    }\r\n\r\n    void _Delete_this() noexcept override { // destroy self\r\n        delete this;\r\n    }\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <size_t _Align>\r\nstruct _Alignas_storage_unit {\r\n    alignas(_Align) char _Space[_Align];\r\n};\r\n\r\nenum class _Check_overflow : bool { _Nope, _Yes };\r\n\r\ntemplate <class _Refc, _Check_overflow _Check>\r\n_NODISCARD size_t _Calculate_bytes_for_flexible_array(const size_t _Count) noexcept(_Check == _Check_overflow::_Nope) {\r\n    constexpr size_t _Align = alignof(_Refc);\r\n\r\n    size_t _Bytes = sizeof(_Refc); // contains storage for one element\r\n\r\n    if (_Count > 1) {\r\n        constexpr size_t _Element_size = sizeof(typename _Refc::_Element_type);\r\n\r\n        size_t _Extra_bytes;\r\n\r\n        if constexpr (_Check == _Check_overflow::_Yes) {\r\n            _Extra_bytes = _Get_size_of_n<_Element_size>(_Count - 1); // check multiplication overflow\r\n\r\n            if (_Extra_bytes > static_cast<size_t>(-1) - _Bytes - (_Align - 1)) { // assume worst case adjustment\r\n                _Throw_bad_array_new_length(); // addition overflow\r\n            }\r\n        } else {\r\n            _Extra_bytes = _Element_size * (_Count - 1);\r\n        }\r\n\r\n        _Bytes += _Extra_bytes;\r\n\r\n        _Bytes = (_Bytes + _Align - 1) & ~(_Align - 1);\r\n    }\r\n\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n    using _Storage = _Alignas_storage_unit<_Align>;\r\n    _STL_INTERNAL_CHECK(_Bytes % sizeof(_Storage) == 0);\r\n#endif // _ENABLE_STL_INTERNAL_CHECK\r\n\r\n    return _Bytes;\r\n}\r\n\r\ntemplate <class _Refc>\r\n_NODISCARD _Refc* _Allocate_flexible_array(const size_t _Count) {\r\n    const size_t _Bytes = _Calculate_bytes_for_flexible_array<_Refc, _Check_overflow::_Yes>(_Count);\r\n#ifdef __cpp_aligned_new\r\n    constexpr size_t _Align = alignof(_Refc);\r\n    if constexpr (_Align > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n        return static_cast<_Refc*>(::operator new(_Bytes, align_val_t{_Align}));\r\n    } else\r\n#endif // defined(__cpp_aligned_new)\r\n    {\r\n        return static_cast<_Refc*>(::operator new(_Bytes));\r\n    }\r\n}\r\n\r\ntemplate <class _Refc>\r\nvoid _Deallocate_flexible_array(_Refc* const _Ptr) noexcept {\r\n#ifdef __cpp_aligned_new\r\n    constexpr size_t _Align = alignof(_Refc);\r\n    if constexpr (_Align > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n        ::operator delete(static_cast<void*>(_Ptr), align_val_t{_Align});\r\n    } else\r\n#endif // defined(__cpp_aligned_new)\r\n    {\r\n        ::operator delete(static_cast<void*>(_Ptr));\r\n    }\r\n}\r\n\r\ntemplate <class _NoThrowIt>\r\nstruct _NODISCARD _Uninitialized_rev_destroying_backout {\r\n    // struct to undo partially constructed ranges in _Uninitialized_xxx algorithms\r\n    _NoThrowIt _First;\r\n    _NoThrowIt _Last;\r\n\r\n    explicit _Uninitialized_rev_destroying_backout(_NoThrowIt _Dest) noexcept : _First(_Dest), _Last(_Dest) {}\r\n\r\n    _Uninitialized_rev_destroying_backout(const _Uninitialized_rev_destroying_backout&)            = delete;\r\n    _Uninitialized_rev_destroying_backout& operator=(const _Uninitialized_rev_destroying_backout&) = delete;\r\n\r\n    ~_Uninitialized_rev_destroying_backout() {\r\n        while (_Last != _First) {\r\n            --_Last;\r\n            _STD destroy_at(_STD addressof(*_Last));\r\n        }\r\n    }\r\n\r\n    template <class... _Types>\r\n    void _Emplace_back(_Types&&... _Vals) { // construct a new element at *_Last and increment\r\n        _STD _Construct_in_place(*_Last, _STD forward<_Types>(_Vals)...);\r\n        ++_Last;\r\n    }\r\n\r\n    void _Emplace_back_for_overwrite() {\r\n        _STD _Default_construct_in_place(*_Last);\r\n        ++_Last;\r\n    }\r\n\r\n    _NoThrowIt _Release() noexcept { // suppress any exception handling backout and return _Last\r\n        _First = _Last;\r\n        return _Last;\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nvoid _Reverse_destroy_multidimensional_n(_Ty* const _Arr, size_t _Size) noexcept {\r\n    while (_Size > 0) {\r\n        --_Size;\r\n        if constexpr (is_array_v<_Ty>) {\r\n            _STD _Reverse_destroy_multidimensional_n(_Arr[_Size], extent_v<_Ty>);\r\n        } else {\r\n            _STD _Destroy_in_place(_Arr[_Size]);\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\nstruct _NODISCARD _Reverse_destroy_multidimensional_n_guard {\r\n    _Ty* _Target;\r\n    size_t _Index;\r\n\r\n    ~_Reverse_destroy_multidimensional_n_guard() {\r\n        if (_Target) {\r\n            _STD _Reverse_destroy_multidimensional_n(_Target, _Index);\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Ty, size_t _Size>\r\nvoid _Uninitialized_copy_multidimensional(const _Ty (&_In)[_Size], _Ty (&_Out)[_Size]) {\r\n    using _Item = remove_all_extents_t<_Ty>;\r\n    if constexpr (conjunction_v<is_trivially_copy_constructible<_Item>, is_trivially_destructible<_Item>>) {\r\n        _STD _Copy_memmove_n(_In, _Size, _Out);\r\n    } else if constexpr (is_array_v<_Ty>) {\r\n        _Reverse_destroy_multidimensional_n_guard<_Ty> _Guard{_Out, 0};\r\n        for (size_t& _Idx = _Guard._Index; _Idx < _Size; ++_Idx) {\r\n            _STD _Uninitialized_copy_multidimensional(_In[_Idx], _Out[_Idx]);\r\n        }\r\n        _Guard._Target = nullptr;\r\n    } else {\r\n        _Uninitialized_rev_destroying_backout _Backout{_Out};\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Backout._Emplace_back(_In[_Idx]);\r\n        }\r\n        _Backout._Release();\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\nvoid _Uninitialized_value_construct_multidimensional_n(_Ty* const _Out, const size_t _Size) {\r\n    using _Item = remove_all_extents_t<_Ty>;\r\n    if constexpr (_Use_memset_value_construct_v<_Item*>) {\r\n        _STD _Zero_range(_Out, _Out + _Size);\r\n    } else if constexpr (is_array_v<_Ty>) {\r\n        _Reverse_destroy_multidimensional_n_guard<_Ty> _Guard{_Out, 0};\r\n        for (size_t& _Idx = _Guard._Index; _Idx < _Size; ++_Idx) {\r\n            _STD _Uninitialized_value_construct_multidimensional_n(_Out[_Idx], extent_v<_Ty>);\r\n        }\r\n        _Guard._Target = nullptr;\r\n    } else {\r\n        _Uninitialized_rev_destroying_backout _Backout{_Out};\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Backout._Emplace_back();\r\n        }\r\n        _Backout._Release();\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\nvoid _Uninitialized_default_construct_multidimensional_n(_Ty* const _Out, const size_t _Size) {\r\n    if constexpr (!is_trivially_default_constructible_v<_Ty>) {\r\n        if constexpr (is_array_v<_Ty>) {\r\n            _Reverse_destroy_multidimensional_n_guard<_Ty> _Guard{_Out, 0};\r\n            for (size_t& _Idx = _Guard._Index; _Idx < _Size; ++_Idx) {\r\n                _STD _Uninitialized_default_construct_multidimensional_n(_Out[_Idx], extent_v<_Ty>);\r\n            }\r\n            _Guard._Target = nullptr;\r\n        } else {\r\n            _Uninitialized_rev_destroying_backout _Backout{_Out};\r\n            for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n                _Backout._Emplace_back_for_overwrite();\r\n            }\r\n            _Backout._Release();\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\nvoid _Uninitialized_fill_multidimensional_n(_Ty* const _Out, const size_t _Size, const _Ty& _Val) {\r\n    if constexpr (is_array_v<_Ty>) {\r\n        _Reverse_destroy_multidimensional_n_guard<_Ty> _Guard{_Out, 0};\r\n        for (size_t& _Idx = _Guard._Index; _Idx < _Size; ++_Idx) {\r\n            _STD _Uninitialized_copy_multidimensional(_Val, _Out[_Idx]); // intentionally copy, not fill\r\n        }\r\n        _Guard._Target = nullptr;\r\n    } else if constexpr (_Fill_memset_is_safe<_Ty*, _Ty>) {\r\n        _STD _Fill_memset(_Out, _Val, _Size);\r\n    } else {\r\n        if constexpr (_Fill_zero_memset_is_safe<_Ty*, _Ty>) {\r\n            if (_STD _Is_all_bits_zero(_Val)) {\r\n                _STD _Fill_zero_memset(_Out, _Size);\r\n                return;\r\n            }\r\n        }\r\n        _Uninitialized_rev_destroying_backout _Backout{_Out};\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Backout._Emplace_back(_Val);\r\n        }\r\n        _Backout._Release();\r\n    }\r\n}\r\n\r\ntemplate <class _Ty, bool = is_trivially_destructible_v<remove_extent_t<_Ty>>>\r\nclass _Ref_count_unbounded_array : public _Ref_count_base {\r\n    // handle reference counting for unbounded array with trivial destruction in control block, no allocator\r\npublic:\r\n    static_assert(is_unbounded_array_v<_Ty>);\r\n\r\n    using _Element_type = remove_extent_t<_Ty>;\r\n\r\n    explicit _Ref_count_unbounded_array(const size_t _Count) : _Ref_count_base() {\r\n        _STD _Uninitialized_value_construct_multidimensional_n(_Get_ptr(), _Count);\r\n    }\r\n\r\n    template <class _Arg>\r\n    explicit _Ref_count_unbounded_array(const size_t _Count, const _Arg& _Val) : _Ref_count_base() {\r\n        if constexpr (is_same_v<_For_overwrite_tag, _Arg>) {\r\n            _STD _Uninitialized_default_construct_multidimensional_n(_Get_ptr(), _Count);\r\n        } else {\r\n            _STD _Uninitialized_fill_multidimensional_n(_Get_ptr(), _Count, _Val);\r\n        }\r\n    }\r\n\r\n    _NODISCARD auto _Get_ptr() noexcept {\r\n        return _STD addressof(_Storage._Value);\r\n    }\r\n\r\nprivate:\r\n    union {\r\n        _Wrap<remove_cv_t<_Element_type>> _Storage; // flexible array must be last member\r\n    };\r\n\r\n    ~_Ref_count_unbounded_array() noexcept override { // TRANSITION, should be non-virtual\r\n        // nothing to do, _Ty is trivially destructible\r\n\r\n        // See N4950 [class.dtor]/7.\r\n    }\r\n\r\n    void _Destroy() noexcept override { // destroy managed resource\r\n        // nothing to do, _Ty is trivially destructible\r\n    }\r\n\r\n    void _Delete_this() noexcept override { // destroy self\r\n        this->~_Ref_count_unbounded_array();\r\n        _STD _Deallocate_flexible_array(this);\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nclass _Ref_count_unbounded_array<_Ty, false> : public _Ref_count_base {\r\n    // handle reference counting for unbounded array with non-trivial destruction in control block, no allocator\r\npublic:\r\n    static_assert(is_unbounded_array_v<_Ty>);\r\n\r\n    using _Element_type = remove_extent_t<_Ty>;\r\n\r\n    explicit _Ref_count_unbounded_array(const size_t _Count) : _Ref_count_base(), _Size(_Count) {\r\n        _STD _Uninitialized_value_construct_multidimensional_n(_Get_ptr(), _Size);\r\n    }\r\n\r\n    template <class _Arg>\r\n    explicit _Ref_count_unbounded_array(const size_t _Count, const _Arg& _Val) : _Ref_count_base(), _Size(_Count) {\r\n        if constexpr (is_same_v<_For_overwrite_tag, _Arg>) {\r\n            _STD _Uninitialized_default_construct_multidimensional_n(_Get_ptr(), _Size);\r\n        } else {\r\n            _STD _Uninitialized_fill_multidimensional_n(_Get_ptr(), _Size, _Val);\r\n        }\r\n    }\r\n\r\n    _NODISCARD auto _Get_ptr() noexcept {\r\n        return _STD addressof(_Storage._Value);\r\n    }\r\n\r\nprivate:\r\n    size_t _Size;\r\n\r\n    union {\r\n        _Wrap<remove_cv_t<_Element_type>> _Storage; // flexible array must be last member\r\n    };\r\n\r\n    ~_Ref_count_unbounded_array() noexcept override { // TRANSITION, should be non-virtual\r\n        // nothing to do, _Storage was already destroyed in _Destroy\r\n\r\n        // See N4950 [class.dtor]/7.\r\n    }\r\n\r\n    void _Destroy() noexcept override { // destroy managed resource\r\n        _STD _Reverse_destroy_multidimensional_n(_Get_ptr(), _Size);\r\n    }\r\n\r\n    void _Delete_this() noexcept override { // destroy self\r\n        this->~_Ref_count_unbounded_array();\r\n        _STD _Deallocate_flexible_array(this);\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nclass _Ref_count_bounded_array : public _Ref_count_base {\r\n    // handle reference counting for bounded array in control block, no allocator\r\npublic:\r\n    static_assert(is_bounded_array_v<_Ty>);\r\n\r\n    _Ref_count_bounded_array() : _Ref_count_base(), _Storage() {} // value-initializing _Storage is necessary here\r\n\r\n    template <class _Arg>\r\n    explicit _Ref_count_bounded_array(const _Arg& _Val) : _Ref_count_base() { // don't value-initialize _Storage\r\n        if constexpr (is_same_v<_For_overwrite_tag, _Arg>) {\r\n            _STD _Uninitialized_default_construct_multidimensional_n(_Storage._Value, extent_v<_Ty>);\r\n        } else {\r\n            _STD _Uninitialized_fill_multidimensional_n(_Storage._Value, extent_v<_Ty>, _Val);\r\n        }\r\n    }\r\n\r\n    union {\r\n        _Wrap<remove_cv_t<_Ty>> _Storage;\r\n    };\r\n\r\nprivate:\r\n    ~_Ref_count_bounded_array() noexcept override { // TRANSITION, should be non-virtual\r\n        // nothing to do, _Storage was already destroyed in _Destroy\r\n\r\n        // See N4950 [class.dtor]/7.\r\n    }\r\n\r\n    void _Destroy() noexcept override { // destroy managed resource\r\n        // not _Storage._Value as _Ty is an array type (not a class type or a scalar type),\r\n        // and thus cannot be used as a pseudo-destructor (N4950 [expr.prim.id.dtor]).\r\n        _STD _Destroy_in_place(_Storage);\r\n    }\r\n\r\n    void _Delete_this() noexcept override { // destroy self\r\n        delete this;\r\n    }\r\n};\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Ty, class _Alloc>\r\nclass _Ref_count_obj_alloc3 : public _Ebco_base<_Rebind_alloc_t<_Alloc, _Ty>>, public _Ref_count_base {\r\n    // handle reference counting for object in control block, allocator\r\nprivate:\r\n    static_assert(is_same_v<_Ty, remove_cv_t<_Ty>>, \"allocate_shared should remove_cv_t\");\r\n\r\n    using _Rebound = _Rebind_alloc_t<_Alloc, _Ty>;\r\n\r\npublic:\r\n    template <class... _Types>\r\n    explicit _Ref_count_obj_alloc3(const _Alloc& _Al_arg, _Types&&... _Args)\r\n        : _Ebco_base<_Rebound>(_Al_arg), _Ref_count_base() {\r\n#if _HAS_CXX20 && defined(_ENABLE_STL_INTERNAL_CHECK)\r\n        if constexpr (sizeof...(_Types) == 1) {\r\n            // allocate_shared_for_overwrite should use another type for the control block\r\n            _STL_INTERNAL_STATIC_ASSERT(!(is_same_v<_For_overwrite_tag, remove_cvref_t<_Types>> && ...));\r\n        }\r\n#endif // _HAS_CXX20 && defined(_ENABLE_STL_INTERNAL_CHECK)\r\n        allocator_traits<_Rebound>::construct(\r\n            this->_Get_val(), _STD addressof(_Storage._Value), _STD forward<_Types>(_Args)...);\r\n    }\r\n\r\n    union {\r\n        _Wrap<_Ty> _Storage;\r\n    };\r\n\r\nprivate:\r\n    ~_Ref_count_obj_alloc3() noexcept override { // TRANSITION, should be non-virtual\r\n        // nothing to do; _Storage._Value already destroyed by _Destroy()\r\n\r\n        // See N4950 [class.dtor]/7.\r\n    }\r\n\r\n    void _Destroy() noexcept override { // destroy managed resource\r\n        allocator_traits<_Rebound>::destroy(this->_Get_val(), _STD addressof(_Storage._Value));\r\n    }\r\n\r\n    void _Delete_this() noexcept override { // destroy self\r\n        _Rebind_alloc_t<_Alloc, _Ref_count_obj_alloc3> _Al(this->_Get_val());\r\n        this->~_Ref_count_obj_alloc3();\r\n        _STD _Deallocate_plain(_Al, this);\r\n    }\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty, class _Alloc>\r\nclass _Ref_count_obj_alloc_for_overwrite : public _Ebco_base<_Rebind_alloc_t<_Alloc, _Ty>>, public _Ref_count_base {\r\n    // handle reference counting for object in control block, allocator\r\n    // initialize and destroy objects by the default mechanism\r\nprivate:\r\n    static_assert(is_same_v<_Ty, remove_cv_t<_Ty>>, \"allocate_shared_for_overwrite should remove_cv_t\");\r\n\r\n    using _Rebound = _Rebind_alloc_t<_Alloc, _Ty>;\r\n\r\npublic:\r\n    template <class... _Types>\r\n    explicit _Ref_count_obj_alloc_for_overwrite(const _Alloc& _Al_arg)\r\n        : _Ebco_base<_Rebound>(_Al_arg), _Ref_count_base() {\r\n        _STD _Default_construct_in_place(_Storage._Value);\r\n    }\r\n\r\n    union {\r\n        _Wrap<_Ty> _Storage;\r\n    };\r\n\r\nprivate:\r\n    ~_Ref_count_obj_alloc_for_overwrite() noexcept override { // TRANSITION, should be non-virtual\r\n        // nothing to do; _Storage._Value already destroyed by _Destroy()\r\n\r\n        // See N4964 [class.dtor]/7.\r\n    }\r\n\r\n    void _Destroy() noexcept override { // destroy managed resource\r\n        _STD _Destroy_in_place(_Storage._Value);\r\n    }\r\n\r\n    void _Delete_this() noexcept override { // destroy self\r\n        _Rebind_alloc_t<_Alloc, _Ref_count_obj_alloc_for_overwrite> _Al(this->_Get_val());\r\n        this->~_Ref_count_obj_alloc_for_overwrite();\r\n        _STD _Deallocate_plain(_Al, this);\r\n    }\r\n};\r\n\r\ntemplate <class _Alloc>\r\nclass _NODISCARD _Uninitialized_rev_destroying_backout_al {\r\n    // class to undo partially constructed ranges in _Uninitialized_xxx_al algorithms\r\n\r\nprivate:\r\n    using pointer = _Alloc_ptr_t<_Alloc>;\r\n\r\npublic:\r\n    _Uninitialized_rev_destroying_backout_al(pointer _Dest, _Alloc& _Al_) noexcept\r\n        : _First(_Dest), _Last(_Dest), _Al(_Al_) {}\r\n\r\n    _Uninitialized_rev_destroying_backout_al(const _Uninitialized_rev_destroying_backout_al&)            = delete;\r\n    _Uninitialized_rev_destroying_backout_al& operator=(const _Uninitialized_rev_destroying_backout_al&) = delete;\r\n\r\n    ~_Uninitialized_rev_destroying_backout_al() {\r\n        while (_Last != _First) {\r\n            --_Last;\r\n            allocator_traits<_Alloc>::destroy(_Al, _Last);\r\n        }\r\n    }\r\n\r\n    template <class... _Types>\r\n    void _Emplace_back(_Types&&... _Vals) { // construct a new element at *_Last and increment\r\n        allocator_traits<_Alloc>::construct(_Al, _STD _Unfancy(_Last), _STD forward<_Types>(_Vals)...);\r\n        ++_Last;\r\n    }\r\n\r\n    pointer _Release() noexcept { // suppress any exception handling backout and return _Last\r\n        _First = _Last;\r\n        return _Last;\r\n    }\r\n\r\nprivate:\r\n    pointer _First;\r\n    pointer _Last;\r\n    _Alloc& _Al;\r\n};\r\n\r\ntemplate <class _Ty, class _Alloc>\r\nvoid _Reverse_destroy_multidimensional_n_al(_Ty* const _Arr, size_t _Size, _Alloc& _Al) noexcept {\r\n    while (_Size > 0) {\r\n        --_Size;\r\n        if constexpr (is_array_v<_Ty>) {\r\n            _STD _Reverse_destroy_multidimensional_n_al(_Arr[_Size], extent_v<_Ty>, _Al);\r\n        } else {\r\n            allocator_traits<_Alloc>::destroy(_Al, _Arr + _Size);\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\nstruct _NODISCARD _Reverse_destroy_multidimensional_n_al_guard {\r\n    _Ty* _Target;\r\n    size_t _Index;\r\n    _Alloc& _Al;\r\n\r\n    ~_Reverse_destroy_multidimensional_n_al_guard() {\r\n        if (_Target) {\r\n            _STD _Reverse_destroy_multidimensional_n_al(_Target, _Index, _Al);\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Ty, size_t _Size, class _Alloc>\r\nvoid _Uninitialized_copy_multidimensional_al(const _Ty (&_In)[_Size], _Ty (&_Out)[_Size], _Alloc& _Al) {\r\n    using _Item = remove_all_extents_t<_Ty>;\r\n    if constexpr (conjunction_v<is_trivially_copy_constructible<_Item>, is_trivially_destructible<_Item>,\r\n                      _Uses_default_construct<_Alloc, _Item*, const _Item&>>) {\r\n        _STD _Copy_memmove_n(_In, _Size, _Out);\r\n    } else if constexpr (is_array_v<_Ty>) {\r\n        _Reverse_destroy_multidimensional_n_al_guard<_Ty, _Alloc> _Guard{_Out, 0, _Al};\r\n        for (size_t& _Idx = _Guard._Index; _Idx < _Size; ++_Idx) {\r\n            _STD _Uninitialized_copy_multidimensional_al(_In[_Idx], _Out[_Idx], _Al);\r\n        }\r\n        _Guard._Target = nullptr;\r\n    } else {\r\n        _Uninitialized_rev_destroying_backout_al _Backout{_Out, _Al};\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Backout._Emplace_back(_In[_Idx]);\r\n        }\r\n        _Backout._Release();\r\n    }\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\nvoid _Uninitialized_value_construct_multidimensional_n_al(_Ty* const _Out, const size_t _Size, _Alloc& _Al) {\r\n    using _Item = remove_all_extents_t<_Ty>;\r\n    if constexpr (_Use_memset_value_construct_v<_Item*> && _Uses_default_construct<_Alloc, _Item*>::value) {\r\n        _STD _Zero_range(_Out, _Out + _Size);\r\n    } else if constexpr (is_array_v<_Ty>) {\r\n        _Reverse_destroy_multidimensional_n_al_guard<_Ty, _Alloc> _Guard{_Out, 0, _Al};\r\n        for (size_t& _Idx = _Guard._Index; _Idx < _Size; ++_Idx) {\r\n            _STD _Uninitialized_value_construct_multidimensional_n_al(_Out[_Idx], extent_v<_Ty>, _Al);\r\n        }\r\n        _Guard._Target = nullptr;\r\n    } else {\r\n        _Uninitialized_rev_destroying_backout_al _Backout{_Out, _Al};\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Backout._Emplace_back();\r\n        }\r\n        _Backout._Release();\r\n    }\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\nvoid _Uninitialized_fill_multidimensional_n_al(_Ty* const _Out, const size_t _Size, const _Ty& _Val, _Alloc& _Al) {\r\n    if constexpr (is_array_v<_Ty>) {\r\n        _Reverse_destroy_multidimensional_n_al_guard<_Ty, _Alloc> _Guard{_Out, 0, _Al};\r\n        for (size_t& _Idx = _Guard._Index; _Idx < _Size; ++_Idx) {\r\n            _STD _Uninitialized_copy_multidimensional_al(_Val, _Out[_Idx], _Al); // intentionally copy, not fill\r\n        }\r\n        _Guard._Target = nullptr;\r\n    } else if constexpr (_Fill_memset_is_safe<_Ty*, _Ty> && _Uses_default_construct<_Alloc, _Ty*, const _Ty&>::value) {\r\n        _STD _Fill_memset(_Out, _Val, _Size);\r\n    } else {\r\n        if constexpr (_Fill_zero_memset_is_safe<_Ty*, _Ty>\r\n                      && _Uses_default_construct<_Alloc, _Ty*, const _Ty&>::value) {\r\n            if (_STD _Is_all_bits_zero(_Val)) {\r\n                _STD _Fill_zero_memset(_Out, _Size);\r\n                return;\r\n            }\r\n        }\r\n        _Uninitialized_rev_destroying_backout_al _Backout{_Out, _Al};\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Backout._Emplace_back(_Val);\r\n        }\r\n        _Backout._Release();\r\n    }\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\nclass _Ref_count_unbounded_array_alloc : public _Ebco_base<_Rebind_alloc_t<_Alloc, remove_all_extents_t<_Ty>>>,\r\n                                         public _Ref_count_base {\r\n    // handle reference counting for unbounded array in control block, allocator\r\nprivate:\r\n    static_assert(is_unbounded_array_v<_Ty>);\r\n    static_assert(is_same_v<_Ty, remove_cv_t<_Ty>>, \"allocate_shared should remove_cv_t\");\r\n\r\n    using _Item    = remove_all_extents_t<_Ty>;\r\n    using _Rebound = _Rebind_alloc_t<_Alloc, _Item>;\r\n\r\npublic:\r\n    using _Element_type = remove_extent_t<_Ty>;\r\n\r\n    explicit _Ref_count_unbounded_array_alloc(const _Alloc& _Al_arg, const size_t _Count)\r\n        : _Ebco_base<_Rebound>(_Al_arg), _Ref_count_base(), _Size(_Count) {\r\n        _STD _Uninitialized_value_construct_multidimensional_n_al(_Get_ptr(), _Size, this->_Get_val());\r\n    }\r\n\r\n    template <class _Arg>\r\n    explicit _Ref_count_unbounded_array_alloc(const _Alloc& _Al_arg, const size_t _Count, const _Arg& _Val)\r\n        : _Ebco_base<_Rebound>(_Al_arg), _Ref_count_base(), _Size(_Count) {\r\n        // allocate_shared_for_overwrite should use another type for the control block\r\n        _STL_INTERNAL_STATIC_ASSERT(!is_same_v<_For_overwrite_tag, _Arg>);\r\n\r\n        _STD _Uninitialized_fill_multidimensional_n_al(_Get_ptr(), _Size, _Val, this->_Get_val());\r\n    }\r\n\r\n    _NODISCARD auto _Get_ptr() noexcept {\r\n        return _STD addressof(_Storage._Value);\r\n    }\r\n\r\nprivate:\r\n    size_t _Size;\r\n\r\n    union {\r\n        _Wrap<_Element_type> _Storage; // flexible array must be last member\r\n    };\r\n\r\n    ~_Ref_count_unbounded_array_alloc() noexcept override { // TRANSITION, should be non-virtual\r\n        // nothing to do; _Storage._Value already destroyed by _Destroy()\r\n\r\n        // See N4950 [class.dtor]/7.\r\n    }\r\n\r\n    void _Destroy() noexcept override { // destroy managed resource\r\n        if constexpr (!conjunction_v<is_trivially_destructible<_Item>, _Uses_default_destroy<_Rebound, _Item*>>) {\r\n            _STD _Reverse_destroy_multidimensional_n_al(_Get_ptr(), _Size, this->_Get_val());\r\n        }\r\n    }\r\n\r\n    void _Delete_this() noexcept override { // destroy self\r\n        constexpr size_t _Align = alignof(_Ref_count_unbounded_array_alloc);\r\n        using _Storage          = _Alignas_storage_unit<_Align>;\r\n        using _Rebound_alloc    = _Rebind_alloc_t<_Alloc, _Storage>;\r\n\r\n        _Rebound_alloc _Al(this->_Get_val());\r\n        const size_t _Bytes =\r\n            _Calculate_bytes_for_flexible_array<_Ref_count_unbounded_array_alloc, _Check_overflow::_Nope>(_Size);\r\n        const size_t _Storage_units = _Bytes / sizeof(_Storage);\r\n\r\n        this->~_Ref_count_unbounded_array_alloc();\r\n\r\n        _Al.deallocate(_STD _Refancy<_Alloc_ptr_t<_Rebound_alloc>>(reinterpret_cast<_Storage*>(this)),\r\n            static_cast<_Alloc_size_t<_Rebound_alloc>>(_Storage_units));\r\n    }\r\n};\r\n\r\ntemplate <class _Ty, class _Alloc>\r\nclass _Ref_count_unbounded_array_alloc_for_overwrite\r\n    : public _Ebco_base<_Rebind_alloc_t<_Alloc, remove_all_extents_t<_Ty>>>,\r\n      public _Ref_count_base {\r\n    // handle reference counting for unbounded array in control block, allocator\r\n    // initialize and destroy objects by the default mechanism\r\nprivate:\r\n    static_assert(is_unbounded_array_v<_Ty>);\r\n    static_assert(is_same_v<_Ty, remove_cv_t<_Ty>>, \"allocate_shared_for_overwrite should remove_cv_t\");\r\n\r\n    using _Item    = remove_all_extents_t<_Ty>;\r\n    using _Rebound = _Rebind_alloc_t<_Alloc, _Item>;\r\n\r\npublic:\r\n    using _Element_type = remove_extent_t<_Ty>;\r\n\r\n    explicit _Ref_count_unbounded_array_alloc_for_overwrite(const _Alloc& _Al_arg, const size_t _Count)\r\n        : _Ebco_base<_Rebound>(_Al_arg), _Ref_count_base(), _Size(_Count) {\r\n        _STD _Uninitialized_default_construct_multidimensional_n(_Get_ptr(), _Size); // the allocator isn't needed\r\n    }\r\n\r\n    _NODISCARD auto _Get_ptr() noexcept {\r\n        return _STD addressof(_Storage._Value);\r\n    }\r\n\r\nprivate:\r\n    size_t _Size;\r\n\r\n    union {\r\n        _Wrap<_Element_type> _Storage; // flexible array must be last member\r\n    };\r\n\r\n    ~_Ref_count_unbounded_array_alloc_for_overwrite() noexcept override { // TRANSITION, should be non-virtual\r\n        // nothing to do; _Storage._Value already destroyed by _Destroy()\r\n\r\n        // See N4964 [class.dtor]/7.\r\n    }\r\n\r\n    void _Destroy() noexcept override { // destroy managed resource\r\n        _STD _Reverse_destroy_multidimensional_n(_Get_ptr(), _Size);\r\n    }\r\n\r\n    void _Delete_this() noexcept override { // destroy self\r\n        constexpr size_t _Align = alignof(_Ref_count_unbounded_array_alloc_for_overwrite);\r\n        using _Storage          = _Alignas_storage_unit<_Align>;\r\n        using _Rebound_alloc    = _Rebind_alloc_t<_Alloc, _Storage>;\r\n\r\n        _Rebound_alloc _Al(this->_Get_val());\r\n        const size_t _Bytes         = _Calculate_bytes_for_flexible_array< //\r\n            _Ref_count_unbounded_array_alloc_for_overwrite, _Check_overflow::_Nope>(_Size);\r\n        const size_t _Storage_units = _Bytes / sizeof(_Storage);\r\n\r\n        this->~_Ref_count_unbounded_array_alloc_for_overwrite();\r\n\r\n        _Al.deallocate(_STD _Refancy<_Alloc_ptr_t<_Rebound_alloc>>(reinterpret_cast<_Storage*>(this)),\r\n            static_cast<_Alloc_size_t<_Rebound_alloc>>(_Storage_units));\r\n    }\r\n};\r\n\r\ntemplate <class _Ty, class _Alloc>\r\nclass _Ref_count_bounded_array_alloc : public _Ebco_base<_Rebind_alloc_t<_Alloc, remove_all_extents_t<_Ty>>>,\r\n                                       public _Ref_count_base {\r\n    // handle reference counting for bounded array in control block, allocator\r\nprivate:\r\n    static_assert(is_bounded_array_v<_Ty>);\r\n    static_assert(is_same_v<_Ty, remove_cv_t<_Ty>>, \"allocate_shared should remove_cv_t\");\r\n\r\n    using _Item    = remove_all_extents_t<_Ty>;\r\n    using _Rebound = _Rebind_alloc_t<_Alloc, _Item>;\r\n\r\npublic:\r\n    explicit _Ref_count_bounded_array_alloc(const _Alloc& _Al_arg)\r\n        : _Ebco_base<_Rebound>(_Al_arg), _Ref_count_base() { // don't value-initialize _Storage\r\n        _STD _Uninitialized_value_construct_multidimensional_n_al(_Storage._Value, extent_v<_Ty>, this->_Get_val());\r\n    }\r\n\r\n    template <class _Arg>\r\n    explicit _Ref_count_bounded_array_alloc(const _Alloc& _Al_arg, const _Arg& _Val)\r\n        : _Ebco_base<_Rebound>(_Al_arg), _Ref_count_base() { // don't value-initialize _Storage\r\n        // allocate_shared_for_overwrite should use another type for the control block\r\n        _STL_INTERNAL_STATIC_ASSERT(!is_same_v<_For_overwrite_tag, _Arg>);\r\n\r\n        _STD _Uninitialized_fill_multidimensional_n_al(_Storage._Value, extent_v<_Ty>, _Val, this->_Get_val());\r\n    }\r\n\r\n    union {\r\n        _Wrap<_Ty> _Storage;\r\n    };\r\n\r\nprivate:\r\n    ~_Ref_count_bounded_array_alloc() noexcept override { // TRANSITION, should be non-virtual\r\n        // nothing to do; _Storage._Value already destroyed by _Destroy()\r\n\r\n        // See N4950 [class.dtor]/7.\r\n    }\r\n\r\n    void _Destroy() noexcept override { // destroy managed resource\r\n        if constexpr (!conjunction_v<is_trivially_destructible<_Item>, _Uses_default_destroy<_Rebound, _Item*>>) {\r\n            _STD _Reverse_destroy_multidimensional_n_al(_Storage._Value, extent_v<_Ty>, this->_Get_val());\r\n        }\r\n    }\r\n\r\n    void _Delete_this() noexcept override { // destroy self\r\n        _Rebind_alloc_t<_Alloc, _Ref_count_bounded_array_alloc> _Al(this->_Get_val());\r\n        this->~_Ref_count_bounded_array_alloc();\r\n        _STD _Deallocate_plain(_Al, this);\r\n    }\r\n};\r\n\r\ntemplate <class _Ty, class _Alloc>\r\nclass _Ref_count_bounded_array_alloc_for_overwrite\r\n    : public _Ebco_base<_Rebind_alloc_t<_Alloc, remove_all_extents_t<_Ty>>>,\r\n      public _Ref_count_base {\r\n    // handle reference counting for bounded array in control block, allocator\r\n    // initialize and destroy objects by the default mechanism\r\nprivate:\r\n    static_assert(is_bounded_array_v<_Ty>);\r\n    static_assert(is_same_v<_Ty, remove_cv_t<_Ty>>, \"allocate_shared_for_overwrite should remove_cv_t\");\r\n\r\n    using _Item    = remove_all_extents_t<_Ty>;\r\n    using _Rebound = _Rebind_alloc_t<_Alloc, _Item>;\r\n\r\npublic:\r\n    explicit _Ref_count_bounded_array_alloc_for_overwrite(const _Alloc& _Al_arg)\r\n        : _Ebco_base<_Rebound>(_Al_arg), _Ref_count_base() { // don't value-initialize _Storage\r\n        _STD _Uninitialized_default_construct_multidimensional_n(\r\n            _Storage._Value, extent_v<_Ty>); // the allocator isn't needed\r\n    }\r\n\r\n    union {\r\n        _Wrap<_Ty> _Storage;\r\n    };\r\n\r\nprivate:\r\n    ~_Ref_count_bounded_array_alloc_for_overwrite() noexcept override { // TRANSITION, should be non-virtual\r\n        // nothing to do; _Storage._Value already destroyed by _Destroy()\r\n\r\n        // See N4964 [class.dtor]/7.\r\n    }\r\n\r\n    void _Destroy() noexcept override { // destroy managed resource\r\n        // not _Storage._Value as _Ty is an array type (not a class type or a scalar type),\r\n        // and thus cannot be used as a pseudo-destructor (N4964 [expr.prim.id.dtor]).\r\n        _STD _Destroy_in_place(_Storage);\r\n    }\r\n\r\n    void _Delete_this() noexcept override { // destroy self\r\n        _Rebind_alloc_t<_Alloc, _Ref_count_bounded_array_alloc_for_overwrite> _Al(this->_Get_val());\r\n        this->~_Ref_count_bounded_array_alloc_for_overwrite();\r\n        _STD _Deallocate_plain(_Al, this);\r\n    }\r\n};\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <_Not_builtin_array _Ty, class... _Types>\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ty, class... _Types>\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n_NODISCARD_SMART_PTR_ALLOC shared_ptr<_Ty> make_shared(_Types&&... _Args) { // make a shared_ptr to non-array object\r\n    const auto _Rx = new _Ref_count_obj2<_Ty>(_STD forward<_Types>(_Args)...);\r\n    shared_ptr<_Ty> _Ret;\r\n    _Ret._Set_ptr_rep_and_enable_shared(_STD addressof(_Rx->_Storage._Value), _Rx);\r\n    return _Ret;\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Refc>\r\nstruct _NODISCARD _Global_delete_guard {\r\n    _Refc* _Target;\r\n\r\n    ~_Global_delete_guard() {\r\n        // While this branch is technically unnecessary because N4950 [new.delete.single]/16 requires\r\n        // `::operator delete(nullptr)` to be a no-op, it's here to help optimizers see that after\r\n        // `_Guard._Target = nullptr;`, this destructor can be eliminated.\r\n        if (_Target) {\r\n            _STD _Deallocate_flexible_array(_Target);\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Ty, class... _ArgTypes>\r\n_NODISCARD shared_ptr<_Ty> _Make_shared_unbounded_array(const size_t _Count, const _ArgTypes&... _Args) {\r\n    // make a shared_ptr to an unbounded array\r\n    static_assert(is_unbounded_array_v<_Ty>);\r\n    using _Refc    = _Ref_count_unbounded_array<_Ty>;\r\n    const auto _Rx = _Allocate_flexible_array<_Refc>(_Count);\r\n    _Global_delete_guard<_Refc> _Guard{_Rx};\r\n    ::new (static_cast<void*>(_Rx)) _Refc(_Count, _Args...);\r\n    _Guard._Target = nullptr;\r\n    shared_ptr<_Ty> _Ret;\r\n    _Ret._Set_ptr_rep_and_enable_shared(_Rx->_Get_ptr(), _Rx);\r\n    return _Ret;\r\n}\r\n\r\n_EXPORT_STD template <_Unbounded_builtin_array _Ty>\r\n_NODISCARD_SMART_PTR_ALLOC shared_ptr<_Ty> make_shared(const size_t _Count) {\r\n    return _STD _Make_shared_unbounded_array<_Ty>(_Count);\r\n}\r\n\r\n_EXPORT_STD template <_Unbounded_builtin_array _Ty>\r\n_NODISCARD_SMART_PTR_ALLOC shared_ptr<_Ty> make_shared(const size_t _Count, const remove_extent_t<_Ty>& _Val) {\r\n    return _STD _Make_shared_unbounded_array<_Ty>(_Count, _Val);\r\n}\r\n\r\n_EXPORT_STD template <_Bounded_builtin_array _Ty>\r\n_NODISCARD_SMART_PTR_ALLOC shared_ptr<_Ty> make_shared() {\r\n    // make a shared_ptr to a bounded array\r\n    const auto _Rx = new _Ref_count_bounded_array<_Ty>();\r\n    shared_ptr<_Ty> _Ret;\r\n    _Ret._Set_ptr_rep_and_enable_shared(_Rx->_Storage._Value, _Rx);\r\n    return _Ret;\r\n}\r\n\r\n_EXPORT_STD template <_Bounded_builtin_array _Ty>\r\n_NODISCARD_SMART_PTR_ALLOC shared_ptr<_Ty> make_shared(const remove_extent_t<_Ty>& _Val) {\r\n    // make a shared_ptr to a bounded array\r\n    const auto _Rx = new _Ref_count_bounded_array<_Ty>(_Val);\r\n    shared_ptr<_Ty> _Ret;\r\n    _Ret._Set_ptr_rep_and_enable_shared(_Rx->_Storage._Value, _Rx);\r\n    return _Ret;\r\n}\r\n\r\n_EXPORT_STD template <_Not_unbounded_builtin_array _Ty>\r\n_NODISCARD_SMART_PTR_ALLOC shared_ptr<_Ty> make_shared_for_overwrite() {\r\n    shared_ptr<_Ty> _Ret;\r\n    if constexpr (is_array_v<_Ty>) {\r\n        // make a shared_ptr to a bounded array\r\n        const auto _Rx = new _Ref_count_bounded_array<_Ty>(_For_overwrite_tag{});\r\n        _Ret._Set_ptr_rep_and_enable_shared(_Rx->_Storage._Value, _Rx);\r\n    } else {\r\n        // make a shared_ptr to non-array object\r\n        const auto _Rx = new _Ref_count_obj2<_Ty>(_For_overwrite_tag{});\r\n        _Ret._Set_ptr_rep_and_enable_shared(_STD addressof(_Rx->_Storage._Value), _Rx);\r\n    }\r\n    return _Ret;\r\n}\r\n\r\n_EXPORT_STD template <_Unbounded_builtin_array _Ty>\r\n_NODISCARD_SMART_PTR_ALLOC shared_ptr<_Ty> make_shared_for_overwrite(const size_t _Count) {\r\n    return _STD _Make_shared_unbounded_array<_Ty>(_Count, _For_overwrite_tag{});\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <_Not_builtin_array _Ty, class _Alloc, class... _Types>\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ty, class _Alloc, class... _Types>\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n_NODISCARD_SMART_PTR_ALLOC shared_ptr<_Ty> allocate_shared(const _Alloc& _Al, _Types&&... _Args) {\r\n    // make a shared_ptr to non-array object\r\n    using _Refoa   = _Ref_count_obj_alloc3<remove_cv_t<_Ty>, _Alloc>;\r\n    using _Alblock = _Rebind_alloc_t<_Alloc, _Refoa>;\r\n    _Alblock _Rebound(_Al);\r\n    _Alloc_construct_ptr<_Alblock> _Constructor{_Rebound};\r\n    _Constructor._Allocate();\r\n    _STD _Construct_in_place(*_Constructor._Ptr, _Al, _STD forward<_Types>(_Args)...);\r\n    shared_ptr<_Ty> _Ret;\r\n    const auto _Ptr = reinterpret_cast<_Ty*>(_STD addressof(_Constructor._Ptr->_Storage._Value));\r\n    _Ret._Set_ptr_rep_and_enable_shared(_Ptr, _STD _Unfancy(_Constructor._Release()));\r\n    return _Ret;\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Alloc>\r\nstruct _Allocate_n_ptr {\r\n    _Alloc& _Al;\r\n    _Alloc_ptr_t<_Alloc> _Ptr;\r\n    size_t _Nx;\r\n\r\n    _Allocate_n_ptr(_Alloc& _Al_, const size_t _Nx_)\r\n        : _Al(_Al_), _Ptr(_Al_.allocate(_Convert_size<_Alloc_size_t<_Alloc>>(_Nx_))), _Nx(_Nx_) {}\r\n\r\n    ~_Allocate_n_ptr() {\r\n        if (_Ptr) {\r\n            _Al.deallocate(_Ptr, static_cast<_Alloc_size_t<_Alloc>>(_Nx));\r\n        }\r\n    }\r\n\r\n    _Allocate_n_ptr(const _Allocate_n_ptr&)            = delete;\r\n    _Allocate_n_ptr& operator=(const _Allocate_n_ptr&) = delete;\r\n};\r\n\r\ntemplate <bool _IsForOverwrite, class _Ty, class _Alloc, class... _ArgTypes>\r\n_NODISCARD shared_ptr<_Ty> _Allocate_shared_unbounded_array(\r\n    const _Alloc& _Al, const size_t _Count, const _ArgTypes&... _Args) {\r\n    // make a shared_ptr to an unbounded array\r\n    static_assert(is_unbounded_array_v<_Ty>);\r\n    using _Refc             = conditional_t<_IsForOverwrite, //\r\n                    _Ref_count_unbounded_array_alloc_for_overwrite<remove_cv_t<_Ty>, _Alloc>,\r\n                    _Ref_count_unbounded_array_alloc<remove_cv_t<_Ty>, _Alloc>>;\r\n    constexpr size_t _Align = alignof(_Refc);\r\n    using _Storage          = _Alignas_storage_unit<_Align>;\r\n    _Rebind_alloc_t<_Alloc, _Storage> _Rebound(_Al);\r\n    const size_t _Bytes         = _Calculate_bytes_for_flexible_array<_Refc, _Check_overflow::_Yes>(_Count);\r\n    const size_t _Storage_units = _Bytes / sizeof(_Storage);\r\n    _Allocate_n_ptr _Guard{_Rebound, _Storage_units};\r\n    const auto _Rx = reinterpret_cast<_Refc*>(_STD _Unfancy(_Guard._Ptr));\r\n    ::new (static_cast<void*>(_Rx)) _Refc(_Al, _Count, _Args...);\r\n    _Guard._Ptr = nullptr;\r\n    shared_ptr<_Ty> _Ret;\r\n    _Ret._Set_ptr_rep_and_enable_shared(_Rx->_Get_ptr(), _Rx);\r\n    return _Ret;\r\n}\r\n\r\n_EXPORT_STD template <_Unbounded_builtin_array _Ty, class _Alloc>\r\n_NODISCARD_SMART_PTR_ALLOC shared_ptr<_Ty> allocate_shared(const _Alloc& _Al, const size_t _Count) {\r\n    return _STD _Allocate_shared_unbounded_array<false, _Ty>(_Al, _Count);\r\n}\r\n\r\n_EXPORT_STD template <_Unbounded_builtin_array _Ty, class _Alloc>\r\n_NODISCARD_SMART_PTR_ALLOC shared_ptr<_Ty> allocate_shared(\r\n    const _Alloc& _Al, const size_t _Count, const remove_extent_t<_Ty>& _Val) {\r\n    return _STD _Allocate_shared_unbounded_array<false, _Ty>(_Al, _Count, _Val);\r\n}\r\n\r\n_EXPORT_STD template <_Bounded_builtin_array _Ty, class _Alloc>\r\n_NODISCARD_SMART_PTR_ALLOC shared_ptr<_Ty> allocate_shared(const _Alloc& _Al) {\r\n    // make a shared_ptr to a bounded array\r\n    using _Refc    = _Ref_count_bounded_array_alloc<remove_cv_t<_Ty>, _Alloc>;\r\n    using _Alblock = _Rebind_alloc_t<_Alloc, _Refc>;\r\n    _Alblock _Rebound(_Al);\r\n    _Alloc_construct_ptr _Constructor{_Rebound};\r\n    _Constructor._Allocate();\r\n    ::new (_STD _Voidify_unfancy(_Constructor._Ptr)) _Refc(_Al);\r\n    shared_ptr<_Ty> _Ret;\r\n    const auto _Ptr = static_cast<remove_extent_t<_Ty>*>(_Constructor._Ptr->_Storage._Value);\r\n    _Ret._Set_ptr_rep_and_enable_shared(_Ptr, _STD _Unfancy(_Constructor._Release()));\r\n    return _Ret;\r\n}\r\n\r\n_EXPORT_STD template <_Bounded_builtin_array _Ty, class _Alloc>\r\n_NODISCARD_SMART_PTR_ALLOC shared_ptr<_Ty> allocate_shared(const _Alloc& _Al, const remove_extent_t<_Ty>& _Val) {\r\n    // make a shared_ptr to a bounded array\r\n    using _Refc    = _Ref_count_bounded_array_alloc<remove_cv_t<_Ty>, _Alloc>;\r\n    using _Alblock = _Rebind_alloc_t<_Alloc, _Refc>;\r\n    _Alblock _Rebound(_Al);\r\n    _Alloc_construct_ptr _Constructor{_Rebound};\r\n    _Constructor._Allocate();\r\n    ::new (_STD _Voidify_unfancy(_Constructor._Ptr)) _Refc(_Al, _Val);\r\n    shared_ptr<_Ty> _Ret;\r\n    const auto _Ptr = static_cast<remove_extent_t<_Ty>*>(_Constructor._Ptr->_Storage._Value);\r\n    _Ret._Set_ptr_rep_and_enable_shared(_Ptr, _STD _Unfancy(_Constructor._Release()));\r\n    return _Ret;\r\n}\r\n\r\n_EXPORT_STD template <_Not_unbounded_builtin_array _Ty, class _Alloc>\r\n_NODISCARD_SMART_PTR_ALLOC shared_ptr<_Ty> allocate_shared_for_overwrite(const _Alloc& _Al) {\r\n    shared_ptr<_Ty> _Ret;\r\n    if constexpr (is_array_v<_Ty>) {\r\n        // make a shared_ptr to a bounded array\r\n        using _Refc    = _Ref_count_bounded_array_alloc_for_overwrite<remove_cv_t<_Ty>, _Alloc>;\r\n        using _Alblock = _Rebind_alloc_t<_Alloc, _Refc>;\r\n        _Alblock _Rebound(_Al);\r\n        _Alloc_construct_ptr _Constructor{_Rebound};\r\n        _Constructor._Allocate();\r\n        ::new (_STD _Voidify_unfancy(_Constructor._Ptr)) _Refc(_Al);\r\n        const auto _Ptr = static_cast<remove_extent_t<_Ty>*>(_Constructor._Ptr->_Storage._Value);\r\n        _Ret._Set_ptr_rep_and_enable_shared(_Ptr, _STD _Unfancy(_Constructor._Release()));\r\n    } else {\r\n        // make a shared_ptr to non-array object\r\n        using _Refoa   = _Ref_count_obj_alloc_for_overwrite<remove_cv_t<_Ty>, _Alloc>;\r\n        using _Alblock = _Rebind_alloc_t<_Alloc, _Refoa>;\r\n        _Alblock _Rebound(_Al);\r\n        _Alloc_construct_ptr<_Alblock> _Constructor{_Rebound};\r\n        _Constructor._Allocate();\r\n        _STD _Construct_in_place(*_Constructor._Ptr, _Al);\r\n        const auto _Ptr = reinterpret_cast<_Ty*>(_STD addressof(_Constructor._Ptr->_Storage._Value));\r\n        _Ret._Set_ptr_rep_and_enable_shared(_Ptr, _STD _Unfancy(_Constructor._Release()));\r\n    }\r\n\r\n    return _Ret;\r\n}\r\n\r\n_EXPORT_STD template <_Unbounded_builtin_array _Ty, class _Alloc>\r\n_NODISCARD_SMART_PTR_ALLOC shared_ptr<_Ty> allocate_shared_for_overwrite(const _Alloc& _Al, const size_t _Count) {\r\n    return _STD _Allocate_shared_unbounded_array<true, _Ty>(_Al, _Count);\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass weak_ptr : public _Ptr_base<_Ty> { // class for pointer to reference counted resource\r\npublic:\r\n#ifndef _M_CEE_PURE\r\n    // When a constructor is converting from weak_ptr<_Ty2> to weak_ptr<_Ty>, the below type trait intentionally asks\r\n    // whether it would be possible to static_cast from _Ty* to const _Ty2*; see N4950 [expr.static.cast]/12.\r\n\r\n    // Primary template, the value is used when the substitution fails.\r\n    template <class _Ty2, class = const _Ty2*>\r\n    static constexpr bool _Must_avoid_expired_conversions_from = true;\r\n\r\n    // Template specialization, the value is used when the substitution succeeds.\r\n    template <class _Ty2>\r\n    static constexpr bool\r\n        _Must_avoid_expired_conversions_from<_Ty2, decltype(static_cast<const _Ty2*>(static_cast<_Ty*>(nullptr)))> =\r\n            false;\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\n    constexpr weak_ptr() noexcept {}\r\n\r\n    weak_ptr(const weak_ptr& _Other) noexcept {\r\n        this->_Weakly_construct_from(_Other); // same type, no conversion\r\n    }\r\n\r\n    template <class _Ty2, enable_if_t<_SP_pointer_compatible<_Ty2, _Ty>::value, int> = 0>\r\n    weak_ptr(const shared_ptr<_Ty2>& _Other) noexcept {\r\n        this->_Weakly_construct_from(_Other); // shared_ptr keeps resource alive during conversion\r\n    }\r\n\r\n    template <class _Ty2, enable_if_t<_SP_pointer_compatible<_Ty2, _Ty>::value, int> = 0>\r\n    weak_ptr(const weak_ptr<_Ty2>& _Other) noexcept {\r\n#ifdef _M_CEE_PURE\r\n        constexpr bool _Avoid_expired_conversions = true; // slow, but always safe; avoids error LNK1179\r\n#else\r\n        constexpr bool _Avoid_expired_conversions = _Must_avoid_expired_conversions_from<_Ty2>;\r\n#endif\r\n\r\n        if constexpr (_Avoid_expired_conversions) {\r\n            this->_Weakly_convert_lvalue_avoiding_expired_conversions(_Other);\r\n        } else {\r\n            this->_Weakly_construct_from(_Other);\r\n        }\r\n    }\r\n\r\n    weak_ptr(weak_ptr&& _Other) noexcept {\r\n        this->_Move_construct_from(_STD move(_Other));\r\n    }\r\n\r\n    template <class _Ty2, enable_if_t<_SP_pointer_compatible<_Ty2, _Ty>::value, int> = 0>\r\n    weak_ptr(weak_ptr<_Ty2>&& _Other) noexcept {\r\n#ifdef _M_CEE_PURE\r\n        constexpr bool _Avoid_expired_conversions = true; // slow, but always safe; avoids error LNK1179\r\n#else\r\n        constexpr bool _Avoid_expired_conversions = _Must_avoid_expired_conversions_from<_Ty2>;\r\n#endif\r\n\r\n        if constexpr (_Avoid_expired_conversions) {\r\n            this->_Weakly_convert_rvalue_avoiding_expired_conversions(_STD move(_Other));\r\n        } else {\r\n            this->_Move_construct_from(_STD move(_Other));\r\n        }\r\n    }\r\n\r\n    ~weak_ptr() noexcept {\r\n        this->_Decwref();\r\n    }\r\n\r\n    weak_ptr& operator=(const weak_ptr& _Right) noexcept {\r\n        weak_ptr(_Right).swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Ty2, enable_if_t<_SP_pointer_compatible<_Ty2, _Ty>::value, int> = 0>\r\n    weak_ptr& operator=(const weak_ptr<_Ty2>& _Right) noexcept {\r\n        weak_ptr(_Right).swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    weak_ptr& operator=(weak_ptr&& _Right) noexcept {\r\n        weak_ptr(_STD move(_Right)).swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Ty2, enable_if_t<_SP_pointer_compatible<_Ty2, _Ty>::value, int> = 0>\r\n    weak_ptr& operator=(weak_ptr<_Ty2>&& _Right) noexcept {\r\n        weak_ptr(_STD move(_Right)).swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Ty2, enable_if_t<_SP_pointer_compatible<_Ty2, _Ty>::value, int> = 0>\r\n    weak_ptr& operator=(const shared_ptr<_Ty2>& _Right) noexcept {\r\n        weak_ptr(_Right).swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    void reset() noexcept { // release resource, convert to null weak_ptr object\r\n        weak_ptr{}.swap(*this);\r\n    }\r\n\r\n    void swap(weak_ptr& _Other) noexcept {\r\n        this->_Swap(_Other);\r\n    }\r\n\r\n    _NODISCARD bool expired() const noexcept {\r\n        return this->use_count() == 0;\r\n    }\r\n\r\n    _NODISCARD shared_ptr<_Ty> lock() const noexcept { // convert to shared_ptr\r\n        shared_ptr<_Ty> _Ret;\r\n        (void) _Ret._Construct_from_weak(*this);\r\n        return _Ret;\r\n    }\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Ty>\r\nweak_ptr(shared_ptr<_Ty>) -> weak_ptr<_Ty>;\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid swap(weak_ptr<_Ty>& _Left, weak_ptr<_Ty>& _Right) noexcept {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass enable_shared_from_this { // provide member functions that create shared_ptr to this\r\npublic:\r\n    using _Esft_type = enable_shared_from_this;\r\n\r\n    _NODISCARD shared_ptr<_Ty> shared_from_this() {\r\n        return shared_ptr<_Ty>(_Wptr);\r\n    }\r\n\r\n    _NODISCARD shared_ptr<const _Ty> shared_from_this() const {\r\n        return shared_ptr<const _Ty>(_Wptr);\r\n    }\r\n\r\n    _NODISCARD weak_ptr<_Ty> weak_from_this() noexcept {\r\n        return _Wptr;\r\n    }\r\n\r\n    _NODISCARD weak_ptr<const _Ty> weak_from_this() const noexcept {\r\n        return _Wptr;\r\n    }\r\n\r\nprotected:\r\n    constexpr enable_shared_from_this() noexcept : _Wptr() {}\r\n\r\n    enable_shared_from_this(const enable_shared_from_this&) noexcept : _Wptr() {\r\n        // construct (must value-initialize _Wptr)\r\n    }\r\n\r\n    enable_shared_from_this& operator=(const enable_shared_from_this&) noexcept { // assign (must not change _Wptr)\r\n        return *this;\r\n    }\r\n\r\n    ~enable_shared_from_this() = default;\r\n\r\nprivate:\r\n    template <class _Yty>\r\n    friend class shared_ptr;\r\n\r\n    mutable weak_ptr<_Ty> _Wptr;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct default_delete { // default deleter for unique_ptr\r\n    constexpr default_delete() noexcept = default;\r\n\r\n    template <class _Ty2, enable_if_t<is_convertible_v<_Ty2*, _Ty*>, int> = 0>\r\n    _CONSTEXPR23 default_delete(const default_delete<_Ty2>&) noexcept {}\r\n\r\n    _CONSTEXPR23 void operator()(_Ty* _Ptr) const noexcept /* strengthened */ { // delete a pointer\r\n        static_assert(0 < sizeof(_Ty), \"can't delete an incomplete type\");\r\n        delete _Ptr;\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct default_delete<_Ty[]> { // default deleter for unique_ptr to array of unknown size\r\n    constexpr default_delete() noexcept = default;\r\n\r\n    template <class _Uty, enable_if_t<is_convertible_v<_Uty (*)[], _Ty (*)[]>, int> = 0>\r\n    _CONSTEXPR23 default_delete(const default_delete<_Uty[]>&) noexcept {}\r\n\r\n    template <class _Uty, enable_if_t<is_convertible_v<_Uty (*)[], _Ty (*)[]>, int> = 0>\r\n    _CONSTEXPR23 void operator()(_Uty* _Ptr) const noexcept /* strengthened */ { // delete a pointer\r\n        static_assert(0 < sizeof(_Uty), \"can't delete an incomplete type\");\r\n        delete[] _Ptr;\r\n    }\r\n};\r\n\r\ntemplate <class _Ty, class _Dx_noref, class = void>\r\nstruct _Get_deleter_pointer_type { // provide fallback\r\n    using type = _Ty*;\r\n};\r\n\r\ntemplate <class _Ty, class _Dx_noref>\r\nstruct _Get_deleter_pointer_type<_Ty, _Dx_noref, void_t<typename _Dx_noref::pointer>> { // get _Dx_noref::pointer\r\n    using type = typename _Dx_noref::pointer;\r\n};\r\n\r\ntemplate <class _Dx2>\r\nusing _Unique_ptr_enable_default_t =\r\n    enable_if_t<conjunction_v<negation<is_pointer<_Dx2>>, is_default_constructible<_Dx2>>, int>;\r\n\r\ntemplate <class, class = void>\r\nconstexpr bool _Can_form_pointer = false;\r\ntemplate <class _Ty>\r\nconstexpr bool _Can_form_pointer<_Ty, void_t<_Ty*>> = true;\r\n\r\n_EXPORT_STD template <class _Ty, class _Dx /* = default_delete<_Ty> */>\r\nclass unique_ptr { // non-copyable pointer to an object\r\npublic:\r\n    static_assert(_Can_form_pointer<_Ty>,\r\n        \"unique_ptr<T, D> requires T* to be a valid type (N5001 [unique.ptr.single.general]/1).\");\r\n\r\n    using pointer      = typename _Get_deleter_pointer_type<_Ty, remove_reference_t<_Dx>>::type;\r\n    using element_type = _Ty;\r\n    using deleter_type = _Dx;\r\n\r\n    template <class _Dx2 = _Dx, _Unique_ptr_enable_default_t<_Dx2> = 0>\r\n    constexpr unique_ptr() noexcept : _Mypair(_Zero_then_variadic_args_t{}) {}\r\n\r\n    template <class _Dx2 = _Dx, _Unique_ptr_enable_default_t<_Dx2> = 0>\r\n    constexpr unique_ptr(nullptr_t) noexcept : _Mypair(_Zero_then_variadic_args_t{}) {}\r\n\r\n    _CONSTEXPR23 unique_ptr& operator=(nullptr_t) noexcept {\r\n        reset();\r\n        return *this;\r\n    }\r\n\r\n    // The Standard depicts these constructors that accept pointer as taking type_identity_t<pointer> to inhibit CTAD.\r\n    // Since pointer is an opaque type alias in our implementation, it inhibits CTAD without extra decoration.\r\n    template <class _Dx2 = _Dx, _Unique_ptr_enable_default_t<_Dx2> = 0>\r\n    _CONSTEXPR23 explicit unique_ptr(pointer _Ptr) noexcept : _Mypair(_Zero_then_variadic_args_t{}, _Ptr) {}\r\n\r\n    template <class _Dx2 = _Dx, enable_if_t<is_constructible_v<_Dx2, const _Dx2&>, int> = 0>\r\n    _CONSTEXPR23 unique_ptr(pointer _Ptr, const _Dx& _Dt) noexcept : _Mypair(_One_then_variadic_args_t{}, _Dt, _Ptr) {}\r\n\r\n    template <class _Dx2                                                                            = _Dx,\r\n        enable_if_t<conjunction_v<negation<is_reference<_Dx2>>, is_constructible<_Dx2, _Dx2>>, int> = 0>\r\n    _CONSTEXPR23 unique_ptr(pointer _Ptr, _Dx&& _Dt) noexcept\r\n        : _Mypair(_One_then_variadic_args_t{}, _STD move(_Dt), _Ptr) {}\r\n\r\n    template <class _Dx2                                                                                      = _Dx,\r\n        enable_if_t<conjunction_v<is_reference<_Dx2>, is_constructible<_Dx2, remove_reference_t<_Dx2>>>, int> = 0>\r\n    unique_ptr(pointer, remove_reference_t<_Dx>&&) = delete;\r\n\r\n    template <class _Dx2 = _Dx, enable_if_t<is_move_constructible_v<_Dx2>, int> = 0>\r\n    _CONSTEXPR23 unique_ptr(unique_ptr&& _Right) noexcept\r\n        : _Mypair(_One_then_variadic_args_t{}, _STD forward<_Dx>(_Right.get_deleter()), _Right.release()) {}\r\n\r\n    template <class _Ty2, class _Dx2,\r\n        enable_if_t<\r\n            conjunction_v<negation<is_array<_Ty2>>, is_convertible<typename unique_ptr<_Ty2, _Dx2>::pointer, pointer>,\r\n                conditional_t<is_reference_v<_Dx>, is_same<_Dx2, _Dx>, is_convertible<_Dx2, _Dx>>>,\r\n            int> = 0>\r\n    _CONSTEXPR23 unique_ptr(unique_ptr<_Ty2, _Dx2>&& _Right) noexcept\r\n        : _Mypair(_One_then_variadic_args_t{}, _STD forward<_Dx2>(_Right.get_deleter()), _Right.release()) {}\r\n\r\n#if _HAS_AUTO_PTR_ETC\r\n    template <class _Ty2,\r\n        enable_if_t<conjunction_v<is_convertible<_Ty2*, pointer>, is_same<_Dx, default_delete<_Ty>>>, int> = 0>\r\n    unique_ptr(auto_ptr<_Ty2>&& _Right) noexcept : _Mypair(_Zero_then_variadic_args_t{}, _Right.release()) {}\r\n#endif // _HAS_AUTO_PTR_ETC\r\n\r\n    template <class _Ty2, class _Dx2,\r\n        enable_if_t<conjunction_v<negation<is_array<_Ty2>>, is_assignable<_Dx&, _Dx2>,\r\n                        is_convertible<typename unique_ptr<_Ty2, _Dx2>::pointer, pointer>>,\r\n            int> = 0>\r\n    _CONSTEXPR23 unique_ptr& operator=(unique_ptr<_Ty2, _Dx2>&& _Right) noexcept {\r\n        reset(_Right.release());\r\n        _Mypair._Get_first() = _STD forward<_Dx2>(_Right._Mypair._Get_first());\r\n        return *this;\r\n    }\r\n\r\n    template <class _Dx2 = _Dx, enable_if_t<is_move_assignable_v<_Dx2>, int> = 0>\r\n    _CONSTEXPR23 unique_ptr& operator=(unique_ptr&& _Right) noexcept {\r\n        reset(_Right.release());\r\n        _Mypair._Get_first() = _STD forward<_Dx>(_Right._Mypair._Get_first());\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR23 void swap(unique_ptr& _Right) noexcept {\r\n        using _STD swap;\r\n        swap(_Mypair._Myval2, _Right._Mypair._Myval2); // intentional ADL\r\n        swap(_Mypair._Get_first(), _Right._Mypair._Get_first()); // intentional ADL\r\n    }\r\n\r\n    _CONSTEXPR23 ~unique_ptr() noexcept {\r\n        if (_Mypair._Myval2) {\r\n            _Mypair._Get_first()(_Mypair._Myval2);\r\n        }\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n        if constexpr (is_pointer_v<pointer>) {\r\n            if (!_STD _Is_constant_evaluated()) {\r\n                const auto _Tombstone{reinterpret_cast<pointer>(_MSVC_STL_UINTPTR_TOMBSTONE_VALUE)};\r\n                _Mypair._Myval2 = _Tombstone;\r\n            }\r\n        }\r\n#endif // _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 _Dx& get_deleter() noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 const _Dx& get_deleter() const noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 add_lvalue_reference_t<_Ty> operator*() const noexcept(noexcept(*_STD declval<pointer>())) {\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n        static_assert(\r\n            !reference_converts_from_temporary_v<add_lvalue_reference_t<_Ty>, decltype(*_STD declval<pointer>())>,\r\n            \"Can't return a temporary object from unique_ptr::operator*(). (N5014 [unique.ptr.single.observers]/1)\");\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n        return *_Mypair._Myval2;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 pointer operator->() const noexcept {\r\n        return _Mypair._Myval2;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 pointer get() const noexcept {\r\n        return _Mypair._Myval2;\r\n    }\r\n\r\n    _CONSTEXPR23 explicit operator bool() const noexcept {\r\n        return static_cast<bool>(_Mypair._Myval2);\r\n    }\r\n\r\n    _CONSTEXPR23 pointer release() noexcept {\r\n        return _STD exchange(_Mypair._Myval2, nullptr);\r\n    }\r\n\r\n    _CONSTEXPR23 void reset(pointer _Ptr = nullptr) noexcept {\r\n        pointer _Old = _STD exchange(_Mypair._Myval2, _Ptr);\r\n        if (_Old) {\r\n            _Mypair._Get_first()(_Old);\r\n        }\r\n    }\r\n\r\n    unique_ptr(const unique_ptr&)            = delete;\r\n    unique_ptr& operator=(const unique_ptr&) = delete;\r\n\r\nprivate:\r\n    template <class, class>\r\n    friend class unique_ptr;\r\n\r\n    _Compressed_pair<_Dx, pointer> _Mypair;\r\n};\r\n\r\ntemplate <class _Ty, class _Dx>\r\nclass unique_ptr<_Ty[], _Dx> { // non-copyable pointer to an array object\r\npublic:\r\n    using pointer      = typename _Get_deleter_pointer_type<_Ty, remove_reference_t<_Dx>>::type;\r\n    using element_type = _Ty;\r\n    using deleter_type = _Dx;\r\n\r\n    template <class _Dx2 = _Dx, _Unique_ptr_enable_default_t<_Dx2> = 0>\r\n    constexpr unique_ptr() noexcept : _Mypair(_Zero_then_variadic_args_t{}) {}\r\n\r\n    template <class _Uty, class _Is_nullptr = is_null_pointer<_Uty>>\r\n    using _Enable_ctor_reset =\r\n        enable_if_t<is_same_v<_Uty, pointer> || _Is_nullptr::value\r\n                        || (is_same_v<pointer, element_type*> && is_pointer_v<_Uty>\r\n                            && is_convertible_v<remove_pointer_t<_Uty> (*)[], element_type (*)[]>),\r\n            int>;\r\n\r\n    template <class _Uty, class _Dx2 = _Dx, _Unique_ptr_enable_default_t<_Dx2> = 0, _Enable_ctor_reset<_Uty> = 0>\r\n    _CONSTEXPR23 explicit unique_ptr(_Uty _Ptr) noexcept : _Mypair(_Zero_then_variadic_args_t{}, _Ptr) {}\r\n\r\n    template <class _Uty, class _Dx2 = _Dx, enable_if_t<is_constructible_v<_Dx2, const _Dx2&>, int> = 0,\r\n        _Enable_ctor_reset<_Uty> = 0>\r\n    _CONSTEXPR23 unique_ptr(_Uty _Ptr, const _Dx& _Dt) noexcept : _Mypair(_One_then_variadic_args_t{}, _Dt, _Ptr) {}\r\n\r\n    template <class _Uty, class _Dx2 = _Dx,\r\n        enable_if_t<conjunction_v<negation<is_reference<_Dx2>>, is_constructible<_Dx2, _Dx2>>, int> = 0,\r\n        _Enable_ctor_reset<_Uty>                                                                    = 0>\r\n    _CONSTEXPR23 unique_ptr(_Uty _Ptr, _Dx&& _Dt) noexcept\r\n        : _Mypair(_One_then_variadic_args_t{}, _STD move(_Dt), _Ptr) {}\r\n\r\n    template <class _Uty, class _Dx2 = _Dx,\r\n        enable_if_t<conjunction_v<is_reference<_Dx2>, is_constructible<_Dx2, remove_reference_t<_Dx2>>>, int> = 0>\r\n    unique_ptr(_Uty, remove_reference_t<_Dx>&&) = delete;\r\n\r\n    template <class _Dx2 = _Dx, enable_if_t<is_move_constructible_v<_Dx2>, int> = 0>\r\n    _CONSTEXPR23 unique_ptr(unique_ptr&& _Right) noexcept\r\n        : _Mypair(_One_then_variadic_args_t{}, _STD forward<_Dx>(_Right.get_deleter()), _Right.release()) {}\r\n\r\n    template <class _Dx2 = _Dx, enable_if_t<is_move_assignable_v<_Dx2>, int> = 0>\r\n    _CONSTEXPR23 unique_ptr& operator=(unique_ptr&& _Right) noexcept {\r\n        if (this != _STD addressof(_Right)) {\r\n            reset(_Right.release());\r\n            _Mypair._Get_first() = _STD move(_Right._Mypair._Get_first());\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    template <class _Uty, class _Ex, class _More, class _UP_pointer = typename unique_ptr<_Uty, _Ex>::pointer,\r\n        class _UP_element_type = typename unique_ptr<_Uty, _Ex>::element_type>\r\n    using _Enable_conversion = enable_if_t<\r\n        conjunction_v<is_array<_Uty>, is_same<pointer, element_type*>, is_same<_UP_pointer, _UP_element_type*>,\r\n            is_convertible<_UP_element_type (*)[], element_type (*)[]>, _More>,\r\n        int>;\r\n\r\n    template <class _Uty, class _Ex,\r\n        _Enable_conversion<_Uty, _Ex, conditional_t<is_reference_v<_Dx>, is_same<_Ex, _Dx>, is_convertible<_Ex, _Dx>>> =\r\n            0>\r\n    _CONSTEXPR23 unique_ptr(unique_ptr<_Uty, _Ex>&& _Right) noexcept\r\n        : _Mypair(_One_then_variadic_args_t{}, _STD forward<_Ex>(_Right.get_deleter()), _Right.release()) {}\r\n\r\n    template <class _Uty, class _Ex, _Enable_conversion<_Uty, _Ex, is_assignable<_Dx&, _Ex>> = 0>\r\n    _CONSTEXPR23 unique_ptr& operator=(unique_ptr<_Uty, _Ex>&& _Right) noexcept {\r\n        reset(_Right.release());\r\n        _Mypair._Get_first() = _STD forward<_Ex>(_Right._Mypair._Get_first());\r\n        return *this;\r\n    }\r\n\r\n    template <class _Dx2 = _Dx, _Unique_ptr_enable_default_t<_Dx2> = 0>\r\n    constexpr unique_ptr(nullptr_t) noexcept : _Mypair(_Zero_then_variadic_args_t{}) {}\r\n\r\n    _CONSTEXPR23 unique_ptr& operator=(nullptr_t) noexcept {\r\n        reset();\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR23 void reset(nullptr_t = nullptr) noexcept {\r\n        reset(pointer());\r\n    }\r\n\r\n    _CONSTEXPR23 void swap(unique_ptr& _Right) noexcept {\r\n        using _STD swap;\r\n        swap(_Mypair._Myval2, _Right._Mypair._Myval2); // intentional ADL\r\n        swap(_Mypair._Get_first(), _Right._Mypair._Get_first()); // intentional ADL\r\n    }\r\n\r\n    _CONSTEXPR23 ~unique_ptr() noexcept {\r\n        if (_Mypair._Myval2) {\r\n            _Mypair._Get_first()(_Mypair._Myval2);\r\n        }\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n        if constexpr (is_pointer_v<pointer>) {\r\n            if (!_STD _Is_constant_evaluated()) {\r\n                const auto _Tombstone{reinterpret_cast<pointer>(_MSVC_STL_UINTPTR_TOMBSTONE_VALUE)};\r\n                _Mypair._Myval2 = _Tombstone;\r\n            }\r\n        }\r\n#endif // _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 _Dx& get_deleter() noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 const _Dx& get_deleter() const noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 _Ty& operator[](size_t _Idx) const noexcept /* strengthened */ {\r\n        return _Mypair._Myval2[_Idx];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR23 pointer get() const noexcept {\r\n        return _Mypair._Myval2;\r\n    }\r\n\r\n    _CONSTEXPR23 explicit operator bool() const noexcept {\r\n        return static_cast<bool>(_Mypair._Myval2);\r\n    }\r\n\r\n    _CONSTEXPR23 pointer release() noexcept {\r\n        return _STD exchange(_Mypair._Myval2, nullptr);\r\n    }\r\n\r\n    template <class _Uty, _Enable_ctor_reset<_Uty, false_type> = 0>\r\n    _CONSTEXPR23 void reset(_Uty _Ptr) noexcept {\r\n        pointer _Old = _STD exchange(_Mypair._Myval2, _Ptr);\r\n        if (_Old) {\r\n            _Mypair._Get_first()(_Old);\r\n        }\r\n    }\r\n\r\n    unique_ptr(const unique_ptr&)            = delete;\r\n    unique_ptr& operator=(const unique_ptr&) = delete;\r\n\r\nprivate:\r\n    template <class, class>\r\n    friend class unique_ptr;\r\n\r\n    _Compressed_pair<_Dx, pointer> _Mypair;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, class... _Types, enable_if_t<!is_array_v<_Ty>, int> = 0>\r\n_NODISCARD_SMART_PTR_ALLOC _CONSTEXPR23 unique_ptr<_Ty> make_unique(_Types&&... _Args) { // make a unique_ptr\r\n    return unique_ptr<_Ty>(new _Ty(_STD forward<_Types>(_Args)...));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, enable_if_t<is_array_v<_Ty> && extent_v<_Ty> == 0, int> = 0>\r\n_NODISCARD_SMART_PTR_ALLOC _CONSTEXPR23 unique_ptr<_Ty> make_unique(const size_t _Size) { // make a unique_ptr\r\n    using _Elem = remove_extent_t<_Ty>;\r\n    return unique_ptr<_Ty>(new _Elem[_Size]());\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class... _Types, enable_if_t<extent_v<_Ty> != 0, int> = 0>\r\nvoid make_unique(_Types&&...) = delete;\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <_Not_builtin_array _Ty>\r\n_NODISCARD_SMART_PTR_ALLOC _CONSTEXPR23 unique_ptr<_Ty> make_unique_for_overwrite() {\r\n    // make a unique_ptr with default initialization\r\n    return unique_ptr<_Ty>(new _Ty);\r\n}\r\n\r\n_EXPORT_STD template <_Unbounded_builtin_array _Ty>\r\n_NODISCARD_SMART_PTR_ALLOC _CONSTEXPR23 unique_ptr<_Ty> make_unique_for_overwrite(const size_t _Size) {\r\n    // make a unique_ptr with default initialization\r\n    using _Elem = remove_extent_t<_Ty>;\r\n    return unique_ptr<_Ty>(new _Elem[_Size]);\r\n}\r\n\r\n_EXPORT_STD template <_Bounded_builtin_array _Ty, class... _Types>\r\nvoid make_unique_for_overwrite(_Types&&...) = delete;\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty, class _Dx, enable_if_t<_Is_swappable<_Dx>::value, int> = 0>\r\n_CONSTEXPR23 void swap(unique_ptr<_Ty, _Dx>& _Left, unique_ptr<_Ty, _Dx>& _Right) noexcept {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Dx1, class _Ty2, class _Dx2>\r\n_NODISCARD _CONSTEXPR23 bool operator==(const unique_ptr<_Ty1, _Dx1>& _Left, const unique_ptr<_Ty2, _Dx2>& _Right) {\r\n    return _Left.get() == _Right.get();\r\n}\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _Ty1, class _Dx1, class _Ty2, class _Dx2>\r\n_NODISCARD bool operator!=(const unique_ptr<_Ty1, _Dx1>& _Left, const unique_ptr<_Ty2, _Dx2>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n#endif // !_HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty1, class _Dx1, class _Ty2, class _Dx2>\r\n_NODISCARD bool operator<(const unique_ptr<_Ty1, _Dx1>& _Left, const unique_ptr<_Ty2, _Dx2>& _Right) {\r\n    using _Ptr1   = typename unique_ptr<_Ty1, _Dx1>::pointer;\r\n    using _Ptr2   = typename unique_ptr<_Ty2, _Dx2>::pointer;\r\n    using _Common = common_type_t<_Ptr1, _Ptr2>;\r\n    return less<_Common>{}(_Left.get(), _Right.get());\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Dx1, class _Ty2, class _Dx2>\r\n_NODISCARD bool operator>=(const unique_ptr<_Ty1, _Dx1>& _Left, const unique_ptr<_Ty2, _Dx2>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Dx1, class _Ty2, class _Dx2>\r\n_NODISCARD bool operator>(const unique_ptr<_Ty1, _Dx1>& _Left, const unique_ptr<_Ty2, _Dx2>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Dx1, class _Ty2, class _Dx2>\r\n_NODISCARD bool operator<=(const unique_ptr<_Ty1, _Dx1>& _Left, const unique_ptr<_Ty2, _Dx2>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty1, class _Dx1, class _Ty2, class _Dx2>\r\n    requires three_way_comparable_with<typename unique_ptr<_Ty1, _Dx1>::pointer,\r\n        typename unique_ptr<_Ty2, _Dx2>::pointer>\r\n_NODISCARD\r\n    compare_three_way_result_t<typename unique_ptr<_Ty1, _Dx1>::pointer, typename unique_ptr<_Ty2, _Dx2>::pointer>\r\n    operator<=>(const unique_ptr<_Ty1, _Dx1>& _Left, const unique_ptr<_Ty2, _Dx2>& _Right) {\r\n    return _Left.get() <=> _Right.get();\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty, class _Dx>\r\n_NODISCARD _CONSTEXPR23 bool operator==(const unique_ptr<_Ty, _Dx>& _Left, nullptr_t) noexcept {\r\n    return !_Left;\r\n}\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _Ty, class _Dx>\r\n_NODISCARD bool operator==(nullptr_t, const unique_ptr<_Ty, _Dx>& _Right) noexcept {\r\n    return !_Right;\r\n}\r\n\r\ntemplate <class _Ty, class _Dx>\r\n_NODISCARD bool operator!=(const unique_ptr<_Ty, _Dx>& _Left, nullptr_t) noexcept {\r\n    return !(_Left == nullptr);\r\n}\r\n\r\ntemplate <class _Ty, class _Dx>\r\n_NODISCARD bool operator!=(nullptr_t, const unique_ptr<_Ty, _Dx>& _Right) noexcept {\r\n    return !(nullptr == _Right);\r\n}\r\n#endif // !_HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty, class _Dx>\r\n_NODISCARD _CONSTEXPR23 bool operator<(const unique_ptr<_Ty, _Dx>& _Left, nullptr_t) {\r\n    using _Ptr = typename unique_ptr<_Ty, _Dx>::pointer;\r\n    return less<_Ptr>{}(_Left.get(), nullptr);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Dx>\r\n_NODISCARD _CONSTEXPR23 bool operator<(nullptr_t, const unique_ptr<_Ty, _Dx>& _Right) {\r\n    using _Ptr = typename unique_ptr<_Ty, _Dx>::pointer;\r\n    return less<_Ptr>{}(nullptr, _Right.get());\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Dx>\r\n_NODISCARD _CONSTEXPR23 bool operator>=(const unique_ptr<_Ty, _Dx>& _Left, nullptr_t) {\r\n    return !(_Left < nullptr);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Dx>\r\n_NODISCARD _CONSTEXPR23 bool operator>=(nullptr_t, const unique_ptr<_Ty, _Dx>& _Right) {\r\n    return !(nullptr < _Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Dx>\r\n_NODISCARD _CONSTEXPR23 bool operator>(const unique_ptr<_Ty, _Dx>& _Left, nullptr_t) {\r\n    return nullptr < _Left;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Dx>\r\n_NODISCARD _CONSTEXPR23 bool operator>(nullptr_t, const unique_ptr<_Ty, _Dx>& _Right) {\r\n    return _Right < nullptr;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Dx>\r\n_NODISCARD _CONSTEXPR23 bool operator<=(const unique_ptr<_Ty, _Dx>& _Left, nullptr_t) {\r\n    return !(nullptr < _Left);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Dx>\r\n_NODISCARD _CONSTEXPR23 bool operator<=(nullptr_t, const unique_ptr<_Ty, _Dx>& _Right) {\r\n    return !(_Right < nullptr);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty, class _Dx>\r\n    requires three_way_comparable<typename unique_ptr<_Ty, _Dx>::pointer>\r\n_NODISCARD _CONSTEXPR23 compare_three_way_result_t<typename unique_ptr<_Ty, _Dx>::pointer> operator<=>(\r\n    const unique_ptr<_Ty, _Dx>& _Left, nullptr_t) {\r\n    return _Left.get() <=> static_cast<typename unique_ptr<_Ty, _Dx>::pointer>(nullptr);\r\n}\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _OutTy, class _PxTy, class = void>\r\nstruct _Can_stream_unique_ptr : false_type {};\r\ntemplate <class _OutTy, class _PxTy>\r\nstruct _Can_stream_unique_ptr<_OutTy, _PxTy, void_t<decltype(_STD declval<_OutTy>() << _STD declval<_PxTy>().get())>>\r\n    : true_type {};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Yty, class _Dx,\r\n    enable_if_t<_Can_stream_unique_ptr<basic_ostream<_Elem, _Traits>&, const unique_ptr<_Yty, _Dx>&>::value, int> = 0>\r\nbasic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Out, const unique_ptr<_Yty, _Dx>& _Px) {\r\n    // write contained pointer to stream\r\n    _Out << _Px.get();\r\n    return _Out;\r\n}\r\n\r\n#if _HAS_GARBAGE_COLLECTION_SUPPORT_DELETED_IN_CXX23\r\n_EXPORT_STD enum class pointer_safety { relaxed, preferred, strict };\r\n\r\n_EXPORT_STD inline void declare_reachable(void*) {}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_Ty* undeclare_reachable(_Ty* _Ptr) {\r\n    return _Ptr;\r\n}\r\n\r\n_EXPORT_STD inline void declare_no_pointers(char*, size_t) {}\r\n\r\n_EXPORT_STD inline void undeclare_no_pointers(char*, size_t) {}\r\n\r\n_EXPORT_STD inline pointer_safety get_pointer_safety() noexcept {\r\n    return pointer_safety::relaxed;\r\n}\r\n#endif // _HAS_GARBAGE_COLLECTION_SUPPORT_DELETED_IN_CXX23\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct owner_less; // not defined\r\n\r\ntemplate <class _Ty>\r\nstruct owner_less<shared_ptr<_Ty>> {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = shared_ptr<_Ty>;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = shared_ptr<_Ty>;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = bool;\r\n\r\n    _NODISCARD bool operator()(const shared_ptr<_Ty>& _Left, const shared_ptr<_Ty>& _Right) const noexcept {\r\n        return _Left.owner_before(_Right);\r\n    }\r\n\r\n    _NODISCARD bool operator()(const shared_ptr<_Ty>& _Left, const weak_ptr<_Ty>& _Right) const noexcept {\r\n        return _Left.owner_before(_Right);\r\n    }\r\n\r\n    _NODISCARD bool operator()(const weak_ptr<_Ty>& _Left, const shared_ptr<_Ty>& _Right) const noexcept {\r\n        return _Left.owner_before(_Right);\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct owner_less<weak_ptr<_Ty>> {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = weak_ptr<_Ty>;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = weak_ptr<_Ty>;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = bool;\r\n\r\n    _NODISCARD bool operator()(const weak_ptr<_Ty>& _Left, const weak_ptr<_Ty>& _Right) const noexcept {\r\n        return _Left.owner_before(_Right);\r\n    }\r\n\r\n    _NODISCARD bool operator()(const weak_ptr<_Ty>& _Left, const shared_ptr<_Ty>& _Right) const noexcept {\r\n        return _Left.owner_before(_Right);\r\n    }\r\n\r\n    _NODISCARD bool operator()(const shared_ptr<_Ty>& _Left, const weak_ptr<_Ty>& _Right) const noexcept {\r\n        return _Left.owner_before(_Right);\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct owner_less<void> {\r\n    template <class _Ty, class _Uty>\r\n    _NODISCARD bool operator()(const shared_ptr<_Ty>& _Left, const shared_ptr<_Uty>& _Right) const noexcept {\r\n        return _Left.owner_before(_Right);\r\n    }\r\n\r\n    template <class _Ty, class _Uty>\r\n    _NODISCARD bool operator()(const shared_ptr<_Ty>& _Left, const weak_ptr<_Uty>& _Right) const noexcept {\r\n        return _Left.owner_before(_Right);\r\n    }\r\n\r\n    template <class _Ty, class _Uty>\r\n    _NODISCARD bool operator()(const weak_ptr<_Ty>& _Left, const shared_ptr<_Uty>& _Right) const noexcept {\r\n        return _Left.owner_before(_Right);\r\n    }\r\n\r\n    template <class _Ty, class _Uty>\r\n    _NODISCARD bool operator()(const weak_ptr<_Ty>& _Left, const weak_ptr<_Uty>& _Right) const noexcept {\r\n        return _Left.owner_before(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <class _Ty, class _Dx>\r\nstruct hash<unique_ptr<_Ty, _Dx>> : _Conditionally_enabled_hash<unique_ptr<_Ty, _Dx>,\r\n                                        is_default_constructible_v<hash<typename unique_ptr<_Ty, _Dx>::pointer>>> {\r\n    static size_t _Do_hash(const unique_ptr<_Ty, _Dx>& _Keyval)\r\n        noexcept(_Is_nothrow_hashable<typename unique_ptr<_Ty, _Dx>::pointer>::value) {\r\n        return hash<typename unique_ptr<_Ty, _Dx>::pointer>{}(_Keyval.get());\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct hash<shared_ptr<_Ty>> {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = shared_ptr<_Ty>;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = size_t;\r\n\r\n    _NODISCARD static size_t operator()(const shared_ptr<_Ty>& _Keyval) noexcept {\r\n        return hash<typename shared_ptr<_Ty>::element_type*>()(_Keyval.get());\r\n    }\r\n};\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <size_t _Nx, class _Ty>\r\n_NODISCARD_ASSUME_ALIGNED constexpr _Ty* assume_aligned(_Ty* const _Ptr) noexcept /* strengthened */ {\r\n    if (_STD is_constant_evaluated()) {\r\n        return _Ptr;\r\n    } else {\r\n        // this enforces the requirement that _Nx be a power of two\r\n        return static_cast<_Ty*>(__builtin_assume_aligned(_Ptr, _Nx));\r\n    }\r\n}\r\n#endif // _HAS_CXX20\r\n\r\nextern \"C\" {\r\n_CRTIMP2_PURE void __cdecl _Lock_shared_ptr_spin_lock() noexcept;\r\n_CRTIMP2_PURE void __cdecl _Unlock_shared_ptr_spin_lock() noexcept;\r\n} // extern \"C\"\r\n\r\nstruct _Shared_ptr_spin_lock { // class to manage a spin lock for shared_ptr atomic operations\r\n    _Shared_ptr_spin_lock() noexcept { // lock the spin lock\r\n        _Lock_shared_ptr_spin_lock();\r\n    }\r\n\r\n    ~_Shared_ptr_spin_lock() noexcept { // unlock the spin lock\r\n        _Unlock_shared_ptr_spin_lock();\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT _NODISCARD bool atomic_is_lock_free(const shared_ptr<_Ty>*) {\r\n    // return true if atomic operations on shared_ptr<_Ty> are lock-free\r\n    return false;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT _NODISCARD shared_ptr<_Ty> atomic_load_explicit(\r\n    const shared_ptr<_Ty>* _Ptr, memory_order) {\r\n    // load *_Ptr atomically\r\n    _Shared_ptr_spin_lock _Lock;\r\n    shared_ptr<_Ty> _Result = *_Ptr;\r\n    return _Result;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT _NODISCARD shared_ptr<_Ty> atomic_load(\r\n    const shared_ptr<_Ty>* _Ptr) { // load *_Ptr atomically\r\n    return _STD atomic_load_explicit(_Ptr, memory_order_seq_cst);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT void atomic_store_explicit(\r\n    shared_ptr<_Ty>* _Ptr, shared_ptr<_Ty> _Other, memory_order) {\r\n    // store _Other to *_Ptr atomically\r\n    _Shared_ptr_spin_lock _Lock;\r\n    _Ptr->swap(_Other);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT void atomic_store(\r\n    shared_ptr<_Ty>* _Ptr, shared_ptr<_Ty> _Other) { // store _Other to *_Ptr atomically\r\n    _STD atomic_store_explicit(_Ptr, _STD move(_Other), memory_order_seq_cst);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT shared_ptr<_Ty> atomic_exchange_explicit(\r\n    shared_ptr<_Ty>* _Ptr, shared_ptr<_Ty> _Other, memory_order) {\r\n    // copy _Other to *_Ptr and return previous value of *_Ptr atomically\r\n    _Shared_ptr_spin_lock _Lock;\r\n    _Ptr->swap(_Other);\r\n    return _Other;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT shared_ptr<_Ty> atomic_exchange(\r\n    shared_ptr<_Ty>* _Ptr, shared_ptr<_Ty> _Other) {\r\n    // copy _Other to *_Ptr and return previous value of *_Ptr atomically\r\n    return _STD atomic_exchange_explicit(_Ptr, _STD move(_Other), memory_order_seq_cst);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT bool atomic_compare_exchange_weak_explicit(shared_ptr<_Ty>* _Ptr,\r\n    shared_ptr<_Ty>* _Exp, shared_ptr<_Ty> _Value, memory_order, memory_order) { // atomically compare and exchange\r\n    shared_ptr<_Ty> _Old_exp; // destroyed outside spin lock\r\n    _Shared_ptr_spin_lock _Lock;\r\n    bool _Success = _Ptr->get() == _Exp->get() && !_Ptr->owner_before(*_Exp) && !_Exp->owner_before(*_Ptr);\r\n    if (_Success) {\r\n        _Ptr->swap(_Value);\r\n    } else { // match failed\r\n        _Exp->swap(_Old_exp);\r\n        *_Exp = *_Ptr;\r\n    }\r\n    return _Success;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT bool atomic_compare_exchange_weak(\r\n    shared_ptr<_Ty>* _Ptr, shared_ptr<_Ty>* _Exp, shared_ptr<_Ty> _Value) {\r\n    // atomically compare and exchange\r\n    return _STD atomic_compare_exchange_weak_explicit(\r\n        _Ptr, _Exp, _STD move(_Value), memory_order_seq_cst, memory_order_seq_cst);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT bool atomic_compare_exchange_strong_explicit(shared_ptr<_Ty>* _Ptr,\r\n    shared_ptr<_Ty>* _Exp, shared_ptr<_Ty> _Value, memory_order, memory_order) { // atomically compare and exchange\r\n    return _STD atomic_compare_exchange_weak_explicit(\r\n        _Ptr, _Exp, _STD move(_Value), memory_order_seq_cst, memory_order_seq_cst);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT bool atomic_compare_exchange_strong(\r\n    shared_ptr<_Ty>* _Ptr, shared_ptr<_Ty>* _Exp, shared_ptr<_Ty> _Value) {\r\n    // atomically compare and exchange\r\n    return _STD atomic_compare_exchange_strong_explicit(\r\n        _Ptr, _Exp, _STD move(_Value), memory_order_seq_cst, memory_order_seq_cst);\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty>\r\nclass alignas(2 * sizeof(void*)) _Atomic_ptr_base {\r\n    // overalignment is to allow potential future use of cmpxchg16b\r\nprotected:\r\n    constexpr _Atomic_ptr_base() noexcept = default;\r\n\r\n    _Atomic_ptr_base(remove_extent_t<_Ty>* const _Px, _Ref_count_base* const _Ref) noexcept\r\n        : _Ptr(_Px), _Repptr(_Ref) {}\r\n\r\n    void _Wait(remove_extent_t<_Ty>* _Old_ptr, _Ref_count_base* const _Old_rep, memory_order) const noexcept {\r\n        unsigned long _Remaining_timeout = 16; // milliseconds\r\n        const unsigned long _Max_timeout = 1048576; // milliseconds, ~17.5 minutes\r\n        for (;;) {\r\n            auto _Rep   = _Repptr._Lock_and_load();\r\n            bool _Equal = _Ptr.load(memory_order_relaxed) == _Old_ptr && _Rep == _Old_rep;\r\n            _Repptr._Store_and_unlock(_Rep);\r\n            if (!_Equal) {\r\n                break;\r\n            }\r\n            ::__std_atomic_wait_direct(\r\n                _STD addressof(_Ptr), _STD addressof(_Old_ptr), sizeof(_Old_ptr), _Remaining_timeout);\r\n            _Remaining_timeout = (_STD min) (_Max_timeout, _Remaining_timeout * 2);\r\n        }\r\n    }\r\n\r\n    void notify_one() noexcept {\r\n        _Ptr.notify_one();\r\n    }\r\n\r\n    void notify_all() noexcept {\r\n        _Ptr.notify_all();\r\n    }\r\n\r\n    atomic<remove_extent_t<_Ty>*> _Ptr{nullptr};\r\n    mutable _Locked_pointer<_Ref_count_base> _Repptr;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct atomic<shared_ptr<_Ty>> : private _Atomic_ptr_base<_Ty> {\r\nprivate:\r\n    using _Base = _Atomic_ptr_base<_Ty>;\r\n\r\npublic:\r\n    using value_type = shared_ptr<_Ty>;\r\n\r\n    static constexpr bool is_always_lock_free = false;\r\n\r\n    _NODISCARD bool is_lock_free() const noexcept {\r\n        return false;\r\n    }\r\n\r\n    void store(shared_ptr<_Ty> _Value, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        _Check_store_memory_order(_Order);\r\n        const auto _Rep                  = this->_Repptr._Lock_and_load();\r\n        remove_extent_t<_Ty>* const _Tmp = _Value._Ptr;\r\n        _Value._Ptr                      = this->_Ptr.load(memory_order_relaxed);\r\n        this->_Ptr.store(_Tmp, memory_order_relaxed);\r\n        this->_Repptr._Store_and_unlock(_Value._Rep);\r\n        _Value._Rep = _Rep;\r\n    }\r\n\r\n    _NODISCARD shared_ptr<_Ty> load(const memory_order _Order = memory_order_seq_cst) const noexcept {\r\n        _Check_load_memory_order(_Order);\r\n        shared_ptr<_Ty> _Result;\r\n        const auto _Rep = this->_Repptr._Lock_and_load();\r\n        _Result._Ptr    = this->_Ptr.load(memory_order_relaxed);\r\n        _Result._Rep    = _Rep;\r\n        _Result._Incref();\r\n        this->_Repptr._Store_and_unlock(_Rep);\r\n        return _Result;\r\n    }\r\n\r\n    operator shared_ptr<_Ty>() const noexcept {\r\n        return load();\r\n    }\r\n\r\n    shared_ptr<_Ty> exchange(shared_ptr<_Ty> _Value, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        _Check_memory_order(static_cast<unsigned int>(_Order));\r\n        shared_ptr<_Ty> _Result;\r\n        _Result._Rep = this->_Repptr._Lock_and_load();\r\n        _Result._Ptr = this->_Ptr.load(memory_order_relaxed);\r\n        this->_Ptr.store(_Value._Ptr, memory_order_relaxed);\r\n        this->_Repptr._Store_and_unlock(_Value._Rep);\r\n        _Value._Ptr = nullptr; // ownership of _Value ref has been given to this, silence decrement\r\n        _Value._Rep = nullptr;\r\n        return _Result;\r\n    }\r\n\r\n    bool compare_exchange_weak(shared_ptr<_Ty>& _Expected, shared_ptr<_Ty> _Desired, const memory_order _Success,\r\n        const memory_order _Failure) noexcept {\r\n        return compare_exchange_strong(_Expected, _STD move(_Desired), _Combine_cas_memory_orders(_Success, _Failure));\r\n    }\r\n\r\n    bool compare_exchange_strong(shared_ptr<_Ty>& _Expected, shared_ptr<_Ty> _Desired, const memory_order _Success,\r\n        const memory_order _Failure) noexcept {\r\n        return compare_exchange_strong(_Expected, _STD move(_Desired), _Combine_cas_memory_orders(_Success, _Failure));\r\n    }\r\n\r\n    bool compare_exchange_weak(shared_ptr<_Ty>& _Expected, shared_ptr<_Ty> _Desired,\r\n        const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        return compare_exchange_strong(_Expected, _STD move(_Desired), _Order);\r\n    }\r\n\r\n    bool compare_exchange_strong(shared_ptr<_Ty>& _Expected, shared_ptr<_Ty> _Desired,\r\n        const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        _Check_memory_order(static_cast<unsigned int>(_Order));\r\n        auto _Rep = this->_Repptr._Lock_and_load();\r\n        if (this->_Ptr.load(memory_order_relaxed) == _Expected._Ptr && _Rep == _Expected._Rep) {\r\n            remove_extent_t<_Ty>* const _Tmp = _Desired._Ptr;\r\n            _Desired._Ptr                    = this->_Ptr.load(memory_order_relaxed);\r\n            this->_Ptr.store(_Tmp, memory_order_relaxed);\r\n            _STD swap(_Rep, _Desired._Rep);\r\n            this->_Repptr._Store_and_unlock(_Rep);\r\n            return true;\r\n        }\r\n        _Ref_count_base* _Expected_rep = _Expected._Rep;\r\n        _Expected._Ptr                 = this->_Ptr.load(memory_order_relaxed);\r\n        _Expected._Rep                 = _Rep;\r\n        _Expected._Incref();\r\n        this->_Repptr._Store_and_unlock(_Rep);\r\n        if (_Expected_rep) {\r\n            _Expected_rep->_Decref();\r\n        }\r\n        return false;\r\n    }\r\n\r\n    void wait(shared_ptr<_Ty> _Old, memory_order _Order = memory_order_seq_cst) const noexcept {\r\n        this->_Wait(_Old._Ptr, _Old._Rep, _Order);\r\n    }\r\n\r\n    using _Base::notify_all;\r\n    using _Base::notify_one;\r\n\r\n    constexpr atomic() noexcept = default;\r\n\r\n    constexpr atomic(nullptr_t) noexcept : atomic() {}\r\n\r\n    atomic(const shared_ptr<_Ty> _Value) noexcept : _Base(_Value._Ptr, _Value._Rep) {\r\n        _Value._Incref();\r\n    }\r\n\r\n    atomic(const atomic&)         = delete;\r\n    void operator=(const atomic&) = delete;\r\n\r\n    void operator=(shared_ptr<_Ty> _Value) noexcept {\r\n        store(_STD move(_Value));\r\n    }\r\n\r\n    void operator=(nullptr_t) noexcept {\r\n        store(nullptr);\r\n    }\r\n\r\n    ~atomic() {\r\n        const auto _Rep = this->_Repptr._Unsafe_load_relaxed();\r\n        if (_Rep) {\r\n            _Rep->_Decref();\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct atomic<weak_ptr<_Ty>> : private _Atomic_ptr_base<_Ty> {\r\nprivate:\r\n    using _Base = _Atomic_ptr_base<_Ty>;\r\n\r\npublic:\r\n    using value_type = weak_ptr<_Ty>;\r\n\r\n    static constexpr bool is_always_lock_free = false;\r\n\r\n    _NODISCARD bool is_lock_free() const noexcept {\r\n        return false;\r\n    }\r\n\r\n    void store(weak_ptr<_Ty> _Value, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        _Check_store_memory_order(_Order);\r\n        const auto _Rep                  = this->_Repptr._Lock_and_load();\r\n        remove_extent_t<_Ty>* const _Tmp = _Value._Ptr;\r\n        _Value._Ptr                      = this->_Ptr.load(memory_order_relaxed);\r\n        this->_Ptr.store(_Tmp, memory_order_relaxed);\r\n        this->_Repptr._Store_and_unlock(_Value._Rep);\r\n        _Value._Rep = _Rep;\r\n    }\r\n\r\n    _NODISCARD weak_ptr<_Ty> load(const memory_order _Order = memory_order_seq_cst) const noexcept {\r\n        _Check_load_memory_order(_Order);\r\n        weak_ptr<_Ty> _Result;\r\n        const auto _Rep = this->_Repptr._Lock_and_load();\r\n        _Result._Ptr    = this->_Ptr.load(memory_order_relaxed);\r\n        _Result._Rep    = _Rep;\r\n        _Result._Incwref();\r\n        this->_Repptr._Store_and_unlock(_Rep);\r\n        return _Result;\r\n    }\r\n\r\n    operator weak_ptr<_Ty>() const noexcept {\r\n        return load();\r\n    }\r\n\r\n    weak_ptr<_Ty> exchange(weak_ptr<_Ty> _Value, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        _Check_memory_order(static_cast<unsigned int>(_Order));\r\n        weak_ptr<_Ty> _Result;\r\n        _Result._Rep = this->_Repptr._Lock_and_load();\r\n        _Result._Ptr = this->_Ptr.load(memory_order_relaxed);\r\n        this->_Ptr.store(_Value._Ptr, memory_order_relaxed);\r\n        this->_Repptr._Store_and_unlock(_Value._Rep);\r\n        _Value._Ptr = nullptr; // ownership of _Value ref has been given to this, silence decrement\r\n        _Value._Rep = nullptr;\r\n        return _Result;\r\n    }\r\n\r\n    bool compare_exchange_weak(weak_ptr<_Ty>& _Expected, weak_ptr<_Ty> _Desired, const memory_order _Success,\r\n        const memory_order _Failure) noexcept {\r\n        return compare_exchange_strong(_Expected, _STD move(_Desired), _Combine_cas_memory_orders(_Success, _Failure));\r\n    }\r\n\r\n    bool compare_exchange_strong(weak_ptr<_Ty>& _Expected, weak_ptr<_Ty> _Desired, const memory_order _Success,\r\n        const memory_order _Failure) noexcept {\r\n        return compare_exchange_strong(_Expected, _STD move(_Desired), _Combine_cas_memory_orders(_Success, _Failure));\r\n    }\r\n\r\n    bool compare_exchange_weak(\r\n        weak_ptr<_Ty>& _Expected, weak_ptr<_Ty> _Desired, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        return compare_exchange_strong(_Expected, _STD move(_Desired), _Order);\r\n    }\r\n\r\n    bool compare_exchange_strong(\r\n        weak_ptr<_Ty>& _Expected, weak_ptr<_Ty> _Desired, const memory_order _Order = memory_order_seq_cst) noexcept {\r\n        _Check_memory_order(static_cast<unsigned int>(_Order));\r\n        auto _Rep = this->_Repptr._Lock_and_load();\r\n        if (this->_Ptr.load(memory_order_relaxed) == _Expected._Ptr && _Rep == _Expected._Rep) {\r\n            remove_extent_t<_Ty>* const _Tmp = _Desired._Ptr;\r\n            _Desired._Ptr                    = this->_Ptr.load(memory_order_relaxed);\r\n            this->_Ptr.store(_Tmp, memory_order_relaxed);\r\n            _STD swap(_Rep, _Desired._Rep);\r\n            this->_Repptr._Store_and_unlock(_Rep);\r\n            return true;\r\n        }\r\n        const auto _Expected_rep = _Expected._Rep;\r\n        _Expected._Ptr           = this->_Ptr.load(memory_order_relaxed);\r\n        _Expected._Rep           = _Rep;\r\n        _Expected._Incwref();\r\n        this->_Repptr._Store_and_unlock(_Rep);\r\n        if (_Expected_rep) {\r\n            _Expected_rep->_Decwref();\r\n        }\r\n        return false;\r\n    }\r\n\r\n    void wait(weak_ptr<_Ty> _Old, memory_order _Order = memory_order_seq_cst) const noexcept {\r\n        this->_Wait(_Old._Ptr, _Old._Rep, _Order);\r\n    }\r\n\r\n    using _Base::notify_all;\r\n    using _Base::notify_one;\r\n\r\n    constexpr atomic() noexcept = default;\r\n\r\n    atomic(const weak_ptr<_Ty> _Value) noexcept : _Base(_Value._Ptr, _Value._Rep) {\r\n        _Value._Incwref();\r\n    }\r\n\r\n    atomic(const atomic&)         = delete;\r\n    void operator=(const atomic&) = delete;\r\n\r\n    void operator=(weak_ptr<_Ty> _Value) noexcept {\r\n        store(_STD move(_Value));\r\n    }\r\n\r\n    ~atomic() {\r\n        const auto _Rep = this->_Repptr._Unsafe_load_relaxed();\r\n        if (_Rep) {\r\n            _Rep->_Decwref();\r\n        }\r\n    }\r\n};\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Ty>\r\nstruct _Pointer_of_helper {};\r\n\r\ntemplate <_Has_member_pointer _Ty>\r\nstruct _Pointer_of_helper<_Ty> {\r\n    using type = _Ty::pointer;\r\n};\r\n\r\ntemplate <_Has_member_element_type _Ty>\r\n    requires (!_Has_member_pointer<_Ty>)\r\nstruct _Pointer_of_helper<_Ty> {\r\n    using type = _Ty::element_type*;\r\n};\r\n\r\ntemplate <class _Ty>\r\n    requires (\r\n        !_Has_member_element_type<_Ty> && !_Has_member_pointer<_Ty> && _Has_member_element_type<pointer_traits<_Ty>>)\r\nstruct _Pointer_of_helper<_Ty> {\r\n    using type = pointer_traits<_Ty>::element_type*;\r\n};\r\n\r\ntemplate <class _Ty>\r\nusing _Pointer_of = _Pointer_of_helper<_Ty>::type;\r\n\r\ntemplate <class _Ty, class _Uty>\r\nstruct _Pointer_of_or_helper {\r\n    using type = _Uty;\r\n};\r\n\r\ntemplate <class _Ty, class _Uty>\r\n    requires requires { typename _Pointer_of<_Ty>; }\r\nstruct _Pointer_of_or_helper<_Ty, _Uty> {\r\n    using type = _Pointer_of<_Ty>;\r\n};\r\n\r\ntemplate <class _Ty, class _Uty>\r\nusing _Pointer_of_or = _Pointer_of_or_helper<_Ty, _Uty>::type;\r\n\r\ntemplate <class _SmartPtr, class _Sp, class _Pointer, class... _ArgsT>\r\nconcept _Resettable_pointer = requires(_SmartPtr& _Smart_ptr, _Pointer _Ptr, _ArgsT&&... _Args) {\r\n    _Smart_ptr.reset(static_cast<_Sp>(_Ptr), _STD forward<_ArgsT>(_Args)...);\r\n};\r\n\r\n_EXPORT_STD template <class _SmartPtr, class _Pointer, class... _ArgsT>\r\nclass out_ptr_t {\r\n    static_assert(!_Is_specialization_v<_SmartPtr, shared_ptr> || sizeof...(_ArgsT) != 0,\r\n        \"out_ptr_t with shared_ptr requires a deleter (N4950 [out.ptr.t]/3)\");\r\n\r\npublic:\r\n    explicit out_ptr_t(_SmartPtr& _Smart_ptr_, _ArgsT... _Args_)\r\n        noexcept(is_nothrow_constructible_v<tuple<_ArgsT...>, _ArgsT...>) /* strengthened */\r\n        : _Smart_ptr(_Smart_ptr_),\r\n          _Mypair(_One_then_variadic_args_t{}, tuple<_ArgsT...>{_STD forward<_ArgsT>(_Args_)...}) {\r\n        if constexpr (requires { _Smart_ptr.reset(); }) {\r\n            _Smart_ptr.reset();\r\n        } else {\r\n            static_assert(is_constructible_v<_SmartPtr>, \"the adapted pointer type must be default constructible.\");\r\n            _Smart_ptr = _SmartPtr();\r\n        }\r\n    }\r\n\r\n    out_ptr_t(const out_ptr_t&) = delete;\r\n\r\n    ~out_ptr_t() {\r\n        if (!_Get_ptr()) {\r\n            return;\r\n        }\r\n\r\n        _STD apply(\r\n            [this](auto&&... _Args_) {\r\n                using _Sp = _Pointer_of_or<_SmartPtr, _Pointer>;\r\n                if constexpr (_Resettable_pointer<_SmartPtr, _Sp, _Pointer, _ArgsT...>) {\r\n                    _Smart_ptr.reset(static_cast<_Sp>(_Get_ptr()), _STD forward<_ArgsT>(_Args_)...);\r\n                } else {\r\n                    static_assert(is_constructible_v<_SmartPtr, _Sp, _ArgsT...>, \"(N4950 [out.ptr.t]/9.3)\");\r\n                    _Smart_ptr = _SmartPtr(static_cast<_Sp>(_Get_ptr()), _STD forward<_ArgsT>(_Args_)...);\r\n                }\r\n            },\r\n            _STD move(_Get_args()));\r\n    }\r\n\r\n    operator _Pointer*() const noexcept {\r\n        return _STD addressof(_Get_ptr());\r\n    }\r\n\r\n    operator void**() const noexcept\r\n        requires (!is_same_v<_Pointer, void*>)\r\n    {\r\n        static_assert(is_pointer_v<_Pointer>, \"conversion of out_ptr_t<Smart, Pointer, Args...> to void** requires \"\r\n                                              \"Pointer to be a raw pointer (N4950 [out.ptr.t]/13)\");\r\n        return reinterpret_cast<void**>(_STD addressof(_Get_ptr()));\r\n    }\r\n\r\nprivate:\r\n    _NODISCARD _Pointer& _Get_ptr() const noexcept {\r\n        return const_cast<_Pointer&>(_Mypair._Myval2);\r\n    }\r\n\r\n    _NODISCARD tuple<_ArgsT...>& _Get_args() noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    _SmartPtr& _Smart_ptr;\r\n    _Compressed_pair<tuple<_ArgsT...>, _Pointer> _Mypair;\r\n};\r\n\r\n_EXPORT_STD template <class _Pointer = void, class _SmartPtr, class... _ArgsT>\r\n_NODISCARD auto out_ptr(_SmartPtr& _Smart_ptr, _ArgsT&&... _Args) {\r\n    if constexpr (is_void_v<_Pointer>) {\r\n        return out_ptr_t<_SmartPtr, _Pointer_of<_SmartPtr>, _ArgsT&&...>(_Smart_ptr, _STD forward<_ArgsT>(_Args)...);\r\n    } else {\r\n        return out_ptr_t<_SmartPtr, _Pointer, _ArgsT&&...>(_Smart_ptr, _STD forward<_ArgsT>(_Args)...);\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _SmartPtr, class _Pointer, class... _ArgsT>\r\nclass inout_ptr_t {\r\n    static_assert(!_Is_specialization_v<_SmartPtr, shared_ptr>,\r\n        \"inout_ptr_t doesn't work with shared_ptr (N4950 [inout.ptr.t]/3)\");\r\n\r\nprivate:\r\n    _NODISCARD static auto _Get_ptr_from_smart(_SmartPtr& _Smart_ptr) noexcept\r\n        requires is_pointer_v<_SmartPtr>\r\n    {\r\n        return _Smart_ptr;\r\n    }\r\n\r\n    _NODISCARD static auto _Get_ptr_from_smart(_SmartPtr& _Smart_ptr) noexcept(noexcept(_Smart_ptr.get())) {\r\n        return _Smart_ptr.get();\r\n    }\r\n\r\npublic:\r\n    explicit inout_ptr_t(_SmartPtr& _Smart_ptr_, _ArgsT... _Args_)\r\n        noexcept(is_nothrow_constructible_v<tuple<_ArgsT...>, _ArgsT...>\r\n                 && noexcept(_Get_ptr_from_smart(_Smart_ptr_))) /* strengthened */\r\n        : _Smart_ptr(_Smart_ptr_),\r\n          _Mypair(_One_then_variadic_args_t{}, tuple<_ArgsT...>{_STD forward<_ArgsT>(_Args_)...},\r\n              _Get_ptr_from_smart(_Smart_ptr_)) {}\r\n\r\n    inout_ptr_t(const inout_ptr_t&) = delete;\r\n\r\n    ~inout_ptr_t() {\r\n        if constexpr (!is_pointer_v<_SmartPtr>) {\r\n            _Smart_ptr.release();\r\n\r\n            if (!_Get_ptr()) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        _STD apply(\r\n            [this](auto&&... _Args_) {\r\n                using _Sp = _Pointer_of_or<_SmartPtr, _Pointer>;\r\n                if constexpr (is_pointer_v<_SmartPtr>) {\r\n                    _Smart_ptr = _SmartPtr(static_cast<_Sp>(_Get_ptr()), _STD forward<_ArgsT>(_Args_)...);\r\n                } else if constexpr (_Resettable_pointer<_SmartPtr, _Sp, _Pointer, _ArgsT...>) {\r\n                    _Smart_ptr.reset(static_cast<_Sp>(_Get_ptr()), _STD forward<_ArgsT>(_Args_)...);\r\n                } else {\r\n                    static_assert(is_constructible_v<_SmartPtr, _Sp, _ArgsT...>, \"(N4950 [inout.ptr.t]/11.4)\");\r\n                    _Smart_ptr = _SmartPtr(static_cast<_Sp>(_Get_ptr()), _STD forward<_ArgsT>(_Args_)...);\r\n                }\r\n            },\r\n            _STD move(_Get_args()));\r\n    }\r\n\r\n    operator _Pointer*() const noexcept {\r\n        return _STD addressof(_Get_ptr());\r\n    }\r\n\r\n    operator void**() const noexcept\r\n        requires (!is_same_v<_Pointer, void*>)\r\n    {\r\n        static_assert(is_pointer_v<_Pointer>, \"conversion of inout_ptr_t<Smart, Pointer, Args...> to void** requires \"\r\n                                              \"Pointer to be a raw pointer (N4950 [inout.ptr.t]/15)\");\r\n        return reinterpret_cast<void**>(_STD addressof(_Get_ptr()));\r\n    }\r\n\r\nprivate:\r\n    _NODISCARD _Pointer& _Get_ptr() const noexcept {\r\n        return const_cast<_Pointer&>(_Mypair._Myval2);\r\n    }\r\n\r\n    _NODISCARD tuple<_ArgsT...>& _Get_args() noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    _SmartPtr& _Smart_ptr;\r\n    _Compressed_pair<tuple<_ArgsT...>, _Pointer> _Mypair;\r\n};\r\n\r\n_EXPORT_STD template <class _Pointer = void, class _SmartPtr, class... _ArgsT>\r\n_NODISCARD auto inout_ptr(_SmartPtr& _Smart_ptr, _ArgsT&&... _Args) {\r\n    if constexpr (is_void_v<_Pointer>) {\r\n        return inout_ptr_t<_SmartPtr, _Pointer_of<_SmartPtr>, _ArgsT&&...>(_Smart_ptr, _STD forward<_ArgsT>(_Args)...);\r\n    } else {\r\n        return inout_ptr_t<_SmartPtr, _Pointer, _ArgsT&&...>(_Smart_ptr, _STD forward<_ArgsT>(_Args)...);\r\n    }\r\n}\r\n#endif // _HAS_CXX23\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _MEMORY_\r\n"
  },
  {
    "path": "stl/inc/memory_resource",
    "content": "// memory_resource standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _MEMORY_RESOURCE_\r\n#define _MEMORY_RESOURCE_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX17\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <memory_resource> are available only with C++17 or later.\");\r\n#else // ^^^ !_HAS_CXX17 / _HAS_CXX17 vvv\r\n#include <vector>\r\n#include <xbit_ops.h>\r\n#include <xpolymorphic_allocator.h>\r\n#include <xutility>\r\n\r\n#ifndef _M_CEE_PURE\r\n#include <mutex>\r\n#endif // !defined(_M_CEE_PURE)\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\nnamespace pmr {\r\n    extern \"C\" _CRT_SATELLITE_1 memory_resource* __cdecl _Aligned_set_default_resource(memory_resource*) noexcept;\r\n    extern \"C\" _CRT_SATELLITE_1 memory_resource* __cdecl _Unaligned_set_default_resource(memory_resource*) noexcept;\r\n\r\n    _EXPORT_STD inline memory_resource* set_default_resource(memory_resource* const _Resource) noexcept {\r\n#ifdef __cpp_aligned_new\r\n        return _Aligned_set_default_resource(_Resource);\r\n#else // ^^^ defined(__cpp_aligned_new) / !defined(__cpp_aligned_new) vvv\r\n        return _Unaligned_set_default_resource(_Resource);\r\n#endif // ^^^ !defined(__cpp_aligned_new) ^^^\r\n    }\r\n\r\n    _EXPORT_STD extern \"C\" _NODISCARD _CRT_SATELLITE_1 memory_resource* __cdecl null_memory_resource() noexcept;\r\n\r\n    class _Identity_equal_resource : public memory_resource {\r\n    protected:\r\n        bool do_is_equal(const memory_resource& _That) const noexcept override {\r\n            return this == &_That;\r\n        }\r\n    };\r\n\r\n    class _Unaligned_new_delete_resource_impl final\r\n        : public _Identity_equal_resource { // implementation for new_delete_resource with /Zc:alignedNew-\r\n        void* do_allocate(const size_t _Bytes, const size_t _Align) override {\r\n            if (_Align > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n                _Xbad_alloc();\r\n            }\r\n\r\n            return ::operator new(_Bytes);\r\n        }\r\n\r\n        void do_deallocate(void* const _Ptr, const size_t _Bytes, size_t) noexcept override /* strengthened */ {\r\n            ::operator delete(_Ptr, _Bytes);\r\n        }\r\n    };\r\n\r\n    extern \"C\" _CRT_SATELLITE_1 _Unaligned_new_delete_resource_impl* __cdecl _Unaligned_new_delete_resource() noexcept;\r\n\r\n#ifdef __cpp_aligned_new\r\n    class _Aligned_new_delete_resource_impl final\r\n        : public _Identity_equal_resource { // implementation for new_delete_resource with aligned new support\r\n        void* do_allocate(const size_t _Bytes, const size_t _Align) override {\r\n            if (_Align > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n                return ::operator new(_Bytes, align_val_t{_Align});\r\n            }\r\n\r\n            return ::operator new(_Bytes);\r\n        }\r\n\r\n        void do_deallocate(void* const _Ptr, const size_t _Bytes, const size_t _Align) noexcept override\r\n        /* strengthened */ {\r\n            if (_Align > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n                return ::operator delete(_Ptr, _Bytes, align_val_t{_Align});\r\n            }\r\n\r\n            ::operator delete(_Ptr, _Bytes);\r\n        }\r\n    };\r\n\r\n    extern \"C\" _CRT_SATELLITE_1 _Aligned_new_delete_resource_impl* __cdecl _Aligned_new_delete_resource() noexcept;\r\n\r\n    _EXPORT_STD _NODISCARD inline memory_resource* new_delete_resource() noexcept {\r\n        return _Aligned_new_delete_resource();\r\n    }\r\n\r\n#else // ^^^ defined(__cpp_aligned_new) / !defined(__cpp_aligned_new) vvv\r\n\r\n    _EXPORT_STD _NODISCARD inline memory_resource* new_delete_resource() noexcept {\r\n        return _Unaligned_new_delete_resource();\r\n    }\r\n#endif // ^^^ !defined(__cpp_aligned_new) ^^^\r\n\r\n    template <class _Tag = void>\r\n    struct _Double_link { // base class for intrusive doubly-linked structures\r\n        _Double_link* _Next;\r\n        _Double_link* _Prev;\r\n    };\r\n\r\n    template <class _Ty, class _Tag = void>\r\n    struct _Intrusive_list { // intrusive circular list of _Ty, which must derive from _Double_link<_Tag>\r\n        using _Link_type = _Double_link<_Tag>;\r\n\r\n        _STL_INTERNAL_STATIC_ASSERT(is_base_of_v<_Link_type, _Ty>);\r\n\r\n        constexpr _Intrusive_list() noexcept { // TRANSITION, VSO-517878\r\n            // initialize this list to the empty state\r\n        }\r\n\r\n        _Intrusive_list(const _Intrusive_list&)            = delete;\r\n        _Intrusive_list& operator=(const _Intrusive_list&) = delete;\r\n\r\n        static constexpr _Link_type* _As_link(_Ty* const _Ptr) noexcept {\r\n            // extract the link from the item denoted by _Ptr\r\n            return static_cast<_Link_type*>(_Ptr);\r\n        }\r\n\r\n        static constexpr _Ty* _As_item(_Link_type* const _Ptr) noexcept { // get the item whose link is denoted by _Ptr\r\n            return static_cast<_Ty*>(_Ptr);\r\n        }\r\n\r\n        constexpr void _Push_front(_Ty* const _Item) noexcept { // insert _Item at the head of this list\r\n            const auto _Ptr    = static_cast<_Link_type*>(_Item);\r\n            _Ptr->_Next        = _Head._Next;\r\n            _Head._Next->_Prev = _Ptr;\r\n            _Ptr->_Prev        = &_Head;\r\n            _Head._Next        = _Ptr;\r\n        }\r\n\r\n        static constexpr void _Remove(_Ty* const _Item) noexcept { // unlink _Item from this list\r\n            const auto _Ptr    = static_cast<_Link_type*>(_Item);\r\n            _Ptr->_Next->_Prev = _Ptr->_Prev;\r\n            _Ptr->_Prev->_Next = _Ptr->_Next;\r\n        }\r\n\r\n        constexpr void _Clear() noexcept { // make this list empty\r\n            _Head._Next = &_Head;\r\n            _Head._Prev = &_Head;\r\n        }\r\n\r\n        _Link_type _Head{&_Head, &_Head};\r\n    };\r\n\r\n    template <class _Tag = void>\r\n    struct _Single_link { // base class for intrusive singly-linked structures\r\n        _Single_link* _Next;\r\n    };\r\n\r\n    template <class _Ty, class _Tag = void>\r\n    struct _Intrusive_stack { // intrusive stack of _Ty, which must derive from _Single_link<_Tag>\r\n        using _Link_type = _Single_link<_Tag>;\r\n\r\n        _STL_INTERNAL_STATIC_ASSERT(is_base_of_v<_Link_type, _Ty>);\r\n\r\n        constexpr _Intrusive_stack() noexcept = default;\r\n        constexpr _Intrusive_stack(_Intrusive_stack&& _That) noexcept : _Head{_That._Head} {\r\n            _That._Head = nullptr;\r\n        }\r\n        constexpr _Intrusive_stack& operator=(_Intrusive_stack&& _That) noexcept {\r\n            _Head       = _That._Head;\r\n            _That._Head = nullptr;\r\n            return *this;\r\n        }\r\n\r\n        static constexpr _Link_type* _As_link(_Ty* const _Ptr) noexcept {\r\n            return static_cast<_Link_type*>(_Ptr);\r\n        }\r\n\r\n        static constexpr _Ty* _As_item(_Link_type* const _Ptr) noexcept {\r\n            return static_cast<_Ty*>(_Ptr);\r\n        }\r\n\r\n        constexpr bool _Empty() const noexcept {\r\n            return _Head == nullptr;\r\n        }\r\n\r\n        constexpr _Ty* _Top() const noexcept {\r\n            return _As_item(_Head);\r\n        }\r\n\r\n        constexpr void _Push(_Ty* const _Item) noexcept {\r\n            const auto _Ptr = _As_link(_Item);\r\n            _Ptr->_Next     = _Head;\r\n            _Head           = _Ptr;\r\n        }\r\n\r\n        constexpr _Ty* _Pop() noexcept { // pre: _Head != nullptr\r\n            const auto _Result = _Head;\r\n            _Head              = _Head->_Next;\r\n            return _As_item(_Result);\r\n        }\r\n\r\n        constexpr void _Remove(_Ty* const _Item) noexcept {\r\n            const auto _Ptr = _As_link(_Item);\r\n            for (_Link_type** _Pnext = &_Head; *_Pnext; _Pnext = &(*_Pnext)->_Next) {\r\n                if (*_Pnext == _Ptr) {\r\n                    *_Pnext = _Ptr->_Next;\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        _Link_type* _Head = nullptr;\r\n    };\r\n\r\n    _EXPORT_STD struct pool_options {\r\n        size_t max_blocks_per_chunk        = 0;\r\n        size_t largest_required_pool_block = 0;\r\n    };\r\n\r\n    inline void _Check_alignment(void* const _Ptr, const size_t _Align) noexcept {\r\n        _STL_ASSERT((reinterpret_cast<uintptr_t>(_Ptr) & (_Align - 1)) == 0,\r\n            \"Upstream resource did not respect alignment requirement.\");\r\n        (void) _Ptr;\r\n        (void) _Align;\r\n    }\r\n\r\n    _EXPORT_STD struct unsynchronized_pool_resource : _Identity_equal_resource {\r\n        unsynchronized_pool_resource() noexcept { // initialize pool with default options and default upstream\r\n            _Setup_options();\r\n        }\r\n        unsynchronized_pool_resource(\r\n            const pool_options& _Opts, memory_resource* const _Resource) noexcept // strengthened\r\n            : _Options(_Opts), _Pools{_Resource} { // initialize pool with options _Opts and upstream _Resource\r\n            _STL_ASSERT(_Resource, \"Upstream memory resource must be a valid resource (N4950 [mem.res.pool.ctor]/1)\");\r\n            _Setup_options();\r\n        }\r\n        explicit unsynchronized_pool_resource(memory_resource* const _Resource) noexcept // strengthened\r\n            : _Pools{_Resource} { // initialize pool with default options and upstream _Resource\r\n            _STL_ASSERT(_Resource, \"Upstream memory resource must be a valid resource (N4950 [mem.res.pool.ctor]/1)\");\r\n            _Setup_options();\r\n        }\r\n        explicit unsynchronized_pool_resource(const pool_options& _Opts) noexcept // strengthened\r\n            : _Options(_Opts) { // initialize pool with options _Opts and default upstream\r\n            _Setup_options();\r\n        }\r\n\r\n        unsynchronized_pool_resource(const unsynchronized_pool_resource&)            = delete;\r\n        unsynchronized_pool_resource& operator=(const unsynchronized_pool_resource&) = delete;\r\n\r\n        ~unsynchronized_pool_resource() noexcept override {\r\n            // destroy this pool resource, releasing all allocations back upstream\r\n            release();\r\n        }\r\n\r\n        _NODISCARD memory_resource* upstream_resource() const noexcept /* strengthened */ {\r\n            // retrieve this pool resource's upstream resource\r\n            return _Pools.get_allocator().resource();\r\n        }\r\n\r\n        _NODISCARD pool_options options() const noexcept /* strengthened */ {\r\n            // retrieve the adjusted/actual option values\r\n            return _Options;\r\n        }\r\n\r\n        void release() noexcept /* strengthened */ {\r\n            // release all allocations back upstream\r\n            for (auto& _Al : _Pools) {\r\n                _Al._Clear(*this);\r\n            }\r\n            _Pools.clear();\r\n            _Pools.shrink_to_fit();\r\n\r\n            auto _Ptr = _Chunks._Head._Next;\r\n            _Chunks._Clear();\r\n            memory_resource* const _Resource = upstream_resource();\r\n            while (_Ptr != &_Chunks._Head) {\r\n                const auto _Chunk = _Chunks._As_item(_Ptr);\r\n                _Ptr              = _Ptr->_Next;\r\n                _Resource->deallocate(_Chunk->_Base_address(), _Chunk->_Size, _Chunk->_Align);\r\n            }\r\n        }\r\n\r\n    protected:\r\n        void* do_allocate(size_t _Bytes, const size_t _Align) override {\r\n            // allocate a block from the appropriate pool, or directly from upstream if too large\r\n            if (_Bytes <= _Options.largest_required_pool_block) {\r\n                auto _Result = _Find_pool(_Bytes, _Align);\r\n                if (_Result.first == _Pools.end() || _Result.first->_Log_of_size != _Result.second) {\r\n                    _Result.first = _Pools.emplace(_Result.first, _Result.second);\r\n                }\r\n\r\n                return _Result.first->_Allocate(*this);\r\n            }\r\n\r\n            return _Allocate_oversized(_Bytes, _Align);\r\n        }\r\n\r\n        void do_deallocate(void* const _Ptr, const size_t _Bytes, const size_t _Align) override {\r\n            // deallocate a block from the appropriate pool, or directly from upstream if too large\r\n            if (_Bytes <= _Options.largest_required_pool_block) {\r\n                const auto _Result = _Find_pool(_Bytes, _Align);\r\n                if (_Result.first != _Pools.end() && _Result.first->_Log_of_size == _Result.second) {\r\n                    _Result.first->_Deallocate(*this, _Ptr);\r\n                }\r\n            } else {\r\n                _Deallocate_oversized(_Ptr, _Bytes, _Align);\r\n            }\r\n        }\r\n\r\n    private:\r\n        struct _Oversized_header : _Double_link<> {\r\n            // tracks an allocation that was obtained directly from the upstream resource\r\n            size_t _Size;\r\n            size_t _Align;\r\n\r\n            void* _Base_address() const { // headers are stored at the end of the allocated memory block\r\n                return const_cast<char*>(reinterpret_cast<const char*>(this + 1) - _Size);\r\n            }\r\n        };\r\n\r\n        static_assert(alignof(_Oversized_header) == alignof(void*));\r\n        static_assert(sizeof(_Oversized_header) == 4 * sizeof(void*));\r\n\r\n        static constexpr bool _Prepare_oversized(size_t& _Bytes, size_t& _Align) noexcept {\r\n            // adjust size and alignment to allow for an _Oversized_header\r\n            _Align = (_STD max) (_Align, alignof(_Oversized_header));\r\n\r\n            if (_Bytes > SIZE_MAX - sizeof(_Oversized_header) - alignof(_Oversized_header) + 1) {\r\n                // no room for header + alignment padding\r\n                return false;\r\n            }\r\n\r\n            // adjust _Bytes to the smallest multiple of alignof(_Oversized_header) that is >=\r\n            // _Bytes + sizeof(_Oversized_header), which guarantees that the end of the allocated space\r\n            // is properly aligned for an _Oversized_header.\r\n            _Bytes = (_Bytes + sizeof(_Oversized_header) + alignof(_Oversized_header) - 1)\r\n                   & ~(alignof(_Oversized_header) - 1);\r\n\r\n            return true;\r\n        }\r\n\r\n        void* _Allocate_oversized(size_t _Bytes, size_t _Align) {\r\n            // allocate a block directly from the upstream resource\r\n            if (!_Prepare_oversized(_Bytes, _Align)) { // no room for header + alignment padding\r\n                _Xbad_alloc();\r\n            }\r\n\r\n            memory_resource* const _Resource = upstream_resource();\r\n            void* const _Ptr                 = _Resource->allocate(_Bytes, _Align);\r\n            _Check_alignment(_Ptr, _Align);\r\n\r\n            _Oversized_header* const _Hdr = reinterpret_cast<_Oversized_header*>(static_cast<char*>(_Ptr) + _Bytes) - 1;\r\n\r\n            _Hdr->_Size  = _Bytes;\r\n            _Hdr->_Align = _Align;\r\n            _Chunks._Push_front(_Hdr);\r\n\r\n            return _Ptr;\r\n        }\r\n\r\n        void _Deallocate_oversized(void* _Ptr, size_t _Bytes, size_t _Align) noexcept {\r\n            // deallocate a block directly from the upstream resource\r\n            [[maybe_unused]] const bool _Has_room_for_padding = _Prepare_oversized(_Bytes, _Align);\r\n\r\n            // If there's no room for header + alignment padding, this memory WAS NOT allocated by this pool resource\r\n            _STL_ASSERT(_Has_room_for_padding, \"Cannot deallocate memory not allocated by this memory pool.\");\r\n\r\n            _Oversized_header* _Hdr = reinterpret_cast<_Oversized_header*>(static_cast<char*>(_Ptr) + _Bytes) - 1;\r\n\r\n            _STL_ASSERT(_Hdr->_Size == _Bytes && _Hdr->_Align == _Align,\r\n                \"Cannot deallocate memory not allocated by this memory pool.\");\r\n            _Chunks._Remove(_Hdr);\r\n            upstream_resource()->deallocate(_Ptr, _Bytes, _Align);\r\n        }\r\n\r\n        struct _Pool { // manager for a collection of chunks comprised of blocks of a single size\r\n            struct _Chunk : _Single_link<> {\r\n                // a memory allocation consisting of a number of fixed-size blocks to be parceled out\r\n                _Intrusive_stack<_Single_link<>> _Free_blocks{}; // list of free blocks\r\n                size_t _Free_count; // # of unallocated blocks\r\n                size_t _Capacity; // total # of blocks\r\n                char* _Base; // address of first block\r\n                size_t _Next_available = 0; // index of first never-allocated block\r\n                size_t _Id; // unique identifier; increasing order of allocation\r\n\r\n                _Chunk(_Pool& _Al, void* const _Base_, const size_t _Capacity_) noexcept\r\n                    : _Free_count{_Capacity_}, _Capacity{_Capacity_}, _Base{static_cast<char*>(_Base_)},\r\n                      _Id{_Al._All_chunks._Empty() ? 0 : _Al._All_chunks._Top()->_Id + 1} {\r\n                    // initialize a chunk of _Capacity blocks, all initially free\r\n                }\r\n\r\n                _Chunk(const _Chunk&)            = delete;\r\n                _Chunk& operator=(const _Chunk&) = delete;\r\n            };\r\n\r\n            _Chunk* _Unfull_chunk = nullptr; // largest _Chunk with free blocks\r\n            _Intrusive_stack<_Chunk> _All_chunks{}; // all chunks (ordered by decreasing _Id)\r\n            size_t _Next_capacity = _Default_next_capacity; // # of blocks to allocate in next _Chunk\r\n                                                            // in (1, (PTRDIFF_MAX - sizeof(_Chunk)) >> _Log_of_size]\r\n            size_t _Block_size; // size of allocated blocks\r\n            size_t _Log_of_size; // _Block_size == 1 << _Log_of_size\r\n            _Chunk* _Empty_chunk = nullptr; // only _Chunk with all free blocks\r\n\r\n            static constexpr size_t _Default_next_capacity = 4;\r\n            static_assert(_Default_next_capacity > 1);\r\n\r\n            explicit _Pool(const size_t _Log_of_size_) noexcept\r\n                : _Block_size{size_t{1} << _Log_of_size_}, _Log_of_size{_Log_of_size_} {\r\n                // initialize a pool that manages blocks of the indicated size\r\n            }\r\n\r\n            _Pool(_Pool&& _That) noexcept\r\n                : _Unfull_chunk{_STD exchange(_That._Unfull_chunk, nullptr)}, _All_chunks{_STD move(_That._All_chunks)},\r\n                  _Next_capacity{_STD exchange(_That._Next_capacity, _Default_next_capacity)},\r\n                  _Block_size{_That._Block_size}, _Log_of_size{_That._Log_of_size},\r\n                  _Empty_chunk{_STD exchange(_That._Empty_chunk, nullptr)} {}\r\n\r\n            _Pool& operator=(_Pool&& _That) noexcept {\r\n                _Unfull_chunk  = _STD exchange(_That._Unfull_chunk, nullptr);\r\n                _All_chunks    = _STD move(_That._All_chunks);\r\n                _Next_capacity = _STD exchange(_That._Next_capacity, _Default_next_capacity);\r\n                _Block_size    = _That._Block_size;\r\n                _Log_of_size   = _That._Log_of_size;\r\n                _Empty_chunk   = _STD exchange(_That._Empty_chunk, nullptr);\r\n                return *this;\r\n            }\r\n\r\n            void _Clear(unsynchronized_pool_resource& _Pool_resource) noexcept {\r\n                // release all chunks in the pool back upstream\r\n                _Intrusive_stack<_Chunk> _Tmp{};\r\n                _STD swap(_Tmp, _All_chunks);\r\n                memory_resource* const _Resource = _Pool_resource.upstream_resource();\r\n                while (!_Tmp._Empty()) {\r\n                    const auto _Ptr = _Tmp._Pop();\r\n                    _Resource->deallocate(_Ptr->_Base, _Size_for_capacity(_Ptr->_Capacity), _Block_size);\r\n                }\r\n\r\n                _Unfull_chunk  = nullptr;\r\n                _Next_capacity = _Default_next_capacity;\r\n                _Empty_chunk   = nullptr;\r\n            }\r\n\r\n            void* _Allocate(unsynchronized_pool_resource& _Pool_resource) { // allocate a block from this pool\r\n                for (;; _Unfull_chunk = _All_chunks._As_item(_Unfull_chunk->_Next)) {\r\n                    if (!_Unfull_chunk) {\r\n                        _Increase_capacity(_Pool_resource);\r\n                    } else if (!_Unfull_chunk->_Free_blocks._Empty()) {\r\n                        if (_Unfull_chunk == _Empty_chunk) { // this chunk is no longer empty\r\n                            _Empty_chunk = nullptr;\r\n                        }\r\n                        --_Unfull_chunk->_Free_count;\r\n                        return _Unfull_chunk->_Free_blocks._Pop();\r\n                    }\r\n\r\n                    if (_Unfull_chunk->_Next_available < _Unfull_chunk->_Capacity) {\r\n                        if (_Unfull_chunk == _Empty_chunk) { // this chunk is no longer empty\r\n                            _Empty_chunk = nullptr;\r\n                        }\r\n                        --_Unfull_chunk->_Free_count;\r\n                        char* const _Block = _Unfull_chunk->_Base + _Unfull_chunk->_Next_available * _Block_size;\r\n                        ++_Unfull_chunk->_Next_available;\r\n                        *(reinterpret_cast<_Chunk**>(_Block + _Block_size) - 1) = _Unfull_chunk;\r\n                        return _Block;\r\n                    }\r\n                }\r\n            }\r\n\r\n            void _Deallocate(unsynchronized_pool_resource& _Pool_resource, void* const _Ptr) noexcept {\r\n                // return a block to this pool\r\n                _Chunk* _Current = *(reinterpret_cast<_Chunk**>(static_cast<char*>(_Ptr) + _Block_size) - 1);\r\n\r\n                _Current->_Free_blocks._Push(::new (_Ptr) _Single_link<>);\r\n\r\n                if (_Current->_Free_count++ == 0) {\r\n                    // prefer to allocate from newer/larger chunks...\r\n                    if (!_Unfull_chunk || _Unfull_chunk->_Id < _Current->_Id) {\r\n                        _Unfull_chunk = _Current;\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                if (_Current->_Free_count < _Current->_Capacity) {\r\n                    return;\r\n                }\r\n\r\n                if (!_Empty_chunk) {\r\n                    _Empty_chunk = _Current;\r\n                    return;\r\n                }\r\n\r\n                // ...and release older/smaller chunks to keep the list lengths short.\r\n                if (_Empty_chunk->_Id < _Current->_Id) {\r\n                    _STD swap(_Current, _Empty_chunk);\r\n                }\r\n\r\n                _All_chunks._Remove(_Current);\r\n                _Pool_resource.upstream_resource()->deallocate(\r\n                    _Current->_Base, _Size_for_capacity(_Current->_Capacity), _Block_size);\r\n            }\r\n\r\n            size_t _Size_for_capacity(const size_t _Capacity) const noexcept {\r\n                // return the size of a chunk that holds _Capacity blocks\r\n                return (_Capacity << _Log_of_size) + sizeof(_Chunk);\r\n            }\r\n\r\n            void _Increase_capacity(unsynchronized_pool_resource& _Pool_resource) {\r\n                // this pool has no free blocks; get a new chunk from upstream\r\n                if (_Next_capacity > _Pool_resource._Options.max_blocks_per_chunk) {\r\n                    // This is a fresh pool, _Next_capacity hasn't yet been bounded by max_blocks_per_chunk:\r\n                    _Next_capacity = _Pool_resource._Options.max_blocks_per_chunk;\r\n                }\r\n                const size_t _Size               = _Size_for_capacity(_Next_capacity);\r\n                memory_resource* const _Resource = _Pool_resource.upstream_resource();\r\n                void* const _Ptr                 = _Resource->allocate(_Size, _Block_size);\r\n                _Check_alignment(_Ptr, _Block_size);\r\n\r\n                void* const _Tmp = static_cast<char*>(_Ptr) + _Size - sizeof(_Chunk);\r\n                _Unfull_chunk    = ::new (_Tmp) _Chunk{*this, _Ptr, _Next_capacity};\r\n                _Empty_chunk     = _Unfull_chunk;\r\n                _All_chunks._Push(_Unfull_chunk);\r\n\r\n                // scale _Next_capacity by 2, saturating so that _Size_for_capacity(_Next_capacity) cannot overflow\r\n                _Next_capacity =\r\n                    (_STD min) (_Next_capacity << 1, (_STD min) ((PTRDIFF_MAX - sizeof(_Chunk)) >> _Log_of_size,\r\n                                                         _Pool_resource._Options.max_blocks_per_chunk));\r\n            }\r\n        };\r\n\r\n        void _Setup_options() noexcept { // configure pool options\r\n            constexpr auto _Max_blocks_per_chunk_limit = static_cast<size_t>(PTRDIFF_MAX);\r\n            constexpr auto _Largest_required_pool_block_limit =\r\n                static_cast<size_t>((PTRDIFF_MAX >> 4) + 1); // somewhat arbitrary power of 2\r\n            static_assert(_Is_pow_2(_Largest_required_pool_block_limit));\r\n\r\n            if (_Options.max_blocks_per_chunk - 1 >= _Max_blocks_per_chunk_limit) {\r\n                _Options.max_blocks_per_chunk = _Max_blocks_per_chunk_limit;\r\n            }\r\n\r\n            if (_Options.largest_required_pool_block - 1 < sizeof(void*)) {\r\n                _Options.largest_required_pool_block = sizeof(void*);\r\n            } else if (_Options.largest_required_pool_block - 1 >= _Largest_required_pool_block_limit) {\r\n                _Options.largest_required_pool_block = _Largest_required_pool_block_limit;\r\n            } else {\r\n                _Options.largest_required_pool_block = static_cast<size_t>(1)\r\n                                                    << _Ceiling_of_log_2(_Options.largest_required_pool_block);\r\n            }\r\n        }\r\n\r\n        pair<pmr::vector<_Pool>::iterator, unsigned char> _Find_pool(\r\n            const size_t _Bytes, const size_t _Align) noexcept {\r\n            // find the pool from which to allocate a block with size _Bytes and alignment _Align\r\n            const size_t _Size      = (_STD max) (_Bytes + sizeof(void*), _Align);\r\n            const auto _Log_of_size = static_cast<unsigned char>(_Ceiling_of_log_2(_Size));\r\n            return {_STD lower_bound(_Pools.begin(), _Pools.end(), _Log_of_size,\r\n                        [](const _Pool& _Al, const unsigned char _Log) static { return _Al._Log_of_size < _Log; }),\r\n                _Log_of_size};\r\n        }\r\n\r\n        pool_options _Options{}; // parameters that control the behavior of this pool resource\r\n        _Intrusive_list<_Oversized_header> _Chunks{}; // list of oversized allocations obtained directly from upstream\r\n        pmr::vector<_Pool> _Pools{}; // pools in order of increasing block size\r\n    };\r\n\r\n#ifndef _M_CEE_PURE\r\n    _EXPORT_STD class synchronized_pool_resource : public unsynchronized_pool_resource {\r\n    public:\r\n        using unsynchronized_pool_resource::unsynchronized_pool_resource;\r\n\r\n        void release() noexcept /* strengthened */ {\r\n            lock_guard<mutex> _Guard{_Mtx};\r\n            unsynchronized_pool_resource::release();\r\n        }\r\n\r\n    protected:\r\n        void* do_allocate(const size_t _Bytes, const size_t _Align) override {\r\n            lock_guard<mutex> _Guard{_Mtx};\r\n            return unsynchronized_pool_resource::do_allocate(_Bytes, _Align);\r\n        }\r\n\r\n        void do_deallocate(void* const _Ptr, const size_t _Bytes, const size_t _Align) override {\r\n            lock_guard<mutex> _Guard{_Mtx};\r\n            unsynchronized_pool_resource::do_deallocate(_Ptr, _Bytes, _Align);\r\n        }\r\n\r\n    private:\r\n        mutable mutex _Mtx;\r\n    };\r\n#endif // !defined(_M_CEE_PURE)\r\n\r\n    _EXPORT_STD class monotonic_buffer_resource : public _Identity_equal_resource {\r\n    public:\r\n        explicit monotonic_buffer_resource(memory_resource* const _Upstream) noexcept // strengthened\r\n            : _Resource{_Upstream} {} // initialize this resource with upstream\r\n\r\n        monotonic_buffer_resource(const size_t _Initial_size, memory_resource* const _Upstream) noexcept // strengthened\r\n            : _Next_buffer_size(_Round(_Initial_size)), _Resource{_Upstream} {\r\n            // initialize this resource with upstream and initial allocation size\r\n        }\r\n\r\n        monotonic_buffer_resource(void* const _Buffer, const size_t _Buffer_size,\r\n            memory_resource* const _Upstream) noexcept // strengthened\r\n            : _Current_buffer(_Buffer), _Space_available(_Buffer_size),\r\n              _Next_buffer_size(_Buffer_size ? _Scale(_Buffer_size) : _Min_allocation), _Resource{_Upstream} {\r\n            // initialize this resource with upstream and initial buffer\r\n        }\r\n\r\n        monotonic_buffer_resource() = default;\r\n\r\n        explicit monotonic_buffer_resource(const size_t _Initial_size) noexcept // strengthened\r\n            : _Next_buffer_size(_Round(_Initial_size)) {} // initialize this resource with initial allocation size\r\n\r\n        monotonic_buffer_resource(void* const _Buffer, const size_t _Buffer_size) noexcept // strengthened\r\n            : _Current_buffer(_Buffer), _Space_available(_Buffer_size),\r\n              _Next_buffer_size(_Buffer_size ? _Scale(_Buffer_size) : _Min_allocation) {\r\n            // initialize this resource with initial buffer\r\n        }\r\n\r\n        ~monotonic_buffer_resource() noexcept override {\r\n            release();\r\n        }\r\n\r\n        monotonic_buffer_resource(const monotonic_buffer_resource&)            = delete;\r\n        monotonic_buffer_resource& operator=(const monotonic_buffer_resource&) = delete;\r\n\r\n        void release() noexcept /* strengthened */ {\r\n            if (_Chunks._Empty()) {\r\n                // nothing to release; potentially continues to use an initial block provided at construction\r\n                return;\r\n            }\r\n\r\n            _Current_buffer  = nullptr;\r\n            _Space_available = 0;\r\n\r\n            // unscale _Next_buffer_size so the next allocation will be the same size as the most recent allocation\r\n            // (keep synchronized with monotonic_buffer_resource::_Scale)\r\n            const size_t _Unscaled = (_Next_buffer_size / 3 * 2 + alignof(_Header) - 1) & _Max_allocation;\r\n            _Next_buffer_size      = (_STD max) (_Unscaled, _Min_allocation);\r\n\r\n            _Intrusive_stack<_Header> _Tmp{};\r\n            _STD swap(_Tmp, _Chunks);\r\n            while (!_Tmp._Empty()) {\r\n                const auto _Ptr = _Tmp._Pop();\r\n                _Resource->deallocate(_Ptr->_Base_address(), _Ptr->_Size, _Ptr->_Align);\r\n            }\r\n        }\r\n\r\n        _NODISCARD memory_resource* upstream_resource() const noexcept /* strengthened */ {\r\n            // retrieve the upstream resource\r\n            return _Resource;\r\n        }\r\n\r\n    protected:\r\n        void* do_allocate(const size_t _Bytes, const size_t _Align) override {\r\n            // allocate from the current buffer or a new larger buffer from upstream\r\n            if (!_STD align(_Align, _Bytes, _Current_buffer, _Space_available)) {\r\n                _Increase_capacity(_Bytes, _Align);\r\n            }\r\n\r\n            void* const _Result = _Current_buffer;\r\n            _Current_buffer     = static_cast<char*>(_Current_buffer) + _Bytes;\r\n            _Space_available -= _Bytes;\r\n            return _Result;\r\n        }\r\n\r\n        void do_deallocate(void*, size_t, size_t) override {} // nothing to do\r\n\r\n    private:\r\n        struct _Header : _Single_link<> { // track the size and alignment of an allocation from upstream\r\n            size_t _Size;\r\n            size_t _Align;\r\n\r\n            _Header(const size_t _Size_, const size_t _Align_) : _Size{_Size_}, _Align{_Align_} {}\r\n\r\n            void* _Base_address() const { // header is stored at the end of the allocated memory block\r\n                return const_cast<char*>(reinterpret_cast<const char*>(this + 1) - _Size);\r\n            }\r\n        };\r\n\r\n        static constexpr size_t _Min_allocation = 2 * sizeof(_Header);\r\n        static constexpr size_t _Max_allocation = 0 - alignof(_Header);\r\n\r\n        static constexpr size_t _Round(const size_t _Size) noexcept {\r\n            // return the smallest multiple of alignof(_Header) greater than _Size,\r\n            // clamped to the range [_Min_allocation, _Max_allocation]\r\n            if (_Size < _Min_allocation) {\r\n                return _Min_allocation;\r\n            }\r\n\r\n            if (_Size >= _Max_allocation) {\r\n                return _Max_allocation;\r\n            }\r\n\r\n            // Since _Max_allocation == -alignof(_Header), _Size < _Max_allocation implies that\r\n            // (_Size + alignof(_Header) - 1) does not overflow.\r\n            return (_Size + alignof(_Header) - 1) & _Max_allocation;\r\n        }\r\n\r\n        static constexpr size_t _Scale(const size_t _Size) noexcept {\r\n            // scale _Size by 1.5, rounding up to a multiple of alignof(_Header), saturating to _Max_allocation\r\n            // (keep synchronized with monotonic_buffer_resource::release)\r\n#pragma warning(push)\r\n#pragma warning(disable : 26450) // TRANSITION, VSO-1828677\r\n            constexpr auto _Max_size = (_Max_allocation - alignof(_Header) + 1) / 3 * 2;\r\n#pragma warning(pop)\r\n            if (_Size >= _Max_size) {\r\n                return _Max_allocation;\r\n            }\r\n\r\n            return (_Size + (_Size + 1) / 2 + alignof(_Header) - 1) & _Max_allocation;\r\n        }\r\n\r\n        void _Increase_capacity(const size_t _Bytes, const size_t _Align) { // obtain a new buffer from upstream\r\n            if (_Bytes > _Max_allocation - sizeof(_Header)) {\r\n                _Xbad_alloc();\r\n            }\r\n\r\n            size_t _New_size = _Next_buffer_size;\r\n            if (_New_size < _Bytes + sizeof(_Header)) {\r\n                _New_size = (_Bytes + sizeof(_Header) + alignof(_Header) - 1) & _Max_allocation;\r\n            }\r\n\r\n            const size_t _New_align = (_STD max) (alignof(_Header), _Align);\r\n\r\n            void* _New_buffer = _Resource->allocate(_New_size, _New_align);\r\n            _Check_alignment(_New_buffer, _New_align);\r\n\r\n            _Current_buffer  = _New_buffer;\r\n            _Space_available = _New_size - sizeof(_Header);\r\n            _New_buffer      = static_cast<char*>(_New_buffer) + _Space_available;\r\n            _Chunks._Push(::new (_New_buffer) _Header{_New_size, _New_align});\r\n\r\n            _Next_buffer_size = _Scale(_New_size);\r\n        }\r\n\r\n        void* _Current_buffer    = nullptr; // current memory block to parcel out to callers\r\n        size_t _Space_available  = 0; // space remaining in current block\r\n        size_t _Next_buffer_size = _Min_allocation; // size of next block to allocate from upstream\r\n        _Intrusive_stack<_Header> _Chunks{}; // list of memory blocks allocated from upstream\r\n        memory_resource* _Resource = _STD pmr::get_default_resource(); // upstream resource from which to allocate\r\n    };\r\n} // namespace pmr\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX17 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _MEMORY_RESOURCE_\r\n"
  },
  {
    "path": "stl/inc/mutex",
    "content": "// mutex standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _MUTEX_\r\n#define _MUTEX_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#ifdef _M_CEE_PURE\r\n#error <mutex> is not supported when compiling with /clr:pure.\r\n#endif // defined(_M_CEE_PURE)\r\n\r\n#include <__msvc_chrono.hpp>\r\n#include <cstdlib>\r\n#include <system_error>\r\n#include <thread>\r\n#include <utility>\r\n#include <xcall_once.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD class condition_variable;\r\n_EXPORT_STD class condition_variable_any;\r\n\r\nclass _Mutex_base { // base class for all mutex types\r\npublic:\r\n#ifdef _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR\r\n    _Mutex_base(int _Flags = 0) noexcept {\r\n        _Mtx_init_in_situ(_Mymtx(), _Flags | _Mtx_try);\r\n    }\r\n#else // ^^^ defined(_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR) / !defined(_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR) vvv\r\n    constexpr _Mutex_base(int _Flags = 0) noexcept {\r\n        _Mtx_storage._Critical_section = {};\r\n        _Mtx_storage._Thread_id        = -1;\r\n        _Mtx_storage._Type             = _Flags | _Mtx_try;\r\n        _Mtx_storage._Count            = 0;\r\n    }\r\n#endif // ^^^ !defined(_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR) ^^^\r\n\r\n    _Mutex_base(const _Mutex_base&)            = delete;\r\n    _Mutex_base& operator=(const _Mutex_base&) = delete;\r\n\r\n    void lock() {\r\n        if (_Mtx_lock(_Mymtx()) != _Thrd_result::_Success) {\r\n            // undefined behavior, only occurs for plain mutexes (N4950 [thread.mutex.requirements.mutex.general]/6)\r\n            _STD _Throw_Cpp_error(_RESOURCE_DEADLOCK_WOULD_OCCUR);\r\n        }\r\n\r\n        if (!_Verify_ownership_levels()) {\r\n            // only occurs for recursive mutexes (N4950 [thread.mutex.recursive]/3)\r\n            // POSIX specifies EAGAIN in the corresponding situation:\r\n            // https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_lock.html\r\n            _STD _Throw_Cpp_error(_RESOURCE_UNAVAILABLE_TRY_AGAIN);\r\n        }\r\n    }\r\n\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock() noexcept /* strengthened */ {\r\n        // false may be from undefined behavior for plain mutexes (N4950 [thread.mutex.requirements.mutex.general]/6)\r\n        return _Mtx_trylock(_Mymtx()) == _Thrd_result::_Success;\r\n    }\r\n\r\n    void unlock() noexcept /* strengthened */ {\r\n        _Mtx_unlock(_Mymtx());\r\n    }\r\n\r\n    // native_handle_type and native_handle() have intentionally been removed. See GH-3820.\r\n\r\nprotected:\r\n    _NODISCARD_TRY_CHANGE_STATE bool _Verify_ownership_levels() noexcept {\r\n        if (_Mtx_storage._Count == INT_MAX) {\r\n            // only occurs for recursive mutexes (N4950 [thread.mutex.recursive]/3)\r\n            --_Mtx_storage._Count;\r\n            return false;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\nprivate:\r\n    friend condition_variable;\r\n    friend condition_variable_any;\r\n\r\n    _Mtx_internal_imp_t _Mtx_storage{};\r\n\r\n    _Mtx_t _Mymtx() noexcept {\r\n        return &_Mtx_storage;\r\n    }\r\n};\r\n\r\n_EXPORT_STD class mutex : public _Mutex_base { // class for mutual exclusion\r\npublic:\r\n    mutex() noexcept = default;\r\n\r\n    mutex(const mutex&)            = delete;\r\n    mutex& operator=(const mutex&) = delete;\r\n};\r\n\r\n_EXPORT_STD class recursive_mutex : public _Mutex_base { // class for recursive mutual exclusion\r\npublic:\r\n    recursive_mutex() noexcept // strengthened\r\n        : _Mutex_base(_Mtx_recursive) {}\r\n\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock() noexcept {\r\n        return _Mutex_base::try_lock() && _Verify_ownership_levels();\r\n    }\r\n\r\n    recursive_mutex(const recursive_mutex&)            = delete;\r\n    recursive_mutex& operator=(const recursive_mutex&) = delete;\r\n};\r\n\r\n_EXPORT_STD struct adopt_lock_t { // indicates adopt lock\r\n    explicit adopt_lock_t() = default;\r\n};\r\n\r\n_EXPORT_STD struct defer_lock_t { // indicates defer lock\r\n    explicit defer_lock_t() = default;\r\n};\r\n\r\n_EXPORT_STD struct try_to_lock_t { // indicates try to lock\r\n    explicit try_to_lock_t() = default;\r\n};\r\n\r\n_EXPORT_STD _INLINE_VAR constexpr adopt_lock_t adopt_lock{};\r\n_EXPORT_STD _INLINE_VAR constexpr defer_lock_t defer_lock{};\r\n_EXPORT_STD _INLINE_VAR constexpr try_to_lock_t try_to_lock{};\r\n\r\n_EXPORT_STD template <class _Mutex>\r\nclass unique_lock { // whizzy class with destructor that unlocks mutex\r\npublic:\r\n    using mutex_type = _Mutex;\r\n\r\n    unique_lock() noexcept = default;\r\n\r\n    _NODISCARD_LOCK explicit unique_lock(_Mutex& _Mtx)\r\n        : _Pmtx(_STD addressof(_Mtx)), _Owns(false) { // construct and lock\r\n        _Pmtx->lock();\r\n        _Owns = true;\r\n    }\r\n\r\n    _NODISCARD_LOCK unique_lock(_Mutex& _Mtx, adopt_lock_t) noexcept // strengthened\r\n        : _Pmtx(_STD addressof(_Mtx)), _Owns(true) {} // construct and assume already locked\r\n\r\n    unique_lock(_Mutex& _Mtx, defer_lock_t) noexcept\r\n        : _Pmtx(_STD addressof(_Mtx)), _Owns(false) {} // construct but don't lock\r\n\r\n    _NODISCARD_LOCK unique_lock(_Mutex& _Mtx, try_to_lock_t)\r\n        : _Pmtx(_STD addressof(_Mtx)), _Owns(_Pmtx->try_lock()) {} // construct and try to lock\r\n\r\n    template <class _Rep, class _Period>\r\n    _NODISCARD_LOCK unique_lock(_Mutex& _Mtx, const chrono::duration<_Rep, _Period>& _Rel_time)\r\n        : _Pmtx(_STD addressof(_Mtx)), _Owns(_Pmtx->try_lock_for(_Rel_time)) {} // construct and lock with timeout\r\n\r\n    template <class _Clock, class _Duration>\r\n    _NODISCARD_LOCK unique_lock(_Mutex& _Mtx, const chrono::time_point<_Clock, _Duration>& _Abs_time)\r\n        : _Pmtx(_STD addressof(_Mtx)), _Owns(_Pmtx->try_lock_until(_Abs_time)) {\r\n        // construct and lock with timeout\r\n        static_assert(chrono::_Is_clock_v<_Clock>, \"Clock type required\");\r\n    }\r\n\r\n    _NODISCARD_LOCK unique_lock(unique_lock&& _Other) noexcept : _Pmtx(_Other._Pmtx), _Owns(_Other._Owns) {\r\n        _Other._Pmtx = nullptr;\r\n        _Other._Owns = false;\r\n    }\r\n\r\n    unique_lock& operator=(unique_lock&& _Other) noexcept {\r\n        unique_lock{_STD move(_Other)}.swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    ~unique_lock() noexcept {\r\n        if (_Owns) {\r\n            _Pmtx->unlock();\r\n        }\r\n    }\r\n\r\n    unique_lock(const unique_lock&)            = delete;\r\n    unique_lock& operator=(const unique_lock&) = delete;\r\n\r\n    void lock() { // lock the mutex\r\n        _Validate();\r\n        _Pmtx->lock();\r\n        _Owns = true;\r\n    }\r\n\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock() {\r\n        _Validate();\r\n        _Owns = _Pmtx->try_lock();\r\n        return _Owns;\r\n    }\r\n\r\n    template <class _Rep, class _Period>\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock_for(const chrono::duration<_Rep, _Period>& _Rel_time) {\r\n        _Validate();\r\n        _Owns = _Pmtx->try_lock_for(_Rel_time);\r\n        return _Owns;\r\n    }\r\n\r\n    template <class _Clock, class _Duration>\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock_until(const chrono::time_point<_Clock, _Duration>& _Abs_time) {\r\n        static_assert(chrono::_Is_clock_v<_Clock>, \"Clock type required\");\r\n        _Validate();\r\n        _Owns = _Pmtx->try_lock_until(_Abs_time);\r\n        return _Owns;\r\n    }\r\n\r\n    void unlock() {\r\n        if (!_Pmtx || !_Owns) {\r\n            _Throw_system_error(errc::operation_not_permitted);\r\n        }\r\n\r\n        _Pmtx->unlock();\r\n        _Owns = false;\r\n    }\r\n\r\n    void swap(unique_lock& _Other) noexcept {\r\n        _STD swap(_Pmtx, _Other._Pmtx);\r\n        _STD swap(_Owns, _Other._Owns);\r\n    }\r\n\r\n    _Mutex* release() noexcept {\r\n        _Mutex* _Res = _Pmtx;\r\n        _Pmtx        = nullptr;\r\n        _Owns        = false;\r\n        return _Res;\r\n    }\r\n\r\n    _NODISCARD bool owns_lock() const noexcept {\r\n        return _Owns;\r\n    }\r\n\r\n    explicit operator bool() const noexcept {\r\n        return _Owns;\r\n    }\r\n\r\n    _NODISCARD _Mutex* mutex() const noexcept {\r\n        return _Pmtx;\r\n    }\r\n\r\nprivate:\r\n    _Mutex* _Pmtx = nullptr;\r\n    bool _Owns    = false;\r\n\r\n    void _Validate() const { // check if the mutex can be locked\r\n        if (!_Pmtx) {\r\n            _Throw_system_error(errc::operation_not_permitted);\r\n        }\r\n\r\n        if (_Owns) {\r\n            _Throw_system_error(errc::resource_deadlock_would_occur);\r\n        }\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Mutex>\r\nvoid swap(unique_lock<_Mutex>& _Left, unique_lock<_Mutex>& _Right) noexcept {\r\n    _Left.swap(_Right);\r\n}\r\n\r\ntemplate <size_t... _Indices, class... _LockN>\r\nvoid _Lock_from_locks(const int _Target, index_sequence<_Indices...>, _LockN&... _LkN) { // lock _LkN[_Target]\r\n    int _Ignored[] = {((static_cast<int>(_Indices) == _Target ? (void) _LkN.lock() : void()), 0)...};\r\n    (void) _Ignored;\r\n}\r\n\r\ntemplate <size_t... _Indices, class... _LockN>\r\nbool _Try_lock_from_locks(\r\n    const int _Target, index_sequence<_Indices...>, _LockN&... _LkN) { // try to lock _LkN[_Target]\r\n    bool _Result{};\r\n    int _Ignored[] = {((static_cast<int>(_Indices) == _Target ? (void) (_Result = _LkN.try_lock()) : void()), 0)...};\r\n    (void) _Ignored;\r\n    return _Result;\r\n}\r\n\r\ntemplate <size_t... _Indices, class... _LockN>\r\nvoid _Unlock_locks(const int _First, const int _Last, index_sequence<_Indices...>, _LockN&... _LkN) noexcept\r\n/* terminates */ {\r\n    // unlock locks in _LkN[_First, _Last)\r\n    int _Ignored[] = {\r\n        ((_First <= static_cast<int>(_Indices) && static_cast<int>(_Indices) < _Last ? (void) _LkN.unlock() : void()),\r\n            0)...};\r\n    (void) _Ignored;\r\n}\r\n\r\ntemplate <class _Fn>\r\nstruct _NODISCARD _Unlock_call_guard {\r\n    static_assert(\r\n        is_trivially_copyable_v<_Fn>, \"This scope guard is only used for trivially copyable function objects.\");\r\n\r\n    explicit _Unlock_call_guard(const _Fn& _Fx) noexcept : _Func(_Fx) {}\r\n\r\n    ~_Unlock_call_guard() noexcept {\r\n        if (_Valid) {\r\n            _Func();\r\n        }\r\n    }\r\n\r\n    _Unlock_call_guard(const _Unlock_call_guard&)            = delete;\r\n    _Unlock_call_guard& operator=(const _Unlock_call_guard&) = delete;\r\n\r\n    _Fn _Func;\r\n    bool _Valid = true;\r\n};\r\n\r\ntemplate <class _Lock>\r\nstruct _NODISCARD _Unlock_one_guard {\r\n    explicit _Unlock_one_guard(_Lock& _Lk) noexcept : _Lk_ptr(_STD addressof(_Lk)) {}\r\n\r\n    ~_Unlock_one_guard() noexcept {\r\n        if (_Lk_ptr) {\r\n            _Lk_ptr->unlock();\r\n        }\r\n    }\r\n\r\n    _Unlock_one_guard(const _Unlock_one_guard&)            = delete;\r\n    _Unlock_one_guard& operator=(const _Unlock_one_guard&) = delete;\r\n\r\n    _Lock* _Lk_ptr;\r\n};\r\n\r\ntemplate <class... _LockN>\r\nint _Try_lock_range(const int _First, const int _Last, _LockN&... _LkN) {\r\n    using _Indices = index_sequence_for<_LockN...>;\r\n    int _Next      = _First;\r\n\r\n    auto _Unlocker = [_First, &_Next, &_LkN...]() noexcept { _STD _Unlock_locks(_First, _Next, _Indices{}, _LkN...); };\r\n    _Unlock_call_guard<decltype(_Unlocker)> _Guard{_Unlocker};\r\n\r\n    for (; _Next != _Last; ++_Next) {\r\n        if (!_STD _Try_lock_from_locks(_Next, _Indices{}, _LkN...)) { // try_lock failed, backout\r\n            return _Next;\r\n        }\r\n    }\r\n\r\n    _Guard._Valid = false;\r\n    return -1;\r\n}\r\n\r\n_EXPORT_STD template <class _Lock0, class _Lock1, class... _LockN>\r\n_NODISCARD_TRY_CHANGE_STATE int try_lock(_Lock0& _Lk0, _Lock1& _Lk1, _LockN&... _LkN) { // try to lock multiple locks\r\n    if constexpr (sizeof...(_LockN) == 0) {\r\n        // try to lock 2 locks, special case for better codegen and reduced metaprogramming for common case\r\n        if (!_Lk0.try_lock()) {\r\n            return 0;\r\n        }\r\n\r\n        _Unlock_one_guard<_Lock0> _Guard{_Lk0};\r\n        if (!_Lk1.try_lock()) {\r\n            return 1;\r\n        }\r\n\r\n        _Guard._Lk_ptr = nullptr;\r\n        return -1;\r\n    } else {\r\n        // try to lock 3 or more locks\r\n        return _Try_lock_range(0, sizeof...(_LockN) + 2, _Lk0, _Lk1, _LkN...);\r\n    }\r\n}\r\n\r\ntemplate <class... _LockN>\r\nint _Lock_attempt(const int _Hard_lock, _LockN&... _LkN) {\r\n    // attempt to lock 3 or more locks, starting by locking _LkN[_Hard_lock] and trying to lock the rest\r\n    using _Indices = index_sequence_for<_LockN...>;\r\n    _Lock_from_locks(_Hard_lock, _Indices{}, _LkN...);\r\n    int _Failed        = -1;\r\n    int _Backout_start = _Hard_lock; // that is, unlock _Hard_lock\r\n\r\n    {\r\n        auto _Unlocker = [&_Backout_start, _Hard_lock, &_LkN...]() noexcept {\r\n            _STD _Unlock_locks(_Backout_start, _Hard_lock + 1, _Indices{}, _LkN...);\r\n        };\r\n        _Unlock_call_guard<decltype(_Unlocker)> _Guard{_Unlocker};\r\n\r\n        _Failed = _STD _Try_lock_range(0, _Hard_lock, _LkN...);\r\n        if (_Failed == -1) {\r\n            _Backout_start = 0; // that is, unlock [0, _Hard_lock] if the next throws\r\n            _Failed        = _STD _Try_lock_range(_Hard_lock + 1, sizeof...(_LockN), _LkN...);\r\n            if (_Failed == -1) { // we got all the locks\r\n                _Guard._Valid = false;\r\n                return -1;\r\n            }\r\n        }\r\n        // we didn't get all the locks, backout with the scope guard\r\n    }\r\n\r\n    _STD this_thread::yield();\r\n    return _Failed;\r\n}\r\n\r\ntemplate <class _Lock0, class _Lock1>\r\nbool _Lock_attempt_small(_Lock0& _Lk0, _Lock1& _Lk1) {\r\n    // attempt to lock 2 locks, by first locking _Lk0, and then trying to lock _Lk1 returns whether to try again\r\n    _Lk0.lock();\r\n    {\r\n        _Unlock_one_guard<_Lock0> _Guard{_Lk0};\r\n        if (_Lk1.try_lock()) {\r\n            _Guard._Lk_ptr = nullptr;\r\n            return false;\r\n        }\r\n    }\r\n\r\n    _STD this_thread::yield();\r\n    return true;\r\n}\r\n\r\n_EXPORT_STD template <class _Lock0, class _Lock1, class... _LockN>\r\nvoid lock(_Lock0& _Lk0, _Lock1& _Lk1, _LockN&... _LkN) { // lock multiple locks, without deadlock\r\n    if constexpr (sizeof...(_LockN) == 0) {\r\n        // lock 2 locks, without deadlock, special case for better codegen and reduced metaprogramming for common case\r\n        while (_Lock_attempt_small(_Lk0, _Lk1) && _Lock_attempt_small(_Lk1, _Lk0)) { // keep trying\r\n        }\r\n    } else {\r\n        // lock 3 or more locks, without deadlock\r\n        int _Hard_lock = 0;\r\n        while (_Hard_lock != -1) {\r\n            _Hard_lock = _Lock_attempt(_Hard_lock, _Lk0, _Lk1, _LkN...);\r\n        }\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Mutex>\r\nclass _NODISCARD_LOCK lock_guard { // class with destructor that unlocks a mutex\r\npublic:\r\n    using mutex_type = _Mutex;\r\n\r\n    explicit lock_guard(_Mutex& _Mtx) : _MyMutex(_Mtx) { // construct and lock\r\n        _MyMutex.lock();\r\n    }\r\n\r\n    lock_guard(_Mutex& _Mtx, adopt_lock_t) noexcept // strengthened\r\n        : _MyMutex(_Mtx) {} // construct but don't lock\r\n\r\n    ~lock_guard() noexcept {\r\n        _MyMutex.unlock();\r\n    }\r\n\r\n    lock_guard(const lock_guard&)            = delete;\r\n    lock_guard& operator=(const lock_guard&) = delete;\r\n\r\nprivate:\r\n    _Mutex& _MyMutex;\r\n};\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class... _Mutexes>\r\nclass _NODISCARD_LOCK scoped_lock { // class with destructor that unlocks mutexes\r\npublic:\r\n    explicit scoped_lock(_Mutexes&... _Mtxes) : _MyMutexes(_Mtxes...) { // construct and lock\r\n        _STD lock(_Mtxes...);\r\n    }\r\n\r\n    explicit scoped_lock(adopt_lock_t, _Mutexes&... _Mtxes) noexcept // strengthened\r\n        : _MyMutexes(_Mtxes...) {} // construct but don't lock\r\n\r\n    ~scoped_lock() noexcept {\r\n        _STD apply([](_Mutexes&... _Mtxes) static { (..., (void) _Mtxes.unlock()); }, _MyMutexes);\r\n    }\r\n\r\n    scoped_lock(const scoped_lock&)            = delete;\r\n    scoped_lock& operator=(const scoped_lock&) = delete;\r\n\r\nprivate:\r\n    tuple<_Mutexes&...> _MyMutexes;\r\n};\r\n\r\ntemplate <class _Mutex>\r\nclass _NODISCARD_LOCK scoped_lock<_Mutex> {\r\npublic:\r\n    using mutex_type = _Mutex;\r\n\r\n    explicit scoped_lock(_Mutex& _Mtx) : _MyMutex(_Mtx) { // construct and lock\r\n        _MyMutex.lock();\r\n    }\r\n\r\n    explicit scoped_lock(adopt_lock_t, _Mutex& _Mtx) noexcept // strengthened\r\n        : _MyMutex(_Mtx) {} // construct but don't lock\r\n\r\n    ~scoped_lock() noexcept {\r\n        _MyMutex.unlock();\r\n    }\r\n\r\n    scoped_lock(const scoped_lock&)            = delete;\r\n    scoped_lock& operator=(const scoped_lock&) = delete;\r\n\r\nprivate:\r\n    _Mutex& _MyMutex;\r\n};\r\n\r\ntemplate <>\r\nclass scoped_lock<> {\r\npublic:\r\n    explicit scoped_lock() = default;\r\n    explicit scoped_lock(adopt_lock_t) noexcept /* strengthened */ {}\r\n\r\n    scoped_lock(const scoped_lock&)            = delete;\r\n    scoped_lock& operator=(const scoped_lock&) = delete;\r\n};\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD enum class cv_status { // names for wait returns\r\n    no_timeout,\r\n    timeout\r\n};\r\n\r\n_EXPORT_STD class condition_variable { // class for waiting for conditions\r\npublic:\r\n#ifdef _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR\r\n    condition_variable() noexcept /* strengthened */ {\r\n        _Cnd_init_in_situ(_Mycnd());\r\n    }\r\n#else // ^^^ defined(_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR) / !defined(_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR) vvv\r\n    condition_variable() noexcept /* strengthened */ = default;\r\n#endif // ^^^ !defined(_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR) ^^^\r\n\r\n    ~condition_variable() noexcept = default;\r\n\r\n    condition_variable(const condition_variable&)            = delete;\r\n    condition_variable& operator=(const condition_variable&) = delete;\r\n\r\n    void notify_one() noexcept { // wake up one waiter\r\n        _Cnd_signal(_Mycnd());\r\n    }\r\n\r\n    void notify_all() noexcept { // wake up all waiters\r\n        _Cnd_broadcast(_Mycnd());\r\n    }\r\n\r\n    void wait(unique_lock<mutex>& _Lck) noexcept /* strengthened */ { // wait for signal\r\n        // Nothing to do to comply with LWG-2135 because std::mutex lock/unlock are nothrow\r\n        _Cnd_wait(_Mycnd(), _Lck.mutex()->_Mymtx());\r\n    }\r\n\r\n    template <class _Predicate>\r\n    void wait(unique_lock<mutex>& _Lck, _Predicate _Pred) { // wait for signal and test predicate\r\n        while (!_Pred()) {\r\n            wait(_Lck);\r\n        }\r\n    }\r\n\r\n    template <class _Rep, class _Period>\r\n    cv_status wait_for(unique_lock<mutex>& _Lck, const chrono::duration<_Rep, _Period> _Rel_time) {\r\n        // wait for duration\r\n        if (_Rel_time <= chrono::duration<_Rep, _Period>::zero()) {\r\n            // we don't unlock-and-relock _Lck for this case because it's not observable\r\n            return cv_status::timeout;\r\n        }\r\n        return wait_until(_Lck, _To_absolute_time(_Rel_time));\r\n    }\r\n\r\n    template <class _Rep, class _Period, class _Predicate>\r\n    bool wait_for(unique_lock<mutex>& _Lck, const chrono::duration<_Rep, _Period> _Rel_time, _Predicate _Pred) {\r\n        // wait for signal with timeout and check predicate\r\n        return wait_until(_Lck, _To_absolute_time(_Rel_time), _STD _Pass_fn(_Pred));\r\n    }\r\n\r\n    template <class _Clock, class _Duration>\r\n    cv_status wait_until(unique_lock<mutex>& _Lck, const chrono::time_point<_Clock, _Duration> _Abs_time) {\r\n        // wait until time point\r\n        static_assert(chrono::_Is_clock_v<_Clock>, \"Clock type required\");\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(\r\n            _Lck.owns_lock(), \"wait_until's caller must own the lock argument (N4958 [thread.condition.condvar]/17)\");\r\n        _STL_VERIFY(_Mtx_current_owns(_Lck.mutex()->_Mymtx()),\r\n            \"wait_until's calling thread must hold the lock argument's mutex (N4958 [thread.condition.condvar]/17)\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        for (;;) {\r\n            const auto _Now = _Clock::now();\r\n            if (_Abs_time <= _Now) {\r\n                // we don't unlock-and-relock _Lck for this case because it's not observable\r\n                return cv_status::timeout;\r\n            }\r\n\r\n            const unsigned long _Rel_ms_count = _Clamped_rel_time_ms_count(_Abs_time - _Now)._Count;\r\n\r\n            const _Thrd_result _Res = _Cnd_timedwait_for_unchecked(_Mycnd(), _Lck.mutex()->_Mymtx(), _Rel_ms_count);\r\n            if (_Res == _Thrd_result::_Success) {\r\n                return cv_status::no_timeout;\r\n            }\r\n        }\r\n    }\r\n\r\n    template <class _Clock, class _Duration, class _Predicate>\r\n    bool wait_until(unique_lock<mutex>& _Lck, const chrono::time_point<_Clock, _Duration> _Abs_time, _Predicate _Pred) {\r\n        // wait for signal with timeout and check predicate\r\n        static_assert(chrono::_Is_clock_v<_Clock>, \"Clock type required\");\r\n        while (!_Pred()) {\r\n            if (wait_until(_Lck, _Abs_time) == cv_status::timeout) {\r\n                return _Pred();\r\n            }\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    // native_handle_type and native_handle() have intentionally been removed. See GH-3820.\r\n\r\n    void _Register(unique_lock<mutex>& _Lck, int* _Ready) noexcept { // register this object for release at thread exit\r\n        _Cnd_register_at_thread_exit(_Mycnd(), _Lck.release()->_Mymtx(), _Ready);\r\n    }\r\n\r\n    void _Unregister(mutex& _Mtx) noexcept { // unregister this object for release at thread exit\r\n        _Cnd_unregister_at_thread_exit(_Mtx._Mymtx());\r\n    }\r\n\r\nprivate:\r\n    _Cnd_internal_imp_t _Cnd_storage{};\r\n\r\n    _Cnd_t _Mycnd() noexcept {\r\n        return &_Cnd_storage;\r\n    }\r\n};\r\n\r\nstruct _UInt_is_zero {\r\n    const unsigned int& _UInt;\r\n\r\n    _NODISCARD bool operator()() const noexcept {\r\n        return _UInt == 0;\r\n    }\r\n};\r\n\r\n_EXPORT_STD class timed_mutex { // class for timed mutual exclusion\r\npublic:\r\n    timed_mutex() = default;\r\n\r\n    timed_mutex(const timed_mutex&)            = delete;\r\n    timed_mutex& operator=(const timed_mutex&) = delete;\r\n\r\n    void lock() { // lock the mutex\r\n        unique_lock<mutex> _Lock(_My_mutex);\r\n        while (_My_locked != 0) {\r\n            _My_cond.wait(_Lock);\r\n        }\r\n\r\n        _My_locked = UINT_MAX;\r\n    }\r\n\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock() noexcept /* strengthened */ { // try to lock the mutex\r\n        lock_guard<mutex> _Lock(_My_mutex);\r\n        if (_My_locked != 0) {\r\n            return false;\r\n        } else {\r\n            _My_locked = UINT_MAX;\r\n            return true;\r\n        }\r\n    }\r\n\r\n    void unlock() { // unlock the mutex\r\n        {\r\n            // The lock here is necessary\r\n            lock_guard<mutex> _Lock(_My_mutex);\r\n            _My_locked = 0;\r\n        }\r\n        _My_cond.notify_one();\r\n    }\r\n\r\n    template <class _Rep, class _Period>\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock_for(\r\n        const chrono::duration<_Rep, _Period>& _Rel_time) { // try to lock for duration\r\n        return try_lock_until(_To_absolute_time(_Rel_time));\r\n    }\r\n\r\n    template <class _Clock, class _Duration>\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock_until(const chrono::time_point<_Clock, _Duration>& _Abs_time) {\r\n        // try to lock the mutex with timeout\r\n        static_assert(chrono::_Is_clock_v<_Clock>, \"Clock type required\");\r\n        unique_lock<mutex> _Lock(_My_mutex);\r\n        if (!_My_cond.wait_until(_Lock, _Abs_time, _UInt_is_zero{_My_locked})) {\r\n            return false;\r\n        }\r\n\r\n        _My_locked = UINT_MAX;\r\n        return true;\r\n    }\r\n\r\nprivate:\r\n    mutex _My_mutex;\r\n    condition_variable _My_cond;\r\n    unsigned int _My_locked = 0;\r\n};\r\n\r\n_EXPORT_STD class recursive_timed_mutex { // class for recursive timed mutual exclusion\r\npublic:\r\n    recursive_timed_mutex() = default;\r\n\r\n    recursive_timed_mutex(const recursive_timed_mutex&)            = delete;\r\n    recursive_timed_mutex& operator=(const recursive_timed_mutex&) = delete;\r\n\r\n    void lock() { // lock the mutex\r\n        const thread::id _Tid = this_thread::get_id();\r\n\r\n        unique_lock<mutex> _Lock(_My_mutex);\r\n\r\n        if (_Tid == _My_owner) {\r\n            if (_My_locked < UINT_MAX) {\r\n                ++_My_locked;\r\n            } else {\r\n                // POSIX specifies EAGAIN in the corresponding situation:\r\n                // https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_lock.html\r\n                _STD _Throw_system_error(errc::resource_unavailable_try_again);\r\n            }\r\n        } else {\r\n            while (_My_locked != 0) {\r\n                _My_cond.wait(_Lock);\r\n            }\r\n\r\n            _My_locked = 1;\r\n            _My_owner  = _Tid;\r\n        }\r\n    }\r\n\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock() noexcept { // try to lock the mutex\r\n        const thread::id _Tid = this_thread::get_id();\r\n\r\n        lock_guard<mutex> _Lock(_My_mutex);\r\n\r\n        if (_Tid == _My_owner) {\r\n            if (_My_locked < UINT_MAX) {\r\n                ++_My_locked;\r\n            } else {\r\n                return false;\r\n            }\r\n        } else {\r\n            if (_My_locked != 0) {\r\n                return false;\r\n            } else {\r\n                _My_locked = 1;\r\n                _My_owner  = _Tid;\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    void unlock() { // unlock the mutex\r\n        bool _Do_notify = false;\r\n\r\n        {\r\n            lock_guard<mutex> _Lock(_My_mutex);\r\n            --_My_locked;\r\n            if (_My_locked == 0) {\r\n                _Do_notify = true;\r\n                _My_owner  = thread::id();\r\n            }\r\n        }\r\n\r\n        if (_Do_notify) {\r\n            _My_cond.notify_one();\r\n        }\r\n    }\r\n\r\n    template <class _Rep, class _Period>\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock_for(\r\n        const chrono::duration<_Rep, _Period>& _Rel_time) { // try to lock for duration\r\n        return try_lock_until(_To_absolute_time(_Rel_time));\r\n    }\r\n\r\n    template <class _Clock, class _Duration>\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock_until(const chrono::time_point<_Clock, _Duration>& _Abs_time) {\r\n        // try to lock the mutex with timeout\r\n        static_assert(chrono::_Is_clock_v<_Clock>, \"Clock type required\");\r\n        const thread::id _Tid = this_thread::get_id();\r\n\r\n        unique_lock<mutex> _Lock(_My_mutex);\r\n\r\n        if (_Tid == _My_owner) {\r\n            if (_My_locked < UINT_MAX) {\r\n                ++_My_locked;\r\n            } else {\r\n                return false;\r\n            }\r\n        } else {\r\n            if (!_My_cond.wait_until(_Lock, _Abs_time, _UInt_is_zero{_My_locked})) {\r\n                return false;\r\n            }\r\n\r\n            _My_locked = 1;\r\n            _My_owner  = _Tid;\r\n        }\r\n        return true;\r\n    }\r\n\r\nprivate:\r\n    mutex _My_mutex;\r\n    condition_variable _My_cond;\r\n    unsigned int _My_locked = 0;\r\n    thread::id _My_owner;\r\n};\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _MUTEX_\r\n"
  },
  {
    "path": "stl/inc/new",
    "content": "// new standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _NEW_\r\n#define _NEW_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <exception>\r\n#include <vcruntime_new.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n#if _HAS_CXX20\r\n_EXPORT_STD struct destroying_delete_t {\r\n    explicit destroying_delete_t() = default;\r\n};\r\n_EXPORT_STD inline constexpr destroying_delete_t destroying_delete{};\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD_LAUNDER constexpr _Ty* launder(_Ty* _Ptr) noexcept {\r\n    static_assert(!is_function_v<_Ty> && !is_void_v<_Ty>,\r\n        \"N4950 [ptr.launder]/1: Mandates: !is_function_v<T> && !is_void_v<T> is true.\");\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, DevCom-10456452\r\n    return __builtin_launder(_Ptr);\r\n#else // ^^^ no workaround / workaround vvv\r\n    return ::__builtin_launder(_Ptr);\r\n#endif // ^^^ workaround ^^^\r\n}\r\n\r\n#if defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM64)\r\n_EXPORT_STD inline constexpr size_t hardware_constructive_interference_size = 64;\r\n_EXPORT_STD inline constexpr size_t hardware_destructive_interference_size  = 64;\r\n#else // ^^^ known architecture / unknown architecture vvv\r\n#error Unknown architecture\r\n#endif // ^^^ unknown architecture ^^^\r\n\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD using new_handler = void(__CLRCALL_PURE_OR_CDECL*)();\r\n\r\n_EXPORT_STD extern \"C++\" _CRTIMP2 new_handler __cdecl set_new_handler(_In_opt_ new_handler) noexcept;\r\n_EXPORT_STD extern \"C++\" _NODISCARD _CRTIMP2 new_handler __cdecl get_new_handler() noexcept;\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _NEW_\r\n"
  },
  {
    "path": "stl/inc/numbers",
    "content": "// numbers standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _NUMBERS_\r\n#define _NUMBERS_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#if !_HAS_CXX20\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <numbers> are available only with C++20 or later.\");\r\n#else // ^^^ !_HAS_CXX20 / _HAS_CXX20 vvv\r\n#include <concepts>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\nnamespace numbers {\r\n    template <class _Ty>\r\n    struct _Invalid {\r\n        static_assert(false, \"A program that instantiates a primary template of a mathematical constant \"\r\n                             \"variable template is ill-formed. (N4950 [math.constants]/3)\");\r\n    };\r\n\r\n    // specializations allowed by N5014 [math.constants]/2 for all of these variable templates:\r\n    _EXPORT_STD template <class _Ty>\r\n    constexpr _Ty e_v = _Invalid<_Ty>{};\r\n    _EXPORT_STD template <class _Ty>\r\n    constexpr _Ty log2e_v = _Invalid<_Ty>{};\r\n    _EXPORT_STD template <class _Ty>\r\n    constexpr _Ty log10e_v = _Invalid<_Ty>{};\r\n    _EXPORT_STD template <class _Ty>\r\n    constexpr _Ty pi_v = _Invalid<_Ty>{};\r\n    _EXPORT_STD template <class _Ty>\r\n    constexpr _Ty inv_pi_v = _Invalid<_Ty>{};\r\n    _EXPORT_STD template <class _Ty>\r\n    constexpr _Ty inv_sqrtpi_v = _Invalid<_Ty>{};\r\n    _EXPORT_STD template <class _Ty>\r\n    constexpr _Ty ln2_v = _Invalid<_Ty>{};\r\n    _EXPORT_STD template <class _Ty>\r\n    constexpr _Ty ln10_v = _Invalid<_Ty>{};\r\n    _EXPORT_STD template <class _Ty>\r\n    constexpr _Ty sqrt2_v = _Invalid<_Ty>{};\r\n    _EXPORT_STD template <class _Ty>\r\n    constexpr _Ty sqrt3_v = _Invalid<_Ty>{};\r\n    _EXPORT_STD template <class _Ty>\r\n    constexpr _Ty inv_sqrt3_v = _Invalid<_Ty>{};\r\n    _EXPORT_STD template <class _Ty>\r\n    constexpr _Ty egamma_v = _Invalid<_Ty>{};\r\n    _EXPORT_STD template <class _Ty>\r\n    constexpr _Ty phi_v = _Invalid<_Ty>{};\r\n\r\n    template <floating_point _Floating>\r\n    constexpr _Floating e_v<_Floating> = static_cast<_Floating>(2.718281828459045);\r\n    template <floating_point _Floating>\r\n    constexpr _Floating log2e_v<_Floating> = static_cast<_Floating>(1.4426950408889634);\r\n    template <floating_point _Floating>\r\n    constexpr _Floating log10e_v<_Floating> = static_cast<_Floating>(0.4342944819032518);\r\n    template <floating_point _Floating>\r\n    constexpr _Floating pi_v<_Floating> = static_cast<_Floating>(3.141592653589793);\r\n    template <floating_point _Floating>\r\n    constexpr _Floating inv_pi_v<_Floating> = static_cast<_Floating>(0.3183098861837907);\r\n    template <floating_point _Floating>\r\n    constexpr _Floating inv_sqrtpi_v<_Floating> = static_cast<_Floating>(0.5641895835477563);\r\n    template <floating_point _Floating>\r\n    constexpr _Floating ln2_v<_Floating> = static_cast<_Floating>(0.6931471805599453);\r\n    template <floating_point _Floating>\r\n    constexpr _Floating ln10_v<_Floating> = static_cast<_Floating>(2.302585092994046);\r\n    template <floating_point _Floating>\r\n    constexpr _Floating sqrt2_v<_Floating> = static_cast<_Floating>(1.4142135623730951);\r\n    template <floating_point _Floating>\r\n    constexpr _Floating sqrt3_v<_Floating> = static_cast<_Floating>(1.7320508075688772);\r\n    template <floating_point _Floating>\r\n    constexpr _Floating inv_sqrt3_v<_Floating> = static_cast<_Floating>(0.5773502691896257);\r\n    template <floating_point _Floating>\r\n    constexpr _Floating egamma_v<_Floating> = static_cast<_Floating>(0.5772156649015329);\r\n    template <floating_point _Floating>\r\n    constexpr _Floating phi_v<_Floating> = static_cast<_Floating>(1.618033988749895);\r\n\r\n    _EXPORT_STD inline constexpr double e          = e_v<double>;\r\n    _EXPORT_STD inline constexpr double log2e      = log2e_v<double>;\r\n    _EXPORT_STD inline constexpr double log10e     = log10e_v<double>;\r\n    _EXPORT_STD inline constexpr double pi         = pi_v<double>;\r\n    _EXPORT_STD inline constexpr double inv_pi     = inv_pi_v<double>;\r\n    _EXPORT_STD inline constexpr double inv_sqrtpi = inv_sqrtpi_v<double>;\r\n    _EXPORT_STD inline constexpr double ln2        = ln2_v<double>;\r\n    _EXPORT_STD inline constexpr double ln10       = ln10_v<double>;\r\n    _EXPORT_STD inline constexpr double sqrt2      = sqrt2_v<double>;\r\n    _EXPORT_STD inline constexpr double sqrt3      = sqrt3_v<double>;\r\n    _EXPORT_STD inline constexpr double inv_sqrt3  = inv_sqrt3_v<double>;\r\n    _EXPORT_STD inline constexpr double egamma     = egamma_v<double>;\r\n    _EXPORT_STD inline constexpr double phi        = phi_v<double>;\r\n} // namespace numbers\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _NUMBERS_\r\n"
  },
  {
    "path": "stl/inc/numeric",
    "content": "// numeric standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _NUMERIC_\r\n#define _NUMERIC_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <xutility>\r\n\r\n#if _HAS_CXX17\r\n#include <__msvc_bit_utils.hpp>\r\n#endif // _HAS_CXX17\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n_STD_BEGIN\r\n_EXPORT_STD template <class _InIt, class _Ty, class _Fn>\r\n_NODISCARD _CONSTEXPR20 _Ty accumulate(const _InIt _First, const _InIt _Last, _Ty _Val, _Fn _Reduce_op) {\r\n    // return noncommutative and nonassociative reduction of _Val and all in [_First, _Last), using _Reduce_op\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n#if _HAS_CXX20\r\n        _Val = _Reduce_op(_STD move(_Val), *_UFirst);\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n        _Val = _Reduce_op(_Val, *_UFirst);\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n    }\r\n    return _Val;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _Ty>\r\n_NODISCARD _CONSTEXPR20 _Ty accumulate(const _InIt _First, const _InIt _Last, _Ty _Val) {\r\n    // return noncommutative and nonassociative reduction of _Val and all in [_First, _Last)\r\n    return _STD accumulate(_First, _Last, _Val, plus<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n#if _STD_VECTORIZE_WITH_FLOAT_CONTROL\r\ntemplate <class _InIt, class _Ty, class _BinOp>\r\nconstexpr bool _Plus_on_arithmetic_ranges_reduction_v =\r\n    conjunction_v<is_arithmetic<_Ty>, is_arithmetic<remove_pointer_t<_InIt>>, is_same<plus<>, _BinOp>>;\r\n\r\n#pragma float_control(precise, off, push)\r\ntemplate <class _InIt, class _Ty>\r\n_Ty _Reduce_plus_arithmetic_ranges(_InIt _First, const _InIt _Last, _Ty _Val) {\r\n    // return reduction, plus arithmetic on contiguous ranges case\r\n#pragma loop(ivdep)\r\n    for (; _First != _Last; ++_First) {\r\n        _Val += *_First;\r\n    }\r\n\r\n    return _Val;\r\n}\r\n#pragma float_control(pop)\r\n#endif // ^^^ _STD_VECTORIZE_WITH_FLOAT_CONTROL ^^^\r\n\r\n_EXPORT_STD template <class _InIt, class _Ty, class _BinOp>\r\n_NODISCARD _CONSTEXPR20 _Ty reduce(const _InIt _First, const _InIt _Last, _Ty _Val, _BinOp _Reduce_op) {\r\n    // return commutative and associative reduction of _Val and [_First, _Last), using _Reduce_op\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n#if _STD_VECTORIZE_WITH_FLOAT_CONTROL\r\n    if constexpr (_Plus_on_arithmetic_ranges_reduction_v<_Unwrapped_t<const _InIt&>, _Ty, _BinOp>) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            return _STD _Reduce_plus_arithmetic_ranges(_UFirst, _ULast, _Val);\r\n        }\r\n    }\r\n#endif // ^^^ _STD_VECTORIZE_WITH_FLOAT_CONTROL ^^^\r\n\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        _Val = _Reduce_op(_STD move(_Val), *_UFirst); // Requirement missing from N4950\r\n    }\r\n\r\n    return _Val;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _Ty>\r\n_NODISCARD _CONSTEXPR20 _Ty reduce(const _InIt _First, const _InIt _Last, _Ty _Val) {\r\n    // return commutative and associative reduction of _Val and [_First, _Last)\r\n    return _STD reduce(_First, _Last, _STD move(_Val), plus{});\r\n}\r\n\r\n_EXPORT_STD template <class _InIt>\r\n_NODISCARD _CONSTEXPR20 _Iter_value_t<_InIt> reduce(const _InIt _First, const _InIt _Last) {\r\n    // return commutative and associative reduction of\r\n    // iterator_traits<_InIt>::value_type{} and [_First, _Last)\r\n    return _STD reduce(_First, _Last, _Iter_value_t<_InIt>{}, plus{});\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Ty, class _BinOp, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _Ty reduce(_ExPo&& _Exec, _FwdIt _First, _FwdIt _Last, _Ty _Val, _BinOp _Reduce_op) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _Ty reduce(_ExPo&& _Exec, const _FwdIt _First, const _FwdIt _Last, _Ty _Val) noexcept /* terminates */ {\r\n    // return commutative and associative reduction of _Val and [_First, _Last)\r\n    return _STD reduce(_STD forward<_ExPo>(_Exec), _First, _Last, _STD move(_Val), plus{});\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _Iter_value_t<_FwdIt> reduce(_ExPo&& _Exec, const _FwdIt _First, const _FwdIt _Last) noexcept\r\n/* terminates */ {\r\n    // return commutative and associative reduction of\r\n    // iterator_traits<_FwdIt>::value_type{} and [_First, _Last)\r\n    return _STD reduce(_STD forward<_ExPo>(_Exec), _First, _Last, _Iter_value_t<_FwdIt>{}, plus{});\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _Ty, class _BinOp1, class _BinOp2>\r\n_NODISCARD _CONSTEXPR20 _Ty inner_product(\r\n    _InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Ty _Val, _BinOp1 _Reduce_op, _BinOp2 _Transform_op) {\r\n    // return noncommutative and nonassociative transform-reduction of sequences, using\r\n    // _Reduce_op and _Transform_op\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped_n(_First2, _STD _Idl_distance<_InIt1>(_UFirst1, _ULast1));\r\n    for (; _UFirst1 != _ULast1; ++_UFirst1, (void) ++_UFirst2) {\r\n#if _HAS_CXX20\r\n        _Val = _Reduce_op(_STD move(_Val), _Transform_op(*_UFirst1, *_UFirst2)); // Requirement missing from N4950\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n        _Val = _Reduce_op(_Val, _Transform_op(*_UFirst1, *_UFirst2)); // Requirement missing from N4950\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n    }\r\n\r\n    return _Val;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _Ty>\r\n_NODISCARD _CONSTEXPR20 _Ty inner_product(const _InIt1 _First1, const _InIt1 _Last1, const _InIt2 _First2, _Ty _Val) {\r\n    // return noncommutative and nonassociative transform-reduction of sequences\r\n    return _STD inner_product(_First1, _Last1, _First2, _STD move(_Val), plus<>{}, multiplies<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n#if _STD_VECTORIZE_WITH_FLOAT_CONTROL\r\ntemplate <class _InIt1, class _InIt2, class _Ty, class _BinOp1, class _BinOp2>\r\nconstexpr bool _Default_ops_transform_reduce_v =\r\n    conjunction_v<is_arithmetic<_Ty>, is_arithmetic<remove_pointer_t<_InIt1>>, is_arithmetic<remove_pointer_t<_InIt2>>,\r\n        is_same<plus<>, _BinOp1>, is_same<multiplies<>, _BinOp2>>;\r\n\r\n#pragma float_control(precise, off, push)\r\ntemplate <class _InIt1, class _InIt2, class _Ty>\r\n_Ty _Transform_reduce_arithmetic_defaults(_InIt1 _First1, const _InIt1 _Last1, _InIt2 _First2, _Ty _Val) {\r\n    // return transform-reduction, default ops on contiguous arithmetic ranges case\r\n#pragma loop(ivdep)\r\n    for (; _First1 != _Last1; ++_First1, (void) ++_First2) {\r\n        _Val += *_First1 * *_First2;\r\n    }\r\n\r\n    return _Val;\r\n}\r\n#pragma float_control(pop)\r\n#endif // ^^^ _STD_VECTORIZE_WITH_FLOAT_CONTROL ^^^\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _Ty, class _BinOp1, class _BinOp2>\r\n_NODISCARD _CONSTEXPR20 _Ty transform_reduce(\r\n    _InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Ty _Val, _BinOp1 _Reduce_op, _BinOp2 _Transform_op) {\r\n    // return commutative and associative transform-reduction of sequences, using\r\n    // _Reduce_op and _Transform_op\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped_n(_First2, _STD _Idl_distance<_InIt1>(_UFirst1, _ULast1));\r\n#if _STD_VECTORIZE_WITH_FLOAT_CONTROL\r\n    if constexpr (_Default_ops_transform_reduce_v<_Unwrapped_t<const _InIt1&>, _Unwrapped_t<const _InIt2&>, _Ty,\r\n                      _BinOp1, _BinOp2>) {\r\n#if _HAS_CXX20\r\n        // TRANSITION, DevCom-878972\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            return _STD _Transform_reduce_arithmetic_defaults(_UFirst1, _ULast1, _UFirst2, _STD move(_Val));\r\n        }\r\n    }\r\n#endif // ^^^ _STD_VECTORIZE_WITH_FLOAT_CONTROL ^^^\r\n\r\n    for (; _UFirst1 != _ULast1; ++_UFirst1, (void) ++_UFirst2) {\r\n        _Val = _Reduce_op(_STD move(_Val), _Transform_op(*_UFirst1, *_UFirst2)); // Requirement missing from N4950\r\n    }\r\n    return _Val;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _Ty>\r\n_NODISCARD _CONSTEXPR20 _Ty transform_reduce(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Ty _Val) {\r\n    // return commutative and associative transform-reduction of sequences\r\n    return _STD transform_reduce(_First1, _Last1, _First2, _STD move(_Val), plus{}, multiplies{});\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _Ty, class _BinOp, class _UnaryOp>\r\n_NODISCARD _CONSTEXPR20 _Ty transform_reduce(\r\n    const _InIt _First, const _InIt _Last, _Ty _Val, _BinOp _Reduce_op, _UnaryOp _Transform_op) {\r\n    // return commutative and associative reduction of transformed sequence, using\r\n    // _Reduce_op and _Transform_op\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        _Val = _Reduce_op(_STD move(_Val), _Transform_op(*_UFirst)); // Requirement missing from N4950\r\n    }\r\n\r\n    return _Val;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Ty, class _BinOp1, class _BinOp2,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _Ty transform_reduce(_ExPo&& _Exec, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _Ty _Val,\r\n    _BinOp1 _Reduce_op, _BinOp2 _Transform_op) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _Ty transform_reduce(_ExPo&& _Exec, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _Ty _Val) noexcept\r\n/* terminates */ {\r\n    // return commutative and associative transform-reduction of sequences\r\n    return _STD transform_reduce(\r\n        _STD forward<_ExPo>(_Exec), _First1, _Last1, _First2, _STD move(_Val), plus{}, multiplies{});\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Ty, class _BinOp, class _UnaryOp,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _Ty transform_reduce(_ExPo&& _Exec, _FwdIt _First1, _FwdIt _Last1, _Ty _Val, _BinOp _Reduce_op,\r\n    _UnaryOp _Transform_op) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt, class _BinOp>\r\n_CONSTEXPR20 _OutIt partial_sum(const _InIt _First, const _InIt _Last, _OutIt _Dest, _BinOp _Reduce_op) {\r\n    // compute partial noncommutative and nonassociative reductions into _Dest, using _Reduce_op\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UDest       = _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_InIt>(_UFirst, _ULast));\r\n\r\n    if (_UFirst != _ULast) {\r\n        _Iter_value_t<_InIt> _Val(*_UFirst);\r\n        for (;;) {\r\n            *_UDest = _Val;\r\n            ++_UDest;\r\n            ++_UFirst;\r\n            if (_UFirst == _ULast) {\r\n                break;\r\n            }\r\n#if _HAS_CXX20\r\n            _Val = _Reduce_op(_STD move(_Val), *_UFirst);\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n            _Val = _Reduce_op(_Val, *_UFirst);\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt>\r\n_CONSTEXPR20 _OutIt partial_sum(_InIt _First, _InIt _Last, _OutIt _Dest) {\r\n    // compute partial noncommutative and nonassociative reductions into _Dest\r\n    return _STD partial_sum(_First, _Last, _Dest, plus<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _InIt, class _OutIt, class _Ty, class _BinOp>\r\n_CONSTEXPR20 _OutIt exclusive_scan(const _InIt _First, const _InIt _Last, _OutIt _Dest, _Ty _Val, _BinOp _Reduce_op) {\r\n    // set each value in [_Dest, _Dest + (_Last - _First)) to the associative reduction of predecessors and _Val\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UDest       = _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_InIt>(_UFirst, _ULast));\r\n    if (_UFirst != _ULast) {\r\n        for (;;) {\r\n            _Ty _Tmp = _Reduce_op(_Val, *_UFirst); // temp to enable _First == _Dest, also requirement missing\r\n            *_UDest  = _Val;\r\n            ++_UDest;\r\n            ++_UFirst;\r\n            if (_UFirst == _ULast) {\r\n                break;\r\n            }\r\n\r\n            _Val = _STD move(_Tmp); // Requirement missing from N4950\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt, class _Ty>\r\n_CONSTEXPR20 _OutIt exclusive_scan(const _InIt _First, const _InIt _Last, const _OutIt _Dest, _Ty _Val) {\r\n    // set each value in [_Dest, _Dest + (_Last - _First)) to the associative reduction of predecessors and _Val\r\n    return _STD exclusive_scan(_First, _Last, _Dest, _STD move(_Val), plus{});\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Ty, class _BinOp,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 exclusive_scan(_ExPo&& _Exec, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest, _Ty _Val,\r\n    _BinOp _Reduce_op) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 exclusive_scan(_ExPo&& _Exec, const _FwdIt1 _First, const _FwdIt1 _Last, const _FwdIt2 _Dest, _Ty _Val) noexcept\r\n/* terminates */ {\r\n    // set each value in [_Dest, _Dest + (_Last - _First)) to the associative reduction of predecessors and _Val\r\n    return _STD exclusive_scan(_STD forward<_ExPo>(_Exec), _First, _Last, _Dest, _STD move(_Val), plus{});\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt, class _Ty, class _BinOp>\r\n_CONSTEXPR20 _OutIt inclusive_scan(const _InIt _First, const _InIt _Last, _OutIt _Dest, _BinOp _Reduce_op, _Ty _Val) {\r\n    // compute partial noncommutative and associative reductions including _Val into _Dest, using _Reduce_op\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UDest       = _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_InIt>(_UFirst, _ULast));\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        _Val    = _Reduce_op(_STD move(_Val), *_UFirst); // Requirement missing from N4950\r\n        *_UDest = _Val;\r\n        ++_UDest;\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt, class _BinOp>\r\n_CONSTEXPR20 _OutIt inclusive_scan(const _InIt _First, const _InIt _Last, _OutIt _Dest, _BinOp _Reduce_op) {\r\n    // compute partial noncommutative and associative reductions into _Dest, using _Reduce_op\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UDest       = _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_InIt>(_UFirst, _ULast));\r\n    if (_UFirst != _ULast) {\r\n        _Iter_value_t<_InIt> _Val(*_UFirst); // Requirement missing from N4950\r\n        for (;;) {\r\n            *_UDest = _Val;\r\n            ++_UDest;\r\n            ++_UFirst;\r\n            if (_UFirst == _ULast) {\r\n                break;\r\n            }\r\n\r\n            _Val = _Reduce_op(_STD move(_Val), *_UFirst); // Requirement missing from N4950\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt>\r\n_CONSTEXPR20 _OutIt inclusive_scan(const _InIt _First, const _InIt _Last, const _OutIt _Dest) {\r\n    // compute partial noncommutative and associative reductions into _Dest\r\n    return _STD inclusive_scan(_First, _Last, _Dest, plus{});\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _BinOp, class _Ty,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 inclusive_scan(\r\n    _ExPo&& _Exec, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op, _Ty _Val) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _BinOp, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 inclusive_scan(\r\n    _ExPo&& _Exec, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 inclusive_scan(_ExPo&& _Exec, const _FwdIt1 _First, const _FwdIt1 _Last, const _FwdIt2 _Dest) noexcept\r\n/* terminates */ {\r\n    // compute partial noncommutative and associative reductions into _Dest\r\n    return _STD inclusive_scan(_STD forward<_ExPo>(_Exec), _First, _Last, _Dest, plus{});\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt, class _Ty, class _BinOp, class _UnaryOp>\r\n_CONSTEXPR20 _OutIt transform_exclusive_scan(\r\n    const _InIt _First, const _InIt _Last, _OutIt _Dest, _Ty _Val, _BinOp _Reduce_op, _UnaryOp _Transform_op) {\r\n    // set each value in [_Dest, _Dest + (_Last - _First)) to the associative reduction of transformed predecessors\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UDest       = _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_InIt>(_UFirst, _ULast));\r\n    if (_UFirst != _ULast) {\r\n        for (;;) {\r\n            _Ty _Tmp = _Reduce_op(_Val, _Transform_op(*_UFirst)); // temp to enable _First == _Dest\r\n            *_UDest  = _Val;\r\n            ++_UDest;\r\n            ++_UFirst;\r\n            if (_UFirst == _ULast) {\r\n                break;\r\n            }\r\n\r\n            _Val = _STD move(_Tmp); // Requirement missing from N4950\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _OutIt, class _Ty, class _BinOp, class _UnaryOp,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_OutIt transform_exclusive_scan(_ExPo&& _Exec, _FwdIt1 _First, _FwdIt1 _Last, _OutIt _Dest, _Ty _Val, _BinOp _Reduce_op,\r\n    _UnaryOp _Transform_op) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt, class _Ty, class _BinOp, class _UnaryOp>\r\n_CONSTEXPR20 _OutIt transform_inclusive_scan(\r\n    const _InIt _First, const _InIt _Last, _OutIt _Dest, _BinOp _Reduce_op, _UnaryOp _Transform_op, _Ty _Val) {\r\n    // compute partial noncommutative and associative transformed reductions including _Val into _Dest\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UDest       = _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_InIt>(_UFirst, _ULast));\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        _Val    = _Reduce_op(_STD move(_Val), _Transform_op(*_UFirst)); // Requirement missing from N4950\r\n        *_UDest = _Val;\r\n        ++_UDest;\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt, class _BinOp, class _UnaryOp>\r\n_CONSTEXPR20 _OutIt transform_inclusive_scan(\r\n    const _InIt _First, const _InIt _Last, _OutIt _Dest, _BinOp _Reduce_op, _UnaryOp _Transform_op) {\r\n    // compute partial noncommutative and associative transformed reductions into _Dest\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UDest       = _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_InIt>(_UFirst, _ULast));\r\n    if (_UFirst != _ULast) {\r\n        auto _Val = _Transform_op(*_UFirst); // Requirement missing from N4950, also type to use unclear\r\n        for (;;) {\r\n            *_UDest = _Val;\r\n            ++_UDest;\r\n            ++_UFirst;\r\n            if (_UFirst == _ULast) {\r\n                break;\r\n            }\r\n\r\n            _Val = _Reduce_op(_STD move(_Val), _Transform_op(*_UFirst)); // Requirement missing from N4950\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Ty, class _BinOp, class _UnaryOp,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 transform_inclusive_scan(_ExPo&& _Exec, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op,\r\n    _UnaryOp _Transform_op, _Ty _Val) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _BinOp, class _UnaryOp,\r\n    _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 transform_inclusive_scan(_ExPo&& _Exec, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Reduce_op,\r\n    _UnaryOp _Transform_op) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class _TyDest, class _TySrc, class _BinOp>\r\nvoid _Adjacent_difference_no_overlap(\r\n    _TyDest* const _RESTRICT _Dest, _TySrc* const _RESTRICT _Src, const ptrdiff_t _Count, _BinOp _Func) {\r\n    _Dest[0] = _Src[0];\r\n    for (ptrdiff_t _Ix = 1; _Ix != _Count; ++_Ix) {\r\n#if _HAS_CXX20\r\n        _TySrc _Tmp = _Src[_Ix - 1];\r\n        _Dest[_Ix]  = _Func(_Src[_Ix], _STD move(_Tmp));\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n        _Dest[_Ix] = _Func(_Src[_Ix], _Src[_Ix - 1]);\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt, class _BinOp>\r\n_CONSTEXPR20 _OutIt adjacent_difference(const _InIt _First, const _InIt _Last, _OutIt _Dest, _BinOp _Func) {\r\n    // compute adjacent differences into _Dest\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UDest       = _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_InIt>(_UFirst, _ULast));\r\n    if (_UFirst != _ULast) {\r\n        if constexpr (_Iterators_are_contiguous<decltype(_UFirst), decltype(_UDest)> && !_Iterator_is_volatile<_InIt>\r\n                      && is_trivially_copyable_v<_Iter_value_t<_InIt>>) {\r\n#if _HAS_CXX20\r\n            if (!_STD is_constant_evaluated())\r\n#endif\r\n            {\r\n                const auto _Dest_dist = static_cast<_Iter_diff_t<decltype(_UDest)>>(_ULast - _UFirst);\r\n                _STD _Contiguous_iter_verify(_UDest, _Dest_dist);\r\n\r\n                // Go with pointers and without loop-carried dependency to enable vectorization\r\n                const auto _First_ptr = _STD _To_address(_UFirst);\r\n                const auto _Last_ptr  = _STD _To_address(_ULast);\r\n                const auto _Dest_ptr  = _STD _To_address(_UDest);\r\n\r\n                // Need to perform aliasing analysis.\r\n                // The vectorizer is generally able to do that on its own, and would guard the vectorized code with\r\n                // that, but when we eliminate the loop-carried dependency we change the semantics of the unvectorized\r\n                // code too. So we need to perform this check manually, and after that we can tell the compiler that\r\n                // there's no aliasing, to avoid it checking for that again.\r\n                if (reinterpret_cast<uintptr_t>(_Dest_ptr + static_cast<ptrdiff_t>(_Dest_dist))\r\n                        <= reinterpret_cast<uintptr_t>(_First_ptr)\r\n                    || reinterpret_cast<uintptr_t>(_Last_ptr) <= reinterpret_cast<uintptr_t>(_Dest_ptr)) {\r\n                    _STD _Adjacent_difference_no_overlap(\r\n                        _Dest_ptr, _First_ptr, static_cast<ptrdiff_t>(_Dest_dist), _STD _Pass_fn(_Func));\r\n                    _STD _Seek_wrapped(_Dest, _UDest + _Dest_dist);\r\n                    return _Dest;\r\n                }\r\n            }\r\n        }\r\n\r\n        _Iter_value_t<_InIt> _Val(*_UFirst);\r\n        *_UDest = _Val;\r\n        while (++_UFirst != _ULast) { // compute another difference\r\n            _Iter_value_t<_InIt> _Tmp(*_UFirst);\r\n#if _HAS_CXX20\r\n            *++_UDest = _Func(_Tmp, _STD move(_Val));\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n            *++_UDest = _Func(_Tmp, _Val);\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n            _Val = _STD move(_Tmp);\r\n        }\r\n\r\n        ++_UDest;\r\n    }\r\n\r\n    _STD _Seek_wrapped(_Dest, _UDest);\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt>\r\n_CONSTEXPR20 _OutIt adjacent_difference(const _InIt _First, const _InIt _Last, const _OutIt _Dest) {\r\n    // compute adjacent differences into _Dest\r\n    return _STD adjacent_difference(_First, _Last, _Dest, minus<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _BinOp, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 adjacent_difference(\r\n    _ExPo&& _Exec, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest, _BinOp _Diff_op) noexcept; // terminates\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 adjacent_difference(_ExPo&& _Exec, const _FwdIt1 _First, const _FwdIt1 _Last, const _FwdIt2 _Dest) noexcept\r\n/* terminates */ {\r\n    // compute adjacent differences into _Dest\r\n    return _STD adjacent_difference(_STD forward<_ExPo>(_Exec), _First, _Last, _Dest, minus{});\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Ty>\r\n_CONSTEXPR20 void iota(_FwdIt _First, _FwdIt _Last, _Ty _Val) {\r\n    // compute increasing sequence into [_First, _Last)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n\r\n    if constexpr (_Iterator_is_contiguous<decltype(_UFirst)> && is_integral_v<_Ty> && sizeof(_Ty) >= 4) {\r\n        // TRANSITION, DevCom-10593477: help the compiler vectorize\r\n        const auto _Ptr = _To_address(_UFirst);\r\n        (void) _STD _To_address(_ULast);\r\n        const auto _Size = static_cast<size_t>(_ULast - _UFirst);\r\n\r\n        if (_STD _In_range<_Ty>(_Size)) {\r\n            const auto _Size_typed = static_cast<_Ty>(_Size);\r\n            for (_Ty _Ix = 0; _Ix != _Size_typed; ++_Ix) {\r\n                _Ptr[_Ix] = _Val + _Ix;\r\n            }\r\n\r\n            return;\r\n        }\r\n    }\r\n\r\n    for (; _UFirst != _ULast; ++_UFirst, (void) ++_Val) {\r\n        *_UFirst = _Val;\r\n    }\r\n}\r\n\r\n#if _HAS_CXX23\r\nnamespace ranges {\r\n    _EXPORT_STD template <class _Out, class _Ty>\r\n    using iota_result = out_value_result<_Out, _Ty>;\r\n\r\n    class _Iota_fn {\r\n    public:\r\n        template <input_or_output_iterator _It, sentinel_for<_It> _Se, weakly_incrementable _Ty>\r\n            requires indirectly_writable<_It, const _Ty&>\r\n        static constexpr iota_result<_It, _Ty> operator()(_It _First, _Se _Last, _Ty _Val) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            _STD _Seek_wrapped(_First, _Iota_impl(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                                           _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _Val));\r\n            return {_STD move(_First), _STD move(_Val)};\r\n        }\r\n\r\n        template <weakly_incrementable _Ty, output_range<const _Ty&> _Rng>\r\n        static constexpr iota_result<borrowed_iterator_t<_Rng>, _Ty> operator()(_Rng&& _Range, _Ty _Val) {\r\n            auto _First = _RANGES begin(_Range);\r\n            _STD _Seek_wrapped(\r\n                _First, _Iota_impl(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range), _Val));\r\n            return {_STD move(_First), _STD move(_Val)};\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Ty>\r\n        _NODISCARD static constexpr _It _Iota_impl(_It _First, const _Se _Last, _Ty& _Val) {\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(weakly_incrementable<_Ty>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_writable<_It, const _Ty&>);\r\n\r\n            if constexpr (_Iterator_is_contiguous<_It> && sized_sentinel_for<_Se, _It> && is_integral_v<_Ty>\r\n                          && sizeof(_Ty) >= 4) {\r\n                // TRANSITION, DevCom-10593477: help the compiler vectorize\r\n                const auto _Ptr  = _To_address(_First);\r\n                const auto _Dist = _STD _Contiguous_iter_distance(_First, _Last);\r\n                const auto _Size = static_cast<size_t>(_Dist);\r\n\r\n                if (_STD _In_range<_Ty>(_Size)) {\r\n                    const auto _Size_typed = static_cast<_Ty>(_Size);\r\n                    for (_Ty _Ix = 0; _Ix != _Size_typed; ++_Ix) {\r\n                        const _Ty _Const_val = _Val + _Ix;\r\n                        _Ptr[_Ix]            = _Const_val;\r\n                    }\r\n\r\n                    _Val += _Size_typed;\r\n                    return _First + _Dist;\r\n                }\r\n            }\r\n\r\n            const _Ty& _Const_val = _Val;\r\n            for (; _First != _Last; ++_First, (void) ++_Val) {\r\n                *_First = _Const_val;\r\n            }\r\n            return _First;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Iota_fn iota;\r\n} // namespace ranges\r\n#endif // _HAS_CXX23\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Integral>\r\n_NODISCARD constexpr auto _Abs_u(const _Integral _Val) noexcept {\r\n    // computes absolute value of _Val (converting to an unsigned integer type if necessary to avoid overflow\r\n    // representing the negation of the minimum value)\r\n    static_assert(is_integral_v<_Integral>);\r\n\r\n    if constexpr (is_signed_v<_Integral>) {\r\n        using _Unsigned = make_unsigned_t<_Integral>;\r\n        if (_Val < 0) {\r\n            // note static_cast to _Unsigned such that _Integral == short returns unsigned short rather than int\r\n            return static_cast<_Unsigned>(_Unsigned{0} - static_cast<_Unsigned>(_Val));\r\n        }\r\n\r\n        return static_cast<_Unsigned>(_Val);\r\n    } else {\r\n        return _Val;\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Mt, class _Nt>\r\n_NODISCARD constexpr common_type_t<_Mt, _Nt> gcd(const _Mt _Mx, const _Nt _Nx) noexcept /* strengthened */ {\r\n    // calculate greatest common divisor\r\n    static_assert(_Is_nonbool_integral<_Mt> && _Is_nonbool_integral<_Nt>, \"GCD requires nonbool integral types\");\r\n\r\n    using _Common          = common_type_t<_Mt, _Nt>;\r\n    using _Common_unsigned = make_unsigned_t<_Common>;\r\n\r\n    if constexpr (is_signed_v<_Common>) {\r\n#ifndef _DEBUG\r\n        if (_STD _Is_constant_evaluated())\r\n#endif // ^^^ !defined(_DEBUG) ^^^\r\n        {\r\n            constexpr auto _Min_common = _STD _Min_limit<_Common>();\r\n            _STL_VERIFY(_Mx != _Min_common && _Nx != _Min_common,\r\n                \"Preconditions: |m| and |n| are representable as a value of common_type_t<M, N>. \"\r\n                \"(N4981 [numeric.ops.gcd]/2, N4981 [numeric.ops.lcm]/2)\");\r\n        }\r\n    }\r\n\r\n    return _Select_countr_zero_impl<_Common_unsigned>([=](auto _Countr_zero_impl) {\r\n        _Common_unsigned _Mx_magnitude = _Abs_u(_Mx);\r\n        _Common_unsigned _Nx_magnitude = _Abs_u(_Nx);\r\n        if (_Mx_magnitude == 0U) {\r\n            return static_cast<_Common>(_Nx_magnitude);\r\n        }\r\n\r\n        if (_Nx_magnitude == 0U) {\r\n            return static_cast<_Common>(_Mx_magnitude);\r\n        }\r\n\r\n        const auto _Mx_trailing_zeroes  = static_cast<unsigned long>(_Countr_zero_impl(_Mx_magnitude));\r\n        auto _Nx_trailing_zeroes        = static_cast<unsigned long>(_Countr_zero_impl(_Nx_magnitude));\r\n        const auto _Common_factors_of_2 = (_STD min) (_Mx_trailing_zeroes, _Nx_trailing_zeroes);\r\n        _Mx_magnitude >>= _Mx_trailing_zeroes;\r\n        for (;;) {\r\n            _Nx_magnitude >>= _Nx_trailing_zeroes;\r\n            if (_Mx_magnitude > _Nx_magnitude) {\r\n                _Common_unsigned _Temp = _Mx_magnitude;\r\n                _Mx_magnitude          = _Nx_magnitude;\r\n                _Nx_magnitude          = _Temp;\r\n            }\r\n\r\n            _Nx_magnitude -= _Mx_magnitude;\r\n            if (_Nx_magnitude == 0U) {\r\n                return static_cast<_Common>(_Mx_magnitude << _Common_factors_of_2);\r\n            }\r\n\r\n            _Nx_trailing_zeroes = static_cast<unsigned long>(_Countr_zero_impl(_Nx_magnitude));\r\n        }\r\n    });\r\n}\r\n\r\n_EXPORT_STD template <class _Mt, class _Nt>\r\n_NODISCARD constexpr common_type_t<_Mt, _Nt> lcm(const _Mt _Mx, const _Nt _Nx) noexcept /* strengthened */ {\r\n    // calculate least common multiple\r\n    static_assert(_Is_nonbool_integral<_Mt> && _Is_nonbool_integral<_Nt>, \"LCM requires nonbool integral types\");\r\n    using _Common                        = common_type_t<_Mt, _Nt>;\r\n    using _Common_unsigned               = make_unsigned_t<_Common>;\r\n    const _Common_unsigned _Mx_magnitude = _Abs_u(_Mx);\r\n    const _Common_unsigned _Nx_magnitude = _Abs_u(_Nx);\r\n    if (_Mx_magnitude == 0 || _Nx_magnitude == 0) {\r\n        return 0;\r\n    }\r\n\r\n#ifndef _DEBUG\r\n    if (!_STD _Is_constant_evaluated()) {\r\n        return static_cast<_Common>((_Mx_magnitude / _STD gcd(_Mx_magnitude, _Nx_magnitude)) * _Nx_magnitude);\r\n    }\r\n#endif // ^^^ !defined(_DEBUG) ^^^\r\n\r\n    _Common_unsigned _Result = 0;\r\n    _Common_unsigned _Tmp    = static_cast<_Common_unsigned>(_Mx_magnitude / _STD gcd(_Mx_magnitude, _Nx_magnitude));\r\n    const bool _Overflow     = _Mul_overflow(_Tmp, _Nx_magnitude, _Result) || !_STD _In_range<_Common>(_Result);\r\n\r\n    _STL_VERIFY(!_Overflow, \"Preconditions: The least common multiple of |m| and |n| is representable as a value of \"\r\n                            \"type common_type_t<M, N>. (N4981 [numeric.ops.lcm]/2)\");\r\n\r\n    return static_cast<_Common>(_Result);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty>\r\n    requires is_arithmetic_v<_Ty> && (!is_same_v<remove_cv_t<_Ty>, bool>)\r\n_NODISCARD constexpr _Ty midpoint(const _Ty _Val1, const _Ty _Val2) noexcept {\r\n    if constexpr (is_floating_point_v<_Ty>) {\r\n        if (_STD is_constant_evaluated()) {\r\n            if (_Is_nan(_Val1)) {\r\n                return _Val1;\r\n            }\r\n\r\n            if (_Is_nan(_Val2)) {\r\n                return _Val2;\r\n            }\r\n        } else {\r\n            if (_Is_nan(_Val1) || _Is_nan(_Val2)) {\r\n                // raise FE_INVALID if at least one of _Val1 and _Val2 is signaling NaN\r\n                return _Val1 + _Val2;\r\n            }\r\n        }\r\n\r\n        constexpr _Ty _High_limit = _Floating_type_traits<remove_cv_t<_Ty>>::_Maximum_value / 2;\r\n        const auto _Val1_a        = _Float_abs(_Val1);\r\n        const auto _Val2_a        = _Float_abs(_Val2);\r\n        if (_Val1_a <= _High_limit && _Val2_a <= _High_limit) {\r\n            // _Val1 and _Val2 are small enough that _Val1 + _Val2 won't overflow\r\n\r\n            // For the division to be inexact, the result of the addition must produce a value with the smallest\r\n            // effective exponent and the low order bit in the mantissa set. For an addition to be inexact in this\r\n            // condition, the difference between the inputs would have to be smaller than one ULP, but that is\r\n            // impossible.\r\n            //\r\n            // For example, with doubles, the sum/difference of the inputs would have to be finer than 2^-1074, for it\r\n            // to round (via whatever mode) to the value with a least significant 1 bit and p-1022, but the inputs can't\r\n            // be finer than 2^-1074 and addition/subtraction can't create smaller steps.\r\n\r\n            return (_Val1 + _Val2) / 2;\r\n        }\r\n\r\n        // Here at least one of {_Val1, _Val2} has large magnitude.\r\n        // Therefore, if one of the values is too small to divide by 2 exactly, the small magnitude is much less than\r\n        // one ULP of the result, so we can add it directly without the potentially inexact division by 2.\r\n\r\n        // In the default rounding mode this less than one ULP difference will always be rounded away, so under\r\n        // /fp:fast we could avoid these tests if we had some means of detecting it in the caller.\r\n        constexpr _Ty _Low_limit = _Floating_type_traits<remove_cv_t<_Ty>>::_Minimum_value * 2;\r\n        if (_Val1_a < _Low_limit) {\r\n            return _Val1 + _Val2 / 2;\r\n        }\r\n\r\n        if (_Val2_a < _Low_limit) {\r\n            // division of _Val2 by 2 would be inexact, etc.\r\n            return _Val1 / 2 + _Val2;\r\n        }\r\n\r\n        return _Val1 / 2 + _Val2 / 2;\r\n    } else {\r\n        using _Unsigned    = make_unsigned_t<_Ty>;\r\n        const auto _Val1_u = static_cast<_Unsigned>(_Val1);\r\n        const auto _Val2_u = static_cast<_Unsigned>(_Val2);\r\n        if (_Val1 > _Val2) {\r\n            return static_cast<_Ty>(_Val1 - static_cast<_Ty>(static_cast<_Unsigned>(_Val1_u - _Val2_u) / 2));\r\n        } else {\r\n            return static_cast<_Ty>(_Val1 + static_cast<_Ty>(static_cast<_Unsigned>(_Val2_u - _Val1_u) / 2));\r\n        }\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n    requires is_object_v<_Ty>\r\n_NODISCARD constexpr _Ty* midpoint(_Ty* const _Val1, _Ty* const _Val2) noexcept /* strengthened */ {\r\n    if (_Val1 > _Val2) {\r\n        return _Val1 - ((_Val1 - _Val2) >> 1); // shift for codegen\r\n    } else {\r\n        return _Val1 + ((_Val2 - _Val1) >> 1); // shift for codegen\r\n    }\r\n}\r\n#endif // _HAS_CXX20\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _NUMERIC_\r\n"
  },
  {
    "path": "stl/inc/optional",
    "content": "// optional standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _OPTIONAL_\r\n#define _OPTIONAL_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#if !_HAS_CXX17\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <optional> are available only with C++17 or later.\");\r\n#else // ^^^ !_HAS_CXX17 / _HAS_CXX17 vvv\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#endif // _HAS_CXX20\r\n#include <exception>\r\n#include <initializer_list>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <xsmf_control.h>\r\n#include <xutility>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\n_EXPORT_STD struct nullopt_t { // no-value state indicator\r\n    struct _Tag {};\r\n    constexpr explicit nullopt_t(_Tag) {}\r\n};\r\n_EXPORT_STD inline constexpr nullopt_t nullopt{nullopt_t::_Tag{}};\r\n\r\n_EXPORT_STD class _NODISCARD bad_optional_access : public exception {\r\npublic:\r\n    _NODISCARD const char* __CLR_OR_THIS_CALL what() const noexcept override {\r\n        return \"Bad optional access\";\r\n    }\r\n\r\n#if !_HAS_EXCEPTIONS\r\nprotected:\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n#endif // !_HAS_EXCEPTIONS\r\n};\r\n\r\n[[noreturn]] inline void _Throw_bad_optional_access() {\r\n    _THROW(bad_optional_access{});\r\n}\r\n\r\nstruct _Nontrivial_dummy_type {\r\n    constexpr _Nontrivial_dummy_type() noexcept {\r\n        // This default constructor is user-provided to avoid zero-initialization when objects are value-initialized.\r\n    }\r\n};\r\n_STL_INTERNAL_STATIC_ASSERT(!is_trivially_default_constructible_v<_Nontrivial_dummy_type>);\r\n\r\n#if _HAS_CXX23\r\nstruct _Construct_from_invoke_result_tag {\r\n    explicit _Construct_from_invoke_result_tag() = default;\r\n};\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Ty, bool = is_trivially_destructible_v<_Ty>>\r\nstruct _Optional_destruct_base { // either contains a value of _Ty or is empty (trivial destructor)\r\n    union {\r\n        _Nontrivial_dummy_type _Dummy;\r\n        remove_cv_t<_Ty> _Value;\r\n    };\r\n    bool _Has_value;\r\n\r\n    constexpr _Optional_destruct_base() noexcept : _Dummy{}, _Has_value{false} {} // initialize an empty optional\r\n\r\n    template <class... _Types>\r\n    constexpr explicit _Optional_destruct_base(in_place_t, _Types&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Ty, _Types...>)\r\n        : _Value(_STD forward<_Types>(_Args)...), _Has_value{true} {} // initialize contained value with _Args...\r\n\r\n#if _HAS_CXX23\r\n    template <class _Fn, class _Ux>\r\n    constexpr _Optional_destruct_base(_Construct_from_invoke_result_tag, _Fn&& _Func, _Ux&& _Arg)\r\n        noexcept(noexcept(static_cast<_Ty>(_STD invoke(_STD forward<_Fn>(_Func), _STD forward<_Ux>(_Arg)))))\r\n        : _Value(_STD invoke(_STD forward<_Fn>(_Func), _STD forward<_Ux>(_Arg))), _Has_value{true} {}\r\n#endif // _HAS_CXX23\r\n\r\n    // For the trivially destructible case, we can't add a destructor for _MSVC_STL_DESTRUCTOR_TOMBSTONES, due to\r\n    // N5001 [optional.dtor]/2: \"Remarks: If is_trivially_destructible_v<T> is true, then this destructor is trivial.\"\r\n\r\n    _CONSTEXPR20 void reset() noexcept {\r\n        _Has_value = false;\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Optional_destruct_base<_Ty, false> { // either contains a value of _Ty or is empty (non-trivial destructor)\r\n    union {\r\n        _Nontrivial_dummy_type _Dummy;\r\n        remove_cv_t<_Ty> _Value;\r\n    };\r\n    bool _Has_value;\r\n\r\n    _CONSTEXPR20 ~_Optional_destruct_base() noexcept {\r\n        if (_Has_value) {\r\n            _Value.~_Ty();\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n            // For the non-trivially destructible case, we can set the optional to be empty.\r\n            // We don't attempt to scribble over the bytes of the object's storage because that could be expensive\r\n            // and we don't know whether the object has an invalid representation, much less what it could be.\r\n            _Has_value = false;\r\n#endif\r\n        }\r\n    }\r\n\r\n    constexpr _Optional_destruct_base() noexcept : _Dummy{}, _Has_value{false} {} // initialize an empty optional\r\n\r\n    template <class... _Types>\r\n    constexpr explicit _Optional_destruct_base(in_place_t, _Types&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Ty, _Types...>)\r\n        : _Value(_STD forward<_Types>(_Args)...), _Has_value{true} {} // initialize contained value with _Args...\r\n\r\n#if _HAS_CXX23\r\n    template <class _Fn, class _Ux>\r\n    constexpr _Optional_destruct_base(_Construct_from_invoke_result_tag, _Fn&& _Func, _Ux&& _Arg)\r\n        noexcept(noexcept(static_cast<_Ty>(_STD invoke(_STD forward<_Fn>(_Func), _STD forward<_Ux>(_Arg)))))\r\n        : _Value(_STD invoke(_STD forward<_Fn>(_Func), _STD forward<_Ux>(_Arg))), _Has_value{true} {}\r\n#endif // _HAS_CXX23\r\n\r\n    _Optional_destruct_base(const _Optional_destruct_base&)            = default;\r\n    _Optional_destruct_base(_Optional_destruct_base&&)                 = default;\r\n    _Optional_destruct_base& operator=(const _Optional_destruct_base&) = default;\r\n    _Optional_destruct_base& operator=(_Optional_destruct_base&&)      = default;\r\n\r\n    _CONSTEXPR20 void reset() noexcept {\r\n        if (_Has_value) {\r\n            _Value.~_Ty();\r\n            _Has_value = false;\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Optional_construct_base : _Optional_destruct_base<_Ty> {\r\n    // Provide non-trivial SMF implementations for the _SMF_control machinery\r\n    using _Optional_destruct_base<_Ty>::_Optional_destruct_base;\r\n\r\n    template <class... _Types>\r\n    _CONSTEXPR20 _Ty& _Construct(_Types&&... _Args) noexcept(is_nothrow_constructible_v<_Ty, _Types...>) {\r\n        // transition from the empty to the value-containing state\r\n        _STL_INTERNAL_CHECK(!this->_Has_value);\r\n        _STD _Construct_in_place(this->_Value, _STD forward<_Types>(_Args)...);\r\n        this->_Has_value = true;\r\n        return this->_Value;\r\n    }\r\n\r\n    template <class _Ty2>\r\n    _CONSTEXPR20 void _Assign(_Ty2&& _Right)\r\n        noexcept(is_nothrow_assignable_v<_Ty&, _Ty2> && is_nothrow_constructible_v<_Ty, _Ty2>) {\r\n        // assign / initialize the contained value from _Right\r\n        if (this->_Has_value) {\r\n            static_cast<_Ty&>(this->_Value) = _STD forward<_Ty2>(_Right);\r\n        } else {\r\n            _Construct(_STD forward<_Ty2>(_Right));\r\n        }\r\n    }\r\n\r\n    template <class _Self>\r\n    _CONSTEXPR20 void _Construct_from(_Self&& _Right)\r\n        noexcept(is_nothrow_constructible_v<_Ty, decltype(_STD forward<_Self>(_Right).operator*())>) {\r\n        // initialize contained value from _Right iff it contains a value\r\n        if (_Right._Has_value) {\r\n            _Construct(_STD forward<_Self>(_Right).operator*());\r\n        }\r\n    }\r\n\r\n    template <class _Self>\r\n    _CONSTEXPR20 void _Assign_from(_Self&& _Right)\r\n        noexcept(is_nothrow_constructible_v<_Ty, decltype(_STD forward<_Self>(_Right).operator*())>\r\n                 && is_nothrow_assignable_v<_Ty&, decltype(_STD forward<_Self>(_Right).operator*())>) {\r\n        // assign/initialize/destroy contained value from _Right\r\n        if (_Right._Has_value) {\r\n            _Assign(_STD forward<_Self>(_Right).operator*());\r\n        } else {\r\n            this->reset();\r\n        }\r\n    }\r\n\r\n    _NODISCARD constexpr _Ty& operator*() & noexcept {\r\n#if _MSVC_STL_HARDENING_OPTIONAL || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(this->_Has_value, \"operator*() called on empty optional\");\r\n#endif\r\n\r\n        return this->_Value;\r\n    }\r\n\r\n    _NODISCARD constexpr const _Ty& operator*() const& noexcept {\r\n#if _MSVC_STL_HARDENING_OPTIONAL || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(this->_Has_value, \"operator*() called on empty optional\");\r\n#endif\r\n\r\n        return this->_Value;\r\n    }\r\n\r\n    _NODISCARD constexpr _Ty&& operator*() && noexcept {\r\n#if _MSVC_STL_HARDENING_OPTIONAL || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(this->_Has_value, \"operator*() called on empty optional\");\r\n#endif\r\n\r\n        return _STD move(this->_Value);\r\n    }\r\n\r\n    _NODISCARD constexpr const _Ty&& operator*() const&& noexcept {\r\n#if _MSVC_STL_HARDENING_OPTIONAL || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(this->_Has_value, \"operator*() called on empty optional\");\r\n#endif\r\n\r\n        return _STD move(this->_Value);\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass optional : private _SMF_control<_Optional_construct_base<_Ty>, _Ty> {\r\nprivate:\r\n    using _Mybase = _SMF_control<_Optional_construct_base<_Ty>, _Ty>;\r\n\r\n    template <class>\r\n    friend class optional;\r\n\r\n#if _HAS_CXX23\r\n    template <class _Fn, class _Ux>\r\n    constexpr optional(_Construct_from_invoke_result_tag _Tag, _Fn&& _Func, _Ux&& _Arg)\r\n        noexcept(noexcept(static_cast<_Ty>(_STD invoke(_STD forward<_Fn>(_Func), _STD forward<_Ux>(_Arg)))))\r\n        : _Mybase(_Tag, _STD forward<_Fn>(_Func), _STD forward<_Ux>(_Arg)) {}\r\n#endif // _HAS_CXX23\r\n\r\npublic:\r\n    static_assert(!_Is_any_of_v<remove_cv_t<_Ty>, nullopt_t, in_place_t>,\r\n        \"T in optional<T> must be a type other than nullopt_t or in_place_t (N4950 [optional.optional.general]/3).\");\r\n    static_assert(is_object_v<_Ty> && is_destructible_v<_Ty> && !is_array_v<_Ty>,\r\n        \"T in optional<T> must meet the Cpp17Destructible requirements (N4950 [optional.optional.general]/3).\");\r\n\r\n    using value_type = _Ty;\r\n\r\n    constexpr optional() noexcept {}\r\n    constexpr optional(nullopt_t) noexcept {}\r\n\r\n    template <class... _Types, enable_if_t<is_constructible_v<_Ty, _Types...>, int> = 0>\r\n    constexpr explicit optional(in_place_t, _Types&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Ty, _Types...>) // strengthened\r\n        : _Mybase(in_place, _STD forward<_Types>(_Args)...) {}\r\n\r\n    template <class _Elem, class... _Types,\r\n        enable_if_t<is_constructible_v<_Ty, initializer_list<_Elem>&, _Types...>, int> = 0>\r\n    constexpr explicit optional(in_place_t, initializer_list<_Elem> _Ilist, _Types&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Ty, initializer_list<_Elem>&, _Types...>) // strengthened\r\n        : _Mybase(in_place, _Ilist, _STD forward<_Types>(_Args)...) {}\r\n\r\n    template <class _Ty2>\r\n    using _AllowDirectConversion = bool_constant<conjunction_v<negation<is_same<_Remove_cvref_t<_Ty2>, optional>>,\r\n        negation<is_same<_Remove_cvref_t<_Ty2>, in_place_t>>,\r\n        negation<conjunction<is_same<remove_cv_t<_Ty>, bool>, _Is_specialization<_Remove_cvref_t<_Ty2>, optional>>>,\r\n        is_constructible<_Ty, _Ty2>>>;\r\n\r\n    template <class _Ty2 = remove_cv_t<_Ty>, enable_if_t<_AllowDirectConversion<_Ty2>::value, int> = 0>\r\n    constexpr explicit(!is_convertible_v<_Ty2, _Ty>) optional(_Ty2&& _Right)\r\n        noexcept(is_nothrow_constructible_v<_Ty, _Ty2>) // strengthened\r\n        : _Mybase(in_place, _STD forward<_Ty2>(_Right)) {}\r\n\r\n    template <class _Ty2>\r\n    struct _AllowUnwrapping\r\n        : bool_constant<disjunction_v<is_same<remove_cv_t<_Ty>, bool>,\r\n              negation<disjunction<is_same<_Ty, _Ty2>, is_constructible<_Ty, optional<_Ty2>&>,\r\n                  is_constructible<_Ty, const optional<_Ty2>&>, is_constructible<_Ty, const optional<_Ty2>>,\r\n                  is_constructible<_Ty, optional<_Ty2>>, is_convertible<optional<_Ty2>&, _Ty>,\r\n                  is_convertible<const optional<_Ty2>&, _Ty>, is_convertible<const optional<_Ty2>, _Ty>,\r\n                  is_convertible<optional<_Ty2>, _Ty>>>>> {};\r\n\r\n    template <class _Ty2,\r\n        enable_if_t<conjunction_v<_AllowUnwrapping<_Ty2>, is_constructible<_Ty, const _Ty2&>>, int> = 0>\r\n    _CONSTEXPR20 explicit(!is_convertible_v<const _Ty2&, _Ty>) optional(const optional<_Ty2>& _Right)\r\n        noexcept(is_nothrow_constructible_v<_Ty, const _Ty2&>) /* strengthened */ {\r\n        if (_Right._Has_value) {\r\n            this->_Construct(_Right.operator*());\r\n        }\r\n    }\r\n\r\n    template <class _Ty2, enable_if_t<conjunction_v<_AllowUnwrapping<_Ty2>, is_constructible<_Ty, _Ty2>>, int> = 0>\r\n    _CONSTEXPR20 explicit(!is_convertible_v<_Ty2, _Ty>) optional(optional<_Ty2>&& _Right)\r\n        noexcept(is_nothrow_constructible_v<_Ty, _Ty2>) /* strengthened */ {\r\n        if (_Right._Has_value) {\r\n            this->_Construct(_STD move(_Right.operator*()));\r\n        }\r\n    }\r\n\r\n    _CONSTEXPR20 optional& operator=(nullopt_t) noexcept {\r\n        reset();\r\n        return *this;\r\n    }\r\n\r\n    template <class _Ty2 = remove_cv_t<_Ty>,\r\n        enable_if_t<conjunction_v<negation<is_same<optional, _Remove_cvref_t<_Ty2>>>,\r\n                        negation<conjunction<is_scalar<_Ty>, is_same<_Ty, decay_t<_Ty2>>>>, is_constructible<_Ty, _Ty2>,\r\n                        is_assignable<_Ty&, _Ty2>>,\r\n            int>         = 0>\r\n    _CONSTEXPR20 optional& operator=(_Ty2&& _Right)\r\n        noexcept(is_nothrow_assignable_v<_Ty&, _Ty2> && is_nothrow_constructible_v<_Ty, _Ty2>) /* strengthened */ {\r\n        this->_Assign(_STD forward<_Ty2>(_Right));\r\n        return *this;\r\n    }\r\n\r\n    template <class _Ty2>\r\n    struct _AllowUnwrappingAssignment\r\n        : bool_constant<!disjunction_v<is_same<_Ty, _Ty2>, is_assignable<_Ty&, optional<_Ty2>&>,\r\n              is_assignable<_Ty&, const optional<_Ty2>&>, is_assignable<_Ty&, const optional<_Ty2>>,\r\n              is_assignable<_Ty&, optional<_Ty2>>>> {};\r\n\r\n    template <class _Ty2, enable_if_t<conjunction_v<_AllowUnwrappingAssignment<_Ty2>,\r\n                                          is_constructible<_Ty, const _Ty2&>, is_assignable<_Ty&, const _Ty2&>>,\r\n                              int> = 0>\r\n    _CONSTEXPR20 optional& operator=(const optional<_Ty2>& _Right) noexcept(\r\n        is_nothrow_assignable_v<_Ty&, const _Ty2&> && is_nothrow_constructible_v<_Ty, const _Ty2&>) /* strengthened */ {\r\n        if (_Right._Has_value) {\r\n            this->_Assign(_Right.operator*());\r\n        } else {\r\n            reset();\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    template <class _Ty2, enable_if_t<conjunction_v<_AllowUnwrappingAssignment<_Ty2>, is_constructible<_Ty, _Ty2>,\r\n                                          is_assignable<_Ty&, _Ty2>>,\r\n                              int> = 0>\r\n    _CONSTEXPR20 optional& operator=(optional<_Ty2>&& _Right)\r\n        noexcept(is_nothrow_assignable_v<_Ty&, _Ty2> && is_nothrow_constructible_v<_Ty, _Ty2>) /* strengthened */ {\r\n        if (_Right._Has_value) {\r\n            this->_Assign(_STD move(_Right.operator*()));\r\n        } else {\r\n            reset();\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    template <class... _Types>\r\n    _CONSTEXPR20 _Ty& emplace(_Types&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Ty, _Types...>) /* strengthened */ {\r\n        reset();\r\n        return this->_Construct(_STD forward<_Types>(_Args)...);\r\n    }\r\n\r\n    template <class _Elem, class... _Types,\r\n        enable_if_t<is_constructible_v<_Ty, initializer_list<_Elem>&, _Types...>, int> = 0>\r\n    _CONSTEXPR20 _Ty& emplace(initializer_list<_Elem> _Ilist, _Types&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Ty, initializer_list<_Elem>&, _Types...>) /* strengthened */ {\r\n        reset();\r\n        return this->_Construct(_Ilist, _STD forward<_Types>(_Args)...);\r\n    }\r\n\r\n    _CONSTEXPR20 void swap(optional& _Right)\r\n        noexcept(is_nothrow_move_constructible_v<_Ty> && is_nothrow_swappable_v<_Ty>) {\r\n        if constexpr (is_move_constructible_v<_Ty>) {\r\n            static_assert(\r\n                is_swappable_v<_Ty>, \"optional<T>::swap requires T to be swappable (N4993 [optional.swap]/2).\");\r\n        } else {\r\n            static_assert(false, \"optional<T>::swap requires T to be move constructible (N4993 [optional.swap]/1).\");\r\n        }\r\n        using _STD swap;\r\n        if constexpr (_Is_trivially_swappable_v<_Ty>) {\r\n            using _TrivialBaseTy = _Optional_destruct_base<_Ty>;\r\n            _STD swap(static_cast<_TrivialBaseTy&>(*this), static_cast<_TrivialBaseTy&>(_Right));\r\n        } else {\r\n            const bool _Engaged = this->_Has_value;\r\n            if (_Engaged == _Right._Has_value) {\r\n                if (_Engaged) {\r\n                    swap(this->operator*(), _Right.operator*()); // intentional ADL\r\n                }\r\n            } else {\r\n                optional& _Source = _Engaged ? *this : _Right;\r\n                optional& _Target = _Engaged ? _Right : *this;\r\n                _Target._Construct(_STD move(_Source.operator*()));\r\n                _Source.reset();\r\n            }\r\n        }\r\n    }\r\n\r\n    _NODISCARD constexpr const _Ty* operator->() const noexcept {\r\n#if _MSVC_STL_HARDENING_OPTIONAL || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(this->_Has_value, \"operator->() called on empty optional\");\r\n#endif\r\n\r\n        return _STD addressof(this->_Value);\r\n    }\r\n    _NODISCARD constexpr _Ty* operator->() noexcept {\r\n#if _MSVC_STL_HARDENING_OPTIONAL || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(this->_Has_value, \"operator->() called on empty optional\");\r\n#endif\r\n\r\n        return _STD addressof(this->_Value);\r\n    }\r\n\r\n    using _Mybase::operator*;\r\n\r\n    constexpr explicit operator bool() const noexcept {\r\n        return this->_Has_value;\r\n    }\r\n    _NODISCARD constexpr bool has_value() const noexcept {\r\n        return this->_Has_value;\r\n    }\r\n\r\n    _NODISCARD constexpr const _Ty& value() const& {\r\n        if (!this->_Has_value) {\r\n            _Throw_bad_optional_access();\r\n        }\r\n\r\n        return this->_Value;\r\n    }\r\n    _NODISCARD constexpr _Ty& value() & {\r\n        if (!this->_Has_value) {\r\n            _Throw_bad_optional_access();\r\n        }\r\n\r\n        return this->_Value;\r\n    }\r\n    _NODISCARD constexpr _Ty&& value() && {\r\n        if (!this->_Has_value) {\r\n            _Throw_bad_optional_access();\r\n        }\r\n\r\n        return _STD move(this->_Value);\r\n    }\r\n    _NODISCARD constexpr const _Ty&& value() const&& {\r\n        if (!this->_Has_value) {\r\n            _Throw_bad_optional_access();\r\n        }\r\n\r\n        return _STD move(this->_Value);\r\n    }\r\n\r\n    template <class _Ty2 = remove_cv_t<_Ty>>\r\n    _NODISCARD constexpr remove_cv_t<_Ty> value_or(_Ty2&& _Right) const& {\r\n        static_assert(is_convertible_v<const _Ty&, remove_cv_t<_Ty>>,\r\n            \"The const overload of optional<T>::value_or requires const T& to be convertible to remove_cv_t<T> \"\r\n            \"(N4950 [optional.observe]/15 as modified by LWG-3424).\");\r\n        static_assert(is_convertible_v<_Ty2, remove_cv_t<_Ty>>,\r\n            \"optional<T>::value_or(U) requires U to be convertible to remove_cv_t<T> \"\r\n            \"(N4950 [optional.observe]/15 as modified by LWG-3424).\");\r\n\r\n        if (this->_Has_value) {\r\n            return static_cast<const _Ty&>(this->_Value);\r\n        }\r\n\r\n        return static_cast<remove_cv_t<_Ty>>(_STD forward<_Ty2>(_Right));\r\n    }\r\n    template <class _Ty2 = remove_cv_t<_Ty>>\r\n    _NODISCARD constexpr remove_cv_t<_Ty> value_or(_Ty2&& _Right) && {\r\n        static_assert(is_convertible_v<_Ty, remove_cv_t<_Ty>>,\r\n            \"The rvalue overload of optional<T>::value_or requires T to be convertible to remove_cv_t<T> \"\r\n            \"(N4950 [optional.observe]/17 as modified by LWG-3424).\");\r\n        static_assert(is_convertible_v<_Ty2, remove_cv_t<_Ty>>,\r\n            \"optional<T>::value_or(U) requires U to be convertible to remove_cv_t<T> \"\r\n            \"(N4950 [optional.observe]/17 as modified by LWG-3424).\");\r\n\r\n        if (this->_Has_value) {\r\n            return static_cast<_Ty&&>(this->_Value);\r\n        }\r\n\r\n        return static_cast<remove_cv_t<_Ty>>(_STD forward<_Ty2>(_Right));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _Fn>\r\n    constexpr auto and_then(_Fn&& _Func) & {\r\n        using _Uty = invoke_result_t<_Fn, _Ty&>;\r\n\r\n        static_assert(_Is_specialization_v<remove_cvref_t<_Uty>, optional>,\r\n            \"optional<T>::and_then(F) requires the return type of F to be a specialization of optional \"\r\n            \"(N4950 [optional.monadic]/2).\");\r\n\r\n        if (this->_Has_value) {\r\n            return _STD invoke(_STD forward<_Fn>(_Func), static_cast<_Ty&>(this->_Value));\r\n        } else {\r\n            return remove_cvref_t<_Uty>{};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n    constexpr auto and_then(_Fn&& _Func) const& {\r\n        using _Uty = invoke_result_t<_Fn, const _Ty&>;\r\n\r\n        static_assert(_Is_specialization_v<remove_cvref_t<_Uty>, optional>,\r\n            \"optional<T>::and_then(F) requires the return type of F to be a specialization of optional \"\r\n            \"(N4950 [optional.monadic]/2).\");\r\n\r\n        if (this->_Has_value) {\r\n            return _STD invoke(_STD forward<_Fn>(_Func), static_cast<const _Ty&>(this->_Value));\r\n        } else {\r\n            return remove_cvref_t<_Uty>{};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n    constexpr auto and_then(_Fn&& _Func) && {\r\n        using _Uty = invoke_result_t<_Fn, _Ty>;\r\n\r\n        static_assert(_Is_specialization_v<remove_cvref_t<_Uty>, optional>,\r\n            \"optional<T>::and_then(F) requires the return type of F to be a specialization of optional \"\r\n            \"(N4950 [optional.monadic]/5).\");\r\n\r\n        if (this->_Has_value) {\r\n            return _STD invoke(_STD forward<_Fn>(_Func), static_cast<_Ty&&>(this->_Value));\r\n        } else {\r\n            return remove_cvref_t<_Uty>{};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n    constexpr auto and_then(_Fn&& _Func) const&& {\r\n        using _Uty = invoke_result_t<_Fn, const _Ty>;\r\n\r\n        static_assert(_Is_specialization_v<remove_cvref_t<_Uty>, optional>,\r\n            \"optional<T>::and_then(F) requires the return type of F to be a specialization of optional \"\r\n            \"(N4950 [optional.monadic]/5).\");\r\n\r\n        if (this->_Has_value) {\r\n            return _STD invoke(_STD forward<_Fn>(_Func), static_cast<const _Ty&&>(this->_Value));\r\n        } else {\r\n            return remove_cvref_t<_Uty>{};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n    constexpr auto transform(_Fn&& _Func) & {\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn, _Ty&>>;\r\n\r\n        static_assert(!_Is_any_of_v<_Uty, nullopt_t, in_place_t>,\r\n            \"optional<T>::transform(F) requires the return type of F to be a type other than nullopt_t or in_place_t \"\r\n            \"(N4950 [optional.monadic]/8).\");\r\n        static_assert(is_object_v<_Uty> && !is_array_v<_Uty>,\r\n            \"optional<T>::transform(F) requires the return type of F to be a non-array object type \"\r\n            \"(N4950 [optional.monadic]/8).\");\r\n\r\n        if (this->_Has_value) {\r\n            return optional<_Uty>{\r\n                _Construct_from_invoke_result_tag{}, _STD forward<_Fn>(_Func), static_cast<_Ty&>(this->_Value)};\r\n        } else {\r\n            return optional<_Uty>{};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n    constexpr auto transform(_Fn&& _Func) const& {\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn, const _Ty&>>;\r\n\r\n        static_assert(!_Is_any_of_v<_Uty, nullopt_t, in_place_t>,\r\n            \"optional<T>::transform(F) requires the return type of F to be a type other than nullopt_t or in_place_t \"\r\n            \"(N4950 [optional.monadic]/8).\");\r\n        static_assert(is_object_v<_Uty> && !is_array_v<_Uty>,\r\n            \"optional<T>::transform(F) requires the return type of F to be a non-array object type \"\r\n            \"(N4950 [optional.monadic]/8).\");\r\n\r\n        if (this->_Has_value) {\r\n            return optional<_Uty>{\r\n                _Construct_from_invoke_result_tag{}, _STD forward<_Fn>(_Func), static_cast<const _Ty&>(this->_Value)};\r\n        } else {\r\n            return optional<_Uty>{};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n    constexpr auto transform(_Fn&& _Func) && {\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn, _Ty>>;\r\n\r\n        static_assert(!_Is_any_of_v<_Uty, nullopt_t, in_place_t>,\r\n            \"optional<T>::transform(F) requires the return type of F to be a type other than nullopt_t or in_place_t \"\r\n            \"(N4950 [optional.monadic]/11).\");\r\n        static_assert(is_object_v<_Uty> && !is_array_v<_Uty>,\r\n            \"optional<T>::transform(F) requires the return type of F to be a non-array object type \"\r\n            \"(N4950 [optional.monadic]/11).\");\r\n\r\n        if (this->_Has_value) {\r\n            return optional<_Uty>{\r\n                _Construct_from_invoke_result_tag{}, _STD forward<_Fn>(_Func), static_cast<_Ty&&>(this->_Value)};\r\n        } else {\r\n            return optional<_Uty>{};\r\n        }\r\n    }\r\n\r\n    template <class _Fn>\r\n    constexpr auto transform(_Fn&& _Func) const&& {\r\n        using _Uty = remove_cv_t<invoke_result_t<_Fn, const _Ty>>;\r\n\r\n        static_assert(!_Is_any_of_v<_Uty, nullopt_t, in_place_t>,\r\n            \"optional<T>::transform(F) requires the return type of F to be a type other than nullopt_t or in_place_t \"\r\n            \"(N4950 [optional.monadic]/11).\");\r\n        static_assert(is_object_v<_Uty> && !is_array_v<_Uty>,\r\n            \"optional<T>::transform(F) requires the return type of F to be a non-array object type \"\r\n            \"(N4950 [optional.monadic]/11).\");\r\n\r\n        if (this->_Has_value) {\r\n            return optional<_Uty>{\r\n                _Construct_from_invoke_result_tag{}, _STD forward<_Fn>(_Func), static_cast<const _Ty&&>(this->_Value)};\r\n        } else {\r\n            return optional<_Uty>{};\r\n        }\r\n    }\r\n\r\n    template <invocable<> _Fn>\r\n        requires copy_constructible<_Ty>\r\n    constexpr optional or_else(_Fn&& _Func) const& {\r\n        static_assert(is_same_v<remove_cvref_t<invoke_result_t<_Fn>>, optional>,\r\n            \"optional<T>::or_else(F) requires F to return an optional<T> (N4950 [optional.monadic]/14).\");\r\n\r\n        if (this->_Has_value) {\r\n            return *this;\r\n        } else {\r\n            return _STD forward<_Fn>(_Func)();\r\n        }\r\n    }\r\n\r\n    template <invocable<> _Fn>\r\n        requires move_constructible<_Ty>\r\n    constexpr optional or_else(_Fn&& _Func) && {\r\n        static_assert(is_same_v<remove_cvref_t<invoke_result_t<_Fn>>, optional>,\r\n            \"optional<T>::or_else(F) requires F to return an optional<T> (N4950 [optional.monadic]/17).\");\r\n\r\n        if (this->_Has_value) {\r\n            return _STD move(*this);\r\n        } else {\r\n            return _STD forward<_Fn>(_Func)();\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    using _Mybase::reset;\r\n};\r\n\r\ntemplate <class _Ty>\r\noptional(_Ty) -> optional<_Ty>;\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool operator==(const optional<_Ty1>& _Left, const optional<_Ty2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left.operator*() == _Right.operator*()))) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires {\r\n        { _Left.operator*() == _Right.operator*() } -> _Implicitly_convertible_to<bool>;\r\n    }\r\n#endif // _HAS_CXX20\r\n{\r\n    const bool _Left_has_value  = _Left.has_value();\r\n    const bool _Right_has_value = _Right.has_value();\r\n    if (_Left_has_value && _Right_has_value) {\r\n        return _Left.operator*() == _Right.operator*();\r\n    }\r\n    return _Left_has_value == _Right_has_value;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool operator!=(const optional<_Ty1>& _Left, const optional<_Ty2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left.operator*() != _Right.operator*()))) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires {\r\n        { _Left.operator*() != _Right.operator*() } -> _Implicitly_convertible_to<bool>;\r\n    }\r\n#endif // _HAS_CXX20\r\n{\r\n    const bool _Left_has_value  = _Left.has_value();\r\n    const bool _Right_has_value = _Right.has_value();\r\n    if (_Left_has_value && _Right_has_value) {\r\n        return _Left.operator*() != _Right.operator*();\r\n    }\r\n    return _Left_has_value != _Right_has_value;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool operator<(const optional<_Ty1>& _Left, const optional<_Ty2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left.operator*() < _Right.operator*()))) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires {\r\n        { _Left.operator*() < _Right.operator*() } -> _Implicitly_convertible_to<bool>;\r\n    }\r\n#endif // _HAS_CXX20\r\n{\r\n    const bool _Left_has_value  = _Left.has_value();\r\n    const bool _Right_has_value = _Right.has_value();\r\n    if (_Left_has_value && _Right_has_value) {\r\n        return _Left.operator*() < _Right.operator*();\r\n    }\r\n    return _Left_has_value < _Right_has_value;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool operator>(const optional<_Ty1>& _Left, const optional<_Ty2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left.operator*() > _Right.operator*()))) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires {\r\n        { _Left.operator*() > _Right.operator*() } -> _Implicitly_convertible_to<bool>;\r\n    }\r\n#endif // _HAS_CXX20\r\n{\r\n    const bool _Left_has_value  = _Left.has_value();\r\n    const bool _Right_has_value = _Right.has_value();\r\n    if (_Left_has_value && _Right_has_value) {\r\n        return _Left.operator*() > _Right.operator*();\r\n    }\r\n    return _Left_has_value > _Right_has_value;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool operator<=(const optional<_Ty1>& _Left, const optional<_Ty2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left.operator*() <= _Right.operator*()))) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires {\r\n        { _Left.operator*() <= _Right.operator*() } -> _Implicitly_convertible_to<bool>;\r\n    }\r\n#endif // _HAS_CXX20\r\n{\r\n    const bool _Left_has_value  = _Left.has_value();\r\n    const bool _Right_has_value = _Right.has_value();\r\n    if (_Left_has_value && _Right_has_value) {\r\n        return _Left.operator*() <= _Right.operator*();\r\n    }\r\n    return _Left_has_value <= _Right_has_value;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool operator>=(const optional<_Ty1>& _Left, const optional<_Ty2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left.operator*() >= _Right.operator*()))) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires {\r\n        { _Left.operator*() >= _Right.operator*() } -> _Implicitly_convertible_to<bool>;\r\n    }\r\n#endif // _HAS_CXX20\r\n{\r\n    const bool _Left_has_value  = _Left.has_value();\r\n    const bool _Right_has_value = _Right.has_value();\r\n    if (_Left_has_value && _Right_has_value) {\r\n        return _Left.operator*() >= _Right.operator*();\r\n    }\r\n    return _Left_has_value >= _Right_has_value;\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty1, three_way_comparable_with<_Ty1> _Ty2>\r\n_NODISCARD constexpr compare_three_way_result_t<_Ty1, _Ty2> operator<=>(const optional<_Ty1>& _Left,\r\n    const optional<_Ty2>& _Right) noexcept(noexcept(_Left.operator*() <=> _Right.operator*())) /* strengthened */ {\r\n    const bool _Left_has_value  = _Left.has_value();\r\n    const bool _Right_has_value = _Right.has_value();\r\n    if (_Left_has_value && _Right_has_value) {\r\n        return _Left.operator*() <=> _Right.operator*();\r\n    }\r\n\r\n    return _Left_has_value <=> _Right_has_value;\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD constexpr bool operator==(const optional<_Ty>& _Left, nullopt_t) noexcept {\r\n    return !_Left.has_value();\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD constexpr strong_ordering operator<=>(const optional<_Ty>& _Left, nullopt_t) noexcept {\r\n    return _Left.has_value() <=> false;\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr bool operator==(nullopt_t, const optional<_Ty>& _Right) noexcept {\r\n    return !_Right.has_value();\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr bool operator!=(const optional<_Ty>& _Left, nullopt_t) noexcept {\r\n    return _Left.has_value();\r\n}\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr bool operator!=(nullopt_t, const optional<_Ty>& _Right) noexcept {\r\n    return _Right.has_value();\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr bool operator<(const optional<_Ty>&, nullopt_t) noexcept {\r\n    return false;\r\n}\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr bool operator<(nullopt_t, const optional<_Ty>& _Right) noexcept {\r\n    return _Right.has_value();\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr bool operator>(const optional<_Ty>& _Left, nullopt_t) noexcept {\r\n    return _Left.has_value();\r\n}\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr bool operator>(nullopt_t, const optional<_Ty>&) noexcept {\r\n    return false;\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr bool operator<=(const optional<_Ty>& _Left, nullopt_t) noexcept {\r\n    return !_Left.has_value();\r\n}\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr bool operator<=(nullopt_t, const optional<_Ty>&) noexcept {\r\n    return true;\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr bool operator>=(const optional<_Ty>&, nullopt_t) noexcept {\r\n    return true;\r\n}\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr bool operator>=(nullopt_t, const optional<_Ty>& _Right) noexcept {\r\n    return !_Right.has_value();\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\ntemplate <class _Ty>\r\nusing _Enable_if_bool_convertible = enable_if_t<is_convertible_v<_Ty, bool>, int>;\r\n\r\ntemplate <class _Lhs, class _Rhs>\r\nusing _Enable_if_comparable_with_equal =\r\n    _Enable_if_bool_convertible<decltype(_STD declval<const _Lhs&>() == _STD declval<const _Rhs&>())>;\r\n\r\ntemplate <class _Lhs, class _Rhs>\r\nusing _Enable_if_comparable_with_not_equal =\r\n    _Enable_if_bool_convertible<decltype(_STD declval<const _Lhs&>() != _STD declval<const _Rhs&>())>;\r\n\r\ntemplate <class _Lhs, class _Rhs>\r\nusing _Enable_if_comparable_with_less =\r\n    _Enable_if_bool_convertible<decltype(_STD declval<const _Lhs&>() < _STD declval<const _Rhs&>())>;\r\n\r\ntemplate <class _Lhs, class _Rhs>\r\nusing _Enable_if_comparable_with_greater =\r\n    _Enable_if_bool_convertible<decltype(_STD declval<const _Lhs&>() > _STD declval<const _Rhs&>())>;\r\n\r\ntemplate <class _Lhs, class _Rhs>\r\nusing _Enable_if_comparable_with_less_equal =\r\n    _Enable_if_bool_convertible<decltype(_STD declval<const _Lhs&>() <= _STD declval<const _Rhs&>())>;\r\n\r\ntemplate <class _Lhs, class _Rhs>\r\nusing _Enable_if_comparable_with_greater_equal =\r\n    _Enable_if_bool_convertible<decltype(_STD declval<const _Lhs&>() >= _STD declval<const _Rhs&>())>;\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2, _Enable_if_comparable_with_equal<_Ty1, _Ty2> = 0>\r\n_NODISCARD constexpr bool operator==(const optional<_Ty1>& _Left, const _Ty2& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left.operator*() == _Right))) /* strengthened */ {\r\n    if (_Left) {\r\n        return _Left.operator*() == _Right;\r\n    }\r\n    return false;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2, _Enable_if_comparable_with_equal<_Ty1, _Ty2> = 0>\r\n_NODISCARD constexpr bool operator==(const _Ty1& _Left, const optional<_Ty2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left == _Right.operator*()))) /* strengthened */ {\r\n    if (_Right) {\r\n        return _Left == _Right.operator*();\r\n    }\r\n    return false;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2, _Enable_if_comparable_with_not_equal<_Ty1, _Ty2> = 0>\r\n_NODISCARD constexpr bool operator!=(const optional<_Ty1>& _Left, const _Ty2& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left.operator*() != _Right))) /* strengthened */ {\r\n    if (_Left) {\r\n        return _Left.operator*() != _Right;\r\n    }\r\n    return true;\r\n}\r\n_EXPORT_STD template <class _Ty1, class _Ty2, _Enable_if_comparable_with_not_equal<_Ty1, _Ty2> = 0>\r\n_NODISCARD constexpr bool operator!=(const _Ty1& _Left, const optional<_Ty2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left != _Right.operator*()))) /* strengthened */ {\r\n    if (_Right) {\r\n        return _Left != _Right.operator*();\r\n    }\r\n    return true;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2, _Enable_if_comparable_with_less<_Ty1, _Ty2> = 0>\r\n_NODISCARD constexpr bool operator<(const optional<_Ty1>& _Left, const _Ty2& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left.operator*() < _Right))) /* strengthened */ {\r\n    if (_Left) {\r\n        return _Left.operator*() < _Right;\r\n    }\r\n    return true;\r\n}\r\n_EXPORT_STD template <class _Ty1, class _Ty2, _Enable_if_comparable_with_less<_Ty1, _Ty2> = 0>\r\n_NODISCARD constexpr bool operator<(const _Ty1& _Left, const optional<_Ty2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left < _Right.operator*()))) /* strengthened */ {\r\n    if (_Right) {\r\n        return _Left < _Right.operator*();\r\n    }\r\n    return false;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2, _Enable_if_comparable_with_greater<_Ty1, _Ty2> = 0>\r\n_NODISCARD constexpr bool operator>(const optional<_Ty1>& _Left, const _Ty2& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left.operator*() > _Right))) /* strengthened */ {\r\n    if (_Left) {\r\n        return _Left.operator*() > _Right;\r\n    }\r\n    return false;\r\n}\r\n_EXPORT_STD template <class _Ty1, class _Ty2, _Enable_if_comparable_with_greater<_Ty1, _Ty2> = 0>\r\n_NODISCARD constexpr bool operator>(const _Ty1& _Left, const optional<_Ty2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left > _Right.operator*()))) /* strengthened */ {\r\n    if (_Right) {\r\n        return _Left > _Right.operator*();\r\n    }\r\n    return true;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2, _Enable_if_comparable_with_less_equal<_Ty1, _Ty2> = 0>\r\n_NODISCARD constexpr bool operator<=(const optional<_Ty1>& _Left, const _Ty2& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left.operator*() <= _Right))) /* strengthened */ {\r\n    if (_Left) {\r\n        return _Left.operator*() <= _Right;\r\n    }\r\n    return true;\r\n}\r\n_EXPORT_STD template <class _Ty1, class _Ty2, _Enable_if_comparable_with_less_equal<_Ty1, _Ty2> = 0>\r\n_NODISCARD constexpr bool operator<=(const _Ty1& _Left, const optional<_Ty2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left <= _Right.operator*()))) /* strengthened */ {\r\n    if (_Right) {\r\n        return _Left <= _Right.operator*();\r\n    }\r\n    return false;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2, _Enable_if_comparable_with_greater_equal<_Ty1, _Ty2> = 0>\r\n_NODISCARD constexpr bool operator>=(const optional<_Ty1>& _Left, const _Ty2& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left.operator*() >= _Right))) /* strengthened */ {\r\n    if (_Left) {\r\n        return _Left.operator*() >= _Right;\r\n    }\r\n    return false;\r\n}\r\n_EXPORT_STD template <class _Ty1, class _Ty2, _Enable_if_comparable_with_greater_equal<_Ty1, _Ty2> = 0>\r\n_NODISCARD constexpr bool operator>=(const _Ty1& _Left, const optional<_Ty2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left >= _Right.operator*()))) /* strengthened */ {\r\n    if (_Right) {\r\n        return _Left >= _Right.operator*();\r\n    }\r\n    return true;\r\n}\r\n\r\n#if _HAS_CXX20\r\n#ifndef __clang__ // TRANSITION, DevCom-10880933 (EDG) and VSO-2444237 (MSVC)\r\ntemplate <class _Ty>\r\nvoid _Derived_from_optional_impl(const optional<_Ty>&);\r\n\r\ntemplate <class _Ty>\r\nconcept _Derived_from_optional = requires(const _Ty& __obj) { _STD _Derived_from_optional_impl(__obj); };\r\n#else // ^^^ workaround / no workaround vvv\r\ntemplate <class _Ty>\r\nconcept _Derived_from_optional = requires(const _Ty& __obj) { []<class _Uty>(const optional<_Uty>&) {}(__obj); };\r\n#endif // ^^^ no workaround ^^^\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n    requires (!_Derived_from_optional<_Ty2>) && three_way_comparable_with<_Ty1, _Ty2>\r\n_NODISCARD constexpr compare_three_way_result_t<_Ty1, _Ty2> operator<=>(const optional<_Ty1>& _Left, const _Ty2& _Right)\r\n    noexcept(noexcept(_Left.operator*() <=> _Right)) /* strengthened */ {\r\n    if (_Left) {\r\n        return _Left.operator*() <=> _Right;\r\n    }\r\n\r\n    return strong_ordering::less;\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty, enable_if_t<is_move_constructible_v<_Ty> && is_swappable_v<_Ty>, int> = 0>\r\n_CONSTEXPR20 void swap(optional<_Ty>& _Left, optional<_Ty>& _Right) noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, enable_if_t<is_constructible_v<decay_t<_Ty>, _Ty>, int> = 0> // LWG-3627\r\n_NODISCARD constexpr optional<decay_t<_Ty>> make_optional(_Ty&& _Value)\r\n    noexcept(noexcept(optional<decay_t<_Ty>>{_STD forward<_Ty>(_Value)})) /* strengthened */ {\r\n    return optional<decay_t<_Ty>>{_STD forward<_Ty>(_Value)};\r\n}\r\n_EXPORT_STD template <class _Ty, class... _Types, enable_if_t<is_constructible_v<_Ty, _Types...>, int> = 0>\r\n_NODISCARD constexpr optional<_Ty> make_optional(_Types&&... _Args)\r\n    noexcept(noexcept(optional<_Ty>{in_place, _STD forward<_Types>(_Args)...})) /* strengthened */ {\r\n    return optional<_Ty>{in_place, _STD forward<_Types>(_Args)...};\r\n}\r\n_EXPORT_STD template <class _Ty, class _Elem, class... _Types,\r\n    enable_if_t<is_constructible_v<_Ty, initializer_list<_Elem>&, _Types...>, int> = 0>\r\n_NODISCARD constexpr optional<_Ty> make_optional(initializer_list<_Elem> _Ilist, _Types&&... _Args)\r\n    noexcept(noexcept(optional<_Ty>{in_place, _Ilist, _STD forward<_Types>(_Args)...})) /* strengthened */ {\r\n    return optional<_Ty>{in_place, _Ilist, _STD forward<_Types>(_Args)...};\r\n}\r\n\r\ntemplate <class _Ty>\r\nstruct hash<optional<_Ty>>\r\n    : _Conditionally_enabled_hash<optional<_Ty>, is_default_constructible_v<hash<remove_const_t<_Ty>>>> {\r\n    static size_t _Do_hash(const optional<_Ty>& _Opt) noexcept(_Is_nothrow_hashable<remove_const_t<_Ty>>::value) {\r\n        constexpr size_t _Unspecified_value = 0;\r\n        if (_Opt) {\r\n            return hash<remove_const_t<_Ty>>{}(_Opt.operator*());\r\n        }\r\n\r\n        return _Unspecified_value;\r\n    }\r\n};\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX17 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _OPTIONAL_\r\n"
  },
  {
    "path": "stl/inc/ostream",
    "content": "// ostream standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _OSTREAM_\r\n#define _OSTREAM_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <__msvc_ostream.hpp>\r\n\r\n#if _HAS_CXX23\r\n#include <__msvc_filebuf.hpp>\r\n#include <__msvc_print.hpp>\r\n#include <format>\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n#if _HAS_CXX20\r\n#ifdef _CPPRTTI\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& emit_on_flush(basic_ostream<_Elem, _Traits>& _Ostr) {\r\n    const auto _Sync_buf_ptr = dynamic_cast<_Basic_syncbuf_impl<_Elem, _Traits>*>(_Ostr.rdbuf());\r\n    if (_Sync_buf_ptr) {\r\n        _Sync_buf_ptr->set_emit_on_sync(true);\r\n    }\r\n    return _Ostr;\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& noemit_on_flush(basic_ostream<_Elem, _Traits>& _Ostr) {\r\n    const auto _Sync_buf_ptr = dynamic_cast<_Basic_syncbuf_impl<_Elem, _Traits>*>(_Ostr.rdbuf());\r\n    if (_Sync_buf_ptr) {\r\n        _Sync_buf_ptr->set_emit_on_sync(false);\r\n    }\r\n    return _Ostr;\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& flush_emit(basic_ostream<_Elem, _Traits>& _Ostr) {\r\n    _Ostr.flush();\r\n    const auto _Sync_buf_ptr = dynamic_cast<_Basic_syncbuf_impl<_Elem, _Traits>*>(_Ostr.rdbuf());\r\n    if (_Sync_buf_ptr) {\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const typename basic_ostream<_Elem, _Traits>::sentry _Ok(_Ostr);\r\n        if (!_Ok) {\r\n            _State |= ios_base::badbit;\r\n        } else {\r\n            _TRY_IO_BEGIN\r\n            const bool _Emit_failed = !_Sync_buf_ptr->_Do_emit();\r\n            if (_Emit_failed) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_(ios_base, _Ostr)\r\n        }\r\n        _Ostr.setstate(_State);\r\n    }\r\n    return _Ostr;\r\n}\r\n#else // ^^^ defined(_CPPRTTI) / !defined(_CPPRTTI) vvv\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& emit_on_flush(basic_ostream<_Elem, _Traits>&) = delete; // requires /GR option\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& noemit_on_flush(basic_ostream<_Elem, _Traits>&) = delete; // requires /GR option\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& flush_emit(basic_ostream<_Elem, _Traits>&) = delete; // requires /GR option\r\n#endif // ^^^ !defined(_CPPRTTI) ^^^\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n\r\n#if _HAS_CXX23\r\n#ifdef _CPPRTTI\r\ntemplate <int = 0>\r\nios_base::iostate _Print_noformat_nonunicode(ostream& _Ostr, const string_view _Str) {\r\n    // *LOCKED*\r\n    //\r\n    // This function is called from a context in which an ostream::sentry has been\r\n    // constructed.\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n\r\n    _TRY_IO_BEGIN\r\n    const auto _Characters_written       = _Ostr.rdbuf()->sputn(_Str.data(), static_cast<streamsize>(_Str.size()));\r\n    const bool _Was_insertion_successful = static_cast<size_t>(_Characters_written) == _Str.size();\r\n    if (!_Was_insertion_successful) {\r\n        _State |= ios_base::badbit;\r\n    }\r\n    _CATCH_IO_(ios_base, _Ostr)\r\n\r\n    return _State;\r\n}\r\n\r\ntemplate <int = 0>\r\nios_base::iostate _Print_newline_only_nonunicode(ostream& _Ostr) {\r\n    // *LOCKED*\r\n    //\r\n    // This function is called from a context in which an ostream::sentry has been\r\n    // constructed.\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n\r\n    _TRY_IO_BEGIN\r\n    const bool _Was_insertion_successful = _Ostr.rdbuf()->sputc('\\n') == '\\n';\r\n    if (!_Was_insertion_successful) {\r\n        _State |= ios_base::badbit;\r\n    }\r\n    _CATCH_IO_(ios_base, _Ostr)\r\n\r\n    return _State;\r\n}\r\n\r\ntemplate <int = 0>\r\nvoid _Vprint_nonunicode_impl(\r\n    const _Add_newline _Add_nl, ostream& _Ostr, const string_view _Fmt_str, const format_args _Fmt_args) {\r\n    const ostream::sentry _Ok(_Ostr);\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n\r\n    if (!_Ok) {\r\n        _State |= ios_base::badbit;\r\n    } else {\r\n        // This is intentionally kept outside of the try/catch block in _Print_noformat_nonunicode()\r\n        // (see N4950 [ostream.formatted.print]/3.2).\r\n        string _Output_str = _STD vformat(_Ostr.getloc(), _Fmt_str, _Fmt_args);\r\n        if (_Add_nl == _Add_newline::_Yes) {\r\n            _Output_str.push_back('\\n');\r\n        }\r\n\r\n        _State |= _STD _Print_noformat_nonunicode(_Ostr, _Output_str);\r\n    }\r\n\r\n    _Ostr.setstate(_State);\r\n}\r\n\r\ntemplate <class _UnicodeConsoleFn, class _FallbackFn, class _Filebuf_type = filebuf>\r\nios_base::iostate _Do_on_maybe_unicode_console(\r\n    ostream& _Ostr, _UnicodeConsoleFn _Unicode_console_func, _FallbackFn _Fallback_func) {\r\n    // *LOCKED*\r\n    //\r\n    // This function is called from a context in which an ostream::sentry has been\r\n    // constructed.\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n\r\n    // The std::ostream& overload of vprint_unicode() expects you to determine whether the stream refers\r\n    // to a unicode console or not based solely on the std::ostream& provided. That class simply doesn't\r\n    // provide enough information to know this in every case. The best we can do (without breaking ABI)\r\n    // is check if the underlying std::streambuf object of the std::ostream& actually refers to a std::filebuf\r\n    // object. This requires the use of a dynamic_cast. (This is also why the std::ostream& overloads of\r\n    // std::print() et al. are deleted when RTTI is disabled.)\r\n    streambuf* const _Streambuf = _Ostr.rdbuf();\r\n    const auto _Filebuf         = dynamic_cast<_Filebuf_type*>(_Streambuf);\r\n\r\n    // If we got nullptr, then it probably isn't being used for a unicode console...\r\n    if (_Filebuf == nullptr) {\r\n        _State |= _Fallback_func();\r\n        return _State;\r\n    }\r\n\r\n    FILE* const _File_stream = _Filebuf->_Myfile;\r\n    const __std_unicode_console_retrieval_result _Unicode_console_retrieval_result{\r\n        __std_get_unicode_console_handle_from_file_stream(_File_stream)};\r\n\r\n    // See the documentation for __std_unicode_console_retrieval_result to understand why we do this.\r\n    bool _Is_unicode_console;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4061) // enumerator not explicitly handled by switch label\r\n    switch (_Unicode_console_retrieval_result._Error) {\r\n    case __std_win_error::_Success:\r\n        _Is_unicode_console = true;\r\n        break;\r\n\r\n    case __std_win_error::_File_not_found:\r\n        _Is_unicode_console = false;\r\n        break;\r\n\r\n    case __std_win_error::_Not_supported:\r\n        return _State;\r\n\r\n    default:\r\n        return ios_base::failbit;\r\n    }\r\n#pragma warning(pop)\r\n\r\n    if (_Is_unicode_console) {\r\n        _TRY_IO_BEGIN\r\n        const bool _Was_flush_successful = _Ostr.rdbuf()->pubsync() != -1;\r\n        if (!_Was_flush_successful) {\r\n            _State |= ios_base::badbit;\r\n            return _State;\r\n        }\r\n\r\n        const __std_win_error _Unicode_console_print_result =\r\n            _Unicode_console_func(_Unicode_console_retrieval_result._Console_handle);\r\n        if (_Unicode_console_print_result != __std_win_error::_Success) {\r\n            _State |= ios_base::badbit;\r\n        }\r\n        _CATCH_IO_(ios_base, _Ostr)\r\n    } else {\r\n        _State |= _Fallback_func();\r\n    }\r\n\r\n    return _State;\r\n}\r\n\r\ntemplate <int = 0>\r\nios_base::iostate _Print_noformat_unicode(ostream& _Ostr, const string_view _Str) {\r\n    const auto _Unicode_console = [&](const __std_unicode_console_handle _Console_handle) {\r\n        return __std_print_to_unicode_console(_Console_handle, _Str.data(), _Str.size());\r\n    };\r\n\r\n    const auto _Fallback = [&] { return _STD _Print_noformat_nonunicode(_Ostr, _Str); };\r\n\r\n    return _STD _Do_on_maybe_unicode_console(_Ostr, _Unicode_console, _Fallback);\r\n}\r\n\r\ntemplate <int = 0>\r\nios_base::iostate _Print_newline_only_unicode(ostream& _Ostr) {\r\n    const auto _Unicode_console = [](const __std_unicode_console_handle _Console_handle) static {\r\n        return __std_print_newline_only_to_unicode_console(_Console_handle);\r\n    };\r\n\r\n    const auto _Fallback = [&] { return _STD _Print_newline_only_nonunicode(_Ostr); };\r\n\r\n    return _STD _Do_on_maybe_unicode_console(_Ostr, _Unicode_console, _Fallback);\r\n}\r\n\r\ntemplate <int = 0>\r\nvoid _Vprint_unicode_impl(\r\n    const _Add_newline _Add_nl, ostream& _Ostr, const string_view _Fmt_str, const format_args _Fmt_args) {\r\n    const ostream::sentry _Ok(_Ostr);\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n\r\n    if (!_Ok) {\r\n        _State |= ios_base::badbit;\r\n    } else {\r\n        // This is intentionally kept outside of the try/catch block in _Print_noformat_unicode()\r\n        // (see N4950 [ostream.formatted.print]/3.2).\r\n        string _Output_str = _STD vformat(_Ostr.getloc(), _Fmt_str, _Fmt_args);\r\n        if (_Add_nl == _Add_newline::_Yes) {\r\n            _Output_str.push_back('\\n');\r\n        }\r\n\r\n        _State |= _STD _Print_noformat_unicode(_Ostr, _Output_str);\r\n    }\r\n\r\n    _Ostr.setstate(_State);\r\n}\r\n\r\ntemplate <int = 0>\r\nvoid _Print_noformat(ostream& _Ostr, const string_view _Str) {\r\n    const ostream::sentry _Ok(_Ostr);\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n\r\n    if (!_Ok) {\r\n        _State |= ios_base::badbit;\r\n    } else {\r\n        if constexpr (_STD _Is_ordinary_literal_encoding_utf8()) {\r\n            _State |= _STD _Print_noformat_unicode(_Ostr, _Str);\r\n        } else {\r\n            _State |= _STD _Print_noformat_nonunicode(_Ostr, _Str);\r\n        }\r\n    }\r\n\r\n    _Ostr.setstate(_State);\r\n}\r\n\r\ntemplate <class... _Types>\r\nvoid _Print_impl(const _Add_newline _Add_nl, ostream& _Ostr, const format_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    constexpr bool _Has_format_args = sizeof...(_Types) > 0;\r\n\r\n    // This is intentionally kept outside of the try/catch block in _Print_noformat_*()\r\n    // (see N4950 [ostream.formatted.print]/3.2).\r\n\r\n    if constexpr (_Has_format_args) {\r\n        if constexpr (_STD _Is_ordinary_literal_encoding_utf8()) {\r\n            _STD _Vprint_unicode_impl(_Add_nl, _Ostr, _Fmt.get(), _STD make_format_args(_Args...));\r\n        } else {\r\n            _STD _Vprint_nonunicode_impl(_Add_nl, _Ostr, _Fmt.get(), _STD make_format_args(_Args...));\r\n        }\r\n    } else {\r\n        const string _Unescaped_str{_Unescape_braces(_Add_nl, _Fmt.get())};\r\n        _STD _Print_noformat(_Ostr, _Unescaped_str);\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\nvoid print(ostream& _Ostr, const format_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    _STD _Print_impl(_Add_newline::_Nope, _Ostr, _Fmt, _STD forward<_Types>(_Args)...);\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\nvoid println(ostream& _Ostr, const format_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    _STD _Print_impl(_Add_newline::_Yes, _Ostr, _Fmt, _STD forward<_Types>(_Args)...);\r\n}\r\n\r\n_EXPORT_STD template <int = 0> // improves throughput, see GH-2329\r\nvoid println(ostream& _Ostr) {\r\n    const ostream::sentry _Ok(_Ostr);\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n\r\n    if (!_Ok) {\r\n        _State |= ios_base::badbit;\r\n    } else {\r\n        if constexpr (_STD _Is_ordinary_literal_encoding_utf8()) {\r\n            _State |= _STD _Print_newline_only_unicode(_Ostr);\r\n        } else {\r\n            _State |= _STD _Print_newline_only_nonunicode(_Ostr);\r\n        }\r\n    }\r\n\r\n    _Ostr.setstate(_State);\r\n}\r\n\r\n_EXPORT_STD template <int = 0> // improves throughput, see GH-2329\r\nvoid vprint_unicode(ostream& _Ostr, const string_view _Fmt_str, const format_args _Fmt_args) {\r\n    _STD _Vprint_unicode_impl(_Add_newline::_Nope, _Ostr, _Fmt_str, _Fmt_args);\r\n}\r\n\r\n_EXPORT_STD template <int = 0> // improves throughput, see GH-2329\r\nvoid vprint_nonunicode(ostream& _Ostr, const string_view _Fmt_str, const format_args _Fmt_args) {\r\n    _STD _Vprint_nonunicode_impl(_Add_newline::_Nope, _Ostr, _Fmt_str, _Fmt_args);\r\n}\r\n#else // ^^^ defined(_CPPRTTI) / !defined(_CPPRTTI) vvv\r\n_EXPORT_STD template <class... _Types>\r\nvoid print(ostream&, format_string<_Types...>, _Types&&...) = delete; // requires /GR option\r\n\r\n_EXPORT_STD template <class... _Types>\r\nvoid println(ostream&, format_string<_Types...>, _Types&&...) = delete; // requires /GR option\r\n\r\n_EXPORT_STD void vprint_unicode(ostream&, string_view, format_args)    = delete; // requires /GR option\r\n_EXPORT_STD void vprint_nonunicode(ostream&, string_view, format_args) = delete; // requires /GR option\r\n#endif // ^^^ !defined(_CPPRTTI) ^^^\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _OSTREAM_\r\n"
  },
  {
    "path": "stl/inc/print",
    "content": "// print standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _PRINT_\r\n#define _PRINT_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#if !_HAS_CXX23\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <print> are available only with C++23 or later.\");\r\n#else // ^^^ !_HAS_CXX23 / _HAS_CXX23 vvv\r\n\r\n#include <__msvc_print.hpp>\r\n#include <cstdio>\r\n#include <format>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\nstruct _NODISCARD _Stream_lock_guard {\r\n    explicit _Stream_lock_guard(FILE* const _Stream_) : _Stream(_Stream_) {\r\n        _CSTD _lock_file(_Stream);\r\n    }\r\n    ~_Stream_lock_guard() {\r\n        _CSTD _unlock_file(_Stream);\r\n    }\r\n\r\n    _Stream_lock_guard(const _Stream_lock_guard&)            = delete;\r\n    _Stream_lock_guard& operator=(const _Stream_lock_guard&) = delete;\r\n\r\n    FILE* const _Stream;\r\n};\r\n\r\nclass _Print_to_stream_it {\r\npublic:\r\n    using difference_type = ptrdiff_t;\r\n\r\n    explicit _Print_to_stream_it(FILE* const _Stream_) noexcept : _Stream(_Stream_) {}\r\n\r\n    // These member functions are never defined:\r\n    _Print_to_stream_it& operator=(char);\r\n    _Print_to_stream_it& operator*();\r\n    _Print_to_stream_it& operator++();\r\n    _Print_to_stream_it operator++(int);\r\n\r\n    FILE* _Get_stream() const noexcept {\r\n        return _Stream;\r\n    }\r\n\r\nprivate:\r\n    FILE* _Stream;\r\n};\r\n\r\ninline void _Print_noformat_nonunicode_nonlocking(FILE* const _Stream, const string_view _Str) {\r\n    const bool _Was_write_successful = _CSTD _fwrite_nolock(_Str.data(), 1, _Str.size(), _Stream) == _Str.size();\r\n\r\n    if (!_Was_write_successful) {\r\n        _Throw_system_error(static_cast<errc>(errno));\r\n    }\r\n}\r\n\r\ntemplate <>\r\nstruct _Fmt_iterator_flush<_Print_to_stream_it> {\r\n    static _Print_to_stream_it _Flush(const char* const _First, const char* const _Last, _Print_to_stream_it _Output) {\r\n        _STD _Print_noformat_nonunicode_nonlocking(_Output._Get_stream(), {_First, _Last});\r\n        return _Output;\r\n    }\r\n};\r\n\r\nclass _Print_to_unicode_console_it {\r\npublic:\r\n    using difference_type = ptrdiff_t;\r\n\r\n    explicit _Print_to_unicode_console_it(const __std_unicode_console_handle _Console_handle_) noexcept\r\n        : _Console_handle(_Console_handle_) {}\r\n\r\n    // These member functions are never defined:\r\n    _Print_to_unicode_console_it& operator=(char);\r\n    _Print_to_unicode_console_it& operator*();\r\n    _Print_to_unicode_console_it& operator++();\r\n    _Print_to_unicode_console_it operator++(int);\r\n\r\n    __std_unicode_console_handle _Get_console_handle() const noexcept {\r\n        return _Console_handle;\r\n    }\r\n\r\nprivate:\r\n    __std_unicode_console_handle _Console_handle;\r\n};\r\n\r\ninline void _Print_noformat_unicode_to_console_nonlocking(\r\n    const __std_unicode_console_handle _Console_handle, const string_view _Str) {\r\n    const __std_win_error _Console_print_result =\r\n        __std_print_to_unicode_console(_Console_handle, _Str.data(), _Str.size());\r\n    if (_Console_print_result != __std_win_error::_Success) {\r\n        _STD _Throw_system_error_from_std_win_error(_Console_print_result);\r\n    }\r\n}\r\n\r\ntemplate <>\r\nstruct _Fmt_iterator_flush<_Print_to_unicode_console_it> {\r\n    static _Print_to_unicode_console_it _Flush(\r\n        const char* const _First, const char* const _Last, _Print_to_unicode_console_it _Output) {\r\n        _STD _Print_noformat_unicode_to_console_nonlocking(_Output._Get_console_handle(), {_First, _Last});\r\n        return _Output;\r\n    }\r\n};\r\n\r\ninline void _Print_noformat_nonunicode(FILE* const _Stream, const string_view _Str) {\r\n    const _Stream_lock_guard _Guard{_Stream};\r\n    _STD _Print_noformat_nonunicode_nonlocking(_Stream, _Str);\r\n}\r\n\r\n// Format non unicode into a temporary string, then print to stream\r\ninline void _Vprint_nonunicode_buffered_impl(\r\n    const _Add_newline _Add_nl, FILE* const _Stream, const string_view _Fmt_str, const format_args _Fmt_args) {\r\n    string _Output_str = _STD vformat(_Fmt_str, _Fmt_args);\r\n    if (_Add_nl == _Add_newline::_Yes) {\r\n        _Output_str.push_back('\\n');\r\n    }\r\n\r\n    _STD _Print_noformat_nonunicode(_Stream, _Output_str);\r\n}\r\n\r\n// Format non unicode directly into _Stream\r\ninline void _Vprint_nonunicode_impl(\r\n    const _Add_newline _Add_nl, FILE* const _Stream, const string_view _Fmt_str, const format_args _Fmt_args) {\r\n    const _Stream_lock_guard _Guard{_Stream};\r\n    _STD vformat_to(_Print_to_stream_it{_Stream}, _Fmt_str, _Fmt_args);\r\n    if (_Add_nl == _Add_newline::_Yes) {\r\n        _Print_noformat_nonunicode_nonlocking(_Stream, \"\\n\");\r\n    }\r\n}\r\n\r\ntemplate <class _UnicodeConsoleFn, class _FallbackFn>\r\nvoid _Do_on_maybe_unicode_console(\r\n    FILE* const _Stream, _UnicodeConsoleFn _Unicode_console_func, _FallbackFn _Fallback_func) {\r\n    const __std_unicode_console_retrieval_result _Unicode_console_retrieval_result{\r\n        __std_get_unicode_console_handle_from_file_stream(_Stream)};\r\n\r\n    // See the documentation for __std_unicode_console_retrieval_result to understand why we do this.\r\n    bool _Is_unicode_console;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4061) // enumerator not explicitly handled by switch label\r\n    switch (_Unicode_console_retrieval_result._Error) {\r\n    case __std_win_error::_Success:\r\n        _Is_unicode_console = true;\r\n        break;\r\n\r\n    case __std_win_error::_File_not_found:\r\n        _Is_unicode_console = false;\r\n        break;\r\n\r\n    case __std_win_error::_Not_supported:\r\n        return;\r\n\r\n    default:\r\n        _STD _Throw_system_error_from_std_win_error(_Unicode_console_retrieval_result._Error);\r\n    }\r\n#pragma warning(pop)\r\n\r\n    if (_Is_unicode_console) {\r\n        _Unicode_console_func(_Unicode_console_retrieval_result._Console_handle);\r\n    } else {\r\n        _Fallback_func();\r\n    }\r\n}\r\n\r\n// If a unicode console, write using native API, else write to stream\r\ninline void _Vprint_unicode_noformat_impl(FILE* const _Stream, const string_view _Output_str) {\r\n    const auto _Unicode_console = [&](const __std_unicode_console_handle _Console_handle) {\r\n        const _Stream_lock_guard _Guard{_Stream};\r\n\r\n        const bool _Was_flush_successful = _CSTD _fflush_nolock(_Stream) == 0;\r\n        if (!_Was_flush_successful) {\r\n            _Throw_system_error(static_cast<errc>(errno));\r\n        }\r\n\r\n        _STD _Print_noformat_unicode_to_console_nonlocking(_Console_handle, _Output_str);\r\n    };\r\n\r\n    const auto _Fallback = [&] { _STD _Print_noformat_nonunicode(_Stream, _Output_str); };\r\n\r\n    _STD _Do_on_maybe_unicode_console(_Stream, _Unicode_console, _Fallback);\r\n}\r\n\r\ninline void _Fputc_newline(FILE* const _Stream) {\r\n    const bool _Was_write_successful = _CSTD fputc('\\n', _Stream) == '\\n';\r\n\r\n    if (!_Was_write_successful) {\r\n        _Throw_system_error(static_cast<errc>(errno));\r\n    }\r\n}\r\n\r\ninline void _Print_newline_only_unicode(FILE* const _Stream) {\r\n    const auto _Unicode_console = [&](const __std_unicode_console_handle _Console_handle) {\r\n        const bool _Was_flush_successful = _CSTD fflush(_Stream) == 0;\r\n        if (!_Was_flush_successful) {\r\n            _Throw_system_error(static_cast<errc>(errno));\r\n        }\r\n\r\n        const __std_win_error _Console_print_result = __std_print_newline_only_to_unicode_console(_Console_handle);\r\n        if (_Console_print_result != __std_win_error::_Success) {\r\n            _STD _Throw_system_error_from_std_win_error(_Console_print_result);\r\n        }\r\n    };\r\n\r\n    const auto _Fallback = [&] { _STD _Fputc_newline(_Stream); };\r\n\r\n    _STD _Do_on_maybe_unicode_console(_Stream, _Unicode_console, _Fallback);\r\n}\r\n\r\n// Format to intermediate string buffer, then print to unicode console/file\r\ninline void _Vprint_unicode_buffered_impl(\r\n    const _Add_newline _Add_nl, FILE* const _Stream, const string_view _Fmt_str, const format_args _Fmt_args) {\r\n    string _Output_str = _STD vformat(_Fmt_str, _Fmt_args);\r\n    if (_Add_nl == _Add_newline::_Yes) {\r\n        _Output_str.push_back('\\n');\r\n    }\r\n    _STD _Vprint_unicode_noformat_impl(_Stream, _Output_str);\r\n}\r\n\r\ninline void _Vprint_unicode_impl(\r\n    const _Add_newline _Add_nl, FILE* const _Stream, const string_view _Fmt_str, const format_args _Fmt_args) {\r\n    const auto _Unicode_console = [&](const __std_unicode_console_handle _Console_handle) {\r\n        const _Stream_lock_guard _Guard{_Stream};\r\n\r\n        const bool _Was_flush_successful = _CSTD _fflush_nolock(_Stream) == 0;\r\n        if (!_Was_flush_successful) {\r\n            _Throw_system_error(static_cast<errc>(errno));\r\n        }\r\n\r\n        _STD vformat_to(_Print_to_unicode_console_it{_Console_handle}, _Fmt_str, _Fmt_args);\r\n        if (_Add_nl == _Add_newline::_Yes) {\r\n            _Print_noformat_unicode_to_console_nonlocking(_Console_handle, \"\\n\");\r\n        }\r\n    };\r\n\r\n    const auto _Fallback = [&] { _STD _Vprint_nonunicode_impl(_Add_nl, _Stream, _Fmt_str, _Fmt_args); };\r\n\r\n    _STD _Do_on_maybe_unicode_console(_Stream, _Unicode_console, _Fallback);\r\n}\r\n\r\ntemplate <class... _Types>\r\nvoid _Print_impl(\r\n    const _Add_newline _Add_nl, FILE* const _Stream, const format_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    constexpr bool _Has_format_args  = sizeof...(_Types) > 0;\r\n    constexpr bool _Print_nonlocking = (enable_nonlocking_formatter_optimization<remove_cvref_t<_Types>> && ...);\r\n\r\n    if constexpr (_Has_format_args) {\r\n        if constexpr (_STD _Is_ordinary_literal_encoding_utf8()) {\r\n            if constexpr (_Print_nonlocking) {\r\n                _STD _Vprint_unicode_impl(_Add_nl, _Stream, _Fmt.get(), _STD make_format_args(_Args...));\r\n            } else {\r\n                _STD _Vprint_unicode_buffered_impl(_Add_nl, _Stream, _Fmt.get(), _STD make_format_args(_Args...));\r\n            }\r\n        } else {\r\n            if constexpr (_Print_nonlocking) {\r\n                _STD _Vprint_nonunicode_impl(_Add_nl, _Stream, _Fmt.get(), _STD make_format_args(_Args...));\r\n            } else {\r\n                _STD _Vprint_nonunicode_buffered_impl(_Add_nl, _Stream, _Fmt.get(), _STD make_format_args(_Args...));\r\n            }\r\n        }\r\n    } else {\r\n        const string _Unescaped_str{_Unescape_braces(_Add_nl, _Fmt.get())};\r\n\r\n        if constexpr (_STD _Is_ordinary_literal_encoding_utf8()) {\r\n            _STD _Vprint_unicode_noformat_impl(_Stream, _Unescaped_str);\r\n        } else {\r\n            _STD _Print_noformat_nonunicode(_Stream, _Unescaped_str);\r\n        }\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\nvoid print(FILE* const _Stream, const format_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    _STD _Print_impl(_Add_newline::_Nope, _Stream, _Fmt, _STD forward<_Types>(_Args)...);\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\nvoid print(const format_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    _STD print(stdout, _Fmt, _STD forward<_Types>(_Args)...);\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\nvoid println(FILE* const _Stream, const format_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    _STD _Print_impl(_Add_newline::_Yes, _Stream, _Fmt, _STD forward<_Types>(_Args)...);\r\n}\r\n\r\n_EXPORT_STD template <int = 0> // improves throughput, see GH-2329\r\nvoid println(FILE* _Stream) {\r\n    if constexpr (_STD _Is_ordinary_literal_encoding_utf8()) {\r\n        _STD _Print_newline_only_unicode(_Stream);\r\n    } else {\r\n        _STD _Fputc_newline(_Stream);\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <int = 0> // improves throughput, see GH-2329\r\nvoid println() {\r\n    _STD println(stdout);\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\nvoid println(const format_string<_Types...> _Fmt, _Types&&... _Args) {\r\n    _STD println(stdout, _Fmt, _STD forward<_Types>(_Args)...);\r\n}\r\n\r\n_EXPORT_STD template <int = 0> // improves throughput, see GH-2329\r\nvoid vprint_unicode_buffered(FILE* const _Stream, const string_view _Fmt_str, const format_args _Fmt_args) {\r\n    _STD _Vprint_unicode_buffered_impl(_Add_newline::_Nope, _Stream, _Fmt_str, _Fmt_args);\r\n}\r\n\r\n_EXPORT_STD template <int = 0> // improves throughput, see GH-2329\r\nvoid vprint_unicode_buffered(const string_view _Fmt_str, const format_args _Fmt_args) {\r\n    _STD vprint_unicode_buffered(stdout, _Fmt_str, _Fmt_args);\r\n}\r\n\r\n_EXPORT_STD template <int = 0> // improves throughput, see GH-2329\r\nvoid vprint_nonunicode_buffered(FILE* const _Stream, const string_view _Fmt_str, const format_args _Fmt_args) {\r\n    _STD _Vprint_nonunicode_buffered_impl(_Add_newline::_Nope, _Stream, _Fmt_str, _Fmt_args);\r\n}\r\n\r\n_EXPORT_STD template <int = 0> // improves throughput, see GH-2329\r\nvoid vprint_nonunicode_buffered(const string_view _Fmt_str, const format_args _Fmt_args) {\r\n    _STD vprint_nonunicode_buffered(stdout, _Fmt_str, _Fmt_args);\r\n}\r\n\r\n_EXPORT_STD template <int = 0> // improves throughput, see GH-2329\r\nvoid vprint_unicode(FILE* const _Stream, const string_view _Fmt_str, const format_args _Fmt_args) {\r\n    _STD _Vprint_unicode_impl(_Add_newline::_Nope, _Stream, _Fmt_str, _Fmt_args);\r\n}\r\n\r\n_EXPORT_STD template <int = 0> // improves throughput, see GH-2329\r\nvoid vprint_nonunicode(FILE* const _Stream, const string_view _Fmt_str, const format_args _Fmt_args) {\r\n    _STD _Vprint_nonunicode_impl(_Add_newline::_Nope, _Stream, _Fmt_str, _Fmt_args);\r\n}\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _PRINT_\r\n"
  },
  {
    "path": "stl/inc/queue",
    "content": "// queue standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _QUEUE_\r\n#define _QUEUE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#ifdef _LEGACY_CODE_ASSUMES_QUEUE_INCLUDES_ALGORITHM\r\n#include <algorithm>\r\n#else // ^^^ defined(_LEGACY_CODE_ASSUMES_QUEUE_INCLUDES_ALGORITHM) /\r\n      // !defined(_LEGACY_CODE_ASSUMES_QUEUE_INCLUDES_ALGORITHM) vvv\r\n#include <__msvc_heap_algorithms.hpp>\r\n#endif // ^^^ !defined(_LEGACY_CODE_ASSUMES_QUEUE_INCLUDES_ALGORITHM) ^^^\r\n\r\n#include <deque>\r\n#include <vector>\r\n\r\n#if _HAS_CXX23\r\n#include <__msvc_ranges_to.hpp>\r\n#include <__msvc_ranges_tuple_formatter.hpp>\r\n#include <iterator>\r\n#endif // _HAS_CXX23\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD template <class _Ty, class _Container = deque<_Ty>>\r\nclass queue {\r\npublic:\r\n    using value_type      = typename _Container::value_type;\r\n    using reference       = typename _Container::reference;\r\n    using const_reference = typename _Container::const_reference;\r\n    using size_type       = typename _Container::size_type;\r\n    using container_type  = _Container;\r\n\r\n    static_assert(is_same_v<_Ty, value_type>, \"container adaptors require consistent types\");\r\n    static_assert(is_object_v<_Ty>, \"The C++ Standard forbids container adaptors of non-object types \"\r\n                                    \"because of [container.requirements].\");\r\n\r\n    queue() = default;\r\n\r\n    explicit queue(const _Container& _Cont) : c(_Cont) {}\r\n\r\n    explicit queue(_Container&& _Cont) noexcept(is_nothrow_move_constructible_v<_Container>) // strengthened\r\n        : c(_STD move(_Cont)) {}\r\n\r\n#if _HAS_CXX23\r\n    template <_Iterator_for_container _InIt>\r\n    queue(_InIt _First, _InIt _Last) noexcept(is_nothrow_constructible_v<_Container, _InIt, _InIt>) // strengthened\r\n        : c(_STD move(_First), _STD move(_Last)) {}\r\n\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    queue(from_range_t, _Rng&& _Range) : c(_RANGES to<_Container>(_STD forward<_Rng>(_Range))) {}\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Alloc, enable_if_t<uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    explicit queue(const _Alloc& _Al) noexcept(is_nothrow_constructible_v<_Container, const _Alloc&>) // strengthened\r\n        : c(_Al) {}\r\n\r\n    template <class _Alloc, enable_if_t<uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    queue(const _Container& _Cont, const _Alloc& _Al) : c(_Cont, _Al) {}\r\n\r\n    template <class _Alloc, enable_if_t<uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    queue(_Container&& _Cont, const _Alloc& _Al)\r\n        noexcept(is_nothrow_constructible_v<_Container, _Container, const _Alloc&>) // strengthened\r\n        : c(_STD move(_Cont), _Al) {}\r\n\r\n    template <class _Alloc, enable_if_t<uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    queue(const queue& _Right, const _Alloc& _Al) : c(_Right.c, _Al) {}\r\n\r\n    template <class _Alloc, enable_if_t<uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    queue(queue&& _Right, const _Alloc& _Al)\r\n        noexcept(is_nothrow_constructible_v<_Container, _Container, const _Alloc&>) // strengthened\r\n        : c(_STD move(_Right.c), _Al) {}\r\n\r\n#if _HAS_CXX23\r\n    template <_Iterator_for_container _InIt, class _Alloc>\r\n        requires uses_allocator_v<_Container, _Alloc>\r\n    queue(_InIt _First, _InIt _Last, const _Alloc& _Al)\r\n        noexcept(is_nothrow_constructible_v<_Container, _InIt, _InIt, const _Alloc&>) // strengthened\r\n        : c(_STD move(_First), _STD move(_Last), _Al) {}\r\n\r\n    template <_Container_compatible_range<_Ty> _Rng, class _Alloc>\r\n    queue(from_range_t, _Rng&& _Range, const _Alloc& _Al)\r\n        : c(_RANGES to<_Container>(_STD forward<_Rng>(_Range), _Al)) {}\r\n#endif // _HAS_CXX23\r\n\r\n    _NODISCARD_EMPTY_MEMBER_NO_CLEAR bool empty() const noexcept(noexcept(c.empty())) /* strengthened */ {\r\n        return c.empty();\r\n    }\r\n\r\n    _NODISCARD size_type size() const noexcept(noexcept(c.size())) /* strengthened */ {\r\n        return c.size();\r\n    }\r\n\r\n    _NODISCARD reference front() noexcept(noexcept(c.front())) /* strengthened */ {\r\n        return c.front();\r\n    }\r\n\r\n    _NODISCARD const_reference front() const noexcept(noexcept(c.front())) /* strengthened */ {\r\n        return c.front();\r\n    }\r\n\r\n    _NODISCARD reference back() noexcept(noexcept(c.back())) /* strengthened */ {\r\n        return c.back();\r\n    }\r\n\r\n    _NODISCARD const_reference back() const noexcept(noexcept(c.back())) /* strengthened */ {\r\n        return c.back();\r\n    }\r\n\r\n    void push(const value_type& _Val) {\r\n        c.push_back(_Val);\r\n    }\r\n\r\n    void push(value_type&& _Val) {\r\n        c.push_back(_STD move(_Val));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    void push_range(_Rng&& _Range) {\r\n        if constexpr (requires { c.append_range(_STD forward<_Rng>(_Range)); }) {\r\n            c.append_range(_STD forward<_Rng>(_Range));\r\n        } else {\r\n            _RANGES copy(_Range, back_insert_iterator{c});\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    template <class... _Valty>\r\n    _ADAPTOR_EMPLACE_RETURN emplace(_Valty&&... _Val) {\r\n#if _HAS_CXX17\r\n        return c.emplace_back(_STD forward<_Valty>(_Val)...);\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n        c.emplace_back(_STD forward<_Valty>(_Val)...);\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n    }\r\n\r\n    void pop() noexcept(noexcept(c.pop_front())) /* strengthened */ {\r\n        c.pop_front();\r\n    }\r\n\r\n    void swap(queue& _Right) noexcept(_Is_nothrow_swappable<_Container>::value) {\r\n        using _STD swap;\r\n        swap(c, _Right.c); // intentional ADL\r\n    }\r\n\r\n    _NODISCARD const _Container& _Get_container() const noexcept {\r\n        return c;\r\n    }\r\n\r\nprotected:\r\n    _Container c{};\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Container, enable_if_t<!_Is_allocator<_Container>::value, int> = 0>\r\nqueue(_Container) -> queue<typename _Container::value_type, _Container>;\r\n\r\ntemplate <class _Container, class _Alloc,\r\n    enable_if_t<conjunction_v<negation<_Is_allocator<_Container>>, uses_allocator<_Container, _Alloc>>, int> = 0>\r\nqueue(_Container, _Alloc) -> queue<typename _Container::value_type, _Container>;\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\ntemplate <_Iterator_for_container _InIt, _Allocator_for_container _Alloc = allocator<_Iter_value_t<_InIt>>>\r\nqueue(_InIt, _InIt, _Alloc = _Alloc()) -> queue<_Iter_value_t<_InIt>, deque<_Iter_value_t<_InIt>, _Alloc>>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc = allocator<_RANGES range_value_t<_Rng>>>\r\nqueue(from_range_t, _Rng&&, _Alloc = _Alloc())\r\n    -> queue<_RANGES range_value_t<_Rng>, deque<_RANGES range_value_t<_Rng>, _Alloc>>;\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD template <class _Ty, class _Container>\r\n_NODISCARD bool operator==(const queue<_Ty, _Container>& _Left, const queue<_Ty, _Container>& _Right) {\r\n    return _Left._Get_container() == _Right._Get_container();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Container>\r\n_NODISCARD bool operator!=(const queue<_Ty, _Container>& _Left, const queue<_Ty, _Container>& _Right) {\r\n    return _Left._Get_container() != _Right._Get_container();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Container>\r\n_NODISCARD bool operator<(const queue<_Ty, _Container>& _Left, const queue<_Ty, _Container>& _Right) {\r\n    return _Left._Get_container() < _Right._Get_container();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Container>\r\n_NODISCARD bool operator>(const queue<_Ty, _Container>& _Left, const queue<_Ty, _Container>& _Right) {\r\n    return _Left._Get_container() > _Right._Get_container();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Container>\r\n_NODISCARD bool operator<=(const queue<_Ty, _Container>& _Left, const queue<_Ty, _Container>& _Right) {\r\n    return _Left._Get_container() <= _Right._Get_container();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Container>\r\n_NODISCARD bool operator>=(const queue<_Ty, _Container>& _Left, const queue<_Ty, _Container>& _Right) {\r\n    return _Left._Get_container() >= _Right._Get_container();\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty, three_way_comparable _Container>\r\n_NODISCARD compare_three_way_result_t<_Container> operator<=>(\r\n    const queue<_Ty, _Container>& _Left, const queue<_Ty, _Container>& _Right) {\r\n    return _Left._Get_container() <=> _Right._Get_container();\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty, class _Container, enable_if_t<_Is_swappable<_Container>::value, int> = 0>\r\nvoid swap(queue<_Ty, _Container>& _Left, queue<_Ty, _Container>& _Right) noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n\r\ntemplate <class _Ty, class _Container, class _Alloc>\r\nstruct uses_allocator<queue<_Ty, _Container>, _Alloc> : uses_allocator<_Container, _Alloc>::type {};\r\n\r\n#if _HAS_CXX23\r\n// Per LWG-3997, `_CharT` in library-provided `formatter` specializations is\r\n// constrained to character types supported by `format`.\r\ntemplate <_Format_supported_charT _CharT, class _Ty, formattable<_CharT> _Container>\r\nstruct formatter<queue<_Ty, _Container>, _CharT>\r\n    : _Adaptor_formatter_base<queue<_Ty, _Container>, _CharT, _RANGES ref_view> {};\r\n\r\ntemplate <class _Ty, class _Container>\r\nconstexpr bool enable_nonlocking_formatter_optimization<queue<_Ty, _Container>> = false;\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD template <class _Ty, class _Container = vector<_Ty>, class _Pr = less<typename _Container::value_type>>\r\nclass priority_queue {\r\npublic:\r\n    using value_type      = typename _Container::value_type;\r\n    using reference       = typename _Container::reference;\r\n    using const_reference = typename _Container::const_reference;\r\n    using size_type       = typename _Container::size_type;\r\n    using container_type  = _Container;\r\n    using value_compare   = _Pr;\r\n\r\n    static_assert(is_same_v<_Ty, value_type>, \"container adaptors require consistent types\");\r\n    static_assert(is_object_v<_Ty>, \"The C++ Standard forbids container adaptors of non-object types \"\r\n                                    \"because of [container.requirements].\");\r\n\r\n    priority_queue() = default;\r\n\r\n    explicit priority_queue(const _Pr& _Pred)\r\n        noexcept(is_nothrow_default_constructible_v<_Container>\r\n                 && is_nothrow_copy_constructible_v<value_compare>) // strengthened\r\n        : c(), comp(_Pred) {}\r\n\r\n    priority_queue(const _Pr& _Pred, const _Container& _Cont) : c(_Cont), comp(_Pred) {\r\n        _Make_heap();\r\n    }\r\n\r\n    priority_queue(const _Pr& _Pred, _Container&& _Cont) : c(_STD move(_Cont)), comp(_Pred) {\r\n        _Make_heap();\r\n    }\r\n\r\n    template <class _InIt, enable_if_t<_Is_iterator_v<_InIt>, int> = 0>\r\n    priority_queue(_InIt _First, _InIt _Last, const _Pr& _Pred, const _Container& _Cont) : c(_Cont), comp(_Pred) {\r\n        c.insert(c.end(), _First, _Last);\r\n        _Make_heap();\r\n    }\r\n\r\n    template <class _InIt, enable_if_t<_Is_iterator_v<_InIt>, int> = 0>\r\n    priority_queue(_InIt _First, _InIt _Last) : c(_First, _Last), comp() {\r\n        _Make_heap();\r\n    }\r\n\r\n    template <class _InIt, enable_if_t<_Is_iterator_v<_InIt>, int> = 0>\r\n    priority_queue(_InIt _First, _InIt _Last, const _Pr& _Pred) : c(_First, _Last), comp(_Pred) {\r\n        _Make_heap();\r\n    }\r\n\r\n    template <class _InIt, enable_if_t<_Is_iterator_v<_InIt>, int> = 0>\r\n    priority_queue(_InIt _First, _InIt _Last, const _Pr& _Pred, _Container&& _Cont) : c(_STD move(_Cont)), comp(_Pred) {\r\n        c.insert(c.end(), _First, _Last);\r\n        _Make_heap();\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    priority_queue(from_range_t, _Rng&& _Range, const _Pr& _Pred = _Pr())\r\n        : c(_RANGES to<_Container>(_STD forward<_Rng>(_Range))), comp(_Pred) {\r\n        _Make_heap();\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Alloc, enable_if_t<uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    explicit priority_queue(const _Alloc& _Al)\r\n        noexcept(is_nothrow_constructible_v<_Container, const _Alloc&>\r\n                 && is_nothrow_default_constructible_v<value_compare>) // strengthened\r\n        : c(_Al), comp() {}\r\n\r\n    template <class _Alloc, enable_if_t<uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    priority_queue(const _Pr& _Pred, const _Alloc& _Al)\r\n        noexcept(is_nothrow_constructible_v<_Container, const _Alloc&>\r\n                 && is_nothrow_copy_constructible_v<value_compare>) // strengthened\r\n        : c(_Al), comp(_Pred) {}\r\n\r\n    template <class _Alloc, enable_if_t<uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    priority_queue(const _Pr& _Pred, const _Container& _Cont, const _Alloc& _Al) : c(_Cont, _Al), comp(_Pred) {\r\n        _Make_heap();\r\n    }\r\n\r\n    template <class _Alloc, enable_if_t<uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    priority_queue(const _Pr& _Pred, _Container&& _Cont, const _Alloc& _Al) : c(_STD move(_Cont), _Al), comp(_Pred) {\r\n        _Make_heap();\r\n    }\r\n\r\n    template <class _Alloc, enable_if_t<uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    priority_queue(const priority_queue& _Right, const _Alloc& _Al) : c(_Right.c, _Al), comp(_Right.comp) {}\r\n\r\n    template <class _Alloc, enable_if_t<uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    priority_queue(priority_queue&& _Right, const _Alloc& _Al)\r\n        noexcept(is_nothrow_constructible_v<_Container, _Container, const _Alloc&>\r\n                 && is_nothrow_move_constructible_v<value_compare>) // strengthened\r\n        : c(_STD move(_Right.c), _Al), comp(_STD move(_Right.comp)) {}\r\n\r\n    template <class _InIt, class _Alloc,\r\n        enable_if_t<_Is_iterator_v<_InIt> && uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    priority_queue(_InIt _First, _InIt _Last, const _Alloc& _Al) : c(_First, _Last, _Al), comp() {\r\n        _Make_heap();\r\n    }\r\n\r\n    template <class _InIt, class _Alloc,\r\n        enable_if_t<_Is_iterator_v<_InIt> && uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    priority_queue(_InIt _First, _InIt _Last, const _Pr& _Pred, const _Alloc& _Al)\r\n        : c(_First, _Last, _Al), comp(_Pred) {\r\n        _Make_heap();\r\n    }\r\n\r\n    template <class _InIt, class _Alloc,\r\n        enable_if_t<_Is_iterator_v<_InIt> && uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    priority_queue(_InIt _First, _InIt _Last, const _Pr& _Pred, const _Container& _Cont, const _Alloc& _Al)\r\n        : c(_Cont, _Al), comp(_Pred) {\r\n        c.insert(c.end(), _First, _Last);\r\n        _Make_heap();\r\n    }\r\n\r\n    template <class _InIt, class _Alloc,\r\n        enable_if_t<_Is_iterator_v<_InIt> && uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    priority_queue(_InIt _First, _InIt _Last, const _Pr& _Pred, _Container&& _Cont, const _Alloc& _Al)\r\n        : c(_STD move(_Cont), _Al), comp(_Pred) {\r\n        c.insert(c.end(), _First, _Last);\r\n        _Make_heap();\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng, class _Alloc>\r\n        requires uses_allocator_v<_Container, _Alloc>\r\n    priority_queue(from_range_t, _Rng&& _Range, const _Pr& _Pred, const _Alloc& _Al)\r\n        : c(_RANGES to<_Container>(_STD forward<_Rng>(_Range), _Al)), comp(_Pred) {\r\n        _Make_heap();\r\n    }\r\n\r\n    template <_Container_compatible_range<_Ty> _Rng, class _Alloc>\r\n        requires uses_allocator_v<_Container, _Alloc>\r\n    priority_queue(from_range_t, _Rng&& _Range, const _Alloc& _Al)\r\n        : c(_RANGES to<_Container>(_STD forward<_Rng>(_Range), _Al)), comp() {\r\n        _Make_heap();\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _NODISCARD_EMPTY_MEMBER_NO_CLEAR bool empty() const noexcept(noexcept(c.empty())) /* strengthened */ {\r\n        return c.empty();\r\n    }\r\n\r\n    _NODISCARD size_type size() const noexcept(noexcept(c.size())) /* strengthened */ {\r\n        return c.size();\r\n    }\r\n\r\n    _NODISCARD const_reference top() const noexcept(noexcept(c.front())) /* strengthened */ {\r\n        return c.front();\r\n    }\r\n\r\n    void push(const value_type& _Val) {\r\n        c.push_back(_Val);\r\n        _STD push_heap(c.begin(), c.end(), _STD _Pass_fn(comp));\r\n    }\r\n\r\n    void push(value_type&& _Val) {\r\n        c.push_back(_STD move(_Val));\r\n        _STD push_heap(c.begin(), c.end(), _STD _Pass_fn(comp));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    void push_range(_Rng&& _Range) {\r\n        const size_type _Old_size = c.size();\r\n\r\n        if constexpr (requires { c.append_range(_STD forward<_Rng>(_Range)); }) {\r\n            c.append_range(_STD forward<_Rng>(_Range));\r\n        } else {\r\n            _RANGES copy(_Range, back_insert_iterator{c});\r\n        }\r\n\r\n        const size_type _New_size = c.size();\r\n        if (_New_size / 2 > _Old_size) { // threshold chosen for performance\r\n            _Make_heap();\r\n        } else {\r\n            const auto _Begin = _STD _Get_unwrapped(c.begin());\r\n            auto _Heap_end    = _Begin + _Old_size;\r\n            const auto _End   = _STD _Get_unwrapped(c.end());\r\n            while (_Heap_end != _End) {\r\n                _STD push_heap(_Begin, ++_Heap_end, _STD _Pass_fn(comp));\r\n            }\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    template <class... _Valty>\r\n    void emplace(_Valty&&... _Val) {\r\n        c.emplace_back(_STD forward<_Valty>(_Val)...);\r\n        _STD push_heap(c.begin(), c.end(), _STD _Pass_fn(comp));\r\n    }\r\n\r\n    void pop() {\r\n        _STD pop_heap(c.begin(), c.end(), _STD _Pass_fn(comp));\r\n        c.pop_back();\r\n    }\r\n\r\n    void swap(priority_queue& _Right)\r\n        noexcept(_Is_nothrow_swappable<_Container>::value && _Is_nothrow_swappable<_Pr>::value) {\r\n        using _STD swap;\r\n        swap(c, _Right.c); // intentional ADL\r\n        swap(comp, _Right.comp); // intentional ADL\r\n    }\r\n\r\nprivate:\r\n    void _Make_heap() {\r\n        _STD make_heap(c.begin(), c.end(), _STD _Pass_fn(comp));\r\n    }\r\n\r\nprotected:\r\n    _Container c{};\r\n    _Pr comp{};\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Pr, class _Container,\r\n    enable_if_t<conjunction_v<negation<_Is_allocator<_Pr>>, negation<_Is_allocator<_Container>>>, int> = 0>\r\npriority_queue(_Pr, _Container) -> priority_queue<typename _Container::value_type, _Container, _Pr>;\r\n\r\ntemplate <class _Iter, class _Pr = less<_Iter_value_t<_Iter>>, class _Container = vector<_Iter_value_t<_Iter>>,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, negation<_Is_allocator<_Pr>>, negation<_Is_allocator<_Container>>>,\r\n        int> = 0>\r\npriority_queue(_Iter, _Iter, _Pr = _Pr(), _Container = _Container())\r\n    -> priority_queue<_Iter_value_t<_Iter>, _Container, _Pr>;\r\n\r\ntemplate <class _Pr, class _Container, class _Alloc,\r\n    enable_if_t<conjunction_v<negation<_Is_allocator<_Pr>>, negation<_Is_allocator<_Container>>,\r\n                    uses_allocator<_Container, _Alloc>>,\r\n        int> = 0>\r\npriority_queue(_Pr, _Container, _Alloc) -> priority_queue<typename _Container::value_type, _Container, _Pr>;\r\n\r\ntemplate <class _Iter, class _Alloc, class _Container = vector<_Iter_value_t<_Iter>, _Alloc>,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>, uses_allocator<_Container, _Alloc>>, int> = 0>\r\npriority_queue(_Iter, _Iter, _Alloc) -> priority_queue<_Iter_value_t<_Iter>, _Container, less<_Iter_value_t<_Iter>>>;\r\n\r\ntemplate <class _Iter, class _Compare, class _Alloc, class _Container = vector<_Iter_value_t<_Iter>, _Alloc>,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>, uses_allocator<_Container, _Alloc>>, int> = 0>\r\npriority_queue(_Iter, _Iter, _Compare, _Alloc) -> priority_queue<_Iter_value_t<_Iter>, _Container, _Compare>;\r\n\r\ntemplate <class _Iter, class _Compare, class _Container, class _Alloc,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, uses_allocator<_Container, _Alloc>>, int> = 0>\r\npriority_queue(_Iter, _Iter, _Compare, _Container, _Alloc)\r\n    -> priority_queue<typename _Container::value_type, _Container, _Compare>;\r\n\r\n#if _HAS_CXX23\r\ntemplate <_RANGES input_range _Rng, class _Pr = less<_RANGES range_value_t<_Rng>>,\r\n    enable_if_t<!_Is_allocator<_Pr>::value, int> = 0>\r\npriority_queue(from_range_t, _Rng&&, _Pr = _Pr())\r\n    -> priority_queue<_RANGES range_value_t<_Rng>, vector<_RANGES range_value_t<_Rng>>, _Pr>;\r\n\r\ntemplate <_RANGES input_range _Rng, class _Pr, class _Alloc,\r\n    enable_if_t<conjunction_v<negation<_Is_allocator<_Pr>>, _Is_allocator<_Alloc>>, int> = 0>\r\npriority_queue(from_range_t, _Rng&&, _Pr, _Alloc)\r\n    -> priority_queue<_RANGES range_value_t<_Rng>, vector<_RANGES range_value_t<_Rng>, _Alloc>, _Pr>;\r\n\r\ntemplate <_RANGES input_range _Rng, class _Alloc, enable_if_t<_Is_allocator<_Alloc>::value, int> = 0>\r\npriority_queue(from_range_t, _Rng&&, _Alloc)\r\n    -> priority_queue<_RANGES range_value_t<_Rng>, vector<_RANGES range_value_t<_Rng>, _Alloc>>;\r\n#endif // _HAS_CXX23\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Ty, class _Container, class _Pr,\r\n    enable_if_t<_Is_swappable<_Container>::value && _Is_swappable<_Pr>::value, int> = 0>\r\nvoid swap(priority_queue<_Ty, _Container, _Pr>& _Left, priority_queue<_Ty, _Container, _Pr>& _Right)\r\n    noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n\r\ntemplate <class _Ty, class _Container, class _Pr, class _Alloc>\r\nstruct uses_allocator<priority_queue<_Ty, _Container, _Pr>, _Alloc> : uses_allocator<_Container, _Alloc>::type {};\r\n\r\n#if _HAS_CXX23\r\n// Per LWG-3997, `_CharT` in library-provided `formatter` specializations is\r\n// constrained to character types supported by `format`.\r\ntemplate <_Format_supported_charT _CharT, class _Ty, formattable<_CharT> _Container, class _Comp>\r\nstruct formatter<priority_queue<_Ty, _Container, _Comp>, _CharT>\r\n    : _Adaptor_formatter_base<priority_queue<_Ty, _Container, _Comp>, _CharT, _RANGES ref_view> {};\r\n\r\ntemplate <class _Ty, class _Container, class _Compare>\r\nconstexpr bool enable_nonlocking_formatter_optimization<priority_queue<_Ty, _Container, _Compare>> = false;\r\n#endif // _HAS_CXX23\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _QUEUE_\r\n"
  },
  {
    "path": "stl/inc/random",
    "content": "// random standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _RANDOM_\r\n#define _RANDOM_\r\n#include <yvals_core.h>\r\n\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <__msvc_int128.hpp>\r\n#include <algorithm>\r\n#include <cmath>\r\n#include <cstdint>\r\n#include <ios>\r\n#include <vector>\r\n#include <xbit_ops.h>\r\n#include <xstring>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n#ifdef _ALLOW_RANDOM_DISTRIBUTION_CONST_OPERATOR\r\n#define _DISTRIBUTION_CONST const\r\n#else\r\n#define _DISTRIBUTION_CONST\r\n#endif\r\n\r\n_STD_BEGIN\r\n#define _RNG_PROHIBIT_CHAR(_CheckedType)               \\\r\n    static_assert(!_Is_character<_CheckedType>::value, \\\r\n        \"note: char, signed char, unsigned char, char8_t, int8_t, and uint8_t are not allowed\")\r\n\r\n#define _RNG_REQUIRE_REALTYPE(_RandType, _CheckedType)                    \\\r\n    static_assert(_Is_any_of_v<_CheckedType, float, double, long double>, \\\r\n        \"invalid template argument for \" #_RandType                       \\\r\n        \": N4950 [rand.req.genl]/1.4 requires one of float, double, or long double\")\r\n\r\n#define _RNG_REQUIRE_INTTYPE(_RandType, _CheckedType)                                                                  \\\r\n    static_assert(_Is_any_of_v<_CheckedType, short, int, long, long long, unsigned short, unsigned int, unsigned long, \\\r\n                      unsigned long long>,                                                                             \\\r\n        \"invalid template argument for \" #_RandType                                                                    \\\r\n        \": N4950 [rand.req.genl]/1.5 requires one of short, int, long, long long, unsigned short, unsigned int, \"      \\\r\n        \"unsigned long, or unsigned long long\");                                                                       \\\r\n    _RNG_PROHIBIT_CHAR(_CheckedType)\r\n\r\n#define _RNG_REQUIRE_UINTTYPE(_RandType, _CheckedType)                                                             \\\r\n    static_assert(_Is_any_of_v<_CheckedType, unsigned short, unsigned int, unsigned long, unsigned long long>,     \\\r\n        \"invalid template argument for \" #_RandType \": N4950 [rand.req.genl]/1.6 requires one of unsigned short, \" \\\r\n        \"unsigned int, unsigned long, or unsigned long long\");                                                     \\\r\n    _RNG_PROHIBIT_CHAR(_CheckedType)\r\n\r\ntemplate <class _Seed_seq, class _Self, class _Engine = _Self>\r\nusing _Enable_if_seed_seq_t =\r\n    enable_if_t<!is_convertible_v<remove_cv_t<_Seed_seq>, typename _Self::result_type>\r\n                    && !is_same_v<remove_cv_t<_Seed_seq>, _Self> && !is_same_v<remove_cv_t<_Seed_seq>, _Engine>,\r\n        int>;\r\n\r\n_INLINE_VAR constexpr long double _Pi_val = 3.14159265358979323846264338327950288L;\r\n_INLINE_VAR constexpr long double _Exp1   = 2.71828182845904523536028747135266250L;\r\n_INLINE_VAR constexpr long double _Two32  = 4294967296.0L;\r\n_INLINE_VAR constexpr long double _Two31  = 2147483648.0L;\r\n\r\n_INLINE_VAR constexpr int _Nwords = 4;\r\n\r\ntemplate <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& _Write(\r\n    basic_ostream<_Elem, _Traits>& _Os, long double _Dx) { // write long double to stream\r\n    int _Ex;\r\n    long double _Frac = _CSTD frexpl(_Dx, &_Ex);\r\n    for (int _Nw = 0; _Nw < _Nwords; ++_Nw) { // break into 31-bit words\r\n        _Frac *= _Two31;\r\n        long _Digits = static_cast<long>(_Frac);\r\n        _Frac -= _Digits;\r\n        _Os << ' ' << _Digits;\r\n    }\r\n    _Os << ' ' << _Ex;\r\n    return _Os;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits>\r\nbasic_istream<_Elem, _Traits>& _Read(\r\n    basic_istream<_Elem, _Traits>& _Is, long double& _Dx) { // read long double from stream\r\n    long double _Frac = 0.0;\r\n    long _Digits;\r\n    for (int _Nw = 0; _Nw < _Nwords; ++_Nw) { // accumulate 31-bit words\r\n        _Is >> _Digits;\r\n        long double _Temp = _Digits / _Two31;\r\n        for (int _Idx = 0; _Idx < _Nw; ++_Idx) {\r\n            _Temp /= _Two31;\r\n        }\r\n\r\n        _Frac += _Temp;\r\n    }\r\n    _Is >> _Digits;\r\n    _Dx = _CSTD ldexpl(_Frac, _Digits);\r\n    return _Is;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Ty>\r\nbasic_istream<_Elem, _Traits>& _In(basic_istream<_Elem, _Traits>& _Is, _Ty& _Dx) { // read from stream\r\n    long double _Vx;\r\n    _Ty _Max = (numeric_limits<_Ty>::max)();\r\n    _Read(_Is, _Vx);\r\n    if (_CSTD fabsl(_Vx) <= _Max) {\r\n        _Dx = static_cast<_Ty>(_Vx);\r\n    } else if (_Vx < 0) {\r\n        _Dx = -_Max;\r\n    } else {\r\n        _Dx = _Max;\r\n    }\r\n\r\n    return _Is;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Ty>\r\nbasic_ostream<_Elem, _Traits>& _Out(basic_ostream<_Elem, _Traits>& _Os, _Ty _Dx) { // write to stream\r\n    return _Write(_Os, _Dx);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Ty>\r\nclass _Wrap_istream { // wrap input stream as function object\r\npublic:\r\n    _Wrap_istream(basic_istream<_Elem, _Traits>& _Is) : _Str(_Is) {}\r\n\r\n    _Ty operator()() { // read next value\r\n        _Ty _Data;\r\n        _Str >> _Data;\r\n        if (!_Str) {\r\n            _Xinvalid_argument(\"input stream corrupted\");\r\n        }\r\n\r\n        return _Data;\r\n    }\r\n\r\n    _Wrap_istream& operator=(const _Wrap_istream&) = delete;\r\n\r\nprivate:\r\n    basic_istream<_Elem, _Traits>& _Str;\r\n};\r\n\r\n_EXPORT_STD class seed_seq { // standard sequence of seed values\r\npublic:\r\n    using result_type = unsigned int;\r\n\r\n    seed_seq() noexcept {}\r\n\r\n    template <class _Ty, enable_if_t<is_integral_v<_Ty>, int> = 0>\r\n    seed_seq(initializer_list<_Ty> _Ilist) {\r\n        _Construct(_Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\n    template <class _InIt>\r\n    seed_seq(_InIt _First, _InIt _Last) {\r\n        _Construct(_First, _Last);\r\n    }\r\n\r\n    template <class _RanIt>\r\n    void generate(_RanIt _First, _RanIt _Last) const { // generate randomized interval from seeds\r\n        static_assert(_Is_any_of_v<remove_cv_t<typename iterator_traits<_RanIt>::value_type>, //\r\n                          unsigned int, unsigned long, unsigned long long>,\r\n            \"N4971 [rand.util.seedseq]/7 requires the value type of the iterator to be an unsigned type that is at \"\r\n            \"least 32-bit.\");\r\n\r\n        _Adl_verify_range(_First, _Last);\r\n        auto _UFirst   = _Get_unwrapped(_First);\r\n        const auto _Nx = static_cast<size_t>(_Get_unwrapped(_Last) - _UFirst);\r\n\r\n        if (0 < _Nx) { // finite interval, fill it\r\n            const size_t _Sx = _Myvec.size();\r\n            const size_t _Tx = 623 <= _Nx ? 11 : 68 <= _Nx ? 7 : 39 <= _Nx ? 5 : 7 <= _Nx ? 3 : (_Nx - 1) / 2;\r\n            const size_t _Px = (_Nx - _Tx) / 2;\r\n            const size_t _Qx = _Px + _Tx;\r\n            const size_t _Mx = _Nx <= _Sx ? _Sx + 1 : _Nx;\r\n            size_t _Kx;\r\n\r\n            _Iter_value_t<_RanIt> _Mask(_Iter_value_t<_RanIt>(1) << 31);\r\n            _Mask <<= 1; // build 32-bit mask safely\r\n            _Mask -= 1;\r\n\r\n            for (_Kx = 0; _Kx < _Nx; ++_Kx) {\r\n                _UFirst[_Kx] = 0x8b8b8b8b;\r\n            }\r\n\r\n            for (_Kx = 0; _Kx < _Mx; ++_Kx) { // scramble and add any vector contributions\r\n                result_type _Rx1 =\r\n                    1664525 * _Xor27(_UFirst[_Kx % _Nx] ^ _UFirst[(_Kx + _Px) % _Nx] ^ _UFirst[(_Kx - 1) % _Nx]);\r\n\r\n                size_t _Off;\r\n                if (_Kx == 0) {\r\n                    _Off = _Sx;\r\n                } else if (_Kx <= _Sx) {\r\n                    _Off = _Kx % _Nx + _Myvec[_Kx - 1];\r\n                } else {\r\n                    _Off = _Kx % _Nx;\r\n                }\r\n                result_type _Rx2 = static_cast<result_type>((_Rx1 + _Off) & _Mask);\r\n\r\n                _UFirst[(_Kx + _Px) % _Nx] = (_UFirst[(_Kx + _Px) % _Nx] + _Rx1) & _Mask;\r\n                _UFirst[(_Kx + _Qx) % _Nx] = (_UFirst[(_Kx + _Qx) % _Nx] + _Rx2) & _Mask;\r\n                _UFirst[_Kx % _Nx]         = _Rx2;\r\n            }\r\n            for (; _Kx < _Mx + _Nx; ++_Kx) { // rescramble\r\n                result_type _Rx3 =\r\n                    1566083941 * _Xor27(_UFirst[_Kx % _Nx] + _UFirst[(_Kx + _Px) % _Nx] + _UFirst[(_Kx - 1) % _Nx]);\r\n                result_type _Rx4 = static_cast<result_type>((_Rx3 - _Kx % _Nx) & _Mask);\r\n\r\n                _UFirst[(_Kx + _Px) % _Nx] = (_UFirst[(_Kx + _Px) % _Nx] ^ _Rx3) & _Mask;\r\n                _UFirst[(_Kx + _Qx) % _Nx] = (_UFirst[(_Kx + _Qx) % _Nx] ^ _Rx4) & _Mask;\r\n                _UFirst[_Kx % _Nx]         = _Rx4;\r\n            }\r\n        }\r\n    }\r\n\r\n    template <class _OutIt>\r\n    void param(_OutIt _Dest) const { // copy seeds\r\n        _STD copy(_Myvec.begin(), _Myvec.end(), _Dest);\r\n    }\r\n\r\n    _NODISCARD size_t size() const noexcept { // get size of seed\r\n        return _Myvec.size();\r\n    }\r\n\r\n    seed_seq(const seed_seq&)       = delete;\r\n    void operator=(const seed_seq&) = delete;\r\n\r\nprivate:\r\n    template <class _InIt>\r\n    void _Construct(_InIt _First, _InIt _Last) {\r\n        for (; _First != _Last; ++_First) {\r\n            _Myvec.push_back(static_cast<unsigned int>(*_First));\r\n        }\r\n    }\r\n\r\n    result_type _Xor27(result_type _Val) const noexcept { // shift and merge\r\n        return _Val ^ (_Val >> 27);\r\n    }\r\n\r\n    vector<result_type> _Myvec;\r\n};\r\n\r\nstruct _Urbg_gen_can_params {\r\n    bool _Rx_is_pow2 = false; // $R$ (in N4981 [rand.util.canonical]/1.2) is a power of 2\r\n    int _Kx          = 0; // $k$ in N4981 [rand.util.canonical]/1.4\r\n    uint64_t _Xx     = 0; // $x$ in N4981 [rand.util.canonical]/1.5\r\n    float _Scale     = 0.0f; // $r^{-d}$, always representable as a float\r\n    int _Smax_bits   = 0; // number of bits in $R^k$\r\n};\r\n\r\n_NODISCARD constexpr _Urbg_gen_can_params _Generate_canonical_params(const size_t _Bits, const uint64_t _Rm1) {\r\n    const auto _Rx        = _Unsigned128{_Rm1} + 1; // $R$ in N4981 [rand.util.canonical]/1.2\r\n    const auto _Target    = _Unsigned128{1} << _Bits; // $r^d$\r\n    _Unsigned128 _Product = 1;\r\n    _Urbg_gen_can_params _Result;\r\n    _Result._Rx_is_pow2 = (_Rx & (_Rx - 1)) == 0;\r\n    _Result._Kx         = 0;\r\n    while (_Product < _Target) {\r\n        _Product *= _Rx;\r\n        ++_Result._Kx;\r\n    }\r\n\r\n    _Result._Xx        = static_cast<uint64_t>(_Product / _Target);\r\n    _Result._Scale     = 1.0f / static_cast<float>(1ULL << _Bits);\r\n    _Result._Smax_bits = 0;\r\n    // $S \\in [0, _Product)$\r\n    --_Product;\r\n    while (_Product > 0) {\r\n        ++_Result._Smax_bits;\r\n        _Product >>= 1;\r\n    }\r\n\r\n    return _Result;\r\n}\r\n\r\n_EXPORT_STD template <class _Real, size_t _Bits, class _Gen>\r\n_NODISCARD _Real generate_canonical(_Gen& _Gx) { // build a floating-point value from random sequence\r\n    _RNG_REQUIRE_REALTYPE(generate_canonical, _Real);\r\n\r\n    constexpr auto _Digits  = static_cast<size_t>(numeric_limits<_Real>::digits);\r\n    constexpr auto _Minbits = static_cast<int>(_Digits < _Bits ? _Digits : _Bits);\r\n\r\n    if constexpr (_Minbits == 0) {\r\n        return _Real{0};\r\n    } else {\r\n        using _Result_uint_type = conditional_t<_Minbits <= 32, uint32_t, uint64_t>;\r\n\r\n        constexpr auto _Gxmin  = (_Gen::min) ();\r\n        constexpr auto _Gxmax  = (_Gen::max) ();\r\n        constexpr auto _Params = _Generate_canonical_params(_Minbits, _Gxmax - _Gxmin);\r\n\r\n        _STL_INTERNAL_STATIC_ASSERT(_Params._Kx >= 1);\r\n\r\n        if constexpr (_Params._Rx_is_pow2) {\r\n            // Always needs only one attempt. Multiplications can be replaced with shift/add.\r\n            constexpr int _Discarded_bits = _Params._Smax_bits - _Minbits;\r\n            _Result_uint_type _Sx         = static_cast<_Result_uint_type>((_Gx() - _Gxmin) >> _Discarded_bits);\r\n\r\n            if constexpr (_Params._Kx > 1) {\r\n                constexpr int _Rx_bits = _Params._Smax_bits / _Params._Kx;\r\n                int _Shift             = -_Discarded_bits;\r\n                for (int _Idx = 1; _Idx < _Params._Kx; ++_Idx) {\r\n                    _Shift += _Rx_bits;\r\n                    _Sx += static_cast<_Result_uint_type>(_Gx() - _Gxmin) << _Shift;\r\n                }\r\n            }\r\n\r\n            return static_cast<_Real>(_Sx) * static_cast<_Real>(_Params._Scale);\r\n        } else {\r\n            using _Sx_type = conditional_t<_Params._Smax_bits <= 32, uint32_t,\r\n                conditional_t<_Params._Smax_bits <= 64, uint64_t, _Unsigned128>>;\r\n\r\n            constexpr auto _Rx        = _Sx_type{_Gxmax - _Gxmin} + 1u;\r\n            constexpr _Sx_type _Limit = static_cast<_Sx_type>(_Params._Xx) * (_Sx_type{1} << _Minbits);\r\n\r\n            _Sx_type _Sx;\r\n\r\n            do {\r\n                // unroll first two iterations to avoid unnecessary multiplications\r\n                _Sx = static_cast<_Sx_type>(_Gx() - _Gxmin);\r\n                if constexpr (_Params._Kx == 2) {\r\n                    _Sx += static_cast<_Sx_type>(_Gx() - _Gxmin) * _Rx;\r\n                } else if constexpr (_Params._Kx > 2) {\r\n                    _Sx += static_cast<_Sx_type>(_Gx() - _Gxmin) * _Rx;\r\n                    _Sx_type _Factor = _Rx;\r\n                    for (int _Idx = 2; _Idx < _Params._Kx; ++_Idx) {\r\n                        _Factor *= _Rx;\r\n                        _Sx += static_cast<_Sx_type>(_Gx() - _Gxmin) * _Factor;\r\n                    }\r\n                }\r\n            } while (_Sx >= _Limit);\r\n\r\n            return static_cast<_Real>(static_cast<_Result_uint_type>(_Sx / _Params._Xx))\r\n                 * static_cast<_Real>(_Params._Scale);\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _Real, class _Gen>\r\n_NODISCARD _Real _Nrand_impl(_Gen& _Gx) { // build a floating-point value from random sequence\r\n    _RNG_REQUIRE_REALTYPE(_Nrand_impl, _Real);\r\n\r\n    constexpr auto _Digits = static_cast<size_t>(numeric_limits<_Real>::digits);\r\n\r\n    return _STD generate_canonical<_Real, _Digits>(_Gx);\r\n}\r\n\r\ntemplate <class _Uint, _Uint _Ax, _Uint _Cx, _Uint _Mx>\r\n_NODISCARD _Uint _Next_linear_congruential_value(_Uint _Prev) noexcept {\r\n    // Choose intermediate type:\r\n    // To use type T for the intermediate calculation, we must show\r\n    //  _Ax * (_Mx - 1) + _Cx <= numeric_limits<T>::max()\r\n    // Split _Cx:\r\n    //   _Cx <= numeric_limits<T>::max()\r\n    //   && _Ax * (_Mx - 1) <= numeric_limits<T>::max() - _Cx\r\n    // Divide by _Ax:\r\n    //   _Cx <= numeric_limits<T>::max()\r\n    //   && (_Mx - 1) <= (numeric_limits<T>::max() - _Cx) / _Ax\r\n    if constexpr (_Ax == 0) { // degenerate case; avoid divide by 0\r\n        return static_cast<_Uint>(_Cx); // relies on _Mx == 0 || _Cx <= _Mx, N4950 [rand.eng.lcong]/3\r\n    } else if constexpr (_Mx == 0) {\r\n        // N4950 [rand.eng.lcong]/2: \"If the template parameter m is 0, the modulus m\r\n        // used throughout this subclause [rand.eng.lcong] is\r\n        // numeric_limits<result_type>::max() plus 1.\" That is: Just do the multiply\r\n        // and let normal unsigned modulo take care of it\r\n        return static_cast<_Uint>(static_cast<_Uint>(_Ax * _Prev) + _Cx);\r\n    } else if constexpr (_Cx == 0 && _Mx == 2147483647) {\r\n        // for minstd_rand and minstd_rand0 we can improve performance by avoiding constant divisions\r\n        auto _Mul = static_cast<unsigned long long>(_Prev) * _Ax;\r\n        _Mul      = (_Mul >> 31) + (_Mul & _Mx);\r\n        _Mul      = _Mul < _Mx ? _Mul : _Mul - _Mx;\r\n\r\n        return static_cast<_Uint>(_Mul);\r\n    } else if constexpr (_Cx <= UINT_MAX && static_cast<_Uint>(_Mx - 1) <= (UINT_MAX - _Cx) / _Ax) {\r\n        // unsigned int is sufficient to store intermediate calculation\r\n        const auto _Mul =\r\n            static_cast<unsigned int>(_Prev) * static_cast<unsigned int>(_Ax) + static_cast<unsigned int>(_Cx);\r\n        return static_cast<_Uint>(_Mul % _Mx);\r\n    } else if constexpr (static_cast<_Uint>(_Mx - 1) <= (ULLONG_MAX - _Cx) / _Ax) {\r\n        // unsigned long long is sufficient to store intermediate calculation\r\n        const auto _Mul = static_cast<unsigned long long>(_Prev) * _Ax + _Cx;\r\n        return static_cast<_Uint>(_Mul % _Mx);\r\n    } else { // no intermediate integral type fits; fall back to multiprecision\r\n        const auto _Mul = _Unsigned128{_Prev} * _Ax + _Cx;\r\n        return static_cast<_Uint>(_Mul % _Mx);\r\n    }\r\n}\r\n\r\ntemplate <class _Seed_seq>\r\n_NODISCARD constexpr unsigned int _Seed_seq_to_uint(_Seed_seq& _Seq) {\r\n    unsigned int _Arr[4]{};\r\n    _Seq.generate(_Arr, _Arr + 4);\r\n    return _Arr[3];\r\n}\r\n\r\ntemplate <class _Seed_seq>\r\n_NODISCARD constexpr unsigned long long _Seed_seq_to_ull(_Seed_seq& _Seq) {\r\n    unsigned int _Arr[5]{};\r\n    _Seq.generate(_Arr, _Arr + 5);\r\n    unsigned long long _Result = _Arr[4];\r\n    _Result <<= 32;\r\n    _Result |= _Arr[3];\r\n    return _Result;\r\n}\r\n\r\ntemplate <class _Uint, _Uint _Cx, _Uint _Mx>\r\n_NODISCARD constexpr _Uint _Get_linear_congruential_seed(_Uint _Sx) noexcept { // N4950 [rand.eng.lcong]/5\r\n    if constexpr (_Mx != 0) {\r\n        _Sx %= _Mx;\r\n    }\r\n\r\n    if constexpr (_Cx == 0) {\r\n        if (_Sx == 0) {\r\n            _Sx = _Uint{1};\r\n        }\r\n    }\r\n\r\n    return _Sx;\r\n}\r\n\r\ntemplate <class _Uint, _Uint _Cx, _Uint _Mx, class _Seed_seq>\r\n_NODISCARD _Uint _Get_linear_congruential_seed_from_seq(_Seed_seq& _Seq) { // N4950 [rand.eng.lcong]/6\r\n    _Uint _Sx;\r\n    if constexpr (_Mx == 0) {\r\n        if constexpr (sizeof(_Uint) <= sizeof(unsigned int)) {\r\n            _Sx = static_cast<_Uint>(_Seed_seq_to_uint(_Seq));\r\n        } else {\r\n            _Sx = static_cast<_Uint>(_Seed_seq_to_ull(_Seq));\r\n        }\r\n    } else if constexpr (_Mx <= UINT_MAX) {\r\n        _Sx = static_cast<_Uint>(_Seed_seq_to_uint(_Seq) % _Mx);\r\n    } else {\r\n        _Sx = static_cast<_Uint>(_Seed_seq_to_ull(_Seq) % _Mx);\r\n    }\r\n\r\n    return _Get_linear_congruential_seed<_Uint, _Cx, _Mx>(_Sx);\r\n}\r\n\r\n_EXPORT_STD template <class _Uint, _Uint _Ax, _Uint _Cx, _Uint _Mx>\r\nclass linear_congruential_engine { // a linear congruential generator random engine\r\npublic:\r\n    _RNG_REQUIRE_UINTTYPE(linear_congruential_engine, _Uint);\r\n\r\n    static_assert(0 == _Mx || (_Ax < _Mx && _Cx < _Mx), \"invalid template argument for linear_congruential_engine\");\r\n\r\n    using result_type                       = _Uint;\r\n    static constexpr result_type multiplier = _Ax;\r\n    static constexpr result_type increment  = _Cx;\r\n    static constexpr result_type modulus    = _Mx;\r\n\r\n    _NODISCARD static constexpr result_type(min)() noexcept /* strengthened */ {\r\n        // return minimum possible generated value\r\n        return _Cx == 0;\r\n    }\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4309) // truncation of constant value\r\n    _NODISCARD static constexpr result_type(max)() noexcept /* strengthened */ {\r\n        // return maximum possible generated value\r\n        return static_cast<result_type>(_Mx - 1u); // note 0 wraps around to max\r\n    }\r\n#pragma warning(pop)\r\n\r\n    static constexpr result_type default_seed = 1u;\r\n\r\n    linear_congruential_engine() noexcept // strengthened\r\n        : _Prev(_Get_linear_congruential_seed<result_type, _Cx, _Mx>(default_seed)) {}\r\n\r\n    explicit linear_congruential_engine(result_type _Sx) noexcept // strengthened\r\n        : _Prev(_Get_linear_congruential_seed<result_type, _Cx, _Mx>(_Sx)) {}\r\n\r\n    template <class _Seed_seq, _Enable_if_seed_seq_t<_Seed_seq, linear_congruential_engine> = 0>\r\n    explicit linear_congruential_engine(_Seed_seq& _Seq)\r\n        : _Prev(_Get_linear_congruential_seed_from_seq<result_type, _Cx, _Mx>(_Seq)) {}\r\n\r\n    void seed(result_type _Sx = default_seed) noexcept /* strengthened */ {\r\n        // reset sequence from numeric value\r\n        _Prev = _Get_linear_congruential_seed<result_type, _Cx, _Mx>(_Sx);\r\n    }\r\n\r\n    template <class _Seed_seq, _Enable_if_seed_seq_t<_Seed_seq, linear_congruential_engine> = 0>\r\n    void seed(_Seed_seq& _Seq) { // reset sequence from seed sequence\r\n        _Prev = _Get_linear_congruential_seed_from_seq<result_type, _Cx, _Mx>(_Seq);\r\n    }\r\n\r\n    _NODISCARD _Uint operator()() noexcept {\r\n        _Prev = _Next_linear_congruential_value<result_type, _Ax, _Cx, _Mx>(_Prev);\r\n        return _Prev;\r\n    }\r\n\r\n    void discard(unsigned long long _Nskip) noexcept /* strengthened */ {\r\n        // discard _Nskip elements\r\n        if constexpr (_Cx == 0 && _Mx == 2147483647) {\r\n            // for minstd_rand and minstd_rand0 we can improve performance by\r\n            // performing fast exponentiation and avoiding constant divisions\r\n            auto _Temp = static_cast<unsigned long long>(_Prev);\r\n            auto _Mul  = static_cast<unsigned long long>(_Ax);\r\n\r\n            for (;;) {\r\n                if (_Nskip & 1) {\r\n                    _Temp = _Temp * _Mul;\r\n                    _Temp = (_Temp >> 31) + (_Temp & _Mx);\r\n                    _Temp = _Temp < _Mx ? _Temp : _Temp - _Mx;\r\n                }\r\n\r\n                if (_Nskip >>= 1) {\r\n                    _Mul = _Mul * _Mul;\r\n                    _Mul = (_Mul >> 31) + (_Mul & _Mx);\r\n                    _Mul = _Mul < _Mx ? _Mul : _Mul - _Mx;\r\n                } else {\r\n                    break;\r\n                }\r\n            }\r\n\r\n            _Prev = static_cast<_Uint>(_Temp);\r\n        } else {\r\n            auto _Temp = _Prev;\r\n\r\n            for (; 0 < _Nskip; --_Nskip) {\r\n                _Temp = _Next_linear_congruential_value<_Uint, _Ax, _Cx, _Mx>(_Temp);\r\n            }\r\n\r\n            _Prev = _Temp;\r\n        }\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(\r\n        const linear_congruential_engine& _Lhs, const linear_congruential_engine& _Rhs) noexcept /* strengthened */ {\r\n        return _Lhs._Prev == _Rhs._Prev;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(\r\n        const linear_congruential_engine& _Lhs, const linear_congruential_engine& _Rhs) noexcept /* strengthened */ {\r\n        return _Lhs._Prev != _Rhs._Prev;\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(\r\n        basic_istream<_Elem, _Traits>& _Istr, linear_congruential_engine& _Eng) {\r\n        return _Istr >> _Eng._Prev;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(\r\n        basic_ostream<_Elem, _Traits>& _Ostr, const linear_congruential_engine& _Eng) {\r\n        return _Ostr << _Eng._Prev;\r\n    }\r\n\r\nprivate:\r\n    result_type _Prev;\r\n};\r\n\r\ntemplate <class _Ty, size_t _Nw>\r\nstruct _Circ_buf { // holds historical values for generators\r\n    _Ty _At(size_t _Ix) const noexcept {\r\n        return _Ax[_Base(_Ix)];\r\n    }\r\n\r\n    bool _Equals(const _Circ_buf& _Right) const noexcept {\r\n        const _Ty* _Last1 = _Ax + _Idx;\r\n        const _Ty* _Last2 = _Right._Ax + _Right._Idx;\r\n        const _Ty* _First;\r\n        const _Ty* _Last;\r\n        const _Ty* _Other;\r\n        bool _Use2 = _Base() < _Right._Base();\r\n\r\n        if (_Use2) { // _Right's range is higher up in the array\r\n                     // than ours, so scan it first\r\n            _First = _Right._Ax + _Right._Base();\r\n            _Last  = _Last2;\r\n            _Other = _Ax + _Base();\r\n        } else { // our range is higher up in the array\r\n                 // than _Right's, so scan ours first\r\n            _First = _Ax + _Base();\r\n            _Last  = _Last1;\r\n            _Other = _Right._Ax + _Right._Base();\r\n        }\r\n\r\n        ptrdiff_t _Nx0 = _Nw;\r\n        while (0 < _Nx0) { // scan\r\n                           // note: may need up to three passes; each scan starts at the\r\n                           // current highest array position and ends at the end of the\r\n                           // array or the _Idx value, whichever comes first; the\r\n                           // equality test succeeds only by reaching the _Idx value.\r\n            const _Ty* _Limit = _First < _Last ? _Last : _Use2 ? _Right._Ax + 2 * _Nw : _Ax + 2 * _Nw;\r\n            _Nx0 -= _Limit - _First;\r\n            while (_First != _Limit) {\r\n                if (*_First++ != *_Other++) {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            _First = _Other;\r\n            _Last  = _Use2 ? _Last1 : _Last2;\r\n            _Other = _Use2 ? _Right._Ax : _Ax;\r\n            _Use2  = !_Use2;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    size_t _Base(size_t _Ix = 0) const noexcept {\r\n        _Ix += _Idx;\r\n\r\n        if (_Ix < _Nw) {\r\n            return _Ix + _Nw;\r\n        } else {\r\n            return _Ix - _Nw;\r\n        }\r\n    }\r\n\r\n    unsigned int _Idx;\r\n    _Ty _Ax[2 * _Nw];\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Wx, size_t _Sx, size_t _Rx>\r\nclass subtract_with_carry_engine : private _Circ_buf<_Ty, _Rx> {\r\nprivate:\r\n    static constexpr _Ty _Mx = static_cast<_Ty>((_Ty{1} << (_Wx - 1)) << 1);\r\n\r\n    using _Cy_t  = int;\r\n    using _UCy_t = unsigned int;\r\n\r\npublic:\r\n    _RNG_REQUIRE_UINTTYPE(subtract_with_carry_engine, _Ty);\r\n\r\n    static_assert(0U < _Sx && _Sx < _Rx && 0 < _Wx && _Wx <= numeric_limits<_Ty>::digits,\r\n        \"invalid template argument for subtract_with_carry_engine\");\r\n\r\n    static constexpr size_t word_size = _Wx;\r\n    static constexpr size_t short_lag = _Sx;\r\n    static constexpr size_t long_lag  = _Rx;\r\n\r\n    using result_type = _Ty;\r\n\r\n    static constexpr uint_least32_t default_seed = 19780503u;\r\n\r\n    subtract_with_carry_engine() {\r\n        seed(0u);\r\n    }\r\n\r\n    explicit subtract_with_carry_engine(_Ty _Xx0) {\r\n        seed(_Xx0);\r\n    }\r\n\r\n    template <class _Seed_seq, _Enable_if_seed_seq_t<_Seed_seq, subtract_with_carry_engine> = 0>\r\n    explicit subtract_with_carry_engine(_Seed_seq& _Seq) {\r\n        seed(_Seq);\r\n    }\r\n\r\n    void seed(_Ty _Value = 0u) { // set initial values from specified seed value\r\n        linear_congruential_engine<uint_least32_t, 40014U, 0U, 2147483563U> _Lc{\r\n            _Value == 0U ? default_seed : static_cast<uint_least32_t>(_Value % 2147483563U)};\r\n\r\n        constexpr int _Kx = _Get_wc();\r\n\r\n        for (size_t _Ix = 0; _Ix < _Rx; ++_Ix) { // pack _Kx words\r\n            this->_Ax[_Ix] = _Lc();\r\n            for (int _Jx = 1; _Jx < _Kx; ++_Jx) {\r\n                this->_Ax[_Ix] |= static_cast<_Ty>(_Lc()) << (32 * _Jx);\r\n            }\r\n        }\r\n\r\n        _Carry     = _Reduce();\r\n        this->_Idx = _Rx;\r\n    }\r\n\r\n    template <class _Seed_seq, _Enable_if_seed_seq_t<_Seed_seq, subtract_with_carry_engine> = 0>\r\n    void seed(_Seed_seq& _Seq) { // reset sequence from seed sequence\r\n        constexpr int _Kx = (8 * sizeof(_Ty) + 31) / 32;\r\n        unsigned long _Arr[_Kx * _Rx];\r\n        _Seq.generate(_STD begin(_Arr), _STD end(_Arr));\r\n\r\n        size_t _Idx0 = 0;\r\n        for (size_t _Ix = 0; _Ix < _Rx; ++_Ix, _Idx0 += _Kx) { // pack _Kx words\r\n            this->_Ax[_Ix] = _Arr[_Idx0];\r\n            for (int _Jx = 1; _Jx < _Kx; ++_Jx) {\r\n                this->_Ax[_Ix] |= static_cast<_Ty>(_Arr[_Idx0 + _Jx]) << (32 * _Jx);\r\n            }\r\n\r\n            if constexpr (_Mx != 0) {\r\n                this->_Ax[_Ix] %= _Mx;\r\n            }\r\n        }\r\n\r\n        _Carry     = _Reduce();\r\n        this->_Idx = _Rx;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Ty(min)() noexcept /* strengthened */ {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr _Ty(max)() noexcept /* strengthened */ {\r\n        return _Mx - 1;\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(\r\n        const subtract_with_carry_engine& _Left, const subtract_with_carry_engine& _Right) noexcept /* strengthened */ {\r\n        return _Left._Equals(_Right) && _Left._Carry == _Right._Carry;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(\r\n        const subtract_with_carry_engine& _Left, const subtract_with_carry_engine& _Right) noexcept /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    _NODISCARD result_type operator()() noexcept /* strengthened */ {\r\n        const auto _Ix = 2 * _Rx <= this->_Idx ? 0 : this->_Idx;\r\n        if (_Ix < _Sx) {\r\n            _Setx(_Ix, this->_Ax[_Ix + 2 * _Rx - _Sx], this->_Ax[_Ix + _Rx]);\r\n        } else if (_Ix < _Rx) {\r\n            _Setx(_Ix, this->_Ax[_Ix - _Sx], this->_Ax[_Ix + _Rx]);\r\n        } else {\r\n            _Setx(_Ix, this->_Ax[_Ix - _Sx], this->_Ax[_Ix - _Rx]);\r\n        }\r\n\r\n        this->_Idx = _Ix + 1;\r\n        return this->_Ax[_Ix];\r\n    }\r\n\r\n    void discard(unsigned long long _Nskip) {\r\n        for (; 0 < _Nskip; --_Nskip) {\r\n            (void) (*this)();\r\n        }\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(\r\n        basic_ostream<_Elem, _Traits>& _Ostr, const subtract_with_carry_engine& _Eng) {\r\n        const auto _Save_flags = _Ostr.flags(ios_base::dec | ios_base::left);\r\n        const auto _Save_fill  = _Ostr.fill(' ');\r\n\r\n        for (size_t _Ix = 0; _Ix < _Rx; ++_Ix) {\r\n            _Ostr << _Eng._At(_Ix) << ' ';\r\n        }\r\n\r\n        _Ostr << _Eng._Carry;\r\n\r\n        _Ostr.flags(_Save_flags);\r\n        _Ostr.fill(_Save_fill);\r\n        return _Ostr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(\r\n        basic_istream<_Elem, _Traits>& _Istr, subtract_with_carry_engine& _Eng) {\r\n        constexpr auto _Nx = long_lag;\r\n        result_type _Buffer[_Nx];\r\n        _Cy_t _Carry_buf;\r\n        const auto _Save_flags = _Istr.flags(ios_base::dec | ios_base::skipws);\r\n        for (auto& _Val : _Buffer) {\r\n            _Istr >> _Val;\r\n        }\r\n\r\n        _Istr >> _Carry_buf;\r\n        if (_Istr) {\r\n            for (size_t _Ix = 0; _Ix < _Nx; ++_Ix) {\r\n                _Eng._Ax[_Ix] = _Buffer[_Ix];\r\n            }\r\n\r\n            _Eng._Carry = _Carry_buf;\r\n            _Eng._Idx   = _Nx;\r\n        } else {\r\n            _Istr.setstate(ios_base::failbit);\r\n        }\r\n\r\n        _Istr.flags(_Save_flags);\r\n        return _Istr;\r\n    }\r\n\r\nprivate:\r\n    void _Setx(size_t _Ix, _Ty _Xis, _Ty _Xir) noexcept { // update _Ax[_Ix] and _Carry\r\n        bool _Underflowed = false;\r\n        _Ty _Newx         = _Xis;\r\n        if (_Newx < _Xir) {\r\n            _Underflowed = true;\r\n        }\r\n\r\n        _Newx -= _Xir;\r\n        if (_Newx < static_cast<_UCy_t>(_Carry)) {\r\n            _Underflowed = true;\r\n        }\r\n\r\n        _Newx -= _Carry;\r\n        if (_Underflowed) { // underflowed, so add _Mx\r\n            _Newx += _Mx;\r\n            _Carry = 1;\r\n        } else {\r\n            _Carry = 0;\r\n        }\r\n\r\n        this->_Ax[_Ix] = _Newx;\r\n    }\r\n\r\n    static constexpr int _Get_wc() noexcept { // compute number of 32-bit words per element\r\n        if constexpr (_Mx == 0) {\r\n            return (8 * sizeof(_Ty) + 31) / 32;\r\n        } else if constexpr (_Mx > (1ULL << 32)) {\r\n            return 2;\r\n        } else {\r\n            return 1;\r\n        }\r\n    }\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4724) // potential mod by 0\r\n    _Cy_t _Reduce() noexcept { // reduce values to allowed range\r\n        if constexpr (_Mx != 0) {\r\n            for (size_t _Ix = 0; _Ix < _Rx; ++_Ix) {\r\n                this->_Ax[_Ix] %= _Mx;\r\n            }\r\n        }\r\n\r\n        return this->_Ax[_Rx - 1] == 0;\r\n    }\r\n#pragma warning(pop)\r\n\r\n    _Cy_t _Carry;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Wx, size_t _Nx, size_t _Mx, size_t _Rx, _Ty _Px, size_t _Ux, _Ty _Dx,\r\n    size_t _Sx, _Ty _Bx, size_t _Tx, _Ty _Cx, size_t _Lx, _Ty _Fx>\r\nclass mersenne_twister_engine : private _Circ_buf<_Ty, _Nx> {\r\nprivate:\r\n    static constexpr unsigned long long _Max = (((1ULL << (_Wx - 1)) - 1) << 1) + 1;\r\n\r\npublic:\r\n    _RNG_REQUIRE_UINTTYPE(mersenne_twister_engine, _Ty);\r\n\r\n    static_assert(0 < _Mx && _Mx <= _Nx && 2U < _Wx && _Rx <= _Wx && _Ux <= _Wx && _Sx <= _Wx && _Tx <= _Wx\r\n                      && _Lx <= _Wx && _Wx <= numeric_limits<_Ty>::digits && _Px <= _Max && _Bx <= _Max && _Cx <= _Max\r\n                      && _Dx <= _Max && _Fx <= _Max,\r\n        \"invalid template argument for mersenne_twister_engine\");\r\n\r\n    using result_type = _Ty;\r\n\r\n    static constexpr size_t word_size              = _Wx;\r\n    static constexpr size_t state_size             = _Nx;\r\n    static constexpr size_t shift_size             = _Mx;\r\n    static constexpr size_t mask_bits              = _Rx;\r\n    static constexpr _Ty xor_mask                  = _Px;\r\n    static constexpr size_t tempering_u            = _Ux;\r\n    static constexpr _Ty tempering_d               = _Dx;\r\n    static constexpr size_t tempering_s            = _Sx;\r\n    static constexpr _Ty tempering_b               = _Bx;\r\n    static constexpr size_t tempering_t            = _Tx;\r\n    static constexpr _Ty tempering_c               = _Cx;\r\n    static constexpr size_t tempering_l            = _Lx;\r\n    static constexpr _Ty initialization_multiplier = _Fx;\r\n\r\n    static constexpr result_type default_seed = 5489U;\r\n\r\n    mersenne_twister_engine() {\r\n        seed(default_seed);\r\n    }\r\n\r\n    explicit mersenne_twister_engine(result_type _Xx0) {\r\n        seed(_Xx0);\r\n    }\r\n\r\n    template <class _Seed_seq, _Enable_if_seed_seq_t<_Seed_seq, mersenne_twister_engine> = 0>\r\n    explicit mersenne_twister_engine(_Seed_seq& _Seq) {\r\n        seed(_Seq);\r\n    }\r\n\r\n    void seed(result_type _Xx0 = default_seed) { // set initial values from specified value\r\n        _Ty _Prev = this->_Ax[0] = _Xx0 & _WMSK;\r\n        for (size_t _Ix = 1; _Ix < _Nx; ++_Ix) {\r\n            _Prev = this->_Ax[_Ix] = (_Ix + _Fx * (_Prev ^ (_Prev >> (_Wx - 2)))) & _WMSK;\r\n        }\r\n\r\n        this->_Idx = _Nx;\r\n    }\r\n\r\n    template <class _Seed_seq, _Enable_if_seed_seq_t<_Seed_seq, mersenne_twister_engine> = 0>\r\n    void seed(_Seed_seq& _Seq) { // reset sequence from seed sequence\r\n        constexpr int _Kx = (_Wx + 31) / 32;\r\n        unsigned long _Arr[_Kx * _Nx];\r\n        _Seq.generate(_STD begin(_Arr), _STD end(_Arr));\r\n\r\n        int _Idx0 = 0;\r\n        _Ty _Sum  = 0;\r\n        for (size_t _Ix = 0; _Ix < _Nx; ++_Ix, _Idx0 += _Kx) { // pack _Kx words\r\n            this->_Ax[_Ix] = static_cast<_Ty>(_Arr[_Idx0]);\r\n            for (int _Jx = 1; _Jx < _Kx; ++_Jx) {\r\n                this->_Ax[_Ix] |= static_cast<_Ty>(_Arr[_Idx0 + _Jx]) << (32 * _Jx);\r\n            }\r\n\r\n            this->_Ax[_Ix] &= _WMSK;\r\n\r\n            if (_Ix == 0) {\r\n                _Sum = this->_Ax[_Ix] >> _Rx;\r\n            } else {\r\n                _Sum |= this->_Ax[_Ix];\r\n            }\r\n        }\r\n\r\n        if (_Sum == 0) {\r\n            this->_Ax[0] = _Ty{1} << (_Wx - 1);\r\n        }\r\n\r\n        this->_Idx = _Nx;\r\n    }\r\n\r\n    _NODISCARD static constexpr result_type(min)() noexcept /* strengthened */ {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr result_type(max)() noexcept /* strengthened */ {\r\n        return _WMSK;\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(\r\n        const mersenne_twister_engine& _Left, const mersenne_twister_engine& _Right) noexcept /* strengthened */ {\r\n        return _Left._Equals(_Right);\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(\r\n        const mersenne_twister_engine& _Left, const mersenne_twister_engine& _Right) noexcept /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _S_Traits>\r\n    friend basic_istream<_Elem, _S_Traits>& operator>>(\r\n        basic_istream<_Elem, _S_Traits>& _Istr, mersenne_twister_engine& _Eng) {\r\n        _Wrap_istream<_Elem, _S_Traits, _Ty> _Gen(_Istr);\r\n\r\n        for (size_t _Ix = 0; _Ix < _Nx; ++_Ix) {\r\n            _Eng._Ax[_Ix] = _Gen() & _WMSK;\r\n        }\r\n\r\n        _Eng._Idx = _Nx;\r\n\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _S_Traits>\r\n    friend basic_ostream<_Elem, _S_Traits>& operator<<(\r\n        basic_ostream<_Elem, _S_Traits>& _Ostr, const mersenne_twister_engine& _Eng) {\r\n        _Ostr << _Eng._At(0);\r\n\r\n        for (size_t _Ix = 1; _Ix < _Nx; ++_Ix) {\r\n            _Ostr << ' ' << _Eng._At(_Ix);\r\n        }\r\n\r\n        return _Ostr;\r\n    }\r\n\r\n    _NODISCARD result_type operator()() {\r\n        if (this->_Idx == _Nx) {\r\n            _Refill_upper();\r\n        } else if (2 * _Nx <= this->_Idx) {\r\n            _Refill_lower();\r\n        }\r\n\r\n        _Ty _Res = this->_Ax[this->_Idx++] & _WMSK;\r\n        _Res ^= (_Res >> _Ux) & _Dx;\r\n        _Res ^= (_Res << _Sx) & _Bx;\r\n        _Res ^= (_Res << _Tx) & _Cx;\r\n        _Res ^= (_Res & _WMSK) >> _Lx;\r\n        return _Res;\r\n    }\r\n\r\n    void discard(unsigned long long _Nskip) {\r\n        for (; 0 < _Nskip; --_Nskip) {\r\n            (void) (*this)();\r\n        }\r\n    }\r\n\r\nprivate:\r\n    _Post_satisfies_(this->_Idx == 0) void _Refill_lower() {\r\n        // compute values for the lower half of the history array\r\n        constexpr size_t _Wrap_bound_one = _Nx - _One_mod_n;\r\n        constexpr size_t _Wrap_bound_m   = _Nx - _M_mod_n;\r\n\r\n        if constexpr (_M_mod_n == 0) {\r\n            for (size_t _Ix = 0; _Ix < _Wrap_bound_one; ++_Ix) { // fill in values\r\n                const _Ty _Tmp = (this->_Ax[_Ix + _Nx] & _HMSK) | (this->_Ax[_Ix + _Nx + _One_mod_n] & _LMSK);\r\n                this->_Ax[_Ix] = (_Tmp >> 1) ^ (_Tmp & 1 ? _Px : 0) ^ this->_Ax[_Ix + _Nx + _M_mod_n];\r\n            }\r\n\r\n            if constexpr (_One_mod_n == 1) { // fill in _Ax[_Nx - 1]\r\n                constexpr size_t _Ix = _Wrap_bound_one;\r\n\r\n                const _Ty _Tmp = (this->_Ax[_Ix + _Nx] & _HMSK) | (this->_Ax[_Ix - _Nx + _One_mod_n] & _LMSK);\r\n                this->_Ax[_Ix] = (_Tmp >> 1) ^ (_Tmp & 1 ? _Px : 0) ^ this->_Ax[_Ix + _Nx + _M_mod_n];\r\n            }\r\n        } else {\r\n            for (size_t _Ix = 0; _Ix < _Wrap_bound_m; ++_Ix) { // fill in lower region\r\n                const _Ty _Tmp = (this->_Ax[_Ix + _Nx] & _HMSK) | (this->_Ax[_Ix + _Nx + _One_mod_n] & _LMSK);\r\n                this->_Ax[_Ix] = (_Tmp >> 1) ^ (_Tmp & 1 ? _Px : 0) ^ this->_Ax[_Ix + _Nx + _M_mod_n];\r\n            }\r\n\r\n            for (size_t _Ix = _Wrap_bound_m; _Ix < _Wrap_bound_one; ++_Ix) {\r\n                // fill in upper region (avoids modulus operation)\r\n                const _Ty _Tmp = (this->_Ax[_Ix + _Nx] & _HMSK) | (this->_Ax[_Ix + _Nx + _One_mod_n] & _LMSK);\r\n                this->_Ax[_Ix] = (_Tmp >> 1) ^ (_Tmp & 1 ? _Px : 0) ^ this->_Ax[_Ix - _Nx + _M_mod_n];\r\n            }\r\n\r\n            if constexpr (_One_mod_n == 1) { // fill in _Ax[_Nx - 1]\r\n                constexpr size_t _Ix = _Wrap_bound_one;\r\n\r\n                const _Ty _Tmp = (this->_Ax[_Ix + _Nx] & _HMSK) | (this->_Ax[_Ix - _Nx + _One_mod_n] & _LMSK);\r\n                this->_Ax[_Ix] = (_Tmp >> 1) ^ (_Tmp & 1 ? _Px : 0) ^ this->_Ax[_Ix - _Nx + _M_mod_n];\r\n            }\r\n        }\r\n\r\n        this->_Idx = 0;\r\n    }\r\n\r\n    void _Refill_upper() { // compute values for the upper half of the history array\r\n        for (size_t _Ix = _Nx; _Ix < 2 * _Nx; ++_Ix) { // fill in values\r\n            const _Ty _Tmp = (this->_Ax[_Ix - _Nx] & _HMSK) | (this->_Ax[_Ix - _Nx + _One_mod_n] & _LMSK);\r\n            this->_Ax[_Ix] = (_Tmp >> 1) ^ (_Tmp & 1 ? _Px : 0) ^ this->_Ax[_Ix - _Nx + _M_mod_n];\r\n        }\r\n    }\r\n\r\n    _Ty _Dxval{_Dx}; // TRANSITION, ABI: _Dxval must be initialized to _Dx but is unused by the current implementation\r\n\r\n    static constexpr _Ty _WMSK = ~((~_Ty{0} << (_Wx - 1)) << 1);\r\n    static constexpr _Ty _HMSK = (_WMSK << _Rx) & _WMSK;\r\n    static constexpr _Ty _LMSK = ~_HMSK & _WMSK;\r\n\r\n    static constexpr int _One_mod_n = 1 % _Nx; // either 0 or 1\r\n    static constexpr int _M_mod_n   = _Mx % _Nx;\r\n};\r\n\r\n_EXPORT_STD template <class _Engine, size_t _Px, size_t _Rx>\r\nclass discard_block_engine {\r\nprivate:\r\n    using _Block_type = conditional_t<_Px <= INT_MAX, int, size_t>; // TRANSITION, ABI: Should always be size_t\r\n\r\npublic:\r\n    static_assert(0 < _Rx && _Rx <= _Px, \"invalid template argument for discard_block_engine\");\r\n\r\n    using result_type = typename _Engine::result_type;\r\n\r\n    static constexpr size_t block_size = _Px;\r\n    static constexpr size_t used_block = _Rx;\r\n\r\n    discard_block_engine() : _Eng(), _Nx(0) {}\r\n\r\n    explicit discard_block_engine(const _Engine& _Ex) : _Eng(_Ex), _Nx(0) {}\r\n\r\n    explicit discard_block_engine(_Engine&& _Ex) : _Eng(_STD move(_Ex)), _Nx(0) {}\r\n\r\n    explicit discard_block_engine(result_type _Xx0) : _Eng(_Xx0), _Nx(0) {}\r\n\r\n    template <class _Seed_seq, _Enable_if_seed_seq_t<_Seed_seq, discard_block_engine, _Engine> = 0>\r\n    explicit discard_block_engine(_Seed_seq& _Seq) : _Eng(_Seq), _Nx(0) {}\r\n\r\n    void seed() {\r\n        _Eng.seed();\r\n        _Nx = 0;\r\n    }\r\n\r\n    void seed(result_type _Xx0) {\r\n        _Eng.seed(_Xx0);\r\n        _Nx = 0;\r\n    }\r\n\r\n    template <class _Seed_seq, _Enable_if_seed_seq_t<_Seed_seq, discard_block_engine> = 0>\r\n    void seed(_Seed_seq& _Seq) {\r\n        _Eng.seed(_Seq);\r\n        _Nx = 0;\r\n    }\r\n\r\n    _NODISCARD const _Engine& base() const noexcept {\r\n        return _Eng;\r\n    }\r\n\r\n    _NODISCARD result_type operator()() {\r\n        if (static_cast<_Block_type>(_Rx) <= _Nx) { // discard values\r\n            while (_Nx++ < static_cast<_Block_type>(_Px)) {\r\n                (void) _Eng();\r\n            }\r\n\r\n            _Nx = 0;\r\n        }\r\n        ++_Nx;\r\n        return _Eng();\r\n    }\r\n\r\n    void discard(unsigned long long _Nskip) {\r\n        for (; 0 < _Nskip; --_Nskip) {\r\n            (void) (*this)();\r\n        }\r\n    }\r\n\r\n    _NODISCARD static constexpr result_type(min)() noexcept /* strengthened */ {\r\n        return (_Engine::min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr result_type(max)() noexcept /* strengthened */ {\r\n        return (_Engine::max) ();\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const discard_block_engine& _Left, const discard_block_engine& _Right) {\r\n        return _Left._Eng == _Right._Eng && _Left._Nx == _Right._Nx;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(const discard_block_engine& _Left, const discard_block_engine& _Right) {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr, discard_block_engine& _Eng) {\r\n        return _Istr >> _Eng._Eng >> _Eng._Nx;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(\r\n        basic_ostream<_Elem, _Traits>& _Ostr, const discard_block_engine& _Eng) {\r\n        return _Ostr << _Eng._Eng << ' ' << _Eng._Nx;\r\n    }\r\n\r\nprivate:\r\n    _Engine _Eng;\r\n    _Block_type _Nx;\r\n};\r\n\r\n_EXPORT_STD template <class _Engine, size_t _Wx, class _UIntType>\r\nclass independent_bits_engine { // independent_bits_engine compound engine\r\npublic:\r\n    _RNG_REQUIRE_UINTTYPE(independent_bits_engine, _UIntType);\r\n\r\n    static_assert(\r\n        0 < _Wx && _Wx <= numeric_limits<_UIntType>::digits, \"invalid template argument for independent_bits_engine\");\r\n\r\n    using result_type = _UIntType;\r\n    using _Eres       = typename _Engine::result_type;\r\n\r\n    independent_bits_engine() {\r\n        _Init();\r\n    }\r\n\r\n    explicit independent_bits_engine(const _Engine& _Ex) : _Eng(_Ex) {\r\n        _Init();\r\n    }\r\n\r\n    explicit independent_bits_engine(_Engine&& _Ex) : _Eng(_STD move(_Ex)) {\r\n        _Init();\r\n    }\r\n\r\n    explicit independent_bits_engine(result_type _Xx0) : _Eng(static_cast<_Eres>(_Xx0)) {\r\n        _Init();\r\n    }\r\n\r\n    template <class _Seed_seq, _Enable_if_seed_seq_t<_Seed_seq, independent_bits_engine, _Engine> = 0>\r\n    explicit independent_bits_engine(_Seed_seq& _Seq) : _Eng(_Seq) {\r\n        _Init();\r\n    }\r\n\r\n    void seed() { // seed engine from default value\r\n        _Eng.seed();\r\n    }\r\n\r\n    void seed(result_type _Xx0) { // seed engine from specified value\r\n        _Eng.seed(static_cast<_Eres>(_Xx0));\r\n    }\r\n\r\n    template <class _Seed_seq, _Enable_if_seed_seq_t<_Seed_seq, independent_bits_engine> = 0>\r\n    void seed(_Seed_seq& _Seq) { // seed engine from seed sequence\r\n        _Eng.seed(_Seq);\r\n    }\r\n\r\n    _NODISCARD const _Engine& base() const noexcept {\r\n        return _Eng;\r\n    }\r\n\r\n    _NODISCARD static constexpr result_type(min)() noexcept /* strengthened */ {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr result_type(max)() noexcept /* strengthened */ {\r\n        return ((result_type{1} << (_Wx - 1)) << 1) - 1;\r\n    }\r\n\r\n    _NODISCARD result_type operator()() {\r\n        result_type _Mask = ((result_type{1} << (_Wx0 - 1)) << 1) - 1;\r\n        _Eres _Val;\r\n\r\n        do { // get a small enough value\r\n            _Val = _Eng() - (_Engine::min) ();\r\n        } while (_Val > _Yx0);\r\n        result_type _Res = static_cast<result_type>(_Val) & _Mask;\r\n\r\n        size_t _Idx = 1;\r\n        for (; _Idx < _Nx0; ++_Idx) { // pack _Wx0-bit values\r\n            do {\r\n                _Val = _Eng() - (_Engine::min) ();\r\n            } while (_Val > _Yx0);\r\n            _Res = (_Res << _Wx0) | (static_cast<result_type>(_Val) & _Mask);\r\n        }\r\n\r\n        _Mask = (_Mask << 1) | 1;\r\n        for (; _Idx < _Nx; ++_Idx) { // pack _Wx0+1-bit values\r\n            do {\r\n                _Val = _Eng() - (_Engine::min) ();\r\n            } while (_Val > _Yx1);\r\n            _Res = (_Res << (_Wx0 + 1)) | (static_cast<result_type>(_Val) & _Mask);\r\n        }\r\n        return _Res;\r\n    }\r\n\r\n    void discard(unsigned long long _Nskip) { // discard _Nskip elements\r\n        for (; 0 < _Nskip; --_Nskip) {\r\n            (void) (*this)();\r\n        }\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const independent_bits_engine& _Left, const independent_bits_engine& _Right) {\r\n        return _Left.base() == _Right.base();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(const independent_bits_engine& _Left, const independent_bits_engine& _Right) {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        independent_bits_engine& _Eng) { // read state from _Istr\r\n        return _Istr >> _Eng._Eng;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const independent_bits_engine& _Eng) { // write state to _Ostr\r\n        return _Ostr << _Eng._Eng;\r\n    }\r\n\r\nprivate:\r\n    void _Init() { // compute values for operator()\r\n        size_t _Mx = 0;\r\n        _Eres _Rx  = (_Engine::max) () - (_Engine::min) () + 1;\r\n\r\n        _Eres _Tmp = _Rx;\r\n        if (_Tmp == 0) { // all bits used, make _Rx finite\r\n            _Mx = 1;\r\n            --_Tmp;\r\n        }\r\n        for (; 1 < _Tmp; _Tmp >>= 1) {\r\n            ++_Mx; // compute _Mx = floor(log2(_Rx))\r\n        }\r\n\r\n        for (size_t _Nfix = 0;; ++_Nfix) { // compute consistent set of parameters\r\n            _Nx  = (_Wx + _Mx - 1) / _Mx + _Nfix; // trial _Nx\r\n            _Wx0 = _Wx / _Nx;\r\n            _Nx0 = _Nx - _Wx % _Nx;\r\n            if (_Wx0 < sizeof(_Eres) * CHAR_BIT) {\r\n                _Yx0 = (_Rx >> _Wx0) << _Wx0;\r\n                _Yx1 = (((_Rx >> _Wx0) >> 1) << _Wx0) << 1;\r\n            } else {\r\n                _Yx0 = 0;\r\n                _Yx1 = 0;\r\n            }\r\n\r\n            if (_Nfix == 1 || _Rx - _Yx0 <= _Yx0 / _Nx) {\r\n                break; // also works if _Rx == 0 (_Mx == all bits)\r\n            }\r\n        }\r\n        --_Yx0;\r\n        --_Yx1;\r\n    }\r\n\r\n    _Engine _Eng; // the stored engine\r\n    size_t _Nx0; // number of smaller packing words\r\n    size_t _Nx; // total number of packing words\r\n    size_t _Wx0; // bits per smaller packing word\r\n    _Eres _Yx0; // max value for smaller packing word\r\n    _Eres _Yx1; // max value for larger packing word\r\n};\r\n\r\n_EXPORT_STD template <class _Engine, size_t _Kx>\r\nclass shuffle_order_engine { // shuffle_order_engine compound engine\r\npublic:\r\n    static_assert(0 < _Kx, \"invalid template argument for shuffle_order_engine\");\r\n\r\n    using result_type = typename _Engine::result_type;\r\n\r\n    static constexpr size_t table_size = _Kx;\r\n\r\n    shuffle_order_engine() {\r\n        _Init();\r\n    }\r\n\r\n    explicit shuffle_order_engine(const _Engine& _Ex) : _Eng(_Ex) {\r\n        _Init();\r\n    }\r\n\r\n    explicit shuffle_order_engine(_Engine&& _Ex) : _Eng(_STD move(_Ex)) {\r\n        _Init();\r\n    }\r\n\r\n    explicit shuffle_order_engine(result_type _Xx0) : _Eng(_Xx0) {\r\n        _Init();\r\n    }\r\n\r\n    template <class _Seed_seq, _Enable_if_seed_seq_t<_Seed_seq, shuffle_order_engine, _Engine> = 0>\r\n    explicit shuffle_order_engine(_Seed_seq& _Seq) : _Eng(_Seq) {\r\n        _Init();\r\n    }\r\n\r\n    void seed() { // seed engine from default value\r\n        _Eng.seed();\r\n        _Init();\r\n    }\r\n\r\n    void seed(result_type _Xx0) { // seed engine from specified value\r\n        _Eng.seed(_Xx0);\r\n        _Init();\r\n    }\r\n\r\n    template <class _Seed_seq, _Enable_if_seed_seq_t<_Seed_seq, shuffle_order_engine> = 0>\r\n    void seed(_Seed_seq& _Seq) { // seed engine from seed sequence\r\n        _Eng.seed(_Seq);\r\n        _Init();\r\n    }\r\n\r\n    _NODISCARD const _Engine& base() const noexcept {\r\n        return _Eng;\r\n    }\r\n\r\n    _NODISCARD static constexpr result_type(min)() noexcept /* strengthened */ {\r\n        return (_Engine::min) ();\r\n    }\r\n\r\n    _NODISCARD static constexpr result_type(max)() noexcept /* strengthened */ {\r\n        return (_Engine::max) ();\r\n    }\r\n\r\n    _NODISCARD result_type operator()() {\r\n        size_t _Idx = static_cast<size_t>(static_cast<double>(_Yx - (_Eng.min)()) * _Scale);\r\n\r\n        _Yx        = _Arr[_Idx];\r\n        _Arr[_Idx] = _Eng();\r\n        return _Yx;\r\n    }\r\n\r\n    void discard(unsigned long long _Nskip) { // discard _Nskip elements\r\n        for (; 0 < _Nskip; --_Nskip) {\r\n            (void) (*this)();\r\n        }\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const shuffle_order_engine& _Left, const shuffle_order_engine& _Right) {\r\n        return _Left.base() == _Right.base();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(const shuffle_order_engine& _Left, const shuffle_order_engine& _Right) {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(\r\n        basic_istream<_Elem, _Traits>& _Istr, shuffle_order_engine& _Eng) { // read state from _Istr\r\n        _Istr >> _Eng._Eng;\r\n\r\n        for (auto& _Val : _Eng._Arr) {\r\n            _Istr >> _Val;\r\n        }\r\n\r\n        return _Istr >> _Eng._Yx;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(\r\n        basic_ostream<_Elem, _Traits>& _Ostr, const shuffle_order_engine& _Eng) { // write state to _Ostr\r\n        _Ostr << _Eng._Eng;\r\n\r\n        for (const auto& _Val : _Eng._Arr) {\r\n            _Ostr << ' ' << _Val;\r\n        }\r\n\r\n        return _Ostr << ' ' << _Eng._Yx;\r\n    }\r\n\r\nprivate:\r\n    void _Init() { // compute values for operator()\r\n        for (auto& _Val : _Arr) {\r\n            _Val = _Eng();\r\n        }\r\n\r\n        _Yx = _Eng();\r\n        _Scale =\r\n            static_cast<double>(_Kx) / (static_cast<double>((_Eng.max)()) - static_cast<double>((_Eng.min)()) + 1.0);\r\n    }\r\n\r\n    _Engine _Eng; // the stored engine\r\n    result_type _Arr[_Kx];\r\n    result_type _Yx;\r\n    double _Scale;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = int>\r\nclass uniform_int_distribution { // uniform integer distribution\r\npublic:\r\n    _RNG_REQUIRE_INTTYPE(uniform_int_distribution, _Ty);\r\n\r\n    using result_type = _Ty;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = uniform_int_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(0, (numeric_limits<_Ty>::max)());\r\n        }\r\n\r\n        explicit param_type(result_type _Min0, result_type _Max0 = (numeric_limits<_Ty>::max)()) noexcept\r\n        /* strengthened */ {\r\n            _Init(_Min0, _Max0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Min == _Right._Min && _Left._Max == _Right._Max;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD result_type a() const noexcept /* strengthened */ {\r\n            return _Min;\r\n        }\r\n\r\n        _NODISCARD result_type b() const noexcept /* strengthened */ {\r\n            return _Max;\r\n        }\r\n\r\n        void _Init(_Ty _Min0, _Ty _Max0) noexcept { // set internal state\r\n            _STL_ASSERT(_Min0 <= _Max0, \"invalid min and max arguments for uniform_int_distribution\");\r\n            _Min = _Min0;\r\n            _Max = _Max0;\r\n        }\r\n\r\n        result_type _Min;\r\n        result_type _Max;\r\n    };\r\n\r\n    uniform_int_distribution() noexcept // strengthened\r\n        : _Par(0, (numeric_limits<_Ty>::max)()) {}\r\n\r\n    explicit uniform_int_distribution(_Ty _Min0, _Ty _Max0 = (numeric_limits<_Ty>::max)()) noexcept // strengthened\r\n        : _Par(_Min0, _Max0) {}\r\n\r\n    explicit uniform_int_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0) {}\r\n\r\n    _NODISCARD result_type a() const noexcept /* strengthened */ {\r\n        return _Par.a();\r\n    }\r\n\r\n    _NODISCARD result_type b() const noexcept /* strengthened */ {\r\n        return _Par.b();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ {\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ {\r\n        return _Par._Min;\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ {\r\n        return _Par._Max;\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {}\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par._Min, _Par._Max);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0._Min, _Par0._Max);\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(\r\n        basic_istream<_Elem, _Traits>& _Istr, uniform_int_distribution& _Dist) {\r\n        uniform_int_distribution::result_type _Min0;\r\n        uniform_int_distribution::result_type _Max0;\r\n        _Istr >> _Min0 >> _Max0;\r\n        _Dist._Par._Init(_Min0, _Max0);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(\r\n        basic_ostream<_Elem, _Traits>& _Ostr, const uniform_int_distribution& _Dist) {\r\n        return _Ostr << _Dist._Par._Min << ' ' << _Dist._Par._Max;\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(\r\n        const uniform_int_distribution& _Left, const uniform_int_distribution& _Right) noexcept /* strengthened */ {\r\n        return _Left._Par == _Right._Par;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(\r\n        const uniform_int_distribution& _Left, const uniform_int_distribution& _Right) noexcept /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\nprivate:\r\n    using _Uty = make_unsigned_t<_Ty>;\r\n\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, _Ty _Min, _Ty _Max) const { // compute next value in range [_Min, _Max]\r\n        _Rng_from_urng_v2<_Uty, _Engine> _Generator(_Eng);\r\n\r\n        const _Uty _Umin = _Adjust(static_cast<_Uty>(_Min));\r\n        const _Uty _Umax = _Adjust(static_cast<_Uty>(_Max));\r\n\r\n        _Uty _Uret;\r\n\r\n        if (_Umax - _Umin == static_cast<_Uty>(-1)) {\r\n            _Uret = static_cast<_Uty>(_Generator._Get_all_bits());\r\n        } else {\r\n            _Uret = static_cast<_Uty>(_Generator(static_cast<_Uty>(_Umax - _Umin + 1)));\r\n        }\r\n\r\n        return static_cast<_Ty>(_Adjust(static_cast<_Uty>(_Uret + _Umin)));\r\n    }\r\n\r\n    static _Uty _Adjust(_Uty _Uval) noexcept { // convert signed ranges to unsigned ranges and vice versa\r\n        if constexpr (is_signed_v<_Ty>) {\r\n            constexpr _Uty _Adjuster = (static_cast<_Uty>(-1) >> 1) + 1; // 2^(N-1)\r\n            return static_cast<_Uty>(_Uval ^ _Adjuster);\r\n        } else { // _Ty is already unsigned, do nothing\r\n            return _Uval;\r\n        }\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\n_EXPORT_STD class bernoulli_distribution { // class for bernoulli distribution\r\npublic:\r\n    using result_type = bool;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = bernoulli_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(0.5);\r\n        }\r\n\r\n        explicit param_type(double _Px0) noexcept /* strengthened */ {\r\n            _Init(_Px0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Px == _Right._Px;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD double p() const noexcept /* strengthened */ {\r\n            return _Px;\r\n        }\r\n\r\n        void _Init(double _Px0) noexcept { // set internal state\r\n            _STL_ASSERT(0.0 <= _Px0 && _Px0 <= 1.0, \"invalid probability argument for bernoulli_distribution\");\r\n\r\n            _Px = _Px0;\r\n        }\r\n\r\n        double _Px;\r\n    };\r\n\r\n    bernoulli_distribution() noexcept // strengthened\r\n        : _Par(0.5) {}\r\n\r\n    explicit bernoulli_distribution(double _Px0) noexcept // strengthened\r\n        : _Par(_Px0) {}\r\n\r\n    explicit bernoulli_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0) {}\r\n\r\n    _NODISCARD double p() const noexcept /* strengthened */ {\r\n        return _Par.p();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ { // get smallest possible result\r\n        return false;\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ { // get largest possible result\r\n        return true;\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(\r\n        const bernoulli_distribution& _Left, const bernoulli_distribution& _Right) noexcept /* strengthened */ {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(\r\n        const bernoulli_distribution& _Left, const bernoulli_distribution& _Right) noexcept /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        bernoulli_distribution& _Dist) { // read state from _Istr\r\n        double _Px0;\r\n        _In(_Istr, _Px0);\r\n        _Dist._Par._Init(_Px0);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const bernoulli_distribution& _Dist) { // write state to _Ostr\r\n        _Out(_Ostr, _Dist._Par._Px);\r\n        return _Ostr;\r\n    }\r\n\r\nprivate:\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, const param_type& _Par0) const {\r\n        return _Nrand_impl<double>(_Eng) < _Par0._Px;\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\n// Returns smallest _Flt such that static_cast<_Ty>(_Result) > _Val.\r\n// First truncate to largest _Flt <= _Val, then add ceil(ulp).\r\n\r\ntemplate <class _Flt, class _Ty>\r\n_NODISCARD _Flt _Float_upper_bound(_Ty _Val) noexcept {\r\n    static_assert(is_unsigned_v<_Ty> && is_integral_v<_Ty> && is_floating_point_v<_Flt>,\r\n        \"invalid template argument for _Float_upper_bound\");\r\n    constexpr auto _Ty_digits  = numeric_limits<_Ty>::digits;\r\n    constexpr auto _Flt_digits = numeric_limits<_Flt>::digits;\r\n    using _Ty_32or64           = conditional_t<_Ty_digits <= 32, uint32_t, uint64_t>;\r\n\r\n    if constexpr (_Ty_digits <= _Flt_digits) {\r\n        return static_cast<_Flt>(_Val) + _Flt{1};\r\n    } else {\r\n#pragma warning(push)\r\n#pragma warning(disable : 4146 4293) // unary minus of unsigned, negative shift\r\n        constexpr auto _Mask = static_cast<_Ty>(-1) << (_Ty_digits - _Flt_digits);\r\n#ifdef _M_CEE_PURE\r\n        constexpr auto _Ty_32or64_digits = numeric_limits<_Ty_32or64>::digits;\r\n        const auto _Log_plus1            = _Ty_32or64_digits - _Countl_zero(static_cast<_Ty_32or64>(_Val | _Ty{1}));\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n        const auto _Log_plus1 = _Bit_scan_reverse(static_cast<_Ty_32or64>(_Val | _Ty{1}));\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n        const auto _Shifted_mask = _Mask >> (_Ty_digits - _Log_plus1);\r\n        const auto _Ceil_ulp     = _Shifted_mask & -_Shifted_mask;\r\n        _Val &= _Shifted_mask;\r\n        if (_Val == _Mask) {\r\n            // integer add would overflow\r\n            constexpr auto _Big_ulp = static_cast<_Flt>(_Mask & -_Mask);\r\n            return static_cast<_Flt>(_Val) + _Big_ulp;\r\n        } else {\r\n            return static_cast<_Flt>(_Val + _Ceil_ulp);\r\n        }\r\n#pragma warning(pop)\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty = int>\r\nclass geometric_distribution { // geometric distribution\r\npublic:\r\n    using _Ty1 = double;\r\n\r\n    using result_type = _Ty;\r\n\r\n    _RNG_REQUIRE_INTTYPE(geometric_distribution, _Ty);\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = geometric_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(_Ty1(0.5));\r\n        }\r\n\r\n        explicit param_type(_Ty1 _Px0) noexcept /* strengthened */ {\r\n            _Init(_Px0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Px == _Right._Px;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD _Ty1 p() const noexcept /* strengthened */ {\r\n            return _Px;\r\n        }\r\n\r\n        void _Init(_Ty1 _Px0) noexcept { // initialize\r\n            _STL_ASSERT(0.0 < _Px0 && _Px0 < 1.0, \"invalid probability argument for geometric_distribution\");\r\n            _Px      = _Px0;\r\n            _Log_1_p = _CSTD log(1 - _Px);\r\n        }\r\n\r\n        _Ty1 _Px;\r\n        _Ty1 _Log_1_p;\r\n    };\r\n\r\n    geometric_distribution() noexcept // strengthened\r\n        : _Par(_Ty1(0.5)) {}\r\n\r\n    explicit geometric_distribution(_Ty1 _Px0) noexcept // strengthened\r\n        : _Par(_Px0) {}\r\n\r\n    explicit geometric_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0) {}\r\n\r\n    _NODISCARD _Ty1 p() const noexcept /* strengthened */ {\r\n        return _Par.p();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ { // get smallest possible result\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ { // get largest possible result\r\n        return (numeric_limits<result_type>::max)();\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(\r\n        const geometric_distribution& _Left, const geometric_distribution& _Right) noexcept /* strengthened */ {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(\r\n        const geometric_distribution& _Left, const geometric_distribution& _Right) noexcept /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        geometric_distribution& _Dist) { // read state from _Istr\r\n        geometric_distribution::_Ty1 _Px0;\r\n        _In(_Istr, _Px0);\r\n        _Dist._Par._Init(_Px0);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const geometric_distribution& _Dist) { // write state to _Ostr\r\n        _Out(_Ostr, _Dist._Par._Px);\r\n        return _Ostr;\r\n    }\r\n\r\nprivate:\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, const param_type& _Par0) const {\r\n        using _Uty = make_unsigned_t<_Ty>;\r\n        constexpr auto _Ty_max{(numeric_limits<_Ty>::max)()};\r\n        const auto _Ty1_max{_Float_upper_bound<_Ty1>(static_cast<_Uty>(_Ty_max))};\r\n\r\n        _Ty1 _Val;\r\n        do {\r\n            _Val = _CSTD log(_Nrand_impl<_Ty1>(_Eng)) / _Par0._Log_1_p;\r\n        } while (_Val >= _Ty1_max);\r\n        return static_cast<_Ty>(_Val);\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\ntemplate <class _Ty = int>\r\nclass _Small_poisson_distribution { // poisson distribution with small mean\r\npublic:\r\n    using _Ty1 = double;\r\n\r\n    template <class _Engine>\r\n    _NODISCARD _Ty operator()(_Engine& _Eng) const {\r\n        _Ty1 _Val = 1.0;\r\n        for (_Ty _Res = 0;; ++_Res) { // count repetitions\r\n            _Val *= _Nrand_impl<_Ty1>(_Eng);\r\n            if (_Val <= _Gx0) {\r\n                return _Res;\r\n            }\r\n        }\r\n    }\r\n\r\n    void _Init(const _Ty1& _Mean0) noexcept { // set internal state\r\n        _Gx0 = _CSTD exp(-_Mean0);\r\n    }\r\n\r\nprivate:\r\n    _Ty1 _Gx0 = 0.0;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = int>\r\nclass poisson_distribution { // poisson distribution\r\npublic:\r\n    using _Ty1 = double;\r\n\r\n    using result_type = _Ty;\r\n\r\n    _RNG_REQUIRE_INTTYPE(poisson_distribution, _Ty);\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = poisson_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(_Ty1(1));\r\n        }\r\n\r\n        explicit param_type(_Ty1 _Mean0) noexcept /* strengthened */ {\r\n            _Init(_Mean0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Mean == _Right._Mean;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD _Ty1 mean() const noexcept /* strengthened */ {\r\n            return _Mean;\r\n        }\r\n\r\n        static constexpr double _Small_threshold = 12.0;\r\n\r\n        void _Init(_Ty1 _Mean0) noexcept { // set internal state\r\n            _STL_ASSERT(0.0 < _Mean0, \"invalid mean argument for poisson_distribution\");\r\n            _Mean = _Mean0;\r\n            if (_Mean0 < _Small_threshold) {\r\n                _Small._Init(_Mean0);\r\n                return;\r\n            }\r\n            _Sqrt = _CSTD sqrt(2.0 * _Mean0);\r\n            _Logm = _CSTD log(_Mean0);\r\n            _Gx1  = _Mean0 * _Logm - _STD lgamma(_Mean0 + 1.0);\r\n        }\r\n\r\n        _Ty1 _Mean = 0.0;\r\n        _Ty1 _Sqrt = 0.0;\r\n        _Ty1 _Logm = 0.0;\r\n        _Ty1 _Gx1  = 0.0;\r\n\r\n        _Small_poisson_distribution<_Ty> _Small;\r\n    };\r\n\r\n    poisson_distribution() noexcept // strengthened\r\n        : _Par(_Ty1(1)) {}\r\n\r\n    explicit poisson_distribution(_Ty1 _Mean0) noexcept // strengthened\r\n        : _Par(_Mean0) {}\r\n\r\n    explicit poisson_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0) {}\r\n\r\n    _NODISCARD _Ty1 mean() const noexcept /* strengthened */ {\r\n        return _Par.mean();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ { // get smallest possible result\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ { // get largest possible result\r\n        return (numeric_limits<result_type>::max)();\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const poisson_distribution& _Left, const poisson_distribution& _Right) noexcept\r\n    /* strengthened */ {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(const poisson_distribution& _Left, const poisson_distribution& _Right) noexcept\r\n    /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        poisson_distribution& _Dist) { // read state from _Istr\r\n        poisson_distribution::_Ty1 _Mean0;\r\n        _In(_Istr, _Mean0);\r\n        _Dist._Par._Init(_Mean0);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const poisson_distribution& _Dist) { // write state to _Ostr\r\n        _Out(_Ostr, _Dist._Par._Mean);\r\n        return _Ostr;\r\n    }\r\n\r\nprivate:\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, const param_type& _Par0) const {\r\n        if (_Par0._Mean < param_type::_Small_threshold) {\r\n            return _Par0._Small(_Eng);\r\n        }\r\n\r\n        for (;;) { // generate and reject\r\n            using _Uty = make_unsigned_t<_Ty>;\r\n            constexpr auto _Ty_max{(numeric_limits<_Ty>::max)()};\r\n            const auto _Ty1_max{_Float_upper_bound<_Ty1>(static_cast<_Uty>(_Ty_max))};\r\n\r\n            _Ty _Res;\r\n            _Ty1 _Yx;\r\n            for (;;) { // generate a tentative value\r\n                _Yx = static_cast<_Ty1>(_CSTD tan(_Pi_val * _Nrand_impl<_Ty1>(_Eng)));\r\n                const _Ty1 _Mx{_Par0._Sqrt * _Yx + _Par0._Mean};\r\n                if (0.0 <= _Mx && _Mx < _Ty1_max) {\r\n                    _Res = static_cast<_Ty>(_Mx);\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (_Nrand_impl<_Ty1>(_Eng)\r\n                <= 0.9 * (1.0 + _Yx * _Yx) * _CSTD exp(_Res * _Par0._Logm - _STD lgamma(_Res + 1.0) - _Par0._Gx1)) {\r\n                return _Res;\r\n            }\r\n        }\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = int>\r\nclass binomial_distribution { // binomial distribution\r\npublic:\r\n    using _Ty1 = double;\r\n\r\n    using result_type = _Ty;\r\n\r\n    _RNG_REQUIRE_INTTYPE(binomial_distribution, _Ty);\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = binomial_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(1, _Ty1(0.5));\r\n        }\r\n\r\n        explicit param_type(_Ty _Tx0, _Ty1 _Px0 = _Ty1(0.5)) noexcept /* strengthened */ {\r\n            _Init(_Tx0, _Px0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Tx == _Right._Tx && _Left._Px == _Right._Px;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD _Ty t() const noexcept /* strengthened */ {\r\n            return _Tx;\r\n        }\r\n\r\n        _NODISCARD _Ty1 p() const noexcept /* strengthened */ {\r\n            return _Px;\r\n        }\r\n\r\n        void _Init(_Ty _Tx0, _Ty1 _Px0) noexcept { // initialize\r\n            _STL_ASSERT(0.0 <= _Tx0, \"invalid max argument for binomial_distribution\");\r\n            _STL_ASSERT(0.0 <= _Px0 && _Px0 <= 1.0, \"invalid probability argument for binomial_distribution\");\r\n            _Tx    = _Tx0;\r\n            _Px    = _Px0;\r\n            _Pp    = _Px < 0.5 ? _Px : (1.0 - _Px);\r\n            _Mean  = _Tx * _Pp;\r\n            _Gx1   = _STD lgamma(_Tx + 1.0);\r\n            _Sqrt  = _CSTD sqrt(2 * _Mean * (1 - _Pp));\r\n            _Logp  = _CSTD log(_Pp);\r\n            _Logp1 = _CSTD log(1.0 - _Pp);\r\n            _Small._Init(_Mean);\r\n        }\r\n\r\n        _Ty _Tx;\r\n        _Ty1 _Px;\r\n        _Ty1 _Pp;\r\n        _Ty1 _Mean;\r\n        _Ty1 _Gx1;\r\n        _Ty1 _Sqrt;\r\n        _Ty1 _Logp;\r\n        _Ty1 _Logp1;\r\n\r\n        _Small_poisson_distribution<_Ty> _Small; // TRANSITION, ABI: unused\r\n    };\r\n\r\n    binomial_distribution() noexcept // strengthened\r\n        : _Par(1, _Ty1(0.5)) {}\r\n\r\n    explicit binomial_distribution(_Ty _Tx0, _Ty1 _Px0 = _Ty1(0.5)) noexcept // strengthened\r\n        : _Par(_Tx0, _Px0) {}\r\n\r\n    explicit binomial_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0) {}\r\n\r\n    _NODISCARD _Ty t() const noexcept /* strengthened */ {\r\n        return _Par.t();\r\n    }\r\n\r\n    _NODISCARD _Ty1 p() const noexcept /* strengthened */ {\r\n        return _Par.p();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ { // get smallest possible result\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ { // get largest possible result\r\n        return _Par.t();\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const binomial_distribution& _Left, const binomial_distribution& _Right) noexcept\r\n    /* strengthened */ {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(const binomial_distribution& _Left, const binomial_distribution& _Right) noexcept\r\n    /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        binomial_distribution& _Dist) { // read state from _Istr\r\n        binomial_distribution::result_type _Tx0;\r\n        binomial_distribution::_Ty1 _Px0;\r\n        _In(_Istr, _Px0);\r\n        _In(_Istr, _Tx0);\r\n        _Dist._Par._Init(_Tx0, _Px0);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const binomial_distribution& _Dist) { // write state to _Ostr\r\n        _Out(_Ostr, _Dist._Par._Px);\r\n        _Out(_Ostr, _Dist._Par._Tx);\r\n        return _Ostr;\r\n    }\r\n\r\nprivate:\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, const param_type& _Par0) const {\r\n        // Press et al., Numerical Recipes in C, 2nd ed., pp 295-296.\r\n        _Ty _Res;\r\n        if (_Par0._Tx < 25) { // generate directly\r\n            _Res = 0;\r\n            for (_Ty _Ix = 0; _Ix < _Par0._Tx; ++_Ix) {\r\n                if (_Nrand_impl<_Ty1>(_Eng) < _Par0._Px) {\r\n                    ++_Res;\r\n                }\r\n            }\r\n\r\n            return _Res;\r\n        } else if (_Par0._Mean < 1.0) {\r\n            // Events are rare, use waiting time method (Luc Devroye, Non-Uniform Random Variate Generation, p. 525).\r\n            const _Ty1 _Rand = _Nrand_impl<_Ty1>(_Eng);\r\n\r\n            // The exit condition is log(1 - _Rand)/t < log(1-p), which is equivalent to _Rand > 1 - (1-p)^t. If\r\n            // we have a cheap upper bound for 1-(1-p)^t, we can exit early without having to call log. We use two\r\n            // such bounds, one that is tight for mean ~0 and another for mean ~1. In the first case, Bernoulli's\r\n            // inequality gives -1+p*t >= -(1-p)^t, so 1 - (1-p)^t <= p*t = mean. For the other bound, 1-(1-p)^t =\r\n            // 1-(1-p)(1-mean/t)^(t-1) <= 1-(1-p)(1-1/t)^(t-1) <= 1-(1-p)/e.\r\n            const _Ty1 _Ub =\r\n                (_STD min) (_Par0._Mean, _Ty1{3.678794411714423216e-1} * _Par0._Pp + _Ty1{6.32120558828557678e-1});\r\n            if (_Rand > _Ub) {\r\n                _Res = _Ty{0};\r\n            } else {\r\n                _Ty _Denom = _Par0._Tx;\r\n                _Ty1 _Sum  = _CSTD log(_Ty1{1.0} - _Rand) / _Denom;\r\n                while (_Sum >= _Par0._Logp1 && --_Denom != 0) {\r\n                    _Sum += _CSTD log(_Ty1{1.0} - _Nrand_impl<_Ty1>(_Eng)) / _Denom;\r\n                }\r\n                _Res = static_cast<_Ty>(_Par0._Tx - _Denom);\r\n            }\r\n        } else { // no shortcuts\r\n            using _Uty = make_unsigned_t<_Ty>;\r\n            const auto _Ty1_Tx{_Float_upper_bound<_Ty1>(static_cast<_Uty>(_Par0._Tx))};\r\n\r\n            for (;;) { // generate and reject\r\n                _Ty1 _Yx;\r\n                for (;;) { // generate a tentative value\r\n                    _Yx = static_cast<_Ty1>(_CSTD tan(_Pi_val * _Nrand_impl<_Ty1>(_Eng)));\r\n                    const _Ty1 _Mx{_Par0._Sqrt * _Yx + _Par0._Mean};\r\n                    if (0.0 <= _Mx && _Mx < _Ty1_Tx) {\r\n                        _Res = static_cast<_Ty>(_Mx);\r\n                        break;\r\n                    }\r\n                }\r\n                if (_Nrand_impl<_Ty1>(_Eng)\r\n                    <= 1.2 * _Par0._Sqrt * (1.0 + _Yx * _Yx)\r\n                           * _CSTD exp(_Par0._Gx1 - _STD lgamma(_Res + 1.0) - _STD lgamma(_Par0._Tx - _Res + 1.0)\r\n                                       + _Res * _Par0._Logp + (_Par0._Tx - _Res) * _Par0._Logp1)) {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        return _Par0._Px == _Par0._Pp ? _Res : static_cast<_Ty>(_Par0._Tx - _Res);\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = double>\r\nclass uniform_real_distribution { // uniform real distribution\r\npublic:\r\n    _RNG_REQUIRE_REALTYPE(uniform_real_distribution, _Ty);\r\n\r\n    using result_type = _Ty;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = uniform_real_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(_Ty{0}, _Ty{1});\r\n        }\r\n\r\n        explicit param_type(_Ty _Min0, _Ty _Max0 = _Ty{1}) noexcept /* strengthened */ {\r\n            _Init(_Min0, _Max0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Min == _Right._Min && _Left._Max == _Right._Max;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD result_type a() const noexcept /* strengthened */ {\r\n            return _Min;\r\n        }\r\n\r\n        _NODISCARD result_type b() const noexcept /* strengthened */ {\r\n            return _Max;\r\n        }\r\n\r\n        void _Init(_Ty _Min0, _Ty _Max0) noexcept { // set internal state\r\n            _STL_ASSERT(_Min0 <= _Max0 && (0 <= _Min0 || _Max0 <= _Min0 + (numeric_limits<_Ty>::max)()),\r\n                \"invalid min and max arguments for uniform_real_distribution\");\r\n            _Min = _Min0;\r\n            _Max = _Max0;\r\n        }\r\n\r\n        result_type _Min;\r\n        result_type _Max;\r\n    };\r\n\r\n    uniform_real_distribution() noexcept // strengthened\r\n        : _Par(_Ty{0}, _Ty{1}) {}\r\n\r\n    explicit uniform_real_distribution(_Ty _Min0, _Ty _Max0 = _Ty{1}) noexcept // strengthened\r\n        : _Par(_Min0, _Max0) {}\r\n\r\n    explicit uniform_real_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0) {}\r\n\r\n    _NODISCARD result_type a() const noexcept /* strengthened */ {\r\n        return _Par.a();\r\n    }\r\n\r\n    _NODISCARD result_type b() const noexcept /* strengthened */ {\r\n        return _Par.b();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ {\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ {\r\n        return _Par._Min;\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ {\r\n        return _Par._Max;\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {}\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(\r\n        basic_istream<_Elem, _Traits>& _Istr, uniform_real_distribution& _Dist) {\r\n        return _Dist._Read(_Istr);\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(\r\n        basic_ostream<_Elem, _Traits>& _Ostr, const uniform_real_distribution& _Dist) {\r\n        return _Dist._Write(_Ostr);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(\r\n        const uniform_real_distribution& _Left, const uniform_real_distribution& _Right) noexcept /* strengthened */ {\r\n        return _Left._Par == _Right._Par;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(\r\n        const uniform_real_distribution& _Left, const uniform_real_distribution& _Right) noexcept /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\nprivate:\r\n    template <class _Elem, class _Traits>\r\n    basic_istream<_Elem, _Traits>& _Read(basic_istream<_Elem, _Traits>& _Istr) { // read state from _Istr\r\n        _Ty _Min0;\r\n        _Ty _Max0;\r\n        _In(_Istr, _Min0);\r\n        _In(_Istr, _Max0);\r\n        _Par._Init(_Min0, _Max0);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    basic_ostream<_Elem, _Traits>& _Write(basic_ostream<_Elem, _Traits>& _Ostr) const { // write state to _Ostr\r\n        _Out(_Ostr, _Par._Min);\r\n        _Out(_Ostr, _Par._Max);\r\n        return _Ostr;\r\n    }\r\n\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, const param_type& _Par0) const {\r\n        return _Nrand_impl<_Ty>(_Eng) * (_Par0._Max - _Par0._Min) + _Par0._Min;\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = double>\r\nclass exponential_distribution { // exponential distribution\r\npublic:\r\n    _RNG_REQUIRE_REALTYPE(exponential_distribution, _Ty);\r\n\r\n    using result_type = _Ty;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = exponential_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(_Ty{1});\r\n        }\r\n\r\n        explicit param_type(_Ty _Lambda0) noexcept /* strengthened */ {\r\n            _Init(_Lambda0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Lambda == _Right._Lambda;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD _Ty lambda() const noexcept /* strengthened */ {\r\n            return _Lambda;\r\n        }\r\n\r\n        void _Init(_Ty _Lambda0) noexcept { // set internal state\r\n            _STL_ASSERT(0.0 < _Lambda0, \"invalid lambda argument for exponential_distribution\");\r\n            _Lambda = _Lambda0;\r\n        }\r\n\r\n        _Ty _Lambda;\r\n    };\r\n\r\n    exponential_distribution() noexcept // strengthened\r\n        : _Par(_Ty{1}) {}\r\n\r\n    explicit exponential_distribution(_Ty _Lambda0) noexcept // strengthened\r\n        : _Par(_Lambda0) {}\r\n\r\n    explicit exponential_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0) {}\r\n\r\n    _NODISCARD _Ty lambda() const noexcept /* strengthened */ {\r\n        return _Par.lambda();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ { // get smallest possible result\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ { // get largest possible result\r\n        return numeric_limits<result_type>::infinity();\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(\r\n        const exponential_distribution& _Left, const exponential_distribution& _Right) noexcept /* strengthened */ {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(\r\n        const exponential_distribution& _Left, const exponential_distribution& _Right) noexcept /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        exponential_distribution& _Dist) { // read state from _Istr\r\n        exponential_distribution::result_type _Lambda0;\r\n        _In(_Istr, _Lambda0);\r\n        _Dist._Par._Init(_Lambda0);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const exponential_distribution& _Dist) { // write state to _Ostr\r\n        _Out(_Ostr, _Dist._Par._Lambda);\r\n        return _Ostr;\r\n    }\r\n\r\nprivate:\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, const param_type& _Par0) const {\r\n        return -_CSTD log(_Ty{1} - _Nrand_impl<_Ty>(_Eng)) / _Par0._Lambda;\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = double>\r\nclass normal_distribution { // normal distribution\r\npublic:\r\n    _RNG_REQUIRE_REALTYPE(normal_distribution, _Ty);\r\n\r\n    using result_type = _Ty;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = normal_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(0.0, 1.0);\r\n        }\r\n\r\n        explicit param_type(_Ty _Mean0, _Ty _Sigma0 = 1.0) noexcept /* strengthened */ {\r\n            _Init(_Mean0, _Sigma0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Mean == _Right._Mean && _Left._Sigma == _Right._Sigma;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD _Ty mean() const noexcept /* strengthened */ {\r\n            return _Mean;\r\n        }\r\n\r\n        _NODISCARD _Ty sigma() const noexcept /* strengthened */ {\r\n            return _Sigma;\r\n        }\r\n\r\n        _NODISCARD _Ty stddev() const noexcept /* strengthened */ {\r\n            return _Sigma;\r\n        }\r\n\r\n        void _Init(_Ty _Mean0, _Ty _Sigma0) noexcept { // set internal state\r\n            _STL_ASSERT(0.0 < _Sigma0, \"invalid sigma argument for normal_distribution\");\r\n            _Mean  = _Mean0;\r\n            _Sigma = _Sigma0;\r\n        }\r\n\r\n        _Ty _Mean;\r\n        _Ty _Sigma;\r\n    };\r\n\r\n    normal_distribution() noexcept // strengthened\r\n        : _Par(0.0, 1.0), _Valid(false), _Xx2(0) {}\r\n\r\n    explicit normal_distribution(_Ty _Mean0, _Ty _Sigma0 = 1.0) noexcept // strengthened\r\n        : _Par(_Mean0, _Sigma0), _Valid(false), _Xx2(0) {}\r\n\r\n    explicit normal_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0), _Valid(false), _Xx2(0) {}\r\n\r\n    _NODISCARD _Ty mean() const noexcept /* strengthened */ {\r\n        return _Par.mean();\r\n    }\r\n\r\n    _NODISCARD _Ty sigma() const noexcept /* strengthened */ {\r\n        return _Par.sigma();\r\n    }\r\n\r\n    _NODISCARD _Ty stddev() const noexcept /* strengthened */ {\r\n        return _Par.sigma();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ { // set parameter package\r\n        _Par = _Par0;\r\n        reset();\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ { // get smallest possible result\r\n        return -numeric_limits<result_type>::infinity();\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ { // get largest possible result\r\n        return numeric_limits<result_type>::infinity();\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ { // clear internal state\r\n        _Valid = false;\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const normal_distribution& _Left, const normal_distribution& _Right) noexcept\r\n    /* strengthened */ {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(const normal_distribution& _Left, const normal_distribution& _Right) noexcept\r\n    /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        normal_distribution& _Dist) { // read state from _Istr\r\n        normal_distribution::result_type _Mean0;\r\n        normal_distribution::result_type _Sigma0;\r\n        _In(_Istr, _Mean0);\r\n        _In(_Istr, _Sigma0);\r\n        _Dist._Par._Init(_Mean0, _Sigma0);\r\n\r\n        _Istr >> _Dist._Valid;\r\n        _In(_Istr, _Dist._Xx2);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const normal_distribution& _Dist) { // write state to _Ostr\r\n        _Out(_Ostr, _Dist._Par._Mean);\r\n        _Out(_Ostr, _Dist._Par._Sigma);\r\n\r\n        _Ostr << ' ' << _Dist._Valid;\r\n        _Out(_Ostr, _Dist._Xx2);\r\n        return _Ostr;\r\n    }\r\n\r\nprivate:\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, const param_type& _Par0) {\r\n        // compute next value\r\n        // Knuth, vol. 2, p. 122, alg. P\r\n        _Ty _Res;\r\n        if (_Valid) {\r\n            _Res   = _Xx2;\r\n            _Valid = false;\r\n        } else { // generate two values, store one, return one\r\n            _Ty _Vx1;\r\n            _Ty _Vx2;\r\n            _Ty _Sx;\r\n            for (;;) { // reject bad values to avoid generating NaN/Inf on the next calculations\r\n                _Vx1 = 2 * _Nrand_impl<_Ty>(_Eng) - 1;\r\n                _Vx2 = 2 * _Nrand_impl<_Ty>(_Eng) - 1;\r\n                _Sx  = _Vx1 * _Vx1 + _Vx2 * _Vx2;\r\n                if (_Sx < _Ty{1} && _Vx1 != _Ty{0} && _Vx2 != _Ty{0}) {\r\n                    // good values!\r\n                    break;\r\n                }\r\n            }\r\n\r\n            _Ty _LogSx;\r\n            if (_Sx > _Ty{1e-4}) {\r\n                _LogSx = _STD log(_Sx);\r\n            } else {\r\n                // Bad _Sx value! Very small values will overflow log(_Sx) / _Sx.\r\n                // Generate a new value based on scaling method.\r\n                const _Ty _Ln2{_Ty{0.69314718055994530941723212145818}};\r\n                const _Ty _Maxabs{(_STD max) (_STD abs(_Vx1), _STD abs(_Vx2))};\r\n                const int _ExpMax{_STD ilogb(_Maxabs)};\r\n                _Vx1   = _STD scalbn(_Vx1, -_ExpMax);\r\n                _Vx2   = _STD scalbn(_Vx2, -_ExpMax);\r\n                _Sx    = _Vx1 * _Vx1 + _Vx2 * _Vx2;\r\n                _LogSx = _STD log(_Sx) + static_cast<_Ty>(_ExpMax) * (_Ln2 * 2);\r\n            }\r\n\r\n            const _Ty _Fx{_STD sqrt(_Ty{-2} * _LogSx / _Sx)};\r\n            _Xx2   = _Fx * _Vx2; // save second value for next call\r\n            _Valid = true;\r\n            _Res   = _Fx * _Vx1;\r\n        }\r\n        return _Res * _Par0._Sigma + _Par0._Mean;\r\n    }\r\n\r\n    param_type _Par;\r\n    bool _Valid;\r\n    _Ty _Xx2;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = double>\r\nclass gamma_distribution { // gamma distribution\r\npublic:\r\n    _RNG_REQUIRE_REALTYPE(gamma_distribution, _Ty);\r\n\r\n    using result_type = _Ty;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = gamma_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(_Ty{1}, _Ty{1});\r\n        }\r\n\r\n        explicit param_type(_Ty _Alpha0, _Ty _Beta0 = _Ty{1}) noexcept /* strengthened */ {\r\n            _Init(_Alpha0, _Beta0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Alpha == _Right._Alpha && _Left._Beta == _Right._Beta;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD _Ty alpha() const noexcept /* strengthened */ {\r\n            return _Alpha;\r\n        }\r\n\r\n        _NODISCARD _Ty beta() const noexcept /* strengthened */ {\r\n            return _Beta;\r\n        }\r\n\r\n        void _Init(_Ty _Alpha0, _Ty _Beta0) noexcept { // initialize\r\n            _STL_ASSERT(0.0 < _Alpha0, \"invalid alpha argument for gamma_distribution\");\r\n            _STL_ASSERT(0.0 < _Beta0, \"invalid beta argument for gamma_distribution\");\r\n            _Alpha = _Alpha0;\r\n            _Beta  = _Beta0;\r\n            _Px    = static_cast<_Ty>(_Exp1 / (_Alpha + _Exp1));\r\n            _Sqrt  = _CSTD sqrt(2 * _Alpha - 1);\r\n        }\r\n\r\n        _Ty _Alpha;\r\n        _Ty _Beta;\r\n        _Ty _Px;\r\n        _Ty _Sqrt;\r\n        exponential_distribution<_Ty> _Exp;\r\n    };\r\n\r\n    gamma_distribution() noexcept // strengthened\r\n        : _Par(_Ty{1}, _Ty{1}) {}\r\n\r\n    explicit gamma_distribution(_Ty _Alpha0, _Ty _Beta0 = _Ty{1}) noexcept // strengthened\r\n        : _Par(_Alpha0, _Beta0) {}\r\n\r\n    explicit gamma_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0) {}\r\n\r\n    _NODISCARD _Ty alpha() const noexcept /* strengthened */ {\r\n        return _Par.alpha();\r\n    }\r\n\r\n    _NODISCARD _Ty beta() const noexcept /* strengthened */ {\r\n        return _Par.beta();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ { // get smallest possible result\r\n        return result_type{0.0};\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ { // get largest possible result\r\n        return numeric_limits<result_type>::infinity();\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const gamma_distribution& _Left, const gamma_distribution& _Right) noexcept\r\n    /* strengthened */ {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(const gamma_distribution& _Left, const gamma_distribution& _Right) noexcept\r\n    /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        gamma_distribution& _Dist) { // read state from _Istr\r\n        gamma_distribution::result_type _Alpha0;\r\n        gamma_distribution::result_type _Beta0;\r\n        _In(_Istr, _Alpha0);\r\n        _In(_Istr, _Beta0);\r\n        _Dist._Par._Init(_Alpha0, _Beta0);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const gamma_distribution& _Dist) { // write state to _Ostr\r\n        _Out(_Ostr, _Dist._Par._Alpha);\r\n        _Out(_Ostr, _Dist._Par._Beta);\r\n        return _Ostr;\r\n    }\r\n\r\nprivate:\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, param_type _Par0) const {\r\n        _Ty _Ux;\r\n        _Ty _Vx;\r\n        _Ty _Xx;\r\n        _Ty _Yx;\r\n        _Ty _Qx;\r\n        int _Count;\r\n        if (_Par0._Alpha < 1) { // small values of alpha\r\n                                // from Knuth\r\n            for (;;) { // generate and reject\r\n                _Ux = _Nrand_impl<_Ty>(_Eng);\r\n                do {\r\n                    _Vx = _Nrand_impl<_Ty>(_Eng);\r\n                } while (_Vx == 0);\r\n\r\n                if (_Ux < _Par0._Px) { // small _Ux\r\n                    _Xx = _CSTD pow(_Vx, _Ty{1} / _Par0._Alpha);\r\n                    _Qx = _CSTD exp(-_Xx);\r\n                } else { // large _Ux\r\n                    _Xx = 1 - _CSTD log(_Vx);\r\n                    _Qx = _CSTD pow(_Xx, _Par0._Alpha - 1);\r\n                }\r\n\r\n                if (_Nrand_impl<_Ty>(_Eng) < _Qx) {\r\n                    return _Par0._Beta * _Xx;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (_Par0._Alpha == 1) {\r\n            return _Par0._Beta * _Par0._Exp(_Eng);\r\n        }\r\n\r\n        if (_Par0._Alpha < 20.0 && (_Count = static_cast<int>(_Par0._Alpha)) == _Par0._Alpha) {\r\n            // _Alpha is small integer, compute directly\r\n            _Yx = _Nrand_impl<_Ty>(_Eng);\r\n            while (--_Count) { // adjust result\r\n                do {\r\n                    _Ux = _Nrand_impl<_Ty>(_Eng);\r\n                } while (_Ux == 0);\r\n\r\n                _Yx *= _Ux;\r\n            }\r\n            return _Par0._Beta * -_CSTD log(_Yx);\r\n        }\r\n\r\n        // no shortcuts\r\n        for (;;) { // generate and reject\r\n            _Yx = static_cast<_Ty>(_CSTD tan(_Pi_val * _Nrand_impl<_Ty>(_Eng)));\r\n            _Xx = _Par0._Sqrt * _Yx + _Par0._Alpha - 1;\r\n            if (0 < _Xx\r\n                && _Nrand_impl<_Ty>(_Eng) <= (1 + _Yx * _Yx)\r\n                                                 * _CSTD exp((_Par0._Alpha - 1) * _CSTD log(_Xx / (_Par0._Alpha - 1))\r\n                                                             - _Par0._Sqrt * _Yx)) {\r\n                return _Par0._Beta * _Xx;\r\n            }\r\n        }\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = double>\r\nclass weibull_distribution { // weibull distribution\r\npublic:\r\n    _RNG_REQUIRE_REALTYPE(weibull_distribution, _Ty);\r\n\r\n    using result_type = _Ty;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = weibull_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(_Ty{1}, _Ty{1});\r\n        }\r\n\r\n        explicit param_type(_Ty _Ax0, _Ty _Bx0 = _Ty{1}) noexcept /* strengthened */ {\r\n            _Init(_Ax0, _Bx0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Ax == _Right._Ax && _Left._Bx == _Right._Bx;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD _Ty a() const noexcept /* strengthened */ {\r\n            return _Ax;\r\n        }\r\n\r\n        _NODISCARD _Ty b() const noexcept /* strengthened */ {\r\n            return _Bx;\r\n        }\r\n\r\n        void _Init(_Ty _Ax0, _Ty _Bx0) noexcept { // initialize\r\n            _STL_ASSERT(0.0 < _Ax0, \"invalid a argument for weibull_distribution\");\r\n            _STL_ASSERT(0.0 < _Bx0, \"invalid b argument for weibull_distribution\");\r\n            _Ax = _Ax0;\r\n            _Bx = _Bx0;\r\n        }\r\n\r\n        _Ty _Ax;\r\n        _Ty _Bx;\r\n    };\r\n\r\n    weibull_distribution() noexcept // strengthened\r\n        : _Par(_Ty{1}, _Ty{1}) {}\r\n\r\n    explicit weibull_distribution(_Ty _Ax0, _Ty _Bx0 = _Ty{1}) noexcept // strengthened\r\n        : _Par(_Ax0, _Bx0) {}\r\n\r\n    explicit weibull_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0) {}\r\n\r\n    _NODISCARD _Ty a() const noexcept /* strengthened */ {\r\n        return _Par.a();\r\n    }\r\n\r\n    _NODISCARD _Ty b() const noexcept /* strengthened */ {\r\n        return _Par.b();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ { // get smallest possible result\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ { // get largest possible result\r\n        return numeric_limits<result_type>::infinity();\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const weibull_distribution& _Left, const weibull_distribution& _Right) noexcept\r\n    /* strengthened */ {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(const weibull_distribution& _Left, const weibull_distribution& _Right) noexcept\r\n    /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        weibull_distribution& _Dist) { // read state from _Istr\r\n        weibull_distribution::result_type _Ax0;\r\n        weibull_distribution::result_type _Bx0;\r\n        _In(_Istr, _Ax0);\r\n        _In(_Istr, _Bx0);\r\n        _Dist._Par._Init(_Ax0, _Bx0);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const weibull_distribution& _Dist) { // write state to _Ostr\r\n        _Out(_Ostr, _Dist._Par._Ax);\r\n        _Out(_Ostr, _Dist._Par._Bx);\r\n        return _Ostr;\r\n    }\r\n\r\nprivate:\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, const param_type& _Par0) const { // generate pseudo-random value\r\n        _Ty _Px = (_Ty{1} - _Nrand_impl<_Ty>(_Eng));\r\n        return _Par0._Bx * _CSTD pow(-_CSTD log(_Px), _Ty{1} / _Par0._Ax);\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = double>\r\nclass extreme_value_distribution { // extreme value distribution\r\npublic:\r\n    _RNG_REQUIRE_REALTYPE(extreme_value_distribution, _Ty);\r\n\r\n    using result_type = _Ty;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = extreme_value_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(_Ty{0}, _Ty{1});\r\n        }\r\n\r\n        explicit param_type(_Ty _Ax0, _Ty _Bx0 = _Ty{1}) noexcept /* strengthened */ {\r\n            _Init(_Ax0, _Bx0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Ax == _Right._Ax && _Left._Bx == _Right._Bx;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD _Ty a() const noexcept /* strengthened */ {\r\n            return _Ax;\r\n        }\r\n\r\n        _NODISCARD _Ty b() const noexcept /* strengthened */ {\r\n            return _Bx;\r\n        }\r\n\r\n        void _Init(_Ty _Ax0, _Ty _Bx0) noexcept { // initialize\r\n            _STL_ASSERT(0.0 < _Bx0, \"invalid b argument for extreme_value_distribution\");\r\n            _Ax = _Ax0;\r\n            _Bx = _Bx0;\r\n        }\r\n\r\n        _Ty _Ax;\r\n        _Ty _Bx;\r\n    };\r\n\r\n    extreme_value_distribution() noexcept // strengthened\r\n        : _Par(_Ty{0}, _Ty{1}) {}\r\n\r\n    explicit extreme_value_distribution(_Ty _Ax0, _Ty _Bx0 = _Ty{1}) noexcept // strengthened\r\n        : _Par(_Ax0, _Bx0) {}\r\n\r\n    explicit extreme_value_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0) {}\r\n\r\n    _NODISCARD _Ty a() const noexcept /* strengthened */ {\r\n        return _Par.a();\r\n    }\r\n\r\n    _NODISCARD _Ty b() const noexcept /* strengthened */ {\r\n        return _Par.b();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ { // get smallest possible result\r\n        return -numeric_limits<result_type>::infinity();\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ { // get largest possible result\r\n        return numeric_limits<result_type>::infinity();\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(\r\n        const extreme_value_distribution& _Left, const extreme_value_distribution& _Right) noexcept /* strengthened */ {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(\r\n        const extreme_value_distribution& _Left, const extreme_value_distribution& _Right) noexcept /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        extreme_value_distribution& _Dist) { // read state from _Istr\r\n        extreme_value_distribution::result_type _Ax0;\r\n        extreme_value_distribution::result_type _Bx0;\r\n        _In(_Istr, _Ax0);\r\n        _In(_Istr, _Bx0);\r\n        _Dist._Par._Init(_Ax0, _Bx0);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const extreme_value_distribution& _Dist) { // write state to _Ostr\r\n        _Out(_Ostr, _Dist._Par._Ax);\r\n        _Out(_Ostr, _Dist._Par._Bx);\r\n        return _Ostr;\r\n    }\r\n\r\nprivate:\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, const param_type& _Par0) const { // generate pseudo-random value\r\n        _Ty _Px = _Nrand_impl<_Ty>(_Eng);\r\n        return _Par0._Ax - _Par0._Bx * _CSTD log(-_CSTD log(_Px));\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = double>\r\nclass lognormal_distribution { // lognormal_distribution\r\npublic:\r\n    _RNG_REQUIRE_REALTYPE(lognormal_distribution, _Ty);\r\n\r\n    using result_type = _Ty;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = lognormal_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(_Ty{0}, _Ty{1});\r\n        }\r\n\r\n        explicit param_type(_Ty _Mx0, _Ty _Sx0 = _Ty{1}) noexcept /* strengthened */ {\r\n            _Init(_Mx0, _Sx0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Mx == _Right._Mx && _Left._Sx == _Right._Sx;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD _Ty m() const noexcept /* strengthened */ {\r\n            return _Mx;\r\n        }\r\n\r\n        _NODISCARD _Ty s() const noexcept /* strengthened */ {\r\n            return _Sx;\r\n        }\r\n\r\n        void _Init(_Ty _Mx0, _Ty _Sx0) noexcept { // initialize\r\n            _STL_ASSERT(0.0 < _Sx0, \"invalid s argument for lognormal_distribution\");\r\n            _Mx = _Mx0;\r\n            _Sx = _Sx0;\r\n        }\r\n\r\n        _Ty _Mx;\r\n        _Ty _Sx;\r\n    };\r\n\r\n    lognormal_distribution() noexcept // strengthened\r\n        : _Par(_Ty{0}, _Ty{1}) {}\r\n\r\n    explicit lognormal_distribution(_Ty _Mx0, _Ty _Sx0 = _Ty{1}) noexcept // strengthened\r\n        : _Par(_Mx0, _Sx0) {}\r\n\r\n    explicit lognormal_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0) {}\r\n\r\n    _NODISCARD _Ty m() const noexcept /* strengthened */ {\r\n        return _Par.m();\r\n    }\r\n\r\n    _NODISCARD _Ty s() const noexcept /* strengthened */ {\r\n        return _Par.s();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ { // get smallest possible result\r\n        return result_type{0.0};\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ { // get largest possible result\r\n        return numeric_limits<result_type>::infinity();\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(\r\n        const lognormal_distribution& _Left, const lognormal_distribution& _Right) noexcept /* strengthened */ {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(\r\n        const lognormal_distribution& _Left, const lognormal_distribution& _Right) noexcept /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        lognormal_distribution& _Dist) { // read state from _Istr\r\n        lognormal_distribution::result_type _Mx0;\r\n        lognormal_distribution::result_type _Sx0;\r\n        _In(_Istr, _Mx0);\r\n        _In(_Istr, _Sx0);\r\n        _Dist._Par._Init(_Mx0, _Sx0);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const lognormal_distribution& _Dist) { // write state to _Ostr\r\n        _Out(_Ostr, _Dist._Par._Mx);\r\n        _Out(_Ostr, _Dist._Par._Sx);\r\n        return _Ostr;\r\n    }\r\n\r\nprivate:\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, param_type _Par0) const { // generate pseudo-random value\r\n        normal_distribution<_Ty> _Dist(_Par0._Mx, _Par0._Sx);\r\n        return _CSTD exp(_Dist(_Eng));\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = double>\r\nclass chi_squared_distribution { // chi squared distribution\r\npublic:\r\n    _RNG_REQUIRE_REALTYPE(chi_squared_distribution, _Ty);\r\n\r\n    using result_type = _Ty;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = chi_squared_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(_Ty{1});\r\n        }\r\n\r\n        explicit param_type(_Ty _Nx0) noexcept /* strengthened */ {\r\n            _Init(_Nx0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Nx == _Right._Nx;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD _Ty n() const noexcept /* strengthened */ {\r\n            return _Nx;\r\n        }\r\n\r\n        void _Init(_Ty _Nx0) noexcept { // initialize\r\n            _STL_ASSERT(0 < _Nx0, \"invalid n argument for chi_squared_distribution\");\r\n            _Nx = _Nx0;\r\n        }\r\n\r\n        _Ty _Nx;\r\n    };\r\n\r\n    chi_squared_distribution() noexcept // strengthened\r\n        : _Par(_Ty{1}) {}\r\n\r\n    explicit chi_squared_distribution(_Ty _Nx0) noexcept // strengthened\r\n        : _Par(_Nx0) {}\r\n\r\n    explicit chi_squared_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0) {}\r\n\r\n    _NODISCARD _Ty n() const noexcept /* strengthened */ {\r\n        return _Par.n();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ { // get smallest possible result\r\n        return result_type{0.0};\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ { // get largest possible result\r\n        return numeric_limits<result_type>::infinity();\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(\r\n        const chi_squared_distribution& _Left, const chi_squared_distribution& _Right) noexcept /* strengthened */ {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(\r\n        const chi_squared_distribution& _Left, const chi_squared_distribution& _Right) noexcept /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        chi_squared_distribution& _Dist) { // read state from _Istr\r\n        chi_squared_distribution::result_type _Nx0;\r\n        _Istr >> _Nx0;\r\n        _Dist._Par._Init(_Nx0);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const chi_squared_distribution& _Dist) { // write state to _Ostr\r\n        return _Ostr << ' ' << _Dist._Par._Nx;\r\n    }\r\n\r\nprivate:\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, const param_type& _Par0) const {\r\n        gamma_distribution<_Ty> _Dist(static_cast<_Ty>(_Par0._Nx) * static_cast<_Ty>(0.5), _Ty{2});\r\n        return _Dist(_Eng);\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = double>\r\nclass cauchy_distribution { // Cauchy distribution\r\npublic:\r\n    _RNG_REQUIRE_REALTYPE(cauchy_distribution, _Ty);\r\n\r\n    using result_type = _Ty;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = cauchy_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(_Ty{0}, _Ty{1});\r\n        }\r\n\r\n        explicit param_type(_Ty _Ax0, _Ty _Bx0 = _Ty{1}) noexcept /* strengthened */ {\r\n            _Init(_Ax0, _Bx0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Ax == _Right._Ax && _Left._Bx == _Right._Bx;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD _Ty a() const noexcept /* strengthened */ {\r\n            return _Ax;\r\n        }\r\n\r\n        _NODISCARD _Ty b() const noexcept /* strengthened */ {\r\n            return _Bx;\r\n        }\r\n\r\n        void _Init(_Ty _Ax0, _Ty _Bx0) noexcept { // initialize\r\n            _STL_ASSERT(0.0 < _Bx0, \"invalid b argument for cauchy_distribution\");\r\n            _Ax = _Ax0;\r\n            _Bx = _Bx0;\r\n        }\r\n\r\n        _Ty _Ax;\r\n        _Ty _Bx;\r\n    };\r\n\r\n    cauchy_distribution() noexcept // strengthened\r\n        : _Par(_Ty{0}, _Ty{1}) {}\r\n\r\n    explicit cauchy_distribution(_Ty _Ax0, _Ty _Bx0 = _Ty{1}) noexcept // strengthened\r\n        : _Par(_Ax0, _Bx0) {}\r\n\r\n    explicit cauchy_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0) {}\r\n\r\n    _NODISCARD _Ty a() const noexcept /* strengthened */ {\r\n        return _Par.a();\r\n    }\r\n\r\n    _NODISCARD _Ty b() const noexcept /* strengthened */ {\r\n        return _Par.b();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ { // get smallest possible result\r\n        return -numeric_limits<result_type>::infinity();\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ { // get largest possible result\r\n        return numeric_limits<result_type>::infinity();\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const cauchy_distribution& _Left, const cauchy_distribution& _Right) noexcept\r\n    /* strengthened */ {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(const cauchy_distribution& _Left, const cauchy_distribution& _Right) noexcept\r\n    /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        cauchy_distribution& _Dist) { // read state from _Istr\r\n        cauchy_distribution::result_type _Ax0;\r\n        cauchy_distribution::result_type _Bx0;\r\n        _In(_Istr, _Ax0);\r\n        _In(_Istr, _Bx0);\r\n        _Dist._Par._Init(_Ax0, _Bx0);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const cauchy_distribution& _Dist) { // write state to _Ostr\r\n        _Out(_Ostr, _Dist._Par._Ax);\r\n        _Out(_Ostr, _Dist._Par._Bx);\r\n        return _Ostr;\r\n    }\r\n\r\nprivate:\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, const param_type& _Par0) const { // generate pseudo-random value\r\n        _Ty Px = _Nrand_impl<_Ty>(_Eng);\r\n        return static_cast<_Ty>(_Par0._Ax + _Par0._Bx * _CSTD tan(_Pi_val * (Px - static_cast<_Ty>(0.5))));\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\ntemplate <class _Ty = double>\r\nclass _Beta_distribution { // beta distribution\r\npublic:\r\n    using result_type = _Ty;\r\n\r\n    explicit _Beta_distribution(const _Ty& _Ax0 = _Ty{1}, const _Ty& _Bx0 = _Ty{1}) noexcept {\r\n        _Init(_Ax0, _Bx0);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) const {\r\n        if (_Ax < _Ty{1} && _Bx < _Ty{1}) { // look for a good value\r\n            _Ty _Wx;\r\n            _Ty _Px1;\r\n            _Ty _Px2;\r\n            for (;;) { // reject large values\r\n                _Px1 = _Nrand_impl<_Ty>(_Eng);\r\n                _Px2 = _Nrand_impl<_Ty>(_Eng);\r\n                _Px1 = _CSTD pow(_Px1, _Ty{1} / _Ax);\r\n                _Px2 = _CSTD pow(_Px2, _Ty{1} / _Bx);\r\n                _Wx  = _Px1 + _Px2;\r\n                if (_Wx <= _Ty{1} && _Wx != _Ty{0}) {\r\n                    break;\r\n                }\r\n            }\r\n            return _Px1 / _Wx;\r\n        } else { // use gamma distributions instead\r\n            _Ty _Px1;\r\n            _Ty _Px2;\r\n            _Ty _PSum;\r\n            gamma_distribution<_Ty> _Dist1(_Ax, 1);\r\n            gamma_distribution<_Ty> _Dist2(_Bx, 1);\r\n\r\n            for (;;) { // reject pairs whose sum is zero\r\n                _Px1  = _Dist1(_Eng);\r\n                _Px2  = _Dist2(_Eng);\r\n                _PSum = _Px1 + _Px2;\r\n\r\n                if (_PSum != _Ty{0}) {\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return _Px1 / _PSum;\r\n        }\r\n    }\r\n\r\nprivate:\r\n    void _Init(_Ty _Ax0, _Ty _Bx0) noexcept { // initialize\r\n        _STL_ASSERT(0.0 < _Ax0, \"invalid a argument for _Beta_distribution\");\r\n        _STL_ASSERT(0.0 < _Bx0, \"invalid b argument for _Beta_distribution\");\r\n        _Ax = _Ax0;\r\n        _Bx = _Bx0;\r\n    }\r\n\r\n    _Ty _Ax;\r\n    _Ty _Bx;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = double>\r\nclass fisher_f_distribution { // fisher_f distribution\r\npublic:\r\n    _RNG_REQUIRE_REALTYPE(fisher_f_distribution, _Ty);\r\n\r\n    using result_type = _Ty;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = fisher_f_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(_Ty{1}, _Ty{1});\r\n        }\r\n\r\n        explicit param_type(_Ty _Mx0, _Ty _Nx0 = _Ty{1}) noexcept /* strengthened */ {\r\n            _Init(_Mx0, _Nx0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Mx == _Right._Mx && _Left._Nx == _Right._Nx;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD _Ty m() const noexcept /* strengthened */ {\r\n            return _Mx;\r\n        }\r\n\r\n        _NODISCARD _Ty n() const noexcept /* strengthened */ {\r\n            return _Nx;\r\n        }\r\n\r\n        void _Init(_Ty _Mx0, _Ty _Nx0) noexcept { // initialize\r\n            _STL_ASSERT(0 < _Mx0, \"invalid m argument for fisher_f_distribution\");\r\n            _STL_ASSERT(0 < _Nx0, \"invalid n argument for fisher_f_distribution\");\r\n            _Mx = _Mx0;\r\n            _Nx = _Nx0;\r\n        }\r\n\r\n        _Ty _Mx;\r\n        _Ty _Nx;\r\n    };\r\n\r\n    fisher_f_distribution() noexcept // strengthened\r\n        : _Par(_Ty{1}, _Ty{1}) {}\r\n\r\n    explicit fisher_f_distribution(_Ty _Mx0, _Ty _Nx0 = _Ty{1}) noexcept // strengthened\r\n        : _Par(_Mx0, _Nx0) {}\r\n\r\n    explicit fisher_f_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0) {}\r\n\r\n    _NODISCARD _Ty m() const noexcept /* strengthened */ {\r\n        return _Par.m();\r\n    }\r\n\r\n    _NODISCARD _Ty n() const noexcept /* strengthened */ {\r\n        return _Par.n();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ { // get smallest possible result\r\n        return result_type(0);\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ { // get largest possible result\r\n        return numeric_limits<result_type>::infinity();\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const fisher_f_distribution& _Left, const fisher_f_distribution& _Right) noexcept\r\n    /* strengthened */ {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(const fisher_f_distribution& _Left, const fisher_f_distribution& _Right) noexcept\r\n    /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        fisher_f_distribution& _Dist) { // read state from _Istr\r\n        fisher_f_distribution::result_type _Mx0;\r\n        fisher_f_distribution::result_type _Nx0;\r\n        _Istr >> _Mx0 >> _Nx0;\r\n        _Dist._Par._Init(_Mx0, _Nx0);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const fisher_f_distribution& _Dist) { // write state to _Ostr\r\n        _Ostr << ' ' << _Dist._Par._Mx << ' ' << _Dist._Par._Nx;\r\n        return _Ostr;\r\n    }\r\n\r\nprivate:\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, const param_type& _Par0) const {\r\n        _Ty _Px;\r\n        _Ty _Vx1;\r\n        _Ty _Vx2;\r\n        const _Ty _Vx3{1};\r\n        _Vx1 = static_cast<_Ty>(_Par0._Mx) * static_cast<_Ty>(0.5);\r\n        _Vx2 = static_cast<_Ty>(_Par0._Nx) * static_cast<_Ty>(0.5);\r\n        _Beta_distribution<_Ty> _Dist(_Vx1, _Vx2);\r\n        for (;;) { // reject bad values\r\n            _Px = _Dist(_Eng);\r\n            if (_Px != _Vx3) {\r\n                break;\r\n            }\r\n        }\r\n\r\n        return (_Vx2 / _Vx1) * (_Px / (_Vx3 - _Px));\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = double>\r\nclass student_t_distribution { // student_t distribution\r\npublic:\r\n    _RNG_REQUIRE_REALTYPE(student_t_distribution, _Ty);\r\n\r\n    using result_type = _Ty;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = student_t_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(_Ty{1});\r\n        }\r\n\r\n        explicit param_type(_Ty _Nx0) noexcept /* strengthened */ {\r\n            _Init(_Nx0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Nx == _Right._Nx;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD _Ty n() const noexcept /* strengthened */ {\r\n            return _Nx;\r\n        }\r\n\r\n        void _Init(_Ty _Nx0) noexcept { // initialize\r\n            _STL_ASSERT(0 < _Nx0, \"invalid n argument for student_t_distribution\");\r\n            _Nx = _Nx0;\r\n        }\r\n\r\n        _Ty _Nx;\r\n    };\r\n\r\n    student_t_distribution() noexcept // strengthened\r\n        : _Par(_Ty{1}) {}\r\n\r\n    explicit student_t_distribution(_Ty _Nx0) noexcept // strengthened\r\n        : _Par(_Nx0) {}\r\n\r\n    explicit student_t_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0) {}\r\n\r\n    _NODISCARD _Ty n() const noexcept /* strengthened */ {\r\n        return _Par.n();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ { // get smallest possible result\r\n        return -numeric_limits<result_type>::infinity();\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ { // get largest possible result\r\n        return numeric_limits<result_type>::infinity();\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(\r\n        const student_t_distribution& _Left, const student_t_distribution& _Right) noexcept /* strengthened */ {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(\r\n        const student_t_distribution& _Left, const student_t_distribution& _Right) noexcept /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        student_t_distribution& _Dist) { // read state from _Istr\r\n        student_t_distribution::result_type _Nx0;\r\n        _Istr >> _Nx0;\r\n        _Dist._Par._Init(_Nx0);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const student_t_distribution& _Dist) { // write state to _Ostr\r\n        return _Ostr << ' ' << _Dist._Par._Nx;\r\n    }\r\n\r\nprivate:\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, const param_type& _Par0) const {\r\n        _Ty _Vx1;\r\n        _Ty _Vx2;\r\n        _Ty _Rx0;\r\n        _Ty _Rs;\r\n        uniform_real_distribution<_Ty> _Dist(-1, 1);\r\n        for (;;) { // get a point inside unit circle\r\n            _Vx1 = _Dist(_Eng);\r\n            _Vx2 = _Dist(_Eng);\r\n            _Rs  = _Vx1 * _Vx1 + _Vx2 * _Vx2;\r\n\r\n            // very small _Rs will overflow on pow(_Rx0, -_Ty{4} / _Par0._Nx)\r\n            if (_Rs < _Ty{1} && _Rs > _Ty{1e-12}) {\r\n                break;\r\n            }\r\n        }\r\n        _Rx0 = _STD sqrt(_Rs);\r\n        return _Vx1 * _STD sqrt(_Par0._Nx * (_STD pow(_Rx0, -_Ty{4} / _Par0._Nx) - _Ty{1}) / _Rs);\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = int>\r\nclass negative_binomial_distribution { // negative binomial distribution\r\npublic:\r\n    _RNG_REQUIRE_INTTYPE(negative_binomial_distribution, _Ty);\r\n\r\n    using result_type = _Ty;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = negative_binomial_distribution;\r\n\r\n        param_type() noexcept /* strengthened */ {\r\n            _Init(1, 0.5);\r\n        }\r\n\r\n        explicit param_type(_Ty _Kx0, double _Px0 = 0.5) noexcept /* strengthened */ {\r\n            _Init(_Kx0, _Px0);\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return _Left._Kx == _Right._Kx && _Left._Px == _Right._Px;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) noexcept\r\n        /* strengthened */ {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD _Ty k() const noexcept /* strengthened */ {\r\n            return _Kx;\r\n        }\r\n\r\n        _NODISCARD double p() const noexcept /* strengthened */ {\r\n            return _Px;\r\n        }\r\n\r\n        void _Init(_Ty _Kx0, double _Px0) noexcept { // initialize\r\n            _STL_ASSERT(0.0 < _Kx0, \"invalid max argument for negative_binomial_distribution\");\r\n            _STL_ASSERT(0.0 < _Px0 && _Px0 <= 1.0, \"invalid probability argument for negative_binomial_distribution\");\r\n            _Kx = _Kx0;\r\n            _Px = _Px0;\r\n        }\r\n\r\n        _Ty _Kx;\r\n        double _Px;\r\n    };\r\n\r\n    negative_binomial_distribution() noexcept // strengthened\r\n        : _Par(1, 0.5) {}\r\n\r\n    explicit negative_binomial_distribution(_Ty _Kx0, double _Px0 = 0.5) noexcept // strengthened\r\n        : _Par(_Kx0, _Px0) {}\r\n\r\n    explicit negative_binomial_distribution(const param_type& _Par0) noexcept // strengthened\r\n        : _Par(_Par0) {}\r\n\r\n    _NODISCARD _Ty k() const noexcept /* strengthened */ {\r\n        return _Par.k();\r\n    }\r\n\r\n    _NODISCARD double p() const noexcept /* strengthened */ {\r\n        return _Par.p();\r\n    }\r\n\r\n    _NODISCARD param_type param() const noexcept /* strengthened */ {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) noexcept /* strengthened */ { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ { // get smallest possible result\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ { // get largest possible result\r\n        return (numeric_limits<result_type>::max)();\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const negative_binomial_distribution& _Left,\r\n        const negative_binomial_distribution& _Right) noexcept /* strengthened */ {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(const negative_binomial_distribution& _Left,\r\n        const negative_binomial_distribution& _Right) noexcept /* strengthened */ {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        negative_binomial_distribution& _Dist) { // read state from _Istr\r\n        negative_binomial_distribution::result_type _Kx0;\r\n        double _Px0;\r\n        _In(_Istr, _Px0);\r\n        _In(_Istr, _Kx0);\r\n        _Dist._Par._Init(_Kx0, _Px0);\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const negative_binomial_distribution& _Dist) { // write state to _Ostr\r\n        _Out(_Ostr, _Dist._Par._Px);\r\n        _Out(_Ostr, _Dist._Par._Kx);\r\n        return _Ostr;\r\n    }\r\n\r\nprivate:\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, const param_type& _Par0) const {\r\n        double _Vx1;\r\n        gamma_distribution<double> _Dist1(\r\n            static_cast<double>(_Par0._Kx), static_cast<double>((_Ty{1} - _Par0._Px) / _Par0._Px));\r\n        _Vx1 = _Dist1(_Eng);\r\n        poisson_distribution<_Ty> _Dist2(_Vx1);\r\n\r\n        return _Dist2(_Eng);\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = int>\r\nclass discrete_distribution { // discrete integer distribution\r\npublic:\r\n    _RNG_REQUIRE_INTTYPE(discrete_distribution, _Ty);\r\n\r\n    using _Myvec      = vector<double>;\r\n    using result_type = _Ty;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = discrete_distribution;\r\n\r\n        param_type(_Uninitialized) noexcept {} // do-nothing constructor for derived classes\r\n\r\n        param_type() {\r\n            _Init();\r\n        }\r\n\r\n        template <class _InIt>\r\n        param_type(_InIt _First, _InIt _Last) : _Pvec(_First, _Last) {\r\n            _Init();\r\n        }\r\n\r\n        param_type(initializer_list<double> _Ilist) : _Pvec(_Ilist) {\r\n            _Init();\r\n        }\r\n\r\n        template <class _Fn>\r\n        param_type(size_t _Count, double _Low, double _High, _Fn _Func) {\r\n            double _Range = _High - _Low;\r\n            _STL_ASSERT(0.0 < _Range, \"invalid range for discrete_distribution\");\r\n            if (_Count <= 0) {\r\n                _Count = 1;\r\n            }\r\n\r\n            _Range /= static_cast<double>(_Count);\r\n            _Low += 0.5 * _Range; // evaluate in center of each interval\r\n            for (size_t _Idx = 0; _Idx < _Count; ++_Idx) {\r\n                _Pvec.push_back(_Func(_Low + _Idx * _Range));\r\n            }\r\n\r\n            _Init();\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) {\r\n            return _Left._Pvec == _Right._Pvec;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD _Myvec probabilities() const {\r\n            return _Pvec;\r\n        }\r\n\r\n        void _Init(const bool _Renorm = true) { // initialize\r\n            const size_t _Size = _Pvec.size();\r\n\r\n            if (_Renorm) {\r\n                if (_Pvec.empty()) {\r\n                    _Pvec.push_back(1.0); // make empty vector degenerate\r\n                } else { // normalize probabilities\r\n                    double _Sum = 0;\r\n\r\n                    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) { // sum all probabilities\r\n                        _STL_ASSERT(0.0 <= _Pvec[_Idx], \"invalid probability for discrete_distribution\");\r\n                        _Sum += _Pvec[_Idx];\r\n                    }\r\n\r\n                    _STL_ASSERT(0.0 < _Sum, \"invalid probability vector for discrete_distribution\");\r\n                    if (_Sum != 1.0) {\r\n                        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n                            _Pvec[_Idx] /= _Sum;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            _Pcdf.assign(1, _Pvec[0]);\r\n            for (size_t _Idx = 1; _Idx < _Size; ++_Idx) {\r\n                _Pcdf.push_back(_Pvec[_Idx] + _Pcdf[_Idx - 1]);\r\n            }\r\n        }\r\n\r\n        template <class _Elem, class _Traits>\r\n        basic_istream<_Elem, _Traits>& _Read(basic_istream<_Elem, _Traits>& _Istr) { // read state from _Istr\r\n            size_t _Nvals;\r\n            _Istr >> _Nvals;\r\n            _Pvec.clear();\r\n            for (; 0 < _Nvals; --_Nvals) { // get a value and add to vector\r\n                double _Val;\r\n                _In(_Istr, _Val);\r\n                _Pvec.push_back(_Val);\r\n            }\r\n            _Init(false); // don't renormalize, just compute CDF\r\n            return _Istr;\r\n        }\r\n\r\n        template <class _Elem, class _Traits>\r\n        basic_ostream<_Elem, _Traits>& _Write(basic_ostream<_Elem, _Traits>& _Ostr) const { // write state to _Ostr\r\n            _Ostr << ' ' << _Pvec.size();\r\n\r\n            for (const auto& _Val : _Pvec) {\r\n                _Out(_Ostr, _Val);\r\n            }\r\n\r\n            return _Ostr;\r\n        }\r\n\r\n        _Myvec _Pvec;\r\n        _Myvec _Pcdf;\r\n    };\r\n\r\n    discrete_distribution() {}\r\n\r\n    template <class _InIt>\r\n    discrete_distribution(_InIt _First, _InIt _Last) : _Par(_First, _Last) {}\r\n\r\n    discrete_distribution(initializer_list<double> _Ilist) : _Par(_Ilist) {}\r\n\r\n    template <class _Fn>\r\n    discrete_distribution(size_t _Count, double _Low, double _High, _Fn _Func) : _Par(_Count, _Low, _High, _Func) {}\r\n\r\n    explicit discrete_distribution(const param_type& _Par0) : _Par(_Par0) {}\r\n\r\n    _NODISCARD _Myvec probabilities() const {\r\n        return _Par.probabilities();\r\n    }\r\n\r\n    _NODISCARD param_type param() const {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ {\r\n        return static_cast<result_type>(_Par._Pvec.size() - 1);\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    // reused by piecewise_constant_distribution and piecewise_linear_distribution\r\n    template <class _Engine>\r\n    _NODISCARD static result_type _Invoke_param_pcdf(_Engine& _Eng, const _Myvec& _Pcdf) {\r\n        const double _Px     = _STD _Nrand_impl<double>(_Eng);\r\n        const auto _First    = _Pcdf.begin();\r\n        const auto _Position = _STD lower_bound(_First, _STD _Prev_iter(_Pcdf.end()), _Px);\r\n        return static_cast<result_type>(_Position - _First);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Invoke_param_pcdf(_Eng, _Par._Pcdf);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Invoke_param_pcdf(_Eng, _Par0._Pcdf);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const discrete_distribution& _Left, const discrete_distribution& _Right) {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(const discrete_distribution& _Left, const discrete_distribution& _Right) {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        discrete_distribution& _Dist) { // read state from _Istr\r\n        return _Dist._Par._Read(_Istr);\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const discrete_distribution& _Dist) { // write state to _Ostr\r\n        return _Dist._Par._Write(_Ostr);\r\n    }\r\n\r\n    param_type _Par;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = double>\r\nclass piecewise_constant_distribution { // piecewise constant floating-point distribution\r\npublic:\r\n    _RNG_REQUIRE_REALTYPE(piecewise_constant_distribution, _Ty);\r\n\r\n    using result_type = _Ty;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = piecewise_constant_distribution;\r\n\r\n        param_type() : _Bvec{0, 1} {}\r\n\r\n        template <class _InIt1, class _InIt2>\r\n        param_type(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2) : _Base_params(_Noinit), _Bvec(_First1, _Last1) {\r\n            if (2 <= _Bvec.size()) {\r\n                for (size_t _Idx = 0; _Idx < _Bvec.size() - 1; ++_Idx) {\r\n                    _Base_params._Pvec.push_back(static_cast<double>(*_First2++));\r\n                }\r\n            } else { // default construct\r\n                _Bvec = {0, 1};\r\n            }\r\n\r\n            _Init();\r\n        }\r\n\r\n        template <class _Fn>\r\n        param_type(initializer_list<_Ty> _Ilist, _Fn _Func) : _Base_params(_Noinit) {\r\n            if (2 <= _Ilist.size()) {\r\n                _Bvec.assign(_Ilist);\r\n\r\n                for (size_t _Idx = 0; _Idx < _Bvec.size() - 1; ++_Idx) {\r\n                    _Base_params._Pvec.push_back(_Func(_Ty{0.5} * (_Bvec[_Idx] + _Bvec[_Idx + 1])));\r\n                }\r\n            } else { // default construct\r\n                _Bvec = {0, 1};\r\n            }\r\n\r\n            _Init();\r\n        }\r\n\r\n        template <class _Fn>\r\n        param_type(size_t _Count, _Ty _Low, _Ty _High, _Fn _Func) : _Base_params(_Count, _Low, _High, _Func) {\r\n            _Ty _Range = _High - _Low;\r\n            if (_Count <= 0) {\r\n                _Count = 1;\r\n            }\r\n\r\n            _Range /= static_cast<_Ty>(_Count);\r\n            for (size_t _Idx = 0; _Idx <= _Count; ++_Idx) {\r\n                _Bvec.push_back(_Low + _Idx * _Range);\r\n            }\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) {\r\n            return _Left._Base_params == _Right._Base_params && _Left._Bvec == _Right._Bvec;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD vector<_Ty> intervals() const {\r\n            return _Bvec;\r\n        }\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4244) // '%s': conversion from '%s' to '%s', possible loss of data\r\n        _NODISCARD vector<_Ty> densities() const {\r\n            vector<_Ty> _Ans(_Base_params._Pvec.begin(), _Base_params._Pvec.end());\r\n\r\n            for (size_t _Idx = 0; _Idx < _Ans.size(); ++_Idx) {\r\n                _Ans[_Idx] /= _Bvec[_Idx + 1] - _Bvec[_Idx];\r\n            }\r\n\r\n            return _Ans;\r\n        }\r\n#pragma warning(pop)\r\n\r\n        void _Init() { // initialize\r\n            _Base_params._Init();\r\n        }\r\n\r\n        discrete_distribution<size_t>::param_type _Base_params;\r\n        vector<_Ty> _Bvec;\r\n    };\r\n\r\n    piecewise_constant_distribution() {}\r\n\r\n    template <class _InIt1, class _InIt2>\r\n    piecewise_constant_distribution(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2) : _Par(_First1, _Last1, _First2) {}\r\n\r\n    template <class _Fn>\r\n    piecewise_constant_distribution(initializer_list<_Ty> _Ilist, _Fn _Func) : _Par(_Ilist, _Func) {}\r\n\r\n    template <class _Fn>\r\n    piecewise_constant_distribution(size_t _Count, _Ty _Low, _Ty _High, _Fn _Func) : _Par(_Count, _Low, _High, _Func) {}\r\n\r\n    explicit piecewise_constant_distribution(const param_type& _Par0) : _Par(_Par0) {}\r\n\r\n    _NODISCARD vector<_Ty> intervals() const {\r\n        return _Par.intervals();\r\n    }\r\n\r\n    _NODISCARD vector<_Ty> densities() const {\r\n        return _Par.densities();\r\n    }\r\n\r\n    _NODISCARD param_type param() const {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const {\r\n        return _Par._Bvec.front();\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const {\r\n        return _Par._Bvec.back();\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(\r\n        const piecewise_constant_distribution& _Left, const piecewise_constant_distribution& _Right) {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(\r\n        const piecewise_constant_distribution& _Left, const piecewise_constant_distribution& _Right) {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        piecewise_constant_distribution& _Dist) { // read state from _Istr\r\n        _Dist._Par._Base_params._Read(_Istr);\r\n\r\n        _Dist._Par._Bvec.clear();\r\n        for (size_t _Idx = _Dist._Par._Base_params._Pvec.size() + 1; 0 < _Idx; --_Idx) {\r\n            // get a value and add to intervals vector\r\n            double _Val;\r\n            _In(_Istr, _Val);\r\n            _Dist._Par._Bvec.push_back(_Val);\r\n        }\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const piecewise_constant_distribution& _Dist) { // write state to _Ostr\r\n        _Dist._Par._Base_params._Write(_Ostr);\r\n\r\n        for (const auto& _Val : _Dist._Par._Bvec) {\r\n            _Out(_Ostr, _Val);\r\n        }\r\n\r\n        return _Ostr;\r\n    }\r\n\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        size_t _Px = discrete_distribution<size_t>::_Invoke_param_pcdf(_Eng, _Par0._Base_params._Pcdf);\r\n        uniform_real_distribution<_Ty> _Dist(_Par0._Bvec[_Px], _Par0._Bvec[_Px + 1]);\r\n        return _Dist(_Eng);\r\n    }\r\n\r\n    discrete_distribution<size_t> _Unused; // TRANSITION, ABI: this was a base class subobject\r\n    param_type _Par;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = double>\r\nclass piecewise_linear_distribution { // piecewise linear floating-point distribution\r\npublic:\r\n    _RNG_REQUIRE_REALTYPE(piecewise_linear_distribution, _Ty);\r\n\r\n    using result_type = _Ty;\r\n\r\n    struct param_type { // parameter package\r\n        using distribution_type = piecewise_linear_distribution;\r\n\r\n        param_type() {\r\n            _Init_base();\r\n            _Pvec.push_back(1.0);\r\n            _Bvec = {0, 1};\r\n        }\r\n\r\n        template <class _InIt1, class _InIt2>\r\n        param_type(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2) : _Bvec(_First1, _Last1) {\r\n            if (2 <= _Bvec.size()) {\r\n                for (size_t _Idx = 0; _Idx < _Bvec.size(); ++_Idx) {\r\n                    _Pvec.push_back(static_cast<double>(*_First2++));\r\n                }\r\n            } else { // default construct\r\n                _Bvec = {0, 1};\r\n            }\r\n\r\n            _Init();\r\n        }\r\n\r\n        template <class _Fn>\r\n        param_type(initializer_list<_Ty> _Ilist, _Fn _Func) {\r\n            if (2 <= _Ilist.size()) {\r\n                _Bvec.assign(_Ilist);\r\n\r\n                for (const auto& _Bval : _Bvec) {\r\n                    _Pvec.push_back(_Func(_Bval));\r\n                }\r\n            } else { // default construct\r\n                _Bvec = {0, 1};\r\n            }\r\n\r\n            _Init();\r\n        }\r\n\r\n        template <class _Fn>\r\n        param_type(size_t _Count, _Ty _Low, _Ty _High, _Fn _Func) {\r\n            _Ty _Range = _High - _Low;\r\n            _STL_ASSERT(_Ty{0} < _Range, \"invalid range for piecewise_linear_distribution\");\r\n            if (_Count < 1) {\r\n                _Count = 1;\r\n            }\r\n\r\n            _Range /= static_cast<double>(_Count);\r\n            for (size_t _Idx = 0; _Idx <= _Count; ++_Idx) { // compute _Bvec and _Pvec\r\n                _Ty _Bval = _Low + _Idx * _Range;\r\n                _Bvec.push_back(_Bval);\r\n                _Pvec.push_back(_Func(_Bval));\r\n            }\r\n            _Init();\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(const param_type& _Left, const param_type& _Right) {\r\n            return _Left._Pvec == _Right._Pvec && _Left._Bvec == _Right._Bvec;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(const param_type& _Left, const param_type& _Right) {\r\n            return !(_Left == _Right);\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n        _NODISCARD vector<_Ty> intervals() const {\r\n            return _Bvec;\r\n        }\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4244) // '%s': conversion from '%s' to '%s', possible loss of data\r\n        _NODISCARD vector<_Ty> densities() const {\r\n            vector<_Ty> _Ans(_Pvec.begin(), _Pvec.end());\r\n            return _Ans;\r\n        }\r\n#pragma warning(pop)\r\n\r\n        _NODISCARD double _Piece_probability(const size_t _Idx) const {\r\n            return 0.5 * (_Pvec[_Idx] + _Pvec[_Idx + 1]) * static_cast<double>(_Bvec[_Idx + 1] - _Bvec[_Idx]);\r\n        }\r\n\r\n        void _Init_base(const bool _Renorm = true) { // initialize like discrete_distribution::param_type\r\n            const size_t _Size = _Pvec.size();\r\n\r\n            if (_Renorm) {\r\n                if (_Pvec.empty()) {\r\n                    _Pvec.push_back(1.0); // make empty vector degenerate\r\n                } else { // normalize probabilities\r\n                    double _Sum = 0;\r\n\r\n                    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) { // sum all probabilities\r\n                        _STL_ASSERT(0.0 <= _Pvec[_Idx], \"invalid probability for piecewise_linear_distribution\");\r\n                        _Sum += _Pvec[_Idx];\r\n                    }\r\n\r\n                    _STL_ASSERT(0.0 < _Sum, \"invalid probability vector for piecewise_linear_distribution\");\r\n                    if (_Sum != 1.0) {\r\n                        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n                            _Pvec[_Idx] /= _Sum;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            _Pcdf.assign(1, _Pvec[0]);\r\n            for (size_t _Idx = 1; _Idx < _Size; ++_Idx) {\r\n                _Pcdf.push_back(_Pvec[_Idx] + _Pcdf[_Idx - 1]);\r\n            }\r\n        }\r\n\r\n        void _Init(const bool _Renorm = true) { // initialize\r\n            const size_t _Size = _Pvec.size();\r\n\r\n            if (_Renorm) {\r\n                if (_Pvec.empty()) { // make empty vector degenerate\r\n                    _Pvec = {1.0, 1.0};\r\n                } else { // normalize probabilities\r\n                    double _Sum = 0;\r\n\r\n                    _STL_ASSERT(0.0 <= _Pvec[0], \"invalid probability for piecewise_linear_distribution\");\r\n                    for (size_t _Idx = 1; _Idx < _Size; ++_Idx) { // sum all probabilities\r\n                        _STL_ASSERT(0.0 <= _Pvec[_Idx], \"invalid probability for piecewise_linear_distribution\");\r\n                        _Sum += _Piece_probability(_Idx - 1);\r\n                    }\r\n\r\n                    _STL_ASSERT(0.0 < _Sum, \"invalid probability vector for piecewise_linear_distribution\");\r\n                    if (_Sum != 1.0) {\r\n                        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n                            _Pvec[_Idx] /= _Sum;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            _Pcdf.assign(1, _Piece_probability(0));\r\n            for (size_t _Idx = 2; _Idx < _Size; ++_Idx) {\r\n                _Pcdf.push_back(_Piece_probability(_Idx - 1) + _Pcdf[_Idx - 2]);\r\n            }\r\n        }\r\n\r\n        template <class _Elem, class _Traits>\r\n        basic_istream<_Elem, _Traits>& _Read(basic_istream<_Elem, _Traits>& _Istr) { // read state from _Istr\r\n            size_t _Nvals;\r\n            _Istr >> _Nvals;\r\n            _Pvec.clear();\r\n            for (; 0 < _Nvals; --_Nvals) { // get a value and add to vector\r\n                double _Val;\r\n                _In(_Istr, _Val);\r\n                _Pvec.push_back(_Val);\r\n            }\r\n            _Init_base(false); // don't renormalize, just compute CDF\r\n            return _Istr;\r\n        }\r\n\r\n        template <class _Elem, class _Traits>\r\n        basic_ostream<_Elem, _Traits>& _Write(basic_ostream<_Elem, _Traits>& _Ostr) const { // write state to _Ostr\r\n            _Ostr << ' ' << _Pvec.size();\r\n\r\n            for (const auto& _Val : _Pvec) {\r\n                _Out(_Ostr, _Val);\r\n            }\r\n\r\n            return _Ostr;\r\n        }\r\n\r\n        vector<double> _Pvec;\r\n        vector<double> _Pcdf;\r\n        vector<_Ty> _Bvec;\r\n    };\r\n\r\n    piecewise_linear_distribution() {}\r\n\r\n    template <class _InIt1, class _InIt2>\r\n    piecewise_linear_distribution(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2) : _Par(_First1, _Last1, _First2) {}\r\n\r\n    template <class _Fn>\r\n    piecewise_linear_distribution(initializer_list<_Ty> _Ilist, _Fn _Func) : _Par(_Ilist, _Func) {}\r\n\r\n    template <class _Fn>\r\n    piecewise_linear_distribution(size_t _Count, _Ty _Low, _Ty _High, _Fn _Func) : _Par(_Count, _Low, _High, _Func) {}\r\n\r\n    explicit piecewise_linear_distribution(const param_type& _Par0) : _Par(_Par0) {}\r\n\r\n    _NODISCARD vector<_Ty> intervals() const {\r\n        return _Par.intervals();\r\n    }\r\n\r\n    _NODISCARD vector<_Ty> densities() const {\r\n        return _Par.densities();\r\n    }\r\n\r\n    _NODISCARD param_type param() const {\r\n        return _Par;\r\n    }\r\n\r\n    void param(const param_type& _Par0) { // set parameter package\r\n        _Par = _Par0;\r\n    }\r\n\r\n    _NODISCARD result_type(min)() const noexcept /* strengthened */ {\r\n        return _Par._Bvec.front();\r\n    }\r\n\r\n    _NODISCARD result_type(max)() const noexcept /* strengthened */ {\r\n        return _Par._Bvec.back();\r\n    }\r\n\r\n    void reset() noexcept /* strengthened */ {} // clear internal state\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par);\r\n    }\r\n\r\n    template <class _Engine>\r\n    _NODISCARD result_type operator()(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        return _Eval(_Eng, _Par0);\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(\r\n        const piecewise_linear_distribution& _Left, const piecewise_linear_distribution& _Right) {\r\n        return _Left.param() == _Right.param();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(\r\n        const piecewise_linear_distribution& _Left, const piecewise_linear_distribution& _Right) {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr,\r\n        piecewise_linear_distribution& _Dist) { // read state from _Istr\r\n        _Dist._Par._Read(_Istr);\r\n\r\n        _Dist._Par._Bvec.clear();\r\n        for (size_t _Idx = _Dist._Par._Pvec.size(); 0 < _Idx; --_Idx) {\r\n            // get a value and add to intervals vector\r\n            double _Val;\r\n            _In(_Istr, _Val);\r\n            _Dist._Par._Bvec.push_back(_Val);\r\n        }\r\n        _Dist._Par._Init(false); // don't renormalize, just compute CDF\r\n        return _Istr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits>\r\n    friend basic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr,\r\n        const piecewise_linear_distribution& _Dist) { // write state to _Ostr\r\n        _Dist._Par._Write(_Ostr);\r\n\r\n        for (const auto& _Val : _Dist._Par._Bvec) {\r\n            _Out(_Ostr, _Val);\r\n        }\r\n\r\n        return _Ostr;\r\n    }\r\n\r\n    template <class _Engine>\r\n    result_type _Eval(_Engine& _Eng, const param_type& _Par0) _DISTRIBUTION_CONST {\r\n        size_t _Px  = discrete_distribution<size_t>::_Invoke_param_pcdf(_Eng, _Par0._Pcdf);\r\n        double _Px0 = _Par0._Pvec[_Px];\r\n        double _Px1 = _Par0._Pvec[_Px + 1];\r\n        uniform_real_distribution<_Ty> _Dist;\r\n        result_type _Xx0 = _Dist(_Eng);\r\n\r\n        if (_Px0 != _Px1) {\r\n            _Xx0 = static_cast<result_type>(\r\n                (_STD sqrt(_Px0 * _Px0 * (1.0 - _Xx0) + _Px1 * _Px1 * _Xx0) - _Px0) / (_Px1 - _Px0));\r\n        }\r\n\r\n        return _Par0._Bvec[_Px] + _Xx0 * (_Par0._Bvec[_Px + 1] - _Par0._Bvec[_Px]);\r\n    }\r\n\r\n    discrete_distribution<size_t> _Unused; // TRANSITION, ABI: this was a base class subobject\r\n    param_type _Par;\r\n};\r\n\r\n_EXPORT_STD using minstd_rand0 = linear_congruential_engine<unsigned int, 16807, 0, 2147483647>;\r\n_EXPORT_STD using minstd_rand  = linear_congruential_engine<unsigned int, 48271, 0, 2147483647>;\r\n\r\n_EXPORT_STD using mt19937 = mersenne_twister_engine<unsigned int, 32, 624, 397, 31, 0x9908b0df, 11, 0xffffffff, 7,\r\n    0x9d2c5680, 15, 0xefc60000, 18, 1812433253>;\r\n\r\n_EXPORT_STD using mt19937_64 = mersenne_twister_engine<unsigned long long, 64, 312, 156, 31, 0xb5026f5aa96619e9ULL, 29,\r\n    0x5555555555555555ULL, 17, 0x71d67fffeda60000ULL, 37, 0xfff7eee000000000ULL, 43, 6364136223846793005ULL>;\r\n\r\n_EXPORT_STD using ranlux24_base = subtract_with_carry_engine<unsigned int, 24, 10, 24>;\r\n_EXPORT_STD using ranlux48_base = subtract_with_carry_engine<unsigned long long, 48, 5, 12>;\r\n_EXPORT_STD using ranlux24      = discard_block_engine<ranlux24_base, 223, 23>;\r\n_EXPORT_STD using ranlux48      = discard_block_engine<ranlux48_base, 389, 11>;\r\n_EXPORT_STD using knuth_b       = shuffle_order_engine<minstd_rand0, 256>;\r\n\r\n_EXPORT_STD using default_random_engine = mt19937;\r\n\r\nextern \"C++\" _CRTIMP2_PURE unsigned int __CLRCALL_PURE_OR_CDECL _Random_device();\r\n\r\n_EXPORT_STD class random_device { // class to generate random numbers (from hardware where available)\r\npublic:\r\n    using result_type = unsigned int;\r\n\r\n    random_device() = default;\r\n\r\n    explicit random_device(const string&) noexcept /* strengthened */ {}\r\n\r\n    _NODISCARD static constexpr result_type(min)() noexcept /* strengthened */ {\r\n        return 0;\r\n    }\r\n\r\n    _NODISCARD static constexpr result_type(max)() noexcept /* strengthened */ {\r\n        return static_cast<result_type>(-1);\r\n    }\r\n\r\n    _NODISCARD double entropy() const noexcept {\r\n        return 32.0;\r\n    }\r\n\r\n    _NODISCARD result_type operator()() {\r\n        return _Random_device();\r\n    }\r\n\r\n    random_device(const random_device&)            = delete;\r\n    random_device& operator=(const random_device&) = delete;\r\n};\r\n_STD_END\r\n\r\n#undef _DISTRIBUTION_CONST\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _RANDOM_\r\n"
  },
  {
    "path": "stl/inc/ranges",
    "content": "// ranges standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _RANGES_\r\n#define _RANGES_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#if !_HAS_CXX20\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <ranges> are available only with C++20 or later.\");\r\n#else // ^^^ !_HAS_CXX20 / _HAS_CXX20 vvv\r\n#include <__msvc_int128.hpp>\r\n#include <__msvc_ranges_to.hpp>\r\n#include <iosfwd>\r\n#include <iterator>\r\n#include <limits>\r\n#include <span>\r\n#include <string_view>\r\n#include <tuple>\r\n\r\n#if _HAS_CXX23\r\n#include <array>\r\n#include <bit>\r\n#endif // _HAS_CXX23\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\nnamespace ranges {\r\n    // MUCH machinery defined in <xutility>, some in <__msvc_ranges_to.hpp>\r\n\r\n    template <auto> // _Require_constant<E> is a valid template-id iff E is a constant expression of structural type\r\n    struct _Require_constant;\r\n\r\n#if _HAS_CXX23\r\n    _EXPORT_STD template <range _Rng>\r\n    using const_iterator_t = decltype(_RANGES cbegin(_STD declval<_Rng&>()));\r\n\r\n    _EXPORT_STD template <range _Rng>\r\n    using const_sentinel_t = decltype(_RANGES cend(_STD declval<_Rng&>()));\r\n\r\n    _EXPORT_STD template <range _Rng>\r\n    using range_const_reference_t = iter_const_reference_t<iterator_t<_Rng>>;\r\n\r\n    template <range _Ty>\r\n    constexpr auto _Compile_time_max_size = (numeric_limits<_Make_unsigned_like_t<range_difference_t<_Ty>>>::max)();\r\n\r\n    template <sized_range _Ty>\r\n    constexpr auto _Compile_time_max_size<_Ty> = (numeric_limits<range_size_t<_Ty>>::max)();\r\n\r\n#ifdef __EDG__ // TRANSITION, VSO-1898880\r\n    template <class _Ty>\r\n    concept _Constant_sized_range = sized_range<_Ty> && requires { typename _Require_constant<_Ty::size()>; };\r\n\r\n    template <_Constant_sized_range _Ty>\r\n    constexpr auto _Compile_time_max_size<_Ty> = _Ty::size();\r\n#else // ^^^ workaround / no workaround vvv\r\n    template <sized_range _Ty>\r\n        requires requires { typename _Require_constant<_Ty::size()>; }\r\n    constexpr auto _Compile_time_max_size<_Ty> = _Ty::size();\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    template <class _Ty, size_t _Size>\r\n    constexpr auto _Compile_time_max_size<_Ty[_Size]> = _Size;\r\n\r\n    template <class _Ty, size_t _Size>\r\n    constexpr auto _Compile_time_max_size<array<_Ty, _Size>> = _Size;\r\n\r\n    template <class _Ty, size_t _Size>\r\n    constexpr auto _Compile_time_max_size<const array<_Ty, _Size>> = _Size;\r\n\r\n    template <class _Ty, size_t _Extent>\r\n        requires (_Extent != dynamic_extent)\r\n    constexpr auto _Compile_time_max_size<span<_Ty, _Extent>> = _Extent;\r\n\r\n    template <class _Ty, size_t _Extent>\r\n        requires (_Extent != dynamic_extent)\r\n    constexpr auto _Compile_time_max_size<const span<_Ty, _Extent>> = _Extent;\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Rng>\r\n    concept _Simple_view = view<_Rng> && range<const _Rng> && same_as<iterator_t<_Rng>, iterator_t<const _Rng>>\r\n                        && same_as<sentinel_t<_Rng>, sentinel_t<const _Rng>>;\r\n\r\n    template <class _It>\r\n    concept _Has_arrow = input_iterator<_It> && (is_pointer_v<_It> || _Has_member_arrow<const _It&>);\r\n\r\n    template <bool _IsWrapped, class _Ty>\r\n    using _Maybe_wrapped = conditional_t<_IsWrapped, _Ty, _Unwrapped_t<_Ty>>;\r\n\r\n    template <range _Rng, class _Derived>\r\n    class _Cached_position : public view_interface<_Derived> {\r\n        static_assert(false, \"A range must be at least forward for position caching to be worthwhile.\");\r\n    };\r\n\r\n    template <forward_range _Rng, class _Derived>\r\n    class _Cached_position<_Rng, _Derived> : public view_interface<_Derived> {\r\n    private:\r\n        using _It = iterator_t<_Rng>;\r\n\r\n        /* [[no_unique_address]] */ _It _Pos{};\r\n        bool _Cached = false;\r\n\r\n    protected:\r\n        _Cached_position()  = default;\r\n        ~_Cached_position() = default;\r\n\r\n        // a copied iterator doesn't point into a copied range, so cache values must not propagate via copy\r\n        constexpr _Cached_position(const _Cached_position&) noexcept(is_nothrow_default_constructible_v<_It>) {}\r\n        constexpr _Cached_position& operator=(const _Cached_position&) noexcept(noexcept(_Pos = _It{})) {\r\n            _Pos    = _It{};\r\n            _Cached = false;\r\n            return *this;\r\n        }\r\n\r\n        // a moved iterator doesn't point into a moved range, so cache values must not propagate via move;\r\n        // similarly, a cache value might not be valid for a moved-from view so clear move sources\r\n        constexpr _Cached_position(_Cached_position&& _Other) noexcept(noexcept(_Pos = _It{})) {\r\n            _Other._Pos    = _It{};\r\n            _Other._Cached = false;\r\n        }\r\n        constexpr _Cached_position& operator=(_Cached_position&& _Other) noexcept(noexcept(_Pos = _It{})) {\r\n            _Pos           = _It{};\r\n            _Cached        = false;\r\n            _Other._Pos    = _It{};\r\n            _Other._Cached = false;\r\n            return *this;\r\n        }\r\n\r\n        _NODISCARD constexpr bool _Has_cache() const noexcept { // Is there a cached position?\r\n            return _Cached;\r\n        }\r\n\r\n        _NODISCARD constexpr _It _Get_cache(_Rng&) const noexcept(is_nothrow_copy_constructible_v<_It>) {\r\n            _STL_INTERNAL_CHECK(_Cached);\r\n            return _Pos;\r\n        }\r\n\r\n        constexpr void _Set_cache(_Rng&, _It _Iter) noexcept(is_nothrow_move_assignable_v<_It>) {\r\n            _Pos    = _STD move(_Iter);\r\n            _Cached = true;\r\n        }\r\n    };\r\n\r\n    template <random_access_range _Rng, class _Derived>\r\n    class _Cached_position<_Rng, _Derived> : public view_interface<_Derived> {\r\n    private:\r\n        using _It = iterator_t<_Rng>;\r\n\r\n        range_difference_t<_Rng> _Off = -1;\r\n\r\n    protected:\r\n        _Cached_position()  = default;\r\n        ~_Cached_position() = default;\r\n\r\n        // Offsets are oblivious to copying, so cache values _do_ propagate via copying.\r\n        _Cached_position(const _Cached_position&)            = default;\r\n        _Cached_position& operator=(const _Cached_position&) = default;\r\n\r\n        // Offsets are potentially invalidated by move, so source caches are invalidated after move\r\n        constexpr _Cached_position(_Cached_position&& _Other) noexcept\r\n            : _Off(_STD exchange(_Other._Off, range_difference_t<_Rng>{-1})) {}\r\n        constexpr _Cached_position& operator=(_Cached_position&& _Other) noexcept {\r\n            _Off = _STD exchange(_Other._Off, range_difference_t<_Rng>{-1});\r\n            return *this;\r\n        }\r\n\r\n        _NODISCARD constexpr bool _Has_cache() const noexcept { // Is there a cached position?\r\n            return _Off >= range_difference_t<_Rng>{0};\r\n        }\r\n\r\n        _NODISCARD constexpr _It _Get_cache(_Rng& _Range) const noexcept(noexcept(_RANGES begin(_Range) + _Off)) {\r\n            _STL_INTERNAL_CHECK(_Has_cache());\r\n            return _RANGES begin(_Range) + _Off;\r\n        }\r\n\r\n        constexpr void _Set_cache(_Rng& _Range, const _It& _Iter)\r\n            noexcept(noexcept(_Off = _Iter - _RANGES begin(_Range))) {\r\n            _Off = _Iter - _RANGES begin(_Range);\r\n        }\r\n    };\r\n\r\n    template <bool _Enable, class _Rng, class _Derived>\r\n    using _Cached_position_t = conditional_t<_Enable, _Cached_position<_Rng, _Derived>, view_interface<_Derived>>;\r\n\r\n    template <movable _Ty>\r\n    class _Defaultabox { // a simplified optional that augments movable types with default-constructibility\r\n    public:\r\n        constexpr _Defaultabox() noexcept {}\r\n\r\n        constexpr ~_Defaultabox() {\r\n            if (_Engaged) {\r\n                _Val.~_Ty();\r\n            }\r\n        }\r\n\r\n        ~_Defaultabox()\r\n            requires is_trivially_destructible_v<_Ty>\r\n        = default;\r\n\r\n        _Defaultabox(const _Defaultabox&)\r\n            requires copy_constructible<_Ty> && is_trivially_copy_constructible_v<_Ty>\r\n        = default;\r\n\r\n        constexpr _Defaultabox(const _Defaultabox& _That) noexcept(is_nothrow_copy_constructible_v<_Ty>)\r\n            requires copy_constructible<_Ty>\r\n            : _Engaged{_That._Engaged} {\r\n            if (_That._Engaged) {\r\n                _STD _Construct_in_place(_Val, static_cast<const _Ty&>(_That._Val));\r\n            }\r\n        }\r\n\r\n        _Defaultabox(_Defaultabox&&)\r\n            requires is_trivially_move_constructible_v<_Ty>\r\n        = default;\r\n\r\n        constexpr _Defaultabox(_Defaultabox&& _That) noexcept(is_nothrow_move_constructible_v<_Ty>)\r\n            : _Engaged{_That._Engaged} {\r\n            if (_That._Engaged) {\r\n                _STD _Construct_in_place(_Val, static_cast<_Ty&&>(_That._Val));\r\n            }\r\n        }\r\n\r\n        template <_Different_from<_Ty> _Uty>\r\n            requires convertible_to<const _Uty&, _Ty>\r\n        constexpr _Defaultabox(const _Defaultabox<_Uty>& _That) noexcept(is_nothrow_constructible_v<_Ty, const _Uty&>)\r\n            : _Engaged{_That} {\r\n            if (_That) {\r\n                _STD _Construct_in_place(_Val, *_That);\r\n            }\r\n        }\r\n\r\n        template <_Different_from<_Ty> _Uty>\r\n            requires convertible_to<_Uty, _Ty>\r\n        constexpr _Defaultabox(_Defaultabox<_Uty>&& _That) noexcept(is_nothrow_constructible_v<_Ty, _Uty>)\r\n            : _Engaged{_That} {\r\n            if (_That) {\r\n                _STD _Construct_in_place(_Val, _STD move(*_That));\r\n            }\r\n        }\r\n\r\n        _Defaultabox& operator=(const _Defaultabox&) noexcept\r\n            requires copyable<_Ty> && is_trivially_copy_assignable_v<_Ty>\r\n        = default;\r\n\r\n        constexpr _Defaultabox& operator=(const _Defaultabox& _That)\r\n            noexcept(is_nothrow_copy_constructible_v<_Ty> && is_nothrow_copy_assignable_v<_Ty>)\r\n            requires copyable<_Ty>\r\n        {\r\n            if (_Engaged) {\r\n                if (_That._Engaged) {\r\n                    static_cast<_Ty&>(_Val) = static_cast<const _Ty&>(_That._Val);\r\n                } else {\r\n                    _Val.~_Ty();\r\n                    _Engaged = false;\r\n                }\r\n            } else {\r\n                if (_That._Engaged) {\r\n                    _STD _Construct_in_place(_Val, static_cast<const _Ty&>(_That._Val));\r\n                    _Engaged = true;\r\n                } else {\r\n                    // nothing to do\r\n                }\r\n            }\r\n\r\n            return *this;\r\n        }\r\n\r\n        _Defaultabox& operator=(_Defaultabox&&) noexcept\r\n            requires is_trivially_move_assignable_v<_Ty>\r\n        = default;\r\n\r\n        constexpr _Defaultabox& operator=(_Defaultabox&& _That)\r\n            noexcept(is_nothrow_move_constructible_v<_Ty> && is_nothrow_move_assignable_v<_Ty>) {\r\n            if (_Engaged) {\r\n                if (_That._Engaged) {\r\n                    static_cast<_Ty&>(_Val) = static_cast<_Ty&&>(_That._Val);\r\n                } else {\r\n                    _Val.~_Ty();\r\n                    _Engaged = false;\r\n                }\r\n            } else {\r\n                if (_That._Engaged) {\r\n                    _STD _Construct_in_place(_Val, static_cast<_Ty&&>(_That._Val));\r\n                    _Engaged = true;\r\n                } else {\r\n                    // nothing to do\r\n                }\r\n            }\r\n\r\n            return *this;\r\n        }\r\n\r\n        constexpr _Defaultabox& operator=(_Ty&& _That)\r\n            noexcept(is_nothrow_move_constructible_v<_Ty> && is_nothrow_move_assignable_v<_Ty>) {\r\n            if (_Engaged) {\r\n                static_cast<_Ty&>(_Val) = _STD move(_That);\r\n            } else {\r\n                _STD _Construct_in_place(_Val, _STD move(_That));\r\n                _Engaged = true;\r\n            }\r\n\r\n            return *this;\r\n        }\r\n\r\n        constexpr _Defaultabox& operator=(const _Ty& _That)\r\n            noexcept(is_nothrow_copy_constructible_v<_Ty> && is_nothrow_copy_assignable_v<_Ty>)\r\n            requires copyable<_Ty>\r\n        {\r\n            if (_Engaged) {\r\n                static_cast<_Ty&>(_Val) = _That;\r\n            } else {\r\n                _STD _Construct_in_place(_Val, _That);\r\n                _Engaged = true;\r\n            }\r\n\r\n            return *this;\r\n        }\r\n\r\n        constexpr explicit operator bool() const noexcept {\r\n            return _Engaged;\r\n        }\r\n\r\n        _NODISCARD constexpr _Ty& operator*() noexcept {\r\n            _STL_INTERNAL_CHECK(_Engaged);\r\n            return _Val;\r\n        }\r\n        _NODISCARD constexpr const _Ty& operator*() const noexcept {\r\n            _STL_INTERNAL_CHECK(_Engaged);\r\n            return _Val;\r\n        }\r\n\r\n        constexpr void _Reset() noexcept {\r\n            if (_Engaged) {\r\n                _Val.~_Ty();\r\n                _Engaged = false;\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr bool operator==(const _Defaultabox& _That) const\r\n            noexcept(noexcept(static_cast<const _Ty&>(_Val) == static_cast<const _Ty&>(_That._Val))) {\r\n            _STL_INTERNAL_STATIC_ASSERT(equality_comparable<_Ty>);\r\n            return _Engaged == _That._Engaged\r\n                && (!_Engaged || static_cast<const _Ty&>(_Val) == static_cast<const _Ty&>(_That._Val));\r\n        }\r\n\r\n    private:\r\n        union {\r\n            remove_cv_t<_Ty> _Val;\r\n        };\r\n        bool _Engaged = false;\r\n    };\r\n\r\n    template <movable _Ty>\r\n        requires default_initializable<_Ty>\r\n    class _Defaultabox<_Ty> { // provide the same API more efficiently for default-constructible types\r\n    public:\r\n        _Defaultabox() = default;\r\n\r\n        template <_Different_from<_Ty> _Uty>\r\n            requires convertible_to<const _Uty&, _Ty>\r\n        constexpr _Defaultabox(const _Defaultabox<_Uty>& _That)\r\n            noexcept(is_nothrow_default_constructible_v<_Ty> && noexcept(_Value = static_cast<_Ty>(*_That))) {\r\n            if (_That) {\r\n                _Value = static_cast<_Ty>(*_That);\r\n            }\r\n        }\r\n\r\n        template <_Different_from<_Ty> _Uty>\r\n            requires convertible_to<_Uty, _Ty>\r\n        constexpr _Defaultabox(_Defaultabox<_Uty>&& _That) noexcept(\r\n            is_nothrow_default_constructible_v<_Ty> && noexcept(_Value = static_cast<_Ty>(_STD move(*_That)))) {\r\n            if (_That) {\r\n                _Value = static_cast<_Ty>(_STD move(*_That));\r\n            }\r\n        }\r\n\r\n        constexpr _Defaultabox& operator=(const _Ty& _Right) noexcept(is_nothrow_copy_assignable_v<_Ty>)\r\n            requires copyable<_Ty>\r\n        {\r\n            _Value = _Right;\r\n            return *this;\r\n        }\r\n        constexpr _Defaultabox& operator=(_Ty&& _Right) noexcept(is_nothrow_move_assignable_v<_Ty>) {\r\n            _Value = _STD move(_Right);\r\n            return *this;\r\n        }\r\n\r\n        constexpr explicit operator bool() const noexcept {\r\n            return true;\r\n        }\r\n\r\n        _NODISCARD constexpr _Ty& operator*() noexcept {\r\n            return _Value;\r\n        }\r\n        _NODISCARD constexpr const _Ty& operator*() const noexcept {\r\n            return _Value;\r\n        }\r\n\r\n        constexpr void _Reset() noexcept(noexcept(_Value = _Ty{})) {\r\n            _Value = _Ty{};\r\n        }\r\n\r\n        _NODISCARD bool operator==(const _Defaultabox&) const = default;\r\n\r\n    private:\r\n        /* [[no_unique_address]] */ _Ty _Value{};\r\n    };\r\n\r\n    template <_Destructible_object _Ty, bool _Needs_operator_bool = true>\r\n    class _Non_propagating_cache { // a simplified optional that resets on copy / move\r\n    public:\r\n        constexpr _Non_propagating_cache() noexcept {}\r\n\r\n        constexpr ~_Non_propagating_cache() {\r\n            if (_Engaged) {\r\n                _Val.~_Ty();\r\n            }\r\n        }\r\n\r\n        ~_Non_propagating_cache()\r\n            requires is_trivially_destructible_v<_Ty>\r\n        = default;\r\n\r\n        constexpr _Non_propagating_cache(const _Non_propagating_cache&) noexcept {}\r\n\r\n        constexpr _Non_propagating_cache(_Non_propagating_cache&& _Other) noexcept {\r\n            if (_Other._Engaged) {\r\n                _Other._Val.~_Ty();\r\n                _Other._Engaged = false;\r\n            }\r\n        }\r\n\r\n        constexpr _Non_propagating_cache& operator=(const _Non_propagating_cache& _Other) noexcept {\r\n            if (_STD addressof(_Other) == this) {\r\n                return *this;\r\n            }\r\n\r\n            if (_Engaged) {\r\n                _Val.~_Ty();\r\n                _Engaged = false;\r\n            }\r\n\r\n            return *this;\r\n        }\r\n\r\n        constexpr _Non_propagating_cache& operator=(_Non_propagating_cache&& _Other) noexcept {\r\n            if (_Engaged) {\r\n                _Val.~_Ty();\r\n                _Engaged = false;\r\n            }\r\n\r\n            if (_Other._Engaged) {\r\n                _Other._Val.~_Ty();\r\n                _Other._Engaged = false;\r\n            }\r\n\r\n            return *this;\r\n        }\r\n\r\n        _NODISCARD constexpr explicit operator bool() const noexcept\r\n            requires _Needs_operator_bool\r\n        {\r\n            return _Engaged;\r\n        }\r\n\r\n        _NODISCARD constexpr _Ty& operator*() noexcept {\r\n            _STL_INTERNAL_CHECK(_Engaged);\r\n            return _Val;\r\n        }\r\n        _NODISCARD constexpr const _Ty& operator*() const noexcept {\r\n            _STL_INTERNAL_CHECK(_Engaged);\r\n            return _Val;\r\n        }\r\n\r\n        template <class... _Types>\r\n        constexpr _Ty& _Emplace(_Types&&... _Args) noexcept(is_nothrow_constructible_v<_Ty, _Types...>) {\r\n            if (_Engaged) {\r\n                _Val.~_Ty();\r\n                _Engaged = false;\r\n            }\r\n\r\n            _STD _Construct_in_place(_Val, _STD forward<_Types>(_Args)...);\r\n            _Engaged = true;\r\n\r\n            return _Val;\r\n        }\r\n\r\n    private:\r\n        union {\r\n            remove_cv_t<_Ty> _Val;\r\n        };\r\n        bool _Engaged = false;\r\n    };\r\n\r\n    template <_Destructible_object _Ty>\r\n        requires is_trivially_destructible_v<_Ty>\r\n    class _Non_propagating_cache<_Ty, false> { // a specialization for trivially destructible types where checking if\r\n                                               // the cache contains a value is not needed\r\n    public:\r\n        constexpr _Non_propagating_cache() noexcept {}\r\n\r\n        ~_Non_propagating_cache() = default;\r\n\r\n        constexpr _Non_propagating_cache(const _Non_propagating_cache&) noexcept {}\r\n\r\n        constexpr _Non_propagating_cache(_Non_propagating_cache&&) noexcept {}\r\n\r\n        constexpr _Non_propagating_cache& operator=(const _Non_propagating_cache&) noexcept {\r\n            return *this;\r\n        }\r\n\r\n        constexpr _Non_propagating_cache& operator=(_Non_propagating_cache&&) noexcept {\r\n            return *this;\r\n        }\r\n\r\n        _NODISCARD constexpr _Ty& operator*() noexcept {\r\n            return _Val;\r\n        }\r\n        _NODISCARD constexpr const _Ty& operator*() const noexcept {\r\n            return _Val;\r\n        }\r\n\r\n        template <class... _Types>\r\n        constexpr _Ty& _Emplace(_Types&&... _Args) noexcept(is_nothrow_constructible_v<_Ty, _Types...>) {\r\n            _STD _Construct_in_place(_Val, _STD forward<_Types>(_Args)...);\r\n            return _Val;\r\n        }\r\n\r\n    private:\r\n        union {\r\n            remove_cv_t<_Ty> _Val;\r\n        };\r\n    };\r\n\r\n#if _HAS_CXX23\r\n    _EXPORT_STD template <class _Derived>\r\n        requires is_class_v<_Derived> && same_as<_Derived, remove_cv_t<_Derived>>\r\n    class _NO_SPECIALIZATIONS_CITING(\"N5014 [range.adaptor.object]/5\") range_adaptor_closure\r\n        : public _Pipe::_Base<_Derived> {};\r\n#endif // _HAS_CXX23\r\n\r\n    _EXPORT_STD template <class _Ty>\r\n        requires is_object_v<_Ty>\r\n    class empty_view : public view_interface<empty_view<_Ty>> {\r\n    public:\r\n        _NODISCARD static constexpr _Ty* begin() noexcept {\r\n            return nullptr;\r\n        }\r\n\r\n        _NODISCARD static constexpr _Ty* end() noexcept {\r\n            return nullptr;\r\n        }\r\n\r\n        _NODISCARD static constexpr _Ty* data() noexcept {\r\n            return nullptr;\r\n        }\r\n\r\n        _NODISCARD static constexpr size_t size() noexcept {\r\n            return 0;\r\n        }\r\n\r\n        _NODISCARD static constexpr bool empty() noexcept {\r\n            return true;\r\n        }\r\n    };\r\n\r\n    template <class _Ty>\r\n    constexpr bool enable_borrowed_range<empty_view<_Ty>> = true;\r\n\r\n    namespace views {\r\n        _EXPORT_STD template <class _Ty>\r\n        constexpr empty_view<_Ty> empty;\r\n    } // namespace views\r\n\r\n    _EXPORT_STD template <_Valid_movable_box_object _Ty>\r\n    class single_view : public view_interface<single_view<_Ty>> {\r\n    public:\r\n        single_view()\r\n            requires default_initializable<_Ty>\r\n        = default;\r\n\r\n        constexpr explicit single_view(const _Ty& _Val_) noexcept(is_nothrow_copy_constructible_v<_Ty>) // strengthened\r\n            requires copy_constructible<_Ty>\r\n            : _Val{in_place, _Val_} {}\r\n        constexpr explicit single_view(_Ty&& _Val_) noexcept(is_nothrow_move_constructible_v<_Ty>) // strengthened\r\n            : _Val{in_place, _STD move(_Val_)} {}\r\n\r\n        template <class... _Types>\r\n            requires constructible_from<_Ty, _Types...>\r\n        constexpr explicit single_view(in_place_t, _Types&&... _Args)\r\n            noexcept(is_nothrow_constructible_v<_Ty, _Types...>) // strengthened\r\n            : _Val{in_place, _STD forward<_Types>(_Args)...} {}\r\n\r\n        _NODISCARD constexpr _Ty* begin() noexcept {\r\n            return data();\r\n        }\r\n        _NODISCARD constexpr const _Ty* begin() const noexcept {\r\n            return data();\r\n        }\r\n\r\n        _NODISCARD constexpr _Ty* end() noexcept {\r\n            return data() + 1;\r\n        }\r\n        _NODISCARD constexpr const _Ty* end() const noexcept {\r\n            return data() + 1;\r\n        }\r\n\r\n        _NODISCARD static constexpr bool empty() noexcept {\r\n            return false;\r\n        }\r\n\r\n        _NODISCARD static constexpr size_t size() noexcept {\r\n            return 1;\r\n        }\r\n\r\n        _NODISCARD constexpr _Ty* data() noexcept {\r\n            return _STD addressof(*_Val);\r\n        }\r\n        _NODISCARD constexpr const _Ty* data() const noexcept {\r\n            return _STD addressof(*_Val);\r\n        }\r\n\r\n    private:\r\n        /* [[no_unique_address]] */ _Movable_box<_Ty> _Val{};\r\n    };\r\n\r\n    template <class _Ty>\r\n    single_view(_Ty) -> single_view<_Ty>;\r\n\r\n    namespace views {\r\n        struct _Single_fn {\r\n            template <class _Ty>\r\n            _NODISCARD static constexpr auto operator()(_Ty&& _Val)\r\n                noexcept(noexcept(single_view<decay_t<_Ty>>(_STD forward<_Ty>(_Val))))\r\n                requires requires {\r\n                    typename single_view<decay_t<_Ty>>;\r\n                    single_view<decay_t<_Ty>>(static_cast<_Ty &&>(_Val));\r\n                }\r\n            {\r\n                return single_view<decay_t<_Ty>>(_STD forward<_Ty>(_Val));\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Single_fn single;\r\n    } // namespace views\r\n\r\n    template <class _Ty>\r\n    using _Iota_diff_t = conditional_t<is_integral_v<_Ty>,\r\n        conditional_t<sizeof(_Ty) < sizeof(int), int,\r\n            conditional_t<sizeof(_Ty) < sizeof(long long), long long, _Signed128>>,\r\n        iter_difference_t<_Ty>>;\r\n\r\n    template <class _Ty>\r\n    concept _Decrementable = incrementable<_Ty> && requires(_Ty __t) {\r\n        { --__t } -> same_as<_Ty&>;\r\n        { __t-- } -> same_as<_Ty>;\r\n    };\r\n\r\n    template <class _Ty>\r\n    concept _Advanceable =\r\n        _Decrementable<_Ty> && totally_ordered<_Ty> && requires(_Ty __i, const _Ty __j, const _Iota_diff_t<_Ty> __n) {\r\n            { __i += __n } -> same_as<_Ty&>;\r\n            { __i -= __n } -> same_as<_Ty&>;\r\n            _Ty(__j + __n);\r\n            _Ty(__n + __j);\r\n            _Ty(__j - __n);\r\n            { __j - __j } -> convertible_to<_Iota_diff_t<_Ty>>;\r\n        };\r\n\r\n    template <class _Wi>\r\n    struct _Ioterator_category_base {};\r\n\r\n    template <incrementable _Wi>\r\n        requires integral<_Iota_diff_t<_Wi>>\r\n    struct _Ioterator_category_base<_Wi> {\r\n        using iterator_category = input_iterator_tag;\r\n    };\r\n\r\n    template <weakly_incrementable _Wi>\r\n        requires copyable<_Wi>\r\n    struct _Ioterator : _Ioterator_category_base<_Wi> {\r\n        /* [[no_unique_address]] */ _Wi _Current{};\r\n\r\n        using iterator_concept = conditional_t<_Advanceable<_Wi>, random_access_iterator_tag,\r\n            conditional_t<_Decrementable<_Wi>, bidirectional_iterator_tag,\r\n                conditional_t<incrementable<_Wi>, forward_iterator_tag, input_iterator_tag>>>;\r\n        using value_type       = _Wi;\r\n        using difference_type  = _Iota_diff_t<_Wi>;\r\n\r\n        _Ioterator()\r\n            requires default_initializable<_Wi>\r\n        = default;\r\n\r\n        constexpr explicit _Ioterator(_Wi _Val) noexcept(is_nothrow_move_constructible_v<_Wi>) /* strengthened */\r\n            : _Current(_STD move(_Val)) {}\r\n\r\n        _NODISCARD constexpr _Wi operator*() const noexcept(is_nothrow_copy_constructible_v<_Wi>) {\r\n            return _Current;\r\n        }\r\n\r\n        constexpr _Ioterator& operator++() noexcept(noexcept(++_Current)) /* strengthened */ {\r\n            ++_Current;\r\n            return *this;\r\n        }\r\n\r\n        constexpr auto operator++(int) noexcept(\r\n            noexcept(++_Current) && (!incrementable<_Wi> || is_nothrow_copy_constructible_v<_Wi>) ) /* strengthened */ {\r\n            if constexpr (incrementable<_Wi>) {\r\n                auto _Tmp = *this;\r\n                ++_Current;\r\n                return _Tmp;\r\n            } else {\r\n                ++_Current;\r\n            }\r\n        }\r\n\r\n        constexpr _Ioterator& operator--() noexcept(noexcept(--_Current)) /* strengthened */\r\n            requires _Decrementable<_Wi>\r\n        {\r\n            --_Current;\r\n            return *this;\r\n        }\r\n\r\n        constexpr _Ioterator operator--(int) noexcept(is_nothrow_copy_constructible_v<_Wi> //\r\n                                                      && noexcept(--_Current)) /* strengthened */\r\n            requires _Decrementable<_Wi>\r\n        {\r\n            auto _Tmp = *this;\r\n            --_Current;\r\n            return _Tmp;\r\n        }\r\n\r\n#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, DevCom-1347136\r\n    private:\r\n        template <class _Left, class _Right>\r\n        static constexpr bool _Nothrow_plus_equal = noexcept(_STD declval<_Left&>() += _STD declval<const _Right&>());\r\n        template <_Integer_like _Left, class _Right>\r\n        static constexpr bool _Nothrow_plus_equal<_Left, _Right> = true;\r\n\r\n        template <class _Left, class _Right>\r\n        static constexpr bool _Nothrow_minus_equal = noexcept(_STD declval<_Left&>() -= _STD declval<const _Right&>());\r\n        template <_Integer_like _Left, class _Right>\r\n        static constexpr bool _Nothrow_minus_equal<_Left, _Right> = true;\r\n\r\n    public:\r\n#endif // ^^^ workaround ^^^\r\n\r\n        constexpr _Ioterator& operator+=(const difference_type _Off)\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, DevCom-1347136\r\n            noexcept(noexcept(_Current += _Off)) /* strengthened */\r\n#else // ^^^ no workaround / workaround vvv\r\n            noexcept(_Nothrow_plus_equal<_Wi, difference_type>) /* strengthened */\r\n#endif // ^^^ workaround ^^^\r\n            requires _Advanceable<_Wi>\r\n        {\r\n            if constexpr (_Integer_like<_Wi>) {\r\n                if constexpr (_Signed_integer_like<_Wi>) {\r\n                    _Current = static_cast<_Wi>(_Current + _Off);\r\n                } else {\r\n                    if (_Off >= difference_type{0}) {\r\n                        _Current += static_cast<_Wi>(_Off);\r\n                    } else {\r\n                        _Current -= static_cast<_Wi>(-_Off);\r\n                    }\r\n                }\r\n            } else {\r\n                _Current += _Off;\r\n            }\r\n            return *this;\r\n        }\r\n\r\n        constexpr _Ioterator& operator-=(const difference_type _Off)\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, DevCom-1347136\r\n            noexcept(noexcept(_Current -= _Off)) /* strengthened */\r\n#else // ^^^ no workaround / workaround vvv\r\n            noexcept(_Nothrow_minus_equal<_Wi, difference_type>) /* strengthened */\r\n#endif // ^^^ workaround ^^^\r\n            requires _Advanceable<_Wi>\r\n        {\r\n            if constexpr (_Integer_like<_Wi>) {\r\n                if constexpr (_Signed_integer_like<_Wi>) {\r\n                    _Current = static_cast<_Wi>(_Current - _Off);\r\n                } else {\r\n                    if (_Off >= difference_type{0}) {\r\n                        _Current -= static_cast<_Wi>(_Off);\r\n                    } else {\r\n                        _Current += static_cast<_Wi>(-_Off);\r\n                    }\r\n                }\r\n            } else {\r\n                _Current -= _Off;\r\n            }\r\n            return *this;\r\n        }\r\n\r\n        _NODISCARD constexpr _Wi operator[](const difference_type _Idx) const\r\n            noexcept(noexcept(static_cast<_Wi>(_Current + _Idx))) /* strengthened */\r\n            requires _Advanceable<_Wi>\r\n        {\r\n            if constexpr (_Integer_like<_Wi>) {\r\n                return static_cast<_Wi>(_Current + static_cast<_Wi>(_Idx));\r\n            } else {\r\n                return static_cast<_Wi>(_Current + _Idx);\r\n            }\r\n        }\r\n\r\n        _NODISCARD friend constexpr bool operator==(const _Ioterator& _Left, const _Ioterator& _Right)\r\n            noexcept(noexcept(_Left._Current == _Right._Current))\r\n            requires equality_comparable<_Wi>\r\n        {\r\n            return _Left._Current == _Right._Current;\r\n        }\r\n\r\n        _NODISCARD friend constexpr bool operator<(const _Ioterator& _Left, const _Ioterator& _Right)\r\n            noexcept(noexcept(_Left._Current < _Right._Current)) /* strengthened */\r\n            requires totally_ordered<_Wi>\r\n        {\r\n            return _Left._Current < _Right._Current;\r\n        }\r\n        _NODISCARD friend constexpr bool operator>(const _Ioterator& _Left, const _Ioterator& _Right)\r\n            noexcept(noexcept(_Right._Current < _Left._Current)) /* strengthened */\r\n            requires totally_ordered<_Wi>\r\n        {\r\n            return _Right._Current < _Left._Current;\r\n        }\r\n        _NODISCARD friend constexpr bool operator<=(const _Ioterator& _Left, const _Ioterator& _Right)\r\n            noexcept(noexcept(!(_Right._Current < _Left._Current))) /* strengthened */\r\n            requires totally_ordered<_Wi>\r\n        {\r\n            return !(_Right._Current < _Left._Current);\r\n        }\r\n        _NODISCARD friend constexpr bool operator>=(const _Ioterator& _Left, const _Ioterator& _Right)\r\n            noexcept(noexcept(!(_Left._Current < _Right._Current))) /* strengthened */\r\n            requires totally_ordered<_Wi>\r\n        {\r\n            return !(_Left._Current < _Right._Current);\r\n        }\r\n\r\n        _NODISCARD friend constexpr auto operator<=>(const _Ioterator& _Left, const _Ioterator& _Right)\r\n            noexcept(noexcept(_Left._Current <=> _Right._Current))\r\n            requires totally_ordered<_Wi> && three_way_comparable<_Wi>\r\n        {\r\n            return _Left._Current <=> _Right._Current;\r\n        }\r\n\r\n        _NODISCARD friend constexpr _Ioterator operator+(_Ioterator _It, const difference_type _Off)\r\n            noexcept(is_nothrow_move_constructible_v<_Ioterator> && noexcept(_It += _Off)) /* strengthened */\r\n            requires _Advanceable<_Wi>\r\n        {\r\n            _It += _Off;\r\n            return _It;\r\n        }\r\n        _NODISCARD friend constexpr _Ioterator operator+(const difference_type _Off, _Ioterator _It) noexcept(\r\n            is_nothrow_move_constructible_v<_Wi> && noexcept(static_cast<_Wi>(_It._Current + _Off))) /* strengthened */\r\n            requires _Advanceable<_Wi>\r\n        {\r\n            return _Ioterator{static_cast<_Wi>(_It._Current + _Off)};\r\n        }\r\n\r\n        _NODISCARD friend constexpr _Ioterator operator-(_Ioterator _It, const difference_type _Off)\r\n            noexcept(is_nothrow_move_constructible_v<_Ioterator> && noexcept(_It -= _Off)) /* strengthened */\r\n            requires _Advanceable<_Wi>\r\n        {\r\n            _It -= _Off;\r\n            return _It;\r\n        }\r\n\r\n        _NODISCARD friend constexpr difference_type operator-(const _Ioterator& _Left, const _Ioterator& _Right)\r\n            noexcept(noexcept(_Left._Current - _Right._Current)) /* strengthened */\r\n            requires _Advanceable<_Wi>\r\n        {\r\n            if constexpr (_Integer_like<_Wi>) {\r\n                if constexpr (_Signed_integer_like<_Wi>) {\r\n                    return static_cast<difference_type>(\r\n                        static_cast<difference_type>(_Left._Current) - static_cast<difference_type>(_Right._Current));\r\n                } else if (_Right._Current > _Left._Current) {\r\n                    return static_cast<difference_type>(\r\n                        -static_cast<difference_type>(_Right._Current - _Left._Current));\r\n                } else {\r\n                    return static_cast<difference_type>(_Left._Current - _Right._Current);\r\n                }\r\n            } else {\r\n                return static_cast<difference_type>(_Left._Current - _Right._Current);\r\n            }\r\n        }\r\n    };\r\n\r\n    template <weakly_incrementable _Wi, semiregular _Bo>\r\n        requires _Weakly_equality_comparable_with<_Wi, _Bo> && copyable<_Wi>\r\n    struct _Iotinel {\r\n    private:\r\n        using _It = _Ioterator<_Wi>;\r\n\r\n        _NODISCARD constexpr bool _Equal(const _It& _That) const noexcept(noexcept(_That._Current == _Last)) {\r\n            return _That._Current == _Last;\r\n        }\r\n\r\n        _NODISCARD constexpr iter_difference_t<_Wi> _Delta(const _It& _That) const\r\n            noexcept(noexcept(_Last - _That._Current)) {\r\n            _STL_INTERNAL_STATIC_ASSERT(sized_sentinel_for<_Bo, _Wi>);\r\n            return _Last - _That._Current;\r\n        }\r\n\r\n    public:\r\n        /* [[no_unique_address]] */ _Bo _Last{};\r\n\r\n        _NODISCARD friend constexpr bool operator==(const _It& _Left, const _Iotinel& _Right)\r\n            noexcept(noexcept(_Right._Equal(_Left))) /* strengthened */ {\r\n            return _Right._Equal(_Left);\r\n        }\r\n\r\n        _NODISCARD friend constexpr iter_difference_t<_Wi> operator-(const _It& _Left, const _Iotinel& _Right)\r\n            noexcept(noexcept(_Right._Delta(_Left))) /* strengthened */\r\n            requires sized_sentinel_for<_Bo, _Wi>\r\n        {\r\n            return -_Right._Delta(_Left);\r\n        }\r\n\r\n        _NODISCARD friend constexpr iter_difference_t<_Wi> operator-(const _Iotinel& _Left, const _It& _Right)\r\n            noexcept(noexcept(_Left._Delta(_Right))) /* strengthened */\r\n            requires sized_sentinel_for<_Bo, _Wi>\r\n        {\r\n            return _Left._Delta(_Right);\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD template <weakly_incrementable _Wi, semiregular _Bo = unreachable_sentinel_t>\r\n        requires _Weakly_equality_comparable_with<_Wi, _Bo> && copyable<_Wi>\r\n    class iota_view : public view_interface<iota_view<_Wi, _Bo>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Wi _Value{};\r\n        /* [[no_unique_address]] */ _Bo _Bound{};\r\n\r\n        using _It = _Ioterator<_Wi>;\r\n        using _Se = conditional_t<same_as<_Wi, _Bo>, _It,\r\n            conditional_t<same_as<_Bo, unreachable_sentinel_t>, _Bo, _Iotinel<_Wi, _Bo>>>;\r\n\r\n        _NODISCARD static constexpr _Bo& _Bound_from(_Se& _Last) noexcept {\r\n            if constexpr (same_as<_Wi, _Bo>) {\r\n                return _Last._Current;\r\n            } else if constexpr (same_as<_Bo, unreachable_sentinel_t>) {\r\n                return _Last;\r\n            } else {\r\n                return _Last._Last;\r\n            }\r\n        }\r\n\r\n    public:\r\n        iota_view()\r\n            requires default_initializable<_Wi>\r\n        = default;\r\n\r\n        constexpr explicit iota_view(_Wi _Value_)\r\n            noexcept(is_nothrow_move_constructible_v<_Wi> && is_nothrow_default_constructible_v<_Bo>) // strengthened\r\n            : _Value(_STD move(_Value_)) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            if constexpr (totally_ordered_with<_Wi, _Bo>) {\r\n                _STL_VERIFY(_Value_ <= _Bound, \"Per N4981 [range.iota.view]/6, the first argument must not exceed the \"\r\n                                               \"value-initialized bound when their types are totally ordered.\");\r\n            }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        }\r\n\r\n        constexpr explicit iota_view(type_identity_t<_Wi> _Value_, type_identity_t<_Bo> _Bound_)\r\n            noexcept(is_nothrow_move_constructible_v<_Wi> && is_nothrow_move_constructible_v<_Bo>) // strengthened\r\n            : _Value(_STD move(_Value_)), _Bound(_STD move(_Bound_)) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            if constexpr (totally_ordered_with<_Wi, _Bo>) {\r\n                _STL_VERIFY(_Value_ <= _Bound_, \"Per N4981 [range.iota.view]/8, the first argument must not exceed the \"\r\n                                                \"second when their types are totally ordered.\");\r\n            }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        }\r\n\r\n        constexpr explicit iota_view(_It _First, _Se _Last)\r\n            noexcept(is_nothrow_move_constructible_v<_Wi> && is_nothrow_move_constructible_v<_Bo>) // strengthened\r\n            : _Value(_STD move(_First._Current)), _Bound(_STD move(_Bound_from(_Last))) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            if constexpr (totally_ordered_with<_Wi, _Bo>) {\r\n                _STL_VERIFY(_Value <= _Bound, \"Per N4981 [range.iota.view]/8 and /10, the iterator must not exceed the \"\r\n                                              \"sentinel when their types are totally ordered.\");\r\n            }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        }\r\n\r\n        _NODISCARD constexpr _It begin() const noexcept(is_nothrow_copy_constructible_v<_Wi>) /* strengthened */ {\r\n            return _It{_Value};\r\n        }\r\n\r\n        _NODISCARD constexpr _Se end() const noexcept(is_nothrow_copy_constructible_v<_Bo>) /* strengthened */ {\r\n            if constexpr (same_as<_Wi, _Bo>) {\r\n                return _It{_Bound};\r\n            } else if constexpr (same_as<_Bo, unreachable_sentinel_t>) {\r\n                return unreachable_sentinel;\r\n            } else {\r\n                return _Se{_Bound};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr bool empty() const noexcept(noexcept(_Value == _Bound)) /* strengthened */ {\r\n            return _Value == _Bound;\r\n        }\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4146) // unary minus operator applied to unsigned type, result still unsigned\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_Bound - _Value)) /* strengthened */\r\n            requires (same_as<_Wi, _Bo> && _Advanceable<_Wi>)\r\n                  || (_Integer_like<_Wi> && _Integer_like<_Bo>) || sized_sentinel_for<_Bo, _Wi>\r\n        {\r\n            if constexpr (_Integer_like<_Wi> && _Integer_like<_Bo>) {\r\n                return (_Value < 0) ? ((_Bound < 0) ? (_To_unsigned_like(-_Value) - _To_unsigned_like(-_Bound))\r\n                                                    : (_To_unsigned_like(_Bound) + _To_unsigned_like(-_Value)))\r\n                                    : (_To_unsigned_like(_Bound) - _To_unsigned_like(_Value));\r\n            } else {\r\n                return _To_unsigned_like(_Bound - _Value);\r\n            }\r\n        }\r\n#pragma warning(pop)\r\n    };\r\n\r\n    template <class _Wi, class _Bo>\r\n        requires (\r\n            !_Integer_like<_Wi> || !_Integer_like<_Bo> || (_Signed_integer_like<_Wi> == _Signed_integer_like<_Bo>) )\r\n    iota_view(_Wi, _Bo) -> iota_view<_Wi, _Bo>;\r\n\r\n    template <class _Wi, class _Bo>\r\n    constexpr bool enable_borrowed_range<iota_view<_Wi, _Bo>> = true;\r\n\r\n    namespace views {\r\n        struct _Iota_fn {\r\n            template <class _Ty>\r\n            _NODISCARD static constexpr auto operator()(_Ty&& _Val)\r\n                noexcept(noexcept(iota_view<decay_t<_Ty>>(static_cast<_Ty&&>(_Val))))\r\n                requires requires { iota_view<decay_t<_Ty>>(static_cast<_Ty &&>(_Val)); }\r\n            {\r\n                return iota_view<decay_t<_Ty>>(static_cast<_Ty&&>(_Val));\r\n            }\r\n\r\n            template <class _Ty1, class _Ty2>\r\n            _NODISCARD static constexpr auto operator()(_Ty1&& _Start, _Ty2&& _Bound)\r\n                noexcept(noexcept(iota_view(static_cast<_Ty1&&>(_Start), static_cast<_Ty2&&>(_Bound))))\r\n                requires requires { iota_view(static_cast<_Ty1 &&>(_Start), static_cast<_Ty2 &&>(_Bound)); }\r\n            {\r\n                return iota_view(static_cast<_Ty1&&>(_Start), static_cast<_Ty2&&>(_Bound));\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Iota_fn iota;\r\n\r\n        class _Take_fn;\r\n        class _Drop_fn;\r\n    } // namespace views\r\n\r\n#if _HAS_CXX23\r\n    template <class _Ty, class _Tuple, size_t... _Indices>\r\n    constexpr _Movable_box<_Ty> _Make_box_from_tuple_impl(_Tuple&& _Tpl, index_sequence<_Indices...>)\r\n        noexcept(is_nothrow_constructible_v<_Ty, decltype(_STD get<_Indices>(_STD forward<_Tuple>(_Tpl)))...>) {\r\n        return _Movable_box<_Ty>(in_place, _STD get<_Indices>(_STD forward<_Tuple>(_Tpl))...);\r\n    }\r\n\r\n    template <class _Ty, class _Tuple>\r\n    constexpr _Movable_box<_Ty> _Make_box_from_tuple(_Tuple&& _Tpl)\r\n        noexcept(noexcept(_RANGES _Make_box_from_tuple_impl<_Ty>(\r\n            _STD forward<_Tuple>(_Tpl), make_index_sequence<tuple_size_v<remove_reference_t<_Tuple>>>{}))) {\r\n        return _RANGES _Make_box_from_tuple_impl<_Ty>(\r\n            _STD forward<_Tuple>(_Tpl), make_index_sequence<tuple_size_v<remove_reference_t<_Tuple>>>{});\r\n    }\r\n\r\n    template <class _Ty>\r\n    concept _Integer_like_with_usable_difference_type =\r\n        _Signed_integer_like<_Ty> || (_Integer_like<_Ty> && weakly_incrementable<_Ty>);\r\n\r\n    template <class _Ty>\r\n    struct _Repeat_view_difference_type {\r\n        using type = _Iota_diff_t<_Ty>;\r\n    };\r\n\r\n    template <_Signed_integer_like _Ty>\r\n    struct _Repeat_view_difference_type<_Ty> {\r\n        using type = _Ty;\r\n    };\r\n\r\n    _EXPORT_STD template <move_constructible _Ty, semiregular _Bo = unreachable_sentinel_t>\r\n        requires (is_object_v<_Ty> && same_as<_Ty, remove_cv_t<_Ty>>\r\n                  && (_Integer_like_with_usable_difference_type<_Bo> || same_as<_Bo, unreachable_sentinel_t>) )\r\n    class repeat_view : public view_interface<repeat_view<_Ty, _Bo>> {\r\n    private:\r\n        friend views::_Take_fn;\r\n        friend views::_Drop_fn;\r\n\r\n        class _Iterator {\r\n        private:\r\n            friend repeat_view;\r\n            using _Index_type = conditional_t<same_as<_Bo, unreachable_sentinel_t>, ptrdiff_t, _Bo>;\r\n\r\n            const _Ty* _Value{};\r\n            _Index_type _Current{};\r\n\r\n            constexpr explicit _Iterator(const _Ty* _Val, _Index_type _Bo_ = _Index_type{}) noexcept // strengthened\r\n                : _Value(_Val), _Current(_Bo_) {\r\n                if constexpr (_Signed_integer_like<_Bo>) {\r\n                    _STL_INTERNAL_CHECK(_Current >= 0);\r\n                }\r\n            }\r\n\r\n        public:\r\n            using iterator_concept  = random_access_iterator_tag;\r\n            using iterator_category = random_access_iterator_tag;\r\n            using value_type        = _Ty;\r\n            using difference_type   = _Repeat_view_difference_type<_Index_type>::type;\r\n\r\n            _Iterator() = default;\r\n\r\n            _NODISCARD constexpr const _Ty& operator*() const noexcept {\r\n                return *_Value;\r\n            }\r\n\r\n            constexpr _Iterator& operator++() noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Current < (numeric_limits<_Index_type>::max)(),\r\n                    \"cannot increment repeat_view iterator past end (integer overflow)\");\r\n#endif\r\n                ++_Current;\r\n                return *this;\r\n            }\r\n            constexpr _Iterator operator++(int) noexcept /* strengthened */ {\r\n                auto _Tmp = *this;\r\n                ++*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator--() noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                if constexpr (is_same_v<_Bo, unreachable_sentinel_t>) {\r\n                    _STL_VERIFY(_Current > (numeric_limits<_Index_type>::min)(),\r\n                        \"cannot decrement repeat_view iterator before begin (integer overflow)\");\r\n                } else {\r\n                    _STL_VERIFY(_Current > 0, \"cannot decrement below 0\");\r\n                }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                --_Current;\r\n                return *this;\r\n            }\r\n            constexpr _Iterator operator--(int) noexcept /* strengthened */ {\r\n                auto _Tmp = *this;\r\n                --*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator+=(difference_type _Off) noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                if (_Off > 0) {\r\n                    if constexpr (sizeof(difference_type) > sizeof(_Index_type)) {\r\n                        _STL_VERIFY(static_cast<_Index_type>(_Off) == _Off,\r\n                            \"cannot advance repeat_view iterator past end (integer overflow)\");\r\n                    }\r\n\r\n                    _STL_VERIFY(_Current <= (numeric_limits<_Index_type>::max)() - static_cast<_Index_type>(_Off),\r\n                        \"cannot advance repeat_view iterator past end (integer overflow)\");\r\n                } else {\r\n                    if constexpr (sizeof(difference_type) > sizeof(_Index_type)) {\r\n                        _STL_VERIFY(static_cast<_Index_type>(_Off) == _Off,\r\n                            \"cannot advance repeat_view iterator before begin (integer overflow)\");\r\n                    }\r\n\r\n                    _STL_VERIFY(_Current >= (numeric_limits<_Index_type>::min)() - static_cast<_Index_type>(_Off),\r\n                        \"cannot advance repeat_view iterator before begin (integer overflow)\");\r\n                }\r\n\r\n                if constexpr (!is_same_v<_Bo, unreachable_sentinel_t>) {\r\n                    _STL_VERIFY(_Current + _Off >= 0, \"cannot subtract below 0\");\r\n                }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _Current += static_cast<_Index_type>(_Off);\r\n                return *this;\r\n            }\r\n            constexpr _Iterator& operator-=(difference_type _Off) noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                if (_Off < 0) {\r\n                    if constexpr (sizeof(difference_type) > sizeof(_Index_type)) {\r\n                        _STL_VERIFY(static_cast<_Index_type>(_Off) == _Off,\r\n                            \"cannot advance repeat_view iterator past end (integer overflow)\");\r\n                    }\r\n\r\n                    _STL_VERIFY(_Current <= (numeric_limits<_Index_type>::max)() + static_cast<_Index_type>(_Off),\r\n                        \"cannot advance repeat_view iterator past end (integer overflow)\");\r\n                } else {\r\n                    if constexpr (sizeof(difference_type) > sizeof(_Index_type)) {\r\n                        _STL_VERIFY(static_cast<_Index_type>(_Off) == _Off,\r\n                            \"cannot advance repeat_view iterator before begin (integer overflow)\");\r\n                    }\r\n\r\n                    _STL_VERIFY(_Current >= (numeric_limits<_Index_type>::min)() + static_cast<_Index_type>(_Off),\r\n                        \"cannot advance repeat_view iterator before begin (integer overflow)\");\r\n                }\r\n\r\n                if constexpr (!is_same_v<_Bo, unreachable_sentinel_t>) {\r\n                    _STL_VERIFY(_Current - _Off >= 0, \"cannot subtract below 0\");\r\n                }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _Current -= static_cast<_Index_type>(_Off);\r\n                return *this;\r\n            }\r\n            _NODISCARD constexpr const _Ty& operator[](difference_type _Idx) const noexcept {\r\n                return *(*this + _Idx);\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, const _Iterator& _Right) noexcept\r\n            /* strengthened */ {\r\n                return _Left._Current == _Right._Current;\r\n            }\r\n            _NODISCARD friend constexpr auto operator<=>(const _Iterator& _Left, const _Iterator& _Right) noexcept\r\n            /* strengthened */ {\r\n                return _Left._Current <=> _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(_Iterator _Iter, difference_type _Off) noexcept\r\n            /* strengthened */ {\r\n                _Iter += _Off;\r\n                return _Iter;\r\n            }\r\n            _NODISCARD friend constexpr _Iterator operator+(difference_type _Off, _Iterator _Iter) noexcept\r\n            /* strengthened */ {\r\n                _Iter += _Off;\r\n                return _Iter;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator-(_Iterator _Iter, difference_type _Off) noexcept\r\n            /* strengthened */ {\r\n                _Iter -= _Off;\r\n                return _Iter;\r\n            }\r\n            _NODISCARD friend constexpr difference_type operator-(\r\n                const _Iterator& _Left, const _Iterator& _Right) noexcept /* strengthened */ {\r\n                return static_cast<difference_type>(\r\n                    static_cast<difference_type>(_Left._Current) - static_cast<difference_type>(_Right._Current));\r\n            }\r\n        };\r\n\r\n        /* [[no_unique_address]] */ _Movable_box<_Ty> _Value{};\r\n        /* [[no_unique_address]] */ _Bo _Bound{};\r\n\r\n    public:\r\n        repeat_view()\r\n            requires default_initializable<_Ty>\r\n        = default;\r\n\r\n        _NODISCARD constexpr explicit repeat_view(const _Ty& _Value_, _Bo _Bound_ = _Bo{})\r\n            noexcept(is_nothrow_copy_constructible_v<_Ty>) // strengthened\r\n            requires copy_constructible<_Ty>\r\n            : _Value(in_place, _Value_), _Bound(_STD move(_Bound_)) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            if constexpr (_Signed_integer_like<_Bo>) {\r\n                _STL_VERIFY(_Bound >= 0, \"Bound must be >= 0\");\r\n            }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        }\r\n        _NODISCARD constexpr explicit repeat_view(_Ty&& _Value_, _Bo _Bound_ = _Bo{})\r\n            noexcept(is_nothrow_move_constructible_v<_Ty>) // strengthened\r\n            : _Value(in_place, _STD move(_Value_)), _Bound(_STD move(_Bound_)) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            if constexpr (_Signed_integer_like<_Bo>) {\r\n                _STL_VERIFY(_Bound >= 0, \"Bound must be >= 0\");\r\n            }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        }\r\n        template <class... _TArgs, class... _BArgs>\r\n            requires constructible_from<_Ty, _TArgs...> && constructible_from<_Bo, _BArgs...>\r\n        _NODISCARD constexpr explicit repeat_view(\r\n            piecewise_construct_t, tuple<_TArgs...> _Val_args, tuple<_BArgs...> _Bound_args = tuple<>{})\r\n            noexcept(noexcept(_RANGES _Make_box_from_tuple<_Ty>(_STD move(_Val_args)))\r\n                     && noexcept(_STD make_from_tuple<_Bo>(_STD move(_Bound_args)))) // strengthened\r\n            : _Value(_RANGES _Make_box_from_tuple<_Ty>(_STD move(_Val_args))),\r\n              _Bound(_STD make_from_tuple<_Bo>(_STD move(_Bound_args))) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            if constexpr (_Signed_integer_like<_Bo>) {\r\n                _STL_VERIFY(_Bound >= 0, \"Bound must be >= 0\");\r\n            }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        }\r\n\r\n        _NODISCARD constexpr _Iterator begin() const noexcept /* strengthened */ {\r\n            return _Iterator{_STD addressof(*_Value)};\r\n        }\r\n        _NODISCARD constexpr auto end() const noexcept /* strengthened */ {\r\n            if constexpr (same_as<_Bo, unreachable_sentinel_t>) {\r\n                return unreachable_sentinel;\r\n            } else {\r\n                return _Iterator{_STD addressof(*_Value), _Bound};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const noexcept // strengthened\r\n            requires (!same_as<_Bo, unreachable_sentinel_t>)\r\n        {\r\n            return _STD _To_unsigned_like(_Bound);\r\n        }\r\n    };\r\n\r\n    template <class _Ty, class _Bo = unreachable_sentinel_t>\r\n    repeat_view(_Ty, _Bo = _Bo()) -> repeat_view<_Ty, _Bo>;\r\n\r\n    namespace views {\r\n        struct _Repeat_fn {\r\n            template <class _Ty>\r\n            _NODISCARD static constexpr auto operator()(_Ty&& _Value)\r\n                noexcept(noexcept(repeat_view<decay_t<_Ty>>(_STD forward<_Ty>(_Value))))\r\n                requires requires { repeat_view<decay_t<_Ty>>(_STD forward<_Ty>(_Value)); }\r\n            {\r\n                return repeat_view<decay_t<_Ty>>(_STD forward<_Ty>(_Value));\r\n            }\r\n\r\n            template <class _Ty1, class _Ty2>\r\n            _NODISCARD static constexpr auto operator()(_Ty1&& _Value, _Ty2&& _Count)\r\n                noexcept(noexcept(repeat_view(_STD forward<_Ty1>(_Value), _STD forward<_Ty2>(_Count))))\r\n                requires requires { repeat_view(_STD forward<_Ty1>(_Value), _STD forward<_Ty2>(_Count)); }\r\n            {\r\n                return repeat_view(_STD forward<_Ty1>(_Value), _STD forward<_Ty2>(_Count));\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Repeat_fn repeat;\r\n    } // namespace views\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Ty, class _Elem, class _Traits>\r\n    concept _Stream_extractable = requires(basic_istream<_Elem, _Traits>& __is, _Ty& __t) { __is >> __t; };\r\n\r\n    _EXPORT_STD template <movable _Ty, class _Elem, class _Traits = char_traits<_Elem>>\r\n        requires default_initializable<_Ty> && _Stream_extractable<_Ty, _Elem, _Traits>\r\n    class basic_istream_view : public view_interface<basic_istream_view<_Ty, _Elem, _Traits>> {\r\n    private:\r\n        class _Iterator {\r\n        private:\r\n            basic_istream_view* _Parent;\r\n\r\n        public:\r\n            using iterator_concept = input_iterator_tag;\r\n            using difference_type  = ptrdiff_t;\r\n            using value_type       = _Ty;\r\n\r\n            constexpr explicit _Iterator(basic_istream_view& _Parent_) noexcept : _Parent{_STD addressof(_Parent_)} {}\r\n\r\n            _Iterator(const _Iterator&) = delete;\r\n            _Iterator(_Iterator&&)      = default;\r\n\r\n            _Iterator& operator=(const _Iterator&) = delete;\r\n            _Iterator& operator=(_Iterator&&)      = default;\r\n\r\n            _Iterator& operator++() {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                // Per LWG-3489\r\n                _STL_VERIFY(\r\n                    !_Parent->_Stream_at_end(), \"cannot increment basic_istream_view iterator at end of stream\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                *_Parent->_Stream >> _Parent->_Val;\r\n                return *this;\r\n            }\r\n\r\n            void operator++(int) {\r\n                ++*this;\r\n            }\r\n\r\n            _NODISCARD _Ty& operator*() const noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                // Per LWG-3489\r\n                _STL_VERIFY(\r\n                    !_Parent->_Stream_at_end(), \"cannot dereference basic_istream_view iterator at end of stream\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return _Parent->_Val;\r\n            }\r\n\r\n            _NODISCARD friend bool operator==(const _Iterator& _Left, default_sentinel_t) noexcept /* strengthened */ {\r\n                return _Left._Parent->_Stream_at_end();\r\n            }\r\n        };\r\n\r\n        basic_istream<_Elem, _Traits>* _Stream;\r\n        _Ty _Val = _Ty{};\r\n\r\n    public:\r\n        constexpr explicit basic_istream_view(basic_istream<_Elem, _Traits>& _Stream_)\r\n            noexcept(is_nothrow_default_constructible_v<_Ty>) // strengthened\r\n            : _Stream{_STD addressof(_Stream_)} {}\r\n\r\n        _NODISCARD constexpr auto begin() {\r\n            *_Stream >> _Val;\r\n            return _Iterator{*this};\r\n        }\r\n\r\n        _NODISCARD constexpr default_sentinel_t end() const noexcept {\r\n            return default_sentinel;\r\n        }\r\n\r\n        _NODISCARD constexpr bool _Stream_at_end() const noexcept {\r\n            return !*_Stream;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD template <class _Ty>\r\n    using istream_view = basic_istream_view<_Ty, char>;\r\n    _EXPORT_STD template <class _Ty>\r\n    using wistream_view = basic_istream_view<_Ty, wchar_t>;\r\n\r\n    namespace views {\r\n        template <class _Elem, class _Stream, class _CharT, class _Traits>\r\n        concept _Istreamable_impl = derived_from<_Stream, basic_istream<_CharT, _Traits>>\r\n                                 && constructible_from<basic_istream_view<_Elem, _CharT, _Traits>, _Stream&>;\r\n        template <class _Elem, class _Stream>\r\n        concept _Istreamable = requires {\r\n            typename _Stream::char_type;\r\n            typename _Stream::traits_type;\r\n            requires _Istreamable_impl<_Elem, _Stream, typename _Stream::char_type, typename _Stream::traits_type>;\r\n        };\r\n\r\n        template <class _Ty>\r\n        struct _Istream_fn {\r\n            template <class _StreamTy>\r\n                requires _Istreamable<_Ty, _StreamTy>\r\n            _NODISCARD static constexpr auto operator()(_StreamTy& _Stream)\r\n                noexcept(is_nothrow_default_constructible_v<_Ty>) /* strengthened */ {\r\n                return basic_istream_view<_Ty, typename _StreamTy::char_type, typename _StreamTy::traits_type>(_Stream);\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD template <class _Ty>\r\n        constexpr _Istream_fn<_Ty> istream;\r\n    } // namespace views\r\n\r\n#if _HAS_CXX23\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<ref_view<_Rng>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<const ref_view<_Rng>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<owning_view<_Rng>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<const owning_view<_Rng>> = _Compile_time_max_size<const _Rng>;\r\n\r\n    _EXPORT_STD template <input_range _Vw>\r\n        requires view<_Vw>\r\n    class as_rvalue_view : public view_interface<as_rvalue_view<_Vw>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n\r\n        template <range _Rng>\r\n        static constexpr bool _Is_end_nothrow_v = noexcept(move_sentinel{_RANGES end(_STD declval<_Rng&>())});\r\n\r\n        template <common_range _Rng>\r\n        static constexpr bool _Is_end_nothrow_v<_Rng> = noexcept(move_iterator{_RANGES end(_STD declval<_Rng&>())});\r\n\r\n    public:\r\n        as_rvalue_view()\r\n            requires default_initializable<_Vw>\r\n        = default;\r\n\r\n        constexpr explicit as_rvalue_view(_Vw _Range_) noexcept(is_nothrow_move_constructible_v<_Vw>) // strengthened\r\n            : _Range(_STD move(_Range_)) {}\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) // strengthened\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() noexcept(noexcept(move_iterator{_RANGES begin(_Range)})) // strengthened\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            return move_iterator{_RANGES begin(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const noexcept(noexcept(move_iterator{_RANGES begin(_Range)})) // strengthened\r\n            requires range<const _Vw>\r\n        {\r\n            return move_iterator{_RANGES begin(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() noexcept(_Is_end_nothrow_v<_Vw>) // strengthened\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            if constexpr (common_range<_Vw>) {\r\n                return move_iterator{_RANGES end(_Range)};\r\n            } else {\r\n                return move_sentinel{_RANGES end(_Range)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const noexcept(_Is_end_nothrow_v<const _Vw>) // strengthened\r\n            requires range<const _Vw>\r\n        {\r\n            if constexpr (common_range<const _Vw>) {\r\n                return move_iterator{_RANGES end(_Range)};\r\n            } else {\r\n                return move_sentinel{_RANGES end(_Range)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() noexcept(noexcept(_RANGES size(_Range))) // strengthened\r\n            requires sized_range<_Vw>\r\n        {\r\n            return _RANGES size(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_RANGES size(_Range))) // strengthened\r\n            requires sized_range<const _Vw>\r\n        {\r\n            return _RANGES size(_Range);\r\n        }\r\n    };\r\n\r\n    template <class _Rng>\r\n    as_rvalue_view(_Rng&&) -> as_rvalue_view<views::all_t<_Rng>>;\r\n\r\n    template <class _Rng>\r\n    constexpr bool enable_borrowed_range<as_rvalue_view<_Rng>> = enable_borrowed_range<_Rng>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<as_rvalue_view<_Rng>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<const as_rvalue_view<_Rng>> = _Compile_time_max_size<const _Rng>;\r\n\r\n    namespace views {\r\n        // direct-non-list-initialization is specified in the Standard (N4981 [range.as.rvalue.overview]/2.2)\r\n        // and needed for EDG, DevCom-10698021\r\n        template <class _Rng>\r\n        concept _Can_as_rvalue = requires(_Rng&& __r) { as_rvalue_view(static_cast<_Rng &&>(__r)); };\r\n\r\n        class _As_rvalue_fn : public _Pipe::_Base<_As_rvalue_fn> {\r\n        private:\r\n            enum class _St { _None, _All, _As_rvalue };\r\n\r\n            template <class _Rng>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                if constexpr (input_range<_Rng> && same_as<range_rvalue_reference_t<_Rng>, range_reference_t<_Rng>>) {\r\n                    return {_St::_All, noexcept(views::all(_STD declval<_Rng>()))};\r\n                } else if constexpr (_Can_as_rvalue<_Rng>) {\r\n                    return {_St::_As_rvalue, noexcept(as_rvalue_view(_STD declval<_Rng>()))};\r\n                } else {\r\n                    return {_St::_None};\r\n                }\r\n            }\r\n\r\n            template <class _Rng>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Rng>();\r\n\r\n        public:\r\n            template <viewable_range _Rng>\r\n                requires (_Choice<_Rng>._Strategy != _St::_None)\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range) noexcept(_Choice<_Rng>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Rng>._Strategy;\r\n                if constexpr (_Strat == _St::_All) {\r\n                    return views::all(_STD forward<_Rng>(_Range));\r\n                } else if constexpr (_Strat == _St::_As_rvalue) {\r\n                    return as_rvalue_view(_STD forward<_Rng>(_Range));\r\n                } else {\r\n                    static_assert(false); // unexpected strategy\r\n                }\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _As_rvalue_fn as_rvalue;\r\n    } // namespace views\r\n#endif // _HAS_CXX23\r\n\r\n    _EXPORT_STD template <input_range _Vw, indirect_unary_predicate<iterator_t<_Vw>> _Pr>\r\n        requires view<_Vw> && is_object_v<_Pr>\r\n    class filter_view : public _Cached_position_t<forward_range<_Vw>, _Vw, filter_view<_Vw, _Pr>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n        /* [[no_unique_address]] */ _Movable_box<_Pr> _Pred{};\r\n\r\n        template <class _View>\r\n        struct _Category_base {};\r\n\r\n        template <forward_range _View>\r\n        struct _Category_base<_View> {\r\n            using iterator_category =\r\n                conditional_t<derived_from<_Iter_cat_t<iterator_t<_View>>, bidirectional_iterator_tag>,\r\n                    bidirectional_iterator_tag,\r\n                    conditional_t<derived_from<_Iter_cat_t<iterator_t<_View>>, forward_iterator_tag>,\r\n                        forward_iterator_tag, _Iter_cat_t<iterator_t<_View>>>>;\r\n        };\r\n\r\n        class _Iterator : public _Category_base<_Vw> {\r\n        private:\r\n            /* [[no_unique_address]] */ iterator_t<_Vw> _Current{};\r\n            filter_view* _Parent{};\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            constexpr void _Check_dereference() const noexcept {\r\n                _STL_VERIFY(_Parent != nullptr, \"cannot dereference value-initialized filter_view iterator\");\r\n                _STL_VERIFY(_Current != _RANGES end(_Parent->_Range), \"cannot dereference end filter_view iterator\");\r\n            }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        public:\r\n            using iterator_concept = conditional_t<bidirectional_range<_Vw>, bidirectional_iterator_tag,\r\n                conditional_t<forward_range<_Vw>, forward_iterator_tag, input_iterator_tag>>;\r\n            using value_type       = range_value_t<_Vw>;\r\n            using difference_type  = range_difference_t<_Vw>;\r\n\r\n            _Iterator()\r\n                requires default_initializable<iterator_t<_Vw>>\r\n            = default;\r\n\r\n            constexpr _Iterator(filter_view& _Parent_, iterator_t<_Vw> _Current_)\r\n                noexcept(is_nothrow_move_constructible_v<iterator_t<_Vw>>) // strengthened\r\n                : _Current(_STD move(_Current_)), _Parent{_STD addressof(_Parent_)} {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STD _Adl_verify_range(_Current, _RANGES end(_Parent_._Range));\r\n                if constexpr (forward_range<_Vw>) {\r\n                    _STD _Adl_verify_range(_RANGES begin(_Parent_._Range), _Current);\r\n                }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n            }\r\n\r\n            _NODISCARD constexpr const iterator_t<_Vw>& base() const& noexcept {\r\n                return _Current;\r\n            }\r\n            _NODISCARD constexpr iterator_t<_Vw> base() && noexcept(\r\n                is_nothrow_move_constructible_v<iterator_t<_Vw>>) /* strengthened */ {\r\n                return _STD move(_Current);\r\n            }\r\n\r\n            _NODISCARD constexpr range_reference_t<_Vw> operator*() const\r\n                noexcept(noexcept(*_Current)) /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Check_dereference();\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return *_Current;\r\n            }\r\n\r\n            _NODISCARD constexpr iterator_t<_Vw> operator->() const\r\n                noexcept(is_nothrow_copy_constructible_v<iterator_t<_Vw>>) /* strengthened */\r\n                requires _Has_arrow<iterator_t<_Vw>> && copyable<iterator_t<_Vw>>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Check_dereference();\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return _Current;\r\n            }\r\n\r\n            constexpr _Iterator& operator++() {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Parent != nullptr, \"cannot increment value-initialized filter_view iterator\");\r\n                _STL_VERIFY(_Current != _RANGES end(_Parent->_Range), \"cannot increment filter_view iterator past end\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _Current =\r\n                    _RANGES find_if(_STD move(++_Current), _RANGES end(_Parent->_Range), _STD ref(*_Parent->_Pred));\r\n                return *this;\r\n            }\r\n\r\n            constexpr decltype(auto) operator++(int) {\r\n                if constexpr (forward_range<_Vw>) {\r\n                    auto _Tmp = *this;\r\n                    ++*this;\r\n                    return _Tmp;\r\n                } else {\r\n                    ++*this;\r\n                }\r\n            }\r\n\r\n            constexpr _Iterator& operator--()\r\n                requires bidirectional_range<_Vw>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Parent != nullptr, \"cannot decrement value-initialized filter_view iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                do {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                    _STL_VERIFY(_Current != _RANGES begin(_Parent->_Range),\r\n                        \"cannot decrement filter_view iterator before begin\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                    --_Current;\r\n                } while (!_STD invoke(*_Parent->_Pred, *_Current));\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator--(int)\r\n                requires bidirectional_range<_Vw>\r\n            {\r\n                auto _Tmp = *this;\r\n                --*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, const _Iterator& _Right)\r\n                requires equality_comparable<iterator_t<_Vw>>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(\r\n                    _Left._Parent == _Right._Parent, \"cannot compare incompatible filter_view iterators for equality\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return _Left._Current == _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr range_rvalue_reference_t<_Vw> iter_move(const _Iterator& _It)\r\n                noexcept(noexcept(_RANGES iter_move(_It._Current))) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _It._Check_dereference();\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return _RANGES iter_move(_It._Current);\r\n            }\r\n\r\n            friend constexpr void iter_swap(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_RANGES iter_swap(_Left._Current, _Right._Current)))\r\n                requires indirectly_swappable<iterator_t<_Vw>>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Left._Check_dereference();\r\n                _Right._Check_dereference();\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return _RANGES iter_swap(_Left._Current, _Right._Current);\r\n            }\r\n\r\n            _NODISCARD constexpr bool _Equal(const sentinel_t<_Vw>& _Last) const\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_Current == _Last))) {\r\n                return _Current == _Last;\r\n            }\r\n        };\r\n\r\n        class _Sentinel {\r\n        private:\r\n            /* [[no_unique_address]] */ sentinel_t<_Vw> _Last{};\r\n\r\n        public:\r\n            _Sentinel() = default;\r\n            constexpr explicit _Sentinel(filter_view& _Parent)\r\n                noexcept(noexcept(_RANGES end(_Parent._Range))\r\n                         && is_nothrow_move_constructible_v<sentinel_t<_Vw>>) // strengthened\r\n                : _Last(_RANGES end(_Parent._Range)) {}\r\n\r\n            _NODISCARD constexpr sentinel_t<_Vw> base() const\r\n                noexcept(is_nothrow_copy_constructible_v<sentinel_t<_Vw>>) /* strengthened */ {\r\n                return _Last;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _It, const _Sentinel& _Se)\r\n                noexcept(noexcept(_It._Equal(_Se._Last))) /* strengthened */ {\r\n                return _It._Equal(_Se._Last);\r\n            }\r\n        };\r\n\r\n    public:\r\n        filter_view()\r\n            requires default_initializable<_Vw> && default_initializable<_Pr>\r\n        = default;\r\n\r\n        constexpr explicit filter_view(_Vw _Range_, _Pr _Pred_)\r\n            noexcept(is_nothrow_move_constructible_v<_Vw> && is_nothrow_move_constructible_v<_Pr>) // strengthened\r\n            : _Range(_STD move(_Range_)), _Pred{in_place, _STD move(_Pred_)} {}\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) /* strengthened */\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr const _Pr& pred() const noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Pred, \"filter_view has no predicate\");\r\n#endif\r\n            return *_Pred;\r\n        }\r\n\r\n        _NODISCARD constexpr _Iterator begin() {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(\r\n                _Pred, \"N4950 [range.filter.view]/3 forbids calling begin on a filter_view that holds no predicate\");\r\n#endif\r\n            if constexpr (forward_range<_Vw>) {\r\n                if (this->_Has_cache()) {\r\n                    return _Iterator{*this, this->_Get_cache(_Range)};\r\n                }\r\n            }\r\n\r\n            auto _First = _RANGES find_if(_Range, _STD ref(*_Pred));\r\n            if constexpr (forward_range<_Vw>) {\r\n                this->_Set_cache(_Range, _First);\r\n            }\r\n\r\n            return _Iterator{*this, _STD move(_First)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() {\r\n            if constexpr (common_range<_Vw>) {\r\n                return _Iterator{*this, _RANGES end(_Range)};\r\n            } else {\r\n                return _Sentinel{*this};\r\n            }\r\n        }\r\n    };\r\n\r\n    template <class _Rng, class _Pr>\r\n    filter_view(_Rng&&, _Pr) -> filter_view<views::all_t<_Rng>, _Pr>;\r\n\r\n#if _HAS_CXX23\r\n    template <class _Rng, class _Pr>\r\n    constexpr auto _Compile_time_max_size<filter_view<_Rng, _Pr>> = _Compile_time_max_size<_Rng>;\r\n#endif // _HAS_CXX23\r\n\r\n    namespace views {\r\n        struct _Filter_fn {\r\n            template <viewable_range _Rng, class _Pr>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Pr&& _Pred)\r\n                noexcept(noexcept(filter_view(_STD forward<_Rng>(_Range), _STD forward<_Pr>(_Pred))))\r\n                requires requires { filter_view(static_cast<_Rng &&>(_Range), _STD forward<_Pr>(_Pred)); }\r\n            {\r\n                return filter_view(_STD forward<_Rng>(_Range), _STD forward<_Pr>(_Pred));\r\n            }\r\n\r\n            template <class _Pr>\r\n                requires constructible_from<decay_t<_Pr>, _Pr>\r\n            _NODISCARD static constexpr auto operator()(_Pr&& _Pred)\r\n                noexcept(is_nothrow_constructible_v<decay_t<_Pr>, _Pr>) {\r\n                return _Range_closure<_Filter_fn, decay_t<_Pr>>{_STD forward<_Pr>(_Pred)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Filter_fn filter;\r\n    } // namespace views\r\n\r\n#if _HAS_CXX23\r\n    template <class _Rng, class _Fn>\r\n    constexpr auto _Compile_time_max_size<transform_view<_Rng, _Fn>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng, class _Fn>\r\n    constexpr auto _Compile_time_max_size<const transform_view<_Rng, _Fn>> = _Compile_time_max_size<const _Rng>;\r\n#endif // _HAS_CXX23\r\n\r\n    _EXPORT_STD template <view _Vw>\r\n    class take_view : public view_interface<take_view<_Vw>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n        range_difference_t<_Vw> _Count = 0;\r\n\r\n        template <bool _Const, bool _Wrapped = true>\r\n        class _Sentinel {\r\n        private:\r\n            friend take_view;\r\n\r\n            using _Base_t        = _Maybe_const<_Const, _Vw>;\r\n            using _Base_sentinel = _Maybe_wrapped<_Wrapped, sentinel_t<_Base_t>>;\r\n            template <bool _OtherConst>\r\n            using _Base_iterator = _Maybe_wrapped<_Wrapped, iterator_t<_Maybe_const<_OtherConst, _Vw>>>;\r\n            template <bool _OtherConst>\r\n            using _Counted_iter = counted_iterator<_Base_iterator<_OtherConst>>;\r\n\r\n            _Base_sentinel _Last{};\r\n\r\n        public:\r\n            _Sentinel() = default;\r\n\r\n            constexpr explicit _Sentinel(_Base_sentinel _Last_)\r\n                noexcept(is_nothrow_move_constructible_v<_Base_sentinel>) // strengthened\r\n                : _Last(_STD move(_Last_)) {}\r\n\r\n            constexpr _Sentinel(_Sentinel<!_Const, _Wrapped> _That) noexcept(\r\n                is_nothrow_constructible_v<_Base_sentinel, _Maybe_wrapped<_Wrapped, sentinel_t<_Vw>>>) // strengthened\r\n                requires _Const && convertible_to<_Maybe_wrapped<_Wrapped, sentinel_t<_Vw>>, _Base_sentinel>\r\n                : _Last(_STD move(_That._Last)) {}\r\n\r\n            _NODISCARD constexpr _Base_sentinel base() const\r\n                noexcept(is_nothrow_copy_constructible_v<_Base_sentinel>) /* strengthened */ {\r\n                return _Last;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Counted_iter<_Const>& _Left, const _Sentinel& _Right) {\r\n                return _Left.count() == 0 || _Left.base() == _Right._Last;\r\n            }\r\n\r\n            template <bool _OtherConst = !_Const>\r\n                requires sentinel_for<_Base_sentinel, _Base_iterator<_OtherConst>>\r\n            _NODISCARD friend constexpr bool operator==(\r\n                const _Counted_iter<_OtherConst>& _Left, const _Sentinel& _Right) {\r\n                return _Left.count() == 0 || _Left.base() == _Right._Last;\r\n            }\r\n\r\n            using _Prevent_inheriting_unwrap = _Sentinel;\r\n\r\n            _NODISCARD constexpr auto _Unwrapped() const& noexcept(\r\n                noexcept(_Sentinel<_Const, false>{_Last._Unwrapped()}))\r\n                requires _Wrapped && _Unwrappable_sentinel_for<sentinel_t<_Base_t>, const iterator_t<_Base_t>&>\r\n            {\r\n                return _Sentinel<_Const, false>{_Last._Unwrapped()};\r\n            }\r\n            _NODISCARD constexpr auto _Unwrapped() && noexcept(\r\n                noexcept(_Sentinel<_Const, false>{_STD move(_Last)._Unwrapped()}))\r\n                requires _Wrapped && _Unwrappable_sentinel_for<sentinel_t<_Base_t>, iterator_t<_Base_t>>\r\n            {\r\n                return _Sentinel<_Const, false>{_STD move(_Last)._Unwrapped()};\r\n            }\r\n\r\n            static constexpr bool _Unwrap_when_unverified = _Do_unwrap_when_unverified_v<iterator_t<_Base_t>>;\r\n\r\n            constexpr void _Seek_to(const _Sentinel<_Const, false>& _That)\r\n                requires _Wrapped\r\n            {\r\n                _Seek_wrapped(_Last, _That._Last);\r\n            }\r\n            constexpr void _Seek_to(_Sentinel<_Const, false>&& _That)\r\n                requires _Wrapped\r\n            {\r\n                _Seek_wrapped(_Last, _STD move(_That._Last));\r\n            }\r\n        };\r\n\r\n    public:\r\n        take_view()\r\n            requires default_initializable<_Vw>\r\n        = default;\r\n\r\n        constexpr explicit take_view(_Vw _Range_, const range_difference_t<_Vw> _Count_)\r\n            noexcept(is_nothrow_move_constructible_v<_Vw>) // strengthened\r\n            : _Range(_STD move(_Range_)), _Count{_Count_} {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Count_ >= 0, \"Number of elements to take must be non-negative (N4971 [range.take.view]/1)\");\r\n#endif\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) /* strengthened */\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin()\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            if constexpr (sized_range<_Vw>) {\r\n                if constexpr (random_access_range<_Vw>) {\r\n                    return _RANGES begin(_Range);\r\n                } else {\r\n                    const auto _Size = static_cast<range_difference_t<_Vw>>(size());\r\n                    return counted_iterator(_RANGES begin(_Range), _Size);\r\n                }\r\n            } else if constexpr (sized_sentinel_for<sentinel_t<_Vw>, iterator_t<_Vw>>) {\r\n                auto _Iter       = _RANGES begin(_Range);\r\n                const auto _Size = (_STD min) (_Count, _RANGES end(_Range) - _Iter);\r\n                return counted_iterator(_STD move(_Iter), _Size);\r\n            } else {\r\n                return counted_iterator(_RANGES begin(_Range), _Count);\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const\r\n            requires range<const _Vw>\r\n        {\r\n            if constexpr (sized_range<const _Vw>) {\r\n                if constexpr (random_access_range<const _Vw>) {\r\n                    return _RANGES begin(_Range);\r\n                } else {\r\n                    const auto _Size = static_cast<range_difference_t<_Vw>>(size());\r\n                    return counted_iterator(_RANGES begin(_Range), _Size);\r\n                }\r\n            } else if constexpr (sized_sentinel_for<sentinel_t<const _Vw>, iterator_t<const _Vw>>) {\r\n                auto _Iter       = _RANGES begin(_Range);\r\n                const auto _Size = (_STD min) (_Count, _RANGES end(_Range) - _Iter);\r\n                return counted_iterator(_STD move(_Iter), _Size);\r\n            } else {\r\n                return counted_iterator(_RANGES begin(_Range), _Count);\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end()\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            if constexpr (sized_range<_Vw>) {\r\n                if constexpr (random_access_range<_Vw>) {\r\n                    return _RANGES begin(_Range) + static_cast<range_difference_t<_Vw>>(size());\r\n                } else {\r\n                    return default_sentinel;\r\n                }\r\n            } else if constexpr (sized_sentinel_for<sentinel_t<_Vw>, iterator_t<_Vw>>) {\r\n                return default_sentinel;\r\n            } else {\r\n                return _Sentinel<false>{_RANGES end(_Range)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const\r\n            requires range<const _Vw>\r\n        {\r\n            if constexpr (sized_range<const _Vw>) {\r\n                if constexpr (random_access_range<const _Vw>) {\r\n                    return _RANGES begin(_Range) + static_cast<range_difference_t<_Vw>>(size());\r\n                } else {\r\n                    return default_sentinel;\r\n                }\r\n            } else if constexpr (sized_sentinel_for<sentinel_t<const _Vw>, iterator_t<const _Vw>>) {\r\n                return default_sentinel;\r\n            } else {\r\n                return _Sentinel<true>{_RANGES end(_Range)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto size()\r\n            requires sized_range<_Vw>\r\n        {\r\n            const auto _Length = _RANGES size(_Range);\r\n            return (_STD min) (_Length, static_cast<decltype(_Length)>(_Count));\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const\r\n            requires sized_range<const _Vw>\r\n        {\r\n            const auto _Length = _RANGES size(_Range);\r\n            return (_STD min) (_Length, static_cast<decltype(_Length)>(_Count));\r\n        }\r\n    };\r\n\r\n    template <class _Rng>\r\n    take_view(_Rng&&, range_difference_t<_Rng>) -> take_view<views::all_t<_Rng>>;\r\n\r\n    template <class _Rng>\r\n    constexpr bool enable_borrowed_range<take_view<_Rng>> = enable_borrowed_range<_Rng>;\r\n\r\n#if _HAS_CXX23\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<take_view<_Rng>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<const take_view<_Rng>> = _Compile_time_max_size<const _Rng>;\r\n#endif // _HAS_CXX23\r\n\r\n    namespace views {\r\n        template <class _Rng>\r\n        concept _Random_sized_range = random_access_range<_Rng> && sized_range<_Rng>;\r\n\r\n        class _Take_fn {\r\n        private:\r\n            enum class _St {\r\n                _Empty,\r\n                _Reconstruct_span,\r\n                _Reconstruct_string_view,\r\n                _Reconstruct_iota_view,\r\n                _Reconstruct_repeat_view,\r\n                _Reconstruct_subrange,\r\n                _Take_view\r\n            };\r\n\r\n            template <class _Rng>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                using _Ty = remove_cvref_t<_Rng>;\r\n\r\n                if constexpr (_Is_specialization_v<_Ty, empty_view>) {\r\n                    return {_St::_Empty, true};\r\n                } else if constexpr (_Is_span_v<_Ty>) {\r\n                    return {_St::_Reconstruct_span, true};\r\n                } else if constexpr (_Is_specialization_v<_Ty, basic_string_view>) {\r\n                    return {_St::_Reconstruct_string_view, true};\r\n                } else if constexpr (_Random_sized_range<_Ty> && _Is_specialization_v<_Ty, iota_view>) {\r\n                    return {_St::_Reconstruct_iota_view,\r\n                        noexcept(_RANGES begin(_STD declval<_Rng&>()) + _RANGES distance(_STD declval<_Rng&>()))};\r\n#if _HAS_CXX23\r\n                } else if constexpr (_Is_specialization_v<_Ty, repeat_view>) {\r\n                    using _Range_val_t = range_value_t<_Ty>;\r\n                    return {_St::_Reconstruct_repeat_view,\r\n                        is_nothrow_constructible_v<_Range_val_t, _Forward_like_t<_Rng, _Range_val_t>>};\r\n#endif // _HAS_CXX23\r\n                } else if constexpr (_Random_sized_range<_Ty> && _Is_subrange_v<_Ty>) {\r\n                    return {_St::_Reconstruct_subrange,\r\n                        noexcept(subrange(_RANGES begin(_STD declval<_Rng&>()),\r\n                            _RANGES begin(_STD declval<_Rng&>()) + _RANGES distance(_STD declval<_Rng&>())))};\r\n                } else {\r\n                    return {_St::_Take_view, noexcept(take_view(_STD declval<_Rng>(), range_difference_t<_Rng>{0}))};\r\n                }\r\n            }\r\n\r\n            template <class _Rng>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Rng>();\r\n\r\n        public:\r\n            template <viewable_range _Rng>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range, range_difference_t<_Rng> _Count)\r\n                noexcept(_Choice<_Rng>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Rng>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_Empty) {\r\n                    // it's an empty_view: return another empty view\r\n                    return remove_cvref_t<_Rng>{};\r\n                } else if constexpr (_Strat == _St::_Take_view) {\r\n                    return take_view(_STD forward<_Rng>(_Range), _Count);\r\n#if _HAS_CXX23\r\n                } else if constexpr (!sized_range<_Rng> && _Strat == _St::_Reconstruct_repeat_view) {\r\n                    return repeat_view(_STD forward_like<_Rng>(*_Range._Value), _Count);\r\n#endif // _HAS_CXX23\r\n                } else {\r\n                    // it's a \"reconstructible range\"; return the same kind of range with a restricted extent\r\n                    _Count            = (_STD min) (_RANGES distance(_Range), _Count);\r\n                    const auto _First = _RANGES begin(_Range);\r\n\r\n                    if constexpr (_Strat == _St::_Reconstruct_span) {\r\n                        return span(_First, _First + _Count);\r\n                    } else if constexpr (_Strat == _St::_Reconstruct_string_view) {\r\n                        return remove_cvref_t<_Rng>(_First, _First + _Count);\r\n                    } else if constexpr (_Strat == _St::_Reconstruct_iota_view) {\r\n                        using _Vt = range_value_t<_Rng>;\r\n                        return iota_view<_Vt, _Vt>(_First, _First + _Count);\r\n#if _HAS_CXX23\r\n                    } else if constexpr (_Strat == _St::_Reconstruct_repeat_view) {\r\n                        return repeat_view(_STD forward_like<_Rng>(*_Range._Value), _Count);\r\n#endif // _HAS_CXX23\r\n                    } else if constexpr (_Strat == _St::_Reconstruct_subrange) {\r\n                        return subrange(_First, _First + _Count);\r\n                    } else {\r\n                        static_assert(false); // unexpected strategy\r\n                    }\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n                requires constructible_from<decay_t<_Ty>, _Ty>\r\n            _NODISCARD static constexpr auto operator()(_Ty&& _Length)\r\n                noexcept(is_nothrow_constructible_v<decay_t<_Ty>, _Ty>) {\r\n                return _Range_closure<_Take_fn, decay_t<_Ty>>{_STD forward<_Ty>(_Length)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Take_fn take;\r\n    } // namespace views\r\n\r\n    _EXPORT_STD template <view _Vw, class _Pr>\r\n        requires input_range<_Vw> && is_object_v<_Pr> && indirect_unary_predicate<const _Pr, iterator_t<_Vw>>\r\n    class take_while_view : public view_interface<take_while_view<_Vw, _Pr>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n        /* [[no_unique_address]] */ _Movable_box<_Pr> _Pred{};\r\n\r\n        template <bool _Const, bool _Wrapped = true>\r\n        class _Sentinel {\r\n        private:\r\n            friend take_while_view;\r\n\r\n            using _Base_t        = _Maybe_const<_Const, _Vw>;\r\n            using _Base_iterator = _Maybe_wrapped<_Wrapped, iterator_t<_Base_t>>;\r\n            using _Base_sentinel = _Maybe_wrapped<_Wrapped, sentinel_t<_Base_t>>;\r\n\r\n            template <bool _OtherConst>\r\n            using _Maybe_const_iter = _Maybe_wrapped<_Wrapped, iterator_t<_Maybe_const<_OtherConst, _Vw>>>;\r\n\r\n            /* [[no_unique_address]] */ _Base_sentinel _Last{};\r\n            const _Pr* _Pred = nullptr;\r\n\r\n        public:\r\n            _Sentinel() = default;\r\n\r\n            constexpr explicit _Sentinel(_Base_sentinel _Last_, const _Pr* const _Pred_)\r\n                noexcept(is_nothrow_move_constructible_v<_Base_sentinel>) // strengthened\r\n                : _Last(_STD move(_Last_)), _Pred(_Pred_) {}\r\n\r\n            constexpr _Sentinel(_Sentinel<!_Const, _Wrapped> _That) noexcept(\r\n                is_nothrow_constructible_v<_Base_sentinel, _Maybe_wrapped<_Wrapped, sentinel_t<_Vw>>>) // strengthened\r\n                requires _Const && convertible_to<_Maybe_wrapped<_Wrapped, sentinel_t<_Vw>>, _Base_sentinel>\r\n                : _Last(_STD move(_That._Last)), _Pred(_That._Pred) {}\r\n\r\n            _NODISCARD constexpr _Base_sentinel base() const\r\n                noexcept(is_nothrow_copy_constructible_v<_Base_sentinel>) /* strengthened */ {\r\n                return _Last;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Base_iterator& _Left, const _Sentinel& _Right) {\r\n                return _Right._Last == _Left || !_STD invoke(*_Right._Pred, *_Left);\r\n            }\r\n\r\n            template <bool _OtherConst = !_Const>\r\n                requires sentinel_for<_Base_sentinel, _Maybe_const_iter<_OtherConst>>\r\n            _NODISCARD friend constexpr bool operator==(\r\n                const _Maybe_const_iter<_OtherConst>& _Left, const _Sentinel& _Right) {\r\n                return _Right._Last == _Left || !_STD invoke(*_Right._Pred, *_Left);\r\n            }\r\n\r\n            using _Prevent_inheriting_unwrap = _Sentinel;\r\n\r\n            _NODISCARD constexpr auto _Unwrapped() const& noexcept(\r\n                noexcept(_Sentinel<_Const, false>{_Last._Unwrapped(), _Pred}))\r\n                requires _Wrapped && _Unwrappable_sentinel_for<sentinel_t<_Base_t>, const iterator_t<_Base_t>&>\r\n            {\r\n                return _Sentinel<_Const, false>{_Last._Unwrapped(), _Pred};\r\n            }\r\n            _NODISCARD constexpr auto _Unwrapped() && noexcept(\r\n                noexcept(_Sentinel<_Const, false>{_STD move(_Last)._Unwrapped(), _Pred}))\r\n                requires _Wrapped && _Unwrappable_sentinel_for<sentinel_t<_Base_t>, iterator_t<_Base_t>>\r\n            {\r\n                return _Sentinel<_Const, false>{_STD move(_Last)._Unwrapped(), _Pred};\r\n            }\r\n\r\n            static constexpr bool _Unwrap_when_unverified = _Do_unwrap_when_unverified_v<iterator_t<_Base_t>>;\r\n\r\n            constexpr void _Seek_to(const _Sentinel<_Const, false>& _That)\r\n                requires _Wrapped\r\n            {\r\n                _Seek_wrapped(_Last, _That._Last);\r\n            }\r\n            constexpr void _Seek_to(_Sentinel<_Const, false>&& _That)\r\n                requires _Wrapped\r\n            {\r\n                _Seek_wrapped(_Last, _STD move(_That._Last));\r\n            }\r\n        };\r\n\r\n    public:\r\n        take_while_view()\r\n            requires default_initializable<_Vw> && default_initializable<_Pr>\r\n        = default;\r\n\r\n        constexpr explicit take_while_view(_Vw _Range_, _Pr _Pred_)\r\n            noexcept(is_nothrow_move_constructible_v<_Vw> && is_nothrow_move_constructible_v<_Pr>) // strengthened\r\n            : _Range(_STD move(_Range_)), _Pred{in_place, _STD move(_Pred_)} {}\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) /* strengthened */\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr const _Pr& pred() const noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Pred, \"take_while_view has no predicate\");\r\n#endif\r\n            return *_Pred;\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() noexcept(noexcept(_RANGES begin(_Range))) /* strengthened */\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            return _RANGES begin(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const noexcept(noexcept(_RANGES begin(_Range))) /* strengthened */\r\n            requires range<const _Vw> && indirect_unary_predicate<const _Pr, iterator_t<const _Vw>>\r\n        {\r\n            return _RANGES begin(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() noexcept(\r\n            noexcept(_RANGES end(_Range)) && is_nothrow_move_constructible_v<_Sentinel<false>>) /* strengthened */\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Pred, \"cannot call end on a take_while_view with no predicate\");\r\n#endif\r\n            return _Sentinel<false>{_RANGES end(_Range), _STD addressof(*_Pred)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const noexcept(\r\n            noexcept(_RANGES end(_Range)) && is_nothrow_move_constructible_v<_Sentinel<true>>) /* strengthened */\r\n            requires range<const _Vw> && indirect_unary_predicate<const _Pr, iterator_t<const _Vw>>\r\n        {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Pred, \"cannot call end on a take_while_view with no predicate\");\r\n#endif\r\n            return _Sentinel<true>{_RANGES end(_Range), _STD addressof(*_Pred)};\r\n        }\r\n    };\r\n\r\n    template <class _Rng, class _Pr>\r\n    take_while_view(_Rng&&, _Pr) -> take_while_view<views::all_t<_Rng>, _Pr>;\r\n\r\n#if _HAS_CXX23\r\n    template <class _Rng, class _Pr>\r\n    constexpr auto _Compile_time_max_size<take_while_view<_Rng, _Pr>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng, class _Pr>\r\n    constexpr auto _Compile_time_max_size<const take_while_view<_Rng, _Pr>> = _Compile_time_max_size<const _Rng>;\r\n#endif // _HAS_CXX23\r\n\r\n    namespace views {\r\n        struct _Take_while_fn {\r\n            template <viewable_range _Rng, class _Pr>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Pr _Pred)\r\n                noexcept(noexcept(take_while_view(_STD forward<_Rng>(_Range), _STD move(_Pred))))\r\n                requires requires { take_while_view(static_cast<_Rng &&>(_Range), _STD move(_Pred)); }\r\n            {\r\n                return take_while_view(_STD forward<_Rng>(_Range), _STD move(_Pred));\r\n            }\r\n\r\n            template <class _Pr>\r\n                requires constructible_from<decay_t<_Pr>, _Pr>\r\n            _NODISCARD static constexpr auto operator()(_Pr&& _Pred)\r\n                noexcept(is_nothrow_constructible_v<decay_t<_Pr>, _Pr>) {\r\n                return _Range_closure<_Take_while_fn, decay_t<_Pr>>{_STD forward<_Pr>(_Pred)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Take_while_fn take_while;\r\n    } // namespace views\r\n\r\n    _EXPORT_STD template <view _Vw>\r\n    class drop_view : public _Cached_position_t<forward_range<_Vw> && !(random_access_range<_Vw> && sized_range<_Vw>),\r\n                          _Vw, drop_view<_Vw>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n        range_difference_t<_Vw> _Count = 0;\r\n\r\n        _NODISCARD constexpr auto _Find_first() {\r\n            if constexpr (sized_range<_Vw>) {\r\n                _STL_INTERNAL_STATIC_ASSERT(!random_access_range<_Vw>);\r\n                auto _Offset = _RANGES distance(_Range);\r\n                if constexpr (bidirectional_range<_Vw> && common_range<_Vw>) {\r\n                    if (_Count >= _Offset / 2) {\r\n                        auto _Result = _RANGES end(_Range);\r\n                        while (_Offset > _Count) {\r\n                            --_Offset;\r\n                            --_Result;\r\n                        }\r\n\r\n                        return _Result;\r\n                    }\r\n                }\r\n\r\n                if (_Offset > _Count) {\r\n                    _Offset = _Count;\r\n                }\r\n\r\n                return _RANGES next(_RANGES begin(_Range), _Offset);\r\n            } else {\r\n                return _RANGES next(_RANGES begin(_Range), _Count, _RANGES end(_Range));\r\n            }\r\n        }\r\n\r\n    public:\r\n        drop_view()\r\n            requires default_initializable<_Vw>\r\n        = default;\r\n\r\n        constexpr explicit drop_view(_Vw _Range_, const range_difference_t<_Vw> _Count_)\r\n            noexcept(is_nothrow_move_constructible_v<_Vw>) // strengthened\r\n            : _Range(_STD move(_Range_)), _Count{_Count_} {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Count_ >= 0, \"Number of elements to drop must be non-negative (N4971 [range.drop.view]/1)\");\r\n#endif\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) /* strengthened */\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin()\r\n            requires (!(_Simple_view<_Vw> && random_access_range<const _Vw> && sized_range<const _Vw>) )\r\n        {\r\n            if constexpr (sized_range<_Vw> && random_access_range<_Vw>) {\r\n                const auto _Offset = (_STD min) (_RANGES distance(_Range), _Count);\r\n                return _RANGES begin(_Range) + _Offset;\r\n            } else {\r\n                if constexpr (forward_range<_Vw>) {\r\n                    if (this->_Has_cache()) {\r\n                        return this->_Get_cache(_Range);\r\n                    }\r\n                }\r\n\r\n                same_as<iterator_t<_Vw>> auto _Result = _Find_first();\r\n                if constexpr (forward_range<_Vw>) {\r\n                    this->_Set_cache(_Range, _Result);\r\n                }\r\n                return _Result;\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const\r\n            requires random_access_range<const _Vw> && sized_range<const _Vw>\r\n        {\r\n            const auto _Offset = (_STD min) (_RANGES distance(_Range), _Count);\r\n            return _RANGES begin(_Range) + _Offset;\r\n        }\r\n\r\n        _NODISCARD constexpr auto end()\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            return _RANGES end(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const\r\n            requires range<const _Vw>\r\n        {\r\n            return _RANGES end(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto size()\r\n            requires sized_range<_Vw>\r\n        {\r\n            const auto _Size          = _RANGES size(_Range);\r\n            const auto _Count_as_size = static_cast<range_size_t<_Vw>>(_Count);\r\n            if (_Size < _Count_as_size) {\r\n                return range_size_t<_Vw>{0};\r\n            } else {\r\n                return static_cast<range_size_t<_Vw>>(_Size - _Count_as_size);\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const\r\n            requires sized_range<const _Vw>\r\n        {\r\n            const auto _Size          = _RANGES size(_Range);\r\n            const auto _Count_as_size = static_cast<range_size_t<_Vw>>(_Count);\r\n            if (_Size < _Count_as_size) {\r\n                return range_size_t<_Vw>{0};\r\n            } else {\r\n                return static_cast<range_size_t<_Vw>>(_Size - _Count_as_size);\r\n            }\r\n        }\r\n    };\r\n\r\n    template <class _Rng>\r\n    drop_view(_Rng&&, range_difference_t<_Rng>) -> drop_view<views::all_t<_Rng>>;\r\n\r\n    template <class _Rng>\r\n    constexpr bool enable_borrowed_range<drop_view<_Rng>> = enable_borrowed_range<_Rng>;\r\n\r\n#if _HAS_CXX23\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<drop_view<_Rng>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<const drop_view<_Rng>> = _Compile_time_max_size<const _Rng>;\r\n#endif // _HAS_CXX23\r\n\r\n    namespace views {\r\n        class _Drop_fn {\r\n        private:\r\n            enum class _St {\r\n                _Empty,\r\n                _Reconstruct_span,\r\n                _Reconstruct_subrange,\r\n                _Reconstruct_repeat,\r\n                _Reconstruct_other,\r\n                _Drop_view\r\n            };\r\n\r\n            template <class _Rng>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                using _Ty = remove_cvref_t<_Rng>;\r\n\r\n                if constexpr (_Is_specialization_v<_Ty, empty_view>) {\r\n                    return {_St::_Empty, true};\r\n                } else if constexpr (_Is_span_v<_Ty>) {\r\n                    return {_St::_Reconstruct_span, true};\r\n                } else if constexpr (_Is_specialization_v<_Ty, basic_string_view>) {\r\n                    return {_St::_Reconstruct_other, true};\r\n#if _HAS_CXX23\r\n                } else if constexpr (_Is_specialization_v<_Ty, repeat_view>) {\r\n                    using _Range_val_t = range_value_t<_Ty>;\r\n                    return {_St::_Reconstruct_repeat,\r\n                        is_nothrow_constructible_v<_Range_val_t, _Forward_like_t<_Rng, _Range_val_t>>};\r\n#endif // _HAS_CXX23\r\n                } else if constexpr (_Random_sized_range<_Ty> && _Is_subrange_v<_Ty>) {\r\n                    if constexpr (sized_sentinel_for<sentinel_t<_Ty>, iterator_t<_Ty>>) {\r\n                        return {_St::_Reconstruct_subrange,\r\n                            noexcept(_Ty(_RANGES begin(_STD declval<_Rng&>()) + _RANGES distance(_STD declval<_Rng&>()),\r\n                                _RANGES end(_STD declval<_Rng&>())))};\r\n                    } else {\r\n                        return {_St::_Reconstruct_subrange,\r\n                            noexcept(_Ty(_RANGES begin(_STD declval<_Rng&>()) + _RANGES distance(_STD declval<_Rng&>()),\r\n                                _RANGES end(_STD declval<_Rng&>()), range_difference_t<_Rng>{0}))};\r\n                    }\r\n                } else if constexpr (_Random_sized_range<_Ty> && _Is_specialization_v<_Ty, iota_view>) {\r\n                    return {_St::_Reconstruct_other,\r\n                        noexcept(_Ty(_RANGES begin(_STD declval<_Rng&>()) + _RANGES distance(_STD declval<_Rng&>()),\r\n                            _RANGES end(_STD declval<_Rng&>())))};\r\n                } else {\r\n                    return {_St::_Drop_view, noexcept(drop_view(_STD declval<_Rng>(), range_difference_t<_Rng>{0}))};\r\n                }\r\n            }\r\n\r\n            template <class _Rng>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Rng>();\r\n\r\n        public:\r\n            template <viewable_range _Rng>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range, range_difference_t<_Rng> _Count)\r\n                noexcept(_Choice<_Rng>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Rng>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_Empty) {\r\n                    // it's an empty_view: return another empty view\r\n                    return remove_cvref_t<_Rng>{};\r\n                } else if constexpr (_Strat == _St::_Drop_view) {\r\n                    return drop_view(_STD forward<_Rng>(_Range), _Count);\r\n#if _HAS_CXX23\r\n                } else if constexpr (_Strat == _St::_Reconstruct_repeat) {\r\n                    if constexpr (sized_range<_Rng>) {\r\n                        const auto _Size = _RANGES distance(_Range);\r\n                        _Count           = _Size - (_STD min) (_Size, _Count);\r\n                        return repeat_view(_STD forward_like<_Rng>(*_Range._Value), _Count);\r\n                    } else {\r\n                        return _Range;\r\n                    }\r\n#endif // _HAS_CXX23\r\n                } else {\r\n                    // it's a \"reconstructible range\"; return the same kind of range with a restricted extent\r\n                    _Count = (_STD min) (_RANGES distance(_Range), _Count);\r\n\r\n                    if constexpr (_Strat == _St::_Reconstruct_span) {\r\n                        return span(_Ubegin(_Range) + _Count, _Uend(_Range));\r\n                    } else if constexpr (_Strat == _St::_Reconstruct_subrange) {\r\n                        if constexpr (sized_sentinel_for<sentinel_t<_Rng>, iterator_t<_Rng>>) {\r\n                            return remove_cvref_t<_Rng>(_RANGES begin(_Range) + _Count, _RANGES end(_Range));\r\n                        } else {\r\n                            return remove_cvref_t<_Rng>(\r\n                                _RANGES begin(_Range) + _Count, _RANGES end(_Range), _RANGES size(_Range) - _Count);\r\n                        }\r\n                    } else if constexpr (_Strat == _St::_Reconstruct_other) {\r\n                        return remove_cvref_t<_Rng>(_RANGES begin(_Range) + _Count, _RANGES end(_Range));\r\n                    } else {\r\n                        static_assert(false); // unexpected strategy\r\n                    }\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n                requires constructible_from<decay_t<_Ty>, _Ty>\r\n            _NODISCARD static constexpr auto operator()(_Ty&& _Length)\r\n                noexcept(is_nothrow_constructible_v<decay_t<_Ty>, _Ty>) {\r\n                return _Range_closure<_Drop_fn, decay_t<_Ty>>{_STD forward<_Ty>(_Length)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Drop_fn drop;\r\n    } // namespace views\r\n\r\n    _EXPORT_STD template <view _Vw, class _Pr>\r\n        requires input_range<_Vw> && is_object_v<_Pr> && indirect_unary_predicate<const _Pr, iterator_t<_Vw>>\r\n    class drop_while_view : public _Cached_position_t<forward_range<_Vw>, _Vw, drop_while_view<_Vw, _Pr>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n        /* [[no_unique_address]] */ _Movable_box<_Pr> _Pred{};\r\n\r\n    public:\r\n        drop_while_view()\r\n            requires default_initializable<_Vw> && default_initializable<_Pr>\r\n        = default;\r\n\r\n        constexpr explicit drop_while_view(_Vw _Range_, _Pr _Pred_)\r\n            noexcept(is_nothrow_move_constructible_v<_Vw> && is_nothrow_move_constructible_v<_Pr>) // strengthened\r\n            : _Range(_STD move(_Range_)), _Pred{in_place, _STD move(_Pred_)} {}\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) /* strengthened */\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr const _Pr& pred() const noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Pred, \"drop_while_view has no predicate\");\r\n#endif\r\n            return *_Pred;\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(\r\n                _Pred, \"N4950 [range.drop.while.view]/3 forbids calling begin on a drop_while_view with no predicate\");\r\n#endif\r\n            if constexpr (forward_range<_Vw>) {\r\n                if (this->_Has_cache()) {\r\n                    return this->_Get_cache(_Range);\r\n                }\r\n            }\r\n\r\n            auto _First = _RANGES find_if_not(_Range, _STD cref(*_Pred));\r\n            if constexpr (forward_range<_Vw>) {\r\n                this->_Set_cache(_Range, _First);\r\n            }\r\n\r\n            return _First;\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() noexcept(noexcept(_RANGES end(_Range))) /* strengthened */ {\r\n            return _RANGES end(_Range);\r\n        }\r\n    };\r\n\r\n    template <class _Rng, class _Pr>\r\n    drop_while_view(_Rng&&, _Pr) -> drop_while_view<views::all_t<_Rng>, _Pr>;\r\n\r\n    template <class _Rng, class _Pr>\r\n    constexpr bool enable_borrowed_range<drop_while_view<_Rng, _Pr>> = enable_borrowed_range<_Rng>;\r\n\r\n#if _HAS_CXX23\r\n    template <class _Rng, class _Pr>\r\n    constexpr auto _Compile_time_max_size<drop_while_view<_Rng, _Pr>> = _Compile_time_max_size<_Rng>;\r\n#endif // _HAS_CXX23\r\n\r\n    namespace views {\r\n        struct _Drop_while_fn {\r\n            template <viewable_range _Rng, class _Pr>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Pr _Pred)\r\n                noexcept(noexcept(drop_while_view(_STD forward<_Rng>(_Range), _STD move(_Pred))))\r\n                requires requires { drop_while_view(static_cast<_Rng &&>(_Range), _STD move(_Pred)); }\r\n            {\r\n                return drop_while_view(_STD forward<_Rng>(_Range), _STD move(_Pred));\r\n            }\r\n\r\n            template <class _Pr>\r\n                requires constructible_from<decay_t<_Pr>, _Pr>\r\n            _NODISCARD static constexpr auto operator()(_Pr&& _Pred)\r\n                noexcept(is_nothrow_constructible_v<decay_t<_Pr>, _Pr>) {\r\n                return _Range_closure<_Drop_while_fn, decay_t<_Pr>>{_STD forward<_Pr>(_Pred)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Drop_while_fn drop_while;\r\n    } // namespace views\r\n\r\n    template <class _Ty>\r\n    _NODISCARD constexpr _Ty& _As_lvalue(_Ty&& _Val) noexcept {\r\n        return static_cast<_Ty&>(_Val);\r\n    }\r\n\r\n    struct _Construct_tag {\r\n        explicit _Construct_tag() = default;\r\n    };\r\n\r\n    _EXPORT_STD template <input_range _Vw>\r\n        requires view<_Vw> && input_range<range_reference_t<_Vw>>\r\n    class join_view;\r\n\r\n    template <class _Vw>\r\n    class _Join_view_base : public view_interface<join_view<_Vw>> {\r\n    private:\r\n        struct _Cache_wrapper {\r\n            template <input_iterator _Iter>\r\n            constexpr _Cache_wrapper(_Construct_tag, const _Iter& _It)\r\n                noexcept(noexcept(static_cast<decltype(_Val)>(*_It)))\r\n                : _Val(*_It) {}\r\n\r\n            remove_cv_t<range_reference_t<_Vw>> _Val;\r\n        };\r\n\r\n    protected:\r\n        /* [[no_unique_address]] */ _Non_propagating_cache<_Cache_wrapper, false> _Inner{};\r\n    };\r\n\r\n    template <class _Vw>\r\n        requires is_reference_v<range_reference_t<_Vw>>\r\n    class _Join_view_base<_Vw> : public view_interface<join_view<_Vw>> {};\r\n\r\n    template <class _Vw>\r\n    class _Join_view_outer_iter_base : public _Join_view_base<_Vw> {\r\n    protected:\r\n        _Non_propagating_cache<iterator_t<_Vw>> _Outer;\r\n    };\r\n\r\n    template <forward_range _Vw>\r\n    class _Join_view_outer_iter_base<_Vw> : public _Join_view_base<_Vw> {};\r\n\r\n    _EXPORT_STD template <input_range _Vw>\r\n        requires view<_Vw> && input_range<range_reference_t<_Vw>>\r\n    class join_view : public _Join_view_outer_iter_base<_Vw> {\r\n    private:\r\n        template <bool _Const>\r\n        using _InnerRng = range_reference_t<_Maybe_const<_Const, _Vw>>;\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n\r\n        template <class _Outer, class _Inner, bool _Deref_is_glvalue>\r\n        struct _Category_base {};\r\n\r\n        template <forward_range _Outer, forward_range _Inner>\r\n        struct _Category_base<_Outer, _Inner, true> {\r\n            using iterator_category =\r\n                conditional_t<common_range<_Inner>\r\n                                  && derived_from<_Iter_cat_t<iterator_t<_Outer>>, bidirectional_iterator_tag>\r\n                                  && derived_from<_Iter_cat_t<iterator_t<_Inner>>, bidirectional_iterator_tag>,\r\n                    bidirectional_iterator_tag,\r\n                    conditional_t<derived_from<_Iter_cat_t<iterator_t<_Outer>>, forward_iterator_tag>\r\n                                      && derived_from<_Iter_cat_t<iterator_t<_Inner>>, forward_iterator_tag>,\r\n                        forward_iterator_tag, input_iterator_tag>>;\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Iterator_base\r\n            : public _Category_base<_Maybe_const<_Const, _Vw>, _InnerRng<_Const>, is_reference_v<_InnerRng<_Const>>> {};\r\n\r\n        template <bool _Const>\r\n            requires forward_range<_Maybe_const<_Const, _Vw>>\r\n        class _Iterator_base<_Const>\r\n            : public _Category_base<_Maybe_const<_Const, _Vw>, _InnerRng<_Const>, is_reference_v<_InnerRng<_Const>>> {\r\n        protected:\r\n            using _OuterIter = iterator_t<_Maybe_const<_Const, _Vw>>;\r\n\r\n            _Iterator_base() = default;\r\n            constexpr explicit _Iterator_base(_OuterIter&& _Outer_) : _Outer(_STD move(_Outer_)) {}\r\n\r\n            /* [[no_unique_address]] */ _OuterIter _Outer{};\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Iterator : public _Iterator_base<_Const> {\r\n        private:\r\n            friend join_view;\r\n\r\n            using _Mybase    = _Iterator_base<_Const>;\r\n            using _Parent_t  = _Maybe_const<_Const, join_view>;\r\n            using _Base      = _Maybe_const<_Const, _Vw>;\r\n            using _OuterIter = iterator_t<_Base>;\r\n            using _InnerIter = iterator_t<_InnerRng<_Const>>;\r\n\r\n            // True if and only if the expression *i, where i is an iterator from the outer range, is a glvalue:\r\n            static constexpr bool _Deref_is_glvalue = is_reference_v<_InnerRng<_Const>>;\r\n\r\n            /* [[no_unique_address]] */ _Defaultabox<_InnerIter> _Inner{}; // Non-standard extension: when _Inner_iter\r\n                                                                           // is default-constructible, we don't wrap in\r\n                                                                           // an optional-like.\r\n            _Parent_t* _Parent{};\r\n\r\n            constexpr _Iterator(_Parent_t& _Parent_, _OuterIter _Outer_)\r\n                requires forward_range<_Base>\r\n                : _Mybase{_STD move(_Outer_)}, _Parent{_STD addressof(_Parent_)} {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STD _Adl_verify_range(this->_Outer, _RANGES end(_Parent_._Range));\r\n                _STD _Adl_verify_range(_RANGES begin(_Parent_._Range), this->_Outer);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _Satisfy();\r\n            }\r\n\r\n            constexpr explicit _Iterator(_Parent_t& _Parent)\r\n                requires (!forward_range<_Base>)\r\n                : _Parent{_STD addressof(_Parent)} {\r\n                _Satisfy();\r\n            }\r\n\r\n            _NODISCARD constexpr _OuterIter& _Get_outer() noexcept {\r\n                if constexpr (forward_range<_Base>) {\r\n                    return this->_Outer;\r\n                } else {\r\n                    return *_Parent->_Outer;\r\n                }\r\n            }\r\n\r\n            _NODISCARD constexpr const _OuterIter& _Get_outer() const noexcept {\r\n                if constexpr (forward_range<_Base>) {\r\n                    return this->_Outer;\r\n                } else {\r\n                    return *_Parent->_Outer;\r\n                }\r\n            }\r\n\r\n            constexpr auto&& _Update_inner() {\r\n                if constexpr (_Deref_is_glvalue) {\r\n                    return *_Get_outer();\r\n                } else {\r\n                    return _Parent->_Inner._Emplace(_Construct_tag{}, _Get_outer())._Val;\r\n                }\r\n            }\r\n\r\n            constexpr void _Satisfy() {\r\n                auto& _Outer     = _Get_outer();\r\n                const auto _Last = _RANGES end(_Parent->_Range);\r\n                for (; _Outer != _Last; ++_Outer) {\r\n                    auto&& _Tmp = _Update_inner();\r\n                    _Inner      = _RANGES begin(_Tmp);\r\n                    if (*_Inner != _RANGES end(_Tmp)) {\r\n                        return;\r\n                    }\r\n                }\r\n                if constexpr (_Deref_is_glvalue) {\r\n                    _Inner._Reset();\r\n                }\r\n            }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            constexpr void _Check_dereference() const noexcept {\r\n                _STL_VERIFY(_Parent != nullptr, \"cannot dereference value-initialized join_view iterator\");\r\n                _STL_VERIFY(_Get_outer() != _RANGES end(_Parent->_Range), \"cannot dereference join_view end iterator\");\r\n                sentinel_t<_InnerRng<_Const>> _Last;\r\n                if constexpr (_Deref_is_glvalue) {\r\n                    _Last = _RANGES end(_RANGES _As_lvalue(*_Get_outer()));\r\n                } else {\r\n                    _Last = _RANGES end((*_Parent->_Inner)._Val);\r\n                }\r\n                _STL_VERIFY(_Inner && *_Inner != _Last, \"cannot dereference join_view end iterator\");\r\n            }\r\n\r\n            constexpr void _Same_range(const _Iterator& _Right) const noexcept {\r\n                _STL_VERIFY(_Parent == _Right._Parent, \"cannot compare incompatible join_view iterators\");\r\n            }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        public:\r\n            using iterator_concept =\r\n                conditional_t<_Deref_is_glvalue && bidirectional_range<_Base> && bidirectional_range<_InnerRng<_Const>>\r\n                                  && common_range<_InnerRng<_Const>>,\r\n                    bidirectional_iterator_tag,\r\n                    conditional_t<_Deref_is_glvalue && forward_range<_Base> && forward_range<_InnerRng<_Const>>,\r\n                        forward_iterator_tag, input_iterator_tag>>;\r\n            using value_type      = range_value_t<_InnerRng<_Const>>;\r\n            using difference_type = common_type_t<range_difference_t<_Base>, range_difference_t<_InnerRng<_Const>>>;\r\n\r\n            _Iterator() = default;\r\n\r\n            constexpr _Iterator(_Iterator<!_Const> _It)\r\n                requires _Const && convertible_to<iterator_t<_Vw>, _OuterIter>\r\n                          && convertible_to<iterator_t<_InnerRng<false>>, _InnerIter>\r\n                : _Mybase(_STD move(_It._Outer)), _Inner(_STD move(_It._Inner)), _Parent(_It._Parent) {}\r\n\r\n            _NODISCARD constexpr decltype(auto) operator*() const noexcept(noexcept(**_Inner)) /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Check_dereference();\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return **_Inner;\r\n            }\r\n\r\n            _NODISCARD constexpr _InnerIter operator->() const\r\n                noexcept(is_nothrow_copy_constructible_v<_InnerIter>) // strengthened\r\n                requires _Has_arrow<_InnerIter> && copyable<_InnerIter>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Check_dereference();\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return *_Inner;\r\n            }\r\n\r\n            constexpr _Iterator& operator++() {\r\n                auto& _Outer = _Get_outer();\r\n                if constexpr (_Deref_is_glvalue) {\r\n                    if (++*_Inner == _RANGES end(_RANGES _As_lvalue(*_Outer))) {\r\n                        ++_Outer;\r\n                        _Satisfy();\r\n                    }\r\n                } else {\r\n                    if (++*_Inner == _RANGES end((*_Parent->_Inner)._Val)) {\r\n                        ++_Outer;\r\n                        _Satisfy();\r\n                    }\r\n                }\r\n                return *this;\r\n            }\r\n\r\n            constexpr decltype(auto) operator++(int) {\r\n                if constexpr (_Deref_is_glvalue && forward_range<_Base> && forward_range<_InnerRng<_Const>>) {\r\n                    auto _Tmp = *this;\r\n                    ++*this;\r\n                    return _Tmp;\r\n                } else {\r\n                    ++*this;\r\n                }\r\n            }\r\n\r\n            constexpr _Iterator& operator--()\r\n                requires _Deref_is_glvalue && bidirectional_range<_Base> && bidirectional_range<_InnerRng<_Const>>\r\n                      && common_range<_InnerRng<_Const>>\r\n            {\r\n                auto& _Outer = _Get_outer();\r\n                if (_Outer == _RANGES end(_Parent->_Range)) {\r\n                    --_Outer;\r\n                    _Inner = _RANGES end(_RANGES _As_lvalue(*_Outer));\r\n                }\r\n                while (*_Inner == _RANGES begin(_RANGES _As_lvalue(*_Outer))) {\r\n                    --_Outer;\r\n                    *_Inner = _RANGES end(_RANGES _As_lvalue(*_Outer));\r\n                }\r\n                --*_Inner;\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator--(int)\r\n                requires _Deref_is_glvalue && bidirectional_range<_Base> && bidirectional_range<_InnerRng<_Const>>\r\n                      && common_range<_InnerRng<_Const>>\r\n            {\r\n                auto _Tmp = *this;\r\n                --*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Outer == _Right._Outer && _Left._Inner == _Right._Inner)) /* strengthened */\r\n                requires _Deref_is_glvalue && forward_range<_Base> && equality_comparable<_InnerIter>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Left._Same_range(_Right);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return _Left._Outer == _Right._Outer && _Left._Inner == _Right._Inner;\r\n            }\r\n\r\n            _NODISCARD friend constexpr decltype(auto) iter_move(const _Iterator& _It)\r\n                noexcept(noexcept(_RANGES iter_move(*_It._Inner))) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _It._Check_dereference();\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return _RANGES iter_move(*_It._Inner);\r\n            }\r\n\r\n            friend constexpr void iter_swap(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_RANGES iter_swap(*_Left._Inner, *_Right._Inner)))\r\n                requires indirectly_swappable<_InnerIter>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Left._Check_dereference();\r\n                _Right._Check_dereference();\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _RANGES iter_swap(*_Left._Inner, *_Right._Inner);\r\n            }\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Sentinel {\r\n        private:\r\n            friend join_view;\r\n\r\n            using _Parent_t = _Maybe_const<_Const, join_view>;\r\n            using _Base     = _Maybe_const<_Const, _Vw>;\r\n\r\n            template <bool _OtherConst>\r\n            using _Maybe_const_iter = iterator_t<_Maybe_const<_OtherConst, _Vw>>;\r\n\r\n            /* [[no_unique_address]] */ sentinel_t<_Base> _Last{};\r\n\r\n            template <bool _OtherConst>\r\n                requires sentinel_for<sentinel_t<_Base>, _Maybe_const_iter<_OtherConst>>\r\n            _NODISCARD constexpr bool _Equal(const _Iterator<_OtherConst>& _It) const\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_It._Get_outer() == _Last))) {\r\n                return _It._Get_outer() == _Last;\r\n            }\r\n\r\n        public:\r\n            _Sentinel() = default;\r\n            constexpr explicit _Sentinel(_Parent_t& _Parent)\r\n                noexcept(noexcept(_RANGES end(_Parent._Range))\r\n                         && is_nothrow_move_constructible_v<sentinel_t<_Base>>) // strengthened\r\n                : _Last(_RANGES end(_Parent._Range)) {}\r\n\r\n            constexpr _Sentinel(_Sentinel<!_Const> _Se)\r\n                noexcept(is_nothrow_constructible_v<sentinel_t<_Base>, sentinel_t<_Vw>>) // strengthened\r\n                requires _Const && convertible_to<sentinel_t<_Vw>, sentinel_t<_Base>>\r\n                : _Last(_STD move(_Se._Last)) {}\r\n\r\n            template <bool _OtherConst>\r\n                requires sentinel_for<sentinel_t<_Base>, _Maybe_const_iter<_OtherConst>>\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator<_OtherConst>& _Left, const _Sentinel& _Right)\r\n                noexcept(noexcept(_Right._Equal(_Left))) /* strengthened */ {\r\n                return _Right._Equal(_Left);\r\n            }\r\n        };\r\n\r\n    public:\r\n        join_view()\r\n            requires default_initializable<_Vw>\r\n        = default;\r\n\r\n        constexpr explicit join_view(_Vw _Range_) noexcept(is_nothrow_move_constructible_v<_Vw>) // strengthened\r\n            : _Range(_STD move(_Range_)) {}\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) /* strengthened */\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() {\r\n            if constexpr (forward_range<_Vw>) {\r\n                constexpr bool _Use_const = _Simple_view<_Vw> && is_reference_v<_InnerRng<false>>;\r\n                return _Iterator<_Use_const>{*this, _RANGES begin(_Range)};\r\n            } else {\r\n                this->_Outer._Emplace(_RANGES begin(_Range));\r\n                return _Iterator<false>{*this};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr _Iterator<true> begin() const\r\n            requires forward_range<const _Vw> && is_reference_v<_InnerRng<true>> && input_range<_InnerRng<true>>\r\n        {\r\n            return _Iterator<true>{*this, _RANGES begin(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() {\r\n            if constexpr (forward_range<_Vw> && is_reference_v<_InnerRng<false>> && forward_range<_InnerRng<false>>\r\n                          && common_range<_Vw> && common_range<_InnerRng<false>>) {\r\n                return _Iterator<_Simple_view<_Vw>>{*this, _RANGES end(_Range)};\r\n            } else {\r\n                return _Sentinel<_Simple_view<_Vw>>{*this};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const\r\n            requires forward_range<const _Vw> && is_reference_v<_InnerRng<true>> && input_range<_InnerRng<true>>\r\n        {\r\n            if constexpr (forward_range<_InnerRng<true>> && common_range<const _Vw> && common_range<_InnerRng<true>>) {\r\n                return _Iterator<true>{*this, _RANGES end(_Range)};\r\n            } else {\r\n                return _Sentinel<true>{*this};\r\n            }\r\n        }\r\n    };\r\n\r\n    template <class _Rng>\r\n    explicit join_view(_Rng&&) -> join_view<views::all_t<_Rng>>;\r\n\r\n#if _HAS_CXX23\r\n    template <class _Rng>\r\n    _NODISCARD consteval auto _Join_view_compile_time_max_size() {\r\n        using _Inner = remove_reference_t<range_reference_t<_Rng>>;\r\n        using _Size_type =\r\n            common_type_t<decltype(_Compile_time_max_size<_Rng>), decltype(_Compile_time_max_size<_Inner>)>;\r\n        _Size_type _Result{};\r\n        const bool _Overflow = _Mul_overflow(static_cast<_Size_type>(_Compile_time_max_size<_Rng>),\r\n            static_cast<_Size_type>(_Compile_time_max_size<_Inner>), _Result);\r\n        if (_Overflow) {\r\n            return (numeric_limits<_Size_type>::max)();\r\n        } else {\r\n            return _Result;\r\n        }\r\n    }\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<join_view<_Rng>> = _Join_view_compile_time_max_size<_Rng>();\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<const join_view<_Rng>> = _Join_view_compile_time_max_size<const _Rng>();\r\n#endif // _HAS_CXX23\r\n\r\n    namespace views {\r\n        struct _Join_fn : public _Pipe::_Base<_Join_fn> {\r\n            template <viewable_range _Rng>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range)\r\n                noexcept(noexcept(join_view<views::all_t<_Rng>>{_STD forward<_Rng>(_Range)}))\r\n                requires requires { join_view<views::all_t<_Rng>>{static_cast<_Rng &&>(_Range)}; }\r\n            {\r\n                return join_view<views::all_t<_Rng>>{_STD forward<_Rng>(_Range)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Join_fn join;\r\n    } // namespace views\r\n\r\n#if _HAS_CXX23\r\n    template <class... _Rngs>\r\n    using _Concat_reference_t = common_reference_t<range_reference_t<_Rngs>...>;\r\n\r\n    template <class... _Rngs>\r\n    using _Concat_value_t = common_type_t<range_value_t<_Rngs>...>;\r\n\r\n    template <class... _Rngs>\r\n    using _Concat_rvalue_reference_t = common_reference_t<range_rvalue_reference_t<_Rngs>...>;\r\n\r\n    template <class _Ref, class _RRef, class _It>\r\n    concept _Concat_indirectly_readable_impl = requires(const _It __i) {\r\n        { *__i } -> convertible_to<_Ref>;\r\n        { _RANGES iter_move(__i) } -> convertible_to<_RRef>;\r\n    };\r\n\r\n    template <class... _Rngs>\r\n    concept _Concat_indirectly_readable =\r\n        common_reference_with<_Concat_reference_t<_Rngs...>&&, _Concat_value_t<_Rngs...>&>\r\n        && common_reference_with<_Concat_reference_t<_Rngs...>&&, _Concat_rvalue_reference_t<_Rngs...>&&>\r\n        && common_reference_with<_Concat_rvalue_reference_t<_Rngs...>&&, const _Concat_value_t<_Rngs...>&>\r\n        && (_Concat_indirectly_readable_impl<_Concat_reference_t<_Rngs...>, _Concat_rvalue_reference_t<_Rngs...>,\r\n                iterator_t<_Rngs>>\r\n            && ...);\r\n\r\n    template <class... _Rngs>\r\n    concept _Concatable = requires {\r\n        typename _Concat_reference_t<_Rngs...>;\r\n        typename _Concat_value_t<_Rngs...>;\r\n        typename _Concat_rvalue_reference_t<_Rngs...>;\r\n    } && _Concat_indirectly_readable<_Rngs...>;\r\n\r\n    _EXPORT_STD template <input_range _Vw, forward_range _Pat>\r\n        requires view<_Vw> && input_range<range_reference_t<_Vw>> && view<_Pat>\r\n              && _Concatable<range_reference_t<_Vw>, _Pat>\r\n    class join_with_view;\r\n\r\n    template <class _Vw, class _Pat>\r\n    class _Join_with_view_base : public view_interface<join_with_view<_Vw, _Pat>> {\r\n    private:\r\n        struct _Cache_wrapper {\r\n            template <input_iterator _Iter>\r\n            constexpr _Cache_wrapper(_Construct_tag, const _Iter& _It)\r\n                noexcept(noexcept(static_cast<decltype(_Val)>(*_It)))\r\n                : _Val(*_It) {}\r\n\r\n            remove_cv_t<range_reference_t<_Vw>> _Val;\r\n        };\r\n\r\n    protected:\r\n        /* [[no_unique_address]] */ _Non_propagating_cache<_Cache_wrapper, false> _Inner{};\r\n    };\r\n\r\n    template <class _Vw, class _Pat>\r\n        requires is_reference_v<range_reference_t<_Vw>>\r\n    class _Join_with_view_base<_Vw, _Pat> : public view_interface<join_with_view<_Vw, _Pat>> {};\r\n\r\n    template <class _Vw, class _Pat>\r\n    class _Join_with_view_outer_iter_base : public _Join_with_view_base<_Vw, _Pat> {\r\n    protected:\r\n        _Non_propagating_cache<iterator_t<_Vw>> _Outer_it;\r\n    };\r\n\r\n    template <forward_range _Vw, class _Pat>\r\n    class _Join_with_view_outer_iter_base<_Vw, _Pat> : public _Join_with_view_base<_Vw, _Pat> {};\r\n\r\n    _EXPORT_STD template <input_range _Vw, forward_range _Pat>\r\n        requires view<_Vw> && input_range<range_reference_t<_Vw>> && view<_Pat>\r\n              && _Concatable<range_reference_t<_Vw>, _Pat>\r\n    class join_with_view : public _Join_with_view_outer_iter_base<_Vw, _Pat> {\r\n    private:\r\n        template <bool _Const>\r\n        using _InnerRng = range_reference_t<_Maybe_const<_Const, _Vw>>;\r\n\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n        /* [[no_unique_address]] */ _Pat _Pattern{};\r\n\r\n        template <bool _Const>\r\n        struct _Category_base {};\r\n\r\n        template <bool _Const>\r\n            requires forward_range<_Maybe_const<_Const, _Vw>> && forward_range<_InnerRng<_Const>>\r\n                  && is_reference_v<_InnerRng<_Const>>\r\n        struct _Category_base<_Const> {\r\n            using _Outer       = _Maybe_const<_Const, _Vw>;\r\n            using _Inner       = _InnerRng<_Const>;\r\n            using _PatternBase = _Maybe_const<_Const, _Pat>;\r\n\r\n            using iterator_category = conditional_t<\r\n                !is_reference_v<common_reference_t<range_reference_t<_Inner>, range_reference_t<_PatternBase>>>,\r\n                input_iterator_tag,\r\n                conditional_t<common_range<_Inner> && common_range<_PatternBase>\r\n                                  && derived_from<_Iter_cat_t<iterator_t<_Outer>>, bidirectional_iterator_tag>\r\n                                  && derived_from<_Iter_cat_t<iterator_t<_Inner>>, bidirectional_iterator_tag>\r\n                                  && derived_from<_Iter_cat_t<iterator_t<_PatternBase>>, bidirectional_iterator_tag>,\r\n                    bidirectional_iterator_tag,\r\n                    conditional_t<derived_from<_Iter_cat_t<iterator_t<_Outer>>, forward_iterator_tag>\r\n                                      && derived_from<_Iter_cat_t<iterator_t<_Inner>>, forward_iterator_tag>\r\n                                      && derived_from<_Iter_cat_t<iterator_t<_PatternBase>>, forward_iterator_tag>,\r\n                        forward_iterator_tag, input_iterator_tag>>>;\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Iterator_base : public _Category_base<_Const> {};\r\n\r\n        template <bool _Const>\r\n            requires forward_range<_Maybe_const<_Const, _Vw>>\r\n        class _Iterator_base<_Const> : public _Category_base<_Const> {\r\n        protected:\r\n            using _OuterIter = iterator_t<_Maybe_const<_Const, _Vw>>;\r\n\r\n            _Iterator_base() = default;\r\n            constexpr explicit _Iterator_base(_OuterIter&& _Outer_it_) : _Outer_it(_STD move(_Outer_it_)) {}\r\n\r\n            /* [[no_unique_address]] */ _OuterIter _Outer_it{};\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Iterator : public _Iterator_base<_Const> {\r\n        private:\r\n            friend join_with_view;\r\n\r\n            using _Mybase      = _Iterator_base<_Const>;\r\n            using _Parent_t    = _Maybe_const<_Const, join_with_view>;\r\n            using _Base        = _Maybe_const<_Const, _Vw>;\r\n            using _PatternBase = _Maybe_const<_Const, _Pat>;\r\n\r\n            using _OuterIter   = iterator_t<_Base>;\r\n            using _InnerIter   = iterator_t<_InnerRng<_Const>>;\r\n            using _PatternIter = iterator_t<_PatternBase>;\r\n\r\n            // True if and only if the expression *i, where i is an iterator from the outer range, is a glvalue:\r\n            static constexpr bool _Deref_is_glvalue = is_reference_v<_InnerRng<_Const>>;\r\n\r\n            _Parent_t* _Parent{};\r\n            _Variantish<_PatternIter, _InnerIter> _Inner_it{};\r\n\r\n            constexpr _Iterator(_Parent_t& _Parent_, _OuterIter _Outer_)\r\n                requires forward_range<_Base>\r\n                : _Mybase(_STD move(_Outer_)), _Parent(_STD addressof(_Parent_)) {\r\n                if (this->_Outer_it != _RANGES end(_Parent->_Range)) {\r\n                    _Inner_it._Emplace_second(_RANGES begin(_Update_inner()));\r\n                    _Satisfy();\r\n                }\r\n            }\r\n\r\n            constexpr explicit _Iterator(_Parent_t& _Parent_)\r\n                requires (!forward_range<_Base>)\r\n                : _Parent{_STD addressof(_Parent_)} {\r\n                if (*_Parent->_Outer_it != _RANGES end(_Parent->_Range)) {\r\n                    _Inner_it._Emplace_second(_RANGES begin(_Update_inner()));\r\n                    _Satisfy();\r\n                }\r\n            }\r\n\r\n            _NODISCARD constexpr _OuterIter& _Get_outer() noexcept {\r\n                if constexpr (forward_range<_Base>) {\r\n                    return this->_Outer_it;\r\n                } else {\r\n                    return *_Parent->_Outer_it;\r\n                }\r\n            }\r\n\r\n            _NODISCARD constexpr const _OuterIter& _Get_outer() const noexcept {\r\n                if constexpr (forward_range<_Base>) {\r\n                    return this->_Outer_it;\r\n                } else {\r\n                    return *_Parent->_Outer_it;\r\n                }\r\n            }\r\n\r\n            _NODISCARD constexpr auto& _Update_inner() {\r\n                if constexpr (_Deref_is_glvalue) {\r\n                    return _RANGES _As_lvalue(*_Get_outer());\r\n                } else {\r\n                    return _Parent->_Inner._Emplace(_Construct_tag{}, _Get_outer())._Val;\r\n                }\r\n            }\r\n\r\n            _NODISCARD constexpr auto& _Get_inner() noexcept {\r\n                if constexpr (_Deref_is_glvalue) {\r\n                    return _RANGES _As_lvalue(*_Get_outer());\r\n                } else {\r\n                    return (*_Parent->_Inner)._Val;\r\n                }\r\n            }\r\n\r\n            template <class _Ret = void>\r\n            constexpr _Ret _Visit_inner_it(auto&& _Func) const {\r\n                if (_Inner_it._Contains == _Variantish_state::_Holds_first) {\r\n                    return _Func(_Inner_it._Get_first());\r\n                } else if (_Inner_it._Contains == _Variantish_state::_Holds_second) {\r\n                    return _Func(_Inner_it._Get_second());\r\n                } else {\r\n                    _STD _Throw_bad_variant_access();\r\n                }\r\n            }\r\n\r\n            constexpr void _Satisfy() {\r\n                for (;;) {\r\n                    if (_Inner_it._Contains == _Variantish_state::_Holds_first) {\r\n                        if (_Inner_it._Get_first() != _RANGES end(_Parent->_Pattern)) {\r\n                            break;\r\n                        }\r\n\r\n                        _Inner_it._Emplace_second(_RANGES begin(_Update_inner()));\r\n                    } else {\r\n                        _STL_INTERNAL_CHECK(_Inner_it._Contains == _Variantish_state::_Holds_second);\r\n\r\n                        if (_Inner_it._Get_second() != _RANGES end(_Get_inner())) {\r\n                            break;\r\n                        }\r\n\r\n                        auto& _Outer_it = _Get_outer();\r\n                        ++_Outer_it;\r\n                        if (_Outer_it == _RANGES end(_Parent->_Range)) {\r\n                            if constexpr (_Deref_is_glvalue) {\r\n                                _Inner_it._Emplace_first();\r\n                            }\r\n                            break;\r\n                        }\r\n\r\n                        _Inner_it._Emplace_first(_RANGES begin(_Parent->_Pattern));\r\n                    }\r\n                }\r\n            }\r\n\r\n        public:\r\n            using iterator_concept =\r\n                conditional_t<_Deref_is_glvalue && bidirectional_range<_Base> && _Bidi_common_range<_InnerRng<_Const>>\r\n                                  && _Bidi_common_range<_PatternBase>,\r\n                    bidirectional_iterator_tag,\r\n                    conditional_t<_Deref_is_glvalue && forward_range<_Base> && forward_range<_InnerRng<_Const>>,\r\n                        forward_iterator_tag, input_iterator_tag>>;\r\n            using value_type      = common_type_t<iter_value_t<_InnerIter>, iter_value_t<_PatternIter>>;\r\n            using difference_type = _Common_diff_t<_OuterIter, _InnerIter, _PatternIter>;\r\n\r\n            _Iterator() = default;\r\n\r\n            constexpr _Iterator(_Iterator<!_Const> _It)\r\n                requires _Const && convertible_to<iterator_t<_Vw>, _OuterIter>\r\n                          && convertible_to<iterator_t<_InnerRng<false>>, _InnerIter>\r\n                          && convertible_to<iterator_t<_Pat>, _PatternIter>\r\n                : _Mybase(_STD move(_It._Outer_it)), _Parent(_It._Parent) {\r\n                switch (_It._Inner_it._Contains) {\r\n                case _Variantish_state::_Holds_first:\r\n                    _Inner_it._Emplace_first(_STD move(_It._Inner_it._Get_first()));\r\n                    break;\r\n                case _Variantish_state::_Holds_second:\r\n                    _Inner_it._Emplace_second(_STD move(_It._Inner_it._Get_second()));\r\n                    break;\r\n                case _Variantish_state::_Nothing:\r\n                    _STD _Throw_bad_variant_access();\r\n                }\r\n            }\r\n\r\n            _NODISCARD constexpr decltype(auto) operator*() const {\r\n                using _Ref = common_reference_t<iter_reference_t<_InnerIter>, iter_reference_t<_PatternIter>>;\r\n                return _Visit_inner_it<_Ref>([](auto&& _It) static -> _Ref { return *_It; });\r\n            }\r\n\r\n            constexpr _Iterator& operator++() {\r\n                switch (_Inner_it._Contains) {\r\n                case _Variantish_state::_Holds_first:\r\n                    ++_Inner_it._Get_first();\r\n                    break;\r\n                case _Variantish_state::_Holds_second:\r\n                    ++_Inner_it._Get_second();\r\n                    break;\r\n                case _Variantish_state::_Nothing:\r\n                    _STD _Throw_bad_variant_access();\r\n                }\r\n                _Satisfy();\r\n                return *this;\r\n            }\r\n\r\n            constexpr void operator++(int) {\r\n                ++*this;\r\n            }\r\n\r\n            constexpr _Iterator operator++(int)\r\n                requires _Deref_is_glvalue && forward_iterator<_OuterIter> && forward_iterator<_InnerIter>\r\n            {\r\n                auto _Tmp = *this;\r\n                ++*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator--()\r\n                requires _Deref_is_glvalue && bidirectional_range<_Base> && _Bidi_common_range<_InnerRng<_Const>>\r\n                      && _Bidi_common_range<_PatternBase>\r\n            {\r\n                auto& _Outer_it = _Get_outer();\r\n                if (_Outer_it == _RANGES end(_Parent->_Range)) {\r\n                    --_Outer_it;\r\n                    _Inner_it._Emplace_second(_RANGES end(_Get_inner()));\r\n                }\r\n\r\n                for (;;) {\r\n                    if (_Inner_it._Contains == _Variantish_state::_Holds_first) {\r\n                        auto& _It = _Inner_it._Get_first();\r\n                        if (_It == _RANGES begin(_Parent->_Pattern)) {\r\n                            --_Outer_it;\r\n                            _Inner_it._Emplace_second(_RANGES end(_Get_inner()));\r\n                        } else {\r\n                            break;\r\n                        }\r\n                    } else if (_Inner_it._Contains == _Variantish_state::_Holds_second) {\r\n                        auto& _It = _Inner_it._Get_second();\r\n                        if (_It == _RANGES begin(_Get_inner())) {\r\n                            _Inner_it._Emplace_first(_RANGES end(_Parent->_Pattern));\r\n                        } else {\r\n                            break;\r\n                        }\r\n                    } else {\r\n                        _STD _Throw_bad_variant_access();\r\n                    }\r\n                }\r\n\r\n                switch (_Inner_it._Contains) {\r\n                case _Variantish_state::_Holds_first:\r\n                    --_Inner_it._Get_first();\r\n                    break;\r\n                case _Variantish_state::_Holds_second:\r\n                    --_Inner_it._Get_second();\r\n                    break;\r\n                case _Variantish_state::_Nothing:\r\n                    _STD _Throw_bad_variant_access();\r\n                }\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator--(int)\r\n                requires _Deref_is_glvalue && bidirectional_range<_Base> && _Bidi_common_range<_InnerRng<_Const>>\r\n                      && _Bidi_common_range<_PatternBase>\r\n            {\r\n                auto _Tmp = *this;\r\n                --*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, const _Iterator& _Right)\r\n                requires _Deref_is_glvalue && forward_range<_Base> && equality_comparable<_InnerIter>\r\n            {\r\n                if (_Left._Outer_it != _Right._Outer_it) {\r\n                    return false;\r\n                }\r\n\r\n                if (_Left._Inner_it._Contains != _Right._Inner_it._Contains) {\r\n                    return false;\r\n                }\r\n\r\n                switch (_Left._Inner_it._Contains) {\r\n                case _Variantish_state::_Holds_first:\r\n                    return _Left._Inner_it._Get_first() == _Right._Inner_it._Get_first();\r\n                case _Variantish_state::_Holds_second:\r\n                    return _Left._Inner_it._Get_second() == _Right._Inner_it._Get_second();\r\n                case _Variantish_state::_Nothing:\r\n                    return true;\r\n                }\r\n\r\n                _STL_UNREACHABLE;\r\n            }\r\n\r\n            _NODISCARD friend constexpr decltype(auto) iter_move(const _Iterator& _It) {\r\n                using _Rvalue_ref =\r\n                    common_reference_t<iter_rvalue_reference_t<_InnerIter>, iter_rvalue_reference_t<_PatternIter>>;\r\n                return _It._Visit_inner_it<_Rvalue_ref>(_RANGES iter_move);\r\n            }\r\n\r\n            friend constexpr void iter_swap(const _Iterator& _Left, const _Iterator& _Right)\r\n                requires indirectly_swappable<_InnerIter, _PatternIter>\r\n            {\r\n                switch (_Left._Inner_it._Contains) {\r\n                case _Variantish_state::_Holds_first:\r\n                    switch (_Right._Inner_it._Contains) {\r\n                    case _Variantish_state::_Holds_first:\r\n                        return _RANGES iter_swap(_Left._Inner_it._Get_first(), _Right._Inner_it._Get_first());\r\n                    case _Variantish_state::_Holds_second:\r\n                        return _RANGES iter_swap(_Left._Inner_it._Get_first(), _Right._Inner_it._Get_second());\r\n                    case _Variantish_state::_Nothing:\r\n                        break;\r\n                    }\r\n                    break;\r\n                case _Variantish_state::_Holds_second:\r\n                    switch (_Right._Inner_it._Contains) {\r\n                    case _Variantish_state::_Holds_first:\r\n                        return _RANGES iter_swap(_Left._Inner_it._Get_second(), _Right._Inner_it._Get_first());\r\n                    case _Variantish_state::_Holds_second:\r\n                        return _RANGES iter_swap(_Left._Inner_it._Get_second(), _Right._Inner_it._Get_second());\r\n                    case _Variantish_state::_Nothing:\r\n                        break;\r\n                    }\r\n                    break;\r\n                case _Variantish_state::_Nothing:\r\n                    break;\r\n                }\r\n\r\n                _STD _Throw_bad_variant_access();\r\n            }\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Sentinel {\r\n        private:\r\n            friend join_with_view;\r\n\r\n            using _Parent_t = _Maybe_const<_Const, join_with_view>;\r\n            using _Base     = _Maybe_const<_Const, _Vw>;\r\n\r\n            _MSVC_NO_UNIQUE_ADDRESS sentinel_t<_Base> _Last{};\r\n\r\n            constexpr explicit _Sentinel(_Parent_t& _Parent)\r\n                noexcept(noexcept(_RANGES end(_Parent._Range))\r\n                         && is_nothrow_move_constructible_v<sentinel_t<_Base>>) // strengthened\r\n                : _Last(_RANGES end(_Parent._Range)) {}\r\n\r\n            template <bool _OtherConst>\r\n            _NODISCARD constexpr bool _Equal(const _Iterator<_OtherConst>& _It) const\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_It._Get_outer() == _Last))) {\r\n                _STL_INTERNAL_STATIC_ASSERT(\r\n                    sentinel_for<sentinel_t<_Base>, iterator_t<_Maybe_const<_OtherConst, _Vw>>>);\r\n                return _It._Get_outer() == _Last;\r\n            }\r\n\r\n        public:\r\n            _Sentinel() = default;\r\n\r\n            constexpr _Sentinel(_Sentinel<!_Const> _Se)\r\n                noexcept(is_nothrow_constructible_v<sentinel_t<_Base>, sentinel_t<_Vw>>) // strengthened\r\n                requires _Const && convertible_to<sentinel_t<_Vw>, sentinel_t<_Base>>\r\n                : _Last(_STD move(_Se._Last)) {}\r\n\r\n            template <bool _OtherConst>\r\n                requires sentinel_for<sentinel_t<_Base>, iterator_t<_Maybe_const<_OtherConst, _Vw>>>\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator<_OtherConst>& _Left, const _Sentinel& _Right)\r\n                noexcept(noexcept(_Right._Equal(_Left))) /* strengthened */ {\r\n                return _Right._Equal(_Left);\r\n            }\r\n        };\r\n\r\n    public:\r\n        join_with_view()\r\n            requires default_initializable<_Vw> && default_initializable<_Pat>\r\n        = default;\r\n\r\n        constexpr explicit join_with_view(_Vw _Range_, _Pat _Pattern_)\r\n            noexcept(is_nothrow_move_constructible_v<_Vw> && is_nothrow_move_constructible_v<_Pat>) // strengthened\r\n            : _Range{_STD move(_Range_)}, _Pattern{_STD move(_Pattern_)} {}\r\n\r\n        template <input_range _Rng>\r\n            requires constructible_from<_Vw, views::all_t<_Rng>>\r\n                      && constructible_from<_Pat, single_view<range_value_t<_InnerRng<false>>>>\r\n        constexpr explicit join_with_view(_Rng&& _Range_, range_value_t<_InnerRng<false>> _Elem)\r\n            noexcept(noexcept(_Vw(views::all(_STD forward<_Rng>(_Range_))))\r\n                     && noexcept(_Pat(views::single(_STD move(_Elem))))) // strengthened\r\n            : _Range(views::all(_STD forward<_Rng>(_Range_))), _Pattern(views::single(_STD move(_Elem))) {}\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) /* strengthened */\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() {\r\n            if constexpr (forward_range<_Vw>) {\r\n                constexpr bool _Use_const = _Simple_view<_Vw> && is_reference_v<_InnerRng<false>> && _Simple_view<_Pat>;\r\n                return _Iterator<_Use_const>{*this, _RANGES begin(_Range)};\r\n            } else {\r\n                this->_Outer_it._Emplace(_RANGES begin(_Range));\r\n                return _Iterator<false>{*this};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const\r\n            requires forward_range<const _Vw> && forward_range<const _Pat> && is_reference_v<_InnerRng<true>>\r\n                  && input_range<_InnerRng<true>> && _Concatable<range_reference_t<const _Vw>, const _Pat>\r\n        {\r\n            return _Iterator<true>{*this, _RANGES begin(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() {\r\n            constexpr bool _Both_simple = _Simple_view<_Vw> && _Simple_view<_Pat>;\r\n            if constexpr (forward_range<_Vw> && is_reference_v<_InnerRng<false>> && forward_range<_InnerRng<false>>\r\n                          && common_range<_Vw> && common_range<_InnerRng<false>>) {\r\n                return _Iterator<_Both_simple>{*this, _RANGES end(_Range)};\r\n            } else {\r\n                return _Sentinel<_Both_simple>{*this};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const\r\n            requires forward_range<const _Vw> && forward_range<const _Pat> && is_reference_v<_InnerRng<true>>\r\n                  && input_range<_InnerRng<true>> && _Concatable<range_reference_t<const _Vw>, const _Pat>\r\n        {\r\n            if constexpr (forward_range<_InnerRng<true>> && common_range<_Vw> && common_range<_InnerRng<true>>) {\r\n                return _Iterator<true>{*this, _RANGES end(_Range)};\r\n            } else {\r\n                return _Sentinel<true>{*this};\r\n            }\r\n        }\r\n    };\r\n\r\n    template <class _Rng, class _Pat>\r\n    join_with_view(_Rng&&, _Pat&&) -> join_with_view<views::all_t<_Rng>, views::all_t<_Pat>>;\r\n\r\n    template <input_range _Rng>\r\n    join_with_view(_Rng&&, range_value_t<range_reference_t<_Rng>>)\r\n        -> join_with_view<views::all_t<_Rng>, single_view<range_value_t<range_reference_t<_Rng>>>>;\r\n\r\n    template <class _Rng, class _Pat>\r\n    _NODISCARD consteval auto _Join_with_view_compile_time_max_size() {\r\n        using _Inner     = remove_reference_t<range_reference_t<_Rng>>;\r\n        using _Size_type = common_type_t<decltype(_Compile_time_max_size<_Rng>),\r\n            decltype(_Compile_time_max_size<_Inner>), decltype(_Compile_time_max_size<_Pat>)>;\r\n        _Size_type _Joined_max_size{};\r\n        _Size_type _Pattern_max_size{};\r\n        _Size_type _Result{};\r\n        const bool _Overflow =\r\n            _Mul_overflow(static_cast<_Size_type>(_Compile_time_max_size<_Rng>),\r\n                static_cast<_Size_type>(_Compile_time_max_size<_Inner>), _Joined_max_size)\r\n            || _Mul_overflow((_STD max) (static_cast<_Size_type>(_Compile_time_max_size<_Rng>), _Size_type{1}) - 1,\r\n                static_cast<_Size_type>(_Compile_time_max_size<_Pat>), _Pattern_max_size)\r\n            || _Add_overflow(_Joined_max_size, _Pattern_max_size, _Result);\r\n        if (_Overflow) {\r\n            return (numeric_limits<_Size_type>::max)();\r\n        } else {\r\n            return _Result;\r\n        }\r\n    }\r\n\r\n    template <class _Rng, class _Pat>\r\n    constexpr auto _Compile_time_max_size<join_with_view<_Rng, _Pat>> =\r\n        _Join_with_view_compile_time_max_size<_Rng, _Pat>();\r\n\r\n    template <class _Rng, class _Pat>\r\n    constexpr auto _Compile_time_max_size<const join_with_view<_Rng, _Pat>> =\r\n        _Join_with_view_compile_time_max_size<const _Rng, const _Pat>();\r\n\r\n    namespace views {\r\n        struct _Join_with_fn {\r\n            template <viewable_range _Rng, class _Pat>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Pat&& _Pattern)\r\n                noexcept(noexcept(join_with_view(_STD forward<_Rng>(_Range), _STD forward<_Pat>(_Pattern))))\r\n                requires requires { join_with_view(_STD forward<_Rng>(_Range), _STD forward<_Pat>(_Pattern)); }\r\n            {\r\n                return join_with_view(_STD forward<_Rng>(_Range), _STD forward<_Pat>(_Pattern));\r\n            }\r\n\r\n            template <class _Delim>\r\n                requires constructible_from<decay_t<_Delim>, _Delim>\r\n            _NODISCARD static constexpr auto operator()(_Delim&& _Delimiter)\r\n                noexcept(is_nothrow_constructible_v<decay_t<_Delim>, _Delim>) {\r\n                return _Range_closure<_Join_with_fn, decay_t<_Delim>>{_STD forward<_Delim>(_Delimiter)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Join_with_fn join_with;\r\n    } // namespace views\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Ty>\r\n    concept _Tiny_range = sized_range<_Ty> && requires { typename _Require_constant<remove_reference_t<_Ty>::size()>; }\r\n                       && (remove_reference_t<_Ty>::size() <= 1);\r\n\r\n    _EXPORT_STD template <input_range _Vw, forward_range _Pat>\r\n        requires (view<_Vw> && view<_Pat> && indirectly_comparable<iterator_t<_Vw>, iterator_t<_Pat>, _RANGES equal_to>\r\n                  && (forward_range<_Vw> || _Tiny_range<_Pat>) )\r\n    class lazy_split_view;\r\n\r\n    template <class _Vw, class _Pat>\r\n    class _Lazy_split_view_base : public view_interface<lazy_split_view<_Vw, _Pat>> {\r\n    protected:\r\n        /* [[no_unique_address]] */ _Defaultabox<iterator_t<_Vw>> _Current{};\r\n    };\r\n\r\n    template <forward_range _Vw, class _Pat>\r\n    class _Lazy_split_view_base<_Vw, _Pat> : public view_interface<lazy_split_view<_Vw, _Pat>> {};\r\n\r\n    _EXPORT_STD template <input_range _Vw, forward_range _Pat>\r\n        requires (view<_Vw> && view<_Pat> && indirectly_comparable<iterator_t<_Vw>, iterator_t<_Pat>, _RANGES equal_to>\r\n                  && (forward_range<_Vw> || _Tiny_range<_Pat>) )\r\n    class lazy_split_view : public _Lazy_split_view_base<_Vw, _Pat> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n        /* [[no_unique_address]] */ _Pat _Pattern{};\r\n\r\n        template <bool>\r\n        class _Inner_iter;\r\n\r\n        template <class>\r\n        class _Outer_iter_base {};\r\n\r\n        template <forward_iterator _Iter>\r\n        class _Outer_iter_base<_Iter> {\r\n        protected:\r\n            _Iter _Current{};\r\n\r\n        public:\r\n            using iterator_category = input_iterator_tag;\r\n\r\n            _Outer_iter_base() = default;\r\n            constexpr explicit _Outer_iter_base(_Iter _Current_) noexcept(is_nothrow_move_constructible_v<_Iter>)\r\n                : _Current{_STD move(_Current_)} {}\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Outer_iter : public _Outer_iter_base<iterator_t<_Maybe_const<_Const, _Vw>>> {\r\n        private:\r\n            friend lazy_split_view;\r\n\r\n            using _Mybase   = _Outer_iter_base<iterator_t<_Maybe_const<_Const, _Vw>>>;\r\n            using _ParentTy = _Maybe_const<_Const, lazy_split_view>;\r\n            using _BaseTy   = _Maybe_const<_Const, _Vw>;\r\n\r\n            _ParentTy* _Parent   = nullptr;\r\n            bool _Trailing_empty = false;\r\n\r\n            _NODISCARD constexpr iterator_t<_BaseTy>& _Get_current() noexcept {\r\n                if constexpr (forward_range<_BaseTy>) {\r\n                    return this->_Current;\r\n                } else {\r\n                    return *_Parent->_Current;\r\n                }\r\n            }\r\n\r\n            _NODISCARD constexpr const iterator_t<_BaseTy>& _Get_current() const noexcept {\r\n                if constexpr (forward_range<_BaseTy>) {\r\n                    return this->_Current;\r\n                } else {\r\n                    return *_Parent->_Current;\r\n                }\r\n            }\r\n\r\n            _NODISCARD constexpr bool _At_end() const\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_Get_current() == _RANGES end(_Parent->_Range)))) {\r\n                return _Get_current() == _RANGES end(_Parent->_Range);\r\n            }\r\n\r\n        public:\r\n            using iterator_concept = conditional_t<forward_range<_BaseTy>, forward_iterator_tag, input_iterator_tag>;\r\n            using difference_type  = range_difference_t<_BaseTy>;\r\n\r\n            class value_type : public view_interface<value_type> {\r\n            private:\r\n                /* [[no_unique_address]] */ _Outer_iter _First{};\r\n\r\n                constexpr explicit value_type(_Outer_iter _First_)\r\n                    noexcept(is_nothrow_move_constructible_v<_Outer_iter>)\r\n                    : _First{_STD move(_First_)} {}\r\n\r\n                friend _Outer_iter;\r\n\r\n            public:\r\n                _NODISCARD constexpr auto begin() const {\r\n                    return _Inner_iter<_Const>{_First};\r\n                }\r\n\r\n                _NODISCARD constexpr default_sentinel_t end() const noexcept {\r\n                    return default_sentinel;\r\n                }\r\n            };\r\n\r\n            _Outer_iter() = default;\r\n\r\n            constexpr explicit _Outer_iter(_ParentTy& _Parent_) noexcept // strengthened\r\n                requires (!forward_range<_BaseTy>)\r\n                : _Parent{_STD addressof(_Parent_)} {}\r\n\r\n            constexpr _Outer_iter(_ParentTy& _Parent_, iterator_t<_BaseTy> _Current_)\r\n                noexcept(is_nothrow_move_constructible_v<iterator_t<_BaseTy>>) // strengthened\r\n                requires forward_range<_BaseTy>\r\n                : _Mybase{_STD move(_Current_)}, _Parent{_STD addressof(_Parent_)} {}\r\n\r\n            constexpr _Outer_iter(_Outer_iter<!_Const> _It)\r\n                requires _Const && convertible_to<iterator_t<_Vw>, iterator_t<_BaseTy>>\r\n                : _Mybase{_STD move(_It._Current)}, _Parent{_It._Parent}, _Trailing_empty{_It._Trailing_empty} {}\r\n\r\n            _NODISCARD constexpr auto operator*() const noexcept(noexcept(value_type{*this})) /* strengthened */ {\r\n                return value_type{*this};\r\n            }\r\n\r\n            constexpr _Outer_iter& operator++() {\r\n                const auto _End = _RANGES end(_Parent->_Range);\r\n                auto& _Cur      = _Get_current();\r\n                if (_Cur == _End) {\r\n                    _Trailing_empty = false;\r\n                    return *this;\r\n                }\r\n\r\n                const auto _Pat_first = _RANGES begin(_Parent->_Pattern);\r\n                const auto _Pat_last  = _RANGES end(_Parent->_Pattern);\r\n                if (_Pat_first == _Pat_last) {\r\n                    ++_Cur;\r\n                } else if constexpr (_Tiny_range<_Pat>) {\r\n                    _Cur = _RANGES _Find_unchecked(_STD move(_Cur), _End, *_Pat_first);\r\n                    if (_Cur != _End) {\r\n                        ++_Cur;\r\n                        if (_Cur == _End) {\r\n                            _Trailing_empty = true;\r\n                        }\r\n                    }\r\n                } else {\r\n                    do {\r\n                        auto _Result = _RANGES mismatch(_Cur, _End, _Pat_first, _Pat_last);\r\n                        if (_Result.in2 == _Pat_last) { // pattern matches\r\n                            _Cur = _STD move(_Result.in1);\r\n                            if (_Cur == _End) {\r\n                                _Trailing_empty = true;\r\n                            }\r\n                            break;\r\n                        }\r\n                    } while (++_Cur != _End);\r\n                }\r\n                return *this;\r\n            }\r\n\r\n            constexpr decltype(auto) operator++(int) {\r\n                if constexpr (forward_range<_BaseTy>) {\r\n                    auto _Tmp = *this;\r\n                    ++*this;\r\n                    return _Tmp;\r\n                } else {\r\n                    ++*this;\r\n                }\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Outer_iter& _Left, const _Outer_iter& _Right)\r\n                noexcept(noexcept(_Left._Current == _Right._Current)) /* strengthened */\r\n                requires forward_range<_BaseTy>\r\n            {\r\n                return _Left._Current == _Right._Current && _Left._Trailing_empty == _Right._Trailing_empty;\r\n            }\r\n            _NODISCARD friend constexpr bool operator==(const _Outer_iter& _Left, default_sentinel_t)\r\n                noexcept(noexcept(_Left._At_end())) /* strengthened */ {\r\n                return _Left._At_end() && !_Left._Trailing_empty;\r\n            }\r\n        };\r\n\r\n        template <class _BaseTy>\r\n        class _Inner_iter_base {};\r\n\r\n        template <forward_range _BaseTy>\r\n        class _Inner_iter_base<_BaseTy> {\r\n        private:\r\n            using _BaseCategory = iterator_traits<iterator_t<_BaseTy>>::iterator_category;\r\n\r\n        public:\r\n            using iterator_category =\r\n                conditional_t<derived_from<_BaseCategory, forward_iterator_tag>, forward_iterator_tag, _BaseCategory>;\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Inner_iter : public _Inner_iter_base<_Maybe_const<_Const, _Vw>> {\r\n        private:\r\n            using _BaseTy = _Maybe_const<_Const, _Vw>;\r\n\r\n            _Outer_iter<_Const> _It{};\r\n            bool _Incremented = false;\r\n\r\n            _NODISCARD constexpr bool _Equal(const _Inner_iter& _Right) const {\r\n                return _It._Get_current() == _Right._It._Get_current();\r\n            }\r\n\r\n            _NODISCARD constexpr iterator_t<_BaseTy>& _Get_current() noexcept {\r\n                return _It._Get_current();\r\n            }\r\n\r\n            _NODISCARD constexpr const iterator_t<_BaseTy>& _Get_current() const noexcept {\r\n                return _It._Get_current();\r\n            }\r\n\r\n            _NODISCARD constexpr bool _At_end() const {\r\n                auto _Pat_pos       = _RANGES begin(_It._Parent->_Pattern);\r\n                const auto _Pat_end = _RANGES end(_It._Parent->_Pattern);\r\n                auto _Last          = _RANGES end(_It._Parent->_Range);\r\n                if constexpr (_Tiny_range<_Pat>) {\r\n                    const auto& _Cur = _It._Get_current(); // Intentionally a reference. Since _Pat is tiny, this could\r\n                                                           // be a move-only iterator type.\r\n                    if (_Cur == _Last) {\r\n                        return true;\r\n                    }\r\n\r\n                    if (_Pat_pos == _Pat_end) {\r\n                        return _Incremented;\r\n                    }\r\n                    return *_Cur == *_Pat_pos;\r\n                } else {\r\n                    auto _Cur = _It._Get_current(); // Intentionally not a reference. _Pat is not tiny, so this is a\r\n                                                    // forward (copyable) iterator.\r\n                    if (_Cur == _Last) {\r\n                        return true;\r\n                    }\r\n\r\n                    if (_Pat_pos == _Pat_end) {\r\n                        return _Incremented;\r\n                    }\r\n\r\n                    do {\r\n                        if (*_Cur != *_Pat_pos) {\r\n                            return false;\r\n                        }\r\n\r\n                        if (++_Pat_pos == _Pat_end) {\r\n                            return true;\r\n                        }\r\n                    } while (++_Cur != _Last);\r\n                    return false;\r\n                }\r\n            }\r\n\r\n        public:\r\n            using iterator_concept = _Outer_iter<_Const>::iterator_concept;\r\n            using value_type       = range_value_t<_BaseTy>;\r\n            using difference_type  = range_difference_t<_BaseTy>;\r\n\r\n            _Inner_iter() = default;\r\n            constexpr explicit _Inner_iter(_Outer_iter<_Const> _It_)\r\n                noexcept(is_nothrow_move_constructible_v<_Outer_iter<_Const>>) // strengthened\r\n                : _It{_STD move(_It_)} {}\r\n\r\n            _NODISCARD constexpr const iterator_t<_BaseTy>& base() const& noexcept {\r\n                return _It._Get_current();\r\n            }\r\n\r\n            _NODISCARD constexpr iterator_t<_BaseTy> base() && noexcept(\r\n                is_nothrow_move_constructible_v<iterator_t<_BaseTy>>) /* strengthened */\r\n                requires forward_range<_Vw>\r\n            {\r\n                return _STD move(_It._Get_current());\r\n            }\r\n\r\n            _NODISCARD constexpr decltype(auto) operator*() const {\r\n                return *_It._Get_current();\r\n            }\r\n\r\n            constexpr _Inner_iter& operator++() {\r\n                _Incremented = true;\r\n                if constexpr (!forward_range<_BaseTy>) {\r\n                    if constexpr (_Pat::size() == 0) {\r\n                        return *this;\r\n                    }\r\n                }\r\n                ++_It._Get_current();\r\n                return *this;\r\n            }\r\n\r\n            constexpr decltype(auto) operator++(int) {\r\n                if constexpr (forward_range<_BaseTy>) {\r\n                    auto _Tmp = *this;\r\n                    ++*this;\r\n                    return _Tmp;\r\n                } else {\r\n                    ++*this;\r\n                }\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Inner_iter& _Left, const _Inner_iter& _Right)\r\n                requires forward_range<_BaseTy>\r\n            {\r\n                return _Left._Equal(_Right);\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Inner_iter& _Left, default_sentinel_t) {\r\n                return _Left._At_end();\r\n            }\r\n\r\n            _NODISCARD friend constexpr decltype(auto) iter_move(const _Inner_iter& _Iter)\r\n                noexcept(noexcept(_RANGES iter_move(_Iter._Get_current()))) {\r\n                return _RANGES iter_move(_Iter._Get_current());\r\n            }\r\n\r\n            friend constexpr void iter_swap(const _Inner_iter& _Left, const _Inner_iter& _Right)\r\n                noexcept(noexcept(_RANGES iter_swap(_Left._Get_current(), _Right._Get_current())))\r\n                requires indirectly_swappable<iterator_t<_BaseTy>>\r\n            {\r\n                _RANGES iter_swap(_Left._Get_current(), _Right._Get_current());\r\n            }\r\n        };\r\n\r\n    public:\r\n        lazy_split_view()\r\n            requires default_initializable<_Vw> && default_initializable<_Pat>\r\n        = default;\r\n\r\n        constexpr explicit lazy_split_view(_Vw _Range_, _Pat _Pattern_)\r\n            noexcept(is_nothrow_move_constructible_v<_Vw> && is_nothrow_move_constructible_v<_Pat>) // strengthened\r\n            : _Range(_STD move(_Range_)), _Pattern(_STD move(_Pattern_)) {}\r\n\r\n        template <input_range _Rng>\r\n            requires constructible_from<_Vw, views::all_t<_Rng>>\r\n                      && constructible_from<_Pat, single_view<range_value_t<_Rng>>>\r\n        constexpr explicit lazy_split_view(_Rng&& _Range_, range_value_t<_Rng> _Elem)\r\n            noexcept(noexcept(_Vw(views::all(_STD forward<_Rng>(_Range_))))\r\n                     && noexcept(_Pat(views::single(_STD move(_Elem))))) // strengthened\r\n            : _Range(views::all(_STD forward<_Rng>(_Range_))), _Pattern(views::single(_STD move(_Elem))) {}\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) /* strengthened */\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() {\r\n            if constexpr (forward_range<_Vw>) {\r\n                constexpr bool _Both_simple = _Simple_view<_Vw> && _Simple_view<_Pat>;\r\n                return _Outer_iter<_Both_simple>{*this, _RANGES begin(_Range)};\r\n            } else {\r\n                this->_Current = _RANGES begin(_Range);\r\n                return _Outer_iter<false>{*this};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const\r\n            requires forward_range<_Vw> && forward_range<const _Vw>\r\n        {\r\n            return _Outer_iter<true>{*this, _RANGES begin(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end()\r\n            requires forward_range<_Vw> && common_range<_Vw>\r\n        {\r\n            constexpr bool _Both_simple = _Simple_view<_Vw> && _Simple_view<_Pat>;\r\n            return _Outer_iter<_Both_simple>{*this, _RANGES end(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const {\r\n            if constexpr (forward_range<_Vw> && forward_range<const _Vw> && common_range<const _Vw>) {\r\n                return _Outer_iter<true>{*this, _RANGES end(_Range)};\r\n            } else {\r\n                return default_sentinel;\r\n            }\r\n        }\r\n    };\r\n\r\n    template <class _Rng, class _Pat>\r\n    lazy_split_view(_Rng&&, _Pat&&) -> lazy_split_view<views::all_t<_Rng>, views::all_t<_Pat>>;\r\n\r\n    template <input_range _Rng>\r\n    lazy_split_view(_Rng&&, range_value_t<_Rng>)\r\n        -> lazy_split_view<views::all_t<_Rng>, single_view<range_value_t<_Rng>>>;\r\n\r\n#if _HAS_CXX23\r\n    template <class _Rng, class _Pat>\r\n    constexpr auto _Compile_time_max_size<lazy_split_view<_Rng, _Pat>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng, class _Pat>\r\n    constexpr auto _Compile_time_max_size<const lazy_split_view<_Rng, _Pat>> = _Compile_time_max_size<const _Rng>;\r\n#endif // _HAS_CXX23\r\n\r\n    namespace views {\r\n        struct _Lazy_split_fn {\r\n            template <viewable_range _Rng, class _Pat>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Pat&& _Pattern)\r\n                noexcept(noexcept(lazy_split_view(_STD forward<_Rng>(_Range), _STD forward<_Pat>(_Pattern))))\r\n                requires requires { lazy_split_view(static_cast<_Rng &&>(_Range), static_cast<_Pat &&>(_Pattern)); }\r\n            {\r\n                return lazy_split_view(_STD forward<_Rng>(_Range), _STD forward<_Pat>(_Pattern));\r\n            }\r\n\r\n            template <class _Delim>\r\n                requires constructible_from<decay_t<_Delim>, _Delim>\r\n            _NODISCARD static constexpr auto operator()(_Delim&& _Delimiter)\r\n                noexcept(is_nothrow_constructible_v<decay_t<_Delim>, _Delim>) {\r\n                return _Range_closure<_Lazy_split_fn, decay_t<_Delim>>{_STD forward<_Delim>(_Delimiter)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Lazy_split_fn lazy_split;\r\n    } // namespace views\r\n\r\n    _EXPORT_STD template <forward_range _Vw, forward_range _Pat>\r\n        requires view<_Vw> && view<_Pat> && indirectly_comparable<iterator_t<_Vw>, iterator_t<_Pat>, _RANGES equal_to>\r\n    class split_view : public view_interface<split_view<_Vw, _Pat>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n        /* [[no_unique_address]] */ _Pat _Pattern{};\r\n        _Non_propagating_cache<subrange<iterator_t<_Vw>>> _Next{};\r\n\r\n        class _Iterator {\r\n        private:\r\n            friend split_view;\r\n\r\n            split_view* _Parent             = nullptr;\r\n            iterator_t<_Vw> _Current        = {};\r\n            subrange<iterator_t<_Vw>> _Next = {};\r\n            bool _Trailing_empty            = false;\r\n\r\n        public:\r\n            using iterator_concept  = forward_iterator_tag;\r\n            using iterator_category = input_iterator_tag;\r\n            using value_type        = subrange<iterator_t<_Vw>>;\r\n            using difference_type   = range_difference_t<_Vw>;\r\n\r\n            _Iterator() = default;\r\n\r\n            constexpr _Iterator(split_view& _Parent_, iterator_t<_Vw> _Current_, subrange<iterator_t<_Vw>> _Next_) //\r\n                noexcept(is_nothrow_move_constructible_v<iterator_t<_Vw>>) // strengthened\r\n                : _Parent{_STD addressof(_Parent_)}, _Current{_STD move(_Current_)}, _Next{_STD move(_Next_)} {}\r\n\r\n            _NODISCARD constexpr iterator_t<_Vw> base() const\r\n                noexcept(is_nothrow_copy_constructible_v<iterator_t<_Vw>>) /* strengthened */ {\r\n                return _Current;\r\n            }\r\n\r\n            _NODISCARD constexpr value_type operator*() const\r\n                noexcept(is_nothrow_copy_constructible_v<iterator_t<_Vw>>) /* strengthened */ {\r\n                return {_Current, _Next.begin()};\r\n            }\r\n\r\n            constexpr _Iterator& operator++() {\r\n                const auto _Last = _RANGES end(_Parent->_Range);\r\n                _Current         = _Next.begin();\r\n                if (_Current == _Last) {\r\n                    _Trailing_empty = false;\r\n                    return *this;\r\n                }\r\n\r\n                _Current = _Next.end();\r\n                if (_Current == _Last) {\r\n                    _Trailing_empty = true;\r\n                    _Next           = {_Current, _Current};\r\n                    return *this;\r\n                }\r\n\r\n                auto [_Begin, _End] = _RANGES search(subrange{_Current, _Last}, _Parent->_Pattern);\r\n                if (_Begin != _Last && _RANGES empty(_Parent->_Pattern)) {\r\n                    ++_Begin;\r\n                    ++_End;\r\n                }\r\n\r\n                _Next = {_STD move(_Begin), _STD move(_End)};\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator++(int) {\r\n                auto _Tmp = *this;\r\n                ++*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current == _Right._Current)) /* strengthened */ {\r\n                return _Left._Current == _Right._Current && _Left._Trailing_empty == _Right._Trailing_empty;\r\n            }\r\n        };\r\n\r\n        class _Sentinel {\r\n        private:\r\n            /* [[no_unique_address]] */ sentinel_t<_Vw> _Last{};\r\n\r\n            _NODISCARD constexpr bool _Equal(const _Iterator& _It) const\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_It._Current == _Last))) {\r\n                return !_It._Trailing_empty && _It._Current == _Last;\r\n            }\r\n\r\n        public:\r\n            _Sentinel() = default;\r\n            constexpr explicit _Sentinel(split_view& _Parent)\r\n                noexcept(noexcept(_RANGES end(_Parent._Range))\r\n                         && is_nothrow_move_constructible_v<sentinel_t<_Vw>>) // strengthened\r\n                : _Last(_RANGES end(_Parent._Range)) {}\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _It, const _Sentinel& _Se)\r\n                noexcept(noexcept(_Se._Equal(_It))) /* strengthened */ {\r\n                return _Se._Equal(_It);\r\n            }\r\n        };\r\n\r\n        constexpr subrange<iterator_t<_Vw>> _Find_next(iterator_t<_Vw> _It) {\r\n            const auto _Last    = _RANGES end(_Range);\r\n            auto [_Begin, _End] = _RANGES search(subrange{_It, _Last}, _Pattern);\r\n            if (_Begin != _Last && _RANGES empty(_Pattern)) {\r\n                ++_Begin;\r\n                ++_End;\r\n            }\r\n\r\n            return {_STD move(_Begin), _STD move(_End)};\r\n        }\r\n\r\n    public:\r\n        split_view()\r\n            requires default_initializable<_Vw> && default_initializable<_Pat>\r\n        = default;\r\n\r\n        constexpr explicit split_view(_Vw _Range_, _Pat _Pattern_)\r\n            noexcept(is_nothrow_move_constructible_v<_Vw> && is_nothrow_move_constructible_v<_Pat>) // strengthened\r\n            : _Range(_STD move(_Range_)), _Pattern(_STD move(_Pattern_)) {}\r\n\r\n        template <forward_range _Rng>\r\n            requires constructible_from<_Vw, views::all_t<_Rng>>\r\n                      && constructible_from<_Pat, single_view<range_value_t<_Rng>>>\r\n        constexpr explicit split_view(_Rng&& _Range_, range_value_t<_Rng> _Elem)\r\n            noexcept(is_nothrow_constructible_v<_Vw, views::all_t<_Rng>>\r\n                     && is_nothrow_constructible_v<_Pat, single_view<range_value_t<_Rng>>>\r\n                     && is_nothrow_move_constructible_v<range_value_t<_Rng>>) // strengthened\r\n            : _Range(views::all(_STD forward<_Rng>(_Range_))), _Pattern(views::single(_STD move(_Elem))) {}\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) /* strengthened */\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() {\r\n            auto _First = _RANGES begin(_Range);\r\n            if (!_Next) {\r\n                _Next._Emplace(_Find_next(_First));\r\n            }\r\n            return _Iterator{*this, _First, *_Next};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() {\r\n            if constexpr (common_range<_Vw>) {\r\n                return _Iterator{*this, _RANGES end(_Range), {}};\r\n            } else {\r\n                return _Sentinel{*this};\r\n            }\r\n        }\r\n    };\r\n\r\n    template <class _Rng, class _Pat>\r\n    split_view(_Rng&&, _Pat&&) -> split_view<views::all_t<_Rng>, views::all_t<_Pat>>;\r\n\r\n    template <forward_range _Rng>\r\n    split_view(_Rng&&, range_value_t<_Rng>) -> split_view<views::all_t<_Rng>, single_view<range_value_t<_Rng>>>;\r\n\r\n#if _HAS_CXX23\r\n    template <class _Rng, class _Pat>\r\n    constexpr auto _Compile_time_max_size<split_view<_Rng, _Pat>> = _Compile_time_max_size<_Rng>;\r\n#endif // _HAS_CXX23\r\n\r\n    namespace views {\r\n        struct _Split_fn {\r\n            template <viewable_range _Rng, class _Pat>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Pat&& _Pattern)\r\n                noexcept(noexcept(split_view(_STD forward<_Rng>(_Range), _STD forward<_Pat>(_Pattern))))\r\n                requires requires { split_view(static_cast<_Rng &&>(_Range), static_cast<_Pat &&>(_Pattern)); }\r\n            {\r\n                return split_view(_STD forward<_Rng>(_Range), _STD forward<_Pat>(_Pattern));\r\n            }\r\n\r\n            template <class _Delim>\r\n                requires constructible_from<decay_t<_Delim>, _Delim>\r\n            _NODISCARD static constexpr auto operator()(_Delim&& _Delimiter)\r\n                noexcept(is_nothrow_constructible_v<decay_t<_Delim>, _Delim>) {\r\n                return _Range_closure<_Split_fn, decay_t<_Delim>>{_STD forward<_Delim>(_Delimiter)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Split_fn split;\r\n\r\n        class _Counted_fn {\r\n        private:\r\n            enum class _St { _None, _Span, _Subrange, _Subrange_counted };\r\n\r\n            template <class _It>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                using _Decayed = decay_t<_It>;\r\n                _STL_INTERNAL_STATIC_ASSERT(input_or_output_iterator<_Decayed>);\r\n                if constexpr (contiguous_iterator<_Decayed>) {\r\n                    return {_St::_Span, true};\r\n                } else if constexpr (random_access_iterator<_Decayed>) {\r\n                    return {_St::_Subrange,\r\n                        noexcept(subrange(_STD declval<_It>(), _STD declval<_It>() + iter_difference_t<_Decayed>{}))};\r\n                } else if constexpr (is_convertible_v<_It, _Decayed>) {\r\n                    return {_St::_Subrange_counted,\r\n                        noexcept(subrange(\r\n                            counted_iterator(_STD declval<_It>(), iter_difference_t<_Decayed>{}), default_sentinel))};\r\n                } else {\r\n                    return {_St::_None};\r\n                }\r\n            }\r\n\r\n            template <class _It>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_It>();\r\n\r\n        public:\r\n            template <class _It>\r\n                requires (input_or_output_iterator<decay_t<_It>> && _Choice<_It>._Strategy != _St::_None)\r\n            _NODISCARD static constexpr auto operator()(_It&& _First, const iter_difference_t<decay_t<_It>> _Count)\r\n                noexcept(_Choice<_It>._No_throw) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Count >= 0, \"The size passed to views::counted must be non-negative\");\r\n#endif\r\n                constexpr _St _Strat = _Choice<_It>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_Span) {\r\n                    return span(_STD to_address(_STD forward<_It>(_First)), static_cast<size_t>(_Count));\r\n                } else if constexpr (_Strat == _St::_Subrange) {\r\n                    return subrange(_First, _First + _Count);\r\n                } else if constexpr (_Strat == _St::_Subrange_counted) {\r\n                    return subrange(counted_iterator(_STD forward<_It>(_First), _Count), default_sentinel);\r\n                }\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Counted_fn counted;\r\n    } // namespace views\r\n\r\n    _EXPORT_STD template <view _Vw>\r\n        requires (!common_range<_Vw> && copyable<iterator_t<_Vw>>)\r\n    class common_view : public view_interface<common_view<_Vw>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Base{};\r\n\r\n    public:\r\n        common_view()\r\n            requires default_initializable<_Vw>\r\n        = default;\r\n\r\n        constexpr explicit common_view(_Vw _Base_) noexcept(is_nothrow_move_constructible_v<_Vw>) // strengthened\r\n            : _Base(_STD move(_Base_)) {}\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) /* strengthened */\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Base;\r\n        }\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Base);\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() noexcept(\r\n            noexcept(_RANGES begin(_Base)) && is_nothrow_move_constructible_v<iterator_t<_Vw>>) /* strengthened */\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            if constexpr (random_access_range<_Vw> && sized_range<_Vw>) {\r\n                return _RANGES begin(_Base);\r\n            } else {\r\n                return common_iterator<iterator_t<_Vw>, sentinel_t<_Vw>>{_RANGES begin(_Base)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const noexcept(\r\n            noexcept(_RANGES begin(_Base)) && is_nothrow_move_constructible_v<iterator_t<const _Vw>>) /* strengthened */\r\n            requires range<const _Vw>\r\n        {\r\n            if constexpr (random_access_range<const _Vw> && sized_range<const _Vw>) {\r\n                return _RANGES begin(_Base);\r\n            } else {\r\n                return common_iterator<iterator_t<const _Vw>, sentinel_t<const _Vw>>{_RANGES begin(_Base)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end()\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            if constexpr (random_access_range<_Vw> && sized_range<_Vw>) {\r\n                return _RANGES begin(_Base) + _RANGES distance(_Base);\r\n            } else {\r\n                return common_iterator<iterator_t<_Vw>, sentinel_t<_Vw>>{_RANGES end(_Base)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const\r\n            requires range<const _Vw>\r\n        {\r\n            if constexpr (random_access_range<const _Vw> && sized_range<const _Vw>) {\r\n                return _RANGES begin(_Base) + _RANGES distance(_Base);\r\n            } else {\r\n                return common_iterator<iterator_t<const _Vw>, sentinel_t<const _Vw>>{_RANGES end(_Base)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() noexcept(noexcept(_RANGES size(_Base))) /* strengthened */\r\n            requires sized_range<_Vw>\r\n        {\r\n            return _RANGES size(_Base);\r\n        }\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_RANGES size(_Base))) /* strengthened */\r\n            requires sized_range<const _Vw>\r\n        {\r\n            return _RANGES size(_Base);\r\n        }\r\n    };\r\n\r\n    template <class _Rng>\r\n    common_view(_Rng&&) -> common_view<views::all_t<_Rng>>;\r\n\r\n    template <class _Rng>\r\n    constexpr bool enable_borrowed_range<common_view<_Rng>> = enable_borrowed_range<_Rng>;\r\n\r\n#if _HAS_CXX23\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<common_view<_Rng>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<const common_view<_Rng>> = _Compile_time_max_size<const _Rng>;\r\n#endif // _HAS_CXX23\r\n\r\n    namespace views {\r\n        class _Common_fn : public _Pipe::_Base<_Common_fn> {\r\n        private:\r\n            enum class _St { _None, _All, _Common };\r\n\r\n            template <class _Rng>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                if constexpr (common_range<_Rng>) {\r\n                    return {_St::_All, noexcept(views::all(_STD declval<_Rng>()))};\r\n                } else if constexpr (copyable<iterator_t<_Rng>>) {\r\n                    return {_St::_Common, noexcept(common_view{_STD declval<_Rng>()})};\r\n                } else {\r\n                    return {_St::_None};\r\n                }\r\n            }\r\n\r\n            template <class _Rng>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Rng>();\r\n\r\n        public:\r\n            template <viewable_range _Rng>\r\n                requires (_Choice<_Rng>._Strategy != _St::_None)\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range) noexcept(_Choice<_Rng>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Rng>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_All) {\r\n                    return views::all(_STD forward<_Rng>(_Range));\r\n                } else if constexpr (_Strat == _St::_Common) {\r\n                    return common_view{_STD forward<_Rng>(_Range)};\r\n                } else {\r\n                    static_assert(false); // unexpected strategy\r\n                }\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Common_fn common;\r\n    } // namespace views\r\n\r\n    _EXPORT_STD template <view _Vw>\r\n        requires bidirectional_range<_Vw>\r\n    class reverse_view : public _Cached_position_t<!common_range<_Vw>, _Vw, reverse_view<_Vw>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n\r\n        template <class _Rng>\r\n        using _Rev_iter = reverse_iterator<iterator_t<_Rng>>;\r\n\r\n    public:\r\n        reverse_view()\r\n            requires default_initializable<_Vw>\r\n        = default;\r\n\r\n        constexpr explicit reverse_view(_Vw _Range_) noexcept(is_nothrow_move_constructible_v<_Vw>) // strengthened\r\n            : _Range(_STD move(_Range_)) {}\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) /* strengthened */\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr _Rev_iter<_Vw> begin() {\r\n            if constexpr (common_range<_Vw>) {\r\n                return _Rev_iter<_Vw>{_RANGES end(_Range)};\r\n            } else {\r\n                if (this->_Has_cache()) {\r\n                    return _Rev_iter<_Vw>{this->_Get_cache(_Range)};\r\n                }\r\n\r\n                iterator_t<_Vw> _First;\r\n                if constexpr (sized_range<_Vw>) {\r\n                    _First = _RANGES next(_RANGES begin(_Range), _RANGES distance(_Range));\r\n                } else {\r\n                    _First = _RANGES next(_RANGES begin(_Range), _RANGES end(_Range));\r\n                }\r\n                this->_Set_cache(_Range, _First);\r\n                return _Rev_iter<_Vw>{_STD move(_First)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const\r\n            noexcept(noexcept(_Rev_iter<const _Vw>{_RANGES end(_Range)})) /* strengthened */\r\n            requires common_range<const _Vw>\r\n        {\r\n            return _Rev_iter<const _Vw>{_RANGES end(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr _Rev_iter<_Vw> end()\r\n            noexcept(noexcept(_Rev_iter<_Vw>{_RANGES begin(_Range)})) /* strengthened */ {\r\n            return _Rev_iter<_Vw>{_RANGES begin(_Range)};\r\n        }\r\n        _NODISCARD constexpr auto end() const\r\n            noexcept(noexcept(_Rev_iter<const _Vw>{_RANGES begin(_Range)})) /* strengthened */\r\n            requires common_range<const _Vw>\r\n        {\r\n            return _Rev_iter<const _Vw>{_RANGES begin(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() noexcept(noexcept(_RANGES size(_Range))) /* strengthened */\r\n            requires sized_range<_Vw>\r\n        {\r\n            return _RANGES size(_Range);\r\n        }\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_RANGES size(_Range))) /* strengthened */\r\n            requires sized_range<const _Vw>\r\n        {\r\n            return _RANGES size(_Range);\r\n        }\r\n    };\r\n\r\n    template <class _Rng>\r\n    reverse_view(_Rng&&) -> reverse_view<views::all_t<_Rng>>;\r\n\r\n    template <class _Rng>\r\n    constexpr bool enable_borrowed_range<reverse_view<_Rng>> = enable_borrowed_range<_Rng>;\r\n\r\n#if _HAS_CXX23\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<reverse_view<_Rng>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<const reverse_view<_Rng>> = _Compile_time_max_size<const _Rng>;\r\n#endif // _HAS_CXX23\r\n\r\n    namespace views {\r\n        template <class _Rng>\r\n        concept _Can_extract_base = requires(_Rng&& __r) { static_cast<_Rng &&>(__r).base(); };\r\n\r\n        template <class _Rng>\r\n        concept _Can_reverse = requires(_Rng&& __r) { reverse_view{static_cast<_Rng &&>(__r)}; };\r\n\r\n        class _Reverse_fn : public _Pipe::_Base<_Reverse_fn> {\r\n        private:\r\n            enum class _St { _None, _Base, _Subrange_unsized, _Subrange_sized, _Reverse };\r\n\r\n            template <class>\r\n            static constexpr auto _Reversed_subrange = -1;\r\n\r\n            template <class _It, subrange_kind _Ki>\r\n            static constexpr auto _Reversed_subrange<subrange<reverse_iterator<_It>, reverse_iterator<_It>, _Ki>> =\r\n                static_cast<int>(_Ki);\r\n\r\n            template <class _Rng>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                using _Ty = remove_cvref_t<_Rng>;\r\n\r\n                if constexpr (_Is_specialization_v<_Ty, reverse_view>) {\r\n                    if constexpr (_Can_extract_base<_Rng>) {\r\n                        return {_St::_Base, noexcept(_STD declval<_Rng>().base())};\r\n                    }\r\n                } else if constexpr (_Reversed_subrange<_Ty> == 0) {\r\n                    using _It = decltype(_STD declval<_Rng&>().begin().base());\r\n                    return {_St::_Subrange_unsized,\r\n                        noexcept(subrange<_It, _It, subrange_kind::unsized>{\r\n                            _STD declval<_Rng&>().end().base(), _STD declval<_Rng&>().begin().base()})};\r\n                } else if constexpr (_Reversed_subrange<_Ty> == 1) {\r\n                    using _It = decltype(_STD declval<_Rng&>().begin().base());\r\n                    return {_St::_Subrange_sized,\r\n                        noexcept(subrange<_It, _It, subrange_kind::sized>{_STD declval<_Rng&>().end().base(),\r\n                            _STD declval<_Rng&>().begin().base(), _STD declval<_Rng&>().size()})};\r\n                } else if constexpr (_Can_reverse<_Rng>) {\r\n                    return {_St::_Reverse, noexcept(reverse_view{_STD declval<_Rng>()})};\r\n                }\r\n\r\n                return {_St::_None};\r\n            }\r\n\r\n            template <class _Rng>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Rng>();\r\n\r\n        public:\r\n            template <viewable_range _Rng>\r\n                requires (_Choice<_Rng>._Strategy != _St::_None)\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range) noexcept(_Choice<_Rng>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Rng>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_Base) {\r\n                    return _STD forward<_Rng>(_Range).base();\r\n                } else if constexpr (_Strat == _St::_Subrange_unsized) {\r\n                    return subrange{_Range.end().base(), _Range.begin().base()};\r\n                } else if constexpr (_Strat == _St::_Subrange_sized) {\r\n                    return subrange{_Range.end().base(), _Range.begin().base(), _Range.size()};\r\n                } else if constexpr (_Strat == _St::_Reverse) {\r\n                    return reverse_view{_STD forward<_Rng>(_Range)};\r\n                } else {\r\n                    static_assert(false); // unexpected strategy\r\n                }\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Reverse_fn reverse;\r\n    } // namespace views\r\n\r\n#if _HAS_CXX23\r\n    _EXPORT_STD template <view _Vw>\r\n        requires input_range<_Vw>\r\n    class as_const_view : public view_interface<as_const_view<_Vw>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n\r\n    public:\r\n        as_const_view()\r\n            requires default_initializable<_Vw>\r\n        = default;\r\n\r\n        constexpr explicit as_const_view(_Vw _Range_) noexcept(is_nothrow_move_constructible_v<_Vw>) // strengthened\r\n            : _Range(_STD move(_Range_)) {}\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) // strengthened\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() noexcept(noexcept(_RANGES cbegin(_Range))) // strengthened\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            return _RANGES cbegin(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const noexcept(noexcept(_RANGES cbegin(_Range))) // strengthened\r\n            requires range<const _Vw>\r\n        {\r\n            return _RANGES cbegin(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() noexcept(noexcept(_RANGES cend(_Range))) // strengthened\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            return _RANGES cend(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const noexcept(noexcept(_RANGES cend(_Range))) // strengthened\r\n            requires range<const _Vw>\r\n        {\r\n            return _RANGES cend(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() noexcept(noexcept(_RANGES size(_Range))) // strengthened\r\n            requires sized_range<_Vw>\r\n        {\r\n            return _RANGES size(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_RANGES size(_Range))) // strengthened\r\n            requires sized_range<const _Vw>\r\n        {\r\n            return _RANGES size(_Range);\r\n        }\r\n    };\r\n\r\n    template <class _Rng>\r\n    as_const_view(_Rng&&) -> as_const_view<views::all_t<_Rng>>;\r\n\r\n    template <class _Rng>\r\n    constexpr bool enable_borrowed_range<as_const_view<_Rng>> = enable_borrowed_range<_Rng>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<as_const_view<_Rng>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<const as_const_view<_Rng>> = _Compile_time_max_size<const _Rng>;\r\n\r\n    namespace views {\r\n        template <class _Rng>\r\n        concept _Can_as_const = requires(_Rng&& __r) { as_const_view{static_cast<_Rng &&>(__r)}; };\r\n\r\n        class _As_const_fn : public _Pipe::_Base<_As_const_fn> {\r\n        private:\r\n            enum class _St { _None, _All, _Empty, _Reconstruct_span, _Reconstruct_ref, _Ref, _As_const };\r\n\r\n            template <class>\r\n            static constexpr bool _Can_reconstruct_ref_view_v = false;\r\n\r\n            template <class _Ty>\r\n                requires constant_range<const _Ty>\r\n            static constexpr bool _Can_reconstruct_ref_view_v<ref_view<_Ty>> = true;\r\n\r\n            template <class _Rng>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                using _Ty = remove_cvref_t<_Rng>;\r\n\r\n                if constexpr (constant_range<views::all_t<_Rng>>) {\r\n                    return {_St::_All, noexcept(views::all(_STD declval<_Rng>()))};\r\n                } else if constexpr (_Is_specialization_v<_Ty, empty_view>) {\r\n                    return {_St::_Empty, true};\r\n                } else if constexpr (_Is_span_v<_Ty>) {\r\n                    return {_St::_Reconstruct_span, true};\r\n                } else if constexpr (_Can_reconstruct_ref_view_v<_Ty>) {\r\n                    return {_St::_Reconstruct_ref, noexcept(ref_view{_STD as_const(_STD declval<_Rng>().base())})};\r\n                } else if constexpr (is_lvalue_reference_v<_Rng> && constant_range<const _Ty> && !view<_Ty>) {\r\n                    return {_St::_Ref, noexcept(ref_view{_STD as_const(_STD declval<_Rng>())})};\r\n                } else if constexpr (_Can_as_const<_Rng>) {\r\n                    return {_St::_As_const, noexcept(as_const_view{_STD declval<_Rng>()})};\r\n                } else {\r\n                    return {_St::_None};\r\n                }\r\n            }\r\n\r\n            template <class _Rng>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Rng>();\r\n\r\n        public:\r\n            template <viewable_range _Rng>\r\n                requires (_Choice<_Rng>._Strategy != _St::_None)\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range) noexcept(_Choice<_Rng>._No_throw) {\r\n                using _Ty            = remove_cvref_t<_Rng>;\r\n                constexpr _St _Strat = _Choice<_Rng>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_All) {\r\n                    return views::all(_STD forward<_Rng>(_Range));\r\n                } else if constexpr (_Strat == _St::_Empty) {\r\n                    return empty_view<const remove_reference_t<range_reference_t<_Rng>>>{};\r\n                } else if constexpr (_Strat == _St::_Reconstruct_span) {\r\n                    return span<const typename _Ty::element_type, _Ty::extent>{_STD forward<_Rng>(_Range)};\r\n                } else if constexpr (_Strat == _St::_Reconstruct_ref) {\r\n                    return ref_view{_STD as_const(_STD forward<_Rng>(_Range).base())};\r\n                } else if constexpr (_Strat == _St::_Ref) {\r\n                    return ref_view{_STD as_const(_STD forward<_Rng>(_Range))};\r\n                } else if constexpr (_Strat == _St::_As_const) {\r\n                    return as_const_view{_STD forward<_Rng>(_Range)};\r\n                } else {\r\n                    static_assert(false); // unexpected strategy\r\n                }\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _As_const_fn as_const;\r\n    } // namespace views\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Tuple, size_t _Index>\r\n    concept _Has_tuple_element =\r\n#if _HAS_CXX23\r\n        _Tuple_like<_Tuple> && _Index < tuple_size_v<_Tuple>;\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n        requires(_Tuple __t) {\r\n            typename tuple_size<_Tuple>::type;\r\n            requires _Index < tuple_size_v<_Tuple>;\r\n            typename tuple_element_t<_Index, _Tuple>;\r\n            { _STD get<_Index>(__t) } -> convertible_to<const tuple_element_t<_Index, _Tuple>&>;\r\n        };\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\n    template <class _Tuple, size_t _Index>\r\n    concept _Returnable_element = is_reference_v<_Tuple> || move_constructible<tuple_element_t<_Index, _Tuple>>;\r\n\r\n    _EXPORT_STD template <input_range _Vw, size_t _Index>\r\n        requires view<_Vw> && _Has_tuple_element<range_value_t<_Vw>, _Index>\r\n              && _Has_tuple_element<remove_reference_t<range_reference_t<_Vw>>, _Index>\r\n              && _Returnable_element<range_reference_t<_Vw>, _Index>\r\n    class elements_view : public view_interface<elements_view<_Vw, _Index>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n\r\n        template <class _Base>\r\n        struct _Category_base {};\r\n\r\n        template <forward_range _Base>\r\n        struct _Category_base<_Base> {\r\n            using iterator_category =\r\n                conditional_t<!is_lvalue_reference_v<decltype(_STD get<_Index>(*_STD declval<iterator_t<_Base>>()))>,\r\n                    input_iterator_tag,\r\n                    conditional_t<derived_from<_Iter_cat_t<iterator_t<_Base>>, random_access_iterator_tag>,\r\n                        random_access_iterator_tag, _Iter_cat_t<iterator_t<_Base>>>>;\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Iterator : public _Category_base<_Maybe_const<_Const, _Vw>> {\r\n        private:\r\n            friend elements_view;\r\n\r\n            using _Base = _Maybe_const<_Const, _Vw>;\r\n\r\n            iterator_t<_Base> _Current{};\r\n\r\n        public:\r\n            using iterator_concept = conditional_t<random_access_range<_Base>, random_access_iterator_tag,\r\n                conditional_t<bidirectional_range<_Base>, bidirectional_iterator_tag,\r\n                    conditional_t<forward_range<_Base>, forward_iterator_tag, input_iterator_tag>>>;\r\n            using value_type       = remove_cvref_t<tuple_element_t<_Index, range_value_t<_Base>>>;\r\n            using difference_type  = range_difference_t<_Base>;\r\n\r\n            _Iterator()\r\n                requires default_initializable<iterator_t<_Base>>\r\n            = default;\r\n\r\n            constexpr explicit _Iterator(iterator_t<_Base> _Current_)\r\n                noexcept(is_nothrow_move_constructible_v<iterator_t<_Base>>) // strengthened\r\n                : _Current{_STD move(_Current_)} {}\r\n\r\n            constexpr _Iterator(_Iterator<!_Const> _It)\r\n                noexcept(is_nothrow_constructible_v<iterator_t<_Base>, iterator_t<_Vw>>) // strengthened\r\n                requires _Const && convertible_to<iterator_t<_Vw>, iterator_t<_Base>>\r\n                : _Current(_STD move(_It._Current)) {}\r\n\r\n            _NODISCARD constexpr const iterator_t<_Base>& base() const& noexcept {\r\n                return _Current;\r\n            }\r\n\r\n            _NODISCARD constexpr iterator_t<_Base> base() && noexcept(\r\n                is_nothrow_move_constructible_v<iterator_t<_Base>>) /* strengthened */ {\r\n                return _STD move(_Current);\r\n            }\r\n\r\n            _NODISCARD constexpr decltype(auto) operator*() const\r\n                noexcept(noexcept(_STD get<_Index>(*_Current))) /* strengthened */\r\n                requires is_reference_v<range_reference_t<_Base>>\r\n            {\r\n                return _STD get<_Index>(*_Current);\r\n            }\r\n\r\n            _NODISCARD constexpr decltype(auto) operator*() const\r\n                noexcept(is_nothrow_move_constructible_v<tuple_element_t<_Index, range_reference_t<_Base>>> //\r\n                         && noexcept(_STD get<_Index>(*_Current))) /* strengthened */ {\r\n                using _ElemTy = remove_cv_t<tuple_element_t<_Index, range_reference_t<_Base>>>;\r\n                return static_cast<_ElemTy>(_STD get<_Index>(*_Current));\r\n            }\r\n\r\n            constexpr _Iterator& operator++() noexcept(noexcept(++_Current)) /* strengthened */ {\r\n                ++_Current;\r\n                return *this;\r\n            }\r\n\r\n            constexpr void operator++(int) noexcept(noexcept(++_Current)) /* strengthened */ {\r\n                ++_Current;\r\n            }\r\n\r\n            constexpr _Iterator operator++(int)\r\n                noexcept(noexcept(++_Current) && is_nothrow_copy_constructible_v<iterator_t<_Base>>) /* strengthened */\r\n                requires forward_range<_Base>\r\n            {\r\n                auto _Tmp = *this;\r\n                ++_Current;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator--() noexcept(noexcept(--_Current)) /* strengthened */\r\n                requires bidirectional_range<_Base>\r\n            {\r\n                --_Current;\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator--(int)\r\n                noexcept(noexcept(--_Current) && is_nothrow_copy_constructible_v<iterator_t<_Base>>) /* strengthened */\r\n                requires bidirectional_range<_Base>\r\n            {\r\n                auto _Tmp = *this;\r\n                --_Current;\r\n                return _Tmp;\r\n            }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            constexpr void _Verify_offset(const difference_type _Off) const\r\n                requires random_access_range<_Base>\r\n            {\r\n                if constexpr (_Offset_verifiable_v<iterator_t<_Base>>) {\r\n                    _Current._Verify_offset(_Off);\r\n                }\r\n            }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n            constexpr _Iterator& operator+=(const difference_type _Off)\r\n                noexcept(noexcept(_Current += _Off)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Verify_offset(_Off);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _Current += _Off;\r\n                return *this;\r\n            }\r\n            constexpr _Iterator& operator-=(const difference_type _Off)\r\n                noexcept(noexcept(_Current -= _Off)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Off != _Min_possible_v<difference_type>, \"integer overflow\");\r\n                _Verify_offset(-_Off);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _Current -= _Off;\r\n                return *this;\r\n            }\r\n\r\n            _NODISCARD constexpr decltype(auto) operator[](const difference_type _Idx) const\r\n                noexcept(noexcept(_STD get<_Index>(*(_Current + _Idx)))) /* strengthened */\r\n                requires random_access_range<_Base> && is_reference_v<range_reference_t<_Base>>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Verify_offset(_Idx);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return _STD get<_Index>(*(_Current + _Idx));\r\n            }\r\n\r\n            _NODISCARD constexpr decltype(auto) operator[](const difference_type _Idx) const\r\n                noexcept(is_nothrow_move_constructible_v<tuple_element_t<_Index, range_reference_t<_Base>>> //\r\n                         && noexcept(_STD get<_Index>(*(_Current + _Idx)))) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _Verify_offset(_Idx);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                using _ElemTy = remove_cv_t<tuple_element_t<_Index, range_reference_t<_Base>>>;\r\n                return static_cast<_ElemTy>(_STD get<_Index>(*(_Current + _Idx)));\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current == _Right._Current)) /* strengthened */\r\n                requires equality_comparable<iterator_t<_Base>>\r\n            {\r\n                return _Left._Current == _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator<(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current < _Right._Current)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Left._Current < _Right._Current;\r\n            }\r\n            _NODISCARD friend constexpr bool operator>(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current < _Right._Current)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Right < _Left;\r\n            }\r\n            _NODISCARD friend constexpr bool operator<=(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current < _Right._Current)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return !(_Right < _Left);\r\n            }\r\n            _NODISCARD friend constexpr bool operator>=(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current < _Right._Current)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return !(_Left < _Right);\r\n            }\r\n\r\n            _NODISCARD friend constexpr auto operator<=>(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current <=> _Right._Current)) /* strengthened */\r\n                requires random_access_range<_Base> && three_way_comparable<iterator_t<_Base>>\r\n            {\r\n                return _Left._Current <=> _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const _Iterator& _It, const difference_type _Off)\r\n                noexcept(noexcept(_STD declval<iterator_t<_Base>&>() += _Off)\r\n                         && is_nothrow_copy_constructible_v<iterator_t<_Base>>) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _It._Verify_offset(_Off);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                auto _Copy = _It;\r\n                _Copy._Current += _Off;\r\n                return _Copy;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const difference_type _Off, const _Iterator& _It)\r\n                noexcept(noexcept(_STD declval<iterator_t<_Base>&>() += _Off)\r\n                         && is_nothrow_copy_constructible_v<iterator_t<_Base>>) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _It._Verify_offset(_Off);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                auto _Copy = _It;\r\n                _Copy._Current += _Off;\r\n                return _Copy;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator-(const _Iterator& _It, const difference_type _Off)\r\n                noexcept(noexcept(_STD declval<iterator_t<_Base>&>() -= _Off)\r\n                         && is_nothrow_copy_constructible_v<iterator_t<_Base>>) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Off != _Min_possible_v<difference_type>, \"integer overflow\");\r\n                _It._Verify_offset(-_Off);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                auto _Copy = _It;\r\n                _Copy._Current -= _Off;\r\n                return _Copy;\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current - _Right._Current)) /* strengthened */\r\n                requires sized_sentinel_for<iterator_t<_Base>, iterator_t<_Base>>\r\n            {\r\n                return _Left._Current - _Right._Current;\r\n            }\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Sentinel {\r\n        private:\r\n            friend elements_view;\r\n\r\n            using _Base = _Maybe_const<_Const, _Vw>;\r\n            template <bool _OtherConst>\r\n            using _Maybe_const_iter = iterator_t<_Maybe_const<_OtherConst, _Vw>>;\r\n\r\n            sentinel_t<_Base> _Last{};\r\n\r\n            template <bool _OtherConst>\r\n            _NODISCARD static constexpr const _Maybe_const_iter<_OtherConst>& _Get_current(\r\n                const _Iterator<_OtherConst>& _It) noexcept {\r\n                return _It._Current;\r\n            }\r\n\r\n        public:\r\n            _Sentinel() = default;\r\n            constexpr explicit _Sentinel(sentinel_t<_Base> _Last_)\r\n                noexcept(is_nothrow_move_constructible_v<sentinel_t<_Base>>) // strengthened\r\n                : _Last(_STD move(_Last_)) {}\r\n\r\n            constexpr _Sentinel(_Sentinel<!_Const> _Se)\r\n                noexcept(is_nothrow_constructible_v<sentinel_t<_Base>, sentinel_t<_Vw>>) // strengthened\r\n                requires _Const && convertible_to<sentinel_t<_Vw>, sentinel_t<_Base>>\r\n                : _Last(_STD move(_Se._Last)) {}\r\n\r\n            _NODISCARD constexpr sentinel_t<_Base> base() const\r\n                noexcept(is_nothrow_copy_constructible_v<sentinel_t<_Base>>) /* strengthened */ {\r\n                return _Last;\r\n            }\r\n\r\n            template <bool _OtherConst>\r\n                requires sentinel_for<sentinel_t<_Base>, _Maybe_const_iter<_OtherConst>>\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator<_OtherConst>& _Left, const _Sentinel& _Right)\r\n                noexcept(noexcept(_Get_current(_Left) == _Right._Last)) /* strengthened */ {\r\n                return _Get_current(_Left) == _Right._Last;\r\n            }\r\n\r\n            // typename is a workaround for VSO-2680018 (EDG)\r\n            template <bool _OtherConst>\r\n                requires sized_sentinel_for<sentinel_t<_Base>, _Maybe_const_iter<_OtherConst>>\r\n            _NODISCARD friend constexpr typename _Iterator<_OtherConst>::difference_type operator-(\r\n                const _Iterator<_OtherConst>& _Left, const _Sentinel& _Right)\r\n                noexcept(noexcept(_Get_current(_Left) - _Right._Last)) /* strengthened */ {\r\n                return _Get_current(_Left) - _Right._Last;\r\n            }\r\n\r\n            // typename is a workaround for VSO-2680018 (EDG)\r\n            template <bool _OtherConst>\r\n                requires sized_sentinel_for<sentinel_t<_Base>, _Maybe_const_iter<_OtherConst>>\r\n            _NODISCARD friend constexpr typename _Iterator<_OtherConst>::difference_type operator-(\r\n                const _Sentinel& _Left, const _Iterator<_OtherConst>& _Right)\r\n                noexcept(noexcept(_Left._Last - _Get_current(_Right))) /* strengthened */ {\r\n                return _Left._Last - _Get_current(_Right);\r\n            }\r\n        };\r\n\r\n    public:\r\n        elements_view()\r\n            requires default_initializable<_Vw>\r\n        = default;\r\n\r\n        constexpr explicit elements_view(_Vw _Range_) noexcept(is_nothrow_move_constructible_v<_Vw>) // strengthened\r\n            : _Range(_STD move(_Range_)) {}\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) /* strengthened */\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr _Iterator<false> begin() noexcept(\r\n            noexcept(_RANGES begin(_Range)) && is_nothrow_move_constructible_v<iterator_t<_Vw>>) /* strengthened */\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            return _Iterator<false>{_RANGES begin(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr _Iterator<true> begin() const\r\n            noexcept(noexcept(_RANGES begin(_Range))\r\n                     && is_nothrow_move_constructible_v<iterator_t<const _Vw>>) /* strengthened */\r\n            requires range<const _Vw>\r\n        {\r\n            return _Iterator<true>{_RANGES begin(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() noexcept(\r\n            noexcept(_RANGES end(_Range)) && is_nothrow_move_constructible_v<sentinel_t<_Vw>>) /* strengthened */\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            if constexpr (common_range<_Vw>) {\r\n                return _Iterator<false>{_RANGES end(_Range)};\r\n            } else {\r\n                return _Sentinel<false>{_RANGES end(_Range)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const noexcept(\r\n            noexcept(_RANGES end(_Range)) && is_nothrow_move_constructible_v<sentinel_t<const _Vw>>) /* strengthened */\r\n            requires range<const _Vw>\r\n        {\r\n            if constexpr (common_range<const _Vw>) {\r\n                return _Iterator<true>{_RANGES end(_Range)};\r\n            } else {\r\n                return _Sentinel<true>{_RANGES end(_Range)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() noexcept(noexcept(_RANGES size(_Range))) /* strengthened */\r\n            requires sized_range<_Vw>\r\n        {\r\n            return _RANGES size(_Range);\r\n        }\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_RANGES size(_Range))) /* strengthened */\r\n            requires sized_range<const _Vw>\r\n        {\r\n            return _RANGES size(_Range);\r\n        }\r\n    };\r\n\r\n    template <class _Rng, size_t _Index>\r\n    constexpr bool enable_borrowed_range<elements_view<_Rng, _Index>> = enable_borrowed_range<_Rng>;\r\n\r\n#if _HAS_CXX23\r\n    template <class _Rng, size_t _Index>\r\n    constexpr auto _Compile_time_max_size<elements_view<_Rng, _Index>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng, size_t _Index>\r\n    constexpr auto _Compile_time_max_size<const elements_view<_Rng, _Index>> = _Compile_time_max_size<const _Rng>;\r\n#endif // _HAS_CXX23\r\n\r\n    _EXPORT_STD template <class _Rng>\r\n    using keys_view = elements_view<_Rng, 0>;\r\n    _EXPORT_STD template <class _Rng>\r\n    using values_view = elements_view<_Rng, 1>;\r\n\r\n    namespace views {\r\n        template <size_t _Index>\r\n        struct _Elements_fn : public _Pipe::_Base<_Elements_fn<_Index>> {\r\n            template <viewable_range _Rng>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range)\r\n                noexcept(noexcept(elements_view<views::all_t<_Rng>, _Index>{_STD forward<_Rng>(_Range)}))\r\n                requires requires { elements_view<views::all_t<_Rng>, _Index>{static_cast<_Rng &&>(_Range)}; }\r\n            {\r\n                return elements_view<views::all_t<_Rng>, _Index>{_STD forward<_Rng>(_Range)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD template <size_t _Index>\r\n        constexpr _Elements_fn<_Index> elements;\r\n        _EXPORT_STD inline constexpr auto keys   = elements<0>;\r\n        _EXPORT_STD inline constexpr auto values = elements<1>;\r\n    } // namespace views\r\n\r\n#if _HAS_CXX23\r\n    template <class _Rng>\r\n    concept _Range_with_movable_references = input_range<_Rng> && move_constructible<range_reference_t<_Rng>>\r\n                                          && move_constructible<range_rvalue_reference_t<_Rng>>;\r\n\r\n    _EXPORT_STD template <view _Vw>\r\n        requires _Range_with_movable_references<_Vw>\r\n    class enumerate_view : public view_interface<enumerate_view<_Vw>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n\r\n        template <bool _Const>\r\n        class _Iterator {\r\n        private:\r\n            friend enumerate_view;\r\n\r\n            using _Base_t         = _Maybe_const<_Const, _Vw>;\r\n            using _Base_iterator  = iterator_t<_Base_t>;\r\n            using _Reference_type = tuple<range_difference_t<_Base_t>, range_reference_t<_Base_t>>;\r\n\r\n            _MSVC_NO_UNIQUE_ADDRESS _Base_iterator _Current{};\r\n            range_difference_t<_Base_t> _Pos = 0;\r\n\r\n            constexpr explicit _Iterator(_Base_iterator _Current_, range_difference_t<_Base_t> _Pos_)\r\n                noexcept(is_nothrow_move_constructible_v<_Base_iterator>) // strengthened\r\n                : _Current(_STD move(_Current_)), _Pos(_Pos_) {}\r\n\r\n        public:\r\n            using iterator_category = input_iterator_tag;\r\n            using iterator_concept  = conditional_t<random_access_range<_Base_t>, random_access_iterator_tag,\r\n                 conditional_t<bidirectional_range<_Base_t>, bidirectional_iterator_tag,\r\n                     conditional_t<forward_range<_Base_t>, forward_iterator_tag, input_iterator_tag>>>;\r\n            using difference_type   = range_difference_t<_Base_t>;\r\n            using value_type        = tuple<difference_type, range_value_t<_Base_t>>;\r\n\r\n            _Iterator()\r\n                requires default_initializable<_Base_iterator>\r\n            = default;\r\n\r\n            constexpr _Iterator(_Iterator<!_Const> _Other)\r\n                noexcept(is_nothrow_constructible_v<_Base_iterator, iterator_t<_Vw>>) // strengthened\r\n                requires _Const && convertible_to<iterator_t<_Vw>, _Base_iterator>\r\n                : _Current(_STD move(_Other._Current)), _Pos(_Other._Pos) {}\r\n\r\n            _NODISCARD constexpr const _Base_iterator& base() const& noexcept {\r\n                return _Current;\r\n            }\r\n\r\n            _NODISCARD constexpr _Base_iterator base() && noexcept(\r\n                is_nothrow_move_constructible_v<_Base_iterator>) /* strengthened */ {\r\n                return _STD move(_Current);\r\n            }\r\n\r\n            _NODISCARD constexpr difference_type index() const noexcept {\r\n                return _Pos;\r\n            }\r\n\r\n            _NODISCARD constexpr auto operator*() const noexcept(\r\n                noexcept(*_Current) && is_nothrow_copy_constructible_v<range_reference_t<_Base_t>>) /* strengthened */ {\r\n                return _Reference_type{_Pos, *_Current};\r\n            }\r\n\r\n            constexpr _Iterator& operator++() noexcept(noexcept(++_Current)) /* strengthened */ {\r\n                ++_Current;\r\n                ++_Pos;\r\n                return *this;\r\n            }\r\n\r\n            constexpr void operator++(int) noexcept(noexcept(++_Current)) /* strengthened */ {\r\n                ++*this;\r\n            }\r\n\r\n            constexpr _Iterator operator++(int)\r\n                noexcept(noexcept(++*this) && is_nothrow_copy_constructible_v<_Iterator>) // strengthened\r\n                requires forward_range<_Base_t>\r\n            {\r\n                auto _Tmp = *this;\r\n                ++*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator--() noexcept(noexcept(--_Current)) // strengthened\r\n                requires bidirectional_range<_Base_t>\r\n            {\r\n                --_Current;\r\n                --_Pos;\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator--(int)\r\n                noexcept(noexcept(--*this) && is_nothrow_copy_constructible_v<_Iterator>) // strengthened\r\n                requires bidirectional_range<_Base_t>\r\n            {\r\n                auto _Tmp = *this;\r\n                --*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator+=(const difference_type _Off)\r\n                noexcept(noexcept(_Current += _Off)) // strengthened\r\n                requires random_access_range<_Base_t>\r\n            {\r\n                _Current += _Off;\r\n                _Pos += _Off;\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator& operator-=(const difference_type _Off)\r\n                noexcept(noexcept(_Current -= _Off)) // strengthened\r\n                requires random_access_range<_Base_t>\r\n            {\r\n                _Current -= _Off;\r\n                _Pos -= _Off;\r\n                return *this;\r\n            }\r\n\r\n            _NODISCARD constexpr auto operator[](const difference_type _Off) const noexcept(\r\n                noexcept(_Current[_Off]) && is_nothrow_copy_constructible_v<range_reference_t<_Base_t>>) // strengthened\r\n                requires random_access_range<_Base_t>\r\n            {\r\n                return _Reference_type{static_cast<difference_type>(_Pos + _Off), _Current[_Off]};\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, const _Iterator& _Right) noexcept {\r\n                return _Left._Pos == _Right._Pos;\r\n            }\r\n\r\n            _NODISCARD friend constexpr strong_ordering operator<=>(\r\n                const _Iterator& _Left, const _Iterator& _Right) noexcept {\r\n                return _Left._Pos <=> _Right._Pos;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const _Iterator& _It, const difference_type _Off)\r\n                noexcept(is_nothrow_copy_constructible_v<_Iterator>\r\n                         && noexcept(_STD declval<_Iterator&>() += _Off)) // strengthened\r\n                requires random_access_range<_Base_t>\r\n            {\r\n                auto _Tmp = _It;\r\n                _Tmp += _Off;\r\n                return _Tmp;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const difference_type _Off, const _Iterator& _It)\r\n                noexcept(noexcept(_It + _Off)) // strengthened\r\n                requires random_access_range<_Base_t>\r\n            {\r\n                return _It + _Off;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator-(const _Iterator& _It, const difference_type _Off)\r\n                noexcept(is_nothrow_copy_constructible_v<_Iterator>\r\n                         && noexcept(_STD declval<_Iterator&>() -= _Off)) // strengthened\r\n                requires random_access_range<_Base_t>\r\n            {\r\n                auto _Tmp = _It;\r\n                _Tmp -= _Off;\r\n                return _Tmp;\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(\r\n                const _Iterator& _Left, const _Iterator& _Right) noexcept {\r\n                return _Left._Pos - _Right._Pos;\r\n            }\r\n\r\n            _NODISCARD friend constexpr auto iter_move(const _Iterator& _It)\r\n                noexcept(noexcept(_RANGES iter_move(_It._Current))\r\n                         && is_nothrow_move_constructible_v<range_rvalue_reference_t<_Base_t>>) {\r\n                return tuple<difference_type, range_rvalue_reference_t<_Base_t>>{\r\n                    _It._Pos, _RANGES iter_move(_It._Current)};\r\n            }\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Sentinel {\r\n        private:\r\n            friend enumerate_view;\r\n\r\n            using _Base_t        = _Maybe_const<_Const, _Vw>;\r\n            using _Base_sentinel = sentinel_t<_Base_t>;\r\n\r\n            _MSVC_NO_UNIQUE_ADDRESS _Base_sentinel _End{};\r\n\r\n            constexpr explicit _Sentinel(_Base_sentinel _End_)\r\n                noexcept(is_nothrow_move_constructible_v<_Base_sentinel>) // strengthened\r\n                : _End(_STD move(_End_)) {}\r\n\r\n            template <bool _OtherConst>\r\n                requires sentinel_for<_Base_sentinel, iterator_t<_Maybe_const<_OtherConst, _Vw>>>\r\n            _NODISCARD constexpr bool _Equal(const _Iterator<_OtherConst>& _It) const\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_It._Current == _End))) {\r\n                return _It._Current == _End;\r\n            }\r\n\r\n            template <bool _OtherConst>\r\n                requires sized_sentinel_for<_Base_sentinel, iterator_t<_Maybe_const<_OtherConst, _Vw>>>\r\n            _NODISCARD constexpr _Iterator<_OtherConst>::difference_type _Distance_from(\r\n                const _Iterator<_OtherConst>& _It) const noexcept(noexcept(_End - _It._Current)) {\r\n                return _End - _It._Current;\r\n            }\r\n\r\n        public:\r\n            _Sentinel() = default;\r\n\r\n            constexpr _Sentinel(_Sentinel<!_Const> _Other)\r\n                noexcept(is_nothrow_constructible_v<_Base_sentinel, sentinel_t<_Vw>>) // strengthened\r\n                requires _Const && convertible_to<sentinel_t<_Vw>, _Base_sentinel>\r\n                : _End(_STD move(_Other._End)) {}\r\n\r\n            _NODISCARD constexpr _Base_sentinel base() const\r\n                noexcept(is_nothrow_copy_constructible_v<_Base_sentinel>) /* strengthened */ {\r\n                return _End;\r\n            }\r\n\r\n            template <bool _OtherConst>\r\n                requires sentinel_for<_Base_sentinel, iterator_t<_Maybe_const<_OtherConst, _Vw>>>\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator<_OtherConst>& _It, const _Sentinel& _Se)\r\n                noexcept(noexcept(_Se._Equal(_It))) /* strengthened */ {\r\n                return _Se._Equal(_It);\r\n            }\r\n\r\n            // typename is a workaround for VSO-2680018 (EDG)\r\n            template <bool _OtherConst>\r\n                requires sized_sentinel_for<_Base_sentinel, iterator_t<_Maybe_const<_OtherConst, _Vw>>>\r\n            _NODISCARD friend constexpr typename _Iterator<_OtherConst>::difference_type operator-(\r\n                const _Iterator<_OtherConst>& _It, const _Sentinel& _Se)\r\n                noexcept(noexcept(_Se._Distance_from(_It))) /* strengthened */ {\r\n                return -_Se._Distance_from(_It);\r\n            }\r\n\r\n            // typename is a workaround for VSO-2680018 (EDG)\r\n            template <bool _OtherConst>\r\n                requires sized_sentinel_for<_Base_sentinel, iterator_t<_Maybe_const<_OtherConst, _Vw>>>\r\n            _NODISCARD friend constexpr typename _Iterator<_OtherConst>::difference_type operator-(const _Sentinel& _Se,\r\n                const _Iterator<_OtherConst>& _It) noexcept(noexcept(_Se._Distance_from(_It))) /* strengthened */ {\r\n                return _Se._Distance_from(_It);\r\n            }\r\n        };\r\n\r\n        template <class _Rng>\r\n        static constexpr bool _Is_end_nothrow_v = is_nothrow_move_constructible_v<sentinel_t<_Rng>> //\r\n                                               && noexcept(_RANGES end(_STD declval<_Rng&>()));\r\n\r\n        template <class _Rng>\r\n            requires common_range<_Rng> && sized_range<_Rng>\r\n        static constexpr bool _Is_end_nothrow_v<_Rng> = is_nothrow_move_constructible_v<sentinel_t<_Rng>> //\r\n                                                     && noexcept(_RANGES end(_STD declval<_Rng&>())) //\r\n                                                     && noexcept(_RANGES distance(_STD declval<_Rng&>()));\r\n\r\n    public:\r\n        constexpr enumerate_view()\r\n            requires default_initializable<_Vw>\r\n        = default;\r\n\r\n        constexpr explicit enumerate_view(_Vw _Range_) noexcept(is_nothrow_move_constructible_v<_Vw>) // strengthened\r\n            : _Range(_STD move(_Range_)) {}\r\n\r\n        _NODISCARD constexpr auto begin() noexcept(\r\n            noexcept(_RANGES begin(_Range)) && is_nothrow_move_constructible_v<iterator_t<_Vw>>) // strengthened\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            return _Iterator<false>{_RANGES begin(_Range), 0};\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const noexcept(\r\n            noexcept(_RANGES begin(_Range)) && is_nothrow_move_constructible_v<iterator_t<const _Vw>>) // strengthened\r\n            requires _Range_with_movable_references<const _Vw>\r\n        {\r\n            return _Iterator<true>{_RANGES begin(_Range), 0};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() noexcept(_Is_end_nothrow_v<_Vw>) // strengthened\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            if constexpr (forward_range<_Vw> && common_range<_Vw> && sized_range<_Vw>) {\r\n                return _Iterator<false>{_RANGES end(_Range), _RANGES distance(_Range)};\r\n            } else {\r\n                return _Sentinel<false>{_RANGES end(_Range)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const noexcept(_Is_end_nothrow_v<const _Vw>) // strengthened\r\n            requires _Range_with_movable_references<const _Vw>\r\n        {\r\n            if constexpr (forward_range<const _Vw> && common_range<const _Vw> && sized_range<const _Vw>) {\r\n                return _Iterator<true>{_RANGES end(_Range), _RANGES distance(_Range)};\r\n            } else {\r\n                return _Sentinel<true>{_RANGES end(_Range)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() noexcept(noexcept(_RANGES size(_Range))) // strengthened\r\n            requires sized_range<_Vw>\r\n        {\r\n            return _RANGES size(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_RANGES size(_Range))) // strengthened\r\n            requires sized_range<const _Vw>\r\n        {\r\n            return _RANGES size(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) // strengthened\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n    };\r\n\r\n    template <class _Rng>\r\n    enumerate_view(_Rng&&) -> enumerate_view<views::all_t<_Rng>>;\r\n\r\n    template <class _Rng>\r\n    constexpr bool enable_borrowed_range<enumerate_view<_Rng>> = enable_borrowed_range<_Rng>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<enumerate_view<_Rng>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<const enumerate_view<_Rng>> = _Compile_time_max_size<const _Rng>;\r\n\r\n    namespace views {\r\n        struct _Enumerate_fn : public _Pipe::_Base<_Enumerate_fn> {\r\n            template <viewable_range _Rng>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range)\r\n                noexcept(noexcept(enumerate_view<views::all_t<_Rng>>{_STD forward<_Rng>(_Range)}))\r\n                requires requires { enumerate_view<views::all_t<_Rng>>{_STD forward<_Rng>(_Range)}; }\r\n            {\r\n                return enumerate_view<views::all_t<_Rng>>{_STD forward<_Rng>(_Range)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Enumerate_fn enumerate;\r\n    } // namespace views\r\n\r\n    template <class _Int>\r\n    _NODISCARD constexpr _Int _Div_ceil(const _Int _Num, const _Int _Denom) noexcept {\r\n        _STL_INTERNAL_STATIC_ASSERT(_Signed_integer_like<_Int>);\r\n        _STL_INTERNAL_CHECK(_Num >= 0);\r\n        _STL_INTERNAL_CHECK(_Denom > 0);\r\n\r\n        if constexpr (same_as<_Int, _Signed128>) {\r\n            return _Int::_Div_ceil(_Num, _Denom);\r\n        } else {\r\n            _Int _Result = _Num / _Denom;\r\n            if (_Num % _Denom != 0) {\r\n                ++_Result;\r\n            }\r\n            return _Result;\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD template <view _Vw>\r\n        requires input_range<_Vw>\r\n    class chunk_view : public view_interface<chunk_view<_Vw>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range;\r\n        range_difference_t<_Vw> _Count;\r\n        range_difference_t<_Vw> _Remainder = 0;\r\n        _Non_propagating_cache<iterator_t<_Vw>> _Current{};\r\n\r\n        class _Inner_iterator {\r\n        private:\r\n            friend chunk_view;\r\n            chunk_view* _Parent{};\r\n\r\n            constexpr explicit _Inner_iterator(chunk_view* _Parent_) noexcept : _Parent(_Parent_) {}\r\n\r\n            _NODISCARD constexpr range_difference_t<_Vw> _Get_remainder() const noexcept {\r\n                return _Parent->_Remainder;\r\n            }\r\n\r\n            _NODISCARD constexpr range_difference_t<_Vw> _Get_size() const\r\n                noexcept(noexcept(_RANGES end(_Parent->_Range) - *_Parent->_Current)) {\r\n                return (_STD min) (_Parent->_Remainder, _RANGES end(_Parent->_Range) - *_Parent->_Current);\r\n            }\r\n\r\n            _NODISCARD constexpr const iterator_t<_Vw>& _Get_current() const noexcept {\r\n                return *_Parent->_Current;\r\n            }\r\n\r\n        public:\r\n            using iterator_concept = input_iterator_tag;\r\n            using difference_type  = range_difference_t<_Vw>;\r\n            using value_type       = range_value_t<_Vw>;\r\n\r\n            _Inner_iterator(_Inner_iterator&&)            = default;\r\n            _Inner_iterator& operator=(_Inner_iterator&&) = default;\r\n\r\n            _NODISCARD constexpr const iterator_t<_Vw>& base() const& noexcept /* strengthened */ {\r\n                return *_Parent->_Current;\r\n            }\r\n\r\n            _NODISCARD constexpr range_reference_t<_Vw> operator*() const\r\n                noexcept(noexcept(**_Parent->_Current)) /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(*this != default_sentinel, \"cannot dereference chunk_view end iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return **_Parent->_Current;\r\n            }\r\n\r\n            constexpr _Inner_iterator& operator++() noexcept(\r\n                noexcept(++*_Parent->_Current)\r\n                && noexcept(static_cast<bool>(*_Parent->_Current == _RANGES end(_Parent->_Range)))) /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(*this != default_sentinel, \"cannot increment chunk_view end iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                ++*_Parent->_Current;\r\n                if (*_Parent->_Current == _RANGES end(_Parent->_Range)) {\r\n                    _Parent->_Remainder = 0;\r\n                } else {\r\n                    --_Parent->_Remainder;\r\n                }\r\n\r\n                return *this;\r\n            }\r\n\r\n            constexpr void operator++(int) noexcept(\r\n                noexcept(++*_Parent->_Current)\r\n                && noexcept(static_cast<bool>(*_Parent->_Current == _RANGES end(_Parent->_Range)))) /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(*this != default_sentinel, \"cannot increment chunk_view end iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                ++*_Parent->_Current;\r\n                if (*_Parent->_Current == _RANGES end(_Parent->_Range)) {\r\n                    _Parent->_Remainder = 0;\r\n                } else {\r\n                    --_Parent->_Remainder;\r\n                }\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Inner_iterator& _Left, default_sentinel_t) noexcept\r\n            /* strengthened */ {\r\n                return _Left._Get_remainder() == 0;\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(default_sentinel_t, const _Inner_iterator& _Right)\r\n                noexcept(noexcept(_Right._Get_size())) /* strengthened */\r\n                requires sized_sentinel_for<sentinel_t<_Vw>, iterator_t<_Vw>>\r\n            {\r\n                return _Right._Get_size();\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(const _Inner_iterator& _Left, default_sentinel_t)\r\n                noexcept(noexcept(_Left._Get_size())) /* strengthened */\r\n                requires sized_sentinel_for<sentinel_t<_Vw>, iterator_t<_Vw>>\r\n            {\r\n                return -_Left._Get_size();\r\n            }\r\n\r\n            _NODISCARD friend constexpr range_rvalue_reference_t<_Vw> iter_move(const _Inner_iterator& _It)\r\n                noexcept(noexcept(_RANGES iter_move(_It._Get_current()))) {\r\n                return _RANGES iter_move(_It._Get_current());\r\n            }\r\n\r\n            friend constexpr void iter_swap(const _Inner_iterator& _Left, const _Inner_iterator& _Right)\r\n                noexcept(noexcept(_RANGES iter_swap(_Left._Get_current(), _Right._Get_current())))\r\n                requires indirectly_swappable<iterator_t<_Vw>>\r\n            {\r\n                _RANGES iter_swap(_Left._Get_current(), _Right._Get_current());\r\n            }\r\n        };\r\n\r\n        class _Outer_iterator {\r\n        private:\r\n            friend chunk_view;\r\n            chunk_view* _Parent{};\r\n\r\n            constexpr explicit _Outer_iterator(chunk_view* _Parent_) noexcept : _Parent(_Parent_) {}\r\n\r\n            _NODISCARD constexpr bool _Is_end() const\r\n                noexcept(noexcept(*_Parent->_Current == _RANGES end(_Parent->_Range) && true)) {\r\n                return *_Parent->_Current == _RANGES end(_Parent->_Range) && _Parent->_Remainder != 0;\r\n            }\r\n\r\n            _NODISCARD constexpr range_difference_t<_Vw> _Get_size() const\r\n                noexcept(noexcept(_RANGES end(_Parent->_Range) - *_Parent->_Current)) {\r\n                const auto _Size = _RANGES end(_Parent->_Range) - *_Parent->_Current;\r\n                if (_Size < _Parent->_Remainder) {\r\n                    return _Size == 0 ? 0 : 1;\r\n                }\r\n                return _Div_ceil(_Size - _Parent->_Remainder, _Parent->_Count) + 1;\r\n            }\r\n\r\n        public:\r\n            using iterator_concept = input_iterator_tag;\r\n            using difference_type  = range_difference_t<_Vw>;\r\n\r\n            struct value_type : view_interface<value_type> {\r\n            private:\r\n                friend _Outer_iterator;\r\n                chunk_view* _Parent{};\r\n\r\n                constexpr explicit value_type(chunk_view* _Parent_) noexcept : _Parent(_Parent_) {}\r\n\r\n            public:\r\n                _NODISCARD constexpr _Inner_iterator begin() const noexcept {\r\n                    return _Inner_iterator{_Parent};\r\n                }\r\n\r\n                _NODISCARD constexpr default_sentinel_t end() const noexcept {\r\n                    return default_sentinel;\r\n                }\r\n\r\n                _NODISCARD constexpr auto size() const\r\n                    noexcept(noexcept(_RANGES end(_Parent->_Range) - *_Parent->_Current)) /* strengthened */\r\n                    requires sized_sentinel_for<sentinel_t<_Vw>, iterator_t<_Vw>>\r\n                {\r\n                    return _To_unsigned_like(\r\n                        (_STD min) (_Parent->_Remainder, _RANGES end(_Parent->_Range) - *_Parent->_Current));\r\n                }\r\n            };\r\n\r\n            _Outer_iterator(_Outer_iterator&&)            = default;\r\n            _Outer_iterator& operator=(_Outer_iterator&&) = default;\r\n\r\n            _NODISCARD constexpr value_type operator*() const noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(*this != default_sentinel, \"cannot dereference chunk_view end iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return value_type{_Parent};\r\n            }\r\n\r\n            constexpr _Outer_iterator& operator++() /* not strengthened, see _RANGES advance */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(*this != default_sentinel, \"cannot increment chunk_view end iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _RANGES advance(*_Parent->_Current, _Parent->_Remainder, _RANGES end(_Parent->_Range));\r\n                _Parent->_Remainder = _Parent->_Count;\r\n                return *this;\r\n            }\r\n\r\n            constexpr void operator++(int) /* not strengthened, see _RANGES advance */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(*this != default_sentinel, \"cannot increment chunk_view end iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _RANGES advance(*_Parent->_Current, _Parent->_Remainder, _RANGES end(_Parent->_Range));\r\n                _Parent->_Remainder = _Parent->_Count;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Outer_iterator& _Left, default_sentinel_t)\r\n                noexcept(noexcept(_Left._Is_end())) /* strengthened */ {\r\n                return _Left._Is_end();\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(default_sentinel_t, const _Outer_iterator& _Right)\r\n                noexcept(noexcept(_Right._Get_size())) /* strengthened */\r\n                requires sized_sentinel_for<sentinel_t<_Vw>, iterator_t<_Vw>>\r\n            {\r\n                return _Right._Get_size();\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(const _Outer_iterator& _Left, default_sentinel_t)\r\n                noexcept(noexcept(_Left._Get_size())) /* strengthened */\r\n                requires sized_sentinel_for<sentinel_t<_Vw>, iterator_t<_Vw>>\r\n            {\r\n                return -_Left._Get_size();\r\n            }\r\n        };\r\n\r\n    public:\r\n        constexpr explicit chunk_view(_Vw _Range_, const range_difference_t<_Vw> _Count_)\r\n            noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */\r\n            : _Range(_STD move(_Range_)), _Count{_Count_} {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Count > 0, \"chunk size must be greater than 0\");\r\n#endif\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) /* strengthened */\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr _Outer_iterator begin()\r\n            noexcept(noexcept(_Current._Emplace(_RANGES begin(_Range)))) /* strengthened */ {\r\n            _Current._Emplace(_RANGES begin(_Range));\r\n            _Remainder = _Count;\r\n            return _Outer_iterator{this};\r\n        }\r\n\r\n        _NODISCARD constexpr default_sentinel_t end() const noexcept {\r\n            return default_sentinel;\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() noexcept(noexcept(_RANGES distance(_Range))) /* strengthened */\r\n            requires sized_range<_Vw>\r\n        {\r\n            return _To_unsigned_like(_Div_ceil(_RANGES distance(_Range), _Count));\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_RANGES distance(_Range))) /* strengthened */\r\n            requires sized_range<const _Vw>\r\n        {\r\n            return _To_unsigned_like(_Div_ceil(_RANGES distance(_Range), _Count));\r\n        }\r\n    };\r\n\r\n    template <view _Vw>\r\n        requires forward_range<_Vw>\r\n    class chunk_view<_Vw> : public view_interface<chunk_view<_Vw>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range;\r\n        range_difference_t<_Vw> _Count;\r\n\r\n        template <bool _Const>\r\n        class _Iterator {\r\n        private:\r\n            friend chunk_view;\r\n\r\n            using _ParentTy      = _Maybe_const<_Const, chunk_view>;\r\n            using _Base          = _Maybe_const<_Const, _Vw>;\r\n            using _Base_iterator = iterator_t<_Base>;\r\n            using _Base_sentinel = sentinel_t<_Base>;\r\n\r\n            _MSVC_NO_UNIQUE_ADDRESS _Base_iterator _Current{};\r\n            _MSVC_NO_UNIQUE_ADDRESS _Base_sentinel _End{};\r\n            range_difference_t<_Base> _Count   = 0;\r\n            range_difference_t<_Base> _Missing = 0;\r\n\r\n            constexpr _Iterator(_ParentTy* _Parent, _Base_iterator _Current_,\r\n                range_difference_t<_Base> _Missing_ = 0) //\r\n                noexcept(noexcept(_RANGES end(_Parent->_Range)) && is_nothrow_move_constructible_v<_Base_iterator> //\r\n                         && is_nothrow_move_constructible_v<_Base_sentinel>) /* strengthened */\r\n                : _Current(_STD move(_Current_)), _End(_RANGES end(_Parent->_Range)), _Count(_Parent->_Count),\r\n                  _Missing(_Missing_) {}\r\n\r\n        public:\r\n            using iterator_category = input_iterator_tag;\r\n            using iterator_concept  = conditional_t<random_access_range<_Base>, random_access_iterator_tag,\r\n                 conditional_t<bidirectional_range<_Base>, bidirectional_iterator_tag, forward_iterator_tag>>;\r\n            using value_type        = decltype(views::take(subrange(_Current, _End), _Count));\r\n            using difference_type   = range_difference_t<_Base>;\r\n\r\n            _Iterator() = default;\r\n\r\n            constexpr _Iterator(_Iterator<!_Const> _Other)\r\n                noexcept(is_nothrow_constructible_v<_Base_iterator, typename _Iterator<!_Const>::_Base_iterator>\r\n                         && is_nothrow_constructible_v<_Base_sentinel,\r\n                             typename _Iterator<!_Const>::_Base_sentinel>) /* strengthened */\r\n                requires _Const && convertible_to<iterator_t<_Vw>, _Base_iterator>\r\n                          && convertible_to<sentinel_t<_Vw>, _Base_sentinel>\r\n                : _Current(_STD move(_Other._Current)), _End(_STD move(_Other._End)), _Count(_Other._Count),\r\n                  _Missing(_Other._Missing) {}\r\n\r\n            _NODISCARD constexpr _Base_iterator base() const\r\n                noexcept(is_nothrow_copy_constructible_v<_Base_iterator>) /* strengthened */ {\r\n                return _Current;\r\n            }\r\n\r\n            _NODISCARD constexpr value_type operator*() const\r\n                noexcept(noexcept(views::take(subrange(_Current, _End), _Count))) /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Current != _End, \"cannot dereference chunk_view end iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return views::take(subrange(_Current, _End), _Count);\r\n            }\r\n\r\n            constexpr _Iterator& operator++() /* not strengthened, see _RANGES advance */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Current != _End, \"cannot increment chunk_view end iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _Missing = _RANGES advance(_Current, _Count, _End);\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator++(int) /* not strengthened, see _RANGES advance */ {\r\n                auto _Tmp = *this;\r\n                ++*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator--() /* not strengthened, see _RANGES advance */\r\n                requires bidirectional_range<_Base>\r\n            {\r\n                _RANGES advance(_Current, _Missing - _Count);\r\n                _Missing = 0;\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator--(int) /* not strengthened, see _RANGES advance */\r\n                requires bidirectional_range<_Base>\r\n            {\r\n                auto _Tmp = *this;\r\n                --*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator+=(const difference_type _Off) /* not strengthened, see _RANGES advance */\r\n                requires random_access_range<_Base>\r\n            {\r\n                if (_Off > 0) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                    _STL_VERIFY(_Count <= (numeric_limits<difference_type>::max)() / _Off,\r\n                        \"cannot advance chunk_view iterator past end (integer overflow)\");\r\n                    if constexpr (sized_sentinel_for<_Base_sentinel, _Base_iterator>) {\r\n                        _STL_VERIFY(_End - _Current > _Count * (_Off - 1), //\r\n                            \"cannot advance chunk_view iterator past end\");\r\n                    }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n                    if constexpr (sized_sentinel_for<_Base_sentinel, _Base_iterator>) {\r\n                        _Missing = _RANGES advance(_Current, _Count * _Off, _End);\r\n                    } else {\r\n                        _Current += static_cast<difference_type>(_Count * (_Off - 1));\r\n                        _Missing = _RANGES advance(_Current, _Count, _End);\r\n                    }\r\n                } else if (_Off < 0) {\r\n                    _Current += static_cast<difference_type>(_Count * _Off + _Missing);\r\n                    _Missing = 0;\r\n                }\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator& operator-=(const difference_type _Off) /* not strengthened, see _RANGES advance */\r\n                requires random_access_range<_Base>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Off != (numeric_limits<difference_type>::min)(),\r\n                    \"cannot advance chunk_view iterator past end (integer overflow)\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return *this += -_Off;\r\n            }\r\n\r\n            _NODISCARD constexpr value_type operator[](const difference_type _Off) const\r\n                noexcept(noexcept(*(*this + _Off))) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return *(*this + _Off);\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Current == _Right._Current))) /* strengthened */ {\r\n                return _Left._Current == _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, default_sentinel_t)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Current == _Left._End))) /* strengthened */ {\r\n                return _Left._Current == _Left._End;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator<(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Current < _Right._Current))) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Left._Current < _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator>(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_Right._Current < _Left._Current))) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Right._Current < _Left._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator<=(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(!(_Right._Current < _Left._Current)))) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return !(_Right._Current < _Left._Current);\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator>=(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(!(_Left._Current < _Right._Current)))) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return !(_Left._Current < _Right._Current);\r\n            }\r\n\r\n            _NODISCARD friend constexpr auto operator<=>(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current <=> _Right._Current)) /* strengthened */\r\n                requires random_access_range<_Base> && three_way_comparable<_Base_iterator>\r\n            {\r\n                return _Left._Current <=> _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const _Iterator& _It, const difference_type _Off)\r\n                noexcept(is_nothrow_copy_constructible_v<_Iterator>\r\n                         && noexcept(_STD declval<_Iterator&>() += _Off)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                auto _Copy = _It;\r\n                _Copy += _Off;\r\n                return _Copy;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const difference_type _Off, const _Iterator& _It)\r\n                noexcept(is_nothrow_copy_constructible_v<_Iterator>\r\n                         && noexcept(_STD declval<_Iterator&>() += _Off)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                auto _Copy = _It;\r\n                _Copy += _Off;\r\n                return _Copy;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator-(const _Iterator& _It, const difference_type _Off)\r\n                noexcept(is_nothrow_copy_constructible_v<_Iterator>\r\n                         && noexcept(_STD declval<_Iterator&>() -= _Off)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                auto _Copy = _It;\r\n                _Copy -= _Off;\r\n                return _Copy;\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current - _Right._Current)) /* strengthened */\r\n                requires sized_sentinel_for<_Base_iterator, _Base_iterator>\r\n            {\r\n                return (_Left._Current - _Right._Current + _Left._Missing - _Right._Missing) / _Left._Count;\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(default_sentinel_t, const _Iterator& _Right)\r\n                noexcept(noexcept(_Right._End - _Right._Current)) /* strengthened */\r\n                requires sized_sentinel_for<_Base_sentinel, _Base_iterator>\r\n            {\r\n                return _Div_ceil(_Right._End - _Right._Current, _Right._Count);\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(const _Iterator& _Left, default_sentinel_t)\r\n                noexcept(noexcept(_Left._End - _Left._Current)) /* strengthened */\r\n                requires sized_sentinel_for<_Base_sentinel, _Base_iterator>\r\n            {\r\n                return -_Div_ceil(_Left._End - _Left._Current, _Left._Count);\r\n            }\r\n        };\r\n\r\n    public:\r\n        constexpr explicit chunk_view(_Vw _Range_, const range_difference_t<_Vw> _Count_)\r\n            noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */\r\n            : _Range(_STD move(_Range_)), _Count{_Count_} {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Count > 0, \"chunk size must be greater than 0\");\r\n#endif\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) /* strengthened */\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() noexcept(\r\n            noexcept(_RANGES begin(_Range)) && is_nothrow_move_constructible_v<iterator_t<_Vw>>) /* strengthened */\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            return _Iterator<false>{this, _RANGES begin(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const\r\n            noexcept(noexcept(_RANGES begin(_Range))\r\n                     && is_nothrow_move_constructible_v<iterator_t<const _Vw>>) /* strengthened */\r\n            requires forward_range<const _Vw>\r\n        {\r\n            return _Iterator<true>{this, _RANGES begin(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() noexcept(noexcept(_RANGES distance(_Range)) && noexcept(_RANGES end(_Range))\r\n                                                 && is_nothrow_move_constructible_v<iterator_t<_Vw>>) /* strengthened */\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            if constexpr (common_range<_Vw> && sized_range<_Vw>) {\r\n                const auto _Missing = static_cast<range_difference_t<_Vw>>(_Count - _RANGES distance(_Range) % _Count);\r\n                if (_Missing == _Count) {\r\n                    return _Iterator<false>{this, _RANGES end(_Range)};\r\n                }\r\n                return _Iterator<false>{this, _RANGES end(_Range), _Missing};\r\n            } else if constexpr (common_range<_Vw> && !bidirectional_range<_Vw>) {\r\n                return _Iterator<false>{this, _RANGES end(_Range)};\r\n            } else {\r\n                return default_sentinel;\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const\r\n            noexcept(noexcept(_RANGES distance(_Range)) && noexcept(_RANGES end(_Range))\r\n                     && is_nothrow_move_constructible_v<iterator_t<const _Vw>>) /* strengthened */\r\n            requires forward_range<const _Vw>\r\n        {\r\n            if constexpr (common_range<const _Vw> && sized_range<const _Vw>) {\r\n                const auto _Missing = static_cast<range_difference_t<_Vw>>(_Count - _RANGES distance(_Range) % _Count);\r\n                if (_Missing == _Count) {\r\n                    return _Iterator<true>{this, _RANGES end(_Range)};\r\n                }\r\n                return _Iterator<true>{this, _RANGES end(_Range), _Missing};\r\n            } else if constexpr (common_range<const _Vw> && !bidirectional_range<const _Vw>) {\r\n                return _Iterator<true>{this, _RANGES end(_Range)};\r\n            } else {\r\n                return default_sentinel;\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() noexcept(noexcept(_RANGES distance(_Range))) /* strengthened */\r\n            requires sized_range<_Vw>\r\n        {\r\n            return _To_unsigned_like(_Div_ceil(_RANGES distance(_Range), _Count));\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_RANGES distance(_Range))) /* strengthened */\r\n            requires sized_range<const _Vw>\r\n        {\r\n            return _To_unsigned_like(_Div_ceil(_RANGES distance(_Range), _Count));\r\n        }\r\n    };\r\n\r\n    template <class _Rng>\r\n    chunk_view(_Rng&&, range_difference_t<_Rng>) -> chunk_view<views::all_t<_Rng>>;\r\n\r\n    template <class _Vw>\r\n    constexpr bool enable_borrowed_range<chunk_view<_Vw>> = enable_borrowed_range<_Vw> && forward_range<_Vw>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<chunk_view<_Rng>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng>\r\n        requires forward_range<_Rng>\r\n    constexpr auto _Compile_time_max_size<const chunk_view<_Rng>> = _Compile_time_max_size<const _Rng>;\r\n\r\n    namespace views {\r\n        struct _Chunk_fn {\r\n            template <viewable_range _Rng>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range, const range_difference_t<_Rng> _Count)\r\n                noexcept(noexcept(chunk_view(_STD forward<_Rng>(_Range), _Count)))\r\n                requires requires { chunk_view(_STD forward<_Rng>(_Range), _Count); }\r\n            {\r\n                return chunk_view(_STD forward<_Rng>(_Range), _Count);\r\n            }\r\n\r\n            template <class _Ty>\r\n                requires constructible_from<decay_t<_Ty>, _Ty>\r\n            _NODISCARD static constexpr auto operator()(_Ty&& _Count)\r\n                noexcept(is_nothrow_constructible_v<decay_t<_Ty>, _Ty>) {\r\n                return _Range_closure<_Chunk_fn, decay_t<_Ty>>{_STD forward<_Ty>(_Count)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Chunk_fn chunk;\r\n    } // namespace views\r\n\r\n    template <class _Vw>\r\n    concept _Slide_caches_nothing = random_access_range<_Vw> && sized_range<_Vw>;\r\n\r\n    template <class _Vw>\r\n    concept _Slide_caches_last = !_Slide_caches_nothing<_Vw> && bidirectional_range<_Vw> && common_range<_Vw>;\r\n\r\n    template <class _Vw>\r\n    concept _Slide_caches_first = !_Slide_caches_nothing<_Vw> && !_Slide_caches_last<_Vw>;\r\n\r\n    _EXPORT_STD template <forward_range _Vw>\r\n        requires view<_Vw>\r\n    class slide_view : public _Cached_position_t<!_Slide_caches_nothing<_Vw>, _Vw, slide_view<_Vw>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range;\r\n        range_difference_t<_Vw> _Count;\r\n\r\n        template <class>\r\n        class _Iter_base {};\r\n\r\n        template <_Slide_caches_first _Base>\r\n        class _Iter_base<_Base> {\r\n        protected:\r\n            using _Base_iterator = iterator_t<_Base>;\r\n            _Base_iterator _Last_element{};\r\n\r\n        public:\r\n            _Iter_base() = default;\r\n            constexpr explicit _Iter_base(_Base_iterator _Last_element_)\r\n                noexcept(is_nothrow_move_constructible_v<_Base_iterator>)\r\n                : _Last_element{_STD move(_Last_element_)} {}\r\n\r\n            _NODISCARD constexpr const _Base_iterator& _Get_last_element() const noexcept {\r\n                return _Last_element;\r\n            }\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Iterator : public _Iter_base<_Maybe_const<_Const, _Vw>> {\r\n        private:\r\n            friend slide_view;\r\n\r\n            using _Base          = _Maybe_const<_Const, _Vw>;\r\n            using _Base_iterator = iterator_t<_Base>;\r\n\r\n            /* [[no_unique_address]] */ _Base_iterator _Current{};\r\n            range_difference_t<_Base> _Count = 0;\r\n\r\n            constexpr _Iterator(_Base_iterator _Current_, range_difference_t<_Base> _Count_)\r\n                noexcept(is_nothrow_move_constructible_v<_Base_iterator>) /* strengthened */\r\n                requires (!_Slide_caches_first<_Base>)\r\n                : _Current(_STD move(_Current_)), _Count(_Count_) {}\r\n\r\n            constexpr _Iterator(_Base_iterator _Current_, _Base_iterator _Last_, range_difference_t<_Base> _Count_) //\r\n                noexcept(is_nothrow_move_constructible_v<_Base_iterator>) /* strengthened */\r\n                requires _Slide_caches_first<_Base>\r\n                : _Iter_base<_Base>(_STD move(_Last_)), _Current(_STD move(_Current_)), _Count(_Count_) {}\r\n\r\n        public:\r\n            using value_type        = decltype(views::counted(_Current, _Count));\r\n            using difference_type   = range_difference_t<_Base>;\r\n            using iterator_category = input_iterator_tag;\r\n            using iterator_concept  = conditional_t<random_access_range<_Base>, random_access_iterator_tag,\r\n                 conditional_t<bidirectional_range<_Base>, bidirectional_iterator_tag, forward_iterator_tag>>;\r\n\r\n            _Iterator() = default;\r\n\r\n            constexpr _Iterator(_Iterator<!_Const> _Other)\r\n                noexcept(is_nothrow_constructible_v<_Base_iterator, iterator_t<_Vw>>) // strengthened\r\n                requires _Const && convertible_to<iterator_t<_Vw>, _Base_iterator>\r\n                : _Current(_STD move(_Other._Current)), _Count(_Other._Count) {}\r\n\r\n            _NODISCARD constexpr value_type operator*() const\r\n                noexcept(noexcept(views::counted(_Current, _Count))) /* strengthened */ {\r\n                return views::counted(_Current, _Count);\r\n            }\r\n\r\n            constexpr _Iterator& operator++() noexcept(noexcept(++_Current)) /* strengthened */ {\r\n                ++_Current;\r\n\r\n                if constexpr (_Slide_caches_first<_Base>) {\r\n                    ++this->_Last_element;\r\n                }\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator++(int) noexcept(is_nothrow_copy_constructible_v<_Base_iterator> //\r\n                                                         && noexcept(++_Current)) /* strengthened */ {\r\n                auto _Tmp = *this;\r\n                ++*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator--() noexcept(noexcept(--_Current)) /* strengthened */\r\n                requires bidirectional_range<_Base>\r\n            {\r\n                --_Current;\r\n\r\n                if constexpr (_Slide_caches_first<_Base>) {\r\n                    --this->_Last_element;\r\n                }\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator--(int) noexcept(is_nothrow_copy_constructible_v<_Base_iterator> //\r\n                                                         && noexcept(--_Current)) /* strengthened */\r\n                requires bidirectional_range<_Base>\r\n            {\r\n                auto _Tmp = *this;\r\n                --*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator+=(const difference_type _Off)\r\n                noexcept(noexcept(_Current += _Off)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                _Current += _Off;\r\n\r\n                if constexpr (_Slide_caches_first<_Base>) {\r\n                    this->_Last_element += _Off;\r\n                }\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator& operator-=(const difference_type _Off)\r\n                noexcept(noexcept(_Current -= _Off)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                _Current -= _Off;\r\n\r\n                if constexpr (_Slide_caches_first<_Base>) {\r\n                    this->_Last_element -= _Off;\r\n                }\r\n                return *this;\r\n            }\r\n\r\n            _NODISCARD constexpr value_type operator[](const difference_type _Off) const\r\n                noexcept(noexcept(views::counted(_Current + _Off, _Count))) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return views::counted(_Current + _Off, _Count);\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Current == _Right._Current))) /* strengthened */ {\r\n                if constexpr (_Slide_caches_first<_Base>) {\r\n                    return _Left._Last_element == _Right._Last_element;\r\n                } else {\r\n                    return _Left._Current == _Right._Current;\r\n                }\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator<(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Current < _Right._Current))) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Left._Current < _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator>(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_Right._Current < _Left._Current))) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Right._Current < _Left._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator<=(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(!(_Right._Current < _Left._Current)))) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return !(_Right._Current < _Left._Current);\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator>=(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(!(_Left._Current < _Right._Current)))) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return !(_Left._Current < _Right._Current);\r\n            }\r\n\r\n            _NODISCARD friend constexpr auto operator<=>(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current <=> _Right._Current)) /* strengthened */\r\n                requires random_access_range<_Base> && three_way_comparable<_Base_iterator>\r\n            {\r\n                return _Left._Current <=> _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const _Iterator& _It, const difference_type _Off)\r\n                noexcept(noexcept(_STD declval<_Iterator&>() += _Off)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                auto _Copy = _It;\r\n                _Copy += _Off;\r\n                return _Copy;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const difference_type _Off, const _Iterator& _It)\r\n                noexcept(noexcept(_STD declval<_Iterator&>() += _Off)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                auto _Copy = _It;\r\n                _Copy += _Off;\r\n                return _Copy;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator-(const _Iterator& _It, const difference_type _Off)\r\n                noexcept(noexcept(_STD declval<_Iterator&>() -= _Off)) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                auto _Copy = _It;\r\n                _Copy -= _Off;\r\n                return _Copy;\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current - _Right._Current)) /* strengthened */\r\n                requires sized_sentinel_for<_Base_iterator, _Base_iterator>\r\n            {\r\n                if constexpr (_Slide_caches_first<_Base>) {\r\n                    return _Left._Last_element - _Right._Last_element;\r\n                } else {\r\n                    return _Left._Current - _Right._Current;\r\n                }\r\n            }\r\n        };\r\n\r\n        class _Sentinel {\r\n        private:\r\n            friend slide_view;\r\n            _MSVC_NO_UNIQUE_ADDRESS sentinel_t<_Vw> _Last{};\r\n\r\n            constexpr explicit _Sentinel(sentinel_t<_Vw> _Last_)\r\n                noexcept(is_nothrow_move_constructible_v<sentinel_t<_Vw>>) /* strengthened */\r\n                : _Last(_STD move(_Last_)) {}\r\n\r\n        public:\r\n            _Sentinel() = default;\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator<false>& _Left, const _Sentinel& _Right)\r\n                noexcept(noexcept(\r\n                    _STD _Fake_copy_init<bool>(_Left._Get_last_element() == _Right._Last))) /* strengthened */ {\r\n                return _Left._Get_last_element() == _Right._Last;\r\n            }\r\n\r\n            _NODISCARD friend constexpr range_difference_t<_Vw> operator-(const _Iterator<false>& _Left,\r\n                const _Sentinel& _Right) noexcept(noexcept(_Left._Get_last_element() - _Right._Last)) /* strengthened */\r\n                requires sized_sentinel_for<sentinel_t<_Vw>, iterator_t<_Vw>>\r\n            {\r\n                return _Left._Get_last_element() - _Right._Last;\r\n            }\r\n\r\n            _NODISCARD friend constexpr range_difference_t<_Vw> operator-(\r\n                const _Sentinel& _Left, const _Iterator<false>& _Right)\r\n                noexcept(noexcept(_Left._Last - _Right._Get_last_element())) /* strengthened */\r\n                requires sized_sentinel_for<sentinel_t<_Vw>, iterator_t<_Vw>>\r\n            {\r\n                return _Left._Last - _Right._Get_last_element();\r\n            }\r\n        };\r\n\r\n    public:\r\n        constexpr explicit slide_view(_Vw _Range_, const range_difference_t<_Vw> _Count_)\r\n            noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */\r\n            : _Range(_STD move(_Range_)), _Count{_Count_} {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Count > 0, \"The window size must be positive (N4950 [range.slide.view]/1)\");\r\n#endif\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) // strengthened\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin()\r\n            requires (!(_Simple_view<_Vw> && _Slide_caches_nothing<const _Vw>) )\r\n        {\r\n            if constexpr (_Slide_caches_first<_Vw>) {\r\n                auto _First = _RANGES begin(_Range);\r\n                if (this->_Has_cache()) {\r\n                    return _Iterator<false>{_STD move(_First), this->_Get_cache(_Range), _Count};\r\n                }\r\n\r\n                auto _Current_last = _RANGES next(_First, _Count - 1, _RANGES end(_Range));\r\n                this->_Set_cache(_Range, _Current_last);\r\n                return _Iterator<false>{_STD move(_First), _STD move(_Current_last), _Count};\r\n            } else {\r\n                return _Iterator<false>{_RANGES begin(_Range), _Count};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const noexcept(\r\n            noexcept(_RANGES begin(_Range)) && is_nothrow_move_constructible_v<iterator_t<_Vw>>) /* strengthened */\r\n            requires _Slide_caches_nothing<const _Vw>\r\n        {\r\n            return _Iterator<true>{_RANGES begin(_Range), _Count};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end()\r\n            requires (!(_Simple_view<_Vw> && _Slide_caches_nothing<const _Vw>) )\r\n        {\r\n            if constexpr (_Slide_caches_nothing<_Vw>) {\r\n                const auto _Size = _RANGES distance(_Range) - (_Count - 1);\r\n                if (_Size < 0) {\r\n                    return _Iterator<false>{_RANGES begin(_Range), _Count};\r\n                }\r\n\r\n                return _Iterator<false>{_RANGES begin(_Range) + _Size, _Count};\r\n            } else if constexpr (_Slide_caches_last<_Vw>) {\r\n                if (this->_Has_cache()) {\r\n                    return _Iterator<false>{this->_Get_cache(_Range), _Count};\r\n                }\r\n\r\n                auto _Current_last = _RANGES prev(_RANGES end(_Range), _Count - 1, _RANGES begin(_Range));\r\n                this->_Set_cache(_Range, _Current_last);\r\n                return _Iterator<false>{_STD move(_Current_last), _Count};\r\n            } else if constexpr (common_range<_Vw>) {\r\n                const auto _Last = _RANGES end(_Range);\r\n                return _Iterator<false>{_Last, _Last, _Count};\r\n            } else {\r\n                return _Sentinel{_RANGES end(_Range)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const\r\n            noexcept(is_nothrow_move_constructible_v<iterator_t<_Vw>> && noexcept(_RANGES distance(_Range))\r\n                     && noexcept(_RANGES begin(_Range) + _Count)) /* strengthened */\r\n            requires _Slide_caches_nothing<const _Vw>\r\n        {\r\n            const auto _Size = _RANGES distance(_Range) - (_Count - 1);\r\n            if (_Size < 0) {\r\n                return _Iterator<true>{_RANGES begin(_Range), _Count};\r\n            }\r\n\r\n            return _Iterator<true>{_RANGES begin(_Range) + _Size, _Count};\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() noexcept(noexcept(_RANGES distance(_Range))) /* strengthened */\r\n            requires sized_range<_Vw>\r\n        {\r\n            auto _Size = _RANGES distance(_Range) - (_Count - 1);\r\n            if (_Size < 0) {\r\n                _Size = 0;\r\n            }\r\n\r\n            return _To_unsigned_like(_Size);\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_RANGES distance(_Range))) /* strengthened */\r\n            requires sized_range<const _Vw>\r\n        {\r\n            auto _Size = _RANGES distance(_Range) - (_Count - 1);\r\n            if (_Size < 0) {\r\n                _Size = 0;\r\n            }\r\n            return _To_unsigned_like(_Size);\r\n        }\r\n    };\r\n\r\n    template <class _Rng>\r\n    slide_view(_Rng&&, range_difference_t<_Rng>) -> slide_view<views::all_t<_Rng>>;\r\n\r\n    template <class _Vw>\r\n    constexpr bool enable_borrowed_range<slide_view<_Vw>> = enable_borrowed_range<_Vw>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<slide_view<_Rng>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<const slide_view<_Rng>> = _Compile_time_max_size<const _Rng>;\r\n\r\n    namespace views {\r\n        struct _Slide_fn {\r\n            template <viewable_range _Rng>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range, const range_difference_t<_Rng> _Count)\r\n                noexcept(noexcept(slide_view(_STD forward<_Rng>(_Range), _Count)))\r\n                requires requires { slide_view(_STD forward<_Rng>(_Range), _Count); }\r\n            {\r\n                return slide_view(_STD forward<_Rng>(_Range), _Count);\r\n            }\r\n\r\n            template <class _Ty>\r\n                requires constructible_from<decay_t<_Ty>, _Ty>\r\n            _NODISCARD static constexpr auto operator()(_Ty&& _Count)\r\n                noexcept(is_nothrow_constructible_v<decay_t<_Ty>, _Ty>) {\r\n                return _Range_closure<_Slide_fn, decay_t<_Ty>>{_STD forward<_Ty>(_Count)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Slide_fn slide;\r\n    } // namespace views\r\n\r\n    template <class _Pr>\r\n    struct _Negated_pred {\r\n        template <class _Ty1, class _Ty2>\r\n        _NODISCARD constexpr bool operator()(_Ty1&& _Left, _Ty2&& _Right) {\r\n            return !_STD invoke(_Pred, _STD forward<_Ty1>(_Left), _STD forward<_Ty2>(_Right));\r\n        }\r\n\r\n        _Pr& _Pred;\r\n    };\r\n\r\n    template <class _Pr>\r\n    struct _Backward_negated_pred {\r\n        template <class _Ty1, class _Ty2>\r\n        _NODISCARD constexpr bool operator()(_Ty1&& _Left, _Ty2&& _Right) {\r\n            return !_STD invoke(_Pred, _STD forward<_Ty2>(_Right), _STD forward<_Ty1>(_Left));\r\n        }\r\n\r\n        _Pr& _Pred;\r\n    };\r\n\r\n    _EXPORT_STD template <forward_range _Vw, indirect_binary_predicate<iterator_t<_Vw>, iterator_t<_Vw>> _Pr>\r\n        requires view<_Vw> && is_object_v<_Pr>\r\n    class chunk_by_view : public _Cached_position<_Vw, chunk_by_view<_Vw, _Pr>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n        /* [[no_unique_address]] */ _Movable_box<_Pr> _Pred{};\r\n\r\n        class _Iterator {\r\n        private:\r\n            friend chunk_by_view;\r\n\r\n            chunk_by_view* _Parent{};\r\n            /* [[no_unique_address]] */ iterator_t<_Vw> _Current{};\r\n            /* [[no_unique_address]] */ iterator_t<_Vw> _Next{};\r\n\r\n            constexpr _Iterator(chunk_by_view& _Parent_, iterator_t<_Vw> _Current_, iterator_t<_Vw> _Next_)\r\n                noexcept(is_nothrow_move_constructible_v<iterator_t<_Vw>>) // strengthened\r\n                : _Parent(_STD addressof(_Parent_)), _Current(_STD move(_Current_)), _Next(_STD move(_Next_)) {}\r\n\r\n        public:\r\n            using value_type        = subrange<iterator_t<_Vw>>;\r\n            using difference_type   = range_difference_t<_Vw>;\r\n            using iterator_category = input_iterator_tag;\r\n            using iterator_concept =\r\n                conditional_t<bidirectional_range<_Vw>, bidirectional_iterator_tag, forward_iterator_tag>;\r\n\r\n            _Iterator() = default;\r\n\r\n            _NODISCARD constexpr value_type operator*() const\r\n                noexcept(is_nothrow_copy_constructible_v<iterator_t<_Vw>>) /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Current != _Next, \"cannot dereference chunk_by_view end iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return subrange{_Current, _Next};\r\n            }\r\n\r\n            constexpr _Iterator& operator++() {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Current != _Next, \"cannot increment chunk_by_view iterator past end\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _Current = _Next;\r\n                _Next    = _Parent->_Find_next(_Next);\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator++(int) {\r\n                auto _Tmp = *this;\r\n                ++*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator--()\r\n                requires bidirectional_range<_Vw>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Parent != nullptr, \"cannot decrement value-initialized chunk_by_view iterator\");\r\n                _STL_VERIFY(\r\n                    _Current != _RANGES begin(_Parent->_Range), \"cannot decrement chunk_by_view iterator before begin\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _Next    = _Current;\r\n                _Current = _Parent->_Find_prev(_Current);\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator--(int)\r\n                requires bidirectional_range<_Vw>\r\n            {\r\n                auto _Tmp = *this;\r\n                --*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Current == _Right._Current))) /* strengthened */ {\r\n                return _Left._Current == _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, default_sentinel_t)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Current == _Left._Next))) /* strengthened */ {\r\n                return _Left._Current == _Left._Next;\r\n            }\r\n        };\r\n\r\n        _NODISCARD constexpr iterator_t<_Vw> _Find_next(iterator_t<_Vw> _It) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Pred, \"cannot increment a chunk_by_view iterator whose parent view has no predicate\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n            const auto _Before_next = _RANGES adjacent_find(_It, _RANGES end(_Range), _Negated_pred<_Pr>{*_Pred});\r\n            return _RANGES next(_Before_next, 1, _RANGES end(_Range));\r\n        }\r\n\r\n        _NODISCARD constexpr iterator_t<_Vw> _Find_prev(iterator_t<_Vw> _It) {\r\n            _STL_INTERNAL_STATIC_ASSERT(bidirectional_range<_Vw>);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Pred, \"cannot decrement a chunk_by_view iterator whose parent view has no predicate\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n            reverse_view _Rv{subrange{_RANGES begin(_Range), _It}};\r\n            const auto _After_prev = _RANGES adjacent_find(_Rv, _Backward_negated_pred<_Pr>{*_Pred});\r\n            return _RANGES prev(_After_prev.base(), 1, _RANGES begin(_Range));\r\n        }\r\n\r\n    public:\r\n        chunk_by_view()\r\n            requires default_initializable<_Vw> && default_initializable<_Pr>\r\n        = default;\r\n\r\n        constexpr explicit chunk_by_view(_Vw _Range_, _Pr _Pred_)\r\n            noexcept(is_nothrow_move_constructible_v<_Vw> && is_nothrow_move_constructible_v<_Pr>) // strengthened\r\n            : _Range(_STD move(_Range_)), _Pred{in_place, _STD move(_Pred_)} {}\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) /* strengthened */\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr const _Pr& pred() const noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Pred, \"chunk_by_view has no predicate\");\r\n#endif\r\n            return *_Pred;\r\n        }\r\n\r\n        _NODISCARD constexpr _Iterator begin() {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Pred, \"cannot call begin on a chunk_by_view with no predicate\");\r\n#endif\r\n\r\n            const auto _First = _RANGES begin(_Range);\r\n            if (this->_Has_cache()) {\r\n                return _Iterator{*this, _First, this->_Get_cache(_Range)};\r\n            }\r\n\r\n            const auto _Result = _Find_next(_First);\r\n            this->_Set_cache(_Range, _Result);\r\n            return _Iterator{*this, _First, _Result};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() {\r\n            if constexpr (common_range<_Vw>) {\r\n                const auto _Last = _RANGES end(_Range);\r\n                return _Iterator{*this, _Last, _Last};\r\n            } else {\r\n                return default_sentinel;\r\n            }\r\n        }\r\n    };\r\n\r\n    template <class _Rng, class _Pr>\r\n    chunk_by_view(_Rng&&, _Pr) -> chunk_by_view<views::all_t<_Rng>, _Pr>;\r\n\r\n    template <class _Rng, class _Pr>\r\n    constexpr auto _Compile_time_max_size<chunk_by_view<_Rng, _Pr>> = _Compile_time_max_size<_Rng>;\r\n\r\n    namespace views {\r\n        struct _Chunk_by_fn {\r\n            template <viewable_range _Rng, class _Pr>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Pr&& _Pred)\r\n                noexcept(noexcept(chunk_by_view(_STD forward<_Rng>(_Range), _STD forward<_Pr>(_Pred))))\r\n                requires requires { chunk_by_view(_STD forward<_Rng>(_Range), _STD forward<_Pr>(_Pred)); }\r\n            {\r\n                return chunk_by_view(_STD forward<_Rng>(_Range), _STD forward<_Pr>(_Pred));\r\n            }\r\n\r\n            template <class _Pr>\r\n                requires constructible_from<decay_t<_Pr>, _Pr>\r\n            _NODISCARD static constexpr auto operator()(_Pr&& _Pred)\r\n                noexcept(is_nothrow_constructible_v<decay_t<_Pr>, _Pr>) {\r\n                return _Range_closure<_Chunk_by_fn, decay_t<_Pr>>{_STD forward<_Pr>(_Pred)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Chunk_by_fn chunk_by;\r\n    } // namespace views\r\n\r\n    _EXPORT_STD template <input_range _Vw>\r\n        requires view<_Vw>\r\n    class stride_view : public view_interface<stride_view<_Vw>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range;\r\n        range_difference_t<_Vw> _Stride;\r\n\r\n        template <class _BaseTy>\r\n        class _Category_base {};\r\n\r\n        template <forward_range _BaseTy>\r\n        class _Category_base<_BaseTy> {\r\n        private:\r\n            using _BaseCategory = iterator_traits<iterator_t<_BaseTy>>::iterator_category;\r\n\r\n        public:\r\n            using iterator_category = conditional_t<derived_from<_BaseCategory, random_access_iterator_tag>,\r\n                random_access_iterator_tag, _BaseCategory>;\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Iterator : public _Category_base<_Maybe_const<_Const, _Vw>> {\r\n        private:\r\n            friend stride_view;\r\n\r\n            using _ParentTy      = _Maybe_const<_Const, stride_view>;\r\n            using _Base          = _Maybe_const<_Const, _Vw>;\r\n            using _Base_iterator = iterator_t<_Base>;\r\n            using _Base_sentinel = sentinel_t<_Base>;\r\n\r\n            /* [[no_unique_address]] */ _Base_iterator _Current{};\r\n            /* [[no_unique_address]] */ _Base_sentinel _End{};\r\n            range_difference_t<_Base> _Stride  = 0;\r\n            range_difference_t<_Base> _Missing = 0;\r\n\r\n            constexpr _Iterator(_ParentTy* _Parent, _Base_iterator _Current_,\r\n                range_difference_t<_Base> _Missing_ = 0) //\r\n                noexcept(noexcept(_RANGES end(_Parent->_Range)) && is_nothrow_move_constructible_v<_Base_iterator> //\r\n                         && is_nothrow_move_constructible_v<_Base_sentinel>) // strengthened\r\n                : _Current(_STD move(_Current_)), _End(_RANGES end(_Parent->_Range)), _Stride(_Parent->_Stride),\r\n                  _Missing(_Missing_) {}\r\n\r\n        public:\r\n            using difference_type  = range_difference_t<_Base>;\r\n            using value_type       = range_value_t<_Base>;\r\n            using iterator_concept = conditional_t<random_access_range<_Base>, random_access_iterator_tag,\r\n                conditional_t<bidirectional_range<_Base>, bidirectional_iterator_tag,\r\n                    conditional_t<forward_range<_Base>, forward_iterator_tag, input_iterator_tag>>>;\r\n\r\n            _Iterator()\r\n                requires default_initializable<_Base_iterator>\r\n            = default;\r\n\r\n            constexpr _Iterator(_Iterator<!_Const> _Other)\r\n                noexcept(is_nothrow_constructible_v<_Base_iterator, iterator_t<_Vw>>\r\n                         && is_nothrow_constructible_v<_Base_sentinel, sentinel_t<_Vw>>) /* strengthened */\r\n                requires _Const && convertible_to<iterator_t<_Vw>, _Base_iterator>\r\n                          && convertible_to<sentinel_t<_Vw>, _Base_sentinel>\r\n                : _Current(_STD move(_Other._Current)), _End(_STD move(_Other._End)), _Stride(_Other._Stride),\r\n                  _Missing(_Other._Missing) {}\r\n\r\n            _NODISCARD constexpr _Base_iterator base() && noexcept(\r\n                is_nothrow_move_constructible_v<_Base_iterator>) /* strengthened */ {\r\n                return _STD move(_Current);\r\n            }\r\n\r\n            _NODISCARD constexpr const _Base_iterator& base() const& noexcept {\r\n                return _Current;\r\n            }\r\n\r\n            _NODISCARD constexpr decltype(auto) operator*() const noexcept(noexcept(*_Current)) /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Current != _End, \"cannot dereference stride_view end iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return *_Current;\r\n            }\r\n\r\n            constexpr _Iterator& operator++() {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Current != _End, \"cannot increment stride_view end iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                _Missing = _RANGES advance(_Current, _Stride, _End);\r\n                return *this;\r\n            }\r\n\r\n            constexpr void operator++(int) {\r\n                ++*this;\r\n            }\r\n\r\n            constexpr _Iterator operator++(int)\r\n                requires forward_range<_Base>\r\n            {\r\n                auto _Tmp = *this;\r\n                ++*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator--()\r\n                requires bidirectional_range<_Base>\r\n            {\r\n                _RANGES advance(_Current, _Missing - _Stride);\r\n                _Missing = 0;\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator--(int)\r\n                requires bidirectional_range<_Base>\r\n            {\r\n                auto _Tmp = *this;\r\n                --*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator+=(const difference_type _Off)\r\n                requires random_access_range<_Base>\r\n            {\r\n                if (_Off > 0) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                    _STL_VERIFY(_Stride <= (numeric_limits<difference_type>::max)() / _Off,\r\n                        \"cannot advance stride_view iterator past end (integer overflow)\");\r\n                    if constexpr (sized_sentinel_for<_Base_sentinel, _Base_iterator>) {\r\n                        _STL_VERIFY(_End - _Current > _Stride * (_Off - 1), //\r\n                            \"cannot advance stride_view iterator past end\");\r\n                    }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n                    if constexpr (sized_sentinel_for<_Base_sentinel, _Base_iterator>) {\r\n                        _Missing = _RANGES advance(_Current, _Stride * _Off, _End);\r\n                    } else {\r\n                        _Current += static_cast<difference_type>(_Stride * (_Off - 1));\r\n                        _Missing = _RANGES advance(_Current, _Stride, _End);\r\n                    }\r\n                } else if (_Off < 0) {\r\n                    _Current += static_cast<difference_type>(_Stride * _Off + _Missing);\r\n                    _Missing = 0;\r\n                }\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator& operator-=(const difference_type _Off)\r\n                requires random_access_range<_Base>\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_VERIFY(_Off != (numeric_limits<difference_type>::min)(),\r\n                    \"cannot advance stride_view iterator past end (integer overflow)\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                return *this += -_Off;\r\n            }\r\n\r\n            _NODISCARD constexpr decltype(auto) operator[](const difference_type _Off) const\r\n                noexcept(noexcept(*(*this + _Off))) /* strengthened */\r\n                requires random_access_range<_Base>\r\n            {\r\n                return *(*this + _Off);\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _It, default_sentinel_t)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_It._Current == _It._End))) /* strengthened */ {\r\n                return _It._Current == _It._End;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Current == _Right._Current))) // strengthened\r\n                requires equality_comparable<_Base_iterator>\r\n            {\r\n                return _Left._Current == _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator<(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Current < _Right._Current))) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Left._Current < _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator>(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_Right._Current < _Left._Current))) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Right._Current < _Left._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator<=(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(!(_Right._Current < _Left._Current)))) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                return !(_Right._Current < _Left._Current);\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator>=(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(!(_Left._Current < _Right._Current)))) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                return !(_Left._Current < _Right._Current);\r\n            }\r\n\r\n            _NODISCARD friend constexpr auto operator<=>(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current <=> _Right._Current)) // strengthened\r\n                requires random_access_range<_Base> && three_way_comparable<_Base_iterator>\r\n            {\r\n                return _Left._Current <=> _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const _Iterator& _It, const difference_type _Off)\r\n                requires random_access_range<_Base>\r\n            {\r\n                auto _Copy = _It;\r\n                _Copy += _Off;\r\n                return _Copy;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const difference_type _Off, const _Iterator& _It)\r\n                requires random_access_range<_Base>\r\n            {\r\n                auto _Copy = _It;\r\n                _Copy += _Off;\r\n                return _Copy;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator-(const _Iterator& _It, const difference_type _Off)\r\n                requires random_access_range<_Base>\r\n            {\r\n                auto _Copy = _It;\r\n                _Copy -= _Off;\r\n                return _Copy;\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(const _Iterator& _Left, const _Iterator& _Right) //\r\n                noexcept(noexcept(_Left._Current - _Right._Current)) // strengthened\r\n                requires sized_sentinel_for<_Base_iterator, _Base_iterator>\r\n            {\r\n                const auto _Diff = _Left._Current - _Right._Current;\r\n                if constexpr (forward_range<_Base>) {\r\n                    return (_Diff + _Left._Missing - _Right._Missing) / _Left._Stride;\r\n                } else {\r\n                    if (_Diff < 0) {\r\n                        return -_Div_ceil(-_Diff, _Left._Stride);\r\n                    } else {\r\n                        return _Div_ceil(_Diff, _Left._Stride);\r\n                    }\r\n                }\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(default_sentinel_t, const _Iterator& _It)\r\n                noexcept(noexcept(_It._End - _It._Current)) // strengthened\r\n                requires sized_sentinel_for<_Base_sentinel, _Base_iterator>\r\n            {\r\n                return _Div_ceil(_It._End - _It._Current, _It._Stride);\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(const _Iterator& _It, default_sentinel_t)\r\n                noexcept(noexcept(_It._End - _It._Current)) // strengthened\r\n                requires sized_sentinel_for<_Base_sentinel, _Base_iterator>\r\n            {\r\n                return -_Div_ceil(_It._End - _It._Current, _It._Stride);\r\n            }\r\n\r\n            _NODISCARD friend constexpr range_rvalue_reference_t<_Base> iter_move(const _Iterator& _It)\r\n                noexcept(noexcept(_RANGES iter_move(_It._Current))) {\r\n                return _RANGES iter_move(_It._Current);\r\n            }\r\n\r\n            friend constexpr void iter_swap(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_RANGES iter_swap(_Left._Current, _Right._Current)))\r\n                requires indirectly_swappable<_Base_iterator>\r\n            {\r\n                return _RANGES iter_swap(_Left._Current, _Right._Current);\r\n            }\r\n        };\r\n\r\n    public:\r\n        constexpr explicit stride_view(_Vw _Range_, const range_difference_t<_Vw> _Stride_)\r\n            noexcept(is_nothrow_move_constructible_v<_Vw>) // strengthened\r\n            : _Range(_STD move(_Range_)), _Stride(_Stride_) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Stride > 0, \"stride must be greater than 0\");\r\n#endif\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) // strengthened\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr range_difference_t<_Vw> stride() const noexcept {\r\n            return _Stride;\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() noexcept(\r\n            noexcept(_RANGES begin(_Range)) && is_nothrow_move_constructible_v<iterator_t<_Vw>>) // strengthened\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            return _Iterator<false>{this, _RANGES begin(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const noexcept(\r\n            noexcept(_RANGES begin(_Range)) && is_nothrow_move_constructible_v<iterator_t<const _Vw>>) // strengthened\r\n            requires range<const _Vw>\r\n        {\r\n            return _Iterator<true>{this, _RANGES begin(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() noexcept(noexcept(_RANGES distance(_Range)) && noexcept(_RANGES end(_Range))\r\n                                                 && is_nothrow_move_constructible_v<iterator_t<_Vw>>) // strengthened\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            if constexpr (common_range<_Vw> && sized_range<_Vw> && forward_range<_Vw>) {\r\n                const auto _Missing =\r\n                    static_cast<range_difference_t<_Vw>>(_Stride - _RANGES distance(_Range) % _Stride);\r\n                if (_Missing == _Stride) {\r\n                    return _Iterator<false>{this, _RANGES end(_Range)};\r\n                } else {\r\n                    return _Iterator<false>{this, _RANGES end(_Range), _Missing};\r\n                }\r\n            } else if constexpr (common_range<_Vw> && !bidirectional_range<_Vw>) {\r\n                return _Iterator<false>{this, _RANGES end(_Range)};\r\n            } else {\r\n                return default_sentinel;\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const\r\n            noexcept(noexcept(_RANGES distance(_Range)) && noexcept(_RANGES end(_Range))\r\n                     && is_nothrow_move_constructible_v<iterator_t<const _Vw>>) // strengthened\r\n            requires range<const _Vw>\r\n        {\r\n            if constexpr (common_range<const _Vw> && sized_range<const _Vw> && forward_range<const _Vw>) {\r\n                const auto _Missing =\r\n                    static_cast<range_difference_t<_Vw>>(_Stride - _RANGES distance(_Range) % _Stride);\r\n                if (_Missing == _Stride) {\r\n                    return _Iterator<true>{this, _RANGES end(_Range)};\r\n                } else {\r\n                    return _Iterator<true>{this, _RANGES end(_Range), _Missing};\r\n                }\r\n            } else if constexpr (common_range<const _Vw> && !bidirectional_range<const _Vw>) {\r\n                return _Iterator<true>{this, _RANGES end(_Range)};\r\n            } else {\r\n                return default_sentinel;\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() noexcept(noexcept(_RANGES distance(_Range))) // strengthened\r\n            requires sized_range<_Vw>\r\n        {\r\n            return _To_unsigned_like(_Div_ceil(_RANGES distance(_Range), _Stride));\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_RANGES distance(_Range))) // strengthened\r\n            requires sized_range<const _Vw>\r\n        {\r\n            return _To_unsigned_like(_Div_ceil(_RANGES distance(_Range), _Stride));\r\n        }\r\n    };\r\n\r\n    template <class _Rng>\r\n    stride_view(_Rng&&, range_difference_t<_Rng>) -> stride_view<views::all_t<_Rng>>;\r\n\r\n    template <class _Vw>\r\n    constexpr bool enable_borrowed_range<stride_view<_Vw>> = enable_borrowed_range<_Vw>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<stride_view<_Rng>> = _Compile_time_max_size<_Rng>;\r\n\r\n    template <class _Rng>\r\n    constexpr auto _Compile_time_max_size<const stride_view<_Rng>> = _Compile_time_max_size<const _Rng>;\r\n\r\n    namespace views {\r\n        struct _Stride_fn {\r\n            template <viewable_range _Rng>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range, const range_difference_t<_Rng> _Stride)\r\n                noexcept(noexcept(stride_view(_STD forward<_Rng>(_Range), _Stride)))\r\n                requires requires { stride_view(_STD forward<_Rng>(_Range), _Stride); }\r\n            {\r\n                return stride_view(_STD forward<_Rng>(_Range), _Stride);\r\n            }\r\n\r\n            template <class _Ty>\r\n                requires constructible_from<decay_t<_Ty>, _Ty>\r\n            _NODISCARD static constexpr auto operator()(_Ty&& _Stride)\r\n                noexcept(is_nothrow_constructible_v<decay_t<_Ty>, _Ty>) {\r\n                return _Range_closure<_Stride_fn, decay_t<_Ty>>{_STD forward<_Ty>(_Stride)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Stride_fn stride;\r\n    } // namespace views\r\n\r\n    template <class... _RangeTypes>\r\n    concept _Zip_is_common = (sizeof...(_RangeTypes) == 1 && (common_range<_RangeTypes> && ...))\r\n                          || (!(bidirectional_range<_RangeTypes> && ...) && (common_range<_RangeTypes> && ...))\r\n                          || ((random_access_range<_RangeTypes> && ...) && (sized_range<_RangeTypes> && ...));\r\n\r\n    template <class _CallbackType>\r\n    constexpr auto _Tuple_transform_closure(_CallbackType& _Callback) noexcept {\r\n        return [&_Callback]<class... _ViewTupleTypes>(_ViewTupleTypes&&... _View_tuples) noexcept(\r\n                   noexcept(tuple<invoke_result_t<_CallbackType&, _ViewTupleTypes>...>{\r\n                       _STD invoke(_Callback, _STD forward<_ViewTupleTypes>(_View_tuples))...})) {\r\n            return tuple<invoke_result_t<_CallbackType&, _ViewTupleTypes>...>{\r\n                _STD invoke(_Callback, _STD forward<_ViewTupleTypes>(_View_tuples))...};\r\n        };\r\n    }\r\n\r\n    template <class _CallbackType, class _TupleType>\r\n    constexpr auto _Tuple_transform(_CallbackType&& _Callback, _TupleType&& _Tuple) noexcept(noexcept(\r\n        _STD apply(_Tuple_transform_closure(_Callback), _STD forward<_TupleType>(_Tuple)))) /* strengthened */ {\r\n        return _STD apply(_Tuple_transform_closure(_Callback), _STD forward<_TupleType>(_Tuple));\r\n    }\r\n\r\n    template <class _CallbackType>\r\n    constexpr auto _Tuple_for_each_closure(_CallbackType& _Callback) noexcept {\r\n        return [&_Callback]<class... _ViewTupleTypes>(_ViewTupleTypes&&... _View_tuples) noexcept(\r\n                   noexcept(((void) (_STD invoke(_Callback, _STD forward<_ViewTupleTypes>(_View_tuples))), ...))) {\r\n            ((void) (_STD invoke(_Callback, _STD forward<_ViewTupleTypes>(_View_tuples))), ...);\r\n        };\r\n    }\r\n\r\n    template <class _CallbackType, class _TupleType>\r\n    constexpr void _Tuple_for_each(_CallbackType&& _Callback, _TupleType&& _Tuple) noexcept(\r\n        noexcept(_STD apply(_Tuple_for_each_closure(_Callback), _STD forward<_TupleType>(_Tuple)))) /* strengthened */ {\r\n        _STD apply(_Tuple_for_each_closure(_Callback), _STD forward<_TupleType>(_Tuple));\r\n    }\r\n\r\n    template <bool _IsConst, class... _Views>\r\n    concept _All_random_access = (random_access_range<_Maybe_const<_IsConst, _Views>> && ...);\r\n\r\n    template <bool _IsConst, class... _Views>\r\n    concept _All_bidirectional = (bidirectional_range<_Maybe_const<_IsConst, _Views>> && ...);\r\n\r\n    template <bool _IsConst, class... _Views>\r\n    concept _All_forward = (forward_range<_Maybe_const<_IsConst, _Views>> && ...);\r\n\r\n    template <class _ResultType, class... _LHSTupleTypes, class... _RHSTupleTypes>\r\n        requires (sizeof...(_LHSTupleTypes) == sizeof...(_RHSTupleTypes))\r\n    _NODISCARD constexpr _ResultType _Zip_get_smallest_distance(\r\n        const tuple<_LHSTupleTypes...>& _Lhs_tuple, const tuple<_RHSTupleTypes...>& _Rhs_tuple)\r\n        noexcept((noexcept(static_cast<_ResultType>(\r\n                      _STD declval<const _LHSTupleTypes&>() - _STD declval<const _RHSTupleTypes&>()))\r\n                  && ...)) {\r\n        constexpr bool _Is_noexcept =\r\n            (noexcept(static_cast<_ResultType>( //\r\n                 _STD declval<const _LHSTupleTypes&>() - _STD declval<const _RHSTupleTypes&>()))\r\n                && ...);\r\n        const auto _Get_smallest_distance_closure = [&_Lhs_tuple,\r\n                                                        &_Rhs_tuple]<size_t _FirstIdx /* = 0 */, size_t... _Idxs>(\r\n                                                        index_sequence<_FirstIdx, _Idxs...>) noexcept(_Is_noexcept) {\r\n            const _ResultType _First_size = static_cast<_ResultType>(_STD get<0>(_Lhs_tuple) - _STD get<0>(_Rhs_tuple));\r\n\r\n            if (_First_size == 0) {\r\n                return static_cast<_ResultType>(0);\r\n            }\r\n            const initializer_list<_ResultType> _Sizes = {\r\n                _First_size, (_STD get<_Idxs>(_Lhs_tuple) - _STD get<_Idxs>(_Rhs_tuple))...};\r\n            return _First_size < 0 ? static_cast<_ResultType>((_RANGES max) (_Sizes))\r\n                                   : static_cast<_ResultType>((_RANGES min) (_Sizes));\r\n        };\r\n\r\n        return _Get_smallest_distance_closure(index_sequence_for<_LHSTupleTypes...>{});\r\n    }\r\n\r\n    template <class... _LHSTupleTypes, class... _RHSTupleTypes>\r\n        requires (sizeof...(_LHSTupleTypes) == sizeof...(_RHSTupleTypes))\r\n    _NODISCARD constexpr bool _Zip_iterator_sentinel_equal(\r\n        const tuple<_LHSTupleTypes...>& _Lhs_tuple, const tuple<_RHSTupleTypes...>& _Rhs_tuple)\r\n        noexcept((noexcept(_STD declval<const _LHSTupleTypes&>() == _STD declval<const _RHSTupleTypes&>()) && ...)) {\r\n        const auto _Evaluate_equality_closure =\r\n            [&_Lhs_tuple, &_Rhs_tuple]<size_t... _Indices>(index_sequence<_Indices...>) noexcept(\r\n                (noexcept(_STD declval<const _LHSTupleTypes&>() == _STD declval<const _RHSTupleTypes&>()) &&...)) {\r\n                return ((_STD get<_Indices>(_Lhs_tuple) == _STD get<_Indices>(_Rhs_tuple)) || ... || false);\r\n            };\r\n\r\n        return _Evaluate_equality_closure(index_sequence_for<_LHSTupleTypes...>{});\r\n    }\r\n\r\n    template <class _Func, class... _Views>\r\n    concept _Zip_transform_constraints =\r\n        move_constructible<_Func> && is_object_v<_Func> && (sizeof...(_Views) > 0) && (input_range<_Views> && ...)\r\n        && (view<_Views> && ...) && regular_invocable<_Func&, range_reference_t<_Views>...>\r\n        && _Can_reference<invoke_result_t<_Func&, range_reference_t<_Views>...>>;\r\n\r\n    _EXPORT_STD template <input_range... _ViewTypes>\r\n        requires (view<_ViewTypes> && ...) && (sizeof...(_ViewTypes) > 0)\r\n    class zip_view : public view_interface<zip_view<_ViewTypes...>> {\r\n    private:\r\n        /* [[no_unique_address]] */ tuple<_ViewTypes...> _Views;\r\n\r\n        template <bool _IsConst>\r\n        struct _Category_base {};\r\n\r\n        template <bool _IsConst>\r\n            requires _All_forward<_IsConst, _ViewTypes...>\r\n        struct _Category_base<_IsConst> {\r\n            using iterator_category = input_iterator_tag;\r\n        };\r\n\r\n        template <bool _IsConst>\r\n        class _Iterator : public _Category_base<_IsConst> {\r\n        private:\r\n            friend zip_view;\r\n\r\n            template <class _Func, class... _OtherViews>\r\n                requires _Zip_transform_constraints<_Func, _OtherViews...>\r\n            friend class zip_transform_view;\r\n\r\n            using _My_tuple = tuple<iterator_t<_Maybe_const<_IsConst, _ViewTypes>>...>;\r\n\r\n            /* [[no_unique_address]] */ _My_tuple _Current;\r\n\r\n            constexpr explicit _Iterator(_My_tuple _Current_)\r\n                noexcept(is_nothrow_move_constructible_v<_My_tuple>) // strengthened\r\n                : _Current(_STD move(_Current_)) {}\r\n\r\n        public:\r\n            using iterator_concept = conditional_t<_All_random_access<_IsConst, _ViewTypes...>,\r\n                random_access_iterator_tag,\r\n                conditional_t<_All_bidirectional<_IsConst, _ViewTypes...>, bidirectional_iterator_tag,\r\n                    conditional_t<_All_forward<_IsConst, _ViewTypes...>, forward_iterator_tag, input_iterator_tag>>>;\r\n\r\n            using value_type      = tuple<range_value_t<_Maybe_const<_IsConst, _ViewTypes>>...>;\r\n            using difference_type = common_type_t<range_difference_t<_Maybe_const<_IsConst, _ViewTypes>>...>;\r\n\r\n            _Iterator() = default;\r\n\r\n            constexpr _Iterator(_Iterator<!_IsConst> _Rhs) noexcept(\r\n                (is_nothrow_convertible_v<iterator_t<_ViewTypes>, iterator_t<const _ViewTypes>> && ...)) // strengthened\r\n                requires (_IsConst && (convertible_to<iterator_t<_ViewTypes>, iterator_t<const _ViewTypes>> && ...))\r\n                : _Current(_STD move(_Rhs._Current)) {}\r\n\r\n            _NODISCARD constexpr auto operator*() const\r\n                noexcept((noexcept(*(_STD declval<iterator_t<_Maybe_const<_IsConst, _ViewTypes>>&>()))\r\n                          && ...)) /* strengthened */ {\r\n                return _Tuple_transform(\r\n                    [](auto& _Itr) static noexcept(noexcept(*_Itr)) -> decltype(auto) { return *_Itr; }, _Current);\r\n            }\r\n\r\n            constexpr _Iterator& operator++() noexcept(noexcept(_Tuple_for_each(\r\n                [](auto& _Itr) static noexcept(noexcept(++_Itr)) { ++_Itr; }, _Current))) /* strengthened */ {\r\n                _Tuple_for_each([](auto& _Itr) static noexcept(noexcept(++_Itr)) { ++_Itr; }, _Current);\r\n                return *this;\r\n            }\r\n\r\n            constexpr void operator++(int) noexcept(noexcept(++(_STD declval<_Iterator>()))) /* strengthened */ {\r\n                ++*this;\r\n            }\r\n\r\n            constexpr _Iterator operator++(int) noexcept(\r\n                noexcept(++(_STD declval<_Iterator>())) && is_nothrow_copy_constructible_v<_Iterator>) // strengthened\r\n                requires _All_forward<_IsConst, _ViewTypes...>\r\n            {\r\n                auto _Temp = *this;\r\n                ++*this;\r\n\r\n                return _Temp;\r\n            }\r\n\r\n            constexpr _Iterator& operator--() noexcept(noexcept(_Tuple_for_each(\r\n                [](auto& _Itr) static noexcept(noexcept(--_Itr)) { --_Itr; }, _Current))) // strengthened\r\n                requires _All_bidirectional<_IsConst, _ViewTypes...>\r\n            {\r\n                _Tuple_for_each([](auto& _Itr) static noexcept(noexcept(--_Itr)) { --_Itr; }, _Current);\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator--(int) noexcept(\r\n                noexcept(--(_STD declval<_Iterator>())) && is_nothrow_copy_constructible_v<_Iterator>) // strengthened\r\n                requires _All_bidirectional<_IsConst, _ViewTypes...>\r\n            {\r\n                auto _Temp = *this;\r\n                --*this;\r\n\r\n                return _Temp;\r\n            }\r\n\r\n            constexpr _Iterator& operator+=(const difference_type _Off)\r\n                noexcept((noexcept(_STD declval<iterator_t<_Maybe_const<_IsConst, _ViewTypes>>&>() +=\r\n                                   static_cast<iter_difference_t<iterator_t<_Maybe_const<_IsConst, _ViewTypes>>>>(_Off))\r\n                          && ...)) // strengthened\r\n                requires _All_random_access<_IsConst, _ViewTypes...>\r\n            {\r\n                _Tuple_for_each(\r\n                    [&_Off]<class _IteratorType>(_IteratorType& _Itr) noexcept(\r\n                        noexcept(_Itr += static_cast<iter_difference_t<_IteratorType>>(_Off))) {\r\n                        _Itr += static_cast<iter_difference_t<_IteratorType>>(_Off);\r\n                    },\r\n                    _Current);\r\n\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator& operator-=(const difference_type _Off)\r\n                noexcept((noexcept(_STD declval<iterator_t<_Maybe_const<_IsConst, _ViewTypes>>&>() -=\r\n                                   static_cast<iter_difference_t<iterator_t<_Maybe_const<_IsConst, _ViewTypes>>>>(_Off))\r\n                          && ...)) // strengthened\r\n                requires _All_random_access<_IsConst, _ViewTypes...>\r\n            {\r\n                _Tuple_for_each(\r\n                    [&_Off]<class _IteratorType>(_IteratorType& _Itr) noexcept(\r\n                        noexcept(_Itr -= static_cast<iter_difference_t<_IteratorType>>(_Off))) {\r\n                        _Itr -= static_cast<iter_difference_t<_IteratorType>>(_Off);\r\n                    },\r\n                    _Current);\r\n\r\n                return *this;\r\n            }\r\n\r\n            _NODISCARD constexpr auto operator[](const difference_type _Where) const noexcept(\r\n                (noexcept((_STD declval<iterator_t<_Maybe_const<_IsConst, _ViewTypes>>&>())\r\n                         [static_cast<iter_difference_t<iterator_t<_Maybe_const<_IsConst, _ViewTypes>>>>(_Where)])\r\n                    && ...)) // strengthened\r\n                requires _All_random_access<_IsConst, _ViewTypes...>\r\n            {\r\n                return _Tuple_transform(\r\n                    [&_Where]<class _IteratorType>(_IteratorType& _Itr) noexcept(\r\n                        noexcept(_Itr[static_cast<iter_difference_t<_IteratorType>>(_Where)])) -> decltype(auto) {\r\n                        return _Itr[static_cast<iter_difference_t<_IteratorType>>(_Where)];\r\n                    },\r\n                    _Current);\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Lhs, const _Iterator& _Rhs)\r\n                noexcept(noexcept(_Zip_iterator_sentinel_equal(_Lhs._Current, _Rhs._Current))) // strengthened\r\n                requires (equality_comparable<iterator_t<_Maybe_const<_IsConst, _ViewTypes>>> && ...)\r\n            {\r\n                if constexpr (!_Zip_is_common<_Maybe_const<_IsConst, _ViewTypes>...>\r\n                              || _All_random_access<_IsConst, _ViewTypes...> || sizeof...(_ViewTypes) == 1) {\r\n                    return _STD get<0>(_Lhs._Current) == _STD get<0>(_Rhs._Current);\r\n                } else {\r\n                    return _Zip_iterator_sentinel_equal(_Lhs._Current, _Rhs._Current);\r\n                }\r\n            }\r\n\r\n            _NODISCARD friend constexpr auto operator<=>(const _Iterator& _Lhs, const _Iterator& _Rhs)\r\n                requires _All_random_access<_IsConst, _ViewTypes...>\r\n            {\r\n                return _Lhs._Current <=> _Rhs._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const _Iterator& _Lhs, const difference_type _Rhs)\r\n                noexcept(noexcept(_STD declval<_Iterator&>() += _Rhs)\r\n                         && is_nothrow_copy_constructible_v<_Iterator>) // strengthened\r\n                requires _All_random_access<_IsConst, _ViewTypes...>\r\n            {\r\n                auto _Modified_iterator = _Lhs;\r\n                _Modified_iterator += _Rhs;\r\n\r\n                return _Modified_iterator;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const difference_type _Lhs, const _Iterator& _Rhs)\r\n                noexcept(noexcept(_Rhs + _Lhs)) /* strengthened */\r\n                requires _All_random_access<_IsConst, _ViewTypes...>\r\n            {\r\n                return _Rhs + _Lhs;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator-(const _Iterator& _Lhs, const difference_type _Rhs)\r\n                noexcept(noexcept(_STD declval<_Iterator&>() -= _Rhs)\r\n                         && is_nothrow_copy_constructible_v<_Iterator>) // strengthened\r\n                requires _All_random_access<_IsConst, _ViewTypes...>\r\n            {\r\n                auto _Modified_iterator = _Lhs;\r\n                _Modified_iterator -= _Rhs;\r\n\r\n                return _Modified_iterator;\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(const _Iterator& _Lhs, const _Iterator& _Rhs)\r\n                noexcept(noexcept(_Zip_get_smallest_distance<difference_type>(_STD declval<_My_tuple>(),\r\n                    _STD declval<_My_tuple>()))) // strengthened\r\n                requires (sized_sentinel_for<iterator_t<_Maybe_const<_IsConst, _ViewTypes>>,\r\n                              iterator_t<_Maybe_const<_IsConst, _ViewTypes>>>\r\n                          && ...)\r\n            {\r\n                return _Zip_get_smallest_distance<difference_type>(_Lhs._Current, _Rhs._Current);\r\n            }\r\n\r\n            _NODISCARD friend constexpr auto iter_move(const _Iterator& _Itr) noexcept(\r\n                (noexcept(_RANGES iter_move(_STD declval<const iterator_t<_Maybe_const<_IsConst, _ViewTypes>>&>()))\r\n                    && ...)\r\n                && (is_nothrow_move_constructible_v<range_rvalue_reference_t<_Maybe_const<_IsConst, _ViewTypes>>>\r\n                    && ...)) {\r\n                return _Tuple_transform(_RANGES iter_move, _Itr._Current);\r\n            }\r\n\r\n            friend constexpr void iter_swap(const _Iterator& _Lhs, const _Iterator& _Rhs)\r\n                noexcept((noexcept(_RANGES iter_swap(_STD declval<iterator_t<_Maybe_const<_IsConst, _ViewTypes>>&>(),\r\n                              _STD declval<iterator_t<_Maybe_const<_IsConst, _ViewTypes>>&>()))\r\n                          && ...))\r\n                requires (indirectly_swappable<iterator_t<_Maybe_const<_IsConst, _ViewTypes>>> && ...)\r\n            {\r\n                const auto _Swap_every_pair_closure =\r\n                    [&_Lhs, &_Rhs]<size_t... _Indices>(index_sequence<_Indices...>) noexcept(noexcept(\r\n                        ((_RANGES iter_swap(_STD get<_Indices>(_Lhs._Current), _STD get<_Indices>(_Rhs._Current))),\r\n                            ...))) {\r\n                        ((_RANGES iter_swap(_STD get<_Indices>(_Lhs._Current), _STD get<_Indices>(_Rhs._Current))),\r\n                            ...);\r\n                    };\r\n\r\n                _Swap_every_pair_closure(index_sequence_for<_ViewTypes...>{});\r\n            }\r\n        };\r\n\r\n        template <bool _IsConst>\r\n        class _Sentinel {\r\n        private:\r\n            friend zip_view;\r\n\r\n            template <bool _IteratorConst>\r\n            using _Difference_type = _Iterator<_IteratorConst>::difference_type;\r\n\r\n            using _My_tuple = tuple<sentinel_t<_Maybe_const<_IsConst, _ViewTypes>>...>;\r\n\r\n            /* [[no_unique_address]] */ _My_tuple _End;\r\n\r\n            constexpr explicit _Sentinel(_My_tuple _End_)\r\n                noexcept(is_nothrow_copy_constructible_v<_My_tuple>) // strengthened\r\n                : _End(_End_) {}\r\n\r\n            template <bool _IteratorConst>\r\n            _NODISCARD static constexpr const auto& _Get_iterator_tuple(\r\n                const _Iterator<_IteratorConst>& _Itr) noexcept {\r\n                // NOTE: This function is necessary because friend functions are never\r\n                // member functions, and friendship is not transitive.\r\n                return _Itr._Current;\r\n            }\r\n\r\n        public:\r\n            _Sentinel() = default;\r\n\r\n            constexpr _Sentinel(_Sentinel<!_IsConst> _Rhs) noexcept(\r\n                (is_nothrow_convertible_v<sentinel_t<_ViewTypes>, sentinel_t<const _ViewTypes>> && ...)) // strengthened\r\n                requires (_IsConst && (convertible_to<sentinel_t<_ViewTypes>, sentinel_t<const _ViewTypes>> && ...))\r\n                : _End(_STD move(_Rhs._End)) {}\r\n\r\n            template <bool _IteratorConst>\r\n                requires (sentinel_for<sentinel_t<_Maybe_const<_IsConst, _ViewTypes>>,\r\n                              iterator_t<_Maybe_const<_IteratorConst, _ViewTypes>>>\r\n                          && ...)\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator<_IteratorConst>& _Lhs, const _Sentinel& _Rhs)\r\n                noexcept(\r\n                    noexcept(_Zip_iterator_sentinel_equal(_Get_iterator_tuple(_Lhs), _Rhs._End))) /* strengthened */ {\r\n                return _Zip_iterator_sentinel_equal(_Get_iterator_tuple(_Lhs), _Rhs._End);\r\n            }\r\n\r\n            template <bool _IteratorConst>\r\n                requires (sized_sentinel_for<sentinel_t<_Maybe_const<_IsConst, _ViewTypes>>,\r\n                              iterator_t<_Maybe_const<_IteratorConst, _ViewTypes>>>\r\n                          && ...)\r\n            _NODISCARD friend constexpr _Difference_type<_IteratorConst> operator-(\r\n                const _Iterator<_IteratorConst>& _Lhs, const _Sentinel& _Rhs)\r\n                noexcept(noexcept(_Zip_get_smallest_distance<_Difference_type<_IteratorConst>>(\r\n                    _Get_iterator_tuple(_Lhs), _Rhs._End))) /* strengthened */ {\r\n                return _Zip_get_smallest_distance<_Difference_type<_IteratorConst>>(\r\n                    _Get_iterator_tuple(_Lhs), _Rhs._End);\r\n            }\r\n\r\n            template <bool _IteratorConst>\r\n                requires (sized_sentinel_for<sentinel_t<_Maybe_const<_IsConst, _ViewTypes>>,\r\n                              iterator_t<_Maybe_const<_IteratorConst, _ViewTypes>>>\r\n                          && ...)\r\n            _NODISCARD friend constexpr _Difference_type<_IteratorConst> operator-(const _Sentinel& _Lhs,\r\n                const _Iterator<_IteratorConst>& _Rhs) noexcept(noexcept(-(_Rhs - _Lhs))) /* strengthened */ {\r\n                return -(_Rhs - _Lhs);\r\n            }\r\n        };\r\n\r\n        template <bool _IsConst>\r\n        _NODISCARD static consteval bool _Is_end_noexcept() noexcept {\r\n            if constexpr (!_Zip_is_common<_Maybe_const<_IsConst, _ViewTypes>...>) {\r\n                return noexcept(_Sentinel<_IsConst>{\r\n                    _Tuple_transform(_RANGES end, _STD declval<_Maybe_const<_IsConst, tuple<_ViewTypes...>>&>())});\r\n            } else if constexpr ((random_access_range<_Maybe_const<_IsConst, _ViewTypes>> && ...)) {\r\n                // Operations on iter_difference_t values must be noexcept, so we only\r\n                // need to check the noexcept of begin().\r\n                return noexcept(_STD declval<_Maybe_const<_IsConst, zip_view>&>().begin());\r\n            } else {\r\n                return noexcept(_Iterator<_IsConst>{\r\n                    _Tuple_transform(_RANGES end, _STD declval<_Maybe_const<_IsConst, tuple<_ViewTypes...>>&>())});\r\n            }\r\n        }\r\n\r\n        static constexpr auto _Size_closure = [](auto... _Sizes) static noexcept {\r\n            using _Common_unsigned_type = _Make_unsigned_like_t<common_type_t<decltype(_Sizes)...>>;\r\n            return (_RANGES min) ({static_cast<_Common_unsigned_type>(_Sizes)...});\r\n        };\r\n\r\n    public:\r\n        zip_view() noexcept((is_nothrow_default_constructible_v<_ViewTypes> && ...)) = default;\r\n\r\n        constexpr explicit zip_view(_ViewTypes... _Args)\r\n            noexcept((is_nothrow_move_constructible_v<_ViewTypes> && ...)) // strengthened\r\n            : _Views(_STD move(_Args)...) {}\r\n\r\n        _NODISCARD constexpr auto begin()\r\n            noexcept(noexcept(_Iterator<false>{_Tuple_transform(_RANGES begin, _Views)})) // strengthened\r\n            requires (!(_Simple_view<_ViewTypes> && ...))\r\n        {\r\n            return _Iterator<false>{_Tuple_transform(_RANGES begin, _Views)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const\r\n            noexcept(noexcept(_Iterator<true>{_Tuple_transform(_RANGES begin, _Views)})) // strengthened\r\n            requires (range<const _ViewTypes> && ...)\r\n        {\r\n            return _Iterator<true>{_Tuple_transform(_RANGES begin, _Views)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() noexcept(_Is_end_noexcept<false>()) // strengthened\r\n            requires (!(_Simple_view<_ViewTypes> && ...))\r\n        {\r\n            if constexpr (!_Zip_is_common<_ViewTypes...>) {\r\n                return _Sentinel<false>{_Tuple_transform(_RANGES end, _Views)};\r\n            } else if constexpr ((random_access_range<_ViewTypes> && ...)) {\r\n                return begin() + static_cast<iter_difference_t<_Iterator<false>>>(size());\r\n            } else {\r\n                return _Iterator<false>{_Tuple_transform(_RANGES end, _Views)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const noexcept(_Is_end_noexcept<true>()) // strengthened\r\n            requires (range<const _ViewTypes> && ...)\r\n        {\r\n            if constexpr (!_Zip_is_common<const _ViewTypes...>) {\r\n                return _Sentinel<true>{_Tuple_transform(_RANGES end, _Views)};\r\n            } else if constexpr ((random_access_range<const _ViewTypes> && ...)) {\r\n                return begin() + static_cast<iter_difference_t<_Iterator<true>>>(size());\r\n            } else {\r\n                return _Iterator<true>{_Tuple_transform(_RANGES end, _Views)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto size()\r\n            noexcept(noexcept(_STD apply(_Size_closure, _Tuple_transform(_RANGES size, _Views)))) // strengthened\r\n            requires (sized_range<_ViewTypes> && ...)\r\n        {\r\n            return _STD apply(_Size_closure, _Tuple_transform(_RANGES size, _Views));\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const\r\n            noexcept(noexcept(_STD apply(_Size_closure, _Tuple_transform(_RANGES size, _Views)))) // strengthened\r\n            requires (sized_range<const _ViewTypes> && ...)\r\n        {\r\n            return _STD apply(_Size_closure, _Tuple_transform(_RANGES size, _Views));\r\n        }\r\n    };\r\n\r\n    template <class... _RangeTypes>\r\n    zip_view(_RangeTypes&&...) -> zip_view<views::all_t<_RangeTypes>...>;\r\n\r\n    template <class... _ViewTypes>\r\n    constexpr bool enable_borrowed_range<zip_view<_ViewTypes...>> = (enable_borrowed_range<_ViewTypes> && ...);\r\n\r\n    template <class... _Rngs>\r\n    _NODISCARD consteval auto _Zip_view_compile_time_max_size() {\r\n        using _Size_type = common_type_t<decltype(_Compile_time_max_size<_Rngs>)...>;\r\n        return (_STD min) ({static_cast<_Size_type>(_Compile_time_max_size<_Rngs>)...});\r\n    }\r\n\r\n    template <class... _Rngs>\r\n    constexpr auto _Compile_time_max_size<zip_view<_Rngs...>> = _Zip_view_compile_time_max_size<_Rngs...>();\r\n\r\n    template <class... _Rngs>\r\n    constexpr auto _Compile_time_max_size<const zip_view<_Rngs...>> = _Zip_view_compile_time_max_size<const _Rngs...>();\r\n\r\n    namespace views {\r\n        class _Zip_fn {\r\n        private:\r\n            template <class... _Types>\r\n            _NODISCARD static consteval bool _Is_invocation_noexcept() {\r\n                if constexpr (sizeof...(_Types) == 0) {\r\n                    // NOTE: views::empty<tuple<>> is nothrow copy-constructible.\r\n                    return true;\r\n                } else {\r\n                    return noexcept(zip_view<views::all_t<_Types>...>(_STD declval<_Types>()...));\r\n                }\r\n            }\r\n\r\n        public:\r\n            template <class... _Types>\r\n            _NODISCARD static constexpr auto operator()(_Types&&... _Args)\r\n                noexcept(_Is_invocation_noexcept<_Types...>())\r\n                requires (sizeof...(_Types) == 0)\r\n                      || requires { zip_view<views::all_t<_Types>...>(_STD forward<_Types>(_Args)...); }\r\n            {\r\n                if constexpr (sizeof...(_Types) == 0) {\r\n                    return empty_view<tuple<>>{};\r\n                } else {\r\n                    return zip_view<views::all_t<_Types>...>(_STD forward<_Types>(_Args)...);\r\n                }\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Zip_fn zip{};\r\n    } // namespace views\r\n\r\n    template <class _Func, class... _ViewTypes>\r\n    concept _Can_const_iterate_zip_transform_view =\r\n        range<const zip_view<_ViewTypes...>> && regular_invocable<const _Func&, range_reference_t<const _ViewTypes>...>;\r\n\r\n    _EXPORT_STD template <class _Func, class... _ViewTypes>\r\n        requires _Zip_transform_constraints<_Func, _ViewTypes...>\r\n    class zip_transform_view : public view_interface<zip_transform_view<_Func, _ViewTypes...>> {\r\n    private:\r\n        using _Inner_view = zip_view<_ViewTypes...>;\r\n\r\n        /* [[no_unique_address]] */ _Movable_box<_Func> _Function;\r\n        /* [[no_unique_address]] */ _Inner_view _Zip;\r\n\r\n        template <bool _IsConst>\r\n        using _Ziperator = iterator_t<_Maybe_const<_IsConst, _Inner_view>>;\r\n\r\n        template <bool _IsConst>\r\n        using _Zentinel = sentinel_t<_Maybe_const<_IsConst, _Inner_view>>;\r\n\r\n        template <bool _IsConst>\r\n        struct _Category_base {};\r\n\r\n        template <bool _IsConst>\r\n            requires forward_range<_Maybe_const<_IsConst, _Inner_view>>\r\n        struct _Category_base<_IsConst> {\r\n        private:\r\n            template <class _Tag_type>\r\n            static constexpr bool _Iterators_derive_from_tag =\r\n                (derived_from<\r\n                     typename iterator_traits<iterator_t<_Maybe_const<_IsConst, _ViewTypes>>>::iterator_category,\r\n                     _Tag_type>\r\n                    && ...);\r\n\r\n            using _Invoke_t = invoke_result_t<_Maybe_const<_IsConst, _Func>&,\r\n                range_reference_t<_Maybe_const<_IsConst, _ViewTypes>>...>;\r\n\r\n        public:\r\n            using iterator_category = conditional_t<!is_reference_v<_Invoke_t>, input_iterator_tag,\r\n                conditional_t<_Iterators_derive_from_tag<random_access_iterator_tag>, random_access_iterator_tag,\r\n                    conditional_t<_Iterators_derive_from_tag<bidirectional_iterator_tag>, bidirectional_iterator_tag,\r\n                        conditional_t<_Iterators_derive_from_tag<forward_iterator_tag>, forward_iterator_tag,\r\n                            input_iterator_tag>>>>;\r\n        };\r\n\r\n        template <bool _IsConst>\r\n        class _Iterator : public _Category_base<_IsConst> {\r\n        private:\r\n            friend zip_transform_view;\r\n\r\n            using _Parent_t = _Maybe_const<_IsConst, zip_transform_view>;\r\n            using _Base_t   = _Maybe_const<_IsConst, _Inner_view>;\r\n\r\n            _Parent_t* _Parent = nullptr;\r\n            /* [[no_unique_address]] */ _Ziperator<_IsConst> _Inner;\r\n\r\n            constexpr _Iterator(_Parent_t& _Parent_, _Ziperator<_IsConst> _Inner_)\r\n                noexcept(is_nothrow_move_constructible_v<_Ziperator<_IsConst>>) // strengthened\r\n                : _Parent(_STD addressof(_Parent_)), _Inner(_STD move(_Inner_)) {}\r\n\r\n        public:\r\n            using iterator_concept = _Ziperator<_IsConst>::iterator_concept;\r\n            using value_type       = remove_cvref_t<invoke_result_t<_Maybe_const<_IsConst, _Func>&,\r\n                      range_reference_t<_Maybe_const<_IsConst, _ViewTypes>>...>>;\r\n            using difference_type  = range_difference_t<_Base_t>;\r\n\r\n            _Iterator() = default;\r\n\r\n            constexpr _Iterator(_Iterator<!_IsConst> _Rhs)\r\n                noexcept(is_nothrow_convertible_v<_Ziperator<false>, _Ziperator<_IsConst>>) // strengthened\r\n                requires (_IsConst && convertible_to<_Ziperator<false>, _Ziperator<_IsConst>>)\r\n                : _Parent(_Rhs._Parent), _Inner(_STD move(_Rhs._Inner)) {}\r\n\r\n            _NODISCARD constexpr decltype(auto) operator*() const\r\n                noexcept(noexcept(_STD apply(_Dereference_closure(), _Inner._Current))) {\r\n                return _STD apply(_Dereference_closure(), _Inner._Current);\r\n            }\r\n\r\n            constexpr _Iterator& operator++() noexcept(noexcept(++_Inner)) /* strengthened */ {\r\n                ++_Inner;\r\n                return *this;\r\n            }\r\n\r\n            constexpr void operator++(int) noexcept(noexcept(++_STD declval<_Iterator&>())) /* strengthened */ {\r\n                ++*this;\r\n            }\r\n\r\n            constexpr _Iterator operator++(int) noexcept(is_nothrow_copy_constructible_v<_Iterator> //\r\n                                                         && noexcept(++*this)) // strengthened\r\n                requires forward_range<_Base_t>\r\n            {\r\n                auto _Temp = *this;\r\n                ++*this;\r\n                return _Temp;\r\n            }\r\n\r\n            constexpr _Iterator& operator--() noexcept(noexcept(--_Inner)) // strengthened\r\n                requires bidirectional_range<_Base_t>\r\n            {\r\n                --_Inner;\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator--(int) noexcept(is_nothrow_copy_constructible_v<_Iterator> //\r\n                                                         && noexcept(--*this)) // strengthened\r\n                requires bidirectional_range<_Base_t>\r\n            {\r\n                auto _Temp = *this;\r\n                --*this;\r\n                return _Temp;\r\n            }\r\n\r\n            constexpr _Iterator& operator+=(const difference_type _Off)\r\n                noexcept(noexcept(_Inner += _Off)) // strengthened\r\n                requires random_access_range<_Base_t>\r\n            {\r\n                _Inner += _Off;\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator& operator-=(const difference_type _Off)\r\n                noexcept(noexcept(_Inner -= _Off)) // strengthened\r\n                requires random_access_range<_Base_t>\r\n            {\r\n                _Inner -= _Off;\r\n                return *this;\r\n            }\r\n\r\n            _NODISCARD constexpr decltype(auto) operator[](const difference_type _Where) const\r\n                noexcept(noexcept(_STD apply(_Subscript_closure(_Where), _Inner._Current))) // strengthened\r\n                requires random_access_range<_Base_t>\r\n            {\r\n                return _STD apply(_Subscript_closure(_Where), _Inner._Current);\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Lhs, const _Iterator& _Rhs)\r\n                noexcept(noexcept(_Lhs._Inner == _Rhs._Inner)) // strengthened\r\n                requires equality_comparable<_Ziperator<_IsConst>>\r\n            {\r\n                return _Lhs._Inner == _Rhs._Inner;\r\n            }\r\n\r\n            _NODISCARD friend constexpr auto operator<=>(const _Iterator& _Lhs, const _Iterator& _Rhs)\r\n                noexcept(noexcept(_Lhs._Inner <=> _Rhs._Inner)) // strengthened\r\n                requires random_access_range<_Base_t>\r\n            {\r\n                return _Lhs._Inner <=> _Rhs._Inner;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const _Iterator& _Lhs, const difference_type _Rhs)\r\n                noexcept(noexcept(_Iterator{*_Lhs._Parent, _Lhs._Inner + _Rhs})) // strengthened\r\n                requires random_access_range<_Base_t>\r\n            {\r\n                return _Iterator{*_Lhs._Parent, _Lhs._Inner + _Rhs};\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const difference_type _Lhs, const _Iterator& _Rhs)\r\n                noexcept(noexcept(_Iterator{*_Rhs._Parent, _Rhs._Inner + _Lhs})) // strengthened\r\n                requires random_access_range<_Base_t>\r\n            {\r\n                return _Iterator{*_Rhs._Parent, _Rhs._Inner + _Lhs};\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator-(const _Iterator& _Lhs, const difference_type _Rhs)\r\n                noexcept(noexcept(_Iterator{*_Lhs._Parent, _Lhs._Inner - _Rhs})) // strengthened\r\n                requires random_access_range<_Base_t>\r\n            {\r\n                return _Iterator{*_Lhs._Parent, _Lhs._Inner - _Rhs};\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(const _Iterator& _Lhs,\r\n                const _Iterator& _Rhs) noexcept(noexcept(_Lhs._Inner - _Rhs._Inner)) // strengthened\r\n                requires sized_sentinel_for<_Ziperator<_IsConst>, _Ziperator<_IsConst>>\r\n            {\r\n                return _Lhs._Inner - _Rhs._Inner;\r\n            }\r\n\r\n        private:\r\n            _NODISCARD constexpr auto _Dereference_closure() const noexcept {\r\n                return [this](const auto&... _Itrs) noexcept(noexcept(_STD invoke(*_Parent->_Function,\r\n                           *_Itrs...))) -> decltype(auto) { return _STD invoke(*_Parent->_Function, *_Itrs...); };\r\n            }\r\n\r\n            _NODISCARD constexpr auto _Subscript_closure(const difference_type _Where) const noexcept {\r\n                return [this, _Where]<class... _Iterator_types>(const _Iterator_types&... _Iters) noexcept(\r\n                           noexcept(_STD invoke(*_Parent->_Function,\r\n                               _Iters[static_cast<iter_difference_t<_Iterator_types>>(_Where)]...))) -> decltype(auto) {\r\n                    return _STD invoke(\r\n                        *_Parent->_Function, _Iters[static_cast<iter_difference_t<_Iterator_types>>(_Where)]...);\r\n                };\r\n            }\r\n        };\r\n\r\n        template <bool _IsConst>\r\n        class _Sentinel {\r\n        private:\r\n            friend zip_transform_view;\r\n\r\n            /* [[no_unique_address]] */ _Zentinel<_IsConst> _Inner;\r\n\r\n            constexpr explicit _Sentinel(_Zentinel<_IsConst> _Inner_)\r\n                noexcept(is_nothrow_copy_constructible_v<_Zentinel<_IsConst>>) // strengthened\r\n                : _Inner(_Inner_) {}\r\n\r\n            template <bool _IteratorConst>\r\n            _NODISCARD static constexpr const auto& _Get_iterator_inner(\r\n                const _Iterator<_IteratorConst>& _Itr) noexcept {\r\n                return _Itr._Inner;\r\n            }\r\n\r\n        public:\r\n            _Sentinel() = default;\r\n\r\n            constexpr _Sentinel(_Sentinel<!_IsConst> _Rhs)\r\n                noexcept(is_nothrow_convertible_v<_Zentinel<false>, _Zentinel<_IsConst>>) // strengthened\r\n                requires (_IsConst && convertible_to<_Zentinel<false>, _Zentinel<_IsConst>>)\r\n                : _Inner(_STD move(_Rhs._Inner)) {}\r\n\r\n            template <bool _IteratorConst>\r\n                requires sentinel_for<_Zentinel<_IsConst>, _Ziperator<_IteratorConst>>\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator<_IteratorConst>& _Lhs, const _Sentinel& _Rhs)\r\n                noexcept(noexcept(_Get_iterator_inner(_Lhs) == _Rhs._Inner)) /* strengthened */ {\r\n                return _Get_iterator_inner(_Lhs) == _Rhs._Inner;\r\n            }\r\n\r\n            // typename is a workaround for VSO-2680018 (EDG)\r\n            template <bool _IteratorConst>\r\n                requires sized_sentinel_for<_Zentinel<_IsConst>, _Ziperator<_IteratorConst>>\r\n            _NODISCARD friend constexpr typename _Iterator<_IteratorConst>::difference_type operator-(\r\n                const _Iterator<_IteratorConst>& _Lhs, const _Sentinel& _Rhs)\r\n                noexcept(noexcept(_Get_iterator_inner(_Lhs) - _Rhs._Inner)) /* strengthened */ {\r\n                return _Get_iterator_inner(_Lhs) - _Rhs._Inner;\r\n            }\r\n\r\n            // typename is a workaround for VSO-2680018 (EDG)\r\n            template <bool _IteratorConst>\r\n                requires sized_sentinel_for<_Zentinel<_IsConst>, _Ziperator<_IteratorConst>>\r\n            _NODISCARD friend constexpr typename _Iterator<_IteratorConst>::difference_type operator-(\r\n                const _Sentinel& _Lhs, const _Iterator<_IteratorConst>& _Rhs)\r\n                noexcept(noexcept(_Lhs._Inner - _Get_iterator_inner(_Rhs))) /* strengthened */ {\r\n                return _Lhs._Inner - _Get_iterator_inner(_Rhs);\r\n            }\r\n        };\r\n\r\n        template <bool _IsConst>\r\n        _NODISCARD static consteval bool _Is_end_noexcept() noexcept {\r\n            if constexpr (common_range<_Maybe_const<_IsConst, _Inner_view>>) {\r\n                return noexcept(_Iterator<_IsConst>{_STD declval<_Maybe_const<_IsConst, zip_transform_view>&>(),\r\n                    _STD declval<_Maybe_const<_IsConst, _Inner_view>&>().end()});\r\n            } else {\r\n                return noexcept(_Sentinel<_IsConst>{_STD declval<_Maybe_const<_IsConst, _Inner_view>&>().end()});\r\n            }\r\n        }\r\n\r\n    public:\r\n        zip_transform_view() = default;\r\n\r\n        constexpr explicit zip_transform_view(_Func _Function_, _ViewTypes... _Views)\r\n            noexcept(is_nothrow_move_constructible_v<_Func>\r\n                     && is_nothrow_constructible_v<_Inner_view, remove_reference_t<_ViewTypes>&&...>) // strengthened\r\n            : _Function(in_place, _STD move(_Function_)), _Zip(_STD move(_Views)...) {}\r\n\r\n        _NODISCARD constexpr auto begin() noexcept(noexcept(_Iterator<false>{*this, _Zip.begin()})) /* strengthened */ {\r\n            return _Iterator<false>{*this, _Zip.begin()};\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const noexcept(noexcept(_Iterator<true>{*this, _Zip.begin()})) // strengthened\r\n            requires _Can_const_iterate_zip_transform_view<_Func, _ViewTypes...>\r\n        {\r\n            return _Iterator<true>{*this, _Zip.begin()};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() noexcept(_Is_end_noexcept<false>()) /* strengthened */ {\r\n            if constexpr (common_range<_Inner_view>) {\r\n                return _Iterator<false>{*this, _Zip.end()};\r\n            } else {\r\n                return _Sentinel<false>{_Zip.end()};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const noexcept(_Is_end_noexcept<true>()) // strengthened\r\n            requires _Can_const_iterate_zip_transform_view<_Func, _ViewTypes...>\r\n        {\r\n            if constexpr (common_range<const _Inner_view>) {\r\n                return _Iterator<true>{*this, _Zip.end()};\r\n            } else {\r\n                return _Sentinel<true>{_Zip.end()};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() noexcept(noexcept(_Zip.size())) // strengthened\r\n            requires sized_range<_Inner_view>\r\n        {\r\n            return _Zip.size();\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_Zip.size())) // strengthened\r\n            requires sized_range<const _Inner_view>\r\n        {\r\n            return _Zip.size();\r\n        }\r\n    };\r\n\r\n    template <class _Func, class... _Ranges>\r\n    zip_transform_view(_Func, _Ranges&&...) -> zip_transform_view<_Func, views::all_t<_Ranges>...>;\r\n\r\n    template <class _Fn, class... _Rngs>\r\n    constexpr auto _Compile_time_max_size<zip_transform_view<_Fn, _Rngs...>> =\r\n        _Compile_time_max_size<zip_view<_Rngs...>>;\r\n\r\n    template <class _Fn, class... _Rngs>\r\n    constexpr auto _Compile_time_max_size<const zip_transform_view<_Fn, _Rngs...>> =\r\n        _Compile_time_max_size<const zip_view<_Rngs...>>;\r\n\r\n    namespace views {\r\n        class _Zip_transform_fn {\r\n        private:\r\n            template <class _Func, class... _Types>\r\n            _NODISCARD static consteval bool _Is_invocation_noexcept() {\r\n                if constexpr (sizeof...(_Types) == 0) {\r\n                    return true;\r\n                } else {\r\n                    return noexcept(zip_transform_view(_STD declval<_Func>(), _STD declval<_Types>()...));\r\n                }\r\n            }\r\n\r\n            template <class _Func, class... _Types>\r\n            _NODISCARD static consteval bool _Enable_cpo() {\r\n                if constexpr (sizeof...(_Types) == 0) {\r\n                    // This is a more efficient implementation of the CPO requirements listed in\r\n                    // N4950 [range.zip.transform.overview]/2.1.1.\r\n                    using _Decayed_func = decay_t<_Func>;\r\n                    if constexpr (move_constructible<_Decayed_func> && regular_invocable<_Decayed_func&>) {\r\n                        return !is_void_v<invoke_result_t<_Decayed_func&>>;\r\n                    } else {\r\n                        return false;\r\n                    }\r\n                } else {\r\n                    return requires(_Func&& _Function, _Types&&... _Args) {\r\n                        zip_transform_view(_STD forward<_Func>(_Function), _STD forward<_Types>(_Args)...);\r\n                    };\r\n                }\r\n            }\r\n\r\n        public:\r\n            template <class _Func, class... _Types>\r\n                requires (_Enable_cpo<_Func, _Types...>())\r\n            _NODISCARD static constexpr auto operator()(_Func&& _Function, _Types&&... _Args)\r\n                noexcept(_Is_invocation_noexcept<_Func, _Types...>()) /* strengthened */ {\r\n                if constexpr (sizeof...(_Types) == 0) {\r\n                    using _Decayed_func = decay_t<_Func>;\r\n                    return empty_view<decay_t<invoke_result_t<_Decayed_func&>>>{};\r\n                } else {\r\n                    return zip_transform_view(_STD forward<_Func>(_Function), _STD forward<_Types>(_Args)...);\r\n                }\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Zip_transform_fn zip_transform{};\r\n    } // namespace views\r\n\r\n    template <class _Ty, size_t>\r\n    using _Repeat_type = _Ty;\r\n\r\n    template <class _Ty, class _Indices>\r\n    struct _Repeated_tuple_impl;\r\n\r\n    template <class _Ty, size_t... _Indices>\r\n    struct _Repeated_tuple_impl<_Ty, index_sequence<_Indices...>> {\r\n        using type = tuple<_Repeat_type<_Ty, _Indices>...>;\r\n    };\r\n\r\n    template <class _Ty, size_t _Nx>\r\n    using _Repeated_tuple = _Repeated_tuple_impl<_Ty, make_index_sequence<_Nx>>::type;\r\n\r\n    template <class _Fn, class _Ty, class _Indices>\r\n    constexpr bool _Regular_invocable_with_repeated_type_impl = false;\r\n\r\n    template <class _Fn, class _Ty, size_t... _Indices>\r\n    constexpr bool _Regular_invocable_with_repeated_type_impl<_Fn, _Ty, index_sequence<_Indices...>> =\r\n        regular_invocable<_Fn, _Repeat_type<_Ty, _Indices>...>;\r\n\r\n    template <class _Fn, class _Ty, size_t _Nx>\r\n    concept _Regular_invocable_with_repeated_type =\r\n        _Regular_invocable_with_repeated_type_impl<_Fn, _Ty, make_index_sequence<_Nx>>;\r\n\r\n    template <class _Fn, class _Ty, class _Indices>\r\n    struct _Invoke_result_with_repeated_type_impl;\r\n\r\n    template <class _Fn, class _Ty, size_t... _Indices>\r\n    struct _Invoke_result_with_repeated_type_impl<_Fn, _Ty, index_sequence<_Indices...>> {\r\n        using type = invoke_result_t<_Fn, _Repeat_type<_Ty, _Indices>...>;\r\n    };\r\n\r\n    template <class _Fn, class _Ty, size_t _Nx>\r\n    using _Invoke_result_with_repeated_type =\r\n        _Invoke_result_with_repeated_type_impl<_Fn, _Ty, make_index_sequence<_Nx>>::type;\r\n\r\n    template <class _Vw, class _Fn, size_t _Nx>\r\n    concept _Adjacent_transform_constraints =\r\n        (_Nx > 0) && forward_range<_Vw> && view<_Vw> && is_object_v<_Fn> && move_constructible<_Fn>\r\n        && _Regular_invocable_with_repeated_type<_Fn&, range_reference_t<_Vw>, _Nx>\r\n        && _Can_reference<_Invoke_result_with_repeated_type<_Fn&, range_reference_t<_Vw>, _Nx>>;\r\n\r\n    _EXPORT_STD template <class _Vw, class _Fn, size_t _Nx>\r\n        requires _Adjacent_transform_constraints<_Vw, _Fn, _Nx>\r\n    class adjacent_transform_view;\r\n\r\n    _EXPORT_STD template <forward_range _Vw, size_t _Nx>\r\n        requires view<_Vw> && (_Nx > 0)\r\n    class adjacent_view : public view_interface<adjacent_view<_Vw, _Nx>> {\r\n    private:\r\n        /* [[no_unique_address]] */ _Vw _Range{};\r\n\r\n        struct _As_sentinel {\r\n            explicit _As_sentinel() = default;\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Iterator {\r\n        private:\r\n            friend adjacent_view;\r\n\r\n            template <class _Vw2, class _Fn, size_t _Nx2>\r\n                requires _Adjacent_transform_constraints<_Vw2, _Fn, _Nx2>\r\n            friend class adjacent_transform_view;\r\n\r\n            using _Base          = _Maybe_const<_Const, _Vw>;\r\n            using _Base_iterator = iterator_t<_Base>;\r\n\r\n            array<_Base_iterator, _Nx> _Current{};\r\n\r\n            constexpr _Iterator(_Base_iterator _First, sentinel_t<_Base> _Last) {\r\n                _Current.front() = _First;\r\n                for (size_t _Ix = 1; _Ix < _Nx; ++_Ix) {\r\n                    _RANGES advance(_First, 1, _Last);\r\n                    _Current[_Ix] = _First;\r\n                }\r\n            }\r\n\r\n            constexpr _Iterator(_As_sentinel, _Base_iterator _First, _Base_iterator _Last) {\r\n                if constexpr (!bidirectional_range<_Base>) {\r\n                    _Current.fill(_Last);\r\n                } else {\r\n                    _Current.back() = _Last;\r\n                    for (size_t _Ix = 1; _Ix < _Nx; ++_Ix) {\r\n                        _RANGES advance(_Last, -1, _First);\r\n                        _Current[_Nx - 1 - _Ix] = _Last;\r\n                    }\r\n                }\r\n            }\r\n\r\n            template <size_t... _Indices>\r\n            constexpr _Iterator(_Iterator<!_Const>& _Other, index_sequence<_Indices...>)\r\n                noexcept(is_nothrow_convertible_v<iterator_t<_Vw>, _Base_iterator>)\r\n                requires _Const && convertible_to<iterator_t<_Vw>, _Base_iterator>\r\n                : _Current{_STD move(_Other._Current[_Indices])...} {}\r\n\r\n        public:\r\n            using iterator_category = input_iterator_tag;\r\n            using iterator_concept  = conditional_t<random_access_range<_Base>, random_access_iterator_tag,\r\n                 conditional_t<bidirectional_range<_Base>, bidirectional_iterator_tag, forward_iterator_tag>>;\r\n            using value_type        = _Repeated_tuple<range_value_t<_Base>, _Nx>;\r\n            using difference_type   = range_difference_t<_Base>;\r\n\r\n            _Iterator() = default;\r\n\r\n            constexpr _Iterator(_Iterator<!_Const> _Other)\r\n                noexcept(is_nothrow_convertible_v<iterator_t<_Vw>, _Base_iterator>) // strengthened\r\n                requires _Const && convertible_to<iterator_t<_Vw>, _Base_iterator>\r\n                : _Iterator(_Other, make_index_sequence<_Nx>{}) {}\r\n\r\n            _NODISCARD constexpr auto operator*() const {\r\n                return _RANGES _Tuple_transform([](auto& _It) static -> decltype(auto) { return *_It; }, _Current);\r\n            }\r\n\r\n            constexpr _Iterator& operator++() noexcept(noexcept(++_Current.front())) /* strengthened */ {\r\n                for (_Base_iterator& _It : _Current) {\r\n                    ++_It;\r\n                }\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator++(int)\r\n                noexcept(noexcept(++*this) && is_nothrow_copy_constructible_v<_Iterator>) /* strengthened */ {\r\n                auto _Tmp = *this;\r\n                ++*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator--() noexcept(noexcept(--_Current.back())) // strengthened\r\n                requires bidirectional_range<_Base>\r\n            {\r\n                for (_Base_iterator& _It : _Current) {\r\n                    --_It;\r\n                }\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator--(int)\r\n                noexcept(noexcept(--*this) && is_nothrow_copy_constructible_v<_Iterator>) // strengthened\r\n                requires bidirectional_range<_Base>\r\n            {\r\n                auto _Tmp = *this;\r\n                --*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator+=(const difference_type _Off)\r\n                noexcept(noexcept(_Current.back() += _Off)) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                for (_Base_iterator& _It : _Current) {\r\n                    _It += _Off;\r\n                }\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator& operator-=(const difference_type _Off)\r\n                noexcept(noexcept(_Current.back() -= _Off)) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                for (_Base_iterator& _It : _Current) {\r\n                    _It -= _Off;\r\n                }\r\n                return *this;\r\n            }\r\n\r\n            _NODISCARD constexpr auto operator[](const difference_type _Off) const\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _RANGES _Tuple_transform([&](auto& _It) -> decltype(auto) { return _It[_Off]; }, _Current);\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, const _Iterator& _Right) noexcept(\r\n                noexcept(_STD _Fake_copy_init<bool>(_Left._Current.back() == _Right._Current.back()))) // strengthened\r\n            {\r\n                return _Left._Current.back() == _Right._Current.back();\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator<(const _Iterator& _Left, const _Iterator& _Right) noexcept(\r\n                noexcept(_STD _Fake_copy_init<bool>(_Left._Current.back() < _Right._Current.back()))) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Left._Current.back() < _Right._Current.back();\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator>(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Right < _Left)) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Right < _Left;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator<=(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(!(_Right < _Left))) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                return !(_Right < _Left);\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator>=(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(!(_Left < _Right))) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                return !(_Left < _Right);\r\n            }\r\n\r\n            _NODISCARD friend constexpr auto operator<=>(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current.back() <=> _Right._Current.back())) // strengthened\r\n                requires random_access_range<_Base> && three_way_comparable<_Base_iterator>\r\n            {\r\n                return _Left._Current.back() <=> _Right._Current.back();\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const _Iterator& _It, const difference_type _Off)\r\n                noexcept(noexcept(_STD declval<_Iterator&>() += _Off)\r\n                         && is_nothrow_copy_constructible_v<_Iterator>) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                auto _Tmp = _It;\r\n                _Tmp += _Off;\r\n                return _Tmp;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const difference_type _Off, const _Iterator& _It)\r\n                noexcept(noexcept(_STD declval<_Iterator&>() += _Off)\r\n                         && is_nothrow_copy_constructible_v<_Iterator>) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                auto _Tmp = _It;\r\n                _Tmp += _Off;\r\n                return _Tmp;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator-(const _Iterator& _It, const difference_type _Off)\r\n                noexcept(noexcept(_STD declval<_Iterator&>() -= _Off)\r\n                         && is_nothrow_copy_constructible_v<_Iterator>) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                auto _Tmp = _It;\r\n                _Tmp -= _Off;\r\n                return _Tmp;\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Current.back() - _Right._Current.back())) // strengthened\r\n                requires sized_sentinel_for<_Base_iterator, _Base_iterator>\r\n            {\r\n                return _Left._Current.back() - _Right._Current.back();\r\n            }\r\n\r\n            _NODISCARD friend constexpr auto iter_move(const _Iterator& _It)\r\n                noexcept(noexcept(_RANGES iter_move(_STD declval<const _Base_iterator&>()))\r\n                         && is_nothrow_move_constructible_v<range_rvalue_reference_t<_Base>>) {\r\n                return _RANGES _Tuple_transform(_RANGES iter_move, _It._Current);\r\n            }\r\n\r\n            friend constexpr void iter_swap(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_RANGES iter_swap(_STD declval<_Base_iterator>(), _STD declval<_Base_iterator>())))\r\n                requires indirectly_swappable<_Base_iterator>\r\n            {\r\n                for (size_t _Ix = 0; _Ix < _Nx; ++_Ix) {\r\n                    _RANGES iter_swap(_Left._Current[_Ix], _Right._Current[_Ix]);\r\n                }\r\n            }\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Sentinel {\r\n        private:\r\n            friend adjacent_view;\r\n\r\n            using _Base          = _Maybe_const<_Const, _Vw>;\r\n            using _Base_sentinel = sentinel_t<_Base>;\r\n\r\n            /* [[no_unique_address]] */ _Base_sentinel _End{};\r\n\r\n            constexpr explicit _Sentinel(_Base_sentinel _Last_)\r\n                noexcept(is_nothrow_move_constructible_v<_Base_sentinel>) // strengthened\r\n                : _End(_STD move(_Last_)) {}\r\n\r\n            template <bool _OtherConst>\r\n                requires sentinel_for<_Base_sentinel, iterator_t<_Maybe_const<_OtherConst, _Vw>>>\r\n            _NODISCARD constexpr bool _Equal(const _Iterator<_OtherConst>& _It) const\r\n                noexcept(noexcept(_STD _Fake_copy_init<bool>(_It._Current.back() == _End))) {\r\n                return _It._Current.back() == _End;\r\n            }\r\n\r\n            template <bool _OtherConst>\r\n                requires sized_sentinel_for<_Base_sentinel, iterator_t<_Maybe_const<_OtherConst, _Vw>>>\r\n            _NODISCARD constexpr _Iterator<_OtherConst>::difference_type _Distance_from(\r\n                const _Iterator<_OtherConst>& _It) const noexcept(noexcept(_End - _It._Current.back())) {\r\n                return _End - _It._Current.back();\r\n            }\r\n\r\n        public:\r\n            _Sentinel() = default;\r\n\r\n            constexpr _Sentinel(_Sentinel<!_Const> _Other)\r\n                noexcept(is_nothrow_convertible_v<sentinel_t<_Vw>, _Base_sentinel>) // strengthened\r\n                requires _Const && convertible_to<sentinel_t<_Vw>, _Base_sentinel>\r\n                : _End(_STD move(_Other._End)) {}\r\n\r\n            template <bool _OtherConst>\r\n                requires sentinel_for<_Base_sentinel, iterator_t<_Maybe_const<_OtherConst, _Vw>>>\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator<_OtherConst>& _It, const _Sentinel& _Se)\r\n                noexcept(noexcept(_Se._Equal(_It))) /* strengthened */ {\r\n                return _Se._Equal(_It);\r\n            }\r\n\r\n            // typename is a workaround for VSO-2680018 (EDG)\r\n            template <bool _OtherConst>\r\n                requires sized_sentinel_for<_Base_sentinel, iterator_t<_Maybe_const<_OtherConst, _Vw>>>\r\n            _NODISCARD friend constexpr typename _Iterator<_OtherConst>::difference_type operator-(\r\n                const _Iterator<_OtherConst>& _It, const _Sentinel& _Se)\r\n                noexcept(noexcept(_Se._Distance_from(_It))) /* strengthened */ {\r\n                return -_Se._Distance_from(_It);\r\n            }\r\n\r\n            // typename is a workaround for VSO-2680018 (EDG)\r\n            template <bool _OtherConst>\r\n                requires sized_sentinel_for<_Base_sentinel, iterator_t<_Maybe_const<_OtherConst, _Vw>>>\r\n            _NODISCARD friend constexpr typename _Iterator<_OtherConst>::difference_type operator-(const _Sentinel& _Se,\r\n                const _Iterator<_OtherConst>& _It) noexcept(noexcept(_Se._Distance_from(_It))) /* strengthened */ {\r\n                return _Se._Distance_from(_It);\r\n            }\r\n        };\r\n\r\n    public:\r\n        adjacent_view()\r\n            requires default_initializable<_Vw>\r\n        = default;\r\n\r\n        constexpr explicit adjacent_view(_Vw _Range_) noexcept(is_nothrow_move_constructible_v<_Vw>) // strengthened\r\n            : _Range(_STD move(_Range_)) {}\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(is_nothrow_copy_constructible_v<_Vw>) // strengthened\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Range;\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() && noexcept(is_nothrow_move_constructible_v<_Vw>) /* strengthened */ {\r\n            return _STD move(_Range);\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin()\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            return _Iterator<false>{_RANGES begin(_Range), _RANGES end(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const\r\n            requires range<const _Vw>\r\n        {\r\n            return _Iterator<true>{_RANGES begin(_Range), _RANGES end(_Range)};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end()\r\n            requires (!_Simple_view<_Vw>)\r\n        {\r\n            if constexpr (common_range<_Vw>) {\r\n                return _Iterator<false>{_As_sentinel{}, _RANGES begin(_Range), _RANGES end(_Range)};\r\n            } else {\r\n                return _Sentinel<false>{_RANGES end(_Range)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const\r\n            requires range<const _Vw>\r\n        {\r\n            if constexpr (common_range<const _Vw>) {\r\n                return _Iterator<true>{_As_sentinel{}, _RANGES begin(_Range), _RANGES end(_Range)};\r\n            } else {\r\n                return _Sentinel<true>{_RANGES end(_Range)};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() noexcept(noexcept(_RANGES size(_Range))) // strengthened\r\n            requires sized_range<_Vw>\r\n        {\r\n            using _Size_type        = decltype(_RANGES size(_Range));\r\n            using _Common_size_type = common_type_t<_Size_type, size_t>;\r\n            auto _Size              = static_cast<_Common_size_type>(_RANGES size(_Range));\r\n            _Size -= (_STD min) (_Size, static_cast<_Common_size_type>(_Nx - 1));\r\n            return static_cast<_Size_type>(_Size);\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_RANGES size(_Range))) // strengthened\r\n            requires sized_range<const _Vw>\r\n        {\r\n            using _Size_type        = decltype(_RANGES size(_Range));\r\n            using _Common_size_type = common_type_t<_Size_type, size_t>;\r\n            auto _Size              = static_cast<_Common_size_type>(_RANGES size(_Range));\r\n            _Size -= (_STD min) (_Size, static_cast<_Common_size_type>(_Nx - 1));\r\n            return static_cast<_Size_type>(_Size);\r\n        }\r\n    };\r\n\r\n    template <class _Rng, size_t _Nx>\r\n    constexpr bool enable_borrowed_range<adjacent_view<_Rng, _Nx>> = enable_borrowed_range<_Rng>;\r\n\r\n    template <class _Rng, size_t _Nx>\r\n    _NODISCARD consteval auto _Adjacent_view_compile_time_max_size() {\r\n        using _Size_type = common_type_t<decltype(_Compile_time_max_size<_Rng>), size_t>;\r\n        auto _Size       = static_cast<_Size_type>(_Compile_time_max_size<_Rng>);\r\n        _Size -= (_STD min) (_Size, static_cast<_Size_type>(_Nx - 1));\r\n        return static_cast<_Size_type>(_Size);\r\n    }\r\n\r\n    template <class _Rng, size_t _Nx>\r\n    constexpr auto _Compile_time_max_size<adjacent_view<_Rng, _Nx>> = _Adjacent_view_compile_time_max_size<_Rng, _Nx>();\r\n\r\n    template <class _Rng, size_t _Nx>\r\n    constexpr auto _Compile_time_max_size<const adjacent_view<_Rng, _Nx>> =\r\n        _Adjacent_view_compile_time_max_size<const _Rng, _Nx>();\r\n\r\n    namespace views {\r\n        template <size_t _Nx>\r\n        struct _Adjacent_fn : public _Pipe::_Base<_Adjacent_fn<_Nx>> {\r\n            template <viewable_range _Rng>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range)\r\n                noexcept(noexcept(adjacent_view<views::all_t<_Rng>, _Nx>{_STD forward<_Rng>(_Range)}))\r\n                requires requires { adjacent_view<views::all_t<_Rng>, _Nx>{_STD forward<_Rng>(_Range)}; }\r\n            {\r\n                return adjacent_view<views::all_t<_Rng>, _Nx>{_STD forward<_Rng>(_Range)};\r\n            }\r\n\r\n            template <viewable_range _Rng>\r\n            _NODISCARD static constexpr auto operator()(_Rng&&) noexcept\r\n                requires (_Nx == 0) && forward_range<_Rng>\r\n            {\r\n                return empty_view<tuple<>>{};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD template <size_t _Nx>\r\n        constexpr _Adjacent_fn<_Nx> adjacent;\r\n        _EXPORT_STD inline constexpr _Adjacent_fn<2> pairwise;\r\n    } // namespace views\r\n\r\n    _EXPORT_STD template <class _Vw, class _Fn, size_t _Nx>\r\n        requires _Adjacent_transform_constraints<_Vw, _Fn, _Nx>\r\n    class adjacent_transform_view : public view_interface<adjacent_transform_view<_Vw, _Fn, _Nx>> {\r\n    private:\r\n        using _Inner_view = adjacent_view<_Vw, _Nx>;\r\n        template <bool _Const>\r\n        using _Inner_iterator = iterator_t<_Maybe_const<_Const, _Inner_view>>;\r\n        template <bool _Const>\r\n        using _Inner_sentinel = sentinel_t<_Maybe_const<_Const, _Inner_view>>;\r\n\r\n        /* [[no_unique_address]] */ _Movable_box<_Fn> _Func;\r\n        /* [[no_unique_address]] */ _Inner_view _Inner;\r\n\r\n        template <bool _Const>\r\n        class _Iterator {\r\n        private:\r\n            friend adjacent_transform_view;\r\n\r\n            using _Parent_t = _Maybe_const<_Const, adjacent_transform_view>;\r\n            using _Base     = _Maybe_const<_Const, _Vw>;\r\n\r\n            _Parent_t* _Parent = nullptr;\r\n            _Inner_iterator<_Const> _Inner;\r\n\r\n            constexpr _Iterator(_Parent_t& _Parent_, _Inner_iterator<_Const> _Inner_)\r\n                noexcept(is_nothrow_move_constructible_v<_Inner_iterator<_Const>>) // strengthened\r\n                : _Parent(_STD addressof(_Parent_)), _Inner(_STD move(_Inner_)) {}\r\n\r\n            _NODISCARD static consteval auto _Get_iterator_category() noexcept {\r\n                if constexpr (!is_reference_v<_Invoke_result_with_repeated_type<_Maybe_const<_Const, _Fn>&,\r\n                                  range_reference_t<_Base>, _Nx>>) {\r\n                    return input_iterator_tag{};\r\n                } else {\r\n                    using _Cat = iterator_traits<iterator_t<_Base>>::iterator_category;\r\n\r\n                    if constexpr (derived_from<_Cat, random_access_iterator_tag>) {\r\n                        return random_access_iterator_tag{};\r\n                    } else if constexpr (derived_from<_Cat, bidirectional_iterator_tag>) {\r\n                        return bidirectional_iterator_tag{};\r\n                    } else if constexpr (derived_from<_Cat, forward_iterator_tag>) {\r\n                        return forward_iterator_tag{};\r\n                    } else {\r\n                        return input_iterator_tag{};\r\n                    }\r\n                }\r\n            }\r\n\r\n            template <size_t... _Indices>\r\n            _NODISCARD static consteval bool _Is_indirection_nothrow(index_sequence<_Indices...>) noexcept {\r\n                return noexcept(_STD invoke(_STD declval<_Maybe_const<_Const, _Fn>&>(),\r\n                    *_STD get<_Indices>(_STD declval<const _Inner_iterator<_Const>&>()._Current)...));\r\n            }\r\n\r\n        public:\r\n            using iterator_category = decltype(_Get_iterator_category());\r\n            using iterator_concept  = _Inner_iterator<_Const>::iterator_concept;\r\n            using value_type        = remove_cvref_t<\r\n                       _Invoke_result_with_repeated_type<_Maybe_const<_Const, _Fn>&, range_reference_t<_Base>, _Nx>>;\r\n            using difference_type = range_difference_t<_Base>;\r\n\r\n            _Iterator() = default;\r\n\r\n            constexpr _Iterator(_Iterator<!_Const> _Other)\r\n                requires _Const && convertible_to<_Inner_iterator<false>, _Inner_iterator<_Const>>\r\n                : _Parent(_Other._Parent), _Inner(_STD move(_Other._Inner)) {}\r\n\r\n            _NODISCARD constexpr decltype(auto) operator*() const\r\n                noexcept(_Is_indirection_nothrow(make_index_sequence<_Nx>{})) {\r\n                return _STD apply(\r\n                    [&](const auto&... _Iters) -> decltype(auto) { return _STD invoke(*_Parent->_Func, *_Iters...); },\r\n                    _Inner._Current);\r\n            }\r\n\r\n            constexpr _Iterator& operator++() noexcept(noexcept(++_Inner)) /* strengthened */ {\r\n                ++_Inner;\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator++(int)\r\n                noexcept(noexcept(++*this) && is_nothrow_copy_constructible_v<_Iterator>) /* strengthened */ {\r\n                auto _Tmp = *this;\r\n                ++*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator--() noexcept(noexcept(--_Inner)) /* strengthened */\r\n                requires bidirectional_range<_Base>\r\n            {\r\n                --_Inner;\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator--(int)\r\n                noexcept(noexcept(--*this) && is_nothrow_copy_constructible_v<_Iterator>) // strengthened\r\n                requires bidirectional_range<_Base>\r\n            {\r\n                auto _Tmp = *this;\r\n                --*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator+=(const difference_type _Off)\r\n                noexcept(noexcept(_Inner += _Off)) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                _Inner += _Off;\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator& operator-=(const difference_type _Off)\r\n                noexcept(noexcept(_Inner -= _Off)) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                _Inner -= _Off;\r\n                return *this;\r\n            }\r\n\r\n            _NODISCARD constexpr decltype(auto) operator[](const difference_type _Off) const\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _STD apply(\r\n                    [&](const auto&... _Iters) -> decltype(auto) {\r\n                        return _STD invoke(*_Parent->_Func, _Iters[_Off]...);\r\n                    },\r\n                    _Inner._Current);\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Inner == _Right._Inner)) /* strengthened */ {\r\n                return _Left._Inner == _Right._Inner;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator<(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Inner < _Right._Inner)) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Left._Inner < _Right._Inner;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator>(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Inner > _Right._Inner)) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Left._Inner > _Right._Inner;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator<=(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Inner <= _Right._Inner)) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Left._Inner <= _Right._Inner;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator>=(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Inner >= _Right._Inner)) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Left._Inner >= _Right._Inner;\r\n            }\r\n\r\n            _NODISCARD friend constexpr auto operator<=>(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(noexcept(_Left._Inner <=> _Right._Inner)) // strengthened\r\n                requires random_access_range<_Base> && three_way_comparable<_Inner_iterator<_Const>>\r\n            {\r\n                return _Left._Inner <=> _Right._Inner;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const _Iterator& _It, const difference_type _Off) noexcept(\r\n                noexcept(_It._Inner + _Off) && is_nothrow_move_constructible_v<_Inner_iterator<_Const>>) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Iterator{*_It._Parent, _It._Inner + _Off};\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const difference_type _Off, const _Iterator& _It) noexcept(\r\n                noexcept(_It._Inner + _Off) && is_nothrow_move_constructible_v<_Inner_iterator<_Const>>) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Iterator{*_It._Parent, _It._Inner + _Off};\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator-(const _Iterator& _It, const difference_type _Off) noexcept(\r\n                noexcept(_It._Inner - _Off) && is_nothrow_move_constructible_v<_Inner_iterator<_Const>>) // strengthened\r\n                requires random_access_range<_Base>\r\n            {\r\n                return _Iterator{*_It._Parent, _It._Inner - _Off};\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(const _Iterator& _Left, const _Iterator& _Right) //\r\n                noexcept(noexcept(_Left._Inner - _Right._Inner)) // strengthened\r\n                requires sized_sentinel_for<_Inner_iterator<_Const>, _Inner_iterator<_Const>>\r\n            {\r\n                return _Left._Inner - _Right._Inner;\r\n            }\r\n        };\r\n\r\n        template <bool _Const>\r\n        class _Sentinel {\r\n        private:\r\n            friend adjacent_transform_view;\r\n\r\n            /* [[no_unique_address]] */ _Inner_sentinel<_Const> _Inner;\r\n\r\n            constexpr explicit _Sentinel(_Inner_sentinel<_Const> _Inner_) : _Inner(_Inner_) {}\r\n\r\n            template <bool _OtherConst>\r\n                requires sentinel_for<_Inner_sentinel<_Const>, _Inner_iterator<_OtherConst>>\r\n            _NODISCARD constexpr bool _Equal(const _Iterator<_OtherConst>& _It) const\r\n                noexcept(noexcept(_It._Inner == _Inner)) {\r\n                return _It._Inner == _Inner;\r\n            }\r\n\r\n            template <bool _OtherConst>\r\n                requires sized_sentinel_for<_Inner_sentinel<_Const>, _Inner_iterator<_OtherConst>>\r\n            _NODISCARD constexpr _Iterator<_OtherConst>::difference_type _Distance_from(\r\n                const _Iterator<_OtherConst>& _It) const noexcept(noexcept(_Inner - _It._Inner)) {\r\n                return _Inner - _It._Inner;\r\n            }\r\n\r\n        public:\r\n            _Sentinel() = default;\r\n\r\n            constexpr _Sentinel(_Sentinel<!_Const> _Other)\r\n                requires _Const && convertible_to<_Inner_sentinel<false>, _Inner_sentinel<_Const>>\r\n                : _Inner(_STD move(_Other._Inner)) {}\r\n\r\n            template <bool _OtherConst>\r\n                requires sentinel_for<_Inner_sentinel<_Const>, _Inner_iterator<_OtherConst>>\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator<_OtherConst>& _It, const _Sentinel& _Se)\r\n                noexcept(noexcept(_Se._Equal(_It))) /* strengthened */ {\r\n                return _Se._Equal(_It);\r\n            }\r\n\r\n            // typename is a workaround for VSO-2680018 (EDG)\r\n            template <bool _OtherConst>\r\n                requires sized_sentinel_for<_Inner_sentinel<_Const>, _Inner_iterator<_OtherConst>>\r\n            _NODISCARD friend constexpr typename _Iterator<_OtherConst>::difference_type operator-(\r\n                const _Iterator<_OtherConst>& _It, const _Sentinel& _Se)\r\n                noexcept(noexcept(_Se._Distance_from(_It))) /* strengthened */ {\r\n                return -_Se._Distance_from(_It);\r\n            }\r\n\r\n            // typename is a workaround for VSO-2680018 (EDG)\r\n            template <bool _OtherConst>\r\n                requires sized_sentinel_for<_Inner_sentinel<_Const>, _Inner_iterator<_OtherConst>>\r\n            _NODISCARD friend constexpr typename _Iterator<_OtherConst>::difference_type operator-(const _Sentinel& _Se,\r\n                const _Iterator<_OtherConst>& _It) noexcept(noexcept(_Se._Distance_from(_It))) /* strengthened */ {\r\n                return _Se._Distance_from(_It);\r\n            }\r\n        };\r\n\r\n    public:\r\n        adjacent_transform_view() = default;\r\n\r\n        constexpr explicit adjacent_transform_view(_Vw _Range_, _Fn _Func_)\r\n            noexcept(is_nothrow_move_constructible_v<_Vw> && is_nothrow_move_constructible_v<_Fn>) // strengthened\r\n            : _Func(in_place, _STD move(_Func_)), _Inner(_STD move(_Range_)) {}\r\n\r\n        _NODISCARD constexpr _Vw base() const& noexcept(noexcept(_Inner.base())) // strengthened\r\n            requires copy_constructible<_Vw>\r\n        {\r\n            return _Inner.base();\r\n        }\r\n\r\n        _NODISCARD constexpr _Vw base() && noexcept(noexcept(_STD move(_Inner).base())) /* strengthened */ {\r\n            return _STD move(_Inner).base();\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() {\r\n            return _Iterator<false>{*this, _Inner.begin()};\r\n        }\r\n\r\n        _NODISCARD constexpr auto begin() const\r\n            requires range<const _Inner_view>\r\n                  && _Regular_invocable_with_repeated_type<const _Fn&, range_reference_t<const _Vw>, _Nx>\r\n        {\r\n            return _Iterator<true>{*this, _Inner.begin()};\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() {\r\n            if constexpr (common_range<_Inner_view>) {\r\n                return _Iterator<false>{*this, _Inner.end()};\r\n            } else {\r\n                return _Sentinel<false>{_Inner.end()};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto end() const\r\n            requires range<const _Inner_view>\r\n                  && _Regular_invocable_with_repeated_type<const _Fn&, range_reference_t<const _Vw>, _Nx>\r\n        {\r\n            if constexpr (common_range<const _Inner_view>) {\r\n                return _Iterator<true>{*this, _Inner.end()};\r\n            } else {\r\n                return _Sentinel<true>{_Inner.end()};\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() noexcept(noexcept(_Inner.size())) // strengthened\r\n            requires sized_range<_Inner_view>\r\n        {\r\n            return _Inner.size();\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const noexcept(noexcept(_Inner.size())) // strengthened\r\n            requires sized_range<const _Inner_view>\r\n        {\r\n            return _Inner.size();\r\n        }\r\n    };\r\n\r\n    template <class _Rng, class _Fn, size_t _Nx>\r\n    constexpr auto _Compile_time_max_size<adjacent_transform_view<_Rng, _Fn, _Nx>> =\r\n        _Compile_time_max_size<adjacent_view<_Rng, _Nx>>;\r\n\r\n    template <class _Rng, class _Fn, size_t _Nx>\r\n    constexpr auto _Compile_time_max_size<const adjacent_transform_view<_Rng, _Fn, _Nx>> =\r\n        _Compile_time_max_size<const adjacent_view<_Rng, _Nx>>;\r\n\r\n    namespace views {\r\n        template <size_t _Nx>\r\n        struct _Adjacent_transform_fn {\r\n            template <viewable_range _Rng, class _Fn>\r\n            _NODISCARD static constexpr auto operator()(_Rng&&, _Fn&& _Func)\r\n                noexcept(noexcept(views::zip_transform(_STD forward<_Fn>(_Func))))\r\n                requires (_Nx == 0)\r\n                      && forward_range<_Rng> && requires { views::zip_transform(_STD forward<_Fn>(_Func)); }\r\n            {\r\n                return views::zip_transform(_STD forward<_Fn>(_Func));\r\n            }\r\n\r\n            template <viewable_range _Rng, class _Fn>\r\n            _NODISCARD static constexpr auto operator()(_Rng&& _Range, _Fn&& _Func)\r\n                noexcept(noexcept(adjacent_transform_view<views::all_t<_Rng>, decay_t<_Fn>, _Nx>(\r\n                    _STD forward<_Rng>(_Range), _STD forward<_Fn>(_Func))))\r\n                requires requires {\r\n                    adjacent_transform_view<views::all_t<_Rng>, decay_t<_Fn>, _Nx>(\r\n                        _STD forward<_Rng>(_Range), _STD forward<_Fn>(_Func));\r\n                }\r\n            {\r\n                return adjacent_transform_view<views::all_t<_Rng>, decay_t<_Fn>, _Nx>(\r\n                    _STD forward<_Rng>(_Range), _STD forward<_Fn>(_Func));\r\n            }\r\n\r\n            template <class _Fn>\r\n                requires constructible_from<decay_t<_Fn>, _Fn>\r\n            _NODISCARD static constexpr auto operator()(_Fn&& _Func)\r\n                noexcept(is_nothrow_constructible_v<decay_t<_Fn>, _Fn>) {\r\n                return _Range_closure<_Adjacent_transform_fn, decay_t<_Fn>>{_STD forward<_Fn>(_Func)};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD template <size_t _Nx>\r\n        constexpr _Adjacent_transform_fn<_Nx> adjacent_transform;\r\n        _EXPORT_STD inline constexpr _Adjacent_transform_fn<2> pairwise_transform;\r\n    } // namespace views\r\n\r\n    template <bool _Const, class _First, class... _Rest>\r\n    concept _Cartesian_product_is_random_access =\r\n        (random_access_range<_Maybe_const<_Const, _First>> && ...\r\n            && (random_access_range<_Maybe_const<_Const, _Rest>> && sized_range<_Maybe_const<_Const, _Rest>>) );\r\n\r\n    template <class _Rng>\r\n    concept _Cartesian_product_common_arg = common_range<_Rng> || (sized_range<_Rng> && random_access_range<_Rng>);\r\n\r\n    template <bool _Const, class _First, class... _Rest>\r\n    concept _Cartesian_product_is_bidirectional = (bidirectional_range<_Maybe_const<_Const, _First>> && ...\r\n                                                   && (bidirectional_range<_Maybe_const<_Const, _Rest>>\r\n                                                       && _Cartesian_product_common_arg<_Maybe_const<_Const, _Rest>>) );\r\n\r\n    template <class _First /*, class... _Rest*/>\r\n    concept _Cartesian_product_is_common = _Cartesian_product_common_arg<_First>;\r\n\r\n    template <class... _Rngs>\r\n    concept _Cartesian_product_is_sized = (sized_range<_Rngs> && ...);\r\n\r\n    template <bool _Const, template <class> class _FirstSent, class _First, class... _Rest>\r\n    concept _Cartesian_is_sized_sentinel =\r\n        (sized_sentinel_for<_FirstSent<_Maybe_const<_Const, _First>>, iterator_t<_Maybe_const<_Const, _First>>> && ...\r\n            && (sized_range<_Maybe_const<_Const, _Rest>>\r\n                && sized_sentinel_for<iterator_t<_Maybe_const<_Const, _Rest>>,\r\n                    iterator_t<_Maybe_const<_Const, _Rest>>>) );\r\n\r\n    template <_Cartesian_product_common_arg _Rng>\r\n    _NODISCARD constexpr auto _Cartesian_common_arg_end(_Rng& _Range) {\r\n        if constexpr (common_range<_Rng>) {\r\n            return _RANGES end(_Range);\r\n        } else {\r\n            return _RANGES begin(_Range) + _RANGES distance(_Range);\r\n        }\r\n    }\r\n\r\n    template <class _Rng>\r\n    _NODISCARD consteval int _Cartesian_product_max_size_bit_width() {\r\n        using _Size_type = decltype(_Compile_time_max_size<_Rng>);\r\n        if constexpr (requires { _STD bit_width(_Compile_time_max_size<_Rng>); }) {\r\n            return _STD bit_width(_Compile_time_max_size<_Rng>);\r\n        } else {\r\n            return numeric_limits<_Size_type>::digits;\r\n        }\r\n    }\r\n\r\n    template <class... _Rngs>\r\n        requires (sizeof...(_Rngs) > 0)\r\n    _NODISCARD consteval auto _Cartesian_product_optimal_size_type() noexcept {\r\n        constexpr int _Optimal_size_type_bit_width = (_Cartesian_product_max_size_bit_width<_Rngs>() + ...);\r\n        if constexpr (_Optimal_size_type_bit_width <= 8) {\r\n            return uint8_t{};\r\n        } else if constexpr (_Optimal_size_type_bit_width <= 16) {\r\n            return uint16_t{};\r\n        } else if constexpr (_Optimal_size_type_bit_width <= 32) {\r\n            return uint32_t{};\r\n        } else if constexpr (_Optimal_size_type_bit_width <= 64) {\r\n            return uint64_t{};\r\n        } else {\r\n            return _Unsigned128{};\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD template <input_range _First, forward_range... _Rest>\r\n        requires (view<_First> && ... && view<_Rest>)\r\n    class cartesian_product_view : public view_interface<cartesian_product_view<_First, _Rest...>> {\r\n    private:\r\n        template <bool _Const>\r\n        using _Optimal_size_type = decltype(_Cartesian_product_optimal_size_type<_Maybe_const<_Const, _First>,\r\n            _Maybe_const<_Const, _Rest>...>());\r\n\r\n        template <bool _Const>\r\n        using _Difference_type = common_type_t<_Make_signed_like_t<_Optimal_size_type<_Const>>,\r\n            range_difference_t<_Maybe_const<_Const, _First>>, range_difference_t<_Maybe_const<_Const, _Rest>>...>;\r\n\r\n        template <bool _Const>\r\n        using _Size_type = common_type_t<_Optimal_size_type<_Const>, range_size_t<_Maybe_const<_Const, _First>>,\r\n            range_size_t<_Maybe_const<_Const, _Rest>>...>;\r\n\r\n        /* [[no_unique_address]] */ tuple<_First, _Rest...> _Bases;\r\n\r\n        template <bool _Const>\r\n        class _Iterator {\r\n        public:\r\n            using iterator_category = input_iterator_tag;\r\n\r\n            using iterator_concept = conditional_t<_Cartesian_product_is_random_access<_Const, _First, _Rest...>,\r\n                random_access_iterator_tag,\r\n                conditional_t<_Cartesian_product_is_bidirectional<_Const, _First, _Rest...>, bidirectional_iterator_tag,\r\n                    conditional_t<forward_range<_Maybe_const<_Const, _First>>, forward_iterator_tag,\r\n                        input_iterator_tag>>>;\r\n\r\n            using value_type =\r\n                tuple<range_value_t<_Maybe_const<_Const, _First>>, range_value_t<_Maybe_const<_Const, _Rest>>...>;\r\n            using reference       = tuple<range_reference_t<_Maybe_const<_Const, _First>>,\r\n                      range_reference_t<_Maybe_const<_Const, _Rest>>...>;\r\n            using difference_type = _Difference_type<_Const>;\r\n\r\n        private:\r\n            friend cartesian_product_view;\r\n            using _Parent_t = _Maybe_const<_Const, cartesian_product_view>;\r\n\r\n            _Parent_t* _Parent = nullptr;\r\n            tuple<iterator_t<_Maybe_const<_Const, _First>>, iterator_t<_Maybe_const<_Const, _Rest>>...> _Current;\r\n\r\n            template <size_t _Index = sizeof...(_Rest)>\r\n            constexpr void _Next() {\r\n                auto& _It = _STD get<_Index>(_Current);\r\n                ++_It;\r\n                if constexpr (_Index > 0) {\r\n                    auto& _Range = _STD get<_Index>(_Parent->_Bases);\r\n                    if (_It == _RANGES end(_Range)) {\r\n                        _It = _RANGES begin(_Range);\r\n                        _Next<_Index - 1>();\r\n                    }\r\n                }\r\n            }\r\n\r\n            template <size_t _Index = sizeof...(_Rest)>\r\n            constexpr void _Prev() {\r\n                auto& _It = _STD get<_Index>(_Current);\r\n                if constexpr (_Index > 0) {\r\n                    auto& _Range = _STD get<_Index>(_Parent->_Bases);\r\n                    if (_It == _RANGES begin(_Range)) {\r\n                        _It = _Cartesian_common_arg_end(_Range);\r\n                        _Prev<_Index - 1>();\r\n                    }\r\n                }\r\n                --_It;\r\n            }\r\n\r\n            template <size_t... _Indices>\r\n            _NODISCARD constexpr bool _Entire_tail_at_begin(index_sequence<_Indices...>) const {\r\n                return ((_STD get<_Indices + 1>(_Current) == _RANGES begin(_STD get<_Indices + 1>(_Parent->_Bases)))\r\n                        && ...);\r\n            }\r\n\r\n            template <size_t _Index = sizeof...(_Rest)>\r\n            constexpr void _Advance(const difference_type _Off) {\r\n                if (_Off == 0) {\r\n                    return;\r\n                }\r\n\r\n                auto& _Range = _STD get<_Index>(_Parent->_Bases);\r\n                auto& _It    = _STD get<_Index>(_Current);\r\n                using _Iter  = remove_reference_t<decltype(_It)>;\r\n\r\n                if constexpr (_Index > 0) {\r\n                    const auto _Size       = static_cast<difference_type>(_RANGES ssize(_Range));\r\n                    const auto _Begin      = _RANGES begin(_Range);\r\n                    const auto _It_off     = static_cast<difference_type>(_It - _Begin);\r\n                    const auto _It_new_off = static_cast<difference_type>((_It_off + _Off) % _Size);\r\n                    const auto _Next_off   = static_cast<difference_type>((_It_off + _Off) / _Size);\r\n                    if (_It_new_off < 0) {\r\n                        _It = _Begin + static_cast<iter_difference_t<_Iter>>(_It_new_off + _Size);\r\n                        _Advance<_Index - 1>(_Next_off - 1);\r\n                    } else {\r\n                        _It = _Begin + static_cast<iter_difference_t<_Iter>>(_It_new_off);\r\n                        _Advance<_Index - 1>(_Next_off);\r\n                    }\r\n                } else {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                    const auto _It_off = static_cast<difference_type>(_It - _RANGES begin(_Range));\r\n                    _STL_VERIFY(_It_off + _Off >= 0, \"Cannot advance cartesian_product_view iterator before begin \"\r\n                                                     \"(N4950 [range.cartesian.iterator]/19).\");\r\n                    if constexpr (sized_range<decltype(_Range)>) {\r\n                        const auto _Size = static_cast<difference_type>(_RANGES ssize(_Range));\r\n                        _STL_VERIFY(_It_off + _Off < _Size\r\n                                        || (_It_off + _Off == _Size\r\n                                            && _Entire_tail_at_begin(make_index_sequence<sizeof...(_Rest)>{})),\r\n                            \"Cannot advance cartesian_product_view iterator past end (N4950 \"\r\n                            \"[range.cartesian.iterator]/19).\");\r\n                    }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                    _It += static_cast<iter_difference_t<_Iter>>(_Off);\r\n                }\r\n            }\r\n\r\n            template <size_t... _Indices>\r\n            _NODISCARD constexpr bool _Is_end(index_sequence<_Indices...>) const {\r\n                return ((_STD get<_Indices>(_Current) == _RANGES end(_STD get<_Indices>(_Parent->_Bases))) || ...);\r\n            }\r\n\r\n            template <size_t... _Indices>\r\n            _NODISCARD constexpr auto _End_tuple(index_sequence<_Indices...>) const {\r\n                return tuple<sentinel_t<_Maybe_const<_Const, _First>>, iterator_t<_Maybe_const<_Const, _Rest>>...>{\r\n                    _RANGES end(_STD get<0>(_Parent->_Bases)),\r\n                    _RANGES begin(_STD get<_Indices + 1>(_Parent->_Bases))...};\r\n            }\r\n\r\n            template <size_t _Index = sizeof...(_Rest), class _Tuple>\r\n            _NODISCARD constexpr difference_type _Distance_from(const _Tuple& _Tpl) const {\r\n                const auto _Diff = static_cast<difference_type>(_STD get<_Index>(_Current) - _STD get<_Index>(_Tpl));\r\n                if constexpr (_Index > 0) {\r\n                    difference_type _Result{1};\r\n                    const auto _Size = static_cast<difference_type>(_RANGES size(_STD get<_Index>(_Parent->_Bases)));\r\n                    [[maybe_unused]] const bool _Overflow =\r\n                        _Mul_overflow(_Size, _Distance_from<_Index - 1>(_Tpl), _Result)\r\n                        || _Add_overflow(_Result, _Diff, _Result);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                    _STL_VERIFY(!_Overflow, \"Scaled-sum cannot be represented by difference_type (N4950 \"\r\n                                            \"[range.cartesian.iterator]/8).\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n                    return _Result;\r\n                } else {\r\n                    return _Diff;\r\n                }\r\n            }\r\n\r\n            template <size_t... _Indices>\r\n            _NODISCARD static consteval bool _Is_iter_move_nothrow(index_sequence<_Indices...>) noexcept {\r\n                return conjunction_v<\r\n                           is_nothrow_move_constructible<range_rvalue_reference_t<_Maybe_const<_Const, _First>>>,\r\n                           is_nothrow_move_constructible<range_rvalue_reference_t<_Maybe_const<_Const, _Rest>>>...>\r\n                    && (noexcept(_RANGES iter_move(_STD get<_Indices>(_STD declval<const _Iterator&>()._Current)))\r\n                        && ...);\r\n            }\r\n\r\n            template <size_t... _Indices>\r\n            _NODISCARD static consteval bool _Is_iter_swap_nothrow(index_sequence<_Indices...>) noexcept {\r\n                return (noexcept(_RANGES iter_swap(_STD get<_Indices>(_STD declval<const _Iterator&>()._Current),\r\n                            _STD get<_Indices>(_STD declval<const _Iterator&>()._Current)))\r\n                        && ...);\r\n            }\r\n\r\n            constexpr _Iterator(_Parent_t& _Parent_,\r\n                tuple<iterator_t<_Maybe_const<_Const, _First>>, iterator_t<_Maybe_const<_Const, _Rest>>...> _Current_)\r\n                : _Parent(_STD addressof(_Parent_)), _Current(_STD move(_Current_)) {}\r\n\r\n        public:\r\n            _Iterator() = default;\r\n\r\n            constexpr _Iterator(_Iterator<!_Const> _It)\r\n                requires _Const\r\n                          && (convertible_to<iterator_t<_First>, iterator_t<const _First>> && ...\r\n                              && convertible_to<iterator_t<_Rest>, iterator_t<const _Rest>>)\r\n                : _Parent(_It._Parent), _Current(_STD move(_It._Current)) {}\r\n\r\n            _NODISCARD constexpr auto operator*() const {\r\n                return _RANGES _Tuple_transform([](auto& _It) static -> decltype(auto) { return *_It; }, _Current);\r\n            }\r\n\r\n            constexpr _Iterator& operator++() {\r\n                _Next();\r\n                return *this;\r\n            }\r\n\r\n            constexpr void operator++(int) {\r\n                ++*this;\r\n            }\r\n\r\n            constexpr _Iterator operator++(int)\r\n                requires forward_range<_Maybe_const<_Const, _First>>\r\n            {\r\n                auto _Tmp = *this;\r\n                ++*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator--()\r\n                requires _Cartesian_product_is_bidirectional<_Const, _First, _Rest...>\r\n            {\r\n                _Prev();\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator operator--(int)\r\n                requires _Cartesian_product_is_bidirectional<_Const, _First, _Rest...>\r\n            {\r\n                auto _Tmp = *this;\r\n                --*this;\r\n                return _Tmp;\r\n            }\r\n\r\n            constexpr _Iterator& operator+=(const difference_type _Off)\r\n                requires _Cartesian_product_is_random_access<_Const, _First, _Rest...>\r\n            {\r\n                _Advance(_Off);\r\n                return *this;\r\n            }\r\n\r\n            constexpr _Iterator& operator-=(const difference_type _Off)\r\n                requires _Cartesian_product_is_random_access<_Const, _First, _Rest...>\r\n            {\r\n                _Advance(-_Off);\r\n                return *this;\r\n            }\r\n\r\n            _NODISCARD constexpr reference operator[](const difference_type _Off) const\r\n                requires _Cartesian_product_is_random_access<_Const, _First, _Rest...>\r\n            {\r\n                return *(*this + _Off);\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _Left, const _Iterator& _Right)\r\n                requires equality_comparable<iterator_t<_Maybe_const<_Const, _First>>>\r\n            {\r\n                return _Left._Current == _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr bool operator==(const _Iterator& _It, default_sentinel_t) {\r\n                return _It._Is_end(make_index_sequence<1 + sizeof...(_Rest)>{});\r\n            }\r\n\r\n            _NODISCARD friend constexpr auto operator<=>(const _Iterator& _Left, const _Iterator& _Right)\r\n                requires _All_random_access<_Const, _First, _Rest...>\r\n            {\r\n                return _Left._Current <=> _Right._Current;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const _Iterator& _It, const difference_type _Off)\r\n                requires _Cartesian_product_is_random_access<_Const, _First, _Rest...>\r\n            {\r\n                return _Iterator{_It} += _Off;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator+(const difference_type _Off, const _Iterator& _It)\r\n                requires _Cartesian_product_is_random_access<_Const, _First, _Rest...>\r\n            {\r\n                return _It + _Off;\r\n            }\r\n\r\n            _NODISCARD friend constexpr _Iterator operator-(const _Iterator& _It, const difference_type _Off)\r\n                requires _Cartesian_product_is_random_access<_Const, _First, _Rest...>\r\n            {\r\n                return _Iterator{_It} -= _Off;\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(const _Iterator& _Left, const _Iterator& _Right)\r\n                requires _Cartesian_is_sized_sentinel<_Const, iterator_t, _First, _Rest...>\r\n            {\r\n                return _Left._Distance_from(_Right._Current);\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(const _Iterator& _It, default_sentinel_t)\r\n                requires _Cartesian_is_sized_sentinel<_Const, sentinel_t, _First, _Rest...>\r\n            {\r\n                return _It._Distance_from(_It._End_tuple(make_index_sequence<sizeof...(_Rest)>{}));\r\n            }\r\n\r\n            _NODISCARD friend constexpr difference_type operator-(default_sentinel_t _Se, const _Iterator& _It)\r\n                requires _Cartesian_is_sized_sentinel<_Const, sentinel_t, _First, _Rest...>\r\n            {\r\n                return -(_It - _Se);\r\n            }\r\n\r\n            _NODISCARD friend constexpr auto iter_move(const _Iterator& _It)\r\n                noexcept(_Is_iter_move_nothrow(make_index_sequence<1 + sizeof...(_Rest)>{})) {\r\n                return _RANGES _Tuple_transform(_RANGES iter_move, _It._Current);\r\n            }\r\n\r\n            friend constexpr void iter_swap(const _Iterator& _Left, const _Iterator& _Right)\r\n                noexcept(_Is_iter_swap_nothrow(make_index_sequence<1 + sizeof...(_Rest)>{}))\r\n                requires (indirectly_swappable<iterator_t<_Maybe_const<_Const, _First>>> && ...\r\n                          && indirectly_swappable<iterator_t<_Maybe_const<_Const, _Rest>>>)\r\n            {\r\n                [&]<size_t... _Indices>(index_sequence<_Indices...>) {\r\n                    (_RANGES iter_swap(_STD get<_Indices>(_Left._Current), _STD get<_Indices>(_Right._Current)), ...);\r\n                }(make_index_sequence<1 + sizeof...(_Rest)>{});\r\n            }\r\n        };\r\n\r\n        template <size_t _Index>\r\n        _NODISCARD constexpr auto _Begin_or_first_end([[maybe_unused]] const bool _Is_empty) {\r\n            if constexpr (_Index == 0) {\r\n                return _Is_empty ? _RANGES begin(_STD get<_Index>(_Bases))\r\n                                 : _Cartesian_common_arg_end(_STD get<_Index>(_Bases));\r\n            } else {\r\n                return _RANGES begin(_STD get<_Index>(_Bases));\r\n            }\r\n        }\r\n\r\n        template <size_t _Index>\r\n        _NODISCARD constexpr auto _Begin_or_first_end([[maybe_unused]] const bool _Is_empty) const {\r\n            if constexpr (_Index == 0) {\r\n                return _Is_empty ? _RANGES begin(_STD get<_Index>(_Bases))\r\n                                 : _Cartesian_common_arg_end(_STD get<_Index>(_Bases));\r\n            } else {\r\n                return _RANGES begin(_STD get<_Index>(_Bases));\r\n            }\r\n        }\r\n\r\n    public:\r\n        constexpr cartesian_product_view() = default;\r\n\r\n        constexpr explicit cartesian_product_view(_First _First_base, _Rest... _Other_bases) noexcept(\r\n            (is_nothrow_move_constructible_v<_First> && ... && is_nothrow_move_constructible_v<_Rest>) ) // strengthened\r\n            : _Bases(_STD move(_First_base), _STD move(_Other_bases)...) {}\r\n\r\n        _NODISCARD constexpr _Iterator<false> begin()\r\n            requires (!_Simple_view<_First> || ... || !_Simple_view<_Rest>)\r\n        {\r\n            return _Iterator<false>{*this, _RANGES _Tuple_transform(_RANGES begin, _Bases)};\r\n        }\r\n\r\n        _NODISCARD constexpr _Iterator<true> begin() const\r\n            requires (range<const _First> && ... && range<const _Rest>)\r\n        {\r\n            return _Iterator<true>{*this, _RANGES _Tuple_transform(_RANGES begin, _Bases)};\r\n        }\r\n\r\n        _NODISCARD constexpr _Iterator<false> end()\r\n            requires ((!_Simple_view<_First> || ... || !_Simple_view<_Rest>) && _Cartesian_product_is_common<_First>)\r\n        {\r\n            const bool _Is_empty = [&]<size_t... _Indices>(index_sequence<_Indices...>) {\r\n                return (_RANGES empty(_STD get<_Indices + 1>(_Bases)) || ... || false);\r\n            }(make_index_sequence<sizeof...(_Rest)>{});\r\n\r\n            const auto _Make_iter_tuple = [&]<size_t... _Indices>(index_sequence<_Indices...>) {\r\n                return tuple<iterator_t<_First>, iterator_t<_Rest>...>{_Begin_or_first_end<_Indices>(_Is_empty)...};\r\n            };\r\n            return _Iterator<false>{*this, _Make_iter_tuple(make_index_sequence<1 + sizeof...(_Rest)>{})};\r\n        }\r\n\r\n        _NODISCARD constexpr _Iterator<true> end() const\r\n            requires _Cartesian_product_is_common<const _First>\r\n        {\r\n            const bool _Is_empty = [&]<size_t... _Indices>(index_sequence<_Indices...>) {\r\n                return (_RANGES empty(_STD get<_Indices + 1>(_Bases)) || ... || false);\r\n            }(make_index_sequence<sizeof...(_Rest)>{});\r\n\r\n            const auto _Make_iter_tuple = [&]<size_t... _Indices>(index_sequence<_Indices...>) {\r\n                return tuple<iterator_t<const _First>, iterator_t<const _Rest>...>{\r\n                    _Begin_or_first_end<_Indices>(_Is_empty)...};\r\n            };\r\n            return _Iterator<true>{*this, _Make_iter_tuple(make_index_sequence<1 + sizeof...(_Rest)>{})};\r\n        }\r\n\r\n        _NODISCARD constexpr default_sentinel_t end() const noexcept {\r\n            return default_sentinel;\r\n        }\r\n\r\n        _NODISCARD constexpr auto size()\r\n            requires _Cartesian_product_is_sized<_First, _Rest...>\r\n        {\r\n            return [&]<size_t... _Indices>(index_sequence<_Indices...>) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                const array _Sizes   = {static_cast<_Size_type<false>>(_RANGES size(_STD get<_Indices>(_Bases)))...};\r\n                const bool _Any_zero = ((_Sizes[_Indices] == 0) || ...);\r\n                if (_Any_zero) {\r\n                    return _Size_type<false>{0};\r\n                }\r\n\r\n                _Size_type<false> _Product{1};\r\n                const bool _Overflow = (_Mul_overflow(_Product, _Sizes[_Indices], _Product) || ...);\r\n                _STL_VERIFY(!_Overflow, \"Size of cartesian product cannot be represented by size type (N4950 \"\r\n                                        \"[range.cartesian.view]/10).\");\r\n                return _Product;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL != 0 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n                return (static_cast<_Size_type<false>>(_RANGES size(_STD get<_Indices>(_Bases))) * ...);\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n            }(make_index_sequence<1 + sizeof...(_Rest)>{});\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const\r\n            requires _Cartesian_product_is_sized<const _First, const _Rest...>\r\n        {\r\n            return [&]<size_t... _Indices>(index_sequence<_Indices...>) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                const array _Sizes   = {static_cast<_Size_type<true>>(_RANGES size(_STD get<_Indices>(_Bases)))...};\r\n                const bool _Any_zero = ((_Sizes[_Indices] == 0) || ...);\r\n                if (_Any_zero) {\r\n                    return _Size_type<true>{0};\r\n                }\r\n\r\n                _Size_type<true> _Product{1};\r\n                const bool _Overflow = (_Mul_overflow(_Product, _Sizes[_Indices], _Product) || ...);\r\n                _STL_VERIFY(!_Overflow, \"Size of cartesian product cannot be represented by size type (N4950 \"\r\n                                        \"[range.cartesian.view]/10).\");\r\n                return _Product;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL != 0 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n                return (static_cast<_Size_type<true>>(_RANGES size(_STD get<_Indices>(_Bases))) * ...);\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n            }(make_index_sequence<1 + sizeof...(_Rest)>{});\r\n        }\r\n    };\r\n\r\n    template <class... _Rngs>\r\n    cartesian_product_view(_Rngs&&...) -> cartesian_product_view<views::all_t<_Rngs>...>;\r\n\r\n    template <class... _Rngs>\r\n    _NODISCARD consteval auto _Cartesian_product_view_compile_time_max_size() {\r\n        using _Size_type = common_type_t<decltype(_Cartesian_product_optimal_size_type<_Rngs...>()),\r\n            decltype(_Compile_time_max_size<_Rngs>)...>;\r\n        _Size_type _Result{1};\r\n        const bool _Overflow =\r\n            (_Mul_overflow(static_cast<_Size_type>(_Compile_time_max_size<_Rngs>), _Result, _Result) || ...);\r\n        if (_Overflow) {\r\n            return (numeric_limits<_Size_type>::max)();\r\n        } else {\r\n            return _Result;\r\n        }\r\n    }\r\n\r\n    template <class... _Rngs>\r\n    constexpr auto _Compile_time_max_size<cartesian_product_view<_Rngs...>> =\r\n        _Cartesian_product_view_compile_time_max_size<_Rngs...>();\r\n\r\n    template <class... _Rngs>\r\n    constexpr auto _Compile_time_max_size<const cartesian_product_view<_Rngs...>> =\r\n        _Cartesian_product_view_compile_time_max_size<const _Rngs...>();\r\n\r\n    namespace views {\r\n        struct _Cartesian_product_fn {\r\n            _NODISCARD static constexpr auto operator()() noexcept {\r\n                return views::single(tuple{});\r\n            }\r\n\r\n            template <class... _Rngs>\r\n            _NODISCARD static constexpr auto operator()(_Rngs&&... _Ranges)\r\n                noexcept(noexcept(cartesian_product_view<views::all_t<_Rngs>...>{_STD forward<_Rngs>(_Ranges)...}))\r\n                requires requires { cartesian_product_view<views::all_t<_Rngs>...>{_STD forward<_Rngs>(_Ranges)...}; }\r\n            {\r\n                return cartesian_product_view<views::all_t<_Rngs>...>{_STD forward<_Rngs>(_Ranges)...};\r\n            }\r\n        };\r\n\r\n        _EXPORT_STD inline constexpr _Cartesian_product_fn cartesian_product;\r\n    } // namespace views\r\n#endif // _HAS_CXX23\r\n} // namespace ranges\r\n\r\n_EXPORT_STD namespace views = ranges::views;\r\n\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _RANGES_\r\n"
  },
  {
    "path": "stl/inc/ratio",
    "content": "// ratio standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _RATIO_\r\n#define _RATIO_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <cstdint>\r\n#include <type_traits>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\n_NODISCARD constexpr intmax_t _Abs(const intmax_t _Val) noexcept {\r\n    return _Val < 0 ? -_Val : _Val;\r\n}\r\n\r\ntemplate <intmax_t _Ax, intmax_t _Bx, bool _Sfinae = false,\r\n    bool _Good = _Abs(_Ax) <= INTMAX_MAX / (_Bx == 0 ? 1 : _Abs(_Bx))>\r\nstruct _Safe_mult : integral_constant<intmax_t, _Ax * _Bx> {}; // computes _Ax * _Bx without overflow\r\n\r\ntemplate <intmax_t _Ax, intmax_t _Bx, bool _Sfinae>\r\nstruct _Safe_mult<_Ax, _Bx, _Sfinae, false> { // _Ax * _Bx would overflow\r\n    static_assert(_Sfinae, \"integer arithmetic overflow\");\r\n};\r\n\r\n_NODISCARD constexpr intmax_t _Sign_of(const intmax_t _Val) noexcept {\r\n    return _Val < 0 ? -1 : 1;\r\n}\r\n\r\ninline void _Safe_add_integer_arithmetic_overflow_error() noexcept {}\r\n\r\n_NODISCARD constexpr intmax_t _Safe_add(const intmax_t _Ax, const intmax_t _Bx) noexcept {\r\n    if (_Sign_of(_Ax) == _Sign_of(_Bx) && _Abs(_Ax) > INTMAX_MAX - _Abs(_Bx)) {\r\n        _Safe_add_integer_arithmetic_overflow_error();\r\n    }\r\n\r\n    return _Ax + _Bx;\r\n}\r\n\r\n_NODISCARD constexpr intmax_t _Gcd(intmax_t _Ax, intmax_t _Bx) noexcept {\r\n    // computes GCD of abs(_Ax) and abs(_Bx)\r\n    if (_Ax == 0 && _Bx == 0) {\r\n        return 1; // contrary to mathematical convention; avoids division by 0 in ratio_less\r\n    }\r\n\r\n    _Ax = _Abs(_Ax);\r\n    _Bx = _Abs(_Bx);\r\n\r\n    while (_Bx != 0) {\r\n        const intmax_t _Ax2 = _Ax;\r\n        _Ax                 = _Bx;\r\n        _Bx                 = _Ax2 % _Bx;\r\n    }\r\n\r\n    return _Ax;\r\n}\r\n\r\n_EXPORT_STD template <intmax_t _Nx, intmax_t _Dx = 1>\r\nstruct _NO_SPECIALIZATIONS_CITING(\"N5014 [namespace.std]/2.1\") ratio { // holds the ratio of _Nx to _Dx\r\n    static_assert(_Dx != 0, \"zero denominator\");\r\n    static_assert(-INTMAX_MAX <= _Nx, \"numerator too negative\");\r\n    static_assert(-INTMAX_MAX <= _Dx, \"denominator too negative\");\r\n\r\n    static constexpr intmax_t num = _Sign_of(_Nx) * _Sign_of(_Dx) * _Abs(_Nx) / _Gcd(_Nx, _Dx);\r\n    static constexpr intmax_t den = _Abs(_Dx) / _Gcd(_Nx, _Dx);\r\n\r\n    using type = ratio<num, den>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_ratio_v = false; // test for ratio type\r\n\r\ntemplate <intmax_t _Rx1, intmax_t _Rx2>\r\nconstexpr bool _Is_ratio_v<ratio<_Rx1, _Rx2>> = true;\r\n\r\ntemplate <class _Rx1, class _Rx2>\r\nstruct _Ratio_add { // add two ratios\r\n    static_assert(_Is_ratio_v<_Rx1> && _Is_ratio_v<_Rx2>, \"ratio_add<R1, R2> requires R1 and R2 to be ratio<>s.\");\r\n\r\n    static constexpr intmax_t _Nx1 = _Rx1::num;\r\n    static constexpr intmax_t _Dx1 = _Rx1::den;\r\n    static constexpr intmax_t _Nx2 = _Rx2::num;\r\n    static constexpr intmax_t _Dx2 = _Rx2::den;\r\n\r\n    static constexpr intmax_t _Gx = _Gcd(_Dx1, _Dx2);\r\n\r\n    // typename ratio<>::type is necessary here\r\n    using type = typename ratio<_Safe_add(_Safe_mult<_Nx1, _Dx2 / _Gx>::value, _Safe_mult<_Nx2, _Dx1 / _Gx>::value),\r\n        _Safe_mult<_Dx1, _Dx2 / _Gx>::value>::type;\r\n};\r\n\r\n_EXPORT_STD template <class _Rx1, class _Rx2>\r\nusing ratio_add = typename _Ratio_add<_Rx1, _Rx2>::type;\r\n\r\ntemplate <class _Rx1, class _Rx2>\r\nstruct _Ratio_subtract { // subtract two ratios\r\n    static_assert(_Is_ratio_v<_Rx1> && _Is_ratio_v<_Rx2>, \"ratio_subtract<R1, R2> requires R1 and R2 to be ratio<>s.\");\r\n\r\n    static constexpr intmax_t _Nx2 = _Rx2::num;\r\n    static constexpr intmax_t _Dx2 = _Rx2::den;\r\n\r\n    using type = ratio_add<_Rx1, ratio<-_Nx2, _Dx2>>;\r\n};\r\n\r\n_EXPORT_STD template <class _Rx1, class _Rx2>\r\nusing ratio_subtract = typename _Ratio_subtract<_Rx1, _Rx2>::type;\r\n\r\ntemplate <class _Rx1, class _Rx2>\r\nstruct _Ratio_multiply { // multiply two ratios\r\n    static_assert(_Is_ratio_v<_Rx1> && _Is_ratio_v<_Rx2>, \"ratio_multiply<R1, R2> requires R1 and R2 to be ratio<>s.\");\r\n\r\n    static constexpr intmax_t _Nx1 = _Rx1::num;\r\n    static constexpr intmax_t _Dx1 = _Rx1::den;\r\n    static constexpr intmax_t _Nx2 = _Rx2::num;\r\n    static constexpr intmax_t _Dx2 = _Rx2::den;\r\n\r\n    static constexpr intmax_t _Gx = _Gcd(_Nx1, _Dx2);\r\n    static constexpr intmax_t _Gy = _Gcd(_Nx2, _Dx1);\r\n\r\n    using _Num = _Safe_mult<_Nx1 / _Gx, _Nx2 / _Gy, true>;\r\n    using _Den = _Safe_mult<_Dx1 / _Gy, _Dx2 / _Gx, true>;\r\n};\r\n\r\ntemplate <class _Rx1, class _Rx2, bool _Sfinae = true, class = void>\r\nstruct _Ratio_multiply_sfinae { // detect overflow during multiplication\r\n    static_assert(_Sfinae, \"integer arithmetic overflow\");\r\n};\r\n\r\ntemplate <class _Rx1, class _Rx2, bool _Sfinae>\r\nstruct _Ratio_multiply_sfinae<_Rx1, _Rx2, _Sfinae,\r\n    void_t<typename _Ratio_multiply<_Rx1, _Rx2>::_Num::type,\r\n        typename _Ratio_multiply<_Rx1, _Rx2>::_Den::type>> { // typename ratio<>::type is unnecessary here\r\n    using type = ratio<_Ratio_multiply<_Rx1, _Rx2>::_Num::value, _Ratio_multiply<_Rx1, _Rx2>::_Den::value>;\r\n};\r\n\r\n_EXPORT_STD template <class _Rx1, class _Rx2>\r\nusing ratio_multiply = typename _Ratio_multiply_sfinae<_Rx1, _Rx2, false>::type;\r\n\r\ntemplate <class _Rx1, class _Rx2>\r\nstruct _Ratio_divide { // divide two ratios\r\n    static_assert(_Is_ratio_v<_Rx1> && _Is_ratio_v<_Rx2>, \"ratio_divide<R1, R2> requires R1 and R2 to be ratio<>s.\");\r\n\r\n    static constexpr intmax_t _Nx2 = _Rx2::num;\r\n    static constexpr intmax_t _Dx2 = _Rx2::den;\r\n\r\n    using _Rx2_inverse = ratio<_Dx2, _Nx2>;\r\n};\r\n\r\ntemplate <class _Rx1, class _Rx2, bool _Sfinae = true>\r\nusing _Ratio_divide_sfinae =\r\n    typename _Ratio_multiply_sfinae<_Rx1, typename _Ratio_divide<_Rx1, _Rx2>::_Rx2_inverse, _Sfinae>::type;\r\n\r\n_EXPORT_STD template <class _Rx1, class _Rx2>\r\nusing ratio_divide = _Ratio_divide_sfinae<_Rx1, _Rx2, false>;\r\n\r\n_EXPORT_STD template <class _Rx1, class _Rx2>\r\nstruct ratio_equal : bool_constant<_Rx1::num == _Rx2::num && _Rx1::den == _Rx2::den> { // tests if ratio == ratio\r\n    static_assert(_Is_ratio_v<_Rx1> && _Is_ratio_v<_Rx2>, \"ratio_equal<R1, R2> requires R1 and R2 to be ratio<>s.\");\r\n};\r\n\r\n_EXPORT_STD template <class _Rx1, class _Rx2>\r\n_NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES constexpr bool ratio_equal_v = ratio_equal<_Rx1, _Rx2>::value;\r\n\r\n_EXPORT_STD template <class _Rx1, class _Rx2>\r\nstruct ratio_not_equal : bool_constant<!ratio_equal_v<_Rx1, _Rx2>> { // tests if ratio != ratio\r\n    static_assert(_Is_ratio_v<_Rx1> && _Is_ratio_v<_Rx2>, \"ratio_not_equal<R1, R2> requires R1 and R2 to be ratio<>s.\");\r\n};\r\n\r\n_EXPORT_STD template <class _Rx1, class _Rx2>\r\n_NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES constexpr bool ratio_not_equal_v = ratio_not_equal<_Rx1, _Rx2>::value;\r\n\r\nstruct _Big_uint128 {\r\n    uint64_t _Upper;\r\n    uint64_t _Lower;\r\n\r\n    _NODISCARD constexpr bool operator<(const _Big_uint128 _Rhs) const noexcept {\r\n        if (_Upper != _Rhs._Upper) {\r\n            return _Upper < _Rhs._Upper;\r\n        }\r\n\r\n        return _Lower < _Rhs._Lower;\r\n    }\r\n};\r\n\r\nconstexpr _Big_uint128 _Big_multiply(const uint64_t _Lfactor,\r\n    const uint64_t _Rfactor) noexcept { // multiply two 64-bit integers into a 128-bit integer, Knuth's algorithm M\r\n    const uint64_t _Llow  = _Lfactor & 0xFFFF'FFFFULL;\r\n    const uint64_t _Lhigh = _Lfactor >> 32;\r\n    const uint64_t _Rlow  = _Rfactor & 0xFFFF'FFFFULL;\r\n    const uint64_t _Rhigh = _Rfactor >> 32;\r\n\r\n    uint64_t _Temp          = _Llow * _Rlow;\r\n    const uint64_t _Lower32 = _Temp & 0xFFFF'FFFFULL;\r\n    uint64_t _Carry         = _Temp >> 32;\r\n\r\n    _Temp                     = _Llow * _Rhigh + _Carry;\r\n    const uint64_t _Mid_lower = _Temp & 0xFFFF'FFFFULL;\r\n    const uint64_t _Mid_upper = _Temp >> 32;\r\n\r\n    _Temp  = _Lhigh * _Rlow + _Mid_lower;\r\n    _Carry = _Temp >> 32;\r\n\r\n    return {_Lhigh * _Rhigh + _Mid_upper + _Carry, (_Temp << 32) + _Lower32};\r\n}\r\n\r\nconstexpr bool _Ratio_less(const int64_t _Nx1, const int64_t _Dx1, const int64_t _Nx2, const int64_t _Dx2) noexcept {\r\n    if (_Nx1 >= 0 && _Nx2 >= 0) {\r\n        return _Big_multiply(static_cast<uint64_t>(_Nx1), static_cast<uint64_t>(_Dx2))\r\n             < _Big_multiply(static_cast<uint64_t>(_Nx2), static_cast<uint64_t>(_Dx1));\r\n    }\r\n\r\n    if (_Nx1 < 0 && _Nx2 < 0) {\r\n        return _Big_multiply(static_cast<uint64_t>(-_Nx2), static_cast<uint64_t>(_Dx1))\r\n             < _Big_multiply(static_cast<uint64_t>(-_Nx1), static_cast<uint64_t>(_Dx2));\r\n    }\r\n\r\n    return _Nx1 < _Nx2;\r\n}\r\n\r\n_EXPORT_STD template <class _Rx1, class _Rx2>\r\nstruct ratio_less : bool_constant<_Ratio_less(_Rx1::num, _Rx1::den, _Rx2::num, _Rx2::den)> { // tests if ratio < ratio\r\n    static_assert(_Is_ratio_v<_Rx1> && _Is_ratio_v<_Rx2>, \"ratio_less<R1, R2> requires R1 and R2 to be ratio<>s.\");\r\n};\r\n\r\n_EXPORT_STD template <class _Rx1, class _Rx2>\r\n_NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES constexpr bool ratio_less_v = ratio_less<_Rx1, _Rx2>::value;\r\n\r\n_EXPORT_STD template <class _Rx1, class _Rx2>\r\nstruct ratio_less_equal : bool_constant<!ratio_less_v<_Rx2, _Rx1>> { // tests if ratio <= ratio\r\n    static_assert(\r\n        _Is_ratio_v<_Rx1> && _Is_ratio_v<_Rx2>, \"ratio_less_equal<R1, R2> requires R1 and R2 to be ratio<>s.\");\r\n};\r\n\r\n_EXPORT_STD template <class _Rx1, class _Rx2>\r\n_NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES constexpr bool ratio_less_equal_v = ratio_less_equal<_Rx1, _Rx2>::value;\r\n\r\n_EXPORT_STD template <class _Rx1, class _Rx2>\r\nstruct ratio_greater : ratio_less<_Rx2, _Rx1>::type { // tests if ratio > ratio\r\n    static_assert(_Is_ratio_v<_Rx1> && _Is_ratio_v<_Rx2>, \"ratio_greater<R1, R2> requires R1 and R2 to be ratio<>s.\");\r\n};\r\n\r\n_EXPORT_STD template <class _Rx1, class _Rx2>\r\n_NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES constexpr bool ratio_greater_v = ratio_greater<_Rx1, _Rx2>::value;\r\n\r\n_EXPORT_STD template <class _Rx1, class _Rx2>\r\nstruct ratio_greater_equal : bool_constant<!ratio_less_v<_Rx1, _Rx2>> { // tests if ratio >= ratio\r\n    static_assert(\r\n        _Is_ratio_v<_Rx1> && _Is_ratio_v<_Rx2>, \"ratio_greater_equal<R1, R2> requires R1 and R2 to be ratio<>s.\");\r\n};\r\n\r\n_EXPORT_STD template <class _Rx1, class _Rx2>\r\n_NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES constexpr bool ratio_greater_equal_v = ratio_greater_equal<_Rx1, _Rx2>::value;\r\n\r\n_EXPORT_STD using atto  = ratio<1, 1000000000000000000LL>;\r\n_EXPORT_STD using femto = ratio<1, 1000000000000000LL>;\r\n_EXPORT_STD using pico  = ratio<1, 1000000000000LL>;\r\n_EXPORT_STD using nano  = ratio<1, 1000000000>;\r\n_EXPORT_STD using micro = ratio<1, 1000000>;\r\n_EXPORT_STD using milli = ratio<1, 1000>;\r\n_EXPORT_STD using centi = ratio<1, 100>;\r\n_EXPORT_STD using deci  = ratio<1, 10>;\r\n_EXPORT_STD using deca  = ratio<10, 1>;\r\n_EXPORT_STD using hecto = ratio<100, 1>;\r\n_EXPORT_STD using kilo  = ratio<1000, 1>;\r\n_EXPORT_STD using mega  = ratio<1000000, 1>;\r\n_EXPORT_STD using giga  = ratio<1000000000, 1>;\r\n_EXPORT_STD using tera  = ratio<1000000000000LL, 1>;\r\n_EXPORT_STD using peta  = ratio<1000000000000000LL, 1>;\r\n_EXPORT_STD using exa   = ratio<1000000000000000000LL, 1>;\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _RATIO_\r\n"
  },
  {
    "path": "stl/inc/regex",
    "content": "// regex standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _REGEX_\r\n#define _REGEX_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <algorithm>\r\n#include <cctype>\r\n#include <climits>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <cwchar>\r\n#include <iterator>\r\n#include <locale>\r\n#include <memory>\r\n#include <stdexcept>\r\n#include <string>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#if _HAS_CXX17\r\n#include <xpolymorphic_allocator.h>\r\n#endif // _HAS_CXX17\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// Controls whether LWG-2503 \"multiline option should be added to syntax_option_type\" is implemented.\r\n// Defining this to 0 requests Standard behavior:\r\n// * For ECMAScript, matching is non-multiline by default, but regex_constants::multiline can be requested.\r\n// * For POSIX grammars, matching is non-multiline, and regex_constants::multiline is ignored (N5008 [tab:re.synopt]).\r\n// Defining this to 1 requests legacy behavior:\r\n// * For all grammars, matching is multiline, and regex_constants::multiline is redundant.\r\n#ifndef _REGEX_LEGACY_MULTILINE_MODE\r\n#define _REGEX_LEGACY_MULTILINE_MODE 0\r\n#endif\r\n\r\n#ifndef _ENHANCED_REGEX_VISUALIZER\r\n#ifdef _DEBUG\r\n#define _ENHANCED_REGEX_VISUALIZER 1\r\n#else // ^^^ defined(_DEBUG) / !defined(_DEBUG) vvv\r\n#define _ENHANCED_REGEX_VISUALIZER 0\r\n#endif // ^^^ !defined(_DEBUG) ^^^\r\n#endif // !defined(_ENHANCED_REGEX_VISUALIZER)\r\n\r\n#if defined(_CPPRTTI) && !defined(_M_CEE_PURE)\r\nextern \"C\" {\r\n_STD size_t __stdcall __std_regex_transform_primary_char(\r\n    _Out_writes_(_Last1 - _First1) _Post_readable_size_(return) char* _First1, char* _Last1,\r\n    _In_reads_(_Last2 - _First2) const char* _First2, const char* _Last2, _In_opt_ const _Collvec*) noexcept;\r\n_STD size_t __stdcall __std_regex_transform_primary_wchar_t(\r\n    _Out_writes_(_Last1 - _First1) _Post_readable_size_(return) wchar_t* _First1, wchar_t* _Last1,\r\n    _In_reads_(_Last2 - _First2) const wchar_t* _First2, const wchar_t* _Last2, _In_opt_ const _Collvec*) noexcept;\r\n} // extern \"C\"\r\n#endif // ^^^ defined(_CPPRTTI) && !defined(_M_CEE_PURE) ^^^\r\n\r\n_STD_BEGIN\r\n\r\nenum _Meta_type : int { // meta character representations for parser\r\n    _Meta_lpar  = '(',\r\n    _Meta_rpar  = ')',\r\n    _Meta_dlr   = '$',\r\n    _Meta_caret = '^',\r\n    _Meta_dot   = '.',\r\n    _Meta_star  = '*',\r\n    _Meta_plus  = '+',\r\n    _Meta_query = '?',\r\n    _Meta_lsq   = '[',\r\n    _Meta_rsq   = ']',\r\n    _Meta_bar   = '|',\r\n    _Meta_esc   = '\\\\',\r\n    _Meta_dash  = '-',\r\n    _Meta_lbr   = '{',\r\n    _Meta_rbr   = '}',\r\n    _Meta_comma = ',',\r\n    _Meta_colon = ':',\r\n    _Meta_equal = '=',\r\n    _Meta_exc   = '!',\r\n    _Meta_eos   = -1,\r\n    _Meta_nl    = '\\n',\r\n    _Meta_cr    = '\\r',\r\n    _Meta_bsp   = '\\b',\r\n    _Meta_ls    = L'\\u2028',\r\n    _Meta_ps    = L'\\u2029',\r\n    _Meta_chr   = 0,\r\n\r\n    _Esc_bsl      = '\\\\',\r\n    _Esc_word     = 'b',\r\n    _Esc_not_word = 'B',\r\n    _Esc_ctrl_a   = 'a',\r\n    _Esc_ctrl_b   = 'b',\r\n    _Esc_ctrl_f   = 'f',\r\n    _Esc_ctrl_n   = 'n',\r\n    _Esc_ctrl_r   = 'r',\r\n    _Esc_ctrl_t   = 't',\r\n    _Esc_ctrl_v   = 'v',\r\n    _Esc_ctrl     = 'c',\r\n    _Esc_hex      = 'x',\r\n    _Esc_uni      = 'u'\r\n};\r\n\r\nnamespace regex_constants {\r\n    // constants used in regular expressions\r\n    _EXPORT_STD enum syntax_option_type : int { // specify RE syntax rules\r\n        ECMAScript = 0x01,\r\n        basic      = 0x02,\r\n        extended   = 0x04,\r\n        awk        = 0x08,\r\n        grep       = 0x10,\r\n        egrep      = 0x20,\r\n        _Gmask     = 0x3F,\r\n        _Any_posix = basic | extended | grep | egrep | awk,\r\n\r\n        icase     = 0x0100,\r\n        nosubs    = 0x0200,\r\n        optimize  = 0x0400,\r\n        collate   = 0x0800,\r\n        multiline = 0x1000\r\n    };\r\n\r\n    _BITMASK_OPS(_EXPORT_STD, syntax_option_type)\r\n\r\n    _EXPORT_STD enum match_flag_type : int { // specify matching and formatting rules\r\n        match_default     = 0x0000,\r\n        match_not_bol     = 0x0001,\r\n        match_not_eol     = 0x0002,\r\n        match_not_bow     = 0x0004,\r\n        match_not_eow     = 0x0008,\r\n        match_any         = 0x0010,\r\n        match_not_null    = 0x0020,\r\n        match_continuous  = 0x0040,\r\n        match_prev_avail  = 0x0100,\r\n        format_default    = 0x0000,\r\n        format_sed        = 0x0400,\r\n        format_no_copy    = 0x0800,\r\n        format_first_only = 0x1000,\r\n        _Match_not_null   = 0x2000,\r\n        _Skip_zero_length = 0x4000,\r\n    };\r\n\r\n    _BITMASK_OPS(_EXPORT_STD, match_flag_type)\r\n\r\n    _EXPORT_STD enum error_type { // identify error\r\n        error_collate,\r\n        error_ctype,\r\n        error_escape,\r\n        error_backref,\r\n        error_brack,\r\n        error_paren,\r\n        error_brace,\r\n        error_badbrace,\r\n        error_range,\r\n        error_space,\r\n        error_badrepeat,\r\n        error_complexity,\r\n        error_stack,\r\n        _Error_parse, // TRANSITION, was error_parse, keeping behavior\r\n        _Error_syntax // TRANSITION, was error_syntax, keeping behavior\r\n    };\r\n} // namespace regex_constants\r\n\r\nextern \"C++\" [[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xregex_error(regex_constants::error_type _Code);\r\n\r\n_EXPORT_STD template <class _Elem>\r\nclass regex_traits;\r\n\r\nstruct _Cl_names { // structure to associate class name with mask value\r\n    const char* _Narrow;\r\n    const wchar_t* _Wide;\r\n    unsigned int _Len;\r\n    ctype_base::mask _Ctype;\r\n\r\n    template <class _Elem>\r\n    _NODISCARD const _Elem* _Get() const noexcept {\r\n        if constexpr (is_same_v<_Elem, char>) {\r\n            return _Narrow;\r\n        } else {\r\n            return _Wide;\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _CharT>\r\nstruct _Std_char_traits_eq {\r\n    static bool operator()(_CharT _Left, _CharT _Right) noexcept {\r\n        return char_traits<_CharT>::eq(_Left, _Right);\r\n    }\r\n};\r\n\r\ntemplate <class _CharT>\r\nstruct _Std_char_traits_lt {\r\n    static bool operator()(_CharT _Left, _CharT _Right) noexcept {\r\n        return char_traits<_CharT>::lt(_Left, _Right);\r\n    }\r\n};\r\n\r\n// signed char and other unsigned integral types are supported as an extension.\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_predefined_char_like_type = _Is_character<_Ty>::value || is_unsigned_v<_Ty>;\r\n\r\n// library-provided char_traits::eq behaves like equal_to<_Elem>\r\ntemplate <class _Elem>\r\nconstexpr bool _Can_memcmp_elements_with_pred<_Elem, _Elem, _Std_char_traits_eq<_Elem>> =\r\n    _Is_predefined_char_like_type<_Elem> && _Can_memcmp_elements<_Elem, _Elem>;\r\n\r\ntemplate <class _Elem, bool = _Is_predefined_char_like_type<_Elem>>\r\nstruct _Lex_compare_memcmp_classify_pred_for_std_char_traits_lt {\r\n    using _UElem = make_unsigned_t<_Elem>;\r\n    using _Pred  = conditional_t<_Lex_compare_memcmp_classify_elements<_UElem, _UElem>, less<int>, void>;\r\n};\r\ntemplate <class _Elem>\r\nstruct _Lex_compare_memcmp_classify_pred_for_std_char_traits_lt<_Elem, false> {\r\n    using _Pred = void;\r\n};\r\n\r\n// library-provided char_traits::lt behaves like less<make_unsigned_t<_Elem>>\r\ntemplate <class _Elem>\r\nstruct _Lex_compare_memcmp_classify_pred<_Elem, _Elem, _Std_char_traits_lt<_Elem>>\r\n    : _Lex_compare_memcmp_classify_pred_for_std_char_traits_lt<_Elem> {};\r\n\r\ntemplate <class _RxTraits>\r\nstruct _Cmp_icase { // functor to compare for equality following case-insensitive translation of both characters\r\n    using _Elem = typename _RxTraits::char_type;\r\n\r\n    explicit _Cmp_icase(const _RxTraits& _Tr) noexcept : _Traits(_Tr) {}\r\n\r\n    bool operator()(_Elem _Ex1, _Elem _Ex2) const {\r\n        return _Traits.translate_nocase(_Ex1) == _Traits.translate_nocase(_Ex2);\r\n    }\r\n\r\n    const _RxTraits& _Traits;\r\n};\r\n\r\ntemplate <class _RxTraits>\r\nstruct _Cmp_collate { // functor to compare for equality following collating translation of both characters\r\n    using _Elem = typename _RxTraits::char_type;\r\n\r\n    explicit _Cmp_collate(const _RxTraits& _Tr) noexcept : _Traits(_Tr) {}\r\n\r\n    bool operator()(_Elem _Ex1, _Elem _Ex2) const {\r\n        return _Traits.translate(_Ex1) == _Traits.translate(_Ex2);\r\n    }\r\n\r\n    const _RxTraits& _Traits;\r\n};\r\n\r\ntemplate <class _RxTraits>\r\nstruct _Cmp_icase_translateleft {\r\n    // functor to compare for equality following case-insensitive translation of the left character\r\n    using _Elem = typename _RxTraits::char_type;\r\n\r\n    explicit _Cmp_icase_translateleft(const _RxTraits& _Tr) noexcept : _Traits(_Tr) {}\r\n\r\n    bool operator()(_Elem _Ex1, _Elem _Ex2) const {\r\n        return _Traits.translate_nocase(_Ex1) == _Ex2;\r\n    }\r\n\r\n    const _RxTraits& _Traits;\r\n};\r\n\r\ntemplate <class _RxTraits>\r\nstruct _Cmp_collate_translateleft {\r\n    // functor to compare for equality following collating translation of the left character\r\n    using _Elem = typename _RxTraits::char_type;\r\n\r\n    explicit _Cmp_collate_translateleft(const _RxTraits& _Tr) noexcept : _Traits(_Tr) {}\r\n\r\n    bool operator()(_Elem _Ex1, _Elem _Ex2) const {\r\n        return _Traits.translate(_Ex1) == _Ex2;\r\n    }\r\n\r\n    const _RxTraits& _Traits;\r\n};\r\n\r\nstruct _Regex_traits_base { // base of all regular expression traits\r\n    enum _Char_class_type {\r\n        _Ch_alnum  = ctype_base::alnum,\r\n        _Ch_alpha  = ctype_base::alpha,\r\n        _Ch_cntrl  = ctype_base::cntrl,\r\n        _Ch_digit  = ctype_base::digit,\r\n        _Ch_graph  = ctype_base::graph,\r\n        _Ch_lower  = ctype_base::lower,\r\n        _Ch_print  = ctype_base::print,\r\n        _Ch_punct  = ctype_base::punct,\r\n        _Ch_space  = ctype_base::space,\r\n        _Ch_upper  = ctype_base::upper,\r\n        _Ch_xdigit = ctype_base::xdigit,\r\n        _Ch_blank  = ctype_base::blank\r\n    };\r\n    using char_class_type = ctype_base::mask;\r\n};\r\n\r\n#if defined(_CPPRTTI) && !defined(_M_CEE_PURE)\r\ninline size_t _Regex_transform_primary(_Out_writes_(_Last1 - _First1) _Post_readable_size_(return) char* _First1,\r\n    char* _Last1, _In_reads_(_Last2 - _First2) const char* _First2, const char* _Last2,\r\n    _In_opt_ const _Locinfo::_Collvec* _Vector) noexcept {\r\n    return __std_regex_transform_primary_char(_First1, _Last1, _First2, _Last2, _Vector);\r\n}\r\n\r\ninline size_t _Regex_transform_primary(_Out_writes_(_Last1 - _First1) _Post_readable_size_(return) wchar_t* _First1,\r\n    wchar_t* _Last1, _In_reads_(_Last2 - _First2) const wchar_t* _First2, const wchar_t* _Last2,\r\n    _In_opt_ const _Locinfo::_Collvec* _Vector) noexcept {\r\n    return __std_regex_transform_primary_wchar_t(_First1, _Last1, _First2, _Last2, _Vector);\r\n}\r\n#endif // ^^^ defined(_CPPRTTI) && !defined(_M_CEE_PURE) ^^^\r\n\r\ntemplate <class _Elem>\r\nclass _Regex_traits : public _Regex_traits_base { // base class for regular expression traits\r\npublic:\r\n    using char_type   = _Elem;\r\n    using size_type   = size_t;\r\n    using string_type = basic_string<_Elem>;\r\n    using locale_type = locale;\r\n\r\n    static size_type length(const _Elem* _Str) {\r\n        return char_traits<_Elem>::length(_Str);\r\n    }\r\n\r\n    _Regex_traits() {\r\n        _Cache_locale();\r\n    }\r\n\r\n    _Regex_traits(const _Regex_traits& _Right) : _Loc(_Right._Loc) {\r\n        _Cache_locale();\r\n    }\r\n\r\n    _Regex_traits& operator=(const _Regex_traits& _Right) {\r\n        _Loc = _Right._Loc;\r\n        _Cache_locale();\r\n        return *this;\r\n    }\r\n\r\n    _Elem translate(_Elem _Ch) const { // provide locale-sensitive mapping\r\n        return _Ch;\r\n    }\r\n\r\n    _Elem translate_nocase(_Elem _Ch) const { // provide case-insensitive mapping\r\n        return _Getctype()->tolower(_Ch);\r\n    }\r\n\r\n    template <class _FwdIt>\r\n    string_type transform(_FwdIt _First, _FwdIt _Last) const { // apply locale-specific transformation\r\n        const string_type _Str(_First, _Last);\r\n        return _Getcoll()->transform(_Str.data(), _Str.data() + _Str.size());\r\n    }\r\n\r\n    template <class _FwdIt>\r\n    string_type transform_primary(_FwdIt _First, _FwdIt _Last) const {\r\n        // apply locale-specific case-insensitive transformation\r\n        string_type _Res;\r\n#if defined(_CPPRTTI) && !defined(_M_CEE_PURE)\r\n        if (_First != _Last) {\r\n            const collate<_Elem>* _Coll = _Getcoll();\r\n            const auto& _Coll_type      = typeid(*_Coll);\r\n            // TRANSITION, ABI: GH-5394: locale creates collate objects of type collate, not collate_byname.\r\n            // Depending on the resolution of LWG-2338, comparison to typeid(collate) might also become\r\n            // required by the standard.\r\n            if (_Coll_type == typeid(collate_byname<_Elem>) || _Coll_type == typeid(collate<_Elem>)) {\r\n                // non-empty string with known collate facet, transform it\r\n                const string_type _Src(_First, _Last);\r\n                const auto _Src_first = _Src.data();\r\n                const auto _Src_last  = _Src_first + _Src.size();\r\n\r\n                size_t _Count = _Src.size();\r\n                while (_Res.size() < _Count) {\r\n                    _Res.resize(_Count);\r\n                    _Count = _STD _Regex_transform_primary(\r\n                        &_Res[0], &_Res[0] + _Count, _Src_first, _Src_last, &_Coll->_Coll);\r\n\r\n                    if (_Count == static_cast<size_t>(-1)) {\r\n                        // return empty string in case of error\r\n                        _Count = 0;\r\n                        break;\r\n                    }\r\n                }\r\n                _Res.resize(_Count);\r\n            }\r\n        }\r\n#else // ^^^ defined(_CPPRTTI) && !defined(_M_CEE_PURE) / !defined(_CPPRTTI) || defined(_M_CEE_PURE) vvv\r\n        (void) _First;\r\n        (void) _Last;\r\n#endif // ^^^ !defined(_CPPRTTI) || defined(_M_CEE_PURE) ^^^\r\n        return _Res;\r\n    }\r\n\r\n    bool isctype(_Elem _Ch, char_class_type _Fx) const {\r\n        if (_Fx != static_cast<char_class_type>(-1)) {\r\n            return _Getctype()->is(_Fx, _Ch);\r\n        } else {\r\n            return _Ch == '_' // assumes L'_' == '_'\r\n                || _Getctype()->is(_Ch_alnum, _Ch);\r\n        }\r\n    }\r\n\r\n    template <class _Iter>\r\n    char_class_type lookup_classname(_Iter _First, _Iter _Last, bool _Icase = false) const {\r\n        // map [_First, _Last) to character class mask value\r\n#define _REGEX_CHAR_CLASS_NAME(n, c)                            \\\r\n    {                                                           \\\r\n        n, L##n, static_cast<unsigned int>(_STD size(n) - 1), c \\\r\n    }\r\n        static constexpr _Cl_names _Names[] = {\r\n            // map class names to numeric constants\r\n            _REGEX_CHAR_CLASS_NAME(\"alnum\", _Ch_alnum),\r\n            _REGEX_CHAR_CLASS_NAME(\"alpha\", _Ch_alpha),\r\n            _REGEX_CHAR_CLASS_NAME(\"blank\", _Ch_blank),\r\n            _REGEX_CHAR_CLASS_NAME(\"cntrl\", _Ch_cntrl),\r\n            _REGEX_CHAR_CLASS_NAME(\"d\", _Ch_digit),\r\n            _REGEX_CHAR_CLASS_NAME(\"digit\", _Ch_digit),\r\n            _REGEX_CHAR_CLASS_NAME(\"graph\", _Ch_graph),\r\n            _REGEX_CHAR_CLASS_NAME(\"lower\", _Ch_lower),\r\n            _REGEX_CHAR_CLASS_NAME(\"print\", _Ch_print),\r\n            _REGEX_CHAR_CLASS_NAME(\"punct\", _Ch_punct),\r\n            _REGEX_CHAR_CLASS_NAME(\"space\", _Ch_space),\r\n            _REGEX_CHAR_CLASS_NAME(\"s\", _Ch_space),\r\n            _REGEX_CHAR_CLASS_NAME(\"upper\", _Ch_upper),\r\n            _REGEX_CHAR_CLASS_NAME(\"w\", static_cast<ctype_base::mask>(-1)),\r\n            _REGEX_CHAR_CLASS_NAME(\"xdigit\", _Ch_xdigit),\r\n            {nullptr, nullptr, 0, 0},\r\n        };\r\n#undef _REGEX_CHAR_CLASS_NAME\r\n\r\n        _Adl_verify_range(_First, _Last);\r\n        unsigned int _Ix = 0;\r\n        for (; _Names[_Ix]._Get<_Elem>(); ++_Ix) {\r\n            if (_STD equal(_Get_unwrapped(_First), _Get_unwrapped(_Last), _Names[_Ix]._Get<_Elem>(),\r\n                    _Names[_Ix]._Get<_Elem>() + _Names[_Ix]._Len, _Cmp_icase<_Regex_traits<_Elem>>{*this})) {\r\n                break;\r\n            }\r\n        }\r\n\r\n        char_class_type _Mask{};\r\n        if (_Names[_Ix]._Get<_Elem>()) {\r\n            _Mask = _Names[_Ix]._Ctype;\r\n        }\r\n\r\n        if (_Icase && (_Mask & (_Ch_lower | _Ch_upper))) {\r\n            _Mask |= _Ch_lower | _Ch_upper;\r\n        }\r\n\r\n        return _Mask;\r\n    }\r\n\r\n    template <class _FwdIt>\r\n    string_type lookup_collatename(_FwdIt _First, _FwdIt _Last) const { // map [_First, _Last) to collation element\r\n        if (_First != _Last && _STD next(_First) == _Last) {\r\n            return string_type{_First, _Last};\r\n        }\r\n        return string_type{};\r\n    }\r\n\r\n    locale_type imbue(locale_type _Lx) { // store locale object\r\n        locale_type _Tmp = _Loc;\r\n        _Loc             = _Lx;\r\n        _Cache_locale();\r\n        return _Tmp;\r\n    }\r\n\r\n    locale_type getloc() const noexcept /* strengthened */ {\r\n        return _Loc;\r\n    }\r\n\r\n    const collate<_Elem>* _Getcoll() const noexcept { // get collate facet pointer\r\n        return _Pcoll;\r\n    }\r\n\r\n    const ctype<_Elem>* _Getctype() const noexcept { // get ctype facet pointer\r\n        return _Pctype;\r\n    }\r\n\r\nprivate:\r\n    void _Cache_locale() { // populate _Pcoll and _Pctype with _Loc locale\r\n        _Pcoll  = _STD addressof(_STD use_facet<collate<_Elem>>(_Loc));\r\n        _Pctype = _STD addressof(_STD use_facet<ctype<_Elem>>(_Loc));\r\n    }\r\n\r\n    const collate<_Elem>* _Pcoll;\r\n    const ctype<_Elem>* _Pctype;\r\n    locale_type _Loc;\r\n};\r\n\r\ntemplate <>\r\nclass regex_traits<char> : public _Regex_traits<char> {\r\npublic:\r\n    int value(char _Ch, int _Base) const { // map character value to numeric value\r\n        if ((_Base != 8 && '0' <= _Ch && _Ch <= '9') || (_Base == 8 && '0' <= _Ch && _Ch <= '7')) {\r\n            return _Ch - '0';\r\n        }\r\n\r\n        if (_Base != 16) {\r\n            return -1;\r\n        }\r\n\r\n        if ('a' <= _Ch && _Ch <= 'f') {\r\n            return _Ch - 'a' + 10;\r\n        }\r\n\r\n        if ('A' <= _Ch && _Ch <= 'F') {\r\n            return _Ch - 'A' + 10;\r\n        }\r\n\r\n        return -1;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nclass regex_traits<wchar_t> : public _Regex_traits<wchar_t> {\r\npublic:\r\n    int value(wchar_t _Ch, int _Base) const { // map character value to numeric value\r\n        if ((_Base != 8 && L'0' <= _Ch && _Ch <= L'9') || (_Base == 8 && L'0' <= _Ch && _Ch <= L'7')) {\r\n            return _Ch - L'0';\r\n        }\r\n\r\n        if (_Base != 16) {\r\n            return -1;\r\n        }\r\n\r\n        if (L'a' <= _Ch && _Ch <= L'f') {\r\n            return _Ch - L'a' + 10;\r\n        }\r\n\r\n        if (L'A' <= _Ch && _Ch <= L'F') {\r\n            return _Ch - L'A' + 10;\r\n        }\r\n\r\n        return -1;\r\n    }\r\n};\r\n\r\n_EXPORT_STD class _NODISCARD regex_error : public runtime_error { // type of all regular expression exceptions\r\npublic:\r\n    explicit regex_error(regex_constants::error_type _Ex) : runtime_error(_Stringify(_Ex)), _Err(_Ex) {}\r\n\r\n    _NODISCARD regex_constants::error_type code() const noexcept /* strengthened */ {\r\n        return _Err;\r\n    }\r\n\r\nprivate:\r\n    static const char* _Stringify(regex_constants::error_type _Ex) noexcept { // map error code to string\r\n        switch (_Ex) { // select known error_type message\r\n        case regex_constants::error_collate:\r\n            return \"regex_error(error_collate): The expression \"\r\n                   \"contained an invalid collating element name.\";\r\n        case regex_constants::error_ctype:\r\n            return \"regex_error(error_ctype): The expression \"\r\n                   \"contained an invalid character class name.\";\r\n        case regex_constants::error_escape:\r\n            return \"regex_error(error_escape): The expression \"\r\n                   \"contained an invalid escaped character, \"\r\n                   \"or a trailing escape.\";\r\n        case regex_constants::error_backref:\r\n            return \"regex_error(error_backref): The expression \"\r\n                   \"contained an invalid back reference.\";\r\n        case regex_constants::error_brack:\r\n            return \"regex_error(error_brack): The expression \"\r\n                   \"contained mismatched [ and ].\";\r\n        case regex_constants::error_paren:\r\n            return \"regex_error(error_paren): The expression \"\r\n                   \"contained mismatched ( and ).\";\r\n        case regex_constants::error_brace:\r\n            return \"regex_error(error_brace): The expression \"\r\n                   \"contained mismatched { and }.\";\r\n        case regex_constants::error_badbrace:\r\n            return \"regex_error(error_badbrace): The expression \"\r\n                   \"contained an invalid range in a {} expression.\";\r\n        case regex_constants::error_range:\r\n            return \"regex_error(error_range): The expression \"\r\n                   \"contained an invalid character range, \"\r\n                   \"such as [b-a] in most encodings.\";\r\n        case regex_constants::error_space:\r\n            return \"regex_error(error_space): There was insufficient \"\r\n                   \"memory to convert the expression into \"\r\n                   \"a finite state machine.\";\r\n        case regex_constants::error_badrepeat:\r\n            return \"regex_error(error_badrepeat): One of *?+{ \"\r\n                   \"was not preceded by a valid regular expression.\";\r\n        case regex_constants::error_complexity:\r\n            return \"regex_error(error_complexity): The complexity of \"\r\n                   \"an attempted match against a regular expression \"\r\n                   \"exceeded a pre-set level.\";\r\n        case regex_constants::error_stack:\r\n            return \"regex_error(error_stack): There was insufficient \"\r\n                   \"memory to determine whether the regular expression \"\r\n                   \"could match the specified character sequence.\";\r\n        case regex_constants::_Error_parse: // TRANSITION, keeping behavior\r\n            return \"regex_error(error_parse)\";\r\n        case regex_constants::_Error_syntax:\r\n            return \"regex_error(error_syntax)\";\r\n        default:\r\n            return \"regex_error\";\r\n        }\r\n    }\r\n\r\n    regex_constants::error_type _Err;\r\n};\r\n\r\ninline bool _Is_word(unsigned char _UCh) {\r\n    // special casing char to avoid branches for std::regex in this path\r\n    static constexpr bool _Is_word_table[_STD _Max_limit<unsigned char>() + 1] = {\r\n        //       X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 XA XB XC XD XE XF\r\n        /* 0X */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r\n        /* 1X */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r\n        /* 2X */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\r\n        /* 3X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 0-9\r\n        /* 4X */ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // A-Z\r\n        /* 5X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, // 5F == _\r\n        /* 6X */ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // a-z\r\n        /* 7X */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0\r\n        // non-ASCII values initialized to 0\r\n    };\r\n    return _Is_word_table[_UCh];\r\n}\r\n\r\ninline bool _Is_word(char _Ch) {\r\n    return _Is_word(static_cast<unsigned char>(_Ch));\r\n}\r\n\r\ntemplate <class _Elem>\r\nbool _Is_word(_Elem _Ch) {\r\n    // assumes that ASCII characters are represented at ASCII code points\r\n    const auto _Uchar = static_cast<unsigned char>(_Ch);\r\n    return static_cast<_Elem>(_Uchar) == _Ch && _Uchar <= 'z' && _Is_word(_Uchar);\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt>\r\nclass sub_match : public pair<_BidIt, _BidIt> { // class to hold contents of a capture group\r\npublic:\r\n    using _Mybase         = pair<_BidIt, _BidIt>;\r\n    using value_type      = typename iterator_traits<_BidIt>::value_type;\r\n    using difference_type = typename iterator_traits<_BidIt>::difference_type;\r\n    using iterator        = _BidIt;\r\n    using string_type     = basic_string<value_type>;\r\n\r\n    constexpr sub_match() = default;\r\n\r\n    bool matched = false;\r\n\r\n    _NODISCARD difference_type length() const {\r\n        const _Mybase _Range(_Effective_range());\r\n        return _STD distance(_Range.first, _Range.second);\r\n    }\r\n\r\n    operator string_type() const { // convert matched text to string\r\n        return str();\r\n    }\r\n\r\n    _NODISCARD string_type str() const { // convert matched text to string\r\n        const _Mybase _Range(_Effective_range());\r\n        return string_type{_Range.first, _Range.second};\r\n    }\r\n\r\n    _NODISCARD int compare(const sub_match& _Right) const { // compare *this to _Right\r\n        const _Mybase _LRange(_Effective_range());\r\n        const _Mybase _RRange(_Right._Effective_range());\r\n        return _Iter_compare(_LRange.first, _LRange.second, _RRange.first, _RRange.second);\r\n    }\r\n\r\n    _NODISCARD int compare(const string_type& _Right) const { // compare *this to _Right\r\n        return _Compare(_Right.data(), _Right.size());\r\n    }\r\n\r\n    _NODISCARD int compare(_In_z_ const value_type* _Ptr) const { // compare *this to array pointed to by _Ptr\r\n        return _Compare(_Ptr, char_traits<value_type>::length(_Ptr));\r\n    }\r\n\r\n    void swap(sub_match& _Other) noexcept(_Is_nothrow_swappable<_BidIt>::value) {\r\n        _Mybase::swap(_Other);\r\n        _STD swap(matched, _Other.matched);\r\n    }\r\n\r\n    template <class _FwdIt2>\r\n    static int _Iter_compare(_BidIt _First1, _BidIt _Last1, _FwdIt2 _First2, _FwdIt2 _Last2) {\r\n        // compare two iterator ranges:\r\n        // if [_First1, _Last1) is lexicographically less than [_First2, _Last2), a negative value\r\n        // if [_First2, _Last2) is lexicographically less than [_First1, _Last1), a positive value\r\n        // otherwise, zero\r\n        static_assert(is_same_v<_Iter_value_t<_FwdIt2>, value_type>, \"bad _FwdIt2 to _Iter_compare\");\r\n\r\n        _Adl_verify_range(_First1, _Last1);\r\n        _Adl_verify_range(_First2, _Last2);\r\n\r\n        auto _UFirst1 = _Get_unwrapped(_First1);\r\n        auto _ULast1  = _Get_unwrapped(_Last1);\r\n        auto _UFirst2 = _Get_unwrapped(_First2);\r\n        auto _ULast2  = _Get_unwrapped(_Last2);\r\n\r\n        if constexpr (is_pointer_v<decltype(_UFirst1)> && is_pointer_v<decltype(_UFirst2)>) {\r\n            return _Traits_compare<char_traits<value_type>>(\r\n                _UFirst1, static_cast<size_t>(_ULast1 - _UFirst1), _UFirst2, static_cast<size_t>(_ULast2 - _UFirst2));\r\n        } else {\r\n            const auto _Cmp = _STD mismatch(_UFirst1, _ULast1, _UFirst2, _ULast2, _Std_char_traits_eq<value_type>{});\r\n\r\n            if (_Cmp.first == _ULast1) {\r\n                if (_Cmp.second == _ULast2) {\r\n                    return 0;\r\n                } else {\r\n                    return -1;\r\n                }\r\n            }\r\n\r\n            if (_Cmp.second == _ULast2) {\r\n                return 1;\r\n            }\r\n\r\n            if (char_traits<value_type>::lt(*_Cmp.first, *_Cmp.second)) {\r\n                return -1;\r\n            } else {\r\n                return 1;\r\n            }\r\n        }\r\n    }\r\n\r\n    int _Compare(const value_type* const _Ptr, const size_t _Count) const {\r\n        // compare *this to array [_Ptr, _Ptr + _Count)\r\n        const _Mybase _Range(_Effective_range());\r\n        return _Iter_compare(_Range.first, _Range.second, _Ptr, _Ptr + _Count);\r\n    }\r\n\r\n    bool _Match_equal(const sub_match& _Right) const { // check *this to _Right for equality\r\n        const _Mybase _LRange(_Effective_range());\r\n        const _Mybase _RRange(_Right._Effective_range());\r\n        return _STD equal(\r\n            _LRange.first, _LRange.second, _RRange.first, _RRange.second, _Std_char_traits_eq<value_type>{});\r\n    }\r\n\r\n    bool _Match_equal(const value_type* const _Ptr, const size_t _Count) const {\r\n        // check *this to array [_Ptr, _Ptr + _Count) for equality\r\n        const _Mybase _Range(_Effective_range());\r\n        return _STD equal(_Range.first, _Range.second, _Ptr, _Ptr + _Count, _Std_char_traits_eq<value_type>{});\r\n    }\r\n\r\n    bool _Match_equal(const value_type* const _Ptr) const { // check *this to C-string _Ptr for equality\r\n        return _Match_equal(_Ptr, char_traits<value_type>::length(_Ptr));\r\n    }\r\n\r\n    bool _Less(const sub_match& _Right) const { // check whether *this is less than _Right\r\n        const _Mybase _LRange(_Effective_range());\r\n        const _Mybase _RRange(_Right._Effective_range());\r\n        return _STD lexicographical_compare(\r\n            _LRange.first, _LRange.second, _RRange.first, _RRange.second, _Std_char_traits_lt<value_type>{});\r\n    }\r\n\r\n    bool _Less(const value_type* const _Ptr, const size_t _Count) const {\r\n        // check whether *this is less than [_Ptr, _Ptr + _Count)\r\n        const _Mybase _Range(_Effective_range());\r\n        return _STD lexicographical_compare(\r\n            _Range.first, _Range.second, _Ptr, _Ptr + _Count, _Std_char_traits_lt<value_type>{});\r\n    }\r\n\r\n    bool _Less(const value_type* const _Ptr) const { // check whether *this is less than C-string _Ptr\r\n        return _Less(_Ptr, char_traits<value_type>::length(_Ptr));\r\n    }\r\n\r\n    bool _Greater(const value_type* const _Ptr, const size_t _Count) const {\r\n        // check whether *this is greater than [_Ptr, _Ptr + _Count)\r\n        const _Mybase _Range(_Effective_range());\r\n        return _STD lexicographical_compare(\r\n            _Ptr, _Ptr + _Count, _Range.first, _Range.second, _Std_char_traits_lt<value_type>{});\r\n    }\r\n\r\n    bool _Greater(const value_type* const _Ptr) const { // check whether *this is greater than C-string _Ptr\r\n        return _Greater(_Ptr, char_traits<value_type>::length(_Ptr));\r\n    }\r\n\r\n    _Mybase _Effective_range() const { // if matched, returns *this; otherwise returns an empty range\r\n        if (matched) {\r\n            return *this;\r\n        } else {\r\n            return _Mybase{};\r\n        }\r\n    }\r\n};\r\n\r\n_EXPORT_STD using csub_match  = sub_match<const char*>;\r\n_EXPORT_STD using wcsub_match = sub_match<const wchar_t*>;\r\n_EXPORT_STD using ssub_match  = sub_match<string::const_iterator>;\r\n_EXPORT_STD using wssub_match = sub_match<wstring::const_iterator>;\r\n\r\n_EXPORT_STD template <class _BidIt>\r\n_NODISCARD bool operator==(const sub_match<_BidIt>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return _Left._Match_equal(_Right);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _BidIt>\r\n_NODISCARD auto operator<=>(const sub_match<_BidIt>& _Left, const sub_match<_BidIt>& _Right) {\r\n    using _Comparison_category = _Get_comparison_category_t<char_traits<_Iter_value_t<_BidIt>>>;\r\n    return static_cast<_Comparison_category>(_Left.compare(_Right) <=> 0);\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator!=(const sub_match<_BidIt>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator<(const sub_match<_BidIt>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return _Left._Less(_Right);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator>(const sub_match<_BidIt>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator<=(const sub_match<_BidIt>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator>=(const sub_match<_BidIt>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class _BidIt>\r\n_NODISCARD bool operator==(const sub_match<_BidIt>& _Left, const _Iter_value_t<_BidIt>* _Right) {\r\n    return _Left._Match_equal(_Right);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _BidIt>\r\n_NODISCARD auto operator<=>(const sub_match<_BidIt>& _Left, const _Iter_value_t<_BidIt>* _Right) {\r\n    using _Comparison_category = _Get_comparison_category_t<char_traits<_Iter_value_t<_BidIt>>>;\r\n    return static_cast<_Comparison_category>(_Left.compare(_Right) <=> 0);\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator==(const _Iter_value_t<_BidIt>* _Left, const sub_match<_BidIt>& _Right) {\r\n    return _Right._Match_equal(_Left);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator!=(const _Iter_value_t<_BidIt>* _Left, const sub_match<_BidIt>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator<(const _Iter_value_t<_BidIt>* _Left, const sub_match<_BidIt>& _Right) {\r\n    return _Right._Greater(_Left);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator>(const _Iter_value_t<_BidIt>* _Left, const sub_match<_BidIt>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator<=(const _Iter_value_t<_BidIt>* _Left, const sub_match<_BidIt>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator>=(const _Iter_value_t<_BidIt>* _Left, const sub_match<_BidIt>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator!=(const sub_match<_BidIt>& _Left, const _Iter_value_t<_BidIt>* _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator<(const sub_match<_BidIt>& _Left, const _Iter_value_t<_BidIt>* _Right) {\r\n    return _Left._Less(_Right);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator>(const sub_match<_BidIt>& _Left, const _Iter_value_t<_BidIt>* _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator<=(const sub_match<_BidIt>& _Left, const _Iter_value_t<_BidIt>* _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator>=(const sub_match<_BidIt>& _Left, const _Iter_value_t<_BidIt>* _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class _BidIt>\r\n_NODISCARD bool operator==(const sub_match<_BidIt>& _Left, const _Iter_value_t<_BidIt>& _Right) {\r\n    return _Left._Match_equal(_STD addressof(_Right), 1);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _BidIt>\r\n_NODISCARD auto operator<=>(const sub_match<_BidIt>& _Left, const _Iter_value_t<_BidIt>& _Right) {\r\n    using _Comparison_category = _Get_comparison_category_t<char_traits<_Iter_value_t<_BidIt>>>;\r\n    return static_cast<_Comparison_category>(_Left._Compare(_STD addressof(_Right), 1) <=> 0);\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator==(const _Iter_value_t<_BidIt>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return _Right._Match_equal(_STD addressof(_Left), 1);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator!=(const _Iter_value_t<_BidIt>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator<(const _Iter_value_t<_BidIt>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return _Right._Greater(_STD addressof(_Left), 1);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator>(const _Iter_value_t<_BidIt>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator<=(const _Iter_value_t<_BidIt>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator>=(const _Iter_value_t<_BidIt>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator!=(const sub_match<_BidIt>& _Left, const _Iter_value_t<_BidIt>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator<(const sub_match<_BidIt>& _Left, const _Iter_value_t<_BidIt>& _Right) {\r\n    return _Left._Less(_STD addressof(_Right), 1);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator>(const sub_match<_BidIt>& _Left, const _Iter_value_t<_BidIt>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator<=(const sub_match<_BidIt>& _Left, const _Iter_value_t<_BidIt>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _BidIt>\r\n_NODISCARD bool operator>=(const sub_match<_BidIt>& _Left, const _Iter_value_t<_BidIt>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class _BidIt, class _Traits, class _Alloc>\r\n_NODISCARD bool operator==(\r\n    const sub_match<_BidIt>& _Left, const basic_string<_Iter_value_t<_BidIt>, _Traits, _Alloc>& _Right) {\r\n    return _Left._Match_equal(_Right.data(), _Right.size());\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _BidIt, class _Traits, class _Alloc>\r\n_NODISCARD auto operator<=>(\r\n    const sub_match<_BidIt>& _Left, const basic_string<_Iter_value_t<_BidIt>, _Traits, _Alloc>& _Right) {\r\n    using _Comparison_category = _Get_comparison_category_t<char_traits<_Iter_value_t<_BidIt>>>;\r\n    return static_cast<_Comparison_category>(_Left._Compare(_Right.data(), _Right.size()) <=> 0);\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _BidIt, class _Traits, class _Alloc>\r\n_NODISCARD bool operator==(\r\n    const basic_string<_Iter_value_t<_BidIt>, _Traits, _Alloc>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return _Right._Match_equal(_Left.data(), _Left.size());\r\n}\r\n\r\ntemplate <class _BidIt, class _Traits, class _Alloc>\r\n_NODISCARD bool operator!=(\r\n    const basic_string<_Iter_value_t<_BidIt>, _Traits, _Alloc>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _BidIt, class _Traits, class _Alloc>\r\n_NODISCARD bool operator<(\r\n    const basic_string<_Iter_value_t<_BidIt>, _Traits, _Alloc>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return _Right._Greater(_Left.data(), _Left.size());\r\n}\r\n\r\ntemplate <class _BidIt, class _Traits, class _Alloc>\r\n_NODISCARD bool operator>(\r\n    const basic_string<_Iter_value_t<_BidIt>, _Traits, _Alloc>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _BidIt, class _Traits, class _Alloc>\r\n_NODISCARD bool operator<=(\r\n    const basic_string<_Iter_value_t<_BidIt>, _Traits, _Alloc>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _BidIt, class _Traits, class _Alloc>\r\n_NODISCARD bool operator>=(\r\n    const basic_string<_Iter_value_t<_BidIt>, _Traits, _Alloc>& _Left, const sub_match<_BidIt>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n\r\ntemplate <class _BidIt, class _Traits, class _Alloc>\r\n_NODISCARD bool operator!=(\r\n    const sub_match<_BidIt>& _Left, const basic_string<_Iter_value_t<_BidIt>, _Traits, _Alloc>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _BidIt, class _Traits, class _Alloc>\r\n_NODISCARD bool operator<(\r\n    const sub_match<_BidIt>& _Left, const basic_string<_Iter_value_t<_BidIt>, _Traits, _Alloc>& _Right) {\r\n    return _Left._Less(_Right.data(), _Right.size());\r\n}\r\n\r\ntemplate <class _BidIt, class _Traits, class _Alloc>\r\n_NODISCARD bool operator>(\r\n    const sub_match<_BidIt>& _Left, const basic_string<_Iter_value_t<_BidIt>, _Traits, _Alloc>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _BidIt, class _Traits, class _Alloc>\r\n_NODISCARD bool operator<=(\r\n    const sub_match<_BidIt>& _Left, const basic_string<_Iter_value_t<_BidIt>, _Traits, _Alloc>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _BidIt, class _Traits, class _Alloc>\r\n_NODISCARD bool operator>=(\r\n    const sub_match<_BidIt>& _Left, const basic_string<_Iter_value_t<_BidIt>, _Traits, _Alloc>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _BidIt>\r\nbasic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr, const sub_match<_BidIt>& _Match) {\r\n    return _Ostr << _Match.str();\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt, class _Alloc = allocator<sub_match<_BidIt>>>\r\nclass match_results;\r\n\r\ntemplate <class _BidIt, class _Alloc, class _InIt, class _OutIt>\r\n_OutIt _Format_default(const match_results<_BidIt, _Alloc>& _Match, _OutIt _Out, _InIt _First, _InIt _Last,\r\n    regex_constants::match_flag_type _Flags = regex_constants::format_default);\r\n\r\ntemplate <class _BidIt, class _Alloc, class _InIt, class _OutIt>\r\n_OutIt _Format_sed(const match_results<_BidIt, _Alloc>& _Match, _OutIt _Out, _InIt _First, _InIt _Last,\r\n    regex_constants::match_flag_type _Flags = regex_constants::format_default);\r\n\r\n_EXPORT_STD template <class _BidIt, class _Alloc>\r\nclass match_results { // class to hold contents of all capture groups\r\npublic:\r\n    using _Elem     = sub_match<_BidIt>;\r\n    using _MyCont   = vector<_Elem, _Alloc>;\r\n    using _Mytraits = allocator_traits<_Alloc>;\r\n\r\n    using value_type      = _Elem;\r\n    using const_reference = const value_type&;\r\n    using reference       = value_type&;\r\n    using const_iterator  = typename _MyCont::const_iterator;\r\n    using iterator        = const_iterator;\r\n    using difference_type = typename iterator_traits<_BidIt>::difference_type;\r\n    using size_type       = typename _Mytraits::size_type;\r\n    using allocator_type  = _Alloc;\r\n    using char_type       = typename iterator_traits<_BidIt>::value_type;\r\n    using string_type     = basic_string<char_type>;\r\n\r\n    match_results() = default;\r\n\r\n    explicit match_results(const _Alloc& _Al) : _Matches(_Al) {}\r\n\r\n    match_results(const match_results& _Other, const _Alloc& _Al)\r\n        : _Org(_Other._Org), _Ready(_Other._Ready), _Matches(_Other._Matches, _Al), _Prefix(_Other._Prefix),\r\n          _Suffix(_Other._Suffix), _Null_elem(_Other._Null_elem) {}\r\n\r\n    match_results(match_results&& _Other, const _Alloc& _Al) noexcept(\r\n        conjunction_v<typename _Mytraits::is_always_equal, is_nothrow_move_constructible<_BidIt>>) // strengthened\r\n        : _Org(_STD move(_Other._Org)), _Ready(_Other._Ready), _Matches(_STD move(_Other._Matches), _Al),\r\n          _Prefix(_STD move(_Other._Prefix)), _Suffix(_STD move(_Other._Suffix)),\r\n          _Null_elem(_STD move(_Other._Null_elem)) {}\r\n\r\n    _NODISCARD bool ready() const noexcept /* strengthened */ {\r\n        return _Ready;\r\n    }\r\n\r\n    _NODISCARD size_type size() const noexcept /* strengthened */ {\r\n        return _Matches.size();\r\n    }\r\n\r\n    _NODISCARD size_type max_size() const noexcept /* strengthened */ {\r\n        return _Matches.max_size();\r\n    }\r\n\r\n    _NODISCARD bool empty() const noexcept /* strengthened */ {\r\n        return _Matches.empty();\r\n    }\r\n\r\n    _NODISCARD difference_type length(size_type _Sub = 0) const {\r\n        return (*this)[_Sub].length();\r\n    }\r\n\r\n    _NODISCARD difference_type position(size_type _Sub = 0) const {\r\n        return _STD distance(_Org, (*this)[_Sub].first);\r\n    }\r\n\r\n    _NODISCARD string_type str(size_type _Sub = 0) const {\r\n        return string_type{(*this)[_Sub]};\r\n    }\r\n\r\n    _NODISCARD const_reference operator[](size_type _Sub) const noexcept /* strengthened */ {\r\n        return _Matches.size() <= _Sub ? _Null_elem : _Matches[_Sub];\r\n    }\r\n\r\n    _NODISCARD const_reference prefix() const noexcept /* strengthened */ {\r\n        return _Prefix;\r\n    }\r\n\r\n    _NODISCARD const_reference suffix() const noexcept /* strengthened */ {\r\n        return _Suffix;\r\n    }\r\n\r\n    _NODISCARD const_iterator begin() const noexcept /* strengthened */ {\r\n        return _Matches.begin();\r\n    }\r\n\r\n    _NODISCARD const_iterator end() const noexcept /* strengthened */ {\r\n        return _Matches.end();\r\n    }\r\n\r\n    _NODISCARD const_iterator cbegin() const noexcept /* strengthened */ {\r\n        return _Matches.begin();\r\n    }\r\n\r\n    _NODISCARD const_iterator cend() const noexcept /* strengthened */ {\r\n        return _Matches.end();\r\n    }\r\n\r\n    const _Elem* _Unchecked_begin() const noexcept {\r\n        return _Matches._Unchecked_begin();\r\n    }\r\n\r\n    const _Elem* _Unchecked_end() const noexcept {\r\n        return _Matches._Unchecked_end();\r\n    }\r\n\r\n    template <class _OutIt>\r\n    _OutIt _Format1(_OutIt _Out, const char_type* _Fmt_begin, const char_type* _Fmt_end,\r\n        regex_constants::match_flag_type _Flags) const { // format text, replacing matches\r\n        return _Flags & regex_constants::format_sed ? _Format_sed(*this, _Out, _Fmt_begin, _Fmt_end, _Flags)\r\n                                                    : _Format_default(*this, _Out, _Fmt_begin, _Fmt_end, _Flags);\r\n    }\r\n\r\n    template <class _OutIt>\r\n    _OutIt format(_OutIt _Out, const char_type* _Fmt_begin, const char_type* _Fmt_end,\r\n        regex_constants::match_flag_type _Flags = regex_constants::format_default) const {\r\n        // format text, replacing matches\r\n        _Adl_verify_range(_Fmt_begin, _Fmt_end);\r\n        _Seek_wrapped(_Out, _Format1(_Get_unwrapped_unverified(_Out), _Fmt_begin, _Fmt_end, _Flags));\r\n        return _Out;\r\n    }\r\n\r\n    template <class _OutIt, class _Traits1, class _Alloc1>\r\n    _OutIt format(_OutIt _Out, const basic_string<char_type, _Traits1, _Alloc1>& _Fmt,\r\n        regex_constants::match_flag_type _Flags = regex_constants::format_default) const {\r\n        // format text, replacing matches\r\n        _Seek_wrapped(_Out, _Format1(_Get_unwrapped_unverified(_Out), _Fmt.data(), _Fmt.data() + _Fmt.size(), _Flags));\r\n        return _Out;\r\n    }\r\n\r\n    template <class _Traits1, class _Alloc1>\r\n    _NODISCARD basic_string<char_type, _Traits1, _Alloc1> format(const basic_string<char_type, _Traits1, _Alloc1>& _Fmt,\r\n        regex_constants::match_flag_type _Flags = regex_constants::format_default) const {\r\n        // format text, replacing matches\r\n        basic_string<char_type, _Traits1, _Alloc1> _Str;\r\n        format(_STD back_inserter(_Str), _Fmt.data(), _Fmt.data() + _Fmt.size(), _Flags);\r\n        return _Str;\r\n    }\r\n\r\n    _NODISCARD string_type format(\r\n        const char_type* _Fmt_begin, regex_constants::match_flag_type _Flags = regex_constants::format_default) const {\r\n        // format text, replacing matches\r\n        return format(static_cast<string_type>(_Fmt_begin), _Flags);\r\n    }\r\n\r\n    _NODISCARD allocator_type get_allocator() const noexcept /* strengthened */ {\r\n        return static_cast<allocator_type>(_Matches.get_allocator());\r\n    }\r\n\r\n    void swap(match_results& _Right) noexcept(_Is_nothrow_swappable<_BidIt>::value) /* strengthened */ {\r\n        using _STD swap;\r\n        _STD swap(_Ready, _Right._Ready);\r\n        swap(_Org, _Right._Org); // intentional ADL\r\n        _Matches.swap(_Right._Matches);\r\n        _STD swap(_Prefix, _Right._Prefix);\r\n        _STD swap(_Suffix, _Right._Suffix);\r\n    }\r\n\r\n    void _Resize(unsigned int _Nx) {\r\n        _Matches.resize(_Nx);\r\n    }\r\n\r\n    _Elem& _Pfx() noexcept {\r\n        return _Prefix;\r\n    }\r\n\r\n    _Elem& _Sfx() noexcept {\r\n        return _Suffix;\r\n    }\r\n\r\n    _Elem& _Null() noexcept {\r\n        return _Null_elem;\r\n    }\r\n\r\n    _Elem& _At(unsigned int _Sub) noexcept {\r\n        return _Matches[_Sub];\r\n    }\r\n\r\n    _Elem _At(unsigned int _Sub) const noexcept {\r\n        return _Matches[_Sub];\r\n    }\r\n\r\n    _BidIt _Org = _BidIt();\r\n    bool _Ready = false;\r\n\r\nprivate:\r\n    _MyCont _Matches;\r\n    _Elem _Prefix;\r\n    _Elem _Suffix;\r\n    _Elem _Null_elem;\r\n};\r\n\r\n_EXPORT_STD template <class _BidIt, class _Alloc>\r\n_NODISCARD bool operator==(const match_results<_BidIt, _Alloc>& _Left, const match_results<_BidIt, _Alloc>& _Right) {\r\n    if (!_Left.ready() && !_Right.ready()) {\r\n        return true;\r\n    } else if (!_Left.ready() || !_Right.ready()) {\r\n        return false;\r\n    } else if (_Left.empty() && _Right.empty()) {\r\n        return true;\r\n    } else if (_Left.empty() || _Right.empty()) {\r\n        return false;\r\n    } else {\r\n        return _Left.size() == _Right.size() && _Left.prefix() == _Right.prefix() && _Left.suffix() == _Right.suffix()\r\n            && _STD equal(_Left.begin(), _Left.end(), _Right.begin());\r\n    }\r\n}\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _BidIt, class _Alloc>\r\n_NODISCARD bool operator!=(const match_results<_BidIt, _Alloc>& _Left, const match_results<_BidIt, _Alloc>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n#endif // !_HAS_CXX20\r\n\r\n_INLINE_VAR constexpr unsigned int _Bmp_max   = 256U; // must fit in an unsigned int\r\n_INLINE_VAR constexpr unsigned int _Bmp_shift = 3U;\r\n_INLINE_VAR constexpr unsigned int _Bmp_chrs  = 1U << _Bmp_shift; // # of bits to be stored in each char\r\n_INLINE_VAR constexpr unsigned int _Bmp_mask  = _Bmp_chrs - 1U;\r\n_INLINE_VAR constexpr unsigned int _Bmp_size  = (_Bmp_max + _Bmp_chrs - 1U) / _Bmp_chrs;\r\n\r\n_INLINE_VAR constexpr unsigned int _ARRAY_THRESHOLD = 4U;\r\n\r\nenum _Node_flags : int { // flags for nfa nodes with special properties\r\n    _Fl_none              = 0x0000,\r\n    _Fl_negate            = 0x0001,\r\n    _Fl_greedy            = 0x0002,\r\n    _Fl_longest           = 0x0008, // TRANSITION, ABI: 0x004 is unused; the parser previously marked some nodes with it\r\n    _Fl_class_negated_w   = 0x0100,\r\n    _Fl_class_negated_s   = 0x0200,\r\n    _Fl_class_negated_d   = 0x0400,\r\n    _Fl_class_cl_all_bits = 0x0800, // TRANSITION, ABI: GH-5242\r\n    _Fl_begin_needs_w     = 0x0100,\r\n    _Fl_begin_needs_s     = 0x0200,\r\n    _Fl_begin_needs_d     = 0x0400,\r\n    _Fl_rep_branchless    = 0x1000,\r\n};\r\n\r\n_BITMASK_OPS(_EMPTY_ARGUMENT, _Node_flags)\r\n\r\nenum _Node_type { // type flag for nfa nodes\r\n    _N_none,\r\n    _N_nop,\r\n    _N_bol,\r\n    _N_eol,\r\n    _N_wbound,\r\n    _N_dot,\r\n    _N_str,\r\n    _N_class,\r\n    _N_group,\r\n    _N_end_group,\r\n    _N_assert,\r\n    _N_neg_assert,\r\n    _N_end_assert,\r\n    _N_capture,\r\n    _N_end_capture,\r\n    _N_back,\r\n    _N_if,\r\n    _N_endif,\r\n    _N_rep,\r\n    _N_end_rep,\r\n    _N_begin,\r\n    _N_end\r\n};\r\n\r\ntemplate <class _Elem>\r\nstruct _Buf { // character buffer\r\n    _Buf() = default;\r\n\r\n    ~_Buf() noexcept {\r\n        _CSTD free(_Chrs);\r\n    }\r\n\r\n    unsigned int _Size() const noexcept {\r\n        return _Nchrs;\r\n    }\r\n\r\n    _Elem _At(unsigned int _Idx) const {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Idx < _Nchrs, \"regex buffer subscript out of range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return _Chrs[_Idx];\r\n    }\r\n\r\n    const _Elem* _Str() const {\r\n        return _Chrs;\r\n    }\r\n\r\n    void _Insert2(_Elem _Ch) { // append _Ch\r\n        if (_Sz <= _Nchrs) {\r\n            _Expand2(1U);\r\n        }\r\n\r\n        _Chrs[_Nchrs++] = _Ch;\r\n    }\r\n\r\n    _Elem _Del() noexcept { // remove and return last character\r\n        return _Chrs[--_Nchrs];\r\n    }\r\n\r\n    template <class _FwdIt>\r\n    void _Insert2(_FwdIt _First, _FwdIt _Last) { // append multiple characters\r\n        while (_First != _Last) {\r\n            _Insert2(*_First++);\r\n        }\r\n    }\r\n\r\nprivate:\r\n    unsigned int _Calculate_expansion(unsigned int _Increase) const {\r\n        constexpr size_t _Max_elems      = static_cast<size_t>(-1) / sizeof(_Elem);\r\n        constexpr unsigned int _Max_uint = static_cast<unsigned int>(-1);\r\n        constexpr unsigned int _Max      = _Max_elems < _Max_uint ? static_cast<unsigned int>(_Max_elems) : _Max_uint;\r\n\r\n        constexpr unsigned int _Buf_incr = 16U;\r\n\r\n        if (_Increase < _Buf_incr) {\r\n            _Increase = _Buf_incr;\r\n        }\r\n\r\n        if (_Increase < (_Sz >> 1)) {\r\n            _Increase = _Sz >> 1;\r\n        }\r\n\r\n        if (_Max <= _Increase || _Max - _Increase <= _Sz) {\r\n            return _Max;\r\n        }\r\n\r\n        return _Sz + _Increase;\r\n    }\r\n\r\n    void _Expand2(const unsigned int _Min_increase) { // expand buffer by at least _Min_increase\r\n        const unsigned int _Len = _Calculate_expansion(_Min_increase);\r\n        if (_Len - _Sz < _Min_increase) {\r\n            _Xregex_error(regex_constants::error_space);\r\n        }\r\n        _Elem* _Tmp = static_cast<_Elem*>(_CSTD realloc(_Chrs, sizeof(_Elem) * static_cast<size_t>(_Len)));\r\n        if (!_Tmp) {\r\n            _Xregex_error(regex_constants::error_space);\r\n        }\r\n\r\n        _Chrs = _Tmp;\r\n        _Sz   = _Len;\r\n    }\r\n\r\n    unsigned int _Sz    = 0;\r\n    unsigned int _Nchrs = 0;\r\n    _Elem* _Chrs        = nullptr;\r\n};\r\n\r\nstruct _Bitmap { // accelerator table for small character values\r\n    _Bitmap() = default;\r\n\r\n    template <class _Elem>\r\n    void _Mark(_Elem _Ch) noexcept { // mark character _Ch\r\n        static_assert(is_unsigned_v<_Elem>, \"_Elem must be unsigned\");\r\n        unsigned int _Wide = _Ch;\r\n        _Chrs[_Wide >> _Bmp_shift] |= (1 << (_Wide & _Bmp_mask));\r\n    }\r\n\r\n    template <class _Elem>\r\n    bool _Find(_Elem _Ch) const noexcept {\r\n        static_assert(is_unsigned_v<_Elem>, \"_Elem must be unsigned\");\r\n        unsigned int _Wide = _Ch;\r\n        return (_Chrs[_Wide >> _Bmp_shift] & (1 << (_Wide & _Bmp_mask))) != 0;\r\n    }\r\n\r\nprivate:\r\n    unsigned char _Chrs[_Bmp_size]{};\r\n};\r\n\r\ntemplate <class _Elem>\r\nstruct _Sequence { // holds sequences of _Sz elements\r\n    explicit _Sequence(unsigned int _Len) noexcept : _Sz(_Len) {}\r\n\r\n    unsigned int _Sz;\r\n    _Buf<_Elem> _Data;\r\n    _Sequence* _Next = nullptr;\r\n};\r\n\r\nclass _Node_base { // base class for all nfa nodes\r\npublic:\r\n    explicit _Node_base(_Node_type _Ty, _Node_flags _Fl = _Fl_none) noexcept : _Kind(_Ty), _Flags(_Fl) {}\r\n\r\n    _Node_type _Kind;\r\n    _Node_flags _Flags;\r\n    _Node_base* _Next = nullptr;\r\n    _Node_base* _Prev = nullptr;\r\n\r\n    virtual ~_Node_base() noexcept {}\r\n};\r\n\r\ninline void _Destroy_node(_Node_base* _Nx, _Node_base* _Ne = nullptr) noexcept { // destroy sublist of nodes\r\n    while (_Nx != _Ne && _Nx) { // destroy node\r\n        _Node_base* _Tmp = _Nx;\r\n        _Nx              = _Nx->_Next;\r\n        _Tmp->_Next      = nullptr;\r\n        delete _Tmp;\r\n    }\r\n}\r\n\r\nclass _Root_node : public _Node_base { // root of parse tree\r\npublic:\r\n    _Root_node() noexcept : _Node_base(_N_begin) {\r\n        static_assert(sizeof(_Refs) == sizeof(_Atomic_counter_t), \"invalid _Refs size\");\r\n    }\r\n\r\n    regex_constants::syntax_option_type _Fl{};\r\n    unsigned int _Loops = 0;\r\n    unsigned int _Marks = 0;\r\n    unsigned int _Refs  = 0;\r\n};\r\n\r\nclass _Node_end_group : public _Node_base { // node that marks end of a group\r\npublic:\r\n    _Node_end_group(_Node_type _Ty, _Node_flags _Fl, _Node_base* _Bx) noexcept : _Node_base(_Ty, _Fl), _Back(_Bx) {}\r\n\r\n    _Node_base* _Back;\r\n};\r\n\r\nclass _Node_assert : public _Node_base { // node that holds an ECMAScript assertion\r\npublic:\r\n    explicit _Node_assert(_Node_type _Ty, _Node_flags _Fl = _Fl_none) noexcept : _Node_base(_Ty, _Fl) {}\r\n\r\n    ~_Node_assert() noexcept {\r\n        _Destroy_node(_Child);\r\n    }\r\n\r\n    _Node_base* _Child = nullptr;\r\n};\r\n\r\nclass _Node_capture : public _Node_base { // node that marks beginning of a capture group\r\npublic:\r\n    explicit _Node_capture(unsigned int _Ix) noexcept : _Node_base(_N_capture, _Fl_none), _Idx(_Ix) {}\r\n\r\n    unsigned int _Idx;\r\n};\r\n\r\nclass _Node_back : public _Node_base { // node that holds a back reference\r\npublic:\r\n    explicit _Node_back(unsigned int _Ix) noexcept : _Node_base(_N_back, _Fl_none), _Idx(_Ix) {}\r\n\r\n    unsigned int _Idx;\r\n};\r\n\r\ntemplate <class _Elem>\r\nclass _Node_str : public _Node_base { // node that holds text\r\npublic:\r\n    explicit _Node_str(_Node_flags _Fl = _Fl_none) noexcept : _Node_base(_N_str, _Fl) {}\r\n\r\n    _Buf<_Elem> _Data;\r\n};\r\n\r\ntemplate <class _Elem, class _RxTraits>\r\nclass _Node_class : public _Node_base { // node that holds a character class (POSIX bracket expression)\r\npublic:\r\n    explicit _Node_class(_Node_type _Ty = _N_class, _Node_flags _Fl = _Fl_none) noexcept : _Node_base(_Ty, _Fl) {}\r\n\r\n    ~_Node_class() noexcept {\r\n        _Tidy(_Coll);\r\n        delete _Small;\r\n        delete _Large;\r\n        delete _Ranges;\r\n        _Tidy(_Equiv);\r\n    }\r\n\r\n    void _Tidy(_Sequence<_Elem>* _Head) noexcept { // clean up a list of sequences\r\n        while (_Head) { // delete the head of the list\r\n            _Sequence<_Elem>* _Temp = _Head;\r\n            _Head                   = _Head->_Next;\r\n            delete _Temp;\r\n        }\r\n    }\r\n\r\n    _Sequence<_Elem>* _Coll = nullptr;\r\n    _Bitmap* _Small         = nullptr;\r\n    _Buf<_Elem>* _Large     = nullptr;\r\n    _Buf<_Elem>* _Ranges    = nullptr;\r\n    typename _RxTraits::char_class_type _Classes{};\r\n    _Sequence<_Elem>* _Equiv = nullptr;\r\n};\r\n\r\nclass _Node_endif : public _Node_base { // node that marks the end of an alternative\r\npublic:\r\n    _Node_endif() noexcept : _Node_base(_N_endif, _Fl_none) {}\r\n};\r\n\r\nclass _Node_if : public _Node_base { // node that marks the beginning of an alternative\r\npublic:\r\n    explicit _Node_if(_Node_base* _End) noexcept\r\n        : _Node_base(_N_if, _Fl_none), _Endif(static_cast<_Node_endif*>(_End)) {}\r\n\r\n    ~_Node_if() noexcept {\r\n        _Node_if* _Cur = _Child;\r\n        while (_Cur) { // destroy branch\r\n            _Node_if* _Tmp = _Cur;\r\n            _Cur           = _Cur->_Child;\r\n            _Tmp->_Child   = nullptr;\r\n            _Destroy_node(_Tmp, _Endif);\r\n        }\r\n    }\r\n\r\n    _Node_endif* _Endif;\r\n    _Node_if* _Child = nullptr;\r\n};\r\n\r\nclass _Node_rep;\r\n\r\nclass _Node_end_rep : public _Node_base { // node that marks the end of a repetition\r\npublic:\r\n    _Node_end_rep() noexcept : _Node_base(_N_end_rep) {}\r\n\r\n    _Node_rep* _Begin_rep = nullptr;\r\n\r\n    _Node_end_rep& operator=(const _Node_end_rep&) = delete;\r\n};\r\n\r\ntemplate <class _Diff>\r\nstruct _Loop_vals_v3_t { // storage for loop administration\r\n    size_t _Loop_frame_idx    = 0;\r\n    int _Loop_idx             = 0;\r\n    unsigned int _Group_first = 0;\r\n    _Diff _Loop_length{};\r\n};\r\n\r\nclass _Node_rep : public _Node_base { // node that marks the beginning of a repetition\r\npublic:\r\n    _Node_rep(bool _Greedy, int _Min_, int _Max_, _Node_end_rep* _End, unsigned int _Number) noexcept\r\n        : _Node_base(_N_rep, _Greedy ? _Fl_greedy : _Fl_none), _Min(_Min_), _Max(_Max_), _End_rep(_End),\r\n          _Loop_number(_Number) {}\r\n\r\n    const int _Min;\r\n    const int _Max; // non-negative if bounded, -1 if unbounded\r\n    _Node_end_rep* _End_rep;\r\n    unsigned int _Loop_number;\r\n    int _Simple_loop = -1; // -1 undetermined, 0 contains if/do, 1 simple\r\n\r\n    _Node_rep& operator=(const _Node_rep&) = delete;\r\n};\r\n\r\nenum class _Rx_char_class_kind : int { // must be aligned with corresponding _Node_flags\r\n    _Positive  = 0,\r\n    _Negated_w = _Fl_class_negated_w,\r\n    _Negated_s = _Fl_class_negated_s,\r\n    _Negated_d = _Fl_class_negated_d\r\n};\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nclass _Builder2 { // provides operations used by _Parser2 to build the nfa\r\npublic:\r\n    _Builder2(const _RxTraits& _Tr, regex_constants::syntax_option_type);\r\n    void _Setlong();\r\n    void _Tidy() noexcept;\r\n    _Node_base* _Getmark() const;\r\n\r\n    void _Add_bol();\r\n    void _Add_eol();\r\n    void _Add_wbound();\r\n    void _Add_dot();\r\n    void _Add_char(_Elem _Ch);\r\n    void _Add_class();\r\n    void _Add_char_to_class(_Elem _Ch);\r\n    void _Add_range(_Elem, _Elem);\r\n    void _Add_named_class(typename _RxTraits::char_class_type, _Rx_char_class_kind);\r\n    void _Add_equiv(const _Elem*, const _Elem*);\r\n    void _Add_coll(const _Elem*, const _Elem*);\r\n    _Node_base* _Begin_group();\r\n    void _End_group(_Node_base* _Back);\r\n    _Node_base* _Begin_assert_group(bool);\r\n    void _End_assert_group(_Node_base*);\r\n    _Node_base* _Begin_capture_group(unsigned int _Idx);\r\n    void _Add_backreference(unsigned int _Idx);\r\n    _Node_base* _Begin_if(_Node_base* _Start);\r\n    void _Else_if(_Node_base*, _Node_base*);\r\n    void _Add_rep(int _Min, int _Max, bool _Greedy);\r\n    void _Negate();\r\n    _Root_node* _End_pattern();\r\n\r\nprivate:\r\n    _Node_base* _Link_node(_Node_base*);\r\n    static void _Insert_node(_Node_base*, _Node_base*);\r\n    _Node_base* _New_node(_Node_type _Kind);\r\n    void _Add_str_node();\r\n    void _Add_char_to_bitmap(unsigned char _Ch);\r\n    void _Add_char_to_array(_Elem _Ch);\r\n    void _Add_elts(_Node_class<_Elem, _RxTraits>*, typename _RxTraits::char_class_type, bool);\r\n    void _Char_to_elts(const _Elem*, const _Elem*, _Sequence<_Elem>**);\r\n\r\n    _Root_node* _Root;\r\n    _Node_base* _Current;\r\n    regex_constants::syntax_option_type _Flags;\r\n    const _RxTraits& _Traits;\r\n\r\npublic:\r\n    _Builder2(const _Builder2&)            = delete;\r\n    _Builder2& operator=(const _Builder2&) = delete;\r\n};\r\n\r\ntemplate <class _Ty, class _Alloc = allocator<_Ty>>\r\nclass _Rx_fixed_size_buffer {\r\npublic:\r\n    using _Al_pointer       = _Alloc_ptr_t<_Alloc>;\r\n    using _Al_const_pointer = typename allocator_traits<_Alloc>::const_pointer;\r\n\r\nprivate:\r\n    using _Al_size_type = _Alloc_size_t<_Alloc>;\r\n\r\n    struct _Buffer_range {\r\n        _Al_pointer _First{};\r\n        _Al_pointer _Last{};\r\n        bool _Allocated{false};\r\n    };\r\n\r\npublic:\r\n    explicit _Rx_fixed_size_buffer(const _Alloc& _Al = _Alloc{}) : _Mypair(_One_then_variadic_args_t{}, _Al) {}\r\n\r\n    _Rx_fixed_size_buffer(const _Rx_fixed_size_buffer&)            = delete;\r\n    _Rx_fixed_size_buffer(_Rx_fixed_size_buffer&&)                 = delete;\r\n    _Rx_fixed_size_buffer& operator=(const _Rx_fixed_size_buffer&) = delete;\r\n    _Rx_fixed_size_buffer& operator=(_Rx_fixed_size_buffer&&)      = delete;\r\n\r\n    void _Initialize(void*& _Stack_buf, size_t& _Stack_size, const size_t _Size) {\r\n        if (_Size == 0U) {\r\n            return; // nothing to do\r\n        }\r\n\r\n        const auto _Bytes = _Size * sizeof(_Ty);\r\n\r\n        if (_STD align(alignof(_Ty), _Bytes, _Stack_buf, _Stack_size)) {\r\n            _Use_external_buf(_Stack_buf, _Size);\r\n\r\n            _Stack_buf = static_cast<unsigned char*>(_Stack_buf) + _Bytes;\r\n            _Stack_size -= _Bytes;\r\n        } else {\r\n            _Allocate_buf(_Size);\r\n        }\r\n    }\r\n\r\n    ~_Rx_fixed_size_buffer() {\r\n        auto& _Data = _Mypair._Myval2;\r\n        if (_Data._Allocated) {\r\n            auto& _Al = _Mypair._Get_first();\r\n            _STD _Destroy_range(_Data._First, _Data._Last, _Al);\r\n            _Al.deallocate(_Data._First, static_cast<_Al_size_type>(_Data._Last - _Data._First));\r\n        } else {\r\n            _STD _Destroy_range(_Data._First, _Data._Last);\r\n        }\r\n    }\r\n\r\n    _NODISCARD _Ty& operator[](const size_t _Pos) {\r\n        auto& _Data = _Mypair._Myval2;\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(\r\n            _Pos < static_cast<size_t>(_Data._Last - _Data._First), \"_Rx_fixed_size_buffer subscript out of range\");\r\n#endif\r\n        return _Data._First[_Pos];\r\n    }\r\n\r\n    _NODISCARD const _Ty& operator[](const size_t _Pos) const {\r\n        auto& _Data = _Mypair._Myval2;\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(\r\n            _Pos < static_cast<size_t>(_Data._Last - _Data._First), \"_Rx_fixed_size_buffer subscript out of range\");\r\n#endif\r\n        return _Data._First[_Pos];\r\n    }\r\n\r\n    _NODISCARD _Al_pointer _Begin() {\r\n        return _Mypair._Myval2._First;\r\n    }\r\n\r\n    _NODISCARD _Al_const_pointer _Begin() const {\r\n        return _Mypair._Myval2._First;\r\n    }\r\n\r\n    _NODISCARD _Al_pointer _End() {\r\n        return _Mypair._Myval2._Last;\r\n    }\r\n\r\n    _NODISCARD _Al_const_pointer _End() const {\r\n        return _Mypair._Myval2._Last;\r\n    }\r\n\r\n    _NODISCARD size_t _Size() const {\r\n        auto& _Data = _Mypair._Myval2;\r\n        return static_cast<size_t>(_Data._Last - _Data._First);\r\n    }\r\n\r\nprivate:\r\n    void _Use_external_buf(void* _Buf, size_t _Ty_size) {\r\n        auto _Ty_first = _STD _Refancy<_Al_pointer>(reinterpret_cast<_Ty*>(_Buf));\r\n        auto _Ty_last  = _Ty_first + _Ty_size;\r\n        auto& _Data    = _Mypair._Myval2;\r\n        _STD uninitialized_fill(_Ty_first, _Ty_last, _Ty{}); // uninitialized_value_construct() is C++17\r\n        _Data._Allocated = false;\r\n        _Data._First     = _Ty_first;\r\n        _Data._Last      = _Ty_last;\r\n    }\r\n\r\n    void _Allocate_buf(size_t _Ty_size) {\r\n        auto& _Al = _Mypair._Get_first();\r\n\r\n        if (_Ty_size > size_t{PTRDIFF_MAX} || _Ty_size > allocator_traits<_Alloc>::max_size(_Al)) {\r\n            _Xregex_error(regex_constants::error_stack);\r\n        }\r\n\r\n        auto _Al_size  = static_cast<_Al_size_type>(_Ty_size);\r\n        auto _Ty_first = _Al.allocate(_Al_size);\r\n        _Allocation_guard<_Alloc> _Guard{_Al, _Ty_first, _Al_size};\r\n        auto& _Data      = _Mypair._Myval2;\r\n        _Data._Last      = _STD _Uninitialized_value_construct_n(_Ty_first, _Ty_size, _Al);\r\n        _Data._Allocated = true;\r\n        _Data._First     = _Ty_first;\r\n        _Guard._Ptr      = nullptr;\r\n    }\r\n\r\n    _Compressed_pair<_Alloc, _Buffer_range> _Mypair;\r\n};\r\n\r\nusing _Rx_bitset_int_type = size_t;\r\n\r\ntemplate <class _Alloc = allocator<bool>>\r\nclass _Rx_fixed_size_bitset {\r\nprivate:\r\n    static constexpr size_t _Bits = sizeof(_Rx_bitset_int_type) * CHAR_BIT;\r\n\r\n    using _Buffer_type = _Rx_fixed_size_buffer<_Rx_bitset_int_type, _Rebind_alloc_t<_Alloc, _Rx_bitset_int_type>>;\r\n\r\npublic:\r\n    explicit _Rx_fixed_size_bitset(const _Alloc& _Al) : _Buffer(_Al) {}\r\n\r\n    void _Initialize(void*& _Stack_buf, size_t& _Stack_size, const size_t _Bit_size) {\r\n        const auto _Word_size = _Bit_size / _Bits + (_Bit_size % _Bits != 0U);\r\n        _Buffer._Initialize(_Stack_buf, _Stack_size, _Word_size);\r\n    }\r\n\r\n    _NODISCARD bool _Get(const size_t _Pos) const {\r\n        return (_Buffer[_Pos / _Bits] & static_cast<_Rx_bitset_int_type>(_Rx_bitset_int_type{1} << (_Pos % _Bits)))\r\n            != _Rx_bitset_int_type{};\r\n    }\r\n\r\n    void _Clear(const size_t _Pos) {\r\n        _Buffer[_Pos / _Bits] &= static_cast<_Rx_bitset_int_type>(~(_Rx_bitset_int_type{1} << (_Pos % _Bits)));\r\n    }\r\n\r\n    void _Set(const size_t _Pos) {\r\n        _Buffer[_Pos / _Bits] |= static_cast<_Rx_bitset_int_type>(_Rx_bitset_int_type{1} << (_Pos % _Bits));\r\n    }\r\n\r\n    void _Clear_range_at_least_until(const size_t _First, const size_t _Last) {\r\n        if (_First < _Last) {\r\n            size_t _Buffer_first      = _First / _Bits;\r\n            const size_t _Buffer_last = _Last / _Bits + (_Last % _Bits != 0U);\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(_Buffer_last <= _Buffer._Size(), \"_Rx_fixed_size_bitset subscript out of range\");\r\n#endif\r\n\r\n            _Buffer[_Buffer_first] &=\r\n                static_cast<_Rx_bitset_int_type>((_Rx_bitset_int_type{1} << (_First % _Bits)) - 1U);\r\n\r\n            ++_Buffer_first;\r\n            if (_Buffer_first < _Buffer_last) {\r\n                auto _Begin = _Buffer._Begin();\r\n                _STD fill(_Begin + static_cast<ptrdiff_t>(_Buffer_first), _Begin + static_cast<ptrdiff_t>(_Buffer_last),\r\n                    _Rx_bitset_int_type{});\r\n            }\r\n        }\r\n    }\r\n\r\n    _NODISCARD typename _Buffer_type::_Al_pointer _Buffer_begin() {\r\n        return _Buffer._Begin();\r\n    }\r\n\r\n    _NODISCARD typename _Buffer_type::_Al_const_pointer _Buffer_begin() const {\r\n        return _Buffer._Begin();\r\n    }\r\n\r\n    _NODISCARD typename _Buffer_type::_Al_pointer _Buffer_end() {\r\n        return _Buffer._End();\r\n    }\r\n\r\n    _NODISCARD typename _Buffer_type::_Al_const_pointer _Buffer_end() const {\r\n        return _Buffer._End();\r\n    }\r\n\r\nprivate:\r\n    _Buffer_type _Buffer;\r\n};\r\n\r\ntemplate <class _BidIt>\r\nstruct _Rx_capture_range_t { // stores a pair of iterators\r\n    _BidIt _Begin{};\r\n    _BidIt _End{};\r\n};\r\n\r\ntemplate <class _BidIt, class _Alloc>\r\nclass _Tgt_state_v2_t { // holds the current state of the match\r\npublic:\r\n    explicit _Tgt_state_v2_t(const _Alloc& _Al = _Alloc()) : _Grps(_Al), _Grp_valid(_Al) {}\r\n\r\n    void _Copy_from(const _Tgt_state_v2_t& _Source) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Source._Grps._End() - _Source._Grps._Begin() == _Grps._End() - _Grps._Begin(),\r\n            \"Source and destination must have same amount of storage for capture group ranges\");\r\n        _STL_VERIFY(_Source._Grp_valid._Buffer_end() - _Source._Grp_valid._Buffer_begin()\r\n                        == _Grp_valid._Buffer_end() - _Grp_valid._Buffer_begin(),\r\n            \"Source and destination must have same amount of storage for capture group validity markers\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        _Cur = _Source._Cur;\r\n        _STD copy(_Source._Grps._Begin(), _Source._Grps._End(), _Grps._Begin());\r\n        _STD copy(_Source._Grp_valid._Buffer_begin(), _Source._Grp_valid._Buffer_end(), _Grp_valid._Buffer_begin());\r\n    }\r\n\r\n    _BidIt _Cur;\r\n    _Rx_fixed_size_buffer<_Rx_capture_range_t<_BidIt>, _Rebind_alloc_t<_Alloc, _Rx_capture_range_t<_BidIt>>> _Grps;\r\n    _Rx_fixed_size_bitset<_Rebind_alloc_t<_Alloc, bool>> _Grp_valid;\r\n};\r\n\r\nenum class _Rx_unwind_ops {\r\n    _After_assert = 1,\r\n    _After_neg_assert,\r\n    _Disjunction_eval_alternative,\r\n    _Do_nothing,\r\n    _Loop_simple_nongreedy,\r\n    _Loop_simple_greedy_firstrep,\r\n    _Loop_simple_greedy_intermediaterep,\r\n    _Loop_simple_greedy_lastrep,\r\n    _Loop_nongreedy,\r\n    _Loop_greedy,\r\n    _Loop_restore_vals,\r\n    _Capture_restore_begin,\r\n    _Capture_restore_unmatched_end,\r\n    _Capture_restore_matched_end,\r\n    _Capture_restore_matched,\r\n};\r\n\r\ntemplate <class _BidIt>\r\nclass _Rx_state_frame_t {\r\npublic:\r\n    _Rx_unwind_ops _Code{};\r\n    union {\r\n        int _Loop_idx_sav;\r\n        unsigned int _Capture_idx;\r\n    };\r\n    _Node_base* _Node{};\r\n    _BidIt _Pos{};\r\n    size_t _Loop_frame_idx_sav{};\r\n};\r\n\r\ntemplate <class _Ty, class _Alloc = allocator<_Ty>>\r\nclass _Rx_small_vector {\r\nprivate:\r\n    using _Al_pointer       = _Alloc_ptr_t<_Alloc>;\r\n    using _Al_const_pointer = typename allocator_traits<_Alloc>::const_pointer;\r\n    using _Al_size_type     = _Alloc_size_t<_Alloc>;\r\n\r\n    struct _Vector_state {\r\n        _Al_pointer _First{};\r\n        _Al_pointer _Last{};\r\n        _Al_pointer _End{};\r\n        bool _Allocated{false};\r\n    };\r\n\r\npublic:\r\n    _CONSTEXPR20 explicit _Rx_small_vector(const _Alloc& _Al = _Alloc{}) : _Mypair(_One_then_variadic_args_t{}, _Al) {}\r\n\r\n    _Rx_small_vector(const _Rx_small_vector&)            = delete;\r\n    _Rx_small_vector(_Rx_small_vector&&)                 = delete;\r\n    _Rx_small_vector& operator=(const _Rx_small_vector&) = delete;\r\n    _Rx_small_vector& operator=(_Rx_small_vector&&)      = delete;\r\n\r\n    void _Initialize_and_consume_remaining_buffer(void*& _Stack_buf, size_t& _Stack_buf_size) {\r\n        if (_STD align(alignof(_Ty), sizeof(_Ty), _Stack_buf, _Stack_buf_size)) {\r\n            const size_t _Count = _Stack_buf_size / sizeof(_Ty); // must calculate after calling _STD align()\r\n\r\n            auto& _Data        = _Mypair._Myval2;\r\n            const auto _Ty_buf = reinterpret_cast<_Ty*>(_Stack_buf);\r\n            _Data._First       = _STD _Refancy(_Ty_buf);\r\n            _Data._Last        = _Data._First;\r\n            _Data._End         = _STD _Refancy(_Ty_buf + _Count);\r\n        }\r\n\r\n        _Stack_buf      = nullptr;\r\n        _Stack_buf_size = 0;\r\n    }\r\n\r\n    _CONSTEXPR20 ~_Rx_small_vector() {\r\n        auto& _Data = _Mypair._Myval2;\r\n        if (_Data._Allocated) {\r\n            auto& _Al = _Mypair._Get_first();\r\n            _STD _Destroy_range(_Data._First, _Data._Last, _Al);\r\n            _Al.deallocate(_Data._First, static_cast<_Al_size_type>(_Data._End - _Data._First));\r\n        } else {\r\n            _STD _Destroy_range(_Data._First, _Data._Last);\r\n        }\r\n    }\r\n\r\n    _NODISCARD _Ty& operator[](const size_t _Pos) {\r\n        auto& _Data = _Mypair._Myval2;\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Pos < static_cast<size_t>(_Data._Last - _Data._First), \"_Rx_small_vector subscript out of range\");\r\n#endif\r\n        return _Data._First[_Pos];\r\n    }\r\n\r\n    _NODISCARD const _Ty& operator[](const size_t _Pos) const {\r\n        auto& _Data = _Mypair._Myval2;\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Pos < static_cast<size_t>(_Data._Last - _Data._First), \"_Rx_small_vector subscript out of range\");\r\n#endif\r\n        return _Data._First[_Pos];\r\n    }\r\n\r\n    void _Push_back(_Ty&& _Val) {\r\n        auto& _Data = _Mypair._Myval2;\r\n        if (_Data._Last == _Data._End) {\r\n            _Realloc_buf();\r\n        }\r\n\r\n        if (_Data._Allocated) {\r\n            allocator_traits<_Alloc>::construct(\r\n                _Mypair._Get_first(), _STD _Unfancy(_Data._Last), _STD forward<_Ty>(_Val));\r\n        } else {\r\n            _STD _Construct_in_place(*_Data._Last, _STD forward<_Ty>(_Val));\r\n        }\r\n        ++_Data._Last;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_t _Max_size() const noexcept {\r\n        const auto _Max_capacity = (_STD min) (static_cast<_Al_size_type>(_STD _Max_limit<_Iter_diff_t<_Al_pointer>>()),\r\n            allocator_traits<_Alloc>::max_size(_Mypair._Get_first()));\r\n        if (_Max_capacity > size_t{PTRDIFF_MAX}) {\r\n            return size_t{PTRDIFF_MAX};\r\n        }\r\n        return static_cast<size_t>(_Max_capacity);\r\n    }\r\n\r\n    _NODISCARD size_t _Size() const {\r\n        auto& _Data = _Mypair._Myval2;\r\n        return static_cast<size_t>(_Data._Last - _Data._First);\r\n    }\r\n\r\n    _NODISCARD _Al_pointer _Begin() {\r\n        return _Mypair._Myval2._First;\r\n    }\r\n\r\n    _NODISCARD _Al_const_pointer _Begin() const {\r\n        return _Mypair._Myval2._First;\r\n    }\r\n\r\n    _NODISCARD _Al_pointer _End() {\r\n        return _Mypair._Myval2._Last;\r\n    }\r\n\r\n    _NODISCARD _Al_const_pointer _End() const {\r\n        return _Mypair._Myval2._Last;\r\n    }\r\n\r\nprivate:\r\n    _NODISCARD _Al_size_type _Calculate_new_capacity() {\r\n        auto& _Data              = _Mypair._Myval2;\r\n        const auto _Old_capacity = static_cast<_Al_size_type>(_Data._End - _Data._First);\r\n        const auto _Max_capacity = static_cast<_Al_size_type>(_Max_size());\r\n\r\n        const auto _Increase = (_STD max) (_Old_capacity / 2, _Al_size_type{1});\r\n\r\n        if (_Max_capacity - _Increase < _Old_capacity) {\r\n            return _Max_capacity;\r\n        } else {\r\n            return _Old_capacity + _Increase;\r\n        }\r\n    }\r\n\r\n    void _Realloc_buf() {\r\n        auto& _Al                = _Mypair._Get_first();\r\n        auto& _Data              = _Mypair._Myval2;\r\n        const auto _Old_first    = _Data._First;\r\n        const auto _Old_last     = _Data._Last;\r\n        const auto _Old_end      = _Data._End;\r\n        const auto _Old_capacity = static_cast<_Al_size_type>(_Old_end - _Old_first);\r\n        auto _New_capacity       = _Calculate_new_capacity();\r\n        if (_Old_capacity >= _New_capacity) {\r\n            _Xregex_error(regex_constants::error_stack);\r\n        }\r\n\r\n        const auto _New_first = _STD _Allocate_at_least_helper(_Al, _New_capacity);\r\n        _Allocation_guard<_Alloc> _Guard{_Al, _New_first, _New_capacity};\r\n        const auto _New_last = _STD _Uninitialized_move(_Old_first, _Old_last, _New_first, _Al);\r\n        _Data._First         = _New_first;\r\n        _Data._Last          = _New_last;\r\n        _Data._End           = _New_first + static_cast<_Iter_diff_t<_Al_pointer>>(_New_capacity);\r\n        _Guard._Ptr          = nullptr;\r\n\r\n        if (_Data._Allocated) {\r\n            _STD _Destroy_range(_Old_first, _Old_last, _Al);\r\n            _Al.deallocate(_Old_first, _Old_capacity);\r\n        } else {\r\n            _Data._Allocated = true;\r\n            _STD _Destroy_range(_Old_first, _Old_last);\r\n        }\r\n    }\r\n\r\n    _Compressed_pair<_Alloc, _Vector_state> _Mypair;\r\n};\r\n\r\ntemplate <class _BidIt, class _Elem, class _RxTraits, class _It, class _Alloc>\r\nclass _Matcher3 { // provides ways to match a regular expression to a text sequence\r\nprivate:\r\n    using _Loop_vals_type   = _Loop_vals_v3_t<_Iter_diff_t<_It>>;\r\n    using _Tgt_state_type   = _Tgt_state_v2_t<_It, allocator<_It>>;\r\n    using _State_frame_type = _Rx_state_frame_t<_It>;\r\n\r\npublic:\r\n    template <size_t _Stack_storage_size>\r\n    _Matcher3(_It _Pfirst, _It _Plast, const _RxTraits& _Tr, _Root_node* _Re, unsigned int _Nx,\r\n        regex_constants::syntax_option_type _Sf, regex_constants::match_flag_type _Mf,\r\n        unsigned char (&_Stack_storage)[_Stack_storage_size])\r\n        : _Begin(_Pfirst), _End(_Plast), _Sflags(_Sf), _Mflags(_Mf), _Ncap(_Nx),\r\n          _Longest((_Re->_Flags & _Fl_longest) && !(_Mf & regex_constants::match_any)), _Traits(_Tr) {\r\n        _Adl_verify_range(_Pfirst, _Plast);\r\n        if (_Re->_Flags & _Fl_begin_needs_w) {\r\n            _Char_class_w = _Lookup_char_class(static_cast<_Elem>('W'));\r\n        }\r\n\r\n        if (_Re->_Flags & _Fl_begin_needs_s) {\r\n            _Char_class_s = _Lookup_char_class(static_cast<_Elem>('S'));\r\n        }\r\n\r\n        if (_Re->_Flags & _Fl_begin_needs_d) {\r\n            _Char_class_d = _Lookup_char_class(static_cast<_Elem>('D'));\r\n        }\r\n\r\n        _Iter_diff_t<_It> _Input_length = _STD distance(_Pfirst, _Plast);\r\n        _Frames_limit                   = _Calculate_frames_limit(_Input_length);\r\n        _Complexity_limit               = _Calculate_complexity_limit(_Input_length);\r\n\r\n        // TRANSITION, ABI, GH-6025:\r\n        // The first two nodes are of types _N_begin and _N_capture with capturing group 0.\r\n        // These nodes do not affect the state of the matcher and thus can be skipped immediately\r\n        // before engaging the expensive NFA interpreter loop.\r\n        _Start = _Re->_Next->_Next;\r\n\r\n        {\r\n            void* _Buf       = _Stack_storage;\r\n            size_t _Buf_size = _Stack_storage_size;\r\n\r\n            _Loop_vals._Initialize(_Buf, _Buf_size, _Re->_Loops);\r\n\r\n            if (_Ncap > 1U) {\r\n                _Tgt_state._Grps._Initialize(_Buf, _Buf_size, _Ncap - 1U);\r\n                if (_Longest) {\r\n                    _Res._Grps._Initialize(_Buf, _Buf_size, _Ncap - 1U);\r\n                }\r\n\r\n                _Tgt_state._Grp_valid._Initialize(_Buf, _Buf_size, _Ncap - 1U);\r\n                if (_Longest) {\r\n                    _Res._Grp_valid._Initialize(_Buf, _Buf_size, _Ncap - 1U);\r\n                }\r\n            }\r\n\r\n            _Frames._Initialize_and_consume_remaining_buffer(_Buf, _Buf_size);\r\n        }\r\n\r\n// sanitize multiline mode setting\r\n#if _REGEX_LEGACY_MULTILINE_MODE\r\n        _Sflags |= regex_constants::multiline; // old matcher applied multiline mode for all grammars\r\n#else // ^^^ _REGEX_LEGACY_MULTILINE_MODE / !_REGEX_LEGACY_MULTILINE_MODE vvv\r\n        if (_Sflags & regex_constants::_Any_posix) { // multiline mode is ECMAScript-only\r\n            _Sflags &= ~regex_constants::multiline;\r\n        }\r\n#endif // ^^^ !_REGEX_LEGACY_MULTILINE_MODE ^^^\r\n    }\r\n\r\n    void _Setf(regex_constants::match_flag_type _Mf) { // set specified flags\r\n        _Mflags |= _Mf;\r\n    }\r\n\r\n    void _Clearf(regex_constants::match_flag_type _Mf) { // clear specified flags\r\n        _Mflags &= ~_Mf;\r\n    }\r\n\r\n    template <class _Alsubmatch>\r\n    bool _Match(_It _Pfirst, match_results<_BidIt, _Alsubmatch>* _Matches, bool _Full_match) {\r\n        // try to match\r\n        _Begin = _Pfirst;\r\n        return _Match(_Matches, _Full_match);\r\n    }\r\n\r\n    template <class _Alsubmatch>\r\n    bool _Match(match_results<_BidIt, _Alsubmatch>* _Matches, bool _Full_match) {\r\n        // try to match\r\n        if (_Matches) { // clear _Matches before doing work\r\n            _Matches->_Ready = true;\r\n            _Matches->_Resize(0);\r\n        }\r\n\r\n        _Tgt_state._Cur = _Begin;\r\n        _Full           = _Full_match;\r\n        _Frames_count   = 0;\r\n\r\n        _Matched = false;\r\n\r\n        bool _Succeeded = _Match_pat(_Start) || _Matched;\r\n\r\n        if (!_Succeeded) {\r\n            return false;\r\n        }\r\n\r\n        if (_Matches) { // copy results to _Matches\r\n            _Matches->_Resize(_Ncap);\r\n            const auto& _Result = _Longest ? _Res : _Tgt_state;\r\n\r\n            auto& _Submatch0   = _Matches->_At(0U);\r\n            _Submatch0.matched = true;\r\n            _Submatch0.first   = _Begin;\r\n            _Submatch0.second  = _Result._Cur;\r\n\r\n            for (unsigned int _Idx = 1U; _Idx < _Ncap; ++_Idx) { // copy submatch _Idx\r\n                if (_Result._Grp_valid._Get(_Idx - 1U)) { // copy successful match\r\n                    _Matches->_At(_Idx).matched = true;\r\n                    _Matches->_At(_Idx).first   = _Result._Grps[_Idx - 1U]._Begin;\r\n                    _Matches->_At(_Idx).second  = _Result._Grps[_Idx - 1U]._End;\r\n                } else { // copy failed match\r\n                    _Matches->_At(_Idx).matched = false;\r\n                    _Matches->_At(_Idx).first   = _End;\r\n                    _Matches->_At(_Idx).second  = _End;\r\n                }\r\n            }\r\n            _Matches->_Org           = _Begin;\r\n            _Matches->_Pfx().first   = _Begin;\r\n            _Matches->_Pfx().second  = _Matches->_At(0).first;\r\n            _Matches->_Pfx().matched = _Matches->_Pfx().first != _Matches->_Pfx().second;\r\n\r\n            _Matches->_Sfx().first   = _Matches->_At(0).second;\r\n            _Matches->_Sfx().second  = _End;\r\n            _Matches->_Sfx().matched = _Matches->_Sfx().first != _Matches->_Sfx().second;\r\n\r\n            _Matches->_Null().first  = _End;\r\n            _Matches->_Null().second = _End;\r\n        }\r\n        return true;\r\n    }\r\n\r\n    _BidIt _Skip(_BidIt, _BidIt, _Node_base* = nullptr, unsigned int _Recursion_depth = 0U);\r\n\r\nprivate:\r\n    _Tgt_state_type _Tgt_state;\r\n    _Tgt_state_type _Res;\r\n    _Rx_fixed_size_buffer<_Loop_vals_type> _Loop_vals;\r\n    _Rx_small_vector<_State_frame_type> _Frames;\r\n    size_t _Frames_count;\r\n    size_t _Frames_limit;\r\n    long long _Complexity_limit;\r\n\r\n    size_t _Push_frame(_Rx_unwind_ops _Code, _Node_base* _Node);\r\n\r\n    size_t _Calculate_frames_limit(_Iter_diff_t<_It> _Input_length);\r\n    long long _Calculate_complexity_limit(_Iter_diff_t<_It> _Input_length);\r\n    void _Increase_complexity_count(_Iter_diff_t<_It> _Count);\r\n\r\n    void _Prepare_rep(_Node_rep*);\r\n    bool _Find_first_inner_capture_group(_Node_base*, _Loop_vals_type*);\r\n    void _Reset_capture_groups(unsigned int _First);\r\n    _It _Do_class(_Node_base*, _It);\r\n    bool _Match_pat(_Node_base*);\r\n    bool _Better_match();\r\n    bool _Is_wbound() const;\r\n    typename _RxTraits::char_class_type _Lookup_char_class(_Elem) const;\r\n\r\n    _It _Begin;\r\n    _It _End;\r\n    _Node_base* _Start;\r\n    regex_constants::syntax_option_type _Sflags;\r\n    regex_constants::match_flag_type _Mflags;\r\n    bool _Matched = false;\r\n    unsigned int _Ncap;\r\n    bool _Longest;\r\n    const _RxTraits& _Traits;\r\n    bool _Full;\r\n    typename _RxTraits::char_class_type _Char_class_w{};\r\n    typename _RxTraits::char_class_type _Char_class_s{};\r\n    typename _RxTraits::char_class_type _Char_class_d{};\r\n\r\npublic:\r\n    _Matcher3(const _Matcher3&)            = delete;\r\n    _Matcher3& operator=(const _Matcher3&) = delete;\r\n};\r\n\r\nenum _Prs_ret { // indicate class element type\r\n    _Prs_none,\r\n    _Prs_chr,\r\n    _Prs_set\r\n};\r\n\r\nenum class _Lex_mode : unsigned char { _Default, _Character_class };\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nclass _Parser2 { // parse a regular expression\r\npublic:\r\n    _Parser2(const _RxTraits& _Tr, _FwdIt _Pfirst, _FwdIt _Plast, regex_constants::syntax_option_type _Fx);\r\n    _Root_node* _Compile();\r\n\r\nprivate:\r\n    unsigned int _Mark_count() const noexcept {\r\n        return _Grp_idx + 1;\r\n    }\r\n\r\n    // lexing\r\n    [[noreturn]] void _Error(regex_constants::error_type);\r\n\r\n    bool _Is_esc(_FwdIt) const;\r\n    void _Trans();\r\n    void _Next();\r\n    void _Expect(_Meta_type, regex_constants::error_type);\r\n\r\n    // parsing\r\n    int _Do_digits(int _Base, int _Initial, int _Count, regex_constants::error_type _Error_type);\r\n    bool _DecimalDigits(regex_constants::error_type _Error_type, int _Initial = 0);\r\n    void _HexDigits(int);\r\n    bool _OctalDigits();\r\n    _Prs_ret _Do_ex_class(_Meta_type);\r\n    bool _CharacterClassEscape(bool);\r\n    _Prs_ret _ClassEscape();\r\n    _Prs_ret _ClassAtom(bool);\r\n    void _ClassRanges();\r\n    void _CharacterClass();\r\n    bool _IdentityEscape(bool);\r\n    bool _IsIdentityEscape(bool) const;\r\n    bool _Do_ffn(_Elem);\r\n    bool _Do_ffnx(_Elem);\r\n    bool _CharacterEscape(bool);\r\n    void _AtomEscape();\r\n    void _Do_capture_group();\r\n    void _Do_noncapture_group();\r\n    void _Do_assert_group(bool);\r\n    bool _Wrapped_disjunction();\r\n    void _Quantifier();\r\n    bool _Alternative();\r\n    void _Disjunction();\r\n    void _Calculate_loop_simplicity(_Node_base* _Nx, _Node_base* _Ne, _Node_rep* _Outer_rep, bool _Nonreentrant);\r\n\r\n    _FwdIt _Pat;\r\n    _FwdIt _End;\r\n    unsigned int _Grp_idx = 0;\r\n    int _Disj_count       = 0;\r\n    vector<bool> _Finished_grps;\r\n    _Builder2<_FwdIt, _Elem, _RxTraits> _Nfa;\r\n    const _RxTraits& _Traits;\r\n    unsigned long long _L_flags;\r\n    regex_constants::syntax_option_type _Flags;\r\n    int _Val;\r\n    _Meta_type _Mchar;\r\n    _Lex_mode _Mode = _Lex_mode::_Default;\r\n    _Elem _Char;\r\n    _Elem _Unescaped_char;\r\n};\r\n\r\nenum _Lang_flags2 : unsigned long long { // describe language properties\r\n    _L_ext_rep    = 0x000000001ULL, // + and ? repetitions\r\n    _L_alt_pipe   = 0x000000002ULL, // uses '|' for alternation\r\n    _L_alt_nl     = 0x000000004ULL, // newlines outside parentheses/brackets represent alternations (grep, egrep)\r\n    _L_nex_grp    = 0x000000008ULL, // has non-escaped capture groups\r\n    _L_nex_rep    = 0x000000010ULL, // has non-escaped repeats\r\n    _L_nc_asrt    = 0x000000020ULL, // has non-capture groups (?:xxx) and generalized assertions (?=xxx), (?!xxx)\r\n    _L_asrt_wrd   = 0x000000040ULL, // has word boundary assertions (\\b, \\B)\r\n    _L_bckr       = 0x000000080ULL, // has backreferences (ERE doesn't)\r\n    _L_lim_bckr   = 0x000000100ULL, // has limited backreferences (BRE \\1-\\9)\r\n    _L_non_greedy = 0x000000200ULL, // has non-greedy repeats\r\n    _L_esc_uni    = 0x000000400ULL, // has Unicode escape sequences\r\n    _L_esc_hex    = 0x000000800ULL, // has hexadecimal escape sequences\r\n    _L_esc_oct    = 0x000001000ULL, // has octal escape sequences (awk)\r\n    _L_esc_bsp    = 0x000002000ULL, // has backspace escape in character classes\r\n    _L_esc_ffnx   = 0x000004000ULL, // has extra file escapes (\\a and \\b) (awk)\r\n    _L_esc_ffn    = 0x000008000ULL, // has limited file escapes (\\f \\n \\r \\t \\v)\r\n    _L_esc_wsd    = 0x000010000ULL, // has w, s, and d character set escapes\r\n    _L_esc_ctrl   = 0x000020000ULL, // has control escape\r\n    _L_no_nl      = 0x000040000ULL, // newlines within parentheses/brackets are syntax errors (grep, egrep)\r\n    _L_bzr_chr    = 0x000080000ULL, // \\0 is a valid character constant\r\n    _L_grp_esc    = 0x000100000ULL, // \\ is special character in group\r\n    _L_ident_ECMA = 0x000200000ULL, // ECMA identity escape (not identifierpart)\r\n    _L_ident_ERE  = 0x000400000ULL, // ERE identity escape (.[\\*^$, plus {+?}()\r\n    _L_ident_awk  = 0x000800000ULL, // awk identity escape (awk additionally supports \" and / characters)\r\n    _L_anch_rstr  = 0x001000000ULL, // anchor restricted to beginning/end (BRE)\r\n    _L_star_beg   = 0x002000000ULL, // star okay at beginning of RE/expr (BRE)\r\n    _L_empty_grp  = 0x004000000ULL, // empty group allowed (ERE prohibits \"()\")\r\n    _L_paren_bal  = 0x008000000ULL, // ')'/'}' special only after '('/'{' (ERE)\r\n    _L_brk_bal    = 0x010000000ULL, // ']' special only after '[' (ERE, BRE)\r\n    _L_brk_rstr   = 0x020000000ULL, // ']' not special when first character in set (ERE, BRE)\r\n    _L_dsh_rstr   = 0x040000000ULL, // '-' forbidden at range start in set except when first character (ERE, BRE)\r\n    _L_mtch_long  = 0x080000000ULL, // find longest match (ERE, BRE)\r\n};\r\n\r\nclass _Regex_base : public _Container_base { // base class for basic_regex to construct and destroy proxy\r\npublic:\r\n#if 0 < _ITERATOR_DEBUG_LEVEL\r\n    _Regex_base() { // construct proxy\r\n        this->_Myproxy = new _Container_proxy;\r\n        this->_Myproxy->_Mycont = this;\r\n    }\r\n\r\n    ~_Regex_base() noexcept {\r\n        this->_Orphan_all();\r\n        delete this->_Myproxy;\r\n        this->_Myproxy = nullptr;\r\n    }\r\n#endif // 0 < _ITERATOR_DEBUG_LEVEL\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _RxTraits = regex_traits<_Elem>>\r\nclass basic_regex : public _Regex_base { // regular expression\r\npublic:\r\n    using value_type  = _Elem;\r\n    using traits_type = _RxTraits;\r\n    using locale_type = typename _RxTraits::locale_type;\r\n    using string_type = typename _RxTraits::string_type;\r\n    using flag_type   = regex_constants::syntax_option_type;\r\n\r\n    static constexpr flag_type icase      = regex_constants::icase;\r\n    static constexpr flag_type nosubs     = regex_constants::nosubs;\r\n    static constexpr flag_type optimize   = regex_constants::optimize;\r\n    static constexpr flag_type collate    = regex_constants::collate;\r\n    static constexpr flag_type ECMAScript = regex_constants::ECMAScript;\r\n    static constexpr flag_type basic      = regex_constants::basic;\r\n    static constexpr flag_type extended   = regex_constants::extended;\r\n    static constexpr flag_type awk        = regex_constants::awk;\r\n    static constexpr flag_type grep       = regex_constants::grep;\r\n    static constexpr flag_type egrep      = regex_constants::egrep;\r\n    static constexpr flag_type multiline  = regex_constants::multiline;\r\n\r\n    basic_regex() = default; // construct empty object\r\n\r\n    explicit basic_regex(_In_z_ const _Elem* _Ptr, flag_type _Flags = regex_constants::ECMAScript) {\r\n        _Reset(_Ptr, _Ptr + _RxTraits::length(_Ptr), _Flags);\r\n    }\r\n\r\n    basic_regex(_In_reads_(_Count) const _Elem* _Ptr, size_t _Count, flag_type _Flags = regex_constants::ECMAScript) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Ptr != nullptr || _Count == 0, \"constructing basic_regex from an invalid range\");\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 0 ^^^\r\n        _Reset(_Ptr, _Ptr + _Count, _Flags);\r\n    }\r\n\r\n    template <class _STtraits, class _STalloc>\r\n    explicit basic_regex(\r\n        const basic_string<_Elem, _STtraits, _STalloc>& _Str, flag_type _Flags = regex_constants::ECMAScript) {\r\n        _Reset(_Str.data(), _Str.data() + static_cast<ptrdiff_t>(_Str.size()), _Flags);\r\n    }\r\n\r\n    template <class _InIt>\r\n    basic_regex(_InIt _First, _InIt _Last, flag_type _Flags) {\r\n        _Adl_verify_range(_First, _Last);\r\n        _Reset(_Get_unwrapped(_First), _Get_unwrapped(_Last), _Flags);\r\n    }\r\n\r\n    template <class _InIt>\r\n    basic_regex(_InIt _First, _InIt _Last) {\r\n        _Adl_verify_range(_First, _Last);\r\n        _Reset(_Get_unwrapped(_First), _Get_unwrapped(_Last), regex_constants::ECMAScript);\r\n    }\r\n\r\n    basic_regex(const basic_regex& _Right)\r\n#if _ENHANCED_REGEX_VISUALIZER\r\n        : _Traits(_Right._Traits), _Visualization(_Right._Visualization)\r\n#else\r\n        : _Traits(_Right._Traits)\r\n#endif\r\n    { // construct copy of _Right\r\n        _Reset(_Right._Rep);\r\n    }\r\n\r\n    basic_regex(initializer_list<_Elem> _Ilist, flag_type _Flags = regex_constants::ECMAScript) {\r\n        _Reset(_Ilist.begin(), _Ilist.end(), _Flags);\r\n    }\r\n\r\n    basic_regex& operator=(initializer_list<_Elem> _Ilist) { // replace with regular expression in initializer_list\r\n        return assign(_Ilist);\r\n    }\r\n\r\n    basic_regex& assign(initializer_list<_Elem> _Ilist, flag_type _Flags = regex_constants::ECMAScript) {\r\n        // replace with regular expression in initializer_list\r\n        _Reset(_Ilist.begin(), _Ilist.end(), _Flags);\r\n        return *this;\r\n    }\r\n\r\n    basic_regex(basic_regex&& _Right) noexcept {\r\n        _Assign_rv(_STD move(_Right));\r\n    }\r\n\r\n    basic_regex& operator=(basic_regex&& _Right) noexcept {\r\n        _Assign_rv(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    void _Assign_rv(basic_regex&& _Right) {\r\n        if (this != _STD addressof(_Right)) { // clear this and steal from _Right\r\n            _Tidy();\r\n\r\n#if _ENHANCED_REGEX_VISUALIZER\r\n            _Visualization = _STD move(_Right._Visualization);\r\n#endif // _ENHANCED_REGEX_VISUALIZER\r\n\r\n            _Rep        = _Right._Rep;\r\n            _Right._Rep = nullptr;\r\n        }\r\n    }\r\n\r\n    basic_regex& assign(basic_regex&& _Right) noexcept {\r\n        _Assign_rv(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    ~basic_regex() noexcept {\r\n        _Tidy();\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n        const auto _Tombstone{reinterpret_cast<_Root_node*>(_MSVC_STL_UINTPTR_TOMBSTONE_VALUE)};\r\n        _Rep = _Tombstone;\r\n#endif // _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n    }\r\n\r\n    basic_regex& operator=(const basic_regex& _Right) {\r\n        return assign(_Right);\r\n    }\r\n\r\n    basic_regex& operator=(_In_z_ const _Elem* _Ptr) {\r\n        _Reset(_Ptr, _Ptr + _RxTraits::length(_Ptr), ECMAScript);\r\n        return *this;\r\n    }\r\n\r\n    template <class _STtraits, class _STalloc>\r\n    basic_regex& operator=(const basic_string<_Elem, _STtraits, _STalloc>& _Str) {\r\n        _Reset(_Str.data(), _Str.data() + static_cast<ptrdiff_t>(_Str.size()), ECMAScript);\r\n        return *this;\r\n    }\r\n\r\n    unsigned int _Loop_count() const noexcept {\r\n        return _Rep ? _Rep->_Loops : 0;\r\n    }\r\n\r\n    _NODISCARD unsigned int mark_count() const noexcept /* strengthened */ {\r\n        return _Rep ? _Rep->_Marks - 1 : 0;\r\n    }\r\n\r\n    basic_regex& assign(const basic_regex& _Right) {\r\n#if _ENHANCED_REGEX_VISUALIZER\r\n        _Visualization = _Right._Visualization;\r\n#endif // _ENHANCED_REGEX_VISUALIZER\r\n\r\n        _Reset(_Right._Rep);\r\n        return *this;\r\n    }\r\n\r\n    basic_regex& assign(_In_z_ const _Elem* _Ptr, flag_type _Flags = regex_constants::ECMAScript) {\r\n        return assign(_Ptr, _RxTraits::length(_Ptr), _Flags);\r\n    }\r\n\r\n    basic_regex& assign(\r\n        _In_reads_(_Count) const _Elem* _Ptr, size_t _Count, flag_type _Flags = regex_constants::ECMAScript) {\r\n        _Reset(_Ptr, _Ptr + _Count, _Flags);\r\n        return *this;\r\n    }\r\n\r\n    template <class _STtraits, class _STalloc>\r\n    basic_regex& assign(\r\n        const basic_string<_Elem, _STtraits, _STalloc>& _Str, flag_type _Flags = regex_constants::ECMAScript) {\r\n        _Reset(_Str.data(), _Str.data() + static_cast<ptrdiff_t>(_Str.size()), _Flags);\r\n        return *this;\r\n    }\r\n\r\n    template <class _InIt>\r\n    basic_regex& assign(_InIt _First, _InIt _Last, flag_type _Flags = regex_constants::ECMAScript) {\r\n        _Adl_verify_range(_First, _Last);\r\n        _Reset(_Get_unwrapped(_First), _Get_unwrapped(_Last), _Flags);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD flag_type flags() const noexcept /* strengthened */ {\r\n        return _Rep ? _Rep->_Fl : flag_type{};\r\n    }\r\n\r\n    locale_type imbue(locale_type _Loc) { // clear regular expression and set locale to argument\r\n        _Tidy();\r\n        return _Traits.imbue(_Loc);\r\n    }\r\n\r\n    locale_type getloc() const {\r\n        return _Traits.getloc();\r\n    }\r\n\r\n    void swap(basic_regex& _Right) noexcept /* strengthened */ {\r\n        _STD swap(_Rep, _Right._Rep);\r\n\r\n#if _ENHANCED_REGEX_VISUALIZER\r\n        _Visualization.swap(_Right._Visualization);\r\n#endif // _ENHANCED_REGEX_VISUALIZER\r\n    }\r\n\r\n    _Root_node* _Get() const noexcept {\r\n        return _Rep;\r\n    }\r\n\r\n    bool _Empty() const noexcept {\r\n        return _Rep == nullptr;\r\n    }\r\n\r\n    const _RxTraits& _Get_traits() const noexcept {\r\n        return _Traits;\r\n    }\r\n\r\nprivate:\r\n    _Root_node* _Rep = nullptr;\r\n    _RxTraits _Traits;\r\n\r\n#if _ENHANCED_REGEX_VISUALIZER\r\n    basic_string<_Elem> _Visualization;\r\n#endif // _ENHANCED_REGEX_VISUALIZER\r\n\r\n    void _Tidy() noexcept { // free all storage\r\n        if (_Rep && _MT_DECR(reinterpret_cast<_Atomic_counter_t&>(_Rep->_Refs)) == 0) {\r\n            _Destroy_node(_Rep);\r\n        }\r\n\r\n        _Rep = nullptr;\r\n    }\r\n\r\n    template <class _InIt>\r\n    void _Reset(_InIt _First, _InIt _Last, flag_type _Flags) {\r\n        // build regular expression from iterator range\r\n        if constexpr (_Is_ranges_fwd_iter_v<_InIt>) {\r\n#if _ENHANCED_REGEX_VISUALIZER\r\n            _Visualization.assign(_First, _Last);\r\n#endif // _ENHANCED_REGEX_VISUALIZER\r\n\r\n            _Parser2<_InIt, _Elem, _RxTraits> _Prs(_Traits, _First, _Last, _Flags);\r\n            _Root_node* _Rx = _Prs._Compile();\r\n            _Reset(_Rx);\r\n        } else {\r\n            static_assert(_Is_ranges_input_iter_v<_InIt>, \"Iterators must be at least input iterators\");\r\n\r\n            basic_string<_Iter_value_t<_InIt>> _Str(_First, _Last);\r\n\r\n            _Reset(_Str.data(), _Str.data() + static_cast<ptrdiff_t>(_Str.size()), _Flags);\r\n        }\r\n    }\r\n\r\n    void _Reset(_Root_node* _Rx) { // build regular expression holding root node _Rx\r\n        if (_Rx) {\r\n            _MT_INCR(reinterpret_cast<_Atomic_counter_t&>(_Rx->_Refs));\r\n        }\r\n\r\n        _Tidy();\r\n        _Rep = _Rx;\r\n    }\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _FwdIt>\r\nbasic_regex(_FwdIt, _FwdIt, regex_constants::syntax_option_type = regex_constants::ECMAScript)\r\n    -> basic_regex<typename iterator_traits<_FwdIt>::value_type>;\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Elem, class _RxTraits>\r\nvoid swap(basic_regex<_Elem, _RxTraits>& _Left, basic_regex<_Elem, _RxTraits>& _Right) noexcept /* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt, class _Alloc>\r\nvoid swap(match_results<_BidIt, _Alloc>& _Left, match_results<_BidIt, _Alloc>& _Right)\r\n    noexcept(noexcept(_Left.swap(_Right))) /* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD using regex   = basic_regex<char>;\r\n_EXPORT_STD using wregex  = basic_regex<wchar_t>;\r\n_EXPORT_STD using cmatch  = match_results<const char*>;\r\n_EXPORT_STD using wcmatch = match_results<const wchar_t*>;\r\n_EXPORT_STD using smatch  = match_results<string::const_iterator>;\r\n_EXPORT_STD using wsmatch = match_results<wstring::const_iterator>;\r\n\r\ntemplate <class _BidIt, class _Alloc, class _InIt, class _OutIt>\r\n_OutIt _Format_default(const match_results<_BidIt, _Alloc>& _Match, _OutIt _Out, _InIt _First, _InIt _Last,\r\n    regex_constants::match_flag_type) { // format with ECMAScript rules\r\n    while (_First != _Last) { // process one character or escape sequence\r\n        if (*_First != '$') {\r\n            *_Out++ = *_First++;\r\n        } else if (++_First == _Last) {\r\n            *_Out++ = '$'; // preserve $ at end\r\n        } else if (*_First == '$') { // replace $$\r\n            *_Out++ = '$';\r\n            ++_First;\r\n        } else if (*_First == '`') { // replace $`\r\n            _Out = _STD copy(_Match.prefix().first, _Match.prefix().second, _Out);\r\n            ++_First;\r\n        } else if (*_First == '\\'') { // replace $'\r\n            _Out = _STD copy(_Match.suffix().first, _Match.suffix().second, _Out);\r\n            ++_First;\r\n        } else if (*_First == '&') { // replace $&\r\n            ++_First;\r\n            if (_Match.size() != 0) {\r\n                _Out = _STD copy(_Match._At(0).first, _Match._At(0).second, _Out);\r\n            }\r\n        } else if ('0' <= *_First && *_First <= '9') { // replace capture group descriptors $n, $nn\r\n            auto _Num              = static_cast<unsigned int>(*_First++ - '0');\r\n            const bool _Two_digits = _First != _Last && '0' <= *_First && *_First <= '9';\r\n            if (_Two_digits) { // process second digit\r\n                _Num *= 10;\r\n                _Num += static_cast<unsigned int>(*_First++ - '0');\r\n            }\r\n\r\n            if (_Num == 0) { // preserve $0, $00\r\n                *_Out++ = '$';\r\n                *_Out++ = '0';\r\n                if (_Two_digits) {\r\n                    *_Out++ = '0';\r\n                }\r\n            } else if (_Num < _Match.size()) {\r\n                _Out = _STD copy(_Match._At(_Num).first, _Match._At(_Num).second, _Out);\r\n            }\r\n        } else { // replace $x\r\n            *_Out++ = '$';\r\n            *_Out++ = *_First++;\r\n        }\r\n    }\r\n    return _Out;\r\n}\r\n\r\ntemplate <class _BidIt, class _Alloc, class _InIt, class _OutIt>\r\n_OutIt _Format_sed(const match_results<_BidIt, _Alloc>& _Match, _OutIt _Out, _InIt _First, _InIt _Last,\r\n    regex_constants::match_flag_type) { // format with sed rules\r\n    while (_First != _Last) { // process one character or escape sequence\r\n        if (*_First == '&') { // replace with full match\r\n            ++_First;\r\n            if (_Match.size() != 0) {\r\n                _Out = _STD copy(_Match._At(0).first, _Match._At(0).second, _Out);\r\n            }\r\n        } else if (*_First != '\\\\') {\r\n            *_Out++ = *_First++;\r\n        } else if (++_First != _Last) {\r\n            if ('0' <= *_First && *_First <= '9') { // replace \\n, including \\0\r\n                const auto _Num = static_cast<unsigned int>(*_First++ - '0');\r\n                if (_Num < _Match.size()) {\r\n                    _Out = _STD copy(_Match._At(_Num).first, _Match._At(_Num).second, _Out);\r\n                }\r\n            } else {\r\n                *_Out++ = *_First++; // replace \\x, including \\\\, \\&\r\n            }\r\n        }\r\n    }\r\n\r\n    return _Out;\r\n}\r\n\r\ntemplate <class _BidIt, class _Alloc, class _Elem, class _RxTraits, class _It>\r\nbool _Regex_match1(_It _First, _It _Last, match_results<_BidIt, _Alloc>* _Matches,\r\n    const basic_regex<_Elem, _RxTraits>& _Re, regex_constants::match_flag_type _Flgs,\r\n    bool _Full) { // try to match regular expression to target text\r\n    static_assert(_Is_ranges_bidi_iter_v<_It>,\r\n        \"regex_match requires bidirectional iterators or stronger. See N5014 [re.alg.match]/1.\");\r\n    if (_Re._Empty()) {\r\n        return false;\r\n    }\r\n\r\n    alignas(_Loop_vals_v3_t<_Iter_diff_t<_It>>) alignas(_Rx_capture_range_t<_It>) //\r\n        alignas(_Rx_state_frame_t<_It>) unsigned char _Stackbuf[4096];\r\n    _Matcher3<_BidIt, _Elem, _RxTraits, _It, void> _Mx(\r\n        _First, _Last, _Re._Get_traits(), _Re._Get(), _Re.mark_count() + 1, _Re.flags(), _Flgs, _Stackbuf);\r\n    return _Mx._Match(_Matches, _Full);\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt, class _Alloc, class _Elem, class _RxTraits>\r\nbool regex_match(_BidIt _First, _BidIt _Last, match_results<_BidIt, _Alloc>& _Matches,\r\n    const basic_regex<_Elem, _RxTraits>& _Re, regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // try to match regular expression to target text\r\n    _Adl_verify_range(_First, _Last);\r\n    return _Regex_match1(_First, _Last, _STD addressof(_Matches), _Re, _Flgs, true);\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt, class _Elem, class _RxTraits>\r\n_NODISCARD bool regex_match(_BidIt _First, _BidIt _Last, const basic_regex<_Elem, _RxTraits>& _Re,\r\n    regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // try to match regular expression to target text\r\n    _Adl_verify_range(_First, _Last);\r\n    return _Regex_match1(_Get_unwrapped(_First), _Get_unwrapped(_Last),\r\n        static_cast<match_results<_Unwrapped_t<const _BidIt&>>*>(nullptr), _Re, _Flgs | regex_constants::match_any,\r\n        true);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _RxTraits>\r\n_NODISCARD bool regex_match(_In_z_ const _Elem* _Str, const basic_regex<_Elem, _RxTraits>& _Re,\r\n    regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // try to match regular expression to target text\r\n    const _Elem* _Last = _Str + char_traits<_Elem>::length(_Str);\r\n    return _Regex_match1(\r\n        _Str, _Last, static_cast<match_results<const _Elem*>*>(nullptr), _Re, _Flgs | regex_constants::match_any, true);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Alloc, class _RxTraits>\r\nbool regex_match(_In_z_ const _Elem* _Str, match_results<const _Elem*, _Alloc>& _Matches,\r\n    const basic_regex<_Elem, _RxTraits>& _Re, regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // try to match regular expression to target text\r\n    const _Elem* _Last = _Str + char_traits<_Elem>::length(_Str);\r\n    return _Regex_match1(_Str, _Last, _STD addressof(_Matches), _Re, _Flgs, true);\r\n}\r\n\r\n_EXPORT_STD template <class _StTraits, class _StAlloc, class _Alloc, class _Elem, class _RxTraits>\r\nbool regex_match(const basic_string<_Elem, _StTraits, _StAlloc>& _Str,\r\n    match_results<typename basic_string<_Elem, _StTraits, _StAlloc>::const_iterator, _Alloc>& _Matches,\r\n    const basic_regex<_Elem, _RxTraits>& _Re, regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // try to match regular expression to target text\r\n    return _Regex_match1(_Str.begin(), _Str.end(), _STD addressof(_Matches), _Re, _Flgs, true);\r\n}\r\n\r\n_EXPORT_STD template <class _StTraits, class _StAlloc, class _Alloc, class _Elem, class _RxTraits>\r\nbool regex_match(const basic_string<_Elem, _StTraits, _StAlloc>&&,\r\n    match_results<typename basic_string<_Elem, _StTraits, _StAlloc>::const_iterator, _Alloc>&,\r\n    const basic_regex<_Elem, _RxTraits>&, regex_constants::match_flag_type = regex_constants::match_default) = delete;\r\n\r\n_EXPORT_STD template <class _StTraits, class _StAlloc, class _Elem, class _RxTraits>\r\n_NODISCARD bool regex_match(const basic_string<_Elem, _StTraits, _StAlloc>& _Str,\r\n    const basic_regex<_Elem, _RxTraits>& _Re, regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // try to match regular expression to target text\r\n    return _Regex_match1(_Str.data(), _Str.data() + _Str.size(), static_cast<match_results<const _Elem*>*>(nullptr),\r\n        _Re, _Flgs | regex_constants::match_any, true);\r\n}\r\n\r\ntemplate <class _BidIt, class _Alloc, class _Elem, class _RxTraits, class _It>\r\nbool _Regex_search2(_It _First, _It _Last, match_results<_BidIt, _Alloc>* _Matches,\r\n    const basic_regex<_Elem, _RxTraits>& _Re, regex_constants::match_flag_type _Flgs, _It _Org) {\r\n    static_assert(_Is_ranges_bidi_iter_v<_It>,\r\n        \"regex_search requires bidirectional iterators or stronger. See N5014 [re.alg.search]/1.\");\r\n    // search for regular expression match in target text\r\n    if (_Re._Empty()) {\r\n        return false;\r\n    }\r\n\r\n    bool _Found      = false;\r\n    const _It _Begin = _First;\r\n    if ((_Flgs & regex_constants::_Skip_zero_length) && _First != _Last) {\r\n        ++_First;\r\n    }\r\n\r\n    alignas(_Loop_vals_v3_t<_Iter_diff_t<_It>>) alignas(_Rx_capture_range_t<_It>) //\r\n        alignas(_Rx_state_frame_t<_It>) unsigned char _Stackbuf[4096];\r\n    _Matcher3<_BidIt, _Elem, _RxTraits, _It, void> _Mx(\r\n        _First, _Last, _Re._Get_traits(), _Re._Get(), _Re.mark_count() + 1, _Re.flags(), _Flgs, _Stackbuf);\r\n\r\n    if (_Mx._Match(_Matches, false)) {\r\n        _Found = true;\r\n    } else if (_First != _Last && !(_Flgs & regex_constants::match_continuous)) { // try more on suffixes\r\n        _Mx._Setf(regex_constants::match_prev_avail);\r\n        _Mx._Clearf(regex_constants::_Match_not_null);\r\n        while ((_First = _Mx._Skip(++_First, _Last)) != _Last) {\r\n            if (_Mx._Match(_First, _Matches, false)) { // found match starting at _First\r\n                _Found = true;\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (!_Found && _Mx._Match(_Last, _Matches, false)) {\r\n            _Found = true;\r\n        }\r\n    }\r\n\r\n    if (_Found && _Matches) { // update _Matches\r\n        _Matches->_Org           = _Org;\r\n        _Matches->_Pfx().first   = _Begin;\r\n        _Matches->_Pfx().matched = _Matches->_Pfx().first != _Matches->_Pfx().second;\r\n    }\r\n    return _Found;\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt, class _Alloc, class _Elem, class _RxTraits>\r\nbool regex_search(_BidIt _First, _BidIt _Last, match_results<_BidIt, _Alloc>& _Matches,\r\n    const basic_regex<_Elem, _RxTraits>& _Re, regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // search for regular expression match in target text\r\n    _Adl_verify_range(_First, _Last);\r\n    return _Regex_search2(_First, _Last, _STD addressof(_Matches), _Re, _Flgs, _First);\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt, class _Elem, class _RxTraits>\r\n_NODISCARD bool regex_search(_BidIt _First, _BidIt _Last, const basic_regex<_Elem, _RxTraits>& _Re,\r\n    regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // search for regular expression match in target text\r\n    _Adl_verify_range(_First, _Last);\r\n    return _Regex_search2(_Get_unwrapped(_First), _Get_unwrapped(_Last),\r\n        static_cast<match_results<_Unwrapped_t<const _BidIt&>>*>(nullptr), _Re, _Flgs | regex_constants::match_any,\r\n        _Get_unwrapped(_First));\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _RxTraits>\r\n_NODISCARD bool regex_search(_In_z_ const _Elem* _Str, const basic_regex<_Elem, _RxTraits>& _Re,\r\n    regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // search for regular expression match in target text\r\n    const _Elem* _Last = _Str + char_traits<_Elem>::length(_Str);\r\n    return _Regex_search2(\r\n        _Str, _Last, static_cast<match_results<const _Elem*>*>(nullptr), _Re, _Flgs | regex_constants::match_any, _Str);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Alloc, class _RxTraits>\r\nbool regex_search(_In_z_ const _Elem* _Str, match_results<const _Elem*, _Alloc>& _Matches,\r\n    const basic_regex<_Elem, _RxTraits>& _Re, regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // search for regular expression match in target text\r\n    const _Elem* _Last = _Str + char_traits<_Elem>::length(_Str);\r\n    return _Regex_search2(_Str, _Last, _STD addressof(_Matches), _Re, _Flgs, _Str);\r\n}\r\n\r\n_EXPORT_STD template <class _StTraits, class _StAlloc, class _Alloc, class _Elem, class _RxTraits>\r\nbool regex_search(const basic_string<_Elem, _StTraits, _StAlloc>& _Str,\r\n    match_results<typename basic_string<_Elem, _StTraits, _StAlloc>::const_iterator, _Alloc>& _Matches,\r\n    const basic_regex<_Elem, _RxTraits>& _Re, regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // search for regular expression match in target text\r\n    return _Regex_search2(_Str.begin(), _Str.end(), _STD addressof(_Matches), _Re, _Flgs, _Str.begin());\r\n}\r\n\r\n_EXPORT_STD template <class _StTraits, class _StAlloc, class _Alloc, class _Elem, class _RxTraits>\r\nbool regex_search(const basic_string<_Elem, _StTraits, _StAlloc>&&,\r\n    match_results<typename basic_string<_Elem, _StTraits, _StAlloc>::const_iterator, _Alloc>&,\r\n    const basic_regex<_Elem, _RxTraits>&, regex_constants::match_flag_type = regex_constants::match_default) = delete;\r\n\r\n_EXPORT_STD template <class _StTraits, class _StAlloc, class _Elem, class _RxTraits>\r\n_NODISCARD bool regex_search(const basic_string<_Elem, _StTraits, _StAlloc>& _Str,\r\n    const basic_regex<_Elem, _RxTraits>& _Re, regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // search for regular expression match in target text\r\n    using _Iter = typename basic_string<_Elem, _StTraits, _StAlloc>::const_pointer;\r\n\r\n    _Iter _First = _Str.c_str();\r\n    _Iter _Last  = _First + _Str.size();\r\n    return _Regex_search2(\r\n        _First, _Last, static_cast<match_results<_Iter>*>(nullptr), _Re, _Flgs | regex_constants::match_any, _First);\r\n}\r\n\r\ntemplate <class _OutIt, class _BidIt, class _RxTraits, class _Elem, class _Traits, class _Alloc>\r\n_OutIt _Regex_replace1(_OutIt _Result, _BidIt _First, _BidIt _Last, const basic_regex<_Elem, _RxTraits>& _Re,\r\n    const basic_string<_Elem, _Traits, _Alloc>& _Fmt, regex_constants::match_flag_type _Flgs) {\r\n    static_assert(_Is_ranges_bidi_iter_v<_BidIt>,\r\n        \"regex_replace requires bidirectional iterators or stronger. See N5014 [re.alg.replace].\");\r\n    // search and replace\r\n    match_results<_BidIt> _Matches;\r\n    _BidIt _Pos                             = _First;\r\n    regex_constants::match_flag_type _Flags = _Flgs;\r\n    regex_constants::match_flag_type _Not_null{};\r\n\r\n    while (\r\n        _Regex_search2(_Pos, _Last, _STD addressof(_Matches), _Re, _Flags | _Not_null, _Pos)) { // replace at each match\r\n        if (!(_Flgs & regex_constants::format_no_copy)) {\r\n            _Result = _STD copy(_Matches.prefix().first, _Matches.prefix().second, _Result);\r\n        }\r\n\r\n        _Result = _Matches._Format1(_Result, _Fmt.data(), _Fmt.data() + _Fmt.size(), _Flags);\r\n\r\n        _Pos = _Matches[0].second;\r\n        if (_Pos == _Last || (_Flgs & regex_constants::format_first_only)) {\r\n            break;\r\n        }\r\n\r\n        if (_Matches[0].first == _Matches[0].second) {\r\n            _Not_null = regex_constants::_Match_not_null;\r\n        } else { // non-null match, recognize earlier text\r\n            _Not_null = regex_constants::match_flag_type{};\r\n            _Flags |= regex_constants::match_prev_avail;\r\n        }\r\n    }\r\n    return _Flgs & regex_constants::format_no_copy ? _Result : _STD _Copy_unchecked(_Pos, _Last, _Result);\r\n}\r\n\r\n_EXPORT_STD template <class _OutIt, class _BidIt, class _RxTraits, class _Elem, class _Traits, class _Alloc>\r\n_OutIt regex_replace(_OutIt _Result, _BidIt _First, _BidIt _Last, const basic_regex<_Elem, _RxTraits>& _Re,\r\n    const basic_string<_Elem, _Traits, _Alloc>& _Fmt,\r\n    regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // search and replace, iterator result, string format\r\n    _Adl_verify_range(_First, _Last);\r\n    _Seek_wrapped(_Result, _Regex_replace1(_Get_unwrapped_unverified(_Result), _Get_unwrapped(_First),\r\n                               _Get_unwrapped(_Last), _Re, _Fmt, _Flgs));\r\n    return _Result;\r\n}\r\n\r\n_EXPORT_STD template <class _OutIt, class _BidIt, class _RxTraits, class _Elem>\r\n_OutIt regex_replace(_OutIt _Result, _BidIt _First, _BidIt _Last, const basic_regex<_Elem, _RxTraits>& _Re,\r\n    const _Elem* _Ptr, regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // search and replace, iterator result, NTBS format\r\n    const basic_string<_Elem> _Fmt(_Ptr);\r\n    return _STD regex_replace(_Result, _First, _Last, _Re, _Fmt, _Flgs);\r\n}\r\n\r\n_EXPORT_STD template <class _RxTraits, class _Elem, class _Traits1, class _Alloc1, class _Traits2, class _Alloc2>\r\n_NODISCARD basic_string<_Elem, _Traits1, _Alloc1> regex_replace(const basic_string<_Elem, _Traits1, _Alloc1>& _Str,\r\n    const basic_regex<_Elem, _RxTraits>& _Re, const basic_string<_Elem, _Traits2, _Alloc2>& _Fmt,\r\n    regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // search and replace, string result, string target, string format\r\n    basic_string<_Elem, _Traits1, _Alloc1> _Res;\r\n    _STD regex_replace(_STD back_inserter(_Res), _Str.begin(), _Str.end(), _Re, _Fmt, _Flgs);\r\n    return _Res;\r\n}\r\n\r\n_EXPORT_STD template <class _RxTraits, class _Elem, class _Traits1, class _Alloc1>\r\n_NODISCARD basic_string<_Elem, _Traits1, _Alloc1> regex_replace(const basic_string<_Elem, _Traits1, _Alloc1>& _Str,\r\n    const basic_regex<_Elem, _RxTraits>& _Re, const _Elem* _Ptr,\r\n    regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // search and replace, string result, string target, NTBS format\r\n    basic_string<_Elem, _Traits1, _Alloc1> _Res;\r\n    const basic_string<_Elem> _Fmt(_Ptr);\r\n    _STD regex_replace(_STD back_inserter(_Res), _Str.begin(), _Str.end(), _Re, _Fmt, _Flgs);\r\n    return _Res;\r\n}\r\n\r\n_EXPORT_STD template <class _RxTraits, class _Elem, class _Traits2, class _Alloc2>\r\n_NODISCARD basic_string<_Elem> regex_replace(const _Elem* _Pstr, const basic_regex<_Elem, _RxTraits>& _Re,\r\n    const basic_string<_Elem, _Traits2, _Alloc2>& _Fmt,\r\n    regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // search and replace, string result, NTBS target, string format\r\n    basic_string<_Elem> _Res;\r\n    const basic_string<_Elem> _Str(_Pstr);\r\n    _STD regex_replace(_STD back_inserter(_Res), _Str.begin(), _Str.end(), _Re, _Fmt, _Flgs);\r\n    return _Res;\r\n}\r\n\r\n_EXPORT_STD template <class _RxTraits, class _Elem>\r\n_NODISCARD basic_string<_Elem> regex_replace(const _Elem* _Pstr, const basic_regex<_Elem, _RxTraits>& _Re,\r\n    const _Elem* _Ptr, regex_constants::match_flag_type _Flgs = regex_constants::match_default) {\r\n    // search and replace, string result, NTBS target, NTBS format\r\n    basic_string<_Elem> _Res;\r\n    const basic_string<_Elem> _Str(_Pstr);\r\n    const basic_string<_Elem> _Fmt(_Ptr);\r\n    _STD regex_replace(_STD back_inserter(_Res), _Str.begin(), _Str.end(), _Re, _Fmt, _Flgs);\r\n    return _Res;\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt, class _Elem = _Iter_value_t<_BidIt>, class _RxTraits = regex_traits<_Elem>>\r\nclass regex_iterator : public _Iterator_base {\r\npublic:\r\n    using regex_type        = basic_regex<_Elem, _RxTraits>;\r\n    using value_type        = match_results<_BidIt>;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = const value_type*;\r\n    using reference         = const value_type&;\r\n    using iterator_category = forward_iterator_tag;\r\n#if _HAS_CXX20\r\n    using iterator_concept = input_iterator_tag;\r\n#endif // _HAS_CXX20\r\n\r\n    regex_iterator() = default; // construct end of sequence iterator\r\n\r\n    regex_iterator(_BidIt _First, _BidIt _Last, const regex_type& _Re,\r\n        regex_constants::match_flag_type _Fl = regex_constants::match_default)\r\n        : _Begin(_First), _End(_Last), _MyRe(_STD addressof(_Re)), _Flags(_Fl) {\r\n        _Adl_verify_range(_Begin, _End);\r\n        if (!_Regex_search2(_Begin, _End, _STD addressof(_MyVal), *_MyRe, _Flags, _Begin)) {\r\n            _MyRe = nullptr;\r\n        } else {\r\n            this->_Adopt(_MyRe);\r\n        }\r\n    }\r\n\r\n    regex_iterator(\r\n        _BidIt, _BidIt, const regex_type&&, regex_constants::match_flag_type = regex_constants::match_default) = delete;\r\n\r\n    _NODISCARD bool operator==(const regex_iterator& _Right) const {\r\n        if (_MyRe != _Right._MyRe) {\r\n            return false;\r\n        } else if (!_MyRe) {\r\n            return true;\r\n        }\r\n\r\n        return _Begin == _Right._Begin && _End == _Right._End && _Flags == _Right._Flags\r\n            && _MyVal._At(0) == _Right._MyVal._At(0);\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD bool operator!=(const regex_iterator& _Right) const {\r\n        return !(*this == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD bool operator==(default_sentinel_t) const noexcept /* strengthened */ {\r\n        return !_MyRe;\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    _NODISCARD const value_type& operator*() const noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_MyRe, \"regex_iterator not dereferenceable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return _MyVal;\r\n    }\r\n\r\n    _NODISCARD const value_type* operator->() const noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_MyRe, \"regex_iterator not dereferenceable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return _STD addressof(_MyVal);\r\n    }\r\n\r\n    regex_iterator& operator++() {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_MyRe, \"regex_iterator not incrementable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        _BidIt _Start = _MyVal._At(0).second;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(this->_Getcont(), \"regex_iterator orphaned\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        bool _Skip_empty_match = false;\r\n        if (_MyVal._At(0).first == _MyVal._At(0).second) { // handle zero-length match\r\n            if (_Start == _End) { // store end-of-sequence iterator\r\n                _MyRe = nullptr;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n                this->_Adopt(nullptr);\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n                return *this;\r\n            }\r\n\r\n            // _Adl_verify_range(_Start, _End) checked in constructor\r\n            if (_Regex_search2(_Start, _End, _STD addressof(_MyVal), *_MyRe,\r\n                    _Flags | regex_constants::match_not_null | regex_constants::match_continuous, _Begin)) {\r\n                return *this;\r\n            }\r\n\r\n            _Skip_empty_match = true;\r\n        }\r\n        _Flags = _Flags | regex_constants::match_prev_avail;\r\n\r\n        auto _Tmp_flags = _Flags;\r\n        if (_Skip_empty_match) {\r\n            _Tmp_flags |= regex_constants::_Skip_zero_length;\r\n        }\r\n\r\n        // _Adl_verify_range(_Start, _End) checked in constructor\r\n        if (!_Regex_search2(_Start, _End, _STD addressof(_MyVal), *_MyRe, _Tmp_flags, _Begin)) {\r\n            // mark at end of sequence\r\n            _MyRe = nullptr;\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    regex_iterator operator++(int) {\r\n        regex_iterator _Tmp = *this;\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    bool _Atend() const noexcept { // test for end iterator\r\n        return !_MyRe;\r\n    }\r\n\r\nprivate:\r\n    _BidIt _Begin{}; // input sequence\r\n    _BidIt _End{}; // input sequence\r\n    const regex_type* _MyRe = nullptr; // pointer to basic_regex object\r\n    regex_constants::match_flag_type _Flags{};\r\n    match_results<_BidIt> _MyVal; // lookahead value (if _MyRe not null)\r\n};\r\n\r\n_EXPORT_STD using cregex_iterator  = regex_iterator<const char*>;\r\n_EXPORT_STD using wcregex_iterator = regex_iterator<const wchar_t*>;\r\n_EXPORT_STD using sregex_iterator  = regex_iterator<string::const_iterator>;\r\n_EXPORT_STD using wsregex_iterator = regex_iterator<wstring::const_iterator>;\r\n\r\n_EXPORT_STD template <class _BidIt, class _Elem = _Iter_value_t<_BidIt>, class _RxTraits = regex_traits<_Elem>>\r\nclass regex_token_iterator {\r\npublic:\r\n    using _Position         = regex_iterator<_BidIt, _Elem, _RxTraits>;\r\n    using regex_type        = basic_regex<_Elem, _RxTraits>;\r\n    using value_type        = sub_match<_BidIt>;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = const value_type*;\r\n    using reference         = const value_type&;\r\n    using iterator_category = forward_iterator_tag;\r\n#if _HAS_CXX20\r\n    using iterator_concept = input_iterator_tag;\r\n#endif // _HAS_CXX20\r\n\r\n    regex_token_iterator() = default; // construct end of sequence iterator\r\n\r\n    regex_token_iterator(_BidIt _First, _BidIt _Last, const regex_type& _Re, int _Sub = 0,\r\n        regex_constants::match_flag_type _Fl = regex_constants::match_default)\r\n        : _Pos(_First, _Last, _Re, _Fl), _Cur(0), _Subs(&_Sub, &_Sub + 1) {\r\n        _Init(_First, _Last);\r\n    }\r\n\r\n    regex_token_iterator(_BidIt _First, _BidIt _Last, const regex_type& _Re, const vector<int>& _Subx,\r\n        regex_constants::match_flag_type _Fl = regex_constants::match_default)\r\n        : _Pos(_First, _Last, _Re, _Fl), _Cur(0), _Subs(_Subx.begin(), _Subx.end()) {\r\n        if (_Subs.empty()) {\r\n            _Res = nullptr; // treat empty vector as end of sequence\r\n        } else {\r\n            _Init(_First, _Last);\r\n        }\r\n    }\r\n\r\n    template <size_t _Nx>\r\n    regex_token_iterator(_BidIt _First, _BidIt _Last, const regex_type& _Re, const int (&_Subx)[_Nx],\r\n        regex_constants::match_flag_type _Fl = regex_constants::match_default)\r\n        : _Pos(_First, _Last, _Re, _Fl), _Cur(0), _Subs(_Subx, _Subx + _Nx) {\r\n        _Init(_First, _Last);\r\n    }\r\n\r\n    regex_token_iterator(_BidIt _First, _BidIt _Last, const regex_type& _Re, initializer_list<int> _Ilist,\r\n        regex_constants::match_flag_type _Fl = regex_constants::match_default)\r\n        : _Pos(_First, _Last, _Re, _Fl), _Cur(0), _Subs(_Ilist.begin(), _Ilist.end()) {\r\n        _Init(_First, _Last);\r\n    }\r\n\r\n    regex_token_iterator(_BidIt, _BidIt, const regex_type&&, int = 0,\r\n        regex_constants::match_flag_type = regex_constants::match_default) = delete;\r\n\r\n    regex_token_iterator(_BidIt, _BidIt, const regex_type&&, const vector<int>&,\r\n        regex_constants::match_flag_type = regex_constants::match_default) = delete;\r\n\r\n    template <size_t _Nx>\r\n    regex_token_iterator(_BidIt, _BidIt, const regex_type&&, const int (&)[_Nx],\r\n        regex_constants::match_flag_type = regex_constants::match_default) = delete;\r\n\r\n    regex_token_iterator(_BidIt, _BidIt, const regex_type&&, initializer_list<int>,\r\n        regex_constants::match_flag_type = regex_constants::match_default) = delete;\r\n\r\n    regex_token_iterator(const regex_token_iterator& _Right)\r\n        : _Pos(_Right._Pos), _Suffix(_Right._Suffix), _Cur(_Right._Cur), _Subs(_Right._Subs) {\r\n        // construct copy of _Right\r\n        if (!_Right._Res) {\r\n            _Res = nullptr;\r\n        } else if (_Right._Res == _STD addressof(_Right._Suffix)) {\r\n            _Res = _STD addressof(_Suffix);\r\n        } else {\r\n            _Res = _Current();\r\n        }\r\n    }\r\n\r\n    regex_token_iterator& operator=(const regex_token_iterator& _Right) {\r\n        if (this != _STD addressof(_Right)) { // copy from _Right\r\n            _Pos    = _Right._Pos;\r\n            _Cur    = _Right._Cur;\r\n            _Suffix = _Right._Suffix;\r\n            _Subs   = _Right._Subs;\r\n            if (!_Right._Res) {\r\n                _Res = nullptr;\r\n            } else if (_Right._Res == _STD addressof(_Right._Suffix)) {\r\n                _Res = _STD addressof(_Suffix);\r\n            } else {\r\n                _Res = _Current();\r\n            }\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD bool operator==(const regex_token_iterator& _Right) const {\r\n        if (!_Res || !_Right._Res) {\r\n            return _Res == _Right._Res;\r\n        }\r\n\r\n        return *_Res == *_Right._Res && _Pos == _Right._Pos && _Subs == _Right._Subs;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD bool operator!=(const regex_token_iterator& _Right) const {\r\n        return !(*this == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD bool operator==(default_sentinel_t) const noexcept /* strengthened */ {\r\n        return !_Res;\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    _NODISCARD const value_type& operator*() const noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Res, \"regex_token_iterator not dereferenceable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        _Analysis_assume_(_Res);\r\n        return *_Res;\r\n    }\r\n\r\n    _NODISCARD const value_type* operator->() const noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Res, \"regex_token_iterator not dereferenceable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return _Res;\r\n    }\r\n\r\n    regex_token_iterator& operator++() {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Res, \"regex_token_iterator not incrementable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        if (_Res == _STD addressof(_Suffix)) {\r\n            _Res = nullptr;\r\n        } else if (++_Cur < _Subs.size()) {\r\n            _Res = _Current();\r\n        } else { // advance to next full match\r\n            _Cur = 0;\r\n            _Position _Prev(_Pos);\r\n            ++_Pos;\r\n            if (!_Pos._Atend()) {\r\n                _Res = _Current();\r\n            } else if (_Has_suffix() && _Prev->suffix().length() != 0) { // mark suffix\r\n                _Suffix.matched = true;\r\n                _Suffix.first   = _Prev->suffix().first;\r\n                _Suffix.second  = _Prev->suffix().second;\r\n                _Res            = _STD addressof(_Suffix);\r\n            } else {\r\n                _Res = nullptr;\r\n            }\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    regex_token_iterator operator++(int) {\r\n        regex_token_iterator _Tmp = *this;\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\nprivate:\r\n    _Position _Pos;\r\n    const value_type* _Res = nullptr;\r\n    value_type _Suffix;\r\n    size_t _Cur = 0;\r\n    vector<int> _Subs;\r\n\r\n    bool _Has_suffix() const { // check for suffix specifier\r\n        return _STD find(_Subs.begin(), _Subs.end(), -1) != _Subs.end();\r\n    }\r\n\r\n    void _Init(_BidIt _First, _BidIt _Last) { // initialize\r\n        _Adl_verify_range(_First, _Last);\r\n        if (!_Pos._Atend()) {\r\n            _Res = _Current();\r\n        } else if (_Has_suffix()) { // mark suffix (no match)\r\n            _Suffix.matched = true;\r\n            _Suffix.first   = _First;\r\n            _Suffix.second  = _Last;\r\n            _Res            = _STD addressof(_Suffix);\r\n        } else {\r\n            _Res = nullptr;\r\n        }\r\n    }\r\n\r\n    const value_type* _Current() const noexcept {\r\n        return &(_Subs[_Cur] == -1 ? _Pos->prefix() : (*_Pos)[static_cast<size_t>(_Subs[_Cur])]);\r\n    }\r\n};\r\n\r\n_EXPORT_STD using cregex_token_iterator  = regex_token_iterator<const char*>;\r\n_EXPORT_STD using wcregex_token_iterator = regex_token_iterator<const wchar_t*>;\r\n_EXPORT_STD using sregex_token_iterator  = regex_token_iterator<string::const_iterator>;\r\n_EXPORT_STD using wsregex_token_iterator = regex_token_iterator<wstring::const_iterator>;\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\n_Builder2<_FwdIt, _Elem, _RxTraits>::_Builder2(const _RxTraits& _Tr, regex_constants::syntax_option_type _Fx)\r\n    : _Root(new _Root_node), _Current(_Root), _Flags(_Fx), _Traits(_Tr) {}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Setlong() { // set flag\r\n    _Root->_Flags |= _Fl_longest;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Negate() { // set flag\r\n    _Current->_Flags ^= _Fl_negate;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\n_Node_base* _Builder2<_FwdIt, _Elem, _RxTraits>::_Getmark() const {\r\n    return _Current;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\n_Node_base* _Builder2<_FwdIt, _Elem, _RxTraits>::_Link_node(_Node_base* _Nx) { // insert _Nx at current location\r\n    _Nx->_Prev = _Current;\r\n    if (_Current->_Next) { // set back pointer\r\n        _Nx->_Next             = _Current->_Next;\r\n        _Current->_Next->_Prev = _Nx;\r\n    }\r\n    _Current->_Next = _Nx;\r\n    _Current        = _Nx;\r\n    return _Nx;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Insert_node(_Node_base* _Insert_before, _Node_base* _To_insert) {\r\n    // insert _To_insert into the graph before the node _Insert_before\r\n    _Insert_before->_Prev->_Next = _To_insert;\r\n    _To_insert->_Prev            = _Insert_before->_Prev;\r\n    _Insert_before->_Prev        = _To_insert;\r\n    _To_insert->_Next            = _Insert_before;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\n_Node_base* _Builder2<_FwdIt, _Elem, _RxTraits>::_New_node(_Node_type _Kind) { // allocate and link simple node\r\n    return _Link_node(new _Node_base(_Kind));\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_bol() { // add bol node\r\n    _New_node(_N_bol);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_eol() { // add eol node\r\n    _New_node(_N_eol);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_wbound() { // add wbound node\r\n    _New_node(_N_wbound);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_dot() { // add dot node\r\n    _New_node(_N_dot);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_str_node() { // add string node\r\n    _Link_node(new _Node_str<_Elem>);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_char(_Elem _Ch) { // append character\r\n    if (_Current->_Kind != _N_str) {\r\n        _Add_str_node();\r\n    }\r\n\r\n    if (_Flags & regex_constants::icase) {\r\n        _Ch = _Traits.translate_nocase(_Ch);\r\n    } else if (_Flags & regex_constants::collate) {\r\n        _Ch = _Traits.translate(_Ch);\r\n    }\r\n\r\n    _Node_str<_Elem>* _Node = static_cast<_Node_str<_Elem>*>(_Current);\r\n    _Node->_Data._Insert2(_Ch);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_class() { // add bracket expression node\r\n    _Link_node(new _Node_class<_Elem, _RxTraits>);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_char_to_bitmap(unsigned char _Ch) { // add character to accelerator table\r\n    _Node_class<_Elem, _RxTraits>* _Node = static_cast<_Node_class<_Elem, _RxTraits>*>(_Current);\r\n\r\n    if (!_Node->_Small) {\r\n        _Node->_Small = new _Bitmap;\r\n    }\r\n\r\n    _Node->_Small->_Mark(_Ch);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_char_to_array(_Elem _Ch) { // append character to character array\r\n    _Node_class<_Elem, _RxTraits>* _Node = static_cast<_Node_class<_Elem, _RxTraits>*>(_Current);\r\n    if (!_Node->_Large) {\r\n        _Node->_Large = new _Buf<_Elem>;\r\n    }\r\n\r\n    _Node->_Large->_Insert2(_Ch);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_char_to_class(_Elem _Ch) { // add character to bracket expression\r\n    if (_Flags & regex_constants::icase) {\r\n        _Ch = _Traits.translate_nocase(_Ch);\r\n    } else if (_Flags & regex_constants::collate) {\r\n        _Ch = _Traits.translate(_Ch);\r\n    }\r\n\r\n    auto _Uchar = static_cast<unsigned char>(_Ch);\r\n    if (static_cast<_Elem>(_Uchar) == _Ch) {\r\n        _Add_char_to_bitmap(_Uchar);\r\n    } else {\r\n        _Add_char_to_array(_Ch);\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_range(_Elem _Arg0, const _Elem _Arg1) {\r\n    // add character range to set\r\n    using _String_type                   = typename _RxTraits::string_type;\r\n    using _Char_traits_type              = typename _String_type::traits_type;\r\n    _Node_class<_Elem, _RxTraits>* _Node = static_cast<_Node_class<_Elem, _RxTraits>*>(_Current);\r\n\r\n    // set bits and check that the range is non-empty\r\n    if (_Flags & regex_constants::collate) {\r\n        _Elem _Ch;\r\n        const auto _Ch_ptr           = _STD addressof(_Ch);\r\n        const auto _Arg0_ptr         = _STD addressof(_Arg0);\r\n        const auto _Arg1_ptr         = _STD addressof(_Arg1);\r\n        const _String_type _Arg0_key = _Traits.transform(_Arg0_ptr, _Arg0_ptr + 1);\r\n        const _String_type _Arg1_key = _Traits.transform(_Arg1_ptr, _Arg1_ptr + 1);\r\n\r\n        if (_Arg0_key > _Arg1_key) {\r\n            _Xregex_error(regex_constants::error_range);\r\n        }\r\n\r\n        for (unsigned int _UCh = 0; _UCh < _Bmp_max; ++_UCh) {\r\n            _Ch                        = static_cast<_Elem>(_UCh);\r\n            const _String_type _Ch_key = _Traits.transform(_Ch_ptr, _Ch_ptr + 1);\r\n            if (_Arg0_key <= _Ch_key && _Ch_key <= _Arg1_key) {\r\n                if (!_Node->_Small) {\r\n                    _Node->_Small = new _Bitmap;\r\n                }\r\n                _Node->_Small->_Mark(_UCh);\r\n            }\r\n        }\r\n    } else if (_Char_traits_type::lt(_Arg1, _Arg0)) {\r\n        _Xregex_error(regex_constants::error_range);\r\n    } else {\r\n        unsigned int _Ex0 = static_cast<unsigned char>(_Arg0);\r\n        if (static_cast<_Elem>(_Ex0) == _Arg0) {\r\n            if (!_Node->_Small) {\r\n                _Node->_Small = new _Bitmap;\r\n            }\r\n\r\n            unsigned int _Ex1           = static_cast<unsigned char>(_Arg1);\r\n            bool _Extends_beyond_bitmap = static_cast<_Elem>(_Ex1) != _Arg1;\r\n            if (_Extends_beyond_bitmap) {\r\n                _Ex1 = _Bmp_max - 1;\r\n            }\r\n\r\n            for (; _Ex0 <= _Ex1; ++_Ex0) {\r\n                _Node->_Small->_Mark(_Ex0);\r\n            }\r\n\r\n            if (!_Extends_beyond_bitmap) {\r\n                return;\r\n            }\r\n\r\n            _Arg0 = static_cast<_Elem>(_Ex0);\r\n        }\r\n\r\n        if constexpr (sizeof(_Elem) > 1U) {\r\n            if constexpr (is_integral_v<_Elem> || is_enum_v<_Elem>) {\r\n                using _Uelem = make_unsigned_t<_Elem>;\r\n                auto _First  = static_cast<_Uelem>(_Arg0);\r\n                auto _Last   = static_cast<_Uelem>(_Arg1);\r\n                auto _Count  = static_cast<_Uelem>(_Last - _First);\r\n                ++_Count;\r\n                if (_Count <= _ARRAY_THRESHOLD) {\r\n                    for (; _Count > 0; ++_First, --_Count) {\r\n                        _Add_char_to_array(static_cast<_Elem>(_First));\r\n                    }\r\n                    return;\r\n                }\r\n            } else {\r\n                auto _Last = static_cast<unsigned int>(_Arg1);\r\n                if (static_cast<_Elem>(_Last) == _Arg1) {\r\n                    auto _First = static_cast<unsigned int>(_Arg0);\r\n                    auto _Count = _Last - _First + 1U;\r\n                    if (_Count <= _ARRAY_THRESHOLD) {\r\n                        for (; _Count > 0; ++_First, --_Count) {\r\n                            _Add_char_to_array(static_cast<_Elem>(_First));\r\n                        }\r\n                        return;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // store remaining range as pair\r\n    if (!_Node->_Ranges) {\r\n        _Node->_Ranges = new _Buf<_Elem>;\r\n    }\r\n\r\n    _Node->_Ranges->_Insert2(_Arg0);\r\n    _Node->_Ranges->_Insert2(_Arg1);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_elts(\r\n    _Node_class<_Elem, _RxTraits>* _Node, typename _RxTraits::char_class_type _Cl, bool _Negative) {\r\n    // add characters in named class to set\r\n    for (unsigned int _Ch = 0; _Ch < _Bmp_max; ++_Ch) { // add elements or their inverse\r\n        bool _Matches = _Traits.isctype(static_cast<_Elem>(_Ch), _Cl);\r\n        if (_Matches != _Negative) { // add contents of named class to accelerator table\r\n            if (!_Node->_Small) {\r\n                _Node->_Small = new _Bitmap;\r\n            }\r\n\r\n            _Node->_Small->_Mark(_Ch);\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_named_class(\r\n    typename _RxTraits::char_class_type _Cl, const _Rx_char_class_kind _Kind) {\r\n    // add contents of named class to bracket expression\r\n    using _Char_class_type               = typename _RxTraits::char_class_type;\r\n    _Node_class<_Elem, _RxTraits>* _Node = static_cast<_Node_class<_Elem, _RxTraits>*>(_Current);\r\n    _Add_elts(_Node, _Cl, _Kind != _Rx_char_class_kind::_Positive);\r\n    if constexpr (sizeof(_Elem) > 1U) {\r\n        if (_Kind == _Rx_char_class_kind::_Positive) {\r\n            auto _Cl_all_bits_set = static_cast<_Char_class_type>(-1);\r\n            if ((_Node->_Classes != _Cl_all_bits_set && _Cl != _Cl_all_bits_set)\r\n                || _Node->_Classes == _Char_class_type{}) {\r\n                _Node->_Classes = static_cast<_Char_class_type>(_Node->_Classes | _Cl);\r\n            } else if (_Node->_Classes != _Cl) {\r\n                _Node->_Classes = static_cast<_Char_class_type>(_Node->_Classes & _Cl);\r\n                _Node->_Flags |= _Fl_class_cl_all_bits;\r\n            }\r\n        } else {\r\n            auto _Node_flag = static_cast<_Node_flags>(_Kind);\r\n            _Node->_Flags |= _Node_flag;\r\n            _Root->_Flags |= _Node_flag;\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Char_to_elts(const _Elem* const _First, const _Elem* const _Last,\r\n    _Sequence<_Elem>** _Cur) { // add collation element to element sequence\r\n    auto _Diff = static_cast<unsigned int>(_Last - _First);\r\n    while (*_Cur && _Diff < (*_Cur)->_Sz) {\r\n        _Cur = &(*_Cur)->_Next;\r\n    }\r\n\r\n    if (!(*_Cur) || _Diff != (*_Cur)->_Sz) {\r\n        // add new sequence holding elements of the same length\r\n        _Sequence<_Elem>* _Node = *_Cur;\r\n        *_Cur                   = new _Sequence<_Elem>(_Diff);\r\n        (*_Cur)->_Next          = _Node;\r\n    }\r\n    (*_Cur)->_Data._Insert2(_First, _Last);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_equiv(const _Elem* const _First, const _Elem* const _Last) {\r\n    // add elements of equivalence class to bracket expression\r\n    _Node_class<_Elem, _RxTraits>* _Node = static_cast<_Node_class<_Elem, _RxTraits>*>(_Current);\r\n    typename _RxTraits::string_type _Str = _Traits.transform_primary(_First, _Last);\r\n\r\n    if (_Str.empty()) {\r\n        _Xregex_error(regex_constants::error_collate);\r\n    }\r\n\r\n    for (unsigned int _Ch = 0; _Ch < _Bmp_max; ++_Ch) { // add elements\r\n        _Elem _Ex = static_cast<_Elem>(_Ch);\r\n        if (_Traits.transform_primary(_STD addressof(_Ex), _STD addressof(_Ex) + 1)\r\n            == _Str) { // insert equivalent character into bitmap\r\n            if (!_Node->_Small) {\r\n                _Node->_Small = new _Bitmap;\r\n            }\r\n\r\n            _Node->_Small->_Mark(_Ch);\r\n        }\r\n    }\r\n\r\n    if constexpr (sizeof(_Elem) > 1U) { // map range\r\n        _Sequence<_Elem>** _Cur = _STD addressof(_Node->_Equiv);\r\n        _Char_to_elts(_First, _Last, _Cur);\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_coll(const _Elem* const _First, const _Elem* const _Last) {\r\n    // add collation element to bracket expression\r\n    _Node_class<_Elem, _RxTraits>* _Node = static_cast<_Node_class<_Elem, _RxTraits>*>(_Current);\r\n    _Sequence<_Elem>** _Cur              = _STD addressof(_Node->_Coll);\r\n    _Char_to_elts(_First, _Last, _Cur);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\n_Node_base* _Builder2<_FwdIt, _Elem, _RxTraits>::_Begin_group() { // add group node\r\n    return _New_node(_N_group);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_End_group(_Node_base* _Back) { // add end of group node\r\n    _Node_type _Elt;\r\n    if (_Back->_Kind == _N_group) {\r\n        _Elt = _N_end_group;\r\n    } else if (_Back->_Kind == _N_assert || _Back->_Kind == _N_neg_assert) {\r\n        _Elt = _N_end_assert;\r\n    } else {\r\n        _Elt = _N_end_capture;\r\n    }\r\n\r\n    _Link_node(new _Node_end_group(_Elt, _Fl_none, _Back));\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\n_Node_base* _Builder2<_FwdIt, _Elem, _RxTraits>::_Begin_assert_group(const bool _Neg) { // add assert node\r\n    auto _Node1_unique   = _STD make_unique<_Node_assert>(_Neg ? _N_neg_assert : _N_assert);\r\n    _Node_base* _Node2   = new _Node_base(_N_nop);\r\n    _Node_assert* _Node1 = _Node1_unique.release();\r\n    _Link_node(_Node1);\r\n    _Node1->_Child = _Node2;\r\n    _Node2->_Prev  = _Node1;\r\n    _Current       = _Node2;\r\n    return _Node1;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_End_assert_group(_Node_base* _Nx) { // add end of assert node\r\n    _End_group(_Nx);\r\n    _Current = _Nx;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\n_Node_base* _Builder2<_FwdIt, _Elem, _RxTraits>::_Begin_capture_group(unsigned int _Idx) { // add capture group node\r\n    return _Link_node(new _Node_capture(_Idx));\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_backreference(unsigned int _Idx) { // add back reference node\r\n    _Link_node(new _Node_back(_Idx));\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\n_Node_base* _Builder2<_FwdIt, _Elem, _RxTraits>::_Begin_if(_Node_base* _Start) { // add if node\r\n    // append endif node\r\n    _Node_base* _Res = new _Node_endif;\r\n    _Link_node(_Res);\r\n\r\n    // insert if_node\r\n    _Node_if* _Node1 = new _Node_if(_Res);\r\n    _Node_base* _Pos = _Start->_Next;\r\n    _Insert_node(_Pos, _Node1);\r\n    return _Res;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Else_if(_Node_base* _Start, _Node_base* _End) { // add else node\r\n    _Node_if* _Parent  = static_cast<_Node_if*>(_Start->_Next);\r\n    _Node_base* _First = _End->_Next;\r\n    _End->_Next        = nullptr;\r\n    _Node_base* _Last  = _Current;\r\n    _Current           = _End;\r\n    _End->_Next        = nullptr;\r\n    _Last->_Next       = _End;\r\n    while (_Parent->_Child) {\r\n        _Parent = _Parent->_Child;\r\n    }\r\n\r\n    _Parent->_Child        = new _Node_if(_End);\r\n    _Parent->_Child->_Next = _First;\r\n    _First->_Prev          = _Parent->_Child;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Add_rep(int _Min, int _Max, bool _Greedy) { // add repeat node\r\n    if (_Current->_Kind == _N_str\r\n        && static_cast<_Node_str<_Elem>*>(_Current)->_Data._Size() != 1) { // move final character to new string node\r\n        _Node_str<_Elem>* _Node = static_cast<_Node_str<_Elem>*>(_Current);\r\n        _Add_str_node();\r\n        _Add_char(_Node->_Data._Del());\r\n    }\r\n\r\n    _Node_base* _Pos = _Current;\r\n    if (_Pos->_Kind == _N_end_group || _Pos->_Kind == _N_end_capture) {\r\n        _Pos = static_cast<_Node_end_group*>(_Pos)->_Back;\r\n    } else if (_Min == 0 && _Max == 1) {\r\n        // Rewrite zero-or-one quantifiers as alternations to make the\r\n        // \"simple loop\" optimization more likely to engage.\r\n        //\r\n        // GH-5490: This rewrite becomes observably incorrect\r\n        // if the subexpression contains capture groups,\r\n        // so we don't apply it if the subexpression is surrounded\r\n        // by a capturing or non-capturing group.\r\n        _Node_endif* _End       = new _Node_endif;\r\n        _Node_if* _If_expr      = new _Node_if(_End);\r\n        _Node_if* _If_empty_str = new _Node_if(_End);\r\n        _Node_base* _Gbegin     = new _Node_base(_N_group);\r\n        _Node_end_group* _Gend  = new _Node_end_group(_N_end_group, _Fl_none, _Gbegin);\r\n\r\n        _If_empty_str->_Next = _Gbegin;\r\n        _Gbegin->_Prev       = _If_empty_str;\r\n\r\n        _Gbegin->_Next = _Gend;\r\n        _Gend->_Prev   = _Gbegin;\r\n\r\n        _Gend->_Next = _End;\r\n\r\n        _If_expr->_Child = _If_empty_str;\r\n\r\n        _Link_node(_End);\r\n        _Insert_node(_Pos, _If_expr);\r\n\r\n        if (!_Greedy) {\r\n            swap(_If_expr->_Next->_Prev, _If_empty_str->_Next->_Prev); // intentional ADL\r\n            swap(_If_expr->_Next, _If_empty_str->_Next); // intentional ADL\r\n        }\r\n        return;\r\n    }\r\n\r\n    if (_Root->_Loops == static_cast<unsigned int>(-1)) {\r\n        _Xregex_error(regex_constants::error_space);\r\n    }\r\n\r\n    _Node_end_rep* _Node0 = new _Node_end_rep();\r\n    _Link_node(_Node0);\r\n    _Node_rep* _Nx     = new _Node_rep(_Greedy, _Min, _Max, _Node0, _Root->_Loops++);\r\n    _Node0->_Begin_rep = _Nx;\r\n    _Insert_node(_Pos, _Nx);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\n_Root_node* _Builder2<_FwdIt, _Elem, _RxTraits>::_End_pattern() { // wrap up\r\n    _New_node(_N_end);\r\n    return _Root;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Builder2<_FwdIt, _Elem, _RxTraits>::_Tidy() noexcept { // free memory\r\n    _Destroy_node(_Root);\r\n    _Root = nullptr;\r\n}\r\n\r\ntemplate <class _BidIt, class _Elem, class _RxTraits, class _It, class _Alloc>\r\nsize_t _Matcher3<_BidIt, _Elem, _RxTraits, _It, _Alloc>::_Push_frame(_Rx_unwind_ops _Code, _Node_base* _Node) {\r\n    if (_Frames_count >= _Frames._Size()) {\r\n        if (_Frames_count >= _Frames_limit) {\r\n            _Xregex_error(regex_constants::error_stack);\r\n        }\r\n\r\n        _Frames._Push_back({_Code, {0}, _Node, _Tgt_state._Cur, size_t{}});\r\n    } else {\r\n        auto& _Frame = _Frames[_Frames_count];\r\n        _Frame._Code = _Code;\r\n        _Frame._Node = _Node;\r\n        _Frame._Pos  = _Tgt_state._Cur;\r\n    }\r\n    return _Frames_count++;\r\n}\r\n\r\ntemplate <class _BidIt, class _Elem, class _RxTraits, class _It, class _Alloc>\r\nsize_t _Matcher3<_BidIt, _Elem, _RxTraits, _It, _Alloc>::_Calculate_frames_limit(_Iter_diff_t<_It> _Input_length) {\r\n    constexpr size_t _Fixed_part  = 10000000U / sizeof(_State_frame_type);\r\n    constexpr size_t _Divisor     = sizeof(_State_frame_type) / 10U;\r\n    const auto _Variable_part     = _Input_length / static_cast<_Iter_diff_t<_It>>(_Divisor);\r\n    const size_t _Max_frames_size = _Frames._Max_size();\r\n\r\n    if (PTRDIFF_MAX < _Variable_part) {\r\n        return _Max_frames_size;\r\n    }\r\n\r\n    return (_STD min) (_Max_frames_size, static_cast<size_t>(_Variable_part) + _Fixed_part);\r\n}\r\n\r\ntemplate <class _BidIt, class _Elem, class _RxTraits, class _It, class _Alloc>\r\nlong long _Matcher3<_BidIt, _Elem, _RxTraits, _It, _Alloc>::_Calculate_complexity_limit(\r\n    _Iter_diff_t<_It> _Input_length) {\r\n    constexpr long long _Intercept = 300000LL;\r\n    constexpr long long _Gradient  = 256LL;\r\n    if ((LLONG_MAX - _Intercept) / _Gradient < _Input_length) {\r\n        return LLONG_MAX;\r\n    }\r\n    return _Gradient * static_cast<long long>(_Input_length) + _Intercept;\r\n}\r\n\r\ntemplate <class _BidIt, class _Elem, class _RxTraits, class _It, class _Alloc>\r\nvoid _Matcher3<_BidIt, _Elem, _RxTraits, _It, _Alloc>::_Increase_complexity_count(_Iter_diff_t<_It> _Count) {\r\n    if (_Complexity_limit < _Count) {\r\n        _Xregex_error(regex_constants::error_complexity);\r\n    } else {\r\n        _Complexity_limit -= static_cast<long long>(_Count);\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt, class _Elem, class _RxTraits, class _It, class _Alloc>\r\nvoid _Matcher3<_BidIt, _Elem, _RxTraits, _It, _Alloc>::_Prepare_rep(_Node_rep* _Node) {\r\n    const auto _Psav = &_Loop_vals[_Node->_Loop_number];\r\n\r\n    // Determine first capture group in repetition for later capture group reset, if not done so previously.\r\n    // No capture group reset is performed for POSIX regexes,\r\n    // so we prevent any reset by setting the first capture group to the size of the capture group vector.\r\n    if (_Psav->_Group_first == 0U) {\r\n        if ((_Sflags & regex_constants::_Any_posix) || !_Find_first_inner_capture_group(_Node->_Next, _Psav)) {\r\n            _Psav->_Group_first = static_cast<unsigned int>(_Tgt_state._Grps._Size());\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt, class _Elem, class _RxTraits, class _It, class _Alloc>\r\nbool _Matcher3<_BidIt, _Elem, _RxTraits, _It, _Alloc>::_Find_first_inner_capture_group(\r\n    _Node_base* _Nx, _Loop_vals_type* _Loop_state) {\r\n\r\n    bool _Found_group = false;\r\n    while (_Nx) {\r\n        switch (_Nx->_Kind) {\r\n        case _N_nop:\r\n        case _N_bol:\r\n        case _N_eol:\r\n        case _N_wbound:\r\n        case _N_dot:\r\n        case _N_str:\r\n        case _N_class:\r\n        case _N_group:\r\n        case _N_end_group:\r\n        case _N_end_capture:\r\n        case _N_back:\r\n        case _N_begin:\r\n            break;\r\n\r\n        case _N_assert:\r\n        case _N_neg_assert:\r\n            if (_Find_first_inner_capture_group(static_cast<_Node_assert*>(_Nx)->_Child, _Loop_state)) {\r\n                _Found_group = true;\r\n                _Nx          = nullptr;\r\n            }\r\n            break;\r\n\r\n        case _N_capture:\r\n            {\r\n                _Node_capture* _Node      = static_cast<_Node_capture*>(_Nx);\r\n                _Loop_state->_Group_first = _Node->_Idx - 1U;\r\n                _Found_group              = true;\r\n                _Nx                       = nullptr;\r\n                break;\r\n            }\r\n\r\n        case _N_if:\r\n            for (_Node_if* _Node = static_cast<_Node_if*>(_Nx); _Node; _Node = _Node->_Child) {\r\n                if (_Find_first_inner_capture_group(_Node->_Next, _Loop_state)) {\r\n                    _Found_group = true;\r\n                    _Nx          = nullptr;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (_Nx) { // continue search after the branches of the _N_if node\r\n                _Nx = static_cast<_Node_if*>(_Nx)->_Endif;\r\n            }\r\n            break;\r\n\r\n        case _N_rep:\r\n            {\r\n                const auto _Inner_rep        = static_cast<_Node_rep*>(_Nx);\r\n                const auto _Inner_loop_state = &_Loop_vals[_Inner_rep->_Loop_number];\r\n                if (_Find_first_inner_capture_group(_Inner_rep->_Next, _Inner_loop_state)) {\r\n                    _Loop_state->_Group_first = _Inner_loop_state->_Group_first;\r\n                    _Found_group              = true;\r\n                    _Nx                       = nullptr;\r\n                } else {\r\n                    _Inner_loop_state->_Group_first = static_cast<unsigned int>(_Tgt_state._Grps._Size());\r\n                    _Nx                             = _Inner_rep->_End_rep;\r\n                }\r\n                break;\r\n            }\r\n\r\n        case _N_end_assert:\r\n        case _N_endif:\r\n        case _N_end_rep:\r\n        case _N_end:\r\n        case _N_none:\r\n        default:\r\n            _Nx = nullptr;\r\n            break;\r\n        }\r\n\r\n        if (_Nx) {\r\n            _Nx = _Nx->_Next;\r\n        }\r\n    }\r\n\r\n    return _Found_group;\r\n}\r\n\r\ntemplate <class _BidIt, class _Elem, class _RxTraits, class _It, class _Alloc>\r\nvoid _Matcher3<_BidIt, _Elem, _RxTraits, _It, _Alloc>::_Reset_capture_groups(unsigned int _First) {\r\n    size_t _Size = _Tgt_state._Grps._Size();\r\n    for (; _First < _Size; ++_First) {\r\n        if (_Tgt_state._Grp_valid._Get(_First)) {\r\n            _Tgt_state._Grp_valid._Clear(_First);\r\n            auto _Frame_idx                  = _Push_frame(_Rx_unwind_ops::_Capture_restore_matched, nullptr);\r\n            _Frames[_Frame_idx]._Capture_idx = _First;\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt1, class _BidIt2, class _Counter, class _Pr>\r\n_BidIt1 _Cmp_chrange(_BidIt1 _Begin1, _BidIt1 _End1, _BidIt2 _Begin2, _BidIt2 _End2, _Counter& _Count, _Pr _Pred) {\r\n    // compare character ranges\r\n    _BidIt1 _Res = _Begin1;\r\n    while (_Begin1 != _End1 && _Begin2 != _End2) {\r\n        ++_Count;\r\n        if (!_Pred(*_Begin1++, *_Begin2++)) {\r\n            return _Res;\r\n        }\r\n    }\r\n    return _Begin2 == _End2 ? _Begin1 : _Res;\r\n}\r\n\r\ntemplate <class _BidIt1, class _BidIt2, class _RxTraits, class _Counter>\r\n_BidIt1 _Compare_translate_both(_BidIt1 _Begin1, _BidIt1 _End1, _BidIt2 _Begin2, _BidIt2 _End2,\r\n    const _RxTraits& _Traits, regex_constants::syntax_option_type _Sflags, _Counter& _Count) {\r\n    // compare character ranges, translating characters in both ranges according to syntax options\r\n    if (_Sflags & regex_constants::icase) {\r\n        return _STD _Cmp_chrange(_Begin1, _End1, _Begin2, _End2, _Count, _Cmp_icase<_RxTraits>{_Traits});\r\n    } else if constexpr (_Is_any_of_v<_RxTraits, regex_traits<char>, regex_traits<wchar_t>>) {\r\n        return _STD _Cmp_chrange(_Begin1, _End1, _Begin2, _End2, _Count, equal_to<typename _RxTraits::char_type>{});\r\n    } else if (_Sflags & regex_constants::collate) {\r\n        return _STD _Cmp_chrange(_Begin1, _End1, _Begin2, _End2, _Count, _Cmp_collate<_RxTraits>{_Traits});\r\n    } else {\r\n        return _STD _Cmp_chrange(_Begin1, _End1, _Begin2, _End2, _Count, equal_to<typename _RxTraits::char_type>{});\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt1, class _BidIt2, class _RxTraits, class _Counter>\r\n_BidIt1 _Compare_translate_left(_BidIt1 _Begin1, _BidIt1 _End1, _BidIt2 _Begin2, _BidIt2 _End2,\r\n    const _RxTraits& _Traits, regex_constants::syntax_option_type _Sflags, _Counter& _Count) {\r\n    // compare character ranges, translating characters in the left range according to syntax options\r\n    if (_Sflags & regex_constants::icase) {\r\n        return _STD _Cmp_chrange(_Begin1, _End1, _Begin2, _End2, _Count, _Cmp_icase_translateleft<_RxTraits>{_Traits});\r\n    } else if constexpr (_Is_any_of_v<_RxTraits, regex_traits<char>, regex_traits<wchar_t>>) {\r\n        return _STD _Cmp_chrange(_Begin1, _End1, _Begin2, _End2, _Count, equal_to<typename _RxTraits::char_type>{});\r\n    } else if (_Sflags & regex_constants::collate) {\r\n        return _STD _Cmp_chrange(\r\n            _Begin1, _End1, _Begin2, _End2, _Count, _Cmp_collate_translateleft<_RxTraits>{_Traits});\r\n    } else {\r\n        return _STD _Cmp_chrange(_Begin1, _End1, _Begin2, _End2, _Count, equal_to<typename _RxTraits::char_type>{});\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt1, class _BidIt2, class _RxTraits>\r\n_BidIt1 _Search_translate_left(_BidIt1 _Begin1, _BidIt1 _End1, _BidIt2 _Begin2, _BidIt2 _End2, const _RxTraits& _Traits,\r\n    regex_constants::syntax_option_type _Sflags) {\r\n    // searching the right character sequence in the left sequence,\r\n    // after translating characters in the left sequence according to syntax options\r\n    if (_Sflags & regex_constants::icase) {\r\n        return _STD search(_Begin1, _End1, _Begin2, _End2, _Cmp_icase_translateleft<_RxTraits>{_Traits});\r\n    } else if constexpr (_Is_any_of_v<_RxTraits, regex_traits<char>, regex_traits<wchar_t>>) {\r\n        return _STD search(_Begin1, _End1, _Begin2, _End2, equal_to<typename _RxTraits::char_type>{});\r\n    } else if (_Sflags & regex_constants::collate) {\r\n        return _STD search(_Begin1, _End1, _Begin2, _End2, _Cmp_collate_translateleft<_RxTraits>{_Traits});\r\n    } else {\r\n        return _STD search(_Begin1, _End1, _Begin2, _End2, equal_to<typename _RxTraits::char_type>{});\r\n    }\r\n}\r\n\r\ntemplate <class _Char_traits, class _Elem>\r\nbool _Lookup_range(const _Elem _Ch, const _Buf<_Elem>* const _Bufptr) { // check whether _Ch is in _Buf\r\n    for (unsigned int _Ix = 0; _Ix < _Bufptr->_Size(); _Ix += 2) { // check current position\r\n        const _Elem _Left  = _Bufptr->_At(_Ix);\r\n        const _Elem _Right = _Bufptr->_At(_Ix + 1);\r\n\r\n        bool _Within_range;\r\n        if constexpr (is_same_v<_Char_traits, char_traits<char>>) {\r\n            const auto _Uchar = static_cast<unsigned char>(_Ch);\r\n            _Within_range = static_cast<unsigned char>(_Left) <= _Uchar && _Uchar <= static_cast<unsigned char>(_Right);\r\n        } else if constexpr (is_same_v<_Char_traits, char_traits<wchar_t>>) {\r\n            _Within_range = _Left <= _Ch && _Ch <= _Right;\r\n        } else {\r\n            _Within_range = !_Char_traits::lt(_Ch, _Left) && !_Char_traits::lt(_Right, _Ch);\r\n        }\r\n\r\n        if (_Within_range) {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\ntemplate <class _Elem, class _RxTraits>\r\nbool _Lookup_collating_range(const _Elem _Ch, const _Buf<_Elem>* const _Bufptr, const _RxTraits& _Traits) {\r\n    const typename _RxTraits::string_type _Str = _Traits.transform(_STD addressof(_Ch), _STD addressof(_Ch) + 1);\r\n    for (unsigned int _Ix = 0; _Ix < _Bufptr->_Size(); _Ix += 2) { // check current position\r\n        const _Elem _Left  = _Bufptr->_At(_Ix);\r\n        const _Elem _Right = _Bufptr->_At(_Ix + 1);\r\n        if (_Traits.transform(_STD addressof(_Left), _STD addressof(_Left) + 1) <= _Str\r\n            && _Str <= _Traits.transform(_STD addressof(_Right), _STD addressof(_Right) + 1)) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\ntemplate <class _Elem, class _RxTraits>\r\nbool _Lookup_equiv2(_Elem _Ch, const _Sequence<_Elem>* _Eq, const _RxTraits& _Traits) {\r\n    // check whether _Ch is in _Eq\r\n    typename _RxTraits::string_type _Str0;\r\n    typename _RxTraits::string_type _Str1;\r\n    _Str1.push_back(_Ch);\r\n    _Str1 = _Traits.transform_primary(_Str1.begin(), _Str1.end());\r\n    while (_Eq) { // look for sequence of elements that are the right size\r\n        for (unsigned int _Ix = 0; _Ix < _Eq->_Data._Size(); _Ix += _Eq->_Sz) { // look for _Ch\r\n            _Str0.assign(_Eq->_Data._Str() + _Ix, _Eq->_Sz);\r\n            _Str0 = _Traits.transform_primary(_Str0.begin(), _Str0.end());\r\n            if (_Str0 == _Str1) {\r\n                return true;\r\n            }\r\n        }\r\n        _Eq = _Eq->_Next;\r\n    }\r\n    return false;\r\n}\r\n\r\ntemplate <class _BidIt, class _Elem, class _RxTraits>\r\n_BidIt _Lookup_coll2(_Elem _First_ch, _BidIt _First, const _BidIt _Last, const _Sequence<_Elem>* _Seq,\r\n    const _RxTraits& _Traits, const regex_constants::syntax_option_type _Flags) {\r\n    // look for collation element [_First, _Last) in _Seq\r\n    typename _RxTraits::string_type _Str;\r\n\r\n    // extend translated input character sequence\r\n    if (_Seq) { // the longest collating elements come first\r\n        _Str.push_back(_First_ch);\r\n        const auto _Coll_size = _Seq->_Sz;\r\n        size_t _Str_size      = 1;\r\n        _BidIt _Pos           = _First;\r\n        ++_Pos;\r\n\r\n        for (; _Str_size < _Coll_size && _Pos != _Last; ++_Pos) {\r\n            _Elem _Ch = *_Pos;\r\n            if (_Flags & regex_constants::icase) {\r\n                _Ch = _Traits.translate_nocase(_Ch);\r\n            } else if (_Flags & regex_constants::collate) {\r\n                _Ch = _Traits.translate(_Ch);\r\n            }\r\n            _Str.push_back(_Ch);\r\n            ++_Str_size;\r\n        }\r\n    }\r\n\r\n    while (_Seq) { // look for sequence of elements that are the right size\r\n        const auto _Size = _Seq->_Sz;\r\n\r\n        // match input character sequence to stored collating elements\r\n        if (_Str.size() >= _Size) {\r\n            const _Elem* const _Str_first = _Str.data();\r\n            const _Elem* const _Str_last  = _Str_first + _Size;\r\n            const _Elem* _Current         = _Seq->_Data._Str();\r\n            for (auto _Remaining = _Seq->_Data._Size(); _Remaining >= _Size; _Current += _Size, _Remaining -= _Size) {\r\n                if (_STD equal(_Str_first, _Str_last, _Current)) {\r\n                    _STD advance(_First, static_cast<_Iter_diff_t<_BidIt>>(_Size));\r\n                    return _First;\r\n                }\r\n            }\r\n        }\r\n        _Seq = _Seq->_Next;\r\n    }\r\n    return _First;\r\n}\r\n\r\ntemplate <class _BidIt, class _Elem, class _RxTraits, class _It, class _Alloc>\r\n_It _Matcher3<_BidIt, _Elem, _RxTraits, _It, _Alloc>::_Do_class(_Node_base* _Nx, _It _First) {\r\n    // apply bracket expression\r\n    bool _Found;\r\n    _Elem _Ch = *_First;\r\n    if (_Sflags & regex_constants::icase) {\r\n        _Ch = _Traits.translate_nocase(_Ch);\r\n    } else if (_Sflags & regex_constants::collate) {\r\n        _Ch = _Traits.translate(_Ch);\r\n    }\r\n    const auto _Uchar = static_cast<unsigned char>(_Ch);\r\n\r\n    _It _Res0 = _First;\r\n    ++_Res0;\r\n    _It _Resx;\r\n    _Node_class<_Elem, _RxTraits>* _Node = static_cast<_Node_class<_Elem, _RxTraits>*>(_Nx);\r\n    if (_Node->_Coll\r\n        && (_Resx = _STD _Lookup_coll2(_Ch, _First, _End, _Node->_Coll, _Traits, _Sflags))\r\n               != _First) { // check for collation element\r\n        _Res0  = _Resx;\r\n        _Found = true;\r\n    } else if (_Node->_Ranges\r\n               && (_Sflags & regex_constants::collate\r\n                       ? _STD _Lookup_collating_range(_Ch, _Node->_Ranges, _Traits)\r\n                       : _STD _Lookup_range<typename _RxTraits::string_type::traits_type>(_Ch, _Node->_Ranges))) {\r\n        _Found = true;\r\n    } else if (static_cast<_Elem>(_Uchar) == _Ch) {\r\n        _Found = _Node->_Small && _Node->_Small->_Find(_Uchar);\r\n    } else if (_Node->_Large\r\n               && _STD find(_Node->_Large->_Str(), _Node->_Large->_Str() + _Node->_Large->_Size(), _Ch)\r\n                      != _Node->_Large->_Str() + _Node->_Large->_Size()) {\r\n        _Found = true;\r\n    } else if (_Node->_Classes != typename _RxTraits::char_class_type{} && _Traits.isctype(_Ch, _Node->_Classes)) {\r\n        _Found = true;\r\n    } else if ((_Node->_Flags & _Fl_class_cl_all_bits)\r\n               && _Traits.isctype(_Ch, static_cast<typename _RxTraits::char_class_type>(-1))) {\r\n        _Found = true;\r\n    } else if (_Node->_Equiv && _STD _Lookup_equiv2(_Ch, _Node->_Equiv, _Traits)) {\r\n        _Found = true;\r\n    } else if ((_Node->_Flags & _Fl_class_negated_w) && !_Traits.isctype(_Ch, _Char_class_w)) {\r\n        _Found = true;\r\n    } else if ((_Node->_Flags & _Fl_class_negated_s) && !_Traits.isctype(_Ch, _Char_class_s)) {\r\n        _Found = true;\r\n    } else if ((_Node->_Flags & _Fl_class_negated_d) && !_Traits.isctype(_Ch, _Char_class_d)) {\r\n        _Found = true;\r\n    } else {\r\n        _Found = false;\r\n    }\r\n\r\n    const bool _Negated = (_Node->_Flags & _Fl_negate) != 0;\r\n\r\n    if (_Found == _Negated) {\r\n        return _First;\r\n    } else {\r\n        return _Res0;\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt, class _Elem, class _RxTraits, class _It, class _Alloc>\r\nbool _Matcher3<_BidIt, _Elem, _RxTraits, _It, _Alloc>::_Better_match() {\r\n    // check for better match under leftmost-longest rule\r\n\r\n    // a longer match is better than a shorter one\r\n    if (_Res._Cur != _Tgt_state._Cur) {\r\n        return _STD distance(_Begin, _Res._Cur) < _STD distance(_Begin, _Tgt_state._Cur);\r\n    }\r\n\r\n    for (unsigned int _Ix = 0U; _Ix < _Ncap - 1U; ++_Ix) { // check each capture group\r\n        // any match (even an empty one) is better than no match at all\r\n        const bool _Valid_in_tgt_state = _Tgt_state._Grp_valid._Get(_Ix);\r\n        if (_Res._Grp_valid._Get(_Ix) != _Valid_in_tgt_state) {\r\n            return _Valid_in_tgt_state;\r\n        }\r\n\r\n        if (_Valid_in_tgt_state) { // now known to be equal to _Res._Grp_valid._Get(_Ix), no need to test both\r\n            // if both groups are matched, prefer the leftmost one\r\n            if (_Res._Grps[_Ix]._Begin != _Tgt_state._Grps[_Ix]._Begin) {\r\n                return _STD distance(_Begin, _Res._Grps[_Ix]._Begin)\r\n                     > _STD distance(_Begin, _Tgt_state._Grps[_Ix]._Begin);\r\n            }\r\n\r\n            // if both groups start at the same position, prefer the longer one\r\n            if (_Res._Grps[_Ix]._End != _Tgt_state._Grps[_Ix]._End) {\r\n                return _STD distance(_Res._Grps[_Ix]._Begin, _Res._Grps[_Ix]._End)\r\n                     < _STD distance(_Tgt_state._Grps[_Ix]._Begin, _Tgt_state._Grps[_Ix]._End);\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\ntemplate <class _BidIt, class _Elem, class _RxTraits, class _It, class _Alloc>\r\nbool _Matcher3<_BidIt, _Elem, _RxTraits, _It, _Alloc>::_Is_wbound() const {\r\n    if ((_Mflags & regex_constants::match_prev_avail)\r\n        || _Tgt_state._Cur != _Begin) { // if --_Cur is valid, check for preceding word character\r\n        if (_Tgt_state._Cur == _End) {\r\n            return (_Mflags & regex_constants::match_not_eow) == 0 && _STD _Is_word(*_Prev_iter(_Tgt_state._Cur));\r\n        } else {\r\n            return _STD _Is_word(*_Prev_iter(_Tgt_state._Cur)) != _STD _Is_word(*_Tgt_state._Cur);\r\n        }\r\n    } else { // --_Cur is not valid\r\n        if (_Tgt_state._Cur == _End) {\r\n            return false;\r\n        } else {\r\n            return (_Mflags & regex_constants::match_not_bow) == 0 && _STD _Is_word(*_Tgt_state._Cur);\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt, class _Elem, class _RxTraits, class _It, class _Alloc>\r\ntypename _RxTraits::char_class_type _Matcher3<_BidIt, _Elem, _RxTraits, _It, _Alloc>::_Lookup_char_class(\r\n    const _Elem _Class_name) const {\r\n    // look up character class with single-character name\r\n    auto _Ptr = _STD addressof(_Class_name);\r\n    return _Traits.lookup_classname(_Ptr, _Ptr + 1, (_Sflags & regex_constants::icase) != 0);\r\n}\r\n\r\ntemplate <class _Elem>\r\nbool _Is_ecmascript_line_terminator(_Elem _Ch) {\r\n    if constexpr (is_same_v<_Elem, char>) {\r\n        return _Ch == _Meta_nl || _Ch == _Meta_cr;\r\n    } else if constexpr (is_same_v<_Elem, wchar_t>) {\r\n        return _Ch == _Meta_nl || _Ch == _Meta_cr || _Ch == _Meta_ls || _Ch == _Meta_ps;\r\n    } else {\r\n        auto _UCh = static_cast<unsigned int>(_Ch);\r\n        return static_cast<_Elem>(_UCh) == _Ch\r\n            && (_UCh == _Meta_nl || _UCh == _Meta_cr || _UCh == _Meta_ls || _UCh == _Meta_ps);\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt, class _Elem, class _RxTraits, class _It, class _Alloc>\r\nbool _Matcher3<_BidIt, _Elem, _RxTraits, _It, _Alloc>::_Match_pat(_Node_base* _Nx) { // check for match\r\n    bool _Failed = false;\r\n\r\n    while (_Nx) {\r\n        do { // match current node\r\n            _Increase_complexity_count(_Iter_diff_t<_It>{1}); // one state transition\r\n            _Node_base* _Next = _Nx->_Next;\r\n            switch (_Nx->_Kind) { // handle current node's type\r\n            case _N_nop:\r\n                break;\r\n\r\n            case _N_bol:\r\n                if ((_Mflags & regex_constants::match_prev_avail)\r\n                    || _Tgt_state._Cur != _Begin) { // if --_Cur is valid, check for preceding newline\r\n                    _Failed = !(_Sflags & regex_constants::multiline)\r\n                           || !_STD _Is_ecmascript_line_terminator(*_STD _Prev_iter(_Tgt_state._Cur));\r\n                } else {\r\n                    _Failed = (_Mflags & regex_constants::match_not_bol) != 0;\r\n                }\r\n                break;\r\n\r\n            case _N_eol:\r\n                if (_Tgt_state._Cur == _End) {\r\n                    _Failed = (_Mflags & regex_constants::match_not_eol) != 0;\r\n                } else {\r\n                    _Failed = !(_Sflags & regex_constants::multiline)\r\n                           || !_STD _Is_ecmascript_line_terminator(*_Tgt_state._Cur);\r\n                }\r\n\r\n                break;\r\n\r\n            case _N_wbound:\r\n                _Failed = _Is_wbound() == ((_Nx->_Flags & _Fl_negate) != 0);\r\n                break;\r\n\r\n            case _N_dot:\r\n                if (_Tgt_state._Cur == _End) {\r\n                    _Failed = true;\r\n                } else {\r\n                    const _Elem _Ch = *_Tgt_state._Cur;\r\n                    if (_Sflags & regex_constants::_Any_posix) {\r\n                        if (_Ch == _Elem()) {\r\n                            _Failed = true;\r\n                        }\r\n                    } else if (_STD _Is_ecmascript_line_terminator(_Ch)) {\r\n                        _Failed = true;\r\n                    }\r\n\r\n                    if (!_Failed) {\r\n                        ++_Tgt_state._Cur;\r\n                    }\r\n                }\r\n\r\n                break;\r\n\r\n            case _N_str:\r\n                { // check for string match\r\n                    _Node_str<_Elem>* _Node = static_cast<_Node_str<_Elem>*>(_Nx);\r\n                    _It _Res0;\r\n                    _Iter_diff_t<_It> _Count{};\r\n                    if ((_Res0 = _STD _Compare_translate_left(_Tgt_state._Cur, _End, _Node->_Data._Str(),\r\n                             _Node->_Data._Str() + _Node->_Data._Size(), _Traits, _Sflags, _Count))\r\n                        != _Tgt_state._Cur) {\r\n                        _Tgt_state._Cur = _Res0;\r\n                    } else {\r\n                        _Failed = true;\r\n                    }\r\n\r\n                    // divide by 64 because character comparisons are cheaper than state transitions\r\n                    _Increase_complexity_count(static_cast<_Iter_diff_t<_It>>(_Count / 64));\r\n\r\n                    break;\r\n                }\r\n\r\n            case _N_class:\r\n                { // check for bracket expression match\r\n                    _It _Res;\r\n                    if (_Tgt_state._Cur != _End && (_Res = _Do_class(_Nx, _Tgt_state._Cur)) != _Tgt_state._Cur) {\r\n                        _Tgt_state._Cur = _Res;\r\n                    } else {\r\n                        _Failed = true;\r\n                    }\r\n                    break;\r\n                }\r\n\r\n            case _N_group:\r\n                break;\r\n\r\n            case _N_end_group:\r\n                break;\r\n\r\n            case _N_assert:\r\n                { // check assert\r\n                    auto _Node = static_cast<_Node_assert*>(_Nx);\r\n                    _Push_frame(_Rx_unwind_ops::_After_assert, _Node);\r\n                    _Next = _Node->_Child;\r\n                    break;\r\n                }\r\n\r\n            case _N_neg_assert:\r\n                { // check negative assert\r\n                    auto _Node = static_cast<_Node_assert*>(_Nx);\r\n                    _Push_frame(_Rx_unwind_ops::_After_neg_assert, _Node);\r\n                    _Next = _Node->_Child;\r\n                    break;\r\n                }\r\n\r\n            case _N_end_assert:\r\n                {\r\n                    size_t _Last_capture_restore_frame = 0U;\r\n                    unsigned int _Capture_first        = UINT_MAX;\r\n                    unsigned int _Capture_back         = 0U;\r\n                    for (;;) {\r\n                        --_Frames_count;\r\n                        const auto& _Frame = _Frames[_Frames_count];\r\n                        const auto _Code   = _Frame._Code;\r\n                        if (_Code == _Rx_unwind_ops::_After_assert || _Code == _Rx_unwind_ops::_After_neg_assert) {\r\n                            if (_Code == _Rx_unwind_ops::_After_assert) {\r\n                                _Tgt_state._Cur = _Frame._Pos;\r\n                                _Next           = _Frame._Node->_Next;\r\n                                if (_Last_capture_restore_frame != 0U) {\r\n                                    auto _Not_capture_restore = [](const auto& _Other_frame) static {\r\n                                        return _Other_frame._Code != _Rx_unwind_ops::_Capture_restore_begin\r\n                                            && _Other_frame._Code != _Rx_unwind_ops::_Capture_restore_unmatched_end;\r\n                                    };\r\n                                    const auto _Effective_frames_end =\r\n                                        _STD remove_if(_Frames._Begin() + static_cast<ptrdiff_t>(_Frames_count),\r\n                                            _Frames._Begin() + static_cast<ptrdiff_t>(_Last_capture_restore_frame) + 1,\r\n                                            _Not_capture_restore);\r\n                                    _Frames_count = static_cast<size_t>(_Effective_frames_end - _Frames._Begin());\r\n                                }\r\n                            } else {\r\n                                _Failed = true;\r\n                                if (_Capture_first <= _Capture_back) {\r\n                                    _Tgt_state._Grp_valid._Clear_range_at_least_until(\r\n                                        _Capture_first, _Capture_back + 1U);\r\n                                }\r\n                            }\r\n                            break;\r\n                        } else if (_Code == _Rx_unwind_ops::_Capture_restore_unmatched_end) {\r\n                            auto _Capture_idx = _Frame._Capture_idx;\r\n                            if (_Capture_first > _Capture_idx) {\r\n                                _Capture_first = _Capture_idx;\r\n                            }\r\n\r\n                            if (_Capture_back < _Capture_idx) {\r\n                                _Capture_back = _Capture_idx;\r\n                            }\r\n\r\n                            if (_Last_capture_restore_frame == 0U) {\r\n                                _Last_capture_restore_frame = _Frames_count;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                break;\r\n\r\n            case _N_capture:\r\n                { // record current position\r\n                    auto _Node = static_cast<_Node_capture*>(_Nx);\r\n                    _STL_INTERNAL_CHECK(_Node->_Idx != 0U);\r\n                    auto _Idx           = _Node->_Idx - 1U;\r\n                    auto& _Group        = _Tgt_state._Grps[_Idx];\r\n                    auto _Frame_idx     = _Push_frame(_Rx_unwind_ops::_Capture_restore_begin, _Node);\r\n                    auto& _Frame        = _Frames[_Frame_idx];\r\n                    _Frame._Pos         = _Group._Begin;\r\n                    _Frame._Capture_idx = _Idx;\r\n                    _Group._Begin       = _Tgt_state._Cur;\r\n                    break;\r\n                }\r\n\r\n            case _N_end_capture:\r\n                { // record successful capture\r\n                    auto _Node  = static_cast<_Node_end_group*>(_Nx);\r\n                    auto _Node0 = static_cast<_Node_capture*>(_Node->_Back);\r\n                    if (_Node0->_Idx != 0U) { // update capture data\r\n                        auto _Idx           = _Node0->_Idx - 1U;\r\n                        auto& _Group        = _Tgt_state._Grps[_Idx];\r\n                        bool _Matched       = _Tgt_state._Grp_valid._Get(_Idx);\r\n                        const auto _Code    = _Matched ? _Rx_unwind_ops::_Capture_restore_matched_end\r\n                                                       : _Rx_unwind_ops::_Capture_restore_unmatched_end;\r\n                        auto _Frame_idx     = _Push_frame(_Code, _Node0);\r\n                        auto& _Frame        = _Frames[_Frame_idx];\r\n                        _Frame._Pos         = _Group._End;\r\n                        _Frame._Capture_idx = _Idx;\r\n                        _Group._End         = _Tgt_state._Cur;\r\n                        _Tgt_state._Grp_valid._Set(_Idx);\r\n                    }\r\n                    break;\r\n                }\r\n\r\n            case _N_back:\r\n                { // check back reference\r\n                    _STL_INTERNAL_CHECK(\r\n                        (_Sflags & (regex_constants::extended | regex_constants::egrep | regex_constants::awk))\r\n                        == 0); // these grammars don't have backreferences\r\n                    _Node_back* _Node = static_cast<_Node_back*>(_Nx);\r\n                    const auto _Idx   = _Node->_Idx - 1U;\r\n                    if (_Tgt_state._Grp_valid._Get(_Idx)) { // check for match\r\n                        _It _Res0 = _Tgt_state._Cur;\r\n                        _It _Bx   = _Tgt_state._Grps[_Idx]._Begin;\r\n                        _It _Ex   = _Tgt_state._Grps[_Idx]._End;\r\n                        _Iter_diff_t<_It> _Count{};\r\n                        if (_Bx != _Ex // _Bx == _Ex for zero-length match\r\n                            && (_Res0 = _STD _Compare_translate_both(\r\n                                    _Tgt_state._Cur, _End, _Bx, _Ex, _Traits, _Sflags, _Count))\r\n                                   == _Tgt_state._Cur) {\r\n                            _Failed = true;\r\n                        } else {\r\n                            _Tgt_state._Cur = _Res0;\r\n                        }\r\n\r\n                        // divide by 64 because character comparisons are cheaper than state transitions\r\n                        _Increase_complexity_count(static_cast<_Iter_diff_t<_It>>(_Count / 64));\r\n                    } else if (_Sflags & (regex_constants::basic | regex_constants::grep)) {\r\n                        _Failed = true;\r\n                    }\r\n                    break;\r\n                }\r\n\r\n            case _N_if:\r\n                {\r\n                    auto _Node = static_cast<_Node_if*>(_Nx);\r\n                    if (_Node->_Child) {\r\n                        _Push_frame(_Rx_unwind_ops::_Disjunction_eval_alternative, _Node->_Child);\r\n                    }\r\n                    break;\r\n                }\r\n\r\n            case _N_endif:\r\n                break;\r\n\r\n            case _N_rep:\r\n                { // handle start of loop\r\n                    auto _Node = static_cast<_Node_rep*>(_Nx);\r\n                    _Prepare_rep(_Node);\r\n                    bool _Greedy = (_Node->_Flags & _Fl_greedy) != 0;\r\n                    auto& _Sav   = _Loop_vals[_Node->_Loop_number];\r\n\r\n                    if (_Node->_Simple_loop == 1) {\r\n                        _Sav._Loop_frame_idx = _Push_frame(_Rx_unwind_ops::_Do_nothing, _Node);\r\n                        if (_Node->_Min > 0 || (_Greedy && !_Longest && _Node->_Max != 0)) { // try a rep first\r\n                            _Sav._Loop_idx = 1;\r\n                            // _Next is already assigned correctly for matching a rep\r\n\r\n                            // set up stack unwinding for greedy matching if no rep is allowed\r\n                            if (_Node->_Min == 0) {\r\n                                auto& _Frame = _Frames[_Sav._Loop_frame_idx];\r\n                                _Frame._Code = _Rx_unwind_ops::_Loop_simple_greedy_firstrep;\r\n                            }\r\n                        } else { // try tail first\r\n                            _Sav._Loop_idx = 0;\r\n                            _Next          = _Node->_End_rep->_Next;\r\n\r\n                            // set up stack unwinding for non-greedy matching if at least one rep is allowed\r\n                            if (_Node->_Max != 0) {\r\n                                _Push_frame(_Rx_unwind_ops::_Loop_simple_nongreedy, _Node);\r\n                            }\r\n                        }\r\n                    } else {\r\n                        if (_Node->_Min > 0 || (_Greedy && !_Longest && _Node->_Max != 0)) { // try a rep first\r\n                            // set up stack unwinding for greedy matching or loop val restoration\r\n                            const auto _Code =\r\n                                _Node->_Min == 0 ? _Rx_unwind_ops::_Loop_greedy : _Rx_unwind_ops::_Loop_restore_vals;\r\n                            auto _Frame_idx            = _Push_frame(_Code, _Node);\r\n                            auto& _Frame               = _Frames[_Frame_idx];\r\n                            _Frame._Loop_idx_sav       = _Sav._Loop_idx;\r\n                            _Frame._Loop_frame_idx_sav = _Sav._Loop_frame_idx;\r\n                            _Sav._Loop_idx             = 1;\r\n                            _Sav._Loop_frame_idx       = _Frame_idx;\r\n                            // _Next is already assigned correctly for matching a rep\r\n                        } else { // try tail first\r\n                            _Next = _Node->_End_rep->_Next;\r\n                            // set up stack unwinding for non-greedy matching if at least one rep is allowed\r\n                            if (_Node->_Max != 0) {\r\n                                auto _Frame_idx            = _Push_frame(_Rx_unwind_ops::_Loop_nongreedy, _Node);\r\n                                auto& _Frame               = _Frames[_Frame_idx];\r\n                                _Frame._Loop_idx_sav       = _Sav._Loop_idx;\r\n                                _Frame._Loop_frame_idx_sav = _Sav._Loop_frame_idx;\r\n                                _Sav._Loop_idx             = 0;\r\n                                _Sav._Loop_frame_idx       = _Frame_idx;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n\r\n                break;\r\n\r\n            case _N_end_rep:\r\n                { // handle end of loop\r\n                    _Node_rep* _Nr = static_cast<_Node_end_rep*>(_Nx)->_Begin_rep;\r\n                    auto& _Sav     = _Loop_vals[_Nr->_Loop_number];\r\n                    bool _Greedy   = (_Nr->_Flags & _Fl_greedy) != 0;\r\n                    if (_Nr->_Simple_loop != 0 || (_Nr->_Flags & _Fl_rep_branchless) != 0) {\r\n                        if (_Sav._Loop_idx == 1) {\r\n                            auto& _Base_frame = _Frames[_Sav._Loop_frame_idx];\r\n                            _Sav._Loop_length = _STD distance(_Base_frame._Pos, _Tgt_state._Cur);\r\n\r\n                            if (_Sav._Loop_length == _Iter_diff_t<_It>{}) { // initial match empty\r\n                                // loop is branchless, so it will only ever match empty strings\r\n                                // -> we only try tail for POSIX or if minimum number of reps is non-zero\r\n                                // _Next is already assigned correctly for matching tail\r\n                                if (!(_Sflags & regex_constants::_Any_posix) && _Nr->_Min == 0) {\r\n                                    _Failed = true;\r\n                                }\r\n                                break;\r\n                            }\r\n\r\n                            // allocate stack frame holding loop-specific unwinding opcode for second rep and beyond\r\n                            auto _New_frame_code = _Base_frame._Code == _Rx_unwind_ops::_Loop_simple_greedy_firstrep\r\n                                                        || _Base_frame._Code == _Rx_unwind_ops::_Loop_greedy\r\n                                                     ? _Rx_unwind_ops::_Loop_simple_greedy_lastrep\r\n                                                     : _Rx_unwind_ops::_Do_nothing;\r\n                            auto _New_frame_idx  = _Push_frame(_New_frame_code, _Nr);\r\n                            _Frames[_New_frame_idx]._Loop_frame_idx_sav = _Sav._Loop_frame_idx;\r\n                            _Sav._Loop_frame_idx                        = _New_frame_idx;\r\n                        } else { // discard stack frames for capturing group changes generated by this rep\r\n                            _Frames_count = _Sav._Loop_frame_idx + 1U;\r\n                        }\r\n\r\n                        if (_Sav._Loop_idx < _Nr->_Min) { // at least one more rep to reach minimum\r\n                            _Next = _Nr->_Next;\r\n                            ++_Sav._Loop_idx;\r\n                        } else if (_Greedy && !_Longest) { // greedy matching\r\n                            auto& _Frame = _Frames[_Sav._Loop_frame_idx];\r\n                            if (_Frame._Code == _Rx_unwind_ops::_Do_nothing) { // min reps reached\r\n                                _Frame._Code = _Rx_unwind_ops::_Loop_simple_greedy_lastrep;\r\n                                // set iterator in base frame to start of prior rep\r\n                                // (so to start of rep before reaching min reps)\r\n                                auto& _Before_unwind_pos = _Frames[_Frame._Loop_frame_idx_sav]._Pos;\r\n                                _Before_unwind_pos       = _Tgt_state._Cur;\r\n                                _STD advance(_Before_unwind_pos, -_Sav._Loop_length);\r\n                            } else {\r\n                                _STL_INTERNAL_CHECK(_Frame._Code == _Rx_unwind_ops::_Loop_simple_greedy_lastrep);\r\n                            }\r\n                            _Frame._Pos = _Tgt_state._Cur;\r\n\r\n                            if (_Sav._Loop_idx != _Nr->_Max) { // try one more rep\r\n                                _Next = _Nr->_Next;\r\n                                if (_Sav._Loop_idx < INT_MAX) { // avoid overflowing _Loop_idx\r\n                                    ++_Sav._Loop_idx;\r\n                                }\r\n                            } else { // try tail\r\n                                _STD advance(_Frame._Pos, -_Sav._Loop_length);\r\n                                if (_Frame._Pos != _Frames[_Frame._Loop_frame_idx_sav]._Pos) {\r\n                                    // capturing groups must be shifted when backtracking from tail\r\n                                    _Frame._Code = _Rx_unwind_ops::_Loop_simple_greedy_intermediaterep;\r\n                                } else {\r\n                                    --_Frames_count;\r\n                                }\r\n                                // _Next is already assigned correctly for matching tail\r\n                            }\r\n                        } else { // non-greedy matching\r\n                            // set up stack unwinding for non-greedy matching if one more rep is allowed\r\n                            if (_Sav._Loop_idx != _Nr->_Max) {\r\n                                auto& _Frame = _Frames[_Sav._Loop_frame_idx];\r\n                                _Frame._Pos  = _Tgt_state._Cur;\r\n                                _Frame._Code = _Rx_unwind_ops::_Loop_simple_nongreedy;\r\n                                _Frame._Node = _Nr;\r\n                            } else {\r\n                                --_Frames_count;\r\n                            }\r\n                            // _Next is already assigned correctly for matching tail\r\n                        }\r\n                    } else {\r\n                        const bool _Progress = _Frames[_Sav._Loop_frame_idx]._Pos != _Tgt_state._Cur;\r\n                        if (_Sav._Loop_idx < _Nr->_Min) { // try another required match\r\n                            auto _Frame_idx            = _Push_frame(_Rx_unwind_ops::_Loop_restore_vals, _Nr);\r\n                            auto& _Frame               = _Frames[_Frame_idx];\r\n                            _Frame._Loop_idx_sav       = _Sav._Loop_idx;\r\n                            _Frame._Loop_frame_idx_sav = _Sav._Loop_frame_idx;\r\n                            _Sav._Loop_frame_idx       = _Frame_idx;\r\n\r\n                            // optimization: try only one more match after an empty match\r\n                            // if there is no maximum number of reps\r\n                            if (!_Progress && _Nr->_Max < 0) {\r\n                                _Sav._Loop_idx = _Nr->_Min;\r\n                            } else {\r\n                                ++_Sav._Loop_idx;\r\n                            }\r\n\r\n                            _Reset_capture_groups(_Sav._Group_first);\r\n                            _Next = _Nr->_Next;\r\n                        } else if (!_Progress) { // latest rep match empty\r\n                            // An empty match is allowed if it is needed to reach the minimum number of reps.\r\n                            // Moreover, POSIX allows an empty repetition if the subexpression is matched only once.\r\n                            // So try tail in either case, else fail.\r\n                            if (_Sav._Loop_idx != _Nr->_Min\r\n                                && !((_Sflags & regex_constants::_Any_posix) && _Sav._Loop_idx == 1)) {\r\n                                _Failed = true;\r\n                            }\r\n                            // _Next is already assigned correctly for matching tail\r\n                        } else if (_Greedy && !_Longest && _Sav._Loop_idx != _Nr->_Max) { // one more rep to try next\r\n                            // set up stack unwinding for greedy matching\r\n                            auto _Frame_idx            = _Push_frame(_Rx_unwind_ops::_Loop_greedy, _Nr);\r\n                            auto& _Frame               = _Frames[_Frame_idx];\r\n                            _Frame._Loop_idx_sav       = _Sav._Loop_idx;\r\n                            _Frame._Loop_frame_idx_sav = _Sav._Loop_frame_idx;\r\n                            _Sav._Loop_frame_idx       = _Frame_idx;\r\n                            if (_Sav._Loop_idx < INT_MAX) {\r\n                                ++_Sav._Loop_idx;\r\n                            }\r\n\r\n                            _Reset_capture_groups(_Sav._Group_first);\r\n                            _Next = _Nr->_Next;\r\n                        } else { // non-greedy matching or greedy matching with maximum reached\r\n                            // set up stack unwinding for non-greedy matching if one more rep is allowed\r\n                            if (_Sav._Loop_idx != _Nr->_Max) {\r\n                                auto _Frame_idx            = _Push_frame(_Rx_unwind_ops::_Loop_nongreedy, _Nr);\r\n                                auto& _Frame               = _Frames[_Frame_idx];\r\n                                _Frame._Loop_idx_sav       = _Sav._Loop_idx;\r\n                                _Frame._Loop_frame_idx_sav = _Sav._Loop_frame_idx;\r\n                                _Sav._Loop_frame_idx       = _Frame_idx;\r\n                            }\r\n                            // _Next is already assigned correctly for matching tail\r\n                        }\r\n                    }\r\n                    break;\r\n                }\r\n\r\n            case _N_begin:\r\n                break;\r\n\r\n            case _N_end:\r\n                if (((_Mflags & (regex_constants::match_not_null | regex_constants::_Match_not_null))\r\n                        && _Begin == _Tgt_state._Cur)\r\n                    || (_Full && _Tgt_state._Cur != _End)) {\r\n                    _Failed = true;\r\n                } else if (!_Longest) { // match result found, skip unwinding\r\n                    return true;\r\n                } else if (!_Matched || _Better_match()) { // record successful match\r\n                    _Res._Copy_from(_Tgt_state);\r\n                    _Matched = true;\r\n                }\r\n                _Next = nullptr;\r\n                break;\r\n\r\n            case _N_none:\r\n            default:\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_REPORT_ERROR(\"internal data of regex node corrupted\");\r\n#endif\r\n                return false;\r\n            }\r\n\r\n            if (_Failed) {\r\n                _Nx = nullptr;\r\n            } else {\r\n                _Nx = _Next;\r\n            }\r\n        } while (_Nx);\r\n\r\n        while (_Frames_count > 0 && !_Nx) {\r\n            _STL_INTERNAL_CHECK(_Failed || _Longest);\r\n\r\n            auto& _Frame = _Frames[--_Frames_count];\r\n            switch (_Frame._Code) {\r\n            case _Rx_unwind_ops::_After_assert: // matching pattern of positive assert failed\r\n            case _Rx_unwind_ops::_Do_nothing:\r\n                break;\r\n\r\n            case _Rx_unwind_ops::_After_neg_assert:\r\n                { // matching pattern of negative assert failed\r\n                    _Tgt_state._Cur = _Frame._Pos;\r\n                    _Nx             = _Frame._Node->_Next;\r\n                    _Failed         = false;\r\n                    break;\r\n                }\r\n\r\n            case _Rx_unwind_ops::_Disjunction_eval_alternative:\r\n                { // try next alternative in a disjunction\r\n                    auto _Node      = static_cast<_Node_if*>(_Frame._Node);\r\n                    _Nx             = _Node->_Next;\r\n                    _Tgt_state._Cur = _Frame._Pos;\r\n                    _Failed         = false;\r\n                    if (_Node->_Child) {\r\n                        _Frame._Node = _Node->_Child;\r\n                        ++_Frames_count;\r\n                    }\r\n                    break;\r\n                }\r\n\r\n            case _Rx_unwind_ops::_Loop_simple_nongreedy:\r\n                { // try one more rep\r\n                    auto _Node = static_cast<_Node_rep*>(_Frame._Node);\r\n                    auto& _Sav = _Loop_vals[_Node->_Loop_number];\r\n\r\n                    _Nx             = _Node->_Next;\r\n                    _Tgt_state._Cur = _Frame._Pos;\r\n                    _Failed         = false;\r\n                    if (_Sav._Loop_idx < INT_MAX) { // avoid overflowing _Loop_idx\r\n                        ++_Sav._Loop_idx;\r\n                    }\r\n                }\r\n                break;\r\n\r\n            case _Rx_unwind_ops::_Loop_simple_greedy_firstrep:\r\n                { // try tail after backtracking from first rep\r\n                    auto _Node = static_cast<_Node_rep*>(_Frame._Node);\r\n\r\n                    _Nx             = _Node->_End_rep->_Next;\r\n                    _Tgt_state._Cur = _Frame._Pos;\r\n                    _Failed         = false;\r\n                }\r\n                break;\r\n\r\n            case _Rx_unwind_ops::_Loop_simple_greedy_intermediaterep:\r\n                {\r\n                    // shift capturing groups, set up unwinding prior rep and try tail\r\n                    // when backtracking between the second and the last attempted rep\r\n                    auto _Node = static_cast<_Node_rep*>(_Frame._Node);\r\n\r\n                    // adjust capturing group begin and end iterators by rep length\r\n                    auto& _Sav = _Loop_vals[_Node->_Loop_number];\r\n                    for (auto _Capture_frame_idx = _Frame._Loop_frame_idx_sav + 1U; _Capture_frame_idx != _Frames_count;\r\n                        ++_Capture_frame_idx) {\r\n                        const auto& _Capture_frame = _Frames[_Capture_frame_idx];\r\n                        _STL_INTERNAL_CHECK(_Capture_frame._Code == _Rx_unwind_ops::_Capture_restore_begin\r\n                                            || _Capture_frame._Code == _Rx_unwind_ops::_Capture_restore_matched_end\r\n                                            || _Capture_frame._Code == _Rx_unwind_ops::_Capture_restore_unmatched_end);\r\n                        auto& _Grp = _Tgt_state._Grps[_Capture_frame._Capture_idx];\r\n                        _STD advance(\r\n                            _Capture_frame._Code == _Rx_unwind_ops::_Capture_restore_begin ? _Grp._Begin : _Grp._End,\r\n                            -_Sav._Loop_length);\r\n                    }\r\n                }\r\n                _FALLTHROUGH;\r\n\r\n            case _Rx_unwind_ops::_Loop_simple_greedy_lastrep:\r\n                {\r\n                    // set up unwinding prior rep and try tail\r\n                    // when backtracking from last attempted rep\r\n                    auto _Node = static_cast<_Node_rep*>(_Frame._Node);\r\n\r\n                    _Nx             = _Node->_End_rep->_Next;\r\n                    _Tgt_state._Cur = _Frame._Pos;\r\n                    _Failed         = false;\r\n\r\n                    auto& _Sav = _Loop_vals[_Node->_Loop_number];\r\n                    _STD advance(_Frame._Pos, -_Sav._Loop_length);\r\n\r\n                    // set up unwinding if prior rep is not first or minimum rep\r\n                    if (_Frames[_Frame._Loop_frame_idx_sav]._Pos != _Frame._Pos) {\r\n                        _Frame._Code = _Rx_unwind_ops::_Loop_simple_greedy_intermediaterep;\r\n                        ++_Frames_count;\r\n                    }\r\n                }\r\n                break;\r\n\r\n            case _Rx_unwind_ops::_Loop_greedy:\r\n                { // try tail\r\n                    auto _Node = static_cast<_Node_rep*>(_Frame._Node);\r\n\r\n                    _Nx             = _Node->_End_rep->_Next;\r\n                    _Tgt_state._Cur = _Frame._Pos;\r\n                    _Failed         = false;\r\n                }\r\n                _FALLTHROUGH;\r\n\r\n            case _Rx_unwind_ops::_Loop_restore_vals:\r\n                { // restore loop vals after processing of a rep is completed\r\n                    auto _Node = static_cast<_Node_rep*>(_Frame._Node);\r\n                    auto& _Sav = _Loop_vals[_Node->_Loop_number];\r\n\r\n                    _Sav._Loop_idx       = _Frame._Loop_idx_sav;\r\n                    _Sav._Loop_frame_idx = _Frame._Loop_frame_idx_sav;\r\n                }\r\n                break;\r\n\r\n            case _Rx_unwind_ops::_Loop_nongreedy:\r\n                { // try another rep\r\n                    auto _Node = static_cast<_Node_rep*>(_Frame._Node);\r\n                    auto& _Sav = _Loop_vals[_Node->_Loop_number];\r\n\r\n                    _Nx             = _Node->_Next;\r\n                    _Tgt_state._Cur = _Frame._Pos;\r\n                    _Failed         = false;\r\n                    if (_Sav._Loop_idx < INT_MAX) { // avoid overflowing _Loop_idx\r\n                        ++_Sav._Loop_idx;\r\n                    }\r\n\r\n                    _Frame._Code = _Rx_unwind_ops::_Loop_restore_vals;\r\n                    ++_Frames_count;\r\n                    _Reset_capture_groups(_Sav._Group_first);\r\n                }\r\n                break;\r\n\r\n            case _Rx_unwind_ops::_Capture_restore_begin:\r\n                { // restore begin of capturing group\r\n                    _Tgt_state._Grps[_Frame._Capture_idx]._Begin = _Frame._Pos;\r\n                }\r\n                break;\r\n\r\n            case _Rx_unwind_ops::_Capture_restore_unmatched_end:\r\n                { // restore end of capturing group that was previously unmatched\r\n                    _Tgt_state._Grp_valid._Clear(_Frame._Capture_idx);\r\n                }\r\n                _FALLTHROUGH;\r\n\r\n            case _Rx_unwind_ops::_Capture_restore_matched_end:\r\n                { // restore end of capturing group that was already matched\r\n                    _Tgt_state._Grps[_Frame._Capture_idx]._End = _Frame._Pos;\r\n                }\r\n                break;\r\n\r\n            case _Rx_unwind_ops::_Capture_restore_matched:\r\n                { // restore matched status of capturing group\r\n                    _Tgt_state._Grp_valid._Set(_Frame._Capture_idx);\r\n                }\r\n                break;\r\n\r\n            default:\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                _STL_REPORT_ERROR(\"internal stack of regex matcher corrupted\");\r\n#endif\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n\r\n    _STL_INTERNAL_CHECK(_Frames_count == 0);\r\n\r\n    return !_Failed;\r\n}\r\n\r\ntemplate <class _BidIt, class _Elem, class _RxTraits, class _It, class _Alloc>\r\n_BidIt _Matcher3<_BidIt, _Elem, _RxTraits, _It, _Alloc>::_Skip(\r\n    _BidIt _First_arg, _BidIt _Last, _Node_base* _Node_arg, unsigned int _Recursion_depth) {\r\n    // skip until possible match\r\n    // assumes --_First_arg is valid\r\n    static constexpr char _Line_terminators_char[]       = {static_cast<char>(_Meta_cr), static_cast<char>(_Meta_nl)};\r\n    static constexpr wchar_t _Line_terminators_wchar_t[] = {static_cast<wchar_t>(_Meta_cr),\r\n        static_cast<wchar_t>(_Meta_nl), static_cast<wchar_t>(_Meta_ls), static_cast<wchar_t>(_Meta_ps)};\r\n    constexpr unsigned int _Max_recursion_depth          = 50U;\r\n    _Node_base* _Nx                                      = _Node_arg ? _Node_arg : _Start;\r\n\r\n    while (_First_arg != _Last && _Nx) { // check current node\r\n        switch (_Nx->_Kind) { // handle current node's type\r\n        case _N_nop:\r\n            break;\r\n\r\n        case _N_bol: // check for beginning anchor\r\n            if (_Sflags & regex_constants::multiline) {\r\n                // multiline mode: check for embedded line terminator\r\n                // return iterator to character just after the newline; for input like \"\\nabc\"\r\n                // matching \"^abc\", _First_arg could be pointing at 'a', so we need to check\r\n                // --_First_arg for '\\n'\r\n                if (!_STD _Is_ecmascript_line_terminator(*_STD _Prev_iter(_First_arg))) {\r\n                    if constexpr (sizeof(_Elem) == 1) {\r\n                        _First_arg = _STD find_first_of(\r\n                            _First_arg, _Last, _Line_terminators_char, _STD end(_Line_terminators_char));\r\n                    } else {\r\n                        _First_arg = _STD find_first_of(\r\n                            _First_arg, _Last, _Line_terminators_wchar_t, _STD end(_Line_terminators_wchar_t));\r\n                    }\r\n\r\n                    if (_First_arg != _Last) {\r\n                        ++_First_arg;\r\n                    }\r\n                }\r\n\r\n                return _First_arg;\r\n            } else {\r\n                // non-multiline mode: never matches because --_First_arg is valid\r\n                return _Last;\r\n            }\r\n\r\n        case _N_eol:\r\n            if (_Sflags & regex_constants::multiline) {\r\n                // multiline mode: matches at next line terminator or end of input\r\n                if constexpr (sizeof(_Elem) == 1) {\r\n                    return _STD find_first_of(\r\n                        _First_arg, _Last, _Line_terminators_char, _STD end(_Line_terminators_char));\r\n                } else {\r\n                    return _STD find_first_of(\r\n                        _First_arg, _Last, _Line_terminators_wchar_t, _STD end(_Line_terminators_wchar_t));\r\n                }\r\n            } else {\r\n                return _Last; // non-multiline mode: matches at end of input or not at all\r\n            }\r\n\r\n        case _N_str:\r\n            { // check for string match\r\n                _Node_str<_Elem>* _Node = static_cast<_Node_str<_Elem>*>(_Nx);\r\n                auto _Str               = _Node->_Data._Str();\r\n                return _STD _Search_translate_left(\r\n                    _First_arg, _Last, _Str, _Str + _Node->_Data._Size(), _Traits, _Sflags);\r\n            }\r\n\r\n        case _N_class:\r\n            { // check for string match\r\n                _Node_class<_Elem, _RxTraits>* _Node = static_cast<_Node_class<_Elem, _RxTraits>*>(_Nx);\r\n\r\n                for (; _First_arg != _Last; ++_First_arg) { // look for starting match\r\n                    if (_Do_class(_Node, _First_arg) != _First_arg) {\r\n                        return _First_arg;\r\n                    }\r\n                }\r\n            }\r\n            return _First_arg;\r\n\r\n        case _N_group:\r\n            break;\r\n\r\n        case _N_end_group:\r\n            break;\r\n\r\n        case _N_end_assert:\r\n            _Nx = nullptr;\r\n            break;\r\n\r\n        case _N_capture:\r\n            break;\r\n\r\n        case _N_end_capture:\r\n            break;\r\n\r\n        case _N_if:\r\n            {\r\n                // GH-5452: If this node has two or more branches,\r\n                // examining all these branches has quadratic worst-case complexity.\r\n                // Thus, we only continue if this node has a single branch only.\r\n                // TRANSITION, ABI: After GH-5539, the parser no longer generates single-branch _N_if nodes.\r\n                // But we have to retain this special handling to avoid performance regression\r\n                // when an old parser gets mixed with a new matcher.\r\n                _Node_if* _Node = static_cast<_Node_if*>(_Nx);\r\n\r\n                if (_Node->_Child) {\r\n                    return _First_arg;\r\n                }\r\n                break;\r\n            }\r\n\r\n        case _N_rep:\r\n            {\r\n                _Node_rep* _Node = static_cast<_Node_rep*>(_Nx);\r\n                if (_Node->_Min == 0) {\r\n                    return _First_arg;\r\n                }\r\n                break;\r\n            }\r\n\r\n        case _N_assert:\r\n            {\r\n                if (_Recursion_depth >= _Max_recursion_depth) {\r\n                    return _First_arg;\r\n                }\r\n\r\n                _Node_assert* _Node = static_cast<_Node_assert*>(_Nx);\r\n                _First_arg          = _Skip(_First_arg, _Last, _Node->_Child, _Recursion_depth + 1U);\r\n                _BidIt _Next;\r\n                for (;;) {\r\n                    _Next = _Skip(_First_arg, _Last, _Node->_Next, _Recursion_depth + 1U);\r\n                    if (_Next == _First_arg) {\r\n                        return _First_arg;\r\n                    }\r\n\r\n                    _First_arg = _Skip(_Next, _Last, _Node->_Child, _Recursion_depth + 1U);\r\n                    if (_Next == _First_arg) {\r\n                        return _First_arg;\r\n                    }\r\n                }\r\n            }\r\n\r\n        case _N_neg_assert:\r\n            // we skip the negated assertion body and continue examining the rest of the regex\r\n            break;\r\n\r\n        case _N_wbound:\r\n            {\r\n                bool _Negated   = (_Nx->_Flags & _Fl_negate) != 0;\r\n                bool _Prev_word = _STD _Is_word(*_STD _Prev_iter(_First_arg));\r\n                for (; _First_arg != _Last; ++_First_arg) {\r\n                    bool _Next_word = _STD _Is_word(*_First_arg);\r\n                    if (_Negated == (_Next_word == _Prev_word)) {\r\n                        break;\r\n                    }\r\n                    _Prev_word = _Next_word;\r\n                }\r\n                return _First_arg;\r\n            }\r\n\r\n        case _N_begin:\r\n        case _N_endif:\r\n            break;\r\n\r\n        case _N_end:\r\n        case _N_none:\r\n        case _N_dot:\r\n        case _N_back:\r\n        case _N_end_rep:\r\n        default:\r\n            return _First_arg;\r\n        }\r\n        if (_Nx) {\r\n            _Nx = _Nx->_Next;\r\n        }\r\n    }\r\n    return _First_arg;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\n[[noreturn]] void _Parser2<_FwdIt, _Elem, _RxTraits>::_Error(regex_constants::error_type _Code) { // handle error\r\n    _Xregex_error(_Code);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nbool _Parser2<_FwdIt, _Elem, _RxTraits>::_Is_esc(_FwdIt _Ch0) const { // assumes _Ch0 != _End\r\n    return _Mode == _Lex_mode::_Default && ++_Ch0 != _End\r\n        && ((!(_L_flags & _L_nex_grp)\r\n                && (*_Ch0 == static_cast<char>(_Meta_lpar) || *_Ch0 == static_cast<char>(_Meta_rpar)))\r\n            || (!(_L_flags & _L_nex_rep)\r\n                && (*_Ch0 == static_cast<char>(_Meta_lbr) || *_Ch0 == static_cast<char>(_Meta_rbr))));\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Parser2<_FwdIt, _Elem, _RxTraits>::_Trans() { // map character to meta-character\r\n    static constexpr char _Meta_map[] = {_Meta_lpar, _Meta_rpar, _Meta_dlr, _Meta_caret, _Meta_dot, _Meta_star,\r\n        _Meta_plus, _Meta_query, _Meta_lsq, _Meta_rsq, _Meta_bar, _Meta_esc, _Meta_dash, _Meta_lbr, _Meta_rbr,\r\n        _Meta_comma, _Meta_colon, _Meta_equal, _Meta_exc, _Meta_nl, _Meta_cr, _Meta_bsp, 0}; // array of meta chars\r\n\r\n    if (_Pat == _End) {\r\n        _Mchar = _Meta_eos;\r\n        _Char  = _Elem{};\r\n    } else { // map current character\r\n        _Char       = *_Pat;\r\n        auto _Uchar = static_cast<unsigned char>(_Char);\r\n        if (static_cast<_Elem>(_Uchar) == _Char && _CSTD strchr(_Meta_map, static_cast<char>(_Uchar))) {\r\n            _Mchar = static_cast<_Meta_type>(_Uchar);\r\n        } else {\r\n            _Mchar = _Meta_chr;\r\n        }\r\n    }\r\n\r\n    switch (int{_Mchar}) { // handle special cases\r\n    case _Meta_esc:\r\n        if (_Is_esc(_Pat)) { // replace escape sequence\r\n            _FwdIt _Ch0 = _Pat;\r\n            _Char       = *++_Ch0;\r\n            _Mchar      = static_cast<_Meta_type>(static_cast<unsigned char>(_Char));\r\n        }\r\n        break;\r\n\r\n    case _Meta_nl:\r\n        if ((_L_flags & _L_alt_nl) && _Disj_count == 0) {\r\n            _Mchar = _Meta_bar;\r\n        }\r\n\r\n        break;\r\n\r\n    case _Meta_lpar:\r\n    case _Meta_rpar:\r\n        if (!(_L_flags & _L_nex_grp)) {\r\n            _Mchar = _Meta_chr;\r\n        }\r\n\r\n        break;\r\n\r\n    case _Meta_lbr:\r\n    case _Meta_rbr:\r\n        if (!(_L_flags & _L_nex_rep)) {\r\n            _Mchar = _Meta_chr;\r\n        }\r\n\r\n        break;\r\n\r\n    case _Meta_star:\r\n        // A star can always act as a quantifier outside bracket expressions,\r\n        // but _L_star_beg (used by basic/grep) allows its use as an ordinary character\r\n        // at the beginning of a (sub-)expression (potentially after an optional caret anchor).\r\n        // We'll handle that when we are parsing alternatives in disjunctions.\r\n        break;\r\n\r\n    case _Meta_caret:\r\n        // A caret can always negate a bracket expression,\r\n        // but _L_anch_rstr (used by basic/grep) restricts caret anchors to the beginning.\r\n        // We'll handle that restriction when we're about to add a bol node.\r\n        break;\r\n\r\n    case _Meta_dlr:\r\n        { // check if $ is special\r\n            _FwdIt _Next = _Pat;\r\n            if ((_L_flags & _L_anch_rstr) && ++_Next != _End) {\r\n                const bool _Escaped = *_Next == static_cast<char>(_Meta_esc) && _Is_esc(_Next);\r\n                if (_Escaped) {\r\n                    ++_Next;\r\n                }\r\n\r\n                // Only the basic and grep grammars set _L_anch_rstr, so _L_alt_pipe and _L_nex_grp must be unset.\r\n                // Therefore, we don't need to handle \"dollar followed by pipe '|' for alternation\"\r\n                // or \"dollar followed by non-escaped right parenthesis ')' closing a group\" below.\r\n                _STL_INTERNAL_CHECK((_L_flags & (_L_alt_pipe | _L_nex_grp)) == 0);\r\n\r\n                const _Elem _Ch = *_Next;\r\n                const bool _Is_end_of_alternative =\r\n                    ((_L_flags & _L_alt_nl) && _Ch == static_cast<char>(_Meta_nl)\r\n                        && _Disj_count == 0) // dollar followed by newline '\\n' for alternation\r\n                    || (_Escaped && _Ch == static_cast<char>(_Meta_rpar)\r\n                        && _Disj_count != 0); // dollar followed by (escaped) right parenthesis ')' closing a group\r\n\r\n                if (!_Is_end_of_alternative) {\r\n                    _Mchar = _Meta_chr;\r\n                }\r\n            }\r\n\r\n            break;\r\n        }\r\n\r\n    case _Meta_plus:\r\n    case _Meta_query:\r\n        if (!(_L_flags & _L_ext_rep)) {\r\n            _Mchar = _Meta_chr;\r\n        }\r\n\r\n        break;\r\n\r\n    case _Meta_bar:\r\n        if (!(_L_flags & _L_alt_pipe)) {\r\n            _Mchar = _Meta_chr;\r\n        }\r\n\r\n        break;\r\n\r\n    default:\r\n        break;\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Parser2<_FwdIt, _Elem, _RxTraits>::_Next() { // advance to next input character\r\n    if (_Pat != _End) { // advance\r\n        if (*_Pat == static_cast<char>(_Meta_esc) && _Is_esc(_Pat)) {\r\n            ++_Pat;\r\n        }\r\n\r\n        ++_Pat;\r\n    }\r\n    _Trans();\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Parser2<_FwdIt, _Elem, _RxTraits>::_Expect(_Meta_type _St, regex_constants::error_type _Code) {\r\n    // check whether current meta-character is _St\r\n    if (_Mchar != _St) {\r\n        _Error(_Code);\r\n    }\r\n\r\n    _Next();\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nint _Parser2<_FwdIt, _Elem, _RxTraits>::_Do_digits(\r\n    int _Base, int _Initial, int _Count, regex_constants::error_type _Error_type) { // translate digits to numeric value\r\n    int _Chv;\r\n    _Val = _Initial;\r\n    while (_Count != 0 && (_Chv = _Traits.value(_Char, _Base)) != -1) { // append next digit\r\n        if (_Val > (INT_MAX - _Chv) / _Base) {\r\n            _Error(_Error_type);\r\n        }\r\n        --_Count;\r\n        _Val *= _Base;\r\n        _Val += _Chv;\r\n        _Next();\r\n    }\r\n    return _Count;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nbool _Parser2<_FwdIt, _Elem, _RxTraits>::_DecimalDigits(\r\n    const regex_constants::error_type _Error_type, const int _Initial /* = 0 */) { // check for decimal value\r\n    return _Do_digits(10, _Initial, INT_MAX, _Error_type) != INT_MAX;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Parser2<_FwdIt, _Elem, _RxTraits>::_HexDigits(int _Count) { // check for _Count hex digits\r\n    if (_Do_digits(16, 0, _Count, regex_constants::error_escape) != 0) {\r\n        _Error(regex_constants::error_escape);\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nbool _Parser2<_FwdIt, _Elem, _RxTraits>::_OctalDigits() { // check for up to 3 octal digits\r\n    return _Do_digits(8, 0, 3, regex_constants::error_escape) != 3;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\n_Prs_ret _Parser2<_FwdIt, _Elem, _RxTraits>::_Do_ex_class(\r\n    _Meta_type _End_arg) { // handle delimited expressions within bracket expression\r\n    const regex_constants::error_type _Errtype =\r\n        _End_arg == _Meta_colon ? regex_constants::error_ctype : regex_constants::error_collate;\r\n    const _FwdIt _Beg = _Pat;\r\n\r\n    while (_Mchar != _Meta_colon && _Mchar != _Meta_equal && _Mchar != _Meta_dot && _Mchar != _Meta_eos) {\r\n        // advance to end delimiter\r\n        _Next();\r\n    }\r\n\r\n    const _FwdIt _End = _Pat;\r\n    _Expect(_End_arg, _Errtype);\r\n    _Expect(_Meta_rsq, _Errtype);\r\n\r\n    if (_End_arg == _Meta_colon) { // handle named character class\r\n        typename _RxTraits::char_class_type _Cls =\r\n            _Traits.lookup_classname(_Beg, _End, (_Flags & regex_constants::icase) != 0);\r\n        if (!_Cls) {\r\n            _Error(regex_constants::error_ctype);\r\n        }\r\n\r\n        _Nfa._Add_named_class(_Cls, _Rx_char_class_kind::_Positive);\r\n        return _Prs_set;\r\n    } else {\r\n        typename _RxTraits::string_type _Coll_elem = _Traits.lookup_collatename(_Beg, _End);\r\n        const auto _Size                           = _Coll_elem.size();\r\n\r\n        if (_Size == 0) {\r\n            _Error(regex_constants::error_collate);\r\n        }\r\n\r\n        if (_Size > _Max_limit<unsigned int>()) {\r\n            _Error(regex_constants::error_space);\r\n        }\r\n\r\n        _Elem* const _Coll_elem_first      = &_Coll_elem.front();\r\n        const _Elem* const _Coll_elem_last = _Coll_elem_first + _Size;\r\n\r\n        if (_Size == 1 && _End_arg == _Meta_dot) {\r\n            // process single-element collating elements like individual characters\r\n            _Unescaped_char = *_Coll_elem_first;\r\n            return _Prs_chr;\r\n        }\r\n\r\n        if (_Flags & regex_constants::icase) {\r\n            for (auto _Current = _Coll_elem_first; _Current != _Coll_elem_last; ++_Current) {\r\n                *_Current = _Traits.translate_nocase(*_Current);\r\n            }\r\n        } else if (_Flags & regex_constants::collate) {\r\n            for (auto _Current = _Coll_elem_first; _Current != _Coll_elem_last; ++_Current) {\r\n                *_Current = _Traits.translate(*_Current);\r\n            }\r\n        }\r\n\r\n        if (_End_arg == _Meta_equal) { // process equivalence\r\n            _Nfa._Add_equiv(_Coll_elem_first, _Coll_elem_last);\r\n            return _Prs_set;\r\n        } else { // process collating element\r\n\r\n            // Character ranges with multi-character bounds cannot be represented in NFA nodes yet (see GH-5391).\r\n            // Provisionally treat multi-character collating elements as character sets.\r\n            _Nfa._Add_coll(_Coll_elem_first, _Coll_elem_last);\r\n            return _Prs_set;\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nbool _Parser2<_FwdIt, _Elem, _RxTraits>::_CharacterClassEscape(bool _Addit) { // check for character class escape\r\n    typename _RxTraits::char_class_type _Cls;\r\n    _FwdIt _Ch0 = _Pat;\r\n    if (_Ch0 == _End || (_Cls = _Traits.lookup_classname(_Pat, ++_Ch0, (_Flags & regex_constants::icase) != 0)) == 0) {\r\n        return false;\r\n    }\r\n\r\n    auto _Kind = (_Char == 'W'   ? _Rx_char_class_kind::_Negated_w\r\n                  : _Char == 'S' ? _Rx_char_class_kind::_Negated_s\r\n                  : _Char == 'D' ? _Rx_char_class_kind::_Negated_d\r\n                                 : _Rx_char_class_kind::_Positive);\r\n\r\n    if (_Addit) {\r\n        _Nfa._Add_class();\r\n        // GH-992: Outside character class definitions, _Cls completely defines the character class\r\n        // so negating _Cls and negating the entire character class are equivalent.\r\n        // Since the former negation is defective, do the latter instead.\r\n        if (_Kind != _Rx_char_class_kind::_Positive) {\r\n            _Nfa._Negate();\r\n            _Kind = _Rx_char_class_kind::_Positive;\r\n        }\r\n    }\r\n\r\n    _Nfa._Add_named_class(_Cls, _Kind);\r\n    _Next();\r\n    return true;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\n_Prs_ret _Parser2<_FwdIt, _Elem, _RxTraits>::_ClassEscape() { // check for class escape\r\n    if ((_L_flags & _L_esc_bsp) && _Char == static_cast<char>(_Esc_ctrl_b)) { // handle backspace escape\r\n        _Next();\r\n        _Unescaped_char = static_cast<_Elem>(static_cast<char>(_Meta_bsp));\r\n        return _Prs_chr;\r\n    } else if ((_L_flags & (_L_bzr_chr | _L_bckr))\r\n               && (_Val = _Traits.value(_Char, 10)) != -1) { // handle \\0 and reject other escaped decimal literals\r\n        _Next();\r\n        if (!(_L_flags & _L_bzr_chr) || _Val != 0 || _Traits.value(_Char, 10) != -1) {\r\n            _Error(regex_constants::error_escape);\r\n        }\r\n\r\n        _Unescaped_char = _Elem{};\r\n        return _Prs_chr;\r\n    } else if (_CharacterEscape(true)) {\r\n        return _Prs_chr;\r\n    } else if ((_L_flags & _L_esc_wsd) && _CharacterClassEscape(false)) {\r\n        return _Prs_set;\r\n    }\r\n\r\n    _Error(regex_constants::error_escape);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\n_Prs_ret _Parser2<_FwdIt, _Elem, _RxTraits>::_ClassAtom(const bool _Initial) { // check for class atom\r\n    if (_Mchar == _Meta_esc && (_L_flags & _L_grp_esc)) { // check for valid escape sequence\r\n        _Next();\r\n        return _ClassEscape();\r\n    } else if (_Mchar == _Meta_lsq) { // check for valid delimited expression\r\n        _Elem _Lsq = _Char;\r\n        _Next();\r\n        if (_Mchar == _Meta_colon || _Mchar == _Meta_equal || _Mchar == _Meta_dot) { // handle delimited expression\r\n            _Meta_type _St = _Mchar;\r\n            _Next();\r\n            return _Do_ex_class(_St);\r\n        } else { // handle ordinary [\r\n            _Unescaped_char = _Lsq;\r\n            return _Prs_chr;\r\n        }\r\n    } else if ((_Mchar == _Meta_rsq\r\n                   && (!(_L_flags & _L_brk_rstr)\r\n                       || !_Initial)) // initial ] does not close the class when it is not special\r\n               || _Mchar == _Meta_eos) {\r\n        return _Prs_none;\r\n    } else { // handle ordinary character\r\n        _Unescaped_char = _Char;\r\n        _Next();\r\n        return _Prs_chr;\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Parser2<_FwdIt, _Elem, _RxTraits>::_ClassRanges() { // check for valid class ranges\r\n    _Prs_ret _Ret;\r\n\r\n    bool _Initial = true;\r\n    for (;;) { // process characters through end of bracket expression\r\n        if ((_Ret = _ClassAtom(_Initial)) == _Prs_none) {\r\n            return;\r\n        }\r\n        _Initial = false;\r\n\r\n        if (_Ret == _Prs_chr && !(_L_flags & _L_bzr_chr) && _Unescaped_char == _Elem{}) {\r\n            _Error(regex_constants::error_escape);\r\n        }\r\n\r\n        if (_Mchar == _Meta_dash) { // check for valid range\r\n            _Elem _Chr1 = _Unescaped_char;\r\n            _Elem _Dash = _Char;\r\n            _Next();\r\n            const bool _Set_preceding = _Ret == _Prs_set;\r\n            if ((_Ret = _ClassAtom(false)) == _Prs_none) { // treat - as ordinary character\r\n                if (!_Set_preceding) {\r\n                    _Nfa._Add_char_to_class(_Chr1);\r\n                }\r\n                _Nfa._Add_char_to_class(_Dash);\r\n                return;\r\n            }\r\n\r\n            if (_Set_preceding || _Ret == _Prs_set) {\r\n                _Error(regex_constants::error_range); // set precedes or follows dash\r\n            }\r\n\r\n            _Elem _Chr2 = _Unescaped_char;\r\n\r\n            // translate ends of range\r\n            if (_Flags & regex_constants::icase) {\r\n                _Chr1 = _Traits.translate_nocase(_Chr1);\r\n                _Chr2 = _Traits.translate_nocase(_Chr2);\r\n            } else if (_Flags & regex_constants::collate) {\r\n                _Chr1 = _Traits.translate(_Chr1);\r\n                _Chr2 = _Traits.translate(_Chr2);\r\n            }\r\n\r\n            _Nfa._Add_range(_Chr1, _Chr2);\r\n        } else if (_Ret == _Prs_chr) {\r\n            _Nfa._Add_char_to_class(_Unescaped_char);\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Parser2<_FwdIt, _Elem, _RxTraits>::_CharacterClass() { // add bracket expression\r\n    _Nfa._Add_class();\r\n    if (_Mchar == _Meta_caret) { // negate bracket expression\r\n        _Nfa._Negate();\r\n        _Next();\r\n    }\r\n\r\n    _ClassRanges();\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Parser2<_FwdIt, _Elem, _RxTraits>::_Do_capture_group() { // add capture group\r\n    ++_Grp_idx;\r\n\r\n    if (_Grp_idx >= 1000) { // hardcoded limit\r\n        _Xregex_error(regex_constants::error_stack);\r\n    }\r\n\r\n    _Node_base* _Pos1 = _Nfa._Begin_capture_group(_Grp_idx);\r\n    _Disjunction();\r\n    _Nfa._End_group(_Pos1);\r\n    _Finished_grps.resize(_Grp_idx + 1);\r\n    _Finished_grps[static_cast<_Node_capture*>(_Pos1)->_Idx] = true;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Parser2<_FwdIt, _Elem, _RxTraits>::_Do_noncapture_group() { // add non-capture group\r\n    _Node_base* _Pos1 = _Nfa._Begin_group();\r\n    _Disjunction();\r\n    _Nfa._End_group(_Pos1);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Parser2<_FwdIt, _Elem, _RxTraits>::_Do_assert_group(bool _Neg) { // add assert group\r\n    _Node_base* _Pos1 = _Nfa._Begin_assert_group(_Neg);\r\n    _Disjunction();\r\n    _Nfa._End_assert_group(_Pos1);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nbool _Parser2<_FwdIt, _Elem, _RxTraits>::_Wrapped_disjunction() { // add disjunction inside group\r\n    ++_Disj_count;\r\n    if (_Disj_count >= 1000) { // hardcoded limit\r\n        _Error(regex_constants::error_stack);\r\n    }\r\n\r\n    if (!(_L_flags & _L_empty_grp) && _Mchar == _Meta_rpar) {\r\n        _Error(regex_constants::error_paren);\r\n    } else if ((_L_flags & _L_nc_asrt) && _Mchar == _Meta_query) { // check for valid ECMAScript (?x ... ) group\r\n        _Next();\r\n        _Meta_type _Ch = _Mchar;\r\n        _Next();\r\n        if (_Ch == _Meta_colon) { // process non-capture group (?:meow)\r\n            _Do_noncapture_group();\r\n        } else if (_Ch == _Meta_exc) { // process negative lookahead assertion (?!meow)\r\n            _Do_assert_group(true);\r\n            --_Disj_count;\r\n            return false;\r\n        } else if (_Ch == _Meta_equal) { // process positive lookahead assertion (?=meow)\r\n            _Do_assert_group(false);\r\n            --_Disj_count;\r\n            return false;\r\n        } else {\r\n            _Error(regex_constants::error_badrepeat);\r\n        }\r\n    } else if (_Flags & regex_constants::nosubs) {\r\n        _Do_noncapture_group();\r\n    } else {\r\n        _Do_capture_group();\r\n    }\r\n\r\n    --_Disj_count;\r\n    return true;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nbool _Parser2<_FwdIt, _Elem, _RxTraits>::_IsIdentityEscape(bool _In_character_class) const {\r\n    // check for valid identity escape\r\n    auto _Uchar = static_cast<unsigned char>(_Char);\r\n\r\n    if (_L_flags & _L_ident_ECMA) {\r\n        // ECMAScript identity escape characters\r\n        if (static_cast<_Elem>(_Uchar) != _Char) {\r\n            return true;\r\n        }\r\n\r\n        switch (_Uchar) {\r\n        case 'c': // ASCII control character\r\n        case 'd': // digit\r\n        case 'D':\r\n        case 's': // whitespace\r\n        case 'S':\r\n        case 'w': // word character\r\n        case 'W':\r\n            return false;\r\n        default:\r\n            return true;\r\n        }\r\n    }\r\n\r\n    if (static_cast<_Elem>(_Uchar) != _Char) {\r\n        return false;\r\n    }\r\n\r\n    switch (_Uchar) {\r\n    case _Meta_esc:\r\n        // BRE, ERE, awk identity escape characters (anywhere in awk)\r\n        return true;\r\n    case _Meta_dot:\r\n    case _Meta_lsq:\r\n    case _Meta_rsq:\r\n    case _Meta_star:\r\n    case _Meta_caret:\r\n    case _Meta_dlr:\r\n        // BRE, ERE, awk identity escape characters (outside character classes only)\r\n        return !_In_character_class;\r\n    case _Meta_lpar:\r\n    case _Meta_rpar:\r\n    case _Meta_bar:\r\n    case _Meta_plus:\r\n    case _Meta_query:\r\n    case _Meta_lbr:\r\n    case _Meta_rbr:\r\n        // additional ERE identity escape characters (outside character classes only)\r\n        return (_L_flags & _L_ident_ERE) != 0 && !_In_character_class;\r\n    case '\"':\r\n    case '/':\r\n        // additional awk identity escape characters (anywhere)\r\n        return (_L_flags & _L_ident_awk) != 0;\r\n    default:\r\n        return false;\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nbool _Parser2<_FwdIt, _Elem, _RxTraits>::_IdentityEscape(bool _In_character_class) {\r\n    // check whether an escape is valid, and process it if so\r\n    if (_IsIdentityEscape(_In_character_class)) {\r\n        _Unescaped_char = _Char;\r\n        _Next();\r\n        return true;\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nbool _Parser2<_FwdIt, _Elem, _RxTraits>::_Do_ffn(_Elem _Ch) { // check for limited file format escape characters\r\n    if (_Ch == static_cast<char>(_Esc_ctrl_f)) {\r\n        _Val = '\\f';\r\n    } else if (_Ch == static_cast<char>(_Esc_ctrl_n)) {\r\n        _Val = '\\n';\r\n    } else if (_Ch == static_cast<char>(_Esc_ctrl_r)) {\r\n        _Val = '\\r';\r\n    } else if (_Ch == static_cast<char>(_Esc_ctrl_t)) {\r\n        _Val = '\\t';\r\n    } else if (_Ch == static_cast<char>(_Esc_ctrl_v)) {\r\n        _Val = '\\v';\r\n    } else {\r\n        return false;\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nbool _Parser2<_FwdIt, _Elem, _RxTraits>::_Do_ffnx(_Elem _Ch) { // check for the remaining file format escape characters\r\n    if (_Ch == static_cast<char>(_Esc_ctrl_a)) {\r\n        _Val = '\\a';\r\n    } else if (_Ch == static_cast<char>(_Esc_ctrl_b)) {\r\n        _Val = '\\b';\r\n    } else {\r\n        return false;\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nbool _Parser2<_FwdIt, _Elem, _RxTraits>::_CharacterEscape(bool _In_character_class) {\r\n    // check for valid character escape\r\n    if (_Mchar == _Meta_eos) {\r\n        _Error(regex_constants::error_escape);\r\n    }\r\n\r\n    if ((_L_flags & _L_esc_ffn && _Do_ffn(_Char)) || (_L_flags & _L_esc_ffnx && _Do_ffnx(_Char))) {\r\n        _Next();\r\n    } else if (_Char == static_cast<char>(_Esc_ctrl) && (_L_flags & _L_esc_ctrl)) { // handle control escape sequence\r\n        _Next();\r\n\r\n        using _Char_traits_type = typename _RxTraits::string_type::traits_type;\r\n        if ((_Char_traits_type::lt(_Char, static_cast<_Elem>('a'))\r\n                || _Char_traits_type::lt(static_cast<_Elem>('z'), _Char))\r\n            && (_Char_traits_type::lt(_Char, static_cast<_Elem>('A'))\r\n                || _Char_traits_type::lt(static_cast<_Elem>('Z'), _Char))) {\r\n            _Error(regex_constants::error_escape);\r\n        }\r\n\r\n        _Val = static_cast<unsigned char>(_Char) % 32;\r\n        _Next();\r\n    } else if (_Char == static_cast<char>(_Esc_hex) && (_L_flags & _L_esc_hex)) { // handle hexadecimal escape sequence\r\n        _Next();\r\n        _HexDigits(2);\r\n    } else if (_Char == static_cast<char>(_Esc_uni) && (_L_flags & _L_esc_uni)) { // handle Unicode escape sequence\r\n        _Next();\r\n        _HexDigits(4);\r\n    } else if ((_L_flags & _L_esc_oct) && _OctalDigits()) { // handle octal escape sequence\r\n        if (_Val == 0) {\r\n            _Error(regex_constants::error_escape);\r\n        }\r\n    } else {\r\n        return _IdentityEscape(_In_character_class);\r\n    }\r\n\r\n    _Unescaped_char = static_cast<_Elem>(static_cast<unsigned int>(_Val));\r\n    int _Cast_val;\r\n    if constexpr (is_integral_v<_Elem> || is_enum_v<_Elem>) {\r\n        _Cast_val = static_cast<int>(static_cast<make_unsigned_t<_Elem>>(_Unescaped_char));\r\n    } else {\r\n        _Cast_val = static_cast<int>(static_cast<unsigned int>(_Unescaped_char));\r\n    }\r\n\r\n    if (_Cast_val != _Val) {\r\n        _Error(regex_constants::error_escape);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Parser2<_FwdIt, _Elem, _RxTraits>::_AtomEscape() { // check for valid atom escape\r\n    if ((_L_flags & (_L_bzr_chr | _L_bckr)) && (_Val = _Traits.value(_Char, 10)) != -1) { // escaped decimal sequence\r\n        _Next();\r\n        if ((_L_flags & _L_bzr_chr) && _Val == 0) { // handle \\0\r\n            if (_Traits.value(_Char, 10) != -1) {\r\n                _Error(regex_constants::error_escape);\r\n            }\r\n            _Nfa._Add_char(_Elem{});\r\n        } else if (_L_flags & _L_bckr) { // check for valid backreference\r\n            if (!(_L_flags & _L_lim_bckr)) {\r\n                (void) _DecimalDigits(regex_constants::error_backref, _Val);\r\n            }\r\n\r\n            if (_Val == 0) {\r\n                _Error(regex_constants::error_escape);\r\n            } else if (_Grp_idx < static_cast<size_t>(_Val) || _Finished_grps.size() <= static_cast<size_t>(_Val)\r\n                       || !_Finished_grps[static_cast<size_t>(_Val)]) {\r\n                _Error(regex_constants::error_backref);\r\n            } else {\r\n                _Nfa._Add_backreference(static_cast<size_t>(_Val));\r\n            }\r\n        }\r\n    } else if (_CharacterEscape(false)) {\r\n        _Nfa._Add_char(_Unescaped_char);\r\n    } else if (!(_L_flags & _L_esc_wsd) || !_CharacterClassEscape(true)) {\r\n        _Error(regex_constants::error_escape);\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Parser2<_FwdIt, _Elem, _RxTraits>::_Quantifier() { // check for quantifier following atom\r\n    int _Min = 0;\r\n    int _Max = -1;\r\n    if (_Mchar != _Meta_star) {\r\n        if (_Mchar == _Meta_plus) {\r\n            _Min = 1;\r\n        } else if (_Mchar == _Meta_query) {\r\n            _Max = 1;\r\n        } else if (_Mchar == _Meta_lbr) { // check for valid bracketed value\r\n            _Next();\r\n            if (!_DecimalDigits(regex_constants::error_badbrace)) {\r\n                _Error(regex_constants::error_badbrace);\r\n            }\r\n\r\n            _Min = _Val;\r\n            if (_Mchar != _Meta_comma) {\r\n                _Max = _Min;\r\n            } else { // check for decimal constant following comma\r\n                _Next();\r\n                if (_Mchar != _Meta_rbr) {\r\n                    if (!_DecimalDigits(regex_constants::error_badbrace)) {\r\n                        _Error(regex_constants::error_badbrace);\r\n                    }\r\n\r\n                    _Max = _Val;\r\n                }\r\n            }\r\n\r\n            if (_Mchar != _Meta_rbr || (_Max != -1 && _Max < _Min)) {\r\n                _Error(regex_constants::error_badbrace);\r\n            }\r\n        } else {\r\n            return;\r\n        }\r\n    }\r\n\r\n    _Next();\r\n    const bool _Greedy = !(_L_flags & _L_non_greedy) || _Mchar != _Meta_query;\r\n    if (!_Greedy) { // add non-greedy repeat node\r\n        _Next();\r\n    }\r\n\r\n    _Nfa._Add_rep(_Min, _Max, _Greedy);\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nbool _Parser2<_FwdIt, _Elem, _RxTraits>::_Alternative() { // check for valid alternative\r\n    bool _Found = false;\r\n    for (;;) { // concatenate valid elements\r\n        bool _Quant = true;\r\n        if (_Mchar == _Meta_eos || _Mchar == _Meta_bar || (_Mchar == _Meta_rpar && _Disj_count != 0)) {\r\n            return _Found;\r\n        } else if (_Mchar == _Meta_rpar && !(_L_flags & _L_paren_bal)) {\r\n            _Error(regex_constants::error_paren);\r\n        } else if (_Mchar == _Meta_dot) { // add dot node\r\n            _Nfa._Add_dot();\r\n            _Next();\r\n        } else if (_Mchar == _Meta_esc) { // check for valid escape sequence\r\n            _Next();\r\n            if ((_L_flags & _L_asrt_wrd) && _Char == static_cast<char>(_Esc_word)) { // add word assert\r\n                _Nfa._Add_wbound();\r\n                _Next();\r\n                _Quant = false;\r\n            } else if ((_L_flags & _L_asrt_wrd) && _Char == static_cast<char>(_Esc_not_word)) { // add not-word assert\r\n                _Nfa._Add_wbound();\r\n                _Nfa._Negate();\r\n                _Next();\r\n                _Quant = false;\r\n            } else {\r\n                _AtomEscape();\r\n            }\r\n        } else if (_Mchar == _Meta_lsq) { // add bracket expression\r\n            _Mode = _Lex_mode::_Character_class;\r\n            _Next();\r\n            _CharacterClass();\r\n            _Mode = _Lex_mode::_Default;\r\n            _Expect(_Meta_rsq, regex_constants::error_brack);\r\n        } else if (_Mchar == _Meta_lpar) { // check for valid group\r\n            _Next();\r\n            _Quant = _Wrapped_disjunction();\r\n            _Expect(_Meta_rpar, regex_constants::error_paren);\r\n        } else if (_Mchar == _Meta_caret && (!(_L_flags & _L_anch_rstr) || !_Found)) { // add bol node\r\n            _Nfa._Add_bol();\r\n            _Next();\r\n            if ((_L_flags & _L_star_beg) && _Mchar == _Meta_star && !_Found) {\r\n                _Nfa._Add_char(_Char);\r\n                _Next();\r\n            } else {\r\n                _Quant = false;\r\n            }\r\n        } else if (_Mchar == _Meta_dlr) { // add eol node\r\n            _Nfa._Add_eol();\r\n            _Next();\r\n            _Quant = false;\r\n        } else if ((_Mchar == _Meta_star && (!(_L_flags & _L_star_beg) || _Found)) || _Mchar == _Meta_plus\r\n                   || _Mchar == _Meta_query || _Mchar == _Meta_lbr) {\r\n            _Error(regex_constants::error_badrepeat);\r\n        } else if (_Mchar == _Meta_rbr && !(_L_flags & _L_paren_bal)) {\r\n            _Error(regex_constants::error_brace);\r\n        } else if (_Mchar == _Meta_rsq && !(_L_flags & _L_brk_bal)) {\r\n            _Error(regex_constants::error_brack);\r\n        } else { // add character\r\n            _Nfa._Add_char(_Char);\r\n            _Next();\r\n        }\r\n\r\n        if (_Quant) {\r\n            _Quantifier();\r\n        }\r\n\r\n        _Found = true;\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Parser2<_FwdIt, _Elem, _RxTraits>::_Disjunction() { // check for valid disjunction\r\n    _Node_base* _Pos1 = _Nfa._Getmark();\r\n    if (!_Alternative()) {\r\n        if (_Mchar != _Meta_bar) {\r\n            return; // zero-length alternative not followed by '|'\r\n        }\r\n\r\n        // zero-length leading alternative\r\n        _Node_base* _Pos3 = _Nfa._Begin_group();\r\n        _Nfa._End_group(_Pos3);\r\n    }\r\n\r\n    if (_Mchar == _Meta_bar) {\r\n        _Node_base* _Pos2 = _Nfa._Begin_if(_Pos1);\r\n        do { // append terms as long as we keep finding | characters\r\n            _Next();\r\n            if (!_Alternative()) { // zero-length trailing alternative\r\n                _Node_base* _Pos3 = _Nfa._Begin_group();\r\n                _Nfa._End_group(_Pos3);\r\n            }\r\n\r\n            _Nfa._Else_if(_Pos1, _Pos2);\r\n        } while (_Mchar == _Meta_bar);\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\nvoid _Parser2<_FwdIt, _Elem, _RxTraits>::_Calculate_loop_simplicity(\r\n    _Node_base* _Nx, _Node_base* _Ne, _Node_rep* _Outer_rep, const bool _Nonreentrant) {\r\n    // walks regex NFA, calculates values of _Node_rep::_Simple_loop\r\n    for (; _Nx != _Ne && _Nx; _Nx = _Nx->_Next) {\r\n        switch (_Nx->_Kind) {\r\n        case _N_if:\r\n            // _Node_if inside a _Node_rep makes the rep not simple\r\n            if (_Outer_rep) {\r\n                _Outer_rep->_Simple_loop = 0;\r\n                _Outer_rep->_Flags &= ~_Fl_rep_branchless;\r\n            }\r\n\r\n            // visit each branch of the if\r\n            for (_Node_if* _Branch = static_cast<_Node_if*>(_Nx)->_Child; _Branch; _Branch = _Branch->_Child) {\r\n                _Calculate_loop_simplicity(_Branch->_Next, _Branch->_Endif, _Outer_rep, _Nonreentrant);\r\n            }\r\n            break;\r\n\r\n        case _N_assert:\r\n            // A positive lookahead assertion inside a _Node_rep makes the rep not simple\r\n            if (_Outer_rep) {\r\n                _Outer_rep->_Simple_loop = 0;\r\n                _Outer_rep->_Flags &= ~_Fl_rep_branchless;\r\n            }\r\n            _FALLTHROUGH;\r\n\r\n        case _N_neg_assert:\r\n            // visit the assertion body\r\n            // note _Outer_rep being reset: the assertion regex is completely independent\r\n            _Calculate_loop_simplicity(static_cast<_Node_assert*>(_Nx)->_Child, nullptr, nullptr, true);\r\n            break;\r\n\r\n        case _N_rep:\r\n            // _Node_rep inside another _Node_rep makes both not simple if _Outer_rep can be repeated more than once\r\n            // because the matcher does not reset capture group boundaries when handling simple loops.\r\n            // If _Outer_rep can repeat at most once, we have to analyze the structure of the inner loop.\r\n            if (_Outer_rep) {\r\n                _Outer_rep->_Simple_loop = 0;\r\n                _Outer_rep->_Flags &= ~_Fl_rep_branchless;\r\n                auto _Inner_rep = static_cast<_Node_rep*>(_Nx);\r\n                _Inner_rep->_Flags |= _Fl_rep_branchless;\r\n                const bool _Inner_nonreentrant = _Outer_rep->_Max >= 0 && _Outer_rep->_Max <= 1 && _Nonreentrant;\r\n                if (!_Inner_nonreentrant) {\r\n                    _Inner_rep->_Simple_loop = 0;\r\n                }\r\n\r\n                _Calculate_loop_simplicity(\r\n                    _Inner_rep->_Next, _Inner_rep->_End_rep->_Next, _Inner_rep, _Inner_nonreentrant);\r\n                _Nx = _Inner_rep->_End_rep;\r\n            } else {\r\n                _Outer_rep = static_cast<_Node_rep*>(_Nx);\r\n                _Outer_rep->_Flags |= _Fl_rep_branchless;\r\n            }\r\n            break;\r\n\r\n        case _N_end_rep:\r\n            if (_Outer_rep == static_cast<_Node_end_rep*>(_Nx)->_Begin_rep) {\r\n                // if the _Node_rep is still undetermined when we reach its end, it is simple\r\n                _Analysis_assume_(_Outer_rep);\r\n                if (_Outer_rep->_Simple_loop == -1) {\r\n                    _Outer_rep->_Simple_loop = 1;\r\n                }\r\n                _Outer_rep = nullptr;\r\n            }\r\n            break;\r\n\r\n        case _N_class:\r\n            if (_Outer_rep) {\r\n                // _Node_rep is not simple if a class can match character sequences of different lengths\r\n                auto _Node = static_cast<const _Node_class<_Elem, _RxTraits>*>(_Nx);\r\n                bool _Coll_diff_size =\r\n                    _Node->_Coll\r\n                    && (_Node->_Small || _Node->_Large || _Node->_Ranges || _Node->_Classes || _Node->_Coll->_Next);\r\n                if (_Coll_diff_size || _Node->_Equiv\r\n                    || ((_Flags & regex_constants::collate) && (_Node->_Ranges || (_Node->_Flags & _Fl_negate)))) {\r\n                    _Outer_rep->_Simple_loop = 0;\r\n                    _Outer_rep->_Flags &= ~_Fl_rep_branchless;\r\n                }\r\n            }\r\n            break;\r\n\r\n        case _N_back:\r\n            if (_Outer_rep && !_Nonreentrant) {\r\n                // The content and thus length of a back-reference may change\r\n                // when a loop is reentered\r\n                _Outer_rep->_Flags &= ~_Fl_rep_branchless;\r\n            }\r\n            break;\r\n\r\n        case _N_group:\r\n        case _N_capture:\r\n        case _N_none:\r\n        case _N_nop:\r\n        case _N_bol:\r\n        case _N_eol:\r\n        case _N_wbound:\r\n        case _N_dot:\r\n        case _N_str:\r\n        case _N_end_group:\r\n        case _N_end_assert:\r\n        case _N_end_capture:\r\n        case _N_endif:\r\n        case _N_begin:\r\n        case _N_end:\r\n        default:\r\n            break;\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\n_Root_node* _Parser2<_FwdIt, _Elem, _RxTraits>::_Compile() { // compile regular expression\r\n    _Root_node* _Res = nullptr;\r\n    _Tidy_guard<decltype(_Nfa)> _Guard{_STD addressof(_Nfa)};\r\n    _Node_base* _Pos1 = _Nfa._Begin_capture_group(0);\r\n    _Disjunction();\r\n    _STL_INTERNAL_CHECK(_Pat == _End);\r\n\r\n    _Nfa._End_group(_Pos1);\r\n    _Res         = _Nfa._End_pattern();\r\n    _Res->_Fl    = _Flags;\r\n    _Res->_Marks = _Mark_count();\r\n    _Calculate_loop_simplicity(_Res, nullptr, nullptr, true);\r\n    _Guard._Target = nullptr;\r\n    return _Res;\r\n}\r\n\r\ntemplate <class _FwdIt, class _Elem, class _RxTraits>\r\n_Parser2<_FwdIt, _Elem, _RxTraits>::_Parser2(\r\n    const _RxTraits& _Tr, _FwdIt _Pfirst, _FwdIt _Plast, regex_constants::syntax_option_type _Fx)\r\n    : _Pat(_Pfirst), _End(_Plast), _Nfa(_Tr, _Fx), _Traits(_Tr), _Flags(_Fx) {\r\n\r\n    constexpr unsigned long long _ECMA_flags = _L_ext_rep | _L_alt_pipe | _L_nex_grp | _L_nex_rep | _L_nc_asrt\r\n                                             | _L_asrt_wrd | _L_bckr | _L_non_greedy | _L_esc_uni | _L_esc_hex\r\n                                             | _L_esc_bsp | _L_esc_ffn | _L_esc_wsd | _L_esc_ctrl | _L_bzr_chr\r\n                                             | _L_grp_esc | _L_ident_ECMA | _L_empty_grp;\r\n\r\n    constexpr unsigned long long _Basic_flags = _L_bckr | _L_lim_bckr | _L_anch_rstr | _L_star_beg | _L_empty_grp\r\n                                              | _L_brk_bal | _L_brk_rstr | _L_dsh_rstr | _L_mtch_long;\r\n\r\n    constexpr unsigned long long _Grep_flags = _Basic_flags | _L_alt_nl | _L_no_nl;\r\n\r\n    constexpr unsigned long long _Extended_flags = _L_ext_rep | _L_alt_pipe | _L_nex_grp | _L_nex_rep | _L_ident_ERE\r\n                                                 | _L_paren_bal | _L_brk_bal | _L_brk_rstr | _L_dsh_rstr | _L_mtch_long;\r\n\r\n    constexpr unsigned long long _Awk_flags =\r\n        _Extended_flags | _L_esc_oct | _L_esc_ffn | _L_esc_ffnx | _L_grp_esc | _L_ident_awk;\r\n\r\n    constexpr unsigned long long _Egrep_flags = _Extended_flags | _L_alt_nl | _L_no_nl;\r\n\r\n    const regex_constants::syntax_option_type _Masked = _Flags & regex_constants::_Gmask;\r\n\r\n    if (_Masked == regex_constants::ECMAScript || _Masked == 0) {\r\n        _L_flags = _ECMA_flags;\r\n    } else if (_Masked == regex_constants::basic) {\r\n        _L_flags = _Basic_flags;\r\n    } else if (_Masked == regex_constants::extended) {\r\n        _L_flags = _Extended_flags;\r\n    } else if (_Masked == regex_constants::awk) {\r\n        _L_flags = _Awk_flags;\r\n    } else if (_Masked == regex_constants::grep) {\r\n        _L_flags = _Grep_flags;\r\n    } else if (_Masked == regex_constants::egrep) {\r\n        _L_flags = _Egrep_flags;\r\n    } else {\r\n        _L_flags = 0;\r\n    }\r\n\r\n    if (_L_flags & _L_mtch_long) {\r\n        _Nfa._Setlong();\r\n    }\r\n\r\n    _Trans();\r\n}\r\n\r\n#if _HAS_CXX17\r\nnamespace pmr {\r\n    _EXPORT_STD template <class _BidIt>\r\n    using match_results = _STD match_results<_BidIt, polymorphic_allocator<sub_match<_BidIt>>>;\r\n\r\n    _EXPORT_STD using cmatch  = match_results<const char*>;\r\n    _EXPORT_STD using wcmatch = match_results<const wchar_t*>;\r\n    _EXPORT_STD using smatch  = match_results<string::const_iterator>;\r\n    _EXPORT_STD using wsmatch = match_results<wstring::const_iterator>;\r\n} // namespace pmr\r\n#endif // _HAS_CXX17\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _REGEX_\r\n"
  },
  {
    "path": "stl/inc/scoped_allocator",
    "content": "// scoped_allocator standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _SCOPED_ALLOCATOR_\r\n#define _SCOPED_ALLOCATOR_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <xpolymorphic_allocator.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\ntemplate <class _Alloc, class = void>\r\nstruct _Scoped_outermost_helper { // gets the outermost allocator\r\n    static decltype(auto) _Fn(_Alloc& _Al) { // gets the outermost allocator\r\n        return _Al;\r\n    }\r\n};\r\n\r\ntemplate <class _Alloc>\r\nstruct _Scoped_outermost_helper<_Alloc,\r\n    void_t<decltype(_STD declval<_Alloc&>().outer_allocator())>> { // gets the outermost allocator\r\n    using _Outer_alloc = decltype(_STD declval<_Alloc&>().outer_allocator());\r\n\r\n    static decltype(auto) _Fn(_Alloc& _Al) { // gets the outermost allocator\r\n        return _Scoped_outermost_helper<_Outer_alloc>::_Fn(_Al.outer_allocator());\r\n    }\r\n};\r\n\r\ntemplate <class _Alloc>\r\ndecltype(auto) _Scoped_outermost(_Alloc& _Al) { // gets the outermost allocator\r\n    return _Scoped_outermost_helper<_Alloc>::_Fn(_Al);\r\n}\r\n\r\ntemplate <class _Alloc>\r\nusing _Scoped_outermost_t = remove_reference_t<decltype(_STD _Scoped_outermost(_STD declval<_Alloc&>()))>;\r\n\r\ntemplate <class _Alloc>\r\nusing _Scoped_outermost_traits = allocator_traits<_Scoped_outermost_t<_Alloc>>;\r\n\r\n_EXPORT_STD template <class _Outer, class... _Inner>\r\nclass scoped_allocator_adaptor;\r\n\r\ntemplate <class _Outer, class... _Inner>\r\nstruct _Scoped_base;\r\n\r\nstruct _Secret_scoped_allocator_construct_tag {\r\n    explicit _Secret_scoped_allocator_construct_tag() = default;\r\n};\r\n\r\ntemplate <class _Outer, class _Inner0, class... _Inner>\r\nstruct _Scoped_base<_Outer, _Inner0, _Inner...> : _Outer { // nest of allocators, arbitrary depth\r\n    using _Myadaptor           = scoped_allocator_adaptor<_Outer, _Inner0, _Inner...>;\r\n    using inner_allocator_type = scoped_allocator_adaptor<_Inner0, _Inner...>;\r\n\r\n    inner_allocator_type _Inner_obj;\r\n\r\n    inner_allocator_type& _Get_inner_object(_Myadaptor&) {\r\n        return _Inner_obj;\r\n    }\r\n\r\n    const inner_allocator_type& _Get_inner_object(const _Myadaptor&) const {\r\n        return _Inner_obj;\r\n    }\r\n\r\n    _Scoped_base() : _Outer(), _Inner_obj() {} // value-initialize Outer and Inner\r\n\r\n    template <class _Other1, class... _Other2,\r\n        enable_if_t<sizeof...(_Other2) != 0 || !is_base_of_v<_Scoped_base, decay_t<_Other1>>, int> = 0>\r\n    _Scoped_base(_Other1&& _Outer_arg, _Other2&&... _Inner_args)\r\n        : _Outer(_STD forward<_Other1>(_Outer_arg)), _Inner_obj(_STD forward<_Other2>(_Inner_args)...) {\r\n        // also handles rebinding\r\n    }\r\n\r\n    _Scoped_base(const _Scoped_base&)            = default;\r\n    _Scoped_base(_Scoped_base&&)                 = default;\r\n    _Scoped_base& operator=(const _Scoped_base&) = default;\r\n    _Scoped_base& operator=(_Scoped_base&&)      = default;\r\n\r\n    _NODISCARD _Myadaptor select_on_container_copy_construction() const { // make new adaptor\r\n        return _Myadaptor(_Secret_scoped_allocator_construct_tag{},\r\n            allocator_traits<_Outer>::select_on_container_copy_construction(static_cast<const _Outer&>(*this)),\r\n            _Inner_obj.select_on_container_copy_construction());\r\n    }\r\n};\r\n\r\ntemplate <class _Outer>\r\nstruct _Scoped_base<_Outer> : _Outer { // nest of allocators, one deep\r\n    using _Myadaptor           = scoped_allocator_adaptor<_Outer>;\r\n    using inner_allocator_type = scoped_allocator_adaptor<_Outer>;\r\n\r\n    inner_allocator_type& _Get_inner_object(_Myadaptor& _Self) {\r\n        return _Self;\r\n    }\r\n\r\n    const inner_allocator_type& _Get_inner_object(const _Myadaptor& _Self) const {\r\n        return _Self;\r\n    }\r\n\r\n    _Scoped_base() : _Outer() {} // value-initialize\r\n\r\n    template <class _Other1, enable_if_t<!is_base_of_v<_Scoped_base, decay_t<_Other1>>, int> = 0>\r\n    _Scoped_base(_Other1&& _Outer_arg) : _Outer(_STD forward<_Other1>(_Outer_arg)) {} // also handles rebinding\r\n\r\n    _Scoped_base(const _Scoped_base&)            = default;\r\n    _Scoped_base(_Scoped_base&&)                 = default;\r\n    _Scoped_base& operator=(const _Scoped_base&) = default;\r\n    _Scoped_base& operator=(_Scoped_base&&)      = default;\r\n\r\n    _NODISCARD _Myadaptor select_on_container_copy_construction() const { // make new adaptor\r\n        return _Myadaptor(\r\n            allocator_traits<_Outer>::select_on_container_copy_construction(static_cast<const _Outer&>(*this)));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Outer, class... _Inner>\r\nclass scoped_allocator_adaptor : public _Scoped_base<_Outer, _Inner...> { // nest of allocators\r\nprivate:\r\n    using _Mybase       = _Scoped_base<_Outer, _Inner...>;\r\n    using _Outer_traits = allocator_traits<_Outer>;\r\n\r\npublic:\r\n    using outer_allocator_type = _Outer;\r\n    using inner_allocator_type = typename _Mybase::inner_allocator_type;\r\n\r\n    using value_type         = typename _Outer_traits::value_type;\r\n    using pointer            = typename _Outer_traits::pointer;\r\n    using const_pointer      = typename _Outer_traits::const_pointer;\r\n    using void_pointer       = typename _Outer_traits::void_pointer;\r\n    using const_void_pointer = typename _Outer_traits::const_void_pointer;\r\n\r\n    using size_type       = typename _Outer_traits::size_type;\r\n    using difference_type = typename _Outer_traits::difference_type;\r\n\r\n    template <class _Other>\r\n    struct _NO_SPECIALIZATIONS_OF_MEMBER_CLASS_TEMPLATES rebind { // converts X<value_type> to X<_Other>\r\n        using _Other_alloc = typename _Get_rebind_type<_Outer, _Other>::type;\r\n        using other        = scoped_allocator_adaptor<_Other_alloc, _Inner...>;\r\n    };\r\n\r\n    using propagate_on_container_copy_assignment =\r\n        bool_constant<disjunction_v<typename allocator_traits<_Outer>::propagate_on_container_copy_assignment,\r\n            typename allocator_traits<_Inner>::propagate_on_container_copy_assignment...>>;\r\n\r\n    using propagate_on_container_move_assignment =\r\n        bool_constant<disjunction_v<typename allocator_traits<_Outer>::propagate_on_container_move_assignment,\r\n            typename allocator_traits<_Inner>::propagate_on_container_move_assignment...>>;\r\n\r\n    using propagate_on_container_swap =\r\n        bool_constant<disjunction_v<typename allocator_traits<_Outer>::propagate_on_container_swap,\r\n            typename allocator_traits<_Inner>::propagate_on_container_swap...>>;\r\n\r\n    using is_always_equal = bool_constant<conjunction_v<typename allocator_traits<_Outer>::is_always_equal,\r\n        typename allocator_traits<_Inner>::is_always_equal...>>;\r\n\r\n    scoped_allocator_adaptor() = default; // value-init handled in _Scoped_base\r\n\r\n    template <class _Other, enable_if_t<is_constructible_v<_Outer, _Other>, int> = 0>\r\n    scoped_allocator_adaptor(_Other&& _Other_arg, const _Inner&... _Inner_args) noexcept\r\n        : _Mybase(_STD forward<_Other>(_Other_arg), _Inner_args...) {\r\n        // also handles rebinding construction when sizeof...(_Inner) == 0\r\n    }\r\n\r\n    scoped_allocator_adaptor(const scoped_allocator_adaptor& _Right) noexcept : _Mybase(_Right) {}\r\n\r\n    scoped_allocator_adaptor(scoped_allocator_adaptor&& _Right) noexcept : _Mybase(_STD move(_Right)) {}\r\n\r\n    template <class _Other, bool _Enabled = sizeof...(_Inner) != 0 && is_constructible_v<_Outer, const _Other&>,\r\n        enable_if_t<_Enabled, int> = 0>\r\n    scoped_allocator_adaptor(const scoped_allocator_adaptor<_Other, _Inner...>& _Right) noexcept\r\n        : _Mybase(_Right.outer_allocator(), _Right.inner_allocator()) {}\r\n\r\n    template <class _Other, bool _Enabled = sizeof...(_Inner) != 0 && is_constructible_v<_Outer, _Other>,\r\n        enable_if_t<_Enabled, int> = 0>\r\n    scoped_allocator_adaptor(scoped_allocator_adaptor<_Other, _Inner...>&& _Right) noexcept\r\n        : _Mybase(_STD move(_Right.outer_allocator()), _STD move(_Right.inner_allocator())) {}\r\n\r\n    scoped_allocator_adaptor(_Secret_scoped_allocator_construct_tag, const outer_allocator_type& _Outer_arg,\r\n        const inner_allocator_type& _Inner_arg) noexcept\r\n        : _Mybase(_Outer_arg, _Inner_arg) {}\r\n\r\n    scoped_allocator_adaptor& operator=(const scoped_allocator_adaptor&) = default;\r\n    scoped_allocator_adaptor& operator=(scoped_allocator_adaptor&&)      = default;\r\n\r\n    _NODISCARD inner_allocator_type& inner_allocator() noexcept { // get reference to inner allocator\r\n        return this->_Get_inner_object(*this);\r\n    }\r\n\r\n    _NODISCARD const inner_allocator_type& inner_allocator() const noexcept { // get reference to inner allocator\r\n        return this->_Get_inner_object(*this);\r\n    }\r\n\r\n    _NODISCARD outer_allocator_type& outer_allocator() noexcept { // get reference to outer allocator\r\n        return static_cast<_Outer&>(*this);\r\n    }\r\n\r\n    _NODISCARD const outer_allocator_type& outer_allocator() const noexcept { // get reference to outer allocator\r\n        return static_cast<const _Outer&>(*this);\r\n    }\r\n\r\n    _NODISCARD_RAW_PTR_ALLOC __declspec(allocator) pointer allocate(_CRT_GUARDOVERFLOW size_type _Count) {\r\n        // allocate array of _Count elements, ignore hint\r\n        return _Outer_traits::allocate(outer_allocator(), _Count);\r\n    }\r\n\r\n    _NODISCARD_RAW_PTR_ALLOC __declspec(allocator) pointer allocate(\r\n        _CRT_GUARDOVERFLOW size_type _Count, const_void_pointer _Hint) { // allocate array of _Count elements, with hint\r\n        return _Outer_traits::allocate(outer_allocator(), _Count, _Hint);\r\n    }\r\n\r\n    void deallocate(pointer _Ptr, size_type _Count) { // deallocate object at _Ptr, with size\r\n        return _Outer_traits::deallocate(outer_allocator(), _Ptr, _Count);\r\n    }\r\n\r\n    _NODISCARD size_type max_size() const { // estimate maximum array size\r\n        return _Outer_traits::max_size(outer_allocator());\r\n    }\r\n\r\n    template <class _Ty, class... _Types>\r\n    void construct(_Ty* _Ptr, _Types&&... _Args) { // construct with varying allocator styles\r\n#if _HAS_CXX20\r\n        _STD apply(\r\n            [_Ptr, this](auto&&... _New_args) {\r\n                _Scoped_outermost_traits<scoped_allocator_adaptor>::construct(\r\n                    _STD _Scoped_outermost(*this), _Ptr, _STD forward<decltype(_New_args)>(_New_args)...);\r\n            },\r\n            _STD uses_allocator_construction_args<_Ty>(inner_allocator(), _STD forward<_Types>(_Args)...));\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n        if constexpr (_Is_cv_pair<_Ty>) {\r\n            _STD _Uses_alloc_construct_pair(\r\n                _Ptr, _STD _Scoped_outermost(*this), inner_allocator(), _STD forward<_Types>(_Args)...);\r\n        } else {\r\n            _STD _Uses_alloc_construct_non_pair(\r\n                _Ptr, _STD _Scoped_outermost(*this), inner_allocator(), _STD forward<_Types>(_Args)...);\r\n        }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n    }\r\n\r\n    template <class _Ty>\r\n    void destroy(_Ty* _Ptr) { // destroy object at _Ptr\r\n        _Scoped_outermost_traits<scoped_allocator_adaptor>::destroy(_STD _Scoped_outermost(*this), _Ptr);\r\n    }\r\n\r\n    // select_on_container_copy_construction comes from _Scoped_base\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Outer, class... _Inner>\r\nscoped_allocator_adaptor(_Outer, _Inner...) -> scoped_allocator_adaptor<_Outer, _Inner...>;\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Outer1, class _Outer2, class... _Inner>\r\n_NODISCARD bool operator==(const scoped_allocator_adaptor<_Outer1, _Inner...>& _Left,\r\n    const scoped_allocator_adaptor<_Outer2, _Inner...>& _Right) noexcept {\r\n    if constexpr (sizeof...(_Inner) == 0) {\r\n        return _Left.outer_allocator() == _Right.outer_allocator();\r\n    } else {\r\n        return _Left.outer_allocator() == _Right.outer_allocator()\r\n            && _Left.inner_allocator() == _Right.inner_allocator();\r\n    }\r\n}\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _Outer1, class _Outer2, class... _Inner>\r\n_NODISCARD bool operator!=(const scoped_allocator_adaptor<_Outer1, _Inner...>& _Left,\r\n    const scoped_allocator_adaptor<_Outer2, _Inner...>& _Right) noexcept {\r\n    return !(_Left == _Right);\r\n}\r\n#endif // !_HAS_CXX20\r\n\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _SCOPED_ALLOCATOR_\r\n"
  },
  {
    "path": "stl/inc/semaphore",
    "content": "// semaphore standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _SEMAPHORE_\r\n#define _SEMAPHORE_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#ifdef _M_CEE_PURE\r\n#error <semaphore> is not supported when compiling with /clr:pure.\r\n#endif // defined(_M_CEE_PURE)\r\n\r\n#if !_HAS_CXX20\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <semaphore> are available only with C++20 or later.\");\r\n#else // ^^^ !_HAS_CXX20 / _HAS_CXX20 vvv\r\n\r\n#include <__msvc_chrono.hpp>\r\n#include <atomic>\r\n#include <climits>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\ntemplate <class _Clock, class _Duration>\r\n_NODISCARD unsigned long _Semaphore_remaining_timeout(const chrono::time_point<_Clock, _Duration>& _Abs_time) {\r\n    const auto _Now = _Clock::now();\r\n    if (_Now >= _Abs_time) {\r\n        return 0;\r\n    }\r\n\r\n    const auto _Rel_time = chrono::ceil<chrono::milliseconds>(_Abs_time - _Now);\r\n    constexpr chrono::milliseconds _Ten_days{chrono::hours{24 * 10}};\r\n    _STL_INTERNAL_STATIC_ASSERT(_STD in_range<unsigned long>(_Ten_days.count()));\r\n    if (_Rel_time >= _Ten_days) {\r\n        return static_cast<unsigned long>(_Ten_days.count());\r\n    }\r\n\r\n    return static_cast<unsigned long>(_Rel_time.count());\r\n}\r\n\r\ninline constexpr ptrdiff_t _Semaphore_max = PTRDIFF_MAX;\r\n\r\n_EXPORT_STD template <ptrdiff_t _Least_max_value = _Semaphore_max>\r\nclass counting_semaphore {\r\npublic:\r\n    static_assert(_Least_max_value >= 0,\r\n        \"The least maximum value for a counting_semaphore must be nonnegative (N4950 [thread.sema.cnt]/2).\");\r\n\r\n    _NODISCARD static constexpr ptrdiff_t(max)() noexcept {\r\n        return _Least_max_value;\r\n    }\r\n\r\n    constexpr explicit counting_semaphore(const ptrdiff_t _Desired) noexcept /* strengthened */\r\n        : _Counter(_Desired) {\r\n        _STL_VERIFY(_Desired >= 0 && _Desired <= _Least_max_value,\r\n            \"Precondition: desired >= 0, and desired <= max() (N4950 [thread.sema.cnt]/5)\");\r\n    }\r\n\r\n    counting_semaphore(const counting_semaphore&)            = delete;\r\n    counting_semaphore& operator=(const counting_semaphore&) = delete;\r\n\r\n    void release(ptrdiff_t _Update = 1) noexcept /* strengthened */ {\r\n        if (_Update == 0) {\r\n            return;\r\n        }\r\n        _STL_VERIFY(_Update > 0 && _Update <= _Least_max_value,\r\n            \"Precondition: update >= 0, and update <= max() - counter (N4950 [thread.sema.cnt]/8)\");\r\n\r\n        // We need to notify (wake) at least _Update waiting threads.\r\n        // Errors towards waking more cannot be always avoided, but they are performance issues.\r\n        // Errors towards waking fewer must be avoided, as they are correctness issues.\r\n\r\n        // release thread: Increment semaphore counter, then load waiting counter;\r\n        // acquire thread: Increment waiting counter, then load semaphore counter;\r\n\r\n        // memory_order_seq_cst for all four operations guarantees that the release thread loads\r\n        // the incremented value, or the acquire thread loads the incremented value, or both, but not neither.\r\n        // memory_order_seq_cst might be superfluous for some hardware mappings of the C++ memory model,\r\n        // but from the point of view of the C++ memory model itself it is needed; weaker orders don't work.\r\n\r\n        const ptrdiff_t _Prev = _Counter.fetch_add(_Update);\r\n        _STL_VERIFY(_Prev >= 0 && _Update <= _Least_max_value - _Prev,\r\n            \"Precondition: update <= max() - counter (N4950 [thread.sema.cnt]/8)\");\r\n\r\n        const ptrdiff_t _Waiting_upper_bound = _Waiting.load();\r\n\r\n        if (_Waiting_upper_bound == 0) {\r\n            // Definitely no one is waiting\r\n        } else if (_Waiting_upper_bound <= _Update) {\r\n            // No more waiting threads than update, can wake everyone.\r\n            _Counter.notify_all();\r\n        } else {\r\n            // Wake at most _Update. Though repeated notify_one() is somewhat less efficient than single notify_all(),\r\n            // the amount of OS calls is still the same; the benefit from trying not to wake unnecessary threads\r\n            // is expected to be greater than the loss on extra calls and atomic operations.\r\n            for (; _Update != 0; --_Update) {\r\n                _Counter.notify_one();\r\n            }\r\n        }\r\n    }\r\n\r\n    void acquire() noexcept /* strengthened */ {\r\n        ptrdiff_t _Current = _Counter.load(memory_order_relaxed);\r\n        for (;;) {\r\n            while (_Current == 0) {\r\n                _Wait(__std_atomic_wait_no_timeout);\r\n                _Current = _Counter.load(memory_order_relaxed);\r\n            }\r\n            _STL_VERIFY(_Current > 0 && _Current <= _Least_max_value,\r\n                \"Invariant: counter >= 0, and counter <= max() \"\r\n                \"possibly caused by preconditions violation (N4950 [thread.sema.cnt]/8)\");\r\n\r\n            // \"happens after release\" ordering is provided by this CAS, so loads and waits can be relaxed\r\n            if (_Counter.compare_exchange_weak(_Current, _Current - 1)) {\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_acquire() noexcept {\r\n        ptrdiff_t _Current = _Counter.load();\r\n        if (_Current == 0) {\r\n            return false;\r\n        }\r\n        _STL_VERIFY(_Current > 0 && _Current <= _Least_max_value,\r\n            \"Invariant: counter >= 0, and counter <= max() \"\r\n            \"possibly caused by preconditions violation (N4950 [thread.sema.cnt]/8)\");\r\n\r\n        return _Counter.compare_exchange_weak(_Current, _Current - 1);\r\n    }\r\n\r\n    template <class _Rep, class _Period>\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_acquire_for(const chrono::duration<_Rep, _Period>& _Rel_time) {\r\n        auto _Deadline     = _STD chrono::steady_clock::now() + _Rel_time;\r\n        ptrdiff_t _Current = _Counter.load(memory_order_relaxed);\r\n        for (;;) {\r\n            while (_Current == 0) {\r\n                const auto _Remaining_timeout = _Semaphore_remaining_timeout(_Deadline);\r\n                if (_Remaining_timeout == 0) {\r\n                    return false;\r\n                }\r\n                _Wait(_Remaining_timeout);\r\n                _Current = _Counter.load(memory_order_relaxed);\r\n            }\r\n            _STL_VERIFY(_Current > 0 && _Current <= _Least_max_value,\r\n                \"Invariant: counter >= 0, and counter <= max() \"\r\n                \"possibly caused by preconditions violation (N4950 [thread.sema.cnt]/8)\");\r\n\r\n            // \"happens after release\" ordering is provided by this CAS, so loads and waits can be relaxed\r\n            if (_Counter.compare_exchange_weak(_Current, _Current - 1)) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n\r\n    template <class _Clock, class _Duration>\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_acquire_until(const chrono::time_point<_Clock, _Duration>& _Abs_time) {\r\n        static_assert(chrono::is_clock_v<_Clock>, \"Clock type required\");\r\n        ptrdiff_t _Current = _Counter.load(memory_order_relaxed);\r\n        for (;;) {\r\n            while (_Current == 0) {\r\n                const unsigned long _Remaining_timeout = _Semaphore_remaining_timeout(_Abs_time);\r\n                if (_Remaining_timeout == 0) {\r\n                    return false;\r\n                }\r\n                _Wait(_Remaining_timeout);\r\n                _Current = _Counter.load(memory_order_relaxed);\r\n            }\r\n            _STL_VERIFY(_Current > 0 && _Current <= _Least_max_value,\r\n                \"Invariant: counter >= 0, and counter <= max() \"\r\n                \"possibly caused by preconditions violation (N4950 [thread.sema.cnt]/8)\");\r\n\r\n            // \"happens after release\" ordering is provided by this CAS, so loads and waits can be relaxed\r\n            if (_Counter.compare_exchange_weak(_Current, _Current - 1)) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n\r\nprivate:\r\n    void _Wait(const unsigned long _Remaining_timeout) noexcept {\r\n        // See the comment in release()\r\n        _Waiting.fetch_add(1);\r\n        ptrdiff_t _Current = _Counter.load();\r\n        if (_Current == 0) {\r\n            __std_atomic_wait_direct(&_Counter, &_Current, sizeof(_Current), _Remaining_timeout);\r\n        }\r\n        _Waiting.fetch_sub(1, memory_order_relaxed);\r\n    }\r\n\r\n    atomic<ptrdiff_t> _Counter;\r\n    atomic<ptrdiff_t> _Waiting;\r\n};\r\n\r\ntemplate <>\r\nclass counting_semaphore<1> {\r\npublic:\r\n    _NODISCARD static constexpr ptrdiff_t(max)() noexcept {\r\n        return 1;\r\n    }\r\n\r\n    constexpr explicit counting_semaphore(const ptrdiff_t _Desired) noexcept /* strengthened */\r\n        : _Counter(static_cast<unsigned char>(_Desired)) {\r\n        _STL_VERIFY((_Desired & ~1) == 0, \"Precondition: desired >= 0, and desired <= max() \"\r\n                                          \"(N4950 [thread.sema.cnt]/5)\");\r\n    }\r\n\r\n    counting_semaphore(const counting_semaphore&)            = delete;\r\n    counting_semaphore& operator=(const counting_semaphore&) = delete;\r\n\r\n    void release(const ptrdiff_t _Update = 1) noexcept /* strengthened */ {\r\n        if (_Update == 0) {\r\n            return;\r\n        }\r\n        _STL_VERIFY(_Update == 1, \"Precondition: update >= 0, \"\r\n                                  \"and update <= max() - counter (N4950 [thread.sema.cnt]/8)\");\r\n        // TRANSITION, GH-1133: should be memory_order_release\r\n        _Counter.store(1);\r\n        _Counter.notify_one();\r\n    }\r\n\r\n    void acquire() noexcept /* strengthened */ {\r\n        for (;;) {\r\n            // \"happens after release\" ordering is provided by this exchange, so loads and waits can be relaxed\r\n            // TRANSITION, GH-1133: should be memory_order_acquire\r\n            unsigned char _Prev = _Counter.exchange(0);\r\n            if (_Prev == 1) {\r\n                break;\r\n            }\r\n            _STL_VERIFY(_Prev == 0, \"Invariant: semaphore counter is non-negative and doesn't exceed max(), \"\r\n                                    \"possibly caused by memory corruption\");\r\n            _Counter.wait(0, memory_order_relaxed);\r\n        }\r\n    }\r\n\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_acquire() noexcept {\r\n        // TRANSITION, GH-1133: should be memory_order_acquire\r\n        unsigned char _Prev = _Counter.exchange(0);\r\n        _STL_VERIFY((_Prev & ~1) == 0, \"Invariant: semaphore counter is non-negative and doesn't exceed max(), \"\r\n                                       \"possibly caused by memory corruption\");\r\n        return reinterpret_cast<const bool&>(_Prev);\r\n    }\r\n\r\n    template <class _Rep, class _Period>\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_acquire_for(const chrono::duration<_Rep, _Period>& _Rel_time) {\r\n        auto _Deadline = _STD chrono::steady_clock::now() + _Rel_time;\r\n        for (;;) {\r\n            // \"happens after release\" ordering is provided by this exchange, so loads and waits can be relaxed\r\n            // TRANSITION, GH-1133: should be memory_order_acquire\r\n            unsigned char _Prev = _Counter.exchange(0);\r\n            if (_Prev == 1) {\r\n                return true;\r\n            }\r\n            _STL_VERIFY(_Prev == 0, \"Invariant: semaphore counter is non-negative and doesn't exceed max(), \"\r\n                                    \"possibly caused by memory corruption\");\r\n            const auto _Remaining_timeout = _Semaphore_remaining_timeout(_Deadline);\r\n            if (_Remaining_timeout == 0) {\r\n                return false;\r\n            }\r\n            __std_atomic_wait_direct(&_Counter, &_Prev, sizeof(_Prev), _Remaining_timeout);\r\n        }\r\n    }\r\n\r\n    template <class _Clock, class _Duration>\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_acquire_until(const chrono::time_point<_Clock, _Duration>& _Abs_time) {\r\n        static_assert(chrono::is_clock_v<_Clock>, \"Clock type required\");\r\n        for (;;) {\r\n            // \"happens after release\" ordering is provided by this exchange, so loads and waits can be relaxed\r\n            // TRANSITION, GH-1133: should be memory_order_acquire\r\n            unsigned char _Prev = _Counter.exchange(0);\r\n            if (_Prev == 1) {\r\n                return true;\r\n            }\r\n            _STL_VERIFY(_Prev == 0, \"Invariant: semaphore counter is non-negative and doesn't exceed max(), \"\r\n                                    \"possibly caused by memory corruption\");\r\n\r\n            const unsigned long _Remaining_timeout = _Semaphore_remaining_timeout(_Abs_time);\r\n            if (_Remaining_timeout == 0) {\r\n                return false;\r\n            }\r\n\r\n            __std_atomic_wait_direct(&_Counter, &_Prev, sizeof(_Prev), _Remaining_timeout);\r\n        }\r\n    }\r\n\r\nprivate:\r\n    atomic<unsigned char> _Counter;\r\n};\r\n\r\n_EXPORT_STD using binary_semaphore = counting_semaphore<1>;\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _SEMAPHORE_\r\n"
  },
  {
    "path": "stl/inc/set",
    "content": "// set standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _SET_\r\n#define _SET_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <xtree>\r\n\r\n#if _HAS_CXX17\r\n#include <xpolymorphic_allocator.h>\r\n#endif // _HAS_CXX17\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n_STD_BEGIN\r\ntemplate <class _Kty, // key/value type\r\n    class _Pr, // comparator predicate type\r\n    class _Alloc, // actual allocator type (should be value allocator)\r\n    bool _Mfl> // true if multiple equivalent keys are permitted\r\nclass _Tset_traits { // traits required to make _Tree behave like a set\r\npublic:\r\n    using key_type       = _Kty;\r\n    using value_type     = _Kty;\r\n    using key_compare    = _Pr;\r\n    using allocator_type = _Alloc;\r\n#if _HAS_CXX17\r\n    using node_type = _Node_handle<_Tree_node<value_type, typename allocator_traits<_Alloc>::void_pointer>, _Alloc,\r\n        _Node_handle_set_base, _Kty>;\r\n#endif // _HAS_CXX17\r\n\r\n    static constexpr bool _Multi = _Mfl;\r\n\r\n    template <class... _Args>\r\n    using _In_place_key_extractor = _In_place_key_extract_set<_Kty, _Args...>;\r\n\r\n    using value_compare = key_compare;\r\n\r\n    static const _Kty& _Kfn(const value_type& _Val) { // extract key from element value\r\n        return _Val;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Kty, class _Pr = less<_Kty>, class _Alloc = allocator<_Kty>>\r\nclass set : public _Tree<_Tset_traits<_Kty, _Pr, _Alloc, false>> {\r\n    // ordered red-black tree of key values, unique keys\r\npublic:\r\n    static_assert(!_ENFORCE_MATCHING_ALLOCATORS || is_same_v<_Kty, typename _Alloc::value_type>,\r\n        _MISMATCHED_ALLOCATOR_MESSAGE(\"set<T, Compare, Allocator>\", \"T\"));\r\n    static_assert(is_object_v<_Kty>, \"The C++ Standard forbids containers of non-object types \"\r\n                                     \"because of [container.requirements].\");\r\n\r\n    using _Mybase                = _Tree<_Tset_traits<_Kty, _Pr, _Alloc, false>>;\r\n    using key_type               = _Kty;\r\n    using key_compare            = _Pr;\r\n    using value_compare          = typename _Mybase::value_compare;\r\n    using value_type             = typename _Mybase::value_type;\r\n    using allocator_type         = typename _Mybase::allocator_type;\r\n    using size_type              = typename _Mybase::size_type;\r\n    using difference_type        = typename _Mybase::difference_type;\r\n    using pointer                = typename _Mybase::pointer;\r\n    using const_pointer          = typename _Mybase::const_pointer;\r\n    using reference              = value_type&;\r\n    using const_reference        = const value_type&;\r\n    using iterator               = typename _Mybase::iterator;\r\n    using const_iterator         = typename _Mybase::const_iterator;\r\n    using reverse_iterator       = typename _Mybase::reverse_iterator;\r\n    using const_reverse_iterator = typename _Mybase::const_reverse_iterator;\r\n\r\n    using _Alnode        = typename _Mybase::_Alnode;\r\n    using _Alnode_traits = typename _Mybase::_Alnode_traits;\r\n\r\n#if _HAS_CXX17\r\n    using insert_return_type = _Insert_return_type<iterator, typename _Mybase::node_type>;\r\n#endif // _HAS_CXX17\r\n\r\n    set() : _Mybase(key_compare()) {}\r\n\r\n    explicit set(const allocator_type& _Al) : _Mybase(key_compare(), _Al) {}\r\n\r\n    set(const set& _Right) : _Mybase(_Right, _Alnode_traits::select_on_container_copy_construction(_Right._Getal())) {}\r\n\r\n    set(const set& _Right, const allocator_type& _Al) : _Mybase(_Right, _Al) {}\r\n\r\n    explicit set(const key_compare& _Pred) : _Mybase(_Pred) {}\r\n\r\n    set(const key_compare& _Pred, const allocator_type& _Al) : _Mybase(_Pred, _Al) {}\r\n\r\n    template <class _Iter>\r\n    set(_Iter _First, _Iter _Last) : _Mybase(key_compare()) {\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    set(_Iter _First, _Iter _Last, const key_compare& _Pred) : _Mybase(_Pred) {\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    set(_Iter _First, _Iter _Last, const allocator_type& _Al) : _Mybase(key_compare(), _Al) {\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    set(_Iter _First, _Iter _Last, const key_compare& _Pred, const allocator_type& _Al) : _Mybase(_Pred, _Al) {\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    set(from_range_t, _Rng&& _Range) : _Mybase(key_compare()) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    set(from_range_t, _Rng&& _Range, const key_compare& _Pred) : _Mybase(_Pred) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    set(from_range_t, _Rng&& _Range, const key_compare& _Pred, const allocator_type& _Al) : _Mybase(_Pred, _Al) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    set(from_range_t, _Rng&& _Range, const allocator_type& _Al) : _Mybase(key_compare(), _Al) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    set& operator=(const set& _Right) {\r\n        _Mybase::operator=(_Right);\r\n        return *this;\r\n    }\r\n\r\n    set(set&& _Right) : _Mybase(_STD move(_Right)) {}\r\n\r\n    set(set&& _Right, const allocator_type& _Al) : _Mybase(_STD move(_Right), _Al) {}\r\n\r\n    set& operator=(set&& _Right) noexcept(_Alnode_traits::is_always_equal::value && is_nothrow_move_assignable_v<_Pr>) {\r\n        _Mybase::operator=(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    void swap(set& _Right) noexcept(noexcept(_Mybase::swap(_Right))) {\r\n        _Mybase::swap(_Right);\r\n    }\r\n\r\n    set(initializer_list<value_type> _Ilist) : _Mybase(key_compare()) {\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    set(initializer_list<value_type> _Ilist, const key_compare& _Pred) : _Mybase(_Pred) {\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    set(initializer_list<value_type> _Ilist, const allocator_type& _Al) : _Mybase(key_compare(), _Al) {\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    set(initializer_list<value_type> _Ilist, const key_compare& _Pred, const allocator_type& _Al)\r\n        : _Mybase(_Pred, _Al) {\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    set& operator=(initializer_list<value_type> _Ilist) {\r\n        this->clear();\r\n        this->insert(_Ilist);\r\n        return *this;\r\n    }\r\n\r\n    using _Mybase::_Unchecked_begin;\r\n    using _Mybase::_Unchecked_end;\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Iter, class _Pr = less<_Iter_value_t<_Iter>>, class _Alloc = allocator<_Iter_value_t<_Iter>>,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, negation<_Is_allocator<_Pr>>, _Is_allocator<_Alloc>>, int> = 0>\r\nset(_Iter, _Iter, _Pr = _Pr(), _Alloc = _Alloc()) -> set<_Iter_value_t<_Iter>, _Pr, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Pr = less<_Kty>, class _Alloc = allocator<_Kty>,\r\n    enable_if_t<conjunction_v<negation<_Is_allocator<_Pr>>, _Is_allocator<_Alloc>>, int> = 0>\r\nset(initializer_list<_Kty>, _Pr = _Pr(), _Alloc = _Alloc()) -> set<_Kty, _Pr, _Alloc>;\r\n\r\ntemplate <class _Iter, class _Alloc, enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>>, int> = 0>\r\nset(_Iter, _Iter, _Alloc) -> set<_Iter_value_t<_Iter>, less<_Iter_value_t<_Iter>>, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Alloc, enable_if_t<_Is_allocator<_Alloc>::value, int> = 0>\r\nset(initializer_list<_Kty>, _Alloc) -> set<_Kty, less<_Kty>, _Alloc>;\r\n\r\n#if _HAS_CXX23\r\ntemplate <_RANGES input_range _Rng, _Not_allocator_for_container _Pr = less<_RANGES range_value_t<_Rng>>,\r\n    _Allocator_for_container _Alloc = allocator<_RANGES range_value_t<_Rng>>>\r\nset(from_range_t, _Rng&&, _Pr = _Pr(), _Alloc = _Alloc()) -> set<_RANGES range_value_t<_Rng>, _Pr, _Alloc>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc>\r\nset(from_range_t, _Rng&&, _Alloc) -> set<_RANGES range_value_t<_Rng>, less<_RANGES range_value_t<_Rng>>, _Alloc>;\r\n#endif // _HAS_CXX23\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Kty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator==(const set<_Kty, _Pr, _Alloc>& _Left, const set<_Kty, _Pr, _Alloc>& _Right) {\r\n    return _Left.size() == _Right.size()\r\n        && _STD equal(_Left._Unchecked_begin(), _Left._Unchecked_end_iter(), _Right._Unchecked_begin());\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Kty, class _Pr, class _Alloc>\r\n_NODISCARD _Synth_three_way_result<_Kty> operator<=>(\r\n    const set<_Kty, _Pr, _Alloc>& _Left, const set<_Kty, _Pr, _Alloc>& _Right) {\r\n    return _STD lexicographical_compare_three_way(_Left._Unchecked_begin(), _Left._Unchecked_end_iter(),\r\n        _Right._Unchecked_begin(), _Right._Unchecked_end_iter(), _Synth_three_way{});\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Kty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator!=(const set<_Kty, _Pr, _Alloc>& _Left, const set<_Kty, _Pr, _Alloc>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _Kty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator<(const set<_Kty, _Pr, _Alloc>& _Left, const set<_Kty, _Pr, _Alloc>& _Right) {\r\n    return _STD lexicographical_compare(\r\n        _Left._Unchecked_begin(), _Left._Unchecked_end_iter(), _Right._Unchecked_begin(), _Right._Unchecked_end_iter());\r\n}\r\n\r\ntemplate <class _Kty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator>(const set<_Kty, _Pr, _Alloc>& _Left, const set<_Kty, _Pr, _Alloc>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _Kty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator<=(const set<_Kty, _Pr, _Alloc>& _Left, const set<_Kty, _Pr, _Alloc>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _Kty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator>=(const set<_Kty, _Pr, _Alloc>& _Left, const set<_Kty, _Pr, _Alloc>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class _Kty, class _Pr, class _Alloc>\r\nvoid swap(set<_Kty, _Pr, _Alloc>& _Left, set<_Kty, _Pr, _Alloc>& _Right) noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Kty, class _Keylt, class _Alloc, class _Pr>\r\nset<_Kty, _Keylt, _Alloc>::size_type erase_if(set<_Kty, _Keylt, _Alloc>& _Cont, _Pr _Pred) {\r\n    return _STD _Erase_nodes_if(_Cont, _STD _Pass_fn(_Pred));\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Kty, class _Pr = less<_Kty>, class _Alloc = allocator<_Kty>>\r\nclass multiset : public _Tree<_Tset_traits<_Kty, _Pr, _Alloc, true>> {\r\n    // ordered red-black tree of key values, non-unique keys\r\npublic:\r\n    static_assert(!_ENFORCE_MATCHING_ALLOCATORS || is_same_v<_Kty, typename _Alloc::value_type>,\r\n        _MISMATCHED_ALLOCATOR_MESSAGE(\"multiset<T, Compare, Allocator>\", \"T\"));\r\n    static_assert(is_object_v<_Kty>, \"The C++ Standard forbids containers of non-object types \"\r\n                                     \"because of [container.requirements].\");\r\n\r\n    using _Mybase                = _Tree<_Tset_traits<_Kty, _Pr, _Alloc, true>>;\r\n    using key_type               = _Kty;\r\n    using key_compare            = _Pr;\r\n    using value_compare          = typename _Mybase::value_compare;\r\n    using value_type             = typename _Mybase::value_type;\r\n    using allocator_type         = typename _Mybase::allocator_type;\r\n    using size_type              = typename _Mybase::size_type;\r\n    using difference_type        = typename _Mybase::difference_type;\r\n    using pointer                = typename _Mybase::pointer;\r\n    using const_pointer          = typename _Mybase::const_pointer;\r\n    using reference              = value_type&;\r\n    using const_reference        = const value_type&;\r\n    using iterator               = typename _Mybase::iterator;\r\n    using const_iterator         = typename _Mybase::const_iterator;\r\n    using reverse_iterator       = typename _Mybase::reverse_iterator;\r\n    using const_reverse_iterator = typename _Mybase::const_reverse_iterator;\r\n\r\n    using _Alnode        = typename _Mybase::_Alnode;\r\n    using _Alnode_traits = typename _Mybase::_Alnode_traits;\r\n\r\n    multiset() : _Mybase(key_compare()) {}\r\n\r\n    explicit multiset(const allocator_type& _Al) : _Mybase(key_compare(), _Al) {}\r\n\r\n    multiset(const multiset& _Right)\r\n        : _Mybase(_Right, _Alnode_traits::select_on_container_copy_construction(_Right._Getal())) {}\r\n\r\n    multiset(const multiset& _Right, const allocator_type& _Al) : _Mybase(_Right, _Al) {}\r\n\r\n    explicit multiset(const key_compare& _Pred) : _Mybase(_Pred) {}\r\n\r\n    multiset(const key_compare& _Pred, const allocator_type& _Al) : _Mybase(_Pred, _Al) {}\r\n\r\n    template <class _Iter>\r\n    multiset(_Iter _First, _Iter _Last) : _Mybase(key_compare()) {\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    multiset(_Iter _First, _Iter _Last, const key_compare& _Pred) : _Mybase(_Pred) {\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    multiset(_Iter _First, _Iter _Last, const allocator_type& _Al) : _Mybase(key_compare(), _Al) {\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    multiset(_Iter _First, _Iter _Last, const key_compare& _Pred, const allocator_type& _Al) : _Mybase(_Pred, _Al) {\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    multiset(from_range_t, _Rng&& _Range) : _Mybase(key_compare()) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    multiset(from_range_t, _Rng&& _Range, const key_compare& _Pred) : _Mybase(_Pred) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    multiset(from_range_t, _Rng&& _Range, const key_compare& _Pred, const allocator_type& _Al) : _Mybase(_Pred, _Al) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    multiset(from_range_t, _Rng&& _Range, const allocator_type& _Al) : _Mybase(key_compare(), _Al) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    multiset& operator=(const multiset& _Right) {\r\n        _Mybase::operator=(_Right);\r\n        return *this;\r\n    }\r\n\r\n    multiset(multiset&& _Right) : _Mybase(_STD move(_Right)) {}\r\n\r\n    multiset(multiset&& _Right, const allocator_type& _Al) : _Mybase(_STD move(_Right), _Al) {}\r\n\r\n    multiset& operator=(multiset&& _Right)\r\n        noexcept(_Alnode_traits::is_always_equal::value && is_nothrow_move_assignable_v<_Pr>) {\r\n        _Mybase::operator=(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    template <class... _Valty>\r\n    iterator emplace(_Valty&&... _Val) {\r\n        return _Mybase::emplace(_STD forward<_Valty>(_Val)...).first;\r\n    }\r\n\r\n    void swap(multiset& _Right) noexcept(noexcept(_Mybase::swap(_Right))) {\r\n        _Mybase::swap(_Right);\r\n    }\r\n\r\n    multiset(initializer_list<value_type> _Ilist) : _Mybase(key_compare()) {\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    multiset(initializer_list<value_type> _Ilist, const key_compare& _Pred) : _Mybase(_Pred) {\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    multiset(initializer_list<value_type> _Ilist, const allocator_type& _Al) : _Mybase(key_compare(), _Al) {\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    multiset(initializer_list<value_type> _Ilist, const key_compare& _Pred, const allocator_type& _Al)\r\n        : _Mybase(_Pred, _Al) {\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    multiset& operator=(initializer_list<value_type> _Ilist) {\r\n        this->clear();\r\n        this->insert(_Ilist);\r\n        return *this;\r\n    }\r\n\r\n    using _Mybase::_Unchecked_begin;\r\n    using _Mybase::_Unchecked_end;\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Iter, class _Pr = less<_Iter_value_t<_Iter>>, class _Alloc = allocator<_Iter_value_t<_Iter>>,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, negation<_Is_allocator<_Pr>>, _Is_allocator<_Alloc>>, int> = 0>\r\nmultiset(_Iter, _Iter, _Pr = _Pr(), _Alloc = _Alloc()) -> multiset<_Iter_value_t<_Iter>, _Pr, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Pr = less<_Kty>, class _Alloc = allocator<_Kty>,\r\n    enable_if_t<conjunction_v<negation<_Is_allocator<_Pr>>, _Is_allocator<_Alloc>>, int> = 0>\r\nmultiset(initializer_list<_Kty>, _Pr = _Pr(), _Alloc = _Alloc()) -> multiset<_Kty, _Pr, _Alloc>;\r\n\r\ntemplate <class _Iter, class _Alloc, enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>>, int> = 0>\r\nmultiset(_Iter, _Iter, _Alloc) -> multiset<_Iter_value_t<_Iter>, less<_Iter_value_t<_Iter>>, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Alloc, enable_if_t<_Is_allocator<_Alloc>::value, int> = 0>\r\nmultiset(initializer_list<_Kty>, _Alloc) -> multiset<_Kty, less<_Kty>, _Alloc>;\r\n\r\n#if _HAS_CXX23\r\ntemplate <_RANGES input_range _Rng, _Not_allocator_for_container _Pr = less<_RANGES range_value_t<_Rng>>,\r\n    _Allocator_for_container _Alloc = allocator<_RANGES range_value_t<_Rng>>>\r\nmultiset(from_range_t, _Rng&&, _Pr = _Pr(), _Alloc = _Alloc()) -> multiset<_RANGES range_value_t<_Rng>, _Pr, _Alloc>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc>\r\nmultiset(from_range_t, _Rng&&, _Alloc)\r\n    -> multiset<_RANGES range_value_t<_Rng>, less<_RANGES range_value_t<_Rng>>, _Alloc>;\r\n#endif // _HAS_CXX23\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Kty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator==(const multiset<_Kty, _Pr, _Alloc>& _Left, const multiset<_Kty, _Pr, _Alloc>& _Right) {\r\n    return _Left.size() == _Right.size()\r\n        && _STD equal(_Left._Unchecked_begin(), _Left._Unchecked_end_iter(), _Right._Unchecked_begin());\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Kty, class _Pr, class _Alloc>\r\n_NODISCARD _Synth_three_way_result<_Kty> operator<=>(\r\n    const multiset<_Kty, _Pr, _Alloc>& _Left, const multiset<_Kty, _Pr, _Alloc>& _Right) {\r\n    return _STD lexicographical_compare_three_way(_Left._Unchecked_begin(), _Left._Unchecked_end_iter(),\r\n        _Right._Unchecked_begin(), _Right._Unchecked_end_iter(), _Synth_three_way{});\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Kty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator!=(const multiset<_Kty, _Pr, _Alloc>& _Left, const multiset<_Kty, _Pr, _Alloc>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _Kty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator<(const multiset<_Kty, _Pr, _Alloc>& _Left, const multiset<_Kty, _Pr, _Alloc>& _Right) {\r\n    return _STD lexicographical_compare(\r\n        _Left._Unchecked_begin(), _Left._Unchecked_end_iter(), _Right._Unchecked_begin(), _Right._Unchecked_end_iter());\r\n}\r\n\r\ntemplate <class _Kty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator>(const multiset<_Kty, _Pr, _Alloc>& _Left, const multiset<_Kty, _Pr, _Alloc>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _Kty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator<=(const multiset<_Kty, _Pr, _Alloc>& _Left, const multiset<_Kty, _Pr, _Alloc>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _Kty, class _Pr, class _Alloc>\r\n_NODISCARD bool operator>=(const multiset<_Kty, _Pr, _Alloc>& _Left, const multiset<_Kty, _Pr, _Alloc>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class _Kty, class _Pr, class _Alloc>\r\nvoid swap(multiset<_Kty, _Pr, _Alloc>& _Left, multiset<_Kty, _Pr, _Alloc>& _Right)\r\n    noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Kty, class _Keylt, class _Alloc, class _Pr>\r\nmultiset<_Kty, _Keylt, _Alloc>::size_type erase_if(multiset<_Kty, _Keylt, _Alloc>& _Cont, _Pr _Pred) {\r\n    return _STD _Erase_nodes_if(_Cont, _STD _Pass_fn(_Pred));\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX17\r\nnamespace pmr {\r\n    _EXPORT_STD template <class _Kty, class _Pr = less<_Kty>>\r\n    using set = _STD set<_Kty, _Pr, polymorphic_allocator<_Kty>>;\r\n\r\n    _EXPORT_STD template <class _Kty, class _Pr = less<_Kty>>\r\n    using multiset = _STD multiset<_Kty, _Pr, polymorphic_allocator<_Kty>>;\r\n} // namespace pmr\r\n#endif // _HAS_CXX17\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _SET_\r\n"
  },
  {
    "path": "stl/inc/shared_mutex",
    "content": "// shared_mutex standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _SHARED_MUTEX_\r\n#define _SHARED_MUTEX_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#ifdef _M_CEE_PURE\r\n#error <shared_mutex> is not supported when compiling with /clr:pure.\r\n#endif // defined(_M_CEE_PURE)\r\n\r\n#include <condition_variable>\r\n#include <mutex>\r\n#include <xthreads.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD class shared_mutex { // class for mutual exclusion shared across threads\r\npublic:\r\n    using native_handle_type = _Smtx_t*;\r\n\r\n    shared_mutex()                               = default;\r\n    shared_mutex(const shared_mutex&)            = delete;\r\n    shared_mutex& operator=(const shared_mutex&) = delete;\r\n\r\n    void lock() noexcept /* strengthened */ { // lock exclusive\r\n        _Smtx_lock_exclusive(&_Myhandle);\r\n    }\r\n\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock() noexcept /* strengthened */ { // try to lock exclusive\r\n        return _Smtx_try_lock_exclusive(&_Myhandle) != 0;\r\n    }\r\n\r\n    void unlock() noexcept /* strengthened */ { // unlock exclusive\r\n        _Smtx_unlock_exclusive(&_Myhandle);\r\n    }\r\n\r\n    void lock_shared() noexcept /* strengthened */ { // lock non-exclusive\r\n        _Smtx_lock_shared(&_Myhandle);\r\n    }\r\n\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock_shared() noexcept /* strengthened */ { // try to lock non-exclusive\r\n        return _Smtx_try_lock_shared(&_Myhandle) != 0;\r\n    }\r\n\r\n    void unlock_shared() noexcept /* strengthened */ { // unlock non-exclusive\r\n        _Smtx_unlock_shared(&_Myhandle);\r\n    }\r\n\r\n    _NODISCARD native_handle_type native_handle() noexcept /* strengthened */ { // get native handle\r\n        return &_Myhandle;\r\n    }\r\n\r\nprivate:\r\n    _Smtx_t _Myhandle = nullptr;\r\n};\r\n\r\n_EXPORT_STD class shared_timed_mutex { // class for mutual exclusion shared across threads\r\nprivate:\r\n    using _Read_cnt_t = unsigned int;\r\n\r\n    static constexpr _Read_cnt_t _Max_readers = static_cast<_Read_cnt_t>(-1);\r\n\r\npublic:\r\n    shared_timed_mutex() = default;\r\n\r\n    shared_timed_mutex(const shared_timed_mutex&)            = delete;\r\n    shared_timed_mutex& operator=(const shared_timed_mutex&) = delete;\r\n\r\n    void lock() { // lock exclusive\r\n        unique_lock<mutex> _Lock(_Mymtx);\r\n        while (_Writing) {\r\n            _Write_queue.wait(_Lock);\r\n        }\r\n\r\n        _Writing = true;\r\n        while (0 < _Readers) {\r\n            _Read_queue.wait(_Lock); // wait for writing, no readers\r\n        }\r\n    }\r\n\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock() { // try to lock exclusive\r\n        lock_guard<mutex> _Lock(_Mymtx);\r\n        if (_Writing || 0 < _Readers) {\r\n            return false;\r\n        } else { // set writing, no readers\r\n            _Writing = true;\r\n            return true;\r\n        }\r\n    }\r\n\r\n    template <class _Rep, class _Period>\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock_for(\r\n        const chrono::duration<_Rep, _Period>& _Rel_time) { // try to lock for duration\r\n        return try_lock_until(_To_absolute_time(_Rel_time));\r\n    }\r\n\r\n    template <class _Clock, class _Duration>\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock_until(const chrono::time_point<_Clock, _Duration>& _Abs_time) {\r\n        // try to lock until time point\r\n        static_assert(chrono::_Is_clock_v<_Clock>, \"Clock type required\");\r\n        auto _Not_writing  = [this] { return !_Writing; };\r\n        auto _Zero_readers = [this] { return _Readers == 0; };\r\n        unique_lock<mutex> _Lock(_Mymtx);\r\n\r\n        if (!_Write_queue.wait_until(_Lock, _Abs_time, _Not_writing)) {\r\n            return false;\r\n        }\r\n\r\n        _Writing = true;\r\n\r\n        if (!_Read_queue.wait_until(_Lock, _Abs_time, _Zero_readers)) { // timeout, leave writing state\r\n            _Writing = false;\r\n            _Lock.unlock(); // unlock before notifying, for efficiency\r\n            _Write_queue.notify_all();\r\n            return false;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    void unlock() { // unlock exclusive\r\n        { // unlock before notifying, for efficiency\r\n            lock_guard<mutex> _Lock(_Mymtx);\r\n\r\n            _Writing = false;\r\n        }\r\n\r\n        _Write_queue.notify_all();\r\n    }\r\n\r\n    void lock_shared() { // lock non-exclusive\r\n        unique_lock<mutex> _Lock(_Mymtx);\r\n        while (_Writing || _Readers == _Max_readers) {\r\n            _Write_queue.wait(_Lock);\r\n        }\r\n\r\n        ++_Readers;\r\n    }\r\n\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock_shared() { // try to lock non-exclusive\r\n        lock_guard<mutex> _Lock(_Mymtx);\r\n        if (_Writing || _Readers == _Max_readers) {\r\n            return false;\r\n        } else { // count another reader\r\n            ++_Readers;\r\n            return true;\r\n        }\r\n    }\r\n\r\n    template <class _Rep, class _Period>\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock_shared_for(const chrono::duration<_Rep, _Period>& _Rel_time) {\r\n        // try to lock non-exclusive for relative time\r\n        return try_lock_shared_until(_To_absolute_time(_Rel_time));\r\n    }\r\n\r\n    template <class _Clock, class _Duration>\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock_shared_until(const chrono::time_point<_Clock, _Duration>& _Abs_time) {\r\n        // try to lock non-exclusive until absolute time\r\n        static_assert(chrono::_Is_clock_v<_Clock>, \"Clock type required\");\r\n        const auto _Can_acquire = [this] { return !_Writing && _Readers < _Max_readers; };\r\n\r\n        unique_lock<mutex> _Lock(_Mymtx);\r\n\r\n        if (!_Write_queue.wait_until(_Lock, _Abs_time, _Can_acquire)) {\r\n            return false;\r\n        }\r\n\r\n        ++_Readers;\r\n        return true;\r\n    }\r\n\r\n    void unlock_shared() { // unlock non-exclusive\r\n        _Read_cnt_t _Local_readers;\r\n        bool _Local_writing;\r\n\r\n        { // unlock before notifying, for efficiency\r\n            lock_guard<mutex> _Lock(_Mymtx);\r\n            --_Readers;\r\n            _Local_readers = _Readers;\r\n            _Local_writing = _Writing;\r\n        }\r\n\r\n        if (_Local_writing && _Local_readers == 0) {\r\n            _Read_queue.notify_one();\r\n        } else if (!_Local_writing && _Local_readers == _Max_readers - 1) {\r\n            _Write_queue.notify_all();\r\n        }\r\n    }\r\n\r\nprivate:\r\n    mutex _Mymtx{};\r\n    condition_variable _Read_queue{};\r\n    condition_variable _Write_queue{};\r\n    _Read_cnt_t _Readers = 0;\r\n    bool _Writing        = false;\r\n};\r\n\r\n_EXPORT_STD template <class _Mutex>\r\nclass shared_lock { // shareable lock\r\npublic:\r\n    using mutex_type = _Mutex;\r\n\r\n    shared_lock() noexcept = default;\r\n\r\n    _NODISCARD_LOCK explicit shared_lock(mutex_type& _Mtx)\r\n        : _Pmtx(_STD addressof(_Mtx)), _Owns(true) { // construct with mutex and lock shared\r\n        _Mtx.lock_shared();\r\n    }\r\n\r\n    shared_lock(mutex_type& _Mtx, defer_lock_t) noexcept\r\n        : _Pmtx(_STD addressof(_Mtx)), _Owns(false) {} // construct with unlocked mutex\r\n\r\n    _NODISCARD_LOCK shared_lock(mutex_type& _Mtx, try_to_lock_t)\r\n        : _Pmtx(_STD addressof(_Mtx)), _Owns(_Mtx.try_lock_shared()) {} // construct with mutex and try to lock shared\r\n\r\n    _NODISCARD_LOCK shared_lock(mutex_type& _Mtx, adopt_lock_t) noexcept // strengthened\r\n        : _Pmtx(_STD addressof(_Mtx)), _Owns(true) {} // construct with mutex and adopt ownership\r\n\r\n    template <class _Rep, class _Period>\r\n    _NODISCARD_LOCK shared_lock(mutex_type& _Mtx, const chrono::duration<_Rep, _Period>& _Rel_time)\r\n        : _Pmtx(_STD addressof(_Mtx)), _Owns(_Mtx.try_lock_shared_for(_Rel_time)) {\r\n        // construct with mutex and try to lock for relative time\r\n    }\r\n\r\n    template <class _Clock, class _Duration>\r\n    _NODISCARD_LOCK shared_lock(mutex_type& _Mtx, const chrono::time_point<_Clock, _Duration>& _Abs_time)\r\n        : _Pmtx(_STD addressof(_Mtx)), _Owns(_Mtx.try_lock_shared_until(_Abs_time)) {\r\n        // construct with mutex and try to lock until absolute time\r\n        static_assert(chrono::_Is_clock_v<_Clock>, \"Clock type required\");\r\n    }\r\n\r\n    ~shared_lock() noexcept {\r\n        if (_Owns) {\r\n            _Pmtx->unlock_shared();\r\n        }\r\n    }\r\n\r\n    _NODISCARD_LOCK shared_lock(shared_lock&& _Other) noexcept : _Pmtx(_Other._Pmtx), _Owns(_Other._Owns) {\r\n        _Other._Pmtx = nullptr;\r\n        _Other._Owns = false;\r\n    }\r\n\r\n    shared_lock& operator=(shared_lock&& _Right) noexcept {\r\n        shared_lock{_STD move(_Right)}.swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    shared_lock(const shared_lock&)            = delete;\r\n    shared_lock& operator=(const shared_lock&) = delete;\r\n\r\n    void lock() { // lock the mutex\r\n        _Validate();\r\n        _Pmtx->lock_shared();\r\n        _Owns = true;\r\n    }\r\n\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock() { // try to lock the mutex\r\n        _Validate();\r\n        _Owns = _Pmtx->try_lock_shared();\r\n        return _Owns;\r\n    }\r\n\r\n    template <class _Rep, class _Period>\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock_for(const chrono::duration<_Rep, _Period>& _Rel_time) {\r\n        // try to lock the mutex for _Rel_time\r\n        _Validate();\r\n        _Owns = _Pmtx->try_lock_shared_for(_Rel_time);\r\n        return _Owns;\r\n    }\r\n\r\n    template <class _Clock, class _Duration>\r\n    _NODISCARD_TRY_CHANGE_STATE bool try_lock_until(const chrono::time_point<_Clock, _Duration>& _Abs_time) {\r\n        // try to lock the mutex until _Abs_time\r\n        static_assert(chrono::_Is_clock_v<_Clock>, \"Clock type required\");\r\n        _Validate();\r\n        _Owns = _Pmtx->try_lock_shared_until(_Abs_time);\r\n        return _Owns;\r\n    }\r\n\r\n    void unlock() { // try to unlock the mutex\r\n        if (!_Pmtx || !_Owns) {\r\n            _Throw_system_error(errc::operation_not_permitted);\r\n        }\r\n\r\n        _Pmtx->unlock_shared();\r\n        _Owns = false;\r\n    }\r\n\r\n    void swap(shared_lock& _Right) noexcept {\r\n        _STD swap(_Pmtx, _Right._Pmtx);\r\n        _STD swap(_Owns, _Right._Owns);\r\n    }\r\n\r\n    mutex_type* release() noexcept {\r\n        _Mutex* _Res = _Pmtx;\r\n        _Pmtx        = nullptr;\r\n        _Owns        = false;\r\n        return _Res;\r\n    }\r\n\r\n    _NODISCARD bool owns_lock() const noexcept {\r\n        return _Owns;\r\n    }\r\n\r\n    explicit operator bool() const noexcept {\r\n        return _Owns;\r\n    }\r\n\r\n    _NODISCARD mutex_type* mutex() const noexcept {\r\n        return _Pmtx;\r\n    }\r\n\r\nprivate:\r\n    _Mutex* _Pmtx = nullptr;\r\n    bool _Owns    = false;\r\n\r\n    void _Validate() const { // check if the mutex can be locked\r\n        if (!_Pmtx) {\r\n            _Throw_system_error(errc::operation_not_permitted);\r\n        }\r\n\r\n        if (_Owns) {\r\n            _Throw_system_error(errc::resource_deadlock_would_occur);\r\n        }\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Mutex>\r\nvoid swap(shared_lock<_Mutex>& _Left, shared_lock<_Mutex>& _Right) noexcept {\r\n    _Left.swap(_Right);\r\n}\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _SHARED_MUTEX_\r\n"
  },
  {
    "path": "stl/inc/source_location",
    "content": "// source_location standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _SOURCE_LOCATION_\r\n#define _SOURCE_LOCATION_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#if !_HAS_CXX20\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <source_location> are available only with C++20 or later.\");\r\n#else // ^^^ !_HAS_CXX20 / _HAS_CXX20 vvv\r\n\r\n#include <cstdint>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n#ifndef _USE_DETAILED_FUNCTION_NAME_IN_SOURCE_LOCATION\r\n#define _USE_DETAILED_FUNCTION_NAME_IN_SOURCE_LOCATION 1\r\n#endif // ^^^ !defined(_USE_DETAILED_FUNCTION_NAME_IN_SOURCE_LOCATION) ^^^\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD struct source_location {\r\n    _NODISCARD static consteval source_location current(const uint_least32_t _Line_ = __builtin_LINE(),\r\n        const uint_least32_t _Column_ = __builtin_COLUMN(), const char* const _File_ = __builtin_FILE(),\r\n#if _USE_DETAILED_FUNCTION_NAME_IN_SOURCE_LOCATION\r\n        const char* const _Function_ = __builtin_FUNCSIG()\r\n#else // ^^^ detailed / basic vvv\r\n        const char* const _Function_ = __builtin_FUNCTION()\r\n#endif // ^^^ basic ^^^\r\n            ) noexcept {\r\n        source_location _Result{};\r\n        _Result._Line     = _Line_;\r\n        _Result._Column   = _Column_;\r\n        _Result._File     = _File_;\r\n        _Result._Function = _Function_;\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD constexpr source_location() noexcept = default;\r\n\r\n    _NODISCARD constexpr uint_least32_t line() const noexcept {\r\n        return _Line;\r\n    }\r\n    _NODISCARD constexpr uint_least32_t column() const noexcept {\r\n        return _Column;\r\n    }\r\n    _NODISCARD constexpr const char* file_name() const noexcept {\r\n        return _File;\r\n    }\r\n    _NODISCARD constexpr const char* function_name() const noexcept {\r\n        return _Function;\r\n    }\r\n\r\nprivate:\r\n    uint_least32_t _Line{};\r\n    uint_least32_t _Column{};\r\n    const char* _File     = \"\";\r\n    const char* _Function = \"\";\r\n};\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _SOURCE_LOCATION_\r\n"
  },
  {
    "path": "stl/inc/span",
    "content": "// span standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _SPAN_\r\n#define _SPAN_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX20\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <span> are available only with C++20 or later.\");\r\n#else // ^^^ !_HAS_CXX20 / _HAS_CXX20 vvv\r\n#include <compare>\r\n#include <cstddef>\r\n#include <type_traits>\r\n#include <xutility>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\n_EXPORT_STD inline constexpr size_t dynamic_extent = static_cast<size_t>(-1);\r\n\r\ntemplate <class _Ty>\r\nstruct _Span_iterator {\r\n    using iterator_concept  = contiguous_iterator_tag;\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = remove_cv_t<_Ty>;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = _Ty*;\r\n    using reference         = _Ty&;\r\n\r\n    _NODISCARD constexpr reference operator*() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Mybegin, \"cannot dereference value-initialized span iterator\");\r\n        _STL_VERIFY(_Myptr < _Myend, \"cannot dereference end span iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n        return *_Myptr;\r\n    }\r\n\r\n    _NODISCARD constexpr pointer operator->() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Mybegin, \"cannot dereference value-initialized span iterator\");\r\n        _STL_VERIFY(_Myptr < _Myend, \"cannot dereference end span iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n        return _Myptr;\r\n    }\r\n\r\n    constexpr _Span_iterator& operator++() noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Mybegin, \"cannot increment value-initialized span iterator\");\r\n        _STL_VERIFY(_Myptr < _Myend, \"cannot increment span iterator past end\");\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n        ++_Myptr;\r\n        return *this;\r\n    }\r\n\r\n    constexpr _Span_iterator operator++(int) noexcept {\r\n        _Span_iterator _Tmp{*this};\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    constexpr _Span_iterator& operator--() noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Mybegin, \"cannot decrement value-initialized span iterator\");\r\n        _STL_VERIFY(_Mybegin < _Myptr, \"cannot decrement span iterator before begin\");\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n        --_Myptr;\r\n        return *this;\r\n    }\r\n\r\n    constexpr _Span_iterator operator--(int) noexcept {\r\n        _Span_iterator _Tmp{*this};\r\n        --*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    constexpr void _Verify_offset([[maybe_unused]] const difference_type _Off) const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        if (_Off != 0) {\r\n            _STL_VERIFY(_Mybegin, \"cannot seek value-initialized span iterator\");\r\n        }\r\n\r\n        if (_Off < 0) {\r\n            _STL_VERIFY(_Myptr - _Mybegin >= -_Off, \"cannot seek span iterator before begin\");\r\n        }\r\n\r\n        if (_Off > 0) {\r\n            _STL_VERIFY(_Myend - _Myptr >= _Off, \"cannot seek span iterator after end\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n    }\r\n\r\n    constexpr _Span_iterator& operator+=(const difference_type _Off) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _Verify_offset(_Off);\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n\r\n        _Myptr += _Off;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD constexpr _Span_iterator operator+(const difference_type _Off) const noexcept {\r\n        _Span_iterator _Tmp{*this};\r\n        _Tmp += _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD friend constexpr _Span_iterator operator+(const difference_type _Off, _Span_iterator _Next) noexcept {\r\n        _Next += _Off;\r\n        return _Next;\r\n    }\r\n\r\n    constexpr _Span_iterator& operator-=(const difference_type _Off) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Off != _Min_possible_v<difference_type>, \"integer overflow\");\r\n        _Verify_offset(-_Off);\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n\r\n        _Myptr -= _Off;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD constexpr _Span_iterator operator-(const difference_type _Off) const noexcept {\r\n        _Span_iterator _Tmp{*this};\r\n        _Tmp -= _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD constexpr difference_type operator-(const _Span_iterator& _Right) const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(\r\n            _Mybegin == _Right._Mybegin && _Myend == _Right._Myend, \"cannot subtract incompatible span iterators\");\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n        return _Myptr - _Right._Myptr;\r\n    }\r\n\r\n    _NODISCARD constexpr reference operator[](const difference_type _Off) const noexcept {\r\n        return *(*this + _Off);\r\n    }\r\n\r\n    _NODISCARD constexpr bool operator==(const _Span_iterator& _Right) const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Mybegin == _Right._Mybegin && _Myend == _Right._Myend,\r\n            \"cannot compare incompatible span iterators for equality\");\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n        return _Myptr == _Right._Myptr;\r\n    }\r\n\r\n    _NODISCARD constexpr strong_ordering operator<=>(const _Span_iterator& _Right) const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(\r\n            _Mybegin == _Right._Mybegin && _Myend == _Right._Myend, \"cannot compare incompatible span iterators\");\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n        return _Myptr <=> _Right._Myptr;\r\n    }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n    friend constexpr void _Verify_range(const _Span_iterator& _First, const _Span_iterator& _Last) noexcept {\r\n        _STL_VERIFY(_First._Mybegin == _Last._Mybegin && _First._Myend == _Last._Myend,\r\n            \"span iterators from different views do not form a range\");\r\n        _STL_VERIFY(_First._Myptr <= _Last._Myptr, \"span iterator range transposed\");\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n\r\n    using _Prevent_inheriting_unwrap = _Span_iterator;\r\n\r\n    _NODISCARD constexpr pointer _Unwrapped() const noexcept {\r\n        return _Myptr;\r\n    }\r\n\r\n    static constexpr bool _Unwrap_when_unverified = _ITERATOR_DEBUG_LEVEL == 0;\r\n\r\n    constexpr void _Seek_to(const pointer _It) noexcept {\r\n        _Myptr = _It;\r\n    }\r\n\r\n    pointer _Myptr = nullptr;\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n    pointer _Mybegin = nullptr;\r\n    pointer _Myend   = nullptr;\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct pointer_traits<_Span_iterator<_Ty>> {\r\n    using pointer         = _Span_iterator<_Ty>;\r\n    using element_type    = _Ty;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    _NODISCARD static constexpr element_type* to_address(const pointer _Iter) noexcept {\r\n        return _Iter._Unwrapped();\r\n    }\r\n};\r\n\r\ntemplate <class _Ty, size_t _Extent>\r\nstruct _Span_extent_type {\r\n    using pointer = _Ty*;\r\n\r\n    constexpr _Span_extent_type() noexcept = default;\r\n\r\n    constexpr explicit _Span_extent_type(const pointer _Data, size_t) noexcept : _Mydata{_Data} {\r\n        // Verify that later calls to size_bytes() won't overflow:\r\n        static_assert(\r\n            _Mysize <= dynamic_extent / sizeof(_Ty), \"size of span in bytes exceeds numeric_limits<size_t>::max()\");\r\n    }\r\n\r\n    pointer _Mydata{nullptr};\r\n    static constexpr size_t _Mysize = _Extent;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Span_extent_type<_Ty, dynamic_extent> {\r\n    using pointer = _Ty*;\r\n\r\n    constexpr _Span_extent_type() noexcept = default;\r\n\r\n    constexpr explicit _Span_extent_type(const pointer _Data, const size_t _Size) noexcept\r\n        : _Mydata{_Data}, _Mysize{_Size} {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        // Verify that later calls to size_bytes() won't overflow:\r\n        _STL_VERIFY(\r\n            _Mysize <= dynamic_extent / sizeof(_Ty), \"size of span in bytes exceeds numeric_limits<size_t>::max()\");\r\n#endif\r\n    }\r\n\r\n    pointer _Mydata{nullptr};\r\n    size_t _Mysize{0};\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Extent>\r\nclass span;\r\n\r\nnamespace ranges {\r\n    template <class _Ty, size_t _Extent>\r\n    constexpr bool enable_view<span<_Ty, _Extent>> = true;\r\n    template <class _Ty, size_t _Extent>\r\n    constexpr bool enable_borrowed_range<span<_Ty, _Extent>> = true;\r\n} // namespace ranges\r\n\r\ntemplate <class>\r\nconstexpr bool _Is_span_v = false;\r\n\r\ntemplate <class _Ty, size_t _Extent>\r\nconstexpr bool _Is_span_v<span<_Ty, _Extent>> = true;\r\n\r\ntemplate <class>\r\nconstexpr bool _Is_std_array_v = false;\r\n\r\ntemplate <class _Ty, size_t _Size>\r\nconstexpr bool _Is_std_array_v<array<_Ty, _Size>> = true;\r\n\r\ntemplate <class _It, class _Ty>\r\nconcept _Span_compatible_iterator =\r\n    contiguous_iterator<_It> && is_convertible_v<remove_reference_t<iter_reference_t<_It>> (*)[], _Ty (*)[]>;\r\n\r\ntemplate <class _Sentinel, class _It>\r\nconcept _Span_compatible_sentinel = sized_sentinel_for<_Sentinel, _It> && !is_convertible_v<_Sentinel, size_t>;\r\n\r\ntemplate <class _Rng, class _Ty>\r\nconcept _Span_compatible_range =\r\n    !is_array_v<remove_cvref_t<_Rng>> && !_Is_span_v<remove_cvref_t<_Rng>> && !_Is_std_array_v<remove_cvref_t<_Rng>>\r\n    && _RANGES contiguous_range<_Rng> && _RANGES sized_range<_Rng> && (_RANGES borrowed_range<_Rng> || is_const_v<_Ty>)\r\n    && is_convertible_v<remove_reference_t<_RANGES range_reference_t<_Rng>> (*)[], _Ty (*)[]>;\r\n\r\n// [views.span]\r\n_EXPORT_STD template <class _Ty, size_t _Extent = dynamic_extent>\r\nclass span : private _Span_extent_type<_Ty, _Extent> {\r\nprivate:\r\n    using _Mybase = _Span_extent_type<_Ty, _Extent>;\r\n    using _Mybase::_Mydata;\r\n    using _Mybase::_Mysize;\r\n\r\npublic:\r\n    using element_type     = _Ty;\r\n    using value_type       = remove_cv_t<_Ty>;\r\n    using size_type        = size_t;\r\n    using difference_type  = ptrdiff_t;\r\n    using pointer          = _Ty*;\r\n    using const_pointer    = const _Ty*;\r\n    using reference        = _Ty&;\r\n    using const_reference  = const _Ty&;\r\n    using iterator         = _Span_iterator<_Ty>;\r\n    using reverse_iterator = _STD reverse_iterator<iterator>;\r\n#if _HAS_CXX23\r\n    using const_iterator         = _STD const_iterator<iterator>;\r\n    using const_reverse_iterator = _STD const_iterator<reverse_iterator>;\r\n#endif // _HAS_CXX23\r\n\r\n    static constexpr size_type extent = _Extent;\r\n\r\n    // [span.cons] Constructors, copy, and assignment\r\n    constexpr span() noexcept\r\n        requires (_Extent == 0 || _Extent == dynamic_extent)\r\n    = default;\r\n\r\n    template <_Span_compatible_iterator<element_type> _It>\r\n    constexpr explicit(_Extent != dynamic_extent) span(_It _First, size_type _Count) noexcept // strengthened\r\n        : _Mybase(_STD to_address(_STD _Get_unwrapped_n(_First, _Count)), _Count) {\r\n#if _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (_Extent != dynamic_extent) {\r\n            _STL_VERIFY(_Count == _Extent,\r\n                \"Cannot construct span with static extent from range [first, first + count) as count != extent\");\r\n        }\r\n#endif // _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    template <_Span_compatible_iterator<element_type> _It, _Span_compatible_sentinel<_It> _Sentinel>\r\n    constexpr explicit(_Extent != dynamic_extent) span(_It _First, _Sentinel _Last)\r\n        noexcept(noexcept(_Last - _First)) // strengthened\r\n        : _Mybase(_STD to_address(_First), static_cast<size_type>(_Last - _First)) {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n#if _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (_Extent != dynamic_extent) {\r\n            _STL_VERIFY(_Last - _First == _Extent,\r\n                \"Cannot construct span with static extent from range [first, last) as last - first != extent\");\r\n        }\r\n#endif // _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    template <size_t _Size>\r\n        requires (_Extent == dynamic_extent || _Extent == _Size)\r\n    constexpr span(type_identity_t<element_type> (&_Arr)[_Size]) noexcept : _Mybase(_Arr, _Size) {}\r\n\r\n    template <class _OtherTy, size_t _Size>\r\n        requires (_Extent == dynamic_extent || _Extent == _Size) && is_convertible_v<_OtherTy (*)[], element_type (*)[]>\r\n    constexpr span(array<_OtherTy, _Size>& _Arr) noexcept : _Mybase(_Arr.data(), _Size) {}\r\n\r\n    template <class _OtherTy, size_t _Size>\r\n        requires (_Extent == dynamic_extent || _Extent == _Size)\r\n              && is_convertible_v<const _OtherTy (*)[], element_type (*)[]>\r\n    constexpr span(const array<_OtherTy, _Size>& _Arr) noexcept : _Mybase(_Arr.data(), _Size) {}\r\n\r\n    template <_Span_compatible_range<element_type> _Rng>\r\n    constexpr explicit(_Extent != dynamic_extent) span(_Rng&& _Range)\r\n        : _Mybase(_RANGES data(_Range), static_cast<size_type>(_RANGES size(_Range))) {\r\n#if _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (_Extent != dynamic_extent) {\r\n            _STL_VERIFY(_RANGES size(_Range) == _Extent,\r\n                \"Cannot construct span with static extent from range r as std::ranges::size(r) != extent\");\r\n        }\r\n#endif // _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    template <class _OtherTy, size_t _OtherExtent>\r\n        requires (_Extent == dynamic_extent || _OtherExtent == dynamic_extent || _Extent == _OtherExtent)\r\n              && is_convertible_v<_OtherTy (*)[], element_type (*)[]>\r\n    constexpr explicit(_Extent != dynamic_extent && _OtherExtent == dynamic_extent)\r\n        span(const span<_OtherTy, _OtherExtent>& _Other) noexcept\r\n        : _Mybase(_Other.data(), _Other.size()) {\r\n#if _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (_Extent != dynamic_extent) {\r\n            _STL_VERIFY(_Other.size() == _Extent,\r\n                \"Cannot construct span with static extent from other span as other.size() != extent\");\r\n        }\r\n#endif // _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    // [span.sub] Subviews\r\n    template <size_t _Count>\r\n    _NODISCARD constexpr auto first() const noexcept /* strengthened */ {\r\n        if constexpr (_Extent != dynamic_extent) {\r\n            static_assert(_Count <= _Extent, \"Count out of range in span::first<Count>()\");\r\n        }\r\n#if _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n        else {\r\n            _STL_VERIFY(_Count <= _Mysize, \"Count out of range in span::first<Count>()\");\r\n        }\r\n#endif // _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return span<element_type, _Count>{_Mydata, _Count};\r\n    }\r\n\r\n    _NODISCARD constexpr auto first(const size_type _Count) const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Count <= _Mysize, \"Count out of range in span::first(count)\");\r\n#endif\r\n\r\n        return span<element_type, dynamic_extent>{_Mydata, _Count};\r\n    }\r\n\r\n    template <size_t _Count>\r\n    _NODISCARD constexpr auto last() const noexcept /* strengthened */ {\r\n        if constexpr (_Extent != dynamic_extent) {\r\n            static_assert(_Count <= _Extent, \"Count out of range in span::last<Count>()\");\r\n        }\r\n#if _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n        else {\r\n            _STL_VERIFY(_Count <= _Mysize, \"Count out of range in span::last<Count>()\");\r\n        }\r\n#endif // _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return span<element_type, _Count>{_Mydata + (_Mysize - _Count), _Count};\r\n    }\r\n\r\n    _NODISCARD constexpr auto last(const size_type _Count) const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Count <= _Mysize, \"Count out of range in span::last(count)\");\r\n#endif\r\n\r\n        return span<element_type, dynamic_extent>{_Mydata + (_Mysize - _Count), _Count};\r\n    }\r\n\r\n    template <size_t _Offset, size_t _Count = dynamic_extent>\r\n    _NODISCARD constexpr auto subspan() const noexcept /* strengthened */ {\r\n        if constexpr (_Extent != dynamic_extent) {\r\n            static_assert(_Offset <= _Extent, \"Offset out of range in span::subspan<Offset, Count>()\");\r\n            static_assert(_Count == dynamic_extent || _Count <= _Extent - _Offset,\r\n                \"Count out of range in span::subspan<Offset, Count>()\");\r\n        }\r\n#if _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n        else {\r\n            _STL_VERIFY(_Offset <= _Mysize, \"Offset out of range in span::subspan<Offset, Count>()\");\r\n\r\n            if constexpr (_Count != dynamic_extent) {\r\n                _STL_VERIFY(_Count <= _Mysize - _Offset, \"Count out of range in span::subspan<Offset, Count>()\");\r\n            }\r\n        }\r\n#endif // _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        using _ReturnType = span<element_type,\r\n            _Count != dynamic_extent ? _Count : (_Extent != dynamic_extent ? _Extent - _Offset : dynamic_extent)>;\r\n        return _ReturnType{_Mydata + _Offset, _Count == dynamic_extent ? _Mysize - _Offset : _Count};\r\n    }\r\n\r\n    _NODISCARD constexpr auto subspan(const size_type _Offset, const size_type _Count = dynamic_extent) const noexcept\r\n    /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Offset <= _Mysize, \"Offset out of range in span::subspan(offset, count)\");\r\n        _STL_VERIFY(_Count == dynamic_extent || _Count <= _Mysize - _Offset,\r\n            \"Count out of range in span::subspan(offset, count)\");\r\n#endif // _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        using _ReturnType = span<element_type, dynamic_extent>;\r\n        return _ReturnType{_Mydata + _Offset, _Count == dynamic_extent ? _Mysize - _Offset : _Count};\r\n    }\r\n\r\n    // [span.obs] Observers\r\n    _NODISCARD constexpr size_t size() const noexcept {\r\n        return _Mysize;\r\n    }\r\n\r\n    _NODISCARD constexpr size_type size_bytes() const noexcept {\r\n        // Under _ITERATOR_DEBUG_LEVEL != 0, span's constructors verify that this multiplication won't overflow.\r\n        return _Mysize * sizeof(element_type);\r\n    }\r\n\r\n    _NODISCARD constexpr bool empty() const noexcept {\r\n        return _Mysize == 0;\r\n    }\r\n\r\n    // [span.elem] Element access\r\n    _NODISCARD constexpr reference operator[](const size_type _Off) const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Off < _Mysize, \"span subscript out of range\");\r\n#endif\r\n\r\n        return _Mydata[_Off];\r\n    }\r\n\r\n    _NODISCARD constexpr reference front() const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mysize > 0, \"front() called on empty span\");\r\n#endif\r\n\r\n        return _Mydata[0];\r\n    }\r\n\r\n    _NODISCARD constexpr reference back() const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_SPAN || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mysize > 0, \"back() called on empty span\");\r\n#endif\r\n\r\n        return _Mydata[_Mysize - 1];\r\n    }\r\n\r\n    _NODISCARD constexpr pointer data() const noexcept {\r\n        return _Mydata;\r\n    }\r\n\r\n    // [span.iterators] Iterator support\r\n    _NODISCARD constexpr iterator begin() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        return {_Mydata, _Mydata, _Mydata + _Mysize};\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        return {_Mydata};\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n\r\n    _NODISCARD constexpr iterator end() const noexcept {\r\n        const auto _End = _Mydata + _Mysize;\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        return {_End, _Mydata, _End};\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        return {_End};\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    _NODISCARD constexpr const_iterator cbegin() const noexcept {\r\n        return begin();\r\n    }\r\n\r\n    _NODISCARD constexpr const_iterator cend() const noexcept {\r\n        return end();\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _NODISCARD constexpr reverse_iterator rbegin() const noexcept {\r\n        return reverse_iterator{end()};\r\n    }\r\n\r\n    _NODISCARD constexpr reverse_iterator rend() const noexcept {\r\n        return reverse_iterator{begin()};\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    _NODISCARD constexpr const_reverse_iterator crbegin() const noexcept {\r\n        return rbegin();\r\n    }\r\n\r\n    _NODISCARD constexpr const_reverse_iterator crend() const noexcept {\r\n        return rend();\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _NODISCARD constexpr pointer _Unchecked_begin() const noexcept {\r\n        return _Mydata;\r\n    }\r\n\r\n    _NODISCARD constexpr pointer _Unchecked_end() const noexcept {\r\n        return _Mydata + _Mysize;\r\n    }\r\n};\r\n\r\ntemplate <class _Ty, size_t _Extent>\r\nspan(_Ty (&)[_Extent]) -> span<_Ty, _Extent>;\r\n\r\ntemplate <class _Ty, size_t _Size>\r\nspan(array<_Ty, _Size>&) -> span<_Ty, _Size>;\r\n\r\ntemplate <class _Ty, size_t _Size>\r\nspan(const array<_Ty, _Size>&) -> span<const _Ty, _Size>;\r\n\r\ntemplate <contiguous_iterator _It, class _End>\r\nspan(_It, _End) -> span<remove_reference_t<iter_reference_t<_It>>>;\r\n\r\ntemplate <_RANGES contiguous_range _Rng>\r\nspan(_Rng&&) -> span<remove_reference_t<_RANGES range_reference_t<_Rng>>>;\r\n\r\n#ifdef __cpp_lib_byte\r\n// [span.objectrep] Views of object representation\r\n_EXPORT_STD template <class _Ty, size_t _Extent>\r\n    requires (!is_volatile_v<_Ty>)\r\n_NODISCARD auto as_bytes(span<_Ty, _Extent> _Sp) noexcept {\r\n    using _ReturnType = span<const byte, _Extent == dynamic_extent ? dynamic_extent : sizeof(_Ty) * _Extent>;\r\n    return _ReturnType{reinterpret_cast<const byte*>(_Sp.data()), _Sp.size_bytes()};\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Extent>\r\n    requires (!is_const_v<_Ty> && !is_volatile_v<_Ty>)\r\n_NODISCARD auto as_writable_bytes(span<_Ty, _Extent> _Sp) noexcept {\r\n    using _ReturnType = span<byte, _Extent == dynamic_extent ? dynamic_extent : sizeof(_Ty) * _Extent>;\r\n    return _ReturnType{reinterpret_cast<byte*>(_Sp.data()), _Sp.size_bytes()};\r\n}\r\n#endif // defined(__cpp_lib_byte)\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _SPAN_\r\n"
  },
  {
    "path": "stl/inc/spanstream",
    "content": "// spanstream standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _SPANSTREAM_\r\n#define _SPANSTREAM_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#if !_HAS_CXX23\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <spanstream> are available only with C++23 or later.\");\r\n#else // ^^^ !_HAS_CXX23 / _HAS_CXX23 vvv\r\n#include <__msvc_ostream.hpp>\r\n#include <concepts>\r\n#include <istream>\r\n#include <span>\r\n#include <streambuf>\r\n#include <xutility>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\n// In this file, _STD span is qualified to avoid ambiguity with span() member functions.\r\n// This qualification is consistently used even when it isn't strictly necessary.\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nclass basic_spanbuf : public basic_streambuf<_Elem, _Traits> {\r\nprivate:\r\n    using _Mysb = basic_streambuf<_Elem, _Traits>;\r\n\r\npublic:\r\n    using char_type   = _Elem;\r\n    using int_type    = _Traits::int_type;\r\n    using pos_type    = _Traits::pos_type;\r\n    using off_type    = _Traits::off_type;\r\n    using traits_type = _Traits;\r\n\r\n    // N4950 [spanbuf.cons], constructors\r\n    basic_spanbuf() = default;\r\n\r\n    explicit basic_spanbuf(ios_base::openmode _Which) : _Mysb(), _Mode(_Which) {}\r\n\r\n    explicit basic_spanbuf(_STD span<_Elem> _Span, ios_base::openmode _Which = ios_base::in | ios_base::out)\r\n        : _Mysb(), _Mode(_Which), _Buf() {\r\n        this->span(_Span);\r\n    }\r\n\r\n    basic_spanbuf(const basic_spanbuf&) = delete;\r\n    basic_spanbuf(basic_spanbuf&& _Right)\r\n        : _Mysb(_STD move(_Right)), _Mode(_Right._Mode), _Buf(_STD exchange(_Right._Buf, {})) {\r\n        _Right.setp(nullptr, nullptr, nullptr);\r\n        _Right.setg(nullptr, nullptr, nullptr);\r\n    }\r\n\r\n    // N4950 [spanbuf.assign], assignment and swap\r\n    basic_spanbuf& operator=(const basic_spanbuf&) = delete;\r\n\r\n    basic_spanbuf& operator=(basic_spanbuf&& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Buf = _STD span<_Elem>{};\r\n            this->setp(nullptr, nullptr, nullptr);\r\n            this->setg(nullptr, nullptr, nullptr);\r\n            this->swap(_Right);\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    void swap(basic_spanbuf& _Right) noexcept /* strengthened */ {\r\n        _Mysb::swap(_Right);\r\n        _STD swap(_Mode, _Right._Mode);\r\n        _STD swap(_Buf, _Right._Buf);\r\n    }\r\n\r\n    // N4950 [spanbuf.members], member functions\r\n    _NODISCARD _STD span<_Elem> span() const noexcept {\r\n        if (_Mode & ios_base::out) {\r\n            return _STD span<_Elem>{_Mysb::pbase(), _Mysb::pptr()};\r\n        }\r\n\r\n        return _Buf;\r\n    }\r\n\r\n    void span(_STD span<_Elem> _Span) noexcept {\r\n        _Buf              = _Span;\r\n        const auto _First = _Buf.data();\r\n        const auto _Last  = _First + _Buf.size();\r\n        if (_Mode & ios_base::out) {\r\n            if (_Mode & ios_base::ate) {\r\n                _Mysb::setp(_First, _Last, _Last);\r\n            } else {\r\n                _Mysb::setp(_First, _First, _Last);\r\n            }\r\n        }\r\n\r\n        if (_Mode & ios_base::in) {\r\n            _Mysb::setg(_First, _First, _Last);\r\n        }\r\n    }\r\n\r\nprotected:\r\n    // N4950 [spanbuf.virtuals], overridden virtual functions\r\n    pos_type seekoff(\r\n        off_type _Off, ios_base::seekdir _Way, ios_base::openmode _Which = ios_base::in | ios_base::out) override {\r\n        const bool _Sequence_in  = _Which & ios_base::in;\r\n        const bool _Sequence_out = _Which & ios_base::out;\r\n        switch (_Way) {\r\n        case ios_base::beg:\r\n            // N4950 [spanbuf.virtuals]/4.1 baseoff = 0\r\n            if (static_cast<size_t>(_Off) > _Buf.size()) { // negative wraparound to positive to save a compare\r\n                return pos_type{off_type{-1}}; // N4950 [spanbuf.virtuals]/5 report failure\r\n            }\r\n\r\n            break;\r\n        case ios_base::end:\r\n            {\r\n                // N4950 [spanbuf.virtuals]/4.3 baseoff =\r\n                const auto _Baseoff = (_Mode & ios_base::out) && !(_Mode & ios_base::in)\r\n                                        ? static_cast<off_type>(_Mysb::pptr() - _Mysb::pbase())\r\n                                        : static_cast<off_type>(_Buf.size());\r\n                if (_Off > _STD _Max_limit<off_type>() - _Baseoff) { // overflow, _Baseoff is always non-negative\r\n                    return pos_type{off_type{-1}}; // report failure\r\n                }\r\n\r\n                _Off += _Baseoff;\r\n                if (static_cast<size_t>(_Off) > _Buf.size()) { // negative wraparound to positive to save a compare\r\n                    return pos_type{off_type{-1}}; // N4950 [spanbuf.virtuals]/5 report failure\r\n                }\r\n\r\n                break;\r\n            }\r\n        case ios_base::cur:\r\n            if (_Sequence_in && _Sequence_out) {\r\n                return pos_type{off_type{-1}}; // report failure\r\n            } else if (_Sequence_in || _Sequence_out) {\r\n                const off_type _Oldoff  = _Sequence_in ? static_cast<off_type>(_Mysb::gptr() - _Mysb::eback())\r\n                                                       : static_cast<off_type>(_Mysb::pptr() - _Mysb::pbase());\r\n                const off_type _Oldleft = static_cast<off_type>(_Buf.size() - _Oldoff);\r\n                if (_Off < -_Oldoff || _Off > _Oldleft) { // out of bounds\r\n                    return pos_type{off_type{-1}};\r\n                }\r\n\r\n                _Off += _Oldoff;\r\n            } else {\r\n                return pos_type{off_type{-1}}; // report failure\r\n            }\r\n            break;\r\n        default:\r\n            return pos_type{off_type{-1}}; // report failure\r\n        }\r\n\r\n        // N4950 [spanbuf.virtuals]/4: For a sequence to be positioned, if its next pointer is a null pointer and newoff\r\n        // is not equal to 0, the positioning operation fails.\r\n        if (_Off != 0 && ((_Sequence_in && !_Mysb::gptr()) || (_Sequence_out && !_Mysb::pptr()))) {\r\n            return pos_type{off_type{-1}}; // report failure\r\n        }\r\n\r\n        if (_Sequence_in) {\r\n            _Mysb::gbump(static_cast<int>(_Off - (_Mysb::gptr() - _Mysb::eback())));\r\n        }\r\n\r\n        if (_Sequence_out) {\r\n            _Mysb::pbump(static_cast<int>(_Off - (_Mysb::pptr() - _Mysb::pbase())));\r\n        }\r\n\r\n        return pos_type{_Off};\r\n    }\r\n\r\n    pos_type seekpos(pos_type _Pos, ios_base::openmode _Which = ios_base::in | ios_base::out) override {\r\n        return seekoff(off_type{_Pos}, ios_base::beg, _Which);\r\n    }\r\n\r\n    _Mysb* setbuf(_Elem* _Buffer, streamsize _Count) override {\r\n        this->span(_STD span<_Elem>{_Buffer, static_cast<size_t>(_Count)});\r\n        return this;\r\n    }\r\n\r\nprivate:\r\n    ios_base::openmode _Mode{ios_base::in | ios_base::out};\r\n    _STD span<_Elem> _Buf{};\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nvoid swap(basic_spanbuf<_Elem, _Traits>& _Left, basic_spanbuf<_Elem, _Traits>& _Right) noexcept /* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\ntemplate <class _Elem, size_t _Extent>\r\nspan<_Elem, _Extent> _As_nonconst_span(const span<const _Elem, _Extent> _Span) noexcept {\r\n    return span<_Elem, _Extent>{const_cast<_Elem*>(_Span.data()), _Span.size()};\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nclass basic_ispanstream : public basic_istream<_Elem, _Traits> {\r\nprivate:\r\n    using _Mybase = basic_istream<_Elem, _Traits>;\r\n    using _Mysb   = basic_spanbuf<_Elem, _Traits>;\r\n\r\npublic:\r\n    using char_type   = _Elem;\r\n    using int_type    = _Traits::int_type;\r\n    using pos_type    = _Traits::pos_type;\r\n    using off_type    = _Traits::off_type;\r\n    using traits_type = _Traits;\r\n\r\n    // N4950 [ispanstream.cons], constructors\r\n    explicit basic_ispanstream(_STD span<_Elem> _Span, ios_base::openmode _Which = ios_base::in)\r\n        : _Mybase(_STD addressof(_Buf)), _Buf(_Span, _Which | ios_base::in) {}\r\n\r\n    basic_ispanstream(const basic_ispanstream&) = delete;\r\n\r\n    basic_ispanstream(basic_ispanstream&& _Right) : _Mybase(_STD move(_Right)), _Buf(_STD move(_Right._Buf)) {\r\n        _Mybase::set_rdbuf(_STD addressof(_Buf));\r\n    }\r\n\r\n    template <_RANGES borrowed_range _ReadOnlyRange>\r\n        requires (\r\n            !convertible_to<_ReadOnlyRange, _STD span<_Elem>> && convertible_to<_ReadOnlyRange, _STD span<const _Elem>>)\r\n    explicit basic_ispanstream(_ReadOnlyRange&& _Range)\r\n        : basic_ispanstream(\r\n              _STD _As_nonconst_span(static_cast<_STD span<const _Elem>>(_STD forward<_ReadOnlyRange>(_Range)))) {}\r\n\r\n    basic_ispanstream& operator=(const basic_ispanstream&) = delete;\r\n\r\n    basic_ispanstream& operator=(basic_ispanstream&& _Right) noexcept /* strengthened */ {\r\n        _Mybase::swap(_Right);\r\n        _Buf.swap(_Right._Buf);\r\n        return *this;\r\n    }\r\n\r\n    // N4950 [ispanstream.swap], swap\r\n    void swap(basic_ispanstream& _Right) noexcept /* strengthened */ {\r\n        _Mybase::swap(_Right);\r\n        _Buf.swap(_Right._Buf);\r\n    }\r\n\r\n    // N4950 [ispanstream.members], member functions\r\n    _NODISCARD _Mysb* rdbuf() const noexcept {\r\n        return const_cast<_Mysb*>(_STD addressof(_Buf));\r\n    }\r\n\r\n    _NODISCARD _STD span<const _Elem> span() const noexcept {\r\n        return rdbuf()->span();\r\n    }\r\n\r\n    void span(_STD span<_Elem> _Span) noexcept {\r\n        rdbuf()->span(_Span);\r\n    }\r\n\r\n    template <_RANGES borrowed_range _ReadOnlyRange>\r\n        requires (\r\n            !convertible_to<_ReadOnlyRange, _STD span<_Elem>> && convertible_to<_ReadOnlyRange, _STD span<const _Elem>>)\r\n    void span(_ReadOnlyRange&& _Range) noexcept {\r\n        const auto _Sp = static_cast<_STD span<const _Elem>>(_STD forward<_ReadOnlyRange>(_Range));\r\n        rdbuf()->span(_STD _As_nonconst_span(_Sp));\r\n    }\r\n\r\nprivate:\r\n    _Mysb _Buf;\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nvoid swap(basic_ispanstream<_Elem, _Traits>& _Left, basic_ispanstream<_Elem, _Traits>& _Right) noexcept\r\n/* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nclass basic_ospanstream : public basic_ostream<_Elem, _Traits> {\r\nprivate:\r\n    using _Mybase = basic_ostream<_Elem, _Traits>;\r\n    using _Mysb   = basic_spanbuf<_Elem, _Traits>;\r\n\r\npublic:\r\n    using char_type   = _Elem;\r\n    using int_type    = _Traits::int_type;\r\n    using pos_type    = _Traits::pos_type;\r\n    using off_type    = _Traits::off_type;\r\n    using traits_type = _Traits;\r\n\r\n    // N4950 [ospanstream.cons], constructors\r\n    explicit basic_ospanstream(_STD span<_Elem> _Span, ios_base::openmode _Which = ios_base::out)\r\n        : _Mybase(_STD addressof(_Buf)), _Buf(_Span, _Which | ios_base::out) {}\r\n\r\n    basic_ospanstream(const basic_ospanstream&) = delete;\r\n\r\n    basic_ospanstream(basic_ospanstream&& _Right) : _Mybase(_STD move(_Right)), _Buf(_STD move(_Right._Buf)) {\r\n        _Mybase::set_rdbuf(_STD addressof(_Buf));\r\n    }\r\n\r\n    basic_ospanstream& operator=(const basic_ospanstream&) = delete;\r\n\r\n    basic_ospanstream& operator=(basic_ospanstream&& _Right) noexcept /* strengthened */ {\r\n        _Mybase::swap(_Right);\r\n        _Buf.swap(_Right._Buf);\r\n        return *this;\r\n    }\r\n\r\n    // N4950 [ospanstream.swap], swap\r\n    void swap(basic_ospanstream& _Right) noexcept /* strengthened */ {\r\n        _Mybase::swap(_Right);\r\n        _Buf.swap(_Right._Buf);\r\n    }\r\n\r\n    // N4950 [ospanstream.members], member functions\r\n    _NODISCARD _Mysb* rdbuf() const noexcept {\r\n        return const_cast<_Mysb*>(_STD addressof(_Buf));\r\n    }\r\n\r\n    _NODISCARD _STD span<_Elem> span() const noexcept {\r\n        return rdbuf()->span();\r\n    }\r\n\r\n    void span(_STD span<_Elem> _Span) noexcept {\r\n        rdbuf()->span(_Span);\r\n    }\r\n\r\nprivate:\r\n    _Mysb _Buf;\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nvoid swap(basic_ospanstream<_Elem, _Traits>& _Left, basic_ospanstream<_Elem, _Traits>& _Right) noexcept\r\n/* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nclass basic_spanstream : public basic_iostream<_Elem, _Traits> {\r\nprivate:\r\n    using _Mybase = basic_iostream<_Elem, _Traits>;\r\n    using _Mysb   = basic_spanbuf<_Elem, _Traits>;\r\n\r\npublic:\r\n    using char_type   = _Elem;\r\n    using int_type    = _Traits::int_type;\r\n    using pos_type    = _Traits::pos_type;\r\n    using off_type    = _Traits::off_type;\r\n    using traits_type = _Traits;\r\n\r\n    // N4950 [spanstream.cons], constructors\r\n    explicit basic_spanstream(_STD span<_Elem> _Span, ios_base::openmode _Which = ios_base::out | ios_base::in)\r\n        : _Mybase(_STD addressof(_Buf)), _Buf(_Span, _Which) {}\r\n\r\n    basic_spanstream(const basic_spanstream&) = delete;\r\n\r\n    basic_spanstream(basic_spanstream&& _Right) : _Mybase(_STD move(_Right)), _Buf(_STD move(_Right._Buf)) {\r\n        _Mybase::set_rdbuf(_STD addressof(_Buf));\r\n    }\r\n\r\n    basic_spanstream& operator=(const basic_spanstream&) = delete;\r\n\r\n    basic_spanstream& operator=(basic_spanstream&& _Right) noexcept /* strengthened */ {\r\n        _Mybase::swap(_Right);\r\n        _Buf.swap(_Right._Buf);\r\n        return *this;\r\n    }\r\n\r\n    // N4950 [spanstream.swap], swap\r\n    void swap(basic_spanstream& _Right) noexcept /* strengthened */ {\r\n        _Mybase::swap(_Right);\r\n        _Buf.swap(_Right._Buf);\r\n    }\r\n\r\n    // N4950 [spanstream.members], member functions\r\n    _NODISCARD _Mysb* rdbuf() const noexcept {\r\n        return const_cast<_Mysb*>(_STD addressof(_Buf));\r\n    }\r\n\r\n    _NODISCARD _STD span<_Elem> span() const noexcept {\r\n        return rdbuf()->span();\r\n    }\r\n\r\n    void span(_STD span<_Elem> _Span) noexcept {\r\n        rdbuf()->span(_Span);\r\n    }\r\n\r\nprivate:\r\n    _Mysb _Buf;\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits>\r\nvoid swap(basic_spanstream<_Elem, _Traits>& _Left, basic_spanstream<_Elem, _Traits>& _Right) noexcept\r\n/* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _SPANSTREAM_\r\n"
  },
  {
    "path": "stl/inc/sstream",
    "content": "// sstream standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _SSTREAM_\r\n#define _SSTREAM_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <istream>\r\n#include <string>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n_STD_BEGIN\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nclass basic_stringbuf\r\n    : public basic_streambuf<_Elem, _Traits> { // stream buffer maintaining an allocated character array\r\npublic:\r\n    using allocator_type = _Alloc;\r\n    using _Mysb          = basic_streambuf<_Elem, _Traits>;\r\n    using _Mystr         = basic_string<_Elem, _Traits, _Alloc>;\r\n    using _Mysize_type   = typename _Mystr::size_type;\r\n\r\n#if _HAS_CXX20\r\n    using _Mystr_view = basic_string_view<_Elem, _Traits>;\r\n#endif // _HAS_CXX20\r\n\r\n    basic_stringbuf() : _Seekhigh(nullptr), _Mystate(_Getstate(ios_base::in | ios_base::out)), _Al() {}\r\n\r\n    explicit basic_stringbuf(ios_base::openmode _Mode) : _Seekhigh(nullptr), _Mystate(_Getstate(_Mode)), _Al() {}\r\n\r\n    explicit basic_stringbuf(const _Mystr& _Str, ios_base::openmode _Mode = ios_base::in | ios_base::out)\r\n        : _Al(_Str.get_allocator()) {\r\n        _Init(_Str.c_str(), _Str.size(), _Getstate(_Mode));\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    explicit basic_stringbuf(const _Alloc& _Al_) : basic_stringbuf(ios_base::in | ios_base::out, _Al_) {}\r\n\r\n    basic_stringbuf(ios_base::openmode _Mode, const _Alloc& _Al_)\r\n        : _Seekhigh(nullptr), _Mystate(_Getstate(_Mode)), _Al(_Al_) {}\r\n\r\n    explicit basic_stringbuf(_Mystr&& _Str, ios_base::openmode _Mode = ios_base::in | ios_base::out)\r\n        : _Al(_STD move(_Str._Getal())) {\r\n        _Init_string_inplace(_STD move(_Str), _Getstate(_Mode));\r\n    }\r\n\r\n    template <class _Alloc2>\r\n    basic_stringbuf(const basic_string<_Elem, _Traits, _Alloc2>& _Str, ios_base::openmode _Mode, const _Alloc& _Al_)\r\n        : _Al(_Al_) {\r\n        _Init(_Str.c_str(), _Convert_size<_Mysize_type>(_Str.size()), _Getstate(_Mode));\r\n    }\r\n\r\n    template <class _Alloc2>\r\n    basic_stringbuf(const basic_string<_Elem, _Traits, _Alloc2>& _Str, const _Alloc& _Al_)\r\n        : basic_stringbuf(_Str, ios_base::in | ios_base::out, _Al_) {}\r\n\r\n    template <class _Alloc2>\r\n        requires (!is_same_v<_Alloc2, _Alloc>)\r\n    explicit basic_stringbuf(\r\n        const basic_string<_Elem, _Traits, _Alloc2>& _Str, ios_base::openmode _Mode = ios_base::in | ios_base::out)\r\n        : basic_stringbuf(_Str, _Mode, _Alloc{}) {}\r\n\r\n    basic_stringbuf(basic_stringbuf&& _Right, const _Alloc& _Al_) : _Seekhigh(nullptr), _Mystate(0), _Al(_Al_) {\r\n        if constexpr (!allocator_traits<_Alloc>::is_always_equal::value) {\r\n            if (_Al != _Right._Al) {\r\n                _Copy_into_self_and_tidy(_STD move(_Right));\r\n                return;\r\n            }\r\n        }\r\n\r\n        _Take_contents(_STD move(_Right));\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    basic_stringbuf(basic_stringbuf&& _Right)\r\n        : _Seekhigh(_STD exchange(_Right._Seekhigh, nullptr)), _Mystate(_STD exchange(_Right._Mystate, 0)),\r\n          _Al(_Right._Al) {\r\n        _Mysb::swap(_Right);\r\n    }\r\n\r\n    basic_stringbuf& operator=(basic_stringbuf&& _Right)\r\n        noexcept(_Choose_pocma_v<_Alloc> != _Pocma_values::_No_propagate_allocators) /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Assign_rv_no_alias(_STD move(_Right));\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    void _Take_contents(basic_stringbuf&& _Right) noexcept {\r\n        // pre: *this holds no dynamic buffer and _Al == _Right._Al\r\n        _Seekhigh = _STD exchange(_Right._Seekhigh, nullptr);\r\n        _Mystate  = _STD exchange(_Right._Mystate, 0);\r\n        _Mysb::swap(_Right);\r\n    }\r\n\r\n    void _Copy_into_self_and_tidy(basic_stringbuf&& _Right) {\r\n        // pre: *this holds no dynamic buffer and _Al != _Right._Al\r\n        if ((_Right._Mystate & _Allocated) == 0) {\r\n            return;\r\n        }\r\n\r\n        const auto _Right_data     = _Right._Mysb::eback();\r\n        const auto _Right_capacity = static_cast<typename allocator_traits<_Alloc>::size_type>(\r\n            (_Right._Mysb::pptr() ? _Right._Mysb::epptr() : _Right._Mysb::egptr()) - _Right_data);\r\n\r\n        auto _New_capacity   = _Right_capacity;\r\n        const auto _New_data = _STD _Unfancy(_STD _Allocate_at_least_helper(_Al, _New_capacity));\r\n\r\n        _Mysb::setg(_New_data, _New_data + (_Right._Mysb::gptr() - _Right_data),\r\n            _New_data + (_Right._Mysb::egptr() - _Right_data));\r\n        if (_Right._Mysb::pbase() != nullptr) {\r\n            const auto _Pbase_diff = _Right._Mysb::pbase() - _Right_data;\r\n            const auto _Pptr_diff  = _Right._Mysb::pptr() - _Right_data;\r\n            const auto _Epptr_diff = _Right._Mysb::epptr() - _Right_data;\r\n            _Mysb::setp(_New_data + _Pbase_diff, _New_data + _Pptr_diff, _New_data + _Epptr_diff);\r\n        } else {\r\n            _Mysb::setp(nullptr, nullptr, nullptr);\r\n        }\r\n\r\n        const auto _Right_view = _Right._Get_buffer_view();\r\n        if (_Right_view._Ptr != nullptr) {\r\n            _Traits::copy(_New_data + (_Right_view._Ptr - _Right_data), _Right_view._Ptr, _Right_view._Size);\r\n        }\r\n\r\n        _Seekhigh = _New_data + _New_capacity;\r\n        _Mystate  = _Right._Mystate;\r\n\r\n        _Right._Tidy();\r\n    }\r\n\r\n    void _Assign_rv_no_alias(basic_stringbuf&& _Right)\r\n        noexcept(_Choose_pocma_v<_Alloc> != _Pocma_values::_No_propagate_allocators) {\r\n        // pre: this != std::addressof(_Right)\r\n        _Tidy();\r\n        if constexpr (_Choose_pocma_v<_Alloc> == _Pocma_values::_No_propagate_allocators) {\r\n            if (_Al == _Right._Al) {\r\n                _Take_contents(_STD move(_Right));\r\n            } else {\r\n                _Copy_into_self_and_tidy(_STD move(_Right));\r\n            }\r\n        } else {\r\n            _Pocma(_Al, _Right._Al);\r\n            _Take_contents(_STD move(_Right));\r\n        }\r\n    }\r\n\r\n    void swap(basic_stringbuf& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            if constexpr (!allocator_traits<_Alloc>::propagate_on_container_swap::value) {\r\n                _STL_ASSERT(\r\n                    _Al == _Right._Al, \"The allocators of basic_stringbuf should propagate or be equal on swap.\");\r\n            }\r\n\r\n            _Mysb::swap(_Right);\r\n            _STD swap(_Seekhigh, _Right._Seekhigh);\r\n            _STD swap(_Mystate, _Right._Mystate);\r\n            // The same as basic_string::swap\r\n            _Pocs(_Al, _Right._Al);\r\n        }\r\n    }\r\n\r\n    basic_stringbuf(const basic_stringbuf&)            = delete;\r\n    basic_stringbuf& operator=(const basic_stringbuf&) = delete;\r\n\r\n    ~basic_stringbuf() noexcept override {\r\n        _Tidy();\r\n    }\r\n\r\n    enum { // constants for bits in stream state\r\n        _Allocated   = 1, // set if character array storage has been allocated, eback() points to allocated storage\r\n        _Constant    = 2, // set if character array nonmutable\r\n        _Noread      = 4, // set if character array cannot be read\r\n        _Append      = 8, // set if all writes are appends\r\n        _Atend       = 16, // set if initial writes are appends\r\n        _From_rvalue = 32 // set if character array is released from an rvalue of basic_string\r\n    };\r\n\r\n    using int_type = typename _Traits::int_type;\r\n    using pos_type = typename _Traits::pos_type;\r\n    using off_type = typename _Traits::off_type;\r\n\r\n    struct _Buffer_view {\r\n        _Elem* _Ptr;\r\n        _Mysize_type _Size;\r\n        _Mysize_type _Res;\r\n    };\r\n\r\n    _NODISCARD _Buffer_view _Get_buffer_view() const noexcept {\r\n        _Buffer_view _Result{};\r\n        if ((!(_Mystate & _Constant) || (_Mystate & _From_rvalue)) && _Mysb::pptr()) {\r\n            // writable, make string view from write buffer\r\n            const auto _Base = _Mysb::pbase();\r\n            _Result._Ptr     = _Base;\r\n            _Result._Size    = static_cast<_Mysize_type>((_STD max) (_Mysb::pptr(), _Seekhigh) - _Base);\r\n            _Result._Res     = static_cast<_Mysize_type>(_Mysb::epptr() - _Base);\r\n        } else if (!(_Mystate & _Noread) && _Mysb::gptr()) {\r\n            // readable, make string view from read buffer\r\n            const auto _Base = _Mysb::eback();\r\n            _Result._Ptr     = _Base;\r\n            _Result._Size    = static_cast<_Mysize_type>(_Mysb::egptr() - _Base);\r\n            _Result._Res     = _Result._Size;\r\n        }\r\n        return _Result;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD _Mystr str() const&\r\n#else\r\n    _NODISCARD _Mystr str() const\r\n#endif\r\n    {\r\n        _Mystr _Result(_Al);\r\n        const auto _View = _Get_buffer_view();\r\n        if (_View._Ptr) {\r\n            _Result.assign(_View._Ptr, _View._Size);\r\n        }\r\n        return _Result;\r\n    }\r\n\r\n    void str(const _Mystr& _Newstr) { // replace character array from string\r\n        _Tidy();\r\n        _Init(_Newstr.c_str(), _Newstr.size(), _Mystate);\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    template <_Allocator_for_container _Alloc2>\r\n    _NODISCARD basic_string<_Elem, _Traits, _Alloc2> str(const _Alloc2& _Al) const {\r\n        return basic_string<_Elem, _Traits, _Alloc2>{view(), _Al};\r\n    }\r\n\r\n    // The buffer cannot be moved to a string directly, because\r\n    // the buffer may already be full, and the terminating char is not '\\0'.\r\n    // In that case, copy the string as usual.\r\n    _NODISCARD _Mystr str() && {\r\n        _Mystr _Result{_Al};\r\n        const auto _View = _Get_buffer_view();\r\n        // _Size cannot be larger than _Res, but it could be equal,\r\n        // because basic_stringbuf doesn't allocate for the terminating '\\0'.\r\n        if (_View._Size == _View._Res) {\r\n            // the buffer is full\r\n            _Result.assign(_View._Ptr, _View._Size);\r\n        } else {\r\n            if (_Result._Move_assign_from_buffer(_View._Ptr, _View._Size, _View._Res)) {\r\n                _Mystate &= ~_Allocated;\r\n            }\r\n        }\r\n\r\n        _Tidy();\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD _Mystr_view view() const noexcept {\r\n        const auto _View = _Get_buffer_view();\r\n        return _Mystr_view{_View._Ptr, _View._Size};\r\n    }\r\n\r\n    template <class _Alloc2>\r\n        requires (!is_same_v<_Alloc2, _Alloc>)\r\n    void str(const basic_string<_Elem, _Traits, _Alloc2>& _Newstr) {\r\n        _Tidy();\r\n        _Init(_Newstr.c_str(), _Newstr.size(), _Mystate);\r\n    }\r\n\r\n    void str(_Mystr&& _Newstr) {\r\n        auto& _Newstr_al          = _Newstr._Getal();\r\n        constexpr auto _Pocma_val = _Choose_pocma_v<_Alloc>;\r\n        if constexpr (_Pocma_val == _Pocma_values::_No_propagate_allocators) {\r\n            if (_Al != _Newstr_al) {\r\n                _Tidy();\r\n                _Init(_Newstr.c_str(), _Newstr.size(), _Mystate);\r\n                return;\r\n            }\r\n        }\r\n\r\n        _Tidy();\r\n        _Pocma(_Al, _Newstr_al);\r\n        _Init_string_inplace(_STD move(_Newstr), _Mystate);\r\n    }\r\n\r\n    _NODISCARD allocator_type get_allocator() const noexcept {\r\n        return _Al;\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\nprotected:\r\n    int_type overflow(int_type _Meta = _Traits::eof()) override { // put an element to stream\r\n        if (_Mystate & _Constant) {\r\n            return _Traits::eof(); // array nonmutable, fail\r\n        }\r\n\r\n        if (_Traits::eq_int_type(_Traits::eof(), _Meta)) {\r\n            return _Traits::not_eof(_Meta); // EOF, return success code\r\n        }\r\n\r\n        const auto _Pptr  = _Mysb::pptr();\r\n        const auto _Epptr = _Mysb::epptr();\r\n        if (_Pptr && _Pptr < _Epptr) { // room in buffer, store it\r\n            *_Mysb::_Pninc() = _Traits::to_char_type(_Meta);\r\n            _Seekhigh        = _Pptr + 1;\r\n            return _Meta;\r\n        }\r\n\r\n        // grow buffer and store element\r\n        _Mysize_type _Oldsize = 0;\r\n        const auto _Oldptr    = _Mysb::eback();\r\n        if (_Pptr) {\r\n            _Oldsize = static_cast<_Mysize_type>(_Epptr - _Oldptr);\r\n        }\r\n\r\n        _Mysize_type _Newsize;\r\n        if (_Oldsize < _MINSIZE) {\r\n            _Newsize = _MINSIZE;\r\n        } else if (_Oldsize < INT_MAX / 2) { // grow by 50 percent\r\n            _Newsize = _Oldsize << 1;\r\n        } else if (_Oldsize < INT_MAX) {\r\n            _Newsize = INT_MAX;\r\n        } else { // buffer can't grow, fail\r\n            return _Traits::eof();\r\n        }\r\n\r\n        const auto _Newptr = _Unfancy(_Allocate_at_least_helper(_Al, _Newsize));\r\n        _Traits::copy(_Newptr, _Oldptr, _Oldsize);\r\n\r\n        const auto _New_pnext = _Newptr + _Oldsize;\r\n        _Seekhigh             = _New_pnext + 1; // to include _Meta\r\n\r\n        _Mysb::setp(_Newptr, _New_pnext, _Newptr + _Newsize);\r\n        if (_Mystate & _Noread) { // maintain eback() == allocated pointer invariant\r\n            _Mysb::setg(_Newptr, _Newptr, _Newptr);\r\n        } else { // if readable, set the get area to initialized region\r\n            _Mysb::setg(_Newptr, _Newptr + (_Mysb::gptr() - _Oldptr), _Seekhigh);\r\n        }\r\n\r\n        if (_Mystate & _Allocated) {\r\n            _Al.deallocate(_Ptr_traits::pointer_to(*_Oldptr), _Oldsize);\r\n        }\r\n\r\n        _Mystate |= _Allocated;\r\n        *_Mysb::_Pninc() = _Traits::to_char_type(_Meta);\r\n        return _Meta;\r\n    }\r\n\r\n    int_type pbackfail(int_type _Meta = _Traits::eof()) override { // put an element back to stream\r\n        const auto _Gptr = _Mysb::gptr();\r\n        if (!_Gptr || _Gptr <= _Mysb::eback()\r\n            || (!_Traits::eq_int_type(_Traits::eof(), _Meta) && !_Traits::eq(_Traits::to_char_type(_Meta), _Gptr[-1])\r\n                && (_Mystate & _Constant))) { // can't put back, fail\r\n            return _Traits::eof();\r\n        }\r\n\r\n        // back up one position and store put-back character\r\n        _Mysb::gbump(-1);\r\n        if (!_Traits::eq_int_type(_Traits::eof(), _Meta)) {\r\n            *_Mysb::gptr() = _Traits::to_char_type(_Meta);\r\n        }\r\n\r\n        return _Traits::not_eof(_Meta);\r\n    }\r\n\r\n    int_type underflow() override { // get an element from stream, but don't point past it\r\n        const auto _Gptr = _Mysb::gptr();\r\n        if (!_Gptr) { // no character buffer, fail\r\n            return _Traits::eof();\r\n        }\r\n\r\n        if (_Gptr < _Mysb::egptr()) {\r\n            return _Traits::to_int_type(*_Gptr);\r\n        }\r\n\r\n        // try to add initialized characters from the put area into the get area\r\n        const auto _Pptr = _Mysb::pptr();\r\n        if (!_Pptr || (_Mystate & _Noread)) { // no put area or read disallowed\r\n            return _Traits::eof();\r\n        }\r\n\r\n        const auto _Local_highwater = (_STD max) (_Seekhigh, _Pptr);\r\n        if (_Local_highwater <= _Gptr) { // nothing in the put area to take\r\n            return _Traits::eof();\r\n        }\r\n\r\n        _Seekhigh = _Local_highwater;\r\n        _Mysb::setg(_Mysb::eback(), _Mysb::gptr(), _Local_highwater);\r\n        return _Traits::to_int_type(*_Mysb::gptr());\r\n    }\r\n\r\n    pos_type seekoff(\r\n        off_type _Off, ios_base::seekdir _Way, ios_base::openmode _Mode = ios_base::in | ios_base::out) override {\r\n        const bool _Need_read_but_cannot  = (_Mode & ios_base::in) != 0 && (_Mystate & _Noread) != 0;\r\n        const bool _Need_write_but_cannot = (_Mode & ios_base::out) != 0 && (_Mystate & _Constant) != 0;\r\n        if (_Need_read_but_cannot || _Need_write_but_cannot) {\r\n            return pos_type{off_type{-1}};\r\n        }\r\n\r\n        // change position by _Off, according to _Way, _Mode\r\n        const auto _Gptr_old = _Mysb::gptr();\r\n        const auto _Pptr_old = (_Mystate & _Constant) ? nullptr : _Mysb::pptr();\r\n        if (_Pptr_old && _Seekhigh < _Pptr_old) { // update high-water pointer\r\n            _Seekhigh = _Pptr_old;\r\n        }\r\n\r\n        const auto _Seeklow  = _Mysb::eback();\r\n        const auto _Seekdist = _Seekhigh - _Seeklow;\r\n        off_type _Newoff;\r\n        switch (_Way) {\r\n        case ios_base::beg:\r\n            _Newoff = 0;\r\n            break;\r\n        case ios_base::end:\r\n            _Newoff = _Seekdist;\r\n            break;\r\n        case ios_base::cur:\r\n            {\r\n                constexpr auto _Both = ios_base::in | ios_base::out;\r\n                if ((_Mode & _Both) != _Both) { // prohibited by N4950 [tab:stringbuf.seekoff.pos]\r\n                    if (_Mode & ios_base::in) {\r\n                        if (_Gptr_old || !_Seeklow) {\r\n                            _Newoff = _Gptr_old - _Seeklow;\r\n                            break;\r\n                        }\r\n                    } else if ((_Mode & ios_base::out) && (_Pptr_old || !_Seeklow)) {\r\n                        _Newoff = _Pptr_old - _Seeklow;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            _FALLTHROUGH;\r\n        default:\r\n            return pos_type{off_type{-1}};\r\n        }\r\n\r\n        if (static_cast<unsigned long long>(_Off) + _Newoff > static_cast<unsigned long long>(_Seekdist)) {\r\n            return pos_type{off_type{-1}};\r\n        }\r\n\r\n        _Off += _Newoff;\r\n        if (_Off != 0 && (((_Mode & ios_base::in) && !_Gptr_old) || ((_Mode & ios_base::out) && !_Pptr_old))) {\r\n            return pos_type{off_type{-1}};\r\n        }\r\n\r\n        const auto _Newptr = _Seeklow + _Off; // may perform nullptr + 0\r\n        if ((_Mode & ios_base::in) && _Gptr_old) {\r\n            _Mysb::setg(_Seeklow, _Newptr, _Seekhigh);\r\n        }\r\n\r\n        if ((_Mode & ios_base::out) && _Pptr_old) {\r\n            _Mysb::setp(_Seeklow, _Newptr, _Mysb::epptr());\r\n        }\r\n\r\n        return pos_type{_Off};\r\n    }\r\n\r\n    pos_type seekpos(pos_type _Pos, ios_base::openmode _Mode = ios_base::in | ios_base::out) override {\r\n        const bool _Need_read_but_cannot  = (_Mode & ios_base::in) != 0 && (_Mystate & _Noread) != 0;\r\n        const bool _Need_write_but_cannot = (_Mode & ios_base::out) != 0 && (_Mystate & _Constant) != 0;\r\n        if (_Need_read_but_cannot || _Need_write_but_cannot) {\r\n            return pos_type{off_type{-1}};\r\n        }\r\n\r\n        // change position to _Pos, according to _Mode\r\n        const auto _Off      = static_cast<streamoff>(_Pos);\r\n        const auto _Gptr_old = _Mysb::gptr();\r\n        const auto _Pptr_old = (_Mystate & _Constant) ? nullptr : _Mysb::pptr();\r\n        if (_Pptr_old && _Seekhigh < _Pptr_old) { // update high-water pointer\r\n            _Seekhigh = _Pptr_old;\r\n        }\r\n\r\n        const auto _Seeklow  = _Mysb::eback();\r\n        const auto _Seekdist = _Seekhigh - _Seeklow;\r\n        if (static_cast<unsigned long long>(_Off) > static_cast<unsigned long long>(_Seekdist)) {\r\n            return pos_type{off_type{-1}};\r\n        }\r\n\r\n        if (_Off != 0 && (((_Mode & ios_base::in) && !_Gptr_old) || ((_Mode & ios_base::out) && !_Pptr_old))) {\r\n            return pos_type{off_type{-1}};\r\n        }\r\n\r\n        const auto _Newptr = _Seeklow + _Off; // may perform nullptr + 0\r\n        if ((_Mode & ios_base::in) && _Gptr_old) {\r\n            _Mysb::setg(_Seeklow, _Newptr, _Seekhigh);\r\n        }\r\n\r\n        if ((_Mode & ios_base::out) && _Pptr_old) {\r\n            _Mysb::setp(_Seeklow, _Newptr, _Mysb::epptr());\r\n        }\r\n\r\n        return pos_type{_Off};\r\n    }\r\n\r\n    void _Init(const _Elem* _Ptr, const _Mysize_type _Count, int _State) {\r\n        // initialize buffer to [_Ptr, _Ptr + _Count), set state\r\n        _State &= ~_From_rvalue;\r\n\r\n        if (_Count > INT_MAX) { // TRANSITION, VSO-485517\r\n            _Xbad_alloc();\r\n        }\r\n\r\n        if (_Count != 0 && (_State & (_Noread | _Constant)) != (_Noread | _Constant)) {\r\n            // finite buffer that can be read or written, set it up\r\n            _Mysize_type _Newsize = _Count;\r\n            const auto _Pnew      = _Unfancy(_Allocate_at_least_helper(_Al, _Newsize));\r\n            _Traits::copy(_Pnew, _Ptr, _Count);\r\n            _Seekhigh = _Pnew + _Newsize;\r\n\r\n            if (!(_State & _Noread)) {\r\n                _Mysb::setg(_Pnew, _Pnew, _Seekhigh); // setup read buffer\r\n            }\r\n\r\n            if (!(_State & _Constant)) { // setup write buffer, and maybe read buffer\r\n                _Mysb::setp(_Pnew, (_State & (_Atend | _Append)) ? _Seekhigh : _Pnew, _Seekhigh);\r\n\r\n                if (_State & _Noread) { // maintain \"_Allocated == eback() points to buffer base\" invariant\r\n                    _Mysb::setg(_Pnew, _Pnew, _Pnew);\r\n                }\r\n            }\r\n\r\n            _State |= _Allocated;\r\n        } else {\r\n            _Seekhigh = nullptr;\r\n        }\r\n\r\n        _Mystate = _State;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    void _Init_string_inplace(_Mystr&& _Str, int _State) {\r\n        if ((_State & _Noread) && (_State & _Constant)) { // Cannot read / write buffer, do nothing\r\n            _Seekhigh = nullptr;\r\n            _Mystate  = _State | _From_rvalue;\r\n            return;\r\n        }\r\n\r\n        // finite buffer that can be read or written, set it up\r\n        auto [_Ptr, _Size, _Actual_allocation_size] = _Str._Release_to_buffer(_Al);\r\n        _Elem* const _Pnew                          = _Unfancy(_Ptr);\r\n        _Seekhigh                                   = _Pnew + _Size;\r\n        auto _Next                                  = (_State & (_Atend | _Append)) ? _Seekhigh : _Pnew;\r\n        auto _End_buffer                            = _Pnew + _Actual_allocation_size;\r\n\r\n        _Mysb::setp(_Pnew, _Next, _End_buffer);\r\n        if (_State & _Noread) { // maintain \"_Allocated == eback() points to buffer base\" invariant\r\n            _Mysb::setg(_Pnew, _Pnew, _Pnew);\r\n        } else {\r\n            _Mysb::setg(_Pnew, _Pnew, _Seekhigh);\r\n        }\r\n\r\n        _Mystate = _State | _Allocated | _From_rvalue;\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    void _Tidy() noexcept { // discard any allocated buffer and clear pointers\r\n        if (_Mystate & _Allocated) {\r\n            _Al.deallocate(_Ptr_traits::pointer_to(*_Mysb::eback()),\r\n                static_cast<typename allocator_traits<allocator_type>::size_type>(\r\n                    (_Mysb::pptr() ? _Mysb::epptr() : _Mysb::egptr()) - _Mysb::eback()));\r\n        }\r\n\r\n        _Mysb::setg(nullptr, nullptr, nullptr);\r\n        _Mysb::setp(nullptr, nullptr);\r\n        _Seekhigh = nullptr;\r\n        _Mystate &= ~_Allocated;\r\n    }\r\n\r\nprivate:\r\n    using _Ptr_traits = pointer_traits<typename allocator_traits<allocator_type>::pointer>;\r\n\r\n    enum { // constant for minimum buffer size\r\n        _MINSIZE = 32\r\n    };\r\n\r\n    static int _Getstate(ios_base::openmode _Mode) noexcept { // convert open mode to stream state bits\r\n        int _State = 0;\r\n        if (!(_Mode & ios_base::in)) {\r\n            _State |= _Noread;\r\n        }\r\n\r\n        if (!(_Mode & ios_base::out)) {\r\n            _State |= _Constant;\r\n        }\r\n\r\n        if (_Mode & ios_base::app) {\r\n            _State |= _Append;\r\n        }\r\n\r\n        if (_Mode & ios_base::ate) {\r\n            _State |= _Atend;\r\n        }\r\n\r\n        return _State;\r\n    }\r\n\r\n    // TRANSITION, ABI, see GH-938\r\n    _Elem* _Seekhigh; // the high-water pointer in character array\r\n    int _Mystate; // the stream state\r\n    allocator_type _Al; // the allocator object\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nvoid swap(basic_stringbuf<_Elem, _Traits, _Alloc>& _Left, basic_stringbuf<_Elem, _Traits, _Alloc>& _Right) noexcept\r\n/* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nclass basic_istringstream : public basic_istream<_Elem, _Traits> { // input stream associated with a character array\r\npublic:\r\n    using _Mybase        = basic_istream<_Elem, _Traits>;\r\n    using allocator_type = _Alloc;\r\n    using _Mysb          = basic_stringbuf<_Elem, _Traits, _Alloc>;\r\n    using _Mystr         = basic_string<_Elem, _Traits, _Alloc>;\r\n\r\n#if _HAS_CXX20\r\n    using _Mystr_view = basic_string_view<_Elem, _Traits>;\r\n#endif // _HAS_CXX20\r\n\r\n    basic_istringstream() : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(ios_base::in) {}\r\n\r\n    explicit basic_istringstream(ios_base::openmode _Mode)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Mode | ios_base::in) {}\r\n\r\n    explicit basic_istringstream(const _Mystr& _Str, ios_base::openmode _Mode = ios_base::in)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Str, _Mode | ios_base::in) {}\r\n\r\n#if _HAS_CXX20\r\n    basic_istringstream(ios_base::openmode _Mode, const _Alloc& _Al)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Mode | ios_base::in, _Al) {}\r\n\r\n    explicit basic_istringstream(_Mystr&& _Str, ios_base::openmode _Mode = ios_base::in)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_STD move(_Str), _Mode | ios_base::in) {}\r\n\r\n    template <class _Alloc2>\r\n    basic_istringstream(const basic_string<_Elem, _Traits, _Alloc2>& _Str, const _Alloc& _Al)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Str, ios_base::in, _Al) {}\r\n\r\n    template <class _Alloc2>\r\n    basic_istringstream(const basic_string<_Elem, _Traits, _Alloc2>& _Str, ios_base::openmode _Mode, const _Alloc& _Al)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Str, _Mode | ios_base::in, _Al) {}\r\n\r\n    template <class _Alloc2>\r\n        requires (!is_same_v<_Alloc2, _Alloc>)\r\n    explicit basic_istringstream(\r\n        const basic_string<_Elem, _Traits, _Alloc2>& _Str, ios_base::openmode _Mode = ios_base::in)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Str, _Mode | ios_base::in) {}\r\n#endif // _HAS_CXX20\r\n\r\n    basic_istringstream(basic_istringstream&& _Right)\r\n        : _Mybase(_STD addressof(_Stringbuffer)),\r\n          _Stringbuffer((_Mybase::swap(_Right), _STD move(_Right._Stringbuffer))) {}\r\n\r\n    basic_istringstream& operator=(basic_istringstream&& _Right)\r\n        noexcept(_Choose_pocma_v<_Alloc> != _Pocma_values::_No_propagate_allocators) /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Mybase::swap(_Right);\r\n            _Stringbuffer._Assign_rv_no_alias(_STD move(_Right._Stringbuffer));\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    void swap(basic_istringstream& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Mybase::swap(_Right);\r\n            _Stringbuffer.swap(_Right._Stringbuffer);\r\n        }\r\n    }\r\n\r\n    basic_istringstream(const basic_istringstream&)            = delete;\r\n    basic_istringstream& operator=(const basic_istringstream&) = delete;\r\n\r\n    ~basic_istringstream() noexcept override {}\r\n\r\n    _NODISCARD _Mysb* rdbuf() const noexcept /* strengthened */ {\r\n        return const_cast<_Mysb*>(_STD addressof(_Stringbuffer));\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD _Mystr str() const&\r\n#else\r\n    _NODISCARD _Mystr str() const\r\n#endif\r\n    {\r\n        return _Stringbuffer.str();\r\n    }\r\n\r\n    void str(const _Mystr& _Newstr) { // replace character array from string\r\n        _Stringbuffer.str(_Newstr);\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    template <_Allocator_for_container _Alloc2>\r\n    _NODISCARD basic_string<_Elem, _Traits, _Alloc2> str(const _Alloc2& _Al) const {\r\n        return _Stringbuffer.str(_Al);\r\n    }\r\n\r\n    _NODISCARD _Mystr str() && {\r\n        return _STD move(_Stringbuffer).str();\r\n    }\r\n\r\n    _NODISCARD _Mystr_view view() const noexcept {\r\n        return _Stringbuffer.view();\r\n    }\r\n\r\n    template <class _Alloc2>\r\n        requires (!is_same_v<_Alloc2, _Alloc>)\r\n    void str(const basic_string<_Elem, _Traits, _Alloc2>& _Newstr) {\r\n        _Stringbuffer.str(_Newstr);\r\n    }\r\n\r\n    void str(_Mystr&& _Newstr) {\r\n        _Stringbuffer.str(_STD move(_Newstr));\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\nprivate:\r\n    _Mysb _Stringbuffer;\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nvoid swap(basic_istringstream<_Elem, _Traits, _Alloc>& _Left,\r\n    basic_istringstream<_Elem, _Traits, _Alloc>& _Right) noexcept /* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nclass basic_ostringstream : public basic_ostream<_Elem, _Traits> { // output stream associated with a character array\r\npublic:\r\n    using _Mybase        = basic_ostream<_Elem, _Traits>;\r\n    using allocator_type = _Alloc;\r\n    using _Mysb          = basic_stringbuf<_Elem, _Traits, _Alloc>;\r\n    using _Mystr         = basic_string<_Elem, _Traits, _Alloc>;\r\n\r\n#if _HAS_CXX20\r\n    using _Mystr_view = basic_string_view<_Elem, _Traits>;\r\n#endif // _HAS_CXX20\r\n\r\n    basic_ostringstream() : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(ios_base::out) {}\r\n\r\n    explicit basic_ostringstream(ios_base::openmode _Mode)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Mode | ios_base::out) {}\r\n\r\n    explicit basic_ostringstream(const _Mystr& _Str, ios_base::openmode _Mode = ios_base::out)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Str, _Mode | ios_base::out) {}\r\n\r\n#if _HAS_CXX20\r\n    basic_ostringstream(ios_base::openmode _Mode, const _Alloc& _Al)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Mode | ios_base::out, _Al) {}\r\n\r\n    explicit basic_ostringstream(_Mystr&& _Str, ios_base::openmode _Mode = ios_base::out)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_STD move(_Str), _Mode | ios_base::out) {}\r\n\r\n    template <class _Alloc2>\r\n    basic_ostringstream(const basic_string<_Elem, _Traits, _Alloc2>& _Str, const _Alloc& _Al)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Str, ios_base::out, _Al) {}\r\n\r\n    template <class _Alloc2>\r\n    basic_ostringstream(const basic_string<_Elem, _Traits, _Alloc2>& _Str, ios_base::openmode _Mode, const _Alloc& _Al)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Str, _Mode | ios_base::out, _Al) {}\r\n\r\n    template <class _Alloc2>\r\n        requires (!is_same_v<_Alloc2, _Alloc>)\r\n    explicit basic_ostringstream(\r\n        const basic_string<_Elem, _Traits, _Alloc2>& _Str, ios_base::openmode _Mode = ios_base::out)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Str, _Mode | ios_base::out) {}\r\n#endif // _HAS_CXX20\r\n\r\n    basic_ostringstream(basic_ostringstream&& _Right)\r\n        : _Mybase(_STD addressof(_Stringbuffer)),\r\n          _Stringbuffer((_Mybase::swap(_Right), _STD move(_Right._Stringbuffer))) {}\r\n\r\n    basic_ostringstream& operator=(basic_ostringstream&& _Right)\r\n        noexcept(_Choose_pocma_v<_Alloc> != _Pocma_values::_No_propagate_allocators) /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Mybase::swap(_Right);\r\n            _Stringbuffer._Assign_rv_no_alias(_STD move(_Right._Stringbuffer));\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    void swap(basic_ostringstream& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Mybase::swap(_Right);\r\n            _Stringbuffer.swap(_Right._Stringbuffer);\r\n        }\r\n    }\r\n\r\n    basic_ostringstream(const basic_ostringstream&)            = delete;\r\n    basic_ostringstream& operator=(const basic_ostringstream&) = delete;\r\n\r\n    ~basic_ostringstream() noexcept override {}\r\n\r\n    _NODISCARD _Mysb* rdbuf() const noexcept /* strengthened */ {\r\n        return const_cast<_Mysb*>(_STD addressof(_Stringbuffer));\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD _Mystr str() const&\r\n#else\r\n    _NODISCARD _Mystr str() const\r\n#endif\r\n    {\r\n        return _Stringbuffer.str();\r\n    }\r\n\r\n    void str(const _Mystr& _Newstr) { // replace character array from string\r\n        _Stringbuffer.str(_Newstr);\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    template <_Allocator_for_container _Alloc2>\r\n    _NODISCARD basic_string<_Elem, _Traits, _Alloc2> str(const _Alloc2& _Al) const {\r\n        return _Stringbuffer.str(_Al);\r\n    }\r\n\r\n    _NODISCARD _Mystr str() && {\r\n        return _STD move(_Stringbuffer).str();\r\n    }\r\n\r\n    _NODISCARD _Mystr_view view() const noexcept {\r\n        return _Stringbuffer.view();\r\n    }\r\n\r\n    template <class _Alloc2>\r\n        requires (!is_same_v<_Alloc2, _Alloc>)\r\n    void str(const basic_string<_Elem, _Traits, _Alloc2>& _Newstr) {\r\n        _Stringbuffer.str(_Newstr);\r\n    }\r\n\r\n    void str(_Mystr&& _Newstr) {\r\n        _Stringbuffer.str(_STD move(_Newstr));\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\nprivate:\r\n    _Mysb _Stringbuffer;\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nvoid swap(basic_ostringstream<_Elem, _Traits, _Alloc>& _Left,\r\n    basic_ostringstream<_Elem, _Traits, _Alloc>& _Right) noexcept /* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nclass basic_stringstream\r\n    : public basic_iostream<_Elem, _Traits> { // input/output stream associated with a character array\r\npublic:\r\n    using _Mybase        = basic_iostream<_Elem, _Traits>;\r\n    using char_type      = _Elem;\r\n    using traits_type    = _Traits;\r\n    using allocator_type = _Alloc;\r\n    using int_type       = typename _Traits::int_type;\r\n    using pos_type       = typename _Traits::pos_type;\r\n    using off_type       = typename _Traits::off_type;\r\n    using _Mysb          = basic_stringbuf<_Elem, _Traits, _Alloc>;\r\n    using _Mystr         = basic_string<_Elem, _Traits, _Alloc>;\r\n\r\n#if _HAS_CXX20\r\n    using _Mystr_view = basic_string_view<_Elem, _Traits>;\r\n#endif // _HAS_CXX20\r\n\r\n    basic_stringstream() : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(ios_base::in | ios_base::out) {}\r\n\r\n    explicit basic_stringstream(ios_base::openmode _Mode)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Mode) {}\r\n\r\n    explicit basic_stringstream(const _Mystr& _Str, ios_base::openmode _Mode = ios_base::in | ios_base::out)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Str, _Mode) {}\r\n\r\n#if _HAS_CXX20\r\n    basic_stringstream(ios_base::openmode _Mode, const _Alloc& _Al)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Mode, _Al) {}\r\n\r\n    explicit basic_stringstream(_Mystr&& _Str, ios_base::openmode _Mode = ios_base::in | ios_base::out)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_STD move(_Str), _Mode) {}\r\n\r\n    template <class _Alloc2>\r\n    basic_stringstream(const basic_string<_Elem, _Traits, _Alloc2>& _Str, const _Alloc& _Al)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Str, ios_base::in | ios_base::out, _Al) {}\r\n\r\n    template <class _Alloc2>\r\n    basic_stringstream(const basic_string<_Elem, _Traits, _Alloc2>& _Str, ios_base::openmode _Mode, const _Alloc& _Al)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Str, _Mode, _Al) {}\r\n\r\n    template <class _Alloc2>\r\n        requires (!is_same_v<_Alloc2, _Alloc>)\r\n    explicit basic_stringstream(\r\n        const basic_string<_Elem, _Traits, _Alloc2>& _Str, ios_base::openmode _Mode = ios_base::in | ios_base::out)\r\n        : _Mybase(_STD addressof(_Stringbuffer)), _Stringbuffer(_Str, _Mode) {}\r\n#endif // _HAS_CXX20\r\n\r\n    basic_stringstream(basic_stringstream&& _Right)\r\n        : _Mybase(_STD addressof(_Stringbuffer)),\r\n          _Stringbuffer((_Mybase::swap(_Right), _STD move(_Right._Stringbuffer))) {}\r\n\r\n    basic_stringstream& operator=(basic_stringstream&& _Right)\r\n        noexcept(_Choose_pocma_v<_Alloc> != _Pocma_values::_No_propagate_allocators) /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Mybase::swap(_Right);\r\n            _Stringbuffer._Assign_rv_no_alias(_STD move(_Right._Stringbuffer));\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    void swap(basic_stringstream& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Mybase::swap(_Right);\r\n            _Stringbuffer.swap(_Right._Stringbuffer);\r\n        }\r\n    }\r\n\r\n    basic_stringstream(const basic_stringstream&)            = delete;\r\n    basic_stringstream& operator=(const basic_stringstream&) = delete;\r\n\r\n    ~basic_stringstream() noexcept override {}\r\n\r\n    _NODISCARD _Mysb* rdbuf() const noexcept /* strengthened */ {\r\n        return const_cast<_Mysb*>(_STD addressof(_Stringbuffer));\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD _Mystr str() const&\r\n#else\r\n    _NODISCARD _Mystr str() const\r\n#endif\r\n    {\r\n        return _Stringbuffer.str();\r\n    }\r\n\r\n    void str(const _Mystr& _Newstr) { // replace character array from string\r\n        _Stringbuffer.str(_Newstr);\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    template <_Allocator_for_container _Alloc2>\r\n    _NODISCARD basic_string<_Elem, _Traits, _Alloc2> str(const _Alloc2& _Al) const {\r\n        return _Stringbuffer.str(_Al);\r\n    }\r\n\r\n    _NODISCARD _Mystr str() && {\r\n        return _STD move(_Stringbuffer).str();\r\n    }\r\n\r\n    _NODISCARD _Mystr_view view() const noexcept {\r\n        return _Stringbuffer.view();\r\n    }\r\n\r\n    template <class _Alloc2>\r\n        requires (!is_same_v<_Alloc2, _Alloc>)\r\n    void str(const basic_string<_Elem, _Traits, _Alloc2>& _Newstr) {\r\n        _Stringbuffer.str(_Newstr);\r\n    }\r\n\r\n    void str(_Mystr&& _Newstr) {\r\n        _Stringbuffer.str(_STD move(_Newstr));\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\nprivate:\r\n    _Mysb _Stringbuffer;\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nvoid swap(basic_stringstream<_Elem, _Traits, _Alloc>& _Left,\r\n    basic_stringstream<_Elem, _Traits, _Alloc>& _Right) noexcept /* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _SSTREAM_\r\n"
  },
  {
    "path": "stl/inc/stack",
    "content": "// stack standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _STACK_\r\n#define _STACK_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <deque>\r\n\r\n#if _HAS_CXX23\r\n#include <__msvc_ranges_to.hpp>\r\n#include <__msvc_ranges_tuple_formatter.hpp>\r\n#include <iterator>\r\n#endif // _HAS_CXX23\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD template <class _Ty, class _Container = deque<_Ty>>\r\nclass stack {\r\npublic:\r\n    using value_type      = typename _Container::value_type;\r\n    using reference       = typename _Container::reference;\r\n    using const_reference = typename _Container::const_reference;\r\n    using size_type       = typename _Container::size_type;\r\n    using container_type  = _Container;\r\n\r\n    static_assert(is_same_v<_Ty, value_type>, \"container adaptors require consistent types\");\r\n    static_assert(is_object_v<_Ty>, \"The C++ Standard forbids container adaptors of non-object types \"\r\n                                    \"because of [container.requirements].\");\r\n\r\n    stack() = default;\r\n\r\n    explicit stack(const _Container& _Cont) : c(_Cont) {}\r\n\r\n    explicit stack(_Container&& _Cont) noexcept(is_nothrow_move_constructible_v<_Container>) // strengthened\r\n        : c(_STD move(_Cont)) {}\r\n\r\n#if _HAS_CXX23\r\n    template <_Iterator_for_container _InIt>\r\n    stack(_InIt _First, _InIt _Last) noexcept(is_nothrow_constructible_v<_Container, _InIt, _InIt>) // strengthened\r\n        : c(_STD move(_First), _STD move(_Last)) {}\r\n\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    stack(from_range_t, _Rng&& _Range) : c(_RANGES to<_Container>(_STD forward<_Rng>(_Range))) {}\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Alloc, enable_if_t<uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    explicit stack(const _Alloc& _Al) noexcept(is_nothrow_constructible_v<_Container, const _Alloc&>) // strengthened\r\n        : c(_Al) {}\r\n\r\n    template <class _Alloc, enable_if_t<uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    stack(const _Container& _Cont, const _Alloc& _Al) : c(_Cont, _Al) {}\r\n\r\n    template <class _Alloc, enable_if_t<uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    stack(_Container&& _Cont, const _Alloc& _Al)\r\n        noexcept(is_nothrow_constructible_v<_Container, _Container, const _Alloc&>) // strengthened\r\n        : c(_STD move(_Cont), _Al) {}\r\n\r\n    template <class _Alloc, enable_if_t<uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    stack(const stack& _Right, const _Alloc& _Al) : c(_Right.c, _Al) {}\r\n\r\n    template <class _Alloc, enable_if_t<uses_allocator_v<_Container, _Alloc>, int> = 0>\r\n    stack(stack&& _Right, const _Alloc& _Al)\r\n        noexcept(is_nothrow_constructible_v<_Container, _Container, const _Alloc&>) // strengthened\r\n        : c(_STD move(_Right.c), _Al) {}\r\n\r\n#if _HAS_CXX23\r\n    template <_Iterator_for_container _InIt, class _Alloc>\r\n        requires uses_allocator_v<_Container, _Alloc>\r\n    stack(_InIt _First, _InIt _Last, const _Alloc& _Al)\r\n        noexcept(is_nothrow_constructible_v<_Container, _InIt, _InIt, const _Alloc&>) // strengthened\r\n        : c(_STD move(_First), _STD move(_Last), _Al) {}\r\n\r\n    template <_Container_compatible_range<_Ty> _Rng, class _Alloc>\r\n    stack(from_range_t, _Rng&& _Range, const _Alloc& _Al)\r\n        : c(_RANGES to<_Container>(_STD forward<_Rng>(_Range), _Al)) {}\r\n#endif // _HAS_CXX23\r\n\r\n    _NODISCARD_EMPTY_MEMBER_NO_CLEAR bool empty() const noexcept(noexcept(c.empty())) /* strengthened */ {\r\n        return c.empty();\r\n    }\r\n\r\n    _NODISCARD size_type size() const noexcept(noexcept(c.size())) /* strengthened */ {\r\n        return c.size();\r\n    }\r\n\r\n    _NODISCARD reference top() noexcept(noexcept(c.back())) /* strengthened */ {\r\n        return c.back();\r\n    }\r\n\r\n    _NODISCARD const_reference top() const noexcept(noexcept(c.back())) /* strengthened */ {\r\n        return c.back();\r\n    }\r\n\r\n    void push(const value_type& _Val) {\r\n        c.push_back(_Val);\r\n    }\r\n\r\n    void push(value_type&& _Val) {\r\n        c.push_back(_STD move(_Val));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    void push_range(_Rng&& _Range) {\r\n        if constexpr (requires { c.append_range(_STD forward<_Rng>(_Range)); }) {\r\n            c.append_range(_STD forward<_Rng>(_Range));\r\n        } else {\r\n            _RANGES copy(_Range, back_insert_iterator{c});\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    template <class... _Valty>\r\n    _ADAPTOR_EMPLACE_RETURN emplace(_Valty&&... _Val) {\r\n#if _HAS_CXX17\r\n        return c.emplace_back(_STD forward<_Valty>(_Val)...);\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n        c.emplace_back(_STD forward<_Valty>(_Val)...);\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n    }\r\n\r\n    void pop() noexcept(noexcept(c.pop_back())) /* strengthened */ {\r\n        c.pop_back();\r\n    }\r\n\r\n    void swap(stack& _Right) noexcept(_Is_nothrow_swappable<_Container>::value) {\r\n        using _STD swap;\r\n        swap(c, _Right.c); // intentional ADL\r\n    }\r\n\r\n    _NODISCARD const _Container& _Get_container() const noexcept {\r\n        return c;\r\n    }\r\n\r\nprotected:\r\n    _Container c{};\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Container, enable_if_t<!_Is_allocator<_Container>::value, int> = 0>\r\nstack(_Container) -> stack<typename _Container::value_type, _Container>;\r\n\r\ntemplate <class _Container, class _Alloc,\r\n    enable_if_t<conjunction_v<negation<_Is_allocator<_Container>>, uses_allocator<_Container, _Alloc>>, int> = 0>\r\nstack(_Container, _Alloc) -> stack<typename _Container::value_type, _Container>;\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\ntemplate <_Iterator_for_container _InIt, _Allocator_for_container _Alloc = allocator<_Iter_value_t<_InIt>>>\r\nstack(_InIt, _InIt, _Alloc = _Alloc()) -> stack<_Iter_value_t<_InIt>, deque<_Iter_value_t<_InIt>, _Alloc>>;\r\n\r\ntemplate <_RANGES input_range _Rng>\r\nstack(from_range_t, _Rng&&) -> stack<_RANGES range_value_t<_Rng>>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc>\r\nstack(from_range_t, _Rng&&, _Alloc) -> stack<_RANGES range_value_t<_Rng>, deque<_RANGES range_value_t<_Rng>, _Alloc>>;\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD template <class _Ty, class _Container>\r\n_NODISCARD bool operator==(const stack<_Ty, _Container>& _Left, const stack<_Ty, _Container>& _Right) {\r\n    return _Left._Get_container() == _Right._Get_container();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Container>\r\n_NODISCARD bool operator!=(const stack<_Ty, _Container>& _Left, const stack<_Ty, _Container>& _Right) {\r\n    return _Left._Get_container() != _Right._Get_container();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Container>\r\n_NODISCARD bool operator<(const stack<_Ty, _Container>& _Left, const stack<_Ty, _Container>& _Right) {\r\n    return _Left._Get_container() < _Right._Get_container();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Container>\r\n_NODISCARD bool operator>(const stack<_Ty, _Container>& _Left, const stack<_Ty, _Container>& _Right) {\r\n    return _Left._Get_container() > _Right._Get_container();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Container>\r\n_NODISCARD bool operator<=(const stack<_Ty, _Container>& _Left, const stack<_Ty, _Container>& _Right) {\r\n    return _Left._Get_container() <= _Right._Get_container();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Container>\r\n_NODISCARD bool operator>=(const stack<_Ty, _Container>& _Left, const stack<_Ty, _Container>& _Right) {\r\n    return _Left._Get_container() >= _Right._Get_container();\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty, three_way_comparable _Container>\r\n_NODISCARD compare_three_way_result_t<_Container> operator<=>(\r\n    const stack<_Ty, _Container>& _Left, const stack<_Ty, _Container>& _Right) {\r\n    return _Left._Get_container() <=> _Right._Get_container();\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty, class _Container, enable_if_t<_Is_swappable<_Container>::value, int> = 0>\r\nvoid swap(stack<_Ty, _Container>& _Left, stack<_Ty, _Container>& _Right) noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n\r\ntemplate <class _Ty, class _Container, class _Alloc>\r\nstruct uses_allocator<stack<_Ty, _Container>, _Alloc> : uses_allocator<_Container, _Alloc>::type {};\r\n\r\n#if _HAS_CXX23\r\n// Per LWG-3997, `_CharT` in library-provided `formatter` specializations is\r\n// constrained to character types supported by `format`.\r\ntemplate <_Format_supported_charT _CharT, class _Ty, formattable<_CharT> _Container>\r\nstruct formatter<stack<_Ty, _Container>, _CharT>\r\n    : _Adaptor_formatter_base<stack<_Ty, _Container>, _CharT, _RANGES ref_view> {};\r\n\r\ntemplate <class _Ty, class _Container>\r\nconstexpr bool enable_nonlocking_formatter_optimization<stack<_Ty, _Container>> = false;\r\n#endif // _HAS_CXX23\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _STACK_\r\n"
  },
  {
    "path": "stl/inc/stacktrace",
    "content": "// stacktrace standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _STACKTRACE_\r\n#define _STACKTRACE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX23\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <stacktrace> are available only with C++23 or later.\");\r\n#else // ^^^ !_HAS_CXX23 / _HAS_CXX23 vvv\r\n\r\n#include <__msvc_formatter.hpp>\r\n#include <cstdint>\r\n#include <string>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// The separately compiled part of the <stacktrace> implementation calls a function pointer of _Stacktrace_string_fill\r\n// type to allocate a buffer for string output. The called function does the buffer allocation and calls a function\r\n// pointer of _Stacktrace_string_fill_callback type to fill the buffer. This is needed to type-erase <string> or\r\n// <ostream>, and makes it possible to keep the separately compiled implementation in the import library.\r\n//\r\n// Additionally, _Stacktrace_string_fill can be called with a null _Callback argument to determine the already reserved\r\n// string buffer for cases when the size is not known before an attempt to fill it -- this potentially avoids both an\r\n// extra fill attempt and an extra allocation if the reserved size is enough.\r\n\r\nextern \"C\" {\r\nusing _Stacktrace_string_fill_callback = size_t(__stdcall*)(char* _Data, size_t _Size, void* _Context) _NOEXCEPT_FNPTR;\r\n\r\nusing _Stacktrace_string_fill = size_t(__stdcall*)(\r\n    size_t _Size, void* _String, void* _Context, _Stacktrace_string_fill_callback _Callback);\r\n\r\n_NODISCARD unsigned short __stdcall __std_stacktrace_capture(unsigned long _Frames_to_skip,\r\n    unsigned long _Frames_to_capture, void** _Back_trace, unsigned long* _Back_trace_hash) noexcept;\r\n\r\n// Some of these functions may throw\r\n// (they would propagate bad_alloc potentially thrown from string::resize_and_overwrite)\r\n\r\nvoid __stdcall __std_stacktrace_address_to_string(const void* _Address, void* _Str, _Stacktrace_string_fill _Fill)\r\n    noexcept(false);\r\n\r\nvoid __stdcall __std_stacktrace_description(const void* _Address, void* _Str, _Stacktrace_string_fill _Fill)\r\n    noexcept(false);\r\n\r\nvoid __stdcall __std_stacktrace_source_file(const void* _Address, void* _Str, _Stacktrace_string_fill _Fill)\r\n    noexcept(false);\r\n\r\n_NODISCARD unsigned int __stdcall __std_stacktrace_source_line(const void* _Address) noexcept;\r\n\r\nvoid __stdcall __std_stacktrace_to_string(\r\n    const void* const* _Addresses, size_t _Size, void* _Str, _Stacktrace_string_fill _Fill) noexcept(false);\r\n} // extern \"C\"\r\n\r\n_STD_BEGIN\r\ninline size_t __stdcall _Stacktrace_string_fill_impl(\r\n    const size_t _Size, void* const _String, void* const _Context, const _Stacktrace_string_fill_callback _Callback) {\r\n    if (_Callback) {\r\n        static_cast<string*>(_String)->resize_and_overwrite(_Size,\r\n            [_Callback, _Context](char* _Data, size_t _Size) noexcept { return _Callback(_Data, _Size, _Context); });\r\n        return static_cast<string*>(_String)->size();\r\n    } else {\r\n        return static_cast<string*>(_String)->capacity();\r\n    }\r\n}\r\n\r\n_EXPORT_STD class stacktrace_entry {\r\npublic:\r\n    using native_handle_type = void*;\r\n\r\n    constexpr stacktrace_entry() noexcept                                   = default;\r\n    constexpr stacktrace_entry(const stacktrace_entry&) noexcept            = default;\r\n    constexpr stacktrace_entry& operator=(const stacktrace_entry&) noexcept = default;\r\n\r\n    ~stacktrace_entry() = default;\r\n\r\n    _NODISCARD constexpr native_handle_type native_handle() const noexcept {\r\n        return _Address;\r\n    }\r\n\r\n    _NODISCARD constexpr explicit operator bool() const noexcept {\r\n        return _Address != nullptr;\r\n    }\r\n\r\n    _NODISCARD string description() const {\r\n        string _Result;\r\n        __std_stacktrace_description(_Address, &_Result, _Stacktrace_string_fill_impl);\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD string source_file() const {\r\n        string _Result;\r\n        __std_stacktrace_source_file(_Address, &_Result, _Stacktrace_string_fill_impl);\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD uint_least32_t source_line() const noexcept /* strengthened */ {\r\n        return __std_stacktrace_source_line(_Address);\r\n    }\r\n\r\n    _NODISCARD friend constexpr bool operator==(const stacktrace_entry&, const stacktrace_entry&) noexcept = default;\r\n\r\n    _NODISCARD friend constexpr strong_ordering operator<=>(\r\n        const stacktrace_entry&, const stacktrace_entry&) noexcept = default;\r\n\r\nprivate:\r\n    void* _Address = nullptr;\r\n};\r\n\r\n_EXPORT_STD template <class _Alloc>\r\nclass basic_stacktrace {\r\nprivate:\r\n    using _Frames_t = vector<stacktrace_entry, _Alloc>;\r\n\r\npublic:\r\n    using value_type             = stacktrace_entry;\r\n    using const_reference        = const value_type&;\r\n    using reference              = value_type&;\r\n    using const_iterator         = _Frames_t::const_iterator;\r\n    using iterator               = const_iterator;\r\n    using reverse_iterator       = _STD reverse_iterator<iterator>;\r\n    using const_reverse_iterator = _STD reverse_iterator<const_iterator>;\r\n    using difference_type        = _Frames_t::difference_type;\r\n    using size_type              = _Frames_t::size_type;\r\n    using allocator_type         = _Alloc;\r\n\r\n    // __declspec(noinline) to make the same behavior for debug and release.\r\n    // We force the current function to be always noinline and add its frame to skipped.\r\n\r\n    _NODISCARD __declspec(noinline) static basic_stacktrace current(\r\n        const allocator_type& _Al = allocator_type()) noexcept {\r\n        _TRY_BEGIN\r\n        basic_stacktrace _Result{_Internal_t{}, _Max_frames, _Al};\r\n        const unsigned short _Actual_size = __std_stacktrace_capture(\r\n            1, static_cast<unsigned long>(_Max_frames), _Result._To_voidptr_array(), &_Result._Hash);\r\n        _Result._Frames.resize(_Actual_size);\r\n        return _Result;\r\n        _CATCH_ALL\r\n        return basic_stacktrace{_Al};\r\n        _CATCH_END\r\n    }\r\n\r\n    _NODISCARD __declspec(noinline) static basic_stacktrace current(\r\n        const size_type _Skip, const allocator_type& _Al = allocator_type()) noexcept {\r\n        _TRY_BEGIN\r\n        basic_stacktrace _Result{_Internal_t{}, _Max_frames, _Al};\r\n        const unsigned short _Actual_size = __std_stacktrace_capture(\r\n            _Adjust_skip(_Skip), static_cast<unsigned long>(_Max_frames), _Result._To_voidptr_array(), &_Result._Hash);\r\n        _Result._Frames.resize(_Actual_size);\r\n        return _Result;\r\n        _CATCH_ALL\r\n        return basic_stacktrace{_Al};\r\n        _CATCH_END\r\n    }\r\n\r\n    _NODISCARD __declspec(noinline) static basic_stacktrace current(\r\n        const size_type _Skip, size_type _Max_depth, const allocator_type& _Al = allocator_type()) noexcept {\r\n#if _MSVC_STL_HARDENING_BASIC_STACKTRACE || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Skip <= _Skip + _Max_depth, \"Mathematical result of (_Skip + _Max_depth) must be representable in \"\r\n                                                 \"size_t (N5008 [stacktrace.basic.cons]/5).\");\r\n#endif // _MSVC_STL_HARDENING_BASIC_STACKTRACE || _ITERATOR_DEBUG_LEVEL != 0\r\n        _TRY_BEGIN\r\n        if (_Max_depth > _Max_frames) {\r\n            _Max_depth = _Max_frames;\r\n        }\r\n\r\n        basic_stacktrace _Result{_Internal_t{}, _Max_depth, _Al};\r\n\r\n        const unsigned short _Actual_size = __std_stacktrace_capture(\r\n            _Adjust_skip(_Skip), static_cast<unsigned long>(_Max_depth), _Result._To_voidptr_array(), &_Result._Hash);\r\n        _Result._Frames.resize(_Actual_size);\r\n        return _Result;\r\n        _CATCH_ALL\r\n        return basic_stacktrace{_Al};\r\n        _CATCH_END\r\n    }\r\n\r\n    basic_stacktrace() noexcept(is_nothrow_default_constructible_v<allocator_type>) = default;\r\n    explicit basic_stacktrace(const allocator_type& _Al) noexcept : _Frames(_Al) {}\r\n\r\n    basic_stacktrace(const basic_stacktrace&)     = default;\r\n    basic_stacktrace(basic_stacktrace&&) noexcept = default;\r\n    basic_stacktrace(const basic_stacktrace& _Other, const allocator_type& _Al)\r\n        : _Frames(_Other._Frames, _Al), _Hash(_Other._Hash) {}\r\n\r\n    basic_stacktrace(basic_stacktrace&& _Other, const allocator_type& _Al)\r\n        : _Frames(_STD move(_Other._Frames), _Al), _Hash(_Other._Hash) {}\r\n\r\n    basic_stacktrace& operator=(const basic_stacktrace&)                 = default;\r\n    basic_stacktrace& operator=(basic_stacktrace&&) noexcept(_Noex_move) = default;\r\n\r\n    ~basic_stacktrace() = default;\r\n\r\n    _NODISCARD allocator_type get_allocator() const noexcept {\r\n        return _Frames.get_allocator();\r\n    }\r\n\r\n    _NODISCARD const_iterator begin() const noexcept {\r\n        return _Frames.cbegin();\r\n    }\r\n\r\n    _NODISCARD const_iterator end() const noexcept {\r\n        return _Frames.cend();\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator rbegin() const noexcept {\r\n        return _Frames.crbegin();\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator rend() const noexcept {\r\n        return _Frames.crend();\r\n    }\r\n\r\n    _NODISCARD const_iterator cbegin() const noexcept {\r\n        return _Frames.cbegin();\r\n    }\r\n\r\n    _NODISCARD const_iterator cend() const noexcept {\r\n        return _Frames.cend();\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator crbegin() const noexcept {\r\n        return _Frames.crbegin();\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator crend() const noexcept {\r\n        return _Frames.crend();\r\n    }\r\n\r\n    _NODISCARD_EMPTY_MEMBER_NO_CLEAR bool empty() const noexcept {\r\n        return _Frames.empty();\r\n    }\r\n\r\n    _NODISCARD size_type size() const noexcept {\r\n        return _Frames.size();\r\n    }\r\n\r\n    _NODISCARD size_type max_size() const noexcept {\r\n        return _Frames.max_size();\r\n    }\r\n\r\n    _NODISCARD const_reference operator[](const size_type _Sx) const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_BASIC_STACKTRACE || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Sx < _Frames.size(), \"basic_stacktrace subscript out of range\");\r\n#endif // _MSVC_STL_HARDENING_BASIC_STACKTRACE || _ITERATOR_DEBUG_LEVEL != 0\r\n        return _Frames.data()[_Sx]; // avoid redundant checking\r\n    }\r\n\r\n    _NODISCARD const_reference at(const size_type _Sx) const {\r\n        return _Frames.at(_Sx);\r\n    }\r\n\r\n    template <class _Al2>\r\n    _NODISCARD friend bool operator==(const basic_stacktrace& _Lhs, const basic_stacktrace<_Al2>& _Rhs) noexcept {\r\n        return _Lhs._Hash == _Rhs._Hash && _STD equal(_Lhs.begin(), _Lhs.end(), _Rhs.begin(), _Rhs.end());\r\n    }\r\n\r\n    template <class _Al2>\r\n    _NODISCARD friend strong_ordering operator<=>(\r\n        const basic_stacktrace& _Lhs, const basic_stacktrace<_Al2>& _Rhs) noexcept {\r\n        const auto _Result = _Lhs._Frames.size() <=> _Rhs._Frames.size();\r\n        if (_Result != strong_ordering::equal) {\r\n            return _Result;\r\n        }\r\n\r\n        return _STD lexicographical_compare_three_way(_Lhs.begin(), _Lhs.end(), _Rhs.begin(), _Rhs.end());\r\n    }\r\n\r\n    void swap(basic_stacktrace& _Other) noexcept(allocator_traits<_Alloc>::propagate_on_container_swap::value\r\n                                                 || allocator_traits<_Alloc>::is_always_equal::value) {\r\n        _Frames.swap(_Other._Frames);\r\n        _STD swap(_Hash, _Other._Hash);\r\n    }\r\n\r\n    _NODISCARD unsigned long _Get_hash() const noexcept {\r\n        return _Hash;\r\n    }\r\n\r\n    _STL_INTERNAL_STATIC_ASSERT(sizeof(void*) == sizeof(stacktrace_entry));\r\n    _STL_INTERNAL_STATIC_ASSERT(alignof(void*) == alignof(stacktrace_entry));\r\n\r\n    _NODISCARD const void* const* _To_voidptr_array() const noexcept {\r\n        return reinterpret_cast<const void* const*>(_Frames.data());\r\n    }\r\n\r\n    _NODISCARD void** _To_voidptr_array() noexcept {\r\n        return reinterpret_cast<void**>(_Frames.data());\r\n    }\r\n\r\nprivate:\r\n    static constexpr size_t _Max_frames = 0xFFFF;\r\n\r\n    static constexpr bool _Noex_move = allocator_traits<_Alloc>::propagate_on_container_move_assignment::value\r\n                                    || allocator_traits<_Alloc>::is_always_equal::value;\r\n\r\n    struct _Internal_t {\r\n        explicit _Internal_t() noexcept = default;\r\n    };\r\n\r\n    basic_stacktrace(_Internal_t, size_type _Max_depth, const allocator_type& _Al) : _Frames(_Max_depth, _Al) {}\r\n\r\n    _NODISCARD static unsigned long _Adjust_skip(size_t _Skip) noexcept {\r\n        return _Skip < ULONG_MAX - 1 ? static_cast<unsigned long>(_Skip + 1) : ULONG_MAX;\r\n    }\r\n\r\n    _Frames_t _Frames;\r\n    unsigned long _Hash = 0;\r\n};\r\n\r\n_EXPORT_STD using stacktrace = basic_stacktrace<allocator<stacktrace_entry>>;\r\n\r\n_EXPORT_STD template <class _Alloc>\r\nvoid swap(basic_stacktrace<_Alloc>& _Ax, basic_stacktrace<_Alloc>& _Bx) noexcept(noexcept(_Ax.swap(_Bx))) {\r\n    _Ax.swap(_Bx);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline string to_string(const stacktrace_entry& _Fx) {\r\n    string _Result;\r\n    __std_stacktrace_address_to_string(_Fx.native_handle(), &_Result, _Stacktrace_string_fill_impl);\r\n    return _Result;\r\n}\r\n\r\n_EXPORT_STD template <class _Alloc>\r\n_NODISCARD string to_string(const basic_stacktrace<_Alloc>& _St) {\r\n    string _Result;\r\n    __std_stacktrace_to_string(_St._To_voidptr_array(), _St.size(), &_Result, _Stacktrace_string_fill_impl);\r\n    return _Result;\r\n}\r\n\r\n_EXPORT_STD template <int = 0>\r\nostream& operator<<(ostream& _Os, const stacktrace_entry& _Fx) {\r\n    return _Os << _STD to_string(_Fx);\r\n}\r\n\r\n_EXPORT_STD template <class _Alloc>\r\nostream& operator<<(ostream& _Os, const basic_stacktrace<_Alloc>& _St) {\r\n    return _Os << _STD to_string(_St);\r\n}\r\n\r\ntemplate <>\r\nstruct formatter<stacktrace_entry> {\r\n    template <class _ParseContext = basic_format_parse_context<char>> // improves throughput, see GH-5003\r\n    constexpr _ParseContext::iterator parse(type_identity_t<_ParseContext&> _Parse_ctx) {\r\n        return _Impl._Parse(_Parse_ctx);\r\n    }\r\n\r\n    template <class _FormatContext>\r\n    _FormatContext::iterator format(const stacktrace_entry& _Val, _FormatContext& _Format_ctx) const {\r\n        const auto _Str = _STD to_string(_Val);\r\n        return _Impl._Format(_Format_ctx, static_cast<int>(_Str.size()), _Fmt_align::_Left,\r\n            [&](_FormatContext::iterator _Out) { return _RANGES copy(_Str, _STD move(_Out)).out; });\r\n    }\r\n\r\nprivate:\r\n    _Fill_align_and_width_formatter<char> _Impl;\r\n};\r\n\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<stacktrace_entry> = true;\r\n\r\ntemplate <class _Alloc>\r\nstruct formatter<basic_stacktrace<_Alloc>> {\r\n    template <class _ParseContext = basic_format_parse_context<char>> // improves throughput, see GH-5003\r\n    constexpr _ParseContext::iterator parse(type_identity_t<_ParseContext&> _Parse_ctx) {\r\n        const auto _First = _Parse_ctx.begin();\r\n        if (_First != _Parse_ctx.end() && *_First != '}') {\r\n            _Throw_format_error(\"For formatter<basic_stacktrace<Allocator>>, format-spec must be empty.\");\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    template <class _FormatContext>\r\n    _FormatContext::iterator format(const basic_stacktrace<_Alloc>& _Val, _FormatContext& _Format_ctx) const {\r\n        return _RANGES copy(_STD to_string(_Val), _Format_ctx.out()).out;\r\n    }\r\n};\r\n\r\ntemplate <class _Alloc>\r\nconstexpr bool enable_nonlocking_formatter_optimization<basic_stacktrace<_Alloc>> = true;\r\n\r\nnamespace pmr {\r\n    _EXPORT_STD using stacktrace = basic_stacktrace<polymorphic_allocator<stacktrace_entry>>;\r\n}\r\n\r\ntemplate <>\r\nstruct hash<stacktrace_entry> {\r\n    // This is a C++23 feature, so argument_type and result_type are omitted.\r\n\r\n    _NODISCARD static size_t operator()(const stacktrace_entry& _Val) noexcept {\r\n        return _Hash_representation(_Val.native_handle());\r\n    }\r\n};\r\n\r\ntemplate <class _Alloc>\r\nstruct hash<basic_stacktrace<_Alloc>> {\r\n    // This is a C++23 feature, so argument_type and result_type are omitted.\r\n\r\n    _NODISCARD static size_t operator()(const basic_stacktrace<_Alloc>& _Val) noexcept {\r\n        return _Val._Get_hash();\r\n    }\r\n};\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _STACKTRACE_\r\n"
  },
  {
    "path": "stl/inc/stdexcept",
    "content": "// stdexcept standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _STDEXCEPT_\r\n#define _STDEXCEPT_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <exception>\r\n#include <xstring>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n_STD_BEGIN\r\n_EXPORT_STD class _NODISCARD logic_error : public exception { // base of all logic-error exceptions\r\npublic:\r\n    using _Mybase = exception;\r\n\r\n    explicit logic_error(const string& _Message) : _Mybase(_Message.c_str()) {}\r\n\r\n    explicit logic_error(const char* _Message) : _Mybase(_Message) {}\r\n\r\n#if !_HAS_EXCEPTIONS\r\nprotected:\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n#endif // !_HAS_EXCEPTIONS\r\n};\r\n\r\n_EXPORT_STD class _NODISCARD domain_error : public logic_error { // base of all domain-error exceptions\r\npublic:\r\n    using _Mybase = logic_error;\r\n\r\n    explicit domain_error(const string& _Message) : _Mybase(_Message.c_str()) {}\r\n\r\n    explicit domain_error(const char* _Message) : _Mybase(_Message) {}\r\n\r\n#if !_HAS_EXCEPTIONS\r\nprotected:\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n#endif // !_HAS_EXCEPTIONS\r\n};\r\n\r\n_EXPORT_STD class _NODISCARD invalid_argument : public logic_error { // base of all invalid-argument exceptions\r\npublic:\r\n    using _Mybase = logic_error;\r\n\r\n    explicit invalid_argument(const string& _Message) : _Mybase(_Message.c_str()) {}\r\n\r\n    explicit invalid_argument(const char* _Message) : _Mybase(_Message) {}\r\n\r\n#if !_HAS_EXCEPTIONS\r\nprotected:\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n#endif // !_HAS_EXCEPTIONS\r\n};\r\n\r\n_EXPORT_STD class _NODISCARD length_error : public logic_error { // base of all length-error exceptions\r\npublic:\r\n    using _Mybase = logic_error;\r\n\r\n    explicit length_error(const string& _Message) : _Mybase(_Message.c_str()) {}\r\n\r\n    explicit length_error(const char* _Message) : _Mybase(_Message) {}\r\n\r\n#if !_HAS_EXCEPTIONS\r\nprotected:\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n#endif // !_HAS_EXCEPTIONS\r\n};\r\n\r\n_EXPORT_STD class _NODISCARD out_of_range : public logic_error { // base of all out-of-range exceptions\r\npublic:\r\n    using _Mybase = logic_error;\r\n\r\n    explicit out_of_range(const string& _Message) : _Mybase(_Message.c_str()) {}\r\n\r\n    explicit out_of_range(const char* _Message) : _Mybase(_Message) {}\r\n\r\n#if !_HAS_EXCEPTIONS\r\nprotected:\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n#endif // !_HAS_EXCEPTIONS\r\n};\r\n\r\n_EXPORT_STD class _NODISCARD runtime_error : public exception { // base of all runtime-error exceptions\r\npublic:\r\n    using _Mybase = exception;\r\n\r\n    explicit runtime_error(const string& _Message) : _Mybase(_Message.c_str()) {}\r\n\r\n    explicit runtime_error(const char* _Message) : _Mybase(_Message) {}\r\n\r\n#if !_HAS_EXCEPTIONS\r\nprotected:\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n#endif // !_HAS_EXCEPTIONS\r\n};\r\n\r\n_EXPORT_STD class _NODISCARD overflow_error : public runtime_error { // base of all overflow-error exceptions\r\npublic:\r\n    using _Mybase = runtime_error;\r\n\r\n    explicit overflow_error(const string& _Message) : _Mybase(_Message.c_str()) {}\r\n\r\n    explicit overflow_error(const char* _Message) : _Mybase(_Message) {}\r\n\r\n#if !_HAS_EXCEPTIONS\r\nprotected:\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n#endif // !_HAS_EXCEPTIONS\r\n};\r\n\r\n_EXPORT_STD class _NODISCARD underflow_error : public runtime_error { // base of all underflow-error exceptions\r\npublic:\r\n    using _Mybase = runtime_error;\r\n\r\n    explicit underflow_error(const string& _Message) : _Mybase(_Message.c_str()) {}\r\n\r\n    explicit underflow_error(const char* _Message) : _Mybase(_Message) {}\r\n\r\n#if !_HAS_EXCEPTIONS\r\nprotected:\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n#endif // !_HAS_EXCEPTIONS\r\n};\r\n\r\n_EXPORT_STD class _NODISCARD range_error : public runtime_error { // base of all range-error exceptions\r\npublic:\r\n    using _Mybase = runtime_error;\r\n\r\n    explicit range_error(const string& _Message) : _Mybase(_Message.c_str()) {}\r\n\r\n    explicit range_error(const char* _Message) : _Mybase(_Message) {}\r\n\r\n#if !_HAS_EXCEPTIONS\r\nprotected:\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n#endif // !_HAS_EXCEPTIONS\r\n};\r\n\r\n[[noreturn]] inline void _Throw_range_error(const char* const _Message) {\r\n    _THROW(range_error{_Message});\r\n}\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _STDEXCEPT_\r\n"
  },
  {
    "path": "stl/inc/stdfloat",
    "content": "// stdfloat standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _STDFLOAT_\r\n#define _STDFLOAT_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX23\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <stdfloat> are available only with C++23 or later.\");\r\n#else // ^^^ !_HAS_CXX23 / _HAS_CXX23 vvv\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// We don't support any optional extended floating-point types, but we do need to provide an empty `namespace std`.\r\n// We don't need to `export` it for modules, as the other headers will implicitly do so (N4950 [module.interface]/2.1).\r\n_STD_BEGIN\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _STDFLOAT_\r\n"
  },
  {
    "path": "stl/inc/stop_token",
    "content": "// stop_token standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _STOP_TOKEN_\r\n#define _STOP_TOKEN_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX20\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <stop_token> are available only with C++20 or later.\");\r\n#else // ^^^ !_HAS_CXX20 / _HAS_CXX20 vvv\r\n\r\n#include <atomic>\r\n#include <xmemory>\r\n#include <xthreads.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD struct nostopstate_t {\r\n    explicit nostopstate_t() = default;\r\n};\r\n\r\n_EXPORT_STD inline constexpr nostopstate_t nostopstate{};\r\n\r\nstruct _Stop_state;\r\n_EXPORT_STD class stop_token;\r\n\r\nclass _Stop_callback_base {\r\n    friend _Stop_state;\r\n\r\nprivate:\r\n    using _Callback_fn = void(__cdecl*)(_Stop_callback_base*) _NOEXCEPT_FNPTR;\r\n\r\npublic:\r\n    explicit _Stop_callback_base(const _Callback_fn _Fn_) noexcept : _Fn{_Fn_} {}\r\n\r\n    _Stop_callback_base(const _Stop_callback_base&)            = delete;\r\n    _Stop_callback_base& operator=(const _Stop_callback_base&) = delete;\r\n\r\nprotected:\r\n    // if _Token is _Stop_requested, calls the callback;\r\n    // otherwise, inserts *this into the callback list if stop is possible\r\n    inline void _Attach(const stop_token& _Token) noexcept;\r\n    inline void _Attach(stop_token&& _Token) noexcept;\r\n\r\n    // if *this is in a callback list, removes it\r\n    inline void _Detach() noexcept;\r\n\r\nprivate:\r\n    template <bool _Transfer_ownership>\r\n    void _Do_attach(conditional_t<_Transfer_ownership, _Stop_state*&, _Stop_state* const> _State) noexcept;\r\n\r\nprotected:\r\n    _Stop_state* _Parent       = nullptr;\r\n    _Stop_callback_base* _Next = nullptr;\r\n    _Stop_callback_base* _Prev = nullptr;\r\n    _Callback_fn _Fn;\r\n};\r\n\r\nstruct _Stop_state {\r\n    atomic<uint32_t> _Stop_tokens  = 1; // plus one shared by all stop_sources\r\n    atomic<uint32_t> _Stop_sources = 2; // plus the low order bit is the stop requested bit\r\n    _Locked_pointer<_Stop_callback_base> _Callbacks;\r\n    // always uses relaxed operations; ordering provided by the _Callbacks lock\r\n    // (atomic just to get wait/notify support)\r\n    atomic<const _Stop_callback_base*> _Current_callback = nullptr;\r\n    _Thrd_id_t _Stopping_thread                          = 0;\r\n\r\n    _NODISCARD bool _Stop_requested() const noexcept {\r\n        return (_Stop_sources.load() & uint32_t{1}) != 0;\r\n    }\r\n\r\n    _NODISCARD bool _Stop_possible() const noexcept {\r\n        return _Stop_sources.load() != 0;\r\n    }\r\n\r\n    _NODISCARD bool _Request_stop() noexcept {\r\n        // Attempts to request stop and call callbacks, returns whether request was successful\r\n        if ((_Stop_sources.fetch_or(uint32_t{1}) & uint32_t{1}) != 0) {\r\n            // another thread already requested\r\n            return false;\r\n        }\r\n\r\n        _Stopping_thread = _Thrd_id();\r\n        for (;;) {\r\n            auto _Head = _Callbacks._Lock_and_load();\r\n            _Current_callback.store(_Head, memory_order_relaxed);\r\n            _Current_callback.notify_all();\r\n            if (_Head == nullptr) {\r\n                _Callbacks._Store_and_unlock(nullptr);\r\n                return true;\r\n            }\r\n\r\n            const auto _Next = _STD exchange(_Head->_Next, nullptr);\r\n            _STL_INTERNAL_CHECK(_Head->_Prev == nullptr);\r\n            if (_Next != nullptr) {\r\n                _Next->_Prev = nullptr;\r\n            }\r\n\r\n            _Callbacks._Store_and_unlock(_Next); // unlock before running _Head so other registrations\r\n                                                 // can detach without blocking on the callback\r\n\r\n            _Head->_Fn(_Head); // might destroy *_Head\r\n        }\r\n    }\r\n};\r\n\r\n_EXPORT_STD class stop_source;\r\n\r\n_EXPORT_STD class stop_token {\r\n    friend stop_source;\r\n    friend _Stop_callback_base;\r\n\r\npublic:\r\n    stop_token() noexcept : _State{} {}\r\n    stop_token(const stop_token& _Other) noexcept : _State{_Other._State} {\r\n        const auto _Local = _State;\r\n        if (_Local != nullptr) {\r\n            _Local->_Stop_tokens.fetch_add(1, memory_order_relaxed);\r\n        }\r\n    }\r\n\r\n    stop_token(stop_token&& _Other) noexcept : _State{_STD exchange(_Other._State, nullptr)} {}\r\n    stop_token& operator=(const stop_token& _Other) noexcept {\r\n        stop_token{_Other}.swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    stop_token& operator=(stop_token&& _Other) noexcept {\r\n        stop_token{_STD move(_Other)}.swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    ~stop_token() {\r\n        const auto _Local = _State;\r\n        if (_Local != nullptr) {\r\n            if (_Local->_Stop_tokens.fetch_sub(1, memory_order_acq_rel) == 1) {\r\n                delete _Local;\r\n            }\r\n        }\r\n    }\r\n\r\n    void swap(stop_token& _Other) noexcept {\r\n        _STD swap(_State, _Other._State);\r\n    }\r\n\r\n    _NODISCARD bool stop_requested() const noexcept {\r\n        const auto _Local = _State;\r\n        return _Local != nullptr && _Local->_Stop_requested();\r\n    }\r\n\r\n    _NODISCARD bool stop_possible() const noexcept {\r\n        const auto _Local = _State;\r\n        return _Local != nullptr && _Local->_Stop_possible();\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const stop_token& _Lhs, const stop_token& _Rhs) noexcept = default;\r\n\r\n    friend void swap(stop_token& _Lhs, stop_token& _Rhs) noexcept {\r\n        _STD swap(_Lhs._State, _Rhs._State);\r\n    }\r\n\r\nprivate:\r\n    explicit stop_token(_Stop_state* const _State_) : _State{_State_} {}\r\n\r\n    _Stop_state* _State;\r\n};\r\n\r\n_EXPORT_STD class stop_source {\r\npublic:\r\n    stop_source() : _State{new _Stop_state} {}\r\n    explicit stop_source(nostopstate_t) noexcept : _State{} {}\r\n    stop_source(const stop_source& _Other) noexcept : _State{_Other._State} {\r\n        const auto _Local = _State;\r\n        if (_Local != nullptr) {\r\n            _Local->_Stop_sources.fetch_add(2, memory_order_relaxed);\r\n        }\r\n    }\r\n\r\n    stop_source(stop_source&& _Other) noexcept : _State{_STD exchange(_Other._State, nullptr)} {}\r\n    stop_source& operator=(const stop_source& _Other) noexcept {\r\n        stop_source{_Other}.swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    stop_source& operator=(stop_source&& _Other) noexcept {\r\n        stop_source{_STD move(_Other)}.swap(*this);\r\n        return *this;\r\n    }\r\n\r\n    ~stop_source() {\r\n        const auto _Local = _State;\r\n        if (_Local != nullptr) {\r\n            if ((_Local->_Stop_sources.fetch_sub(2, memory_order_acq_rel) >> 1) == 1) {\r\n                if (_Local->_Stop_tokens.fetch_sub(1, memory_order_acq_rel) == 1) {\r\n                    delete _Local;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    void swap(stop_source& _Other) noexcept {\r\n        _STD swap(_State, _Other._State);\r\n    }\r\n\r\n    _NODISCARD stop_token get_token() const noexcept {\r\n        const auto _Local = _State;\r\n        if (_Local != nullptr) {\r\n            _Local->_Stop_tokens.fetch_add(1, memory_order_relaxed);\r\n        }\r\n\r\n        return stop_token{_Local};\r\n    }\r\n\r\n    _NODISCARD bool stop_requested() const noexcept {\r\n        const auto _Local = _State;\r\n        return _Local != nullptr && _Local->_Stop_requested();\r\n    }\r\n\r\n    _NODISCARD bool stop_possible() const noexcept {\r\n        return _State != nullptr;\r\n    }\r\n\r\n    bool request_stop() noexcept {\r\n        const auto _Local = _State;\r\n        return _Local && _Local->_Request_stop();\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const stop_source& _Lhs, const stop_source& _Rhs) noexcept = default;\r\n\r\n    friend void swap(stop_source& _Lhs, stop_source& _Rhs) noexcept {\r\n        _STD swap(_Lhs._State, _Rhs._State);\r\n    }\r\n\r\nprivate:\r\n    _Stop_state* _State;\r\n};\r\n\r\ntemplate <bool _Transfer_ownership>\r\nvoid _Stop_callback_base::_Do_attach(\r\n    conditional_t<_Transfer_ownership, _Stop_state*&, _Stop_state* const> _State_raw) noexcept {\r\n    const auto _State = _State_raw; // avoid an indirection in all of the below\r\n    if (_State == nullptr) {\r\n        return;\r\n    }\r\n\r\n    // fast path check if the state is already known\r\n    auto _Local_sources = _State->_Stop_sources.load();\r\n    if ((_Local_sources & uint32_t{1}) != 0) {\r\n        // stop already requested\r\n        _Fn(this);\r\n        return;\r\n    }\r\n\r\n    if (_Local_sources == 0) {\r\n        return; // stop not possible\r\n    }\r\n\r\n    // fast path doesn't know, so try to insert\r\n    auto _Head = _State->_Callbacks._Lock_and_load();\r\n    // recheck the state in case it changed while we were waiting to acquire the lock\r\n    _Local_sources = _State->_Stop_sources.load();\r\n    if ((_Local_sources & uint32_t{1}) != 0) {\r\n        // stop already requested\r\n        _State->_Callbacks._Store_and_unlock(_Head);\r\n        _Fn(this);\r\n        return;\r\n    }\r\n\r\n    if (_Local_sources != 0) {\r\n        // stop possible, do the insert\r\n        _Parent = _State;\r\n        _Next   = _Head;\r\n        if constexpr (_Transfer_ownership) {\r\n            _State_raw = nullptr;\r\n        } else {\r\n            _State->_Stop_tokens.fetch_add(1, memory_order_relaxed);\r\n        }\r\n\r\n        if (_Head != nullptr) {\r\n            _Head->_Prev = this;\r\n        }\r\n\r\n        _Head = this;\r\n    }\r\n\r\n    _State->_Callbacks._Store_and_unlock(_Head);\r\n}\r\n\r\ninline void _Stop_callback_base::_Attach(const stop_token& _Token) noexcept {\r\n    this->_Do_attach<false>(_Token._State);\r\n}\r\n\r\ninline void _Stop_callback_base::_Attach(stop_token&& _Token) noexcept {\r\n    this->_Do_attach<true>(_Token._State);\r\n}\r\n\r\ninline void _Stop_callback_base::_Detach() noexcept {\r\n    stop_token _Token{_Parent}; // transfers ownership\r\n    if (_Token._State == nullptr) {\r\n        // callback was never inserted into the list\r\n        return;\r\n    }\r\n\r\n    auto _Head = _Token._State->_Callbacks._Lock_and_load();\r\n    if (this == _Head) {\r\n        // we are still in the list, so the callback is not being request_stop'd\r\n        const auto _Local_next = _Next;\r\n        if (_Local_next != nullptr) {\r\n            _Local_next->_Prev = nullptr;\r\n        }\r\n\r\n        _STL_INTERNAL_CHECK(_Prev == nullptr);\r\n        _Token._State->_Callbacks._Store_and_unlock(_Next);\r\n        return;\r\n    }\r\n\r\n    const auto _Local_prev = _Prev;\r\n    if (_Local_prev != nullptr) {\r\n        // we are still in the list, so the callback is not being request_stop'd, and there is at least one other\r\n        // callback still registered\r\n        const auto _Local_next = _Next;\r\n        if (_Local_next != nullptr) {\r\n            _Next->_Prev = _Local_prev;\r\n        }\r\n\r\n        _Prev->_Next = _Local_next;\r\n        _Token._State->_Callbacks._Store_and_unlock(_Head);\r\n        return;\r\n    }\r\n\r\n    // we aren't in the callback list even though we were added to it, so the stop requesting thread is attempting to\r\n    // call the callback\r\n    _STL_INTERNAL_CHECK((_Token._State->_Stop_sources.load() & uint32_t{1}) != 0);\r\n    if (_Token._State->_Current_callback.load(memory_order_acquire) != this\r\n        || _Token._State->_Stopping_thread == _Thrd_id()) {\r\n        // the callback is done or the dtor is being recursively reentered, do not block\r\n        _Token._State->_Callbacks._Store_and_unlock(_Head);\r\n        return;\r\n    }\r\n\r\n    // the callback is being executed by another thread, block until it is complete\r\n    _Token._State->_Callbacks._Store_and_unlock(_Head);\r\n    _Token._State->_Current_callback.wait(this, memory_order_acquire);\r\n}\r\n\r\n_EXPORT_STD template <class _Callback>\r\nclass stop_callback : public _Stop_callback_base {\r\npublic:\r\n    using callback_type = _Callback;\r\n\r\n    template <class _CbInitTy>\r\n        requires is_constructible_v<_Callback, _CbInitTy>\r\n    explicit stop_callback(const stop_token& _Token, _CbInitTy&& _Cb_)\r\n        noexcept(is_nothrow_constructible_v<_Callback, _CbInitTy>)\r\n        : _Stop_callback_base{_Invoke_by_stop}, _Cb(_STD forward<_CbInitTy>(_Cb_)) {\r\n        _Attach(_Token);\r\n    }\r\n\r\n    template <class _CbInitTy>\r\n        requires is_constructible_v<_Callback, _CbInitTy>\r\n    explicit stop_callback(stop_token&& _Token, _CbInitTy&& _Cb_)\r\n        noexcept(is_nothrow_constructible_v<_Callback, _CbInitTy>)\r\n        : _Stop_callback_base{_Invoke_by_stop}, _Cb(_STD forward<_CbInitTy>(_Cb_)) {\r\n        _Attach(_STD move(_Token));\r\n    }\r\n\r\n    ~stop_callback() {\r\n        _Detach();\r\n    }\r\n\r\nprivate:\r\n    static void __cdecl _Invoke_by_stop(_Stop_callback_base* const _This) noexcept // terminates\r\n    {\r\n        _STD forward<_Callback>(static_cast<stop_callback*>(_This)->_Cb)();\r\n    }\r\n\r\n    _Callback _Cb;\r\n};\r\n\r\ntemplate <class _Callback>\r\nstop_callback(stop_token, _Callback) -> stop_callback<_Callback>;\r\n\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _STOP_TOKEN_\r\n"
  },
  {
    "path": "stl/inc/streambuf",
    "content": "// streambuf standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _STREAMBUF_\r\n#define _STREAMBUF_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <xiosbase>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _Traits>\r\nclass basic_streambuf { // control read/write buffers\r\nprotected:\r\n    __CLR_OR_THIS_CALL basic_streambuf() : _Plocale(new locale) {\r\n        _Init();\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL basic_streambuf(_Uninitialized) noexcept {}\r\n\r\n    __CLR_OR_THIS_CALL basic_streambuf(const basic_streambuf& _Right) : _Plocale(new locale{_Right.getloc()}) {\r\n        _Init();\r\n        setp(_Right.pbase(), _Right.pptr(), _Right.epptr());\r\n        setg(_Right.eback(), _Right.gptr(), _Right.egptr());\r\n    }\r\n\r\n    basic_streambuf& __CLR_OR_THIS_CALL operator=(const basic_streambuf& _Right) {\r\n        if (this != _STD addressof(_Right)) {\r\n            setp(_Right.pbase(), _Right.pptr(), _Right.epptr());\r\n            setg(_Right.eback(), _Right.gptr(), _Right.egptr());\r\n            pubimbue(_Right.getloc());\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL swap(basic_streambuf& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Elem* _Pfirst0 = pbase();\r\n            _Elem* _Pnext0  = pptr();\r\n            _Elem* _Pend    = epptr();\r\n            _Elem* _Gfirst0 = eback();\r\n            _Elem* _Gnext0  = gptr();\r\n            _Elem* _Gend    = egptr();\r\n\r\n            setp(_Right.pbase(), _Right.pptr(), _Right.epptr());\r\n            _Right.setp(_Pfirst0, _Pnext0, _Pend);\r\n\r\n            setg(_Right.eback(), _Right.gptr(), _Right.egptr());\r\n            _Right.setg(_Gfirst0, _Gnext0, _Gend);\r\n\r\n            _STD swap(_Plocale, _Right._Plocale);\r\n        }\r\n    }\r\n\r\npublic:\r\n    using char_type   = _Elem;\r\n    using traits_type = _Traits;\r\n\r\n    virtual __CLR_OR_THIS_CALL ~basic_streambuf() noexcept {\r\n        delete _Plocale;\r\n    }\r\n\r\n    using int_type = typename _Traits::int_type;\r\n    using pos_type = typename _Traits::pos_type;\r\n    using off_type = typename _Traits::off_type;\r\n\r\n    pos_type __CLR_OR_THIS_CALL pubseekoff(off_type _Off, ios_base::seekdir _Way,\r\n        ios_base::openmode _Mode = ios_base::in | ios_base::out) { // change position by _Off, according to _Way, _Mode\r\n        return seekoff(_Off, _Way, _Mode);\r\n    }\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    pos_type __CLR_OR_THIS_CALL pubseekoff(off_type _Off, ios_base::seek_dir _Way,\r\n        ios_base::open_mode _Mode) { // change position by _Off, according to _Way, _Mode (old style)\r\n        return pubseekoff(_Off, static_cast<ios_base::seekdir>(_Way), static_cast<ios_base::openmode>(_Mode));\r\n    }\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    pos_type __CLR_OR_THIS_CALL pubseekpos(pos_type _Pos,\r\n        ios_base::openmode _Mode = ios_base::in | ios_base::out) { // change position to _Pos, according to _Mode\r\n        return seekpos(_Pos, _Mode);\r\n    }\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    pos_type __CLR_OR_THIS_CALL pubseekpos(pos_type _Pos,\r\n        ios_base::open_mode _Mode) { // change position to _Pos, according to _Mode (old style)\r\n        return seekpos(_Pos, static_cast<ios_base::openmode>(_Mode));\r\n    }\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    basic_streambuf* __CLR_OR_THIS_CALL pubsetbuf(_Elem* _Buffer,\r\n        streamsize _Count) { // offer _Buffer to external agent\r\n        return setbuf(_Buffer, _Count);\r\n    }\r\n\r\n    locale __CLR_OR_THIS_CALL pubimbue(const locale& _Newlocale) { // set locale to argument\r\n        locale _Oldlocale = *_Plocale;\r\n        imbue(_Newlocale);\r\n        *_Plocale = _Newlocale;\r\n        return _Oldlocale;\r\n    }\r\n\r\n    locale __CLR_OR_THIS_CALL getloc() const noexcept /* strengthened */ { // get locale\r\n        return *_Plocale;\r\n    }\r\n\r\n    streamsize __CLR_OR_THIS_CALL in_avail() {\r\n        streamsize _Res = _Gnavail();\r\n        return 0 < _Res ? _Res : showmanyc();\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL pubsync() { // synchronize with external agent\r\n        return sync();\r\n    }\r\n\r\n    int_type __CLR_OR_THIS_CALL sbumpc() { // get a character and point past it\r\n        return 0 < _Gnavail() ? _Traits::to_int_type(*_Gninc()) : uflow();\r\n    }\r\n\r\n    int_type __CLR_OR_THIS_CALL sgetc() { // get a character and don't point past it\r\n        return 0 < _Gnavail() ? _Traits::to_int_type(*gptr()) : underflow();\r\n    }\r\n\r\n    streamsize __CLR_OR_THIS_CALL sgetn(_Elem* _Ptr,\r\n        streamsize _Count) { // get up to _Count characters into array beginning at _Ptr\r\n        return xsgetn(_Ptr, _Count);\r\n    }\r\n\r\n    int_type __CLR_OR_THIS_CALL snextc() { // point to next character and return it\r\n        return 1 < _Gnavail()                                 ? _Traits::to_int_type(*_Gnpreinc())\r\n             : _Traits::eq_int_type(_Traits::eof(), sbumpc()) ? _Traits::eof()\r\n                                                              : sgetc();\r\n    }\r\n\r\n    int_type __CLR_OR_THIS_CALL sputbackc(_Elem _Ch) { // put back _Ch\r\n        if (gptr() && eback() < gptr() && _Traits::eq(_Ch, gptr()[-1])) {\r\n            return _Traits::to_int_type(*_Gndec());\r\n        }\r\n\r\n        return pbackfail(_Traits::to_int_type(_Ch));\r\n    }\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    void __CLR_OR_THIS_CALL stossc() { // point past a character\r\n        if (0 < _Gnavail()) {\r\n            _Gninc();\r\n        } else {\r\n            uflow();\r\n        }\r\n    }\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    int_type __CLR_OR_THIS_CALL sungetc() { // back up one position\r\n        return gptr() && eback() < gptr() ? _Traits::to_int_type(*_Gndec()) : pbackfail();\r\n    }\r\n\r\n    int_type __CLR_OR_THIS_CALL sputc(_Elem _Ch) { // put a character\r\n        return 0 < _Pnavail() ? _Traits::to_int_type(*_Pninc() = _Ch) : overflow(_Traits::to_int_type(_Ch));\r\n    }\r\n\r\n    streamsize __CLR_OR_THIS_CALL sputn(const _Elem* _Ptr,\r\n        streamsize _Count) { // put _Count characters from array beginning at _Ptr\r\n        return xsputn(_Ptr, _Count);\r\n    }\r\n\r\n    virtual void __CLR_OR_THIS_CALL _Lock() {} // set the thread lock (overridden by basic_filebuf)\r\n\r\n    virtual void __CLR_OR_THIS_CALL _Unlock() {} // clear the thread lock (overridden by basic_filebuf)\r\n\r\nprotected:\r\n    _Elem* __CLR_OR_THIS_CALL eback() const noexcept /* strengthened */ {\r\n        return *_IGfirst;\r\n    }\r\n\r\n    _Elem* __CLR_OR_THIS_CALL gptr() const noexcept /* strengthened */ {\r\n        return *_IGnext;\r\n    }\r\n\r\n    _Elem* __CLR_OR_THIS_CALL pbase() const noexcept /* strengthened */ {\r\n        return *_IPfirst;\r\n    }\r\n\r\n    _Elem* __CLR_OR_THIS_CALL pptr() const noexcept /* strengthened */ {\r\n        return *_IPnext;\r\n    }\r\n\r\n    _Elem* __CLR_OR_THIS_CALL egptr() const noexcept /* strengthened */ {\r\n        return *_IGnext + *_IGcount;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL gbump(int _Off) noexcept /* strengthened */ {\r\n        // alter current position in read buffer by _Off\r\n        *_IGcount -= _Off;\r\n        *_IGnext += _Off;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL setg(_Elem* _First, _Elem* _Next, _Elem* _Last) noexcept /* strengthened */ {\r\n        // set pointers for read buffer\r\n        *_IGfirst = _First;\r\n        *_IGnext  = _Next;\r\n        *_IGcount = static_cast<int>(_Last - _Next);\r\n    }\r\n\r\n    _Elem* __CLR_OR_THIS_CALL epptr() const noexcept /* strengthened */ {\r\n        return *_IPnext + *_IPcount;\r\n    }\r\n\r\n    _Elem* __CLR_OR_THIS_CALL _Gndec() noexcept { // decrement current position in read buffer\r\n        ++*_IGcount;\r\n        return --*_IGnext;\r\n    }\r\n\r\n    _Elem* __CLR_OR_THIS_CALL _Gninc() noexcept { // increment current position in read buffer\r\n        --*_IGcount;\r\n        return (*_IGnext)++;\r\n    }\r\n\r\n    _Elem* __CLR_OR_THIS_CALL _Gnpreinc() noexcept { // preincrement current position in read buffer\r\n        --*_IGcount;\r\n        return ++(*_IGnext);\r\n    }\r\n\r\n    streamsize __CLR_OR_THIS_CALL _Gnavail() const noexcept { // count number of available elements in read buffer\r\n        return *_IGnext ? *_IGcount : 0;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL pbump(int _Off) noexcept /* strengthened */ {\r\n        // alter current position in write buffer by _Off\r\n        *_IPcount -= _Off;\r\n        *_IPnext += _Off;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL setp(_Elem* _First, _Elem* _Last) noexcept /* strengthened */ {\r\n        // set pointers for write buffer\r\n        *_IPfirst = _First;\r\n        *_IPnext  = _First;\r\n        *_IPcount = static_cast<int>(_Last - _First);\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL setp(_Elem* _First, _Elem* _Next, _Elem* _Last) noexcept /* strengthened */ {\r\n        // set pointers for write buffer, extended version\r\n        *_IPfirst = _First;\r\n        *_IPnext  = _Next;\r\n        *_IPcount = static_cast<int>(_Last - _Next);\r\n    }\r\n\r\n    _Elem* __CLR_OR_THIS_CALL _Pninc() noexcept { // increment current position in write buffer\r\n        --*_IPcount;\r\n        return (*_IPnext)++;\r\n    }\r\n\r\n    streamsize __CLR_OR_THIS_CALL _Pnavail() const noexcept { // count number of available positions in write buffer\r\n        return *_IPnext ? *_IPcount : 0;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Init() noexcept { // initialize buffer parameters for no buffers\r\n        _IGfirst = &_Gfirst;\r\n        _IPfirst = &_Pfirst;\r\n        _IGnext  = &_Gnext;\r\n        _IPnext  = &_Pnext;\r\n        _IGcount = &_Gcount;\r\n        _IPcount = &_Pcount;\r\n        setp(nullptr, nullptr);\r\n        setg(nullptr, nullptr, nullptr);\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Init(_Elem** _Gf, _Elem** _Gn, int* _Gc, _Elem** _Pf, _Elem** _Pn, int* _Pc) noexcept {\r\n        // initialize buffer parameters as specified\r\n        _IGfirst = _Gf;\r\n        _IPfirst = _Pf;\r\n        _IGnext  = _Gn;\r\n        _IPnext  = _Pn;\r\n        _IGcount = _Gc;\r\n        _IPcount = _Pc;\r\n    }\r\n\r\n    virtual int_type __CLR_OR_THIS_CALL overflow(int_type = _Traits::eof()) { // put a character to stream (always fail)\r\n        return _Traits::eof();\r\n    }\r\n\r\n    virtual int_type __CLR_OR_THIS_CALL pbackfail(int_type = _Traits::eof()) {\r\n        // put a character back to stream (always fail)\r\n        return _Traits::eof();\r\n    }\r\n\r\n    virtual streamsize __CLR_OR_THIS_CALL showmanyc() {\r\n        return 0;\r\n    }\r\n\r\n    virtual int_type __CLR_OR_THIS_CALL underflow() { // get a character from stream, but don't point past it\r\n        return _Traits::eof();\r\n    }\r\n\r\n    virtual int_type __CLR_OR_THIS_CALL uflow() { // get a character from stream, point past it\r\n        return _Traits::eq_int_type(_Traits::eof(), underflow()) ? _Traits::eof() : _Traits::to_int_type(*_Gninc());\r\n    }\r\n\r\n    virtual streamsize __CLR_OR_THIS_CALL xsgetn(_Elem* _Ptr, streamsize _Count) { // get _Count characters from stream\r\n        const streamsize _Start_count = _Count;\r\n\r\n        while (0 < _Count) {\r\n            streamsize _Size = _Gnavail();\r\n            if (0 < _Size) { // copy from read buffer\r\n                if (_Count < _Size) {\r\n                    _Size = _Count;\r\n                }\r\n\r\n                _Traits::copy(_Ptr, gptr(), static_cast<size_t>(_Size));\r\n                _Ptr += _Size;\r\n                _Count -= _Size;\r\n                gbump(static_cast<int>(_Size));\r\n            } else {\r\n                const int_type _Meta = uflow();\r\n                if (_Traits::eq_int_type(_Traits::eof(), _Meta)) {\r\n                    break; // end of file, quit\r\n                }\r\n\r\n                // get a single character\r\n                *_Ptr++ = _Traits::to_char_type(_Meta);\r\n                --_Count;\r\n            }\r\n        }\r\n\r\n        return _Start_count - _Count;\r\n    }\r\n\r\n    virtual streamsize __CLR_OR_THIS_CALL xsputn(const _Elem* _Ptr, streamsize _Count) {\r\n        // put _Count characters to stream\r\n        const streamsize _Start_count = _Count;\r\n        while (0 < _Count) {\r\n            streamsize _Size = _Pnavail();\r\n            if (0 < _Size) { // copy to write buffer\r\n                if (_Count < _Size) {\r\n                    _Size = _Count;\r\n                }\r\n\r\n                _Traits::copy(pptr(), _Ptr, static_cast<size_t>(_Size));\r\n                _Ptr += _Size;\r\n                _Count -= _Size;\r\n                pbump(static_cast<int>(_Size));\r\n            } else if (_Traits::eq_int_type(_Traits::eof(), overflow(_Traits::to_int_type(*_Ptr)))) {\r\n                break; // single character put failed, quit\r\n            } else { // count character successfully put\r\n                ++_Ptr;\r\n                --_Count;\r\n            }\r\n        }\r\n\r\n        return _Start_count - _Count;\r\n    }\r\n\r\n    virtual pos_type __CLR_OR_THIS_CALL seekoff(\r\n        off_type, ios_base::seekdir, ios_base::openmode = ios_base::in | ios_base::out) {\r\n        // change position by offset, according to way and mode\r\n        return pos_type{off_type{-1}};\r\n    }\r\n\r\n    virtual pos_type __CLR_OR_THIS_CALL seekpos(pos_type, ios_base::openmode = ios_base::in | ios_base::out) {\r\n        // change to specified position, according to mode\r\n        return pos_type{off_type{-1}};\r\n    }\r\n\r\n    virtual basic_streambuf* __CLR_OR_THIS_CALL setbuf(_Elem*, streamsize) {\r\n        // offer buffer to external agent (do nothing)\r\n        return this;\r\n    }\r\n\r\n    virtual int __CLR_OR_THIS_CALL sync() { // synchronize with external agent (do nothing)\r\n        return 0;\r\n    }\r\n\r\n    virtual void __CLR_OR_THIS_CALL imbue(const locale&) {} // set locale to argument (do nothing)\r\n\r\nprivate:\r\n    _Elem* _Gfirst{}; // beginning of read buffer\r\n    _Elem* _Pfirst{}; // beginning of write buffer\r\n    _Elem** _IGfirst{}; // pointer to beginning of read buffer\r\n    _Elem** _IPfirst{}; // pointer to beginning of write buffer\r\n    _Elem* _Gnext{}; // current position in read buffer\r\n    _Elem* _Pnext{}; // current position in write buffer\r\n    _Elem** _IGnext{}; // pointer to current position in read buffer\r\n    _Elem** _IPnext{}; // pointer to current position in write buffer\r\n\r\n    int _Gcount{}; // length of read buffer\r\n    int _Pcount{}; // length of write buffer\r\n    int* _IGcount{}; // pointer to length of read buffer\r\n    int* _IPcount{}; // pointer to length of write buffer\r\n\r\nprotected:\r\n    locale* _Plocale{}; // pointer to imbued locale object\r\n};\r\n\r\n#if defined(_DLL_CPPLIB)\r\n\r\n#if !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\ntemplate class _CRTIMP2_PURE_IMPORT basic_streambuf<char, char_traits<char>>;\r\ntemplate class _CRTIMP2_PURE_IMPORT basic_streambuf<wchar_t, char_traits<wchar_t>>;\r\n#endif // !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\n\r\n#ifdef __FORCE_INSTANCE\r\ntemplate class _CRTIMP2_PURE_IMPORT basic_streambuf<unsigned short, char_traits<unsigned short>>;\r\n#endif // defined(__FORCE_INSTANCE)\r\n#endif // defined(_DLL_CPPLIB)\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _STREAMBUF_\r\n"
  },
  {
    "path": "stl/inc/string",
    "content": "// string standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _STRING_\r\n#define _STRING_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <xstring>\r\n// The <cctype> include below is to workaround many projects that assumed\r\n// <string> includes it. We workaround it instead of fixing all the upstream\r\n// projects because <cctype> is inexpensive. See VSO-663136.\r\n#include <cctype>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nbasic_istream<_Elem, _Traits>& getline(\r\n    basic_istream<_Elem, _Traits>&& _Istr, basic_string<_Elem, _Traits, _Alloc>& _Str, const _Elem _Delim) {\r\n    // get characters into string, discard delimiter\r\n    using _Myis = basic_istream<_Elem, _Traits>;\r\n\r\n    typename _Myis::iostate _State = _Myis::goodbit;\r\n    bool _Changed                  = false;\r\n    const typename _Myis::sentry _Ok(_Istr, true);\r\n\r\n    if (_Ok) { // state okay, extract characters\r\n        _TRY_IO_BEGIN\r\n        _Str.erase();\r\n        const typename _Traits::int_type _Metadelim = _Traits::to_int_type(_Delim);\r\n        typename _Traits::int_type _Meta            = _Istr.rdbuf()->sgetc();\r\n\r\n        for (;; _Meta = _Istr.rdbuf()->snextc()) {\r\n            if (_Traits::eq_int_type(_Traits::eof(), _Meta)) { // end of file, quit\r\n                _State |= _Myis::eofbit;\r\n                break;\r\n            } else if (_Traits::eq_int_type(_Meta, _Metadelim)) { // got a delimiter, discard it and quit\r\n                _Changed = true;\r\n                _Istr.rdbuf()->sbumpc();\r\n                break;\r\n            } else if (_Str.max_size() <= _Str.size()) { // string too large, quit\r\n                _State |= _Myis::failbit;\r\n                break;\r\n            } else { // got a character, add it to string\r\n                _Str += _Traits::to_char_type(_Meta);\r\n                _Changed = true;\r\n            }\r\n        }\r\n        _CATCH_IO_(_Myis, _Istr)\r\n    }\r\n\r\n    if (!_Changed) {\r\n        _State |= _Myis::failbit;\r\n    }\r\n\r\n    _Istr.setstate(_State);\r\n    return static_cast<basic_istream<_Elem, _Traits>&>(_Istr);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nbasic_istream<_Elem, _Traits>& getline(\r\n    basic_istream<_Elem, _Traits>&& _Istr, basic_string<_Elem, _Traits, _Alloc>& _Str) {\r\n    // get characters into string, discard newline\r\n    return _STD getline(_STD move(_Istr), _Str, _Istr.widen('\\n'));\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nbasic_istream<_Elem, _Traits>& getline(\r\n    basic_istream<_Elem, _Traits>& _Istr, basic_string<_Elem, _Traits, _Alloc>& _Str, const _Elem _Delim) {\r\n    // get characters into string, discard delimiter\r\n    return _STD getline(_STD move(_Istr), _Str, _Delim);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nbasic_istream<_Elem, _Traits>& getline(\r\n    basic_istream<_Elem, _Traits>& _Istr, basic_string<_Elem, _Traits, _Alloc>& _Str) {\r\n    // get characters into string, discard newline\r\n    return _STD getline(_STD move(_Istr), _Str, _Istr.widen('\\n'));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline int stoi(const string& _Str, size_t* _Idx = nullptr, int _Base = 10) {\r\n    int& _Errno_ref  = errno; // Nonzero cost, pay it once\r\n    const char* _Ptr = _Str.c_str();\r\n    char* _Eptr;\r\n    _Errno_ref      = 0;\r\n    const long _Ans = _CSTD strtol(_Ptr, &_Eptr, _Base);\r\n\r\n    if (_Ptr == _Eptr) {\r\n        _Xinvalid_argument(\"invalid stoi argument\");\r\n    }\r\n\r\n    if (_Errno_ref == ERANGE) {\r\n        _Xout_of_range(\"stoi argument out of range\");\r\n    }\r\n\r\n    if (_Idx) {\r\n        *_Idx = static_cast<size_t>(_Eptr - _Ptr);\r\n    }\r\n\r\n    return static_cast<int>(_Ans);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long stol(const string& _Str, size_t* _Idx = nullptr, int _Base = 10) {\r\n    int& _Errno_ref  = errno; // Nonzero cost, pay it once\r\n    const char* _Ptr = _Str.c_str();\r\n    char* _Eptr;\r\n    _Errno_ref      = 0;\r\n    const long _Ans = _CSTD strtol(_Ptr, &_Eptr, _Base);\r\n\r\n    if (_Ptr == _Eptr) {\r\n        _Xinvalid_argument(\"invalid stol argument\");\r\n    }\r\n\r\n    if (_Errno_ref == ERANGE) {\r\n        _Xout_of_range(\"stol argument out of range\");\r\n    }\r\n\r\n    if (_Idx) {\r\n        *_Idx = static_cast<size_t>(_Eptr - _Ptr);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline unsigned long stoul(const string& _Str, size_t* _Idx = nullptr, int _Base = 10) {\r\n    int& _Errno_ref  = errno; // Nonzero cost, pay it once\r\n    const char* _Ptr = _Str.c_str();\r\n    char* _Eptr;\r\n    _Errno_ref               = 0;\r\n    const unsigned long _Ans = _CSTD strtoul(_Ptr, &_Eptr, _Base);\r\n\r\n    if (_Ptr == _Eptr) {\r\n        _Xinvalid_argument(\"invalid stoul argument\");\r\n    }\r\n\r\n    if (_Errno_ref == ERANGE) {\r\n        _Xout_of_range(\"stoul argument out of range\");\r\n    }\r\n\r\n    if (_Idx) {\r\n        *_Idx = static_cast<size_t>(_Eptr - _Ptr);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long long stoll(const string& _Str, size_t* _Idx = nullptr, int _Base = 10) {\r\n    int& _Errno_ref  = errno; // Nonzero cost, pay it once\r\n    const char* _Ptr = _Str.c_str();\r\n    char* _Eptr;\r\n    _Errno_ref           = 0;\r\n    const long long _Ans = _CSTD strtoll(_Ptr, &_Eptr, _Base);\r\n\r\n    if (_Ptr == _Eptr) {\r\n        _Xinvalid_argument(\"invalid stoll argument\");\r\n    }\r\n\r\n    if (_Errno_ref == ERANGE) {\r\n        _Xout_of_range(\"stoll argument out of range\");\r\n    }\r\n\r\n    if (_Idx) {\r\n        *_Idx = static_cast<size_t>(_Eptr - _Ptr);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline unsigned long long stoull(const string& _Str, size_t* _Idx = nullptr, int _Base = 10) {\r\n    int& _Errno_ref  = errno; // Nonzero cost, pay it once\r\n    const char* _Ptr = _Str.c_str();\r\n    char* _Eptr;\r\n    _Errno_ref                    = 0;\r\n    const unsigned long long _Ans = _CSTD strtoull(_Ptr, &_Eptr, _Base);\r\n\r\n    if (_Ptr == _Eptr) {\r\n        _Xinvalid_argument(\"invalid stoull argument\");\r\n    }\r\n\r\n    if (_Errno_ref == ERANGE) {\r\n        _Xout_of_range(\"stoull argument out of range\");\r\n    }\r\n\r\n    if (_Idx) {\r\n        *_Idx = static_cast<size_t>(_Eptr - _Ptr);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float stof(const string& _Str, size_t* _Idx = nullptr) {\r\n    int& _Errno_ref  = errno; // Nonzero cost, pay it once\r\n    const char* _Ptr = _Str.c_str();\r\n    char* _Eptr;\r\n    _Errno_ref       = 0;\r\n    const float _Ans = _CSTD strtof(_Ptr, &_Eptr);\r\n\r\n    if (_Ptr == _Eptr) {\r\n        _Xinvalid_argument(\"invalid stof argument\");\r\n    }\r\n\r\n    if (_Errno_ref == ERANGE) {\r\n        _Xout_of_range(\"stof argument out of range\");\r\n    }\r\n\r\n    if (_Idx) {\r\n        *_Idx = static_cast<size_t>(_Eptr - _Ptr);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double stod(const string& _Str, size_t* _Idx = nullptr) {\r\n    int& _Errno_ref  = errno; // Nonzero cost, pay it once\r\n    const char* _Ptr = _Str.c_str();\r\n    char* _Eptr;\r\n    _Errno_ref        = 0;\r\n    const double _Ans = _CSTD strtod(_Ptr, &_Eptr);\r\n\r\n    if (_Ptr == _Eptr) {\r\n        _Xinvalid_argument(\"invalid stod argument\");\r\n    }\r\n\r\n    if (_Errno_ref == ERANGE) {\r\n        _Xout_of_range(\"stod argument out of range\");\r\n    }\r\n\r\n    if (_Idx) {\r\n        *_Idx = static_cast<size_t>(_Eptr - _Ptr);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double stold(const string& _Str, size_t* _Idx = nullptr) {\r\n    int& _Errno_ref  = errno; // Nonzero cost, pay it once\r\n    const char* _Ptr = _Str.c_str();\r\n    char* _Eptr;\r\n    _Errno_ref             = 0;\r\n    const long double _Ans = _CSTD strtold(_Ptr, &_Eptr);\r\n\r\n    if (_Ptr == _Eptr) {\r\n        _Xinvalid_argument(\"invalid stold argument\");\r\n    }\r\n\r\n    if (_Errno_ref == ERANGE) {\r\n        _Xout_of_range(\"stold argument out of range\");\r\n    }\r\n\r\n    if (_Idx) {\r\n        *_Idx = static_cast<size_t>(_Eptr - _Ptr);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline int stoi(const wstring& _Str, size_t* _Idx = nullptr, int _Base = 10) {\r\n    int& _Errno_ref     = errno; // Nonzero cost, pay it once\r\n    const wchar_t* _Ptr = _Str.c_str();\r\n    wchar_t* _Eptr;\r\n    _Errno_ref      = 0;\r\n    const long _Ans = _CSTD wcstol(_Ptr, &_Eptr, _Base);\r\n\r\n    if (_Ptr == _Eptr) {\r\n        _Xinvalid_argument(\"invalid stoi argument\");\r\n    }\r\n\r\n    if (_Errno_ref == ERANGE) {\r\n        _Xout_of_range(\"stoi argument out of range\");\r\n    }\r\n\r\n    if (_Idx) {\r\n        *_Idx = static_cast<size_t>(_Eptr - _Ptr);\r\n    }\r\n\r\n    return static_cast<int>(_Ans);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long stol(const wstring& _Str, size_t* _Idx = nullptr, int _Base = 10) {\r\n    int& _Errno_ref     = errno; // Nonzero cost, pay it once\r\n    const wchar_t* _Ptr = _Str.c_str();\r\n    wchar_t* _Eptr;\r\n    _Errno_ref      = 0;\r\n    const long _Ans = _CSTD wcstol(_Ptr, &_Eptr, _Base);\r\n\r\n    if (_Ptr == _Eptr) {\r\n        _Xinvalid_argument(\"invalid stol argument\");\r\n    }\r\n\r\n    if (_Errno_ref == ERANGE) {\r\n        _Xout_of_range(\"stol argument out of range\");\r\n    }\r\n\r\n    if (_Idx) {\r\n        *_Idx = static_cast<size_t>(_Eptr - _Ptr);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline unsigned long stoul(const wstring& _Str, size_t* _Idx = nullptr, int _Base = 10) {\r\n    int& _Errno_ref     = errno; // Nonzero cost, pay it once\r\n    const wchar_t* _Ptr = _Str.c_str();\r\n    wchar_t* _Eptr;\r\n    _Errno_ref               = 0;\r\n    const unsigned long _Ans = _CSTD wcstoul(_Ptr, &_Eptr, _Base);\r\n\r\n    if (_Ptr == _Eptr) {\r\n        _Xinvalid_argument(\"invalid stoul argument\");\r\n    }\r\n\r\n    if (_Errno_ref == ERANGE) {\r\n        _Xout_of_range(\"stoul argument out of range\");\r\n    }\r\n\r\n    if (_Idx) {\r\n        *_Idx = static_cast<size_t>(_Eptr - _Ptr);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long long stoll(const wstring& _Str, size_t* _Idx = nullptr, int _Base = 10) {\r\n    int& _Errno_ref     = errno; // Nonzero cost, pay it once\r\n    const wchar_t* _Ptr = _Str.c_str();\r\n    wchar_t* _Eptr;\r\n    _Errno_ref           = 0;\r\n    const long long _Ans = _CSTD wcstoll(_Ptr, &_Eptr, _Base);\r\n\r\n    if (_Ptr == _Eptr) {\r\n        _Xinvalid_argument(\"invalid stoll argument\");\r\n    }\r\n\r\n    if (_Errno_ref == ERANGE) {\r\n        _Xout_of_range(\"stoll argument out of range\");\r\n    }\r\n\r\n    if (_Idx) {\r\n        *_Idx = static_cast<size_t>(_Eptr - _Ptr);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline unsigned long long stoull(const wstring& _Str, size_t* _Idx = nullptr, int _Base = 10) {\r\n    int& _Errno_ref     = errno; // Nonzero cost, pay it once\r\n    const wchar_t* _Ptr = _Str.c_str();\r\n    wchar_t* _Eptr;\r\n    _Errno_ref                    = 0;\r\n    const unsigned long long _Ans = _CSTD wcstoull(_Ptr, &_Eptr, _Base);\r\n\r\n    if (_Ptr == _Eptr) {\r\n        _Xinvalid_argument(\"invalid stoull argument\");\r\n    }\r\n\r\n    if (_Errno_ref == ERANGE) {\r\n        _Xout_of_range(\"stoull argument out of range\");\r\n    }\r\n\r\n    if (_Idx) {\r\n        *_Idx = static_cast<size_t>(_Eptr - _Ptr);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline float stof(const wstring& _Str, size_t* _Idx = nullptr) {\r\n    int& _Errno_ref     = errno; // Nonzero cost, pay it once\r\n    const wchar_t* _Ptr = _Str.c_str();\r\n    wchar_t* _Eptr;\r\n    _Errno_ref       = 0;\r\n    const float _Ans = _CSTD wcstof(_Ptr, &_Eptr);\r\n\r\n    if (_Ptr == _Eptr) {\r\n        _Xinvalid_argument(\"invalid stof argument\");\r\n    }\r\n\r\n    if (_Errno_ref == ERANGE) {\r\n        _Xout_of_range(\"stof argument out of range\");\r\n    }\r\n\r\n    if (_Idx) {\r\n        *_Idx = static_cast<size_t>(_Eptr - _Ptr);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline double stod(const wstring& _Str, size_t* _Idx = nullptr) {\r\n    int& _Errno_ref     = errno; // Nonzero cost, pay it once\r\n    const wchar_t* _Ptr = _Str.c_str();\r\n    wchar_t* _Eptr;\r\n    _Errno_ref        = 0;\r\n    const double _Ans = _CSTD wcstod(_Ptr, &_Eptr);\r\n\r\n    if (_Ptr == _Eptr) {\r\n        _Xinvalid_argument(\"invalid stod argument\");\r\n    }\r\n\r\n    if (_Errno_ref == ERANGE) {\r\n        _Xout_of_range(\"stod argument out of range\");\r\n    }\r\n\r\n    if (_Idx) {\r\n        *_Idx = static_cast<size_t>(_Eptr - _Ptr);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline long double stold(const wstring& _Str, size_t* _Idx = nullptr) {\r\n    int& _Errno_ref     = errno; // Nonzero cost, pay it once\r\n    const wchar_t* _Ptr = _Str.c_str();\r\n    wchar_t* _Eptr;\r\n    _Errno_ref             = 0;\r\n    const long double _Ans = _CSTD wcstold(_Ptr, &_Eptr);\r\n\r\n    if (_Ptr == _Eptr) {\r\n        _Xinvalid_argument(\"invalid stold argument\");\r\n    }\r\n\r\n    if (_Errno_ref == ERANGE) {\r\n        _Xout_of_range(\"stold argument out of range\");\r\n    }\r\n\r\n    if (_Idx) {\r\n        *_Idx = static_cast<size_t>(_Eptr - _Ptr);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\ntemplate <class _Elem, class _Ty>\r\n_NODISCARD basic_string<_Elem> _Integral_to_string(const _Ty _Val) {\r\n    // convert _Val to string\r\n    static_assert(is_integral_v<_Ty>, \"_Ty must be integral\");\r\n    _Elem _Buff[21]; // can hold -2^63 and 2^64 - 1, plus NUL\r\n    _Elem* const _Buff_end = _STD end(_Buff);\r\n    _Elem* _RNext          = _Buff_end;\r\n\r\n    if constexpr (is_signed_v<_Ty>) {\r\n        const auto _UVal = static_cast<make_unsigned_t<_Ty>>(_Val);\r\n        if (_Val < 0) {\r\n            _RNext    = _UIntegral_to_buff(_RNext, 0 - _UVal);\r\n            *--_RNext = '-';\r\n        } else {\r\n            _RNext = _UIntegral_to_buff(_RNext, _UVal);\r\n        }\r\n    } else {\r\n        _RNext = _UIntegral_to_buff(_RNext, _Val);\r\n    }\r\n\r\n    return basic_string<_Elem>(_RNext, _Buff_end);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline string to_string(int _Val) {\r\n    return _Integral_to_string<char>(_Val);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline string to_string(unsigned int _Val) {\r\n    return _Integral_to_string<char>(_Val);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline string to_string(long _Val) {\r\n    return _Integral_to_string<char>(_Val);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline string to_string(unsigned long _Val) {\r\n    return _Integral_to_string<char>(_Val);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline string to_string(long long _Val) {\r\n    return _Integral_to_string<char>(_Val);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline string to_string(unsigned long long _Val) {\r\n    return _Integral_to_string<char>(_Val);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline string to_string(double _Val) {\r\n    const auto _Len = static_cast<size_t>(_CSTD _scprintf(\"%f\", _Val));\r\n    string _Str(_Len, '\\0');\r\n    _CSTD sprintf_s(&_Str[0], _Len + 1, \"%f\", _Val);\r\n    return _Str;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline string to_string(float _Val) {\r\n    return _STD to_string(static_cast<double>(_Val));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline string to_string(long double _Val) {\r\n    return _STD to_string(static_cast<double>(_Val));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline wstring to_wstring(int _Val) {\r\n    return _Integral_to_string<wchar_t>(_Val);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline wstring to_wstring(unsigned int _Val) {\r\n    return _Integral_to_string<wchar_t>(_Val);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline wstring to_wstring(long _Val) {\r\n    return _Integral_to_string<wchar_t>(_Val);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline wstring to_wstring(unsigned long _Val) {\r\n    return _Integral_to_string<wchar_t>(_Val);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline wstring to_wstring(long long _Val) {\r\n    return _Integral_to_string<wchar_t>(_Val);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline wstring to_wstring(unsigned long long _Val) {\r\n    return _Integral_to_string<wchar_t>(_Val);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline wstring to_wstring(double _Val) {\r\n    const auto _Len = static_cast<size_t>(_CSTD _scwprintf(L\"%f\", _Val));\r\n    wstring _Str(_Len, L'\\0');\r\n    _CSTD swprintf_s(&_Str[0], _Len + 1, L\"%f\", _Val);\r\n    return _Str;\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline wstring to_wstring(float _Val) {\r\n    return _STD to_wstring(static_cast<double>(_Val));\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline wstring to_wstring(long double _Val) {\r\n    return _STD to_wstring(static_cast<double>(_Val));\r\n}\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _STRING_\r\n"
  },
  {
    "path": "stl/inc/string_view",
    "content": "// string_view standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _STRING_VIEW_\r\n#define _STRING_VIEW_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX17\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <string_view> are available only with C++17 or later.\");\r\n#else // ^^^ !_HAS_CXX17 / _HAS_CXX17 vvv\r\n#ifdef _LEGACY_CODE_ASSUMES_STRING_VIEW_INCLUDES_XSTRING\r\n#include <xstring>\r\n#else // ^^^ defined(_LEGACY_CODE_ASSUMES_STRING_VIEW_INCLUDES_XSTRING) /\r\n      // !defined(_LEGACY_CODE_ASSUMES_STRING_VIEW_INCLUDES_XSTRING) vvv\r\n#include <__msvc_string_view.hpp>\r\n#endif // ^^^ !defined(_LEGACY_CODE_ASSUMES_STRING_VIEW_INCLUDES_XSTRING) ^^^\r\n#endif // ^^^ _HAS_CXX17 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _STRING_VIEW_\r\n"
  },
  {
    "path": "stl/inc/strstream",
    "content": "// strstream standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _STRSTREAM_\r\n#define _STRSTREAM_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <istream>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_STL_DISABLE_DEPRECATED_WARNING\r\n_EXPORT_STD class _CXX17_DEPRECATE_STRSTREAM strstreambuf : public streambuf {\r\n    // stream buffer associated with static or allocated character array\r\npublic:\r\n    using _Mysb = streambuf;\r\n    enum { // constants for bits in stream state\r\n        _Allocated = 1, // set if character array storage has been allocated\r\n        _Constant  = 2, // set if character array immutable\r\n        _Dynamic   = 4, // set if character array length grows on demand\r\n        _Frozen    = 8\r\n    }; // set if character array ownership given away\r\n    using _Strstate = int;\r\n\r\n    __CLR_OR_THIS_CALL strstreambuf() { // construct with empty character array\r\n        _Init(0);\r\n    }\r\n\r\n    explicit __CLR_OR_THIS_CALL strstreambuf(streamsize _Count) { // construct with suggested initial size\r\n        _Init(_Count);\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL strstreambuf(\r\n        void*(__CLRCALL_OR_CDECL* _Allocfunc)(size_t), void(__CLRCALL_OR_CDECL* _Freefunc)(void*)) {\r\n        // construct with empty character array, allocation functions\r\n        _Init();\r\n        _Palloc = _Allocfunc;\r\n        _Pfree  = _Freefunc;\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL strstreambuf(_In_opt_z_ char* _Getptr, streamsize _Count, _In_opt_z_ char* _Putptr = nullptr) {\r\n        // construct with [_Getptr, _Getptr + _Count), possibly mutable\r\n        _Init(_Count, _Getptr, _Putptr);\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL strstreambuf(_In_z_ const char* _Getptr, streamsize _Count) {\r\n        // construct with [_Getptr, _Getptr + _Count), immutable\r\n        _Init(_Count, const_cast<char*>(_Getptr), nullptr, _Constant);\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL strstreambuf(\r\n        _In_opt_z_ unsigned char* _Getptr, streamsize _Count, _In_opt_z_ unsigned char* _Putptr = nullptr) {\r\n        // construct with [_Getptr, _Getptr + _Count), possibly mutable\r\n        _Init(_Count, reinterpret_cast<char*>(_Getptr), reinterpret_cast<char*>(_Putptr));\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL strstreambuf(_In_opt_z_ const unsigned char* _Getptr, streamsize _Count) {\r\n        // construct with [_Getptr, _Getptr + _Count), immutable\r\n        _Init(_Count, const_cast<char*>(reinterpret_cast<const char*>(_Getptr)), nullptr, _Constant);\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL strstreambuf(strstreambuf&& _Right) {\r\n        _Init();\r\n        _Assign_rv(_STD move(_Right));\r\n    }\r\n\r\n    strstreambuf& __CLR_OR_THIS_CALL operator=(strstreambuf&& _Right) noexcept /* strengthened */ {\r\n        _Assign_rv(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Assign_rv(strstreambuf&& _Right) noexcept {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Tidy();\r\n            this->swap(_Right);\r\n        }\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL swap(strstreambuf& _Right) noexcept { // non-Standard\r\n        if (this != _STD addressof(_Right)) {\r\n            _Mysb::swap(_Right);\r\n            _STD swap(_Minsize, _Right._Minsize);\r\n            _STD swap(_Pendsave, _Right._Pendsave);\r\n            _STD swap(_Seekhigh, _Right._Seekhigh);\r\n            _STD swap(_Strmode, _Right._Strmode);\r\n            _STD swap(_Palloc, _Right._Palloc);\r\n            _STD swap(_Pfree, _Right._Pfree);\r\n        }\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ~strstreambuf() noexcept override {\r\n        _Tidy();\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL freeze(bool _Freezeit = true) noexcept /* strengthened */ { // freeze or unfreeze writing\r\n        if (_Strmode & _Dynamic) {\r\n            if (_Freezeit && !(_Strmode & _Frozen)) { // disable writing\r\n                _Strmode |= _Frozen;\r\n                _Pendsave = epptr();\r\n                setp(pbase(), pptr(), eback());\r\n            } else if (!_Freezeit && (_Strmode & _Frozen)) { // re-enable writing\r\n                _Strmode &= ~_Frozen;\r\n                setp(pbase(), pptr(), _Pendsave);\r\n            }\r\n        }\r\n    }\r\n\r\n    _NODISCARD char* __CLR_OR_THIS_CALL str() noexcept /* strengthened */ {\r\n        // freeze and return pointer to character array\r\n        freeze();\r\n        return eback();\r\n    }\r\n\r\n    _NODISCARD streamsize __CLR_OR_THIS_CALL pcount() const noexcept /* strengthened */ {\r\n        return pptr() ? static_cast<streamsize>(pptr() - pbase()) : 0;\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL strstreambuf(\r\n        _In_opt_z_ signed char* _Getptr, streamsize _Count, _In_opt_z_ signed char* _Putptr = nullptr) {\r\n        // construct with [_Getptr, _Getptr + _Count), possibly mutable\r\n        _Init(_Count, reinterpret_cast<char*>(_Getptr), reinterpret_cast<char*>(_Putptr));\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL strstreambuf(const signed char* _Getptr, streamsize _Count) {\r\n        // construct with [_Getptr, _Getptr + _Count), immutable\r\n        _Init(_Count, const_cast<char*>(reinterpret_cast<const char*>(_Getptr)), nullptr, _Constant);\r\n    }\r\n\r\n    void clear() noexcept /* strengthened */ { // free any allocated storage\r\n        _Tidy();\r\n    }\r\n\r\nprotected:\r\n    int __CLR_OR_THIS_CALL overflow(int _Meta = EOF) override { // try to extend write area\r\n        if (_Meta == EOF) {\r\n            return 0; // nothing to write\r\n        }\r\n\r\n        if (pptr() && pptr() < epptr()) {\r\n            return static_cast<unsigned char>(*_Pninc() = static_cast<char>(_Meta));\r\n        }\r\n\r\n        if (!(_Strmode & _Dynamic) || (_Strmode & (_Constant | _Frozen))) {\r\n            return EOF; // can't extend\r\n        }\r\n\r\n        // okay to extend\r\n        const size_t _Oldsize = gptr() ? static_cast<size_t>(epptr() - eback()) : 0;\r\n        size_t _Newsize;\r\n        if (_Oldsize < _MINSIZE) {\r\n            _Newsize = _MINSIZE;\r\n        } else if (_Oldsize < INT_MAX / 2) { // grow by 50 percent\r\n            _Newsize = _Oldsize << 1;\r\n        } else if (_Oldsize < INT_MAX) {\r\n            _Newsize = INT_MAX;\r\n        } else { // buffer can't grow, fail\r\n            return EOF;\r\n        }\r\n\r\n        const auto _Ptr = _Alloc(_Newsize);\r\n        if (!_Ptr) { // couldn't grow, return failure\r\n            return EOF;\r\n        }\r\n\r\n        _CSTD memcpy(_Ptr, eback(), _Oldsize); // copy existing\r\n        if (_Strmode & _Allocated) { // buffer to free\r\n            _Free(eback());\r\n        }\r\n\r\n        _Strmode |= _Allocated;\r\n        _Seekhigh                            = _Ptr + _Oldsize;\r\n        const ptrdiff_t _Old_get_offset      = gptr() - eback();\r\n        const ptrdiff_t _Old_put_base_offset = pbase() - eback();\r\n        const ptrdiff_t _Old_put_offset      = pptr() - eback();\r\n        setp(_Ptr + _Old_put_base_offset, _Ptr + _Old_put_offset, _Ptr + _Newsize);\r\n        setg(_Ptr, _Ptr + _Old_get_offset, _Ptr + _Old_get_offset + 1);\r\n        return static_cast<unsigned char>(*_Pninc() = static_cast<char>(_Meta));\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL pbackfail(int _Meta = EOF) override { // try to putback a character\r\n        const auto _Old_gptr = gptr();\r\n        if (_Old_gptr && eback() < _Old_gptr) { // if the input sequence has a putback position available\r\n            if (_Meta == EOF) {\r\n                _Meta = 0; // a value other than EOF\r\n            } else if (!(_Strmode & _Constant)) { // non-constant, overwrite no matter what\r\n                _Old_gptr[-1] = static_cast<char>(_Meta);\r\n            } else if (_Old_gptr[-1] != static_cast<char>(_Meta)) { // constant, unequal, can't put it back\r\n                return EOF;\r\n            }\r\n\r\n            gbump(-1);\r\n            return _Meta;\r\n        }\r\n\r\n        return EOF;\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL underflow() override { // read if read position available\r\n        const auto _Old_gptr = gptr();\r\n        if (!_Old_gptr) {\r\n            return EOF; // no read buffer\r\n        }\r\n\r\n        if (_Old_gptr < egptr()) { // If the input sequence has a read position available, the function signals success\r\n                                   // by returning static_cast<unsigned char>(*gnext)\r\n            return static_cast<unsigned char>(*_Old_gptr);\r\n        }\r\n\r\n        const auto _Old_pptr = pptr();\r\n        if (_Old_pptr && _Old_pptr > egptr()\r\n            && _Old_gptr\r\n                   < _Old_pptr) { // Otherwise, if the current write next pointer pnext is not a null pointer and is\r\n                                  // greater than the current read end pointer gend, makes a read position available by\r\n                                  // assigning to gend a value greater than gnext and no greater than pnext.\r\n            if (_Seekhigh < _Old_pptr) { // TRANSITION, ABI: appears unused, maintained for ABI compat\r\n                _Seekhigh = _Old_pptr;\r\n            }\r\n\r\n            setg(eback(), gptr(), _Old_pptr);\r\n            return static_cast<unsigned char>(*_Old_gptr);\r\n        }\r\n\r\n        return EOF;\r\n    }\r\n\r\n    streampos __CLR_OR_THIS_CALL seekoff(\r\n        streamoff _Off, ios_base::seekdir _Way, ios_base::openmode _Which = ios_base::in | ios_base::out) override {\r\n        // seek by specified offset\r\n        if (pptr() && _Seekhigh < pptr()) { // TRANSITION, ABI: appears unused, maintained for ABI compat\r\n            _Seekhigh = pptr(); // update high water mark\r\n        }\r\n\r\n        if ((_Which & ios_base::in && !gptr())\r\n            || (_Which & ios_base::out && !pptr())) { // N4950 [depr.strstreambuf.virtuals]/15:\r\n                                                      // For a sequence to be positioned, if its next pointer\r\n                                                      // is a null pointer, the positioning operation fails.\r\n            return pos_type{off_type{-1}};\r\n        }\r\n\r\n        const auto _Seeklow  = eback();\r\n        const auto _Seekdist = _Seekhigh - _Seeklow;\r\n\r\n        // N4950 [depr.strstreambuf.virtuals]/16 effectively says check that the result will be in range\r\n        // [_Seeklow, _Seekhigh]; but we want to calculate this without potential integer overflow\r\n        switch (_Way) {\r\n        case ios_base::beg:\r\n            // check that _Off is in acceptable range [0, _Seekdist]\r\n            if (static_cast<unsigned long long>(_Off)\r\n                > static_cast<unsigned long long>(_Seekdist)) { // negative wraparound to positive to save a compare\r\n                return pos_type{off_type{-1}};\r\n            }\r\n            break;\r\n        case ios_base::end:\r\n            // check that _Off is in acceptable range [-_Seekdist, 0]\r\n            // is: _Off + _Seekdist in range [0, _Seekdist]\r\n            if (static_cast<unsigned long long>(_Off) + _Seekdist > static_cast<unsigned long long>(_Seekdist)) {\r\n                return pos_type{off_type{-1}};\r\n            }\r\n\r\n            _Off += _Seekdist;\r\n            break;\r\n        case ios_base::cur:\r\n            {\r\n                constexpr auto _Both = ios_base::in | ios_base::out;\r\n                if ((_Which & _Both) == _Both) { // prohibited by N4950 [tab:depr.strstreambuf.seekoff.pos]\r\n                    return pos_type{off_type{-1}};\r\n                }\r\n\r\n                off_type _Oldoff;\r\n                off_type _Oldleft;\r\n                if (_Which & ios_base::in) {\r\n                    _Oldoff  = gptr() - eback();\r\n                    _Oldleft = _Seekhigh - gptr();\r\n                } else if (_Which & ios_base::out) {\r\n                    _Oldoff  = pptr() - pbase();\r\n                    _Oldleft = _Seekhigh - pptr();\r\n                } else {\r\n                    return pos_type{off_type{-1}};\r\n                }\r\n\r\n                if (_Off < -_Oldoff // runs off beginning\r\n                    || _Off > _Oldleft) { // runs off end\r\n                    return pos_type{off_type{-1}};\r\n                }\r\n\r\n                _Off += _Oldoff;\r\n            }\r\n\r\n            break;\r\n        default:\r\n            return pos_type{off_type{-1}};\r\n        }\r\n\r\n        if (_Which & ios_base::in) {\r\n            gbump(static_cast<int>(_Off - (gptr() - eback())));\r\n        }\r\n\r\n        if (_Which & ios_base::out) {\r\n            pbump(static_cast<int>(_Off - (pptr() - pbase())));\r\n        }\r\n\r\n        return pos_type{_Off};\r\n    }\r\n\r\n    pos_type __CLR_OR_THIS_CALL seekpos(\r\n        pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out) override {\r\n        // seek to memorized position\r\n        if (pptr() && _Seekhigh < pptr()) { // TRANSITION, ABI: appears unused, maintained for ABI compat\r\n            _Seekhigh = pptr(); // update high water mark\r\n        }\r\n\r\n        if (((_Which & ios_base::in) && !gptr()) || ((_Which & ios_base::out) && !pptr())) {\r\n            return pos_type{off_type{-1}};\r\n        }\r\n\r\n        const auto _Off      = static_cast<off_type>(_Sp);\r\n        const auto _Seeklow  = eback();\r\n        const auto _Seekdist = _Seekhigh - _Seeklow;\r\n        if (_Off > _Seekdist) {\r\n            return pos_type{off_type{-1}};\r\n        }\r\n\r\n        if (_Which & ios_base::in) {\r\n            gbump(static_cast<int>(_Off - (gptr() - eback())));\r\n        }\r\n\r\n        if (_Which & ios_base::out) {\r\n            pbump(static_cast<int>(_Off - (pptr() - pbase())));\r\n        }\r\n\r\n        return pos_type{_Off};\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Init(\r\n        streamsize _Count = 0, char* _Gp = nullptr, char* _Pp = nullptr, _Strstate _Mode = 0) noexcept {\r\n        // initialize with possibly static buffer\r\n        streambuf::_Init();\r\n        _Minsize  = _MINSIZE;\r\n        _Pendsave = nullptr;\r\n        _Seekhigh = nullptr;\r\n        _Palloc   = nullptr;\r\n        _Pfree    = nullptr;\r\n        _Strmode  = _Mode;\r\n\r\n        if (_Gp) { // make static\r\n            size_t _Size;\r\n            if (_Count == 0) {\r\n                _Size = _CSTD strlen(_Gp);\r\n            } else if (static_cast<unsigned long long>(_Count) < static_cast<unsigned long long>(INT_MAX)) {\r\n                _Size = static_cast<size_t>(_Count);\r\n            } else {\r\n                _Size = INT_MAX;\r\n            }\r\n\r\n            _Seekhigh = _Gp + _Size;\r\n            if (_Pp) { // make writable too\r\n                setg(_Gp, _Gp, _Pp);\r\n                setp(_Pp, _Pp + _Size);\r\n            } else { // set read pointers only\r\n                setg(_Gp, _Gp, _Gp + _Size);\r\n            }\r\n        } else { // make dynamic\r\n            _Strmode |= _Dynamic;\r\n            if (_Count > INT_MAX) {\r\n                _Minsize = INT_MAX;\r\n            } else if (_Minsize < _Count) {\r\n                _Minsize = static_cast<int>(_Count);\r\n            }\r\n        }\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Tidy() noexcept { // free any allocated storage\r\n        if ((_Strmode & (_Allocated | _Frozen)) == _Allocated) {\r\n            _Free(eback());\r\n        }\r\n\r\n        _Seekhigh = nullptr;\r\n        _Strmode &= ~(_Allocated | _Frozen);\r\n    }\r\n\r\nprivate:\r\n    enum { // constant for default minimum buffer size\r\n        _MINSIZE = 32\r\n    };\r\n\r\n    char* _Alloc(const size_t _To_allocate) const {\r\n        if (_Palloc) {\r\n            return static_cast<char*>(_Palloc(_To_allocate));\r\n        }\r\n\r\n        return static_cast<char*>(_CSTD _malloc_dbg(_To_allocate, _CRT_BLOCK, __FILE__, __LINE__));\r\n    }\r\n\r\n    void _Free(char* _Ptr) const {\r\n        if (_Pfree) {\r\n            _Pfree(_Ptr);\r\n            return;\r\n        }\r\n\r\n        _CSTD free(_Ptr);\r\n    }\r\n\r\n    int _Minsize; // the minimum buffer size\r\n    char* _Pendsave; // the saved end pointer during freeze\r\n    char* _Seekhigh; // the high-water pointer in character array\r\n    _Strstate _Strmode; // the stream state\r\n    void*(__CLRCALL_OR_CDECL* _Palloc)(size_t); // the pointer to allocator function\r\n    void(__CLRCALL_OR_CDECL* _Pfree)(void*); // the pointer to free function\r\n};\r\n\r\ninline void swap(strstreambuf& _Left, strstreambuf& _Right) noexcept { // non-Standard\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD class _CXX17_DEPRECATE_STRSTREAM istrstream : public istream {\r\n    // input stream associated with a character array\r\npublic:\r\n    using _Mybase = istream;\r\n    using _Mysb   = strstreambuf;\r\n\r\n    explicit __CLR_OR_THIS_CALL istrstream(const char* _Ptr) : _Mybase(&_Strbuffer), _Strbuffer(_Ptr, 0) {\r\n        // construct with NTBS\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL istrstream(const char* _Ptr, streamsize _Count)\r\n        : _Mybase(&_Strbuffer), _Strbuffer(_Ptr, _Count) {\r\n        // construct with [_Ptr, _Ptr + _Count)\r\n    }\r\n\r\n    explicit __CLR_OR_THIS_CALL istrstream(char* _Ptr) : _Mybase(&_Strbuffer), _Strbuffer(_Ptr, 0) {\r\n        // construct with NTBS\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL istrstream(char* _Ptr, int _Count) : _Mybase(&_Strbuffer), _Strbuffer(_Ptr, _Count) {\r\n        // construct with [_Ptr, _Ptr + _Count)\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL istrstream(istrstream&& _Right) : _Mybase(&_Strbuffer) {\r\n        _Assign_rv(_STD move(_Right));\r\n    }\r\n\r\n    istrstream& __CLR_OR_THIS_CALL operator=(istrstream&& _Right) noexcept /* strengthened */ {\r\n        _Assign_rv(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Assign_rv(istrstream&& _Right) noexcept {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Strbuffer.clear();\r\n            this->swap(_Right);\r\n        }\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL swap(istrstream& _Right) noexcept { // non-Standard\r\n        if (this != _STD addressof(_Right)) {\r\n            _Mybase::swap(_Right);\r\n            _Strbuffer.swap(_Right._Strbuffer);\r\n        }\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ~istrstream() noexcept override {}\r\n\r\n    _NODISCARD _Mysb* __CLR_OR_THIS_CALL rdbuf() const noexcept /* strengthened */ {\r\n        return const_cast<_Mysb*>(&_Strbuffer);\r\n    }\r\n\r\n    _NODISCARD char* __CLR_OR_THIS_CALL str() noexcept /* strengthened */ {\r\n        // freeze and return pointer to character array\r\n        return _Strbuffer.str();\r\n    }\r\n\r\nprivate:\r\n    _Mysb _Strbuffer; // the string buffer\r\n};\r\n\r\ninline void swap(istrstream& _Left, istrstream& _Right) noexcept { // non-Standard\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD class _CXX17_DEPRECATE_STRSTREAM ostrstream : public ostream {\r\n    // output stream associated with a character array\r\npublic:\r\n    using _Mybase = ostream;\r\n    using _Mysb   = strstreambuf;\r\n\r\n    __CLR_OR_THIS_CALL ostrstream() : ostream(&_Strbuffer), _Strbuffer() {}\r\n\r\n    __CLR_OR_THIS_CALL ostrstream(char* _Ptr, streamsize _Count, ios_base::openmode _Mode = ios_base::out)\r\n        : ostream(&_Strbuffer),\r\n          _Strbuffer(_Ptr, _Count, _Ptr && (_Mode & ios_base::app) != 0 ? _Ptr + _CSTD strlen(_Ptr) : _Ptr) {\r\n        // construct with [_Ptr, _Ptr + _Count)\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ostrstream(ostrstream&& _Right) : _Mybase(&_Strbuffer) {\r\n        _Assign_rv(_STD move(_Right));\r\n    }\r\n\r\n    ostrstream& __CLR_OR_THIS_CALL operator=(ostrstream&& _Right) noexcept /* strengthened */ {\r\n        _Assign_rv(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Assign_rv(ostrstream&& _Right) noexcept {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Strbuffer.clear();\r\n            this->swap(_Right);\r\n        }\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL swap(ostrstream& _Right) noexcept { // non-Standard\r\n        if (this != _STD addressof(_Right)) {\r\n            _Mybase::swap(_Right);\r\n            _Strbuffer.swap(_Right._Strbuffer);\r\n        }\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ~ostrstream() noexcept override {}\r\n\r\n    _NODISCARD _Mysb* __CLR_OR_THIS_CALL rdbuf() const noexcept /* strengthened */ {\r\n        return const_cast<_Mysb*>(&_Strbuffer);\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL freeze(bool _Freezeit = true) noexcept /* strengthened */ { // freeze or unfreeze writing\r\n        _Strbuffer.freeze(_Freezeit);\r\n    }\r\n\r\n    _NODISCARD char* __CLR_OR_THIS_CALL str() noexcept /* strengthened */ {\r\n        // freeze and return pointer to character array\r\n        return _Strbuffer.str();\r\n    }\r\n\r\n    _NODISCARD streamsize __CLR_OR_THIS_CALL pcount() const noexcept /* strengthened */ {\r\n        return _Strbuffer.pcount();\r\n    }\r\n\r\nprivate:\r\n    _Mysb _Strbuffer; // the string buffer\r\n};\r\n\r\ninline void swap(ostrstream& _Left, ostrstream& _Right) noexcept { // non-Standard\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD class _CXX17_DEPRECATE_STRSTREAM strstream : public iostream {\r\n    // input/output stream associated with character array buffer\r\npublic:\r\n    using _Mybase = iostream;\r\n    using _Mysb   = strstreambuf;\r\n\r\n    using char_type = char;\r\n    using int_type  = int;\r\n    using pos_type  = streampos;\r\n    using off_type  = streamoff;\r\n\r\n    __CLR_OR_THIS_CALL strstream() : _Mybase(&_Strbuffer), _Strbuffer() {}\r\n\r\n    __CLR_OR_THIS_CALL strstream(char* _Ptr, streamsize _Count, ios_base::openmode _Mode = ios_base::in | ios_base::out)\r\n        : iostream(&_Strbuffer),\r\n          _Strbuffer(_Ptr, _Count, _Ptr && (_Mode & ios_base::app) != 0 ? _Ptr + _CSTD strlen(_Ptr) : _Ptr) {\r\n        // construct with [_Ptr, _Ptr + _Count)\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL strstream(strstream&& _Right) : _Mybase(&_Strbuffer) {\r\n        _Assign_rv(_STD move(_Right));\r\n    }\r\n\r\n    strstream& __CLR_OR_THIS_CALL operator=(strstream&& _Right) noexcept /* strengthened */ {\r\n        _Assign_rv(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Assign_rv(strstream&& _Right) noexcept {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Strbuffer.clear();\r\n            this->swap(_Right);\r\n        }\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL swap(strstream& _Right) noexcept { // non-Standard\r\n        if (this != _STD addressof(_Right)) {\r\n            _Mybase::swap(_Right);\r\n            _Strbuffer.swap(_Right._Strbuffer);\r\n        }\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ~strstream() noexcept override {}\r\n\r\n    _NODISCARD _Mysb* __CLR_OR_THIS_CALL rdbuf() const noexcept /* strengthened */ {\r\n        return const_cast<_Mysb*>(&_Strbuffer);\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL freeze(bool _Freezeit = true) noexcept /* strengthened */ { // freeze or unfreeze writing\r\n        _Strbuffer.freeze(_Freezeit);\r\n    }\r\n\r\n    _NODISCARD char* __CLR_OR_THIS_CALL str() noexcept /* strengthened */ {\r\n        // freeze and return pointer to character array\r\n        return _Strbuffer.str();\r\n    }\r\n\r\n    _NODISCARD streamsize __CLR_OR_THIS_CALL pcount() const noexcept /* strengthened */ {\r\n        return _Strbuffer.pcount();\r\n    }\r\n\r\nprivate:\r\n    _Mysb _Strbuffer; // the string buffer\r\n};\r\n\r\ninline void swap(strstream& _Left, strstream& _Right) noexcept { // non-Standard\r\n    _Left.swap(_Right);\r\n}\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _STRSTREAM_\r\n"
  },
  {
    "path": "stl/inc/syncstream",
    "content": "// syncstream standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _SYNCSTREAM_\r\n#define _SYNCSTREAM_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#if !_HAS_CXX20\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <syncstream> are available only with C++20 or later.\");\r\n#else // ^^^ !_HAS_CXX20 / _HAS_CXX20 vvv\r\n#include <memory>\r\n#include <ostream>\r\n#include <shared_mutex>\r\n#include <streambuf>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#pragma push_macro(\"emit\")\r\n#undef new\r\n#undef emit\r\n\r\nextern \"C\" {\r\n_NODISCARD _STD shared_mutex* __stdcall __std_acquire_shared_mutex_for_instance(void* _Ptr) noexcept;\r\nvoid __stdcall __std_release_shared_mutex_for_instance(void* _Ptr) noexcept;\r\n} // extern \"C\"\r\n\r\n_STD_BEGIN\r\n\r\ntemplate <class _Elem, class _Traits>\r\nclass _Basic_syncbuf_impl : public basic_streambuf<_Elem, _Traits> {\r\npublic:\r\n    void set_emit_on_sync(const bool _Val) noexcept {\r\n        _Emit_on_sync = _Val;\r\n    }\r\n\r\n    virtual bool _Do_emit() = 0;\r\n\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n    _NODISCARD bool _Stl_internal_check_get_emit_on_sync() const noexcept {\r\n        return _Emit_on_sync;\r\n    }\r\n#endif // _ENABLE_STL_INTERNAL_CHECK\r\n\r\nprotected:\r\n    using _Mysb = basic_streambuf<_Elem, _Traits>;\r\n\r\n    _Basic_syncbuf_impl() = default;\r\n\r\n    _Basic_syncbuf_impl(_Basic_syncbuf_impl&& _Right) {\r\n        _Swap(_Right);\r\n    }\r\n\r\n    void _Swap(_Basic_syncbuf_impl& _Right) noexcept {\r\n        _Mysb::swap(_Right);\r\n        _STD swap(_Emit_on_sync, _Right._Emit_on_sync);\r\n        _STD swap(_Sync_recorded, _Right._Sync_recorded);\r\n    }\r\n\r\n    bool _Emit_on_sync{false};\r\n    bool _Sync_recorded{false};\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nclass basic_syncbuf : public _Basic_syncbuf_impl<_Elem, _Traits> {\r\npublic:\r\n    using int_type       = _Traits::int_type;\r\n    using pos_type       = _Traits::pos_type;\r\n    using off_type       = _Traits::off_type;\r\n    using allocator_type = _Alloc;\r\n    using streambuf_type = basic_streambuf<_Elem, _Traits>;\r\n\r\n    using _Mybase    = _Basic_syncbuf_impl<_Elem, _Traits>;\r\n    using _Pointer   = allocator_traits<_Alloc>::pointer;\r\n    using _Size_type = allocator_traits<_Alloc>::size_type;\r\n\r\n    using _Mybase::set_emit_on_sync;\r\n\r\n    basic_syncbuf() = default;\r\n\r\n    explicit basic_syncbuf(streambuf_type* _Strbuf) : basic_syncbuf(_Strbuf, _Alloc{}) {}\r\n\r\n    basic_syncbuf(streambuf_type* _Strbuf, const _Alloc& _Al_)\r\n        : _Wrapped(_Strbuf), _Mypair{_One_then_variadic_args_t{}, _Al_, nullptr} {\r\n        if (_Wrapped) {\r\n            auto& _Mutex = _Get_mutex();\r\n            _Mutex       = __std_acquire_shared_mutex_for_instance(_Wrapped);\r\n            if (!_Mutex) {\r\n                _Xbad_alloc();\r\n            }\r\n        }\r\n        _Init();\r\n    }\r\n\r\n    basic_syncbuf(basic_syncbuf&& _Right) : _Mypair{_One_then_variadic_args_t{}, _STD move(_Right._Getal()), nullptr} {\r\n        _Swap_except_al(_Right);\r\n    }\r\n\r\n    ~basic_syncbuf() {\r\n        _Emit();\r\n        _Tidy();\r\n    }\r\n\r\n    basic_syncbuf& operator=(basic_syncbuf&& _Right) {\r\n        emit();\r\n\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n        auto& _Al                 = _Getal();\r\n        auto& _Right_al           = _Right._Getal();\r\n        constexpr auto _Pocma_val = _Choose_pocma_v<_Alloc>;\r\n        if constexpr (_Pocma_val == _Pocma_values::_No_propagate_allocators) {\r\n            if (_Al != _Right_al) {\r\n                _Tidy();\r\n\r\n                _Size_type _Right_buf_size        = _Right._Get_buffer_size();\r\n                const _Size_type _Right_data_size = _Right._Get_data_size();\r\n\r\n                _Elem* const _New_ptr = _Unfancy(_Allocate_at_least_helper(_Al, _Right_buf_size));\r\n                _Traits::copy(_New_ptr, _Right.pbase(), _Right_data_size);\r\n\r\n                streambuf_type::setp(_New_ptr, _New_ptr + _Right_data_size, _New_ptr + _Right_buf_size);\r\n                _STD swap(streambuf_type::_Plocale, _Right._Plocale);\r\n\r\n                _STD swap(_Mybase::_Emit_on_sync, _Right._Emit_on_sync);\r\n                _STD swap(_Mybase::_Sync_recorded, _Right._Sync_recorded);\r\n                _STD swap(_Wrapped, _Right._Wrapped);\r\n                _STD swap(_Get_mutex(), _Right._Get_mutex());\r\n\r\n                _Right._Tidy();\r\n                return *this;\r\n            }\r\n        }\r\n\r\n        _Tidy();\r\n        _Pocma(_Al, _Right_al);\r\n        _Swap_except_al(_Right);\r\n        return *this;\r\n    }\r\n\r\n    void swap(basic_syncbuf& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Pocs(_Getal(), _Right._Getal());\r\n            _Swap_except_al(_Right);\r\n        }\r\n    }\r\n\r\n    bool emit() {\r\n        if (!_Wrapped) {\r\n            return false;\r\n        }\r\n\r\n        bool _Result                = true;\r\n        const _Size_type _Data_size = _Get_data_size();\r\n        _Elem* const _Begin_seq_ptr = streambuf_type::pbase();\r\n        if (_Data_size > 0 || _Mybase::_Sync_recorded) {\r\n            scoped_lock _Guard(*_Get_mutex());\r\n\r\n            if (_Data_size > 0\r\n                && _Data_size\r\n                       != static_cast<_Size_type>(\r\n                           _Wrapped->sputn(_Begin_seq_ptr, static_cast<streamsize>(_Data_size)))) {\r\n                _Result = false;\r\n            }\r\n\r\n            if (_Mybase::_Sync_recorded) {\r\n                if (_Wrapped->pubsync() == -1) {\r\n                    _Result = false;\r\n                }\r\n            }\r\n        }\r\n        _Mybase::_Sync_recorded = false;\r\n        streambuf_type::setp(_Begin_seq_ptr, streambuf_type::epptr()); // reset written data\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD streambuf_type* get_wrapped() const noexcept {\r\n        return _Wrapped;\r\n    }\r\n\r\n    _NODISCARD allocator_type get_allocator() const noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\nprotected:\r\n    int sync() override {\r\n        _Mybase::_Sync_recorded = true;\r\n\r\n        if (_Mybase::_Emit_on_sync) {\r\n            if (!emit()) {\r\n                return -1;\r\n            }\r\n        }\r\n        return 0;\r\n    }\r\n\r\n    int_type overflow(int_type _Current_elem) override {\r\n        if (!_Wrapped) {\r\n            return _Traits::eof();\r\n        }\r\n        const bool _Chk_eof = _Traits::eq_int_type(_Current_elem, _Traits::eof());\r\n        if (_Chk_eof) {\r\n            return _Traits::not_eof(_Current_elem);\r\n        }\r\n\r\n        auto& _Al                        = _Getal();\r\n        const _Size_type _Buf_size       = _Get_buffer_size();\r\n        const _Size_type _Max_allocation = allocator_traits<_Alloc>::max_size(_Al);\r\n        if (_Buf_size == _Max_allocation) {\r\n            return _Traits::eof();\r\n        }\r\n\r\n        _Size_type _New_capacity        = _Calculate_growth(_Buf_size, _Buf_size + 1, _Max_allocation);\r\n        _Elem* const _Old_ptr           = streambuf_type::pbase();\r\n        const _Size_type _Old_data_size = _Get_data_size();\r\n\r\n        _Elem* const _New_ptr = _Unfancy(_Allocate_at_least_helper(_Al, _New_capacity));\r\n        _Traits::copy(_New_ptr, _Old_ptr, _Old_data_size);\r\n        if (0 < _Buf_size) {\r\n            _Al.deallocate(_Refancy<_Pointer>(_Old_ptr), _Buf_size);\r\n        }\r\n\r\n        streambuf_type::setp(_New_ptr, _New_ptr + _Old_data_size, _New_ptr + _New_capacity);\r\n        streambuf_type::sputc(_Traits::to_char_type(_Current_elem));\r\n\r\n        return _Current_elem;\r\n    }\r\n\r\nprivate:\r\n    static constexpr _Size_type _Min_size = 32; // constant for minimum buffer size\r\n\r\n    void _Init() {\r\n        _Size_type _New_capacity = _Min_size;\r\n        _Elem* const _New_ptr    = _Unfancy(_Allocate_at_least_helper(_Getal(), _New_capacity));\r\n        streambuf_type::setp(_New_ptr, _New_ptr + _New_capacity);\r\n    }\r\n\r\n    void _Tidy() noexcept {\r\n        const _Size_type _Buf_size = _Get_buffer_size();\r\n        if (0 < _Buf_size) {\r\n            _Getal().deallocate(_Refancy<_Pointer>(streambuf_type::pbase()), _Buf_size);\r\n        }\r\n\r\n        streambuf_type::setp(nullptr, nullptr, nullptr);\r\n        if (_Wrapped) {\r\n            __std_release_shared_mutex_for_instance(_Wrapped);\r\n            _Wrapped     = nullptr;\r\n            _Get_mutex() = nullptr;\r\n        }\r\n    }\r\n\r\n    void _Swap_except_al(basic_syncbuf& _Right) noexcept {\r\n        _Mybase::_Swap(_Right);\r\n        _STD swap(_Wrapped, _Right._Wrapped);\r\n        _STD swap(_Get_mutex(), _Right._Get_mutex());\r\n    }\r\n\r\n    bool _Do_emit() override {\r\n        return emit();\r\n    }\r\n\r\n    bool _Emit() noexcept {\r\n        _TRY_BEGIN\r\n        return emit();\r\n        _CATCH_ALL\r\n        return false;\r\n        _CATCH_END\r\n    }\r\n\r\n    _NODISCARD static constexpr _Size_type _Calculate_growth(\r\n        const _Size_type _Oldsize, const _Size_type _Newsize, const _Size_type _Maxsize) {\r\n        if (_Oldsize > _Maxsize - _Oldsize / 2) {\r\n            return _Maxsize; // geometric growth would overflow\r\n        }\r\n\r\n        const _Size_type _Geometric = _Oldsize + _Oldsize / 2;\r\n\r\n        if (_Geometric < _Newsize) {\r\n            return _Newsize; // geometric growth would be insufficient\r\n        }\r\n\r\n        return _Geometric; // geometric growth is sufficient\r\n    }\r\n\r\n    _NODISCARD _Size_type _Get_data_size() const noexcept {\r\n        return static_cast<_Size_type>(streambuf_type::pptr() - streambuf_type::pbase());\r\n    }\r\n\r\n    _NODISCARD _Size_type _Get_buffer_size() const noexcept {\r\n        return static_cast<_Size_type>(streambuf_type::epptr() - streambuf_type::pbase());\r\n    }\r\n\r\n    _NODISCARD _Alloc& _Getal() noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    _NODISCARD shared_mutex*& _Get_mutex() noexcept {\r\n        return _Mypair._Myval2;\r\n    }\r\n\r\n    streambuf_type* _Wrapped{nullptr};\r\n    _Compressed_pair<_Alloc, shared_mutex*> _Mypair{_Zero_then_variadic_args_t{}, nullptr};\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nvoid swap(basic_syncbuf<_Elem, _Traits, _Alloc>& _Left, basic_syncbuf<_Elem, _Traits, _Alloc>& _Right) noexcept\r\n/* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nclass basic_osyncstream : public basic_ostream<_Elem, _Traits> {\r\npublic:\r\n    using char_type      = _Elem;\r\n    using int_type       = _Traits::int_type;\r\n    using pos_type       = _Traits::pos_type;\r\n    using off_type       = _Traits::off_type;\r\n    using traits_type    = _Traits;\r\n    using allocator_type = _Alloc;\r\n    using streambuf_type = basic_streambuf<_Elem, _Traits>;\r\n    using syncbuf_type   = basic_syncbuf<_Elem, _Traits, _Alloc>;\r\n\r\n    using _Mybase = basic_ostream<_Elem, _Traits>;\r\n    using _Myios  = basic_ios<_Elem, _Traits>;\r\n\r\n    basic_osyncstream(streambuf_type* _Strbuf, const _Alloc& _Al)\r\n        : _Mybase(_STD addressof(_Sync_buf)), _Sync_buf(_Strbuf, _Al) {}\r\n\r\n    explicit basic_osyncstream(streambuf_type* _Strbuf) : basic_osyncstream(_Strbuf, _Alloc{}) {}\r\n\r\n    basic_osyncstream(basic_ostream<_Elem, _Traits>& _Ostr, const _Alloc& _Al)\r\n        : basic_osyncstream(_Ostr.rdbuf(), _Al) {}\r\n\r\n    explicit basic_osyncstream(basic_ostream<_Elem, _Traits>& _Ostr) : basic_osyncstream(_Ostr, _Alloc{}) {}\r\n\r\n    basic_osyncstream(basic_osyncstream&& _Right) noexcept\r\n        : _Mybase(_STD move(_Right)), _Sync_buf(_STD move(_Right._Sync_buf)) {\r\n        _Mybase::set_rdbuf(_STD addressof(_Sync_buf));\r\n    }\r\n\r\n    ~basic_osyncstream() = default;\r\n\r\n    basic_osyncstream& operator=(basic_osyncstream&&) = default;\r\n\r\n    void emit() {\r\n        ios_base::iostate _State = ios_base::goodbit;\r\n        const typename _Mybase::sentry _Ok(*this);\r\n        if (!_Ok) {\r\n            _State |= ios_base::badbit;\r\n        } else {\r\n            _TRY_IO_BEGIN\r\n            if (!_Sync_buf.emit()) {\r\n                _State |= ios_base::badbit;\r\n            }\r\n            _CATCH_IO_END\r\n        }\r\n        _Mybase::setstate(_State);\r\n    }\r\n    _NODISCARD streambuf_type* get_wrapped() const noexcept {\r\n        return _Sync_buf.get_wrapped();\r\n    }\r\n    _NODISCARD syncbuf_type* rdbuf() const noexcept {\r\n        return const_cast<syncbuf_type*>(_STD addressof(_Sync_buf));\r\n    }\r\n\r\nprivate:\r\n    syncbuf_type _Sync_buf;\r\n};\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"emit\")\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _SYNCSTREAM_\r\n"
  },
  {
    "path": "stl/inc/system_error",
    "content": "// system_error standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _SYSTEM_ERROR_\r\n#define _SYSTEM_ERROR_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <__msvc_system_error_abi.hpp>\r\n#include <cerrno>\r\n#include <cstdlib>\r\n#include <stdexcept>\r\n#include <xcall_once.h>\r\n#include <xerrc.h>\r\n\r\n#ifndef _M_CEE_PURE\r\n#include <atomic>\r\n#endif // !defined(_M_CEE_PURE)\r\n\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#endif // _HAS_CXX20\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"noop_dtor\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef noop_dtor\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD enum class io_errc { // error codes for ios_base::failure\r\n    stream = 1\r\n};\r\n\r\n_EXPORT_STD template <class _Enum>\r\nstruct is_error_code_enum : false_type {};\r\n\r\ntemplate <>\r\nstruct is_error_code_enum<io_errc> : true_type {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES constexpr bool is_error_code_enum_v = is_error_code_enum<_Ty>::value;\r\n\r\n_EXPORT_STD template <class _Enum>\r\nstruct is_error_condition_enum : false_type {};\r\n\r\ntemplate <>\r\nstruct is_error_condition_enum<errc> : true_type {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES constexpr bool is_error_condition_enum_v =\r\n    is_error_condition_enum<_Ty>::value;\r\n\r\n_EXPORT_STD class error_code;\r\n_EXPORT_STD class error_condition;\r\n\r\nnamespace _Ensure_adl {\r\n    void make_error_code()      = delete;\r\n    void make_error_condition() = delete;\r\n} // namespace _Ensure_adl\r\n\r\n_EXPORT_STD class error_category;\r\n\r\n_EXPORT_STD _NODISCARD const error_category& generic_category() noexcept;\r\n_EXPORT_STD _NODISCARD const error_category& iostream_category() noexcept;\r\n_EXPORT_STD _NODISCARD const error_category& system_category() noexcept;\r\n\r\n_EXPORT_STD class __declspec(novtable) error_category { // categorize an error\r\npublic:\r\n#ifdef _M_CEE_PURE\r\n    /* constexpr */ error_category() noexcept { // TRANSITION, ABI\r\n        _Addr = reinterpret_cast<uintptr_t>(this);\r\n    }\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n#pragma warning(push)\r\n#pragma warning(disable : 4355) // 'this': used in base member initializer list\r\n    constexpr error_category() noexcept : _Addr(this) {}\r\n#pragma warning(pop)\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\n    _CONSTEXPR20 virtual ~error_category() noexcept = default;\r\n\r\n    _NODISCARD virtual const char* name() const noexcept = 0;\r\n\r\n    _NODISCARD virtual string message(int _Errval) const = 0;\r\n\r\n    _NODISCARD virtual error_condition default_error_condition(int _Errval) const noexcept;\r\n\r\n    _NODISCARD virtual bool equivalent(int _Errval, const error_condition& _Cond) const noexcept;\r\n\r\n    _NODISCARD virtual bool equivalent(const error_code& _Code, int _Errval) const noexcept;\r\n\r\n    _NODISCARD bool operator==(const error_category& _Right) const noexcept {\r\n#ifdef _M_CEE_PURE\r\n        return _Addr == _Right._Addr;\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n        return _Bit_cast<uintptr_t>(_Addr) == _Bit_cast<uintptr_t>(_Right._Addr);\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD strong_ordering operator<=>(const error_category& _Right) const noexcept {\r\n        return _Bit_cast<uintptr_t>(_Addr) <=> _Bit_cast<uintptr_t>(_Right._Addr);\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD bool operator!=(const error_category& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n\r\n    _NODISCARD bool operator<(const error_category& _Right) const noexcept {\r\n#ifdef _M_CEE_PURE\r\n        return _Addr < _Right._Addr;\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n        return _Bit_cast<uintptr_t>(_Addr) < _Bit_cast<uintptr_t>(_Right._Addr);\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    error_category(const error_category&)            = delete;\r\n    error_category& operator=(const error_category&) = delete;\r\n\r\nprotected:\r\n#ifdef _M_CEE_PURE\r\n    uintptr_t _Addr;\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n    union _Addr_storage {\r\n    private:\r\n        uintptr_t _Num;\r\n        error_category* _Ptr;\r\n\r\n    public:\r\n        constexpr explicit _Addr_storage(const uintptr_t _Addr_num) noexcept : _Num(_Addr_num) {}\r\n        constexpr explicit _Addr_storage(error_category* const _Addr_ptr) noexcept : _Ptr(_Addr_ptr) {}\r\n\r\n        // TRANSITION: As of Boost 1.80.0, boost::system::detail::std_category assigns to _Addr.\r\n        constexpr _Addr_storage& operator=(const uintptr_t _Addr_num) noexcept {\r\n            _Num = _Addr_num;\r\n            return *this;\r\n        }\r\n    };\r\n    _STL_INTERNAL_STATIC_ASSERT(sizeof(_Addr_storage) == sizeof(uintptr_t));\r\n    _STL_INTERNAL_STATIC_ASSERT(alignof(_Addr_storage) == alignof(uintptr_t));\r\n\r\n    _Addr_storage _Addr;\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\n    constexpr explicit error_category(const uintptr_t _Addr_) noexcept : _Addr(_Addr_) {}\r\n\r\n    enum : uintptr_t { // symbolic addresses for Standard error_category objects\r\n        _Future_addr   = 1,\r\n        _Generic_addr  = 3,\r\n        _Iostream_addr = 5,\r\n        _System_addr   = 7\r\n    };\r\n};\r\n\r\n#if _STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS\r\n_NODISCARD inline bool _System_error_equal(const error_code&, const error_condition&) noexcept;\r\n#endif // _STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS\r\n\r\n_EXPORT_STD class error_code { // store an implementation-specific error code and category\r\npublic:\r\n    error_code() noexcept : _Myval(0), _Mycat(&_STD system_category()) {} // construct non-error\r\n\r\n    error_code(int _Val, const error_category& _Cat) noexcept : _Myval(_Val), _Mycat(&_Cat) {}\r\n\r\n    template <class _Enum, enable_if_t<is_error_code_enum_v<_Enum>, int> = 0>\r\n    error_code(_Enum _Errcode) noexcept : _Myval(0), _Mycat(nullptr) {\r\n        using _Ensure_adl::make_error_code;\r\n        *this = make_error_code(_Errcode); // intentional ADL\r\n    }\r\n\r\n    void assign(int _Val, const error_category& _Cat) noexcept {\r\n        _Myval = _Val;\r\n        _Mycat = &_Cat;\r\n    }\r\n\r\n    template <class _Enum, enable_if_t<is_error_code_enum_v<_Enum>, int> = 0>\r\n    error_code& operator=(_Enum _Errcode) noexcept {\r\n        using _Ensure_adl::make_error_code;\r\n        *this = make_error_code(_Errcode); // intentional ADL\r\n        return *this;\r\n    }\r\n\r\n    void clear() noexcept {\r\n        _Myval = 0;\r\n        _Mycat = &_STD system_category();\r\n    }\r\n\r\n    _NODISCARD int value() const noexcept {\r\n        return _Myval;\r\n    }\r\n\r\n    _NODISCARD const error_category& category() const noexcept {\r\n        return *_Mycat;\r\n    }\r\n\r\n    _NODISCARD error_condition default_error_condition() const noexcept;\r\n\r\n    _NODISCARD string message() const {\r\n        return category().message(value());\r\n    }\r\n\r\n    explicit operator bool() const noexcept {\r\n        return value() != 0;\r\n    }\r\n\r\n#if _STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS\r\n    _NODISCARD friend bool operator==(const error_code& _Left, const error_code& _Right) noexcept {\r\n        return _Left.category() == _Right.category() && _Left.value() == _Right.value();\r\n    }\r\n\r\n    _NODISCARD friend bool operator==(const error_code& _Left, const error_condition& _Right) noexcept {\r\n        return _System_error_equal(_Left, _Right);\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD friend strong_ordering operator<=>(const error_code& _Left, const error_code& _Right) noexcept {\r\n        if (const auto _Result = _Left.category() <=> _Right.category(); _Result != 0) {\r\n            return _Result;\r\n        }\r\n        return _Left.value() <=> _Right.value();\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD friend bool operator<(const error_code& _Left, const error_code& _Right) noexcept {\r\n        return _Left.category() < _Right.category()\r\n            || (_Left.category() == _Right.category() && _Left.value() < _Right.value());\r\n    }\r\n    _NODISCARD friend bool operator==(const error_condition& _Left, const error_code& _Right) noexcept {\r\n        return _System_error_equal(_Right, _Left);\r\n    }\r\n\r\n    _NODISCARD friend bool operator!=(const error_code& _Left, const error_code& _Right) noexcept {\r\n        return !(_Left == _Right);\r\n    }\r\n\r\n    _NODISCARD friend bool operator!=(const error_code& _Left, const error_condition& _Right) noexcept {\r\n        return !_System_error_equal(_Left, _Right);\r\n    }\r\n\r\n    _NODISCARD friend bool operator!=(const error_condition& _Left, const error_code& _Right) noexcept {\r\n        return !_System_error_equal(_Right, _Left);\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n#endif // _STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS\r\n\r\nprivate:\r\n    int _Myval; // the stored error number\r\n    const error_category* _Mycat; // pointer to error category\r\n};\r\n\r\n_EXPORT_STD class error_condition { // store an abstract error code and category\r\npublic:\r\n    error_condition() noexcept : _Myval(0), _Mycat(&_STD generic_category()) {} // construct non-error\r\n\r\n    error_condition(int _Val, const error_category& _Cat) noexcept : _Myval(_Val), _Mycat(&_Cat) {}\r\n\r\n    template <class _Enum, enable_if_t<is_error_condition_enum_v<_Enum>, int> = 0>\r\n    error_condition(_Enum _Errcode) noexcept : _Myval(0), _Mycat(nullptr) {\r\n        using _Ensure_adl::make_error_condition;\r\n        *this = make_error_condition(_Errcode); // intentional ADL\r\n    }\r\n\r\n    void assign(int _Val, const error_category& _Cat) noexcept {\r\n        _Myval = _Val;\r\n        _Mycat = &_Cat;\r\n    }\r\n\r\n    template <class _Enum, enable_if_t<is_error_condition_enum_v<_Enum>, int> = 0>\r\n    error_condition& operator=(_Enum _Errcode) noexcept {\r\n        using _Ensure_adl::make_error_condition;\r\n        *this = make_error_condition(_Errcode); // intentional ADL\r\n        return *this;\r\n    }\r\n\r\n    void clear() noexcept {\r\n        _Myval = 0;\r\n        _Mycat = &_STD generic_category();\r\n    }\r\n\r\n    _NODISCARD int value() const noexcept {\r\n        return _Myval;\r\n    }\r\n\r\n    _NODISCARD const error_category& category() const noexcept {\r\n        return *_Mycat;\r\n    }\r\n\r\n    _NODISCARD string message() const {\r\n        return category().message(value());\r\n    }\r\n\r\n    explicit operator bool() const noexcept {\r\n        return value() != 0;\r\n    }\r\n\r\n#if _STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS\r\n    _NODISCARD friend bool operator==(const error_condition& _Left, const error_condition& _Right) noexcept {\r\n        return _Left.category() == _Right.category() && _Left.value() == _Right.value();\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD friend strong_ordering operator<=>(\r\n        const error_condition& _Left, const error_condition& _Right) noexcept {\r\n        if (const auto _Result = _Left.category() <=> _Right.category(); _Result != 0) {\r\n            return _Result;\r\n        }\r\n        return _Left.value() <=> _Right.value();\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD friend bool operator<(const error_condition& _Left, const error_condition& _Right) noexcept {\r\n        return _Left.category() < _Right.category()\r\n            || (_Left.category() == _Right.category() && _Left.value() < _Right.value());\r\n    }\r\n    _NODISCARD friend bool operator!=(const error_condition& _Left, const error_condition& _Right) noexcept {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    // We grant friendship to the operators from error_code here to allow is_error_code_enum_v but not\r\n    // is_error_condition_enum_v enums to be compared directly with error_condition; for example:\r\n    // io_errc::stream == make_error_condition(errc::out_of_memory)\r\n    friend bool operator==(const error_code& _Left, const error_condition& _Right) noexcept;\r\n#if !_HAS_CXX20\r\n    friend bool operator==(const error_condition& _Left, const error_code& _Right) noexcept;\r\n    friend bool operator!=(const error_code& _Left, const error_condition& _Right) noexcept;\r\n    friend bool operator!=(const error_condition& _Left, const error_code& _Right) noexcept;\r\n#endif // !_HAS_CXX20\r\n#endif // _STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS\r\n\r\nprivate:\r\n    int _Myval; // the stored error number\r\n    const error_category* _Mycat; // pointer to error category\r\n};\r\n\r\n#if _STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS\r\n_NODISCARD inline bool _System_error_equal(const error_code& _Left, const error_condition& _Right) noexcept {\r\n    return _Left.category().equivalent(_Left.value(), _Right) || _Right.category().equivalent(_Left, _Right.value());\r\n}\r\n#else // ^^^ _STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS / !_STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS vvv\r\n_EXPORT_STD _NODISCARD inline bool operator==(const error_code& _Left, const error_code& _Right) noexcept {\r\n    return _Left.category() == _Right.category() && _Left.value() == _Right.value();\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline bool operator==(const error_code& _Left, const error_condition& _Right) noexcept {\r\n    return _Left.category().equivalent(_Left.value(), _Right) || _Right.category().equivalent(_Left, _Right.value());\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline bool operator==(const error_condition& _Left, const error_condition& _Right) noexcept {\r\n    return _Left.category() == _Right.category() && _Left.value() == _Right.value();\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD _NODISCARD inline strong_ordering operator<=>(const error_code& _Left, const error_code& _Right) noexcept {\r\n    if (const auto _Result = _Left.category() <=> _Right.category(); _Result != 0) {\r\n        return _Result;\r\n    }\r\n    return _Left.value() <=> _Right.value();\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline strong_ordering operator<=>(\r\n    const error_condition& _Left, const error_condition& _Right) noexcept {\r\n    if (const auto _Result = _Left.category() <=> _Right.category(); _Result != 0) {\r\n        return _Result;\r\n    }\r\n    return _Left.value() <=> _Right.value();\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n_NODISCARD inline bool operator<(const error_code& _Left, const error_code& _Right) noexcept {\r\n    return _Left.category() < _Right.category()\r\n        || (_Left.category() == _Right.category() && _Left.value() < _Right.value());\r\n}\r\n\r\n_NODISCARD inline bool operator<(const error_condition& _Left, const error_condition& _Right) noexcept {\r\n    return _Left.category() < _Right.category()\r\n        || (_Left.category() == _Right.category() && _Left.value() < _Right.value());\r\n}\r\n\r\n_NODISCARD inline bool operator==(const error_condition& _Left, const error_code& _Right) noexcept {\r\n    return _Right.category().equivalent(_Right.value(), _Left) || _Left.category().equivalent(_Right, _Left.value());\r\n}\r\n\r\n_NODISCARD inline bool operator!=(const error_code& _Left, const error_code& _Right) noexcept {\r\n    return !(_Left == _Right);\r\n}\r\n\r\n_NODISCARD inline bool operator!=(const error_code& _Left, const error_condition& _Right) noexcept {\r\n    return !(_Left == _Right);\r\n}\r\n\r\n_NODISCARD inline bool operator!=(const error_condition& _Left, const error_code& _Right) noexcept {\r\n    return !(_Left == _Right);\r\n}\r\n\r\n_NODISCARD inline bool operator!=(const error_condition& _Left, const error_condition& _Right) noexcept {\r\n    return !(_Left == _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n#endif // ^^^ !_STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS ^^^\r\n\r\n_NODISCARD inline error_condition error_category::default_error_condition(int _Errval) const noexcept {\r\n    // make error_condition for error code\r\n    return error_condition(_Errval, *this);\r\n}\r\n\r\n_NODISCARD inline bool error_category::equivalent(int _Errval, const error_condition& _Cond) const noexcept {\r\n    return default_error_condition(_Errval) == _Cond;\r\n}\r\n\r\n_NODISCARD inline bool error_category::equivalent(const error_code& _Code, int _Errval) const noexcept {\r\n    return *this == _Code.category() && _Code.value() == _Errval;\r\n}\r\n\r\n_NODISCARD inline error_condition error_code::default_error_condition() const noexcept {\r\n    // make error_condition for error code\r\n    return category().default_error_condition(value());\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline error_code make_error_code(errc _Ec) noexcept {\r\n    return error_code(static_cast<int>(_Ec), _STD generic_category());\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline error_code make_error_code(io_errc _Ec) noexcept {\r\n    return error_code(static_cast<int>(_Ec), _STD iostream_category());\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline error_condition make_error_condition(errc _Ec) noexcept {\r\n    return error_condition(static_cast<int>(_Ec), _STD generic_category());\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline error_condition make_error_condition(io_errc _Ec) noexcept {\r\n    return error_condition(static_cast<int>(_Ec), _STD iostream_category());\r\n}\r\n\r\ntemplate <>\r\nstruct hash<error_code> {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = error_code;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = size_t;\r\n\r\n    _NODISCARD static size_t operator()(const error_code& _Keyval) noexcept {\r\n        return hash<int>{}(_Keyval.value());\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct hash<error_condition> {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = error_condition;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = size_t;\r\n\r\n    _NODISCARD static size_t operator()(const error_condition& _Keyval) noexcept {\r\n        return hash<int>{}(_Keyval.value());\r\n    }\r\n};\r\n\r\nclass _NODISCARD _System_error : public runtime_error { // base of all system-error exceptions\r\nprivate:\r\n    static string _Makestr(error_code _Errcode, string _Message) { // compose error message\r\n        if (!_Message.empty()) {\r\n            _Message.append(\": \");\r\n        }\r\n\r\n        _Message.append(_Errcode.message());\r\n        return _Message;\r\n    }\r\n\r\nprotected:\r\n#if _HAS_EXCEPTIONS\r\n    _System_error(error_code _Errcode) : runtime_error(_Errcode.message()), _Mycode(_Errcode) {}\r\n\r\n    _System_error(error_code _Errcode, const string& _Message)\r\n        : runtime_error(_Makestr(_Errcode, _Message)), _Mycode(_Errcode) {}\r\n#else // ^^^ _HAS_EXCEPTIONS / !_HAS_EXCEPTIONS vvv\r\n    _System_error(error_code _Errcode) : runtime_error(\"system error\"), _Mycode(_Errcode) {}\r\n\r\n    _System_error(error_code _Errcode, const string&) : runtime_error(\"system error\"), _Mycode(_Errcode) {}\r\n#endif // ^^^ !_HAS_EXCEPTIONS ^^^\r\n\r\n    error_code _Mycode; // the stored error code\r\n};\r\n\r\n_EXPORT_STD class _NODISCARD system_error : public _System_error { // base of all system-error exceptions\r\nprivate:\r\n    using _Mybase = _System_error;\r\n\r\npublic:\r\n    system_error(error_code _Errcode) : _Mybase(_Errcode) {}\r\n\r\n    system_error(error_code _Errcode, const string& _Message) : _Mybase(_Errcode, _Message) {}\r\n\r\n    system_error(error_code _Errcode, const char* _Message) : _Mybase(_Errcode, _Message) {}\r\n\r\n    system_error(int _Errval, const error_category& _Errcat) : _Mybase(error_code(_Errval, _Errcat)) {}\r\n\r\n    system_error(int _Errval, const error_category& _Errcat, const string& _Message)\r\n        : _Mybase(error_code(_Errval, _Errcat), _Message) {}\r\n\r\n    system_error(int _Errval, const error_category& _Errcat, const char* _Message)\r\n        : _Mybase(error_code(_Errval, _Errcat), _Message) {}\r\n\r\n    _NODISCARD const error_code& code() const noexcept {\r\n        return _Mycode;\r\n    }\r\n\r\n#if !_HAS_EXCEPTIONS\r\nprotected:\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n#endif // !_HAS_EXCEPTIONS\r\n};\r\n\r\n[[noreturn]] inline void _Throw_system_error(const errc _Ec) {\r\n    _THROW(system_error{_STD make_error_code(_Ec)});\r\n}\r\n\r\nextern \"C++\" _CRTIMP2_PURE const char* __CLRCALL_PURE_OR_CDECL _Syserror_map(int);\r\nextern \"C++\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Winerror_map(int);\r\n\r\nstruct _System_error_message {\r\n    char* _Str;\r\n    size_t _Length;\r\n\r\n    explicit _System_error_message(const unsigned long _Ec) noexcept\r\n        : _Str(nullptr), _Length(_CSTD __std_system_error_allocate_message(_Ec, &_Str)) {}\r\n\r\n    _System_error_message(const _System_error_message&)            = delete;\r\n    _System_error_message& operator=(const _System_error_message&) = delete;\r\n\r\n    ~_System_error_message() {\r\n        _CSTD __std_system_error_deallocate_message(_Str);\r\n    }\r\n};\r\n\r\nclass _Generic_error_category : public error_category { // categorize a generic error\r\npublic:\r\n    constexpr _Generic_error_category() noexcept : error_category(_Generic_addr) {}\r\n\r\n    _NODISCARD const char* name() const noexcept override {\r\n        return \"generic\";\r\n    }\r\n\r\n    _NODISCARD string message(int _Errcode) const override {\r\n        return _Syserror_map(_Errcode);\r\n    }\r\n};\r\n\r\nclass _Iostream_error_category2 : public error_category { // categorize an iostream error\r\npublic:\r\n    constexpr _Iostream_error_category2() noexcept : error_category(_Iostream_addr) {}\r\n\r\n    _NODISCARD const char* name() const noexcept override {\r\n        return \"iostream\";\r\n    }\r\n\r\n    _NODISCARD string message(int _Errcode) const override {\r\n        if (_Errcode == static_cast<int>(io_errc::stream)) {\r\n            static constexpr char _Iostream_error[] = \"iostream stream error\";\r\n            constexpr size_t _Iostream_error_length = sizeof(_Iostream_error) - 1; // TRANSITION, DevCom-906503\r\n            return string{_Iostream_error, _Iostream_error_length};\r\n        } else {\r\n            return _Syserror_map(_Errcode);\r\n        }\r\n    }\r\n};\r\n\r\nclass _System_error_category : public error_category { // categorize an operating system error\r\npublic:\r\n    constexpr _System_error_category() noexcept : error_category(_System_addr) {}\r\n\r\n    _NODISCARD const char* name() const noexcept override {\r\n        return \"system\";\r\n    }\r\n\r\n    _NODISCARD string message(int _Errcode) const override {\r\n        const _System_error_message _Msg(static_cast<unsigned long>(_Errcode));\r\n\r\n        if (_Msg._Str && _Msg._Length != 0) {\r\n            // CodeQL [SM02310] _Msg's ctor inits _Str(nullptr) before doing work, then we test _Msg._Str above.\r\n            return string{_Msg._Str, _Msg._Length};\r\n        } else {\r\n            static constexpr char _Unknown_error[] = \"unknown error\";\r\n            constexpr size_t _Unknown_error_length = sizeof(_Unknown_error) - 1; // TRANSITION, DevCom-906503\r\n            return string{_Unknown_error, _Unknown_error_length};\r\n        }\r\n    }\r\n\r\n    _NODISCARD error_condition default_error_condition(int _Errval) const noexcept override {\r\n        if (_Errval == 0) {\r\n            return error_condition(0, _STD generic_category());\r\n        }\r\n\r\n        // make error_condition for error code (generic if possible)\r\n        const int _Posv = _Winerror_map(_Errval);\r\n        if (_Posv == 0) {\r\n            return error_condition(_Errval, _STD system_category());\r\n        } else {\r\n            return error_condition(_Posv, _STD generic_category());\r\n        }\r\n    }\r\n};\r\n\r\n// _Immortalize_memcpy_image is used to provide a nonstandard guarantee.\r\n// Specifically, we want the error category objects returned from things like std::system_category() to always\r\n//   be available, even during DLL unload (otherwise, <system_error> would be a huge regression vs. legacy error codes).\r\n// Moreover, we need to be very conservative in the runtime support we request. Thus, we have these constraints:\r\n//\r\n// * can't use magic statics in standard modes, because that would inject a .TLS section into all binaries using\r\n//   <system_error> and would likely put borderline programs over the TLS slot count limit, and would destroy the\r\n//   variable during DLL unload\r\n// * can't declare the error_category as an ordinary constexpr variable for most compilers before C++20, because\r\n//   error_category has a virtual destructor\r\n// * can't declare the error_category as an ordinary non-constexpr variable even with a constexpr constructor, because\r\n//   the compiler will emit code to destroy it which invalidates its use in these DLL shutdown scenarios\r\n//\r\n// As a result, we use a workaround: We create an atomic<uintptr_t> array to store the error_category instance, test\r\n//   if the first atomic is nonzero (acquire), and if so, we know we have formed the instance and can return a\r\n//   reinterpreted pointer to that storage. If the first atomic is zero, we write all except the first atomic (relaxed),\r\n//   then write the first one as a store-release. (The non-first values are transferred to other threads in the\r\n//   release sequence).\r\n//\r\n// Acknowledged undefined and implementation-defined behavior happening here:\r\n// * There is a data race when filling in the values other than the first atomic; this is OK on all hardware we target\r\n//   because the racing threads are all writing identical values that never change afterwards.\r\n// * We are reaching into the layout of atomic<uintptr_t>[N] and assuming we can reinterpret that as some other type.\r\n// * We are assuming that virtual functions are implemented with a vfptr located as the first member of an object.\r\n// (there are probably others)\r\n//\r\n// Inspecting the resulting assembly of any callers of _Immortalize_memcpy_image is recommended.\r\n//\r\n\r\n#if defined(_M_CEE_PURE)\r\n// /clr:pure doesn't ever do constant initialization, so rely on the CLR and magic statics\r\ntemplate <class _Ty>\r\n_NODISCARD const _Ty& _Immortalize_memcpy_image() noexcept {\r\n    /* MAGIC */ static _Immortalizer_impl<_Ty> _Static;\r\n    return _Static._Storage;\r\n}\r\n#elif _HAS_CXX20\r\ntemplate <class _Ty>\r\n_NODISCARD const _Ty& _Immortalize_memcpy_image() noexcept {\r\n    static constexpr _Ty _Static;\r\n    return _Static;\r\n}\r\n#elif defined(__clang__)\r\ntemplate <class _Ty>\r\n_NODISCARD const _Ty& _Immortalize_memcpy_image() noexcept {\r\n    [[_Clang::__require_constant_initialization__]] static _Ty _Static;\r\n    return _Static;\r\n}\r\n#elif !defined(_M_CEE)\r\ntemplate <class _Ty>\r\nstruct _Constexpr_immortalize_impl {\r\n    union {\r\n        _Ty _Storage;\r\n    };\r\n\r\n    constexpr _Constexpr_immortalize_impl() noexcept : _Storage{} {}\r\n\r\n    _Constexpr_immortalize_impl(const _Constexpr_immortalize_impl&)            = delete;\r\n    _Constexpr_immortalize_impl& operator=(const _Constexpr_immortalize_impl&) = delete;\r\n\r\n    _MSVC_NOOP_DTOR ~_Constexpr_immortalize_impl() {\r\n        // do nothing, allowing _Ty to be used during shutdown\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD const _Ty& _Immortalize_memcpy_image() noexcept {\r\n    static _Constexpr_immortalize_impl<_Ty> _Static;\r\n    return _Static._Storage;\r\n}\r\n#else // ^^^ !defined(_M_CEE) / defined(_M_CEE), TRANSITION, VSO-1153256 vvv\r\ntemplate <class _Ty>\r\n_NODISCARD const _Ty& _Immortalize_memcpy_image() noexcept {\r\n    // return reference to a memcpy'd default-initialized _Ty\r\n    // pre: A default-initialized _Ty sets the first pointer-sized field to nonzero\r\n    constexpr size_t _Pointer_count = sizeof(_Ty) / sizeof(uintptr_t);\r\n    static atomic<uintptr_t> _Storage[_Pointer_count];\r\n    static_assert(sizeof(_Storage) == sizeof(_Ty), \"Bad storage size\");\r\n    static_assert(alignof(decltype(_Storage)) >= alignof(_Ty), \"Bad alignment assumptions\");\r\n    if (_Storage[0].load(memory_order_acquire) != 0) {\r\n        return reinterpret_cast<_Ty&>(_Storage);\r\n    }\r\n\r\n    const _Ty _Target;\r\n    const auto _Target_iter = reinterpret_cast<const uintptr_t*>(_STD addressof(_Target));\r\n    _CSTD memcpy(_Storage + 1, _Target_iter + 1, sizeof(_Ty) - sizeof(uintptr_t));\r\n    _Storage[0].store(_Target_iter[0], memory_order_release);\r\n    return reinterpret_cast<_Ty&>(_Storage);\r\n}\r\n#endif // ^^^ defined(_M_CEE), TRANSITION, VSO-1153256 ^^^\r\n\r\n_EXPORT_STD _NODISCARD inline const error_category& generic_category() noexcept {\r\n    return _Immortalize_memcpy_image<_Generic_error_category>();\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline const error_category& iostream_category() noexcept {\r\n    return _Immortalize_memcpy_image<_Iostream_error_category2>();\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline const error_category& system_category() noexcept {\r\n    return _Immortalize_memcpy_image<_System_error_category>();\r\n}\r\n_STD_END\r\n\r\n#if _HAS_CXX17\r\nextern \"C\" {\r\nenum class __std_win_error : unsigned long;\r\n} // extern \"C\"\r\n\r\n_STD_BEGIN\r\n// We would really love to use the proper way of building error_code by specializing\r\n// is_error_code_enum and make_error_code for __std_win_error, but because:\r\n//   1. We would like to keep the definition of __std_win_error in xfilesystem_abi.h\r\n//   2. and xfilesystem_abi.h cannot include <system_error>\r\n//   3. and specialization of is_error_code_enum and overload of make_error_code\r\n//      need to be kept together with the enum (see limerick in N4950 [temp.expl.spec]/8)\r\n// we resort to using this _Make_ec helper.\r\n_NODISCARD inline error_code _Make_ec(__std_win_error _Errno) noexcept { // make an error_code\r\n    return {static_cast<int>(_Errno), _STD system_category()};\r\n}\r\n\r\n[[noreturn]] inline void _Throw_system_error_from_std_win_error(const __std_win_error _Errno) {\r\n    _THROW(system_error{_Make_ec(_Errno)});\r\n}\r\n_STD_END\r\n#endif // _HAS_CXX17\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"noop_dtor\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _SYSTEM_ERROR_\r\n"
  },
  {
    "path": "stl/inc/thread",
    "content": "// thread standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _THREAD_\r\n#define _THREAD_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#ifdef _M_CEE_PURE\r\n#error <thread> is not supported when compiling with /clr:pure.\r\n#endif // defined(_M_CEE_PURE)\r\n\r\n#include <__msvc_chrono.hpp>\r\n#include <memory>\r\n#include <process.h>\r\n#include <tuple>\r\n#include <xthreads.h>\r\n\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#include <stop_token>\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n#include <__msvc_formatter.hpp>\r\n#endif // _HAS_CXX23\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n#if _HAS_CXX20\r\n_EXPORT_STD class jthread;\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD class thread { // class for observing and managing threads\r\npublic:\r\n    class id;\r\n\r\n    using native_handle_type = void*;\r\n\r\n    thread() noexcept : _Thr{} {}\r\n\r\nprivate:\r\n#if _HAS_CXX20\r\n    friend jthread;\r\n#endif // _HAS_CXX20\r\n\r\n    template <class _Tuple, size_t... _Indices>\r\n    static unsigned int __stdcall _Invoke(void* _RawVals) noexcept /* terminates */ {\r\n        // adapt invoke of user's callable object to _beginthreadex's thread procedure\r\n        const unique_ptr<_Tuple> _FnVals(static_cast<_Tuple*>(_RawVals));\r\n        _Tuple& _Tup = *_FnVals.get(); // avoid ADL, handle incomplete types\r\n        _STD invoke(_STD move(_STD get<_Indices>(_Tup))...);\r\n        _Cnd_do_broadcast_at_thread_exit(); // TRANSITION, ABI\r\n        return 0;\r\n    }\r\n\r\n    template <class _Tuple, size_t... _Indices>\r\n    _NODISCARD static constexpr auto _Get_invoke(index_sequence<_Indices...>) noexcept {\r\n        return &_Invoke<_Tuple, _Indices...>;\r\n    }\r\n\r\n#pragma warning(push) // pointer or reference to potentially throwing function passed to 'extern \"C\"' function under\r\n#pragma warning(disable : 5039) // -EHc. Undefined behavior may occur if this function throws an exception. (/Wall)\r\n    template <class _Fn, class... _Args>\r\n    void _Start(_Fn&& _Fx, _Args&&... _Ax) {\r\n        using _Tuple                 = tuple<decay_t<_Fn>, decay_t<_Args>...>;\r\n        auto _Decay_copied           = _STD make_unique<_Tuple>(_STD forward<_Fn>(_Fx), _STD forward<_Args>(_Ax)...);\r\n        constexpr auto _Invoker_proc = _Get_invoke<_Tuple>(make_index_sequence<1 + sizeof...(_Args)>{});\r\n\r\n        _Thr._Hnd =\r\n            reinterpret_cast<void*>(_CSTD _beginthreadex(nullptr, 0, _Invoker_proc, _Decay_copied.get(), 0, &_Thr._Id));\r\n\r\n        if (_Thr._Hnd) { // ownership transferred to the thread\r\n            (void) _Decay_copied.release();\r\n        } else { // failed to start thread\r\n            _Thr._Id = 0;\r\n            _Throw_Cpp_error(_RESOURCE_UNAVAILABLE_TRY_AGAIN);\r\n        }\r\n    }\r\n#pragma warning(pop)\r\n\r\npublic:\r\n    template <class _Fn, class... _Args, enable_if_t<!is_same_v<_Remove_cvref_t<_Fn>, thread>, int> = 0>\r\n    _NODISCARD_CTOR_THREAD explicit thread(_Fn&& _Fx, _Args&&... _Ax) {\r\n        _Start(_STD forward<_Fn>(_Fx), _STD forward<_Args>(_Ax)...);\r\n    }\r\n\r\n    ~thread() noexcept {\r\n        if (joinable()) {\r\n            _STD terminate(); // per N4950 [thread.thread.destr]/1\r\n        }\r\n    }\r\n\r\n    thread(thread&& _Other) noexcept : _Thr(_STD exchange(_Other._Thr, {})) {}\r\n\r\n    thread& operator=(thread&& _Other) noexcept {\r\n        if (joinable()) {\r\n            _STD terminate(); // per N4950 [thread.thread.assign]/1\r\n        }\r\n\r\n        _Thr = _STD exchange(_Other._Thr, {});\r\n        return *this;\r\n    }\r\n\r\n    thread(const thread&)            = delete;\r\n    thread& operator=(const thread&) = delete;\r\n\r\n    void swap(thread& _Other) noexcept {\r\n        _STD swap(_Thr, _Other._Thr);\r\n    }\r\n\r\n    _NODISCARD bool joinable() const noexcept {\r\n        return _Thr._Id != 0;\r\n    }\r\n\r\n    void join() {\r\n        if (!joinable()) {\r\n            _Throw_Cpp_error(_INVALID_ARGUMENT);\r\n        }\r\n\r\n        if (_Thr._Id == _Thrd_id()) {\r\n            _Throw_Cpp_error(_RESOURCE_DEADLOCK_WOULD_OCCUR);\r\n        }\r\n\r\n        if (_Thrd_join(_Thr, nullptr) != _Thrd_result::_Success) {\r\n            _Throw_Cpp_error(_NO_SUCH_PROCESS);\r\n        }\r\n\r\n        _Thr = {};\r\n    }\r\n\r\n    void detach() {\r\n        if (!joinable()) {\r\n            _Throw_Cpp_error(_INVALID_ARGUMENT);\r\n        }\r\n\r\n        if (_Thrd_detach(_Thr) != _Thrd_result::_Success) {\r\n            _Throw_Cpp_error(_INVALID_ARGUMENT);\r\n        }\r\n\r\n        _Thr = {};\r\n    }\r\n\r\n    _NODISCARD id get_id() const noexcept;\r\n\r\n    _NODISCARD native_handle_type native_handle() noexcept /* strengthened */ { // return Win32 HANDLE as void *\r\n        return _Thr._Hnd;\r\n    }\r\n\r\n    _NODISCARD static unsigned int hardware_concurrency() noexcept {\r\n        return _Thrd_hardware_concurrency();\r\n    }\r\n\r\nprivate:\r\n    _Thrd_t _Thr;\r\n};\r\n\r\ntemplate <class _Rep, class _Period>\r\n_NODISCARD auto _To_absolute_time(const chrono::duration<_Rep, _Period>& _Rel_time) noexcept {\r\n    constexpr auto _Zero                 = chrono::duration<_Rep, _Period>::zero();\r\n    const auto _Now                      = chrono::steady_clock::now();\r\n    decltype(_Now + _Rel_time) _Abs_time = _Now; // return common type\r\n    if (_Rel_time > _Zero) {\r\n        constexpr auto _Forever = (decltype(_Abs_time)::max)();\r\n        if (_Abs_time < _Forever - _Rel_time) {\r\n            _Abs_time += _Rel_time;\r\n        } else {\r\n            _Abs_time = _Forever;\r\n        }\r\n    }\r\n    return _Abs_time;\r\n}\r\n\r\nstruct _Clamped_rel_time_ms_count_result {\r\n    unsigned long _Count;\r\n    bool _Clamped;\r\n};\r\n\r\ntemplate <class _Duration>\r\n_NODISCARD _Clamped_rel_time_ms_count_result _Clamped_rel_time_ms_count(const _Duration& _Rel) {\r\n    // _Clamp must be less than 2^32 - 1 (INFINITE) milliseconds, but is otherwise arbitrary.\r\n    constexpr chrono::milliseconds _Clamp{chrono::hours{24}};\r\n\r\n    if (_Rel > _Clamp) {\r\n        return {static_cast<unsigned long>(_Clamp.count()), true};\r\n    } else {\r\n        const auto _Rel_ms = chrono::ceil<chrono::milliseconds>(_Rel);\r\n        return {static_cast<unsigned long>(_Rel_ms.count()), false};\r\n    }\r\n}\r\n\r\nnamespace this_thread {\r\n    _EXPORT_STD _NODISCARD thread::id get_id() noexcept;\r\n\r\n    _EXPORT_STD inline void yield() noexcept {\r\n        _Thrd_yield();\r\n    }\r\n\r\n    _EXPORT_STD template <class _Clock, class _Duration>\r\n    void sleep_until(const chrono::time_point<_Clock, _Duration>& _Abs_time) {\r\n        static_assert(chrono::_Is_clock_v<_Clock>, \"Clock type required\");\r\n        for (;;) {\r\n            const auto _Now = _Clock::now();\r\n            if (_Abs_time <= _Now) {\r\n                return;\r\n            }\r\n\r\n            const unsigned long _Rel_ms_count = _Clamped_rel_time_ms_count(_Abs_time - _Now)._Count;\r\n            _Thrd_sleep_for(_Rel_ms_count);\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD template <class _Rep, class _Period>\r\n    void sleep_for(const chrono::duration<_Rep, _Period>& _Rel_time) {\r\n        sleep_until(_To_absolute_time(_Rel_time));\r\n    }\r\n} // namespace this_thread\r\n\r\nclass thread::id { // thread id\r\npublic:\r\n    id() noexcept = default; // id for no thread\r\n\r\n#if _HAS_CXX23\r\n    _NODISCARD _Thrd_id_t _Get_underlying_id() const noexcept {\r\n        return _Id;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\nprivate:\r\n    explicit id(_Thrd_id_t _Other_id) noexcept : _Id(_Other_id) {}\r\n\r\n    _Thrd_id_t _Id = 0;\r\n\r\n    friend thread::id thread::get_id() const noexcept;\r\n    friend thread::id this_thread::get_id() noexcept;\r\n    friend bool operator==(thread::id _Left, thread::id _Right) noexcept;\r\n#if _HAS_CXX20\r\n    friend strong_ordering operator<=>(thread::id _Left, thread::id _Right) noexcept;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    friend bool operator<(thread::id _Left, thread::id _Right) noexcept;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n    template <class _Ch, class _Tr>\r\n    friend basic_ostream<_Ch, _Tr>& operator<<(basic_ostream<_Ch, _Tr>& _Str, thread::id _Id);\r\n    friend hash<thread::id>;\r\n};\r\n\r\n_NODISCARD inline thread::id thread::get_id() const noexcept {\r\n    return thread::id{_Thr._Id};\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline thread::id this_thread::get_id() noexcept {\r\n    return thread::id{_Thrd_id()};\r\n}\r\n\r\n_EXPORT_STD inline void swap(thread& _Left, thread& _Right) noexcept {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD _NODISCARD inline bool operator==(thread::id _Left, thread::id _Right) noexcept {\r\n    return _Left._Id == _Right._Id;\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD _NODISCARD inline strong_ordering operator<=>(thread::id _Left, thread::id _Right) noexcept {\r\n    return _Left._Id <=> _Right._Id;\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n_NODISCARD inline bool operator!=(thread::id _Left, thread::id _Right) noexcept {\r\n    return !(_Left == _Right);\r\n}\r\n\r\n_NODISCARD inline bool operator<(thread::id _Left, thread::id _Right) noexcept {\r\n    return _Left._Id < _Right._Id;\r\n}\r\n\r\n_NODISCARD inline bool operator<=(thread::id _Left, thread::id _Right) noexcept {\r\n    return !(_Right < _Left);\r\n}\r\n\r\n_NODISCARD inline bool operator>(thread::id _Left, thread::id _Right) noexcept {\r\n    return _Right < _Left;\r\n}\r\n\r\n_NODISCARD inline bool operator>=(thread::id _Left, thread::id _Right) noexcept {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class _Ch, class _Tr>\r\nbasic_ostream<_Ch, _Tr>& operator<<(basic_ostream<_Ch, _Tr>& _Str, thread::id _Id) {\r\n    _STL_INTERNAL_STATIC_ASSERT(sizeof(_Thrd_id_t) == 4);\r\n    _Ch _Buff[11]; // can hold 2^32 - 1, plus terminating null\r\n    _Ch* _RNext = _STD end(_Buff);\r\n    *--_RNext   = static_cast<_Ch>('\\0');\r\n    _RNext      = _STD _UIntegral_to_buff(_RNext, _Id._Id);\r\n    return _Str << _RNext;\r\n}\r\n\r\n#if _HAS_CXX23\r\n// Per LWG-3997, `_CharT` in library-provided `formatter` specializations is\r\n// constrained to character types supported by `format`.\r\ntemplate <_Format_supported_charT _CharT>\r\nstruct formatter<thread::id, _CharT> {\r\n    template <class _ParseContext = basic_format_parse_context<_CharT>> // improves throughput, see GH-5003\r\n    constexpr _ParseContext::iterator parse(type_identity_t<_ParseContext&> _Parse_ctx) {\r\n        return _Impl._Parse(_Parse_ctx);\r\n    }\r\n\r\n    template <class _FormatContext>\r\n    _FormatContext::iterator format(thread::id _Val, _FormatContext& _Format_ctx) const {\r\n        _STL_INTERNAL_STATIC_ASSERT(sizeof(_Thrd_id_t) == 4);\r\n        _CharT _Buff[10]; // can hold 2^32 - 1\r\n        _CharT* const _Last        = _STD end(_Buff);\r\n        const _CharT* const _First = _STD _UIntegral_to_buff(_Last, _Val._Get_underlying_id());\r\n        return _Impl._Format(_Format_ctx, static_cast<int>(_Last - _First), _Fmt_align::_Right,\r\n            [&](_FormatContext::iterator _Out) { return _RANGES copy(_First, _Last, _STD move(_Out)).out; });\r\n    }\r\n\r\nprivate:\r\n    _Fill_align_and_width_formatter<_CharT> _Impl;\r\n};\r\n\r\ntemplate <>\r\ninline constexpr bool enable_nonlocking_formatter_optimization<thread::id> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <>\r\nstruct hash<thread::id> {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = thread::id;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = size_t;\r\n\r\n    _NODISCARD static size_t operator()(const thread::id _Keyval) noexcept {\r\n        return _Hash_representation(_Keyval._Id);\r\n    }\r\n};\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD class jthread {\r\npublic:\r\n    using id                 = thread::id;\r\n    using native_handle_type = thread::native_handle_type;\r\n\r\n    jthread() noexcept : _Impl{}, _Ssource{nostopstate} {}\r\n\r\n    template <class _Fn, class... _Args>\r\n        requires (!is_same_v<remove_cvref_t<_Fn>, jthread>)\r\n    _NODISCARD_CTOR_JTHREAD explicit jthread(_Fn&& _Fx, _Args&&... _Ax) {\r\n        if constexpr (is_invocable_v<decay_t<_Fn>, stop_token, decay_t<_Args>...>) {\r\n            _Impl._Start(_STD forward<_Fn>(_Fx), _Ssource.get_token(), _STD forward<_Args>(_Ax)...);\r\n        } else {\r\n            _Impl._Start(_STD forward<_Fn>(_Fx), _STD forward<_Args>(_Ax)...);\r\n        }\r\n    }\r\n\r\n    ~jthread() {\r\n        _Try_cancel_and_join();\r\n    }\r\n\r\n    jthread(const jthread&)            = delete;\r\n    jthread(jthread&&) noexcept        = default;\r\n    jthread& operator=(const jthread&) = delete;\r\n\r\n    jthread& operator=(jthread&& _Other) noexcept {\r\n        if (this == _STD addressof(_Other)) {\r\n            return *this;\r\n        }\r\n\r\n        _Try_cancel_and_join();\r\n        _Impl    = _STD move(_Other._Impl);\r\n        _Ssource = _STD move(_Other._Ssource);\r\n        return *this;\r\n    }\r\n\r\n    void swap(jthread& _Other) noexcept {\r\n        _Impl.swap(_Other._Impl);\r\n        _Ssource.swap(_Other._Ssource);\r\n    }\r\n\r\n    _NODISCARD bool joinable() const noexcept {\r\n        return _Impl.joinable();\r\n    }\r\n\r\n    void join() {\r\n        _Impl.join();\r\n    }\r\n\r\n    void detach() {\r\n        _Impl.detach();\r\n    }\r\n\r\n    _NODISCARD id get_id() const noexcept {\r\n        return _Impl.get_id();\r\n    }\r\n\r\n    _NODISCARD native_handle_type native_handle() noexcept /* strengthened */ {\r\n        return _Impl.native_handle();\r\n    }\r\n\r\n    _NODISCARD stop_source get_stop_source() noexcept {\r\n        return _Ssource;\r\n    }\r\n\r\n    _NODISCARD stop_token get_stop_token() const noexcept {\r\n        return _Ssource.get_token();\r\n    }\r\n\r\n    bool request_stop() noexcept {\r\n        return _Ssource.request_stop();\r\n    }\r\n\r\n    friend void swap(jthread& _Lhs, jthread& _Rhs) noexcept {\r\n        _Lhs.swap(_Rhs);\r\n    }\r\n\r\n    _NODISCARD static unsigned int hardware_concurrency() noexcept {\r\n        return thread::hardware_concurrency();\r\n    }\r\n\r\nprivate:\r\n    void _Try_cancel_and_join() noexcept {\r\n        if (_Impl.joinable()) {\r\n            _Ssource.request_stop();\r\n            _Impl.join();\r\n        }\r\n    }\r\n\r\n    thread _Impl;\r\n    stop_source _Ssource;\r\n};\r\n#endif // _HAS_CXX20\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _THREAD_\r\n"
  },
  {
    "path": "stl/inc/tuple",
    "content": "// tuple standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _TUPLE_\r\n#define _TUPLE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#endif // _HAS_CXX20\r\n#include <__msvc_iter_core.hpp>\r\n#include <type_traits>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <bool _Same, class _Dest, class... _Srcs>\r\nconstexpr bool _Tuple_conditional_explicit_v0 = false;\r\n\r\ntemplate <class... _Dests, class... _Srcs>\r\nconstexpr bool _Tuple_conditional_explicit_v0<true, tuple<_Dests...>, _Srcs...> =\r\n    !conjunction_v<is_convertible<_Srcs, _Dests>...>;\r\n\r\ntemplate <class _Dest, class... _Srcs>\r\nconstexpr bool _Tuple_conditional_explicit_v =\r\n    _Tuple_conditional_explicit_v0<tuple_size_v<_Dest> == sizeof...(_Srcs), _Dest, _Srcs...>;\r\n\r\ntemplate <bool _Same, class _Dest, class... _Srcs>\r\nconstexpr bool _Tuple_constructible_v0 = false;\r\n\r\ntemplate <class... _Dests, class... _Srcs>\r\nconstexpr bool _Tuple_constructible_v0<true, tuple<_Dests...>, _Srcs...> =\r\n    conjunction_v<is_constructible<_Dests, _Srcs>...>;\r\n\r\ntemplate <class _Dest, class... _Srcs>\r\nconstexpr bool _Tuple_constructible_v =\r\n    _Tuple_constructible_v0<tuple_size_v<_Dest> == sizeof...(_Srcs), _Dest, _Srcs...>;\r\n\r\ntemplate <class _Dest, class... _Srcs>\r\nstruct _Tuple_constructible_val : bool_constant<_Tuple_constructible_v<_Dest, _Srcs...>> {};\r\n\r\ntemplate <bool _Same, class _Dest, class... _Srcs>\r\nconstexpr bool _Tuple_nothrow_constructible_v0 = false;\r\n\r\ntemplate <class... _Dests, class... _Srcs>\r\nconstexpr bool _Tuple_nothrow_constructible_v0<true, tuple<_Dests...>, _Srcs...> =\r\n    conjunction_v<is_nothrow_constructible<_Dests, _Srcs>...>;\r\n\r\ntemplate <class _Dest, class... _Srcs>\r\nconstexpr bool _Tuple_nothrow_constructible_v =\r\n    _Tuple_nothrow_constructible_v0<tuple_size_v<_Dest> == sizeof...(_Srcs), _Dest, _Srcs...>;\r\n\r\ntemplate <bool _Same, class _Dest, class... _Srcs>\r\nconstexpr bool _Tuple_assignable_v0 = false;\r\n\r\ntemplate <class... _Dests, class... _Srcs>\r\nconstexpr bool _Tuple_assignable_v0<true, tuple<_Dests...>, _Srcs...> =\r\n    conjunction_v<is_assignable<_Dests&, _Srcs>...>; // note _Dests& instead of _Dests\r\n\r\n#if _HAS_CXX23\r\ntemplate <class... _Dests, class... _Srcs>\r\nconstexpr bool _Tuple_assignable_v0<true, const tuple<_Dests...>, _Srcs...> =\r\n    conjunction_v<is_assignable<const _Dests&, _Srcs>...>;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Dest, class... _Srcs>\r\nconstexpr bool _Tuple_assignable_v = _Tuple_assignable_v0<tuple_size_v<_Dest> == sizeof...(_Srcs), _Dest, _Srcs...>;\r\n\r\ntemplate <class _Dest, class... _Srcs>\r\nstruct _Tuple_assignable_val : bool_constant<_Tuple_assignable_v<_Dest, _Srcs...>> {};\r\n\r\ntemplate <bool _Same, class _Dest, class... _Srcs>\r\nconstexpr bool _Tuple_nothrow_assignable_v0 = false;\r\n\r\ntemplate <class... _Dests, class... _Srcs>\r\nconstexpr bool _Tuple_nothrow_assignable_v0<true, tuple<_Dests...>, _Srcs...> =\r\n    conjunction_v<is_nothrow_assignable<_Dests&, _Srcs>...>; // note _Dests& instead of _Dests\r\n\r\n#if _HAS_CXX23\r\ntemplate <class... _Dests, class... _Srcs>\r\nconstexpr bool _Tuple_nothrow_assignable_v0<true, const tuple<_Dests...>, _Srcs...> =\r\n    conjunction_v<is_nothrow_assignable<const _Dests&, _Srcs>...>;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Dest, class... _Srcs>\r\nconstexpr bool _Tuple_nothrow_assignable_v =\r\n    _Tuple_nothrow_assignable_v0<tuple_size_v<_Dest> == sizeof...(_Srcs), _Dest, _Srcs...>;\r\n\r\n// Constrain tuple's converting constructors\r\ntemplate <class _Myself, class _OtherTuple, class... _Other>\r\nstruct _Tuple_convert_val : true_type {};\r\n\r\ntemplate <class _This, class _OtherTuple, class _Uty>\r\nstruct _Tuple_convert_val<tuple<_This>, _OtherTuple, _Uty>\r\n    : bool_constant<!disjunction_v<is_same<_This, _Uty>, is_constructible<_This, _OtherTuple>,\r\n          is_convertible<_OtherTuple, _This>>> {};\r\n\r\n// Constrain tuple's perfect forwarding constructor (LWG-3121)\r\ntemplate <class _Myself, class _This2, class... _Rest2>\r\nstruct _Tuple_perfect_val : true_type {};\r\n\r\ntemplate <class _Myself, class _This2>\r\nstruct _Tuple_perfect_val<_Myself, _This2> : bool_constant<!is_same_v<_Myself, _Remove_cvref_t<_This2>>> {};\r\n\r\ntemplate <class _Ty0, class _Ty1, class _Uty0, class _Uty1>\r\nstruct _Tuple_perfect_val<tuple<_Ty0, _Ty1>, _Uty0, _Uty1>\r\n    : bool_constant<disjunction_v<negation<is_same<_Remove_cvref_t<_Uty0>, allocator_arg_t>>,\r\n          is_same<_Remove_cvref_t<_Ty0>, allocator_arg_t>>> {};\r\n\r\ntemplate <class _Ty0, class _Ty1, class _Ty2, class _Uty0, class _Uty1, class _Uty2>\r\nstruct _Tuple_perfect_val<tuple<_Ty0, _Ty1, _Ty2>, _Uty0, _Uty1, _Uty2>\r\n    : bool_constant<disjunction_v<negation<is_same<_Remove_cvref_t<_Uty0>, allocator_arg_t>>,\r\n          is_same<_Remove_cvref_t<_Ty0>, allocator_arg_t>>> {};\r\n\r\n// Note: To improve throughput, this file uses extra _STD qualification for names that appear in the\r\n// arguments of enable_if_t. Specifically, we qualify names which appear anywhere in the STL as members of\r\n// some class - including injected-class-names! - that we know are not members of the class being defined.\r\n// This avoids pointless class-member lookup for those names in this context.\r\n\r\ntemplate <class _Ty>\r\nstruct _Tuple_val { // stores each value in a tuple\r\n    // Use of remove_cv_t corresponds to N5008 [allocator.uses.construction]/5.\r\n    using _Dty = remove_cv_t<_Ty>;\r\n\r\n    constexpr _Tuple_val() : _Val() {}\r\n\r\n    template <class _Other>\r\n    constexpr _Tuple_val(_Other&& _Arg) : _Val(_STD forward<_Other>(_Arg)) {}\r\n\r\n    template <class _Alloc, class... _Other, enable_if_t<!uses_allocator_v<_Dty, _Alloc>, int> = 0>\r\n    constexpr _Tuple_val(const _Alloc&, allocator_arg_t, _Other&&... _Arg) : _Val(_STD forward<_Other>(_Arg)...) {}\r\n\r\n    template <class _Alloc, class... _Other,\r\n        enable_if_t<conjunction_v<_STD uses_allocator<_Dty, _Alloc>,\r\n                        _STD is_constructible<_Ty, _STD allocator_arg_t, const _Alloc&, _Other...>>,\r\n            int> = 0>\r\n    constexpr _Tuple_val(const _Alloc& _Al, allocator_arg_t, _Other&&... _Arg)\r\n        : _Val(allocator_arg_t{}, _Al, _STD forward<_Other>(_Arg)...) {}\r\n\r\n    template <class _Alloc, class... _Other,\r\n        enable_if_t<conjunction_v<_STD uses_allocator<_Dty, _Alloc>,\r\n                        _STD negation<_STD is_constructible<_Ty, _STD allocator_arg_t, const _Alloc&, _Other...>>>,\r\n            int> = 0>\r\n    constexpr _Tuple_val(const _Alloc& _Al, allocator_arg_t, _Other&&... _Arg)\r\n        : _Val(_STD forward<_Other>(_Arg)..., _Al) {}\r\n\r\n    _Ty _Val;\r\n};\r\n\r\nstruct _Exact_args_t {\r\n    explicit _Exact_args_t() = default;\r\n}; // tag type to disambiguate construction (from one arg per element)\r\n\r\nstruct _Unpack_tuple_t {\r\n    explicit _Unpack_tuple_t() = default;\r\n}; // tag type to disambiguate construction (from unpacking a tuple/pair)\r\n\r\nstruct _Alloc_exact_args_t {\r\n    explicit _Alloc_exact_args_t() = default;\r\n}; // tag type to disambiguate construction (from an allocator and one arg per element)\r\n\r\nstruct _Alloc_unpack_tuple_t {\r\n    explicit _Alloc_unpack_tuple_t() = default;\r\n}; // tag type to disambiguate construction (from an allocator and unpacking a tuple/pair)\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Tuple, class _Other, class _Indices = make_index_sequence<tuple_size_v<_Tuple>>>\r\nconstexpr bool _Can_construct_values_from_tuple_like_v = false;\r\n\r\ntemplate <class... _Types, class _Other, size_t... _Indices>\r\nconstexpr bool _Can_construct_values_from_tuple_like_v<tuple<_Types...>, _Other, index_sequence<_Indices...>> =\r\n    conjunction_v<is_constructible<_Types, decltype(_STD get<_Indices>(_STD declval<_Other>()))>...>;\r\n\r\n#ifdef __EDG__ // TRANSITION, VSO-1900279\r\ntemplate <class _TupleLike, class _Tuple>\r\nconcept _Can_construct_from_tuple_like = _Different_from<_TupleLike, _Tuple> && _Tuple_like_non_subrange<_TupleLike>\r\n                                      && (tuple_size_v<_Tuple> == tuple_size_v<remove_cvref_t<_TupleLike>>)\r\n                                      && _Can_construct_values_from_tuple_like_v<_Tuple, _TupleLike>\r\n                                      && (tuple_size_v<_Tuple> != 1\r\n                                          || (!is_convertible_v<_TupleLike, tuple_element_t<0, _Tuple>>\r\n                                              && !is_constructible_v<tuple_element_t<0, _Tuple>, _TupleLike>) );\r\n#endif // ^^^ workaround ^^^\r\n\r\ntemplate <class _TTuple, class _UTuple, class _Indices = make_index_sequence<tuple_size_v<_UTuple>>>\r\nstruct _Three_way_comparison_result_with_tuple_like {};\r\n\r\ntemplate <class... _TTypes, class _UTuple, size_t... _Indices>\r\n    requires\r\n#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, VSO-2826400\r\n    (sizeof...(_TTypes) == sizeof...(_Indices)) &&\r\n#endif // ^^^ workaround ^^^\r\n    (requires { typename _Synth_three_way_result<_TTypes, tuple_element_t<_Indices, _UTuple>>; } && ...)\r\nstruct _Three_way_comparison_result_with_tuple_like<tuple<_TTypes...>, _UTuple, index_sequence<_Indices...>> {\r\n    using type = common_comparison_category_t<_Synth_three_way_result<_TTypes, tuple_element_t<_Indices, _UTuple>>...>;\r\n};\r\n\r\ntemplate <class _TTuple, _Tuple_like _UTuple>\r\nusing _Three_way_comparison_result_with_tuple_like_t =\r\n    _Three_way_comparison_result_with_tuple_like<_TTuple, _UTuple>::type;\r\n\r\ntemplate <class _Ty>\r\nconcept _Tuple_like_non_tuple = !_Is_specialization_v<_Ty, tuple> && _Tuple_like<_Ty>;\r\n\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\ntemplate <class _Tuple, class... _Args>\r\nconstexpr bool _Tuple_reference_constructs_from_temporary = false;\r\ntemplate <class... _TupleTypes, class... _Args>\r\nconstexpr bool _Tuple_reference_constructs_from_temporary<tuple<_TupleTypes...>, _Args...> =\r\n    (reference_constructs_from_temporary_v<_TupleTypes, _Args> || ...);\r\n\r\ntemplate <class _Tuple, class _TupleLike, class _IdxSeq = make_index_sequence<tuple_size_v<_Tuple>>>\r\nconstexpr bool _Tuple_reference_constructs_from_temporary_for_tuple_like = false;\r\ntemplate <class _Tuple, _Tuple_like _TupleLike, size_t... _Indices>\r\n    requires (tuple_size_v<_Tuple> == tuple_size_v<remove_reference_t<_TupleLike>>)\r\nconstexpr bool\r\n    _Tuple_reference_constructs_from_temporary_for_tuple_like<_Tuple, _TupleLike, index_sequence<_Indices...>> =\r\n        _Tuple_reference_constructs_from_temporary<_Tuple, decltype(_STD get<_Indices>(_STD declval<_TupleLike>()))...>;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <>\r\nclass tuple<> { // empty tuple\r\npublic:\r\n    constexpr tuple() noexcept = default; /* strengthened */\r\n\r\n    constexpr tuple(const tuple&) noexcept /* strengthened */ {} // TRANSITION, ABI: should be defaulted\r\n\r\n#if _HAS_CXX23\r\n    template <_Different_from<tuple> _Other>\r\n        requires _Tuple_like<_Other> && (tuple_size_v<remove_cvref_t<_Other>> == 0)\r\n    constexpr tuple(_Other&&) noexcept /* strengthened */ {}\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Alloc>\r\n    _CONSTEXPR20 tuple(allocator_arg_t, const _Alloc&) noexcept /* strengthened */ {}\r\n\r\n    template <class _Alloc>\r\n    _CONSTEXPR20 tuple(allocator_arg_t, const _Alloc&, const tuple&) noexcept /* strengthened */ {}\r\n\r\n#if _HAS_CXX23\r\n    template <class _Alloc, _Different_from<tuple> _Other>\r\n        requires _Tuple_like<_Other> && (tuple_size_v<remove_cvref_t<_Other>> == 0)\r\n    constexpr tuple(allocator_arg_t, const _Alloc&, _Other&&) noexcept /* strengthened */ {}\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Tag, enable_if_t<is_same_v<_Tag, _STD _Exact_args_t>, int> = 0>\r\n    constexpr tuple(_Tag) noexcept /* strengthened */ {}\r\n\r\n    template <class _Tag, class _Alloc, enable_if_t<is_same_v<_Tag, _STD _Alloc_exact_args_t>, int> = 0>\r\n    constexpr tuple(_Tag, const _Alloc&) noexcept /* strengthened */ {}\r\n\r\n    constexpr tuple& operator=(const tuple&) = default;\r\n#if _HAS_CXX23\r\n    constexpr const tuple& operator=(const tuple&) const noexcept /* strengthened */ {\r\n        return *this;\r\n    }\r\n\r\n    template <_Different_from<tuple> _Other>\r\n        requires _Tuple_like<_Other> && (tuple_size_v<remove_cvref_t<_Other>> == 0)\r\n    constexpr tuple& operator=(_Other&&) noexcept /* strengthened */ {\r\n        return *this;\r\n    }\r\n\r\n    template <_Different_from<tuple> _Other>\r\n        requires _Tuple_like<_Other> && (tuple_size_v<remove_cvref_t<_Other>> == 0)\r\n    constexpr const tuple& operator=(_Other&&) const noexcept /* strengthened */ {\r\n        return *this;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 void swap(tuple&) noexcept {}\r\n#if _HAS_CXX23\r\n    constexpr void swap(const tuple&) const noexcept {}\r\n#endif // _HAS_CXX23\r\n\r\n    constexpr bool _Equals(const tuple&) const noexcept {\r\n        return true;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD constexpr strong_ordering _Three_way_compare(const tuple&) const noexcept {\r\n        return strong_ordering::equal;\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD constexpr bool _Less(const tuple&) const noexcept {\r\n        return false;\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n#if _HAS_CXX23\r\n    template <_Tuple_like_non_tuple _Other>\r\n    _NODISCARD friend constexpr bool operator==(const tuple&, const _Other&) noexcept /* strengthened */ {\r\n        static_assert(tuple_size_v<_Other> == 0, \"Cannot compare tuples of different sizes (N4950 [tuple.rel]/2).\");\r\n        return true;\r\n    }\r\n\r\n    template <_Tuple_like_non_tuple _Other>\r\n        requires (tuple_size_v<remove_cvref_t<_Other>> == 0)\r\n    _NODISCARD friend constexpr strong_ordering operator<=>(const tuple&, const _Other&) noexcept /* strengthened */ {\r\n        return strong_ordering::equal;\r\n    }\r\n#endif // _HAS_CXX23\r\n};\r\n\r\ntemplate <class _This, class... _Rest>\r\nclass tuple<_This, _Rest...> : private tuple<_Rest...> { // recursive tuple definition\r\npublic:\r\n    using _This_type = _This;\r\n    using _Mybase    = tuple<_Rest...>;\r\n\r\n    template <class _Tag, class _This2, class... _Rest2, enable_if_t<is_same_v<_Tag, _STD _Exact_args_t>, int> = 0>\r\n    constexpr tuple(_Tag, _This2&& _This_arg, _Rest2&&... _Rest_arg)\r\n        : _Mybase(_Exact_args_t{}, _STD forward<_Rest2>(_Rest_arg)...), _Myfirst(_STD forward<_This2>(_This_arg)) {}\r\n\r\n    template <class _Tag, class _Tpl, size_t... _Indices, enable_if_t<is_same_v<_Tag, _STD _Unpack_tuple_t>, int> = 0>\r\n    constexpr tuple(_Tag, _Tpl&& _Right, index_sequence<_Indices...>);\r\n\r\n    template <class _Tag, class _Tpl, enable_if_t<is_same_v<_Tag, _STD _Unpack_tuple_t>, int> = 0>\r\n    constexpr tuple(_Tag, _Tpl&& _Right)\r\n        : tuple(_Unpack_tuple_t{}, _STD forward<_Tpl>(_Right),\r\n              make_index_sequence<tuple_size_v<remove_reference_t<_Tpl>>>{}) {}\r\n\r\n    template <class _Tag, class _Alloc, class _This2, class... _Rest2,\r\n        enable_if_t<is_same_v<_Tag, _STD _Alloc_exact_args_t>, int> = 0>\r\n    constexpr tuple(_Tag, const _Alloc& _Al, _This2&& _This_arg, _Rest2&&... _Rest_arg)\r\n        : _Mybase(_Alloc_exact_args_t{}, _Al, _STD forward<_Rest2>(_Rest_arg)...),\r\n          _Myfirst(_Al, allocator_arg, _STD forward<_This2>(_This_arg)) {}\r\n\r\n    template <class _Tag, class _Alloc, class _Tpl, size_t... _Indices,\r\n        enable_if_t<is_same_v<_Tag, _STD _Alloc_unpack_tuple_t>, int> = 0>\r\n    constexpr tuple(_Tag, const _Alloc& _Al, _Tpl&& _Right, index_sequence<_Indices...>);\r\n\r\n    template <class _Tag, class _Alloc, class _Tpl, enable_if_t<is_same_v<_Tag, _STD _Alloc_unpack_tuple_t>, int> = 0>\r\n    constexpr tuple(_Tag, const _Alloc& _Al, _Tpl&& _Right)\r\n        : tuple(_Alloc_unpack_tuple_t{}, _Al, _STD forward<_Tpl>(_Right),\r\n              make_index_sequence<tuple_size_v<remove_reference_t<_Tpl>>>{}) {}\r\n\r\n    template <class _This2 = _This,\r\n        enable_if_t<conjunction_v<_STD is_default_constructible<_This2>, _STD is_default_constructible<_Rest>...>,\r\n            int>           = 0>\r\n    constexpr explicit(\r\n        !conjunction_v<_Is_implicitly_default_constructible<_This2>, _Is_implicitly_default_constructible<_Rest>...>)\r\n        tuple() noexcept(conjunction_v<is_nothrow_default_constructible<_This2>,\r\n            is_nothrow_default_constructible<_Rest>...>) // strengthened\r\n        : _Mybase(), _Myfirst() {}\r\n\r\n    template <class _This2 = _This, enable_if_t<_Tuple_constructible_v<tuple, const _This2&, const _Rest&...>, int> = 0>\r\n    constexpr explicit(_Tuple_conditional_explicit_v<tuple, const _This2&, const _Rest&...>)\r\n        tuple(const _This& _This_arg, const _Rest&... _Rest_arg)\r\n            noexcept(conjunction_v<is_nothrow_copy_constructible<_This2>,\r\n                is_nothrow_copy_constructible<_Rest>...>) // strengthened\r\n        : tuple(_Exact_args_t{}, _This_arg, _Rest_arg...) {}\r\n\r\n    template <class _This2, class... _Rest2,\r\n        enable_if_t<conjunction_v<_STD _Tuple_perfect_val<tuple, _This2, _Rest2...>,\r\n                        _STD _Tuple_constructible_val<tuple, _This2, _Rest2...>>,\r\n            int> = 0>\r\n    constexpr explicit(_Tuple_conditional_explicit_v<tuple, _This2, _Rest2...>)\r\n        tuple(_This2&& _This_arg, _Rest2&&... _Rest_arg)\r\n            noexcept(_Tuple_nothrow_constructible_v<tuple, _This2, _Rest2...>) // strengthened\r\n        : tuple(_Exact_args_t{}, _STD forward<_This2>(_This_arg), _STD forward<_Rest2>(_Rest_arg)...) {}\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _This2, class... _Rest2,\r\n        enable_if_t<conjunction_v<_STD _Tuple_perfect_val<tuple, _This2, _Rest2...>,\r\n                        _STD _Tuple_constructible_val<tuple, _This2, _Rest2...>>,\r\n            int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, _This2&&, _Rest2&&...>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, _This2, _Rest2...>) tuple(_This2&&, _Rest2&&...) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n    tuple(const tuple&) = default;\r\n    tuple(tuple&&)      = default;\r\n\r\n#if _HAS_CXX23\r\n    template <class... _Other, enable_if_t<conjunction_v<_STD _Tuple_constructible_val<tuple, _Other&...>,\r\n                                               _STD _Tuple_convert_val<tuple, tuple<_Other...>&, _Other...>>,\r\n                                   int> = 0>\r\n    constexpr explicit(_Tuple_conditional_explicit_v<tuple, _Other&...>) tuple(tuple<_Other...>& _Right)\r\n        noexcept(_Tuple_nothrow_constructible_v<tuple, _Other&...>) // strengthened\r\n        : tuple(_Unpack_tuple_t{}, _Right) {}\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class... _Other, enable_if_t<conjunction_v<_STD _Tuple_constructible_val<tuple, _Other&...>,\r\n                                               _STD _Tuple_convert_val<tuple, tuple<_Other...>&, _Other...>>,\r\n                                   int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, _Other&...>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, _Other&...>) tuple(tuple<_Other...>&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n    template <class... _Other, enable_if_t<conjunction_v<_STD _Tuple_constructible_val<tuple, const _Other&...>,\r\n                                               _STD _Tuple_convert_val<tuple, const tuple<_Other...>&, _Other...>>,\r\n                                   int> = 0>\r\n    constexpr explicit(_Tuple_conditional_explicit_v<tuple, const _Other&...>) tuple(const tuple<_Other...>& _Right)\r\n        noexcept(_Tuple_nothrow_constructible_v<tuple, const _Other&...>) // strengthened\r\n        : tuple(_Unpack_tuple_t{}, _Right) {}\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class... _Other, enable_if_t<conjunction_v<_STD _Tuple_constructible_val<tuple, const _Other&...>,\r\n                                               _STD _Tuple_convert_val<tuple, const tuple<_Other...>&, _Other...>>,\r\n                                   int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, const _Other&...>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, const _Other&...>) tuple(const tuple<_Other...>&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n    template <class... _Other, enable_if_t<conjunction_v<_STD _Tuple_constructible_val<tuple, _Other...>,\r\n                                               _STD _Tuple_convert_val<tuple, tuple<_Other...>, _Other...>>,\r\n                                   int> = 0>\r\n    constexpr explicit(_Tuple_conditional_explicit_v<tuple, _Other...>) tuple(tuple<_Other...>&& _Right)\r\n        noexcept(_Tuple_nothrow_constructible_v<tuple, _Other...>) // strengthened\r\n        : tuple(_Unpack_tuple_t{}, _STD move(_Right)) {}\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class... _Other, enable_if_t<conjunction_v<_STD _Tuple_constructible_val<tuple, _Other...>,\r\n                                               _STD _Tuple_convert_val<tuple, tuple<_Other...>, _Other...>>,\r\n                                   int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, _Other&&...>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, _Other...>) tuple(tuple<_Other...>&&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    template <class... _Other, enable_if_t<conjunction_v<_STD _Tuple_constructible_val<tuple, const _Other...>,\r\n                                               _STD _Tuple_convert_val<tuple, const tuple<_Other...>, _Other...>>,\r\n                                   int> = 0>\r\n    constexpr explicit(_Tuple_conditional_explicit_v<tuple, const _Other...>) tuple(const tuple<_Other...>&& _Right)\r\n        noexcept(_Tuple_nothrow_constructible_v<tuple, const _Other...>) // strengthened\r\n        : tuple(_Unpack_tuple_t{}, _STD move(_Right)) {}\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class... _Other, enable_if_t<conjunction_v<_STD _Tuple_constructible_val<tuple, const _Other...>,\r\n                                               _STD _Tuple_convert_val<tuple, const tuple<_Other...>, _Other...>>,\r\n                                   int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, const _Other&&...>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, const _Other...>) tuple(const tuple<_Other...>&&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    template <class _First, class _Second, enable_if_t<_Tuple_constructible_v<tuple, _First&, _Second&>, int> = 0>\r\n    constexpr explicit(_Tuple_conditional_explicit_v<tuple, _First&, _Second&>) tuple(pair<_First, _Second>& _Right)\r\n        noexcept(_Tuple_nothrow_constructible_v<tuple, _First&, _Second&>) // strengthened\r\n        : tuple(_Unpack_tuple_t{}, _Right) {}\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _First, class _Second, enable_if_t<_Tuple_constructible_v<tuple, _First&, _Second&>, int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, _First&, _Second&>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, _First&, _Second&>) tuple(pair<_First, _Second>&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _First, class _Second,\r\n        enable_if_t<_Tuple_constructible_v<tuple, const _First&, const _Second&>, int> = 0>\r\n    constexpr explicit(_Tuple_conditional_explicit_v<tuple, const _First&, const _Second&>)\r\n        tuple(const pair<_First, _Second>& _Right)\r\n            noexcept(_Tuple_nothrow_constructible_v<tuple, const _First&, const _Second&>) // strengthened\r\n        : tuple(_Unpack_tuple_t{}, _Right) {}\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _First, class _Second,\r\n        enable_if_t<_Tuple_constructible_v<tuple, const _First&, const _Second&>, int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, const _First&, const _Second&>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, const _First&, const _Second&>)\r\n        tuple(const pair<_First, _Second>&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _First, class _Second, enable_if_t<_Tuple_constructible_v<tuple, _First, _Second>, int> = 0>\r\n    constexpr explicit(_Tuple_conditional_explicit_v<tuple, _First, _Second>) tuple(pair<_First, _Second>&& _Right)\r\n        noexcept(_Tuple_nothrow_constructible_v<tuple, _First, _Second>) // strengthened\r\n        : tuple(_Unpack_tuple_t{}, _STD move(_Right)) {}\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _First, class _Second, enable_if_t<_Tuple_constructible_v<tuple, _First, _Second>, int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, _First&&, _Second&&>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, _First, _Second>) tuple(pair<_First, _Second>&&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    template <class _First, class _Second,\r\n        enable_if_t<_Tuple_constructible_v<tuple, const _First, const _Second>, int> = 0>\r\n    constexpr explicit(_Tuple_conditional_explicit_v<tuple, const _First, const _Second>)\r\n        tuple(const pair<_First, _Second>&& _Right)\r\n            noexcept(_Tuple_nothrow_constructible_v<tuple, const _First, const _Second>) // strengthened\r\n        : tuple(_Unpack_tuple_t{}, _STD move(_Right)) {}\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _First, class _Second,\r\n        enable_if_t<_Tuple_constructible_v<tuple, const _First, const _Second>, int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, const _First&&, const _Second&&>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, const _First, const _Second>)\r\n        tuple(const pair<_First, _Second>&&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    template <class _Other, class _Indices = index_sequence_for<_Rest...>>\r\n    static constexpr bool _Is_tuple_like_constructor_explicit_v = false;\r\n\r\n    template <_Tuple_like _Other, size_t... _Indices>\r\n    static constexpr bool _Is_tuple_like_constructor_explicit_v<_Other, index_sequence<_Indices...>> =\r\n        negation_v<conjunction<is_convertible<decltype(_STD get<0>(_STD declval<_Other>())), _This>,\r\n            is_convertible<decltype(_STD get<_Indices + 1>(_STD declval<_Other>())), _Rest>...>>;\r\n\r\n#ifdef __EDG__ // TRANSITION, VSO-1900279\r\n    template <class _Other, enable_if_t<_Can_construct_from_tuple_like<_Other, tuple>, int> = 0>\r\n#else // ^^^ workaround / no workaround vvv\r\n    template <_Different_from<tuple> _Other>\r\n        requires _Tuple_like_non_subrange<_Other> && (1 + sizeof...(_Rest) == tuple_size_v<remove_cvref_t<_Other>>)\r\n              && _Can_construct_values_from_tuple_like_v<tuple, _Other>\r\n              && (sizeof...(_Rest) != 0 || (!is_convertible_v<_Other, _This> && !is_constructible_v<_This, _Other>) )\r\n#endif // ^^^ no workaround ^^^\r\n    constexpr explicit(_Is_tuple_like_constructor_explicit_v<_Other>) tuple(_Other&& _Right)\r\n        : tuple(_Unpack_tuple_t{}, _STD forward<_Other>(_Right)) {\r\n    }\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <_Different_from<tuple> _Other>\r\n        requires _Tuple_like_non_subrange<_Other> && (1 + sizeof...(_Rest) == tuple_size_v<remove_cvref_t<_Other>>)\r\n                  && _Can_construct_values_from_tuple_like_v<tuple, _Other>\r\n                  && (sizeof...(_Rest) != 0\r\n                      || (!is_convertible_v<_Other, _This> && !is_constructible_v<_This, _Other>) )\r\n                  && _Tuple_reference_constructs_from_temporary_for_tuple_like<tuple, _Other&&>\r\n    explicit(_Is_tuple_like_constructor_explicit_v<_Other>) tuple(_Other&&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Alloc, class _This2 = _This,\r\n        enable_if_t<conjunction_v<_STD is_default_constructible<_This2>, _STD is_default_constructible<_Rest>...>,\r\n            int> = 0>\r\n    _CONSTEXPR20 explicit(\r\n        !conjunction_v<_Is_implicitly_default_constructible<_This2>, _Is_implicitly_default_constructible<_Rest>...>)\r\n        tuple(allocator_arg_t, const _Alloc& _Al)\r\n        : _Mybase(allocator_arg, _Al), _Myfirst(_Al, allocator_arg) {}\r\n\r\n    template <class _Alloc, class _This2 = _This,\r\n        enable_if_t<_Tuple_constructible_v<tuple, const _This2&, const _Rest&...>, int> = 0>\r\n    _CONSTEXPR20 explicit(_Tuple_conditional_explicit_v<tuple, const _This2&, const _Rest&...>)\r\n        tuple(allocator_arg_t, const _Alloc& _Al, const _This& _This_arg, const _Rest&... _Rest_arg)\r\n        : tuple(_Alloc_exact_args_t{}, _Al, _This_arg, _Rest_arg...) {}\r\n\r\n    template <class _Alloc, class _This2, class... _Rest2,\r\n        enable_if_t<conjunction_v<_STD _Tuple_perfect_val<tuple, _This2, _Rest2...>,\r\n                        _STD _Tuple_constructible_val<tuple, _This2, _Rest2...>>,\r\n            int> = 0>\r\n    _CONSTEXPR20 explicit(_Tuple_conditional_explicit_v<tuple, _This2, _Rest2...>)\r\n        tuple(allocator_arg_t, const _Alloc& _Al, _This2&& _This_arg, _Rest2&&... _Rest_arg)\r\n        : tuple(_Alloc_exact_args_t{}, _Al, _STD forward<_This2>(_This_arg), _STD forward<_Rest2>(_Rest_arg)...) {}\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _Alloc, class _This2, class... _Rest2,\r\n        enable_if_t<conjunction_v<_STD _Tuple_perfect_val<tuple, _This2, _Rest2...>,\r\n                        _STD _Tuple_constructible_val<tuple, _This2, _Rest2...>>,\r\n            int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, _This2&&, _Rest2&&...>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, _This2, _Rest2...>)\r\n        tuple(allocator_arg_t, const _Alloc&, _This2&&, _Rest2&&...) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Alloc, class _This2 = _This,\r\n        enable_if_t<_Tuple_constructible_v<tuple, const _This2&, const _Rest&...>, int> = 0>\r\n    _CONSTEXPR20 tuple(allocator_arg_t, const _Alloc& _Al, const tuple& _Right)\r\n        : tuple(_Alloc_unpack_tuple_t{}, _Al, _Right) {}\r\n\r\n    template <class _Alloc, class _This2 = _This, enable_if_t<_Tuple_constructible_v<tuple, _This2, _Rest...>, int> = 0>\r\n    _CONSTEXPR20 tuple(allocator_arg_t, const _Alloc& _Al, tuple&& _Right)\r\n        : tuple(_Alloc_unpack_tuple_t{}, _Al, _STD move(_Right)) {}\r\n\r\n#if _HAS_CXX23\r\n    template <class _Alloc, class... _Other,\r\n        enable_if_t<conjunction_v<_STD _Tuple_constructible_val<tuple, _Other&...>,\r\n                        _STD _Tuple_convert_val<tuple, tuple<_Other...>&, _Other...>>,\r\n            int> = 0>\r\n    constexpr explicit(_Tuple_conditional_explicit_v<tuple, _Other&...>)\r\n        tuple(allocator_arg_t, const _Alloc& _Al, tuple<_Other...>& _Right)\r\n        : tuple(_Alloc_unpack_tuple_t{}, _Al, _Right) {}\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _Alloc, class... _Other,\r\n        enable_if_t<conjunction_v<_STD _Tuple_constructible_val<tuple, _Other&...>,\r\n                        _STD _Tuple_convert_val<tuple, tuple<_Other...>&, _Other...>>,\r\n            int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, _Other&...>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, _Other&...>)\r\n        tuple(allocator_arg_t, const _Alloc&, tuple<_Other...>&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Alloc, class... _Other,\r\n        enable_if_t<conjunction_v<_STD _Tuple_constructible_val<tuple, const _Other&...>,\r\n                        _STD _Tuple_convert_val<tuple, const tuple<_Other...>&, _Other...>>,\r\n            int> = 0>\r\n    _CONSTEXPR20 explicit(_Tuple_conditional_explicit_v<tuple, const _Other&...>)\r\n        tuple(allocator_arg_t, const _Alloc& _Al, const tuple<_Other...>& _Right)\r\n        : tuple(_Alloc_unpack_tuple_t{}, _Al, _Right) {}\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _Alloc, class... _Other,\r\n        enable_if_t<conjunction_v<_STD _Tuple_constructible_val<tuple, const _Other&...>,\r\n                        _STD _Tuple_convert_val<tuple, const tuple<_Other...>&, _Other...>>,\r\n            int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, const _Other&...>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, const _Other&...>)\r\n        tuple(allocator_arg_t, const _Alloc&, const tuple<_Other...>&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Alloc, class... _Other,\r\n        enable_if_t<conjunction_v<_STD _Tuple_constructible_val<tuple, _Other...>,\r\n                        _STD _Tuple_convert_val<tuple, tuple<_Other...>, _Other...>>,\r\n            int> = 0>\r\n    _CONSTEXPR20 explicit(_Tuple_conditional_explicit_v<tuple, _Other...>)\r\n        tuple(allocator_arg_t, const _Alloc& _Al, tuple<_Other...>&& _Right)\r\n        : tuple(_Alloc_unpack_tuple_t{}, _Al, _STD move(_Right)) {}\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _Alloc, class... _Other,\r\n        enable_if_t<conjunction_v<_STD _Tuple_constructible_val<tuple, _Other...>,\r\n                        _STD _Tuple_convert_val<tuple, tuple<_Other...>, _Other...>>,\r\n            int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, _Other&&...>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, _Other...>)\r\n        tuple(allocator_arg_t, const _Alloc&, tuple<_Other...>&&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    template <class _Alloc, class... _Other,\r\n        enable_if_t<conjunction_v<_STD _Tuple_constructible_val<tuple, const _Other...>,\r\n                        _STD _Tuple_convert_val<tuple, const tuple<_Other...>, _Other...>>,\r\n            int> = 0>\r\n    constexpr explicit(_Tuple_conditional_explicit_v<tuple, const _Other...>)\r\n        tuple(allocator_arg_t, const _Alloc& _Al, const tuple<_Other...>&& _Right)\r\n        : tuple(_Alloc_unpack_tuple_t{}, _Al, _STD move(_Right)) {}\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _Alloc, class... _Other,\r\n        enable_if_t<conjunction_v<_STD _Tuple_constructible_val<tuple, const _Other...>,\r\n                        _STD _Tuple_convert_val<tuple, const tuple<_Other...>, _Other...>>,\r\n            int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, const _Other&&...>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, const _Other...>)\r\n        tuple(allocator_arg_t, const _Alloc&, const tuple<_Other...>&&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    template <class _Alloc, class _First, class _Second,\r\n        enable_if_t<_Tuple_constructible_v<tuple, _First&, _Second&>, int> = 0>\r\n    constexpr explicit(_Tuple_conditional_explicit_v<tuple, _First&, _Second&>)\r\n        tuple(allocator_arg_t, const _Alloc& _Al, pair<_First, _Second>& _Right)\r\n        : tuple(_Alloc_unpack_tuple_t{}, _Al, _Right) {}\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _Alloc, class _First, class _Second,\r\n        enable_if_t<_Tuple_constructible_v<tuple, _First&, _Second&>, int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, _First&, _Second&>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, _First&, _Second&>)\r\n        tuple(allocator_arg_t, const _Alloc&, pair<_First, _Second>&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Alloc, class _First, class _Second,\r\n        enable_if_t<_Tuple_constructible_v<tuple, const _First&, const _Second&>, int> = 0>\r\n    _CONSTEXPR20 explicit(_Tuple_conditional_explicit_v<tuple, const _First&, const _Second&>)\r\n        tuple(allocator_arg_t, const _Alloc& _Al, const pair<_First, _Second>& _Right)\r\n        : tuple(_Alloc_unpack_tuple_t{}, _Al, _Right) {}\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _Alloc, class _First, class _Second,\r\n        enable_if_t<_Tuple_constructible_v<tuple, const _First&, const _Second&>, int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, const _First&, const _Second&>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, const _First&, const _Second&>)\r\n        tuple(allocator_arg_t, const _Alloc&, const pair<_First, _Second>&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Alloc, class _First, class _Second,\r\n        enable_if_t<_Tuple_constructible_v<tuple, _First, _Second>, int> = 0>\r\n    _CONSTEXPR20 explicit(_Tuple_conditional_explicit_v<tuple, _First, _Second>)\r\n        tuple(allocator_arg_t, const _Alloc& _Al, pair<_First, _Second>&& _Right)\r\n        : tuple(_Alloc_unpack_tuple_t{}, _Al, _STD move(_Right)) {}\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _Alloc, class _First, class _Second,\r\n        enable_if_t<_Tuple_constructible_v<tuple, _First, _Second>, int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, _First&&, _Second&&>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, _First, _Second>)\r\n        tuple(allocator_arg_t, const _Alloc&, pair<_First, _Second>&&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    template <class _Alloc, class _First, class _Second,\r\n        enable_if_t<_Tuple_constructible_v<tuple, const _First, const _Second>, int> = 0>\r\n    constexpr explicit(_Tuple_conditional_explicit_v<tuple, const _First, const _Second>)\r\n        tuple(allocator_arg_t, const _Alloc& _Al, const pair<_First, _Second>&& _Right)\r\n        : tuple(_Alloc_unpack_tuple_t{}, _Al, _STD move(_Right)) {}\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _Alloc, class _First, class _Second,\r\n        enable_if_t<_Tuple_constructible_v<tuple, const _First, const _Second>, int> = 0>\r\n        requires _Tuple_reference_constructs_from_temporary<tuple, const _First&&, const _Second&&>\r\n    explicit(_Tuple_conditional_explicit_v<tuple, const _First, const _Second>)\r\n        tuple(allocator_arg_t, const _Alloc&, const pair<_First, _Second>&&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n\r\n#ifdef __EDG__ // TRANSITION, VSO-1900279\r\n    template <class _Alloc, class _Other, enable_if_t<_Can_construct_from_tuple_like<_Other, tuple>, int> = 0>\r\n#else // ^^^ workaround / no workaround vvv\r\n    template <class _Alloc, _Different_from<tuple> _Other>\r\n        requires _Tuple_like_non_subrange<_Other> && (1 + sizeof...(_Rest) == tuple_size_v<remove_cvref_t<_Other>>)\r\n              && _Can_construct_values_from_tuple_like_v<tuple, _Other>\r\n              && (sizeof...(_Rest) != 0 || (!is_convertible_v<_Other, _This> && !is_constructible_v<_This, _Other>) )\r\n#endif // ^^^ no workaround ^^^\r\n    constexpr explicit(_Is_tuple_like_constructor_explicit_v<_Other>)\r\n        tuple(allocator_arg_t, const _Alloc& _Al, _Other&& _Right)\r\n        : tuple(_Alloc_unpack_tuple_t{}, _Al, _STD forward<_Other>(_Right)) {\r\n    }\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _Alloc, _Different_from<tuple> _Other>\r\n        requires _Tuple_like_non_subrange<_Other> && (1 + sizeof...(_Rest) == tuple_size_v<remove_cvref_t<_Other>>)\r\n                  && _Can_construct_values_from_tuple_like_v<tuple, _Other>\r\n                  && (sizeof...(_Rest) != 0\r\n                      || (!is_convertible_v<_Other, _This> && !is_constructible_v<_This, _Other>) )\r\n                  && _Tuple_reference_constructs_from_temporary_for_tuple_like<tuple, _Other&&>\r\n    explicit(_Is_tuple_like_constructor_explicit_v<_Other>) tuple(allocator_arg_t, const _Alloc&, _Other&&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n    tuple& operator=(const volatile tuple&) = delete;\r\n\r\n    template <class _Myself = tuple, class _This2 = _This,\r\n        enable_if_t<conjunction_v<_STD _Is_copy_assignable_no_precondition_check<_This2>,\r\n                        _STD _Is_copy_assignable_no_precondition_check<_Rest>...>,\r\n            int> = 0>\r\n    _CONSTEXPR20 tuple& operator=(_Identity_t<const _Myself&> _Right) noexcept(\r\n        conjunction_v<is_nothrow_copy_assignable<_This2>, is_nothrow_copy_assignable<_Rest>...>) /* strengthened */ {\r\n        _Myfirst._Val = _Right._Myfirst._Val;\r\n        _Get_rest()   = _Right._Get_rest();\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _Myself = tuple>\r\n        requires conjunction_v<_STD _Is_copy_assignable_no_precondition_check<const _This>,\r\n            _STD _Is_copy_assignable_no_precondition_check<const _Rest>...>\r\n    constexpr const tuple& operator=(_Identity_t<const _Myself&> _Right) const\r\n        noexcept(conjunction_v<is_nothrow_copy_assignable<const _This>,\r\n            is_nothrow_copy_assignable<const _Rest>...>) /* strengthened */ {\r\n        _Myfirst._Val = _Right._Myfirst._Val;\r\n        _Get_rest()   = _Right._Get_rest();\r\n        return *this;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Myself = tuple, class _This2 = _This,\r\n        enable_if_t<conjunction_v<_STD _Is_move_assignable_no_precondition_check<_This2>,\r\n                        _STD _Is_move_assignable_no_precondition_check<_Rest>...>,\r\n            int> = 0>\r\n    _CONSTEXPR20 tuple& operator=(_Identity_t<_Myself&&> _Right)\r\n        noexcept(conjunction_v<is_nothrow_move_assignable<_This2>, is_nothrow_move_assignable<_Rest>...>) {\r\n        _Myfirst._Val = _STD forward<_This>(_Right._Myfirst._Val);\r\n        _Get_rest()   = _STD forward<_Mybase>(_Right._Get_rest());\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _Myself = tuple>\r\n        requires conjunction_v<_STD _Is_assignable_no_precondition_check<const _This&, _This>,\r\n            _STD _Is_assignable_no_precondition_check<const _Rest&, _Rest>...>\r\n    constexpr const tuple& operator=(_Identity_t<_Myself&&> _Right) const\r\n        noexcept(conjunction_v<is_nothrow_assignable<const _This&, _This>,\r\n            is_nothrow_assignable<const _Rest&, _Rest>...>) /* strengthened */ {\r\n        _Myfirst._Val = _STD forward<_This>(_Right._Myfirst._Val);\r\n        _Get_rest()   = _STD forward<_Mybase>(_Right._Get_rest());\r\n        return *this;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    template <class... _Other, enable_if_t<conjunction_v<_STD negation<_STD is_same<tuple, _STD tuple<_Other...>>>,\r\n                                               _STD _Tuple_assignable_val<tuple, const _Other&...>>,\r\n                                   int> = 0>\r\n    _CONSTEXPR20 tuple& operator=(const tuple<_Other...>& _Right)\r\n        noexcept(_Tuple_nothrow_assignable_v<tuple, const _Other&...>) /* strengthened */ {\r\n        _Myfirst._Val = _Right._Myfirst._Val;\r\n        _Get_rest()   = _Right._Get_rest();\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class... _Other>\r\n        requires (!is_same_v<tuple, _STD tuple<_Other...>>) && _Tuple_assignable_v<const tuple, const _Other&...>\r\n    constexpr const tuple& operator=(const tuple<_Other...>& _Right) const\r\n        noexcept(_Tuple_nothrow_assignable_v<const tuple, const _Other&...>) /* strengthened */ {\r\n        _Myfirst._Val = _Right._Myfirst._Val;\r\n        _Get_rest()   = _Right._Get_rest();\r\n        return *this;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    template <class... _Other, enable_if_t<conjunction_v<_STD negation<_STD is_same<tuple, _STD tuple<_Other...>>>,\r\n                                               _STD _Tuple_assignable_val<tuple, _Other...>>,\r\n                                   int> = 0>\r\n    _CONSTEXPR20 tuple& operator=(tuple<_Other...>&& _Right)\r\n        noexcept(_Tuple_nothrow_assignable_v<tuple, _Other...>) /* strengthened */ {\r\n        _Myfirst._Val = _STD forward<typename tuple<_Other...>::_This_type>(_Right._Myfirst._Val);\r\n        _Get_rest()   = _STD forward<typename tuple<_Other...>::_Mybase>(_Right._Get_rest());\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class... _Other>\r\n        requires (!is_same_v<tuple, _STD tuple<_Other...>>) && _Tuple_assignable_v<const tuple, _Other...>\r\n    constexpr const tuple& operator=(tuple<_Other...>&& _Right) const\r\n        noexcept(_Tuple_nothrow_assignable_v<const tuple, _Other...>) /* strengthened */ {\r\n        _Myfirst._Val = _STD forward<typename tuple<_Other...>::_This_type>(_Right._Myfirst._Val);\r\n        _Get_rest()   = _STD forward<typename tuple<_Other...>::_Mybase>(_Right._Get_rest());\r\n        return *this;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _First, class _Second,\r\n        enable_if_t<_Tuple_assignable_v<tuple, const _First&, const _Second&>, int> = 0>\r\n    _CONSTEXPR20 tuple& operator=(const pair<_First, _Second>& _Right)\r\n        noexcept(_Tuple_nothrow_assignable_v<tuple, const _First&, const _Second&>) /* strengthened */ {\r\n        _Myfirst._Val             = _Right.first;\r\n        _Get_rest()._Myfirst._Val = _Right.second;\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _First, class _Second>\r\n        requires _Tuple_assignable_v<const tuple, const _First&, const _Second&>\r\n    constexpr const tuple& operator=(const pair<_First, _Second>& _Right) const\r\n        noexcept(_Tuple_nothrow_assignable_v<const tuple, const _First&, const _Second&>) /* strengthened */ {\r\n        _Myfirst._Val             = _Right.first;\r\n        _Get_rest()._Myfirst._Val = _Right.second;\r\n        return *this;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _First, class _Second, enable_if_t<_Tuple_assignable_v<tuple, _First, _Second>, int> = 0>\r\n    _CONSTEXPR20 tuple& operator=(pair<_First, _Second>&& _Right)\r\n        noexcept(_Tuple_nothrow_assignable_v<tuple, _First, _Second>) /* strengthened */ {\r\n        _Myfirst._Val             = _STD forward<_First>(_Right.first);\r\n        _Get_rest()._Myfirst._Val = _STD forward<_Second>(_Right.second);\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _First, class _Second>\r\n        requires _Tuple_assignable_v<const tuple, _First, _Second>\r\n    constexpr const tuple& operator=(pair<_First, _Second>&& _Right) const\r\n        noexcept(_Tuple_nothrow_assignable_v<const tuple, _First, _Second>) /* strengthened */ {\r\n        _Myfirst._Val             = _STD forward<_First>(_Right.first);\r\n        _Get_rest()._Myfirst._Val = _STD forward<_Second>(_Right.second);\r\n        return *this;\r\n    }\r\n\r\n    template <bool _Const_assignment, class _Other, class _Indices = index_sequence_for<_Rest...>>\r\n    static constexpr bool _Can_assign_values_from_tuple_like_v = false;\r\n\r\n    template <_Tuple_like _Other, size_t... _Indices>\r\n    static constexpr bool _Can_assign_values_from_tuple_like_v<false, _Other, index_sequence<_Indices...>> =\r\n        conjunction_v<is_assignable<_This&, decltype(_STD get<0>(_STD declval<_Other>()))>,\r\n            is_assignable<_Rest&, decltype(_STD get<_Indices + 1>(_STD declval<_Other>()))>...>;\r\n\r\n    template <_Tuple_like _Other, size_t... _Indices>\r\n    static constexpr bool _Can_assign_values_from_tuple_like_v<true, _Other, index_sequence<_Indices...>> =\r\n        conjunction_v<is_assignable<const _This&, decltype(_STD get<0>(_STD declval<_Other>()))>,\r\n            is_assignable<const _Rest&, decltype(_STD get<_Indices + 1>(_STD declval<_Other>()))>...>;\r\n\r\n    template <_Tuple_like _Other, size_t... _Indices>\r\n    constexpr void _Assign_tuple_like(_Other&& _Right, index_sequence<_Indices...>) {\r\n        ((void) (_STD get<_Indices>(*this) = _STD get<_Indices>(_STD forward<_Other>(_Right))), ...);\r\n    }\r\n\r\n    template <_Tuple_like _Other, size_t... _Indices>\r\n    constexpr void _Assign_tuple_like(_Other&& _Right, index_sequence<_Indices...>) const {\r\n        ((void) (_STD get<_Indices>(*this) = _STD get<_Indices>(_STD forward<_Other>(_Right))), ...);\r\n    }\r\n\r\n    template <_Different_from<tuple> _Other>\r\n        requires _Tuple_like_non_subrange<_Other> && (1 + sizeof...(_Rest) == tuple_size_v<remove_cvref_t<_Other>>)\r\n              && _Can_assign_values_from_tuple_like_v<false, _Other>\r\n    constexpr tuple& operator=(_Other&& _Right) {\r\n        _Assign_tuple_like(_STD forward<_Other>(_Right), make_index_sequence<1 + sizeof...(_Rest)>{});\r\n        return *this;\r\n    }\r\n\r\n    template <_Different_from<tuple> _Other>\r\n        requires _Tuple_like_non_subrange<_Other> && (1 + sizeof...(_Rest) == tuple_size_v<remove_cvref_t<_Other>>)\r\n              && _Can_assign_values_from_tuple_like_v<true, _Other>\r\n    constexpr const tuple& operator=(_Other&& _Right) const {\r\n        _Assign_tuple_like(_STD forward<_Other>(_Right), make_index_sequence<1 + sizeof...(_Rest)>{});\r\n        return *this;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 void swap(tuple& _Right)\r\n        noexcept(conjunction_v<_Is_nothrow_swappable<_This>, _Is_nothrow_swappable<_Rest>...>) {\r\n        using _STD swap;\r\n        swap(_Myfirst._Val, _Right._Myfirst._Val); // intentional ADL\r\n        _Mybase::swap(_Right._Get_rest());\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <int = 0> // see GH-3013\r\n    constexpr void swap(const tuple& _Right) const\r\n        noexcept(conjunction_v<is_nothrow_swappable<const _This>, is_nothrow_swappable<const _Rest>...>) {\r\n        using _STD swap;\r\n        swap(_Myfirst._Val, _Right._Myfirst._Val); // intentional ADL\r\n        _Mybase::swap(_Right._Get_rest());\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    constexpr _Mybase& _Get_rest() noexcept { // get reference to rest of elements\r\n        return *this;\r\n    }\r\n\r\n    constexpr const _Mybase& _Get_rest() const noexcept { // get const reference to rest of elements\r\n        return *this;\r\n    }\r\n\r\n    template <class... _Other>\r\n    constexpr bool _Equals(const tuple<_Other...>& _Right) const {\r\n        return _Myfirst._Val == _Right._Myfirst._Val && _Mybase::_Equals(_Right._Get_rest());\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    template <class _First, class... _Other>\r\n    _NODISCARD constexpr common_comparison_category_t<_Synth_three_way_result<_This, _First>,\r\n        _Synth_three_way_result<_Rest, _Other>...>\r\n        _Three_way_compare(const tuple<_First, _Other...>& _Right) const {\r\n        if (auto _Result = _Synth_three_way{}(_Myfirst._Val, _Right._Myfirst._Val); _Result != 0) {\r\n            return _Result;\r\n        }\r\n        return _Mybase::_Three_way_compare(_Right._Get_rest());\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _Other, class _Indices = make_index_sequence<1 + sizeof...(_Rest)>>\r\n    static constexpr bool _Can_equal_compare_with_tuple_like_v = false;\r\n\r\n    template <class _Other, size_t... _Indices>\r\n    static constexpr bool _Can_equal_compare_with_tuple_like_v<_Other, index_sequence<_Indices...>> =\r\n        (requires(const tuple& _Left, const _Other& _Right) {\r\n            { _STD get<_Indices>(_Left) == _STD get<_Indices>(_Right) }->_Boolean_testable;\r\n        } && ...);\r\n\r\n    template <class _Other, size_t... _Indices>\r\n    _NODISCARD constexpr bool _Equals_to_tuple_like(const _Other& _Right, index_sequence<_Indices...>) const {\r\n        return ((_STD get<_Indices>(*this) == _STD get<_Indices>(_Right)) && ...);\r\n    }\r\n\r\n    template <_Tuple_like_non_tuple _Other>\r\n    _NODISCARD friend constexpr bool operator==(const tuple& _Left, const _Other& _Right) {\r\n        static_assert(1 + sizeof...(_Rest) == tuple_size_v<_Other>,\r\n            \"Cannot compare tuples of different sizes (N4950 [tuple.rel]/2).\");\r\n        static_assert(_Can_equal_compare_with_tuple_like_v<_Other>,\r\n            \"For all i, where 0 <= i < sizeof...(TTypes), get<i>(t) == get<i>(u) must be a valid expression (N4950 \"\r\n            \"[tuple.rel]/2).\");\r\n        return _Left._Equals_to_tuple_like(_Right, make_index_sequence<1 + sizeof...(_Rest)>{});\r\n    }\r\n\r\n    template <class _Other, size_t... _Indices>\r\n    _NODISCARD constexpr auto _Three_way_compare_with_tuple_like(\r\n        const _Other& _Right, index_sequence<_Indices...>) const {\r\n        _Three_way_comparison_result_with_tuple_like_t<tuple, _Other> _Result = strong_ordering::equal;\r\n        (void) (((_Result = _Synth_three_way{}(_STD get<_Indices>(*this), _STD get<_Indices>(_Right))) == 0) && ...);\r\n        return _Result;\r\n    }\r\n\r\n    template <_Tuple_like_non_tuple _Other>\r\n    _NODISCARD friend constexpr auto operator<=>(const tuple& _Left, const _Other& _Right) //\r\n        -> _Three_way_comparison_result_with_tuple_like_t<tuple, _Other> {\r\n        return _Left._Three_way_compare_with_tuple_like(_Right, make_index_sequence<1 + sizeof...(_Rest)>{});\r\n    }\r\n#endif // _HAS_CXX23\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    template <class... _Other>\r\n    _NODISCARD constexpr bool _Less(const tuple<_Other...>& _Right) const {\r\n        return _Myfirst._Val < _Right._Myfirst._Val\r\n            || (!(_Right._Myfirst._Val < _Myfirst._Val) && _Mybase::_Less(_Right._Get_rest()));\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    template <size_t _Index, class... _Types>\r\n    friend constexpr tuple_element_t<_Index, tuple<_Types...>>& get(tuple<_Types...>& _Tuple) noexcept;\r\n\r\n    template <size_t _Index, class... _Types>\r\n    friend constexpr const tuple_element_t<_Index, tuple<_Types...>>& get(const tuple<_Types...>& _Tuple) noexcept;\r\n\r\n    template <size_t _Index, class... _Types>\r\n    friend constexpr tuple_element_t<_Index, tuple<_Types...>>&& get(tuple<_Types...>&& _Tuple) noexcept;\r\n\r\n    template <size_t _Index, class... _Types>\r\n    friend constexpr const tuple_element_t<_Index, tuple<_Types...>>&& get(const tuple<_Types...>&& _Tuple) noexcept;\r\n\r\n    template <size_t _Index, class... _Types>\r\n    friend constexpr auto&& _Tuple_get(tuple<_Types...>&& _Tuple) noexcept;\r\n\r\n    template <class _Ty, class... _Types>\r\n    friend constexpr _Ty& get(tuple<_Types...>& _Tuple) noexcept;\r\n\r\n    template <class _Ty, class... _Types>\r\n    friend constexpr const _Ty& get(const tuple<_Types...>& _Tuple) noexcept;\r\n\r\n    template <class _Ty, class... _Types>\r\n    friend constexpr _Ty&& get(tuple<_Types...>&& _Tuple) noexcept;\r\n\r\n    template <class _Ty, class... _Types>\r\n    friend constexpr const _Ty&& get(const tuple<_Types...>&& _Tuple) noexcept;\r\n\r\n    _Tuple_val<_This> _Myfirst; // the stored element\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class... _Types>\r\ntuple(_Types...) -> tuple<_Types...>;\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\ntuple(pair<_Ty1, _Ty2>) -> tuple<_Ty1, _Ty2>;\r\n\r\ntemplate <class _Alloc, class... _Types>\r\ntuple(allocator_arg_t, _Alloc, _Types...) -> tuple<_Types...>;\r\n\r\ntemplate <class _Alloc, class _Ty1, class _Ty2>\r\ntuple(allocator_arg_t, _Alloc, pair<_Ty1, _Ty2>) -> tuple<_Ty1, _Ty2>;\r\n\r\ntemplate <class _Alloc, class... _Types>\r\ntuple(allocator_arg_t, _Alloc, tuple<_Types...>) -> tuple<_Types...>;\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class... _Types1, class... _Types2>\r\n_NODISCARD constexpr bool operator==(const tuple<_Types1...>& _Left, const tuple<_Types2...>& _Right) {\r\n    static_assert(\r\n        sizeof...(_Types1) == sizeof...(_Types2), \"Cannot compare tuples of different sizes (N4950 [tuple.rel]/2).\");\r\n    return _Left._Equals(_Right);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class... _Types1, class... _Types2>\r\n_NODISCARD constexpr common_comparison_category_t<_Synth_three_way_result<_Types1, _Types2>...> operator<=>(\r\n    const tuple<_Types1...>& _Left, const tuple<_Types2...>& _Right) {\r\n    return _Left._Three_way_compare(_Right);\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class... _Types1, class... _Types2>\r\n_NODISCARD constexpr bool operator!=(const tuple<_Types1...>& _Left, const tuple<_Types2...>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class... _Types1, class... _Types2>\r\n_NODISCARD constexpr bool operator<(const tuple<_Types1...>& _Left, const tuple<_Types2...>& _Right) {\r\n    static_assert(sizeof...(_Types1) == sizeof...(_Types2), \"cannot compare tuples of different sizes\");\r\n    return _Left._Less(_Right);\r\n}\r\n\r\ntemplate <class... _Types1, class... _Types2>\r\n_NODISCARD constexpr bool operator>=(const tuple<_Types1...>& _Left, const tuple<_Types2...>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n\r\ntemplate <class... _Types1, class... _Types2>\r\n_NODISCARD constexpr bool operator>(const tuple<_Types1...>& _Left, const tuple<_Types2...>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class... _Types1, class... _Types2>\r\n_NODISCARD constexpr bool operator<=(const tuple<_Types1...>& _Left, const tuple<_Types2...>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class... _Types, enable_if_t<conjunction_v<_Is_swappable<_Types>...>, int> = 0>\r\n_CONSTEXPR20 void swap(tuple<_Types...>& _Left, tuple<_Types...>& _Right) noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n#if _HAS_CXX23\r\n_EXPORT_STD template <class... _Types>\r\n    requires conjunction_v<is_swappable<const _Types>...>\r\nconstexpr void swap(const tuple<_Types...>& _Left, const tuple<_Types...>& _Right)\r\n    noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD template <size_t _Index, class... _Types>\r\n_NODISCARD constexpr tuple_element_t<_Index, tuple<_Types...>>& get(tuple<_Types...>& _Tuple) noexcept {\r\n    using _Ttype = typename tuple_element<_Index, tuple<_Types...>>::_Ttype;\r\n    return static_cast<_Ttype&>(_Tuple)._Myfirst._Val;\r\n}\r\n\r\n_EXPORT_STD template <size_t _Index, class... _Types>\r\n_NODISCARD constexpr const tuple_element_t<_Index, tuple<_Types...>>& get(const tuple<_Types...>& _Tuple) noexcept {\r\n    using _Ttype = typename tuple_element<_Index, tuple<_Types...>>::_Ttype;\r\n    return static_cast<const _Ttype&>(_Tuple)._Myfirst._Val;\r\n}\r\n\r\n_EXPORT_STD template <size_t _Index, class... _Types>\r\n_NODISCARD constexpr tuple_element_t<_Index, tuple<_Types...>>&& get(tuple<_Types...>&& _Tuple) noexcept {\r\n    using _Ty    = tuple_element_t<_Index, tuple<_Types...>>;\r\n    using _Ttype = typename tuple_element<_Index, tuple<_Types...>>::_Ttype;\r\n    return static_cast<_Ty&&>(static_cast<_Ttype&>(_Tuple)._Myfirst._Val);\r\n}\r\n\r\n_EXPORT_STD template <size_t _Index, class... _Types>\r\n_NODISCARD constexpr const tuple_element_t<_Index, tuple<_Types...>>&& get(const tuple<_Types...>&& _Tuple) noexcept {\r\n    using _Ty    = tuple_element_t<_Index, tuple<_Types...>>;\r\n    using _Ttype = typename tuple_element<_Index, tuple<_Types...>>::_Ttype;\r\n    return static_cast<const _Ty&&>(static_cast<const _Ttype&>(_Tuple)._Myfirst._Val);\r\n}\r\n\r\ntemplate <size_t _Index, class... _Types>\r\n_NODISCARD constexpr auto&& _Tuple_get(tuple<_Types...>&& _Tuple) noexcept {\r\n    // used by pair's piecewise constructor\r\n    using _Ty    = tuple_element_t<_Index, tuple<_Types...>>;\r\n    using _Ttype = typename tuple_element<_Index, tuple<_Types...>>::_Ttype;\r\n    return static_cast<_Ty&&>(static_cast<_Ttype&>(_Tuple)._Myfirst._Val);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class... _Types>\r\n_NODISCARD constexpr _Ty& get(tuple<_Types...>& _Tuple) noexcept {\r\n    constexpr size_t _Idx = _Meta_find_unique_index<tuple<_Types...>, _Ty>::value;\r\n    if constexpr (_Idx < sizeof...(_Types)) {\r\n        using _Ttype = typename tuple_element<_Idx, tuple<_Types...>>::_Ttype;\r\n        return static_cast<_Ttype&>(_Tuple)._Myfirst._Val;\r\n    } else {\r\n        static_assert(false, \"get<T>(tuple<Types...>&) \"\r\n                             \"requires T to occur exactly once in Types. (N4971 [tuple.elem]/5)\");\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class... _Types>\r\n_NODISCARD constexpr const _Ty& get(const tuple<_Types...>& _Tuple) noexcept {\r\n    constexpr size_t _Idx = _Meta_find_unique_index<tuple<_Types...>, _Ty>::value;\r\n    if constexpr (_Idx < sizeof...(_Types)) {\r\n        using _Ttype = typename tuple_element<_Idx, tuple<_Types...>>::_Ttype;\r\n        return static_cast<const _Ttype&>(_Tuple)._Myfirst._Val;\r\n    } else {\r\n        static_assert(false, \"get<T>(const tuple<Types...>&) \"\r\n                             \"requires T to occur exactly once in Types. (N4971 [tuple.elem]/5)\");\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class... _Types>\r\n_NODISCARD constexpr _Ty&& get(tuple<_Types...>&& _Tuple) noexcept {\r\n    constexpr size_t _Idx = _Meta_find_unique_index<tuple<_Types...>, _Ty>::value;\r\n    if constexpr (_Idx < sizeof...(_Types)) {\r\n        using _Ttype = typename tuple_element<_Idx, tuple<_Types...>>::_Ttype;\r\n        return static_cast<_Ty&&>(static_cast<_Ttype&>(_Tuple)._Myfirst._Val);\r\n    } else {\r\n        static_assert(false, \"get<T>(tuple<Types...>&&) \"\r\n                             \"requires T to occur exactly once in Types. (N4971 [tuple.elem]/5)\");\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class... _Types>\r\n_NODISCARD constexpr const _Ty&& get(const tuple<_Types...>&& _Tuple) noexcept {\r\n    constexpr size_t _Idx = _Meta_find_unique_index<tuple<_Types...>, _Ty>::value;\r\n    if constexpr (_Idx < sizeof...(_Types)) {\r\n        using _Ttype = typename tuple_element<_Idx, tuple<_Types...>>::_Ttype;\r\n        return static_cast<const _Ty&&>(static_cast<const _Ttype&>(_Tuple)._Myfirst._Val);\r\n    } else {\r\n        static_assert(false, \"get<T>(const tuple<Types...>&&) \"\r\n                             \"requires T to occur exactly once in Types. (N4971 [tuple.elem]/5)\");\r\n    }\r\n}\r\n\r\ntemplate <class _This, class... _Rest>\r\ntemplate <class _Tag, class _Tpl, size_t... _Indices, enable_if_t<is_same_v<_Tag, _STD _Unpack_tuple_t>, int> /* = 0 */>\r\nconstexpr tuple<_This, _Rest...>::tuple(_Tag, _Tpl&& _Right, index_sequence<_Indices...>)\r\n    : tuple(_Exact_args_t{}, _STD get<_Indices>(_STD forward<_Tpl>(_Right))...) {}\r\n\r\ntemplate <class _This, class... _Rest>\r\ntemplate <class _Tag, class _Alloc, class _Tpl, size_t... _Indices,\r\n    enable_if_t<is_same_v<_Tag, _STD _Alloc_unpack_tuple_t>, int> /* = 0 */>\r\nconstexpr tuple<_This, _Rest...>::tuple(_Tag, const _Alloc& _Al, _Tpl&& _Right, index_sequence<_Indices...>)\r\n    : tuple(_Alloc_exact_args_t{}, _Al, _STD get<_Indices>(_STD forward<_Tpl>(_Right))...) {}\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD constexpr tuple<_Unrefwrap_t<_Types>...> make_tuple(_Types&&... _Args) { // make tuple from elements\r\n    using _Ttype = tuple<_Unrefwrap_t<_Types>...>;\r\n    return _Ttype(_STD forward<_Types>(_Args)...);\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD constexpr tuple<_Types&...> tie(_Types&... _Args) noexcept { // make tuple from elements\r\n    using _Ttype = tuple<_Types&...>;\r\n    return _Ttype(_Args...);\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD constexpr tuple<_Types&&...> forward_as_tuple(_Types&&... _Args) noexcept { // forward arguments in a tuple\r\n    return tuple<_Types&&...>(_STD forward<_Types>(_Args)...);\r\n}\r\n\r\ntemplate <class _Ty, class _Kx_arg, class _Ix_arg, size_t _Ix_next, class... _Sequences>\r\nstruct _Tuple_cat2;\r\n\r\ntemplate <class _Ty, size_t... _Kx, size_t... _Ix, size_t _Ix_next>\r\nstruct _Tuple_cat2<_Ty, index_sequence<_Kx...>, index_sequence<_Ix...>, _Ix_next> {\r\n    using _Ret    = tuple<tuple_element_t<_Kx, _Remove_cvref_t<tuple_element_t<_Ix, _Ty>>>...>;\r\n    using _Kx_seq = index_sequence<_Kx...>;\r\n    using _Ix_seq = index_sequence<_Ix...>;\r\n};\r\n\r\ntemplate <class _Ty, size_t... _Kx, size_t... _Ix, size_t _Ix_next, size_t... _Kx_next, class... _Rest>\r\nstruct _Tuple_cat2<_Ty, index_sequence<_Kx...>, index_sequence<_Ix...>, _Ix_next, index_sequence<_Kx_next...>, _Rest...>\r\n    : _Tuple_cat2<_Ty, index_sequence<_Kx..., _Kx_next...>,\r\n          index_sequence<_Ix..., (_Ix_next + 0 * _Kx_next)...>, // repeat _Ix_next, ignoring the elements of _Kx_next\r\n          _Ix_next + 1, _Rest...> {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <_Tuple_like... _Tuples>\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\ntemplate <class... _Tuples>\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\nusing _Tuple_cat1 = _Tuple_cat2<tuple<_Tuples&&...>, index_sequence<>, index_sequence<>, 0,\r\n    make_index_sequence<tuple_size_v<_Remove_cvref_t<_Tuples>>>...>;\r\n\r\ntemplate <class _Ret, size_t... _Kx, size_t... _Ix, class _Ty>\r\nconstexpr _Ret _Tuple_cat(index_sequence<_Kx...>, index_sequence<_Ix...>, _Ty _Arg) {\r\n    return _Ret{_STD get<_Kx>(_STD get<_Ix>(_STD move(_Arg)))...};\r\n}\r\n\r\n#if _HAS_CXX23\r\n_EXPORT_STD template <_Tuple_like... _Tuples>\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n_EXPORT_STD template <class... _Tuples>\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n_NODISCARD constexpr typename _Tuple_cat1<_Tuples...>::_Ret tuple_cat(_Tuples&&... _Tpls) { // concatenate tuples\r\n    using _Cat1   = _Tuple_cat1<_Tuples...>;\r\n    using _Ret    = typename _Cat1::_Ret;\r\n    using _Kx_seq = typename _Cat1::_Kx_seq;\r\n    using _Ix_seq = typename _Cat1::_Ix_seq;\r\n    return _STD _Tuple_cat<_Ret>(_Kx_seq{}, _Ix_seq{}, _STD forward_as_tuple(_STD forward<_Tuples>(_Tpls)...));\r\n}\r\n\r\n#if _HAS_CXX17\r\n#if _HAS_CXX23\r\ntemplate <class _Callable, _Tuple_like _Tuple, size_t... _Indices>\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\ntemplate <class _Callable, class _Tuple, size_t... _Indices>\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\nconstexpr decltype(auto) _Apply_impl(_Callable&& _Obj, _Tuple&& _Tpl, index_sequence<_Indices...>)\r\n    noexcept(noexcept(_STD invoke(_STD forward<_Callable>(_Obj), _STD get<_Indices>(_STD forward<_Tuple>(_Tpl))...))) {\r\n    return _STD invoke(_STD forward<_Callable>(_Obj), _STD get<_Indices>(_STD forward<_Tuple>(_Tpl))...);\r\n}\r\n\r\n#if _HAS_CXX23\r\n_EXPORT_STD template <class _Callable, _Tuple_like _Tuple>\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n_EXPORT_STD template <class _Callable, class _Tuple>\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\nconstexpr decltype(auto) apply(_Callable&& _Obj, _Tuple&& _Tpl)\r\n    noexcept(noexcept(_STD _Apply_impl(_STD forward<_Callable>(_Obj), _STD forward<_Tuple>(_Tpl),\r\n        make_index_sequence<tuple_size_v<remove_reference_t<_Tuple>>>{}))) {\r\n    return _STD _Apply_impl(_STD forward<_Callable>(_Obj), _STD forward<_Tuple>(_Tpl),\r\n        make_index_sequence<tuple_size_v<remove_reference_t<_Tuple>>>{});\r\n}\r\n\r\ntemplate <class _Ty, class _Tuple, class _Seq = make_index_sequence<tuple_size_v<remove_reference_t<_Tuple>>>>\r\nconstexpr bool _Can_make_from_tuple = false;\r\ntemplate <class _Ty, class _Tuple, size_t... _Indices>\r\nconstexpr bool _Can_make_from_tuple<_Ty, _Tuple, index_sequence<_Indices...>> =\r\n    is_constructible_v<_Ty, decltype(_STD get<_Indices>(_STD declval<_Tuple>()))...>;\r\n\r\ntemplate <class _Ty, class _Tuple, size_t... _Indices>\r\nconstexpr _Ty _Make_from_tuple_impl(_Tuple&& _Tpl, index_sequence<_Indices...>)\r\n    noexcept(is_nothrow_constructible_v<_Ty, decltype(_STD get<_Indices>(_STD forward<_Tuple>(_Tpl)))...>) {\r\n    return _Ty(_STD get<_Indices>(_STD forward<_Tuple>(_Tpl))...);\r\n}\r\n\r\n#if _HAS_CXX23\r\n_EXPORT_STD template <class _Ty, _Tuple_like _Tuple>\r\n    requires _Can_make_from_tuple<_Ty, _Tuple>\r\n#elif _HAS_CXX20\r\n_EXPORT_STD template <class _Ty, class _Tuple>\r\n    requires _Can_make_from_tuple<_Ty, _Tuple>\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ty, class _Tuple, enable_if_t<_Can_make_from_tuple<_Ty, _Tuple>, int> = 0>\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n_NODISCARD constexpr _Ty make_from_tuple(_Tuple&& _Tpl) noexcept(noexcept(_STD _Make_from_tuple_impl<_Ty>(\r\n    _STD forward<_Tuple>(_Tpl), make_index_sequence<tuple_size_v<remove_reference_t<_Tuple>>>{}))) /* strengthened */ {\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    if constexpr (tuple_size_v<remove_reference_t<_Tuple>> == 1) {\r\n        static_assert(!reference_constructs_from_temporary_v<_Ty, decltype(_STD get<0>(_STD forward<_Tuple>(_Tpl)))>,\r\n            \"Cannot bind a temporary to the returned reference which will always be dangling (N5014 [tuple.apply]/2).\");\r\n    }\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n    // construct _Ty from the elements of _Tpl\r\n    return _STD _Make_from_tuple_impl<_Ty>(\r\n        _STD forward<_Tuple>(_Tpl), make_index_sequence<tuple_size_v<remove_reference_t<_Tuple>>>{});\r\n}\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class... _Types, class _Alloc>\r\nstruct uses_allocator<tuple<_Types...>, _Alloc> : true_type {}; // true_type if container allocator enabled\r\n\r\n#if _HAS_CXX23\r\ntemplate <_Tuple_like _TTuple, _Tuple_like _UTuple, template <class> class _TQual, template <class> class _UQual,\r\n    class _Indices = make_index_sequence<tuple_size_v<_TTuple>>>\r\nstruct _Tuple_like_common_reference;\r\n\r\ntemplate <class _TTuple, class _UTuple, template <class> class _TQual, template <class> class _UQual,\r\n    size_t... _Indices>\r\n    requires requires {\r\n        typename tuple<common_reference_t<_TQual<tuple_element_t<_Indices, _TTuple>>,\r\n            _UQual<tuple_element_t<_Indices, _UTuple>>>...>;\r\n    }\r\nstruct _Tuple_like_common_reference<_TTuple, _UTuple, _TQual, _UQual, index_sequence<_Indices...>> {\r\n    using type = tuple<\r\n        common_reference_t<_TQual<tuple_element_t<_Indices, _TTuple>>, _UQual<tuple_element_t<_Indices, _UTuple>>>...>;\r\n};\r\n\r\ntemplate <_Tuple_like _TTuple, _Tuple_like _UTuple, template <class> class _TQual, template <class> class _UQual>\r\n    requires (_Is_specialization_v<_TTuple, tuple> || _Is_specialization_v<_UTuple, tuple>)\r\n          && is_same_v<_TTuple, decay_t<_TTuple>> && is_same_v<_UTuple, decay_t<_UTuple>>\r\n          && (tuple_size_v<_TTuple> == tuple_size_v<_UTuple>)\r\n          && requires { typename _Tuple_like_common_reference<_TTuple, _UTuple, _TQual, _UQual>::type; }\r\nstruct basic_common_reference<_TTuple, _UTuple, _TQual, _UQual> {\r\n    using type = _Tuple_like_common_reference<_TTuple, _UTuple, _TQual, _UQual>::type;\r\n};\r\n\r\ntemplate <_Tuple_like _TTuple, _Tuple_like _UTuple, class _Indices = make_index_sequence<tuple_size_v<_TTuple>>>\r\nstruct _Tuple_like_common_type;\r\n\r\ntemplate <class _TTuple, class _UTuple, size_t... _Indices>\r\n    requires requires {\r\n        typename tuple<common_type_t<tuple_element_t<_Indices, _TTuple>, tuple_element_t<_Indices, _UTuple>>...>;\r\n    }\r\nstruct _Tuple_like_common_type<_TTuple, _UTuple, index_sequence<_Indices...>> {\r\n    using type = tuple<common_type_t<tuple_element_t<_Indices, _TTuple>, tuple_element_t<_Indices, _UTuple>>...>;\r\n};\r\n\r\ntemplate <_Tuple_like _TTuple, _Tuple_like _UTuple>\r\n    requires (_Is_specialization_v<_TTuple, tuple> || _Is_specialization_v<_UTuple, tuple>)\r\n          && is_same_v<_TTuple, decay_t<_TTuple>> && is_same_v<_UTuple, decay_t<_UTuple>>\r\n          && (tuple_size_v<_TTuple> == tuple_size_v<_UTuple>)\r\n          && requires { typename _Tuple_like_common_type<_TTuple, _UTuple>::type; }\r\nstruct common_type<_TTuple, _UTuple> {\r\n    using type = _Tuple_like_common_type<_TTuple, _UTuple>::type;\r\n};\r\n#endif // _HAS_CXX23\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _TUPLE_\r\n"
  },
  {
    "path": "stl/inc/type_traits",
    "content": "// type_traits standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _TYPE_TRAITS_\r\n#define _TYPE_TRAITS_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <xtr1common>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"intrinsic\")\r\n#pragma push_macro(\"known_semantics\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef intrinsic\r\n#undef known_semantics\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\ntemplate <bool _First_value, class _First, class... _Rest>\r\nstruct _Conjunction { // handle false trait or last trait\r\n    using type = _First;\r\n};\r\n\r\ntemplate <class _True, class _Next, class... _Rest>\r\nstruct _Conjunction<true, _True, _Next, _Rest...> { // the first trait is true, try the next one\r\n    using type = typename _Conjunction<static_cast<bool>(_Next::value), _Next, _Rest...>::type;\r\n};\r\n\r\n_EXPORT_STD template <class... _Traits>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS conjunction : true_type {}; // If _Traits is empty, true_type\r\n\r\ntemplate <class _First, class... _Rest>\r\nstruct conjunction<_First, _Rest...> : _Conjunction<static_cast<bool>(_First::value), _First, _Rest...>::type {\r\n    // the first false trait in _Traits, or the last trait if none are false\r\n};\r\n\r\n_EXPORT_STD template <class... _Traits>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool conjunction_v = conjunction<_Traits...>::value;\r\n\r\n_EXPORT_STD template <class _Trait>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS negation : bool_constant<!static_cast<bool>(_Trait::value)> {\r\n    // The negated result of _Trait\r\n};\r\n\r\n_EXPORT_STD template <class _Trait>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool negation_v = negation<_Trait>::value;\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_void_v = is_same_v<remove_cv_t<_Ty>, void>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_void : bool_constant<is_void_v<_Ty>> {};\r\n\r\n_EXPORT_STD template <class... _Types>\r\nusing void_t = void;\r\n\r\ntemplate <class _Ty>\r\nstruct _Identity {\r\n    using type = _Ty;\r\n};\r\ntemplate <class _Ty>\r\nusing _Identity_t _MSVC_KNOWN_SEMANTICS = typename _Identity<_Ty>::type;\r\n\r\n// Type modifiers\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS add_const { // add top-level const qualifier\r\n    using type = const _Ty;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing add_const_t = typename add_const<_Ty>::type;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS add_volatile { // add top-level volatile qualifier\r\n    using type = volatile _Ty;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing add_volatile_t = typename add_volatile<_Ty>::type;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS add_cv { // add top-level const and volatile qualifiers\r\n    using type = const volatile _Ty;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing add_cv_t = typename add_cv<_Ty>::type;\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Add_reference { // add reference (non-referenceable type)\r\n    using _Lvalue = _Ty;\r\n    using _Rvalue = _Ty;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Add_reference<_Ty, void_t<_Ty&>> { // (referenceable type)\r\n    using _Lvalue = _Ty&;\r\n    using _Rvalue = _Ty&&;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS add_lvalue_reference {\r\n    using type = typename _Add_reference<_Ty>::_Lvalue;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing add_lvalue_reference_t = typename _Add_reference<_Ty>::_Lvalue;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS add_rvalue_reference {\r\n    using type = typename _Add_reference<_Ty>::_Rvalue;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing add_rvalue_reference_t = typename _Add_reference<_Ty>::_Rvalue;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nadd_rvalue_reference_t<_Ty> declval() noexcept {\r\n    static_assert(false, \"Calling declval is ill-formed, see N4950 [declval]/2.\");\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS remove_extent { // remove array extent\r\n    using type = _Ty;\r\n};\r\n\r\ntemplate <class _Ty, size_t _Ix>\r\nstruct remove_extent<_Ty[_Ix]> {\r\n    using type = _Ty;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct remove_extent<_Ty[]> {\r\n    using type = _Ty;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing remove_extent_t = typename remove_extent<_Ty>::type;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS remove_all_extents { // remove all array extents\r\n    using type = _Ty;\r\n};\r\n\r\ntemplate <class _Ty, size_t _Ix>\r\nstruct remove_all_extents<_Ty[_Ix]> {\r\n    using type = typename remove_all_extents<_Ty>::type;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct remove_all_extents<_Ty[]> {\r\n    using type = typename remove_all_extents<_Ty>::type;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing remove_all_extents_t = typename remove_all_extents<_Ty>::type;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS remove_pointer {\r\n    using type = _Ty;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct remove_pointer<_Ty*> {\r\n    using type = _Ty;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct remove_pointer<_Ty* const> {\r\n    using type = _Ty;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct remove_pointer<_Ty* volatile> {\r\n    using type = _Ty;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct remove_pointer<_Ty* const volatile> {\r\n    using type = _Ty;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing remove_pointer_t = typename remove_pointer<_Ty>::type;\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Add_pointer { // add pointer (pointer type cannot be formed)\r\n    using type = _Ty;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Add_pointer<_Ty, void_t<remove_reference_t<_Ty>*>> { // (pointer type can be formed)\r\n    using type = remove_reference_t<_Ty>*;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS add_pointer {\r\n    using type = typename _Add_pointer<_Ty>::type;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing add_pointer_t = typename _Add_pointer<_Ty>::type;\r\n\r\n_EXPORT_STD template <class>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_array_v = false; // determine whether type argument is an array\r\n\r\ntemplate <class _Ty, size_t _Nx>\r\nconstexpr bool is_array_v<_Ty[_Nx]> = true;\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool is_array_v<_Ty[]> = true;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_array : bool_constant<is_array_v<_Ty>> {};\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_bounded_array_v = false;\r\n\r\ntemplate <class _Ty, size_t _Nx>\r\nconstexpr bool is_bounded_array_v<_Ty[_Nx]> = true;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_bounded_array : bool_constant<is_bounded_array_v<_Ty>> {};\r\n\r\n_EXPORT_STD template <class>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_unbounded_array_v = false;\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool is_unbounded_array_v<_Ty[]> = true;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_unbounded_array : bool_constant<is_unbounded_array_v<_Ty>> {};\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_lvalue_reference_v =\r\n    false; // determine whether type argument is an lvalue reference\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool is_lvalue_reference_v<_Ty&> = true;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_lvalue_reference : bool_constant<is_lvalue_reference_v<_Ty>> {};\r\n\r\n_EXPORT_STD template <class>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_rvalue_reference_v =\r\n    false; // determine whether type argument is an rvalue reference\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool is_rvalue_reference_v<_Ty&&> = true;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_rvalue_reference : bool_constant<is_rvalue_reference_v<_Ty>> {};\r\n\r\n_EXPORT_STD template <class>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_reference_v =\r\n    false; // determine whether type argument is a reference\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool is_reference_v<_Ty&> = true;\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool is_reference_v<_Ty&&> = true;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_reference : bool_constant<is_reference_v<_Ty>> {};\r\n\r\n_EXPORT_STD template <class>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_pointer_v = false; // determine whether _Ty is a pointer\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool is_pointer_v<_Ty*> = true;\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool is_pointer_v<_Ty* const> = true;\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool is_pointer_v<_Ty* volatile> = true;\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool is_pointer_v<_Ty* const volatile> = true;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_pointer : bool_constant<is_pointer_v<_Ty>> {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_null_pointer_v =\r\n    is_same_v<remove_cv_t<_Ty>, nullptr_t>; // determine whether _Ty is cv-qualified nullptr_t\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_null_pointer : bool_constant<is_null_pointer_v<_Ty>> {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_union : bool_constant<__is_union(_Ty)> {\r\n}; // determine whether _Ty is a union\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_union_v = __is_union(_Ty);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_class : bool_constant<__is_class(_Ty)> {\r\n}; // determine whether _Ty is a class\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_class_v = __is_class(_Ty);\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_fundamental_v =\r\n    is_arithmetic_v<_Ty> || is_void_v<_Ty> || is_null_pointer_v<_Ty>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_fundamental : bool_constant<is_fundamental_v<_Ty>> {\r\n    // determine whether _Ty is a fundamental type\r\n};\r\n\r\n_EXPORT_STD template <class _From, class _To>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_convertible : bool_constant<__is_convertible_to(_From, _To)> {\r\n    // determine whether _From is convertible to _To\r\n};\r\n\r\n_EXPORT_STD template <class _From, class _To>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_convertible_v = __is_convertible_to(_From, _To);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_enum : bool_constant<__is_enum(_Ty)> {\r\n}; // determine whether _Ty is an enumerated type\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_enum_v = __is_enum(_Ty);\r\n\r\n#if _HAS_CXX23\r\n#ifdef __clang__ // TRANSITION, DevCom-10870354 (MSVC, EDG)\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_scoped_enum_v = __is_scoped_enum(_Ty);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_scoped_enum : bool_constant<__is_scoped_enum(_Ty)> {};\r\n#else // ^^^ no workaround / workaround vvv\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_scoped_enum_v =\r\n    conjunction_v<is_enum<_Ty>, negation<is_convertible<_Ty, int>>>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_scoped_enum : bool_constant<is_scoped_enum_v<_Ty>> {};\r\n#endif // ^^^ workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_compound : bool_constant<!is_fundamental_v<_Ty>> {\r\n    // determine whether _Ty is a compound type\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_compound_v = !is_fundamental_v<_Ty>;\r\n\r\n#define _EMIT_CDECL(FUNC, OPT1, OPT2, OPT3) FUNC(__cdecl, OPT1, OPT2, OPT3)\r\n\r\n#ifdef _M_CEE\r\n#define _EMIT_CLRCALL(FUNC, OPT1, OPT2, OPT3) FUNC(__clrcall, OPT1, OPT2, OPT3)\r\n#else // ^^^ __clrcall supported / __clrcall not supported vvv\r\n#define _EMIT_CLRCALL(FUNC, OPT1, OPT2, OPT3)\r\n#endif // ^^^ __clrcall not supported ^^^\r\n\r\n#if defined(_M_IX86) && !defined(_M_CEE)\r\n#define _EMIT_FASTCALL(FUNC, OPT1, OPT2, OPT3) FUNC(__fastcall, OPT1, OPT2, OPT3)\r\n#else // ^^^ __fastcall supported / __fastcall not supported vvv\r\n#define _EMIT_FASTCALL(FUNC, OPT1, OPT2, OPT3)\r\n#endif // ^^^ __fastcall not supported ^^^\r\n\r\n#ifdef _M_IX86\r\n#define _EMIT_STDCALL(FUNC, OPT1, OPT2, OPT3)  FUNC(__stdcall, OPT1, OPT2, OPT3)\r\n#define _EMIT_THISCALL(FUNC, OPT1, OPT2, OPT3) FUNC(__thiscall, OPT1, OPT2, OPT3)\r\n#else // ^^^ __stdcall and __thiscall supported / __stdcall and __thiscall not supported vvv\r\n#define _EMIT_STDCALL(FUNC, OPT1, OPT2, OPT3)\r\n#define _EMIT_THISCALL(FUNC, OPT1, OPT2, OPT3)\r\n#endif // ^^^ __stdcall and __thiscall not supported ^^^\r\n\r\n#if ((defined(_M_IX86) && _M_IX86_FP >= 2) || (defined(_M_X64) && !defined(_M_ARM64EC))) && !defined(_M_CEE)\r\n#define _EMIT_VECTORCALL(FUNC, OPT1, OPT2, OPT3) FUNC(__vectorcall, OPT1, OPT2, OPT3)\r\n#else // ^^^ __vectorcall supported / __vectorcall not supported vvv\r\n#define _EMIT_VECTORCALL(FUNC, OPT1, OPT2, OPT3)\r\n#endif // ^^^ __vectorcall not supported ^^^\r\n\r\n#define _NON_MEMBER_CALL(FUNC, CV_OPT, REF_OPT, NOEXCEPT_OPT) \\\r\n    _EMIT_CDECL(FUNC, CV_OPT, REF_OPT, NOEXCEPT_OPT)          \\\r\n    _EMIT_CLRCALL(FUNC, CV_OPT, REF_OPT, NOEXCEPT_OPT)        \\\r\n    _EMIT_FASTCALL(FUNC, CV_OPT, REF_OPT, NOEXCEPT_OPT)       \\\r\n    _EMIT_STDCALL(FUNC, CV_OPT, REF_OPT, NOEXCEPT_OPT)        \\\r\n    _EMIT_VECTORCALL(FUNC, CV_OPT, REF_OPT, NOEXCEPT_OPT)\r\n\r\n#define _NON_MEMBER_CALL_CV(FUNC, REF_OPT, NOEXCEPT_OPT)    \\\r\n    _NON_MEMBER_CALL(FUNC, , REF_OPT, NOEXCEPT_OPT)         \\\r\n    _NON_MEMBER_CALL(FUNC, const, REF_OPT, NOEXCEPT_OPT)    \\\r\n    _NON_MEMBER_CALL(FUNC, volatile, REF_OPT, NOEXCEPT_OPT) \\\r\n    _NON_MEMBER_CALL(FUNC, const volatile, REF_OPT, NOEXCEPT_OPT)\r\n\r\n#define _NON_MEMBER_CALL_CV_REF(FUNC, NOEXCEPT_OPT) \\\r\n    _NON_MEMBER_CALL_CV(FUNC, , NOEXCEPT_OPT)       \\\r\n    _NON_MEMBER_CALL_CV(FUNC, &, NOEXCEPT_OPT)      \\\r\n    _NON_MEMBER_CALL_CV(FUNC, &&, NOEXCEPT_OPT)\r\n\r\n#ifdef __cpp_noexcept_function_type\r\n#define _NON_MEMBER_CALL_CV_REF_NOEXCEPT(FUNC) \\\r\n    _NON_MEMBER_CALL_CV_REF(FUNC, )            \\\r\n    _NON_MEMBER_CALL_CV_REF(FUNC, noexcept)\r\n#else // ^^^ defined(__cpp_noexcept_function_type) / !defined(__cpp_noexcept_function_type) vvv\r\n#define _NON_MEMBER_CALL_CV_REF_NOEXCEPT(FUNC) _NON_MEMBER_CALL_CV_REF(FUNC, )\r\n#endif // ^^^ !defined(__cpp_noexcept_function_type) ^^^\r\n\r\n#define _MEMBER_CALL(FUNC, CV_OPT, REF_OPT, NOEXCEPT_OPT) \\\r\n    _EMIT_CDECL(FUNC, CV_OPT, REF_OPT, NOEXCEPT_OPT)      \\\r\n    _EMIT_CLRCALL(FUNC, CV_OPT, REF_OPT, NOEXCEPT_OPT)    \\\r\n    _EMIT_FASTCALL(FUNC, CV_OPT, REF_OPT, NOEXCEPT_OPT)   \\\r\n    _EMIT_STDCALL(FUNC, CV_OPT, REF_OPT, NOEXCEPT_OPT)    \\\r\n    _EMIT_THISCALL(FUNC, CV_OPT, REF_OPT, NOEXCEPT_OPT)   \\\r\n    _EMIT_VECTORCALL(FUNC, CV_OPT, REF_OPT, NOEXCEPT_OPT)\r\n\r\n#define _MEMBER_CALL_CV(FUNC, REF_OPT, NOEXCEPT_OPT)    \\\r\n    _MEMBER_CALL(FUNC, , REF_OPT, NOEXCEPT_OPT)         \\\r\n    _MEMBER_CALL(FUNC, const, REF_OPT, NOEXCEPT_OPT)    \\\r\n    _MEMBER_CALL(FUNC, volatile, REF_OPT, NOEXCEPT_OPT) \\\r\n    _MEMBER_CALL(FUNC, const volatile, REF_OPT, NOEXCEPT_OPT)\r\n\r\n#define _MEMBER_CALL_CV_REF(FUNC, NOEXCEPT_OPT) \\\r\n    _MEMBER_CALL_CV(FUNC, , NOEXCEPT_OPT)       \\\r\n    _MEMBER_CALL_CV(FUNC, &, NOEXCEPT_OPT)      \\\r\n    _MEMBER_CALL_CV(FUNC, &&, NOEXCEPT_OPT)\r\n\r\n#ifdef __cpp_noexcept_function_type\r\n#define _MEMBER_CALL_CV_REF_NOEXCEPT(FUNC) \\\r\n    _MEMBER_CALL_CV_REF(FUNC, )            \\\r\n    _MEMBER_CALL_CV_REF(FUNC, noexcept)\r\n#else // ^^^ defined(__cpp_noexcept_function_type) / !defined(__cpp_noexcept_function_type) vvv\r\n#define _MEMBER_CALL_CV_REF_NOEXCEPT(FUNC) _MEMBER_CALL_CV_REF(FUNC, )\r\n#endif // ^^^ !defined(__cpp_noexcept_function_type) ^^^\r\n\r\n#ifdef __cpp_noexcept_function_type\r\n#define _CLASS_DEFINE_CV_REF_NOEXCEPT(CLASS) \\\r\n    CLASS(_EMPTY_ARGUMENT)                   \\\r\n    CLASS(const)                             \\\r\n    CLASS(volatile)                          \\\r\n    CLASS(const volatile)                    \\\r\n    CLASS(&)                                 \\\r\n    CLASS(const&)                            \\\r\n    CLASS(volatile&)                         \\\r\n    CLASS(const volatile&)                   \\\r\n    CLASS(&&)                                \\\r\n    CLASS(const&&)                           \\\r\n    CLASS(volatile&&)                        \\\r\n    CLASS(const volatile&&)                  \\\r\n    CLASS(noexcept)                          \\\r\n    CLASS(const noexcept)                    \\\r\n    CLASS(volatile noexcept)                 \\\r\n    CLASS(const volatile noexcept)           \\\r\n    CLASS(& noexcept)                        \\\r\n    CLASS(const& noexcept)                   \\\r\n    CLASS(volatile& noexcept)                \\\r\n    CLASS(const volatile& noexcept)          \\\r\n    CLASS(&& noexcept)                       \\\r\n    CLASS(const&& noexcept)                  \\\r\n    CLASS(volatile&& noexcept)               \\\r\n    CLASS(const volatile&& noexcept)\r\n#else // ^^^ defined(__cpp_noexcept_function_type) / !defined(__cpp_noexcept_function_type) vvv\r\n#define _CLASS_DEFINE_CV_REF_NOEXCEPT(CLASS) \\\r\n    CLASS(_EMPTY_ARGUMENT)                   \\\r\n    CLASS(const)                             \\\r\n    CLASS(volatile)                          \\\r\n    CLASS(const volatile)                    \\\r\n    CLASS(&)                                 \\\r\n    CLASS(const&)                            \\\r\n    CLASS(volatile&)                         \\\r\n    CLASS(const volatile&)                   \\\r\n    CLASS(&&)                                \\\r\n    CLASS(const&&)                           \\\r\n    CLASS(volatile&&)                        \\\r\n    CLASS(const volatile&&)\r\n#endif // ^^^ !defined(__cpp_noexcept_function_type) ^^^\r\n\r\ntemplate <class... _Types>\r\nstruct _Arg_types {}; // provide argument_type, etc. when sizeof...(_Types) is 1 or 2\r\n\r\ntemplate <class _Ty1>\r\nstruct _Arg_types<_Ty1> {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty1;\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct _Arg_types<_Ty1, _Ty2> {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty1;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty2;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Is_memfunptr { // base class for member function pointer predicates\r\n    using _Bool_type = false_type; // NB: members are user-visible via _Weak_types\r\n};\r\n\r\n#define _IS_MEMFUNPTR(CALL_OPT, CV_OPT, REF_OPT, NOEXCEPT_OPT)                            \\\r\n    template <class _Ret, class _Arg0, class... _Types>                                   \\\r\n    struct _Is_memfunptr<_Ret (CALL_OPT _Arg0::*)(_Types...) CV_OPT REF_OPT NOEXCEPT_OPT> \\\r\n        : _Arg_types<CV_OPT _Arg0*, _Types...> {                                          \\\r\n        using _Bool_type                                          = true_type;            \\\r\n        using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ret;                 \\\r\n        using _Class_type                                         = _Arg0;                \\\r\n        using _Guide_type = enable_if<!is_same_v<int REF_OPT, int&&>, _Ret(_Types...)>;   \\\r\n    };\r\n\r\n_MEMBER_CALL_CV_REF_NOEXCEPT(_IS_MEMFUNPTR)\r\n#undef _IS_MEMFUNPTR\r\n\r\n#define _IS_MEMFUNPTR_ELLIPSIS(CV_REF_NOEXCEPT_OPT)                                   \\\r\n    template <class _Ret, class _Arg0, class... _Types>                               \\\r\n    struct _Is_memfunptr<_Ret (_Arg0::*)(_Types..., ...)                              \\\r\n            CV_REF_NOEXCEPT_OPT> { /* no calling conventions for ellipsis */          \\\r\n        using _Bool_type                                          = true_type;        \\\r\n        using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ret;             \\\r\n        using _Class_type                                         = _Arg0;            \\\r\n        using _Guide_type                                         = enable_if<false>; \\\r\n    };\r\n\r\n_CLASS_DEFINE_CV_REF_NOEXCEPT(_IS_MEMFUNPTR_ELLIPSIS)\r\n#undef _IS_MEMFUNPTR_ELLIPSIS\r\n\r\n#if _HAS_CXX23\r\n#define _IS_MEMFUNPTR_EXPLICIT_THIS_GUIDES(CALL_OPT, CV_OPT, REF_OPT, NOEXCEPT_OPT) \\\r\n    template <class _Ret, class _Self, class... _Args>                              \\\r\n    struct _Is_memfunptr<_Ret(CALL_OPT*)(_Self, _Args...) NOEXCEPT_OPT> {           \\\r\n        using _Bool_type  = false_type;                                             \\\r\n        using _Guide_type = _Identity<_Ret(_Args...)>;                              \\\r\n    };\r\n\r\n_NON_MEMBER_CALL(_IS_MEMFUNPTR_EXPLICIT_THIS_GUIDES, , , )\r\n#ifdef __cpp_noexcept_function_type\r\n_NON_MEMBER_CALL(_IS_MEMFUNPTR_EXPLICIT_THIS_GUIDES, , , noexcept)\r\n#endif // defined(__cpp_noexcept_function_type)\r\n\r\n#undef _IS_MEMFUNPTR_EXPLICIT_THIS_GUIDES\r\n#endif // _HAS_CXX23\r\n\r\n#ifdef __clang__\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_member_function_pointer_v = __is_member_function_pointer(_Ty);\r\n#else // ^^^ Clang / Other vvv\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_member_function_pointer_v =\r\n    _Is_memfunptr<remove_cv_t<_Ty>>::_Bool_type::value;\r\n#endif // ^^^ Other ^^^\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_member_function_pointer\r\n    : bool_constant<is_member_function_pointer_v<_Ty>> {};\r\n\r\n_EXPORT_STD template <class>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_const_v =\r\n    false; // determine whether type argument is const qualified\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool is_const_v<const _Ty> = true;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_const : bool_constant<is_const_v<_Ty>> {};\r\n\r\n_EXPORT_STD template <class>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_volatile_v =\r\n    false; // determine whether type argument is volatile qualified\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool is_volatile_v<volatile _Ty> = true;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_volatile : bool_constant<is_volatile_v<_Ty>> {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool\r\n    is_function_v = // only function types and reference types can't be const qualified\r\n    !is_const_v<const _Ty> && !is_reference_v<_Ty>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_function : bool_constant<is_function_v<_Ty>> {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool\r\n    is_object_v = // only function types and reference types can't be const qualified\r\n    is_const_v<const _Ty> && !is_void_v<_Ty>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_object : bool_constant<is_object_v<_Ty>> {};\r\n\r\ntemplate <class>\r\nstruct _Is_member_object_pointer {\r\n    static constexpr bool value = false;\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct _Is_member_object_pointer<_Ty1 _Ty2::*> {\r\n    static constexpr bool value = !is_function_v<_Ty1>;\r\n    using _Class_type           = _Ty2;\r\n};\r\n\r\n#ifdef __clang__\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_member_object_pointer_v = __is_member_object_pointer(_Ty);\r\n#else // ^^^ Clang / Other vvv\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_member_object_pointer_v =\r\n    _Is_member_object_pointer<remove_cv_t<_Ty>>::value;\r\n#endif // ^^^ Other ^^^\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_member_object_pointer : bool_constant<is_member_object_pointer_v<_Ty>> {};\r\n\r\n#ifdef __clang__\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_member_pointer_v = __is_member_pointer(_Ty);\r\n#else // ^^^ Clang / Other vvv\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_member_pointer_v =\r\n    is_member_object_pointer_v<_Ty> || is_member_function_pointer_v<_Ty>;\r\n#endif // ^^^ Other ^^^\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_member_pointer : bool_constant<is_member_pointer_v<_Ty>> {\r\n    // determine whether _Ty is a pointer to member\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_scalar_v = // determine whether _Ty is a scalar type\r\n    is_arithmetic_v<_Ty> || is_enum_v<_Ty> || is_pointer_v<_Ty> || is_member_pointer_v<_Ty> || is_null_pointer_v<_Ty>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_scalar : bool_constant<is_scalar_v<_Ty>> {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _CXX20_DEPRECATE_IS_POD _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_pod : bool_constant<__is_pod(_Ty)> {\r\n    // determine whether _Ty is a POD type\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_CXX20_DEPRECATE_IS_POD _NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_pod_v = __is_pod(_Ty);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_empty : bool_constant<__is_empty(_Ty)> {\r\n}; // determine whether _Ty is an empty class\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_empty_v = __is_empty(_Ty);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_polymorphic : bool_constant<__is_polymorphic(_Ty)> {\r\n    // determine whether _Ty is a polymorphic type\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_polymorphic_v = __is_polymorphic(_Ty);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_abstract : bool_constant<__is_abstract(_Ty)> {\r\n    // determine whether _Ty is an abstract class\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_abstract_v = __is_abstract(_Ty);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_final : bool_constant<__is_final(_Ty)> {\r\n}; // determine whether _Ty is a final class\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_final_v = __is_final(_Ty);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_standard_layout : bool_constant<__is_standard_layout(_Ty)> {\r\n    // determine whether _Ty is standard layout\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_standard_layout_v = __is_standard_layout(_Ty);\r\n\r\n#if _HAS_DEPRECATED_IS_LITERAL_TYPE\r\n_EXPORT_STD template <class _Ty>\r\nstruct _CXX17_DEPRECATE_IS_LITERAL_TYPE _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_literal_type\r\n    : bool_constant<__is_literal_type(_Ty)> {\r\n    // determine whether _Ty is a literal type\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_CXX17_DEPRECATE_IS_LITERAL_TYPE _NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_literal_type_v =\r\n    __is_literal_type(_Ty);\r\n#endif // _HAS_DEPRECATED_IS_LITERAL_TYPE\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_trivial : bool_constant<__is_trivial(_Ty)> {\r\n}; // determine whether _Ty is a trivial type\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_trivial_v = __is_trivial(_Ty);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_trivially_copyable : bool_constant<__is_trivially_copyable(_Ty)> {\r\n    // determine whether _Ty is a trivially copyable type\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_trivially_copyable_v = __is_trivially_copyable(_Ty);\r\n\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_is_implicit_lifetime // TRANSITION\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_implicit_lifetime : bool_constant<__builtin_is_implicit_lifetime(_Ty)> {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_implicit_lifetime_v = __builtin_is_implicit_lifetime(_Ty);\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS has_virtual_destructor : bool_constant<__has_virtual_destructor(_Ty)> {\r\n    // determine whether _Ty has a virtual destructor\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool has_virtual_destructor_v = __has_virtual_destructor(_Ty);\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS has_unique_object_representations\r\n    : bool_constant<__has_unique_object_representations(_Ty)> {\r\n    // determine whether _Ty has unique object representations\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool has_unique_object_representations_v =\r\n    __has_unique_object_representations(_Ty);\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n#ifdef __clang__ // TRANSITION, LLVM-114344\r\ntemplate <class _Ty>\r\nstruct _Adjust_ref_binding_source {\r\n    using type = _Ty;\r\n};\r\ntemplate <class _Ty>\r\n    requires is_scalar_v<_Ty> || is_void_v<_Ty>\r\nstruct _Adjust_ref_binding_source<_Ty> {\r\n    using type = remove_cv_t<_Ty>;\r\n};\r\ntemplate <class _Ty>\r\n    requires is_function_v<_Ty> && requires { typename void_t<_Ty&>; }\r\nstruct _Adjust_ref_binding_source<_Ty> {\r\n    using type = _Ty&;\r\n};\r\n\r\ntemplate <class _Ty>\r\nusing _Adjust_ref_binding_source_t = _Adjust_ref_binding_source<_Ty>::type;\r\n#else // ^^^ workaround / no workaround vvv\r\ntemplate <class _Ty>\r\nusing _Adjust_ref_binding_source_t = _Ty;\r\n#endif // ^^^ no workaround ^^^\r\n\r\n_EXPORT_STD template <class _Ty, class _Uty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS reference_constructs_from_temporary\r\n    : bool_constant<__reference_constructs_from_temporary(_Ty, _Adjust_ref_binding_source_t<_Uty>)> {};\r\n\r\n_EXPORT_STD template <class _Ty, class _Uty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool reference_constructs_from_temporary_v =\r\n    __reference_constructs_from_temporary(_Ty, _Adjust_ref_binding_source_t<_Uty>);\r\n\r\n_EXPORT_STD template <class _Ty, class _Uty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS reference_converts_from_temporary\r\n    : bool_constant<__reference_converts_from_temporary(_Ty, _Adjust_ref_binding_source_t<_Uty>)> {};\r\n\r\n_EXPORT_STD template <class _Ty, class _Uty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool reference_converts_from_temporary_v =\r\n    __reference_converts_from_temporary(_Ty, _Adjust_ref_binding_source_t<_Uty>);\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n#if _HAS_CXX17\r\n#ifdef __EDG__ // TRANSITION, VSO-1690654\r\ntemplate <class _Ty>\r\nstruct _Is_aggregate_impl : bool_constant<__is_aggregate(_Ty)> {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_aggregate_v =\r\n    disjunction_v<is_array<_Ty>, _Is_aggregate_impl<_Ty>>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_aggregate : bool_constant<is_aggregate_v<_Ty>> {};\r\n#else // ^^^ workaround / no workaround vvv\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_aggregate : bool_constant<__is_aggregate(_Ty)> {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_aggregate_v = __is_aggregate(_Ty);\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Ty, class... _Args>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_constructible : bool_constant<__is_constructible(_Ty, _Args...)> {\r\n    // determine whether _Ty can be direct-initialized with _Args...\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, class... _Args>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_constructible_v = __is_constructible(_Ty, _Args...);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_copy_constructible\r\n    : bool_constant<__is_constructible(_Ty, add_lvalue_reference_t<const _Ty>)> {\r\n    // determine whether _Ty can be direct-initialized with an lvalue const _Ty\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_copy_constructible_v =\r\n    __is_constructible(_Ty, add_lvalue_reference_t<const _Ty>);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_default_constructible : bool_constant<__is_constructible(_Ty)> {\r\n    // determine whether _Ty can be value-initialized\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_default_constructible_v = __is_constructible(_Ty);\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Is_implicitly_default_constructible : false_type {\r\n    // determine whether _Ty can be copy-initialized with {}\r\n};\r\n\r\ntemplate <class _Ty>\r\nvoid _Implicitly_default_construct(const _Ty&);\r\n\r\ntemplate <class _Ty>\r\nstruct _Is_implicitly_default_constructible<_Ty, void_t<decltype(_Implicitly_default_construct<_Ty>({}))>> : true_type {\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_move_constructible : bool_constant<__is_constructible(_Ty, _Ty)> {\r\n    // determine whether _Ty can be direct-initialized from an rvalue _Ty\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_move_constructible_v = __is_constructible(_Ty, _Ty);\r\n\r\n_EXPORT_STD template <class _To, class _From>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_assignable : bool_constant<__is_assignable(_To, _From)> {\r\n    // determine whether _From can be assigned to _To\r\n};\r\n\r\n_EXPORT_STD template <class _To, class _From>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_assignable_v = __is_assignable(_To, _From);\r\n\r\n#if defined(_IS_ASSIGNABLE_NOCHECK_SUPPORTED)\r\ntemplate <class _To, class _From>\r\nstruct _Is_assignable_no_precondition_check : bool_constant<__is_assignable_no_precondition_check(_To, _From)> {};\r\n#else // ^^^ Use intrinsic / intrinsic not supported vvv\r\ntemplate <class _To, class _From>\r\nusing _Is_assignable_no_precondition_check = is_assignable<_To, _From>;\r\n#endif // ^^^ intrinsic not supported ^^^\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_copy_assignable\r\n    : bool_constant<__is_assignable(add_lvalue_reference_t<_Ty>, add_lvalue_reference_t<const _Ty>)> {\r\n    // determine whether an lvalue const _Ty can be assigned to an lvalue _Ty\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_copy_assignable_v =\r\n    __is_assignable(add_lvalue_reference_t<_Ty>, add_lvalue_reference_t<const _Ty>);\r\n\r\n#if defined(_IS_ASSIGNABLE_NOCHECK_SUPPORTED)\r\ntemplate <class _Ty>\r\nstruct _Is_copy_assignable_no_precondition_check\r\n    : bool_constant<__is_assignable_no_precondition_check(\r\n          add_lvalue_reference_t<_Ty>, add_lvalue_reference_t<const _Ty>)> {};\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_copy_assignable_unchecked_v =\r\n    __is_assignable_no_precondition_check(add_lvalue_reference_t<_Ty>, add_lvalue_reference_t<const _Ty>);\r\n#else // ^^^ Use intrinsic / intrinsic not supported vvv\r\ntemplate <class _Ty>\r\nusing _Is_copy_assignable_no_precondition_check = is_copy_assignable<_Ty>;\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_copy_assignable_unchecked_v = is_copy_assignable_v<_Ty>;\r\n#endif // ^^^ intrinsic not supported ^^^\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_move_assignable\r\n    : bool_constant<__is_assignable(add_lvalue_reference_t<_Ty>, _Ty)> {\r\n    // determine whether an rvalue _Ty can be assigned to an lvalue _Ty\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_move_assignable_v =\r\n    __is_assignable(add_lvalue_reference_t<_Ty>, _Ty);\r\n\r\n#if defined(_IS_ASSIGNABLE_NOCHECK_SUPPORTED)\r\ntemplate <class _Ty>\r\nstruct _Is_move_assignable_no_precondition_check\r\n    : bool_constant<__is_assignable_no_precondition_check(add_lvalue_reference_t<_Ty>, _Ty)> {};\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_move_assignable_unchecked_v =\r\n    __is_assignable_no_precondition_check(add_lvalue_reference_t<_Ty>, _Ty);\r\n#else // ^^^ Use intrinsic / intrinsic not supported vvv\r\ntemplate <class _Ty>\r\nusing _Is_move_assignable_no_precondition_check = is_move_assignable<_Ty>;\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_move_assignable_unchecked_v = is_move_assignable_v<_Ty>;\r\n#endif // ^^^ intrinsic not supported ^^^\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_destructible : bool_constant<__is_destructible(_Ty)> {\r\n    // true iff remove_all_extents_t<_Ty> is a reference type, or can be explicitly destroyed\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_destructible_v = __is_destructible(_Ty);\r\n\r\n_EXPORT_STD template <class _Ty, class... _Args>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_trivially_constructible\r\n    : bool_constant<__is_trivially_constructible(_Ty, _Args...)> {\r\n    // determine whether direct-initialization of _Ty with _Args... is trivial\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, class... _Args>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_trivially_constructible_v =\r\n    __is_trivially_constructible(_Ty, _Args...);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_trivially_copy_constructible\r\n    : bool_constant<__is_trivially_constructible(_Ty, add_lvalue_reference_t<const _Ty>)> {\r\n    // determine whether direct-initialization of _Ty with an lvalue const _Ty is trivial\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_trivially_copy_constructible_v =\r\n    __is_trivially_constructible(_Ty, add_lvalue_reference_t<const _Ty>);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_trivially_default_constructible\r\n    : bool_constant<__is_trivially_constructible(_Ty)> {\r\n    // determine whether value-initialization of _Ty is trivial\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_trivially_default_constructible_v =\r\n    __is_trivially_constructible(_Ty);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_trivially_move_constructible\r\n    : bool_constant<__is_trivially_constructible(_Ty, _Ty)> {\r\n    // determine whether direct-initialization of _Ty with an rvalue _Ty is trivial\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_trivially_move_constructible_v =\r\n    __is_trivially_constructible(_Ty, _Ty);\r\n\r\n_EXPORT_STD template <class _To, class _From>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_trivially_assignable\r\n    : bool_constant<__is_trivially_assignable(_To, _From)> {\r\n    // determine whether _From can be trivially assigned to _To\r\n};\r\n\r\n_EXPORT_STD template <class _To, class _From>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_trivially_assignable_v = __is_trivially_assignable(_To, _From);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_trivially_copy_assignable\r\n    : bool_constant<__is_trivially_assignable(add_lvalue_reference_t<_Ty>, add_lvalue_reference_t<const _Ty>)> {\r\n    // determine whether an lvalue const _Ty can be trivially assigned to an lvalue _Ty\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_trivially_copy_assignable_v =\r\n    __is_trivially_assignable(add_lvalue_reference_t<_Ty>, add_lvalue_reference_t<const _Ty>);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_trivially_move_assignable\r\n    : bool_constant<__is_trivially_assignable(add_lvalue_reference_t<_Ty>, _Ty)> {\r\n    // determine whether an rvalue _Ty can be trivially assigned to an lvalue _Ty\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_trivially_move_assignable_v =\r\n    __is_trivially_assignable(add_lvalue_reference_t<_Ty>, _Ty);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_trivially_destructible : bool_constant<__is_trivially_destructible(_Ty)> {\r\n    // determine whether remove_all_extents_t<_Ty> is a reference type or can trivially be explicitly destroyed\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_trivially_destructible_v = __is_trivially_destructible(_Ty);\r\n\r\n_EXPORT_STD template <class _Ty, class... _Args>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_nothrow_constructible\r\n    : bool_constant<__is_nothrow_constructible(_Ty, _Args...)> {\r\n    // determine whether direct-initialization of _Ty from _Args... is both valid and not potentially-throwing\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, class... _Args>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_nothrow_constructible_v =\r\n    __is_nothrow_constructible(_Ty, _Args...);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_nothrow_copy_constructible\r\n    : bool_constant<__is_nothrow_constructible(_Ty, add_lvalue_reference_t<const _Ty>)> {\r\n    // determine whether direct-initialization of _Ty from an lvalue const _Ty is both valid\r\n    // and not potentially-throwing\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_nothrow_copy_constructible_v =\r\n    __is_nothrow_constructible(_Ty, add_lvalue_reference_t<const _Ty>);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_nothrow_default_constructible\r\n    : bool_constant<__is_nothrow_constructible(_Ty)> {\r\n    // determine whether value-initialization of _Ty is both valid and not potentially-throwing\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_nothrow_default_constructible_v = __is_nothrow_constructible(_Ty);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_nothrow_move_constructible\r\n    : bool_constant<__is_nothrow_constructible(_Ty, _Ty)> {\r\n    // determine whether direct-initialization of _Ty from an rvalue _Ty is both valid and not potentially-throwing\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_nothrow_move_constructible_v =\r\n    __is_nothrow_constructible(_Ty, _Ty);\r\n\r\n_EXPORT_STD template <class _To, class _From>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_nothrow_assignable : bool_constant<__is_nothrow_assignable(_To, _From)> {\r\n    // determine whether assignment of _From to _To is both valid and not potentially-throwing\r\n};\r\n\r\n_EXPORT_STD template <class _To, class _From>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_nothrow_assignable_v = __is_nothrow_assignable(_To, _From);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_nothrow_copy_assignable\r\n    : bool_constant<__is_nothrow_assignable(add_lvalue_reference_t<_Ty>, add_lvalue_reference_t<const _Ty>)> {\r\n    // determine whether assignment of an lvalue const _Ty to an lvalue _Ty is both valid and not potentially-throwing\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_nothrow_copy_assignable_v =\r\n    __is_nothrow_assignable(add_lvalue_reference_t<_Ty>, add_lvalue_reference_t<const _Ty>);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_nothrow_move_assignable\r\n    : bool_constant<__is_nothrow_assignable(add_lvalue_reference_t<_Ty>, _Ty)> {\r\n    // determine whether assignment of an rvalue _Ty to an lvalue _Ty is both valid and not potentially-throwing\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_nothrow_move_assignable_v =\r\n    __is_nothrow_assignable(add_lvalue_reference_t<_Ty>, _Ty);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_nothrow_destructible : bool_constant<__is_nothrow_destructible(_Ty)> {\r\n    // determine whether remove_all_extents_t<_Ty> is a reference type or has\r\n    // non-potentially-throwing explicit destruction\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_nothrow_destructible_v = __is_nothrow_destructible(_Ty);\r\n\r\ntemplate <class _Ty, bool = is_integral_v<_Ty>>\r\nstruct _Sign_base { // determine whether integral type _Ty is signed or unsigned\r\n    using _Uty = remove_cv_t<_Ty>;\r\n\r\n    static constexpr bool _Signed   = static_cast<_Uty>(-1) < static_cast<_Uty>(0);\r\n    static constexpr bool _Unsigned = !_Signed;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Sign_base<_Ty, false> { // floating-point _Ty is signed\r\n                                // non-arithmetic _Ty is neither signed nor unsigned\r\n    static constexpr bool _Signed   = is_floating_point_v<_Ty>;\r\n    static constexpr bool _Unsigned = false;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_signed : bool_constant<_Sign_base<_Ty>::_Signed> {\r\n    // determine whether _Ty is a signed type\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_signed_v = _Sign_base<_Ty>::_Signed;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_unsigned : bool_constant<_Sign_base<_Ty>::_Unsigned> {\r\n    // determine whether _Ty is an unsigned type\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_unsigned_v = _Sign_base<_Ty>::_Unsigned;\r\n\r\ntemplate <bool>\r\nstruct _Select { // Select between aliases that extract either their first or second parameter\r\n    template <class _Ty1, class>\r\n    using _Apply = _Ty1;\r\n};\r\n\r\ntemplate <>\r\nstruct _Select<false> {\r\n    template <class, class _Ty2>\r\n    using _Apply = _Ty2;\r\n};\r\n\r\ntemplate <size_t>\r\nstruct _Make_signed2; // Choose make_signed strategy by type size\r\n\r\ntemplate <>\r\nstruct _Make_signed2<1> {\r\n    template <class>\r\n    using _Apply = signed char;\r\n};\r\n\r\ntemplate <>\r\nstruct _Make_signed2<2> {\r\n    template <class>\r\n    using _Apply = short;\r\n};\r\n\r\ntemplate <>\r\nstruct _Make_signed2<4> {\r\n    template <class _Ty>\r\n    using _Apply = // assumes LLP64\r\n        typename _Select<is_same_v<_Ty, long> || is_same_v<_Ty, unsigned long>>::template _Apply<long, int>;\r\n};\r\n\r\ntemplate <>\r\nstruct _Make_signed2<8> {\r\n    template <class>\r\n    using _Apply = long long;\r\n};\r\n\r\ntemplate <class _Ty>\r\nusing _Make_signed1 = // signed partner to cv-unqualified _Ty\r\n    typename _Make_signed2<sizeof(_Ty)>::template _Apply<_Ty>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS make_signed { // signed partner to _Ty\r\n    static_assert(_Is_nonbool_integral<_Ty> || is_enum_v<_Ty>,\r\n        \"make_signed<T> requires that T shall be a (possibly cv-qualified) \"\r\n        \"integral type or enumeration but not a bool type.\");\r\n\r\n    using type = typename remove_cv<_Ty>::template _Apply<_Make_signed1>;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing make_signed_t = typename make_signed<_Ty>::type;\r\n\r\ntemplate <size_t>\r\nstruct _Make_unsigned2; // Choose make_unsigned strategy by type size\r\n\r\ntemplate <>\r\nstruct _Make_unsigned2<1> {\r\n    template <class>\r\n    using _Apply = unsigned char;\r\n};\r\n\r\ntemplate <>\r\nstruct _Make_unsigned2<2> {\r\n    template <class>\r\n    using _Apply = unsigned short;\r\n};\r\n\r\ntemplate <>\r\nstruct _Make_unsigned2<4> {\r\n    template <class _Ty>\r\n    using _Apply = // assumes LLP64\r\n        typename _Select<is_same_v<_Ty, long> || is_same_v<_Ty, unsigned long>>::template _Apply<unsigned long,\r\n            unsigned int>;\r\n};\r\n\r\ntemplate <>\r\nstruct _Make_unsigned2<8> {\r\n    template <class>\r\n    using _Apply = unsigned long long;\r\n};\r\n\r\ntemplate <class _Ty>\r\nusing _Make_unsigned1 = // unsigned partner to cv-unqualified _Ty\r\n    typename _Make_unsigned2<sizeof(_Ty)>::template _Apply<_Ty>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS make_unsigned { // unsigned partner to _Ty\r\n    static_assert(_Is_nonbool_integral<_Ty> || is_enum_v<_Ty>,\r\n        \"make_unsigned<T> requires that T shall be a (possibly cv-qualified) \"\r\n        \"integral type or enumeration but not a bool type.\");\r\n\r\n    using type = typename remove_cv<_Ty>::template _Apply<_Make_unsigned1>;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing make_unsigned_t = typename make_unsigned<_Ty>::type;\r\n\r\ntemplate <class _Rep>\r\nconstexpr make_unsigned_t<_Rep> _Unsigned_value(_Rep _Val) { // makes _Val unsigned\r\n    return static_cast<make_unsigned_t<_Rep>>(_Val);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS alignment_of : integral_constant<size_t, alignof(_Ty)> {\r\n}; // determine alignment of _Ty\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr size_t alignment_of_v = alignof(_Ty);\r\n\r\ntemplate <class _Ty, size_t _Len>\r\nunion _Align_type { // union with size _Len bytes and alignment of _Ty\r\n    _Ty _Val;\r\n    char _Pad[_Len];\r\n};\r\n\r\ntemplate <size_t _Len, size_t _Align, class _Ty, bool _Ok>\r\nstruct _Aligned; // define type with size _Len and alignment _Ty\r\n\r\ntemplate <size_t _Len, size_t _Align, class _Ty>\r\nstruct _Aligned<_Len, _Align, _Ty, true> {\r\n    using type = _Align_type<_Ty, _Len>;\r\n};\r\n\r\ntemplate <size_t _Len, size_t _Align>\r\nstruct _Aligned<_Len, _Align, double, false> {\r\n#ifdef _ENABLE_EXTENDED_ALIGNED_STORAGE\r\n    struct type {\r\n        alignas(_Align) char _Space[_Len];\r\n    };\r\n#else // ^^^ defined(_ENABLE_EXTENDED_ALIGNED_STORAGE) / !defined(_ENABLE_EXTENDED_ALIGNED_STORAGE) vvv\r\n#ifndef _DISABLE_EXTENDED_ALIGNED_STORAGE\r\n    static_assert(false,\r\n        \"You've instantiated std::aligned_storage<Len, Align> with an extended alignment (in other \"\r\n        \"words, Align > alignof(max_align_t)). Before VS 2017 15.8, the member \\\"type\\\" would \"\r\n        \"non-conformingly have an alignment of only alignof(max_align_t). VS 2017 15.8 was fixed to \"\r\n        \"handle this correctly, but the fix inherently changes layout and breaks binary compatibility \"\r\n        \"(*only* for uses of aligned_storage with extended alignments). \"\r\n        \"To suppress this error, please define either \"\r\n        \"(1) _ENABLE_EXTENDED_ALIGNED_STORAGE to confirm that you want a type with an extended alignment, or \"\r\n        \"(2) _DISABLE_EXTENDED_ALIGNED_STORAGE to get the old non-conforming behavior.\");\r\n#endif // ^^^ !defined(_DISABLE_EXTENDED_ALIGNED_STORAGE) ^^^\r\n    using type = _Align_type<max_align_t, _Len>;\r\n#endif // ^^^ !defined(_ENABLE_EXTENDED_ALIGNED_STORAGE) ^^^\r\n};\r\n\r\ntemplate <size_t _Len, size_t _Align>\r\nstruct _Aligned<_Len, _Align, int, false> {\r\n    using _Next                 = double;\r\n    static constexpr bool _Fits = _Align <= alignof(_Next);\r\n    using type                  = typename _Aligned<_Len, _Align, _Next, _Fits>::type;\r\n};\r\n\r\ntemplate <size_t _Len, size_t _Align>\r\nstruct _Aligned<_Len, _Align, short, false> {\r\n    using _Next                 = int;\r\n    static constexpr bool _Fits = _Align <= alignof(_Next);\r\n    using type                  = typename _Aligned<_Len, _Align, _Next, _Fits>::type;\r\n};\r\n\r\ntemplate <size_t _Len, size_t _Align>\r\nstruct _Aligned<_Len, _Align, char, false> {\r\n    using _Next                 = short;\r\n    static constexpr bool _Fits = _Align <= alignof(_Next);\r\n    using type                  = typename _Aligned<_Len, _Align, _Next, _Fits>::type;\r\n};\r\n\r\n// TRANSITION, ABI: Internal non-deprecated version to avoid ABI changes due to deprecation\r\ntemplate <size_t _Len, size_t _Align = alignof(max_align_t)>\r\nstruct _Aligned_storage { // define type with size _Len and alignment _Align\r\n    using _Next                 = char;\r\n    static constexpr bool _Fits = _Align <= alignof(_Next);\r\n    using type                  = typename _Aligned<_Len, _Align, _Next, _Fits>::type;\r\n};\r\n\r\ntemplate <size_t _Len, size_t _Align = alignof(max_align_t)>\r\nusing _Aligned_storage_t = typename _Aligned_storage<_Len, _Align>::type;\r\n\r\n_EXPORT_STD template <size_t _Len, size_t _Align = alignof(max_align_t)>\r\nstruct _CXX23_DEPRECATE_ALIGNED_STORAGE _NO_SPECIALIZATIONS_OF_TYPE_TRAITS aligned_storage {\r\n    // define type with size _Len and alignment _Align\r\n    using type = _Aligned_storage_t<_Len, _Align>;\r\n};\r\n\r\n_EXPORT_STD template <size_t _Len, size_t _Align = alignof(max_align_t)>\r\nusing aligned_storage_t _CXX23_DEPRECATE_ALIGNED_STORAGE = _Aligned_storage_t<_Len, _Align>;\r\n\r\ntemplate <size_t... _Vals>\r\nstruct _Maximum;\r\n\r\ntemplate <>\r\nstruct _Maximum<> : integral_constant<size_t, 0> {}; // maximum of nothing is 0\r\n\r\ntemplate <size_t _Val>\r\nstruct _Maximum<_Val> : integral_constant<size_t, _Val> {}; // maximum of _Val is _Val\r\n\r\ntemplate <size_t _First, size_t _Second, size_t... _Rest>\r\nstruct _Maximum<_First, _Second, _Rest...> : _Maximum<(_First < _Second ? _Second : _First), _Rest...>::type {\r\n    // find maximum value in _First, _Second, _Rest...\r\n};\r\n\r\n_EXPORT_STD template <size_t _Len, class... _Types>\r\nstruct _CXX23_DEPRECATE_ALIGNED_UNION _NO_SPECIALIZATIONS_OF_TYPE_TRAITS aligned_union {\r\n    // define type with size at least _Len, for storing anything in _Types\r\n    static constexpr size_t _Max_len        = _Maximum<_Len, sizeof(_Types)...>::value; // NOT sizeof...(_Types)\r\n    static constexpr size_t alignment_value = _Maximum<alignof(_Types)...>::value;\r\n\r\n    using type = _Aligned_storage_t<_Max_len, alignment_value>;\r\n};\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\n_EXPORT_STD template <size_t _Len, class... _Types>\r\nusing aligned_union_t _CXX23_DEPRECATE_ALIGNED_UNION = typename aligned_union<_Len, _Types...>::type;\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n\r\ntemplate <class _Ty, bool = is_enum_v<_Ty>>\r\nstruct _Underlying_type {\r\n    using type = __underlying_type(_Ty);\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Underlying_type<_Ty, false> {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS underlying_type : _Underlying_type<_Ty> {\r\n}; // determine underlying type for enum\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing underlying_type_t = typename _Underlying_type<_Ty>::type;\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr size_t rank_v = 0; // determine number of dimensions of array _Ty\r\n\r\ntemplate <class _Ty, size_t _Nx>\r\nconstexpr size_t rank_v<_Ty[_Nx]> = rank_v<_Ty> + 1;\r\n\r\ntemplate <class _Ty>\r\nconstexpr size_t rank_v<_Ty[]> = rank_v<_Ty> + 1;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS rank : integral_constant<size_t, rank_v<_Ty>> {};\r\n\r\n_EXPORT_STD template <class _Ty, unsigned int _Ix = 0>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr size_t extent_v = 0; // determine extent of dimension _Ix of array _Ty\r\n\r\ntemplate <class _Ty, size_t _Nx>\r\nconstexpr size_t extent_v<_Ty[_Nx], 0> = _Nx;\r\n\r\ntemplate <class _Ty, unsigned int _Ix, size_t _Nx>\r\nconstexpr size_t extent_v<_Ty[_Nx], _Ix> = extent_v<_Ty, _Ix - 1>;\r\n\r\ntemplate <class _Ty, unsigned int _Ix>\r\nconstexpr size_t extent_v<_Ty[], _Ix> = extent_v<_Ty, _Ix - 1>;\r\n\r\n_EXPORT_STD template <class _Ty, unsigned int _Ix = 0>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS extent : integral_constant<size_t, extent_v<_Ty, _Ix>> {};\r\n\r\n_EXPORT_STD template <class _Base, class _Derived>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_base_of : bool_constant<__is_base_of(_Base, _Derived)> {\r\n    // determine whether _Base is a base of or the same as _Derived\r\n};\r\n\r\n_EXPORT_STD template <class _Base, class _Derived>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_base_of_v = __is_base_of(_Base, _Derived);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS decay { // determines decayed version of _Ty\r\n    using _Ty1 = remove_reference_t<_Ty>;\r\n    using _Ty2 = typename _Select<is_function_v<_Ty1>>::template _Apply<add_pointer<_Ty1>, remove_cv<_Ty1>>;\r\n    using type = typename _Select<is_array_v<_Ty1>>::template _Apply<add_pointer<remove_extent_t<_Ty1>>, _Ty2>::type;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing decay_t = typename decay<_Ty>::type;\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nusing _Conditional_type = decltype(false ? _STD declval<_Ty1>() : _STD declval<_Ty2>());\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct _Const_lvalue_cond_oper {};\r\n\r\n// N4950 [meta.trans.other]/3.3.4 (per the proposed resolution of LWG-3205): \"Otherwise, if remove_cvref_t</**/> denotes\r\n// a type...\"\r\ntemplate <class _Ty1, class _Ty2>\r\n    requires requires { typename _Conditional_type<const _Ty1&, const _Ty2&>; }\r\nstruct _Const_lvalue_cond_oper<_Ty1, _Ty2> {\r\n    using type = remove_cvref_t<_Conditional_type<const _Ty1&, const _Ty2&>>;\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2, class = void>\r\nstruct _Decayed_cond_oper : _Const_lvalue_cond_oper<_Ty1, _Ty2> {};\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ty1, class _Ty2, class = void>\r\nstruct _Decayed_cond_oper {};\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct _Decayed_cond_oper<_Ty1, _Ty2, void_t<_Conditional_type<_Ty1, _Ty2>>> {\r\n    using type = decay_t<_Conditional_type<_Ty1, _Ty2>>;\r\n};\r\n\r\n_EXPORT_STD template <class... _Ty>\r\nstruct common_type; // specializations allowed by N5014 [meta.trans.other]/5\r\n\r\n_EXPORT_STD template <class... _Ty>\r\nusing common_type_t = typename common_type<_Ty...>::type;\r\n\r\ntemplate <>\r\nstruct common_type<> {};\r\n\r\ntemplate <class _Ty1>\r\nstruct common_type<_Ty1> : common_type<_Ty1, _Ty1> {};\r\n\r\ntemplate <class _Ty1, class _Ty2, class _Decayed1 = decay_t<_Ty1>, class _Decayed2 = decay_t<_Ty2>>\r\nstruct _Common_type2 : common_type<_Decayed1, _Decayed2> {};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct _Common_type2<_Ty1, _Ty2, _Ty1, _Ty2> : _Decayed_cond_oper<_Ty1, _Ty2> {};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct common_type<_Ty1, _Ty2> : _Common_type2<_Ty1, _Ty2> {};\r\n\r\ntemplate <class _Void, class _Ty1, class _Ty2, class... _Rest>\r\nstruct _Common_type3 {};\r\n\r\ntemplate <class _Ty1, class _Ty2, class... _Rest>\r\nstruct _Common_type3<void_t<common_type_t<_Ty1, _Ty2>>, _Ty1, _Ty2, _Rest...>\r\n    : common_type<common_type_t<_Ty1, _Ty2>, _Rest...> {};\r\n\r\ntemplate <class _Ty1, class _Ty2, class... _Rest>\r\nstruct common_type<_Ty1, _Ty2, _Rest...> : _Common_type3<void, _Ty1, _Ty2, _Rest...> {};\r\n\r\ntemplate <class _Ty>\r\n_Ty _Returns_exactly() noexcept; // not defined\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class, class, template <class> class, template <class> class>\r\nstruct basic_common_reference {}; // specializations allowed by N5014 [meta.trans.other]/7\r\n\r\ntemplate <class _From>\r\nstruct _Copy_cv_impl {\r\n    template <class _To>\r\n    using _Apply = _To;\r\n};\r\ntemplate <class _From>\r\nstruct _Copy_cv_impl<const _From> {\r\n    template <class _To>\r\n    using _Apply = const _To;\r\n};\r\ntemplate <class _From>\r\nstruct _Copy_cv_impl<volatile _From> {\r\n    template <class _To>\r\n    using _Apply = volatile _To;\r\n};\r\ntemplate <class _From>\r\nstruct _Copy_cv_impl<const volatile _From> {\r\n    template <class _To>\r\n    using _Apply = const volatile _To;\r\n};\r\ntemplate <class _From, class _To>\r\nusing _Copy_cv = // N4950 [meta.trans.other]/2.3\r\n    _Copy_cv_impl<_From>::template _Apply<_To>;\r\n\r\ntemplate <class _Ty1>\r\nstruct _Add_qualifiers { // _Add_qualifiers<A>::template _Apply is XREF(A) from N4950 [meta.trans.other]/2.2\r\n    template <class _Ty2>\r\n    using _Apply = _Copy_cv<_Ty1, _Ty2>;\r\n};\r\ntemplate <class _Ty1>\r\nstruct _Add_qualifiers<_Ty1&> {\r\n    template <class _Ty2>\r\n    using _Apply = add_lvalue_reference_t<_Copy_cv<_Ty1, _Ty2>>;\r\n};\r\ntemplate <class _Ty1>\r\nstruct _Add_qualifiers<_Ty1&&> {\r\n    template <class _Ty2>\r\n    using _Apply = add_rvalue_reference_t<_Copy_cv<_Ty1, _Ty2>>;\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nusing _Cond_res = // N4950 [meta.trans.other]/2.4\r\n    decltype(false ? _Returns_exactly<_Ty1>() : _Returns_exactly<_Ty2>());\r\n\r\n_EXPORT_STD template <class...>\r\nstruct _NO_SPECIALIZATIONS_CITING(\"N5014 [meta.rqmts]/4; instead, you should specialize std::basic_common_reference \"\r\n                                  \"as allowed by N5014 [meta.trans.other]/7\") common_reference;\r\n\r\n_EXPORT_STD template <class... _Types>\r\nusing common_reference_t = common_reference<_Types...>::type;\r\n\r\n// N4950 [meta.trans.other]/5.1: \"If sizeof...(T) is zero ...\"\r\ntemplate <>\r\nstruct common_reference<> {};\r\n\r\n// N4950 [meta.trans.other]/5.2: \"...if sizeof...(T) is one ...\"\r\ntemplate <class _Ty>\r\nstruct common_reference<_Ty> {\r\n    using type = _Ty;\r\n};\r\n\r\n// N4950 [meta.trans.other]/5.3: \"...if sizeof...(T) is two...\"\r\n\r\n// N4950 [meta.trans.other]/5.3.4: \"if common_type_t<T1, T2> is well-formed...\"\r\n// N4950 [meta.trans.other]/5.3.5: \"Otherwise, there shall be no member type.\"\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct _Common_reference2C : common_type<_Ty1, _Ty2> {};\r\n\r\n// N4950 [meta.trans.other]/5.3.3: \"if COND_RES(T1, T2) is well-formed...\"\r\ntemplate <class _Ty1, class _Ty2>\r\n    requires requires { typename _Cond_res<_Ty1, _Ty2>; }\r\nstruct _Common_reference2C<_Ty1, _Ty2> {\r\n    using type = _Cond_res<_Ty1, _Ty2>;\r\n};\r\n\r\n// N4950 [meta.trans.other]/5.3.2: \"if basic_common_reference<[...]>::type is well-formed...\"\r\ntemplate <class _Ty1, class _Ty2>\r\nusing _Basic_specialization = basic_common_reference<remove_cvref_t<_Ty1>, remove_cvref_t<_Ty2>,\r\n    _Add_qualifiers<_Ty1>::template _Apply, _Add_qualifiers<_Ty2>::template _Apply>::type;\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct _Common_reference2B : _Common_reference2C<_Ty1, _Ty2> {};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n    requires requires { typename _Basic_specialization<_Ty1, _Ty2>; }\r\nstruct _Common_reference2B<_Ty1, _Ty2> {\r\n    using type = _Basic_specialization<_Ty1, _Ty2>;\r\n};\r\n\r\n// N4950 [meta.trans.other]/5.3.1: \"Let R be COMMON-REF(T1, T2). If T1 and T2 are reference types, R is well-formed, and\r\n// is_convertible_v<add_pointer_t<T1>, add_pointer_t<R>> && is_convertible_v<add_pointer_t<T2>, add_pointer_t<R>> is\r\n// true, then the member typedef type denotes R.\"\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct _Common_reference2A : _Common_reference2B<_Ty1, _Ty2> {};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n    requires is_lvalue_reference_v<_Cond_res<_Copy_cv<_Ty1, _Ty2>&, _Copy_cv<_Ty2, _Ty1>&>>\r\nusing _LL_common_ref = _Cond_res<_Copy_cv<_Ty1, _Ty2>&, _Copy_cv<_Ty2, _Ty1>&>;\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct _Common_reference2AX {};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n    requires requires { typename _LL_common_ref<_Ty1, _Ty2>; }\r\nstruct _Common_reference2AX<_Ty1&, _Ty2&> {\r\n    using type = _LL_common_ref<_Ty1, _Ty2>; // \"both lvalues\" case from N4950 [meta.trans.other]/2.5\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n    requires is_convertible_v<_Ty1&&, _LL_common_ref<const _Ty1, _Ty2>>\r\nstruct _Common_reference2AX<_Ty1&&, _Ty2&> {\r\n    using type = _LL_common_ref<const _Ty1, _Ty2>; // \"rvalue and lvalue\" case from N4950 [meta.trans.other]/2.7\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n    requires is_convertible_v<_Ty2&&, _LL_common_ref<const _Ty2, _Ty1>>\r\nstruct _Common_reference2AX<_Ty1&, _Ty2&&> {\r\n    using type = _LL_common_ref<const _Ty2, _Ty1>; // \"lvalue and rvalue\" case from N4950 [meta.trans.other]/2.8\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nusing _RR_common_ref = remove_reference_t<_LL_common_ref<_Ty1, _Ty2>>&&;\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n    requires is_convertible_v<_Ty1&&, _RR_common_ref<_Ty1, _Ty2>>\r\n          && is_convertible_v<_Ty2&&, _RR_common_ref<_Ty1, _Ty2>>\r\nstruct _Common_reference2AX<_Ty1&&, _Ty2&&> {\r\n    using type = _RR_common_ref<_Ty1, _Ty2>; // \"both rvalues\" case from N4950 [meta.trans.other]/2.6\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nusing _Common_ref_2AX_t = _Common_reference2AX<_Ty1, _Ty2>::type;\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n    requires is_convertible_v<add_pointer_t<_Ty1>, add_pointer_t<_Common_ref_2AX_t<_Ty1, _Ty2>>>\r\n          && is_convertible_v<add_pointer_t<_Ty2>, add_pointer_t<_Common_ref_2AX_t<_Ty1, _Ty2>>>\r\nstruct _Common_reference2A<_Ty1, _Ty2> {\r\n    using type = _Common_ref_2AX_t<_Ty1, _Ty2>;\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct common_reference<_Ty1, _Ty2> : _Common_reference2A<_Ty1, _Ty2> {};\r\n\r\n// N4950 [meta.trans.other]/5.4: \"if sizeof...(T) is greater than two...\"\r\ntemplate <class _Ty1, class _Ty2, class _Ty3, class... _Rest>\r\nstruct common_reference<_Ty1, _Ty2, _Ty3, _Rest...> {};\r\ntemplate <class _Ty1, class _Ty2, class _Ty3, class... _Rest>\r\n    requires requires { typename common_reference_t<_Ty1, _Ty2>; }\r\nstruct common_reference<_Ty1, _Ty2, _Ty3, _Rest...> : common_reference<common_reference_t<_Ty1, _Ty2>, _Ty3, _Rest...> {\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS type_identity {\r\n    using type = _Ty;\r\n};\r\n_EXPORT_STD template <class _Ty>\r\nusing type_identity_t = type_identity<_Ty>::type;\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Type, template <class...> class _Template>\r\nconstexpr bool _Is_specialization_v = false; // true if and only if _Type is a specialization of _Template\r\ntemplate <template <class...> class _Template, class... _Types>\r\nconstexpr bool _Is_specialization_v<_Template<_Types...>, _Template> = true;\r\n\r\ntemplate <class _Type, template <class...> class _Template>\r\nstruct _Is_specialization : bool_constant<_Is_specialization_v<_Type, _Template>> {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _MSVC_INTRINSIC constexpr _Ty&& forward(remove_reference_t<_Ty>& _Arg) noexcept {\r\n    return static_cast<_Ty&&>(_Arg);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _MSVC_INTRINSIC constexpr _Ty&& forward(remove_reference_t<_Ty>&& _Arg) noexcept {\r\n    static_assert(!is_lvalue_reference_v<_Ty>, \"bad forward call\");\r\n    return static_cast<_Ty&&>(_Arg);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _MSVC_INTRINSIC constexpr remove_reference_t<_Ty>&& move(_Ty&& _Arg) noexcept {\r\n    return static_cast<remove_reference_t<_Ty>&&>(_Arg);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _MSVC_INTRINSIC constexpr //\r\n    conditional_t<!is_nothrow_move_constructible_v<_Ty> && is_copy_constructible_v<_Ty>, const _Ty&, _Ty&&>\r\n    move_if_noexcept(_Ty& _Arg) noexcept {\r\n    return _STD move(_Arg);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD constexpr _Ty* addressof(_Ty& _Val) noexcept {\r\n    return __builtin_addressof(_Val);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconst _Ty* addressof(const _Ty&&) = delete;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 5215) // '%s' a function parameter with a volatile qualified type is deprecated in C++20\r\n#pragma warning(disable : 5216) // '%s' a volatile qualified return type is deprecated in C++20\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdeprecated-volatile\"\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD _Ty _Fake_copy_init(_Ty) noexcept;\r\n// _Fake_copy_init<T>(E):\r\n// (1) has type T [decay_t<decltype((E))> if T is deduced],\r\n// (2) is well-formed if and only if E is implicitly convertible to T and T is destructible, and\r\n// (3) is non-throwing if and only if both conversion from decltype((E)) to T and destruction of T are non-throwing.\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n\r\n#pragma warning(pop)\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass reference_wrapper;\r\n\r\n// std::invoke isn't constexpr in C++17, and normally implementers are forbidden from \"strengthening\" constexpr\r\n// (N4950 [constexpr.functions]/1), yet both std::apply and std::visit are required to be constexpr and have\r\n// invoke-like behavior. As a result, we've chosen to apply the part of P1065R2 resolving LWG-2894 as a defect report.\r\n\r\nenum class _Invoker_strategy {\r\n    _Functor,\r\n    _Pmf_object,\r\n    _Pmf_refwrap,\r\n    _Pmf_pointer,\r\n    _Pmd_object,\r\n    _Pmd_refwrap,\r\n    _Pmd_pointer\r\n};\r\n\r\nstruct _Invoker_functor {\r\n    static constexpr _Invoker_strategy _Strategy = _Invoker_strategy::_Functor;\r\n\r\n    template <class _Callable, class... _Types>\r\n    static constexpr auto _Call(_Callable&& _Obj, _Types&&... _Args)\r\n        noexcept(noexcept(static_cast<_Callable&&>(_Obj)(static_cast<_Types&&>(_Args)...))) //\r\n        -> decltype(static_cast<_Callable&&>(_Obj)(static_cast<_Types&&>(_Args)...)) {\r\n        return static_cast<_Callable&&>(_Obj)(static_cast<_Types&&>(_Args)...);\r\n    }\r\n};\r\n\r\nstruct _Invoker_pmf_object {\r\n    static constexpr _Invoker_strategy _Strategy = _Invoker_strategy::_Pmf_object;\r\n\r\n    template <class _Decayed, class _Ty1, class... _Types2>\r\n    static constexpr auto _Call(_Decayed _Pmf, _Ty1&& _Arg1, _Types2&&... _Args2)\r\n        noexcept(noexcept((static_cast<_Ty1&&>(_Arg1).*_Pmf)(static_cast<_Types2&&>(_Args2)...))) //\r\n        -> decltype((static_cast<_Ty1&&>(_Arg1).*_Pmf)(static_cast<_Types2&&>(_Args2)...)) {\r\n        return (static_cast<_Ty1&&>(_Arg1).*_Pmf)(static_cast<_Types2&&>(_Args2)...);\r\n    }\r\n};\r\n\r\nstruct _Invoker_pmf_refwrap {\r\n    static constexpr _Invoker_strategy _Strategy = _Invoker_strategy::_Pmf_refwrap;\r\n\r\n    template <class _Decayed, class _Refwrap, class... _Types2>\r\n    static constexpr auto _Call(_Decayed _Pmf, _Refwrap _Rw, _Types2&&... _Args2)\r\n        noexcept(noexcept((_Rw.get().*_Pmf)(static_cast<_Types2&&>(_Args2)...))) //\r\n        -> decltype((_Rw.get().*_Pmf)(static_cast<_Types2&&>(_Args2)...)) {\r\n        return (_Rw.get().*_Pmf)(static_cast<_Types2&&>(_Args2)...);\r\n    }\r\n};\r\n\r\nstruct _Invoker_pmf_pointer {\r\n    static constexpr _Invoker_strategy _Strategy = _Invoker_strategy::_Pmf_pointer;\r\n\r\n    template <class _Decayed, class _Ty1, class... _Types2>\r\n    static constexpr auto _Call(_Decayed _Pmf, _Ty1&& _Arg1, _Types2&&... _Args2)\r\n        noexcept(noexcept(((*static_cast<_Ty1&&>(_Arg1)).*_Pmf)(static_cast<_Types2&&>(_Args2)...))) //\r\n        -> decltype(((*static_cast<_Ty1&&>(_Arg1)).*_Pmf)(static_cast<_Types2&&>(_Args2)...)) {\r\n        return ((*static_cast<_Ty1&&>(_Arg1)).*_Pmf)(static_cast<_Types2&&>(_Args2)...);\r\n    }\r\n};\r\n\r\nstruct _Invoker_pmd_object {\r\n    static constexpr _Invoker_strategy _Strategy = _Invoker_strategy::_Pmd_object;\r\n\r\n    template <class _Decayed, class _Ty1>\r\n    static constexpr auto _Call(_Decayed _Pmd, _Ty1&& _Arg1) noexcept -> decltype(static_cast<_Ty1&&>(_Arg1).*_Pmd) {\r\n        return static_cast<_Ty1&&>(_Arg1).*_Pmd;\r\n    }\r\n};\r\n\r\nstruct _Invoker_pmd_refwrap {\r\n    static constexpr _Invoker_strategy _Strategy = _Invoker_strategy::_Pmd_refwrap;\r\n\r\n    template <class _Decayed, class _Refwrap>\r\n    static constexpr auto _Call(_Decayed _Pmd, _Refwrap _Rw) noexcept -> decltype(_Rw.get().*_Pmd) {\r\n        return _Rw.get().*_Pmd;\r\n    }\r\n};\r\n\r\nstruct _Invoker_pmd_pointer {\r\n    static constexpr _Invoker_strategy _Strategy = _Invoker_strategy::_Pmd_pointer;\r\n\r\n    template <class _Decayed, class _Ty1>\r\n    static constexpr auto _Call(_Decayed _Pmd, _Ty1&& _Arg1) noexcept(noexcept((*static_cast<_Ty1&&>(_Arg1)).*_Pmd))\r\n        -> decltype((*static_cast<_Ty1&&>(_Arg1)).*_Pmd) {\r\n        return (*static_cast<_Ty1&&>(_Arg1)).*_Pmd;\r\n    }\r\n};\r\n\r\ntemplate <class _Callable, class _Ty1, class _Removed_cvref = _Remove_cvref_t<_Callable>,\r\n    bool _Is_pmf = is_member_function_pointer_v<_Removed_cvref>,\r\n    bool _Is_pmd = is_member_object_pointer_v<_Removed_cvref>>\r\nstruct _Invoker1;\r\n\r\ntemplate <class _Callable, class _Ty1, class _Removed_cvref>\r\nstruct _Invoker1<_Callable, _Ty1, _Removed_cvref, true, false>\r\n    : conditional_t<is_same_v<typename _Is_memfunptr<_Removed_cvref>::_Class_type, _Remove_cvref_t<_Ty1>>\r\n                        || is_base_of_v<typename _Is_memfunptr<_Removed_cvref>::_Class_type, _Remove_cvref_t<_Ty1>>,\r\n          _Invoker_pmf_object,\r\n          conditional_t<_Is_specialization_v<_Remove_cvref_t<_Ty1>, reference_wrapper>, _Invoker_pmf_refwrap,\r\n              _Invoker_pmf_pointer>> {}; // pointer to member function\r\n\r\ntemplate <class _Callable, class _Ty1, class _Removed_cvref>\r\nstruct _Invoker1<_Callable, _Ty1, _Removed_cvref, false, true>\r\n    : conditional_t<\r\n          is_same_v<typename _Is_member_object_pointer<_Removed_cvref>::_Class_type, _Remove_cvref_t<_Ty1>>\r\n              || is_base_of_v<typename _Is_member_object_pointer<_Removed_cvref>::_Class_type, _Remove_cvref_t<_Ty1>>,\r\n          _Invoker_pmd_object,\r\n          conditional_t<_Is_specialization_v<_Remove_cvref_t<_Ty1>, reference_wrapper>, _Invoker_pmd_refwrap,\r\n              _Invoker_pmd_pointer>> {}; // pointer to member data\r\n\r\ntemplate <class _Callable, class _Ty1, class _Removed_cvref>\r\nstruct _Invoker1<_Callable, _Ty1, _Removed_cvref, false, false> : _Invoker_functor {};\r\n\r\n_EXPORT_STD template <class _Callable>\r\nconstexpr auto invoke(_Callable&& _Obj) noexcept(noexcept(static_cast<_Callable&&>(_Obj)()))\r\n    -> decltype(static_cast<_Callable&&>(_Obj)()) {\r\n    return static_cast<_Callable&&>(_Obj)();\r\n}\r\n\r\n_EXPORT_STD template <class _Callable, class _Ty1, class... _Types2>\r\nconstexpr auto invoke(_Callable&& _Obj, _Ty1&& _Arg1, _Types2&&... _Args2)\r\n    noexcept(noexcept(_Invoker1<_Callable, _Ty1>::_Call(\r\n        static_cast<_Callable&&>(_Obj), static_cast<_Ty1&&>(_Arg1), static_cast<_Types2&&>(_Args2)...))) //\r\n    -> decltype(_Invoker1<_Callable, _Ty1>::_Call(\r\n        static_cast<_Callable&&>(_Obj), static_cast<_Ty1&&>(_Arg1), static_cast<_Types2&&>(_Args2)...)) {\r\n    if constexpr (_Invoker1<_Callable, _Ty1>::_Strategy == _Invoker_strategy::_Functor) {\r\n        return static_cast<_Callable&&>(_Obj)(static_cast<_Ty1&&>(_Arg1), static_cast<_Types2&&>(_Args2)...);\r\n    } else if constexpr (_Invoker1<_Callable, _Ty1>::_Strategy == _Invoker_strategy::_Pmf_object) {\r\n        return (static_cast<_Ty1&&>(_Arg1).*_Obj)(static_cast<_Types2&&>(_Args2)...);\r\n    } else if constexpr (_Invoker1<_Callable, _Ty1>::_Strategy == _Invoker_strategy::_Pmf_refwrap) {\r\n        return (_Arg1.get().*_Obj)(static_cast<_Types2&&>(_Args2)...);\r\n    } else if constexpr (_Invoker1<_Callable, _Ty1>::_Strategy == _Invoker_strategy::_Pmf_pointer) {\r\n        return ((*static_cast<_Ty1&&>(_Arg1)).*_Obj)(static_cast<_Types2&&>(_Args2)...);\r\n    } else if constexpr (_Invoker1<_Callable, _Ty1>::_Strategy == _Invoker_strategy::_Pmd_object) {\r\n        return static_cast<_Ty1&&>(_Arg1).*_Obj;\r\n    } else if constexpr (_Invoker1<_Callable, _Ty1>::_Strategy == _Invoker_strategy::_Pmd_refwrap) {\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1956799\r\n        return _Arg1.get().*_Obj;\r\n#else // ^^^ no workaround / workaround vvv\r\n        auto& _Ref = _Arg1.get();\r\n        return _Ref.*_Obj;\r\n#endif // ^^^ workaround ^^^\r\n    } else {\r\n        _STL_INTERNAL_STATIC_ASSERT(_Invoker1<_Callable, _Ty1>::_Strategy == _Invoker_strategy::_Pmd_pointer);\r\n        return (*static_cast<_Ty1&&>(_Arg1)).*_Obj;\r\n    }\r\n}\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4242) // '%s': conversion from '%s' to '%s', possible loss of data (/Wall)\r\n#pragma warning(disable : 4244) // '%s': conversion from '%s' to '%s', possible loss of data (Yes, duplicated message.)\r\n#pragma warning(disable : 4365) // '%s': conversion from '%s' to '%s', signed/unsigned mismatch (/Wall)\r\n\r\ntemplate <class _From, class _To, bool = is_convertible_v<_From, _To>, bool = is_void_v<_To>>\r\nconstexpr bool _Is_nothrow_convertible_v = noexcept(_STD _Fake_copy_init<_To>(_STD declval<_From>()));\r\n\r\n#pragma warning(pop)\r\n\r\ntemplate <class _From, class _To, bool _IsVoid>\r\nconstexpr bool _Is_nothrow_convertible_v<_From, _To, false, _IsVoid> = false;\r\n\r\ntemplate <class _From, class _To>\r\nconstexpr bool _Is_nothrow_convertible_v<_From, _To, true, true> = true;\r\n\r\ntemplate <class _From, class _To>\r\nstruct _Is_nothrow_convertible : bool_constant<_Is_nothrow_convertible_v<_From, _To>> {\r\n    // determine whether _From is nothrow-convertible to _To\r\n};\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _From, class _To>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_nothrow_convertible_v = _Is_nothrow_convertible_v<_From, _To>;\r\n\r\n_EXPORT_STD template <class _From, class _To>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_nothrow_convertible\r\n    : bool_constant<_Is_nothrow_convertible_v<_From, _To>> {};\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _From, class _To, class = void>\r\nstruct _Invoke_convertible : false_type {};\r\n\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\ntemplate <class _To, class _From>\r\nusing _Not_reference_converts_from_temporary = bool_constant<!reference_converts_from_temporary_v<_To, _From>>;\r\n#else // ^^^ no workaround / workaround vvv\r\ntemplate <class _To, class _From>\r\nusing _Not_reference_converts_from_temporary = true_type;\r\n#endif // ^^^ workaround ^^^\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\ntemplate <class _To, class _From>\r\nusing _Not_reference_converts_from_temporary = true_type;\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\ntemplate <class _From, class _To>\r\nstruct _Invoke_convertible<_From, _To, void_t<decltype(_STD _Fake_copy_init<_To>(_STD _Returns_exactly<_From>()))>>\r\n    : _Not_reference_converts_from_temporary<_To, _From> {};\r\n\r\ntemplate <class _From, class _To>\r\nstruct _Invoke_nothrow_convertible\r\n    : bool_constant<noexcept(_STD _Fake_copy_init<_To>(_STD _Returns_exactly<_From>()))> {};\r\n\r\ntemplate <class _Result, bool _Nothrow>\r\nstruct _Invoke_traits_common {\r\n    using type                  = _Result;\r\n    using _Is_invocable         = true_type;\r\n    using _Is_nothrow_invocable = bool_constant<_Nothrow>;\r\n    template <class _Rx>\r\n    using _Is_invocable_r = bool_constant<disjunction_v<is_void<_Rx>, _Invoke_convertible<type, _Rx>>>;\r\n    template <class _Rx>\r\n    using _Is_nothrow_invocable_r = bool_constant<conjunction_v<_Is_nothrow_invocable,\r\n        disjunction<is_void<_Rx>,\r\n            conjunction<_Invoke_convertible<type, _Rx>, _Invoke_nothrow_convertible<type, _Rx>>>>>;\r\n};\r\n\r\ntemplate <class _Void, class _Callable>\r\nstruct _Invoke_traits_zero {\r\n    // selected when _Callable isn't callable with zero _Args\r\n    using _Is_invocable         = false_type;\r\n    using _Is_nothrow_invocable = false_type;\r\n    template <class _Rx>\r\n    using _Is_invocable_r = false_type;\r\n    template <class _Rx>\r\n    using _Is_nothrow_invocable_r = false_type;\r\n};\r\n\r\ntemplate <class _Callable>\r\nusing _Decltype_invoke_zero = decltype(_STD declval<_Callable>()());\r\n\r\ntemplate <class _Callable>\r\nstruct _Invoke_traits_zero<void_t<_Decltype_invoke_zero<_Callable>>, _Callable>\r\n    : _Invoke_traits_common<_Decltype_invoke_zero<_Callable>, noexcept(_STD declval<_Callable>()())> {};\r\n\r\ntemplate <class _Void, class... _Types>\r\nstruct _Invoke_traits_nonzero {\r\n    // selected when _Callable isn't callable with nonzero _Args\r\n    using _Is_invocable         = false_type;\r\n    using _Is_nothrow_invocable = false_type;\r\n    template <class _Rx>\r\n    using _Is_invocable_r = false_type;\r\n    template <class _Rx>\r\n    using _Is_nothrow_invocable_r = false_type;\r\n};\r\n\r\ntemplate <class _Callable, class _Ty1, class... _Types2>\r\nusing _Decltype_invoke_nonzero = decltype(_Invoker1<_Callable, _Ty1>::_Call(\r\n    _STD declval<_Callable>(), _STD declval<_Ty1>(), _STD declval<_Types2>()...));\r\n\r\ntemplate <class _Callable, class _Ty1, class... _Types2>\r\nstruct _Invoke_traits_nonzero<void_t<_Decltype_invoke_nonzero<_Callable, _Ty1, _Types2...>>, _Callable, _Ty1,\r\n    _Types2...> : _Invoke_traits_common<_Decltype_invoke_nonzero<_Callable, _Ty1, _Types2...>,\r\n                      noexcept(_Invoker1<_Callable, _Ty1>::_Call(\r\n                          _STD declval<_Callable>(), _STD declval<_Ty1>(), _STD declval<_Types2>()...))> {};\r\n\r\ntemplate <class _Callable, class... _Args>\r\nusing _Select_invoke_traits = conditional_t<sizeof...(_Args) == 0, _Invoke_traits_zero<void, _Callable>,\r\n    _Invoke_traits_nonzero<void, _Callable, _Args...>>;\r\n\r\n#if _HAS_DEPRECATED_RESULT_OF\r\n_EXPORT_STD template <class _Fty>\r\nstruct _CXX17_DEPRECATE_RESULT_OF _NO_SPECIALIZATIONS_OF_TYPE_TRAITS result_of { // explain usage\r\n    static_assert(false, \"result_of<CallableType> is invalid; use \"\r\n                         \"result_of<CallableType(zero or more argument types)> instead.\");\r\n};\r\n\r\n#define _RESULT_OF(CALL_OPT, X1, X2, X3)                                                                    \\\r\n    template <class _Callable, class... _Args>                                                              \\\r\n    struct _CXX17_DEPRECATE_RESULT_OF result_of<_Callable CALL_OPT(_Args...)>                               \\\r\n        : _Select_invoke_traits<_Callable, _Args...> { /* template to determine result of call operation */ \\\r\n    };\r\n\r\n_NON_MEMBER_CALL(_RESULT_OF, X1, X2, X3)\r\n#undef _RESULT_OF\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\n_EXPORT_STD template <class _Ty>\r\nusing result_of_t _CXX17_DEPRECATE_RESULT_OF = typename result_of<_Ty>::type;\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n#endif // _HAS_DEPRECATED_RESULT_OF\r\n\r\ntemplate <class _Callable, class... _Args>\r\nusing _Invoke_result_t = typename _Select_invoke_traits<_Callable, _Args...>::type;\r\n\r\ntemplate <class _Rx, class _Callable, class... _Args>\r\nusing _Is_invocable_r_ = typename _Select_invoke_traits<_Callable, _Args...>::template _Is_invocable_r<_Rx>;\r\n\r\ntemplate <class _Rx, class _Callable, class... _Args>\r\nstruct _Is_invocable_r : _Is_invocable_r_<_Rx, _Callable, _Args...> {\r\n    // determines whether _Callable is callable with _Args and return type _Rx\r\n};\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _Callable, class... _Args>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS invoke_result : _Select_invoke_traits<_Callable, _Args...> {\r\n    // determine the result type of invoking _Callable with _Args\r\n};\r\n\r\n_EXPORT_STD template <class _Callable, class... _Args>\r\nusing invoke_result_t = typename _Select_invoke_traits<_Callable, _Args...>::type;\r\n\r\n_EXPORT_STD template <class _Callable, class... _Args>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_invocable : _Select_invoke_traits<_Callable, _Args...>::_Is_invocable {\r\n    // determines whether _Callable is callable with _Args\r\n};\r\n\r\n_EXPORT_STD template <class _Callable, class... _Args>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_invocable_v =\r\n    _Select_invoke_traits<_Callable, _Args...>::_Is_invocable::value;\r\n\r\n_EXPORT_STD template <class _Callable, class... _Args>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_nothrow_invocable\r\n    : _Select_invoke_traits<_Callable, _Args...>::_Is_nothrow_invocable {\r\n    // determines whether _Callable is nothrow-callable with _Args\r\n};\r\n\r\n_EXPORT_STD template <class _Callable, class... _Args>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_nothrow_invocable_v =\r\n    _Select_invoke_traits<_Callable, _Args...>::_Is_nothrow_invocable::value;\r\n\r\n_EXPORT_STD template <class _Rx, class _Callable, class... _Args>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_invocable_r : _Is_invocable_r_<_Rx, _Callable, _Args...> {\r\n    // determines whether _Callable is callable with _Args and return type _Rx\r\n};\r\n\r\n_EXPORT_STD template <class _Rx, class _Callable, class... _Args>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_invocable_r_v = _Is_invocable_r_<_Rx, _Callable, _Args...>::value;\r\n\r\n_EXPORT_STD template <class _Rx, class _Callable, class... _Args>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_nothrow_invocable_r\r\n    : _Select_invoke_traits<_Callable, _Args...>::template _Is_nothrow_invocable_r<_Rx> {\r\n    // determines whether _Callable is nothrow-callable with _Args and return type _Rx\r\n};\r\n\r\n_EXPORT_STD template <class _Rx, class _Callable, class... _Args>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_nothrow_invocable_r_v =\r\n    _Select_invoke_traits<_Callable, _Args...>::template _Is_nothrow_invocable_r<_Rx>::value;\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_layout_compatible : bool_constant<__is_layout_compatible(_Ty1, _Ty2)> {};\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_layout_compatible_v = __is_layout_compatible(_Ty1, _Ty2);\r\n\r\n#ifndef __clang__ // TRANSITION, LLVM-135273\r\n_EXPORT_STD template <class _Base, class _Derived>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_pointer_interconvertible_base_of\r\n    : bool_constant<__is_pointer_interconvertible_base_of(_Base, _Derived)> {};\r\n\r\n_EXPORT_STD template <class _Base, class _Derived>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_pointer_interconvertible_base_of_v =\r\n    __is_pointer_interconvertible_base_of(_Base, _Derived);\r\n#else // ^^^ no workaround / workaround vvv\r\n_EXPORT_STD template <class _Base, class _Derived>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_pointer_interconvertible_base_of\r\n    : bool_constant<__is_pointer_interconvertible_base_of(remove_cv_t<_Base>, remove_cv_t<_Derived>)> {};\r\n\r\n_EXPORT_STD template <class _Base, class _Derived>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_pointer_interconvertible_base_of_v =\r\n    __is_pointer_interconvertible_base_of(remove_cv_t<_Base>, remove_cv_t<_Derived>);\r\n#endif // ^^^ workaround ^^^\r\n\r\n#ifndef __clang__ // TRANSITION, LLVM-48860\r\n_EXPORT_STD template <class _ClassTy, class _MemberTy>\r\n_NODISCARD _NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_pointer_interconvertible_with_class(\r\n    _MemberTy _ClassTy::* _Pm) noexcept {\r\n    return __is_pointer_interconvertible_with_class(_ClassTy, _Pm);\r\n}\r\n\r\n_EXPORT_STD template <class _ClassTy1, class _ClassTy2, class _MemberTy1, class _MemberTy2>\r\n_NODISCARD _NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_corresponding_member(\r\n    _MemberTy1 _ClassTy1::* _Pm1, _MemberTy2 _ClassTy2::* _Pm2) noexcept {\r\n    return __is_corresponding_member(_ClassTy1, _ClassTy2, _Pm1, _Pm2);\r\n}\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Ty>\r\nstruct _Function_args {}; // determine whether _Ty is a function\r\n\r\n#define _FUNCTION_ARGS(CALL_OPT, CV_OPT, REF_OPT, NOEXCEPT_OPT)                                           \\\r\n    template <class _Ret, class... _Types>                                                                \\\r\n    struct _Function_args<_Ret CALL_OPT(_Types...) CV_OPT REF_OPT NOEXCEPT_OPT> : _Arg_types<_Types...> { \\\r\n        using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ret;                                 \\\r\n    };\r\n\r\n_NON_MEMBER_CALL_CV_REF_NOEXCEPT(_FUNCTION_ARGS)\r\n#undef _FUNCTION_ARGS\r\n\r\n#define _FUNCTION_ARGS_ELLIPSIS(CV_REF_NOEXCEPT_OPT)                                                            \\\r\n    template <class _Ret, class... _Types>                                                                      \\\r\n    struct _Function_args<_Ret(_Types..., ...) CV_REF_NOEXCEPT_OPT> { /* no calling conventions for ellipsis */ \\\r\n        using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ret;                                       \\\r\n    };\r\n\r\n_CLASS_DEFINE_CV_REF_NOEXCEPT(_FUNCTION_ARGS_ELLIPSIS)\r\n#undef _FUNCTION_ARGS_ELLIPSIS\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Weak_result_type {}; // default definition\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\ntemplate <class _Ty>\r\nstruct _Weak_result_type<_Ty, void_t<typename _Ty::result_type>> { // defined if _Ty::result_type exists\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = typename _Ty::result_type;\r\n};\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Weak_argument_type : _Weak_result_type<_Ty> {}; // default definition\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\ntemplate <class _Ty>\r\nstruct _Weak_argument_type<_Ty, void_t<typename _Ty::argument_type>> : _Weak_result_type<_Ty> {\r\n    // defined if _Ty::argument_type exists\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = typename _Ty::argument_type;\r\n};\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Weak_binary_args : _Weak_argument_type<_Ty> {}; // default definition\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\ntemplate <class _Ty>\r\nstruct _Weak_binary_args<_Ty, void_t<typename _Ty::first_argument_type,\r\n                                  typename _Ty::second_argument_type>>\r\n    : _Weak_argument_type<_Ty> { // defined if both types exist\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = typename _Ty::first_argument_type;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = typename _Ty::second_argument_type;\r\n};\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n\r\ntemplate <class _Ty>\r\nusing _Weak_types = conditional_t<is_function_v<remove_pointer_t<_Ty>>, _Function_args<remove_pointer_t<_Ty>>,\r\n    conditional_t<is_member_function_pointer_v<_Ty>, _Is_memfunptr<remove_cv_t<_Ty>>, _Weak_binary_args<_Ty>>>;\r\n\r\ntemplate <class _Ty>\r\nvoid _Refwrap_ctor_fun(_Identity_t<_Ty&>) noexcept; // not defined\r\ntemplate <class _Ty>\r\nvoid _Refwrap_ctor_fun(_Identity_t<_Ty&&>) = delete;\r\n\r\ntemplate <class _Ty, class _Uty, class = void>\r\nstruct _Refwrap_has_ctor_from : false_type {};\r\n\r\ntemplate <class _Ty, class _Uty>\r\nstruct _Refwrap_has_ctor_from<_Ty, _Uty, void_t<decltype(_STD _Refwrap_ctor_fun<_Ty>(_STD declval<_Uty>()))>>\r\n    : true_type {}; // _STD _Refwrap_ctor_fun is qualified: avoid ADL, handle incomplete types\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass reference_wrapper\r\n#if !_HAS_CXX20\r\n    : public _Weak_types<_Ty>\r\n#endif // !_HAS_CXX20\r\n{\r\npublic:\r\n    static_assert(is_object_v<_Ty> || is_function_v<_Ty>,\r\n        \"reference_wrapper<T> requires T to be an object type or a function type.\");\r\n\r\n    using type = _Ty;\r\n\r\n    template <class _Uty, enable_if_t<conjunction_v<negation<is_same<_Remove_cvref_t<_Uty>, reference_wrapper>>,\r\n                                          _Refwrap_has_ctor_from<_Ty, _Uty>>,\r\n                              int> = 0>\r\n    _CONSTEXPR20 reference_wrapper(_Uty&& _Val) noexcept(\r\n        noexcept(_STD _Refwrap_ctor_fun<_Ty>(_STD declval<_Uty>()))) { // qualified: avoid ADL, handle incomplete types\r\n        _Ty& _Ref = static_cast<_Uty&&>(_Val);\r\n        _Ptr      = _STD addressof(_Ref);\r\n    }\r\n\r\n    _CONSTEXPR20 operator _Ty&() const noexcept {\r\n        return *_Ptr;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Ty& get() const noexcept {\r\n        return *_Ptr;\r\n    }\r\n\r\nprivate:\r\n    _Ty* _Ptr{};\r\n\r\npublic:\r\n    template <class... _Types>\r\n    _CONSTEXPR20 auto operator()(_Types&&... _Args) const\r\n        noexcept(noexcept(_STD invoke(*_Ptr, static_cast<_Types&&>(_Args)...))) //\r\n        -> decltype(_STD invoke(*_Ptr, static_cast<_Types&&>(_Args)...)) {\r\n        return _STD invoke(*_Ptr, static_cast<_Types&&>(_Args)...);\r\n    }\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Ty>\r\nreference_wrapper(_Ty&) -> reference_wrapper<_Ty>;\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 reference_wrapper<_Ty> ref(_Ty& _Val) noexcept {\r\n    return reference_wrapper<_Ty>(_Val);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid ref(const _Ty&&) = delete;\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 reference_wrapper<_Ty> ref(reference_wrapper<_Ty> _Val) noexcept {\r\n    return _Val;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 reference_wrapper<const _Ty> cref(const _Ty& _Val) noexcept {\r\n    return reference_wrapper<const _Ty>(_Val);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid cref(const _Ty&&) = delete;\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _CONSTEXPR20 reference_wrapper<const _Ty> cref(reference_wrapper<_Ty> _Val) noexcept {\r\n    return _Val;\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS unwrap_reference {\r\n    using type = _Ty;\r\n};\r\ntemplate <class _Ty>\r\nstruct unwrap_reference<reference_wrapper<_Ty>> {\r\n    using type = _Ty&;\r\n};\r\n_EXPORT_STD template <class _Ty>\r\nusing unwrap_reference_t = unwrap_reference<_Ty>::type;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing unwrap_ref_decay_t = unwrap_reference_t<decay_t<_Ty>>;\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS unwrap_ref_decay {\r\n    using type = unwrap_ref_decay_t<_Ty>;\r\n};\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Ty>\r\nstruct _Is_swappable;\r\n\r\ntemplate <class _Ty>\r\nstruct _Is_nothrow_swappable;\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _Ty, enable_if_t<is_move_constructible_v<_Ty> && is_move_assignable_v<_Ty>, int> = 0>\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\ntemplate <class _Ty, int _Enabled = 0>\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n_CONSTEXPR20 void swap(_Ty&, _Ty&) noexcept(is_nothrow_move_constructible_v<_Ty> && is_nothrow_move_assignable_v<_Ty>);\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Size, enable_if_t<_Is_swappable<_Ty>::value, int> = 0>\r\n_CONSTEXPR20 void swap(_Ty (&)[_Size], _Ty (&)[_Size]) noexcept(_Is_nothrow_swappable<_Ty>::value);\r\n\r\ntemplate <class _Ty1, class _Ty2, class = void>\r\nstruct _Swappable_with_helper : false_type {}; // swap(declval<_Ty1>(), declval<_Ty2>()) is not valid\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct _Swappable_with_helper<_Ty1, _Ty2, void_t<decltype(swap(_STD declval<_Ty1>(), _STD declval<_Ty2>()))>>\r\n    : true_type {}; // swap(declval<_Ty1>(), declval<_Ty2>()) is valid\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct _Is_swappable_with\r\n    : bool_constant<conjunction_v<_Swappable_with_helper<_Ty1, _Ty2>, _Swappable_with_helper<_Ty2, _Ty1>>> {\r\n    // Determine if expressions with type and value category _Ty1 and _Ty2 can be swapped (and vice versa)\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Is_swappable : _Is_swappable_with<add_lvalue_reference_t<_Ty>, add_lvalue_reference_t<_Ty>>::type {\r\n    // Determine if _Ty lvalues satisfy is_swappable_with\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct _Swap_cannot_throw : bool_constant<noexcept(swap(_STD declval<_Ty1>(), _STD declval<_Ty2>()))\r\n                                          && noexcept(swap(_STD declval<_Ty2>(), _STD declval<_Ty1>()))> {\r\n    // Determine if expressions with type and value category _Ty1 and _Ty2\r\n    // (presumed to satisfy is_swappable_with) can be swapped without emitting exceptions\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct _Is_nothrow_swappable_with\r\n    : bool_constant<conjunction_v<_Is_swappable_with<_Ty1, _Ty2>, _Swap_cannot_throw<_Ty1, _Ty2>>> {\r\n    // Determine if expressions with type and value category _Ty1 and _Ty2\r\n    // satisfy is_swappable_with, and can be swapped without emitting exceptions\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Is_nothrow_swappable\r\n    : _Is_nothrow_swappable_with<add_lvalue_reference_t<_Ty>, add_lvalue_reference_t<_Ty>>::type {\r\n    // Determine if _Ty lvalues satisfy is_nothrow_swappable_with\r\n};\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_swappable_with : _Is_swappable_with<_Ty1, _Ty2>::type {\r\n    // Determine if expressions with type and value category _Ty1 and _Ty2\r\n    // can be swapped (and vice versa)\r\n};\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_swappable_with_v =\r\n    conjunction_v<_Swappable_with_helper<_Ty1, _Ty2>, _Swappable_with_helper<_Ty2, _Ty1>>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_swappable : _Is_swappable<_Ty>::type {\r\n    // Determine if _Ty lvalues satisfy is_swappable_with\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_swappable_v = _Is_swappable<_Ty>::value;\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_nothrow_swappable_with : _Is_nothrow_swappable_with<_Ty1, _Ty2>::type {\r\n    // Determine if expressions with type and value category _Ty1 and _Ty2\r\n    // satisfy is_swappable_with, and can be swapped without emitting exceptions\r\n};\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_nothrow_swappable_with_v =\r\n    _Is_nothrow_swappable_with<_Ty1, _Ty2>::value;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_nothrow_swappable : _Is_nothrow_swappable<_Ty>::type {\r\n    // Determine if _Ty lvalues satisfy is_nothrow_swappable_with\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_nothrow_swappable_v = _Is_nothrow_swappable<_Ty>::value;\r\n#endif // _HAS_CXX17\r\n\r\nnamespace _Has_ADL_swap_detail {\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1681199\r\n    void swap() = delete; // Block unqualified name lookup\r\n#else // ^^^ no workaround / workaround vvv\r\n    void swap();\r\n#endif // ^^^ workaround ^^^\r\n\r\n    template <class, class = void>\r\n    struct _Has_ADL_swap : false_type {};\r\n    template <class _Ty>\r\n    struct _Has_ADL_swap<_Ty, void_t<decltype(swap(_STD declval<_Ty&>(), _STD declval<_Ty&>()))>> : true_type {};\r\n} // namespace _Has_ADL_swap_detail\r\nusing _Has_ADL_swap_detail::_Has_ADL_swap;\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_trivially_swappable_v = conjunction_v<is_trivially_destructible<_Ty>,\r\n    is_trivially_move_constructible<_Ty>, is_trivially_move_assignable<_Ty>, negation<_Has_ADL_swap<_Ty>>>;\r\n\r\n#ifdef __cpp_lib_byte\r\ntemplate <>\r\ninline constexpr bool _Is_trivially_swappable_v<byte> = true;\r\n#endif // defined(__cpp_lib_byte)\r\n\r\ntemplate <class _Ty>\r\nstruct _Is_trivially_swappable : bool_constant<_Is_trivially_swappable_v<_Ty>> {\r\n    // true_type if and only if it is valid to swap two _Ty lvalues by exchanging object representations.\r\n};\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _From, class _To>\r\nconcept convertible_to = __is_convertible_to(_From, _To) && requires { static_cast<_To>(_STD declval<_From>()); };\r\n\r\ntemplate <class _RefWrap, class _Ty, class _RefWrapQ, class _TyQ>\r\nconcept _Ref_wrap_common_reference_exists_with = _Is_specialization_v<_RefWrap, reference_wrapper> && requires {\r\n    typename common_reference_t<typename _RefWrap::type&, _TyQ>;\r\n} && convertible_to<_RefWrapQ, common_reference_t<typename _RefWrap::type&, _TyQ>>;\r\n\r\ntemplate <class _RefWrap, class _Ty, template <class> class _RefWrapQual, template <class> class _TyQual>\r\n    requires (_Ref_wrap_common_reference_exists_with<_RefWrap, _Ty, _RefWrapQual<_RefWrap>, _TyQual<_Ty>>\r\n              && !_Ref_wrap_common_reference_exists_with<_Ty, _RefWrap, _TyQual<_Ty>, _RefWrapQual<_RefWrap>>)\r\nstruct basic_common_reference<_RefWrap, _Ty, _RefWrapQual, _TyQual> {\r\n    using type = common_reference_t<typename _RefWrap::type&, _TyQual<_Ty>>;\r\n};\r\n\r\ntemplate <class _Ty, class _RefWrap, template <class> class _TyQual, template <class> class _RefWrapQual>\r\n    requires (_Ref_wrap_common_reference_exists_with<_RefWrap, _Ty, _RefWrapQual<_RefWrap>, _TyQual<_Ty>>\r\n              && !_Ref_wrap_common_reference_exists_with<_Ty, _RefWrap, _TyQual<_Ty>, _RefWrapQual<_RefWrap>>)\r\nstruct basic_common_reference<_Ty, _RefWrap, _TyQual, _RefWrapQual> {\r\n    using type = common_reference_t<typename _RefWrap::type&, _TyQual<_Ty>>;\r\n};\r\n#endif // _HAS_CXX20\r\n\r\n#define _BITMASK_OPS(_MAYBE_EXPORT, _BITMASK)                                                         \\\r\n    _MAYBE_EXPORT _NODISCARD constexpr _BITMASK operator&(_BITMASK _Left, _BITMASK _Right) noexcept { \\\r\n        using _IntTy = _STD underlying_type_t<_BITMASK>;                                              \\\r\n        return static_cast<_BITMASK>(static_cast<_IntTy>(_Left) & static_cast<_IntTy>(_Right));       \\\r\n    }                                                                                                 \\\r\n                                                                                                      \\\r\n    _MAYBE_EXPORT _NODISCARD constexpr _BITMASK operator|(_BITMASK _Left, _BITMASK _Right) noexcept { \\\r\n        using _IntTy = _STD underlying_type_t<_BITMASK>;                                              \\\r\n        return static_cast<_BITMASK>(static_cast<_IntTy>(_Left) | static_cast<_IntTy>(_Right));       \\\r\n    }                                                                                                 \\\r\n                                                                                                      \\\r\n    _MAYBE_EXPORT _NODISCARD constexpr _BITMASK operator^(_BITMASK _Left, _BITMASK _Right) noexcept { \\\r\n        using _IntTy = _STD underlying_type_t<_BITMASK>;                                              \\\r\n        return static_cast<_BITMASK>(static_cast<_IntTy>(_Left) ^ static_cast<_IntTy>(_Right));       \\\r\n    }                                                                                                 \\\r\n                                                                                                      \\\r\n    _MAYBE_EXPORT constexpr _BITMASK& operator&=(_BITMASK& _Left, _BITMASK _Right) noexcept {         \\\r\n        return _Left = _Left & _Right;                                                                \\\r\n    }                                                                                                 \\\r\n                                                                                                      \\\r\n    _MAYBE_EXPORT constexpr _BITMASK& operator|=(_BITMASK& _Left, _BITMASK _Right) noexcept {         \\\r\n        return _Left = _Left | _Right;                                                                \\\r\n    }                                                                                                 \\\r\n                                                                                                      \\\r\n    _MAYBE_EXPORT constexpr _BITMASK& operator^=(_BITMASK& _Left, _BITMASK _Right) noexcept {         \\\r\n        return _Left = _Left ^ _Right;                                                                \\\r\n    }                                                                                                 \\\r\n                                                                                                      \\\r\n    _MAYBE_EXPORT _NODISCARD constexpr _BITMASK operator~(_BITMASK _Left) noexcept {                  \\\r\n        using _IntTy = _STD underlying_type_t<_BITMASK>;                                              \\\r\n        return static_cast<_BITMASK>(~static_cast<_IntTy>(_Left));                                    \\\r\n    }\r\n\r\ntemplate <class _Bitmask>\r\n_NODISCARD constexpr bool _Bitmask_includes_any(_Bitmask _Left, _Bitmask _Elements) noexcept {\r\n    return (_Left & _Elements) != _Bitmask{};\r\n}\r\n\r\ntemplate <class _Bitmask>\r\n_NODISCARD constexpr bool _Bitmask_includes_all(_Bitmask _Left, _Bitmask _Elements) noexcept {\r\n    return (_Left & _Elements) == _Elements;\r\n}\r\n\r\n// These FNV-1a utility functions are extremely performance sensitive,\r\n// check examples like that in VSO-653642 before making changes.\r\n#if defined(_WIN64)\r\n_INLINE_VAR constexpr size_t _FNV_offset_basis = 14695981039346656037ULL;\r\n_INLINE_VAR constexpr size_t _FNV_prime        = 1099511628211ULL;\r\n#else // ^^^ defined(_WIN64) / !defined(_WIN64) vvv\r\n_INLINE_VAR constexpr size_t _FNV_offset_basis = 2166136261U;\r\n_INLINE_VAR constexpr size_t _FNV_prime        = 16777619U;\r\n#endif // ^^^ !defined(_WIN64) ^^^\r\n\r\n_NODISCARD inline size_t _Fnv1a_append_bytes(size_t _Val, const unsigned char* const _First,\r\n    const size_t _Count) noexcept { // accumulate range [_First, _First + _Count) into partial FNV-1a hash _Val\r\n    for (size_t _Idx = 0; _Idx < _Count; ++_Idx) {\r\n        _Val ^= static_cast<size_t>(_First[_Idx]);\r\n        _Val *= _FNV_prime;\r\n    }\r\n\r\n    return _Val;\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD size_t _Fnv1a_append_range(const size_t _Val, const _Ty* const _First,\r\n    const _Ty* const _Last) noexcept { // accumulate range [_First, _Last) into partial FNV-1a hash _Val\r\n    static_assert(is_trivially_copyable_v<_Ty>, \"Only trivially copyable types can be directly hashed.\");\r\n    const auto _Firstb = reinterpret_cast<const unsigned char*>(_First);\r\n    const auto _Lastb  = reinterpret_cast<const unsigned char*>(_Last);\r\n    return _Fnv1a_append_bytes(_Val, _Firstb, static_cast<size_t>(_Lastb - _Firstb));\r\n}\r\n\r\ntemplate <class _Kty>\r\n_NODISCARD size_t _Fnv1a_append_value(\r\n    const size_t _Val, const _Kty& _Keyval) noexcept { // accumulate _Keyval into partial FNV-1a hash _Val\r\n    static_assert(is_trivially_copyable_v<_Kty>, \"Only trivially copyable types can be directly hashed.\");\r\n    return _Fnv1a_append_bytes(_Val, &reinterpret_cast<const unsigned char&>(_Keyval), sizeof(_Kty));\r\n}\r\n\r\ntemplate <class _Kty>\r\n_NODISCARD size_t _Hash_representation(const _Kty& _Keyval) noexcept { // bitwise hashes the representation of a key\r\n    return _Fnv1a_append_value(_FNV_offset_basis, _Keyval);\r\n}\r\n\r\ntemplate <class _Kty>\r\n_NODISCARD size_t _Hash_array_representation(\r\n    const _Kty* const _First, const size_t _Count) noexcept { // bitwise hashes the representation of an array\r\n    static_assert(is_trivially_copyable_v<_Kty>, \"Only trivially copyable types can be directly hashed.\");\r\n    return _Fnv1a_append_bytes(\r\n        _FNV_offset_basis, reinterpret_cast<const unsigned char*>(_First), _Count * sizeof(_Kty));\r\n}\r\n\r\n_EXPORT_STD template <class _Kty>\r\nstruct hash;\r\n\r\ntemplate <class _Kty, bool _Enabled>\r\nstruct _Conditionally_enabled_hash { // conditionally enabled hash base\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Kty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = size_t;\r\n\r\n    _NODISCARD static size_t operator()(const _Kty& _Keyval)\r\n        noexcept(noexcept(hash<_Kty>::_Do_hash(_Keyval))) /* strengthened */ {\r\n        return hash<_Kty>::_Do_hash(_Keyval);\r\n    }\r\n};\r\n\r\ntemplate <class _Kty>\r\nstruct _Conditionally_enabled_hash<_Kty, false> { // conditionally disabled hash base\r\n    _Conditionally_enabled_hash()                                              = delete;\r\n    _Conditionally_enabled_hash(const _Conditionally_enabled_hash&)            = delete;\r\n    _Conditionally_enabled_hash(_Conditionally_enabled_hash&&)                 = delete;\r\n    _Conditionally_enabled_hash& operator=(const _Conditionally_enabled_hash&) = delete;\r\n    _Conditionally_enabled_hash& operator=(_Conditionally_enabled_hash&&)      = delete;\r\n};\r\n\r\n_EXPORT_STD template <class _Kty>\r\nstruct hash : _Conditionally_enabled_hash<_Kty, !is_const_v<_Kty> && !is_volatile_v<_Kty>\r\n                                                    && (is_enum_v<_Kty> || is_integral_v<_Kty> || is_pointer_v<_Kty>)> {\r\n    // hash functor primary template (handles enums, integrals, and pointers)\r\n    static size_t _Do_hash(const _Kty& _Keyval) noexcept {\r\n        return _Hash_representation(_Keyval);\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct hash<float> {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = float;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = size_t;\r\n    _NODISCARD static size_t operator()(const float _Keyval) noexcept {\r\n        return _Hash_representation(_Keyval == 0.0F ? 0.0F : _Keyval); // map -0 to 0\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct hash<double> {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = double;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = size_t;\r\n    _NODISCARD static size_t operator()(const double _Keyval) noexcept {\r\n        return _Hash_representation(_Keyval == 0.0 ? 0.0 : _Keyval); // map -0 to 0\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct hash<long double> {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = long double;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = size_t;\r\n    _NODISCARD static size_t operator()(const long double _Keyval) noexcept {\r\n        return _Hash_representation(_Keyval == 0.0L ? 0.0L : _Keyval); // map -0 to 0\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct hash<nullptr_t> {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = nullptr_t;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = size_t;\r\n    _NODISCARD static size_t operator()(nullptr_t) noexcept {\r\n        void* _Null{};\r\n        return _Hash_representation(_Null);\r\n    }\r\n};\r\n\r\ntemplate <class _Kty, class = void>\r\nstruct _Is_nothrow_hashable : false_type {}; // tests if std::hash can hash _Kty with noexcept\r\n\r\ntemplate <class _Kty>\r\nstruct _Is_nothrow_hashable<_Kty, void_t<decltype(hash<_Kty>{}(_STD declval<const _Kty&>()))>>\r\n    : bool_constant<noexcept(hash<_Kty>{}(_STD declval<const _Kty&>()))> {};\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct less {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = bool;\r\n\r\n    _NODISCARD constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left < _Right))) /* strengthened */ {\r\n        return _Left < _Right;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct less<void> {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const\r\n        noexcept(noexcept(static_cast<_Ty1&&>(_Left) < static_cast<_Ty2&&>(_Right))) // strengthened\r\n        -> decltype(static_cast<_Ty1&&>(_Left) < static_cast<_Ty2&&>(_Right)) {\r\n        return static_cast<_Ty1&&>(_Left) < static_cast<_Ty2&&>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\n// vvvvvvvvvv DERIVED FROM corecrt_internal_fltintrn.h vvvvvvvvvv\r\n\r\ntemplate <class _FloatingType>\r\nstruct _Floating_type_traits;\r\n\r\ntemplate <>\r\nstruct _Floating_type_traits<float> {\r\n    static constexpr int32_t _Mantissa_bits           = 24; // FLT_MANT_DIG\r\n    static constexpr int32_t _Exponent_bits           = 8; // sizeof(float) * CHAR_BIT - FLT_MANT_DIG\r\n    static constexpr int32_t _Maximum_binary_exponent = 127; // FLT_MAX_EXP - 1\r\n    static constexpr int32_t _Minimum_binary_exponent = -126; // FLT_MIN_EXP - 1\r\n    static constexpr int32_t _Exponent_bias           = 127;\r\n    static constexpr int32_t _Sign_shift              = 31; // _Exponent_bits + _Mantissa_bits - 1\r\n    static constexpr int32_t _Exponent_shift          = 23; // _Mantissa_bits - 1\r\n\r\n    using _Uint_type = uint32_t;\r\n\r\n    static constexpr uint32_t _Exponent_mask             = 0x000000FFu; // (1u << _Exponent_bits) - 1\r\n    static constexpr uint32_t _Normal_mantissa_mask      = 0x00FFFFFFu; // (1u << _Mantissa_bits) - 1\r\n    static constexpr uint32_t _Denormal_mantissa_mask    = 0x007FFFFFu; // (1u << (_Mantissa_bits - 1)) - 1\r\n    static constexpr uint32_t _Special_nan_mantissa_mask = 0x00400000u; // 1u << (_Mantissa_bits - 2)\r\n    static constexpr uint32_t _Shifted_sign_mask         = 0x80000000u; // 1u << _Sign_shift\r\n    static constexpr uint32_t _Shifted_exponent_mask     = 0x7F800000u; // _Exponent_mask << _Exponent_shift\r\n\r\n    static constexpr float _Minimum_value = 0x1.000000p-126f; // FLT_MIN\r\n    static constexpr float _Maximum_value = 0x1.FFFFFEp+127f; // FLT_MAX\r\n};\r\n\r\ntemplate <>\r\nstruct _Floating_type_traits<double> {\r\n    static constexpr int32_t _Mantissa_bits           = 53; // DBL_MANT_DIG\r\n    static constexpr int32_t _Exponent_bits           = 11; // sizeof(double) * CHAR_BIT - DBL_MANT_DIG\r\n    static constexpr int32_t _Maximum_binary_exponent = 1023; // DBL_MAX_EXP - 1\r\n    static constexpr int32_t _Minimum_binary_exponent = -1022; // DBL_MIN_EXP - 1\r\n    static constexpr int32_t _Exponent_bias           = 1023;\r\n    static constexpr int32_t _Sign_shift              = 63; // _Exponent_bits + _Mantissa_bits - 1\r\n    static constexpr int32_t _Exponent_shift          = 52; // _Mantissa_bits - 1\r\n\r\n    using _Uint_type = uint64_t;\r\n\r\n    static constexpr uint64_t _Exponent_mask             = 0x00000000000007FFu; // (1ULL << _Exponent_bits) - 1\r\n    static constexpr uint64_t _Normal_mantissa_mask      = 0x001FFFFFFFFFFFFFu; // (1ULL << _Mantissa_bits) - 1\r\n    static constexpr uint64_t _Denormal_mantissa_mask    = 0x000FFFFFFFFFFFFFu; // (1ULL << (_Mantissa_bits - 1)) - 1\r\n    static constexpr uint64_t _Special_nan_mantissa_mask = 0x0008000000000000u; // 1ULL << (_Mantissa_bits - 2)\r\n    static constexpr uint64_t _Shifted_sign_mask         = 0x8000000000000000u; // 1ULL << _Sign_shift\r\n    static constexpr uint64_t _Shifted_exponent_mask     = 0x7FF0000000000000u; // _Exponent_mask << _Exponent_shift\r\n\r\n    static constexpr double _Minimum_value = 0x1.0000000000000p-1022; // DBL_MIN\r\n    static constexpr double _Maximum_value = 0x1.FFFFFFFFFFFFFp+1023; // DBL_MAX\r\n};\r\n\r\ntemplate <>\r\nstruct _Floating_type_traits<long double> : _Floating_type_traits<double> {};\r\n\r\n// ^^^^^^^^^^ DERIVED FROM corecrt_internal_fltintrn.h ^^^^^^^^^^\r\n\r\ntemplate <class _To, class _From,\r\n    enable_if_t<conjunction_v<bool_constant<sizeof(_To) == sizeof(_From)>, is_trivially_copyable<_To>,\r\n                    is_trivially_copyable<_From>>,\r\n        int> = 0>\r\n_NODISCARD constexpr _To _Bit_cast(const _From& _Val) noexcept {\r\n    return __builtin_bit_cast(_To, _Val);\r\n}\r\n\r\ntemplate <class _Ty, enable_if_t<is_floating_point_v<_Ty>, int> = 0>\r\n_NODISCARD constexpr auto _Float_abs_bits(const _Ty& _Xx) noexcept {\r\n    using _Traits    = _Floating_type_traits<_Ty>;\r\n    using _Uint_type = typename _Traits::_Uint_type;\r\n    const auto _Bits = _Bit_cast<_Uint_type>(_Xx);\r\n    return _Bits & ~_Traits::_Shifted_sign_mask;\r\n}\r\n\r\ntemplate <class _Ty, enable_if_t<is_floating_point_v<_Ty>, int> = 0>\r\n_NODISCARD constexpr _Ty _Float_abs(const _Ty _Xx) noexcept { // constexpr floating-point abs()\r\n    return _Bit_cast<_Ty>(_Float_abs_bits(_Xx));\r\n}\r\n\r\ntemplate <class _Ty, enable_if_t<is_floating_point_v<_Ty>, int> = 0>\r\n_NODISCARD constexpr bool _Is_nan(const _Ty _Xx) noexcept { // constexpr isnan()\r\n    using _Traits = _Floating_type_traits<_Ty>;\r\n    return _Float_abs_bits(_Xx) > _Traits::_Shifted_exponent_mask;\r\n}\r\n\r\ntemplate <class _Ty, enable_if_t<is_floating_point_v<_Ty>, int> = 0>\r\n_NODISCARD constexpr bool _Is_finite(const _Ty _Xx) noexcept { // constexpr isfinite()\r\n    using _Traits = _Floating_type_traits<_Ty>;\r\n    return _Float_abs_bits(_Xx) < _Traits::_Shifted_exponent_mask;\r\n}\r\n\r\ntemplate <bool _IsConst, class _Ty>\r\nusing _Maybe_const = conditional_t<_IsConst, const _Ty, _Ty>;\r\n\r\ntemplate <class _Ty, size_t _Size>\r\nvoid _Swap_trivial_arrays(_Ty (&_Left)[_Size], _Ty (&_Right)[_Size]) noexcept {\r\n    // Swap arrays using temporary buffers of 64 bytes, followed by the tail.\r\n    // In optimized builds, the stack usage optimizes away, and vector registers are used.\r\n    // The 64-byte size has desirable properties:\r\n    // * Big enough to engage AVX-512.\r\n    // * Small enough to be handled by SSE2 (using eight registers).\r\n    // * Avoids excessive stack consumption for non-optimized builds.\r\n    auto _Left_ptr  = reinterpret_cast<unsigned char*>(&_Left);\r\n    auto _Right_ptr = reinterpret_cast<unsigned char*>(&_Right);\r\n\r\n    constexpr size_t _Part_size_bytes = 64;\r\n    constexpr size_t _Size_bytes      = _Size * sizeof(_Ty);\r\n    constexpr size_t _Size_tail       = _Size_bytes % _Part_size_bytes;\r\n    constexpr size_t _Size_parts      = _Size_bytes - _Size_tail;\r\n\r\n    if constexpr (_Size_parts != 0) {\r\n        const auto _Stop = _Left_ptr + _Size_parts;\r\n        do {\r\n            struct _Buffer_type {\r\n                unsigned char _Data[_Part_size_bytes];\r\n            };\r\n\r\n            _STL_INTERNAL_STATIC_ASSERT(sizeof(_Buffer_type) == _Part_size_bytes); // assume no padding\r\n\r\n            const _Buffer_type _Buffer                   = *reinterpret_cast<const _Buffer_type*>(_Left_ptr);\r\n            *reinterpret_cast<_Buffer_type*>(_Left_ptr)  = *reinterpret_cast<const _Buffer_type*>(_Right_ptr);\r\n            *reinterpret_cast<_Buffer_type*>(_Right_ptr) = _Buffer;\r\n            _Left_ptr += _Part_size_bytes;\r\n            _Right_ptr += _Part_size_bytes;\r\n        } while (_Left_ptr != _Stop);\r\n    }\r\n\r\n    if constexpr (_Size_tail != 0) {\r\n        struct _Last_buffer_type {\r\n            unsigned char _Data[_Size_tail];\r\n        };\r\n\r\n        _STL_INTERNAL_STATIC_ASSERT(sizeof(_Last_buffer_type) == _Size_tail); // assume no padding\r\n\r\n        const _Last_buffer_type _Last_buffer              = *reinterpret_cast<const _Last_buffer_type*>(_Left_ptr);\r\n        *reinterpret_cast<_Last_buffer_type*>(_Left_ptr)  = *reinterpret_cast<const _Last_buffer_type*>(_Right_ptr);\r\n        *reinterpret_cast<_Last_buffer_type*>(_Right_ptr) = _Last_buffer;\r\n    }\r\n}\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"known_semantics\")\r\n#pragma pop_macro(\"intrinsic\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _TYPE_TRAITS_\r\n"
  },
  {
    "path": "stl/inc/typeindex",
    "content": "// typeindex standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _TYPEINDEX_\r\n#define _TYPEINDEX_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <typeinfo>\r\n\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#include <cstring>\r\n#endif // _HAS_CXX20\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD class type_index { // wraps a typeinfo for indexing\r\npublic:\r\n    type_index(const type_info& _Tinfo) noexcept : _Tptr(&_Tinfo) {}\r\n\r\n    _NODISCARD size_t hash_code() const noexcept {\r\n        return _Tptr->hash_code();\r\n    }\r\n\r\n    _NODISCARD const char* name() const noexcept {\r\n        return _Tptr->name();\r\n    }\r\n\r\n    _NODISCARD bool operator==(const type_index& _Right) const noexcept {\r\n        return *_Tptr == *_Right._Tptr;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD strong_ordering operator<=>(const type_index& _Right) const noexcept {\r\n        // TRANSITION, DevCom-10326599, should rely on a stable interface\r\n        if (_Tptr == _Right._Tptr) {\r\n            return strong_ordering::equal;\r\n        }\r\n\r\n#pragma push_macro(\"raw_name\") // TRANSITION, GH-2195\r\n#undef raw_name\r\n        return _CSTD strcmp(_Tptr->raw_name() + 1, _Right._Tptr->raw_name() + 1) <=> 0;\r\n#pragma pop_macro(\"raw_name\")\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD bool operator!=(const type_index& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    _NODISCARD bool operator<(const type_index& _Right) const noexcept {\r\n        return _Tptr->before(*_Right._Tptr);\r\n    }\r\n\r\n    _NODISCARD bool operator>=(const type_index& _Right) const noexcept {\r\n        return !(*this < _Right);\r\n    }\r\n\r\n    _NODISCARD bool operator>(const type_index& _Right) const noexcept {\r\n        return _Right < *this;\r\n    }\r\n\r\n    _NODISCARD bool operator<=(const type_index& _Right) const noexcept {\r\n        return !(_Right < *this);\r\n    }\r\n\r\nprivate:\r\n    const type_info* _Tptr;\r\n};\r\n\r\ntemplate <>\r\nstruct hash<type_index> {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = type_index;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = size_t;\r\n\r\n    _NODISCARD static size_t operator()(const type_index& _Keyval) noexcept {\r\n        return _Keyval.hash_code();\r\n    }\r\n};\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _TYPEINDEX_\r\n"
  },
  {
    "path": "stl/inc/typeinfo",
    "content": "// typeinfo standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _TYPEINFO_\r\n#define _TYPEINFO_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <exception>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n#pragma warning(disable : 4275) // non dll-interface class 'X' used as base for dll-interface class 'Y'\r\n\r\n#pragma push_macro(\"raw_name\") // TRANSITION, GH-2195\r\n#undef raw_name\r\n#include <vcruntime_typeinfo.h>\r\n#pragma pop_macro(\"raw_name\")\r\n\r\n_STD_BEGIN\r\n\r\n// size in pointers of std::function and std::any (roughly 3 pointers larger than std::string when building debug)\r\n_INLINE_VAR constexpr int _Small_object_num_ptrs = 6 + 16 / sizeof(void*);\r\n\r\n#if !_HAS_EXCEPTIONS\r\n_EXPORT_STD class _NODISCARD bad_cast : public exception { // base of all bad cast exceptions\r\npublic:\r\n    bad_cast(const char* _Message = \"bad cast\") noexcept : exception(_Message) {}\r\n\r\n    ~bad_cast() noexcept override {}\r\n\r\nprotected:\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n};\r\n\r\n_EXPORT_STD class _NODISCARD bad_typeid : public exception { // base of all bad typeid exceptions\r\npublic:\r\n    bad_typeid(const char* _Message = \"bad typeid\") noexcept : exception(_Message) {}\r\n\r\n    ~bad_typeid() noexcept override {}\r\n\r\nprotected:\r\n    void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n};\r\n\r\nclass _NODISCARD __non_rtti_object : public bad_typeid { // report a non-RTTI object\r\npublic:\r\n    __non_rtti_object(const char* _Message) : bad_typeid(_Message) {}\r\n};\r\n#endif // ^^^ !_HAS_EXCEPTIONS ^^^\r\n\r\n[[noreturn]] inline void _Throw_bad_cast() {\r\n    _THROW(bad_cast{});\r\n}\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma pack(pop)\r\n#pragma warning(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _TYPEINFO_\r\n"
  },
  {
    "path": "stl/inc/unordered_map",
    "content": "// unordered_map standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _UNORDERED_MAP_\r\n#define _UNORDERED_MAP_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <xhash>\r\n\r\n#if _HAS_CXX17\r\n#include <xpolymorphic_allocator.h>\r\n#endif // _HAS_CXX17\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _Kty, // key type\r\n    class _Ty, // mapped type\r\n    class _Tr, // comparator predicate type\r\n    class _Alloc, // actual allocator type (should be value allocator)\r\n    bool _Mfl> // true if multiple equivalent keys are permitted\r\nclass _Umap_traits : public _Tr { // traits required to make _Hash behave like a map\r\npublic:\r\n    using key_type            = _Kty;\r\n    using value_type          = pair<const _Kty, _Ty>;\r\n    using _Mutable_value_type = pair<_Kty, _Ty>;\r\n    using key_compare         = _Tr;\r\n    using allocator_type      = _Alloc;\r\n#if _HAS_CXX17\r\n    using node_type = _Node_handle<_List_node<value_type, typename allocator_traits<_Alloc>::void_pointer>, _Alloc,\r\n        _Node_handle_map_base, _Kty, _Ty>;\r\n#endif // _HAS_CXX17\r\n\r\n    static constexpr bool _Multi = _Mfl;\r\n\r\n    template <class... _Args>\r\n    using _In_place_key_extractor = _In_place_key_extract_map<_Kty, _Args...>;\r\n\r\n    _Umap_traits() = default;\r\n\r\n    explicit _Umap_traits(const _Tr& _Traits) noexcept(is_nothrow_copy_constructible_v<_Tr>) : _Tr(_Traits) {}\r\n\r\n    template <class _Ty1, class _Ty2>\r\n    static const _Kty& _Kfn(const pair<_Ty1, _Ty2>& _Val) noexcept { // extract key from element value\r\n        return _Val.first;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Hasher = hash<_Kty>, class _Keyeq = equal_to<_Kty>,\r\n    class _Alloc = allocator<pair<const _Kty, _Ty>>>\r\nclass unordered_map : public _Hash<_Umap_traits<_Kty, _Ty, _Uhash_compare<_Kty, _Hasher, _Keyeq>, _Alloc, false>> {\r\n    // hash table of {key, mapped} values, unique keys\r\npublic:\r\n    static_assert(!_ENFORCE_MATCHING_ALLOCATORS || is_same_v<pair<const _Kty, _Ty>, typename _Alloc::value_type>,\r\n        _MISMATCHED_ALLOCATOR_MESSAGE(\"unordered_map<Key, Value, Hasher, Eq, Allocator>\", \"pair<const Key, Value>\"));\r\n    static_assert(is_object_v<_Kty>, \"The C++ Standard forbids containers of non-object types \"\r\n                                     \"because of [container.requirements].\");\r\n\r\nprivate:\r\n    using _Mytraits      = _Uhash_compare<_Kty, _Hasher, _Keyeq>;\r\n    using _Mybase        = _Hash<_Umap_traits<_Kty, _Ty, _Mytraits, _Alloc, false>>;\r\n    using _Alnode        = typename _Mybase::_Alnode;\r\n    using _Alnode_traits = typename _Mybase::_Alnode_traits;\r\n    using _Nodeptr       = typename _Mybase::_Nodeptr;\r\n    using _Key_compare   = typename _Mybase::_Key_compare;\r\n\r\npublic:\r\n    using hasher      = _Hasher;\r\n    using key_type    = _Kty;\r\n    using mapped_type = _Ty;\r\n    using key_equal   = _Keyeq;\r\n\r\n    using value_type      = pair<const _Kty, _Ty>;\r\n    using allocator_type  = typename _Mybase::allocator_type;\r\n    using size_type       = typename _Mybase::size_type;\r\n    using difference_type = typename _Mybase::difference_type;\r\n    using pointer         = typename _Mybase::pointer;\r\n    using const_pointer   = typename _Mybase::const_pointer;\r\n    using reference       = value_type&;\r\n    using const_reference = const value_type&;\r\n    using iterator        = typename _Mybase::iterator;\r\n    using const_iterator  = typename _Mybase::const_iterator;\r\n\r\n    using local_iterator       = typename _Mybase::iterator;\r\n    using const_local_iterator = typename _Mybase::const_iterator;\r\n\r\n#if _HAS_CXX17\r\n    using insert_return_type = _Insert_return_type<iterator, typename _Mybase::node_type>;\r\n#endif // _HAS_CXX17\r\n\r\n    unordered_map() : _Mybase(_Key_compare(), allocator_type()) {}\r\n\r\n    explicit unordered_map(const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {}\r\n\r\n    unordered_map(const unordered_map& _Right)\r\n        : _Mybase(_Right, _Alnode_traits::select_on_container_copy_construction(_Right._Getal())) {}\r\n\r\n    unordered_map(const unordered_map& _Right, const allocator_type& _Al) : _Mybase(_Right, _Al) {}\r\n\r\n    explicit unordered_map(size_type _Buckets) : _Mybase(_Key_compare(), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n    }\r\n\r\n    unordered_map(size_type _Buckets, const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n    }\r\n\r\n    unordered_map(size_type _Buckets, const hasher& _Hasharg) : _Mybase(_Key_compare(_Hasharg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n    }\r\n\r\n    unordered_map(size_type _Buckets, const hasher& _Hasharg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n    }\r\n\r\n    unordered_map(size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n    }\r\n\r\n    unordered_map(size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_map(_Iter _First, _Iter _Last) : _Mybase(_Key_compare(), allocator_type()) {\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_map(_Iter _First, _Iter _Last, const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_map(_Iter _First, _Iter _Last, size_type _Buckets) : _Mybase(_Key_compare(), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_map(_Iter _First, _Iter _Last, size_type _Buckets, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_map(_Iter _First, _Iter _Last, size_type _Buckets, const hasher& _Hasharg)\r\n        : _Mybase(_Key_compare(_Hasharg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_map(_Iter _First, _Iter _Last, size_type _Buckets, const hasher& _Hasharg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_map(_Iter _First, _Iter _Last, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_map(_Iter _First, _Iter _Last, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg,\r\n        const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_First, _Last);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_map(from_range_t, _Rng&& _Range) : _Mybase(_Key_compare(), allocator_type()) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_map(from_range_t, _Rng&& _Range, const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_map(from_range_t, _Rng&& _Range, size_type _Buckets) : _Mybase(_Key_compare(), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_map(from_range_t, _Rng&& _Range, size_type _Buckets, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_map(from_range_t, _Rng&& _Range, size_type _Buckets, const hasher& _Hasharg)\r\n        : _Mybase(_Key_compare(_Hasharg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_map(from_range_t, _Rng&& _Range, size_type _Buckets, const hasher& _Hasharg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_map(from_range_t, _Rng&& _Range, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_map(from_range_t, _Rng&& _Range, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg,\r\n        const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    unordered_map& operator=(const unordered_map& _Right) {\r\n        _Mybase::operator=(_Right);\r\n        return *this;\r\n    }\r\n\r\n    unordered_map(unordered_map&& _Right) : _Mybase(_STD move(_Right)) {}\r\n\r\n    unordered_map(unordered_map&& _Right, const allocator_type& _Al) : _Mybase(_STD move(_Right), _Al) {}\r\n\r\n    unordered_map& operator=(unordered_map&& _Right)\r\n        noexcept(_Alnode_traits::is_always_equal::value\r\n                 && is_nothrow_move_assignable_v<_Hasher> && is_nothrow_move_assignable_v<_Keyeq>) {\r\n        _Mybase::operator=(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    mapped_type& operator[](key_type&& _Keyval) {\r\n        return this->_Try_emplace(_STD move(_Keyval)).first->_Myval.second;\r\n    }\r\n\r\n    void swap(unordered_map& _Right) noexcept(noexcept(_Mybase::swap(_Right))) {\r\n        _Mybase::swap(_Right);\r\n    }\r\n\r\n    using _Mybase::insert;\r\n\r\n    template <class _Valty, enable_if_t<is_constructible_v<value_type, _Valty>, int> = 0>\r\n    pair<iterator, bool> insert(_Valty&& _Val) {\r\n        return this->emplace(_STD forward<_Valty>(_Val));\r\n    }\r\n\r\n    template <class _Valty, enable_if_t<is_constructible_v<value_type, _Valty>, int> = 0>\r\n    iterator insert(const_iterator _Where, _Valty&& _Val) {\r\n        return this->emplace_hint(_Where, _STD forward<_Valty>(_Val));\r\n    }\r\n\r\n    template <class... _Mappedty>\r\n    pair<iterator, bool> try_emplace(const key_type& _Keyval, _Mappedty&&... _Mapval) {\r\n        const auto _Result = this->_Try_emplace(_Keyval, _STD forward<_Mappedty>(_Mapval)...);\r\n        return {this->_List._Make_iter(_Result.first), _Result.second};\r\n    }\r\n\r\n    template <class... _Mappedty>\r\n    pair<iterator, bool> try_emplace(key_type&& _Keyval, _Mappedty&&... _Mapval) {\r\n        const auto _Result = this->_Try_emplace(_STD move(_Keyval), _STD forward<_Mappedty>(_Mapval)...);\r\n        return {this->_List._Make_iter(_Result.first), _Result.second};\r\n    }\r\n\r\n    template <class... _Mappedty>\r\n    iterator try_emplace(const const_iterator _Hint, const key_type& _Keyval, _Mappedty&&... _Mapval) {\r\n        return this->_List._Make_iter(\r\n            this->_Try_emplace_hint(_Hint._Ptr, _Keyval, _STD forward<_Mappedty>(_Mapval)...));\r\n    }\r\n\r\n    template <class... _Mappedty>\r\n    iterator try_emplace(const const_iterator _Hint, key_type&& _Keyval, _Mappedty&&... _Mapval) {\r\n        return this->_List._Make_iter(\r\n            this->_Try_emplace_hint(_Hint._Ptr, _STD move(_Keyval), _STD forward<_Mappedty>(_Mapval)...));\r\n    }\r\n\r\nprivate:\r\n    template <class _Keyty, class _Mappedty>\r\n    pair<iterator, bool> _Insert_or_assign(_Keyty&& _Keyval_arg, _Mappedty&& _Mapval) {\r\n        const auto& _Keyval   = _Keyval_arg;\r\n        const size_t _Hashval = this->_Traitsobj(_Keyval);\r\n        auto _Target          = this->_Find_last(_Keyval, _Hashval);\r\n        if (_Target._Duplicate) {\r\n            _Target._Duplicate->_Myval.second = _STD forward<_Mappedty>(_Mapval);\r\n            return {this->_List._Make_iter(_Target._Duplicate), false};\r\n        }\r\n\r\n        this->_Check_max_size();\r\n        // invalidates _Keyval:\r\n        _List_node_emplace_op2<_Alnode> _Newnode(\r\n            this->_Getal(), _STD forward<_Keyty>(_Keyval_arg), _STD forward<_Mappedty>(_Mapval));\r\n        if (this->_Check_rehash_required_1()) {\r\n            this->_Rehash_for_1();\r\n            _Target = this->_Find_last(_Newnode._Ptr->_Myval.first, _Hashval);\r\n        }\r\n\r\n        return {this->_List._Make_iter(\r\n                    this->_Insert_new_node_before(_Hashval, _Target._Insert_before, _Newnode._Release())),\r\n            true};\r\n    }\r\n\r\n    template <class _Keyty, class _Mappedty>\r\n    iterator _Insert_or_assign(const _Nodeptr _Hint, _Keyty&& _Keyval_arg, _Mappedty&& _Mapval) {\r\n        const auto& _Keyval   = _Keyval_arg;\r\n        const size_t _Hashval = this->_Traitsobj(_Keyval);\r\n        auto _Target          = this->_Find_hint(_Hint, _Keyval, _Hashval);\r\n        if (_Target._Duplicate) {\r\n            _Target._Duplicate->_Myval.second = _STD forward<_Mappedty>(_Mapval);\r\n            return this->_List._Make_iter(_Target._Duplicate);\r\n        }\r\n\r\n        this->_Check_max_size();\r\n        // invalidates _Keyval:\r\n        _List_node_emplace_op2<_Alnode> _Newnode(\r\n            this->_Getal(), _STD forward<_Keyty>(_Keyval_arg), _STD forward<_Mappedty>(_Mapval));\r\n        if (this->_Check_rehash_required_1()) {\r\n            this->_Rehash_for_1();\r\n            _Target = this->_Find_hint(_Hint, _Newnode._Ptr->_Myval.first, _Hashval);\r\n        }\r\n\r\n        return this->_List._Make_iter(\r\n            this->_Insert_new_node_before(_Hashval, _Target._Insert_before, _Newnode._Release()));\r\n    }\r\n\r\npublic:\r\n    template <class _Mappedty>\r\n    pair<iterator, bool> insert_or_assign(const key_type& _Keyval, _Mappedty&& _Mapval) {\r\n        return _Insert_or_assign(_Keyval, _STD forward<_Mappedty>(_Mapval));\r\n    }\r\n\r\n    template <class _Mappedty>\r\n    pair<iterator, bool> insert_or_assign(key_type&& _Keyval, _Mappedty&& _Mapval) {\r\n        return _Insert_or_assign(_STD move(_Keyval), _STD forward<_Mappedty>(_Mapval));\r\n    }\r\n\r\n    template <class _Mappedty>\r\n    iterator insert_or_assign(const_iterator _Hint, const key_type& _Keyval, _Mappedty&& _Mapval) {\r\n        return _Insert_or_assign(_Hint._Ptr, _Keyval, _STD forward<_Mappedty>(_Mapval));\r\n    }\r\n\r\n    template <class _Mappedty>\r\n    iterator insert_or_assign(const_iterator _Hint, key_type&& _Keyval, _Mappedty&& _Mapval) {\r\n        return _Insert_or_assign(_Hint._Ptr, _STD move(_Keyval), _STD forward<_Mappedty>(_Mapval));\r\n    }\r\n\r\n    unordered_map(initializer_list<value_type> _Ilist) : _Mybase(_Key_compare(), allocator_type()) {\r\n        insert(_Ilist);\r\n    }\r\n\r\n    unordered_map(initializer_list<value_type> _Ilist, const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {\r\n        insert(_Ilist);\r\n    }\r\n\r\n    unordered_map(initializer_list<value_type> _Ilist, size_type _Buckets) : _Mybase(_Key_compare(), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_Ilist);\r\n    }\r\n\r\n    unordered_map(initializer_list<value_type> _Ilist, size_type _Buckets, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_Ilist);\r\n    }\r\n\r\n    unordered_map(initializer_list<value_type> _Ilist, size_type _Buckets, const hasher& _Hasharg)\r\n        : _Mybase(_Key_compare(_Hasharg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_Ilist);\r\n    }\r\n\r\n    unordered_map(\r\n        initializer_list<value_type> _Ilist, size_type _Buckets, const hasher& _Hasharg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_Ilist);\r\n    }\r\n\r\n    unordered_map(\r\n        initializer_list<value_type> _Ilist, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_Ilist);\r\n    }\r\n\r\n    unordered_map(initializer_list<value_type> _Ilist, size_type _Buckets, const hasher& _Hasharg,\r\n        const _Keyeq& _Keyeqarg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_Ilist);\r\n    }\r\n\r\n    unordered_map& operator=(initializer_list<value_type> _Ilist) {\r\n        _Mybase::clear();\r\n        insert(_Ilist);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD hasher hash_function() const {\r\n        return _Mybase::_Traitsobj._Mypair._Get_first();\r\n    }\r\n\r\n    _NODISCARD key_equal key_eq() const {\r\n        return _Mybase::_Traitsobj._Mypair._Myval2._Get_first();\r\n    }\r\n\r\n    mapped_type& operator[](const key_type& _Keyval) {\r\n        return this->_Try_emplace(_Keyval).first->_Myval.second;\r\n    }\r\n\r\n    _NODISCARD mapped_type& at(const key_type& _Keyval) {\r\n        const auto _Target = this->_Find_last(_Keyval, this->_Traitsobj(_Keyval));\r\n        if (_Target._Duplicate) {\r\n            return _Target._Duplicate->_Myval.second;\r\n        }\r\n\r\n        _Xout_of_range(\"invalid unordered_map<K, T> key\");\r\n    }\r\n\r\n    _NODISCARD const mapped_type& at(const key_type& _Keyval) const {\r\n        const auto _Target = this->_Find_last(_Keyval, this->_Traitsobj(_Keyval));\r\n        if (_Target._Duplicate) {\r\n            return _Target._Duplicate->_Myval.second;\r\n        }\r\n\r\n        _Xout_of_range(\"invalid unordered_map<K, T> key\");\r\n    }\r\n\r\n    using _Mybase::_Unchecked_begin;\r\n    using _Mybase::_Unchecked_end;\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Iter, class _Hasher = hash<_Guide_key_t<_Iter>>, class _Keyeq = equal_to<_Guide_key_t<_Iter>>,\r\n    class _Alloc = allocator<_Guide_pair_t<_Iter>>,\r\n    enable_if_t<\r\n        conjunction_v<_Is_iterator<_Iter>, _Is_hasher<_Hasher>, negation<_Is_allocator<_Keyeq>>, _Is_allocator<_Alloc>>,\r\n        int> = 0>\r\nunordered_map(_Iter, _Iter, _Guide_size_type_t<_Alloc> = 0, _Hasher = _Hasher(), _Keyeq = _Keyeq(), _Alloc = _Alloc())\r\n    -> unordered_map<_Guide_key_t<_Iter>, _Guide_val_t<_Iter>, _Hasher, _Keyeq, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Ty, class _Hasher = hash<_Kty>, class _Keyeq = equal_to<_Kty>,\r\n    class _Alloc = allocator<pair<const _Kty, _Ty>>,\r\n    enable_if_t<conjunction_v<_Is_hasher<_Hasher>, negation<_Is_allocator<_Keyeq>>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_map(initializer_list<pair<_Kty, _Ty>>, _Guide_size_type_t<_Alloc> = 0, _Hasher = _Hasher(), _Keyeq = _Keyeq(),\r\n    _Alloc = _Alloc()) -> unordered_map<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>;\r\n\r\ntemplate <class _Iter, class _Alloc, enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_map(_Iter, _Iter, _Alloc) -> unordered_map<_Guide_key_t<_Iter>, _Guide_val_t<_Iter>,\r\n    hash<_Guide_key_t<_Iter>>, equal_to<_Guide_key_t<_Iter>>, _Alloc>;\r\n\r\ntemplate <class _Iter, class _Alloc, enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_map(_Iter, _Iter, _Guide_size_type_t<_Alloc>, _Alloc) -> unordered_map<_Guide_key_t<_Iter>,\r\n    _Guide_val_t<_Iter>, hash<_Guide_key_t<_Iter>>, equal_to<_Guide_key_t<_Iter>>, _Alloc>;\r\n\r\ntemplate <class _Iter, class _Hasher, class _Alloc,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_hasher<_Hasher>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_map(_Iter, _Iter, _Guide_size_type_t<_Alloc>, _Hasher, _Alloc)\r\n    -> unordered_map<_Guide_key_t<_Iter>, _Guide_val_t<_Iter>, _Hasher, equal_to<_Guide_key_t<_Iter>>, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Ty, class _Alloc, enable_if_t<_Is_allocator<_Alloc>::value, int> = 0>\r\nunordered_map(initializer_list<pair<_Kty, _Ty>>, _Alloc)\r\n    -> unordered_map<_Kty, _Ty, hash<_Kty>, equal_to<_Kty>, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Ty, class _Alloc, enable_if_t<_Is_allocator<_Alloc>::value, int> = 0>\r\nunordered_map(initializer_list<pair<_Kty, _Ty>>, _Guide_size_type_t<_Alloc>, _Alloc)\r\n    -> unordered_map<_Kty, _Ty, hash<_Kty>, equal_to<_Kty>, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Ty, class _Hasher, class _Alloc,\r\n    enable_if_t<conjunction_v<_Is_hasher<_Hasher>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_map(initializer_list<pair<_Kty, _Ty>>, _Guide_size_type_t<_Alloc>, _Hasher, _Alloc)\r\n    -> unordered_map<_Kty, _Ty, _Hasher, equal_to<_Kty>, _Alloc>;\r\n\r\n#if _HAS_CXX23\r\ntemplate <_RANGES input_range _Rng, _Hasher_for_container _Hasher = hash<_Range_key_type<_Rng>>,\r\n    _Not_allocator_for_container _Keyeq = equal_to<_Range_key_type<_Rng>>,\r\n    _Allocator_for_container _Alloc     = allocator<_Range_to_alloc_type<_Rng>>>\r\nunordered_map(from_range_t, _Rng&&, _Guide_size_type_t<_Alloc> = 0, _Hasher = _Hasher(), _Keyeq = _Keyeq(),\r\n    _Alloc = _Alloc()) -> unordered_map<_Range_key_type<_Rng>, _Range_mapped_type<_Rng>, _Hasher, _Keyeq, _Alloc>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc>\r\nunordered_map(from_range_t, _Rng&&, _Guide_size_type_t<_Alloc>, _Alloc) -> unordered_map<_Range_key_type<_Rng>,\r\n    _Range_mapped_type<_Rng>, hash<_Range_key_type<_Rng>>, equal_to<_Range_key_type<_Rng>>, _Alloc>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc>\r\nunordered_map(from_range_t, _Rng&&, _Alloc) -> unordered_map<_Range_key_type<_Rng>, _Range_mapped_type<_Rng>,\r\n    hash<_Range_key_type<_Rng>>, equal_to<_Range_key_type<_Rng>>, _Alloc>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Hasher_for_container _Hasher, _Allocator_for_container _Alloc>\r\nunordered_map(from_range_t, _Rng&&, _Guide_size_type_t<_Alloc>, _Hasher, _Alloc)\r\n    -> unordered_map<_Range_key_type<_Rng>, _Range_mapped_type<_Rng>, _Hasher, equal_to<_Range_key_type<_Rng>>, _Alloc>;\r\n#endif // _HAS_CXX23\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Hasher, class _Keyeq, class _Alloc>\r\nvoid swap(unordered_map<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Left,\r\n    unordered_map<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Right) noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Hasher, class _Keyeq, class _Alloc, class _Pr>\r\nunordered_map<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>::size_type erase_if(\r\n    unordered_map<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Cont, _Pr _Pred) {\r\n    return _STD _Erase_nodes_if(_Cont, _STD _Pass_fn(_Pred));\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Hasher, class _Keyeq, class _Alloc>\r\n_NODISCARD bool operator==(const unordered_map<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Left,\r\n    const unordered_map<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Right) {\r\n    return _Hash_equal(_Left, _Right);\r\n}\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _Kty, class _Ty, class _Hasher, class _Keyeq, class _Alloc>\r\n_NODISCARD bool operator!=(const unordered_map<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Left,\r\n    const unordered_map<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n#endif // !_HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Hasher = hash<_Kty>, class _Keyeq = equal_to<_Kty>,\r\n    class _Alloc = allocator<pair<const _Kty, _Ty>>>\r\nclass unordered_multimap : public _Hash<_Umap_traits<_Kty, _Ty, _Uhash_compare<_Kty, _Hasher, _Keyeq>, _Alloc, true>> {\r\n    // hash table of {key, mapped} values, non-unique keys\r\npublic:\r\n    static_assert(!_ENFORCE_MATCHING_ALLOCATORS || is_same_v<pair<const _Kty, _Ty>, typename _Alloc::value_type>,\r\n        _MISMATCHED_ALLOCATOR_MESSAGE(\r\n            \"unordered_multimap<Key, Value, Hasher, Eq, Allocator>\", \"pair<const Key, Value>\"));\r\n    static_assert(is_object_v<_Kty>, \"The C++ Standard forbids containers of non-object types \"\r\n                                     \"because of [container.requirements].\");\r\n\r\nprivate:\r\n    using _Mytraits      = _Uhash_compare<_Kty, _Hasher, _Keyeq>;\r\n    using _Mybase        = _Hash<_Umap_traits<_Kty, _Ty, _Mytraits, _Alloc, true>>;\r\n    using _Alnode        = typename _Mybase::_Alnode;\r\n    using _Alnode_traits = typename _Mybase::_Alnode_traits;\r\n    using _Key_compare   = typename _Mybase::_Key_compare;\r\n\r\npublic:\r\n    using hasher      = _Hasher;\r\n    using key_type    = _Kty;\r\n    using mapped_type = _Ty;\r\n    using key_equal   = _Keyeq;\r\n\r\n    using value_type      = pair<const _Kty, _Ty>;\r\n    using allocator_type  = typename _Mybase::allocator_type;\r\n    using size_type       = typename _Mybase::size_type;\r\n    using difference_type = typename _Mybase::difference_type;\r\n    using pointer         = typename _Mybase::pointer;\r\n    using const_pointer   = typename _Mybase::const_pointer;\r\n    using reference       = value_type&;\r\n    using const_reference = const value_type&;\r\n    using iterator        = typename _Mybase::iterator;\r\n    using const_iterator  = typename _Mybase::const_iterator;\r\n\r\n    using local_iterator       = typename _Mybase::iterator;\r\n    using const_local_iterator = typename _Mybase::const_iterator;\r\n\r\n    unordered_multimap() : _Mybase(_Key_compare(), allocator_type()) {} // construct empty map from defaults\r\n\r\n    explicit unordered_multimap(const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(), _Al) {} // construct empty map from defaults, allocator\r\n\r\n    unordered_multimap(const unordered_multimap& _Right)\r\n        : _Mybase(_Right, _Alnode_traits::select_on_container_copy_construction(_Right._Getal())) {}\r\n\r\n    unordered_multimap(const unordered_multimap& _Right, const allocator_type& _Al) : _Mybase(_Right, _Al) {}\r\n\r\n    explicit unordered_multimap(size_type _Buckets) : _Mybase(_Key_compare(), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n    }\r\n\r\n    unordered_multimap(size_type _Buckets, const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n    }\r\n\r\n    unordered_multimap(size_type _Buckets, const hasher& _Hasharg) : _Mybase(_Key_compare(_Hasharg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n    }\r\n\r\n    unordered_multimap(size_type _Buckets, const hasher& _Hasharg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n    }\r\n\r\n    unordered_multimap(size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n    }\r\n\r\n    unordered_multimap(size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_multimap(_Iter _First, _Iter _Last) : _Mybase(_Key_compare(), allocator_type()) {\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_multimap(_Iter _First, _Iter _Last, const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_multimap(_Iter _First, _Iter _Last, size_type _Buckets) : _Mybase(_Key_compare(), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_multimap(_Iter _First, _Iter _Last, size_type _Buckets, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_multimap(_Iter _First, _Iter _Last, size_type _Buckets, const hasher& _Hasharg)\r\n        : _Mybase(_Key_compare(_Hasharg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_multimap(_Iter _First, _Iter _Last, size_type _Buckets, const hasher& _Hasharg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_multimap(_Iter _First, _Iter _Last, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_multimap(_Iter _First, _Iter _Last, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg,\r\n        const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_First, _Last);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_multimap(from_range_t, _Rng&& _Range) : _Mybase(_Key_compare(), allocator_type()) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_multimap(from_range_t, _Rng&& _Range, const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_multimap(from_range_t, _Rng&& _Range, size_type _Buckets) : _Mybase(_Key_compare(), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_multimap(from_range_t, _Rng&& _Range, size_type _Buckets, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_multimap(from_range_t, _Rng&& _Range, size_type _Buckets, const hasher& _Hasharg)\r\n        : _Mybase(_Key_compare(_Hasharg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_multimap(\r\n        from_range_t, _Rng&& _Range, size_type _Buckets, const hasher& _Hasharg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_multimap(from_range_t, _Rng&& _Range, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_multimap(from_range_t, _Rng&& _Range, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg,\r\n        const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    unordered_multimap& operator=(const unordered_multimap& _Right) {\r\n        _Mybase::operator=(_Right);\r\n        return *this;\r\n    }\r\n\r\n    unordered_multimap(unordered_multimap&& _Right) : _Mybase(_STD move(_Right)) {}\r\n\r\n    unordered_multimap(unordered_multimap&& _Right, const allocator_type& _Al) : _Mybase(_STD move(_Right), _Al) {}\r\n\r\n    unordered_multimap& operator=(unordered_multimap&& _Right)\r\n        noexcept(_Alnode_traits::is_always_equal::value\r\n                 && is_nothrow_move_assignable_v<_Hasher> && is_nothrow_move_assignable_v<_Keyeq>) {\r\n        _Mybase::operator=(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    void swap(unordered_multimap& _Right) noexcept(noexcept(_Mybase::swap(_Right))) {\r\n        _Mybase::swap(_Right);\r\n    }\r\n\r\n    using _Mybase::insert;\r\n\r\n    template <class _Valty, enable_if_t<is_constructible_v<value_type, _Valty>, int> = 0>\r\n    iterator insert(_Valty&& _Val) {\r\n        return this->emplace(_STD forward<_Valty>(_Val));\r\n    }\r\n\r\n    template <class _Valty, enable_if_t<is_constructible_v<value_type, _Valty>, int> = 0>\r\n    iterator insert(const_iterator _Where, _Valty&& _Val) {\r\n        return this->emplace_hint(_Where, _STD forward<_Valty>(_Val));\r\n    }\r\n\r\n    unordered_multimap(initializer_list<value_type> _Ilist) : _Mybase(_Key_compare(), allocator_type()) {\r\n        insert(_Ilist);\r\n    }\r\n\r\n    unordered_multimap(initializer_list<value_type> _Ilist, const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {\r\n        insert(_Ilist);\r\n    }\r\n\r\n    unordered_multimap(initializer_list<value_type> _Ilist, size_type _Buckets)\r\n        : _Mybase(_Key_compare(), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_Ilist);\r\n    }\r\n\r\n    unordered_multimap(initializer_list<value_type> _Ilist, size_type _Buckets, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_Ilist);\r\n    }\r\n\r\n    unordered_multimap(initializer_list<value_type> _Ilist, size_type _Buckets, const hasher& _Hasharg)\r\n        : _Mybase(_Key_compare(_Hasharg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_Ilist);\r\n    }\r\n\r\n    unordered_multimap(\r\n        initializer_list<value_type> _Ilist, size_type _Buckets, const hasher& _Hasharg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_Ilist);\r\n    }\r\n\r\n    unordered_multimap(\r\n        initializer_list<value_type> _Ilist, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_Ilist);\r\n    }\r\n\r\n    unordered_multimap(initializer_list<value_type> _Ilist, size_type _Buckets, const hasher& _Hasharg,\r\n        const _Keyeq& _Keyeqarg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        insert(_Ilist);\r\n    }\r\n\r\n    unordered_multimap& operator=(initializer_list<value_type> _Ilist) {\r\n        _Mybase::clear();\r\n        insert(_Ilist);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD hasher hash_function() const {\r\n        return _Mybase::_Traitsobj._Mypair._Get_first();\r\n    }\r\n\r\n    _NODISCARD key_equal key_eq() const {\r\n        return _Mybase::_Traitsobj._Mypair._Myval2._Get_first();\r\n    }\r\n\r\n    using _Mybase::_Unchecked_begin;\r\n    using _Mybase::_Unchecked_end;\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Iter, class _Hasher = hash<_Guide_key_t<_Iter>>, class _Keyeq = equal_to<_Guide_key_t<_Iter>>,\r\n    class _Alloc = allocator<_Guide_pair_t<_Iter>>,\r\n    enable_if_t<\r\n        conjunction_v<_Is_iterator<_Iter>, _Is_hasher<_Hasher>, negation<_Is_allocator<_Keyeq>>, _Is_allocator<_Alloc>>,\r\n        int> = 0>\r\nunordered_multimap(_Iter, _Iter, _Guide_size_type_t<_Alloc> = 0, _Hasher = _Hasher(), _Keyeq = _Keyeq(),\r\n    _Alloc = _Alloc()) -> unordered_multimap<_Guide_key_t<_Iter>, _Guide_val_t<_Iter>, _Hasher, _Keyeq, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Ty, class _Hasher = hash<_Kty>, class _Keyeq = equal_to<_Kty>,\r\n    class _Alloc = allocator<pair<const _Kty, _Ty>>,\r\n    enable_if_t<conjunction_v<_Is_hasher<_Hasher>, negation<_Is_allocator<_Keyeq>>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_multimap(initializer_list<pair<_Kty, _Ty>>, _Guide_size_type_t<_Alloc> = 0, _Hasher = _Hasher(),\r\n    _Keyeq = _Keyeq(), _Alloc = _Alloc()) -> unordered_multimap<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>;\r\n\r\ntemplate <class _Iter, class _Alloc, enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_multimap(_Iter, _Iter, _Alloc) -> unordered_multimap<_Guide_key_t<_Iter>, _Guide_val_t<_Iter>,\r\n    hash<_Guide_key_t<_Iter>>, equal_to<_Guide_key_t<_Iter>>, _Alloc>;\r\n\r\ntemplate <class _Iter, class _Alloc, enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_multimap(_Iter, _Iter, _Guide_size_type_t<_Alloc>, _Alloc) -> unordered_multimap<_Guide_key_t<_Iter>,\r\n    _Guide_val_t<_Iter>, hash<_Guide_key_t<_Iter>>, equal_to<_Guide_key_t<_Iter>>, _Alloc>;\r\n\r\ntemplate <class _Iter, class _Hasher, class _Alloc,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_hasher<_Hasher>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_multimap(_Iter, _Iter, _Guide_size_type_t<_Alloc>, _Hasher, _Alloc)\r\n    -> unordered_multimap<_Guide_key_t<_Iter>, _Guide_val_t<_Iter>, _Hasher, equal_to<_Guide_key_t<_Iter>>, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Ty, class _Alloc, enable_if_t<_Is_allocator<_Alloc>::value, int> = 0>\r\nunordered_multimap(initializer_list<pair<_Kty, _Ty>>, _Alloc)\r\n    -> unordered_multimap<_Kty, _Ty, hash<_Kty>, equal_to<_Kty>, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Ty, class _Alloc, enable_if_t<_Is_allocator<_Alloc>::value, int> = 0>\r\nunordered_multimap(initializer_list<pair<_Kty, _Ty>>, _Guide_size_type_t<_Alloc>, _Alloc)\r\n    -> unordered_multimap<_Kty, _Ty, hash<_Kty>, equal_to<_Kty>, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Ty, class _Hasher, class _Alloc,\r\n    enable_if_t<conjunction_v<_Is_hasher<_Hasher>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_multimap(initializer_list<pair<_Kty, _Ty>>, _Guide_size_type_t<_Alloc>, _Hasher, _Alloc)\r\n    -> unordered_multimap<_Kty, _Ty, _Hasher, equal_to<_Kty>, _Alloc>;\r\n\r\n#if _HAS_CXX23\r\ntemplate <_RANGES input_range _Rng, _Hasher_for_container _Hasher = hash<_Range_key_type<_Rng>>,\r\n    _Not_allocator_for_container _Keyeq = equal_to<_Range_key_type<_Rng>>,\r\n    _Allocator_for_container _Alloc     = allocator<_Range_to_alloc_type<_Rng>>>\r\nunordered_multimap(from_range_t, _Rng&&, _Guide_size_type_t<_Alloc> = 0, _Hasher = _Hasher(), _Keyeq = _Keyeq(),\r\n    _Alloc = _Alloc()) -> unordered_multimap<_Range_key_type<_Rng>, _Range_mapped_type<_Rng>, _Hasher, _Keyeq, _Alloc>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc>\r\nunordered_multimap(from_range_t, _Rng&&, _Guide_size_type_t<_Alloc>, _Alloc)\r\n    -> unordered_multimap<_Range_key_type<_Rng>, _Range_mapped_type<_Rng>, hash<_Range_key_type<_Rng>>,\r\n        equal_to<_Range_key_type<_Rng>>, _Alloc>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc>\r\nunordered_multimap(from_range_t, _Rng&&, _Alloc) -> unordered_multimap<_Range_key_type<_Rng>, _Range_mapped_type<_Rng>,\r\n    hash<_Range_key_type<_Rng>>, equal_to<_Range_key_type<_Rng>>, _Alloc>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Hasher_for_container _Hasher, _Allocator_for_container _Alloc>\r\nunordered_multimap(from_range_t, _Rng&&, _Guide_size_type_t<_Alloc>, _Hasher, _Alloc)\r\n    -> unordered_multimap<_Range_key_type<_Rng>, _Range_mapped_type<_Rng>, _Hasher, equal_to<_Range_key_type<_Rng>>,\r\n        _Alloc>;\r\n#endif // _HAS_CXX23\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Hasher, class _Keyeq, class _Alloc>\r\nvoid swap(unordered_multimap<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Left,\r\n    unordered_multimap<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Right) noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Hasher, class _Keyeq, class _Alloc, class _Pr>\r\nunordered_multimap<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>::size_type erase_if(\r\n    unordered_multimap<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Cont, _Pr _Pred) {\r\n    return _STD _Erase_nodes_if(_Cont, _STD _Pass_fn(_Pred));\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Kty, class _Ty, class _Hasher, class _Keyeq, class _Alloc>\r\n_NODISCARD bool operator==(const unordered_multimap<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Left,\r\n    const unordered_multimap<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Right) {\r\n    return _Hash_equal(_Left, _Right);\r\n}\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _Kty, class _Ty, class _Hasher, class _Keyeq, class _Alloc>\r\n_NODISCARD bool operator!=(const unordered_multimap<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Left,\r\n    const unordered_multimap<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n#endif // !_HAS_CXX20\r\n\r\n#if _HAS_CXX17\r\nnamespace pmr {\r\n    _EXPORT_STD template <class _Kty, class _Ty, class _Hasher = hash<_Kty>, class _Keyeq = equal_to<_Kty>>\r\n    using unordered_map = _STD unordered_map<_Kty, _Ty, _Hasher, _Keyeq, polymorphic_allocator<pair<const _Kty, _Ty>>>;\r\n\r\n    _EXPORT_STD template <class _Kty, class _Ty, class _Hasher = hash<_Kty>, class _Keyeq = equal_to<_Kty>>\r\n    using unordered_multimap =\r\n        _STD unordered_multimap<_Kty, _Ty, _Hasher, _Keyeq, polymorphic_allocator<pair<const _Kty, _Ty>>>;\r\n} // namespace pmr\r\n#endif // _HAS_CXX17\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _UNORDERED_MAP_\r\n"
  },
  {
    "path": "stl/inc/unordered_set",
    "content": "// unordered_set standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _UNORDERED_SET_\r\n#define _UNORDERED_SET_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <xhash>\r\n\r\n#if _HAS_CXX17\r\n#include <xpolymorphic_allocator.h>\r\n#endif // _HAS_CXX17\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _Kty, // key type (same as value type)\r\n    class _Tr, // comparator predicate type\r\n    class _Alloc, // actual allocator type (should be value allocator)\r\n    bool _Mfl> // true if multiple equivalent keys are permitted\r\nclass _Uset_traits : public _Tr { // traits required to make _Hash behave like a set\r\npublic:\r\n    using key_type            = _Kty;\r\n    using value_type          = _Kty;\r\n    using _Mutable_value_type = _Kty;\r\n    using key_compare         = _Tr;\r\n    using allocator_type      = _Alloc;\r\n#if _HAS_CXX17\r\n    using node_type = _Node_handle<_List_node<value_type, typename allocator_traits<_Alloc>::void_pointer>, _Alloc,\r\n        _Node_handle_set_base, _Kty>;\r\n#endif // _HAS_CXX17\r\n\r\n    static constexpr bool _Multi = _Mfl;\r\n\r\n    template <class... _Args>\r\n    using _In_place_key_extractor = _In_place_key_extract_set<_Kty, _Args...>;\r\n\r\n    _Uset_traits() = default;\r\n\r\n    explicit _Uset_traits(const _Tr& _Traits) noexcept(is_nothrow_copy_constructible_v<_Tr>) : _Tr(_Traits) {}\r\n\r\n    static const _Kty& _Kfn(const value_type& _Val) noexcept {\r\n        return _Val;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Kty, class _Hasher = hash<_Kty>, class _Keyeq = equal_to<_Kty>,\r\n    class _Alloc = allocator<_Kty>>\r\nclass unordered_set : public _Hash<_Uset_traits<_Kty, _Uhash_compare<_Kty, _Hasher, _Keyeq>, _Alloc, false>> {\r\n    // hash table of key-values, unique keys\r\npublic:\r\n    static_assert(!_ENFORCE_MATCHING_ALLOCATORS || is_same_v<_Kty, typename _Alloc::value_type>,\r\n        _MISMATCHED_ALLOCATOR_MESSAGE(\"unordered_set<T, Hasher, Eq, Allocator>\", \"T\"));\r\n    static_assert(is_object_v<_Kty>, \"The C++ Standard forbids containers of non-object types \"\r\n                                     \"because of [container.requirements].\");\r\n\r\nprivate:\r\n    using _Mytraits      = _Uhash_compare<_Kty, _Hasher, _Keyeq>;\r\n    using _Mybase        = _Hash<_Uset_traits<_Kty, _Mytraits, _Alloc, false>>;\r\n    using _Alnode        = typename _Mybase::_Alnode;\r\n    using _Alnode_traits = typename _Mybase::_Alnode_traits;\r\n    using _Key_compare   = typename _Mybase::_Key_compare;\r\n\r\npublic:\r\n    using hasher    = _Hasher;\r\n    using key_type  = _Kty;\r\n    using key_equal = _Keyeq;\r\n\r\n    using value_type      = typename _Mybase::value_type;\r\n    using allocator_type  = typename _Mybase::allocator_type;\r\n    using size_type       = typename _Mybase::size_type;\r\n    using difference_type = typename _Mybase::difference_type;\r\n    using pointer         = typename _Mybase::pointer;\r\n    using const_pointer   = typename _Mybase::const_pointer;\r\n    using reference       = value_type&;\r\n    using const_reference = const value_type&;\r\n    using iterator        = typename _Mybase::iterator;\r\n    using const_iterator  = typename _Mybase::const_iterator;\r\n\r\n    using local_iterator       = typename _Mybase::iterator;\r\n    using const_local_iterator = typename _Mybase::const_iterator;\r\n\r\n#if _HAS_CXX17\r\n    using insert_return_type = _Insert_return_type<iterator, typename _Mybase::node_type>;\r\n#endif // _HAS_CXX17\r\n\r\n    unordered_set() : _Mybase(_Key_compare(), allocator_type()) {}\r\n\r\n    explicit unordered_set(const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {}\r\n\r\n    unordered_set(const unordered_set& _Right)\r\n        : _Mybase(_Right, _Alnode_traits::select_on_container_copy_construction(_Right._Getal())) {}\r\n\r\n    unordered_set(const unordered_set& _Right, const allocator_type& _Al) : _Mybase(_Right, _Al) {}\r\n\r\n    explicit unordered_set(size_type _Buckets) : _Mybase(_Key_compare(), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n    }\r\n\r\n    unordered_set(size_type _Buckets, const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {\r\n        this->rehash(_Buckets);\r\n    }\r\n\r\n    unordered_set(size_type _Buckets, const hasher& _Hasharg) : _Mybase(_Key_compare(_Hasharg), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n    }\r\n\r\n    unordered_set(size_type _Buckets, const hasher& _Hasharg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg), _Al) {\r\n        this->rehash(_Buckets);\r\n    }\r\n\r\n    unordered_set(size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n    }\r\n\r\n    unordered_set(size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), _Al) {\r\n        this->rehash(_Buckets);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_set(_Iter _First, _Iter _Last) : _Mybase(_Key_compare(), allocator_type()) {\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_set(_Iter _First, _Iter _Last, const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_set(_Iter _First, _Iter _Last, size_type _Buckets) : _Mybase(_Key_compare(), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_set(_Iter _First, _Iter _Last, size_type _Buckets, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(), _Al) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_set(_Iter _First, _Iter _Last, size_type _Buckets, const hasher& _Hasharg)\r\n        : _Mybase(_Key_compare(_Hasharg), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_set(_Iter _First, _Iter _Last, size_type _Buckets, const hasher& _Hasharg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg), _Al) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_set(_Iter _First, _Iter _Last, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_set(_Iter _First, _Iter _Last, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg,\r\n        const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), _Al) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_set(from_range_t, _Rng&& _Range) : _Mybase(_Key_compare(), allocator_type()) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_set(from_range_t, _Rng&& _Range, const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_set(from_range_t, _Rng&& _Range, size_type _Buckets) : _Mybase(_Key_compare(), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_set(from_range_t, _Rng&& _Range, size_type _Buckets, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_set(from_range_t, _Rng&& _Range, size_type _Buckets, const hasher& _Hasharg)\r\n        : _Mybase(_Key_compare(_Hasharg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_set(from_range_t, _Rng&& _Range, size_type _Buckets, const hasher& _Hasharg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_set(from_range_t, _Rng&& _Range, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_set(from_range_t, _Rng&& _Range, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg,\r\n        const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    unordered_set& operator=(const unordered_set& _Right) {\r\n        _Mybase::operator=(_Right);\r\n        return *this;\r\n    }\r\n\r\n    unordered_set(unordered_set&& _Right) : _Mybase(_STD move(_Right)) {}\r\n\r\n    unordered_set(unordered_set&& _Right, const allocator_type& _Al) : _Mybase(_STD move(_Right), _Al) {}\r\n\r\n    unordered_set& operator=(unordered_set&& _Right)\r\n        noexcept(_Alnode_traits::is_always_equal::value\r\n                 && is_nothrow_move_assignable_v<_Hasher> && is_nothrow_move_assignable_v<_Keyeq>) {\r\n        _Mybase::operator=(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    void swap(unordered_set& _Right) noexcept(noexcept(_Mybase::swap(_Right))) {\r\n        _Mybase::swap(_Right);\r\n    }\r\n\r\n    unordered_set(initializer_list<value_type> _Ilist) : _Mybase(_Key_compare(), allocator_type()) {\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    unordered_set(initializer_list<value_type> _Ilist, const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    unordered_set(initializer_list<value_type> _Ilist, size_type _Buckets) : _Mybase(_Key_compare(), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    unordered_set(initializer_list<value_type> _Ilist, size_type _Buckets, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(), _Al) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    unordered_set(initializer_list<value_type> _Ilist, size_type _Buckets, const hasher& _Hasharg)\r\n        : _Mybase(_Key_compare(_Hasharg), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    unordered_set(\r\n        initializer_list<value_type> _Ilist, size_type _Buckets, const hasher& _Hasharg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg), _Al) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    unordered_set(\r\n        initializer_list<value_type> _Ilist, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    unordered_set(initializer_list<value_type> _Ilist, size_type _Buckets, const hasher& _Hasharg,\r\n        const _Keyeq& _Keyeqarg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), _Al) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    unordered_set& operator=(initializer_list<value_type> _Ilist) {\r\n        this->clear();\r\n        this->insert(_Ilist);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD hasher hash_function() const {\r\n        return this->_Traitsobj._Mypair._Get_first();\r\n    }\r\n\r\n    _NODISCARD key_equal key_eq() const {\r\n        return this->_Traitsobj._Mypair._Myval2._Get_first();\r\n    }\r\n\r\n    using _Mybase::_Unchecked_begin;\r\n    using _Mybase::_Unchecked_end;\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Iter, class _Hasher = hash<_Iter_value_t<_Iter>>, class _Keyeq = equal_to<_Iter_value_t<_Iter>>,\r\n    class _Alloc = allocator<_Iter_value_t<_Iter>>,\r\n    enable_if_t<\r\n        conjunction_v<_Is_iterator<_Iter>, _Is_hasher<_Hasher>, negation<_Is_allocator<_Keyeq>>, _Is_allocator<_Alloc>>,\r\n        int> = 0>\r\nunordered_set(_Iter, _Iter, _Guide_size_type_t<_Alloc> = 0, _Hasher = _Hasher(), _Keyeq = _Keyeq(), _Alloc = _Alloc())\r\n    -> unordered_set<_Iter_value_t<_Iter>, _Hasher, _Keyeq, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Hasher = hash<_Kty>, class _Keyeq = equal_to<_Kty>, class _Alloc = allocator<_Kty>,\r\n    enable_if_t<conjunction_v<_Is_hasher<_Hasher>, negation<_Is_allocator<_Keyeq>>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_set(initializer_list<_Kty>, _Guide_size_type_t<_Alloc> = 0, _Hasher = _Hasher(), _Keyeq = _Keyeq(),\r\n    _Alloc = _Alloc()) -> unordered_set<_Kty, _Hasher, _Keyeq, _Alloc>;\r\n\r\ntemplate <class _Iter, class _Alloc, enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_set(_Iter, _Iter, _Guide_size_type_t<_Alloc>, _Alloc)\r\n    -> unordered_set<_Iter_value_t<_Iter>, hash<_Iter_value_t<_Iter>>, equal_to<_Iter_value_t<_Iter>>, _Alloc>;\r\n\r\ntemplate <class _Iter, class _Hasher, class _Alloc,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_hasher<_Hasher>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_set(_Iter, _Iter, _Guide_size_type_t<_Alloc>, _Hasher, _Alloc)\r\n    -> unordered_set<_Iter_value_t<_Iter>, _Hasher, equal_to<_Iter_value_t<_Iter>>, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Alloc, enable_if_t<_Is_allocator<_Alloc>::value, int> = 0>\r\nunordered_set(initializer_list<_Kty>, _Guide_size_type_t<_Alloc>, _Alloc)\r\n    -> unordered_set<_Kty, hash<_Kty>, equal_to<_Kty>, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Hasher, class _Alloc,\r\n    enable_if_t<conjunction_v<_Is_hasher<_Hasher>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_set(initializer_list<_Kty>, _Guide_size_type_t<_Alloc>, _Hasher, _Alloc)\r\n    -> unordered_set<_Kty, _Hasher, equal_to<_Kty>, _Alloc>;\r\n\r\n#if _HAS_CXX23\r\ntemplate <_RANGES input_range _Rng, _Hasher_for_container _Hasher = hash<_RANGES range_value_t<_Rng>>,\r\n    _Not_allocator_for_container _Keyeq = equal_to<_RANGES range_value_t<_Rng>>,\r\n    _Allocator_for_container _Alloc     = allocator<_RANGES range_value_t<_Rng>>>\r\nunordered_set(from_range_t, _Rng&&, _Guide_size_type_t<_Alloc> = 0, _Hasher = _Hasher(), _Keyeq = _Keyeq(),\r\n    _Alloc = _Alloc()) -> unordered_set<_RANGES range_value_t<_Rng>, _Hasher, _Keyeq, _Alloc>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc>\r\nunordered_set(from_range_t, _Rng&&, _Guide_size_type_t<_Alloc>, _Alloc) -> unordered_set<_RANGES range_value_t<_Rng>,\r\n    hash<_RANGES range_value_t<_Rng>>, equal_to<_RANGES range_value_t<_Rng>>, _Alloc>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc>\r\nunordered_set(from_range_t, _Rng&&, _Alloc) -> unordered_set<_RANGES range_value_t<_Rng>,\r\n    hash<_RANGES range_value_t<_Rng>>, equal_to<_RANGES range_value_t<_Rng>>, _Alloc>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Hasher_for_container _Hasher, _Allocator_for_container _Alloc>\r\nunordered_set(from_range_t, _Rng&&, _Guide_size_type_t<_Alloc>, _Hasher, _Alloc)\r\n    -> unordered_set<_RANGES range_value_t<_Rng>, _Hasher, equal_to<_RANGES range_value_t<_Rng>>, _Alloc>;\r\n#endif // _HAS_CXX23\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Kty, class _Hasher, class _Keyeq, class _Alloc>\r\nvoid swap(unordered_set<_Kty, _Hasher, _Keyeq, _Alloc>& _Left, unordered_set<_Kty, _Hasher, _Keyeq, _Alloc>& _Right)\r\n    noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Kty, class _Hasher, class _Keyeq, class _Alloc, class _Pr>\r\nunordered_set<_Kty, _Hasher, _Keyeq, _Alloc>::size_type erase_if(\r\n    unordered_set<_Kty, _Hasher, _Keyeq, _Alloc>& _Cont, _Pr _Pred) {\r\n    return _STD _Erase_nodes_if(_Cont, _STD _Pass_fn(_Pred));\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Kty, class _Hasher, class _Keyeq, class _Alloc>\r\n_NODISCARD bool operator==(const unordered_set<_Kty, _Hasher, _Keyeq, _Alloc>& _Left,\r\n    const unordered_set<_Kty, _Hasher, _Keyeq, _Alloc>& _Right) {\r\n    return _Hash_equal(_Left, _Right);\r\n}\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _Kty, class _Hasher, class _Keyeq, class _Alloc>\r\n_NODISCARD bool operator!=(const unordered_set<_Kty, _Hasher, _Keyeq, _Alloc>& _Left,\r\n    const unordered_set<_Kty, _Hasher, _Keyeq, _Alloc>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n#endif // !_HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Kty, class _Hasher = hash<_Kty>, class _Keyeq = equal_to<_Kty>,\r\n    class _Alloc = allocator<_Kty>>\r\nclass unordered_multiset : public _Hash<_Uset_traits<_Kty, _Uhash_compare<_Kty, _Hasher, _Keyeq>, _Alloc, true>> {\r\n    // hash table of key-values, non-unique keys\r\npublic:\r\n    static_assert(!_ENFORCE_MATCHING_ALLOCATORS || is_same_v<_Kty, typename _Alloc::value_type>,\r\n        _MISMATCHED_ALLOCATOR_MESSAGE(\"unordered_multiset<T, Hasher, Eq, Allocator>\", \"T\"));\r\n    static_assert(is_object_v<_Kty>, \"The C++ Standard forbids containers of non-object types \"\r\n                                     \"because of [container.requirements].\");\r\n\r\nprivate:\r\n    using _Mytraits      = _Uhash_compare<_Kty, _Hasher, _Keyeq>;\r\n    using _Mybase        = _Hash<_Uset_traits<_Kty, _Mytraits, _Alloc, true>>;\r\n    using _Alnode        = typename _Mybase::_Alnode;\r\n    using _Alnode_traits = typename _Mybase::_Alnode_traits;\r\n    using _Key_compare   = typename _Mybase::_Key_compare;\r\n\r\npublic:\r\n    using hasher    = _Hasher;\r\n    using key_type  = _Kty;\r\n    using key_equal = _Keyeq;\r\n\r\n    using value_type      = typename _Mybase::value_type;\r\n    using allocator_type  = typename _Mybase::allocator_type;\r\n    using size_type       = typename _Mybase::size_type;\r\n    using difference_type = typename _Mybase::difference_type;\r\n    using pointer         = typename _Mybase::pointer;\r\n    using const_pointer   = typename _Mybase::const_pointer;\r\n    using reference       = value_type&;\r\n    using const_reference = const value_type&;\r\n    using iterator        = typename _Mybase::iterator;\r\n    using const_iterator  = typename _Mybase::const_iterator;\r\n\r\n    unordered_multiset() : _Mybase(_Key_compare(), allocator_type()) {}\r\n\r\n    explicit unordered_multiset(const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {}\r\n\r\n    unordered_multiset(const unordered_multiset& _Right)\r\n        : _Mybase(_Right, _Alnode_traits::select_on_container_copy_construction(_Right._Getal())) {}\r\n\r\n    unordered_multiset(const unordered_multiset& _Right, const allocator_type& _Al) : _Mybase(_Right, _Al) {}\r\n\r\n    explicit unordered_multiset(size_type _Buckets) : _Mybase(_Key_compare(), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n    }\r\n\r\n    unordered_multiset(size_type _Buckets, const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {\r\n        this->rehash(_Buckets);\r\n    }\r\n\r\n    unordered_multiset(size_type _Buckets, const hasher& _Hasharg) : _Mybase(_Key_compare(_Hasharg), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n    }\r\n\r\n    unordered_multiset(size_type _Buckets, const hasher& _Hasharg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg), _Al) {\r\n        this->rehash(_Buckets);\r\n    }\r\n\r\n    unordered_multiset(size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n    }\r\n\r\n    unordered_multiset(size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), _Al) {\r\n        this->rehash(_Buckets);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_multiset(_Iter _First, _Iter _Last) : _Mybase(_Key_compare(), allocator_type()) {\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_multiset(_Iter _First, _Iter _Last, const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_multiset(_Iter _First, _Iter _Last, size_type _Buckets) : _Mybase(_Key_compare(), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_multiset(_Iter _First, _Iter _Last, size_type _Buckets, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(), _Al) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_multiset(_Iter _First, _Iter _Last, size_type _Buckets, const hasher& _Hasharg)\r\n        : _Mybase(_Key_compare(_Hasharg), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_multiset(_Iter _First, _Iter _Last, size_type _Buckets, const hasher& _Hasharg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg), _Al) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_multiset(_Iter _First, _Iter _Last, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    template <class _Iter>\r\n    unordered_multiset(_Iter _First, _Iter _Last, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg,\r\n        const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), _Al) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_First, _Last);\r\n    }\r\n\r\n    unordered_multiset& operator=(const unordered_multiset& _Right) {\r\n        _Mybase::operator=(_Right);\r\n        return *this;\r\n    }\r\n\r\n    unordered_multiset(unordered_multiset&& _Right) : _Mybase(_STD move(_Right)) {}\r\n\r\n    unordered_multiset(unordered_multiset&& _Right, const allocator_type& _Al) : _Mybase(_STD move(_Right), _Al) {}\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_multiset(from_range_t, _Rng&& _Range) : _Mybase(_Key_compare(), allocator_type()) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_multiset(from_range_t, _Rng&& _Range, const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_multiset(from_range_t, _Rng&& _Range, size_type _Buckets) : _Mybase(_Key_compare(), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_multiset(from_range_t, _Rng&& _Range, size_type _Buckets, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_multiset(from_range_t, _Rng&& _Range, size_type _Buckets, const hasher& _Hasharg)\r\n        : _Mybase(_Key_compare(_Hasharg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_multiset(\r\n        from_range_t, _Rng&& _Range, size_type _Buckets, const hasher& _Hasharg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_multiset(from_range_t, _Rng&& _Range, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), allocator_type()) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    unordered_multiset(from_range_t, _Rng&& _Range, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg,\r\n        const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), _Al) {\r\n        _Mybase::rehash(_Buckets);\r\n        this->_Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    unordered_multiset& operator=(unordered_multiset&& _Right)\r\n        noexcept(_Alnode_traits::is_always_equal::value\r\n                 && is_nothrow_move_assignable_v<_Hasher> && is_nothrow_move_assignable_v<_Keyeq>) {\r\n        _Mybase::operator=(_STD move(_Right));\r\n        return *this;\r\n    }\r\n\r\n    void swap(unordered_multiset& _Right) noexcept(noexcept(_Mybase::swap(_Right))) {\r\n        _Mybase::swap(_Right);\r\n    }\r\n\r\n    unordered_multiset(initializer_list<value_type> _Ilist) : _Mybase(_Key_compare(), allocator_type()) {\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    unordered_multiset(initializer_list<value_type> _Ilist, const allocator_type& _Al) : _Mybase(_Key_compare(), _Al) {\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    unordered_multiset(initializer_list<value_type> _Ilist, size_type _Buckets)\r\n        : _Mybase(_Key_compare(), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    unordered_multiset(initializer_list<value_type> _Ilist, size_type _Buckets, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(), _Al) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    unordered_multiset(initializer_list<value_type> _Ilist, size_type _Buckets, const hasher& _Hasharg)\r\n        : _Mybase(_Key_compare(_Hasharg), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    unordered_multiset(\r\n        initializer_list<value_type> _Ilist, size_type _Buckets, const hasher& _Hasharg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg), _Al) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    unordered_multiset(\r\n        initializer_list<value_type> _Ilist, size_type _Buckets, const hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), allocator_type()) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    unordered_multiset(initializer_list<value_type> _Ilist, size_type _Buckets, const hasher& _Hasharg,\r\n        const _Keyeq& _Keyeqarg, const allocator_type& _Al)\r\n        : _Mybase(_Key_compare(_Hasharg, _Keyeqarg), _Al) {\r\n        this->rehash(_Buckets);\r\n        this->insert(_Ilist);\r\n    }\r\n\r\n    unordered_multiset& operator=(initializer_list<value_type> _Ilist) {\r\n        this->clear();\r\n        this->insert(_Ilist);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD hasher hash_function() const {\r\n        return this->_Traitsobj._Mypair._Get_first();\r\n    }\r\n\r\n    _NODISCARD key_equal key_eq() const {\r\n        return this->_Traitsobj._Mypair._Myval2._Get_first();\r\n    }\r\n\r\n    using _Mybase::_Unchecked_begin;\r\n    using _Mybase::_Unchecked_end;\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Iter, class _Hasher = hash<_Iter_value_t<_Iter>>, class _Keyeq = equal_to<_Iter_value_t<_Iter>>,\r\n    class _Alloc = allocator<_Iter_value_t<_Iter>>,\r\n    enable_if_t<\r\n        conjunction_v<_Is_iterator<_Iter>, _Is_hasher<_Hasher>, negation<_Is_allocator<_Keyeq>>, _Is_allocator<_Alloc>>,\r\n        int> = 0>\r\nunordered_multiset(_Iter, _Iter, _Guide_size_type_t<_Alloc> = 0, _Hasher = _Hasher(), _Keyeq = _Keyeq(),\r\n    _Alloc = _Alloc()) -> unordered_multiset<_Iter_value_t<_Iter>, _Hasher, _Keyeq, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Hasher = hash<_Kty>, class _Keyeq = equal_to<_Kty>, class _Alloc = allocator<_Kty>,\r\n    enable_if_t<conjunction_v<_Is_hasher<_Hasher>, negation<_Is_allocator<_Keyeq>>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_multiset(initializer_list<_Kty>, _Guide_size_type_t<_Alloc> = 0, _Hasher = _Hasher(), _Keyeq = _Keyeq(),\r\n    _Alloc = _Alloc()) -> unordered_multiset<_Kty, _Hasher, _Keyeq, _Alloc>;\r\n\r\ntemplate <class _Iter, class _Alloc, enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_multiset(_Iter, _Iter, _Guide_size_type_t<_Alloc>, _Alloc)\r\n    -> unordered_multiset<_Iter_value_t<_Iter>, hash<_Iter_value_t<_Iter>>, equal_to<_Iter_value_t<_Iter>>, _Alloc>;\r\n\r\ntemplate <class _Iter, class _Hasher, class _Alloc,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_hasher<_Hasher>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_multiset(_Iter, _Iter, _Guide_size_type_t<_Alloc>, _Hasher, _Alloc)\r\n    -> unordered_multiset<_Iter_value_t<_Iter>, _Hasher, equal_to<_Iter_value_t<_Iter>>, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Alloc, enable_if_t<_Is_allocator<_Alloc>::value, int> = 0>\r\nunordered_multiset(initializer_list<_Kty>, _Guide_size_type_t<_Alloc>, _Alloc)\r\n    -> unordered_multiset<_Kty, hash<_Kty>, equal_to<_Kty>, _Alloc>;\r\n\r\ntemplate <class _Kty, class _Hasher, class _Alloc,\r\n    enable_if_t<conjunction_v<_Is_hasher<_Hasher>, _Is_allocator<_Alloc>>, int> = 0>\r\nunordered_multiset(initializer_list<_Kty>, _Guide_size_type_t<_Alloc>, _Hasher, _Alloc)\r\n    -> unordered_multiset<_Kty, _Hasher, equal_to<_Kty>, _Alloc>;\r\n\r\n#if _HAS_CXX23\r\ntemplate <_RANGES input_range _Rng, _Hasher_for_container _Hasher = hash<_RANGES range_value_t<_Rng>>,\r\n    _Not_allocator_for_container _Keyeq = equal_to<_RANGES range_value_t<_Rng>>,\r\n    _Allocator_for_container _Alloc     = allocator<_RANGES range_value_t<_Rng>>>\r\nunordered_multiset(from_range_t, _Rng&&, _Guide_size_type_t<_Alloc> = 0, _Hasher = _Hasher(), _Keyeq = _Keyeq(),\r\n    _Alloc = _Alloc()) -> unordered_multiset<_RANGES range_value_t<_Rng>, _Hasher, _Keyeq, _Alloc>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc>\r\nunordered_multiset(from_range_t, _Rng&&, _Guide_size_type_t<_Alloc>, _Alloc)\r\n    -> unordered_multiset<_RANGES range_value_t<_Rng>, hash<_RANGES range_value_t<_Rng>>,\r\n        equal_to<_RANGES range_value_t<_Rng>>, _Alloc>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc>\r\nunordered_multiset(from_range_t, _Rng&&, _Alloc) -> unordered_multiset<_RANGES range_value_t<_Rng>,\r\n    hash<_RANGES range_value_t<_Rng>>, equal_to<_RANGES range_value_t<_Rng>>, _Alloc>;\r\n\r\ntemplate <_RANGES input_range _Rng, _Hasher_for_container _Hasher, _Allocator_for_container _Alloc>\r\nunordered_multiset(from_range_t, _Rng&&, _Guide_size_type_t<_Alloc>, _Hasher, _Alloc)\r\n    -> unordered_multiset<_RANGES range_value_t<_Rng>, _Hasher, equal_to<_RANGES range_value_t<_Rng>>, _Alloc>;\r\n#endif // _HAS_CXX23\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Kty, class _Hasher, class _Keyeq, class _Alloc>\r\nvoid swap(unordered_multiset<_Kty, _Hasher, _Keyeq, _Alloc>& _Left,\r\n    unordered_multiset<_Kty, _Hasher, _Keyeq, _Alloc>& _Right) noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Kty, class _Hasher, class _Keyeq, class _Alloc, class _Pr>\r\nunordered_multiset<_Kty, _Hasher, _Keyeq, _Alloc>::size_type erase_if(\r\n    unordered_multiset<_Kty, _Hasher, _Keyeq, _Alloc>& _Cont, _Pr _Pred) {\r\n    return _STD _Erase_nodes_if(_Cont, _STD _Pass_fn(_Pred));\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Kty, class _Hasher, class _Keyeq, class _Alloc>\r\n_NODISCARD bool operator==(const unordered_multiset<_Kty, _Hasher, _Keyeq, _Alloc>& _Left,\r\n    const unordered_multiset<_Kty, _Hasher, _Keyeq, _Alloc>& _Right) {\r\n    return _Hash_equal(_Left, _Right);\r\n}\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _Kty, class _Hasher, class _Keyeq, class _Alloc>\r\n_NODISCARD bool operator!=(const unordered_multiset<_Kty, _Hasher, _Keyeq, _Alloc>& _Left,\r\n    const unordered_multiset<_Kty, _Hasher, _Keyeq, _Alloc>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n#endif // !_HAS_CXX20\r\n\r\n#if _HAS_CXX17\r\nnamespace pmr {\r\n    _EXPORT_STD template <class _Kty, class _Hasher = hash<_Kty>, class _Keyeq = equal_to<_Kty>>\r\n    using unordered_set = _STD unordered_set<_Kty, _Hasher, _Keyeq, polymorphic_allocator<_Kty>>;\r\n\r\n    _EXPORT_STD template <class _Kty, class _Hasher = hash<_Kty>, class _Keyeq = equal_to<_Kty>>\r\n    using unordered_multiset = _STD unordered_multiset<_Kty, _Hasher, _Keyeq, polymorphic_allocator<_Kty>>;\r\n} // namespace pmr\r\n#endif // _HAS_CXX17\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _UNORDERED_SET_\r\n"
  },
  {
    "path": "stl/inc/use_ansi.h",
    "content": "// use_ansi.h internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _USE_ANSI_CPP\r\n#define _USE_ANSI_CPP\r\n\r\n#ifdef _CRTBLD\r\n#define _CRT_NOPRAGMA_LIBS\r\n#else\r\n#undef _CRT_NOPRAGMA_LIBS\r\n#endif\r\n\r\n#ifndef _CRT_NOPRAGMA_LIBS\r\n\r\n#ifndef _M_CEE_PURE\r\n\r\n#undef _DEBUG_AFFIX\r\n#undef _IDL_AFFIX\r\n#undef _IDL_DEFAULT\r\n#undef _LIB_STEM\r\n\r\n#ifdef _DEBUG\r\n#define _DEBUG_AFFIX \"d\"\r\n#define _IDL_DEFAULT 2\r\n#else // ^^^ defined(_DEBUG) / !defined(_DEBUG) vvv\r\n#define _DEBUG_AFFIX \"\"\r\n#define _IDL_DEFAULT 0\r\n#endif // ^^^ !defined(_DEBUG) ^^^\r\n\r\n#if defined(_DLL) && !defined(_STATIC_CPPLIB)\r\n#define _LIB_STEM \"msvcprt\"\r\n#else // ^^^ defined(_DLL) && !defined(_STATIC_CPPLIB) / !defined(_DLL) || defined(_STATIC_CPPLIB) vvv\r\n#define _LIB_STEM \"libcpmt\"\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != _IDL_DEFAULT\r\n#define _IDL_AFFIX _STL_STRINGIZE(_ITERATOR_DEBUG_LEVEL)\r\n#endif // _ITERATOR_DEBUG_LEVEL != _IDL_DEFAULT\r\n#endif // ^^^ !defined(_DLL) || defined(_STATIC_CPPLIB) ^^^\r\n\r\n#ifndef _IDL_AFFIX\r\n#define _IDL_AFFIX \"\"\r\n#endif\r\n\r\n#pragma comment(lib, _LIB_STEM _DEBUG_AFFIX _IDL_AFFIX)\r\n\r\n#undef _DEBUG_AFFIX\r\n#undef _IDL_AFFIX\r\n#undef _IDL_DEFAULT\r\n#undef _LIB_STEM\r\n\r\n#endif // !defined(_M_CEE_PURE)\r\n\r\n#endif // !defined(_CRT_NOPRAGMA_LIBS)\r\n\r\n#endif // _USE_ANSI_CPP\r\n"
  },
  {
    "path": "stl/inc/utility",
    "content": "// utility standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _UTILITY_\r\n#define _UTILITY_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <initializer_list>\r\n#include <type_traits>\r\n\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#include <concepts>\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n#include <cstdlib>\r\n#endif // _HAS_CXX23\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"intrinsic\")\r\n#pragma push_macro(\"known_semantics\")\r\n#pragma push_macro(\"lifetimebound\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef intrinsic\r\n#undef known_semantics\r\n#undef lifetimebound\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD template <class _Ty, _Ty... _Vals>\r\nstruct integer_sequence { // sequence of integer parameters\r\n    static_assert(is_integral_v<_Ty>, \"integer_sequence<T, I...> requires T to be an integral type.\");\r\n\r\n    using value_type = _Ty;\r\n\r\n    _NODISCARD static constexpr size_t size() noexcept {\r\n        return sizeof...(_Vals);\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, _Ty _Size>\r\nusing make_integer_sequence = __make_integer_seq<integer_sequence, _Ty, _Size>;\r\n\r\n_EXPORT_STD template <size_t... _Vals>\r\nusing index_sequence = integer_sequence<size_t, _Vals...>;\r\n\r\n_EXPORT_STD template <size_t _Size>\r\nusing make_index_sequence = make_integer_sequence<size_t, _Size>;\r\n\r\n_EXPORT_STD template <class... _Types>\r\nusing index_sequence_for = make_index_sequence<sizeof...(_Types)>;\r\n\r\n_EXPORT_STD template <class _Ty, class _Pr>\r\n_NODISCARD constexpr const _Ty&(max) (const _Ty& _Left _MSVC_LIFETIMEBOUND, const _Ty& _Right _MSVC_LIFETIMEBOUND,\r\n    _Pr _Pred) noexcept(noexcept(_Pred(_Left, _Right))) /* strengthened */ {\r\n    // return larger of _Left and _Right\r\n    return _Pred(_Left, _Right) ? _Right : _Left;\r\n}\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 28285) // (syntax error in SAL annotation, occurs when _Ty is not an integral type)\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Post_equal_to_(_Left < _Right ? _Right : _Left) constexpr const _Ty& //\r\n    (max) (const _Ty& _Left _MSVC_LIFETIMEBOUND, const _Ty& _Right _MSVC_LIFETIMEBOUND)\r\n        noexcept(noexcept(_Left < _Right)) /* strengthened */ {\r\n    // return larger of _Left and _Right\r\n    return _Left < _Right ? _Right : _Left;\r\n}\r\n#pragma warning(pop)\r\n\r\n_EXPORT_STD template <class _Ty, class _Pr>\r\n_NODISCARD constexpr _Ty(max)(initializer_list<_Ty>, _Pr); // implemented in <algorithm>\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD constexpr _Ty(max)(initializer_list<_Ty>); // implemented in <algorithm>\r\n\r\n_EXPORT_STD template <class _Ty, class _Pr>\r\n_NODISCARD constexpr const _Ty&(min) (const _Ty& _Left _MSVC_LIFETIMEBOUND, const _Ty& _Right _MSVC_LIFETIMEBOUND,\r\n    _Pr _Pred) noexcept(noexcept(_Pred(_Right, _Left))) /* strengthened */ {\r\n    // return smaller of _Left and _Right\r\n    return _Pred(_Right, _Left) ? _Right : _Left;\r\n}\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 28285) // (syntax error in SAL annotation, occurs when _Ty is not an integral type)\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Post_equal_to_(_Right < _Left ? _Right : _Left) constexpr const _Ty& //\r\n    (min) (const _Ty& _Left _MSVC_LIFETIMEBOUND, const _Ty& _Right _MSVC_LIFETIMEBOUND)\r\n        noexcept(noexcept(_Right < _Left)) /* strengthened */ {\r\n    // return smaller of _Left and _Right\r\n    return _Right < _Left ? _Right : _Left;\r\n}\r\n#pragma warning(pop)\r\n\r\n_EXPORT_STD template <class _Ty, class _Pr>\r\n_NODISCARD constexpr _Ty(min)(initializer_list<_Ty>, _Pr); // implemented in <algorithm>\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD constexpr _Ty(min)(initializer_list<_Ty>); // implemented in <algorithm>\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Size, enable_if_t<_Is_swappable<_Ty>::value, int> /* = 0 */>\r\n_CONSTEXPR20 void swap(_Ty (&_Left)[_Size], _Ty (&_Right)[_Size]) noexcept(_Is_nothrow_swappable<_Ty>::value) {\r\n    if (&_Left == &_Right) {\r\n        return; // Handle self-swap as a no-op; see LWG-4165\r\n    }\r\n\r\n    if constexpr (_Is_trivially_swappable_v<_Ty>) {\r\n        if (!_STD _Is_constant_evaluated()) {\r\n            _STD _Swap_trivial_arrays(_Left, _Right);\r\n            return;\r\n        }\r\n    }\r\n\r\n    _Ty* _First1 = _Left;\r\n    _Ty* _Last1  = _First1 + _Size;\r\n    _Ty* _First2 = _Right;\r\n    for (; _First1 != _Last1; ++_First1, ++_First2) {\r\n        swap(*_First1, *_First2); // intentional ADL\r\n    }\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _Ty, enable_if_t<is_move_constructible_v<_Ty> && is_move_assignable_v<_Ty>, int> /* = 0 */>\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\ntemplate <class _Ty, int _Enabled /* = 0 */>\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n_CONSTEXPR20 void swap(_Ty& _Left, _Ty& _Right)\r\n    noexcept(is_nothrow_move_constructible_v<_Ty> && is_nothrow_move_assignable_v<_Ty>) {\r\n    _Ty _Tmp = _STD move(_Left);\r\n    _Left    = _STD move(_Right);\r\n    _Right   = _STD move(_Tmp);\r\n}\r\n\r\n_EXPORT_STD struct piecewise_construct_t { // tag type for pair tuple arguments\r\n    explicit piecewise_construct_t() = default;\r\n};\r\n\r\n_EXPORT_STD _INLINE_VAR constexpr piecewise_construct_t piecewise_construct{};\r\n\r\nstruct _Ignore { // struct that ignores assignments\r\n    template <class _Ty>\r\n    constexpr const _Ignore& operator=(const _Ty&) const noexcept {\r\n        // do nothing\r\n        return *this;\r\n    }\r\n};\r\n\r\n_EXPORT_STD _INLINE_VAR constexpr _Ignore ignore{};\r\n\r\n_EXPORT_STD template <class... _Types>\r\nclass _NO_SPECIALIZATIONS_CITING(\"N5014 [tuple.tuple.general]/1\") tuple;\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\nstruct pair;\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Size>\r\nclass array;\r\n\r\n_EXPORT_STD template <class _Tuple>\r\nstruct tuple_size;\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES constexpr size_t tuple_size_v = tuple_size<_Ty>::value;\r\n\r\n_EXPORT_STD template <size_t _Index, class _Tuple>\r\nstruct tuple_element;\r\n\r\n_EXPORT_STD template <size_t _Index, class _Tuple>\r\nusing tuple_element_t = typename tuple_element<_Index, _Tuple>::type;\r\n\r\ntemplate <size_t _Index, class... _Types>\r\n_NODISCARD constexpr auto&& _Tuple_get(tuple<_Types...>&& _Tuple) noexcept;\r\n\r\n_EXPORT_STD template <size_t _Index, class... _Types>\r\n_NODISCARD constexpr tuple_element_t<_Index, tuple<_Types...>>& get(tuple<_Types...>& _Tuple) noexcept;\r\n\r\n_EXPORT_STD template <size_t _Index, class... _Types>\r\n_NODISCARD constexpr const tuple_element_t<_Index, tuple<_Types...>>& get(const tuple<_Types...>& _Tuple) noexcept;\r\n\r\n_EXPORT_STD template <size_t _Index, class... _Types>\r\n_NODISCARD constexpr tuple_element_t<_Index, tuple<_Types...>>&& get(tuple<_Types...>&& _Tuple) noexcept;\r\n\r\n_EXPORT_STD template <size_t _Index, class... _Types>\r\n_NODISCARD constexpr const tuple_element_t<_Index, tuple<_Types...>>&& get(const tuple<_Types...>&& _Tuple) noexcept;\r\n\r\n_EXPORT_STD template <size_t _Idx, class _Ty, size_t _Size>\r\n_NODISCARD constexpr _Ty& get(array<_Ty, _Size>& _Arr) noexcept;\r\n\r\n_EXPORT_STD template <size_t _Idx, class _Ty, size_t _Size>\r\n_NODISCARD constexpr const _Ty& get(const array<_Ty, _Size>& _Arr) noexcept;\r\n\r\n_EXPORT_STD template <size_t _Idx, class _Ty, size_t _Size>\r\n_NODISCARD constexpr _Ty&& get(array<_Ty, _Size>&& _Arr) noexcept;\r\n\r\n_EXPORT_STD template <size_t _Idx, class _Ty, size_t _Size>\r\n_NODISCARD constexpr const _Ty&& get(const array<_Ty, _Size>&& _Arr) noexcept;\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty1, class _Ty2>\r\nconcept _Different_from = !same_as<remove_cvref_t<_Ty1>, remove_cvref_t<_Ty2>>;\r\n\r\ntemplate <class>\r\nconstexpr bool _Is_subrange_v = false;\r\n\r\n#if _HAS_CXX23\r\ntemplate <class>\r\nconstexpr bool _Tuple_like_non_subrange_impl = false;\r\n\r\ntemplate <class... _Types>\r\nconstexpr bool _Tuple_like_non_subrange_impl<tuple<_Types...>> = true;\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nconstexpr bool _Tuple_like_non_subrange_impl<pair<_Ty1, _Ty2>> = true;\r\n\r\ntemplate <class _Ty, size_t _Size>\r\nconstexpr bool _Tuple_like_non_subrange_impl<array<_Ty, _Size>> = true;\r\n\r\ntemplate <class _Ty>\r\nconcept _Tuple_like_non_subrange = _Tuple_like_non_subrange_impl<remove_cvref_t<_Ty>>;\r\n\r\ntemplate <class _Ty>\r\nconcept _Tuple_like = _Tuple_like_non_subrange<_Ty> || _Is_subrange_v<remove_cvref_t<_Ty>>;\r\n\r\ntemplate <class _Ty>\r\nconcept _Pair_like_non_subrange = _Tuple_like_non_subrange<_Ty> && tuple_size_v<remove_cvref_t<_Ty>> == 2;\r\n\r\n#ifdef __EDG__ // TRANSITION, VSO-1900279\r\ntemplate <class _PairLike, class _Ty1, class _Ty2>\r\nconcept _Can_construct_from_pair_like =\r\n    _Pair_like_non_subrange<_PairLike> && is_constructible_v<_Ty1, decltype(_STD get<0>(_STD declval<_PairLike>()))>\r\n    && is_constructible_v<_Ty2, decltype(_STD get<1>(_STD declval<_PairLike>()))>;\r\n#endif // ^^^ workaround ^^^\r\n#endif // _HAS_CXX23\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\nstruct pair { // store a pair of values\r\n    using first_type  = _Ty1;\r\n    using second_type = _Ty2;\r\n\r\n    template <class _Uty1 = _Ty1, class _Uty2 = _Ty2,\r\n        enable_if_t<conjunction_v<is_default_constructible<_Uty1>, is_default_constructible<_Uty2>>, int> = 0>\r\n    constexpr explicit(\r\n        !conjunction_v<_Is_implicitly_default_constructible<_Uty1>, _Is_implicitly_default_constructible<_Uty2>>) pair()\r\n        noexcept(is_nothrow_default_constructible_v<_Uty1> && is_nothrow_default_constructible_v<_Uty2>) // strengthened\r\n        : first(), second() {}\r\n\r\n    template <class _Uty1 = _Ty1, class _Uty2 = _Ty2,\r\n        enable_if_t<conjunction_v<is_copy_constructible<_Uty1>, is_copy_constructible<_Uty2>>, int> = 0>\r\n    constexpr explicit(!conjunction_v<is_convertible<const _Uty1&, _Uty1>, is_convertible<const _Uty2&, _Uty2>>)\r\n        pair(const _Ty1& _Val1, const _Ty2& _Val2)\r\n            noexcept(is_nothrow_copy_constructible_v<_Uty1> && is_nothrow_copy_constructible_v<_Uty2>) // strengthened\r\n        : first(_Val1), second(_Val2) {}\r\n\r\n#if _HAS_CXX23\r\n    template <class _Other1 = _Ty1, class _Other2 = _Ty2,\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n    template <class _Other1, class _Other2,\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n        enable_if_t<conjunction_v<is_constructible<_Ty1, _Other1>, is_constructible<_Ty2, _Other2>>, int> = 0>\r\n    constexpr explicit(!conjunction_v<is_convertible<_Other1, _Ty1>, is_convertible<_Other2, _Ty2>>)\r\n        pair(_Other1&& _Val1, _Other2&& _Val2) noexcept(\r\n            is_nothrow_constructible_v<_Ty1, _Other1> && is_nothrow_constructible_v<_Ty2, _Other2>) // strengthened\r\n        : first(_STD forward<_Other1>(_Val1)), second(_STD forward<_Other2>(_Val2)) {\r\n    }\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _Other1 = _Ty1, class _Other2 = _Ty2,\r\n        enable_if_t<conjunction_v<is_constructible<_Ty1, _Other1>, is_constructible<_Ty2, _Other2>>, int> = 0>\r\n        requires reference_constructs_from_temporary_v<_Ty1, _Other1&&>\r\n                  || reference_constructs_from_temporary_v<_Ty2, _Other2&&>\r\n    explicit(!conjunction_v<is_convertible<_Other1, _Ty1>, is_convertible<_Other2, _Ty2>>)\r\n        pair(_Other1&&, _Other2&&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n    pair(const pair&) = default;\r\n    pair(pair&&)      = default;\r\n\r\n#if _HAS_CXX23\r\n    template <class _Other1, class _Other2>\r\n        requires is_constructible_v<_Ty1, _Other1&> && is_constructible_v<_Ty2, _Other2&>\r\n    constexpr explicit(!conjunction_v<is_convertible<_Other1&, _Ty1>, is_convertible<_Other2&, _Ty2>>)\r\n        pair(pair<_Other1, _Other2>& _Right) noexcept(\r\n            is_nothrow_constructible_v<_Ty1, _Other1&> && is_nothrow_constructible_v<_Ty2, _Other2&>) // strengthened\r\n        : first(_Right.first), second(_Right.second) {}\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _Other1, class _Other2>\r\n        requires is_constructible_v<_Ty1, _Other1&> && is_constructible_v<_Ty2, _Other2&>\r\n                  && (reference_constructs_from_temporary_v<_Ty1, _Other1&>\r\n                      || reference_constructs_from_temporary_v<_Ty2, _Other2&>)\r\n    explicit(!conjunction_v<is_convertible<_Other1&, _Ty1>, is_convertible<_Other2&, _Ty2>>)\r\n        pair(pair<_Other1, _Other2>&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Other1, class _Other2,\r\n        enable_if_t<conjunction_v<is_constructible<_Ty1, const _Other1&>, is_constructible<_Ty2, const _Other2&>>,\r\n            int> = 0>\r\n    constexpr explicit(!conjunction_v<is_convertible<const _Other1&, _Ty1>, is_convertible<const _Other2&, _Ty2>>)\r\n        pair(const pair<_Other1, _Other2>& _Right)\r\n            noexcept(is_nothrow_constructible_v<_Ty1, const _Other1&>\r\n                     && is_nothrow_constructible_v<_Ty2, const _Other2&>) // strengthened\r\n        : first(_Right.first), second(_Right.second) {}\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _Other1, class _Other2,\r\n        enable_if_t<conjunction_v<is_constructible<_Ty1, const _Other1&>, is_constructible<_Ty2, const _Other2&>>,\r\n            int> = 0>\r\n        requires reference_constructs_from_temporary_v<_Ty1, const _Other1&>\r\n                  || reference_constructs_from_temporary_v<_Ty2, const _Other2&>\r\n    explicit(!conjunction_v<is_convertible<const _Other1&, _Ty1>, is_convertible<const _Other2&, _Ty2>>)\r\n        pair(const pair<_Other1, _Other2>&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Other1, class _Other2,\r\n        enable_if_t<conjunction_v<is_constructible<_Ty1, _Other1>, is_constructible<_Ty2, _Other2>>, int> = 0>\r\n    constexpr explicit(!conjunction_v<is_convertible<_Other1, _Ty1>, is_convertible<_Other2, _Ty2>>)\r\n        pair(pair<_Other1, _Other2>&& _Right) noexcept(\r\n            is_nothrow_constructible_v<_Ty1, _Other1> && is_nothrow_constructible_v<_Ty2, _Other2>) // strengthened\r\n        : first(_STD forward<_Other1>(_Right.first)), second(_STD forward<_Other2>(_Right.second)) {}\r\n#if _HAS_CXX23\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _Other1, class _Other2,\r\n        enable_if_t<conjunction_v<is_constructible<_Ty1, _Other1>, is_constructible<_Ty2, _Other2>>, int> = 0>\r\n        requires reference_constructs_from_temporary_v<_Ty1, _Other1&&>\r\n                  || reference_constructs_from_temporary_v<_Ty2, _Other2&&>\r\n    explicit(!conjunction_v<is_convertible<_Other1, _Ty1>, is_convertible<_Other2, _Ty2>>)\r\n        pair(pair<_Other1, _Other2>&&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    template <class _Other1, class _Other2>\r\n        requires is_constructible_v<_Ty1, const _Other1> && is_constructible_v<_Ty2, const _Other2>\r\n    constexpr explicit(!conjunction_v<is_convertible<const _Other1, _Ty1>, is_convertible<const _Other2, _Ty2>>)\r\n        pair(const pair<_Other1, _Other2>&& _Right)\r\n            noexcept(is_nothrow_constructible_v<_Ty1, const _Other1>\r\n                     && is_nothrow_constructible_v<_Ty2, const _Other2>) // strengthened\r\n        : first(_STD forward<const _Other1>(_Right.first)), second(_STD forward<const _Other2>(_Right.second)) {}\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <class _Other1, class _Other2>\r\n        requires is_constructible_v<_Ty1, const _Other1> && is_constructible_v<_Ty2, const _Other2>\r\n                  && (reference_constructs_from_temporary_v<_Ty1, const _Other1 &&>\r\n                      || reference_constructs_from_temporary_v<_Ty2, const _Other2 &&>)\r\n    explicit(!conjunction_v<is_convertible<const _Other1, _Ty1>, is_convertible<const _Other2, _Ty2>>)\r\n        pair(const pair<_Other1, _Other2>&&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n\r\n#ifdef __EDG__ // TRANSITION, VSO-1900279\r\n    template <class _Other, enable_if_t<_Can_construct_from_pair_like<_Other, _Ty1, _Ty2>, int> = 0>\r\n#else // ^^^ workaround / no workaround vvv\r\n    template <_Pair_like_non_subrange _Other>\r\n        requires conjunction_v<is_constructible<_Ty1, decltype(_STD get<0>(_STD declval<_Other>()))>,\r\n                     is_constructible<_Ty2, decltype(_STD get<1>(_STD declval<_Other>()))>>\r\n#endif // ^^^ no workaround ^^^\r\n    constexpr explicit(!conjunction_v<is_convertible<decltype(_STD get<0>(_STD declval<_Other>())), _Ty1>,\r\n        is_convertible<decltype(_STD get<1>(_STD declval<_Other>())), _Ty2>>) pair(_Other&& _Right)\r\n        noexcept(is_nothrow_constructible_v<_Ty1, decltype(_STD get<0>(_STD declval<_Other>()))>\r\n                 && is_nothrow_constructible_v<_Ty2, decltype(_STD get<1>(_STD declval<_Other>()))>) // strengthened\r\n        : first(_STD get<0>(_STD forward<_Other>(_Right))), second(_STD get<1>(_STD forward<_Other>(_Right))) {\r\n    }\r\n#ifdef __cpp_lib_reference_from_temporary // TRANSITION\r\n    template <_Pair_like_non_subrange _Other>\r\n        requires conjunction_v<is_constructible<_Ty1, decltype(_STD get<0>(_STD declval<_Other>()))>,\r\n                     is_constructible<_Ty2, decltype(_STD get<1>(_STD declval<_Other>()))>>\r\n                  && (reference_constructs_from_temporary_v<_Ty1, decltype(_STD get<0>(_STD declval<_Other>()))>\r\n                      || reference_constructs_from_temporary_v<_Ty2, decltype(_STD get<1>(_STD declval<_Other>()))>)\r\n    explicit(!conjunction_v<is_convertible<decltype(_STD get<0>(_STD declval<_Other>())), _Ty1>,\r\n        is_convertible<decltype(_STD get<1>(_STD declval<_Other>())), _Ty2>>) pair(_Other&&) = delete;\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX23\r\n\r\n    template <class... _Types1, class... _Types2>\r\n    _CONSTEXPR20 pair(piecewise_construct_t, tuple<_Types1...> _Val1, tuple<_Types2...> _Val2)\r\n        : pair(_Val1, _Val2, index_sequence_for<_Types1...>{}, index_sequence_for<_Types2...>{}) {}\r\n\r\n    pair& operator=(const volatile pair&) = delete;\r\n\r\n    template <class _Myself = pair,\r\n        enable_if_t<conjunction_v<_Is_copy_assignable_no_precondition_check<typename _Myself::first_type>,\r\n                        _Is_copy_assignable_no_precondition_check<typename _Myself::second_type>>,\r\n            int>            = 0>\r\n    _CONSTEXPR20 pair& operator=(_Identity_t<const _Myself&> _Right)\r\n        noexcept(conjunction_v<is_nothrow_copy_assignable<_Ty1>, is_nothrow_copy_assignable<_Ty2>>) /* strengthened */ {\r\n        first  = _Right.first;\r\n        second = _Right.second;\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _Myself = pair>\r\n        requires _Is_copy_assignable_unchecked_v<const typename _Myself::first_type>\r\n              && _Is_copy_assignable_unchecked_v<const typename _Myself::second_type>\r\n    constexpr const pair& operator=(_Identity_t<const _Myself&> _Right) const\r\n        noexcept(conjunction_v<is_nothrow_copy_assignable<const _Ty1>,\r\n            is_nothrow_copy_assignable<const _Ty2>>) /* strengthened */ {\r\n        first  = _Right.first;\r\n        second = _Right.second;\r\n        return *this;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Myself = pair,\r\n        enable_if_t<conjunction_v<_Is_move_assignable_no_precondition_check<typename _Myself::first_type>,\r\n                        _Is_move_assignable_no_precondition_check<typename _Myself::second_type>>,\r\n            int>            = 0>\r\n    _CONSTEXPR20 pair& operator=(_Identity_t<_Myself&&> _Right)\r\n        noexcept(conjunction_v<is_nothrow_move_assignable<_Ty1>, is_nothrow_move_assignable<_Ty2>>) /* strengthened */ {\r\n        first  = _STD forward<_Ty1>(_Right.first);\r\n        second = _STD forward<_Ty2>(_Right.second);\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _Myself = pair>\r\n        requires _Is_assignable_no_precondition_check<const typename _Myself::first_type&, _Ty1>::value\r\n              && _Is_assignable_no_precondition_check<const typename _Myself::second_type&, _Ty2>::value\r\n    constexpr const pair& operator=(_Identity_t<_Myself&&> _Right) const\r\n        noexcept(conjunction_v<is_nothrow_assignable<const _Ty1&, _Ty1>,\r\n            is_nothrow_assignable<const _Ty2&, _Ty2>>) /* strengthened */ {\r\n        first  = _STD forward<_Ty1>(_Right.first);\r\n        second = _STD forward<_Ty2>(_Right.second);\r\n        return *this;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Other1, class _Other2,\r\n        enable_if_t<conjunction_v<negation<is_same<pair, pair<_Other1, _Other2>>>, is_assignable<_Ty1&, const _Other1&>,\r\n                        is_assignable<_Ty2&, const _Other2&>>,\r\n            int> = 0>\r\n    _CONSTEXPR20 pair& operator=(const pair<_Other1, _Other2>& _Right)\r\n        noexcept(is_nothrow_assignable_v<_Ty1&, const _Other1&>\r\n                 && is_nothrow_assignable_v<_Ty2&, const _Other2&>) /* strengthened */ {\r\n        first  = _Right.first;\r\n        second = _Right.second;\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _Other1, class _Other2>\r\n        requires (!is_same_v<pair, pair<_Other1, _Other2>>)\r\n              && is_assignable_v<const _Ty1&, const _Other1&> && is_assignable_v<const _Ty2&, const _Other2&>\r\n    constexpr const pair& operator=(const pair<_Other1, _Other2>& _Right) const\r\n        noexcept(is_nothrow_assignable_v<const _Ty1&, const _Other1&>\r\n                 && is_nothrow_assignable_v<const _Ty2&, const _Other2&>) /* strengthened */ {\r\n        first  = _Right.first;\r\n        second = _Right.second;\r\n        return *this;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    template <class _Other1, class _Other2,\r\n        enable_if_t<conjunction_v<negation<is_same<pair, pair<_Other1, _Other2>>>, is_assignable<_Ty1&, _Other1>,\r\n                        is_assignable<_Ty2&, _Other2>>,\r\n            int> = 0>\r\n    _CONSTEXPR20 pair& operator=(pair<_Other1, _Other2>&& _Right) noexcept(\r\n        is_nothrow_assignable_v<_Ty1&, _Other1> && is_nothrow_assignable_v<_Ty2&, _Other2>) /* strengthened */ {\r\n        first  = _STD forward<_Other1>(_Right.first);\r\n        second = _STD forward<_Other2>(_Right.second);\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _Other1, class _Other2>\r\n        requires (!is_same_v<pair, pair<_Other1, _Other2>>)\r\n              && is_assignable_v<const _Ty1&, _Other1> && is_assignable_v<const _Ty2&, _Other2>\r\n    constexpr const pair& operator=(pair<_Other1, _Other2>&& _Right) const\r\n        noexcept(is_nothrow_assignable_v<const _Ty1&, _Other1>\r\n                 && is_nothrow_assignable_v<const _Ty2&, _Other2>) /* strengthened */ {\r\n        first  = _STD forward<_Other1>(_Right.first);\r\n        second = _STD forward<_Other2>(_Right.second);\r\n        return *this;\r\n    }\r\n\r\n    template <_Pair_like_non_subrange _Other>\r\n        requires _Different_from<_Other, pair> && is_assignable_v<_Ty1&, decltype(_STD get<0>(_STD declval<_Other>()))>\r\n              && is_assignable_v<_Ty2&, decltype(_STD get<1>(_STD declval<_Other>()))>\r\n    constexpr pair& operator=(_Other&& _Right)\r\n        noexcept(is_nothrow_assignable_v<_Ty1&, decltype(_STD get<0>(_STD declval<_Other>()))>\r\n                 && is_nothrow_assignable_v<_Ty2&, decltype(_STD get<1>(_STD declval<_Other>()))>) /* strengthened */ {\r\n        first  = _STD get<0>(_STD forward<_Other>(_Right));\r\n        second = _STD get<1>(_STD forward<_Other>(_Right));\r\n        return *this;\r\n    }\r\n\r\n    template <_Pair_like_non_subrange _Other>\r\n        requires _Different_from<_Other, pair>\r\n              && is_assignable_v<const _Ty1&, decltype(_STD get<0>(_STD declval<_Other>()))>\r\n              && is_assignable_v<const _Ty2&, decltype(_STD get<1>(_STD declval<_Other>()))>\r\n    constexpr const pair& operator=(_Other&& _Right) const noexcept(\r\n        is_nothrow_assignable_v<const _Ty1&, decltype(_STD get<0>(_STD declval<_Other>()))>\r\n        && is_nothrow_assignable_v<const _Ty2&, decltype(_STD get<1>(_STD declval<_Other>()))>) /* strengthened */ {\r\n        first  = _STD get<0>(_STD forward<_Other>(_Right));\r\n        second = _STD get<1>(_STD forward<_Other>(_Right));\r\n        return *this;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 void swap(pair& _Right)\r\n        noexcept(_Is_nothrow_swappable<_Ty1>::value && _Is_nothrow_swappable<_Ty2>::value) {\r\n        using _STD swap;\r\n        swap(first, _Right.first); // intentional ADL\r\n        swap(second, _Right.second); // intentional ADL\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <int = 0> // see GH-3013\r\n    constexpr void swap(const pair& _Right) const\r\n        noexcept(is_nothrow_swappable_v<const _Ty1> && is_nothrow_swappable_v<const _Ty2>) {\r\n        using _STD swap;\r\n        swap(first, _Right.first); // intentional ADL\r\n        swap(second, _Right.second); // intentional ADL\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _Ty1 first; // the first stored value\r\n    _Ty2 second; // the second stored value\r\n\r\nprivate:\r\n    template <class _Tuple1, class _Tuple2, size_t... _Indices1, size_t... _Indices2>\r\n    constexpr pair(_Tuple1& _Val1, _Tuple2& _Val2, index_sequence<_Indices1...>, index_sequence<_Indices2...>)\r\n        : first(_STD _Tuple_get<_Indices1>(_STD move(_Val1))...),\r\n          second(_STD _Tuple_get<_Indices2>(_STD move(_Val2))...) {}\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Ty1, class _Ty2>\r\npair(_Ty1, _Ty2) -> pair<_Ty1, _Ty2>;\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2,\r\n    enable_if_t<_Is_swappable<_Ty1>::value && _Is_swappable<_Ty2>::value, int> = 0>\r\n_CONSTEXPR20 void swap(pair<_Ty1, _Ty2>& _Left, pair<_Ty1, _Ty2>& _Right) noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n#if _HAS_CXX23\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n    requires is_swappable<const _Ty1>::value && is_swappable<const _Ty2>::value // TRANSITION, /permissive needs ::value\r\nconstexpr void swap(const pair<_Ty1, _Ty2>& _Left, const pair<_Ty1, _Ty2>& _Right)\r\n    noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr bool operator==(const pair<_Ty1, _Ty2>& _Left, const pair<_Uty1, _Uty2>& _Right) {\r\n    return _Left.first == _Right.first && _Left.second == _Right.second;\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty1, class _Ty2, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr common_comparison_category_t<_Synth_three_way_result<_Ty1, _Uty1>,\r\n    _Synth_three_way_result<_Ty2, _Uty2>>\r\n    operator<=>(const pair<_Ty1, _Ty2>& _Left, const pair<_Uty1, _Uty2>& _Right) {\r\n    if (auto _Result = _Synth_three_way{}(_Left.first, _Right.first); _Result != 0) {\r\n        return _Result;\r\n    }\r\n    return _Synth_three_way{}(_Left.second, _Right.second);\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ty1, class _Ty2, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr bool operator!=(const pair<_Ty1, _Ty2>& _Left, const pair<_Uty1, _Uty2>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr bool operator<(const pair<_Ty1, _Ty2>& _Left, const pair<_Uty1, _Uty2>& _Right) {\r\n    return _Left.first < _Right.first || (!(_Right.first < _Left.first) && _Left.second < _Right.second);\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr bool operator>(const pair<_Ty1, _Ty2>& _Left, const pair<_Uty1, _Uty2>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr bool operator<=(const pair<_Ty1, _Ty2>& _Left, const pair<_Uty1, _Uty2>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr bool operator>=(const pair<_Ty1, _Ty2>& _Left, const pair<_Uty1, _Uty2>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Ty1, class _Ty2, class _Uty1, class _Uty2, template <class> class _TQual,\r\n    template <class> class _UQual>\r\n    requires requires {\r\n        typename pair<common_reference_t<_TQual<_Ty1>, _UQual<_Uty1>>, common_reference_t<_TQual<_Ty2>, _UQual<_Uty2>>>;\r\n    }\r\nstruct basic_common_reference<pair<_Ty1, _Ty2>, pair<_Uty1, _Uty2>, _TQual, _UQual> {\r\n    using type = pair<common_reference_t<_TQual<_Ty1>, _UQual<_Uty1>>, common_reference_t<_TQual<_Ty2>, _UQual<_Uty2>>>;\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2, class _Uty1, class _Uty2>\r\n    requires requires { typename pair<common_type_t<_Ty1, _Uty1>, common_type_t<_Ty2, _Uty2>>; }\r\nstruct common_type<pair<_Ty1, _Ty2>, pair<_Uty1, _Uty2>> {\r\n    using type = pair<common_type_t<_Ty1, _Uty1>, common_type_t<_Ty2, _Uty2>>;\r\n};\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Ty>\r\nstruct _Unrefwrap_helper { // leave unchanged if not a reference_wrapper\r\n    using type = _Ty;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Unrefwrap_helper<reference_wrapper<_Ty>> { // make a reference from a reference_wrapper\r\n    using type = _Ty&;\r\n};\r\n\r\n// decay, then unwrap a reference_wrapper\r\ntemplate <class _Ty>\r\nusing _Unrefwrap_t = typename _Unrefwrap_helper<decay_t<_Ty>>::type;\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr pair<_Unrefwrap_t<_Ty1>, _Unrefwrap_t<_Ty2>> make_pair(_Ty1&& _Val1, _Ty2&& _Val2)\r\n    noexcept(is_nothrow_constructible_v<_Unrefwrap_t<_Ty1>, _Ty1>\r\n             && is_nothrow_constructible_v<_Unrefwrap_t<_Ty2>, _Ty2>) /* strengthened */ {\r\n    // return pair composed from arguments\r\n    using _Mypair = pair<_Unrefwrap_t<_Ty1>, _Unrefwrap_t<_Ty2>>;\r\n    return _Mypair(_STD forward<_Ty1>(_Val1), _STD forward<_Ty2>(_Val2));\r\n}\r\n\r\nnamespace _CXX20_DEPRECATE_REL_OPS rel_ops {\r\n    _EXPORT_STD template <class _Ty>\r\n    _CXX20_DEPRECATE_REL_OPS _NODISCARD bool operator!=(const _Ty& _Left, const _Ty& _Right) {\r\n        return !(_Left == _Right);\r\n    }\r\n\r\n    _EXPORT_STD template <class _Ty>\r\n    _CXX20_DEPRECATE_REL_OPS _NODISCARD bool operator>(const _Ty& _Left, const _Ty& _Right) {\r\n        return _Right < _Left;\r\n    }\r\n\r\n    _EXPORT_STD template <class _Ty>\r\n    _CXX20_DEPRECATE_REL_OPS _NODISCARD bool operator<=(const _Ty& _Left, const _Ty& _Right) {\r\n        return !(_Right < _Left);\r\n    }\r\n\r\n    _EXPORT_STD template <class _Ty>\r\n    _CXX20_DEPRECATE_REL_OPS _NODISCARD bool operator>=(const _Ty& _Left, const _Ty& _Right) {\r\n        return !(_Left < _Right);\r\n    }\r\n} // namespace _CXX20_DEPRECATE_REL_OPS rel_ops\r\n\r\ntemplate <class _Tuple, class = void>\r\nstruct _Tuple_size_sfinae {}; // selected when tuple_size<_Tuple>::value isn't well-formed\r\n\r\ntemplate <class _Tuple>\r\nstruct _Tuple_size_sfinae<_Tuple, void_t<decltype(tuple_size<_Tuple>::value)>>\r\n    : integral_constant<size_t, tuple_size<_Tuple>::value> {}; // selected when tuple_size<_Tuple>::value is well-formed\r\n\r\ntemplate <class _Tuple>\r\nstruct tuple_size<const _Tuple> : _Tuple_size_sfinae<_Tuple> {}; // ignore cv\r\n\r\ntemplate <class _Tuple>\r\nstruct _CXX20_DEPRECATE_VOLATILE tuple_size<volatile _Tuple> : _Tuple_size_sfinae<_Tuple> {}; // ignore cv\r\n\r\ntemplate <class _Tuple>\r\nstruct _CXX20_DEPRECATE_VOLATILE tuple_size<const volatile _Tuple> : _Tuple_size_sfinae<_Tuple> {}; // ignore cv\r\n\r\ntemplate <size_t _Index, class _Tuple>\r\nstruct _MSVC_KNOWN_SEMANTICS tuple_element<_Index, const _Tuple> : tuple_element<_Index, _Tuple> {\r\n    using _Mybase = tuple_element<_Index, _Tuple>;\r\n    using type    = add_const_t<typename _Mybase::type>;\r\n};\r\n\r\ntemplate <size_t _Index, class _Tuple>\r\nstruct _CXX20_DEPRECATE_VOLATILE _MSVC_KNOWN_SEMANTICS\r\n    tuple_element<_Index, volatile _Tuple> : tuple_element<_Index, _Tuple> {\r\n    using _Mybase = tuple_element<_Index, _Tuple>;\r\n    using type    = add_volatile_t<typename _Mybase::type>;\r\n};\r\n\r\ntemplate <size_t _Index, class _Tuple>\r\nstruct _CXX20_DEPRECATE_VOLATILE _MSVC_KNOWN_SEMANTICS\r\n    tuple_element<_Index, const volatile _Tuple> : tuple_element<_Index, _Tuple> {\r\n    using _Mybase = tuple_element<_Index, _Tuple>;\r\n    using type    = add_cv_t<typename _Mybase::type>;\r\n};\r\n\r\ntemplate <class _Ty, size_t _Size>\r\nstruct tuple_size<array<_Ty, _Size>> : integral_constant<size_t, _Size> {}; // size of array\r\n\r\ntemplate <size_t _Idx, class _Ty, size_t _Size>\r\nstruct _MSVC_KNOWN_SEMANTICS tuple_element<_Idx, array<_Ty, _Size>> {\r\n    static_assert(_Idx < _Size, \"array index out of bounds\");\r\n\r\n    using type = _Ty;\r\n};\r\n\r\ntemplate <class... _Types>\r\nstruct tuple_size<tuple<_Types...>> : integral_constant<size_t, sizeof...(_Types)> {}; // size of tuple\r\n\r\ntemplate <size_t _Index>\r\nstruct _MSVC_KNOWN_SEMANTICS tuple_element<_Index, tuple<>> { // enforce bounds checking\r\n    static_assert(false, \"tuple index out of bounds\");\r\n};\r\n\r\ntemplate <class _This, class... _Rest>\r\nstruct _MSVC_KNOWN_SEMANTICS tuple_element<0, tuple<_This, _Rest...>> { // select first element\r\n    using type = _This;\r\n    // MSVC assumes the meaning of _Ttype; remove or rename, but do not change semantics\r\n    using _Ttype = tuple<_This, _Rest...>;\r\n};\r\n\r\ntemplate <size_t _Index, class _This, class... _Rest>\r\nstruct _MSVC_KNOWN_SEMANTICS tuple_element<_Index, tuple<_This, _Rest...>>\r\n    : tuple_element<_Index - 1, tuple<_Rest...>> {}; // recursive tuple_element definition\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct tuple_size<pair<_Ty1, _Ty2>> : integral_constant<size_t, 2> {}; // size of pair\r\n\r\ntemplate <size_t _Idx, class _Ty1, class _Ty2>\r\nstruct _MSVC_KNOWN_SEMANTICS tuple_element<_Idx, pair<_Ty1, _Ty2>> {\r\n    static_assert(_Idx < 2, \"pair index out of bounds\");\r\n\r\n    using type = conditional_t<_Idx == 0, _Ty1, _Ty2>;\r\n};\r\n\r\n_EXPORT_STD template <size_t _Idx, class _Ty1, class _Ty2>\r\n_NODISCARD constexpr tuple_element_t<_Idx, pair<_Ty1, _Ty2>>& get(pair<_Ty1, _Ty2>& _Pr) noexcept {\r\n    // get reference to element at _Idx in pair _Pr\r\n    if constexpr (_Idx == 0) {\r\n        return _Pr.first;\r\n    } else {\r\n        return _Pr.second;\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr _Ty1& get(pair<_Ty1, _Ty2>& _Pr) noexcept {\r\n    // get reference to element _Ty1 in pair _Pr\r\n    return _Pr.first;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty2, class _Ty1>\r\n_NODISCARD constexpr _Ty2& get(pair<_Ty1, _Ty2>& _Pr) noexcept {\r\n    // get reference to element _Ty2 in pair _Pr\r\n    return _Pr.second;\r\n}\r\n\r\n_EXPORT_STD template <size_t _Idx, class _Ty1, class _Ty2>\r\n_NODISCARD constexpr const tuple_element_t<_Idx, pair<_Ty1, _Ty2>>& get(const pair<_Ty1, _Ty2>& _Pr) noexcept {\r\n    // get const reference to element at _Idx in pair _Pr\r\n    if constexpr (_Idx == 0) {\r\n        return _Pr.first;\r\n    } else {\r\n        return _Pr.second;\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr const _Ty1& get(const pair<_Ty1, _Ty2>& _Pr) noexcept {\r\n    // get const reference to element _Ty1 in pair _Pr\r\n    return _Pr.first;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty2, class _Ty1>\r\n_NODISCARD constexpr const _Ty2& get(const pair<_Ty1, _Ty2>& _Pr) noexcept {\r\n    // get const reference to element _Ty2 in pair _Pr\r\n    return _Pr.second;\r\n}\r\n\r\n_EXPORT_STD template <size_t _Idx, class _Ty1, class _Ty2>\r\n_NODISCARD constexpr tuple_element_t<_Idx, pair<_Ty1, _Ty2>>&& get(pair<_Ty1, _Ty2>&& _Pr) noexcept {\r\n    // get rvalue reference to element at _Idx in pair _Pr\r\n    if constexpr (_Idx == 0) {\r\n        return _STD forward<_Ty1>(_Pr.first);\r\n    } else {\r\n        return _STD forward<_Ty2>(_Pr.second);\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr _Ty1&& get(pair<_Ty1, _Ty2>&& _Pr) noexcept {\r\n    // get rvalue reference to element _Ty1 in pair _Pr\r\n    return _STD forward<_Ty1>(_Pr.first);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty2, class _Ty1>\r\n_NODISCARD constexpr _Ty2&& get(pair<_Ty1, _Ty2>&& _Pr) noexcept {\r\n    // get rvalue reference to element _Ty2 in pair _Pr\r\n    return _STD forward<_Ty2>(_Pr.second);\r\n}\r\n\r\n_EXPORT_STD template <size_t _Idx, class _Ty1, class _Ty2>\r\n_NODISCARD constexpr const tuple_element_t<_Idx, pair<_Ty1, _Ty2>>&& get(const pair<_Ty1, _Ty2>&& _Pr) noexcept {\r\n    // get const rvalue reference to element at _Idx in pair _Pr\r\n    if constexpr (_Idx == 0) {\r\n        return _STD forward<const _Ty1>(_Pr.first);\r\n    } else {\r\n        return _STD forward<const _Ty2>(_Pr.second);\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr const _Ty1&& get(const pair<_Ty1, _Ty2>&& _Pr) noexcept {\r\n    // get const rvalue reference to element _Ty1 in pair _Pr\r\n    return _STD forward<const _Ty1>(_Pr.first);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty2, class _Ty1>\r\n_NODISCARD constexpr const _Ty2&& get(const pair<_Ty1, _Ty2>&& _Pr) noexcept {\r\n    // get const rvalue reference to element _Ty2 in pair _Pr\r\n    return _STD forward<const _Ty2>(_Pr.second);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Other = _Ty>\r\n_CONSTEXPR20 _Ty exchange(_Ty& _Val, _Other&& _New_val)\r\n    noexcept(conjunction_v<is_nothrow_move_constructible<_Ty>, is_nothrow_assignable<_Ty&, _Other>>) {\r\n    // assign _New_val to _Val, return previous _Val\r\n    _Ty _Old_val = static_cast<_Ty&&>(_Val);\r\n    _Val         = static_cast<_Other&&>(_New_val);\r\n    return _Old_val;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _MSVC_INTRINSIC constexpr add_const_t<_Ty>& as_const(_Ty& _Val) noexcept { // view _Val through const lenses\r\n    return _Val;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid as_const(const _Ty&&) = delete;\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD struct in_place_t { // tag used to select a constructor which initializes a contained object in place\r\n    explicit in_place_t() = default;\r\n};\r\n_EXPORT_STD inline constexpr in_place_t in_place{};\r\n\r\n_EXPORT_STD template <class>\r\nstruct in_place_type_t { // tag that selects a type to construct in place\r\n    explicit in_place_type_t() = default;\r\n};\r\n_EXPORT_STD template <class _Ty>\r\nconstexpr in_place_type_t<_Ty> in_place_type{};\r\n\r\n_EXPORT_STD template <size_t>\r\nstruct in_place_index_t { // tag that selects the index of a type to construct in place\r\n    explicit in_place_index_t() = default;\r\n};\r\n_EXPORT_STD template <size_t _Idx>\r\nconstexpr in_place_index_t<_Idx> in_place_index{};\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool _Cmp_equal(const _Ty1 _Left, const _Ty2 _Right) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_nonbool_integral<_Ty1> && _Is_nonbool_integral<_Ty2>); // allows character types\r\n    if constexpr (is_signed_v<_Ty1> == is_signed_v<_Ty2>) {\r\n        return _Left == _Right;\r\n    } else if constexpr (is_signed_v<_Ty2>) {\r\n        return _Left == static_cast<make_unsigned_t<_Ty2>>(_Right) && _Right >= 0;\r\n    } else {\r\n        return static_cast<make_unsigned_t<_Ty1>>(_Left) == _Right && _Left >= 0;\r\n    }\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool _Cmp_not_equal(const _Ty1 _Left, const _Ty2 _Right) noexcept {\r\n    return !_STD _Cmp_equal(_Left, _Right);\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool _Cmp_less(const _Ty1 _Left, const _Ty2 _Right) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_nonbool_integral<_Ty1> && _Is_nonbool_integral<_Ty2>); // allows character types\r\n    if constexpr (is_signed_v<_Ty1> == is_signed_v<_Ty2>) {\r\n        return _Left < _Right;\r\n    } else if constexpr (is_signed_v<_Ty2>) {\r\n        return _Right > 0 && _Left < static_cast<make_unsigned_t<_Ty2>>(_Right);\r\n    } else {\r\n        return _Left < 0 || static_cast<make_unsigned_t<_Ty1>>(_Left) < _Right;\r\n    }\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool _Cmp_greater(const _Ty1 _Left, const _Ty2 _Right) noexcept {\r\n    return _STD _Cmp_less(_Right, _Left);\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool _Cmp_less_equal(const _Ty1 _Left, const _Ty2 _Right) noexcept {\r\n    return !_STD _Cmp_less(_Right, _Left);\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool _Cmp_greater_equal(const _Ty1 _Left, const _Ty2 _Right) noexcept {\r\n    return !_STD _Cmp_less(_Left, _Right);\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr _Ty _Min_limit() noexcept { // same as (numeric_limits<_Ty>::min)(), less throughput cost\r\n    _STL_INTERNAL_STATIC_ASSERT(is_integral_v<_Ty>); // doesn't attempt to handle all types\r\n    if constexpr (is_signed_v<_Ty>) {\r\n        constexpr auto _Unsigned_max = static_cast<make_unsigned_t<_Ty>>(-1);\r\n        return static_cast<_Ty>((_Unsigned_max >> 1) + 1); // well-defined, N4950 [conv.integral]/3\r\n    } else {\r\n        return 0;\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr _Ty _Max_limit() noexcept { // same as (numeric_limits<_Ty>::max)(), less throughput cost\r\n    _STL_INTERNAL_STATIC_ASSERT(is_integral_v<_Ty>); // doesn't attempt to handle all types\r\n    if constexpr (is_signed_v<_Ty>) {\r\n        constexpr auto _Unsigned_max = static_cast<make_unsigned_t<_Ty>>(-1);\r\n        return static_cast<_Ty>(_Unsigned_max >> 1);\r\n    } else {\r\n        return static_cast<_Ty>(-1);\r\n    }\r\n}\r\n\r\ntemplate <class _Rx, class _Ty>\r\n_NODISCARD constexpr bool _In_range(const _Ty _Value) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_nonbool_integral<_Rx> && _Is_nonbool_integral<_Ty>); // allows character types\r\n\r\n    constexpr auto _Ty_min = _Min_limit<_Ty>();\r\n    constexpr auto _Rx_min = _Min_limit<_Rx>();\r\n\r\n    if constexpr (_STD _Cmp_less(_Ty_min, _Rx_min)) {\r\n        if (_Value < _Ty{_Rx_min}) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    constexpr auto _Ty_max = _Max_limit<_Ty>();\r\n    constexpr auto _Rx_max = _Max_limit<_Rx>();\r\n\r\n    if constexpr (_STD _Cmp_greater(_Ty_max, _Rx_max)) {\r\n        if (_Value > _Ty{_Rx_max}) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_standard_integer = _Is_any_of_v<_Ty, signed char, short, int, long, long long, unsigned char,\r\n    unsigned short, unsigned int, unsigned long, unsigned long long>;\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool cmp_equal(const _Ty1 _Left, const _Ty2 _Right) noexcept {\r\n    static_assert(_Is_standard_integer<_Ty1> && _Is_standard_integer<_Ty2>,\r\n        \"The integer comparison functions only accept standard and extended integer types.\");\r\n    return _STD _Cmp_equal(_Left, _Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool cmp_not_equal(const _Ty1 _Left, const _Ty2 _Right) noexcept {\r\n    static_assert(_Is_standard_integer<_Ty1> && _Is_standard_integer<_Ty2>,\r\n        \"The integer comparison functions only accept standard and extended integer types.\");\r\n    return _STD _Cmp_not_equal(_Left, _Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool cmp_less(const _Ty1 _Left, const _Ty2 _Right) noexcept {\r\n    static_assert(_Is_standard_integer<_Ty1> && _Is_standard_integer<_Ty2>,\r\n        \"The integer comparison functions only accept standard and extended integer types.\");\r\n    return _STD _Cmp_less(_Left, _Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool cmp_greater(const _Ty1 _Left, const _Ty2 _Right) noexcept {\r\n    static_assert(_Is_standard_integer<_Ty1> && _Is_standard_integer<_Ty2>,\r\n        \"The integer comparison functions only accept standard and extended integer types.\");\r\n    return _STD _Cmp_greater(_Left, _Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool cmp_less_equal(const _Ty1 _Left, const _Ty2 _Right) noexcept {\r\n    static_assert(_Is_standard_integer<_Ty1> && _Is_standard_integer<_Ty2>,\r\n        \"The integer comparison functions only accept standard and extended integer types.\");\r\n    return _STD _Cmp_less_equal(_Left, _Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool cmp_greater_equal(const _Ty1 _Left, const _Ty2 _Right) noexcept {\r\n    static_assert(_Is_standard_integer<_Ty1> && _Is_standard_integer<_Ty2>,\r\n        \"The integer comparison functions only accept standard and extended integer types.\");\r\n    return _STD _Cmp_greater_equal(_Left, _Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Rx, class _Ty>\r\n_NODISCARD constexpr bool in_range(const _Ty _Value) noexcept {\r\n    static_assert(_Is_standard_integer<_Rx> && _Is_standard_integer<_Ty>,\r\n        \"The integer comparison functions only accept standard and extended integer types.\");\r\n    return _STD _In_range<_Rx>(_Value);\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n_EXPORT_STD template <class _Ty> // TRANSITION, VSO-2253317: should be _MSVC_INTRINSIC\r\n_NODISCARD constexpr underlying_type_t<_Ty> to_underlying(_Ty _Value) noexcept {\r\n    return static_cast<underlying_type_t<_Ty>>(_Value);\r\n}\r\n\r\n_EXPORT_STD [[noreturn]] __forceinline void unreachable() noexcept /* strengthened */ {\r\n    _STL_UNREACHABLE;\r\n}\r\n\r\ntemplate <class _Ty, class _Uty,\r\n    class _Tmp = _Maybe_const<is_const_v<remove_reference_t<_Ty>>, remove_reference_t<_Uty>>>\r\nusing _Forward_like_t = conditional_t<is_rvalue_reference_v<_Ty&&>, _Tmp&&, _Tmp&>;\r\n\r\n_EXPORT_STD template <class _Ty, class _Uty>\r\n_NODISCARD _MSVC_INTRINSIC constexpr _Forward_like_t<_Ty, _Uty> forward_like(_Uty&& _Ux) noexcept {\r\n    return static_cast<_Forward_like_t<_Ty, _Uty>>(_Ux);\r\n}\r\n#endif // _HAS_CXX23\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD struct monostate {};\r\n\r\n_EXPORT_STD _NODISCARD constexpr bool operator==(monostate, monostate) noexcept {\r\n    return true;\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD _NODISCARD constexpr strong_ordering operator<=>(monostate, monostate) noexcept {\r\n    return strong_ordering::equal;\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n_NODISCARD constexpr bool operator!=(monostate, monostate) noexcept {\r\n    return false;\r\n}\r\n_NODISCARD constexpr bool operator<(monostate, monostate) noexcept {\r\n    return false;\r\n}\r\n_NODISCARD constexpr bool operator>(monostate, monostate) noexcept {\r\n    return false;\r\n}\r\n_NODISCARD constexpr bool operator<=(monostate, monostate) noexcept {\r\n    return true;\r\n}\r\n_NODISCARD constexpr bool operator>=(monostate, monostate) noexcept {\r\n    return true;\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\ntemplate <>\r\nstruct hash<monostate> {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = monostate;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = size_t;\r\n\r\n    _NODISCARD static size_t operator()(monostate) noexcept {\r\n        return 1729; // Arbitrary value\r\n    }\r\n};\r\n#endif // _HAS_CXX17\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"lifetimebound\")\r\n#pragma pop_macro(\"known_semantics\")\r\n#pragma pop_macro(\"intrinsic\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _UTILITY_\r\n"
  },
  {
    "path": "stl/inc/valarray",
    "content": "// valarray standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _VALARRAY_\r\n#define _VALARRAY_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <cmath>\r\n#include <xmemory>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD class gslice;\r\n_EXPORT_STD class slice;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass gslice_array;\r\n_EXPORT_STD template <class _Ty>\r\nclass indirect_array;\r\n_EXPORT_STD template <class _Ty>\r\nclass mask_array;\r\n_EXPORT_STD template <class _Ty>\r\nclass slice_array;\r\n_EXPORT_STD template <class _Ty>\r\nclass valarray;\r\n\r\ntemplate <class _Ty>\r\n_Ty* _Allocate_for_op_delete(size_t _Count) {\r\n    // allocates space for _Count objects of type _Ty\r\n    if (_Count == 0) {\r\n        return nullptr;\r\n    }\r\n\r\n    const size_t _Bytes = _Get_size_of_n<sizeof(_Ty)>(_Count);\r\n#ifdef __cpp_aligned_new\r\n    constexpr bool _Extended_alignment = alignof(_Ty) > __STDCPP_DEFAULT_NEW_ALIGNMENT__;\r\n    if constexpr (_Extended_alignment) {\r\n        return static_cast<_Ty*>(::operator new(_Bytes, align_val_t{alignof(_Ty)}));\r\n    } else\r\n#endif // defined(__cpp_aligned_new)\r\n    {\r\n        return static_cast<_Ty*>(::operator new(_Bytes));\r\n    }\r\n}\r\n\r\nusing _Boolarray = valarray<bool>;\r\nusing _Sizarray  = valarray<size_t>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass valarray { // store array with various indexing options\r\npublic:\r\n    friend _Tidy_deallocate_guard<valarray>;\r\n\r\n    using value_type     = _Ty;\r\n    using iterator       = _Ty*;\r\n    using const_iterator = const _Ty*;\r\n\r\n    valarray() = default; // construct empty valarray\r\n\r\n    explicit valarray(size_t _Count) { // construct with _Count * _Ty()\r\n        _Grow(_Count);\r\n    }\r\n\r\n    valarray(const _Ty& _Val, size_t _Count) { // construct with _Count * _Val\r\n        _Grow(_Count, _STD addressof(_Val));\r\n    }\r\n\r\n    valarray(const _Ty* _Ptr, size_t _Count) { // construct with [_Ptr, _Ptr + _Count)\r\n        _Grow(_Count, _Ptr, 1);\r\n    }\r\n\r\n    valarray(const valarray& _Right) {\r\n        _Grow(_Right.size(), _Right._Myptr, 1);\r\n    }\r\n\r\n    valarray(const slice_array<_Ty>& _Slicearr) {\r\n        *this = _Slicearr;\r\n    }\r\n\r\n    valarray(const gslice_array<_Ty>& _Gslicearr) {\r\n        *this = _Gslicearr;\r\n    }\r\n\r\n    valarray(const mask_array<_Ty>& _Maskarr) {\r\n        *this = _Maskarr;\r\n    }\r\n\r\n    valarray(const indirect_array<_Ty>& _Indarr) {\r\n        *this = _Indarr;\r\n    }\r\n\r\n    valarray(valarray&& _Right) noexcept\r\n        : _Myptr(_STD exchange(_Right._Myptr, nullptr)), _Mysize(_STD exchange(_Right._Mysize, size_t{})) {}\r\n\r\n    valarray& operator=(valarray&& _Right) noexcept {\r\n        if (this != _STD addressof(_Right)) { // clear this and steal from _Right\r\n            _Tidy_deallocate();\r\n            _Myptr  = _STD exchange(_Right._Myptr, nullptr);\r\n            _Mysize = _STD exchange(_Right._Mysize, size_t{});\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray(initializer_list<_Ty> _Ilist) {\r\n        _Grow(_Ilist.size(), _Ilist.begin(), 1);\r\n    }\r\n\r\n    valarray& operator=(initializer_list<_Ty> _Ilist) {\r\n        _Assign(_Ilist.size(), _Ilist.begin());\r\n        return *this;\r\n    }\r\n\r\n    void swap(valarray& _Right) noexcept {\r\n        if (this != _STD addressof(_Right)) {\r\n            _STD swap(_Myptr, _Right._Myptr);\r\n            _STD swap(_Mysize, _Right._Mysize);\r\n        }\r\n    }\r\n\r\n    ~valarray() noexcept {\r\n        _Tidy_deallocate();\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n        const auto _Tombstone{reinterpret_cast<_Ty*>(_MSVC_STL_UINTPTR_TOMBSTONE_VALUE)};\r\n        _Myptr = _Tombstone;\r\n\r\n        // _Tidy_deallocate() sets _Mysize to 0, so we don't need to set it here.\r\n        _STL_INTERNAL_CHECK(_Mysize == 0);\r\n#endif // _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n    }\r\n\r\n    valarray& operator=(const valarray& _Right) {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Assign(_Right.size(), _Right._Myptr);\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator=(const _Ty& _Val) {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] = _Val;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    void resize(size_t _Newsize) { // determine new length, filling with _Ty() elements\r\n        _Tidy_deallocate();\r\n        _Grow(_Newsize);\r\n    }\r\n\r\n    void resize(size_t _Newsize, _Ty _Val) { // determine new length, filling with _Val elements\r\n        _Tidy_deallocate();\r\n        _Grow(_Newsize, _STD addressof(_Val), 0);\r\n    }\r\n\r\n    valarray& operator=(const slice_array<_Ty>& _Slicearr); // defined below\r\n\r\n    valarray& operator=(const gslice_array<_Ty>& _Gslicearr); // defined below\r\n\r\n    valarray& operator=(const mask_array<_Ty>& _Maskarr); // defined below\r\n\r\n    valarray& operator=(const indirect_array<_Ty>& _Indarr); // defined below\r\n\r\n    _NODISCARD valarray operator+() const {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        valarray<_Ty> _Ans(_Size);\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Ans[_Idx] = +_Myptr[_Idx];\r\n        }\r\n        return _Ans;\r\n    }\r\n\r\n    _NODISCARD valarray operator-() const {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        valarray<_Ty> _Ans(_Size);\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Ans[_Idx] = -_Myptr[_Idx];\r\n        }\r\n        return _Ans;\r\n    }\r\n\r\n    _NODISCARD valarray operator~() const {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        valarray<_Ty> _Ans(_Size);\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Ans[_Idx] = ~_Myptr[_Idx];\r\n        }\r\n        return _Ans;\r\n    }\r\n\r\n    _NODISCARD _Boolarray operator!() const {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        valarray<bool> _Ans(_Size);\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Ans[_Idx] = !_Myptr[_Idx];\r\n        }\r\n        return _Ans;\r\n    }\r\n\r\n    valarray& operator*=(const _Ty& _Right) {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] *= _Right;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator/=(const _Ty& _Right) {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] /= _Right;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator%=(const _Ty& _Right) {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] %= _Right;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator+=(const _Ty& _Right) {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] += _Right;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator-=(const _Ty& _Right) {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] -= _Right;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator^=(const _Ty& _Right) {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] ^= _Right;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator&=(const _Ty& _Right) {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] &= _Right;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator|=(const _Ty& _Right) {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] |= _Right;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator<<=(const _Ty& _Right) {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] <<= _Right;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator>>=(const _Ty& _Right) {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] >>= _Right;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator*=(const valarray& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mysize == _Right._Mysize, \"valarrays of different lengths\");\r\n#endif\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] *= _Right[_Idx];\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator/=(const valarray& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mysize == _Right._Mysize, \"valarrays of different lengths\");\r\n#endif\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] /= _Right[_Idx];\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator%=(const valarray& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mysize == _Right._Mysize, \"valarrays of different lengths\");\r\n#endif\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] %= _Right[_Idx];\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator+=(const valarray& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mysize == _Right._Mysize, \"valarrays of different lengths\");\r\n#endif\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] += _Right[_Idx];\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator-=(const valarray& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mysize == _Right._Mysize, \"valarrays of different lengths\");\r\n#endif\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] -= _Right[_Idx];\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator^=(const valarray& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mysize == _Right._Mysize, \"valarrays of different lengths\");\r\n#endif\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] ^= _Right[_Idx];\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator|=(const valarray& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mysize == _Right._Mysize, \"valarrays of different lengths\");\r\n#endif\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] |= _Right[_Idx];\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator&=(const valarray& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mysize == _Right._Mysize, \"valarrays of different lengths\");\r\n#endif\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] &= _Right[_Idx];\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator<<=(const valarray& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mysize == _Right._Mysize, \"valarrays of different lengths\");\r\n#endif\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] <<= _Right[_Idx];\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    valarray& operator>>=(const valarray& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mysize == _Right._Mysize, \"valarrays of different lengths\");\r\n#endif\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Idx] >>= _Right[_Idx];\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD size_t size() const noexcept /* strengthened */ {\r\n        return _Mysize;\r\n    }\r\n\r\n    _NODISCARD iterator begin() noexcept /* strengthened */ {\r\n        return _Myptr;\r\n    }\r\n\r\n    _NODISCARD const_iterator begin() const noexcept /* strengthened */ {\r\n        return _Myptr;\r\n    }\r\n\r\n    _NODISCARD iterator end() noexcept /* strengthened */ {\r\n        return _Myptr + _Mysize;\r\n    }\r\n\r\n    _NODISCARD const_iterator end() const noexcept /* strengthened */ {\r\n        return _Myptr + _Mysize;\r\n    }\r\n\r\n    _NODISCARD const _Ty& operator[](size_t _Off) const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_VALARRAY || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Off < _Mysize, \"valarray subscript out of range\");\r\n#endif\r\n\r\n        return _Myptr[_Off];\r\n    }\r\n\r\n    _NODISCARD _Ty& operator[](size_t _Off) noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_VALARRAY || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Off < _Mysize, \"valarray subscript out of range\");\r\n#endif\r\n\r\n        return _Myptr[_Off];\r\n    }\r\n\r\n    _NODISCARD valarray operator[](slice _Slicearr) const; // defined below\r\n\r\n    _NODISCARD slice_array<_Ty> operator[](slice _Slicearr) noexcept /* strengthened */; // defined below\r\n\r\n    _NODISCARD valarray operator[](const gslice& _Gslicearr) const; // defined below\r\n\r\n    _NODISCARD gslice_array<_Ty> operator[](const gslice& _Gslicearr); // defined below\r\n\r\n    _NODISCARD valarray operator[](const _Boolarray& _Boolarr) const; // defined below\r\n\r\n    _NODISCARD mask_array<_Ty> operator[](const _Boolarray& _Boolarr); // defined below\r\n\r\n    _NODISCARD valarray operator[](const _Sizarray& _Indarr) const; // defined below\r\n\r\n    _NODISCARD indirect_array<_Ty> operator[](const _Sizarray& _Indarr); // defined below\r\n\r\n    _NODISCARD _Ty sum() const {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        _Ty _Sum           = _Myptr[0];\r\n        for (size_t _Idx = 1; _Idx < _Size; ++_Idx) {\r\n            _Sum += _Myptr[_Idx];\r\n        }\r\n\r\n        return _Sum;\r\n    }\r\n\r\n    _NODISCARD _Ty(min)() const {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        _Ty _Min           = _Myptr[0];\r\n        for (size_t _Idx = 1; _Idx < _Size; ++_Idx) {\r\n            if (_Myptr[_Idx] < _Min) {\r\n                _Min = _Myptr[_Idx];\r\n            }\r\n        }\r\n\r\n        return _Min;\r\n    }\r\n\r\n    _NODISCARD _Ty(max)() const {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        _Ty _Max           = _Myptr[0];\r\n        for (size_t _Idx = 1; _Idx < _Size; ++_Idx) {\r\n            if (_Max < _Myptr[_Idx]) {\r\n                _Max = _Myptr[_Idx];\r\n            }\r\n        }\r\n\r\n        return _Max;\r\n    }\r\n\r\n    _NODISCARD valarray shift(int _Count) const {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        valarray<_Ty> _Ans(_Size);\r\n        size_t _Min = 0;\r\n        size_t _Max = _Size;\r\n        if (_Count < 0) {\r\n            const size_t _Skip = static_cast<size_t>(-_Count);\r\n            _Min += _Skip;\r\n        } else {\r\n            const size_t _Skip = static_cast<size_t>(_Count);\r\n            if (_Skip < _Size) {\r\n                _Max -= _Skip;\r\n            } else {\r\n                _Max = 0;\r\n            }\r\n        }\r\n        for (size_t _Idx = _Min; _Idx < _Max; ++_Idx) {\r\n            _Ans[_Idx] = _Myptr[_Idx + _Count];\r\n        }\r\n        return _Ans;\r\n    }\r\n\r\n    _NODISCARD valarray cshift(int _Count) const {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        if (_Size != 0) {\r\n            if (_Count < 0) { // right shift\r\n                if (_Size < size_t{0} - _Count) {\r\n                    _Count = static_cast<int>(_Size - (size_t{0} - _Count - _Size) % _Size);\r\n                } else {\r\n                    _Count = static_cast<int>(_Size + _Count);\r\n                }\r\n            } else if (_Size <= static_cast<size_t>(_Count)) {\r\n                _Count %= _Size;\r\n            }\r\n        }\r\n\r\n        valarray<_Ty> _Ans(_Size);\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Ans[_Idx] =\r\n                _Size - _Idx <= static_cast<size_t>(_Count) ? _Myptr[_Idx - _Size + _Count] : _Myptr[_Idx + _Count];\r\n        }\r\n        return _Ans;\r\n    }\r\n\r\n    _NODISCARD valarray apply(_Ty _Func(_Ty)) const {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        valarray<_Ty> _Ans(_Size);\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Ans[_Idx] = _Func(_Myptr[_Idx]);\r\n        }\r\n        return _Ans;\r\n    }\r\n\r\n    _NODISCARD valarray apply(_Ty _Func(const _Ty&)) const {\r\n        // return valarray transformed by _Func, nonmutable argument\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        valarray<_Ty> _Ans(_Size);\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Ans[_Idx] = _Func(_Myptr[_Idx]);\r\n        }\r\n        return _Ans;\r\n    }\r\n\r\nprivate:\r\n    void _Grow(size_t _Newsize) { // allocate space for _Count elements and fill with default values\r\n        if (0 < _Newsize) { // worth doing, allocate\r\n            _Myptr = _Allocate_for_op_delete<_Ty>(_Newsize);\r\n            _Tidy_deallocate_guard<valarray> _Guard{this};\r\n            for (size_t _Idx = 0; _Idx < _Newsize; ++_Idx) {\r\n                _STD _Construct_in_place(_Myptr[_Idx]);\r\n            }\r\n\r\n            _Guard._Target = nullptr;\r\n            _Mysize        = _Newsize;\r\n        }\r\n    }\r\n\r\n    void _Grow(size_t _Newsize, const _Ty* _Ptr, size_t _Inc = 0) {\r\n        // allocate space for _Count elements and fill with *_Ptr\r\n        if (0 < _Newsize) { // worth doing, allocate\r\n            _Myptr = _Allocate_for_op_delete<_Ty>(_Newsize);\r\n            _Tidy_deallocate_guard<valarray> _Guard{this};\r\n            for (size_t _Idx = 0; _Idx < _Newsize; ++_Idx, _Ptr += _Inc) {\r\n                _STD _Construct_in_place(_Myptr[_Idx], *_Ptr);\r\n            }\r\n\r\n            _Guard._Target = nullptr;\r\n            _Mysize        = _Newsize;\r\n        }\r\n    }\r\n\r\n    void _Tidy_deallocate() noexcept {\r\n        if (_Myptr) { // destroy elements\r\n            _STD _Destroy_range(_Myptr, _Myptr + _Mysize);\r\n#ifdef __cpp_aligned_new\r\n            constexpr bool _Extended_alignment = alignof(_Ty) > __STDCPP_DEFAULT_NEW_ALIGNMENT__;\r\n            if constexpr (_Extended_alignment) {\r\n                ::operator delete(static_cast<void*>(_Myptr), align_val_t{alignof(_Ty)});\r\n            } else\r\n#endif // defined(__cpp_aligned_new)\r\n            {\r\n                ::operator delete(static_cast<void*>(_Myptr));\r\n            }\r\n        }\r\n\r\n        _Mysize = 0;\r\n        _Myptr  = nullptr;\r\n    }\r\n\r\n    void _Assign(size_t _Newsize, const _Ty* _Ptr) {\r\n        const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n        if (_Size == _Newsize) {\r\n            for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n                _Myptr[_Idx] = _Ptr[_Idx];\r\n            }\r\n        } else { // resize and copy\r\n            _Tidy_deallocate();\r\n            _Grow(_Newsize, _Ptr, 1);\r\n        }\r\n    }\r\n\r\n    _Ty* _Myptr    = nullptr; // current storage reserved for array\r\n    size_t _Mysize = 0; // current length of sequence\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Ty, size_t _Nx>\r\nvalarray(const _Ty (&)[_Nx], size_t) -> valarray<_Ty>;\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Ty>\r\nvoid swap(valarray<_Ty>& _Left, valarray<_Ty>& _Right) noexcept {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator*(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] * _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator*(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left * _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator/(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] / _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator/(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left / _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator%(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] % _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator%(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left % _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator+(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] + _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator+(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left + _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator-(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] - _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator-(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left - _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator^(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] ^ _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator^(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left ^ _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator&(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] & _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator&(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left & _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator|(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] | _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator|(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left | _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator<<(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] << _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator<<(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left << _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator>>(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] >> _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator>>(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left >> _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator&&(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] && _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator&&(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left && _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator||(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] || _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator||(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left || _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator*(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] * _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator/(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] / _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator%(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] % _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator+(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] + _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator-(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] - _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator^(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] ^ _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator&(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] & _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator|(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] | _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator<<(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] << _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> operator>>(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] >> _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator&&(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] && _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator||(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] || _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator==(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] == _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator==(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left == _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator==(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] == _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator!=(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] != _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator!=(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left != _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator!=(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] != _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator<(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] < _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator<(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left < _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator<(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] < _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator>(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] > _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator>(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left > _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator>(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] > _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator<=(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] <= _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator<=(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left <= _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator<=(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] <= _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator>=(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] >= _Right;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator>=(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left >= _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD _Boolarray operator>=(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _STL_VERIFY(_Left.size() == _Right.size(), \"valarrays of different lengths\");\r\n#endif\r\n    const size_t _Size = _Left.size();\r\n    valarray<bool> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = _Left[_Idx] >= _Right[_Idx];\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n// [valarray.transcend] Transcendentals\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> abs(const valarray<_Ty>& _Left) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = abs(_Left[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> acos(const valarray<_Ty>& _Left) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = acos(_Left[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> asin(const valarray<_Ty>& _Left) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = asin(_Left[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> atan(const valarray<_Ty>& _Left) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = atan(_Left[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> atan2(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = atan2(_Left[_Idx], _Right[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> atan2(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = atan2(_Left[_Idx], _Right); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> atan2(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = atan2(_Left, _Right[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> cos(const valarray<_Ty>& _Left) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = cos(_Left[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> cosh(const valarray<_Ty>& _Left) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = cosh(_Left[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> exp(const valarray<_Ty>& _Left) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = exp(_Left[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> log(const valarray<_Ty>& _Left) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = log(_Left[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> log10(const valarray<_Ty>& _Left) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = log10(_Left[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> pow(const valarray<_Ty>& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = pow(_Left[_Idx], _Right[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> pow(const valarray<_Ty>& _Left, const typename valarray<_Ty>::value_type& _Right) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = pow(_Left[_Idx], _Right); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> pow(const typename valarray<_Ty>::value_type& _Left, const valarray<_Ty>& _Right) {\r\n    const size_t _Size = _Right.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = pow(_Left, _Right[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> sin(const valarray<_Ty>& _Left) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = sin(_Left[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> sinh(const valarray<_Ty>& _Left) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = sinh(_Left[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> sqrt(const valarray<_Ty>& _Left) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = sqrt(_Left[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> tan(const valarray<_Ty>& _Left) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = tan(_Left[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD valarray<_Ty> tanh(const valarray<_Ty>& _Left) {\r\n    const size_t _Size = _Left.size();\r\n    valarray<_Ty> _Ans(_Size);\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Ans[_Idx] = tanh(_Left[_Idx]); // intentional ADL, N4950 [valarray.transcend]/1\r\n    }\r\n    return _Ans;\r\n}\r\n\r\n_EXPORT_STD class slice { // define a slice of a valarray\r\npublic:\r\n    slice() = default;\r\n\r\n    slice(size_t _Off, size_t _Count, size_t _Inc) noexcept // strengthened\r\n        : _Start(_Off), _Len(_Count), _Stride(_Inc) {}\r\n\r\n    _NODISCARD size_t start() const noexcept /* strengthened */ {\r\n        return _Start;\r\n    }\r\n\r\n    _NODISCARD size_t size() const noexcept /* strengthened */ {\r\n        return _Len;\r\n    }\r\n\r\n    _NODISCARD size_t stride() const noexcept /* strengthened */ {\r\n        return _Stride;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD friend bool operator==(const slice& _Left, const slice& _Right) noexcept /* strengthened */ {\r\n        return _Left.start() == _Right.start() && _Left.size() == _Right.size() && _Left.stride() == _Right.stride();\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\nprotected:\r\n    size_t _Start  = 0; // the starting offset\r\n    size_t _Len    = 0; // the number of elements\r\n    size_t _Stride = 0; // the distance between elements\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass slice_array : public slice { // define a slice of a valarray\r\npublic:\r\n    using value_type = _Ty;\r\n\r\n    void operator=(const valarray<_Ty>& _Right) const {\r\n        size_t _Off = _Start;\r\n        for (size_t _Idx = 0; _Idx < _Len; ++_Idx, _Off += _Stride) {\r\n            _Myptr[_Off] = _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator=(const _Ty& _Right) const {\r\n        size_t _Off = _Start;\r\n        for (size_t _Idx = 0; _Idx < _Len; ++_Idx, _Off += _Stride) {\r\n            _Myptr[_Off] = _Right;\r\n        }\r\n    }\r\n\r\n    void operator*=(const valarray<_Ty>& _Right) const {\r\n        size_t _Off = _Start;\r\n        for (size_t _Idx = 0; _Idx < _Len; ++_Idx, _Off += _Stride) {\r\n            _Myptr[_Off] *= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator/=(const valarray<_Ty>& _Right) const {\r\n        size_t _Off = _Start;\r\n        for (size_t _Idx = 0; _Idx < _Len; ++_Idx, _Off += _Stride) {\r\n            _Myptr[_Off] /= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator%=(const valarray<_Ty>& _Right) const {\r\n        size_t _Off = _Start;\r\n        for (size_t _Idx = 0; _Idx < _Len; ++_Idx, _Off += _Stride) {\r\n            _Myptr[_Off] %= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator+=(const valarray<_Ty>& _Right) const {\r\n        size_t _Off = _Start;\r\n        for (size_t _Idx = 0; _Idx < _Len; ++_Idx, _Off += _Stride) {\r\n            _Myptr[_Off] += _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator-=(const valarray<_Ty>& _Right) const {\r\n        size_t _Off = _Start;\r\n        for (size_t _Idx = 0; _Idx < _Len; ++_Idx, _Off += _Stride) {\r\n            _Myptr[_Off] -= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator^=(const valarray<_Ty>& _Right) const {\r\n        size_t _Off = _Start;\r\n        for (size_t _Idx = 0; _Idx < _Len; ++_Idx, _Off += _Stride) {\r\n            _Myptr[_Off] ^= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator&=(const valarray<_Ty>& _Right) const {\r\n        size_t _Off = _Start;\r\n        for (size_t _Idx = 0; _Idx < _Len; ++_Idx, _Off += _Stride) {\r\n            _Myptr[_Off] &= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator|=(const valarray<_Ty>& _Right) const {\r\n        size_t _Off = _Start;\r\n        for (size_t _Idx = 0; _Idx < _Len; ++_Idx, _Off += _Stride) {\r\n            _Myptr[_Off] |= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator<<=(const valarray<_Ty>& _Right) const {\r\n        size_t _Off = _Start;\r\n        for (size_t _Idx = 0; _Idx < _Len; ++_Idx, _Off += _Stride) {\r\n            _Myptr[_Off] <<= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator>>=(const valarray<_Ty>& _Right) const {\r\n        size_t _Off = _Start;\r\n        for (size_t _Idx = 0; _Idx < _Len; ++_Idx, _Off += _Stride) {\r\n            _Myptr[_Off] >>= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    _Ty& _Data(size_t _Idx) const noexcept {\r\n        return _Myptr[_Idx];\r\n    }\r\n\r\n    slice_array() = delete;\r\n\r\n    slice_array(const slice_array&) = default;\r\n\r\n    const slice_array& operator=(const slice_array& _Right) const noexcept /* strengthened */ {\r\n        size_t _Dst_off = _Start;\r\n        size_t _Src_off = _Right._Start;\r\n        for (size_t _Idx = 0; _Idx < _Len; ++_Idx, _Dst_off += _Stride, _Src_off += _Right._Stride) {\r\n            _Myptr[_Dst_off] = _Right._Myptr[_Src_off];\r\n        }\r\n        return *this;\r\n    }\r\n\r\nprivate:\r\n    friend valarray<_Ty>;\r\n\r\n    slice_array(const slice& _Slice, _Ty* _Pdata) noexcept : slice(_Slice), _Myptr(_Pdata) {}\r\n\r\n    _Ty* _Myptr; // pointer to valarray contents\r\n};\r\n\r\n_EXPORT_STD class gslice { // define a generalized (multidimensional) slice of a valarray\r\npublic:\r\n    gslice() = default; // construct with all zeros\r\n\r\n    gslice(size_t _Off, const _Sizarray& _Lenarr, const _Sizarray& _Incarr)\r\n        : _Start(_Off), _Len(_Lenarr), _Stride(_Incarr) {}\r\n\r\n    _NODISCARD size_t start() const noexcept /* strengthened */ {\r\n        return _Start;\r\n    }\r\n\r\n    _NODISCARD _Sizarray size() const {\r\n        return _Len;\r\n    }\r\n\r\n    _NODISCARD _Sizarray stride() const {\r\n        return _Stride;\r\n    }\r\n\r\n    size_t _Nslice() const noexcept {\r\n        return _Len.size();\r\n    }\r\n\r\n    size_t _Off(_Sizarray& _Indexarr) const noexcept {\r\n        size_t _Idx;\r\n        size_t _Ans        = _Start;\r\n        const size_t _Size = _Indexarr.size();\r\n        for (_Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Ans += _Indexarr[_Idx] * _Stride[_Idx]; // compute offset\r\n        }\r\n\r\n        while (0 < _Idx) {\r\n            --_Idx;\r\n            if (++_Indexarr[_Idx] < _Len[_Idx]) {\r\n                break; // increment done, quit\r\n            } else {\r\n                _Indexarr[_Idx] = 0; // carry to more-significant index\r\n            }\r\n        }\r\n\r\n        return _Ans;\r\n    }\r\n\r\n    _NODISCARD size_t _Totlen() const noexcept {\r\n        const size_t _Size = _Len.size();\r\n        if (_Size == 0) {\r\n            return 0;\r\n        }\r\n\r\n        size_t _Count = _Len[0];\r\n        for (size_t _Idx = 1; _Idx < _Size; ++_Idx) {\r\n            _Count *= _Len[_Idx];\r\n        }\r\n\r\n        return _Count;\r\n    }\r\n\r\nprivate:\r\n    size_t _Start = 0; // the starting offset\r\n    _Sizarray _Len; // array of numbers of elements\r\n    _Sizarray _Stride; // array of distances between elements\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass gslice_array : public gslice { // define a generalized slice of a valarray\r\npublic:\r\n    using value_type = _Ty;\r\n\r\n    void operator=(const valarray<_Ty>& _Right) const {\r\n        _Sizarray _Indexarray(size_t{0}, _Nslice());\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Off(_Indexarray)] = _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator=(const _Ty& _Right) const {\r\n        _Sizarray _Indexarray(size_t{0}, _Nslice());\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Off(_Indexarray)] = _Right;\r\n        }\r\n    }\r\n\r\n    void operator*=(const valarray<_Ty>& _Right) const { // multiply generalized slice by valarray\r\n        _Sizarray _Indexarray(size_t{0}, _Nslice());\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Off(_Indexarray)] *= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator/=(const valarray<_Ty>& _Right) const { // divide generalized slice by valarray\r\n        _Sizarray _Indexarray(size_t{0}, _Nslice());\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Off(_Indexarray)] /= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator%=(const valarray<_Ty>& _Right) const { // remainder generalized slice by valarray\r\n        _Sizarray _Indexarray(size_t{0}, _Nslice());\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Off(_Indexarray)] %= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator+=(const valarray<_Ty>& _Right) const { // add valarray to generalized slice\r\n        _Sizarray _Indexarray(size_t{0}, _Nslice());\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Off(_Indexarray)] += _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator-=(const valarray<_Ty>& _Right) const { // subtract valarray from generalized slice\r\n        _Sizarray _Indexarray(size_t{0}, _Nslice());\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Off(_Indexarray)] -= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator^=(const valarray<_Ty>& _Right) const { // XOR valarray into generalized slice\r\n        _Sizarray _Indexarray(size_t{0}, _Nslice());\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Off(_Indexarray)] ^= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator&=(const valarray<_Ty>& _Right) const { // AND valarray into generalized slice\r\n        _Sizarray _Indexarray(size_t{0}, _Nslice());\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Off(_Indexarray)] &= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator|=(const valarray<_Ty>& _Right) const { // OR valarray into generalized slice\r\n        _Sizarray _Indexarray(size_t{0}, _Nslice());\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Off(_Indexarray)] |= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator<<=(const valarray<_Ty>& _Right) const { // left shift generalized slice by valarray\r\n        _Sizarray _Indexarray(size_t{0}, _Nslice());\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Off(_Indexarray)] <<= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator>>=(const valarray<_Ty>& _Right) const { // right shift generalized slice by valarray\r\n        _Sizarray _Indexarray(size_t{0}, _Nslice());\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Off(_Indexarray)] >>= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    _NODISCARD _Ty& _Data(size_t _Idx) const noexcept {\r\n        return _Myptr[_Idx];\r\n    }\r\n\r\n    gslice_array() = delete;\r\n\r\n    gslice_array(const gslice_array&) = default;\r\n\r\n    const gslice_array& operator=(const gslice_array& _Right) const {\r\n        _Sizarray _Dst_indexarray(size_t{0}, _Nslice());\r\n        _Sizarray _Src_indexarray(size_t{0}, _Right._Nslice());\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Off(_Dst_indexarray)] = _Right._Myptr[_Right._Off(_Src_indexarray)];\r\n        }\r\n        return *this;\r\n    }\r\n\r\nprivate:\r\n    friend valarray<_Ty>;\r\n\r\n    gslice_array(const gslice& _Gslice, _Ty* _Ptr) : gslice(_Gslice), _Myptr(_Ptr) {}\r\n\r\n    _Ty* _Myptr; // pointer to valarray contents\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass mask_array { // define a subset of a valarray with an array of mask bits\r\npublic:\r\n    using value_type = _Ty;\r\n\r\n    void operator=(const valarray<_Ty>& _Right) const {\r\n        const size_t _Size = _Mybool.size();\r\n        for (size_t _Idx = 0, _Off = _Start_off(); _Off < _Size; _Off = _Next_off(_Off), ++_Idx) {\r\n            _Myptr[_Off] = _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator=(const _Ty& _Right) const {\r\n        const size_t _Size = _Mybool.size();\r\n        for (size_t _Off = _Start_off(); _Off < _Size; _Off = _Next_off(_Off)) {\r\n            _Myptr[_Off] = _Right;\r\n        }\r\n    }\r\n\r\n    void operator*=(const valarray<_Ty>& _Right) const { // multiply masked array by valarray\r\n        const size_t _Size = _Mybool.size();\r\n        for (size_t _Idx = 0, _Off = _Start_off(); _Off < _Size; _Off = _Next_off(_Off), ++_Idx) {\r\n            _Myptr[_Off] *= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator/=(const valarray<_Ty>& _Right) const { // divide masked array by valarray\r\n        const size_t _Size = _Mybool.size();\r\n        for (size_t _Idx = 0, _Off = _Start_off(); _Off < _Size; _Off = _Next_off(_Off), ++_Idx) {\r\n            _Myptr[_Off] /= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator%=(const valarray<_Ty>& _Right) const { // remainder masked array by valarray\r\n        const size_t _Size = _Mybool.size();\r\n        for (size_t _Idx = 0, _Off = _Start_off(); _Off < _Size; _Off = _Next_off(_Off), ++_Idx) {\r\n            _Myptr[_Off] %= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator+=(const valarray<_Ty>& _Right) const { // add valarray to masked array\r\n        const size_t _Size = _Mybool.size();\r\n        for (size_t _Idx = 0, _Off = _Start_off(); _Off < _Size; _Off = _Next_off(_Off), ++_Idx) {\r\n            _Myptr[_Off] += _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator-=(const valarray<_Ty>& _Right) const { // subtract valarray from masked array\r\n        const size_t _Size = _Mybool.size();\r\n        for (size_t _Idx = 0, _Off = _Start_off(); _Off < _Size; _Off = _Next_off(_Off), ++_Idx) {\r\n            _Myptr[_Off] -= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator^=(const valarray<_Ty>& _Right) const { // XOR valarray into masked array\r\n        const size_t _Size = _Mybool.size();\r\n        for (size_t _Idx = 0, _Off = _Start_off(); _Off < _Size; _Off = _Next_off(_Off), ++_Idx) {\r\n            _Myptr[_Off] ^= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator&=(const valarray<_Ty>& _Right) const { // OR valarray into masked array\r\n        const size_t _Size = _Mybool.size();\r\n        for (size_t _Idx = 0, _Off = _Start_off(); _Off < _Size; _Off = _Next_off(_Off), ++_Idx) {\r\n            _Myptr[_Off] &= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator|=(const valarray<_Ty>& _Right) const { // OR valarray into masked array\r\n        const size_t _Size = _Mybool.size();\r\n        for (size_t _Idx = 0, _Off = _Start_off(); _Off < _Size; _Off = _Next_off(_Off), ++_Idx) {\r\n            _Myptr[_Off] |= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator<<=(const valarray<_Ty>& _Right) const { // left shift masked array by valarray\r\n        const size_t _Size = _Mybool.size();\r\n        for (size_t _Idx = 0, _Off = _Start_off(); _Off < _Size; _Off = _Next_off(_Off), ++_Idx) {\r\n            _Myptr[_Off] <<= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator>>=(const valarray<_Ty>& _Right) const { // right shift masked array by valarray\r\n        const size_t _Size = _Mybool.size();\r\n        for (size_t _Idx = 0, _Off = _Start_off(); _Off < _Size; _Off = _Next_off(_Off), ++_Idx) {\r\n            _Myptr[_Off] >>= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    _NODISCARD _Ty& _Data(size_t _Idx) const noexcept {\r\n        return _Myptr[_Idx];\r\n    }\r\n\r\n    _NODISCARD bool _Mask(size_t _Idx) const noexcept {\r\n        return _Mybool[_Idx];\r\n    }\r\n\r\n    _NODISCARD size_t _Start_off() const noexcept {\r\n        size_t _Off        = 0;\r\n        const size_t _Size = _Mybool.size();\r\n        while (_Off < _Size && !_Mybool[_Off]) {\r\n            ++_Off;\r\n        }\r\n        return _Off;\r\n    }\r\n\r\n    _NODISCARD size_t _Next_off(size_t _Off) const noexcept {\r\n        const size_t _Size = _Mybool.size();\r\n        do {\r\n            ++_Off;\r\n        } while (_Off < _Size && !_Mybool[_Off]);\r\n        return _Off;\r\n    }\r\n\r\n    _NODISCARD size_t _Totlen() const noexcept {\r\n        size_t _Count      = 0;\r\n        const size_t _Size = _Mybool.size();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            if (_Mybool[_Idx]) {\r\n                ++_Count;\r\n            }\r\n        }\r\n\r\n        return _Count;\r\n    }\r\n\r\n    mask_array() = delete;\r\n\r\n    mask_array(const mask_array&) = default;\r\n\r\n    const mask_array& operator=(const mask_array& _Right) const noexcept /* strengthened */ {\r\n        const size_t _Size = _Mybool.size();\r\n        size_t _Dst_off    = _Start_off();\r\n        size_t _Src_off    = _Right._Start_off();\r\n        for (; _Dst_off < _Size; _Src_off = _Right._Next_off(_Src_off), _Dst_off = _Next_off(_Dst_off)) {\r\n            _Myptr[_Dst_off] = _Right._Myptr[_Src_off];\r\n        }\r\n        return *this;\r\n    }\r\n\r\nprivate:\r\n    friend valarray<_Ty>;\r\n\r\n    mask_array(const _Boolarray& _Maskarr, _Ty* _Pdata) : _Mybool(_Maskarr), _Myptr(_Pdata) {}\r\n\r\n    _Boolarray _Mybool; // array of mask bits\r\n    _Ty* _Myptr; // pointer to valarray contents\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass indirect_array { // define a subset of a valarray with an array of indexes\r\npublic:\r\n    using value_type = _Ty;\r\n\r\n    void operator=(const valarray<_Ty>& _Right) const {\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Indir(_Idx)] = _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator=(const _Ty& _Right) const {\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Indir(_Idx)] = _Right;\r\n        }\r\n    }\r\n\r\n    void operator*=(const valarray<_Ty>& _Right) const { // multiply indirect array by valarray\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Indir(_Idx)] *= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator/=(const valarray<_Ty>& _Right) const { // divide indirect array by valarray\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Indir(_Idx)] /= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator%=(const valarray<_Ty>& _Right) const { // remainder indirect array by valarray\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Indir(_Idx)] %= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator+=(const valarray<_Ty>& _Right) const { // add valarray to indirect array\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Indir(_Idx)] += _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator-=(const valarray<_Ty>& _Right) const { // subtract valarray from indirect array\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Indir(_Idx)] -= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator^=(const valarray<_Ty>& _Right) const { // XOR valarray into indirect array\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Indir(_Idx)] ^= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator&=(const valarray<_Ty>& _Right) const { // AND valarray into indirect array\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Indir(_Idx)] &= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator|=(const valarray<_Ty>& _Right) const { // OR valarray into indirect array\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Indir(_Idx)] |= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator<<=(const valarray<_Ty>& _Right) const { // left shift indirect array by valarray\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Indir(_Idx)] <<= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    void operator>>=(const valarray<_Ty>& _Right) const { // right shift indirect array by valarray\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Indir(_Idx)] >>= _Right[_Idx];\r\n        }\r\n    }\r\n\r\n    _NODISCARD _Ty& _Data(size_t _Idx) const noexcept {\r\n        return _Myptr[_Idx];\r\n    }\r\n\r\n    _NODISCARD size_t _Indir(size_t _Idx) const noexcept {\r\n        return _Myindarr[_Idx];\r\n    }\r\n\r\n    _NODISCARD size_t _Totlen() const noexcept {\r\n        return _Myindarr.size();\r\n    }\r\n\r\n    indirect_array() = delete;\r\n\r\n    indirect_array(const indirect_array&) = default;\r\n\r\n    const indirect_array& operator=(const indirect_array& _Right) const noexcept /* strengthened */ {\r\n        const size_t _Size = _Totlen();\r\n        for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n            _Myptr[_Indir(_Idx)] = _Right._Myptr[_Right._Indir(_Idx)];\r\n        }\r\n        return *this;\r\n    }\r\n\r\nprivate:\r\n    friend valarray<_Ty>;\r\n\r\n    indirect_array(const _Sizarray& _Indarr, _Ty* _Ptr) : _Myindarr(_Indarr), _Myptr(_Ptr) {}\r\n\r\n    _Sizarray _Myindarr; // array of indirect indexes\r\n    _Ty* _Myptr; // pointer to valarray contents\r\n};\r\n\r\ntemplate <class _Ty>\r\nvalarray<_Ty>& valarray<_Ty>::operator=(const slice_array<_Ty>& _Slicearr) {\r\n    _Tidy_deallocate();\r\n    _Grow(_Slicearr.size(), _STD addressof(_Slicearr._Data(_Slicearr.start())), _Slicearr.stride());\r\n    return *this;\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD valarray<_Ty> valarray<_Ty>::operator[](slice _Slice) const {\r\n    return valarray<_Ty>(slice_array<_Ty>(_Slice, _Myptr));\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD slice_array<_Ty> valarray<_Ty>::operator[](slice _Slice) noexcept /* strengthened */ {\r\n    return slice_array<_Ty>(_Slice, _Myptr);\r\n}\r\n\r\ntemplate <class _Ty>\r\nvalarray<_Ty>& valarray<_Ty>::operator=(const gslice_array<_Ty>& _Gslicearr) {\r\n    _Tidy_deallocate();\r\n    _Grow(_Gslicearr._Totlen());\r\n    _Sizarray _Indexarray(size_t{0}, _Gslicearr._Nslice());\r\n    const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Myptr[_Idx] = _Gslicearr._Data(_Gslicearr._Off(_Indexarray));\r\n    }\r\n    return *this;\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD valarray<_Ty> valarray<_Ty>::operator[](const gslice& _Gslice) const {\r\n    return valarray<_Ty>(gslice_array<_Ty>(_Gslice, _Myptr));\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD gslice_array<_Ty> valarray<_Ty>::operator[](const gslice& _Gslicearr) {\r\n    return gslice_array<_Ty>(_Gslicearr, _Myptr);\r\n}\r\n\r\ntemplate <class _Ty>\r\nvalarray<_Ty>& valarray<_Ty>::operator=(const mask_array<_Ty>& _Maskarr) {\r\n    _Tidy_deallocate();\r\n    _Grow(_Maskarr._Totlen());\r\n    size_t _Count = 0;\r\n\r\n    const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Count) {\r\n        if (_Maskarr._Mask(_Count)) {\r\n            _Myptr[_Idx++] = _Maskarr._Data(_Count);\r\n        }\r\n    }\r\n\r\n    return *this;\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD valarray<_Ty> valarray<_Ty>::operator[](const _Boolarray& _Boolarr) const {\r\n    return valarray<_Ty>(mask_array<_Ty>(_Boolarr, _Myptr));\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD mask_array<_Ty> valarray<_Ty>::operator[](const _Boolarray& _Boolarr) {\r\n    return mask_array<_Ty>(_Boolarr, _Myptr);\r\n}\r\n\r\ntemplate <class _Ty>\r\nvalarray<_Ty>& valarray<_Ty>::operator=(const indirect_array<_Ty>& _Indarr) {\r\n    _Tidy_deallocate();\r\n    _Grow(_Indarr._Totlen());\r\n    const size_t _Size = _Mysize; // eliminating indirection helps vectorization\r\n    for (size_t _Idx = 0; _Idx < _Size; ++_Idx) {\r\n        _Myptr[_Idx] = _Indarr._Data(_Indarr._Indir(_Idx));\r\n    }\r\n    return *this;\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD valarray<_Ty> valarray<_Ty>::operator[](const _Sizarray& _Indarr) const {\r\n    return valarray<_Ty>(indirect_array<_Ty>(_Indarr, _Myptr));\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD indirect_array<_Ty> valarray<_Ty>::operator[](const _Sizarray& _Indarr) {\r\n    return indirect_array<_Ty>(_Indarr, _Myptr);\r\n}\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _VALARRAY_\r\n"
  },
  {
    "path": "stl/inc/variant",
    "content": "// variant standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _VARIANT_\r\n#define _VARIANT_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX17\r\n_EMIT_STL_WARNING(STL4038, \"The contents of <variant> are available only with C++17 or later.\");\r\n#else // ^^^ !_HAS_CXX17 / _HAS_CXX17 vvv\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#endif // _HAS_CXX20\r\n#include <exception>\r\n#include <initializer_list>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <xsmf_control.h>\r\n#include <xutility>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\n\r\ntemplate <class...>\r\nstruct _Meta_list; // a sequence of types (not defined)\r\n\r\ntemplate <class _List>\r\nstruct _Meta_front_;\r\ntemplate <class _List>\r\nusing _Meta_front =\r\n    // extract the first type in a sequence (head of list)\r\n    typename _Meta_front_<_List>::type;\r\n\r\ntemplate <template <class...> class _List, class _First, class... _Rest>\r\nstruct _Meta_front_<_List<_First, _Rest...>> {\r\n    using type = _First;\r\n};\r\n\r\ntemplate <class _List>\r\nstruct _Meta_pop_front_;\r\ntemplate <class _List>\r\nusing _Meta_pop_front =\r\n    // subsequence including all but the first type (tail of list)\r\n    typename _Meta_pop_front_<_List>::type;\r\n\r\ntemplate <template <class...> class _List, class _First, class... _Rest>\r\nstruct _Meta_pop_front_<_List<_First, _Rest...>> {\r\n    using type = _List<_Rest...>;\r\n};\r\n\r\ntemplate <class _List, class _Ty>\r\nstruct _Meta_push_front_;\r\ntemplate <class _List, class _Ty>\r\nusing _Meta_push_front =\r\n    // prepend a new type onto a sequence\r\n    typename _Meta_push_front_<_List, _Ty>::type;\r\n\r\ntemplate <template <class...> class _List, class... _Types, class _Ty>\r\nstruct _Meta_push_front_<_List<_Types...>, _Ty> {\r\n    using type = _List<_Ty, _Types...>;\r\n};\r\n\r\ntemplate <class _Void, template <class...> class _Fn, class... _Args>\r\nstruct _Meta_quote_helper_;\r\ntemplate <template <class...> class _Fn, class... _Args>\r\nstruct _Meta_quote_helper_<void_t<_Fn<_Args...>>, _Fn, _Args...> {\r\n    using type = _Fn<_Args...>;\r\n};\r\ntemplate <template <class...> class _Fn>\r\nstruct _Meta_quote { // encapsulate a template into a meta-callable type\r\n    template <class... _Types>\r\n    using _Invoke = typename _Meta_quote_helper_<void, _Fn, _Types...>::type;\r\n};\r\n\r\ntemplate <class _Fn, class... _Args>\r\nusing _Meta_invoke = // invoke meta-callable _Fn with _Args\r\n    typename _Fn::template _Invoke<_Args...>;\r\n\r\ntemplate <class _Fn, class... _Args>\r\nstruct _Meta_bind_back { // construct a meta-callable that passes its arguments and _Args to _Fn\r\n    template <class... _Types>\r\n    using _Invoke = _Meta_invoke<_Fn, _Types..., _Args...>;\r\n};\r\n\r\ntemplate <class _Fn, class _List>\r\nstruct _Meta_apply_;\r\ntemplate <class _Fn, class _List>\r\nusing _Meta_apply =\r\n    // unpack _List into the parameters of meta-callable _Fn\r\n    typename _Meta_apply_<_Fn, _List>::type;\r\n\r\ntemplate <class _Fn, template <class...> class _List, class... _Types>\r\nstruct _Meta_apply_<_Fn, _List<_Types...>> {\r\n    // invoke meta-callable _Fn with the parameters of a template specialization\r\n    using type = _Meta_invoke<_Fn, _Types...>;\r\n};\r\n\r\ntemplate <class _Fn, class _Ty, _Ty... _Idxs>\r\nstruct _Meta_apply_<_Fn, integer_sequence<_Ty, _Idxs...>> {\r\n    // invoke meta-callable _Fn with the elements of an integer_sequence\r\n    using type = _Meta_invoke<_Fn, integral_constant<_Ty, _Idxs>...>;\r\n};\r\n\r\ntemplate <class _Fn, class _List>\r\nstruct _Meta_transform_;\r\ntemplate <class _Fn, class _List>\r\nusing _Meta_transform =\r\n    // transform sequence of _Types... into sequence of _Fn<_Types...>\r\n    typename _Meta_transform_<_Fn, _List>::type;\r\n\r\ntemplate <template <class...> class _List, class _Fn, class... _Types>\r\nstruct _Meta_transform_<_Fn, _List<_Types...>> {\r\n    using type = _List<_Meta_invoke<_Fn, _Types>...>;\r\n};\r\n\r\ntemplate <class, class, template <class...> class>\r\nstruct _Meta_repeat_n_c_;\r\ntemplate <size_t _Count, class _Ty, template <class...> class _Continue>\r\nusing _Meta_repeat_n_c =\r\n    // construct a sequence consisting of repetitions of _Ty\r\n    typename _Meta_repeat_n_c_<_Ty, make_index_sequence<_Count>, _Continue>::type;\r\n\r\ntemplate <class _Ty, size_t>\r\nusing _Meta_repeat_first_helper = _Ty;\r\n\r\ntemplate <class _Ty, size_t... _Idxs, template <class...> class _Continue>\r\nstruct _Meta_repeat_n_c_<_Ty, index_sequence<_Idxs...>, _Continue> {\r\n    using type = _Continue<_Meta_repeat_first_helper<_Ty, _Idxs>...>;\r\n};\r\n\r\ntemplate <class _List, size_t _Idx, class = void>\r\nstruct _Meta_at_;\r\ntemplate <class _List, size_t _Idx>\r\nusing _Meta_at_c =\r\n    // Extract the _Idx-th type from _List\r\n    typename _Meta_at_<_List, _Idx>::type;\r\n\r\n#ifdef __clang__\r\ntemplate <template <class...> class _List, class... _Types, size_t _Idx>\r\nstruct _Meta_at_<_List<_Types...>, _Idx, void_t<__type_pack_element<_Idx, _Types...>>> {\r\n    using type = __type_pack_element<_Idx, _Types...>;\r\n};\r\n#else // ^^^ defined(__clang__) / !defined(__clang__) vvv\r\ntemplate <class... _VoidPtrs>\r\nstruct _Meta_at_impl {\r\n    template <class _Ty, class... _Types>\r\n    static _Ty _Eval(_VoidPtrs..., _Ty*, _Types*...); // undefined\r\n};\r\n\r\ntemplate <class _Ty>\r\nconstexpr _Identity<_Ty>* _Type_as_pointer() {\r\n    return nullptr;\r\n}\r\n\r\ntemplate <template <class...> class _List, class... _Types, size_t _Idx>\r\nstruct _Meta_at_<_List<_Types...>, _Idx, enable_if_t<(_Idx < sizeof...(_Types))>> {\r\n    using type =\r\n        typename decltype(_Meta_repeat_n_c<_Idx, void*, _Meta_at_impl>::_Eval(_Type_as_pointer<_Types>()...))::type;\r\n};\r\n#endif // ^^^ !defined(__clang__) ^^^\r\n\r\ntemplate <class>\r\nstruct _Meta_as_list_;\r\ntemplate <class _Ty>\r\nusing _Meta_as_list =\r\n    // convert _Ty to a _Meta_list\r\n    typename _Meta_as_list_<_Ty>::type;\r\n\r\ntemplate <template <class...> class _List, class... _Types>\r\nstruct _Meta_as_list_<_List<_Types...>> {\r\n    // convert the parameters of an arbitrary template specialization to a _Meta_list of types\r\n    using type = _Meta_list<_Types...>;\r\n};\r\n\r\ntemplate <class _Ty, _Ty... _Idxs>\r\nstruct _Meta_as_list_<integer_sequence<_Ty, _Idxs...>> {\r\n    // convert an integer_sequence to a _Meta_list of integral_constants\r\n    using type = _Meta_list<integral_constant<_Ty, _Idxs>...>;\r\n};\r\n\r\ntemplate <class _List>\r\nstruct _Meta_as_integer_sequence_;\r\ntemplate <class _List>\r\nusing _Meta_as_integer_sequence =\r\n    // convert a list of integral_constants to an integer_sequence\r\n    typename _Meta_as_integer_sequence_<_List>::type;\r\n\r\ntemplate <template <class...> class _List, class _Ty, _Ty... _Idxs>\r\nstruct _Meta_as_integer_sequence_<_List<integral_constant<_Ty, _Idxs>...>> {\r\n    using type = integer_sequence<_Ty, _Idxs...>;\r\n};\r\n\r\ntemplate <class...>\r\nstruct _Meta_concat_;\r\ntemplate <class... _Types>\r\nusing _Meta_concat =\r\n    // merge several lists into one\r\n    typename _Meta_concat_<_Types...>::type;\r\n\r\ntemplate <template <class...> class _List>\r\nstruct _Meta_concat_<_List<>> {\r\n    using type = _List<>;\r\n};\r\n\r\ntemplate <template <class...> class _List, class... _Items1>\r\nstruct _Meta_concat_<_List<_Items1...>> {\r\n    using type = _List<_Items1...>;\r\n};\r\n\r\ntemplate <template <class...> class _List, class... _Items1, class... _Items2>\r\nstruct _Meta_concat_<_List<_Items1...>, _List<_Items2...>> {\r\n    using type = _List<_Items1..., _Items2...>;\r\n};\r\n\r\ntemplate <template <class...> class _List, class... _Items1, class... _Items2, class... _Items3>\r\nstruct _Meta_concat_<_List<_Items1...>, _List<_Items2...>, _List<_Items3...>> {\r\n    using type = _List<_Items1..., _Items2..., _Items3...>;\r\n};\r\n\r\ntemplate <template <class...> class _List, class... _Items1, class... _Items2, class... _Items3, class... _Rest>\r\nstruct _Meta_concat_<_List<_Items1...>, _List<_Items2...>, _List<_Items3...>, _Rest...> {\r\n    using type = _Meta_concat<_List<_Items1..., _Items2..., _Items3...>, _Rest...>;\r\n};\r\n\r\ntemplate <class _ListOfLists>\r\nusing _Meta_join =\r\n    // transform a list of lists of elements into a single list containing those elements\r\n    _Meta_apply<_Meta_quote<_Meta_concat>, _ListOfLists>;\r\n\r\ntemplate <class>\r\nstruct _Meta_cartesian_product_;\r\ntemplate <class _ListOfLists>\r\nusing _Meta_cartesian_product =\r\n    // find the n-ary Cartesian Product of the lists in the input list\r\n    typename _Meta_cartesian_product_<_ListOfLists>::type;\r\n\r\ntemplate <template <class...> class _List>\r\nstruct _Meta_cartesian_product_<_List<>> {\r\n    using type = _List<>;\r\n};\r\n\r\ntemplate <template <class...> class _List1, template <class...> class _List2, class... _Items>\r\nstruct _Meta_cartesian_product_<_List1<_List2<_Items...>>> {\r\n    using type = _List1<_List2<_Items>...>;\r\n};\r\n\r\ntemplate <template <class...> class _List1, class... _Items, template <class...> class _List2, class... _Lists>\r\nstruct _Meta_cartesian_product_<_List1<_List2<_Items...>, _Lists...>> {\r\n    using type = _Meta_join<_List1<_Meta_transform<_Meta_bind_back<_Meta_quote<_Meta_push_front>, _Items>,\r\n        _Meta_cartesian_product<_List1<_Lists...>>>...>>;\r\n};\r\n\r\n#define _STL_STAMP4(n, x) \\\r\n    x(n);                 \\\r\n    x(n + 1);             \\\r\n    x(n + 2);             \\\r\n    x(n + 3)\r\n#define _STL_STAMP16(n, x) \\\r\n    _STL_STAMP4(n, x);     \\\r\n    _STL_STAMP4(n + 4, x); \\\r\n    _STL_STAMP4(n + 8, x); \\\r\n    _STL_STAMP4(n + 12, x)\r\n#define _STL_STAMP64(n, x)   \\\r\n    _STL_STAMP16(n, x);      \\\r\n    _STL_STAMP16(n + 16, x); \\\r\n    _STL_STAMP16(n + 32, x); \\\r\n    _STL_STAMP16(n + 48, x)\r\n#define _STL_STAMP256(n, x)   \\\r\n    _STL_STAMP64(n, x);       \\\r\n    _STL_STAMP64(n + 64, x);  \\\r\n    _STL_STAMP64(n + 128, x); \\\r\n    _STL_STAMP64(n + 192, x)\r\n\r\n#define _STL_STAMP(n, x) x(_STL_STAMP##n, n)\r\n\r\n_EXPORT_STD template <class... _Types>\r\nclass _NO_SPECIALIZATIONS_CITING(\"N5014 [variant.variant.general]/4\") variant;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct variant_size; // undefined\r\ntemplate <class _Ty>\r\nstruct variant_size<const _Ty> : variant_size<_Ty>::type {};\r\ntemplate <class _Ty>\r\nstruct _CXX20_DEPRECATE_VOLATILE variant_size<volatile _Ty> : variant_size<_Ty>::type {};\r\ntemplate <class _Ty>\r\nstruct _CXX20_DEPRECATE_VOLATILE variant_size<const volatile _Ty> : variant_size<_Ty>::type {};\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES constexpr size_t variant_size_v = variant_size<_Ty>::value;\r\n\r\ntemplate <class... _Types>\r\nstruct variant_size<variant<_Types...>> : integral_constant<size_t, sizeof...(_Types)> {};\r\n\r\n_EXPORT_STD template <size_t _Idx, class _Ty>\r\nstruct variant_alternative; // undefined\r\n_EXPORT_STD template <size_t _Idx, class _Ty>\r\nusing variant_alternative_t = typename variant_alternative<_Idx, _Ty>::type;\r\ntemplate <size_t _Idx, class _Ty>\r\nstruct variant_alternative<_Idx, const _Ty> {\r\n    using type = add_const_t<variant_alternative_t<_Idx, _Ty>>;\r\n};\r\ntemplate <size_t _Idx, class _Ty>\r\nstruct _CXX20_DEPRECATE_VOLATILE variant_alternative<_Idx, volatile _Ty> {\r\n    using type = add_volatile_t<variant_alternative_t<_Idx, _Ty>>;\r\n};\r\ntemplate <size_t _Idx, class _Ty>\r\nstruct _CXX20_DEPRECATE_VOLATILE variant_alternative<_Idx, const volatile _Ty> {\r\n    using type = add_cv_t<variant_alternative_t<_Idx, _Ty>>;\r\n};\r\ntemplate <size_t _Idx, class... _Types>\r\nstruct variant_alternative<_Idx, variant<_Types...>> {\r\n    static_assert(_Idx < sizeof...(_Types), \"variant index out of bounds\");\r\n\r\n#ifdef __clang__\r\n    using type = __type_pack_element<_Idx, _Types...>;\r\n#else // ^^^ defined(__clang__) / !defined(__clang__) vvv\r\n    using type = _Meta_at_c<variant<_Types...>, _Idx>;\r\n#endif // ^^^ !defined(__clang__) ^^^\r\n};\r\n\r\n_EXPORT_STD inline constexpr size_t variant_npos = _Meta_npos;\r\n\r\ntemplate <bool _TrivialDestruction, class... _Types>\r\nclass _Variant_storage_ {}; // empty storage (empty \"_Types\" case)\r\n\r\ntemplate <class... _Types>\r\nusing _Variant_storage = _Variant_storage_<conjunction_v<is_trivially_destructible<_Types>...>, _Types...>;\r\n\r\ntemplate <class _First, class... _Rest>\r\nclass _Variant_storage_<true, _First, _Rest...> { // Storage for variant alternatives (trivially destructible case)\r\npublic:\r\n    static constexpr size_t _Size = 1 + sizeof...(_Rest);\r\n    union {\r\n        remove_cv_t<_First> _Head;\r\n        _Variant_storage<_Rest...> _Tail;\r\n    };\r\n\r\n    _CONSTEXPR20 _Variant_storage_() noexcept {} // no initialization (no active member)\r\n\r\n    template <class... _Types>\r\n    constexpr explicit _Variant_storage_(integral_constant<size_t, 0>, _Types&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_First, _Types...>)\r\n        : _Head(static_cast<_Types&&>(_Args)...) {} // initialize _Head with _Args...\r\n\r\n    template <size_t _Idx, class... _Types, enable_if_t<(_Idx > 0), int> = 0>\r\n    constexpr explicit _Variant_storage_(integral_constant<size_t, _Idx>, _Types&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Variant_storage<_Rest...>, integral_constant<size_t, _Idx - 1>, _Types...>)\r\n        : _Tail(integral_constant<size_t, _Idx - 1>{}, static_cast<_Types&&>(_Args)...) {} // initialize _Tail (recurse)\r\n\r\n    _NODISCARD constexpr _First& _Get() & noexcept {\r\n        return _Head;\r\n    }\r\n    _NODISCARD constexpr const _First& _Get() const& noexcept {\r\n        return _Head;\r\n    }\r\n    _NODISCARD constexpr _First&& _Get() && noexcept {\r\n        return _STD move(_Head);\r\n    }\r\n    _NODISCARD constexpr const _First&& _Get() const&& noexcept {\r\n        return _STD move(_Head);\r\n    }\r\n};\r\n\r\ntemplate <class _First, class... _Rest>\r\nclass _Variant_storage_<false, _First, _Rest...> { // Storage for variant alternatives (non-trivially destructible case)\r\npublic:\r\n    static constexpr size_t _Size = 1 + sizeof...(_Rest);\r\n    union {\r\n        remove_cv_t<_First> _Head;\r\n        _Variant_storage<_Rest...> _Tail;\r\n    };\r\n\r\n    _CONSTEXPR20 ~_Variant_storage_()\r\n#ifndef __clang__ // TRANSITION, LLVM-59854\r\n        noexcept\r\n#endif // ^^^ no workaround ^^^\r\n    {\r\n        // explicitly non-trivial destructor (which would otherwise be defined as deleted\r\n        // since the class has a variant member with a non-trivial destructor)\r\n    }\r\n\r\n    _CONSTEXPR20 _Variant_storage_() noexcept {} // no initialization (no active member)\r\n\r\n    template <class... _Types>\r\n    constexpr explicit _Variant_storage_(integral_constant<size_t, 0>, _Types&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_First, _Types...>)\r\n        : _Head(static_cast<_Types&&>(_Args)...) {} // initialize _Head with _Args...\r\n\r\n    template <size_t _Idx, class... _Types, enable_if_t<(_Idx > 0), int> = 0>\r\n    constexpr explicit _Variant_storage_(integral_constant<size_t, _Idx>, _Types&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Variant_storage<_Rest...>, integral_constant<size_t, _Idx - 1>, _Types...>)\r\n        : _Tail(integral_constant<size_t, _Idx - 1>{}, static_cast<_Types&&>(_Args)...) {} // initialize _Tail (recurse)\r\n\r\n    _Variant_storage_(_Variant_storage_&&)                 = default;\r\n    _Variant_storage_(const _Variant_storage_&)            = default;\r\n    _Variant_storage_& operator=(_Variant_storage_&&)      = default;\r\n    _Variant_storage_& operator=(const _Variant_storage_&) = default;\r\n\r\n    _NODISCARD constexpr _First& _Get() & noexcept {\r\n        return _Head;\r\n    }\r\n    _NODISCARD constexpr const _First& _Get() const& noexcept {\r\n        return _Head;\r\n    }\r\n    _NODISCARD constexpr _First&& _Get() && noexcept {\r\n        return _STD move(_Head);\r\n    }\r\n    _NODISCARD constexpr const _First&& _Get() const&& noexcept {\r\n        return _STD move(_Head);\r\n    }\r\n};\r\n\r\n#ifdef __cplusplus_winrt // TRANSITION, VSO-586813\r\n// C++/CX is unable to store hats in unions. We instead store them inside a\r\n// wrapper to enable minimal hats-in-variants support.\r\ntemplate <class _Ty>\r\nstruct _Variant_item {\r\n    remove_cv_t<_Ty> _Item;\r\n\r\n    template <class... _Types>\r\n    constexpr _Variant_item(_Types&&... _Args) noexcept(is_nothrow_constructible_v<_Ty, _Types...>)\r\n        : _Item(static_cast<_Types&&>(_Args)...) {}\r\n};\r\n\r\ntemplate <class _First, class... _Rest>\r\nclass _Variant_storage_<false, _First ^, _Rest...> { // Storage for variant alternatives (^ case)\r\npublic:\r\n    static constexpr size_t _Size = 1 + sizeof...(_Rest);\r\n    union {\r\n        _Variant_item<_First ^> _Head;\r\n        _Variant_storage<_Rest...> _Tail;\r\n    };\r\n\r\n    _CONSTEXPR20 ~_Variant_storage_() noexcept {\r\n        // explicitly non-trivial destructor (which would otherwise be defined as deleted\r\n        // since the class has a variant member with a non-trivial destructor)\r\n    }\r\n\r\n    _CONSTEXPR20 _Variant_storage_() noexcept {} // no initialization (no active member)\r\n\r\n    template <class... _Types>\r\n    constexpr explicit _Variant_storage_(integral_constant<size_t, 0>, _Types&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_First ^, _Types...>)\r\n        : _Head(static_cast<_Types&&>(_Args)...) {} // initialize _Head with _Args...\r\n\r\n    template <size_t _Idx, class... _Types, enable_if_t<(_Idx > 0), int> = 0>\r\n    constexpr explicit _Variant_storage_(integral_constant<size_t, _Idx>, _Types&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Variant_storage<_Rest...>, integral_constant<size_t, _Idx - 1>, _Types...>)\r\n        : _Tail(integral_constant<size_t, _Idx - 1>{}, static_cast<_Types&&>(_Args)...) {} // initialize _Tail (recurse)\r\n\r\n    _Variant_storage_(_Variant_storage_&&)                 = default;\r\n    _Variant_storage_(const _Variant_storage_&)            = default;\r\n    _Variant_storage_& operator=(_Variant_storage_&&)      = default;\r\n    _Variant_storage_& operator=(const _Variant_storage_&) = default;\r\n\r\n    _NODISCARD constexpr _First ^ &_Get() & noexcept {\r\n        return _Head._Item;\r\n    }\r\n    _NODISCARD constexpr _First ^ const& _Get() const& noexcept {\r\n        return _Head._Item;\r\n    }\r\n    _NODISCARD constexpr _First ^ &&_Get() && noexcept {\r\n        return _STD move(_Head)._Item;\r\n    }\r\n    _NODISCARD constexpr _First ^ const&& _Get() const&& noexcept {\r\n        return _STD move(_Head)._Item;\r\n    }\r\n};\r\n#endif // ^^^ workaround ^^^\r\n\r\ntemplate <size_t _Idx, class _Storage>\r\n_NODISCARD constexpr decltype(auto) _Variant_raw_get(_Storage&& _Obj) noexcept {\r\n    // access the _Idx-th element of a _Variant_storage\r\n    if constexpr (_Idx == 0) {\r\n        return static_cast<_Storage&&>(_Obj)._Get();\r\n    } else if constexpr (_Idx == 1) {\r\n        return static_cast<_Storage&&>(_Obj)._Tail._Get();\r\n    } else if constexpr (_Idx == 2) {\r\n        return static_cast<_Storage&&>(_Obj)._Tail._Tail._Get();\r\n    } else if constexpr (_Idx == 3) {\r\n        return static_cast<_Storage&&>(_Obj)._Tail._Tail._Tail._Get();\r\n    } else if constexpr (_Idx == 4) {\r\n        return static_cast<_Storage&&>(_Obj)._Tail._Tail._Tail._Tail._Get();\r\n    } else if constexpr (_Idx == 5) {\r\n        return static_cast<_Storage&&>(_Obj)._Tail._Tail._Tail._Tail._Tail._Get();\r\n    } else if constexpr (_Idx == 6) {\r\n        return static_cast<_Storage&&>(_Obj)._Tail._Tail._Tail._Tail._Tail._Tail._Get();\r\n    } else if constexpr (_Idx == 7) {\r\n        return static_cast<_Storage&&>(_Obj)._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Get();\r\n    } else if constexpr (_Idx < 16) {\r\n        return _STD _Variant_raw_get<_Idx - 8>(\r\n            static_cast<_Storage&&>(_Obj)._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail);\r\n    } else if constexpr (_Idx < 32) {\r\n        return _STD _Variant_raw_get<_Idx - 16>(static_cast<_Storage&&>(_Obj)\r\n                ._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail);\r\n    } else if constexpr (_Idx < 64) {\r\n        return _STD _Variant_raw_get<_Idx - 32>(static_cast<_Storage&&>(_Obj)\r\n                ._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail\r\n                ._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail);\r\n    } else { // _Idx >= 64\r\n        return _STD _Variant_raw_get<_Idx - 64>(static_cast<_Storage&&>(_Obj)\r\n                ._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail\r\n                ._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail\r\n                ._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail\r\n                ._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail);\r\n    }\r\n}\r\n\r\ntemplate <class _Ty, size_t _Tag>\r\nstruct _Tagged { // aggregate a runtime value and a compile-time tag value\r\n    static constexpr size_t _Idx = _Tag;\r\n    _Ty _Val;\r\n};\r\n\r\ntemplate <class _Storage, size_t _Idx>\r\nusing _Variant_tagged_ref_t = _Tagged<decltype(_STD _Variant_raw_get<_Idx>(_STD declval<_Storage>()))&&, _Idx>;\r\n\r\ntemplate <class _Fn, class _Storage>\r\nusing _Variant_raw_visit_t = decltype(_STD declval<_Fn>()(_STD declval<_Variant_tagged_ref_t<_Storage, 0>>()));\r\n\r\ntemplate <size_t _Idx, class _Fn, class _Storage>\r\n_NODISCARD constexpr _Variant_raw_visit_t<_Fn, _Storage> _Variant_raw_visit_dispatch(_Fn&& _Func, _Storage&& _Var)\r\n    noexcept(is_nothrow_invocable_v<_Fn, _Variant_tagged_ref_t<_Storage, _Idx>>) {\r\n    // call _Func with the _Idx-th element in _Storage (tagged with _Idx)\r\n    return static_cast<_Fn&&>(_Func)(\r\n        _Variant_tagged_ref_t<_Storage, _Idx>{_STD _Variant_raw_get<_Idx>(static_cast<_Storage&&>(_Var))});\r\n}\r\n\r\ntemplate <class _Fn, class _Storage>\r\n_NODISCARD constexpr _Variant_raw_visit_t<_Fn, _Storage> _Variant_raw_visit_valueless(_Fn&& _Func, _Storage&& _Obj)\r\n    noexcept(is_nothrow_invocable_v<_Fn, _Tagged<_Storage&&, variant_npos>>) {\r\n    // call _Func with _Storage (tagged with variant_npos)\r\n    return static_cast<_Fn&&>(_Func)(_Tagged<_Storage&&, variant_npos>{static_cast<_Storage&&>(_Obj)});\r\n}\r\n\r\ntemplate <class _Fn, class _Storage, class _Indices = make_index_sequence<remove_reference_t<_Storage>::_Size>>\r\nconstexpr bool _Variant_raw_visit_noexcept = false;\r\n\r\ntemplate <class _Fn, class _Storage, size_t... _Idxs>\r\nconstexpr bool _Variant_raw_visit_noexcept<_Fn, _Storage, index_sequence<_Idxs...>> =\r\n    conjunction_v<is_nothrow_invocable<_Fn, _Tagged<_Storage&&, variant_npos>>,\r\n        is_nothrow_invocable<_Fn, _Variant_tagged_ref_t<_Storage, _Idxs>>...>;\r\n\r\ntemplate <class _Fn, class _Storage,\r\n    class _Indices = make_index_sequence<remove_reference_t<_Storage>::_Size>>\r\nstruct _Variant_raw_dispatch_table1; // undefined\r\n\r\ntemplate <class _Fn, class _Storage, size_t... _Idxs>\r\nstruct _Variant_raw_dispatch_table1<_Fn, _Storage, index_sequence<_Idxs...>> {\r\n    // map from canonical index to visitation target\r\n    using _Dispatch_t = _Variant_raw_visit_t<_Fn, _Storage> (*)(_Fn&&, _Storage&&)\r\n        noexcept(_Variant_raw_visit_noexcept<_Fn, _Storage>);\r\n    static constexpr _Dispatch_t _Array[] = {\r\n        &_STD _Variant_raw_visit_valueless<_Fn, _Storage>, &_STD _Variant_raw_visit_dispatch<_Idxs, _Fn, _Storage>...};\r\n};\r\n\r\ntemplate <int _Strategy>\r\nstruct _Variant_raw_visit1;\r\n\r\ntemplate <>\r\nstruct _Variant_raw_visit1<-1> { // Fallback case for variants too large for any of the following \"switch\" strategies\r\n    template <class _Fn, class _Storage>\r\n    _NODISCARD static constexpr _Variant_raw_visit_t<_Fn, _Storage> _Visit(size_t _Idx, _Fn&& _Func, _Storage&& _Obj)\r\n        noexcept(_Variant_raw_visit_noexcept<_Fn, _Storage>) {\r\n        // dispatch a visitor for a _Variant_storage with many states\r\n        constexpr size_t _Size = remove_reference_t<_Storage>::_Size;\r\n        static_assert(_Size > 256);\r\n        constexpr auto& _Array = _Variant_raw_dispatch_table1<_Fn, _Storage>::_Array;\r\n        return _Array[_Idx](static_cast<_Fn&&>(_Func), static_cast<_Storage&&>(_Obj));\r\n    }\r\n};\r\n\r\n#define _STL_CASE(n)                                                                                              \\\r\n    case (n) + 1:                                                                                                 \\\r\n        if constexpr ((n) < _Size) {                                                                              \\\r\n            return static_cast<_Fn&&>(_Func)(                                                                     \\\r\n                _Variant_tagged_ref_t<_Storage, (n)>{_STD _Variant_raw_get<(n)>(static_cast<_Storage&&>(_Obj))}); \\\r\n        }                                                                                                         \\\r\n        _STL_UNREACHABLE;                                                                                         \\\r\n        [[fallthrough]]\r\n\r\n#define _STL_VISIT_STAMP(stamper, n)                                                                        \\\r\n    constexpr size_t _Size = remove_reference_t<_Storage>::_Size;                                           \\\r\n    static_assert(((n) == 4 || _Size > (n) / 4) && _Size <= (n));                                           \\\r\n    switch (_Idx) {                                                                                         \\\r\n    case 0:                                                                                                 \\\r\n        return static_cast<_Fn&&>(_Func)(_Tagged<_Storage&&, variant_npos>{static_cast<_Storage&&>(_Obj)}); \\\r\n                                                                                                            \\\r\n        stamper(0, _STL_CASE);                                                                              \\\r\n    default:                                                                                                \\\r\n        _STL_UNREACHABLE;                                                                                   \\\r\n    }\r\n\r\ntemplate <>\r\nstruct _Variant_raw_visit1<1> {\r\n    template <class _Fn, class _Storage>\r\n    _NODISCARD static constexpr _Variant_raw_visit_t<_Fn, _Storage> _Visit(size_t _Idx, _Fn&& _Func, _Storage&& _Obj)\r\n        noexcept(_Variant_raw_visit_noexcept<_Fn, _Storage>) {\r\n        // dispatch a visitor for a _Variant_storage with at most 4^1 states\r\n        _STL_STAMP(4, _STL_VISIT_STAMP);\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct _Variant_raw_visit1<2> {\r\n    template <class _Fn, class _Storage>\r\n    _NODISCARD static constexpr _Variant_raw_visit_t<_Fn, _Storage> _Visit(size_t _Idx, _Fn&& _Func, _Storage&& _Obj)\r\n        noexcept(_Variant_raw_visit_noexcept<_Fn, _Storage>) {\r\n        // dispatch a visitor for a _Variant_storage with at most 4^2 states\r\n        _STL_STAMP(16, _STL_VISIT_STAMP);\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct _Variant_raw_visit1<3> {\r\n    template <class _Fn, class _Storage>\r\n    _NODISCARD static constexpr _Variant_raw_visit_t<_Fn, _Storage> _Visit(size_t _Idx, _Fn&& _Func, _Storage&& _Obj)\r\n        noexcept(_Variant_raw_visit_noexcept<_Fn, _Storage>) {\r\n        // dispatch a visitor for a _Variant_storage with at most 4^3 states\r\n        _STL_STAMP(64, _STL_VISIT_STAMP);\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct _Variant_raw_visit1<4> {\r\n    template <class _Fn, class _Storage>\r\n    _NODISCARD static constexpr _Variant_raw_visit_t<_Fn, _Storage> _Visit(size_t _Idx, _Fn&& _Func, _Storage&& _Obj)\r\n        noexcept(_Variant_raw_visit_noexcept<_Fn, _Storage>) {\r\n        // dispatch a visitor for a _Variant_storage with at most 4^4 states\r\n        _STL_STAMP(256, _STL_VISIT_STAMP);\r\n    }\r\n};\r\n\r\n#undef _STL_VISIT_STAMP\r\n#undef _STL_CASE\r\n\r\ntemplate <class _Storage, class _Fn>\r\n_NODISCARD constexpr _Variant_raw_visit_t<_Fn, _Storage> _Variant_raw_visit(size_t _Idx, _Storage&& _Obj, _Fn&& _Func)\r\n    noexcept(_Variant_raw_visit_noexcept<_Fn, _Storage>) {\r\n    // Call _Func with _Storage if _Idx is variant_npos, and otherwise the _Idx-th element in _Storage.\r\n    // pre: _Idx + 1 <= remove_reference_t<_Storage>::_Size\r\n    constexpr size_t _Size  = remove_reference_t<_Storage>::_Size;\r\n    constexpr int _Strategy = _Size <= 4 ? 1 : _Size <= 16 ? 2 : _Size <= 64 ? 3 : _Size <= 256 ? 4 : -1;\r\n    ++_Idx; // bias index by +1 to map {variant_npos} U [0, _Size) to the contiguous range [0, _Size]\r\n    return _Variant_raw_visit1<_Strategy>::_Visit(_Idx, static_cast<_Fn&&>(_Func), static_cast<_Storage&&>(_Obj));\r\n}\r\n\r\ntemplate <class...>\r\nclass _Variant_base;\r\n\r\ninline constexpr size_t _Schar_max_as_size = static_cast<unsigned char>(-1) / 2;\r\ninline constexpr size_t _Short_max_as_size = static_cast<unsigned short>(-1) / 2;\r\n\r\ntemplate <size_t _Count>\r\nusing _Variant_index_t = // signed so that conversion of -1 to size_t can cheaply sign extend\r\n    conditional_t<(_Count < _Schar_max_as_size), signed char, conditional_t<(_Count < _Short_max_as_size), short, int>>;\r\n\r\ntemplate <class... _Types>\r\nstruct _Variant_construct_visitor { // visitor that constructs the same alternative in a target _Variant_base as is\r\n                                    // currently active in a source _Variant_base from the source's contained value\r\n    _Variant_base<_Types...>& _Self;\r\n\r\n    template <class _Ty, size_t _Idx>\r\n    _CONSTEXPR20 void operator()(_Tagged<_Ty, _Idx> _Source) const noexcept(\r\n        disjunction_v<bool_constant<_Idx == variant_npos>, is_nothrow_constructible<remove_reference_t<_Ty>, _Ty>>) {\r\n        // initialize _Idx-th item in _Self from _Source\r\n        _STL_INTERNAL_CHECK(_Self.valueless_by_exception());\r\n        if constexpr (_Idx != variant_npos) {\r\n            _STD _Construct_in_place(\r\n                _Self._Storage(), integral_constant<size_t, _Idx>{}, static_cast<_Ty&&>(_Source._Val));\r\n            _Self._Set_index(_Idx);\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Target, class... _Types>\r\nconstexpr bool _Variant_should_directly_construct_v =\r\n    disjunction_v<is_nothrow_constructible<_Target, _Types...>, negation<is_nothrow_move_constructible<_Target>>>;\r\n\r\ntemplate <class... _Types>\r\nstruct _Variant_assign_visitor { // visitor that implements assignment for variants with non-trivial alternatives\r\n    _Variant_base<_Types...>& _Self;\r\n\r\n    template <class _Ty, size_t _Idx>\r\n    _CONSTEXPR20 void operator()(_Tagged<_Ty, _Idx> _Source) const\r\n        noexcept(disjunction_v<bool_constant<_Idx == variant_npos>,\r\n            conjunction<is_nothrow_assignable<_Remove_cvref_t<_Ty>&, _Ty>,\r\n                is_nothrow_constructible<_Remove_cvref_t<_Ty>, _Ty>>>) {\r\n        // assign the _Idx-th alternative of _Self from _Source\r\n        if constexpr (_Idx == variant_npos) { // assign from valueless _Source\r\n            _Self._Reset();\r\n        } else {\r\n            if (_Self._Which == _Idx) { // same alternative: assign directly\r\n                auto& _Target = _STD _Variant_raw_get<_Idx>(_Self._Storage());\r\n                _Target       = static_cast<_Ty&&>(_Source._Val);\r\n            } else { // different alternative\r\n                if constexpr (is_lvalue_reference_v<_Ty>) { // RHS is an lvalue: copy\r\n                    if constexpr (_Variant_should_directly_construct_v<_Remove_cvref_t<_Ty>, _Ty>) {\r\n                        // copy is nothrow or move throws; construct in place\r\n                        _Self._Reset();\r\n                        _STD _Construct_in_place(_Self._Storage(), integral_constant<size_t, _Idx>{}, _Source._Val);\r\n                    } else { // copy throws and move does not; move from a temporary copy\r\n                        auto _Temp(_Source._Val);\r\n                        _Self._Reset();\r\n                        _STD _Construct_in_place(_Self._Storage(), integral_constant<size_t, _Idx>{}, _STD move(_Temp));\r\n                    }\r\n                } else { // RHS is an rvalue: move\r\n                    _Self._Reset();\r\n                    _STD _Construct_in_place(\r\n                        _Self._Storage(), integral_constant<size_t, _Idx>{}, static_cast<_Ty&&>(_Source._Val));\r\n                }\r\n\r\n                _Self._Set_index(_Idx);\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class... _Types> // Associate an integral discriminator with a _Variant_storage\r\nclass _Variant_base : private _Variant_storage<_Types...> {\r\npublic:\r\n    using _Index_t                       = _Variant_index_t<sizeof...(_Types)>;\r\n    static constexpr auto _Invalid_index = static_cast<_Index_t>(-1);\r\n    _Index_t _Which;\r\n\r\n    using _Storage_t = _Variant_storage<_Types...>;\r\n    _NODISCARD constexpr _Storage_t& _Storage() & noexcept { // access this variant's storage\r\n        return *this;\r\n    }\r\n    _NODISCARD constexpr const _Storage_t& _Storage() const& noexcept { // access this variant's storage\r\n        return *this;\r\n    }\r\n    _NODISCARD constexpr _Storage_t&& _Storage() && noexcept { // access this variant's storage\r\n        return _STD move(*this);\r\n    }\r\n    _NODISCARD constexpr const _Storage_t&& _Storage() const&& noexcept { // access this variant's storage\r\n        return _STD move(*this);\r\n    }\r\n\r\n    // initialize to the value-less state\r\n    _CONSTEXPR20 _Variant_base() noexcept : _Storage_t{}, _Which{_Invalid_index} {}\r\n\r\n    template <size_t _Idx, class... _UTypes,\r\n        enable_if_t<is_constructible_v<_Meta_at_c<variant<_Types...>, _Idx>, _UTypes...>, int> = 0>\r\n    constexpr explicit _Variant_base(in_place_index_t<_Idx>, _UTypes&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Meta_at_c<variant<_Types...>, _Idx>, _UTypes...>)\r\n        : _Storage_t(integral_constant<size_t, _Idx>{}, static_cast<_UTypes&&>(_Args)...),\r\n          _Which{static_cast<_Index_t>(_Idx)} { // initialize alternative _Idx from _Args...\r\n    }\r\n\r\n    // For the trivially destructible case, we can't add a destructor for _MSVC_STL_DESTRUCTOR_TOMBSTONES, due to\r\n    // N5001 [variant.dtor]/2: \"Remarks: If is_trivially_destructible_v<Ti> is true for all Ti,\r\n    // then this destructor is trivial.\"\r\n\r\n    _NODISCARD constexpr bool valueless_by_exception() const noexcept { // does this variant NOT hold a value?\r\n        return _Which < 0;\r\n    }\r\n    _NODISCARD constexpr size_t index() const noexcept {\r\n        // index of the contained alternative or variant_npos if valueless_by_exception\r\n        return static_cast<size_t>(_Which);\r\n    }\r\n    _CONSTEXPR20 void _Set_index(const size_t _Idx) noexcept {\r\n        // record _Idx as the active alternative\r\n        // pre: the active alternative of *this is _Idx\r\n        _Which = static_cast<_Index_t>(_Idx);\r\n    }\r\n\r\n    template <size_t _Idx>\r\n    _CONSTEXPR20 void _Destroy() noexcept {\r\n        // destroy the contained value\r\n        // pre: _Idx == index()\r\n        using _Indexed_value_type = remove_cv_t<_Meta_at_c<variant<_Types...>, _Idx>>;\r\n        if constexpr (_Idx != variant_npos && !is_trivially_destructible_v<_Indexed_value_type>) {\r\n            _STD _Variant_raw_get<_Idx>(_Storage()).~_Indexed_value_type();\r\n        }\r\n    }\r\n\r\n    _CONSTEXPR20 void _Destroy() noexcept { // destroy the contained value, if any\r\n        if constexpr (!conjunction_v<is_trivially_destructible<_Types>...>) {\r\n            _STD _Variant_raw_visit(index(), _Storage(), [](auto _Ref) static noexcept {\r\n                if constexpr (decltype(_Ref)::_Idx != variant_npos) {\r\n                    using _Indexed_value_type = _Remove_cvref_t<decltype(_Ref._Val)>;\r\n                    _Ref._Val.~_Indexed_value_type();\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    _CONSTEXPR20 void _Reset() noexcept { // transition to the valueless_by_exception state\r\n        _Destroy();\r\n        _Set_index(variant_npos);\r\n    }\r\n\r\n    template <size_t _Idx>\r\n    _CONSTEXPR20 void _Reset() noexcept {\r\n        // transition to the valueless_by_exception state\r\n        // pre: _Idx == index()\r\n        if constexpr (_Idx != variant_npos) {\r\n            _Destroy<_Idx>();\r\n            _Set_index(variant_npos);\r\n        }\r\n    }\r\n\r\n    _CONSTEXPR20 void _Construct_from(const _Variant_base& _That)\r\n        noexcept(conjunction_v<is_nothrow_copy_constructible<_Types>...>) {\r\n        // copy _That's contained value into *this\r\n        // pre: valueless_by_exception()\r\n        _STD _Variant_raw_visit(_That.index(), _That._Storage(), _Variant_construct_visitor<_Types...>{*this});\r\n    }\r\n\r\n    _CONSTEXPR20 void _Construct_from(_Variant_base&& _That)\r\n        noexcept(conjunction_v<is_nothrow_move_constructible<_Types>...>) {\r\n        // move _That's contained value into *this\r\n        // pre: valueless_by_exception()\r\n        _STD _Variant_raw_visit(\r\n            _That.index(), _STD move(_That)._Storage(), _Variant_construct_visitor<_Types...>{*this});\r\n    }\r\n\r\n    _CONSTEXPR20 void _Assign_from(const _Variant_base& _That)\r\n        noexcept(conjunction_v<is_nothrow_copy_constructible<_Types>..., is_nothrow_copy_assignable<_Types>...>) {\r\n        // copy assign _That's contained value (if any) into *this\r\n        _STD _Variant_raw_visit(_That.index(), _That._Storage(), _Variant_assign_visitor<_Types...>{*this});\r\n    }\r\n\r\n    _CONSTEXPR20 void _Assign_from(_Variant_base&& _That)\r\n        noexcept(conjunction_v<is_nothrow_move_constructible<_Types>..., is_nothrow_move_assignable<_Types>...>) {\r\n        // move assign _That's contained value (if any) into *this\r\n        _STD _Variant_raw_visit(_That.index(), _STD move(_That)._Storage(), _Variant_assign_visitor<_Types...>{*this});\r\n    }\r\n};\r\n\r\ntemplate <class... _Types>\r\nstruct _Variant_destroy_layer_ : _Variant_base<_Types...> { // destruction behavior facade (non-trivial case)\r\n    using _Variant_base<_Types...>::_Variant_base;\r\n\r\n    _CONSTEXPR20 ~_Variant_destroy_layer_() noexcept { // Destroy contained value, if any\r\n        this->_Destroy();\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n        // For the non-trivially destructible case, we can set the variant to be valueless.\r\n        // We don't attempt to scribble over the bytes of the object's storage because that could be expensive\r\n        // and we don't know whether the object has an invalid representation, much less what it could be.\r\n        this->_Set_index(variant_npos);\r\n#endif\r\n    }\r\n\r\n    _Variant_destroy_layer_()                                          = default;\r\n    _Variant_destroy_layer_(const _Variant_destroy_layer_&)            = default;\r\n    _Variant_destroy_layer_(_Variant_destroy_layer_&&)                 = default;\r\n    _Variant_destroy_layer_& operator=(const _Variant_destroy_layer_&) = default;\r\n    _Variant_destroy_layer_& operator=(_Variant_destroy_layer_&&)      = default;\r\n};\r\n\r\ntemplate <class... _Types>\r\nusing _Variant_destroy_layer = conditional_t<conjunction_v<is_trivially_destructible<_Types>...>,\r\n    _Variant_base<_Types...>, _Variant_destroy_layer_<_Types...>>;\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdeprecated-volatile\"\r\n#else // ^^^ Clang / not Clang vvv\r\n#pragma warning(push)\r\n#pragma warning(disable : 4242) // '%s': conversion from '%s' to '%s', possible loss of data\r\n#pragma warning(disable : 4244) // '%s': conversion from '%s' to '%s', possible loss of data (Yes, duplicated message.)\r\n#pragma warning(disable : 4365) // '%s': conversion from '%s' to '%s', signed/unsigned mismatch\r\n#pragma warning(disable : 5215) // '%s' a function parameter with volatile qualified type is deprecated in C++20\r\n#endif // ^^^ not Clang ^^^\r\n\r\n// build Ti x[] = {std::forward<T>(t)};\r\ntemplate <size_t _Idx, class _TargetType>\r\nauto _Construct_array(_TargetType (&&)[1]) -> _Meta_list<integral_constant<size_t, _Idx>, _TargetType>;\r\n\r\ntemplate <size_t _Idx, class _TargetType, class _InitializerType>\r\nusing _Variant_type_resolver = decltype(_STD _Construct_array<_Idx, _TargetType>({_STD declval<_InitializerType>()}));\r\n\r\ntemplate <size_t _Idx, class _TargetType>\r\nstruct _Variant_init_single_overload {\r\n    template <class _InitializerType>\r\n    auto operator()(_TargetType, _InitializerType&&) -> _Variant_type_resolver<_Idx, _TargetType, _InitializerType>;\r\n};\r\n\r\ntemplate <class _Indices, class... _Types>\r\nstruct _Variant_init_overload_set_;\r\n\r\ntemplate <size_t... _Indices, class... _Types>\r\nstruct _Variant_init_overload_set_<index_sequence<_Indices...>, _Types...>\r\n    : _Variant_init_single_overload<_Indices, _Types>... {\r\n    using _Variant_init_single_overload<_Indices, _Types>::operator()...;\r\n};\r\n\r\ntemplate <class... _Types>\r\nusing _Variant_init_overload_set = _Variant_init_overload_set_<index_sequence_for<_Types...>, _Types...>;\r\n\r\ntemplate <class _Enable, class _Ty, class... _Types>\r\nstruct _Variant_init_helper {}; // failure case (has no member \"type\")\r\n\r\ntemplate <class _Ty, class... _Types>\r\nstruct _Variant_init_helper<\r\n    void_t<decltype(_Variant_init_overload_set<_Types...>{}(_STD declval<_Ty>(), _STD declval<_Ty>()))>, _Ty,\r\n    _Types...> {\r\n    // perform overload resolution to determine the unique alternative that should be initialized in\r\n    // variant<_Types...> from an argument expression with type and value category _Ty\r\n    using type = decltype(_Variant_init_overload_set<_Types...>{}(_STD declval<_Ty>(), _STD declval<_Ty>()));\r\n};\r\n\r\ntemplate <class _Ty, class... _Types> // extract the type from _Variant_init_helper\r\nusing _Variant_init_type = _Meta_front<_Meta_pop_front<typename _Variant_init_helper<void, _Ty, _Types...>::type>>;\r\n\r\ntemplate <class _Ty, class... _Types> // extract the index from _Variant_init_helper\r\nusing _Variant_init_index = _Meta_front<typename _Variant_init_helper<void, _Ty, _Types...>::type>;\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#else // ^^^ Clang / not Clang vvv\r\n#pragma warning(pop)\r\n#endif // ^^^ not Clang ^^^\r\n\r\ntemplate <class>\r\nconstexpr bool _Is_in_place_index_specialization = false;\r\ntemplate <size_t _Idx>\r\nconstexpr bool _Is_in_place_index_specialization<in_place_index_t<_Idx>> = true;\r\n\r\n_EXPORT_STD template <class... _Types>\r\nclass _NO_SPECIALIZATIONS_CITING(\"N5014 [variant.variant.general]/4\") variant\r\n    : private _SMF_control<_Variant_destroy_layer<_Types...>, _Types...> { // discriminated union\r\npublic:\r\n    static_assert(conjunction_v<is_object<_Types>..., negation<is_array<_Types>>..., is_destructible<_Types>...>,\r\n        \"variant<Types...> requires all of the Types to meet the Cpp17Destructible requirements \"\r\n        \"(N4950 [variant.variant.general]/2).\");\r\n    static_assert(sizeof...(_Types) > 0,\r\n        \"variant<> (with no template arguments) may not be instantiated (N4950 [variant.variant.general]/3).\");\r\n    using _Mybase = _SMF_control<_Variant_destroy_layer<_Types...>, _Types...>;\r\n\r\n    template <class _First = _Meta_front<variant>, enable_if_t<is_default_constructible_v<_First>, int> = 0>\r\n    constexpr variant() noexcept(is_nothrow_default_constructible_v<_First>)\r\n        : _Mybase(in_place_index<0>) {} // value-initialize alternative 0\r\n\r\n    template <class _Ty,\r\n        enable_if_t<sizeof...(_Types) != 0 && !is_same_v<_Remove_cvref_t<_Ty>, variant>\r\n                        && !_Is_specialization_v<_Remove_cvref_t<_Ty>, in_place_type_t>\r\n                        && !_Is_in_place_index_specialization<_Remove_cvref_t<_Ty>>,\r\n            int> = 0,\r\n        // These enable_if_t constraints are distinct to enable short-circuiting and avoid\r\n        // substitution into _Variant_init_type when the first constraint is not satisfied.\r\n        enable_if_t<is_constructible_v<_Variant_init_type<_Ty, _Types...>, _Ty>, int> = 0>\r\n    constexpr variant(_Ty&& _Obj) noexcept(is_nothrow_constructible_v<_Variant_init_type<_Ty, _Types...>, _Ty>)\r\n        : _Mybase(in_place_index<_Variant_init_index<_Ty, _Types...>::value>, static_cast<_Ty&&>(_Obj)) {\r\n        // initialize to the type selected by passing _Obj to the overload set f(Types)...\r\n    }\r\n\r\n    template <class _Ty, class... _UTypes, class _Idx = _Meta_find_unique_index<variant, _Ty>,\r\n        enable_if_t<_Idx::value != _Meta_npos && is_constructible_v<_Ty, _UTypes...>, int> = 0>\r\n    constexpr explicit variant(in_place_type_t<_Ty>, _UTypes&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Ty, _UTypes...>) // strengthened\r\n        : _Mybase(in_place_index<_Idx::value>, static_cast<_UTypes&&>(_Args)...) {\r\n        // initialize alternative _Ty from _Args...\r\n    }\r\n    template <class _Ty, class _Elem, class... _UTypes, class _Idx = _Meta_find_unique_index<variant, _Ty>,\r\n        enable_if_t<_Idx::value != _Meta_npos && is_constructible_v<_Ty, initializer_list<_Elem>&, _UTypes...>, int> =\r\n            0>\r\n    constexpr explicit variant(in_place_type_t<_Ty>, initializer_list<_Elem> _Ilist, _UTypes&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Ty, initializer_list<_Elem>&, _UTypes...>) // strengthened\r\n        : _Mybase(in_place_index<_Idx::value>, _Ilist, static_cast<_UTypes&&>(_Args)...) {\r\n        // initialize alternative _Ty from _Ilist and _Args...\r\n    }\r\n\r\n    template <size_t _Idx, class... _UTypes,\r\n        enable_if_t<is_constructible_v<_Meta_at_c<variant, _Idx>, _UTypes...>, int> = 0>\r\n    constexpr explicit variant(in_place_index_t<_Idx>, _UTypes&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Meta_at_c<variant, _Idx>, _UTypes...>) // strengthened\r\n        : _Mybase(in_place_index<_Idx>, static_cast<_UTypes&&>(_Args)...) {\r\n        // initialize alternative _Idx from _Args...\r\n    }\r\n    template <size_t _Idx, class _Elem, class... _UTypes,\r\n        enable_if_t<is_constructible_v<_Meta_at_c<variant, _Idx>, initializer_list<_Elem>&, _UTypes...>, int> = 0>\r\n    constexpr explicit variant(in_place_index_t<_Idx>, initializer_list<_Elem> _Ilist, _UTypes&&... _Args)\r\n        noexcept(is_constructible_v<_Meta_at_c<variant, _Idx>, initializer_list<_Elem>&, _UTypes...>) // strengthened\r\n        : _Mybase(in_place_index<_Idx>, _Ilist, static_cast<_UTypes&&>(_Args)...) {\r\n        // initialize alternative _Idx from _Ilist and _Args...\r\n    }\r\n\r\n    template <class _Ty, enable_if_t<!is_same_v<_Remove_cvref_t<_Ty>, variant>, int> = 0,\r\n        // These enable_if_t constraints are distinct to enable short-circuiting and avoid\r\n        // substitution into _Variant_init_type when the first constraint is not satisfied.\r\n        enable_if_t<is_constructible_v<_Variant_init_type<_Ty, _Types...>, _Ty>\r\n                        && is_assignable_v<_Variant_init_type<_Ty, _Types...>&, _Ty>,\r\n            int> = 0>\r\n    _CONSTEXPR20 variant& operator=(_Ty&& _Obj)\r\n        noexcept(is_nothrow_assignable_v<_Variant_init_type<_Ty, _Types...>&, _Ty>\r\n                 && is_nothrow_constructible_v<_Variant_init_type<_Ty, _Types...>, _Ty>) {\r\n        // assign/emplace the alternative chosen by overload resolution of _Obj with f(_Types)...\r\n        constexpr size_t _TargetIdx = _Variant_init_index<_Ty, _Types...>::value;\r\n        if (index() == _TargetIdx) {\r\n            auto& _Target = _STD _Variant_raw_get<_TargetIdx>(_Storage());\r\n            _Target       = static_cast<_Ty&&>(_Obj);\r\n        } else {\r\n            using _TargetTy = _Variant_init_type<_Ty, _Types...>;\r\n            if constexpr (_Variant_should_directly_construct_v<_TargetTy, _Ty>) {\r\n                this->_Reset();\r\n                _Emplace_valueless<_TargetIdx>(static_cast<_Ty&&>(_Obj));\r\n            } else {\r\n                _TargetTy _Temp(static_cast<_Ty&&>(_Obj));\r\n                this->_Reset();\r\n                _Emplace_valueless<_TargetIdx>(_STD move(_Temp));\r\n            }\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    using _Mybase::_Storage;\r\n\r\n    template <class _Ty, class... _ArgTypes, size_t _Idx = _Meta_find_unique_index<variant, _Ty>::value,\r\n        enable_if_t<_Idx != _Meta_npos && is_constructible_v<_Ty, _ArgTypes...>, int> = 0>\r\n    _CONSTEXPR20 _Ty& emplace(_ArgTypes&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Ty, _ArgTypes...>) /* strengthened */ {\r\n        // emplace alternative _Ty from _Args...\r\n        this->_Reset();\r\n        return _Emplace_valueless<_Idx>(static_cast<_ArgTypes&&>(_Args)...);\r\n    }\r\n    template <class _Ty, class _Elem, class... _ArgTypes, size_t _Idx = _Meta_find_unique_index<variant, _Ty>::value,\r\n        enable_if_t<_Idx != _Meta_npos && is_constructible_v<_Ty, initializer_list<_Elem>&, _ArgTypes...>, int> = 0>\r\n    _CONSTEXPR20 _Ty& emplace(initializer_list<_Elem> _Ilist, _ArgTypes&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Ty, initializer_list<_Elem>&, _ArgTypes...>) /* strengthened */ {\r\n        // emplace alternative _Ty from _Ilist and _Args...\r\n        this->_Reset();\r\n        return _Emplace_valueless<_Idx>(_Ilist, static_cast<_ArgTypes&&>(_Args)...);\r\n    }\r\n\r\n    template <size_t _Idx, class... _ArgTypes,\r\n        enable_if_t<is_constructible_v<_Meta_at_c<variant, _Idx>, _ArgTypes...>, int> = 0>\r\n    _CONSTEXPR20 _Meta_at_c<variant, _Idx>& emplace(_ArgTypes&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Meta_at_c<variant, _Idx>, _ArgTypes...>) /* strengthened */ {\r\n        // emplace alternative _Idx from _Args...\r\n        this->_Reset();\r\n        return _Emplace_valueless<_Idx>(static_cast<_ArgTypes&&>(_Args)...);\r\n    }\r\n    template <size_t _Idx, class _Elem, class... _ArgTypes,\r\n        enable_if_t<is_constructible_v<_Meta_at_c<variant, _Idx>, initializer_list<_Elem>&, _ArgTypes...>, int> = 0>\r\n    _CONSTEXPR20 _Meta_at_c<variant, _Idx>& emplace(initializer_list<_Elem> _Ilist, _ArgTypes&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Meta_at_c<variant, _Idx>, initializer_list<_Elem>&,\r\n            _ArgTypes...>) /* strengthened */ {\r\n        // emplace alternative _Idx from _Ilist and _Args...\r\n        this->_Reset();\r\n        return _Emplace_valueless<_Idx>(_Ilist, static_cast<_ArgTypes&&>(_Args)...);\r\n    }\r\n\r\n    using _Mybase::index;\r\n    using _Mybase::valueless_by_exception;\r\n\r\n#ifdef __clang__ // TRANSITION, LLVM-35450\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wunused-lambda-capture\"\r\n#endif // ^^^ workaround ^^^\r\n    _CONSTEXPR20 void swap(variant& _That)\r\n        noexcept(conjunction_v<is_nothrow_move_constructible<_Types>..., is_nothrow_swappable<_Types>...>) {\r\n        // exchange the contained values if *this and _That hold the same alternative, otherwise exchange the values of\r\n        // the variants themselves\r\n        static_assert(conjunction_v<is_move_constructible<_Types>...>,\r\n            \"variant<Types...>::swap requires all of the Types... to be move constructible. (N4950 [variant.swap]/1)\");\r\n        static_assert(disjunction_v<negation<is_move_constructible<_Types>>..., conjunction<is_swappable<_Types>...>>,\r\n            \"variant<Types...>::swap requires all of the Types... to be swappable. (N4950 [variant.swap]/2)\");\r\n        if constexpr (conjunction_v<_Is_trivially_swappable<_Types>...>) {\r\n            using _BaseTy = _Variant_base<_Types...>;\r\n            _STD swap(static_cast<_BaseTy&>(*this), static_cast<_BaseTy&>(_That));\r\n        } else if constexpr (sizeof...(_Types) < 32) {\r\n            // Limit the size of variants that use this quadratic code size implementation of swap.\r\n            _STD _Variant_raw_visit(index(), _Storage(),\r\n                [this, &_That](auto _My_ref) noexcept(\r\n                    conjunction_v<is_nothrow_move_constructible<_Types>..., is_nothrow_swappable<_Types>...>) {\r\n                    _STD _Variant_raw_visit(_That.index(), _That._Storage(),\r\n                        [this, &_That, _My_ref](auto _That_ref) noexcept(\r\n                            conjunction_v<is_nothrow_move_constructible<_Types>..., is_nothrow_swappable<_Types>...>) {\r\n                            constexpr size_t _That_idx = decltype(_That_ref)::_Idx;\r\n                            constexpr size_t _My_idx   = decltype(_My_ref)::_Idx;\r\n                            if constexpr (_My_idx == _That_idx) { // Same alternatives...\r\n                                if constexpr (_My_idx != variant_npos) { // ...and not valueless, swap directly\r\n                                    using _STD swap;\r\n                                    swap(_My_ref._Val, _That_ref._Val); // intentional ADL\r\n                                }\r\n                            } else if constexpr (_My_idx == variant_npos) { // *this is valueless, _That is not\r\n                                this->_Emplace_valueless<_That_idx>(_STD move(_That_ref._Val));\r\n                                _That.template _Reset<_That_idx>();\r\n                            } else if constexpr (_That_idx == variant_npos) { // _That is valueless, *this is not\r\n                                _That._Emplace_valueless<_My_idx>(_STD move(_My_ref._Val));\r\n                                this->template _Reset<_My_idx>();\r\n                            } else { // different non-valueless alternatives\r\n                                auto _Tmp = _STD move(_My_ref._Val);\r\n                                this->template _Reset<_My_idx>();\r\n                                this->_Emplace_valueless<_That_idx>(_STD move(_That_ref._Val));\r\n                                _That.template _Reset<_That_idx>();\r\n                                _That._Emplace_valueless<_My_idx>(_STD move(_Tmp));\r\n                            }\r\n                        });\r\n                });\r\n        } else {\r\n            if (this->_Which == _That._Which) {\r\n                _STD _Variant_raw_visit(static_cast<size_t>(this->_Which), _That._Storage(),\r\n                    [this](auto _Ref) noexcept(conjunction_v<is_nothrow_swappable<_Types>...>) {\r\n                        constexpr size_t _Idx = decltype(_Ref)::_Idx;\r\n                        if constexpr (_Idx != variant_npos) {\r\n                            using _STD swap;\r\n                            swap(_Variant_raw_get<_Idx>(this->_Storage()), _Ref._Val); // intentional ADL\r\n                        }\r\n                    });\r\n            } else {\r\n                variant _Tmp = _STD move(*this);\r\n                this->_Emplace_from(_STD move(_That));\r\n                _That._Emplace_from(_STD move(_Tmp));\r\n            }\r\n        }\r\n    }\r\n#ifdef __clang__ // TRANSITION, LLVM-35450\r\n#pragma clang diagnostic pop\r\n#endif // ^^^ workaround ^^^\r\n\r\nprivate:\r\n    template <size_t _Idx, class... _ArgTypes>\r\n    _CONSTEXPR20 _Meta_at_c<variant, _Idx>& _Emplace_valueless(_ArgTypes&&... _Args)\r\n        noexcept(is_nothrow_constructible_v<_Meta_at_c<variant, _Idx>, _ArgTypes...>) {\r\n        // initialize alternative _Idx from _Args...\r\n        _STL_INTERNAL_CHECK(valueless_by_exception());\r\n        _STD _Construct_in_place(_Storage(), integral_constant<size_t, _Idx>{}, static_cast<_ArgTypes&&>(_Args)...);\r\n        this->_Set_index(_Idx);\r\n        return _STD _Variant_raw_get<_Idx>(_Storage());\r\n    }\r\n\r\n    _CONSTEXPR20 void _Emplace_from(variant&& _That) noexcept(conjunction_v<is_nothrow_move_constructible<_Types>...>) {\r\n        // steal the contained value from _That\r\n        this->_Reset();\r\n        _STD _Variant_raw_visit(_That.index(), _That._Storage(),\r\n            [this](auto _Ref) noexcept(conjunction_v<is_nothrow_move_constructible<_Types>...>) {\r\n                constexpr size_t _Idx = decltype(_Ref)::_Idx;\r\n                if constexpr (_Idx != variant_npos) {\r\n                    this->_Emplace_valueless<_Idx>(_STD move(_Ref._Val));\r\n                }\r\n            });\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, class... _Types>\r\n_NODISCARD constexpr bool holds_alternative(const variant<_Types...>& _Var) noexcept {\r\n    // true iff _Var holds alternative _Ty\r\n    constexpr size_t _Idx = _Meta_find_unique_index<variant<_Types...>, _Ty>::value;\r\n    if constexpr (_Idx != _Meta_npos) {\r\n        return _Var.index() == _Idx;\r\n    } else {\r\n        static_assert(false, \"holds_alternative<T>(const variant<Types...>&) requires T to occur exactly \"\r\n                             \"once in Types. (N4971 [variant.get]/1)\");\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <size_t _Idx, class... _Types>\r\n_NODISCARD constexpr decltype(auto) get(variant<_Types...>& _Var) {\r\n    // access the contained value of _Var if its _Idx-th alternative is active\r\n    static_assert(_Idx < sizeof...(_Types), \"variant index out of bounds\");\r\n    if (_Var.index() == _Idx) {\r\n        return _STD _Variant_raw_get<_Idx>(_Var._Storage());\r\n    }\r\n\r\n    _STD _Throw_bad_variant_access();\r\n}\r\n_EXPORT_STD template <size_t _Idx, class... _Types>\r\n_NODISCARD constexpr decltype(auto) get(variant<_Types...>&& _Var) {\r\n    // access the contained value of _Var if its _Idx-th alternative is active\r\n    static_assert(_Idx < sizeof...(_Types), \"variant index out of bounds\");\r\n    if (_Var.index() == _Idx) {\r\n        return _STD _Variant_raw_get<_Idx>(_STD move(_Var)._Storage());\r\n    }\r\n\r\n    _STD _Throw_bad_variant_access();\r\n}\r\n_EXPORT_STD template <size_t _Idx, class... _Types>\r\n_NODISCARD constexpr decltype(auto) get(const variant<_Types...>& _Var) {\r\n    // access the contained value of _Var if its _Idx-th alternative is active\r\n    static_assert(_Idx < sizeof...(_Types), \"variant index out of bounds\");\r\n    if (_Var.index() == _Idx) {\r\n        return _STD _Variant_raw_get<_Idx>(_Var._Storage());\r\n    }\r\n\r\n    _STD _Throw_bad_variant_access();\r\n}\r\n_EXPORT_STD template <size_t _Idx, class... _Types>\r\n_NODISCARD constexpr decltype(auto) get(const variant<_Types...>&& _Var) {\r\n    // access the contained value of _Var if its _Idx-th alternative is active\r\n    static_assert(_Idx < sizeof...(_Types), \"variant index out of bounds\");\r\n    if (_Var.index() == _Idx) {\r\n        return _STD _Variant_raw_get<_Idx>(_STD move(_Var)._Storage());\r\n    }\r\n\r\n    _STD _Throw_bad_variant_access();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class... _Types>\r\n_NODISCARD constexpr decltype(auto) get(variant<_Types...>& _Var) {\r\n    // access the contained value of _Var if its alternative _Ty is active\r\n    constexpr size_t _Idx = _Meta_find_unique_index<variant<_Types...>, _Ty>::value;\r\n    if constexpr (_Idx < sizeof...(_Types)) {\r\n        return _STD get<_Idx>(_Var);\r\n    } else {\r\n        static_assert(false, \"get<T>(variant<Types...>&) \"\r\n                             \"requires T to occur exactly once in Types. (N4971 [variant.get]/8)\");\r\n    }\r\n}\r\n_EXPORT_STD template <class _Ty, class... _Types>\r\n_NODISCARD constexpr decltype(auto) get(variant<_Types...>&& _Var) {\r\n    // access the contained value of _Var if its alternative _Ty is active\r\n    constexpr size_t _Idx = _Meta_find_unique_index<variant<_Types...>, _Ty>::value;\r\n    if constexpr (_Idx < sizeof...(_Types)) {\r\n        return _STD get<_Idx>(_STD move(_Var));\r\n    } else {\r\n        static_assert(false, \"get<T>(variant<Types...>&&) \"\r\n                             \"requires T to occur exactly once in Types. (N4971 [variant.get]/8)\");\r\n    }\r\n}\r\n_EXPORT_STD template <class _Ty, class... _Types>\r\n_NODISCARD constexpr decltype(auto) get(const variant<_Types...>& _Var) {\r\n    // access the contained value of _Var if its alternative _Ty is active\r\n    constexpr size_t _Idx = _Meta_find_unique_index<variant<_Types...>, _Ty>::value;\r\n    if constexpr (_Idx < sizeof...(_Types)) {\r\n        return _STD get<_Idx>(_Var);\r\n    } else {\r\n        static_assert(false, \"get<T>(const variant<Types...>&) \"\r\n                             \"requires T to occur exactly once in Types. (N4971 [variant.get]/8)\");\r\n    }\r\n}\r\n_EXPORT_STD template <class _Ty, class... _Types>\r\n_NODISCARD constexpr decltype(auto) get(const variant<_Types...>&& _Var) {\r\n    // access the contained value of _Var if its alternative _Ty is active\r\n    constexpr size_t _Idx = _Meta_find_unique_index<variant<_Types...>, _Ty>::value;\r\n    if constexpr (_Idx < sizeof...(_Types)) {\r\n        return _STD get<_Idx>(_STD move(_Var));\r\n    } else {\r\n        static_assert(false, \"get<T>(const variant<Types...>&&) \"\r\n                             \"requires T to occur exactly once in Types. (N4971 [variant.get]/8)\");\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <size_t _Idx, class... _Types>\r\n_NODISCARD constexpr auto get_if(variant<_Types...>* _Ptr) noexcept {\r\n    // get the address of *_Ptr's contained value if it holds alternative _Idx\r\n    static_assert(_Idx < sizeof...(_Types), \"variant index out of bounds\");\r\n    return _Ptr && _Ptr->index() == _Idx ? _STD addressof(_STD _Variant_raw_get<_Idx>(_Ptr->_Storage())) : nullptr;\r\n}\r\n_EXPORT_STD template <size_t _Idx, class... _Types>\r\n_NODISCARD constexpr auto get_if(const variant<_Types...>* _Ptr) noexcept {\r\n    // get the address of *_Ptr's contained value if it holds alternative _Idx\r\n    static_assert(_Idx < sizeof...(_Types), \"variant index out of bounds\");\r\n    return _Ptr && _Ptr->index() == _Idx ? _STD addressof(_STD _Variant_raw_get<_Idx>(_Ptr->_Storage())) : nullptr;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class... _Types>\r\n_NODISCARD constexpr add_pointer_t<_Ty> get_if(variant<_Types...>* _Ptr) noexcept {\r\n    // get the address of *_Ptr's contained value if it holds alternative _Ty\r\n    constexpr size_t _Idx = _Meta_find_unique_index<variant<_Types...>, _Ty>::value;\r\n    if constexpr (_Idx != _Meta_npos) {\r\n        return _STD get_if<_Idx>(_Ptr);\r\n    } else {\r\n        static_assert(false,\r\n            \"get_if<T>(variant<Types...> *) requires T to occur exactly once in Types. (N4971 [variant.get]/12)\");\r\n    }\r\n}\r\n_EXPORT_STD template <class _Ty, class... _Types>\r\n_NODISCARD constexpr add_pointer_t<const _Ty> get_if(const variant<_Types...>* _Ptr) noexcept {\r\n    // get the address of *_Ptr's contained value if it holds alternative _Ty\r\n    constexpr size_t _Idx = _Meta_find_unique_index<variant<_Types...>, _Ty>::value;\r\n    if constexpr (_Idx != _Meta_npos) {\r\n        return _STD get_if<_Idx>(_Ptr);\r\n    } else {\r\n        static_assert(false,\r\n            \"get_if<T>(const variant<Types...> *) requires T to occur exactly once in Types. (N4971 [variant.get]/12)\");\r\n    }\r\n}\r\n\r\ntemplate <class _Op, class _Result, class... _Types>\r\nstruct _Variant_relop_visitor2 { // evaluate _Op with the contained value of two variants that hold the same alternative\r\n    const _Variant_storage<_Types...>& _Left;\r\n\r\n    template <class _Ty, size_t _Idx>\r\n    _NODISCARD constexpr _Result operator()(_Tagged<const _Ty&, _Idx> _Right) const\r\n        noexcept(disjunction_v<bool_constant<_Idx == variant_npos>,\r\n            is_nothrow_invocable_r<_Result, _Op, const _Ty&, const _Ty&>>) {\r\n        // determine the relationship between the stored values of _Left and _Right\r\n        // pre: _Left.index() == _Idx && _Right.index() == _Idx\r\n        if constexpr (_Idx != variant_npos) {\r\n            return _Op{}(_STD _Variant_raw_get<_Idx>(_Left), _Right._Val);\r\n        } else { // return whatever _Op returns for equal values\r\n            return _Op{}(0, 0);\r\n        }\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD constexpr bool operator==(const variant<_Types...>& _Left, const variant<_Types...>& _Right) noexcept(\r\n    conjunction_v<is_nothrow_invocable_r<bool, equal_to<>, const _Types&, const _Types&>...>) /* strengthened */ {\r\n    // determine if the arguments are both valueless or contain equal values\r\n    using _Visitor            = _Variant_relop_visitor2<equal_to<>, bool, _Types...>;\r\n    const size_t _Right_index = _Right.index();\r\n    return _Left.index() == _Right_index\r\n        && _STD _Variant_raw_visit(_Right_index, _Right._Storage(), _Visitor{_Left._Storage()});\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD constexpr bool operator!=(const variant<_Types...>& _Left, const variant<_Types...>& _Right) noexcept(\r\n    conjunction_v<is_nothrow_invocable_r<bool, not_equal_to<>, const _Types&, const _Types&>...>) /* strengthened */ {\r\n    // determine if the arguments have different active alternatives or contain unequal values\r\n    using _Visitor            = _Variant_relop_visitor2<not_equal_to<>, bool, _Types...>;\r\n    const size_t _Right_index = _Right.index();\r\n    return _Left.index() != _Right_index\r\n        || _STD _Variant_raw_visit(_Right_index, _Right._Storage(), _Visitor{_Left._Storage()});\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD constexpr bool operator<(const variant<_Types...>& _Left, const variant<_Types...>& _Right)\r\n    noexcept(conjunction_v<is_nothrow_invocable_r<bool, less<>, const _Types&, const _Types&>...>) /* strengthened */ {\r\n    // determine if _Left has a lesser index(), or equal index() and lesser\r\n    // contained value than _Right\r\n    using _Visitor             = _Variant_relop_visitor2<less<>, bool, _Types...>;\r\n    const size_t _Left_offset  = _Left.index() + 1;\r\n    const size_t _Right_offset = _Right.index() + 1;\r\n    return _Left_offset < _Right_offset\r\n        || (_Left_offset == _Right_offset\r\n            && _STD _Variant_raw_visit(_Right_offset - 1, _Right._Storage(), _Visitor{_Left._Storage()}));\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD constexpr bool operator>(const variant<_Types...>& _Left, const variant<_Types...>& _Right) noexcept(\r\n    conjunction_v<is_nothrow_invocable_r<bool, greater<>, const _Types&, const _Types&>...>) /* strengthened */ {\r\n    // determine if _Left has a greater index(), or equal index() and\r\n    // greater contained value than _Right\r\n    using _Visitor             = _Variant_relop_visitor2<greater<>, bool, _Types...>;\r\n    const size_t _Left_offset  = _Left.index() + 1;\r\n    const size_t _Right_offset = _Right.index() + 1;\r\n    return _Left_offset > _Right_offset\r\n        || (_Left_offset == _Right_offset\r\n            && _STD _Variant_raw_visit(_Right_offset - 1, _Right._Storage(), _Visitor{_Left._Storage()}));\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD constexpr bool operator<=(const variant<_Types...>& _Left, const variant<_Types...>& _Right) noexcept(\r\n    conjunction_v<is_nothrow_invocable_r<bool, less_equal<>, const _Types&, const _Types&>...>) /* strengthened */ {\r\n    // determine if _Left's index() is less than _Right's, or equal and\r\n    // _Left contains a value less than or equal to _Right\r\n    using _Visitor             = _Variant_relop_visitor2<less_equal<>, bool, _Types...>;\r\n    const size_t _Left_offset  = _Left.index() + 1;\r\n    const size_t _Right_offset = _Right.index() + 1;\r\n    return _Left_offset < _Right_offset\r\n        || (_Left_offset == _Right_offset\r\n            && _STD _Variant_raw_visit(_Right_offset - 1, _Right._Storage(), _Visitor{_Left._Storage()}));\r\n}\r\n\r\n_EXPORT_STD template <class... _Types>\r\n_NODISCARD constexpr bool operator>=(const variant<_Types...>& _Left, const variant<_Types...>& _Right) noexcept(\r\n    conjunction_v<is_nothrow_invocable_r<bool, greater_equal<>, const _Types&, const _Types&>...>) /* strengthened */ {\r\n    // determine if _Left's index() is greater than _Right's, or equal and\r\n    // _Left contains a value greater than or equal to _Right\r\n    using _Visitor             = _Variant_relop_visitor2<greater_equal<>, bool, _Types...>;\r\n    const size_t _Left_offset  = _Left.index() + 1;\r\n    const size_t _Right_offset = _Right.index() + 1;\r\n    return _Left_offset > _Right_offset\r\n        || (_Left_offset == _Right_offset\r\n            && _STD _Variant_raw_visit(_Right_offset - 1, _Right._Storage(), _Visitor{_Left._Storage()}));\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class... _Types>\r\n    requires (three_way_comparable<_Types> && ...)\r\n_NODISCARD constexpr common_comparison_category_t<compare_three_way_result_t<_Types>...> operator<=>(\r\n    const variant<_Types...>& _Left, const variant<_Types...>& _Right)\r\n    noexcept(conjunction_v<is_nothrow_invocable_r<common_comparison_category_t<compare_three_way_result_t<_Types>...>,\r\n            compare_three_way, const _Types&, const _Types&>...>) /* strengthened */ {\r\n    // determine the three-way comparison of _Left's and _Right's index, if equal\r\n    // return the three-way comparison of the contained values of _Left and _Right\r\n    using _Visitor             = _Variant_relop_visitor2<compare_three_way,\r\n                    common_comparison_category_t<compare_three_way_result_t<_Types>...>, _Types...>;\r\n    const size_t _Left_offset  = _Left.index() + 1;\r\n    const size_t _Right_offset = _Right.index() + 1;\r\n    const auto _Offset_order   = _Left_offset <=> _Right_offset;\r\n    return _Offset_order != 0\r\n             ? _Offset_order\r\n             : _STD _Variant_raw_visit(_Right_offset - 1, _Right._Storage(), _Visitor{_Left._Storage()});\r\n}\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class... _Variants>\r\nconstexpr size_t _Variant_total_states =\r\n    (size_t{1} * ... * (variant_size_v<_Variants> + 1)); // +1 to account for the valueless state\r\n\r\n_NODISCARD constexpr size_t _Variant_visit_index1(const size_t _Acc) noexcept {\r\n    return _Acc;\r\n}\r\ntemplate <class _FirstTy, class... _RestTys>\r\n_NODISCARD constexpr size_t _Variant_visit_index1(\r\n    size_t _Acc, const _FirstTy& _First, const _RestTys&... _Rest) noexcept {\r\n    // calculate a canonical index from the biased indices of the variants _First and _Rest...\r\n    _Acc += (_First.index() + 1) * _Variant_total_states<_RestTys...>;\r\n    return _STD _Variant_visit_index1(_Acc, _Rest...);\r\n}\r\n\r\ntemplate <class _Callable, class... _Types>\r\nusing _Variant_visit_result_t =\r\n    decltype(_STD invoke(_STD declval<_Callable>(), _STD _Variant_raw_get<0>(_STD declval<_Types>()._Storage())...));\r\n\r\ntemplate <class>\r\nstruct _Variant_dispatcher;\r\n\r\ntemplate <size_t... _Is>\r\nstruct _Variant_dispatcher<index_sequence<_Is...>> {\r\n    template <class _Ret, class _Callable, class... _Types, bool _Any_valueless = ((_Is == 0) || ...)>\r\n    _NODISCARD static constexpr _Ret _Dispatch2(_Callable&& _Obj, _Types&&... _Args) {\r\n        if constexpr (_Any_valueless) {\r\n            _STD _Throw_bad_variant_access();\r\n        }\r\n#if _HAS_CXX20\r\n        else if constexpr (is_void_v<_Ret>) {\r\n            static_cast<void>(_STD invoke(static_cast<_Callable&&>(_Obj),\r\n                _STD _Variant_raw_get<_Is - 1>(static_cast<_Types&&>(_Args)._Storage())...));\r\n        }\r\n#endif // _HAS_CXX20\r\n        else {\r\n            return _STD invoke(static_cast<_Callable&&>(_Obj),\r\n                _STD _Variant_raw_get<_Is - 1>(static_cast<_Types&&>(_Args)._Storage())...);\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Ret, class _Ordinals, class _Callable, class _Variants>\r\nstruct _Variant_dispatch_table; // undefined\r\n\r\ntemplate <class _Ret, class... _Ordinals, class _Callable, class... _Variants>\r\nstruct _Variant_dispatch_table<_Ret, _Meta_list<_Ordinals...>, _Callable, _Meta_list<_Variants...>> {\r\n    // map from canonical index to visitation target\r\n    using _Dispatch_t                     = _Ret (*)(_Callable&&, _Variants&&...);\r\n    static constexpr _Dispatch_t _Array[] = {\r\n        &_Variant_dispatcher<_Ordinals>::template _Dispatch2<_Ret, _Callable, _Variants...>...};\r\n};\r\n\r\ntemplate <int _Strategy>\r\nstruct _Visit_strategy;\r\n\r\ntemplate <>\r\nstruct _Visit_strategy<-1> {\r\n    // Fallback strategy for visitations with too many total states for the following \"switch\" strategies.\r\n    template <class _Ret, class _ListOfIndexVectors, class _Callable, class... _Variants>\r\n    static constexpr _Ret _Visit2(\r\n        size_t _Idx, _Callable&& _Obj, _Variants&&... _Args) { // dispatch a visitation with many potential states\r\n        constexpr size_t _Size = _Variant_total_states<_Remove_cvref_t<_Variants>...>;\r\n        static_assert(_Size > 256);\r\n        constexpr auto& _Array =\r\n            _Variant_dispatch_table<_Ret, _ListOfIndexVectors, _Callable, _Meta_list<_Variants...>>::_Array;\r\n        return _Array[_Idx](static_cast<_Callable&&>(_Obj), static_cast<_Variants&&>(_Args)...);\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct _Visit_strategy<0> {\r\n    template <class _Ret, class, class _Callable>\r\n    static constexpr _Ret _Visit2(size_t, _Callable&& _Obj) { // dispatch a visitation with 4^0 potential states\r\n        if constexpr (is_void_v<_Ret>) {\r\n            return static_cast<void>(static_cast<_Callable&&>(_Obj)());\r\n        } else {\r\n            return static_cast<_Callable&&>(_Obj)();\r\n        }\r\n    }\r\n};\r\n\r\n#define _STL_CASE(n)                                                                                  \\\r\n    case (n):                                                                                         \\\r\n        if constexpr ((n) < _Size) {                                                                  \\\r\n            using _Indices = _Meta_at_c<_ListOfIndexVectors, (n)>;                                    \\\r\n            return _Variant_dispatcher<_Indices>::template _Dispatch2<_Ret, _Callable, _Variants...>( \\\r\n                static_cast<_Callable&&>(_Obj), static_cast<_Variants&&>(_Args)...);                  \\\r\n        }                                                                                             \\\r\n        _STL_UNREACHABLE;                                                                             \\\r\n        [[fallthrough]]\r\n\r\n#define _STL_VISIT_STAMP(stamper, n)                                               \\\r\n    constexpr size_t _Size = _Variant_total_states<_Remove_cvref_t<_Variants>...>; \\\r\n    static_assert(_Size > (n) / 4 && _Size <= (n));                                \\\r\n    switch (_Idx) {                                                                \\\r\n        stamper(0, _STL_CASE);                                                     \\\r\n    default:                                                                       \\\r\n        _STL_UNREACHABLE;                                                          \\\r\n    }\r\n\r\ntemplate <>\r\nstruct _Visit_strategy<1> {\r\n    template <class _Ret, class _ListOfIndexVectors, class _Callable, class... _Variants>\r\n    static constexpr _Ret _Visit2(size_t _Idx, _Callable&& _Obj, _Variants&&... _Args) {\r\n        // dispatch a visitation with 4^1 potential states\r\n        _STL_STAMP(4, _STL_VISIT_STAMP);\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct _Visit_strategy<2> {\r\n    template <class _Ret, class _ListOfIndexVectors, class _Callable, class... _Variants>\r\n    static constexpr _Ret _Visit2(size_t _Idx, _Callable&& _Obj, _Variants&&... _Args) {\r\n        // dispatch a visitation with 4^2 potential states\r\n        _STL_STAMP(16, _STL_VISIT_STAMP);\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct _Visit_strategy<3> {\r\n    template <class _Ret, class _ListOfIndexVectors, class _Callable, class... _Variants>\r\n    static constexpr _Ret _Visit2(size_t _Idx, _Callable&& _Obj, _Variants&&... _Args) {\r\n        // dispatch a visitation with 4^3 potential states\r\n        _STL_STAMP(64, _STL_VISIT_STAMP);\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct _Visit_strategy<4> {\r\n    template <class _Ret, class _ListOfIndexVectors, class _Callable, class... _Variants>\r\n    static constexpr _Ret _Visit2(size_t _Idx, _Callable&& _Obj, _Variants&&... _Args) {\r\n        // dispatch a visitation with 4^4 potential states\r\n        _STL_STAMP(256, _STL_VISIT_STAMP);\r\n    }\r\n};\r\n\r\n#undef _STL_VISIT_STAMP\r\n#undef _STL_CASE\r\n\r\ntemplate <class... _Types>\r\nvariant<_Types...>& _As_variant_impl(variant<_Types...>&);\r\ntemplate <class... _Types>\r\nconst variant<_Types...>& _As_variant_impl(const variant<_Types...>&);\r\ntemplate <class... _Types>\r\nvariant<_Types...>&& _As_variant_impl(variant<_Types...>&&);\r\ntemplate <class... _Types>\r\nconst variant<_Types...>&& _As_variant_impl(const variant<_Types...>&&);\r\ntemplate <class _Ty>\r\nusing _As_variant = // Deduce variant specialization from a derived type\r\n    decltype(_STD _As_variant_impl(_STD declval<_Ty>()));\r\n\r\ntemplate <size_t _Size, class _Ret, class _ListOfIndexVectors, class _Callable, class... _Variants>\r\nconstexpr _Ret _Visit_impl(_Callable&& _Obj, _Variants&&... _Args) {\r\n    constexpr int _Strategy = _Size == 1   ? 0\r\n                            : _Size <= 4   ? 1\r\n                            : _Size <= 16  ? 2\r\n                            : _Size <= 64  ? 3\r\n                            : _Size <= 256 ? 4\r\n                                           : -1;\r\n    return _Visit_strategy<_Strategy>::template _Visit2<_Ret, _ListOfIndexVectors>(\r\n        _STD _Variant_visit_index1(0, static_cast<_As_variant<_Variants>&>(_Args)...), static_cast<_Callable&&>(_Obj),\r\n        static_cast<_As_variant<_Variants>&&>(_Args)...);\r\n}\r\n\r\ntemplate <class _Expected, class _Callable, class _ArgList, class... _Variants>\r\nconstexpr bool _Variant_all_visit_results_same = false;\r\n\r\ntemplate <class _Expected, class _Callable, class... _Args>\r\nconstexpr bool _Variant_all_visit_results_same<_Expected, _Callable, _Meta_list<_Args...>> =\r\n    is_same_v<decltype(_STD invoke(_STD declval<_Callable>(), _STD declval<_Args>()...)), _Expected>;\r\n\r\ntemplate <class _Expected, class _Callable, class... _Args, class... _Types, class... _Rest>\r\nconstexpr bool\r\n    _Variant_all_visit_results_same<_Expected, _Callable, _Meta_list<_Args...>, variant<_Types...>&, _Rest...> =\r\n        (_Variant_all_visit_results_same<_Expected, _Callable, _Meta_list<_Args..., _Types&>, _Rest...> && ...);\r\n\r\ntemplate <class _Expected, class _Callable, class... _Args, class... _Types, class... _Rest>\r\nconstexpr bool\r\n    _Variant_all_visit_results_same<_Expected, _Callable, _Meta_list<_Args...>, const variant<_Types...>&, _Rest...> =\r\n        (_Variant_all_visit_results_same<_Expected, _Callable, _Meta_list<_Args..., const _Types&>, _Rest...> && ...);\r\n\r\ntemplate <class _Expected, class _Callable, class... _Args, class... _Types, class... _Rest>\r\nconstexpr bool\r\n    _Variant_all_visit_results_same<_Expected, _Callable, _Meta_list<_Args...>, variant<_Types...>&&, _Rest...> =\r\n        (_Variant_all_visit_results_same<_Expected, _Callable, _Meta_list<_Args..., _Types>, _Rest...> && ...);\r\n\r\ntemplate <class _Expected, class _Callable, class... _Args, class... _Types, class... _Rest>\r\nconstexpr bool\r\n    _Variant_all_visit_results_same<_Expected, _Callable, _Meta_list<_Args...>, const variant<_Types...>&&, _Rest...> =\r\n        (_Variant_all_visit_results_same<_Expected, _Callable, _Meta_list<_Args..., const _Types>, _Rest...> && ...);\r\n\r\n_EXPORT_STD template <class _Callable, class... _Variants, class = void_t<_As_variant<_Variants>...>>\r\nconstexpr _Variant_visit_result_t<_Callable, _As_variant<_Variants>...> visit(_Callable&& _Obj, _Variants&&... _Args) {\r\n    // Invoke _Obj with the contained values of _Args...\r\n    constexpr auto _Size = _Variant_total_states<_Remove_cvref_t<_As_variant<_Variants>>...>;\r\n    using _ListOfIndexLists =\r\n        _Meta_list<_Meta_as_list<make_index_sequence<1 + variant_size_v<_Remove_cvref_t<_As_variant<_Variants>>>>>...>;\r\n    using _ListOfIndexVectors =\r\n        _Meta_transform<_Meta_quote<_Meta_as_integer_sequence>, _Meta_cartesian_product<_ListOfIndexLists>>;\r\n    using _Ret = _Variant_visit_result_t<_Callable, _As_variant<_Variants>...>;\r\n    static_assert(_Variant_all_visit_results_same<_Ret, _Callable, _Meta_list<>, _As_variant<_Variants>...>,\r\n        \"visit() requires the result of all potential invocations to have the same type and value category \"\r\n        \"(N4950 [variant.visit]/5).\");\r\n\r\n    return _STD _Visit_impl<_Size, _Ret, _ListOfIndexVectors>(\r\n        static_cast<_Callable&&>(_Obj), static_cast<_Variants&&>(_Args)...);\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Expected, class _Callable, class _ArgList, class... _Variants>\r\nconstexpr bool _Variant_all_visit_results_convertible = false;\r\n\r\ntemplate <class _Expected, class _Callable, class... _Args>\r\nconstexpr bool _Variant_all_visit_results_convertible<_Expected, _Callable, _Meta_list<_Args...>> =\r\n    _Invoke_convertible<decltype(_STD invoke(_STD declval<_Callable>(), _STD declval<_Args>()...)), _Expected>::value;\r\n\r\ntemplate <class _Expected, class _Callable, class... _Args, class... _Types, class... _Rest>\r\nconstexpr bool\r\n    _Variant_all_visit_results_convertible<_Expected, _Callable, _Meta_list<_Args...>, variant<_Types...>&, _Rest...> =\r\n        (_Variant_all_visit_results_convertible<_Expected, _Callable, _Meta_list<_Args..., _Types&>, _Rest...> && ...);\r\n\r\ntemplate <class _Expected, class _Callable, class... _Args, class... _Types, class... _Rest>\r\nconstexpr bool _Variant_all_visit_results_convertible<_Expected, _Callable, _Meta_list<_Args...>,\r\n    const variant<_Types...>&, _Rest...> =\r\n    (_Variant_all_visit_results_convertible<_Expected, _Callable, _Meta_list<_Args..., const _Types&>, _Rest...>\r\n        && ...);\r\n\r\ntemplate <class _Expected, class _Callable, class... _Args, class... _Types, class... _Rest>\r\nconstexpr bool\r\n    _Variant_all_visit_results_convertible<_Expected, _Callable, _Meta_list<_Args...>, variant<_Types...>&&, _Rest...> =\r\n        (_Variant_all_visit_results_convertible<_Expected, _Callable, _Meta_list<_Args..., _Types>, _Rest...> && ...);\r\n\r\ntemplate <class _Expected, class _Callable, class... _Args, class... _Types, class... _Rest>\r\nconstexpr bool _Variant_all_visit_results_convertible<_Expected, _Callable, _Meta_list<_Args...>,\r\n    const variant<_Types...>&&, _Rest...> =\r\n    (_Variant_all_visit_results_convertible<_Expected, _Callable, _Meta_list<_Args..., const _Types>, _Rest...> && ...);\r\n\r\n_EXPORT_STD template <class _Ret, class _Callable, class... _Variants, class = void_t<_As_variant<_Variants>...>>\r\nconstexpr _Ret visit(_Callable&& _Obj, _Variants&&... _Args) {\r\n    constexpr auto _Size = _Variant_total_states<_Remove_cvref_t<_As_variant<_Variants>>...>;\r\n    using _ListOfIndexLists =\r\n        _Meta_list<_Meta_as_list<make_index_sequence<1 + variant_size_v<_Remove_cvref_t<_As_variant<_Variants>>>>>...>;\r\n    using _ListOfIndexVectors =\r\n        _Meta_transform<_Meta_quote<_Meta_as_integer_sequence>, _Meta_cartesian_product<_ListOfIndexLists>>;\r\n    if constexpr (!is_void_v<_Ret>) {\r\n        static_assert(_Variant_all_visit_results_convertible<_Ret, _Callable, _Meta_list<>, _As_variant<_Variants>...>,\r\n            \"visit<R>() requires the result of all potential invocations to be implicitly convertible to R \"\r\n            \"(N4950 [variant.visit]/5).\");\r\n    }\r\n\r\n    return _STD _Visit_impl<_Size, _Ret, _ListOfIndexVectors>(\r\n        static_cast<_Callable&&>(_Obj), static_cast<_Variants&&>(_Args)...);\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class... _Types,\r\n    enable_if_t<conjunction_v<is_move_constructible<_Types>..., is_swappable<_Types>...>, int> = 0>\r\n_CONSTEXPR20 void swap(variant<_Types...>& _Left, variant<_Types...>& _Right) noexcept(noexcept(_Left.swap(_Right))) {\r\n    _Left.swap(_Right);\r\n}\r\n\r\nstruct _Variant_hash_visitor { // visitation function for hashing variants\r\n    template <class _Ty, size_t _Idx>\r\n    _NODISCARD static size_t operator()(_Tagged<const _Ty&, _Idx> _Obj)\r\n        noexcept(disjunction_v<bool_constant<_Idx == variant_npos>,\r\n            is_nothrow_invocable<hash<_Ty>, const _Ty&>>) { // hash contained value _Obj\r\n        if constexpr (_Idx == variant_npos) { // hash a valueless variant\r\n            return 0;\r\n        } else { // hash the contained value\r\n            return hash<_Ty>{}(_Obj._Val);\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class... _Types>\r\nstruct hash<variant<_Types...>> : _Conditionally_enabled_hash<variant<_Types...>,\r\n                                      conjunction_v<is_default_constructible<hash<remove_const_t<_Types>>>...>> {\r\n    _NODISCARD static size_t _Do_hash(const variant<_Types...>& _Var)\r\n        noexcept(conjunction_v<_Is_nothrow_hashable<remove_const_t<_Types>>...>) {\r\n        // called from the CRTP base to hash _Var iff the hash is enabled\r\n        return _STD _Variant_raw_visit(_Var.index(), _Var._Storage(), _Variant_hash_visitor{});\r\n    }\r\n};\r\n\r\n_STD_END\r\n\r\n#undef _STL_STAMP\r\n#undef _STL_STAMP256\r\n#undef _STL_STAMP64\r\n#undef _STL_STAMP16\r\n#undef _STL_STAMP4\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // ^^^ _HAS_CXX17 ^^^\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _VARIANT_\r\n"
  },
  {
    "path": "stl/inc/vector",
    "content": "// vector standard header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _VECTOR_\r\n#define _VECTOR_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <__msvc_bit_utils.hpp>\r\n#include <__msvc_sanitizer_annotate_container.hpp>\r\n#include <xmemory>\r\n\r\n#if _HAS_CXX17\r\n#include <xpolymorphic_allocator.h>\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\n#include <__msvc_formatter.hpp>\r\n#endif // _HAS_CXX23\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _Myvec>\r\nclass _Vector_const_iterator : public _Iterator_base {\r\npublic:\r\n#if _HAS_CXX20\r\n    using iterator_concept = contiguous_iterator_tag;\r\n#endif // _HAS_CXX20\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = typename _Myvec::value_type;\r\n    using difference_type   = typename _Myvec::difference_type;\r\n    using pointer           = typename _Myvec::const_pointer;\r\n    using reference         = const value_type&;\r\n\r\n    using _Tptr    = typename _Myvec::pointer;\r\n    using _Myvec_t = _Myvec; // helper for expression evaluator\r\n\r\n    _CONSTEXPR20 _Vector_const_iterator() noexcept : _Ptr() {}\r\n\r\n    _CONSTEXPR20 _Vector_const_iterator(_Tptr _Parg, const _Container_base* _Pvector) noexcept : _Ptr(_Parg) {\r\n        this->_Adopt(_Pvector);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reference operator*() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Mycont = static_cast<const _Myvec*>(this->_Getcont());\r\n        _STL_VERIFY(_Ptr, \"can't dereference value-initialized vector iterator\");\r\n        _STL_VERIFY(_Mycont, \"can't dereference invalidated vector iterator\");\r\n        _STL_VERIFY(\r\n            _Mycont->_Myfirst <= _Ptr && _Ptr < _Mycont->_Mylast, \"can't dereference out of range vector iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return *_Ptr;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 pointer operator->() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Mycont = static_cast<const _Myvec*>(this->_Getcont());\r\n        _STL_VERIFY(_Ptr, \"can't dereference value-initialized vector iterator\");\r\n        _STL_VERIFY(_Mycont, \"can't dereference invalidated vector iterator\");\r\n        _STL_VERIFY(\r\n            _Mycont->_Myfirst <= _Ptr && _Ptr < _Mycont->_Mylast, \"can't dereference out of range vector iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return _Ptr;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vector_const_iterator& operator++() noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Mycont = static_cast<const _Myvec*>(this->_Getcont());\r\n        _STL_VERIFY(_Ptr, \"can't increment value-initialized vector iterator\");\r\n        _STL_VERIFY(_Mycont, \"can't increment invalidated vector iterator\");\r\n        _STL_VERIFY(_Ptr < _Mycont->_Mylast, \"can't increment vector iterator past end\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        ++_Ptr;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vector_const_iterator operator++(int) noexcept {\r\n        _Vector_const_iterator _Tmp = *this;\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vector_const_iterator& operator--() noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Mycont = static_cast<const _Myvec*>(this->_Getcont());\r\n        _STL_VERIFY(_Ptr, \"can't decrement value-initialized vector iterator\");\r\n        _STL_VERIFY(_Mycont, \"can't decrement invalidated vector iterator\");\r\n        _STL_VERIFY(_Mycont->_Myfirst < _Ptr, \"can't decrement vector iterator before begin\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        --_Ptr;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vector_const_iterator operator--(int) noexcept {\r\n        _Vector_const_iterator _Tmp = *this;\r\n        --*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR20 void _Verify_offset(const difference_type _Off) const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\n        (void) _Off;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 0 / _ITERATOR_DEBUG_LEVEL != 0 vvv\r\n        const auto _Mycont = static_cast<const _Myvec*>(this->_Getcont());\r\n        _STL_VERIFY(_Off == 0 || _Ptr, \"cannot seek value-initialized vector iterator\");\r\n        _STL_VERIFY(_Off == 0 || _Mycont, \"cannot seek invalidated vector iterator\");\r\n        if (_Off < 0) {\r\n            _STL_VERIFY(_Off >= _Mycont->_Myfirst - _Ptr, \"cannot seek vector iterator before begin\");\r\n        }\r\n\r\n        if (_Off > 0) {\r\n            _STL_VERIFY(_Off <= _Mycont->_Mylast - _Ptr, \"cannot seek vector iterator after end\");\r\n        }\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 0 ^^^\r\n    }\r\n\r\n    _CONSTEXPR20 _Vector_const_iterator& operator+=(const difference_type _Off) noexcept {\r\n        _Verify_offset(_Off);\r\n        _Ptr += _Off;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Vector_const_iterator operator+(const difference_type _Off) const noexcept {\r\n        _Vector_const_iterator _Tmp = *this;\r\n        _Tmp += _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD friend _CONSTEXPR20 _Vector_const_iterator operator+(\r\n        const difference_type _Off, _Vector_const_iterator _Next) noexcept {\r\n        _Next += _Off;\r\n        return _Next;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vector_const_iterator& operator-=(const difference_type _Off) noexcept {\r\n        return *this += -_Off;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Vector_const_iterator operator-(const difference_type _Off) const noexcept {\r\n        _Vector_const_iterator _Tmp = *this;\r\n        _Tmp -= _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 difference_type operator-(const _Vector_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return static_cast<difference_type>(_Ptr - _Right._Ptr);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reference operator[](const difference_type _Off) const noexcept {\r\n        return *(*this + _Off);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 bool operator==(const _Vector_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return _Ptr == _Right._Ptr;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD constexpr strong_ordering operator<=>(const _Vector_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return _STD _Unfancy_maybe_null(_Ptr) <=> _STD _Unfancy_maybe_null(_Right._Ptr);\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD bool operator!=(const _Vector_const_iterator& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n\r\n    _NODISCARD bool operator<(const _Vector_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return _Ptr < _Right._Ptr;\r\n    }\r\n\r\n    _NODISCARD bool operator>(const _Vector_const_iterator& _Right) const noexcept {\r\n        return _Right < *this;\r\n    }\r\n\r\n    _NODISCARD bool operator<=(const _Vector_const_iterator& _Right) const noexcept {\r\n        return !(_Right < *this);\r\n    }\r\n\r\n    _NODISCARD bool operator>=(const _Vector_const_iterator& _Right) const noexcept {\r\n        return !(*this < _Right);\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    _CONSTEXPR20 void _Compat(const _Vector_const_iterator& _Right) const noexcept {\r\n        // test for compatible iterator pair\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\n        (void) _Right;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 0 / _ITERATOR_DEBUG_LEVEL != 0 vvv\r\n        _STL_VERIFY(this->_Getcont() == _Right._Getcont(), \"vector iterators incompatible\");\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 0 ^^^\r\n    }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    friend _CONSTEXPR20 void _Verify_range(\r\n        const _Vector_const_iterator& _First, const _Vector_const_iterator& _Last) noexcept {\r\n        _STL_VERIFY(_First._Getcont() == _Last._Getcont(), \"vector iterators in range are from different containers\");\r\n        _STL_VERIFY(_First._Ptr <= _Last._Ptr, \"vector iterator range transposed\");\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    using _Prevent_inheriting_unwrap = _Vector_const_iterator;\r\n\r\n    _NODISCARD _CONSTEXPR20 const value_type* _Unwrapped() const noexcept {\r\n        return _STD _Unfancy_maybe_null(_Ptr);\r\n    }\r\n\r\n    _CONSTEXPR20 void _Seek_to(const value_type* _It) noexcept {\r\n        _Ptr = _STD _Refancy_maybe_null<_Tptr>(const_cast<value_type*>(_It));\r\n    }\r\n\r\n    _Tptr _Ptr; // pointer to element in vector\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Myvec>\r\nstruct pointer_traits<_Vector_const_iterator<_Myvec>> {\r\n    using pointer         = _Vector_const_iterator<_Myvec>;\r\n    using element_type    = const pointer::value_type;\r\n    using difference_type = pointer::difference_type;\r\n\r\n    _NODISCARD static constexpr element_type* to_address(const pointer _Iter) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        // A value-initialized iterator is in the domain of to_address. An invalidated end iterator for a vector with\r\n        // capacity() of 0 is not. This function cannot distinguish those two cases, so it incorrectly does not diagnose\r\n        // the latter. In practice, this isn't a significant problem since to_address returns nullptr for such an\r\n        // iterator.\r\n        const auto _Mycont = static_cast<const _Myvec*>(_Iter._Getcont());\r\n        if (_Mycont) {\r\n            _STL_VERIFY(_Mycont->_Myfirst <= _Iter._Ptr && _Iter._Ptr <= _Mycont->_Mylast,\r\n                \"can't convert out-of-range vector iterator to pointer\");\r\n        } else {\r\n            _STL_VERIFY(!_Iter._Ptr, \"can't convert invalid vector iterator to pointer\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return _STD to_address(_Iter._Ptr);\r\n    }\r\n};\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Myvec>\r\nclass _Vector_iterator : public _Vector_const_iterator<_Myvec> {\r\npublic:\r\n    using _Mybase = _Vector_const_iterator<_Myvec>;\r\n\r\n#if _HAS_CXX20\r\n    using iterator_concept = contiguous_iterator_tag;\r\n#endif // _HAS_CXX20\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = typename _Myvec::value_type;\r\n    using difference_type   = typename _Myvec::difference_type;\r\n    using pointer           = typename _Myvec::pointer;\r\n    using reference         = value_type&;\r\n\r\n    using _Mybase::_Mybase;\r\n\r\n    _NODISCARD _CONSTEXPR20 reference operator*() const noexcept {\r\n        return const_cast<reference>(_Mybase::operator*());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 pointer operator->() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Mycont = static_cast<const _Myvec*>(this->_Getcont());\r\n        _STL_VERIFY(this->_Ptr, \"can't dereference value-initialized vector iterator\");\r\n        _STL_VERIFY(_Mycont, \"can't dereference invalidated vector iterator\");\r\n        _STL_VERIFY(_Mycont->_Myfirst <= this->_Ptr && this->_Ptr < _Mycont->_Mylast,\r\n            \"can't dereference out of range vector iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return this->_Ptr;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vector_iterator& operator++() noexcept {\r\n        _Mybase::operator++();\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vector_iterator operator++(int) noexcept {\r\n        _Vector_iterator _Tmp = *this;\r\n        _Mybase::operator++();\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vector_iterator& operator--() noexcept {\r\n        _Mybase::operator--();\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vector_iterator operator--(int) noexcept {\r\n        _Vector_iterator _Tmp = *this;\r\n        _Mybase::operator--();\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vector_iterator& operator+=(const difference_type _Off) noexcept {\r\n        _Mybase::operator+=(_Off);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Vector_iterator operator+(const difference_type _Off) const noexcept {\r\n        _Vector_iterator _Tmp = *this;\r\n        _Tmp += _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD friend _CONSTEXPR20 _Vector_iterator operator+(\r\n        const difference_type _Off, _Vector_iterator _Next) noexcept {\r\n        _Next += _Off;\r\n        return _Next;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vector_iterator& operator-=(const difference_type _Off) noexcept {\r\n        _Mybase::operator-=(_Off);\r\n        return *this;\r\n    }\r\n\r\n    using _Mybase::operator-;\r\n\r\n    _NODISCARD _CONSTEXPR20 _Vector_iterator operator-(const difference_type _Off) const noexcept {\r\n        _Vector_iterator _Tmp = *this;\r\n        _Tmp -= _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reference operator[](const difference_type _Off) const noexcept {\r\n        return const_cast<reference>(_Mybase::operator[](_Off));\r\n    }\r\n\r\n    using _Prevent_inheriting_unwrap = _Vector_iterator;\r\n\r\n    _NODISCARD _CONSTEXPR20 value_type* _Unwrapped() const noexcept {\r\n        return _STD _Unfancy_maybe_null(this->_Ptr);\r\n    }\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Myvec>\r\nstruct pointer_traits<_Vector_iterator<_Myvec>> {\r\n    using pointer         = _Vector_iterator<_Myvec>;\r\n    using element_type    = pointer::value_type;\r\n    using difference_type = pointer::difference_type;\r\n\r\n    _NODISCARD static constexpr element_type* to_address(const pointer _Iter) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        // A value-initialized iterator is in the domain of to_address. An invalidated end iterator for a vector with\r\n        // capacity() of 0 is not. This function cannot distinguish those two cases, so it incorrectly does not diagnose\r\n        // the latter. In practice, this isn't a significant problem since to_address returns nullptr for such an\r\n        // iterator.\r\n        const auto _Mycont = static_cast<const _Myvec*>(_Iter._Getcont());\r\n        if (_Mycont) {\r\n            _STL_VERIFY(_Mycont->_Myfirst <= _Iter._Ptr && _Iter._Ptr <= _Mycont->_Mylast,\r\n                \"can't convert out-of-range vector iterator to pointer\");\r\n        } else {\r\n            _STL_VERIFY(!_Iter._Ptr, \"can't convert invalid vector iterator to pointer\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return _STD to_address(_Iter._Ptr);\r\n    }\r\n};\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Value_type, class _Size_type, class _Difference_type, class _Pointer, class _Const_pointer>\r\nstruct _Vec_iter_types {\r\n    using value_type      = _Value_type;\r\n    using size_type       = _Size_type;\r\n    using difference_type = _Difference_type;\r\n    using pointer         = _Pointer;\r\n    using const_pointer   = _Const_pointer;\r\n};\r\n\r\nstruct _Value_init_tag { // tag to request value-initialization\r\n    explicit _Value_init_tag() = default;\r\n};\r\n\r\ntemplate <class _Val_types>\r\nclass _Vector_val : public _Container_base {\r\npublic:\r\n    using value_type      = typename _Val_types::value_type;\r\n    using size_type       = typename _Val_types::size_type;\r\n    using difference_type = typename _Val_types::difference_type;\r\n    using pointer         = typename _Val_types::pointer;\r\n    using const_pointer   = typename _Val_types::const_pointer;\r\n    using reference       = value_type&;\r\n    using const_reference = const value_type&;\r\n\r\n    _CONSTEXPR20 _Vector_val() noexcept : _Myfirst(), _Mylast(), _Myend() {}\r\n\r\n    _CONSTEXPR20 _Vector_val(pointer _First, pointer _Last, pointer _End) noexcept\r\n        : _Myfirst(_First), _Mylast(_Last), _Myend(_End) {}\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n    _CONSTEXPR20 ~_Vector_val() noexcept {\r\n        if constexpr (is_pointer_v<pointer>) {\r\n            if (!_STD _Is_constant_evaluated()) {\r\n                const auto _Tombstone{reinterpret_cast<pointer>(_MSVC_STL_UINTPTR_TOMBSTONE_VALUE)};\r\n                _Myfirst = _Tombstone;\r\n                _Mylast  = _Tombstone;\r\n                _Myend   = _Tombstone;\r\n            }\r\n        }\r\n    }\r\n#endif // _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n\r\n    _CONSTEXPR20 void _Swap_val(_Vector_val& _Right) noexcept {\r\n        this->_Swap_proxy_and_iterators(_Right);\r\n        swap(_Myfirst, _Right._Myfirst); // intentional ADL\r\n        swap(_Mylast, _Right._Mylast); // intentional ADL\r\n        swap(_Myend, _Right._Myend); // intentional ADL\r\n    }\r\n\r\n    _CONSTEXPR20 void _Take_contents(_Vector_val& _Right) noexcept {\r\n        this->_Swap_proxy_and_iterators(_Right);\r\n        _Myfirst = _Right._Myfirst;\r\n        _Mylast  = _Right._Mylast;\r\n        _Myend   = _Right._Myend;\r\n\r\n        _Right._Myfirst = nullptr;\r\n        _Right._Mylast  = nullptr;\r\n        _Right._Myend   = nullptr;\r\n    }\r\n\r\n    pointer _Myfirst; // pointer to beginning of array\r\n    pointer _Mylast; // pointer to current end of sequence\r\n    pointer _Myend; // pointer to end of array\r\n};\r\n\r\ntemplate <class _Alloc>\r\nstruct _NODISCARD _Allocation_guard {\r\n    _Alloc& _Al;\r\n    _Alloc_ptr_t<_Alloc> _Ptr;\r\n    _Alloc_size_t<_Alloc> _Size;\r\n\r\n    _Allocation_guard& operator=(const _Allocation_guard&) = delete;\r\n    _Allocation_guard& operator=(_Allocation_guard&&)      = delete;\r\n\r\n    _CONSTEXPR20 ~_Allocation_guard() noexcept {\r\n        if (_Ptr) {\r\n            _Al.deallocate(_Ptr, _Size);\r\n        }\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc = allocator<_Ty>>\r\nclass vector { // varying size array of values\r\nprivate:\r\n    template <class>\r\n    friend class _Vb_val;\r\n    friend _Tidy_guard<vector>;\r\n\r\n    using _Alty        = _Rebind_alloc_t<_Alloc, _Ty>;\r\n    using _Alty_traits = allocator_traits<_Alty>;\r\n\r\npublic:\r\n    static_assert(!_ENFORCE_MATCHING_ALLOCATORS || is_same_v<_Ty, typename _Alloc::value_type>,\r\n        _MISMATCHED_ALLOCATOR_MESSAGE(\"vector<T, Allocator>\", \"T\"));\r\n    static_assert(is_object_v<_Ty>, \"The C++ Standard forbids containers of non-object types \"\r\n                                    \"because of [container.requirements].\");\r\n\r\n    using value_type      = _Ty;\r\n    using allocator_type  = _Alloc;\r\n    using pointer         = typename _Alty_traits::pointer;\r\n    using const_pointer   = typename _Alty_traits::const_pointer;\r\n    using reference       = _Ty&;\r\n    using const_reference = const _Ty&;\r\n    using size_type       = typename _Alty_traits::size_type;\r\n    using difference_type = typename _Alty_traits::difference_type;\r\n\r\nprivate:\r\n#ifdef _INSERT_VECTOR_ANNOTATION\r\n    _CONSTEXPR20 void _Create_annotation() const noexcept {\r\n        // Annotates the shadow memory of the valid range\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _Apply_annotation(_My_data._Myfirst, _My_data._Myend, _My_data._Myend, _My_data._Mylast);\r\n    }\r\n\r\n    _CONSTEXPR20 void _Remove_annotation() const noexcept {\r\n        // Removes the shadow memory annotation of the range\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _Apply_annotation(_My_data._Myfirst, _My_data._Myend, _My_data._Mylast, _My_data._Myend);\r\n    }\r\n\r\n    _CONSTEXPR20 void _Modify_annotation(const difference_type _Count) const noexcept {\r\n        // Extends/shrinks the annotated range by _Count\r\n        if (_Count == 0) { // nothing to do\r\n            // This also avoids calling _Apply_annotation() with null pointers\r\n            // when the vector has zero capacity, see GH-2464.\r\n            return;\r\n        }\r\n\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _Apply_annotation(_My_data._Myfirst, _My_data._Myend, _My_data._Mylast, _My_data._Mylast + _Count);\r\n    }\r\n\r\n    static _CONSTEXPR20 void _Apply_annotation(\r\n        pointer _First_, pointer _End_, pointer _Old_last_, pointer _New_last_) noexcept {\r\n        _STL_INTERNAL_CHECK(_First_ != nullptr);\r\n        _STL_INTERNAL_CHECK(_End_ != nullptr);\r\n        _STL_INTERNAL_CHECK(_Old_last_ != nullptr);\r\n        _STL_INTERNAL_CHECK(_New_last_ != nullptr);\r\n\r\n        if constexpr (!_Disable_ASan_container_annotations_for_allocator<allocator_type>) {\r\n#if _HAS_CXX20\r\n            if (_STD is_constant_evaluated()) {\r\n                return;\r\n            }\r\n#endif // _HAS_CXX20\r\n\r\n            if (!_Asan_vector_should_annotate) {\r\n                return;\r\n            }\r\n\r\n            const void* const _First    = _STD _Unfancy(_First_);\r\n            const void* const _End      = _STD _Unfancy(_End_);\r\n            const void* const _Old_last = _STD _Unfancy(_Old_last_);\r\n            const void* const _New_last = _STD _Unfancy(_New_last_);\r\n            if constexpr ((_Container_allocation_minimum_asan_alignment<vector>) >= _Asan_granularity) {\r\n                // old state:\r\n                //   [_First, _Old_last) valid\r\n                //   [_Old_last, _End) poison\r\n                // new state:\r\n                //   [_First, _New_last) valid\r\n                //   [_New_last, asan_aligned_after(_End)) poison\r\n                _CSTD __sanitizer_annotate_contiguous_container(\r\n                    _First, _STD _Get_asan_aligned_after(_End), _Old_last, _New_last);\r\n            } else {\r\n                const auto _Aligned = _STD _Get_asan_aligned_first_end(_First, _End);\r\n                if (_Aligned._First == _Aligned._End) {\r\n                    // The buffer does not end at least one shadow memory section; nothing to do.\r\n                    return;\r\n                }\r\n\r\n                const void* const _Old_fixed = _Aligned._Clamp_to_end(_Old_last);\r\n                const void* const _New_fixed = _Aligned._Clamp_to_end(_New_last);\r\n\r\n                // old state:\r\n                //   [_Aligned._First, _Old_fixed) valid\r\n                //   [_Old_fixed, _Aligned._End) poison\r\n                //   [_Aligned._End, _End) valid\r\n                // new state:\r\n                //   [_Aligned._First, _New_fixed) valid\r\n                //   [_New_fixed, _Aligned._End) poison\r\n                //   [_Aligned._End, _End) valid\r\n                _CSTD __sanitizer_annotate_contiguous_container(_Aligned._First, _Aligned._End, _Old_fixed, _New_fixed);\r\n            }\r\n        }\r\n    }\r\n\r\n    class _NODISCARD _Asan_extend_guard {\r\n    public:\r\n        _Asan_extend_guard(const _Asan_extend_guard&)            = delete;\r\n        _Asan_extend_guard& operator=(const _Asan_extend_guard&) = delete;\r\n\r\n        constexpr explicit _Asan_extend_guard(vector* _Myvec_, size_type _Target_size_) noexcept\r\n            : _Myvec(_Myvec_), _Target_size(_Target_size_) {\r\n            _STL_INTERNAL_CHECK(_Myvec != nullptr);\r\n            auto& _My_data = _Myvec->_Mypair._Myval2;\r\n            _Apply_annotation(_My_data._Myfirst, _My_data._Myend, _My_data._Mylast, _My_data._Myfirst + _Target_size);\r\n        }\r\n\r\n        _CONSTEXPR20 ~_Asan_extend_guard() {\r\n            if (!_Myvec) { // Operation succeeded, no modification to the shadow memory required.\r\n                return;\r\n            }\r\n\r\n            // Shrinks the shadow memory to the current size of the vector.\r\n            auto& _My_data = _Myvec->_Mypair._Myval2;\r\n            _Apply_annotation(_My_data._Myfirst, _My_data._Myend, _My_data._Myfirst + _Target_size, _My_data._Mylast);\r\n        }\r\n\r\n        _CONSTEXPR20 void _Release() noexcept {\r\n            _Myvec = nullptr;\r\n        }\r\n\r\n    private:\r\n        vector* _Myvec;\r\n        size_type _Target_size;\r\n    };\r\n\r\n    class _NODISCARD _Asan_create_guard {\r\n    public:\r\n        _Asan_create_guard(const _Asan_create_guard&)            = delete;\r\n        _Asan_create_guard& operator=(const _Asan_create_guard&) = delete;\r\n\r\n        constexpr explicit _Asan_create_guard(const vector& _Myvec_) noexcept : _Myvec(_Myvec_) {}\r\n\r\n        _CONSTEXPR20 ~_Asan_create_guard() {\r\n            _Myvec._Create_annotation();\r\n        }\r\n\r\n    private:\r\n        const vector& _Myvec;\r\n    };\r\n\r\n#define _ASAN_VECTOR_MODIFY(n)       _Modify_annotation((n))\r\n#define _ASAN_VECTOR_REMOVE          _Remove_annotation()\r\n#define _ASAN_VECTOR_CREATE          _Create_annotation()\r\n#define _ASAN_VECTOR_CREATE_GUARD    _Asan_create_guard _Annotator(*this)\r\n#define _ASAN_VECTOR_EXTEND_GUARD(n) _Asan_extend_guard _Annotator(this, (n))\r\n#define _ASAN_VECTOR_RELEASE_GUARD   _Annotator._Release()\r\n#else // ^^^ _INSERT_VECTOR_ANNOTATION / !_INSERT_VECTOR_ANNOTATION vvv\r\n#define _ASAN_VECTOR_MODIFY(n)\r\n#define _ASAN_VECTOR_REMOVE\r\n#define _ASAN_VECTOR_CREATE\r\n#define _ASAN_VECTOR_CREATE_GUARD\r\n#define _ASAN_VECTOR_EXTEND_GUARD(n)\r\n#define _ASAN_VECTOR_RELEASE_GUARD\r\n#endif // ^^^ !_INSERT_VECTOR_ANNOTATION ^^^\r\n\r\n    using _Scary_val = _Vector_val<conditional_t<_Is_simple_alloc_v<_Alty>, _Simple_types<_Ty>,\r\n        _Vec_iter_types<_Ty, size_type, difference_type, pointer, const_pointer>>>;\r\n\r\n    struct _NODISCARD _Reallocation_guard2 {\r\n        _Alty& _Al;\r\n        pointer _New_begin;\r\n        size_type _New_capacity;\r\n        pointer _Constructed_first;\r\n        pointer _Constructed_last;\r\n\r\n        _Reallocation_guard2& operator=(const _Reallocation_guard2&) = delete;\r\n        _Reallocation_guard2& operator=(_Reallocation_guard2&&)      = delete;\r\n\r\n        _CONSTEXPR20 ~_Reallocation_guard2() noexcept {\r\n            if (_New_begin != nullptr) {\r\n                _STD _Destroy_range(_Constructed_first, _Constructed_last, _Al);\r\n                _Al.deallocate(_New_begin, _New_capacity);\r\n            }\r\n        }\r\n    };\r\n\r\n    struct _NODISCARD _Vaporization_guard { // vaporize the detached piece\r\n        vector* _Target;\r\n        pointer _Vaporized_first;\r\n        pointer _Vaporized_last;\r\n        pointer _Destroyed_first;\r\n\r\n        _Vaporization_guard& operator=(const _Vaporization_guard&) = delete;\r\n        _Vaporization_guard& operator=(_Vaporization_guard&&)      = delete;\r\n\r\n        ~_Vaporization_guard() noexcept {\r\n            if (_Target != nullptr) {\r\n                auto& _Al     = _Target->_Getal();\r\n                auto& _Mylast = _Target->_Mypair._Myval2._Mylast;\r\n\r\n                _Target->_Orphan_range(_Vaporized_first, _Vaporized_last);\r\n                _STD _Destroy_range(_Destroyed_first, _Mylast, _Al);\r\n                _Mylast = _Vaporized_first;\r\n            }\r\n        }\r\n    };\r\n\r\npublic:\r\n    using iterator               = _Vector_iterator<_Scary_val>;\r\n    using const_iterator         = _Vector_const_iterator<_Scary_val>;\r\n    using reverse_iterator       = _STD reverse_iterator<iterator>;\r\n    using const_reverse_iterator = _STD reverse_iterator<const_iterator>;\r\n\r\n    _CONSTEXPR20 vector() noexcept(is_nothrow_default_constructible_v<_Alty>) : _Mypair(_Zero_then_variadic_args_t{}) {\r\n        _Mypair._Myval2._Alloc_proxy(_STD _Get_proxy_allocator(_Getal()));\r\n    }\r\n\r\n    _CONSTEXPR20 explicit vector(const _Alloc& _Al) noexcept : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Mypair._Myval2._Alloc_proxy(_STD _Get_proxy_allocator(_Getal()));\r\n    }\r\n\r\n    _CONSTEXPR20 explicit vector(_CRT_GUARDOVERFLOW const size_type _Count, const _Alloc& _Al = _Alloc())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Construct_n(_Count);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _Alloc2 = _Alloc, enable_if_t<_Is_allocator<_Alloc2>::value, int> = 0>\r\n#endif // _HAS_CXX17\r\n    _CONSTEXPR20 vector(_CRT_GUARDOVERFLOW const size_type _Count, const _Ty& _Val, const _Alloc& _Al = _Alloc())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Construct_n(_Count, _Val);\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    _CONSTEXPR20 vector(_Iter _First, _Iter _Last, const _Alloc& _Al = _Alloc())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        auto _UFirst = _STD _Get_unwrapped(_First);\r\n        auto _ULast  = _STD _Get_unwrapped(_Last);\r\n        if constexpr (_Is_cpp17_fwd_iter_v<_Iter>) {\r\n            const auto _Length = static_cast<size_t>(_STD distance(_UFirst, _ULast));\r\n            const auto _Count  = _STD _Convert_size<size_type>(_Length);\r\n            _Construct_n(_Count, _STD move(_UFirst), _STD move(_ULast));\r\n#if _HAS_CXX20\r\n        } else if constexpr (forward_iterator<_Iter>) {\r\n            const auto _Length = _STD _To_unsigned_like(_RANGES distance(_UFirst, _ULast));\r\n            const auto _Count  = _STD _Convert_size<size_type>(_Length);\r\n            _Construct_n(_Count, _STD move(_UFirst), _STD move(_ULast));\r\n#endif // _HAS_CXX20\r\n        } else {\r\n            auto _Alproxy = _STD _Get_proxy_allocator(_Getal());\r\n            _Container_proxy_ptr<_Alty> _Proxy(_Alproxy, _Mypair._Myval2);\r\n            _Tidy_guard<vector> _Guard{this};\r\n\r\n            _Append_uncounted_range(_STD move(_UFirst), _STD move(_ULast));\r\n\r\n            _Guard._Target = nullptr;\r\n            _Proxy._Release();\r\n        }\r\n    }\r\n\r\n    _CONSTEXPR20 vector(initializer_list<_Ty> _Ilist, const _Alloc& _Al = _Alloc())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Construct_n(_Convert_size<size_type>(_Ilist.size()), _Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    constexpr vector(from_range_t, _Rng&& _Range, const _Alloc& _Al = _Alloc())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        if constexpr (_RANGES sized_range<_Rng> || _RANGES forward_range<_Rng>) {\r\n            const auto _Length = _To_unsigned_like(_RANGES distance(_Range));\r\n            const auto _Count  = _Convert_size<size_type>(_Length);\r\n            _Construct_n(_Count, _RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n        } else {\r\n            auto _Alproxy = _STD _Get_proxy_allocator(_Getal());\r\n            _Container_proxy_ptr<_Alty> _Proxy(_Alproxy, _Mypair._Myval2);\r\n            _Tidy_guard<vector> _Guard{this};\r\n\r\n            _Append_uncounted_range(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n\r\n            _Guard._Target = nullptr;\r\n            _Proxy._Release();\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 vector(const vector& _Right)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Alty_traits::select_on_container_copy_construction(_Right._Getal())) {\r\n        const auto& _Right_data = _Right._Mypair._Myval2;\r\n        const auto _Count       = static_cast<size_type>(_Right_data._Mylast - _Right_data._Myfirst);\r\n        _Construct_n(_Count, _Right_data._Myfirst, _Right_data._Mylast);\r\n    }\r\n\r\n    _CONSTEXPR20 vector(const vector& _Right, const _Identity_t<_Alloc>& _Al)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        const auto& _Right_data = _Right._Mypair._Myval2;\r\n        const auto _Count       = static_cast<size_type>(_Right_data._Mylast - _Right_data._Myfirst);\r\n        _Construct_n(_Count, _Right_data._Myfirst, _Right_data._Mylast);\r\n    }\r\n\r\n    _CONSTEXPR20 vector(vector&& _Right) noexcept\r\n        : _Mypair(_One_then_variadic_args_t{}, _STD move(_Right._Getal()),\r\n              _STD exchange(_Right._Mypair._Myval2._Myfirst, nullptr),\r\n              _STD exchange(_Right._Mypair._Myval2._Mylast, nullptr),\r\n              _STD exchange(_Right._Mypair._Myval2._Myend, nullptr)) {\r\n        _Mypair._Myval2._Alloc_proxy(_STD _Get_proxy_allocator(_Getal()));\r\n        _Mypair._Myval2._Swap_proxy_and_iterators(_Right._Mypair._Myval2);\r\n    }\r\n\r\n    _CONSTEXPR20 vector(vector&& _Right, const _Identity_t<_Alloc>& _Al_)\r\n        noexcept(_Alty_traits::is_always_equal::value) // strengthened\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al_) {\r\n        _Alty& _Al        = _Getal();\r\n        auto _Alproxy     = _STD _Get_proxy_allocator(_Al);\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        auto& _Right_data = _Right._Mypair._Myval2;\r\n        _Container_proxy_ptr<_Alty> _Proxy(_Alproxy, _My_data);\r\n\r\n        if constexpr (!_Alty_traits::is_always_equal::value) {\r\n            if (_Al != _Right._Getal()) {\r\n                const auto _Count = static_cast<size_type>(_Right_data._Mylast - _Right_data._Myfirst);\r\n                if (_Count != 0) {\r\n                    _Buy_raw(_Count);\r\n                    _Tidy_guard<vector> _Guard{this};\r\n                    _My_data._Mylast =\r\n                        _Uninitialized_move(_Right_data._Myfirst, _Right_data._Mylast, _My_data._Myfirst, _Al);\r\n\r\n                    _ASAN_VECTOR_CREATE;\r\n                    _Guard._Target = nullptr;\r\n                }\r\n                _Proxy._Release();\r\n                return;\r\n            }\r\n        }\r\n\r\n        _My_data._Take_contents(_Right_data);\r\n        _Proxy._Release();\r\n    }\r\n\r\n    _CONSTEXPR20 vector& operator=(vector&& _Right)\r\n        noexcept(_Choose_pocma_v<_Alty> != _Pocma_values::_No_propagate_allocators) {\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n        _Alty& _Al                = _Getal();\r\n        _Alty& _Right_al          = _Right._Getal();\r\n        constexpr auto _Pocma_val = _Choose_pocma_v<_Alty>;\r\n        if constexpr (_Pocma_val == _Pocma_values::_No_propagate_allocators) {\r\n            if (_Al != _Right_al) {\r\n                _Move_assign_unequal_alloc(_Right);\r\n                return *this;\r\n            }\r\n        }\r\n\r\n        _Tidy();\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (_Pocma_val == _Pocma_values::_Propagate_allocators) {\r\n            if (_Al != _Right_al) {\r\n                // intentionally slams into noexcept on OOM, TRANSITION, VSO-466800\r\n                _Mypair._Myval2._Reload_proxy(_STD _Get_proxy_allocator(_Al), _STD _Get_proxy_allocator(_Right_al));\r\n            }\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        _Pocma(_Al, _Right_al);\r\n        _Mypair._Myval2._Take_contents(_Right._Mypair._Myval2);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 ~vector() noexcept {\r\n        _Tidy();\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        auto _Alproxy = _STD _Get_proxy_allocator(_Getal());\r\n        _Delete_plain_internal(_Alproxy, _STD exchange(_Mypair._Myval2._Myproxy, nullptr));\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\nprivate:\r\n    template <class... _Valty>\r\n    _CONSTEXPR20 _Ty& _Emplace_one_at_back(_Valty&&... _Val) {\r\n        // insert by perfectly forwarding into element at end, provide strong guarantee\r\n        auto& _My_data   = _Mypair._Myval2;\r\n        pointer& _Mylast = _My_data._Mylast;\r\n\r\n        if (_Mylast != _My_data._Myend) {\r\n            return _Emplace_back_with_unused_capacity(_STD forward<_Valty>(_Val)...);\r\n        }\r\n\r\n        return *_Emplace_reallocate(_Mylast, _STD forward<_Valty>(_Val)...);\r\n    }\r\n\r\n    template <class... _Valty>\r\n    _CONSTEXPR20 _Ty& _Emplace_back_with_unused_capacity(_Valty&&... _Val) {\r\n        // insert by perfectly forwarding into element at end, provide strong guarantee\r\n        auto& _My_data   = _Mypair._Myval2;\r\n        pointer& _Mylast = _My_data._Mylast;\r\n        _STL_INTERNAL_CHECK(_Mylast != _My_data._Myend); // check that we have unused capacity\r\n        if constexpr (conjunction_v<is_nothrow_constructible<_Ty, _Valty...>,\r\n                          _Uses_default_construct<_Alloc, _Ty*, _Valty...>>) {\r\n            _ASAN_VECTOR_MODIFY(1);\r\n            _STD _Construct_in_place(*_Mylast, _STD forward<_Valty>(_Val)...);\r\n        } else {\r\n            _ASAN_VECTOR_EXTEND_GUARD(static_cast<size_type>(_Mylast - _My_data._Myfirst) + 1);\r\n            _Alty_traits::construct(_Getal(), _Unfancy(_Mylast), _STD forward<_Valty>(_Val)...);\r\n            _ASAN_VECTOR_RELEASE_GUARD;\r\n        }\r\n\r\n        _Orphan_range(_Mylast, _Mylast);\r\n        _Ty& _Result = *_Mylast;\r\n        ++_Mylast;\r\n\r\n        return _Result;\r\n    }\r\n\r\n    template <class... _Valty>\r\n    _CONSTEXPR20 pointer _Emplace_reallocate(const pointer _Whereptr, _Valty&&... _Val) {\r\n        // reallocate and insert by perfectly forwarding _Val at _Whereptr\r\n        _Alty& _Al        = _Getal();\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        pointer& _Myfirst = _My_data._Myfirst;\r\n        pointer& _Mylast  = _My_data._Mylast;\r\n\r\n        _STL_INTERNAL_CHECK(_Mylast == _My_data._Myend); // check that we have no unused capacity\r\n\r\n        const auto _Whereoff = _Whereptr - _Myfirst;\r\n        const auto _Oldsize  = static_cast<size_type>(_Mylast - _Myfirst);\r\n\r\n        if (_Oldsize == max_size()) {\r\n            _Xlength();\r\n        }\r\n\r\n        const size_type _Newsize = _Oldsize + 1;\r\n        size_type _Newcapacity   = _Calculate_growth(_Newsize);\r\n\r\n        const pointer _Newvec           = _STD _Allocate_at_least_helper(_Al, _Newcapacity);\r\n        const pointer _Constructed_last = _Newvec + static_cast<_Iter_diff_t<pointer>>(_Whereoff + 1);\r\n\r\n        _Reallocation_guard2 _Guard{_Al, _Newvec, _Newcapacity, _Constructed_last, _Constructed_last};\r\n        auto& _Constructed_first = _Guard._Constructed_first;\r\n\r\n        _Alty_traits::construct(_Al, _STD _Unfancy(_Newvec + _Whereoff), _STD forward<_Valty>(_Val)...);\r\n        _Constructed_first = _Newvec + _Whereoff;\r\n\r\n        if (_Whereptr == _Mylast) { // at back, provide strong guarantee\r\n            if constexpr (is_nothrow_move_constructible_v<_Ty> || !is_copy_constructible_v<_Ty>) {\r\n                _STD _Uninitialized_move(_Myfirst, _Mylast, _Newvec, _Al);\r\n            } else {\r\n                _STD _Uninitialized_copy(_Myfirst, _Mylast, _Newvec, _Al);\r\n            }\r\n        } else { // provide basic guarantee\r\n            _STD _Uninitialized_move(_Myfirst, _Whereptr, _Newvec, _Al);\r\n            _Constructed_first = _Newvec;\r\n            _STD _Uninitialized_move(\r\n                _Whereptr, _Mylast, _Newvec + static_cast<_Iter_diff_t<pointer>>(_Whereoff + 1), _Al);\r\n        }\r\n\r\n        _Guard._New_begin = nullptr;\r\n        _Change_array(_Newvec, _Newsize, _Newcapacity);\r\n        return _Newvec + _Whereoff;\r\n    }\r\n\r\npublic:\r\n    template <class... _Valty>\r\n    _CONSTEXPR20 _CONTAINER_EMPLACE_RETURN emplace_back(_Valty&&... _Val) {\r\n        // insert by perfectly forwarding into element at end, provide strong guarantee\r\n        _Ty& _Result = _Emplace_one_at_back(_STD forward<_Valty>(_Val)...);\r\n#if _HAS_CXX17\r\n        return _Result;\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n        (void) _Result;\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n    }\r\n\r\n    _CONSTEXPR20 void push_back(const _Ty& _Val) { // insert element at end, provide strong guarantee\r\n        _Emplace_one_at_back(_Val);\r\n    }\r\n\r\n    _CONSTEXPR20 void push_back(_Ty&& _Val) {\r\n        // insert by moving into element at end, provide strong guarantee\r\n        _Emplace_one_at_back(_STD move(_Val));\r\n    }\r\n\r\nprivate:\r\n    template <class _Iter, class _Sent>\r\n    _CONSTEXPR20 void _Append_uncounted_range(_Iter _First, const _Sent _Last) {\r\n        // insert range [_First, _Last) at end\r\n\r\n        // For one-at-back, provide strong guarantee.\r\n        // Otherwise, provide basic guarantee (despite N4950 [vector.modifiers]/2).\r\n        // Performance note: except for one-at-back, _Emplace_one_at_back()'s strong guarantee is unnecessary here.\r\n\r\n        for (; _First != _Last; ++_First) {\r\n            _Emplace_one_at_back(*_First);\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _Iter>\r\n    _CONSTEXPR20 void _Append_counted_range(_Iter _First, const size_type _Count) {\r\n        // insert counted range _First + [0, _Count) at end\r\n        auto& _Al        = _Getal();\r\n        auto& _My_data   = _Mypair._Myval2;\r\n        pointer& _Mylast = _My_data._Mylast;\r\n\r\n        const pointer _Oldfirst     = _My_data._Myfirst;\r\n        const pointer _Oldlast      = _Mylast;\r\n        const auto _Unused_capacity = static_cast<size_type>(_My_data._Myend - _Oldlast);\r\n\r\n        if (_Count == 0) { // nothing to do, avoid invalidating iterators\r\n        } else if (_Count > _Unused_capacity) { // reallocate\r\n            const auto _Oldsize = static_cast<size_type>(_Oldlast - _Oldfirst);\r\n\r\n            if (_Count > max_size() - _Oldsize) {\r\n                _Xlength();\r\n            }\r\n\r\n            const size_type _Newsize = _Oldsize + _Count;\r\n            size_type _Newcapacity   = _Calculate_growth(_Newsize);\r\n\r\n            const pointer _Newvec           = _Allocate_at_least_helper(_Al, _Newcapacity);\r\n            const pointer _Constructed_last = _Newvec + _Oldsize + _Count;\r\n\r\n            _Reallocation_guard2 _Guard{_Al, _Newvec, _Newcapacity, _Constructed_last, _Constructed_last};\r\n            auto& _Constructed_first = _Guard._Constructed_first;\r\n\r\n            _Uninitialized_copy_n(_STD move(_First), _Count, _Newvec + _Oldsize, _Al);\r\n            _Constructed_first = _Newvec + _Oldsize;\r\n\r\n            if (_Count == 1) { // one at back, provide strong guarantee\r\n                if constexpr (is_nothrow_move_constructible_v<_Ty> || !is_copy_constructible_v<_Ty>) {\r\n                    _Uninitialized_move(_Oldfirst, _Oldlast, _Newvec, _Al);\r\n                } else {\r\n                    _Uninitialized_copy(_Oldfirst, _Oldlast, _Newvec, _Al);\r\n                }\r\n            } else { // provide basic guarantee\r\n                _Uninitialized_move(_Oldfirst, _Oldlast, _Newvec, _Al);\r\n            }\r\n\r\n            _Guard._New_begin = nullptr;\r\n            _Change_array(_Newvec, _Newsize, _Newcapacity);\r\n        } else { // Provide the strong guarantee.\r\n                 // Performance note: except for one-at-back, the strong guarantee is unnecessary here.\r\n\r\n            _ASAN_VECTOR_EXTEND_GUARD(static_cast<size_type>(_Oldlast - _Oldfirst) + _Count);\r\n            _Mylast = _Uninitialized_copy_n(_STD move(_First), _Count, _Oldlast, _Al);\r\n            _ASAN_VECTOR_RELEASE_GUARD;\r\n\r\n            _Orphan_range(_Oldlast, _Oldlast);\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\npublic:\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    constexpr void append_range(_Rng&& _Range) {\r\n        if constexpr (_RANGES forward_range<_Rng> || _RANGES sized_range<_Rng>) {\r\n            const auto _Length = _To_unsigned_like(_RANGES distance(_Range));\r\n            const auto _Count  = _Convert_size<size_type>(_Length);\r\n            _Append_counted_range(_RANGES _Ubegin(_Range), _Count);\r\n        } else {\r\n            _Append_uncounted_range(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    template <class... _Valty>\r\n    _CONSTEXPR20 iterator emplace(const_iterator _Where, _Valty&&... _Val) {\r\n        // insert by perfectly forwarding _Val at _Where\r\n        const pointer _Whereptr = _Where._Ptr;\r\n        auto& _My_data          = _Mypair._Myval2;\r\n        const pointer _Oldlast  = _My_data._Mylast;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(\r\n            _Where._Getcont() == _STD addressof(_My_data) && _Whereptr >= _My_data._Myfirst && _Oldlast >= _Whereptr,\r\n            \"vector emplace iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        if (_Oldlast != _My_data._Myend) {\r\n            if (_Whereptr == _Oldlast) { // at back, provide strong guarantee\r\n                _Emplace_back_with_unused_capacity(_STD forward<_Valty>(_Val)...);\r\n            } else {\r\n                auto& _Al = _Getal();\r\n                _Alloc_temporary2<_Alty> _Obj(_Al, _STD forward<_Valty>(_Val)...); // handle aliasing\r\n                // after constructing _Obj, provide basic guarantee\r\n                _Orphan_range(_Whereptr, _Oldlast);\r\n                _ASAN_VECTOR_EXTEND_GUARD(static_cast<size_type>(_Oldlast - _My_data._Myfirst) + 1);\r\n                _Alty_traits::construct(_Al, _Unfancy(_Oldlast), _STD move(_Oldlast[-1]));\r\n                _ASAN_VECTOR_RELEASE_GUARD;\r\n                ++_My_data._Mylast;\r\n                _Move_backward_unchecked(_Whereptr, _Oldlast - 1, _Oldlast);\r\n                *_Whereptr = _STD move(_Obj._Get_value());\r\n            }\r\n\r\n            return _Make_iterator(_Whereptr);\r\n        }\r\n\r\n        return _Make_iterator(_Emplace_reallocate(_Whereptr, _STD forward<_Valty>(_Val)...));\r\n    }\r\n\r\n    _CONSTEXPR20 iterator insert(const_iterator _Where, const _Ty& _Val) { // insert _Val at _Where\r\n        return emplace(_Where, _Val);\r\n    }\r\n\r\n    _CONSTEXPR20 iterator insert(const_iterator _Where, _Ty&& _Val) { // insert by moving _Val at _Where\r\n        return emplace(_Where, _STD move(_Val));\r\n    }\r\n\r\n    _CONSTEXPR20 iterator insert(const_iterator _Where, _CRT_GUARDOVERFLOW const size_type _Count, const _Ty& _Val) {\r\n        // insert _Count * _Val at _Where\r\n        const pointer _Whereptr = _Where._Ptr;\r\n\r\n        auto& _Al        = _Getal();\r\n        auto& _My_data   = _Mypair._Myval2;\r\n        pointer& _Mylast = _My_data._Mylast;\r\n\r\n        const pointer _Oldfirst = _My_data._Myfirst;\r\n        const pointer _Oldlast  = _Mylast;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Where._Getcont() == _STD addressof(_My_data) && _Whereptr >= _Oldfirst && _Oldlast >= _Whereptr,\r\n            \"vector insert iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        const auto _Whereoff        = static_cast<size_type>(_Whereptr - _Oldfirst);\r\n        const auto _Unused_capacity = static_cast<size_type>(_My_data._Myend - _Oldlast);\r\n        const bool _One_at_back     = _Count == 1 && _Whereptr == _Oldlast;\r\n        if (_Count == 0) { // nothing to do, avoid invalidating iterators\r\n        } else if (_Count > _Unused_capacity) { // reallocate\r\n            const auto _Oldsize = static_cast<size_type>(_Oldlast - _Oldfirst);\r\n\r\n            if (_Count > max_size() - _Oldsize) {\r\n                _Xlength();\r\n            }\r\n\r\n            const size_type _Newsize = _Oldsize + _Count;\r\n            size_type _Newcapacity   = _Calculate_growth(_Newsize);\r\n\r\n            const pointer _Newvec           = _Allocate_at_least_helper(_Al, _Newcapacity);\r\n            const pointer _Constructed_last = _Newvec + _Whereoff + _Count;\r\n\r\n            _Reallocation_guard2 _Guard{_Al, _Newvec, _Newcapacity, _Constructed_last, _Constructed_last};\r\n            auto& _Constructed_first = _Guard._Constructed_first;\r\n\r\n            _Uninitialized_fill_n(_Newvec + _Whereoff, _Count, _Val, _Al);\r\n            _Constructed_first = _Newvec + _Whereoff;\r\n\r\n            if (_One_at_back) { // provide strong guarantee\r\n                if constexpr (is_nothrow_move_constructible_v<_Ty> || !is_copy_constructible_v<_Ty>) {\r\n                    _Uninitialized_move(_Oldfirst, _Oldlast, _Newvec, _Al);\r\n                } else {\r\n                    _Uninitialized_copy(_Oldfirst, _Oldlast, _Newvec, _Al);\r\n                }\r\n            } else { // provide basic guarantee\r\n                _Uninitialized_move(_Oldfirst, _Whereptr, _Newvec, _Al);\r\n                _Constructed_first = _Newvec;\r\n                _Uninitialized_move(_Whereptr, _Oldlast, _Newvec + _Whereoff + _Count, _Al);\r\n            }\r\n\r\n            _Guard._New_begin = nullptr;\r\n            _Change_array(_Newvec, _Newsize, _Newcapacity);\r\n        } else if (_One_at_back) { // provide strong guarantee\r\n            _Emplace_back_with_unused_capacity(_Val);\r\n        } else { // provide basic guarantee\r\n            const _Alloc_temporary2<_Alty> _Tmp_storage(_Al, _Val); // handle aliasing\r\n            const auto& _Tmp              = _Tmp_storage._Get_value();\r\n            const auto _Affected_elements = static_cast<size_type>(_Oldlast - _Whereptr);\r\n            _Orphan_range(_Whereptr, _Oldlast);\r\n\r\n            _ASAN_VECTOR_EXTEND_GUARD(static_cast<size_type>(_Oldlast - _My_data._Myfirst) + _Count);\r\n            if (_Count > _Affected_elements) { // new stuff spills off end\r\n                _Mylast = _Uninitialized_fill_n(_Oldlast, _Count - _Affected_elements, _Tmp, _Al);\r\n                _Mylast = _Uninitialized_move(_Whereptr, _Oldlast, _Mylast, _Al);\r\n                _STD fill(_Whereptr, _Oldlast, _Tmp);\r\n            } else { // new stuff can all be assigned\r\n                _Mylast = _Uninitialized_move(_Oldlast - _Count, _Oldlast, _Oldlast, _Al);\r\n                _Move_backward_unchecked(_Whereptr, _Oldlast - _Count, _Oldlast);\r\n                _STD fill_n(_Whereptr, _Count, _Tmp);\r\n            }\r\n            _ASAN_VECTOR_RELEASE_GUARD;\r\n        }\r\n\r\n        return _Make_iterator_offset(_Whereoff);\r\n    }\r\n\r\nprivate:\r\n    template <class _Iter, class _Sent>\r\n    _CONSTEXPR20 void _Insert_uncounted_range(const_iterator _Where, _Iter _First, _Sent _Last) {\r\n        // insert range [_First, _Last) at _Where\r\n        if (_First == _Last) {\r\n            return; // nothing to do, avoid invalidating iterators\r\n        }\r\n\r\n        auto& _My_data       = _Mypair._Myval2;\r\n        pointer& _Myfirst    = _My_data._Myfirst;\r\n        pointer& _Mylast     = _My_data._Mylast;\r\n        const auto _Whereoff = static_cast<size_type>(_Where._Ptr - _Myfirst);\r\n        const auto _Oldsize  = static_cast<size_type>(_Mylast - _Myfirst);\r\n\r\n        _Append_uncounted_range(_STD move(_First), _STD move(_Last));\r\n\r\n        _Orphan_range(_Myfirst + _Whereoff, _Myfirst + _Oldsize);\r\n\r\n        _STD rotate(_Myfirst + _Whereoff, _Myfirst + _Oldsize, _Mylast);\r\n    }\r\n\r\n    template <class _Iter>\r\n    _CONSTEXPR20 void _Insert_counted_range(const_iterator _Where, _Iter _First, const size_type _Count) {\r\n        // insert counted range _First + [0, _Count) at _Where\r\n        const pointer _Whereptr = _Where._Ptr;\r\n\r\n        auto& _Al        = _Getal();\r\n        auto& _My_data   = _Mypair._Myval2;\r\n        pointer& _Mylast = _My_data._Mylast;\r\n\r\n        const pointer _Oldfirst     = _My_data._Myfirst;\r\n        const pointer _Oldlast      = _Mylast;\r\n        const auto _Unused_capacity = static_cast<size_type>(_My_data._Myend - _Oldlast);\r\n\r\n        if (_Count == 0) { // nothing to do, avoid invalidating iterators\r\n        } else if (_Count > _Unused_capacity) { // reallocate\r\n            const auto _Oldsize = static_cast<size_type>(_Oldlast - _Oldfirst);\r\n\r\n            if (_Count > max_size() - _Oldsize) {\r\n                _Xlength();\r\n            }\r\n\r\n            const size_type _Newsize = _Oldsize + _Count;\r\n            size_type _Newcapacity   = _Calculate_growth(_Newsize);\r\n\r\n            const pointer _Newvec           = _STD _Allocate_at_least_helper(_Al, _Newcapacity);\r\n            const auto _Whereoff            = static_cast<size_type>(_Whereptr - _Oldfirst);\r\n            const pointer _Constructed_last = _Newvec + _Whereoff + _Count;\r\n\r\n            _Reallocation_guard2 _Guard{_Al, _Newvec, _Newcapacity, _Constructed_last, _Constructed_last};\r\n            auto& _Constructed_first = _Guard._Constructed_first;\r\n\r\n            _STD _Uninitialized_copy_n(_STD move(_First), _Count, _Newvec + _Whereoff, _Al);\r\n            _Constructed_first = _Newvec + _Whereoff;\r\n\r\n            if (_Count == 1 && _Whereptr == _Oldlast) { // one at back, provide strong guarantee\r\n                if constexpr (is_nothrow_move_constructible_v<_Ty> || !is_copy_constructible_v<_Ty>) {\r\n                    _STD _Uninitialized_move(_Oldfirst, _Oldlast, _Newvec, _Al);\r\n                } else {\r\n                    _STD _Uninitialized_copy(_Oldfirst, _Oldlast, _Newvec, _Al);\r\n                }\r\n            } else { // provide basic guarantee\r\n                _STD _Uninitialized_move(_Oldfirst, _Whereptr, _Newvec, _Al);\r\n                _Constructed_first = _Newvec;\r\n                _STD _Uninitialized_move(_Whereptr, _Oldlast, _Newvec + _Whereoff + _Count, _Al);\r\n            }\r\n\r\n            _Guard._New_begin = nullptr;\r\n            _Change_array(_Newvec, _Newsize, _Newcapacity);\r\n        } else { // Attempt to provide the strong guarantee for EmplaceConstructible failure.\r\n                 // If we encounter copy/move construction/assignment failure, provide the basic guarantee.\r\n                 // (For one-at-back, this provides the strong guarantee.)\r\n\r\n            const auto _Affected_elements = static_cast<size_type>(_Oldlast - _Whereptr);\r\n\r\n            _ASAN_VECTOR_EXTEND_GUARD(static_cast<size_type>(_Oldlast - _Oldfirst) + _Count);\r\n            if (_Count < _Affected_elements) { // some affected elements must be assigned\r\n                _Mylast = _STD _Uninitialized_move(_Oldlast - _Count, _Oldlast, _Oldlast, _Al);\r\n                _STD _Move_backward_unchecked(_Whereptr, _Oldlast - _Count, _Oldlast);\r\n                _STD _Destroy_range(_Whereptr, _Whereptr + _Count, _Al);\r\n\r\n                _TRY_BEGIN\r\n                _STD _Uninitialized_copy_n(_STD move(_First), _Count, _Whereptr, _Al);\r\n                _CATCH_ALL\r\n                // glue the broken pieces back together\r\n\r\n                _Vaporization_guard _Guard{this, _Whereptr, _Oldlast, _Whereptr + _Count};\r\n                _STD _Uninitialized_move(_Whereptr + _Count, _Whereptr + 2 * _Count, _Whereptr, _Al);\r\n                _Guard._Target = nullptr;\r\n\r\n                _STD _Move_unchecked(_Whereptr + 2 * _Count, _Mylast, _Whereptr + _Count);\r\n                _STD _Destroy_range(_Oldlast, _Mylast, _Al);\r\n                _Mylast = _Oldlast;\r\n                _RERAISE;\r\n                _CATCH_END\r\n            } else { // affected elements don't overlap before/after\r\n                const pointer _Relocated = _Whereptr + _Count;\r\n                _Mylast                  = _STD _Uninitialized_move(_Whereptr, _Oldlast, _Relocated, _Al);\r\n                _STD _Destroy_range(_Whereptr, _Oldlast, _Al);\r\n\r\n                _TRY_BEGIN\r\n                _STD _Uninitialized_copy_n(_STD move(_First), _Count, _Whereptr, _Al);\r\n                _CATCH_ALL\r\n                // glue the broken pieces back together\r\n\r\n                _Vaporization_guard _Guard{this, _Whereptr, _Oldlast, _Relocated};\r\n                _STD _Uninitialized_move(_Relocated, _Mylast, _Whereptr, _Al);\r\n                _Guard._Target = nullptr;\r\n\r\n                _STD _Destroy_range(_Relocated, _Mylast, _Al);\r\n                _Mylast = _Oldlast;\r\n                _RERAISE;\r\n                _CATCH_END\r\n            }\r\n\r\n            _Orphan_range(_Whereptr, _Oldlast);\r\n            _ASAN_VECTOR_RELEASE_GUARD;\r\n        }\r\n    }\r\n\r\npublic:\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    _CONSTEXPR20 iterator insert(const_iterator _Where, _Iter _First, _Iter _Last) {\r\n        const pointer _Whereptr = _Where._Ptr;\r\n        auto& _My_data          = _Mypair._Myval2;\r\n        const pointer _Oldfirst = _My_data._Myfirst;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(\r\n            _Where._Getcont() == _STD addressof(_My_data) && _Whereptr >= _Oldfirst && _My_data._Mylast >= _Whereptr,\r\n            \"vector insert iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        auto _UFirst         = _STD _Get_unwrapped(_First);\r\n        auto _ULast          = _STD _Get_unwrapped(_Last);\r\n        const auto _Whereoff = static_cast<size_type>(_Whereptr - _Oldfirst);\r\n        if constexpr (_Is_cpp17_fwd_iter_v<_Iter>) {\r\n            const auto _Length = static_cast<size_t>(_STD distance(_UFirst, _ULast));\r\n            const auto _Count  = _STD _Convert_size<size_type>(_Length);\r\n            _Insert_counted_range(_Where, _UFirst, _Count);\r\n#if _HAS_CXX20\r\n        } else if constexpr (forward_iterator<_Iter>) {\r\n            const auto _Length = _STD _To_unsigned_like(_RANGES distance(_UFirst, _ULast));\r\n            const auto _Count  = _Convert_size<size_type>(_Length);\r\n            _Insert_counted_range(_Where, _UFirst, _Count);\r\n#endif // _HAS_CXX20\r\n        } else {\r\n            _Insert_uncounted_range(_Where, _UFirst, _ULast);\r\n        }\r\n        return _Make_iterator_offset(_Whereoff);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    constexpr iterator insert_range(const_iterator _Where, _Rng&& _Range) {\r\n        const pointer _Whereptr = _Where._Ptr;\r\n        auto& _My_data          = _Mypair._Myval2;\r\n        const pointer _Oldfirst = _My_data._Myfirst;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(\r\n            _Where._Getcont() == _STD addressof(_My_data) && _Whereptr >= _Oldfirst && _My_data._Mylast >= _Whereptr,\r\n            \"vector insert_range iterator out-of-range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        const auto _Whereoff = static_cast<size_type>(_Whereptr - _Oldfirst);\r\n\r\n        if constexpr (_RANGES forward_range<_Rng> || _RANGES sized_range<_Rng>) {\r\n            const auto _Length = _To_unsigned_like(_RANGES distance(_Range));\r\n            const auto _Count  = _Convert_size<size_type>(_Length);\r\n            _Insert_counted_range(_Where, _RANGES _Ubegin(_Range), _Count);\r\n        } else {\r\n            _Insert_uncounted_range(_Where, _RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n        }\r\n        return _Make_iterator_offset(_Whereoff);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 iterator insert(const_iterator _Where, initializer_list<_Ty> _Ilist) {\r\n        const pointer _Whereptr = _Where._Ptr;\r\n        auto& _My_data          = _Mypair._Myval2;\r\n        const pointer _Oldfirst = _My_data._Myfirst;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(\r\n            _Where._Getcont() == _STD addressof(_My_data) && _Whereptr >= _Oldfirst && _My_data._Mylast >= _Whereptr,\r\n            \"vector insert iterator out-of-range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        const auto _Whereoff = static_cast<size_type>(_Whereptr - _Oldfirst);\r\n\r\n        const auto _Count = _Convert_size<size_type>(_Ilist.size());\r\n        _Insert_counted_range(_Where, _Ilist.begin(), _Count);\r\n        return _Make_iterator_offset(_Whereoff);\r\n    }\r\n\r\n    _CONSTEXPR20 void assign(_CRT_GUARDOVERFLOW const size_type _Newsize, const _Ty& _Val) {\r\n        // assign _Newsize * _Val\r\n        auto& _Al         = _Getal();\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        pointer& _Myfirst = _My_data._Myfirst;\r\n        pointer& _Mylast  = _My_data._Mylast;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            const auto _Valptr = _STD addressof(_Val);\r\n            _STL_VERIFY(!(_Unfancy(_Myfirst) <= _Valptr && _Valptr < _Unfancy(_Mylast)),\r\n                \"assignment value cannot be a reference into the container\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        constexpr bool _Nothrow_construct =\r\n            conjunction_v<is_nothrow_copy_constructible<_Ty>, _Uses_default_construct<_Alloc, _Ty*, const _Ty&>>;\r\n\r\n        _My_data._Orphan_all();\r\n        const auto _Oldcapacity = static_cast<size_type>(_My_data._Myend - _Myfirst);\r\n        if (_Newsize > _Oldcapacity) { // reallocate\r\n            _Clear_and_reserve_geometric(_Newsize);\r\n            if constexpr (_Nothrow_construct) {\r\n                _Mylast = _Uninitialized_fill_n(_Myfirst, _Newsize, _Val, _Al);\r\n                _ASAN_VECTOR_CREATE;\r\n            } else {\r\n                _ASAN_VECTOR_CREATE_GUARD;\r\n                _Mylast = _Uninitialized_fill_n(_Myfirst, _Newsize, _Val, _Al);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        const auto _Oldsize = static_cast<size_type>(_Mylast - _Myfirst);\r\n        if (_Newsize > _Oldsize) {\r\n            _STD fill(_Myfirst, _Mylast, _Val);\r\n            if constexpr (_Nothrow_construct) {\r\n                _ASAN_VECTOR_MODIFY(static_cast<difference_type>(_Newsize - _Oldsize));\r\n                _Mylast = _Uninitialized_fill_n(_Mylast, _Newsize - _Oldsize, _Val, _Al);\r\n            } else {\r\n                _ASAN_VECTOR_EXTEND_GUARD(_Newsize);\r\n                _Mylast = _Uninitialized_fill_n(_Mylast, _Newsize - _Oldsize, _Val, _Al);\r\n                _ASAN_VECTOR_RELEASE_GUARD;\r\n            }\r\n        } else {\r\n            const pointer _Newlast = _Myfirst + _Newsize;\r\n            _STD fill(_Myfirst, _Newlast, _Val);\r\n            _Destroy_range(_Newlast, _Mylast, _Al);\r\n            _ASAN_VECTOR_MODIFY(static_cast<difference_type>(_Newsize - _Oldsize));\r\n            _Mylast = _Newlast;\r\n        }\r\n    }\r\n\r\nprivate:\r\n    template <class _Iter, class _Sent>\r\n    _CONSTEXPR20 void _Assign_uncounted_range(_Iter _First, _Sent _Last) {\r\n        // assign unknown number of elements from [_First, _Last)\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        pointer& _Myfirst = _My_data._Myfirst;\r\n        pointer& _Mylast  = _My_data._Mylast;\r\n\r\n        _My_data._Orphan_all();\r\n\r\n        pointer _Next = _Myfirst;\r\n        for (; _First != _Last && _Next != _Mylast; ++_First, (void) ++_Next) {\r\n            *_Next = *_First;\r\n        }\r\n\r\n        // Code size optimization: we've exhausted only the source, only the dest, or both.\r\n        // If we've exhausted only the source: we Trim, then Append does nothing.\r\n        // If we've exhausted only the dest: Trim does nothing, then we Append.\r\n        // If we've exhausted both: Trim does nothing, then Append does nothing.\r\n\r\n        // Trim.\r\n        _Destroy_range(_Next, _Mylast, _Getal());\r\n        _ASAN_VECTOR_MODIFY(static_cast<difference_type>(_Next - _Mylast)); // negative when destroying elements\r\n        _Mylast = _Next;\r\n\r\n        _Append_uncounted_range(_STD move(_First), _STD move(_Last));\r\n    }\r\n\r\n    template <class _Iter>\r\n    _CONSTEXPR20 void _Assign_counted_range(_Iter _First, const size_type _Newsize) {\r\n        // assign elements from counted range _First + [0, _Newsize)\r\n        auto& _Al         = _Getal();\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        pointer& _Myfirst = _My_data._Myfirst;\r\n        pointer& _Mylast  = _My_data._Mylast;\r\n        pointer& _Myend   = _My_data._Myend;\r\n\r\n        constexpr bool _Nothrow_construct = conjunction_v<is_nothrow_constructible<_Ty, _Iter_ref_t<_Iter>>,\r\n            _Uses_default_construct<_Alloc, _Ty*, _Iter_ref_t<_Iter>>>;\r\n\r\n        _My_data._Orphan_all();\r\n        const auto _Oldcapacity = static_cast<size_type>(_Myend - _Myfirst);\r\n        if (_Newsize > _Oldcapacity) {\r\n            _Clear_and_reserve_geometric(_Newsize);\r\n            if constexpr (_Nothrow_construct) {\r\n                _Mylast = _STD _Uninitialized_copy_n(_STD move(_First), _Newsize, _Myfirst, _Al);\r\n                _ASAN_VECTOR_CREATE;\r\n            } else {\r\n                _ASAN_VECTOR_CREATE_GUARD;\r\n                _Mylast = _STD _Uninitialized_copy_n(_STD move(_First), _Newsize, _Myfirst, _Al);\r\n            }\r\n            return;\r\n        }\r\n\r\n        const auto _Oldsize = static_cast<size_type>(_Mylast - _Myfirst);\r\n        if (_Newsize > _Oldsize) {\r\n            bool _Copied = false;\r\n            if constexpr (_Iter_copy_cat<_Iter, pointer>::_Bitcopy_assignable) {\r\n#if _HAS_CXX20\r\n                if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n                {\r\n                    _Copy_memmove_n(_First, static_cast<size_t>(_Oldsize), _Myfirst);\r\n                    _First += _Oldsize;\r\n                    _Copied = true;\r\n                }\r\n            }\r\n\r\n            if (!_Copied) {\r\n                for (auto _Mid = _Myfirst; _Mid != _Mylast; ++_Mid, (void) ++_First) {\r\n                    *_Mid = *_First;\r\n                }\r\n            }\r\n\r\n            if constexpr (_Nothrow_construct) {\r\n                _ASAN_VECTOR_MODIFY(static_cast<difference_type>(_Newsize - _Oldsize));\r\n                _Mylast = _STD _Uninitialized_copy_n(_STD move(_First), _Newsize - _Oldsize, _Mylast, _Al);\r\n            } else {\r\n                _ASAN_VECTOR_EXTEND_GUARD(_Newsize);\r\n                _Mylast = _STD _Uninitialized_copy_n(_STD move(_First), _Newsize - _Oldsize, _Mylast, _Al);\r\n                _ASAN_VECTOR_RELEASE_GUARD;\r\n            }\r\n        } else {\r\n            const pointer _Newlast = _Myfirst + _Newsize;\r\n            _STD _Copy_n_unchecked4(_STD move(_First), _Newsize, _Myfirst);\r\n            _STD _Destroy_range(_Newlast, _Mylast, _Al);\r\n            _ASAN_VECTOR_MODIFY(static_cast<difference_type>(_Newsize - _Oldsize));\r\n            _Mylast = _Newlast;\r\n        }\r\n    }\r\n\r\npublic:\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    _CONSTEXPR20 void assign(_Iter _First, _Iter _Last) {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        auto _UFirst = _STD _Get_unwrapped(_First);\r\n        auto _ULast  = _STD _Get_unwrapped(_Last);\r\n        if constexpr (_Is_cpp17_fwd_iter_v<_Iter>) {\r\n            const auto _Length = static_cast<size_t>(_STD distance(_UFirst, _ULast));\r\n            const auto _Count  = _STD _Convert_size<size_type>(_Length);\r\n            _Assign_counted_range(_UFirst, _Count);\r\n#if _HAS_CXX20\r\n        } else if constexpr (forward_iterator<_Iter>) {\r\n            const auto _Length = _STD _To_unsigned_like(_RANGES distance(_UFirst, _ULast));\r\n            const auto _Count  = _STD _Convert_size<size_type>(_Length);\r\n            _Assign_counted_range(_UFirst, _Count);\r\n#endif // _HAS_CXX20\r\n        } else {\r\n            _Assign_uncounted_range(_UFirst, _ULast);\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Ty> _Rng>\r\n    constexpr void assign_range(_Rng&& _Range) {\r\n        static_assert(assignable_from<_Ty&, _RANGES range_reference_t<_Rng>>,\r\n            \"Elements must be assignable from the range's reference type (N4993 [sequence.reqmts]/60).\");\r\n        if constexpr (_RANGES sized_range<_Rng> || _RANGES forward_range<_Rng>) {\r\n            const auto _Length = _To_unsigned_like(_RANGES distance(_Range));\r\n            const auto _Count  = _Convert_size<size_type>(_Length);\r\n            _Assign_counted_range(_RANGES _Ubegin(_Range), _Count);\r\n        } else {\r\n            _Assign_uncounted_range(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 void assign(const initializer_list<_Ty> _Ilist) {\r\n        const auto _Count = _Convert_size<size_type>(_Ilist.size());\r\n        _Assign_counted_range(_Ilist.begin(), _Count);\r\n    }\r\n\r\n    _CONSTEXPR20 vector& operator=(const vector& _Right) {\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n        auto& _Al       = _Getal();\r\n        auto& _Right_al = _Right._Getal();\r\n        if constexpr (_Choose_pocca_v<_Alty>) {\r\n            if (_Al != _Right_al) {\r\n                _Tidy();\r\n                _Mypair._Myval2._Reload_proxy(_STD _Get_proxy_allocator(_Al), _STD _Get_proxy_allocator(_Right_al));\r\n            }\r\n        }\r\n\r\n        _Pocca(_Al, _Right_al);\r\n        auto& _Right_data = _Right._Mypair._Myval2;\r\n        _Assign_counted_range(_Right_data._Myfirst, static_cast<size_type>(_Right_data._Mylast - _Right_data._Myfirst));\r\n\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 vector& operator=(initializer_list<_Ty> _Ilist) {\r\n        const auto _Count = _Convert_size<size_type>(_Ilist.size());\r\n        _Assign_counted_range(_Ilist.begin(), _Count);\r\n        return *this;\r\n    }\r\n\r\nprivate:\r\n    template <class _Ty2>\r\n    _CONSTEXPR20 void _Resize_reallocate(const size_type _Newsize, const _Ty2& _Val) {\r\n        if (_Newsize > max_size()) {\r\n            _Xlength();\r\n        }\r\n\r\n        auto& _Al         = _Getal();\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        pointer& _Myfirst = _My_data._Myfirst;\r\n        pointer& _Mylast  = _My_data._Mylast;\r\n\r\n        const auto _Oldsize    = static_cast<size_type>(_Mylast - _Myfirst);\r\n        size_type _Newcapacity = _Calculate_growth(_Newsize);\r\n\r\n        const pointer _Newvec         = _Allocate_at_least_helper(_Al, _Newcapacity);\r\n        const pointer _Appended_first = _Newvec + _Oldsize;\r\n\r\n        _Reallocation_guard2 _Guard{_Al, _Newvec, _Newcapacity, _Appended_first, _Appended_first};\r\n        auto& _Appended_last = _Guard._Constructed_last;\r\n\r\n        if constexpr (is_same_v<_Ty2, _Ty>) {\r\n            _Appended_last = _Uninitialized_fill_n(_Appended_first, _Newsize - _Oldsize, _Val, _Al);\r\n        } else {\r\n            _STL_INTERNAL_STATIC_ASSERT(is_same_v<_Ty2, _Value_init_tag>);\r\n            _Appended_last = _Uninitialized_value_construct_n(_Appended_first, _Newsize - _Oldsize, _Al);\r\n        }\r\n\r\n        if constexpr (is_nothrow_move_constructible_v<_Ty> || !is_copy_constructible_v<_Ty>) {\r\n            _Uninitialized_move(_Myfirst, _Mylast, _Newvec, _Al);\r\n        } else {\r\n            _Uninitialized_copy(_Myfirst, _Mylast, _Newvec, _Al);\r\n        }\r\n\r\n        _Guard._New_begin = nullptr;\r\n        _Change_array(_Newvec, _Newsize, _Newcapacity);\r\n    }\r\n\r\n    template <class _Ty2>\r\n    _CONSTEXPR20 void _Resize(const size_type _Newsize, const _Ty2& _Val) {\r\n        // trim or append elements, provide strong guarantee\r\n        auto& _Al           = _Getal();\r\n        auto& _My_data      = _Mypair._Myval2;\r\n        pointer& _Myfirst   = _My_data._Myfirst;\r\n        pointer& _Mylast    = _My_data._Mylast;\r\n        const auto _Oldsize = static_cast<size_type>(_Mylast - _Myfirst);\r\n        if (_Newsize < _Oldsize) { // trim\r\n            const pointer _Newlast = _Myfirst + _Newsize;\r\n            _Orphan_range(_Newlast, _Mylast);\r\n            _Destroy_range(_Newlast, _Mylast, _Al);\r\n            _ASAN_VECTOR_MODIFY(static_cast<difference_type>(_Newsize - _Oldsize));\r\n            _Mylast = _Newlast;\r\n            return;\r\n        }\r\n\r\n        if (_Newsize > _Oldsize) { // append\r\n            const auto _Oldcapacity = static_cast<size_type>(_My_data._Myend - _Myfirst);\r\n            if (_Newsize > _Oldcapacity) { // reallocate\r\n                _Resize_reallocate(_Newsize, _Val);\r\n                return;\r\n            }\r\n\r\n            _ASAN_VECTOR_EXTEND_GUARD(_Newsize);\r\n            const pointer _Oldlast = _Mylast;\r\n            if constexpr (is_same_v<_Ty2, _Ty>) {\r\n                _Mylast = _Uninitialized_fill_n(_Oldlast, _Newsize - _Oldsize, _Val, _Al);\r\n            } else {\r\n                _STL_INTERNAL_STATIC_ASSERT(is_same_v<_Ty2, _Value_init_tag>);\r\n                _Mylast = _Uninitialized_value_construct_n(_Oldlast, _Newsize - _Oldsize, _Al);\r\n            }\r\n            _ASAN_VECTOR_RELEASE_GUARD;\r\n            _Orphan_range(_Oldlast, _Oldlast);\r\n        }\r\n\r\n        // if _Newsize == _Oldsize, do nothing; avoid invalidating iterators\r\n    }\r\n\r\npublic:\r\n    _CONSTEXPR20 void resize(_CRT_GUARDOVERFLOW const size_type _Newsize) {\r\n        // trim or append value-initialized elements, provide strong guarantee\r\n        _Resize(_Newsize, _Value_init_tag{});\r\n    }\r\n\r\n    _CONSTEXPR20 void resize(_CRT_GUARDOVERFLOW const size_type _Newsize, const _Ty& _Val) {\r\n        // trim or append copies of _Val, provide strong guarantee\r\n        _Resize(_Newsize, _Val);\r\n    }\r\n\r\nprivate:\r\n    enum class _Reallocation_policy { _At_least, _Exactly };\r\n\r\n    template <_Reallocation_policy _Policy>\r\n    _CONSTEXPR20 void _Reallocate(size_type& _Newcapacity) {\r\n        // set capacity to _Newcapacity (without geometric growth), provide strong guarantee\r\n        auto& _Al         = _Getal();\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        pointer& _Myfirst = _My_data._Myfirst;\r\n        pointer& _Mylast  = _My_data._Mylast;\r\n\r\n        const auto _Size = static_cast<size_type>(_Mylast - _Myfirst);\r\n\r\n        pointer _Newvec;\r\n        if constexpr (_Policy == _Reallocation_policy::_At_least) {\r\n            _Newvec = _Allocate_at_least_helper(_Al, _Newcapacity);\r\n        } else {\r\n            _STL_INTERNAL_STATIC_ASSERT(_Policy == _Reallocation_policy::_Exactly);\r\n            _Newvec = _Al.allocate(_Newcapacity);\r\n        }\r\n\r\n        _Allocation_guard<_Alty> _Guard{_Al, _Newvec, _Newcapacity};\r\n\r\n        if constexpr (is_nothrow_move_constructible_v<_Ty> || !is_copy_constructible_v<_Ty>) {\r\n            _Uninitialized_move(_Myfirst, _Mylast, _Newvec, _Al);\r\n        } else {\r\n            _Uninitialized_copy(_Myfirst, _Mylast, _Newvec, _Al);\r\n        }\r\n\r\n        _Guard._Ptr = nullptr;\r\n        _Change_array(_Newvec, _Size, _Newcapacity);\r\n    }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0 && defined(_ENABLE_STL_INTERNAL_CHECK)\r\n    void _Check_all_orphaned_locked() const noexcept {\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _STL_INTERNAL_CHECK(!_My_data._Myproxy->_Myfirstiter);\r\n    }\r\n\r\n    _CONSTEXPR20 void _Check_all_orphaned() const noexcept {\r\n#if _HAS_CXX20\r\n        if (_STD is_constant_evaluated()) {\r\n            auto& _My_data = _Mypair._Myval2;\r\n            _STL_INTERNAL_CHECK(!_My_data._Myproxy->_Myfirstiter);\r\n        } else\r\n#endif // _HAS_CXX20\r\n        {\r\n            _Check_all_orphaned_locked();\r\n        }\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0 && defined(_ENABLE_STL_INTERNAL_CHECK)\r\n\r\n    _CONSTEXPR20 void _Clear_and_reserve_geometric(const size_type _Newsize) {\r\n        auto& _Al         = _Getal();\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        pointer& _Myfirst = _My_data._Myfirst;\r\n        pointer& _Mylast  = _My_data._Mylast;\r\n        pointer& _Myend   = _My_data._Myend;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0 && defined(_ENABLE_STL_INTERNAL_CHECK)\r\n        _STL_INTERNAL_CHECK(_Newsize != 0);\r\n        _Check_all_orphaned();\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0 && defined(_ENABLE_STL_INTERNAL_CHECK)\r\n\r\n        if (_Newsize > max_size()) {\r\n            _Xlength();\r\n        }\r\n\r\n        const size_type _Newcapacity = _Calculate_growth(_Newsize);\r\n\r\n        if (_Myfirst) { // destroy and deallocate old array\r\n            _Destroy_range(_Myfirst, _Mylast, _Al);\r\n            _ASAN_VECTOR_REMOVE;\r\n            _Al.deallocate(_Myfirst, static_cast<size_type>(_Myend - _Myfirst));\r\n\r\n            _Myfirst = nullptr;\r\n            _Mylast  = nullptr;\r\n            _Myend   = nullptr;\r\n        }\r\n\r\n        _Buy_raw(_Newcapacity);\r\n    }\r\n\r\npublic:\r\n    _CONSTEXPR20 void reserve(_CRT_GUARDOVERFLOW size_type _Newcapacity) {\r\n        // increase capacity to _Newcapacity (without geometric growth), provide strong guarantee\r\n        if (_Newcapacity > capacity()) { // something to do (reserve() never shrinks)\r\n            if (_Newcapacity > max_size()) {\r\n                _Xlength();\r\n            }\r\n\r\n            _Reallocate<_Reallocation_policy::_At_least>(_Newcapacity);\r\n        }\r\n    }\r\n\r\n    _CONSTEXPR20 void shrink_to_fit() { // reduce capacity to size, provide strong guarantee\r\n        auto& _My_data         = _Mypair._Myval2;\r\n        const pointer _Oldlast = _My_data._Mylast;\r\n        if (_Oldlast != _My_data._Myend) { // something to do\r\n            const pointer _Oldfirst = _My_data._Myfirst;\r\n            if (_Oldfirst == _Oldlast) {\r\n                _Tidy();\r\n            } else {\r\n                size_type _Newcapacity = static_cast<size_type>(_Oldlast - _Oldfirst);\r\n                _Reallocate<_Reallocation_policy::_Exactly>(_Newcapacity);\r\n            }\r\n        }\r\n    }\r\n\r\n    _CONSTEXPR20 void pop_back() noexcept /* strengthened */ {\r\n        auto& _My_data   = _Mypair._Myval2;\r\n        pointer& _Mylast = _My_data._Mylast;\r\n\r\n#if _MSVC_STL_HARDENING_VECTOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_My_data._Myfirst != _Mylast, \"pop_back() called on empty vector\");\r\n#endif\r\n\r\n        _Orphan_range(_Mylast - 1, _Mylast);\r\n        _Alty_traits::destroy(_Getal(), _Unfancy(_Mylast - 1));\r\n        _ASAN_VECTOR_MODIFY(-1);\r\n        --_Mylast;\r\n    }\r\n\r\n    _CONSTEXPR20 iterator erase(const_iterator _Where)\r\n        noexcept(is_nothrow_move_assignable_v<value_type>) /* strengthened */ {\r\n        const pointer _Whereptr = _Where._Ptr;\r\n        auto& _My_data          = _Mypair._Myval2;\r\n        pointer& _Mylast        = _My_data._Mylast;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(\r\n            _Where._Getcont() == _STD addressof(_My_data) && _Whereptr >= _My_data._Myfirst && _Mylast > _Whereptr,\r\n            \"vector erase iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        _Orphan_range(_Whereptr, _Mylast);\r\n        _STD _Move_unchecked(_Whereptr + 1, _Mylast, _Whereptr);\r\n        _Alty_traits::destroy(_Getal(), _Unfancy(_Mylast - 1));\r\n        _ASAN_VECTOR_MODIFY(-1);\r\n        --_Mylast;\r\n        return iterator(_Whereptr, _STD addressof(_My_data));\r\n    }\r\n\r\n    _CONSTEXPR20 iterator erase(const_iterator _First, const_iterator _Last)\r\n        noexcept(is_nothrow_move_assignable_v<value_type>) /* strengthened */ {\r\n        const pointer _Firstptr = _First._Ptr;\r\n        const pointer _Lastptr  = _Last._Ptr;\r\n        auto& _My_data          = _Mypair._Myval2;\r\n        pointer& _Mylast        = _My_data._Mylast;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_First._Getcont() == _STD addressof(_My_data) && _Last._Getcont() == _STD addressof(_My_data)\r\n                        && _Firstptr >= _My_data._Myfirst && _Lastptr >= _Firstptr && _Mylast >= _Lastptr,\r\n            \"vector erase iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        if (_Firstptr != _Lastptr) { // something to do, invalidate iterators\r\n            _Orphan_range(_Firstptr, _Mylast);\r\n\r\n            const pointer _Newlast = _STD _Move_unchecked(_Lastptr, _Mylast, _Firstptr);\r\n            _Destroy_range(_Newlast, _Mylast, _Getal());\r\n            _ASAN_VECTOR_MODIFY(static_cast<difference_type>(_Newlast - _Mylast)); // negative when destroying elements\r\n            _Mylast = _Newlast;\r\n        }\r\n\r\n        return iterator(_Firstptr, _STD addressof(_My_data));\r\n    }\r\n\r\n    _CONSTEXPR20 void clear() noexcept { // erase all\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        pointer& _Myfirst = _My_data._Myfirst;\r\n        pointer& _Mylast  = _My_data._Mylast;\r\n\r\n        if (_Myfirst == _Mylast) { // already empty, nothing to do\r\n            // This is an optimization for debug mode: we can avoid taking the debug lock to invalidate iterators.\r\n            // Note that when clearing an empty vector, this will preserve past-the-end iterators, which is allowed by\r\n            // N4950 [sequence.reqmts]/54 \"a.clear() [...] may invalidate the past-the-end iterator\".\r\n            return;\r\n        }\r\n\r\n        _My_data._Orphan_all();\r\n        _Destroy_range(_Myfirst, _Mylast, _Getal());\r\n        _ASAN_VECTOR_MODIFY(static_cast<difference_type>(_Myfirst - _Mylast)); // negative when destroying elements\r\n        _Mylast = _Myfirst;\r\n    }\r\n\r\n    _CONSTEXPR20 void swap(vector& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Pocs(_Getal(), _Right._Getal());\r\n            _Mypair._Myval2._Swap_val(_Right._Mypair._Myval2);\r\n        }\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Ty* data() noexcept {\r\n        return _STD _Unfancy_maybe_null(_Mypair._Myval2._Myfirst);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const _Ty* data() const noexcept {\r\n        return _STD _Unfancy_maybe_null(_Mypair._Myval2._Myfirst);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 iterator begin() noexcept {\r\n        auto& _My_data = _Mypair._Myval2;\r\n        return iterator(_My_data._Myfirst, _STD addressof(_My_data));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_iterator begin() const noexcept {\r\n        auto& _My_data = _Mypair._Myval2;\r\n        return const_iterator(_My_data._Myfirst, _STD addressof(_My_data));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 iterator end() noexcept {\r\n        auto& _My_data = _Mypair._Myval2;\r\n        return iterator(_My_data._Mylast, _STD addressof(_My_data));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_iterator end() const noexcept {\r\n        auto& _My_data = _Mypair._Myval2;\r\n        return const_iterator(_My_data._Mylast, _STD addressof(_My_data));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reverse_iterator rbegin() noexcept {\r\n        return reverse_iterator(end());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reverse_iterator rbegin() const noexcept {\r\n        return const_reverse_iterator(end());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reverse_iterator rend() noexcept {\r\n        return reverse_iterator(begin());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reverse_iterator rend() const noexcept {\r\n        return const_reverse_iterator(begin());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_iterator cbegin() const noexcept {\r\n        return begin();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_iterator cend() const noexcept {\r\n        return end();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reverse_iterator crbegin() const noexcept {\r\n        return rbegin();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reverse_iterator crend() const noexcept {\r\n        return rend();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Ty* _Unchecked_begin() noexcept {\r\n        return _Unfancy_maybe_null(_Mypair._Myval2._Myfirst);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const _Ty* _Unchecked_begin() const noexcept {\r\n        return _Unfancy_maybe_null(_Mypair._Myval2._Myfirst);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Ty* _Unchecked_end() noexcept {\r\n        return _Unfancy_maybe_null(_Mypair._Myval2._Mylast);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const _Ty* _Unchecked_end() const noexcept {\r\n        return _Unfancy_maybe_null(_Mypair._Myval2._Mylast);\r\n    }\r\n\r\n    _NODISCARD_EMPTY_MEMBER _CONSTEXPR20 bool empty() const noexcept {\r\n        auto& _My_data = _Mypair._Myval2;\r\n        return _My_data._Myfirst == _My_data._Mylast;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type size() const noexcept {\r\n        auto& _My_data = _Mypair._Myval2;\r\n        return static_cast<size_type>(_My_data._Mylast - _My_data._Myfirst);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type max_size() const noexcept {\r\n        return (_STD min) (static_cast<size_type>(_STD _Max_limit<difference_type>()), //\r\n            _Alty_traits::max_size(_Getal()));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type capacity() const noexcept {\r\n        auto& _My_data = _Mypair._Myval2;\r\n        return static_cast<size_type>(_My_data._Myend - _My_data._Myfirst);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Ty& operator[](const size_type _Pos) noexcept /* strengthened */ {\r\n        auto& _My_data = _Mypair._Myval2;\r\n#if _MSVC_STL_HARDENING_VECTOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(\r\n            _Pos < static_cast<size_type>(_My_data._Mylast - _My_data._Myfirst), \"vector subscript out of range\");\r\n#endif\r\n\r\n        return _My_data._Myfirst[_Pos];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const _Ty& operator[](const size_type _Pos) const noexcept /* strengthened */ {\r\n        auto& _My_data = _Mypair._Myval2;\r\n#if _MSVC_STL_HARDENING_VECTOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(\r\n            _Pos < static_cast<size_type>(_My_data._Mylast - _My_data._Myfirst), \"vector subscript out of range\");\r\n#endif\r\n\r\n        return _My_data._Myfirst[_Pos];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Ty& at(const size_type _Pos) {\r\n        auto& _My_data = _Mypair._Myval2;\r\n        if (static_cast<size_type>(_My_data._Mylast - _My_data._Myfirst) <= _Pos) {\r\n            _Xrange();\r\n        }\r\n\r\n        return _My_data._Myfirst[_Pos];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const _Ty& at(const size_type _Pos) const {\r\n        auto& _My_data = _Mypair._Myval2;\r\n        if (static_cast<size_type>(_My_data._Mylast - _My_data._Myfirst) <= _Pos) {\r\n            _Xrange();\r\n        }\r\n\r\n        return _My_data._Myfirst[_Pos];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Ty& front() noexcept /* strengthened */ {\r\n        auto& _My_data = _Mypair._Myval2;\r\n#if _MSVC_STL_HARDENING_VECTOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_My_data._Myfirst != _My_data._Mylast, \"front() called on empty vector\");\r\n#endif\r\n\r\n        return *_My_data._Myfirst;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const _Ty& front() const noexcept /* strengthened */ {\r\n        auto& _My_data = _Mypair._Myval2;\r\n#if _MSVC_STL_HARDENING_VECTOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_My_data._Myfirst != _My_data._Mylast, \"front() called on empty vector\");\r\n#endif\r\n\r\n        return *_My_data._Myfirst;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Ty& back() noexcept /* strengthened */ {\r\n        auto& _My_data = _Mypair._Myval2;\r\n#if _MSVC_STL_HARDENING_VECTOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_My_data._Myfirst != _My_data._Mylast, \"back() called on empty vector\");\r\n#endif\r\n\r\n        return _My_data._Mylast[-1];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const _Ty& back() const noexcept /* strengthened */ {\r\n        auto& _My_data = _Mypair._Myval2;\r\n#if _MSVC_STL_HARDENING_VECTOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_My_data._Myfirst != _My_data._Mylast, \"back() called on empty vector\");\r\n#endif\r\n\r\n        return _My_data._Mylast[-1];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 allocator_type get_allocator() const noexcept {\r\n        return static_cast<allocator_type>(_Getal());\r\n    }\r\n\r\nprivate:\r\n    _CONSTEXPR20 size_type _Calculate_growth(const size_type _Newsize) const {\r\n        // given _Oldcapacity and _Newsize, calculate geometric growth\r\n        const size_type _Oldcapacity = capacity();\r\n        const auto _Max              = max_size();\r\n\r\n        if (_Oldcapacity > _Max - _Oldcapacity / 2) {\r\n            return _Max; // geometric growth would overflow\r\n        }\r\n\r\n        const size_type _Geometric = _Oldcapacity + _Oldcapacity / 2;\r\n\r\n        if (_Geometric < _Newsize) {\r\n            return _Newsize; // geometric growth would be insufficient\r\n        }\r\n\r\n        return _Geometric; // geometric growth is sufficient\r\n    }\r\n\r\n    _CONSTEXPR20 void _Buy_raw(size_type _Newcapacity) {\r\n        // allocate array with _Newcapacity elements\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        pointer& _Myfirst = _My_data._Myfirst;\r\n        pointer& _Mylast  = _My_data._Mylast;\r\n        pointer& _Myend   = _My_data._Myend;\r\n\r\n        _STL_INTERNAL_CHECK(!_Myfirst && !_Mylast && !_Myend); // check that *this is tidy\r\n        _STL_INTERNAL_CHECK(0 < _Newcapacity && _Newcapacity <= max_size());\r\n\r\n        const pointer _Newvec = _STD _Allocate_at_least_helper(_Getal(), _Newcapacity);\r\n        _Myfirst              = _Newvec;\r\n        _Mylast               = _Newvec;\r\n        _Myend                = _Newvec + _Newcapacity;\r\n    }\r\n\r\n    _CONSTEXPR20 void _Buy_nonzero(const size_type _Newcapacity) {\r\n        // allocate array with _Newcapacity elements\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        pointer& _Myfirst = _My_data._Myfirst;\r\n        pointer& _Mylast  = _My_data._Mylast;\r\n        pointer& _Myend   = _My_data._Myend;\r\n        _STL_INTERNAL_CHECK(!_Myfirst && !_Mylast && !_Myend); // check that *this is tidy\r\n        _STL_INTERNAL_CHECK(0 < _Newcapacity);\r\n#endif // _ENABLE_STL_INTERNAL_CHECK\r\n\r\n        if (_Newcapacity > max_size()) {\r\n            _Xlength();\r\n        }\r\n\r\n        _Buy_raw(_Newcapacity);\r\n    }\r\n\r\n    _CONSTEXPR20 void _Change_array(\r\n        const pointer _Newvec, const size_type _Newsize, const size_type _Newcapacity) noexcept {\r\n        // orphan all iterators, discard old array, acquire new array\r\n        auto& _Al         = _Getal();\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        pointer& _Myfirst = _My_data._Myfirst;\r\n        pointer& _Mylast  = _My_data._Mylast;\r\n        pointer& _Myend   = _My_data._Myend;\r\n\r\n        _My_data._Orphan_all();\r\n\r\n        if (_Myfirst) { // destroy and deallocate old array\r\n            _STD _Destroy_range(_Myfirst, _Mylast, _Al);\r\n            _ASAN_VECTOR_REMOVE;\r\n            _Al.deallocate(_Myfirst, static_cast<size_type>(_Myend - _Myfirst));\r\n        }\r\n\r\n        _Myfirst = _Newvec;\r\n        _Mylast  = _Newvec + static_cast<_Iter_diff_t<pointer>>(_Newsize);\r\n        _Myend   = _Newvec + static_cast<_Iter_diff_t<pointer>>(_Newcapacity);\r\n        _ASAN_VECTOR_CREATE;\r\n    }\r\n\r\n    _CONSTEXPR20 void _Tidy() noexcept { // free all storage\r\n        auto& _Al         = _Getal();\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        pointer& _Myfirst = _My_data._Myfirst;\r\n        pointer& _Mylast  = _My_data._Mylast;\r\n        pointer& _Myend   = _My_data._Myend;\r\n\r\n        _My_data._Orphan_all();\r\n\r\n        if (_Myfirst) { // destroy and deallocate old array\r\n            _STD _Destroy_range(_Myfirst, _Mylast, _Al);\r\n            _ASAN_VECTOR_REMOVE;\r\n            _Al.deallocate(_Myfirst, static_cast<size_type>(_Myend - _Myfirst));\r\n\r\n            _Myfirst = nullptr;\r\n            _Mylast  = nullptr;\r\n            _Myend   = nullptr;\r\n        }\r\n    }\r\n\r\n    template <class... _Valty>\r\n    _CONSTEXPR20 void _Construct_n(_CRT_GUARDOVERFLOW const size_type _Count, _Valty&&... _Val) {\r\n        // Dispatches between the three sized constructions.\r\n        // 1-arg -> value-construction, e.g. vector(5)\r\n        // 2-arg -> fill, e.g. vector(5, \"meow\")\r\n        // 3-arg -> sized range construction, e.g. vector{\"Hello\", \"Fluffy\", \"World\"}\r\n        auto& _Al      = _Getal();\r\n        auto _Alproxy  = _STD _Get_proxy_allocator(_Al);\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _Container_proxy_ptr<_Alty> _Proxy(_Alproxy, _My_data);\r\n        if (_Count != 0) {\r\n            _Buy_nonzero(_Count);\r\n            _Tidy_guard<vector> _Guard{this};\r\n            if constexpr (sizeof...(_Val) == 0) {\r\n                _My_data._Mylast = _STD _Uninitialized_value_construct_n(_My_data._Myfirst, _Count, _Al);\r\n            } else if constexpr (sizeof...(_Val) == 1) {\r\n                _STL_INTERNAL_STATIC_ASSERT(is_same_v<_Valty..., const _Ty&>);\r\n                _My_data._Mylast = _STD _Uninitialized_fill_n(_My_data._Myfirst, _Count, _Val..., _Al);\r\n            } else if constexpr (sizeof...(_Val) == 2) {\r\n                _My_data._Mylast = _STD _Uninitialized_copy(_STD forward<_Valty>(_Val)..., _My_data._Myfirst, _Al);\r\n            } else {\r\n                static_assert(false, \"unexpected number of arguments\");\r\n            }\r\n            _ASAN_VECTOR_CREATE;\r\n            _Guard._Target = nullptr;\r\n        }\r\n\r\n        _Proxy._Release();\r\n    }\r\n\r\n    _CONSTEXPR20 void _Move_assign_unequal_alloc(vector& _Right) {\r\n        auto& _Al         = _Getal();\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        auto& _Right_data = _Right._Mypair._Myval2;\r\n\r\n        const pointer _First = _Right_data._Myfirst;\r\n        const pointer _Last  = _Right_data._Mylast;\r\n        const auto _Newsize  = static_cast<size_type>(_Last - _First);\r\n\r\n        pointer& _Myfirst = _My_data._Myfirst;\r\n        pointer& _Mylast  = _My_data._Mylast;\r\n\r\n        constexpr bool _Nothrow_construct =\r\n            conjunction_v<is_nothrow_move_constructible<_Ty>, _Uses_default_construct<_Alloc, _Ty*, _Ty>>;\r\n\r\n        _My_data._Orphan_all();\r\n        const auto _Oldcapacity = static_cast<size_type>(_My_data._Myend - _Myfirst);\r\n        if (_Newsize > _Oldcapacity) {\r\n            _Clear_and_reserve_geometric(_Newsize);\r\n            if constexpr (_Nothrow_construct) {\r\n                _Mylast = _Uninitialized_move(_First, _Last, _Myfirst, _Al);\r\n                _ASAN_VECTOR_CREATE;\r\n            } else {\r\n                _ASAN_VECTOR_CREATE_GUARD;\r\n                _Mylast = _Uninitialized_move(_First, _Last, _Myfirst, _Al);\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        const auto _Oldsize = static_cast<size_type>(_Mylast - _Myfirst);\r\n        if (_Newsize > _Oldsize) {\r\n            const pointer _Mid = _First + _Oldsize;\r\n            _STD _Move_unchecked(_First, _Mid, _Myfirst);\r\n\r\n            if constexpr (_Nothrow_construct) {\r\n                _ASAN_VECTOR_MODIFY(static_cast<difference_type>(_Newsize - _Oldsize));\r\n                _Mylast = _Uninitialized_move(_Mid, _Last, _Mylast, _Al);\r\n            } else {\r\n                _ASAN_VECTOR_EXTEND_GUARD(_Newsize);\r\n                _Mylast = _Uninitialized_move(_Mid, _Last, _Mylast, _Al);\r\n                _ASAN_VECTOR_RELEASE_GUARD;\r\n            }\r\n        } else {\r\n            const pointer _Newlast = _Myfirst + _Newsize;\r\n            _STD _Move_unchecked(_First, _Last, _Myfirst);\r\n            _Destroy_range(_Newlast, _Mylast, _Al);\r\n            _ASAN_VECTOR_MODIFY(static_cast<difference_type>(_Newsize - _Oldsize));\r\n            _Mylast = _Newlast;\r\n        }\r\n    }\r\n\r\n    [[noreturn]] static void _Xlength() {\r\n        _Xlength_error(\"vector too long\");\r\n    }\r\n\r\n    [[noreturn]] static void _Xrange() {\r\n        _Xout_of_range(\"invalid vector subscript\");\r\n    }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    _CONSTEXPR20 void _Orphan_range_unlocked(pointer _First, pointer _Last) const {\r\n        _Iterator_base12** _Pnext = &_Mypair._Myval2._Myproxy->_Myfirstiter;\r\n        while (*_Pnext) {\r\n            const auto _Pnextptr = static_cast<const_iterator&>(**_Pnext)._Ptr;\r\n            const auto _Temp     = *_Pnext;\r\n            if (_Pnextptr < _First || _Last < _Pnextptr) { // skip the iterator\r\n                _Pnext = &_Temp->_Mynextiter;\r\n            } else { // orphan the iterator\r\n                _Temp->_Myproxy = nullptr;\r\n                *_Pnext         = _Temp->_Mynextiter;\r\n            }\r\n        }\r\n    }\r\n\r\n    void _Orphan_range_locked(pointer _First, pointer _Last) const {\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        _Orphan_range_unlocked(_First, _Last);\r\n    }\r\n\r\n    _CONSTEXPR20 void _Orphan_range(pointer _First, pointer _Last) const {\r\n        // orphan iterators within specified (inclusive) range\r\n#if _HAS_CXX20\r\n        if (_STD is_constant_evaluated()) {\r\n            _Orphan_range_unlocked(_First, _Last);\r\n        } else\r\n#endif // _HAS_CXX20\r\n        {\r\n            _Orphan_range_locked(_First, _Last);\r\n        }\r\n    }\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 2 / _ITERATOR_DEBUG_LEVEL != 2 vvv\r\n    _CONSTEXPR20 void _Orphan_range(pointer, pointer) const {}\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 2 ^^^\r\n\r\n    _NODISCARD _CONSTEXPR20 _Alty& _Getal() noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const _Alty& _Getal() const noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 iterator _Make_iterator(const pointer _Ptr) noexcept {\r\n        return iterator(_Ptr, _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 iterator _Make_iterator_offset(const size_type _Offset) noexcept {\r\n        // return the iterator begin() + _Offset without a debugging check\r\n        auto& _My_data = _Mypair._Myval2;\r\n        return iterator(_My_data._Myfirst + _Offset, _STD addressof(_My_data));\r\n    }\r\n\r\n    _Compressed_pair<_Alty, _Scary_val> _Mypair;\r\n};\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Iter, class _Alloc = allocator<_Iter_value_t<_Iter>>,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>>, int> = 0>\r\nvector(_Iter, _Iter, _Alloc = _Alloc()) -> vector<_Iter_value_t<_Iter>, _Alloc>;\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc = allocator<_RANGES range_value_t<_Rng>>>\r\nvector(from_range_t, _Rng&&, _Alloc = _Alloc()) -> vector<_RANGES range_value_t<_Rng>, _Alloc>;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Alloc>\r\nclass vector<bool, _Alloc>;\r\n\r\nusing _Vbase = unsigned int; // word type for vector<bool> representation\r\n\r\n_INLINE_VAR constexpr int _VBITS = 8 * sizeof(_Vbase); // at least CHAR_BITS bits per word\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 bool operator==(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right) {\r\n    if (_Left.size() != _Right.size()) {\r\n        return false;\r\n    }\r\n\r\n    if constexpr (is_same_v<_Ty, bool>) {\r\n        return _STD equal(\r\n            _Left._Myvec._Unchecked_begin(), _Left._Myvec._Unchecked_end(), _Right._Myvec._Unchecked_begin());\r\n    } else {\r\n        return _STD equal(_Left._Unchecked_begin(), _Left._Unchecked_end(), _Right._Unchecked_begin());\r\n    }\r\n}\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD bool operator!=(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n#endif // !_HAS_CXX20\r\n\r\n// Optimize vector<bool> lexicographical comparisons.\r\n\r\n// There are several endianness/ordering issues to consider here.\r\n// * Machine endianness is irrelevant. (That affects how an unsigned int is stored\r\n//   as a sequence of bytes. While all of our supported architectures are little-endian,\r\n//   that's irrelevant as long as we avoid reinterpreting unsigned int as a sequence of bytes.)\r\n// * Appending bits to vector<bool> eventually appends words to its underlying storage.\r\n//   For example, vb[10] is stored within vb._Myvec[0], while vb[100] is stored within vb._Myvec[3].\r\n//   This allows us to translate lexicographical comparisons from theoretical bits to physical words.\r\n// * Unsigned integers are written and compared as big-endian (most significant bit first).\r\n//   For example, 0x10u > 0x07u.\r\n// * However, vector<bool> packs bits into words as little-endian (least significant bit first).\r\n//   For example, vector<bool>{false, true, true, true} stores 0b0000'0000'0000'0000'0000'0000'0000'1110u.\r\n// We could bit-reverse words before comparing, but we just need to find the least significant bit that differs.\r\n\r\ntemplate <class _Ret>\r\nstruct _Vbase_compare_three_way {\r\n    _NODISCARD static constexpr _Ret operator()(const _Vbase _Left, const _Vbase _Right) noexcept {\r\n        const _Vbase _Differing_bits = _Left ^ _Right;\r\n\r\n        if (_Differing_bits == 0) { // improves _Countr_zero codegen below\r\n#if _HAS_CXX20\r\n            return strong_ordering::equal;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n            return 0;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n        }\r\n\r\n        const int _Bit_index = _Countr_zero(_Differing_bits); // number of least significant bits that match\r\n        _STL_INTERNAL_CHECK(_Bit_index < _VBITS); // because we return early for equality\r\n\r\n        const _Vbase _Mask = _Vbase{1} << _Bit_index; // selects the least significant bit that differs\r\n\r\n        // Instead of comparing (_Left & _Mask) to (_Right & _Mask), we know that exactly one side will be zero.\r\n#if _HAS_CXX20\r\n        return (_Left & _Mask) == 0 ? strong_ordering::less : strong_ordering::greater;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n        return (_Left & _Mask) == 0 ? -1 : 1;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n    }\r\n};\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty, class _Alloc>\r\n_NODISCARD constexpr _Synth_three_way_result<_Ty> operator<=>(\r\n    const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right) {\r\n    if constexpr (is_same_v<_Ty, bool>) {\r\n        // This optimization works because vector<bool> \"trims\" its underlying storage by zeroing out unused bits.\r\n        const auto _Min_word_size = (_STD min) (_Left._Myvec.size(), _Right._Myvec.size());\r\n        const auto _Left_words    = _Left._Myvec._Unchecked_begin();\r\n        const auto _Right_words   = _Right._Myvec._Unchecked_begin();\r\n\r\n        using _Comp = _Vbase_compare_three_way<strong_ordering>;\r\n\r\n        const strong_ordering _Word_comparison = _STD lexicographical_compare_three_way(\r\n            _Left_words, _Left_words + _Min_word_size, _Right_words, _Right_words + _Min_word_size, _Comp{});\r\n\r\n        if (_Word_comparison != 0) {\r\n            return _Word_comparison;\r\n        }\r\n\r\n        return _Left.size() <=> _Right.size();\r\n    } else {\r\n        return _STD lexicographical_compare_three_way(_Left._Unchecked_begin(), _Left._Unchecked_end(),\r\n            _Right._Unchecked_begin(), _Right._Unchecked_end(), _Synth_three_way{});\r\n    }\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 bool operator<(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right) {\r\n    if constexpr (is_same_v<_Ty, bool>) {\r\n        // This optimization works because vector<bool> \"trims\" its underlying storage by zeroing out unused bits.\r\n        auto _First = _Left._Myvec._Unchecked_begin();\r\n        auto _Other = _Right._Myvec._Unchecked_begin();\r\n\r\n        const auto _Last = _First + (_STD min) (_Left._Myvec.size(), _Right._Myvec.size());\r\n\r\n        for (; _First != _Last; ++_First, (void) ++_Other) {\r\n            using _Comp        = _Vbase_compare_three_way<signed char>;\r\n            const auto _Result = _Comp{}(*_First, *_Other);\r\n\r\n            if (_Result < 0) {\r\n                return true;\r\n            } else if (_Result > 0) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return _Left.size() < _Right.size();\r\n    } else {\r\n        return _STD lexicographical_compare(\r\n            _Left._Unchecked_begin(), _Left._Unchecked_end(), _Right._Unchecked_begin(), _Right._Unchecked_end());\r\n    }\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 bool operator>(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right) {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 bool operator<=(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right) {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 bool operator>=(const vector<_Ty, _Alloc>& _Left, const vector<_Ty, _Alloc>& _Right) {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc>\r\n_CONSTEXPR20 void swap(vector<_Ty, _Alloc>& _Left, vector<_Ty, _Alloc>& _Right) noexcept /* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty, class _Alloc, class _Uty>\r\nconstexpr vector<_Ty, _Alloc>::size_type erase(vector<_Ty, _Alloc>& _Cont, const _Uty& _Val) {\r\n    return _STD _Erase_remove(_Cont, _Val);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc, class _Pr>\r\nconstexpr vector<_Ty, _Alloc>::size_type erase_if(vector<_Ty, _Alloc>& _Cont, _Pr _Pred) {\r\n    return _STD _Erase_remove_if(_Cont, _STD _Pass_fn(_Pred));\r\n}\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Alloc0>\r\nstruct _Wrap_alloc { // TRANSITION, ABI compat, preserves symbol names of vector<bool>::iterator\r\n    using _Alloc = _Alloc0;\r\n};\r\n\r\ntemplate <class _Alvbase_wrapped>\r\nclass _Vb_iter_base : public _Iterator_base {\r\n    // store information common to reference and iterators\r\npublic:\r\n    using _Alvbase         = typename _Alvbase_wrapped::_Alloc;\r\n    using _Size_type       = typename allocator_traits<_Alvbase>::size_type;\r\n    using _Difference_type = typename allocator_traits<_Alvbase>::difference_type;\r\n    using _Mycont          = vector<bool, _Rebind_alloc_t<_Alvbase, bool>>;\r\n\r\n    static constexpr _Difference_type _VBITS_DIFF = _VBITS;\r\n\r\n    _CONSTEXPR20 _Vb_iter_base() = default;\r\n\r\n    _CONSTEXPR20 _Vb_iter_base(const _Vbase* _Ptr, _Size_type _Off, const _Container_base* _Mypvbool) noexcept\r\n        : _Myptr(_Ptr), _Myoff(_Off) {\r\n        this->_Adopt(_Mypvbool);\r\n    }\r\n\r\n    _CONSTEXPR20 void _Advance(_Size_type _Off) noexcept {\r\n        _Myoff += _Off;\r\n        _Myptr += _Myoff / _VBITS;\r\n        _Myoff %= _VBITS;\r\n    }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    _CONSTEXPR20 _Difference_type _Total_off(const _Mycont* _Cont) const noexcept {\r\n        return static_cast<_Difference_type>(_VBITS_DIFF * (_Myptr - _Cont->_Myvec.data()) + _Myoff);\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    const _Vbase* _Myptr = nullptr;\r\n    _Size_type _Myoff    = 0;\r\n};\r\n\r\ntemplate <class _Alvbase_wrapped>\r\nclass _Vb_reference : public _Vb_iter_base<_Alvbase_wrapped> {\r\n    // reference to a bit within a base word\r\nprivate:\r\n    using _Mybase          = _Vb_iter_base<_Alvbase_wrapped>;\r\n    using _Mycont          = typename _Mybase::_Mycont;\r\n    using _Difference_type = typename _Mybase::_Difference_type;\r\n\r\npublic:\r\n    _CONSTEXPR20 _Vb_reference(const _Vb_reference&) noexcept = default;\r\n\r\n    _CONSTEXPR20 _Vb_reference(const _Mybase& _Right) noexcept\r\n        : _Mybase(_Right._Myptr, _Right._Myoff, _Right._Getcont()) {}\r\n\r\n    _CONSTEXPR20 _Vb_reference& operator=(const _Vb_reference& _Right) noexcept {\r\n        return *this = static_cast<bool>(_Right);\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_reference& operator=(bool _Val) noexcept {\r\n        if (_Val) {\r\n            *const_cast<_Vbase*>(_Getptr()) |= _Mask();\r\n        } else {\r\n            *const_cast<_Vbase*>(_Getptr()) &= ~_Mask();\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 const _Vb_reference& operator=(bool _Val) const noexcept {\r\n        if (_Val) {\r\n            *const_cast<_Vbase*>(_Getptr()) |= _Mask();\r\n        } else {\r\n            *const_cast<_Vbase*>(_Getptr()) &= ~_Mask();\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 void flip() noexcept {\r\n        *const_cast<_Vbase*>(_Getptr()) ^= _Mask();\r\n    }\r\n\r\n    _CONSTEXPR20 operator bool() const noexcept {\r\n        return (*_Getptr() & _Mask()) != 0;\r\n    }\r\n\r\n    _CONSTEXPR20 const _Vbase* _Getptr() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Cont = static_cast<const _Mycont*>(this->_Getcont());\r\n        _STL_VERIFY(_Cont, \"cannot dereference value-initialized vector<bool> iterator\");\r\n        _STL_VERIFY(this->_Total_off(_Cont) <= static_cast<_Difference_type>(_Cont->_Mysize),\r\n            \"vector<bool> iterator not dereferenceable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return this->_Myptr;\r\n    }\r\n\r\n    friend _CONSTEXPR20 void swap(_Vb_reference _Left, _Vb_reference _Right) noexcept {\r\n        bool _Val = _Left; // NOT _STD swap\r\n        _Left     = _Right;\r\n        _Right    = _Val;\r\n    }\r\n\r\n    friend _CONSTEXPR20 void swap(_Vb_reference _Left, bool& _Right) noexcept {\r\n        bool _Val = _Left; // NOT _STD swap\r\n        _Left     = _Right;\r\n        _Right    = _Val;\r\n    }\r\n\r\n    friend _CONSTEXPR20 void swap(bool& _Left, _Vb_reference _Right) noexcept {\r\n        swap(_Right, _Left);\r\n    }\r\n\r\nprotected:\r\n    _CONSTEXPR20 _Vbase _Mask() const noexcept {\r\n        return static_cast<_Vbase>(1) << this->_Myoff;\r\n    }\r\n};\r\n\r\ntemplate <class _Alvbase_wrapped>\r\nclass _Vb_const_iterator : public _Vb_iter_base<_Alvbase_wrapped> {\r\npublic:\r\n    using _Mybase         = _Vb_iter_base<_Alvbase_wrapped>;\r\n    using _Mycont         = typename _Mybase::_Mycont;\r\n    using _Size_type      = typename _Mybase::_Size_type;\r\n    using _Reft           = _Vb_reference<_Alvbase_wrapped>;\r\n    using const_reference = bool;\r\n\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = bool;\r\n    using difference_type   = typename _Mybase::_Difference_type;\r\n    using pointer           = const_reference*;\r\n    using reference         = const_reference;\r\n\r\n    _CONSTEXPR20 _Vb_const_iterator() = default;\r\n\r\n    _CONSTEXPR20 _Vb_const_iterator(const _Vbase* _Ptr, const _Container_base* _Mypvbool) noexcept\r\n        : _Mybase(_Ptr, 0, _Mypvbool) {}\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reference operator*() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Cont = static_cast<const _Mycont*>(this->_Getcont());\r\n        _STL_VERIFY(_Cont, \"cannot dereference value-initialized vector<bool> iterator\");\r\n        _STL_VERIFY(this->_Total_off(_Cont) < static_cast<difference_type>(_Cont->_Mysize),\r\n            \"vector<bool> iterator not dereferenceable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return _Reft(*this);\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_const_iterator& operator++() noexcept {\r\n        _Inc();\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_const_iterator operator++(int) noexcept {\r\n        _Vb_const_iterator _Tmp = *this;\r\n        _Inc();\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_const_iterator& operator--() noexcept {\r\n        _Dec();\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_const_iterator operator--(int) noexcept {\r\n        _Vb_const_iterator _Tmp = *this;\r\n        _Dec();\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_const_iterator& operator+=(const difference_type _Off) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        if (_Off != 0) {\r\n            const auto _Cont = static_cast<const _Mycont*>(this->_Getcont());\r\n            _STL_VERIFY(_Cont, \"cannot seek value-initialized vector<bool> iterator\");\r\n            const auto _Start_offset = this->_Total_off(_Cont);\r\n            if (_Off < 0) {\r\n                _STL_VERIFY(-_Start_offset <= _Off, \"cannot seek vector<bool> iterator before begin\");\r\n            } else if (0 < _Off) {\r\n                _STL_VERIFY(_Off <= static_cast<difference_type>(_Cont->_Mysize - _Start_offset),\r\n                    \"cannot seek vector<bool> iterator after end\");\r\n            }\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        if (_Off < 0 && this->_Myoff < 0 - static_cast<_Size_type>(_Off)) { // add negative increment\r\n            this->_Myoff += static_cast<_Size_type>(_Off);\r\n            this->_Myptr -= 1 + (static_cast<_Size_type>(-1) - this->_Myoff) / _VBITS;\r\n            this->_Myoff %= _VBITS;\r\n        } else { // add non-negative increment\r\n            this->_Myoff += static_cast<_Size_type>(_Off);\r\n            this->_Myptr += this->_Myoff / _VBITS;\r\n            this->_Myoff %= _VBITS;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Vb_const_iterator operator+(const difference_type _Off) const noexcept {\r\n        _Vb_const_iterator _Tmp = *this;\r\n        _Tmp += _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD friend _CONSTEXPR20 _Vb_const_iterator operator+(\r\n        const difference_type _Off, _Vb_const_iterator _Right) noexcept {\r\n        _Right += _Off;\r\n        return _Right;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_const_iterator& operator-=(const difference_type _Off) noexcept {\r\n        return *this += -_Off;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Vb_const_iterator operator-(const difference_type _Off) const noexcept {\r\n        _Vb_const_iterator _Tmp = *this;\r\n        _Tmp -= _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 difference_type operator-(const _Vb_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return static_cast<difference_type>(_Mybase::_VBITS_DIFF * (this->_Myptr - _Right._Myptr))\r\n             + static_cast<difference_type>(this->_Myoff) - static_cast<difference_type>(_Right._Myoff);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reference operator[](const difference_type _Off) const noexcept {\r\n        return *(*this + _Off);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 bool operator==(const _Vb_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return this->_Myptr == _Right._Myptr && this->_Myoff == _Right._Myoff;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD constexpr strong_ordering operator<=>(const _Vb_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        if (const auto _CmpResult = this->_Myptr <=> _Right._Myptr; _CmpResult != 0) {\r\n            return _CmpResult;\r\n        }\r\n        return this->_Myoff <=> _Right._Myoff;\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD bool operator!=(const _Vb_const_iterator& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n\r\n    _NODISCARD bool operator<(const _Vb_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return this->_Myptr < _Right._Myptr || (this->_Myptr == _Right._Myptr && this->_Myoff < _Right._Myoff);\r\n    }\r\n\r\n    _NODISCARD bool operator>(const _Vb_const_iterator& _Right) const noexcept {\r\n        return _Right < *this;\r\n    }\r\n\r\n    _NODISCARD bool operator<=(const _Vb_const_iterator& _Right) const noexcept {\r\n        return !(_Right < *this);\r\n    }\r\n\r\n    _NODISCARD bool operator>=(const _Vb_const_iterator& _Right) const noexcept {\r\n        return !(*this < _Right);\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    _CONSTEXPR20 void _Compat(const _Vb_const_iterator& _Right) const noexcept {\r\n        // test for compatible iterator pair\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\n        (void) _Right;\r\n#else\r\n        _STL_VERIFY(this->_Getcont() == _Right._Getcont(), \"vector<bool> iterators incompatible\");\r\n#endif\r\n    }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    using _Prevent_inheriting_unwrap = _Vb_const_iterator;\r\n\r\n    friend _CONSTEXPR20 void _Verify_range(const _Vb_const_iterator& _First, const _Vb_const_iterator& _Last) noexcept {\r\n        // note _Compat check inside <=\r\n        _STL_VERIFY(_First <= _Last, \"vector<bool> iterator range transposed\");\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    _CONSTEXPR20 void _Dec() noexcept { // decrement bit position\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Cont = static_cast<const _Mycont*>(this->_Getcont());\r\n        _STL_VERIFY(_Cont, \"cannot decrement value-initialized vector<bool> iterator\");\r\n        _STL_VERIFY(this->_Total_off(_Cont) > 0, \"cannot decrement vector<bool> begin iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        if (this->_Myoff != 0) {\r\n            --this->_Myoff;\r\n        } else { // move to previous word\r\n            this->_Myoff = _VBITS - 1;\r\n            --this->_Myptr;\r\n        }\r\n    }\r\n\r\n    _CONSTEXPR20 void _Inc() noexcept { // increment bit position\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Cont = static_cast<const _Mycont*>(this->_Getcont());\r\n        _STL_VERIFY(_Cont, \"cannot increment value-initialized vector<bool> iterator\");\r\n        _STL_VERIFY(this->_Total_off(_Cont) < static_cast<difference_type>(_Cont->_Mysize),\r\n            \"cannot increment vector<bool> end iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        if (this->_Myoff < _VBITS - 1) {\r\n            ++this->_Myoff;\r\n        } else { // move to next word\r\n            this->_Myoff = 0;\r\n            ++this->_Myptr;\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Alvbase_wrapped>\r\nclass _Vb_iterator : public _Vb_const_iterator<_Alvbase_wrapped> {\r\npublic:\r\n    using _Mybase = _Vb_const_iterator<_Alvbase_wrapped>;\r\n    using _Mycont = typename _Mybase::_Mycont;\r\n\r\n    using _Reft           = _Vb_reference<_Alvbase_wrapped>;\r\n    using const_reference = bool;\r\n\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = bool;\r\n    using difference_type   = typename _Mybase::difference_type;\r\n    using pointer           = _Reft*;\r\n    using reference         = _Reft;\r\n\r\n    using _Mybase::_Mybase;\r\n\r\n    _NODISCARD _CONSTEXPR20 reference operator*() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Cont = static_cast<const _Mycont*>(this->_Getcont());\r\n        _STL_VERIFY(_Cont, \"cannot dereference value-initialized vector<bool> iterator\");\r\n        _STL_VERIFY(this->_Total_off(_Cont) < static_cast<difference_type>(_Cont->_Mysize),\r\n            \"vector<bool> iterator not dereferenceable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return _Reft(*this);\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_iterator& operator++() noexcept {\r\n        _Mybase::operator++();\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_iterator operator++(int) noexcept {\r\n        _Vb_iterator _Tmp = *this;\r\n        _Mybase::operator++();\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_iterator& operator--() noexcept {\r\n        _Mybase::operator--();\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_iterator operator--(int) noexcept {\r\n        _Vb_iterator _Tmp = *this;\r\n        _Mybase::operator--();\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_iterator& operator+=(const difference_type _Off) noexcept {\r\n        _Mybase::operator+=(_Off);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Vb_iterator operator+(const difference_type _Off) const noexcept {\r\n        _Vb_iterator _Tmp = *this;\r\n        _Tmp += _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD friend _CONSTEXPR20 _Vb_iterator operator+(const difference_type _Off, _Vb_iterator _Right) noexcept {\r\n        _Right += _Off;\r\n        return _Right;\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_iterator& operator-=(const difference_type _Off) noexcept {\r\n        _Mybase::operator-=(_Off);\r\n        return *this;\r\n    }\r\n\r\n    using _Mybase::operator-;\r\n\r\n    _NODISCARD _CONSTEXPR20 _Vb_iterator operator-(const difference_type _Off) const noexcept {\r\n        _Vb_iterator _Tmp = *this;\r\n        _Tmp -= _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reference operator[](const difference_type _Off) const noexcept {\r\n        return *(*this + _Off);\r\n    }\r\n\r\n    using _Prevent_inheriting_unwrap = _Vb_iterator;\r\n};\r\n\r\ntemplate <class _Alloc>\r\nclass _Vb_val : public _Container_base {\r\npublic:\r\n    using _Alvbase         = _Rebind_alloc_t<_Alloc, _Vbase>;\r\n    using _Alvbase_traits  = allocator_traits<_Alvbase>;\r\n    using _Vectype         = vector<_Vbase, _Alvbase>;\r\n    using _Alvbase_wrapped = _Wrap_alloc<_Alvbase>;\r\n    using size_type        = typename _Alvbase_traits::size_type;\r\n\r\n    _CONSTEXPR20 _Vb_val() noexcept(is_nothrow_default_constructible_v<_Vectype>) : _Myvec(), _Mysize(0) {\r\n        this->_Alloc_proxy(_STD _Get_proxy_allocator(_Getal()));\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_val(const _Alloc& _Al) noexcept : _Myvec(static_cast<_Alvbase>(_Al)), _Mysize(0) {\r\n        this->_Alloc_proxy(_STD _Get_proxy_allocator(_Getal()));\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_val(size_type _Count, const bool& _Val)\r\n        : _Myvec(_Nw(_Count), static_cast<_Vbase>(_Val ? -1 : 0)), _Mysize(0) {\r\n        this->_Alloc_proxy(_STD _Get_proxy_allocator(_Getal()));\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_val(size_type _Count, const bool& _Val, const _Alloc& _Al)\r\n        : _Myvec(_Nw(_Count), static_cast<_Vbase>(_Val ? -1 : 0), static_cast<_Alvbase>(_Al)), _Mysize(0) {\r\n        this->_Alloc_proxy(_STD _Get_proxy_allocator(_Getal()));\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_val(const _Vb_val& _Right) : _Myvec(_Right._Myvec), _Mysize(_Right._Mysize) {\r\n        this->_Alloc_proxy(_STD _Get_proxy_allocator(_Getal()));\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_val(const _Vb_val& _Right, const _Alloc& _Al)\r\n        : _Myvec(_Right._Myvec, static_cast<_Alvbase>(_Al)), _Mysize(_Right._Mysize) {\r\n        this->_Alloc_proxy(_STD _Get_proxy_allocator(_Getal()));\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_val(_Vb_val&& _Right) noexcept(is_nothrow_move_constructible_v<_Vectype>)\r\n        : _Myvec(_STD move(_Right._Myvec)), _Mysize(_STD exchange(_Right._Mysize, size_type{0})) {\r\n        this->_Alloc_proxy(_STD _Get_proxy_allocator(_Getal()));\r\n    }\r\n\r\n    _CONSTEXPR20 _Vb_val(_Vb_val&& _Right, const _Alloc& _Al)\r\n        noexcept(is_nothrow_constructible_v<_Vectype, _Vectype, _Alvbase>)\r\n        : _Myvec(_STD move(_Right._Myvec), static_cast<_Alvbase>(_Al)), _Mysize(_Right._Mysize) {\r\n        if (_Right._Myvec.empty()) {\r\n            // we took _Right's buffer, so zero out size\r\n            _Right._Mysize = 0;\r\n        }\r\n\r\n        this->_Alloc_proxy(_STD _Get_proxy_allocator(_Getal()));\r\n    }\r\n\r\n    _CONSTEXPR20 ~_Vb_val() noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        this->_Orphan_all();\r\n        auto _Alproxy = _STD _Get_proxy_allocator(_Getal());\r\n        _Delete_plain_internal(_Alproxy, _STD exchange(this->_Myproxy, nullptr));\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n        // Destroying _Myvec will store tombstones in its pointers, setting its apparent size to 0.\r\n        // We should also set our _Mysize to 0 for consistency, allowing precondition hardening to detect UB earlier.\r\n        _Mysize = 0;\r\n#endif\r\n    }\r\n\r\n    _CONSTEXPR20 _Alvbase& _Getal() noexcept {\r\n        return _Myvec._Getal();\r\n    }\r\n\r\n    _CONSTEXPR20 const _Alvbase& _Getal() const noexcept {\r\n        return _Myvec._Getal();\r\n    }\r\n\r\n    static _CONSTEXPR20 size_type _Nw(size_type _Count) noexcept {\r\n        return (_Count + _VBITS - 1) / _VBITS;\r\n    }\r\n\r\n    _CONSTEXPR20 void _Emplace_back_unchecked(const _Vbase _Val) noexcept {\r\n        _STL_INTERNAL_CHECK(_Myvec.size() < _Myvec.capacity());\r\n        _Myvec._Emplace_back_with_unused_capacity(_Val);\r\n    }\r\n\r\n    _Vectype _Myvec; // base vector of words\r\n    size_type _Mysize; // current length of sequence\r\n};\r\n\r\ntemplate <class _Alloc>\r\nclass vector<bool, _Alloc> : public _Vb_val<_Alloc> {\r\npublic:\r\n    static_assert(!_ENFORCE_MATCHING_ALLOCATORS || is_same_v<bool, typename _Alloc::value_type>,\r\n        _MISMATCHED_ALLOCATOR_MESSAGE(\"vector<bool, Allocator>\", \"bool\"));\r\n\r\n    using _Mybase          = _Vb_val<_Alloc>;\r\n    using _Alvbase_wrapped = typename _Mybase::_Alvbase_wrapped;\r\n    using _Alvbase         = typename _Mybase::_Alvbase;\r\n    using _Alvbase_traits  = typename _Mybase::_Alvbase_traits;\r\n\r\n    using size_type       = typename _Alvbase_traits::size_type;\r\n    using difference_type = typename _Alvbase_traits::difference_type;\r\n    using allocator_type  = _Alloc;\r\n\r\n    using reference       = _Vb_reference<_Alvbase_wrapped>;\r\n    using const_reference = bool;\r\n    using value_type      = bool;\r\n\r\n    using _Reft          = reference;\r\n    using iterator       = _Vb_iterator<_Alvbase_wrapped>;\r\n    using const_iterator = _Vb_const_iterator<_Alvbase_wrapped>;\r\n\r\n    using pointer                = iterator;\r\n    using const_pointer          = const_iterator;\r\n    using reverse_iterator       = _STD reverse_iterator<iterator>;\r\n    using const_reverse_iterator = _STD reverse_iterator<const_iterator>;\r\n\r\n    enum { _EEN_VBITS = _VBITS }; // helper for expression evaluator\r\n\r\n    _CONSTEXPR20 vector() noexcept(is_nothrow_default_constructible_v<_Alloc>) : _Mybase(_Alloc()) {}\r\n\r\n    _CONSTEXPR20 explicit vector(const _Alloc& _Al) noexcept : _Mybase(_Al) {}\r\n\r\n    _CONSTEXPR20 explicit vector(_CRT_GUARDOVERFLOW size_type _Count, const _Alloc& _Al = _Alloc())\r\n        : _Mybase(_Count, false, _Al) {\r\n        _Trim(_Count);\r\n    }\r\n\r\n    _CONSTEXPR20 vector(_CRT_GUARDOVERFLOW size_type _Count, const bool& _Val, const _Alloc& _Al = _Alloc())\r\n        : _Mybase(_Count, _Val, _Al) {\r\n        _Trim(_Count);\r\n    }\r\n\r\n    _CONSTEXPR20 vector(const vector& _Right) : _Mybase(_Right) {}\r\n\r\n    _CONSTEXPR20 vector(const vector& _Right, const _Identity_t<_Alloc>& _Al) : _Mybase(_Right, _Al) {}\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    _CONSTEXPR20 vector(_Iter _First, _Iter _Last, const _Alloc& _Al = _Alloc()) : _Mybase(_Al) {\r\n        insert(begin(), _First, _Last);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<bool> _Rng>\r\n    constexpr vector(from_range_t, _Rng&& _Range, const _Alloc& _Al = _Alloc()) : _Mybase(_Al) {\r\n        if constexpr (_RANGES forward_range<_Rng> || _RANGES sized_range<_Rng>) {\r\n            const auto _Length = _To_unsigned_like(_RANGES distance(_Range));\r\n            const auto _Count  = _Convert_size<size_type>(_Length);\r\n            _Assign_counted_range(_RANGES _Ubegin(_Range), _Count);\r\n        } else {\r\n            _Assign_uncounted_range(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 vector(vector&& _Right) noexcept : _Mybase(_STD move(_Right)) {\r\n        this->_Swap_proxy_and_iterators(_Right);\r\n    }\r\n\r\n    _CONSTEXPR20 vector(vector&& _Right, const _Identity_t<_Alloc>& _Al)\r\n        noexcept(is_nothrow_constructible_v<_Mybase, _Mybase, const _Alloc&>) // strengthened\r\n        : _Mybase(_STD move(_Right), _Al) {\r\n        if constexpr (!_Alvbase_traits::is_always_equal::value) {\r\n            if (this->_Getal() != _Right._Getal()) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        this->_Swap_proxy_and_iterators(_Right);\r\n    }\r\n\r\n    _CONSTEXPR20 vector& operator=(vector&& _Right)\r\n        noexcept(_Choose_pocma_v<_Alvbase> != _Pocma_values::_No_propagate_allocators) {\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\n        this->_Myvec  = _STD move(_Right._Myvec);\r\n        this->_Mysize = _STD exchange(_Right._Mysize, size_type{0});\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 0 / _ITERATOR_DEBUG_LEVEL != 0 vvv\r\n        this->_Orphan_all();\r\n        auto& _Al                 = this->_Getal();\r\n        auto& _Right_al           = _Right._Getal();\r\n        constexpr auto _Pocma_val = _Choose_pocma_v<_Alvbase>;\r\n        if constexpr (_Pocma_val == _Pocma_values::_Propagate_allocators) {\r\n            using _Alproxy_type = _Rebind_alloc_t<_Alvbase, _Container_proxy>;\r\n            if (_Al != _Right_al) { // reload proxy\r\n                // intentionally slams into noexcept on OOM, TRANSITION, VSO-466800\r\n                _Alproxy_type _Oldal(_Al);\r\n                _Alproxy_type _Right_proxy_al(_Right_al);\r\n                _Container_proxy_ptr<_Alvbase> _Proxy(_Right_proxy_al, _Leave_proxy_unbound{});\r\n                this->_Myvec  = _STD move(_Right._Myvec);\r\n                this->_Mysize = _STD exchange(_Right._Mysize, size_type{0});\r\n                _Proxy._Bind(_Oldal, this);\r\n                this->_Swap_proxy_and_iterators(_Right);\r\n                return *this;\r\n            }\r\n        } else if constexpr (_Pocma_val == _Pocma_values::_No_propagate_allocators) {\r\n            this->_Myvec  = _STD move(_Right._Myvec);\r\n            this->_Mysize = _Right._Mysize;\r\n            if (_Right._Myvec.empty()) {\r\n                // we took _Right's buffer, so zero out size\r\n                _Right._Mysize = 0;\r\n            }\r\n\r\n            if (_Al == _Right_al) {\r\n                this->_Swap_proxy_and_iterators(_Right);\r\n            }\r\n            return *this;\r\n        }\r\n\r\n        this->_Myvec  = _STD move(_Right._Myvec);\r\n        this->_Mysize = _STD exchange(_Right._Mysize, size_type{0});\r\n        this->_Swap_proxy_and_iterators(_Right);\r\n\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 0 ^^^\r\n        return *this;\r\n    }\r\n\r\n    template <class... _Valty>\r\n    _CONSTEXPR20 _CONTAINER_EMPLACE_RETURN emplace_back(_Valty&&... _Val) {\r\n        bool _Tmp(_STD forward<_Valty>(_Val)...);\r\n        push_back(_Tmp);\r\n\r\n#if _HAS_CXX17\r\n        return back();\r\n#endif // _HAS_CXX17\r\n    }\r\n\r\n    template <class... _Valty>\r\n    _CONSTEXPR20 iterator emplace(const_iterator _Where, _Valty&&... _Val) {\r\n        bool _Tmp(_STD forward<_Valty>(_Val)...);\r\n        return insert(_Where, _Tmp);\r\n    }\r\n\r\n    _CONSTEXPR20 vector(initializer_list<bool> _Ilist, const _Alloc& _Al = allocator_type()) : _Mybase(0, false, _Al) {\r\n        insert(begin(), _Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\n    _CONSTEXPR20 vector& operator=(initializer_list<bool> _Ilist) {\r\n        assign(_Ilist.begin(), _Ilist.end());\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 void assign(initializer_list<bool> _Ilist) {\r\n        assign(_Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\n    _CONSTEXPR20 iterator insert(const_iterator _Where, initializer_list<bool> _Ilist) {\r\n        return insert(_Where, _Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\n    _CONSTEXPR20 ~vector() noexcept {}\r\n\r\n    _CONSTEXPR20 vector& operator=(const vector& _Right) {\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\n        this->_Myvec  = _Right._Myvec;\r\n        this->_Mysize = _Right._Mysize;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 0 / _ITERATOR_DEBUG_LEVEL != 0 vvv\r\n        this->_Orphan_all();\r\n        auto& _Al       = this->_Getal();\r\n        auto& _Right_al = _Right._Getal();\r\n        if constexpr (_Choose_pocca_v<_Alvbase>) {\r\n            if (_Al != _Right_al) {\r\n                // reload proxy\r\n                using _Alproxy_type = _Rebind_alloc_t<_Alvbase, _Container_proxy>;\r\n                _Alproxy_type _Oldal(_Al);\r\n                _Alproxy_type _Right_proxy_al(_Right_al);\r\n                _Container_proxy_ptr<_Alvbase> _Proxy(_Right_proxy_al, _Leave_proxy_unbound{});\r\n                this->_Myvec  = _Right._Myvec;\r\n                this->_Mysize = _Right._Mysize;\r\n                _Proxy._Bind(_Oldal, this);\r\n                return *this;\r\n            }\r\n        }\r\n\r\n        this->_Myvec  = _Right._Myvec;\r\n        this->_Mysize = _Right._Mysize;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 0 ^^^\r\n\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 void reserve(_CRT_GUARDOVERFLOW size_type _Count) {\r\n        this->_Myvec.reserve(this->_Nw(_Count));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type capacity() const noexcept {\r\n        return this->_Myvec.capacity() * _VBITS;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 iterator begin() noexcept {\r\n        return iterator(this->_Myvec.data(), this);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_iterator begin() const noexcept {\r\n        return const_iterator(this->_Myvec.data(), this);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 iterator end() noexcept {\r\n        return begin() + static_cast<difference_type>(this->_Mysize);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_iterator end() const noexcept {\r\n        return begin() + static_cast<difference_type>(this->_Mysize);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_iterator cbegin() const noexcept {\r\n        return begin();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_iterator cend() const noexcept {\r\n        return end();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reverse_iterator crbegin() const noexcept {\r\n        return rbegin();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reverse_iterator crend() const noexcept {\r\n        return rend();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 iterator _Unchecked_begin() noexcept {\r\n        return iterator(this->_Myvec.data(), this);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_iterator _Unchecked_begin() const noexcept {\r\n        return const_iterator(this->_Myvec.data(), this);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 iterator _Unchecked_end() noexcept {\r\n        return _Unchecked_begin() + static_cast<difference_type>(this->_Mysize);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_iterator _Unchecked_end() const noexcept {\r\n        return _Unchecked_begin() + static_cast<difference_type>(this->_Mysize);\r\n    }\r\n\r\n    _CONSTEXPR20 void shrink_to_fit() {\r\n        if (this->_Myvec.capacity() != this->_Myvec.size()) {\r\n            this->_Orphan_all();\r\n            this->_Myvec.shrink_to_fit();\r\n        }\r\n    }\r\n\r\n    _CONSTEXPR20 iterator _Make_iter(const_iterator _Where) noexcept {\r\n        iterator _Tmp = begin();\r\n        if (0 < this->_Mysize) {\r\n            _Tmp += _Where - begin();\r\n        }\r\n\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reverse_iterator rbegin() noexcept {\r\n        return reverse_iterator(end());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reverse_iterator rbegin() const noexcept {\r\n        return const_reverse_iterator(end());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reverse_iterator rend() noexcept {\r\n        return reverse_iterator(begin());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reverse_iterator rend() const noexcept {\r\n        return const_reverse_iterator(begin());\r\n    }\r\n\r\n    _CONSTEXPR20 void resize(_CRT_GUARDOVERFLOW size_type _Newsize, bool _Val = false) {\r\n        if (size() < _Newsize) {\r\n            _Insert_n(end(), _Newsize - size(), _Val);\r\n        } else if (_Newsize < size()) {\r\n            erase(begin() + static_cast<difference_type>(_Newsize), end());\r\n        }\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type size() const noexcept {\r\n        return this->_Mysize;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type max_size() const noexcept {\r\n        constexpr auto _Diff_max  = static_cast<size_type>(_STD _Max_limit<difference_type>());\r\n        const size_type _Ints_max = this->_Myvec.max_size();\r\n\r\n        // Use a const bool to avoid warning C4127 \"conditional expression is constant\" with Defect Report P2280R4\r\n        const bool _Would_overflow = _Ints_max > _Diff_max / _VBITS;\r\n        if (_Would_overflow) { // max_size bound by difference_type limits\r\n            return _Diff_max;\r\n        }\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 26450) // TRANSITION, VSO-2565428\r\n        // max_size bound by underlying storage limits\r\n        return static_cast<size_type>(_Ints_max * _VBITS);\r\n#pragma warning(pop)\r\n    }\r\n\r\n    _NODISCARD_EMPTY_MEMBER _CONSTEXPR20 bool empty() const noexcept {\r\n        return this->_Mysize == 0;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 allocator_type get_allocator() const noexcept {\r\n        return static_cast<allocator_type>(this->_Myvec.get_allocator());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reference at(size_type _Off) const {\r\n        if (size() <= _Off) {\r\n            _Xran();\r\n        }\r\n\r\n        return (*this)[_Off];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reference at(size_type _Off) {\r\n        if (size() <= _Off) {\r\n            _Xran();\r\n        }\r\n\r\n        return (*this)[_Off];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reference operator[](size_type _Off) const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_VECTOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Off < this->_Mysize, \"vector<bool> subscript out of range\");\r\n#endif\r\n\r\n        const_iterator _It = begin();\r\n        _It._Advance(_Off);\r\n        return *_It;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reference operator[](size_type _Off) noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_VECTOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Off < this->_Mysize, \"vector<bool> subscript out of range\");\r\n#endif\r\n\r\n        iterator _It = begin();\r\n        _It._Advance(_Off);\r\n        return *_It;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reference front() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_VECTOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(this->_Mysize != 0, \"front() called on empty vector<bool>\");\r\n#endif\r\n\r\n        return *begin();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reference front() const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_VECTOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(this->_Mysize != 0, \"front() called on empty vector<bool>\");\r\n#endif\r\n\r\n        return *begin();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reference back() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_VECTOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(this->_Mysize != 0, \"back() called on empty vector<bool>\");\r\n#endif\r\n\r\n        return *(end() - 1);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reference back() const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_VECTOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(this->_Mysize != 0, \"back() called on empty vector<bool>\");\r\n#endif\r\n\r\n        return *(end() - 1);\r\n    }\r\n\r\n    _CONSTEXPR20 void push_back(const bool& _Val) {\r\n        insert(end(), _Val);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<bool> _Rng>\r\n    constexpr void append_range(_Rng&& _Range) {\r\n        insert_range(end(), _STD forward<_Rng>(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 void pop_back() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_VECTOR || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(this->_Mysize != 0, \"pop_back() called on empty vector<bool>\");\r\n#endif\r\n\r\n        erase(end() - 1);\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    _CONSTEXPR20 void assign(_Iter _First, _Iter _Last) {\r\n        clear();\r\n        insert(begin(), _First, _Last);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _Iter>\r\n    constexpr void _Assign_counted_range(_Iter _First, const size_type _Count) {\r\n        _STL_INTERNAL_CHECK(this->_Myvec.empty());\r\n        this->_Myvec.reserve(this->_Nw(_Count));\r\n        _Vbase _Accum = 0;\r\n        _Vbase _Mask  = 1;\r\n        for (size_type _Idx = 0; _Idx < _Count; ++_Idx) {\r\n            const bool _Tmp = *_First;\r\n            ++_First;\r\n            _Accum |= _Tmp ? _Mask : _Vbase{0};\r\n            if ((_Mask <<= 1) == 0) {\r\n                this->_Emplace_back_unchecked(_Accum);\r\n                _Accum = 0;\r\n                _Mask  = 1;\r\n            }\r\n        }\r\n\r\n        if (_Count % _VBITS != 0) {\r\n            this->_Emplace_back_unchecked(_Accum);\r\n        }\r\n        this->_Mysize = _Count;\r\n    }\r\n\r\n    template <class _Iter, class _Sent>\r\n    constexpr void _Assign_uncounted_range(_Iter _First, const _Sent _Last) {\r\n        _STL_INTERNAL_CHECK(this->_Myvec.empty());\r\n        size_type _Count = 0;\r\n        _Vbase _Accum    = 0;\r\n        _Vbase _Mask     = 1;\r\n        for (; _First != _Last; ++_Count) {\r\n            const bool _Tmp = *_First;\r\n            ++_First;\r\n            _Accum |= _Tmp ? _Mask : _Vbase{0};\r\n            if ((_Mask <<= 1) == 0) {\r\n                this->_Myvec.push_back(_Accum);\r\n                _Accum = 0;\r\n                _Mask  = 1;\r\n            }\r\n        }\r\n\r\n        if (_Count % _VBITS != 0) {\r\n            this->_Myvec.push_back(_Accum);\r\n        }\r\n        this->_Mysize = _Count;\r\n    }\r\n\r\n    template <_Container_compatible_range<bool> _Rng>\r\n    constexpr void assign_range(_Rng&& _Range) {\r\n        static_assert(assignable_from<bool&, _RANGES range_reference_t<_Rng>>,\r\n            \"Elements must be assignable from the range's reference type (N4993 [sequence.reqmts]/60).\");\r\n        clear();\r\n        if constexpr (_RANGES forward_range<_Rng> || _RANGES sized_range<_Rng>) {\r\n            const auto _Length = _To_unsigned_like(_RANGES distance(_Range));\r\n            const auto _Count  = _Convert_size<size_type>(_Length);\r\n            _Assign_counted_range(_RANGES _Ubegin(_Range), _Count);\r\n        } else {\r\n            _Assign_uncounted_range(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 void assign(_CRT_GUARDOVERFLOW size_type _Count, const bool& _Val) {\r\n        clear();\r\n        _Insert_n(begin(), _Count, _Val);\r\n    }\r\n\r\n    _CONSTEXPR20 iterator insert(const_iterator _Where, const bool& _Val) {\r\n        return _Insert_n(_Where, size_type{1}, _Val);\r\n    }\r\n\r\n    _CONSTEXPR20 iterator insert(const_iterator _Where, _CRT_GUARDOVERFLOW size_type _Count, const bool& _Val) {\r\n        return _Insert_n(_Where, _Count, _Val);\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    _CONSTEXPR20 iterator insert(const_iterator _Where, _Iter _First, _Iter _Last) {\r\n        const difference_type _Saved_offset = _Where - begin();\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        auto _UFirst      = _STD _Get_unwrapped(_First);\r\n        const auto _ULast = _STD _Get_unwrapped(_Last);\r\n\r\n        if constexpr (_Is_cpp17_fwd_iter_v<_Iter>) {\r\n            const auto _Length = static_cast<size_t>(_STD distance(_UFirst, _ULast));\r\n            const auto _Count  = _STD _Convert_size<size_type>(_Length);\r\n            const auto _Off    = static_cast<difference_type>(_Insert_x(_Where, _Count));\r\n            _STD _Copy_unchecked(_UFirst, _ULast, begin() + _Off);\r\n#if _HAS_CXX20\r\n        } else if constexpr (forward_iterator<_Iter>) {\r\n            const auto _Length = _STD _To_unsigned_like(_RANGES distance(_UFirst, _ULast));\r\n            const auto _Count  = _STD _Convert_size<size_type>(_Length);\r\n            const auto _Off    = static_cast<difference_type>(_Insert_x(_Where, _Count));\r\n            _STD _Copy_unchecked(_UFirst, _ULast, begin() + _Off);\r\n#endif // _HAS_CXX20\r\n        } else {\r\n            const auto _Old_size = this->_Mysize;\r\n            for (; _UFirst != _ULast; ++_UFirst) {\r\n                emplace_back(*_UFirst);\r\n            }\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n            _Orphan_range(static_cast<size_type>(_Saved_offset), _Old_size);\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n            _STD rotate(begin() + _Saved_offset, begin() + static_cast<difference_type>(_Old_size), end());\r\n        }\r\n\r\n        return begin() + _Saved_offset;\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<bool> _Rng>\r\n    constexpr iterator insert_range(const_iterator _Where, _Rng&& _Range) {\r\n        const difference_type _Old_off = _Where - begin();\r\n\r\n        if constexpr (_RANGES forward_range<_Rng> || _RANGES sized_range<_Rng>) {\r\n            const auto _Length = _To_unsigned_like(_RANGES distance(_Range));\r\n            const auto _Count  = _Convert_size<size_type>(_Length);\r\n            const auto _Off    = static_cast<difference_type>(_Insert_x(_Where, _Count));\r\n            _Copy_n_unchecked4(_RANGES _Ubegin(_Range), _Count, begin() + _Off);\r\n        } else {\r\n            auto _UFirst         = _RANGES _Ubegin(_Range);\r\n            const auto _ULast    = _RANGES _Uend(_Range);\r\n            const auto _Old_size = this->_Mysize;\r\n            for (; _UFirst != _ULast; ++_UFirst) {\r\n                emplace_back(*_UFirst);\r\n            }\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n            _Orphan_range(static_cast<size_type>(_Old_off), _Old_size);\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n            _STD rotate(begin() + _Old_off, begin() + static_cast<difference_type>(_Old_size), end());\r\n        }\r\n\r\n        return begin() + _Old_off;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 iterator erase(const_iterator _Where_arg) noexcept /* strengthened */ {\r\n        iterator _Where      = _Make_iter(_Where_arg);\r\n        difference_type _Off = _Where - begin();\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(end() > _Where, \"vector<bool> erase iterator outside range\");\r\n#endif\r\n\r\n        _STD copy(_Next_iter(_Where), end(), _Where);\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _Orphan_range(static_cast<size_type>(_Off), this->_Mysize);\r\n#endif\r\n\r\n        _Trim(this->_Mysize - 1);\r\n        return begin() + _Off;\r\n    }\r\n\r\n    _CONSTEXPR20 iterator erase(const_iterator _First_arg, const_iterator _Last_arg) noexcept /* strengthened */ {\r\n        iterator _First      = _Make_iter(_First_arg);\r\n        iterator _Last       = _Make_iter(_Last_arg);\r\n        difference_type _Off = _First - begin();\r\n\r\n        if (_First != _Last) { // worth doing, copy down over hole\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n            _STL_VERIFY(_Last >= _First && end() >= _Last, \"vector<bool> erase iterator outside range\");\r\n#endif\r\n\r\n            iterator _Next      = _STD copy(_Last, end(), _First);\r\n            const auto _Newsize = static_cast<size_type>(_Next - begin());\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n            _Orphan_range(_Newsize, this->_Mysize);\r\n#endif\r\n\r\n            _Trim(_Newsize);\r\n        }\r\n        return begin() + _Off;\r\n    }\r\n\r\n    _CONSTEXPR20 void clear() noexcept {\r\n        this->_Orphan_all();\r\n        this->_Myvec.clear();\r\n        this->_Mysize = 0;\r\n    }\r\n\r\n    _CONSTEXPR20 void flip() noexcept { // toggle all elements\r\n        for (auto& _Elem : this->_Myvec) {\r\n            _Elem = ~_Elem;\r\n        }\r\n\r\n        _Trim(this->_Mysize);\r\n    }\r\n\r\n    _CONSTEXPR20 void swap(vector& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            this->_Swap_proxy_and_iterators(_Right);\r\n            this->_Myvec.swap(_Right._Myvec);\r\n            _STD swap(this->_Mysize, _Right._Mysize);\r\n        }\r\n    }\r\n\r\n    _DEPRECATE_VECTOR_BOOL_STATIC_REFERENCE_SWAP\r\n    static _CONSTEXPR20 void swap(reference _Left, reference _Right) noexcept {\r\n        bool _Val = _Left; // NOT _STD swap\r\n        _Left     = _Right;\r\n        _Right    = _Val;\r\n    }\r\n\r\n    friend hash<vector<bool, _Alloc>>;\r\n\r\n    _CONSTEXPR20 iterator _Insert_n(const_iterator _Where, size_type _Count, const bool& _Val) {\r\n        size_type _Off     = _Insert_x(_Where, _Count);\r\n        const auto _Result = begin() + static_cast<difference_type>(_Off);\r\n        _STD fill_n(_Result, _Count, _Val);\r\n        return _Result;\r\n    }\r\n\r\n    _CONSTEXPR20 size_type _Insert_x(const_iterator _Where, size_type _Count) {\r\n        const difference_type _Off = _Where - begin();\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(end() >= _Where, \"vector<bool> insert iterator outside range\");\r\n        const bool _Realloc = capacity() - size() < _Count;\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        if (_Count != 0) {\r\n            if (max_size() - size() < _Count) {\r\n                _Xlen(); // result too long\r\n            }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n            _Orphan_range(static_cast<size_type>(_Realloc ? 0 : _Off), this->_Mysize);\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n            this->_Myvec.resize(this->_Nw(size() + _Count), 0);\r\n            if (empty()) {\r\n                this->_Mysize += _Count;\r\n            } else { // make room and copy down suffix\r\n                iterator _Oldend = end();\r\n                this->_Mysize += _Count;\r\n                _STD copy_backward(begin() + _Off, _Oldend, end());\r\n            }\r\n        }\r\n\r\n        return static_cast<size_type>(_Off);\r\n    }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    _CONSTEXPR20 void _Orphan_range_unlocked(size_type _Offlo, size_type _Offhi) const {\r\n        const auto _Base = this->_Myvec.data();\r\n\r\n        _Iterator_base12** _Pnext = &this->_Myproxy->_Myfirstiter;\r\n        while (*_Pnext) { // test offset from beginning of vector\r\n            const auto& _Pnextiter = static_cast<typename const_iterator::_Mybase&>(**_Pnext);\r\n            const auto _Temp       = *_Pnext;\r\n            if (!_Pnextiter._Myptr) { // orphan the iterator\r\n                _Temp->_Myproxy = nullptr;\r\n                *_Pnext         = _Temp->_Mynextiter;\r\n                continue;\r\n            }\r\n            const auto _Off =\r\n                static_cast<size_type>(const_iterator::_VBITS_DIFF * (_Pnextiter._Myptr - _Base)) + _Pnextiter._Myoff;\r\n            if (_Off < _Offlo || _Offhi < _Off) {\r\n                _Pnext = &_Temp->_Mynextiter;\r\n            } else { // orphan the iterator\r\n                _Temp->_Myproxy = nullptr;\r\n                *_Pnext         = _Temp->_Mynextiter;\r\n            }\r\n        }\r\n    }\r\n\r\n    void _Orphan_range_locked(size_type _Offlo, size_type _Offhi) const {\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        _Orphan_range_unlocked(_Offlo, _Offhi);\r\n    }\r\n\r\n    _CONSTEXPR20 void _Orphan_range(size_type _Offlo, size_type _Offhi) const {\r\n#if _HAS_CXX20\r\n        if (_STD is_constant_evaluated()) {\r\n            _Orphan_range_unlocked(_Offlo, _Offhi);\r\n        } else\r\n#endif // _HAS_CXX20\r\n        {\r\n            _Orphan_range_locked(_Offlo, _Offhi);\r\n        }\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n    _CONSTEXPR20 void _Trim(size_type _Size) {\r\n        if (max_size() < _Size) {\r\n            _Xlen(); // result too long\r\n        }\r\n\r\n        const size_type _Words = this->_Nw(_Size);\r\n        if (_Words < this->_Myvec.size()) {\r\n            this->_Myvec.erase(this->_Myvec.begin() + static_cast<difference_type>(_Words), this->_Myvec.end());\r\n        }\r\n\r\n        this->_Mysize = _Size;\r\n        _Size %= _VBITS;\r\n        if (0 < _Size) {\r\n            this->_Myvec[_Words - 1] &= (static_cast<_Vbase>(1) << _Size) - 1;\r\n        }\r\n    }\r\n\r\n    [[noreturn]] static void _Xlen() {\r\n        _Xlength_error(\"vector<bool> too long\");\r\n    }\r\n\r\n    [[noreturn]] static void _Xran() {\r\n        _Xout_of_range(\"invalid vector<bool> subscript\");\r\n    }\r\n};\r\n\r\ntemplate <class _Alloc>\r\nstruct hash<vector<bool, _Alloc>> {\r\n    using _ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = vector<bool, _Alloc>;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS   = size_t;\r\n\r\n    _NODISCARD static size_t operator()(const vector<bool, _Alloc>& _Keyval) noexcept {\r\n        return _Hash_array_representation(_Keyval._Myvec.data(), _Keyval._Myvec.size());\r\n    }\r\n};\r\n\r\n#if _HAS_CXX17\r\nnamespace pmr {\r\n    _EXPORT_STD template <class _Ty>\r\n    using vector = _STD vector<_Ty, polymorphic_allocator<_Ty>>;\r\n} // namespace pmr\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\n// Per LWG-3997, `_CharT` in library-provided `formatter` specializations is\r\n// constrained to character types supported by `format`.\r\ntemplate <class _Ty, _Format_supported_charT _CharT>\r\n    requires _Is_specialization_v<_Ty, _Vb_reference>\r\nstruct formatter<_Ty, _CharT> {\r\nprivate:\r\n    formatter<bool, _CharT> _Underlying;\r\n\r\npublic:\r\n    template <class _ParseContext>\r\n    constexpr _ParseContext::iterator parse(_ParseContext& _Ctx) {\r\n        return _Underlying.parse(_Ctx);\r\n    }\r\n\r\n    template <class _FormatContext>\r\n    _FormatContext::iterator format(const _Ty& _Ref, _FormatContext& _Ctx) const {\r\n        return _Underlying.format(_Ref, _Ctx);\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\n    requires _Is_specialization_v<_Ty, _Vb_reference>\r\nconstexpr bool enable_nonlocking_formatter_optimization<_Ty> = true;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Alloc, bool _RequiresMutable>\r\nconstexpr bool _Is_vb_iterator<_Vb_iterator<_Alloc>, _RequiresMutable> = true;\r\n\r\ntemplate <class _Alloc>\r\nconstexpr bool _Is_vb_iterator<_Vb_const_iterator<_Alloc>, false> = true;\r\n\r\ntemplate <class _VbIt>\r\n_CONSTEXPR20 void _Fill_vbool(_VbIt _First, const _VbIt _Last, const bool _Val) noexcept {\r\n    // Set [_First, _Last) to _Val\r\n    if (_First == _Last) {\r\n        return;\r\n    }\r\n\r\n    _Vbase* _VbFirst      = const_cast<_Vbase*>(_First._Myptr);\r\n    _Vbase* const _VbLast = const_cast<_Vbase*>(_Last._Myptr);\r\n\r\n    const auto _FirstSourceMask = static_cast<_Vbase>(-1) << _First._Myoff;\r\n    const auto _FirstDestMask   = ~_FirstSourceMask;\r\n    const auto _FillVal         = static_cast<_Vbase>(_Val ? -1 : 0);\r\n\r\n    if (_VbFirst == _VbLast) {\r\n        // We already excluded _First == _Last, so here _Last._Myoff > 0 and the shift is safe\r\n        const auto _LastSourceMask = static_cast<_Vbase>(-1) >> (_VBITS - _Last._Myoff);\r\n        const auto _LastDestMask   = ~_LastSourceMask;\r\n        const auto _SourceMask     = _FirstSourceMask & _LastSourceMask;\r\n        const auto _DestMask       = _FirstDestMask | _LastDestMask;\r\n        *_VbFirst                  = (*_VbFirst & _DestMask) | (_FillVal & _SourceMask);\r\n        return;\r\n    }\r\n\r\n    *_VbFirst = (*_VbFirst & _FirstDestMask) | (_FillVal & _FirstSourceMask);\r\n    ++_VbFirst;\r\n\r\n#if _HAS_CXX20\r\n    if (_STD is_constant_evaluated()) {\r\n        for (; _VbFirst != _VbLast; ++_VbFirst) {\r\n            *_VbFirst = _FillVal;\r\n        }\r\n    } else\r\n#endif // _HAS_CXX20\r\n    {\r\n        const auto _VbFirst_ch = reinterpret_cast<const unsigned char*>(_VbFirst);\r\n        const auto _VbLast_ch  = reinterpret_cast<const unsigned char*>(_VbLast);\r\n        const auto _Count_ch   = static_cast<size_t>(_VbLast_ch - _VbFirst_ch);\r\n        const auto _ValChar    = static_cast<unsigned char>(_Val ? -1 : 0);\r\n        _CSTD memset(_VbFirst, _ValChar, _Count_ch);\r\n        _VbFirst = _VbLast;\r\n    }\r\n\r\n    if (_Last._Myoff != 0) {\r\n        const auto _LastSourceMask = static_cast<_Vbase>(-1) >> (_VBITS - _Last._Myoff);\r\n        const auto _LastDestMask   = ~_LastSourceMask;\r\n        *_VbFirst                  = (*_VbFirst & _LastDestMask) | (_FillVal & _LastSourceMask);\r\n    }\r\n}\r\n\r\ntemplate <class _VbIt>\r\n_NODISCARD _CONSTEXPR20 _VbIt _Find_vbool(_VbIt _First, const _VbIt _Last, const bool _Val) noexcept {\r\n    // Find _Val in [_First, _Last)\r\n    if (_First == _Last) {\r\n        return _First;\r\n    }\r\n\r\n    const _Vbase* _VbFirst      = _First._Myptr;\r\n    const _Vbase* const _VbLast = _Last._Myptr;\r\n\r\n    const auto _FirstSourceMask = static_cast<_Vbase>(-1) << _First._Myoff;\r\n\r\n    if (_VbFirst == _VbLast) {\r\n        // We already excluded _First == _Last, so here _Last._Myoff > 0 and the shift is safe\r\n        const auto _LastSourceMask = static_cast<_Vbase>(-1) >> (_VBITS - _Last._Myoff);\r\n        const auto _SourceMask     = _FirstSourceMask & _LastSourceMask;\r\n        const auto _SelectVal      = (_Val ? *_VbFirst : ~*_VbFirst) & _SourceMask;\r\n        const auto _Count          = _Countr_zero(_SelectVal);\r\n        if (_Count == _VBITS) {\r\n            return _Last;\r\n        } else {\r\n            return _First + static_cast<_Iter_diff_t<_VbIt>>(_Count - _First._Myoff);\r\n        }\r\n    }\r\n\r\n    const auto _FirstVal   = (_Val ? *_VbFirst : ~*_VbFirst) & _FirstSourceMask;\r\n    const auto _FirstCount = _Countr_zero(_FirstVal);\r\n    if (_FirstCount != _VBITS) {\r\n        return _First + static_cast<_Iter_diff_t<_VbIt>>(_FirstCount - _First._Myoff);\r\n    }\r\n    ++_VbFirst;\r\n\r\n    auto _TotalCount = static_cast<_Iter_diff_t<_VbIt>>(_VBITS - _First._Myoff);\r\n    for (; _VbFirst != _VbLast; ++_VbFirst, _TotalCount += _VBITS) {\r\n        const auto _SelectVal = _Val ? *_VbFirst : ~*_VbFirst;\r\n        const auto _Count     = _Countr_zero(_SelectVal);\r\n        if (_Count != _VBITS) {\r\n            return _First + static_cast<_Iter_diff_t<_VbIt>>(_TotalCount + _Count);\r\n        }\r\n    }\r\n\r\n    if (_Last._Myoff != 0) {\r\n        const auto _LastSourceMask = static_cast<_Vbase>(-1) >> (_VBITS - _Last._Myoff);\r\n        const auto _LastVal        = (_Val ? *_VbFirst : ~*_VbFirst) & _LastSourceMask;\r\n        const auto _Count          = _Countr_zero(_LastVal);\r\n        if (_Count != _VBITS) {\r\n            return _First + static_cast<_Iter_diff_t<_VbIt>>(_TotalCount + _Count);\r\n        }\r\n    }\r\n\r\n    return _Last;\r\n}\r\n\r\ntemplate <class _VbIt>\r\n_NODISCARD _CONSTEXPR20 _Iter_diff_t<_VbIt> _Count_vbool(_VbIt _First, const _VbIt _Last, const bool _Val) noexcept {\r\n    if (_First == _Last) {\r\n        return 0;\r\n    }\r\n\r\n    const _Vbase* _VbFirst      = _First._Myptr;\r\n    const _Vbase* const _VbLast = _Last._Myptr;\r\n\r\n    const auto _FirstSourceMask = static_cast<_Vbase>(-1) << _First._Myoff;\r\n\r\n    if (_VbFirst == _VbLast) {\r\n        // We already excluded _First == _Last, so here _Last._Myoff > 0 and the shift is safe\r\n        const auto _LastSourceMask = static_cast<_Vbase>(-1) >> (_VBITS - _Last._Myoff);\r\n        const auto _SourceMask     = _FirstSourceMask & _LastSourceMask;\r\n        const auto _SelectVal      = (_Val ? *_VbFirst : ~*_VbFirst) & _SourceMask;\r\n        return _Popcount(_SelectVal);\r\n    }\r\n\r\n    return _Select_popcount_impl<_Vbase>(\r\n        [_Last, _Val, _VbFirst, _VbLast, _FirstSourceMask](auto _Popcount_impl) mutable noexcept {\r\n            const auto _FirstVal       = (_Val ? *_VbFirst : ~*_VbFirst) & _FirstSourceMask;\r\n            _Iter_diff_t<_VbIt> _Count = _Popcount_impl(_FirstVal);\r\n            ++_VbFirst;\r\n\r\n            const auto _Bits                = static_cast<_Iter_diff_t<_VbIt>>(_VbLast - _VbFirst) * _VBITS;\r\n            _Iter_diff_t<_VbIt> _Count_ones = 0;\r\n\r\n            for (; _VbFirst != _VbLast; ++_VbFirst) {\r\n                _Count_ones += _Popcount_impl(*_VbFirst);\r\n            }\r\n\r\n            _Count += _Val ? _Count_ones : _Bits - _Count_ones;\r\n\r\n            if (_Last._Myoff != 0) {\r\n                const auto _LastSourceMask = static_cast<_Vbase>(-1) >> (_VBITS - _Last._Myoff);\r\n                const auto _LastVal        = (_Val ? *_VbFirst : ~*_VbFirst) & _LastSourceMask;\r\n                _Count += _Popcount_impl(_LastVal);\r\n            }\r\n\r\n            return _Count;\r\n        });\r\n}\r\n\r\ntemplate <class _VbIt, class _OutIt>\r\n_CONSTEXPR20 _OutIt _Copy_vbool(_VbIt _First, _VbIt _Last, _OutIt _Dest) {\r\n    // copy [_First, _Last) to [_Dest, ...)\r\n    if (_First == _Last) {\r\n        return _Dest;\r\n    }\r\n\r\n    auto _VbFirst       = _First._Myptr;\r\n    const auto _VbLast  = _Last._Myptr;\r\n    auto _VbDest        = const_cast<_Vbase*>(_Dest._Myptr);\r\n    const auto _DestEnd = _Dest + (_Last - _First);\r\n\r\n    const auto _FirstSourceMask = static_cast<_Vbase>(-1) << _First._Myoff;\r\n    const auto _FirstDestMask   = _Dest._Myoff == 0 ? 0 : (static_cast<_Vbase>(-1) >> (_VBITS - _Dest._Myoff));\r\n    const auto _LastSourceMask  = _Last._Myoff == 0 ? 0 : (static_cast<_Vbase>(-1) >> (_VBITS - _Last._Myoff));\r\n    const auto _LastDestMask    = static_cast<_Vbase>(-1) << _DestEnd._Myoff;\r\n\r\n    const bool _IsSingleBlockSource = _VbFirst == _VbLast;\r\n    const bool _IsSingleBlockDest   = _VbDest == _DestEnd._Myptr - (_DestEnd._Myoff == 0 ? 1 : 0);\r\n    const bool _IsRightShift        = _Dest._Myoff < _First._Myoff;\r\n    if (_IsSingleBlockSource) {\r\n        // We already excluded _First == _Last, so here _Last._Myoff > 0 and the shift is safe\r\n        const auto _SourceMask  = _FirstSourceMask & _LastSourceMask;\r\n        const auto _SourceShift = _IsRightShift ? _First._Myoff - _Dest._Myoff : _Dest._Myoff - _First._Myoff;\r\n        const auto _SourceVal   = _IsRightShift ? (*_VbFirst & _SourceMask) >> _SourceShift //\r\n                                                : (*_VbFirst & _SourceMask) << _SourceShift;\r\n        if (_IsSingleBlockDest) {\r\n            const auto _DestMask = _FirstDestMask | (_DestEnd._Myoff == 0 ? 0 : _LastDestMask);\r\n            *_VbDest             = (*_VbDest & _DestMask) | _SourceVal;\r\n        } else {\r\n            *_VbDest = (*_VbDest & _FirstDestMask) | _SourceVal;\r\n            ++_VbDest;\r\n\r\n            const auto _LastShift     = _Last._Myoff - _DestEnd._Myoff;\r\n            const auto _LastSourceVal = (*_VbFirst & _SourceMask) >> _LastShift;\r\n            *_VbDest                  = (*_VbDest & _LastDestMask) | _LastSourceVal;\r\n        }\r\n\r\n        return _DestEnd;\r\n    } else if (_IsSingleBlockDest) {\r\n        const auto _SourceShift = _IsRightShift ? _First._Myoff - _Dest._Myoff : _Dest._Myoff - _First._Myoff;\r\n        const auto _SourceVal   = _IsRightShift ? (*_VbFirst & _FirstSourceMask) >> _SourceShift //\r\n                                                : (*_VbFirst & _FirstSourceMask) << _SourceShift;\r\n\r\n        const auto _DestMask = _FirstDestMask | (_DestEnd._Myoff == 0 ? 0 : _LastDestMask);\r\n        if (_Last._Myoff != 0) {\r\n            const auto _LastShift     = _DestEnd._Myoff != 0 ? _DestEnd._Myoff - _Last._Myoff : _VBITS - _Last._Myoff;\r\n            const auto _LastSourceVal = (*_VbLast & _LastSourceMask) << _LastShift;\r\n            *_VbDest                  = (*_VbDest & _DestMask) | _SourceVal | _LastSourceVal;\r\n        } else {\r\n            *_VbDest = (*_VbDest & _DestMask) | _SourceVal;\r\n        }\r\n\r\n        return _DestEnd;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    if (_STD is_constant_evaluated()) {\r\n        if (_Dest._Myoff == _First._Myoff) {\r\n            const auto _FirstSourceVal = *_VbFirst & _FirstSourceMask;\r\n            *_VbDest                   = (*_VbDest & _FirstDestMask) | _FirstSourceVal;\r\n\r\n            ++_VbFirst;\r\n            ++_VbDest;\r\n            for (; _VbFirst != _VbLast; ++_VbFirst, ++_VbDest) {\r\n                *_VbDest = *_VbFirst;\r\n            }\r\n\r\n            if (_Last._Myoff != 0) {\r\n                const auto _LastSourceVal = *_VbFirst & _LastSourceMask;\r\n                *_VbDest                  = (*_VbDest & _LastDestMask) | _LastSourceVal;\r\n            }\r\n\r\n            return _DestEnd;\r\n        }\r\n    } else\r\n#endif // _HAS_CXX20\r\n    {\r\n        // If _First and _Dest have matching unsigned char alignment, use memmove\r\n        const auto _UnalignedFirstBits = _First._Myoff & _Vbase{7};\r\n        const auto _UnalignedDestBits  = _Dest._Myoff & _Vbase{7};\r\n        if (_UnalignedFirstBits == _UnalignedDestBits) {\r\n            const auto _UnalignedLastBits = _Last._Myoff & _Vbase{7};\r\n\r\n            auto _VbFirst_ch =\r\n                reinterpret_cast<const unsigned char*>(_VbFirst) + (_First._Myoff - _UnalignedFirstBits) / 8;\r\n            const auto _VbLast_ch =\r\n                reinterpret_cast<const unsigned char*>(_VbLast) + (_Last._Myoff - _UnalignedLastBits) / 8;\r\n            auto _VbDest_ch = reinterpret_cast<unsigned char*>(_VbDest) + (_Dest._Myoff - _UnalignedDestBits) / 8;\r\n\r\n            // Copy bits until the next unsigned char alignment\r\n            if (_UnalignedFirstBits != 0) {\r\n                const auto _SourceBitMask = static_cast<unsigned char>(UCHAR_MAX << _UnalignedFirstBits);\r\n                const auto _DestBitMask   = static_cast<unsigned char>(UCHAR_MAX >> (8 - _UnalignedFirstBits));\r\n                *_VbDest_ch =\r\n                    static_cast<unsigned char>((*_VbDest_ch & _DestBitMask) | (*_VbFirst_ch & _SourceBitMask));\r\n                ++_VbFirst_ch;\r\n                ++_VbDest_ch;\r\n            }\r\n\r\n            _VbDest_ch = _Copy_unchecked(_VbFirst_ch, _VbLast_ch, _VbDest_ch);\r\n\r\n            // Copy remaining last bits\r\n            if (_UnalignedLastBits != 0) {\r\n                const auto _SourceBitMask = static_cast<unsigned char>(UCHAR_MAX >> (8 - _UnalignedLastBits));\r\n                const auto _DestBitMask   = static_cast<unsigned char>(UCHAR_MAX << _UnalignedLastBits);\r\n                *_VbDest_ch = static_cast<unsigned char>((*_VbDest_ch & _DestBitMask) | (*_VbLast_ch & _SourceBitMask));\r\n            }\r\n\r\n            return _DestEnd;\r\n        }\r\n    }\r\n\r\n    // Unaligned _VbFirst and _VbLast require a two step copy with carry\r\n    if (_IsRightShift) {\r\n        const auto _SourceShift = _First._Myoff - _Dest._Myoff;\r\n        const auto _CarryShift  = _VBITS - _SourceShift;\r\n        const auto _CarryMask   = static_cast<_Vbase>(-1) >> _SourceShift;\r\n        const auto _DestMask    = ~_CarryMask;\r\n\r\n        const auto _FirstSourceVal = (*_VbFirst & _FirstSourceMask) >> _SourceShift;\r\n        *_VbDest                   = (*_VbDest & _FirstDestMask) | _FirstSourceVal;\r\n\r\n        ++_VbFirst;\r\n        for (; _VbFirst != _VbLast; ++_VbFirst) {\r\n            const auto _CarryVal = *_VbFirst << _CarryShift;\r\n            *_VbDest             = (*_VbDest & _CarryMask) | _CarryVal;\r\n\r\n            ++_VbDest;\r\n            const auto _SourceVal = *_VbFirst >> _SourceShift;\r\n            *_VbDest              = (*_VbDest & _DestMask) | _SourceVal;\r\n        }\r\n\r\n        if (_Last._Myoff != 0) {\r\n            const auto _CarryVal = (*_VbFirst & _LastSourceMask) << _CarryShift;\r\n            if (_Last._Myoff >= _SourceShift) {\r\n                *_VbDest = (*_VbDest & _CarryMask) | _CarryVal;\r\n\r\n                // We have more bits remaining than the final block has left\r\n                if (_Last._Myoff != _SourceShift) {\r\n                    ++_VbDest;\r\n                    const auto _SourceVal = (*_VbFirst & _LastSourceMask) >> _SourceShift;\r\n                    *_VbDest              = (*_VbDest & _LastDestMask) | _SourceVal;\r\n                }\r\n            } else {\r\n                // There are not enough bits to fill the final block so we need to mask both ends\r\n                const auto _FinalMask = _CarryMask | _LastDestMask;\r\n                *_VbDest              = (*_VbDest & _FinalMask) | _CarryVal;\r\n            }\r\n        }\r\n    } else {\r\n        const auto _SourceShift = _Dest._Myoff - _First._Myoff;\r\n        const auto _CarryShift  = _VBITS - _SourceShift;\r\n\r\n        const auto _FirstSourceVal = (*_VbFirst & _FirstSourceMask) << _SourceShift;\r\n        *_VbDest                   = (*_VbDest & _FirstDestMask) | _FirstSourceVal;\r\n        auto _CarryVal             = *_VbFirst >> _CarryShift;\r\n\r\n        ++_VbFirst;\r\n        ++_VbDest;\r\n        for (; _VbFirst != _VbLast; ++_VbFirst, ++_VbDest) {\r\n            const auto _SourceVal = *_VbFirst << _SourceShift;\r\n            *_VbDest              = _CarryVal | _SourceVal;\r\n            _CarryVal             = *_VbFirst >> _CarryShift;\r\n        }\r\n\r\n        if (_Last._Myoff >= _CarryShift) {\r\n            const auto _SourceVal = *_VbFirst << _SourceShift;\r\n            *_VbDest              = _CarryVal | _SourceVal;\r\n            _CarryVal             = *_VbFirst >> _CarryShift;\r\n\r\n            // We have more bits remaining than the final block has left\r\n            if (_Last._Myoff != _CarryShift) {\r\n                ++_VbDest;\r\n                const auto _LastCarryMask = ~_LastDestMask;\r\n                *_VbDest                  = (*_VbDest & _LastDestMask) | (_CarryVal & _LastCarryMask);\r\n            }\r\n        } else if (_Last._Myoff != 0) {\r\n            // There are not enough bits to fill the final block so we need to mask both ends\r\n            const auto _LastSourceVal = (*_VbFirst & _LastSourceMask) << _SourceShift;\r\n            *_VbDest                  = (*_VbDest & _LastDestMask) | _CarryVal | _LastSourceVal;\r\n        } else {\r\n            // No new bits, just copy the carry\r\n            *_VbDest = (*_VbDest & _LastDestMask) | _CarryVal;\r\n        }\r\n    }\r\n\r\n    return _DestEnd;\r\n}\r\n\r\ntemplate <class _VbIt, class _OutIt, class _Mapped_fn>\r\n_CONSTEXPR20 _OutIt _Transform_vbool_aligned(\r\n    const _VbIt _First, const _VbIt _Last, _OutIt _Dest, const _Mapped_fn _Mapped_func) {\r\n    auto _First_ptr      = _First._Myptr;\r\n    const auto _Last_ptr = _Last._Myptr;\r\n    auto _Dest_ptr       = const_cast<_Vbase*>(_Dest._Myptr);\r\n\r\n    for (; _First_ptr != _Last_ptr; ++_First_ptr, ++_Dest_ptr) {\r\n        *_Dest_ptr = _Mapped_func(*_First_ptr);\r\n    }\r\n\r\n    if (_Last._Myoff != 0) {\r\n        const _Vbase _Mask = (_Vbase{1} << _Last._Myoff) - 1;\r\n        *_Dest_ptr         = (*_Dest_ptr & ~_Mask) | (_Mapped_func(*_First_ptr) & _Mask);\r\n        _Dest._Myoff       = _Last._Myoff;\r\n    }\r\n\r\n    _Dest._Myptr = _Dest_ptr;\r\n    return _Dest;\r\n}\r\n\r\ntemplate <class _VbIt1, class _VbIt2, class _OutIt, class _Mapped_fn>\r\n_CONSTEXPR20 _OutIt _Transform_vbool_aligned(\r\n    const _VbIt1 _First1, const _VbIt1 _Last1, const _VbIt2 _First2, _OutIt _Dest, const _Mapped_fn _Mapped_func) {\r\n    auto _First1_ptr      = _First1._Myptr;\r\n    auto _First2_ptr      = _First2._Myptr;\r\n    const auto _Last1_ptr = _Last1._Myptr;\r\n    auto _Dest_ptr        = const_cast<_Vbase*>(_Dest._Myptr);\r\n\r\n    for (; _First1_ptr != _Last1_ptr; ++_First1_ptr, ++_First2_ptr, ++_Dest_ptr) {\r\n        *_Dest_ptr = _Mapped_func(*_First1_ptr, *_First2_ptr);\r\n    }\r\n\r\n    if (_Last1._Myoff != 0) {\r\n        const _Vbase _Mask = (_Vbase{1} << _Last1._Myoff) - 1;\r\n        *_Dest_ptr         = (*_Dest_ptr & ~_Mask) | (_Mapped_func(*_First1_ptr, *_First2_ptr) & _Mask);\r\n        _Dest._Myoff       = _Last1._Myoff;\r\n    }\r\n\r\n    _Dest._Myptr = _Dest_ptr;\r\n    return _Dest;\r\n}\r\n\r\nstruct _All_of_vbool_traits {\r\n    static constexpr bool _Default_result = true;\r\n\r\n    static _CONSTEXPR20 bool _Check(const _Vbase _Value) {\r\n        return _Value != ~_Vbase{0};\r\n    }\r\n\r\n    static _CONSTEXPR20 bool _Check(const _Vbase _Value, const _Vbase _Mask) {\r\n        return (_Value & _Mask) != _Mask;\r\n    }\r\n};\r\n\r\nstruct _Any_of_vbool_traits_base {\r\n    static _CONSTEXPR20 bool _Check(const _Vbase _Value) {\r\n        return _Value != 0;\r\n    }\r\n\r\n    static _CONSTEXPR20 bool _Check(const _Vbase _Value, const _Vbase _Mask) {\r\n        return (_Value & _Mask) != 0;\r\n    }\r\n};\r\n\r\nstruct _Any_of_vbool_traits : _Any_of_vbool_traits_base {\r\n    static constexpr bool _Default_result = false;\r\n};\r\n\r\nstruct _None_of_vbool_traits : _Any_of_vbool_traits_base {\r\n    static constexpr bool _Default_result = true;\r\n};\r\n\r\ntemplate <class _Traits, class _VbIt, class _Mapped_fn>\r\n_NODISCARD _CONSTEXPR20 bool _Meow_of_vbool(const _VbIt _First, const _VbIt _Last, const _Mapped_fn _Mapped_func) {\r\n    constexpr bool _Early_result = !_Traits::_Default_result;\r\n    auto _First_ptr              = _First._Myptr;\r\n    const auto _Last_ptr         = _Last._Myptr;\r\n\r\n    if (_First_ptr == _Last_ptr) {\r\n        if (_First._Myoff == _Last._Myoff) { // empty, can't read the word\r\n            return _Traits::_Default_result;\r\n        }\r\n\r\n        const _Vbase _Mask = (_Vbase{1} << _Last._Myoff) - (_Vbase{1} << _First._Myoff); // handle partial single word\r\n        if (_Traits::_Check(_Mapped_func(*_First_ptr), _Mask)) {\r\n            return _Early_result;\r\n        }\r\n        return _Traits::_Default_result;\r\n    }\r\n\r\n    if (_First._Myoff != 0) { // if we have a partial first word, handle it\r\n        const _Vbase _Mask = static_cast<_Vbase>(-1) << _First._Myoff;\r\n        if (_Traits::_Check(_Mapped_func(*_First_ptr), _Mask)) {\r\n            return _Early_result;\r\n        }\r\n\r\n        ++_First_ptr;\r\n    }\r\n\r\n    for (; _First_ptr != _Last_ptr; ++_First_ptr) { // handle full words\r\n        if (_Traits::_Check(_Mapped_func(*_First_ptr))) {\r\n            return _Early_result;\r\n        }\r\n    }\r\n\r\n    if (_Last._Myoff != 0) { // if we have a partial last word, handle it\r\n        const _Vbase _Mask = (_Vbase{1} << _Last._Myoff) - 1;\r\n        if (_Traits::_Check(_Mapped_func(*_First_ptr), _Mask)) {\r\n            return _Early_result;\r\n        }\r\n    }\r\n\r\n    return _Traits::_Default_result;\r\n}\r\n\r\n#undef _ASAN_VECTOR_MODIFY\r\n#undef _ASAN_VECTOR_REMOVE\r\n#undef _ASAN_VECTOR_CREATE\r\n#undef _ASAN_VECTOR_CREATE_GUARD\r\n#undef _ASAN_VECTOR_EXTEND_GUARD\r\n#undef _ASAN_VECTOR_RELEASE_GUARD\r\n#undef _INSERT_VECTOR_ANNOTATION\r\n\r\n#if _HAS_CXX23\r\n// This <flat_map> and <flat_set> machinery is here because <vector> is the leaf-most header included by both of them.\r\n\r\n_EXPORT_STD struct sorted_unique_t {\r\n    explicit sorted_unique_t() = default;\r\n};\r\n_EXPORT_STD inline constexpr sorted_unique_t sorted_unique{};\r\n\r\n_EXPORT_STD struct sorted_equivalent_t {\r\n    explicit sorted_equivalent_t() = default;\r\n};\r\n_EXPORT_STD inline constexpr sorted_equivalent_t sorted_equivalent{};\r\n\r\ntemplate <class>\r\nconstexpr bool _Is_vector_bool = false;\r\ntemplate <class _Alloc>\r\nconstexpr bool _Is_vector_bool<vector<bool, _Alloc>> = true;\r\n\r\ntemplate <class _Ty, class _Alloc>\r\nconstexpr bool _Has_guaranteed_push_back<vector<_Ty, _Alloc>> = !is_same_v<_Ty, bool>;\r\n\r\ntemplate <class _Ty, class _Alloc>\r\nconstexpr bool _Has_guaranteed_append_range<vector<_Ty, _Alloc>> = !is_same_v<_Ty, bool>;\r\n\r\ntemplate <class _Alloc, class... _Containers>\r\nconcept _Usable_allocator_for = (uses_allocator_v<_Containers, _Alloc> && ...);\r\n\r\ntemplate <class _Compare, class _KeyContainer>\r\nconcept _Valid_compare_for_container = _Not_allocator_for_container<_Compare>\r\n                                    && is_invocable_v<const _Compare&, const typename _KeyContainer::value_type&,\r\n                                        const typename _KeyContainer::value_type&>;\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n\r\ntemplate <class _Ty>\r\nstruct _NODISCARD _Clear_guard {\r\n    _Ty* _Target;\r\n\r\n    _Clear_guard& operator=(const _Clear_guard&) = delete;\r\n    _Clear_guard& operator=(_Clear_guard&&)      = delete;\r\n\r\n    ~_Clear_guard() {\r\n        if (_Target) {\r\n            _Target->clear();\r\n        }\r\n    }\r\n};\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _VECTOR_\r\n"
  },
  {
    "path": "stl/inc/version",
    "content": "// version standard header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _STD_VERSION_HEADER_\r\n#define _STD_VERSION_HEADER_\r\n#include <yvals_core.h>\r\n#endif // _STD_VERSION_HEADER_\r\n"
  },
  {
    "path": "stl/inc/xatomic.h",
    "content": "// xatomic.h internal header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XATOMIC_H\r\n#define _XATOMIC_H\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <type_traits>\r\n\r\n#include _STL_INTRIN_HEADER\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n#define _CONCATX(x, y) x##y\r\n#define _CONCAT(x, y)  _CONCATX(x, y)\r\n\r\n// Interlocked intrinsic mapping for _nf/_acq/_rel\r\n#if defined(_M_CEE_PURE) || (defined(_M_IX86) && !defined(_M_HYBRID_X86_ARM64)) \\\r\n    || (defined(_M_X64) && !defined(_M_ARM64EC))\r\n#define _INTRIN_RELAXED(x) x\r\n#define _INTRIN_ACQUIRE(x) x\r\n#define _INTRIN_RELEASE(x) x\r\n#define _INTRIN_ACQ_REL(x) x\r\n#ifdef _M_CEE_PURE\r\n#define _YIELD_PROCESSOR()\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n#define _YIELD_PROCESSOR() _mm_pause()\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\n#elif defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64)\r\n#define _INTRIN_RELAXED(x) _CONCAT(x, _nf)\r\n#define _INTRIN_ACQUIRE(x) _CONCAT(x, _acq)\r\n#define _INTRIN_RELEASE(x) _CONCAT(x, _rel)\r\n// We don't have interlocked intrinsics for acquire-release ordering, even on\r\n// ARM64, so fall back to sequentially consistent.\r\n#define _INTRIN_ACQ_REL(x) x\r\n#define _YIELD_PROCESSOR() __yield()\r\n\r\n#else // ^^^ ARM64/ARM64EC/HYBRID_X86_ARM64 / unknown architecture vvv\r\n#error Unknown architecture\r\n#endif // ^^^ unknown architecture ^^^\r\n\r\n#define _MT_INCR(x) _INTRIN_RELAXED(_InterlockedIncrement)(reinterpret_cast<volatile long*>(&x))\r\n#define _MT_DECR(x) _INTRIN_ACQ_REL(_InterlockedDecrement)(reinterpret_cast<volatile long*>(&x))\r\n\r\n// The following macros are SHARED with vcruntime and any updates should be mirrored.\r\n// Also: if any macros are added they should be #undefed in vcruntime as well.\r\n#define _Compiler_barrier() _STL_DISABLE_DEPRECATED_WARNING _ReadWriteBarrier() _STL_RESTORE_DEPRECATED_WARNING\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64)\r\n#define _Memory_barrier()              __dmb(0xB) // inner shared data memory barrier\r\n#define _Compiler_or_memory_barrier()  _Memory_barrier()\r\n#define _Memory_load_acquire_barrier() __dmb(0x9) // inner shared data memory load barrier\r\n#elif defined(_M_IX86) || defined(_M_X64)\r\n// x86/x64 hardware only emits memory barriers inside _Interlocked intrinsics\r\n#define _Compiler_or_memory_barrier() _Compiler_barrier()\r\n#else // ^^^ x86/x64 / unknown architecture vvv\r\n#error Unknown architecture\r\n#endif // ^^^ unknown architecture ^^^\r\n\r\n_STD_BEGIN\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD enum class memory_order : int {\r\n    relaxed,\r\n    consume,\r\n    acquire,\r\n    release,\r\n    acq_rel,\r\n    seq_cst,\r\n\r\n    // LWG-3268\r\n    memory_order_relaxed = relaxed,\r\n    memory_order_consume = consume,\r\n    memory_order_acquire = acquire,\r\n    memory_order_release = release,\r\n    memory_order_acq_rel = acq_rel,\r\n    memory_order_seq_cst = seq_cst\r\n};\r\n_EXPORT_STD inline constexpr memory_order memory_order_relaxed = memory_order::relaxed;\r\n_EXPORT_STD inline constexpr memory_order memory_order_consume = memory_order::consume;\r\n_EXPORT_STD inline constexpr memory_order memory_order_acquire = memory_order::acquire;\r\n_EXPORT_STD inline constexpr memory_order memory_order_release = memory_order::release;\r\n_EXPORT_STD inline constexpr memory_order memory_order_acq_rel = memory_order::acq_rel;\r\n_EXPORT_STD inline constexpr memory_order memory_order_seq_cst = memory_order::seq_cst;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\nenum memory_order {\r\n    memory_order_relaxed,\r\n    memory_order_consume,\r\n    memory_order_acquire,\r\n    memory_order_release,\r\n    memory_order_acq_rel,\r\n    memory_order_seq_cst\r\n};\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\nusing _Atomic_counter_t = unsigned long;\r\n\r\ntemplate <class _Integral, class _Ty>\r\n_NODISCARD volatile _Integral* _Atomic_address_as(_Ty& _Source) noexcept {\r\n    // gets a pointer to the argument as an integral type (to pass to intrinsics)\r\n    static_assert(is_integral_v<_Integral>, \"Tried to reinterpret memory as non-integral\");\r\n    return &reinterpret_cast<volatile _Integral&>(_Source);\r\n}\r\n\r\ntemplate <class _Integral, class _Ty>\r\n_NODISCARD const volatile _Integral* _Atomic_address_as(const _Ty& _Source) noexcept {\r\n    // gets a pointer to the argument as an integral type (to pass to intrinsics)\r\n    static_assert(is_integral_v<_Integral>, \"Tried to reinterpret memory as non-integral\");\r\n    return &reinterpret_cast<const volatile _Integral&>(_Source);\r\n}\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XATOMIC_H\r\n"
  },
  {
    "path": "stl/inc/xatomic_wait.h",
    "content": "// xatomic_wait.h internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XATOMIC_WAIT_H\r\n#define _XATOMIC_WAIT_H\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <cstdlib>\r\n#include <xatomic.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\nextern \"C\" {\r\ninline constexpr unsigned long __std_atomic_wait_no_timeout = 0xFFFF'FFFF; // Pass as partial timeout\r\n\r\n// Support for atomic waits.\r\n// The \"direct\" functions are used when the underlying infrastructure can use WaitOnAddress directly; that is, _Size is\r\n// 1, 2, 4, or 8. The contract is the same as the WaitOnAddress function from the Windows SDK.\r\nint __stdcall __std_atomic_wait_direct(\r\n    const void* _Storage, void* _Comparand, size_t _Size, unsigned long _Remaining_timeout) noexcept;\r\nvoid __stdcall __std_atomic_notify_one_direct(const void* _Storage) noexcept;\r\nvoid __stdcall __std_atomic_notify_all_direct(const void* _Storage) noexcept;\r\n\r\n// The \"indirect\" functions are used when the size is not 1, 2, 4, or 8; these notionally wait on another value which is\r\n// of one of those sizes whose value changes upon notify, hence \"indirect\". (As of 2020-07-24, this always uses the\r\n// fallback SRWLOCK and CONDITION_VARIABLE implementation but that is not contractual.)\r\nusing _Atomic_wait_indirect_equal_callback_t = bool(__stdcall*)(\r\n    const void* _Storage, void* _Comparand, size_t _Size, void* _Param) _NOEXCEPT_FNPTR;\r\n\r\nint __stdcall __std_atomic_wait_indirect(const void* _Storage, void* _Comparand, size_t _Size, void* _Param,\r\n    _Atomic_wait_indirect_equal_callback_t _Are_equal, unsigned long _Remaining_timeout) noexcept;\r\nvoid __stdcall __std_atomic_notify_one_indirect(const void* _Storage) noexcept;\r\nvoid __stdcall __std_atomic_notify_all_indirect(const void* _Storage) noexcept;\r\n\r\n} // extern \"C\"\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XATOMIC_WAIT_H\r\n"
  },
  {
    "path": "stl/inc/xbit_ops.h",
    "content": "// xbit_ops.h internal header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XBIT_OPS_H\r\n#define _XBIT_OPS_H\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <cstdint>\r\n\r\n#include _STL_INTRIN_HEADER\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\n_NODISCARD inline unsigned long _Floor_of_log_2(size_t _Value) noexcept { // returns floor(log_2(_Value))\r\n    _Value |= size_t{1}; // avoid undefined answer from _BitScanReverse for 0\r\n    unsigned long _Result;\r\n\r\n#ifdef _M_CEE_PURE\r\n#ifdef _WIN64\r\n    _Result = 63;\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n    _Result = 31;\r\n#endif // ^^^ 32-bit ^^^\r\n\r\n    while ((size_t{1} << _Result) > _Value) {\r\n        --_Result;\r\n    }\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n#ifdef _WIN64\r\n    // CodeQL [SM02313] _Result is always initialized: the code above guarantees that _Value is non-zero.\r\n    _BitScanReverse64(&_Result, _Value);\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n    // CodeQL [SM02313] _Result is always initialized: the code above guarantees that _Value is non-zero.\r\n    _BitScanReverse(&_Result, _Value);\r\n#endif // ^^^ 32-bit ^^^\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\n    return _Result;\r\n}\r\n\r\n_NODISCARD inline unsigned long _Ceiling_of_log_2(const size_t _Value) noexcept { // returns ceil(log_2(_Value))\r\n                                                                                  // pre: _Value > 1\r\n    return 1 + _Floor_of_log_2(_Value - 1);\r\n}\r\n\r\n_NODISCARD inline uint32_t _Bit_scan_reverse(const uint32_t _Value) noexcept {\r\n    unsigned long _Index; // Intentionally uninitialized for better codegen\r\n\r\n    if (_BitScanReverse(&_Index, _Value)) {\r\n        return _Index + 1;\r\n    }\r\n\r\n    return 0;\r\n}\r\n\r\n_NODISCARD inline uint32_t _Bit_scan_reverse(const uint64_t _Value) noexcept {\r\n    unsigned long _Index; // Intentionally uninitialized for better codegen\r\n\r\n#ifdef _WIN64\r\n    if (_BitScanReverse64(&_Index, _Value)) {\r\n        return _Index + 1;\r\n    }\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n    uint32_t _Ui32 = static_cast<uint32_t>(_Value >> 32);\r\n\r\n    if (_BitScanReverse(&_Index, _Ui32)) {\r\n        return _Index + 1 + 32;\r\n    }\r\n\r\n    _Ui32 = static_cast<uint32_t>(_Value);\r\n\r\n    if (_BitScanReverse(&_Index, _Ui32)) {\r\n        return _Index + 1;\r\n    }\r\n#endif // ^^^ 32-bit ^^^\r\n\r\n    return 0;\r\n}\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XBIT_OPS_H\r\n"
  },
  {
    "path": "stl/inc/xcall_once.h",
    "content": "// xcall_once.h internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XCALL_ONCE_H\r\n#define _XCALL_ONCE_H\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <cstdlib>\r\n#include <type_traits>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD struct once_flag { // opaque data structure for call_once()\r\n    constexpr once_flag() noexcept : _Opaque(nullptr) {}\r\n\r\n    once_flag(const once_flag&)            = delete;\r\n    once_flag& operator=(const once_flag&) = delete;\r\n\r\n    void* _Opaque;\r\n};\r\n\r\ntemplate <class _Ty>\r\nunion _Immortalizer_impl { // constructs _Ty, never destroys\r\n    constexpr _Immortalizer_impl() noexcept : _Storage{} {}\r\n    _Immortalizer_impl(const _Immortalizer_impl&)            = delete;\r\n    _Immortalizer_impl& operator=(const _Immortalizer_impl&) = delete;\r\n    ~_Immortalizer_impl() {\r\n        // do nothing\r\n    }\r\n\r\n    _Ty _Storage;\r\n};\r\n\r\n#if defined(_M_CEE) || defined(_M_ARM64EC) || defined(_M_HYBRID) \\\r\n    || defined(__clang__) // TRANSITION, avoid /ALTERNATENAME for Clang, see GH-5224\r\n#define _WINDOWS_API              __stdcall\r\n#define _RENAME_WINDOWS_API(_Api) _Api##_clr\r\n#else // ^^^ use forwarders / use /ALTERNATENAME vvv\r\n#define _WINDOWS_API              __declspec(dllimport) __stdcall\r\n#define _RENAME_WINDOWS_API(_Api) _Api\r\n#endif // ^^^ use /ALTERNATENAME ^^^\r\n\r\n// WINBASEAPI\r\n// BOOL\r\n// WINAPI\r\n// InitOnceBeginInitialize(\r\n//     _Inout_ LPINIT_ONCE lpInitOnce,\r\n//     _In_ DWORD dwFlags,\r\n//     _Out_ PBOOL fPending,\r\n//     _Outptr_opt_result_maybenull_ LPVOID* lpContext\r\n//     );\r\nextern \"C\" _NODISCARD int _WINDOWS_API _RENAME_WINDOWS_API(__std_init_once_begin_initialize)(\r\n    void** _LpInitOnce, unsigned long _DwFlags, int* _FPending, void** _LpContext) noexcept;\r\n\r\n// WINBASEAPI\r\n// BOOL\r\n// WINAPI\r\n// InitOnceComplete(\r\n//     _Inout_ LPINIT_ONCE lpInitOnce,\r\n//     _In_ DWORD dwFlags,\r\n//     _In_opt_ LPVOID lpContext\r\n//     );\r\nextern \"C\" _NODISCARD int _WINDOWS_API _RENAME_WINDOWS_API(__std_init_once_complete)(\r\n    void** _LpInitOnce, unsigned long _DwFlags, void* _LpContext) noexcept;\r\n\r\nextern \"C\" [[noreturn]] void __stdcall __std_init_once_link_alternate_names_and_abort() noexcept;\r\n\r\n// #define RTL_RUN_ONCE_INIT_FAILED    0x00000004UL\r\n// #define INIT_ONCE_INIT_FAILED       RTL_RUN_ONCE_INIT_FAILED\r\n_INLINE_VAR constexpr unsigned long _Init_once_init_failed = 0x4UL;\r\n\r\nstruct _Init_once_completer {\r\n    once_flag& _Once;\r\n    unsigned long _DwFlags;\r\n    ~_Init_once_completer() {\r\n        if (!_RENAME_WINDOWS_API(__std_init_once_complete)(&_Once._Opaque, _DwFlags, nullptr)) {\r\n            __std_init_once_link_alternate_names_and_abort();\r\n        }\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Fn, class... _Args>\r\nvoid(call_once)(once_flag& _Once, _Fn&& _Fx, _Args&&... _Ax)\r\n    noexcept(noexcept(_STD invoke(_STD forward<_Fn>(_Fx), _STD forward<_Args>(_Ax)...))) /* strengthened */ {\r\n    // call _Fx(_Ax...) once\r\n    // parentheses against common \"#define call_once(flag,func) pthread_once(flag,func)\"\r\n    int _Pending;\r\n    if (!_RENAME_WINDOWS_API(__std_init_once_begin_initialize)(&_Once._Opaque, 0, &_Pending, nullptr)) {\r\n        _STL_REPORT_ERROR(\"InitOnceBeginInitialize() failed\");\r\n    }\r\n\r\n    if (_Pending != 0) {\r\n        _Init_once_completer _Op{_Once, _Init_once_init_failed};\r\n        _STD invoke(_STD forward<_Fn>(_Fx), _STD forward<_Args>(_Ax)...);\r\n        _Op._DwFlags = 0;\r\n    }\r\n}\r\n\r\n#undef _WINDOWS_API\r\n#undef _RENAME_WINDOWS_API\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XCALL_ONCE_H\r\n"
  },
  {
    "path": "stl/inc/xcharconv.h",
    "content": "// xcharconv.h internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XCHARCONV_H\r\n#define _XCHARCONV_H\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX17\r\n#error The contents of <charconv> are only available with C++17. (Also, you should not include this internal header.)\r\n#endif // !_HAS_CXX17\r\n\r\n#include <cstdint>\r\n#include <type_traits>\r\n#include <xerrc.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD enum class chars_format {\r\n    scientific = 0b001,\r\n    fixed      = 0b010,\r\n    hex        = 0b100,\r\n    general    = fixed | scientific,\r\n};\r\n\r\n_BITMASK_OPS(_EXPORT_STD, chars_format)\r\n\r\n_EXPORT_STD struct to_chars_result {\r\n    char* ptr;\r\n    errc ec;\r\n#if _HAS_CXX20\r\n    _NODISCARD friend bool operator==(const to_chars_result&, const to_chars_result&) = default;\r\n#endif // _HAS_CXX20\r\n};\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XCHARCONV_H\r\n"
  },
  {
    "path": "stl/inc/xcharconv_ryu.h",
    "content": "// xcharconv_ryu.h internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception AND BSL-1.0\r\n\r\n\r\n// Copyright 2018 Ulf Adams\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n// Boost Software License - Version 1.0 - August 17th, 2003\r\n\r\n// Permission is hereby granted, free of charge, to any person or organization\r\n// obtaining a copy of the software and accompanying documentation covered by\r\n// this license (the \"Software\") to use, reproduce, display, distribute,\r\n// execute, and transmit the Software, and to prepare derivative works of the\r\n// Software, and to permit third-parties to whom the Software is furnished to\r\n// do so, all subject to the following:\r\n\r\n// The copyright notices in the Software and this entire statement, including\r\n// the above license grant, this restriction and the following disclaimer,\r\n// must be included in all copies of the Software, in whole or in part, and\r\n// all derivative works of the Software, unless such copies or derivative\r\n// works are solely in the form of machine-executable object code generated by\r\n// a source language processor.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r\n// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r\n// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r\n// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\n// DEALINGS IN THE SOFTWARE.\r\n\r\n\r\n#ifndef _XCHARCONV_RYU_H\r\n#define _XCHARCONV_RYU_H\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX17\r\n#error The contents of <charconv> are only available with C++17. (Also, you should not include this internal header.)\r\n#endif // !_HAS_CXX17\r\n\r\n#include <cstring>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <xcharconv.h>\r\n#include <xcharconv_ryu_tables.h>\r\n#include <xutility>\r\n\r\n#if defined(_M_X64) || defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64)\r\n#define _HAS_CHARCONV_INTRINSICS 1\r\n#else // ^^^ intrinsics available / intrinsics unavailable vvv\r\n#define _HAS_CHARCONV_INTRINSICS 0\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n\r\n#if _HAS_CHARCONV_INTRINSICS\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64)\r\n#include <intrin.h> // TRANSITION, VSO-1918426\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64) / defined(_M_X64) vvv\r\n#include _STL_INTRIN_HEADER // for _umul128(), __umulh(), and __shiftright128()\r\n#endif // ^^^ defined(_M_X64) ^^^\r\n#endif // ^^^ intrinsics available ^^^\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\n// https://github.com/ulfjack/ryu/tree/59661c3/ryu\r\n// (Keep the cgmanifest.json commitHash in sync.)\r\n\r\n// clang-format off: avoid diverging from external code\r\n\r\n// vvvvvvvvvv DERIVED FROM common.h vvvvvvvvvv\r\n\r\n_NODISCARD inline uint32_t __decimalLength9(const uint32_t __v) {\r\n  // Function precondition: __v is not a 10-digit number.\r\n  // (f2s: 9 digits are sufficient for round-tripping.)\r\n  // (d2fixed: We print 9-digit blocks.)\r\n  _STL_INTERNAL_CHECK(__v < 1000000000);\r\n  if (__v >= 100000000) { return 9; }\r\n  if (__v >= 10000000) { return 8; }\r\n  if (__v >= 1000000) { return 7; }\r\n  if (__v >= 100000) { return 6; }\r\n  if (__v >= 10000) { return 5; }\r\n  if (__v >= 1000) { return 4; }\r\n  if (__v >= 100) { return 3; }\r\n  if (__v >= 10) { return 2; }\r\n  return 1;\r\n}\r\n\r\n// Returns __e == 0 ? 1 : ceil(log_2(5^__e)).\r\n_NODISCARD inline int32_t __pow5bits(const int32_t __e) {\r\n  // This approximation works up to the point that the multiplication overflows at __e = 3529.\r\n  // If the multiplication were done in 64 bits, it would fail at 5^4004 which is just greater\r\n  // than 2^9297.\r\n  _STL_INTERNAL_CHECK(__e >= 0);\r\n  _STL_INTERNAL_CHECK(__e <= 3528);\r\n  return static_cast<int32_t>(((static_cast<uint32_t>(__e) * 1217359) >> 19) + 1);\r\n}\r\n\r\n// Returns floor(log_10(2^__e)).\r\n_NODISCARD inline uint32_t __log10Pow2(const int32_t __e) {\r\n  // The first value this approximation fails for is 2^1651 which is just greater than 10^297.\r\n  _STL_INTERNAL_CHECK(__e >= 0);\r\n  _STL_INTERNAL_CHECK(__e <= 1650);\r\n  return (static_cast<uint32_t>(__e) * 78913) >> 18;\r\n}\r\n\r\n// Returns floor(log_10(5^__e)).\r\n_NODISCARD inline uint32_t __log10Pow5(const int32_t __e) {\r\n  // The first value this approximation fails for is 5^2621 which is just greater than 10^1832.\r\n  _STL_INTERNAL_CHECK(__e >= 0);\r\n  _STL_INTERNAL_CHECK(__e <= 2620);\r\n  return (static_cast<uint32_t>(__e) * 732923) >> 20;\r\n}\r\n\r\n_NODISCARD inline uint32_t __float_to_bits(const float __f) {\r\n  uint32_t __bits = 0;\r\n  _CSTD memcpy(&__bits, &__f, sizeof(float));\r\n  return __bits;\r\n}\r\n\r\n_NODISCARD inline uint64_t __double_to_bits(const double __d) {\r\n  uint64_t __bits = 0;\r\n  _CSTD memcpy(&__bits, &__d, sizeof(double));\r\n  return __bits;\r\n}\r\n\r\n// ^^^^^^^^^^ DERIVED FROM common.h ^^^^^^^^^^\r\n\r\n// vvvvvvvvvv DERIVED FROM d2s.h vvvvvvvvvv\r\n\r\ninline constexpr int __DOUBLE_MANTISSA_BITS = 52;\r\ninline constexpr int __DOUBLE_BIAS = 1023;\r\n\r\ninline constexpr int __DOUBLE_POW5_INV_BITCOUNT = 122;\r\ninline constexpr int __DOUBLE_POW5_BITCOUNT = 121;\r\n\r\n// ^^^^^^^^^^ DERIVED FROM d2s.h ^^^^^^^^^^\r\n\r\n// vvvvvvvvvv DERIVED FROM d2s_intrinsics.h vvvvvvvvvv\r\n\r\n#if _HAS_CHARCONV_INTRINSICS\r\n\r\n_NODISCARD inline uint64_t __ryu_umul128(const uint64_t __a, const uint64_t __b, uint64_t* const __productHi) {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64)\r\n  *__productHi = __umulh(__a, __b);\r\n  return __a * __b;\r\n#else // ^^^ not native X64 / native X64 vvv\r\n  return _umul128(__a, __b, __productHi);\r\n#endif // defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64)\r\n}\r\n\r\n#else // ^^^ intrinsics available / intrinsics unavailable vvv\r\n\r\n_NODISCARD __forceinline uint64_t __ryu_umul128(const uint64_t __a, const uint64_t __b, uint64_t* const __productHi) {\r\n  // TRANSITION, VSO-634761\r\n  // The casts here help MSVC to avoid calls to the __allmul library function.\r\n  const uint32_t __aLo = static_cast<uint32_t>(__a);\r\n  const uint32_t __aHi = static_cast<uint32_t>(__a >> 32);\r\n  const uint32_t __bLo = static_cast<uint32_t>(__b);\r\n  const uint32_t __bHi = static_cast<uint32_t>(__b >> 32);\r\n\r\n  const uint64_t __b00 = static_cast<uint64_t>(__aLo) * __bLo;\r\n  const uint64_t __b01 = static_cast<uint64_t>(__aLo) * __bHi;\r\n  const uint64_t __b10 = static_cast<uint64_t>(__aHi) * __bLo;\r\n  const uint64_t __b11 = static_cast<uint64_t>(__aHi) * __bHi;\r\n\r\n  const uint32_t __b00Lo = static_cast<uint32_t>(__b00);\r\n  const uint32_t __b00Hi = static_cast<uint32_t>(__b00 >> 32);\r\n\r\n  const uint64_t __mid1 = __b10 + __b00Hi;\r\n  const uint32_t __mid1Lo = static_cast<uint32_t>(__mid1);\r\n  const uint32_t __mid1Hi = static_cast<uint32_t>(__mid1 >> 32);\r\n\r\n  const uint64_t __mid2 = __b01 + __mid1Lo;\r\n  const uint32_t __mid2Lo = static_cast<uint32_t>(__mid2);\r\n  const uint32_t __mid2Hi = static_cast<uint32_t>(__mid2 >> 32);\r\n\r\n  const uint64_t __pHi = __b11 + __mid1Hi + __mid2Hi;\r\n  const uint64_t __pLo = (static_cast<uint64_t>(__mid2Lo) << 32) | __b00Lo;\r\n\r\n  *__productHi = __pHi;\r\n  return __pLo;\r\n}\r\n\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n\r\n_NODISCARD inline uint64_t __ryu_shiftright128(const uint64_t __lo, const uint64_t __hi, const uint32_t __dist) {\r\n  // In the current implementation, the shift value is always < 64.\r\n  // If larger shift values are ever required, this function will need to be adjusted.\r\n  _STL_INTERNAL_CHECK(__dist < 64);\r\n\r\n#if defined(_M_X64) && !defined(_M_ARM64EC)\r\n  return __shiftright128(__lo, __hi, static_cast<unsigned char>(__dist));\r\n#else // ^^^ __shiftright128 intrinsic available / __shiftright128 intrinsic unavailable vvv\r\n  if (__dist == 0) {\r\n    return __lo;\r\n  }\r\n\r\n  return (__hi << (64 - __dist)) | (__lo >> __dist);\r\n#endif // ^^^ __shiftright128 intrinsic unavailable ^^^\r\n}\r\n\r\n\r\n#ifndef _WIN64\r\n\r\n#if !defined(_M_HYBRID_X86_ARM64)\r\n// Returns the high 64 bits of the 128-bit product of __a and __b.\r\n_NODISCARD inline uint64_t __umulh(const uint64_t __a, const uint64_t __b) {\r\n  // Reuse the __ryu_umul128 implementation.\r\n  // Optimizers will likely eliminate the instructions used to compute the\r\n  // low part of the product.\r\n  uint64_t __hi;\r\n  (void) __ryu_umul128(__a, __b, &__hi);\r\n  return __hi;\r\n}\r\n#endif // ^^^ !defined(_M_HYBRID_X86_ARM64) ^^^\r\n\r\n// On 32-bit platforms, compilers typically generate calls to library\r\n// functions for 64-bit divisions, even if the divisor is a constant.\r\n//\r\n// TRANSITION, LLVM-37932\r\n//\r\n// The functions here perform division-by-constant using multiplications\r\n// in the same way as 64-bit compilers would do.\r\n//\r\n// NB:\r\n// The multipliers and shift values are the ones generated by clang x64\r\n// for expressions like x/5, x/10, etc.\r\n\r\n_NODISCARD inline uint64_t __div5(const uint64_t __x) {\r\n  return __umulh(__x, 0xCCCCCCCCCCCCCCCDu) >> 2;\r\n}\r\n\r\n_NODISCARD inline uint64_t __div10(const uint64_t __x) {\r\n  return __umulh(__x, 0xCCCCCCCCCCCCCCCDu) >> 3;\r\n}\r\n\r\n_NODISCARD inline uint64_t __div100(const uint64_t __x) {\r\n  return __umulh(__x >> 2, 0x28F5C28F5C28F5C3u) >> 2;\r\n}\r\n\r\n_NODISCARD inline uint64_t __div1e8(const uint64_t __x) {\r\n  return __umulh(__x, 0xABCC77118461CEFDu) >> 26;\r\n}\r\n\r\n_NODISCARD inline uint64_t __div1e9(const uint64_t __x) {\r\n  return __umulh(__x >> 9, 0x44B82FA09B5A53u) >> 11;\r\n}\r\n\r\n_NODISCARD inline uint32_t __mod1e9(const uint64_t __x) {\r\n  // Avoid 64-bit math as much as possible.\r\n  // Returning static_cast<uint32_t>(__x - 1000000000 * __div1e9(__x)) would\r\n  // perform 32x64-bit multiplication and 64-bit subtraction.\r\n  // __x and 1000000000 * __div1e9(__x) are guaranteed to differ by\r\n  // less than 10^9, so their highest 32 bits must be identical,\r\n  // so we can truncate both sides to uint32_t before subtracting.\r\n  // We can also simplify static_cast<uint32_t>(1000000000 * __div1e9(__x)).\r\n  // We can truncate before multiplying instead of after, as multiplying\r\n  // the highest 32 bits of __div1e9(__x) can't affect the lowest 32 bits.\r\n  return static_cast<uint32_t>(__x) - 1000000000 * static_cast<uint32_t>(__div1e9(__x));\r\n}\r\n\r\n#else // ^^^ 32-bit / 64-bit vvv\r\n\r\n_NODISCARD inline uint64_t __div5(const uint64_t __x) {\r\n  return __x / 5;\r\n}\r\n\r\n_NODISCARD inline uint64_t __div10(const uint64_t __x) {\r\n  return __x / 10;\r\n}\r\n\r\n_NODISCARD inline uint64_t __div100(const uint64_t __x) {\r\n  return __x / 100;\r\n}\r\n\r\n_NODISCARD inline uint64_t __div1e8(const uint64_t __x) {\r\n  return __x / 100000000;\r\n}\r\n\r\n_NODISCARD inline uint64_t __div1e9(const uint64_t __x) {\r\n  return __x / 1000000000;\r\n}\r\n\r\n_NODISCARD inline uint32_t __mod1e9(const uint64_t __x) {\r\n  return static_cast<uint32_t>(__x - 1000000000 * __div1e9(__x));\r\n}\r\n\r\n#endif // ^^^ 64-bit ^^^\r\n\r\n_NODISCARD inline uint32_t __pow5Factor(uint64_t __value) {\r\n  uint32_t __count = 0;\r\n  for (;;) {\r\n    _STL_INTERNAL_CHECK(__value != 0);\r\n    const uint64_t __q = __div5(__value);\r\n    const uint32_t __r = static_cast<uint32_t>(__value) - 5 * static_cast<uint32_t>(__q);\r\n    if (__r != 0) {\r\n      break;\r\n    }\r\n    __value = __q;\r\n    ++__count;\r\n  }\r\n  return __count;\r\n}\r\n\r\n// Returns true if __value is divisible by 5^__p.\r\n_NODISCARD inline bool __multipleOfPowerOf5(const uint64_t __value, const uint32_t __p) {\r\n  // I tried a case distinction on __p, but there was no performance difference.\r\n  return __pow5Factor(__value) >= __p;\r\n}\r\n\r\n// Returns true if __value is divisible by 2^__p.\r\n_NODISCARD inline bool __multipleOfPowerOf2(const uint64_t __value, const uint32_t __p) {\r\n  _STL_INTERNAL_CHECK(__value != 0);\r\n  _STL_INTERNAL_CHECK(__p < 64);\r\n  // return __builtin_ctzll(__value) >= __p;\r\n  return (__value & ((1ull << __p) - 1)) == 0;\r\n}\r\n\r\n// ^^^^^^^^^^ DERIVED FROM d2s_intrinsics.h ^^^^^^^^^^\r\n\r\n// vvvvvvvvvv DERIVED FROM d2fixed.c vvvvvvvvvv\r\n\r\ninline constexpr int __POW10_ADDITIONAL_BITS = 120;\r\n\r\n#if _HAS_CHARCONV_INTRINSICS\r\n// Returns the low 64 bits of the high 128 bits of the 256-bit product of a and b.\r\n_NODISCARD inline uint64_t __umul256_hi128_lo64(\r\n  const uint64_t __aHi, const uint64_t __aLo, const uint64_t __bHi, const uint64_t __bLo) {\r\n  uint64_t __b00Hi;\r\n  const uint64_t __b00Lo = __ryu_umul128(__aLo, __bLo, &__b00Hi);\r\n  uint64_t __b01Hi;\r\n  const uint64_t __b01Lo = __ryu_umul128(__aLo, __bHi, &__b01Hi);\r\n  uint64_t __b10Hi;\r\n  const uint64_t __b10Lo = __ryu_umul128(__aHi, __bLo, &__b10Hi);\r\n  uint64_t __b11Hi;\r\n  const uint64_t __b11Lo = __ryu_umul128(__aHi, __bHi, &__b11Hi);\r\n  (void) __b00Lo; // unused\r\n  (void) __b11Hi; // unused\r\n  const uint64_t __temp1Lo = __b10Lo + __b00Hi;\r\n  const uint64_t __temp1Hi = __b10Hi + (__temp1Lo < __b10Lo);\r\n  const uint64_t __temp2Lo = __b01Lo + __temp1Lo;\r\n  const uint64_t __temp2Hi = __b01Hi + (__temp2Lo < __b01Lo);\r\n  return __b11Lo + __temp1Hi + __temp2Hi;\r\n}\r\n\r\n_NODISCARD inline uint32_t __uint128_mod1e9(const uint64_t __vHi, const uint64_t __vLo) {\r\n  // After multiplying, we're going to shift right by 29, then truncate to uint32_t.\r\n  // This means that we need only 29 + 32 = 61 bits, so we can truncate to uint64_t before shifting.\r\n  const uint64_t __multiplied = __umul256_hi128_lo64(__vHi, __vLo, 0x89705F4136B4A597u, 0x31680A88F8953031u);\r\n\r\n  // For uint32_t truncation, see the __mod1e9() comment in d2s_intrinsics.h.\r\n  const uint32_t __shifted = static_cast<uint32_t>(__multiplied >> 29);\r\n\r\n  return static_cast<uint32_t>(__vLo) - 1000000000 * __shifted;\r\n}\r\n#endif // ^^^ intrinsics available ^^^\r\n\r\n_NODISCARD inline uint32_t __mulShift_mod1e9(const uint64_t __m, const uint64_t* const __mul, const int32_t __j) {\r\n  uint64_t __high0;                                               // 64\r\n  const uint64_t __low0 = __ryu_umul128(__m, __mul[0], &__high0); // 0\r\n  uint64_t __high1;                                               // 128\r\n  const uint64_t __low1 = __ryu_umul128(__m, __mul[1], &__high1); // 64\r\n  uint64_t __high2;                                               // 192\r\n  const uint64_t __low2 = __ryu_umul128(__m, __mul[2], &__high2); // 128\r\n  const uint64_t __s0low = __low0;                  // 0\r\n  (void) __s0low; // unused\r\n  const uint64_t __s0high = __low1 + __high0;       // 64\r\n  const uint32_t __c1 = __s0high < __low1;\r\n  const uint64_t __s1low = __low2 + __high1 + __c1; // 128\r\n  const uint32_t __c2 = __s1low < __low2; // __high1 + __c1 can't overflow, so compare against __low2\r\n  const uint64_t __s1high = __high2 + __c2;         // 192\r\n  _STL_INTERNAL_CHECK(__j >= 128);\r\n  _STL_INTERNAL_CHECK(__j <= 180);\r\n#if _HAS_CHARCONV_INTRINSICS\r\n  const uint32_t __dist = static_cast<uint32_t>(__j - 128); // __dist: [0, 52]\r\n  const uint64_t __shiftedhigh = __s1high >> __dist;\r\n  const uint64_t __shiftedlow = __ryu_shiftright128(__s1low, __s1high, __dist);\r\n  return __uint128_mod1e9(__shiftedhigh, __shiftedlow);\r\n#else // ^^^ intrinsics available / intrinsics unavailable vvv\r\n  if (__j < 160) { // __j: [128, 160)\r\n    const uint64_t __r0 = __mod1e9(__s1high);\r\n    const uint64_t __r1 = __mod1e9((__r0 << 32) | (__s1low >> 32));\r\n    const uint64_t __r2 = ((__r1 << 32) | (__s1low & 0xffffffff));\r\n    return __mod1e9(__r2 >> (__j - 128));\r\n  } else { // __j: [160, 192)\r\n    const uint64_t __r0 = __mod1e9(__s1high);\r\n    const uint64_t __r1 = ((__r0 << 32) | (__s1low >> 32));\r\n    return __mod1e9(__r1 >> (__j - 160));\r\n  }\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n}\r\n\r\n#define _WIDEN(_TYPE, _CHAR) static_cast<_TYPE>(is_same_v<_TYPE, char> ? _CHAR : L##_CHAR)\r\n\r\ntemplate <class _CharT>\r\nvoid __append_n_digits(const uint32_t __olength, uint32_t __digits, _CharT* const __result) {\r\n  uint32_t __i = 0;\r\n  while (__digits >= 10000) {\r\n#ifdef __clang__ // TRANSITION, LLVM-38217\r\n    const uint32_t __c = __digits - 10000 * (__digits / 10000);\r\n#else\r\n    const uint32_t __c = __digits % 10000;\r\n#endif\r\n    __digits /= 10000;\r\n    const uint32_t __c0 = (__c % 100) << 1;\r\n    const uint32_t __c1 = (__c / 100) << 1;\r\n    _CSTD memcpy(__result + __olength - __i - 2, __DIGIT_TABLE<_CharT> + __c0, 2 * sizeof(_CharT));\r\n    _CSTD memcpy(__result + __olength - __i - 4, __DIGIT_TABLE<_CharT> + __c1, 2 * sizeof(_CharT));\r\n    __i += 4;\r\n  }\r\n  if (__digits >= 100) {\r\n    const uint32_t __c = (__digits % 100) << 1;\r\n    __digits /= 100;\r\n    _CSTD memcpy(__result + __olength - __i - 2, __DIGIT_TABLE<_CharT> + __c, 2 * sizeof(_CharT));\r\n    __i += 2;\r\n  }\r\n  if (__digits >= 10) {\r\n    const uint32_t __c = __digits << 1;\r\n    _CSTD memcpy(__result + __olength - __i - 2, __DIGIT_TABLE<_CharT> + __c, 2 * sizeof(_CharT));\r\n  } else {\r\n    __result[0] = static_cast<_CharT>(_WIDEN(_CharT, '0') + __digits);\r\n  }\r\n}\r\n\r\ninline void __append_d_digits(const uint32_t __olength, uint32_t __digits, char* const __result) {\r\n  uint32_t __i = 0;\r\n  while (__digits >= 10000) {\r\n#ifdef __clang__ // TRANSITION, LLVM-38217\r\n    const uint32_t __c = __digits - 10000 * (__digits / 10000);\r\n#else\r\n    const uint32_t __c = __digits % 10000;\r\n#endif\r\n    __digits /= 10000;\r\n    const uint32_t __c0 = (__c % 100) << 1;\r\n    const uint32_t __c1 = (__c / 100) << 1;\r\n    _CSTD memcpy(__result + __olength + 1 - __i - 2, __DIGIT_TABLE<char> + __c0, 2);\r\n    _CSTD memcpy(__result + __olength + 1 - __i - 4, __DIGIT_TABLE<char> + __c1, 2);\r\n    __i += 4;\r\n  }\r\n  if (__digits >= 100) {\r\n    const uint32_t __c = (__digits % 100) << 1;\r\n    __digits /= 100;\r\n    _CSTD memcpy(__result + __olength + 1 - __i - 2, __DIGIT_TABLE<char> + __c, 2);\r\n    __i += 2;\r\n  }\r\n  if (__digits >= 10) {\r\n    const uint32_t __c = __digits << 1;\r\n    __result[2] = __DIGIT_TABLE<char>[__c + 1];\r\n    __result[1] = '.';\r\n    __result[0] = __DIGIT_TABLE<char>[__c];\r\n  } else {\r\n    __result[1] = '.';\r\n    __result[0] = static_cast<char>('0' + __digits);\r\n  }\r\n}\r\n\r\ntemplate <class _CharT>\r\nvoid __append_c_digits(const uint32_t __count, uint32_t __digits, _CharT* const __result) {\r\n  uint32_t __i = 0;\r\n  for (; __i < __count - 1; __i += 2) {\r\n    const uint32_t __c = (__digits % 100) << 1;\r\n    __digits /= 100;\r\n    _CSTD memcpy(__result + __count - __i - 2, __DIGIT_TABLE<_CharT> + __c, 2 * sizeof(_CharT));\r\n  }\r\n  if (__i < __count) {\r\n    const _CharT __c = static_cast<_CharT>(_WIDEN(_CharT, '0') + (__digits % 10));\r\n    __result[__count - __i - 1] = __c;\r\n  }\r\n}\r\n\r\ntemplate <class _CharT>\r\nvoid __append_nine_digits(uint32_t __digits, _CharT* const __result) {\r\n  if (__digits == 0) {\r\n    _STD fill_n(__result, 9, _WIDEN(_CharT, '0'));\r\n    return;\r\n  }\r\n\r\n  for (uint32_t __i = 0; __i < 5; __i += 4) {\r\n#ifdef __clang__ // TRANSITION, LLVM-38217\r\n    const uint32_t __c = __digits - 10000 * (__digits / 10000);\r\n#else\r\n    const uint32_t __c = __digits % 10000;\r\n#endif\r\n    __digits /= 10000;\r\n    const uint32_t __c0 = (__c % 100) << 1;\r\n    const uint32_t __c1 = (__c / 100) << 1;\r\n    _CSTD memcpy(__result + 7 - __i, __DIGIT_TABLE<_CharT> + __c0, 2 * sizeof(_CharT));\r\n    _CSTD memcpy(__result + 5 - __i, __DIGIT_TABLE<_CharT> + __c1, 2 * sizeof(_CharT));\r\n  }\r\n  __result[0] = static_cast<_CharT>(_WIDEN(_CharT, '0') + __digits);\r\n}\r\n\r\n_NODISCARD inline uint32_t __indexForExponent(const uint32_t __e) {\r\n  return (__e + 15) / 16;\r\n}\r\n\r\n_NODISCARD inline uint32_t __pow10BitsForIndex(const uint32_t __idx) {\r\n  return 16 * __idx + __POW10_ADDITIONAL_BITS;\r\n}\r\n\r\n_NODISCARD inline uint32_t __lengthForIndex(const uint32_t __idx) {\r\n  // +1 for ceil, +16 for mantissa, +8 to round up when dividing by 9\r\n  return (__log10Pow2(16 * static_cast<int32_t>(__idx)) + 1 + 16 + 8) / 9;\r\n}\r\n\r\ntemplate <class _CharT>\r\n_NODISCARD pair<_CharT*, errc> __d2fixed_buffered_n(_CharT* _First, _CharT* const _Last, const double __d,\r\n  const uint32_t __precision) {\r\n  _CharT* const _Original_first = _First;\r\n\r\n  const uint64_t __bits = __double_to_bits(__d);\r\n\r\n  // Case distinction; exit early for the easy cases.\r\n  if (__bits == 0) {\r\n    const int32_t _Total_zero_length = 1 // leading zero\r\n      + static_cast<int32_t>(__precision != 0) // possible decimal point\r\n      + static_cast<int32_t>(__precision); // zeroes after decimal point\r\n\r\n    if (_Last - _First < _Total_zero_length) {\r\n      return { _Last, errc::value_too_large };\r\n    }\r\n\r\n    *_First++ = _WIDEN(_CharT, '0');\r\n    if (__precision > 0) {\r\n      *_First++ = _WIDEN(_CharT, '.');\r\n      _STD fill_n(_First, __precision, _WIDEN(_CharT, '0'));\r\n      _First += __precision;\r\n    }\r\n    return { _First, errc{} };\r\n  }\r\n\r\n  // Decode __bits into mantissa and exponent.\r\n  const uint64_t __ieeeMantissa = __bits & ((1ull << __DOUBLE_MANTISSA_BITS) - 1);\r\n  const uint32_t __ieeeExponent = static_cast<uint32_t>(__bits >> __DOUBLE_MANTISSA_BITS);\r\n\r\n  int32_t __e2;\r\n  uint64_t __m2;\r\n  if (__ieeeExponent == 0) {\r\n    __e2 = 1 - __DOUBLE_BIAS - __DOUBLE_MANTISSA_BITS;\r\n    __m2 = __ieeeMantissa;\r\n  } else {\r\n    __e2 = static_cast<int32_t>(__ieeeExponent) - __DOUBLE_BIAS - __DOUBLE_MANTISSA_BITS;\r\n    __m2 = (1ull << __DOUBLE_MANTISSA_BITS) | __ieeeMantissa;\r\n  }\r\n\r\n  bool __nonzero = false;\r\n  if (__e2 >= -52) {\r\n    const uint32_t __idx = __e2 < 0 ? 0 : __indexForExponent(static_cast<uint32_t>(__e2));\r\n    const uint32_t __p10bits = __pow10BitsForIndex(__idx);\r\n    const int32_t __len = static_cast<int32_t>(__lengthForIndex(__idx));\r\n    for (int32_t __i = __len - 1; __i >= 0; --__i) {\r\n      const uint32_t __j = __p10bits - __e2;\r\n      // Temporary: __j is usually around 128, and by shifting a bit, we push it to 128 or above, which is\r\n      // a slightly faster code path in __mulShift_mod1e9. Instead, we can just increase the multipliers.\r\n      const uint32_t __digits = __mulShift_mod1e9(__m2 << 8, __POW10_SPLIT[__POW10_OFFSET[__idx] + __i],\r\n        static_cast<int32_t>(__j + 8));\r\n      if (__nonzero) {\r\n        if (_Last - _First < 9) {\r\n          return { _Last, errc::value_too_large };\r\n        }\r\n        __append_nine_digits(__digits, _First);\r\n        _First += 9;\r\n      } else if (__digits != 0) {\r\n        const uint32_t __olength = __decimalLength9(__digits);\r\n        if (_Last - _First < static_cast<ptrdiff_t>(__olength)) {\r\n          return { _Last, errc::value_too_large };\r\n        }\r\n        __append_n_digits(__olength, __digits, _First);\r\n        _First += __olength;\r\n        __nonzero = true;\r\n      }\r\n    }\r\n  }\r\n  if (!__nonzero) {\r\n    if (_First == _Last) {\r\n      return { _Last, errc::value_too_large };\r\n    }\r\n    *_First++ = _WIDEN(_CharT, '0');\r\n  }\r\n  if (__precision > 0) {\r\n    if (_First == _Last) {\r\n      return { _Last, errc::value_too_large };\r\n    }\r\n    *_First++ = _WIDEN(_CharT, '.');\r\n  }\r\n  if (__e2 < 0) {\r\n    const int32_t __idx = -__e2 / 16;\r\n    const uint32_t __blocks = __precision / 9 + 1;\r\n    // 0 = don't round up; 1 = round up unconditionally; 2 = round up if odd.\r\n    int __roundUp = 0;\r\n    uint32_t __i = 0;\r\n    if (__blocks <= __MIN_BLOCK_2[__idx]) {\r\n      __i = __blocks;\r\n      if (_Last - _First < static_cast<ptrdiff_t>(__precision)) {\r\n        return { _Last, errc::value_too_large };\r\n      }\r\n      _STD fill_n(_First, __precision, _WIDEN(_CharT, '0'));\r\n      _First += __precision;\r\n    } else if (__i < __MIN_BLOCK_2[__idx]) {\r\n      __i = __MIN_BLOCK_2[__idx];\r\n      if (_Last - _First < static_cast<ptrdiff_t>(9 * __i)) {\r\n        return { _Last, errc::value_too_large };\r\n      }\r\n      _STD fill_n(_First, 9 * __i, _WIDEN(_CharT, '0'));\r\n      _First += 9 * __i;\r\n    }\r\n    for (; __i < __blocks; ++__i) {\r\n      const int32_t __j = __ADDITIONAL_BITS_2 + (-__e2 - 16 * __idx);\r\n      const uint32_t __p = __POW10_OFFSET_2[__idx] + __i - __MIN_BLOCK_2[__idx];\r\n      if (__p >= __POW10_OFFSET_2[__idx + 1]) {\r\n        // If the remaining digits are all 0, then we might as well use memset.\r\n        // No rounding required in this case.\r\n        const uint32_t __fill = __precision - 9 * __i;\r\n        if (_Last - _First < static_cast<ptrdiff_t>(__fill)) {\r\n          return { _Last, errc::value_too_large };\r\n        }\r\n        _STD fill_n(_First, __fill, _WIDEN(_CharT, '0'));\r\n        _First += __fill;\r\n        break;\r\n      }\r\n      // Temporary: __j is usually around 128, and by shifting a bit, we push it to 128 or above, which is\r\n      // a slightly faster code path in __mulShift_mod1e9. Instead, we can just increase the multipliers.\r\n      uint32_t __digits = __mulShift_mod1e9(__m2 << 8, __POW10_SPLIT_2[__p], __j + 8);\r\n      if (__i < __blocks - 1) {\r\n        if (_Last - _First < 9) {\r\n          return { _Last, errc::value_too_large };\r\n        }\r\n        __append_nine_digits(__digits, _First);\r\n        _First += 9;\r\n      } else {\r\n        const uint32_t __maximum = __precision - 9 * __i;\r\n        uint32_t __lastDigit = 0;\r\n        for (uint32_t __k = 0; __k < 9 - __maximum; ++__k) {\r\n          __lastDigit = __digits % 10;\r\n          __digits /= 10;\r\n        }\r\n        if (__lastDigit != 5) {\r\n          __roundUp = __lastDigit > 5;\r\n        } else {\r\n          // Is m * 10^(additionalDigits + 1) / 2^(-__e2) integer?\r\n          const int32_t __requiredTwos = -__e2 - static_cast<int32_t>(__precision) - 1;\r\n          const bool __trailingZeros = __requiredTwos <= 0\r\n            || (__requiredTwos < 60 && __multipleOfPowerOf2(__m2, static_cast<uint32_t>(__requiredTwos)));\r\n          __roundUp = __trailingZeros ? 2 : 1;\r\n        }\r\n        if (__maximum > 0) {\r\n          if (_Last - _First < static_cast<ptrdiff_t>(__maximum)) {\r\n            return { _Last, errc::value_too_large };\r\n          }\r\n          __append_c_digits(__maximum, __digits, _First);\r\n          _First += __maximum;\r\n        }\r\n        break;\r\n      }\r\n    }\r\n    if (__roundUp != 0) {\r\n      _CharT* _Round = _First;\r\n      _CharT* _Dot = _Last;\r\n      while (true) {\r\n        if (_Round == _Original_first) {\r\n          _Round[0] = _WIDEN(_CharT, '1');\r\n          if (_Dot != _Last) {\r\n            _Dot[0] = _WIDEN(_CharT, '0');\r\n            _Dot[1] = _WIDEN(_CharT, '.');\r\n          }\r\n          if (_First == _Last) {\r\n            return { _Last, errc::value_too_large };\r\n          }\r\n          *_First++ = _WIDEN(_CharT, '0');\r\n          break;\r\n        }\r\n        --_Round;\r\n        const _CharT __c = _Round[0];\r\n        if (__c == _WIDEN(_CharT, '.')) {\r\n          _Dot = _Round;\r\n        } else if (__c == _WIDEN(_CharT, '9')) {\r\n          _Round[0] = _WIDEN(_CharT, '0');\r\n          __roundUp = 1;\r\n        } else {\r\n          if (__roundUp == 1 || __c % 2 != 0) {\r\n            _Round[0] = static_cast<_CharT>(__c + 1);\r\n          }\r\n          break;\r\n        }\r\n      }\r\n    }\r\n  } else {\r\n    if (_Last - _First < static_cast<ptrdiff_t>(__precision)) {\r\n      return { _Last, errc::value_too_large };\r\n    }\r\n    _STD fill_n(_First, __precision, _WIDEN(_CharT, '0'));\r\n    _First += __precision;\r\n  }\r\n  return { _First, errc{} };\r\n}\r\n\r\n_NODISCARD inline to_chars_result __d2exp_buffered_n(char* _First, char* const _Last, const double __d,\r\n  uint32_t __precision) {\r\n  char* const _Original_first = _First;\r\n\r\n  const uint64_t __bits = __double_to_bits(__d);\r\n\r\n  // Case distinction; exit early for the easy cases.\r\n  if (__bits == 0) {\r\n    const int32_t _Total_zero_length = 1 // leading zero\r\n      + static_cast<int32_t>(__precision != 0) // possible decimal point\r\n      + static_cast<int32_t>(__precision) // zeroes after decimal point\r\n      + 4; // \"e+00\"\r\n    if (_Last - _First < _Total_zero_length) {\r\n      return { _Last, errc::value_too_large };\r\n    }\r\n    *_First++ = '0';\r\n    if (__precision > 0) {\r\n      *_First++ = '.';\r\n      _CSTD memset(_First, '0', __precision);\r\n      _First += __precision;\r\n    }\r\n    _CSTD memcpy(_First, \"e+00\", 4);\r\n    _First += 4;\r\n    return { _First, errc{} };\r\n  }\r\n\r\n  // Decode __bits into mantissa and exponent.\r\n  const uint64_t __ieeeMantissa = __bits & ((1ull << __DOUBLE_MANTISSA_BITS) - 1);\r\n  const uint32_t __ieeeExponent = static_cast<uint32_t>(__bits >> __DOUBLE_MANTISSA_BITS);\r\n\r\n  int32_t __e2;\r\n  uint64_t __m2;\r\n  if (__ieeeExponent == 0) {\r\n    __e2 = 1 - __DOUBLE_BIAS - __DOUBLE_MANTISSA_BITS;\r\n    __m2 = __ieeeMantissa;\r\n  } else {\r\n    __e2 = static_cast<int32_t>(__ieeeExponent) - __DOUBLE_BIAS - __DOUBLE_MANTISSA_BITS;\r\n    __m2 = (1ull << __DOUBLE_MANTISSA_BITS) | __ieeeMantissa;\r\n  }\r\n\r\n  const bool __printDecimalPoint = __precision > 0;\r\n  ++__precision;\r\n  uint32_t __digits = 0;\r\n  uint32_t __printedDigits = 0;\r\n  uint32_t __availableDigits = 0;\r\n  int32_t __exp = 0;\r\n  if (__e2 >= -52) {\r\n    const uint32_t __idx = __e2 < 0 ? 0 : __indexForExponent(static_cast<uint32_t>(__e2));\r\n    const uint32_t __p10bits = __pow10BitsForIndex(__idx);\r\n    const int32_t __len = static_cast<int32_t>(__lengthForIndex(__idx));\r\n    for (int32_t __i = __len - 1; __i >= 0; --__i) {\r\n      const uint32_t __j = __p10bits - __e2;\r\n      // Temporary: __j is usually around 128, and by shifting a bit, we push it to 128 or above, which is\r\n      // a slightly faster code path in __mulShift_mod1e9. Instead, we can just increase the multipliers.\r\n      __digits = __mulShift_mod1e9(__m2 << 8, __POW10_SPLIT[__POW10_OFFSET[__idx] + __i],\r\n        static_cast<int32_t>(__j + 8));\r\n      if (__printedDigits != 0) {\r\n        if (__printedDigits + 9 > __precision) {\r\n          __availableDigits = 9;\r\n          break;\r\n        }\r\n        if (_Last - _First < 9) {\r\n          return { _Last, errc::value_too_large };\r\n        }\r\n        __append_nine_digits(__digits, _First);\r\n        _First += 9;\r\n        __printedDigits += 9;\r\n      } else if (__digits != 0) {\r\n        __availableDigits = __decimalLength9(__digits);\r\n        __exp = __i * 9 + static_cast<int32_t>(__availableDigits) - 1;\r\n        if (__availableDigits > __precision) {\r\n          break;\r\n        }\r\n        if (__printDecimalPoint) {\r\n          if (_Last - _First < static_cast<ptrdiff_t>(__availableDigits + 1)) {\r\n            return { _Last, errc::value_too_large };\r\n          }\r\n          __append_d_digits(__availableDigits, __digits, _First);\r\n          _First += __availableDigits + 1; // +1 for decimal point\r\n        } else {\r\n          if (_First == _Last) {\r\n            return { _Last, errc::value_too_large };\r\n          }\r\n          *_First++ = static_cast<char>('0' + __digits);\r\n        }\r\n        __printedDigits = __availableDigits;\r\n        __availableDigits = 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  if (__e2 < 0 && __availableDigits == 0) {\r\n    const int32_t __idx = -__e2 / 16;\r\n    for (int32_t __i = __MIN_BLOCK_2[__idx]; __i < 200; ++__i) {\r\n      const int32_t __j = __ADDITIONAL_BITS_2 + (-__e2 - 16 * __idx);\r\n      const uint32_t __p = __POW10_OFFSET_2[__idx] + static_cast<uint32_t>(__i) - __MIN_BLOCK_2[__idx];\r\n      // Temporary: __j is usually around 128, and by shifting a bit, we push it to 128 or above, which is\r\n      // a slightly faster code path in __mulShift_mod1e9. Instead, we can just increase the multipliers.\r\n      __digits = (__p >= __POW10_OFFSET_2[__idx + 1]) ? 0 : __mulShift_mod1e9(__m2 << 8, __POW10_SPLIT_2[__p], __j + 8);\r\n      if (__printedDigits != 0) {\r\n        if (__printedDigits + 9 > __precision) {\r\n          __availableDigits = 9;\r\n          break;\r\n        }\r\n        if (_Last - _First < 9) {\r\n          return { _Last, errc::value_too_large };\r\n        }\r\n        __append_nine_digits(__digits, _First);\r\n        _First += 9;\r\n        __printedDigits += 9;\r\n      } else if (__digits != 0) {\r\n        __availableDigits = __decimalLength9(__digits);\r\n        __exp = -(__i + 1) * 9 + static_cast<int32_t>(__availableDigits) - 1;\r\n        if (__availableDigits > __precision) {\r\n          break;\r\n        }\r\n        if (__printDecimalPoint) {\r\n          if (_Last - _First < static_cast<ptrdiff_t>(__availableDigits + 1)) {\r\n            return { _Last, errc::value_too_large };\r\n          }\r\n          __append_d_digits(__availableDigits, __digits, _First);\r\n          _First += __availableDigits + 1; // +1 for decimal point\r\n        } else {\r\n          if (_First == _Last) {\r\n            return { _Last, errc::value_too_large };\r\n          }\r\n          *_First++ = static_cast<char>('0' + __digits);\r\n        }\r\n        __printedDigits = __availableDigits;\r\n        __availableDigits = 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  const uint32_t __maximum = __precision - __printedDigits;\r\n  if (__availableDigits == 0) {\r\n    __digits = 0;\r\n  }\r\n  uint32_t __lastDigit = 0;\r\n  if (__availableDigits > __maximum) {\r\n    for (uint32_t __k = 0; __k < __availableDigits - __maximum; ++__k) {\r\n      __lastDigit = __digits % 10;\r\n      __digits /= 10;\r\n    }\r\n  }\r\n  // 0 = don't round up; 1 = round up unconditionally; 2 = round up if odd.\r\n  int __roundUp = 0;\r\n  if (__lastDigit != 5) {\r\n    __roundUp = __lastDigit > 5;\r\n  } else {\r\n    // Is m * 2^__e2 * 10^(__precision + 1 - __exp) integer?\r\n    // __precision was already increased by 1, so we don't need to write + 1 here.\r\n    const int32_t __rexp = static_cast<int32_t>(__precision) - __exp;\r\n    const int32_t __requiredTwos = -__e2 - __rexp;\r\n    bool __trailingZeros = __requiredTwos <= 0\r\n      || (__requiredTwos < 60 && __multipleOfPowerOf2(__m2, static_cast<uint32_t>(__requiredTwos)));\r\n    if (__rexp < 0) {\r\n      const int32_t __requiredFives = -__rexp;\r\n      __trailingZeros = __trailingZeros && __multipleOfPowerOf5(__m2, static_cast<uint32_t>(__requiredFives));\r\n    }\r\n    __roundUp = __trailingZeros ? 2 : 1;\r\n  }\r\n  if (__printedDigits != 0) {\r\n    if (_Last - _First < static_cast<ptrdiff_t>(__maximum)) {\r\n      return { _Last, errc::value_too_large };\r\n    }\r\n    if (__digits == 0) {\r\n      _CSTD memset(_First, '0', __maximum);\r\n    } else {\r\n      __append_c_digits(__maximum, __digits, _First);\r\n    }\r\n    _First += __maximum;\r\n  } else {\r\n    if (__printDecimalPoint) {\r\n      if (_Last - _First < static_cast<ptrdiff_t>(__maximum + 1)) {\r\n        return { _Last, errc::value_too_large };\r\n      }\r\n      __append_d_digits(__maximum, __digits, _First);\r\n      _First += __maximum + 1; // +1 for decimal point\r\n    } else {\r\n      if (_First == _Last) {\r\n        return { _Last, errc::value_too_large };\r\n      }\r\n      *_First++ = static_cast<char>('0' + __digits);\r\n    }\r\n  }\r\n  if (__roundUp != 0) {\r\n    char* _Round = _First;\r\n    while (true) {\r\n      if (_Round == _Original_first) {\r\n        _Round[0] = '1';\r\n        ++__exp;\r\n        break;\r\n      }\r\n      --_Round;\r\n      const char __c = _Round[0];\r\n      if (__c == '.') {\r\n        // Keep going.\r\n      } else if (__c == '9') {\r\n        _Round[0] = '0';\r\n        __roundUp = 1;\r\n      } else {\r\n        if (__roundUp == 1 || __c % 2 != 0) {\r\n          _Round[0] = static_cast<char>(__c + 1);\r\n        }\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  char _Sign_character;\r\n\r\n  if (__exp < 0) {\r\n    _Sign_character = '-';\r\n    __exp = -__exp;\r\n  } else {\r\n    _Sign_character = '+';\r\n  }\r\n\r\n  const int _Exponent_part_length = __exp >= 100\r\n    ? 5 // \"e+NNN\"\r\n    : 4; // \"e+NN\"\r\n\r\n  if (_Last - _First < _Exponent_part_length) {\r\n    return { _Last, errc::value_too_large };\r\n  }\r\n\r\n  *_First++ = 'e';\r\n  *_First++ = _Sign_character;\r\n\r\n  if (__exp >= 100) {\r\n    const int32_t __c = __exp % 10;\r\n    _CSTD memcpy(_First, __DIGIT_TABLE<char> + 2 * (__exp / 10), 2);\r\n    _First[2] = static_cast<char>('0' + __c);\r\n    _First += 3;\r\n  } else {\r\n    _CSTD memcpy(_First, __DIGIT_TABLE<char> + 2 * __exp, 2);\r\n    _First += 2;\r\n  }\r\n\r\n  return { _First, errc{} };\r\n}\r\n\r\n// ^^^^^^^^^^ DERIVED FROM d2fixed.c ^^^^^^^^^^\r\n\r\n// vvvvvvvvvv DERIVED FROM f2s.c vvvvvvvvvv\r\n\r\ninline constexpr int __FLOAT_MANTISSA_BITS = 23;\r\ninline constexpr int __FLOAT_BIAS = 127;\r\n\r\n// This table is generated by PrintFloatLookupTable.\r\ninline constexpr int __FLOAT_POW5_INV_BITCOUNT = 59;\r\ninline constexpr uint64_t __FLOAT_POW5_INV_SPLIT[31] = {\r\n  576460752303423489u, 461168601842738791u, 368934881474191033u, 295147905179352826u,\r\n  472236648286964522u, 377789318629571618u, 302231454903657294u, 483570327845851670u,\r\n  386856262276681336u, 309485009821345069u, 495176015714152110u, 396140812571321688u,\r\n  316912650057057351u, 507060240091291761u, 405648192073033409u, 324518553658426727u,\r\n  519229685853482763u, 415383748682786211u, 332306998946228969u, 531691198313966350u,\r\n  425352958651173080u, 340282366920938464u, 544451787073501542u, 435561429658801234u,\r\n  348449143727040987u, 557518629963265579u, 446014903970612463u, 356811923176489971u,\r\n  570899077082383953u, 456719261665907162u, 365375409332725730u\r\n};\r\ninline constexpr int __FLOAT_POW5_BITCOUNT = 61;\r\ninline constexpr uint64_t __FLOAT_POW5_SPLIT[47] = {\r\n  1152921504606846976u, 1441151880758558720u, 1801439850948198400u, 2251799813685248000u,\r\n  1407374883553280000u, 1759218604441600000u, 2199023255552000000u, 1374389534720000000u,\r\n  1717986918400000000u, 2147483648000000000u, 1342177280000000000u, 1677721600000000000u,\r\n  2097152000000000000u, 1310720000000000000u, 1638400000000000000u, 2048000000000000000u,\r\n  1280000000000000000u, 1600000000000000000u, 2000000000000000000u, 1250000000000000000u,\r\n  1562500000000000000u, 1953125000000000000u, 1220703125000000000u, 1525878906250000000u,\r\n  1907348632812500000u, 1192092895507812500u, 1490116119384765625u, 1862645149230957031u,\r\n  1164153218269348144u, 1455191522836685180u, 1818989403545856475u, 2273736754432320594u,\r\n  1421085471520200371u, 1776356839400250464u, 2220446049250313080u, 1387778780781445675u,\r\n  1734723475976807094u, 2168404344971008868u, 1355252715606880542u, 1694065894508600678u,\r\n  2117582368135750847u, 1323488980084844279u, 1654361225106055349u, 2067951531382569187u,\r\n  1292469707114105741u, 1615587133892632177u, 2019483917365790221u\r\n};\r\n\r\n_NODISCARD inline uint32_t __pow5Factor(uint32_t __value) {\r\n  uint32_t __count = 0;\r\n  for (;;) {\r\n    _STL_INTERNAL_CHECK(__value != 0);\r\n    const uint32_t __q = __value / 5;\r\n    const uint32_t __r = __value % 5;\r\n    if (__r != 0) {\r\n      break;\r\n    }\r\n    __value = __q;\r\n    ++__count;\r\n  }\r\n  return __count;\r\n}\r\n\r\n// Returns true if __value is divisible by 5^__p.\r\n_NODISCARD inline bool __multipleOfPowerOf5(const uint32_t __value, const uint32_t __p) {\r\n  return __pow5Factor(__value) >= __p;\r\n}\r\n\r\n// Returns true if __value is divisible by 2^__p.\r\n_NODISCARD inline bool __multipleOfPowerOf2(const uint32_t __value, const uint32_t __p) {\r\n  _STL_INTERNAL_CHECK(__value != 0);\r\n  _STL_INTERNAL_CHECK(__p < 32);\r\n  // return __builtin_ctz(__value) >= __p;\r\n  return (__value & ((1u << __p) - 1)) == 0;\r\n}\r\n\r\n_NODISCARD inline uint32_t __mulShift(const uint32_t __m, const uint64_t __factor, const int32_t __shift) {\r\n  _STL_INTERNAL_CHECK(__shift > 32);\r\n\r\n  // The casts here help MSVC to avoid calls to the __allmul library\r\n  // function.\r\n  const uint32_t __factorLo = static_cast<uint32_t>(__factor);\r\n  const uint32_t __factorHi = static_cast<uint32_t>(__factor >> 32);\r\n  const uint64_t __bits0 = static_cast<uint64_t>(__m) * __factorLo;\r\n  const uint64_t __bits1 = static_cast<uint64_t>(__m) * __factorHi;\r\n\r\n#ifndef _WIN64\r\n  // On 32-bit platforms we can avoid a 64-bit shift-right since we only\r\n  // need the upper 32 bits of the result and the shift value is > 32.\r\n  const uint32_t __bits0Hi = static_cast<uint32_t>(__bits0 >> 32);\r\n  uint32_t __bits1Lo = static_cast<uint32_t>(__bits1);\r\n  uint32_t __bits1Hi = static_cast<uint32_t>(__bits1 >> 32);\r\n  __bits1Lo += __bits0Hi;\r\n  __bits1Hi += (__bits1Lo < __bits0Hi);\r\n  const int32_t __s = __shift - 32;\r\n  return (__bits1Hi << (32 - __s)) | (__bits1Lo >> __s);\r\n#else // ^^^ 32-bit / 64-bit vvv\r\n  const uint64_t __sum = (__bits0 >> 32) + __bits1;\r\n  const uint64_t __shiftedSum = __sum >> (__shift - 32);\r\n  _STL_INTERNAL_CHECK(__shiftedSum <= UINT32_MAX);\r\n  return static_cast<uint32_t>(__shiftedSum);\r\n#endif // ^^^ 64-bit ^^^\r\n}\r\n\r\n_NODISCARD inline uint32_t __mulPow5InvDivPow2(const uint32_t __m, const uint32_t __q, const int32_t __j) {\r\n  return __mulShift(__m, __FLOAT_POW5_INV_SPLIT[__q], __j);\r\n}\r\n\r\n_NODISCARD inline uint32_t __mulPow5divPow2(const uint32_t __m, const uint32_t __i, const int32_t __j) {\r\n  return __mulShift(__m, __FLOAT_POW5_SPLIT[__i], __j);\r\n}\r\n\r\n// A floating decimal representing m * 10^e.\r\nstruct __floating_decimal_32 {\r\n  uint32_t __mantissa;\r\n  int32_t __exponent;\r\n};\r\n\r\n_NODISCARD inline __floating_decimal_32 __f2d(const uint32_t __ieeeMantissa, const uint32_t __ieeeExponent) {\r\n  int32_t __e2;\r\n  uint32_t __m2;\r\n  if (__ieeeExponent == 0) {\r\n    // We subtract 2 so that the bounds computation has 2 additional bits.\r\n    __e2 = 1 - __FLOAT_BIAS - __FLOAT_MANTISSA_BITS - 2;\r\n    __m2 = __ieeeMantissa;\r\n  } else {\r\n    __e2 = static_cast<int32_t>(__ieeeExponent) - __FLOAT_BIAS - __FLOAT_MANTISSA_BITS - 2;\r\n    __m2 = (1u << __FLOAT_MANTISSA_BITS) | __ieeeMantissa;\r\n  }\r\n  const bool __even = (__m2 & 1) == 0;\r\n  const bool __acceptBounds = __even;\r\n\r\n  // Step 2: Determine the interval of valid decimal representations.\r\n  const uint32_t __mv = 4 * __m2;\r\n  const uint32_t __mp = 4 * __m2 + 2;\r\n  // Implicit bool -> int conversion. True is 1, false is 0.\r\n  const uint32_t __mmShift = __ieeeMantissa != 0 || __ieeeExponent <= 1;\r\n  const uint32_t __mm = 4 * __m2 - 1 - __mmShift;\r\n\r\n  // Step 3: Convert to a decimal power base using 64-bit arithmetic.\r\n  uint32_t __vr, __vp, __vm;\r\n  int32_t __e10;\r\n  bool __vmIsTrailingZeros = false;\r\n  bool __vrIsTrailingZeros = false;\r\n  uint8_t __lastRemovedDigit = 0;\r\n  if (__e2 >= 0) {\r\n    const uint32_t __q = __log10Pow2(__e2);\r\n    __e10 = static_cast<int32_t>(__q);\r\n    const int32_t __k = __FLOAT_POW5_INV_BITCOUNT + __pow5bits(static_cast<int32_t>(__q)) - 1;\r\n    const int32_t __i = -__e2 + static_cast<int32_t>(__q) + __k;\r\n    __vr = __mulPow5InvDivPow2(__mv, __q, __i);\r\n    __vp = __mulPow5InvDivPow2(__mp, __q, __i);\r\n    __vm = __mulPow5InvDivPow2(__mm, __q, __i);\r\n    if (__q != 0 && (__vp - 1) / 10 <= __vm / 10) {\r\n      // We need to know one removed digit even if we are not going to loop below. We could use\r\n      // __q = X - 1 above, except that would require 33 bits for the result, and we've found that\r\n      // 32-bit arithmetic is faster even on 64-bit machines.\r\n      const int32_t __l = __FLOAT_POW5_INV_BITCOUNT + __pow5bits(static_cast<int32_t>(__q - 1)) - 1;\r\n      __lastRemovedDigit = static_cast<uint8_t>(__mulPow5InvDivPow2(__mv, __q - 1,\r\n        -__e2 + static_cast<int32_t>(__q) - 1 + __l) % 10);\r\n    }\r\n    if (__q <= 9) {\r\n      // The largest power of 5 that fits in 24 bits is 5^10, but __q <= 9 seems to be safe as well.\r\n      // Only one of __mp, __mv, and __mm can be a multiple of 5, if any.\r\n      if (__mv % 5 == 0) {\r\n        __vrIsTrailingZeros = __multipleOfPowerOf5(__mv, __q);\r\n      } else if (__acceptBounds) {\r\n        __vmIsTrailingZeros = __multipleOfPowerOf5(__mm, __q);\r\n      } else {\r\n        __vp -= __multipleOfPowerOf5(__mp, __q);\r\n      }\r\n    }\r\n  } else {\r\n    const uint32_t __q = __log10Pow5(-__e2);\r\n    __e10 = static_cast<int32_t>(__q) + __e2;\r\n    const int32_t __i = -__e2 - static_cast<int32_t>(__q);\r\n    const int32_t __k = __pow5bits(__i) - __FLOAT_POW5_BITCOUNT;\r\n    int32_t __j = static_cast<int32_t>(__q) - __k;\r\n    __vr = __mulPow5divPow2(__mv, static_cast<uint32_t>(__i), __j);\r\n    __vp = __mulPow5divPow2(__mp, static_cast<uint32_t>(__i), __j);\r\n    __vm = __mulPow5divPow2(__mm, static_cast<uint32_t>(__i), __j);\r\n    if (__q != 0 && (__vp - 1) / 10 <= __vm / 10) {\r\n      __j = static_cast<int32_t>(__q) - 1 - (__pow5bits(__i + 1) - __FLOAT_POW5_BITCOUNT);\r\n      __lastRemovedDigit = static_cast<uint8_t>(__mulPow5divPow2(__mv, static_cast<uint32_t>(__i + 1), __j) % 10);\r\n    }\r\n    if (__q <= 1) {\r\n      // {__vr,__vp,__vm} is trailing zeros if {__mv,__mp,__mm} has at least __q trailing 0 bits.\r\n      // __mv = 4 * __m2, so it always has at least two trailing 0 bits.\r\n      __vrIsTrailingZeros = true;\r\n      if (__acceptBounds) {\r\n        // __mm = __mv - 1 - __mmShift, so it has 1 trailing 0 bit iff __mmShift == 1.\r\n        __vmIsTrailingZeros = __mmShift == 1;\r\n      } else {\r\n        // __mp = __mv + 2, so it always has at least one trailing 0 bit.\r\n        --__vp;\r\n      }\r\n    } else if (__q < 31) { // TRANSITION(ulfjack): Use a tighter bound here.\r\n      __vrIsTrailingZeros = __multipleOfPowerOf2(__mv, __q - 1);\r\n    }\r\n  }\r\n\r\n  // Step 4: Find the shortest decimal representation in the interval of valid representations.\r\n  int32_t __removed = 0;\r\n  uint32_t _Output;\r\n  if (__vmIsTrailingZeros || __vrIsTrailingZeros) {\r\n    // General case, which happens rarely (~4.0%).\r\n    while (__vp / 10 > __vm / 10) {\r\n#ifdef __clang__ // TRANSITION, LLVM-23106\r\n      __vmIsTrailingZeros &= __vm - (__vm / 10) * 10 == 0;\r\n#else\r\n      __vmIsTrailingZeros &= __vm % 10 == 0;\r\n#endif\r\n      __vrIsTrailingZeros &= __lastRemovedDigit == 0;\r\n      __lastRemovedDigit = static_cast<uint8_t>(__vr % 10);\r\n      __vr /= 10;\r\n      __vp /= 10;\r\n      __vm /= 10;\r\n      ++__removed;\r\n    }\r\n    if (__vmIsTrailingZeros) {\r\n      while (__vm % 10 == 0) {\r\n        __vrIsTrailingZeros &= __lastRemovedDigit == 0;\r\n        __lastRemovedDigit = static_cast<uint8_t>(__vr % 10);\r\n        __vr /= 10;\r\n        __vp /= 10;\r\n        __vm /= 10;\r\n        ++__removed;\r\n      }\r\n    }\r\n    if (__vrIsTrailingZeros && __lastRemovedDigit == 5 && __vr % 2 == 0) {\r\n      // Round even if the exact number is .....50..0.\r\n      __lastRemovedDigit = 4;\r\n    }\r\n    // We need to take __vr + 1 if __vr is outside bounds or we need to round up.\r\n    _Output = __vr + ((__vr == __vm && (!__acceptBounds || !__vmIsTrailingZeros)) || __lastRemovedDigit >= 5);\r\n  } else {\r\n    // Specialized for the common case (~96.0%). Percentages below are relative to this.\r\n    // Loop iterations below (approximately):\r\n    // 0: 13.6%, 1: 70.7%, 2: 14.1%, 3: 1.39%, 4: 0.14%, 5+: 0.01%\r\n    while (__vp / 10 > __vm / 10) {\r\n      __lastRemovedDigit = static_cast<uint8_t>(__vr % 10);\r\n      __vr /= 10;\r\n      __vp /= 10;\r\n      __vm /= 10;\r\n      ++__removed;\r\n    }\r\n    // We need to take __vr + 1 if __vr is outside bounds or we need to round up.\r\n    _Output = __vr + (__vr == __vm || __lastRemovedDigit >= 5);\r\n  }\r\n  const int32_t __exp = __e10 + __removed;\r\n\r\n  __floating_decimal_32 __fd;\r\n  __fd.__exponent = __exp;\r\n  __fd.__mantissa = _Output;\r\n  return __fd;\r\n}\r\n\r\ntemplate <class _CharT>\r\n_NODISCARD pair<_CharT*, errc> _Large_integer_to_chars(_CharT* const _First, _CharT* const _Last,\r\n  const uint32_t _Mantissa2, const int32_t _Exponent2) {\r\n\r\n  // Print the integer _Mantissa2 * 2^_Exponent2 exactly.\r\n\r\n  // For nonzero integers, _Exponent2 >= -23. (The minimum value occurs when _Mantissa2 * 2^_Exponent2 is 1.\r\n  // In that case, _Mantissa2 is the implicit 1 bit followed by 23 zeros, so _Exponent2 is -23 to shift away\r\n  // the zeros.) The dense range of exactly representable integers has negative or zero exponents\r\n  // (as positive exponents make the range non-dense). For that dense range, Ryu will always be used:\r\n  // every digit is necessary to uniquely identify the value, so Ryu must print them all.\r\n\r\n  // Positive exponents are the non-dense range of exactly representable integers.\r\n  // This contains all of the values for which Ryu can't be used (and a few Ryu-friendly values).\r\n\r\n  // Performance note: Long division appears to be faster than losslessly widening float to double and calling\r\n  // __d2fixed_buffered_n(). If __f2fixed_buffered_n() is implemented, it might be faster than long division.\r\n\r\n  _STL_INTERNAL_CHECK(_Exponent2 > 0);\r\n  _STL_INTERNAL_CHECK(_Exponent2 <= 104); // because __ieeeExponent <= 254\r\n\r\n  // Manually represent _Mantissa2 * 2^_Exponent2 as a large integer. _Mantissa2 is always 24 bits\r\n  // (due to the implicit bit), while _Exponent2 indicates a shift of at most 104 bits.\r\n  // 24 + 104 equals 128 equals 4 * 32, so we need exactly 4 32-bit elements.\r\n  // We use a little-endian representation, visualized like this:\r\n\r\n  // << left shift <<\r\n  // most significant\r\n  // _Data[3] _Data[2] _Data[1] _Data[0]\r\n  //                   least significant\r\n  //                   >> right shift >>\r\n\r\n  constexpr uint32_t _Data_size = 4;\r\n  uint32_t _Data[_Data_size]{};\r\n\r\n  // _Maxidx is the index of the most significant nonzero element.\r\n  uint32_t _Maxidx = ((24 + static_cast<uint32_t>(_Exponent2) + 31) / 32) - 1;\r\n  _STL_INTERNAL_CHECK(_Maxidx < _Data_size);\r\n\r\n  const uint32_t _Bit_shift = static_cast<uint32_t>(_Exponent2) % 32;\r\n  if (_Bit_shift <= 8) { // _Mantissa2's 24 bits don't cross an element boundary\r\n    _Data[_Maxidx] = _Mantissa2 << _Bit_shift;\r\n  } else { // _Mantissa2's 24 bits cross an element boundary\r\n    _Data[_Maxidx - 1] = _Mantissa2 << _Bit_shift;\r\n    _Data[_Maxidx] = _Mantissa2 >> (32 - _Bit_shift);\r\n  }\r\n\r\n  // If Ryu hasn't determined the total output length, we need to buffer the digits generated from right to left\r\n  // by long division. The largest possible float is: 340'282346638'528859811'704183484'516925440\r\n  uint32_t _Blocks[4];\r\n  int32_t _Filled_blocks = 0;\r\n  // From left to right, we're going to print:\r\n  // _Data[0] will be [1, 10] digits.\r\n  // Then if _Filled_blocks > 0:\r\n  // _Blocks[_Filled_blocks - 1], ..., _Blocks[0] will be 0-filled 9-digit blocks.\r\n\r\n  if (_Maxidx != 0) { // If the integer is actually large, perform long division.\r\n                      // Otherwise, skip to printing _Data[0].\r\n    for (;;) {\r\n      // Loop invariant: _Maxidx != 0 (i.e. the integer is actually large)\r\n\r\n      const uint32_t _Most_significant_elem = _Data[_Maxidx];\r\n      const uint32_t _Initial_remainder = _Most_significant_elem % 1000000000;\r\n      const uint32_t _Initial_quotient = _Most_significant_elem / 1000000000;\r\n      _Data[_Maxidx] = _Initial_quotient;\r\n      uint64_t _Remainder = _Initial_remainder;\r\n\r\n      // Process less significant elements.\r\n      uint32_t _Idx = _Maxidx;\r\n      do {\r\n        --_Idx; // Initially, _Remainder is at most 10^9 - 1.\r\n\r\n        // Now, _Remainder is at most (10^9 - 1) * 2^32 + 2^32 - 1, simplified to 10^9 * 2^32 - 1.\r\n        _Remainder = (_Remainder << 32) | _Data[_Idx];\r\n\r\n        // floor((10^9 * 2^32 - 1) / 10^9) == 2^32 - 1, so uint32_t _Quotient is lossless.\r\n        const uint32_t _Quotient = static_cast<uint32_t>(__div1e9(_Remainder));\r\n\r\n        // _Remainder is at most 10^9 - 1 again.\r\n        // For uint32_t truncation, see the __mod1e9() comment in d2s_intrinsics.h.\r\n        _Remainder = static_cast<uint32_t>(_Remainder) - 1000000000u * _Quotient;\r\n\r\n        _Data[_Idx] = _Quotient;\r\n      } while (_Idx != 0);\r\n\r\n      // Store a 0-filled 9-digit block.\r\n      _Blocks[_Filled_blocks++] = static_cast<uint32_t>(_Remainder);\r\n\r\n      if (_Initial_quotient == 0) { // Is the large integer shrinking?\r\n        --_Maxidx; // log2(10^9) is 29.9, so we can't shrink by more than one element.\r\n        if (_Maxidx == 0) {\r\n          break; // We've finished long division. Now we need to print _Data[0].\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  _STL_INTERNAL_CHECK(_Data[0] != 0);\r\n  for (uint32_t _Idx = 1; _Idx < _Data_size; ++_Idx) {\r\n    _STL_INTERNAL_CHECK(_Data[_Idx] == 0);\r\n  }\r\n\r\n  const uint32_t _Data_olength = _Data[0] >= 1000000000 ? 10 : __decimalLength9(_Data[0]);\r\n  const uint32_t _Total_fixed_length = _Data_olength + 9 * _Filled_blocks;\r\n\r\n  if (_Last - _First < static_cast<ptrdiff_t>(_Total_fixed_length)) {\r\n    return { _Last, errc::value_too_large };\r\n  }\r\n\r\n  _CharT* _Result = _First;\r\n\r\n  // Print _Data[0]. While it's up to 10 digits,\r\n  // which is more than Ryu generates, the code below can handle this.\r\n  __append_n_digits(_Data_olength, _Data[0], _Result);\r\n  _Result += _Data_olength;\r\n\r\n  // Print 0-filled 9-digit blocks.\r\n  for (int32_t _Idx = _Filled_blocks - 1; _Idx >= 0; --_Idx) {\r\n    __append_nine_digits(_Blocks[_Idx], _Result);\r\n    _Result += 9;\r\n  }\r\n\r\n  return { _Result, errc{} };\r\n}\r\n\r\ntemplate <class _CharT>\r\n_NODISCARD pair<_CharT*, errc> __to_chars(_CharT* const _First, _CharT* const _Last, const __floating_decimal_32 __v,\r\n  chars_format _Fmt, const uint32_t __ieeeMantissa, const uint32_t __ieeeExponent) {\r\n  // Step 5: Print the decimal representation.\r\n  uint32_t _Output = __v.__mantissa;\r\n  const int32_t _Ryu_exponent = __v.__exponent;\r\n  const uint32_t __olength = __decimalLength9(_Output);\r\n  int32_t _Scientific_exponent = _Ryu_exponent + static_cast<int32_t>(__olength) - 1;\r\n\r\n  if (_Fmt == chars_format{}) {\r\n    int32_t _Lower;\r\n    int32_t _Upper;\r\n\r\n    if (__olength == 1) {\r\n      // Value | Fixed   | Scientific\r\n      // 1e-3  | \"0.001\" | \"1e-03\"\r\n      // 1e4   | \"10000\" | \"1e+04\"\r\n      _Lower = -3;\r\n      _Upper = 4;\r\n    } else {\r\n      // Value   | Fixed       | Scientific\r\n      // 1234e-7 | \"0.0001234\" | \"1.234e-04\"\r\n      // 1234e5  | \"123400000\" | \"1.234e+08\"\r\n      _Lower = -static_cast<int32_t>(__olength + 3);\r\n      _Upper = 5;\r\n    }\r\n\r\n    if (_Lower <= _Ryu_exponent && _Ryu_exponent <= _Upper) {\r\n      _Fmt = chars_format::fixed;\r\n    } else {\r\n      _Fmt = chars_format::scientific;\r\n    }\r\n  } else if (_Fmt == chars_format::general) {\r\n    // C11 7.21.6.1 \"The fprintf function\"/8:\r\n    // \"Let P equal [...] 6 if the precision is omitted [...].\r\n    // Then, if a conversion with style E would have an exponent of X:\r\n    // - if P > X >= -4, the conversion is with style f [...].\r\n    // - otherwise, the conversion is with style e [...].\"\r\n    if (-4 <= _Scientific_exponent && _Scientific_exponent < 6) {\r\n      _Fmt = chars_format::fixed;\r\n    } else {\r\n      _Fmt = chars_format::scientific;\r\n    }\r\n  }\r\n\r\n  if (_Fmt == chars_format::fixed) {\r\n    // Example: _Output == 1729, __olength == 4\r\n\r\n    // _Ryu_exponent | Printed  | _Whole_digits | _Total_fixed_length  | Notes\r\n    // --------------|----------|---------------|----------------------|---------------------------------------\r\n    //             2 | 172900   |  6            | _Whole_digits        | Ryu can't be used for printing\r\n    //             1 | 17290    |  5            | (sometimes adjusted) | when the trimmed digits are nonzero.\r\n    // --------------|----------|---------------|----------------------|---------------------------------------\r\n    //             0 | 1729     |  4            | _Whole_digits        | Unified length cases.\r\n    // --------------|----------|---------------|----------------------|---------------------------------------\r\n    //            -1 | 172.9    |  3            | __olength + 1        | This case can't happen for\r\n    //            -2 | 17.29    |  2            |                      | __olength == 1, but no additional\r\n    //            -3 | 1.729    |  1            |                      | code is needed to avoid it.\r\n    // --------------|----------|---------------|----------------------|---------------------------------------\r\n    //            -4 | 0.1729   |  0            | 2 - _Ryu_exponent    | C11 7.21.6.1 \"The fprintf function\"/8:\r\n    //            -5 | 0.01729  | -1            |                      | \"If a decimal-point character appears,\r\n    //            -6 | 0.001729 | -2            |                      | at least one digit appears before it.\"\r\n\r\n    const int32_t _Whole_digits = static_cast<int32_t>(__olength) + _Ryu_exponent;\r\n\r\n    uint32_t _Total_fixed_length;\r\n    if (_Ryu_exponent >= 0) { // cases \"172900\" and \"1729\"\r\n      _Total_fixed_length = static_cast<uint32_t>(_Whole_digits);\r\n      if (_Output == 1) {\r\n        // Rounding can affect the number of digits.\r\n        // For example, 1e11f is exactly \"99999997952\" which is 11 digits instead of 12.\r\n        // We can use a lookup table to detect this and adjust the total length.\r\n        static constexpr uint8_t _Adjustment[39] = {\r\n          0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,1,1,0,1,1,1 };\r\n        _Total_fixed_length -= _Adjustment[_Ryu_exponent];\r\n        // _Whole_digits doesn't need to be adjusted because these cases won't refer to it later.\r\n      }\r\n    } else if (_Whole_digits > 0) { // case \"17.29\"\r\n      _Total_fixed_length = __olength + 1;\r\n    } else { // case \"0.001729\"\r\n      _Total_fixed_length = static_cast<uint32_t>(2 - _Ryu_exponent);\r\n    }\r\n\r\n    if (_Last - _First < static_cast<ptrdiff_t>(_Total_fixed_length)) {\r\n      return { _Last, errc::value_too_large };\r\n    }\r\n\r\n    _CharT* _Mid;\r\n    if (_Ryu_exponent > 0) { // case \"172900\"\r\n      bool _Can_use_ryu;\r\n\r\n      if (_Ryu_exponent > 10) { // 10^10 is the largest power of 10 that's exactly representable as a float.\r\n        _Can_use_ryu = false;\r\n      } else {\r\n        // Ryu generated X: __v.__mantissa * 10^_Ryu_exponent\r\n        // __v.__mantissa == 2^_Trailing_zero_bits * (__v.__mantissa >> _Trailing_zero_bits)\r\n        // 10^_Ryu_exponent == 2^_Ryu_exponent * 5^_Ryu_exponent\r\n\r\n        // _Trailing_zero_bits is [0, 29] (aside: because 2^29 is the largest power of 2\r\n        // with 9 decimal digits, which is float's round-trip limit.)\r\n        // _Ryu_exponent is [1, 10].\r\n        // Normalization adds [2, 23] (aside: at least 2 because the pre-normalized mantissa is at least 5).\r\n        // This adds up to [3, 62], which is well below float's maximum binary exponent 127.\r\n\r\n        // Therefore, we just need to consider (__v.__mantissa >> _Trailing_zero_bits) * 5^_Ryu_exponent.\r\n\r\n        // If that product would exceed 24 bits, then X can't be exactly represented as a float.\r\n        // (That's not a problem for round-tripping, because X is close enough to the original float,\r\n        // but X isn't mathematically equal to the original float.) This requires a high-precision fallback.\r\n\r\n        // If the product is 24 bits or smaller, then X can be exactly represented as a float (and we don't\r\n        // need to re-synthesize it; the original float must have been X, because Ryu wouldn't produce the\r\n        // same output for two different floats X and Y). This allows Ryu's output to be used (zero-filled).\r\n\r\n        // (2^24 - 1) / 5^0 (for indexing), (2^24 - 1) / 5^1, ..., (2^24 - 1) / 5^10\r\n        static constexpr uint32_t _Max_shifted_mantissa[11] = {\r\n          16777215, 3355443, 671088, 134217, 26843, 5368, 1073, 214, 42, 8, 1 };\r\n\r\n        unsigned long _Trailing_zero_bits;\r\n        (void) _BitScanForward(&_Trailing_zero_bits, __v.__mantissa); // __v.__mantissa is guaranteed nonzero\r\n        const uint32_t _Shifted_mantissa = __v.__mantissa >> _Trailing_zero_bits;\r\n        _Can_use_ryu = _Shifted_mantissa <= _Max_shifted_mantissa[_Ryu_exponent];\r\n      }\r\n\r\n      if (!_Can_use_ryu) {\r\n        const uint32_t _Mantissa2 = __ieeeMantissa | (1u << __FLOAT_MANTISSA_BITS); // restore implicit bit\r\n        const int32_t _Exponent2 = static_cast<int32_t>(__ieeeExponent)\r\n          - __FLOAT_BIAS - __FLOAT_MANTISSA_BITS; // bias and normalization\r\n\r\n        // Performance note: We've already called Ryu, so this will redundantly perform buffering and bounds checking.\r\n        return _Large_integer_to_chars(_First, _Last, _Mantissa2, _Exponent2);\r\n      }\r\n\r\n      // _Can_use_ryu\r\n      // Print the decimal digits, left-aligned within [_First, _First + _Total_fixed_length).\r\n      _Mid = _First + __olength;\r\n    } else { // cases \"1729\", \"17.29\", and \"0.001729\"\r\n      // Print the decimal digits, right-aligned within [_First, _First + _Total_fixed_length).\r\n      _Mid = _First + _Total_fixed_length;\r\n    }\r\n\r\n    while (_Output >= 10000) {\r\n#ifdef __clang__ // TRANSITION, LLVM-38217\r\n      const uint32_t __c = _Output - 10000 * (_Output / 10000);\r\n#else\r\n      const uint32_t __c = _Output % 10000;\r\n#endif\r\n      _Output /= 10000;\r\n      const uint32_t __c0 = (__c % 100) << 1;\r\n      const uint32_t __c1 = (__c / 100) << 1;\r\n      _CSTD memcpy(_Mid -= 2, __DIGIT_TABLE<_CharT> + __c0, 2 * sizeof(_CharT));\r\n      _CSTD memcpy(_Mid -= 2, __DIGIT_TABLE<_CharT> + __c1, 2 * sizeof(_CharT));\r\n    }\r\n    if (_Output >= 100) {\r\n      const uint32_t __c = (_Output % 100) << 1;\r\n      _Output /= 100;\r\n      _CSTD memcpy(_Mid -= 2, __DIGIT_TABLE<_CharT> + __c, 2 * sizeof(_CharT));\r\n    }\r\n    if (_Output >= 10) {\r\n      const uint32_t __c = _Output << 1;\r\n      _CSTD memcpy(_Mid -= 2, __DIGIT_TABLE<_CharT> + __c, 2 * sizeof(_CharT));\r\n    } else {\r\n      *--_Mid = static_cast<_CharT>(_WIDEN(_CharT, '0') + _Output);\r\n    }\r\n\r\n    if (_Ryu_exponent > 0) { // case \"172900\" with _Can_use_ryu\r\n      // Performance note: it might be more efficient to do this immediately after setting _Mid.\r\n      _STD fill_n(_First + __olength, _Ryu_exponent, _WIDEN(_CharT, '0'));\r\n    } else if (_Ryu_exponent == 0) { // case \"1729\"\r\n      // Done!\r\n    } else if (_Whole_digits > 0) { // case \"17.29\"\r\n      // Performance note: moving digits might not be optimal.\r\n      _CSTD memmove(_First, _First + 1, static_cast<size_t>(_Whole_digits) * sizeof(_CharT));\r\n      _First[_Whole_digits] = _WIDEN(_CharT, '.');\r\n    } else { // case \"0.001729\"\r\n      // Performance note: a larger memset() followed by overwriting '.' might be more efficient.\r\n      _First[0] = _WIDEN(_CharT, '0');\r\n      _First[1] = _WIDEN(_CharT, '.');\r\n      _STD fill_n(_First + 2, -_Whole_digits, _WIDEN(_CharT, '0'));\r\n    }\r\n\r\n    return { _First + _Total_fixed_length, errc{} };\r\n  }\r\n\r\n  const uint32_t _Total_scientific_length =\r\n    __olength + (__olength > 1) + 4; // digits + possible decimal point + scientific exponent\r\n  if (_Last - _First < static_cast<ptrdiff_t>(_Total_scientific_length)) {\r\n    return { _Last, errc::value_too_large };\r\n  }\r\n  _CharT* const __result = _First;\r\n\r\n  // Print the decimal digits.\r\n  uint32_t __i = 0;\r\n  while (_Output >= 10000) {\r\n#ifdef __clang__ // TRANSITION, LLVM-38217\r\n    const uint32_t __c = _Output - 10000 * (_Output / 10000);\r\n#else\r\n    const uint32_t __c = _Output % 10000;\r\n#endif\r\n    _Output /= 10000;\r\n    const uint32_t __c0 = (__c % 100) << 1;\r\n    const uint32_t __c1 = (__c / 100) << 1;\r\n    _CSTD memcpy(__result + __olength - __i - 1, __DIGIT_TABLE<_CharT> + __c0, 2 * sizeof(_CharT));\r\n    _CSTD memcpy(__result + __olength - __i - 3, __DIGIT_TABLE<_CharT> + __c1, 2 * sizeof(_CharT));\r\n    __i += 4;\r\n  }\r\n  if (_Output >= 100) {\r\n    const uint32_t __c = (_Output % 100) << 1;\r\n    _Output /= 100;\r\n    _CSTD memcpy(__result + __olength - __i - 1, __DIGIT_TABLE<_CharT> + __c, 2 * sizeof(_CharT));\r\n    __i += 2;\r\n  }\r\n  if (_Output >= 10) {\r\n    const uint32_t __c = _Output << 1;\r\n    // We can't use memcpy here: the decimal dot goes between these two digits.\r\n    __result[2] = __DIGIT_TABLE<_CharT>[__c + 1];\r\n    __result[0] = __DIGIT_TABLE<_CharT>[__c];\r\n  } else {\r\n    __result[0] = static_cast<_CharT>(_WIDEN(_CharT, '0') + _Output);\r\n  }\r\n\r\n  // Print decimal point if needed.\r\n  uint32_t __index;\r\n  if (__olength > 1) {\r\n    __result[1] = _WIDEN(_CharT, '.');\r\n    __index = __olength + 1;\r\n  } else {\r\n    __index = 1;\r\n  }\r\n\r\n  // Print the exponent.\r\n  __result[__index++] = _WIDEN(_CharT, 'e');\r\n  if (_Scientific_exponent < 0) {\r\n    __result[__index++] = _WIDEN(_CharT, '-');\r\n    _Scientific_exponent = -_Scientific_exponent;\r\n  } else {\r\n    __result[__index++] = _WIDEN(_CharT, '+');\r\n  }\r\n\r\n  _CSTD memcpy(__result + __index, __DIGIT_TABLE<_CharT> + 2 * _Scientific_exponent, 2 * sizeof(_CharT));\r\n  __index += 2;\r\n\r\n  return { _First + _Total_scientific_length, errc{} };\r\n}\r\n\r\n_NODISCARD inline to_chars_result _Convert_to_chars_result(const pair<char*, errc>& _Pair) {\r\n    return {_Pair.first, _Pair.second};\r\n}\r\n\r\ntemplate <class _CharT>\r\n_NODISCARD pair<_CharT*, errc> __f2s_buffered_n(_CharT* const _First, _CharT* const _Last, const float __f,\r\n  const chars_format _Fmt) {\r\n\r\n  // Step 1: Decode the floating-point number, and unify normalized and subnormal cases.\r\n  const uint32_t __bits = __float_to_bits(__f);\r\n\r\n  // Case distinction; exit early for the easy cases.\r\n  if (__bits == 0) {\r\n    if (_Fmt == chars_format::scientific) {\r\n      if (_Last - _First < 5) {\r\n        return { _Last, errc::value_too_large };\r\n      }\r\n\r\n      if constexpr (is_same_v<_CharT, char>) {\r\n        _CSTD memcpy(_First, \"0e+00\", 5);\r\n      } else {\r\n        _CSTD memcpy(_First, L\"0e+00\", 5 * sizeof(wchar_t));\r\n      }\r\n\r\n      return { _First + 5, errc{} };\r\n    }\r\n\r\n    // Print \"0\" for chars_format::fixed, chars_format::general, and chars_format{}.\r\n    if (_First == _Last) {\r\n      return { _Last, errc::value_too_large };\r\n    }\r\n\r\n    *_First = _WIDEN(_CharT, '0');\r\n\r\n    return { _First + 1, errc{} };\r\n  }\r\n\r\n  // Decode __bits into mantissa and exponent.\r\n  const uint32_t __ieeeMantissa = __bits & ((1u << __FLOAT_MANTISSA_BITS) - 1);\r\n  const uint32_t __ieeeExponent = __bits >> __FLOAT_MANTISSA_BITS;\r\n\r\n  // When _Fmt == chars_format::fixed and the floating-point number is a large integer,\r\n  // it's faster to skip Ryu and immediately print the integer exactly.\r\n  if (_Fmt == chars_format::fixed) {\r\n    const uint32_t _Mantissa2 = __ieeeMantissa | (1u << __FLOAT_MANTISSA_BITS); // restore implicit bit\r\n    const int32_t _Exponent2 = static_cast<int32_t>(__ieeeExponent)\r\n      - __FLOAT_BIAS - __FLOAT_MANTISSA_BITS; // bias and normalization\r\n\r\n    // Normal values are equal to _Mantissa2 * 2^_Exponent2.\r\n    // (Subnormals are different, but they'll be rejected by the _Exponent2 test here, so they can be ignored.)\r\n\r\n    if (_Exponent2 > 0) {\r\n      return _Large_integer_to_chars(_First, _Last, _Mantissa2, _Exponent2);\r\n    }\r\n  }\r\n\r\n  const __floating_decimal_32 __v = __f2d(__ieeeMantissa, __ieeeExponent);\r\n  return __to_chars(_First, _Last, __v, _Fmt, __ieeeMantissa, __ieeeExponent);\r\n}\r\n\r\n// ^^^^^^^^^^ DERIVED FROM f2s.c ^^^^^^^^^^\r\n\r\n// vvvvvvvvvv DERIVED FROM d2s.c vvvvvvvvvv\r\n\r\n// We need a 64x128-bit multiplication and a subsequent 128-bit shift.\r\n// Multiplication:\r\n//   The 64-bit factor is variable and passed in, the 128-bit factor comes\r\n//   from a lookup table. We know that the 64-bit factor only has 55\r\n//   significant bits (i.e., the 9 topmost bits are zeros). The 128-bit\r\n//   factor only has 124 significant bits (i.e., the 4 topmost bits are\r\n//   zeros).\r\n// Shift:\r\n//   In principle, the multiplication result requires 55 + 124 = 179 bits to\r\n//   represent. However, we then shift this value to the right by __j, which is\r\n//   at least __j >= 115, so the result is guaranteed to fit into 179 - 115 = 64\r\n//   bits. This means that we only need the topmost 64 significant bits of\r\n//   the 64x128-bit multiplication.\r\n//\r\n// There are several ways to do this:\r\n// 1. Best case: the compiler exposes a 128-bit type.\r\n//    We perform two 64x64-bit multiplications, add the higher 64 bits of the\r\n//    lower result to the higher result, and shift by __j - 64 bits.\r\n//\r\n//    We explicitly cast from 64-bit to 128-bit, so the compiler can tell\r\n//    that these are only 64-bit inputs, and can map these to the best\r\n//    possible sequence of assembly instructions.\r\n//    x64 machines happen to have matching assembly instructions for\r\n//    64x64-bit multiplications and 128-bit shifts.\r\n//\r\n// 2. Second best case: the compiler exposes intrinsics for the x64 assembly\r\n//    instructions mentioned in 1.\r\n//\r\n// 3. We only have 64x64 bit instructions that return the lower 64 bits of\r\n//    the result, i.e., we have to use plain C.\r\n//    Our inputs are less than the full width, so we have three options:\r\n//    a. Ignore this fact and just implement the intrinsics manually.\r\n//    b. Split both into 31-bit pieces, which guarantees no internal overflow,\r\n//       but requires extra work upfront (unless we change the lookup table).\r\n//    c. Split only the first factor into 31-bit pieces, which also guarantees\r\n//       no internal overflow, but requires extra work since the intermediate\r\n//       results are not perfectly aligned.\r\n#if _HAS_CHARCONV_INTRINSICS\r\n\r\n_NODISCARD inline uint64_t __mulShift(const uint64_t __m, const uint64_t* const __mul, const int32_t __j) {\r\n  // __m is maximum 55 bits\r\n  uint64_t __high1;                                               // 128\r\n  const uint64_t __low1 = __ryu_umul128(__m, __mul[1], &__high1); // 64\r\n  uint64_t __high0;                                               // 64\r\n  (void) __ryu_umul128(__m, __mul[0], &__high0);                  // 0\r\n  const uint64_t __sum = __high0 + __low1;\r\n  if (__sum < __high0) {\r\n    ++__high1; // overflow into __high1\r\n  }\r\n  return __ryu_shiftright128(__sum, __high1, static_cast<uint32_t>(__j - 64));\r\n}\r\n\r\n_NODISCARD inline uint64_t __mulShiftAll(const uint64_t __m, const uint64_t* const __mul, const int32_t __j,\r\n  uint64_t* const __vp, uint64_t* const __vm, const uint32_t __mmShift) {\r\n  *__vp = __mulShift(4 * __m + 2, __mul, __j);\r\n  *__vm = __mulShift(4 * __m - 1 - __mmShift, __mul, __j);\r\n  return __mulShift(4 * __m, __mul, __j);\r\n}\r\n\r\n#else // ^^^ intrinsics available / intrinsics unavailable vvv\r\n\r\n_NODISCARD __forceinline uint64_t __mulShiftAll(uint64_t __m, const uint64_t* const __mul, const int32_t __j,\r\n  uint64_t* const __vp, uint64_t* const __vm, const uint32_t __mmShift) { // TRANSITION, VSO-634761\r\n  __m <<= 1;\r\n  // __m is maximum 55 bits\r\n  uint64_t __tmp;\r\n  const uint64_t __lo = __ryu_umul128(__m, __mul[0], &__tmp);\r\n  uint64_t __hi;\r\n  const uint64_t __mid = __tmp + __ryu_umul128(__m, __mul[1], &__hi);\r\n  __hi += __mid < __tmp; // overflow into __hi\r\n\r\n  const uint64_t __lo2 = __lo + __mul[0];\r\n  const uint64_t __mid2 = __mid + __mul[1] + (__lo2 < __lo);\r\n  const uint64_t __hi2 = __hi + (__mid2 < __mid);\r\n  *__vp = __ryu_shiftright128(__mid2, __hi2, static_cast<uint32_t>(__j - 64 - 1));\r\n\r\n  if (__mmShift == 1) {\r\n    const uint64_t __lo3 = __lo - __mul[0];\r\n    const uint64_t __mid3 = __mid - __mul[1] - (__lo3 > __lo);\r\n    const uint64_t __hi3 = __hi - (__mid3 > __mid);\r\n    *__vm = __ryu_shiftright128(__mid3, __hi3, static_cast<uint32_t>(__j - 64 - 1));\r\n  } else {\r\n    const uint64_t __lo3 = __lo + __lo;\r\n    const uint64_t __mid3 = __mid + __mid + (__lo3 < __lo);\r\n    const uint64_t __hi3 = __hi + __hi + (__mid3 < __mid);\r\n    const uint64_t __lo4 = __lo3 - __mul[0];\r\n    const uint64_t __mid4 = __mid3 - __mul[1] - (__lo4 > __lo3);\r\n    const uint64_t __hi4 = __hi3 - (__mid4 > __mid3);\r\n    *__vm = __ryu_shiftright128(__mid4, __hi4, static_cast<uint32_t>(__j - 64));\r\n  }\r\n\r\n  return __ryu_shiftright128(__mid, __hi, static_cast<uint32_t>(__j - 64 - 1));\r\n}\r\n\r\n#endif // ^^^ intrinsics unavailable ^^^\r\n\r\n_NODISCARD inline uint32_t __decimalLength17(const uint64_t __v) {\r\n  // This is slightly faster than a loop.\r\n  // The average output length is 16.38 digits, so we check high-to-low.\r\n  // Function precondition: __v is not an 18, 19, or 20-digit number.\r\n  // (17 digits are sufficient for round-tripping.)\r\n  _STL_INTERNAL_CHECK(__v < 100000000000000000u);\r\n  if (__v >= 10000000000000000u) { return 17; }\r\n  if (__v >= 1000000000000000u) { return 16; }\r\n  if (__v >= 100000000000000u) { return 15; }\r\n  if (__v >= 10000000000000u) { return 14; }\r\n  if (__v >= 1000000000000u) { return 13; }\r\n  if (__v >= 100000000000u) { return 12; }\r\n  if (__v >= 10000000000u) { return 11; }\r\n  if (__v >= 1000000000u) { return 10; }\r\n  if (__v >= 100000000u) { return 9; }\r\n  if (__v >= 10000000u) { return 8; }\r\n  if (__v >= 1000000u) { return 7; }\r\n  if (__v >= 100000u) { return 6; }\r\n  if (__v >= 10000u) { return 5; }\r\n  if (__v >= 1000u) { return 4; }\r\n  if (__v >= 100u) { return 3; }\r\n  if (__v >= 10u) { return 2; }\r\n  return 1;\r\n}\r\n\r\n// A floating decimal representing m * 10^e.\r\nstruct __floating_decimal_64 {\r\n  uint64_t __mantissa;\r\n  int32_t __exponent;\r\n};\r\n\r\n_NODISCARD inline __floating_decimal_64 __d2d(const uint64_t __ieeeMantissa, const uint32_t __ieeeExponent) {\r\n  int32_t __e2;\r\n  uint64_t __m2;\r\n  if (__ieeeExponent == 0) {\r\n    // We subtract 2 so that the bounds computation has 2 additional bits.\r\n    __e2 = 1 - __DOUBLE_BIAS - __DOUBLE_MANTISSA_BITS - 2;\r\n    __m2 = __ieeeMantissa;\r\n  } else {\r\n    __e2 = static_cast<int32_t>(__ieeeExponent) - __DOUBLE_BIAS - __DOUBLE_MANTISSA_BITS - 2;\r\n    __m2 = (1ull << __DOUBLE_MANTISSA_BITS) | __ieeeMantissa;\r\n  }\r\n  const bool __even = (__m2 & 1) == 0;\r\n  const bool __acceptBounds = __even;\r\n\r\n  // Step 2: Determine the interval of valid decimal representations.\r\n  const uint64_t __mv = 4 * __m2;\r\n  // Implicit bool -> int conversion. True is 1, false is 0.\r\n  const uint32_t __mmShift = __ieeeMantissa != 0 || __ieeeExponent <= 1;\r\n  // We would compute __mp and __mm like this:\r\n  // uint64_t __mp = 4 * __m2 + 2;\r\n  // uint64_t __mm = __mv - 1 - __mmShift;\r\n\r\n  // Step 3: Convert to a decimal power base using 128-bit arithmetic.\r\n  uint64_t __vr, __vp, __vm;\r\n  int32_t __e10;\r\n  bool __vmIsTrailingZeros = false;\r\n  bool __vrIsTrailingZeros = false;\r\n  if (__e2 >= 0) {\r\n    // I tried special-casing __q == 0, but there was no effect on performance.\r\n    // This expression is slightly faster than max(0, __log10Pow2(__e2) - 1).\r\n    const uint32_t __q = __log10Pow2(__e2) - (__e2 > 3);\r\n    __e10 = static_cast<int32_t>(__q);\r\n    const int32_t __k = __DOUBLE_POW5_INV_BITCOUNT + __pow5bits(static_cast<int32_t>(__q)) - 1;\r\n    const int32_t __i = -__e2 + static_cast<int32_t>(__q) + __k;\r\n    __vr = __mulShiftAll(__m2, __DOUBLE_POW5_INV_SPLIT[__q], __i, &__vp, &__vm, __mmShift);\r\n    if (__q <= 21) {\r\n      // This should use __q <= 22, but I think 21 is also safe. Smaller values\r\n      // may still be safe, but it's more difficult to reason about them.\r\n      // Only one of __mp, __mv, and __mm can be a multiple of 5, if any.\r\n      const uint32_t __mvMod5 = static_cast<uint32_t>(__mv) - 5 * static_cast<uint32_t>(__div5(__mv));\r\n      if (__mvMod5 == 0) {\r\n        __vrIsTrailingZeros = __multipleOfPowerOf5(__mv, __q);\r\n      } else if (__acceptBounds) {\r\n        // Same as min(__e2 + (~__mm & 1), __pow5Factor(__mm)) >= __q\r\n        // <=> __e2 + (~__mm & 1) >= __q && __pow5Factor(__mm) >= __q\r\n        // <=> true && __pow5Factor(__mm) >= __q, since __e2 >= __q.\r\n        __vmIsTrailingZeros = __multipleOfPowerOf5(__mv - 1 - __mmShift, __q);\r\n      } else {\r\n        // Same as min(__e2 + 1, __pow5Factor(__mp)) >= __q.\r\n        __vp -= __multipleOfPowerOf5(__mv + 2, __q);\r\n      }\r\n    }\r\n  } else {\r\n    // This expression is slightly faster than max(0, __log10Pow5(-__e2) - 1).\r\n    const uint32_t __q = __log10Pow5(-__e2) - (-__e2 > 1);\r\n    __e10 = static_cast<int32_t>(__q) + __e2;\r\n    const int32_t __i = -__e2 - static_cast<int32_t>(__q);\r\n    const int32_t __k = __pow5bits(__i) - __DOUBLE_POW5_BITCOUNT;\r\n    const int32_t __j = static_cast<int32_t>(__q) - __k;\r\n    __vr = __mulShiftAll(__m2, __DOUBLE_POW5_SPLIT[__i], __j, &__vp, &__vm, __mmShift);\r\n    if (__q <= 1) {\r\n      // {__vr,__vp,__vm} is trailing zeros if {__mv,__mp,__mm} has at least __q trailing 0 bits.\r\n      // __mv = 4 * __m2, so it always has at least two trailing 0 bits.\r\n      __vrIsTrailingZeros = true;\r\n      if (__acceptBounds) {\r\n        // __mm = __mv - 1 - __mmShift, so it has 1 trailing 0 bit iff __mmShift == 1.\r\n        __vmIsTrailingZeros = __mmShift == 1;\r\n      } else {\r\n        // __mp = __mv + 2, so it always has at least one trailing 0 bit.\r\n        --__vp;\r\n      }\r\n    } else if (__q < 63) { // TRANSITION(ulfjack): Use a tighter bound here.\r\n      // We need to compute min(ntz(__mv), __pow5Factor(__mv) - __e2) >= __q - 1\r\n      // <=> ntz(__mv) >= __q - 1 && __pow5Factor(__mv) - __e2 >= __q - 1\r\n      // <=> ntz(__mv) >= __q - 1 (__e2 is negative and -__e2 >= __q)\r\n      // <=> (__mv & ((1 << (__q - 1)) - 1)) == 0\r\n      // We also need to make sure that the left shift does not overflow.\r\n      __vrIsTrailingZeros = __multipleOfPowerOf2(__mv, __q - 1);\r\n    }\r\n  }\r\n\r\n  // Step 4: Find the shortest decimal representation in the interval of valid representations.\r\n  int32_t __removed = 0;\r\n  uint8_t __lastRemovedDigit = 0;\r\n  uint64_t _Output;\r\n  // On average, we remove ~2 digits.\r\n  if (__vmIsTrailingZeros || __vrIsTrailingZeros) {\r\n    // General case, which happens rarely (~0.7%).\r\n    for (;;) {\r\n      const uint64_t __vpDiv10 = __div10(__vp);\r\n      const uint64_t __vmDiv10 = __div10(__vm);\r\n      if (__vpDiv10 <= __vmDiv10) {\r\n        break;\r\n      }\r\n      const uint32_t __vmMod10 = static_cast<uint32_t>(__vm) - 10 * static_cast<uint32_t>(__vmDiv10);\r\n      const uint64_t __vrDiv10 = __div10(__vr);\r\n      const uint32_t __vrMod10 = static_cast<uint32_t>(__vr) - 10 * static_cast<uint32_t>(__vrDiv10);\r\n      __vmIsTrailingZeros &= __vmMod10 == 0;\r\n      __vrIsTrailingZeros &= __lastRemovedDigit == 0;\r\n      __lastRemovedDigit = static_cast<uint8_t>(__vrMod10);\r\n      __vr = __vrDiv10;\r\n      __vp = __vpDiv10;\r\n      __vm = __vmDiv10;\r\n      ++__removed;\r\n    }\r\n    if (__vmIsTrailingZeros) {\r\n      for (;;) {\r\n        const uint64_t __vmDiv10 = __div10(__vm);\r\n        const uint32_t __vmMod10 = static_cast<uint32_t>(__vm) - 10 * static_cast<uint32_t>(__vmDiv10);\r\n        if (__vmMod10 != 0) {\r\n          break;\r\n        }\r\n        const uint64_t __vpDiv10 = __div10(__vp);\r\n        const uint64_t __vrDiv10 = __div10(__vr);\r\n        const uint32_t __vrMod10 = static_cast<uint32_t>(__vr) - 10 * static_cast<uint32_t>(__vrDiv10);\r\n        __vrIsTrailingZeros &= __lastRemovedDigit == 0;\r\n        __lastRemovedDigit = static_cast<uint8_t>(__vrMod10);\r\n        __vr = __vrDiv10;\r\n        __vp = __vpDiv10;\r\n        __vm = __vmDiv10;\r\n        ++__removed;\r\n      }\r\n    }\r\n    if (__vrIsTrailingZeros && __lastRemovedDigit == 5 && __vr % 2 == 0) {\r\n      // Round even if the exact number is .....50..0.\r\n      __lastRemovedDigit = 4;\r\n    }\r\n    // We need to take __vr + 1 if __vr is outside bounds or we need to round up.\r\n    _Output = __vr + ((__vr == __vm && (!__acceptBounds || !__vmIsTrailingZeros)) || __lastRemovedDigit >= 5);\r\n  } else {\r\n    // Specialized for the common case (~99.3%). Percentages below are relative to this.\r\n    bool __roundUp = false;\r\n    const uint64_t __vpDiv100 = __div100(__vp);\r\n    const uint64_t __vmDiv100 = __div100(__vm);\r\n    if (__vpDiv100 > __vmDiv100) { // Optimization: remove two digits at a time (~86.2%).\r\n      const uint64_t __vrDiv100 = __div100(__vr);\r\n      const uint32_t __vrMod100 = static_cast<uint32_t>(__vr) - 100 * static_cast<uint32_t>(__vrDiv100);\r\n      __roundUp = __vrMod100 >= 50;\r\n      __vr = __vrDiv100;\r\n      __vp = __vpDiv100;\r\n      __vm = __vmDiv100;\r\n      __removed += 2;\r\n    }\r\n    // Loop iterations below (approximately), without optimization above:\r\n    // 0: 0.03%, 1: 13.8%, 2: 70.6%, 3: 14.0%, 4: 1.40%, 5: 0.14%, 6+: 0.02%\r\n    // Loop iterations below (approximately), with optimization above:\r\n    // 0: 70.6%, 1: 27.8%, 2: 1.40%, 3: 0.14%, 4+: 0.02%\r\n    for (;;) {\r\n      const uint64_t __vpDiv10 = __div10(__vp);\r\n      const uint64_t __vmDiv10 = __div10(__vm);\r\n      if (__vpDiv10 <= __vmDiv10) {\r\n        break;\r\n      }\r\n      const uint64_t __vrDiv10 = __div10(__vr);\r\n      const uint32_t __vrMod10 = static_cast<uint32_t>(__vr) - 10 * static_cast<uint32_t>(__vrDiv10);\r\n      __roundUp = __vrMod10 >= 5;\r\n      __vr = __vrDiv10;\r\n      __vp = __vpDiv10;\r\n      __vm = __vmDiv10;\r\n      ++__removed;\r\n    }\r\n    // We need to take __vr + 1 if __vr is outside bounds or we need to round up.\r\n    _Output = __vr + (__vr == __vm || __roundUp);\r\n  }\r\n  const int32_t __exp = __e10 + __removed;\r\n\r\n  __floating_decimal_64 __fd;\r\n  __fd.__exponent = __exp;\r\n  __fd.__mantissa = _Output;\r\n  return __fd;\r\n}\r\n\r\ntemplate <class _CharT>\r\n_NODISCARD pair<_CharT*, errc> __to_chars(_CharT* const _First, _CharT* const _Last, const __floating_decimal_64 __v,\r\n  chars_format _Fmt, const double __f) {\r\n  // Step 5: Print the decimal representation.\r\n  uint64_t _Output = __v.__mantissa;\r\n  const int32_t _Ryu_exponent = __v.__exponent;\r\n  const uint32_t __olength = __decimalLength17(_Output);\r\n  int32_t _Scientific_exponent = _Ryu_exponent + static_cast<int32_t>(__olength) - 1;\r\n\r\n  if (_Fmt == chars_format{}) {\r\n    int32_t _Lower;\r\n    int32_t _Upper;\r\n\r\n    if (__olength == 1) {\r\n      // Value | Fixed   | Scientific\r\n      // 1e-3  | \"0.001\" | \"1e-03\"\r\n      // 1e4   | \"10000\" | \"1e+04\"\r\n      _Lower = -3;\r\n      _Upper = 4;\r\n    } else {\r\n      // Value   | Fixed       | Scientific\r\n      // 1234e-7 | \"0.0001234\" | \"1.234e-04\"\r\n      // 1234e5  | \"123400000\" | \"1.234e+08\"\r\n      _Lower = -static_cast<int32_t>(__olength + 3);\r\n      _Upper = 5;\r\n    }\r\n\r\n    if (_Lower <= _Ryu_exponent && _Ryu_exponent <= _Upper) {\r\n      _Fmt = chars_format::fixed;\r\n    } else {\r\n      _Fmt = chars_format::scientific;\r\n    }\r\n  } else if (_Fmt == chars_format::general) {\r\n    // C11 7.21.6.1 \"The fprintf function\"/8:\r\n    // \"Let P equal [...] 6 if the precision is omitted [...].\r\n    // Then, if a conversion with style E would have an exponent of X:\r\n    // - if P > X >= -4, the conversion is with style f [...].\r\n    // - otherwise, the conversion is with style e [...].\"\r\n    if (-4 <= _Scientific_exponent && _Scientific_exponent < 6) {\r\n      _Fmt = chars_format::fixed;\r\n    } else {\r\n      _Fmt = chars_format::scientific;\r\n    }\r\n  }\r\n\r\n  if (_Fmt == chars_format::fixed) {\r\n    // Example: _Output == 1729, __olength == 4\r\n\r\n    // _Ryu_exponent | Printed  | _Whole_digits | _Total_fixed_length  | Notes\r\n    // --------------|----------|---------------|----------------------|---------------------------------------\r\n    //             2 | 172900   |  6            | _Whole_digits        | Ryu can't be used for printing\r\n    //             1 | 17290    |  5            | (sometimes adjusted) | when the trimmed digits are nonzero.\r\n    // --------------|----------|---------------|----------------------|---------------------------------------\r\n    //             0 | 1729     |  4            | _Whole_digits        | Unified length cases.\r\n    // --------------|----------|---------------|----------------------|---------------------------------------\r\n    //            -1 | 172.9    |  3            | __olength + 1        | This case can't happen for\r\n    //            -2 | 17.29    |  2            |                      | __olength == 1, but no additional\r\n    //            -3 | 1.729    |  1            |                      | code is needed to avoid it.\r\n    // --------------|----------|---------------|----------------------|---------------------------------------\r\n    //            -4 | 0.1729   |  0            | 2 - _Ryu_exponent    | C11 7.21.6.1 \"The fprintf function\"/8:\r\n    //            -5 | 0.01729  | -1            |                      | \"If a decimal-point character appears,\r\n    //            -6 | 0.001729 | -2            |                      | at least one digit appears before it.\"\r\n\r\n    const int32_t _Whole_digits = static_cast<int32_t>(__olength) + _Ryu_exponent;\r\n\r\n    uint32_t _Total_fixed_length;\r\n    if (_Ryu_exponent >= 0) { // cases \"172900\" and \"1729\"\r\n      _Total_fixed_length = static_cast<uint32_t>(_Whole_digits);\r\n      if (_Output == 1) {\r\n        // Rounding can affect the number of digits.\r\n        // For example, 1e23 is exactly \"99999999999999991611392\" which is 23 digits instead of 24.\r\n        // We can use a lookup table to detect this and adjust the total length.\r\n        static constexpr uint8_t _Adjustment[309] = {\r\n          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,1,0,1,1,1,0,1,1,1,0,0,0,0,0,\r\n          1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,0,1,1,0,0,0,0,1,1,1,\r\n          1,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,0,1,0,1,1,0,1,\r\n          1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,1,0,0,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0,1,\r\n          0,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,0,0,0,1,\r\n          1,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,1,1,0,\r\n          0,1,0,1,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,1,1,0,1,0 };\r\n        _Total_fixed_length -= _Adjustment[_Ryu_exponent];\r\n        // _Whole_digits doesn't need to be adjusted because these cases won't refer to it later.\r\n      }\r\n    } else if (_Whole_digits > 0) { // case \"17.29\"\r\n      _Total_fixed_length = __olength + 1;\r\n    } else { // case \"0.001729\"\r\n      _Total_fixed_length = static_cast<uint32_t>(2 - _Ryu_exponent);\r\n    }\r\n\r\n    if (_Last - _First < static_cast<ptrdiff_t>(_Total_fixed_length)) {\r\n      return { _Last, errc::value_too_large };\r\n    }\r\n\r\n    _CharT* _Mid;\r\n    if (_Ryu_exponent > 0) { // case \"172900\"\r\n      bool _Can_use_ryu;\r\n\r\n      if (_Ryu_exponent > 22) { // 10^22 is the largest power of 10 that's exactly representable as a double.\r\n        _Can_use_ryu = false;\r\n      } else {\r\n        // Ryu generated X: __v.__mantissa * 10^_Ryu_exponent\r\n        // __v.__mantissa == 2^_Trailing_zero_bits * (__v.__mantissa >> _Trailing_zero_bits)\r\n        // 10^_Ryu_exponent == 2^_Ryu_exponent * 5^_Ryu_exponent\r\n\r\n        // _Trailing_zero_bits is [0, 56] (aside: because 2^56 is the largest power of 2\r\n        // with 17 decimal digits, which is double's round-trip limit.)\r\n        // _Ryu_exponent is [1, 22].\r\n        // Normalization adds [2, 52] (aside: at least 2 because the pre-normalized mantissa is at least 5).\r\n        // This adds up to [3, 130], which is well below double's maximum binary exponent 1023.\r\n\r\n        // Therefore, we just need to consider (__v.__mantissa >> _Trailing_zero_bits) * 5^_Ryu_exponent.\r\n\r\n        // If that product would exceed 53 bits, then X can't be exactly represented as a double.\r\n        // (That's not a problem for round-tripping, because X is close enough to the original double,\r\n        // but X isn't mathematically equal to the original double.) This requires a high-precision fallback.\r\n\r\n        // If the product is 53 bits or smaller, then X can be exactly represented as a double (and we don't\r\n        // need to re-synthesize it; the original double must have been X, because Ryu wouldn't produce the\r\n        // same output for two different doubles X and Y). This allows Ryu's output to be used (zero-filled).\r\n\r\n        // (2^53 - 1) / 5^0 (for indexing), (2^53 - 1) / 5^1, ..., (2^53 - 1) / 5^22\r\n        static constexpr uint64_t _Max_shifted_mantissa[23] = {\r\n          9007199254740991u, 1801439850948198u, 360287970189639u, 72057594037927u, 14411518807585u,\r\n          2882303761517u, 576460752303u, 115292150460u, 23058430092u, 4611686018u, 922337203u, 184467440u,\r\n          36893488u, 7378697u, 1475739u, 295147u, 59029u, 11805u, 2361u, 472u, 94u, 18u, 3u };\r\n\r\n        unsigned long _Trailing_zero_bits;\r\n#ifdef _WIN64\r\n        (void) _BitScanForward64(&_Trailing_zero_bits, __v.__mantissa); // __v.__mantissa is guaranteed nonzero\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n        const uint32_t _Low_mantissa = static_cast<uint32_t>(__v.__mantissa);\r\n        if (_Low_mantissa != 0) {\r\n          (void) _BitScanForward(&_Trailing_zero_bits, _Low_mantissa);\r\n        } else {\r\n          const uint32_t _High_mantissa = static_cast<uint32_t>(__v.__mantissa >> 32); // nonzero here\r\n          (void) _BitScanForward(&_Trailing_zero_bits, _High_mantissa);\r\n          _Trailing_zero_bits += 32;\r\n        }\r\n#endif // ^^^ 32-bit ^^^\r\n        const uint64_t _Shifted_mantissa = __v.__mantissa >> _Trailing_zero_bits;\r\n        _Can_use_ryu = _Shifted_mantissa <= _Max_shifted_mantissa[_Ryu_exponent];\r\n      }\r\n\r\n      if (!_Can_use_ryu) {\r\n        // Print the integer exactly.\r\n        // Performance note: This will redundantly perform bounds checking.\r\n        // Performance note: This will redundantly decompose the IEEE representation.\r\n        return __d2fixed_buffered_n(_First, _Last, __f, 0);\r\n      }\r\n\r\n      // _Can_use_ryu\r\n      // Print the decimal digits, left-aligned within [_First, _First + _Total_fixed_length).\r\n      _Mid = _First + __olength;\r\n    } else { // cases \"1729\", \"17.29\", and \"0.001729\"\r\n      // Print the decimal digits, right-aligned within [_First, _First + _Total_fixed_length).\r\n      _Mid = _First + _Total_fixed_length;\r\n    }\r\n\r\n    // We prefer 32-bit operations, even on 64-bit platforms.\r\n    // We have at most 17 digits, and uint32_t can store 9 digits.\r\n    // If _Output doesn't fit into uint32_t, we cut off 8 digits,\r\n    // so the rest will fit into uint32_t.\r\n    if ((_Output >> 32) != 0) {\r\n      // Expensive 64-bit division.\r\n      const uint64_t __q = __div1e8(_Output);\r\n      uint32_t __output2 = static_cast<uint32_t>(_Output - 100000000 * __q);\r\n      _Output = __q;\r\n\r\n      const uint32_t __c = __output2 % 10000;\r\n      __output2 /= 10000;\r\n      const uint32_t __d = __output2 % 10000;\r\n      const uint32_t __c0 = (__c % 100) << 1;\r\n      const uint32_t __c1 = (__c / 100) << 1;\r\n      const uint32_t __d0 = (__d % 100) << 1;\r\n      const uint32_t __d1 = (__d / 100) << 1;\r\n\r\n      _CSTD memcpy(_Mid -= 2, __DIGIT_TABLE<_CharT> + __c0, 2 * sizeof(_CharT));\r\n      _CSTD memcpy(_Mid -= 2, __DIGIT_TABLE<_CharT> + __c1, 2 * sizeof(_CharT));\r\n      _CSTD memcpy(_Mid -= 2, __DIGIT_TABLE<_CharT> + __d0, 2 * sizeof(_CharT));\r\n      _CSTD memcpy(_Mid -= 2, __DIGIT_TABLE<_CharT> + __d1, 2 * sizeof(_CharT));\r\n    }\r\n    uint32_t __output2 = static_cast<uint32_t>(_Output);\r\n    while (__output2 >= 10000) {\r\n#ifdef __clang__ // TRANSITION, LLVM-38217\r\n      const uint32_t __c = __output2 - 10000 * (__output2 / 10000);\r\n#else\r\n      const uint32_t __c = __output2 % 10000;\r\n#endif\r\n      __output2 /= 10000;\r\n      const uint32_t __c0 = (__c % 100) << 1;\r\n      const uint32_t __c1 = (__c / 100) << 1;\r\n      _CSTD memcpy(_Mid -= 2, __DIGIT_TABLE<_CharT> + __c0, 2 * sizeof(_CharT));\r\n      _CSTD memcpy(_Mid -= 2, __DIGIT_TABLE<_CharT> + __c1, 2 * sizeof(_CharT));\r\n    }\r\n    if (__output2 >= 100) {\r\n      const uint32_t __c = (__output2 % 100) << 1;\r\n      __output2 /= 100;\r\n      _CSTD memcpy(_Mid -= 2, __DIGIT_TABLE<_CharT> + __c, 2 * sizeof(_CharT));\r\n    }\r\n    if (__output2 >= 10) {\r\n      const uint32_t __c = __output2 << 1;\r\n      _CSTD memcpy(_Mid -= 2, __DIGIT_TABLE<_CharT> + __c, 2 * sizeof(_CharT));\r\n    } else {\r\n      *--_Mid = static_cast<_CharT>(_WIDEN(_CharT, '0') + __output2);\r\n    }\r\n\r\n    if (_Ryu_exponent > 0) { // case \"172900\" with _Can_use_ryu\r\n      // Performance note: it might be more efficient to do this immediately after setting _Mid.\r\n      _STD fill_n(_First + __olength, _Ryu_exponent, _WIDEN(_CharT, '0'));\r\n    } else if (_Ryu_exponent == 0) { // case \"1729\"\r\n      // Done!\r\n    } else if (_Whole_digits > 0) { // case \"17.29\"\r\n      // Performance note: moving digits might not be optimal.\r\n      _CSTD memmove(_First, _First + 1, static_cast<size_t>(_Whole_digits) * sizeof(_CharT));\r\n      _First[_Whole_digits] = _WIDEN(_CharT, '.');\r\n    } else { // case \"0.001729\"\r\n      // Performance note: a larger memset() followed by overwriting '.' might be more efficient.\r\n      _First[0] = _WIDEN(_CharT, '0');\r\n      _First[1] = _WIDEN(_CharT, '.');\r\n      _STD fill_n(_First + 2, -_Whole_digits, _WIDEN(_CharT, '0'));\r\n    }\r\n\r\n    return { _First + _Total_fixed_length, errc{} };\r\n  }\r\n\r\n  const uint32_t _Total_scientific_length = __olength + (__olength > 1) // digits + possible decimal point\r\n    + (-100 < _Scientific_exponent && _Scientific_exponent < 100 ? 4 : 5); // + scientific exponent\r\n  if (_Last - _First < static_cast<ptrdiff_t>(_Total_scientific_length)) {\r\n    return { _Last, errc::value_too_large };\r\n  }\r\n  _CharT* const __result = _First;\r\n\r\n  // Print the decimal digits.\r\n  uint32_t __i = 0;\r\n  // We prefer 32-bit operations, even on 64-bit platforms.\r\n  // We have at most 17 digits, and uint32_t can store 9 digits.\r\n  // If _Output doesn't fit into uint32_t, we cut off 8 digits,\r\n  // so the rest will fit into uint32_t.\r\n  if ((_Output >> 32) != 0) {\r\n    // Expensive 64-bit division.\r\n    const uint64_t __q = __div1e8(_Output);\r\n    uint32_t __output2 = static_cast<uint32_t>(_Output) - 100000000 * static_cast<uint32_t>(__q);\r\n    _Output = __q;\r\n\r\n    const uint32_t __c = __output2 % 10000;\r\n    __output2 /= 10000;\r\n    const uint32_t __d = __output2 % 10000;\r\n    const uint32_t __c0 = (__c % 100) << 1;\r\n    const uint32_t __c1 = (__c / 100) << 1;\r\n    const uint32_t __d0 = (__d % 100) << 1;\r\n    const uint32_t __d1 = (__d / 100) << 1;\r\n    _CSTD memcpy(__result + __olength - __i - 1, __DIGIT_TABLE<_CharT> + __c0, 2 * sizeof(_CharT));\r\n    _CSTD memcpy(__result + __olength - __i - 3, __DIGIT_TABLE<_CharT> + __c1, 2 * sizeof(_CharT));\r\n    _CSTD memcpy(__result + __olength - __i - 5, __DIGIT_TABLE<_CharT> + __d0, 2 * sizeof(_CharT));\r\n    _CSTD memcpy(__result + __olength - __i - 7, __DIGIT_TABLE<_CharT> + __d1, 2 * sizeof(_CharT));\r\n    __i += 8;\r\n  }\r\n  uint32_t __output2 = static_cast<uint32_t>(_Output);\r\n  while (__output2 >= 10000) {\r\n#ifdef __clang__ // TRANSITION, LLVM-38217\r\n    const uint32_t __c = __output2 - 10000 * (__output2 / 10000);\r\n#else\r\n    const uint32_t __c = __output2 % 10000;\r\n#endif\r\n    __output2 /= 10000;\r\n    const uint32_t __c0 = (__c % 100) << 1;\r\n    const uint32_t __c1 = (__c / 100) << 1;\r\n    _CSTD memcpy(__result + __olength - __i - 1, __DIGIT_TABLE<_CharT> + __c0, 2 * sizeof(_CharT));\r\n    _CSTD memcpy(__result + __olength - __i - 3, __DIGIT_TABLE<_CharT> + __c1, 2 * sizeof(_CharT));\r\n    __i += 4;\r\n  }\r\n  if (__output2 >= 100) {\r\n    const uint32_t __c = (__output2 % 100) << 1;\r\n    __output2 /= 100;\r\n    _CSTD memcpy(__result + __olength - __i - 1, __DIGIT_TABLE<_CharT> + __c, 2 * sizeof(_CharT));\r\n    __i += 2;\r\n  }\r\n  if (__output2 >= 10) {\r\n    const uint32_t __c = __output2 << 1;\r\n    // We can't use memcpy here: the decimal dot goes between these two digits.\r\n    __result[2] = __DIGIT_TABLE<_CharT>[__c + 1];\r\n    __result[0] = __DIGIT_TABLE<_CharT>[__c];\r\n  } else {\r\n    __result[0] = static_cast<_CharT>(_WIDEN(_CharT, '0') + __output2);\r\n  }\r\n\r\n  // Print decimal point if needed.\r\n  uint32_t __index;\r\n  if (__olength > 1) {\r\n    __result[1] = _WIDEN(_CharT, '.');\r\n    __index = __olength + 1;\r\n  } else {\r\n    __index = 1;\r\n  }\r\n\r\n  // Print the exponent.\r\n  __result[__index++] = _WIDEN(_CharT, 'e');\r\n  if (_Scientific_exponent < 0) {\r\n    __result[__index++] = _WIDEN(_CharT, '-');\r\n    _Scientific_exponent = -_Scientific_exponent;\r\n  } else {\r\n    __result[__index++] = _WIDEN(_CharT, '+');\r\n  }\r\n\r\n  if (_Scientific_exponent >= 100) {\r\n    const int32_t __c = _Scientific_exponent % 10;\r\n    _CSTD memcpy(__result + __index, __DIGIT_TABLE<_CharT> + 2 * (_Scientific_exponent / 10), 2 * sizeof(_CharT));\r\n    __result[__index + 2] = static_cast<_CharT>(_WIDEN(_CharT, '0') + __c);\r\n    __index += 3;\r\n  } else {\r\n    _CSTD memcpy(__result + __index, __DIGIT_TABLE<_CharT> + 2 * _Scientific_exponent, 2 * sizeof(_CharT));\r\n    __index += 2;\r\n  }\r\n\r\n  return { _First + _Total_scientific_length, errc{} };\r\n}\r\n\r\n_NODISCARD inline bool __d2d_small_int(const uint64_t __ieeeMantissa, const uint32_t __ieeeExponent,\r\n  __floating_decimal_64* const __v) {\r\n  const uint64_t __m2 = (1ull << __DOUBLE_MANTISSA_BITS) | __ieeeMantissa;\r\n  const int32_t __e2 = static_cast<int32_t>(__ieeeExponent) - __DOUBLE_BIAS - __DOUBLE_MANTISSA_BITS;\r\n\r\n  if (__e2 > 0) {\r\n    // f = __m2 * 2^__e2 >= 2^53 is an integer.\r\n    // Ignore this case for now.\r\n    return false;\r\n  }\r\n\r\n  if (__e2 < -52) {\r\n    // f < 1.\r\n    return false;\r\n  }\r\n\r\n  // Since 2^52 <= __m2 < 2^53 and 0 <= -__e2 <= 52: 1 <= f = __m2 / 2^-__e2 < 2^53.\r\n  // Test if the lower -__e2 bits of the significand are 0, i.e. whether the fraction is 0.\r\n  const uint64_t __mask = (1ull << -__e2) - 1;\r\n  const uint64_t __fraction = __m2 & __mask;\r\n  if (__fraction != 0) {\r\n    return false;\r\n  }\r\n\r\n  // f is an integer in the range [1, 2^53).\r\n  // Note: __mantissa might contain trailing (decimal) 0's.\r\n  // Note: since 2^53 < 10^16, there is no need to adjust __decimalLength17().\r\n  __v->__mantissa = __m2 >> -__e2;\r\n  __v->__exponent = 0;\r\n  return true;\r\n}\r\n\r\ntemplate <class _CharT>\r\n_NODISCARD pair<_CharT*, errc> __d2s_buffered_n(_CharT* const _First, _CharT* const _Last, const double __f,\r\n  const chars_format _Fmt) {\r\n\r\n  // Step 1: Decode the floating-point number, and unify normalized and subnormal cases.\r\n  const uint64_t __bits = __double_to_bits(__f);\r\n\r\n  // Case distinction; exit early for the easy cases.\r\n  if (__bits == 0) {\r\n    if (_Fmt == chars_format::scientific) {\r\n      if (_Last - _First < 5) {\r\n        return { _Last, errc::value_too_large };\r\n      }\r\n\r\n      if constexpr (is_same_v<_CharT, char>) {\r\n        _CSTD memcpy(_First, \"0e+00\", 5);\r\n      } else {\r\n        _CSTD memcpy(_First, L\"0e+00\", 5 * sizeof(wchar_t));\r\n      }\r\n\r\n      return { _First + 5, errc{} };\r\n    }\r\n\r\n    // Print \"0\" for chars_format::fixed, chars_format::general, and chars_format{}.\r\n    if (_First == _Last) {\r\n      return { _Last, errc::value_too_large };\r\n    }\r\n\r\n    *_First = _WIDEN(_CharT, '0');\r\n\r\n    return { _First + 1, errc{} };\r\n  }\r\n\r\n  // Decode __bits into mantissa and exponent.\r\n  const uint64_t __ieeeMantissa = __bits & ((1ull << __DOUBLE_MANTISSA_BITS) - 1);\r\n  const uint32_t __ieeeExponent = static_cast<uint32_t>(__bits >> __DOUBLE_MANTISSA_BITS);\r\n\r\n  if (_Fmt == chars_format::fixed) {\r\n    // const uint64_t _Mantissa2 = __ieeeMantissa | (1ull << __DOUBLE_MANTISSA_BITS); // restore implicit bit\r\n    const int32_t _Exponent2 = static_cast<int32_t>(__ieeeExponent)\r\n      - __DOUBLE_BIAS - __DOUBLE_MANTISSA_BITS; // bias and normalization\r\n\r\n    // Normal values are equal to _Mantissa2 * 2^_Exponent2.\r\n    // (Subnormals are different, but they'll be rejected by the _Exponent2 test here, so they can be ignored.)\r\n\r\n    // For nonzero integers, _Exponent2 >= -52. (The minimum value occurs when _Mantissa2 * 2^_Exponent2 is 1.\r\n    // In that case, _Mantissa2 is the implicit 1 bit followed by 52 zeros, so _Exponent2 is -52 to shift away\r\n    // the zeros.) The dense range of exactly representable integers has negative or zero exponents\r\n    // (as positive exponents make the range non-dense). For that dense range, Ryu will always be used:\r\n    // every digit is necessary to uniquely identify the value, so Ryu must print them all.\r\n\r\n    // Positive exponents are the non-dense range of exactly representable integers. This contains all of the values\r\n    // for which Ryu can't be used (and a few Ryu-friendly values). We can save time by detecting positive\r\n    // exponents here and skipping Ryu. Calling __d2fixed_buffered_n() with precision 0 is valid for all integers\r\n    // (so it's okay if we call it with a Ryu-friendly value).\r\n    if (_Exponent2 > 0) {\r\n      return __d2fixed_buffered_n(_First, _Last, __f, 0);\r\n    }\r\n  }\r\n\r\n  __floating_decimal_64 __v;\r\n  const bool __isSmallInt = __d2d_small_int(__ieeeMantissa, __ieeeExponent, &__v);\r\n  if (__isSmallInt) {\r\n    // For small integers in the range [1, 2^53), __v.__mantissa might contain trailing (decimal) zeros.\r\n    // For scientific notation we need to move these zeros into the exponent.\r\n    // (This is not needed for fixed-point notation, so it might be beneficial to trim\r\n    // trailing zeros in __to_chars only if needed - once fixed-point notation output is implemented.)\r\n    for (;;) {\r\n      const uint64_t __q = __div10(__v.__mantissa);\r\n      const uint32_t __r = static_cast<uint32_t>(__v.__mantissa) - 10 * static_cast<uint32_t>(__q);\r\n      if (__r != 0) {\r\n        break;\r\n      }\r\n      __v.__mantissa = __q;\r\n      ++__v.__exponent;\r\n    }\r\n  } else {\r\n    __v = __d2d(__ieeeMantissa, __ieeeExponent);\r\n  }\r\n\r\n  return __to_chars(_First, _Last, __v, _Fmt, __f);\r\n}\r\n\r\n// ^^^^^^^^^^ DERIVED FROM d2s.c ^^^^^^^^^^\r\n\r\n// clang-format on\r\n\r\ntemplate <class _Floating>\r\n_NODISCARD to_chars_result _Floating_to_chars_ryu(\r\n    char* const _First, char* const _Last, const _Floating _Value, const chars_format _Fmt) noexcept {\r\n    if constexpr (is_same_v<_Floating, float>) {\r\n        return _Convert_to_chars_result(__f2s_buffered_n(_First, _Last, _Value, _Fmt));\r\n    } else {\r\n        return _Convert_to_chars_result(__d2s_buffered_n(_First, _Last, _Value, _Fmt));\r\n    }\r\n}\r\n\r\ntemplate <class _Floating>\r\n_NODISCARD to_chars_result _Floating_to_chars_scientific_precision(\r\n    char* const _First, char* const _Last, const _Floating _Value, int _Precision) noexcept {\r\n\r\n    // C11 7.21.6.1 \"The fprintf function\"/5:\r\n    // \"A negative precision argument is taken as if the precision were omitted.\"\r\n    // /8: \"e,E [...] if the precision is missing, it is taken as 6\"\r\n\r\n    if (_Precision < 0) {\r\n        _Precision = 6;\r\n    } else if (_Precision < 1'000'000'000) {\r\n        // _Precision is ok.\r\n    } else {\r\n        // Avoid integer overflow.\r\n        // (This defensive check is slightly nonconformant; it can be carefully improved in the future.)\r\n        return {_Last, errc::value_too_large};\r\n    }\r\n\r\n    return __d2exp_buffered_n(_First, _Last, _Value, static_cast<uint32_t>(_Precision));\r\n}\r\n\r\ntemplate <class _Floating>\r\n_NODISCARD to_chars_result _Floating_to_chars_fixed_precision(\r\n    char* const _First, char* const _Last, const _Floating _Value, int _Precision) noexcept {\r\n\r\n    // C11 7.21.6.1 \"The fprintf function\"/5:\r\n    // \"A negative precision argument is taken as if the precision were omitted.\"\r\n    // /8: \"f,F [...] If the precision is missing, it is taken as 6\"\r\n\r\n    if (_Precision < 0) {\r\n        _Precision = 6;\r\n    } else if (_Precision < 1'000'000'000) {\r\n        // _Precision is ok.\r\n    } else {\r\n        // Avoid integer overflow.\r\n        // (This defensive check is slightly nonconformant; it can be carefully improved in the future.)\r\n        return {_Last, errc::value_too_large};\r\n    }\r\n\r\n    return _Convert_to_chars_result(__d2fixed_buffered_n(_First, _Last, _Value, static_cast<uint32_t>(_Precision)));\r\n}\r\n\r\n_STD_END\r\n\r\n#undef _HAS_CHARCONV_INTRINSICS\r\n#undef _WIDEN\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XCHARCONV_RYU_H\r\n"
  },
  {
    "path": "stl/inc/xcharconv_ryu_tables.h",
    "content": "// xcharconv_ryu_tables.h internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception AND BSL-1.0\r\n\r\n\r\n// Copyright 2018 Ulf Adams\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n// Boost Software License - Version 1.0 - August 17th, 2003\r\n\r\n// Permission is hereby granted, free of charge, to any person or organization\r\n// obtaining a copy of the software and accompanying documentation covered by\r\n// this license (the \"Software\") to use, reproduce, display, distribute,\r\n// execute, and transmit the Software, and to prepare derivative works of the\r\n// Software, and to permit third-parties to whom the Software is furnished to\r\n// do so, all subject to the following:\r\n\r\n// The copyright notices in the Software and this entire statement, including\r\n// the above license grant, this restriction and the following disclaimer,\r\n// must be included in all copies of the Software, in whole or in part, and\r\n// all derivative works of the Software, unless such copies or derivative\r\n// works are solely in the form of machine-executable object code generated by\r\n// a source language processor.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r\n// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r\n// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r\n// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\n// DEALINGS IN THE SOFTWARE.\r\n\r\n\r\n#ifndef _XCHARCONV_RYU_TABLES_H\r\n#define _XCHARCONV_RYU_TABLES_H\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX17\r\n#error The contents of <charconv> are only available with C++17. (Also, you should not include this internal header.)\r\n#endif // !_HAS_CXX17\r\n\r\n#include <cstdint>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\n// https://github.com/ulfjack/ryu\r\n// See xcharconv_ryu.h for the exact commit.\r\n// (Keep the cgmanifest.json commitHash in sync.)\r\n\r\n// clang-format off: avoid diverging from external code\r\n\r\n// vvvvvvvvvv DERIVED FROM digit_table.h vvvvvvvvvv\r\n\r\n// A table of all two-digit numbers. This is used to speed up decimal digit\r\n// generation by copying pairs of digits into the final output.\r\ntemplate <class _CharT> constexpr _CharT __DIGIT_TABLE[] = {_CharT{}};\r\n\r\ntemplate <> inline constexpr char __DIGIT_TABLE<char>[200] = {\r\n  '0','0','0','1','0','2','0','3','0','4','0','5','0','6','0','7','0','8','0','9',\r\n  '1','0','1','1','1','2','1','3','1','4','1','5','1','6','1','7','1','8','1','9',\r\n  '2','0','2','1','2','2','2','3','2','4','2','5','2','6','2','7','2','8','2','9',\r\n  '3','0','3','1','3','2','3','3','3','4','3','5','3','6','3','7','3','8','3','9',\r\n  '4','0','4','1','4','2','4','3','4','4','4','5','4','6','4','7','4','8','4','9',\r\n  '5','0','5','1','5','2','5','3','5','4','5','5','5','6','5','7','5','8','5','9',\r\n  '6','0','6','1','6','2','6','3','6','4','6','5','6','6','6','7','6','8','6','9',\r\n  '7','0','7','1','7','2','7','3','7','4','7','5','7','6','7','7','7','8','7','9',\r\n  '8','0','8','1','8','2','8','3','8','4','8','5','8','6','8','7','8','8','8','9',\r\n  '9','0','9','1','9','2','9','3','9','4','9','5','9','6','9','7','9','8','9','9'\r\n};\r\n\r\ntemplate <> inline constexpr wchar_t __DIGIT_TABLE<wchar_t>[200] = {\r\n  L'0',L'0',L'0',L'1',L'0',L'2',L'0',L'3',L'0',L'4',L'0',L'5',L'0',L'6',L'0',L'7',L'0',L'8',L'0',L'9',\r\n  L'1',L'0',L'1',L'1',L'1',L'2',L'1',L'3',L'1',L'4',L'1',L'5',L'1',L'6',L'1',L'7',L'1',L'8',L'1',L'9',\r\n  L'2',L'0',L'2',L'1',L'2',L'2',L'2',L'3',L'2',L'4',L'2',L'5',L'2',L'6',L'2',L'7',L'2',L'8',L'2',L'9',\r\n  L'3',L'0',L'3',L'1',L'3',L'2',L'3',L'3',L'3',L'4',L'3',L'5',L'3',L'6',L'3',L'7',L'3',L'8',L'3',L'9',\r\n  L'4',L'0',L'4',L'1',L'4',L'2',L'4',L'3',L'4',L'4',L'4',L'5',L'4',L'6',L'4',L'7',L'4',L'8',L'4',L'9',\r\n  L'5',L'0',L'5',L'1',L'5',L'2',L'5',L'3',L'5',L'4',L'5',L'5',L'5',L'6',L'5',L'7',L'5',L'8',L'5',L'9',\r\n  L'6',L'0',L'6',L'1',L'6',L'2',L'6',L'3',L'6',L'4',L'6',L'5',L'6',L'6',L'6',L'7',L'6',L'8',L'6',L'9',\r\n  L'7',L'0',L'7',L'1',L'7',L'2',L'7',L'3',L'7',L'4',L'7',L'5',L'7',L'6',L'7',L'7',L'7',L'8',L'7',L'9',\r\n  L'8',L'0',L'8',L'1',L'8',L'2',L'8',L'3',L'8',L'4',L'8',L'5',L'8',L'6',L'8',L'7',L'8',L'8',L'8',L'9',\r\n  L'9',L'0',L'9',L'1',L'9',L'2',L'9',L'3',L'9',L'4',L'9',L'5',L'9',L'6',L'9',L'7',L'9',L'8',L'9',L'9'\r\n};\r\n\r\n// ^^^^^^^^^^ DERIVED FROM digit_table.h ^^^^^^^^^^\r\n\r\n// vvvvvvvvvv DERIVED FROM d2s_full_table.h vvvvvvvvvv\r\n\r\n// These tables are generated by PrintDoubleLookupTable.\r\nextern const uint64_t __DOUBLE_POW5_INV_SPLIT[292][2];\r\n\r\nextern const uint64_t __DOUBLE_POW5_SPLIT[326][2];\r\n\r\n// ^^^^^^^^^^ DERIVED FROM d2s_full_table.h ^^^^^^^^^^\r\n\r\n// vvvvvvvvvv DERIVED FROM d2fixed_full_table.h vvvvvvvvvv\r\n\r\ninline constexpr int __TABLE_SIZE = 64;\r\n\r\ninline constexpr uint16_t __POW10_OFFSET[__TABLE_SIZE] = {\r\n  0, 2, 5, 8, 12, 16, 21, 26, 32, 39,\r\n  46, 54, 62, 71, 80, 90, 100, 111, 122, 134,\r\n  146, 159, 173, 187, 202, 217, 233, 249, 266, 283,\r\n  301, 319, 338, 357, 377, 397, 418, 440, 462, 485,\r\n  508, 532, 556, 581, 606, 632, 658, 685, 712, 740,\r\n  769, 798, 828, 858, 889, 920, 952, 984, 1017, 1050,\r\n  1084, 1118, 1153, 1188\r\n};\r\n\r\nextern const uint64_t __POW10_SPLIT[1224][3];\r\n\r\ninline constexpr int __TABLE_SIZE_2 = 69;\r\ninline constexpr int __ADDITIONAL_BITS_2 = 120;\r\n\r\ninline constexpr uint16_t __POW10_OFFSET_2[__TABLE_SIZE_2] = {\r\n     0,    2,    6,   12,   20,   29,   40,   52,   66,   80,\r\n    95,  112,  130,  150,  170,  192,  215,  240,  265,  292,\r\n   320,  350,  381,  413,  446,  480,  516,  552,  590,  629,\r\n   670,  712,  755,  799,  845,  892,  940,  989, 1040, 1092,\r\n  1145, 1199, 1254, 1311, 1369, 1428, 1488, 1550, 1613, 1678,\r\n  1743, 1810, 1878, 1947, 2017, 2088, 2161, 2235, 2311, 2387,\r\n  2465, 2544, 2625, 2706, 2789, 2873, 2959, 3046, 3133\r\n};\r\n\r\ninline constexpr uint8_t __MIN_BLOCK_2[__TABLE_SIZE_2] = {\r\n     0,    0,    0,    0,    0,    0,    1,    1,    2,    3,\r\n     3,    4,    4,    5,    5,    6,    6,    7,    7,    8,\r\n     8,    9,    9,   10,   11,   11,   12,   12,   13,   13,\r\n    14,   14,   15,   15,   16,   16,   17,   17,   18,   19,\r\n    19,   20,   20,   21,   21,   22,   22,   23,   23,   24,\r\n    24,   25,   26,   26,   27,   27,   28,   28,   29,   29,\r\n    30,   30,   31,   31,   32,   32,   33,   34,    0\r\n};\r\n\r\nextern const uint64_t __POW10_SPLIT_2[3133][3];\r\n\r\n// ^^^^^^^^^^ DERIVED FROM d2fixed_full_table.h ^^^^^^^^^^\r\n\r\n// clang-format on\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XCHARCONV_RYU_TABLES_H\r\n"
  },
  {
    "path": "stl/inc/xcharconv_tables.h",
    "content": "// xcharconv_tables.h internal header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XCHARCONV_TABLES_H\r\n#define _XCHARCONV_TABLES_H\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX17\r\n#error The contents of <charconv> are only available with C++17. (Also, you should not include this internal header.)\r\n#endif // !_HAS_CXX17\r\n\r\n#include <cstdint>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// For general precision, we can use lookup tables to avoid performing trial formatting.\r\n\r\n// For a simple example, imagine counting the number of digits D in an integer, and needing to know\r\n// whether D is less than 3, equal to 3/4/5/6, or greater than 6. We could use a lookup table:\r\n// D | Largest integer with D digits\r\n// 2 |      99\r\n// 3 |     999\r\n// 4 |   9'999\r\n// 5 |  99'999\r\n// 6 | 999'999\r\n// 7 | table end\r\n// Looking up an integer in this table with lower_bound() will work:\r\n// * Too-small integers, like 7, 70, and 99, will cause lower_bound() to return the D == 2 row. (If all we care\r\n//   about is whether D is less than 3, then it's okay to smash the D == 1 and D == 2 cases together.)\r\n// * Integers in [100, 999] will cause lower_bound() to return the D == 3 row, and so forth.\r\n// * Too-large integers, like 1'000'000 and above, will cause lower_bound() to return the end of the table. If we\r\n//   compute D from that index, this will be considered D == 7, which will activate any \"greater than 6\" logic.\r\n\r\n// Floating-point is slightly more complicated.\r\n\r\n// The ordinary lookup tables are for X within [-5, 38] for float, and [-5, 308] for double.\r\n// (-5 absorbs too-negative exponents, outside the P > X >= -4 criterion. 38 and 308 are the maximum exponents.)\r\n// Due to the P > X condition, we can use a subset of the table for X within [-5, P - 1], suitably clamped.\r\n\r\n// When P is small, rounding can affect X. For example:\r\n// For P == 1, the largest double with X == 0 is: 9.4999999999999982236431605997495353221893310546875\r\n// For P == 2, the largest double with X == 0 is: 9.949999999999999289457264239899814128875732421875\r\n// For P == 3, the largest double with X == 0 is: 9.9949999999999992184029906638897955417633056640625\r\n\r\n// Exponent adjustment is a concern for P within [1, 7] for float, and [1, 15] for double (determined via\r\n// brute force). While larger values of P still perform rounding, they can't trigger exponent adjustment.\r\n// This is because only values with repeated '9' digits can undergo exponent adjustment during rounding,\r\n// and floating-point granularity limits the number of consecutive '9' digits that can appear.\r\n\r\n// So, we need special lookup tables for small values of P.\r\n// These tables have varying lengths due to the P > X >= -4 criterion. For example:\r\n// For P == 1, need table entries for X: -5, -4, -3, -2, -1, 0\r\n// For P == 2, need table entries for X: -5, -4, -3, -2, -1, 0, 1\r\n// For P == 3, need table entries for X: -5, -4, -3, -2, -1, 0, 1, 2\r\n// For P == 4, need table entries for X: -5, -4, -3, -2, -1, 0, 1, 2, 3\r\n\r\n// We can concatenate these tables for compact storage, using triangular numbers to access them.\r\n// The table for P begins at index (P - 1) * (P + 10) / 2 with length P + 5.\r\n\r\n// For both the ordinary and special lookup tables, after an index I is returned by lower_bound(), X is I - 5.\r\n\r\n// We need to special-case the floating-point value 0.0, which is considered to have X == 0.\r\n// Otherwise, the lookup tables would consider it to have a highly negative X.\r\n\r\n// Finally, because we're working with positive floating-point values,\r\n// representation comparisons behave identically to floating-point comparisons.\r\n\r\n// The generator is in /tools/scripts/charconv_tables_generate.cpp\r\n\r\n_STD_BEGIN\r\n\r\ntemplate <class _Floating>\r\nstruct _General_precision_tables_2;\r\n\r\ntemplate <>\r\nstruct _General_precision_tables_2<float> {\r\n    static constexpr int _Max_special_P = 7;\r\n\r\n    static const uint32_t _Special_X_table[63];\r\n\r\n    static constexpr int _Max_P = 39;\r\n\r\n    static const uint32_t _Ordinary_X_table[44];\r\n};\r\n\r\ntemplate <>\r\nstruct _General_precision_tables_2<double> {\r\n    static constexpr int _Max_special_P = 15;\r\n\r\n    static const uint64_t _Special_X_table[195];\r\n\r\n    static constexpr int _Max_P = 309;\r\n\r\n    static const uint64_t _Ordinary_X_table[314];\r\n};\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XCHARCONV_TABLES_H\r\n"
  },
  {
    "path": "stl/inc/xerrc.h",
    "content": "// xerrc.h internal header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XERRC_H\r\n#define _XERRC_H\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD enum class errc { // names for generic error codes\r\n    address_family_not_supported                       = 102, // EAFNOSUPPORT\r\n    address_in_use                                     = 100, // EADDRINUSE\r\n    address_not_available                              = 101, // EADDRNOTAVAIL\r\n    already_connected                                  = 113, // EISCONN\r\n    argument_list_too_long                             = 7, // E2BIG\r\n    argument_out_of_domain                             = 33, // EDOM\r\n    bad_address                                        = 14, // EFAULT\r\n    bad_file_descriptor                                = 9, // EBADF\r\n    bad_message                                        = 104, // EBADMSG\r\n    broken_pipe                                        = 32, // EPIPE\r\n    connection_aborted                                 = 106, // ECONNABORTED\r\n    connection_already_in_progress                     = 103, // EALREADY\r\n    connection_refused                                 = 107, // ECONNREFUSED\r\n    connection_reset                                   = 108, // ECONNRESET\r\n    cross_device_link                                  = 18, // EXDEV\r\n    destination_address_required                       = 109, // EDESTADDRREQ\r\n    device_or_resource_busy                            = 16, // EBUSY\r\n    directory_not_empty                                = 41, // ENOTEMPTY\r\n    executable_format_error                            = 8, // ENOEXEC\r\n    file_exists                                        = 17, // EEXIST\r\n    file_too_large                                     = 27, // EFBIG\r\n    filename_too_long                                  = 38, // ENAMETOOLONG\r\n    function_not_supported                             = 40, // ENOSYS\r\n    host_unreachable                                   = 110, // EHOSTUNREACH\r\n    identifier_removed                                 = 111, // EIDRM\r\n    illegal_byte_sequence                              = 42, // EILSEQ\r\n    inappropriate_io_control_operation                 = 25, // ENOTTY\r\n    interrupted                                        = 4, // EINTR\r\n    invalid_argument                                   = 22, // EINVAL\r\n    invalid_seek                                       = 29, // ESPIPE\r\n    io_error                                           = 5, // EIO\r\n    is_a_directory                                     = 21, // EISDIR\r\n    message_size                                       = 115, // EMSGSIZE\r\n    network_down                                       = 116, // ENETDOWN\r\n    network_reset                                      = 117, // ENETRESET\r\n    network_unreachable                                = 118, // ENETUNREACH\r\n    no_buffer_space                                    = 119, // ENOBUFS\r\n    no_child_process                                   = 10, // ECHILD\r\n    no_link                                            = 121, // ENOLINK\r\n    no_lock_available                                  = 39, // ENOLCK\r\n    no_message_available _CXX23_DEPRECATE_UNIX_STREAMS = 120, // ENODATA\r\n    no_message                                         = 122, // ENOMSG\r\n    no_protocol_option                                 = 123, // ENOPROTOOPT\r\n    no_space_on_device                                 = 28, // ENOSPC\r\n    no_stream_resources _CXX23_DEPRECATE_UNIX_STREAMS  = 124, // ENOSR\r\n    no_such_device_or_address                          = 6, // ENXIO\r\n    no_such_device                                     = 19, // ENODEV\r\n    no_such_file_or_directory                          = 2, // ENOENT\r\n    no_such_process                                    = 3, // ESRCH\r\n    not_a_directory                                    = 20, // ENOTDIR\r\n    not_a_socket                                       = 128, // ENOTSOCK\r\n    not_a_stream _CXX23_DEPRECATE_UNIX_STREAMS         = 125, // ENOSTR\r\n    not_connected                                      = 126, // ENOTCONN\r\n    not_enough_memory                                  = 12, // ENOMEM\r\n    not_supported                                      = 129, // ENOTSUP\r\n    operation_canceled                                 = 105, // ECANCELED\r\n    operation_in_progress                              = 112, // EINPROGRESS\r\n    operation_not_permitted                            = 1, // EPERM\r\n    operation_not_supported                            = 130, // EOPNOTSUPP\r\n    operation_would_block                              = 140, // EWOULDBLOCK\r\n    owner_dead                                         = 133, // EOWNERDEAD\r\n    permission_denied                                  = 13, // EACCES\r\n    protocol_error                                     = 134, // EPROTO\r\n    protocol_not_supported                             = 135, // EPROTONOSUPPORT\r\n    read_only_file_system                              = 30, // EROFS\r\n    resource_deadlock_would_occur                      = 36, // EDEADLK\r\n    resource_unavailable_try_again                     = 11, // EAGAIN\r\n    result_out_of_range                                = 34, // ERANGE\r\n    state_not_recoverable                              = 127, // ENOTRECOVERABLE\r\n    stream_timeout _CXX23_DEPRECATE_UNIX_STREAMS       = 137, // ETIME\r\n    text_file_busy                                     = 139, // ETXTBSY\r\n    timed_out                                          = 138, // ETIMEDOUT\r\n    too_many_files_open_in_system                      = 23, // ENFILE\r\n    too_many_files_open                                = 24, // EMFILE\r\n    too_many_links                                     = 31, // EMLINK\r\n    too_many_symbolic_link_levels                      = 114, // ELOOP\r\n    value_too_large                                    = 132, // EOVERFLOW\r\n    wrong_protocol_type                                = 136 // EPROTOTYPE\r\n};\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XERRC_H\r\n"
  },
  {
    "path": "stl/inc/xfacet",
    "content": "// xfacet internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// This header is used to compile the import library (via locale0_implib.cpp => locale0.cpp => xfacet).\r\n// MAJOR LIMITATIONS apply to what can be included here!\r\n// Before editing this file, read: /docs/import_library.md\r\n\r\n#ifndef _XFACET_\r\n#define _XFACET_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\nextern \"C++\" class _CRTIMP2_PURE_IMPORT _Facet_base { // code for reference counting a facet\r\npublic:\r\n    virtual __CLR_OR_THIS_CALL ~_Facet_base() noexcept {} // ensure that derived classes can be destroyed properly\r\n\r\n    // increment use count\r\n    virtual void __CLR_OR_THIS_CALL _Incref() noexcept = 0;\r\n\r\n    // decrement use count\r\n    virtual _Facet_base* __CLR_OR_THIS_CALL _Decref() noexcept = 0;\r\n};\r\n\r\n#if defined(_M_CEE)\r\nvoid __CLRCALL_OR_CDECL _Facet_Register_m(_Facet_base*);\r\n#else // ^^^ defined(_M_CEE) / !defined(_M_CEE) vvv\r\nextern \"C++\" void __CLRCALL_OR_CDECL _Facet_Register(_Facet_base*);\r\n#endif // ^^^ !defined(_M_CEE) ^^^\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XFACET_\r\n"
  },
  {
    "path": "stl/inc/xfilesystem_abi.h",
    "content": "// xfilesystem_abi.h internal header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XFILESYSTEM_ABI_H\r\n#define _XFILESYSTEM_ABI_H\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <cstdint>\r\n#include <type_traits>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\nextern \"C\" {\r\ninline constexpr size_t __std_fs_max_path      = 260; // #define MAX_PATH          260\r\ninline constexpr size_t __std_fs_temp_path_max = __std_fs_max_path + 1;\r\n\r\nenum class __std_win_error : unsigned long {\r\n    _Success                   = 0, // #define ERROR_SUCCESS                    0L\r\n    _Invalid_function          = 1, // #define ERROR_INVALID_FUNCTION           1L\r\n    _File_not_found            = 2, // #define ERROR_FILE_NOT_FOUND             2L\r\n    _Path_not_found            = 3, // #define ERROR_PATH_NOT_FOUND             3L\r\n    _Access_denied             = 5, // #define ERROR_ACCESS_DENIED              5L\r\n    _Not_enough_memory         = 8, // #define ERROR_NOT_ENOUGH_MEMORY          8L\r\n    _No_more_files             = 18, // #define ERROR_NO_MORE_FILES              18L\r\n    _Sharing_violation         = 32, // #define ERROR_SHARING_VIOLATION          32L\r\n    _Not_supported             = 50, // #define ERROR_NOT_SUPPORTED              50L\r\n    _Error_bad_netpath         = 53, // #define ERROR_BAD_NETPATH                53L\r\n    _Error_netname_deleted     = 64, // #define ERROR_NETNAME_DELETED            64L\r\n    _File_exists               = 80, // #define ERROR_FILE_EXISTS                80L\r\n    _Invalid_parameter         = 87, // #define ERROR_INVALID_PARAMETER          87L\r\n    _Insufficient_buffer       = 122, // #define ERROR_INSUFFICIENT_BUFFER        122L\r\n    _Invalid_name              = 123, // #define ERROR_INVALID_NAME               123L\r\n    _Directory_not_empty       = 145, // #define ERROR_DIR_NOT_EMPTY              145L\r\n    _Bad_pathname              = 161, // #define ERROR_BAD_PATHNAME               161L\r\n    _Already_exists            = 183, // #define ERROR_ALREADY_EXISTS             183L\r\n    _Filename_exceeds_range    = 206, // #define ERROR_FILENAME_EXCED_RANGE       206L\r\n    _Directory_name_is_invalid = 267, // #define ERROR_DIRECTORY                  267L\r\n    _Reparse_tag_invalid       = 4393L, // #define ERROR_REPARSE_TAG_INVALID        4393L\r\n    _Max                       = ~0UL // sentinel not used by Win32\r\n};\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4061) // enumerator not explicitly handled by switch label\r\n_NODISCARD inline bool __std_is_file_not_found(const __std_win_error _Error) noexcept {\r\n    switch (_Error) {\r\n    case __std_win_error::_File_not_found:\r\n    case __std_win_error::_Path_not_found:\r\n    case __std_win_error::_Error_bad_netpath:\r\n    case __std_win_error::_Invalid_name:\r\n    case __std_win_error::_Bad_pathname:\r\n    case __std_win_error::_Directory_name_is_invalid: // Windows 11 24H2\r\n    case __std_win_error::_Error_netname_deleted: // Windows 11 24H2\r\n        return true;\r\n    default:\r\n        return false;\r\n    }\r\n}\r\n#pragma warning(pop)\r\n\r\nenum class __std_fs_dir_handle : intptr_t { _Invalid = -1 };\r\n\r\nenum class __std_fs_file_attr : unsigned long {\r\n    _Readonly      = 0x00000001, // #define FILE_ATTRIBUTE_READONLY             0x00000001\r\n    _Hidden        = 0x00000002, // #define FILE_ATTRIBUTE_HIDDEN               0x00000002\r\n    _System        = 0x00000004, // #define FILE_ATTRIBUTE_SYSTEM               0x00000004\r\n    _Directory     = 0x00000010, // #define FILE_ATTRIBUTE_DIRECTORY            0x00000010\r\n    _Archive       = 0x00000020, // #define FILE_ATTRIBUTE_ARCHIVE              0x00000020\r\n    _Device        = 0x00000040, // #define FILE_ATTRIBUTE_DEVICE               0x00000040\r\n    _Normal        = 0x00000080, // #define FILE_ATTRIBUTE_NORMAL               0x00000080\r\n    _Temporary     = 0x00000100, // #define FILE_ATTRIBUTE_TEMPORARY            0x00000100\r\n    _Sparse_file   = 0x00000200, // #define FILE_ATTRIBUTE_SPARSE_FILE          0x00000200\r\n    _Reparse_point = 0x00000400, // #define FILE_ATTRIBUTE_REPARSE_POINT        0x00000400\r\n\r\n    _Invalid = 0xFFFFFFFF, // #define INVALID_FILE_ATTRIBUTES ((DWORD)-1)\r\n};\r\n} // extern \"C\"\r\n\r\n_EXTERN_CXX_WORKAROUND\r\n_BITMASK_OPS(_EMPTY_ARGUMENT, __std_fs_file_attr)\r\n_END_EXTERN_CXX_WORKAROUND\r\n\r\nextern \"C\" {\r\nenum class __std_fs_reparse_tag : unsigned long {\r\n    _None        = 0,\r\n    _Mount_point = (0xA0000003L), // #define IO_REPARSE_TAG_MOUNT_POINT              (0xA0000003L)\r\n    _Symlink     = (0xA000000CL), // #define IO_REPARSE_TAG_SYMLINK                  (0xA000000CL)\r\n};\r\n\r\nstruct __std_fs_filetime { // typedef struct _FILETIME {\r\n    unsigned long _Low; //     DWORD dwLowDateTime;\r\n    unsigned long _High; //     DWORD dwHighDateTime;\r\n}; // } FILETIME, *PFILETIME, *LPFILETIME;\r\n\r\nstruct __std_fs_find_data { // typedef struct _WIN32_FIND_DATAW {\r\n    __std_fs_file_attr _Attributes; //     DWORD dwFileAttributes;\r\n    __std_fs_filetime _Creation_time; //     FILETIME ftCreationTime;\r\n    __std_fs_filetime _Last_access_time; //     FILETIME ftLastAccessTime;\r\n    __std_fs_filetime _Last_write_time; //     FILETIME ftLastWriteTime;\r\n    unsigned long _File_size_high; //     DWORD nFileSizeHigh;\r\n    unsigned long _File_size_low; //     DWORD nFileSizeLow;\r\n\r\n    // MSDN: dwReserved0 specifies the reparse point tag if\r\n    // MSDN:  (dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) != 0\r\n\r\n    __std_fs_reparse_tag _Reparse_point_tag; //     DWORD dwReserved0;\r\n    unsigned long _Reserved1; //     DWORD dwReserved1;\r\n    wchar_t _File_name[__std_fs_max_path]; //     _Field_z_ WCHAR  cFileName[ MAX_PATH ];\r\n    wchar_t _Short_file_name[14]; //     _Field_z_ WCHAR  cAlternateFileName[ 14 ];\r\n}; // } WIN32_FIND_DATAW, ... ;\r\n\r\nenum class __std_fs_stats_flags : unsigned long {\r\n    _None = 0,\r\n\r\n    _Follow_symlinks = 0x01, // resolve symlink\r\n    _Attributes      = 0x02, // read/has attributes\r\n    _Reparse_tag     = 0x04, // read/has reparse_tag; may not be combined with _Follow_symlinks\r\n    _File_size       = 0x08, // read/has file size\r\n    _Link_count      = 0x10, // read/has link count\r\n    _Last_write_time = 0x20, // read/has last write time\r\n\r\n    _All_data = _Attributes | _Reparse_tag | _File_size | _Link_count | _Last_write_time\r\n};\r\n} // extern \"C\"\r\n\r\n_EXTERN_CXX_WORKAROUND\r\n_BITMASK_OPS(_EMPTY_ARGUMENT, __std_fs_stats_flags)\r\n_END_EXTERN_CXX_WORKAROUND\r\n\r\nextern \"C\" {\r\nstruct __std_fs_stats {\r\n    long long _Last_write_time;\r\n    unsigned long long _File_size;\r\n    __std_fs_file_attr _Attributes;\r\n    __std_fs_reparse_tag _Reparse_point_tag;\r\n    unsigned long _Link_count;\r\n    __std_fs_stats_flags _Available; // which fields are available\r\n\r\n    _NODISCARD __std_fs_file_attr _Symlink_hint_attributes() const noexcept {\r\n        if (_STD _Bitmask_includes_any(_Available, __std_fs_stats_flags::_Attributes)) {\r\n            return _Attributes;\r\n        }\r\n\r\n        return __std_fs_file_attr::_Invalid;\r\n    }\r\n};\r\n\r\nstruct __std_fs_reparse_data_buffer { // typedef struct _REPARSE_DATA_BUFFER\r\n    unsigned long _Reparse_tag;\r\n    unsigned short _Reparse_data_length;\r\n    unsigned short _Reserved;\r\n    union {\r\n        struct {\r\n            unsigned short _Substitute_name_offset;\r\n            unsigned short _Substitute_name_length;\r\n            unsigned short _Print_name_offset;\r\n            unsigned short _Print_name_length;\r\n            unsigned long _Flags;\r\n            wchar_t _Path_buffer[1];\r\n        } _Symbolic_link_reparse_buffer;\r\n        struct {\r\n            unsigned short _Substitute_name_offset;\r\n            unsigned short _Substitute_name_length;\r\n            unsigned short _Print_name_offset;\r\n            unsigned short _Print_name_length;\r\n            wchar_t _Path_buffer[1];\r\n        } _Mount_point_reparse_buffer;\r\n        struct {\r\n            unsigned char _Data_buffer[1];\r\n        } _Generic_reparse_buffer;\r\n    };\r\n};\r\n\r\nstruct __std_ulong_and_error {\r\n    unsigned long _Size;\r\n    __std_win_error _Error;\r\n};\r\n\r\nenum class __std_fs_volume_name_kind : unsigned long {\r\n    _Dos  = 0, // #define VOLUME_NAME_DOS  0x0\r\n    _Guid = 1, // #define VOLUME_NAME_GUID 0x1\r\n    _Nt   = 2, // #define VOLUME_NAME_NT   0x2\r\n    _None = 4 // #define VOLUME_NAME_NONE 0x4\r\n};\r\n\r\nenum class __std_access_rights : unsigned long {\r\n    _Delete                = 0x00010000, // #define DELETE                           (0x00010000L)\r\n    _File_read_attributes  = 0x0080, // #define FILE_READ_ATTRIBUTES      ( 0x0080 )\r\n    _File_write_attributes = 0x0100, // #define FILE_WRITE_ATTRIBUTES     ( 0x0100 )\r\n\r\n    // #define READ_CONTROL          (0x00020000L)\r\n    // #define STANDARD_RIGHTS_WRITE (READ_CONTROL)\r\n    // #define FILE_WRITE_DATA       (0x0002)\r\n    // #define FILE_WRITE_ATTRIBUTES (0x0100)\r\n    // #define FILE_WRITE_EA         (0x0010)\r\n    // #define FILE_APPEND_DATA      (0x0004)\r\n    // #define SYNCHRONIZE           (0x00100000L)\r\n    // #define FILE_GENERIC_WRITE    (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES\r\n    //                                   | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE)\r\n    _File_generic_write = 0x00120116,\r\n};\r\n} // extern \"C\"\r\n\r\n_EXTERN_CXX_WORKAROUND\r\n_BITMASK_OPS(_EMPTY_ARGUMENT, __std_access_rights)\r\n_END_EXTERN_CXX_WORKAROUND\r\n\r\nextern \"C\" {\r\nenum class __std_fs_file_flags : unsigned long {\r\n    _None               = 0,\r\n    _Backup_semantics   = 0x02000000, // #define FILE_FLAG_BACKUP_SEMANTICS      0x02000000\r\n    _Open_reparse_point = 0x00200000, // #define FILE_FLAG_OPEN_REPARSE_POINT    0x00200000\r\n};\r\n} // extern \"C\"\r\n\r\n_EXTERN_CXX_WORKAROUND\r\n_BITMASK_OPS(_EMPTY_ARGUMENT, __std_fs_file_flags)\r\n_END_EXTERN_CXX_WORKAROUND\r\n\r\nextern \"C\" {\r\nenum class __std_fs_file_handle : intptr_t { _Invalid = -1 };\r\n\r\nenum class __std_code_page : unsigned int { _Acp = 0, _Utf8 = 65001 };\r\n\r\nstruct __std_fs_convert_result {\r\n    int _Len;\r\n    __std_win_error _Err;\r\n};\r\n\r\nenum class __std_fs_copy_options {\r\n    _None = 0x0,\r\n\r\n    _Existing_mask      = 0xF,\r\n    _Skip_existing      = 0x1,\r\n    _Overwrite_existing = 0x2,\r\n    _Update_existing    = 0x4,\r\n};\r\n} // extern \"C\"\r\n\r\n_EXTERN_CXX_WORKAROUND\r\n_BITMASK_OPS(_EMPTY_ARGUMENT, __std_fs_copy_options)\r\n_END_EXTERN_CXX_WORKAROUND\r\n\r\nextern \"C\" {\r\n_NODISCARD __std_ulong_and_error __stdcall __std_fs_get_full_path_name(_In_z_ const wchar_t* _Source,\r\n    _In_ unsigned long _Target_size, _Out_writes_z_(_Target_size) wchar_t* _Target) noexcept;\r\n\r\n_NODISCARD __std_win_error __stdcall __std_fs_open_handle(_Out_ __std_fs_file_handle* _Handle,\r\n    _In_z_ const wchar_t* _File_name, _In_ __std_access_rights _Desired_access,\r\n    _In_ __std_fs_file_flags _Flags) noexcept;\r\n\r\nvoid __stdcall __std_fs_close_handle(__std_fs_file_handle _Handle) noexcept;\r\n\r\n_NODISCARD _Success_(return == __std_win_error::_Success) __std_win_error\r\n    __stdcall __std_fs_get_file_attributes_by_handle(\r\n        _In_ __std_fs_file_handle _Handle, _Out_ unsigned long* _File_attributes) noexcept;\r\n\r\n_NODISCARD __std_ulong_and_error __stdcall __std_fs_get_final_path_name_by_handle(_In_ __std_fs_file_handle _Handle,\r\n    _Out_writes_z_(_Target_size) wchar_t* _Target, _In_ unsigned long _Target_size,\r\n    _In_ __std_fs_volume_name_kind _Flags) noexcept;\r\n\r\nstruct __std_fs_copy_file_result {\r\n    bool _Copied;\r\n    __std_win_error _Error;\r\n};\r\n\r\n_NODISCARD __std_fs_copy_file_result __stdcall __std_fs_copy_file(\r\n    _In_z_ const wchar_t* _Source, _In_z_ const wchar_t* _Target, _In_ __std_fs_copy_options _Options) noexcept;\r\n\r\n_NODISCARD __std_win_error __stdcall __std_fs_directory_iterator_open(_In_z_ const wchar_t* _Path_spec,\r\n    _Inout_ __std_fs_dir_handle* _Handle, _Out_ __std_fs_find_data* _Results) noexcept;\r\n\r\nvoid __stdcall __std_fs_directory_iterator_close(_In_ __std_fs_dir_handle _Handle) noexcept;\r\n\r\n_NODISCARD _Success_(return == __std_win_error::_Success) __std_win_error\r\n    __stdcall __std_fs_get_stats(_In_z_ const wchar_t* _Path, __std_fs_stats* _Stats, _In_ __std_fs_stats_flags _Flags,\r\n        _In_ __std_fs_file_attr _Symlink_attribute_hint = __std_fs_file_attr::_Invalid) noexcept;\r\n\r\n_NODISCARD __std_win_error __stdcall __std_fs_directory_iterator_advance(\r\n    _In_ __std_fs_dir_handle _Handle, _Out_ __std_fs_find_data* _Results) noexcept;\r\n\r\n_NODISCARD __std_code_page __stdcall __std_fs_code_page() noexcept;\r\n\r\n_NODISCARD __std_fs_convert_result __stdcall __std_fs_convert_narrow_to_wide(_In_ __std_code_page _Code_page,\r\n    _In_reads_(_Input_len) const char* _Input_str, _In_ int _Input_len,\r\n    _Out_writes_opt_(_Output_len) wchar_t* _Output_str, _In_ int _Output_len) noexcept;\r\n\r\n_NODISCARD __std_fs_convert_result __stdcall __std_fs_convert_wide_to_narrow(_In_ __std_code_page _Code_page,\r\n    _In_reads_(_Input_len) const wchar_t* _Input_str, _In_ int _Input_len,\r\n    _Out_writes_opt_(_Output_len) char* _Output_str, _In_ int _Output_len) noexcept;\r\n\r\n_NODISCARD __std_fs_convert_result __stdcall __std_fs_convert_wide_to_narrow_replace_chars(\r\n    _In_ __std_code_page _Code_page, _In_reads_(_Input_len) const wchar_t* _Input_str, _In_ int _Input_len,\r\n    _Out_writes_opt_(_Output_len) char* _Output_str, _In_ int _Output_len) noexcept;\r\n\r\nstruct __std_fs_equivalent_result {\r\n    bool _Equivalent;\r\n    __std_win_error _Error;\r\n};\r\n\r\n_NODISCARD __std_fs_equivalent_result __stdcall __std_fs_equivalent(\r\n    _In_z_ const wchar_t* _Path1, _In_z_ const wchar_t* _Path2) noexcept;\r\n\r\n_NODISCARD __std_win_error __stdcall __std_fs_set_last_write_time(\r\n    _In_ long long _Last_write_filetime, _In_z_ const wchar_t* _Path) noexcept;\r\n\r\n_NODISCARD __std_win_error __stdcall __std_fs_change_permissions(\r\n    _In_z_ const wchar_t* _Path, _In_ bool _Follow_symlinks, _In_ bool _Readonly) noexcept;\r\n\r\n_NODISCARD _Success_(return._Error == __std_win_error::_Success) __std_ulong_and_error\r\n    __stdcall __std_fs_get_temp_path(_Out_writes_z_(__std_fs_temp_path_max) wchar_t* _Target) noexcept;\r\n\r\n_NODISCARD _Success_(return._Error == __std_win_error::_Success) __std_ulong_and_error\r\n    __stdcall __std_fs_get_current_path(\r\n        _In_ unsigned long _Target_size, _Out_writes_z_(_Target_size) wchar_t* _Target) noexcept;\r\n\r\n_NODISCARD __std_win_error __stdcall __std_fs_set_current_path(_In_z_ const wchar_t* _Target) noexcept;\r\n\r\n_NODISCARD __std_win_error __stdcall __std_fs_create_directory_symbolic_link(\r\n    _In_z_ const wchar_t* _Symlink_file_name, _In_z_ const wchar_t* _Target_file_name) noexcept;\r\n\r\n_NODISCARD __std_win_error __stdcall __std_fs_create_hard_link(\r\n    _In_z_ const wchar_t* _File_name, _In_z_ const wchar_t* _Existing_file_name) noexcept;\r\n\r\n_NODISCARD __std_win_error __stdcall __std_fs_create_symbolic_link(\r\n    _In_z_ const wchar_t* _Symlink_file_name, _In_z_ const wchar_t* _Target_file_name) noexcept;\r\n\r\n_NODISCARD __std_win_error __stdcall __std_fs_read_reparse_data_buffer(_In_ __std_fs_file_handle _Handle,\r\n    _Out_writes_bytes_(_Buffer_size) void* _Buffer, _In_ unsigned long _Buffer_size) noexcept;\r\n\r\n_NODISCARD __std_win_error __stdcall __std_fs_write_reparse_data_buffer(\r\n    _In_ __std_fs_file_handle _Handle, _In_ const __std_fs_reparse_data_buffer* _Buffer) noexcept;\r\n\r\n_NODISCARD bool __stdcall __std_fs_is_junction_from_reparse_data_buffer(\r\n    _In_ const __std_fs_reparse_data_buffer* _Buffer) noexcept;\r\n\r\n_NODISCARD _Success_(return == __std_win_error::_Success) __std_win_error\r\n    __stdcall __std_fs_read_name_from_reparse_data_buffer(\r\n        _In_ __std_fs_reparse_data_buffer* _Handle, _Out_ wchar_t** _Offset, _Out_ unsigned short* _Length) noexcept;\r\n\r\nstruct __std_fs_create_directory_result {\r\n    bool _Created;\r\n    __std_win_error _Error;\r\n};\r\n\r\n_NODISCARD __std_fs_create_directory_result __stdcall __std_fs_create_directory(\r\n    _In_z_ const wchar_t* _New_directory) noexcept;\r\n\r\nstruct __std_fs_remove_result {\r\n    bool _Removed;\r\n    __std_win_error _Error;\r\n};\r\n\r\n_NODISCARD __std_fs_remove_result __stdcall __std_fs_remove(_In_z_ const wchar_t* _Target) noexcept;\r\n\r\n_NODISCARD __std_win_error __stdcall __std_fs_rename(\r\n    _In_z_ const wchar_t* _Source, _In_z_ const wchar_t* _Target) noexcept;\r\n\r\n_NODISCARD __std_win_error __stdcall __std_fs_resize_file(_In_z_ const wchar_t* _Target, uintmax_t _New_size) noexcept;\r\n\r\n_NODISCARD __std_win_error __stdcall __std_fs_space(_In_z_ const wchar_t* _Target, _Out_ uintmax_t* _Available,\r\n    _Out_ uintmax_t* _Total_bytes, _Out_ uintmax_t* _Free_bytes) noexcept;\r\n} // extern \"C\"\r\n\r\n_STD_BEGIN\r\nstruct _Fs_file {\r\n    __std_fs_file_handle _Raw;\r\n\r\n    explicit _Fs_file(void* const _Handle) : _Raw{reinterpret_cast<intptr_t>(_Handle)} {}\r\n\r\n    _Fs_file(const wchar_t* const _File_name, const __std_access_rights _Desired_access,\r\n        const __std_fs_file_flags _Flags, __std_win_error* const _Err) {\r\n        *_Err = __std_fs_open_handle(&_Raw, _File_name, _Desired_access, _Flags);\r\n    }\r\n\r\n    _Fs_file(const _Fs_file&)            = delete;\r\n    _Fs_file& operator=(const _Fs_file&) = delete;\r\n\r\n    ~_Fs_file() {\r\n        __std_fs_close_handle(_Raw);\r\n    }\r\n\r\n    _NODISCARD void* _Get() const {\r\n        return reinterpret_cast<void*>(_Raw);\r\n    }\r\n};\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XFILESYSTEM_ABI_H\r\n"
  },
  {
    "path": "stl/inc/xhash",
    "content": "// xhash internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XHASH_\r\n#define _XHASH_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <cmath>\r\n#include <list>\r\n#include <tuple>\r\n#include <vector>\r\n#include <xbit_ops.h>\r\n\r\n#ifdef _LEGACY_CODE_ASSUMES_XHASH_INCLUDES_XSTRING\r\n#include <cstring>\r\n#include <cwchar>\r\n#include <xstring>\r\n#endif // _LEGACY_CODE_ASSUMES_XHASH_INCLUDES_XSTRING\r\n\r\n#if _HAS_CXX17\r\n#include <xnode_handle.h>\r\n#endif // _HAS_CXX17\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _Kty, class _Hasher, class _Keyeq>\r\nstruct _Uhash_choose_transparency {\r\n    // transparency selector for non-transparent hashed containers\r\n    static constexpr bool _Has_transparent_overloads = false;\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Kty, _Transparent _Hasher, _Transparent _Keyeq>\r\nstruct _Uhash_choose_transparency<_Kty, _Hasher, _Keyeq> {\r\n    // transparency selector for transparent hashed containers\r\n    static constexpr bool _Has_transparent_overloads = true;\r\n\r\n#if _HAS_CXX23\r\n    template <class _Container, class _Kx>\r\n    static constexpr bool _Supports_transparency =\r\n        !disjunction_v<is_convertible<_Kx, typename _Container::const_iterator>,\r\n            is_convertible<_Kx, typename _Container::iterator>>;\r\n#endif // _HAS_CXX23\r\n};\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Hasher, class _Kty>\r\nconstexpr bool _Nothrow_hash =\r\n    noexcept(static_cast<size_t>(_STD declval<const _Hasher&>()(_STD declval<const _Kty&>())));\r\n\r\ntemplate <class _Kty, class _Hasher, class _Keyeq>\r\nclass _Uhash_compare\r\n    : public _Uhash_choose_transparency<_Kty, _Hasher, _Keyeq> { // traits class for unordered containers\r\npublic:\r\n    enum { // parameters for hash table\r\n        bucket_size = 1 // 0 < bucket_size\r\n    };\r\n\r\n    _Uhash_compare()\r\n        noexcept(conjunction_v<is_nothrow_default_constructible<_Hasher>, is_nothrow_default_constructible<_Keyeq>>)\r\n        : _Mypair(_Zero_then_variadic_args_t{}, _Zero_then_variadic_args_t{}, 0.0f) {}\r\n\r\n    explicit _Uhash_compare(const _Hasher& _Hasharg)\r\n        noexcept(conjunction_v<is_nothrow_copy_constructible<_Hasher>, is_nothrow_default_constructible<_Keyeq>>)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Hasharg, _Zero_then_variadic_args_t{}, 0.0f) {}\r\n\r\n    explicit _Uhash_compare(const _Hasher& _Hasharg, const _Keyeq& _Keyeqarg)\r\n        noexcept(conjunction_v<is_nothrow_copy_constructible<_Hasher>, is_nothrow_copy_constructible<_Keyeq>>)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Hasharg, _One_then_variadic_args_t{}, _Keyeqarg, 0.0f) {}\r\n\r\n    template <class _Keyty>\r\n    _NODISCARD size_t operator()(const _Keyty& _Keyval) const noexcept(_Nothrow_hash<_Hasher, _Keyty>) {\r\n        // hash _Keyval to size_t value\r\n        return static_cast<size_t>(_Mypair._Get_first()(_Keyval));\r\n    }\r\n\r\n    template <class _Keyty1, class _Keyty2>\r\n    _NODISCARD bool operator()(const _Keyty1& _Keyval1, const _Keyty2& _Keyval2) const\r\n        noexcept(_Nothrow_compare<_Keyeq, _Keyty1, _Keyty2>) {\r\n        // test if _Keyval1 NOT equal to _Keyval2\r\n        return !static_cast<bool>(_Mypair._Myval2._Get_first()(_Keyval1, _Keyval2));\r\n    }\r\n\r\n    _NODISCARD float& _Get_max_bucket_size() noexcept {\r\n        return _Mypair._Myval2._Myval2;\r\n    }\r\n\r\n    _NODISCARD const float& _Get_max_bucket_size() const noexcept {\r\n        return _Mypair._Myval2._Myval2;\r\n    }\r\n\r\n    void swap(_Uhash_compare& _Rhs)\r\n        noexcept(conjunction_v<_Is_nothrow_swappable<_Hasher>, _Is_nothrow_swappable<_Keyeq>>) {\r\n        using _STD swap;\r\n        swap(_Mypair._Get_first(), _Rhs._Mypair._Get_first()); // intentional ADL\r\n        auto& _Lsecond = _Mypair._Myval2;\r\n        auto& _Rsecond = _Rhs._Mypair._Myval2;\r\n        swap(_Lsecond._Get_first(), _Rsecond._Get_first()); // intentional ADL\r\n        _STD swap(_Lsecond._Myval2, _Rsecond._Myval2);\r\n    }\r\n\r\n    _Compressed_pair<_Hasher, _Compressed_pair<_Keyeq, float>> _Mypair;\r\n};\r\n\r\ntemplate <class _Iter, class _Val>\r\nstruct _Reinterpret_move_iter {\r\n    _Iter _Base;\r\n\r\n    using iterator_category = input_iterator_tag;\r\n    using value_type        = typename iterator_traits<_Iter>::value_type;\r\n    using difference_type   = typename iterator_traits<_Iter>::difference_type;\r\n    using reference         = _Val&&;\r\n    // pointer intentionally omitted\r\n\r\n    reference operator*() const {\r\n        return static_cast<reference>(reinterpret_cast<_Val&>(*_Base));\r\n    }\r\n\r\n    _Reinterpret_move_iter& operator++() {\r\n        ++_Base;\r\n        return *this;\r\n    }\r\n\r\n    // post ++ intentionally omitted\r\n\r\n    _NODISCARD friend bool operator==(const _Reinterpret_move_iter& _Lhs, const _Reinterpret_move_iter& _Rhs) {\r\n        return _Lhs._Base == _Rhs._Base;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD friend bool operator!=(const _Reinterpret_move_iter& _Lhs, const _Reinterpret_move_iter& _Rhs) {\r\n        return _Lhs._Base != _Rhs._Base;\r\n    }\r\n#endif // !_HAS_CXX20\r\n};\r\n\r\ntemplate <class _Alnode>\r\nstruct _List_head_construct_ptr {\r\n    using value_type = typename _Alnode::value_type;\r\n    static_assert(_Is_specialization_v<value_type, _List_node>, \"_List_head_construct_ptr allocator not rebound\");\r\n    using _Alnode_traits = allocator_traits<_Alnode>;\r\n    using pointer        = typename _Alnode_traits::pointer;\r\n    _Alnode& _Al;\r\n    pointer _Newhead;\r\n\r\n    explicit _List_head_construct_ptr(_Alnode& _Al_) : _Al(_Al_), _Newhead(value_type::_Buyheadnode(_Al)) {}\r\n\r\n    template <class _Val_types>\r\n    _List_head_construct_ptr(_Alnode& _Al_, _List_val<_Val_types>& _Mycont)\r\n        : _Al(_Al_), _Newhead(value_type::_Buyheadnode(_Al)) {\r\n        _Mycont._Myhead = _Newhead;\r\n    }\r\n\r\n    _List_head_construct_ptr(const _List_head_construct_ptr&)            = delete;\r\n    _List_head_construct_ptr& operator=(const _List_head_construct_ptr&) = delete;\r\n\r\n    _NODISCARD pointer _Release() noexcept {\r\n        return _STD exchange(_Newhead, nullptr);\r\n    }\r\n\r\n    ~_List_head_construct_ptr() {\r\n        if (_Newhead) {\r\n            value_type::_Freenode0(_Al, _Newhead);\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Nodeptr>\r\nstruct _Hash_find_last_result {\r\n    _Nodeptr _Insert_before;\r\n    _Nodeptr _Duplicate;\r\n};\r\n\r\ntemplate <class _Aliter>\r\nstruct _Hash_vec {\r\n    // TRANSITION, ABI: \"vector\" for ABI compatibility that doesn't call allocator::construct\r\n    using _Aliter_traits    = allocator_traits<_Aliter>;\r\n    using value_type        = typename _Aliter::value_type;\r\n    using size_type         = typename _Aliter_traits::size_type;\r\n    using difference_type   = typename _Aliter_traits::difference_type;\r\n    using pointer           = typename _Aliter_traits::pointer;\r\n    using _Aliter_scary_val = _Vector_val<conditional_t<_Is_simple_alloc_v<_Aliter>, _Simple_types<value_type>,\r\n        _Vec_iter_types<value_type, size_type, difference_type, pointer, typename _Aliter_traits::const_pointer>>>;\r\n\r\n    _Hash_vec() : _Mypair(_Zero_then_variadic_args_t{}) {\r\n        _Mypair._Myval2._Alloc_proxy(_STD _Get_proxy_allocator(_Mypair._Get_first()));\r\n    }\r\n\r\n    template <class _Any_alloc, enable_if_t<!is_same_v<_Remove_cvref_t<_Any_alloc>, _Hash_vec>, int> = 0>\r\n    explicit _Hash_vec(_Any_alloc&& _Al) noexcept\r\n        : _Mypair(_One_then_variadic_args_t{}, _STD forward<_Any_alloc>(_Al)) { // construct empty vector, allocator\r\n        _Mypair._Myval2._Alloc_proxy(_STD _Get_proxy_allocator(_Mypair._Get_first()));\r\n    }\r\n\r\n    _Hash_vec(const _Hash_vec&)            = delete;\r\n    _Hash_vec& operator=(const _Hash_vec&) = delete;\r\n\r\n    _NODISCARD size_type size() const noexcept {\r\n        return static_cast<size_type>(_Mypair._Myval2._Mylast - _Mypair._Myval2._Myfirst);\r\n    }\r\n\r\n    _NODISCARD size_type max_size() const noexcept {\r\n        return (_STD min) (static_cast<size_type>(_STD _Max_limit<difference_type>()),\r\n            _Aliter_traits::max_size(_Mypair._Get_first()));\r\n    }\r\n\r\n    _NODISCARD size_type capacity() const noexcept {\r\n        // This implementation never has capacity() differ from size(), but the previous implementation could.\r\n        // We need to handle that situation gracefully since we may link to old code (See GH-2774).\r\n        return static_cast<size_type>(_Mypair._Myval2._Myend - _Mypair._Myval2._Myfirst);\r\n    }\r\n\r\n    void _Assign_grow(const size_type _Cells, const value_type _Val) {\r\n        // set the elements stored here to _Cells copies of _Val, leaving the value unchanged if an exception is thrown\r\n        const auto _Oldsize = size();\r\n        _STL_INTERNAL_CHECK(_Oldsize <= _Cells);\r\n        auto& _Alvec = _Mypair._Get_first();\r\n        if (_Oldsize < _Cells) {\r\n            const auto _Newvec = _Alvec.allocate(_Cells); // throws\r\n            // nothrow hereafter\r\n            const auto _Oldcapacity = capacity();\r\n            if (_Oldcapacity != 0) {\r\n                _Destroy_range(_Mypair._Myval2._Myfirst, _Mypair._Myval2._Mylast);\r\n                _Alvec.deallocate(_Mypair._Myval2._Myfirst, _Oldcapacity);\r\n            }\r\n\r\n            _Mypair._Myval2._Myfirst = _Newvec;\r\n            const auto _Newend       = _Newvec + _Cells;\r\n            _Mypair._Myval2._Mylast  = _Newend;\r\n            _Mypair._Myval2._Myend   = _Newend;\r\n            _STD uninitialized_fill(_Newvec, _Newend, _Val);\r\n        } else {\r\n            _STD fill(_Mypair._Myval2._Myfirst, _Mypair._Myval2._Mylast, _Val);\r\n        }\r\n    }\r\n\r\n    void _Tidy() noexcept {\r\n        if (_Mypair._Myval2._Myfirst != nullptr) {\r\n            _Destroy_range(_Mypair._Myval2._Myfirst, _Mypair._Myval2._Mylast);\r\n            _Mypair._Get_first().deallocate(_Mypair._Myval2._Myfirst, capacity());\r\n            _Mypair._Myval2._Myfirst = nullptr;\r\n            _Mypair._Myval2._Mylast  = nullptr;\r\n            _Mypair._Myval2._Myend   = nullptr;\r\n        }\r\n    }\r\n\r\n    ~_Hash_vec() {\r\n        _Tidy();\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        auto _Alproxy = _STD _Get_proxy_allocator(_Mypair._Get_first());\r\n        _Delete_plain_internal(_Alproxy, _STD exchange(_Mypair._Myval2._Myproxy, nullptr));\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    _Compressed_pair<_Aliter, _Aliter_scary_val> _Mypair;\r\n};\r\n\r\ntemplate <class _Traits>\r\nclass _Hash { // hash table -- list with vector of iterators for quick access\r\nprotected:\r\n    using _Mylist             = list<typename _Traits::value_type, typename _Traits::allocator_type>;\r\n    using _Alnode             = typename _Mylist::_Alnode;\r\n    using _Alnode_traits      = typename _Mylist::_Alnode_traits;\r\n    using _Node               = typename _Mylist::_Node;\r\n    using _Nodeptr            = typename _Mylist::_Nodeptr;\r\n    using _Mutable_value_type = typename _Traits::_Mutable_value_type;\r\n    using _Key_compare        = typename _Traits::key_compare;\r\n\r\npublic:\r\n    using key_type = typename _Traits::key_type;\r\n\r\n    using value_type      = typename _Mylist::value_type;\r\n    using allocator_type  = typename _Mylist::allocator_type;\r\n    using size_type       = typename _Mylist::size_type;\r\n    using difference_type = typename _Mylist::difference_type;\r\n    using pointer         = typename _Mylist::pointer;\r\n    using const_pointer   = typename _Mylist::const_pointer;\r\n    using reference       = value_type&;\r\n    using const_reference = const value_type&;\r\n\r\n    using iterator =\r\n        conditional_t<is_same_v<key_type, value_type>, typename _Mylist::const_iterator, typename _Mylist::iterator>;\r\n    using const_iterator = typename _Mylist::const_iterator;\r\n\r\n    using _Unchecked_iterator       = conditional_t<is_same_v<key_type, value_type>,\r\n              typename _Mylist::_Unchecked_const_iterator, typename _Mylist::_Unchecked_iterator>;\r\n    using _Unchecked_const_iterator = typename _Mylist::_Unchecked_const_iterator;\r\n\r\n    using _Aliter = _Rebind_alloc_t<_Alnode, _Unchecked_iterator>;\r\n\r\n    static constexpr size_type _Bucket_size = _Key_compare::bucket_size;\r\n    static constexpr size_type _Min_buckets = 8; // must be a positive power of 2\r\n    static constexpr bool _Multi            = _Traits::_Multi;\r\n\r\n    template <class _TraitsT>\r\n    friend bool _Hash_equal(const _Hash<_TraitsT>& _Left, const _Hash<_TraitsT>& _Right);\r\n\r\nprotected:\r\n    _Hash(const _Key_compare& _Parg, const allocator_type& _Al)\r\n        : _Traitsobj(_Parg), _List(_Al), _Vec(_Al), _Mask(_Min_buckets - 1), _Maxidx(_Min_buckets) {\r\n        // construct empty hash table\r\n        _Max_bucket_size() = _Bucket_size;\r\n        _Vec._Assign_grow(_Min_buckets * 2, _List._Unchecked_end());\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n        _Stl_internal_check_container_invariants();\r\n#endif // _ENABLE_STL_INTERNAL_CHECK\r\n    }\r\n\r\n    template <class _Any_alloc>\r\n    _Hash(const _Hash& _Right, const _Any_alloc& _Al)\r\n        : _Traitsobj(_Right._Traitsobj), _List(static_cast<allocator_type>(_Al)), _Vec(_Al), _Mask(_Right._Mask),\r\n          _Maxidx(_Right._Maxidx) {\r\n        // construct hash table by copying _Right\r\n        _Vec._Assign_grow(_Right._Vec.size(), _List._Unchecked_end());\r\n        _Insert_range_unchecked(_Right._Unchecked_begin(), _Right._Unchecked_end());\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n        _Stl_internal_check_container_invariants();\r\n        _Right._Stl_internal_check_container_invariants();\r\n#endif // _ENABLE_STL_INTERNAL_CHECK\r\n    }\r\n\r\n    _Hash(_Hash&& _Right)\r\n        : _Traitsobj(_Right._Traitsobj), _List(_Move_allocator_tag{}, _Right._List._Getal()),\r\n          _Vec(_STD move(_Right._Vec._Mypair._Get_first())) {\r\n        _Vec._Assign_grow(_Min_buckets * 2, _Unchecked_end());\r\n        _List._Swap_val(_Right._List);\r\n        _Vec._Mypair._Myval2._Swap_val(_Right._Vec._Mypair._Myval2);\r\n        _Mask   = _STD exchange(_Right._Mask, _Min_buckets - 1);\r\n        _Maxidx = _STD exchange(_Right._Maxidx, _Min_buckets);\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n        _Stl_internal_check_container_invariants();\r\n        _Right._Stl_internal_check_container_invariants();\r\n#endif // _ENABLE_STL_INTERNAL_CHECK\r\n    }\r\n\r\nprivate:\r\n    void _Move_construct_equal_alloc(_Hash& _Right) {\r\n        _Vec._Assign_grow(_Min_buckets * 2, _Unchecked_end());\r\n        _List._Swap_val(_Right._List);\r\n        _Vec._Mypair._Myval2._Swap_val(_Right._Vec._Mypair._Myval2);\r\n        _Mask   = _STD exchange(_Right._Mask, _Min_buckets - 1);\r\n        _Maxidx = _STD exchange(_Right._Maxidx, _Min_buckets);\r\n    }\r\n\r\npublic:\r\n    _Hash(_Hash&& _Right, const allocator_type& _Al) : _Traitsobj(_Right._Traitsobj), _List(_Al), _Vec(_Al) {\r\n        // construct hash table by moving _Right, allocator\r\n        if constexpr (_Alnode_traits::is_always_equal::value) {\r\n            _Move_construct_equal_alloc(_Right);\r\n        } else if (_List._Getal() == _Right._List._Getal()) {\r\n            _Move_construct_equal_alloc(_Right);\r\n        } else {\r\n            _Maxidx            = _Min_buckets;\r\n            const auto _Myhead = _List._Mypair._Myval2._Myhead;\r\n            for (auto& _Val : _Right._List) {\r\n                _List._Emplace(_Myhead, reinterpret_cast<_Mutable_value_type&&>(_Val));\r\n            }\r\n            _Reinsert_with_invalid_vec();\r\n            _Right.clear();\r\n        }\r\n\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n        _Stl_internal_check_container_invariants();\r\n        _Right._Stl_internal_check_container_invariants();\r\n#endif // _ENABLE_STL_INTERNAL_CHECK\r\n    }\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n    ~_Hash() noexcept {\r\n        // Destroying _List and _Vec will store tombstones in their pointers.\r\n        // We'll also set _Mask and _Maxidx back to the values used by _Hash's default constructor. Although this\r\n        // doesn't provide the same benefit as zeroing out size fields, it's consistent with the pattern elsewhere.\r\n        _Mask   = _Min_buckets - 1;\r\n        _Maxidx = _Min_buckets;\r\n    }\r\n#endif // _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n\r\nprivate:\r\n    void _Swap_val(_Hash& _Right) noexcept { // swap contents with equal allocator _Hash _Right\r\n        _List._Swap_val(_Right._List);\r\n        _Vec._Mypair._Myval2._Swap_val(_Right._Vec._Mypair._Myval2);\r\n        _STD swap(_Mask, _Right._Mask);\r\n        _STD swap(_Maxidx, _Right._Maxidx);\r\n    }\r\n\r\n    struct _Min_buckets_construct_ptr {\r\n        using pointer = typename allocator_traits<_Aliter>::pointer;\r\n        _Aliter& _Al;\r\n        pointer _Base;\r\n        _Min_buckets_construct_ptr(_Aliter& _Al_) : _Al(_Al_), _Base(_Al.allocate(_Min_buckets * 2)) {}\r\n        _Min_buckets_construct_ptr(const _Min_buckets_construct_ptr&) = delete;\r\n        _NODISCARD pointer _Release(_Unchecked_iterator _Newend) noexcept {\r\n            _STD uninitialized_fill(_Base, _Base + _Min_buckets * 2, _Newend);\r\n            return _STD exchange(_Base, nullptr);\r\n        }\r\n        ~_Min_buckets_construct_ptr() {\r\n            if (_Base) {\r\n                _Al.deallocate(_Base, _Min_buckets * 2);\r\n            }\r\n        }\r\n    };\r\n\r\n    void _Pocma_both(_Hash& _Right) {\r\n        _Pocma(_List._Getal(), _Right._List._Getal());\r\n        _Pocma(_Vec._Mypair._Get_first(), _Right._Vec._Mypair._Get_first());\r\n    }\r\n\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n    struct _NODISCARD _Check_container_invariants_guard {\r\n        const _Hash& _Target;\r\n\r\n        explicit _Check_container_invariants_guard(const _Hash& _Target_) : _Target(_Target_) {}\r\n\r\n        _Check_container_invariants_guard(const _Check_container_invariants_guard&)            = delete;\r\n        _Check_container_invariants_guard& operator=(const _Check_container_invariants_guard&) = delete;\r\n\r\n        ~_Check_container_invariants_guard() {\r\n            _Target._Stl_internal_check_container_invariants();\r\n        }\r\n    };\r\n#endif // _ENABLE_STL_INTERNAL_CHECK\r\n\r\npublic:\r\n    _Hash& operator=(_Hash&& _Right) { // assign by moving _Right\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n        _Check_container_invariants_guard _Check_self{*this};\r\n        _Check_container_invariants_guard _Check_right{_Right};\r\n#endif // _ENABLE_STL_INTERNAL_CHECK\r\n\r\n        auto& _Al                 = _Getal();\r\n        auto& _Right_al           = _Right._Getal();\r\n        constexpr auto _Pocma_val = _Choose_pocma_v<_Alnode>;\r\n        if constexpr (_Pocma_val == _Pocma_values::_Propagate_allocators) {\r\n            if (_Al != _Right_al) {\r\n                // allocate all the parts necessary to maintain _Hash invariants using _Right's allocator\r\n                auto _Alproxy       = _STD _Get_proxy_allocator(_Al);\r\n                auto _Right_alproxy = _STD _Get_proxy_allocator(_Right_al);\r\n                _Container_proxy_ptr<_Alnode> _List_proxy(_Right_alproxy, _Leave_proxy_unbound{});\r\n                _Container_proxy_ptr<_Alnode> _Vec_proxy(_Right_alproxy, _Leave_proxy_unbound{});\r\n                _List_head_construct_ptr<_Alnode> _Newhead(_Right_al);\r\n                _Min_buckets_construct_ptr _Buckets(_Right._Vec._Mypair._Get_first());\r\n\r\n                // assign the hash/compare ops; we have no control over whether this throws, and if it does we want\r\n                // to do nothing\r\n                _Traitsobj = _Right._Traitsobj;\r\n\r\n                // nothrow hereafter\r\n\r\n                // release any state we are currently owning, and propagate the allocators\r\n                _List._Tidy();\r\n                _Vec._Tidy();\r\n                _Pocma_both(_Right);\r\n\r\n                // assign the empty list to _Right._List (except the allocators), and take _Right's _List data\r\n                auto& _List_data       = _List._Mypair._Myval2;\r\n                auto& _Right_list_data = _Right._List._Mypair._Myval2;\r\n                _List_data._Myhead     = _STD exchange(_Right_list_data._Myhead, _Newhead._Release());\r\n                _List_data._Mysize     = _STD exchange(_Right_list_data._Mysize, size_type{0});\r\n                _List_proxy._Bind(_Alproxy, _STD addressof(_List_data));\r\n                _List_data._Swap_proxy_and_iterators(_Right_list_data);\r\n\r\n                // assign the _Min_buckets into _Right's _Vec data and take _Right's _Vec data\r\n                auto& _Vec_data       = _Vec._Mypair._Myval2;\r\n                auto& _Right_vec_data = _Right._Vec._Mypair._Myval2;\r\n\r\n                const auto _Newfirst = _Buckets._Release(_Right._Unchecked_end());\r\n                const auto _Newlast  = _Newfirst + _Min_buckets * 2;\r\n\r\n                _Vec_data._Myfirst = _STD exchange(_Right_vec_data._Myfirst, _Newfirst);\r\n                _Vec_data._Mylast  = _STD exchange(_Right_vec_data._Mylast, _Newlast);\r\n                _Vec_data._Myend   = _STD exchange(_Right_vec_data._Myend, _Newlast);\r\n                _Vec_proxy._Bind(_Alproxy, _STD addressof(_Vec_data));\r\n                _Vec_data._Swap_proxy_and_iterators(_Right_vec_data);\r\n\r\n                // give _Right the default _Mask and _Maxidx values and take its former values\r\n                _Mask   = _STD exchange(_Right._Mask, _Min_buckets - 1);\r\n                _Maxidx = _STD exchange(_Right._Maxidx, _Min_buckets);\r\n\r\n                return *this;\r\n            }\r\n        } else if constexpr (_Pocma_val == _Pocma_values::_No_propagate_allocators) {\r\n            if (_Al != _Right_al) {\r\n                _Clear_guard<_Hash> _Guard{this};\r\n                _Traitsobj     = _Right._Traitsobj;\r\n                using _Adapter = _Reinterpret_move_iter<typename _Mylist::_Unchecked_iterator, _Mutable_value_type>;\r\n                _List.template _Assign_cast<_Mutable_value_type&>(\r\n                    _Adapter{_Right._List._Unchecked_begin()}, _Adapter{_Right._List._Unchecked_end()});\r\n                _Reinsert_with_invalid_vec();\r\n                _Guard._Target = nullptr;\r\n\r\n                return *this;\r\n            }\r\n        }\r\n\r\n        clear();\r\n        _Traitsobj = _Right._Traitsobj;\r\n        _Pocma_both(_Right);\r\n        _Swap_val(_Right);\r\n\r\n        return *this;\r\n    }\r\n\r\n    template <class... _Valtys>\r\n    conditional_t<_Multi, iterator, pair<iterator, bool>> emplace(_Valtys&&... _Vals) {\r\n        // try to insert value_type(_Vals...)\r\n        using _In_place_key_extractor = typename _Traits::template _In_place_key_extractor<_Valtys...>;\r\n        if constexpr (_Multi) {\r\n            _Check_max_size();\r\n            _List_node_emplace_op2<_Alnode> _Newnode(_List._Getal(), _STD forward<_Valtys>(_Vals)...);\r\n            const auto& _Keyval = _Traits::_Kfn(_Newnode._Ptr->_Myval);\r\n            const auto _Hashval = _Traitsobj(_Keyval);\r\n            if (_Check_rehash_required_1()) {\r\n                _Rehash_for_1();\r\n            }\r\n\r\n            const auto _Target = _Find_last(_Keyval, _Hashval);\r\n            return _List._Make_iter(_Insert_new_node_before(_Hashval, _Target._Insert_before, _Newnode._Release()));\r\n        } else if constexpr (_In_place_key_extractor::_Extractable) {\r\n            const auto& _Keyval = _In_place_key_extractor::_Extract(_Vals...);\r\n            const auto _Hashval = _Traitsobj(_Keyval);\r\n            auto _Target        = _Find_last(_Keyval, _Hashval);\r\n            if (_Target._Duplicate) {\r\n                return {_List._Make_iter(_Target._Duplicate), false};\r\n            }\r\n\r\n            _Check_max_size();\r\n            // invalidates _Keyval:\r\n            _List_node_emplace_op2<_Alnode> _Newnode(_List._Getal(), _STD forward<_Valtys>(_Vals)...);\r\n            if (_Check_rehash_required_1()) {\r\n                _Rehash_for_1();\r\n                _Target = _Find_last(_Traits::_Kfn(_Newnode._Ptr->_Myval), _Hashval);\r\n            }\r\n\r\n            return {\r\n                _List._Make_iter(_Insert_new_node_before(_Hashval, _Target._Insert_before, _Newnode._Release())), true};\r\n        } else {\r\n            _List_node_emplace_op2<_Alnode> _Newnode(_List._Getal(), _STD forward<_Valtys>(_Vals)...);\r\n            const auto& _Keyval = _Traits::_Kfn(_Newnode._Ptr->_Myval);\r\n            const auto _Hashval = _Traitsobj(_Keyval);\r\n            auto _Target        = _Find_last(_Keyval, _Hashval);\r\n            if (_Target._Duplicate) {\r\n                return {_List._Make_iter(_Target._Duplicate), false};\r\n            }\r\n\r\n            _Check_max_size();\r\n            if (_Check_rehash_required_1()) {\r\n                _Rehash_for_1();\r\n                _Target = _Find_last(_Traits::_Kfn(_Newnode._Ptr->_Myval), _Hashval);\r\n            }\r\n\r\n            return {\r\n                _List._Make_iter(_Insert_new_node_before(_Hashval, _Target._Insert_before, _Newnode._Release())), true};\r\n        }\r\n    }\r\n\r\n    template <class... _Valtys>\r\n    iterator emplace_hint(const_iterator _Hint, _Valtys&&... _Vals) { // try to insert value_type(_Vals...)\r\n        using _In_place_key_extractor = typename _Traits::template _In_place_key_extractor<_Valtys...>;\r\n        if constexpr (_Multi) {\r\n            _Check_max_size();\r\n            _List_node_emplace_op2<_Alnode> _Newnode(_List._Getal(), _STD forward<_Valtys>(_Vals)...);\r\n            const auto& _Keyval = _Traits::_Kfn(_Newnode._Ptr->_Myval);\r\n            const auto _Hashval = _Traitsobj(_Keyval);\r\n            if (_Check_rehash_required_1()) {\r\n                _Rehash_for_1();\r\n            }\r\n\r\n            const auto _Target = _Find_hint(_Hint._Ptr, _Keyval, _Hashval);\r\n            return _List._Make_iter(_Insert_new_node_before(_Hashval, _Target._Insert_before, _Newnode._Release()));\r\n        } else if constexpr (_In_place_key_extractor::_Extractable) {\r\n            const auto& _Keyval = _In_place_key_extractor::_Extract(_Vals...);\r\n            const auto _Hashval = _Traitsobj(_Keyval);\r\n            auto _Target        = _Find_hint(_Hint._Ptr, _Keyval, _Hashval);\r\n            if (_Target._Duplicate) {\r\n                return _List._Make_iter(_Target._Duplicate);\r\n            }\r\n\r\n            _Check_max_size();\r\n            // invalidates _Keyval:\r\n            _List_node_emplace_op2<_Alnode> _Newnode(_List._Getal(), _STD forward<_Valtys>(_Vals)...);\r\n            if (_Check_rehash_required_1()) {\r\n                _Rehash_for_1();\r\n                _Target = _Find_hint(_Hint._Ptr, _Traits::_Kfn(_Newnode._Ptr->_Myval), _Hashval);\r\n            }\r\n\r\n            return _List._Make_iter(_Insert_new_node_before(_Hashval, _Target._Insert_before, _Newnode._Release()));\r\n        } else {\r\n            _List_node_emplace_op2<_Alnode> _Newnode(_List._Getal(), _STD forward<_Valtys>(_Vals)...);\r\n            const auto& _Keyval = _Traits::_Kfn(_Newnode._Ptr->_Myval);\r\n            const auto _Hashval = _Traitsobj(_Keyval);\r\n            auto _Target        = _Find_hint(_Hint._Ptr, _Keyval, _Hashval);\r\n            if (_Target._Duplicate) {\r\n                return _List._Make_iter(_Target._Duplicate);\r\n            }\r\n\r\n            _Check_max_size();\r\n            if (_Check_rehash_required_1()) {\r\n                _Rehash_for_1();\r\n                _Target = _Find_hint(_Hint._Ptr, _Traits::_Kfn(_Newnode._Ptr->_Myval), _Hashval);\r\n            }\r\n\r\n            return _List._Make_iter(_Insert_new_node_before(_Hashval, _Target._Insert_before, _Newnode._Release()));\r\n        }\r\n    }\r\n\r\nprotected:\r\n    template <class _Keyty, class... _Mappedty>\r\n    pair<_Nodeptr, bool> _Try_emplace(_Keyty&& _Keyval_arg, _Mappedty&&... _Mapval) {\r\n        const auto& _Keyval = _Keyval_arg;\r\n        const auto _Hashval = _Traitsobj(_Keyval);\r\n        auto _Target        = _Find_last(_Keyval, _Hashval);\r\n        if (_Target._Duplicate) {\r\n            return {_Target._Duplicate, false};\r\n        }\r\n\r\n        _Check_max_size();\r\n        _List_node_emplace_op2<_Alnode> _Newnode(_List._Getal(), piecewise_construct,\r\n            _STD forward_as_tuple(_STD forward<_Keyty>(_Keyval_arg)),\r\n            _STD forward_as_tuple(_STD forward<_Mappedty>(_Mapval)...));\r\n        if (_Check_rehash_required_1()) {\r\n            _Rehash_for_1();\r\n            _Target = _Find_last(_Traits::_Kfn(_Newnode._Ptr->_Myval), _Hashval);\r\n        }\r\n\r\n        return {_Insert_new_node_before(_Hashval, _Target._Insert_before, _Newnode._Release()), true};\r\n    }\r\n\r\n    template <class _Keyty, class... _Mappedty>\r\n    _Nodeptr _Try_emplace_hint(const _Nodeptr _Hint, _Keyty&& _Keyval_arg, _Mappedty&&... _Mapval) {\r\n        const auto& _Keyval = _Keyval_arg;\r\n        const auto _Hashval = _Traitsobj(_Keyval);\r\n        auto _Target        = _Find_hint(_Hint, _Keyval, _Hashval);\r\n        if (_Target._Duplicate) {\r\n            return _Target._Duplicate;\r\n        }\r\n\r\n        _Check_max_size();\r\n        // might invalidate _Keyval:\r\n        _List_node_emplace_op2<_Alnode> _Newnode(_List._Getal(), piecewise_construct,\r\n            _STD forward_as_tuple(_STD forward<_Keyty>(_Keyval_arg)),\r\n            _STD forward_as_tuple(_STD forward<_Mappedty>(_Mapval)...));\r\n        if (_Check_rehash_required_1()) {\r\n            _Rehash_for_1();\r\n            _Target = _Find_hint(_Hint, _Traits::_Kfn(_Newnode._Ptr->_Myval), _Hashval);\r\n        }\r\n\r\n        return _Insert_new_node_before(_Hashval, _Target._Insert_before, _Newnode._Release());\r\n    }\r\n\r\nprivate:\r\n    void _Pocca_both(const _Hash& _Right) {\r\n        _Pocca(_List._Getal(), _Right._List._Getal());\r\n        _Pocca(_Vec._Mypair._Get_first(), _Right._Vec._Mypair._Get_first());\r\n    }\r\n\r\npublic:\r\n    _Hash& operator=(const _Hash& _Right) {\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n        _Check_container_invariants_guard _Check_self{*this};\r\n        _Check_container_invariants_guard _Check_right{_Right};\r\n#endif // _ENABLE_STL_INTERNAL_CHECK\r\n\r\n        if constexpr (_Choose_pocca_v<_Alnode>) {\r\n            auto& _Al             = _Getal();\r\n            const auto& _Right_al = _Right._Getal();\r\n            if (_Al != _Right_al) {\r\n                auto _Alproxy       = _STD _Get_proxy_allocator(_Al);\r\n                auto _Right_alproxy = _STD _Get_proxy_allocator(_Right_al);\r\n                _Container_proxy_ptr<_Alnode> _Vec_proxy(_Right_alproxy, _Leave_proxy_unbound{});\r\n                _List._Reload_sentinel_and_proxy(_Right._List);\r\n                _Vec._Tidy();\r\n                _Pocca_both(_Right);\r\n                _Vec_proxy._Bind(_Alproxy, _STD addressof(_Vec._Mypair._Myval2));\r\n\r\n                _Clear_guard<_Hash> _Guard{this};\r\n                _Traitsobj = _Right._Traitsobj;\r\n                _List.template _Assign_cast<_Mutable_value_type&>(\r\n                    _Right._List._Unchecked_begin(), _Right._List._Unchecked_end());\r\n                _Reinsert_with_invalid_vec();\r\n                _Guard._Target = nullptr;\r\n\r\n                return *this;\r\n            }\r\n        }\r\n\r\n        _Clear_guard<_Hash> _Guard{this};\r\n        _Traitsobj = _Right._Traitsobj;\r\n        _Pocca_both(_Right);\r\n        _List.template _Assign_cast<_Mutable_value_type&>(\r\n            _Right._List._Unchecked_begin(), _Right._List._Unchecked_end());\r\n        _Reinsert_with_invalid_vec();\r\n        _Guard._Target = nullptr;\r\n\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD iterator begin() noexcept {\r\n        return _List.begin();\r\n    }\r\n\r\n    _NODISCARD const_iterator begin() const noexcept {\r\n        return _List.begin();\r\n    }\r\n\r\n    _NODISCARD iterator end() noexcept {\r\n        return _List.end();\r\n    }\r\n\r\n    _NODISCARD const_iterator end() const noexcept {\r\n        return _List.end();\r\n    }\r\n\r\n    _Unchecked_iterator _Unchecked_begin() noexcept {\r\n        return _List._Unchecked_begin();\r\n    }\r\n\r\n    _Unchecked_const_iterator _Unchecked_begin() const noexcept {\r\n        return _List._Unchecked_begin();\r\n    }\r\n\r\n    _Unchecked_iterator _Unchecked_end() noexcept {\r\n        return _List._Unchecked_end();\r\n    }\r\n\r\n    _Unchecked_const_iterator _Unchecked_end() const noexcept {\r\n        return _List._Unchecked_end();\r\n    }\r\n\r\n    _NODISCARD const_iterator cbegin() const noexcept {\r\n        return begin();\r\n    }\r\n\r\n    _NODISCARD const_iterator cend() const noexcept {\r\n        return end();\r\n    }\r\n\r\n    _NODISCARD size_type size() const noexcept {\r\n        return _List.size();\r\n    }\r\n\r\n    _NODISCARD size_type max_size() const noexcept {\r\n        return _List.max_size();\r\n    }\r\n\r\n    _NODISCARD_EMPTY_MEMBER bool empty() const noexcept {\r\n        return _List.empty();\r\n    }\r\n\r\n    _NODISCARD allocator_type get_allocator() const noexcept {\r\n        return static_cast<allocator_type>(_List.get_allocator());\r\n    }\r\n\r\n    using local_iterator       = iterator;\r\n    using const_local_iterator = const_iterator;\r\n\r\n    _NODISCARD size_type bucket_count() const noexcept {\r\n        return _Maxidx;\r\n    }\r\n\r\n    _NODISCARD size_type max_bucket_count() const noexcept {\r\n        return _Vec.max_size() >> 1;\r\n    }\r\n\r\n    _NODISCARD size_type bucket(const key_type& _Keyval) const\r\n        noexcept(_Nothrow_hash<_Traits, key_type>) /* strengthened */ {\r\n        return _Traitsobj(_Keyval) & _Mask;\r\n    }\r\n\r\n    _NODISCARD size_type bucket_size(size_type _Bucket) const noexcept /* strengthened */ {\r\n        _Unchecked_iterator _Bucket_lo = _Vec._Mypair._Myval2._Myfirst[_Bucket << 1];\r\n        if (_Bucket_lo == _Unchecked_end()) {\r\n            return 0;\r\n        }\r\n\r\n        return static_cast<size_type>(_STD distance(_Bucket_lo, _Vec._Mypair._Myval2._Myfirst[(_Bucket << 1) + 1])) + 1;\r\n    }\r\n\r\n    _NODISCARD local_iterator begin(size_type _Bucket) noexcept /* strengthened */ {\r\n        return _List._Make_iter(_Vec._Mypair._Myval2._Myfirst[_Bucket << 1]._Ptr);\r\n    }\r\n\r\n    _NODISCARD const_local_iterator begin(size_type _Bucket) const noexcept /* strengthened */ {\r\n        return _List._Make_const_iter(_Vec._Mypair._Myval2._Myfirst[_Bucket << 1]._Ptr);\r\n    }\r\n\r\n    _NODISCARD local_iterator end(size_type _Bucket) noexcept /* strengthened */ {\r\n        _Nodeptr _Bucket_hi = _Vec._Mypair._Myval2._Myfirst[(_Bucket << 1) + 1]._Ptr;\r\n        if (_Bucket_hi != _List._Mypair._Myval2._Myhead) {\r\n            _Bucket_hi = _Bucket_hi->_Next;\r\n        }\r\n\r\n        return _List._Make_iter(_Bucket_hi);\r\n    }\r\n\r\n    _NODISCARD const_local_iterator end(size_type _Bucket) const noexcept /* strengthened */ {\r\n        _Nodeptr _Bucket_hi = _Vec._Mypair._Myval2._Myfirst[(_Bucket << 1) + 1]._Ptr;\r\n        if (_Bucket_hi != _List._Mypair._Myval2._Myhead) {\r\n            _Bucket_hi = _Bucket_hi->_Next;\r\n        }\r\n\r\n        return _List._Make_const_iter(_Bucket_hi);\r\n    }\r\n\r\n    _NODISCARD const_local_iterator cbegin(size_type _Bucket) const noexcept /* strengthened */ {\r\n        return _List._Make_const_iter(_Vec._Mypair._Myval2._Myfirst[_Bucket << 1]._Ptr);\r\n    }\r\n\r\n    _NODISCARD const_local_iterator cend(size_type _Bucket) const noexcept /* strengthened */ {\r\n        _Nodeptr _Bucket_hi = _Vec._Mypair._Myval2._Myfirst[(_Bucket << 1) + 1]._Ptr;\r\n        if (_Bucket_hi != _List._Mypair._Myval2._Myhead) {\r\n            _Bucket_hi = _Bucket_hi->_Next;\r\n        }\r\n\r\n        return _List._Make_const_iter(_Bucket_hi);\r\n    }\r\n\r\n    _NODISCARD float load_factor() const noexcept {\r\n        return static_cast<float>(size()) / static_cast<float>(bucket_count());\r\n    }\r\n\r\n    _NODISCARD float max_load_factor() const noexcept {\r\n        return _Max_bucket_size();\r\n    }\r\n\r\n    void max_load_factor(float _Newmax) noexcept /* strengthened */ {\r\n        _STL_ASSERT(!(_CSTD isnan) (_Newmax) && _Newmax > 0, \"invalid hash load factor\");\r\n        _Max_bucket_size() = _Newmax;\r\n    }\r\n\r\n    void rehash(size_type _Buckets) { // rebuild table with at least _Buckets buckets\r\n        // don't violate a.bucket_count() >= a.size() / a.max_load_factor() invariant:\r\n        _Buckets = (_STD max) (_Min_load_factor_buckets(_List.size()), _Buckets);\r\n        if (_Buckets <= _Maxidx) { // we already have enough buckets; nothing to do\r\n            return;\r\n        }\r\n\r\n        _Forced_rehash(_Buckets);\r\n    }\r\n\r\n    void reserve(size_type _Maxcount) { // rebuild table with room for _Maxcount elements\r\n        rehash(_Min_load_factor_buckets(_Maxcount));\r\n    }\r\n\r\n    conditional_t<_Multi, iterator, pair<iterator, bool>> insert(const value_type& _Val) {\r\n        return emplace(_Val);\r\n    }\r\n\r\n    conditional_t<_Multi, iterator, pair<iterator, bool>> insert(value_type&& _Val) {\r\n        return emplace(_STD move(_Val));\r\n    }\r\n\r\n    iterator insert(const_iterator _Hint, const value_type& _Val) {\r\n        return emplace_hint(_Hint, _Val);\r\n    }\r\n\r\n    iterator insert(const_iterator _Hint, value_type&& _Val) {\r\n        return emplace_hint(_Hint, _STD move(_Val));\r\n    }\r\n\r\nprotected:\r\n    template <class _Iter, class _Sent>\r\n    void _Insert_range_unchecked(_Iter _First, const _Sent _Last) {\r\n        for (; _First != _Last; ++_First) {\r\n            emplace(*_First);\r\n        }\r\n    }\r\n\r\npublic:\r\n    template <class _Iter>\r\n    void insert(_Iter _First, _Iter _Last) {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        _Insert_range_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    void insert_range(_Rng&& _Range) {\r\n        _Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    void insert(initializer_list<value_type> _Ilist) {\r\n        _Insert_range_unchecked(_Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\nprivate:\r\n    _Nodeptr _Unchecked_erase(_Nodeptr _Plist) noexcept(_Nothrow_hash<_Traits, key_type>) {\r\n        size_type _Bucket = bucket(_Traits::_Kfn(_Plist->_Myval));\r\n        _Erase_bucket(_Plist, _Bucket);\r\n        return _List._Unchecked_erase(_Plist);\r\n    }\r\n\r\n    struct _Range_eraser {\r\n        _Range_eraser(const _Range_eraser&)            = delete;\r\n        _Range_eraser& operator=(const _Range_eraser&) = delete;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        // Keep the list nodes around until we have found all those we will erase, for an O(iterators + erasures) update\r\n        // of the iterator chain.\r\n        _Range_eraser(_Mylist& _List_, const _Nodeptr _First_) noexcept\r\n            : _List(_List_), _First(_First_), _Next(_First_) {}\r\n\r\n        void _Bump_erased() noexcept {\r\n            _Next = _Next->_Next;\r\n        }\r\n\r\n        ~_Range_eraser() noexcept {\r\n            _List._Unchecked_erase(_First, _Next);\r\n        }\r\n\r\n        _Mylist& _List;\r\n        const _Nodeptr _First;\r\n        _Nodeptr _Next;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 2 / _ITERATOR_DEBUG_LEVEL != 2 vvv\r\n      // Destroy the nodes as we encounter them to avoid a second traversal of the linked list.\r\n        _Range_eraser(_Mylist& _List_, const _Nodeptr _First_) noexcept\r\n            : _List(_List_), _Predecessor(_First_->_Prev), _Next(_First_) {}\r\n\r\n        void _Bump_erased() noexcept {\r\n            const auto _Oldnext = _Next;\r\n            _Next               = _Oldnext->_Next;\r\n            _Node::_Freenode(_List._Getal(), _Oldnext);\r\n            --_List._Mypair._Myval2._Mysize;\r\n        }\r\n\r\n        ~_Range_eraser() noexcept {\r\n            _Predecessor->_Next = _Next;\r\n            _Next->_Prev        = _Predecessor;\r\n        }\r\n\r\n        _Mylist& _List;\r\n        const _Nodeptr _Predecessor;\r\n        _Nodeptr _Next;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 2 ^^^\r\n    };\r\n\r\n    _Nodeptr _Unchecked_erase(_Nodeptr _First, const _Nodeptr _Last) noexcept(_Nothrow_hash<_Traits, key_type>) {\r\n        if (_First == _Last) {\r\n            return _Last;\r\n        }\r\n\r\n        const auto _End           = _List._Mypair._Myval2._Myhead;\r\n        const auto _Bucket_bounds = _Vec._Mypair._Myval2._Myfirst;\r\n        _Range_eraser _Eraser{_List, _First};\r\n        {\r\n            // process the first bucket, which is special because here _First might not be the beginning of the bucket\r\n            const auto _Predecessor = _First->_Prev;\r\n            const size_type _Bucket = bucket(_Traits::_Kfn(_Eraser._Next->_Myval)); // throws\r\n            // nothrow hereafter this block\r\n            _Nodeptr& _Bucket_lo   = _Bucket_bounds[_Bucket << 1]._Ptr;\r\n            _Nodeptr& _Bucket_hi   = _Bucket_bounds[(_Bucket << 1) + 1]._Ptr;\r\n            const bool _Update_lo  = _Bucket_lo == _Eraser._Next;\r\n            const _Nodeptr _Old_hi = _Bucket_hi;\r\n            for (;;) { // remove elements until we hit the end of the bucket\r\n                const bool _At_bucket_back = _Eraser._Next == _Old_hi;\r\n                _Eraser._Bump_erased();\r\n                if (_At_bucket_back) {\r\n                    break;\r\n                }\r\n\r\n                if (_Eraser._Next == _Last) {\r\n                    if (_Update_lo) {\r\n                        // erased the bucket's prefix\r\n                        _Bucket_lo = _Eraser._Next;\r\n                    }\r\n\r\n                    return _Last;\r\n                }\r\n            }\r\n\r\n            if (_Update_lo) {\r\n                // emptied the bucket\r\n                _Bucket_lo = _End;\r\n                _Bucket_hi = _End;\r\n            } else {\r\n                _Bucket_hi = _Predecessor;\r\n            }\r\n        }\r\n\r\n        // hereafter we are always erasing buckets' prefixes\r\n        while (_Eraser._Next != _Last) {\r\n            const size_type _Bucket = bucket(_Traits::_Kfn(_Eraser._Next->_Myval)); // throws\r\n            // nothrow hereafter this block\r\n            _Nodeptr& _Bucket_lo   = _Bucket_bounds[_Bucket << 1]._Ptr;\r\n            _Nodeptr& _Bucket_hi   = _Bucket_bounds[(_Bucket << 1) + 1]._Ptr;\r\n            const _Nodeptr _Old_hi = _Bucket_hi;\r\n            for (;;) { // remove elements until we hit the end of the bucket\r\n                const bool _At_bucket_back = _Eraser._Next == _Old_hi;\r\n                _Eraser._Bump_erased();\r\n                if (_At_bucket_back) {\r\n                    break;\r\n                }\r\n\r\n                if (_Eraser._Next == _Last) {\r\n                    // erased the bucket's prefix\r\n                    _Bucket_lo = _Eraser._Next;\r\n                    return _Last;\r\n                }\r\n            }\r\n\r\n            // emptied the bucket\r\n            _Bucket_lo = _End;\r\n            _Bucket_hi = _End;\r\n        }\r\n\r\n        return _Last;\r\n    }\r\n\r\n    template <class _Kx>\r\n    static constexpr bool _Noexcept_heterogeneous_erasure() {\r\n        return _Nothrow_hash<_Traits, _Kx>\r\n            && (!_Multi || (_Nothrow_compare<_Traits, key_type, _Kx> && _Nothrow_compare<_Traits, _Kx, key_type>) );\r\n    }\r\n\r\n    template <class _Keytype>\r\n    size_type _Erase(const _Keytype& _Keyval) noexcept(_Noexcept_heterogeneous_erasure<_Keytype>()) /* strengthened */ {\r\n        const size_t _Hashval = _Traitsobj(_Keyval);\r\n        if constexpr (_Multi) {\r\n            const auto _Where = _Equal_range(_Keyval, _Hashval);\r\n            _Unchecked_erase(_Where._First._Ptr, _Where._Last._Ptr);\r\n            return _Where._Distance;\r\n        } else {\r\n            const auto _Target = _Find_last(_Keyval, _Hashval)._Duplicate;\r\n            if (_Target) {\r\n                _Erase_bucket(_Target, _Hashval & _Mask);\r\n                _List._Unchecked_erase(_Target);\r\n                return 1;\r\n            }\r\n\r\n            return 0;\r\n        }\r\n    }\r\n\r\npublic:\r\n    template <class _Iter = iterator, enable_if_t<!is_same_v<_Iter, const_iterator>, int> = 0>\r\n    iterator erase(iterator _Plist) noexcept(_Nothrow_hash<_Traits, key_type>) /* strengthened */ {\r\n        return _List._Make_iter(_Unchecked_erase(_Plist._Ptr));\r\n    }\r\n\r\n    iterator erase(const_iterator _Plist) noexcept(_Nothrow_hash<_Traits, key_type>) /* strengthened */ {\r\n        return _List._Make_iter(_Unchecked_erase(_Plist._Ptr));\r\n    }\r\n\r\n    iterator erase(const_iterator _First, const_iterator _Last)\r\n        noexcept(_Nothrow_hash<_Traits, key_type>) /* strengthened */ {\r\n        return _List._Make_iter(_Unchecked_erase(_First._Ptr, _Last._Ptr));\r\n    }\r\n\r\n    size_type erase(const key_type& _Keyval) noexcept(noexcept(_Erase(_Keyval))) /* strengthened */ {\r\n        return _Erase(_Keyval);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _Kx>\r\n        requires (_Traits::template _Supports_transparency<_Hash, _Kx>)\r\n    size_type erase(_Kx&& _Keyval) noexcept(noexcept(_Erase(_Keyval))) /* strengthened */ {\r\n        return _Erase(_Keyval);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    void clear() noexcept {\r\n        // TRANSITION, ABI:\r\n        // LWG-2550 requires implementations to make clear() O(size()), independent of bucket_count().\r\n        // Unfortunately our current data structure / ABI does not allow achieving this in the general case because:\r\n        //   (1) Finding the bucket that goes with an element requires running the hash function\r\n        //   (2) The hash function operator() may throw exceptions, and\r\n        //   (3) clear() is a noexcept function.\r\n        // We do comply with LWG-2550 if the hash function is noexcept, or if the container was empty.\r\n        const auto _Oldsize = _List._Mypair._Myval2._Mysize;\r\n        if (_Oldsize == 0) {\r\n            return;\r\n        }\r\n\r\n        if constexpr (_Nothrow_hash<_Traits, key_type>) {\r\n            // In testing, hash<size_t>{}(size_t{}) takes about 14 times as much time as assigning a pointer, or\r\n            // ~7-8 times as much as clearing a bucket. Therefore, if we would need to assign over more than 8 times\r\n            // as many buckets as elements, remove element-by-element.\r\n            if (bucket_count() / 8 > _Oldsize) {\r\n                const auto _Head = _List._Mypair._Myval2._Myhead;\r\n                _Unchecked_erase(_Head->_Next, _Head);\r\n                return;\r\n            }\r\n        }\r\n\r\n        // Bulk destroy items and reset buckets\r\n        _List.clear();\r\n        _STD fill(_Vec._Mypair._Myval2._Myfirst, _Vec._Mypair._Myval2._Mylast, _Unchecked_end());\r\n    }\r\n\r\nprivate:\r\n    template <class _Keyty>\r\n    _NODISCARD _Nodeptr _Find_first(const _Keyty& _Keyval, const size_t _Hashval) const {\r\n        // find node pointer to first node matching _Keyval (with hash _Hashval) if it exists; otherwise, end\r\n        const size_type _Bucket = _Hashval & _Mask;\r\n        _Nodeptr _Where         = _Vec._Mypair._Myval2._Myfirst[_Bucket << 1]._Ptr;\r\n        const _Nodeptr _End     = _List._Mypair._Myval2._Myhead;\r\n        if (_Where == _End) {\r\n            return _End;\r\n        }\r\n\r\n        const _Nodeptr _Bucket_hi = _Vec._Mypair._Myval2._Myfirst[(_Bucket << 1) + 1]._Ptr;\r\n        for (;;) {\r\n            if (!_Traitsobj(_Traits::_Kfn(_Where->_Myval), _Keyval)) {\r\n                return _Where;\r\n            }\r\n\r\n            if (_Where == _Bucket_hi) {\r\n                return _End;\r\n            }\r\n\r\n            _Where = _Where->_Next;\r\n        }\r\n    }\r\n\r\n    template <class _Keyty>\r\n    _Nodeptr _Find(const _Keyty& _Keyval, const size_t _Hashval) const {\r\n        if constexpr (_Traits::_Multi) {\r\n            return _Find_first(_Keyval, _Hashval);\r\n        } else {\r\n            // use _Find_last for unique containers to avoid increase in code size of instantiating _Find_first\r\n            auto _Target = _Find_last(_Keyval, _Hashval)._Duplicate;\r\n            if (_Target) {\r\n                return _Target;\r\n            }\r\n\r\n            return _List._Mypair._Myval2._Myhead;\r\n        }\r\n    }\r\n\r\npublic:\r\n    _NODISCARD iterator find(const key_type& _Keyval) {\r\n        return _List._Make_iter(_Find(_Keyval, _Traitsobj(_Keyval)));\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    template <class _KeyTy>\r\n        requires _Traits::_Has_transparent_overloads\r\n    _NODISCARD iterator find(const _KeyTy& _Keyval) {\r\n        return _List._Make_iter(_Find(_Keyval, _Traitsobj(_Keyval)));\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    _NODISCARD const_iterator find(const key_type& _Keyval) const {\r\n        return _List._Make_const_iter(_Find(_Keyval, _Traitsobj(_Keyval)));\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    template <class _KeyTy>\r\n        requires _Traits::_Has_transparent_overloads\r\n    _NODISCARD const_iterator find(const _KeyTy& _Keyval) const {\r\n        return _List._Make_const_iter(_Find(_Keyval, _Traitsobj(_Keyval)));\r\n    }\r\n\r\n    _NODISCARD bool contains(const key_type& _Keyval) const {\r\n        return static_cast<bool>(_Find_last(_Keyval, _Traitsobj(_Keyval))._Duplicate);\r\n    }\r\n\r\n    template <class _KeyTy>\r\n        requires _Traits::_Has_transparent_overloads\r\n    _NODISCARD bool contains(const _KeyTy& _Keyval) const {\r\n        return static_cast<bool>(_Find_last(_Keyval, _Traitsobj(_Keyval))._Duplicate);\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    _NODISCARD size_type count(const key_type& _Keyval) const {\r\n        const size_t _Hashval = _Traitsobj(_Keyval);\r\n        if constexpr (_Multi) {\r\n            return _Equal_range(_Keyval, _Hashval)._Distance;\r\n        } else {\r\n            return static_cast<bool>(_Find_last(_Keyval, _Hashval)._Duplicate);\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    template <class _KeyTy>\r\n        requires _Traits::_Has_transparent_overloads\r\n    _NODISCARD size_type count(const _KeyTy& _Keyval) const {\r\n        const size_t _Hashval = _Traitsobj(_Keyval);\r\n        if constexpr (_Multi) {\r\n            return _Equal_range(_Keyval, _Hashval)._Distance;\r\n        } else {\r\n            return static_cast<bool>(_Find_last(_Keyval, _Hashval)._Duplicate);\r\n        }\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\nprivate:\r\n    struct _Equal_range_result {\r\n        _Unchecked_const_iterator _First;\r\n        _Unchecked_const_iterator _Last;\r\n        size_type _Distance;\r\n    };\r\n\r\n    template <class _Keyty>\r\n    _NODISCARD _Equal_range_result _Equal_range(const _Keyty& _Keyval, const size_t _Hashval) const\r\n        noexcept(_Nothrow_compare<_Traits, key_type, _Keyty> && _Nothrow_compare<_Traits, _Keyty, key_type>) {\r\n        const size_type _Bucket              = _Hashval & _Mask;\r\n        _Unchecked_const_iterator _Where     = _Vec._Mypair._Myval2._Myfirst[_Bucket << 1];\r\n        const _Unchecked_const_iterator _End = _Unchecked_end();\r\n        if (_Where == _End) {\r\n            return {_End, _End, 0};\r\n        }\r\n\r\n        const _Unchecked_const_iterator _Bucket_hi = _Vec._Mypair._Myval2._Myfirst[(_Bucket << 1) + 1];\r\n        for (; _Traitsobj(_Traits::_Kfn(*_Where), _Keyval); ++_Where) {\r\n            if (_Where == _Bucket_hi) {\r\n                return {_End, _End, 0};\r\n            }\r\n        }\r\n\r\n        const _Unchecked_const_iterator _First = _Where;\r\n        if constexpr (_Multi) {\r\n            size_type _Distance = 0;\r\n            for (;;) {\r\n                ++_Distance;\r\n\r\n                const bool _At_bucket_end = _Where == _Bucket_hi;\r\n                ++_Where;\r\n                if (_At_bucket_end) {\r\n                    break;\r\n                }\r\n\r\n                if (_Traitsobj(_Keyval, _Traits::_Kfn(*_Where))) {\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return {_First, _Where, _Distance};\r\n        } else {\r\n            ++_Where; // found the unique element\r\n            return {_First, _Where, 1};\r\n        }\r\n    }\r\n\r\npublic:\r\n    _NODISCARD pair<iterator, iterator> equal_range(const key_type& _Keyval) {\r\n        const auto _Result = _Equal_range(_Keyval, _Traitsobj(_Keyval));\r\n        return {_List._Make_iter(_Result._First._Ptr), _List._Make_iter(_Result._Last._Ptr)};\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    template <class _KeyTy>\r\n        requires _Traits::_Has_transparent_overloads\r\n    _NODISCARD pair<iterator, iterator> equal_range(const _KeyTy& _Keyval) {\r\n        const auto _Result = _Equal_range(_Keyval, _Traitsobj(_Keyval));\r\n        return {_List._Make_iter(_Result._First._Ptr), _List._Make_iter(_Result._Last._Ptr)};\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    _NODISCARD pair<const_iterator, const_iterator> equal_range(const key_type& _Keyval) const {\r\n        const auto _Result = _Equal_range(_Keyval, _Traitsobj(_Keyval));\r\n        return {_List._Make_const_iter(_Result._First._Ptr), _List._Make_const_iter(_Result._Last._Ptr)};\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    template <class _KeyTy>\r\n        requires _Traits::_Has_transparent_overloads\r\n    _NODISCARD pair<const_iterator, const_iterator> equal_range(const _KeyTy& _Keyval) const {\r\n        const auto _Result = _Equal_range(_Keyval, _Traitsobj(_Keyval));\r\n        return {_List._Make_const_iter(_Result._First._Ptr), _List._Make_const_iter(_Result._Last._Ptr)};\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    void swap(_Hash& _Right) noexcept(noexcept(_Traitsobj.swap(_Right._Traitsobj))) /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Traitsobj.swap(_Right._Traitsobj);\r\n            _Pocs(_List._Getal(), _Right._List._Getal());\r\n            _Pocs(_Vec._Mypair._Get_first(), _Right._Vec._Mypair._Get_first());\r\n            _Swap_val(_Right);\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    using node_type = typename _Traits::node_type;\r\n\r\n    node_type extract(const const_iterator _Where) {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        const auto _List_data = _STD addressof(_List._Mypair._Myval2);\r\n        _STL_VERIFY(_Where._Getcont() == _List_data, \"extract mismatched container\");\r\n        _STL_VERIFY(_Where._Ptr != _List_data->_Myhead, \"cannot extract end()\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        return node_type::_Make(_Extract(_Where._Unwrapped()), _List._Getal());\r\n    }\r\n\r\n    node_type extract(const key_type& _Keyval) {\r\n        const auto _Ptr = _Extract(_Keyval);\r\n        if (!_Ptr) {\r\n            return node_type{};\r\n        }\r\n\r\n        return node_type::_Make(_Ptr, _List._Getal());\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _Kx>\r\n        requires (_Traits::template _Supports_transparency<_Hash, _Kx>)\r\n    node_type extract(_Kx&& _Keyval) {\r\n        const auto _Ptr = _Extract(_Keyval);\r\n        if (!_Ptr) {\r\n            return node_type{};\r\n        }\r\n\r\n        return node_type::_Make(_Ptr, _List._Getal());\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    iterator insert(const_iterator _Hint, node_type&& _Handle) {\r\n        if (_Handle.empty()) {\r\n            return end();\r\n        }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_List.get_allocator() == _Handle._Getal(), \"node handle allocator incompatible for insert\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        const auto& _Keyval   = _Traits::_Kfn(_Handle._Getptr()->_Myval);\r\n        const size_t _Hashval = _Traitsobj(_Keyval);\r\n        auto _Target          = _Find_hint(_Hint._Ptr, _Keyval, _Hashval);\r\n        if constexpr (!_Traits::_Multi) {\r\n            if (_Target._Duplicate) {\r\n                return _List._Make_iter(_Target._Duplicate);\r\n            }\r\n        }\r\n\r\n        _Check_max_size();\r\n        if (_Check_rehash_required_1()) {\r\n            _Rehash_for_1();\r\n            _Target = _Find_hint(_Hint._Ptr, _Keyval, _Hashval);\r\n        }\r\n\r\n        const auto _Released = _Handle._Release();\r\n        _Destroy_in_place(_Released->_Next); // TRANSITION, ABI\r\n        _Destroy_in_place(_Released->_Prev);\r\n        return _List._Make_iter(_Insert_new_node_before(_Hashval, _Target._Insert_before, _Released));\r\n    }\r\n\r\n    template <class>\r\n    friend class _Hash;\r\n\r\n    template <class _Other_traits>\r\n    void merge(_Hash<_Other_traits>& _That) { // transfer all nodes from _That into *this\r\n        static_assert(is_same_v<_Nodeptr, typename _Hash<_Other_traits>::_Nodeptr>,\r\n            \"merge() requires an argument with a compatible node type.\");\r\n\r\n        static_assert(is_same_v<allocator_type, typename _Hash<_Other_traits>::allocator_type>,\r\n            \"merge() requires an argument with the same allocator type.\");\r\n\r\n        if constexpr (is_same_v<_Hash, _Hash<_Other_traits>>) {\r\n            if (this == _STD addressof(_That)) {\r\n                return;\r\n            }\r\n        }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        if constexpr (!_Alnode_traits::is_always_equal::value) {\r\n            _STL_VERIFY(_List._Getal() == _That._List._Getal(), \"allocator incompatible for merge\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        auto _First      = _That._Unchecked_begin();\r\n        const auto _Last = _That._Unchecked_end();\r\n        while (_First != _Last) {\r\n            const auto _Candidate = _First._Ptr;\r\n            ++_First;\r\n            const auto& _Keyval   = _Traits::_Kfn(_Candidate->_Myval);\r\n            const size_t _Hashval = _Traitsobj(_Keyval);\r\n            auto _Target          = _Find_last(_Keyval, _Hashval);\r\n            if constexpr (!_Traits::_Multi) {\r\n                if (_Target._Duplicate) {\r\n                    continue;\r\n                }\r\n            }\r\n\r\n            _Check_max_size();\r\n            if (_Check_rehash_required_1()) {\r\n                _Rehash_for_1();\r\n                _Target = _Find_last(_Keyval, _Hashval);\r\n            }\r\n\r\n            // nothrow hereafter this iteration\r\n            const auto _Source_bucket = _Hashval & _That._Mask;\r\n            _That._Erase_bucket(_Candidate, _Source_bucket);\r\n            _Candidate->_Prev->_Next = _Candidate->_Next;\r\n            _Candidate->_Next->_Prev = _Candidate->_Prev;\r\n            --_That._List._Mypair._Myval2._Mysize;\r\n            _Destroy_in_place(_Candidate->_Next); // TRANSITION, ABI\r\n            _Destroy_in_place(_Candidate->_Prev);\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n            _List._Mypair._Myval2._Adopt_unique(_That._List._Mypair._Myval2, _Candidate);\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n            (void) _Insert_new_node_before(_Hashval, _Target._Insert_before, _Candidate);\r\n        }\r\n    }\r\n\r\n    template <class _Other_traits>\r\n    void merge(_Hash<_Other_traits>&& _That) { // transfer all nodes from _That into *this\r\n        static_assert(is_same_v<_Nodeptr, typename _Hash<_Other_traits>::_Nodeptr>,\r\n            \"merge() requires an argument with a compatible node type.\");\r\n\r\n        static_assert(is_same_v<allocator_type, typename _Hash<_Other_traits>::allocator_type>,\r\n            \"merge() requires an argument with the same allocator type.\");\r\n\r\n        merge(_That);\r\n    }\r\n\r\nprotected:\r\n    _Nodeptr _Extract(const _Unchecked_const_iterator _Where) {\r\n        const size_type _Bucket = bucket(_Traits::_Kfn(*_Where));\r\n        _Erase_bucket(_Where._Ptr, _Bucket);\r\n        return _List._Mypair._Myval2._Unlinknode(_Where._Ptr);\r\n    }\r\n\r\n    template <class _Kx>\r\n    _Nodeptr _Extract(const _Kx& _Keyval) {\r\n        const size_t _Hashval = _Traitsobj(_Keyval);\r\n        _Nodeptr _Target;\r\n        if constexpr (_Traits::_Multi) {\r\n            _Target = _Find_first(_Keyval, _Hashval);\r\n            if (_Target == _List._Mypair._Myval2._Myhead) {\r\n                return _Nodeptr{};\r\n            }\r\n        } else {\r\n            _Target = _Find_last(_Keyval, _Hashval)._Duplicate;\r\n            if (_Target == nullptr) {\r\n                return _Nodeptr{};\r\n            }\r\n        }\r\n\r\n        _Erase_bucket(_Target, _Hashval & _Mask);\r\n        return _List._Mypair._Myval2._Unlinknode(_Target);\r\n    }\r\n\r\npublic:\r\n    conditional_t<_Traits::_Multi, iterator, _Insert_return_type<iterator, node_type>> insert(node_type&& _Handle) {\r\n        // insert the node (if any) held in _Handle\r\n        if (_Handle.empty()) {\r\n            if constexpr (_Traits::_Multi) {\r\n                return end();\r\n            } else {\r\n                return {end(), false, _STD move(_Handle)};\r\n            }\r\n        }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_List.get_allocator() == _Handle._Getal(), \"node handle allocator incompatible for insert\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        const auto& _Keyval   = _Traits::_Kfn(_Handle._Getptr()->_Myval);\r\n        const size_t _Hashval = _Traitsobj(_Keyval);\r\n        auto _Target          = _Find_last(_Keyval, _Hashval);\r\n        if constexpr (!_Traits::_Multi) {\r\n            if (_Target._Duplicate) {\r\n                return {_List._Make_iter(_Target._Duplicate), false, _STD move(_Handle)};\r\n            }\r\n        }\r\n\r\n        _Check_max_size();\r\n        if (_Check_rehash_required_1()) {\r\n            _Rehash_for_1();\r\n            _Target = _Find_last(_Keyval, _Hashval);\r\n        }\r\n\r\n        const auto _Released = _Handle._Release();\r\n        _Destroy_in_place(_Released->_Next); // TRANSITION, ABI\r\n        _Destroy_in_place(_Released->_Prev);\r\n        const auto _Newnode = _Insert_new_node_before(_Hashval, _Target._Insert_before, _Released);\r\n        if constexpr (_Traits::_Multi) {\r\n            return _List._Make_iter(_Newnode);\r\n        } else {\r\n            return {_List._Make_iter(_Newnode), true, node_type{}};\r\n        }\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\nprotected:\r\n    template <class _Keyty>\r\n    _NODISCARD _Hash_find_last_result<_Nodeptr> _Find_last(const _Keyty& _Keyval, const size_t _Hashval) const {\r\n        // find the insertion point for _Keyval and whether an element identical to _Keyval is already in the container\r\n        const size_type _Bucket = _Hashval & _Mask;\r\n        _Nodeptr _Where         = _Vec._Mypair._Myval2._Myfirst[(_Bucket << 1) + 1]._Ptr;\r\n        const _Nodeptr _End     = _List._Mypair._Myval2._Myhead;\r\n        if (_Where == _End) {\r\n            return {_End, _Nodeptr{}};\r\n        }\r\n\r\n        const _Nodeptr _Bucket_lo = _Vec._Mypair._Myval2._Myfirst[_Bucket << 1]._Ptr;\r\n        for (;;) {\r\n            // Search backwards for historical reasons\r\n            if (!_Traitsobj(_Keyval, _Traits::_Kfn(_Where->_Myval))) {\r\n                return {_Where->_Next, _Where};\r\n            }\r\n\r\n            if (_Where == _Bucket_lo) {\r\n                return {_Where, _Nodeptr{}};\r\n            }\r\n\r\n            _Where = _Where->_Prev;\r\n        }\r\n    }\r\n\r\n    template <class _Keyty>\r\n    _NODISCARD _Hash_find_last_result<_Nodeptr> _Find_hint(\r\n        const _Nodeptr _Hint, const _Keyty& _Keyval, const size_t _Hashval) const {\r\n        // if _Hint points to an element equivalent to _Keyval, returns _Hint; otherwise,\r\n        // returns _Find_last(_Keyval, _Hashval)\r\n        if (_Hint != _List._Mypair._Myval2._Myhead && !_Traitsobj(_Traits::_Kfn(_Hint->_Myval), _Keyval)) {\r\n            return {_Hint->_Next, _Hint};\r\n        }\r\n\r\n        return _Find_last(_Keyval, _Hashval);\r\n    }\r\n\r\n    _Nodeptr _Insert_new_node_before(\r\n        const size_t _Hashval, const _Nodeptr _Insert_before, const _Nodeptr _Newnode) noexcept {\r\n        const _Nodeptr _Insert_after = _Insert_before->_Prev;\r\n        ++_List._Mypair._Myval2._Mysize;\r\n        _Construct_in_place(_Newnode->_Next, _Insert_before);\r\n        _Construct_in_place(_Newnode->_Prev, _Insert_after);\r\n        _Insert_after->_Next  = _Newnode;\r\n        _Insert_before->_Prev = _Newnode;\r\n\r\n        const auto _Head                = _List._Mypair._Myval2._Myhead;\r\n        const auto _Bucket_array        = _Vec._Mypair._Myval2._Myfirst;\r\n        const size_type _Bucket         = _Hashval & _Mask;\r\n        _Unchecked_iterator& _Bucket_lo = _Bucket_array[_Bucket << 1];\r\n        _Unchecked_iterator& _Bucket_hi = _Bucket_array[(_Bucket << 1) + 1];\r\n        if (_Bucket_lo._Ptr == _Head) {\r\n            // bucket is empty, set both\r\n            _Bucket_lo._Ptr = _Newnode;\r\n            _Bucket_hi._Ptr = _Newnode;\r\n        } else if (_Bucket_lo._Ptr == _Insert_before) {\r\n            // new node is the lowest element in the bucket\r\n            _Bucket_lo._Ptr = _Newnode;\r\n        } else if (_Bucket_hi._Ptr == _Insert_after) {\r\n            // new node is the highest element in the bucket\r\n            _Bucket_hi._Ptr = _Newnode;\r\n        }\r\n\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n        _Stl_internal_check_container_invariants();\r\n#endif // _ENABLE_STL_INTERNAL_CHECK\r\n        return _Newnode;\r\n    }\r\n\r\n    void _Check_max_size() const {\r\n        const size_type _Oldsize = _List._Mypair._Myval2._Mysize;\r\n        if (_Oldsize == _List.max_size()) {\r\n            _Xlength_error(\"unordered_map/set too long\");\r\n        }\r\n    }\r\n\r\n    bool _Check_rehash_required_1() const noexcept {\r\n        const size_type _Oldsize = _List._Mypair._Myval2._Mysize;\r\n        const auto _Newsize      = _Oldsize + 1;\r\n        return max_load_factor() < static_cast<float>(_Newsize) / static_cast<float>(bucket_count());\r\n    }\r\n\r\n    void _Rehash_for_1() {\r\n        const auto _Oldsize = _List._Mypair._Myval2._Mysize;\r\n        const auto _Newsize = _Oldsize + 1;\r\n        _Forced_rehash(_Desired_grow_bucket_count(_Newsize));\r\n    }\r\n\r\n    void _Erase_bucket(_Nodeptr _Plist, size_type _Bucket) noexcept {\r\n        // remove the node _Plist from its bucket\r\n        _Nodeptr& _Bucket_lo = _Vec._Mypair._Myval2._Myfirst[_Bucket << 1]._Ptr;\r\n        _Nodeptr& _Bucket_hi = _Vec._Mypair._Myval2._Myfirst[(_Bucket << 1) + 1]._Ptr;\r\n        if (_Bucket_hi == _Plist) {\r\n            if (_Bucket_lo == _Plist) { // make bucket empty\r\n                const auto _End = _List._Mypair._Myval2._Myhead;\r\n\r\n                _Bucket_lo = _End;\r\n                _Bucket_hi = _End;\r\n            } else {\r\n                _Bucket_hi = _Plist->_Prev; // move end back one element\r\n            }\r\n        } else if (_Bucket_lo == _Plist) {\r\n            _Bucket_lo = _Plist->_Next; // move beginning up one element\r\n        }\r\n    }\r\n\r\n    _NODISCARD size_type _Min_load_factor_buckets(const size_type _For_size) const noexcept {\r\n        // returns the minimum number of buckets necessary for the elements in _List\r\n        return static_cast<size_type>(_CSTD ceilf(static_cast<float>(_For_size) / max_load_factor()));\r\n    }\r\n\r\n    _NODISCARD size_type _Desired_grow_bucket_count(const size_type _For_size) const noexcept {\r\n        const size_type _Old_buckets = bucket_count();\r\n        const size_type _Req_buckets = (_STD max) (_Min_buckets, _Min_load_factor_buckets(_For_size));\r\n        if (_Old_buckets >= _Req_buckets) {\r\n            // we already have enough buckets so there's no need to change the count\r\n            return _Old_buckets;\r\n        }\r\n\r\n        if (_Old_buckets < 512 && _Old_buckets * 8 >= _Req_buckets) {\r\n            // if we are changing the bucket count and have less than 512 buckets, use 8x more buckets\r\n            return _Old_buckets * 8;\r\n        }\r\n\r\n        // power of 2 invariant means this will result in at least 2*_Old_buckets after round up in _Forced_rehash\r\n        return _Req_buckets;\r\n    }\r\n\r\n    void _Reinsert_with_invalid_vec() { // insert elements in [begin(), end()), distrusting existing _Vec elements\r\n        _Forced_rehash(_Desired_grow_bucket_count(_List.size()));\r\n    }\r\n\r\n    void _Forced_rehash(size_type _Buckets) {\r\n        // Force rehash of elements in _List, distrusting existing bucket assignments in _Vec.\r\n        // Assumes _Buckets is greater than _Min_buckets, and that changing to that many buckets doesn't violate\r\n        // load_factor() <= max_load_factor().\r\n\r\n        // Don't violate power of 2, fits in half the bucket vector invariant:\r\n        // (we assume because vector must use single allocations; as a result, its max_size fits in a size_t)\r\n        const unsigned long _Max_storage_buckets_log2 = _Floor_of_log_2(static_cast<size_t>(_Vec.max_size() >> 1));\r\n        const auto _Max_storage_buckets               = static_cast<size_type>(1) << _Max_storage_buckets_log2;\r\n        if (_Buckets > _Max_storage_buckets) {\r\n            _Xlength_error(\"invalid hash bucket count\");\r\n        }\r\n\r\n        // The above test also means that we won't perform a forbidden full shift when restoring the power of\r\n        // 2 invariant\r\n        // this round up to power of 2 in addition to the _Buckets > _Maxidx above means\r\n        // we'll at least double in size (the next power of 2 above _Maxidx)\r\n        _Buckets                       = static_cast<size_type>(1) << _Ceiling_of_log_2(static_cast<size_t>(_Buckets));\r\n        const _Unchecked_iterator _End = _Unchecked_end();\r\n\r\n        _Vec._Assign_grow(_Buckets << 1, _End);\r\n        _Mask   = _Buckets - 1;\r\n        _Maxidx = _Buckets;\r\n\r\n        _Clear_guard<_Hash> _Guard{this};\r\n\r\n        _Unchecked_iterator _Inserted = _Unchecked_begin();\r\n\r\n        // Remember the next _Inserted value as splices will change _Inserted's position arbitrarily.\r\n        for (_Unchecked_iterator _Next_inserted = _Inserted; _Inserted != _End; _Inserted = _Next_inserted) {\r\n            ++_Next_inserted;\r\n\r\n            auto& _Inserted_key     = _Traits::_Kfn(*_Inserted);\r\n            const size_type _Bucket = bucket(_Inserted_key);\r\n\r\n            // _Bucket_lo and _Bucket_hi are the *inclusive* range of elements in the bucket, or _Unchecked_end() if\r\n            // the bucket is empty.\r\n            _Unchecked_iterator& _Bucket_lo = _Vec._Mypair._Myval2._Myfirst[_Bucket << 1];\r\n            _Unchecked_iterator& _Bucket_hi = _Vec._Mypair._Myval2._Myfirst[(_Bucket << 1) + 1];\r\n\r\n            if (_Bucket_lo == _End) {\r\n                // The bucket was empty, set it to the inserted element.\r\n                _Bucket_lo = _Inserted;\r\n                _Bucket_hi = _Inserted;\r\n                continue;\r\n            }\r\n\r\n            // Search the bucket for the insertion location and move element if necessary.\r\n            _Unchecked_const_iterator _Insert_before = _Bucket_hi;\r\n            if (!_Traitsobj(_Inserted_key, _Traits::_Kfn(*_Insert_before))) {\r\n                // The inserted element belongs at the end of the bucket; splice it there and set _Bucket_hi to the\r\n                // new bucket inclusive end.\r\n                ++_Insert_before;\r\n                if (_Insert_before != _Inserted) { // avoid splice on element already in position\r\n                    _Mylist::_Scary_val::_Unchecked_splice(_Insert_before._Ptr, _Inserted._Ptr, _Next_inserted._Ptr);\r\n                }\r\n\r\n                _Bucket_hi = _Inserted;\r\n                continue;\r\n            }\r\n\r\n            // The insertion point isn't *_Bucket_hi, so search [_Bucket_lo, _Bucket_hi) for insertion point; we\r\n            // go backwards for historical reasons.\r\n            for (;;) {\r\n                if (_Bucket_lo == _Insert_before) {\r\n                    // There are no equivalent keys in the bucket, so insert it at the beginning.\r\n                    // Element can't be already in position here because _Inserted_key != *_Insert_before\r\n                    _Mylist::_Scary_val::_Unchecked_splice(_Insert_before._Ptr, _Inserted._Ptr, _Next_inserted._Ptr);\r\n                    _Bucket_lo = _Inserted;\r\n                    break;\r\n                }\r\n\r\n                if (!_Traitsobj(_Inserted_key, _Traits::_Kfn(*--_Insert_before))) {\r\n                    // Found insertion point, move the element here, bucket bounds are already okay.\r\n                    ++_Insert_before;\r\n                    // Element can't be already in position here because all elements we're inserting are after all\r\n                    // the elements already in buckets, and *_Insert_before isn't the highest element in the bucket.\r\n                    _Mylist::_Scary_val::_Unchecked_splice(_Insert_before._Ptr, _Inserted._Ptr, _Next_inserted._Ptr);\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        _Guard._Target = nullptr;\r\n\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n        _Stl_internal_check_container_invariants();\r\n#endif // _ENABLE_STL_INTERNAL_CHECK\r\n    }\r\n\r\n    float& _Max_bucket_size() noexcept {\r\n        return _Traitsobj._Get_max_bucket_size();\r\n    }\r\n\r\n    const float& _Max_bucket_size() const noexcept {\r\n        return _Traitsobj._Get_max_bucket_size();\r\n    }\r\n\r\n    _Alnode& _Getal() noexcept {\r\n        return _List._Getal();\r\n    }\r\n\r\n    const _Alnode& _Getal() const noexcept {\r\n        return _List._Getal();\r\n    }\r\n\r\n    struct _Multi_equal_check_result {\r\n        bool _Equal_possible = false;\r\n        _Unchecked_const_iterator _Subsequent_first{}; // only useful if _Equal_possible\r\n    };\r\n\r\n    _NODISCARD _Multi_equal_check_result _Multi_equal_check_equal_range(\r\n        const _Hash& _Right, _Unchecked_const_iterator _First1) const {\r\n        // check that an equal_range of elements starting with *_First1 are a permutation of the corresponding\r\n        // equal_range of elements in _Right\r\n        auto& _Keyval = _Traits::_Kfn(*_First1);\r\n        // find the start of the matching run in the other container\r\n        const size_t _Hashval   = _Right._Traitsobj(_Keyval);\r\n        const size_type _Bucket = _Hashval & _Right._Mask;\r\n        auto _First2            = _Right._Vec._Mypair._Myval2._Myfirst[_Bucket << 1];\r\n        if (_First2 == _Right._Unchecked_end()) {\r\n            // no matching bucket, therefore no matching run\r\n            return {};\r\n        }\r\n\r\n        const auto _Bucket_hi = _Right._Vec._Mypair._Myval2._Myfirst[(_Bucket << 1) + 1];\r\n        for (; _Right._Traitsobj(_Traits::_Kfn(*_First2), _Keyval); ++_First2) {\r\n            // find first matching element in _Right\r\n            if (_First2 == _Bucket_hi) {\r\n                return {};\r\n            }\r\n        }\r\n\r\n        _Unchecked_const_iterator _Left_stop_at = _Unchecked_end();\r\n\r\n        // trim matching prefixes\r\n        while (*_First1 == *_First2) {\r\n            // the right equal_range ends at the end of the bucket or on the first nonequal element\r\n            bool _Right_range_end = _First2 == _Bucket_hi;\r\n            ++_First2;\r\n            if (!_Right_range_end) {\r\n                _Right_range_end = _Right._Traitsobj(_Keyval, _Traits::_Kfn(*_First2));\r\n            }\r\n\r\n            // the left equal_range ends at the end of the container or on the first nonequal element\r\n            ++_First1;\r\n            const bool _Left_range_end = _First1 == _Left_stop_at || _Traitsobj(_Keyval, _Traits::_Kfn(*_First1));\r\n\r\n            if (_Left_range_end && _Right_range_end) {\r\n                // the equal_ranges were completely equal\r\n                return {true, _First1};\r\n            }\r\n\r\n            if (_Left_range_end || _Right_range_end) {\r\n                // one equal_range is a prefix of the other; not equal\r\n                return {};\r\n            }\r\n        }\r\n\r\n        // found a mismatched element, find the end of the equal_ranges and dispatch to _Check_match_counts\r\n        auto _Last1 = _First1;\r\n        auto _Last2 = _First2;\r\n        for (;;) {\r\n            bool _Right_range_end = _Last2 == _Bucket_hi;\r\n            ++_Last2;\r\n            if (!_Right_range_end) {\r\n                _Right_range_end = _Right._Traitsobj(_Keyval, _Traits::_Kfn(*_Last2));\r\n            }\r\n\r\n            ++_Last1;\r\n            const bool _Left_range_end = _Last1 == _Left_stop_at || _Traitsobj(_Keyval, _Traits::_Kfn(*_Last1));\r\n\r\n            if (_Left_range_end && _Right_range_end) {\r\n                // equal_ranges had the same length, check for permutation\r\n                return {_Check_match_counts(_First1, _Last1, _First2, _Last2, equal_to<>{}), _Last1};\r\n            }\r\n\r\n            if (_Left_range_end || _Right_range_end) {\r\n                // different number of elements in the range, not a permutation\r\n                return {};\r\n            }\r\n        }\r\n    }\r\n\r\n    template <bool _Multi2 = _Traits::_Multi, enable_if_t<_Multi2, int> = 0>\r\n    _NODISCARD bool _Multi_equal(const _Hash& _Right) const {\r\n        static_assert(_Traits::_Multi, \"This function only works with multi containers\");\r\n        _STL_INTERNAL_CHECK(this->size() == _Right.size());\r\n        const auto _Last1 = _Unchecked_end();\r\n        auto _First1      = _Unchecked_begin();\r\n        while (_First1 != _Last1) {\r\n            const auto _Result = _Multi_equal_check_equal_range(_Right, _First1);\r\n            if (!_Result._Equal_possible) {\r\n                return false;\r\n            }\r\n\r\n            _First1 = _Result._Subsequent_first;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\npublic:\r\n    void _Stl_internal_check_container_invariants() const noexcept {\r\n        const size_type _Vecsize = _Vec.size();\r\n        _STL_INTERNAL_CHECK(_Vec._Mypair._Myval2._Mylast == _Vec._Mypair._Myval2._Myend);\r\n        _STL_INTERNAL_CHECK(_Vecsize >= _Min_buckets * 2);\r\n        _STL_INTERNAL_CHECK(_Maxidx == (_Vecsize >> 1));\r\n        _STL_INTERNAL_CHECK(_Maxidx - 1 == _Mask);\r\n        _STL_INTERNAL_CHECK(_Maxidx >= _Min_load_factor_buckets(_List.size()));\r\n        // asserts that bucket count is a power of 2:\r\n        _STL_INTERNAL_CHECK((static_cast<size_type>(1) << _Floor_of_log_2(_Vecsize)) == _Vecsize);\r\n        _STL_INTERNAL_CHECK(load_factor() <= max_load_factor());\r\n        // In the test that counts number of allocator copies, avoid an extra rebind that would incorrectly count as\r\n        // a copy; otherwise, allow allocators that support only homogeneous compare.\r\n#ifdef _USE_HETEROGENEOUS_ALLOCATOR_COMPARE_IN_INTERNAL_CHECK\r\n        _STL_INTERNAL_CHECK(_List._Getal() == _Vec._Mypair._Get_first());\r\n#else\r\n        _STL_INTERNAL_CHECK(static_cast<_Aliter>(_List._Getal()) == _Vec._Mypair._Get_first());\r\n#endif\r\n#ifdef _STL_INTERNAL_CHECK_EXHAUSTIVE\r\n        size_type _Elements = 0;\r\n        const auto _End     = _Unchecked_end();\r\n        for (size_type _Bucket = 0; _Bucket < _Maxidx; ++_Bucket) {\r\n            _Unchecked_const_iterator _Where           = _Vec._Mypair._Myval2._Myfirst[_Bucket << 1];\r\n            const _Unchecked_const_iterator _Bucket_hi = _Vec._Mypair._Myval2._Myfirst[(_Bucket << 1) + 1];\r\n            if (_Where != _End) {\r\n                // check that all the elements in the bucket belong in the bucket:\r\n                for (;;) {\r\n                    ++_Elements;\r\n                    _STL_INTERNAL_CHECK(bucket(_Traits::_Kfn(*_Where)) == _Bucket);\r\n                    if (_Where == _Bucket_hi) {\r\n                        break;\r\n                    }\r\n\r\n                    ++_Where;\r\n                }\r\n            }\r\n        }\r\n\r\n        _STL_INTERNAL_CHECK(_List.size() == _Elements);\r\n#endif // _STL_INTERNAL_CHECK_EXHAUSTIVE\r\n    }\r\n\r\nprotected:\r\n#endif // _ENABLE_STL_INTERNAL_CHECK\r\n\r\n    _Traits _Traitsobj; // traits to customize behavior\r\n    _Mylist _List; // list of elements, must initialize before _Vec\r\n    _Hash_vec<_Aliter> _Vec; // \"vector\" of list iterators for buckets:\r\n                             // each bucket is 2 iterators denoting the closed range of elements in the bucket,\r\n                             // or both iterators set to _Unchecked_end() if the bucket is empty.\r\n    size_type _Mask; // the key mask\r\n    size_type _Maxidx; // current maximum key value, must be a power of 2\r\n};\r\n\r\n#if _HAS_CXX17\r\n// For constraining deduction guides (N4981 [unord.req.general]/248.3)\r\n#if _HAS_CXX23\r\ntemplate <class _Hasher>\r\nconcept _Hasher_for_container = !integral<_Hasher> && _Not_allocator_for_container<_Hasher>;\r\n\r\ntemplate <class _Hasher>\r\nusing _Is_hasher = bool_constant<_Hasher_for_container<_Hasher>>;\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\ntemplate <class _Hasher>\r\nusing _Is_hasher = negation<disjunction<is_integral<_Hasher>, _Is_allocator<_Hasher>>>;\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class _Traits>\r\n_NODISCARD bool _Hash_equal(const _Hash<_Traits>& _Left, const _Hash<_Traits>& _Right) {\r\n    if (_Left.size() != _Right.size()) {\r\n        return false;\r\n    }\r\n\r\n    if constexpr (_Traits::_Multi) {\r\n        return _Left._Multi_equal(_Right);\r\n    } else {\r\n        for (const auto& _LVal : _Left) {\r\n            // look for element with equivalent key\r\n            const auto& _Keyval = _Traits::_Kfn(_LVal);\r\n            const auto _Next2   = _Right._Find_last(_Keyval, _Right._Traitsobj(_Keyval))._Duplicate;\r\n            if (!(static_cast<bool>(_Next2) && _LVal == _Next2->_Myval)) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n}\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XHASH_\r\n"
  },
  {
    "path": "stl/inc/xiosbase",
    "content": "// xiosbase internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XIOSBASE_\r\n#define _XIOSBASE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <share.h>\r\n#include <system_error>\r\n#include <xlocale>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _Dummy>\r\nclass _Iosb { // define templatized bitmask types, instantiate on demand\r\npublic:\r\n    // constants for formatting options\r\n    static constexpr int _Fmtmask = 0xffff;\r\n    static constexpr int _Fmtzero = 0;\r\n\r\n    static constexpr int skipws     = 0x0001;\r\n    static constexpr int unitbuf    = 0x0002;\r\n    static constexpr int uppercase  = 0x0004;\r\n    static constexpr int showbase   = 0x0008;\r\n    static constexpr int showpoint  = 0x0010;\r\n    static constexpr int showpos    = 0x0020;\r\n    static constexpr int left       = 0x0040;\r\n    static constexpr int right      = 0x0080;\r\n    static constexpr int internal   = 0x0100;\r\n    static constexpr int dec        = 0x0200;\r\n    static constexpr int oct        = 0x0400;\r\n    static constexpr int hex        = 0x0800;\r\n    static constexpr int scientific = 0x1000;\r\n    static constexpr int fixed      = 0x2000;\r\n\r\n    static constexpr int boolalpha   = 0x4000;\r\n    static constexpr int adjustfield = left | right | internal;\r\n    static constexpr int basefield   = dec | oct | hex;\r\n    static constexpr int floatfield  = scientific | fixed;\r\n\r\n    // constants for stream states\r\n    static constexpr int _Statmask = 0x17;\r\n\r\n    static constexpr int goodbit = 0x0;\r\n    static constexpr int eofbit  = 0x1;\r\n    static constexpr int failbit = 0x2;\r\n    static constexpr int badbit  = 0x4;\r\n\r\n    static constexpr int in         = 0x01;\r\n    static constexpr int out        = 0x02;\r\n    static constexpr int ate        = 0x04;\r\n    static constexpr int app        = 0x08;\r\n    static constexpr int trunc      = 0x10;\r\n    static constexpr int binary     = 0x20;\r\n    static constexpr int _Nocreate  = 0x40;\r\n    static constexpr int _Noreplace = 0x80;\r\n#if _HAS_CXX23\r\n    static constexpr int noreplace = _Noreplace;\r\n#endif\r\n\r\n    static constexpr int beg = 0;\r\n    static constexpr int cur = 1;\r\n    static constexpr int end = 2;\r\n\r\n    static constexpr int _Default_open_prot = _SH_DENYNO; // constant for default file opening protection\r\n};\r\n\r\n_EXPORT_STD extern \"C++\" class _CRTIMP2_PURE_IMPORT ios_base : public _Iosb<int> { // base class for ios\r\npublic:\r\n    using fmtflags = int;\r\n    using iostate  = int;\r\n    using openmode = int;\r\n    using seekdir  = int;\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    using streamoff = _STD streamoff;\r\n    using streampos = _STD streampos;\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    enum event { // constants for ios events\r\n        erase_event,\r\n        imbue_event,\r\n        copyfmt_event\r\n    };\r\n\r\n    using event_callback = void(__CLRCALL_OR_CDECL*)(event, ios_base&, int);\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    using io_state  = unsigned int;\r\n    using open_mode = unsigned int;\r\n    using seek_dir  = unsigned int;\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    class _NODISCARD failure : public system_error { // base of all iostreams exceptions\r\n    public:\r\n        explicit failure(const string& _Message, const error_code& _Errcode = _STD make_error_code(io_errc::stream))\r\n            : system_error(_Errcode, _Message) {} // construct with message\r\n\r\n        explicit failure(const char* _Message, const error_code& _Errcode = _STD make_error_code(io_errc::stream))\r\n            : system_error(_Errcode, _Message) {} // construct with message\r\n\r\n#if !_HAS_EXCEPTIONS\r\n    protected:\r\n        void _Doraise() const override { // report the exception\r\n            _RAISE(*this);\r\n        }\r\n#endif // !_HAS_EXCEPTIONS\r\n    };\r\n\r\n    class _CRTIMP2_PURE_IMPORT Init { // controller for standard-stream initialization\r\n    public:\r\n        __CLR_OR_THIS_CALL Init() { // initialize standard streams on first construction\r\n            _Init_ctor(this);\r\n        }\r\n\r\n        __CLR_OR_THIS_CALL ~Init() noexcept { // flush standard streams on last destruction\r\n            _Init_dtor(this);\r\n        }\r\n\r\n    private:\r\n        static void __cdecl _Init_ctor(Init*);\r\n        static void __cdecl _Init_dtor(Init*);\r\n\r\n        __PURE_APPDOMAIN_GLOBAL static int _Init_cnt; // net ctor count\r\n\r\n        static int& __cdecl _Init_cnt_func();\r\n    };\r\n\r\n    explicit __CLR_OR_THIS_CALL operator bool() const noexcept /* strengthened */ {\r\n        return !fail();\r\n    }\r\n\r\n    _NODISCARD bool __CLR_OR_THIS_CALL operator!() const noexcept /* strengthened */ {\r\n        return fail();\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL clear(iostate _State, bool _Reraise) { // set state, possibly reraise exception\r\n        _State &= _Statmask;\r\n        _Mystate             = _State;\r\n        const auto _Filtered = _State & _Except;\r\n        if (_Filtered) {\r\n            if (_Reraise) {\r\n                _RERAISE;\r\n            }\r\n\r\n            const char* _Msg;\r\n            if (_Filtered & ios_base::badbit) {\r\n                _Msg = \"ios_base::badbit set\";\r\n            } else if (_Filtered & ios_base::failbit) {\r\n                _Msg = \"ios_base::failbit set\";\r\n            } else {\r\n                _Msg = \"ios_base::eofbit set\";\r\n            }\r\n\r\n            _THROW(failure(_Msg));\r\n        }\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL clear(iostate _State = goodbit) { // set state to argument\r\n        clear(_State, false);\r\n    }\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    void __CLR_OR_THIS_CALL clear(io_state _State) { // set state to argument, old-style\r\n        clear(static_cast<iostate>(_State));\r\n    }\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    _NODISCARD iostate __CLR_OR_THIS_CALL rdstate() const noexcept /* strengthened */ {\r\n        return _Mystate;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL setstate(\r\n        iostate _State, bool _Exreraise) { // merge in state argument, possibly reraise exception\r\n        clear(rdstate() | _State, _Exreraise);\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL setstate(iostate _State) { // merge in state argument\r\n        clear(rdstate() | _State, false);\r\n    }\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    void __CLR_OR_THIS_CALL setstate(io_state _State) { // merge in state argument, old style\r\n        setstate(static_cast<iostate>(_State));\r\n    }\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    _NODISCARD bool __CLR_OR_THIS_CALL good() const noexcept /* strengthened */ {\r\n        return rdstate() == ios_base::goodbit;\r\n    }\r\n\r\n    _NODISCARD bool __CLR_OR_THIS_CALL eof() const noexcept /* strengthened */ {\r\n        return rdstate() & ios_base::eofbit;\r\n    }\r\n\r\n    _NODISCARD bool __CLR_OR_THIS_CALL fail() const noexcept /* strengthened */ {\r\n        return rdstate() & (ios_base::badbit | ios_base::failbit);\r\n    }\r\n\r\n    _NODISCARD bool __CLR_OR_THIS_CALL bad() const noexcept /* strengthened */ {\r\n        return rdstate() & ios_base::badbit;\r\n    }\r\n\r\n    _NODISCARD iostate __CLR_OR_THIS_CALL exceptions() const noexcept /* strengthened */ {\r\n        return _Except;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL exceptions(iostate _Newexcept) { // set exception mask to argument\r\n        _Except = _Newexcept & _Statmask;\r\n        clear(rdstate());\r\n    }\r\n\r\n#if _HAS_OLD_IOSTREAMS_MEMBERS\r\n    void __CLR_OR_THIS_CALL exceptions(io_state _State) { // set exception mask to argument, old style\r\n        exceptions(static_cast<iostate>(_State));\r\n    }\r\n#endif // _HAS_OLD_IOSTREAMS_MEMBERS\r\n\r\n    _NODISCARD fmtflags __CLR_OR_THIS_CALL flags() const noexcept /* strengthened */ {\r\n        return _Fmtfl;\r\n    }\r\n\r\n    fmtflags __CLR_OR_THIS_CALL flags(fmtflags _Newfmtflags) noexcept /* strengthened */ {\r\n        // set format flags to argument\r\n        const fmtflags _Oldfmtflags = _Fmtfl;\r\n        _Fmtfl                      = _Newfmtflags & _Fmtmask;\r\n        return _Oldfmtflags;\r\n    }\r\n\r\n    fmtflags __CLR_OR_THIS_CALL setf(fmtflags _Newfmtflags) noexcept /* strengthened */ {\r\n        // merge in format flags argument\r\n        const ios_base::fmtflags _Oldfmtflags = _Fmtfl;\r\n        _Fmtfl |= _Newfmtflags & _Fmtmask;\r\n        return _Oldfmtflags;\r\n    }\r\n\r\n    fmtflags __CLR_OR_THIS_CALL setf(fmtflags _Newfmtflags, fmtflags _Mask) noexcept /* strengthened */ {\r\n        // merge in format flags argument under mask argument\r\n        const ios_base::fmtflags _Oldfmtflags = _Fmtfl;\r\n        _Fmtfl                                = (_Oldfmtflags & ~_Mask) | (_Newfmtflags & _Mask & _Fmtmask);\r\n        return _Oldfmtflags;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL unsetf(fmtflags _Mask) noexcept /* strengthened */ {\r\n        // clear format flags under mask argument\r\n        _Fmtfl &= ~_Mask;\r\n    }\r\n\r\n    _NODISCARD streamsize __CLR_OR_THIS_CALL precision() const noexcept /* strengthened */ {\r\n        return _Prec;\r\n    }\r\n\r\n    streamsize __CLR_OR_THIS_CALL precision(streamsize _Newprecision) noexcept /* strengthened */ {\r\n        // set precision to argument\r\n        const streamsize _Oldprecision = _Prec;\r\n        _Prec                          = _Newprecision;\r\n        return _Oldprecision;\r\n    }\r\n\r\n    _NODISCARD streamsize __CLR_OR_THIS_CALL width() const noexcept /* strengthened */ {\r\n        return _Wide;\r\n    }\r\n\r\n    streamsize __CLR_OR_THIS_CALL width(streamsize _Newwidth) noexcept /* strengthened */ {\r\n        // set width to argument\r\n        const streamsize _Oldwidth = _Wide;\r\n        _Wide                      = _Newwidth;\r\n        return _Oldwidth;\r\n    }\r\n\r\n    _NODISCARD locale __CLR_OR_THIS_CALL getloc() const noexcept /* strengthened */ { // get locale\r\n        return *_Ploc;\r\n    }\r\n\r\n    locale __CLR_OR_THIS_CALL imbue(const locale& _Loc) { // set locale to argument\r\n        locale _Oldlocale = *_Ploc;\r\n        *_Ploc            = _Loc;\r\n        _Callfns(imbue_event);\r\n        return _Oldlocale;\r\n    }\r\n\r\n    _NODISCARD static int __CLRCALL_OR_CDECL xalloc() { // allocate new iword/pword index\r\n        _BEGIN_LOCK(_LOCK_STREAM) // lock thread to ensure atomicity\r\n        return _Index++;\r\n        _END_LOCK()\r\n    }\r\n\r\n    _NODISCARD long& __CLR_OR_THIS_CALL iword(int _Idx) {\r\n        return _Findarr(_Idx)._Lo;\r\n    }\r\n\r\n    _NODISCARD void*& __CLR_OR_THIS_CALL pword(int _Idx) {\r\n        return _Findarr(_Idx)._Vp;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL register_callback(event_callback _Pfn, int _Idx) {\r\n        // register event handler\r\n        _Calls = new _Fnarray(_Idx, _Pfn, _Calls);\r\n    }\r\n\r\n    ios_base& __CLR_OR_THIS_CALL copyfmt(const ios_base& _Other) { // copy format stuff\r\n        if (this != _STD addressof(_Other)) { // copy all but _Mystate\r\n            _Tidy();\r\n            *_Ploc          = *_Other._Ploc;\r\n            _Fmtfl          = _Other._Fmtfl;\r\n            _Prec           = _Other._Prec;\r\n            _Wide           = _Other._Wide;\r\n            _Iosarray* _Ptr = _Other._Arr;\r\n\r\n            for (_Arr = nullptr; _Ptr; _Ptr = _Ptr->_Next) {\r\n                if (_Ptr->_Lo != 0 || _Ptr->_Vp) { // copy over nonzero array values\r\n                    iword(_Ptr->_Index) = _Ptr->_Lo;\r\n                    pword(_Ptr->_Index) = _Ptr->_Vp;\r\n                }\r\n            }\r\n\r\n            for (_Fnarray* _Pfa = _Other._Calls; _Pfa; _Pfa = _Pfa->_Next) {\r\n                register_callback(_Pfa->_Pfn, _Pfa->_Index);\r\n            }\r\n\r\n            _Callfns(copyfmt_event); // call callbacks\r\n            exceptions(_Other._Except); // cause any throw at end\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    static bool __CLRCALL_OR_CDECL sync_with_stdio(bool _Newsync = true) {\r\n        // set C/C++ synchronization flag from argument\r\n        _BEGIN_LOCK(_LOCK_STREAM) // lock thread to ensure atomicity\r\n        const bool _Oldsync = _Sync;\r\n        _Sync               = _Newsync;\r\n        return _Oldsync;\r\n        _END_LOCK()\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL swap(ios_base& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _STD swap(_Mystate, _Right._Mystate);\r\n            _STD swap(_Except, _Right._Except);\r\n            _STD swap(_Fmtfl, _Right._Fmtfl);\r\n            _STD swap(_Prec, _Right._Prec);\r\n            _STD swap(_Wide, _Right._Wide);\r\n\r\n            _STD swap(_Arr, _Right._Arr);\r\n            _STD swap(_Calls, _Right._Calls);\r\n            _STD swap(_Ploc, _Right._Ploc);\r\n        }\r\n    }\r\n\r\n    virtual __CLR_OR_THIS_CALL ~ios_base() noexcept {\r\n        _Ios_base_dtor(this);\r\n    }\r\n\r\n    static void __CLRCALL_PURE_OR_CDECL _Addstd(ios_base*); // add standard stream\r\n\r\n    size_t _Stdstr{0}; // if > 0 index of standard stream to suppress destruction\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ios_base() {}\r\n\r\n    void __CLR_OR_THIS_CALL _Init() { // initialize a new ios_base\r\n        _Ploc   = nullptr;\r\n        _Stdstr = 0;\r\n        _Except = goodbit;\r\n        _Fmtfl  = skipws | dec;\r\n        _Prec   = 6;\r\n        _Wide   = 0;\r\n        _Arr    = nullptr;\r\n        _Calls  = nullptr;\r\n        clear(goodbit);\r\n        _Ploc = new locale;\r\n    }\r\n\r\nprivate:\r\n    struct _Iosarray : _Crt_new_delete { // list element for open-ended sparse array of longs/pointers\r\n    public:\r\n        __CLR_OR_THIS_CALL _Iosarray(int _Idx, _Iosarray* _Link)\r\n            : _Next(_Link), _Index(_Idx), _Lo(0), _Vp(nullptr) {} // construct node for index _Idx and link it in\r\n\r\n        _Iosarray* _Next; // pointer to next node\r\n        int _Index; // index of this node\r\n        long _Lo; // stored long value\r\n        void* _Vp; // stored pointer value\r\n    };\r\n\r\n    struct _Fnarray : _Crt_new_delete { // list element for open-ended sparse array of event handlers\r\n        __CLR_OR_THIS_CALL _Fnarray(int _Idx, event_callback _Pnew, _Fnarray* _Link)\r\n            : _Next(_Link), _Index(_Idx), _Pfn(_Pnew) {} // construct node for index _Idx and link it in\r\n\r\n        _Fnarray* _Next; // pointer to next node\r\n        int _Index; // index of this node\r\n        event_callback _Pfn; // pointer to event handler\r\n    };\r\n\r\n    void __CLR_OR_THIS_CALL _Callfns(event _Ev) { // call all event handlers, reporting event\r\n        for (_Fnarray* _Pfa = _Calls; _Pfa; _Pfa = _Pfa->_Next) {\r\n            (*_Pfa->_Pfn)(_Ev, *this, _Pfa->_Index);\r\n        }\r\n    }\r\n\r\n    _Iosarray& __CLR_OR_THIS_CALL _Findarr(int _Idx) { // locate or make a variable array element\r\n        _Iosarray* _Ptr1;\r\n        _Iosarray* _Ptr2;\r\n\r\n        for (_Ptr1 = _Arr, _Ptr2 = nullptr; _Ptr1; _Ptr1 = _Ptr1->_Next) {\r\n            if (_Ptr1->_Index == _Idx) {\r\n                return *_Ptr1; // found element, return it\r\n            } else if (!_Ptr2 && _Ptr1->_Lo == 0 && !_Ptr1->_Vp) {\r\n                _Ptr2 = _Ptr1; // found recycling candidate\r\n            }\r\n        }\r\n\r\n        if (_Ptr2) { // recycle existing element\r\n            _Ptr2->_Index = _Idx;\r\n            return *_Ptr2;\r\n        }\r\n\r\n        _Arr = new _Iosarray(_Idx, _Arr); // make a new element\r\n        return *_Arr;\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Tidy() noexcept { // discard storage for an ios_base\r\n        _Callfns(erase_event);\r\n        _Iosarray* _Ptr1;\r\n        _Iosarray* _Ptr2;\r\n\r\n        for (_Ptr1 = _Arr; _Ptr1; _Ptr1 = _Ptr2) { // delete array element\r\n            _Ptr2 = _Ptr1->_Next;\r\n            delete _Ptr1;\r\n        }\r\n        _Arr = nullptr;\r\n\r\n        _Fnarray* _Pfa1;\r\n        _Fnarray* _Pfa2;\r\n        for (_Pfa1 = _Calls; _Pfa1; _Pfa1 = _Pfa2) { // delete callback element\r\n            _Pfa2 = _Pfa1->_Next;\r\n            delete _Pfa1;\r\n        }\r\n        _Calls = nullptr;\r\n    }\r\n\r\n    iostate _Mystate{}; // stream state\r\n    iostate _Except{}; // exception mask\r\n    fmtflags _Fmtfl{}; // format flags\r\n    streamsize _Prec{}; // field precision\r\n    streamsize _Wide{}; // field width\r\n    _Iosarray* _Arr{nullptr}; // pointer to first node of long/pointer array\r\n    _Fnarray* _Calls{nullptr}; // pointer to first node of call list\r\n    locale* _Ploc{nullptr}; // pointer to locale\r\n\r\n    __PURE_APPDOMAIN_GLOBAL static int _Index;\r\n    __PURE_APPDOMAIN_GLOBAL static bool _Sync;\r\n\r\n    static void __CLRCALL_PURE_OR_CDECL _Ios_base_dtor(ios_base*);\r\n\r\npublic:\r\n    ios_base(const ios_base&)            = delete;\r\n    ios_base& operator=(const ios_base&) = delete;\r\n};\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XIOSBASE_\r\n"
  },
  {
    "path": "stl/inc/xkeycheck.h",
    "content": "// xkeycheck.h internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XKEYCHECK_H\r\n#define _XKEYCHECK_H\r\n\r\n// xkeycheck.h assumes that it's being included by yvals_core.h in a specific order.\r\n// Nothing else should include xkeycheck.h.\r\n\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !defined(_ALLOW_KEYWORD_MACROS) && !defined(__INTELLISENSE__)\r\n\r\n// #if defined($KEYWORD)\r\n// #define $KEYWORD EMIT WARNING C4005\r\n// #error The C++ Standard Library forbids macroizing the keyword \"$KEYWORD\". \\\r\n// Enable warning C4005 to find the forbidden define.\r\n// #endif // $KEYWORD\r\n\r\n// *don't* check the \"alternative token representations\"\r\n\r\n// keywords:\r\n#if defined(alignas)\r\n#define alignas EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"alignas\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // alignas\r\n\r\n#if defined(alignof)\r\n#define alignof EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"alignof\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // alignof\r\n\r\n#if defined(asm)\r\n#define asm EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"asm\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // asm\r\n\r\n#if defined(auto)\r\n#define auto EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"auto\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // auto\r\n\r\n#if defined(bool)\r\n#define bool EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"bool\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // bool\r\n\r\n#if defined(break)\r\n#define break EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"break\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // break\r\n\r\n#if defined(case)\r\n#define case EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"case\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // case\r\n\r\n#if defined(catch)\r\n#define catch EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"catch\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // catch\r\n\r\n#if defined(char)\r\n#define char EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"char\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // char\r\n\r\n#if defined(char8_t) && _HAS_CXX20\r\n#define char8_t EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"char8_t\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // char8_t\r\n\r\n#if defined(char16_t)\r\n#define char16_t EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"char16_t\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // char16_t\r\n\r\n#if defined(char32_t)\r\n#define char32_t EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"char32_t\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // char32_t\r\n\r\n#if defined(class)\r\n#define class EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"class\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // class\r\n\r\n#if defined(concept) && _HAS_CXX20\r\n#define concept EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"concept\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // concept\r\n\r\n#if defined(const)\r\n#define const EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"const\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // const\r\n\r\n#if defined(consteval) && _HAS_CXX20\r\n#define consteval EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"consteval\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // consteval\r\n\r\n#if defined(constexpr)\r\n#define constexpr EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"constexpr\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // constexpr\r\n\r\n#if defined(constinit) && _HAS_CXX20\r\n#define constinit EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"constinit\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // constinit\r\n\r\n#if defined(const_cast)\r\n#define const_cast EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"const_cast\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // const_cast\r\n\r\n#if defined(continue)\r\n#define continue EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"continue\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // continue\r\n\r\n#if defined(co_await) && _HAS_CXX20\r\n#define co_await EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"co_await\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // co_await\r\n\r\n#if defined(co_return) && _HAS_CXX20\r\n#define co_return EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"co_return\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // co_return\r\n\r\n#if defined(co_yield) && _HAS_CXX20\r\n#define co_yield EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"co_yield\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // co_yield\r\n\r\n#if defined(decltype)\r\n#define decltype EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"decltype\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // decltype\r\n\r\n#if defined(default)\r\n#define default EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"default\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // default\r\n\r\n#if defined(delete)\r\n#define delete EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"delete\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // delete\r\n\r\n#if defined(do)\r\n#define do EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"do\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // do\r\n\r\n#if defined(double)\r\n#define double EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"double\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // double\r\n\r\n#if defined(dynamic_cast)\r\n#define dynamic_cast EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"dynamic_cast\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // dynamic_cast\r\n\r\n#if defined(else)\r\n#define else EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"else\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // else\r\n\r\n#if defined(enum)\r\n#define enum EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"enum\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // enum\r\n\r\n#if defined(explicit)\r\n#define explicit EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"explicit\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // explicit\r\n\r\n#if defined(export)\r\n#define export EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"export\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // export\r\n\r\n#if defined(extern)\r\n#define extern EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"extern\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // extern\r\n\r\n#if defined(false)\r\n#define false EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"false\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // false\r\n\r\n#if defined(float)\r\n#define float EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"float\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // float\r\n\r\n#if defined(for)\r\n#define for EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"for\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // for\r\n\r\n#if defined(friend)\r\n#define friend EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"friend\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // friend\r\n\r\n#if defined(goto)\r\n#define goto EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"goto\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // goto\r\n\r\n#if defined(if)\r\n#define if EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"if\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // if\r\n\r\n#if defined(inline)\r\n#define inline EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"inline\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // inline\r\n\r\n#if defined(int)\r\n#define int EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"int\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // int\r\n\r\n#if defined(long)\r\n#define long EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"long\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // long\r\n\r\n#if defined(mutable)\r\n#define mutable EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"mutable\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // mutable\r\n\r\n#if defined(namespace)\r\n#define namespace EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"namespace\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // namespace\r\n\r\n#if defined(new) && defined(_ENFORCE_BAN_OF_MACRO_NEW)\r\n#define new EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"new\", though macroized new is supported on this \\\r\nimplementation as a nonstandard extension. Enable warning C4005 to find the forbidden define, or re-enable the \\\r\nextension by removing _ENFORCE_BAN_OF_MACRO_NEW.\r\n#endif // new\r\n\r\n#if defined(noexcept)\r\n#define noexcept EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"noexcept\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // noexcept\r\n\r\n#if defined(nullptr)\r\n#define nullptr EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"nullptr\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // nullptr\r\n\r\n#if defined(operator)\r\n#define operator EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"operator\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // operator\r\n\r\n#if defined(private)\r\n#define private EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"private\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // private\r\n\r\n#if defined(protected)\r\n#define protected EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"protected\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // protected\r\n\r\n#if defined(public)\r\n#define public EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"public\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // public\r\n\r\n#if defined(register)\r\n#define register EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"register\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // register\r\n\r\n#if defined(reinterpret_cast)\r\n#define reinterpret_cast EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"reinterpret_cast\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // reinterpret_cast\r\n\r\n#if defined(requires) && _HAS_CXX20\r\n#define requires EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"requires\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // requires\r\n\r\n#if defined(return)\r\n#define return EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"return\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // return\r\n\r\n#if defined(short)\r\n#define short EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"short\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // short\r\n\r\n#if defined(signed)\r\n#define signed EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"signed\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // signed\r\n\r\n#if defined(sizeof)\r\n#define sizeof EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"sizeof\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // sizeof\r\n\r\n#if defined(static)\r\n#define static EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"static\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // static\r\n\r\n#if defined(static_assert)\r\n#define static_assert EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"static_assert\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // static_assert\r\n\r\n#if defined(static_cast)\r\n#define static_cast EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"static_cast\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // static_cast\r\n\r\n#if defined(struct)\r\n#define struct EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"struct\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // struct\r\n\r\n#if defined(switch)\r\n#define switch EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"switch\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // switch\r\n\r\n#if defined(template)\r\n#define template EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"template\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // template\r\n\r\n#if defined(this)\r\n#define this EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"this\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // this\r\n\r\n#if defined(thread_local)\r\n#define thread_local EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"thread_local\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // thread_local\r\n\r\n#if defined(throw)\r\n#define throw EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"throw\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // throw\r\n\r\n#if defined(true)\r\n#define true EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"true\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // true\r\n\r\n#if defined(try)\r\n#define try EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"try\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // try\r\n\r\n#if defined(typedef)\r\n#define typedef EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"typedef\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // typedef\r\n\r\n#if defined(typeid)\r\n#define typeid EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"typeid\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // typeid\r\n\r\n#if defined(typename)\r\n#define typename EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"typename\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // typename\r\n\r\n#if defined(union)\r\n#define union EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"union\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // union\r\n\r\n#if defined(unsigned)\r\n#define unsigned EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"unsigned\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // unsigned\r\n\r\n#if defined(using)\r\n#define using EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"using\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // using\r\n\r\n#if defined(virtual)\r\n#define virtual EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"virtual\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // virtual\r\n\r\n#if defined(void)\r\n#define void EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"void\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // void\r\n\r\n#if defined(volatile)\r\n#define volatile EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"volatile\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // volatile\r\n\r\n#if defined(wchar_t)\r\n#define wchar_t EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"wchar_t\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // wchar_t\r\n\r\n#if defined(while)\r\n#define while EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the keyword \"while\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // while\r\n\r\n// contextual keywords (a.k.a. \"identifiers with special meaning\"):\r\n#if defined(final)\r\n#define final EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the contextual keyword \"final\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // final\r\n\r\n#if defined(import) && _HAS_CXX20\r\n#define import EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the contextual keyword \"import\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // import\r\n\r\n#if defined(module) && _HAS_CXX20\r\n#define module EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the contextual keyword \"module\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // module\r\n\r\n#if defined(override)\r\n#define override EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the contextual keyword \"override\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // override\r\n\r\n// attribute-tokens:\r\n#if defined(carries_dependency)\r\n#define carries_dependency EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the attribute-token \"carries_dependency\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // carries_dependency\r\n\r\n#if defined(deprecated)\r\n#define deprecated EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the attribute-token \"deprecated\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // deprecated\r\n\r\n#if defined(fallthrough) && _HAS_CXX17\r\n#define fallthrough EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the attribute-token \"fallthrough\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // fallthrough\r\n\r\n// not checking \"likely\" because it is commonly defined as a function-like macro\r\n\r\n#if defined(maybe_unused) && _HAS_CXX17\r\n#define maybe_unused EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the attribute-token \"maybe_unused\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // maybe_unused\r\n\r\n#if defined(nodiscard) // C++17 attribute-token, also enforced in C++14 mode\r\n#define nodiscard EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the attribute-token \"nodiscard\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // nodiscard\r\n\r\n#if defined(noreturn)\r\n#define noreturn EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the attribute-token \"noreturn\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // noreturn\r\n\r\n#if defined(no_unique_address) && _HAS_CXX20\r\n#define no_unique_address EMIT WARNING C4005\r\n#error The C++ Standard Library forbids macroizing the attribute-token \"no_unique_address\". \\\r\nEnable warning C4005 to find the forbidden define.\r\n#endif // no_unique_address\r\n\r\n// not checking \"unlikely\" because it is commonly defined as a function-like macro\r\n\r\n#endif // !defined(_ALLOW_KEYWORD_MACROS) && !defined(__INTELLISENSE__)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XKEYCHECK_H\r\n"
  },
  {
    "path": "stl/inc/xlocale",
    "content": "// xlocale internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XLOCALE_\r\n#define _XLOCALE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <climits>\r\n#include <cstring>\r\n#include <memory>\r\n#include <typeinfo>\r\n#include <xfacet>\r\n#include <xlocinfo>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"empty_bases\")\r\n#undef empty_bases\r\n\r\n_STD_BEGIN\r\ntemplate <class _Dummy>\r\nclass _Locbase {}; // TRANSITION, ABI, affects sizeof(locale)\r\n\r\n_EXPORT_STD template <class _Elem>\r\nclass collate;\r\n\r\nextern \"C++\" struct _CRTIMP2_PURE_IMPORT _Crt_new_delete { // base class for marking allocations as CRT blocks\r\n#ifdef _DEBUG\r\n    void* __CLRCALL_OR_CDECL operator new(size_t _Size) { // replace operator new\r\n        void* _Ptr = operator new(_Size, nothrow);\r\n        if (!_Ptr) {\r\n            _Xbad_alloc();\r\n        }\r\n\r\n        return _Ptr;\r\n    }\r\n\r\n    void* __CLRCALL_OR_CDECL operator new(size_t _Size, const nothrow_t&) noexcept { // replace nothrow operator new\r\n        return _malloc_dbg(_Size > 0 ? _Size : 1, _CRT_BLOCK, __FILE__, __LINE__);\r\n    }\r\n\r\n    void __CLRCALL_OR_CDECL operator delete(void* _Ptr) noexcept { // replace operator delete\r\n        _CSTD free(_Ptr);\r\n    }\r\n\r\n    void __CLRCALL_OR_CDECL operator delete(void* _Ptr, const nothrow_t&) noexcept { // replace nothrow operator delete\r\n        operator delete(_Ptr);\r\n    }\r\n\r\n    void* __CLRCALL_OR_CDECL operator new(size_t, void* _Ptr) noexcept { // imitate True Placement New\r\n        return _Ptr;\r\n    }\r\n\r\n    void __CLRCALL_OR_CDECL operator delete(void*, void*) noexcept {} // imitate True Placement Delete\r\n#endif // _DEBUG\r\n};\r\n\r\n_EXPORT_STD extern \"C++\" class locale : public _Locbase<int>, public _Crt_new_delete {\r\npublic:\r\n    using category = int;\r\n\r\n    static constexpr category collate  = _M_COLLATE;\r\n    static constexpr category ctype    = _M_CTYPE;\r\n    static constexpr category monetary = _M_MONETARY;\r\n    static constexpr category numeric  = _M_NUMERIC;\r\n    static constexpr category time     = _M_TIME;\r\n    static constexpr category messages = _M_MESSAGES;\r\n    static constexpr category all      = _M_ALL;\r\n    static constexpr category none     = 0;\r\n\r\n    class _CRTIMP2_PURE_IMPORT id { // identifier stamp, unique for each distinct kind of facet\r\n    public:\r\n#ifdef _CRTBLD // TRANSITION, ABI: preserved for binary compatibility\r\n        __CLR_OR_THIS_CALL id(size_t _Val = 0) : _Id(_Val) {}\r\n#else // ^^^ defined(_CRTBLD) / !defined(_CRTBLD) vvv\r\n        template <int = 0> // TRANSITION, ABI\r\n        id() noexcept /* strengthened */ {}\r\n#endif // ^^^ !defined(_CRTBLD) ^^^\r\n\r\n        id(const id&)            = delete;\r\n        id& operator=(const id&) = delete;\r\n\r\n        template <int = 0> // TRANSITION, ABI\r\n        size_t _Get_index() { // get stamp, with lazy allocation\r\n            if (_Id == 0) { // still zero, allocate stamp\r\n                _BEGIN_LOCK(_LOCK_LOCALE)\r\n                if (_Id == 0) {\r\n                    _Id = static_cast<size_t>(++_Id_cnt);\r\n                }\r\n                _END_LOCK()\r\n            }\r\n            return _Id;\r\n        }\r\n\r\n#ifdef _CRTBLD // TRANSITION, ABI: preserved for binary compatibility\r\n        __CLR_OR_THIS_CALL operator size_t() {\r\n            return _Get_index();\r\n        }\r\n#endif // defined(_CRTBLD)\r\n\r\n    private:\r\n        size_t _Id = 0; // the identifier stamp\r\n\r\n        __PURE_APPDOMAIN_GLOBAL static int _Id_cnt;\r\n    };\r\n\r\n    struct _Facet_guard;\r\n\r\n    class _CRTIMP2_PURE_IMPORT facet : public _Facet_base, public _Crt_new_delete {\r\n        // base class for all locale facets, performs reference counting\r\n    private:\r\n        friend _Facet_guard;\r\n\r\n    public:\r\n        static size_t __CLRCALL_OR_CDECL _Getcat(const facet** = nullptr, const locale* = nullptr) {\r\n            // get category value, or -1 if no corresponding C category\r\n            return static_cast<size_t>(-1);\r\n        }\r\n\r\n        void __CLR_OR_THIS_CALL _Incref() noexcept override { // increment use count\r\n            _MT_INCR(_Myrefs);\r\n        }\r\n\r\n        _Facet_base* __CLR_OR_THIS_CALL _Decref() noexcept override { // decrement use count\r\n            if (_MT_DECR(_Myrefs) == 0) {\r\n                return this;\r\n            }\r\n\r\n            return nullptr;\r\n        }\r\n\r\n    private:\r\n        _Atomic_counter_t _Myrefs; // the reference count\r\n\r\n    protected:\r\n        explicit __CLR_OR_THIS_CALL facet(size_t _Initrefs = 0) noexcept // strengthened\r\n            : _Myrefs(static_cast<_Atomic_counter_t>(_Initrefs)) // non-atomic initialization\r\n        {}\r\n\r\n        __CLR_OR_THIS_CALL ~facet() noexcept override {}\r\n\r\n    public:\r\n        __CLR_OR_THIS_CALL facet(const facet&)            = delete;\r\n        facet& __CLR_OR_THIS_CALL operator=(const facet&) = delete;\r\n    };\r\n\r\n    struct _NODISCARD _Facet_guard {\r\n        facet* _Target;\r\n        ~_Facet_guard() {\r\n            if (_Target) {\r\n                delete _Target->_Decref();\r\n            }\r\n        }\r\n    };\r\n\r\n    class _CRTIMP2_PURE_IMPORT _Locimp : public facet { // reference-counted actual implementation of a locale\r\n    protected:\r\n        __CLR_OR_THIS_CALL ~_Locimp() noexcept {\r\n            _Locimp_dtor(this);\r\n        }\r\n\r\n    private:\r\n        static _Locimp* __CLRCALL_PURE_OR_CDECL _New_Locimp(bool _Transparent = false);\r\n        static _Locimp* __CLRCALL_PURE_OR_CDECL _New_Locimp(const _Locimp& _Right);\r\n\r\n        static void __CLRCALL_PURE_OR_CDECL _Locimp_dtor(_Locimp*);\r\n        static void __CLRCALL_PURE_OR_CDECL _Locimp_Addfac(_Locimp*, facet*, size_t); // add a facet\r\n        static void __CLRCALL_PURE_OR_CDECL _Locimp_ctor(_Locimp*, const _Locimp&);\r\n\r\n        friend locale;\r\n\r\n        __CLR_OR_THIS_CALL _Locimp(bool _Transparent)\r\n            : locale::facet(1), _Facetvec(nullptr), _Facetcount(0), _Catmask(none), _Xparent(_Transparent), _Name(\"*\") {\r\n        }\r\n\r\n        __CLR_OR_THIS_CALL _Locimp(const _Locimp& _Right)\r\n            : locale::facet(1), _Facetvec(nullptr), _Facetcount(_Right._Facetcount), _Catmask(_Right._Catmask),\r\n              _Xparent(_Right._Xparent), _Name(_Right._Name.c_str()) {\r\n            _Locimp_ctor(this, _Right);\r\n        }\r\n\r\n        void __CLR_OR_THIS_CALL _Addfac(facet* _Pfacet, size_t _Id) { // add a facet\r\n            _Locimp_Addfac(this, _Pfacet, _Id);\r\n        }\r\n\r\n        static _Locimp* __CLRCALL_OR_CDECL _Makeloc(\r\n            const _Locinfo&, category, _Locimp*, const locale*); // make essential facets\r\n\r\n        static void __CLRCALL_OR_CDECL _Makewloc(\r\n            const _Locinfo&, category, _Locimp*, const locale*); // make wchar_t facets\r\n\r\n#ifdef _CRTBLD\r\n        static void __CLRCALL_OR_CDECL _Makeushloc(\r\n            const _Locinfo&, category, _Locimp*, const locale*); // make ushort facets\r\n#endif // defined(_CRTBLD)\r\n\r\n        static void __CLRCALL_OR_CDECL _Makexloc(\r\n            const _Locinfo&, category, _Locimp*, const locale*); // make remaining facets\r\n\r\n        facet** _Facetvec; // pointer to vector of facets\r\n        size_t _Facetcount; // size of vector of facets\r\n        category _Catmask; // mask describing implemented categories\r\n        bool _Xparent; // true if locale is transparent\r\n        _Yarn<char> _Name; // locale name, or \"*\" if not known\r\n\r\n        __PURE_APPDOMAIN_GLOBAL static _Locimp* _Clocptr;\r\n\r\n    public:\r\n        _Locimp& __CLR_OR_THIS_CALL operator=(const _Locimp&) = delete;\r\n    };\r\n\r\n    template <class _Elem, class _Traits, class _Alloc>\r\n    bool operator()(\r\n        const basic_string<_Elem, _Traits, _Alloc>& _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) const {\r\n        // compare _Left and _Right strings using collate facet in locale\r\n        const auto& _Coll_fac = _STD use_facet<_STD collate<_Elem>>(*this);\r\n\r\n        const _Elem* const _Left_data  = _Left.data();\r\n        const _Elem* const _Right_data = _Right.data();\r\n        return _Coll_fac.compare(_Left_data, _Left_data + _Left.size(), _Right_data, _Right_data + _Right.size()) < 0;\r\n    }\r\n\r\n    template <class _Facet>\r\n    locale combine(const locale& _Loc) const { // combine two locales\r\n        _Facet* _Facptr;\r\n\r\n        _TRY_BEGIN\r\n        _Facptr = const_cast<_Facet*>(_STD addressof(_STD use_facet<_Facet>(_Loc)));\r\n        _CATCH_ALL\r\n        _Xruntime_error(\"locale::combine facet missing\");\r\n        _CATCH_END\r\n\r\n        _Locimp* _Newimp = _Locimp::_New_Locimp(*_Ptr);\r\n        _Newimp->_Addfac(_Facptr, _Facet::id._Get_index());\r\n        _Newimp->_Catmask = none;\r\n        _Newimp->_Name    = \"*\";\r\n        return locale{_Secret_locale_construct_tag{}, _Newimp};\r\n    }\r\n\r\n    template <class _Facet>\r\n    locale(const locale& _Loc, const _Facet* _Facptr) : _Ptr(_Locimp::_New_Locimp(*_Loc._Ptr)) {\r\n        if (_Facptr) { // replace facet\r\n            _Ptr->_Addfac(const_cast<_Facet*>(_Facptr), _Facet::id._Get_index());\r\n            _Ptr->_Catmask = none;\r\n            _Ptr->_Name    = \"*\";\r\n        }\r\n    }\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 26495) // Variable 'std::locale::_Ptr' is uninitialized.\r\n                                 // Always initialize a member variable (type.6).\r\n\r\n    // We must not explicitly initialize _Ptr here; we rely on it maintaining the value\r\n    // previously created in its storage. To be precise:\r\n    // In locale0.cpp, locale::_Init() uses True Placement New at classic_locale's address,\r\n    // and classic_locale is constructed from the _Noinit enumerator of type _Uninitialized.\r\n    // The sequencing is highly unusual; the True Placement New happens before the _Uninitialized construction,\r\n    // so while _Ptr here formally has indeterminate value, we expect it to actually keep the previous value.\r\n    locale(_Uninitialized) {} // defer construction\r\n#pragma warning(pop)\r\n\r\n    locale(const locale& _Right) noexcept : _Ptr(_Right._Ptr) {\r\n        _Ptr->_Incref();\r\n    }\r\n\r\n    locale() noexcept : _Ptr(_Init(true)) {}\r\n\r\n#if !defined(MRTDLL) || !defined(_CRTBLD)\r\n    locale(const locale& _Loc, const locale& _Other, category _Cat) : _Ptr(_Locimp::_New_Locimp(*_Loc._Ptr)) {\r\n        // construct a locale by copying named facets\r\n        if (_Cat != none) { // worth adding, do it\r\n            _STL_ASSERT((_Cat & all) == _Cat, \"the bitmask value specifying category must be valid\");\r\n            _Facet_guard _Guard{_Ptr};\r\n            _BEGIN_LOCINFO(_Lobj)\r\n            _Locimp::_Makeloc(_Lobj, _Cat, _Ptr, &_Other);\r\n            _Lobj._Addcats(_Loc._Ptr->_Catmask, _Loc.name().c_str());\r\n            _Lobj._Addcats(_Other._Ptr->_Catmask, _Other.name().c_str());\r\n            _Ptr->_Catmask = _Loc._Ptr->_Catmask | _Other._Ptr->_Catmask;\r\n            _Ptr->_Name    = _Lobj._Getname();\r\n            _END_LOCINFO()\r\n            _Guard._Target = nullptr;\r\n        }\r\n    }\r\n\r\nprivate:\r\n    void _Construct(const string& _Str, category _Cat) {\r\n        _STL_ASSERT((_Cat & all) == _Cat, \"the bitmask value specifying category must be valid\");\r\n        // construct a locale with named facets\r\n        bool _Bad = false;\r\n        _Init();\r\n        if (_Cat != none) { // worth adding, do it\r\n            _Facet_guard _Guard{_Ptr};\r\n            _BEGIN_LOCINFO(_Lobj(_Cat, _Str.c_str()))\r\n            if (_Badname(_Lobj)) {\r\n                _Bad = true;\r\n            } else { // name okay, build the locale\r\n                _Locimp::_Makeloc(_Lobj, _Cat, _Ptr, nullptr);\r\n                _Ptr->_Catmask = _Cat;\r\n                _Ptr->_Name    = _Str.c_str();\r\n            }\r\n            _END_LOCINFO()\r\n            _Guard._Target = nullptr;\r\n        }\r\n\r\n        if (_Bad) { // Don't throw within _BEGIN_LOCINFO if we can avoid it\r\n            delete _Ptr->_Decref();\r\n            _Xruntime_error(\"bad locale name\");\r\n        }\r\n    }\r\n\r\npublic:\r\n    explicit locale(const char* _Locname, category _Cat = all) : _Ptr(_Locimp::_New_Locimp()) {\r\n        // construct a locale with named facets\r\n        // _Locname might have been returned from setlocale().\r\n        // Therefore, _Construct() takes const string&.\r\n        if (_Locname) {\r\n            _Construct(_Locname, _Cat);\r\n            return;\r\n        }\r\n\r\n        _Xruntime_error(\"bad locale name\");\r\n    }\r\n\r\n    locale(const locale& _Loc, const char* _Locname, category _Cat) : _Ptr(_Locimp::_New_Locimp(*_Loc._Ptr)) {\r\n        // construct a locale by copying, replacing named facets\r\n        // _Locname might have been returned from setlocale().\r\n        // Therefore, _Construct() takes const string&.\r\n        if (_Locname) {\r\n            _Construct(_Locname, _Cat);\r\n            return;\r\n        }\r\n\r\n        _Xruntime_error(\"bad locale name\");\r\n    }\r\n\r\n    explicit locale(const string& _Str, category _Cat = all) : _Ptr(_Locimp::_New_Locimp()) {\r\n        // construct a locale with named facets\r\n        _Construct(_Str, _Cat);\r\n    }\r\n\r\n    locale(const locale& _Loc, const string& _Str, category _Cat) : _Ptr(_Locimp::_New_Locimp(*_Loc._Ptr)) {\r\n        // construct a locale by copying, replacing named facets\r\n        _Construct(_Str, _Cat);\r\n    }\r\n#endif // !MRTDLL || !_CRTBLD\r\n\r\n    ~locale() noexcept {\r\n        if (_Ptr) {\r\n            delete _Ptr->_Decref();\r\n        }\r\n    }\r\n\r\n    const locale& operator=(const locale& _Right) noexcept {\r\n        if (_Ptr != _Right._Ptr) { // different implementation, point at new one\r\n            delete _Ptr->_Decref();\r\n            _Ptr = _Right._Ptr;\r\n            _Ptr->_Incref();\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    string name() const {\r\n        return _Ptr ? _Ptr->_Name.c_str() : string{};\r\n    }\r\n\r\n    _Ret_z_ const char* _C_str() const noexcept {\r\n        return _Ptr ? _Ptr->_Name.c_str() : \"\";\r\n    }\r\n\r\n    const facet* _Getfacet(size_t _Id) const { // look up a facet in locale object\r\n        const facet* _Facptr = _Id < _Ptr->_Facetcount ? _Ptr->_Facetvec[_Id] : nullptr; // null if id off end\r\n        if (_Facptr || !_Ptr->_Xparent) {\r\n            return _Facptr; // found facet or not transparent\r\n        }\r\n\r\n        // look in current locale\r\n        locale::_Locimp* _Ptr0 = _Getgloballocale();\r\n        if (_Id < _Ptr0->_Facetcount) {\r\n            return _Ptr0->_Facetvec[_Id]; // get from current locale\r\n        }\r\n\r\n        return nullptr; // no entry in current locale\r\n    }\r\n\r\n    _NODISCARD bool operator==(const locale& _Loc) const noexcept /* strengthened */ { // compare locales for equality\r\n        return _Ptr == _Loc._Ptr || (_CSTD strcmp(_C_str(), \"*\") != 0 && _CSTD strcmp(_C_str(), _Loc._C_str()) == 0);\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD bool operator!=(const locale& _Right) const noexcept /* strengthened */ {\r\n        return !(*this == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    static _MRTIMP2_PURE const locale& __CLRCALL_PURE_OR_CDECL classic(); // classic \"C\" locale\r\n\r\n    static _MRTIMP2_PURE locale __CLRCALL_PURE_OR_CDECL global(const locale&); // current locale\r\n\r\n#ifdef _CRTBLD\r\n    // TRANSITION, ABI: non-Standard locale::empty() is preserved for binary compatibility\r\n    static _MRTIMP2_PURE locale __CLRCALL_PURE_OR_CDECL empty();\r\n#endif // ^^^ defined(_CRTBLD) ^^^\r\n\r\nprivate:\r\n    struct _Secret_locale_construct_tag {\r\n        explicit _Secret_locale_construct_tag() = default;\r\n    };\r\n\r\n    explicit locale(_Secret_locale_construct_tag, _Locimp* _Ptrimp) : _Ptr(_Ptrimp) {}\r\n\r\n    static _MRTIMP2_PURE _Locimp* __CLRCALL_PURE_OR_CDECL _Init(bool _Do_incref = false); // initialize locale\r\n    static _MRTIMP2_PURE _Locimp* __CLRCALL_PURE_OR_CDECL _Getgloballocale();\r\n    static _MRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Setgloballocale(void*);\r\n\r\n    bool _Badname(const _Locinfo& _Lobj) { // test if name is \"*\"\r\n        return _CSTD strcmp(_Lobj._Getname(), \"*\") == 0;\r\n    }\r\n\r\n    _Locimp* _Ptr; // pointer to locale implementation object\r\n};\r\n\r\ntemplate <class _Facet>\r\nstruct _Facetptr { // store pointer to lazy facet for use_facet\r\n    __PURE_APPDOMAIN_GLOBAL static const locale::facet* _Psave;\r\n};\r\n\r\ntemplate <class _Facet>\r\n__PURE_APPDOMAIN_GLOBAL const locale::facet* _Facetptr<_Facet>::_Psave = nullptr;\r\n\r\n_EXPORT_STD template <class _Facet>\r\nconst _Facet& __CRTDECL use_facet(const locale& _Loc) { // get facet reference from locale\r\n    _BEGIN_LOCK(_LOCK_LOCALE) // the thread lock, make get atomic\r\n    const locale::facet* _Psave = _Facetptr<_Facet>::_Psave; // static pointer to lazy facet\r\n\r\n    const size_t _Id         = _Facet::id._Get_index();\r\n    const locale::facet* _Pf = _Loc._Getfacet(_Id);\r\n\r\n    if (!_Pf) {\r\n        if (_Psave) {\r\n            _Pf = _Psave; // lazy facet already allocated\r\n        } else if (_Facet::_Getcat(&_Psave, &_Loc) == static_cast<size_t>(-1)) {\r\n#if _HAS_EXCEPTIONS\r\n            _Throw_bad_cast(); // lazy disallowed\r\n#else\r\n            _STL_REPORT_ERROR(\"lazy facet disallowed\");\r\n#endif\r\n        } else { // queue up lazy facet for destruction\r\n            auto _Pfmod = const_cast<locale::facet*>(_Psave);\r\n            unique_ptr<_Facet_base> _Psave_guard(static_cast<_Facet_base*>(_Pfmod));\r\n\r\n#if defined(_M_CEE)\r\n            _Facet_Register_m(_Pfmod);\r\n#else // ^^^ defined(_M_CEE) / !defined(_M_CEE) vvv\r\n            _Facet_Register(_Pfmod);\r\n#endif // ^^^ !defined(_M_CEE) ^^^\r\n\r\n            _Pfmod->_Incref();\r\n            _Facetptr<_Facet>::_Psave = _Psave;\r\n            _Pf                       = _Psave;\r\n\r\n            (void) _Psave_guard.release();\r\n        }\r\n    }\r\n\r\n    return static_cast<const _Facet&>(*_Pf); // should be dynamic_cast\r\n    _END_LOCK()\r\n} // end of use_facet body\r\n\r\n#ifdef _CRTBLD\r\ntemplate <class _Elem>\r\nconstexpr bool _Is_wchar_or_crtbld_ushort = _Is_any_of_v<remove_cv_t<_Elem>, wchar_t, unsigned short>;\r\n#else // ^^^ defined(_CRTBLD) / !defined(_CRTBLD) vvv\r\ntemplate <class _Elem>\r\nconstexpr bool _Is_wchar_or_crtbld_ushort = is_same_v<remove_cv_t<_Elem>, wchar_t>;\r\n#endif // ^^^ !defined(_CRTBLD) ^^^\r\n\r\ntemplate <class _Elem>\r\nchar _Maklocbyte(_Elem _Char, const _Locinfo::_Cvtvec& _Cvt) {\r\n    // convert _Elem to char using _Cvtvec\r\n    if constexpr (_Is_wchar_or_crtbld_ushort<_Elem>) {\r\n        char _Byte       = '\\0';\r\n        mbstate_t _Mbst1 = {};\r\n        _Wcrtomb(&_Byte, static_cast<wchar_t>(_Char), &_Mbst1, &_Cvt); // no-op cast if _Elem is wchar_t\r\n        return _Byte;\r\n    } else {\r\n        return static_cast<char>(static_cast<unsigned char>(_Char));\r\n    }\r\n}\r\n\r\ntemplate <class _Elem>\r\n_Elem _Maklocchr(char _Byte, const _Locinfo::_Cvtvec& _Cvt) {\r\n    // convert char to _Elem using _Cvtvec\r\n    if constexpr (_Is_wchar_or_crtbld_ushort<_Elem>) {\r\n        _Elem _Wc{};\r\n        mbstate_t _Mbst1 = {};\r\n        _Mbrtowc(reinterpret_cast<wchar_t*>(&_Wc), &_Byte, 1, &_Mbst1, &_Cvt); // no-op cast if _Elem is wchar_t\r\n        return _Wc;\r\n    } else {\r\n        return static_cast<_Elem>(static_cast<unsigned char>(_Byte));\r\n    }\r\n}\r\n\r\ntemplate <class _Elem>\r\n_Elem* _Maklocstr(const char* _Ptr, const _Locinfo::_Cvtvec& _Cvt) {\r\n    // convert C string to _Elem sequence using _Cvtvec\r\n    if constexpr (_Is_wchar_or_crtbld_ushort<_Elem>) {\r\n        size_t _Wchars    = 0;\r\n        const char* _Ptr1 = _Ptr;\r\n        _Elem _Wc;\r\n        mbstate_t _Mbst1 = {};\r\n\r\n        const size_t _Count1 = _CSTD strlen(_Ptr) + 1;\r\n        for (size_t _Count = _Count1; 0 < _Count; ++_Wchars) {\r\n            const int _Bytes = _Mbrtowc(reinterpret_cast<wchar_t*>(&_Wc), // no-op cast if _Elem is wchar_t\r\n                _Ptr1, _Count, &_Mbst1, &_Cvt);\r\n            if (_Bytes <= 0) {\r\n                break;\r\n            }\r\n            _Count -= _Bytes;\r\n            _Ptr1 += _Bytes;\r\n        }\r\n\r\n        ++_Wchars; // count terminating nul\r\n\r\n        wchar_t* _Ptrdest =\r\n            static_cast<wchar_t*>(_calloc_dbg(_Wchars, sizeof(wchar_t), _CRT_BLOCK, __FILE__, __LINE__));\r\n\r\n        if (!_Ptrdest) {\r\n            _Xbad_alloc();\r\n        }\r\n\r\n        wchar_t* _Ptrnext = _Ptrdest;\r\n        mbstate_t _Mbst2  = {};\r\n\r\n        for (; 0 < _Wchars; --_Wchars, ++_Ptrnext) {\r\n            const int _Bytes = _Mbrtowc(_Ptrnext, _Ptr, _Count1, &_Mbst2, &_Cvt);\r\n            if (_Bytes <= 0) {\r\n                break;\r\n            }\r\n            _Ptr += _Bytes;\r\n        }\r\n\r\n        *_Ptrnext = L'\\0';\r\n\r\n        return reinterpret_cast<_Elem*>(_Ptrdest); // no-op cast if _Elem is wchar_t\r\n    } else {\r\n        size_t _Count = _CSTD strlen(_Ptr) + 1;\r\n\r\n        _Elem* _Ptrdest = static_cast<_Elem*>(_calloc_dbg(_Count, sizeof(_Elem), _CRT_BLOCK, __FILE__, __LINE__));\r\n\r\n        if (!_Ptrdest) {\r\n            _Xbad_alloc();\r\n        }\r\n\r\n        for (_Elem* _Ptrnext = _Ptrdest; 0 < _Count; --_Count, ++_Ptrnext, ++_Ptr) {\r\n            *_Ptrnext = static_cast<_Elem>(static_cast<unsigned char>(*_Ptr));\r\n        }\r\n\r\n        return _Ptrdest;\r\n    }\r\n}\r\n\r\n_EXPORT_STD extern \"C++\" class _CRTIMP2_PURE_IMPORT codecvt_base // base class for codecvt\r\n    : public locale::facet // TRANSITION, ABI, shouldn't be derived from locale::facet\r\n{\r\npublic:\r\n    enum { // constants for different parse states\r\n        ok,\r\n        partial,\r\n        error,\r\n        noconv\r\n    };\r\n    using result = int;\r\n\r\n    __CLR_OR_THIS_CALL codecvt_base(size_t _Refs = 0) noexcept // strengthened\r\n        : locale::facet(_Refs) {}\r\n\r\n    bool __CLR_OR_THIS_CALL always_noconv() const noexcept {\r\n        // return true if conversions never change input (from codecvt)\r\n        return do_always_noconv();\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL max_length() const noexcept {\r\n        // return maximum length required for a conversion (from codecvt)\r\n        return do_max_length();\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL encoding() const noexcept {\r\n        return do_encoding();\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ~codecvt_base() noexcept {}\r\n\r\nprotected:\r\n    virtual bool __CLR_OR_THIS_CALL do_always_noconv() const noexcept {\r\n        // return true if conversions never change input (from codecvt)\r\n        return false;\r\n    }\r\n\r\n    virtual int __CLR_OR_THIS_CALL do_max_length() const noexcept {\r\n        // return maximum length required for a conversion (from codecvt)\r\n        return 1;\r\n    }\r\n\r\n    virtual int __CLR_OR_THIS_CALL do_encoding() const noexcept {\r\n        return 1; // -1 ==> state dependent, 0 ==> varying length\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_one_byte_char_like_v = _Is_any_of_v<remove_cv_t<_Ty>, signed char, unsigned char,\r\n#ifdef __cpp_lib_byte\r\n    byte,\r\n#endif // defined(__cpp_lib_byte)\r\n#ifdef __cpp_char8_t\r\n    char8_t,\r\n#endif // defined(__cpp_char8_t)\r\n    char>;\r\n\r\ntemplate <class _Elem, class _Byte>\r\nconstexpr bool _Is_codecvt_do_always_noconv_v =\r\n    is_same_v<_Byte, _Elem> || (_Is_one_byte_char_like_v<_Byte> && _Is_one_byte_char_like_v<_Elem>);\r\n\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _Byte, class _Statype>\r\nclass codecvt : public codecvt_base { // facet for converting between _Elem and _Byte sequences\r\npublic:\r\n    // Explicitly specialized below:\r\n    // codecvt<wchar_t, char, mbstate_t>\r\n    // codecvt<unsigned short, char, mbstate_t> (extension)\r\n    // codecvt<char16_t, char, mbstate_t>\r\n    // codecvt<char32_t, char, mbstate_t>\r\n    // codecvt<char16_t, char8_t, mbstate_t>\r\n    // codecvt<char32_t, char8_t, mbstate_t>\r\n\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || is_same_v<codecvt, codecvt<char, char, mbstate_t>>,\r\n        _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    using intern_type = _Elem;\r\n    using extern_type = _Byte;\r\n    using state_type  = _Statype;\r\n\r\n    result __CLR_OR_THIS_CALL in(_Statype& _State, const _Byte* _First1, const _Byte* _Last1, const _Byte*& _Mid1,\r\n        _Elem* _First2, _Elem* _Last2, _Elem*& _Mid2) const { // convert bytes [_First1, _Last1) to [_First2, _Last2)\r\n        return do_in(_State, _First1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    result __CLR_OR_THIS_CALL out(_Statype& _State, const _Elem* _First1, const _Elem* _Last1, const _Elem*& _Mid1,\r\n        _Byte* _First2, _Byte* _Last2, _Byte*& _Mid2) const { // convert [_First1, _Last1) to bytes [_First2, _Last2)\r\n        return do_out(_State, _First1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    result __CLR_OR_THIS_CALL unshift(_Statype& _State, _Byte* _First2, _Byte* _Last2, _Byte*& _Mid2) const {\r\n        // generate bytes to return to default shift state\r\n        return do_unshift(_State, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL length(_Statype& _State, const _Byte* _First1, const _Byte* _Last1, size_t _Count) const {\r\n        // return p - _First1, for the largest value p in [_First1, _Last1] such that [_First1, p) successfully\r\n        // converts to at most _Count _Elems\r\n        return do_length(_State, _First1, _Last1, _Count);\r\n    }\r\n\r\n    __PURE_APPDOMAIN_GLOBAL static locale::id id; // unique facet id\r\n\r\n    explicit __CLR_OR_THIS_CALL codecvt(size_t _Refs = 0) : codecvt_base(_Refs) {\r\n        _Init(_Locinfo());\r\n    }\r\n\r\n    explicit __CLR_OR_THIS_CALL codecvt(const _Locinfo& _Lobj, size_t _Refs = 0) : codecvt_base(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t __CLRCALL_OR_CDECL _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new codecvt(_Locinfo(_Ploc->_C_str()));\r\n        }\r\n\r\n        return _X_CTYPE;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~codecvt() noexcept override {}\r\n\r\n    void __CLR_OR_THIS_CALL _Init(const _Locinfo&) {} // initialize from _Locinfo object\r\n\r\n    bool __CLR_OR_THIS_CALL do_always_noconv() const noexcept override {\r\n        // return true if conversions never change input (from codecvt)\r\n        return _Is_codecvt_do_always_noconv_v<_Elem, _Byte>;\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_in(_Statype&, const _Byte* _First1, const _Byte* _Last1, const _Byte*& _Mid1,\r\n        _Elem* _First2, _Elem* _Last2, _Elem*& _Mid2) const { // convert bytes [_First1, _Last1) to [_First2, _Last2)\r\n        _Mid1 = _First1;\r\n        _Mid2 = _First2;\r\n        if constexpr (_Is_codecvt_do_always_noconv_v<_Elem, _Byte>) {\r\n            return noconv; // convert nothing\r\n        } else {\r\n            // types differ, copy one for one\r\n            for (; _Mid1 != _Last1; ++_Mid1, ++_Mid2) {\r\n                if (_Mid2 == _Last2) {\r\n                    return partial;\r\n                }\r\n                *_Mid2 = static_cast<_Elem>(*_Mid1);\r\n            }\r\n\r\n            return ok;\r\n        }\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_out(_Statype&, const _Elem* _First1, const _Elem* _Last1, const _Elem*& _Mid1,\r\n        _Byte* _First2, _Byte* _Last2, _Byte*& _Mid2) const { // convert [_First1, _Last1) to bytes [_First2, _Last2)\r\n        _Mid1 = _First1;\r\n        _Mid2 = _First2;\r\n        if constexpr (_Is_codecvt_do_always_noconv_v<_Elem, _Byte>) {\r\n            return noconv; // convert nothing\r\n        } else {\r\n            // types differ, copy one for one\r\n            for (; _Mid1 != _Last1; ++_Mid1, ++_Mid2) {\r\n                if (_Mid2 == _Last2) {\r\n                    return partial;\r\n                }\r\n                *_Mid2 = static_cast<_Byte>(*_Mid1);\r\n            }\r\n\r\n            return ok;\r\n        }\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_unshift(_Statype&, _Byte* _First2, _Byte*, _Byte*& _Mid2) const {\r\n        // generate bytes to return to default shift state\r\n        _Mid2 = _First2;\r\n        return noconv; // no termination required\r\n    }\r\n\r\n    virtual int __CLR_OR_THIS_CALL do_length(\r\n        _Statype&, const _Byte* _First1, const _Byte* _Last1, size_t _Count) const {\r\n        // return p - _First1, for the largest value p in [_First1, _Last1] such that [_First1, p) successfully\r\n        // converts to at most _Count _Elems\r\n        // assumes 1:1 conversion\r\n        const auto _Dist = static_cast<size_t>((_STD min) (_Last1 - _First1, ptrdiff_t{INT_MAX}));\r\n        return static_cast<int>((_STD min) (_Count, _Dist));\r\n    }\r\n};\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdllimport-static-field-def\"\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _Elem, class _Byte, class _Statype>\r\n__PURE_APPDOMAIN_GLOBAL locale::id codecvt<_Elem, _Byte, _Statype>::id;\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _CvtTy, class _Byte, class _Statype>\r\n_NODISCARD int _Codecvt_do_length(\r\n    const _CvtTy& _Cvt, _Statype& _State, const _Byte* _First1, const _Byte* _Last1, size_t _Count) {\r\n    // return p - _First1, for the largest value p in [_First1, _Last1] such that _Cvt will successfully convert\r\n    // [_First1, p) to at most _Count wide characters\r\n\r\n    _STL_DISABLE_DEPRECATED_WARNING\r\n    using _Elem = typename _CvtTy::intern_type;\r\n    _STL_RESTORE_DEPRECATED_WARNING\r\n\r\n    _Adl_verify_range(_First1, _Last1);\r\n    const auto _Old_first1 = _First1;\r\n\r\n    while (_Count > 0 && _First1 != _Last1) { // convert another wide character\r\n        const _Byte* _Mid1;\r\n        _Elem* _Mid2;\r\n        _Elem _Ch;\r\n\r\n        // test result of single wide-char conversion\r\n\r\n        _STL_DISABLE_DEPRECATED_WARNING\r\n        const auto _Result = _Cvt._CvtTy::do_in(_State, _First1, _Last1, _Mid1, &_Ch, &_Ch + 1, _Mid2);\r\n        _STL_RESTORE_DEPRECATED_WARNING\r\n\r\n        if (_Result != codecvt_base::ok) {\r\n            if (_Result == codecvt_base::noconv) {\r\n                _First1 += (_STD min) (static_cast<size_t>(_Last1 - _First1), _Count);\r\n            }\r\n\r\n            break; // error, noconv, or partial\r\n        }\r\n\r\n        if (_Mid2 == &_Ch + 1) {\r\n            --_Count; // do_in converted an output character\r\n        }\r\n\r\n        _First1 = _Mid1;\r\n    }\r\n\r\n    return static_cast<int>((_STD min) (_First1 - _Old_first1, ptrdiff_t{INT_MAX}));\r\n}\r\n\r\nenum _Codecvt_mode { _Consume_header = 4, _Generate_header = 2 };\r\n\r\nextern \"C++\" {\r\n\r\ntemplate <>\r\nclass _CRTIMP2_PURE_IMPORT_UNLESS_CODECVT_ID_SATELLITE _CXX20_DEPRECATE_CODECVT_FACETS\r\n    codecvt<char16_t, char, mbstate_t> : public codecvt_base {\r\n    // facet for converting between char16_t and UTF-8 byte sequences\r\npublic:\r\n    using intern_type = char16_t;\r\n    using extern_type = char;\r\n    using state_type  = mbstate_t;\r\n\r\n    result __CLR_OR_THIS_CALL in(mbstate_t& _State, const char* _First1, const char* _Last1, const char*& _Mid1,\r\n        char16_t* _First2, char16_t* _Last2, char16_t*& _Mid2) const {\r\n        // convert bytes [_First1, _Last1) to [_First2, _Last2)\r\n        return do_in(_State, _First1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    result __CLR_OR_THIS_CALL out(mbstate_t& _State, const char16_t* _First1, const char16_t* _Last1,\r\n        const char16_t*& _Mid1, char* _First2, char* _Last2, char*& _Mid2) const {\r\n        // convert [_First1, _Last1) to bytes [_First2, _Last2)\r\n        return do_out(_State, _First1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    result __CLR_OR_THIS_CALL unshift(mbstate_t& _State, char* _First2, char* _Last2, char*& _Mid2) const {\r\n        // generate bytes to return to default shift state\r\n        return do_unshift(_State, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL length(mbstate_t& _State, const char* _First1, const char* _Last1, size_t _Count) const {\r\n        // return p - _First1, for the largest value p in [_First1, _Last1] such that [_First1, p) successfully\r\n        // converts to at most _Count UTF-16 code units\r\n        return do_length(_State, _First1, _Last1, _Count);\r\n    }\r\n\r\n    _CRT_SATELLITE_CODECVT_IDS_NOIMPORT static locale::id id;\r\n\r\n    explicit __CLR_OR_THIS_CALL codecvt(size_t _Refs = 0)\r\n        : codecvt_base(_Refs), _Maxcode(0x10ffff), _Mode(_Consume_header) {\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    explicit __CLR_OR_THIS_CALL codecvt(const _Locinfo& _Lobj, size_t _Refs = 0)\r\n        : codecvt_base(_Refs), _Maxcode(0x10ffff), _Mode(_Consume_header) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL codecvt(\r\n        const _Locinfo& _Lobj, unsigned long _Maxcode_arg, _Codecvt_mode _Mode_arg, size_t _Refs = 0)\r\n        : codecvt_base(_Refs), _Maxcode(_Maxcode_arg), _Mode(_Mode_arg) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t __CLRCALL_OR_CDECL _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            _STL_DISABLE_DEPRECATED_WARNING\r\n            *_Ppf = new codecvt(_Locinfo(_Ploc->_C_str()));\r\n            _STL_RESTORE_DEPRECATED_WARNING\r\n        }\r\n\r\n        return _X_CTYPE;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~codecvt() noexcept override {}\r\n\r\n    void __CLR_OR_THIS_CALL _Init(const _Locinfo&) {} // initialize\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_in(mbstate_t& _State, const char* _First1, const char* _Last1,\r\n        const char*& _Mid1, char16_t* _First2, char16_t* _Last2, char16_t*& _Mid2) const {\r\n        // convert bytes [_First1, _Last1) to [_First2, _Last2)\r\n        unsigned short* _Pstate = reinterpret_cast<unsigned short*>(&_State);\r\n        _Mid1                   = _First1;\r\n        _Mid2                   = _First2;\r\n\r\n        while (_Mid1 != _Last1 && _Mid2 != _Last2) { // convert a multibyte sequence\r\n            unsigned char _By = static_cast<unsigned char>(*_Mid1);\r\n            unsigned long _Ch;\r\n            int _Nextra;\r\n            int _Nskip;\r\n\r\n            if (*_Pstate > 1) {\r\n                if (_By < 0x80 || 0xc0 <= _By) {\r\n                    return codecvt::error; // not continuation byte\r\n                }\r\n\r\n                // deliver second half of two-word value\r\n                ++_Mid1;\r\n                *_Mid2++ = static_cast<char16_t>(*_Pstate | (_By & 0x3f));\r\n                *_Pstate = 1;\r\n                continue;\r\n            }\r\n\r\n            if (_By < 0x80u) {\r\n                _Ch     = _By;\r\n                _Nextra = 0;\r\n            } else if (_By < 0xc0u) { // 0x80-0xbf not first byte\r\n                ++_Mid1;\r\n                return codecvt::error;\r\n            } else if (_By < 0xe0u) {\r\n                _Ch     = static_cast<unsigned long>(_By & 0x1f);\r\n                _Nextra = 1;\r\n            } else if (_By < 0xf0u) {\r\n                _Ch     = static_cast<unsigned long>(_By & 0x0f);\r\n                _Nextra = 2;\r\n            } else if (_By < 0xf8u) {\r\n                _Ch     = static_cast<unsigned long>(_By & 0x07);\r\n                _Nextra = 3;\r\n            } else {\r\n                _Ch     = static_cast<unsigned long>(_By & 0x03);\r\n                _Nextra = _By < 0xfc ? 4 : 5;\r\n            }\r\n\r\n            _Nskip  = _Nextra < 3 ? 0 : 1; // leave a byte for 2nd word\r\n            _First1 = _Mid1; // roll back point\r\n\r\n            if (_Nextra == 0) {\r\n                ++_Mid1;\r\n            } else if (_Last1 - _Mid1 < _Nextra + 1 - _Nskip) {\r\n                break; // not enough input\r\n            } else {\r\n                for (++_Mid1; _Nskip < _Nextra; --_Nextra, ++_Mid1) {\r\n                    if ((_By = static_cast<unsigned char>(*_Mid1)) < 0x80u || 0xc0u <= _By) {\r\n                        return codecvt::error; // not continuation byte\r\n                    } else {\r\n                        _Ch = _Ch << 6 | (_By & 0x3f);\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (0 < _Nskip) {\r\n                _Ch <<= 6; // get last byte on next call\r\n            }\r\n\r\n            if ((_Maxcode < 0x10ffffu ? _Maxcode : 0x10ffffu) < _Ch) {\r\n                return codecvt::error; // value too large\r\n            }\r\n\r\n            if (0xffffu < _Ch) { // deliver first half of two-word value, save second word\r\n                unsigned short _Ch0 = static_cast<unsigned short>(0xd800 | (_Ch >> 10) - 0x0040);\r\n\r\n                *_Mid2++ = static_cast<char16_t>(_Ch0);\r\n                *_Pstate = static_cast<unsigned short>(0xdc00 | (_Ch & 0x03ff));\r\n                continue;\r\n            }\r\n\r\n            if (_Nskip != 0) {\r\n                if (_Mid1 == _Last1) { // not enough bytes, noncanonical value\r\n                    _Mid1 = _First1;\r\n                    break;\r\n                }\r\n\r\n                if ((_By = static_cast<unsigned char>(*_Mid1++)) < 0x80u || 0xc0u <= _By) {\r\n                    return codecvt::error; // not continuation byte\r\n                }\r\n\r\n                _Ch |= _By & 0x3f; // complete noncanonical value\r\n            }\r\n\r\n            if (*_Pstate == 0u) { // first time, maybe look for and consume header\r\n                *_Pstate = 1;\r\n\r\n                if ((_Mode & _Consume_header) != 0 && _Ch == 0xfeffu) { // drop header and retry\r\n                    const result _Ans = do_in(_State, _Mid1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n\r\n                    if (_Ans == codecvt::partial) { // roll back header determination\r\n                        *_Pstate = 0;\r\n                        _Mid1    = _First1;\r\n                    }\r\n\r\n                    return _Ans;\r\n                }\r\n            }\r\n\r\n            *_Mid2++ = static_cast<char16_t>(_Ch);\r\n        }\r\n\r\n        return _First1 == _Mid1 ? codecvt::partial : codecvt::ok;\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_out(mbstate_t& _State, const char16_t* _First1, const char16_t* _Last1,\r\n        const char16_t*& _Mid1, char* _First2, char* _Last2, char*& _Mid2) const {\r\n        // convert [_First1, _Last1) to bytes [_First2, _Last2)\r\n        unsigned short* _Pstate = reinterpret_cast<unsigned short*>(&_State);\r\n        _Mid1                   = _First1;\r\n        _Mid2                   = _First2;\r\n\r\n        while (_Mid1 != _Last1 && _Mid2 != _Last2) { // convert and put a wide char\r\n            unsigned long _Ch;\r\n            const unsigned short _Ch1 = static_cast<unsigned short>(*_Mid1);\r\n            bool _Save                = false;\r\n\r\n            if (1 < *_Pstate) { // get saved MS 11 bits from *_Pstate\r\n                if (_Ch1 < 0xdc00u || 0xe000u <= _Ch1) {\r\n                    return codecvt::error; // bad second word\r\n                }\r\n\r\n                _Ch = static_cast<unsigned long>((*_Pstate << 10) | (_Ch1 - 0xdc00));\r\n            } else if (0xd800u <= _Ch1 && _Ch1 < 0xdc00u) { // get new first word\r\n                _Ch   = static_cast<unsigned long>((_Ch1 - 0xd800 + 0x0040) << 10);\r\n                _Save = true; // put only first byte, rest with second word\r\n            } else {\r\n                _Ch = _Ch1; // not first word, just put it\r\n            }\r\n\r\n            char _By;\r\n            int _Nextra;\r\n\r\n            if (_Ch < 0x0080u) {\r\n                _By     = static_cast<char>(_Ch);\r\n                _Nextra = 0;\r\n            } else if (_Ch < 0x0800u) {\r\n                _By     = static_cast<char>(0xc0 | _Ch >> 6);\r\n                _Nextra = 1;\r\n            } else if (_Ch < 0x10000u) {\r\n                _By     = static_cast<char>(0xe0 | _Ch >> 12);\r\n                _Nextra = 2;\r\n            } else {\r\n                _By     = static_cast<char>(0xf0 | _Ch >> 18);\r\n                _Nextra = 3;\r\n            }\r\n\r\n            int _Nput = _Nextra < 3 ? _Nextra + 1 : _Save ? 1 : 3;\r\n\r\n            if (_Last2 - _Mid2 < _Nput) {\r\n                break; // not enough room, even without header\r\n            }\r\n\r\n            if (*_Pstate == 0u && (_Mode & _Generate_header) != 0) {\r\n                if (_Last2 - _Mid2 < 3 + _Nput) {\r\n                    break; // not enough room for header + output\r\n                }\r\n\r\n                // prepend header\r\n                *_Mid2++ = '\\xef';\r\n                *_Mid2++ = '\\xbb';\r\n                *_Mid2++ = '\\xbf';\r\n            }\r\n\r\n            ++_Mid1;\r\n            if (_Save || _Nextra < 3) { // put first byte of sequence, if not already put\r\n                *_Mid2++ = _By;\r\n                --_Nput;\r\n            }\r\n\r\n            for (; 0 < _Nput; --_Nput) {\r\n                *_Mid2++ = static_cast<char>((_Ch >> 6 * --_Nextra & 0x3f) | 0x80);\r\n            }\r\n\r\n            *_Pstate = static_cast<unsigned short>(_Save ? _Ch >> 10 : 1);\r\n        }\r\n\r\n        return _First1 == _Mid1 ? codecvt::partial : codecvt::ok;\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_unshift(mbstate_t& _State, char* _First2, char*, char*& _Mid2) const {\r\n        // generate bytes to return to default shift state\r\n        unsigned short* _Pstate = reinterpret_cast<unsigned short*>(&_State);\r\n        _Mid2                   = _First2;\r\n\r\n        return 1u < *_Pstate ? codecvt::error : codecvt::ok; // fail if trailing first word\r\n    }\r\n\r\n    friend int _Codecvt_do_length<>(const codecvt&, mbstate_t&, const char*, const char*, size_t);\r\n\r\n    virtual int __CLR_OR_THIS_CALL do_length(\r\n        mbstate_t& _State, const char* _First1, const char* _Last1, size_t _Count) const {\r\n        return _Codecvt_do_length(*this, _State, _First1, _Last1, _Count);\r\n    }\r\n\r\n    bool __CLR_OR_THIS_CALL do_always_noconv() const noexcept override {\r\n        // return true if conversions never change input\r\n        return false;\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_max_length() const noexcept override {\r\n        // return maximum length required for a conversion\r\n\r\n        if ((_Mode & _Consume_header) != 0) {\r\n            return 9; // header + max input\r\n        }\r\n\r\n        if ((_Mode & _Generate_header) != 0) {\r\n            return 7; // header + max output\r\n        }\r\n\r\n        return 6; // 6-byte max input sequence, no 3-byte header\r\n    }\r\n\r\n    int do_encoding() const noexcept override {\r\n        return 0; // 0 => varying length\r\n    }\r\n\r\nprivate:\r\n    unsigned long _Maxcode; // default: 0x10ffff\r\n    _Codecvt_mode _Mode; // default: _Consume_header\r\n};\r\n\r\ntemplate <>\r\nclass _CRTIMP2_PURE_IMPORT_UNLESS_CODECVT_ID_SATELLITE _CXX20_DEPRECATE_CODECVT_FACETS\r\n    codecvt<char32_t, char, mbstate_t> : public codecvt_base {\r\n    // facet for converting between char32_t and UTF-8 byte sequences\r\npublic:\r\n    using intern_type = char32_t;\r\n    using extern_type = char;\r\n    using state_type  = mbstate_t;\r\n\r\n    result __CLR_OR_THIS_CALL in(mbstate_t& _State, const char* _First1, const char* _Last1, const char*& _Mid1,\r\n        char32_t* _First2, char32_t* _Last2, char32_t*& _Mid2) const {\r\n        // convert bytes [_First1, _Last1) to [_First2, _Last2)\r\n        return do_in(_State, _First1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    result __CLR_OR_THIS_CALL out(mbstate_t& _State, const char32_t* _First1, const char32_t* _Last1,\r\n        const char32_t*& _Mid1, char* _First2, char* _Last2, char*& _Mid2) const {\r\n        // convert [_First1, _Last1) to bytes [_First2, _Last2)\r\n        return do_out(_State, _First1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    result __CLR_OR_THIS_CALL unshift(mbstate_t& _State, char* _First2, char* _Last2, char*& _Mid2) const {\r\n        // generate bytes to return to default shift state\r\n        return do_unshift(_State, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL length(mbstate_t& _State, const char* _First1, const char* _Last1, size_t _Count) const {\r\n        // return p - _First1, for the largest value p in [_First1, _Last1] such that [_First1, p) successfully\r\n        // converts to at most _Count UTF-32 code units\r\n        return do_length(_State, _First1, _Last1, _Count);\r\n    }\r\n\r\n    _CRT_SATELLITE_CODECVT_IDS_NOIMPORT static locale::id id;\r\n\r\n    explicit __CLR_OR_THIS_CALL codecvt(size_t _Refs = 0)\r\n        : codecvt_base(_Refs), _Maxcode(0xffffffff), _Mode(_Consume_header) {\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    explicit __CLR_OR_THIS_CALL codecvt(const _Locinfo& _Lobj, size_t _Refs = 0)\r\n        : codecvt_base(_Refs), _Maxcode(0xffffffff), _Mode(_Consume_header) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL codecvt(\r\n        const _Locinfo& _Lobj, unsigned long _Maxcode_arg, _Codecvt_mode _Mode_arg, size_t _Refs = 0)\r\n        : codecvt_base(_Refs), _Maxcode(_Maxcode_arg), _Mode(_Mode_arg) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t __CLRCALL_OR_CDECL _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            _STL_DISABLE_DEPRECATED_WARNING\r\n            *_Ppf = new codecvt(_Locinfo(_Ploc->_C_str()));\r\n            _STL_RESTORE_DEPRECATED_WARNING\r\n        }\r\n\r\n        return _X_CTYPE;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~codecvt() noexcept override {}\r\n\r\n    void __CLR_OR_THIS_CALL _Init(const _Locinfo&) {} // initialize\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_in(mbstate_t& _State, const char* _First1, const char* _Last1,\r\n        const char*& _Mid1, char32_t* _First2, char32_t* _Last2, char32_t*& _Mid2) const {\r\n        // convert bytes [_First1, _Last1) to [_First2, _Last2)\r\n        char* _Pstate = reinterpret_cast<char*>(&_State);\r\n        _Mid1         = _First1;\r\n        _Mid2         = _First2;\r\n\r\n        while (_Mid1 != _Last1 && _Mid2 != _Last2) { // convert a multibyte sequence\r\n            unsigned char _By = static_cast<unsigned char>(*_Mid1);\r\n            unsigned long _Ch;\r\n            int _Nextra;\r\n\r\n            if (_By < 0x80u) {\r\n                _Ch     = _By;\r\n                _Nextra = 0;\r\n            } else if (_By < 0xc0u) { // 0x80-0xbf not first byte\r\n                ++_Mid1;\r\n                return codecvt::error;\r\n            } else if (_By < 0xe0u) {\r\n                _Ch     = static_cast<unsigned long>(_By & 0x1f);\r\n                _Nextra = 1;\r\n            } else if (_By < 0xf0u) {\r\n                _Ch     = static_cast<unsigned long>(_By & 0x0f);\r\n                _Nextra = 2;\r\n            } else if (_By < 0xf8u) {\r\n                _Ch     = static_cast<unsigned long>(_By & 0x07);\r\n                _Nextra = 3;\r\n            } else {\r\n                _Ch     = static_cast<unsigned long>(_By & 0x03);\r\n                _Nextra = _By < 0xfc ? 4 : 5;\r\n            }\r\n\r\n            if (_Nextra == 0) {\r\n                ++_Mid1;\r\n            } else if (_Last1 - _Mid1 < _Nextra + 1) {\r\n                break; // not enough input\r\n            } else {\r\n                for (++_Mid1; 0 < _Nextra; --_Nextra, ++_Mid1) {\r\n                    if ((_By = static_cast<unsigned char>(*_Mid1)) < 0x80u || 0xc0u <= _By) {\r\n                        return codecvt::error; // not continuation byte\r\n                    } else {\r\n                        _Ch = _Ch << 6 | (_By & 0x3f);\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (*_Pstate == 0) { // first time, maybe look for and consume header\r\n                *_Pstate = 1;\r\n\r\n                if ((_Mode & _Consume_header) != 0 && _Ch == 0xfeffu) { // drop header and retry\r\n                    const result _Ans = do_in(_State, _Mid1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n\r\n                    if (_Ans == codecvt::partial) { // roll back header determination\r\n                        *_Pstate = 0;\r\n                        _Mid1    = _First1;\r\n                    }\r\n                    return _Ans;\r\n                }\r\n            }\r\n\r\n            if (_Maxcode < _Ch) {\r\n                return codecvt::error; // code too large\r\n            }\r\n\r\n            *_Mid2++ = static_cast<char32_t>(_Ch);\r\n        }\r\n\r\n        return _First1 == _Mid1 ? codecvt::partial : codecvt::ok;\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_out(mbstate_t& _State, const char32_t* _First1, const char32_t* _Last1,\r\n        const char32_t*& _Mid1, char* _First2, char* _Last2, char*& _Mid2) const {\r\n        // convert [_First1, _Last1) to bytes [_First2, _Last2)\r\n        char* _Pstate = reinterpret_cast<char*>(&_State);\r\n        _Mid1         = _First1;\r\n        _Mid2         = _First2;\r\n\r\n        while (_Mid1 != _Last1 && _Mid2 != _Last2) { // convert and put a wide char\r\n            char _By;\r\n            int _Nextra;\r\n            unsigned long _Ch = static_cast<unsigned long>(*_Mid1);\r\n\r\n            if (_Maxcode < _Ch) {\r\n                return codecvt::error;\r\n            }\r\n\r\n            if (_Ch < 0x0080u) {\r\n                _By     = static_cast<char>(_Ch);\r\n                _Nextra = 0;\r\n            } else if (_Ch < 0x0800u) {\r\n                _By     = static_cast<char>(0xc0 | _Ch >> 6);\r\n                _Nextra = 1;\r\n            } else if (_Ch < 0x00010000u) {\r\n                _By     = static_cast<char>(0xe0 | _Ch >> 12);\r\n                _Nextra = 2;\r\n            } else if (_Ch < 0x00200000u) {\r\n                _By     = static_cast<char>(0xf0 | _Ch >> 18);\r\n                _Nextra = 3;\r\n            } else if (_Ch < 0x04000000u) {\r\n                _By     = static_cast<char>(0xf8 | _Ch >> 24);\r\n                _Nextra = 4;\r\n            } else {\r\n                _By     = static_cast<char>(0xfc | (_Ch >> 30 & 0x03));\r\n                _Nextra = 5;\r\n            }\r\n\r\n            if (*_Pstate == 0) { // first time, maybe generate header\r\n                *_Pstate = 1;\r\n                if ((_Mode & _Generate_header) != 0) {\r\n                    if (_Last2 - _Mid2 < 3 + 1 + _Nextra) {\r\n                        return codecvt::partial; // not enough room for both\r\n                    }\r\n\r\n                    // prepend header\r\n                    *_Mid2++ = '\\xef';\r\n                    *_Mid2++ = '\\xbb';\r\n                    *_Mid2++ = '\\xbf';\r\n                }\r\n            }\r\n\r\n            if (_Last2 - _Mid2 < 1 + _Nextra) {\r\n                break; // not enough room for output\r\n            }\r\n\r\n            ++_Mid1;\r\n            for (*_Mid2++ = _By; 0 < _Nextra;) {\r\n                *_Mid2++ = static_cast<char>((_Ch >> 6 * --_Nextra & 0x3f) | 0x80);\r\n            }\r\n        }\r\n        return _First1 == _Mid1 ? codecvt::partial : codecvt::ok;\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_unshift(mbstate_t&, char* _First2, char*, char*& _Mid2) const {\r\n        // generate bytes to return to default shift state\r\n        _Mid2 = _First2;\r\n        return codecvt::noconv;\r\n    }\r\n\r\n    friend int _Codecvt_do_length<>(const codecvt&, mbstate_t&, const char*, const char*, size_t);\r\n\r\n    virtual int __CLR_OR_THIS_CALL do_length(\r\n        mbstate_t& _State, const char* _First1, const char* _Last1, size_t _Count) const {\r\n        return _Codecvt_do_length(*this, _State, _First1, _Last1, _Count);\r\n    }\r\n\r\n    bool __CLR_OR_THIS_CALL do_always_noconv() const noexcept override {\r\n        // return true if conversions never change input\r\n        return false;\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_max_length() const noexcept override {\r\n        // return maximum length required for a conversion\r\n        return (_Mode & (_Consume_header | _Generate_header)) != 0 ? 9 : 6;\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_encoding() const noexcept override {\r\n        // return length of code sequence (from codecvt)\r\n        return (_Mode & (_Consume_header | _Generate_header)) != 0 ? -1\r\n                                                                   : 0; // -1 => state dependent, 0 => varying length\r\n    }\r\n\r\nprivate:\r\n    unsigned long _Maxcode; // default: 0xffffffff\r\n    _Codecvt_mode _Mode; // default: _Consume_header\r\n};\r\n\r\n#if defined(__cpp_char8_t) && !defined(_M_CEE_PURE)\r\ntemplate <class _From, class _To>\r\nstruct _NODISCARD _Codecvt_guard {\r\n    const _From* const& _First1;\r\n    const _From*& _Mid1;\r\n    _To* const& _First2;\r\n    _To*& _Mid2;\r\n\r\n    _Codecvt_guard(const _From* const& _First1_, const _From*& _Mid1_, _To* const& _First2_, _To*& _Mid2_)\r\n        : _First1{_First1_}, _Mid1{_Mid1_}, _First2{_First2_}, _Mid2{_Mid2_} {}\r\n\r\n    _Codecvt_guard(const _Codecvt_guard&)            = delete;\r\n    _Codecvt_guard& operator=(const _Codecvt_guard&) = delete;\r\n\r\n    ~_Codecvt_guard() {\r\n        _Mid1 = _First1;\r\n        _Mid2 = _First2;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nclass _CXX20_DEPRECATE_CODECVT_CHAR8_T_FACETS codecvt<char16_t, char8_t, mbstate_t> : public codecvt_base {\r\n    // facet for converting between UTF-16 and UTF-8 sequences\r\npublic:\r\n    using intern_type = char16_t;\r\n    using extern_type = char8_t;\r\n    using state_type  = mbstate_t;\r\n\r\n    result in(mbstate_t& _State, const char8_t* _First1, const char8_t* _Last1, const char8_t*& _Mid1,\r\n        char16_t* _First2, char16_t* _Last2, char16_t*& _Mid2) const {\r\n        // convert UTF-8 [_First1, _Last1) to UTF-16 [_First2, _Last2)\r\n        return do_in(_State, _First1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    result out(mbstate_t& _State, const char16_t* _First1, const char16_t* _Last1, const char16_t*& _Mid1,\r\n        char8_t* _First2, char8_t* _Last2, char8_t*& _Mid2) const {\r\n        // convert UTF-16 [_First1, _Last1) to UTF-8 [_First2, _Last2)\r\n        return do_out(_State, _First1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    result unshift(mbstate_t& _State, char8_t* _First2, char8_t* _Last2, char8_t*& _Mid2) const {\r\n        // generate bytes to return to default shift state\r\n        return do_unshift(_State, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    int length(mbstate_t& _State, const char8_t* _First1, const char8_t* _Last1, size_t _Count) const {\r\n        // return p - _First1, for the largest value p in [_First1, _Last1] such that [_First1, p) successfully\r\n        // converts to at most _Count UTF-16 code units\r\n        return do_length(_State, _First1, _Last1, _Count);\r\n    }\r\n\r\n    _CRT_SATELLITE_CODECVT_IDS static locale::id id;\r\n\r\n    explicit codecvt(size_t _Refs = 0) : codecvt_base(_Refs) {} // construct \"from current locale\"\r\n    explicit codecvt(const _Locinfo&, size_t _Refs = 0) : codecvt_base(_Refs) {} // construct \"from specified locale\"\r\n\r\n    static size_t _Getcat(const locale::facet** _Ppf = nullptr, const locale* = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new codecvt;\r\n        }\r\n\r\n        return _X_CTYPE;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~codecvt() noexcept override = default;\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_in(mbstate_t&, const char8_t* _First1, const char8_t* _Last1,\r\n        const char8_t*& _Mid1, char16_t* _First2, char16_t* _Last2, char16_t*& _Mid2) const {\r\n        // convert UTF-8 [_First1, _Last1) to UTF-16 [_First2, _Last2)\r\n        _Adl_verify_range(_First1, _Last1);\r\n        _Adl_verify_range(_First2, _Last2);\r\n\r\n        _Codecvt_guard<char8_t, char16_t> _Guard{_First1, _Mid1, _First2, _Mid2};\r\n\r\n        for (; _First1 != _Last1; ++_First1, ++_First2) {\r\n            if (_First2 == _Last2) {\r\n                return partial;\r\n            }\r\n\r\n            char8_t _Lead_byte = *_First1;\r\n            if (_Lead_byte < 0b1000'0000u) { // single-byte sequence\r\n                *_First2 = static_cast<char16_t>(_Lead_byte);\r\n                continue;\r\n            }\r\n\r\n            int _Trailing_count = 1;\r\n            if (_Lead_byte < 0b1110'0000u) {\r\n                if (_Lead_byte < 0b1100'0000u) { // out-of-sequence trailing byte\r\n                    return error;\r\n                }\r\n\r\n                // lead byte of 2-byte sequence\r\n                _Lead_byte &= 0b0001'1111u;\r\n            } else if (_Lead_byte < 0b1111'0000u) { // lead byte of 3-byte sequence\r\n                _Lead_byte &= 0b0000'1111u;\r\n                _Trailing_count = 2;\r\n            } else if (_Lead_byte < 0b1111'1000u) { // lead byte of 4-byte sequence\r\n                if (_Last2 - _First2 < 2) { // not enough output for a surrogate pair\r\n                    return partial;\r\n                }\r\n\r\n                _Lead_byte &= 0b0000'0111u;\r\n                _Trailing_count = 3;\r\n            } else { // Invalid UTF-8 code unit\r\n                return error;\r\n            }\r\n\r\n            if (_Last1 - _First1 < _Trailing_count + 1) { // not enough input\r\n                return partial;\r\n            }\r\n\r\n            const char8_t* _Peek = _First1;\r\n            char32_t _Code_point = static_cast<char32_t>(_Lead_byte);\r\n            do {\r\n                const char8_t _By = *++_Peek;\r\n                if ((_By & 0b1100'0000u) != 0b1000'0000u) { // out-of-sequence lead byte\r\n                    return error;\r\n                }\r\n\r\n                _Code_point = (_Code_point << 6) | (_By & 0b11'1111u);\r\n            } while (--_Trailing_count != 0);\r\n\r\n            if (_Code_point < 0x10000u) {\r\n                if (_Code_point >= 0xd800u && _Code_point < 0xe000u) { // invalid code point (surrogate)\r\n                    return error;\r\n                }\r\n                // Output single code unit\r\n                *_First2 = static_cast<char16_t>(_Code_point);\r\n            } else if (_Code_point >= 0x110000u) { // Invalid code point (out of range)\r\n                return error;\r\n            } else {\r\n                // Output surrogate pair\r\n                _Code_point -= 0x10000u;\r\n                // High surrogate: 0xd800 | <upper ten bits>\r\n                *_First2 = static_cast<char16_t>(0xd800u | (_Code_point >> 10));\r\n                // Low surrogate: 0xdc00 | <lower ten bits>\r\n                *++_First2 = static_cast<char16_t>(0xdc00u | (_Code_point & 0b11'1111'1111u));\r\n            }\r\n\r\n            _First1 = _Peek;\r\n        }\r\n\r\n        return ok;\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_out(mbstate_t&, const char16_t* _First1, const char16_t* _Last1,\r\n        const char16_t*& _Mid1, char8_t* _First2, char8_t* _Last2, char8_t*& _Mid2) const {\r\n        // convert UTF-16 [_First1, _Last1) to UTF-8 [_First2, _Last2)\r\n        _Adl_verify_range(_First1, _Last1);\r\n        _Adl_verify_range(_First2, _Last2);\r\n\r\n        _Codecvt_guard<char16_t, char8_t> _Guard{_First1, _Mid1, _First2, _Mid2};\r\n\r\n        for (; _First1 != _Last1; ++_First1, ++_First2) {\r\n            if (_First2 == _Last2) { // no more output\r\n                return partial;\r\n            }\r\n\r\n            char32_t _Code_point = static_cast<char32_t>(*_First1);\r\n            if (_Code_point < 0x80u) { // encode 1-byte sequence\r\n                *_First2 = static_cast<char8_t>(_Code_point);\r\n                continue;\r\n            }\r\n\r\n            int _Trailing_count = 1;\r\n            if (_Code_point < 0x800u) { // encode 2-byte sequence\r\n                *_First2 = static_cast<char8_t>(0b1100'0000u | (_Code_point >> 6));\r\n            } else if (_Code_point < 0xd800u || _Code_point >= 0xe000u) { // encode 3-byte sequence\r\n                *_First2        = static_cast<char8_t>(0b1110'0000u | (_Code_point >> 12));\r\n                _Trailing_count = 2;\r\n            } else if (_Code_point < 0xdc00u) { // high surrogate; parse the low surrogate\r\n                if (_Last1 - _First1 < 2) { // not enough input\r\n                    return partial;\r\n                }\r\n\r\n                const char16_t _Low_surrogate = *++_First1;\r\n                if (_Low_surrogate < 0xdc00u || _Low_surrogate >= 0xe000u) { // invalid low surrogate\r\n                    --_First1;\r\n                    return error;\r\n                }\r\n                _Code_point = 0x10000u + (((_Code_point & 0b11'1111'1111u) << 10) | (_Low_surrogate & 0b11'1111'1111u));\r\n\r\n                // encode 4-byte sequence\r\n                *_First2        = static_cast<char8_t>(0b1111'0000u | (_Code_point >> 18));\r\n                _Trailing_count = 3;\r\n            } else { // out-of-sequence low surrogate\r\n                return error;\r\n            }\r\n\r\n            if (_Last2 - _First2 < _Trailing_count + 1) { // not enough output\r\n                if (_Trailing_count > 2) { // input was a surrogate pair; revert\r\n                    --_First1;\r\n                }\r\n                return partial;\r\n            }\r\n\r\n            do {\r\n                --_Trailing_count;\r\n                *++_First2 = static_cast<char8_t>(0b1000'0000u | ((_Code_point >> (6 * _Trailing_count)) & 0b11'1111u));\r\n            } while (_Trailing_count != 0);\r\n        }\r\n\r\n        return ok;\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_unshift(mbstate_t&, char8_t* _First2, char8_t*, char8_t*& _Mid2) const {\r\n        // terminate encoding sequence\r\n        _Mid2 = _First2;\r\n        return noconv; // no termination necessary\r\n    }\r\n\r\n    virtual int __CLR_OR_THIS_CALL do_length(\r\n        mbstate_t&, const char8_t* _First1, const char8_t* _Last1, size_t _Count) const {\r\n        // return p - _First1, for the largest value p in [_First1, _Last1] such that [_First1, p) successfully\r\n        // converts to at most _Count UTF-16 code units\r\n        _Adl_verify_range(_First1, _Last1);\r\n\r\n        const auto _Old_first1 = _First1;\r\n\r\n        for (; _First1 != _Last1 && _Count > 0u; ++_First1, --_Count) {\r\n            char32_t _Code_point = static_cast<char32_t>(*_First1);\r\n            if (_Code_point < 0b1000'0000u) { // single-byte sequence\r\n                continue;\r\n            }\r\n\r\n            int _Trailing_count = 1;\r\n            if (_Code_point < 0b1110'0000u) {\r\n                if (_Code_point < 0b1100'0000u) { // out-of-sequence trailing byte\r\n                    break;\r\n                }\r\n\r\n                // lead byte of 2-byte sequence\r\n                _Code_point &= 0b0001'1111u;\r\n            } else if (_Code_point < 0b1111'0000u) { // lead byte of 3-byte sequence\r\n                _Code_point &= 0b0000'1111u;\r\n                _Trailing_count = 2;\r\n            } else if (_Code_point < 0b1111'1000u) { // lead byte of 4-byte sequence\r\n                if (_Count < 2u) { // not enough output\r\n                    break;\r\n                }\r\n\r\n                _Code_point &= 0b0000'0111u;\r\n                _Trailing_count = 3;\r\n            } else { // Invalid UTF-8 code unit\r\n                break;\r\n            }\r\n\r\n            if (_Last1 - _First1 < _Trailing_count + 1) { // not enough input\r\n                break;\r\n            }\r\n\r\n            const char8_t* _Peek = _First1;\r\n            bool _Done           = false;\r\n            do {\r\n                const char8_t _By = *++_Peek;\r\n                if ((_By & 0b1100'0000u) != 0b1000'0000u) { // out-of-sequence lead byte\r\n                    _Done = true;\r\n                    break;\r\n                }\r\n\r\n                _Code_point = (_Code_point << 6) | (_By & 0b11'1111u);\r\n            } while (--_Trailing_count != 0);\r\n\r\n            if (_Done) {\r\n                break;\r\n            }\r\n\r\n            if (_Code_point < 0x10000u) { // Output single code unit\r\n                if (_Code_point >= 0xd800u && _Code_point < 0xe0000u) { // invalid code point (surrogate)\r\n                    break;\r\n                }\r\n            } else if (_Code_point < 0x110000u) { // Output surrogate pair\r\n                --_Count;\r\n            } else { // Invalid code point (out of range)\r\n                break;\r\n            }\r\n\r\n            _First1 = _Peek;\r\n        }\r\n\r\n        return static_cast<int>((_STD min) (_First1 - _Old_first1, ptrdiff_t{INT_MAX}));\r\n    }\r\n\r\n    bool __CLR_OR_THIS_CALL do_always_noconv() const noexcept override {\r\n        // return true if conversions never change input\r\n        return false;\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_max_length() const noexcept override {\r\n        // return maximum length required for a conversion\r\n        return 4; // 4-byte max input sequence\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_encoding() const noexcept override {\r\n        // return length of code sequence (from codecvt)\r\n        return 0; // 0 => varying length\r\n    }\r\n};\r\n\r\ntemplate <>\r\nclass _CXX20_DEPRECATE_CODECVT_CHAR8_T_FACETS codecvt<char32_t, char8_t, mbstate_t> : public codecvt_base {\r\n    // facet for converting between UTF-32 and UTF-8 sequences\r\npublic:\r\n    using intern_type = char32_t;\r\n    using extern_type = char8_t;\r\n    using state_type  = mbstate_t;\r\n\r\n    result in(mbstate_t& _State, const char8_t* _First1, const char8_t* _Last1, const char8_t*& _Mid1,\r\n        char32_t* _First2, char32_t* _Last2, char32_t*& _Mid2) const {\r\n        // convert UTF-8 [_First1, _Last1) to UTF-32 [_First2, _Last2)\r\n        return do_in(_State, _First1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    result out(mbstate_t& _State, const char32_t* _First1, const char32_t* _Last1, const char32_t*& _Mid1,\r\n        char8_t* _First2, char8_t* _Last2, char8_t*& _Mid2) const {\r\n        // convert UTF-32 [_First1, _Last1) to UTF-8 [_First2, _Last2)\r\n        return do_out(_State, _First1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    result unshift(mbstate_t& _State, char8_t* _First2, char8_t* _Last2, char8_t*& _Mid2) const {\r\n        // generate bytes to return to default shift state\r\n        return do_unshift(_State, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    int length(mbstate_t& _State, const char8_t* _First1, const char8_t* _Last1, size_t _Count) const {\r\n        // return p - _First1, for the largest value p in [_First1, _Last1] such that [_First1, p) successfully\r\n        // converts to at most _Count UTF-32 code units\r\n        return do_length(_State, _First1, _Last1, _Count);\r\n    }\r\n\r\n    _CRT_SATELLITE_CODECVT_IDS static locale::id id;\r\n\r\n    explicit codecvt(size_t _Refs = 0) : codecvt_base(_Refs) {} // construct \"from current locale\"\r\n    explicit codecvt(const _Locinfo&, size_t _Refs = 0) : codecvt_base(_Refs) {} // construct \"from specified locale\"\r\n\r\n    static size_t __CLRCALL_OR_CDECL _Getcat(const locale::facet** _Ppf = nullptr, const locale* = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new codecvt;\r\n        }\r\n\r\n        return _X_CTYPE;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~codecvt() noexcept override = default;\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_in(mbstate_t&, const char8_t* _First1, const char8_t* _Last1,\r\n        const char8_t*& _Mid1, char32_t* _First2, char32_t* _Last2, char32_t*& _Mid2) const {\r\n        // convert UTF-8 [_First1, _Last1) to UTF-32 [_First2, _Last2)\r\n        _Adl_verify_range(_First1, _Last1);\r\n        _Adl_verify_range(_First2, _Last2);\r\n\r\n        _Codecvt_guard<char8_t, char32_t> _Guard{_First1, _Mid1, _First2, _Mid2};\r\n\r\n        for (; _First1 != _Last1; ++_First1, ++_First2) {\r\n            if (_First2 == _Last2) {\r\n                return partial;\r\n            }\r\n\r\n            char8_t _Lead_byte = *_First1;\r\n            if (_Lead_byte < 0b1000'0000u) { // single-byte sequence\r\n                *_First2 = static_cast<char32_t>(_Lead_byte);\r\n                continue;\r\n            }\r\n\r\n            int _Trailing_count = 1;\r\n            if (_Lead_byte < 0b1110'0000u) {\r\n                if (_Lead_byte < 0b1100'0000u) { // out-of-sequence trailing byte\r\n                    return partial;\r\n                }\r\n\r\n                // lead byte of 2-byte sequence\r\n                _Lead_byte &= 0b0001'1111u;\r\n            } else if (_Lead_byte < 0b1111'0000u) { // lead byte of 3-byte sequence\r\n                _Lead_byte &= 0b0000'1111u;\r\n                _Trailing_count = 2;\r\n            } else if (_Lead_byte < 0b1111'1000u) { // lead byte of 4-byte sequence\r\n                _Lead_byte &= 0b0000'0111u;\r\n                _Trailing_count = 3;\r\n            } else { // invalid UTF-8 code unit\r\n                return error;\r\n            }\r\n\r\n            if (_Last1 - _First1 < _Trailing_count + 1) { // not enough input\r\n                return partial;\r\n            }\r\n\r\n            const char8_t* _Peek = _First1;\r\n            char32_t _Code_point = static_cast<char32_t>(_Lead_byte);\r\n            do {\r\n                const char8_t _By = *++_Peek;\r\n                if ((_By & 0b1100'0000u) != 0b1000'0000u) { // out-of-sequence lead byte\r\n                    return error;\r\n                }\r\n\r\n                _Code_point = (_Code_point << 6) | (_By & 0b11'1111u);\r\n            } while (--_Trailing_count != 0);\r\n\r\n            if (_Code_point >= 0xd800u && (_Code_point < 0xe000u || _Code_point >= 0x110000u)) {\r\n                // invalid code point (surrogate or out of range)\r\n                return error;\r\n            }\r\n\r\n            _First1  = _Peek;\r\n            *_First2 = _Code_point;\r\n        }\r\n\r\n        return ok;\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_out(mbstate_t&, const char32_t* _First1, const char32_t* _Last1,\r\n        const char32_t*& _Mid1, char8_t* _First2, char8_t* _Last2, char8_t*& _Mid2) const {\r\n        // convert UTF-32 [_First1, _Last1) to UTF-8 [_First2, _Last2)\r\n        _Adl_verify_range(_First1, _Last1);\r\n        _Adl_verify_range(_First2, _Last2);\r\n\r\n        _Codecvt_guard<char32_t, char8_t> _Guard{_First1, _Mid1, _First2, _Mid2};\r\n\r\n        for (; _First1 != _Last1; ++_First1, ++_First2) {\r\n            if (_First2 == _Last2) { // no more output\r\n                return partial;\r\n            }\r\n\r\n            const char32_t _Code_point = *_First1;\r\n            if (_Code_point < 0x80u) { // encode 1-byte sequence\r\n                *_First2 = static_cast<char8_t>(_Code_point);\r\n                continue;\r\n            }\r\n\r\n            int _Trailing_count = 1;\r\n            if (_Code_point < 0x800u) { // encode 2-byte sequence\r\n                *_First2 = static_cast<char8_t>(0b1100'0000u | (_Code_point >> 6));\r\n            } else if (_Code_point < 0x10000u) { // encode 3-byte sequence\r\n                if (_Code_point >= 0xd800u && _Code_point < 0xe000u) { // invalid code point (surrogate)\r\n                    return error;\r\n                }\r\n\r\n                *_First2        = static_cast<char8_t>(0b1110'0000u | (_Code_point >> 12));\r\n                _Trailing_count = 2;\r\n            } else if (_Code_point < 0x110000u) { // encode 4-byte sequence\r\n                *_First2        = static_cast<char8_t>(0b1111'0000u | (_Code_point >> 18));\r\n                _Trailing_count = 3;\r\n            } else { // Invalid code point (out of range)\r\n                return error;\r\n            }\r\n\r\n            if (_Last2 - _First2 < _Trailing_count + 1) { // not enough output\r\n                return partial;\r\n            }\r\n\r\n            do {\r\n                --_Trailing_count;\r\n                *++_First2 = static_cast<char8_t>(0b1000'0000u | ((_Code_point >> (6 * _Trailing_count)) & 0b11'1111u));\r\n            } while (_Trailing_count != 0);\r\n        }\r\n\r\n        return ok;\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_unshift(mbstate_t&, char8_t* _First2, char8_t*, char8_t*& _Mid2) const {\r\n        // terminate encoding sequence\r\n        _Mid2 = _First2;\r\n        return noconv; // no termination necessary\r\n    }\r\n\r\n    virtual int __CLR_OR_THIS_CALL do_length(\r\n        mbstate_t&, const char8_t* _First1, const char8_t* _Last1, size_t _Count) const {\r\n        // return p - _First1, for the largest value p in [_First1, _Last1] such that [_First1, p) successfully\r\n        // converts to at most _Count UTF-32 code units\r\n        _Adl_verify_range(_First1, _Last1);\r\n\r\n        const auto _Old_first1 = _First1;\r\n\r\n        for (; _First1 != _Last1 && _Count > 0u; ++_First1, --_Count) {\r\n            char32_t _Code_point = static_cast<char32_t>(*_First1);\r\n            if (_Code_point < 0b1000'0000u) { // single-byte sequence\r\n                continue;\r\n            }\r\n\r\n            int _Trailing_count = 1;\r\n            if (_Code_point < 0b1110'0000u) {\r\n                if (_Code_point < 0b1100'0000u) { // out-of-sequence trailing byte\r\n                    break;\r\n                }\r\n\r\n                // lead byte of 2-byte sequence\r\n                _Code_point &= 0b0001'1111u;\r\n            } else if (_Code_point < 0b1111'0000u) { // lead byte of 3-byte sequence\r\n                _Code_point &= 0b0000'1111u;\r\n                _Trailing_count = 2;\r\n            } else if (_Code_point < 0b1111'1000u) { // lead byte of 4-byte sequence\r\n                _Code_point &= 0b0000'0111u;\r\n                _Trailing_count = 3;\r\n            } else { // invalid UTF-8 code unit\r\n                break;\r\n            }\r\n\r\n            if (_Last1 - _First1 < _Trailing_count + 1) { // not enough input\r\n                break;\r\n            }\r\n\r\n            const char8_t* _Peek = _First1;\r\n            bool _Done           = false;\r\n            do {\r\n                const char8_t _By = *++_Peek;\r\n                if ((_By & 0b1100'0000u) != 0b1000'0000u) { // out-of-sequence lead byte\r\n                    _Done = true;\r\n                    break;\r\n                }\r\n\r\n                _Code_point = (_Code_point << 6) | (_By & 0b11'1111u);\r\n            } while (--_Trailing_count != 0);\r\n\r\n            if (_Done || (_Code_point >= 0xd800u && (_Code_point < 0xe000u || _Code_point >= 0x110000u))) {\r\n                // invalid code point (surrogate or out of range)\r\n                break;\r\n            }\r\n\r\n            _First1 = _Peek;\r\n        }\r\n\r\n        return static_cast<int>((_STD min) (_First1 - _Old_first1, ptrdiff_t{INT_MAX}));\r\n    }\r\n\r\n    bool __CLR_OR_THIS_CALL do_always_noconv() const noexcept override {\r\n        // return true if conversions never change input\r\n        return false;\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_max_length() const noexcept override {\r\n        // return maximum length required for a conversion\r\n        return 4;\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_encoding() const noexcept override {\r\n        // return length of code sequence (from codecvt)\r\n        return 0; // varying length\r\n    }\r\n};\r\n#endif // defined(__cpp_char8_t) && !defined(_M_CEE_PURE)\r\n\r\ntemplate <>\r\nclass _CRTIMP2_PURE_IMPORT codecvt<wchar_t, char, mbstate_t> : public codecvt_base {\r\n    // facet for converting between wchar_t and char (_Byte) sequences\r\npublic:\r\n    using intern_type = wchar_t;\r\n    using extern_type = char;\r\n    using state_type  = mbstate_t;\r\n\r\n    result __CLR_OR_THIS_CALL in(mbstate_t& _State, const char* _First1, const char* _Last1, const char*& _Mid1,\r\n        wchar_t* _First2, wchar_t* _Last2, wchar_t*& _Mid2) const {\r\n        // convert bytes [_First1, _Last1) to [_First2, _Last2)\r\n        return do_in(_State, _First1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    result __CLR_OR_THIS_CALL out(mbstate_t& _State, const wchar_t* _First1, const wchar_t* _Last1,\r\n        const wchar_t*& _Mid1, char* _First2, char* _Last2, char*& _Mid2) const {\r\n        // convert [_First1, _Last1) to bytes [_First2, _Last2)\r\n        return do_out(_State, _First1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    result __CLR_OR_THIS_CALL unshift(mbstate_t& _State, char* _First2, char* _Last2, char*& _Mid2) const {\r\n        // generate bytes to return to default shift state\r\n        return do_unshift(_State, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL length(mbstate_t& _State, const char* _First1, const char* _Last1, size_t _Count) const {\r\n        // return p - _First1, for the largest value p in [_First1, _Last1] such that [_First1, p) successfully\r\n        // converts to at most _Count wide characters\r\n        return do_length(_State, _First1, _Last1, _Count);\r\n    }\r\n\r\n    __PURE_APPDOMAIN_GLOBAL static locale::id id;\r\n\r\n    explicit __CLR_OR_THIS_CALL codecvt(size_t _Refs = 0) : codecvt_base(_Refs) {\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    explicit __CLR_OR_THIS_CALL codecvt(const _Locinfo& _Lobj, size_t _Refs = 0) : codecvt_base(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t __CLRCALL_OR_CDECL _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new codecvt(_Locinfo(_Ploc->_C_str()));\r\n        }\r\n\r\n        return _X_CTYPE;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~codecvt() noexcept override {}\r\n\r\n    void __CLR_OR_THIS_CALL _Init(const _Locinfo& _Lobj) { // initialize from _Lobj\r\n        _Cvt = _Lobj._Getcvt();\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_in(mbstate_t&, const char* _First1, const char* _Last1, const char*& _Mid1,\r\n        wchar_t* _First2, wchar_t* _Last2, wchar_t*& _Mid2) const {\r\n        // convert bytes [_First1, _Last1) to [_First2, _Last2)\r\n        mbstate_t _Mystate{};\r\n        _Adl_verify_range(_First1, _Last1);\r\n        _Adl_verify_range(_First2, _Last2);\r\n        _Mid1 = _First1;\r\n        _Mid2 = _First2;\r\n        for (;;) {\r\n            if (_Mid1 == _Last1) {\r\n                return ok;\r\n            }\r\n\r\n            if (_Mid2 == _Last2) {\r\n                return partial;\r\n            }\r\n\r\n            int _Bytes = _Mbrtowc(_Mid2, _Mid1, static_cast<size_t>(_Last1 - _Mid1), &_Mystate, &_Cvt);\r\n            switch (_Bytes) {\r\n            case -2: // partial conversion\r\n                return partial;\r\n\r\n            case -1: // failed conversion\r\n                return error;\r\n\r\n            case 0: // converted NULL character, TRANSITION, VSO-654347\r\n                _Bytes = 1;\r\n                _FALLTHROUGH;\r\n\r\n            default: // converted some other character\r\n                _Mid1 += _Bytes;\r\n                ++_Mid2;\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_out(mbstate_t& _State, const wchar_t* _First1, const wchar_t* _Last1,\r\n        const wchar_t*& _Mid1, char* _First2, char* _Last2, char*& _Mid2) const {\r\n        // convert [_First1, _Last1) to bytes [_First2, _Last2)\r\n        _Adl_verify_range(_First1, _Last1);\r\n        _Adl_verify_range(_First2, _Last2);\r\n        _Mid1 = _First1;\r\n        _Mid2 = _First2;\r\n        int _Bytes;\r\n\r\n        while (_Mid1 != _Last1 && _Mid2 != _Last2) {\r\n            if (MB_LEN_MAX <= _Last2 - _Mid2) {\r\n                if ((_Bytes = _Wcrtomb(_Mid2, *_Mid1, &_State, &_Cvt)) < 0) {\r\n                    return error; // locale-specific wcrtomb failed\r\n                } else {\r\n                    ++_Mid1;\r\n                    _Mid2 += _Bytes;\r\n                }\r\n            } else { // destination too small, convert into buffer\r\n                char _Buf[MB_LEN_MAX];\r\n                mbstate_t _Stsave = _State;\r\n\r\n                if ((_Bytes = _Wcrtomb(_Buf, *_Mid1, &_State, &_Cvt)) < 0) {\r\n                    return error; // locale-specific wcrtomb failed\r\n                } else if (_Last2 - _Mid2 < _Bytes) { // converted too many, roll back and return previous\r\n                    _State = _Stsave;\r\n                    break;\r\n                } else { // copy converted bytes from buffer\r\n                    _CSTD memcpy(_Mid2, _Buf, static_cast<size_t>(_Bytes));\r\n                    ++_Mid1;\r\n                    _Mid2 += _Bytes;\r\n                }\r\n            }\r\n        }\r\n\r\n        return _Mid1 == _Last1 ? ok : partial;\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_unshift(mbstate_t& _State, char* _First2, char* _Last2, char*& _Mid2) const {\r\n        // generate bytes to return to default shift state\r\n        _Adl_verify_range(_First2, _Last2);\r\n        _Mid2       = _First2;\r\n        result _Ans = ok;\r\n        int _Bytes;\r\n        char _Buf[MB_LEN_MAX];\r\n        mbstate_t _Stsave = _State;\r\n\r\n        if ((_Bytes = _Wcrtomb(_Buf, L'\\0', &_State, &_Cvt)) <= 0) {\r\n            _Ans = error; // locale-specific wcrtomb failed\r\n        } else if (_Last2 - _Mid2 < --_Bytes) { // converted too many, roll back and return\r\n            _State = _Stsave;\r\n            _Ans   = partial;\r\n        } else if (0 < _Bytes) { // copy converted bytes from buffer\r\n            _CSTD memcpy(_Mid2, _Buf, static_cast<size_t>(_Bytes));\r\n            _Mid2 += _Bytes;\r\n        }\r\n        return _Ans;\r\n    }\r\n\r\n    virtual int __CLR_OR_THIS_CALL do_length(\r\n        mbstate_t& _State, const char* _First1, const char* _Last1, size_t _Count) const {\r\n        // return p - _First1, for the largest value p in [_First1, _Last1] such that [_First1, p) successfully\r\n        // converts to at most _Count wide characters\r\n        _Adl_verify_range(_First1, _Last1);\r\n        const auto _Old_first1 = _First1;\r\n\r\n        for (; _Count > 0u && _First1 != _Last1; --_Count) {\r\n            wchar_t _Ch;\r\n            int _Bytes = _Mbrtowc(&_Ch, _First1, static_cast<size_t>(_Last1 - _First1), &_State, &_Cvt);\r\n            if (_Bytes < 0) { // partial or failed conversion\r\n                break;\r\n            }\r\n\r\n            if (_Bytes == 0) { // converted NULL character, TRANSITION, VSO-654347\r\n                _Bytes = 1;\r\n            }\r\n\r\n            // converted _Bytes bytes to a wide character\r\n            _First1 += _Bytes;\r\n        }\r\n\r\n        return static_cast<int>((_STD min) (_First1 - _Old_first1, ptrdiff_t{INT_MAX}));\r\n    }\r\n\r\n    bool __CLR_OR_THIS_CALL do_always_noconv() const noexcept override {\r\n        // return true if conversions never change input\r\n        return false;\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_max_length() const noexcept override {\r\n        // return maximum length required for a conversion (from codecvt)\r\n        return static_cast<int>(_Cvt._Mbcurmax);\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_encoding() const noexcept override {\r\n        // return length of code sequence (from codecvt)\r\n        return _Cvt._Mbcurmax == 1; // 0 => varying length, 1 => fixed length\r\n    }\r\n\r\nprivate:\r\n    _Locinfo::_Cvtvec _Cvt; // locale info passed to _Mbrtowc, _Wcrtomb\r\n};\r\n\r\n#if defined(_NATIVE_WCHAR_T_DEFINED) && !_ENFORCE_FACET_SPECIALIZATIONS\r\ntemplate <>\r\nclass _CRTIMP2_PURE_IMPORT codecvt<unsigned short, char, mbstate_t> : public codecvt_base {\r\n    // facet for converting between unsigned short and char sequences\r\npublic:\r\n    using intern_type = unsigned short;\r\n    using extern_type = char;\r\n    using state_type  = mbstate_t;\r\n\r\n    result __CLR_OR_THIS_CALL in(mbstate_t& _State, const char* _First1, const char* _Last1, const char*& _Mid1,\r\n        unsigned short* _First2, unsigned short* _Last2, unsigned short*& _Mid2) const {\r\n        // convert bytes [_First1, _Last1) to [_First2, _Last2)\r\n        return do_in(_State, _First1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    result __CLR_OR_THIS_CALL out(mbstate_t& _State, const unsigned short* _First1, const unsigned short* _Last1,\r\n        const unsigned short*& _Mid1, char* _First2, char* _Last2, char*& _Mid2) const {\r\n        // convert [_First1, _Last1) to bytes [_First2, _Last2)\r\n        return do_out(_State, _First1, _Last1, _Mid1, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    result __CLR_OR_THIS_CALL unshift(mbstate_t& _State, char* _First2, char* _Last2, char*& _Mid2) const {\r\n        // generate bytes to return to default shift state\r\n        return do_unshift(_State, _First2, _Last2, _Mid2);\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL length(mbstate_t& _State, const char* _First1, const char* _Last1, size_t _Count) const {\r\n        // return p - _First1, for the largest value p in [_First1, _Last1] such that [_First1, p) successfully\r\n        // converts to at most _Count _Elems\r\n        return do_length(_State, _First1, _Last1, _Count);\r\n    }\r\n\r\n    __PURE_APPDOMAIN_GLOBAL static locale::id id;\r\n\r\n    explicit __CLR_OR_THIS_CALL codecvt(size_t _Refs = 0) : codecvt_base(_Refs) {\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    explicit __CLR_OR_THIS_CALL codecvt(const _Locinfo& _Lobj, size_t _Refs = 0) : codecvt_base(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t __CLRCALL_OR_CDECL _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new codecvt(_Locinfo(_Ploc->_C_str()));\r\n        }\r\n\r\n        return _X_CTYPE;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~codecvt() noexcept override {}\r\n\r\n    void __CLR_OR_THIS_CALL _Init(const _Locinfo& _Lobj) { // initialize from _Lobj\r\n        _Cvt = _Lobj._Getcvt();\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_in(mbstate_t&, const char* _First1, const char* _Last1, const char*& _Mid1,\r\n        unsigned short* _First2, unsigned short* _Last2, unsigned short*& _Mid2) const {\r\n        // convert bytes [_First1, _Last1) to [_First2, _Last2)\r\n        mbstate_t _Mystate{};\r\n        _Adl_verify_range(_First1, _Last1);\r\n        _Adl_verify_range(_First2, _Last2);\r\n        _Mid1 = _First1;\r\n        _Mid2 = _First2;\r\n        for (;;) {\r\n            if (_Mid1 == _Last1) {\r\n                return ok;\r\n            }\r\n\r\n            if (_Mid2 == _Last2) {\r\n                return partial;\r\n            }\r\n\r\n            int _Bytes = _Mbrtowc(\r\n                reinterpret_cast<wchar_t*>(_Mid2), _Mid1, static_cast<size_t>(_Last1 - _Mid1), &_Mystate, &_Cvt);\r\n            switch (_Bytes) {\r\n            case -2: // partial conversion\r\n                return partial;\r\n\r\n            case -1: // failed conversion\r\n                return error;\r\n\r\n            case 0: // converted NULL character, TRANSITION, VSO-654347\r\n                _Bytes = 1;\r\n                _FALLTHROUGH;\r\n\r\n            default: // converted some other character\r\n                _Mid1 += _Bytes;\r\n                ++_Mid2;\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_out(mbstate_t& _State, const unsigned short* _First1,\r\n        const unsigned short* _Last1, const unsigned short*& _Mid1, char* _First2, char* _Last2, char*& _Mid2) const {\r\n        // convert [_First1, _Last1) to bytes [_First2, _Last2)\r\n        _Adl_verify_range(_First1, _Last1);\r\n        _Adl_verify_range(_First2, _Last2);\r\n        _Mid1 = _First1;\r\n        _Mid2 = _First2;\r\n        int _Bytes;\r\n\r\n        while (_Mid1 != _Last1 && _Mid2 != _Last2) {\r\n            if (MB_LEN_MAX <= _Last2 - _Mid2) {\r\n                if ((_Bytes = _Wcrtomb(_Mid2, *_Mid1, &_State, &_Cvt)) < 0) {\r\n                    return error; // locale-specific wcrtomb failed\r\n                } else {\r\n                    ++_Mid1;\r\n                    _Mid2 += _Bytes;\r\n                }\r\n            } else { // destination too small, convert into buffer\r\n                char _Buf[MB_LEN_MAX];\r\n                mbstate_t _Stsave = _State;\r\n\r\n                if ((_Bytes = _Wcrtomb(_Buf, *_Mid1, &_State, &_Cvt)) < 0) {\r\n                    return error; // locale-specific wcrtomb failed\r\n                } else if (_Last2 - _Mid2 < _Bytes) { // converted too many, roll back and return previous\r\n                    _State = _Stsave;\r\n                    break;\r\n                } else { // copy converted bytes from buffer\r\n                    _CSTD memcpy(_Mid2, _Buf, static_cast<size_t>(_Bytes));\r\n                    ++_Mid1;\r\n                    _Mid2 += _Bytes;\r\n                }\r\n            }\r\n        }\r\n\r\n        return _Mid1 == _Last1 ? ok : partial;\r\n    }\r\n\r\n    virtual result __CLR_OR_THIS_CALL do_unshift(mbstate_t& _State, char* _First2, char* _Last2, char*& _Mid2) const {\r\n        // generate bytes to return to default shift state\r\n        _Adl_verify_range(_First2, _Last2);\r\n        _Mid2       = _First2;\r\n        result _Ans = ok;\r\n        int _Bytes;\r\n        char _Buf[MB_LEN_MAX];\r\n        mbstate_t _Stsave = _State;\r\n\r\n        if ((_Bytes = _Wcrtomb(_Buf, L'\\0', &_State, &_Cvt)) <= 0) {\r\n            _Ans = error; // locale-specific wcrtomb failed\r\n        } else if (_Last2 - _Mid2 < --_Bytes) { // converted too many, roll back and return\r\n            _State = _Stsave;\r\n            _Ans   = partial;\r\n        } else if (0 < _Bytes) { // copy converted bytes from buffer\r\n            _CSTD memcpy(_Mid2, _Buf, static_cast<size_t>(_Bytes));\r\n            _Mid2 += _Bytes;\r\n        }\r\n\r\n        return _Ans;\r\n    }\r\n\r\n    virtual int __CLR_OR_THIS_CALL do_length(\r\n        mbstate_t& _State, const char* _First1, const char* _Last1, size_t _Count) const {\r\n        // return p - _First1, for the largest value p in [_First1, _Last1] such that [_First1, p) successfully\r\n        // converts to at most _Count wide characters\r\n        _Adl_verify_range(_First1, _Last1);\r\n        const auto _Old_first1 = _First1;\r\n\r\n        for (; _Count > 0u && _First1 != _Last1; --_Count) {\r\n            wchar_t _Ch;\r\n            int _Bytes = _Mbrtowc(&_Ch, _First1, static_cast<size_t>(_Last1 - _First1), &_State, &_Cvt);\r\n            if (_Bytes < 0) { // partial or failed conversion\r\n                break;\r\n            }\r\n\r\n            if (_Bytes == 0) { // converted NULL character, TRANSITION, VSO-654347\r\n                _Bytes = 1;\r\n            }\r\n\r\n            // converted _Bytes bytes to a wide character\r\n            _First1 += _Bytes;\r\n        }\r\n\r\n        return static_cast<int>((_STD min) (_First1 - _Old_first1, ptrdiff_t{INT_MAX}));\r\n    }\r\n\r\n    bool __CLR_OR_THIS_CALL do_always_noconv() const noexcept override {\r\n        // return true if conversions never change input\r\n        return false;\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_max_length() const noexcept override {\r\n        // return maximum length required for a conversion (from codecvt)\r\n        return static_cast<int>(_Cvt._Mbcurmax);\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL do_encoding() const noexcept override {\r\n        // return length of code sequence (from codecvt)\r\n        return _Cvt._Mbcurmax == 1u; // 0 => varying length, 1 => fixed length\r\n    }\r\n\r\nprivate:\r\n    _Locinfo::_Cvtvec _Cvt; // locale info passed to _Mbrtowc, _Wcrtomb\r\n};\r\n#endif // defined(_NATIVE_WCHAR_T_DEFINED) && !_ENFORCE_FACET_SPECIALIZATIONS\r\n\r\n} // extern \"C++\"\r\n\r\n_EXPORT_STD template <class _Elem, class _Byte, class _Statype>\r\nclass codecvt_byname : public codecvt<_Elem, _Byte, _Statype> {\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS\r\n                      || _Is_any_of_v<codecvt_byname, codecvt_byname<char, char, mbstate_t>,\r\n                          codecvt_byname<wchar_t, char, mbstate_t>>,\r\n        _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    explicit __CLR_OR_THIS_CALL codecvt_byname(const char* _Locname, size_t _Refs = 0)\r\n        : codecvt<_Elem, _Byte, _Statype>(_Locinfo(_Locname), _Refs) {}\r\n\r\n    explicit __CLR_OR_THIS_CALL codecvt_byname(const string& _Str, size_t _Refs = 0)\r\n        : codecvt<_Elem, _Byte, _Statype>(_Locinfo(_Str.c_str()), _Refs) {}\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~codecvt_byname() noexcept override {}\r\n};\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\n\r\ntemplate <>\r\nclass _CXX20_DEPRECATE_CODECVT_FACETS\r\n    codecvt_byname<char16_t, char, mbstate_t> : public codecvt<char16_t, char, mbstate_t> {\r\npublic:\r\n    explicit __CLR_OR_THIS_CALL codecvt_byname(const char* _Locname, size_t _Refs = 0)\r\n        : codecvt(_Locinfo(_Locname), _Refs) {}\r\n\r\n    explicit __CLR_OR_THIS_CALL codecvt_byname(const string& _Str, size_t _Refs = 0)\r\n        : codecvt(_Locinfo(_Str.c_str()), _Refs) {}\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~codecvt_byname() noexcept override {}\r\n};\r\n\r\ntemplate <>\r\nclass _CXX20_DEPRECATE_CODECVT_FACETS\r\n    codecvt_byname<char32_t, char, mbstate_t> : public codecvt<char32_t, char, mbstate_t> {\r\npublic:\r\n    explicit __CLR_OR_THIS_CALL codecvt_byname(const char* _Locname, size_t _Refs = 0)\r\n        : codecvt(_Locinfo(_Locname), _Refs) {}\r\n\r\n    explicit __CLR_OR_THIS_CALL codecvt_byname(const string& _Str, size_t _Refs = 0)\r\n        : codecvt(_Locinfo(_Str.c_str()), _Refs) {}\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~codecvt_byname() noexcept override {}\r\n};\r\n\r\n#ifdef __cpp_char8_t\r\ntemplate <>\r\nclass _CXX20_DEPRECATE_CODECVT_CHAR8_T_FACETS\r\n    codecvt_byname<char16_t, char8_t, mbstate_t> : public codecvt<char16_t, char8_t, mbstate_t> {\r\npublic:\r\n    explicit __CLR_OR_THIS_CALL codecvt_byname(const char* _Locname, size_t _Refs = 0)\r\n        : codecvt(_Locinfo(_Locname), _Refs) {}\r\n\r\n    explicit __CLR_OR_THIS_CALL codecvt_byname(const string& _Str, size_t _Refs = 0)\r\n        : codecvt(_Locinfo(_Str.c_str()), _Refs) {}\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~codecvt_byname() noexcept override {}\r\n};\r\n\r\ntemplate <>\r\nclass _CXX20_DEPRECATE_CODECVT_CHAR8_T_FACETS\r\n    codecvt_byname<char32_t, char8_t, mbstate_t> : public codecvt<char32_t, char8_t, mbstate_t> {\r\npublic:\r\n    explicit __CLR_OR_THIS_CALL codecvt_byname(const char* _Locname, size_t _Refs = 0)\r\n        : codecvt(_Locinfo(_Locname), _Refs) {}\r\n\r\n    explicit __CLR_OR_THIS_CALL codecvt_byname(const string& _Str, size_t _Refs = 0)\r\n        : codecvt(_Locinfo(_Str.c_str()), _Refs) {}\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~codecvt_byname() noexcept override {}\r\n};\r\n#endif // defined(__cpp_char8_t)\r\n\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n\r\n#define _XA 0x100 // extra alphabetic\r\n#define _BB _CONTROL // BEL, BS, etc.\r\n#define _CN _SPACE // CR, FF, HT, NL, VT\r\n#define _DI _DIGIT // '0'-'9'\r\n#define _LO _LOWER // 'a'-'z'\r\n#define _PU _PUNCT // punctuation\r\n#define _SP _BLANK // space\r\n#define _UP _UPPER // 'A'-'Z'\r\n#define _XD _HEX // '0'-'9', 'A'-'F', 'a'-'f'\r\n\r\nstruct _Ctype_constants_base {\r\n    using mask = short; // to match <ctype.h>\r\n\r\n    // constants for character classifications\r\n\r\n    static constexpr mask alnum  = _DI | _LO | _UP | _XA;\r\n    static constexpr mask alpha  = _LO | _UP | _XA;\r\n    static constexpr mask cntrl  = _BB;\r\n    static constexpr mask digit  = _DI;\r\n    static constexpr mask graph  = _DI | _LO | _PU | _UP | _XA;\r\n    static constexpr mask lower  = _LO;\r\n    static constexpr mask print  = _DI | _LO | _PU | _SP | _UP | _XA | _XD;\r\n    static constexpr mask punct  = _PU;\r\n    static constexpr mask space  = _CN | _SP;\r\n    static constexpr mask upper  = _UP;\r\n    static constexpr mask xdigit = _XD;\r\n    static constexpr mask blank  = _CN | _SP;\r\n};\r\n\r\n_EXPORT_STD extern \"C++\" struct _CRTIMP2_PURE_IMPORT __declspec(empty_bases) ctype_base // base for ctype\r\n    : locale::facet, // TRANSITION, ABI, shouldn't be derived from locale::facet\r\n      _Ctype_constants_base // TRANSITION, ABI, avoid affecting DLL interface\r\n{\r\n    __CLR_OR_THIS_CALL ctype_base(size_t _Refs = 0) noexcept // strengthened\r\n        : locale::facet(_Refs) {}\r\n\r\n    __CLR_OR_THIS_CALL ~ctype_base() noexcept override {}\r\n};\r\n\r\n#undef _XA\r\n#undef _BB\r\n#undef _CN\r\n#undef _DI\r\n#undef _LO\r\n#undef _PU\r\n#undef _SP\r\n#undef _UP\r\n#undef _XD\r\n\r\n_EXPORT_STD extern \"C++\" template <class _Elem>\r\nclass ctype : public ctype_base { // facet for classifying elements, converting cases\r\npublic:\r\n    // ctype<char>, ctype<wchar_t>, and ctype<unsigned short> are explicitly specialized below.\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    using char_type = _Elem;\r\n\r\n    bool __CLR_OR_THIS_CALL is(mask _Maskval, _Elem _Ch) const { // test if element fits any mask classifications\r\n        return do_is(_Maskval, _Ch);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL is(const _Elem* _First, const _Elem* _Last,\r\n        mask* _Dest) const { // get mask sequence for elements in [_First, _Last)\r\n        return do_is(_First, _Last, _Dest);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL scan_is(mask _Maskval, const _Elem* _First,\r\n        const _Elem* _Last) const { // find first in [_First, _Last) that fits mask classification\r\n        return do_scan_is(_Maskval, _First, _Last);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL scan_not(mask _Maskval, const _Elem* _First,\r\n        const _Elem* _Last) const { // find first in [_First, _Last) not fitting mask classification\r\n        return do_scan_not(_Maskval, _First, _Last);\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL tolower(_Elem _Ch) const { // convert element to lower case\r\n        return do_tolower(_Ch);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL tolower(\r\n        _Elem* _First, const _Elem* _Last) const { // convert [_First, _Last) in place to lower case\r\n        return do_tolower(_First, _Last);\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL toupper(_Elem _Ch) const { // convert element to upper case\r\n        return do_toupper(_Ch);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL toupper(\r\n        _Elem* _First, const _Elem* _Last) const { // convert [_First, _Last) in place to upper case\r\n        return do_toupper(_First, _Last);\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL widen(char _Byte) const { // widen char\r\n        return do_widen(_Byte);\r\n    }\r\n\r\n    const char* __CLR_OR_THIS_CALL widen(const char* _First, const char* _Last,\r\n        _Elem* _Dest) const { // widen chars in [_First, _Last)\r\n        return do_widen(_First, _Last, _Dest);\r\n    }\r\n\r\n    char __CLR_OR_THIS_CALL narrow(_Elem _Ch, char _Dflt = '\\0') const { // narrow element to char\r\n        return do_narrow(_Ch, _Dflt);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL narrow(const _Elem* _First, const _Elem* _Last, char _Dflt,\r\n        char* _Dest) const { // narrow elements in [_First, _Last) to chars\r\n        return do_narrow(_First, _Last, _Dflt, _Dest);\r\n    }\r\n\r\n    __PURE_APPDOMAIN_GLOBAL static locale::id id;\r\n\r\n    explicit __CLR_OR_THIS_CALL ctype(size_t _Refs = 0) : ctype_base(_Refs) {\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ctype(const _Locinfo& _Lobj, size_t _Refs = 0) : ctype_base(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t __CLRCALL_OR_CDECL _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new ctype<_Elem>(_Locinfo(_Ploc->_C_str()));\r\n        }\r\n\r\n        return _X_CTYPE;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~ctype() noexcept override {\r\n        if (_Ctype._Delfl) {\r\n            _CSTD free(const_cast<short*>(_Ctype._Table));\r\n        }\r\n\r\n        _CSTD free(_Ctype._LocaleName);\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Init(const _Locinfo& _Lobj) { // initialize from _Lobj\r\n        _Ctype = _Lobj._Getctype();\r\n        _Cvt   = _Lobj._Getcvt();\r\n    }\r\n\r\n    virtual bool __CLR_OR_THIS_CALL do_is(\r\n        mask _Maskval, _Elem _Ch) const { // test if element fits any mask classifications\r\n        return (_Ctype._Table[static_cast<unsigned char>(narrow(_Ch))] & _Maskval) != 0;\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_is(const _Elem* _First, const _Elem* _Last,\r\n        mask* _Dest) const { // get mask sequence for elements in [_First, _Last)\r\n        _Adl_verify_range(_First, _Last);\r\n        for (; _First != _Last; ++_First, ++_Dest) {\r\n            *_Dest = _Ctype._Table[static_cast<unsigned char>(narrow(*_First))];\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_scan_is(mask _Maskval, const _Elem* _First,\r\n        const _Elem* _Last) const { // find first in [_First, _Last) that fits mask classification\r\n        _Adl_verify_range(_First, _Last);\r\n        while (_First != _Last && !is(_Maskval, *_First)) {\r\n            ++_First;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_scan_not(mask _Maskval, const _Elem* _First,\r\n        const _Elem* _Last) const { // find first in [_First, _Last) not fitting mask classification\r\n        _Adl_verify_range(_First, _Last);\r\n        while (_First != _Last && is(_Maskval, *_First)) {\r\n            ++_First;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_tolower(_Elem _Ch) const { // convert element to lower case\r\n        unsigned char _Byte = static_cast<unsigned char>(narrow(_Ch, '\\0'));\r\n        if (_Byte == '\\0') {\r\n            return _Ch;\r\n        }\r\n\r\n        return widen(static_cast<char>(_Tolower(_Byte, &_Ctype)));\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_tolower(_Elem* _First,\r\n        const _Elem* _Last) const { // convert [_First, _Last) in place to lower case\r\n        _Adl_verify_range(_First, _Last);\r\n        for (; _First != _Last; ++_First) { // convert *_First to lower case\r\n            unsigned char _Byte = static_cast<unsigned char>(narrow(*_First, '\\0'));\r\n            if (_Byte != '\\0') {\r\n                *_First = (widen(static_cast<char>(_Tolower(_Byte, &_Ctype))));\r\n            }\r\n        }\r\n        return _First;\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_toupper(_Elem _Ch) const { // convert element to upper case\r\n        unsigned char _Byte = static_cast<unsigned char>(narrow(_Ch, '\\0'));\r\n        if (_Byte == '\\0') {\r\n            return _Ch;\r\n        }\r\n\r\n        return widen(static_cast<char>(_Toupper(_Byte, &_Ctype)));\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_toupper(_Elem* _First,\r\n        const _Elem* _Last) const { // convert [_First, _Last) in place to upper case\r\n        _Adl_verify_range(_First, _Last);\r\n        for (; _First != _Last; ++_First) { // convert *_First to upper case\r\n            unsigned char _Byte = static_cast<unsigned char>(narrow(*_First, '\\0'));\r\n            if (_Byte != '\\0') {\r\n                *_First = (widen(static_cast<char>(_Toupper(_Byte, &_Ctype))));\r\n            }\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_widen(char _Byte) const { // widen char\r\n        return _Maklocchr<_Elem>(_Byte, _Cvt);\r\n    }\r\n\r\n    virtual const char* __CLR_OR_THIS_CALL do_widen(\r\n        const char* _First, const char* _Last, _Elem* _Dest) const { // widen chars in [_First, _Last)\r\n        _Adl_verify_range(_First, _Last);\r\n        for (; _First != _Last; ++_First, ++_Dest) {\r\n            *_Dest = _Maklocchr<_Elem>(*_First, _Cvt);\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    char __CLR_OR_THIS_CALL _Donarrow(_Elem _Ch, char _Dflt) const { // narrow element to char\r\n        char _Byte;\r\n        if (_Ch == _Elem{}) {\r\n            return '\\0';\r\n        }\r\n\r\n        if ((_Byte = _Maklocbyte(_Ch, _Cvt)) == '\\0') {\r\n            return _Dflt;\r\n        }\r\n\r\n        return _Byte;\r\n    }\r\n\r\n    virtual char __CLR_OR_THIS_CALL do_narrow(_Elem _Ch, char _Dflt) const { // narrow element to char\r\n        return _Donarrow(_Ch, _Dflt);\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_narrow(const _Elem* _First, const _Elem* _Last, char _Dflt,\r\n        char* _Dest) const { // narrow elements in [_First, _Last) to chars\r\n        _Adl_verify_range(_First, _Last);\r\n        for (; _First != _Last; ++_First, ++_Dest) {\r\n            *_Dest = _Donarrow(*_First, _Dflt);\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\nprivate:\r\n    _Locinfo::_Ctypevec _Ctype; // locale info passed to _Tolower, etc.\r\n    _Locinfo::_Cvtvec _Cvt; // conversion information\r\n};\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdllimport-static-field-def\"\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _Elem>\r\nlocale::id ctype<_Elem>::id;\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n\r\nextern \"C++\" {\r\n\r\ntemplate <>\r\nclass _CRTIMP2_PURE_IMPORT ctype<char> : public ctype_base { // facet for classifying char elements, converting cases\r\npublic:\r\n    using _Elem     = char;\r\n    using char_type = _Elem;\r\n\r\n    bool __CLR_OR_THIS_CALL is(mask _Maskval, _Elem _Ch) const { // test if element fits any mask classifications\r\n        return (_Ctype._Table[static_cast<unsigned char>(_Ch)] & _Maskval) != 0;\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL is(const _Elem* _First, const _Elem* _Last,\r\n        mask* _Dest) const { // get mask sequence for elements in [_First, _Last)\r\n        _Adl_verify_range(_First, _Last);\r\n        for (; _First != _Last; ++_First, ++_Dest) {\r\n            *_Dest = _Ctype._Table[static_cast<unsigned char>(*_First)];\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL scan_is(mask _Maskval, const _Elem* _First,\r\n        const _Elem* _Last) const { // find first in [_First, _Last) that fits mask classification\r\n        _Adl_verify_range(_First, _Last);\r\n        while (_First != _Last && !is(_Maskval, *_First)) {\r\n            ++_First;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL scan_not(mask _Maskval, const _Elem* _First,\r\n        const _Elem* _Last) const { // find first in [_First, _Last) not fitting mask classification\r\n        _Adl_verify_range(_First, _Last);\r\n        while (_First != _Last && is(_Maskval, *_First)) {\r\n            ++_First;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL tolower(_Elem _Ch) const { // convert element to lower case\r\n        return do_tolower(_Ch);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL tolower(\r\n        _Elem* _First, const _Elem* _Last) const { // convert [_First, _Last) in place to lower case\r\n        return do_tolower(_First, _Last);\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL toupper(_Elem _Ch) const { // convert element to upper case\r\n        return do_toupper(_Ch);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL toupper(\r\n        _Elem* _First, const _Elem* _Last) const { // convert [_First, _Last) in place to upper case\r\n        return do_toupper(_First, _Last);\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL widen(char _Byte) const { // widen char\r\n        return do_widen(_Byte);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL widen(const char* _First, const char* _Last,\r\n        _Elem* _Dest) const { // widen chars in [_First, _Last)\r\n        return do_widen(_First, _Last, _Dest);\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL narrow(_Elem _Ch, char _Dflt = '\\0') const { // narrow element to char\r\n        return do_narrow(_Ch, _Dflt);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL narrow(const _Elem* _First, const _Elem* _Last, char _Dflt,\r\n        char* _Dest) const { // narrow elements in [_First, _Last) to chars\r\n        return do_narrow(_First, _Last, _Dflt, _Dest);\r\n    }\r\n\r\n    __PURE_APPDOMAIN_GLOBAL static locale::id id;\r\n\r\n    explicit __CLR_OR_THIS_CALL ctype(const mask* _Table = nullptr, bool _Deletetable = false,\r\n        size_t _Refs = 0)\r\n        : ctype_base(_Refs) { // construct with specified table and delete flag for table\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n\r\n        _Tidy(); // free existing table, as needed\r\n        if (_Table) { // replace existing char to mask table\r\n            _Ctype._Table = _Table;\r\n            _Ctype._Delfl = _Deletetable ? -1 : 0;\r\n        } else { // use classic table\r\n            _Ctype._Table = classic_table();\r\n            _Ctype._Delfl = 0;\r\n        }\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ctype(const _Locinfo& _Lobj, size_t _Refs = 0) : ctype_base(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t __CLRCALL_OR_CDECL _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new ctype<_Elem>(_Locinfo(_Ploc->_C_str()));\r\n        }\r\n\r\n        return _X_CTYPE;\r\n    }\r\n\r\n    const mask* __CLR_OR_THIS_CALL table() const noexcept {\r\n        return _Ctype._Table;\r\n    }\r\n\r\n    static const mask* __CLRCALL_OR_CDECL classic_table() noexcept {\r\n        return _STD use_facet<ctype>(locale::classic()).table();\r\n    }\r\n\r\n    _PGLOBAL static const size_t table_size = 1 << CHAR_BIT; // size of ctype mapping table, typically 256\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~ctype() noexcept override {\r\n        _Tidy();\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Init(const _Locinfo& _Lobj) { // initialize from _Lobj\r\n        _Ctype = _Lobj._Getctype();\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Tidy() noexcept { // free any allocated storage\r\n        if (0 < _Ctype._Delfl) {\r\n            _CSTD free(const_cast<short*>(_Ctype._Table));\r\n        } else if (_Ctype._Delfl < 0) {\r\n            delete[] _Ctype._Table;\r\n        }\r\n\r\n        _CSTD free(_Ctype._LocaleName);\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_tolower(_Elem _Ch) const { // convert element to lower case\r\n        return static_cast<_Elem>(_Tolower(static_cast<unsigned char>(_Ch), &_Ctype));\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_tolower(_Elem* _First,\r\n        const _Elem* _Last) const { // convert [_First, _Last) in place to lower case\r\n        _Adl_verify_range(_First, _Last);\r\n        for (; _First != _Last; ++_First) {\r\n            *_First = static_cast<_Elem>(_Tolower(static_cast<unsigned char>(*_First), &_Ctype));\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_toupper(_Elem _Ch) const { // convert element to upper case\r\n        return static_cast<_Elem>(_Toupper(static_cast<unsigned char>(_Ch), &_Ctype));\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_toupper(_Elem* _First,\r\n        const _Elem* _Last) const { // convert [_First, _Last) in place to upper case\r\n        _Adl_verify_range(_First, _Last);\r\n        for (; _First != _Last; ++_First) {\r\n            *_First = static_cast<_Elem>(_Toupper(static_cast<unsigned char>(*_First), &_Ctype));\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_widen(char _Byte) const { // widen char\r\n        return _Byte;\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_widen(\r\n        const char* _First, const char* _Last, _Elem* _Dest) const { // widen chars in [_First, _Last)\r\n        _Adl_verify_range(_First, _Last);\r\n        _CSTD memcpy(_Dest, _First, static_cast<size_t>(_Last - _First));\r\n        return _Last;\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_narrow(_Elem _Ch, char) const { // narrow char\r\n        return _Ch;\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_narrow(const _Elem* _First, const _Elem* _Last, char,\r\n        char* _Dest) const { // narrow elements in [_First, _Last) to chars\r\n        _Adl_verify_range(_First, _Last);\r\n        _CSTD memcpy(_Dest, _First, static_cast<size_t>(_Last - _First));\r\n        return _Last;\r\n    }\r\n\r\nprivate:\r\n    _Locinfo::_Ctypevec _Ctype; // information\r\n};\r\n\r\ntemplate <>\r\nclass _CRTIMP2_PURE_IMPORT\r\n    ctype<wchar_t> : public ctype_base { // facet for classifying wchar_t elements, converting cases\r\npublic:\r\n    using _Elem     = wchar_t;\r\n    using char_type = _Elem;\r\n\r\n    bool __CLR_OR_THIS_CALL is(mask _Maskval, _Elem _Ch) const { // test if element fits any mask classifications\r\n        return do_is(_Maskval, _Ch);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL is(const _Elem* _First, const _Elem* _Last,\r\n        mask* _Dest) const { // get mask sequence for elements in [_First, _Last)\r\n        return do_is(_First, _Last, _Dest);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL scan_is(mask _Maskval, const _Elem* _First,\r\n        const _Elem* _Last) const { // find first in [_First, _Last) that fits mask classification\r\n        return do_scan_is(_Maskval, _First, _Last);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL scan_not(mask _Maskval, const _Elem* _First,\r\n        const _Elem* _Last) const { // find first in [_First, _Last) not fitting mask classification\r\n        return do_scan_not(_Maskval, _First, _Last);\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL tolower(_Elem _Ch) const { // convert element to lower case\r\n        return do_tolower(_Ch);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL tolower(\r\n        _Elem* _First, const _Elem* _Last) const { // convert [_First, _Last) in place to lower case\r\n        return do_tolower(_First, _Last);\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL toupper(_Elem _Ch) const { // convert element to upper case\r\n        return do_toupper(_Ch);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL toupper(\r\n        _Elem* _First, const _Elem* _Last) const { // convert [_First, _Last) in place to upper case\r\n        return do_toupper(_First, _Last);\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL widen(char _Byte) const { // widen char\r\n        return do_widen(_Byte);\r\n    }\r\n\r\n    const char* __CLR_OR_THIS_CALL widen(const char* _First, const char* _Last,\r\n        _Elem* _Dest) const { // widen chars in [_First, _Last)\r\n        return do_widen(_First, _Last, _Dest);\r\n    }\r\n\r\n    char __CLR_OR_THIS_CALL narrow(_Elem _Ch, char _Dflt = '\\0') const { // narrow element to char\r\n        return do_narrow(_Ch, _Dflt);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL narrow(const _Elem* _First, const _Elem* _Last, char _Dflt,\r\n        char* _Dest) const { // narrow elements in [_First, _Last) to chars\r\n        return do_narrow(_First, _Last, _Dflt, _Dest);\r\n    }\r\n\r\n    __PURE_APPDOMAIN_GLOBAL static locale::id id;\r\n\r\n    explicit __CLR_OR_THIS_CALL ctype(size_t _Refs = 0) : ctype_base(_Refs) {\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ctype(const _Locinfo& _Lobj, size_t _Refs = 0) : ctype_base(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t __CLRCALL_OR_CDECL _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new ctype<_Elem>(_Locinfo(_Ploc->_C_str()));\r\n        }\r\n\r\n        return _X_CTYPE;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~ctype() noexcept override {\r\n        if (_Ctype._Delfl) {\r\n            _CSTD free(const_cast<short*>(_Ctype._Table));\r\n        }\r\n\r\n        _CSTD free(_Ctype._LocaleName);\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Init(const _Locinfo& _Lobj) { // initialize from _Lobj\r\n        _Ctype = _Lobj._Getctype();\r\n        _Cvt   = _Lobj._Getcvt();\r\n    }\r\n\r\n    virtual bool __CLR_OR_THIS_CALL do_is(\r\n        mask _Maskval, _Elem _Ch) const { // test if element fits any mask classifications\r\n        return (_CSTD _Getwctype(_Ch, &_Ctype) & _Maskval) != 0;\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_is(const _Elem* _First, const _Elem* _Last,\r\n        mask* _Dest) const { // get mask sequence for elements in [_First, _Last)\r\n        _Adl_verify_range(_First, _Last);\r\n        return _CSTD _Getwctypes(_First, _Last, _Dest, &_Ctype);\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_scan_is(mask _Maskval, const _Elem* _First,\r\n        const _Elem* _Last) const { // find first in [_First, _Last) that fits mask classification\r\n        _Adl_verify_range(_First, _Last);\r\n        while (_First != _Last && !is(_Maskval, *_First)) {\r\n            ++_First;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_scan_not(mask _Maskval, const _Elem* _First,\r\n        const _Elem* _Last) const { // find first in [_First, _Last) not fitting mask classification\r\n        _Adl_verify_range(_First, _Last);\r\n        while (_First != _Last && is(_Maskval, *_First)) {\r\n            ++_First;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_tolower(_Elem _Ch) const { // convert element to lower case\r\n        return _Towlower(_Ch, &_Ctype);\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_tolower(_Elem* _First,\r\n        const _Elem* _Last) const { // convert [_First, _Last) in place to lower case\r\n        _Adl_verify_range(_First, _Last);\r\n        for (; _First != _Last; ++_First) {\r\n            *_First = _Towlower(*_First, &_Ctype);\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_toupper(_Elem _Ch) const { // convert element to upper case\r\n        return _Towupper(_Ch, &_Ctype);\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_toupper(_Elem* _First,\r\n        const _Elem* _Last) const { // convert [_First, _Last) in place to upper case\r\n        _Adl_verify_range(_First, _Last);\r\n        for (; _First != _Last; ++_First) {\r\n            *_First = _Towupper(*_First, &_Ctype);\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL _Dowiden(char _Byte) const { // widen char\r\n        mbstate_t _Mbst = {};\r\n        wchar_t _Wc;\r\n        return _Mbrtowc(&_Wc, &_Byte, 1, &_Mbst, &_Cvt) < 0 ? static_cast<wchar_t>(WEOF) : _Wc;\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_widen(char _Byte) const { // widen char\r\n        return _Dowiden(_Byte);\r\n    }\r\n\r\n    virtual const char* __CLR_OR_THIS_CALL do_widen(\r\n        const char* _First, const char* _Last, _Elem* _Dest) const { // widen chars in [_First, _Last)\r\n        _Adl_verify_range(_First, _Last);\r\n        for (; _First != _Last; ++_First, ++_Dest) {\r\n            *_Dest = _Dowiden(*_First);\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    char __CLR_OR_THIS_CALL _Donarrow(_Elem _Ch, char _Dflt) const { // narrow element to char\r\n        char _Buf[MB_LEN_MAX];\r\n        mbstate_t _Mbst = {};\r\n        return _Wcrtomb(_Buf, _Ch, &_Mbst, &_Cvt) != 1 ? _Dflt : _Buf[0];\r\n    }\r\n\r\n    virtual char __CLR_OR_THIS_CALL do_narrow(_Elem _Ch, char _Dflt) const { // narrow element to char\r\n        return _Donarrow(_Ch, _Dflt);\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_narrow(const _Elem* _First, const _Elem* _Last, char _Dflt,\r\n        char* _Dest) const { // narrow elements in [_First, _Last) to chars\r\n        _Adl_verify_range(_First, _Last);\r\n        for (; _First != _Last; ++_First, ++_Dest) {\r\n            *_Dest = _Donarrow(*_First, _Dflt);\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\nprivate:\r\n    _Locinfo::_Ctypevec _Ctype; // locale info passed to _Tolower, etc.\r\n    _Locinfo::_Cvtvec _Cvt; // conversion information\r\n};\r\n\r\n#if defined(_NATIVE_WCHAR_T_DEFINED) && !_ENFORCE_FACET_SPECIALIZATIONS\r\ntemplate <>\r\nclass _CRTIMP2_PURE_IMPORT\r\n    ctype<unsigned short> : public ctype_base { // facet for classifying unsigned short elements, converting cases\r\npublic:\r\n    using _Elem     = unsigned short;\r\n    using char_type = _Elem;\r\n\r\n    bool __CLR_OR_THIS_CALL is(mask _Maskval, _Elem _Ch) const { // test if element fits any mask classifications\r\n        return do_is(_Maskval, _Ch);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL is(const _Elem* _First, const _Elem* _Last,\r\n        mask* _Dest) const { // get mask sequence for elements in [_First, _Last)\r\n        return do_is(_First, _Last, _Dest);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL scan_is(mask _Maskval, const _Elem* _First,\r\n        const _Elem* _Last) const { // find first in [_First, _Last) that fits mask classification\r\n        return do_scan_is(_Maskval, _First, _Last);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL scan_not(mask _Maskval, const _Elem* _First,\r\n        const _Elem* _Last) const { // find first in [_First, _Last) not fitting mask classification\r\n        return do_scan_not(_Maskval, _First, _Last);\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL tolower(_Elem _Ch) const { // convert element to lower case\r\n        return do_tolower(_Ch);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL tolower(\r\n        _Elem* _First, const _Elem* _Last) const { // convert [_First, _Last) in place to lower case\r\n        return do_tolower(_First, _Last);\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL toupper(_Elem _Ch) const { // convert element to upper case\r\n        return do_toupper(_Ch);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL toupper(\r\n        _Elem* _First, const _Elem* _Last) const { // convert [_First, _Last) in place to upper case\r\n        return do_toupper(_First, _Last);\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL widen(char _Byte) const { // widen char\r\n        return do_widen(_Byte);\r\n    }\r\n\r\n    const char* __CLR_OR_THIS_CALL widen(const char* _First, const char* _Last,\r\n        _Elem* _Dest) const { // widen chars in [_First, _Last)\r\n        return do_widen(_First, _Last, _Dest);\r\n    }\r\n\r\n    char __CLR_OR_THIS_CALL narrow(_Elem _Ch, char _Dflt = '\\0') const { // narrow element to char\r\n        return do_narrow(_Ch, _Dflt);\r\n    }\r\n\r\n    const _Elem* __CLR_OR_THIS_CALL narrow(const _Elem* _First, const _Elem* _Last, char _Dflt,\r\n        char* _Dest) const { // narrow elements in [_First, _Last) to chars\r\n        return do_narrow(_First, _Last, _Dflt, _Dest);\r\n    }\r\n\r\n    __PURE_APPDOMAIN_GLOBAL static locale::id id;\r\n\r\n    explicit __CLR_OR_THIS_CALL ctype(size_t _Refs = 0) : ctype_base(_Refs) {\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ctype(const _Locinfo& _Lobj, size_t _Refs = 0) : ctype_base(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t __CLRCALL_OR_CDECL _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new ctype<_Elem>(_Locinfo(_Ploc->_C_str()));\r\n        }\r\n\r\n        return _X_CTYPE;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~ctype() noexcept override {\r\n        if (_Ctype._Delfl) {\r\n            _CSTD free(const_cast<short*>(_Ctype._Table));\r\n        }\r\n\r\n        _CSTD free(_Ctype._LocaleName);\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Init(const _Locinfo& _Lobj) { // initialize from _Lobj\r\n        _Ctype = _Lobj._Getctype();\r\n        _Cvt   = _Lobj._Getcvt();\r\n    }\r\n\r\n    virtual bool __CLR_OR_THIS_CALL do_is(\r\n        mask _Maskval, _Elem _Ch) const { // test if element fits any mask classifications\r\n        return (_CSTD _Getwctype(_Ch, &_Ctype) & _Maskval) != 0;\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_is(const _Elem* _First, const _Elem* _Last,\r\n        mask* _Dest) const { // get mask sequence for elements in [_First, _Last)\r\n        _Adl_verify_range(_First, _Last);\r\n        return reinterpret_cast<const _Elem*>(_CSTD _Getwctypes(\r\n            reinterpret_cast<const wchar_t*>(_First), reinterpret_cast<const wchar_t*>(_Last), _Dest, &_Ctype));\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_scan_is(mask _Maskval, const _Elem* _First,\r\n        const _Elem* _Last) const { // find first in [_First, _Last) that fits mask classification\r\n        _Adl_verify_range(_First, _Last);\r\n        while (_First != _Last && !is(_Maskval, *_First)) {\r\n            ++_First;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_scan_not(mask _Maskval, const _Elem* _First,\r\n        const _Elem* _Last) const { // find first in [_First, _Last) not fitting mask classification\r\n        _Adl_verify_range(_First, _Last);\r\n        while (_First != _Last && is(_Maskval, *_First)) {\r\n            ++_First;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_tolower(_Elem _Ch) const { // convert element to lower case\r\n        return _Towlower(_Ch, &_Ctype);\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_tolower(_Elem* _First,\r\n        const _Elem* _Last) const { // convert [_First, _Last) in place to lower case\r\n        _Adl_verify_range(_First, _Last);\r\n        for (; _First != _Last; ++_First) {\r\n            *_First = _Towlower(*_First, &_Ctype);\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_toupper(_Elem _Ch) const { // convert element to upper case\r\n        return _Towupper(_Ch, &_Ctype);\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_toupper(_Elem* _First,\r\n        const _Elem* _Last) const { // convert [_First, _Last) in place to upper case\r\n        _Adl_verify_range(_First, _Last);\r\n        for (; _First != _Last; ++_First) {\r\n            *_First = _Towupper(*_First, &_Ctype);\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    _Elem __CLR_OR_THIS_CALL _Dowiden(char _Byte) const { // widen char\r\n        mbstate_t _Mbst = {};\r\n        unsigned short _Wc;\r\n\r\n        if (_Mbrtowc(reinterpret_cast<wchar_t*>(&_Wc), &_Byte, 1, &_Mbst, &_Cvt) < 0) {\r\n            return static_cast<unsigned short>(WEOF);\r\n        }\r\n\r\n        return _Wc;\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_widen(char _Byte) const { // widen char\r\n        return _Dowiden(_Byte);\r\n    }\r\n\r\n    virtual const char* __CLR_OR_THIS_CALL do_widen(\r\n        const char* _First, const char* _Last, _Elem* _Dest) const { // widen chars in [_First, _Last)\r\n        _Adl_verify_range(_First, _Last);\r\n        for (; _First != _Last; ++_First, ++_Dest) {\r\n            *_Dest = _Dowiden(*_First);\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    char __CLR_OR_THIS_CALL _Donarrow(_Elem _Ch, char _Dflt) const { // narrow element to char\r\n        char _Buf[MB_LEN_MAX];\r\n        mbstate_t _Mbst = {};\r\n        return _Wcrtomb(_Buf, _Ch, &_Mbst, &_Cvt) != 1 ? _Dflt : _Buf[0];\r\n    }\r\n\r\n    virtual char __CLR_OR_THIS_CALL do_narrow(_Elem _Ch, char _Dflt) const { // narrow element to char\r\n        return _Donarrow(_Ch, _Dflt);\r\n    }\r\n\r\n    virtual const _Elem* __CLR_OR_THIS_CALL do_narrow(const _Elem* _First, const _Elem* _Last, char _Dflt,\r\n        char* _Dest) const { // narrow elements in [_First, _Last) to chars\r\n        _Adl_verify_range(_First, _Last);\r\n        for (; _First != _Last; ++_First, ++_Dest) {\r\n            *_Dest = _Donarrow(*_First, _Dflt);\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\nprivate:\r\n    _Locinfo::_Ctypevec _Ctype; // locale info passed to _Tolower, etc.\r\n    _Locinfo::_Cvtvec _Cvt; // conversion information\r\n};\r\n#endif // defined(_NATIVE_WCHAR_T_DEFINED) && !_ENFORCE_FACET_SPECIALIZATIONS\r\n\r\n} // extern \"C++\"\r\n\r\n_EXPORT_STD template <class _Elem>\r\nclass ctype_byname : public ctype<_Elem> { // ctype for named locale\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    explicit __CLR_OR_THIS_CALL ctype_byname(const char* _Locname, size_t _Refs = 0)\r\n        : ctype<_Elem>(_Locinfo(_Locname), _Refs) {} // construct for named locale\r\n\r\n    explicit __CLR_OR_THIS_CALL ctype_byname(const string& _Str, size_t _Refs = 0)\r\n        : ctype<_Elem>(_Locinfo(_Str.c_str()), _Refs) {} // construct for named locale\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~ctype_byname() noexcept override {}\r\n};\r\n\r\nenum class _Case_sensitive : bool { _Nope, _Yes };\r\n\r\ntemplate <class _InIt, class _Elem>\r\nint _Getloctxt(_InIt& _First, _InIt& _Last, size_t _Numfields, const _Elem* _Ptr, const _Case_sensitive _Matching) {\r\n    // find field at _Ptr that matches longest in [_First, _Last)\r\n    for (size_t _Off = 0; _Ptr[_Off] != _Elem{}; ++_Off) {\r\n        if (_Ptr[_Off] == _Ptr[0]) {\r\n            ++_Numfields; // add fields with leading mark to initial count\r\n        }\r\n    }\r\n\r\n    string _Str(_Numfields, '\\0'); // one column counter for each field\r\n    const ctype<_Elem>& _CType = _STD use_facet<ctype<_Elem>>(locale{});\r\n\r\n    int _Ans = -2; // no candidates so far\r\n    for (size_t _Column = 1;; ++_Column, (void) ++_First, _Ans = -1) { // test each element against all viable fields\r\n        bool _Prefix  = false; // seen at least one valid prefix\r\n        size_t _Off   = 0; // offset into fields\r\n        size_t _Field = 0; // current field number\r\n\r\n        for (; _Field < _Numfields; ++_Field) { // test element at _Column in field _Field\r\n            while (_Ptr[_Off] != _Elem{} && _Ptr[_Off] != _Ptr[0]) { // find beginning of field\r\n                ++_Off;\r\n            }\r\n\r\n            if (_Str[_Field] != '\\0') {\r\n                _Off += _Str[_Field]; // skip tested columns in field\r\n            } else if (_Ptr[_Off += _Column] == _Ptr[0]\r\n                       || _Ptr[_Off] == _Elem{}) { // matched all of field, save as possible answer\r\n                _Str[_Field] = static_cast<char>(_Column < 127 ? _Column : 127); // save skip count if small enough\r\n                _Ans         = static_cast<int>(_Field); // save answer\r\n            } else if (_First == _Last\r\n                       || (_Matching == _Case_sensitive::_Yes\r\n                               ? _Ptr[_Off] != *_First\r\n                               : _CType.tolower(_Ptr[_Off]) != _CType.tolower(static_cast<_Elem>(*_First)))) {\r\n                _Str[_Field] = static_cast<char>(_Column < 127 ? _Column : 127); // no match, just save skip count\r\n            } else {\r\n                _Prefix = true; // still a valid prefix\r\n            }\r\n        }\r\n\r\n        if (!_Prefix || _First == _Last) {\r\n            break; // no pending prefixes or no input, give up\r\n        }\r\n    }\r\n    return _Ans; // return field number or negative value on failure\r\n}\r\n\r\n#if defined(_DLL_CPPLIB)\r\n#if !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\ntemplate class _CRTIMP2_PURE_IMPORT codecvt<char, char, mbstate_t>;\r\n#endif // !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\n#endif // defined(_DLL_CPPLIB)\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"empty_bases\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XLOCALE_\r\n"
  },
  {
    "path": "stl/inc/xlocbuf",
    "content": "// xlocbuf internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XLOCBUF_\r\n#define _XLOCBUF_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <streambuf>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_STL_DISABLE_DEPRECATED_WARNING\r\n_EXPORT_STD template <class _Codecvt, class _Elem = wchar_t, class _Traits = char_traits<_Elem>>\r\nclass _CXX17_DEPRECATE_CODECVT_HEADER wbuffer_convert\r\n    : public basic_streambuf<_Elem, _Traits> { // stream buffer associated with a codecvt facet\r\nprivate:\r\n    enum _Mode { _Unused, _Wrote, _Need, _Got, _Eof };\r\n    enum { _STRING_INC = 8 };\r\n\r\npublic:\r\n    using _Mysb        = streambuf;\r\n    using _Byte_traits = char_traits<char>;\r\n\r\n    using int_type   = typename _Traits::int_type;\r\n    using pos_type   = typename _Traits::pos_type;\r\n    using off_type   = typename _Traits::off_type;\r\n    using state_type = typename _Codecvt::state_type;\r\n\r\n    wbuffer_convert() : _State(), _Pcvt(new _Codecvt), _Mystrbuf(nullptr), _Status(_Unused), _Nback(0) {\r\n        // construct without buffer pointer\r\n        _Loc = locale{_Loc, _Pcvt};\r\n    }\r\n\r\n    explicit wbuffer_convert(_Mysb* _Strbuf)\r\n        : _State(), _Pcvt(new _Codecvt), _Mystrbuf(_Strbuf), _Status(_Unused), _Nback(0) {\r\n        // construct with byte stream buffer pointer\r\n        _Loc = locale{_Loc, _Pcvt};\r\n    }\r\n\r\n    wbuffer_convert(_Mysb* _Strbuf, const _Codecvt* _Pcvt_arg)\r\n        : _State(), _Pcvt(_Pcvt_arg), _Mystrbuf(_Strbuf), _Status(_Unused), _Nback(0) {\r\n        // construct with byte stream buffer pointer and codecvt\r\n        _Loc = locale{_Loc, _Pcvt};\r\n    }\r\n\r\n    wbuffer_convert(_Mysb* _Strbuf, const _Codecvt* _Pcvt_arg, state_type _State_arg)\r\n        : _State(_State_arg), _Pcvt(_Pcvt_arg), _Mystrbuf(_Strbuf), _Status(_Unused), _Nback(0) {\r\n        // construct with byte stream buffer pointer, codecvt, and state\r\n        _Loc = locale{_Loc, _Pcvt};\r\n    }\r\n\r\n    ~wbuffer_convert() noexcept override {\r\n        while (_Status == _Wrote) { // put any trailing homing shift\r\n            if (_Str.size() < _STRING_INC) {\r\n                _Str.assign(_STRING_INC, '\\0');\r\n            }\r\n\r\n            char* _Buf = &_Str[0];\r\n            char* _Dest;\r\n            switch (_Pcvt->unshift(_State, _Buf, _Buf + _Str.size(), _Dest)) { // test result of homing conversion\r\n            case _Codecvt::ok:\r\n                _Status = _Unused; // homed successfully\r\n                _FALLTHROUGH;\r\n\r\n            case _Codecvt::partial:\r\n                { // put any generated bytes\r\n                    ptrdiff_t _Count = _Dest - _Buf;\r\n                    if (0 < _Count\r\n                        && _Byte_traits::eq_int_type(\r\n                            _Byte_traits::eof(), static_cast<_Byte_traits::int_type>(_Mystrbuf->sputn(_Buf, _Count)))) {\r\n                        return; // write failed\r\n                    }\r\n\r\n                    if (_Status == _Wrote && _Count == 0) {\r\n                        _Str.append(_STRING_INC, '\\0'); // try with more space\r\n                    }\r\n\r\n                    break;\r\n                }\r\n\r\n            case _Codecvt::noconv:\r\n                return; // nothing to do\r\n\r\n            default:\r\n                return; // conversion failed\r\n            }\r\n        }\r\n    }\r\n\r\n    _NODISCARD _Mysb* rdbuf() const {\r\n        return _Mystrbuf;\r\n    }\r\n\r\n    _Mysb* rdbuf(_Mysb* _Strbuf) { // set byte stream buffer pointer\r\n        _Mysb* _Oldstrbuf = _Mystrbuf;\r\n        _Mystrbuf         = _Strbuf;\r\n        return _Oldstrbuf;\r\n    }\r\n\r\n    _NODISCARD state_type state() const {\r\n        return _State;\r\n    }\r\n\r\n    wbuffer_convert(const wbuffer_convert&)            = delete;\r\n    wbuffer_convert& operator=(const wbuffer_convert&) = delete;\r\n\r\nprotected:\r\n    int_type overflow(int_type _Meta = _Traits::eof()) override { // put an element to stream\r\n        if (_Traits::eq_int_type(_Traits::eof(), _Meta)) {\r\n            return _Traits::not_eof(_Meta); // EOF, return success code\r\n        } else if (!_Mystrbuf || 0 < _Nback || (_Status != _Unused && _Status != _Wrote)) {\r\n            return _Traits::eof(); // no buffer or reading, fail\r\n        } else { // put using codecvt facet\r\n            const _Elem _Ch = _Traits::to_char_type(_Meta);\r\n\r\n            if (_Str.size() < _STRING_INC) {\r\n                _Str.assign(_STRING_INC, '\\0');\r\n            }\r\n\r\n            for (_Status = _Wrote;;) {\r\n                char* _Buf = &_Str[0];\r\n                const _Elem* _Src;\r\n                char* _Dest;\r\n\r\n                // test result of converting one element\r\n                switch (_Pcvt->out(_State, &_Ch, &_Ch + 1, _Src, _Buf, _Buf + _Str.size(), _Dest)) {\r\n                case _Codecvt::partial:\r\n                case _Codecvt::ok:\r\n                    { // converted something, try to put it out\r\n                        ptrdiff_t _Count = _Dest - _Buf;\r\n                        if (0 < _Count\r\n                            && _Byte_traits::eq_int_type(_Byte_traits::eof(),\r\n                                static_cast<_Byte_traits::int_type>(_Mystrbuf->sputn(_Buf, _Count)))) {\r\n                            return _Traits::eof(); // write failed\r\n                        }\r\n\r\n                        if (_Src != &_Ch) {\r\n                            return _Meta; // converted whole element\r\n                        }\r\n\r\n                        if (0 >= _Count) {\r\n                            if (_Str.size() >= 4 * _STRING_INC) {\r\n                                return _Traits::eof(); // conversion failed\r\n                            }\r\n\r\n                            _Str.append(_STRING_INC, '\\0'); // try with more space\r\n                        }\r\n\r\n                        break;\r\n                    }\r\n\r\n                case _Codecvt::noconv:\r\n                    if (_Traits::eq_int_type(\r\n                            _Traits::eof(), static_cast<int_type>(_Mystrbuf->sputn(reinterpret_cast<const char*>(&_Ch),\r\n                                                static_cast<streamsize>(sizeof(_Elem)))))) {\r\n                        return _Traits::eof();\r\n                    }\r\n\r\n                    return _Meta; // put native byte order\r\n\r\n                default:\r\n                    return _Traits::eof(); // conversion failed\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    int_type pbackfail(int_type _Meta = _Traits::eof()) override { // put an element back to stream\r\n        if (_STD size(_Myback) <= _Nback || _Status == _Wrote) {\r\n            return _Traits::eof(); // nowhere to put back\r\n        } else { // enough room, put it back\r\n            if (!_Traits::eq_int_type(_Traits::eof(), _Meta)) {\r\n                _Myback[_Nback] = _Traits::to_char_type(_Meta);\r\n            }\r\n\r\n            ++_Nback;\r\n            if (_Status == _Unused) {\r\n                _Status = _Got;\r\n            }\r\n\r\n            return _Meta;\r\n        }\r\n    }\r\n\r\n    int_type underflow() override { // get an element from stream, but don't point past it\r\n        int_type _Meta;\r\n\r\n        if (0 >= _Nback) {\r\n            if (_Traits::eq_int_type(_Traits::eof(), _Meta = _Get_elem())) {\r\n                return _Meta; // _Get_elem failed, return EOF\r\n            }\r\n\r\n            _Myback[_Nback++] = _Traits::to_char_type(_Meta);\r\n        }\r\n\r\n        return _Traits::to_int_type(_Myback[_Nback - 1]);\r\n    }\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 6385) // Reading invalid data from 'this->_Myback':\r\n                                // the readable size is 'X' bytes, but 'Y' bytes may be read.\r\n    int_type uflow() override { // get an element from stream, point past it\r\n        int_type _Meta;\r\n\r\n        if (0 >= _Nback) {\r\n            if (_Traits::eq_int_type(_Traits::eof(), _Meta = _Get_elem())) {\r\n                return _Meta; // _Get_elem failed, return EOF\r\n            }\r\n\r\n            _Myback[_Nback++] = _Traits::to_char_type(_Meta);\r\n        }\r\n\r\n        return _Traits::to_int_type(_Myback[--_Nback]);\r\n    }\r\n#pragma warning(pop)\r\n\r\n    pos_type seekoff(off_type, ios_base::seekdir,\r\n        ios_base::openmode = static_cast<ios_base::openmode>(ios_base::in | ios_base::out)) override {\r\n        return pos_type{off_type{-1}}; // always fail\r\n    }\r\n\r\n    pos_type seekpos(\r\n        pos_type, ios_base::openmode = static_cast<ios_base::openmode>(ios_base::in | ios_base::out)) override {\r\n        return pos_type{off_type{-1}}; // always fail\r\n    }\r\n\r\nprivate:\r\n    int_type _Get_elem() { // compose an element from byte stream buffer\r\n        if (_Mystrbuf && _Status != _Wrote) { // got buffer, haven't written, try to compose an element\r\n            if (_Status != _Eof) {\r\n                if (_Str.empty()) {\r\n                    _Status = _Need;\r\n                } else {\r\n                    _Status = _Got;\r\n                }\r\n            }\r\n\r\n            while (_Status != _Eof) { // get using codecvt facet\r\n                char* _Buf = &_Str[0];\r\n                _Elem _Ch;\r\n                _Elem* _Dest;\r\n                const char* _Src;\r\n                int _Meta;\r\n\r\n                if (_Status == _Need) {\r\n                    if (_Byte_traits::eq_int_type(_Byte_traits::eof(), _Meta = _Mystrbuf->sbumpc())) {\r\n                        _Status = _Eof;\r\n                    } else {\r\n                        _Str.push_back(_Byte_traits::to_char_type(_Meta));\r\n                    }\r\n                }\r\n\r\n                // test result of converting one element\r\n                switch (_Pcvt->in(_State, _Buf, _Buf + _Str.size(), _Src, &_Ch, &_Ch + 1, _Dest)) {\r\n                case _Codecvt::partial:\r\n                case _Codecvt::ok:\r\n                    _Str.erase(0, static_cast<size_t>(_Src - _Buf)); // discard any used input\r\n                    if (_Dest != &_Ch) {\r\n                        return _Traits::to_int_type(_Ch);\r\n                    }\r\n\r\n                    break;\r\n\r\n                case _Codecvt::noconv:\r\n                    if (_Str.size() < sizeof(_Elem)) {\r\n                        break; // no conversion, but need more chars\r\n                    }\r\n\r\n                    _CSTD memcpy(&_Ch, _Buf, sizeof(_Elem)); // copy raw bytes to element\r\n                    _Str.erase(0, sizeof(_Elem));\r\n                    return _Traits::to_int_type(_Ch); // return result\r\n\r\n                default:\r\n                    _Status = _Eof; // conversion failed\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        return _Traits::eof();\r\n    }\r\n\r\n    state_type _State; // code conversion state\r\n    const _Codecvt* _Pcvt; // the codecvt facet\r\n    _Mysb* _Mystrbuf; // pointer to stream buffer\r\n    _Mode _Status; // buffer read/write status\r\n    size_t _Nback; // number of elements in putback buffer\r\n    _Elem _Myback[8]; // putback buffer\r\n    string _Str; // unconsumed input bytes\r\n    locale _Loc; // manages reference to codecvt facet\r\n};\r\n\r\n_EXPORT_STD template <class _Codecvt, class _Elem = wchar_t, class _Walloc = allocator<_Elem>,\r\n    class _Balloc = allocator<char>>\r\nclass _CXX17_DEPRECATE_CODECVT_HEADER wstring_convert { // converts between _Elem (wide) and char (byte) strings\r\nprivate:\r\n    enum { _BUF_INC = 8, _BUF_MAX = 16 };\r\n    void _Init(const _Codecvt* _Pcvt_arg = new _Codecvt) { // initialize the object\r\n        _State = state_type{};\r\n        _Pcvt  = _Pcvt_arg;\r\n        _Loc   = locale{_Loc, _Pcvt};\r\n        _Nconv = 0;\r\n    }\r\n\r\npublic:\r\n    using byte_string = basic_string<char, char_traits<char>, _Balloc>;\r\n    using wide_string = basic_string<_Elem, char_traits<_Elem>, _Walloc>;\r\n    using state_type  = typename _Codecvt::state_type;\r\n    using int_type    = typename wide_string::traits_type::int_type;\r\n\r\n    wstring_convert() : _Has_state(false), _Has_berr(false), _Has_werr(false) { // construct with no error strings\r\n        _Init();\r\n    }\r\n\r\n    explicit wstring_convert(const _Codecvt* _Pcvt_arg)\r\n        : _Has_state(false), _Has_berr(false), _Has_werr(false) { // construct with no error strings and codecvt\r\n        _Init(_Pcvt_arg);\r\n    }\r\n\r\n    wstring_convert(const _Codecvt* _Pcvt_arg, state_type _State_arg)\r\n        : _Has_state(true), _Has_berr(false), _Has_werr(false) { // construct with no error strings, codecvt, and state\r\n        _Init(_Pcvt_arg);\r\n        _State = _State_arg;\r\n    }\r\n\r\n    explicit wstring_convert(const byte_string& _Berr_arg)\r\n        : _Berr(_Berr_arg), _Has_state(false), _Has_berr(true), _Has_werr(false) { // construct with byte error string\r\n        _Init();\r\n    }\r\n\r\n    wstring_convert(const byte_string& _Berr_arg, const wide_string& _Werr_arg)\r\n        : _Berr(_Berr_arg), _Werr(_Werr_arg), _Has_state(false), _Has_berr(true),\r\n          _Has_werr(true) { // construct with byte and wide error strings\r\n        _Init();\r\n    }\r\n\r\n    virtual ~wstring_convert() noexcept {}\r\n\r\n    _NODISCARD size_t converted() const noexcept { // get conversion count\r\n        return _Nconv;\r\n    }\r\n\r\n    _NODISCARD state_type state() const {\r\n        return _State;\r\n    }\r\n\r\n    _NODISCARD wide_string from_bytes(char _Byte) { // convert a byte to a wide string\r\n        return from_bytes(&_Byte, &_Byte + 1);\r\n    }\r\n\r\n    _NODISCARD wide_string from_bytes(const char* _Ptr) { // convert a NTBS to a wide string\r\n        return from_bytes(_Ptr, _Ptr + _CSTD strlen(_Ptr));\r\n    }\r\n\r\n    _NODISCARD wide_string from_bytes(const byte_string& _Bstr) { // convert a byte string to a wide string\r\n        const char* _Ptr = _Bstr.c_str();\r\n        return from_bytes(_Ptr, _Ptr + _Bstr.size());\r\n    }\r\n\r\n    _NODISCARD wide_string from_bytes(\r\n        const char* _First, const char* _Last) { // convert byte sequence [_First, _Last) to a wide string\r\n        wide_string _Wbuf;\r\n        wide_string _Wstr;\r\n        const char* _First_sav = _First;\r\n\r\n        if (!_Has_state) {\r\n            _State = state_type{}; // reset state if not remembered\r\n        }\r\n\r\n        _Wbuf.append(_BUF_INC, _Elem{});\r\n        for (_Nconv = 0; _First != _Last; _Nconv = static_cast<size_t>(_First - _First_sav)) {\r\n            // convert one or more bytes\r\n            _Elem* _Dest = &_Wbuf[0];\r\n            _Elem* _Dnext;\r\n\r\n            // test result of converting one or more bytes\r\n            switch (_Pcvt->in(_State, _First, _Last, _First, _Dest, _Dest + _Wbuf.size(), _Dnext)) {\r\n            case _Codecvt::partial:\r\n            case _Codecvt::ok:\r\n                if (_Dest < _Dnext) {\r\n                    _Wstr.append(_Dest, static_cast<size_t>(_Dnext - _Dest));\r\n                } else if (_Wbuf.size() < _BUF_MAX) {\r\n                    _Wbuf.append(_BUF_INC, _Elem{});\r\n                } else if (_Has_werr) {\r\n                    return _Werr;\r\n                } else {\r\n                    _Throw_range_error(\"bad conversion\");\r\n                }\r\n\r\n                break;\r\n\r\n            case _Codecvt::noconv:\r\n                for (; _First != _Last; ++_First) {\r\n                    _Wstr.push_back(static_cast<_Elem>(static_cast<unsigned char>(*_First)));\r\n                }\r\n\r\n                break; // no conversion, just copy code values\r\n\r\n            default:\r\n                if (_Has_werr) {\r\n                    return _Werr;\r\n                } else {\r\n                    _Throw_range_error(\"bad conversion\");\r\n                }\r\n            }\r\n        }\r\n        return _Wstr;\r\n    }\r\n\r\n    _NODISCARD byte_string to_bytes(_Elem _Char) { // convert a wide char to a byte string\r\n        return to_bytes(&_Char, &_Char + 1);\r\n    }\r\n\r\n    _NODISCARD byte_string to_bytes(const _Elem* _Wptr) { // convert a NTWCS to a byte string\r\n        const _Elem* _Next = _Wptr;\r\n        while (*_Next != 0) {\r\n            ++_Next;\r\n        }\r\n\r\n        return to_bytes(_Wptr, _Next);\r\n    }\r\n\r\n    _NODISCARD byte_string to_bytes(const wide_string& _Wstr) { // convert a wide string to a byte string\r\n        const _Elem* _Wptr = _Wstr.c_str();\r\n        return to_bytes(_Wptr, _Wptr + _Wstr.size());\r\n    }\r\n\r\n    _NODISCARD byte_string to_bytes(\r\n        const _Elem* _First, const _Elem* _Last) { // convert wide sequence [_First, _Last) to a byte string\r\n        byte_string _Bbuf;\r\n        byte_string _Bstr;\r\n        const _Elem* _First_sav = _First;\r\n\r\n        if (!_Has_state) {\r\n            _State = state_type{}; // reset state if not remembered\r\n        }\r\n\r\n        _Bbuf.append(_BUF_INC, '\\0');\r\n        for (_Nconv = 0; _First != _Last; _Nconv = static_cast<size_t>(_First - _First_sav)) {\r\n            // convert one or more wide chars\r\n            char* _Dest = &_Bbuf[0];\r\n            char* _Dnext;\r\n\r\n            // test result of converting one or more wide chars\r\n            switch (_Pcvt->out(_State, _First, _Last, _First, _Dest, _Dest + _Bbuf.size(), _Dnext)) {\r\n            case _Codecvt::partial:\r\n            case _Codecvt::ok:\r\n                if (_Dest < _Dnext) {\r\n                    _Bstr.append(_Dest, static_cast<size_t>(_Dnext - _Dest));\r\n                } else if (_Bbuf.size() < _BUF_MAX) {\r\n                    _Bbuf.append(_BUF_INC, '\\0');\r\n                } else if (_Has_berr) {\r\n                    return _Berr;\r\n                } else {\r\n                    _Throw_range_error(\"bad conversion\");\r\n                }\r\n\r\n                break;\r\n\r\n            case _Codecvt::noconv:\r\n                for (; _First != _Last; ++_First) {\r\n                    _Bstr.push_back(static_cast<char>(static_cast<int_type>(*_First)));\r\n                }\r\n\r\n                break; // no conversion, just copy code values\r\n\r\n            default:\r\n                if (_Has_berr) {\r\n                    return _Berr;\r\n                } else {\r\n                    _Throw_range_error(\"bad conversion\");\r\n                }\r\n            }\r\n        }\r\n        return _Bstr;\r\n    }\r\n\r\n    wstring_convert(const wstring_convert&)            = delete;\r\n    wstring_convert& operator=(const wstring_convert&) = delete;\r\n\r\nprivate:\r\n    const _Codecvt* _Pcvt; // the codecvt facet\r\n    locale _Loc; // manages reference to codecvt facet\r\n    byte_string _Berr;\r\n    wide_string _Werr;\r\n    state_type _State; // the remembered state\r\n    bool _Has_state;\r\n    bool _Has_berr;\r\n    bool _Has_werr;\r\n    size_t _Nconv;\r\n};\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XLOCBUF_\r\n"
  },
  {
    "path": "stl/inc/xlocinfo",
    "content": "// xlocinfo internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XLOCINFO_\r\n#define _XLOCINFO_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <__msvc_xlocinfo_types.hpp>\r\n#include <cctype>\r\n#include <clocale>\r\n#include <cstdio> // TRANSITION, VSO-661721\r\n#include <cstdlib>\r\n#include <cwchar>\r\n#include <xstring>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n#define _X_ALL      LC_ALL\r\n#define _X_COLLATE  LC_COLLATE\r\n#define _X_CTYPE    LC_CTYPE\r\n#define _X_MONETARY LC_MONETARY\r\n#define _X_NUMERIC  LC_NUMERIC\r\n#define _X_TIME     LC_TIME\r\n#define _X_MAX      LC_MAX\r\n#define _X_MESSAGES 6\r\n#define _NCAT       (_X_MESSAGES + 1) // maximum + 1\r\n\r\n#define _CATMASK(n) ((1 << (n)) >> 1)\r\n#define _M_COLLATE  _CATMASK(_X_COLLATE)\r\n#define _M_CTYPE    _CATMASK(_X_CTYPE)\r\n#define _M_MONETARY _CATMASK(_X_MONETARY)\r\n#define _M_NUMERIC  _CATMASK(_X_NUMERIC)\r\n#define _M_TIME     _CATMASK(_X_TIME)\r\n#define _M_MESSAGES _CATMASK(_X_MESSAGES)\r\n#define _M_ALL      (_CATMASK(_NCAT) - 1)\r\n\r\n_CRTIMP2_PURE _Collvec __CLRCALL_PURE_OR_CDECL _Getcoll() noexcept;\r\n_CRTIMP2_PURE _Ctypevec __CLRCALL_PURE_OR_CDECL _Getctype() noexcept;\r\n_CRTIMP2_PURE _Cvtvec __CLRCALL_PURE_OR_CDECL _Getcvt() noexcept;\r\n_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Getdateorder() noexcept;\r\n\r\n#ifdef _M_CEE_PURE\r\n[System::Runtime::InteropServices::DllImport(_CRT_MSVCP_CURRENT, EntryPoint = \"_Mbrtowc\",\r\n    CallingConvention = System::Runtime::InteropServices::CallingConvention::Cdecl)] extern \"C\" int\r\n    _Mbrtowc(_Out_opt_ wchar_t*, const char*, size_t, mbstate_t*, const _Cvtvec*) noexcept;\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n_MRTIMP2 _Success_(return >= 0) int __cdecl _Mbrtowc(_When_(_Max_multibyte != 0, _Out_) wchar_t*, const char*,\r\n    size_t _Max_multibyte, mbstate_t*, const _Cvtvec*) noexcept;\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\n_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Strcoll(\r\n    const char*, const char*, const char*, const char*, const _Collvec*) noexcept;\r\n_CRTIMP2_PURE size_t __CLRCALL_PURE_OR_CDECL _Strxfrm(\r\n    _Out_writes_(_End1 - _String1) _Post_readable_size_(return) char* _String1, char* _End1,\r\n    _In_reads_(_End2 - _String2) const char* _String2, const char* _End2, _In_opt_ const _Collvec*) noexcept;\r\n_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Tolower(int, const _Ctypevec*) noexcept;\r\n_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Toupper(int, const _Ctypevec*) noexcept;\r\n_CRTIMP2_PURE _Success_(return != -1) int __CLRCALL_PURE_OR_CDECL\r\n    _Wcrtomb(_Out_ char*, wchar_t, mbstate_t*, const _Cvtvec*) noexcept;\r\n_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Wcscoll(\r\n    const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*, const _Collvec*) noexcept;\r\n_CRTIMP2_PURE size_t __CLRCALL_PURE_OR_CDECL _Wcsxfrm(\r\n    _Out_writes_(_End1 - _String1) _Post_readable_size_(return) wchar_t* _String1, wchar_t* _End1,\r\n    _In_reads_(_End2 - _String2) const wchar_t* _String2, const wchar_t* _End2, _In_opt_ const _Collvec*) noexcept;\r\n\r\n_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _Getwctype(wchar_t, const _Ctypevec*) noexcept;\r\n_CRTIMP2_PURE const wchar_t* __CLRCALL_PURE_OR_CDECL _Getwctypes(\r\n    const wchar_t*, const wchar_t*, short*, const _Ctypevec*) noexcept;\r\n_CRTIMP2_PURE wchar_t __CLRCALL_PURE_OR_CDECL _Towlower(wchar_t, const _Ctypevec*) noexcept;\r\n_CRTIMP2_PURE wchar_t __CLRCALL_PURE_OR_CDECL _Towupper(wchar_t, const _Ctypevec*) noexcept;\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n\r\nextern \"C\" {\r\n// These _should_ be explicitly `noexcept` but cannot be made so here because\r\n// the primary declarations in the C runtime headers are not.\r\n\r\n_Success_(return != 0) _Ret_z_ _ACRTIMP char* __cdecl _Getdays();\r\n\r\n_Success_(return != 0) _Ret_z_ _ACRTIMP char* __cdecl _Getmonths();\r\n\r\n_ACRTIMP void* __cdecl _Gettnames();\r\n\r\n_Success_(return > 0) _ACRTIMP size_t __cdecl _Strftime(\r\n    _Out_writes_z_(_Maxsize) char*, _In_ size_t _Maxsize, _In_z_ const char*, _In_ const tm*, _In_opt_ void*);\r\n\r\n_Success_(return != 0) _Ret_z_ _ACRTIMP wchar_t* __cdecl _W_Getdays();\r\n\r\n_Success_(return != 0) _Ret_z_ _ACRTIMP wchar_t* __cdecl _W_Getmonths();\r\n\r\n_ACRTIMP void* __cdecl _W_Gettnames();\r\n\r\n_Success_(return > 0) _ACRTIMP size_t __cdecl _Wcsftime(\r\n    _Out_writes_z_(_Maxsize) wchar_t*, _In_ size_t _Maxsize, _In_z_ const wchar_t*, _In_ const tm*, _In_opt_ void*);\r\n} // extern \"C\"\r\n\r\n_STD_BEGIN\r\nextern \"C++\" class _CRTIMP2_PURE_IMPORT _Timevec { // smart pointer to information used by _Strftime\r\npublic:\r\n    explicit __CLR_OR_THIS_CALL _Timevec(void* _Ptr = nullptr) : _Timeptr(_Ptr) {}\r\n\r\n    __CLR_OR_THIS_CALL _Timevec(const _Timevec& _Right) : _Timeptr(nullptr) {\r\n        *this = _Right;\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ~_Timevec() noexcept {\r\n        _CSTD free(_Timeptr);\r\n    }\r\n\r\n    _Timevec& __CLR_OR_THIS_CALL operator=(const _Timevec& _Right) { // transfer ownership of _Timeptr from _Right\r\n        if (this != &_Right) {\r\n            _CSTD free(_Timeptr);\r\n            _Timeptr                               = _Right._Timeptr;\r\n            const_cast<_Timevec&>(_Right)._Timeptr = nullptr; // TRANSITION, ABI, should be movable-only\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    void* __CLR_OR_THIS_CALL _Getptr() const {\r\n        return _Timeptr;\r\n    }\r\n\r\nprivate:\r\n    void* _Timeptr; // pointer to time information\r\n};\r\n\r\ntemplate <class _Elem>\r\n_NODISCARD _Elem* _Ntcts_dup_dbg(const _Elem* const _Ptr) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_any_of_v<_Elem, char, wchar_t, unsigned short>);\r\n\r\n    const size_t _Bytes = (char_traits<_Elem>::length(_Ptr) + 1) * sizeof(_Elem);\r\n\r\n#ifdef _DEBUG\r\n    const auto _Result = static_cast<_Elem*>(_CSTD _malloc_dbg(_Bytes, _CRT_BLOCK, __FILE__, __LINE__));\r\n#else\r\n    const auto _Result = static_cast<_Elem*>(_CSTD malloc(_Bytes));\r\n#endif\r\n    if (_Result) {\r\n        _CSTD memcpy(_Result, _Ptr, _Bytes);\r\n    }\r\n\r\n    return _Result;\r\n}\r\n\r\nextern \"C++\" template <class _Elem>\r\nclass _CRTIMP2_PURE_IMPORT _Yarn { // wrap a NTCTS\r\npublic:\r\n    __CLR_OR_THIS_CALL _Yarn() noexcept : _Myptr(nullptr), _Nul(0) {}\r\n\r\n    __CLR_OR_THIS_CALL _Yarn(const _Yarn& _Right) noexcept : _Myptr(nullptr), _Nul(0) {\r\n        *this = _Right;\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL _Yarn(const _Elem* _Right) noexcept : _Myptr(nullptr), _Nul(0) {\r\n        *this = _Right;\r\n    }\r\n\r\n    _Yarn& __CLR_OR_THIS_CALL operator=(const _Yarn& _Right) noexcept {\r\n        return *this = _Right._Myptr;\r\n    }\r\n\r\n    _Yarn& __CLR_OR_THIS_CALL operator=(const _Elem* _Right) noexcept {\r\n        if (_Myptr != _Right) { // new value, discard old and copy new\r\n            _Tidy();\r\n\r\n            if (_Right) { // new is not empty, copy it\r\n                _Myptr = _STD _Ntcts_dup_dbg(_Right);\r\n            }\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    template <class _Elem2 = _Elem, enable_if_t<is_same_v<_Elem2, char>, int> = 0>\r\n    void _From_wide(const wchar_t* const _Right) noexcept {\r\n        if (reinterpret_cast<wchar_t*>(_Myptr) != _Right) { // new value, discard old and copy new\r\n            _Tidy();\r\n\r\n            if (_Right) { // new is not empty, copy it\r\n                _Myptr = reinterpret_cast<char*>(_STD _Ntcts_dup_dbg(_Right));\r\n            }\r\n        }\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ~_Yarn() noexcept {\r\n        _Tidy();\r\n    }\r\n\r\n    _NODISCARD bool __CLR_OR_THIS_CALL empty() const noexcept {\r\n        return _Myptr == nullptr;\r\n    }\r\n\r\n    _Ret_z_ const _Elem* __CLR_OR_THIS_CALL c_str() const noexcept {\r\n        return _Myptr ? _Myptr : &_Nul;\r\n    }\r\n\r\n    _NODISCARD bool __CLR_OR_THIS_CALL _Empty() const noexcept {\r\n        return _Myptr == nullptr;\r\n    }\r\n\r\n    _Ret_z_ const _Elem* __CLR_OR_THIS_CALL _C_str() const noexcept {\r\n        return _Myptr ? _Myptr : &_Nul;\r\n    }\r\n\r\nprivate:\r\n    void __CLR_OR_THIS_CALL _Tidy() noexcept {\r\n        if (_Myptr) {\r\n#ifdef _DEBUG\r\n            _free_dbg(_Myptr, _CRT_BLOCK);\r\n#else\r\n            _CSTD free(_Myptr);\r\n#endif\r\n        }\r\n\r\n        _Myptr = nullptr;\r\n    }\r\n\r\n    _Elem* _Myptr; // pointer to allocated string\r\n    _Elem _Nul; // nul terminator for unallocated string\r\n};\r\n\r\nextern \"C++\" class _CRTIMP2_PURE_IMPORT _Locinfo { // summary of all stuff specific to a locale used by standard facets\r\npublic:\r\n    using _Collvec  = ::_Collvec;\r\n    using _Ctypevec = ::_Ctypevec;\r\n    using _Cvtvec   = ::_Cvtvec;\r\n    using _Timevec  = _STD _Timevec;\r\n\r\n    static void __CLRCALL_PURE_OR_CDECL _Locinfo_ctor(_Locinfo*, const char*);\r\n    static void __CLRCALL_PURE_OR_CDECL _Locinfo_ctor(_Locinfo*, int, const char*);\r\n    static void __CLRCALL_PURE_OR_CDECL _Locinfo_dtor(_Locinfo*);\r\n    static _Locinfo& __CLRCALL_PURE_OR_CDECL _Locinfo_Addcats(_Locinfo*, int, const char*);\r\n\r\n    __CLR_OR_THIS_CALL _Locinfo(const char* _Pch = \"C\")\r\n#ifndef _M_CEE_PURE\r\n        : _Lock(_LOCK_LOCALE)\r\n#endif // !defined(_M_CEE_PURE)\r\n    {\r\n        if (_Pch) {\r\n            _Locinfo_ctor(this, _Pch);\r\n            return;\r\n        }\r\n\r\n        _Xruntime_error(\"bad locale name\");\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL _Locinfo(int _Cat, const char* _Pch)\r\n#ifndef _M_CEE_PURE\r\n        : _Lock(_LOCK_LOCALE)\r\n#endif // !defined(_M_CEE_PURE)\r\n    {\r\n        if (_Pch) {\r\n            _Locinfo_ctor(this, _Cat, _Pch);\r\n            return;\r\n        }\r\n\r\n        _Xruntime_error(\"bad locale name\");\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ~_Locinfo() noexcept {\r\n        _Locinfo_dtor(this);\r\n    }\r\n\r\n    _Locinfo& __CLR_OR_THIS_CALL _Addcats(int _Cat, const char* _Pch) { // add facets matching category mask and NTBS\r\n        if (_Pch) {\r\n            return _Locinfo_Addcats(this, _Cat, _Pch);\r\n        }\r\n\r\n        _Xruntime_error(\"bad locale name\");\r\n    }\r\n\r\n    const char* __CLR_OR_THIS_CALL _Getname() const {\r\n        return _Newlocname._C_str();\r\n    }\r\n\r\n    _Collvec __CLR_OR_THIS_CALL _Getcoll() const {\r\n        return ::_Getcoll();\r\n    }\r\n\r\n    _Ctypevec __CLR_OR_THIS_CALL _Getctype() const {\r\n        return ::_Getctype();\r\n    }\r\n\r\n    _Cvtvec __CLR_OR_THIS_CALL _Getcvt() const {\r\n        return ::_Getcvt();\r\n    }\r\n\r\n    const lconv* __CLR_OR_THIS_CALL _Getlconv() const {\r\n        return localeconv();\r\n    }\r\n\r\n    _Timevec __CLR_OR_THIS_CALL _Gettnames() const {\r\n        return _Timevec(::_Gettnames());\r\n    }\r\n\r\n    const char* __CLR_OR_THIS_CALL _Getdays() const {\r\n        const char* _Ptr = ::_Getdays();\r\n        if (_Ptr) { // capture names and free allocated C string\r\n            const_cast<_Locinfo*>(this)->_Days = _Ptr;\r\n            _CSTD free(const_cast<char*>(_Ptr));\r\n        }\r\n\r\n        return !_Days._Empty() ? _Days._C_str()\r\n                               : \":Sun:Sunday:Mon:Monday:Tue:Tuesday:Wed:Wednesday\"\r\n                                 \":Thu:Thursday:Fri:Friday:Sat:Saturday\";\r\n    }\r\n\r\n    const char* __CLR_OR_THIS_CALL _Getmonths() const {\r\n        const char* _Ptr = ::_Getmonths();\r\n        if (_Ptr) { // capture names and free allocated C string\r\n            const_cast<_Locinfo*>(this)->_Months = _Ptr;\r\n            _CSTD free(const_cast<char*>(_Ptr));\r\n        }\r\n\r\n        return !_Months._Empty() ? _Months._C_str()\r\n                                 : \":Jan:January:Feb:February:Mar:March\"\r\n                                   \":Apr:April:May:May:Jun:June\"\r\n                                   \":Jul:July:Aug:August:Sep:September\"\r\n                                   \":Oct:October:Nov:November:Dec:December\";\r\n    }\r\n\r\n    const char* __CLR_OR_THIS_CALL _Getfalse() const {\r\n        return \"false\";\r\n    }\r\n\r\n    const char* __CLR_OR_THIS_CALL _Gettrue() const {\r\n        return \"true\";\r\n    }\r\n\r\n    int __CLR_OR_THIS_CALL _Getdateorder() const {\r\n        return ::_Getdateorder();\r\n    }\r\n\r\n    _Timevec __CLR_OR_THIS_CALL _W_Gettnames() const {\r\n        return _Timevec(::_W_Gettnames());\r\n    }\r\n\r\n    const unsigned short* __CLR_OR_THIS_CALL _W_Getdays() const {\r\n        const wchar_t* _Ptr = ::_W_Getdays();\r\n        if (_Ptr) { // capture names and free allocated C string\r\n            const_cast<_Locinfo*>(this)->_W_Days = _Ptr;\r\n            _CSTD free(const_cast<wchar_t*>(_Ptr));\r\n        }\r\n\r\n        const wchar_t* _Ret;\r\n\r\n        if (_W_Days._Empty()) {\r\n            _Ret = L\":Sun:Sunday:Mon:Monday:Tue:Tuesday:Wed:Wednesday:Thu:Thursday:Fri:Friday:Sat:Saturday\";\r\n        } else {\r\n            _Ret = _W_Days._C_str();\r\n        }\r\n\r\n        return reinterpret_cast<const unsigned short*>(_Ret);\r\n    }\r\n\r\n    const unsigned short* __CLR_OR_THIS_CALL _W_Getmonths() const {\r\n        const wchar_t* _Ptr = ::_W_Getmonths();\r\n        if (_Ptr) { // capture names and free allocated C string\r\n            const_cast<_Locinfo*>(this)->_W_Months = _Ptr;\r\n            _CSTD free(const_cast<wchar_t*>(_Ptr));\r\n        }\r\n\r\n        const wchar_t* _Ret;\r\n\r\n        if (_W_Months._Empty()) {\r\n            _Ret = L\":Jan:January:Feb:February:Mar:March:Apr:April:May:May:Jun:June\"\r\n                   L\":Jul:July:Aug:August:Sep:September:Oct:October:Nov:November:Dec:December\";\r\n        } else {\r\n            _Ret = _W_Months._C_str();\r\n        }\r\n\r\n        return reinterpret_cast<const unsigned short*>(_Ret);\r\n    }\r\n\r\n    _Locinfo(const _Locinfo&)            = delete;\r\n    _Locinfo& operator=(const _Locinfo&) = delete;\r\n\r\nprivate:\r\n#ifdef _M_CEE_PURE\r\n    _EmptyLockit _Empty_lock; // to maintain same size\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n    _Lockit _Lock; // thread lock, because global locale is altered\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\n    _Yarn<char> _Days; // weekday names\r\n    _Yarn<char> _Months; // month names\r\n    _Yarn<wchar_t> _W_Days; // wide weekday names\r\n    _Yarn<wchar_t> _W_Months; // wide month names\r\n    // TRANSITION, ABI, `_Oldlocname._Myptr` is reinterpreted as `wchar_t*`. We should use `_Yarn<wchar_t>`.\r\n    _Yarn<char> _Oldlocname; // old locale name to revert to on destruction\r\n    _Yarn<char> _Newlocname; // new locale name for this object\r\n};\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XLOCINFO_\r\n"
  },
  {
    "path": "stl/inc/xlocmes",
    "content": "// xlocmes internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XLOCMES_\r\n#define _XLOCMES_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <xiosbase>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD struct messages_base // base class for messages\r\n    : locale::facet // TRANSITION, ABI, shouldn't be derived from locale::facet\r\n{\r\n    using catalog = int;\r\n\r\n    messages_base() noexcept // strengthened\r\n        : messages_base(0) {}\r\n    explicit messages_base(size_t _Refs) noexcept : locale::facet(_Refs) {}\r\n};\r\n\r\n_EXPORT_STD template <class _Elem>\r\nclass messages : public messages_base { // facet for obtaining messages from a catalog\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    using char_type   = _Elem;\r\n    using string_type = basic_string<_Elem, char_traits<_Elem>, allocator<_Elem>>;\r\n\r\n    catalog open(const string& _Catname, const locale& _Loc) const { // open catalog\r\n        return do_open(_Catname, _Loc);\r\n    }\r\n\r\n    string_type get(catalog _Catval, int _Set, int _Message,\r\n        const string_type& _Dflt) const { // get message from set in catalog\r\n        return do_get(_Catval, _Set, _Message, _Dflt);\r\n    }\r\n\r\n    void close(catalog _Catval) const { // close catalog\r\n        do_close(_Catval);\r\n    }\r\n\r\n    __PURE_APPDOMAIN_GLOBAL _CRTIMP2_PURE_IMPORT static locale::id id; // unique facet id\r\n\r\n    explicit messages(size_t _Refs = 0) : messages_base(_Refs) { // construct from current locale\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    messages(const _Locinfo& _Lobj, size_t _Refs = 0) : messages_base(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new messages<_Elem>(_Locinfo(_Ploc->_C_str()));\r\n        }\r\n\r\n        return _X_MESSAGES;\r\n    }\r\n\r\nprotected:\r\n    messages(const char* _Locname, size_t _Refs = 0) : messages_base(_Refs) {\r\n        _BEGIN_LOCINFO(_Lobj(_Locname))\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ~messages() noexcept override {}\r\n\r\n    void _Init(const _Locinfo&) {} // initialize from _Locinfo object (do nothing)\r\n\r\n    virtual catalog __CLR_OR_THIS_CALL do_open(const string&, const locale&) const { // open catalog (do nothing)\r\n        return -1;\r\n    }\r\n\r\n    virtual string_type __CLR_OR_THIS_CALL do_get(catalog, int, int,\r\n        const string_type& _Dflt) const { // get message from set in catalog (return default)\r\n        return _Dflt;\r\n    }\r\n\r\n    virtual void __CLR_OR_THIS_CALL do_close(catalog) const {} // close catalog (do nothing)\r\n};\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdllimport-static-field-def\"\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _Elem>\r\n__PURE_APPDOMAIN_GLOBAL locale::id messages<_Elem>::id;\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n\r\n_EXPORT_STD template <class _Elem>\r\nclass messages_byname : public messages<_Elem> { // messages for named locale\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    explicit messages_byname(const char* _Locname, size_t _Refs = 0)\r\n        : messages<_Elem>(_Locname, _Refs) {} // construct for named locale\r\n\r\n    explicit messages_byname(const string& _Str, size_t _Refs = 0)\r\n        : messages<_Elem>(_Str.c_str(), _Refs) {} // construct for named locale\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~messages_byname() noexcept override {}\r\n};\r\n\r\n#if defined(_DLL_CPPLIB)\r\n\r\n#if !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id messages<char>::id;\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id messages<wchar_t>::id;\r\n#endif // !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\n\r\n#ifdef __FORCE_INSTANCE\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id messages<unsigned short>::id;\r\n#endif // defined(__FORCE_INSTANCE)\r\n#endif // defined(_DLL_CPPLIB)\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XLOCMES_\r\n"
  },
  {
    "path": "stl/inc/xlocmon",
    "content": "// xlocmon internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XLOCMON_\r\n#define _XLOCMON_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <iterator>\r\n#include <xlocnum>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD struct money_base // ultimate base class for moneypunct\r\n    : locale::facet // TRANSITION, ABI, shouldn't be derived from locale::facet\r\n{\r\n    enum { // constants for different format codes\r\n        symbol = '$',\r\n        sign   = '+',\r\n        space  = ' ',\r\n        value  = 'v',\r\n        none   = 'x'\r\n    };\r\n    using part = int;\r\n\r\n    struct pattern { // four-part formats for monetary text\r\n        char field[4];\r\n    };\r\n\r\n    money_base(size_t _Refs = 0) noexcept // strengthened\r\n        : locale::facet(_Refs) {}\r\n};\r\n\r\ntemplate <class _Elem>\r\nclass _Mpunct : public money_base { // common base class for moneypunct<_Elem, false/true>\r\npublic:\r\n    friend _Tidy_guard<_Mpunct>;\r\n\r\n    using char_type   = _Elem;\r\n    using string_type = basic_string<_Elem, char_traits<_Elem>, allocator<_Elem>>;\r\n\r\n    _Elem decimal_point() const {\r\n        return do_decimal_point();\r\n    }\r\n\r\n    _Elem thousands_sep() const {\r\n        return do_thousands_sep();\r\n    }\r\n\r\n    string grouping() const {\r\n        return do_grouping();\r\n    }\r\n\r\n    string_type curr_symbol() const {\r\n        return do_curr_symbol();\r\n    }\r\n\r\n    string_type positive_sign() const {\r\n        return do_positive_sign();\r\n    }\r\n\r\n    string_type negative_sign() const {\r\n        return do_negative_sign();\r\n    }\r\n\r\n    int frac_digits() const {\r\n        return do_frac_digits();\r\n    }\r\n\r\n    pattern pos_format() const {\r\n        return do_pos_format();\r\n    }\r\n\r\n    pattern neg_format() const {\r\n        return do_neg_format();\r\n    }\r\n\r\n    explicit _Mpunct(size_t _Refs, bool _Intl)\r\n        : money_base(_Refs), _International(_Intl) { // construct from current locale\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    _Mpunct(const _Locinfo& _Lobj, size_t _Refs, bool _Intl, bool _Isdef = false)\r\n        : money_base(_Refs), _International(_Intl) {\r\n        _Init(_Lobj, _Isdef);\r\n    }\r\n\r\nprotected:\r\n    _Mpunct(const char* _Locname, size_t _Refs, bool _Intl, bool _Isdef = false)\r\n        : money_base(_Refs), _International(_Intl) {\r\n        _BEGIN_LOCINFO(_Lobj(_Locname))\r\n        _Init(_Lobj, _Isdef);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ~_Mpunct() noexcept override {\r\n        _Tidy();\r\n    }\r\n\r\n    void _Init(const _Locinfo& _Lobj, bool _Isdef = false) { // initialize from _Lobj\r\n        _Cvt              = _Lobj._Getcvt();\r\n        const lconv* _Ptr = _Lobj._Getlconv();\r\n\r\n        _Grouping     = nullptr;\r\n        _Currencysign = nullptr;\r\n        _Plussign     = nullptr;\r\n        _Minussign    = nullptr;\r\n\r\n        _Tidy_guard<_Mpunct> _Guard{this};\r\n        _Grouping = _Maklocstr<char>(_Ptr->mon_grouping, _Cvt);\r\n        if constexpr (is_same_v<_Elem, wchar_t>) {\r\n            _Currencysign = _Maklocwcs(_International ? _Ptr->_W_int_curr_symbol : _Ptr->_W_currency_symbol);\r\n            _Plussign     = _Maklocwcs(4 < static_cast<unsigned int>(_Ptr->p_sign_posn) ? L\"\" : _Ptr->_W_positive_sign);\r\n            _Minussign = _Maklocwcs(4 < static_cast<unsigned int>(_Ptr->n_sign_posn) ? L\"-\" : _Ptr->_W_negative_sign);\r\n            _Decimalpoint = _Ptr->_W_mon_decimal_point[0];\r\n            _Kseparator   = _Ptr->_W_mon_thousands_sep[0];\r\n        } else {\r\n            _Currencysign = _Maklocstr<_Elem>(_International ? _Ptr->int_curr_symbol : _Ptr->currency_symbol, _Cvt);\r\n            _Plussign =\r\n                _Maklocstr<_Elem>(4 < static_cast<unsigned int>(_Ptr->p_sign_posn) ? \"\" : _Ptr->positive_sign, _Cvt);\r\n            _Minussign =\r\n                _Maklocstr<_Elem>(4 < static_cast<unsigned int>(_Ptr->n_sign_posn) ? \"-\" : _Ptr->negative_sign, _Cvt);\r\n            _Decimalpoint = _Maklocchr<_Elem>(_Ptr->mon_decimal_point[0], _Cvt);\r\n            _Kseparator   = _Maklocchr<_Elem>(_Ptr->mon_thousands_sep[0], _Cvt);\r\n        }\r\n\r\n        _Guard._Target = nullptr;\r\n\r\n        _Fracdigits = _International ? _Ptr->int_frac_digits : _Ptr->frac_digits;\r\n        if (_Fracdigits < 0 || CHAR_MAX <= _Fracdigits) {\r\n            _Fracdigits = 0;\r\n        }\r\n\r\n        _Makpat(_Plusformat, static_cast<unsigned int>(_Ptr->p_sep_by_space),\r\n            static_cast<unsigned int>(_Ptr->p_cs_precedes), static_cast<unsigned int>(_Ptr->p_sign_posn));\r\n        _Makpat(_Minusformat, static_cast<unsigned int>(_Ptr->n_sep_by_space),\r\n            static_cast<unsigned int>(_Ptr->n_cs_precedes), static_cast<unsigned int>(_Ptr->n_sign_posn));\r\n\r\n        if (_Isdef) { // apply defaults for required facets\r\n            _CSTD memcpy(&_Plusformat, \"$+xv\", 4);\r\n            _CSTD memcpy(&_Minusformat, \"$+xv\", 4);\r\n        }\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_decimal_point() const {\r\n        return _Decimalpoint;\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_thousands_sep() const {\r\n        return _Kseparator;\r\n    }\r\n\r\n    virtual string __CLR_OR_THIS_CALL do_grouping() const {\r\n        return string{_Grouping};\r\n    }\r\n\r\n    virtual string_type __CLR_OR_THIS_CALL do_curr_symbol() const {\r\n        return string_type{_Currencysign};\r\n    }\r\n\r\n    virtual string_type __CLR_OR_THIS_CALL do_positive_sign() const {\r\n        return string_type{_Plussign};\r\n    }\r\n\r\n    virtual string_type __CLR_OR_THIS_CALL do_negative_sign() const {\r\n        return string_type{_Minussign};\r\n    }\r\n\r\n    virtual int __CLR_OR_THIS_CALL do_frac_digits() const {\r\n        return _Fracdigits;\r\n    }\r\n\r\n    virtual pattern __CLR_OR_THIS_CALL do_pos_format() const {\r\n        return _Plusformat;\r\n    }\r\n\r\n    virtual pattern __CLR_OR_THIS_CALL do_neg_format() const {\r\n        return _Minusformat;\r\n    }\r\n\r\nprivate:\r\n    void _Makpat(pattern& _Pattern, unsigned int _Sepbyspace, unsigned int _Symbolprecedes,\r\n        unsigned int _Signposition) { // make format pattern from locale information\r\n\r\n        const char* _Ptr;\r\n\r\n        if (_International || 2 < _Sepbyspace || 1 < _Symbolprecedes || 4 < _Signposition) {\r\n            // international or bad parameters\r\n            _Ptr = \"$+xv\";\r\n        } else {\r\n            // clang-format off: preserve column/row/group structure of the string literal\r\n            _Ptr =\r\n                \"+v$x\" \"+v$x\" \"v$+x\" \"v+$x\" \"v$+x\"\r\n                \"+$vx\" \"+$vx\" \"$v+x\" \"+$vx\" \"$+vx\"\r\n                \"+v $\" \"+v $\" \"v $+\" \"v +$\" \"v $+\"\r\n                \"+$ v\" \"+$ v\" \"$ v+\" \"+$ v\" \"$+ v\"\r\n                \"+xv$\" \"+ v$\" \"v$ +\" \"v+ $\" \"v$ +\"\r\n                \"+x$v\" \"+ $v\" \"$v +\" \"+ $v\" \"$ +v\";\r\n            // clang-format on\r\n            _Ptr += _Signposition * 4 // pick even/odd column\r\n                  + _Symbolprecedes * 20 // pick even/odd row\r\n                  + _Sepbyspace * 40; // pick first/second/third group\r\n        }\r\n\r\n        _CSTD memcpy(_Pattern.field, _Ptr, sizeof(_Pattern.field));\r\n    }\r\n\r\n    void _Tidy() noexcept { // free all storage\r\n        _CSTD free(const_cast<char*>(_Grouping));\r\n        _CSTD free(const_cast<_Elem*>(_Currencysign));\r\n        _CSTD free(const_cast<_Elem*>(_Plussign));\r\n        _CSTD free(const_cast<_Elem*>(_Minussign));\r\n    }\r\n\r\n    const char* _Grouping; // grouping string, \"\" for \"C\" locale\r\n    _Elem _Decimalpoint; // decimal point, '\\0' for \"C\" locale\r\n    _Elem _Kseparator; // thousands separator, '\\0' for \"C\" locale\r\n    const _Elem* _Currencysign; // currency symbol, \"\" for \"C\" locale\r\n    const _Elem* _Plussign; // plus sign, \"\" for \"C\" locale\r\n    const _Elem* _Minussign; // minus sign, \"-\" for \"C\" locale\r\n    int _Fracdigits; // number of fraction digits, 0 for \"C\" locale\r\n    pattern _Plusformat; // positive format, \"$+vx\" for \"C\" locale\r\n    pattern _Minusformat; // negative format, \"$+vx\" for \"C\" locale\r\n    bool _International; // true if international format\r\n\r\n    _Locinfo::_Cvtvec _Cvt; // conversion information\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, bool _Intl = false>\r\nclass moneypunct : public _Mpunct<_Elem> { // facet for defining monetary punctuation text\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    _PGLOBAL _CRTIMP2_PURE_IMPORT static const bool intl; // true if international\r\n    __PURE_APPDOMAIN_GLOBAL _CRTIMP2_PURE_IMPORT static locale::id id; // unique facet id\r\n\r\n    explicit moneypunct(size_t _Refs = 0) : _Mpunct<_Elem>(_Refs, _Intl) {} // construct from current locale\r\n\r\n    moneypunct(const _Locinfo& _Lobj, size_t _Refs = 0, bool _Isdef = false)\r\n        : _Mpunct<_Elem>(_Lobj, _Refs, _Intl, _Isdef) {}\r\n\r\n    static size_t _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new moneypunct<_Elem, _Intl>(_Locinfo(_Ploc->_C_str()), 0, true);\r\n        }\r\n\r\n        return _X_MONETARY;\r\n    }\r\n\r\nprotected:\r\n    moneypunct(const char* _Locname, size_t _Refs = 0) : _Mpunct<_Elem>(_Locname, _Refs, _Intl) {}\r\n\r\n    __CLR_OR_THIS_CALL ~moneypunct() noexcept override {}\r\n};\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdllimport-static-field-def\"\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _Elem, bool _Intl>\r\n_PGLOBAL const bool moneypunct<_Elem, _Intl>::intl = _Intl;\r\n\r\ntemplate <class _Elem, bool _Intl>\r\n__PURE_APPDOMAIN_GLOBAL locale::id moneypunct<_Elem, _Intl>::id;\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n\r\n_EXPORT_STD template <class _Elem, bool _Intl = false>\r\nclass moneypunct_byname : public moneypunct<_Elem, _Intl> { // moneypunct for named locale\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    explicit moneypunct_byname(const char* _Locname, size_t _Refs = 0)\r\n        : moneypunct<_Elem, _Intl>(_Locname, _Refs) {} // construct for named locale\r\n\r\n    explicit moneypunct_byname(const string& _Str, size_t _Refs = 0)\r\n        : moneypunct<_Elem, _Intl>(_Str.c_str(), _Refs) {} // construct for named locale\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~moneypunct_byname() noexcept override {}\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _InIt = istreambuf_iterator<_Elem, char_traits<_Elem>>>\r\nclass money_get : public locale::facet { // facet for converting text to encoded monetary amounts\r\nprivate:\r\n    using _Mypunct0 = moneypunct<_Elem, false>;\r\n    using _Mypunct1 = moneypunct<_Elem, true>;\r\n\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    using char_type   = _Elem;\r\n    using iter_type   = _InIt;\r\n    using string_type = basic_string<_Elem, char_traits<_Elem>, allocator<_Elem>>;\r\n\r\n    _InIt get(_InIt _First, _InIt _Last, bool _Intl, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        long double& _Val) const { // get long double from [_First, _Last) into _Val\r\n        return do_get(_First, _Last, _Intl, _Iosbase, _State, _Val);\r\n    }\r\n\r\n    _InIt get(_InIt _First, _InIt _Last, bool _Intl, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        string_type& _Val) const { // get string_type from [_First, _Last) into _Val\r\n        return do_get(_First, _Last, _Intl, _Iosbase, _State, _Val);\r\n    }\r\n\r\n    __PURE_APPDOMAIN_GLOBAL _CRTIMP2_PURE_IMPORT static locale::id id; // unique facet id\r\n\r\n    explicit money_get(size_t _Refs = 0) : locale::facet(_Refs) { // construct from current locale\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    money_get(const _Locinfo& _Lobj, size_t _Refs = 0) : locale::facet(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new money_get<_Elem, _InIt>(_Locinfo(_Ploc->_C_str()));\r\n        }\r\n\r\n        return _X_MONETARY;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~money_get() noexcept override {}\r\n\r\n    void _Init(const _Locinfo&) {} // initialize from _Locinfo object\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get(_InIt _First, _InIt _Last, bool _Intl, ios_base& _Iosbase,\r\n        ios_base::iostate& _State,\r\n        long double& _Val) const { // get long double from [_First, _Last) into _Val\r\n        _Elem _Atoms[sizeof(\"0123456789-\")];\r\n        string _Str = _Getmfld(_First, _Last, _Intl, _Iosbase, _Atoms);\r\n\r\n        if (_First == _Last) {\r\n            _State |= ios_base::eofbit;\r\n        }\r\n\r\n        if (_Str.empty()) {\r\n            _State |= ios_base::failbit; // _Getmfld failed\r\n        } else { // convert to long double\r\n            const char* _Eb = _Str.c_str();\r\n            char* _Ep;\r\n            int _Errno             = 0;\r\n            const long double _Ans = _Stodx_v3(_Eb, &_Ep, &_Errno); // convert and \"widen\" double to long double\r\n\r\n            if (_Ep == _Eb || _Errno != 0) {\r\n                _State |= ios_base::failbit;\r\n            } else {\r\n                _Val = _Ans; // deliver value\r\n            }\r\n        }\r\n        return _First;\r\n    }\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get(_InIt _First, _InIt _Last, bool _Intl, ios_base& _Iosbase,\r\n        ios_base::iostate& _State,\r\n        string_type& _Val) const { // get string_type from [_First, _Last) into _Val\r\n        _Elem _Atoms[sizeof(\"0123456789-\")];\r\n        string _Str = _Getmfld(_First, _Last, _Intl, _Iosbase, _Atoms);\r\n        size_t _Len = _Str.size();\r\n\r\n        if (_First == _Last) {\r\n            _State |= ios_base::eofbit;\r\n        }\r\n\r\n        if (_Len == 0) {\r\n            _State |= ios_base::failbit; // _Getmfld failed\r\n        } else { // deliver value\r\n            size_t _Idx = 0;\r\n            _Val.resize(_Len);\r\n            if (_Str[0] == '-') {\r\n                _Val[_Idx++] = _Atoms[10];\r\n            }\r\n\r\n            for (; _Idx < _Len; ++_Idx) {\r\n                _Val[_Idx] = _Atoms[_Str[_Idx] - '0']; // map digits\r\n            }\r\n        }\r\n        return _First;\r\n    }\r\n\r\nprivate:\r\n    string _Getmfld(_InIt& _First, _InIt& _Last, bool _Intl, ios_base& _Iosbase,\r\n        _Elem (&_Atoms)[12]) const { // get monetary field from [_First, _Last) into string_type\r\n        _Adl_verify_range(_First, _Last);\r\n        const _Mpunct<_Elem>* _Ppunct_fac;\r\n        if (_Intl) {\r\n            _Ppunct_fac = _STD addressof(_STD use_facet<_Mypunct1>(_Iosbase.getloc())); // international\r\n        } else {\r\n            _Ppunct_fac = _STD addressof(_STD use_facet<_Mypunct0>(_Iosbase.getloc())); // local\r\n        }\r\n\r\n        bool _Bad = false;\r\n        bool _Neg = false;\r\n        string_type _Sign;\r\n        const money_base::pattern _Pattern = _Ppunct_fac->neg_format();\r\n        string _Val;\r\n        size_t _Idx;\r\n        static constexpr char _Src[]   = \"0123456789-\";\r\n        const ctype<_Elem>& _Ctype_fac = _STD use_facet<ctype<_Elem>>(_Iosbase.getloc());\r\n        _Ctype_fac.widen(_STD begin(_Src), _STD end(_Src), _Atoms);\r\n\r\n        for (size_t _Off = 0; !_Bad && _Off < 4; ++_Off) {\r\n            switch (_Pattern.field[_Off]) { // parse a format component\r\n            case money_base::symbol:\r\n                { // parse currency symbol\r\n                    string_type _Symbol = _Ppunct_fac->curr_symbol();\r\n                    typename string_type::const_iterator _Source;\r\n\r\n                    if ((!(_Iosbase.flags() & ios_base::showbase) && _First != _Last && *_First != *_Symbol.c_str())\r\n                        || (_Off == 3 && _Sign.size() <= 1\r\n                            && (_First == _Last || *_First != *_Symbol.c_str()))) { // showbase ==> mandatory symbol\r\n                                                                                    // or\r\n                                                                                    // currency symbol optional at end\r\n                        _Symbol.erase();\r\n                    }\r\n\r\n                    _Source = _Symbol.begin();\r\n                    while (_First != _Last && _Source != _Symbol.end() && *_First == *_Source) {\r\n                        // still matching currency symbol\r\n                        ++_Source;\r\n                        ++_First;\r\n                    }\r\n\r\n                    if (_Source != _Symbol.end()) {\r\n                        _Bad = true; // currency symbol match failed\r\n                    }\r\n                    break;\r\n                }\r\n\r\n            case money_base::sign: // parse sign\r\n                if (_First != _Last) {\r\n                    if (0 < _Ppunct_fac->positive_sign().size()\r\n                        && _Ppunct_fac->positive_sign()[0] == *_First) { // match positive sign\r\n                        ++_First;\r\n                        _Sign = _Ppunct_fac->positive_sign();\r\n                    } else if (0 < _Ppunct_fac->negative_sign().size()\r\n                               && _Ppunct_fac->negative_sign()[0] == *_First) { // match negative sign\r\n                        ++_First;\r\n                        _Sign = _Ppunct_fac->negative_sign();\r\n                        _Neg  = true;\r\n                    } else if (0 != _Ppunct_fac->positive_sign().size() && 0 == _Ppunct_fac->negative_sign().size()) {\r\n                        _Neg = true;\r\n                    }\r\n                }\r\n\r\n                break; // sign match can't fail\r\n\r\n            case money_base::value:\r\n                { // parse value field\r\n                    int _Fracdigseen        = 0;\r\n                    int _Fracdigits         = _Ppunct_fac->frac_digits();\r\n                    const string _Grouping  = _Ppunct_fac->grouping();\r\n                    const _Elem _Kseparator = _Grouping.empty() ? _Elem{} : _Ppunct_fac->thousands_sep();\r\n\r\n                    if (_Kseparator == _Elem{} || CHAR_MAX <= static_cast<unsigned char>(*_Grouping.c_str())) {\r\n                        for (; _First != _Last && (_Idx = _Find_elem(_Atoms, *_First)) < 10; ++_First) {\r\n                            _Val += _Src[_Idx]; // no grouping, just gather digits\r\n                        }\r\n                    } else { // grouping specified, gather digits and group sizes\r\n                        string _Groups;\r\n                        _Groups.push_back('\\0');\r\n                        size_t _Group = 0;\r\n\r\n                        for (; _First != _Last; ++_First) {\r\n                            if ((_Idx = _Find_elem(_Atoms, *_First)) < 10) { // got a digit, add to group size\r\n                                _Val += _Src[_Idx];\r\n                                if (_Groups[_Group] != CHAR_MAX) {\r\n                                    ++_Groups[_Group];\r\n                                }\r\n                            } else if (_Groups[_Group] == '\\0' || *_First != _Kseparator) {\r\n                                break; // not a group separator, done\r\n                            } else { // add a new group to _Groups string\r\n                                _Groups.push_back('\\0');\r\n                                ++_Group;\r\n                            }\r\n                        }\r\n\r\n                        if (_Group != 0) { // thousands separators seen\r\n                            if ('\\0' < _Groups[_Group]) {\r\n                                ++_Group; // add trailing group to group count\r\n                            } else {\r\n                                _Bad = true; // trailing separator, fail\r\n                            }\r\n                        }\r\n\r\n                        for (const char* _Pg = _Grouping.c_str(); !_Bad && 0 < _Group;) {\r\n                            if (*_Pg == CHAR_MAX) {\r\n                                break; // end of grouping constraints to check\r\n                            }\r\n\r\n                            if ((0 < --_Group && *_Pg != _Groups[_Group]) || (0 == _Group && *_Pg < _Groups[_Group])) {\r\n                                _Bad = true; // bad group size, fail\r\n                            } else if ('\\0' < _Pg[1]) {\r\n                                ++_Pg; // group size okay, advance to next test\r\n                            }\r\n                        }\r\n\r\n                        if (_Bad) {\r\n                            break; // bad grouping, give up\r\n                        }\r\n                    }\r\n\r\n                    const _Elem _Point = _Ppunct_fac->decimal_point();\r\n                    if (_First != _Last && _Point != _Elem{}\r\n                        && *_First == _Point) { // seen decimal point, gather fraction digits\r\n                        while (++_First != _Last && _Fracdigseen < _Fracdigits\r\n                               && (_Idx = _Find_elem(_Atoms, *_First)) < 10) {\r\n                            _Val += _Src[_Idx];\r\n                            ++_Fracdigseen;\r\n                        }\r\n\r\n                        if (_Fracdigseen < _Fracdigits) {\r\n                            _Bad = true; // short fraction\r\n                        }\r\n                    }\r\n\r\n                    if (_Val.empty()) {\r\n                        _Bad = true; // fail if no elements parsed\r\n                    } else {\r\n                        for (; _Fracdigseen < _Fracdigits; ++_Fracdigseen) {\r\n                            _Val += '0'; // pad out fraction with zeros\r\n                        }\r\n                    }\r\n\r\n                    break;\r\n                }\r\n\r\n            case money_base::space:\r\n            case money_base::none:\r\n                { // parse optional space\r\n                    if (_Off == 3) {\r\n                        break; // ignore space at end\r\n                    }\r\n\r\n                    bool _Seen = false;\r\n\r\n                    for (; _First != _Last && _Ctype_fac.is(ctype_base::space, *_First); ++_First) {\r\n                        _Seen = true; // skip any space\r\n                    }\r\n\r\n                    if (_Pattern.field[_Off] == money_base::space && !_Seen) {\r\n                        _Bad = true; // fail if no space seen\r\n                    }\r\n\r\n                    break;\r\n                }\r\n\r\n            default:\r\n                _STL_ASSERT(false, \"Invalid money_base::pattern, see N4981 [locale.moneypunct.general]/1: \"\r\n                                   \"In the field member of a pattern object, each value symbol, sign, value, \"\r\n                                   \"and either space or none appears exactly once.\");\r\n                break;\r\n            } // switch\r\n        }\r\n\r\n        if (!_Bad && 1 < _Sign.size()) { // match rest of sign string\r\n            auto _Source = _Sign.begin();\r\n\r\n            while (++_Source != _Sign.end() && _First != _Last && *_First == *_Source) {\r\n                ++_First;\r\n            }\r\n\r\n            if (_Source != _Sign.end()) {\r\n                _Bad = true; // rest of sign doesn't match, fail\r\n            }\r\n        }\r\n\r\n        if (_Bad) {\r\n            _Val.erase(); // bad input, return empty string\r\n        } else if (_Neg) {\r\n            _Val.insert(0, 1, '-'); // minus sign\r\n        }\r\n\r\n        return _Val;\r\n    }\r\n};\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdllimport-static-field-def\"\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _Elem, class _InIt>\r\n__PURE_APPDOMAIN_GLOBAL locale::id money_get<_Elem, _InIt>::id;\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n\r\n_EXPORT_STD template <class _Elem, class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem>>>\r\nclass money_put : public locale::facet { // facet for converting encoded monetary amounts to text\r\nprivate:\r\n    using _Mypunct0 = moneypunct<_Elem, false>;\r\n    using _Mypunct1 = moneypunct<_Elem, true>;\r\n\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    using char_type   = _Elem;\r\n    using iter_type   = _OutIt;\r\n    using string_type = basic_string<_Elem, char_traits<_Elem>, allocator<_Elem>>;\r\n\r\n    _OutIt put(_OutIt _Dest, bool _Intl, ios_base& _Iosbase, _Elem _Fill,\r\n        long double _Val) const { // put long double to _Dest\r\n        return do_put(_Dest, _Intl, _Iosbase, _Fill, _Val);\r\n    }\r\n\r\n    _OutIt put(_OutIt _Dest, bool _Intl, ios_base& _Iosbase, _Elem _Fill,\r\n        const string_type& _Val) const { // put string_type to _Dest\r\n        return do_put(_Dest, _Intl, _Iosbase, _Fill, _Val);\r\n    }\r\n\r\n    __PURE_APPDOMAIN_GLOBAL _CRTIMP2_PURE_IMPORT static locale::id id; // unique facet id\r\n\r\n    explicit money_put(size_t _Refs = 0) : locale::facet(_Refs) { // construct from current locale\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    money_put(const _Locinfo& _Lobj, size_t _Refs = 0) : locale::facet(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new money_put<_Elem, _OutIt>(_Locinfo(_Ploc->_C_str()));\r\n        }\r\n\r\n        return _X_MONETARY;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~money_put() noexcept override {}\r\n\r\n    void _Init(const _Locinfo&) {} // initialize from _Locinfo object\r\n\r\n    virtual _OutIt __CLR_OR_THIS_CALL do_put(_OutIt _Dest, bool _Intl, ios_base& _Iosbase, _Elem _Fill,\r\n        long double _Val) const { // put long double to _Dest\r\n        bool _Negative = false;\r\n        if (_Val < 0) {\r\n            _Negative = true;\r\n            _Val      = -_Val;\r\n        }\r\n\r\n        size_t _Exp;\r\n        for (_Exp = 0; 1e35 <= _Val && _Exp < 5000; _Exp += 10) {\r\n            _Val /= 1e10; // drop 10 zeros before decimal point\r\n        }\r\n\r\n        char _Buf[40];\r\n\r\n        // convert to chars:\r\n        const int _Count = _CSTD sprintf_s(_Buf, sizeof(_Buf), \"%.0Lf\", _Val);\r\n\r\n        if (_Count < 0) {\r\n            return _Dest; // bad conversion, give up\r\n        }\r\n\r\n        const ctype<_Elem>& _Ctype_fac = _STD use_facet<ctype<_Elem>>(_Iosbase.getloc());\r\n        const _Elem _Elem0             = _Ctype_fac.widen('0');\r\n\r\n        string_type _Val2(static_cast<size_t>(_Count), _Elem{});\r\n        _Ctype_fac.widen(_Buf, _Buf + _Count, &_Val2[0]);\r\n        _Val2.append(_Exp, _Elem0); // scale by trailing zeros\r\n        return _Putmfld(_Dest, _Intl, _Iosbase, _Fill, _Negative, _Val2, _Elem0);\r\n    }\r\n\r\n    virtual _OutIt __CLR_OR_THIS_CALL do_put(_OutIt _Dest, bool _Intl, ios_base& _Iosbase, _Elem _Fill,\r\n        const string_type& _Val) const { // put string_type to _Dest\r\n        static constexpr char _Src[] = \"0123456789-\";\r\n        _Elem _Atoms[sizeof(_Src)];\r\n        const ctype<_Elem>& _Ctype_fac = _STD use_facet<ctype<_Elem>>(_Iosbase.getloc());\r\n        _Ctype_fac.widen(_STD begin(_Src), _STD end(_Src), _Atoms);\r\n\r\n        bool _Negative = false;\r\n        size_t _Idx0   = 0;\r\n        if (!_Val.empty() && _Val[0] == _Atoms[10]) { // strip off '-'\r\n            _Negative = true;\r\n            ++_Idx0;\r\n        }\r\n\r\n        size_t _Size = _Val.size();\r\n        size_t _Idx  = _Idx0;\r\n        for (; _Idx < _Size && _Find_elem(_Atoms, _Val[_Idx]) < 10; ++_Idx) { // count digits\r\n        }\r\n\r\n        string_type _Val2(&_Val[_Idx0], _Idx - _Idx0);\r\n        if (_Val2.empty()) { // replace empty digit string with '0'\r\n            _Val2.push_back(_Atoms[0]);\r\n        }\r\n\r\n        return _Putmfld(_Dest, _Intl, _Iosbase, _Fill, _Negative, _Val2, _Atoms[0]);\r\n    }\r\n\r\nprivate:\r\n    _OutIt _Putmfld(\r\n        _OutIt _Dest, bool _Intl, ios_base& _Iosbase, _Elem _Fill, bool _Neg, string_type _Val, _Elem _Elem0) const {\r\n        // put string_type with just digits to _Dest\r\n        const _Mpunct<_Elem>* _Ppunct_fac;\r\n        if (_Intl) {\r\n            _Ppunct_fac = _STD addressof(_STD use_facet<_Mypunct1>(_Iosbase.getloc())); // international\r\n        } else {\r\n            _Ppunct_fac = _STD addressof(_STD use_facet<_Mypunct0>(_Iosbase.getloc())); // local\r\n        }\r\n\r\n        const string _Grouping = _Ppunct_fac->grouping();\r\n        int _Ifracdigits       = _Ppunct_fac->frac_digits();\r\n        const auto _Fracdigits = static_cast<unsigned int>(_Ifracdigits < 0 ? -_Ifracdigits : _Ifracdigits);\r\n\r\n        if (_Val.size() <= _Fracdigits) {\r\n            _Val.insert(0, _Fracdigits - _Val.size() + 1, _Elem0);\r\n        } else if (*_Grouping.c_str() != CHAR_MAX && '\\0' < *_Grouping.c_str()) {\r\n            // grouping specified, add thousands separators\r\n            const _Elem _Kseparator = _Ppunct_fac->thousands_sep();\r\n            const char* _Pg         = _Grouping.c_str();\r\n            size_t _Off             = _Val.size() - _Fracdigits; // start of fraction\r\n\r\n            while (*_Pg != CHAR_MAX && '\\0' < *_Pg && static_cast<size_t>(*_Pg) < _Off) {\r\n                // add a thousands separator, right to left\r\n                _Val.insert(_Off -= *_Pg, 1, _Kseparator);\r\n                if ('\\0' < _Pg[1]) {\r\n                    ++_Pg; // not last group, advance\r\n                }\r\n            }\r\n        }\r\n\r\n        money_base::pattern _Pattern;\r\n        string_type _Sign;\r\n        if (_Neg) { // negative value, choose appropriate format and sign\r\n            _Pattern = _Ppunct_fac->neg_format();\r\n            _Sign    = _Ppunct_fac->negative_sign();\r\n        } else { // positive value, choose appropriate format and sign\r\n            _Pattern = _Ppunct_fac->pos_format();\r\n            _Sign    = _Ppunct_fac->positive_sign();\r\n        }\r\n\r\n        string_type _Symbol;\r\n        if (_Iosbase.flags() & ios_base::showbase) {\r\n            _Symbol = _Ppunct_fac->curr_symbol(); // showbase ==> show $\r\n        }\r\n\r\n        bool _Intern = false;\r\n        size_t _Fillcount;\r\n        size_t _Off;\r\n        for (_Fillcount = 0, _Off = 0; _Off < 4; ++_Off) {\r\n            switch (_Pattern.field[_Off]) { // accumulate total length in _Fillcount\r\n            case money_base::symbol: // count currency symbol size\r\n                _Fillcount += _Symbol.size();\r\n                break;\r\n\r\n            case money_base::sign: // count sign size\r\n                _Fillcount += _Sign.size();\r\n                break;\r\n\r\n            case money_base::value: // count value field size\r\n                _Fillcount += _Val.size() + (0 < _Fracdigits ? 1 : 0)\r\n                            + (_Val.size() <= _Fracdigits ? _Fracdigits - _Val.size() + 1 : 0);\r\n                break;\r\n\r\n            case money_base::space: // count space size\r\n                ++_Fillcount; // at least one space\r\n                _FALLTHROUGH;\r\n\r\n            case money_base::none: // count space size\r\n                if (_Off != 3) {\r\n                    _Intern = true; // optional internal fill\r\n                }\r\n\r\n                break;\r\n\r\n            default:\r\n                _STL_ASSERT(false, \"Invalid money_base::pattern, see N4981 [locale.moneypunct.general]/1: \"\r\n                                   \"In the field member of a pattern object, each value symbol, sign, value, \"\r\n                                   \"and either space or none appears exactly once.\");\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (_Iosbase.width() <= 0 || static_cast<size_t>(_Iosbase.width()) <= _Fillcount) {\r\n            _Fillcount = 0;\r\n        } else {\r\n            _Fillcount = static_cast<size_t>(_Iosbase.width()) - _Fillcount;\r\n        }\r\n\r\n        ios_base::fmtflags _Afl = _Iosbase.flags() & ios_base::adjustfield;\r\n        if (_Afl != ios_base::left && (_Afl != ios_base::internal || !_Intern)) { // put leading fill\r\n            _Dest      = _Rep(_Dest, _Fill, _Fillcount);\r\n            _Fillcount = 0;\r\n        }\r\n\r\n        for (_Off = 0; _Off < 4; ++_Off) {\r\n            switch (_Pattern.field[_Off]) { // put components as specified by _Pattern\r\n            case money_base::symbol: // put currency symbol\r\n                _Dest = _Put(_Dest, _Symbol.begin(), _Symbol.size());\r\n                break;\r\n\r\n            case money_base::sign: // put sign\r\n                if (0 < _Sign.size()) {\r\n                    _Dest = _Put(_Dest, _Sign.begin(), 1);\r\n                }\r\n\r\n                break;\r\n\r\n            case money_base::value: // put value field\r\n                if (_Fracdigits == 0) {\r\n                    _Dest = _Put(_Dest, _Val.begin(), _Val.size()); // no fraction part\r\n                } else if (_Val.size() <= _Fracdigits) { // put leading zero, all fraction digits\r\n                    *_Dest++ = _Elem0;\r\n                    *_Dest++ = _Ppunct_fac->decimal_point();\r\n                    _Dest    = _Rep(_Dest, _Elem0, _Fracdigits - _Val.size()); // insert zeros\r\n                    _Dest    = _Put(_Dest, _Val.begin(), _Val.size());\r\n                } else { // put both integer and fraction parts\r\n                    _Dest    = _Put(_Dest, _Val.begin(), _Val.size() - _Fracdigits); // put integer part\r\n                    *_Dest++ = _Ppunct_fac->decimal_point();\r\n                    _Dest =\r\n                        _Put(_Dest, _Val.end() - static_cast<ptrdiff_t>(_Fracdigits), _Fracdigits); // put fraction part\r\n                }\r\n                break;\r\n\r\n            case money_base::space: // put any internal fill\r\n                _Dest = _Rep(_Dest, _Fill, 1);\r\n                _FALLTHROUGH;\r\n\r\n            case money_base::none: // put any internal fill\r\n                if (_Afl == ios_base::internal) { // put internal fill\r\n                    _Dest      = _Rep(_Dest, _Fill, _Fillcount);\r\n                    _Fillcount = 0;\r\n                }\r\n                break;\r\n\r\n            default:\r\n                _STL_ASSERT(false, \"Invalid money_base::pattern, see N4981 [locale.moneypunct.general]/1: \"\r\n                                   \"In the field member of a pattern object, each value symbol, sign, value, \"\r\n                                   \"and either space or none appears exactly once.\");\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (1 < _Sign.size()) {\r\n            _Dest = _Put(_Dest, _Sign.begin() + 1, _Sign.size() - 1); // put remainder of sign\r\n        }\r\n\r\n        _Iosbase.width(0);\r\n        return _Rep(_Dest, _Fill, _Fillcount); // put trailing fill\r\n    }\r\n\r\n    static _OutIt _Put(_OutIt _Dest, typename string_type::const_iterator _Source, size_t _Count) {\r\n        // put [_Source, _Source + _Count) to _Dest\r\n        for (; 0 < _Count; --_Count, (void) ++_Dest, ++_Source) {\r\n            *_Dest = *_Source;\r\n        }\r\n\r\n        return _Dest;\r\n    }\r\n\r\n    static _OutIt _Rep(_OutIt _Dest, _Elem _Ch, size_t _Count) { // put _Count * _Ch to _Dest\r\n        for (; 0 < _Count; --_Count, (void) ++_Dest) {\r\n            *_Dest = _Ch;\r\n        }\r\n\r\n        return _Dest;\r\n    }\r\n};\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdllimport-static-field-def\"\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _Elem, class _OutIt>\r\n__PURE_APPDOMAIN_GLOBAL locale::id money_put<_Elem, _OutIt>::id;\r\n\r\n#if defined(_DLL_CPPLIB)\r\n\r\n#if !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\ntemplate _PGLOBAL const bool moneypunct<char, true>::intl;\r\ntemplate _PGLOBAL const bool moneypunct<char, false>::intl;\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id moneypunct<char, true>::id;\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id moneypunct<char, false>::id;\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id money_get<char, istreambuf_iterator<char, char_traits<char>>>::id;\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id money_put<char, ostreambuf_iterator<char, char_traits<char>>>::id;\r\n\r\ntemplate _PGLOBAL const bool moneypunct<wchar_t, true>::intl;\r\ntemplate _PGLOBAL const bool moneypunct<wchar_t, false>::intl;\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id moneypunct<wchar_t, true>::id;\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id moneypunct<wchar_t, false>::id;\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id money_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t>>>::id;\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id money_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t>>>::id;\r\n#endif // !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\n\r\n#ifdef __FORCE_INSTANCE\r\ntemplate _PGLOBAL const bool moneypunct<unsigned short, true>::intl;\r\ntemplate _PGLOBAL const bool moneypunct<unsigned short, false>::intl;\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id moneypunct<unsigned short, true>::id;\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id moneypunct<unsigned short, false>::id;\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id\r\n    money_get<unsigned short, istreambuf_iterator<unsigned short, char_traits<unsigned short>>>::id;\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id\r\n    money_put<unsigned short, ostreambuf_iterator<unsigned short, char_traits<unsigned short>>>::id;\r\n#endif // defined(__FORCE_INSTANCE)\r\n#endif // defined(_DLL_CPPLIB)\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XLOCMON_\r\n"
  },
  {
    "path": "stl/inc/xlocnum",
    "content": "// xlocnum internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XLOCNUM_\r\n#define _XLOCNUM_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <cfloat>\r\n#include <climits>\r\n#include <cmath>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <iterator>\r\n#include <streambuf>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n_CRTIMP2_PURE long __CLRCALL_PURE_OR_CDECL _Stolx(\r\n    const char*, _Out_opt_ _Deref_post_opt_valid_ char**, int, int*) noexcept;\r\n_CRTIMP2_PURE unsigned long __CLRCALL_PURE_OR_CDECL _Stoulx(\r\n    const char*, _Out_opt_ _Deref_post_opt_valid_ char**, int, int*) noexcept;\r\n_CRTIMP2_PURE long long __CLRCALL_PURE_OR_CDECL _Stollx(\r\n    const char*, _Out_opt_ _Deref_post_opt_valid_ char**, int, int*) noexcept;\r\n_CRTIMP2_PURE unsigned long long __CLRCALL_PURE_OR_CDECL _Stoullx(\r\n    const char*, _Out_opt_ _Deref_post_opt_valid_ char**, int, int*) noexcept;\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n\r\n_STD_BEGIN\r\n\r\n_INLINE_VAR constexpr size_t _Max_int_dig = 32; // integer properties\r\n\r\ninline double _Stodx_v3(const char* _Str, char** _Endptr, int* _Perr) noexcept { // convert string to double\r\n    int& _Errno_ref = errno; // Nonzero cost, pay it once\r\n    const int _Orig = _Errno_ref;\r\n\r\n    _Errno_ref  = 0;\r\n    double _Val = _CSTD strtod(_Str, _Endptr);\r\n    *_Perr      = _Errno_ref;\r\n    _Errno_ref  = _Orig;\r\n\r\n    return _Val;\r\n}\r\n\r\ninline float _Stofx_v3(const char* _Str, char** _Endptr, int* _Perr) noexcept { // convert string to float\r\n    int& _Errno_ref = errno; // Nonzero cost, pay it once\r\n    const int _Orig = _Errno_ref;\r\n\r\n    _Errno_ref = 0;\r\n    float _Val = _CSTD strtof(_Str, _Endptr);\r\n    *_Perr     = _Errno_ref;\r\n    _Errno_ref = _Orig;\r\n\r\n    return _Val;\r\n}\r\n\r\ntemplate <class _Elem, size_t _Base_size>\r\nsize_t _Find_elem(const _Elem (&_Base)[_Base_size], const _Elem _Ch) {\r\n    // lookup _Ch in array storing NUL-terminated string _Base\r\n    // pre: _Base contains no nulls except for _Base[_Base_size - 1]\r\n    return static_cast<size_t>(_STD _Find_unchecked(_Base, _Base + (_Base_size - 1), _Ch) - _Base);\r\n}\r\n\r\ninline wchar_t* _Maklocwcs(const wchar_t* _Ptr) { // copy NTWCS to allocated storage\r\n    const size_t _Count = _CSTD wcslen(_Ptr) + 1;\r\n\r\n    wchar_t* _Ptrdest = static_cast<wchar_t*>(_calloc_dbg(_Count, sizeof(wchar_t), _CRT_BLOCK, __FILE__, __LINE__));\r\n\r\n    if (!_Ptrdest) {\r\n        _Xbad_alloc();\r\n    }\r\n\r\n    _CSTD wmemcpy(_Ptrdest, _Ptr, _Count);\r\n    return _Ptrdest;\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\nclass numpunct : public locale::facet { // facet for defining numeric punctuation text\r\nprivate:\r\n    friend _Tidy_guard<numpunct>;\r\n\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    using string_type = basic_string<_Elem, char_traits<_Elem>, allocator<_Elem>>;\r\n    using char_type   = _Elem;\r\n\r\n    __PURE_APPDOMAIN_GLOBAL _CRTIMP2_PURE_IMPORT static locale::id id; // unique facet id\r\n\r\n    _Elem decimal_point() const {\r\n        return do_decimal_point();\r\n    }\r\n\r\n    _Elem thousands_sep() const {\r\n        return do_thousands_sep();\r\n    }\r\n\r\n    string grouping() const {\r\n        return do_grouping();\r\n    }\r\n\r\n    string_type falsename() const {\r\n        return do_falsename();\r\n    }\r\n\r\n    string_type truename() const {\r\n        return do_truename();\r\n    }\r\n\r\n    explicit numpunct(size_t _Refs = 0) : locale::facet(_Refs) { // construct from current locale\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        if (_Kseparator == 0) {\r\n            _Kseparator = _Maklocchr<_Elem>(',', _Lobj._Getcvt()); // NB: differs from \"C\" locale\r\n        }\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    numpunct(const _Locinfo& _Lobj, size_t _Refs = 0, bool _Isdef = false) : locale::facet(_Refs) {\r\n        _Init(_Lobj, _Isdef);\r\n    }\r\n\r\n    static size_t _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new numpunct<_Elem>(_Locinfo(_Ploc->_C_str()), 0, true);\r\n        }\r\n        return _X_NUMERIC;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~numpunct() noexcept override {\r\n        _Tidy();\r\n    }\r\n\r\n    numpunct(const char* _Locname, size_t _Refs = 0, bool _Isdef = false) : locale::facet(_Refs) {\r\n        _BEGIN_LOCINFO(_Lobj(_Locname))\r\n        _Init(_Lobj, _Isdef);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    void _Init(const _Locinfo& _Lobj, bool _Isdef = false) { // initialize from _Lobj\r\n        const lconv* _Ptr      = _Lobj._Getlconv();\r\n        _Locinfo::_Cvtvec _Cvt = _Lobj._Getcvt(); // conversion information\r\n\r\n        _Grouping  = nullptr;\r\n        _Falsename = nullptr;\r\n        _Truename  = nullptr;\r\n\r\n        _Tidy_guard<numpunct> _Guard{this};\r\n        _Grouping      = _Maklocstr<char>(_Isdef ? \"\" : _Ptr->grouping, _Cvt);\r\n        _Falsename     = _Maklocstr<_Elem>(_Lobj._Getfalse(), _Cvt);\r\n        _Truename      = _Maklocstr<_Elem>(_Lobj._Gettrue(), _Cvt);\r\n        _Guard._Target = nullptr;\r\n\r\n        if (_Isdef) { // apply defaults for required facets\r\n            _Dp         = _Maklocchr<_Elem>('.', _Cvt);\r\n            _Kseparator = _Maklocchr<_Elem>(',', _Cvt);\r\n        } else {\r\n            if constexpr (is_same_v<_Elem, wchar_t>) {\r\n                _Dp         = _Ptr->_W_decimal_point[0];\r\n                _Kseparator = _Ptr->_W_thousands_sep[0];\r\n            } else {\r\n                _Dp         = _Maklocchr<_Elem>(_Ptr->decimal_point[0], _Cvt);\r\n                _Kseparator = _Maklocchr<_Elem>(_Ptr->thousands_sep[0], _Cvt);\r\n            }\r\n        }\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_decimal_point() const {\r\n        return _Dp;\r\n    }\r\n\r\n    virtual _Elem __CLR_OR_THIS_CALL do_thousands_sep() const {\r\n        return _Kseparator;\r\n    }\r\n\r\n    virtual string __CLR_OR_THIS_CALL do_grouping() const {\r\n        return string{_Grouping};\r\n    }\r\n\r\n    virtual string_type __CLR_OR_THIS_CALL do_falsename() const {\r\n        return string_type{_Falsename};\r\n    }\r\n\r\n    virtual string_type __CLR_OR_THIS_CALL do_truename() const {\r\n        return string_type{_Truename};\r\n    }\r\n\r\nprivate:\r\n    void _Tidy() noexcept { // free all storage\r\n        _CSTD free(const_cast<char*>(_Grouping));\r\n        _CSTD free(const_cast<_Elem*>(_Falsename));\r\n        _CSTD free(const_cast<_Elem*>(_Truename));\r\n    }\r\n\r\n    const char* _Grouping; // grouping string, \"\" for \"C\" locale\r\n    _Elem _Dp; // decimal point, '.' for \"C\" locale\r\n    _Elem _Kseparator; // thousands separator, '\\0' for \"C\" locale\r\n    const _Elem* _Falsename; // name for false, \"false\" for \"C\" locale\r\n    const _Elem* _Truename; // name for true, \"true\" for \"C\" locale\r\n};\r\n\r\n_EXPORT_STD template <class _Elem>\r\nclass numpunct_byname : public numpunct<_Elem> { // numpunct for named locale\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    explicit numpunct_byname(const char* _Locname, size_t _Refs = 0)\r\n        : numpunct<_Elem>(_Locname, _Refs) {} // construct for named locale\r\n\r\n    explicit numpunct_byname(const string& _Str, size_t _Refs = 0)\r\n        : numpunct<_Elem>(_Str.c_str(), _Refs) {} // construct for named locale\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~numpunct_byname() noexcept override {}\r\n};\r\n\r\n#if !defined(_CRTBLD) || defined(CRTDLL2) || !defined(_DLL) || defined(_M_CEE_PURE) // TRANSITION, VSO-578955\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdllimport-static-field-def\"\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _Elem>\r\n__PURE_APPDOMAIN_GLOBAL locale::id numpunct<_Elem>::id;\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n#endif // !defined(_CRTBLD) || defined(CRTDLL2) || !defined(_DLL) || defined(_M_CEE_PURE)\r\n\r\nstruct _Num_get_parse_result {\r\n    // For integers: negative values mean parsing failure, while the \"actual\" base (used by _Getifld) is ~_Base.\r\n    // Otherwise, 0, 8, 10, or 16.\r\n    // For floating-point numbers: 0 for parsing failure, otherwise 10 or 16.\r\n    int8_t _Base;\r\n    bool _Bad_grouping;\r\n};\r\n\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _InIt = istreambuf_iterator<_Elem, char_traits<_Elem>>>\r\nclass num_get : public locale::facet { // facet for converting text to encoded numbers\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    static size_t __CLRCALL_OR_CDECL _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new num_get<_Elem, _InIt>(_Locinfo(_Ploc->_C_str()));\r\n        }\r\n\r\n        return _X_NUMERIC;\r\n    }\r\n\r\n    __PURE_APPDOMAIN_GLOBAL static locale::id id; // unique facet id\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~num_get() noexcept override {}\r\n\r\n    void _Init(const _Locinfo&) {} // initialize from _Locinfo object\r\n\r\npublic:\r\n    explicit __CLR_OR_THIS_CALL num_get(size_t _Refs = 0) : locale::facet(_Refs) { // construct from current locale\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL num_get(const _Locinfo& _Lobj, size_t _Refs = 0) : locale::facet(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    using char_type = _Elem;\r\n    using iter_type = _InIt;\r\n\r\n    _InIt __CLR_OR_THIS_CALL get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        bool& _Val) const { // get bool from [_First, _Last) into _Val\r\n        return do_get(_First, _Last, _Iosbase, _State, _Val);\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        unsigned short& _Val) const { // get unsigned short from [_First, _Last) into _Val\r\n        return do_get(_First, _Last, _Iosbase, _State, _Val);\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        unsigned int& _Val) const { // get unsigned int from [_First, _Last) into _Val\r\n        return do_get(_First, _Last, _Iosbase, _State, _Val);\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        long& _Val) const { // get long from [_First, _Last) into _Val\r\n        return do_get(_First, _Last, _Iosbase, _State, _Val);\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        unsigned long& _Val) const { // get unsigned long from [_First, _Last) into _Val\r\n        return do_get(_First, _Last, _Iosbase, _State, _Val);\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        long long& _Val) const { // get long long from [_First, _Last) into _Val\r\n        return do_get(_First, _Last, _Iosbase, _State, _Val);\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        unsigned long long& _Val) const { // get unsigned long long from [_First, _Last) into _Val\r\n        return do_get(_First, _Last, _Iosbase, _State, _Val);\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        float& _Val) const { // get float from [_First, _Last) into _Val\r\n        return do_get(_First, _Last, _Iosbase, _State, _Val);\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        double& _Val) const { // get double from [_First, _Last) into _Val\r\n        return do_get(_First, _Last, _Iosbase, _State, _Val);\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        long double& _Val) const { // get long double from [_First, _Last) into _Val\r\n        return do_get(_First, _Last, _Iosbase, _State, _Val);\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        void*& _Val) const { // get void pointer from [_First, _Last) into _Val\r\n        return do_get(_First, _Last, _Iosbase, _State, _Val);\r\n    }\r\n\r\nprotected:\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        bool& _Val) const { // get bool from [_First, _Last) into _Val\r\n        _Adl_verify_range(_First, _Last);\r\n        if (_Iosbase.flags() & ios_base::boolalpha) { // get false name or true name\r\n            const auto& _Punct_fac = _STD use_facet<numpunct<_Elem>>(_Iosbase.getloc());\r\n            basic_string<_Elem> _Str(static_cast<size_t>(1), _Elem{});\r\n            _Str += _Punct_fac.falsename();\r\n            _Str.push_back(_Elem{});\r\n            _Str += _Punct_fac.truename(); // construct \"\\0false\\0true\"\r\n            switch (_Getloctxt(_First, _Last, 2, _Str.c_str(), _Case_sensitive::_Yes)) {\r\n            case 0:\r\n                _Val = false;\r\n                break;\r\n            case 1:\r\n                _Val = true;\r\n                break;\r\n            default:\r\n                _Val   = false;\r\n                _State = ios_base::failbit;\r\n                break;\r\n            }\r\n        } else { // get long value\r\n            char _Ac[_Max_int_dig];\r\n            const auto _Parse_result =\r\n                _Parse_int_with_locale(_Ac, _First, _Last, _Iosbase.flags(), _Iosbase.getloc()); // gather field\r\n            if (_Parse_result._Base < 0) {\r\n                // N4950 [facet.num.get.virtuals]/3.9:\r\n                //  \"zero, if the conversion function does not convert the entire field.\"\r\n                _Val   = false;\r\n                _State = ios_base::failbit;\r\n            } else {\r\n                char* _Ep;\r\n                int _Errno;\r\n                const long _Ans = _CSTD _Stolx(_Ac, &_Ep, _Parse_result._Base, &_Errno); // convert\r\n                _Val            = _Ans != 0;\r\n                if (_Ep == _Ac || _Errno != 0 // N5008 [facet.num.get.virtuals]/3\r\n                    || _Parse_result._Bad_grouping // N5008 [facet.num.get.virtuals]/4\r\n                    || (_Ans != 0 && _Ans != 1)) { // N5008 [facet.num.get.virtuals]/6\r\n                    _State = ios_base::failbit;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (_First == _Last) {\r\n            _State |= ios_base::eofbit;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        unsigned short& _Val) const { // get unsigned short from [_First, _Last) into _Val\r\n        _Adl_verify_range(_First, _Last);\r\n        char _Ac[_Max_int_dig];\r\n        const auto _Parse_result =\r\n            _Parse_int_with_locale(_Ac, _First, _Last, _Iosbase.flags(), _Iosbase.getloc()); // gather field\r\n        if (_Parse_result._Base < 0) { // ditto \"fails to convert the entire field\"\r\n            _State = ios_base::failbit;\r\n            _Val   = 0;\r\n        } else {\r\n            const bool _Minus   = _Ac[0] == '-';\r\n            const char* _Digits = _Ac;\r\n            // C11 7.22.1.4/5: the sequence of characters starting with the first digit\r\n            // is interpreted as an integer constant according to the rules of 6.4.4.1\r\n            if (_Minus) { // skip over minus to start with the first digit\r\n                ++_Digits;\r\n            }\r\n\r\n            char* _Ep;\r\n            int _Errno;\r\n            const unsigned long _Tmp = _CSTD _Stoulx(_Digits, &_Ep, _Parse_result._Base, &_Errno); // convert\r\n            _Val                     = static_cast<unsigned short>(_Tmp);\r\n            if (_Ep == _Digits || _Errno != 0 || _Tmp > USHRT_MAX) { // N4950 [facet.num.get.virtuals]/3\r\n                _State = ios_base::failbit;\r\n                _Val   = USHRT_MAX;\r\n            } else if (_Minus) { // C11 7.22.1.4/5:  If the subject sequence begins with a minus sign,\r\n                                 // the value resulting from the conversion is negated (in the return type).\r\n                _Val = static_cast<unsigned short>(0 - _Val);\r\n            }\r\n\r\n            if (_Parse_result._Bad_grouping) { // N4950 [facet.num.get.virtuals]/4\r\n                _State = ios_base::failbit;\r\n            }\r\n        }\r\n\r\n        if (_First == _Last) {\r\n            _State |= ios_base::eofbit;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        unsigned int& _Val) const { // get unsigned int from [_First, _Last) into _Val\r\n        static_assert(sizeof(unsigned int) == sizeof(unsigned long),\r\n            \"Bad overflow assumptions due to sizeof(unsigned int) != sizeof(unsigned long)\");\r\n        unsigned long _Tmp;\r\n        _First = num_get::do_get(_First, _Last, _Iosbase, _State, _Tmp); // avoid virtual call for perf\r\n        _Val   = _Tmp;\r\n        return _First;\r\n    }\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        long& _Val) const { // get long from [_First, _Last) into _Val\r\n        _Adl_verify_range(_First, _Last);\r\n        char _Ac[_Max_int_dig];\r\n        const auto _Parse_result =\r\n            _Parse_int_with_locale(_Ac, _First, _Last, _Iosbase.flags(), _Iosbase.getloc()); // gather field\r\n        if (_Parse_result._Base < 0) { // ditto \"fails to convert the entire field\"\r\n            _State = ios_base::failbit;\r\n            _Val   = 0;\r\n        } else {\r\n            char* _Ep;\r\n            int _Errno;\r\n            _Val = _CSTD _Stolx(_Ac, &_Ep, _Parse_result._Base, &_Errno); // convert\r\n            if (_Ep == _Ac || _Errno != 0 // N4950 [facet.num.get.virtuals]/3\r\n                || _Parse_result._Bad_grouping) { // N4950 [facet.num.get.virtuals]/4\r\n                _State = ios_base::failbit;\r\n            }\r\n        }\r\n\r\n        if (_First == _Last) {\r\n            _State |= ios_base::eofbit;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        unsigned long& _Val) const { // get unsigned long from [_First, _Last) into _Val\r\n        _Adl_verify_range(_First, _Last);\r\n        char _Ac[_Max_int_dig];\r\n        const auto _Parse_result =\r\n            _Parse_int_with_locale(_Ac, _First, _Last, _Iosbase.flags(), _Iosbase.getloc()); // gather field\r\n        if (_Parse_result._Base < 0) { // ditto \"fails to convert the entire field\"\r\n            _State = ios_base::failbit;\r\n            _Val   = 0;\r\n        } else {\r\n            char* _Ep;\r\n            int _Errno;\r\n            _Val = _CSTD _Stoulx(_Ac, &_Ep, _Parse_result._Base, &_Errno); // convert\r\n            if (_Ep == _Ac || _Errno != 0 // N4950 [facet.num.get.virtuals]/3\r\n                || _Parse_result._Bad_grouping) { // N4950 [facet.num.get.virtuals]/4\r\n                _State = ios_base::failbit;\r\n            }\r\n        }\r\n\r\n        if (_First == _Last) {\r\n            _State |= ios_base::eofbit;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        long long& _Val) const { // get long long from [_First, _Last) into _Val\r\n        _Adl_verify_range(_First, _Last);\r\n        char _Ac[_Max_int_dig];\r\n        const auto _Parse_result =\r\n            _Parse_int_with_locale(_Ac, _First, _Last, _Iosbase.flags(), _Iosbase.getloc()); // gather field\r\n        if (_Parse_result._Base < 0) { // ditto \"fails to convert the entire field\"\r\n            _State = ios_base::failbit;\r\n            _Val   = 0;\r\n        } else {\r\n            char* _Ep;\r\n            int _Errno;\r\n            _Val = _CSTD _Stollx(_Ac, &_Ep, _Parse_result._Base, &_Errno); // convert\r\n            if (_Ep == _Ac || _Errno != 0 // N4950 [facet.num.get.virtuals]/3\r\n                || _Parse_result._Bad_grouping) { // N4950 [facet.num.get.virtuals]/4\r\n                _State = ios_base::failbit;\r\n            }\r\n        }\r\n\r\n        if (_First == _Last) {\r\n            _State |= ios_base::eofbit;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        unsigned long long& _Val) const { // get unsigned long long from [_First, _Last) into _Val\r\n        _Adl_verify_range(_First, _Last);\r\n        char _Ac[_Max_int_dig];\r\n        const auto _Parse_result =\r\n            _Parse_int_with_locale(_Ac, _First, _Last, _Iosbase.flags(), _Iosbase.getloc()); // gather field\r\n        if (_Parse_result._Base < 0) { // ditto \"fails to convert the entire field\"\r\n            _State = ios_base::failbit;\r\n            _Val   = 0;\r\n        } else {\r\n            int _Errno;\r\n            char* _Ep;\r\n            _Val = _CSTD _Stoullx(_Ac, &_Ep, _Parse_result._Base, &_Errno); // convert\r\n            if (_Ep == _Ac || _Errno != 0 // N4950 [facet.num.get.virtuals]/3\r\n                || _Parse_result._Bad_grouping) { // N4950 [facet.num.get.virtuals]/4\r\n                _State = ios_base::failbit;\r\n            }\r\n        }\r\n\r\n        if (_First == _Last) {\r\n            _State |= ios_base::eofbit;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n#define _MAX_SIG_DIG_V2 768\r\n#define _MAX_EXP_DIG    8 // for parsing floating-point numbers\r\n// Size of char buffer used by num_get::do_get() for float/double/long double\r\n#define _FLOATING_BUFFER_SIZE (_MAX_EXP_DIG + _MAX_SIG_DIG_V2 + 16)\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        float& _Val) const { // get float from [_First, _Last) into _Val\r\n        _Adl_verify_range(_First, _Last);\r\n        char _Ac[_FLOATING_BUFFER_SIZE];\r\n        const auto _Parse_result =\r\n            _Parse_fp_with_locale(_Ac, _MAX_SIG_DIG_V2, _First, _Last, _Iosbase.getloc()); // gather field\r\n        if (_Parse_result._Base == 0) { // ditto \"fails to convert the entire field\"\r\n            _State = ios_base::failbit;\r\n            _Val   = 0.0f;\r\n        } else {\r\n            int _Errno;\r\n            char* _Ep;\r\n            _Val = _STD _Stofx_v3(_Ac, &_Ep, &_Errno); // convert\r\n            if (_Ep == _Ac || _Errno != 0 // N4950 [facet.num.get.virtuals]/3\r\n                || _Parse_result._Bad_grouping) { // N4950 [facet.num.get.virtuals]/4\r\n                _State = ios_base::failbit;\r\n            }\r\n        }\r\n\r\n        if (_First == _Last) {\r\n            _State |= ios_base::eofbit;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        double& _Val) const { // get double from [_First, _Last) into _Val\r\n        _Adl_verify_range(_First, _Last);\r\n        char _Ac[_FLOATING_BUFFER_SIZE];\r\n        const auto _Parse_result =\r\n            _Parse_fp_with_locale(_Ac, _MAX_SIG_DIG_V2, _First, _Last, _Iosbase.getloc()); // gather field\r\n        if (_Parse_result._Base == 0) { // ditto \"fails to convert the entire field\"\r\n            _State = ios_base::failbit;\r\n            _Val   = 0.0;\r\n        } else {\r\n            int _Errno;\r\n            char* _Ep;\r\n            _Val = _STD _Stodx_v3(_Ac, &_Ep, &_Errno); // convert\r\n            if (_Ep == _Ac || _Errno != 0 // N4950 [facet.num.get.virtuals]/3\r\n                || _Parse_result._Bad_grouping) { // N4950 [facet.num.get.virtuals]/4\r\n                _State = ios_base::failbit;\r\n            }\r\n        }\r\n\r\n        if (_First == _Last) {\r\n            _State |= ios_base::eofbit;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n#undef _FLOATING_BUFFER_SIZE\r\n#undef _MAX_EXP_DIG\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        long double& _Val) const { // get long double from [_First, _Last) into _Val\r\n        // Assumes sizeof(double) == sizeof(long double).\r\n        // For 80-bit long double (which is not supported by MSVC in general), this will compile\r\n        // but will not attempt to handle the increased precision at runtime.\r\n        double _Result;\r\n        _First = num_get::do_get(_First, _Last, _Iosbase, _State, _Result); // avoid virtual call for perf\r\n        _Val   = _Result;\r\n        return _First;\r\n    }\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        void*& _Val) const { // get void pointer from [_First, _Last) into _Val\r\n        _Adl_verify_range(_First, _Last);\r\n        char _Ac[_Max_int_dig];\r\n        const auto _Parse_result =\r\n            _Parse_int_with_locale(_Ac, _First, _Last, ios_base::hex, _Iosbase.getloc()); // gather field\r\n        if (_Parse_result._Base < 0) { // ditto \"fails to convert the entire field\"\r\n            _State = ios_base::failbit;\r\n            _Val   = nullptr;\r\n        } else {\r\n            int _Errno;\r\n            char* _Ep;\r\n#ifdef _WIN64\r\n            _Val = reinterpret_cast<void*>(_CSTD _Stoullx(_Ac, &_Ep, _Parse_result._Base, &_Errno));\r\n#else // ^^^ defined(_WIN64) / !defined(_WIN64) vvv\r\n            _Val = reinterpret_cast<void*>(_CSTD _Stoulx(_Ac, &_Ep, _Parse_result._Base, &_Errno));\r\n#endif // ^^^ !defined(_WIN64) ^^^\r\n            if (_Ep == _Ac || _Errno != 0) { // N4950 [facet.num.get.virtuals]/3\r\n                _State = ios_base::failbit;\r\n                _Val   = nullptr;\r\n            }\r\n\r\n            if (_Parse_result._Bad_grouping) { // N4950 [facet.num.get.virtuals]/4\r\n                _State = ios_base::failbit;\r\n            }\r\n        }\r\n\r\n        if (_First == _Last) {\r\n            _State |= ios_base::eofbit;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\nprivate:\r\n    template <int = 0> // TRANSITION, ABI\r\n    static _Num_get_parse_result _Parse_int_with_locale(\r\n        char* const _Ac, _InIt& _First, _InIt& _Last, ios_base::fmtflags _Basefield, const locale& _Loc) {\r\n        // get integer field from [_First, _Last) into _Ac\r\n        const auto& _Punct_fac  = _STD use_facet<numpunct<_Elem>>(_Loc);\r\n        const string _Grouping  = _Punct_fac.grouping();\r\n        const _Elem _Kseparator = _Grouping.empty() ? _Elem{} : _Punct_fac.thousands_sep();\r\n\r\n        constexpr int _Numget_signoff = 22;\r\n        constexpr int _Numget_xoff    = 24;\r\n        static constexpr char _Src[]  = \"0123456789ABCDEFabcdef-+Xx\";\r\n        _Elem _Atoms[sizeof(_Src)];\r\n        const ctype<_Elem>& _Ctype_fac = _STD use_facet<ctype<_Elem>>(_Loc);\r\n        _Ctype_fac.widen(_STD begin(_Src), _STD end(_Src), _Atoms);\r\n\r\n        bool _Bad_grouping = false;\r\n\r\n        // skip leading separators before the sign\r\n        if (_Kseparator != _Elem{}) {\r\n            while (_First != _Last && *_First == _Kseparator) {\r\n                ++_First;\r\n                _Bad_grouping = true;\r\n            }\r\n        }\r\n\r\n        char* _Ptr = _Ac;\r\n\r\n        if (_First != _Last) {\r\n            if (*_First == _Atoms[_Numget_signoff + 1]) { // gather plus sign\r\n                *_Ptr++ = '+';\r\n                ++_First;\r\n            } else if (*_First == _Atoms[_Numget_signoff]) { // gather minus sign\r\n                *_Ptr++ = '-';\r\n                ++_First;\r\n            }\r\n        }\r\n\r\n        // skip leading separators before digits\r\n        if (_Kseparator != _Elem{}) {\r\n            while (_First != _Last && *_First == _Kseparator) {\r\n                ++_First;\r\n                _Bad_grouping = true;\r\n            }\r\n        }\r\n\r\n        _Basefield &= ios_base::basefield;\r\n\r\n        int8_t _Base;\r\n        if (_Basefield == ios_base::oct) {\r\n            _Base = 8;\r\n        } else if (_Basefield == ios_base::hex) {\r\n            _Base = 16;\r\n        } else if (_Basefield == ios_base::_Fmtzero) {\r\n            _Base = 0;\r\n        } else {\r\n            _Base = 10;\r\n        }\r\n\r\n        bool _Seendigit = false; // seen a digit in input\r\n        bool _Nonzero   = false; // seen a nonzero digit in input\r\n\r\n        if (_First != _Last && *_First == _Atoms[0]) { // leading zero, look for 0x, 0X\r\n            _Seendigit = true;\r\n            ++_First;\r\n            if (_First != _Last && (*_First == _Atoms[_Numget_xoff + 1] || *_First == _Atoms[_Numget_xoff])\r\n                && (_Base == 0 || _Base == 16)) {\r\n                _Base      = 16;\r\n                _Seendigit = false;\r\n                ++_First;\r\n            } else if (_Base == 0) {\r\n                _Base = 8;\r\n            }\r\n        }\r\n\r\n        const auto _Dlen = static_cast<size_t>(_Base == 0 || _Base == 10 ? 10 : _Base == 8 ? 8 : 16 + 6);\r\n        string _Groups(1, static_cast<char>(_Seendigit)); // Groups are detected in the reversed order of _Groups.\r\n        size_t _Groups_arr_idx = 0;\r\n\r\n        for (char* const _Pe = &_Ac[_Max_int_dig - 1]; _First != _Last; ++_First) { // look for digits and separators\r\n            size_t _Idx = _STD _Find_elem(_Atoms, *_First);\r\n            if (_Idx < _Dlen) { // got a digit, characterize it and add to group size\r\n                *_Ptr = _Src[_Idx];\r\n                if ((_Nonzero || *_Ptr != '0') && _Ptr < _Pe) {\r\n                    ++_Ptr;\r\n                    _Nonzero = true;\r\n                }\r\n\r\n                _Seendigit = true;\r\n                if (_Groups[_Groups_arr_idx] != CHAR_MAX) {\r\n                    ++_Groups[_Groups_arr_idx];\r\n                }\r\n            } else if (_Kseparator == _Elem{} || *_First != _Kseparator) {\r\n                break; // not a group separator, done\r\n            } else if (_Groups[_Groups_arr_idx] == '\\0') {\r\n                _Bad_grouping = true; // adjacent separators, fail\r\n            } else { // add a new group to _Groups string\r\n                _Groups.push_back('\\0');\r\n                ++_Groups_arr_idx;\r\n            }\r\n        }\r\n\r\n        if (_Groups_arr_idx != 0) {\r\n            if (_Groups[_Groups_arr_idx] > '\\0') {\r\n                ++_Groups_arr_idx; // add trailing group to group count\r\n            } else {\r\n                _Bad_grouping = true; // trailing separator, fail\r\n            }\r\n        }\r\n\r\n        // skip trailing separators\r\n        if (_Kseparator != _Elem{}) {\r\n            while (_First != _Last && *_First == _Kseparator) {\r\n                ++_First;\r\n                _Bad_grouping = true;\r\n            }\r\n        }\r\n\r\n        const char* _Grouping_iter      = _Grouping.data();\r\n        const char* const _Grouping_end = _Grouping_iter + _Grouping.size();\r\n        for (char _Current_grouping_count = '\\0'; _Seendigit && !_Bad_grouping && _Groups_arr_idx > 0;) {\r\n            if (_Grouping_iter != _Grouping_end) { // keep the last value when _Grouping is exhausted\r\n                _Current_grouping_count = *_Grouping_iter; // if _Grouping is empty, '\\0' is used\r\n                ++_Grouping_iter;\r\n            }\r\n\r\n            --_Groups_arr_idx;\r\n            if ((_Current_grouping_count > '\\0' && _Current_grouping_count != CHAR_MAX)\r\n                && ((_Groups_arr_idx > 0 && _Groups[_Groups_arr_idx] != _Current_grouping_count)\r\n                    || (_Groups_arr_idx == 0 && _Groups[_Groups_arr_idx] > _Current_grouping_count))) {\r\n                _Bad_grouping = true; // bad group size, fail\r\n            }\r\n            // group size okay, advance to next test\r\n        }\r\n\r\n        if (!_Seendigit) {\r\n            return {static_cast<int8_t>(~_Base), false};\r\n        }\r\n\r\n        if (!_Nonzero) {\r\n            *_Ptr++ = '0'; // zero field, replace stripped zero(s)\r\n        }\r\n\r\n        *_Ptr = '\\0';\r\n        return {_Base, _Bad_grouping};\r\n    }\r\n\r\n    template <int = 0> // TRANSITION, ABI\r\n    static _Num_get_parse_result _Parse_fp_with_locale(\r\n        char* const _Ac, const int _Max_sig_dig, _InIt& _First, _InIt& _Last, const locale& _Loc) {\r\n        // get floating-point field from [_First, _Last) into _Ac\r\n        char* _Ptr = _Ac;\r\n\r\n        constexpr size_t _Offset_dec_digit_end = 10;\r\n        constexpr size_t _Offset_hex_digit_end = 22;\r\n        constexpr size_t _Offset_neg_sign      = 22;\r\n        constexpr size_t _Offset_pos_sign      = 23;\r\n        constexpr size_t _Offset_upper_x       = 24;\r\n        constexpr size_t _Offset_lower_x       = 25;\r\n        constexpr size_t _Offset_upper_p       = 26;\r\n        constexpr size_t _Offset_lower_p       = 27;\r\n        constexpr size_t _Offset_upper_e       = 14;\r\n        constexpr size_t _Offset_lower_e       = 20;\r\n        static constexpr char _Src[]           = \"0123456789ABCDEFabcdef-+XxPp\";\r\n        _Elem _Atoms[sizeof(_Src)];\r\n        const auto& _Ctype_fac = _STD use_facet<ctype<_Elem>>(_Loc);\r\n        _Ctype_fac.widen(_STD begin(_Src), _STD end(_Src), _Atoms);\r\n\r\n        const _Elem _Positive_sign = _Atoms[_Offset_pos_sign];\r\n        const _Elem _Negative_sign = _Atoms[_Offset_neg_sign];\r\n        const _Elem _Zero_wc       = _Atoms[0];\r\n\r\n        const auto& _Punct_fac  = _STD use_facet<numpunct<_Elem>>(_Loc);\r\n        const string _Grouping  = _Punct_fac.grouping();\r\n        const _Elem _Kseparator = _Grouping.empty() ? _Elem{} : _Punct_fac.thousands_sep();\r\n\r\n        bool _Bad_grouping = false;\r\n\r\n        // skip leading separators before the sign\r\n        if (!_Grouping.empty()) {\r\n            while (_First != _Last && *_First == _Kseparator) {\r\n                ++_First;\r\n                _Bad_grouping = true;\r\n            }\r\n        }\r\n\r\n        if (_First != _Last) {\r\n            if (*_First == _Positive_sign) { // gather plus sign\r\n                *_Ptr++ = '+';\r\n                ++_First;\r\n            } else if (*_First == _Negative_sign) { // gather minus sign\r\n                *_Ptr++ = '-';\r\n                ++_First;\r\n            }\r\n        }\r\n\r\n        *_Ptr++ = '0'; // backstop carries from sticky bit\r\n\r\n        bool _Parse_hex                = false;\r\n        bool _Seendigit                = false; // seen a digit in input\r\n        char _Initial_dec_leading_zero = '\\0';\r\n        if (_First != _Last && *_First == _Zero_wc) {\r\n            ++_First;\r\n            if (_First == _Last) { // \"0\" only\r\n                *_Ptr = '\\0';\r\n                return {10, _Bad_grouping};\r\n            }\r\n\r\n            if (*_First == _Atoms[_Offset_lower_x] || *_First == _Atoms[_Offset_upper_x]) { // 0x or 0X\r\n                _Parse_hex = true;\r\n                ++_First; // discard 0x or 0X for further parsing\r\n                *_Ptr++ = 'x';\r\n            } else {\r\n                _Seendigit = true;\r\n                ++_Initial_dec_leading_zero;\r\n            }\r\n        }\r\n\r\n        bool _Has_unaccumulated_digits = false;\r\n        int _Significant               = 0; // number of significant digits\r\n        ptrdiff_t _Power_of_rep_base   = 0; // power of 10 or 16\r\n\r\n        const size_t _Offset_digit_end = _Parse_hex ? _Offset_hex_digit_end : _Offset_dec_digit_end;\r\n        if (_Grouping.empty()) {\r\n            for (size_t _Idx; _First != _Last && (_Idx = _STD _Find_elem(_Atoms, *_First)) < _Offset_digit_end;\r\n                _Seendigit = true, (void) ++_First) {\r\n                if (_Significant >= _Max_sig_dig) {\r\n                    ++_Power_of_rep_base; // just scale by 10 or 16\r\n                    if (_Idx > 0) {\r\n                        _Has_unaccumulated_digits = true;\r\n                    }\r\n                } else if (_Idx != 0 || _Significant != 0) { // save a significant digit\r\n                    *_Ptr++ = _Src[_Idx];\r\n                    ++_Significant;\r\n                }\r\n            }\r\n        } else {\r\n            // skip leading separators before digits\r\n            while (_First != _Last && *_First == _Kseparator) {\r\n                ++_First;\r\n                _Bad_grouping = true;\r\n            }\r\n\r\n            string _Groups(1, _Initial_dec_leading_zero); // Groups are detected in the reversed order of _Groups.\r\n            size_t _Groups_arr_idx = 0;\r\n\r\n            for (; _First != _Last; ++_First) {\r\n                const size_t _Idx = _STD _Find_elem(_Atoms, *_First);\r\n                if (_Idx < _Offset_digit_end) { // got a digit, add to group size\r\n                    _Seendigit = true;\r\n                    if (_Significant >= _Max_sig_dig) {\r\n                        ++_Power_of_rep_base; // just scale by 10 or 16\r\n                        if (_Idx > 0) {\r\n                            _Has_unaccumulated_digits = true;\r\n                        }\r\n                    } else if (_Idx != 0 || _Significant != 0) { // save a significant digit\r\n                        *_Ptr++ = _Src[_Idx];\r\n                        ++_Significant;\r\n                    }\r\n\r\n                    if (_Groups[_Groups_arr_idx] != CHAR_MAX) {\r\n                        ++_Groups[_Groups_arr_idx];\r\n                    }\r\n                } else if (*_First != _Kseparator) {\r\n                    break; // not a group separator, done\r\n                } else if (_Groups[_Groups_arr_idx] == '\\0') {\r\n                    _Bad_grouping = true; // adjacent separators, fail\r\n                } else { // add a new group to _Groups string\r\n                    _Groups.push_back('\\0');\r\n                    ++_Groups_arr_idx;\r\n                }\r\n            }\r\n\r\n            if (_Groups_arr_idx != 0) {\r\n                if (_Groups[_Groups_arr_idx] > '\\0') {\r\n                    ++_Groups_arr_idx; // add trailing group to group count\r\n                } else {\r\n                    _Bad_grouping = true; // trailing separator, fail\r\n                }\r\n            }\r\n\r\n            // skip trailing separators\r\n            while (_First != _Last && *_First == _Kseparator) {\r\n                ++_First;\r\n                _Bad_grouping = true;\r\n            }\r\n\r\n            const char* _Grouping_iter      = _Grouping.data();\r\n            const char* const _Grouping_end = _Grouping_iter + _Grouping.size();\r\n            char _Current_grouping_count    = '\\0';\r\n            while (!_Bad_grouping && _Groups_arr_idx > 0) {\r\n                if (_Grouping_iter != _Grouping_end) { // keep the last value when _Grouping is exhausted\r\n                    _Current_grouping_count = *_Grouping_iter; // assign the variable at least once\r\n                    ++_Grouping_iter;\r\n                }\r\n\r\n                --_Groups_arr_idx;\r\n                if ((_Current_grouping_count > '\\0' && _Current_grouping_count != CHAR_MAX)\r\n                    && ((_Groups_arr_idx > 0 && _Groups[_Groups_arr_idx] != _Current_grouping_count)\r\n                        || (_Groups_arr_idx == 0 && _Groups[_Groups_arr_idx] > _Current_grouping_count))) {\r\n                    _Bad_grouping = true; // bad group size, fail\r\n                }\r\n                // group size okay, advance to next test\r\n            }\r\n        }\r\n\r\n        if (_Parse_hex && _Seendigit && _Significant == 0) {\r\n            // the condition is true when all of the digits after the 'x' and before the decimal point are zero\r\n            *_Ptr++ = '0'; // save at least one leading digit for hex\r\n        }\r\n\r\n        const char _Decimal_point = (_CSTD localeconv())->decimal_point[0];\r\n        if (_First != _Last && *_First == _Punct_fac.decimal_point()) { // add .\r\n            *_Ptr++ = _Decimal_point;\r\n            ++_First;\r\n        }\r\n\r\n        if (_Significant == 0) { // 0000. so far\r\n            for (; _First != _Last && *_First == _Zero_wc; _Seendigit = true, (void) ++_First) {\r\n                --_Power_of_rep_base; // count leading fraction zeros without storing digits into buffer\r\n            }\r\n        }\r\n\r\n        for (size_t _Idx; _First != _Last && (_Idx = _STD _Find_elem(_Atoms, *_First)) < _Offset_digit_end;\r\n            _Seendigit = true, (void) ++_First) {\r\n            if (_Significant < _Max_sig_dig) { // save a significant fraction digit\r\n                *_Ptr++ = _Src[_Idx];\r\n                ++_Significant;\r\n            } else if (_Idx > 0) {\r\n                _Has_unaccumulated_digits = true; // just update _Has_unaccumulated_digits\r\n            }\r\n        }\r\n\r\n        if (_Has_unaccumulated_digits) { // increment last digit in memory of those lost\r\n            char& _Last_got_digit = _Ptr[-1] == _Decimal_point ? _Ptr[-2] : _Ptr[-1];\r\n            if (_Last_got_digit == '0' || _Last_got_digit == (_Parse_hex ? '8' : '5')) {\r\n                ++_Last_got_digit;\r\n            }\r\n        }\r\n\r\n        const _Elem _Lower_exp_wc = _Atoms[_Parse_hex ? _Offset_lower_p : _Offset_lower_e]; // 'e' for dec, 'p' for hex\r\n        const _Elem _Upper_exp_wc = _Atoms[_Parse_hex ? _Offset_upper_p : _Offset_upper_e]; // 'E' for dec, 'P' for hex\r\n\r\n        bool _Exponent_part_negative = false;\r\n        ptrdiff_t _Exponent_part     = 0;\r\n        if (_Seendigit && _First != _Last\r\n            && (*_First == _Lower_exp_wc || *_First == _Upper_exp_wc)) { // collect exponent\r\n            ++_First;\r\n            _Seendigit   = false;\r\n            _Significant = 0;\r\n\r\n            if (_First != _Last) {\r\n                if (*_First == _Positive_sign) { // gather plus sign\r\n                    ++_First;\r\n                } else if (*_First == _Negative_sign) { // gather minus sign\r\n                    _Exponent_part_negative = true;\r\n                    ++_First;\r\n                }\r\n            }\r\n\r\n            for (; _First != _Last && *_First == _Zero_wc; ++_First) { // strip leading zeros\r\n                _Seendigit = true;\r\n            }\r\n\r\n            for (size_t _Idx; _First != _Last && (_Idx = _STD _Find_elem(_Atoms, *_First)) < _Offset_dec_digit_end;\r\n                _Seendigit = true, (void) ++_First) {\r\n                if (_Exponent_part < PTRDIFF_MAX / 10\r\n                    || (_Exponent_part == PTRDIFF_MAX / 10\r\n                        && static_cast<ptrdiff_t>(_Idx) <= PTRDIFF_MAX % 10)) { // save a significant exponent digit\r\n                    _Exponent_part = _Exponent_part * 10 + static_cast<ptrdiff_t>(_Idx);\r\n                } else {\r\n                    _Exponent_part = PTRDIFF_MAX; // saturated\r\n                }\r\n            }\r\n\r\n            if (_Exponent_part_negative) {\r\n                _Exponent_part = -_Exponent_part;\r\n            }\r\n        }\r\n\r\n        if (!_Seendigit) {\r\n            return {0, false};\r\n        }\r\n\r\n        constexpr int _Dec_exp_abs_bound = 1100; // slightly greater than 324 + 768\r\n        constexpr int _Hex_exp_abs_bound = 4200; // slightly greater than 1074 + 768 * 4\r\n\r\n        const ptrdiff_t _Exp_abs_bound     = _Parse_hex ? _Hex_exp_abs_bound : _Dec_exp_abs_bound;\r\n        const ptrdiff_t _Exp_rep_abs_bound = _Parse_hex ? _Hex_exp_abs_bound / 4 : _Dec_exp_abs_bound;\r\n\r\n        // basically _Exponent_part = _STD clamp(-_Exp_abs_bound,\r\n        //     _Exponent_part + _Parse_hex ? _Power_of_rep_base * 4 : _Power_of_rep_base, _Exp_abs_bound)\r\n        // but need to defend overflowing\r\n        for (ptrdiff_t _Power_of_rep_adjusted = _Power_of_rep_base;;) {\r\n            if (_Exponent_part >= 0 && _Power_of_rep_adjusted >= 0\r\n                && (_Exponent_part >= _Exp_abs_bound || _Power_of_rep_adjusted >= _Exp_rep_abs_bound)) {\r\n                _Exponent_part = _Exp_abs_bound;\r\n                break;\r\n            } else if (_Exponent_part <= 0 && _Power_of_rep_adjusted <= 0\r\n                       && (_Exponent_part <= -_Exp_abs_bound || _Power_of_rep_adjusted <= -_Exp_rep_abs_bound)) {\r\n                _Exponent_part = -_Exp_abs_bound;\r\n                break;\r\n            } else if (_STD abs(_Exponent_part) <= _Exp_abs_bound\r\n                       && _STD abs(_Power_of_rep_adjusted) <= _Exp_rep_abs_bound) {\r\n                // _Exponent_part and _Power_of_rep_base are of different signedness, both of which are small enough\r\n                _Exponent_part += _Parse_hex ? _Power_of_rep_adjusted * 4 : _Power_of_rep_adjusted;\r\n                if (_Exponent_part > _Exp_abs_bound) {\r\n                    _Exponent_part = _Exp_abs_bound;\r\n                } else if (_Exponent_part < -_Exp_abs_bound) {\r\n                    _Exponent_part = -_Exp_abs_bound;\r\n                }\r\n                break;\r\n            } else {\r\n                // only enters once:\r\n                // _Exponent_part and _Power_of_rep_base are of different signedness, but at least one is large\r\n                const ptrdiff_t _Exponent_part_preadjustment_round_up =\r\n                    _Parse_hex ? (_STD abs(_Exponent_part) - 1) / 4 + 1 : _STD abs(_Exponent_part);\r\n                const ptrdiff_t _Exp_rep_adjustment =\r\n                    (_STD min) (_Exponent_part_preadjustment_round_up, _STD abs(_Power_of_rep_base));\r\n\r\n                if (_Exponent_part >= 0) {\r\n                    _Exponent_part -= _Parse_hex ? _Exp_rep_adjustment * 4 : _Exp_rep_adjustment;\r\n                    _Power_of_rep_adjusted += _Exp_rep_adjustment;\r\n                } else {\r\n                    _Exponent_part += _Parse_hex ? _Exp_rep_adjustment * 4 : _Exp_rep_adjustment;\r\n                    _Power_of_rep_adjusted -= _Exp_rep_adjustment;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (_Exponent_part != 0) {\r\n            *_Ptr++ = _Parse_hex ? 'p' : 'e';\r\n            if (_Exponent_part < 0) {\r\n                *_Ptr++ = '-';\r\n            }\r\n\r\n            char* const _Rev_begin = _Ptr;\r\n            for (ptrdiff_t _Exponent_part_abs = _STD abs(_Exponent_part); _Exponent_part_abs != 0;\r\n                _Exponent_part_abs /= 10) {\r\n                *_Ptr++ = static_cast<char>('0' + _Exponent_part_abs % 10);\r\n            }\r\n            _STD reverse(_Rev_begin, _Ptr);\r\n        }\r\n\r\n        *_Ptr = '\\0';\r\n        return {static_cast<int8_t>(_Parse_hex ? 16 : 10), _Bad_grouping};\r\n    }\r\n\r\n    // TRANSITION, ABI, unused now, tracked by VSO-591516.\r\n    int __CLRCALL_OR_CDECL _Getifld(\r\n        char* _Ac, _InIt& _First, _InIt& _Last, ios_base::fmtflags _Basefield, const locale& _Loc) const {\r\n        // get integer field from [_First, _Last) into _Ac\r\n        static constexpr char _Src[] = \"0123456789ABCDEFabcdef-+Xx\"; // TRANSITION, ABI, was implicitly dllexported\r\n        const char* volatile _Ptr    = _Src;\r\n        (void) _Ptr;\r\n\r\n        const auto _Parse_result = _Parse_int_with_locale(_Ac, _First, _Last, _Basefield, _Loc);\r\n        if (_Parse_result._Base < 0 || _Parse_result._Bad_grouping) { // TRANSITION, ABI, old behavior\r\n            *_Ac = '\\0';\r\n        }\r\n        return _Parse_result._Base < 0 ? ~_Parse_result._Base : _Parse_result._Base;\r\n    }\r\n\r\n#define _MAX_SIG_DIG_V1 36 // TRANSITION, ABI\r\n// TRANSITION, ABI: Sentinel value used by num_get::do_get()\r\n// to enable correct \"V2\" behavior in _Getffld() and _Getffldx()\r\n#define _ENABLE_V2_BEHAVIOR 1000000000\r\n\r\n    // TRANSITION, ABI, unused now\r\n    int __CLRCALL_OR_CDECL _Getffld(char* _Ac, _InIt& _First, _InIt& _Last, ios_base& _Iosbase, int* _Phexexp) const {\r\n        // get floating-point field from [_First, _Last) into _Ac\r\n        static constexpr char _Src[] = \"0123456789-+Ee\"; // TRANSITION, ABI, was implicitly dllexported\r\n        const char* volatile _Ptr    = &_Src[0];\r\n        (void) _Ptr;\r\n        const int _Max_sig_dig   = (*_Phexexp == _ENABLE_V2_BEHAVIOR ? _MAX_SIG_DIG_V2 : _MAX_SIG_DIG_V1);\r\n        const auto _Parse_result = _Parse_fp_with_locale(_Ac, _Max_sig_dig, _First, _Last, _Iosbase.getloc());\r\n        if (_Parse_result._Base == 0 || _Parse_result._Bad_grouping) { // TRANSITION, ABI, old behavior\r\n            *_Ac = '\\0';\r\n        }\r\n\r\n        if (_Parse_result._Base == 16) {\r\n            *_Phexexp = 0; // power of 16 multiplier, unnecessary now\r\n        }\r\n        return 0; // power of 10 multiplier, unnecessary now\r\n    }\r\n\r\n    // TRANSITION, ABI, unused now\r\n    int __CLRCALL_OR_CDECL _Getffldx(char* _Ac, _InIt& _First, _InIt& _Last, ios_base& _Iosbase, int* _Phexexp) const {\r\n        // get floating-point field from [_First, _Last) into _Ac\r\n        static constexpr char _Src[] = \"0123456789ABCDEFabcdef-+XxPp\"; // TRANSITION, ABI, was implicitly dllexported\r\n        const char* volatile _Ptr    = &_Src[0];\r\n        (void) _Ptr;\r\n        const int _Max_sig_dig   = (*_Phexexp == _ENABLE_V2_BEHAVIOR ? _MAX_SIG_DIG_V2 : _MAX_SIG_DIG_V1);\r\n        const auto _Parse_result = _Parse_fp_with_locale(_Ac, _Max_sig_dig, _First, _Last, _Iosbase.getloc());\r\n        if (_Parse_result._Base == 0 || _Parse_result._Bad_grouping) { // TRANSITION, ABI, old behavior\r\n            *_Ac = '\\0';\r\n        }\r\n\r\n        if (_Parse_result._Base == 16) {\r\n            *_Phexexp = 0; // power of 16 multiplier, unnecessary now\r\n        }\r\n        return 0; // power of 10 multiplier, unnecessary now\r\n    }\r\n\r\n#undef _ENABLE_V2_BEHAVIOR\r\n#undef _MAX_SIG_DIG_V1\r\n#undef _MAX_SIG_DIG_V2\r\n};\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdllimport-static-field-def\"\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _Elem, class _InIt>\r\n__PURE_APPDOMAIN_GLOBAL locale::id num_get<_Elem, _InIt>::id;\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _Ty>\r\nint _Float_put_desired_precision(const streamsize _Precision, const ios_base::fmtflags _Float_flags) {\r\n    // return the effective precision determined by N4950 [facet.num.put.virtuals]/2.1 and printf's rules\r\n    const bool _Is_hex = _Float_flags == (ios_base::fixed | ios_base::scientific);\r\n    if (_Is_hex) {\r\n        // return the number of hexits needed (after the radix point) to represent the floating-point value exactly\r\n        if constexpr (is_same_v<_Ty, double>) {\r\n            return ((DBL_MANT_DIG - 1) + 3) / 4;\r\n        } else if constexpr (is_same_v<_Ty, long double>) {\r\n            return ((LDBL_MANT_DIG - 1) + 3) / 4;\r\n        } else {\r\n            static_assert(false, \"unexpected type; shouldn't be float\");\r\n        }\r\n    }\r\n\r\n    if (_Precision > 0) {\r\n        return static_cast<int>(_Precision);\r\n    } else if (_Precision == 0) {\r\n        const bool _Is_default_float = _Float_flags == 0;\r\n        if (_Is_default_float) {\r\n            return 1;\r\n        } else {\r\n            return 0;\r\n        }\r\n    } else {\r\n        constexpr int _Default_precision = 6;\r\n        return _Default_precision;\r\n    }\r\n}\r\n\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem>>>\r\nclass num_put : public locale::facet { // facet for converting encoded numbers to text\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    static size_t __CLRCALL_OR_CDECL _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new num_put<_Elem, _OutIt>(_Locinfo(_Ploc->_C_str()));\r\n        }\r\n\r\n        return _X_NUMERIC;\r\n    }\r\n\r\n    __PURE_APPDOMAIN_GLOBAL static locale::id id; // unique facet id\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~num_put() noexcept override {}\r\n\r\n    void __CLR_OR_THIS_CALL _Init(const _Locinfo&) {} // initialize from _Locinfo object\r\n\r\npublic:\r\n    explicit __CLR_OR_THIS_CALL num_put(size_t _Refs = 0) : locale::facet(_Refs) { // construct from current locale\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL num_put(const _Locinfo& _Lobj, size_t _Refs = 0) : locale::facet(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    using char_type = _Elem;\r\n    using iter_type = _OutIt;\r\n\r\n    _OutIt __CLR_OR_THIS_CALL put(\r\n        _OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, bool _Val) const { // put formatted bool to _Dest\r\n        return do_put(_Dest, _Iosbase, _Fill, _Val);\r\n    }\r\n\r\n    _OutIt __CLR_OR_THIS_CALL put(\r\n        _OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, long _Val) const { // put formatted long to _Dest\r\n        return do_put(_Dest, _Iosbase, _Fill, _Val);\r\n    }\r\n\r\n    _OutIt __CLR_OR_THIS_CALL put(_OutIt _Dest, ios_base& _Iosbase, _Elem _Fill,\r\n        unsigned long _Val) const { // put formatted unsigned long to _Dest\r\n        return do_put(_Dest, _Iosbase, _Fill, _Val);\r\n    }\r\n\r\n    _OutIt __CLR_OR_THIS_CALL put(\r\n        _OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, long long _Val) const { // put formatted long long to _Dest\r\n        return do_put(_Dest, _Iosbase, _Fill, _Val);\r\n    }\r\n\r\n    _OutIt __CLR_OR_THIS_CALL put(_OutIt _Dest, ios_base& _Iosbase, _Elem _Fill,\r\n        unsigned long long _Val) const { // put formatted unsigned long long to _Dest\r\n        return do_put(_Dest, _Iosbase, _Fill, _Val);\r\n    }\r\n\r\n    _OutIt __CLR_OR_THIS_CALL put(\r\n        _OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, double _Val) const { // put formatted double to _Dest\r\n        return do_put(_Dest, _Iosbase, _Fill, _Val);\r\n    }\r\n\r\n    _OutIt __CLR_OR_THIS_CALL put(\r\n        _OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, long double _Val) const { // put formatted long double to _Dest\r\n        return do_put(_Dest, _Iosbase, _Fill, _Val);\r\n    }\r\n\r\n    _OutIt __CLR_OR_THIS_CALL put(\r\n        _OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, const void* _Val) const { // put formatted void pointer to _Dest\r\n        return do_put(_Dest, _Iosbase, _Fill, _Val);\r\n    }\r\n\r\nprotected:\r\n    virtual _OutIt __CLR_OR_THIS_CALL do_put(\r\n        _OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, bool _Val) const { // put formatted bool to _Dest\r\n        if (!(_Iosbase.flags() & ios_base::boolalpha)) {\r\n            return do_put(_Dest, _Iosbase, _Fill, static_cast<long>(_Val));\r\n        } else { // put \"false\" or \"true\"\r\n            const auto& _Punct_fac = _STD use_facet<numpunct<_Elem>>(_Iosbase.getloc());\r\n            basic_string<_Elem> _Str;\r\n            if (_Val) {\r\n                _Str.assign(_Punct_fac.truename());\r\n            } else {\r\n                _Str.assign(_Punct_fac.falsename());\r\n            }\r\n\r\n            size_t _Fillcount;\r\n            if (_Iosbase.width() <= 0 || static_cast<size_t>(_Iosbase.width()) <= _Str.size()) {\r\n                _Fillcount = 0;\r\n            } else {\r\n                _Fillcount = static_cast<size_t>(_Iosbase.width()) - _Str.size();\r\n            }\r\n\r\n            if ((_Iosbase.flags() & ios_base::adjustfield) != ios_base::left) { // put leading fill\r\n                _Dest      = _Rep(_Dest, _Fill, _Fillcount);\r\n                _Fillcount = 0;\r\n            }\r\n            _Dest = _Put(_Dest, _Str.c_str(), _Str.size()); // put field\r\n            _Iosbase.width(0);\r\n            return _Rep(_Dest, _Fill, _Fillcount); // put trailing fill\r\n        }\r\n    }\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4774) // format string expected in argument N is not a string literal (/Wall)\r\n    virtual _OutIt __CLR_OR_THIS_CALL do_put(\r\n        _OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, long _Val) const { // put formatted long to _Dest\r\n        char _Buf[2 * _Max_int_dig];\r\n        char _Fmt[6];\r\n\r\n        (void) _Ifmt(_Fmt, \"ld\", _Iosbase.flags());\r\n\r\n        const int _Count = _CSTD sprintf_s(_Buf, sizeof(_Buf), _Fmt, _Val);\r\n\r\n        if (_Count < 0) { // It should be impossible for sprintf_s() to fail here.\r\n            _STL_INTERNAL_CHECK(false); // In STL tests, report an error.\r\n            return _Dest; // In production, return early to avoid static_cast<size_t> of a negative _Count.\r\n        }\r\n\r\n        return _Iput(_Dest, _Iosbase, _Fill, _Buf, static_cast<size_t>(_Count));\r\n    }\r\n\r\n    virtual _OutIt __CLR_OR_THIS_CALL do_put(_OutIt _Dest, ios_base& _Iosbase, _Elem _Fill,\r\n        unsigned long _Val) const { // put formatted unsigned long to _Dest\r\n        char _Buf[2 * _Max_int_dig];\r\n        char _Fmt[6];\r\n\r\n        (void) _Ifmt(_Fmt, \"lu\", _Iosbase.flags());\r\n\r\n        const int _Count = _CSTD sprintf_s(_Buf, sizeof(_Buf), _Fmt, _Val);\r\n\r\n        if (_Count < 0) { // It should be impossible for sprintf_s() to fail here.\r\n            _STL_INTERNAL_CHECK(false); // In STL tests, report an error.\r\n            return _Dest; // In production, return early to avoid static_cast<size_t> of a negative _Count.\r\n        }\r\n\r\n        return _Iput(_Dest, _Iosbase, _Fill, _Buf, static_cast<size_t>(_Count));\r\n    }\r\n\r\n    virtual _OutIt __CLR_OR_THIS_CALL do_put(\r\n        _OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, long long _Val) const { // put formatted long long to _Dest\r\n        char _Buf[2 * _Max_int_dig];\r\n        char _Fmt[8];\r\n\r\n        (void) _Ifmt(_Fmt, \"Ld\", _Iosbase.flags());\r\n\r\n        const int _Count = _CSTD sprintf_s(_Buf, sizeof(_Buf), _Fmt, _Val);\r\n\r\n        if (_Count < 0) { // It should be impossible for sprintf_s() to fail here.\r\n            _STL_INTERNAL_CHECK(false); // In STL tests, report an error.\r\n            return _Dest; // In production, return early to avoid static_cast<size_t> of a negative _Count.\r\n        }\r\n\r\n        return _Iput(_Dest, _Iosbase, _Fill, _Buf, static_cast<size_t>(_Count));\r\n    }\r\n\r\n    virtual _OutIt __CLR_OR_THIS_CALL do_put(_OutIt _Dest, ios_base& _Iosbase, _Elem _Fill,\r\n        unsigned long long _Val) const { // put formatted unsigned long long to _Dest\r\n        char _Buf[2 * _Max_int_dig];\r\n        char _Fmt[8];\r\n\r\n        (void) _Ifmt(_Fmt, \"Lu\", _Iosbase.flags());\r\n\r\n        const int _Count = _CSTD sprintf_s(_Buf, sizeof(_Buf), _Fmt, _Val);\r\n\r\n        if (_Count < 0) { // It should be impossible for sprintf_s() to fail here.\r\n            _STL_INTERNAL_CHECK(false); // In STL tests, report an error.\r\n            return _Dest; // In production, return early to avoid static_cast<size_t> of a negative _Count.\r\n        }\r\n\r\n        return _Iput(_Dest, _Iosbase, _Fill, _Buf, static_cast<size_t>(_Count));\r\n    }\r\n\r\n    virtual _OutIt __CLR_OR_THIS_CALL do_put(\r\n        _OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, double _Val) const { // put formatted double to _Dest\r\n        string _Buf;\r\n        char _Fmt[8];\r\n        const auto _Float_flags     = _Iosbase.flags() & ios_base::floatfield;\r\n        const bool _Is_fixed        = _Float_flags == ios_base::fixed;\r\n        const bool _Is_hex          = _Float_flags == (ios_base::fixed | ios_base::scientific);\r\n        const streamsize _Precision = _Is_hex ? -1 : _Iosbase.precision(); // precision setting\r\n        const int _Desired_precision =\r\n            _Float_put_desired_precision<double>(_Precision, _Float_flags); // desired precision\r\n        size_t _Bufsize = static_cast<size_t>(_Desired_precision);\r\n        if (_Is_fixed && 1e10 < _CSTD fabs(_Val)) { // f or F format\r\n            int _Ptwo;\r\n            (void) _CSTD frexp(_Val, &_Ptwo);\r\n            _Bufsize += _CSTD abs(_Ptwo) * 30103L / 100000L;\r\n        }\r\n\r\n        _Buf.resize(_Bufsize + 50); // add fudge factor\r\n        const bool _Is_finite      = (_STD isfinite) (_Val);\r\n        const auto _Adjusted_flags = // TRANSITION, DevCom-10519861\r\n            _Is_finite ? _Iosbase.flags() : _Iosbase.flags() & ~ios_base::showpoint;\r\n\r\n        (void) _Ffmt(_Fmt, 0, _Adjusted_flags);\r\n\r\n        const int _Count = _CSTD sprintf_s(&_Buf[0], _Buf.size(), _Fmt, static_cast<int>(_Precision), _Val);\r\n\r\n        if (_Count < 0) { // It should be impossible for sprintf_s() to fail here.\r\n            _STL_INTERNAL_CHECK(false); // In STL tests, report an error.\r\n            return _Dest; // In production, return early to avoid static_cast<size_t> of a negative _Count.\r\n        }\r\n\r\n        return _Fput_v3(_Dest, _Iosbase, _Fill, _Buf.c_str(), static_cast<size_t>(_Count), _Is_finite);\r\n    }\r\n\r\n    virtual _OutIt __CLR_OR_THIS_CALL do_put(\r\n        _OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, long double _Val) const { // put formatted long double to _Dest\r\n        string _Buf;\r\n        char _Fmt[8];\r\n        const auto _Float_flags     = _Iosbase.flags() & ios_base::floatfield;\r\n        const bool _Is_fixed        = _Float_flags == ios_base::fixed;\r\n        const bool _Is_hex          = _Float_flags == (ios_base::fixed | ios_base::scientific);\r\n        const streamsize _Precision = _Is_hex ? -1 : _Iosbase.precision(); // precision setting\r\n        const int _Desired_precision =\r\n            _Float_put_desired_precision<long double>(_Precision, _Float_flags); // desired precision\r\n        size_t _Bufsize = static_cast<size_t>(_Desired_precision);\r\n        if (_Is_fixed && 1e10 < _CSTD fabsl(_Val)) { // f or F format\r\n            int _Ptwo;\r\n            (void) _CSTD frexpl(_Val, &_Ptwo);\r\n            _Bufsize += _CSTD abs(_Ptwo) * 30103L / 100000L;\r\n        }\r\n\r\n        _Buf.resize(_Bufsize + 50); // add fudge factor\r\n        const bool _Is_finite      = (_STD isfinite) (_Val);\r\n        const auto _Adjusted_flags = // TRANSITION, DevCom-10519861\r\n            _Is_finite ? _Iosbase.flags() : _Iosbase.flags() & ~ios_base::showpoint;\r\n\r\n        (void) _Ffmt(_Fmt, 'L', _Adjusted_flags);\r\n\r\n        const int _Count = _CSTD sprintf_s(&_Buf[0], _Buf.size(), _Fmt, static_cast<int>(_Precision), _Val);\r\n\r\n        if (_Count < 0) { // It should be impossible for sprintf_s() to fail here.\r\n            _STL_INTERNAL_CHECK(false); // In STL tests, report an error.\r\n            return _Dest; // In production, return early to avoid static_cast<size_t> of a negative _Count.\r\n        }\r\n\r\n        return _Fput_v3(_Dest, _Iosbase, _Fill, _Buf.c_str(), static_cast<size_t>(_Count), _Is_finite);\r\n    }\r\n#pragma warning(pop)\r\n\r\n    virtual _OutIt __CLR_OR_THIS_CALL do_put(\r\n        _OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, const void* _Val) const { // put formatted void pointer to _Dest\r\n        char _Buf[2 * _Max_int_dig];\r\n\r\n        const int _Count = _CSTD sprintf_s(_Buf, sizeof(_Buf), \"%p\", _Val);\r\n\r\n        if (_Count < 0) { // It should be impossible for sprintf_s() to fail here.\r\n            _STL_INTERNAL_CHECK(false); // In STL tests, report an error.\r\n            return _Dest; // In production, return early to avoid static_cast<size_t> of a negative _Count.\r\n        }\r\n\r\n        return _Iput(_Dest, _Iosbase, _Fill, _Buf, static_cast<size_t>(_Count));\r\n    }\r\n\r\nprivate:\r\n    // TRANSITION, ABI: This always returns _Fmt, which is now ignored.\r\n    char* __CLRCALL_OR_CDECL _Ffmt(char* _Fmt, char _Spec, ios_base::fmtflags _Flags) const {\r\n        // generate sprintf format for floating-point\r\n        char* _Ptr = _Fmt;\r\n        *_Ptr++    = '%';\r\n\r\n        if (_Flags & ios_base::showpos) {\r\n            *_Ptr++ = '+';\r\n        }\r\n\r\n        if (_Flags & ios_base::showpoint) {\r\n            *_Ptr++ = '#';\r\n        }\r\n\r\n        *_Ptr++ = '.';\r\n        *_Ptr++ = '*'; // for precision argument\r\n        if (_Spec != '\\0') {\r\n            *_Ptr++ = _Spec; // 'L' qualifier for long double only\r\n        }\r\n\r\n        char _Ch; // specifier\r\n        ios_base::fmtflags _Ffl = _Flags & ios_base::floatfield;\r\n        if (_Flags & ios_base::uppercase) {\r\n            if (_Ffl == ios_base::fixed) {\r\n                _Ch = 'F';\r\n            } else if (_Ffl == (ios_base::scientific | ios_base::fixed)) {\r\n                _Ch = 'A';\r\n            } else if (_Ffl == ios_base::scientific) {\r\n                _Ch = 'E';\r\n            } else {\r\n                _Ch = 'G';\r\n            }\r\n        } else {\r\n            if (_Ffl == ios_base::fixed) {\r\n                _Ch = 'f';\r\n            } else if (_Ffl == (ios_base::scientific | ios_base::fixed)) {\r\n                _Ch = 'a';\r\n            } else if (_Ffl == ios_base::scientific) {\r\n                _Ch = 'e';\r\n            } else {\r\n                _Ch = 'g';\r\n            }\r\n        }\r\n        *_Ptr++ = _Ch;\r\n\r\n        *_Ptr = '\\0';\r\n        return _Fmt;\r\n    }\r\n\r\n    _OutIt __CLRCALL_OR_CDECL _Fput(_OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, const char* _Buf,\r\n        size_t _Count) const { // TRANSITION, ABI: preserved for binary compatibility\r\n        return _Fput_v3(_Dest, _Iosbase, _Fill, _Buf, _Count, true);\r\n    }\r\n\r\n    template <int = 0> // TRANSITION, ABI\r\n    _OutIt _Fput_v3(_OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, const char* _Buf, size_t _Count,\r\n        bool _Is_finite_val) const { // put formatted floating-point to _Dest\r\n        auto _Prefix = static_cast<size_t>(0 < _Count && (*_Buf == '+' || *_Buf == '-'));\r\n        const char* _Exps;\r\n        if ((_Iosbase.flags() & ios_base::floatfield) != (ios_base::scientific | ios_base::fixed)) {\r\n            _Exps = \"eE\";\r\n        } else { // correct for hexadecimal floating-point\r\n            _Exps = \"pP\";\r\n            if (_Prefix + 2 <= _Count && _Buf[_Prefix] == '0'\r\n                && (_Buf[_Prefix + 1] == 'x' || _Buf[_Prefix + 1] == 'X')) {\r\n                _Prefix += 2;\r\n            }\r\n        }\r\n        const size_t _Eoff = _CSTD strcspn(&_Buf[0], _Exps); // find exponent\r\n        char _Dp[2]        = {\".\"};\r\n        _Dp[0]             = (_CSTD localeconv())->decimal_point[0];\r\n        const size_t _Poff = _CSTD strcspn(&_Buf[0], &_Dp[0]); // find decimal point\r\n\r\n        const ctype<_Elem>& _Ctype_fac = _STD use_facet<ctype<_Elem>>(_Iosbase.getloc());\r\n        basic_string<_Elem> _Groupstring(_Count, _Elem(0)); // reserve space\r\n        _Ctype_fac.widen(_Buf, _Buf + _Count, &_Groupstring[0]);\r\n\r\n        const auto& _Punct_fac  = _STD use_facet<numpunct<_Elem>>(_Iosbase.getloc());\r\n        const string _Grouping  = _Punct_fac.grouping();\r\n        const _Elem _Kseparator = _Punct_fac.thousands_sep();\r\n\r\n        if (_Poff != _Count) {\r\n            _Groupstring[_Poff] = _Punct_fac.decimal_point();\r\n        }\r\n\r\n        if (_Is_finite_val) {\r\n            size_t _Off     = _Poff == _Count ? _Eoff : _Poff;\r\n            const char* _Pg = &_Grouping[0];\r\n            while (*_Pg != CHAR_MAX && '\\0' < *_Pg && static_cast<size_t>(*_Pg) < _Off - _Prefix) {\r\n                // add thousands separator\r\n                _Groupstring.insert(_Off -= *_Pg, 1, _Kseparator);\r\n                if ('\\0' < _Pg[1]) {\r\n                    ++_Pg; // not last group, advance\r\n                }\r\n            }\r\n        }\r\n\r\n        _Count = _Groupstring.size();\r\n\r\n        size_t _Fillcount;\r\n        if (_Iosbase.width() <= 0 || static_cast<size_t>(_Iosbase.width()) <= _Count) {\r\n            _Fillcount = 0;\r\n        } else {\r\n            _Fillcount = static_cast<size_t>(_Iosbase.width()) - _Count;\r\n        }\r\n\r\n        ios_base::fmtflags _Adjustfield = _Iosbase.flags() & ios_base::adjustfield;\r\n        if (_Adjustfield != ios_base::left && _Adjustfield != ios_base::internal) { // put leading fill\r\n            _Dest      = _Rep(_Dest, _Fill, _Fillcount);\r\n            _Fillcount = 0;\r\n            _Dest      = _Put(_Dest, &_Groupstring[0], _Prefix);\r\n        } else if (_Adjustfield == ios_base::internal) { // put internal fill\r\n            _Dest      = _Put(_Dest, &_Groupstring[0], _Prefix);\r\n            _Dest      = _Rep(_Dest, _Fill, _Fillcount);\r\n            _Fillcount = 0;\r\n        } else {\r\n            _Dest = _Put(_Dest, &_Groupstring[0], _Prefix);\r\n        }\r\n\r\n        _Dest = _Put(_Dest, &_Groupstring[_Prefix], _Count - _Prefix);\r\n        _Iosbase.width(0);\r\n        return _Rep(_Dest, _Fill, _Fillcount); // put trailing fill\r\n    }\r\n\r\n    // TRANSITION, ABI: This always returns _Fmt, which is now ignored.\r\n    char* __CLRCALL_OR_CDECL _Ifmt(char* _Fmt, const char* _Spec, ios_base::fmtflags _Flags) const {\r\n        // generate sprintf format for integer\r\n        char* _Ptr = _Fmt;\r\n        *_Ptr++    = '%';\r\n\r\n        if (_Flags & ios_base::showpos) {\r\n            *_Ptr++ = '+';\r\n        }\r\n\r\n        if (_Flags & ios_base::showbase) {\r\n            *_Ptr++ = '#';\r\n        }\r\n\r\n        if (_Spec[0] != 'L') {\r\n            *_Ptr++ = _Spec[0]; // qualifier\r\n        } else { // change L to I64\r\n            *_Ptr++ = 'I';\r\n            *_Ptr++ = '6';\r\n            *_Ptr++ = '4';\r\n        }\r\n\r\n        ios_base::fmtflags _Basefield = _Flags & ios_base::basefield;\r\n        *_Ptr++                       = _Basefield == ios_base::oct  ? 'o'\r\n                                      : _Basefield != ios_base::hex  ? _Spec[1] // 'd' or 'u'\r\n                                      : _Flags & ios_base::uppercase ? 'X'\r\n                                                                     : 'x';\r\n        *_Ptr                         = '\\0';\r\n        return _Fmt;\r\n    }\r\n\r\n    _OutIt __CLRCALL_OR_CDECL _Iput(_OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, char* _Buf,\r\n        size_t _Count) const { // put formatted integer to _Dest\r\n        auto _Prefix = static_cast<size_t>(0 < _Count && (*_Buf == '+' || *_Buf == '-'));\r\n        if ((_Iosbase.flags() & ios_base::basefield) == ios_base::hex && _Prefix + 2 <= _Count && _Buf[_Prefix] == '0'\r\n            && (_Buf[_Prefix + 1] == 'x' || _Buf[_Prefix + 1] == 'X')) {\r\n            _Prefix += 2;\r\n        }\r\n\r\n        const ctype<_Elem>& _Ctype_fac = _STD use_facet<ctype<_Elem>>(_Iosbase.getloc());\r\n        basic_string<_Elem> _Groupstring(_Count, _Elem(0)); // reserve space\r\n        _Ctype_fac.widen(_Buf, _Buf + _Count, &_Groupstring[0]);\r\n\r\n        const auto& _Punct_fac = _STD use_facet<numpunct<_Elem>>(_Iosbase.getloc());\r\n        const string _Grouping = _Punct_fac.grouping();\r\n        const char* _Pg        = &_Grouping[0];\r\n        if (*_Pg != CHAR_MAX && '\\0' < *_Pg) { // grouping specified, add thousands separators\r\n            const _Elem _Kseparator = _Punct_fac.thousands_sep();\r\n            while (*_Pg != CHAR_MAX && '\\0' < *_Pg && static_cast<size_t>(*_Pg) < _Count - _Prefix) {\r\n                // insert thousands separator\r\n                _Count -= *_Pg;\r\n                _Groupstring.insert(_Count, 1, _Kseparator);\r\n                if ('\\0' < _Pg[1]) {\r\n                    ++_Pg; // not last group, advance\r\n                }\r\n            }\r\n        }\r\n\r\n        _Count = _Groupstring.size();\r\n\r\n        size_t _Fillcount;\r\n        if (_Iosbase.width() <= 0 || static_cast<size_t>(_Iosbase.width()) <= _Count) {\r\n            _Fillcount = 0;\r\n        } else {\r\n            _Fillcount = static_cast<size_t>(_Iosbase.width()) - _Count;\r\n        }\r\n\r\n        ios_base::fmtflags _Adjustfield = _Iosbase.flags() & ios_base::adjustfield;\r\n        if (_Adjustfield != ios_base::left && _Adjustfield != ios_base::internal) { // put leading fill\r\n            _Dest      = _Rep(_Dest, _Fill, _Fillcount);\r\n            _Fillcount = 0;\r\n            _Dest      = _Put(_Dest, &_Groupstring[0], _Prefix);\r\n        } else if (_Adjustfield == ios_base::internal) { // put internal fill\r\n            _Dest      = _Put(_Dest, &_Groupstring[0], _Prefix);\r\n            _Dest      = _Rep(_Dest, _Fill, _Fillcount);\r\n            _Fillcount = 0;\r\n        } else {\r\n            _Dest = _Put(_Dest, &_Groupstring[0], _Prefix);\r\n        }\r\n\r\n        _Dest = _Put(_Dest, &_Groupstring[_Prefix], _Count - _Prefix);\r\n        _Iosbase.width(0);\r\n        return _Rep(_Dest, _Fill, _Fillcount); // put trailing fill\r\n    }\r\n\r\n    _OutIt __CLRCALL_OR_CDECL _Put(\r\n        _OutIt _Dest, const _Elem* _Ptr, size_t _Count) const { // put [_Ptr, _Ptr + _Count) to _Dest\r\n        for (; 0 < _Count; --_Count, (void) ++_Dest, ++_Ptr) {\r\n            *_Dest = *_Ptr;\r\n        }\r\n\r\n        return _Dest;\r\n    }\r\n\r\n    _OutIt __CLRCALL_OR_CDECL _Rep(_OutIt _Dest, _Elem _Ch, size_t _Count) const { // put _Count * _Ch to _Dest\r\n        for (; 0 < _Count; --_Count, (void) ++_Dest) {\r\n            *_Dest = _Ch;\r\n        }\r\n\r\n        return _Dest;\r\n    }\r\n};\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdllimport-static-field-def\"\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _Elem, class _OutIt>\r\n__PURE_APPDOMAIN_GLOBAL locale::id num_put<_Elem, _OutIt>::id;\r\n\r\n#if defined(_DLL_CPPLIB)\r\n\r\n#if !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id numpunct<char>::id;\r\ntemplate class _CRTIMP2_PURE_IMPORT num_get<char, istreambuf_iterator<char, char_traits<char>>>;\r\ntemplate class _CRTIMP2_PURE_IMPORT num_put<char, ostreambuf_iterator<char, char_traits<char>>>;\r\n\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id numpunct<wchar_t>::id;\r\ntemplate class _CRTIMP2_PURE_IMPORT num_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t>>>;\r\ntemplate class _CRTIMP2_PURE_IMPORT num_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t>>>;\r\n#endif // !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\n\r\n#ifdef __FORCE_INSTANCE\r\ntemplate __PURE_APPDOMAIN_GLOBAL locale::id numpunct<unsigned short>::id;\r\ntemplate class _CRTIMP2_PURE_IMPORT\r\n    num_get<unsigned short, istreambuf_iterator<unsigned short, char_traits<unsigned short>>>;\r\ntemplate class _CRTIMP2_PURE_IMPORT\r\n    num_put<unsigned short, ostreambuf_iterator<unsigned short, char_traits<unsigned short>>>;\r\n#endif // defined(__FORCE_INSTANCE)\r\n#endif // defined(_DLL_CPPLIB)\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XLOCNUM_\r\n"
  },
  {
    "path": "stl/inc/xloctime",
    "content": "// xloctime internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XLOCTIME_\r\n#define _XLOCTIME_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <ctime>\r\n#include <iterator>\r\n#include <xlocnum>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _InIt, class _Elem>\r\nios_base::iostate _Getint_v2(_InIt& _First, _InIt& _Last, int _Lo, int _Hi, int& _Val, int& _Digits_read,\r\n    const ctype<_Elem>& _Ctype_fac) { // get integer in range [_Lo, _Hi] from [_First, _Last)\r\n    _STL_INTERNAL_CHECK(0 <= _Hi && _Hi <= 9999);\r\n    const int _Hi_digits = (_Hi <= 9 ? 1 : _Hi <= 99 ? 2 : _Hi <= 999 ? 3 : 4);\r\n    char _Ac[_Max_int_dig];\r\n    char* _Ep;\r\n    char* _Ptr = _Ac;\r\n    char _Ch;\r\n\r\n    _Digits_read = 0;\r\n\r\n    while (_First != _Last && _Digits_read < _Hi_digits && _Ctype_fac.is(ctype_base::space, *_First)) {\r\n        ++_First;\r\n        ++_Digits_read;\r\n    }\r\n\r\n    if (_First != _Last && _Digits_read < _Hi_digits) {\r\n        if ((_Ch = _Ctype_fac.narrow(*_First)) == '+') { // copy plus sign\r\n            *_Ptr++ = '+';\r\n            ++_First;\r\n        } else if (_Ch == '-') { // copy minus sign\r\n            *_Ptr++ = '-';\r\n            ++_First;\r\n        }\r\n    }\r\n\r\n    for (; _First != _Last && _Digits_read < _Hi_digits && _Ctype_fac.narrow(*_First) == '0'; ++_First) {\r\n        ++_Digits_read; // strip leading zeros\r\n    }\r\n\r\n    if (_Digits_read > 0) {\r\n        *_Ptr++ = '0'; // replace one or more with single zero\r\n    }\r\n\r\n    for (char* const _Pe = &_Ac[_Max_int_dig - 1];\r\n        _First != _Last && '0' <= (_Ch = _Ctype_fac.narrow(*_First)) && _Ch <= '9' && _Digits_read < _Hi_digits;\r\n        ++_Digits_read, (void) ++_First) { // copy digits\r\n        *_Ptr = _Ch;\r\n        if (_Ptr < _Pe) {\r\n            ++_Ptr; // drop trailing digits if already too large\r\n        }\r\n    }\r\n\r\n    if (_Digits_read == 0) {\r\n        _Ptr = _Ac;\r\n    }\r\n\r\n    *_Ptr                    = '\\0';\r\n    int _Errno               = 0;\r\n    const long _Ans          = _CSTD _Stolx(_Ac, &_Ep, 10, &_Errno);\r\n    ios_base::iostate _State = ios_base::goodbit;\r\n\r\n    if (_First == _Last) {\r\n        _State |= ios_base::eofbit;\r\n    }\r\n\r\n    if (_Ep == _Ac || _Errno != 0 || _Ans < _Lo || _Hi < _Ans) {\r\n        _State |= ios_base::failbit; // bad conversion\r\n    } else {\r\n        _Val = _Ans; // store valid result\r\n    }\r\n\r\n    return _State;\r\n}\r\n\r\n_EXPORT_STD extern \"C++\" struct _CRTIMP2_PURE_IMPORT time_base // base class for time_get\r\n    : locale::facet // TRANSITION, ABI, shouldn't be derived from locale::facet\r\n{\r\n    enum dateorder { // constants for different orders of date components\r\n        no_order,\r\n        dmy,\r\n        mdy,\r\n        ymd,\r\n        ydm\r\n    };\r\n\r\n    __CLR_OR_THIS_CALL time_base(size_t _Refs = 0) noexcept // strengthened\r\n        : locale::facet(_Refs) {}\r\n\r\n    __CLR_OR_THIS_CALL ~time_base() noexcept override {}\r\n};\r\n\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _InIt = istreambuf_iterator<_Elem, char_traits<_Elem>>>\r\nclass time_get : public time_base { // facet for converting text to encoded times\r\nprivate:\r\n    friend _Tidy_guard<time_get>;\r\n\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    using char_type = _Elem;\r\n    using iter_type = _InIt;\r\n    using _Ctype    = ctype<_Elem>;\r\n\r\n    __PURE_APPDOMAIN_GLOBAL static locale::id id; // unique facet id\r\n\r\n    dateorder __CLR_OR_THIS_CALL date_order() const {\r\n        return do_date_order();\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get_time(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        tm* _Pt) const { // get time of day from [_First, _Last) into _Pt\r\n        return do_get_time(_First, _Last, _Iosbase, _State, _Pt);\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get_date(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        tm* _Pt) const { // get date from [_First, _Last) into _Pt\r\n        return do_get_date(_First, _Last, _Iosbase, _State, _Pt);\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get_weekday(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        tm* _Pt) const { // get weekday from [_First, _Last) into _Pt\r\n        return do_get_weekday(_First, _Last, _Iosbase, _State, _Pt);\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get_monthname(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        tm* _Pt) const { // get month from [_First, _Last) into _Pt\r\n        return do_get_monthname(_First, _Last, _Iosbase, _State, _Pt);\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get_year(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        tm* _Pt) const { // get year from [_First, _Last) into _Pt\r\n        return do_get_year(_First, _Last, _Iosbase, _State, _Pt);\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State, tm* _Pt,\r\n        char _Specifier, char _Modifier = '\\0') const { // get formatted time for _Specifier/_Modifier\r\n        return do_get(_First, _Last, _Iosbase, _State, _Pt, _Specifier, _Modifier);\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State, tm* _Pt,\r\n        const _Elem* _Fmtfirst, const _Elem* _Fmtlast) const { // get formatted time for format string\r\n        _Adl_verify_range(_Fmtfirst, _Fmtlast);\r\n        const _Ctype& _Ctype_fac = _STD use_facet<_Ctype>(_Iosbase.getloc());\r\n\r\n        _State = ios_base::goodbit;\r\n\r\n        for (; _Fmtfirst != _Fmtlast; ++_Fmtfirst) {\r\n            if (_State != ios_base::goodbit) {\r\n                // N4950 [locale.time.get.members]/8.2\r\n                // _State is fail, eof, or bad. Do not proceed to the next fields. Return with current _State.\r\n                break;\r\n            } else if (_First == _Last) {\r\n                // N4950 [locale.time.get.members]/8.3\r\n                _State = ios_base::eofbit | ios_base::failbit;\r\n                break;\r\n            } else if (_Ctype_fac.narrow(*_Fmtfirst) != '%') { // match literal element\r\n                if (_Ctype_fac.is(_Ctype::space, *_Fmtfirst)) {\r\n                    while (_First != _Last && _Ctype_fac.is(_Ctype::space, *_First)) {\r\n                        ++_First;\r\n                    }\r\n                } else if (_Ctype_fac.tolower(*_First) != _Ctype_fac.tolower(*_Fmtfirst)) { // bad literal match\r\n                    _State |= ios_base::failbit;\r\n                    break;\r\n                } else {\r\n                    ++_First;\r\n                }\r\n            } else if (++_Fmtfirst == _Fmtlast) {\r\n                // N4950 [locale.time.get.members]/8.4: \"If the number of elements in the range [fmt, fmtend) is not\r\n                // sufficient to unambiguously determine whether the conversion specification is complete and valid,\r\n                // the function evaluates err = ios_base::failbit.\"\r\n                _State = ios_base::failbit;\r\n                break;\r\n            } else { // get specifier after %\r\n                char _Specifier = _Ctype_fac.narrow(*_Fmtfirst);\r\n                char _Modifier  = '\\0';\r\n\r\n                if (_Specifier == 'E' || _Specifier == 'O' || _Specifier == 'Q' || _Specifier == '#') {\r\n                    if (++_Fmtfirst == _Fmtlast) { // no specifier\r\n                        _State = ios_base::failbit;\r\n                        break;\r\n                    } else { // save both qualifier and specifier\r\n                        _Modifier  = _Specifier;\r\n                        _Specifier = _Ctype_fac.narrow(*_Fmtfirst);\r\n                    }\r\n                }\r\n\r\n                _First = do_get(_First, _Last, _Iosbase, _State, _Pt, _Specifier, _Modifier); // convert a single field\r\n            }\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    explicit __CLR_OR_THIS_CALL time_get(size_t _Refs = 0) : time_base(_Refs) { // construct from current locale\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL time_get(const _Locinfo& _Lobj, size_t _Refs = 0) : time_base(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t __CLRCALL_OR_CDECL _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new time_get<_Elem, _InIt>(_Locinfo(_Ploc->_C_str()));\r\n        }\r\n\r\n        return _X_TIME;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~time_get() noexcept override {\r\n        _Tidy();\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL time_get(const char* _Locname, size_t _Refs = 0) : time_base(_Refs) {\r\n        _BEGIN_LOCINFO(_Lobj(_Locname))\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    template <class _Elem2>\r\n    void __CLR_OR_THIS_CALL _Getvals(_Elem2, const _Locinfo& _Lobj) { // get values\r\n        _Cvt = _Lobj._Getcvt();\r\n\r\n        if constexpr (is_same_v<_Elem2, wchar_t>) {\r\n            _Days = reinterpret_cast<const _Elem*>(_Maklocwcs(reinterpret_cast<const wchar_t*>(_Lobj._W_Getdays())));\r\n            _Months =\r\n                reinterpret_cast<const _Elem*>(_Maklocwcs(reinterpret_cast<const wchar_t*>(_Lobj._W_Getmonths())));\r\n            _Ampm = reinterpret_cast<const _Elem*>(_Maklocwcs(L\":AM:am:PM:pm\"));\r\n        } else {\r\n            _Days   = _Maklocstr<_Elem>(_Lobj._Getdays(), _Cvt);\r\n            _Months = _Maklocstr<_Elem>(_Lobj._Getmonths(), _Cvt);\r\n            _Ampm   = _Maklocstr<_Elem>(\":AM:am:PM:pm\", _Cvt);\r\n        }\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Init(const _Locinfo& _Lobj) { // initialize from _Lobj\r\n        _Days   = nullptr;\r\n        _Months = nullptr;\r\n        _Ampm   = nullptr;\r\n\r\n        _Tidy_guard<time_get> _Guard{this};\r\n        _Getvals(_Elem{}, _Lobj);\r\n        _Dateorder     = static_cast<dateorder>(_Lobj._Getdateorder());\r\n        _Guard._Target = nullptr;\r\n    }\r\n\r\n    virtual dateorder __CLR_OR_THIS_CALL do_date_order() const {\r\n        return _Dateorder;\r\n    }\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get_time(_InIt _First, _InIt _Last, ios_base& _Iosbase,\r\n        ios_base::iostate& _State, tm* _Pt) const { // get time of day from [_First, _Last) into _Pt\r\n        const _Ctype& _Ctype_fac = _STD use_facet<_Ctype>(_Iosbase.getloc());\r\n\r\n        _State |= _Getint(_First, _Last, 0, 23, _Pt->tm_hour, _Ctype_fac);\r\n\r\n        if (_State != ios_base::goodbit || _Ctype_fac.narrow(*_First) != ':') {\r\n            _State |= ios_base::failbit; // hour field is bad\r\n        } else {\r\n            _State |= _Getint(++_First, _Last, 0, 59, _Pt->tm_min, _Ctype_fac);\r\n        }\r\n\r\n        if (_State != ios_base::goodbit || _Ctype_fac.narrow(*_First) != ':') {\r\n            _State |= ios_base::failbit; // min field is bad\r\n        } else {\r\n            _State |= _Getint(++_First, _Last, 0, 60, _Pt->tm_sec, _Ctype_fac);\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get_date(_InIt _First, _InIt _Last, ios_base& _Iosbase,\r\n        ios_base::iostate& _State, tm* _Pt) const { // get date from [_First, _Last) into _Pt\r\n        const _Ctype& _Ctype_fac = _STD use_facet<_Ctype>(_Iosbase.getloc());\r\n\r\n        dateorder _Dorder = date_order();\r\n        if (_Dorder == no_order) {\r\n            _Dorder = mdy;\r\n        }\r\n\r\n        if (_First != _Last) {\r\n            if (!_Ctype_fac.is(_Ctype::digit, *_First)) { // begins with month name, assume mdy\r\n                _First  = get_monthname(_First, _Last, _Iosbase, _State, _Pt);\r\n                _Dorder = mdy;\r\n            } else if (_Dorder == mdy) { // get month number\r\n                _State |= _Getint(_First, _Last, 1, 12, _Pt->tm_mon, _Ctype_fac);\r\n                --_Pt->tm_mon;\r\n            } else if (_Dorder == dmy) {\r\n                _State |= _Getint(_First, _Last, 1, 31, _Pt->tm_mday, _Ctype_fac);\r\n            } else { // ymd or ydm\r\n                _First = get_year(_First, _Last, _Iosbase, _State, _Pt);\r\n            }\r\n        }\r\n\r\n        while (_First != _Last && _Ctype_fac.is(_Ctype::space, *_First)) {\r\n            ++_First; // skip spaces\r\n        }\r\n\r\n        if (_First != _Last) { // skip [:,/]\r\n            char _Ch = _Ctype_fac.narrow(*_First);\r\n            if (_Ch == ':' || _Ch == ',' || _Ch == '/') {\r\n                ++_First;\r\n            }\r\n        }\r\n\r\n        while (_First != _Last && _Ctype_fac.is(_Ctype::space, *_First)) {\r\n            ++_First; // skip spaces\r\n        }\r\n\r\n        if (_First != _Last) {\r\n            if (!_Ctype_fac.is(_Ctype::digit, *_First)) {\r\n                if (_Dorder == mdy) {\r\n                    _State |= ios_base::failbit; // error, month already seen\r\n                } else { // month name is second, like it or not\r\n                    _First = get_monthname(_First, _Last, _Iosbase, _State, _Pt);\r\n                    if (_Dorder == ydm) {\r\n                        _Dorder = ymd;\r\n                    }\r\n                }\r\n            } else if (_Dorder == dmy || _Dorder == ymd) { // get month number\r\n                _State |= _Getint(_First, _Last, 1, 12, _Pt->tm_mon, _Ctype_fac);\r\n                --_Pt->tm_mon;\r\n            } else {\r\n                _State |= _Getint(_First, _Last, 1, 31, _Pt->tm_mday, _Ctype_fac);\r\n            }\r\n        }\r\n\r\n        while (_First != _Last && _Ctype_fac.is(_Ctype::space, *_First)) {\r\n            ++_First; // skip spaces\r\n        }\r\n\r\n        if (_First != _Last) { // skip [:,/]\r\n            char _Ch = _Ctype_fac.narrow(*_First);\r\n            if (_Ch == ':' || _Ch == ',' || _Ch == '/') {\r\n                ++_First;\r\n            }\r\n        }\r\n\r\n        while (_First != _Last && _Ctype_fac.is(_Ctype::space, *_First)) {\r\n            ++_First; // skip spaces\r\n        }\r\n\r\n        if (_First == _Last) {\r\n            _State |= ios_base::failbit; // error, missing component(s)\r\n        } else if (!_Ctype_fac.is(_Ctype::digit, *_First)) {\r\n            if (_Dorder != ydm) {\r\n                _State |= ios_base::failbit; // error, month out of place\r\n            } else {\r\n                _First = get_monthname(_First, _Last, _Iosbase, _State, _Pt);\r\n            }\r\n        } else if (_Dorder == ydm) { // get month number\r\n            _State |= _Getint(_First, _Last, 1, 12, _Pt->tm_mon, _Ctype_fac);\r\n            --_Pt->tm_mon;\r\n        } else if (_Dorder == ymd) {\r\n            _State |= _Getint(_First, _Last, 1, 31, _Pt->tm_mday, _Ctype_fac);\r\n        } else { // mdy or dmy\r\n            _First = get_year(_First, _Last, _Iosbase, _State, _Pt);\r\n        }\r\n\r\n        if (_First == _Last) {\r\n            _State |= ios_base::eofbit;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get_weekday(_InIt _First, _InIt _Last, ios_base&, ios_base::iostate& _State,\r\n        tm* _Pt) const { // get weekday from [_First, _Last) into _Pt\r\n        int _Num = _Getloctxt(_First, _Last, 0, _Days, _Case_sensitive::_Nope);\r\n        if (_Num < 0) {\r\n            _State |= ios_base::failbit;\r\n        } else {\r\n            _Pt->tm_wday = _Num >> 1; // set wday\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get_monthname(_InIt _First, _InIt _Last, ios_base&, ios_base::iostate& _State,\r\n        tm* _Pt) const { // get month from [_First, _Last) into _Pt\r\n        int _Num = _Getloctxt(_First, _Last, 0, _Months, _Case_sensitive::_Nope);\r\n\r\n        if (_Num < 0) {\r\n            _State |= ios_base::failbit;\r\n        } else {\r\n            _Pt->tm_mon = _Num >> 1; // set mon\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get_year(_InIt _First, _InIt _Last, ios_base& _Iosbase,\r\n        ios_base::iostate& _State, tm* _Pt) const { // get year from [_First, _Last) into _Pt\r\n        const _Ctype& _Ctype_fac = _STD use_facet<_Ctype>(_Iosbase.getloc());\r\n\r\n        int _Ans = 0;\r\n        int _Digits_read;\r\n        ios_base::iostate _Res = _Getint_v2(_First, _Last, 0, 9999, _Ans, _Digits_read, _Ctype_fac);\r\n\r\n        _State |= _Res; // pass on eofbit and failbit\r\n        if (!(_Res & ios_base::failbit)) {\r\n            if (_Digits_read <= 2) {\r\n                if (_Ans < 69) {\r\n                    // CodeQL [SM03231] This is parsing tm_year (years since 1900); leap years are irrelevant.\r\n                    _Pt->tm_year = _Ans + 100; // [00, 68] parsed as [2000, 2068]\r\n                } else if (_Ans < 100) {\r\n                    // CodeQL [SM03231] This is parsing tm_year (years since 1900); leap years are irrelevant.\r\n                    _Pt->tm_year = _Ans; // [69, 99] parsed as [1969, 1999]\r\n                }\r\n            } else {\r\n                // CodeQL [SM03231] This is parsing tm_year (years since 1900); leap years are irrelevant.\r\n                _Pt->tm_year = _Ans - 1900; // parsed literally\r\n            }\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    virtual _InIt __CLR_OR_THIS_CALL do_get(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State,\r\n        tm* _Pt, char _Specifier, char = 0) const { // get formatted time for _Specifier (_Modifier ignored)\r\n        const _Ctype& _Ctype_fac = _STD use_facet<_Ctype>(_Iosbase.getloc());\r\n        int _Ans                 = 0;\r\n\r\n        _State = ios_base::goodbit;\r\n\r\n        switch (_Specifier) { // process format specifier\r\n        case 'a':\r\n        case 'A':\r\n            _First = get_weekday(_First, _Last, _Iosbase, _State, _Pt);\r\n            break;\r\n\r\n        case 'b':\r\n        case 'B':\r\n        case 'h':\r\n            _First = get_monthname(_First, _Last, _Iosbase, _State, _Pt);\r\n            break;\r\n\r\n        case 'c':\r\n            _First = _Getfmt(_First, _Last, _Iosbase, _State, _Pt, \"%b %d %H : %M : %S %Y\");\r\n            break;\r\n\r\n        case 'C':\r\n            _State |= _Getint(_First, _Last, 0, 99, _Ans, _Ctype_fac);\r\n            if (!(_State & ios_base::failbit)) {\r\n                // CodeQL [SM03231] This is parsing tm_year (years since 1900); leap years are irrelevant.\r\n                _Pt->tm_year = _Ans * 100 - 1900; // convert to century\r\n            }\r\n\r\n            break;\r\n\r\n        case 'd':\r\n        case 'e':\r\n            _State |= _Getint(_First, _Last, 1, 31, _Pt->tm_mday, _Ctype_fac);\r\n            break;\r\n\r\n        case 'D':\r\n            _First = _Getfmt(_First, _Last, _Iosbase, _State, _Pt, \"%m / %d / %y\");\r\n            break;\r\n\r\n        case 'H':\r\n            _State |= _Getint(_First, _Last, 0, 23, _Pt->tm_hour, _Ctype_fac);\r\n            break;\r\n\r\n        case 'I':\r\n            _State |= _Getint(_First, _Last, 1, 12, _Ans, _Ctype_fac);\r\n            if (!(_State & ios_base::failbit)) {\r\n                _Pt->tm_hour = _Ans == 12 ? 0 : _Ans;\r\n            }\r\n\r\n            break;\r\n\r\n        case 'j':\r\n            _State |= _Getint(_First, _Last, 1, 366, _Pt->tm_yday, _Ctype_fac);\r\n            break;\r\n\r\n        case 'm':\r\n            _State |= _Getint(_First, _Last, 1, 12, _Ans, _Ctype_fac);\r\n            if (!(_State & ios_base::failbit)) {\r\n                _Pt->tm_mon = _Ans - 1;\r\n            }\r\n\r\n            break;\r\n\r\n        case 'M':\r\n            _State |= _Getint(_First, _Last, 0, 59, _Pt->tm_min, _Ctype_fac);\r\n            break;\r\n\r\n        case 'n':\r\n        case 't':\r\n            _First = _Getfmt(_First, _Last, _Iosbase, _State, _Pt, \" \");\r\n            break;\r\n\r\n        case 'p':\r\n            _Ans = _Getloctxt(_First, _Last, 0, \":AM:am:PM:pm\", _Case_sensitive::_Nope);\r\n            if (_Ans < 0) {\r\n                _State |= ios_base::failbit;\r\n            } else if (1 < _Ans) {\r\n                _Pt->tm_hour += 12;\r\n            }\r\n\r\n            break;\r\n\r\n        case 'r':\r\n            _First = _Getfmt(_First, _Last, _Iosbase, _State, _Pt, \"%I : %M : %S %p\");\r\n            break;\r\n\r\n        case 'R':\r\n            _First = _Getfmt(_First, _Last, _Iosbase, _State, _Pt, \"%H : %M\");\r\n            break;\r\n\r\n        case 'S':\r\n            _State |= _Getint(_First, _Last, 0, 60, _Pt->tm_sec, _Ctype_fac);\r\n            break;\r\n\r\n        case 'T':\r\n        case 'X':\r\n            _First = _Getfmt(_First, _Last, _Iosbase, _State, _Pt, \"%H : %M : %S\");\r\n            break;\r\n\r\n        case 'U':\r\n            _State |= _Getint(_First, _Last, 0, 53, _Pt->tm_yday, _Ctype_fac);\r\n            break;\r\n\r\n        case 'w':\r\n            _State |= _Getint(_First, _Last, 0, 6, _Pt->tm_wday, _Ctype_fac);\r\n            break;\r\n\r\n        case 'W':\r\n            _State |= _Getint(_First, _Last, 0, 53, _Pt->tm_yday, _Ctype_fac);\r\n            break;\r\n\r\n        case 'x':\r\n            _First = _Getfmt(_First, _Last, _Iosbase, _State, _Pt, \"%d / %m / %y\");\r\n            break;\r\n\r\n        case 'y':\r\n            _State |= _Getint(_First, _Last, 0, 99, _Ans, _Ctype_fac);\r\n            if (!(_State & ios_base::failbit)) {\r\n                if (_Ans < 69) {\r\n                    // CodeQL [SM03231] This is parsing tm_year (years since 1900); leap years are irrelevant.\r\n                    _Pt->tm_year = _Ans + 100; // [00, 68] parsed as [2000, 2068]\r\n                } else {\r\n                    // CodeQL [SM03231] This is parsing tm_year (years since 1900); leap years are irrelevant.\r\n                    _Pt->tm_year = _Ans; // [69, 99] parsed as [1969, 1999]\r\n                }\r\n            }\r\n\r\n            break;\r\n\r\n        case 'Y':\r\n            _State |= _Getint(_First, _Last, 0, 9999, _Ans, _Ctype_fac);\r\n            if (!(_State & ios_base::failbit)) {\r\n                // CodeQL [SM03231] This is parsing tm_year (years since 1900); leap years are irrelevant.\r\n                _Pt->tm_year = _Ans - 1900; // parsed literally\r\n            }\r\n            break;\r\n\r\n        default:\r\n            _State |= ios_base::failbit; // unknown specifier\r\n            break;\r\n        }\r\n\r\n        if (_First == _Last) {\r\n            _State |= ios_base::eofbit;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    _InIt __CLR_OR_THIS_CALL _Getfmt(_InIt _First, _InIt _Last, ios_base& _Iosbase, ios_base::iostate& _State, tm* _Pt,\r\n        const char* _Fmtfirst) const { // get formatted time for format NTBS\r\n        const _Ctype& _Ctype_fac = _STD use_facet<_Ctype>(_Iosbase.getloc());\r\n\r\n        for (; *_Fmtfirst != '\\0'; ++_Fmtfirst) {\r\n            if (_First == _Last) {\r\n                _State |= ios_base::failbit;\r\n                break;\r\n            } else if (*_Fmtfirst == '%') {\r\n                _First = do_get(_First, _Last, _Iosbase, _State, _Pt,\r\n                    *++_Fmtfirst); // convert a single field\r\n            } else if (*_Fmtfirst == ' ') {\r\n                while (_First != _Last && _Ctype_fac.is(_Ctype::space, *_First)) {\r\n                    ++_First;\r\n                }\r\n            } else if (_Ctype_fac.narrow(*_First) != *_Fmtfirst) { // bad literal match\r\n                _State |= ios_base::failbit;\r\n                break;\r\n            } else {\r\n                ++_First;\r\n            }\r\n        }\r\n\r\n        if (_First == _Last) {\r\n            _State |= ios_base::eofbit;\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\nprivate:\r\n    ios_base::iostate __CLRCALL_OR_CDECL _Getint(_InIt& _First, _InIt& _Last, int _Lo, int _Hi, int& _Val,\r\n        const _Ctype& _Ctype_fac) const { // get integer in range [_Lo, _Hi] from [_First, _Last)\r\n        // TRANSITION, ABI\r\n        int _Digits_read;\r\n        return _Getint_v2(_First, _Last, _Lo, _Hi, _Val, _Digits_read, _Ctype_fac);\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Tidy() noexcept { // free all storage\r\n        _CSTD free(const_cast<_Elem*>(_Days));\r\n        _CSTD free(const_cast<_Elem*>(_Months));\r\n        _CSTD free(const_cast<_Elem*>(_Ampm));\r\n    }\r\n\r\n    const _Elem* _Days; // \":Sun:Sunday:Mon:Monday...\" for example\r\n    const _Elem* _Months; // \"Jan:January:Feb:February...\" for example\r\n    const _Elem* _Ampm; // \":AM:am:PM:pm\"\r\n    dateorder _Dateorder;\r\n    _Locinfo::_Cvtvec _Cvt; // conversion information\r\n};\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdllimport-static-field-def\"\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _Elem, class _InIt>\r\n__PURE_APPDOMAIN_GLOBAL locale::id time_get<_Elem, _InIt>::id;\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n\r\n_EXPORT_STD template <class _Elem, class _InIt = istreambuf_iterator<_Elem, char_traits<_Elem>>>\r\nclass time_get_byname : public time_get<_Elem, _InIt> { // time_get for named locale\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    explicit time_get_byname(const char* _Locname, size_t _Refs = 0)\r\n        : time_get<_Elem, _InIt>(_Locname, _Refs) {} // construct for named locale\r\n\r\n    explicit time_get_byname(const string& _Str, size_t _Refs = 0)\r\n        : time_get<_Elem, _InIt>(_Locinfo(_Str.c_str()), _Refs) {} // construct for named locale\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~time_get_byname() noexcept override {}\r\n};\r\n\r\n// C23 7.29.3.5 \"The strftime function\"/3\r\n_INLINE_VAR constexpr char _Valid_strftime_specifiers[] = {'a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'F', 'g', 'G',\r\n    'h', 'H', 'I', 'j', 'm', 'M', 'n', 'p', 'r', 'R', 'S', 't', 'T', 'u', 'U', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z',\r\n    'Z'};\r\n\r\n_NODISCARD constexpr bool _Is_valid_strftime_specifier(const char _Specifier) {\r\n    for (const auto& _Valid_specifier : _Valid_strftime_specifiers) {\r\n        if (_Specifier == _Valid_specifier) {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\n_NODISCARD constexpr bool _Is_valid_strftime_tm_sec(const tm* const _Pt) noexcept {\r\n    // seconds after the minute - [0, 60] including leap second\r\n    return _Pt->tm_sec >= 0 && _Pt->tm_sec <= 60;\r\n}\r\n\r\n_NODISCARD constexpr bool _Is_valid_strftime_tm_min(const tm* const _Pt) noexcept {\r\n    // minutes after the hour - [0, 59]\r\n    return _Pt->tm_min >= 0 && _Pt->tm_min <= 59;\r\n}\r\n\r\n_NODISCARD constexpr bool _Is_valid_strftime_tm_hour(const tm* const _Pt) noexcept {\r\n    // hours since midnight - [0, 23]\r\n    return _Pt->tm_hour >= 0 && _Pt->tm_hour <= 23;\r\n}\r\n\r\n_NODISCARD constexpr bool _Is_valid_strftime_tm_mday(const tm* const _Pt) noexcept {\r\n    // day of the month - [1, 31]\r\n    return _Pt->tm_mday >= 1 && _Pt->tm_mday <= 31;\r\n}\r\n\r\n_NODISCARD constexpr bool _Is_valid_strftime_tm_mon(const tm* const _Pt) noexcept {\r\n    // months since January - [0, 11]\r\n    return _Pt->tm_mon >= 0 && _Pt->tm_mon <= 11;\r\n}\r\n\r\n_NODISCARD constexpr bool _Is_valid_strftime_tm_year(const tm* const _Pt) noexcept {\r\n    // years since 1900 - UCRT max range is up until 8099\r\n    return _Pt->tm_year >= -1900 && _Pt->tm_year <= 8099;\r\n}\r\n\r\n_NODISCARD constexpr bool _Is_valid_strftime_tm_wday(const tm* const _Pt) noexcept {\r\n    // days since Sunday - [0, 6]\r\n    return _Pt->tm_wday >= 0 && _Pt->tm_wday <= 6;\r\n}\r\n\r\n_NODISCARD constexpr bool _Is_valid_strftime_tm_yday(const tm* const _Pt) noexcept {\r\n    // days since January 1 - [0, 365]\r\n    return _Pt->tm_yday >= 0 && _Pt->tm_yday <= 365;\r\n}\r\n\r\n_NODISCARD constexpr bool _Is_valid_strftime_tm_data(const char _Specifier, const tm* const _Pt) noexcept {\r\n    if (!_Pt) {\r\n        return false;\r\n    }\r\n\r\n    switch (_Specifier) {\r\n    case 'S':\r\n        return _Is_valid_strftime_tm_sec(_Pt);\r\n    case 'M':\r\n        return _Is_valid_strftime_tm_min(_Pt);\r\n    case 'H':\r\n    case 'I':\r\n    case 'p':\r\n        return _Is_valid_strftime_tm_hour(_Pt);\r\n    case 'd':\r\n    case 'e':\r\n        return _Is_valid_strftime_tm_mday(_Pt);\r\n    case 'b':\r\n    case 'B':\r\n    case 'm':\r\n    case 'h':\r\n        return _Is_valid_strftime_tm_mon(_Pt);\r\n    case 'C':\r\n    case 'y':\r\n    case 'Y':\r\n        return _Is_valid_strftime_tm_year(_Pt);\r\n    case 'j':\r\n        return _Is_valid_strftime_tm_yday(_Pt);\r\n    case 'a':\r\n    case 'A':\r\n    case 'u':\r\n    case 'w':\r\n        return _Is_valid_strftime_tm_wday(_Pt);\r\n    case 'U': // C23 7.29.3.5 \"The strftime function\"/3 says that %U and %W depend on tm_year,\r\n    case 'W': // but the UCRT neither uses nor validates it.\r\n        return _Is_valid_strftime_tm_wday(_Pt) && _Is_valid_strftime_tm_yday(_Pt);\r\n    case 'R':\r\n        return _Is_valid_strftime_tm_hour(_Pt) && _Is_valid_strftime_tm_min(_Pt);\r\n    case 'D':\r\n    case 'x':\r\n    case 'F':\r\n        return _Is_valid_strftime_tm_year(_Pt) && _Is_valid_strftime_tm_mon(_Pt) && _Is_valid_strftime_tm_mday(_Pt);\r\n    case 'g':\r\n    case 'G':\r\n        return _Is_valid_strftime_tm_year(_Pt) && _Is_valid_strftime_tm_wday(_Pt) && _Is_valid_strftime_tm_yday(_Pt);\r\n    case 'r':\r\n    case 'X':\r\n    case 'T':\r\n        return _Is_valid_strftime_tm_hour(_Pt) && _Is_valid_strftime_tm_min(_Pt) && _Is_valid_strftime_tm_sec(_Pt);\r\n    case 'c':\r\n        return _Is_valid_strftime_tm_wday(_Pt) && _Is_valid_strftime_tm_mon(_Pt) && _Is_valid_strftime_tm_mday(_Pt)\r\n            && _Is_valid_strftime_tm_hour(_Pt) && _Is_valid_strftime_tm_min(_Pt) && _Is_valid_strftime_tm_sec(_Pt)\r\n            && _Is_valid_strftime_tm_year(_Pt);\r\n    case 'V': // C23 7.29.3.5 \"The strftime function\"/3 says that %V depends on tm_year, tm_wday, and tm_yday.\r\n              // The UCRT uses them without validating them.\r\n        return true;\r\n    case 'z': // C23 7.29.3.5 \"The strftime function\"/3 says that %z and %Z depend on tm_isdst.\r\n    case 'Z': // The UCRT treats it as a boolean value, so there's no need for validation.\r\n        return true;\r\n    case 'n': // newline\r\n    case 't': // tab\r\n        return true;\r\n    default:\r\n        // We should have handled %% and called _Is_valid_strftime_specifier() before calling this function.\r\n        _STL_INTERNAL_CHECK(false);\r\n        return false;\r\n    }\r\n}\r\n\r\n_EXPORT_STD extern \"C++\" template <class _Elem, class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem>>>\r\nclass time_put : public locale::facet { // facet for converting encoded times to text\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    using char_type = _Elem;\r\n    using iter_type = _OutIt;\r\n    using _Ctype    = ctype<_Elem>;\r\n\r\n    _OutIt __CLR_OR_THIS_CALL put(_OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, const tm* _Pt, const _Elem* _Fmtfirst,\r\n        const _Elem* _Fmtlast) const { // put formatted time from _Pt to _Dest for [_Fmtfirst, _Fmtlast)\r\n        const _Ctype& _Ctype_fac = _STD use_facet<_Ctype>(_Iosbase.getloc());\r\n\r\n        for (; _Fmtfirst != _Fmtlast; ++_Fmtfirst) {\r\n            if (_Ctype_fac.narrow(*_Fmtfirst) != '%') {\r\n                *_Dest++ = *_Fmtfirst; // copy literal element\r\n            } else if (++_Fmtfirst == _Fmtlast) { // treat trailing % as %%\r\n                *_Dest++ = _Fmtfirst[-1];\r\n                break;\r\n            } else { // get specifier after %\r\n                char _Specifier = _Ctype_fac.narrow(*_Fmtfirst);\r\n                char _Modifier  = '\\0';\r\n                _Elem _Percent  = _Fmtfirst[-1];\r\n\r\n                if (_Specifier == 'E' || _Specifier == 'O' || _Specifier == 'Q' || _Specifier == '#') {\r\n                    if (++_Fmtfirst == _Fmtlast) { // no specifier, copy %[EOQ#] as literal elements\r\n                        *_Dest++ = _Percent;\r\n                        *_Dest++ = _Specifier;\r\n                        break;\r\n                    }\r\n\r\n                    // save both qualifier and specifier\r\n                    _Modifier  = _Specifier;\r\n                    _Specifier = _Ctype_fac.narrow(*_Fmtfirst);\r\n                }\r\n\r\n                if (_Specifier == '%' && _Modifier == '\\0') {\r\n                    // if the specifier is percent and no modifier is set, just append it\r\n                    *_Dest++ = _Percent;\r\n                } else if (!_Is_valid_strftime_specifier(_Specifier)) {\r\n                    // no valid specifier, directly copy as literal elements\r\n                    *_Dest++ = _Percent;\r\n                    if (_Modifier != '\\0') {\r\n                        *_Dest++ = _Modifier;\r\n                    }\r\n                    *_Dest++ = _Specifier;\r\n                } else {\r\n                    if (_Is_valid_strftime_tm_data(_Specifier, _Pt)) {\r\n                        _Dest = do_put(_Dest, _Iosbase, _Fill, _Pt, _Specifier, _Modifier); // convert a single field\r\n                    } else {\r\n                        *_Dest++ = _Elem('?');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        return _Dest;\r\n    }\r\n\r\n    _OutIt __CLR_OR_THIS_CALL put(_OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, const tm* _Pt, char _Specifier,\r\n        char _Modifier = '\\0') const { // put formatted time from _Pt to _Dest for _Specifier/_Modifier\r\n        return do_put(_Dest, _Iosbase, _Fill, _Pt, _Specifier, _Modifier);\r\n    }\r\n\r\n    __PURE_APPDOMAIN_GLOBAL static locale::id id; // unique facet id\r\n\r\n    explicit __CLR_OR_THIS_CALL time_put(size_t _Refs = 0) : locale::facet(_Refs) { // construct from current locale\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL time_put(const _Locinfo& _Lobj, size_t _Refs = 0) : locale::facet(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t __CLRCALL_OR_CDECL _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new time_put<_Elem, _OutIt>(_Locinfo(_Ploc->_C_str()));\r\n        }\r\n\r\n        return _X_TIME;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~time_put() noexcept override {}\r\n\r\n    void __CLR_OR_THIS_CALL _Init(const _Locinfo& _Lobj) { // initialize from _Lobj\r\n        _Tnames = _Lobj._Gettnames();\r\n    }\r\n\r\n    virtual _OutIt __CLR_OR_THIS_CALL do_put(_OutIt _Dest, ios_base& _Iosbase, _Elem, const tm* _Pt, char _Specifier,\r\n        char _Modifier = '\\0') const { // put formatted time from _Pt to _Dest for [_Fmtfirst, _Fmtlast)\r\n        char _Fmt[5] = \"!%x\\0\"; // '!' for nonzero count, null for modifier\r\n        size_t _Count;\r\n        size_t _Num;\r\n        string _Str;\r\n\r\n        if (_Modifier == '\\0') {\r\n            _Fmt[2] = _Specifier;\r\n        } else { // add both modifier and specifier\r\n            _Fmt[2] = _Modifier;\r\n            _Fmt[3] = _Specifier;\r\n        }\r\n\r\n        int& _Errno_ref      = errno; // Nonzero cost, pay it once\r\n        const int _Old_errno = _Errno_ref;\r\n\r\n        for (_Num = 16;; _Num *= 2) { // convert into ever larger string buffer until success\r\n            _Str.append(_Num, '\\0');\r\n            _Count = _Strftime(&_Str[0], _Str.size(), _Fmt, _Pt, _Tnames._Getptr());\r\n            if (0 < _Count) {\r\n                break;\r\n            } else if (_Errno_ref == EINVAL) {\r\n                _Iosbase.setstate(ios_base::badbit);\r\n                return _Dest;\r\n            }\r\n        }\r\n\r\n        _Errno_ref = _Old_errno;\r\n        return _STD copy(&_Str[1], &_Str[_Count], _Dest);\r\n    }\r\n\r\nprivate:\r\n    _Locinfo::_Timevec _Tnames; // locale-specific stuff for _Strftime\r\n};\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdllimport-static-field-def\"\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _Elem, class _OutIt>\r\n__PURE_APPDOMAIN_GLOBAL locale::id time_put<_Elem, _OutIt>::id;\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n\r\nextern \"C++\" template <class _OutIt>\r\nclass time_put<wchar_t, _OutIt> : public locale::facet { // facet for converting encoded times to wchar_t text\r\npublic:\r\n    using _Elem     = wchar_t;\r\n    using char_type = _Elem;\r\n    using iter_type = _OutIt;\r\n    using _Ctype    = ctype<_Elem>;\r\n\r\n    _OutIt __CLR_OR_THIS_CALL put(_OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, const tm* _Pt, const _Elem* _Fmtfirst,\r\n        const _Elem* _Fmtlast) const { // put formatted time from _Pt to _Dest for [_Fmtfirst, _Fmtlast)\r\n        const _Ctype& _Ctype_fac = _STD use_facet<_Ctype>(_Iosbase.getloc());\r\n\r\n        for (; _Fmtfirst != _Fmtlast; ++_Fmtfirst) {\r\n            if (_Ctype_fac.narrow(*_Fmtfirst) != '%') {\r\n                *_Dest++ = *_Fmtfirst; // copy literal element\r\n            } else if (++_Fmtfirst == _Fmtlast) { // treat trailing % as %%\r\n                *_Dest++ = _Fmtfirst[-1];\r\n                break;\r\n            } else { // get specifier after %\r\n                _Elem _Raw      = *_Fmtfirst;\r\n                char _Specifier = _Ctype_fac.narrow(_Raw);\r\n                char _Modifier  = '\\0';\r\n                _Elem _Percent  = _Fmtfirst[-1];\r\n\r\n                if (_Specifier == 'E' || _Specifier == 'O' || _Specifier == 'Q' || _Specifier == '#') {\r\n                    if (++_Fmtfirst == _Fmtlast) { // no specifier, copy %[EOQ#] as literal elements\r\n                        *_Dest++ = _Percent;\r\n                        *_Dest++ = _Raw;\r\n                        break;\r\n                    }\r\n\r\n                    // save both qualifier and specifier\r\n                    _Modifier  = _Specifier;\r\n                    _Specifier = _Ctype_fac.narrow(*_Fmtfirst);\r\n                }\r\n\r\n                if (_Specifier == '%' && _Modifier == '\\0') {\r\n                    // if the specifier is percent and no modifier is set, just append it\r\n                    *_Dest++ = _Percent;\r\n                } else if (!_Is_valid_strftime_specifier(_Specifier)) {\r\n                    // no valid specifier, directly copy as literal elements\r\n                    *_Dest++ = _Percent;\r\n                    if (_Modifier != '\\0') {\r\n                        *_Dest++ = _Raw;\r\n                    }\r\n                    *_Dest++ = *_Fmtfirst;\r\n                } else {\r\n                    if (_Is_valid_strftime_tm_data(_Specifier, _Pt)) {\r\n                        _Dest = do_put(_Dest, _Iosbase, _Fill, _Pt, _Specifier, _Modifier); // convert a single field\r\n                    } else {\r\n                        *_Dest++ = _Elem('?');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        return _Dest;\r\n    }\r\n\r\n    _OutIt __CLR_OR_THIS_CALL put(_OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, const tm* _Pt, char _Specifier,\r\n        char _Modifier = '\\0') const { // put formatted time from _Pt to _Dest for _Specifier/_Modifier\r\n        return do_put(_Dest, _Iosbase, _Fill, _Pt, _Specifier, _Modifier);\r\n    }\r\n\r\n    __PURE_APPDOMAIN_GLOBAL static locale::id id; // unique facet id\r\n\r\n    explicit __CLR_OR_THIS_CALL time_put(size_t _Refs = 0) : locale::facet(_Refs) { // construct from current locale\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL time_put(const _Locinfo& _Lobj, size_t _Refs = 0) : locale::facet(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t __CLRCALL_OR_CDECL _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new time_put<_Elem, _OutIt>(_Locinfo(_Ploc->_C_str()));\r\n        }\r\n\r\n        return _X_TIME;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~time_put() noexcept override {}\r\n\r\n    __CLR_OR_THIS_CALL time_put(const char* _Locname, size_t _Refs = 0) : locale::facet(_Refs) {\r\n        _BEGIN_LOCINFO(_Lobj(_Locname))\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Init(const _Locinfo& _Lobj) { // initialize from _Lobj\r\n        _Tnames = _Lobj._W_Gettnames();\r\n    }\r\n\r\n    virtual _OutIt __CLR_OR_THIS_CALL do_put(_OutIt _Dest, ios_base& _Iosbase, _Elem, const tm* _Pt, char _Specifier,\r\n        char _Modifier = '\\0') const { // put formatted time from _Pt to _Dest for [_Fmtfirst, _Fmtlast)\r\n        wchar_t _Fmt[5] = L\"!%x\\0\"; // ! for nonzero count, null for modifier\r\n        size_t _Count;\r\n        size_t _Num;\r\n        wstring _Str;\r\n\r\n        if (_Modifier == '\\0') {\r\n            _Fmt[2] = static_cast<_Elem>(_Specifier); // conversion rule unspecified\r\n        } else { // add both modifier and specifier\r\n            _Fmt[2] = static_cast<_Elem>(_Modifier);\r\n            _Fmt[3] = static_cast<_Elem>(_Specifier);\r\n        }\r\n\r\n        int& _Errno_ref      = errno; // Nonzero cost, pay it once\r\n        const int _Old_errno = _Errno_ref;\r\n\r\n        for (_Num = 16;; _Num *= 2) { // convert into ever larger string buffer until success\r\n            _Str.append(_Num, '\\0');\r\n            _Count = _Wcsftime(&_Str[0], _Str.size(), _Fmt, _Pt, _Tnames._Getptr());\r\n            if (0 < _Count) {\r\n                break;\r\n            } else if (_Errno_ref == EINVAL) {\r\n                _Iosbase.setstate(ios_base::badbit);\r\n                return _Dest;\r\n            }\r\n        }\r\n\r\n        _Errno_ref = _Old_errno;\r\n        return _STD copy(&_Str[1], &_Str[_Count], _Dest);\r\n    }\r\n\r\nprivate:\r\n    _Locinfo::_Timevec _Tnames; // locale-specific stuff for _Wcsftime\r\n};\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdllimport-static-field-def\"\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _OutIt>\r\n__PURE_APPDOMAIN_GLOBAL locale::id time_put<wchar_t, _OutIt>::id;\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n\r\n#if defined(_CRTBLD)\r\n\r\nextern \"C++\" template <class _OutIt>\r\nclass time_put<unsigned short, _OutIt>\r\n    : public locale::facet { // facet for converting encoded times to unsigned short text\r\npublic:\r\n    using _Elem     = unsigned short;\r\n    using char_type = _Elem;\r\n    using iter_type = _OutIt;\r\n    using _Ctype    = ctype<_Elem>;\r\n\r\n    _OutIt __CLR_OR_THIS_CALL put(_OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, const tm* _Pt, const _Elem* _Fmtfirst,\r\n        const _Elem* _Fmtlast) const { // put formatted time from _Pt to _Dest for [_Fmtfirst, _Fmtlast)\r\n        const _Ctype& _Ctype_fac = _STD use_facet<_Ctype>(_Iosbase.getloc());\r\n\r\n        for (; _Fmtfirst != _Fmtlast; ++_Fmtfirst) {\r\n            if (_Ctype_fac.narrow(*_Fmtfirst) != '%') {\r\n                *_Dest++ = *_Fmtfirst; // copy literal element\r\n            } else if (++_Fmtfirst == _Fmtlast) { // treat trailing % as %%\r\n                *_Dest++ = _Fmtfirst[-1];\r\n                break;\r\n            } else { // get specifier after %\r\n                _Elem _Raw      = *_Fmtfirst;\r\n                char _Specifier = _Ctype_fac.narrow(_Raw);\r\n                char _Modifier  = '\\0';\r\n                _Elem _Percent  = _Fmtfirst[-1];\r\n\r\n                if (_Specifier == 'E' || _Specifier == 'O' || _Specifier == 'Q' || _Specifier == '#') {\r\n                    if (++_Fmtfirst == _Fmtlast) { // no specifier, copy %[EOQ#] as literal elements\r\n                        *_Dest++ = _Percent;\r\n                        *_Dest++ = _Raw;\r\n                        break;\r\n                    }\r\n\r\n                    // save both qualifier and specifier\r\n                    _Modifier  = _Specifier;\r\n                    _Specifier = _Ctype_fac.narrow(*_Fmtfirst);\r\n                }\r\n\r\n                if (_Specifier == '%' && _Modifier == '\\0') {\r\n                    // if the specifier is percent and no modifier is set, just append it\r\n                    *_Dest++ = _Percent;\r\n                } else if (!_Is_valid_strftime_specifier(_Specifier)) {\r\n                    // no valid specifier, directly copy as literal elements\r\n                    *_Dest++ = _Percent;\r\n                    if (_Modifier != '\\0') {\r\n                        *_Dest++ = _Raw;\r\n                    }\r\n                    *_Dest++ = *_Fmtfirst;\r\n                } else {\r\n                    if (_Is_valid_strftime_tm_data(_Specifier, _Pt)) {\r\n                        _Dest = do_put(_Dest, _Iosbase, _Fill, _Pt, _Specifier, _Modifier); // convert a single field\r\n                    } else {\r\n                        *_Dest++ = _Elem('?');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        return _Dest;\r\n    }\r\n\r\n    _OutIt __CLR_OR_THIS_CALL put(_OutIt _Dest, ios_base& _Iosbase, _Elem _Fill, const tm* _Pt, char _Specifier,\r\n        char _Modifier = '\\0') const { // put formatted time from _Pt to _Dest for _Specifier/_Modifier\r\n        return do_put(_Dest, _Iosbase, _Fill, _Pt, _Specifier, _Modifier);\r\n    }\r\n\r\n    __PURE_APPDOMAIN_GLOBAL static locale::id id; // unique facet id\r\n\r\n    explicit __CLR_OR_THIS_CALL time_put(size_t _Refs = 0) : locale::facet(_Refs) { // construct from current locale\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL time_put(const _Locinfo& _Lobj, size_t _Refs = 0) : locale::facet(_Refs) {\r\n        _Init(_Lobj);\r\n    }\r\n\r\n    static size_t __CLRCALL_OR_CDECL _Getcat(const locale::facet** _Ppf = nullptr, const locale* _Ploc = nullptr) {\r\n        // return locale category mask and construct standard facet\r\n        if (_Ppf && !*_Ppf) {\r\n            *_Ppf = new time_put<_Elem, _OutIt>(_Locinfo(_Ploc->_C_str()));\r\n        }\r\n\r\n        return _X_TIME;\r\n    }\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~time_put() noexcept override {}\r\n\r\n    __CLR_OR_THIS_CALL time_put(const char* _Locname, size_t _Refs = 0) : locale::facet(_Refs) {\r\n        _BEGIN_LOCINFO(_Lobj(_Locname))\r\n        _Init(_Lobj);\r\n        _END_LOCINFO()\r\n    }\r\n\r\n    void __CLR_OR_THIS_CALL _Init(const _Locinfo& _Lobj) { // initialize from _Lobj\r\n        _Tnames = _Lobj._W_Gettnames();\r\n    }\r\n\r\n    virtual _OutIt __CLR_OR_THIS_CALL do_put(_OutIt _Dest, ios_base& _Iosbase, _Elem, const tm* _Pt, char _Specifier,\r\n        char _Modifier = '\\0') const { // put formatted time from _Pt to _Dest for [_Fmtfirst, _Fmtlast)\r\n        wchar_t _Fmt[5] = L\"!%x\\0\"; // ! for nonzero count, null for modifier\r\n        size_t _Count;\r\n        size_t _Num;\r\n        wstring _Str;\r\n\r\n        if (_Modifier == '\\0') {\r\n            _Fmt[2] = static_cast<_Elem>(_Specifier); // conversion rule unspecified\r\n        } else { // add both modifier and specifier\r\n            _Fmt[2] = static_cast<_Elem>(_Modifier);\r\n            _Fmt[3] = static_cast<_Elem>(_Specifier);\r\n        }\r\n\r\n        int& _Errno_ref      = errno; // Nonzero cost, pay it once\r\n        const int _Old_errno = _Errno_ref;\r\n\r\n        for (_Num = 16;; _Num *= 2) { // convert into ever larger string buffer until success\r\n            _Str.append(_Num, '\\0');\r\n            _Count = _Wcsftime(&_Str[0], _Str.size(), _Fmt, _Pt, _Tnames._Getptr());\r\n            if (0 < _Count) {\r\n                break;\r\n            } else if (_Errno_ref == EINVAL) {\r\n                _Iosbase.setstate(ios_base::badbit);\r\n                return _Dest;\r\n            }\r\n        }\r\n\r\n        _Errno_ref = _Old_errno;\r\n        return _STD copy(&_Str[1], &_Str[_Count], _Dest);\r\n    }\r\n\r\nprivate:\r\n    _Locinfo::_Timevec _Tnames; // locale-specific stuff for _Wcsftime\r\n};\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdllimport-static-field-def\"\r\n#endif // defined(__clang__)\r\n\r\ntemplate <class _OutIt>\r\n__PURE_APPDOMAIN_GLOBAL locale::id time_put<unsigned short, _OutIt>::id;\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n#endif // defined(_CRTBLD)\r\n\r\n_EXPORT_STD template <class _Elem, class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem>>>\r\nclass time_put_byname : public time_put<_Elem, _OutIt> { // time_put for named locale\r\npublic:\r\n    static_assert(!_ENFORCE_FACET_SPECIALIZATIONS || _Is_any_of_v<_Elem, char, wchar_t>, _FACET_SPECIALIZATION_MESSAGE);\r\n\r\n    explicit time_put_byname(const char* _Locname, size_t _Refs = 0)\r\n        : time_put<_Elem, _OutIt>(_Locname, _Refs) {} // construct for named locale\r\n\r\n    explicit time_put_byname(const string& _Str, size_t _Refs = 0)\r\n        : time_put<_Elem, _OutIt>(_Str.c_str(), _Refs) {} // construct for named locale\r\n\r\nprotected:\r\n    __CLR_OR_THIS_CALL ~time_put_byname() noexcept override {}\r\n};\r\n\r\n#if defined(_DLL_CPPLIB)\r\n\r\n#if !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\ntemplate class _CRTIMP2_PURE_IMPORT time_get<char, istreambuf_iterator<char, char_traits<char>>>;\r\ntemplate class _CRTIMP2_PURE_IMPORT time_put<char, ostreambuf_iterator<char, char_traits<char>>>;\r\ntemplate _CRTIMP2_PURE void __CLR_OR_THIS_CALL time_get<char, istreambuf_iterator<char, char_traits<char>>>::_Getvals(\r\n    wchar_t, const _Locinfo&);\r\n\r\ntemplate class _CRTIMP2_PURE_IMPORT time_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t>>>;\r\ntemplate class _CRTIMP2_PURE_IMPORT time_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t>>>;\r\ntemplate _CRTIMP2_PURE void __CLR_OR_THIS_CALL\r\n    time_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t>>>::_Getvals(wchar_t, const _Locinfo&);\r\n#endif // !defined(_CRTBLD) || defined(__FORCE_INSTANCE)\r\n\r\n#ifdef __FORCE_INSTANCE\r\ntemplate class _CRTIMP2_PURE_IMPORT\r\n    time_get<unsigned short, istreambuf_iterator<unsigned short, char_traits<unsigned short>>>;\r\ntemplate class _CRTIMP2_PURE_IMPORT\r\n    time_put<unsigned short, ostreambuf_iterator<unsigned short, char_traits<unsigned short>>>;\r\ntemplate _CRTIMP2_PURE void __CLR_OR_THIS_CALL\r\n    time_get<unsigned short, istreambuf_iterator<unsigned short, char_traits<unsigned short>>>::_Getvals(\r\n        wchar_t, const _Locinfo&);\r\n#endif // defined(__FORCE_INSTANCE)\r\n#endif // defined(_DLL_CPPLIB)\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XLOCTIME_\r\n"
  },
  {
    "path": "stl/inc/xmemory",
    "content": "// xmemory internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XMEMORY_\r\n#define _XMEMORY_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <cstdint>\r\n#include <cstdlib>\r\n#include <limits> // TRANSITION, see GH-4634: Lots of user code assumes that <xmemory> drags in <limits>\r\n#include <new>\r\n#include <xatomic.h>\r\n#include <xutility>\r\n\r\n#if _HAS_CXX20\r\n#include <tuple>\r\n#endif // _HAS_CXX20\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef no_specializations\r\n\r\n#if _VECTORIZED_REMOVE\r\nextern \"C\" {\r\nvoid* __stdcall __std_remove_1(void* _First, void* _Last, uint8_t _Val) noexcept;\r\nvoid* __stdcall __std_remove_2(void* _First, void* _Last, uint16_t _Val) noexcept;\r\nvoid* __stdcall __std_remove_4(void* _First, void* _Last, uint32_t _Val) noexcept;\r\nvoid* __stdcall __std_remove_8(void* _First, void* _Last, uint64_t _Val) noexcept;\r\n} // extern \"C\"\r\n\r\n_STD_BEGIN\r\ntemplate <class _Ty, class _TVal>\r\n_Ty* _Remove_vectorized(_Ty* const _First, _Ty* const _Last, const _TVal _Val) noexcept {\r\n    if constexpr (sizeof(_Ty) == 1) {\r\n        return reinterpret_cast<_Ty*>(::__std_remove_1(_First, _Last, _STD _Find_arg_cast<uint8_t>(_Val)));\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        return reinterpret_cast<_Ty*>(::__std_remove_2(_First, _Last, _STD _Find_arg_cast<uint16_t>(_Val)));\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        return reinterpret_cast<_Ty*>(::__std_remove_4(_First, _Last, _STD _Find_arg_cast<uint32_t>(_Val)));\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        return reinterpret_cast<_Ty*>(::__std_remove_8(_First, _Last, _STD _Find_arg_cast<uint64_t>(_Val)));\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n_STD_END\r\n\r\n#endif // ^^^ _VECTORIZED_REMOVE ^^^\r\n\r\n_STD_BEGIN\r\ntemplate <class _Ptrty>\r\n_NODISCARD constexpr auto _Unfancy(_Ptrty _Ptr) noexcept { // converts from a fancy pointer to a plain pointer\r\n    return _STD addressof(*_Ptr);\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD constexpr _Ty* _Unfancy(_Ty* _Ptr) noexcept { // do nothing for plain pointers\r\n    return _Ptr;\r\n}\r\n\r\ntemplate <class _Ptrty>\r\nconstexpr auto _Unfancy_maybe_null(_Ptrty _Ptr) noexcept {\r\n    // converts from a (potentially null) fancy pointer to a plain pointer\r\n    return _Ptr ? _STD addressof(*_Ptr) : nullptr;\r\n}\r\n\r\ntemplate <class _Ty>\r\nconstexpr _Ty* _Unfancy_maybe_null(_Ty* _Ptr) noexcept { // do nothing for plain pointers\r\n    return _Ptr;\r\n}\r\n\r\ntemplate <class _Ty>\r\nstruct _NODISCARD _Tidy_guard { // class with destructor that calls _Tidy\r\n    _Ty* _Target;\r\n    _CONSTEXPR20 ~_Tidy_guard() {\r\n        if (_Target) {\r\n            _Target->_Tidy();\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _NODISCARD _Tidy_deallocate_guard { // class with destructor that calls _Tidy_deallocate\r\n    _Ty* _Target;\r\n    _CONSTEXPR20 ~_Tidy_deallocate_guard() {\r\n        if (_Target) {\r\n            _Target->_Tidy_deallocate();\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Keycmp, class _Lhs, class _Rhs>\r\nconstexpr bool _Nothrow_compare = noexcept(\r\n    static_cast<bool>(_STD declval<const _Keycmp&>()(_STD declval<const _Lhs&>(), _STD declval<const _Rhs&>())));\r\n\r\n[[noreturn]] inline void _Throw_bad_array_new_length() {\r\n    _THROW(bad_array_new_length{});\r\n}\r\n\r\ntemplate <size_t _Ty_size>\r\n_NODISCARD constexpr size_t _Get_size_of_n(const size_t _Count) {\r\n    constexpr bool _Overflow_is_possible = _Ty_size > 1;\r\n\r\n    if constexpr (_Overflow_is_possible) {\r\n        constexpr size_t _Max_possible = static_cast<size_t>(-1) / _Ty_size;\r\n        if (_Count > _Max_possible) {\r\n            _Throw_bad_array_new_length(); // multiply overflow\r\n        }\r\n    }\r\n\r\n    return _Count * _Ty_size;\r\n}\r\n\r\ntemplate <class _Ty>\r\nconstexpr size_t _New_alignof = (_STD max) (alignof(_Ty), __STDCPP_DEFAULT_NEW_ALIGNMENT__);\r\n\r\n#ifdef __clang__ // Clang and MSVC implement P0784R7 differently; see GH-1532\r\n#define _CLANG_CONSTEXPR20 _CONSTEXPR20\r\n#else // ^^^ Clang / Other vvv\r\n#define _CLANG_CONSTEXPR20\r\n#endif // ^^^ Other ^^^\r\n\r\nstruct _Default_allocate_traits {\r\n    __declspec(allocator) static _CLANG_CONSTEXPR20 void* _Allocate(const size_t _Bytes) {\r\n        return ::operator new(_Bytes);\r\n    }\r\n\r\n#ifdef __cpp_aligned_new\r\n    __declspec(allocator) static _CLANG_CONSTEXPR20 void* _Allocate_aligned(const size_t _Bytes, const size_t _Align) {\r\n#if defined(__clang__) && _HAS_CXX20 // Ditto, \"Clang and MSVC implement P0784R7 differently\"\r\n        if (_STD is_constant_evaluated()) {\r\n            return ::operator new(_Bytes);\r\n        } else\r\n#endif // ^^^ defined(__clang__) && _HAS_CXX20 ^^^\r\n        {\r\n            return ::operator new(_Bytes, align_val_t{_Align});\r\n        }\r\n    }\r\n#endif // defined(__cpp_aligned_new)\r\n};\r\n\r\n#undef _CLANG_CONSTEXPR20\r\n\r\nconstexpr bool _Is_pow_2(const size_t _Value) noexcept {\r\n    return _Value != 0 && (_Value & (_Value - 1)) == 0;\r\n}\r\n\r\n#if defined(_M_IX86) || defined(_M_X64)\r\n_INLINE_VAR constexpr size_t _Big_allocation_threshold = 4096;\r\n_INLINE_VAR constexpr size_t _Big_allocation_alignment = 32;\r\n\r\n// Big allocation alignment should at least match vector register alignment\r\n_STL_INTERNAL_STATIC_ASSERT(2 * sizeof(void*) <= _Big_allocation_alignment);\r\n\r\n// Big allocation alignment must be a power of two\r\n_STL_INTERNAL_STATIC_ASSERT(_Is_pow_2(_Big_allocation_alignment));\r\n\r\n#ifdef _DEBUG\r\n_INLINE_VAR constexpr size_t _Non_user_size = 2 * sizeof(void*) + _Big_allocation_alignment - 1;\r\n#else // ^^^ defined(_DEBUG) / !defined(_DEBUG) vvv\r\n_INLINE_VAR constexpr size_t _Non_user_size = sizeof(void*) + _Big_allocation_alignment - 1;\r\n#endif // ^^^ !defined(_DEBUG) ^^^\r\n\r\n#ifdef _WIN64\r\n_INLINE_VAR constexpr size_t _Big_allocation_sentinel = 0xFAFAFAFAFAFAFAFAULL;\r\n#else // ^^^ defined(_WIN64) / !defined(_WIN64) vvv\r\n_INLINE_VAR constexpr size_t _Big_allocation_sentinel = 0xFAFAFAFAUL;\r\n#endif // ^^^ !defined(_WIN64) ^^^\r\n\r\ntemplate <class _Traits>\r\n__declspec(allocator) void* _Allocate_manually_vector_aligned(const size_t _Bytes) {\r\n    // allocate _Bytes manually aligned to at least _Big_allocation_alignment\r\n    const size_t _Block_size = _Non_user_size + _Bytes;\r\n    if (_Block_size <= _Bytes) {\r\n        _Throw_bad_array_new_length(); // add overflow\r\n    }\r\n\r\n    const uintptr_t _Ptr_container = reinterpret_cast<uintptr_t>(_Traits::_Allocate(_Block_size));\r\n    _STL_VERIFY(_Ptr_container != 0, \"invalid argument\"); // validate even in release since we're doing p[-1]\r\n    void* const _Ptr = reinterpret_cast<void*>((_Ptr_container + _Non_user_size) & ~(_Big_allocation_alignment - 1));\r\n    static_cast<uintptr_t*>(_Ptr)[-1] = _Ptr_container;\r\n\r\n#ifdef _DEBUG\r\n    static_cast<uintptr_t*>(_Ptr)[-2] = _Big_allocation_sentinel;\r\n#endif // defined(_DEBUG)\r\n    return _Ptr;\r\n}\r\n\r\ninline void _Adjust_manually_vector_aligned(void*& _Ptr, size_t& _Bytes) {\r\n    // adjust parameters from _Allocate_manually_vector_aligned to pass to operator delete\r\n    _Bytes += _Non_user_size;\r\n\r\n    const uintptr_t* const _Ptr_user = static_cast<uintptr_t*>(_Ptr);\r\n    const uintptr_t _Ptr_container   = _Ptr_user[-1];\r\n\r\n    // If the following asserts, it likely means that we are performing\r\n    // an aligned delete on memory coming from an unaligned allocation.\r\n    _STL_ASSERT(_Ptr_user[-2] == _Big_allocation_sentinel, \"invalid argument\");\r\n\r\n    // Extra paranoia on aligned allocation/deallocation; ensure _Ptr_container is\r\n    // in range [_Min_back_shift, _Non_user_size]\r\n#ifdef _DEBUG\r\n    constexpr uintptr_t _Min_back_shift = 2 * sizeof(void*);\r\n#else // ^^^ defined(_DEBUG) / !defined(_DEBUG) vvv\r\n    constexpr uintptr_t _Min_back_shift = sizeof(void*);\r\n#endif // ^^^ !defined(_DEBUG) ^^^\r\n    const uintptr_t _Back_shift = reinterpret_cast<uintptr_t>(_Ptr) - _Ptr_container;\r\n    _STL_VERIFY(_Back_shift >= _Min_back_shift && _Back_shift <= _Non_user_size, \"invalid argument\");\r\n    _Ptr = reinterpret_cast<void*>(_Ptr_container);\r\n}\r\n#endif // defined(_M_IX86) || defined(_M_X64)\r\n\r\ntemplate <size_t _Align, class _Traits = _Default_allocate_traits>\r\n__declspec(allocator) _CONSTEXPR20 void* _Allocate(const size_t _Bytes) {\r\n    // allocate _Bytes\r\n    if (_Bytes == 0) {\r\n        return nullptr;\r\n    }\r\n\r\n#if _HAS_CXX20 // TRANSITION, GH-1532\r\n    if (_STD is_constant_evaluated()) {\r\n        return _Traits::_Allocate(_Bytes);\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n#ifdef __cpp_aligned_new\r\n    if constexpr (_Align > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n        size_t _Passed_align = _Align;\r\n#if defined(_M_IX86) || defined(_M_X64)\r\n        if (_Bytes >= _Big_allocation_threshold) {\r\n            // boost the alignment of big allocations to help autovectorization\r\n            _Passed_align = (_STD max) (_Align, _Big_allocation_alignment);\r\n        }\r\n#endif // defined(_M_IX86) || defined(_M_X64)\r\n        return _Traits::_Allocate_aligned(_Bytes, _Passed_align);\r\n    } else\r\n#endif // defined(__cpp_aligned_new)\r\n    {\r\n#if defined(_M_IX86) || defined(_M_X64)\r\n        if (_Bytes >= _Big_allocation_threshold) {\r\n            // boost the alignment of big allocations to help autovectorization\r\n            return _Allocate_manually_vector_aligned<_Traits>(_Bytes);\r\n        }\r\n#endif // defined(_M_IX86) || defined(_M_X64)\r\n        return _Traits::_Allocate(_Bytes);\r\n    }\r\n}\r\n\r\ntemplate <size_t _Align>\r\n_CONSTEXPR20 void _Deallocate(void* _Ptr, size_t _Bytes) noexcept {\r\n    // deallocate storage allocated by _Allocate\r\n#if _HAS_CXX20 // TRANSITION, GH-1532\r\n    if (_STD is_constant_evaluated()) {\r\n        ::operator delete(_Ptr);\r\n        return;\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n#ifdef __cpp_aligned_new\r\n    if constexpr (_Align > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n        size_t _Passed_align = _Align;\r\n#if defined(_M_IX86) || defined(_M_X64)\r\n        if (_Bytes >= _Big_allocation_threshold) {\r\n            // boost the alignment of big allocations to help autovectorization\r\n            _Passed_align = (_STD max) (_Align, _Big_allocation_alignment);\r\n        }\r\n#endif // defined(_M_IX86) || defined(_M_X64)\r\n        ::operator delete(_Ptr, _Bytes, align_val_t{_Passed_align});\r\n    } else\r\n#endif // defined(__cpp_aligned_new)\r\n    {\r\n#if defined(_M_IX86) || defined(_M_X64)\r\n        if (_Bytes >= _Big_allocation_threshold) {\r\n            // boost the alignment of big allocations to help autovectorization\r\n            _Adjust_manually_vector_aligned(_Ptr, _Bytes);\r\n        }\r\n#endif // defined(_M_IX86) || defined(_M_X64)\r\n        ::operator delete(_Ptr, _Bytes);\r\n    }\r\n}\r\n\r\ntemplate <class _Ptr, class _Ty>\r\nusing _Rebind_pointer_t = typename pointer_traits<_Ptr>::template rebind<_Ty>;\r\n\r\ntemplate <class _Pointer, enable_if_t<!is_pointer_v<_Pointer>, int> = 0>\r\n_CONSTEXPR20 _Pointer _Refancy(typename pointer_traits<_Pointer>::element_type* _Ptr) noexcept {\r\n    return pointer_traits<_Pointer>::pointer_to(*_Ptr);\r\n}\r\n\r\ntemplate <class _Pointer, enable_if_t<is_pointer_v<_Pointer>, int> = 0>\r\n_CONSTEXPR20 _Pointer _Refancy(_Pointer _Ptr) noexcept {\r\n    return _Ptr;\r\n}\r\n\r\ntemplate <class _Pointer, enable_if_t<!is_pointer_v<_Pointer>, int> = 0>\r\n_CONSTEXPR20 _Pointer _Refancy_maybe_null(typename pointer_traits<_Pointer>::element_type* _Ptr) noexcept {\r\n    return _Ptr == nullptr ? _Pointer() : pointer_traits<_Pointer>::pointer_to(*_Ptr);\r\n}\r\n\r\ntemplate <class _Pointer, enable_if_t<is_pointer_v<_Pointer>, int> = 0>\r\n_CONSTEXPR20 _Pointer _Refancy_maybe_null(_Pointer _Ptr) noexcept {\r\n    return _Ptr;\r\n}\r\n\r\ntemplate <class _NoThrowFwdIt, class _NoThrowSentinel>\r\n_CONSTEXPR20 void _Destroy_range(_NoThrowFwdIt _First, _NoThrowSentinel _Last) noexcept;\r\n\r\ntemplate <class _Ty>\r\n_CONSTEXPR20 void _Destroy_in_place(_Ty& _Obj) noexcept {\r\n    if constexpr (is_array_v<_Ty>) {\r\n        _STD _Destroy_range(_Obj, _Obj + extent_v<_Ty>);\r\n    } else {\r\n        _Obj.~_Ty();\r\n    }\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _Ty>\r\n_CONSTEXPR20 void destroy_at(_Ty* const _Location) noexcept /* strengthened */ {\r\n#if _HAS_CXX20\r\n    if constexpr (is_array_v<_Ty>) {\r\n        _STD _Destroy_range(_STD begin(*_Location), _STD end(*_Location));\r\n    } else\r\n#endif // _HAS_CXX20\r\n    {\r\n        _Location->~_Ty();\r\n    }\r\n}\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class _Ptrty>\r\nauto _Const_cast(_Ptrty _Ptr) noexcept { // remove constness from a fancy pointer\r\n    using _Elem       = typename pointer_traits<_Ptrty>::element_type;\r\n    using _Modifiable = remove_const_t<_Elem>;\r\n    using _Dest       = typename pointer_traits<_Ptrty>::template rebind<_Modifiable>;\r\n\r\n    return pointer_traits<_Dest>::pointer_to(const_cast<_Modifiable&>(*_Ptr));\r\n}\r\n\r\ntemplate <class _Ty>\r\nauto _Const_cast(_Ty* _Ptr) noexcept {\r\n    return const_cast<remove_const_t<_Ty>*>(_Ptr);\r\n}\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Get_pointer_type {\r\n    using type = typename _Ty::value_type*;\r\n};\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\ntemplate <class _Ty>\r\nstruct _Get_pointer_type<_Ty, void_t<typename _Ty::pointer>> {\r\n    using type = typename _Ty::pointer;\r\n};\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Get_const_pointer_type {\r\n    using _Ptrty = typename _Get_pointer_type<_Ty>::type;\r\n    using _Valty = typename _Ty::value_type;\r\n    using type   = typename pointer_traits<_Ptrty>::template rebind<const _Valty>;\r\n};\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\ntemplate <class _Ty>\r\nstruct _Get_const_pointer_type<_Ty, void_t<typename _Ty::const_pointer>> {\r\n    using type = typename _Ty::const_pointer;\r\n};\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Get_void_pointer_type {\r\n    using _Ptrty = typename _Get_pointer_type<_Ty>::type;\r\n    using type   = typename pointer_traits<_Ptrty>::template rebind<void>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Get_void_pointer_type<_Ty, void_t<typename _Ty::void_pointer>> {\r\n    using type = typename _Ty::void_pointer;\r\n};\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Get_const_void_pointer_type {\r\n    using _Ptrty = typename _Get_pointer_type<_Ty>::type;\r\n    using type   = typename pointer_traits<_Ptrty>::template rebind<const void>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Get_const_void_pointer_type<_Ty, void_t<typename _Ty::const_void_pointer>> {\r\n    using type = typename _Ty::const_void_pointer;\r\n};\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Get_difference_type {\r\n    using _Ptrty = typename _Get_pointer_type<_Ty>::type;\r\n    using type   = typename pointer_traits<_Ptrty>::difference_type;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Get_difference_type<_Ty, void_t<typename _Ty::difference_type>> {\r\n    using type = typename _Ty::difference_type;\r\n};\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Get_size_type {\r\n    using type = make_unsigned_t<typename _Get_difference_type<_Ty>::type>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Get_size_type<_Ty, void_t<typename _Ty::size_type>> {\r\n    using type = typename _Ty::size_type;\r\n};\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Get_propagate_on_container_copy {\r\n    using type = false_type;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Get_propagate_on_container_copy<_Ty, void_t<typename _Ty::propagate_on_container_copy_assignment>> {\r\n    using type = typename _Ty::propagate_on_container_copy_assignment;\r\n};\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Get_propagate_on_container_move {\r\n    using type = false_type;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Get_propagate_on_container_move<_Ty, void_t<typename _Ty::propagate_on_container_move_assignment>> {\r\n    using type = typename _Ty::propagate_on_container_move_assignment;\r\n};\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Get_propagate_on_container_swap {\r\n    using type = false_type;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Get_propagate_on_container_swap<_Ty, void_t<typename _Ty::propagate_on_container_swap>> {\r\n    using type = typename _Ty::propagate_on_container_swap;\r\n};\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Get_is_always_equal {\r\n    using type = bool_constant<is_empty_v<_Ty>>;\r\n};\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\ntemplate <class _Ty>\r\nstruct _Get_is_always_equal<_Ty, void_t<typename _Ty::is_always_equal>> {\r\n    using type = typename _Ty::is_always_equal;\r\n};\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n\r\ntemplate <class _Ty, class _Other, class = void>\r\nstruct _Get_rebind_type {\r\n    using type = typename _Replace_first_parameter<_Other, _Ty>::type;\r\n};\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\ntemplate <class _Ty, class _Other>\r\nstruct _Get_rebind_type<_Ty, _Other, void_t<typename _Ty::template rebind<_Other>::other>> {\r\n    using type = typename _Ty::template rebind<_Other>::other;\r\n};\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass allocator;\r\n\r\ntemplate <class _Alloc, class = void>\r\nstruct _Is_default_allocator : false_type {};\r\n\r\ntemplate <class _Ty>\r\nstruct _Is_default_allocator<allocator<_Ty>, void_t<typename allocator<_Ty>::_From_primary>>\r\n    : is_same<typename allocator<_Ty>::_From_primary, allocator<_Ty>>::type {};\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Alloc, class _SizeTy>\r\nconcept _Has_member_allocate_at_least = requires(_Alloc& _Al, const _SizeTy& _Count) { _Al.allocate_at_least(_Count); };\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Void, class... _Types>\r\nstruct _Has_no_allocator_construct : true_type {};\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\ntemplate <class _Alloc, class _Ptr, class... _Args>\r\nstruct _Has_no_allocator_construct<\r\n    void_t<decltype(_STD declval<_Alloc&>().construct(_STD declval<_Ptr>(), _STD declval<_Args>()...))>, _Alloc, _Ptr,\r\n    _Args...> : false_type {};\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n\r\ntemplate <class _Alloc, class _Ptr, class... _Args>\r\nusing _Uses_default_construct =\r\n    disjunction<_Is_default_allocator<_Alloc>, _Has_no_allocator_construct<void, _Alloc, _Ptr, _Args...>>;\r\n\r\ntemplate <class _Alloc, class _Ptr, class = void>\r\nstruct _Has_no_alloc_destroy : true_type {};\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\ntemplate <class _Alloc, class _Ptr>\r\nstruct _Has_no_alloc_destroy<_Alloc, _Ptr, void_t<decltype(_STD declval<_Alloc&>().destroy(_STD declval<_Ptr>()))>>\r\n    : false_type {};\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n\r\ntemplate <class _Alloc, class _Ptr>\r\nusing _Uses_default_destroy = disjunction<_Is_default_allocator<_Alloc>, _Has_no_alloc_destroy<_Alloc, _Ptr>>;\r\n\r\ntemplate <class _Alloc, class _Size_type, class _Const_void_pointer, class = void>\r\nstruct _Has_allocate_hint : false_type {};\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\ntemplate <class _Alloc, class _Size_type, class _Const_void_pointer>\r\nstruct _Has_allocate_hint<_Alloc, _Size_type, _Const_void_pointer,\r\n    void_t<decltype(_STD declval<_Alloc&>().allocate(\r\n        _STD declval<const _Size_type&>(), _STD declval<const _Const_void_pointer&>()))>> : true_type {};\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n\r\ntemplate <class _Alloc, class = void>\r\nstruct _Has_max_size : false_type {};\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\ntemplate <class _Alloc>\r\nstruct _Has_max_size<_Alloc, void_t<decltype(_STD declval<const _Alloc&>().max_size())>> : true_type {};\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n\r\ntemplate <class _Alloc, class = void>\r\nstruct _Has_select_on_container_copy_construction : false_type {};\r\n\r\ntemplate <class _Alloc>\r\nstruct _Has_select_on_container_copy_construction<_Alloc,\r\n    void_t<decltype(_STD declval<const _Alloc&>().select_on_container_copy_construction())>> : true_type {};\r\n\r\n#if _HAS_CXX23\r\n_EXPORT_STD template <class _Ptr, class _SizeTy = size_t>\r\nstruct allocation_result {\r\n    _Ptr ptr;\r\n    _SizeTy count;\r\n};\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD template <class _Alloc>\r\nstruct _NO_SPECIALIZATIONS_CITING(\"N5014 [allocator.traits.general]/1\") allocator_traits;\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\ntemplate <class _Alloc>\r\nstruct _Normal_allocator_traits { // defines traits for allocators\r\n    using allocator_type = _Alloc;\r\n    using value_type     = typename _Alloc::value_type;\r\n\r\n    using pointer            = typename _Get_pointer_type<_Alloc>::type;\r\n    using const_pointer      = typename _Get_const_pointer_type<_Alloc>::type;\r\n    using void_pointer       = typename _Get_void_pointer_type<_Alloc>::type;\r\n    using const_void_pointer = typename _Get_const_void_pointer_type<_Alloc>::type;\r\n\r\n    using size_type       = typename _Get_size_type<_Alloc>::type;\r\n    using difference_type = typename _Get_difference_type<_Alloc>::type;\r\n\r\n    using propagate_on_container_copy_assignment = typename _Get_propagate_on_container_copy<_Alloc>::type;\r\n    using propagate_on_container_move_assignment = typename _Get_propagate_on_container_move<_Alloc>::type;\r\n    using propagate_on_container_swap            = typename _Get_propagate_on_container_swap<_Alloc>::type;\r\n    using is_always_equal                        = typename _Get_is_always_equal<_Alloc>::type;\r\n\r\n    template <class _Other>\r\n    using rebind_alloc = typename _Get_rebind_type<_Alloc, _Other>::type;\r\n\r\n    template <class _Other>\r\n    using rebind_traits = allocator_traits<rebind_alloc<_Other>>;\r\n\r\n    _NODISCARD_RAW_PTR_ALLOC static _CONSTEXPR20 __declspec(allocator) pointer allocate(\r\n        _Alloc& _Al, _CRT_GUARDOVERFLOW const size_type _Count) {\r\n        return _Al.allocate(_Count);\r\n    }\r\n\r\n    _NODISCARD_RAW_PTR_ALLOC static _CONSTEXPR20 __declspec(allocator) pointer allocate(\r\n        _Alloc& _Al, _CRT_GUARDOVERFLOW const size_type _Count, const const_void_pointer _Hint) {\r\n        if constexpr (_Has_allocate_hint<_Alloc, size_type, const_void_pointer>::value) {\r\n            return _Al.allocate(_Count, _Hint);\r\n        } else {\r\n            return _Al.allocate(_Count);\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    _NODISCARD_RAW_PTR_ALLOC static constexpr allocation_result<pointer, size_type> allocate_at_least(\r\n        _Alloc& _Al, _CRT_GUARDOVERFLOW const size_type _Count) {\r\n        if constexpr (_Has_member_allocate_at_least<_Alloc, size_type>) {\r\n            return _Al.allocate_at_least(_Count);\r\n        } else {\r\n            return {_Al.allocate(_Count), _Count};\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    static _CONSTEXPR20 void deallocate(_Alloc& _Al, pointer _Ptr, size_type _Count) {\r\n        _Al.deallocate(_Ptr, _Count);\r\n    }\r\n\r\n    template <class _Ty, class... _Types>\r\n    static _CONSTEXPR20 void construct(_Alloc& _Al, _Ty* _Ptr, _Types&&... _Args) {\r\n        if constexpr (_Uses_default_construct<_Alloc, _Ty*, _Types...>::value) {\r\n#if _HAS_CXX20\r\n            _STD construct_at(_Ptr, _STD forward<_Types>(_Args)...);\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n            ::new (static_cast<void*>(_Ptr)) _Ty(_STD forward<_Types>(_Args)...);\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n        } else {\r\n            _Al.construct(_Ptr, _STD forward<_Types>(_Args)...);\r\n        }\r\n    }\r\n\r\n    template <class _Ty>\r\n    static _CONSTEXPR20 void destroy(_Alloc& _Al, _Ty* _Ptr) {\r\n        if constexpr (_Uses_default_destroy<_Alloc, _Ty*>::value) {\r\n#if _HAS_CXX20\r\n            _STD destroy_at(_Ptr);\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n            _Ptr->~_Ty();\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n        } else {\r\n            _Al.destroy(_Ptr);\r\n        }\r\n    }\r\n\r\n    _NODISCARD static _CONSTEXPR20 size_type max_size(const _Alloc& _Al) noexcept {\r\n        if constexpr (_Has_max_size<_Alloc>::value) {\r\n            return _Al.max_size();\r\n        } else {\r\n            return _STD _Max_limit<size_type>() / sizeof(value_type);\r\n        }\r\n    }\r\n\r\n    _NODISCARD static _CONSTEXPR20 _Alloc select_on_container_copy_construction(const _Alloc& _Al) {\r\n        if constexpr (_Has_select_on_container_copy_construction<_Alloc>::value) {\r\n            return _Al.select_on_container_copy_construction();\r\n        } else {\r\n            return _Al;\r\n        }\r\n    }\r\n};\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n\r\ntemplate <class _Alloc>\r\nstruct _Default_allocator_traits { // traits for std::allocator\r\n    using allocator_type = _Alloc;\r\n    using value_type     = typename _Alloc::value_type;\r\n\r\n    using pointer            = value_type*;\r\n    using const_pointer      = const value_type*;\r\n    using void_pointer       = void*;\r\n    using const_void_pointer = const void*;\r\n\r\n    using size_type       = size_t;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    using propagate_on_container_copy_assignment = false_type;\r\n    using propagate_on_container_move_assignment = true_type;\r\n    using propagate_on_container_swap            = false_type;\r\n    using is_always_equal                        = true_type;\r\n\r\n    template <class _Other>\r\n    using rebind_alloc = allocator<_Other>;\r\n\r\n    template <class _Other>\r\n    using rebind_traits = allocator_traits<allocator<_Other>>;\r\n\r\n    _NODISCARD_RAW_PTR_ALLOC static _CONSTEXPR20 __declspec(allocator) pointer allocate(\r\n        _Alloc& _Al, _CRT_GUARDOVERFLOW const size_type _Count) {\r\n#if _HAS_CXX20 // TRANSITION, GH-1532\r\n        if (_STD is_constant_evaluated()) {\r\n            return _Al.allocate(_Count);\r\n        } else\r\n#endif // _HAS_CXX20\r\n        {\r\n            (void) _Al;\r\n            return static_cast<pointer>(\r\n                _Allocate<_New_alignof<value_type>>(_Get_size_of_n<sizeof(value_type)>(_Count)));\r\n        }\r\n    }\r\n\r\n    _NODISCARD_RAW_PTR_ALLOC static _CONSTEXPR20 __declspec(allocator) pointer allocate(\r\n        _Alloc& _Al, _CRT_GUARDOVERFLOW const size_type _Count, const_void_pointer) {\r\n#if _HAS_CXX20 // TRANSITION, GH-1532\r\n        if (_STD is_constant_evaluated()) {\r\n            return _Al.allocate(_Count);\r\n        } else\r\n#endif // _HAS_CXX20\r\n        {\r\n            (void) _Al;\r\n            return static_cast<pointer>(\r\n                _Allocate<_New_alignof<value_type>>(_Get_size_of_n<sizeof(value_type)>(_Count)));\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    _NODISCARD_RAW_PTR_ALLOC static constexpr allocation_result<pointer, size_type> allocate_at_least(\r\n        _Alloc& _Al, _CRT_GUARDOVERFLOW const size_type _Count) {\r\n        return {_Al.allocate(_Count), _Count};\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    static _CONSTEXPR20 void deallocate(_Alloc& _Al, const pointer _Ptr, const size_type _Count) noexcept\r\n    /* strengthened */ {\r\n        // no overflow check on the following multiply; we assume _Allocate did that check\r\n#if _HAS_CXX20 // TRANSITION, GH-1532\r\n        if (_STD is_constant_evaluated()) {\r\n            _Al.deallocate(_Ptr, _Count);\r\n        } else\r\n#endif // _HAS_CXX20\r\n        {\r\n            (void) _Al;\r\n            _STD _Deallocate<_New_alignof<value_type>>(_Ptr, sizeof(value_type) * _Count);\r\n        }\r\n    }\r\n\r\n    template <class _Objty, class... _Types>\r\n    static _CONSTEXPR20 void construct(_Alloc&, _Objty* const _Ptr, _Types&&... _Args) {\r\n#if _HAS_CXX20\r\n        _STD construct_at(_Ptr, _STD forward<_Types>(_Args)...);\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n        ::new (const_cast<void*>(static_cast<const volatile void*>(_Ptr))) _Objty(_STD forward<_Types>(_Args)...);\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n    }\r\n\r\n    template <class _Uty>\r\n    static _CONSTEXPR20 void destroy(_Alloc&, _Uty* const _Ptr) {\r\n#if _HAS_CXX20\r\n        _STD destroy_at(_Ptr);\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n        _Ptr->~_Uty();\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n    }\r\n\r\n    _NODISCARD static _CONSTEXPR20 size_type max_size(const _Alloc&) noexcept {\r\n        return static_cast<size_t>(-1) / sizeof(value_type);\r\n    }\r\n\r\n    _NODISCARD static _CONSTEXPR20 _Alloc select_on_container_copy_construction(const _Alloc& _Al) {\r\n        return _Al;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Alloc>\r\nstruct _NO_SPECIALIZATIONS_CITING(\"N5014 [allocator.traits.general]/1\") allocator_traits\r\n    : conditional_t<_Is_default_allocator<_Alloc>::value, _Default_allocator_traits<_Alloc>,\r\n          _Normal_allocator_traits<_Alloc>> {};\r\n\r\n// _Choose_pocca_v returns whether an attempt to propagate allocators is necessary in copy assignment operations.\r\n// Note that even when false_type, callers should call _Pocca as we want to assign allocators even when equal.\r\ntemplate <class _Alloc>\r\nconstexpr bool _Choose_pocca_v = allocator_traits<_Alloc>::propagate_on_container_copy_assignment::value\r\n                              && !allocator_traits<_Alloc>::is_always_equal::value;\r\n\r\nenum class _Pocma_values {\r\n    _Equal_allocators, // usually allows contents to be stolen (e.g. with swap)\r\n    _Propagate_allocators, // usually allows the allocator to be propagated, and then contents stolen\r\n    _No_propagate_allocators, // usually turns moves into copies\r\n};\r\n\r\ntemplate <class _Alloc>\r\nconstexpr _Pocma_values _Choose_pocma_v = allocator_traits<_Alloc>::is_always_equal::value\r\n                                            ? _Pocma_values::_Equal_allocators\r\n                                            : (allocator_traits<_Alloc>::propagate_on_container_move_assignment::value\r\n                                                      ? _Pocma_values::_Propagate_allocators\r\n                                                      : _Pocma_values::_No_propagate_allocators);\r\n\r\ntemplate <class _Alloc, class _Value_type>\r\nusing _Rebind_alloc_t = typename allocator_traits<_Alloc>::template rebind_alloc<_Value_type>;\r\n\r\n// If _Alloc is already rebound appropriately, binds an lvalue reference to it, avoiding a copy. Otherwise, creates a\r\n// rebound copy.\r\ntemplate <class _Alloc, class _Value_type>\r\nusing _Maybe_rebind_alloc_t =\r\n    typename _Select<is_same_v<typename _Alloc::value_type, _Value_type>>::template _Apply<_Alloc&,\r\n        _Rebind_alloc_t<_Alloc, _Value_type>>;\r\n\r\ntemplate <class _Alloc> // tests if allocator has simple addressing\r\nconstexpr bool _Is_simple_alloc_v =\r\n    is_same_v<typename allocator_traits<_Alloc>::size_type, size_t>\r\n    && is_same_v<typename allocator_traits<_Alloc>::difference_type, ptrdiff_t>\r\n    && is_same_v<typename allocator_traits<_Alloc>::pointer, typename _Alloc::value_type*>\r\n    && is_same_v<typename allocator_traits<_Alloc>::const_pointer, const typename _Alloc::value_type*>;\r\n\r\n// SCARY iterators are permitted but not required by the Standard. See:\r\n// N2911 Minimizing Dependencies Within Generic Classes For Faster And Smaller Programs\r\n// N2980 SCARY Iterator Assignment And Initialization\r\ntemplate <class _Value_type>\r\nstruct _Simple_types { // wraps types from allocators with simple addressing for use in iterators\r\n                       // and other SCARY machinery\r\n    using value_type      = _Value_type;\r\n    using size_type       = size_t;\r\n    using difference_type = ptrdiff_t;\r\n    using pointer         = value_type*;\r\n    using const_pointer   = const value_type*;\r\n};\r\n\r\n// The number of user bytes a single byte of ASAN shadow memory can track.\r\n_INLINE_VAR constexpr size_t _Asan_granularity      = 8;\r\n_INLINE_VAR constexpr size_t _Asan_granularity_mask = _Asan_granularity - 1;\r\n\r\n// Controls whether ASan `container-overflow` errors are reported for this allocator.\r\ntemplate <class>\r\nconstexpr bool _Disable_ASan_container_annotations_for_allocator = false;\r\n\r\nstruct _Asan_aligned_pointers {\r\n    const void* _First;\r\n    const void* _End;\r\n\r\n    _NODISCARD constexpr const void* _Clamp_to_end(const void* _Mid) const noexcept {\r\n        _STL_INTERNAL_CHECK(_Mid >= _First);\r\n        if (_Mid > _End) {\r\n            return _End;\r\n        } else {\r\n            return _Mid;\r\n        }\r\n    }\r\n};\r\n\r\n// The way that ASan shadow memory works, each eight byte block of memory (\"shadow memory section\")\r\n// has a single byte to mark it as either poison or valid.\r\n// Each section has 0 to 8 \"valid\" bytes followed by poison bytes, so:\r\n// ```\r\n//   [ v v v p p p p p ]\r\n// ```\r\n// or\r\n// ```\r\n//   [ v v v v v v v v ]\r\n// ```\r\n// are okay, but\r\n// ```\r\n//   [ p p p p v v v v ]\r\n// ```\r\n// is not.\r\n//\r\n// This function exists to fix up `first` and `end` pointers so that one can call\r\n// `__sanitizer_annotate_contiguous_container`:\r\n//\r\n//   - `__sanitizer_annotate_contiguous_container` checks that `first` is aligned to an 8-byte boundary\r\n//   - if `end` is not aligned to an 8-byte boundary, `__sanitizer_annotate_contiguous_container` still poisons the\r\n//     remaining bytes in the shadow memory section.\r\n//\r\n// Because of the second property, we can only mark poison up to the final aligned address before the true `last`.\r\n// Otherwise, we'd poison the memory _after_ `last` as well.\r\n// For the first property, we can assume that everything before `first` in the shadow memory section is valid\r\n// (since otherwise we couldn't mark `first` valid), and so we just return back the first address in\r\n// `first`'s shadow memory section.\r\n//\r\n// ### Example\r\n//\r\n// ```cpp\r\n// struct alignas(8) cat {\r\n//     int meow; // bytes [0, 4)\r\n//     char buffer[16]; // bytes [4, 20)\r\n//     int purr; // bytes [20, 24)\r\n// };\r\n// ```\r\n//\r\n// First, `meow` and `purr` are just regular data members, not container buffers, so they _must_ be valid.\r\n// Then, assume we want to poison all of `buffer`.\r\n// This would mean that, in a perfect world, we want something like:\r\n//\r\n// ```\r\n//    |  meow |               buffer                | purr  |\r\n//   [ v v v v p p p p ][ p p p p p p p p ][ p p p p v v v v ]\r\n//           sm1                sm2                sm3\r\n// ```\r\n//\r\n// However, note that by the rules above, `sm3` is not a valid shadow memory section; we always need\r\n// the valid bytes to come before the poison bytes. Thus, the closest we can actually get to it is:\r\n//\r\n// ```\r\n//    |  meow |               buffer                | purr  |\r\n//   [ v v v v p p p p ][ p p p p p p p p ][ v v v v v v v v ]\r\n//           sm1                sm2                sm3\r\n// ```\r\n//\r\n// We call `aligned = _Get_asan_aligned_first_end(cat.buffer, cat.buffer + 16);`, and we get back\r\n//\r\n// ```cpp\r\n// aligned = {\r\n//     ._First = &cat.meow,\r\n//     ._End = cat.buffer + 12,\r\n// };\r\n// ```\r\n//\r\n// Then, we poison as much of buffer as we can via\r\n//\r\n// ```cpp\r\n// __sanitizer_annotate_contiguous_container(\r\n//     aligned._First,\r\n//     aligned._End,\r\n//     cat.buffer,\r\n//     aligned._Clamp_to_end(cat.buffer + 16));\r\n// ```\r\n//\r\n// We are allowed to assume that `&cat.meow` is valid, since otherwise `cat.buffer + [0, 4)` could not be valid.\r\n// We cannot poison up to `cat.buffer + 16`, since then `&purr` could not be valid.\r\n// Thus, this results in the shadow memory state from the second example.\r\n_NODISCARD inline _Asan_aligned_pointers _Get_asan_aligned_first_end(\r\n    const void* const _First, const void* const _End) noexcept {\r\n    return {\r\n        reinterpret_cast<const void*>(reinterpret_cast<uintptr_t>(_First) & ~_Asan_granularity_mask),\r\n        reinterpret_cast<const void*>(reinterpret_cast<uintptr_t>(_End) & ~_Asan_granularity_mask),\r\n    };\r\n}\r\n\r\n// When we can assume that the allocator we are using will always align allocations to the 8-byte,\r\n// we can simply push the `_End` pointer to the end of the shadow memory section.\r\n// This is _not_ safe in general (see _Get_asan_aligned_first_end's comment for why).\r\n_NODISCARD inline const void* _Get_asan_aligned_after(const void* const _End) noexcept {\r\n    return reinterpret_cast<const void*>(\r\n        (reinterpret_cast<uintptr_t>(_End) + _Asan_granularity_mask) & ~_Asan_granularity_mask);\r\n}\r\n\r\ntemplate <class _Container, class = void>\r\nconstexpr size_t _Container_allocation_minimum_asan_alignment = alignof(typename _Container::value_type);\r\n\r\ntemplate <class _Container>\r\nconstexpr size_t _Container_allocation_minimum_asan_alignment<_Container,\r\n    void_t<decltype(_Container::allocator_type::_Minimum_asan_allocation_alignment)>> =\r\n    (_STD max) (alignof(typename _Container::value_type),\r\n        _Container::allocator_type::_Minimum_asan_allocation_alignment);\r\n\r\n_EXPORT_STD template <class _Ty>\r\nclass allocator {\r\npublic:\r\n    static_assert(!is_const_v<_Ty>, \"The C++ Standard forbids containers of const elements \"\r\n                                    \"because allocator<const T> is ill-formed.\");\r\n    static_assert(!is_function_v<_Ty>, \"The C++ Standard forbids allocators for function elements \"\r\n                                       \"because of [allocator.requirements].\");\r\n    static_assert(!is_reference_v<_Ty>, \"The C++ Standard forbids allocators for reference elements \"\r\n                                        \"because of [allocator.requirements].\");\r\n\r\n    using _From_primary = allocator;\r\n\r\n    using value_type = _Ty;\r\n\r\n#if _HAS_DEPRECATED_ALLOCATOR_MEMBERS\r\n    using pointer _CXX17_DEPRECATE_OLD_ALLOCATOR_MEMBERS       = _Ty*;\r\n    using const_pointer _CXX17_DEPRECATE_OLD_ALLOCATOR_MEMBERS = const _Ty*;\r\n\r\n    using reference _CXX17_DEPRECATE_OLD_ALLOCATOR_MEMBERS       = _Ty&;\r\n    using const_reference _CXX17_DEPRECATE_OLD_ALLOCATOR_MEMBERS = const _Ty&;\r\n#endif // _HAS_DEPRECATED_ALLOCATOR_MEMBERS\r\n\r\n    using size_type       = size_t;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    using propagate_on_container_move_assignment           = true_type;\r\n    using is_always_equal _CXX20_DEPRECATE_IS_ALWAYS_EQUAL = true_type;\r\n\r\n#if _HAS_DEPRECATED_ALLOCATOR_MEMBERS\r\n    template <class _Other>\r\n    struct _CXX17_DEPRECATE_OLD_ALLOCATOR_MEMBERS _NO_SPECIALIZATIONS_OF_MEMBER_CLASS_TEMPLATES rebind {\r\n        using other = allocator<_Other>;\r\n    };\r\n\r\n    _CXX17_DEPRECATE_OLD_ALLOCATOR_MEMBERS _NODISCARD _Ty* address(_Ty& _Val) const noexcept {\r\n        return _STD addressof(_Val);\r\n    }\r\n\r\n    _CXX17_DEPRECATE_OLD_ALLOCATOR_MEMBERS _NODISCARD const _Ty* address(const _Ty& _Val) const noexcept {\r\n        return _STD addressof(_Val);\r\n    }\r\n#endif // _HAS_DEPRECATED_ALLOCATOR_MEMBERS\r\n\r\n    constexpr allocator() noexcept {}\r\n\r\n    constexpr allocator(const allocator&) noexcept = default;\r\n    template <class _Other>\r\n    constexpr allocator(const allocator<_Other>&) noexcept {}\r\n    _CONSTEXPR20 ~allocator()                           = default;\r\n    _CONSTEXPR20 allocator& operator=(const allocator&) = default;\r\n\r\n    _CONSTEXPR20 void deallocate(_Ty* const _Ptr, const size_t _Count) noexcept /* strengthened */ {\r\n        _STL_ASSERT(_Ptr != nullptr || _Count == 0, \"null pointer cannot point to a block of non-zero size\");\r\n        // no overflow check on the following multiply; we assume _Allocate did that check\r\n        _STD _Deallocate<_New_alignof<_Ty>>(_Ptr, sizeof(_Ty) * _Count);\r\n    }\r\n\r\n    _NODISCARD_RAW_PTR_ALLOC _CONSTEXPR20 __declspec(allocator) _Ty* allocate(_CRT_GUARDOVERFLOW const size_t _Count) {\r\n        static_assert(sizeof(value_type) > 0, \"value_type must be complete before calling allocate.\");\r\n        return static_cast<_Ty*>(_STD _Allocate<_New_alignof<_Ty>>(_Get_size_of_n<sizeof(_Ty)>(_Count)));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    _NODISCARD_RAW_PTR_ALLOC constexpr allocation_result<_Ty*> allocate_at_least(\r\n        _CRT_GUARDOVERFLOW const size_t _Count) {\r\n        return {allocate(_Count), _Count};\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n#if _HAS_DEPRECATED_ALLOCATOR_MEMBERS\r\n    _CXX17_DEPRECATE_OLD_ALLOCATOR_MEMBERS _NODISCARD_RAW_PTR_ALLOC __declspec(allocator)\r\n    _Ty* allocate(_CRT_GUARDOVERFLOW const size_t _Count, const void*) {\r\n        return allocate(_Count);\r\n    }\r\n\r\n    template <class _Objty, class... _Types>\r\n    _CXX17_DEPRECATE_OLD_ALLOCATOR_MEMBERS void construct(_Objty* const _Ptr, _Types&&... _Args) {\r\n        ::new (const_cast<void*>(static_cast<const volatile void*>(_Ptr))) _Objty(_STD forward<_Types>(_Args)...);\r\n    }\r\n\r\n    template <class _Uty>\r\n    _CXX17_DEPRECATE_OLD_ALLOCATOR_MEMBERS void destroy(_Uty* const _Ptr) {\r\n        _Ptr->~_Uty();\r\n    }\r\n\r\n    _CXX17_DEPRECATE_OLD_ALLOCATOR_MEMBERS _NODISCARD size_t max_size() const noexcept {\r\n        return static_cast<size_t>(-1) / sizeof(_Ty);\r\n    }\r\n#endif // _HAS_DEPRECATED_ALLOCATOR_MEMBERS\r\n\r\n    static constexpr size_t _Minimum_asan_allocation_alignment = _Asan_granularity;\r\n};\r\n\r\n#if _HAS_DEPRECATED_ALLOCATOR_VOID || _HAS_DEPRECATED_ALLOCATOR_MEMBERS\r\ntemplate <>\r\nclass allocator<void> {\r\npublic:\r\n    using value_type = void;\r\n#if _HAS_DEPRECATED_ALLOCATOR_MEMBERS\r\n    using pointer _CXX17_DEPRECATE_OLD_ALLOCATOR_MEMBERS       = void*;\r\n    using const_pointer _CXX17_DEPRECATE_OLD_ALLOCATOR_MEMBERS = const void*;\r\n\r\n    template <class _Other>\r\n    struct _CXX17_DEPRECATE_OLD_ALLOCATOR_MEMBERS _NO_SPECIALIZATIONS_OF_MEMBER_CLASS_TEMPLATES rebind {\r\n        using other = allocator<_Other>;\r\n    };\r\n#endif // _HAS_DEPRECATED_ALLOCATOR_MEMBERS\r\n\r\n#if _HAS_CXX20\r\n    using size_type       = size_t;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    using propagate_on_container_move_assignment           = true_type;\r\n    using is_always_equal _CXX20_DEPRECATE_IS_ALWAYS_EQUAL = true_type;\r\n#endif // _HAS_CXX20\r\n};\r\n#endif // _HAS_DEPRECATED_ALLOCATOR_VOID || _HAS_DEPRECATED_ALLOCATOR_MEMBERS\r\n\r\n_EXPORT_STD template <class _Ty, class _Other>\r\n_NODISCARD _CONSTEXPR20 bool operator==(const allocator<_Ty>&, const allocator<_Other>&) noexcept {\r\n    return true;\r\n}\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _Ty, class _Other>\r\n_NODISCARD bool operator!=(const allocator<_Ty>&, const allocator<_Other>&) noexcept {\r\n    return false;\r\n}\r\n#endif // !_HAS_CXX20\r\n\r\n#if _HAS_CXX17\r\n// See N4950 [unord.map.overview]/4\r\ntemplate <class _Alloc>\r\nusing _Guide_size_type_t =\r\n    typename allocator_traits<conditional_t<_Is_allocator<_Alloc>::value, _Alloc, allocator<int>>>::size_type;\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class _Alloc>\r\nusing _Alloc_ptr_t = typename allocator_traits<_Alloc>::pointer;\r\n\r\ntemplate <class _Alloc>\r\nusing _Alloc_size_t = typename allocator_traits<_Alloc>::size_type;\r\n\r\ntemplate <class _Alloc>\r\n_CONSTEXPR20 void _Pocca(_Alloc& _Left, const _Alloc& _Right) noexcept {\r\n    if constexpr (allocator_traits<_Alloc>::propagate_on_container_copy_assignment::value) {\r\n        _Left = _Right;\r\n    }\r\n}\r\n\r\ntemplate <class _Alloc>\r\n_CONSTEXPR20 void _Pocma(_Alloc& _Left, _Alloc& _Right) noexcept { // (maybe) propagate on container move assignment\r\n    if constexpr (allocator_traits<_Alloc>::propagate_on_container_move_assignment::value) {\r\n        _Left = _STD move(_Right);\r\n    }\r\n}\r\n\r\ntemplate <class _Alloc>\r\n_CONSTEXPR20 void _Pocs(_Alloc& _Left, _Alloc& _Right) noexcept {\r\n    if constexpr (allocator_traits<_Alloc>::propagate_on_container_swap::value) {\r\n        swap(_Left, _Right); // intentional ADL\r\n    } else {\r\n        _STL_ASSERT(_Left == _Right, \"containers incompatible for swap\");\r\n    }\r\n}\r\n\r\ntemplate <class _Alloc>\r\n_CONSTEXPR20 void _Destroy_range(_Alloc_ptr_t<_Alloc> _First, const _Alloc_ptr_t<_Alloc> _Last, _Alloc& _Al) noexcept {\r\n    // note that this is an optimization for debug mode codegen; in release mode the BE removes all of this\r\n    using _Ty = typename _Alloc::value_type;\r\n    if constexpr (!conjunction_v<is_trivially_destructible<_Ty>, _Uses_default_destroy<_Alloc, _Ty*>>) {\r\n        for (; _First != _Last; ++_First) {\r\n            allocator_traits<_Alloc>::destroy(_Al, _STD _Unfancy(_First));\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _NoThrowFwdIt, class _NoThrowSentinel>\r\n_CONSTEXPR20 void _Destroy_range(_NoThrowFwdIt _First, const _NoThrowSentinel _Last) noexcept {\r\n#if _HAS_CXX20\r\n    if (_STD is_constant_evaluated()) {\r\n        for (; _First != _Last; ++_First) {\r\n            _STD _Destroy_in_place(*_First);\r\n        }\r\n    } else\r\n#endif // _HAS_CXX20\r\n    { // note that this is an optimization for debug mode codegen; in release mode the BE removes all of this\r\n        if constexpr (!is_trivially_destructible_v<_Iter_value_t<_NoThrowFwdIt>>) {\r\n            for (; _First != _Last; ++_First) {\r\n                _STD _Destroy_in_place(*_First);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _Size_type, class _Unsigned_type>\r\n_NODISCARD constexpr _Size_type _Convert_size(const _Unsigned_type _Len)\r\n    noexcept(sizeof(_Unsigned_type) <= sizeof(_Size_type)) {\r\n    // convert _Unsigned_type to _Size_type, avoiding truncation\r\n    _STL_INTERNAL_STATIC_ASSERT(_Unsigned_type(-1) > 0);\r\n    _STL_INTERNAL_STATIC_ASSERT(_Size_type(-1) > 0);\r\n\r\n    if constexpr (sizeof(_Unsigned_type) > sizeof(_Size_type)) {\r\n        if (_Len > _STD _Max_limit<_Size_type>()) {\r\n            _Xlength_error(\"size is too long for _Size_type\");\r\n        }\r\n    }\r\n\r\n    return static_cast<_Size_type>(_Len);\r\n}\r\n\r\ntemplate <class _Alloc>\r\n_CONSTEXPR20 void _Deallocate_plain(_Alloc& _Al, typename _Alloc::value_type* const _Ptr) noexcept {\r\n    // deallocate a plain pointer using an allocator\r\n    using _Alloc_traits = allocator_traits<_Alloc>;\r\n    if constexpr (is_same_v<_Alloc_ptr_t<_Alloc>, typename _Alloc::value_type*>) {\r\n        _Alloc_traits::deallocate(_Al, _Ptr, 1);\r\n    } else {\r\n        using _Ptr_traits = pointer_traits<_Alloc_ptr_t<_Alloc>>;\r\n        _Alloc_traits::deallocate(_Al, _Ptr_traits::pointer_to(*_Ptr), 1);\r\n    }\r\n}\r\n\r\ntemplate <class _Alloc>\r\n_CONSTEXPR20 void _Delete_plain_internal(_Alloc& _Al, typename _Alloc::value_type* const _Ptr) noexcept {\r\n    // destroy *_Ptr in place, then deallocate _Ptr using _Al; used for internal container types the user didn't name\r\n    using _Ty = typename _Alloc::value_type;\r\n    _Ptr->~_Ty();\r\n    _STD _Deallocate_plain(_Al, _Ptr);\r\n}\r\n\r\ntemplate <class _Alloc>\r\nstruct _Alloc_construct_ptr { // pointer used to help construct 1 _Alloc::value_type without EH\r\n    using pointer = _Alloc_ptr_t<_Alloc>;\r\n    _Alloc& _Al;\r\n    pointer _Ptr;\r\n\r\n    _CONSTEXPR20 explicit _Alloc_construct_ptr(_Alloc& _Al_) : _Al(_Al_), _Ptr(nullptr) {}\r\n\r\n    _NODISCARD _CONSTEXPR20 pointer _Release() noexcept { // disengage *this and return contained pointer\r\n        return _STD exchange(_Ptr, nullptr);\r\n    }\r\n\r\n    _CONSTEXPR20 void _Allocate() { // disengage *this, then allocate a new memory block\r\n        _Ptr = nullptr; // if allocate throws, prevents double-free\r\n        _Ptr = _Al.allocate(1);\r\n    }\r\n\r\n    _CONSTEXPR20 ~_Alloc_construct_ptr() { // if this instance is engaged, deallocate storage\r\n        if (_Ptr) {\r\n            _Al.deallocate(_Ptr, 1);\r\n        }\r\n    }\r\n\r\n    _Alloc_construct_ptr(const _Alloc_construct_ptr&)            = delete;\r\n    _Alloc_construct_ptr& operator=(const _Alloc_construct_ptr&) = delete;\r\n};\r\n\r\nstruct _Fake_allocator {};\r\n\r\nstruct _Container_base0 {\r\n    _CONSTEXPR20 void _Orphan_all() noexcept {}\r\n    _CONSTEXPR20 void _Swap_proxy_and_iterators(_Container_base0&) noexcept {}\r\n    _CONSTEXPR20 void _Alloc_proxy(const _Fake_allocator&) noexcept {}\r\n    _CONSTEXPR20 void _Reload_proxy(const _Fake_allocator&, const _Fake_allocator&) noexcept {}\r\n};\r\n\r\nstruct _Iterator_base0 {\r\n    _CONSTEXPR20 void _Adopt(const void*) noexcept {}\r\n    _CONSTEXPR20 const _Container_base0* _Getcont() const noexcept {\r\n        return nullptr;\r\n    }\r\n\r\n    static constexpr bool _Unwrap_when_unverified = true;\r\n};\r\n\r\nstruct _Container_base12;\r\nstruct _Container_proxy { // store head of iterator chain and back pointer\r\n    _CONSTEXPR20 _Container_proxy() noexcept = default;\r\n    _CONSTEXPR20 _Container_proxy(_Container_base12* _Mycont_) noexcept : _Mycont(_Mycont_) {}\r\n\r\n    const _Container_base12* _Mycont       = nullptr;\r\n    mutable _Iterator_base12* _Myfirstiter = nullptr;\r\n};\r\n\r\nstruct _Container_base12 {\r\npublic:\r\n    _CONSTEXPR20 _Container_base12() noexcept = default;\r\n\r\n    _Container_base12(const _Container_base12&)            = delete;\r\n    _Container_base12& operator=(const _Container_base12&) = delete;\r\n\r\n    _CONSTEXPR20 void _Orphan_all() noexcept;\r\n    _CONSTEXPR20 void _Swap_proxy_and_iterators(_Container_base12&) noexcept;\r\n\r\n    template <class _Alloc>\r\n    _CONSTEXPR20 void _Alloc_proxy(_Alloc&& _Al) {\r\n        _Container_proxy* const _New_proxy = _Unfancy(_Al.allocate(1));\r\n        _Construct_in_place(*_New_proxy, this);\r\n        _Myproxy            = _New_proxy;\r\n        _New_proxy->_Mycont = this;\r\n    }\r\n\r\n    template <class _Alloc>\r\n    _CONSTEXPR20 void _Reload_proxy(_Alloc&& _Old_alloc, _Alloc&& _New_alloc) {\r\n        // pre: no iterators refer to the existing proxy\r\n        _Container_proxy* const _New_proxy = _Unfancy(_New_alloc.allocate(1));\r\n        _Construct_in_place(*_New_proxy, this);\r\n        _New_proxy->_Mycont = this;\r\n        _Delete_plain_internal(_Old_alloc, _STD exchange(_Myproxy, _New_proxy));\r\n    }\r\n\r\n    _Container_proxy* _Myproxy = nullptr;\r\n\r\nprivate:\r\n    _CONSTEXPR20 void _Orphan_all_unlocked_v3() noexcept;\r\n    _CONSTEXPR20 void _Swap_proxy_and_iterators_unlocked(_Container_base12&) noexcept;\r\n\r\n    void _Orphan_all_locked_v3() noexcept {\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        _Orphan_all_unlocked_v3();\r\n    }\r\n\r\n    void _Swap_proxy_and_iterators_locked(_Container_base12& _Right) noexcept {\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        _Swap_proxy_and_iterators_unlocked(_Right);\r\n    }\r\n};\r\n\r\nstruct _Iterator_base12 { // store links to container proxy, next iterator\r\npublic:\r\n    _CONSTEXPR20 _Iterator_base12() noexcept = default; // construct orphaned iterator\r\n\r\n    _CONSTEXPR20 _Iterator_base12(const _Iterator_base12& _Right) noexcept {\r\n        *this = _Right;\r\n    }\r\n\r\n    _CONSTEXPR20 _Iterator_base12& operator=(const _Iterator_base12& _Right) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n#if _HAS_CXX20\r\n        if (_STD is_constant_evaluated()) {\r\n            _Assign_unlocked(_Right);\r\n        } else\r\n#endif // _HAS_CXX20\r\n        {\r\n            _Assign_locked(_Right);\r\n        }\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 2 / _ITERATOR_DEBUG_LEVEL != 2 vvv\r\n        _Myproxy = _Right._Myproxy;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 2 ^^^\r\n        return *this;\r\n    }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    _CONSTEXPR20 ~_Iterator_base12() noexcept {\r\n#if _HAS_CXX20\r\n        if (_STD is_constant_evaluated()) {\r\n            _Orphan_me_unlocked_v3();\r\n        } else\r\n#endif // _HAS_CXX20\r\n        {\r\n            _Orphan_me_locked_v3();\r\n        }\r\n    }\r\n\r\n    _CONSTEXPR20 void _Adopt(const _Container_base12* _Parent) noexcept {\r\n#if _HAS_CXX20\r\n        if (_STD is_constant_evaluated()) {\r\n            _Adopt_unlocked(_Parent);\r\n        } else\r\n#endif // _HAS_CXX20\r\n        {\r\n            _Adopt_locked(_Parent);\r\n        }\r\n    }\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 2 / _ITERATOR_DEBUG_LEVEL != 2 vvv\r\n    _CONSTEXPR20 void _Adopt(const _Container_base12* _Parent) noexcept {\r\n        if (_Parent) { // have a parent, do adoption\r\n            _Myproxy = _Parent->_Myproxy;\r\n        } else { // no future parent, just disown current parent\r\n            _Myproxy = nullptr;\r\n        }\r\n    }\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 2 ^^^\r\n\r\n    _CONSTEXPR20 const _Container_base12* _Getcont() const noexcept {\r\n        return _Myproxy ? _Myproxy->_Mycont : nullptr;\r\n    }\r\n\r\n    static constexpr bool _Unwrap_when_unverified = _ITERATOR_DEBUG_LEVEL == 0;\r\n\r\n    mutable _Container_proxy* _Myproxy    = nullptr;\r\n    mutable _Iterator_base12* _Mynextiter = nullptr;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\nprivate:\r\n    _CONSTEXPR20 void _Assign_unlocked(const _Iterator_base12& _Right) noexcept {\r\n        if (_Myproxy == _Right._Myproxy) {\r\n            return;\r\n        }\r\n\r\n        if (_Right._Myproxy) {\r\n            _Adopt_unlocked(_Right._Myproxy->_Mycont);\r\n        } else { // becoming invalid, disown current parent\r\n            _Orphan_me_unlocked_v3();\r\n        }\r\n    }\r\n\r\n    void _Assign_locked(const _Iterator_base12& _Right) noexcept {\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        _Assign_unlocked(_Right);\r\n    }\r\n\r\n    _CONSTEXPR20 void _Adopt_unlocked(const _Container_base12* _Parent) noexcept {\r\n        if (!_Parent) {\r\n            _Orphan_me_unlocked_v3();\r\n            return;\r\n        }\r\n\r\n        _Container_proxy* _Parent_proxy = _Parent->_Myproxy;\r\n        if (_Myproxy != _Parent_proxy) { // change parentage\r\n            if (_Myproxy) { // adopted, remove self from list\r\n                _Orphan_me_unlocked_v3();\r\n            }\r\n            _Mynextiter                 = _Parent_proxy->_Myfirstiter;\r\n            _Parent_proxy->_Myfirstiter = this;\r\n            _Myproxy                    = _Parent_proxy;\r\n        }\r\n    }\r\n\r\n    void _Adopt_locked(const _Container_base12* _Parent) noexcept {\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        _Adopt_unlocked(_Parent);\r\n    }\r\n\r\n    _CONSTEXPR20 void _Orphan_me_unlocked_v3() noexcept {\r\n        if (!_Myproxy) { // already orphaned\r\n            return;\r\n        }\r\n\r\n        // adopted, remove self from list\r\n        _Iterator_base12** _Pnext = &_Myproxy->_Myfirstiter;\r\n        while (*_Pnext && *_Pnext != this) {\r\n            _Pnext = &(*_Pnext)->_Mynextiter;\r\n        }\r\n\r\n        _STL_VERIFY(*_Pnext, \"ITERATOR LIST CORRUPTED!\");\r\n        *_Pnext  = _Mynextiter;\r\n        _Myproxy = nullptr;\r\n    }\r\n\r\n    void _Orphan_me_locked_v3() noexcept {\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        _Orphan_me_unlocked_v3();\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n};\r\n\r\n_CONSTEXPR20 void _Container_base12::_Orphan_all_unlocked_v3() noexcept {\r\n    if (!_Myproxy) { // no proxy, already done\r\n        return;\r\n    }\r\n\r\n    // proxy allocated, drain it\r\n    for (auto _Pnext = _STD exchange(_Myproxy->_Myfirstiter, nullptr); _Pnext; _Pnext = _Pnext->_Mynextiter) {\r\n        _Pnext->_Myproxy = nullptr;\r\n    }\r\n}\r\n\r\n_CONSTEXPR20 void _Container_base12::_Orphan_all() noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n#if _HAS_CXX20\r\n    if (_STD is_constant_evaluated()) {\r\n        _Orphan_all_unlocked_v3();\r\n    } else\r\n#endif // _HAS_CXX20\r\n    {\r\n        _Orphan_all_locked_v3();\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n}\r\n\r\n_CONSTEXPR20 void _Container_base12::_Swap_proxy_and_iterators_unlocked(_Container_base12& _Right) noexcept {\r\n    _Container_proxy* _Temp = _Myproxy;\r\n    _Myproxy                = _Right._Myproxy;\r\n    _Right._Myproxy         = _Temp;\r\n\r\n    if (_Myproxy) {\r\n        _Myproxy->_Mycont = this;\r\n    }\r\n\r\n    if (_Right._Myproxy) {\r\n        _Right._Myproxy->_Mycont = &_Right;\r\n    }\r\n}\r\n\r\n_CONSTEXPR20 void _Container_base12::_Swap_proxy_and_iterators(_Container_base12& _Right) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n#if _HAS_CXX20\r\n    if (_STD is_constant_evaluated()) {\r\n        _Swap_proxy_and_iterators_unlocked(_Right);\r\n    } else\r\n#endif // _HAS_CXX20\r\n    {\r\n        _Swap_proxy_and_iterators_locked(_Right);\r\n    }\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 2 / _ITERATOR_DEBUG_LEVEL != 2 vvv\r\n    _Swap_proxy_and_iterators_unlocked(_Right);\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 2 ^^^\r\n}\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\nusing _Container_base = _Container_base0;\r\nusing _Iterator_base  = _Iterator_base0;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 0 / _ITERATOR_DEBUG_LEVEL > 0 vvv\r\nusing _Container_base = _Container_base12;\r\nusing _Iterator_base  = _Iterator_base12;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL > 0 ^^^\r\n\r\nstruct _Leave_proxy_unbound {\r\n    explicit _Leave_proxy_unbound() = default;\r\n}; // tag to indicate that a proxy is being allocated before it is safe to bind to a _Container_base12\r\n\r\nstruct _Fake_proxy_ptr_impl { // fake replacement for a container proxy smart pointer when no container proxy is in use\r\n    _Fake_proxy_ptr_impl(const _Fake_proxy_ptr_impl&)            = delete;\r\n    _Fake_proxy_ptr_impl& operator=(const _Fake_proxy_ptr_impl&) = delete;\r\n    _CONSTEXPR20 _Fake_proxy_ptr_impl(const _Fake_allocator&, _Leave_proxy_unbound) noexcept {}\r\n    _CONSTEXPR20 _Fake_proxy_ptr_impl(const _Fake_allocator&, const _Container_base0&) noexcept {}\r\n\r\n    _CONSTEXPR20 void _Bind(const _Fake_allocator&, _Container_base0*) noexcept {}\r\n    _CONSTEXPR20 void _Release() noexcept {}\r\n};\r\n\r\nstruct _Basic_container_proxy_ptr12 {\r\n    // smart pointer components for a _Container_proxy * that don't depend on the allocator\r\n    _Container_proxy* _Ptr = nullptr;\r\n\r\n    constexpr void _Release() noexcept { // disengage this _Basic_container_proxy_ptr12\r\n        _Ptr = nullptr;\r\n    }\r\n\r\nprotected:\r\n    _CONSTEXPR20 _Basic_container_proxy_ptr12()                       = default;\r\n    _Basic_container_proxy_ptr12(const _Basic_container_proxy_ptr12&) = delete;\r\n    _Basic_container_proxy_ptr12(_Basic_container_proxy_ptr12&&)      = delete;\r\n};\r\n\r\ntemplate <class _Alloc>\r\nstruct _Container_proxy_ptr12 : _Basic_container_proxy_ptr12 {\r\n    // smart pointer components for a _Container_proxy * for an allocator family\r\n    _Alloc& _Al;\r\n\r\n    _CONSTEXPR20 _Container_proxy_ptr12(_Alloc& _Al_, _Leave_proxy_unbound) : _Al(_Al_) {\r\n        // create a new unbound _Container_proxy\r\n        _Ptr = _Unfancy(_Al_.allocate(1));\r\n        _Construct_in_place(*_Ptr);\r\n    }\r\n\r\n    _CONSTEXPR20 _Container_proxy_ptr12(_Alloc& _Al_, _Container_base12& _Mycont) : _Al(_Al_) {\r\n        // create a new _Container_proxy pointing at _Mycont\r\n        _Ptr = _Unfancy(_Al_.allocate(1));\r\n        _Construct_in_place(*_Ptr, _STD addressof(_Mycont));\r\n        _Mycont._Myproxy = _Ptr;\r\n    }\r\n\r\n    _CONSTEXPR20 void _Bind(_Alloc& _Old_alloc, _Container_base12* _Mycont) noexcept {\r\n        // Attach the proxy stored in *this to _Mycont, and destroy _Mycont's existing proxy\r\n        // with _Old_alloc. Requires that no iterators are alive referring to _Mycont.\r\n        _Ptr->_Mycont = _Mycont;\r\n        _Delete_plain_internal(_Old_alloc, _STD exchange(_Mycont->_Myproxy, _STD exchange(_Ptr, nullptr)));\r\n    }\r\n\r\n    _CONSTEXPR20 ~_Container_proxy_ptr12() {\r\n        if (_Ptr) {\r\n            _Delete_plain_internal(_Al, _Ptr);\r\n        }\r\n    }\r\n};\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\ntemplate <class _Alloc>\r\n_CONSTEXPR20 _Fake_allocator _Get_proxy_allocator(const _Alloc&) noexcept {\r\n    return {};\r\n}\r\n\r\ntemplate <class _Alloc>\r\nusing _Container_proxy_ptr = _Fake_proxy_ptr_impl;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 0 / _ITERATOR_DEBUG_LEVEL > 0 vvv\r\ntemplate <class _Alloc>\r\n_CONSTEXPR20 _Rebind_alloc_t<_Alloc, _Container_proxy> _Get_proxy_allocator(const _Alloc& _Al)\r\n    noexcept(noexcept(static_cast<_Rebind_alloc_t<_Alloc, _Container_proxy>>(_Al))) {\r\n    return static_cast<_Rebind_alloc_t<_Alloc, _Container_proxy>>(_Al);\r\n}\r\n\r\ntemplate <class _Alloc>\r\nusing _Container_proxy_ptr = _Container_proxy_ptr12<_Rebind_alloc_t<_Alloc, _Container_proxy>>;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL > 0 ^^^\r\n\r\nstruct _Zero_then_variadic_args_t {\r\n    explicit _Zero_then_variadic_args_t() = default;\r\n}; // tag type for value-initializing first, constructing second from remaining args\r\n\r\nstruct _One_then_variadic_args_t {\r\n    explicit _One_then_variadic_args_t() = default;\r\n}; // tag type for constructing first from one arg, constructing second from remaining args\r\n\r\ntemplate <class _Ty1, class _Ty2, bool = is_empty_v<_Ty1> && !is_final_v<_Ty1>>\r\nclass _Compressed_pair final : private _Ty1 { // store a pair of values, deriving from empty first\r\npublic:\r\n    _Ty2 _Myval2;\r\n\r\n    using _Mybase = _Ty1; // for visualization\r\n\r\n    template <class... _Other2>\r\n    constexpr explicit _Compressed_pair(_Zero_then_variadic_args_t, _Other2&&... _Val2)\r\n        noexcept(conjunction_v<is_nothrow_default_constructible<_Ty1>, is_nothrow_constructible<_Ty2, _Other2...>>)\r\n        : _Ty1(), _Myval2(_STD forward<_Other2>(_Val2)...) {}\r\n\r\n    template <class _Other1, class... _Other2>\r\n    constexpr _Compressed_pair(_One_then_variadic_args_t, _Other1&& _Val1, _Other2&&... _Val2)\r\n        noexcept(conjunction_v<is_nothrow_constructible<_Ty1, _Other1>, is_nothrow_constructible<_Ty2, _Other2...>>)\r\n        : _Ty1(_STD forward<_Other1>(_Val1)), _Myval2(_STD forward<_Other2>(_Val2)...) {}\r\n\r\n    constexpr _Ty1& _Get_first() noexcept {\r\n        return *this;\r\n    }\r\n\r\n    constexpr const _Ty1& _Get_first() const noexcept {\r\n        return *this;\r\n    }\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nclass _Compressed_pair<_Ty1, _Ty2, false> final { // store a pair of values, not deriving from first\r\npublic:\r\n    _Ty1 _Myval1;\r\n    _Ty2 _Myval2;\r\n\r\n    template <class... _Other2>\r\n    constexpr explicit _Compressed_pair(_Zero_then_variadic_args_t, _Other2&&... _Val2)\r\n        noexcept(conjunction_v<is_nothrow_default_constructible<_Ty1>, is_nothrow_constructible<_Ty2, _Other2...>>)\r\n        : _Myval1(), _Myval2(_STD forward<_Other2>(_Val2)...) {}\r\n\r\n    template <class _Other1, class... _Other2>\r\n    constexpr _Compressed_pair(_One_then_variadic_args_t, _Other1&& _Val1, _Other2&&... _Val2)\r\n        noexcept(conjunction_v<is_nothrow_constructible<_Ty1, _Other1>, is_nothrow_constructible<_Ty2, _Other2...>>)\r\n        : _Myval1(_STD forward<_Other1>(_Val1)), _Myval2(_STD forward<_Other2>(_Val2)...) {}\r\n\r\n    constexpr _Ty1& _Get_first() noexcept {\r\n        return _Myval1;\r\n    }\r\n\r\n    constexpr const _Ty1& _Get_first() const noexcept {\r\n        return _Myval1;\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\npair<_Ty*, ptrdiff_t> _Get_temporary_buffer(ptrdiff_t _Count) noexcept {\r\n    if (static_cast<size_t>(_Count) <= static_cast<size_t>(-1) / sizeof(_Ty)) {\r\n        for (; 0 < _Count; _Count /= 2) {\r\n            const auto _Size = static_cast<size_t>(_Count) * sizeof(_Ty);\r\n            void* _Pbuf;\r\n#ifdef __cpp_aligned_new\r\n            if constexpr (alignof(_Ty) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n                _Pbuf = ::operator new(_Size, align_val_t{alignof(_Ty)}, nothrow);\r\n            } else\r\n#endif // defined(__cpp_aligned_new)\r\n            {\r\n                _Pbuf = ::operator new(_Size, nothrow);\r\n            }\r\n\r\n            if (_Pbuf) {\r\n                return {static_cast<_Ty*>(_Pbuf), _Count};\r\n            }\r\n        }\r\n    }\r\n\r\n    return {nullptr, 0};\r\n}\r\n\r\ntemplate <class _Ty>\r\nvoid _Return_temporary_buffer(_Ty* const _Pbuf) noexcept {\r\n#ifdef __cpp_aligned_new\r\n    if constexpr (alignof(_Ty) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n        ::operator delete(_Pbuf, align_val_t{alignof(_Ty)});\r\n    } else\r\n#endif // defined(__cpp_aligned_new)\r\n    {\r\n        ::operator delete(_Pbuf);\r\n    }\r\n}\r\n\r\ntemplate <class _Ty, class _InIt>\r\nvoid _Construct_in_place_by_deref(_Ty& _Val, _InIt& _Iter)\r\n    noexcept(noexcept(::new (static_cast<void*>(_STD addressof(_Val))) _Ty(*_Iter))) {\r\n    ::new (static_cast<void*>(_STD addressof(_Val))) _Ty(*_Iter);\r\n}\r\n\r\ntemplate <class _NoThrowFwdIt>\r\nstruct _NODISCARD _Uninitialized_backout {\r\n    // struct to undo partially constructed ranges in _Uninitialized_xxx algorithms\r\n    _NoThrowFwdIt _First;\r\n    _NoThrowFwdIt _Last;\r\n\r\n    constexpr explicit _Uninitialized_backout(_NoThrowFwdIt _Dest) : _First(_Dest), _Last(_Dest) {}\r\n\r\n    constexpr _Uninitialized_backout(_NoThrowFwdIt _First_, _NoThrowFwdIt _Last_) : _First(_First_), _Last(_Last_) {}\r\n\r\n    _Uninitialized_backout(const _Uninitialized_backout&)            = delete;\r\n    _Uninitialized_backout& operator=(const _Uninitialized_backout&) = delete;\r\n\r\n    _CONSTEXPR20 ~_Uninitialized_backout() {\r\n        _STD _Destroy_range(_First, _Last);\r\n    }\r\n\r\n    template <class... _Types>\r\n    _CONSTEXPR20 void _Emplace_back(_Types&&... _Vals) {\r\n        // construct a new element at *_Last and increment\r\n        _STD _Construct_in_place(*_Last, _STD forward<_Types>(_Vals)...);\r\n        ++_Last;\r\n    }\r\n\r\n    template <class _InIt>\r\n    void _Emplace_back_deref(_InIt& _Iter) {\r\n        // construct a new element at *_Last from the result of dereferencing _Iter and increment.\r\n        _STD _Construct_in_place_by_deref(*_Last, _Iter);\r\n        ++_Last;\r\n    }\r\n\r\n    template <class _InIt>\r\n    void _Emplace_back_deref_move(_InIt& _Iter) {\r\n        // construct a new element at *_Last from the result of dereferencing _Iter and increment,\r\n        // with lvalue cast to xvalue if necessary for uninitialized_move(_n).\r\n        if constexpr (is_lvalue_reference_v<decltype(*_Iter)>) {\r\n            _STD _Construct_in_place(*_Last, _STD move(*_Iter));\r\n        } else {\r\n            _STD _Construct_in_place_by_deref(*_Last, _Iter);\r\n        }\r\n        ++_Last;\r\n    }\r\n\r\n    constexpr _NoThrowFwdIt _Release() { // suppress any exception handling backout and return _Last\r\n        _First = _Last;\r\n        return _Last;\r\n    }\r\n};\r\n\r\ntemplate <class _InIt, class _NoThrowFwdIt>\r\n_NoThrowFwdIt _Uninitialized_move_unchecked(_InIt _First, const _InIt _Last, _NoThrowFwdIt _Dest) {\r\n    // move [_First, _Last) to raw [_Dest, ...)\r\n    if constexpr (_Iter_move_cat<_InIt, _NoThrowFwdIt>::_Bitcopy_constructible) {\r\n#if 0 // TRANSITION, _HAS_CXX26\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX26\r\n        {\r\n            return _STD _Copy_memmove(_First, _Last, _Dest);\r\n        }\r\n    }\r\n    _Uninitialized_backout<_NoThrowFwdIt> _Backout{_Dest};\r\n    for (; _First != _Last; ++_First) {\r\n        _Backout._Emplace_back_deref_move(_First);\r\n    }\r\n\r\n    return _Backout._Release();\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <class _It>\r\n    concept _No_throw_input_iterator =\r\n        input_iterator<_It> && is_lvalue_reference_v<iter_reference_t<_It>>\r\n        && same_as<remove_cvref_t<iter_reference_t<_It>>, remove_reference_t<iter_reference_t<_It>>> // per LWG-3888\r\n        && same_as<remove_cvref_t<iter_reference_t<_It>>, iter_value_t<_It>>;\r\n\r\n    template <class _Se, class _It>\r\n    concept _No_throw_sentinel_for = sentinel_for<_Se, _It>;\r\n\r\n    template <class _It>\r\n    concept _No_throw_forward_iterator =\r\n        _No_throw_input_iterator<_It> && forward_iterator<_It> && _No_throw_sentinel_for<_It, _It>;\r\n\r\n    template <class _Rng>\r\n    concept _No_throw_input_range = range<_Rng> && _No_throw_input_iterator<iterator_t<_Rng>>\r\n                                 && _No_throw_sentinel_for<sentinel_t<_Rng>, iterator_t<_Rng>>;\r\n\r\n    template <class _Rng>\r\n    concept _No_throw_forward_range = _No_throw_input_range<_Rng> && _No_throw_forward_iterator<iterator_t<_Rng>>;\r\n\r\n    template <class _InIt, class _OutIt>\r\n    in_out_result<_InIt, _OutIt> _Copy_memcpy_count(_InIt _IFirst, _OutIt _OFirst, const size_t _Count) noexcept {\r\n        // (pre-verified contiguous iterator)\r\n        const auto _IFirstPtr     = _STD _To_address(_IFirst);\r\n        const auto _OFirstPtr     = _STD _To_address(_OFirst);\r\n        const auto _IFirst_ch     = const_cast<char*>(reinterpret_cast<const volatile char*>(_IFirstPtr));\r\n        const auto _OFirst_ch     = const_cast<char*>(reinterpret_cast<const volatile char*>(_OFirstPtr));\r\n        const size_t _Count_bytes = _Count * sizeof(iter_value_t<_InIt>);\r\n        _CSTD memcpy(_OFirst_ch, _IFirst_ch, _Count_bytes);\r\n        if constexpr (is_pointer_v<_InIt>) {\r\n            _IFirst = reinterpret_cast<_InIt>(_IFirst_ch + _Count_bytes);\r\n        } else {\r\n            _IFirst += static_cast<iter_difference_t<_InIt>>(_Count);\r\n        }\r\n\r\n        if constexpr (is_pointer_v<_OutIt>) {\r\n            _OFirst = reinterpret_cast<_OutIt>(_OFirst_ch + _Count_bytes);\r\n        } else {\r\n            _OFirst += static_cast<iter_difference_t<_OutIt>>(_Count);\r\n        }\r\n        return {_STD move(_IFirst), _STD move(_OFirst)};\r\n    }\r\n\r\n    template <class _InIt, class _OutIt, class _DistIt>\r\n    in_out_result<_InIt, _OutIt> _Copy_memcpy_distance(\r\n        _InIt _IFirst, _OutIt _OFirst, const _DistIt _DFirst, const _DistIt _DLast) noexcept {\r\n        // (pre-verified contiguous iterator)\r\n        // equivalent to _Copy_memcpy_count(_IFirst, _OFirst, _DLast - _DFirst) but computes distance more efficiently\r\n        const auto _IFirstPtr   = _STD _To_address(_IFirst);\r\n        const auto _OFirstPtr   = _STD _To_address(_OFirst);\r\n        const auto _DFirstPtr   = _STD _To_address(_DFirst);\r\n        const auto _DLastPtr    = _STD _To_address(_DLast);\r\n        const auto _IFirst_ch   = const_cast<char*>(reinterpret_cast<const volatile char*>(_IFirstPtr));\r\n        const auto _OFirst_ch   = const_cast<char*>(reinterpret_cast<const volatile char*>(_OFirstPtr));\r\n        const auto _DFirst_ch   = const_cast<char*>(reinterpret_cast<const volatile char*>(_DFirstPtr));\r\n        const auto _DLast_ch    = const_cast<char*>(reinterpret_cast<const volatile char*>(_DLastPtr));\r\n        const auto _Count_bytes = static_cast<size_t>(_DLast_ch - _DFirst_ch);\r\n        _CSTD memcpy(_OFirst_ch, _IFirst_ch, _Count_bytes);\r\n        if constexpr (is_pointer_v<_InIt>) {\r\n            _IFirst = reinterpret_cast<_InIt>(_IFirst_ch + _Count_bytes);\r\n        } else {\r\n            _IFirst += static_cast<iter_difference_t<_InIt>>(_Count_bytes / sizeof(iter_value_t<_InIt>));\r\n        }\r\n\r\n        if constexpr (is_pointer_v<_OutIt>) {\r\n            _OFirst = reinterpret_cast<_OutIt>(_OFirst_ch + _Count_bytes);\r\n        } else {\r\n            _OFirst += static_cast<iter_difference_t<_OutIt>>(_Count_bytes / sizeof(iter_value_t<_OutIt>));\r\n        }\r\n        return {_STD move(_IFirst), _STD move(_OFirst)};\r\n    }\r\n\r\n    template <class _InIt, class _OutIt>\r\n    in_out_result<_InIt, _OutIt> _Copy_memcpy_common(\r\n        _InIt _IFirst, _InIt _ILast, _OutIt _OFirst, _OutIt _OLast) noexcept {\r\n        const auto _IFirstPtr   = _STD _To_address(_IFirst);\r\n        const auto _ILastPtr    = _STD _To_address(_ILast);\r\n        const auto _OFirstPtr   = _STD _To_address(_OFirst);\r\n        const auto _OLastPtr    = _STD _To_address(_OLast);\r\n        const auto _IFirst_ch   = const_cast<char*>(reinterpret_cast<const volatile char*>(_IFirstPtr));\r\n        const auto _ILast_ch    = const_cast<const char*>(reinterpret_cast<const volatile char*>(_ILastPtr));\r\n        const auto _OFirst_ch   = const_cast<char*>(reinterpret_cast<const volatile char*>(_OFirstPtr));\r\n        const auto _OLast_ch    = const_cast<const char*>(reinterpret_cast<const volatile char*>(_OLastPtr));\r\n        const auto _Count_bytes = static_cast<size_t>((_STD min) (_ILast_ch - _IFirst_ch, _OLast_ch - _OFirst_ch));\r\n        _CSTD memcpy(_OFirst_ch, _IFirst_ch, _Count_bytes);\r\n        if constexpr (is_pointer_v<_InIt>) {\r\n            _IFirst = reinterpret_cast<_InIt>(_IFirst_ch + _Count_bytes);\r\n        } else {\r\n            _IFirst += static_cast<iter_difference_t<_InIt>>(_Count_bytes / sizeof(iter_value_t<_InIt>));\r\n        }\r\n\r\n        if constexpr (is_pointer_v<_OutIt>) {\r\n            _OFirst = reinterpret_cast<_OutIt>(_OFirst_ch + _Count_bytes);\r\n        } else {\r\n            _OFirst += static_cast<iter_difference_t<_OutIt>>(_Count_bytes / sizeof(iter_value_t<_OutIt>));\r\n        }\r\n        return {_STD move(_IFirst), _STD move(_OFirst)};\r\n    }\r\n\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using uninitialized_move_result = in_out_result<_In, _Out>;\r\n\r\n    template <input_iterator _It, sentinel_for<_It> _Se, _No_throw_forward_iterator _Out,\r\n        _No_throw_sentinel_for<_Out> _OSe>\r\n        requires (constructible_from<iter_value_t<_Out>, iter_rvalue_reference_t<_It>>)\r\n    uninitialized_move_result<_It, _Out> _Uninitialized_move_unchecked(\r\n        _It _IFirst, _Se _ILast, _Out _OFirst, _OSe _OLast) {\r\n        constexpr bool _Is_sized1  = sized_sentinel_for<_Se, _It>;\r\n        constexpr bool _Is_sized2  = sized_sentinel_for<_OSe, _Out>;\r\n        constexpr bool _Can_memcpy = _Iter_move_cat<_It, _Out>::_Bitcopy_constructible\r\n                                  && _Sized_or_unreachable_sentinel_for<_Se, _It>\r\n                                  && _Sized_or_unreachable_sentinel_for<_OSe, _Out>;\r\n        if constexpr (_Can_memcpy && (_Is_sized1 || _Is_sized2)) {\r\n            if constexpr (_Is_sized1 && _Is_sized2) {\r\n                return _RANGES _Copy_memcpy_common(_IFirst, _RANGES next(_IFirst, _STD move(_ILast)), _OFirst,\r\n                    _RANGES next(_OFirst, _STD move(_OLast)));\r\n            } else if constexpr (_Is_sized1) {\r\n                const auto _Dist = _ILast - _IFirst;\r\n                _STD _Contiguous_iter_verify(_OFirst, static_cast<iter_difference_t<_Out>>(_Dist));\r\n                return _RANGES _Copy_memcpy_distance(_IFirst, _OFirst, _IFirst, _IFirst + _Dist);\r\n            } else {\r\n                _STL_INTERNAL_STATIC_ASSERT(_Is_sized2);\r\n                const auto _Dist = _OLast - _OFirst;\r\n                _STD _Contiguous_iter_verify(_IFirst, static_cast<iter_difference_t<_It>>(_Dist));\r\n                return _RANGES _Copy_memcpy_distance(_IFirst, _OFirst, _OFirst, _OFirst + _Dist);\r\n            }\r\n        } else {\r\n            if constexpr (_Can_memcpy) {\r\n                // We were eligible for the memcpy optimization above, except for both sentinels being unreachable.\r\n                // The following classic code is doomed, because no exceptions will end the infinite loop.\r\n                // Following our usual pattern, let's emit a debug assertion, then run the loop anyways.\r\n                _STL_ASSERT(false, \"Tried to std::uninitialized_move() two ranges with unreachable sentinels\");\r\n            }\r\n\r\n            _Uninitialized_backout _Backout{_STD move(_OFirst)};\r\n\r\n            for (; _IFirst != _ILast && _Backout._Last != _OLast; ++_IFirst) {\r\n                _Backout._Emplace_back(_RANGES iter_move(_IFirst));\r\n            }\r\n\r\n            return {_STD move(_IFirst), _Backout._Release()};\r\n        }\r\n    }\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Alloc>\r\nclass _NODISCARD _Uninitialized_backout_al {\r\n    // struct to undo partially constructed ranges in _Uninitialized_xxx_al algorithms\r\nprivate:\r\n    using pointer = _Alloc_ptr_t<_Alloc>;\r\n\r\npublic:\r\n    _CONSTEXPR20 _Uninitialized_backout_al(pointer _Dest, _Alloc& _Al_) : _First(_Dest), _Last(_Dest), _Al(_Al_) {}\r\n\r\n    _Uninitialized_backout_al(const _Uninitialized_backout_al&)            = delete;\r\n    _Uninitialized_backout_al& operator=(const _Uninitialized_backout_al&) = delete;\r\n\r\n    _CONSTEXPR20 ~_Uninitialized_backout_al() {\r\n        _STD _Destroy_range(_First, _Last, _Al);\r\n    }\r\n\r\n    template <class... _Types>\r\n    _CONSTEXPR20 void _Emplace_back(_Types&&... _Vals) { // construct a new element at *_Last and increment\r\n        allocator_traits<_Alloc>::construct(_Al, _STD _Unfancy(_Last), _STD forward<_Types>(_Vals)...);\r\n        ++_Last;\r\n    }\r\n\r\n    constexpr pointer _Release() { // suppress any exception handling backout and return _Last\r\n        _First = _Last;\r\n        return _Last;\r\n    }\r\n\r\nprivate:\r\n    pointer _First;\r\n    pointer _Last;\r\n    _Alloc& _Al;\r\n};\r\n\r\ntemplate <class _InIt, class _Se, class _Alloc>\r\n_CONSTEXPR20 _Alloc_ptr_t<_Alloc> _Uninitialized_copy(\r\n    _InIt _First, _Se _Last, _Alloc_ptr_t<_Alloc> _Dest, _Alloc& _Al) {\r\n    // copy [_First, _Last) to raw _Dest, using _Al\r\n    // note: only called internally from elsewhere in the STL\r\n    using _Ptrval = typename _Alloc::value_type*;\r\n\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n    _STD _Adl_verify_range(_First, _Last);\r\n#endif // ^^^ defined(_ENABLE_STL_INTERNAL_CHECK) ^^^\r\n\r\n#if _HAS_CXX20\r\n    auto _UFirst = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n    auto _ULast  = _RANGES _Unwrap_sent<_InIt>(_STD move(_Last));\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    // In pre-concepts world, _Uninitialized_copy should only ever be called with an iterator\r\n    // and sentinel of the same type, so `_Get_unwrapped` is fine to call.\r\n    auto _UFirst = _STD _Get_unwrapped(_STD move(_First));\r\n    auto _ULast  = _STD _Get_unwrapped(_STD move(_Last));\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    constexpr bool _Can_memmove = _Sent_copy_cat<decltype(_UFirst), decltype(_ULast), _Ptrval>::_Bitcopy_constructible\r\n                               && _Uses_default_construct<_Alloc, _Ptrval, decltype(*_UFirst)>::value;\r\n\r\n    if constexpr (_Can_memmove) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            if constexpr (is_same_v<decltype(_UFirst), decltype(_ULast)>) {\r\n                _STD _Copy_memmove(_STD _To_address(_UFirst), _STD _To_address(_ULast), _STD _Unfancy(_Dest));\r\n                _Dest += _ULast - _UFirst;\r\n            } else {\r\n                const auto _Count = static_cast<size_t>(_STD _Contiguous_iter_distance(_UFirst, _ULast));\r\n                _STD _Copy_memmove_n(_STD _To_address(_UFirst), _Count, _STD _Unfancy(_Dest));\r\n                _Dest += _Count;\r\n            }\r\n            return _Dest;\r\n        }\r\n    }\r\n\r\n    _Uninitialized_backout_al<_Alloc> _Backout{_Dest, _Al};\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        _Backout._Emplace_back(*_UFirst);\r\n    }\r\n\r\n    return _Backout._Release();\r\n}\r\n\r\ntemplate <class _InIt, class _Alloc>\r\n_CONSTEXPR20 _Alloc_ptr_t<_Alloc> _Uninitialized_copy_n(\r\n    _InIt _First, size_t _Count, _Alloc_ptr_t<_Alloc> _Dest, _Alloc& _Al) {\r\n    // copy _First + [0, _Count) to raw _Dest, using _Al\r\n    // note: only called internally from elsewhere in the STL\r\n    using _Ptrval = typename _Alloc::value_type*;\r\n\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n    auto _UFirst = _STD _Get_unwrapped_n(_STD move(_First), _Count);\r\n#else // ^^^ Checking / No checking vvv\r\n    auto _UFirst = _STD _Get_unwrapped(_STD move(_First));\r\n#endif // ^^^ No checking ^^^\r\n\r\n    constexpr bool _Can_memmove =\r\n        conjunction_v<bool_constant<_Iter_copy_cat<decltype(_UFirst), _Ptrval>::_Bitcopy_constructible>,\r\n            _Uses_default_construct<_Alloc, _Ptrval, decltype(*_UFirst)>>;\r\n\r\n    if constexpr (_Can_memmove) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            _STD _Copy_memmove_n(_UFirst, _Count, _STD _Unfancy(_Dest));\r\n            _Dest += _Count;\r\n            return _Dest;\r\n        }\r\n    }\r\n\r\n    _Uninitialized_backout_al<_Alloc> _Backout{_Dest, _Al};\r\n    for (; _Count != 0; ++_UFirst, (void) --_Count) {\r\n        _Backout._Emplace_back(*_UFirst);\r\n    }\r\n\r\n    return _Backout._Release();\r\n}\r\n\r\ntemplate <class _InIt, class _NoThrowFwdIt>\r\n_NoThrowFwdIt _Uninitialized_copy_unchecked(_InIt _First, const _InIt _Last, _NoThrowFwdIt _Dest) {\r\n    // copy [_First, _Last) to raw [_Dest, ...)\r\n    if constexpr (_Iter_copy_cat<_InIt, _NoThrowFwdIt>::_Bitcopy_constructible) {\r\n#if 0 // TRANSITION, _HAS_CXX26\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX26\r\n        {\r\n            return _STD _Copy_memmove(_First, _Last, _Dest);\r\n        }\r\n    }\r\n\r\n    _Uninitialized_backout<_NoThrowFwdIt> _Backout{_Dest};\r\n    for (; _First != _Last; ++_First) {\r\n        _Backout._Emplace_back_deref(_First);\r\n    }\r\n\r\n    return _Backout._Release();\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _NoThrowFwdIt>\r\n_NoThrowFwdIt uninitialized_copy(const _InIt _First, const _InIt _Last, _NoThrowFwdIt _Dest) {\r\n    // copy [_First, _Last) to raw [_Dest, ...)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    auto _UDest       = _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_InIt>(_UFirst, _ULast));\r\n    _STD _Seek_wrapped(_Dest, _STD _Uninitialized_copy_unchecked(_UFirst, _ULast, _UDest));\r\n    return _Dest;\r\n}\r\n\r\ntemplate <class _InIt, class _Alloc>\r\n_CONSTEXPR20 _Alloc_ptr_t<_Alloc> _Uninitialized_move(\r\n    const _InIt _First, const _InIt _Last, _Alloc_ptr_t<_Alloc> _Dest, _Alloc& _Al) {\r\n    // move [_First, _Last) to raw _Dest, using _Al\r\n    // note: only called internally from elsewhere in the STL\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n    _STD _Adl_verify_range(_First, _Last);\r\n#endif // ^^^ defined(_ENABLE_STL_INTERNAL_CHECK) ^^^\r\n    using _Ptrval     = typename _Alloc::value_type*;\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if constexpr (conjunction_v<bool_constant<_Iter_move_cat<decltype(_UFirst), _Ptrval>::_Bitcopy_constructible>,\r\n                      _Uses_default_construct<_Alloc, _Ptrval, decltype(_STD move(*_UFirst))>>) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            _STD _Copy_memmove(_UFirst, _ULast, _STD _Unfancy(_Dest));\r\n            return _Dest + (_ULast - _UFirst);\r\n        }\r\n    }\r\n\r\n    _Uninitialized_backout_al<_Alloc> _Backout{_Dest, _Al};\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        _Backout._Emplace_back(_STD move(*_UFirst));\r\n    }\r\n\r\n    return _Backout._Release();\r\n}\r\n\r\ntemplate <class _Alloc>\r\n_CONSTEXPR20 _Alloc_ptr_t<_Alloc> _Uninitialized_fill_n(\r\n    _Alloc_ptr_t<_Alloc> _First, _Alloc_size_t<_Alloc> _Count, const typename _Alloc::value_type& _Val, _Alloc& _Al) {\r\n    // copy _Count copies of _Val to raw _First, using _Al\r\n    using _Ty = typename _Alloc::value_type;\r\n    if constexpr (_Fill_memset_is_safe<_Ty*, _Ty> && _Uses_default_construct<_Alloc, _Ty*, _Ty>::value) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            _Fill_memset(_Unfancy(_First), _Val, static_cast<size_t>(_Count));\r\n            return _First + _Count;\r\n        }\r\n    } else if constexpr (_Fill_zero_memset_is_safe<_Ty*, _Ty> && _Uses_default_construct<_Alloc, _Ty*, _Ty>::value) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            if (_Is_all_bits_zero(_Val)) {\r\n                _Fill_zero_memset(_Unfancy(_First), static_cast<size_t>(_Count));\r\n                return _First + _Count;\r\n            }\r\n        }\r\n    }\r\n\r\n    _Uninitialized_backout_al<_Alloc> _Backout{_First, _Al};\r\n    for (; 0 < _Count; --_Count) {\r\n        _Backout._Emplace_back(_Val);\r\n    }\r\n\r\n    return _Backout._Release();\r\n}\r\n\r\n_EXPORT_STD template <class _NoThrowFwdIt, class _Tval>\r\nvoid uninitialized_fill(const _NoThrowFwdIt _First, const _NoThrowFwdIt _Last, const _Tval& _Val) {\r\n    // copy _Val throughout raw [_First, _Last)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if constexpr (_Fill_memset_is_safe<_Unwrapped_t<const _NoThrowFwdIt&>, _Tval>) {\r\n        _STD _Fill_memset(_UFirst, _Val, static_cast<size_t>(_ULast - _UFirst));\r\n    } else {\r\n        if constexpr (_Fill_zero_memset_is_safe<_Unwrapped_t<const _NoThrowFwdIt&>, _Tval>) {\r\n            if (_STD _Is_all_bits_zero(_Val)) {\r\n                _STD _Fill_zero_memset(_UFirst, static_cast<size_t>(_ULast - _UFirst));\r\n                return;\r\n            }\r\n        }\r\n\r\n        _Uninitialized_backout<_Unwrapped_t<const _NoThrowFwdIt&>> _Backout{_UFirst};\r\n        while (_Backout._Last != _ULast) {\r\n            _Backout._Emplace_back(_Val);\r\n        }\r\n\r\n        _Backout._Release();\r\n    }\r\n}\r\n\r\ntemplate <class _NoThrowFwdIt>\r\nconstexpr bool _Use_memset_value_construct_v = conjunction_v<bool_constant<_Iterator_is_contiguous<_NoThrowFwdIt>>,\r\n    is_scalar<_Iter_value_t<_NoThrowFwdIt>>, negation<is_volatile<remove_reference_t<_Iter_ref_t<_NoThrowFwdIt>>>>,\r\n    negation<is_member_pointer<_Iter_value_t<_NoThrowFwdIt>>>>;\r\n\r\ntemplate <class _Ptr>\r\n_Ptr _Zero_range(const _Ptr _First, const _Ptr _Last) { // fill [_First, _Last) with zeroes\r\n    char* const _First_ch = reinterpret_cast<char*>(_STD _To_address(_First));\r\n    char* const _Last_ch  = reinterpret_cast<char*>(_STD _To_address(_Last));\r\n    _CSTD memset(_First_ch, 0, static_cast<size_t>(_Last_ch - _First_ch));\r\n    return _Last;\r\n}\r\n\r\ntemplate <class _Alloc>\r\n_CONSTEXPR20 _Alloc_ptr_t<_Alloc> _Uninitialized_value_construct_n(\r\n    _Alloc_ptr_t<_Alloc> _First, _Alloc_size_t<_Alloc> _Count, _Alloc& _Al) {\r\n    // value-initialize _Count objects to raw _First, using _Al\r\n    using _Ptrty = typename _Alloc::value_type*;\r\n    if constexpr (_Use_memset_value_construct_v<_Ptrty> && _Uses_default_construct<_Alloc, _Ptrty>::value) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            auto _PFirst = _Unfancy(_First);\r\n            _Zero_range(_PFirst, _PFirst + _Count);\r\n            return _First + _Count;\r\n        }\r\n    }\r\n\r\n    _Uninitialized_backout_al<_Alloc> _Backout{_First, _Al};\r\n    for (; 0 < _Count; --_Count) {\r\n        _Backout._Emplace_back();\r\n    }\r\n\r\n    return _Backout._Release();\r\n}\r\n\r\ntemplate <class _NoThrowFwdIt, class _Diff>\r\n_NoThrowFwdIt _Uninitialized_value_construct_n_unchecked1(_NoThrowFwdIt _UFirst, _Diff _Count) {\r\n    // value-initialize all elements in [_UFirst, _UFirst + _Count)\r\n    _STL_INTERNAL_CHECK(_Count >= 0);\r\n    if constexpr (_Use_memset_value_construct_v<_NoThrowFwdIt>) {\r\n        return _STD _Zero_range(_UFirst, _UFirst + _Count);\r\n    } else {\r\n        _Uninitialized_backout<_NoThrowFwdIt> _Backout{_UFirst};\r\n        for (; 0 < _Count; --_Count) {\r\n            _Backout._Emplace_back();\r\n        }\r\n\r\n        return _Backout._Release();\r\n    }\r\n}\r\n\r\n#if _HAS_DEPRECATED_TEMPORARY_BUFFER\r\n_EXPORT_STD template <class _Ty>\r\n_CXX17_DEPRECATE_TEMPORARY_BUFFER _NODISCARD pair<_Ty*, ptrdiff_t> get_temporary_buffer(ptrdiff_t _Count) noexcept {\r\n    return _Get_temporary_buffer<_Ty>(_Count);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_CXX17_DEPRECATE_TEMPORARY_BUFFER void return_temporary_buffer(_Ty* _Pbuf) {\r\n    _Return_temporary_buffer(_Pbuf);\r\n}\r\n#endif // _HAS_DEPRECATED_TEMPORARY_BUFFER\r\n\r\n// The key_type of an (unordered) associative container is cv-unqualified, and we can't bind const Key& to a\r\n// volatile glvalue. Also, Cpp17CopyInsertable and Cpp17MoveInsertable don't require value-preservation for\r\n// the construction from a volatile glvalue, so generally we can't perform this optimization for them.\r\n// See N4993 [container.alloc.reqmts]/2.3, /2.4.\r\ntemplate <class _Ty>\r\nusing _Remove_const_ref_t = remove_const_t<remove_reference_t<_Ty>>;\r\n\r\n// assumes _Args have already been _Remove_const_ref_t'd\r\ntemplate <class _Key, class... _Args>\r\nstruct _In_place_key_extract_set_impl {\r\n    // by default we can't extract the key in the emplace family and must construct a node we might not use\r\n    static constexpr bool _Extractable = false;\r\n};\r\n\r\ntemplate <class _Key>\r\nstruct _In_place_key_extract_set_impl<_Key, _Key> {\r\n    // we can extract the key in emplace if the emplaced type is identical to the key type\r\n    static constexpr bool _Extractable = true;\r\n    static const _Key& _Extract(const _Key& _Val) noexcept {\r\n        return _Val;\r\n    }\r\n};\r\n\r\ntemplate <class... _Valtys>\r\nusing _In_place_key_extract_set = _In_place_key_extract_set_impl<_Remove_const_ref_t<_Valtys>...>;\r\n\r\n// assumes _Args have already been _Remove_const_ref_t'd\r\ntemplate <class _Key, class... _Args>\r\nstruct _In_place_key_extract_map_impl {\r\n    // by default we can't extract the key in the emplace family and must construct a node we might not use\r\n    static constexpr bool _Extractable = false;\r\n};\r\n\r\ntemplate <class _Key, class _Second>\r\nstruct _In_place_key_extract_map_impl<_Key, _Key, _Second> {\r\n    // if we would call the pair(key, value) constructor family, we can use the first parameter as the key\r\n    static constexpr bool _Extractable = true;\r\n    static const _Key& _Extract(const _Key& _Val, const _Second&) noexcept {\r\n        return _Val;\r\n    }\r\n};\r\n\r\ntemplate <class _Key, class _First, class _Second>\r\nstruct _In_place_key_extract_map_impl<_Key, pair<_First, _Second>> {\r\n    // if we would call the pair(pair<other, other>) constructor family, we can use the pair.first member as the key\r\n    static constexpr bool _Extractable = is_same_v<_Key, _Remove_const_ref_t<_First>>;\r\n    static const _Key& _Extract(const pair<_First, _Second>& _Val) noexcept {\r\n        return _Val.first;\r\n    }\r\n};\r\n\r\n#if _HAS_CXX23\r\n// if we would call the pair(pair-like) constructor family and the argument is not a subrange,\r\n// we can use get<0>(pair-like) as the key\r\n\r\ntemplate <class _Key, class _Elem>\r\nstruct _In_place_key_extract_map_impl<_Key, array<_Elem, 2>> {\r\n    static constexpr bool _Extractable = is_same_v<_Key, remove_const_t<_Elem>>;\r\n    static const _Key& _Extract(const array<_Elem, 2>& _Val) noexcept {\r\n        return _Val[0];\r\n    }\r\n};\r\n\r\ntemplate <class _Key, class _First, class _Second>\r\nstruct _In_place_key_extract_map_impl<_Key, tuple<_First, _Second>> {\r\n    static constexpr bool _Extractable = is_same_v<_Key, _Remove_const_ref_t<_First>>;\r\n    static const _Key& _Extract(const tuple<_First, _Second>& _Val) noexcept {\r\n        return _STD get<0>(_Val);\r\n    }\r\n};\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Key, class _First, class... _RestTypes>\r\nstruct _In_place_key_extract_map_impl<_Key, piecewise_construct_t, tuple<_First>, tuple<_RestTypes...>> {\r\n    // if we would call the piecewise_construct_t constructor and the first argument is a 1-tuple,\r\n    // we can use get<0>(first_tuple) as the key\r\n    static constexpr bool _Extractable = is_same_v<_Key, _Remove_const_ref_t<_First>>;\r\n    static const _Key& _Extract(\r\n        const piecewise_construct_t&, const tuple<_First>& _Tup_val, const tuple<_RestTypes...>&) noexcept {\r\n        return _STD get<0>(_Tup_val);\r\n    }\r\n};\r\n\r\ntemplate <class... _Valtys>\r\nusing _In_place_key_extract_map = _In_place_key_extract_map_impl<_Remove_const_ref_t<_Valtys>...>;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4624) // '%s': destructor was implicitly defined as deleted\r\ntemplate <class _Ty>\r\nstruct _Wrap {\r\n    _Ty _Value; // workaround for VSO-586813 \"T^ is not allowed in a union\"\r\n};\r\n#pragma warning(pop)\r\n\r\ntemplate <class _Alloc>\r\nstruct _Alloc_temporary2 {\r\n    using value_type = typename _Alloc::value_type;\r\n    using _Traits    = allocator_traits<_Alloc>;\r\n\r\n    _Alloc& _Al;\r\n\r\n#ifdef __cplusplus_winrt\r\n    union {\r\n        _Wrap<value_type> _Storage;\r\n    };\r\n\r\n    _NODISCARD _CONSTEXPR20 value_type& _Get_value() noexcept {\r\n        return _Storage._Value;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const value_type& _Get_value() const noexcept {\r\n        return _Storage._Value;\r\n    }\r\n#else // ^^^ workaround for VSO-586813 \"T^ is not allowed in a union\" / no workaround vvv\r\n    union {\r\n        value_type _Value;\r\n    };\r\n\r\n    _NODISCARD _CONSTEXPR20 value_type& _Get_value() noexcept {\r\n        return _Value;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const value_type& _Get_value() const noexcept {\r\n        return _Value;\r\n    }\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    template <class... _Args>\r\n    _CONSTEXPR20 explicit _Alloc_temporary2(_Alloc& _Al_, _Args&&... _Vals)\r\n        noexcept(noexcept(_Traits::construct(_Al_, _STD addressof(_Get_value()), _STD forward<_Args>(_Vals)...)))\r\n        : _Al(_Al_) {\r\n        _Traits::construct(_Al, _STD addressof(_Get_value()), _STD forward<_Args>(_Vals)...);\r\n    }\r\n\r\n    _Alloc_temporary2(const _Alloc_temporary2&)            = delete;\r\n    _Alloc_temporary2& operator=(const _Alloc_temporary2&) = delete;\r\n\r\n    _CONSTEXPR20 ~_Alloc_temporary2() {\r\n        _Traits::destroy(_Al, _STD addressof(_Get_value()));\r\n    }\r\n};\r\n\r\ntemplate <class _Alloc>\r\n_NODISCARD constexpr bool _Allocators_equal(const _Alloc& _Lhs, const _Alloc& _Rhs) noexcept {\r\n    if constexpr (allocator_traits<_Alloc>::is_always_equal::value) {\r\n        return true;\r\n    } else {\r\n        return _Lhs == _Rhs;\r\n    }\r\n}\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Ty>\r\nconstexpr bool _Has_member_from_primary = requires { typename _Ty::_From_primary; };\r\n\r\n// Avoid using allocate_at_least when the allocator publicly derives from std::allocator:\r\n// \"old\" allocators might hide allocate and deallocate but fail to hide allocate_at_least.\r\n// Also avoid using allocate_at_least from std::allocator itself because it currently doesn't do anything useful.\r\ntemplate <class _Alloc>\r\nconstexpr bool _Should_allocate_at_least =\r\n    !_Has_member_from_primary<_Alloc>\r\n    && _Has_member_allocate_at_least<_Alloc, typename allocator_traits<_Alloc>::size_type>;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Alloc>\r\n_NODISCARD_RAW_PTR_ALLOC _CONSTEXPR20 typename allocator_traits<_Alloc>::pointer _Allocate_at_least_helper(\r\n    _Alloc& _Al, _CRT_GUARDOVERFLOW typename allocator_traits<_Alloc>::size_type& _Count) {\r\n#if _HAS_CXX23\r\n    if constexpr (_Should_allocate_at_least<_Alloc>) {\r\n        auto [_Ptr, _Allocated] = _Al.allocate_at_least(_Count);\r\n        _Count                  = _Allocated;\r\n        return _Ptr;\r\n    } else\r\n#endif // _HAS_CXX23\r\n    {\r\n        return _Al.allocate(_Count);\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Ty>\r\n_NODISCARD_REMOVE_ALG _CONSTEXPR20 _FwdIt remove(_FwdIt _First, const _FwdIt _Last, const _Ty& _Val) {\r\n    // remove each matching _Val\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    _UFirst           = _STD _Find_unchecked(_UFirst, _ULast, _Val);\r\n    auto _UNext       = _UFirst;\r\n    if (_UFirst != _ULast) {\r\n#if _VECTORIZED_REMOVE\r\n        if constexpr (_Vector_alg_in_find_is_safe<decltype(_UFirst), _Ty>) {\r\n#if _HAS_CXX20\r\n            if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n            {\r\n                const auto _First_ptr = _STD _To_address(_UFirst);\r\n                const auto _Result    = _STD _Remove_vectorized(_First_ptr, _STD _To_address(_ULast), _Val);\r\n\r\n                if constexpr (is_pointer_v<decltype(_UNext)>) {\r\n                    _UNext = _Result;\r\n                } else {\r\n                    _UNext += static_cast<_Iter_diff_t<decltype(_UNext)>>(_Result - _First_ptr);\r\n                }\r\n\r\n                _STD _Seek_wrapped(_First, _UNext);\r\n                return _First;\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_REMOVE ^^^\r\n\r\n        while (++_UFirst != _ULast) {\r\n            if (!(*_UFirst == _Val)) {\r\n                *_UNext = _STD move(*_UFirst);\r\n                ++_UNext;\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First, _UNext);\r\n    return _First;\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Pr>\r\n_NODISCARD_REMOVE_ALG _CONSTEXPR20 _FwdIt remove_if(_FwdIt _First, const _FwdIt _Last, _Pr _Pred) {\r\n    // remove each satisfying _Pred\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    _UFirst           = _STD find_if(_UFirst, _ULast, _STD _Pass_fn(_Pred));\r\n    auto _UNext       = _UFirst;\r\n    if (_UFirst != _ULast) {\r\n        while (++_UFirst != _ULast) {\r\n            if (!_Pred(*_UFirst)) {\r\n                *_UNext = _STD move(*_UFirst);\r\n                ++_UNext;\r\n            }\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First, _UNext);\r\n    return _First;\r\n}\r\n\r\ntemplate <class _Container, class _Uty>\r\n_CONSTEXPR20 typename _Container::size_type _Erase_remove(_Container& _Cont, const _Uty& _Val) {\r\n    // erase each element matching _Val\r\n    auto _First          = _Cont.begin();\r\n    const auto _Last     = _Cont.end();\r\n    const auto _Old_size = _Cont.size();\r\n    _STD _Seek_wrapped(_First, _STD remove(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last), _Val));\r\n    _Cont.erase(_First, _Last);\r\n    return static_cast<typename _Container::size_type>(_Old_size - _Cont.size());\r\n}\r\n\r\ntemplate <class _Container, class _Pr>\r\n_CONSTEXPR20 typename _Container::size_type _Erase_remove_if(_Container& _Cont, _Pr _Pred) {\r\n    // erase each element satisfying _Pred\r\n    auto _First          = _Cont.begin();\r\n    const auto _Last     = _Cont.end();\r\n    const auto _Old_size = _Cont.size();\r\n    _STD _Seek_wrapped(_First, _STD remove_if(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last), _Pred));\r\n    _Cont.erase(_First, _Last);\r\n    return static_cast<typename _Container::size_type>(_Old_size - _Cont.size());\r\n}\r\n\r\ntemplate <class _Container, class _Pr>\r\ntypename _Container::size_type _Erase_nodes_if(_Container& _Cont, _Pr _Pred) {\r\n    // erase each element satisfying _Pred\r\n    auto _First          = _Cont.begin();\r\n    const auto _Last     = _Cont.end();\r\n    const auto _Old_size = _Cont.size();\r\n    while (_First != _Last) {\r\n        if (_Pred(*_First)) {\r\n            _First = _Cont.erase(_First);\r\n        } else {\r\n            ++_First;\r\n        }\r\n    }\r\n    return _Old_size - _Cont.size();\r\n}\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nvoid _Deduce_as_pair(const pair<_Ty1, _Ty2>&); // not defined\r\n\r\ntemplate <class _Ty, class = void>\r\nconstexpr bool _Is_deducible_as_pair = false;\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_deducible_as_pair<_Ty, decltype(_STD _Deduce_as_pair(_STD declval<_Ty>()))> = true;\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_cv_pair = _Is_specialization_v<remove_cv_t<_Ty>, pair>;\r\n\r\ntemplate <class _Ty>\r\nconst _Ty& _Normally_bind(_Identity_t<const _Ty&>); // not defined\r\n\r\ntemplate <class _Ty>\r\n_Ty&& _Normally_bind(_Identity_t<_Ty&&>); // not defined\r\n\r\ntemplate <class _Ty, class _Uty>\r\nusing _Normally_bound_ref = decltype(_STD _Normally_bind<_Ty>(_STD declval<_Uty>()));\r\n\r\ntemplate <class _Ty, class _Uty, class = void>\r\nconstexpr bool _Is_normally_bindable = false;\r\n\r\ntemplate <class _Ty, class _Uty>\r\nconstexpr bool _Is_normally_bindable<_Ty, _Uty, void_t<_Normally_bound_ref<_Ty, _Uty>>> = true;\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty>\r\nconcept _Cv_std_pair = _Is_cv_pair<_Ty>;\r\n\r\ntemplate <class _Ty>\r\nconcept _Usable_for_pair_like_overload =\r\n#if _HAS_CXX23\r\n    _Pair_like<_Ty> ||\r\n#endif // _HAS_CXX23\r\n    !_Is_deducible_as_pair<_Ty&>;\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc, class... _Types>\r\n    requires (!_Is_cv_pair<_Ty>)\r\n_NODISCARD constexpr auto uses_allocator_construction_args(const _Alloc& _Al, _Types&&... _Args) noexcept {\r\n    if constexpr (!uses_allocator_v<remove_cv_t<_Ty>, _Alloc>) {\r\n        static_assert(is_constructible_v<_Ty, _Types...>,\r\n            \"If uses_allocator_v<remove_cv_t<T>, Alloc> is false, \"\r\n            \"T must be constructible from (Types...). (N4981 [allocator.uses.construction]/5)\");\r\n        (void) _Al;\r\n        return _STD forward_as_tuple(_STD forward<_Types>(_Args)...);\r\n    } else if constexpr (is_constructible_v<_Ty, allocator_arg_t, const _Alloc&, _Types...>) {\r\n        using _ReturnType = tuple<allocator_arg_t, const _Alloc&, _Types&&...>;\r\n        return _ReturnType{allocator_arg, _Al, _STD forward<_Types>(_Args)...};\r\n    } else if constexpr (is_constructible_v<_Ty, _Types..., const _Alloc&>) {\r\n        return _STD forward_as_tuple(_STD forward<_Types>(_Args)..., _Al);\r\n    } else {\r\n        static_assert(false, \"If uses_allocator_v<remove_cv_t<T>, Alloc> is true, \"\r\n                             \"T must be constructible from either (allocator_arg_t, const Alloc&, Types...) \"\r\n                             \"or (Types..., const Alloc&). (N4981 [allocator.uses.construction]/5)\");\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <_Cv_std_pair _Ty, class _Alloc>\r\n_NODISCARD constexpr auto uses_allocator_construction_args(const _Alloc& _Al) noexcept;\r\n\r\n_EXPORT_STD template <_Cv_std_pair _Ty, class _Alloc, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr auto uses_allocator_construction_args(const _Alloc& _Al, _Uty1&& _Val1, _Uty2&& _Val2) noexcept;\r\n\r\n#if _HAS_CXX23\r\n_EXPORT_STD template <_Cv_std_pair _Ty, class _Alloc, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr auto uses_allocator_construction_args(const _Alloc& _Al, pair<_Uty1, _Uty2>& _Pair) noexcept;\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD template <_Cv_std_pair _Ty, class _Alloc, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr auto uses_allocator_construction_args(const _Alloc& _Al, const pair<_Uty1, _Uty2>& _Pair) noexcept;\r\n\r\n_EXPORT_STD template <_Cv_std_pair _Ty, class _Alloc, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr auto uses_allocator_construction_args(const _Alloc& _Al, pair<_Uty1, _Uty2>&& _Pair) noexcept;\r\n\r\n#if _HAS_CXX23\r\n_EXPORT_STD template <_Cv_std_pair _Ty, class _Alloc, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr auto uses_allocator_construction_args(\r\n    const _Alloc& _Al, const pair<_Uty1, _Uty2>&& _Pair) noexcept;\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD template <_Cv_std_pair _Ty, class _Alloc, _Usable_for_pair_like_overload _Uty>\r\n_NODISCARD constexpr auto uses_allocator_construction_args(const _Alloc& _Al, _Uty&& _Ux) noexcept;\r\n\r\n_EXPORT_STD template <_Cv_std_pair _Ty, class _Alloc, class _Tuple1, class _Tuple2>\r\n_NODISCARD constexpr auto uses_allocator_construction_args(\r\n    const _Alloc& _Al, piecewise_construct_t, _Tuple1&& _Tup1, _Tuple2&& _Tup2) noexcept {\r\n    return _STD make_tuple(piecewise_construct,\r\n        _STD apply(\r\n            [&_Al](auto&&... _Tuple_args) {\r\n                return _STD uses_allocator_construction_args<typename _Ty::first_type>(\r\n                    _Al, _STD forward<decltype(_Tuple_args)>(_Tuple_args)...);\r\n            },\r\n            _STD forward<_Tuple1>(_Tup1)),\r\n        _STD apply(\r\n            [&_Al](auto&&... _Tuple_args) {\r\n                return _STD uses_allocator_construction_args<typename _Ty::second_type>(\r\n                    _Al, _STD forward<decltype(_Tuple_args)>(_Tuple_args)...);\r\n            },\r\n            _STD forward<_Tuple2>(_Tup2)));\r\n}\r\n\r\n_EXPORT_STD template <_Cv_std_pair _Ty, class _Alloc>\r\n_NODISCARD constexpr auto uses_allocator_construction_args(const _Alloc& _Al) noexcept {\r\n    // equivalent to\r\n    // return _STD uses_allocator_construction_args<_Ty>(_Al, piecewise_construct, tuple<>{}, tuple<>{});\r\n    return _STD make_tuple(piecewise_construct, _STD uses_allocator_construction_args<typename _Ty::first_type>(_Al),\r\n        _STD uses_allocator_construction_args<typename _Ty::second_type>(_Al));\r\n}\r\n\r\n_EXPORT_STD template <_Cv_std_pair _Ty, class _Alloc, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr auto uses_allocator_construction_args(const _Alloc& _Al, _Uty1&& _Val1, _Uty2&& _Val2) noexcept {\r\n    // equivalent to\r\n    // return _STD uses_allocator_construction_args<_Ty>(_Al, piecewise_construct,\r\n    //     _STD forward_as_tuple(_STD forward<_Uty1>(_Val1)), _STD forward_as_tuple(_STD forward<_Uty2>(_Val2)));\r\n    return _STD make_tuple(piecewise_construct,\r\n        _STD uses_allocator_construction_args<typename _Ty::first_type>(_Al, _STD forward<_Uty1>(_Val1)),\r\n        _STD uses_allocator_construction_args<typename _Ty::second_type>(_Al, _STD forward<_Uty2>(_Val2)));\r\n}\r\n\r\n#if _HAS_CXX23\r\n_EXPORT_STD template <_Cv_std_pair _Ty, class _Alloc, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr auto uses_allocator_construction_args(const _Alloc& _Al, pair<_Uty1, _Uty2>& _Pair) noexcept {\r\n    // equivalent to\r\n    // return _STD uses_allocator_construction_args<_Ty>(_Al, piecewise_construct,\r\n    //     _STD forward_as_tuple(_Pair.first), _STD forward_as_tuple(_Pair.second));\r\n    return _STD make_tuple(piecewise_construct,\r\n        _STD uses_allocator_construction_args<typename _Ty::first_type>(_Al, _Pair.first),\r\n        _STD uses_allocator_construction_args<typename _Ty::second_type>(_Al, _Pair.second));\r\n}\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD template <_Cv_std_pair _Ty, class _Alloc, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr auto uses_allocator_construction_args(\r\n    const _Alloc& _Al, const pair<_Uty1, _Uty2>& _Pair) noexcept {\r\n    // equivalent to\r\n    // return _STD uses_allocator_construction_args<_Ty>(_Al, piecewise_construct,\r\n    //     _STD forward_as_tuple(_Pair.first), _STD forward_as_tuple(_Pair.second));\r\n    return _STD make_tuple(piecewise_construct,\r\n        _STD uses_allocator_construction_args<typename _Ty::first_type>(_Al, _Pair.first),\r\n        _STD uses_allocator_construction_args<typename _Ty::second_type>(_Al, _Pair.second));\r\n}\r\n\r\n_EXPORT_STD template <_Cv_std_pair _Ty, class _Alloc, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr auto uses_allocator_construction_args(const _Alloc& _Al, pair<_Uty1, _Uty2>&& _Pair) noexcept {\r\n    // equivalent to\r\n    // return _STD uses_allocator_construction_args<_Ty>(_Al, piecewise_construct,\r\n    //     _STD forward_as_tuple(_STD get<0>(_STD move(_Pair)), _STD forward_as_tuple(_STD get<1>(_STD move(_Pair)));\r\n    return _STD make_tuple(piecewise_construct,\r\n        _STD uses_allocator_construction_args<typename _Ty::first_type>(_Al, _STD get<0>(_STD move(_Pair))),\r\n        _STD uses_allocator_construction_args<typename _Ty::second_type>(_Al, _STD get<1>(_STD move(_Pair))));\r\n}\r\n\r\n#if _HAS_CXX23\r\n_EXPORT_STD template <_Cv_std_pair _Ty, class _Alloc, class _Uty1, class _Uty2>\r\n_NODISCARD constexpr auto uses_allocator_construction_args(\r\n    const _Alloc& _Al, const pair<_Uty1, _Uty2>&& _Pair) noexcept {\r\n    // equivalent to\r\n    // return _STD uses_allocator_construction_args<_Ty>(_Al, piecewise_construct,\r\n    //     _STD forward_as_tuple(_STD get<0>(_STD move(_Pair)), _STD forward_as_tuple(_STD get<1>(_STD move(_Pair)));\r\n    return _STD make_tuple(piecewise_construct,\r\n        _STD uses_allocator_construction_args<typename _Ty::first_type>(_Al, _STD get<0>(_STD move(_Pair))),\r\n        _STD uses_allocator_construction_args<typename _Ty::second_type>(_Al, _STD get<1>(_STD move(_Pair))));\r\n}\r\n#endif // _HAS_CXX23\r\n\r\n_EXPORT_STD template <_Cv_std_pair _Ty, class _Alloc, _Usable_for_pair_like_overload _Uty>\r\n_NODISCARD constexpr auto uses_allocator_construction_args(const _Alloc& _Al, _Uty&& _Ux) noexcept {\r\n#if _HAS_CXX23\r\n    if constexpr (_Pair_like_non_subrange<_Uty>) {\r\n        // equivalent to\r\n        // return _STD uses_allocator_construction_args<_Ty>(_Al, piecewise_construct,\r\n        //     _STD forward_as_tuple(_STD get<0>(_STD forward<_Uty>(_Ux)),\r\n        //     _STD forward_as_tuple(_STD get<1>(_STD forward<_Uty>(_Ux)));\r\n        return _STD make_tuple(piecewise_construct,\r\n            _STD uses_allocator_construction_args<typename _Ty::first_type>(_Al, _STD get<0>(_STD forward<_Uty>(_Ux))),\r\n            _STD uses_allocator_construction_args<typename _Ty::second_type>(\r\n                _Al, _STD get<1>(_STD forward<_Uty>(_Ux))));\r\n    } else\r\n#endif // _HAS_CXX23\r\n    {\r\n        struct _Pair_remaker {\r\n            const _Alloc& _Al;\r\n            _Uty& _Ux;\r\n\r\n            constexpr operator remove_cv_t<_Ty>() const {\r\n                using _Pair_t = remove_cv_t<_Ty>;\r\n                static_assert(_Is_normally_bindable<_Pair_t, _Uty>,\r\n                    \"The argument must be bindable to a reference to the std::pair type.\");\r\n\r\n                using _Pair_first_t   = _Pair_t::first_type;\r\n                using _Pair_second_t  = _Pair_t::second_type;\r\n                using _Pair_ref_t     = _Normally_bound_ref<_Pair_t, _Uty>;\r\n                _Pair_ref_t _Pair_ref = _STD forward<_Uty>(_Ux);\r\n                if constexpr (is_same_v<_Pair_ref_t, const _Pair_t&>) {\r\n                    // equivalent to\r\n                    // return _STD make_obj_using_allocator<_Pair_t>(_Al, _Pair_ref);\r\n                    return _Pair_t{piecewise_construct,\r\n                        _STD uses_allocator_construction_args<_Pair_first_t>(_Al, _Pair_ref.first),\r\n                        _STD uses_allocator_construction_args<_Pair_second_t>(_Al, _Pair_ref.second)};\r\n                } else {\r\n                    // equivalent to\r\n                    // return _STD make_obj_using_allocator<_Pair_t>(_Al, _STD move(_Pair_ref));\r\n                    return _Pair_t{piecewise_construct,\r\n                        _STD uses_allocator_construction_args<_Pair_first_t>(_Al, _STD get<0>(_STD move(_Pair_ref))),\r\n                        _STD uses_allocator_construction_args<_Pair_second_t>(_Al, _STD get<1>(_STD move(_Pair_ref)))};\r\n                }\r\n            }\r\n        };\r\n\r\n        // equivalent to\r\n        // return _STD make_tuple(_Pair_remaker{_Al, _Ux});\r\n        return tuple<_Pair_remaker>({_Al, _Ux});\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc, class... _Types>\r\n_NODISCARD constexpr _Ty make_obj_using_allocator(const _Alloc& _Al, _Types&&... _Args) {\r\n    return _STD make_from_tuple<_Ty>(_STD uses_allocator_construction_args<_Ty>(_Al, _STD forward<_Types>(_Args)...));\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, class _Alloc, class... _Types>\r\nconstexpr _Ty* uninitialized_construct_using_allocator(_Ty* _Ptr, const _Alloc& _Al, _Types&&... _Args) {\r\n    return _STD apply(\r\n        [&](auto&&... _Construct_args) {\r\n            return _STD construct_at(_Ptr, _STD forward<decltype(_Construct_args)>(_Construct_args)...);\r\n        },\r\n        _STD uses_allocator_construction_args<_Ty>(_Al, _STD forward<_Types>(_Args)...));\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n_EXPORT_STD struct from_range_t {\r\n    explicit from_range_t() = default;\r\n};\r\n_EXPORT_STD inline constexpr from_range_t from_range;\r\n\r\ntemplate <class _Rng, class _Elem>\r\nconcept _Container_compatible_range =\r\n    (_RANGES input_range<_Rng>) && convertible_to<_RANGES range_reference_t<_Rng>, _Elem>;\r\n\r\ntemplate <_RANGES input_range _Rng>\r\nusing _Range_key_type = remove_const_t<typename _RANGES range_value_t<_Rng>::first_type>;\r\n\r\ntemplate <_RANGES input_range _Rng>\r\nusing _Range_mapped_type = _RANGES range_value_t<_Rng>::second_type;\r\n\r\ntemplate <_RANGES input_range _Rng>\r\nusing _Range_to_alloc_type =\r\n    pair<const typename _RANGES range_value_t<_Rng>::first_type, typename _RANGES range_value_t<_Rng>::second_type>;\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Ty,\r\n    bool = is_empty_v<_Ty> && !is_final_v<_Ty>>\r\nclass _Ebco_base : private _Ty { // Empty Base Class Optimization, active\r\nprivate:\r\n    using _Mybase = _Ty; // for visualization\r\n\r\nprotected:\r\n    template <class _Other, enable_if_t<!is_same_v<_Remove_cvref_t<_Other>, _Ebco_base>, int> = 0>\r\n    constexpr explicit _Ebco_base(_Other&& _Val) noexcept(is_nothrow_constructible_v<_Ty, _Other>)\r\n        : _Ty(_STD forward<_Other>(_Val)) {}\r\n\r\n    constexpr _Ty& _Get_val() noexcept {\r\n        return *this;\r\n    }\r\n\r\n    constexpr const _Ty& _Get_val() const noexcept {\r\n        return *this;\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nclass _Ebco_base<_Ty, false> { // Empty Base Class Optimization, inactive\r\nprivate:\r\n    _Ty _Myval;\r\n\r\nprotected:\r\n    template <class _Other, enable_if_t<!is_same_v<_Remove_cvref_t<_Other>, _Ebco_base>, int> = 0>\r\n    constexpr explicit _Ebco_base(_Other&& _Val) noexcept(is_nothrow_constructible_v<_Ty, _Other>)\r\n        : _Myval(_STD forward<_Other>(_Val)) {}\r\n\r\n    constexpr _Ty& _Get_val() noexcept {\r\n        return _Myval;\r\n    }\r\n\r\n    constexpr const _Ty& _Get_val() const noexcept {\r\n        return _Myval;\r\n    }\r\n};\r\n\r\n_EXPORT_STD inline void* align(size_t _Bound, size_t _Size, void*& _Ptr, size_t& _Space) noexcept /* strengthened */ {\r\n    // try to carve out _Size bytes on boundary _Bound\r\n    size_t _Off = static_cast<size_t>(reinterpret_cast<uintptr_t>(_Ptr) & (_Bound - 1));\r\n    if (_Off != 0) {\r\n        _Off = _Bound - _Off; // number of bytes to skip\r\n    }\r\n\r\n    if (_Space < _Off || _Space - _Off < _Size) {\r\n        return nullptr;\r\n    }\r\n\r\n    // enough room, update\r\n    _Ptr = static_cast<char*>(_Ptr) + _Off;\r\n    _Space -= _Off;\r\n    return _Ptr;\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty>\r\nconcept _Transparent = requires { typename _Ty::is_transparent; };\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\nnamespace ranges {\r\n#if defined(__cpp_lib_byte)\r\n    _EXPORT_STD template <range _Rng, class _Alloc = allocator<byte>>\r\n#else // ^^^ defined(__cpp_lib_byte) / !defined(__cpp_lib_byte) vvv\r\n    _EXPORT_STD template <range _Rng, class _Alloc>\r\n#endif // ^^^ !defined(__cpp_lib_byte) ^^^\r\n    struct elements_of {\r\n        _MSVC_NO_UNIQUE_ADDRESS _Rng range;\r\n        _MSVC_NO_UNIQUE_ADDRESS _Alloc allocator{};\r\n    };\r\n\r\n#if defined(__cpp_lib_byte)\r\n    template <class _Rng, class _Alloc = allocator<byte>>\r\n    elements_of(_Rng&&, _Alloc = _Alloc()) -> elements_of<_Rng&&, _Alloc>;\r\n#else // ^^^ defined(__cpp_lib_byte) / !defined(__cpp_lib_byte) vvv\r\n    template <class _Rng, class _Alloc>\r\n    elements_of(_Rng&&, _Alloc) -> elements_of<_Rng&&, _Alloc>;\r\n#endif // ^^^ !defined(__cpp_lib_byte) ^^^\r\n} // namespace ranges\r\n\r\ntemplate <class>\r\nconstexpr bool _Has_guaranteed_push_back = false; // N5032 [sequence.reqmts]/104, /108; used by flat_(multi)map::insert.\r\n\r\n// N5032 [container.reqmts]/66.1; used by various flat_(multi)set inserting functions.\r\ntemplate <class _Ty>\r\nconstexpr bool _Has_guaranteed_single_insertion = _Has_guaranteed_push_back<_Ty>;\r\n\r\ntemplate <class>\r\nconstexpr bool _Has_guaranteed_append_range = false; // N5032 [sequence.reqmts]/112; used by flat_(multi)set::insert.\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Elem, class _UTy>\r\n_NODISCARD _Elem* _UIntegral_to_buff(_Elem* _RNext, _UTy _UVal) { // used by both to_string and thread::id output\r\n    // format _UVal into buffer *ending at* _RNext\r\n    static_assert(is_unsigned_v<_UTy>, \"_UTy must be unsigned\");\r\n\r\n#ifdef _WIN64\r\n    auto _UVal_trunc = _UVal;\r\n#else // ^^^ defined(_WIN64) / !defined(_WIN64) vvv\r\n\r\n    if constexpr (sizeof(_UTy) > 4) { // For 64-bit numbers, work in chunks to avoid 64-bit divisions.\r\n        while (_UVal > 0xFFFFFFFFU) {\r\n            auto _UVal_chunk = static_cast<unsigned long>(_UVal % 100000000);\r\n            _UVal /= 100000000;\r\n\r\n            for (int _Idx = 0; _Idx != 3; ++_Idx) {\r\n                const unsigned long _UVal_chunk_part = _UVal_chunk % 100;\r\n                _UVal_chunk /= 100;\r\n                _RNext -= 2;\r\n                _CSTD memcpy(_RNext, _Digit_pairs<_Elem>._Data[_UVal_chunk_part], 2 * sizeof(_Elem));\r\n            }\r\n\r\n            _RNext -= 2;\r\n            _CSTD memcpy(_RNext, _Digit_pairs<_Elem>._Data[_UVal_chunk], 2 * sizeof(_Elem));\r\n        }\r\n    }\r\n\r\n    auto _UVal_trunc = static_cast<unsigned long>(_UVal);\r\n#endif // ^^^ !defined(_WIN64) ^^^\r\n\r\n    // If we have a single digit, print [0, 9] and return. (This is necessary to correctly handle 0.)\r\n    if (_UVal_trunc < 10) {\r\n        *--_RNext = static_cast<_Elem>('0' + _UVal_trunc);\r\n        return _RNext;\r\n    }\r\n\r\n    // Print one or more pairs of digits.\r\n    do {\r\n        const auto _UVal_trunc_part = static_cast<unsigned long>(_UVal_trunc % 100);\r\n        _UVal_trunc /= 100;\r\n        _RNext -= 2;\r\n        _CSTD memcpy(_RNext, _Digit_pairs<_Elem>._Data[_UVal_trunc_part], 2 * sizeof(_Elem));\r\n    } while (_UVal_trunc >= 10);\r\n\r\n    // If we have an unpaired digit, print it. For example, 1729 is printed as 17 29, and 19937 is printed as 1 99 37.\r\n    if (_UVal_trunc != 0) {\r\n        *--_RNext = static_cast<_Elem>('0' + _UVal_trunc);\r\n    }\r\n\r\n    return _RNext;\r\n}\r\n_STD_END\r\n\r\n#if _HAS_CXX17\r\n#define _ADAPTOR_EMPLACE_RETURN decltype(auto)\r\n#else // ^^^ _HAS_CXX17 ^^^ / vvv !_HAS_CXX17 vvv\r\n#define _ADAPTOR_EMPLACE_RETURN void\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n\r\n#if _HAS_CXX17\r\n#define _CONTAINER_EMPLACE_RETURN reference\r\n#else // ^^^ _HAS_CXX17 ^^^ / vvv !_HAS_CXX17 vvv\r\n#define _CONTAINER_EMPLACE_RETURN void\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n\r\n#if _HAS_CXX20\r\n#define _LIST_REMOVE_RETURN size_type\r\n#else // ^^^ _HAS_CXX20 ^^^ / vvv !_HAS_CXX20 vvv\r\n#define _LIST_REMOVE_RETURN void\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XMEMORY_\r\n"
  },
  {
    "path": "stl/inc/xnode_handle.h",
    "content": "// xnode_handle.h internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XNODE_HANDLE_H\r\n#define _XNODE_HANDLE_H\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#if !_HAS_CXX17\r\n#error Node handles are only available with C++17. (Also, you should not include this internal header.)\r\n#endif // _HAS_CXX17\r\n\r\n#include <xmemory>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n_STD_BEGIN\r\n\r\ntemplate <class _Iterator, class _NodeType>\r\nstruct _Insert_return_type {\r\n    _Iterator position;\r\n    bool inserted;\r\n    _NodeType node;\r\n};\r\n\r\ntemplate <class _Derived_type, class _KeyTy, class _ValueTy>\r\nstruct _Node_handle_map_base { // map-specific node handle behavior\r\n    using key_type    = _KeyTy;\r\n    using mapped_type = _ValueTy;\r\n\r\n    key_type& key() const noexcept /* strengthened */ {\r\n        return _Datum().first;\r\n    }\r\n    mapped_type& mapped() const noexcept /* strengthened */ {\r\n        return _Datum().second;\r\n    }\r\n\r\nprivate:\r\n    using _Pair_type = pair<key_type, mapped_type>;\r\n    _Pair_type& _Datum() const {\r\n        const auto& _Self = static_cast<const _Derived_type&>(*this);\r\n        auto& _Data       = _Self._Getptr()->_Myval;\r\n        // NB: Node handle requires formally-undefined behavior *somewhere*, this\r\n        // implementation chooses to type-pun pair<const K, T> as pair<K, T>.\r\n        return reinterpret_cast<_Pair_type&>(_Data);\r\n    }\r\n};\r\n\r\ntemplate <class _Derived_type, class _ValueTy>\r\nstruct _Node_handle_set_base { // set-specific node handle behavior\r\n    using value_type = _ValueTy;\r\n\r\n    value_type& value() const noexcept /* strengthened */ {\r\n        const auto& _Self = static_cast<const _Derived_type&>(*this);\r\n        return _Self._Getptr()->_Myval;\r\n    }\r\n};\r\n\r\ntemplate <class _Node, class _Alloc, template <class...> class _Base, class... _Types>\r\nclass _Node_handle : public _Base<_Node_handle<_Node, _Alloc, _Base, _Types...>, _Types...> {\r\n    // storage for a node from one of the node-based standard containers\r\npublic:\r\n    using allocator_type = _Alloc;\r\n\r\nprivate:\r\n    using _Alty_traits   = allocator_traits<_Alloc>;\r\n    using _Alnode        = _Rebind_alloc_t<_Alloc, _Node>;\r\n    using _Alnode_traits = allocator_traits<_Alnode>;\r\n    using _Nodeptr       = typename _Alnode_traits::pointer;\r\n\r\n    _Nodeptr _Ptr{};\r\n    _Aligned_storage_t<sizeof(_Alloc), alignof(_Alloc)>\r\n        _Alloc_storage; // Invariant: contains a live _Alloc iff _Ptr != nullptr\r\n\r\n    void _Clear() noexcept { // destroy any contained node and return to the empty state\r\n        if (_Ptr != nullptr) {\r\n            _Alloc& _Al = _Getal();\r\n            _Alty_traits::destroy(_Al, _STD addressof(_Ptr->_Myval));\r\n            _Alnode _Node_alloc{_Al};\r\n            _Node::_Freenode0(_Node_alloc, _Ptr);\r\n            _Destroy_in_place(_Al);\r\n            _Ptr = nullptr;\r\n        }\r\n    }\r\n\r\n    _Node_handle(const _Nodeptr _Ptr_, const _Alloc& _Al) noexcept\r\n        : _Ptr{_Ptr_} { // Initialize a _Node_handle that holds the specified node\r\n                        // pre: _Alloc can release _Ptr\r\n        _STL_INTERNAL_CHECK(_Ptr_ != nullptr);\r\n        _Construct_in_place(_Getal(), _Al);\r\n    }\r\n\r\npublic:\r\n    constexpr _Node_handle() noexcept : _Alloc_storage{} {}\r\n\r\n    ~_Node_handle() noexcept {\r\n        _Clear();\r\n    }\r\n\r\n    _Node_handle(_Node_handle&& _That) noexcept : _Ptr{_That._Ptr} { // steal node and allocator (if any) from _That\r\n        if (_Ptr != nullptr) {\r\n            _That._Ptr       = nullptr;\r\n            _Alloc& _That_al = _That._Getal();\r\n            _Construct_in_place(_Getal(), _STD move(_That_al));\r\n            _Destroy_in_place(_That_al);\r\n        }\r\n    }\r\n\r\n    _Node_handle& operator=(_Node_handle&& _That) noexcept /* strengthened */ {\r\n        // steal state from _That\r\n        if (_Ptr == nullptr) {\r\n            if (_That._Ptr != nullptr) {\r\n                _Alloc& _That_al = _That._Getal();\r\n                _Construct_in_place(_Getal(), _STD move(_That_al));\r\n                _Destroy_in_place(_That_al);\r\n                _Ptr = _STD exchange(_That._Ptr, nullptr);\r\n            }\r\n\r\n            return *this;\r\n        }\r\n\r\n        if (_That._Ptr == nullptr || this == _STD addressof(_That)) {\r\n            _Clear();\r\n            return *this;\r\n        }\r\n\r\n        _Alloc& _Al = _Getal();\r\n        _Alty_traits::destroy(_Al, _STD addressof(_Ptr->_Myval));\r\n        _Alnode _Node_alloc{_Al};\r\n        _Alnode_traits::deallocate(_Node_alloc, _Ptr, 1);\r\n\r\n        _Alloc& _That_al = _That._Getal();\r\n        _Pocma(_Al, _That_al);\r\n        _Destroy_in_place(_That_al);\r\n\r\n        _Ptr = _STD exchange(_That._Ptr, nullptr);\r\n        return *this;\r\n    }\r\n\r\n    _Nodeptr _Getptr() const noexcept {\r\n        return _Ptr;\r\n    }\r\n\r\n    _Alloc& _Getal() noexcept {\r\n        return reinterpret_cast<_Alloc&>(_Alloc_storage);\r\n    }\r\n    const _Alloc& _Getal() const noexcept {\r\n        _STL_INTERNAL_CHECK(!empty());\r\n        return reinterpret_cast<const _Alloc&>(_Alloc_storage);\r\n    }\r\n\r\n    _NODISCARD allocator_type get_allocator() const noexcept /* strengthened */ {\r\n        _STL_INTERNAL_CHECK(!empty());\r\n        return _Getal();\r\n    }\r\n\r\n    explicit operator bool() const noexcept {\r\n        return _Ptr != nullptr;\r\n    }\r\n\r\n    _NODISCARD bool empty() const noexcept {\r\n        return _Ptr == nullptr;\r\n    }\r\n\r\n    _Nodeptr _Release() noexcept { // extract the node from *this\r\n        _STL_INTERNAL_CHECK(!empty());\r\n        _Destroy_in_place(_Getal());\r\n        return _STD exchange(_Ptr, nullptr);\r\n    }\r\n\r\n    void swap(_Node_handle& _That) noexcept /* strengthened */ {\r\n        using _STD swap;\r\n        if (_Ptr != nullptr) {\r\n            if (_That._Ptr != nullptr) {\r\n                _Pocs(_Getal(), _That._Getal());\r\n            } else {\r\n                _Alloc& _Al = _Getal();\r\n                _Construct_in_place(_That._Getal(), _STD move(_Al));\r\n                _Destroy_in_place(_Al);\r\n            }\r\n        } else {\r\n            if (_That._Ptr == nullptr) {\r\n                return;\r\n            }\r\n\r\n            _Alloc& _That_al = _That._Getal();\r\n            _Construct_in_place(_Getal(), _STD move(_That_al));\r\n            _Destroy_in_place(_That_al);\r\n        }\r\n        swap(_Ptr, _That._Ptr); // intentional ADL\r\n    }\r\n    friend void swap(_Node_handle& _Left, _Node_handle& _Right) noexcept /* strengthened */ {\r\n        _Left.swap(_Right);\r\n    }\r\n\r\n    static _Node_handle _Make(const _Nodeptr _Ptr, const allocator_type& _Al) {\r\n        // initialize a _Node_handle that holds _Ptr and _Al\r\n        // pre: _Al can release _Ptr\r\n        _STL_INTERNAL_CHECK(_Ptr != nullptr);\r\n        return _Node_handle{_Ptr, _Al};\r\n    }\r\n};\r\n\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XNODE_HANDLE_H\r\n"
  },
  {
    "path": "stl/inc/xpolymorphic_allocator.h",
    "content": "// xpolymorphic_allocator.h internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XPOLYMORPHIC_ALLOCATOR_H\r\n#define _XPOLYMORPHIC_ALLOCATOR_H\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <xmemory>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _Ty, class _Outer_alloc, class _Inner_alloc, class... _Types>\r\nvoid _Uses_alloc_construct_non_pair(\r\n    _Ty* const _Ptr, _Outer_alloc& _Outer, const _Inner_alloc& _Inner, _Types&&... _Args) {\r\n    // uses-allocator construction of *_Ptr by alloc _Outer propagating alloc _Inner, non-pair case\r\n    if constexpr (uses_allocator_v<remove_cv_t<_Ty>, _Inner_alloc>) {\r\n        if constexpr (is_constructible_v<_Ty, allocator_arg_t, const _Inner_alloc&, _Types...>) {\r\n            allocator_traits<_Outer_alloc>::construct(\r\n                _Outer, _Ptr, allocator_arg_t{}, _Inner, _STD forward<_Types>(_Args)...);\r\n        } else {\r\n            static_assert(is_constructible_v<_Ty, _Types..., const _Inner_alloc&>,\r\n                \"N4659 [allocator.uses.construction]/1 (as modified by LWG-3187 and LWG-3677) requires \"\r\n                \"is_constructible_v<T, Args..., const Alloc&> when uses_allocator_v<remove_cv_t<T>, Alloc> is true and \"\r\n                \"is_constructible_v<T, allocator_arg_t, const Alloc&, Args...> is false\");\r\n            allocator_traits<_Outer_alloc>::construct(_Outer, _Ptr, _STD forward<_Types>(_Args)..., _Inner);\r\n        }\r\n    } else {\r\n        static_assert(is_constructible_v<_Ty, _Types...>,\r\n            \"N4659 [allocator.uses.construction]/1.1 (as modified by LWG-3677) requires is_constructible_v<T, Args...> \"\r\n            \"when uses_allocator_v<remove_cv_t<T>, Alloc> is false\");\r\n        allocator_traits<_Outer_alloc>::construct(_Outer, _Ptr, _STD forward<_Types>(_Args)...);\r\n    }\r\n}\r\n\r\ntemplate <class _Ty, class _Alloc, class... _Types>\r\ndecltype(auto) _Uses_alloc_piecewise(const _Alloc& _Al, tuple<_Types...>&& _Tuple) {\r\n    if constexpr (uses_allocator_v<remove_cv_t<_Ty>, _Alloc>) {\r\n        if constexpr (is_constructible_v<_Ty, allocator_arg_t, const _Alloc&, _Types...>) {\r\n            return _STD tuple_cat(tuple<allocator_arg_t, const _Alloc&>(allocator_arg, _Al), _STD move(_Tuple));\r\n        } else {\r\n            return _STD tuple_cat(_STD move(_Tuple), tuple<const _Alloc&>(_Al));\r\n        }\r\n    } else {\r\n        return _STD move(_Tuple);\r\n    }\r\n}\r\n\r\ntemplate <class _CvPair, class _Outer_alloc, class _Inner_alloc, class... _Types1, class... _Types2>\r\nvoid _Uses_alloc_construct_pair_piecewise(_CvPair* const _Ptr, _Outer_alloc& _Outer, const _Inner_alloc& _Inner,\r\n    tuple<_Types1...>&& _Val1, tuple<_Types2...>&& _Val2) {\r\n    // uses-allocator construction of pair from _Val1 and _Val2 by alloc _Outer propagating alloc _Inner\r\n    allocator_traits<_Outer_alloc>::construct(_Outer, _Ptr, piecewise_construct,\r\n        _STD _Uses_alloc_piecewise<typename _CvPair::first_type>(_Inner, _STD move(_Val1)),\r\n        _STD _Uses_alloc_piecewise<typename _CvPair::second_type>(_Inner, _STD move(_Val2)));\r\n}\r\n\r\ntemplate <class _CvPair, class _Outer_alloc, class _Inner_alloc, class... _Types1, class... _Types2>\r\nvoid _Uses_alloc_construct_pair(_CvPair* const _Ptr, _Outer_alloc& _Outer, const _Inner_alloc& _Inner,\r\n    piecewise_construct_t, tuple<_Types1...> _Val1, tuple<_Types2...> _Val2) {\r\n    // uses-allocator construction of pair by alloc _Outer propagating alloc _Inner, piecewise case\r\n    _STD _Uses_alloc_construct_pair_piecewise(_Ptr, _Outer, _Inner, _STD move(_Val1), _STD move(_Val2));\r\n}\r\n\r\ntemplate <class _CvPair, class _Outer_alloc, class _Inner_alloc>\r\nvoid _Uses_alloc_construct_pair(_CvPair* const _Ptr, _Outer_alloc& _Outer, const _Inner_alloc& _Inner) {\r\n    // uses-allocator construction of pair by alloc _Outer propagating alloc _Inner, zero-argument case\r\n    _STD _Uses_alloc_construct_pair_piecewise(_Ptr, _Outer, _Inner, tuple<>{}, tuple<>{});\r\n}\r\n\r\ntemplate <class _CvPair, class _Outer_alloc, class _Inner_alloc, class _Uty, class _Vty>\r\nvoid _Uses_alloc_construct_pair(\r\n    _CvPair* const _Ptr, _Outer_alloc& _Outer, const _Inner_alloc& _Inner, _Uty&& _Arg1, _Vty&& _Arg2) {\r\n    // uses-allocator construction of pair by alloc _Outer propagating alloc _Inner, two-argument case\r\n    _STD _Uses_alloc_construct_pair_piecewise(_Ptr, _Outer, _Inner, _STD forward_as_tuple(_STD forward<_Uty>(_Arg1)),\r\n        _STD forward_as_tuple(_STD forward<_Vty>(_Arg2)));\r\n}\r\n\r\ntemplate <class _CvPair, class _Outer_alloc, class _Inner_alloc, class _Uty, class _Vty>\r\nvoid _Uses_alloc_construct_pair(\r\n    _CvPair* const _Ptr, _Outer_alloc& _Outer, const _Inner_alloc& _Inner, const pair<_Uty, _Vty>& _Pair) {\r\n    // uses-allocator construction of pair by alloc _Outer propagating alloc _Inner, lvalue pair argument\r\n    _STD _Uses_alloc_construct_pair_piecewise(\r\n        _Ptr, _Outer, _Inner, _STD forward_as_tuple(_Pair.first), _STD forward_as_tuple(_Pair.second));\r\n}\r\n\r\ntemplate <class _CvPair, class _Outer_alloc, class _Inner_alloc, class _Uty, class _Vty>\r\nvoid _Uses_alloc_construct_pair(\r\n    _CvPair* const _Ptr, _Outer_alloc& _Outer, const _Inner_alloc& _Inner, pair<_Uty, _Vty>&& _Pair) {\r\n    // uses-allocator construction of pair by alloc _Outer propagating alloc _Inner, rvalue pair argument\r\n    _STD _Uses_alloc_construct_pair_piecewise(_Ptr, _Outer, _Inner,\r\n        _STD forward_as_tuple(_STD forward<_Uty>(_Pair.first)),\r\n        _STD forward_as_tuple(_STD forward<_Vty>(_Pair.second)));\r\n}\r\n\r\ntemplate <class _CvPair, class _Outer_alloc, class _Inner_alloc, class _Uty,\r\n    enable_if_t<!_Is_deducible_as_pair<_Uty>, int> = 0>\r\nvoid _Uses_alloc_construct_pair(_CvPair* const _Ptr, _Outer_alloc& _Outer, const _Inner_alloc& _Inner, _Uty&& _Ux) {\r\n    // uses-allocator construction of pair by alloc _Outer propagating alloc _Inner, non-pair argument\r\n    static_assert(_Is_normally_bindable<remove_cv_t<_CvPair>, _Uty>,\r\n        \"The argument must be bindable to a reference to the std::pair type.\");\r\n\r\n    using _Pair_ref_t     = _Normally_bound_ref<remove_cv_t<_CvPair>, _Uty>;\r\n    _Pair_ref_t _Pair_ref = _STD forward<_Uty>(_Ux);\r\n    if constexpr (is_lvalue_reference_v<_Pair_ref_t>) {\r\n        _STD _Uses_alloc_construct_pair_piecewise(\r\n            _Ptr, _Outer, _Inner, _STD forward_as_tuple(_Pair_ref.first), _STD forward_as_tuple(_Pair_ref.second));\r\n    } else {\r\n        _STD _Uses_alloc_construct_pair_piecewise(_Ptr, _Outer, _Inner,\r\n            _STD forward_as_tuple(_STD forward<typename _CvPair::first_type>(_Pair_ref.first)),\r\n            _STD forward_as_tuple(_STD forward<typename _CvPair::second_type>(_Pair_ref.second)));\r\n    }\r\n}\r\n#endif // !_HAS_CXX20\r\n\r\n#if _HAS_CXX17\r\nnamespace pmr {\r\n    _EXPORT_STD class __declspec(novtable) memory_resource {\r\n    public:\r\n        virtual ~memory_resource() noexcept = default;\r\n\r\n        _NODISCARD_RAW_PTR_ALLOC __declspec(allocator) void* allocate(_CRT_GUARDOVERFLOW const size_t _Bytes,\r\n            const size_t _Align = alignof(max_align_t)) { // allocate _Bytes bytes of memory with alignment _Align\r\n            _STL_ASSERT(_STD _Is_pow_2(_Align), \"memory_resource::allocate(): Alignment must be a power of two.\");\r\n            void* _Ptr = do_allocate(_Bytes, _Align);\r\n            return ::operator new(_Bytes, _Ptr);\r\n        }\r\n\r\n        void deallocate(void* const _Ptr, const size_t _Bytes, const size_t _Align = alignof(max_align_t)) {\r\n            // deallocate _Ptr, which was returned from allocate(_Bytes, _Align)\r\n            _STL_ASSERT(_STD _Is_pow_2(_Align), \"memory_resource::deallocate(): Alignment must be a power of two.\");\r\n            return do_deallocate(_Ptr, _Bytes, _Align);\r\n        }\r\n\r\n        _NODISCARD bool is_equal(const memory_resource& _That) const noexcept {\r\n            // determine if *this and _That can both deallocate memory allocated by either\r\n            return do_is_equal(_That);\r\n        }\r\n\r\n    private:\r\n        virtual void* do_allocate(size_t _Bytes, size_t _Align)               = 0;\r\n        virtual void do_deallocate(void* _Ptr, size_t _Bytes, size_t _Align)  = 0;\r\n        virtual bool do_is_equal(const memory_resource& _That) const noexcept = 0;\r\n    };\r\n\r\n    _EXPORT_STD _NODISCARD inline bool operator==(\r\n        const memory_resource& _Left, const memory_resource& _Right) noexcept {\r\n        return &_Left == &_Right || _Left.is_equal(_Right);\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD inline bool operator!=(const memory_resource& _Left, const memory_resource& _Right) noexcept {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    extern \"C\" _CRT_SATELLITE_1 memory_resource* __cdecl _Aligned_get_default_resource() noexcept;\r\n    extern \"C\" _CRT_SATELLITE_1 memory_resource* __cdecl _Unaligned_get_default_resource() noexcept;\r\n\r\n    _EXPORT_STD _NODISCARD inline memory_resource* get_default_resource() noexcept {\r\n#ifdef __cpp_aligned_new\r\n        return _STD pmr::_Aligned_get_default_resource();\r\n#else // ^^^ defined(__cpp_aligned_new) / !defined(__cpp_aligned_new) vvv\r\n        return _STD pmr::_Unaligned_get_default_resource();\r\n#endif // ^^^ !defined(__cpp_aligned_new) ^^^\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    template <class _Uty>\r\n    struct _NODISCARD _Deallocate_bytes_guard {\r\n        ~_Deallocate_bytes_guard() noexcept {\r\n            if (_Mem_res) {\r\n                _Mem_res->deallocate(_Pobj, sizeof(_Uty), alignof(_Uty));\r\n            }\r\n        }\r\n\r\n        _Deallocate_bytes_guard& operator=(const _Deallocate_bytes_guard&) = delete;\r\n        _Deallocate_bytes_guard& operator=(_Deallocate_bytes_guard&&)      = delete;\r\n\r\n        memory_resource* _Mem_res;\r\n        void* _Pobj;\r\n    };\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX20 && defined(__cpp_lib_byte)\r\n    _EXPORT_STD template <class _Ty = byte>\r\n#else // ^^^ _HAS_CXX20 && defined(__cpp_lib_byte) / !_HAS_CXX20 || !defined(__cpp_lib_byte) vvv\r\n    _EXPORT_STD template <class _Ty>\r\n#endif // ^^^ !_HAS_CXX20 || !defined(__cpp_lib_byte) ^^^\r\n    class polymorphic_allocator {\r\n    public:\r\n        template <class>\r\n        friend class polymorphic_allocator;\r\n\r\n        using value_type = _Ty;\r\n\r\n        polymorphic_allocator() noexcept = default;\r\n\r\n        /* implicit */ polymorphic_allocator(memory_resource* const _Resource_) noexcept // strengthened\r\n            : _Resource{_Resource_} { // initialize with _Resource_\r\n            _STL_ASSERT(_Resource,\r\n                \"Cannot initialize polymorphic_allocator with null resource (N4950 [mem.poly.allocator.ctor]/2)\");\r\n        }\r\n\r\n        polymorphic_allocator(const polymorphic_allocator&) = default;\r\n\r\n        template <class _Uty>\r\n        polymorphic_allocator(const polymorphic_allocator<_Uty>& _That) noexcept\r\n            : _Resource{_That._Resource} {} // initialize with _That's resource\r\n\r\n        polymorphic_allocator& operator=(const polymorphic_allocator&) = delete;\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n        ~polymorphic_allocator() noexcept {\r\n            const auto _Tombstone{reinterpret_cast<memory_resource*>(_MSVC_STL_UINTPTR_TOMBSTONE_VALUE)};\r\n            _Resource = _Tombstone;\r\n        }\r\n#endif // _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n\r\n        _NODISCARD_RAW_PTR_ALLOC __declspec(allocator) _Ty* allocate(_CRT_GUARDOVERFLOW const size_t _Count) {\r\n            // get space for _Count objects of type _Ty from _Resource\r\n            void* const _Vp = _Resource->allocate(_Get_size_of_n<sizeof(_Ty)>(_Count), alignof(_Ty));\r\n            return static_cast<_Ty*>(_Vp);\r\n        }\r\n\r\n        void deallocate(_Ty* const _Ptr, const size_t _Count) noexcept /* strengthened */ {\r\n            // return space for _Count objects of type _Ty to _Resource\r\n            // No need to verify that size_t can represent the size of _Ty[_Count].\r\n            _Resource->deallocate(_Ptr, _Count * sizeof(_Ty), alignof(_Ty));\r\n        }\r\n\r\n#if _HAS_CXX20\r\n        _NODISCARD_RAW_PTR_ALLOC __declspec(allocator) void* allocate_bytes(\r\n            const size_t _Bytes, const size_t _Align = alignof(max_align_t)) {\r\n            return _Resource->allocate(_Bytes, _Align);\r\n        }\r\n\r\n        void deallocate_bytes(void* const _Ptr, const size_t _Bytes,\r\n            const size_t _Align = alignof(max_align_t)) noexcept /* strengthened */ {\r\n            _Resource->deallocate(_Ptr, _Bytes, _Align);\r\n        }\r\n\r\n        template <class _Uty>\r\n        _NODISCARD_RAW_PTR_ALLOC __declspec(allocator) _Uty* allocate_object(\r\n            _CRT_GUARDOVERFLOW const size_t _Count = 1) {\r\n            void* const _Vp = allocate_bytes(_Get_size_of_n<sizeof(_Uty)>(_Count), alignof(_Uty));\r\n            return static_cast<_Uty*>(_Vp);\r\n        }\r\n\r\n        template <class _Uty>\r\n        void deallocate_object(_Uty* const _Ptr, const size_t _Count = 1) noexcept /* strengthened */ {\r\n            deallocate_bytes(_Ptr, _Count * sizeof(_Uty), alignof(_Uty));\r\n        }\r\n\r\n        template <class _Uty, class... _Types>\r\n        _NODISCARD_RAW_PTR_ALLOC __declspec(allocator) _Uty* new_object(_Types&&... _Args) {\r\n            _Uty* const _Ptr = allocate_object<_Uty>();\r\n\r\n            _Deallocate_bytes_guard<_Uty> _Guard{_Resource, _Ptr};\r\n            construct(_Ptr, _STD forward<_Types>(_Args)...);\r\n            _Guard._Mem_res = nullptr;\r\n\r\n            return _Ptr;\r\n        }\r\n\r\n        template <class _Uty>\r\n        void delete_object(_Uty* const _Ptr) noexcept /* strengthened */ {\r\n            _Ptr->~_Uty();\r\n            deallocate_object(_Ptr);\r\n        }\r\n#endif // _HAS_CXX20\r\n\r\n        template <class _Uty, class... _Types>\r\n        void construct(_Uty* const _Ptr, _Types&&... _Args) {\r\n            // propagate allocator *this if uses_allocator_v<remove_cv_t<_Uty>, polymorphic_allocator>\r\n#if _HAS_CXX20\r\n            // equivalent to calling uninitialized_construct_using_allocator except for handling of cv-qualification\r\n            _STD apply(\r\n                [_Ptr](auto&&... _Construct_args) {\r\n                    return ::new (const_cast<void*>(static_cast<const volatile void*>(_Ptr)))\r\n                        _Uty(_STD forward<decltype(_Construct_args)>(_Construct_args)...);\r\n                },\r\n                _STD uses_allocator_construction_args<_Uty>(*this, _STD forward<_Types>(_Args)...));\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n            allocator<char> _Al{};\r\n            if constexpr (_Is_cv_pair<_Uty>) {\r\n                _STD _Uses_alloc_construct_pair(_Ptr, _Al, *this, _STD forward<_Types>(_Args)...);\r\n            } else {\r\n                _STD _Uses_alloc_construct_non_pair(_Ptr, _Al, *this, _STD forward<_Types>(_Args)...);\r\n            }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n        }\r\n\r\n        template <class _Uty>\r\n        void destroy(_Uty* const _Ptr) noexcept /* strengthened */ {\r\n            _Ptr->~_Uty();\r\n        }\r\n\r\n        _NODISCARD polymorphic_allocator select_on_container_copy_construction() const noexcept /* strengthened */ {\r\n            // don't propagate on copy\r\n            return {};\r\n        }\r\n\r\n        _NODISCARD memory_resource* resource() const noexcept /* strengthened */ {\r\n            // retrieve this allocator's memory_resource\r\n            return _Resource;\r\n        }\r\n\r\n        _NODISCARD friend bool operator==(\r\n            const polymorphic_allocator& _Lhs, const polymorphic_allocator& _Rhs) noexcept {\r\n            return *_Lhs._Resource == *_Rhs._Resource;\r\n        }\r\n\r\n#if !_HAS_CXX20\r\n        _NODISCARD friend bool operator!=(\r\n            const polymorphic_allocator& _Lhs, const polymorphic_allocator& _Rhs) noexcept {\r\n            return *_Lhs._Resource != *_Rhs._Resource;\r\n        }\r\n#endif // !_HAS_CXX20\r\n\r\n    private:\r\n        memory_resource* _Resource = _STD pmr::get_default_resource();\r\n    };\r\n\r\n    _EXPORT_STD template <class _Ty1, class _Ty2>\r\n    _NODISCARD bool operator==(\r\n        const polymorphic_allocator<_Ty1>& _Left, const polymorphic_allocator<_Ty2>& _Right) noexcept {\r\n        // polymorphic_allocators with the same resource are compatible\r\n        return *_Left.resource() == *_Right.resource();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD bool operator!=(\r\n        const polymorphic_allocator<_Ty1>& _Left, const polymorphic_allocator<_Ty2>& _Right) noexcept {\r\n        return !(_Left == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n} // namespace pmr\r\n\r\ntemplate <class _Ty, class _Ptr>\r\nstruct _Has_no_alloc_destroy<pmr::polymorphic_allocator<_Ty>, _Ptr, void> : true_type {\r\n    // polymorphic_allocator technically _does_ have a destroy member, but it's equivalent to the\r\n    // default implementation in allocator_traits so we can optimize it away.\r\n};\r\n\r\n#endif // _HAS_CXX17\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XPOLYMORPHIC_ALLOCATOR_H\r\n"
  },
  {
    "path": "stl/inc/xsmf_control.h",
    "content": "// xsmf_control.h internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XSMF_CONTROL_H\r\n#define _XSMF_CONTROL_H\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <type_traits>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\ntemplate <class _Base>\r\nstruct _Non_trivial_copy : _Base { // non-trivial copy construction facade\r\n    using _Base::_Base;\r\n\r\n    _Non_trivial_copy() = default;\r\n    _CONSTEXPR20 _Non_trivial_copy(const _Non_trivial_copy& _That)\r\n        noexcept(noexcept(_Base::_Construct_from(static_cast<const _Base&>(_That)))) {\r\n        _Base::_Construct_from(static_cast<const _Base&>(_That));\r\n    }\r\n    _Non_trivial_copy(_Non_trivial_copy&&)                 = default;\r\n    _Non_trivial_copy& operator=(const _Non_trivial_copy&) = default;\r\n    _Non_trivial_copy& operator=(_Non_trivial_copy&&)      = default;\r\n};\r\n\r\ntemplate <class _Base>\r\nstruct _Deleted_copy : _Base { // deleted copy construction facade\r\n    using _Base::_Base;\r\n\r\n    _Deleted_copy()                                = default;\r\n    _Deleted_copy(const _Deleted_copy&)            = delete;\r\n    _Deleted_copy(_Deleted_copy&&)                 = default;\r\n    _Deleted_copy& operator=(const _Deleted_copy&) = default;\r\n    _Deleted_copy& operator=(_Deleted_copy&&)      = default;\r\n};\r\n\r\ntemplate <class _Base, class... _Types>\r\nusing _SMF_control_copy = conditional_t<conjunction_v<is_trivially_copy_constructible<_Types>...>, _Base,\r\n    conditional_t<conjunction_v<is_copy_constructible<_Types>...>, _Non_trivial_copy<_Base>, _Deleted_copy<_Base>>>;\r\n\r\ntemplate <class _Base, class... _Types>\r\nstruct _Non_trivial_move : _SMF_control_copy<_Base, _Types...> { // non-trivial move construction facade\r\n    using _Mybase = _SMF_control_copy<_Base, _Types...>;\r\n    using _Mybase::_Mybase;\r\n\r\n    _Non_trivial_move()                         = default;\r\n    _Non_trivial_move(const _Non_trivial_move&) = default;\r\n    _CONSTEXPR20 _Non_trivial_move(_Non_trivial_move&& _That)\r\n        noexcept(noexcept(_Mybase::_Construct_from(static_cast<_Base&&>(_That)))) {\r\n        _Mybase::_Construct_from(static_cast<_Base&&>(_That));\r\n    }\r\n    _Non_trivial_move& operator=(const _Non_trivial_move&) = default;\r\n    _Non_trivial_move& operator=(_Non_trivial_move&&)      = default;\r\n};\r\n\r\ntemplate <class _Base, class... _Types>\r\nstruct _Deleted_move : _SMF_control_copy<_Base, _Types...> { // deleted move construction facade\r\n    using _Mybase = _SMF_control_copy<_Base, _Types...>;\r\n    using _Mybase::_Mybase;\r\n\r\n    _Deleted_move()                                = default;\r\n    _Deleted_move(const _Deleted_move&)            = default;\r\n    _Deleted_move(_Deleted_move&&)                 = delete;\r\n    _Deleted_move& operator=(const _Deleted_move&) = default;\r\n    _Deleted_move& operator=(_Deleted_move&&)      = default;\r\n};\r\n\r\ntemplate <class _Base, class... _Types>\r\nusing _SMF_control_move =\r\n    conditional_t<conjunction_v<is_trivially_move_constructible<_Types>...>, _SMF_control_copy<_Base, _Types...>,\r\n        conditional_t<conjunction_v<is_move_constructible<_Types>...>, _Non_trivial_move<_Base, _Types...>,\r\n            _Deleted_move<_Base, _Types...>>>;\r\n\r\ntemplate <class _Base, class... _Types>\r\nstruct _Non_trivial_copy_assign : _SMF_control_move<_Base, _Types...> { // non-trivial copy assignment facade\r\n    using _Mybase = _SMF_control_move<_Base, _Types...>;\r\n    using _Mybase::_Mybase;\r\n\r\n    _Non_trivial_copy_assign()                                = default;\r\n    _Non_trivial_copy_assign(const _Non_trivial_copy_assign&) = default;\r\n    _Non_trivial_copy_assign(_Non_trivial_copy_assign&&)      = default;\r\n\r\n    _CONSTEXPR20 _Non_trivial_copy_assign& operator=(const _Non_trivial_copy_assign& _That)\r\n        noexcept(noexcept(_Mybase::_Assign_from(static_cast<const _Base&>(_That)))) {\r\n        _Mybase::_Assign_from(static_cast<const _Base&>(_That));\r\n        return *this;\r\n    }\r\n    _Non_trivial_copy_assign& operator=(_Non_trivial_copy_assign&&) = default;\r\n};\r\n\r\ntemplate <class _Base, class... _Types>\r\nstruct _Deleted_copy_assign : _SMF_control_move<_Base, _Types...> { // deleted copy assignment facade\r\n    using _Mybase = _SMF_control_move<_Base, _Types...>;\r\n    using _Mybase::_Mybase;\r\n\r\n    _Deleted_copy_assign()                                       = default;\r\n    _Deleted_copy_assign(const _Deleted_copy_assign&)            = default;\r\n    _Deleted_copy_assign(_Deleted_copy_assign&&)                 = default;\r\n    _Deleted_copy_assign& operator=(const _Deleted_copy_assign&) = delete;\r\n    _Deleted_copy_assign& operator=(_Deleted_copy_assign&&)      = default;\r\n};\r\n\r\ntemplate <class _Base, class... _Types>\r\nusing _SMF_control_copy_assign =\r\n    conditional_t<conjunction_v<is_trivially_destructible<_Types>..., is_trivially_copy_constructible<_Types>...,\r\n                      is_trivially_copy_assignable<_Types>...>,\r\n        _SMF_control_move<_Base, _Types...>,\r\n        conditional_t<conjunction_v<is_copy_constructible<_Types>..., is_copy_assignable<_Types>...>,\r\n            _Non_trivial_copy_assign<_Base, _Types...>, _Deleted_copy_assign<_Base, _Types...>>>;\r\n\r\ntemplate <class _Base, class... _Types>\r\nstruct _Non_trivial_move_assign : _SMF_control_copy_assign<_Base, _Types...> { // non-trivial move assignment facade\r\n    using _Mybase = _SMF_control_copy_assign<_Base, _Types...>;\r\n    using _Mybase::_Mybase;\r\n\r\n    _Non_trivial_move_assign()                                           = default;\r\n    _Non_trivial_move_assign(const _Non_trivial_move_assign&)            = default;\r\n    _Non_trivial_move_assign(_Non_trivial_move_assign&&)                 = default;\r\n    _Non_trivial_move_assign& operator=(const _Non_trivial_move_assign&) = default;\r\n\r\n    _CONSTEXPR20 _Non_trivial_move_assign& operator=(_Non_trivial_move_assign&& _That)\r\n        noexcept(noexcept(_Mybase::_Assign_from(static_cast<_Base&&>(_That)))) {\r\n        _Mybase::_Assign_from(static_cast<_Base&&>(_That));\r\n        return *this;\r\n    }\r\n};\r\n\r\ntemplate <class _Base, class... _Types>\r\nstruct _Deleted_move_assign : _SMF_control_copy_assign<_Base, _Types...> { // deleted move assignment facade\r\n    using _Mybase = _SMF_control_copy_assign<_Base, _Types...>;\r\n    using _Mybase::_Mybase;\r\n\r\n    _Deleted_move_assign()                                       = default;\r\n    _Deleted_move_assign(const _Deleted_move_assign&)            = default;\r\n    _Deleted_move_assign(_Deleted_move_assign&&)                 = default;\r\n    _Deleted_move_assign& operator=(const _Deleted_move_assign&) = default;\r\n    _Deleted_move_assign& operator=(_Deleted_move_assign&&)      = delete;\r\n};\r\n\r\ntemplate <class _Base, class... _Types>\r\nusing _SMF_control_move_assign =\r\n    conditional_t<conjunction_v<is_trivially_destructible<_Types>..., is_trivially_move_constructible<_Types>...,\r\n                      is_trivially_move_assignable<_Types>...>,\r\n        _SMF_control_copy_assign<_Base, _Types...>,\r\n        conditional_t<conjunction_v<is_move_constructible<_Types>..., is_move_assignable<_Types>...>,\r\n            _Non_trivial_move_assign<_Base, _Types...>, _Deleted_move_assign<_Base, _Types...>>>;\r\n\r\ntemplate <class _Base, class... _Types>\r\nusing _SMF_control = _SMF_control_move_assign<_Base, _Types...>;\r\n\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XSMF_CONTROL_H\r\n"
  },
  {
    "path": "stl/inc/xstring",
    "content": "// xstring internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XSTRING_\r\n#define _XSTRING_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <__msvc_sanitizer_annotate_container.hpp>\r\n#include <__msvc_string_view.hpp>\r\n#include <iosfwd>\r\n#include <xmemory>\r\n\r\n#if _HAS_CXX17\r\n#include <xpolymorphic_allocator.h>\r\n#endif // _HAS_CXX17\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\ntemplate <class _Mystr>\r\nclass _String_const_iterator : public _Iterator_base {\r\npublic:\r\n#if _HAS_CXX20\r\n    using iterator_concept = contiguous_iterator_tag;\r\n#endif // _HAS_CXX20\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = typename _Mystr::value_type;\r\n    using difference_type   = typename _Mystr::difference_type;\r\n    using pointer           = typename _Mystr::const_pointer;\r\n    using reference         = const value_type&;\r\n\r\n    _CONSTEXPR20 _String_const_iterator() noexcept : _Ptr() {}\r\n\r\n    _CONSTEXPR20 _String_const_iterator(pointer _Parg, const _Container_base* _Pstring) noexcept : _Ptr(_Parg) {\r\n        this->_Adopt(_Pstring);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reference operator*() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Ptr, \"cannot dereference value-initialized string iterator\");\r\n        const auto _Mycont = static_cast<const _Mystr*>(this->_Getcont());\r\n        _STL_VERIFY(_Mycont, \"cannot dereference string iterator because the iterator was \"\r\n                             \"invalidated (e.g. reallocation occurred, or the string was destroyed)\");\r\n        const auto _Contptr = _Mycont->_Myptr();\r\n        const auto _Rawptr  = _Unfancy(_Ptr);\r\n        _STL_VERIFY(_Contptr <= _Rawptr && _Rawptr < _Contptr + _Mycont->_Mysize,\r\n            \"cannot dereference string iterator because it is out of range (e.g. an end iterator)\");\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n\r\n        _Analysis_assume_(_Ptr);\r\n        return *_Ptr;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _CONSTEXPR20 _String_const_iterator& operator++() noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Ptr, \"cannot increment value-initialized string iterator\");\r\n        const auto _Mycont = static_cast<const _Mystr*>(this->_Getcont());\r\n        _STL_VERIFY(_Mycont, \"cannot increment string iterator because the iterator was \"\r\n                             \"invalidated (e.g. reallocation occurred, or the string was destroyed)\");\r\n        _STL_VERIFY(_Unfancy(_Ptr) < _Mycont->_Myptr() + _Mycont->_Mysize, \"cannot increment string iterator past end\");\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n\r\n        ++_Ptr;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 _String_const_iterator operator++(int) noexcept {\r\n        _String_const_iterator _Tmp = *this;\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR20 _String_const_iterator& operator--() noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(_Ptr, \"cannot decrement value-initialized string iterator\");\r\n        const auto _Mycont = static_cast<const _Mystr*>(this->_Getcont());\r\n        _STL_VERIFY(_Mycont, \"cannot decrement string iterator because the iterator was \"\r\n                             \"invalidated (e.g. reallocation occurred, or the string was destroyed)\");\r\n        _STL_VERIFY(_Mycont->_Myptr() < _Unfancy(_Ptr), \"cannot decrement string iterator before begin\");\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n\r\n        --_Ptr;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 _String_const_iterator operator--(int) noexcept {\r\n        _String_const_iterator _Tmp = *this;\r\n        --*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR20 void _Verify_offset(const difference_type _Off) const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        if (_Off == 0) {\r\n            return;\r\n        }\r\n\r\n        _STL_VERIFY(_Ptr, \"cannot seek value-initialized string iterator\");\r\n        const auto _Mycont = static_cast<const _Mystr*>(this->_Getcont());\r\n        _STL_VERIFY(_Mycont, \"cannot seek string iterator because the iterator was \"\r\n                             \"invalidated (e.g. reallocation occurred, or the string was destroyed)\");\r\n        const auto _Contptr = _Mycont->_Myptr();\r\n        const auto _Rawptr  = _Unfancy(_Ptr);\r\n\r\n        if (_Off < 0) {\r\n            _STL_VERIFY(_Contptr - _Rawptr <= _Off, \"cannot seek string iterator before begin\");\r\n        }\r\n\r\n        if (_Off > 0) {\r\n            using _Size_type = typename _Mystr::size_type;\r\n            const auto _Left = _Mycont->_Mysize - static_cast<_Size_type>(_Rawptr - _Contptr);\r\n            _STL_VERIFY(static_cast<_Size_type>(_Off) <= _Left, \"cannot seek string iterator after end\");\r\n        }\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        (void) _Off;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n\r\n    _CONSTEXPR20 _String_const_iterator& operator+=(const difference_type _Off) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _Verify_offset(_Off);\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n        _Ptr += _Off;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _String_const_iterator operator+(const difference_type _Off) const noexcept {\r\n        _String_const_iterator _Tmp = *this;\r\n        _Tmp += _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD friend _CONSTEXPR20 _String_const_iterator operator+(\r\n        const difference_type _Off, _String_const_iterator _Next) noexcept {\r\n        _Next += _Off;\r\n        return _Next;\r\n    }\r\n\r\n    _CONSTEXPR20 _String_const_iterator& operator-=(const difference_type _Off) noexcept {\r\n        return *this += -_Off;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _String_const_iterator operator-(const difference_type _Off) const noexcept {\r\n        _String_const_iterator _Tmp = *this;\r\n        _Tmp -= _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 difference_type operator-(const _String_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return static_cast<difference_type>(_Ptr - _Right._Ptr);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reference operator[](const difference_type _Off) const noexcept {\r\n        return *(*this + _Off);\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 bool operator==(const _String_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return _Ptr == _Right._Ptr;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD constexpr strong_ordering operator<=>(const _String_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return _STD _Unfancy_maybe_null(_Ptr) <=> _STD _Unfancy_maybe_null(_Right._Ptr);\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD bool operator!=(const _String_const_iterator& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n\r\n    _NODISCARD bool operator<(const _String_const_iterator& _Right) const noexcept {\r\n        _Compat(_Right);\r\n        return _Ptr < _Right._Ptr;\r\n    }\r\n\r\n    _NODISCARD bool operator>(const _String_const_iterator& _Right) const noexcept {\r\n        return _Right < *this;\r\n    }\r\n\r\n    _NODISCARD bool operator<=(const _String_const_iterator& _Right) const noexcept {\r\n        return !(_Right < *this);\r\n    }\r\n\r\n    _NODISCARD bool operator>=(const _String_const_iterator& _Right) const noexcept {\r\n        return !(*this < _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    _CONSTEXPR20 void _Compat(const _String_const_iterator& _Right) const noexcept {\r\n        // test for compatible iterator pair\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        _STL_VERIFY(this->_Getcont() == _Right._Getcont(),\r\n            \"string iterators incompatible (e.g. point to different string instances)\");\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL >= 1 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        (void) _Right;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n    friend _CONSTEXPR20 void _Verify_range(\r\n        const _String_const_iterator& _First, const _String_const_iterator& _Last) noexcept {\r\n        _STL_VERIFY(_First._Getcont() == _Last._Getcont(), \"string iterators in range are from different containers\");\r\n        _STL_VERIFY(_First._Ptr <= _Last._Ptr, \"string iterator range transposed\");\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n\r\n    using _Prevent_inheriting_unwrap = _String_const_iterator;\r\n\r\n    _NODISCARD _CONSTEXPR20 const value_type* _Unwrapped() const noexcept {\r\n        return _STD _Unfancy_maybe_null(_Ptr);\r\n    }\r\n\r\n    _CONSTEXPR20 void _Seek_to(const value_type* _It) noexcept {\r\n        _Ptr = _STD _Refancy_maybe_null<pointer>(const_cast<value_type*>(_It));\r\n    }\r\n\r\n    pointer _Ptr; // pointer to element in string\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Mystr>\r\nstruct pointer_traits<_String_const_iterator<_Mystr>> {\r\n    using pointer         = _String_const_iterator<_Mystr>;\r\n    using element_type    = const pointer::value_type;\r\n    using difference_type = pointer::difference_type;\r\n\r\n    _NODISCARD static constexpr element_type* to_address(const pointer _Iter) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        const auto _Mycont = static_cast<const _Mystr*>(_Iter._Getcont());\r\n        if (!_Mycont) {\r\n            _STL_VERIFY(!_Iter._Ptr, \"cannot convert string iterator to pointer because the iterator was invalidated \"\r\n                                     \"(e.g. reallocation occurred, or the string was destroyed)\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n\r\n        const auto _Rawptr = _STD to_address(_Iter._Ptr);\r\n\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        if (_Mycont) {\r\n            const auto _Contptr = _Mycont->_Myptr();\r\n            _STL_VERIFY(_Contptr <= _Rawptr && _Rawptr <= _Contptr + _Mycont->_Mysize,\r\n                \"cannot convert string iterator to pointer because it is out of range\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n\r\n        return _Rawptr;\r\n    }\r\n};\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Mystr>\r\nclass _String_iterator : public _String_const_iterator<_Mystr> {\r\npublic:\r\n    using _Mybase = _String_const_iterator<_Mystr>;\r\n\r\n#if _HAS_CXX20\r\n    using iterator_concept = contiguous_iterator_tag;\r\n#endif // _HAS_CXX20\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = typename _Mystr::value_type;\r\n    using difference_type   = typename _Mystr::difference_type;\r\n    using pointer           = typename _Mystr::pointer;\r\n    using reference         = value_type&;\r\n\r\n    using _Mybase::_Mybase;\r\n\r\n    _NODISCARD _CONSTEXPR20 reference operator*() const noexcept {\r\n        return const_cast<reference>(_Mybase::operator*());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _CONSTEXPR20 _String_iterator& operator++() noexcept {\r\n        _Mybase::operator++();\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 _String_iterator operator++(int) noexcept {\r\n        _String_iterator _Tmp = *this;\r\n        _Mybase::operator++();\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR20 _String_iterator& operator--() noexcept {\r\n        _Mybase::operator--();\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 _String_iterator operator--(int) noexcept {\r\n        _String_iterator _Tmp = *this;\r\n        _Mybase::operator--();\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR20 _String_iterator& operator+=(const difference_type _Off) noexcept {\r\n        _Mybase::operator+=(_Off);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _String_iterator operator+(const difference_type _Off) const noexcept {\r\n        _String_iterator _Tmp = *this;\r\n        _Tmp += _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD friend _CONSTEXPR20 _String_iterator operator+(\r\n        const difference_type _Off, _String_iterator _Next) noexcept {\r\n        _Next += _Off;\r\n        return _Next;\r\n    }\r\n\r\n    _CONSTEXPR20 _String_iterator& operator-=(const difference_type _Off) noexcept {\r\n        _Mybase::operator-=(_Off);\r\n        return *this;\r\n    }\r\n\r\n    using _Mybase::operator-;\r\n\r\n    _NODISCARD _CONSTEXPR20 _String_iterator operator-(const difference_type _Off) const noexcept {\r\n        _String_iterator _Tmp = *this;\r\n        _Tmp -= _Off;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reference operator[](const difference_type _Off) const noexcept {\r\n        return const_cast<reference>(_Mybase::operator[](_Off));\r\n    }\r\n\r\n    using _Prevent_inheriting_unwrap = _String_iterator;\r\n\r\n    _NODISCARD _CONSTEXPR20 value_type* _Unwrapped() const noexcept {\r\n        return const_cast<value_type*>(_STD _Unfancy_maybe_null(this->_Ptr));\r\n    }\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Mystr>\r\nstruct pointer_traits<_String_iterator<_Mystr>> {\r\n    using pointer         = _String_iterator<_Mystr>;\r\n    using element_type    = pointer::value_type;\r\n    using difference_type = pointer::difference_type;\r\n\r\n    _NODISCARD static constexpr element_type* to_address(const pointer _Iter) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        const auto _Mycont = static_cast<const _Mystr*>(_Iter._Getcont());\r\n        if (!_Mycont) {\r\n            _STL_VERIFY(!_Iter._Ptr, \"cannot convert string iterator to pointer because the iterator was invalidated \"\r\n                                     \"(e.g. reallocation occurred, or the string was destroyed)\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n\r\n        const auto _Rawptr = _STD to_address(_Iter._Ptr);\r\n\r\n#if _ITERATOR_DEBUG_LEVEL >= 1\r\n        if (_Mycont) {\r\n            const auto _Contptr = _Mycont->_Myptr();\r\n            _STL_VERIFY(_Contptr <= _Rawptr && _Rawptr <= _Contptr + _Mycont->_Mysize,\r\n                \"cannot convert string iterator to pointer because it is out of range\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL >= 1\r\n\r\n        return const_cast<element_type*>(_Rawptr);\r\n    }\r\n};\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Value_type, class _Size_type, class _Difference_type, class _Pointer, class _Const_pointer>\r\nstruct _String_iter_types {\r\n    using value_type      = _Value_type;\r\n    using size_type       = _Size_type;\r\n    using difference_type = _Difference_type;\r\n    using pointer         = _Pointer;\r\n    using const_pointer   = _Const_pointer;\r\n};\r\n\r\ntemplate <class _Val_types>\r\nclass _String_val : public _Container_base {\r\npublic:\r\n    using value_type      = typename _Val_types::value_type;\r\n    using size_type       = typename _Val_types::size_type;\r\n    using difference_type = typename _Val_types::difference_type;\r\n    using pointer         = typename _Val_types::pointer;\r\n    using const_pointer   = typename _Val_types::const_pointer;\r\n    using reference       = value_type&;\r\n    using const_reference = const value_type&;\r\n\r\n    _CONSTEXPR20 _String_val() noexcept : _Bx() {}\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n    _CONSTEXPR20 ~_String_val() noexcept {\r\n        if constexpr (is_pointer_v<pointer>) {\r\n            if (!_STD _Is_constant_evaluated()) {\r\n                const auto _Tombstone{reinterpret_cast<pointer>(_MSVC_STL_UINTPTR_TOMBSTONE_VALUE)};\r\n                _Bx._Ptr = _Tombstone;\r\n                _Mysize  = 0;\r\n                _Myres   = (_Small_string_capacity + 1) | _Alloc_mask; // first capacity when entering large mode\r\n\r\n                // The capacity indicates whether we're in small mode or large mode; see _Large_mode_engaged().\r\n                // The string would be usable in small mode, so we need large mode for the tombstone to be effective.\r\n                // `_Small_string_capacity + 1` would be sufficient to make _Large_mode_engaged() return true. However,\r\n                // basic_string uses a \"roundup mask\" when allocating; see _Calculate_growth(). So to avoid confusing\r\n                // the SSO logic, we use the first capacity that would normally be used when entering large mode.\r\n            }\r\n        }\r\n    }\r\n#endif // _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n\r\n    // length of internal buffer, [1, 16] (NB: used by the debugger visualizer)\r\n    static constexpr size_type _BUF_SIZE = 16 / sizeof(value_type) < 1 ? 1 : 16 / sizeof(value_type);\r\n    // roundup mask for allocated buffers, [0, 15]\r\n    static constexpr size_type _Alloc_mask = sizeof(value_type) <= 1 ? 15\r\n                                           : sizeof(value_type) <= 2 ? 7\r\n                                           : sizeof(value_type) <= 4 ? 3\r\n                                           : sizeof(value_type) <= 8 ? 1\r\n                                                                     : 0;\r\n    // capacity in small mode\r\n    static constexpr size_type _Small_string_capacity = _BUF_SIZE - 1;\r\n\r\n    _NODISCARD _CONSTEXPR20 value_type* _Myptr() noexcept {\r\n        value_type* _Result = _Bx._Buf;\r\n        if (_Large_mode_engaged()) {\r\n            _Result = _Unfancy(_Bx._Ptr);\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const value_type* _Myptr() const noexcept {\r\n        const value_type* _Result = _Bx._Buf;\r\n        if (_Large_mode_engaged()) {\r\n            _Result = _Unfancy(_Bx._Ptr);\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 bool _Large_mode_engaged() const noexcept {\r\n        return _Myres > _Small_string_capacity;\r\n    }\r\n\r\n    _CONSTEXPR20 void _Activate_SSO_buffer() noexcept {\r\n        // start the lifetime of the array elements\r\n#if _HAS_CXX20\r\n        if (_STD is_constant_evaluated()) {\r\n            for (size_type _Idx = 0; _Idx < _BUF_SIZE; ++_Idx) {\r\n                _Bx._Buf[_Idx] = value_type();\r\n            }\r\n        }\r\n#endif // _HAS_CXX20\r\n    }\r\n\r\n    _CONSTEXPR20 void _Check_offset(const size_type _Off) const {\r\n        // checks whether _Off is in the bounds of [0, size()]\r\n        if (_Mysize < _Off) {\r\n            _Xran();\r\n        }\r\n    }\r\n\r\n    _CONSTEXPR20 void _Check_offset_exclusive(const size_type _Off) const {\r\n        // checks whether _Off is in the bounds of [0, size())\r\n        if (_Mysize <= _Off) {\r\n            _Xran();\r\n        }\r\n    }\r\n\r\n    [[noreturn]] static void _Xran() {\r\n        _Xout_of_range(\"invalid string position\");\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type _Clamp_suffix_size(const size_type _Off, const size_type _Size) const noexcept {\r\n        // trims _Size to the longest it can be assuming a string at/after _Off\r\n        return (_STD min) (_Size, static_cast<size_type>(_Mysize - _Off));\r\n    }\r\n\r\n    union _Bxty { // storage for small buffer or pointer to larger one\r\n        // This constructor previously initialized _Ptr. Don't rely on the new behavior without\r\n        // renaming `_String_val` (and fixing the visualizer).\r\n        _CONSTEXPR20 _Bxty() noexcept : _Buf() {} // user-provided, for fancy pointers\r\n        _CONSTEXPR20 ~_Bxty() noexcept {} // user-provided, for fancy pointers\r\n\r\n        value_type _Buf[_BUF_SIZE];\r\n        pointer _Ptr;\r\n        char _Alias[_BUF_SIZE]; // TRANSITION, ABI: _Alias is preserved for binary compatibility (especially /clr)\r\n\r\n        _CONSTEXPR20 void _Switch_to_buf() noexcept {\r\n            _STD _Destroy_in_place(_Ptr);\r\n\r\n#if _HAS_CXX20\r\n            // start the lifetime of the array elements\r\n            if (_STD is_constant_evaluated()) {\r\n                for (size_type _Idx = 0; _Idx < _BUF_SIZE; ++_Idx) {\r\n                    _Buf[_Idx] = value_type();\r\n                }\r\n            }\r\n#endif // _HAS_CXX20\r\n        }\r\n    };\r\n    _Bxty _Bx;\r\n\r\n    // invariant: _Myres >= _Mysize, and _Myres >= _Small_string_capacity (after string's construction)\r\n    // neither _Mysize nor _Myres takes account of the extra null terminator\r\n    size_type _Mysize = 0; // current length of string (size)\r\n    size_type _Myres  = 0; // current storage reserved for string (capacity)\r\n};\r\n\r\n// get _Ty's size after being EBCO'd\r\ntemplate <class _Ty>\r\nconstexpr size_t _Size_after_ebco_v = is_empty_v<_Ty> ? 0 : sizeof(_Ty);\r\n\r\nstruct _String_constructor_concat_tag {\r\n    // tag to select constructors used by basic_string's concatenation operators (operator+)\r\n    explicit _String_constructor_concat_tag() = default;\r\n};\r\n\r\ntemplate <class _Traits, class _UElem>\r\n_CONSTEXPR20 void _Traits_copy_batch(_Out_writes_all_(_Count) _Traits_ch_t<_Traits>* const _First1,\r\n    _In_reads_(_Count) const _UElem* const _First2, const size_t _Count) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_any_of_v<_UElem, _Traits_ch_t<_Traits>, volatile _Traits_ch_t<_Traits>>);\r\n\r\n    if constexpr (is_volatile_v<_UElem>) {\r\n        for (size_t _Idx = 0; _Idx != _Count; ++_Idx) {\r\n            _Traits::assign(_First1[_Idx], _Traits_ch_t<_Traits>{_First2[_Idx]});\r\n        }\r\n    } else {\r\n        (void) _Traits::copy(_First1, _First2, _Count);\r\n    }\r\n}\r\n\r\ntemplate <class _Traits, class _UElem>\r\n_CONSTEXPR20 void _Traits_move_batch(_Out_writes_all_(_Count) _Traits_ch_t<_Traits>* const _First1,\r\n    _In_reads_(_Count) const _UElem* const _First2, const size_t _Count) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(_Is_any_of_v<_UElem, _Traits_ch_t<_Traits>, volatile _Traits_ch_t<_Traits>>);\r\n\r\n    if constexpr (is_volatile_v<_UElem>) {\r\n        bool _Loop_forward = true;\r\n\r\n        for (const _UElem* _Src = _First2; _Src != _First2 + _Count; ++_Src) {\r\n            if (_First1 == _Src) {\r\n                _Loop_forward = false;\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (_Loop_forward) {\r\n            for (size_t _Idx = 0; _Idx != _Count; ++_Idx) {\r\n                _Traits::assign(_First1[_Idx], _Traits_ch_t<_Traits>{_First2[_Idx]});\r\n            }\r\n        } else {\r\n            for (size_t _Idx = _Count; _Idx != 0; --_Idx) {\r\n                _Traits::assign(_First1[_Idx - 1], _Traits_ch_t<_Traits>{_First2[_Idx - 1]});\r\n            }\r\n        }\r\n    } else {\r\n        (void) _Traits::move(_First1, _First2, _Count);\r\n    }\r\n}\r\n\r\n[[noreturn]] inline void _Xlen_string() {\r\n    _Xlength_error(\"string too long\");\r\n}\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Rng, class _Ty>\r\nconcept _Contiguous_range_of =\r\n    (_RANGES contiguous_range<_Rng>) && same_as<remove_cvref_t<_RANGES range_reference_t<_Rng>>, _Ty>;\r\n#endif // _HAS_CXX23\r\n\r\n#pragma warning(push)\r\n// Invalid annotation: 'NullTerminated' property may only be used on buffers whose elements are of integral or pointer\r\n// type\r\n#pragma warning(disable : 6510)\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>, class _Alloc = allocator<_Elem>>\r\nclass basic_string { // null-terminated transparent array of elements\r\nprivate:\r\n    friend _Tidy_deallocate_guard<basic_string>;\r\n    friend basic_stringbuf<_Elem, _Traits, _Alloc>;\r\n\r\n    using _Alty        = _Rebind_alloc_t<_Alloc, _Elem>;\r\n    using _Alty_traits = allocator_traits<_Alty>;\r\n\r\n    using _Scary_val = _String_val<conditional_t<_Is_simple_alloc_v<_Alty>, _Simple_types<_Elem>,\r\n        _String_iter_types<_Elem, typename _Alty_traits::size_type, typename _Alty_traits::difference_type,\r\n            typename _Alty_traits::pointer, typename _Alty_traits::const_pointer>>>;\r\n\r\n    static_assert(!_ENFORCE_MATCHING_ALLOCATORS || is_same_v<_Elem, typename _Alloc::value_type>,\r\n        _MISMATCHED_ALLOCATOR_MESSAGE(\"basic_string<T, Traits, Allocator>\", \"T\"));\r\n\r\n    static_assert(is_same_v<_Elem, typename _Traits::char_type>,\r\n        \"N4950 [string.require]/3 requires that the supplied \"\r\n        \"char_traits character type match the string's character type.\");\r\n\r\n    static_assert(!is_array_v<_Elem> && is_trivially_copyable_v<_Elem> && is_trivially_default_constructible_v<_Elem>\r\n                      && is_standard_layout_v<_Elem>,\r\n        \"The character type of basic_string must be a non-array trivially copyable standard-layout type T where \"\r\n        \"is_trivially_default_constructible_v<T> is true. See N5001 [strings.general]/1.\");\r\n\r\npublic:\r\n    using traits_type    = _Traits;\r\n    using allocator_type = _Alloc;\r\n\r\n    using value_type      = _Elem;\r\n    using size_type       = typename _Alty_traits::size_type;\r\n    using difference_type = typename _Alty_traits::difference_type;\r\n    using pointer         = typename _Alty_traits::pointer;\r\n    using const_pointer   = typename _Alty_traits::const_pointer;\r\n    using reference       = value_type&;\r\n    using const_reference = const value_type&;\r\n\r\n    using iterator       = _String_iterator<_Scary_val>;\r\n    using const_iterator = _String_const_iterator<_Scary_val>;\r\n\r\n    using reverse_iterator       = _STD reverse_iterator<iterator>;\r\n    using const_reverse_iterator = _STD reverse_iterator<const_iterator>;\r\n\r\nprivate:\r\n    static constexpr size_type _BUF_SIZE              = _Scary_val::_BUF_SIZE;\r\n    static constexpr size_type _Alloc_mask            = _Scary_val::_Alloc_mask;\r\n    static constexpr size_type _Small_string_capacity = _Scary_val::_Small_string_capacity;\r\n\r\n    // least real allocation size, including space reserved for terminating null\r\n    static constexpr size_type _Least_allocation_size = _Small_string_capacity + 1 + 1;\r\n\r\n    // When doing _String_val operations by memcpy, we are touching:\r\n    //   _String_val::_Bx::_Buf (type is array of _Elem)\r\n    //   _String_val::_Bx::_Ptr (type is pointer)\r\n    //   _String_val::_Mysize   (type is size_type)\r\n    //   _String_val::_Myres    (type is size_type)\r\n    // N5001 [strings.general]/1 says _Elem must be trivially copyable standard-layout, so memcpy is safe.\r\n    // We need to ask if pointer is safe to memcpy.\r\n    // size_type must be an unsigned integral type so memcpy is safe.\r\n    // We also need to disable memcpy if the user has supplied _Traits, since\r\n    //   they can observe traits::assign and similar.\r\n    static constexpr bool _Can_memcpy_val =\r\n        _Is_specialization_v<_Traits, char_traits> && is_trivially_copyable_v<pointer>;\r\n    // This offset skips over the _Container_base members, if any\r\n    static constexpr size_t _Memcpy_val_offset = _Size_after_ebco_v<_Container_base>;\r\n    static constexpr size_t _Memcpy_val_size   = sizeof(_Scary_val) - _Memcpy_val_offset;\r\n\r\n    template <class _Iter>\r\n    // TRANSITION, /clr:pure is incompatible with templated static constexpr data members\r\n    // static constexpr bool _Is_elem_cvptr =\r\n    //     _Is_any_of_v<remove_const_t<_Iter>, _Elem*, const _Elem*, volatile _Elem*, const volatile _Elem*>;\r\n    using _Is_elem_cvptr = bool_constant<\r\n        _Is_any_of_v<remove_const_t<_Iter>, _Elem*, const _Elem*, volatile _Elem*, const volatile _Elem*>>;\r\n\r\n#if _HAS_CXX17\r\n    template <class _StringViewIsh>\r\n    using _Is_string_view_ish =\r\n        enable_if_t<conjunction_v<is_convertible<const _StringViewIsh&, basic_string_view<_Elem, _Traits>>,\r\n                        negation<is_convertible<const _StringViewIsh&, const _Elem*>>>,\r\n            int>;\r\n#endif // _HAS_CXX17\r\n\r\n#ifdef _INSERT_STRING_ANNOTATION\r\n    _CONSTEXPR20 void _Create_annotation() const noexcept {\r\n        // Annotates the valid range with shadow memory\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _Apply_annotation(_My_data._Myptr(), _My_data._Myres, _My_data._Myres, _My_data._Mysize);\r\n    }\r\n\r\n    _CONSTEXPR20 void _Remove_annotation() const noexcept {\r\n        // Removes annotation of the range with shadow memory\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _Apply_annotation(_My_data._Myptr(), _My_data._Myres, _My_data._Mysize, _My_data._Myres);\r\n    }\r\n\r\n    _CONSTEXPR20 void _Modify_annotation(const size_type _Old_size, const size_type _New_size) const noexcept {\r\n        if (_Old_size == _New_size) {\r\n            return;\r\n        }\r\n\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _Apply_annotation(_My_data._Myptr(), _My_data._Myres, _Old_size, _New_size);\r\n    }\r\n\r\n    static _CONSTEXPR20 void _Apply_annotation(const value_type* const _First, const size_type _Capacity,\r\n        const size_type _Old_size, const size_type _New_size) noexcept {\r\n        if constexpr (!_Disable_ASan_container_annotations_for_allocator<allocator_type>) {\r\n#if _HAS_CXX20\r\n            if (_STD is_constant_evaluated()) {\r\n                return;\r\n            }\r\n#endif // _HAS_CXX20\r\n\r\n            // Don't annotate small strings; only annotate on the heap.\r\n            if (_Capacity <= _Small_string_capacity || !_Asan_string_should_annotate) {\r\n                return;\r\n            }\r\n\r\n            // Note that `_Capacity`, `_Old_size`, and `_New_size` do not include the null terminator\r\n            const void* const _End      = _First + _Capacity + 1;\r\n            const void* const _Old_last = _First + _Old_size + 1;\r\n            const void* const _New_last = _First + _New_size + 1;\r\n\r\n            constexpr bool _Large_string_always_asan_aligned =\r\n                (_Container_allocation_minimum_asan_alignment<basic_string>) >= _Asan_granularity;\r\n\r\n            // for the non-aligned buffer options, the buffer must always have size >= 9 bytes,\r\n            // so it will always end at least one shadow memory section.\r\n\r\n            _Asan_aligned_pointers _Aligned;\r\n            if constexpr (_Large_string_always_asan_aligned) {\r\n                _Aligned = {_First, _STD _Get_asan_aligned_after(_End)};\r\n            } else {\r\n                _Aligned = _STD _Get_asan_aligned_first_end(_First, _End);\r\n            }\r\n            const void* const _Old_fixed = _Aligned._Clamp_to_end(_Old_last);\r\n            const void* const _New_fixed = _Aligned._Clamp_to_end(_New_last);\r\n\r\n            // --- always aligned case ---\r\n            // old state:\r\n            //   [_First, _Old_last) valid\r\n            //   [_Old_last, asan_aligned_after(_End)) poison\r\n            // new state:\r\n            //   [_First, _New_last) valid\r\n            //   [_New_last, asan_aligned_after(_End)) poison\r\n\r\n            // --- sometimes non-aligned case ---\r\n            // old state:\r\n            //   [_Aligned._First, _Old_fixed) valid\r\n            //   [_Old_fixed, _Aligned._End) poison\r\n            //   [_Aligned._End, _End) valid\r\n            // new state:\r\n            //   [_Aligned._First, _New_fixed) valid\r\n            //   [_New_fixed, _Aligned._End) poison\r\n            //   [_Aligned._End, _End) valid\r\n            _CSTD __sanitizer_annotate_contiguous_container(_Aligned._First, _Aligned._End, _Old_fixed, _New_fixed);\r\n        }\r\n    }\r\n\r\n#define _ASAN_STRING_REMOVE(_Str)                       (_Str)._Remove_annotation()\r\n#define _ASAN_STRING_CREATE(_Str)                       (_Str)._Create_annotation()\r\n#define _ASAN_STRING_MODIFY(_Str, _Old_size, _New_size) (_Str)._Modify_annotation(_Old_size, _New_size)\r\n#else // ^^^ _INSERT_STRING_ANNOTATION / !_INSERT_STRING_ANNOTATION vvv\r\n#define _ASAN_STRING_REMOVE(_Str)\r\n#define _ASAN_STRING_CREATE(_Str)\r\n#define _ASAN_STRING_MODIFY(_Str, _Old_size, _New_size)\r\n#endif // ^^^ !_INSERT_STRING_ANNOTATION ^^^\r\n\r\npublic:\r\n    _CONSTEXPR20\r\n    basic_string() noexcept(is_nothrow_default_constructible_v<_Alty>) : _Mypair(_Zero_then_variadic_args_t{}) {\r\n        _Construct_empty();\r\n    }\r\n\r\n    _CONSTEXPR20 explicit basic_string(const _Alloc& _Al) noexcept : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Construct_empty();\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string(const basic_string& _Right)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Alty_traits::select_on_container_copy_construction(_Right._Getal())) {\r\n        _Construct<_Construct_strategy::_From_string>(_Right._Mypair._Myval2._Myptr(), _Right._Mypair._Myval2._Mysize);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string(const basic_string& _Right, const _Alloc& _Al)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Construct<_Construct_strategy::_From_string>(_Right._Mypair._Myval2._Myptr(), _Right._Mypair._Myval2._Mysize);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string(const basic_string& _Right, const size_type _Roff, const _Alloc& _Al = _Alloc())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) { // construct from _Right [_Roff, <end>)\r\n        _Right._Mypair._Myval2._Check_offset(_Roff);\r\n        _Construct<_Construct_strategy::_From_ptr>(\r\n            _Right._Mypair._Myval2._Myptr() + _Roff, _Right._Mypair._Myval2._Clamp_suffix_size(_Roff, npos));\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string(\r\n        const basic_string& _Right, const size_type _Roff, const size_type _Count, const _Alloc& _Al = _Alloc())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) { // construct from _Right [_Roff, _Roff + _Count)\r\n        _Right._Mypair._Myval2._Check_offset(_Roff);\r\n        _Construct<_Construct_strategy::_From_ptr>(\r\n            _Right._Mypair._Myval2._Myptr() + _Roff, _Right._Mypair._Myval2._Clamp_suffix_size(_Roff, _Count));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    constexpr basic_string(basic_string&& _Right, const size_type _Roff, const _Alloc& _Al = _Alloc())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) { // construct from _Right [_Roff, <end>), potentially move\r\n        _Move_construct_from_substr(_Right, _Roff, npos);\r\n    }\r\n\r\n    constexpr basic_string(\r\n        basic_string&& _Right, const size_type _Roff, const size_type _Count, const _Alloc& _Al = _Alloc())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) { // construct from _Right [_Roff, _Roff + _Count), potentially move\r\n        _Move_construct_from_substr(_Right, _Roff, _Count);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 basic_string(_In_reads_(_Count) const _Elem* const _Ptr, _CRT_GUARDOVERFLOW const size_type _Count)\r\n        : _Mypair(_Zero_then_variadic_args_t{}) {\r\n        _Construct<_Construct_strategy::_From_ptr>(_Ptr, _Count);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _Alloc2 = _Alloc, enable_if_t<_Is_allocator<_Alloc2>::value, int> = 0>\r\n#endif // _HAS_CXX17\r\n    _CONSTEXPR20 basic_string(\r\n        _In_reads_(_Count) const _Elem* const _Ptr, _CRT_GUARDOVERFLOW const size_type _Count, const _Alloc& _Al)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Construct<_Construct_strategy::_From_ptr>(_Ptr, _Count);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string(_In_z_ const _Elem* const _Ptr) : _Mypair(_Zero_then_variadic_args_t{}) {\r\n        _Construct<_Construct_strategy::_From_ptr>(_Ptr, _Convert_size<size_type>(_Traits::length(_Ptr)));\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _Alloc2 = _Alloc, enable_if_t<_Is_allocator<_Alloc2>::value, int> = 0>\r\n#endif // _HAS_CXX17\r\n    _CONSTEXPR20 basic_string(_In_z_ const _Elem* const _Ptr, const _Alloc& _Al)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Construct<_Construct_strategy::_From_ptr>(_Ptr, _Convert_size<size_type>(_Traits::length(_Ptr)));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    basic_string(nullptr_t) = delete;\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 basic_string(_CRT_GUARDOVERFLOW const size_type _Count, const _Elem _Ch)\r\n        : _Mypair(_Zero_then_variadic_args_t{}) { // construct from _Count * _Ch\r\n        _Construct<_Construct_strategy::_From_char>(_Ch, _Count);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _Alloc2 = _Alloc, enable_if_t<_Is_allocator<_Alloc2>::value, int> = 0>\r\n#endif // _HAS_CXX17\r\n    _CONSTEXPR20 basic_string(_CRT_GUARDOVERFLOW const size_type _Count, const _Elem _Ch, const _Alloc& _Al)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) { // construct from _Count * _Ch with allocator\r\n        _Construct<_Construct_strategy::_From_char>(_Ch, _Count);\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    _CONSTEXPR20 basic_string(_Iter _First, _Iter _Last, const _Alloc& _Al = _Alloc())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        auto _UFirst = _STD _Get_unwrapped(_First);\r\n        auto _ULast  = _STD _Get_unwrapped(_Last);\r\n        if (_UFirst == _ULast) {\r\n            _Construct_empty();\r\n        } else {\r\n            if constexpr (_Is_elem_cvptr<decltype(_UFirst)>::value) {\r\n                _Construct<_Construct_strategy::_From_ptr>(\r\n                    _UFirst, _STD _Convert_size<size_type>(static_cast<size_t>(_ULast - _UFirst)));\r\n            } else if constexpr (_Is_cpp17_fwd_iter_v<decltype(_UFirst)>) {\r\n                const auto _Length = static_cast<size_t>(_STD distance(_UFirst, _ULast));\r\n                const auto _Count  = _STD _Convert_size<size_type>(_Length);\r\n                _Construct_from_iter(_STD move(_UFirst), _STD move(_ULast), _Count);\r\n            } else {\r\n                _Construct_from_iter(_STD move(_UFirst), _STD move(_ULast));\r\n            }\r\n        }\r\n    }\r\n\r\nprivate:\r\n    enum class _Allocation_policy { _At_least, _Exactly };\r\n\r\n    template <_Allocation_policy _Policy = _Allocation_policy::_At_least>\r\n    _NODISCARD static _CONSTEXPR20 pointer _Allocate_for_capacity(_Alty& _Al, size_type& _Capacity) {\r\n        _STL_INTERNAL_CHECK(_Capacity > _Small_string_capacity);\r\n        ++_Capacity; // Take null terminator into consideration\r\n\r\n        pointer _Fancy_ptr = nullptr;\r\n        if constexpr (_Policy == _Allocation_policy::_At_least) {\r\n            _Fancy_ptr = _Allocate_at_least_helper(_Al, _Capacity);\r\n        } else {\r\n            _STL_INTERNAL_STATIC_ASSERT(_Policy == _Allocation_policy::_Exactly);\r\n            _Fancy_ptr = _Al.allocate(_Capacity);\r\n        }\r\n\r\n#if _HAS_CXX20\r\n        // Start element lifetimes to avoid UB. This is a more general mechanism than _String_val::_Activate_SSO_buffer,\r\n        // but likely more impactful to throughput.\r\n        if (_STD is_constant_evaluated()) {\r\n            _Elem* const _Ptr = _Unfancy(_Fancy_ptr);\r\n            for (size_type _Idx = 0; _Idx < _Capacity; ++_Idx) {\r\n                _STD construct_at(_Ptr + _Idx);\r\n            }\r\n        }\r\n#endif // _HAS_CXX20\r\n        --_Capacity;\r\n        return _Fancy_ptr;\r\n    }\r\n\r\n    static _CONSTEXPR20 void _Deallocate_for_capacity(\r\n        _Alty& _Al, const pointer _Old_ptr, const size_type _Capacity) noexcept {\r\n        _STL_INTERNAL_CHECK(_Capacity > _Small_string_capacity);\r\n        _Al.deallocate(_Old_ptr, static_cast<size_type>(_Capacity + 1)); // +1 for null terminator\r\n    }\r\n\r\n    _CONSTEXPR20 void _Construct_empty() {\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _My_data._Alloc_proxy(_STD _Get_proxy_allocator(_Getal()));\r\n\r\n        // initialize basic_string data members\r\n        _My_data._Mysize = 0;\r\n        _My_data._Myres  = _Small_string_capacity;\r\n        _My_data._Activate_SSO_buffer();\r\n\r\n        // the _Traits::assign is last so the codegen doesn't think the char write can alias this\r\n        _Traits::assign(_My_data._Bx._Buf[0], _Elem());\r\n    }\r\n\r\n    enum class _Construct_strategy : uint8_t { _From_char, _From_ptr, _From_string };\r\n\r\n    template <_Construct_strategy _Strat, class _Char_or_ptr>\r\n    _CONSTEXPR20 void _Construct(const _Char_or_ptr _Arg, _CRT_GUARDOVERFLOW const size_type _Count) {\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _STL_INTERNAL_CHECK(!_My_data._Large_mode_engaged());\r\n\r\n        if constexpr (_Strat == _Construct_strategy::_From_char) {\r\n            _STL_INTERNAL_STATIC_ASSERT(is_same_v<_Char_or_ptr, _Elem>);\r\n        } else {\r\n            _STL_INTERNAL_STATIC_ASSERT(_Is_elem_cvptr<_Char_or_ptr>::value);\r\n        }\r\n\r\n        if (_Count > max_size()) {\r\n            _Xlen_string(); // result too long\r\n        }\r\n\r\n        auto& _Al     = _Getal();\r\n        auto _Alproxy = _STD _Get_proxy_allocator(_Al);\r\n        _Container_proxy_ptr<_Alty> _Proxy(_Alproxy, _My_data);\r\n\r\n        if (_Count <= _Small_string_capacity) {\r\n            _My_data._Mysize = _Count;\r\n            _My_data._Myres  = _Small_string_capacity;\r\n\r\n            if constexpr (_Strat == _Construct_strategy::_From_char) {\r\n                _Traits::assign(_My_data._Bx._Buf, static_cast<size_t>(_Count), _Arg);\r\n                _Traits::assign(_My_data._Bx._Buf[_Count], _Elem());\r\n            } else if constexpr (_Strat == _Construct_strategy::_From_ptr) {\r\n                _STD _Traits_copy_batch<_Traits>(_My_data._Bx._Buf, _Arg, static_cast<size_t>(_Count));\r\n                _Traits::assign(_My_data._Bx._Buf[_Count], _Elem());\r\n            } else { // _Strat == _Construct_strategy::_From_string\r\n#ifdef _INSERT_STRING_ANNOTATION\r\n                _Traits::copy(_My_data._Bx._Buf, _Arg, static_cast<size_t>(_Count + 1));\r\n#else // ^^^ _INSERT_STRING_ANNOTATION / !_INSERT_STRING_ANNOTATION vvv\r\n                _Traits::copy(_My_data._Bx._Buf, _Arg, _BUF_SIZE);\r\n#endif // ^^^ !_INSERT_STRING_ANNOTATION ^^^\r\n            }\r\n\r\n            _Proxy._Release();\r\n            return;\r\n        }\r\n\r\n        size_type _New_capacity = _Calculate_growth(_Count, _Small_string_capacity, max_size());\r\n        const pointer _New_ptr  = _Allocate_for_capacity(_Al, _New_capacity); // throws\r\n        _Construct_in_place(_My_data._Bx._Ptr, _New_ptr);\r\n\r\n        _My_data._Mysize = _Count;\r\n        _My_data._Myres  = _New_capacity;\r\n        if constexpr (_Strat == _Construct_strategy::_From_char) {\r\n            _Traits::assign(_Unfancy(_New_ptr), static_cast<size_t>(_Count), _Arg);\r\n            _Traits::assign(_Unfancy(_New_ptr)[_Count], _Elem());\r\n        } else if constexpr (_Strat == _Construct_strategy::_From_ptr) {\r\n            _STD _Traits_copy_batch<_Traits>(_Unfancy(_New_ptr), _Arg, static_cast<size_t>(_Count));\r\n            _Traits::assign(_Unfancy(_New_ptr)[_Count], _Elem());\r\n        } else { // _Strat == _Construct_strategy::_From_string\r\n            _Traits::copy(_Unfancy(_New_ptr), _Arg, static_cast<size_t>(_Count + 1));\r\n        }\r\n\r\n        _ASAN_STRING_CREATE(*this);\r\n        _Proxy._Release();\r\n    }\r\n\r\n    template <class _Iter, class _Sent, class _Size = nullptr_t>\r\n    _CONSTEXPR20 void _Construct_from_iter(_Iter _First, const _Sent _Last, _Size _Count = {}) {\r\n        // Pre: _Iter models input_iterator or meets the Cpp17InputIterator requirements.\r\n        // Pre: [_First, _Last) is a valid range.\r\n        // Pre: if _Iter models forward_iterator or meets the Cpp17ForwardIterator requirements,\r\n        //      then is_same_v<_Size, size_type> holds.\r\n        // Pre: if is_same_v<_Size, size_type>, _Count is the length of [_First, _Last).\r\n        // Pre: *this is in small mode; the lifetime of the SSO elements has already begun.\r\n\r\n        auto& _My_data = _Mypair._Myval2;\r\n        auto& _Al      = _Getal();\r\n        auto _Alproxy  = _STD _Get_proxy_allocator(_Al);\r\n        _Container_proxy_ptr<_Alty> _Proxy(_Alproxy, _My_data);\r\n\r\n        _My_data._Mysize = 0;\r\n        _My_data._Myres  = _Small_string_capacity;\r\n\r\n        if constexpr (is_same_v<_Size, size_type>) {\r\n            if (_Count > max_size()) {\r\n                _Xlen_string(); // result too long\r\n            }\r\n\r\n            if (_Count > _Small_string_capacity) {\r\n                size_type _New_capacity = _Calculate_growth(_Count);\r\n                const pointer _New_ptr  = _Allocate_for_capacity(_Al, _New_capacity); // throws\r\n                _Construct_in_place(_My_data._Bx._Ptr, _New_ptr);\r\n                _My_data._Myres = _New_capacity;\r\n            }\r\n        }\r\n\r\n        _Tidy_deallocate_guard<basic_string> _Guard{this};\r\n\r\n        constexpr bool _Can_construct_by_copy =\r\n            _Is_specialization_v<_Traits, char_traits> && _Is_EcharT<_Elem> && is_same_v<_Size, size_type>;\r\n\r\n        if constexpr (_Can_construct_by_copy) {\r\n            const auto _Data = _My_data._Myptr();\r\n            _STD _Copy_n_unchecked4(_STD move(_First), _Count, _Data);\r\n            _My_data._Mysize = _Count;\r\n            _Data[_Count]    = _Elem();\r\n        } else {\r\n            for (; _First != _Last; ++_First) {\r\n                if constexpr (!is_same_v<_Size, size_type>) {\r\n                    if (_My_data._Mysize == _My_data._Myres) { // Need to grow\r\n                        if (_My_data._Mysize == max_size()) {\r\n                            _Xlen_string(); // result too long\r\n                        }\r\n\r\n                        _Elem* const _Old_ptr   = _My_data._Myptr();\r\n                        size_type _New_capacity = _Calculate_growth(_My_data._Mysize + 1);\r\n                        const pointer _New_ptr  = _Allocate_for_capacity(_Al, _New_capacity); // throws\r\n\r\n                        _Traits::copy(_Unfancy(_New_ptr), _Old_ptr, _My_data._Mysize);\r\n                        if (_My_data._Large_mode_engaged()) { // Need to deallocate old storage\r\n                            _Deallocate_for_capacity(_Al, _My_data._Bx._Ptr, _My_data._Myres);\r\n                            _My_data._Bx._Ptr = _New_ptr;\r\n                        } else {\r\n                            _Construct_in_place(_My_data._Bx._Ptr, _New_ptr);\r\n                        }\r\n                        _My_data._Myres = _New_capacity;\r\n                    }\r\n                }\r\n\r\n                _Elem* const _Ptr = _My_data._Myptr();\r\n                _Traits::assign(_Ptr[_My_data._Mysize], *_First);\r\n                ++_My_data._Mysize;\r\n            }\r\n\r\n            _Elem* const _Ptr = _My_data._Myptr();\r\n            _Traits::assign(_Ptr[_My_data._Mysize], _Elem());\r\n        }\r\n\r\n        _ASAN_STRING_CREATE(*this);\r\n        _Guard._Target = nullptr;\r\n        _Proxy._Release();\r\n    }\r\n\r\npublic:\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Elem> _Rng>\r\n    constexpr basic_string(from_range_t, _Rng&& _Range, const _Alloc& _Al = _Alloc())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        if constexpr (_RANGES sized_range<_Rng> || _RANGES forward_range<_Rng>) {\r\n            const auto _Length = _To_unsigned_like(_RANGES distance(_Range));\r\n            const auto _Count  = _Convert_size<size_type>(_Length);\r\n            if constexpr (_Contiguous_range_of<_Rng, _Elem>) {\r\n                _Construct<_Construct_strategy::_From_ptr>(_RANGES data(_Range), _Count);\r\n            } else {\r\n                _Construct_from_iter(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range), _Count);\r\n            }\r\n        } else {\r\n            _Construct_from_iter(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 basic_string(basic_string&& _Right) noexcept\r\n        : _Mypair(_One_then_variadic_args_t{}, _STD move(_Right._Getal())) {\r\n        _Mypair._Myval2._Alloc_proxy(_STD _Get_proxy_allocator(_Getal()));\r\n        _Take_contents(_Right);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string(basic_string&& _Right, const _Alloc& _Al)\r\n        noexcept(_Alty_traits::is_always_equal::value) // strengthened\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        if constexpr (!_Alty_traits::is_always_equal::value) {\r\n            if (_Getal() != _Right._Getal()) {\r\n                _Construct<_Construct_strategy::_From_string>(\r\n                    _Right._Mypair._Myval2._Myptr(), _Right._Mypair._Myval2._Mysize);\r\n                return;\r\n            }\r\n        }\r\n\r\n        _Mypair._Myval2._Alloc_proxy(_STD _Get_proxy_allocator(_Getal()));\r\n        _Take_contents(_Right);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string(_String_constructor_concat_tag, const basic_string& _Source_of_al,\r\n        const _Elem* const _Left_ptr, const size_type _Left_size, const _Elem* const _Right_ptr,\r\n        const size_type _Right_size)\r\n        : _Mypair(_One_then_variadic_args_t{},\r\n              _Alty_traits::select_on_container_copy_construction(_Source_of_al._Getal())) {\r\n        _STL_INTERNAL_CHECK(_Left_size <= max_size());\r\n        _STL_INTERNAL_CHECK(_Right_size <= max_size());\r\n        _STL_INTERNAL_CHECK(_Right_size <= max_size() - _Left_size);\r\n        const auto _New_size    = static_cast<size_type>(_Left_size + _Right_size);\r\n        size_type _New_capacity = _Small_string_capacity;\r\n        auto& _My_data          = _Mypair._Myval2;\r\n        _Elem* _Ptr             = _My_data._Bx._Buf;\r\n        auto _Alproxy           = _STD _Get_proxy_allocator(_Getal());\r\n        _Container_proxy_ptr<_Alty> _Proxy(_Alproxy, _My_data); // throws\r\n\r\n        if (_New_capacity < _New_size) {\r\n            _New_capacity           = _Calculate_growth(_New_size, _Small_string_capacity, max_size());\r\n            const pointer _Fancyptr = _Allocate_for_capacity(_Getal(), _New_capacity); // throws\r\n            _Ptr                    = _Unfancy(_Fancyptr);\r\n            _Construct_in_place(_My_data._Bx._Ptr, _Fancyptr);\r\n        }\r\n\r\n        _My_data._Mysize = _New_size;\r\n        _My_data._Myres  = _New_capacity;\r\n        _Traits::copy(_Ptr, _Left_ptr, static_cast<size_t>(_Left_size));\r\n        _Traits::copy(_Ptr + static_cast<ptrdiff_t>(_Left_size), _Right_ptr, static_cast<size_t>(_Right_size));\r\n        _Traits::assign(_Ptr[_New_size], _Elem());\r\n        _ASAN_STRING_CREATE(*this);\r\n        _Proxy._Release();\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string(_String_constructor_concat_tag, basic_string& _Left, basic_string& _Right)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Left._Getal()) {\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        auto& _Left_data  = _Left._Mypair._Myval2;\r\n        auto& _Right_data = _Right._Mypair._Myval2;\r\n        _Left_data._Orphan_all();\r\n        _Right_data._Orphan_all();\r\n        const auto _Left_size  = _Left_data._Mysize;\r\n        const auto _Right_size = _Right_data._Mysize;\r\n\r\n        const auto _Left_capacity  = _Left_data._Myres;\r\n        const auto _Right_capacity = _Right_data._Myres;\r\n        // overflow is OK due to max_size() checks:\r\n        const auto _New_size     = static_cast<size_type>(_Left_size + _Right_size);\r\n        const bool _Fits_in_left = _Right_size <= _Left_capacity - _Left_size;\r\n        if (_Fits_in_left && _Right_capacity <= _Left_capacity) {\r\n            // take _Left's buffer, max_size() is OK because _Fits_in_left\r\n            _My_data._Alloc_proxy(_STD _Get_proxy_allocator(_Getal())); // throws, hereafter nothrow in this block\r\n            _Take_contents(_Left);\r\n            const auto _Ptr = _My_data._Myptr();\r\n            _ASAN_STRING_MODIFY(*this, _Left_size, _New_size);\r\n            _Traits::copy(_Ptr + _Left_size, _Right_data._Myptr(), static_cast<size_t>(_Right_size + 1));\r\n            _My_data._Mysize = _New_size;\r\n            return;\r\n        }\r\n\r\n        const bool _Fits_in_right = _Left_size <= _Right_capacity - _Right_size;\r\n        if (_Allocators_equal(_Getal(), _Right._Getal()) && _Fits_in_right) {\r\n            // take _Right's buffer, max_size() is OK because _Fits_in_right\r\n            // At this point, we have tested:\r\n            // !(_Fits_in_left && _Right_capacity <= _Left_capacity) && _Fits_in_right\r\n            // therefore: (by De Morgan's Laws)\r\n            // (!_Fits_in_left || _Right_capacity > _Left_capacity) && _Fits_in_right\r\n            // therefore: (by the distributive property)\r\n            // (!_Fits_in_left && _Fits_in_right)  // implying _Right has more capacity\r\n            //     || (_Right_capacity > _Left_capacity && _Fits_in_right)  // tests that _Right has more capacity\r\n            // therefore: _Right must have more than the minimum capacity, so it must be _Large_mode_engaged()\r\n            _STL_INTERNAL_CHECK(_Right_data._Large_mode_engaged());\r\n            _My_data._Alloc_proxy(_STD _Get_proxy_allocator(_Getal())); // throws, hereafter nothrow in this block\r\n            _Take_contents(_Right);\r\n            const auto _Ptr = _Unfancy(_My_data._Bx._Ptr);\r\n            _ASAN_STRING_MODIFY(*this, _Right_size, _New_size);\r\n            _Traits::move(_Ptr + _Left_size, _Ptr, static_cast<size_t>(_Right_size + 1));\r\n            _Traits::copy(_Ptr, _Left_data._Myptr(), static_cast<size_t>(_Left_size));\r\n            _My_data._Mysize = _New_size;\r\n            return;\r\n        }\r\n\r\n        // can't use either buffer, reallocate\r\n        const auto _Max = max_size();\r\n        if (_Max - _Left_size < _Right_size) { // check if max_size() is OK\r\n            _Xlen_string();\r\n        }\r\n\r\n        size_type _New_capacity = _Calculate_growth(_New_size, _Small_string_capacity, _Max);\r\n        auto _Alproxy           = _STD _Get_proxy_allocator(_Getal());\r\n        _Container_proxy_ptr<_Alty> _Proxy(_Alproxy, _My_data); // throws\r\n        const pointer _Fancyptr = _Allocate_for_capacity(_Getal(), _New_capacity); // throws\r\n        // nothrow hereafter\r\n        _Construct_in_place(_My_data._Bx._Ptr, _Fancyptr);\r\n        _My_data._Mysize = _New_size;\r\n        _My_data._Myres  = _New_capacity;\r\n        const auto _Ptr  = _Unfancy(_Fancyptr);\r\n        _Traits::copy(_Ptr, _Left_data._Myptr(), static_cast<size_t>(_Left_size));\r\n        _Traits::copy(_Ptr + _Left_size, _Right_data._Myptr(), static_cast<size_t>(_Right_size + 1));\r\n        _ASAN_STRING_CREATE(*this);\r\n        _Proxy._Release();\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _CONSTEXPR20 explicit basic_string(const _StringViewIsh& _Right, const _Alloc& _Al = _Alloc())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        const basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        _Construct<_Construct_strategy::_From_ptr>(_As_view.data(), _Convert_size<size_type>(_As_view.size()));\r\n    }\r\n\r\n    template <class _Ty, enable_if_t<is_convertible_v<const _Ty&, basic_string_view<_Elem, _Traits>>, int> = 0>\r\n    _CONSTEXPR20 basic_string(\r\n        const _Ty& _Right, const size_type _Roff, const size_type _Count, const _Alloc& _Al = _Alloc())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) { // construct from _Right [_Roff, _Roff + _Count) using _Al\r\n        const basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        const auto _As_sub_view = _As_view.substr(static_cast<size_t>(_Roff), static_cast<size_t>(_Count));\r\n        _Construct<_Construct_strategy::_From_ptr>(_As_sub_view.data(), _Convert_size<size_type>(_As_sub_view.size()));\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD bool _Move_assign_from_buffer(\r\n        _Elem* const _Right, const size_type _Size, const size_type _Actual_allocation_size) {\r\n        // Move assign from a buffer, used exclusively by basic_stringbuf; returns _Large_mode_engaged()\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _STL_INTERNAL_CHECK(!_My_data._Large_mode_engaged() && _My_data._Mysize == 0);\r\n        _STL_INTERNAL_CHECK(_Size < _Actual_allocation_size); // So there is room for null terminator\r\n        _Traits::assign(_Right[_Size], _Elem());\r\n\r\n        const bool _Is_large = _Actual_allocation_size >= _Least_allocation_size;\r\n        if (_Is_large) {\r\n            _ASAN_STRING_REMOVE(*this);\r\n            _Construct_in_place(_My_data._Bx._Ptr, _Refancy<pointer>(_Right));\r\n            _My_data._Mysize = _Size;\r\n            _My_data._Myres  = _Actual_allocation_size - 1;\r\n            _ASAN_STRING_CREATE(*this);\r\n        } else {\r\n            _Traits::copy(_My_data._Bx._Buf, _Right, _Actual_allocation_size);\r\n            _My_data._Mysize = _Size;\r\n            _My_data._Myres  = _Small_string_capacity;\r\n        }\r\n\r\n        return _Is_large;\r\n    }\r\n\r\n    // No instance of this type can exist where an exception may be thrown.\r\n    struct _Released_buffer {\r\n        pointer _Ptr;\r\n        size_type _Size;\r\n        size_type _Actual_allocation_size;\r\n    };\r\n\r\n    _NODISCARD _Released_buffer _Release_to_buffer(_Alloc& _Al) {\r\n        // Release to a buffer, or allocate a new one if in small string mode; used exclusively by basic_stringbuf\r\n        _Released_buffer _Result;\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _Result._Size  = _My_data._Mysize;\r\n        _My_data._Orphan_all();\r\n        _ASAN_STRING_REMOVE(*this);\r\n        if (_My_data._Large_mode_engaged()) {\r\n            _Result._Ptr                    = _My_data._Bx._Ptr;\r\n            _Result._Actual_allocation_size = _My_data._Myres + 1;\r\n\r\n            _My_data._Bx._Switch_to_buf();\r\n        } else {\r\n            // use _Least_allocation_size to avoid small mode, if the buffer is assigned back\r\n            size_type _Allocated = _Least_allocation_size;\r\n            _Result._Ptr         = _Allocate_at_least_helper(_Al, _Allocated);\r\n            _Traits::copy(_Unfancy(_Result._Ptr), _My_data._Bx._Buf, _BUF_SIZE);\r\n            _Result._Actual_allocation_size = _Allocated;\r\n        }\r\n        _My_data._Mysize = 0;\r\n        _My_data._Myres  = _Small_string_capacity;\r\n        _Traits::assign(_My_data._Bx._Buf[0], _Elem());\r\n        return _Result;\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    _CONSTEXPR20 basic_string& operator=(basic_string&& _Right)\r\n        noexcept(_Choose_pocma_v<_Alty> != _Pocma_values::_No_propagate_allocators) {\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n        auto& _Al                 = _Getal();\r\n        auto& _Right_al           = _Right._Getal();\r\n        constexpr auto _Pocma_val = _Choose_pocma_v<_Alty>;\r\n        if constexpr (_Pocma_val == _Pocma_values::_Propagate_allocators) {\r\n            if (_Al != _Right_al) {\r\n                // intentionally slams into noexcept on OOM, TRANSITION, VSO-466800\r\n                _Mypair._Myval2._Orphan_all();\r\n                _Mypair._Myval2._Reload_proxy(_STD _Get_proxy_allocator(_Al), _STD _Get_proxy_allocator(_Right_al));\r\n            }\r\n        } else if constexpr (_Pocma_val == _Pocma_values::_No_propagate_allocators) {\r\n            if (_Al != _Right_al) {\r\n                assign(_Right._Mypair._Myval2._Myptr(), _Right._Mypair._Myval2._Mysize);\r\n                return *this;\r\n            }\r\n        }\r\n\r\n        _Tidy_deallocate();\r\n        _Pocma(_Al, _Right_al);\r\n        _Take_contents(_Right);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& assign(basic_string&& _Right) noexcept(noexcept(*this = _STD move(_Right))) {\r\n        *this = _STD move(_Right);\r\n        return *this;\r\n    }\r\n\r\nprivate:\r\n    _CONSTEXPR20 void _Take_contents(basic_string& _Right) noexcept {\r\n        // assign by stealing _Right's buffer\r\n        // pre: this != &_Right\r\n        // pre: allocator propagation (POCMA) from _Right, if necessary, is complete\r\n        // pre: *this owns no memory, iterators orphaned\r\n        // (note: _Buf/_Ptr/_Mysize/_Myres may be garbage init)\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        auto& _Right_data = _Right._Mypair._Myval2;\r\n\r\n#if !defined(_INSERT_STRING_ANNOTATION)\r\n        if constexpr (_Can_memcpy_val) {\r\n#if _HAS_CXX20\r\n            if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n            {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n                if (_Right_data._Large_mode_engaged()) {\r\n                    // take ownership of _Right's iterators along with its buffer\r\n                    _Swap_proxy_and_iterators(_Right);\r\n                } else {\r\n                    _Right_data._Orphan_all();\r\n                }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n                const auto _My_data_mem =\r\n                    reinterpret_cast<unsigned char*>(_STD addressof(_Mypair._Myval2)) + _Memcpy_val_offset;\r\n                const auto _Right_data_mem =\r\n                    reinterpret_cast<const unsigned char*>(_STD addressof(_Right._Mypair._Myval2)) + _Memcpy_val_offset;\r\n                _CSTD memcpy(_My_data_mem, _Right_data_mem, _Memcpy_val_size);\r\n\r\n                _Right_data._Mysize = 0;\r\n                _Right_data._Myres  = _Small_string_capacity;\r\n                _Right_data._Activate_SSO_buffer();\r\n                _Traits::assign(_Right_data._Bx._Buf[0], _Elem());\r\n                return;\r\n            }\r\n        }\r\n#endif // !defined(_INSERT_STRING_ANNOTATION)\r\n\r\n        if (_Right_data._Large_mode_engaged()) { // steal buffer\r\n            _Swap_proxy_and_iterators(_Right);\r\n\r\n            _Construct_in_place(_My_data._Bx._Ptr, _Right_data._Bx._Ptr);\r\n            _Right_data._Bx._Switch_to_buf();\r\n        } else { // copy small string buffer\r\n            _Right_data._Orphan_all();\r\n\r\n            _My_data._Activate_SSO_buffer();\r\n            _Traits::copy(_My_data._Bx._Buf, _Right_data._Bx._Buf, static_cast<size_t>(_Right_data._Mysize + 1));\r\n        }\r\n\r\n        _My_data._Myres  = _Right_data._Myres;\r\n        _My_data._Mysize = _Right_data._Mysize;\r\n\r\n        _Right_data._Mysize = 0;\r\n        _Right_data._Myres  = _Small_string_capacity;\r\n        _Traits::assign(_Right_data._Bx._Buf[0], _Elem());\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    constexpr void _Move_construct_from_substr(basic_string& _Right, const size_type _Roff, const size_type _Size_max) {\r\n        auto& _Right_data = _Right._Mypair._Myval2;\r\n        _Right_data._Check_offset(_Roff);\r\n\r\n        const auto _Result_size = _Right_data._Clamp_suffix_size(_Roff, _Size_max);\r\n        const auto _Right_ptr   = _Right_data._Myptr();\r\n        auto& _Al               = _Getal();\r\n        if (_Allocators_equal(_Al, _Right._Getal()) && _Result_size > _Small_string_capacity) {\r\n            _Mypair._Myval2._Alloc_proxy(_STD _Get_proxy_allocator(_Al));\r\n\r\n            if (_Roff != 0) {\r\n                _Traits::move(_Right_ptr, _Right_ptr + _Roff, static_cast<size_t>(_Result_size));\r\n            }\r\n            _Right._Eos(_Result_size);\r\n            _Take_contents(_Right);\r\n        } else {\r\n            _Construct<_Construct_strategy::_From_ptr>(_Right_ptr + _Roff, _Result_size);\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\npublic:\r\n    _CONSTEXPR20 basic_string(initializer_list<_Elem> _Ilist, const _Alloc& _Al = allocator_type())\r\n        : _Mypair(_One_then_variadic_args_t{}, _Al) {\r\n        _Construct<_Construct_strategy::_From_ptr>(_Ilist.begin(), _Convert_size<size_type>(_Ilist.size()));\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& operator=(initializer_list<_Elem> _Ilist) {\r\n        return assign(_Ilist.begin(), _Convert_size<size_type>(_Ilist.size()));\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& operator+=(initializer_list<_Elem> _Ilist) {\r\n        return append(_Ilist.begin(), _Convert_size<size_type>(_Ilist.size()));\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& assign(initializer_list<_Elem> _Ilist) {\r\n        return assign(_Ilist.begin(), _Convert_size<size_type>(_Ilist.size()));\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& append(initializer_list<_Elem> _Ilist) {\r\n        return append(_Ilist.begin(), _Convert_size<size_type>(_Ilist.size()));\r\n    }\r\n\r\n    _CONSTEXPR20 iterator insert(const const_iterator _Where, const initializer_list<_Elem> _Ilist) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2), \"string iterator incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Off = static_cast<size_type>(_Unfancy(_Where._Ptr) - _Mypair._Myval2._Myptr());\r\n        insert(_Off, _Ilist.begin(), _Convert_size<size_type>(_Ilist.size()));\r\n        return begin() + static_cast<difference_type>(_Off);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& replace(\r\n        const const_iterator _First, const const_iterator _Last, const initializer_list<_Elem> _Ilist) {\r\n        // replace with initializer_list\r\n        _STD _Adl_verify_range(_First, _Last);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_First._Getcont() == _STD addressof(_Mypair._Myval2), \"string iterators incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Offset = static_cast<size_type>(_Unfancy(_First._Ptr) - _Mypair._Myval2._Myptr());\r\n        const auto _Length = static_cast<size_type>(_Last._Ptr - _First._Ptr);\r\n        return replace(_Offset, _Length, _Ilist.begin(), _Convert_size<size_type>(_Ilist.size()));\r\n    }\r\n\r\n    _CONSTEXPR20 ~basic_string() noexcept {\r\n        _Tidy_deallocate();\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        auto _Alproxy            = _STD _Get_proxy_allocator(_Getal());\r\n        const auto _To_delete    = _Mypair._Myval2._Myproxy;\r\n        _Mypair._Myval2._Myproxy = nullptr;\r\n        _Delete_plain_internal(_Alproxy, _To_delete);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\n    static constexpr auto npos{static_cast<size_type>(-1)};\r\n\r\n    _CONSTEXPR20 basic_string& operator=(const basic_string& _Right) {\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n        auto& _Al             = _Getal();\r\n        const auto& _Right_al = _Right._Getal();\r\n        if constexpr (_Choose_pocca_v<_Alty>) {\r\n            if (_Al != _Right_al) {\r\n                auto _Alproxy       = _STD _Get_proxy_allocator(_Al);\r\n                auto _Right_alproxy = _STD _Get_proxy_allocator(_Right_al);\r\n                _Container_proxy_ptr<_Alty> _New_proxy(_Right_alproxy, _Leave_proxy_unbound{}); // throws\r\n\r\n                const size_type _Right_size   = _Right._Mypair._Myval2._Mysize;\r\n                const _Elem* const _Right_ptr = _Right._Mypair._Myval2._Myptr();\r\n                if (_Right_size > _Small_string_capacity) {\r\n                    size_type _New_capacity = _Calculate_growth(_Right_size, _Small_string_capacity, _Right.max_size());\r\n                    auto _Right_al_non_const = _Right_al;\r\n                    const pointer _New_ptr   = _Allocate_for_capacity(_Right_al_non_const, _New_capacity); // throws\r\n                    _Traits::copy(_Unfancy(_New_ptr), _Right_ptr, _Right_size + 1);\r\n\r\n                    _Tidy_deallocate();\r\n                    _Construct_in_place(_Mypair._Myval2._Bx._Ptr, _New_ptr);\r\n                    _Mypair._Myval2._Mysize = _Right_size;\r\n                    _Mypair._Myval2._Myres  = _New_capacity;\r\n                    _ASAN_STRING_CREATE(*this);\r\n                } else {\r\n                    _Tidy_deallocate();\r\n                    _Traits::copy(_Mypair._Myval2._Bx._Buf, _Right_ptr, _Right_size + 1);\r\n                    _Mypair._Myval2._Mysize = _Right_size;\r\n                    _Mypair._Myval2._Myres  = _Small_string_capacity;\r\n                }\r\n\r\n                _Pocca(_Al, _Right_al);\r\n                _New_proxy._Bind(_Alproxy, _STD addressof(_Mypair._Myval2));\r\n                return *this;\r\n            }\r\n        }\r\n\r\n        _Pocca(_Al, _Right_al);\r\n        assign(_Right._Mypair._Myval2._Myptr(), _Right._Mypair._Myval2._Mysize);\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _CONSTEXPR20 basic_string& operator=(const _StringViewIsh& _Right) {\r\n        return assign(_Right);\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _CONSTEXPR20 basic_string& operator=(_In_z_ const _Elem* const _Ptr) {\r\n        return assign(_Ptr);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    basic_string& operator=(nullptr_t) = delete;\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 basic_string& operator=(const _Elem _Ch) { // assign {_Ch, _Elem()}\r\n        _ASAN_STRING_MODIFY(*this, _Mypair._Myval2._Mysize, 1);\r\n        _Mypair._Myval2._Mysize = 1;\r\n        _Elem* const _Ptr       = _Mypair._Myval2._Myptr();\r\n        _Traits::assign(_Ptr[0], _Ch);\r\n        _Traits::assign(_Ptr[1], _Elem());\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& operator+=(const basic_string& _Right) {\r\n        return append(_Right);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _CONSTEXPR20 basic_string& operator+=(const _StringViewIsh& _Right) {\r\n        return append(_Right);\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _CONSTEXPR20 basic_string& operator+=(_In_z_ const _Elem* const _Ptr) { // append [_Ptr, <null>)\r\n        return append(_Ptr);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& operator+=(_Elem _Ch) {\r\n        push_back(_Ch);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& append(const basic_string& _Right) {\r\n        return _Append(_Right._Mypair._Myval2._Myptr(), _Right._Mypair._Myval2._Mysize);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& append(const basic_string& _Right, const size_type _Roff, size_type _Count = npos) {\r\n        // append _Right [_Roff, _Roff + _Count)\r\n        _Right._Mypair._Myval2._Check_offset(_Roff);\r\n        _Count = _Right._Mypair._Myval2._Clamp_suffix_size(_Roff, _Count);\r\n        return _Append(_Right._Mypair._Myval2._Myptr() + _Roff, _Count);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _CONSTEXPR20 basic_string& append(const _StringViewIsh& _Right) {\r\n        const basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        return _Append(_As_view.data(), _Convert_size<size_type>(_As_view.size()));\r\n    }\r\n\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _CONSTEXPR20 basic_string& append(\r\n        const _StringViewIsh& _Right, const size_type _Roff, const size_type _Count = npos) {\r\n        // append _Right [_Roff, _Roff + _Count)\r\n        basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        return append(_As_view.substr(static_cast<size_t>(_Roff), static_cast<size_t>(_Count)));\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _CONSTEXPR20 basic_string& append(\r\n        _In_reads_(_Count) const _Elem* const _Ptr, _CRT_GUARDOVERFLOW const size_type _Count) {\r\n        // append [_Ptr, _Ptr + _Count)\r\n        return _Append(_Ptr, _Count);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& append(_In_z_ const _Elem* const _Ptr) { // append [_Ptr, <null>)\r\n        return _Append(_Ptr, _Convert_size<size_type>(_Traits::length(_Ptr)));\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& append(_CRT_GUARDOVERFLOW const size_type _Count, const _Elem _Ch) {\r\n        // append _Count * _Ch\r\n        const size_type _Old_size = _Mypair._Myval2._Mysize;\r\n        if (_Count <= _Mypair._Myval2._Myres - _Old_size) {\r\n            const auto _New_size = static_cast<size_type>(_Old_size + _Count);\r\n            _ASAN_STRING_MODIFY(*this, _Old_size, _New_size);\r\n            _Mypair._Myval2._Mysize = _New_size;\r\n            _Elem* const _Old_ptr   = _Mypair._Myval2._Myptr();\r\n            _Traits::assign(_Old_ptr + _Old_size, static_cast<size_t>(_Count), _Ch);\r\n            _Traits::assign(_Old_ptr[_Old_size + _Count], _Elem());\r\n            return *this;\r\n        }\r\n\r\n        return _Reallocate_grow_by(\r\n            _Count,\r\n            [](_Elem* const _New_ptr, const _Elem* const _Old_ptr, const size_type _Old_size, const size_type _Count,\r\n                const _Elem _Ch) static {\r\n                _Traits::copy(_New_ptr, _Old_ptr, static_cast<size_t>(_Old_size));\r\n                _Traits::assign(_New_ptr + _Old_size, static_cast<size_t>(_Count), _Ch);\r\n                _Traits::assign(_New_ptr[_Old_size + _Count], _Elem());\r\n            },\r\n            _Count, _Ch);\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    _CONSTEXPR20 basic_string& append(const _Iter _First, const _Iter _Last) {\r\n        // append [_First, _Last), input iterators\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        const auto _UFirst = _STD _Get_unwrapped(_First);\r\n        const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n        if constexpr (_Is_elem_cvptr<decltype(_UFirst)>::value) {\r\n            return _Append(_UFirst, _STD _Convert_size<size_type>(static_cast<size_t>(_ULast - _UFirst)));\r\n        } else {\r\n            const basic_string _Right(_UFirst, _ULast, get_allocator());\r\n            return _Append(_Right._Mypair._Myval2._Myptr(), _Right._Mypair._Myval2._Mysize);\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Elem> _Rng>\r\n    constexpr basic_string& append_range(_Rng&& _Range) {\r\n        if constexpr (_RANGES sized_range<_Rng> && _Contiguous_range_of<_Rng, _Elem>) {\r\n            const auto _Count = _Convert_size<size_type>(_To_unsigned_like(_RANGES size(_Range)));\r\n            return _Append(_RANGES data(_Range), _Count);\r\n        } else {\r\n            const basic_string _Right(from_range, _Range, get_allocator());\r\n            return _Append(_Right._Mypair._Myval2._Myptr(), _Right._Mypair._Myval2._Mysize);\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 basic_string& assign(const basic_string& _Right) {\r\n        *this = _Right;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& assign(const basic_string& _Right, const size_type _Roff, size_type _Count = npos) {\r\n        // assign _Right [_Roff, _Roff + _Count)\r\n        _Right._Mypair._Myval2._Check_offset(_Roff);\r\n        _Count = _Right._Mypair._Myval2._Clamp_suffix_size(_Roff, _Count);\r\n        return _Assign(_Right._Mypair._Myval2._Myptr() + _Roff, _Count);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _CONSTEXPR20 basic_string& assign(const _StringViewIsh& _Right) {\r\n        const basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        return _Assign(_As_view.data(), _Convert_size<size_type>(_As_view.size()));\r\n    }\r\n\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _CONSTEXPR20 basic_string& assign(\r\n        const _StringViewIsh& _Right, const size_type _Roff, const size_type _Count = npos) {\r\n        // assign _Right [_Roff, _Roff + _Count)\r\n        basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        return assign(_As_view.substr(static_cast<size_t>(_Roff), static_cast<size_t>(_Count)));\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _CONSTEXPR20 basic_string& assign(\r\n        _In_reads_(_Count) const _Elem* const _Ptr, _CRT_GUARDOVERFLOW const size_type _Count) {\r\n        // assign [_Ptr, _Ptr + _Count)\r\n        return _Assign(_Ptr, _Count);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& assign(_In_z_ const _Elem* const _Ptr) {\r\n        return _Assign(_Ptr, _Convert_size<size_type>(_Traits::length(_Ptr)));\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& assign(_CRT_GUARDOVERFLOW const size_type _Count, const _Elem _Ch) {\r\n        // assign _Count * _Ch\r\n        if (_Count <= _Mypair._Myval2._Myres) {\r\n            _ASAN_STRING_MODIFY(*this, _Mypair._Myval2._Mysize, _Count);\r\n            _Elem* const _Old_ptr   = _Mypair._Myval2._Myptr();\r\n            _Mypair._Myval2._Mysize = _Count;\r\n            _Traits::assign(_Old_ptr, _Count, _Ch);\r\n            _Traits::assign(_Old_ptr[_Count], _Elem());\r\n            return *this;\r\n        }\r\n\r\n        return _Reallocate_for(\r\n            _Count,\r\n            [](_Elem* const _New_ptr, const size_type _Count, const _Elem _Ch) static {\r\n                _Traits::assign(_New_ptr, _Count, _Ch);\r\n                _Traits::assign(_New_ptr[_Count], _Elem());\r\n            },\r\n            _Ch);\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    _CONSTEXPR20 basic_string& assign(const _Iter _First, const _Iter _Last) {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        const auto _UFirst = _STD _Get_unwrapped(_First);\r\n        const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n        if constexpr (_Is_elem_cvptr<decltype(_UFirst)>::value) {\r\n            return _Assign(_UFirst, _STD _Convert_size<size_type>(static_cast<size_t>(_ULast - _UFirst)));\r\n        } else {\r\n            basic_string _Right(_UFirst, _ULast, get_allocator());\r\n            if (_Mypair._Myval2._Myres < _Right._Mypair._Myval2._Myres) {\r\n                _Mypair._Myval2._Orphan_all();\r\n                _Swap_data(_Right);\r\n                return *this;\r\n            } else {\r\n                return _Assign(_Right._Mypair._Myval2._Myptr(), _Right._Mypair._Myval2._Mysize);\r\n            }\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Elem> _Rng>\r\n    constexpr basic_string& assign_range(_Rng&& _Range) {\r\n        if constexpr (_RANGES sized_range<_Rng> && _Contiguous_range_of<_Rng, _Elem>) {\r\n            const auto _Count = _Convert_size<size_type>(_To_unsigned_like(_RANGES size(_Range)));\r\n            return _Assign(_RANGES data(_Range), _Count);\r\n        } else {\r\n            basic_string _Right(from_range, _Range, get_allocator());\r\n            if (_Mypair._Myval2._Myres < _Right._Mypair._Myval2._Myres) {\r\n                _Mypair._Myval2._Orphan_all();\r\n                _Swap_data(_Right);\r\n                return *this;\r\n            } else {\r\n                return _Assign(_Right._Mypair._Myval2._Myptr(), _Right._Mypair._Myval2._Mysize);\r\n            }\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 basic_string& insert(const size_type _Off, const basic_string& _Right) {\r\n        // insert _Right at _Off\r\n        return _Insert(_Off, _Right._Mypair._Myval2._Myptr(), _Right._Mypair._Myval2._Mysize);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& insert(\r\n        const size_type _Off, const basic_string& _Right, const size_type _Roff, size_type _Count = npos) {\r\n        // insert _Right [_Roff, _Roff + _Count) at _Off\r\n        _Right._Mypair._Myval2._Check_offset(_Roff);\r\n        _Count = _Right._Mypair._Myval2._Clamp_suffix_size(_Roff, _Count);\r\n        return _Insert(_Off, _Right._Mypair._Myval2._Myptr() + _Roff, _Count);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _CONSTEXPR20 basic_string& insert(const size_type _Off, const _StringViewIsh& _Right) {\r\n        // insert _Right at _Off\r\n        const basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        return _Insert(_Off, _As_view.data(), _Convert_size<size_type>(_As_view.size()));\r\n    }\r\n\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _CONSTEXPR20 basic_string& insert(\r\n        const size_type _Off, const _StringViewIsh& _Right, const size_type _Roff, const size_type _Count = npos) {\r\n        // insert _Right [_Roff, _Roff + _Count) at _Off\r\n        basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        return insert(_Off, _As_view.substr(static_cast<size_t>(_Roff), static_cast<size_t>(_Count)));\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _CONSTEXPR20 basic_string& insert(\r\n        const size_type _Off, _In_reads_(_Count) const _Elem* const _Ptr, _CRT_GUARDOVERFLOW const size_type _Count) {\r\n        // insert [_Ptr, _Ptr + _Count) at _Off\r\n        return _Insert(_Off, _Ptr, _Count);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& insert(const size_type _Off, _In_z_ const _Elem* const _Ptr) {\r\n        // insert [_Ptr, <null>) at _Off\r\n        return _Insert(_Off, _Ptr, _Convert_size<size_type>(_Traits::length(_Ptr)));\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& insert(\r\n        const size_type _Off, _CRT_GUARDOVERFLOW const size_type _Count, const _Elem _Ch) {\r\n        // insert _Count * _Ch at _Off\r\n        _Mypair._Myval2._Check_offset(_Off);\r\n        const size_type _Old_size = _Mypair._Myval2._Mysize;\r\n        if (_Count <= _Mypair._Myval2._Myres - _Old_size) {\r\n            const auto _New_size = static_cast<size_type>(_Old_size + _Count);\r\n            _ASAN_STRING_MODIFY(*this, _Old_size, _New_size);\r\n            _Mypair._Myval2._Mysize = _New_size;\r\n            _Elem* const _Old_ptr   = _Mypair._Myval2._Myptr();\r\n            _Elem* const _Insert_at = _Old_ptr + _Off;\r\n            _Traits::move(\r\n                _Insert_at + _Count, _Insert_at, static_cast<size_t>(_Old_size - _Off + 1)); // move suffix + null down\r\n            _Traits::assign(_Insert_at, static_cast<size_t>(_Count), _Ch); // fill hole\r\n            return *this;\r\n        }\r\n\r\n        return _Reallocate_grow_by(\r\n            _Count,\r\n            [](_Elem* const _New_ptr, const _Elem* const _Old_ptr, const size_type _Old_size, const size_type _Off,\r\n                const size_type _Count, const _Elem _Ch) static {\r\n                _Traits::copy(_New_ptr, _Old_ptr, static_cast<size_t>(_Off));\r\n                _Traits::assign(_New_ptr + _Off, static_cast<size_t>(_Count), _Ch);\r\n                _Traits::copy(_New_ptr + _Off + _Count, _Old_ptr + _Off, static_cast<size_t>(_Old_size - _Off + 1));\r\n            },\r\n            _Off, _Count, _Ch);\r\n    }\r\n\r\n    _CONSTEXPR20 iterator insert(const const_iterator _Where, const _Elem _Ch) { // insert _Ch at _Where\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2), \"string iterator incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Off = static_cast<size_type>(_Unfancy(_Where._Ptr) - _Mypair._Myval2._Myptr());\r\n        insert(_Off, 1, _Ch);\r\n        return begin() + static_cast<difference_type>(_Off);\r\n    }\r\n\r\n    _CONSTEXPR20 iterator insert(\r\n        const const_iterator _Where, _CRT_GUARDOVERFLOW const size_type _Count, const _Elem _Ch) {\r\n        // insert _Count * _Elem at _Where\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2), \"string iterator incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Off = static_cast<size_type>(_Unfancy(_Where._Ptr) - _Mypair._Myval2._Myptr());\r\n        insert(_Off, _Count, _Ch);\r\n        return begin() + static_cast<difference_type>(_Off);\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    _CONSTEXPR20 iterator insert(const const_iterator _Where, const _Iter _First, const _Iter _Last) {\r\n        // insert [_First, _Last) at _Where, input iterators\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2), \"string iterator incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Off = static_cast<size_type>(_Unfancy(_Where._Ptr) - _Mypair._Myval2._Myptr());\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        const auto _UFirst = _STD _Get_unwrapped(_First);\r\n        const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n        if constexpr (_Is_elem_cvptr<decltype(_UFirst)>::value) {\r\n            _Insert(_Off, _UFirst, _STD _Convert_size<size_type>(static_cast<size_t>(_ULast - _UFirst)));\r\n        } else {\r\n            const basic_string _Right(_UFirst, _ULast, get_allocator());\r\n            _Insert(_Off, _Right._Mypair._Myval2._Myptr(), _Right._Mypair._Myval2._Mysize);\r\n        }\r\n\r\n        return begin() + static_cast<difference_type>(_Off);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Elem> _Rng>\r\n    constexpr iterator insert_range(const const_iterator _Where, _Rng&& _Range) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2), \"string iterator incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Off = static_cast<size_type>(_Unfancy(_Where._Ptr) - _Mypair._Myval2._Myptr());\r\n\r\n        if constexpr (_RANGES sized_range<_Rng> && _Contiguous_range_of<_Rng, _Elem>) {\r\n            const auto _Count = _Convert_size<size_type>(_To_unsigned_like(_RANGES size(_Range)));\r\n            _Insert(_Off, _RANGES data(_Range), _Count);\r\n        } else {\r\n            const basic_string _Right(from_range, _Range, get_allocator());\r\n            _Insert(_Off, _Right._Mypair._Myval2._Myptr(), _Right._Mypair._Myval2._Mysize);\r\n        }\r\n\r\n        return begin() + static_cast<difference_type>(_Off);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 basic_string& erase(const size_type _Off = 0) { // erase elements [_Off, ...)\r\n        _Mypair._Myval2._Check_offset(_Off);\r\n        _Eos(_Off);\r\n        return *this;\r\n    }\r\n\r\nprivate:\r\n    _CONSTEXPR20 basic_string& _Erase_noexcept(const size_type _Off, size_type _Count) noexcept {\r\n        _Count                    = _Mypair._Myval2._Clamp_suffix_size(_Off, _Count);\r\n        const size_type _Old_size = _Mypair._Myval2._Mysize;\r\n        _Elem* const _My_ptr      = _Mypair._Myval2._Myptr();\r\n        _Elem* const _Erase_at    = _My_ptr + _Off;\r\n        const auto _New_size      = static_cast<size_type>(_Old_size - _Count);\r\n        _Traits::move(\r\n            _Erase_at, _Erase_at + _Count, static_cast<size_t>(_New_size - _Off + 1)); // move suffix + null up\r\n        _ASAN_STRING_MODIFY(*this, _Old_size, _New_size);\r\n        _Mypair._Myval2._Mysize = _New_size;\r\n        return *this;\r\n    }\r\n\r\npublic:\r\n    _CONSTEXPR20 basic_string& erase(const size_type _Off, const size_type _Count) {\r\n        // erase elements [_Off, _Off + _Count)\r\n        _Mypair._Myval2._Check_offset(_Off);\r\n        return _Erase_noexcept(_Off, _Count);\r\n    }\r\n\r\n    _CONSTEXPR20 iterator erase(const const_iterator _Where) noexcept /* strengthened */ {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Where._Getcont() == _STD addressof(_Mypair._Myval2), \"string iterator incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Off = static_cast<size_type>(_Unfancy(_Where._Ptr) - _Mypair._Myval2._Myptr());\r\n        _Erase_noexcept(_Off, 1);\r\n        return begin() + static_cast<difference_type>(_Off);\r\n    }\r\n\r\n    _CONSTEXPR20 iterator erase(const const_iterator _First, const const_iterator _Last) noexcept /* strengthened */ {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_First._Getcont() == _STD addressof(_Mypair._Myval2), \"string iterators incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Off = static_cast<size_type>(_Unfancy(_First._Ptr) - _Mypair._Myval2._Myptr());\r\n        _Erase_noexcept(_Off, static_cast<size_type>(_Last._Ptr - _First._Ptr));\r\n        return begin() + static_cast<difference_type>(_Off);\r\n    }\r\n\r\n    _CONSTEXPR20 void clear() noexcept { // erase all\r\n        _Eos(0);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& replace(const size_type _Off, const size_type _Nx, const basic_string& _Right) {\r\n        // replace [_Off, _Off + _Nx) with _Right\r\n        return _Replace(_Off, _Nx, _Right._Mypair._Myval2._Myptr(), _Right._Mypair._Myval2._Mysize);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& replace(const size_type _Off, size_type _Nx, const basic_string& _Right,\r\n        const size_type _Roff, size_type _Count = npos) {\r\n        // replace [_Off, _Off + _Nx) with _Right [_Roff, _Roff + _Count)\r\n        _Right._Mypair._Myval2._Check_offset(_Roff);\r\n        _Count = _Right._Mypair._Myval2._Clamp_suffix_size(_Roff, _Count);\r\n        return _Replace(_Off, _Nx, _Right._Mypair._Myval2._Myptr() + _Roff, _Count);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _CONSTEXPR20 basic_string& replace(const size_type _Off, const size_type _Nx, const _StringViewIsh& _Right) {\r\n        // replace [_Off, _Off + _Nx) with _Right\r\n        basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        return _Replace(_Off, _Nx, _As_view.data(), _Convert_size<size_type>(_As_view.size()));\r\n    }\r\n\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _CONSTEXPR20 basic_string& replace(const size_type _Off, const size_type _Nx, const _StringViewIsh& _Right,\r\n        const size_type _Roff, const size_type _Count = npos) {\r\n        // replace [_Off, _Off + _Nx) with _Right [_Roff, _Roff + _Count)\r\n        basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        return replace(_Off, _Nx, _As_view.substr(static_cast<size_t>(_Roff), static_cast<size_t>(_Count)));\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _CONSTEXPR20 basic_string& replace(\r\n        const size_type _Off, size_type _Nx, _In_reads_(_Count) const _Elem* const _Ptr, const size_type _Count) {\r\n        // replace [_Off, _Off + _Nx) with [_Ptr, _Ptr + _Count)\r\n        return _Replace(_Off, _Nx, _Ptr, _Count);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& replace(const size_type _Off, const size_type _Nx, _In_z_ const _Elem* const _Ptr) {\r\n        // replace [_Off, _Off + _Nx) with [_Ptr, <null>)\r\n        return _Replace(_Off, _Nx, _Ptr, _Convert_size<size_type>(_Traits::length(_Ptr)));\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& replace(const size_type _Off, size_type _Nx, const size_type _Count, const _Elem _Ch) {\r\n        // replace [_Off, _Off + _Nx) with _Count * _Ch\r\n        _Mypair._Myval2._Check_offset(_Off);\r\n        _Nx = _Mypair._Myval2._Clamp_suffix_size(_Off, _Nx);\r\n        if (_Count == _Nx) {\r\n            _Traits::assign(_Mypair._Myval2._Myptr() + _Off, static_cast<size_t>(_Count), _Ch);\r\n            return *this;\r\n        }\r\n\r\n        const size_type _Old_size = _Mypair._Myval2._Mysize;\r\n        if (_Count < _Nx || _Count - _Nx <= _Mypair._Myval2._Myres - _Old_size) {\r\n            // either we are shrinking, or the growth fits\r\n            // may temporarily overflow; OK because size_type must be unsigned\r\n            const auto _New_size = static_cast<size_type>(_Old_size + _Count - _Nx);\r\n            _ASAN_STRING_REMOVE(*this);\r\n            _Mypair._Myval2._Mysize = _New_size;\r\n            _Elem* const _Old_ptr   = _Mypair._Myval2._Myptr();\r\n            _Elem* const _Insert_at = _Old_ptr + _Off;\r\n            _Traits::move(_Insert_at + _Count, _Insert_at + _Nx, static_cast<size_t>(_Old_size - _Nx - _Off + 1));\r\n            _Traits::assign(_Insert_at, static_cast<size_t>(_Count), _Ch);\r\n            _ASAN_STRING_CREATE(*this);\r\n            return *this;\r\n        }\r\n\r\n        return _Reallocate_grow_by(\r\n            static_cast<size_type>(_Count - _Nx),\r\n            [](_Elem* const _New_ptr, const _Elem* const _Old_ptr, const size_type _Old_size, const size_type _Off,\r\n                const size_type _Nx, const size_type _Count, const _Elem _Ch) static {\r\n                _Traits::copy(_New_ptr, _Old_ptr, static_cast<size_t>(_Off));\r\n                _Traits::assign(_New_ptr + _Off, static_cast<size_t>(_Count), _Ch);\r\n                _Traits::copy(\r\n                    _New_ptr + _Off + _Count, _Old_ptr + _Off + _Nx, static_cast<size_t>(_Old_size - _Nx - _Off + 1));\r\n            },\r\n            _Off, _Nx, _Count, _Ch);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& replace(\r\n        const const_iterator _First, const const_iterator _Last, const basic_string& _Right) {\r\n        // replace [_First, _Last) with _Right\r\n        _STD _Adl_verify_range(_First, _Last);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_First._Getcont() == _STD addressof(_Mypair._Myval2), \"string iterators incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        return replace(static_cast<size_type>(_Unfancy(_First._Ptr) - _Mypair._Myval2._Myptr()),\r\n            static_cast<size_type>(_Last._Ptr - _First._Ptr), _Right);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _CONSTEXPR20 basic_string& replace(\r\n        const const_iterator _First, const const_iterator _Last, const _StringViewIsh& _Right) {\r\n        // replace [_First, _Last) with _Right\r\n        _STD _Adl_verify_range(_First, _Last);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_First._Getcont() == _STD addressof(_Mypair._Myval2), \"string iterators incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        return replace(static_cast<size_type>(_Unfancy(_First._Ptr) - _Mypair._Myval2._Myptr()),\r\n            static_cast<size_type>(_Last._Ptr - _First._Ptr), _Right);\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _CONSTEXPR20 basic_string& replace(const const_iterator _First, const const_iterator _Last,\r\n        _In_reads_(_Count) const _Elem* const _Ptr, const size_type _Count) {\r\n        // replace [_First, _Last) with [_Ptr, _Ptr + _Count)\r\n        _STD _Adl_verify_range(_First, _Last);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_First._Getcont() == _STD addressof(_Mypair._Myval2), \"string iterators incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        return replace(static_cast<size_type>(_Unfancy(_First._Ptr) - _Mypair._Myval2._Myptr()),\r\n            static_cast<size_type>(_Last._Ptr - _First._Ptr), _Ptr, _Count);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& replace(\r\n        const const_iterator _First, const const_iterator _Last, _In_z_ const _Elem* const _Ptr) {\r\n        // replace [_First, _Last) with [_Ptr, <null>)\r\n        _STD _Adl_verify_range(_First, _Last);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_First._Getcont() == _STD addressof(_Mypair._Myval2), \"string iterators incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        return replace(static_cast<size_type>(_Unfancy(_First._Ptr) - _Mypair._Myval2._Myptr()),\r\n            static_cast<size_type>(_Last._Ptr - _First._Ptr), _Ptr);\r\n    }\r\n\r\n    _CONSTEXPR20 basic_string& replace(\r\n        const const_iterator _First, const const_iterator _Last, const size_type _Count, const _Elem _Ch) {\r\n        // replace [_First, _Last) with _Count * _Ch\r\n        _STD _Adl_verify_range(_First, _Last);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_First._Getcont() == _STD addressof(_Mypair._Myval2), \"string iterators incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        return replace(static_cast<size_type>(_Unfancy(_First._Ptr) - _Mypair._Myval2._Myptr()),\r\n            static_cast<size_type>(_Last._Ptr - _First._Ptr), _Count, _Ch);\r\n    }\r\n\r\n    template <class _Iter, enable_if_t<_Is_iterator_v<_Iter>, int> = 0>\r\n    _CONSTEXPR20 basic_string& replace(\r\n        const const_iterator _First, const const_iterator _Last, const _Iter _First2, const _Iter _Last2) {\r\n        // replace [_First, _Last) with [_First2, _Last2), input iterators\r\n        _STD _Adl_verify_range(_First, _Last);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_First._Getcont() == _STD addressof(_Mypair._Myval2), \"string iterators incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Off    = static_cast<size_type>(_STD _Unfancy(_First._Ptr) - _Mypair._Myval2._Myptr());\r\n        const auto _Length = static_cast<size_type>(_Last._Ptr - _First._Ptr);\r\n        _STD _Adl_verify_range(_First2, _Last2);\r\n        const auto _UFirst2 = _STD _Get_unwrapped(_First2);\r\n        const auto _ULast2  = _STD _Get_unwrapped(_Last2);\r\n        if constexpr (_Is_elem_cvptr<decltype(_UFirst2)>::value) {\r\n            return _Replace(\r\n                _Off, _Length, _UFirst2, _STD _Convert_size<size_type>(static_cast<size_t>(_ULast2 - _UFirst2)));\r\n        } else {\r\n            const basic_string _Right(_UFirst2, _ULast2, get_allocator());\r\n            return _Replace(_Off, _Length, _Right._Mypair._Myval2._Myptr(), _Right._Mypair._Myval2._Mysize);\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<_Elem> _Rng>\r\n    constexpr basic_string& replace_with_range(const const_iterator _First, const const_iterator _Last, _Rng&& _Range) {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_First._Getcont() == _STD addressof(_Mypair._Myval2), \"string iterators incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        const auto _Off    = static_cast<size_type>(_Unfancy(_First._Ptr) - _Mypair._Myval2._Myptr());\r\n        const auto _Length = static_cast<size_type>(_Last._Ptr - _First._Ptr);\r\n\r\n        if constexpr (_RANGES sized_range<_Rng> && _Contiguous_range_of<_Rng, _Elem>) {\r\n            const auto _Count = _Convert_size<size_type>(_To_unsigned_like(_RANGES size(_Range)));\r\n            return _Replace(_Off, _Length, _RANGES data(_Range), _Count);\r\n        } else {\r\n            const basic_string _Right(from_range, _Range, get_allocator());\r\n            return _Replace(_Off, _Length, _Right._Mypair._Myval2._Myptr(), _Right._Mypair._Myval2._Mysize);\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _NODISCARD _CONSTEXPR20 iterator begin() noexcept {\r\n        return iterator(_Refancy<pointer>(_Mypair._Myval2._Myptr()), _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_iterator begin() const noexcept {\r\n        return const_iterator(_Refancy<const_pointer>(_Mypair._Myval2._Myptr()), _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 iterator end() noexcept {\r\n        return iterator(\r\n            _Refancy<pointer>(_Mypair._Myval2._Myptr()) + static_cast<difference_type>(_Mypair._Myval2._Mysize),\r\n            _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_iterator end() const noexcept {\r\n        return const_iterator(\r\n            _Refancy<const_pointer>(_Mypair._Myval2._Myptr()) + static_cast<difference_type>(_Mypair._Myval2._Mysize),\r\n            _STD addressof(_Mypair._Myval2));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Elem* _Unchecked_begin() noexcept {\r\n        return _Mypair._Myval2._Myptr();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const _Elem* _Unchecked_begin() const noexcept {\r\n        return _Mypair._Myval2._Myptr();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Elem* _Unchecked_end() noexcept {\r\n        return _Mypair._Myval2._Myptr() + _Mypair._Myval2._Mysize;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const _Elem* _Unchecked_end() const noexcept {\r\n        return _Mypair._Myval2._Myptr() + _Mypair._Myval2._Mysize;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reverse_iterator rbegin() noexcept {\r\n        return reverse_iterator(end());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reverse_iterator rbegin() const noexcept {\r\n        return const_reverse_iterator(end());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reverse_iterator rend() noexcept {\r\n        return reverse_iterator(begin());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reverse_iterator rend() const noexcept {\r\n        return const_reverse_iterator(begin());\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_iterator cbegin() const noexcept {\r\n        return begin();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_iterator cend() const noexcept {\r\n        return end();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reverse_iterator crbegin() const noexcept {\r\n        return rbegin();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reverse_iterator crend() const noexcept {\r\n        return rend();\r\n    }\r\n\r\n    _CONSTEXPR20 void shrink_to_fit() { // reduce capacity\r\n        auto& _My_data = _Mypair._Myval2;\r\n\r\n        if (!_My_data._Large_mode_engaged()) { // can't shrink from small mode\r\n            return;\r\n        }\r\n\r\n        if (_My_data._Mysize <= _Small_string_capacity) {\r\n            _Become_small();\r\n            return;\r\n        }\r\n\r\n        size_type _Target_capacity = (_STD min) (static_cast<size_type>(_My_data._Mysize | _Alloc_mask), max_size());\r\n        if (_Target_capacity < _My_data._Myres) { // worth shrinking, do it\r\n            auto& _Al = _Getal();\r\n            const pointer _New_ptr =\r\n                _Allocate_for_capacity<_Allocation_policy::_Exactly>(_Al, _Target_capacity); // throws\r\n            _ASAN_STRING_REMOVE(*this);\r\n\r\n            _My_data._Orphan_all();\r\n            _Traits::copy(_Unfancy(_New_ptr), _Unfancy(_My_data._Bx._Ptr), static_cast<size_t>(_My_data._Mysize + 1));\r\n            _Deallocate_for_capacity(_Al, _My_data._Bx._Ptr, _My_data._Myres);\r\n            _My_data._Bx._Ptr = _New_ptr;\r\n            _My_data._Myres   = _Target_capacity;\r\n            _ASAN_STRING_CREATE(*this);\r\n        }\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reference at(const size_type _Off) {\r\n        _Mypair._Myval2._Check_offset_exclusive(_Off);\r\n        return _Mypair._Myval2._Myptr()[_Off];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reference at(const size_type _Off) const {\r\n        _Mypair._Myval2._Check_offset_exclusive(_Off);\r\n        return _Mypair._Myval2._Myptr()[_Off];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reference operator[](const size_type _Off) noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_BASIC_STRING || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Off <= _Mypair._Myval2._Mysize, \"string subscript out of range\");\r\n#endif\r\n\r\n        return _Mypair._Myval2._Myptr()[_Off];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reference operator[](const size_type _Off) const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_BASIC_STRING || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Off <= _Mypair._Myval2._Mysize, \"string subscript out of range\");\r\n#endif\r\n\r\n        return _Mypair._Myval2._Myptr()[_Off];\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    /* implicit */ _CONSTEXPR20 operator basic_string_view<_Elem, _Traits>() const noexcept {\r\n        // return a string_view around *this's character-type sequence\r\n        return basic_string_view<_Elem, _Traits>{\r\n            _Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize)};\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _CONSTEXPR20 void push_back(const _Elem _Ch) { // insert element at end\r\n        const size_type _Old_size = _Mypair._Myval2._Mysize;\r\n        if (_Old_size < _Mypair._Myval2._Myres) {\r\n            const auto _New_size = static_cast<size_type>(_Old_size + 1);\r\n            _ASAN_STRING_MODIFY(*this, _Old_size, _New_size);\r\n            _Mypair._Myval2._Mysize = _New_size;\r\n            _Elem* const _Ptr       = _Mypair._Myval2._Myptr();\r\n            _Traits::assign(_Ptr[_Old_size], _Ch);\r\n            _Traits::assign(_Ptr[_Old_size + 1], _Elem());\r\n            return;\r\n        }\r\n\r\n        _Reallocate_grow_by(\r\n            1,\r\n            [](_Elem* const _New_ptr, const _Elem* const _Old_ptr, const size_type _Old_size, const _Elem _Ch) static {\r\n                _Traits::copy(_New_ptr, _Old_ptr, static_cast<size_t>(_Old_size));\r\n                _Traits::assign(_New_ptr[_Old_size], _Ch);\r\n                _Traits::assign(_New_ptr[_Old_size + 1], _Elem());\r\n            },\r\n            _Ch);\r\n    }\r\n\r\n    _CONSTEXPR20 void pop_back() noexcept /* strengthened */ {\r\n        const size_type _Old_size = _Mypair._Myval2._Mysize;\r\n\r\n#if _MSVC_STL_HARDENING_BASIC_STRING || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Old_size != 0, \"pop_back() called on empty string\");\r\n#endif\r\n\r\n        _Eos(static_cast<size_type>(_Old_size - 1));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reference front() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_BASIC_STRING || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mypair._Myval2._Mysize != 0, \"front() called on empty string\");\r\n#endif\r\n\r\n        return _Mypair._Myval2._Myptr()[0];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reference front() const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_BASIC_STRING || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mypair._Myval2._Mysize != 0, \"front() called on empty string\");\r\n#endif\r\n\r\n        return _Mypair._Myval2._Myptr()[0];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 reference back() noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_BASIC_STRING || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mypair._Myval2._Mysize != 0, \"back() called on empty string\");\r\n#endif\r\n\r\n        return _Mypair._Myval2._Myptr()[_Mypair._Myval2._Mysize - 1];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 const_reference back() const noexcept /* strengthened */ {\r\n#if _MSVC_STL_HARDENING_BASIC_STRING || _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mypair._Myval2._Mysize != 0, \"back() called on empty string\");\r\n#endif\r\n\r\n        return _Mypair._Myval2._Myptr()[_Mypair._Myval2._Mysize - 1];\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Ret_z_ const _Elem* c_str() const noexcept {\r\n        return _Mypair._Myval2._Myptr();\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 _Ret_z_ const _Elem* data() const noexcept {\r\n        return _Mypair._Myval2._Myptr();\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    _NODISCARD _CONSTEXPR20 _Ret_z_ _Elem* data() noexcept {\r\n        return _Mypair._Myval2._Myptr();\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type length() const noexcept {\r\n        return _Mypair._Myval2._Mysize;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type size() const noexcept {\r\n        return _Mypair._Myval2._Mysize;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type max_size() const noexcept {\r\n        const size_type _Alloc_max   = _Alty_traits::max_size(_Getal());\r\n        const size_type _Storage_max = // can always store small string\r\n            (_STD max) (_Alloc_max, static_cast<size_type>(_BUF_SIZE));\r\n        return (_STD min) (static_cast<size_type>(_STD _Max_limit<difference_type>()),\r\n            static_cast<size_type>(_Storage_max - 1) // -1 is for null terminator and/or npos\r\n        );\r\n    }\r\n\r\n    _CONSTEXPR20 void resize(_CRT_GUARDOVERFLOW const size_type _New_size, const _Elem _Ch = _Elem()) {\r\n        // determine new length, padding with _Ch elements as needed\r\n        const size_type _Old_size = size();\r\n        if (_New_size <= _Old_size) {\r\n            _Eos(_New_size);\r\n        } else {\r\n            append(static_cast<size_type>(_New_size - _Old_size), _Ch);\r\n        }\r\n    }\r\n\r\n    template <class _Operation>\r\n    constexpr void\r\n#if _HAS_CXX23\r\n        resize_and_overwrite\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n        _Resize_and_overwrite\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n        (_CRT_GUARDOVERFLOW const size_type _New_size, _Operation _Op) {\r\n        if (_Mypair._Myval2._Myres < _New_size) {\r\n            _Reallocate_grow_by(static_cast<size_type>(_New_size - _Mypair._Myval2._Mysize),\r\n                [](_Elem* const _New_ptr, const _Elem* const _Old_ptr, const size_type _Old_size) static {\r\n                    _Traits::copy(_New_ptr, _Old_ptr, static_cast<size_t>(_Old_size + 1));\r\n                });\r\n        } else {\r\n            _ASAN_STRING_MODIFY(*this, _Mypair._Myval2._Mysize, _New_size);\r\n            _Mypair._Myval2._Mysize = _New_size;\r\n        }\r\n\r\n        auto _Arg_ptr           = _Mypair._Myval2._Myptr();\r\n        auto _Arg_size          = _New_size;\r\n        const auto _Result_size = _STD move(_Op)(_Arg_ptr, _Arg_size);\r\n        using _Result_type      = remove_const_t<decltype(_Result_size)>;\r\n        static_assert(_Integer_like<_Result_type>,\r\n            \"the return type of the operation must be integer-like, N5014 [string.capacity]/8\");\r\n\r\n        const auto _Result_as_size_type = static_cast<size_type>(_Result_size);\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        if constexpr (_Signed_integer_like<_Result_type>) {\r\n            _STL_VERIFY(_Result_size >= 0, \"the returned size can't be smaller than 0, N5014 [string.capacity]/9.2\");\r\n        }\r\n        _STL_VERIFY(_Result_as_size_type <= _New_size,\r\n            \"the returned size can't be greater than the passed size, N5014 [string.capacity]/9.3\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n        _Eos(_Result_as_size_type);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _Operation>\r\n    constexpr void _Resize_and_overwrite(_CRT_GUARDOVERFLOW const size_type _New_size, _Operation _Op) {\r\n        resize_and_overwrite(_New_size, _Op);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type capacity() const noexcept {\r\n        return _Mypair._Myval2._Myres;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    constexpr void reserve(_CRT_GUARDOVERFLOW const size_type _Newcap) {\r\n        // determine new minimum length of allocated storage\r\n        if (_Mypair._Myval2._Myres >= _Newcap) { // requested capacity is not larger than current capacity, ignore\r\n            return; // nothing to do\r\n        }\r\n\r\n        const size_type _Old_size = _Mypair._Myval2._Mysize;\r\n        _Reallocate_grow_by(static_cast<size_type>(_Newcap - _Old_size),\r\n            [](_Elem* const _New_ptr, const _Elem* const _Old_ptr, const size_type _Old_size) static {\r\n                _Traits::copy(_New_ptr, _Old_ptr, static_cast<size_t>(_Old_size + 1));\r\n            });\r\n\r\n        // `_Reallocate_grow_by` calls `_ASAN_STRING_CREATE` assuming that the string\r\n        // has size (initialized memory) equal to its new capacity (allocated memory).\r\n        // This is not true for the `reserve` method, so we modify the ASan annotation.\r\n        _ASAN_STRING_MODIFY(*this, _Mypair._Myval2._Mysize, _Old_size);\r\n        _Mypair._Myval2._Mysize = _Old_size;\r\n    }\r\n\r\n    _CXX20_DEPRECATE_STRING_RESERVE_WITHOUT_ARGUMENT void reserve() {\r\n        if (_Mypair._Myval2._Mysize == 0 && _Mypair._Myval2._Large_mode_engaged()) {\r\n            _Become_small();\r\n        }\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    void reserve(_CRT_GUARDOVERFLOW const size_type _Newcap = 0) { // determine new minimum length of allocated storage\r\n        if (_Mypair._Myval2._Mysize > _Newcap) { // requested capacity is not large enough for current size, ignore\r\n            return; // nothing to do\r\n        }\r\n\r\n        if (_Mypair._Myval2._Myres == _Newcap) { // we're already at the requested capacity\r\n            return; // nothing to do\r\n        }\r\n\r\n        if (_Mypair._Myval2._Myres < _Newcap) { // reallocate to grow\r\n            const size_type _Old_size = _Mypair._Myval2._Mysize;\r\n            _Reallocate_grow_by(static_cast<size_type>(_Newcap - _Old_size),\r\n                [](_Elem* const _New_ptr, const _Elem* const _Old_ptr, const size_type _Old_size) static {\r\n                    _Traits::copy(_New_ptr, _Old_ptr, static_cast<size_t>(_Old_size + 1));\r\n                });\r\n\r\n            // `_Reallocate_grow_by` calls `_ASAN_STRING_CREATE` assuming that the string\r\n            // has size (initialized memory) equal to its new capacity (allocated memory).\r\n            // This is not true for the `reserve` method, so we modify the ASan annotation.\r\n            _ASAN_STRING_MODIFY(*this, _Mypair._Myval2._Mysize, _Old_size);\r\n            _Mypair._Myval2._Mysize = _Old_size;\r\n            return;\r\n        }\r\n\r\n        if (_Newcap <= _Small_string_capacity && _Mypair._Myval2._Large_mode_engaged()) {\r\n            // deallocate everything; switch back to \"small\" mode\r\n            _Become_small();\r\n            return;\r\n        }\r\n\r\n        // ignore requests to reserve to [_Small_string_capacity + 1, _Myres)\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    _NODISCARD_EMPTY_MEMBER _CONSTEXPR20 bool empty() const noexcept {\r\n        return _Mypair._Myval2._Mysize == 0;\r\n    }\r\n\r\n    _CONSTEXPR20 size_type copy(\r\n        _Out_writes_(_Count) _Elem* const _Ptr, size_type _Count, const size_type _Off = 0) const {\r\n        // copy [_Off, _Off + _Count) to [_Ptr, _Ptr + _Count)\r\n        _Mypair._Myval2._Check_offset(_Off);\r\n        _Count = _Mypair._Myval2._Clamp_suffix_size(_Off, _Count);\r\n        _Traits::copy(_Ptr, _Mypair._Myval2._Myptr() + _Off, static_cast<size_t>(_Count));\r\n        return _Count;\r\n    }\r\n\r\n    _CONSTEXPR20 _Pre_satisfies_(_Dest_size >= _Count) size_type\r\n        _Copy_s(_Out_writes_all_(_Dest_size) _Elem* const _Dest, const size_type _Dest_size, size_type _Count,\r\n            const size_type _Off = 0) const {\r\n        // copy [_Off, _Off + _Count) to [_Dest, _Dest + _Dest_size)\r\n        _Mypair._Myval2._Check_offset(_Off);\r\n        _Count = _Mypair._Myval2._Clamp_suffix_size(_Off, _Count);\r\n        _Traits::_Copy_s(_Dest, _Dest_size, _Mypair._Myval2._Myptr() + _Off, _Count);\r\n        return _Count;\r\n    }\r\n\r\n    static _CONSTEXPR20 void _Swap_bx_large_with_small(_Scary_val& _Starts_large, _Scary_val& _Starts_small) noexcept {\r\n        // exchange a string in large mode with one in small mode\r\n        const pointer _Ptr = _Starts_large._Bx._Ptr;\r\n        _Starts_large._Bx._Switch_to_buf();\r\n        _Traits::copy(_Starts_large._Bx._Buf, _Starts_small._Bx._Buf, _BUF_SIZE);\r\n\r\n        _Construct_in_place(_Starts_small._Bx._Ptr, _Ptr);\r\n    }\r\n\r\n    _CONSTEXPR20 void _Swap_data(basic_string& _Right) noexcept {\r\n        using _STD swap;\r\n\r\n        auto& _My_data    = _Mypair._Myval2;\r\n        auto& _Right_data = _Right._Mypair._Myval2;\r\n\r\n#if !defined(_INSERT_STRING_ANNOTATION)\r\n        if constexpr (_Can_memcpy_val) {\r\n#if _HAS_CXX20\r\n            if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n            {\r\n                const auto _My_data_mem =\r\n                    reinterpret_cast<unsigned char*>(_STD addressof(_My_data)) + _Memcpy_val_offset;\r\n                const auto _Right_data_mem =\r\n                    reinterpret_cast<unsigned char*>(_STD addressof(_Right_data)) + _Memcpy_val_offset;\r\n                unsigned char _Temp_mem[_Memcpy_val_size];\r\n                _CSTD memcpy(_Temp_mem, _My_data_mem, _Memcpy_val_size);\r\n                _CSTD memcpy(_My_data_mem, _Right_data_mem, _Memcpy_val_size);\r\n                _CSTD memcpy(_Right_data_mem, _Temp_mem, _Memcpy_val_size);\r\n\r\n                return;\r\n            }\r\n        }\r\n#endif // !defined(_INSERT_STRING_ANNOTATION)\r\n\r\n        const bool _My_large    = _My_data._Large_mode_engaged();\r\n        const bool _Right_large = _Right_data._Large_mode_engaged();\r\n\r\n        if (_My_large && _Right_large) { // swap buffers, iterators preserved\r\n            swap(_My_data._Bx._Ptr, _Right_data._Bx._Ptr); // intentional ADL\r\n        } else if (_My_large) { // swap large with small\r\n            _Swap_bx_large_with_small(_My_data, _Right_data);\r\n        } else if (_Right_large) { // swap small with large\r\n            _Swap_bx_large_with_small(_Right_data, _My_data);\r\n        } else {\r\n            _Elem _Temp_buf[_BUF_SIZE];\r\n            _Traits::copy(_Temp_buf, _My_data._Bx._Buf, static_cast<size_t>(_My_data._Mysize + 1));\r\n            _Traits::copy(_My_data._Bx._Buf, _Right_data._Bx._Buf, static_cast<size_t>(_Right_data._Mysize + 1));\r\n            _Traits::copy(_Right_data._Bx._Buf, _Temp_buf, static_cast<size_t>(_My_data._Mysize + 1));\r\n        }\r\n\r\n        _STD swap(_My_data._Mysize, _Right_data._Mysize);\r\n        _STD swap(_My_data._Myres, _Right_data._Myres);\r\n    }\r\n\r\n    _CONSTEXPR20 void swap(basic_string& _Right) noexcept /* strengthened */ {\r\n        if (this != _STD addressof(_Right)) {\r\n            _Pocs(_Getal(), _Right._Getal());\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n            auto& _My_data    = _Mypair._Myval2;\r\n            auto& _Right_data = _Right._Mypair._Myval2;\r\n\r\n            if (!_My_data._Large_mode_engaged()) {\r\n                _My_data._Orphan_all();\r\n            }\r\n\r\n            if (!_Right_data._Large_mode_engaged()) {\r\n                _Right_data._Orphan_all();\r\n            }\r\n\r\n            _My_data._Swap_proxy_and_iterators(_Right_data);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n            _Swap_data(_Right);\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _NODISCARD _CONSTEXPR20 size_type find(const _StringViewIsh& _Right, const size_type _Off = 0) const\r\n        noexcept(_Is_nothrow_convertible_v<const _StringViewIsh&, basic_string_view<_Elem, _Traits>>) {\r\n        // look for _Right beginning at or after _Off\r\n        basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        return static_cast<size_type>(_Traits_find<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _As_view.data(), _As_view.size()));\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find(const basic_string& _Right, const size_type _Off = 0) const noexcept {\r\n        // look for _Right beginning at or after _Off\r\n        return static_cast<size_type>(_Traits_find<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Right._Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Right._Mypair._Myval2._Mysize)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find(_In_reads_(_Count) const _Elem* const _Ptr, const size_type _Off,\r\n        const size_type _Count) const noexcept /* strengthened */ {\r\n        // look for [_Ptr, _Ptr + _Count) beginning at or after _Off\r\n        return static_cast<size_type>(\r\n            _Traits_find<_Traits>(_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize),\r\n                static_cast<size_t>(_Off), _Ptr, static_cast<size_t>(_Count)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find(_In_z_ const _Elem* const _Ptr, const size_type _Off = 0) const noexcept\r\n    /* strengthened */ {\r\n        // look for [_Ptr, <null>) beginning at or after _Off\r\n        return static_cast<size_type>(_Traits_find<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Ptr, _Traits::length(_Ptr)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find(const _Elem _Ch, const size_type _Off = 0) const noexcept {\r\n        // look for _Ch at or after _Off\r\n        return static_cast<size_type>(_Traits_find_ch<_Traits>(\r\n            _Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Ch));\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _NODISCARD _CONSTEXPR20 size_type rfind(const _StringViewIsh& _Right, const size_type _Off = npos) const\r\n        noexcept(_Is_nothrow_convertible_v<const _StringViewIsh&, basic_string_view<_Elem, _Traits>>) {\r\n        // look for _Right beginning before _Off\r\n        basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        return static_cast<size_type>(_Traits_rfind<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _As_view.data(), _As_view.size()));\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type rfind(const basic_string& _Right, const size_type _Off = npos) const noexcept {\r\n        // look for _Right beginning before _Off\r\n        return static_cast<size_type>(_Traits_rfind<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Right._Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Right._Mypair._Myval2._Mysize)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type rfind(_In_reads_(_Count) const _Elem* const _Ptr, const size_type _Off,\r\n        const size_type _Count) const noexcept /* strengthened */ {\r\n        // look for [_Ptr, _Ptr + _Count) beginning before _Off\r\n        return static_cast<size_type>(\r\n            _Traits_rfind<_Traits>(_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize),\r\n                static_cast<size_t>(_Off), _Ptr, static_cast<size_t>(_Count)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type rfind(_In_z_ const _Elem* const _Ptr, const size_type _Off = npos) const noexcept\r\n    /* strengthened */ {\r\n        // look for [_Ptr, <null>) beginning before _Off\r\n        return static_cast<size_type>(_Traits_rfind<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Ptr, _Traits::length(_Ptr)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type rfind(const _Elem _Ch, const size_type _Off = npos) const noexcept {\r\n        // look for _Ch before _Off\r\n        return static_cast<size_type>(_Traits_rfind_ch<_Traits>(\r\n            _Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Ch));\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _NODISCARD _CONSTEXPR20 size_type find_first_of(const _StringViewIsh& _Right, const size_type _Off = 0) const\r\n        noexcept(_Is_nothrow_convertible_v<const _StringViewIsh&, basic_string_view<_Elem, _Traits>>) {\r\n        // look for one of _Right at or after _Off\r\n        basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        return static_cast<size_type>(_Traits_find_first_of<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _As_view.data(), _As_view.size()));\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find_first_of(\r\n        const basic_string& _Right, const size_type _Off = 0) const noexcept {\r\n        // look for one of _Right at or after _Off\r\n        return static_cast<size_type>(_Traits_find_first_of<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Right._Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Right._Mypair._Myval2._Mysize)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find_first_of(_In_reads_(_Count) const _Elem* const _Ptr, const size_type _Off,\r\n        const size_type _Count) const noexcept /* strengthened */ {\r\n        // look for one of [_Ptr, _Ptr + _Count) at or after _Off\r\n        return static_cast<size_type>(\r\n            _Traits_find_first_of<_Traits>(_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize),\r\n                static_cast<size_t>(_Off), _Ptr, static_cast<size_t>(_Count)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find_first_of(\r\n        _In_z_ const _Elem* const _Ptr, const size_type _Off = 0) const noexcept /* strengthened */ {\r\n        // look for one of [_Ptr, <null>) at or after _Off\r\n        return static_cast<size_type>(_Traits_find_first_of<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Ptr, _Traits::length(_Ptr)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find_first_of(const _Elem _Ch, const size_type _Off = 0) const noexcept {\r\n        // look for _Ch at or after _Off\r\n        return static_cast<size_type>(_Traits_find_ch<_Traits>(\r\n            _Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Ch));\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _NODISCARD _CONSTEXPR20 size_type find_last_of(const _StringViewIsh& _Right, const size_type _Off = npos) const\r\n        noexcept(_Is_nothrow_convertible_v<const _StringViewIsh&, basic_string_view<_Elem, _Traits>>) {\r\n        // look for one of _Right before _Off\r\n        basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        return static_cast<size_type>(_Traits_find_last_of<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _As_view.data(), _As_view.size()));\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find_last_of(const basic_string& _Right, size_type _Off = npos) const noexcept {\r\n        // look for one of _Right before _Off\r\n        return static_cast<size_type>(_Traits_find_last_of<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Right._Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Right._Mypair._Myval2._Mysize)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find_last_of(_In_reads_(_Count) const _Elem* const _Ptr, const size_type _Off,\r\n        const size_type _Count) const noexcept /* strengthened */ {\r\n        // look for one of [_Ptr, _Ptr + _Count) before _Off\r\n        return static_cast<size_type>(\r\n            _Traits_find_last_of<_Traits>(_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize),\r\n                static_cast<size_t>(_Off), _Ptr, static_cast<size_t>(_Count)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find_last_of(\r\n        _In_z_ const _Elem* const _Ptr, const size_type _Off = npos) const noexcept /* strengthened */ {\r\n        // look for one of [_Ptr, <null>) before _Off\r\n        return static_cast<size_type>(_Traits_find_last_of<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Ptr, _Traits::length(_Ptr)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find_last_of(const _Elem _Ch, const size_type _Off = npos) const noexcept {\r\n        // look for _Ch before _Off\r\n        return static_cast<size_type>(_Traits_rfind_ch<_Traits>(\r\n            _Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Ch));\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _NODISCARD _CONSTEXPR20 size_type find_first_not_of(const _StringViewIsh& _Right, const size_type _Off = 0) const\r\n        noexcept(_Is_nothrow_convertible_v<const _StringViewIsh&, basic_string_view<_Elem, _Traits>>) {\r\n        // look for none of _Right at or after _Off\r\n        basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        return static_cast<size_type>(_Traits_find_first_not_of<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _As_view.data(), _As_view.size()));\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find_first_not_of(\r\n        const basic_string& _Right, const size_type _Off = 0) const noexcept {\r\n        // look for none of _Right at or after _Off\r\n        return static_cast<size_type>(_Traits_find_first_not_of<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Right._Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Right._Mypair._Myval2._Mysize)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find_first_not_of(_In_reads_(_Count) const _Elem* const _Ptr,\r\n        const size_type _Off, const size_type _Count) const noexcept /* strengthened */ {\r\n        // look for none of [_Ptr, _Ptr + _Count) at or after _Off\r\n        return static_cast<size_type>(\r\n            _Traits_find_first_not_of<_Traits>(_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize),\r\n                static_cast<size_t>(_Off), _Ptr, static_cast<size_t>(_Count)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find_first_not_of(\r\n        _In_z_ const _Elem* const _Ptr, size_type _Off = 0) const noexcept /* strengthened */ {\r\n        // look for one of [_Ptr, <null>) at or after _Off\r\n        return static_cast<size_type>(_Traits_find_first_not_of<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Ptr, _Traits::length(_Ptr)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find_first_not_of(const _Elem _Ch, const size_type _Off = 0) const noexcept {\r\n        // look for non-_Ch at or after _Off\r\n        return static_cast<size_type>(_Traits_find_not_ch<_Traits>(\r\n            _Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Ch));\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _NODISCARD _CONSTEXPR20 size_type find_last_not_of(const _StringViewIsh& _Right, const size_type _Off = npos) const\r\n        noexcept(_Is_nothrow_convertible_v<const _StringViewIsh&, basic_string_view<_Elem, _Traits>>) {\r\n        // look for none of _Right before _Off\r\n        basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        return static_cast<size_type>(_Traits_find_last_not_of<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _As_view.data(), _As_view.size()));\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find_last_not_of(\r\n        const basic_string& _Right, const size_type _Off = npos) const noexcept {\r\n        // look for none of _Right before _Off\r\n        return static_cast<size_type>(_Traits_find_last_not_of<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Right._Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Right._Mypair._Myval2._Mysize)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find_last_not_of(_In_reads_(_Count) const _Elem* const _Ptr, const size_type _Off,\r\n        const size_type _Count) const noexcept /* strengthened */ {\r\n        // look for none of [_Ptr, _Ptr + _Count) before _Off\r\n        return static_cast<size_type>(\r\n            _Traits_find_last_not_of<_Traits>(_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize),\r\n                static_cast<size_t>(_Off), _Ptr, static_cast<size_t>(_Count)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find_last_not_of(\r\n        _In_z_ const _Elem* const _Ptr, const size_type _Off = npos) const noexcept /* strengthened */ {\r\n        // look for none of [_Ptr, <null>) before _Off\r\n        return static_cast<size_type>(_Traits_find_last_not_of<_Traits>(_Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Ptr, _Traits::length(_Ptr)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type find_last_not_of(const _Elem _Ch, const size_type _Off = npos) const noexcept {\r\n        // look for non-_Ch before _Off\r\n        return static_cast<size_type>(_Traits_rfind_not_ch<_Traits>(\r\n            _Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize), static_cast<size_t>(_Off), _Ch));\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    _NODISCARD bool _Starts_with(const basic_string_view<_Elem, _Traits> _Right) const noexcept {\r\n        // Used exclusively by filesystem\r\n        return basic_string_view<_Elem, _Traits>(*this)._Starts_with(_Right);\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _NODISCARD _CONSTEXPR20 basic_string substr(const size_type _Off = 0, const size_type _Count = npos)\r\n#if _HAS_CXX23\r\n        const&\r\n#else\r\n        const\r\n#endif\r\n    {\r\n        // return [_Off, _Off + _Count) as new string, default-constructing its allocator\r\n        return basic_string{*this, _Off, _Count};\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    _NODISCARD constexpr basic_string substr(const size_type _Off = 0, const size_type _Count = npos) && {\r\n        // return [_Off, _Off + _Count) as new string, potentially moving, default-constructing its allocator\r\n        return basic_string{_STD move(*this), _Off, _Count};\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _CONSTEXPR20 bool _Equal(const basic_string& _Right) const noexcept {\r\n        // compare [0, size()) with _Right for equality\r\n        return _Traits_equal<_Traits>(_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize),\r\n            _Right._Mypair._Myval2._Myptr(), static_cast<size_t>(_Right._Mypair._Myval2._Mysize));\r\n    }\r\n\r\n    _CONSTEXPR20 bool _Equal(_In_z_ const _Elem* const _Ptr) const noexcept {\r\n        // compare [0, size()) with _Ptr for equality\r\n        return _Traits_equal<_Traits>(\r\n            _Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize), _Ptr, _Traits::length(_Ptr));\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _NODISCARD _CONSTEXPR20 int compare(const _StringViewIsh& _Right) const\r\n        noexcept(_Is_nothrow_convertible_v<const _StringViewIsh&, basic_string_view<_Elem, _Traits>>) {\r\n        // compare [0, size()) with _Right\r\n        basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        return _Traits_compare<_Traits>(\r\n            _Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize), _As_view.data(), _As_view.size());\r\n    }\r\n\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _NODISCARD _CONSTEXPR20 int compare(const size_type _Off, const size_type _Nx, const _StringViewIsh& _Right) const {\r\n        // compare [_Off, _Off + _Nx) with _Right\r\n        basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        _Mypair._Myval2._Check_offset(_Off);\r\n        return _Traits_compare<_Traits>(_Mypair._Myval2._Myptr() + _Off,\r\n            static_cast<size_t>(_Mypair._Myval2._Clamp_suffix_size(_Off, _Nx)), _As_view.data(), _As_view.size());\r\n    }\r\n\r\n    template <class _StringViewIsh, _Is_string_view_ish<_StringViewIsh> = 0>\r\n    _NODISCARD _CONSTEXPR20 int compare(const size_type _Off, const size_type _Nx, const _StringViewIsh& _Right,\r\n        const size_type _Roff, const size_type _Count = npos) const {\r\n        // compare [_Off, _Off + _Nx) with _Right [_Roff, _Roff + _Count)\r\n        basic_string_view<_Elem, _Traits> _As_view = _Right;\r\n        _Mypair._Myval2._Check_offset(_Off);\r\n        const auto _With_substr = _As_view.substr(static_cast<size_t>(_Roff), static_cast<size_t>(_Count));\r\n        return _Traits_compare<_Traits>(_Mypair._Myval2._Myptr() + _Off,\r\n            static_cast<size_t>(_Mypair._Myval2._Clamp_suffix_size(_Off, _Nx)), _With_substr.data(),\r\n            _With_substr.size());\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    _NODISCARD _CONSTEXPR20 int compare(const basic_string& _Right) const noexcept {\r\n        // compare [0, size()) with _Right\r\n        return _Traits_compare<_Traits>(_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize),\r\n            _Right._Mypair._Myval2._Myptr(), static_cast<size_t>(_Right._Mypair._Myval2._Mysize));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 int compare(size_type _Off, size_type _Nx, const basic_string& _Right) const {\r\n        // compare [_Off, _Off + _Nx) with _Right\r\n        _Mypair._Myval2._Check_offset(_Off);\r\n        return _Traits_compare<_Traits>(_Mypair._Myval2._Myptr() + _Off,\r\n            static_cast<size_t>(_Mypair._Myval2._Clamp_suffix_size(_Off, _Nx)), _Right._Mypair._Myval2._Myptr(),\r\n            static_cast<size_t>(_Right._Mypair._Myval2._Mysize));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 int compare(const size_type _Off, const size_type _Nx, const basic_string& _Right,\r\n        const size_type _Roff, const size_type _Count = npos) const {\r\n        // compare [_Off, _Off + _Nx) with _Right [_Roff, _Roff + _Count)\r\n        _Mypair._Myval2._Check_offset(_Off);\r\n        _Right._Mypair._Myval2._Check_offset(_Roff);\r\n        return _Traits_compare<_Traits>(_Mypair._Myval2._Myptr() + _Off,\r\n            static_cast<size_t>(_Mypair._Myval2._Clamp_suffix_size(_Off, _Nx)), _Right._Mypair._Myval2._Myptr() + _Roff,\r\n            static_cast<size_t>(_Right._Mypair._Myval2._Clamp_suffix_size(_Roff, _Count)));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 int compare(_In_z_ const _Elem* const _Ptr) const noexcept /* strengthened */ {\r\n        // compare [0, size()) with [_Ptr, <null>)\r\n        return _Traits_compare<_Traits>(\r\n            _Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize), _Ptr, _Traits::length(_Ptr));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 int compare(\r\n        const size_type _Off, const size_type _Nx, _In_z_ const _Elem* const _Ptr) const {\r\n        // compare [_Off, _Off + _Nx) with [_Ptr, <null>)\r\n        _Mypair._Myval2._Check_offset(_Off);\r\n        return _Traits_compare<_Traits>(_Mypair._Myval2._Myptr() + _Off,\r\n            static_cast<size_t>(_Mypair._Myval2._Clamp_suffix_size(_Off, _Nx)), _Ptr, _Traits::length(_Ptr));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 int compare(const size_type _Off, const size_type _Nx,\r\n        _In_reads_(_Count) const _Elem* const _Ptr, const size_type _Count) const {\r\n        // compare [_Off, _Off + _Nx) with [_Ptr, _Ptr + _Count)\r\n        _Mypair._Myval2._Check_offset(_Off);\r\n        return _Traits_compare<_Traits>(_Mypair._Myval2._Myptr() + _Off,\r\n            static_cast<size_t>(_Mypair._Myval2._Clamp_suffix_size(_Off, _Nx)), _Ptr, static_cast<size_t>(_Count));\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD constexpr bool starts_with(const basic_string_view<_Elem, _Traits> _Right) const noexcept {\r\n        return basic_string_view<_Elem, _Traits>{_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize)}\r\n            .starts_with(_Right);\r\n    }\r\n\r\n    _NODISCARD constexpr bool starts_with(const _Elem _Right) const noexcept {\r\n        return basic_string_view<_Elem, _Traits>{_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize)}\r\n            .starts_with(_Right);\r\n    }\r\n\r\n    _NODISCARD constexpr bool starts_with(const _Elem* const _Right) const noexcept /* strengthened */ {\r\n        return basic_string_view<_Elem, _Traits>{_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize)}\r\n            .starts_with(_Right);\r\n    }\r\n\r\n    _NODISCARD constexpr bool ends_with(const basic_string_view<_Elem, _Traits> _Right) const noexcept {\r\n        return basic_string_view<_Elem, _Traits>{_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize)}\r\n            .ends_with(_Right);\r\n    }\r\n\r\n    _NODISCARD constexpr bool ends_with(const _Elem _Right) const noexcept {\r\n        return basic_string_view<_Elem, _Traits>{_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize)}\r\n            .ends_with(_Right);\r\n    }\r\n\r\n    _NODISCARD constexpr bool ends_with(const _Elem* const _Right) const noexcept /* strengthened */ {\r\n        return basic_string_view<_Elem, _Traits>{_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize)}\r\n            .ends_with(_Right);\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n    _NODISCARD constexpr bool contains(const basic_string_view<_Elem, _Traits> _Right) const noexcept {\r\n        return basic_string_view<_Elem, _Traits>{_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize)}\r\n            .contains(_Right);\r\n    }\r\n\r\n    _NODISCARD constexpr bool contains(const _Elem _Right) const noexcept {\r\n        return basic_string_view<_Elem, _Traits>{_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize)}\r\n            .contains(_Right);\r\n    }\r\n\r\n    _NODISCARD constexpr bool contains(const _Elem* const _Right) const noexcept /* strengthened */ {\r\n        return basic_string_view<_Elem, _Traits>{_Mypair._Myval2._Myptr(), static_cast<size_t>(_Mypair._Myval2._Mysize)}\r\n            .contains(_Right);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    _NODISCARD _CONSTEXPR20 allocator_type get_allocator() const noexcept {\r\n        return static_cast<allocator_type>(_Getal());\r\n    }\r\n\r\nprivate:\r\n    _NODISCARD static _CONSTEXPR20 size_type _Calculate_growth(\r\n        const size_type _Requested, const size_type _Old, const size_type _Max) noexcept {\r\n        const auto _Masked = static_cast<size_type>(_Requested | _Alloc_mask);\r\n        if (_Masked > _Max) { // the mask overflows, settle for max_size()\r\n            return _Max;\r\n        }\r\n\r\n        if (_Old > _Max - _Old / 2) { // similarly, geometric overflows\r\n            return _Max;\r\n        }\r\n\r\n        return (_STD max) (_Masked, static_cast<size_type>(_Old + _Old / 2));\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR20 size_type _Calculate_growth(const size_type _Requested) const noexcept {\r\n        return _Calculate_growth(_Requested, _Mypair._Myval2._Myres, max_size());\r\n    }\r\n\r\n    template <class _Fty, class... _ArgTys>\r\n    _CONSTEXPR20 basic_string& _Reallocate_for(const size_type _New_size, _Fty _Fn, _ArgTys... _Args) {\r\n        // reallocate to store exactly _New_size elements, new buffer prepared by\r\n        // _Fn(_New_ptr, _New_size, _Args...)\r\n        if (_New_size > max_size()) {\r\n            _Xlen_string(); // result too long\r\n        }\r\n\r\n        const size_type _Old_capacity = _Mypair._Myval2._Myres;\r\n        size_type _New_capacity       = _Calculate_growth(_New_size);\r\n        auto& _Al                     = _Getal();\r\n        const pointer _New_ptr        = _Allocate_for_capacity(_Al, _New_capacity); // throws\r\n\r\n        _Mypair._Myval2._Orphan_all();\r\n        _ASAN_STRING_REMOVE(*this);\r\n        _Mypair._Myval2._Mysize = _New_size;\r\n        _Mypair._Myval2._Myres  = _New_capacity;\r\n        _Fn(_Unfancy(_New_ptr), _New_size, _Args...);\r\n        if (_Old_capacity > _Small_string_capacity) {\r\n            _Deallocate_for_capacity(_Al, _Mypair._Myval2._Bx._Ptr, _Old_capacity);\r\n            _Mypair._Myval2._Bx._Ptr = _New_ptr;\r\n        } else {\r\n            _Construct_in_place(_Mypair._Myval2._Bx._Ptr, _New_ptr);\r\n        }\r\n\r\n        _ASAN_STRING_CREATE(*this);\r\n        return *this;\r\n    }\r\n\r\n    template <class _Fty, class... _ArgTys>\r\n    _CONSTEXPR20 basic_string& _Reallocate_grow_by(const size_type _Size_increase, _Fty _Fn, _ArgTys... _Args) {\r\n        // reallocate to increase size by _Size_increase elements, new buffer prepared by\r\n        // _Fn(_New_ptr, _Old_ptr, _Old_size, _Args...)\r\n        auto& _My_data            = _Mypair._Myval2;\r\n        const size_type _Old_size = _My_data._Mysize;\r\n        if (max_size() - _Old_size < _Size_increase) {\r\n            _Xlen_string(); // result too long\r\n        }\r\n\r\n        const auto _New_size          = static_cast<size_type>(_Old_size + _Size_increase);\r\n        const size_type _Old_capacity = _My_data._Myres;\r\n        size_type _New_capacity       = _Calculate_growth(_New_size);\r\n        auto& _Al                     = _Getal();\r\n        const pointer _New_ptr        = _Allocate_for_capacity(_Al, _New_capacity); // throws\r\n\r\n        _My_data._Orphan_all();\r\n        _ASAN_STRING_REMOVE(*this);\r\n        _My_data._Mysize      = _New_size;\r\n        _My_data._Myres       = _New_capacity;\r\n        _Elem* const _Raw_new = _Unfancy(_New_ptr);\r\n        if (_Old_capacity > _Small_string_capacity) {\r\n            const pointer _Old_ptr = _My_data._Bx._Ptr;\r\n            _Fn(_Raw_new, _Unfancy(_Old_ptr), _Old_size, _Args...);\r\n            _Deallocate_for_capacity(_Al, _Old_ptr, _Old_capacity);\r\n            _My_data._Bx._Ptr = _New_ptr;\r\n        } else {\r\n            _Fn(_Raw_new, _My_data._Bx._Buf, _Old_size, _Args...);\r\n            _Construct_in_place(_My_data._Bx._Ptr, _New_ptr);\r\n        }\r\n\r\n        _ASAN_STRING_CREATE(*this);\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 void _Become_small() noexcept {\r\n        // release any held storage and return to small string mode\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _STL_INTERNAL_CHECK(_My_data._Large_mode_engaged());\r\n        _STL_INTERNAL_CHECK(_My_data._Mysize <= _Small_string_capacity);\r\n\r\n        _My_data._Orphan_all();\r\n        _ASAN_STRING_REMOVE(*this);\r\n        const pointer _Ptr = _My_data._Bx._Ptr;\r\n        _My_data._Bx._Switch_to_buf();\r\n        _Traits::copy(_My_data._Bx._Buf, _Unfancy(_Ptr), static_cast<size_t>(_My_data._Mysize + 1));\r\n        auto& _Al = _Getal();\r\n        _Deallocate_for_capacity(_Al, _Ptr, _My_data._Myres);\r\n        _My_data._Myres = _Small_string_capacity;\r\n    }\r\n\r\n    _CONSTEXPR20 void _Eos(const size_type _New_size) noexcept { // set new length and null terminator\r\n        _ASAN_STRING_MODIFY(*this, _Mypair._Myval2._Mysize, _New_size);\r\n        _Mypair._Myval2._Mysize = _New_size;\r\n        _Traits::assign(_Mypair._Myval2._Myptr()[_New_size], _Elem());\r\n    }\r\n\r\n    template <class _UElem>\r\n    _CONSTEXPR20 basic_string& _Append(\r\n        _In_reads_(_Count) const _UElem* const _Ptr, _CRT_GUARDOVERFLOW const size_type _Count) {\r\n        // append [_Ptr, _Ptr + _Count), handling volatile-qualified _Elem\r\n        _STL_INTERNAL_STATIC_ASSERT(_Is_any_of_v<_UElem, _Elem, volatile _Elem>);\r\n\r\n        const size_type _Old_size = _Mypair._Myval2._Mysize;\r\n        if (_Count <= _Mypair._Myval2._Myres - _Old_size) {\r\n            const auto _New_size = static_cast<size_type>(_Old_size + _Count);\r\n            _ASAN_STRING_MODIFY(*this, _Old_size, _New_size);\r\n            _Mypair._Myval2._Mysize = _New_size;\r\n            _Elem* const _Old_ptr   = _Mypair._Myval2._Myptr();\r\n            _STD _Traits_move_batch<_Traits>(_Old_ptr + _Old_size, _Ptr, static_cast<size_t>(_Count));\r\n            _Traits::assign(_Old_ptr[_Old_size + _Count], _Elem());\r\n            return *this;\r\n        }\r\n\r\n        return _Reallocate_grow_by(\r\n            _Count,\r\n            [](_Elem* const _New_ptr, const _Elem* const _Old_ptr, const size_type _Old_size, const _UElem* const _Ptr,\r\n                const size_type _Count) static {\r\n                _Traits::copy(_New_ptr, _Old_ptr, static_cast<size_t>(_Old_size));\r\n                _STD _Traits_copy_batch<_Traits>(_New_ptr + _Old_size, _Ptr, static_cast<size_t>(_Count));\r\n                _Traits::assign(_New_ptr[_Old_size + _Count], _Elem());\r\n            },\r\n            _Ptr, _Count);\r\n    }\r\n\r\n    template <class _UElem>\r\n    _CONSTEXPR20 basic_string& _Assign(\r\n        _In_reads_(_Count) const _UElem* const _Ptr, _CRT_GUARDOVERFLOW const size_type _Count) {\r\n        // assign [_Ptr, _Ptr + _Count), handling volatile-qualified _Elem\r\n        _STL_INTERNAL_STATIC_ASSERT(_Is_any_of_v<_UElem, _Elem, volatile _Elem>);\r\n\r\n        if (_Count <= _Mypair._Myval2._Myres) {\r\n            _ASAN_STRING_REMOVE(*this);\r\n            _Elem* const _Old_ptr   = _Mypair._Myval2._Myptr();\r\n            _Mypair._Myval2._Mysize = _Count;\r\n            _STD _Traits_move_batch<_Traits>(_Old_ptr, _Ptr, static_cast<size_t>(_Count));\r\n            _Traits::assign(_Old_ptr[_Count], _Elem());\r\n            _ASAN_STRING_CREATE(*this);\r\n            return *this;\r\n        }\r\n\r\n        return _Reallocate_for(\r\n            _Count,\r\n            [](_Elem* const _New_ptr, const size_type _Count, const _UElem* const _Ptr) static {\r\n                _STD _Traits_copy_batch<_Traits>(_New_ptr, _Ptr, static_cast<size_t>(_Count));\r\n                _Traits::assign(_New_ptr[_Count], _Elem());\r\n            },\r\n            _Ptr);\r\n    }\r\n\r\n    template <class _UElem>\r\n    _CONSTEXPR20 basic_string& _Insert(\r\n        const size_type _Off, _In_reads_(_Count) const _UElem* const _Ptr, _CRT_GUARDOVERFLOW const size_type _Count) {\r\n        // insert [_Ptr, _Ptr + _Count) at _Off, handling volatile-qualified _Elem\r\n        _STL_INTERNAL_STATIC_ASSERT(_Is_any_of_v<_UElem, _Elem, volatile _Elem>);\r\n\r\n        _Mypair._Myval2._Check_offset(_Off);\r\n        const size_type _Old_size = _Mypair._Myval2._Mysize;\r\n\r\n        // We can't check for overlapping ranges when constant evaluated since comparison of pointers into string\r\n        // literals is unspecified, so always reallocate and copy to the new buffer if constant evaluated.\r\n        const bool _Check_overlap = _Count <= _Mypair._Myval2._Myres - _Old_size;\r\n\r\n        if (_Check_overlap && !_STD _Is_constant_evaluated()) {\r\n            const auto _New_size = static_cast<size_type>(_Old_size + _Count);\r\n            _ASAN_STRING_MODIFY(*this, _Old_size, _New_size);\r\n            _Mypair._Myval2._Mysize = _New_size;\r\n            _Elem* const _Old_ptr   = _Mypair._Myval2._Myptr();\r\n            _Elem* const _Insert_at = _Old_ptr + _Off;\r\n            // the range [_Ptr, _Ptr + _Ptr_shifted_after) is left alone by moving the suffix out,\r\n            // while the range [_Ptr + _Ptr_shifted_after, _Ptr + _Count) shifts down by _Count\r\n            size_type _Ptr_shifted_after;\r\n            if (_Ptr + _Count <= _Insert_at || _Ptr > _Old_ptr + _Old_size) {\r\n                // inserted content is before the shifted region, or does not alias\r\n                _Ptr_shifted_after = _Count; // none of _Ptr's data shifts\r\n            } else if (_Insert_at <= _Ptr) { // all of [_Ptr, _Ptr + _Count) shifts\r\n                _Ptr_shifted_after = 0;\r\n            } else { // [_Ptr, _Ptr + _Count) contains _Insert_at, so only the part after _Insert_at shifts\r\n                _Ptr_shifted_after = static_cast<size_type>(_Insert_at - _Ptr);\r\n            }\r\n\r\n            _Traits::move(\r\n                _Insert_at + _Count, _Insert_at, static_cast<size_t>(_Old_size - _Off + 1)); // move suffix + null down\r\n            _STD _Traits_copy_batch<_Traits>(_Insert_at, _Ptr, static_cast<size_t>(_Ptr_shifted_after));\r\n            _STD _Traits_copy_batch<_Traits>(_Insert_at + _Ptr_shifted_after, _Ptr + _Count + _Ptr_shifted_after,\r\n                static_cast<size_t>(_Count - _Ptr_shifted_after));\r\n            return *this;\r\n        }\r\n\r\n        return _Reallocate_grow_by(\r\n            _Count,\r\n            [](_Elem* const _New_ptr, const _Elem* const _Old_ptr, const size_type _Old_size, const size_type _Off,\r\n                const _UElem* const _Ptr, const size_type _Count) static {\r\n                _Traits::copy(_New_ptr, _Old_ptr, static_cast<size_t>(_Off));\r\n                _STD _Traits_copy_batch<_Traits>(_New_ptr + _Off, _Ptr, static_cast<size_t>(_Count));\r\n                _Traits::copy(_New_ptr + _Off + _Count, _Old_ptr + _Off, static_cast<size_t>(_Old_size - _Off + 1));\r\n            },\r\n            _Off, _Ptr, _Count);\r\n    }\r\n\r\n    template <class _UElem>\r\n    _CONSTEXPR20 basic_string& _Replace(\r\n        const size_type _Off, size_type _Nx, _In_reads_(_Count) const _UElem* const _Ptr, const size_type _Count) {\r\n        // replace [_Off, _Off + _Nx) with [_Ptr, _Ptr + _Count), handling volatile-qualified _Elem\r\n        _STL_INTERNAL_STATIC_ASSERT(_Is_any_of_v<_UElem, _Elem, volatile _Elem>);\r\n\r\n        _Mypair._Myval2._Check_offset(_Off);\r\n        _Nx = _Mypair._Myval2._Clamp_suffix_size(_Off, _Nx);\r\n        if (_Nx == _Count) { // size doesn't change, so a single move does the trick\r\n            _STD _Traits_move_batch<_Traits>(_Mypair._Myval2._Myptr() + _Off, _Ptr, static_cast<size_t>(_Count));\r\n            return *this;\r\n        }\r\n\r\n        const size_type _Old_size = _Mypair._Myval2._Mysize;\r\n        const auto _Suffix_size   = static_cast<size_type>(_Old_size - _Nx - _Off + 1);\r\n        if (_Count < _Nx) { // suffix shifts backwards; we don't have to move anything out of the way\r\n            _Elem* const _Old_ptr   = _Mypair._Myval2._Myptr();\r\n            _Elem* const _Insert_at = _Old_ptr + _Off;\r\n            _STD _Traits_move_batch<_Traits>(_Insert_at, _Ptr, static_cast<size_t>(_Count));\r\n            _Traits::move(_Insert_at + _Count, _Insert_at + _Nx, static_cast<size_t>(_Suffix_size));\r\n\r\n            const auto _New_size = static_cast<size_type>(_Old_size - (_Nx - _Count));\r\n            _ASAN_STRING_MODIFY(*this, _Old_size, _New_size);\r\n            _Mypair._Myval2._Mysize = _New_size;\r\n            return *this;\r\n        }\r\n\r\n        const size_type _Growth = static_cast<size_type>(_Count - _Nx);\r\n\r\n        // checking for overlapping ranges is technically UB (considering string literals), so just always reallocate\r\n        // and copy to the new buffer if constant evaluated\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            if (_Growth <= _Mypair._Myval2._Myres - _Old_size) { // growth fits\r\n                const auto _New_size = static_cast<size_type>(_Old_size + _Growth);\r\n                _ASAN_STRING_MODIFY(*this, _Old_size, _New_size);\r\n                _Mypair._Myval2._Mysize = _New_size;\r\n                _Elem* const _Old_ptr   = _Mypair._Myval2._Myptr();\r\n                _Elem* const _Insert_at = _Old_ptr + _Off;\r\n                _Elem* const _Suffix_at = _Insert_at + _Nx;\r\n\r\n                size_type _Ptr_shifted_after; // see rationale in insert\r\n                if (_Ptr + _Count <= _Insert_at || _Ptr > _Old_ptr + _Old_size) {\r\n                    _Ptr_shifted_after = _Count;\r\n                } else if (_Suffix_at <= _Ptr) {\r\n                    _Ptr_shifted_after = 0;\r\n                } else {\r\n                    _Ptr_shifted_after = static_cast<size_type>(_Suffix_at - _Ptr);\r\n                }\r\n\r\n                _Traits::move(_Suffix_at + _Growth, _Suffix_at, static_cast<size_t>(_Suffix_size));\r\n                // next case must be move, in case _Ptr begins before _Insert_at and contains part of the hole;\r\n                // this case doesn't occur in insert because the new content must come from outside the removed\r\n                // content there (because in insert there is no removed content)\r\n                _STD _Traits_move_batch<_Traits>(_Insert_at, _Ptr, static_cast<size_t>(_Ptr_shifted_after));\r\n                // the next case can be copy, because it comes from the chunk moved out of the way in the\r\n                // first move, and the hole we're filling can't alias the chunk we moved out of the way\r\n                _STD _Traits_copy_batch<_Traits>(_Insert_at + _Ptr_shifted_after, _Ptr + _Growth + _Ptr_shifted_after,\r\n                    static_cast<size_t>(_Count - _Ptr_shifted_after));\r\n                return *this;\r\n            }\r\n        }\r\n\r\n        return _Reallocate_grow_by(\r\n            _Growth,\r\n            [](_Elem* const _New_ptr, const _Elem* const _Old_ptr, const size_type _Old_size, const size_type _Off,\r\n                const size_type _Nx, const _UElem* const _Ptr, const size_type _Count) static {\r\n                _Traits::copy(_New_ptr, _Old_ptr, static_cast<size_t>(_Off));\r\n                _STD _Traits_copy_batch<_Traits>(_New_ptr + _Off, _Ptr, static_cast<size_t>(_Count));\r\n                _Traits::copy(\r\n                    _New_ptr + _Off + _Count, _Old_ptr + _Off + _Nx, static_cast<size_t>(_Old_size - _Nx - _Off + 1));\r\n            },\r\n            _Off, _Nx, _Ptr, _Count);\r\n    }\r\n\r\n    _CONSTEXPR20 void _Tidy_deallocate() noexcept { // initialize buffer, deallocating any storage\r\n        auto& _My_data = _Mypair._Myval2;\r\n        _My_data._Orphan_all();\r\n        if (_My_data._Large_mode_engaged()) {\r\n            _ASAN_STRING_REMOVE(*this);\r\n            auto& _Al = _Getal();\r\n            _Deallocate_for_capacity(_Al, _My_data._Bx._Ptr, _My_data._Myres);\r\n            _My_data._Bx._Switch_to_buf();\r\n        }\r\n\r\n        _My_data._Mysize = 0;\r\n        _My_data._Myres  = _Small_string_capacity;\r\n        // the _Traits::assign is last so the codegen doesn't think the char write can alias this\r\n        _Traits::assign(_My_data._Bx._Buf[0], _Elem());\r\n    }\r\n\r\npublic:\r\n    _CONSTEXPR20 void _Orphan_all() noexcept { // used by filesystem::path\r\n        _Mypair._Myval2._Orphan_all();\r\n    }\r\n\r\nprivate:\r\n    _CONSTEXPR20 void _Swap_proxy_and_iterators(basic_string& _Right) noexcept {\r\n        _Mypair._Myval2._Swap_proxy_and_iterators(_Right._Mypair._Myval2);\r\n    }\r\n\r\n    _CONSTEXPR20 _Alty& _Getal() noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    _CONSTEXPR20 const _Alty& _Getal() const noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    _Compressed_pair<_Alty, _Scary_val> _Mypair;\r\n};\r\n\r\n#pragma warning(pop)\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\nconstexpr bool _Equivalence_is_equality_impl<basic_string<_Elem, _Traits, _Alloc>> =\r\n    _Is_implementation_handled_char_traits<_Traits>;\r\n#endif // _HAS_CXX23\r\n\r\n#if _HAS_CXX17\r\ntemplate <class _Iter, class _Alloc = allocator<_Iter_value_t<_Iter>>,\r\n    enable_if_t<conjunction_v<_Is_iterator<_Iter>, _Is_allocator<_Alloc>>, int> = 0>\r\nbasic_string(_Iter, _Iter, _Alloc = _Alloc())\r\n    -> basic_string<_Iter_value_t<_Iter>, char_traits<_Iter_value_t<_Iter>>, _Alloc>;\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc = allocator<_Elem>,\r\n    enable_if_t<_Is_allocator<_Alloc>::value, int> = 0>\r\nexplicit basic_string(basic_string_view<_Elem, _Traits>, const _Alloc& = _Alloc())\r\n    -> basic_string<_Elem, _Traits, _Alloc>;\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc = allocator<_Elem>,\r\n    enable_if_t<_Is_allocator<_Alloc>::value, int> = 0>\r\nbasic_string(basic_string_view<_Elem, _Traits>, _Guide_size_type_t<_Alloc>, _Guide_size_type_t<_Alloc>,\r\n    const _Alloc& = _Alloc()) -> basic_string<_Elem, _Traits, _Alloc>;\r\n\r\n#if _HAS_CXX23\r\ntemplate <_RANGES input_range _Rng, _Allocator_for_container _Alloc = allocator<_RANGES range_value_t<_Rng>>>\r\nbasic_string(from_range_t, _Rng&&, _Alloc = _Alloc())\r\n    -> basic_string<_RANGES range_value_t<_Rng>, char_traits<_RANGES range_value_t<_Rng>>, _Alloc>;\r\n#endif // _HAS_CXX23\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_CONSTEXPR20 void swap(basic_string<_Elem, _Traits, _Alloc>& _Left,\r\n    basic_string<_Elem, _Traits, _Alloc>& _Right) noexcept /* strengthened */ {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 basic_string<_Elem, _Traits, _Alloc> operator+(\r\n    const basic_string<_Elem, _Traits, _Alloc>& _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) {\r\n    const auto _Left_size  = _Left.size();\r\n    const auto _Right_size = _Right.size();\r\n    if (_Left.max_size() - _Left_size < _Right_size) {\r\n        _Xlen_string();\r\n    }\r\n\r\n    return {_String_constructor_concat_tag{}, _Left, _Left.c_str(), _Left_size, _Right.c_str(), _Right_size};\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 basic_string<_Elem, _Traits, _Alloc> operator+(\r\n    _In_z_ const _Elem* const _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) {\r\n    using _Size_type       = typename basic_string<_Elem, _Traits, _Alloc>::size_type;\r\n    const auto _Left_size  = _Convert_size<_Size_type>(_Traits::length(_Left));\r\n    const auto _Right_size = _Right.size();\r\n    if (_Right.max_size() - _Right_size < _Left_size) {\r\n        _Xlen_string();\r\n    }\r\n\r\n    return {_String_constructor_concat_tag{}, _Right, _Left, _Left_size, _Right.c_str(), _Right_size};\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 basic_string<_Elem, _Traits, _Alloc> operator+(\r\n    const _Elem _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) {\r\n    const auto _Right_size = _Right.size();\r\n    if (_Right_size == _Right.max_size()) {\r\n        _Xlen_string();\r\n    }\r\n\r\n    return {_String_constructor_concat_tag{}, _Right, _STD addressof(_Left), 1, _Right.c_str(), _Right_size};\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 basic_string<_Elem, _Traits, _Alloc> operator+(\r\n    const basic_string<_Elem, _Traits, _Alloc>& _Left, _In_z_ const _Elem* const _Right) {\r\n    using _Size_type       = typename basic_string<_Elem, _Traits, _Alloc>::size_type;\r\n    const auto _Left_size  = _Left.size();\r\n    const auto _Right_size = _Convert_size<_Size_type>(_Traits::length(_Right));\r\n    if (_Left.max_size() - _Left_size < _Right_size) {\r\n        _Xlen_string();\r\n    }\r\n\r\n    return {_String_constructor_concat_tag{}, _Left, _Left.c_str(), _Left_size, _Right, _Right_size};\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 basic_string<_Elem, _Traits, _Alloc> operator+(\r\n    const basic_string<_Elem, _Traits, _Alloc>& _Left, const _Elem _Right) {\r\n    const auto _Left_size = _Left.size();\r\n    if (_Left_size == _Left.max_size()) {\r\n        _Xlen_string();\r\n    }\r\n\r\n    return {_String_constructor_concat_tag{}, _Left, _Left.c_str(), _Left_size, _STD addressof(_Right), 1};\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 basic_string<_Elem, _Traits, _Alloc> operator+(\r\n    const basic_string<_Elem, _Traits, _Alloc>& _Left, basic_string<_Elem, _Traits, _Alloc>&& _Right) {\r\n    return _STD move(_Right.insert(0, _Left));\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 basic_string<_Elem, _Traits, _Alloc> operator+(\r\n    basic_string<_Elem, _Traits, _Alloc>&& _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) {\r\n    return _STD move(_Left.append(_Right));\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 basic_string<_Elem, _Traits, _Alloc> operator+(\r\n    basic_string<_Elem, _Traits, _Alloc>&& _Left, basic_string<_Elem, _Traits, _Alloc>&& _Right) {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    _STL_VERIFY(_STD addressof(_Left) != _STD addressof(_Right),\r\n        \"You cannot concatenate the same moved string to itself. See N4950 [res.on.arguments]/1.3: \"\r\n        \"If a function argument is bound to an rvalue reference parameter, the implementation may assume that \"\r\n        \"this parameter is a unique reference to this argument, except that the argument passed to \"\r\n        \"a move-assignment operator may be a reference to *this ([lib.types.movedfrom]).\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n    return {_String_constructor_concat_tag{}, _Left, _Right};\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 basic_string<_Elem, _Traits, _Alloc> operator+(\r\n    _In_z_ const _Elem* const _Left, basic_string<_Elem, _Traits, _Alloc>&& _Right) {\r\n    return _STD move(_Right.insert(0, _Left));\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 basic_string<_Elem, _Traits, _Alloc> operator+(\r\n    const _Elem _Left, basic_string<_Elem, _Traits, _Alloc>&& _Right) {\r\n    return _STD move(_Right.insert(0, 1, _Left));\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 basic_string<_Elem, _Traits, _Alloc> operator+(\r\n    basic_string<_Elem, _Traits, _Alloc>&& _Left, _In_z_ const _Elem* const _Right) {\r\n    return _STD move(_Left.append(_Right));\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 basic_string<_Elem, _Traits, _Alloc> operator+(\r\n    basic_string<_Elem, _Traits, _Alloc>&& _Left, const _Elem _Right) {\r\n    _Left.push_back(_Right);\r\n    return _STD move(_Left);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 bool operator==(\r\n    const basic_string<_Elem, _Traits, _Alloc>& _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) noexcept {\r\n    return _Left._Equal(_Right);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD _CONSTEXPR20 bool operator==(\r\n    const basic_string<_Elem, _Traits, _Alloc>& _Left, _In_z_ const _Elem* const _Right) noexcept /* strengthened */ {\r\n    return _Left._Equal(_Right);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD constexpr _Get_comparison_category_t<_Traits> operator<=>(\r\n    const basic_string<_Elem, _Traits, _Alloc>& _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) noexcept {\r\n    return static_cast<_Get_comparison_category_t<_Traits>>(_Left.compare(_Right) <=> 0);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD constexpr _Get_comparison_category_t<_Traits> operator<=>(\r\n    const basic_string<_Elem, _Traits, _Alloc>& _Left, _In_z_ const _Elem* const _Right) noexcept /* strengthened */ {\r\n    return static_cast<_Get_comparison_category_t<_Traits>>(_Left.compare(_Right) <=> 0);\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD bool operator==(_In_z_ const _Elem* const _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) noexcept\r\n/* strengthened */ {\r\n    return _Right._Equal(_Left);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD bool operator!=(\r\n    const basic_string<_Elem, _Traits, _Alloc>& _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) noexcept {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD bool operator!=(_In_z_ const _Elem* const _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) noexcept\r\n/* strengthened */ {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD bool operator!=(const basic_string<_Elem, _Traits, _Alloc>& _Left, _In_z_ const _Elem* const _Right) noexcept\r\n/* strengthened */ {\r\n    return !(_Left == _Right);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD bool operator<(\r\n    const basic_string<_Elem, _Traits, _Alloc>& _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) noexcept {\r\n    return _Left.compare(_Right) < 0;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD bool operator<(_In_z_ const _Elem* const _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) noexcept\r\n/* strengthened */ {\r\n    return _Right.compare(_Left) > 0;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD bool operator<(const basic_string<_Elem, _Traits, _Alloc>& _Left, _In_z_ const _Elem* const _Right) noexcept\r\n/* strengthened */ {\r\n    return _Left.compare(_Right) < 0;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD bool operator>(\r\n    const basic_string<_Elem, _Traits, _Alloc>& _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) noexcept {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD bool operator>(_In_z_ const _Elem* const _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) noexcept\r\n/* strengthened */ {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD bool operator>(const basic_string<_Elem, _Traits, _Alloc>& _Left, _In_z_ const _Elem* const _Right) noexcept\r\n/* strengthened */ {\r\n    return _Right < _Left;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD bool operator<=(\r\n    const basic_string<_Elem, _Traits, _Alloc>& _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) noexcept {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD bool operator<=(_In_z_ const _Elem* const _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) noexcept\r\n/* strengthened */ {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD bool operator<=(const basic_string<_Elem, _Traits, _Alloc>& _Left, _In_z_ const _Elem* const _Right) noexcept\r\n/* strengthened */ {\r\n    return !(_Right < _Left);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD bool operator>=(\r\n    const basic_string<_Elem, _Traits, _Alloc>& _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) noexcept {\r\n    return !(_Left < _Right);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD bool operator>=(_In_z_ const _Elem* const _Left, const basic_string<_Elem, _Traits, _Alloc>& _Right) noexcept\r\n/* strengthened */ {\r\n    return !(_Left < _Right);\r\n}\r\n\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\n_NODISCARD bool operator>=(const basic_string<_Elem, _Traits, _Alloc>& _Left, _In_z_ const _Elem* const _Right) noexcept\r\n/* strengthened */ {\r\n    return !(_Left < _Right);\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD using string  = basic_string<char, char_traits<char>, allocator<char>>;\r\n_EXPORT_STD using wstring = basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t>>;\r\n#ifdef __cpp_lib_char8_t\r\n_EXPORT_STD using u8string = basic_string<char8_t, char_traits<char8_t>, allocator<char8_t>>;\r\n#endif // defined(__cpp_lib_char8_t)\r\n_EXPORT_STD using u16string = basic_string<char16_t, char_traits<char16_t>, allocator<char16_t>>;\r\n_EXPORT_STD using u32string = basic_string<char32_t, char_traits<char32_t>, allocator<char32_t>>;\r\n\r\ntemplate <class _Elem, class _Alloc>\r\nstruct hash<basic_string<_Elem, char_traits<_Elem>, _Alloc>>\r\n    : _Conditionally_enabled_hash<basic_string<_Elem, char_traits<_Elem>, _Alloc>, _Is_EcharT<_Elem>> {\r\n    _NODISCARD static size_t _Do_hash(const basic_string<_Elem, char_traits<_Elem>, _Alloc>& _Keyval) noexcept {\r\n        return _Hash_array_representation(_Keyval.c_str(), static_cast<size_t>(_Keyval.size()));\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nbasic_istream<_Elem, _Traits>& operator>>(\r\n    basic_istream<_Elem, _Traits>& _Istr, basic_string<_Elem, _Traits, _Alloc>& _Str) {\r\n    using _Myis   = basic_istream<_Elem, _Traits>;\r\n    using _Ctype  = typename _Myis::_Ctype;\r\n    using _Mystr  = basic_string<_Elem, _Traits, _Alloc>;\r\n    using _Mysizt = typename _Mystr::size_type;\r\n\r\n    typename _Myis::iostate _State = _Myis::goodbit;\r\n    bool _Changed                  = false;\r\n    const typename _Myis::sentry _Ok(_Istr);\r\n\r\n    if (_Ok) { // state okay, extract characters\r\n        const _Ctype& _Ctype_fac = _STD use_facet<_Ctype>(_Istr.getloc());\r\n        _Str.erase();\r\n\r\n        _TRY_IO_BEGIN\r\n        _Mysizt _Size;\r\n        if (0 < _Istr.width() && static_cast<_Mysizt>(_Istr.width()) < _Str.max_size()) {\r\n            _Size = static_cast<_Mysizt>(_Istr.width());\r\n        } else {\r\n            _Size = _Str.max_size();\r\n        }\r\n\r\n        typename _Traits::int_type _Meta = _Istr.rdbuf()->sgetc();\r\n\r\n        for (; 0 < _Size; --_Size, _Meta = _Istr.rdbuf()->snextc()) {\r\n            if (_Traits::eq_int_type(_Traits::eof(), _Meta)) { // end of file, quit\r\n                _State |= _Myis::eofbit;\r\n                break;\r\n            } else if (_Ctype_fac.is(_Ctype::space, _Traits::to_char_type(_Meta))) {\r\n                break; // whitespace, quit\r\n            } else { // add character to string\r\n                _Str.push_back(_Traits::to_char_type(_Meta));\r\n                _Changed = true;\r\n            }\r\n        }\r\n        _CATCH_IO_(_Myis, _Istr)\r\n    }\r\n\r\n    _Istr.width(0);\r\n    if (!_Changed) {\r\n        _State |= _Myis::failbit;\r\n    }\r\n\r\n    _Istr.setstate(_State);\r\n    return _Istr;\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc>\r\nbasic_ostream<_Elem, _Traits>& operator<<(\r\n    basic_ostream<_Elem, _Traits>& _Ostr, const basic_string<_Elem, _Traits, _Alloc>& _Str) {\r\n    return _Insert_string(_Ostr, _Str.data(), _Str.size());\r\n}\r\n\r\ninline namespace literals {\r\n    inline namespace string_literals {\r\n        _EXPORT_STD _NODISCARD _CONSTEXPR20 string operator\"\"s(const char* _Str, size_t _Len) {\r\n            return string{_Str, _Len};\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD _CONSTEXPR20 wstring operator\"\"s(const wchar_t* _Str, size_t _Len) {\r\n            return wstring{_Str, _Len};\r\n        }\r\n\r\n#ifdef __cpp_char8_t\r\n        _EXPORT_STD _NODISCARD _CONSTEXPR20 basic_string<char8_t> operator\"\"s(const char8_t* _Str, size_t _Len) {\r\n            return basic_string<char8_t>{_Str, _Len};\r\n        }\r\n#endif // defined(__cpp_char8_t)\r\n\r\n        _EXPORT_STD _NODISCARD _CONSTEXPR20 u16string operator\"\"s(const char16_t* _Str, size_t _Len) {\r\n            return u16string{_Str, _Len};\r\n        }\r\n\r\n        _EXPORT_STD _NODISCARD _CONSTEXPR20 u32string operator\"\"s(const char32_t* _Str, size_t _Len) {\r\n            return u32string{_Str, _Len};\r\n        }\r\n    } // namespace string_literals\r\n} // namespace literals\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc, class _Uty>\r\nconstexpr basic_string<_Elem, _Traits, _Alloc>::size_type erase(\r\n    basic_string<_Elem, _Traits, _Alloc>& _Cont, const _Uty& _Val) {\r\n    return _STD _Erase_remove(_Cont, _Val);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem, class _Traits, class _Alloc, class _Pr>\r\nconstexpr basic_string<_Elem, _Traits, _Alloc>::size_type erase_if(\r\n    basic_string<_Elem, _Traits, _Alloc>& _Cont, _Pr _Pred) {\r\n    return _STD _Erase_remove_if(_Cont, _STD _Pass_fn(_Pred));\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX17\r\nnamespace pmr {\r\n    _EXPORT_STD template <class _Elem, class _Traits = char_traits<_Elem>>\r\n    using basic_string = _STD basic_string<_Elem, _Traits, polymorphic_allocator<_Elem>>;\r\n\r\n    _EXPORT_STD using string = basic_string<char>;\r\n#ifdef __cpp_lib_char8_t\r\n    _EXPORT_STD using u8string = basic_string<char8_t>;\r\n#endif // defined(__cpp_lib_char8_t)\r\n    _EXPORT_STD using u16string = basic_string<char16_t>;\r\n    _EXPORT_STD using u32string = basic_string<char32_t>;\r\n    _EXPORT_STD using wstring   = basic_string<wchar_t>;\r\n} // namespace pmr\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Elem, class _Traits, class _Alloc>\r\nconstexpr bool _Has_guaranteed_push_back<basic_string<_Elem, _Traits, _Alloc>> = true;\r\n#endif // _HAS_CXX23\r\n_STD_END\r\n\r\n#undef _ASAN_STRING_REMOVE\r\n#undef _ASAN_STRING_CREATE\r\n#undef _ASAN_STRING_MODIFY\r\n#undef _INSERT_STRING_ANNOTATION\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XSTRING_\r\n"
  },
  {
    "path": "stl/inc/xthreads.h",
    "content": "// xthreads.h internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _THR_XTHREADS_H\r\n#define _THR_XTHREADS_H\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <__msvc_threads_core.hpp>\r\n#include <climits>\r\n#include <xtimec.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\nextern \"C\" {\r\n// threads\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Thrd_detach(_Thrd_t) noexcept;\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Thrd_join(_Thrd_t, int*) noexcept;\r\n_CRTIMP2_PURE void __cdecl _Thrd_yield() noexcept;\r\n_CRTIMP2_PURE unsigned int __cdecl _Thrd_hardware_concurrency() noexcept;\r\n_CRTIMP2_PURE _Thrd_id_t __cdecl _Thrd_id() noexcept;\r\nvoid __stdcall _Thrd_sleep_for(unsigned long /*ms*/) noexcept;\r\n\r\n// mutexes\r\nenum { // mutex types\r\n    _Mtx_plain     = 0x01,\r\n    _Mtx_try       = 0x02,\r\n    _Mtx_timed     = 0x04,\r\n    _Mtx_recursive = 0x100\r\n};\r\n\r\n#if defined(_CRTBLD) || defined(_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR)\r\n_CRTIMP2_PURE void __cdecl _Mtx_init_in_situ(_Mtx_t, int) noexcept;\r\n#endif // ^^^ defined(_CRTBLD) || defined(_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR) ^^^\r\n_CRTIMP2_PURE int __cdecl _Mtx_current_owns(_Mtx_t) noexcept;\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Mtx_lock(_Mtx_t) noexcept;\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Mtx_trylock(_Mtx_t) noexcept;\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Mtx_unlock(_Mtx_t) noexcept; // TRANSITION, ABI: Always succeeds\r\n\r\n// shared mutex\r\n// these declarations must be in sync with those in sharedmutex.cpp\r\nvoid __cdecl _Smtx_lock_exclusive(_Smtx_t*) noexcept;\r\nvoid __cdecl _Smtx_lock_shared(_Smtx_t*) noexcept;\r\nint __cdecl _Smtx_try_lock_exclusive(_Smtx_t*) noexcept;\r\nint __cdecl _Smtx_try_lock_shared(_Smtx_t*) noexcept;\r\nvoid __cdecl _Smtx_unlock_exclusive(_Smtx_t*) noexcept;\r\nvoid __cdecl _Smtx_unlock_shared(_Smtx_t*) noexcept;\r\n\r\n// condition variables\r\n#ifdef _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR\r\n_CRTIMP2_PURE void __cdecl _Cnd_init_in_situ(_Cnd_t) noexcept;\r\n#endif // ^^^ defined(_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR) ^^^\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Cnd_wait(_Cnd_t, _Mtx_t) noexcept; // TRANSITION, ABI: Always succeeds\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Cnd_broadcast(_Cnd_t) noexcept; // TRANSITION, ABI: Always succeeds\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Cnd_signal(_Cnd_t) noexcept; // TRANSITION, ABI: Always succeeds\r\n_CRTIMP2_PURE void __cdecl _Cnd_register_at_thread_exit(_Cnd_t, _Mtx_t, int*) noexcept;\r\n_CRTIMP2_PURE void __cdecl _Cnd_unregister_at_thread_exit(_Mtx_t) noexcept;\r\n_CRTIMP2_PURE void __cdecl _Cnd_do_broadcast_at_thread_exit() noexcept;\r\n// '_unchecked' means it is not checked against the 'steady_clock', so may report timeout prematurely\r\n_Thrd_result __stdcall _Cnd_timedwait_for_unchecked(_Cnd_t, _Mtx_t, unsigned int) noexcept;\r\n} // extern \"C\"\r\n\r\n_STD_BEGIN\r\nenum { // constants for error codes\r\n    _DEVICE_OR_RESOURCE_BUSY,\r\n    _INVALID_ARGUMENT,\r\n    _NO_SUCH_PROCESS,\r\n    _NOT_ENOUGH_MEMORY,\r\n    _OPERATION_NOT_PERMITTED,\r\n    _RESOURCE_DEADLOCK_WOULD_OCCUR,\r\n    _RESOURCE_UNAVAILABLE_TRY_AGAIN\r\n};\r\n\r\nextern \"C++\" [[noreturn]] _CRTIMP2_PURE void __cdecl _Throw_Cpp_error(int _Code);\r\n_STD_END\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _THR_XTHREADS_H\r\n\r\n/*\r\n * This file is derived from software bearing the following\r\n * restrictions:\r\n *\r\n * (c) Copyright William E. Kempf 2001\r\n *\r\n * Permission to use, copy, modify, distribute and sell this\r\n * software and its documentation for any purpose is hereby\r\n * granted without fee, provided that the above copyright\r\n * notice appear in all copies and that both that copyright\r\n * notice and this permission notice appear in supporting\r\n * documentation. William E. Kempf makes no representations\r\n * about the suitability of this software for any purpose.\r\n * It is provided \"as is\" without express or implied warranty.\r\n */\r\n"
  },
  {
    "path": "stl/inc/xtimec.h",
    "content": "// xtimec.h internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _THR_XTIMEC_H\r\n#define _THR_XTIMEC_H\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <ctime>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\nextern \"C\" {\r\n\r\n#ifdef _CRTBLD\r\n_CRTIMP2_PURE long __cdecl _Xtime_diff_to_millis2(const _timespec64*, const _timespec64*) noexcept;\r\n#endif // _CRTBLD\r\n\r\n_CRTIMP2_PURE long long __cdecl _Xtime_get_ticks() noexcept;\r\n\r\n#ifdef _CRTBLD\r\n// Used by several src files, but not dllexported.\r\nvoid _Timespec64_get_sys(_timespec64*) noexcept;\r\n#endif // defined(_CRTBLD)\r\n\r\n_CRTIMP2_PURE long long __cdecl _Query_perf_counter() noexcept;\r\n_CRTIMP2_PURE long long __cdecl _Query_perf_frequency() noexcept;\r\n\r\n} // extern \"C\"\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _THR_XTIMEC_H\r\n\r\n/*\r\n * This file is derived from software bearing the following\r\n * restrictions:\r\n *\r\n * (c) Copyright William E. Kempf 2001\r\n *\r\n * Permission to use, copy, modify, distribute and sell this\r\n * software and its documentation for any purpose is hereby\r\n * granted without fee, provided that the above copyright\r\n * notice appear in all copies and that both that copyright\r\n * notice and this permission notice appear in supporting\r\n * documentation. William E. Kempf makes no representations\r\n * about the suitability of this software for any purpose.\r\n * It is provided \"as is\" without express or implied warranty.\r\n */\r\n"
  },
  {
    "path": "stl/inc/xtr1common",
    "content": "// xtr1common internal header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XTR1COMMON_\r\n#define _XTR1COMMON_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"known_semantics\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef known_semantics\r\n#undef no_specializations\r\n\r\n_STD_BEGIN\r\n_EXPORT_STD template <class _Ty, _Ty _Val>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS integral_constant {\r\n    static constexpr _Ty value = _Val;\r\n\r\n    using value_type = _Ty;\r\n    using type       = integral_constant;\r\n\r\n    constexpr operator value_type() const noexcept {\r\n        return value;\r\n    }\r\n\r\n    _NODISCARD constexpr value_type operator()() const noexcept {\r\n        return value;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <bool _Val>\r\nusing bool_constant = integral_constant<bool, _Val>;\r\n\r\n_EXPORT_STD using true_type  = bool_constant<true>;\r\n_EXPORT_STD using false_type = bool_constant<false>;\r\n\r\n_EXPORT_STD template <bool _Test, class _Ty = void>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS enable_if {}; // no member \"type\" when !_Test\r\n\r\ntemplate <class _Ty>\r\nstruct enable_if<true, _Ty> { // type is _Ty for _Test\r\n    using type = _Ty;\r\n};\r\n\r\n_EXPORT_STD template <bool _Test, class _Ty = void>\r\nusing enable_if_t = typename enable_if<_Test, _Ty>::type;\r\n\r\n_EXPORT_STD template <bool _Test, class _Ty1, class _Ty2>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS conditional { // Choose _Ty1 if _Test is true, and _Ty2 otherwise\r\n    using type = _Ty1;\r\n};\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct conditional<false, _Ty1, _Ty2> {\r\n    using type = _Ty2;\r\n};\r\n\r\n_EXPORT_STD template <bool _Test, class _Ty1, class _Ty2>\r\nusing conditional_t = typename conditional<_Test, _Ty1, _Ty2>::type;\r\n\r\n#ifdef __clang__\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_same_v = __is_same(_Ty1, _Ty2);\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_same : bool_constant<__is_same(_Ty1, _Ty2)> {};\r\n#else // ^^^ Clang / not Clang vvv\r\n_EXPORT_STD template <class, class>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_same_v = false; // determine whether arguments are the same type\r\ntemplate <class _Ty>\r\nconstexpr bool is_same_v<_Ty, _Ty> = true;\r\n\r\n_EXPORT_STD template <class _Ty1, class _Ty2>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_same : bool_constant<is_same_v<_Ty1, _Ty2>> {};\r\n#endif // ^^^ not Clang ^^^\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS remove_const { // remove top-level const qualifier\r\n    using type = _Ty;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct remove_const<const _Ty> {\r\n    using type = _Ty;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing remove_const_t = typename remove_const<_Ty>::type;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS remove_volatile { // remove top-level volatile qualifier\r\n    using type = _Ty;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct remove_volatile<volatile _Ty> {\r\n    using type = _Ty;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing remove_volatile_t = typename remove_volatile<_Ty>::type;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS remove_cv { // remove top-level const and volatile qualifiers\r\n    using type = _Ty;\r\n\r\n    template <template <class> class _Fn>\r\n    using _Apply = _Fn<_Ty>; // apply cv-qualifiers from the class template argument to _Fn<_Ty>\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct remove_cv<const _Ty> {\r\n    using type = _Ty;\r\n\r\n    template <template <class> class _Fn>\r\n    using _Apply = const _Fn<_Ty>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct remove_cv<volatile _Ty> {\r\n    using type = _Ty;\r\n\r\n    template <template <class> class _Fn>\r\n    using _Apply = volatile _Fn<_Ty>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct remove_cv<const volatile _Ty> {\r\n    using type = _Ty;\r\n\r\n    template <template <class> class _Fn>\r\n    using _Apply = const volatile _Fn<_Ty>;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing remove_cv_t = typename remove_cv<_Ty>::type;\r\n\r\ntemplate <bool _First_value, class _First, class... _Rest>\r\nstruct _Disjunction { // handle true trait or last trait\r\n    using type = _First;\r\n};\r\n\r\ntemplate <class _False, class _Next, class... _Rest>\r\nstruct _Disjunction<false, _False, _Next, _Rest...> { // first trait is false, try the next trait\r\n    using type = typename _Disjunction<static_cast<bool>(_Next::value), _Next, _Rest...>::type;\r\n};\r\n\r\n_EXPORT_STD template <class... _Traits>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS disjunction : false_type {}; // If _Traits is empty, false_type\r\n\r\ntemplate <class _First, class... _Rest>\r\nstruct disjunction<_First, _Rest...> : _Disjunction<static_cast<bool>(_First::value), _First, _Rest...>::type {\r\n    // the first true trait in _Traits, or the last trait if none are true\r\n};\r\n\r\n_EXPORT_STD template <class... _Traits>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool disjunction_v = disjunction<_Traits...>::value;\r\n\r\ntemplate <class _Ty, class... _Types>\r\nconstexpr bool _Is_any_of_v = // true if and only if _Ty is in _Types\r\n#if _HAS_CXX17\r\n    (is_same_v<_Ty, _Types> || ...);\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n    disjunction_v<is_same<_Ty, _Types>...>;\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n\r\n_NODISCARD constexpr bool _Is_constant_evaluated() noexcept { // Internal function for any standard mode\r\n    return __builtin_is_constant_evaluated();\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD _NODISCARD constexpr bool is_constant_evaluated() noexcept {\r\n    return __builtin_is_constant_evaluated();\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_integral_v = _Is_any_of_v<remove_cv_t<_Ty>, bool, char,\r\n    signed char, unsigned char, wchar_t,\r\n#ifdef __cpp_char8_t\r\n    char8_t,\r\n#endif // defined(__cpp_char8_t)\r\n    char16_t, char32_t, short, unsigned short, int, unsigned int, long, unsigned long, long long, unsigned long long>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_integral : bool_constant<is_integral_v<_Ty>> {};\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_nonbool_integral = is_integral_v<_Ty> && !is_same_v<remove_cv_t<_Ty>, bool>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_floating_point_v =\r\n    _Is_any_of_v<remove_cv_t<_Ty>, float, double, long double>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_floating_point : bool_constant<is_floating_point_v<_Ty>> {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_TYPE_TRAITS constexpr bool is_arithmetic_v = // determine whether _Ty is an arithmetic type\r\n    is_integral_v<_Ty> || is_floating_point_v<_Ty>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS is_arithmetic : bool_constant<is_arithmetic_v<_Ty>> {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS remove_reference {\r\n    using type                 = _Ty;\r\n    using _Const_thru_ref_type = const _Ty;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct remove_reference<_Ty&> {\r\n    using type                 = _Ty;\r\n    using _Const_thru_ref_type = const _Ty&;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct remove_reference<_Ty&&> {\r\n    using type                 = _Ty;\r\n    using _Const_thru_ref_type = const _Ty&&;\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nusing remove_reference_t = typename remove_reference<_Ty>::type;\r\n\r\ntemplate <class _Ty>\r\nusing _Const_thru_ref = typename remove_reference<_Ty>::_Const_thru_ref_type;\r\n\r\ntemplate <class _Ty>\r\nusing _Remove_cvref_t _MSVC_KNOWN_SEMANTICS = remove_cv_t<remove_reference_t<_Ty>>;\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty>\r\nusing remove_cvref_t = _Remove_cvref_t<_Ty>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_OF_TYPE_TRAITS remove_cvref {\r\n    using type = remove_cvref_t<_Ty>;\r\n};\r\n#endif // _HAS_CXX20\r\n\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"known_semantics\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XTR1COMMON_\r\n"
  },
  {
    "path": "stl/inc/xtree",
    "content": "// xtree internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XTREE_\r\n#define _XTREE_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#include <xmemory>\r\n\r\n#if _HAS_CXX17\r\n#include <xnode_handle.h>\r\n#endif // _HAS_CXX17\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n#if _HAS_CXX20\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_transparent_v = _Transparent<_Ty>;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ty, class = void>\r\nconstexpr bool _Is_transparent_v = false;\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_transparent_v<_Ty, void_t<typename _Ty::is_transparent>> = true;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\ntemplate <class _Mytree, class _Base = _Iterator_base0>\r\nclass _Tree_unchecked_const_iterator : public _Base {\r\npublic:\r\n    using iterator_category = bidirectional_iterator_tag;\r\n\r\n    using _Nodeptr        = typename _Mytree::_Nodeptr;\r\n    using value_type      = typename _Mytree::value_type;\r\n    using difference_type = typename _Mytree::difference_type;\r\n    using pointer         = typename _Mytree::const_pointer;\r\n    using reference       = const value_type&;\r\n\r\n    _Tree_unchecked_const_iterator() noexcept : _Ptr() {}\r\n\r\n    _Tree_unchecked_const_iterator(_Nodeptr _Pnode, const _Mytree* _Plist) noexcept : _Ptr(_Pnode) {\r\n        this->_Adopt(_Plist);\r\n    }\r\n\r\n    _NODISCARD reference operator*() const noexcept {\r\n        return _Ptr->_Myval;\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _Tree_unchecked_const_iterator& operator++() noexcept {\r\n        if (_Ptr->_Right->_Isnil) { // climb looking for right subtree\r\n            _Nodeptr _Pnode;\r\n            while (!(_Pnode = _Ptr->_Parent)->_Isnil && _Ptr == _Pnode->_Right) {\r\n                _Ptr = _Pnode; // ==> parent while right subtree\r\n            }\r\n\r\n            _Ptr = _Pnode; // ==> parent (head if end())\r\n        } else {\r\n            _Ptr = _Mytree::_Min(_Ptr->_Right); // ==> smallest of right subtree\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    _Tree_unchecked_const_iterator operator++(int) noexcept {\r\n        _Tree_unchecked_const_iterator _Tmp = *this;\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _Tree_unchecked_const_iterator& operator--() noexcept {\r\n        if (_Ptr->_Isnil) {\r\n            _Ptr = _Ptr->_Right; // end() ==> rightmost\r\n        } else if (_Ptr->_Left->_Isnil) { // climb looking for left subtree\r\n            _Nodeptr _Pnode;\r\n            while (!(_Pnode = _Ptr->_Parent)->_Isnil && _Ptr == _Pnode->_Left) {\r\n                _Ptr = _Pnode; // ==> parent while left subtree\r\n            }\r\n\r\n            if (!_Ptr->_Isnil) { // decrement non-begin()\r\n                _Ptr = _Pnode; // ==> parent if not head\r\n            }\r\n        } else {\r\n            _Ptr = _Mytree::_Max(_Ptr->_Left); // ==> largest of left subtree\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    _Tree_unchecked_const_iterator operator--(int) noexcept {\r\n        _Tree_unchecked_const_iterator _Tmp = *this;\r\n        --*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD bool operator==(const _Tree_unchecked_const_iterator& _Right) const noexcept {\r\n        return _Ptr == _Right._Ptr;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD bool operator!=(const _Tree_unchecked_const_iterator& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    _NODISCARD bool operator==(_Default_sentinel) const noexcept {\r\n        return !!_Ptr->_Isnil; // TRANSITION, avoid warning C4800:\r\n                               // \"Implicit conversion from 'char' to bool. Possible information loss\" (/Wall)\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD bool operator!=(_Default_sentinel) const noexcept {\r\n        return !_Ptr->_Isnil;\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    _Nodeptr _Ptr; // pointer to node\r\n};\r\n\r\ntemplate <class _Mytree>\r\nclass _Tree_unchecked_iterator : public _Tree_unchecked_const_iterator<_Mytree> {\r\npublic:\r\n    using _Mybase           = _Tree_unchecked_const_iterator<_Mytree>;\r\n    using iterator_category = bidirectional_iterator_tag;\r\n\r\n    using _Nodeptr        = typename _Mytree::_Nodeptr;\r\n    using value_type      = typename _Mytree::value_type;\r\n    using difference_type = typename _Mytree::difference_type;\r\n    using pointer         = typename _Mytree::pointer;\r\n    using reference       = value_type&;\r\n\r\n    using _Mybase::_Mybase;\r\n\r\n    _NODISCARD reference operator*() const noexcept {\r\n        return const_cast<reference>(_Mybase::operator*());\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _Tree_unchecked_iterator& operator++() noexcept {\r\n        _Mybase::operator++();\r\n        return *this;\r\n    }\r\n\r\n    _Tree_unchecked_iterator operator++(int) noexcept {\r\n        _Tree_unchecked_iterator _Tmp = *this;\r\n        _Mybase::operator++();\r\n        return _Tmp;\r\n    }\r\n\r\n    _Tree_unchecked_iterator& operator--() noexcept {\r\n        _Mybase::operator--();\r\n        return *this;\r\n    }\r\n\r\n    _Tree_unchecked_iterator operator--(int) noexcept {\r\n        _Tree_unchecked_iterator _Tmp = *this;\r\n        _Mybase::operator--();\r\n        return _Tmp;\r\n    }\r\n};\r\n\r\ntemplate <class _Mytree>\r\nclass _Tree_const_iterator : public _Tree_unchecked_const_iterator<_Mytree, _Iterator_base> {\r\npublic:\r\n    using _Mybase           = _Tree_unchecked_const_iterator<_Mytree, _Iterator_base>;\r\n    using iterator_category = bidirectional_iterator_tag;\r\n\r\n    using _Nodeptr        = typename _Mytree::_Nodeptr;\r\n    using value_type      = typename _Mytree::value_type;\r\n    using difference_type = typename _Mytree::difference_type;\r\n    using pointer         = typename _Mytree::const_pointer;\r\n    using reference       = const value_type&;\r\n\r\n    using _Mybase::_Mybase;\r\n\r\n    _NODISCARD reference operator*() const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        const auto _Mycont = static_cast<const _Mytree*>(this->_Getcont());\r\n        _STL_VERIFY(_Mycont, \"cannot dereference value-initialized map/set iterator\");\r\n        _STL_VERIFY(this->_Ptr != _Mycont->_Myhead, \"cannot dereference end map/set iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        return this->_Ptr->_Myval;\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _Tree_const_iterator& operator++() noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(this->_Getcont(), \"cannot increment value-initialized map/set iterator\");\r\n        _STL_VERIFY(!this->_Ptr->_Isnil, \"cannot increment end map/set iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        _Mybase::operator++();\r\n        return *this;\r\n    }\r\n\r\n    _Tree_const_iterator operator++(int) noexcept {\r\n        _Tree_const_iterator _Tmp = *this;\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _Tree_const_iterator& operator--() noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(this->_Getcont(), \"cannot decrement value-initialized map/set iterator\");\r\n        _Nodeptr _Ptrsav = this->_Ptr;\r\n        _Mybase::operator--();\r\n        _STL_VERIFY(_Ptrsav != this->_Ptr, \"cannot decrement begin map/set iterator\");\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 2 / _ITERATOR_DEBUG_LEVEL != 2 vvv\r\n        _Mybase::operator--();\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 2 ^^^\r\n\r\n        return *this;\r\n    }\r\n\r\n    _Tree_const_iterator operator--(int) noexcept {\r\n        _Tree_const_iterator _Tmp = *this;\r\n        --*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD bool operator==(const _Tree_const_iterator& _Right) const noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(this->_Getcont() == _Right._Getcont(), \"map/set iterators incompatible\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        return this->_Ptr == _Right._Ptr;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    _NODISCARD bool operator!=(const _Tree_const_iterator& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    friend void _Verify_range(const _Tree_const_iterator& _First, const _Tree_const_iterator& _Last) noexcept {\r\n        _STL_VERIFY(_First._Getcont() == _Last._Getcont(), \"map/set iterators in range are from different containers\");\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n    using _Prevent_inheriting_unwrap = _Tree_const_iterator;\r\n\r\n    _NODISCARD _Tree_unchecked_const_iterator<_Mytree> _Unwrapped() const noexcept {\r\n        return _Tree_unchecked_const_iterator<_Mytree>(this->_Ptr, static_cast<const _Mytree*>(this->_Getcont()));\r\n    }\r\n\r\n    void _Seek_to(const _Tree_unchecked_const_iterator<_Mytree> _It) noexcept {\r\n        this->_Ptr = _It._Ptr;\r\n    }\r\n};\r\n\r\ntemplate <class _Mytree>\r\nclass _Tree_iterator : public _Tree_const_iterator<_Mytree> {\r\npublic:\r\n    using _Mybase           = _Tree_const_iterator<_Mytree>;\r\n    using iterator_category = bidirectional_iterator_tag;\r\n\r\n    using _Nodeptr        = typename _Mytree::_Nodeptr;\r\n    using value_type      = typename _Mytree::value_type;\r\n    using difference_type = typename _Mytree::difference_type;\r\n\r\n    using pointer   = typename _Mytree::pointer;\r\n    using reference = value_type&;\r\n\r\n    using _Mybase::_Mybase;\r\n\r\n    _NODISCARD reference operator*() const noexcept {\r\n        return const_cast<reference>(_Mybase::operator*());\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const noexcept {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _Tree_iterator& operator++() noexcept {\r\n        _Mybase::operator++();\r\n        return *this;\r\n    }\r\n\r\n    _Tree_iterator operator++(int) noexcept {\r\n        _Tree_iterator _Tmp = *this;\r\n        _Mybase::operator++();\r\n        return _Tmp;\r\n    }\r\n\r\n    _Tree_iterator& operator--() noexcept {\r\n        _Mybase::operator--();\r\n        return *this;\r\n    }\r\n\r\n    _Tree_iterator operator--(int) noexcept {\r\n        _Tree_iterator _Tmp = *this;\r\n        _Mybase::operator--();\r\n        return _Tmp;\r\n    }\r\n\r\n    using _Prevent_inheriting_unwrap = _Tree_iterator;\r\n\r\n    _NODISCARD _Tree_unchecked_iterator<_Mytree> _Unwrapped() const noexcept {\r\n        return _Tree_unchecked_iterator<_Mytree>(this->_Ptr, static_cast<const _Mytree*>(this->_Getcont()));\r\n    }\r\n};\r\n\r\ntemplate <class _Value_type, class _Size_type, class _Difference_type, class _Pointer, class _Const_pointer,\r\n    class _Nodeptr_type>\r\nstruct _Tree_iter_types {\r\n    using value_type      = _Value_type;\r\n    using size_type       = _Size_type;\r\n    using difference_type = _Difference_type;\r\n    using pointer         = _Pointer;\r\n    using const_pointer   = _Const_pointer;\r\n    using _Nodeptr        = _Nodeptr_type;\r\n};\r\n\r\ntemplate <class _Value_type, class _Voidptr>\r\nstruct _Tree_node {\r\n    using _Nodeptr   = _Rebind_pointer_t<_Voidptr, _Tree_node>;\r\n    using value_type = _Value_type;\r\n    _Nodeptr _Left; // left subtree, or smallest element if head\r\n    _Nodeptr _Parent; // parent, or root of tree if head\r\n    _Nodeptr _Right; // right subtree, or largest element if head\r\n    char _Color; // _Red or _Black, _Black if head\r\n    char _Isnil; // true only if head (also nil) node; TRANSITION, ABI, should be bool\r\n    value_type _Myval = // the stored value, unused if head\r\n        _Returns_exactly<value_type>(); // fake a viable constructor to workaround GH-2749\r\n\r\n    enum _Redbl { // colors for link to parent\r\n        _Red,\r\n        _Black\r\n    };\r\n\r\n    _Tree_node()                             = default;\r\n    _Tree_node(const _Tree_node&)            = delete;\r\n    _Tree_node& operator=(const _Tree_node&) = delete;\r\n\r\n    template <class _Alloc>\r\n    static _Nodeptr _Buyheadnode(_Alloc& _Al) {\r\n        static_assert(is_same_v<typename _Alloc::value_type, _Tree_node>, \"Bad _Buyheadnode call\");\r\n        const auto _Pnode = _Al.allocate(1);\r\n        _Construct_in_place(_Pnode->_Left, _Pnode);\r\n        _Construct_in_place(_Pnode->_Parent, _Pnode);\r\n        _Construct_in_place(_Pnode->_Right, _Pnode);\r\n        _Pnode->_Color = _Black;\r\n        _Pnode->_Isnil = true;\r\n        return _Pnode;\r\n    }\r\n\r\n    template <class _Alloc, class... _Valty>\r\n    static _Nodeptr _Buynode(_Alloc& _Al, _Nodeptr _Myhead, _Valty&&... _Val) {\r\n        // allocate a node with defaults and set links and value\r\n        static_assert(is_same_v<typename _Alloc::value_type, _Tree_node>, \"Bad _Buynode call\");\r\n        _Alloc_construct_ptr<_Alloc> _Newnode(_Al);\r\n        _Newnode._Allocate();\r\n        allocator_traits<_Alloc>::construct(_Al, _STD addressof(_Newnode._Ptr->_Myval), _STD forward<_Valty>(_Val)...);\r\n        _Construct_in_place(_Newnode._Ptr->_Left, _Myhead);\r\n        _Construct_in_place(_Newnode._Ptr->_Parent, _Myhead);\r\n        _Construct_in_place(_Newnode._Ptr->_Right, _Myhead);\r\n        _Newnode._Ptr->_Color = _Red;\r\n        _Newnode._Ptr->_Isnil = false;\r\n        return _Newnode._Release();\r\n    }\r\n\r\n    template <class _Alloc>\r\n    static void _Freenode0(_Alloc& _Al, _Nodeptr _Ptr) noexcept {\r\n        static_assert(is_same_v<typename _Alloc::value_type, _Tree_node>, \"Bad _Freenode0 call\");\r\n        _Destroy_in_place(_Ptr->_Left);\r\n        _Destroy_in_place(_Ptr->_Parent);\r\n        _Destroy_in_place(_Ptr->_Right);\r\n        allocator_traits<_Alloc>::deallocate(_Al, _Ptr, 1);\r\n    }\r\n\r\n    template <class _Alloc>\r\n    static void _Freenode(_Alloc& _Al, _Nodeptr _Ptr) noexcept {\r\n        static_assert(is_same_v<typename _Alloc::value_type, _Tree_node>, \"Bad _Freenode call\");\r\n        allocator_traits<_Alloc>::destroy(_Al, _STD addressof(_Ptr->_Myval));\r\n        _Freenode0(_Al, _Ptr);\r\n    }\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Tree_simple_types : _Simple_types<_Ty> {\r\n    using _Node    = _Tree_node<_Ty, void*>;\r\n    using _Nodeptr = _Node*;\r\n};\r\n\r\nenum class _Tree_child {\r\n    _Right, // perf note: compare with _Right rather than _Left where possible for comparison with zero\r\n    _Left,\r\n    _Unused // indicates that tree child should never be used for insertion\r\n};\r\n\r\ntemplate <class _Nodeptr>\r\nstruct _Tree_id {\r\n    _Nodeptr _Parent; // the leaf node under which a new node should be inserted\r\n    _Tree_child _Child;\r\n};\r\n\r\ntemplate <class _Nodeptr>\r\nstruct _Tree_find_result {\r\n    _Tree_id<_Nodeptr> _Location;\r\n    _Nodeptr _Bound;\r\n};\r\n\r\ntemplate <class _Nodeptr>\r\nstruct _Tree_find_hint_result {\r\n    _Tree_id<_Nodeptr> _Location;\r\n    bool _Duplicate;\r\n};\r\n\r\n[[noreturn]] inline void _Throw_tree_length_error() {\r\n    _Xlength_error(\"map/set too long\");\r\n}\r\n\r\ntemplate <class _Val_types>\r\nclass _Tree_val : public _Container_base {\r\npublic:\r\n    using _Nodeptr = typename _Val_types::_Nodeptr;\r\n\r\n    using value_type      = typename _Val_types::value_type;\r\n    using size_type       = typename _Val_types::size_type;\r\n    using difference_type = typename _Val_types::difference_type;\r\n    using pointer         = typename _Val_types::pointer;\r\n    using const_pointer   = typename _Val_types::const_pointer;\r\n    using reference       = value_type&;\r\n    using const_reference = const value_type&;\r\n\r\n    using _Unchecked_const_iterator = _Tree_unchecked_const_iterator<_Tree_val>;\r\n    using const_iterator            = _Tree_const_iterator<_Tree_val>;\r\n\r\n    template <class _Alnode>\r\n    struct _NODISCARD _Erase_tree_and_orphan_guard {\r\n        _Tree_val* _Val_ptr;\r\n        _Alnode& _Al;\r\n        _Nodeptr _New_root;\r\n\r\n        _Erase_tree_and_orphan_guard& operator=(const _Erase_tree_and_orphan_guard&) = delete;\r\n        ~_Erase_tree_and_orphan_guard() noexcept {\r\n            if (_Val_ptr != nullptr) {\r\n                _Val_ptr->_Erase_tree_and_orphan(_Al, _New_root); // subtree copy failed, bail out\r\n            }\r\n        }\r\n    };\r\n\r\n    _Tree_val() noexcept : _Myhead(), _Mysize(0) {}\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n    ~_Tree_val() noexcept {\r\n        if constexpr (is_pointer_v<_Nodeptr>) {\r\n            const auto _Tombstone{reinterpret_cast<_Nodeptr>(_MSVC_STL_UINTPTR_TOMBSTONE_VALUE)};\r\n            _Myhead = _Tombstone;\r\n            _Mysize = 0;\r\n        }\r\n    }\r\n#endif // _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n\r\n    enum _Redbl { // colors for link to parent\r\n        _Red,\r\n        _Black\r\n    };\r\n\r\n    static _Nodeptr _Max(_Nodeptr _Pnode) noexcept { // return rightmost node in subtree at _Pnode\r\n        while (!_Pnode->_Right->_Isnil) {\r\n            _Pnode = _Pnode->_Right;\r\n        }\r\n\r\n        return _Pnode;\r\n    }\r\n\r\n    static _Nodeptr _Min(_Nodeptr _Pnode) noexcept { // return leftmost node in subtree at _Pnode\r\n        while (!_Pnode->_Left->_Isnil) {\r\n            _Pnode = _Pnode->_Left;\r\n        }\r\n\r\n        return _Pnode;\r\n    }\r\n\r\n    void _Lrotate(_Nodeptr _Wherenode) noexcept { // promote right node to root of subtree\r\n        _Nodeptr _Pnode    = _Wherenode->_Right;\r\n        _Wherenode->_Right = _Pnode->_Left;\r\n\r\n        if (!_Pnode->_Left->_Isnil) {\r\n            _Pnode->_Left->_Parent = _Wherenode;\r\n        }\r\n\r\n        _Pnode->_Parent = _Wherenode->_Parent;\r\n\r\n        if (_Wherenode == _Myhead->_Parent) {\r\n            _Myhead->_Parent = _Pnode;\r\n        } else if (_Wherenode == _Wherenode->_Parent->_Left) {\r\n            _Wherenode->_Parent->_Left = _Pnode;\r\n        } else {\r\n            _Wherenode->_Parent->_Right = _Pnode;\r\n        }\r\n\r\n        _Pnode->_Left       = _Wherenode;\r\n        _Wherenode->_Parent = _Pnode;\r\n    }\r\n\r\n    void _Rrotate(_Nodeptr _Wherenode) noexcept { // promote left node to root of subtree\r\n        _Nodeptr _Pnode   = _Wherenode->_Left;\r\n        _Wherenode->_Left = _Pnode->_Right;\r\n\r\n        if (!_Pnode->_Right->_Isnil) {\r\n            _Pnode->_Right->_Parent = _Wherenode;\r\n        }\r\n\r\n        _Pnode->_Parent = _Wherenode->_Parent;\r\n\r\n        if (_Wherenode == _Myhead->_Parent) {\r\n            _Myhead->_Parent = _Pnode;\r\n        } else if (_Wherenode == _Wherenode->_Parent->_Right) {\r\n            _Wherenode->_Parent->_Right = _Pnode;\r\n        } else {\r\n            _Wherenode->_Parent->_Left = _Pnode;\r\n        }\r\n\r\n        _Pnode->_Right      = _Wherenode;\r\n        _Wherenode->_Parent = _Pnode;\r\n    }\r\n\r\n    _Nodeptr _Extract(_Unchecked_const_iterator _Where) noexcept {\r\n        _Nodeptr _Erasednode = _Where._Ptr; // node to erase\r\n        ++_Where; // save successor iterator for return\r\n\r\n        _Nodeptr _Fixnode; // the node to recolor as needed\r\n        _Nodeptr _Fixnodeparent; // parent of _Fixnode (which may be nil)\r\n        _Nodeptr _Pnode = _Erasednode;\r\n\r\n        if (_Pnode->_Left->_Isnil) {\r\n            _Fixnode = _Pnode->_Right; // stitch up right subtree\r\n        } else if (_Pnode->_Right->_Isnil) {\r\n            _Fixnode = _Pnode->_Left; // stitch up left subtree\r\n        } else { // two subtrees, must lift successor node to replace erased\r\n            _Pnode   = _Where._Ptr; // _Pnode is successor node\r\n            _Fixnode = _Pnode->_Right; // _Fixnode is only subtree\r\n        }\r\n\r\n        if (_Pnode == _Erasednode) { // at most one subtree, relink it\r\n            _Fixnodeparent = _Erasednode->_Parent;\r\n            if (!_Fixnode->_Isnil) {\r\n                _Fixnode->_Parent = _Fixnodeparent; // link up\r\n            }\r\n\r\n            if (_Myhead->_Parent == _Erasednode) {\r\n                _Myhead->_Parent = _Fixnode; // link down from root\r\n            } else if (_Fixnodeparent->_Left == _Erasednode) {\r\n                _Fixnodeparent->_Left = _Fixnode; // link down to left\r\n            } else {\r\n                _Fixnodeparent->_Right = _Fixnode; // link down to right\r\n            }\r\n\r\n            if (_Myhead->_Left == _Erasednode) {\r\n                _Myhead->_Left = _Fixnode->_Isnil ? _Fixnodeparent // smallest is parent of erased node\r\n                                                  : _Min(_Fixnode); // smallest in relinked subtree\r\n            }\r\n\r\n            if (_Myhead->_Right == _Erasednode) {\r\n                _Myhead->_Right = _Fixnode->_Isnil ? _Fixnodeparent // largest is parent of erased node\r\n                                                   : _Max(_Fixnode); // largest in relinked subtree\r\n            }\r\n        } else { // erased has two subtrees, _Pnode is successor to erased\r\n            _Erasednode->_Left->_Parent = _Pnode; // link left up\r\n            _Pnode->_Left               = _Erasednode->_Left; // link successor down\r\n\r\n            if (_Pnode == _Erasednode->_Right) {\r\n                _Fixnodeparent = _Pnode; // successor is next to erased\r\n            } else { // successor further down, link in place of erased\r\n                _Fixnodeparent = _Pnode->_Parent; // parent is successor's\r\n                if (!_Fixnode->_Isnil) {\r\n                    _Fixnode->_Parent = _Fixnodeparent; // link fix up\r\n                }\r\n\r\n                _Fixnodeparent->_Left        = _Fixnode; // link fix down\r\n                _Pnode->_Right               = _Erasednode->_Right; // link next down\r\n                _Erasednode->_Right->_Parent = _Pnode; // right up\r\n            }\r\n\r\n            if (_Myhead->_Parent == _Erasednode) {\r\n                _Myhead->_Parent = _Pnode; // link down from root\r\n            } else if (_Erasednode->_Parent->_Left == _Erasednode) {\r\n                _Erasednode->_Parent->_Left = _Pnode; // link down to left\r\n            } else {\r\n                _Erasednode->_Parent->_Right = _Pnode; // link down to right\r\n            }\r\n\r\n            _Pnode->_Parent = _Erasednode->_Parent; // link successor up\r\n            _STD swap(_Pnode->_Color, _Erasednode->_Color); // recolor it\r\n        }\r\n\r\n        if (_Erasednode->_Color == _Black) { // erasing black link, must recolor/rebalance tree\r\n            for (; _Fixnode != _Myhead->_Parent && _Fixnode->_Color == _Black; _Fixnodeparent = _Fixnode->_Parent) {\r\n                if (_Fixnode == _Fixnodeparent->_Left) { // fixup left subtree\r\n                    _Pnode = _Fixnodeparent->_Right;\r\n                    if (_Pnode->_Color == _Red) { // rotate red up from right subtree\r\n                        _Pnode->_Color         = _Black;\r\n                        _Fixnodeparent->_Color = _Red;\r\n                        _Lrotate(_Fixnodeparent);\r\n                        _Pnode = _Fixnodeparent->_Right;\r\n                    }\r\n\r\n                    if (_Pnode->_Isnil) {\r\n                        _Fixnode = _Fixnodeparent; // shouldn't happen\r\n                    } else if (_Pnode->_Left->_Color == _Black\r\n                               && _Pnode->_Right->_Color == _Black) { // redden right subtree with black children\r\n                        _Pnode->_Color = _Red;\r\n                        _Fixnode       = _Fixnodeparent;\r\n                    } else { // must rearrange right subtree\r\n                        if (_Pnode->_Right->_Color == _Black) { // rotate red up from left sub-subtree\r\n                            _Pnode->_Left->_Color = _Black;\r\n                            _Pnode->_Color        = _Red;\r\n                            _Rrotate(_Pnode);\r\n                            _Pnode = _Fixnodeparent->_Right;\r\n                        }\r\n\r\n                        _Pnode->_Color         = _Fixnodeparent->_Color;\r\n                        _Fixnodeparent->_Color = _Black;\r\n                        _Pnode->_Right->_Color = _Black;\r\n                        _Lrotate(_Fixnodeparent);\r\n                        break; // tree now recolored/rebalanced\r\n                    }\r\n                } else { // fixup right subtree\r\n                    _Pnode = _Fixnodeparent->_Left;\r\n                    if (_Pnode->_Color == _Red) { // rotate red up from left subtree\r\n                        _Pnode->_Color         = _Black;\r\n                        _Fixnodeparent->_Color = _Red;\r\n                        _Rrotate(_Fixnodeparent);\r\n                        _Pnode = _Fixnodeparent->_Left;\r\n                    }\r\n\r\n                    if (_Pnode->_Isnil) {\r\n                        _Fixnode = _Fixnodeparent; // shouldn't happen\r\n                    } else if (_Pnode->_Right->_Color == _Black\r\n                               && _Pnode->_Left->_Color == _Black) { // redden left subtree with black children\r\n                        _Pnode->_Color = _Red;\r\n                        _Fixnode       = _Fixnodeparent;\r\n                    } else { // must rearrange left subtree\r\n                        if (_Pnode->_Left->_Color == _Black) { // rotate red up from right sub-subtree\r\n                            _Pnode->_Right->_Color = _Black;\r\n                            _Pnode->_Color         = _Red;\r\n                            _Lrotate(_Pnode);\r\n                            _Pnode = _Fixnodeparent->_Left;\r\n                        }\r\n\r\n                        _Pnode->_Color         = _Fixnodeparent->_Color;\r\n                        _Fixnodeparent->_Color = _Black;\r\n                        _Pnode->_Left->_Color  = _Black;\r\n                        _Rrotate(_Fixnodeparent);\r\n                        break; // tree now recolored/rebalanced\r\n                    }\r\n                }\r\n            }\r\n\r\n            _Fixnode->_Color = _Black; // stopping node is black\r\n        }\r\n\r\n        if (0 < _Mysize) {\r\n            --_Mysize;\r\n        }\r\n\r\n        return _Erasednode;\r\n    }\r\n\r\n    _Nodeptr _Insert_node(const _Tree_id<_Nodeptr> _Loc, const _Nodeptr _Newnode) noexcept {\r\n        ++_Mysize;\r\n        const auto _Head  = _Myhead;\r\n        _Newnode->_Parent = _Loc._Parent;\r\n        if (_Loc._Parent == _Head) { // first node in tree, just set head values\r\n            _Head->_Left     = _Newnode;\r\n            _Head->_Parent   = _Newnode;\r\n            _Head->_Right    = _Newnode;\r\n            _Newnode->_Color = _Black; // the root is black\r\n            return _Newnode;\r\n        }\r\n\r\n        _STL_INTERNAL_CHECK(_Loc._Child != _Tree_child::_Unused);\r\n        if (_Loc._Child == _Tree_child::_Right) { // add to right of _Loc._Parent\r\n            _STL_INTERNAL_CHECK(_Loc._Parent->_Right->_Isnil);\r\n            _Loc._Parent->_Right = _Newnode;\r\n            if (_Loc._Parent == _Head->_Right) { // remember rightmost node\r\n                _Head->_Right = _Newnode;\r\n            }\r\n        } else { // add to left of _Loc._Parent\r\n            _STL_INTERNAL_CHECK(_Loc._Parent->_Left->_Isnil);\r\n            _Loc._Parent->_Left = _Newnode;\r\n            if (_Loc._Parent == _Head->_Left) { // remember leftmost node\r\n                _Head->_Left = _Newnode;\r\n            }\r\n        }\r\n\r\n        for (_Nodeptr _Pnode = _Newnode; _Pnode->_Parent->_Color == _Red;) {\r\n            if (_Pnode->_Parent == _Pnode->_Parent->_Parent->_Left) { // fixup red-red in left subtree\r\n                const auto _Parent_sibling = _Pnode->_Parent->_Parent->_Right;\r\n                if (_Parent_sibling->_Color == _Red) { // parent's sibling has two red children, blacken both\r\n                    _Pnode->_Parent->_Color          = _Black;\r\n                    _Parent_sibling->_Color          = _Black;\r\n                    _Pnode->_Parent->_Parent->_Color = _Red;\r\n                    _Pnode                           = _Pnode->_Parent->_Parent;\r\n                } else { // parent's sibling has red and black children\r\n                    if (_Pnode == _Pnode->_Parent->_Right) { // rotate right child to left\r\n                        _Pnode = _Pnode->_Parent;\r\n                        _Lrotate(_Pnode);\r\n                    }\r\n\r\n                    _Pnode->_Parent->_Color          = _Black; // propagate red up\r\n                    _Pnode->_Parent->_Parent->_Color = _Red;\r\n                    _Rrotate(_Pnode->_Parent->_Parent);\r\n                }\r\n            } else { // fixup red-red in right subtree\r\n                const auto _Parent_sibling = _Pnode->_Parent->_Parent->_Left;\r\n                if (_Parent_sibling->_Color == _Red) { // parent's sibling has two red children, blacken both\r\n                    _Pnode->_Parent->_Color          = _Black;\r\n                    _Parent_sibling->_Color          = _Black;\r\n                    _Pnode->_Parent->_Parent->_Color = _Red;\r\n                    _Pnode                           = _Pnode->_Parent->_Parent;\r\n                } else { // parent's sibling has red and black children\r\n                    if (_Pnode == _Pnode->_Parent->_Left) { // rotate left child to right\r\n                        _Pnode = _Pnode->_Parent;\r\n                        _Rrotate(_Pnode);\r\n                    }\r\n\r\n                    _Pnode->_Parent->_Color          = _Black; // propagate red up\r\n                    _Pnode->_Parent->_Parent->_Color = _Red;\r\n                    _Lrotate(_Pnode->_Parent->_Parent);\r\n                }\r\n            }\r\n        }\r\n\r\n        _Head->_Parent->_Color = _Black; // root is always black\r\n        return _Newnode;\r\n    }\r\n\r\n    void _Orphan_ptr(const _Nodeptr _Ptr) noexcept {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        _Iterator_base12** _Pnext = &this->_Myproxy->_Myfirstiter;\r\n        while (*_Pnext) {\r\n            const auto _Pnextptr = static_cast<const_iterator&>(**_Pnext)._Ptr;\r\n            if (_Pnextptr == _Myhead || (_Ptr != nullptr && _Pnextptr != _Ptr)) {\r\n                _Pnext = &(*_Pnext)->_Mynextiter;\r\n            } else { // orphan the iterator\r\n                (*_Pnext)->_Myproxy = nullptr;\r\n                *_Pnext             = (*_Pnext)->_Mynextiter;\r\n            }\r\n        }\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 2 / _ITERATOR_DEBUG_LEVEL != 2 vvv\r\n        (void) _Ptr;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 2 ^^^\r\n    }\r\n\r\n    template <class _Alnode>\r\n    void _Erase_tree_and_orphan(_Alnode& _Al, _Nodeptr _Rootnode) noexcept {\r\n        while (!_Rootnode->_Isnil) { // free subtrees, then node\r\n            _Erase_tree_and_orphan(_Al, _Rootnode->_Right);\r\n            auto _To_delete = _STD exchange(_Rootnode, _Rootnode->_Left);\r\n            _Orphan_ptr(_To_delete);\r\n            _Alnode::value_type::_Freenode(_Al, _To_delete);\r\n        }\r\n    }\r\n\r\n    template <class _Alnode>\r\n    void _Erase_tree(_Alnode& _Al, _Nodeptr _Rootnode) noexcept {\r\n        while (!_Rootnode->_Isnil) { // free subtrees, then node\r\n            _Erase_tree(_Al, _Rootnode->_Right);\r\n            _Alnode::value_type::_Freenode(_Al, _STD exchange(_Rootnode, _Rootnode->_Left));\r\n        }\r\n    }\r\n\r\n    template <class _Alnode>\r\n    void _Erase_head(_Alnode& _Al) noexcept {\r\n        this->_Orphan_all();\r\n        _Erase_tree(_Al, _Myhead->_Parent);\r\n        _Alnode::value_type::_Freenode0(_Al, _Myhead);\r\n    }\r\n\r\n    _Nodeptr _Myhead; // pointer to head node\r\n    size_type _Mysize; // number of elements\r\n};\r\n\r\ntemplate <class _Alnode, class _Scary_val>\r\nstruct _Tree_head_scoped_ptr { // temporary storage for allocated node pointers to ensure exception safety\r\n    _Alnode& _Al;\r\n    _Scary_val* _Mycont;\r\n\r\n    _Tree_head_scoped_ptr(_Alnode& _Al_, _Scary_val& _Mycont_) : _Al(_Al_), _Mycont(_STD addressof(_Mycont_)) {\r\n        _Mycont->_Myhead = _Alnode::value_type::_Buyheadnode(_Al);\r\n    }\r\n\r\n    void _Release() noexcept {\r\n        _Mycont = nullptr;\r\n    }\r\n\r\n    ~_Tree_head_scoped_ptr() {\r\n        if (_Mycont) {\r\n            _Mycont->_Erase_head(_Al);\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Alnode>\r\nstruct _Tree_temp_node_alloc : _Alloc_construct_ptr<_Alnode> {\r\n    // EH helper for _Tree_temp_node\r\n    explicit _Tree_temp_node_alloc(_Alnode& _Al_) : _Alloc_construct_ptr<_Alnode>(_Al_) {\r\n        _Alloc_construct_ptr<_Alnode>::_Allocate();\r\n    }\r\n\r\n    _Tree_temp_node_alloc(const _Tree_temp_node_alloc&)            = delete;\r\n    _Tree_temp_node_alloc& operator=(const _Tree_temp_node_alloc&) = delete;\r\n};\r\n\r\ntemplate <class _Alnode>\r\nstruct _Tree_temp_node : _Tree_temp_node_alloc<_Alnode> {\r\n    // temporarily stores a constructed tree node\r\n    using _Alnode_traits = allocator_traits<_Alnode>;\r\n    using _Nodeptr       = typename _Alnode_traits::pointer;\r\n\r\n    enum _Redbl { // colors for link to parent\r\n        _Red,\r\n        _Black\r\n    };\r\n\r\n    template <class... _Valtys>\r\n    explicit _Tree_temp_node(_Alnode& _Al_, _Nodeptr _Myhead, _Valtys&&... _Vals)\r\n        : _Tree_temp_node_alloc<_Alnode>(_Al_) {\r\n        _Alnode_traits::construct(this->_Al, _STD addressof(this->_Ptr->_Myval), _STD forward<_Valtys>(_Vals)...);\r\n        _Construct_in_place(this->_Ptr->_Left, _Myhead);\r\n        _Construct_in_place(this->_Ptr->_Parent, _Myhead);\r\n        _Construct_in_place(this->_Ptr->_Right, _Myhead);\r\n        this->_Ptr->_Color = _Red;\r\n        this->_Ptr->_Isnil = false;\r\n    }\r\n\r\n    _Tree_temp_node(const _Tree_temp_node&)            = delete;\r\n    _Tree_temp_node& operator=(const _Tree_temp_node&) = delete;\r\n\r\n    ~_Tree_temp_node() {\r\n        if (this->_Ptr) {\r\n            _Destroy_in_place(this->_Ptr->_Left);\r\n            _Destroy_in_place(this->_Ptr->_Parent);\r\n            _Destroy_in_place(this->_Ptr->_Right);\r\n            _Alnode_traits::destroy(this->_Al, _STD addressof(this->_Ptr->_Myval));\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class _Traits>\r\nclass _Tree { // ordered red-black tree for map/multimap/set/multiset\r\npublic:\r\n    using key_type       = typename _Traits::key_type;\r\n    using value_type     = typename _Traits::value_type;\r\n    using allocator_type = typename _Traits::allocator_type;\r\n\r\nprotected:\r\n    using _Alty          = _Rebind_alloc_t<allocator_type, value_type>;\r\n    using _Alty_traits   = allocator_traits<_Alty>;\r\n    using _Node          = _Tree_node<value_type, typename _Alty_traits::void_pointer>;\r\n    using _Alnode        = _Rebind_alloc_t<allocator_type, _Node>;\r\n    using _Alnode_traits = allocator_traits<_Alnode>;\r\n    using _Nodeptr       = typename _Alnode_traits::pointer;\r\n\r\n    using _Scary_val = _Tree_val<conditional_t<_Is_simple_alloc_v<_Alnode>, _Tree_simple_types<value_type>,\r\n        _Tree_iter_types<value_type, typename _Alty_traits::size_type, typename _Alty_traits::difference_type,\r\n            typename _Alty_traits::pointer, typename _Alty_traits::const_pointer, _Nodeptr>>>;\r\n\r\n    static constexpr bool _Multi  = _Traits::_Multi;\r\n    static constexpr bool _Is_set = is_same_v<key_type, value_type>;\r\n\r\n    enum _Redbl { // colors for link to parent\r\n        _Red,\r\n        _Black\r\n    };\r\n\r\npublic:\r\n    using value_compare = typename _Traits::value_compare;\r\n\r\n    using key_compare = typename _Traits::key_compare;\r\n\r\n    using size_type       = typename _Alty_traits::size_type;\r\n    using difference_type = typename _Alty_traits::difference_type;\r\n    using pointer         = typename _Alty_traits::pointer;\r\n    using const_pointer   = typename _Alty_traits::const_pointer;\r\n    using reference       = value_type&;\r\n    using const_reference = const value_type&;\r\n\r\n    using iterator       = conditional_t<_Is_set, _Tree_const_iterator<_Scary_val>, _Tree_iterator<_Scary_val>>;\r\n    using const_iterator = _Tree_const_iterator<_Scary_val>;\r\n    using _Unchecked_iterator =\r\n        conditional_t<_Is_set, _Tree_unchecked_const_iterator<_Scary_val>, _Tree_unchecked_iterator<_Scary_val>>;\r\n    using _Unchecked_const_iterator = _Tree_unchecked_const_iterator<_Scary_val>;\r\n\r\n    using reverse_iterator       = _STD reverse_iterator<iterator>;\r\n    using const_reverse_iterator = _STD reverse_iterator<const_iterator>;\r\n\r\n    enum class _Strategy : bool {\r\n        _Copy,\r\n        _Move,\r\n    };\r\n\r\n    _Tree(const key_compare& _Parg) : _Mypair(_One_then_variadic_args_t{}, _Parg, _Zero_then_variadic_args_t{}) {\r\n        _Alloc_sentinel_and_proxy();\r\n    }\r\n\r\n    _Tree(const key_compare& _Parg, const allocator_type& _Al)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Parg, _One_then_variadic_args_t{}, _Al) {\r\n        _Alloc_sentinel_and_proxy();\r\n    }\r\n\r\n    template <class _Any_alloc>\r\n    _Tree(const _Tree& _Right, _Any_alloc&& _Al)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Right.key_comp(), _One_then_variadic_args_t{},\r\n              _STD forward<_Any_alloc>(_Al)) {\r\n        auto _Alproxy     = _STD _Get_proxy_allocator(_Getal());\r\n        const auto _Scary = _Get_scary();\r\n        _Container_proxy_ptr<_Alty> _Proxy(_Alproxy, *_Scary);\r\n        _Tree_head_scoped_ptr<_Alnode, _Scary_val> _Sentinel(_Getal(), *_Scary);\r\n        _Copy<_Strategy::_Copy>(_Right);\r\n        _Sentinel._Release();\r\n        _Proxy._Release();\r\n    }\r\n\r\n    _Tree(_Tree&& _Right)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Right.key_comp(), // intentionally copy comparator, see LWG-2227\r\n              _One_then_variadic_args_t{}, _STD move(_Right._Getal())) {\r\n        _Alloc_sentinel_and_proxy();\r\n        _Swap_val_excluding_comp(_Right);\r\n    }\r\n\r\n    _Tree(_Tree&& _Right, const allocator_type& _Al)\r\n        : _Mypair(_One_then_variadic_args_t{}, _Right.key_comp(), // intentionally copy comparator, see LWG-2227\r\n              _One_then_variadic_args_t{}, _Al) {\r\n        if constexpr (!_Alnode_traits::is_always_equal::value) {\r\n            if (_Getal() != _Right._Getal()) {\r\n                auto _Alproxy     = _STD _Get_proxy_allocator(_Getal());\r\n                const auto _Scary = _Get_scary();\r\n                _Container_proxy_ptr<_Alty> _Proxy(_Alproxy, *_Scary);\r\n                _Tree_head_scoped_ptr<_Alnode, _Scary_val> _Sentinel(_Getal(), *_Scary);\r\n                _Copy<_Strategy::_Move>(_Right);\r\n                _Sentinel._Release();\r\n                _Proxy._Release();\r\n                return;\r\n            }\r\n        }\r\n\r\n        _Alloc_sentinel_and_proxy();\r\n        _Swap_val_excluding_comp(_Right);\r\n    }\r\n\r\n    _Tree& operator=(_Tree&& _Right)\r\n        noexcept(_Alnode_traits::is_always_equal::value && is_nothrow_move_assignable_v<key_compare>) {\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n        auto& _Al                 = _Getal();\r\n        auto& _Right_al           = _Right._Getal();\r\n        constexpr auto _Pocma_val = _Choose_pocma_v<_Alnode>;\r\n        if constexpr (_Pocma_val == _Pocma_values::_Propagate_allocators) {\r\n            if (_Al != _Right_al) {\r\n                clear();\r\n                _Getcomp()          = _Right._Getcomp(); // intentionally copy comparator, see LWG-2227\r\n                auto _Alproxy       = _STD _Get_proxy_allocator(_Al);\r\n                auto _Right_alproxy = _STD _Get_proxy_allocator(_Right_al);\r\n                _Container_proxy_ptr<_Alty> _Proxy(_Right_alproxy, _Leave_proxy_unbound{});\r\n                const auto _Scary       = _Get_scary();\r\n                const auto _Right_scary = _Right._Get_scary();\r\n                const auto _Newhead     = _STD exchange(_Right_scary->_Myhead, _Node::_Buyheadnode(_Right_al));\r\n                const auto _Newsize     = _STD exchange(_Right_scary->_Mysize, size_type{0});\r\n                _Scary->_Erase_head(_Al);\r\n                _Pocma(_Al, _Right_al);\r\n                _Scary->_Myhead = _Newhead;\r\n                _Scary->_Mysize = _Newsize;\r\n                _Proxy._Bind(_Alproxy, _Scary);\r\n                _Scary->_Swap_proxy_and_iterators(*_Right_scary);\r\n                return *this;\r\n            }\r\n        } else if constexpr (_Pocma_val == _Pocma_values::_No_propagate_allocators) {\r\n            if (_Al != _Right_al) {\r\n                clear();\r\n                _Getcomp() = _Right._Getcomp(); // intentionally copy comparator, see LWG-2227\r\n                _Copy<_Strategy::_Move>(_Right);\r\n                return *this;\r\n            }\r\n        }\r\n\r\n        clear();\r\n        _Getcomp() = _Right._Getcomp(); // intentionally copy comparator, see LWG-2227\r\n        _Pocma(_Al, _Right_al);\r\n        _Swap_val_excluding_comp(_Right);\r\n\r\n        return *this;\r\n    }\r\n\r\nprivate:\r\n    void _Swap_val_excluding_comp(_Tree& _Right) { // swap contents (except comparator) with _Right, equal allocators\r\n        using _STD swap;\r\n        const auto _Scary       = _Get_scary();\r\n        const auto _Right_scary = _Right._Get_scary();\r\n        _Scary->_Swap_proxy_and_iterators(*_Right_scary);\r\n        swap(_Scary->_Myhead, _Right_scary->_Myhead); // intentional ADL\r\n        _STD swap(_Scary->_Mysize, _Right_scary->_Mysize);\r\n    }\r\n\r\nprotected:\r\n    template <class... _Valtys>\r\n    pair<_Nodeptr, bool> _Emplace(_Valtys&&... _Vals) {\r\n        using _In_place_key_extractor = typename _Traits::template _In_place_key_extractor<_Valtys...>;\r\n        const auto _Scary             = _Get_scary();\r\n        _Tree_find_result<_Nodeptr> _Loc;\r\n        _Nodeptr _Inserted;\r\n        if constexpr (!_Multi && _In_place_key_extractor::_Extractable) {\r\n            const auto& _Keyval = _In_place_key_extractor::_Extract(_Vals...);\r\n            _Loc                = _Find_lower_bound(_Keyval);\r\n            if (_Lower_bound_duplicate(_Loc._Bound, _Keyval)) {\r\n                return {_Loc._Bound, false};\r\n            }\r\n\r\n            _Check_grow_by_1();\r\n            _Inserted = _Tree_temp_node<_Alnode>(_Getal(), _Scary->_Myhead, _STD forward<_Valtys>(_Vals)...)._Release();\r\n            // nothrow hereafter\r\n        } else {\r\n            _Tree_temp_node<_Alnode> _Newnode(_Getal(), _Scary->_Myhead, _STD forward<_Valtys>(_Vals)...);\r\n            const auto& _Keyval = _Traits::_Kfn(_Newnode._Ptr->_Myval);\r\n            if constexpr (_Multi) { // duplicate check if unique\r\n                _Loc = _Find_upper_bound(_Keyval);\r\n            } else {\r\n                _Loc = _Find_lower_bound(_Keyval);\r\n                if (_Lower_bound_duplicate(_Loc._Bound, _Keyval)) {\r\n                    return {_Loc._Bound, false};\r\n                }\r\n            }\r\n\r\n            _Check_grow_by_1();\r\n            // nothrow hereafter\r\n            _Inserted = _Newnode._Release();\r\n        }\r\n\r\n        return {_Scary->_Insert_node(_Loc._Location, _Inserted), true};\r\n    }\r\n\r\npublic:\r\n    template <class... _Valtys>\r\n    pair<iterator, bool> emplace(_Valtys&&... _Vals) {\r\n        const auto _Result = _Emplace(_STD forward<_Valtys>(_Vals)...);\r\n        return {iterator(_Result.first, _Get_scary()), _Result.second};\r\n    }\r\n\r\nprotected:\r\n    template <class... _Valtys>\r\n    _Nodeptr _Emplace_hint(const _Nodeptr _Hint, _Valtys&&... _Vals) {\r\n        using _In_place_key_extractor = typename _Traits::template _In_place_key_extractor<_Valtys...>;\r\n        const auto _Scary             = _Get_scary();\r\n        _Tree_find_hint_result<_Nodeptr> _Loc;\r\n        _Nodeptr _Inserted;\r\n        if constexpr (!_Multi && _In_place_key_extractor::_Extractable) {\r\n            _Loc = _Find_hint(_Hint, _In_place_key_extractor::_Extract(_Vals...));\r\n            if (_Loc._Duplicate) {\r\n                return _Loc._Location._Parent;\r\n            }\r\n\r\n            _Check_grow_by_1();\r\n            _Inserted = _Tree_temp_node<_Alnode>(_Getal(), _Scary->_Myhead, _STD forward<_Valtys>(_Vals)...)._Release();\r\n            // nothrow hereafter\r\n        } else {\r\n            _Tree_temp_node<_Alnode> _Newnode(_Getal(), _Scary->_Myhead, _STD forward<_Valtys>(_Vals)...);\r\n            _Loc = _Find_hint(_Hint, _Traits::_Kfn(_Newnode._Ptr->_Myval));\r\n            if constexpr (!_Multi) {\r\n                if (_Loc._Duplicate) {\r\n                    return _Loc._Location._Parent;\r\n                }\r\n            }\r\n\r\n            _Check_grow_by_1();\r\n            // nothrow hereafter\r\n            _Inserted = _Newnode._Release();\r\n        }\r\n\r\n        return _Scary->_Insert_node(_Loc._Location, _Inserted);\r\n    }\r\n\r\npublic:\r\n    template <class... _Valtys>\r\n    iterator emplace_hint(const_iterator _Where, _Valtys&&... _Vals) { // insert value_type(_Val...) at _Where\r\n        const auto _Scary = _Get_scary();\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Where._Getcont() == _Scary, \"map/set insert iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        return iterator(_Emplace_hint(_Where._Ptr, _STD forward<_Valtys>(_Vals)...), _Scary);\r\n    }\r\n\r\n    ~_Tree() noexcept {\r\n        const auto _Scary = _Get_scary();\r\n        _Scary->_Erase_head(_Getal());\r\n#if _ITERATOR_DEBUG_LEVEL != 0 // TRANSITION, ABI\r\n        auto _Alproxy = _STD _Get_proxy_allocator(_Getal());\r\n        _Delete_plain_internal(_Alproxy, _Scary->_Myproxy);\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    }\r\n\r\npublic:\r\n    _Tree& operator=(const _Tree& _Right) {\r\n        if (this == _STD addressof(_Right)) {\r\n            return *this;\r\n        }\r\n\r\n        auto& _Al       = _Getal();\r\n        auto& _Right_al = _Right._Getal();\r\n        if constexpr (_Choose_pocca_v<_Alnode>) {\r\n            if (_Al != _Right_al) {\r\n                clear();\r\n                const auto _Scary = _Get_scary();\r\n                _Scary->_Orphan_all();\r\n                auto _Alproxy       = _STD _Get_proxy_allocator(_Al);\r\n                auto _Right_alproxy = _STD _Get_proxy_allocator(_Right_al);\r\n                _Container_proxy_ptr<_Alty> _Proxy(_Right_alproxy, _Leave_proxy_unbound{});\r\n                auto _Right_al_non_const = _Right_al;\r\n                auto _Newhead            = _Node::_Buyheadnode(_Right_al_non_const);\r\n                _Node::_Freenode0(_Al, _Scary->_Myhead);\r\n                _Pocca(_Al, _Right_al);\r\n                _Scary->_Myhead = _Newhead;\r\n                _Proxy._Bind(_Alproxy, _Scary);\r\n                _Getcomp() = _Right._Getcomp();\r\n                _Copy<_Strategy::_Copy>(_Right);\r\n                return *this;\r\n            }\r\n        }\r\n\r\n        clear();\r\n        _Getcomp() = _Right._Getcomp();\r\n        _Pocca(_Al, _Right_al);\r\n        _Copy<_Strategy::_Copy>(_Right);\r\n\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD iterator begin() noexcept {\r\n        const auto _Scary = _Get_scary();\r\n        return iterator(_Scary->_Myhead->_Left, _Scary);\r\n    }\r\n\r\n    _NODISCARD const_iterator begin() const noexcept {\r\n        const auto _Scary = _Get_scary();\r\n        return const_iterator(_Scary->_Myhead->_Left, _Scary);\r\n    }\r\n\r\n    _NODISCARD iterator end() noexcept {\r\n        const auto _Scary = _Get_scary();\r\n        return iterator(_Scary->_Myhead, _Scary);\r\n    }\r\n\r\n    _NODISCARD const_iterator end() const noexcept {\r\n        const auto _Scary = _Get_scary();\r\n        return const_iterator(_Scary->_Myhead, _Scary);\r\n    }\r\n\r\n    _Unchecked_iterator _Unchecked_begin() noexcept {\r\n        return _Unchecked_iterator(_Get_scary()->_Myhead->_Left, nullptr);\r\n    }\r\n\r\n    _Unchecked_const_iterator _Unchecked_begin() const noexcept {\r\n        return _Unchecked_const_iterator(_Get_scary()->_Myhead->_Left, nullptr);\r\n    }\r\n\r\n    _Default_sentinel _Unchecked_end() const noexcept {\r\n        return {};\r\n    }\r\n\r\n    _Unchecked_const_iterator _Unchecked_end_iter() const noexcept {\r\n        return _Unchecked_const_iterator(_Get_scary()->_Myhead, nullptr);\r\n    }\r\n\r\n    _NODISCARD reverse_iterator rbegin() noexcept {\r\n        return reverse_iterator(end());\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator rbegin() const noexcept {\r\n        return const_reverse_iterator(end());\r\n    }\r\n\r\n    _NODISCARD reverse_iterator rend() noexcept {\r\n        return reverse_iterator(begin());\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator rend() const noexcept {\r\n        return const_reverse_iterator(begin());\r\n    }\r\n\r\n    _NODISCARD const_iterator cbegin() const noexcept {\r\n        return begin();\r\n    }\r\n\r\n    _NODISCARD const_iterator cend() const noexcept {\r\n        return end();\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator crbegin() const noexcept {\r\n        return rbegin();\r\n    }\r\n\r\n    _NODISCARD const_reverse_iterator crend() const noexcept {\r\n        return rend();\r\n    }\r\n\r\n    _NODISCARD size_type size() const noexcept {\r\n        return _Get_scary()->_Mysize;\r\n    }\r\n\r\n    _NODISCARD size_type max_size() const noexcept {\r\n        return (_STD min) (static_cast<size_type>(_STD _Max_limit<difference_type>()), //\r\n            _Alnode_traits::max_size(_Getal()));\r\n    }\r\n\r\n    _NODISCARD_EMPTY_MEMBER bool empty() const noexcept {\r\n        return _Get_scary()->_Mysize == 0;\r\n    }\r\n\r\n    _NODISCARD allocator_type get_allocator() const noexcept {\r\n        return static_cast<allocator_type>(_Getal());\r\n    }\r\n\r\n    _NODISCARD key_compare key_comp() const {\r\n        return _Getcomp();\r\n    }\r\n\r\n    _NODISCARD value_compare value_comp() const {\r\n        return value_compare(key_comp());\r\n    }\r\n\r\n    template <bool _Multi2 = _Multi, enable_if_t<!_Multi2, int> = 0>\r\n    pair<iterator, bool> insert(const value_type& _Val) {\r\n        const auto _Result = _Emplace(_Val);\r\n        return {iterator(_Result.first, _Get_scary()), _Result.second};\r\n    }\r\n\r\n    template <bool _Multi2 = _Multi, enable_if_t<_Multi2, int> = 0>\r\n    iterator insert(const value_type& _Val) {\r\n        return iterator(_Emplace(_Val).first, _Get_scary());\r\n    }\r\n\r\n    template <bool _Multi2 = _Multi, enable_if_t<!_Multi2, int> = 0>\r\n    pair<iterator, bool> insert(value_type&& _Val) {\r\n        const auto _Result = _Emplace(_STD move(_Val));\r\n        return {iterator(_Result.first, _Get_scary()), _Result.second};\r\n    }\r\n\r\n    template <bool _Multi2 = _Multi, enable_if_t<_Multi2, int> = 0>\r\n    iterator insert(value_type&& _Val) {\r\n        return iterator(_Emplace(_STD move(_Val)).first, _Get_scary());\r\n    }\r\n\r\n    iterator insert(const_iterator _Where, const value_type& _Val) {\r\n        const auto _Scary = _Get_scary();\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Where._Getcont() == _Scary, \"map/set insert iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        return iterator(_Emplace_hint(_Where._Ptr, _Val), _Scary);\r\n    }\r\n\r\n    iterator insert(const_iterator _Where, value_type&& _Val) {\r\n        const auto _Scary = _Get_scary();\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Where._Getcont() == _Scary, \"map/set insert iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        return iterator(_Emplace_hint(_Where._Ptr, _STD move(_Val)), _Scary);\r\n    }\r\n\r\nprotected:\r\n    template <class _Iter, class _Sent>\r\n    void _Insert_range_unchecked(_Iter _First, const _Sent _Last) {\r\n        const auto _Myhead = _Get_scary()->_Myhead;\r\n        for (; _First != _Last; ++_First) {\r\n            _Emplace_hint(_Myhead, *_First);\r\n        }\r\n    }\r\n\r\npublic:\r\n    template <class _Iter>\r\n    void insert(_Iter _First, _Iter _Last) {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        _Insert_range_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <_Container_compatible_range<value_type> _Rng>\r\n    void insert_range(_Rng&& _Range) {\r\n        _Insert_range_unchecked(_RANGES _Ubegin(_Range), _RANGES _Uend(_Range));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    void insert(initializer_list<value_type> _Ilist) {\r\n        _Insert_range_unchecked(_Ilist.begin(), _Ilist.end());\r\n    }\r\n\r\nprivate:\r\n    _Nodeptr _Erase_unchecked(_Unchecked_const_iterator _Where) noexcept {\r\n        const auto _Scary                    = _Get_scary();\r\n        _Unchecked_const_iterator _Successor = _Where;\r\n        ++_Successor; // save successor iterator for return\r\n        _Nodeptr _Erasednode = _Scary->_Extract(_Where); // node to erase\r\n        _Scary->_Orphan_ptr(_Erasednode);\r\n        _Node::_Freenode(_Getal(), _Erasednode); // delete erased node\r\n        return _Successor._Ptr; // return successor nodeptr\r\n    }\r\n\r\n    _Nodeptr _Erase_unchecked(_Unchecked_const_iterator _First, _Unchecked_const_iterator _Last) noexcept {\r\n        const auto _Begin = _Unchecked_begin();\r\n        if (_First == _Begin && _Last._Ptr->_Isnil) {\r\n            // erase all\r\n            clear();\r\n            return _Last._Ptr;\r\n        }\r\n\r\n        // partial erase, one at a time\r\n        while (_First != _Last) {\r\n            _Erase_unchecked(_First++);\r\n        }\r\n\r\n        return _Last._Ptr;\r\n    }\r\n\r\n    size_type _Erase(const pair<_Nodeptr, _Nodeptr> _Where) noexcept {\r\n        const _Unchecked_const_iterator _First(_Where.first, nullptr);\r\n        const _Unchecked_const_iterator _Last(_Where.second, nullptr);\r\n        const auto _Num = static_cast<size_type>(_STD distance(_First, _Last));\r\n        _Erase_unchecked(_First, _Last);\r\n        return _Num;\r\n    }\r\n\r\npublic:\r\n    template <class _Iter = iterator, enable_if_t<!is_same_v<_Iter, const_iterator>, int> = 0>\r\n    iterator erase(iterator _Where) noexcept /* strengthened */ {\r\n        const auto _Scary = _Get_scary();\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Where._Getcont() == _Scary, \"map/set erase iterator from incorrect container\");\r\n        _STL_VERIFY(!_Where._Ptr->_Isnil, \"cannot erase map/set end() iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        return iterator(_Erase_unchecked(_Where._Unwrapped()), _Scary);\r\n    }\r\n\r\n    iterator erase(const_iterator _Where) noexcept /* strengthened */ {\r\n        const auto _Scary = _Get_scary();\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Where._Getcont() == _Scary, \"map/set erase iterator from incorrect container\");\r\n        _STL_VERIFY(!_Where._Ptr->_Isnil, \"cannot erase map/set end() iterator\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        return iterator(_Erase_unchecked(_Where._Unwrapped()), _Scary);\r\n    }\r\n\r\n    iterator erase(const_iterator _First, const_iterator _Last) noexcept /* strengthened */ {\r\n        return iterator(_Erase_unchecked(_First._Unwrapped(), _Last._Unwrapped()), _Get_scary());\r\n    }\r\n\r\n    size_type erase(const key_type& _Keyval) noexcept(noexcept(_Eqrange(_Keyval))) /* strengthened */ {\r\n        return _Erase(_Eqrange(_Keyval));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _Kx>\r\n        requires _Transparent<key_compare> && (!is_convertible_v<_Kx, const_iterator>)\r\n              && (!is_convertible_v<_Kx, iterator>)\r\n    size_type erase(_Kx&& _Keyval) noexcept(noexcept(_Eqrange(_Keyval))) /* strengthened */ {\r\n        return _Erase(_Eqrange(_Keyval));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    void clear() noexcept {\r\n        const auto _Scary = _Get_scary();\r\n        _Scary->_Orphan_ptr(nullptr);\r\n        auto _Head = _Scary->_Myhead;\r\n        _Scary->_Erase_tree(_Getal(), _Head->_Parent);\r\n        _Head->_Parent  = _Head;\r\n        _Head->_Left    = _Head;\r\n        _Head->_Right   = _Head;\r\n        _Scary->_Mysize = 0;\r\n    }\r\n\r\nprivate:\r\n    template <class _Other>\r\n    _NODISCARD _Nodeptr _Find(const _Other& _Keyval) const {\r\n        const _Tree_find_result<_Nodeptr> _Loc = _Find_lower_bound(_Keyval);\r\n        if (_Lower_bound_duplicate(_Loc._Bound, _Keyval)) {\r\n            return _Loc._Bound;\r\n        }\r\n\r\n        return _Get_scary()->_Myhead;\r\n    }\r\n\r\npublic:\r\n    _NODISCARD iterator find(const key_type& _Keyval) {\r\n        return iterator(_Find(_Keyval), _Get_scary());\r\n    }\r\n\r\n    _NODISCARD const_iterator find(const key_type& _Keyval) const {\r\n        return const_iterator(_Find(_Keyval), _Get_scary());\r\n    }\r\n\r\n    template <class _Other, class _Mycomp = key_compare, enable_if_t<_Is_transparent_v<_Mycomp>, int> = 0>\r\n    _NODISCARD iterator find(const _Other& _Keyval) {\r\n        return iterator(_Find(_Keyval), _Get_scary());\r\n    }\r\n\r\n    template <class _Other, class _Mycomp = key_compare, enable_if_t<_Is_transparent_v<_Mycomp>, int> = 0>\r\n    _NODISCARD const_iterator find(const _Other& _Keyval) const {\r\n        return const_iterator(_Find(_Keyval), _Get_scary());\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD bool contains(const key_type& _Keyval) const {\r\n        return _Lower_bound_duplicate(_Find_lower_bound(_Keyval)._Bound, _Keyval);\r\n    }\r\n\r\n    template <class _Other>\r\n        requires _Transparent<key_compare>\r\n    _NODISCARD bool contains(const _Other& _Keyval) const {\r\n        return _Lower_bound_duplicate(_Find_lower_bound(_Keyval)._Bound, _Keyval);\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    _NODISCARD size_type count(const key_type& _Keyval) const {\r\n        if constexpr (_Multi) {\r\n            const auto _Ans = _Eqrange(_Keyval);\r\n            return static_cast<size_type>(_STD distance(\r\n                _Unchecked_const_iterator(_Ans.first, nullptr), _Unchecked_const_iterator(_Ans.second, nullptr)));\r\n        } else {\r\n            return _Lower_bound_duplicate(_Find_lower_bound(_Keyval)._Bound, _Keyval);\r\n        }\r\n    }\r\n\r\n    template <class _Other, class _Mycomp = key_compare, enable_if_t<_Is_transparent_v<_Mycomp>, int> = 0>\r\n    _NODISCARD size_type count(const _Other& _Keyval) const {\r\n        const auto _Ans = _Eqrange(_Keyval);\r\n        return static_cast<size_type>(_STD distance(\r\n            _Unchecked_const_iterator(_Ans.first, nullptr), _Unchecked_const_iterator(_Ans.second, nullptr)));\r\n    }\r\n\r\n    _NODISCARD iterator lower_bound(const key_type& _Keyval) {\r\n        return iterator(_Find_lower_bound(_Keyval)._Bound, _Get_scary());\r\n    }\r\n\r\n    _NODISCARD const_iterator lower_bound(const key_type& _Keyval) const {\r\n        return const_iterator(_Find_lower_bound(_Keyval)._Bound, _Get_scary());\r\n    }\r\n\r\n    template <class _Other, class _Mycomp = key_compare, enable_if_t<_Is_transparent_v<_Mycomp>, int> = 0>\r\n    _NODISCARD iterator lower_bound(const _Other& _Keyval) {\r\n        return iterator(_Find_lower_bound(_Keyval)._Bound, _Get_scary());\r\n    }\r\n\r\n    template <class _Other, class _Mycomp = key_compare, enable_if_t<_Is_transparent_v<_Mycomp>, int> = 0>\r\n    _NODISCARD const_iterator lower_bound(const _Other& _Keyval) const {\r\n        return const_iterator(_Find_lower_bound(_Keyval)._Bound, _Get_scary());\r\n    }\r\n\r\n    _NODISCARD iterator upper_bound(const key_type& _Keyval) {\r\n        return iterator(_Find_upper_bound(_Keyval)._Bound, _Get_scary());\r\n    }\r\n\r\n    _NODISCARD const_iterator upper_bound(const key_type& _Keyval) const {\r\n        return const_iterator(_Find_upper_bound(_Keyval)._Bound, _Get_scary());\r\n    }\r\n\r\n    template <class _Other, class _Mycomp = key_compare, enable_if_t<_Is_transparent_v<_Mycomp>, int> = 0>\r\n    _NODISCARD iterator upper_bound(const _Other& _Keyval) {\r\n        return iterator(_Find_upper_bound(_Keyval)._Bound, _Get_scary());\r\n    }\r\n\r\n    template <class _Other, class _Mycomp = key_compare, enable_if_t<_Is_transparent_v<_Mycomp>, int> = 0>\r\n    _NODISCARD const_iterator upper_bound(const _Other& _Keyval) const {\r\n        return const_iterator(_Find_upper_bound(_Keyval)._Bound, _Get_scary());\r\n    }\r\n\r\n    _NODISCARD pair<iterator, iterator> equal_range(const key_type& _Keyval) {\r\n        const auto _Result = _Eqrange(_Keyval);\r\n        const auto _Scary  = _Get_scary();\r\n        return {iterator(_Result.first, _Scary), iterator(_Result.second, _Scary)};\r\n    }\r\n\r\n    _NODISCARD pair<const_iterator, const_iterator> equal_range(const key_type& _Keyval) const {\r\n        const auto _Result = _Eqrange(_Keyval);\r\n        const auto _Scary  = _Get_scary();\r\n        return {const_iterator(_Result.first, _Scary), const_iterator(_Result.second, _Scary)};\r\n    }\r\n\r\n    template <class _Other, class _Mycomp = key_compare, enable_if_t<_Is_transparent_v<_Mycomp>, int> = 0>\r\n    _NODISCARD pair<iterator, iterator> equal_range(const _Other& _Keyval) {\r\n        const auto _Result = _Eqrange(_Keyval);\r\n        const auto _Scary  = _Get_scary();\r\n        return {iterator(_Result.first, _Scary), iterator(_Result.second, _Scary)};\r\n    }\r\n\r\n    template <class _Other, class _Mycomp = key_compare, enable_if_t<_Is_transparent_v<_Mycomp>, int> = 0>\r\n    _NODISCARD pair<const_iterator, const_iterator> equal_range(const _Other& _Keyval) const {\r\n        const auto _Result = _Eqrange(_Keyval);\r\n        const auto _Scary  = _Get_scary();\r\n        return {const_iterator(_Result.first, _Scary), const_iterator(_Result.second, _Scary)};\r\n    }\r\n\r\n    void swap(_Tree& _Right) noexcept(_Is_nothrow_swappable<key_compare>::value) /* strengthened */ {\r\n        using _STD swap;\r\n        if (this != _STD addressof(_Right)) {\r\n            _Pocs(_Getal(), _Right._Getal());\r\n            _Swap_val_excluding_comp(_Right);\r\n            swap(_Getcomp(), _Right._Getcomp()); // intentional ADL\r\n        }\r\n    }\r\n\r\nprotected:\r\n    template <class _Keyty>\r\n    _Tree_find_hint_result<_Nodeptr> _Find_hint(const _Nodeptr _Hint, const _Keyty& _Keyval) const {\r\n        const auto& _Comp = _Getcomp();\r\n        const auto _Head  = _Get_scary()->_Myhead;\r\n        if constexpr (_Multi) { // insert even if duplicate\r\n            if (_Hint->_Isnil) {\r\n                // insert at end if greater than or equal to last element\r\n                if (_Head->_Parent->_Isnil || !_DEBUG_LT_PRED(_Comp, _Keyval, _Traits::_Kfn(_Head->_Right->_Myval))) {\r\n                    return {{_Head->_Right, _Tree_child::_Right}, false};\r\n                }\r\n\r\n                // _Hint is end(); it must be closer to the end of equivalents\r\n                return {_Find_upper_bound(_Keyval)._Location, false};\r\n            }\r\n\r\n            if (_Hint == _Head->_Left) {\r\n                // insert at beginning if less than or equal to first element\r\n                if (!_DEBUG_LT_PRED(_Comp, _Traits::_Kfn(_Hint->_Myval), _Keyval)) {\r\n                    return {{_Hint, _Tree_child::_Left}, false};\r\n                }\r\n\r\n                // _Hint is begin(); it must be closer to the beginning of equivalents\r\n                return {_Find_lower_bound(_Keyval)._Location, false};\r\n            }\r\n\r\n            if (!_DEBUG_LT_PRED(_Comp, _Traits::_Kfn(_Hint->_Myval), _Keyval)) {\r\n                // _Val <= *_Hint\r\n                const auto _Prev = (--(_Unchecked_const_iterator(_Hint, nullptr)))._Ptr;\r\n                if (!_DEBUG_LT_PRED(_Comp, _Keyval, _Traits::_Kfn(_Prev->_Myval))) {\r\n                    // _Val <= *_Hint and _Val >= *prev(_Hint); insert here\r\n                    if (_Prev->_Right->_Isnil) {\r\n                        return {{_Prev, _Tree_child::_Right}, false};\r\n                    } else {\r\n                        return {{_Hint, _Tree_child::_Left}, false};\r\n                    }\r\n                }\r\n\r\n                // _Val goes before *_Hint; _Hint must be closer to the end of equivalents\r\n                return {_Find_upper_bound(_Keyval)._Location, false};\r\n            }\r\n\r\n            // _Val goes after *_Hint; _Hint must be closer to the beginning of equivalents\r\n            return {_Find_lower_bound(_Keyval)._Location, false};\r\n        } else { // insert only if unique\r\n            if (_Hint->_Isnil) { // insert at end if after last element\r\n                // insert at end if greater than last element\r\n                if (_Head->_Parent->_Isnil || _DEBUG_LT_PRED(_Comp, _Traits::_Kfn(_Head->_Right->_Myval), _Keyval)) {\r\n                    return {{_Head->_Right, _Tree_child::_Right}, false};\r\n                }\r\n            } else if (_Hint == _Head->_Left) {\r\n                // insert at beginning if less than first element\r\n                if (_DEBUG_LT_PRED(_Comp, _Keyval, _Traits::_Kfn(_Hint->_Myval))) {\r\n                    return {{_Hint, _Tree_child::_Left}, false};\r\n                }\r\n            } else if (_DEBUG_LT_PRED(_Comp, _Keyval, _Traits::_Kfn(_Hint->_Myval))) {\r\n                // _Val < *_Hint\r\n                const auto _Prev = (--(_Unchecked_const_iterator(_Hint, nullptr)))._Ptr;\r\n                if (_DEBUG_LT_PRED(_Comp, _Traits::_Kfn(_Prev->_Myval), _Keyval)) {\r\n                    // _Val < *_Hint and _Val > *prev(_Hint); insert here\r\n                    if (_Prev->_Right->_Isnil) {\r\n                        return {{_Prev, _Tree_child::_Right}, false};\r\n                    } else {\r\n                        return {{_Hint, _Tree_child::_Left}, false};\r\n                    }\r\n                }\r\n            } else if (_DEBUG_LT_PRED(_Comp, _Traits::_Kfn(_Hint->_Myval), _Keyval)) {\r\n                // _Val > *_Hint\r\n                const auto _Next = (++(_Unchecked_const_iterator(_Hint, nullptr)))._Ptr;\r\n                if (_Next->_Isnil || _DEBUG_LT_PRED(_Comp, _Keyval, _Traits::_Kfn(_Next->_Myval))) {\r\n                    // _Val > *_Hint and _Val < *next(_Hint); insert here\r\n                    if (_Hint->_Right->_Isnil) {\r\n                        return {{_Hint, _Tree_child::_Right}, false};\r\n                    }\r\n\r\n                    return {{_Next, _Tree_child::_Left}, false};\r\n                }\r\n            } else {\r\n                // _Val is equivalent to *_Hint; don't insert\r\n                return {{_Hint, _Tree_child::_Right}, true};\r\n            }\r\n\r\n            const auto _Loc = _Find_lower_bound(_Keyval);\r\n            if (_Lower_bound_duplicate(_Loc._Bound, _Keyval)) {\r\n                return {{_Loc._Bound, _Tree_child::_Unused}, true};\r\n            }\r\n\r\n            return {_Loc._Location, false};\r\n        }\r\n    }\r\n\r\n    template <class _Keyty>\r\n    _Tree_find_result<_Nodeptr> _Find_upper_bound(const _Keyty& _Keyval) const {\r\n        const auto _Scary = _Get_scary();\r\n        _Tree_find_result<_Nodeptr> _Result{{_Scary->_Myhead->_Parent, _Tree_child::_Right}, _Scary->_Myhead};\r\n        _Nodeptr _Trynode = _Result._Location._Parent;\r\n        while (!_Trynode->_Isnil) {\r\n            _Result._Location._Parent = _Trynode;\r\n            if (_DEBUG_LT_PRED(_Getcomp(), _Keyval, _Traits::_Kfn(_Trynode->_Myval))) {\r\n                _Result._Location._Child = _Tree_child::_Left;\r\n                _Result._Bound           = _Trynode;\r\n                _Trynode                 = _Trynode->_Left;\r\n            } else {\r\n                _Result._Location._Child = _Tree_child::_Right;\r\n                _Trynode                 = _Trynode->_Right;\r\n            }\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    template <class _Keyty>\r\n    bool _Lower_bound_duplicate(const _Nodeptr _Bound, const _Keyty& _Keyval) const {\r\n        return !_Bound->_Isnil && !_DEBUG_LT_PRED(_Getcomp(), _Keyval, _Traits::_Kfn(_Bound->_Myval));\r\n    }\r\n\r\n    template <class _Keyty>\r\n    _Tree_find_result<_Nodeptr> _Find_lower_bound(const _Keyty& _Keyval) const {\r\n        const auto _Scary = _Get_scary();\r\n        _Tree_find_result<_Nodeptr> _Result{{_Scary->_Myhead->_Parent, _Tree_child::_Right}, _Scary->_Myhead};\r\n        _Nodeptr _Trynode = _Result._Location._Parent;\r\n        while (!_Trynode->_Isnil) {\r\n            _Result._Location._Parent = _Trynode;\r\n            if (_DEBUG_LT_PRED(_Getcomp(), _Traits::_Kfn(_Trynode->_Myval), _Keyval)) {\r\n                _Result._Location._Child = _Tree_child::_Right;\r\n                _Trynode                 = _Trynode->_Right;\r\n            } else {\r\n                _Result._Location._Child = _Tree_child::_Left;\r\n                _Result._Bound           = _Trynode;\r\n                _Trynode                 = _Trynode->_Left;\r\n            }\r\n        }\r\n\r\n        return _Result;\r\n    }\r\n\r\n    void _Check_grow_by_1() {\r\n        if (max_size() == _Get_scary()->_Mysize) {\r\n            _Throw_tree_length_error();\r\n        }\r\n    }\r\n\r\n    template <_Strategy _Strat>\r\n    void _Copy(const _Tree& _Right) { // copy or move entire tree from _Right\r\n        const auto _Scary        = _Get_scary();\r\n        const auto _Right_scary  = _Right._Get_scary();\r\n        _Scary->_Myhead->_Parent = _Copy_nodes<_Strat>(_Right_scary->_Myhead->_Parent, _Scary->_Myhead);\r\n        _Scary->_Mysize          = _Right_scary->_Mysize;\r\n        if (!_Scary->_Myhead->_Parent->_Isnil) { // nonempty tree, look for new smallest and largest\r\n            _Scary->_Myhead->_Left  = _Scary_val::_Min(_Scary->_Myhead->_Parent);\r\n            _Scary->_Myhead->_Right = _Scary_val::_Max(_Scary->_Myhead->_Parent);\r\n        } else { // empty tree, just tidy head pointers\r\n            _Scary->_Myhead->_Left  = _Scary->_Myhead;\r\n            _Scary->_Myhead->_Right = _Scary->_Myhead;\r\n        }\r\n    }\r\n\r\n    template <_Strategy _Strat, class _Ty>\r\n    _Nodeptr _Copy_or_move(_Ty& _Val) {\r\n        if constexpr (_Strat == _Strategy::_Copy) {\r\n            return _Buynode(_Val);\r\n        } else {\r\n            if constexpr (_Is_set) {\r\n                return _Buynode(_STD move(_Val));\r\n            } else {\r\n                return _Buynode(_STD move(const_cast<key_type&>(_Val.first)), _STD move(_Val.second));\r\n            }\r\n        }\r\n    }\r\n\r\n    template <_Strategy _Strat>\r\n    _Nodeptr _Copy_nodes(_Nodeptr _Rootnode, _Nodeptr _Wherenode) {\r\n        // copy entire subtree, recursively\r\n        const auto _Scary = _Get_scary();\r\n        _Nodeptr _Newroot = _Scary->_Myhead; // point at nil node\r\n\r\n        if (!_Rootnode->_Isnil) { // copy or move a node, then any subtrees\r\n            _Newroot          = _Copy_or_move<_Strat>(_Rootnode->_Myval); // memorize new root\r\n            _Newroot->_Parent = _Wherenode;\r\n            _Newroot->_Color  = _Rootnode->_Color;\r\n\r\n            typename _Scary_val::template _Erase_tree_and_orphan_guard<_Alnode> _Guard{_Scary, _Getal(), _Newroot};\r\n\r\n            _Newroot->_Left  = _Copy_nodes<_Strat>(_Rootnode->_Left, _Newroot);\r\n            _Newroot->_Right = _Copy_nodes<_Strat>(_Rootnode->_Right, _Newroot);\r\n\r\n            _Guard._Val_ptr = nullptr;\r\n        }\r\n\r\n        return _Newroot; // return newly constructed tree\r\n    }\r\n\r\n    template <class _Other>\r\n    pair<_Nodeptr, _Nodeptr> _Eqrange(const _Other& _Keyval) const\r\n        noexcept(_Nothrow_compare<key_compare, key_type, _Other> && _Nothrow_compare<key_compare, _Other, key_type>) {\r\n        // find range of nodes equivalent to _Keyval\r\n        const auto _Scary = _Get_scary();\r\n        const auto& _Comp = _Getcomp();\r\n        _Nodeptr _Pnode   = _Scary->_Myhead->_Parent;\r\n        _Nodeptr _Lonode  = _Scary->_Myhead; // end() if search fails\r\n        _Nodeptr _Hinode  = _Scary->_Myhead; // end() if search fails\r\n\r\n        while (!_Pnode->_Isnil) {\r\n            const auto& _Nodekey = _Traits::_Kfn(_Pnode->_Myval);\r\n            if (_DEBUG_LT_PRED(_Comp, _Nodekey, _Keyval)) {\r\n                _Pnode = _Pnode->_Right; // descend right subtree\r\n            } else { // _Pnode not less than _Keyval, remember it\r\n                if (_Hinode->_Isnil && _DEBUG_LT_PRED(_Comp, _Keyval, _Nodekey)) {\r\n                    _Hinode = _Pnode; // _Pnode greater, remember it\r\n                }\r\n\r\n                _Lonode = _Pnode;\r\n                _Pnode  = _Pnode->_Left; // descend left subtree\r\n            }\r\n        }\r\n\r\n        _Pnode = _Hinode->_Isnil ? _Scary->_Myhead->_Parent : _Hinode->_Left; // continue scan for upper bound\r\n        while (!_Pnode->_Isnil) {\r\n            if (_DEBUG_LT_PRED(_Getcomp(), _Keyval, _Traits::_Kfn(_Pnode->_Myval))) {\r\n                // _Pnode greater than _Keyval, remember it\r\n                _Hinode = _Pnode;\r\n                _Pnode  = _Pnode->_Left; // descend left subtree\r\n            } else {\r\n                _Pnode = _Pnode->_Right; // descend right subtree\r\n            }\r\n        }\r\n\r\n        return {_Lonode, _Hinode};\r\n    }\r\n\r\n#if _HAS_CXX17\r\npublic:\r\n    using node_type = typename _Traits::node_type;\r\n\r\n    node_type extract(const const_iterator _Where) {\r\n        const auto _Scary = _Get_scary();\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Where._Getcont() == _Scary && !_Where._Ptr->_Isnil, \"map/set erase iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        const auto _Ptr = _Scary->_Extract(_Where._Unwrapped());\r\n        _Scary->_Orphan_ptr(_Ptr);\r\n        return node_type::_Make(_Ptr, _Getal());\r\n    }\r\n\r\n    node_type extract(const key_type& _Keyval) {\r\n        const const_iterator _Where = find(_Keyval);\r\n        if (_Where == end()) {\r\n            return node_type{};\r\n        }\r\n\r\n        return extract(_Where);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    template <class _Kx>\r\n        requires _Transparent<key_compare> && (!is_convertible_v<_Kx, const_iterator>)\r\n              && (!is_convertible_v<_Kx, iterator>)\r\n    node_type extract(_Kx&& _Keyval) {\r\n        const const_iterator _Where = find(_Keyval);\r\n        if (_Where == end()) {\r\n            return node_type{};\r\n        }\r\n\r\n        return extract(_Where);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    auto insert(node_type&& _Handle) {\r\n        if (_Handle.empty()) {\r\n            if constexpr (_Multi) {\r\n                return end();\r\n            } else {\r\n                return _Insert_return_type<iterator, node_type>{end(), false, {}};\r\n            }\r\n        }\r\n\r\n        _Check_node_allocator(_Handle);\r\n        const auto _Scary        = _Get_scary();\r\n        const auto _Attempt_node = _Handle._Getptr();\r\n        const auto& _Keyval      = _Traits::_Kfn(_Attempt_node->_Myval);\r\n        _Tree_find_result<_Nodeptr> _Loc;\r\n        if constexpr (_Multi) {\r\n            _Loc = _Find_upper_bound(_Keyval);\r\n        } else {\r\n            _Loc = _Find_lower_bound(_Keyval);\r\n            if (_Lower_bound_duplicate(_Loc._Bound, _Keyval)) {\r\n                return _Insert_return_type<iterator, node_type>{\r\n                    iterator(_Loc._Bound, _Scary), false, _STD move(_Handle)};\r\n            }\r\n        }\r\n\r\n        _Check_grow_by_1();\r\n\r\n        // nothrow hereafter\r\n\r\n        _Attempt_node->_Left = _Scary->_Myhead;\r\n        // _Attempt_node->_Parent handled in _Insert_node\r\n        _Attempt_node->_Right = _Scary->_Myhead;\r\n        _Attempt_node->_Color = _Red;\r\n\r\n        const auto _Inserted = _Scary->_Insert_node(_Loc._Location, _Handle._Release());\r\n        if constexpr (_Multi) {\r\n            return iterator(_Inserted, _Scary);\r\n        } else {\r\n            return _Insert_return_type<iterator, node_type>{iterator(_Inserted, _Scary), true, _STD move(_Handle)};\r\n        }\r\n    }\r\n\r\n    iterator insert(const const_iterator _Hint, node_type&& _Handle) {\r\n        const auto _Scary = _Get_scary();\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(_Hint._Getcont() == _Scary, \"map/set insert iterator outside range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        if (_Handle.empty()) {\r\n            return end();\r\n        }\r\n\r\n        _Check_node_allocator(_Handle);\r\n        const auto _Attempt_node = _Handle._Getptr();\r\n        const auto& _Keyval      = _Traits::_Kfn(_Attempt_node->_Myval);\r\n        const auto _Loc          = _Find_hint(_Hint._Ptr, _Keyval);\r\n        if (_Loc._Duplicate) {\r\n            return iterator(_Loc._Location._Parent, _Scary);\r\n        }\r\n\r\n        _Check_grow_by_1();\r\n\r\n        _Attempt_node->_Left = _Scary->_Myhead;\r\n        // _Attempt_node->_Parent handled in _Insert_node\r\n        _Attempt_node->_Right = _Scary->_Myhead;\r\n        _Attempt_node->_Color = _Red;\r\n\r\n        return iterator(_Scary->_Insert_node(_Loc._Location, _Handle._Release()), _Scary);\r\n    }\r\n\r\n    template <class>\r\n    friend class _Tree;\r\n\r\n    template <class _Other_traits>\r\n    void merge(_Tree<_Other_traits>& _That) {\r\n        static_assert(is_same_v<_Nodeptr, typename _Tree<_Other_traits>::_Nodeptr>,\r\n            \"merge() requires an argument with a compatible node type.\");\r\n\r\n        static_assert(is_same_v<allocator_type, typename _Tree<_Other_traits>::allocator_type>,\r\n            \"merge() requires an argument with the same allocator type.\");\r\n\r\n        if constexpr (is_same_v<_Tree, _Tree<_Other_traits>>) {\r\n            if (this == _STD addressof(_That)) {\r\n                return;\r\n            }\r\n        }\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        if constexpr (!_Alnode_traits::is_always_equal::value) {\r\n            _STL_VERIFY(_Getal() == _That._Getal(), \"allocator incompatible for merge\");\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        const auto _Scary      = _Get_scary();\r\n        const auto _Head       = _Scary->_Myhead;\r\n        const auto _That_scary = _That._Get_scary();\r\n        auto _First            = _That._Unchecked_begin();\r\n        while (!_First._Ptr->_Isnil) {\r\n            const auto _Attempt_node = _First._Ptr;\r\n            ++_First;\r\n            _Tree_find_result<_Nodeptr> _Loc;\r\n            const auto& _Keyval = _Traits::_Kfn(_Attempt_node->_Myval);\r\n            if constexpr (_Multi) {\r\n                _Loc = _Find_upper_bound(_Keyval);\r\n            } else {\r\n                _Loc = _Find_lower_bound(_Keyval);\r\n                if (_Lower_bound_duplicate(_Loc._Bound, _Keyval)) {\r\n                    continue;\r\n                }\r\n            }\r\n\r\n            _Check_grow_by_1();\r\n\r\n            // nothrow hereafter for this iteration\r\n            const auto _Extracted = _That_scary->_Extract(_Unchecked_const_iterator(_Attempt_node, nullptr));\r\n            _Extracted->_Left     = _Head;\r\n            // _Extracted->_Parent handled in _Insert_node\r\n            _Extracted->_Right = _Head;\r\n            _Extracted->_Color = _Red;\r\n\r\n            const auto _Inserted = _Scary->_Insert_node(_Loc._Location, _Extracted);\r\n            _Reparent_ptr(_Inserted, _That);\r\n        }\r\n    }\r\n\r\n    template <class _Other_traits>\r\n    void merge(_Tree<_Other_traits>&& _That) {\r\n        static_assert(is_same_v<_Nodeptr, typename _Tree<_Other_traits>::_Nodeptr>,\r\n            \"merge() requires an argument with a compatible node type.\");\r\n\r\n        static_assert(is_same_v<allocator_type, typename _Tree<_Other_traits>::allocator_type>,\r\n            \"merge() requires an argument with the same allocator type.\");\r\n\r\n        merge(_That);\r\n    }\r\n\r\nprotected:\r\n    template <class _Other_traits>\r\n    void _Reparent_ptr(const _Nodeptr _Ptr, _Tree<_Other_traits>& _Old_parent) {\r\n        (void) _Ptr;\r\n        (void) _Old_parent;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _Lockit _Lock(_LOCK_DEBUG);\r\n        const auto _Old_parent_scary = _Old_parent._Get_scary();\r\n        _Iterator_base12** _Pnext    = &_Old_parent_scary->_Myproxy->_Myfirstiter;\r\n        _STL_VERIFY(_Pnext, \"source container corrupted\");\r\n        if (_Ptr == nullptr || _Ptr == _Old_parent_scary->_Myhead) {\r\n            return;\r\n        }\r\n\r\n        const auto _My_saved_proxy               = _Get_scary()->_Myproxy;\r\n        _Iterator_base12** const _My_saved_first = &_My_saved_proxy->_Myfirstiter;\r\n\r\n        while (*_Pnext) {\r\n            _Iterator_base12** const _Next = &(*_Pnext)->_Mynextiter;\r\n            const auto _Iter               = static_cast<const_iterator*>(*_Pnext);\r\n            if (_Iter->_Ptr == _Ptr) { // reparent the iterator\r\n                *_Pnext            = *_Next;\r\n                _Iter->_Myproxy    = _My_saved_proxy;\r\n                _Iter->_Mynextiter = *_My_saved_first;\r\n                *_My_saved_first   = _Iter;\r\n            } else { // skip the iterator\r\n                _Pnext = _Next;\r\n            }\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n    }\r\n\r\n    void _Check_node_allocator(node_type& _Handle) const {\r\n        (void) _Handle;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        _STL_VERIFY(get_allocator() == _Handle._Getal(), \"node handle allocator incompatible for insert\");\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    void _Alloc_sentinel_and_proxy() {\r\n        const auto _Scary = _Get_scary();\r\n        auto _Alproxy     = _STD _Get_proxy_allocator(_Getal());\r\n        _Container_proxy_ptr<_Alnode> _Proxy(_Alproxy, *_Scary);\r\n        _Scary->_Myhead = _Node::_Buyheadnode(_Getal());\r\n        _Proxy._Release();\r\n    }\r\n\r\n    template <class... _Valty>\r\n    _Nodeptr _Buynode(_Valty&&... _Val) {\r\n        return _Node::_Buynode(_Getal(), _Get_scary()->_Myhead, _STD forward<_Valty>(_Val)...);\r\n    }\r\n\r\n    key_compare& _Getcomp() noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    const key_compare& _Getcomp() const noexcept {\r\n        return _Mypair._Get_first();\r\n    }\r\n\r\n    _Alnode& _Getal() noexcept {\r\n        return _Mypair._Myval2._Get_first();\r\n    }\r\n\r\n    const _Alnode& _Getal() const noexcept {\r\n        return _Mypair._Myval2._Get_first();\r\n    }\r\n\r\n    _Scary_val* _Get_scary() noexcept {\r\n        return _STD addressof(_Mypair._Myval2._Myval2);\r\n    }\r\n\r\n    const _Scary_val* _Get_scary() const noexcept {\r\n        return _STD addressof(_Mypair._Myval2._Myval2);\r\n    }\r\n\r\nprivate:\r\n    _Compressed_pair<key_compare, _Compressed_pair<_Alnode, _Scary_val>> _Mypair;\r\n};\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XTREE_\r\n"
  },
  {
    "path": "stl/inc/xutility",
    "content": "// xutility internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _XUTILITY_\r\n#define _XUTILITY_\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <__msvc_iter_core.hpp>\r\n#include <climits>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <cwchar>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"intrinsic\")\r\n#pragma push_macro(\"lifetimebound\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef intrinsic\r\n#undef lifetimebound\r\n#undef no_specializations\r\n\r\n#if defined(_CRTBLD) && defined(CRTDLL2)\r\n// TRANSITION, ABI: The vector algorithms are compiled into the import lib, so we disable their usage when building\r\n// the DLL. (We could additionally link them into the DLL - not as exports, just for internal usage - but we\r\n// haven't chosen to do that yet.) When we can break ABI and export the vector algorithms from the DLL,\r\n// this preprocessor case should be removed.\r\n#ifndef _USE_STD_VECTOR_ALGORITHMS\r\n#define _USE_STD_VECTOR_ALGORITHMS 0\r\n#elif _USE_STD_VECTOR_ALGORITHMS\r\n#error Vector algorithms are not supported when building msvcp140.dll, but _USE_STD_VECTOR_ALGORITHMS is set.\r\n#endif // ^^^ _USE_STD_VECTOR_ALGORITHMS != 0 ^^^\r\n#elif defined(_M_CEE_PURE) || defined(_M_HYBRID)\r\n#ifndef _USE_STD_VECTOR_ALGORITHMS\r\n#define _USE_STD_VECTOR_ALGORITHMS 0\r\n#elif _USE_STD_VECTOR_ALGORITHMS\r\n#error Vector algorithms are not supported on this architecture, but _USE_STD_VECTOR_ALGORITHMS is set.\r\n#endif // ^^^ _USE_STD_VECTOR_ALGORITHMS != 0 ^^^\r\n#else // ^^^ vector algorithms unsupported for /clr:pure or CHPE / vector algorithms supported by default vvv\r\n#ifndef _USE_STD_VECTOR_ALGORITHMS\r\n#define _USE_STD_VECTOR_ALGORITHMS 1\r\n#endif // !defined(_USE_STD_VECTOR_ALGORITHMS)\r\n#endif // ^^^ vector algorithms supported by default ^^^\r\n\r\n// _USE_STD_VECTOR_ALGORITHMS is our documented control macro:\r\n// https://learn.microsoft.com/cpp/standard-library/vectorized-stl-algorithms\r\n// In the STL's implementation, we inspect the following detection macros,\r\n// because various algorithms are vectorized for various architectures.\r\n\r\n// _CALL_ALL_X64_VECTOR_ALGORITHMS_ON_ARM64EC is a macro to test ARM64EC fallbacks for x64 algorithms.\r\n\r\n#if !_USE_STD_VECTOR_ALGORITHMS\r\n#define _VECTORIZED_FOR_X64_X86               0\r\n#define _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC 0\r\n#elif defined(_M_ARM64) || (defined(_M_ARM64EC) && !defined(_CALL_ALL_X64_VECTOR_ALGORITHMS_ON_ARM64EC))\r\n#define _VECTORIZED_FOR_X64_X86               0\r\n#define _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC 1\r\n#elif defined(_M_X64) || defined(_M_IX86)\r\n#define _VECTORIZED_FOR_X64_X86               1\r\n#define _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC 1\r\n#else // ^^^ known architecture / unknown architecture vvv\r\n#error Unknown architecture\r\n#endif // ^^^ unknown architecture ^^^\r\n\r\n#define _VECTORIZED_ADJACENT_FIND      _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_BITSET_FROM_STRING _VECTORIZED_FOR_X64_X86\r\n#define _VECTORIZED_BITSET_TO_STRING   _VECTORIZED_FOR_X64_X86\r\n#define _VECTORIZED_COUNT              _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_FIND               _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_FIND_END           _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_FIND_FIRST_OF      _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_FIND_LAST          _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_FIND_LAST_OF       _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_INCLUDES           _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_IS_SORTED_UNTIL    _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_MINMAX             _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_MINMAX_ELEMENT     _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_MISMATCH           _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_REMOVE             _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_REMOVE_COPY        _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_REPLACE            _VECTORIZED_FOR_X64_X86\r\n#define _VECTORIZED_REPLACE_COPY       _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_REVERSE            _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_REVERSE_COPY       _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_ROTATE             _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_SEARCH             _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_SEARCH_N           _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_SWAP_RANGES        _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_UNIQUE             _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n#define _VECTORIZED_UNIQUE_COPY        _VECTORIZED_FOR_X64_X86_ARM64_ARM64EC\r\n\r\n// We choose not to vectorize minmax_element for 64-bit integers on ARM64/ARM64EC\r\n// as this does not improve performance over the scalar code.\r\n#define _VECTORIZED_MINMAX_ELEMENT_64BIT_INT _VECTORIZED_FOR_X64_X86\r\n\r\n#ifndef _USE_STD_VECTOR_FLOATING_ALGORITHMS\r\n#if _USE_STD_VECTOR_ALGORITHMS && !defined(_M_FP_EXCEPT)\r\n#define _USE_STD_VECTOR_FLOATING_ALGORITHMS 1\r\n#else // ^^^ use vector algorithms and not use _M_FP_EXCEPT / not use vector algorithms or use _M_FP_EXCEPT vvv\r\n#define _USE_STD_VECTOR_FLOATING_ALGORITHMS 0\r\n#endif // ^^^ not use vector algorithms or use _M_FP_EXCEPT ^^^\r\n#else // ^^^ !defined(_USE_STD_VECTOR_FLOATING_ALGORITHMS) / defined(_USE_STD_VECTOR_FLOATING_ALGORITHMS) vvv\r\n#if _USE_STD_VECTOR_FLOATING_ALGORITHMS && !_USE_STD_VECTOR_ALGORITHMS\r\n#error _USE_STD_VECTOR_FLOATING_ALGORITHMS must imply _USE_STD_VECTOR_ALGORITHMS.\r\n#endif // _USE_STD_VECTOR_FLOATING_ALGORITHMS && !_USE_STD_VECTOR_ALGORITHMS\r\n#endif // ^^^ defined(_USE_STD_VECTOR_FLOATING_ALGORITHMS) ^^^\r\n\r\nextern \"C\" {\r\n// The \"noalias\" attribute tells the compiler optimizer that pointers going into these hand-vectorized algorithms\r\n// won't be stored beyond the lifetime of the function, and that the function will only reference arrays denoted by\r\n// those pointers. The optimizer also assumes in that case that a pointer parameter is not returned to the caller via\r\n// the return value, so functions using \"noalias\" must usually return void. This attribute is valuable because these\r\n// functions are in native code objects that the compiler cannot analyze. In the absence of the noalias attribute, the\r\n// compiler has to assume that the denoted arrays are \"globally address taken\", and that any later calls to\r\n// unanalyzable routines may modify those arrays.\r\n\r\n#if _VECTORIZED_REVERSE\r\n__declspec(noalias) void __cdecl __std_reverse_trivially_swappable_1(void* _First, void* _Last) noexcept;\r\n__declspec(noalias) void __cdecl __std_reverse_trivially_swappable_2(void* _First, void* _Last) noexcept;\r\n__declspec(noalias) void __cdecl __std_reverse_trivially_swappable_4(void* _First, void* _Last) noexcept;\r\n__declspec(noalias) void __cdecl __std_reverse_trivially_swappable_8(void* _First, void* _Last) noexcept;\r\n#endif // ^^^ _VECTORIZED_REVERSE ^^^\r\n\r\n#if _VECTORIZED_SWAP_RANGES\r\n__declspec(noalias) void __cdecl __std_swap_ranges_trivially_swappable_noalias(\r\n    void* _First1, void* _Last1, void* _First2) noexcept;\r\n#endif // ^^^ _VECTORIZED_SWAP_RANGES ^^^\r\n\r\n#if _VECTORIZED_ROTATE\r\n__declspec(noalias) void __stdcall __std_rotate(void* _First, void* _Mid, void* _Last) noexcept;\r\n#endif // ^^^ _VECTORIZED_ROTATE ^^^\r\n\r\n#if _VECTORIZED_COUNT\r\n__declspec(noalias) size_t __stdcall __std_count_trivial_1(\r\n    const void* _First, const void* _Last, uint8_t _Val) noexcept;\r\n__declspec(noalias) size_t __stdcall __std_count_trivial_2(\r\n    const void* _First, const void* _Last, uint16_t _Val) noexcept;\r\n__declspec(noalias) size_t __stdcall __std_count_trivial_4(\r\n    const void* _First, const void* _Last, uint32_t _Val) noexcept;\r\n__declspec(noalias) size_t __stdcall __std_count_trivial_8(\r\n    const void* _First, const void* _Last, uint64_t _Val) noexcept;\r\n#endif // ^^^ _VECTORIZED_COUNT ^^^\r\n\r\n#if _VECTORIZED_FIND\r\nconst void* __stdcall __std_find_trivial_1(const void* _First, const void* _Last, uint8_t _Val) noexcept;\r\nconst void* __stdcall __std_find_trivial_2(const void* _First, const void* _Last, uint16_t _Val) noexcept;\r\nconst void* __stdcall __std_find_trivial_4(const void* _First, const void* _Last, uint32_t _Val) noexcept;\r\nconst void* __stdcall __std_find_trivial_8(const void* _First, const void* _Last, uint64_t _Val) noexcept;\r\n#endif // ^^^ _VECTORIZED_FIND ^^^\r\n\r\n#if _VECTORIZED_FIND_LAST\r\nconst void* __stdcall __std_find_last_trivial_1(const void* _First, const void* _Last, uint8_t _Val) noexcept;\r\nconst void* __stdcall __std_find_last_trivial_2(const void* _First, const void* _Last, uint16_t _Val) noexcept;\r\nconst void* __stdcall __std_find_last_trivial_4(const void* _First, const void* _Last, uint32_t _Val) noexcept;\r\nconst void* __stdcall __std_find_last_trivial_8(const void* _First, const void* _Last, uint64_t _Val) noexcept;\r\n#endif // ^^^ _VECTORIZED_FIND_LAST ^^^\r\n\r\n#if _VECTORIZED_ADJACENT_FIND\r\nconst void* __stdcall __std_adjacent_find_1(const void* _First, const void* _Last) noexcept;\r\nconst void* __stdcall __std_adjacent_find_2(const void* _First, const void* _Last) noexcept;\r\nconst void* __stdcall __std_adjacent_find_4(const void* _First, const void* _Last) noexcept;\r\nconst void* __stdcall __std_adjacent_find_8(const void* _First, const void* _Last) noexcept;\r\n#endif // ^^^ _VECTORIZED_ADJACENT_FIND ^^^\r\n\r\n#if _VECTORIZED_SEARCH\r\nconst void* __stdcall __std_search_1(\r\n    const void* _First1, const void* _Last1, const void* _First2, size_t _Count2) noexcept;\r\nconst void* __stdcall __std_search_2(\r\n    const void* _First1, const void* _Last1, const void* _First2, size_t _Count2) noexcept;\r\nconst void* __stdcall __std_search_4(\r\n    const void* _First1, const void* _Last1, const void* _First2, size_t _Count2) noexcept;\r\nconst void* __stdcall __std_search_8(\r\n    const void* _First1, const void* _Last1, const void* _First2, size_t _Count2) noexcept;\r\n#endif // ^^^ _VECTORIZED_SEARCH ^^^\r\n\r\n#if _VECTORIZED_FIND_END\r\nconst void* __stdcall __std_find_end_1(\r\n    const void* _First1, const void* _Last1, const void* _First2, size_t _Count2) noexcept;\r\nconst void* __stdcall __std_find_end_2(\r\n    const void* _First1, const void* _Last1, const void* _First2, size_t _Count2) noexcept;\r\nconst void* __stdcall __std_find_end_4(\r\n    const void* _First1, const void* _Last1, const void* _First2, size_t _Count2) noexcept;\r\nconst void* __stdcall __std_find_end_8(\r\n    const void* _First1, const void* _Last1, const void* _First2, size_t _Count2) noexcept;\r\n#endif // ^^^ _VECTORIZED_FIND_END ^^^\r\n\r\n#if _VECTORIZED_MINMAX_ELEMENT\r\nconst void* __stdcall __std_min_element_1(const void* _First, const void* _Last, bool _Signed) noexcept;\r\nconst void* __stdcall __std_min_element_2(const void* _First, const void* _Last, bool _Signed) noexcept;\r\nconst void* __stdcall __std_min_element_4(const void* _First, const void* _Last, bool _Signed) noexcept;\r\n#if _VECTORIZED_MINMAX_ELEMENT_64BIT_INT\r\nconst void* __stdcall __std_min_element_8(const void* _First, const void* _Last, bool _Signed) noexcept;\r\n#endif // ^^^ _VECTORIZED_MINMAX_ELEMENT_64BIT_INT ^^^\r\nconst void* __stdcall __std_min_element_f(const void* _First, const void* _Last, bool _Unused) noexcept;\r\nconst void* __stdcall __std_min_element_d(const void* _First, const void* _Last, bool _Unused) noexcept;\r\n\r\nconst void* __stdcall __std_max_element_1(const void* _First, const void* _Last, bool _Signed) noexcept;\r\nconst void* __stdcall __std_max_element_2(const void* _First, const void* _Last, bool _Signed) noexcept;\r\nconst void* __stdcall __std_max_element_4(const void* _First, const void* _Last, bool _Signed) noexcept;\r\n#if _VECTORIZED_MINMAX_ELEMENT_64BIT_INT\r\nconst void* __stdcall __std_max_element_8(const void* _First, const void* _Last, bool _Signed) noexcept;\r\n#endif // ^^^ _VECTORIZED_MINMAX_ELEMENT_64BIT_INT ^^^\r\nconst void* __stdcall __std_max_element_f(const void* _First, const void* _Last, bool _Unused) noexcept;\r\nconst void* __stdcall __std_max_element_d(const void* _First, const void* _Last, bool _Unused) noexcept;\r\n#endif // ^^^ _VECTORIZED_MINMAX_ELEMENT ^^^\r\n\r\n#if _VECTORIZED_MINMAX\r\n__declspec(noalias) int8_t __stdcall __std_min_1i(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) uint8_t __stdcall __std_min_1u(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) int16_t __stdcall __std_min_2i(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) uint16_t __stdcall __std_min_2u(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) int32_t __stdcall __std_min_4i(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) uint32_t __stdcall __std_min_4u(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) int64_t __stdcall __std_min_8i(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) uint64_t __stdcall __std_min_8u(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) float __stdcall __std_min_f(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) double __stdcall __std_min_d(const void* _First, const void* _Last) noexcept;\r\n\r\n__declspec(noalias) int8_t __stdcall __std_max_1i(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) uint8_t __stdcall __std_max_1u(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) int16_t __stdcall __std_max_2i(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) uint16_t __stdcall __std_max_2u(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) int32_t __stdcall __std_max_4i(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) uint32_t __stdcall __std_max_4u(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) int64_t __stdcall __std_max_8i(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) uint64_t __stdcall __std_max_8u(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) float __stdcall __std_max_f(const void* _First, const void* _Last) noexcept;\r\n__declspec(noalias) double __stdcall __std_max_d(const void* _First, const void* _Last) noexcept;\r\n#endif // ^^^ _VECTORIZED_MINMAX ^^^\r\n\r\n#if _VECTORIZED_MISMATCH\r\n__declspec(noalias) size_t __stdcall __std_mismatch_1(const void* _First1, const void* _First2, size_t _Count) noexcept;\r\n__declspec(noalias) size_t __stdcall __std_mismatch_2(const void* _First1, const void* _First2, size_t _Count) noexcept;\r\n__declspec(noalias) size_t __stdcall __std_mismatch_4(const void* _First1, const void* _First2, size_t _Count) noexcept;\r\n__declspec(noalias) size_t __stdcall __std_mismatch_8(const void* _First1, const void* _First2, size_t _Count) noexcept;\r\n#endif // ^^^ _VECTORIZED_MISMATCH ^^^\r\n\r\n} // extern \"C\"\r\n\r\n_STD_BEGIN\r\n\r\ntemplate <class _Target, class _Source>\r\n_Target _Find_arg_cast(const _Source _Val) noexcept {\r\n    if constexpr (is_integral_v<_Source>) {\r\n        return static_cast<_Target>(_Val);\r\n    } else {\r\n        return _STD _Bit_cast<_Target>(_Val);\r\n    }\r\n}\r\n\r\n#if _VECTORIZED_REVERSE\r\ntemplate <size_t _Nx>\r\n__declspec(noalias) void _Reverse_vectorized(void* _First, void* _Last) noexcept {\r\n    if constexpr (_Nx == 1) {\r\n        ::__std_reverse_trivially_swappable_1(_First, _Last);\r\n    } else if constexpr (_Nx == 2) {\r\n        ::__std_reverse_trivially_swappable_2(_First, _Last);\r\n    } else if constexpr (_Nx == 4) {\r\n        ::__std_reverse_trivially_swappable_4(_First, _Last);\r\n    } else if constexpr (_Nx == 8) {\r\n        ::__std_reverse_trivially_swappable_8(_First, _Last);\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_REVERSE ^^^\r\n\r\n#if _VECTORIZED_COUNT\r\ntemplate <class _Ty, class _TVal>\r\n__declspec(noalias) size_t _Count_vectorized(_Ty* const _First, _Ty* const _Last, const _TVal _Val) noexcept {\r\n    if constexpr (sizeof(_Ty) == 1) {\r\n        return ::__std_count_trivial_1(_First, _Last, _STD _Find_arg_cast<uint8_t>(_Val));\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        return ::__std_count_trivial_2(_First, _Last, _STD _Find_arg_cast<uint16_t>(_Val));\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        return ::__std_count_trivial_4(_First, _Last, _STD _Find_arg_cast<uint32_t>(_Val));\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        return ::__std_count_trivial_8(_First, _Last, _STD _Find_arg_cast<uint64_t>(_Val));\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_COUNT ^^^\r\n\r\n#if _VECTORIZED_FIND\r\ntemplate <class _Ty, class _TVal>\r\n_Ty* _Find_vectorized(_Ty* const _First, _Ty* const _Last, const _TVal _Val) noexcept {\r\n    if constexpr (sizeof(_Ty) == 1) {\r\n        return const_cast<_Ty*>(\r\n            static_cast<const _Ty*>(::__std_find_trivial_1(_First, _Last, _STD _Find_arg_cast<uint8_t>(_Val))));\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        return const_cast<_Ty*>(\r\n            static_cast<const _Ty*>(::__std_find_trivial_2(_First, _Last, _STD _Find_arg_cast<uint16_t>(_Val))));\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        return const_cast<_Ty*>(\r\n            static_cast<const _Ty*>(::__std_find_trivial_4(_First, _Last, _STD _Find_arg_cast<uint32_t>(_Val))));\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        return const_cast<_Ty*>(\r\n            static_cast<const _Ty*>(::__std_find_trivial_8(_First, _Last, _STD _Find_arg_cast<uint64_t>(_Val))));\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_FIND ^^^\r\n\r\n#if _VECTORIZED_FIND_LAST\r\ntemplate <class _Ty, class _TVal>\r\n_Ty* _Find_last_vectorized(_Ty* const _First, _Ty* const _Last, const _TVal _Val) noexcept {\r\n    if constexpr (sizeof(_Ty) == 1) {\r\n        return const_cast<_Ty*>(\r\n            static_cast<const _Ty*>(::__std_find_last_trivial_1(_First, _Last, _STD _Find_arg_cast<uint8_t>(_Val))));\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        return const_cast<_Ty*>(\r\n            static_cast<const _Ty*>(::__std_find_last_trivial_2(_First, _Last, _STD _Find_arg_cast<uint16_t>(_Val))));\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        return const_cast<_Ty*>(\r\n            static_cast<const _Ty*>(::__std_find_last_trivial_4(_First, _Last, _STD _Find_arg_cast<uint32_t>(_Val))));\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        return const_cast<_Ty*>(\r\n            static_cast<const _Ty*>(::__std_find_last_trivial_8(_First, _Last, _STD _Find_arg_cast<uint64_t>(_Val))));\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_FIND_LAST ^^^\r\n\r\n#if _VECTORIZED_ADJACENT_FIND\r\ntemplate <class _Ty>\r\n_Ty* _Adjacent_find_vectorized(_Ty* const _First, _Ty* const _Last) noexcept {\r\n    if constexpr (sizeof(_Ty) == 1) {\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_adjacent_find_1(_First, _Last)));\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_adjacent_find_2(_First, _Last)));\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_adjacent_find_4(_First, _Last)));\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_adjacent_find_8(_First, _Last)));\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_ADJACENT_FIND ^^^\r\n\r\n#if _VECTORIZED_FIND_FIRST_OF || _VECTORIZED_FIND_LAST_OF\r\n// find_first_of vectorization is likely to be a win after this size (in elements)\r\n// (Used with _Find_first_of_vectorized, _Find_first_of_pos_vectorized, _Find_first_not_of_pos_vectorized,\r\n// _Find_last_of_pos_vectorized, and _Find_last_not_of_pos_vectorized.)\r\n_INLINE_VAR constexpr ptrdiff_t _Threshold_find_first_of = 16;\r\n#endif // ^^^ _VECTORIZED_FIND_FIRST_OF || _VECTORIZED_FIND_LAST_OF ^^^\r\n\r\n#if _VECTORIZED_SEARCH\r\ntemplate <class _Ty1, class _Ty2>\r\n_Ty1* _Search_vectorized(_Ty1* const _First1, _Ty1* const _Last1, _Ty2* const _First2, const size_t _Count2) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(sizeof(_Ty1) == sizeof(_Ty2));\r\n    if constexpr (sizeof(_Ty1) == 1) {\r\n        return const_cast<_Ty1*>(static_cast<const _Ty1*>(::__std_search_1(_First1, _Last1, _First2, _Count2)));\r\n    } else if constexpr (sizeof(_Ty1) == 2) {\r\n        return const_cast<_Ty1*>(static_cast<const _Ty1*>(::__std_search_2(_First1, _Last1, _First2, _Count2)));\r\n    } else if constexpr (sizeof(_Ty1) == 4) {\r\n        return const_cast<_Ty1*>(static_cast<const _Ty1*>(::__std_search_4(_First1, _Last1, _First2, _Count2)));\r\n    } else if constexpr (sizeof(_Ty1) == 8) {\r\n        return const_cast<_Ty1*>(static_cast<const _Ty1*>(::__std_search_8(_First1, _Last1, _First2, _Count2)));\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_SEARCH ^^^\r\n\r\n#if _VECTORIZED_FIND_END\r\ntemplate <class _Ty1, class _Ty2>\r\n_Ty1* _Find_end_vectorized(\r\n    _Ty1* const _First1, _Ty1* const _Last1, _Ty2* const _First2, const size_t _Count2) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(sizeof(_Ty1) == sizeof(_Ty2));\r\n    if constexpr (sizeof(_Ty1) == 1) {\r\n        return const_cast<_Ty1*>(static_cast<const _Ty1*>(::__std_find_end_1(_First1, _Last1, _First2, _Count2)));\r\n    } else if constexpr (sizeof(_Ty1) == 2) {\r\n        return const_cast<_Ty1*>(static_cast<const _Ty1*>(::__std_find_end_2(_First1, _Last1, _First2, _Count2)));\r\n    } else if constexpr (sizeof(_Ty1) == 4) {\r\n        return const_cast<_Ty1*>(static_cast<const _Ty1*>(::__std_find_end_4(_First1, _Last1, _First2, _Count2)));\r\n    } else if constexpr (sizeof(_Ty1) == 8) {\r\n        return const_cast<_Ty1*>(static_cast<const _Ty1*>(::__std_find_end_8(_First1, _Last1, _First2, _Count2)));\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_FIND_END ^^^\r\n\r\n#if _VECTORIZED_MINMAX_ELEMENT\r\ntemplate <class _Ty>\r\n_Ty* _Min_element_vectorized(_Ty* const _First, _Ty* const _Last) noexcept {\r\n    constexpr bool _Signed = is_signed_v<_Ty>;\r\n\r\n    if constexpr (is_same_v<remove_const_t<_Ty>, float>) {\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_min_element_f(_First, _Last, false)));\r\n    } else if constexpr (_Is_any_of_v<remove_const_t<_Ty>, double, long double>) {\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_min_element_d(_First, _Last, false)));\r\n    } else if constexpr (sizeof(_Ty) == 1) {\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_min_element_1(_First, _Last, _Signed)));\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_min_element_2(_First, _Last, _Signed)));\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_min_element_4(_First, _Last, _Signed)));\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n#if _VECTORIZED_MINMAX_ELEMENT_64BIT_INT\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_min_element_8(_First, _Last, _Signed)));\r\n#else // ^^^ _VECTORIZED_MINMAX_ELEMENT_64BIT_INT / !_VECTORIZED_MINMAX_ELEMENT_64BIT_INT vvv\r\n        static_assert(false, \"unexpected size\");\r\n#endif // ^^^ !_VECTORIZED_MINMAX_ELEMENT_64BIT_INT ^^^\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\n_Ty* _Max_element_vectorized(_Ty* const _First, _Ty* const _Last) noexcept {\r\n    constexpr bool _Signed = is_signed_v<_Ty>;\r\n\r\n    if constexpr (is_same_v<remove_const_t<_Ty>, float>) {\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_max_element_f(_First, _Last, false)));\r\n    } else if constexpr (_Is_any_of_v<remove_const_t<_Ty>, double, long double>) {\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_max_element_d(_First, _Last, false)));\r\n    } else if constexpr (sizeof(_Ty) == 1) {\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_max_element_1(_First, _Last, _Signed)));\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_max_element_2(_First, _Last, _Signed)));\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_max_element_4(_First, _Last, _Signed)));\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n#if _VECTORIZED_MINMAX_ELEMENT_64BIT_INT\r\n        return const_cast<_Ty*>(static_cast<const _Ty*>(::__std_max_element_8(_First, _Last, _Signed)));\r\n#else // ^^^ _VECTORIZED_MINMAX_ELEMENT_64BIT_INT / !_VECTORIZED_MINMAX_ELEMENT_64BIT_INT vvv\r\n        static_assert(false, \"unexpected size\");\r\n#endif // ^^^ !_VECTORIZED_MINMAX_ELEMENT_64BIT_INT ^^^\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_MINMAX_ELEMENT ^^^\r\n\r\n#if _VECTORIZED_MINMAX\r\ntemplate <class _Ty>\r\nauto _Min_vectorized(_Ty* const _First, _Ty* const _Last) noexcept {\r\n    constexpr bool _Signed = is_signed_v<_Ty>;\r\n\r\n    if constexpr (is_pointer_v<_Ty>) {\r\n#ifdef _WIN64\r\n        return reinterpret_cast<void*>(::__std_min_8u(_First, _Last));\r\n#else\r\n        return reinterpret_cast<void*>(::__std_min_4u(_First, _Last));\r\n#endif\r\n    } else if constexpr (is_same_v<remove_const_t<_Ty>, float>) {\r\n        return ::__std_min_f(_First, _Last);\r\n    } else if constexpr (_Is_any_of_v<remove_const_t<_Ty>, double, long double>) {\r\n        return ::__std_min_d(_First, _Last);\r\n    } else if constexpr (sizeof(_Ty) == 1) {\r\n        if constexpr (_Signed) {\r\n            return ::__std_min_1i(_First, _Last);\r\n        } else {\r\n            return ::__std_min_1u(_First, _Last);\r\n        }\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        if constexpr (_Signed) {\r\n            return ::__std_min_2i(_First, _Last);\r\n        } else {\r\n            return ::__std_min_2u(_First, _Last);\r\n        }\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        if constexpr (_Signed) {\r\n            return ::__std_min_4i(_First, _Last);\r\n        } else {\r\n            return ::__std_min_4u(_First, _Last);\r\n        }\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        if constexpr (_Signed) {\r\n            return ::__std_min_8i(_First, _Last);\r\n        } else {\r\n            return ::__std_min_8u(_First, _Last);\r\n        }\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\nauto _Max_vectorized(_Ty* const _First, _Ty* const _Last) noexcept {\r\n    constexpr bool _Signed = is_signed_v<_Ty>;\r\n\r\n    if constexpr (is_pointer_v<_Ty>) {\r\n#ifdef _WIN64\r\n        return reinterpret_cast<void*>(::__std_max_8u(_First, _Last));\r\n#else\r\n        return reinterpret_cast<void*>(::__std_max_4u(_First, _Last));\r\n#endif\r\n    } else if constexpr (is_same_v<remove_const_t<_Ty>, float>) {\r\n        return ::__std_max_f(_First, _Last);\r\n    } else if constexpr (_Is_any_of_v<remove_const_t<_Ty>, double, long double>) {\r\n        return ::__std_max_d(_First, _Last);\r\n    } else if constexpr (sizeof(_Ty) == 1) {\r\n        if constexpr (_Signed) {\r\n            return ::__std_max_1i(_First, _Last);\r\n        } else {\r\n            return ::__std_max_1u(_First, _Last);\r\n        }\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        if constexpr (_Signed) {\r\n            return ::__std_max_2i(_First, _Last);\r\n        } else {\r\n            return ::__std_max_2u(_First, _Last);\r\n        }\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        if constexpr (_Signed) {\r\n            return ::__std_max_4i(_First, _Last);\r\n        } else {\r\n            return ::__std_max_4u(_First, _Last);\r\n        }\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        if constexpr (_Signed) {\r\n            return ::__std_max_8i(_First, _Last);\r\n        } else {\r\n            return ::__std_max_8u(_First, _Last);\r\n        }\r\n    } else {\r\n        static_assert(false, \"unexpected size\");\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_MINMAX ^^^\r\n\r\n#if _VECTORIZED_MISMATCH\r\ntemplate <size_t _Element_size>\r\nsize_t _Mismatch_vectorized(const void* const _First1, const void* const _First2, const size_t _Count) noexcept {\r\n    if constexpr (_Element_size % 8 == 0) {\r\n        return __std_mismatch_8(_First1, _First2, _Count * (_Element_size / 8)) / (_Element_size / 8);\r\n    } else if constexpr (_Element_size % 4 == 0) {\r\n        return __std_mismatch_4(_First1, _First2, _Count * (_Element_size / 4)) / (_Element_size / 4);\r\n    } else if constexpr (_Element_size % 2 == 0) {\r\n        return __std_mismatch_2(_First1, _First2, _Count * (_Element_size / 2)) / (_Element_size / 2);\r\n    } else {\r\n        return __std_mismatch_1(_First1, _First2, _Count * _Element_size) / _Element_size;\r\n    }\r\n}\r\n#endif // ^^^ _VECTORIZED_MISMATCH ^^^\r\n\r\ntemplate <class _Ty>\r\nstruct _Get_first_parameter;\r\n\r\ntemplate <template <class, class...> class _Ty, class _First, class... _Rest>\r\nstruct _Get_first_parameter<_Ty<_First, _Rest...>> { // given _Ty<_First, _Rest...>, extract _First\r\n    using type = _First;\r\n};\r\n\r\ntemplate <class _Newfirst, class _Ty>\r\nstruct _Replace_first_parameter;\r\n\r\ntemplate <class _Newfirst, template <class, class...> class _Ty, class _First, class... _Rest>\r\nstruct _Replace_first_parameter<_Newfirst, _Ty<_First, _Rest...>> { // given _Ty<_First, _Rest...>, replace _First\r\n    using type = _Ty<_Newfirst, _Rest...>;\r\n};\r\n\r\ntemplate <class _Ty, class = void>\r\nstruct _Get_ptr_difference_type {\r\n    using type = ptrdiff_t;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct _Get_ptr_difference_type<_Ty, void_t<typename _Ty::difference_type>> {\r\n    using type = typename _Ty::difference_type;\r\n};\r\n\r\ntemplate <class _Ty, class _Other, class = void>\r\nstruct _Get_rebind_alias {\r\n    using type = typename _Replace_first_parameter<_Other, _Ty>::type;\r\n};\r\n\r\ntemplate <class _Ty, class _Other>\r\nstruct _Get_rebind_alias<_Ty, _Other, void_t<typename _Ty::template rebind<_Other>>> {\r\n    using type = typename _Ty::template rebind<_Other>;\r\n};\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Ty, class... _Types>\r\n    requires (!is_unbounded_array_v<_Ty>) && requires(_Ty* _Location, _Types&&... _Args) {\r\n        ::new (static_cast<void*>(_Location)) _Ty(_STD forward<_Types>(_Args)...); // per LWG-3888\r\n    }\r\nconstexpr _Ty* construct_at(_Ty* const _Location, _Types&&... _Args)\r\n    noexcept(noexcept(::new (static_cast<void*>(_Location)) _Ty(_STD forward<_Types>(_Args)...))) /* strengthened */ {\r\n    if constexpr (is_array_v<_Ty>) {\r\n        static_assert(sizeof...(_Types) == 0, \"The array is only allowed to be value-initialized by std::construct_at. \"\r\n                                              \"(N5032 [specialized.construct]/2)\");\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, LLVM-117294, DevCom-10798145\r\n        ::new (static_cast<void*>(_Location)) _Ty();\r\n        return __builtin_launder(_Location); // per old resolution of LWG-3436\r\n#else // ^^^ workaround / no workaround vvv\r\n        _MSVC_CONSTEXPR return ::new (static_cast<void*>(_Location)) _Ty[1]();\r\n#endif // ^^^ no workaround ^^^\r\n    } else {\r\n        _MSVC_CONSTEXPR return ::new (static_cast<void*>(_Location)) _Ty(_STD forward<_Types>(_Args)...);\r\n    }\r\n}\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Ty, class... _Types>\r\n_CONSTEXPR20 void _Construct_in_place(_Ty& _Obj, _Types&&... _Args)\r\n    noexcept(is_nothrow_constructible_v<_Ty, _Types...>) {\r\n#if _HAS_CXX20\r\n    if (_STD is_constant_evaluated()) {\r\n        _STD construct_at(_STD addressof(_Obj), _STD forward<_Types>(_Args)...);\r\n    } else\r\n#endif // _HAS_CXX20\r\n    {\r\n        ::new (static_cast<void*>(_STD addressof(_Obj))) _Ty(_STD forward<_Types>(_Args)...);\r\n    }\r\n}\r\n\r\ntemplate <class _Ty>\r\nvoid _Default_construct_in_place(_Ty& _Obj) noexcept(is_nothrow_default_constructible_v<_Ty>) {\r\n    ::new (static_cast<void*>(_STD addressof(_Obj))) _Ty;\r\n}\r\n\r\ntemplate <class _Ty, class _Elem>\r\nstruct _Ptr_traits_base {\r\n    using pointer         = _Ty;\r\n    using element_type    = _Elem;\r\n    using difference_type = typename _Get_ptr_difference_type<_Ty>::type;\r\n\r\n    template <class _Other>\r\n    using rebind = typename _Get_rebind_alias<_Ty, _Other>::type;\r\n\r\n    using _Reftype = conditional_t<is_void_v<_Elem>, char, _Elem>&;\r\n\r\n    _NODISCARD static _CONSTEXPR20 pointer pointer_to(_Reftype _Val)\r\n        noexcept(noexcept(_Ty::pointer_to(_Val))) /* strengthened */ {\r\n        return _Ty::pointer_to(_Val);\r\n    }\r\n};\r\n\r\ntemplate <class, class = void, class = void>\r\nstruct _Ptr_traits_sfinae_layer {};\r\n\r\ntemplate <class _Ty, class _Uty>\r\nstruct _Ptr_traits_sfinae_layer<_Ty, _Uty, void_t<typename _Get_first_parameter<_Ty>::type>>\r\n    : _Ptr_traits_base<_Ty, typename _Get_first_parameter<_Ty>::type> {};\r\n\r\ntemplate <class _Ty>\r\nstruct _Ptr_traits_sfinae_layer<_Ty, void_t<typename _Ty::element_type>, void>\r\n    : _Ptr_traits_base<_Ty, typename _Ty::element_type> {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct pointer_traits : _Ptr_traits_sfinae_layer<_Ty> {};\r\n\r\ntemplate <class _Ty>\r\nstruct pointer_traits<_Ty*> {\r\n    using pointer         = _Ty*;\r\n    using element_type    = _Ty;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    template <class _Other>\r\n    using rebind = _Other*;\r\n\r\n    using _Reftype = conditional_t<is_void_v<_Ty>, char, _Ty>&;\r\n\r\n    _NODISCARD static _CONSTEXPR20 pointer pointer_to(_Reftype _Val) noexcept {\r\n        return _STD addressof(_Val);\r\n    }\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty>\r\nconcept _Has_to_address = requires(const _Ty& _Val) {\r\n    typename pointer_traits<_Ty>;\r\n    pointer_traits<_Ty>::to_address(_Val);\r\n};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD constexpr _Ty* to_address(_Ty* const _Val) noexcept {\r\n    static_assert(!is_function_v<_Ty>, \"N4950 [pointer.conversion]/1: Mandates: T is not a function type.\");\r\n    return _Val;\r\n}\r\n\r\n_EXPORT_STD template <class _Ptr>\r\n_NODISCARD constexpr auto to_address(const _Ptr& _Val) noexcept {\r\n    if constexpr (_Has_to_address<_Ptr>) {\r\n        return pointer_traits<_Ptr>::to_address(_Val);\r\n    } else {\r\n        return _STD to_address(_Val.operator->()); // plain pointer overload must come first\r\n    }\r\n}\r\n\r\n_EXPORT_STD struct identity {\r\n    template <class _Ty>\r\n    _NODISCARD constexpr _Ty&& operator()(_Ty&& _Left) const noexcept {\r\n        return _STD forward<_Ty>(_Left);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct plus {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = _Ty;\r\n\r\n    _NODISCARD constexpr _Ty operator()(const _Ty& _Left, const _Ty& _Right) const {\r\n        return _Left + _Right;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct minus {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = _Ty;\r\n\r\n    _NODISCARD constexpr _Ty operator()(const _Ty& _Left, const _Ty& _Right) const {\r\n        return _Left - _Right;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct multiplies {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = _Ty;\r\n\r\n    _NODISCARD constexpr _Ty operator()(const _Ty& _Left, const _Ty& _Right) const {\r\n        return _Left * _Right;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct equal_to {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = bool;\r\n\r\n    _NODISCARD constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left == _Right))) /* strengthened */ {\r\n        return _Left == _Right;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct not_equal_to {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = bool;\r\n\r\n    _NODISCARD constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left != _Right))) /* strengthened */ {\r\n        return _Left != _Right;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct greater {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = bool;\r\n\r\n    _NODISCARD constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left > _Right))) /* strengthened */ {\r\n        return _Left > _Right;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct greater_equal {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = bool;\r\n\r\n    _NODISCARD constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left >= _Right))) /* strengthened */ {\r\n        return _Left >= _Right;\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Ty = void>\r\nstruct less_equal {\r\n    using _FIRST_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS  = _Ty;\r\n    using _SECOND_ARGUMENT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS = _Ty;\r\n    using _RESULT_TYPE_NAME _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS          = bool;\r\n\r\n    _NODISCARD constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left <= _Right))) /* strengthened */ {\r\n        return _Left <= _Right;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct plus<void> {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const\r\n        noexcept(noexcept(static_cast<_Ty1&&>(_Left) + static_cast<_Ty2&&>(_Right))) // strengthened\r\n        -> decltype(static_cast<_Ty1&&>(_Left) + static_cast<_Ty2&&>(_Right)) {\r\n        return static_cast<_Ty1&&>(_Left) + static_cast<_Ty2&&>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <>\r\nstruct minus<void> {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const\r\n        noexcept(noexcept(static_cast<_Ty1&&>(_Left) - static_cast<_Ty2&&>(_Right))) // strengthened\r\n        -> decltype(static_cast<_Ty1&&>(_Left) - static_cast<_Ty2&&>(_Right)) {\r\n        return static_cast<_Ty1&&>(_Left) - static_cast<_Ty2&&>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <>\r\nstruct multiplies<void> {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const\r\n        noexcept(noexcept(static_cast<_Ty1&&>(_Left) * static_cast<_Ty2&&>(_Right))) // strengthened\r\n        -> decltype(static_cast<_Ty1&&>(_Left) * static_cast<_Ty2&&>(_Right)) {\r\n        return static_cast<_Ty1&&>(_Left) * static_cast<_Ty2&&>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <>\r\nstruct equal_to<void> {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const\r\n        noexcept(noexcept(static_cast<_Ty1&&>(_Left) == static_cast<_Ty2&&>(_Right))) // strengthened\r\n        -> decltype(static_cast<_Ty1&&>(_Left) == static_cast<_Ty2&&>(_Right)) {\r\n        return static_cast<_Ty1&&>(_Left) == static_cast<_Ty2&&>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <>\r\nstruct not_equal_to<void> {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const\r\n        noexcept(noexcept(static_cast<_Ty1&&>(_Left) != static_cast<_Ty2&&>(_Right))) // strengthened\r\n        -> decltype(static_cast<_Ty1&&>(_Left) != static_cast<_Ty2&&>(_Right)) {\r\n        return static_cast<_Ty1&&>(_Left) != static_cast<_Ty2&&>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <>\r\nstruct greater<void> {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const\r\n        noexcept(noexcept(static_cast<_Ty1&&>(_Left) > static_cast<_Ty2&&>(_Right))) // strengthened\r\n        -> decltype(static_cast<_Ty1&&>(_Left) > static_cast<_Ty2&&>(_Right)) {\r\n        return static_cast<_Ty1&&>(_Left) > static_cast<_Ty2&&>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <>\r\nstruct greater_equal<void> {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const\r\n        noexcept(noexcept(static_cast<_Ty1&&>(_Left) >= static_cast<_Ty2&&>(_Right))) // strengthened\r\n        -> decltype(static_cast<_Ty1&&>(_Left) >= static_cast<_Ty2&&>(_Right)) {\r\n        return static_cast<_Ty1&&>(_Left) >= static_cast<_Ty2&&>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <>\r\nstruct less_equal<void> {\r\n    template <class _Ty1, class _Ty2>\r\n    _NODISCARD constexpr auto operator()(_Ty1&& _Left, _Ty2&& _Right) const\r\n        noexcept(noexcept(static_cast<_Ty1&&>(_Left) <= static_cast<_Ty2&&>(_Right))) // strengthened\r\n        -> decltype(static_cast<_Ty1&&>(_Left) <= static_cast<_Ty2&&>(_Right)) {\r\n        return static_cast<_Ty1&&>(_Left) <= static_cast<_Ty2&&>(_Right);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n\r\ntemplate <class _Fx>\r\nstruct _Ref_fn { // pass function object by value as a reference\r\n    // _Ref_fn is an aggregate so it can be enregistered, unlike reference_wrapper\r\n\r\n    template <class... _Args>\r\n    constexpr decltype(auto) operator()(_Args&&... _Vals) noexcept(\r\n        _Select_invoke_traits<_Fx&, _Args...>::_Is_nothrow_invocable::value) { // forward function call operator\r\n        if constexpr (is_member_pointer_v<_Fx>) {\r\n            return _STD invoke(_Fn, _STD forward<_Args>(_Vals)...);\r\n        } else {\r\n            return _Fn(_STD forward<_Args>(_Vals)...);\r\n        }\r\n    }\r\n\r\n    _Fx& _Fn;\r\n};\r\n\r\ntemplate <class _Fn>\r\n_NODISCARD constexpr auto _Pass_fn(_Fn& _Func) noexcept {\r\n    constexpr bool _Pass_by_value = conjunction_v<bool_constant<sizeof(_Fn) <= sizeof(void*)>,\r\n        is_trivially_copy_constructible<_Fn>, is_trivially_destructible<_Fn>>;\r\n    if constexpr (_Pass_by_value) {\r\n        return _Func;\r\n    } else {\r\n        return _Ref_fn<_Fn>{_Func}; // pass functor by \"reference\"\r\n    }\r\n}\r\n\r\n#if _HAS_CXX23\r\n_EXPORT_STD template <class _Result_type, class _Callable, class... _Types>\r\n    requires is_invocable_r_v<_Result_type, _Callable, _Types...>\r\n_NODISCARD constexpr _Result_type invoke_r(_Callable&& _Obj, _Types&&... _Args)\r\n    noexcept(is_nothrow_invocable_r_v<_Result_type, _Callable, _Types...>) {\r\n    if constexpr (is_void_v<_Result_type>) {\r\n        (void) _STD invoke(static_cast<_Callable&&>(_Obj), static_cast<_Types&&>(_Args)...);\r\n    } else {\r\n        return _STD invoke(static_cast<_Callable&&>(_Obj), static_cast<_Types&&>(_Args)...);\r\n    }\r\n}\r\n#endif // _HAS_CXX23\r\n\r\nstruct _Unused_parameter { // generic unused parameter struct\r\n    constexpr _Unused_parameter() noexcept = default;\r\n    template <class _Ty>\r\n    constexpr _Unused_parameter(_Ty&&) noexcept {}\r\n};\r\n\r\ntemplate <class _Ty>\r\nusing _Algorithm_int_t = conditional_t<is_integral_v<_Ty>, _Ty, ptrdiff_t>;\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty>\r\nconcept _Destructible_object = is_object_v<_Ty> && destructible<_Ty>;\r\n\r\nnamespace ranges {\r\n    namespace _Iter_move {\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1681199\r\n        void iter_move() = delete; // Block unqualified name lookup\r\n#else // ^^^ no workaround / workaround vvv\r\n        void iter_move();\r\n#endif // ^^^ workaround ^^^\r\n\r\n        template <class _Ty>\r\n        concept _Has_ADL = _Has_class_or_enum_type<_Ty> && requires(_Ty&& __t) {\r\n            iter_move(static_cast<_Ty &&>(__t)); // intentional ADL\r\n        };\r\n\r\n        template <class _Ty>\r\n        concept _Can_deref = requires(_Ty&& __t) { *static_cast<_Ty &&>(__t); };\r\n\r\n        struct _Must_have_ADL_found_iter_move_or_be_dereferenceable {};\r\n\r\n        class _Cpo {\r\n        private:\r\n            template <class _Ty>\r\n            _NODISCARD static auto _Choose_return_type() {\r\n                if constexpr (_Has_ADL<_Ty>) {\r\n                    return type_identity<decltype(iter_move(_STD declval<_Ty>()))>{}; // intentional ADL\r\n                } else if constexpr (_Can_deref<_Ty>) {\r\n                    using _Ref = decltype(*_STD declval<_Ty>());\r\n                    if constexpr (is_lvalue_reference_v<_Ref>) {\r\n                        return type_identity<remove_reference_t<_Ref>&&>{};\r\n                    } else {\r\n                        return type_identity<_Ref>{};\r\n                    }\r\n                } else {\r\n                    return _Must_have_ADL_found_iter_move_or_be_dereferenceable{};\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            using _Return_type = decltype(_Choose_return_type<_Ty>())::type;\r\n\r\n            enum class _St { _None, _Custom, _Fallback };\r\n\r\n            template <class _Ty>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                if constexpr (_Has_ADL<_Ty>) {\r\n                    return {_St::_Custom, noexcept(iter_move(_STD declval<_Ty>()))}; // intentional ADL\r\n                } else if constexpr (_Can_deref<_Ty>) {\r\n                    return {_St::_Fallback, noexcept(*_STD declval<_Ty>())};\r\n                } else {\r\n                    return {_St::_None};\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Ty>();\r\n\r\n        public:\r\n            template <class _Ty>\r\n            _NODISCARD static constexpr _Return_type<_Ty> operator()(_Ty&& _Val) noexcept(_Choice<_Ty>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Ty>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_Custom) {\r\n                    return iter_move(static_cast<_Ty&&>(_Val)); // intentional ADL\r\n                } else if constexpr (_Strat == _St::_Fallback) {\r\n                    using _Ref = decltype(*static_cast<_Ty&&>(_Val));\r\n                    if constexpr (is_lvalue_reference_v<_Ref>) {\r\n                        return _STD move(*static_cast<_Ty&&>(_Val));\r\n                    } else {\r\n                        return *static_cast<_Ty&&>(_Val);\r\n                    }\r\n                } else {\r\n                    static_assert(false); // unexpected strategy\r\n                }\r\n            }\r\n        };\r\n    } // namespace _Iter_move\r\n\r\n    inline namespace _Cpos {\r\n        _EXPORT_STD inline constexpr _Iter_move::_Cpo iter_move;\r\n    }\r\n} // namespace ranges\r\n\r\n// iter_swap defined below since it depends on indirectly_movable_storable\r\n\r\n_EXPORT_STD template <class _Ty>\r\n    requires _Dereferenceable<_Ty> && requires(_Ty& __t) {\r\n        { _RANGES iter_move(__t) } -> _Can_reference;\r\n    }\r\nusing iter_rvalue_reference_t = decltype(_RANGES iter_move(_STD declval<_Ty&>()));\r\n\r\ntemplate <class _It>\r\nconcept _Indirectly_readable_impl =\r\n    requires(const _It __i) {\r\n        typename iter_value_t<_It>;\r\n        typename iter_reference_t<_It>;\r\n        typename iter_rvalue_reference_t<_It>;\r\n        { *__i } -> same_as<iter_reference_t<_It>>;\r\n        { _RANGES iter_move(__i) } -> same_as<iter_rvalue_reference_t<_It>>;\r\n    } && common_reference_with<iter_reference_t<_It>&&, iter_value_t<_It>&>\r\n    && common_reference_with<iter_reference_t<_It>&&, iter_rvalue_reference_t<_It>&&>\r\n    && common_reference_with<iter_rvalue_reference_t<_It>&&, const iter_value_t<_It>&>;\r\n\r\n_EXPORT_STD template <class _It>\r\nconcept indirectly_readable = _Indirectly_readable_impl<remove_cvref_t<_It>>;\r\n\r\ntemplate <class _Ty>\r\nstruct _Indirect_value_impl {\r\n    using type = iter_value_t<_Ty>&;\r\n};\r\n\r\ntemplate <indirectly_readable _It>\r\nusing _Indirect_value_t = _Indirect_value_impl<_It>::type;\r\n\r\n_EXPORT_STD template <indirectly_readable _Ty>\r\nusing iter_common_reference_t = common_reference_t<iter_reference_t<_Ty>, _Indirect_value_t<_Ty>>;\r\n\r\n_EXPORT_STD template <class _It, class _Ty>\r\nconcept indirectly_writable = requires(_It&& __i, _Ty&& __t) {\r\n    *__i                                                                  = static_cast<_Ty &&>(__t);\r\n    *static_cast<_It &&>(__i)                                             = static_cast<_Ty &&>(__t);\r\n    const_cast<const iter_reference_t<_It> &&>(*__i)                      = static_cast<_Ty &&>(__t);\r\n    const_cast<const iter_reference_t<_It> &&>(*static_cast<_It &&>(__i)) = static_cast<_Ty &&>(__t);\r\n};\r\n\r\ntemplate <bool _Is_integer_class>\r\nstruct _Make_unsigned_like_impl {\r\n    template <class _Ty>\r\n    using _Apply = _Ty::_Unsigned_type;\r\n};\r\ntemplate <>\r\nstruct _Make_unsigned_like_impl<false> {\r\n    template <class _Ty>\r\n    using _Apply = make_unsigned_t<_Ty>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nusing _Make_unsigned_like_t = _Make_unsigned_like_impl<_Integer_class<_Ty>>::template _Apply<_Ty>;\r\n\r\ntemplate <_Integer_like _Ty>\r\n_NODISCARD constexpr auto _To_unsigned_like(const _Ty _Value) noexcept {\r\n    return static_cast<_Make_unsigned_like_t<_Ty>>(_Value);\r\n}\r\n\r\ntemplate <bool _Is_integer_class>\r\nstruct _Make_signed_like_impl {\r\n    template <class _Ty>\r\n    using _Apply = _Ty::_Signed_type;\r\n};\r\ntemplate <>\r\nstruct _Make_signed_like_impl<false> {\r\n    template <class _Ty>\r\n    using _Apply = make_signed_t<_Ty>;\r\n};\r\n\r\ntemplate <class _Ty>\r\nusing _Make_signed_like_t = _Make_signed_like_impl<_Integer_class<_Ty>>::template _Apply<_Ty>;\r\n\r\n_EXPORT_STD template <class _Ty>\r\nconcept incrementable = regular<_Ty> && weakly_incrementable<_Ty> && requires(_Ty __t) {\r\n    { __t++ } -> same_as<_Ty>;\r\n};\r\n\r\ntemplate <bool _Iterator_category_present>\r\nstruct _Iter_concept_impl2 {\r\n    template <class _It, class _Traits>\r\n    using _Apply = _Traits::iterator_category;\r\n};\r\ntemplate <>\r\nstruct _Iter_concept_impl2<false> {\r\n    template <class _It, class _Traits>\r\n        requires _Is_from_primary<iterator_traits<_It>>\r\n    using _Apply = random_access_iterator_tag;\r\n};\r\n\r\ntemplate <bool _Iterator_concept_present>\r\nstruct _Iter_concept_impl1 {\r\n    template <class _It, class _Traits>\r\n    using _Apply = _Traits::iterator_concept;\r\n};\r\ntemplate <>\r\nstruct _Iter_concept_impl1<false> {\r\n    template <class _It, class _Traits>\r\n    using _Apply = _Iter_concept_impl2<_Has_member_iterator_category<_Traits>>::template _Apply<_It, _Traits>;\r\n};\r\n\r\ntemplate <class _It, class _Traits = conditional_t<_Is_from_primary<iterator_traits<_It>>, _It, iterator_traits<_It>>>\r\nusing _Iter_concept = _Iter_concept_impl1<_Has_member_iterator_concept<_Traits>>::template _Apply<_It, _Traits>;\r\n\r\n_EXPORT_STD template <class _It>\r\nconcept input_iterator = input_or_output_iterator<_It> && indirectly_readable<_It> && requires {\r\n    typename _Iter_concept<_It>;\r\n} && derived_from<_Iter_concept<_It>, input_iterator_tag>;\r\n\r\n_EXPORT_STD template <class _It, class _Ty>\r\nconcept output_iterator = input_or_output_iterator<_It> && indirectly_writable<_It, _Ty>\r\n                       && requires(_It __i, _Ty&& __t) { *__i++ = static_cast<_Ty &&>(__t); };\r\n\r\n_EXPORT_STD template <class _It>\r\nconcept forward_iterator = input_iterator<_It> && derived_from<_Iter_concept<_It>, forward_iterator_tag>\r\n                        && incrementable<_It> && sentinel_for<_It, _It>;\r\n\r\n_EXPORT_STD template <class _It>\r\nconcept bidirectional_iterator =\r\n    forward_iterator<_It> && derived_from<_Iter_concept<_It>, bidirectional_iterator_tag> && requires(_It __i) {\r\n        { --__i } -> same_as<_It&>;\r\n        { __i-- } -> same_as<_It>;\r\n    };\r\n\r\n_EXPORT_STD template <class _It>\r\nconcept random_access_iterator =\r\n    bidirectional_iterator<_It> && derived_from<_Iter_concept<_It>, random_access_iterator_tag> && totally_ordered<_It>\r\n    && sized_sentinel_for<_It, _It> && requires(_It __i, const _It __j, const iter_difference_t<_It> __n) {\r\n           { __i += __n } -> same_as<_It&>;\r\n           { __j + __n } -> same_as<_It>;\r\n           { __n + __j } -> same_as<_It>;\r\n           { __i -= __n } -> same_as<_It&>;\r\n           { __j - __n } -> same_as<_It>;\r\n           { __j[__n] } -> same_as<iter_reference_t<_It>>;\r\n       };\r\n\r\n_EXPORT_STD template <class _It>\r\nconcept contiguous_iterator =\r\n    random_access_iterator<_It> && derived_from<_Iter_concept<_It>, contiguous_iterator_tag>\r\n    && is_lvalue_reference_v<iter_reference_t<_It>> && same_as<iter_value_t<_It>, remove_cvref_t<iter_reference_t<_It>>>\r\n    && requires(const _It& __i) {\r\n           { _STD to_address(__i) } -> same_as<add_pointer_t<iter_reference_t<_It>>>;\r\n       };\r\n\r\n_EXPORT_STD template <class _Fn, class _It>\r\nconcept indirectly_unary_invocable = indirectly_readable<_It> && copy_constructible<_Fn>\r\n                                  && invocable<_Fn&, _Indirect_value_t<_It>> && invocable<_Fn&, iter_reference_t<_It>>\r\n                                  && common_reference_with<invoke_result_t<_Fn&, _Indirect_value_t<_It>>,\r\n                                      invoke_result_t<_Fn&, iter_reference_t<_It>>>;\r\n\r\n_EXPORT_STD template <class _Fn, class _It>\r\nconcept indirectly_regular_unary_invocable =\r\n    indirectly_readable<_It> && copy_constructible<_Fn> && regular_invocable<_Fn&, _Indirect_value_t<_It>>\r\n    && regular_invocable<_Fn&, iter_reference_t<_It>>\r\n    && common_reference_with<invoke_result_t<_Fn&, _Indirect_value_t<_It>>,\r\n        invoke_result_t<_Fn&, iter_reference_t<_It>>>;\r\n\r\n_EXPORT_STD template <class _Fn, class _It>\r\nconcept indirect_unary_predicate = indirectly_readable<_It> && copy_constructible<_Fn>\r\n                                && predicate<_Fn&, _Indirect_value_t<_It>> && predicate<_Fn&, iter_reference_t<_It>>;\r\n\r\n_EXPORT_STD template <class _Fn, class _It1, class _It2>\r\nconcept indirect_binary_predicate = indirectly_readable<_It1> && indirectly_readable<_It2> && copy_constructible<_Fn>\r\n                                 && predicate<_Fn&, _Indirect_value_t<_It1>, _Indirect_value_t<_It2>>\r\n                                 && predicate<_Fn&, _Indirect_value_t<_It1>, iter_reference_t<_It2>>\r\n                                 && predicate<_Fn&, iter_reference_t<_It1>, _Indirect_value_t<_It2>>\r\n                                 && predicate<_Fn&, iter_reference_t<_It1>, iter_reference_t<_It2>>;\r\n\r\n_EXPORT_STD template <class _Fn, class _It1, class _It2 = _It1>\r\nconcept indirect_equivalence_relation =\r\n    indirectly_readable<_It1> && indirectly_readable<_It2> && copy_constructible<_Fn>\r\n    && equivalence_relation<_Fn&, _Indirect_value_t<_It1>, _Indirect_value_t<_It2>>\r\n    && equivalence_relation<_Fn&, _Indirect_value_t<_It1>, iter_reference_t<_It2>>\r\n    && equivalence_relation<_Fn&, iter_reference_t<_It1>, _Indirect_value_t<_It2>>\r\n    && equivalence_relation<_Fn&, iter_reference_t<_It1>, iter_reference_t<_It2>>;\r\n\r\n_EXPORT_STD template <class _Fn, class _It1, class _It2 = _It1>\r\nconcept indirect_strict_weak_order = indirectly_readable<_It1> && indirectly_readable<_It2> && copy_constructible<_Fn>\r\n                                  && strict_weak_order<_Fn&, _Indirect_value_t<_It1>, _Indirect_value_t<_It2>>\r\n                                  && strict_weak_order<_Fn&, _Indirect_value_t<_It1>, iter_reference_t<_It2>>\r\n                                  && strict_weak_order<_Fn&, iter_reference_t<_It1>, _Indirect_value_t<_It2>>\r\n                                  && strict_weak_order<_Fn&, iter_reference_t<_It1>, iter_reference_t<_It2>>;\r\n\r\n_EXPORT_STD template <class _Fn, class... _Its>\r\n    requires (indirectly_readable<_Its> && ...) && invocable<_Fn, iter_reference_t<_Its>...>\r\nusing indirect_result_t = invoke_result_t<_Fn, iter_reference_t<_Its>...>;\r\n\r\ntemplate <class _It>\r\nstruct _Projected_difference_type_impl {\r\n    struct _Base {};\r\n};\r\n\r\ntemplate <weakly_incrementable _It>\r\nstruct _Projected_difference_type_impl<_It> {\r\n    struct _Base {\r\n        using difference_type = iter_difference_t<_It>;\r\n    };\r\n};\r\n\r\ntemplate <class _It, class _Proj>\r\nstruct _Projected_impl {\r\n    struct _Type : _Projected_difference_type_impl<_It>::_Base {\r\n        using _Iterator   = _It;\r\n        using _Projection = _Proj;\r\n\r\n        using value_type = remove_cvref_t<indirect_result_t<_Proj&, _It>>;\r\n        [[noreturn]] indirect_result_t<_Proj&, _It> operator*() const {\r\n            static_assert(\r\n                false, \"std::projected::operator*() can't be instantiated (N5008 [projected] as modified by LWG-4270)\");\r\n        }\r\n    };\r\n};\r\n\r\n_EXPORT_STD template <indirectly_readable _It, indirectly_regular_unary_invocable<_It> _Proj>\r\nusing projected = _Projected_impl<_It, _Proj>::_Type;\r\n\r\ntemplate <class _Ty>\r\nconcept _Projected_specialization = same_as<_Ty, projected<typename _Ty::_Iterator, typename _Ty::_Projection>>;\r\n\r\ntemplate <_Projected_specialization _ProjTy>\r\nstruct _Indirect_value_impl<_ProjTy> {\r\n    using type = invoke_result_t<typename _ProjTy::_Projection&, _Indirect_value_t<typename _ProjTy::_Iterator>>;\r\n};\r\n\r\n_EXPORT_STD template <class _In, class _Out>\r\nconcept indirectly_movable = indirectly_readable<_In> && indirectly_writable<_Out, iter_rvalue_reference_t<_In>>;\r\n\r\n_EXPORT_STD template <class _In, class _Out>\r\nconcept indirectly_movable_storable =\r\n    indirectly_movable<_In, _Out> && indirectly_writable<_Out, iter_value_t<_In>> && movable<iter_value_t<_In>>\r\n    && constructible_from<iter_value_t<_In>, iter_rvalue_reference_t<_In>>\r\n    && assignable_from<iter_value_t<_In>&, iter_rvalue_reference_t<_In>>;\r\n\r\n_EXPORT_STD template <class _In, class _Out>\r\nconcept indirectly_copyable = indirectly_readable<_In> && indirectly_writable<_Out, iter_reference_t<_In>>;\r\n\r\n_EXPORT_STD template <class _In, class _Out>\r\nconcept indirectly_copyable_storable =\r\n    indirectly_copyable<_In, _Out> && indirectly_writable<_Out, iter_value_t<_In>&>\r\n    && indirectly_writable<_Out, const iter_value_t<_In>&> && indirectly_writable<_Out, iter_value_t<_In>&&>\r\n    && indirectly_writable<_Out, const iter_value_t<_In>&&> && copyable<iter_value_t<_In>>\r\n    && constructible_from<iter_value_t<_In>, iter_reference_t<_In>>\r\n    && assignable_from<iter_value_t<_In>&, iter_reference_t<_In>>;\r\n\r\nnamespace ranges {\r\n    namespace _Iter_swap {\r\n        template <class _Ty1, class _Ty2>\r\n        void iter_swap(_Ty1, _Ty2) = delete;\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        concept _Has_ADL =\r\n            (_Has_class_or_enum_type<_Ty1> || _Has_class_or_enum_type<_Ty2>) && requires(_Ty1&& __t1, _Ty2&& __t2) {\r\n                iter_swap(static_cast<_Ty1 &&>(__t1), static_cast<_Ty2 &&>(__t2)); // intentional ADL\r\n            };\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        concept _Can_swap_references =\r\n            indirectly_readable<remove_reference_t<_Ty1>> && indirectly_readable<remove_reference_t<_Ty2>>\r\n            && swappable_with<iter_reference_t<_Ty1>, iter_reference_t<_Ty2>>;\r\n\r\n        template <class _Ty1, class _Ty2>\r\n        concept _Symmetric_indirectly_movable_storable =\r\n            indirectly_movable_storable<remove_reference_t<_Ty1>, remove_reference_t<_Ty2>>\r\n            && indirectly_movable_storable<remove_reference_t<_Ty2>, remove_reference_t<_Ty1>>;\r\n\r\n        template <class _Xty, class _Yty>\r\n        _NODISCARD constexpr iter_value_t<remove_reference_t<_Xty>> _Iter_exchange_move(_Xty&& _XVal, _Yty&& _YVal)\r\n            noexcept(noexcept(iter_value_t<remove_reference_t<_Xty>>(_RANGES iter_move(_XVal)))) {\r\n            iter_value_t<remove_reference_t<_Xty>> _Tmp(_RANGES iter_move(_XVal));\r\n            *_XVal = _RANGES iter_move(_YVal);\r\n            return _Tmp;\r\n        }\r\n\r\n        class _Cpo {\r\n        private:\r\n            enum class _St { _None, _Custom, _Swap, _Exchange };\r\n\r\n            template <class _Ty1, class _Ty2>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                if constexpr (_Has_ADL<_Ty1, _Ty2>) {\r\n                    return {_St::_Custom,\r\n                        noexcept(iter_swap(_STD declval<_Ty1>(), _STD declval<_Ty2>()))}; // intentional ADL\r\n                } else if constexpr (_Can_swap_references<_Ty1, _Ty2>) {\r\n                    return {_St::_Swap, noexcept(_RANGES swap(*_STD declval<_Ty1>(), *_STD declval<_Ty2>()))};\r\n                } else if constexpr (_Symmetric_indirectly_movable_storable<_Ty1, _Ty2>) {\r\n                    constexpr auto _Nothrow = noexcept(*_STD declval<_Ty1>() = _Iter_swap::_Iter_exchange_move(\r\n                                                           _STD declval<_Ty2>(), _STD declval<_Ty1>()));\r\n                    return {_St::_Exchange, _Nothrow};\r\n                } else {\r\n                    return {_St::_None};\r\n                }\r\n            }\r\n\r\n            template <class _Ty1, class _Ty2>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Ty1, _Ty2>();\r\n\r\n        public:\r\n            template <class _Ty1, class _Ty2>\r\n                requires (_Choice<_Ty1, _Ty2>._Strategy != _St::_None)\r\n            static constexpr void operator()(_Ty1&& _Val1, _Ty2&& _Val2) noexcept(_Choice<_Ty1, _Ty2>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Ty1, _Ty2>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_Custom) {\r\n                    (void) iter_swap(static_cast<_Ty1&&>(_Val1), static_cast<_Ty2&&>(_Val2)); // intentional ADL\r\n                } else if constexpr (_Strat == _St::_Swap) {\r\n                    _RANGES swap(*static_cast<_Ty1&&>(_Val1), *static_cast<_Ty2&&>(_Val2));\r\n                } else if constexpr (_Strat == _St::_Exchange) {\r\n                    *static_cast<_Ty1&&>(_Val1) =\r\n                        _Iter_swap::_Iter_exchange_move(static_cast<_Ty2&&>(_Val2), static_cast<_Ty1&&>(_Val1));\r\n                } else {\r\n                    static_assert(false); // unexpected strategy\r\n                }\r\n            }\r\n        };\r\n    } // namespace _Iter_swap\r\n\r\n    inline namespace _Cpos {\r\n        _EXPORT_STD inline constexpr _Iter_swap::_Cpo iter_swap;\r\n    }\r\n} // namespace ranges\r\n\r\n_EXPORT_STD template <class _It1, class _It2 = _It1>\r\nconcept indirectly_swappable =\r\n    indirectly_readable<_It1> && indirectly_readable<_It2> && requires(const _It1 __i1, const _It2 __i2) {\r\n        _RANGES iter_swap(__i1, __i1);\r\n        _RANGES iter_swap(__i2, __i2);\r\n        _RANGES iter_swap(__i1, __i2);\r\n        _RANGES iter_swap(__i2, __i1);\r\n    };\r\n\r\n_EXPORT_STD template <class _It1, class _It2, class _Rel, class _Proj1 = identity, class _Proj2 = identity>\r\nconcept indirectly_comparable = indirect_binary_predicate<_Rel, projected<_It1, _Proj1>, projected<_It2, _Proj2>>;\r\n\r\n_EXPORT_STD template <class _It>\r\nconcept permutable = forward_iterator<_It> && indirectly_movable_storable<_It, _It> && indirectly_swappable<_It, _It>;\r\n\r\nnamespace ranges {\r\n    _EXPORT_STD struct less;\r\n} // namespace ranges\r\n\r\n_EXPORT_STD template <class _It1, class _It2, class _Out, class _Pr = ranges::less, class _Pj1 = identity,\r\n    class _Pj2 = identity>\r\nconcept mergeable =\r\n    input_iterator<_It1> && input_iterator<_It2> && weakly_incrementable<_Out> && indirectly_copyable<_It1, _Out>\r\n    && indirectly_copyable<_It2, _Out> && indirect_strict_weak_order<_Pr, projected<_It1, _Pj1>, projected<_It2, _Pj2>>;\r\n\r\n_EXPORT_STD template <class _It, class _Pr = ranges::less, class _Proj = identity>\r\nconcept sortable = permutable<_It> && indirect_strict_weak_order<_Pr, projected<_It, _Proj>>;\r\n\r\ntemplate <class _Iter>\r\nusing _Iter_ref_t = iter_reference_t<_Iter>;\r\n\r\ntemplate <class _Iter>\r\nusing _Iter_value_t = iter_value_t<_Iter>;\r\n\r\ntemplate <class _Iter>\r\nusing _Iter_diff_t = iter_difference_t<_Iter>;\r\n\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Iter>\r\nusing _Iter_ref_t = typename iterator_traits<_Iter>::reference;\r\n\r\ntemplate <class _Iter>\r\nusing _Iter_value_t = typename iterator_traits<_Iter>::value_type;\r\n\r\ntemplate <class _Iter>\r\nusing _Iter_diff_t = typename iterator_traits<_Iter>::difference_type;\r\n\r\ntemplate <class _Ty>\r\nusing _Make_unsigned_like_t = make_unsigned_t<_Ty>;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\ntemplate <class... _Iters>\r\nusing _Common_diff_t = common_type_t<_Iter_diff_t<_Iters>...>;\r\n\r\ntemplate <class _Iter>\r\nusing _Iter_cat_t = typename iterator_traits<_Iter>::iterator_category;\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Ty>\r\nconcept _Iterator_for_container = requires { typename _Iter_cat_t<_Ty>; };\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_iterator_v = _Iterator_for_container<_Ty>;\r\n\r\ntemplate <class _Ty>\r\nstruct _Is_iterator : bool_constant<_Iterator_for_container<_Ty>> {};\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ty, class = void>\r\nconstexpr bool _Is_iterator_v = false;\r\n\r\ntemplate <class _Ty>\r\nconstexpr bool _Is_iterator_v<_Ty, void_t<_Iter_cat_t<_Ty>>> = true;\r\n\r\ntemplate <class _Ty>\r\nstruct _Is_iterator : bool_constant<_Is_iterator_v<_Ty>> {};\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\ntemplate <class _Iter>\r\nconstexpr bool _Is_cpp17_input_iter_v = is_convertible_v<_Iter_cat_t<_Iter>, input_iterator_tag>;\r\n\r\ntemplate <class _Iter>\r\nconstexpr bool _Is_ranges_input_iter_v =\r\n#if _HAS_CXX20\r\n    (input_iterator<_Iter> && sentinel_for<_Iter, _Iter>) ||\r\n#endif\r\n    _Is_cpp17_input_iter_v<_Iter>;\r\n\r\ntemplate <class _Iter>\r\nconstexpr bool _Is_cpp17_fwd_iter_v = is_convertible_v<_Iter_cat_t<_Iter>, forward_iterator_tag>;\r\n\r\ntemplate <class _Iter>\r\nconstexpr bool _Is_ranges_fwd_iter_v =\r\n#if _HAS_CXX20\r\n    forward_iterator<_Iter> ||\r\n#endif\r\n    _Is_cpp17_fwd_iter_v<_Iter>;\r\n\r\ntemplate <class _Iter>\r\nconstexpr bool _Is_cpp17_bidi_iter_v = is_convertible_v<_Iter_cat_t<_Iter>, bidirectional_iterator_tag>;\r\n\r\ntemplate <class _Iter>\r\nconstexpr bool _Is_ranges_bidi_iter_v =\r\n#if _HAS_CXX20\r\n    bidirectional_iterator<_Iter> ||\r\n#endif\r\n    _Is_cpp17_bidi_iter_v<_Iter>;\r\n\r\ntemplate <class _Iter>\r\nconstexpr bool _Is_cpp17_random_iter_v = is_convertible_v<_Iter_cat_t<_Iter>, random_access_iterator_tag>;\r\n\r\ntemplate <class _Iter>\r\nconstexpr bool _Is_ranges_random_iter_v =\r\n#if _HAS_CXX20\r\n    random_access_iterator<_Iter> ||\r\n#endif\r\n    _Is_cpp17_random_iter_v<_Iter>;\r\n\r\n#define _REQUIRE_CPP17_MUTABLE_ITERATOR(_Iter) \\\r\n    static_assert(_Is_cpp17_fwd_iter_v<_Iter>, \\\r\n        \"Non-ranges algorithms require that mutable iterators be Cpp17ForwardIterators or stronger.\")\r\n\r\n#define _REQUIRE_CPP17_MUTABLE_BIDIRECTIONAL_ITERATOR(_Iter) \\\r\n    static_assert(_Is_cpp17_bidi_iter_v<_Iter>,              \\\r\n        \"This algorithm requires that mutable iterators be Cpp17BidirectionalIterators or stronger.\")\r\n\r\ntemplate <class, class = void>\r\nstruct _Is_checked_helper {}; // default definition, no longer used, retained due to pseudo-documentation\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\ntemplate <class _Ty>\r\nconstexpr void _Verify_range(const _Ty* const _First, const _Ty* const _Last) noexcept {\r\n    // special case range verification for pointers\r\n    _STL_VERIFY(_First <= _Last, \"transposed pointer range\");\r\n}\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\ntemplate <class _Iter, class = void>\r\nconstexpr bool _Allow_inheriting_unwrap_v = true;\r\n\r\ntemplate <class _Iter>\r\nconstexpr bool _Allow_inheriting_unwrap_v<_Iter, void_t<typename _Iter::_Prevent_inheriting_unwrap>> =\r\n    is_same_v<_Iter, typename _Iter::_Prevent_inheriting_unwrap>;\r\n\r\ntemplate <class _Iter, class _Sentinel = _Iter, class = void>\r\nconstexpr bool _Range_verifiable_v = false;\r\n\r\ntemplate <class _Iter, class _Sentinel>\r\nconstexpr bool _Range_verifiable_v<_Iter, _Sentinel,\r\n    void_t<decltype(_Verify_range(_STD declval<const _Iter&>(), _STD declval<const _Sentinel&>()))>> =\r\n    _Allow_inheriting_unwrap_v<_Iter>;\r\n\r\ntemplate <class _Iter, class _Sentinel>\r\nconstexpr void _Adl_verify_range(const _Iter& _First, const _Sentinel& _Last) {\r\n    // check that [_First, _Last) forms an iterator range\r\n    if constexpr (is_pointer_v<_Iter> && is_pointer_v<_Sentinel>) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_First <= _Last, \"transposed pointer range\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    } else if constexpr (_Range_verifiable_v<_Iter, _Sentinel>) {\r\n        _Verify_range(_First, _Last);\r\n    }\r\n}\r\n\r\ntemplate <class _Iter, class = void>\r\nconstexpr bool _Unwrappable_v = false;\r\n\r\ntemplate <class _Iter>\r\nconstexpr bool _Unwrappable_v<_Iter,\r\n    void_t<decltype(_STD declval<_Remove_cvref_t<_Iter>&>()._Seek_to(_STD declval<_Iter>()._Unwrapped()))>> =\r\n    _Allow_inheriting_unwrap_v<_Remove_cvref_t<_Iter>>;\r\n\r\ntemplate <class _Iter, class = void>\r\nconstexpr bool _Has_nothrow_unwrapped = false;\r\ntemplate <class _Iter>\r\nconstexpr bool _Has_nothrow_unwrapped<_Iter, void_t<decltype(_STD declval<_Iter>()._Unwrapped())>> =\r\n    noexcept(_STD declval<_Iter>()._Unwrapped());\r\n\r\ntemplate <class _Iter>\r\n_NODISCARD constexpr decltype(auto) _Get_unwrapped(_Iter&& _It)\r\n    noexcept(!_Unwrappable_v<_Iter> || _Has_nothrow_unwrapped<_Iter>) {\r\n    // unwrap an iterator previously subjected to _Adl_verify_range or otherwise validated\r\n    if constexpr (is_pointer_v<decay_t<_Iter>>) { // special-case pointers and arrays\r\n        return _It + 0;\r\n    } else if constexpr (_Unwrappable_v<_Iter>) {\r\n        return static_cast<_Iter&&>(_It)._Unwrapped();\r\n    } else {\r\n        return static_cast<_Iter&&>(_It);\r\n    }\r\n}\r\n\r\ntemplate <class _Iter>\r\nusing _Unwrapped_t = _Remove_cvref_t<decltype(_STD _Get_unwrapped(_STD declval<_Iter>()))>;\r\n\r\ntemplate <class _Iter, class = bool>\r\nconstexpr bool _Do_unwrap_when_unverified_v = false;\r\n\r\ntemplate <class _Iter>\r\nconstexpr bool _Do_unwrap_when_unverified_v<_Iter, decltype(static_cast<bool>(_Iter::_Unwrap_when_unverified))> =\r\n    static_cast<bool>(_Iter::_Unwrap_when_unverified);\r\n\r\ntemplate <class _Iter>\r\nconstexpr bool _Unwrappable_for_unverified_v =\r\n    _Unwrappable_v<_Iter> && _Do_unwrap_when_unverified_v<_Remove_cvref_t<_Iter>>;\r\n\r\ntemplate <class _Iter>\r\n_NODISCARD constexpr decltype(auto) _Get_unwrapped_unverified(_Iter&& _It) {\r\n    // unwrap an iterator not previously subjected to _Adl_verify_range\r\n    if constexpr (is_pointer_v<decay_t<_Iter>>) { // special-case pointers and arrays\r\n        return _It + 0;\r\n    } else if constexpr (_Unwrappable_for_unverified_v<_Iter>) {\r\n        return static_cast<_Iter&&>(_It)._Unwrapped();\r\n    } else {\r\n        return static_cast<_Iter&&>(_It);\r\n    }\r\n}\r\n\r\ntemplate <class _Iter>\r\nusing _Unwrapped_unverified_t = _Remove_cvref_t<decltype(_Get_unwrapped_unverified(_STD declval<_Iter>()))>;\r\n\r\nstruct _Distance_unknown {\r\n    constexpr _Distance_unknown operator-() const noexcept {\r\n        return {};\r\n    }\r\n};\r\n\r\ntemplate <class _Diff>\r\nconstexpr _Diff _Max_possible_v{static_cast<_Make_unsigned_like_t<_Diff>>(-1) >> 1};\r\n\r\ntemplate <class _Diff>\r\nconstexpr _Diff _Min_possible_v{-_Max_possible_v<_Diff> - 1};\r\n\r\ntemplate <class _Iter, class = void>\r\nconstexpr bool _Offset_verifiable_v = false;\r\n\r\ntemplate <class _Iter>\r\nconstexpr bool\r\n    _Offset_verifiable_v<_Iter, void_t<decltype(_STD declval<const _Iter&>()._Verify_offset(_Iter_diff_t<_Iter>{}))>> =\r\n        true;\r\n\r\ntemplate <class _Iter>\r\nconstexpr bool _Unwrappable_for_offset_v = _Unwrappable_v<_Iter> && _Offset_verifiable_v<_Remove_cvref_t<_Iter>>;\r\n\r\ntemplate <class _Iter, class _Diff>\r\n_NODISCARD constexpr decltype(auto) _Get_unwrapped_n(_Iter&& _It, const _Diff _Off) {\r\n    if constexpr (is_pointer_v<decay_t<_Iter>>) {\r\n        return _It + 0;\r\n    } else if constexpr (_Unwrappable_for_offset_v<_Iter> && _Integer_like<_Diff>) {\r\n        // ask an iterator to assert that the iterator moved _Off positions is valid, and unwrap\r\n        using _IDiff     = _Iter_diff_t<_Remove_cvref_t<_Iter>>;\r\n        using _CDiff     = common_type_t<_Diff, _IDiff>;\r\n        const auto _COff = static_cast<_CDiff>(_Off);\r\n\r\n        _STL_ASSERT(_COff <= static_cast<_CDiff>(_Max_possible_v<_IDiff>)\r\n                        && (is_unsigned_v<_Diff> || static_cast<_CDiff>(_Min_possible_v<_IDiff>) <= _COff),\r\n            \"integer overflow\");\r\n        (void) _COff;\r\n\r\n        _It._Verify_offset(static_cast<_IDiff>(_Off));\r\n        return static_cast<_Iter&&>(_It)._Unwrapped();\r\n    } else if constexpr (_Unwrappable_for_unverified_v<_Iter>) {\r\n        // iterator doesn't support offset-based asserts, or offset unknown; defer to unverified unwrap\r\n        return static_cast<_Iter&&>(_It)._Unwrapped();\r\n    } else {\r\n        // pass through iterator that doesn't participate in checking\r\n        return static_cast<_Iter&&>(_It);\r\n    }\r\n}\r\n\r\ntemplate <class _Iter, class _UIter, class = void>\r\nconstexpr bool _Wrapped_seekable_v = false;\r\n\r\ntemplate <class _Iter, class _UIter>\r\nconstexpr bool\r\n    _Wrapped_seekable_v<_Iter, _UIter, void_t<decltype(_STD declval<_Iter&>()._Seek_to(_STD declval<_UIter>()))>> =\r\n        true;\r\n\r\ntemplate <class _Iter, class _UIter>\r\nconstexpr void _Seek_wrapped(_Iter& _It, _UIter&& _UIt) {\r\n    if constexpr (_Wrapped_seekable_v<_Iter, _UIter>) {\r\n        _It._Seek_to(_STD forward<_UIter>(_UIt));\r\n    } else {\r\n        _It = _STD forward<_UIter>(_UIt);\r\n    }\r\n}\r\n\r\n#if _HAS_CXX17\r\n#if _HAS_CXX20\r\n// detects whether _Ty resembles an allocator, N4981 [container.reqmts]/69\r\ntemplate <class _Ty>\r\nconcept _Allocator_for_container = requires(_Ty& _Alloc) {\r\n    typename _Ty::value_type;\r\n    _Alloc.deallocate(_Alloc.allocate(size_t{1}), size_t{1});\r\n};\r\n\r\ntemplate <class _Ty>\r\nconcept _Not_allocator_for_container = !_Allocator_for_container<_Ty>;\r\n\r\ntemplate <class _Ty>\r\nstruct _Is_allocator : bool_constant<_Allocator_for_container<_Ty>> {};\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Ty, class = void>\r\nstruct _Is_allocator : false_type {}; // selected when _Ty can't possibly be an allocator\r\n\r\ntemplate <class _Ty>\r\nstruct _Is_allocator<_Ty, void_t<typename _Ty::value_type, decltype(_STD declval<_Ty&>().deallocate(\r\n                                                               _STD declval<_Ty&>().allocate(size_t{1}), size_t{1}))>>\r\n    : true_type {}; // selected when _Ty resembles an allocator, N4950 [container.reqmts]/69\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n// deduction guide utilities (N4950 [associative.general]/2)\r\ntemplate <class _Iter>\r\nusing _Guide_key_t =\r\n#if _HAS_CXX23\r\n    remove_const_t<tuple_element_t<0, typename iterator_traits<_Iter>::value_type>>;\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n    remove_const_t<typename iterator_traits<_Iter>::value_type::first_type>;\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\ntemplate <class _Iter>\r\nusing _Guide_val_t =\r\n#if _HAS_CXX23\r\n    tuple_element_t<1, typename iterator_traits<_Iter>::value_type>;\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n    typename iterator_traits<_Iter>::value_type::second_type;\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\ntemplate <class _Iter>\r\nusing _Guide_pair_t =\r\n#if _HAS_CXX23\r\n    pair<add_const_t<tuple_element_t<0, typename iterator_traits<_Iter>::value_type>>,\r\n        tuple_element_t<1, typename iterator_traits<_Iter>::value_type>>;\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n    pair<add_const_t<typename iterator_traits<_Iter>::value_type::first_type>,\r\n        typename iterator_traits<_Iter>::value_type::second_type>;\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\n_EXPORT_STD template <class _Ty>\r\nstruct _NO_SPECIALIZATIONS_CITING(\"N5014 [execpol.type]/3\") is_execution_policy : false_type {};\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES constexpr bool is_execution_policy_v = is_execution_policy<_Ty>::value;\r\n\r\n// Note: The noexcept specifiers on all parallel algorithm overloads enforce termination as per\r\n// N4950 [execpol.seq]/2, [execpol.par]/2, [execpol.parunseq]/2, and [execpol.unseq]/2\r\ntemplate <class _ExPo>\r\nusing _Enable_if_execution_policy_t = typename remove_reference_t<_ExPo>::_Standard_execution_policy;\r\n\r\n#define _REQUIRE_PARALLEL_ITERATOR(_Iter) \\\r\n    static_assert(_Is_ranges_fwd_iter_v<_Iter>, \"Parallel algorithms require forward iterators or stronger.\")\r\n\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class _Checked, class _Iter>\r\n_NODISCARD constexpr auto _Idl_distance(const _Iter& _First, const _Iter& _Last) {\r\n    // Returns the distance between _First and _Last or\r\n    // an indicator that the distance cannot be determined in O(1).\r\n    _STL_INTERNAL_STATIC_ASSERT(is_same_v<_Unwrapped_t<_Checked>, _Iter>);\r\n    if constexpr (_Is_ranges_random_iter_v<_Iter>) {\r\n        return static_cast<_Iter_diff_t<_Checked>>(_Last - _First);\r\n    } else {\r\n        return _Distance_unknown{};\r\n    }\r\n}\r\n\r\ntemplate <class _Elem, bool _Is_enum = is_enum_v<_Elem>>\r\nstruct _Unwrap_enum { // if _Elem is an enum, gets its underlying type; otherwise leaves _Elem unchanged\r\n    using type = underlying_type_t<_Elem>;\r\n};\r\n\r\ntemplate <class _Elem>\r\nstruct _Unwrap_enum<_Elem, false> { // passthrough non-enum type\r\n    using type = _Elem;\r\n};\r\n\r\ntemplate <class _Elem>\r\nusing _Unwrap_enum_t = typename _Unwrap_enum<_Elem>::type;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL < 2\r\n#define _DEBUG_LT_PRED(pred, x, y) static_cast<bool>(pred(x, y))\r\n#define _DEBUG_ORDER_UNWRAPPED(first, last, pred)\r\n#define _DEBUG_ORDER_SET_UNWRAPPED(otherIter, first, last, pred)\r\n\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL < 2 / _ITERATOR_DEBUG_LEVEL == 2 vvv\r\n#define _DEBUG_LT_PRED(pred, x, y)                _STD _Debug_lt_pred(pred, x, y)\r\n#define _DEBUG_ORDER_UNWRAPPED(first, last, pred) _STD _Debug_order_unchecked(first, last, pred)\r\n#define _DEBUG_ORDER_SET_UNWRAPPED(otherIter, first, last, pred) \\\r\n    _STD _Debug_order_set_unchecked<otherIter>(first, last, pred)\r\n\r\ntemplate <class _Pr, class _Ty1, class _Ty2>\r\nconstexpr bool _Enable_debug_lt_pred_order_check = is_same_v<_Remove_cvref_t<_Ty1>, _Remove_cvref_t<_Ty2>>;\r\n\r\ntemplate <class _Pr, class _Ty1, class _Ty2, bool _Order_check = _Enable_debug_lt_pred_order_check<_Pr, _Ty1, _Ty2>>\r\nconstexpr bool _Debug_lt_pred_order_check_noexcept =\r\n    noexcept(static_cast<bool>(_STD declval<_Pr&>()(_STD declval<_Ty2&>(), _STD declval<_Ty1&>())));\r\n\r\ntemplate <class _Pr, class _Ty1, class _Ty2>\r\nconstexpr bool _Debug_lt_pred_order_check_noexcept<_Pr, _Ty1, _Ty2, false> = true;\r\n\r\ntemplate <class _Pr, class _Ty1, class _Ty2>\r\n_NODISCARD constexpr bool _Debug_lt_pred(_Pr&& _Pred, _Ty1&& _Left, _Ty2&& _Right) noexcept(\r\n    noexcept(static_cast<bool>(_Pred(_Left, _Right))) && _Debug_lt_pred_order_check_noexcept<_Pr, _Ty1, _Ty2>) {\r\n    const auto _Result = static_cast<bool>(_Pred(_Left, _Right));\r\n\r\n    if constexpr (_Enable_debug_lt_pred_order_check<_Pr, _Ty1, _Ty2>) {\r\n        if (_Result) {\r\n            _STL_VERIFY(!static_cast<bool>(_Pred(_Right, _Left)), \"invalid comparator\");\r\n        }\r\n    }\r\n\r\n    return _Result;\r\n}\r\n\r\ntemplate <class _InIt, class _Sentinel, class _Pr>\r\nconstexpr void _Debug_order_unchecked(_InIt _First, _Sentinel _Last, _Pr&& _Pred) {\r\n    // test if range is ordered by predicate\r\n    if constexpr (_Is_ranges_fwd_iter_v<_InIt>) {\r\n        if (_First != _Last) {\r\n            for (auto _Next = _First; ++_Next != _Last; _First = _Next) {\r\n                _STL_VERIFY(!static_cast<bool>(_Pred(*_Next, *_First)), \"sequence not ordered\");\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _OtherIt, class _InIt, class _Pr>\r\nconstexpr void _Debug_order_set_unchecked(_InIt _First, _InIt _Last, _Pr&& _Pred) {\r\n    // test if range is ordered by predicate\r\n    if constexpr (is_same_v<_Iter_value_t<_OtherIt>, _Iter_value_t<_InIt>>) {\r\n        _STD _Debug_order_unchecked(_First, _Last, _Pred);\r\n    }\r\n}\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 2 ^^^\r\n\r\n// from <iterator>\r\n_EXPORT_STD template <class _InIt, class _Diff>\r\n_CONSTEXPR17 void advance(_InIt& _Where, _Diff _Off) { // increment iterator by offset\r\n    if constexpr (_Is_ranges_random_iter_v<_InIt>) {\r\n        _Where += _Off;\r\n    } else {\r\n        if constexpr (is_signed_v<_Diff> && !_Is_ranges_bidi_iter_v<_InIt>) {\r\n            _STL_ASSERT(_Off >= 0, \"negative advance of non-bidirectional iterator\");\r\n        }\r\n\r\n        decltype(auto) _UWhere      = _STD _Get_unwrapped_n(_STD move(_Where), _Off);\r\n        constexpr bool _Need_rewrap = !is_reference_v<decltype(_STD _Get_unwrapped_n(_STD move(_Where), _Off))>;\r\n\r\n        if constexpr (is_signed_v<_Diff> && _Is_ranges_bidi_iter_v<_InIt>) {\r\n            for (; _Off < 0; ++_Off) {\r\n                --_UWhere;\r\n            }\r\n        }\r\n\r\n        for (; 0 < _Off; --_Off) {\r\n            ++_UWhere;\r\n        }\r\n\r\n        if constexpr (_Need_rewrap) {\r\n            _STD _Seek_wrapped(_Where, _STD move(_UWhere));\r\n        }\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _InIt>\r\n_NODISCARD _CONSTEXPR17 _Iter_diff_t<_InIt> distance(_InIt _First, _InIt _Last) {\r\n    if constexpr (_Is_ranges_random_iter_v<_InIt>) {\r\n        return _Last - _First; // assume the iterator will do debug checking\r\n    } else {\r\n        _STD _Adl_verify_range(_First, _Last);\r\n        auto _UFirst             = _STD _Get_unwrapped(_First);\r\n        const auto _ULast        = _STD _Get_unwrapped(_Last);\r\n        _Iter_diff_t<_InIt> _Off = 0;\r\n        for (; _UFirst != _ULast; ++_UFirst) {\r\n            ++_Off;\r\n        }\r\n\r\n        return _Off;\r\n    }\r\n}\r\n\r\ntemplate <class _InIt>\r\nconstexpr _InIt _Next_iter(_InIt _First) { // increment iterator\r\n    return ++_First;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt>\r\n_NODISCARD _CONSTEXPR17 _InIt next(\r\n    _InIt _First, typename iterator_traits<_InIt>::difference_type _Off = 1) { // increment iterator\r\n    static_assert(_Is_ranges_input_iter_v<_InIt>, \"next requires input iterator\");\r\n\r\n    _STD advance(_First, _Off);\r\n    return _First;\r\n}\r\n\r\ntemplate <class _BidIt>\r\nconstexpr _BidIt _Prev_iter(_BidIt _First) { // decrement iterator\r\n    return --_First;\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt>\r\n_NODISCARD _CONSTEXPR17 _BidIt prev(\r\n    _BidIt _First, typename iterator_traits<_BidIt>::difference_type _Off = 1) { // decrement iterator\r\n    static_assert(_Is_ranges_bidi_iter_v<_BidIt>, \"prev requires bidirectional iterator\");\r\n\r\n    _STD advance(_First, -_Off);\r\n    return _First;\r\n}\r\n\r\ntemplate <class _Iter, class _Pointer, bool = is_pointer_v<_Remove_cvref_t<_Iter>>>\r\nconstexpr bool _Has_nothrow_operator_arrow = _Is_nothrow_convertible_v<_Iter, _Pointer>;\r\n\r\ntemplate <class _Iter, class _Pointer>\r\nconstexpr bool _Has_nothrow_operator_arrow<_Iter, _Pointer, false> =\r\n    noexcept(_STD _Fake_copy_init<_Pointer>(_STD declval<_Iter>().operator->()));\r\n\r\n_EXPORT_STD template <class _BidIt>\r\nclass reverse_iterator {\r\npublic:\r\n    using iterator_type = _BidIt;\r\n\r\n#if _HAS_CXX20\r\n    using iterator_concept =\r\n        conditional_t<random_access_iterator<_BidIt>, random_access_iterator_tag, bidirectional_iterator_tag>;\r\n    using iterator_category = conditional_t<derived_from<_Iter_cat_t<_BidIt>, random_access_iterator_tag>,\r\n        random_access_iterator_tag, _Iter_cat_t<_BidIt>>;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    using iterator_category = _Iter_cat_t<_BidIt>;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n    using value_type      = _Iter_value_t<_BidIt>;\r\n    using difference_type = _Iter_diff_t<_BidIt>;\r\n    using pointer         = typename iterator_traits<_BidIt>::pointer;\r\n    using reference       = _Iter_ref_t<_BidIt>;\r\n\r\n    template <class>\r\n    friend class reverse_iterator;\r\n\r\n    _CONSTEXPR17 reverse_iterator() = default;\r\n\r\n    _CONSTEXPR17 explicit reverse_iterator(_BidIt _Right)\r\n        noexcept(is_nothrow_move_constructible_v<_BidIt>) // strengthened\r\n        : current(_STD move(_Right)) {}\r\n\r\n    template <class _Other>\r\n#if _HAS_CXX20\r\n        requires (!is_same_v<_Other, _BidIt>) && convertible_to<const _Other&, _BidIt>\r\n#endif // _HAS_CXX20\r\n    _CONSTEXPR17 reverse_iterator(const reverse_iterator<_Other>& _Right)\r\n        noexcept(is_nothrow_constructible_v<_BidIt, const _Other&>) // strengthened\r\n        : current(_Right.current) {\r\n    }\r\n\r\n    template <class _Other>\r\n#if _HAS_CXX20\r\n        requires (!is_same_v<_Other, _BidIt>)\r\n              && convertible_to<const _Other&, _BidIt> && assignable_from<_BidIt&, const _Other&>\r\n#endif // _HAS_CXX20\r\n    _CONSTEXPR17 reverse_iterator& operator=(const reverse_iterator<_Other>& _Right)\r\n        noexcept(is_nothrow_assignable_v<_BidIt&, const _Other&>) /* strengthened */ {\r\n        current = _Right.current;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 _BidIt base() const noexcept(is_nothrow_copy_constructible_v<_BidIt>) /* strengthened */ {\r\n        return current;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 reference operator*() const\r\n        noexcept(is_nothrow_copy_constructible_v<_BidIt> && noexcept(*--(_STD declval<_BidIt&>()))) /* strengthened */ {\r\n        _BidIt _Tmp = current;\r\n        return *--_Tmp;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 pointer operator->() const\r\n        noexcept(is_nothrow_copy_constructible_v<_BidIt> && noexcept(--(_STD declval<_BidIt&>()))\r\n                 && _Has_nothrow_operator_arrow<_BidIt&, pointer>) /* strengthened */\r\n#if _HAS_CXX20\r\n        requires (is_pointer_v<_BidIt> || requires(const _BidIt __i) { __i.operator->(); })\r\n#endif\r\n    {\r\n        _BidIt _Tmp = current;\r\n        --_Tmp;\r\n        if constexpr (is_pointer_v<_BidIt>) {\r\n            return _Tmp;\r\n        } else {\r\n            return _Tmp.operator->();\r\n        }\r\n    }\r\n\r\n    _CONSTEXPR17 reverse_iterator& operator++() noexcept(noexcept(--current)) /* strengthened */ {\r\n        --current;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR17 reverse_iterator operator++(int) noexcept(is_nothrow_copy_constructible_v<_BidIt> //\r\n                                                           && noexcept(--current)) /* strengthened */ {\r\n        reverse_iterator _Tmp = *this;\r\n        --current;\r\n        return _Tmp;\r\n    }\r\n\r\n    _CONSTEXPR17 reverse_iterator& operator--() noexcept(noexcept(++current)) /* strengthened */ {\r\n        ++current;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR17 reverse_iterator operator--(int) noexcept(is_nothrow_copy_constructible_v<_BidIt> //\r\n                                                           && noexcept(++current)) /* strengthened */ {\r\n        reverse_iterator _Tmp = *this;\r\n        ++current;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 reverse_iterator operator+(const difference_type _Off) const\r\n        noexcept(noexcept(reverse_iterator(current - _Off))) /* strengthened */ {\r\n        return reverse_iterator(current - _Off);\r\n    }\r\n\r\n    _CONSTEXPR17 reverse_iterator& operator+=(const difference_type _Off)\r\n        noexcept(noexcept(current -= _Off)) /* strengthened */ {\r\n        current -= _Off;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 reverse_iterator operator-(const difference_type _Off) const\r\n        noexcept(noexcept(reverse_iterator(current + _Off))) /* strengthened */ {\r\n        return reverse_iterator(current + _Off);\r\n    }\r\n\r\n    _CONSTEXPR17 reverse_iterator& operator-=(const difference_type _Off)\r\n        noexcept(noexcept(current += _Off)) /* strengthened */ {\r\n        current += _Off;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 reference operator[](const difference_type _Off) const\r\n        noexcept(noexcept(_STD _Fake_copy_init<reference>(current[_Off]))) /* strengthened */ {\r\n        return current[static_cast<difference_type>(-_Off - 1)];\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD friend constexpr iter_rvalue_reference_t<_BidIt> iter_move(const reverse_iterator& _It)\r\n        noexcept(is_nothrow_copy_constructible_v<_BidIt> && noexcept(_RANGES iter_move(--_STD declval<_BidIt&>()))) {\r\n        auto _Tmp = _It.current;\r\n        --_Tmp;\r\n        return _RANGES iter_move(_Tmp);\r\n    }\r\n\r\n    template <indirectly_swappable<_BidIt> _BidIt2>\r\n    friend constexpr void iter_swap(const reverse_iterator& _Left, const reverse_iterator<_BidIt2>& _Right)\r\n        noexcept(is_nothrow_copy_constructible_v<_BidIt> && is_nothrow_copy_constructible_v<_BidIt2>\r\n                 && noexcept(_RANGES iter_swap(--_STD declval<_BidIt&>(), --_STD declval<_BidIt2&>()))) {\r\n        auto _LTmp = _Left.current;\r\n        auto _RTmp = _Right.base();\r\n        --_LTmp;\r\n        --_RTmp;\r\n        _RANGES iter_swap(_LTmp, _RTmp);\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    using _Prevent_inheriting_unwrap = reverse_iterator;\r\n\r\n    template <class _BidIt2, enable_if_t<_Range_verifiable_v<_BidIt, _BidIt2>, int> = 0>\r\n    friend constexpr void _Verify_range(\r\n        const reverse_iterator& _First, const reverse_iterator<_BidIt2>& _Last) noexcept {\r\n        _Verify_range(_Last._Get_current(), _First.current); // note reversed parameters\r\n    }\r\n\r\n    template <class _BidIt2 = _BidIt, enable_if_t<_Offset_verifiable_v<_BidIt2>, int> = 0>\r\n    constexpr void _Verify_offset(const difference_type _Off) const noexcept {\r\n        _STL_VERIFY(_Off != _Min_possible_v<difference_type>, \"integer overflow\");\r\n        current._Verify_offset(-_Off);\r\n    }\r\n\r\n    template <class _BidIt2 = _BidIt, enable_if_t<_Unwrappable_v<const _BidIt2&>, int> = 0>\r\n    _NODISCARD constexpr reverse_iterator<_Unwrapped_t<const _BidIt2&>> _Unwrapped() const& noexcept(\r\n        noexcept(static_cast<reverse_iterator<_Unwrapped_t<const _BidIt2&>>>(current._Unwrapped()))) {\r\n        return static_cast<reverse_iterator<_Unwrapped_t<const _BidIt2&>>>(current._Unwrapped());\r\n    }\r\n    template <class _BidIt2 = _BidIt, enable_if_t<_Unwrappable_v<_BidIt2>, int> = 0>\r\n    _NODISCARD constexpr reverse_iterator<_Unwrapped_t<_BidIt2>> _Unwrapped() && noexcept(\r\n        noexcept(static_cast<reverse_iterator<_Unwrapped_t<_BidIt2>>>(_STD move(current)._Unwrapped()))) {\r\n        return static_cast<reverse_iterator<_Unwrapped_t<_BidIt2>>>(_STD move(current)._Unwrapped());\r\n    }\r\n\r\n    static constexpr bool _Unwrap_when_unverified = _Do_unwrap_when_unverified_v<_BidIt>;\r\n\r\n    template <class _Src, enable_if_t<_Wrapped_seekable_v<_BidIt, const _Src&>, int> = 0>\r\n    constexpr void _Seek_to(const reverse_iterator<_Src>& _It) noexcept(noexcept(current._Seek_to(_It.current))) {\r\n        current._Seek_to(_It.current);\r\n    }\r\n\r\n    _NODISCARD constexpr const _BidIt& _Get_current() const noexcept {\r\n        return current;\r\n    }\r\n\r\nprotected:\r\n    _BidIt current{};\r\n};\r\n\r\n_EXPORT_STD template <class _BidIt1, class _BidIt2>\r\n_NODISCARD _CONSTEXPR17 bool operator==(const reverse_iterator<_BidIt1>& _Left, const reverse_iterator<_BidIt2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Get_current() == _Right._Get_current()))) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires {\r\n        { _Left._Get_current() == _Right._Get_current() } -> _Implicitly_convertible_to<bool>;\r\n    }\r\n#endif // _HAS_CXX20\r\n{\r\n    return _Left._Get_current() == _Right._Get_current();\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt1, class _BidIt2>\r\n_NODISCARD _CONSTEXPR17 bool operator!=(const reverse_iterator<_BidIt1>& _Left, const reverse_iterator<_BidIt2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Get_current() != _Right._Get_current()))) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires {\r\n        { _Left._Get_current() != _Right._Get_current() } -> _Implicitly_convertible_to<bool>;\r\n    }\r\n#endif // _HAS_CXX20\r\n{\r\n    return _Left._Get_current() != _Right._Get_current();\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt1, class _BidIt2>\r\n_NODISCARD _CONSTEXPR17 bool operator<(const reverse_iterator<_BidIt1>& _Left, const reverse_iterator<_BidIt2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Get_current() > _Right._Get_current()))) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires {\r\n        { _Left._Get_current() > _Right._Get_current() } -> _Implicitly_convertible_to<bool>;\r\n    }\r\n#endif // _HAS_CXX20\r\n{\r\n    return _Left._Get_current() > _Right._Get_current();\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt1, class _BidIt2>\r\n_NODISCARD _CONSTEXPR17 bool operator>(const reverse_iterator<_BidIt1>& _Left, const reverse_iterator<_BidIt2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Get_current() < _Right._Get_current()))) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires {\r\n        { _Left._Get_current() < _Right._Get_current() } -> _Implicitly_convertible_to<bool>;\r\n    }\r\n#endif // _HAS_CXX20\r\n{\r\n    return _Left._Get_current() < _Right._Get_current();\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt1, class _BidIt2>\r\n_NODISCARD _CONSTEXPR17 bool operator<=(const reverse_iterator<_BidIt1>& _Left, const reverse_iterator<_BidIt2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Get_current() >= _Right._Get_current()))) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires {\r\n        { _Left._Get_current() >= _Right._Get_current() } -> _Implicitly_convertible_to<bool>;\r\n    }\r\n#endif // _HAS_CXX20\r\n{\r\n    return _Left._Get_current() >= _Right._Get_current();\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt1, class _BidIt2>\r\n_NODISCARD _CONSTEXPR17 bool operator>=(const reverse_iterator<_BidIt1>& _Left, const reverse_iterator<_BidIt2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Get_current() <= _Right._Get_current()))) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires {\r\n        { _Left._Get_current() <= _Right._Get_current() } -> _Implicitly_convertible_to<bool>;\r\n    }\r\n#endif // _HAS_CXX20\r\n{\r\n    return _Left._Get_current() <= _Right._Get_current();\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _BidIt1, three_way_comparable_with<_BidIt1> _BidIt2>\r\n_NODISCARD constexpr compare_three_way_result_t<_BidIt1, _BidIt2> operator<=>(\r\n    const reverse_iterator<_BidIt1>& _Left, const reverse_iterator<_BidIt2>& _Right)\r\n    noexcept(noexcept(_Right._Get_current() <=> _Left._Get_current())) /* strengthened */ {\r\n    return _Right._Get_current() <=> _Left._Get_current();\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _BidIt1, class _BidIt2>\r\n_NODISCARD _CONSTEXPR17 auto operator-(const reverse_iterator<_BidIt1>& _Left, const reverse_iterator<_BidIt2>& _Right)\r\n    noexcept(noexcept(_Right._Get_current() - _Left._Get_current())) /* strengthened */\r\n    -> decltype(_Right._Get_current() - _Left._Get_current()) {\r\n    return _Right._Get_current() - _Left._Get_current();\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt>\r\n_NODISCARD _CONSTEXPR17 reverse_iterator<_BidIt> operator+(typename reverse_iterator<_BidIt>::difference_type _Off,\r\n    const reverse_iterator<_BidIt>& _Right) noexcept(noexcept(_Right + _Off)) /* strengthened */ {\r\n    return _Right + _Off;\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt>\r\n_NODISCARD _CONSTEXPR17 reverse_iterator<_BidIt> make_reverse_iterator(_BidIt _Iter)\r\n    noexcept(is_nothrow_move_constructible_v<_BidIt>) /* strengthened */ {\r\n    return reverse_iterator<_BidIt>(_STD move(_Iter));\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _BidIt1, class _BidIt2>\r\n    requires (!sized_sentinel_for<_BidIt1, _BidIt2>)\r\nconstexpr bool disable_sized_sentinel_for<reverse_iterator<_BidIt1>, reverse_iterator<_BidIt2>> = true;\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD _CONSTEXPR17 auto begin(_Container& _Cont) noexcept(noexcept(_Cont.begin())) -> decltype(_Cont.begin()) {\r\n    return _Cont.begin();\r\n}\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD _CONSTEXPR17 auto begin(const _Container& _Cont) noexcept(noexcept(_Cont.begin()))\r\n    -> decltype(_Cont.begin()) {\r\n    return _Cont.begin();\r\n}\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD _CONSTEXPR17 auto end(_Container& _Cont) noexcept(noexcept(_Cont.end())) -> decltype(_Cont.end()) {\r\n    return _Cont.end();\r\n}\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD _CONSTEXPR17 auto end(const _Container& _Cont) noexcept(noexcept(_Cont.end())) -> decltype(_Cont.end()) {\r\n    return _Cont.end();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Size>\r\n_NODISCARD constexpr _Ty* begin(_Ty (&_Array)[_Size]) noexcept {\r\n    return _Array;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Size>\r\n_NODISCARD constexpr _Ty* end(_Ty (&_Array)[_Size]) noexcept {\r\n    return _Array + _Size;\r\n}\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD constexpr auto cbegin(const _Container& _Cont) noexcept(noexcept(_STD begin(_Cont)))\r\n    -> decltype(_STD begin(_Cont)) {\r\n    return _STD begin(_Cont);\r\n}\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD constexpr auto cend(const _Container& _Cont) noexcept(noexcept(_STD end(_Cont)))\r\n    -> decltype(_STD end(_Cont)) {\r\n    return _STD end(_Cont);\r\n}\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD _CONSTEXPR17 auto rbegin(_Container& _Cont) noexcept(noexcept(_Cont.rbegin())) -> decltype(_Cont.rbegin()) {\r\n    return _Cont.rbegin();\r\n}\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD _CONSTEXPR17 auto rbegin(const _Container& _Cont) noexcept(noexcept(_Cont.rbegin()))\r\n    -> decltype(_Cont.rbegin()) {\r\n    return _Cont.rbegin();\r\n}\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD _CONSTEXPR17 auto rend(_Container& _Cont) noexcept(noexcept(_Cont.rend())) -> decltype(_Cont.rend()) {\r\n    return _Cont.rend();\r\n}\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD _CONSTEXPR17 auto rend(const _Container& _Cont) noexcept(noexcept(_Cont.rend())) -> decltype(_Cont.rend()) {\r\n    return _Cont.rend();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Size>\r\n_NODISCARD _CONSTEXPR17 reverse_iterator<_Ty*> rbegin(_Ty (&_Array)[_Size]) noexcept {\r\n    return reverse_iterator<_Ty*>(_Array + _Size);\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Size>\r\n_NODISCARD _CONSTEXPR17 reverse_iterator<_Ty*> rend(_Ty (&_Array)[_Size]) noexcept {\r\n    return reverse_iterator<_Ty*>(_Array);\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD _CONSTEXPR17 reverse_iterator<const _Elem*> rbegin(initializer_list<_Elem> _Ilist) noexcept {\r\n    return reverse_iterator<const _Elem*>(_Ilist.end());\r\n}\r\n\r\n_EXPORT_STD template <class _Elem>\r\n_NODISCARD _CONSTEXPR17 reverse_iterator<const _Elem*> rend(initializer_list<_Elem> _Ilist) noexcept {\r\n    return reverse_iterator<const _Elem*>(_Ilist.begin());\r\n}\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD _CONSTEXPR17 auto crbegin(const _Container& _Cont) noexcept(noexcept(_STD rbegin(_Cont)))\r\n    -> decltype(_STD rbegin(_Cont)) {\r\n    return _STD rbegin(_Cont);\r\n}\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD _CONSTEXPR17 auto crend(const _Container& _Cont) noexcept(noexcept(_STD rend(_Cont)))\r\n    -> decltype(_STD rend(_Cont)) {\r\n    return _STD rend(_Cont);\r\n}\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD constexpr auto size(const _Container& _Cont) noexcept(noexcept(_Cont.size())) -> decltype(_Cont.size()) {\r\n    return _Cont.size();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Size>\r\n_NODISCARD constexpr size_t size(const _Ty (&)[_Size]) noexcept {\r\n    return _Size;\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD constexpr auto ssize(const _Container& _Cont) noexcept(noexcept(_Cont.size()))\r\n    -> common_type_t<ptrdiff_t, make_signed_t<decltype(_Cont.size())>> {\r\n    using _Common = common_type_t<ptrdiff_t, make_signed_t<decltype(_Cont.size())>>;\r\n    return static_cast<_Common>(_Cont.size());\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, ptrdiff_t _Size>\r\n_NODISCARD constexpr ptrdiff_t ssize(const _Ty (&)[_Size]) noexcept {\r\n    return _Size;\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD_EMPTY_NON_MEMBER constexpr auto empty(const _Container& _Cont) noexcept(noexcept(_Cont.empty()))\r\n    -> decltype(_Cont.empty()) {\r\n    return _Cont.empty();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Size>\r\n_NODISCARD_EMPTY_NON_MEMBER constexpr bool empty(const _Ty (&)[_Size]) noexcept {\r\n    return false;\r\n}\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD constexpr auto data(_Container& _Cont) noexcept(noexcept(_Cont.data())) -> decltype(_Cont.data()) {\r\n    return _Cont.data();\r\n}\r\n\r\n_EXPORT_STD template <class _Container>\r\n_NODISCARD constexpr auto data(const _Container& _Cont) noexcept(noexcept(_Cont.data())) -> decltype(_Cont.data()) {\r\n    return _Cont.data();\r\n}\r\n\r\n_EXPORT_STD template <class _Ty, size_t _Size>\r\n_NODISCARD constexpr _Ty* data(_Ty (&_Array)[_Size]) noexcept {\r\n    return _Array;\r\n}\r\n\r\n#if _HAS_CXX20\r\n#if _HAS_CXX23\r\n_EXPORT_STD template <indirectly_readable _Ty>\r\nusing iter_const_reference_t = common_reference_t<const iter_value_t<_Ty>&&, iter_reference_t<_Ty>>;\r\n\r\ntemplate <indirectly_readable _Iter>\r\nusing _Iter_const_rvalue_reference_t = common_reference_t<const iter_value_t<_Iter>&&, iter_rvalue_reference_t<_Iter>>;\r\n\r\ntemplate <class _Ty>\r\nconcept _Constant_iterator = input_iterator<_Ty> && same_as<iter_const_reference_t<_Ty>, iter_reference_t<_Ty>>;\r\n\r\n_EXPORT_STD template <input_iterator _Iter>\r\nclass basic_const_iterator;\r\n\r\n_EXPORT_STD template <input_iterator _Iter>\r\nusing const_iterator = conditional_t<_Constant_iterator<_Iter>, _Iter, basic_const_iterator<_Iter>>;\r\n\r\ntemplate <class _Sent>\r\nstruct _Const_sentinel {\r\n    using type = _Sent;\r\n};\r\n\r\ntemplate <input_iterator _Sent>\r\nstruct _Const_sentinel<_Sent> {\r\n    using type = const_iterator<_Sent>;\r\n};\r\n\r\n_EXPORT_STD template <semiregular _Sent>\r\nusing const_sentinel = _Const_sentinel<_Sent>::type;\r\n\r\ntemplate <class _Ty>\r\nconcept _Not_a_const_iterator = !_Is_specialization_v<_Ty, basic_const_iterator>;\r\n\r\ntemplate <class>\r\nstruct _Basic_const_iterator_category {};\r\n\r\ntemplate <forward_iterator _Iter>\r\nstruct _Basic_const_iterator_category<_Iter> {\r\n    using iterator_category = iterator_traits<_Iter>::iterator_category;\r\n};\r\n\r\n_EXPORT_STD template <input_iterator _Iter>\r\nclass basic_const_iterator : public _Basic_const_iterator_category<_Iter> {\r\nprivate:\r\n    template <input_iterator>\r\n    friend class basic_const_iterator;\r\n\r\n    /* [[no_unique_address]] */ _Iter _Current{};\r\n\r\n    using _Reference        = iter_const_reference_t<_Iter>;\r\n    using _Rvalue_reference = _Iter_const_rvalue_reference_t<_Iter>;\r\n\r\n    _NODISCARD static consteval auto _Get_iter_concept() noexcept {\r\n        if constexpr (contiguous_iterator<_Iter>) {\r\n            return contiguous_iterator_tag{};\r\n        } else if constexpr (random_access_iterator<_Iter>) {\r\n            return random_access_iterator_tag{};\r\n        } else if constexpr (bidirectional_iterator<_Iter>) {\r\n            return bidirectional_iterator_tag{};\r\n        } else if constexpr (forward_iterator<_Iter>) {\r\n            return forward_iterator_tag{};\r\n        } else {\r\n            return input_iterator_tag{};\r\n        }\r\n    }\r\n\r\npublic:\r\n    using iterator_type    = _Iter;\r\n    using iterator_concept = decltype(_Get_iter_concept());\r\n    using value_type       = iter_value_t<_Iter>;\r\n    using difference_type  = iter_difference_t<_Iter>;\r\n\r\n    basic_const_iterator()\r\n        requires default_initializable<_Iter>\r\n    = default;\r\n\r\n    constexpr basic_const_iterator(_Iter _Current_) noexcept(is_nothrow_move_constructible_v<_Iter>) // strengthened\r\n        : _Current(_STD move(_Current_)) {}\r\n\r\n    template <convertible_to<_Iter> _Other>\r\n    constexpr basic_const_iterator(basic_const_iterator<_Other> _Current_)\r\n        noexcept(is_nothrow_constructible_v<_Iter, _Other>) // strengthened\r\n        : _Current(_STD move(_Current_._Current)) {}\r\n\r\n    template <_Different_from<basic_const_iterator> _Other>\r\n        requires convertible_to<_Other, _Iter>\r\n    constexpr basic_const_iterator(_Other&& _Current_)\r\n        noexcept(is_nothrow_constructible_v<_Iter, _Other>) // strengthened\r\n        : _Current(_STD forward<_Other>(_Current_)) {}\r\n\r\n    _NODISCARD constexpr const _Iter& base() const& noexcept {\r\n        return _Current;\r\n    }\r\n\r\n    _NODISCARD constexpr _Iter base() && noexcept(is_nothrow_move_constructible_v<_Iter>) /* strengthened */ {\r\n        return _STD move(_Current);\r\n    }\r\n\r\n    _NODISCARD constexpr _Reference operator*() const\r\n        noexcept(noexcept(static_cast<_Reference>(*_Current))) /* strengthened */ {\r\n        return static_cast<_Reference>(*_Current);\r\n    }\r\n\r\n    _NODISCARD constexpr const auto* operator->() const\r\n        noexcept(contiguous_iterator<_Iter> || noexcept(*_Current)) /* strengthened */\r\n        requires is_lvalue_reference_v<iter_reference_t<_Iter>>\r\n              && same_as<remove_cvref_t<iter_reference_t<_Iter>>, value_type>\r\n    {\r\n        if constexpr (contiguous_iterator<_Iter>) {\r\n            return _STD to_address(_Current);\r\n        } else {\r\n            return _STD addressof(*_Current);\r\n        }\r\n    }\r\n\r\n    constexpr basic_const_iterator& operator++() noexcept(noexcept(++_Current)) /* strengthened */ {\r\n        ++_Current;\r\n        return *this;\r\n    }\r\n\r\n    constexpr void operator++(int) noexcept(noexcept(++_Current)) /* strengthened */ {\r\n        ++_Current;\r\n    }\r\n\r\n    constexpr basic_const_iterator operator++(int)\r\n        noexcept(noexcept(++*this) && is_nothrow_copy_constructible_v<basic_const_iterator>) // strengthened\r\n        requires forward_iterator<_Iter>\r\n    {\r\n        auto _Tmp = *this;\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    constexpr basic_const_iterator& operator--() noexcept(noexcept(--_Current)) // strengthened\r\n        requires bidirectional_iterator<_Iter>\r\n    {\r\n        --_Current;\r\n        return *this;\r\n    }\r\n\r\n    constexpr basic_const_iterator operator--(int)\r\n        noexcept(noexcept(--*this) && is_nothrow_copy_constructible_v<basic_const_iterator>) // strengthened\r\n        requires bidirectional_iterator<_Iter>\r\n    {\r\n        auto _Tmp = *this;\r\n        --*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    constexpr basic_const_iterator& operator+=(const difference_type _Off)\r\n        noexcept(noexcept(_Current += _Off)) // strengthened\r\n        requires random_access_iterator<_Iter>\r\n    {\r\n        _Current += _Off;\r\n        return *this;\r\n    }\r\n\r\n    constexpr basic_const_iterator& operator-=(const difference_type _Off)\r\n        noexcept(noexcept(_Current -= _Off)) // strengthened\r\n        requires random_access_iterator<_Iter>\r\n    {\r\n        _Current -= _Off;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD constexpr _Reference operator[](const difference_type _Idx) const\r\n        noexcept(noexcept(static_cast<_Reference>(_Current[_Idx]))) // strengthened\r\n        requires random_access_iterator<_Iter>\r\n    {\r\n        return static_cast<_Reference>(_Current[_Idx]);\r\n    }\r\n\r\n    template <sentinel_for<_Iter> _Sent>\r\n    _NODISCARD constexpr bool operator==(const _Sent& _Se) const\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Current == _Se))) /* strengthened */ {\r\n        return _Current == _Se;\r\n    }\r\n\r\n    template <_Not_a_const_iterator _Other>\r\n        requires _Constant_iterator<_Other> && convertible_to<const _Iter&, _Other>\r\n    _NODISCARD constexpr operator _Other() const& noexcept(\r\n        is_nothrow_convertible_v<const _Iter&, _Other>) /* strengthened */ {\r\n        return _Current;\r\n    }\r\n\r\n    template <_Not_a_const_iterator _Other>\r\n        requires _Constant_iterator<_Other> && convertible_to<_Iter, _Other>\r\n    _NODISCARD constexpr operator _Other() && noexcept(is_nothrow_convertible_v<_Iter, _Other>) /* strengthened */ {\r\n        return _STD move(_Current);\r\n    }\r\n\r\n    _NODISCARD constexpr bool operator<(const basic_const_iterator& _Right) const\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Current < _Right._Current))) // strengthened\r\n        requires random_access_iterator<_Iter>\r\n    {\r\n        return _Current < _Right._Current;\r\n    }\r\n\r\n    _NODISCARD constexpr bool operator>(const basic_const_iterator& _Right) const\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Current > _Right._Current))) // strengthened\r\n        requires random_access_iterator<_Iter>\r\n    {\r\n        return _Current > _Right._Current;\r\n    }\r\n\r\n    _NODISCARD constexpr bool operator<=(const basic_const_iterator& _Right) const\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Current <= _Right._Current))) // strengthened\r\n        requires random_access_iterator<_Iter>\r\n    {\r\n        return _Current <= _Right._Current;\r\n    }\r\n\r\n    _NODISCARD constexpr bool operator>=(const basic_const_iterator& _Right) const\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Current >= _Right._Current))) // strengthened\r\n        requires random_access_iterator<_Iter>\r\n    {\r\n        return _Current >= _Right._Current;\r\n    }\r\n\r\n    _NODISCARD constexpr auto operator<=>(const basic_const_iterator& _Right) const\r\n        noexcept(noexcept(_Current <=> _Right._Current)) // strengthened\r\n        requires random_access_iterator<_Iter> && three_way_comparable<_Iter>\r\n    {\r\n        return _Current <=> _Right._Current;\r\n    }\r\n\r\n    template <_Different_from<basic_const_iterator> _Other>\r\n        requires random_access_iterator<_Iter> && totally_ordered_with<_Iter, _Other>\r\n    _NODISCARD constexpr bool operator<(const _Other& _Right) const\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Current < _Right))) /* strengthened */ {\r\n        return _Current < _Right;\r\n    }\r\n\r\n    template <_Different_from<basic_const_iterator> _Other>\r\n        requires random_access_iterator<_Iter> && totally_ordered_with<_Iter, _Other>\r\n    _NODISCARD constexpr bool operator>(const _Other& _Right) const\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Current > _Right))) /* strengthened */ {\r\n        return _Current > _Right;\r\n    }\r\n\r\n    template <_Different_from<basic_const_iterator> _Other>\r\n        requires random_access_iterator<_Iter> && totally_ordered_with<_Iter, _Other>\r\n    _NODISCARD constexpr bool operator<=(const _Other& _Right) const\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Current <= _Right))) /* strengthened */ {\r\n        return _Current <= _Right;\r\n    }\r\n\r\n    template <_Different_from<basic_const_iterator> _Other>\r\n        requires random_access_iterator<_Iter> && totally_ordered_with<_Iter, _Other>\r\n    _NODISCARD constexpr bool operator>=(const _Other& _Right) const\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Current >= _Right))) /* strengthened */ {\r\n        return _Current >= _Right;\r\n    }\r\n\r\n    template <_Different_from<basic_const_iterator> _Other>\r\n        requires random_access_iterator<_Iter> && totally_ordered_with<_Iter, _Other>\r\n              && three_way_comparable_with<_Iter, _Other>\r\n    _NODISCARD constexpr auto operator<=>(const _Other& _Right) const\r\n        noexcept(noexcept(_Current <=> _Right)) /* strengthened */ {\r\n        return _Current <=> _Right;\r\n    }\r\n\r\n    template <_Not_a_const_iterator _Other>\r\n        requires random_access_iterator<_Iter> && totally_ordered_with<_Iter, _Other>\r\n    _NODISCARD friend constexpr bool operator<(const _Other& _Left, const basic_const_iterator& _Right)\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left < _Right._Current))) /* strengthened */ {\r\n        return _Left < _Right._Current;\r\n    }\r\n\r\n    template <_Not_a_const_iterator _Other>\r\n        requires random_access_iterator<_Iter> && totally_ordered_with<_Iter, _Other>\r\n    _NODISCARD friend constexpr bool operator>(const _Other& _Left, const basic_const_iterator& _Right)\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left > _Right._Current))) /* strengthened */ {\r\n        return _Left > _Right._Current;\r\n    }\r\n\r\n    template <_Not_a_const_iterator _Other>\r\n        requires random_access_iterator<_Iter> && totally_ordered_with<_Iter, _Other>\r\n    _NODISCARD friend constexpr bool operator<=(const _Other& _Left, const basic_const_iterator& _Right)\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left <= _Right._Current))) /* strengthened */ {\r\n        return _Left <= _Right._Current;\r\n    }\r\n\r\n    template <_Not_a_const_iterator _Other>\r\n        requires random_access_iterator<_Iter> && totally_ordered_with<_Iter, _Other>\r\n    _NODISCARD friend constexpr bool operator>=(const _Other& _Left, const basic_const_iterator& _Right)\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left >= _Right._Current))) /* strengthened */ {\r\n        return _Left >= _Right._Current;\r\n    }\r\n\r\n    _NODISCARD friend constexpr basic_const_iterator operator+(const basic_const_iterator& _It,\r\n        const difference_type _Off) noexcept(noexcept(basic_const_iterator{_It._Current + _Off})) // strengthened\r\n        requires random_access_iterator<_Iter>\r\n    {\r\n        return basic_const_iterator{_It._Current + _Off};\r\n    }\r\n\r\n    _NODISCARD friend constexpr basic_const_iterator operator+(const difference_type _Off,\r\n        const basic_const_iterator& _It) noexcept(noexcept(basic_const_iterator{_It._Current + _Off})) // strengthened\r\n        requires random_access_iterator<_Iter>\r\n    {\r\n        return basic_const_iterator{_It._Current + _Off};\r\n    }\r\n\r\n    _NODISCARD friend constexpr basic_const_iterator operator-(const basic_const_iterator& _It,\r\n        const difference_type _Off) noexcept(noexcept(basic_const_iterator{_It._Current - _Off})) // strengthened\r\n        requires random_access_iterator<_Iter>\r\n    {\r\n        return basic_const_iterator{_It._Current - _Off};\r\n    }\r\n\r\n    template <sized_sentinel_for<_Iter> _Sent>\r\n    _NODISCARD constexpr difference_type operator-(const _Sent& _Se) const\r\n        noexcept(noexcept(_Current - _Se)) /* strengthened */ {\r\n        return _Current - _Se;\r\n    }\r\n\r\n    template <_Not_a_const_iterator _Sent>\r\n        requires sized_sentinel_for<_Sent, _Iter>\r\n    _NODISCARD friend constexpr difference_type operator-(const _Sent& _Se, const basic_const_iterator& _It)\r\n        noexcept(noexcept(_Se - _It._Current)) /* strengthened */ {\r\n        return _Se - _It._Current;\r\n    }\r\n\r\n    _NODISCARD friend constexpr _Rvalue_reference iter_move(const basic_const_iterator& _It)\r\n        noexcept(noexcept(static_cast<_Rvalue_reference>(_RANGES iter_move(_It._Current)))) {\r\n        return static_cast<_Rvalue_reference>(_RANGES iter_move(_It._Current));\r\n    }\r\n};\r\n\r\ntemplate <class _Ty1, common_with<_Ty1> _Ty2>\r\n    requires input_iterator<common_type_t<_Ty1, _Ty2>>\r\nstruct common_type<basic_const_iterator<_Ty1>, _Ty2> {\r\n    using type = basic_const_iterator<common_type_t<_Ty1, _Ty2>>;\r\n};\r\n\r\ntemplate <class _Ty1, common_with<_Ty1> _Ty2>\r\n    requires input_iterator<common_type_t<_Ty1, _Ty2>>\r\nstruct common_type<_Ty2, basic_const_iterator<_Ty1>> {\r\n    using type = basic_const_iterator<common_type_t<_Ty1, _Ty2>>;\r\n};\r\n\r\ntemplate <class _Ty1, common_with<_Ty1> _Ty2>\r\n    requires input_iterator<common_type_t<_Ty1, _Ty2>>\r\nstruct common_type<basic_const_iterator<_Ty1>, basic_const_iterator<_Ty2>> {\r\n    using type = basic_const_iterator<common_type_t<_Ty1, _Ty2>>;\r\n};\r\n\r\n_EXPORT_STD template <input_iterator _Iter>\r\n_NODISCARD constexpr const_iterator<_Iter> make_const_iterator(_Iter _It)\r\n    noexcept(is_nothrow_constructible_v<const_iterator<_Iter>, _Iter&>) /* strengthened */ {\r\n    return _It;\r\n}\r\n\r\n_EXPORT_STD template <semiregular _Sent>\r\n_NODISCARD constexpr const_sentinel<_Sent> make_const_sentinel(_Sent _Se)\r\n    noexcept(is_nothrow_constructible_v<const_sentinel<_Sent>, _Sent&>) /* strengthened */ {\r\n    return _Se;\r\n}\r\n#endif // _HAS_CXX23\r\n\r\nnamespace ranges {\r\n    template <class>\r\n    constexpr bool _Has_complete_elements = false;\r\n\r\n    template <class _Ty>\r\n        requires requires(_Ty& __t) { sizeof(__t[0]); }\r\n    constexpr bool _Has_complete_elements<_Ty> = true;\r\n\r\n    _EXPORT_STD template <class>\r\n    constexpr bool enable_borrowed_range = false; // specializations allowed by N5014 [range.range]/6\r\n\r\n    template <class _Rng>\r\n    concept _Should_range_access = is_lvalue_reference_v<_Rng> || enable_borrowed_range<remove_cvref_t<_Rng>>;\r\n\r\n    namespace _Begin {\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1681199\r\n        void begin() = delete; // Block unqualified name lookup\r\n#else // ^^^ no workaround / workaround vvv\r\n        void begin();\r\n#endif // ^^^ workaround ^^^\r\n\r\n        template <class _Ty>\r\n        concept _Has_member = requires(_Ty __t) {\r\n            { _STD _Fake_copy_init(__t.begin()) } -> input_or_output_iterator;\r\n        };\r\n\r\n        template <class _Ty>\r\n        concept _Has_ADL = _Has_class_or_enum_type<_Ty> && requires(_Ty __t) {\r\n            { _STD _Fake_copy_init(begin(__t)) } -> input_or_output_iterator; // intentional ADL\r\n        };\r\n\r\n        class _Cpo {\r\n        private:\r\n            enum class _St { _None, _Array, _Member, _Non_member };\r\n\r\n            template <class _Ty>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                _STL_INTERNAL_STATIC_ASSERT(is_lvalue_reference_v<_Ty>);\r\n                if constexpr (is_array_v<remove_reference_t<_Ty>>) {\r\n                    static_assert(_Has_complete_elements<_Ty>,\r\n                        \"The range access customization point objects \"\r\n                        \"std::ranges::begin, std::ranges::end, std::ranges::rbegin, std::ranges::rend, \"\r\n                        \"and std::ranges::data do not accept arrays with incomplete element types.\");\r\n                    return {_St::_Array, true};\r\n                } else if constexpr (_Has_member<_Ty>) {\r\n                    return {_St::_Member, noexcept(_STD _Fake_copy_init(_STD declval<_Ty>().begin()))};\r\n                } else if constexpr (_Has_ADL<_Ty>) {\r\n                    return {_St::_Non_member,\r\n                        noexcept(_STD _Fake_copy_init(begin(_STD declval<_Ty>())))}; // intentional ADL\r\n                } else {\r\n                    return {_St::_None};\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Ty>();\r\n\r\n        public:\r\n            template <_Should_range_access _Ty>\r\n                requires (_Choice<_Ty&>._Strategy != _St::_None)\r\n            _NODISCARD static constexpr auto operator()(_Ty&& _Val) noexcept(_Choice<_Ty&>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Ty&>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_Array) {\r\n                    return _Val;\r\n                } else if constexpr (_Strat == _St::_Member) {\r\n                    return _Val.begin();\r\n                } else if constexpr (_Strat == _St::_Non_member) {\r\n                    return begin(_Val); // intentional ADL\r\n                } else {\r\n                    static_assert(false); // unexpected strategy\r\n                }\r\n            }\r\n        };\r\n    } // namespace _Begin\r\n\r\n    inline namespace _Cpos {\r\n        _EXPORT_STD inline constexpr _Begin::_Cpo begin;\r\n    }\r\n\r\n    _EXPORT_STD template <class _Ty>\r\n    using iterator_t = decltype(_RANGES begin(_STD declval<_Ty&>()));\r\n\r\n    namespace _End {\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1681199\r\n        void end() = delete; // Block unqualified name lookup\r\n#else // ^^^ no workaround / workaround vvv\r\n        void end();\r\n#endif // ^^^ workaround ^^^\r\n\r\n        template <class _Ty>\r\n        concept _Has_member = requires(_Ty __t) {\r\n            { _STD _Fake_copy_init(__t.end()) } -> sentinel_for<iterator_t<_Ty>>;\r\n        };\r\n\r\n        template <class _Ty>\r\n        concept _Has_ADL = _Has_class_or_enum_type<_Ty> && requires(_Ty __t) {\r\n            { _STD _Fake_copy_init(end(__t)) } -> sentinel_for<iterator_t<_Ty>>; // intentional ADL\r\n        };\r\n\r\n        class _Cpo {\r\n        private:\r\n            enum class _St { _None, _Array, _Member, _Non_member };\r\n\r\n            template <class _Ty>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                _STL_INTERNAL_STATIC_ASSERT(is_lvalue_reference_v<_Ty>);\r\n                using _UnRef = remove_reference_t<_Ty>;\r\n\r\n                if constexpr (is_array_v<_UnRef>) {\r\n                    static_assert(_Has_complete_elements<_UnRef>,\r\n                        \"The range access customization point objects \"\r\n                        \"std::ranges::begin, std::ranges::end, std::ranges::rbegin, std::ranges::rend, \"\r\n                        \"and std::ranges::data do not accept arrays with incomplete element types.\");\r\n                    if constexpr (extent_v<_UnRef> != 0) {\r\n                        return {_St::_Array, true};\r\n                    } else {\r\n                        return {_St::_None};\r\n                    }\r\n                } else if constexpr (_Has_member<_Ty>) {\r\n                    return {_St::_Member, noexcept(_STD _Fake_copy_init(_STD declval<_Ty>().end()))};\r\n                } else if constexpr (_Has_ADL<_Ty>) {\r\n                    return {\r\n                        _St::_Non_member, noexcept(_STD _Fake_copy_init(end(_STD declval<_Ty>())))}; // intentional ADL\r\n                } else {\r\n                    return {_St::_None};\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Ty>();\r\n\r\n        public:\r\n            template <_Should_range_access _Ty>\r\n                requires (_Choice<_Ty&>._Strategy != _St::_None)\r\n            _NODISCARD static constexpr auto operator()(_Ty&& _Val) noexcept(_Choice<_Ty&>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Ty&>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_Array) {\r\n                    // extent_v<remove_reference_t<_Ty&>> reuses specializations from _Choose\r\n                    return _Val + extent_v<remove_reference_t<_Ty&>>;\r\n                } else if constexpr (_Strat == _St::_Member) {\r\n                    return _Val.end();\r\n                } else if constexpr (_Strat == _St::_Non_member) {\r\n                    return end(_Val); // intentional ADL\r\n                } else {\r\n                    static_assert(false); // unexpected strategy\r\n                }\r\n            }\r\n        };\r\n    } // namespace _End\r\n\r\n    inline namespace _Cpos {\r\n        _EXPORT_STD inline constexpr _End::_Cpo end;\r\n    }\r\n\r\n    _EXPORT_STD template <class _Rng>\r\n    concept range = requires(_Rng& __r) {\r\n        _RANGES begin(__r);\r\n        _RANGES end(__r);\r\n    };\r\n\r\n    _EXPORT_STD template <class _Rng>\r\n    concept input_range = range<_Rng> && input_iterator<iterator_t<_Rng>>;\r\n\r\n    _EXPORT_STD template <range _Rng>\r\n    using sentinel_t = decltype(_RANGES end(_STD declval<_Rng&>()));\r\n\r\n    template <class _Wrapped>\r\n    concept _Weakly_unwrappable = _Allow_inheriting_unwrap_v<remove_cvref_t<_Wrapped>>\r\n                               && requires(_Wrapped&& _Wr) { _STD forward<_Wrapped>(_Wr)._Unwrapped(); };\r\n\r\n    template <class _Sent>\r\n    concept _Weakly_unwrappable_sentinel = _Weakly_unwrappable<const remove_reference_t<_Sent>&>;\r\n\r\n    template <class _Iter>\r\n    concept _Weakly_unwrappable_iterator =\r\n        _Weakly_unwrappable<_Iter> && requires(_Iter&& _It, remove_cvref_t<_Iter>& _MutIt) {\r\n            _MutIt._Seek_to(_STD forward<_Iter>(_It)._Unwrapped());\r\n        };\r\n\r\n    template <class _Sent, class _Iter>\r\n    concept _Unwrappable_sentinel_for = _Weakly_unwrappable_sentinel<_Sent> && _Weakly_unwrappable_iterator<_Iter>\r\n                                     && requires(_Iter&& _It, const remove_reference_t<_Sent>& _Se) {\r\n                                            {\r\n                                                _Se._Unwrapped()\r\n                                            } -> sentinel_for<decltype(_STD forward<_Iter>(_It)._Unwrapped())>;\r\n                                        };\r\n\r\n    template <class _Sent, class _Iter>\r\n    _NODISCARD constexpr decltype(auto) _Unwrap_iter(_Iter&& _It)\r\n        noexcept(!_Unwrappable_sentinel_for<_Sent, _Iter> || _Has_nothrow_unwrapped<_Iter>) {\r\n        _STL_INTERNAL_STATIC_ASSERT(sentinel_for<remove_cvref_t<_Sent>, remove_cvref_t<_Iter>>);\r\n        if constexpr (is_pointer_v<remove_cvref_t<_Iter>>) {\r\n            return _It + 0;\r\n        } else if constexpr (_Unwrappable_sentinel_for<_Sent, _Iter>) {\r\n            return static_cast<_Iter&&>(_It)._Unwrapped();\r\n        } else {\r\n            return static_cast<_Iter&&>(_It);\r\n        }\r\n    }\r\n\r\n    template <class _Iter, class _Sent>\r\n    _NODISCARD constexpr decltype(auto) _Unwrap_sent(_Sent&& _Se)\r\n        noexcept(!_Unwrappable_sentinel_for<_Sent, _Iter> || _Has_nothrow_unwrapped<_Sent>) {\r\n        _STL_INTERNAL_STATIC_ASSERT(sentinel_for<remove_cvref_t<_Sent>, remove_cvref_t<_Iter>>);\r\n        if constexpr (is_pointer_v<remove_cvref_t<_Sent>>) {\r\n            return _Se + 0;\r\n        } else if constexpr (_Unwrappable_sentinel_for<_Sent, _Iter>) {\r\n            return static_cast<_Sent&&>(_Se)._Unwrapped();\r\n        } else {\r\n            return static_cast<_Sent&&>(_Se);\r\n        }\r\n    }\r\n\r\n    template <range _Rng, class _Iter>\r\n    _NODISCARD constexpr decltype(auto) _Unwrap_range_iter(_Iter&& _It)\r\n        noexcept(noexcept(_RANGES _Unwrap_iter<sentinel_t<_Rng>>(static_cast<_Iter&&>(_It)))) {\r\n        _STL_INTERNAL_STATIC_ASSERT(same_as<remove_cvref_t<_Iter>, iterator_t<_Rng>>);\r\n        return _RANGES _Unwrap_iter<sentinel_t<_Rng>>(static_cast<_Iter&&>(_It));\r\n    }\r\n\r\n    template <range _Rng, class _Sent>\r\n    _NODISCARD constexpr decltype(auto) _Unwrap_range_sent(_Sent&& _Se)\r\n        noexcept(noexcept(_RANGES _Unwrap_sent<iterator_t<_Rng>>(static_cast<_Sent&&>(_Se)))) {\r\n        _STL_INTERNAL_STATIC_ASSERT(same_as<remove_cvref_t<_Sent>, sentinel_t<_Rng>>);\r\n        return _RANGES _Unwrap_sent<iterator_t<_Rng>>(static_cast<_Sent&&>(_Se));\r\n    }\r\n\r\n    template <class _Iter, class _Sent>\r\n    using _Unwrap_iter_t = remove_cvref_t<decltype(_RANGES _Unwrap_iter<_Sent>(_STD declval<_Iter>()))>;\r\n    template <class _Sent, class _Iter>\r\n    using _Unwrap_sent_t = remove_cvref_t<decltype(_RANGES _Unwrap_sent<_Iter>(_STD declval<_Sent>()))>;\r\n\r\n    template <range _Rng>\r\n    using _Unwrapped_iterator_t = _Unwrap_iter_t<iterator_t<_Rng>, sentinel_t<_Rng>>;\r\n    template <range _Rng>\r\n    using _Unwrapped_sentinel_t = _Unwrap_sent_t<sentinel_t<_Rng>, iterator_t<_Rng>>;\r\n\r\n    namespace _Unchecked_begin {\r\n        template <class _Ty>\r\n        concept _Has_member = requires(_Ty& __t) {\r\n            { __t._Unchecked_begin() } -> input_or_output_iterator;\r\n        };\r\n\r\n        template <class _Ty>\r\n        concept _Can_begin = requires(_Ty& __t) { _RANGES _Unwrap_range_iter<_Ty>(_RANGES begin(__t)); };\r\n\r\n        class _Cpo {\r\n        private:\r\n            enum class _St { _None, _Member, _Unwrap };\r\n\r\n            template <class _Ty>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                _STL_INTERNAL_STATIC_ASSERT(is_lvalue_reference_v<_Ty>);\r\n                if constexpr (_Has_member<_Ty>) {\r\n                    _STL_INTERNAL_STATIC_ASSERT(\r\n                        same_as<decltype(_STD declval<_Ty>()._Unchecked_begin()), _Unwrapped_iterator_t<_Ty>>);\r\n                    return {_St::_Member, noexcept(_STD _Fake_copy_init(_STD declval<_Ty>()._Unchecked_begin()))};\r\n                } else if constexpr (_Can_begin<_Ty>) {\r\n                    return {_St::_Unwrap, noexcept(_STD _Fake_copy_init(\r\n                                              _RANGES _Unwrap_range_iter<_Ty>(_RANGES begin(_STD declval<_Ty>()))))};\r\n                } else {\r\n                    return {_St::_None};\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Ty>();\r\n\r\n        public:\r\n            template <_Should_range_access _Ty>\r\n                requires (_Choice<_Ty&>._Strategy != _St::_None)\r\n            _NODISCARD static constexpr auto operator()(_Ty&& _Val) noexcept(_Choice<_Ty&>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Ty&>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_Member) {\r\n                    return _Val._Unchecked_begin();\r\n                } else if constexpr (_Strat == _St::_Unwrap) {\r\n                    return _RANGES _Unwrap_range_iter<_Ty>(_RANGES begin(_Val));\r\n                } else {\r\n                    static_assert(false); // unexpected strategy\r\n                }\r\n            }\r\n        };\r\n    } // namespace _Unchecked_begin\r\n\r\n    inline namespace _Cpos {\r\n        inline constexpr _Unchecked_begin::_Cpo _Ubegin;\r\n    }\r\n\r\n    namespace _Unchecked_end {\r\n        template <class _Ty>\r\n        concept _Has_member = _Unchecked_begin::_Has_member<_Ty> && requires(_Ty& __t) {\r\n            __t._Unchecked_begin(); // required explicitly for better diagnostics\r\n            { __t._Unchecked_end() } -> sentinel_for<decltype(__t._Unchecked_begin())>;\r\n        };\r\n\r\n        template <class _Ty>\r\n        concept _Can_end = requires(_Ty& __t) { _RANGES _Unwrap_range_sent<_Ty>(_RANGES end(__t)); };\r\n\r\n        class _Cpo {\r\n        private:\r\n            enum class _St { _None, _Member, _Unwrap };\r\n\r\n            template <class _Ty>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                _STL_INTERNAL_STATIC_ASSERT(is_lvalue_reference_v<_Ty>);\r\n                if constexpr (_Has_member<_Ty>) {\r\n                    return {_St::_Member, noexcept(_STD declval<_Ty>()._Unchecked_end())};\r\n                } else if constexpr (_Can_end<_Ty>) {\r\n                    return {_St::_Unwrap, noexcept(_RANGES _Unwrap_range_sent<_Ty>(_RANGES end(_STD declval<_Ty>())))};\r\n                } else {\r\n                    return {_St::_None};\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Ty>();\r\n\r\n        public:\r\n            template <_Should_range_access _Ty>\r\n                requires (_Choice<_Ty&>._Strategy != _St::_None)\r\n            _NODISCARD static constexpr auto operator()(_Ty&& _Val) noexcept(_Choice<_Ty&>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Ty&>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_Member) {\r\n                    return _Val._Unchecked_end();\r\n                } else if constexpr (_Strat == _St::_Unwrap) {\r\n                    return _RANGES _Unwrap_range_sent<_Ty>(_RANGES end(_Val));\r\n                } else {\r\n                    static_assert(false); // unexpected strategy\r\n                }\r\n            }\r\n        };\r\n    } // namespace _Unchecked_end\r\n\r\n    inline namespace _Cpos {\r\n        inline constexpr _Unchecked_end::_Cpo _Uend;\r\n    }\r\n\r\n    _EXPORT_STD template <class _Rng>\r\n    concept borrowed_range = range<_Rng> && _Should_range_access<_Rng>;\r\n\r\n    _EXPORT_STD template <range _Rng>\r\n    using range_difference_t = iter_difference_t<iterator_t<_Rng>>;\r\n\r\n    _EXPORT_STD template <range _Rng>\r\n    using range_value_t = iter_value_t<iterator_t<_Rng>>;\r\n\r\n    _EXPORT_STD template <range _Rng>\r\n    using range_reference_t = iter_reference_t<iterator_t<_Rng>>;\r\n\r\n    _EXPORT_STD template <range _Rng>\r\n    using range_rvalue_reference_t = iter_rvalue_reference_t<iterator_t<_Rng>>;\r\n\r\n    _EXPORT_STD template <range _Rng>\r\n    using range_common_reference_t = iter_common_reference_t<iterator_t<_Rng>>;\r\n\r\n#if _HAS_CXX23\r\n    _EXPORT_STD template <class _Rng>\r\n    concept constant_range = input_range<_Rng> && _Constant_iterator<iterator_t<_Rng>>;\r\n\r\n    template <input_range _Rng>\r\n    _NODISCARD _MSVC_INTRINSIC constexpr auto& _Possibly_const_range(_Rng& _Range) noexcept {\r\n        if constexpr (input_range<const _Rng>) {\r\n            return _STD as_const(_Range);\r\n        } else {\r\n            return _Range;\r\n        }\r\n    }\r\n\r\n    template <class _Ty>\r\n    _NODISCARD _MSVC_INTRINSIC constexpr auto _As_const_pointer(const _Ty* _Ptr) noexcept {\r\n        return _Ptr;\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    struct _Cbegin_fn {\r\n#if _HAS_CXX23\r\n        template <class _Ty>\r\n        using _Begin_on_const = decltype(_RANGES begin(_RANGES _Possibly_const_range(_STD declval<_Ty&>())));\r\n\r\n        template <_Should_range_access _Ty>\r\n            requires requires(_Ty& _Val) {\r\n                typename _Begin_on_const<_Ty>;\r\n                typename const_iterator<_Begin_on_const<_Ty>>;\r\n                const_iterator<_Begin_on_const<_Ty>>{_RANGES begin(_RANGES _Possibly_const_range(_Val))};\r\n            }\r\n        _NODISCARD static constexpr auto operator()(_Ty&& _Val) noexcept(\r\n            noexcept(const_iterator<_Begin_on_const<_Ty>>{_RANGES begin(_RANGES _Possibly_const_range(_Val))})) {\r\n            return const_iterator<_Begin_on_const<_Ty>>{_RANGES begin(_RANGES _Possibly_const_range(_Val))};\r\n        }\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n        template <class _Ty, class _CTy = _Const_thru_ref<_Ty>>\r\n        _NODISCARD static constexpr auto operator()(_Ty&& _Val)\r\n            noexcept(noexcept(_RANGES begin(static_cast<_CTy&&>(_Val))))\r\n            requires requires { _RANGES begin(static_cast<_CTy &&>(_Val)); }\r\n        {\r\n            return _RANGES begin(static_cast<_CTy&&>(_Val));\r\n        }\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n    };\r\n\r\n    inline namespace _Cpos {\r\n        _EXPORT_STD inline constexpr _Cbegin_fn cbegin;\r\n    }\r\n\r\n    struct _Cend_fn {\r\n#if _HAS_CXX23\r\n        template <class _Ty>\r\n        using _End_on_const = decltype(_RANGES end(_RANGES _Possibly_const_range(_STD declval<_Ty&>())));\r\n\r\n        template <_Should_range_access _Ty>\r\n            requires requires(_Ty& _Val) {\r\n                typename _End_on_const<_Ty>;\r\n                typename const_sentinel<_End_on_const<_Ty>>;\r\n                const_sentinel<_End_on_const<_Ty>>{_RANGES end(_RANGES _Possibly_const_range(_Val))};\r\n            }\r\n        _NODISCARD static constexpr auto operator()(_Ty&& _Val)\r\n            noexcept(noexcept(const_sentinel<_End_on_const<_Ty>>{_RANGES end(_RANGES _Possibly_const_range(_Val))})) {\r\n            return const_sentinel<_End_on_const<_Ty>>{_RANGES end(_RANGES _Possibly_const_range(_Val))};\r\n        }\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n        template <class _Ty, class _CTy = _Const_thru_ref<_Ty>>\r\n        _NODISCARD static constexpr auto operator()(_Ty&& _Val)\r\n            noexcept(noexcept(_RANGES end(static_cast<_CTy&&>(_Val))))\r\n            requires requires { _RANGES end(static_cast<_CTy &&>(_Val)); }\r\n        {\r\n            return _RANGES end(static_cast<_CTy&&>(_Val));\r\n        }\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n    };\r\n\r\n    inline namespace _Cpos {\r\n        _EXPORT_STD inline constexpr _Cend_fn cend;\r\n    }\r\n\r\n    namespace _Rbegin {\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1681199\r\n        void rbegin() = delete; // Block unqualified name lookup\r\n#else // ^^^ no workaround / workaround vvv\r\n        void rbegin();\r\n#endif // ^^^ workaround ^^^\r\n\r\n        template <class _Ty>\r\n        concept _Has_member = requires(_Ty __t) {\r\n            { _STD _Fake_copy_init(__t.rbegin()) } -> input_or_output_iterator;\r\n        };\r\n\r\n        template <class _Ty>\r\n        concept _Has_ADL = _Has_class_or_enum_type<_Ty> && requires(_Ty __t) {\r\n            { _STD _Fake_copy_init(rbegin(__t)) } -> input_or_output_iterator; // intentional ADL\r\n        };\r\n\r\n        template <class _Ty>\r\n        concept _Can_make_reverse = requires(_Ty __t) {\r\n            { _RANGES begin(__t) } -> bidirectional_iterator;\r\n            { _RANGES end(__t) } -> same_as<decltype(_RANGES begin(__t))>;\r\n        };\r\n\r\n        class _Cpo {\r\n        private:\r\n            enum class _St { _None, _Member, _Non_member, _Make_reverse };\r\n\r\n            template <class _Ty>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                _STL_INTERNAL_STATIC_ASSERT(is_lvalue_reference_v<_Ty>);\r\n                if constexpr (_Has_member<_Ty>) {\r\n                    return {_St::_Member, noexcept(_STD _Fake_copy_init(_STD declval<_Ty>().rbegin()))};\r\n                } else if constexpr (_Has_ADL<_Ty>) {\r\n                    return {_St::_Non_member,\r\n                        noexcept(_STD _Fake_copy_init(rbegin(_STD declval<_Ty>())))}; // intentional ADL\r\n                } else if constexpr (_Can_make_reverse<_Ty>) {\r\n                    return {_St::_Make_reverse, noexcept(_STD make_reverse_iterator(_RANGES end(_STD declval<_Ty>())))};\r\n                } else {\r\n                    return {_St::_None};\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Ty>();\r\n\r\n        public:\r\n            template <_Should_range_access _Ty>\r\n                requires (_Choice<_Ty&>._Strategy != _St::_None)\r\n            _NODISCARD static constexpr auto operator()(_Ty&& _Val) noexcept(_Choice<_Ty&>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Ty&>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_Member) {\r\n                    return _Val.rbegin();\r\n                } else if constexpr (_Strat == _St::_Non_member) {\r\n                    return rbegin(_Val); // intentional ADL\r\n                } else if constexpr (_Strat == _St::_Make_reverse) {\r\n                    return _STD make_reverse_iterator(_RANGES end(_Val));\r\n                } else {\r\n                    static_assert(false); // unexpected strategy\r\n                }\r\n            }\r\n        };\r\n    } // namespace _Rbegin\r\n\r\n    inline namespace _Cpos {\r\n        _EXPORT_STD inline constexpr _Rbegin::_Cpo rbegin;\r\n    }\r\n\r\n    namespace _Rend {\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1681199\r\n        void rend() = delete; // Block unqualified name lookup\r\n#else // ^^^ no workaround / workaround vvv\r\n        void rend();\r\n#endif // ^^^ workaround ^^^\r\n\r\n        template <class _Ty>\r\n        concept _Has_member = requires(_Ty __t) {\r\n            { _STD _Fake_copy_init(__t.rend()) } -> sentinel_for<decltype(_RANGES rbegin(__t))>;\r\n        };\r\n\r\n        template <class _Ty>\r\n        concept _Has_ADL = _Has_class_or_enum_type<_Ty> && requires(_Ty __t) {\r\n            // intentional ADL\r\n            { _STD _Fake_copy_init(rend(__t)) } -> sentinel_for<decltype(_RANGES rbegin(__t))>;\r\n        };\r\n\r\n        template <class _Ty>\r\n        concept _Can_make_reverse = requires(_Ty __t) {\r\n            { _RANGES begin(__t) } -> bidirectional_iterator;\r\n            { _RANGES end(__t) } -> same_as<decltype(_RANGES begin(__t))>;\r\n        };\r\n\r\n        class _Cpo {\r\n        private:\r\n            enum class _St { _None, _Member, _Non_member, _Make_reverse };\r\n\r\n            template <class _Ty>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                _STL_INTERNAL_STATIC_ASSERT(is_lvalue_reference_v<_Ty>);\r\n                if constexpr (_Has_member<_Ty>) {\r\n                    return {_St::_Member, noexcept(_STD _Fake_copy_init(_STD declval<_Ty>().rend()))};\r\n                } else if constexpr (_Has_ADL<_Ty>) {\r\n                    return {\r\n                        _St::_Non_member, noexcept(_STD _Fake_copy_init(rend(_STD declval<_Ty>())))}; // intentional ADL\r\n                } else if constexpr (_Can_make_reverse<_Ty>) {\r\n                    return {\r\n                        _St::_Make_reverse, noexcept(_STD make_reverse_iterator(_RANGES begin(_STD declval<_Ty>())))};\r\n                } else {\r\n                    return {_St::_None};\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Ty>();\r\n\r\n        public:\r\n            template <_Should_range_access _Ty>\r\n                requires (_Choice<_Ty&>._Strategy != _St::_None)\r\n            _NODISCARD static constexpr auto operator()(_Ty&& _Val) noexcept(_Choice<_Ty&>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Ty&>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_Member) {\r\n                    return _Val.rend();\r\n                } else if constexpr (_Strat == _St::_Non_member) {\r\n                    return rend(_Val); // intentional ADL\r\n                } else if constexpr (_Strat == _St::_Make_reverse) {\r\n                    return _STD make_reverse_iterator(_RANGES begin(_Val));\r\n                } else {\r\n                    static_assert(false); // unexpected strategy\r\n                }\r\n            }\r\n        };\r\n    } // namespace _Rend\r\n\r\n    inline namespace _Cpos {\r\n        _EXPORT_STD inline constexpr _Rend::_Cpo rend;\r\n    }\r\n\r\n    struct _Crbegin_fn {\r\n#if _HAS_CXX23\r\n        template <class _Ty>\r\n        using _Rbegin_on_const = decltype(_RANGES rbegin(_RANGES _Possibly_const_range(_STD declval<_Ty&>())));\r\n\r\n        template <_Should_range_access _Ty>\r\n            requires requires(_Ty& _Val) {\r\n                typename _Rbegin_on_const<_Ty>;\r\n                typename const_iterator<_Rbegin_on_const<_Ty>>;\r\n                const_iterator<_Rbegin_on_const<_Ty>>{_RANGES rbegin(_RANGES _Possibly_const_range(_Val))};\r\n            }\r\n        _NODISCARD static constexpr auto operator()(_Ty&& _Val) noexcept(\r\n            noexcept(const_iterator<_Rbegin_on_const<_Ty>>{_RANGES rbegin(_RANGES _Possibly_const_range(_Val))})) {\r\n            return const_iterator<_Rbegin_on_const<_Ty>>{_RANGES rbegin(_RANGES _Possibly_const_range(_Val))};\r\n        }\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n        template <class _Ty, class _CTy = _Const_thru_ref<_Ty>>\r\n        _NODISCARD static constexpr auto operator()(_Ty&& _Val)\r\n            noexcept(noexcept(_RANGES rbegin(static_cast<_CTy&&>(_Val))))\r\n            requires requires { _RANGES rbegin(static_cast<_CTy &&>(_Val)); }\r\n        {\r\n            return _RANGES rbegin(static_cast<_CTy&&>(_Val));\r\n        }\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n    };\r\n\r\n    inline namespace _Cpos {\r\n        _EXPORT_STD inline constexpr _Crbegin_fn crbegin;\r\n    }\r\n\r\n    struct _Crend_fn {\r\n#if _HAS_CXX23\r\n        template <class _Ty>\r\n        using _Rend_on_const = decltype(_RANGES rend(_RANGES _Possibly_const_range(_STD declval<_Ty&>())));\r\n\r\n        template <_Should_range_access _Ty>\r\n            requires requires(_Ty& _Val) {\r\n                typename _Rend_on_const<_Ty>;\r\n                typename const_sentinel<_Rend_on_const<_Ty>>;\r\n                const_sentinel<_Rend_on_const<_Ty>>{_RANGES rend(_RANGES _Possibly_const_range(_Val))};\r\n            }\r\n        _NODISCARD static constexpr auto operator()(_Ty&& _Val)\r\n            noexcept(noexcept(const_sentinel<_Rend_on_const<_Ty>>{_RANGES rend(_RANGES _Possibly_const_range(_Val))})) {\r\n            return const_sentinel<_Rend_on_const<_Ty>>{_RANGES rend(_RANGES _Possibly_const_range(_Val))};\r\n        }\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n        template <class _Ty, class _CTy = _Const_thru_ref<_Ty>>\r\n        _NODISCARD static constexpr auto operator()(_Ty&& _Val)\r\n            noexcept(noexcept(_RANGES rend(static_cast<_CTy&&>(_Val))))\r\n            requires requires { _RANGES rend(static_cast<_CTy &&>(_Val)); }\r\n        {\r\n            return _RANGES rend(static_cast<_CTy&&>(_Val));\r\n        }\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n    };\r\n\r\n    inline namespace _Cpos {\r\n        _EXPORT_STD inline constexpr _Crend_fn crend;\r\n    }\r\n\r\n    _EXPORT_STD template <class>\r\n    constexpr bool disable_sized_range = false; // specializations allowed by N5014 [range.sized]/3\r\n\r\n    namespace _Size {\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1681199\r\n        void size() = delete; // Block unqualified name lookup\r\n#else // ^^^ no workaround / workaround vvv\r\n        void size();\r\n#endif // ^^^ workaround ^^^\r\n\r\n        template <class _Ty, class _UnCV>\r\n        concept _Has_member = !disable_sized_range<_UnCV> && requires(_Ty __t) {\r\n            { _STD _Fake_copy_init(__t.size()) } -> _Integer_like;\r\n        };\r\n\r\n        template <class _Ty, class _UnCV>\r\n        concept _Has_ADL = _Has_class_or_enum_type<_Ty> && !disable_sized_range<_UnCV> && requires(_Ty __t) {\r\n            { _STD _Fake_copy_init(size(__t)) } -> _Integer_like; // intentional ADL\r\n        };\r\n\r\n        template <class _Ty>\r\n        concept _Can_difference = requires(_Ty __t) {\r\n            { _RANGES begin(__t) } -> forward_iterator;\r\n            { _RANGES end(__t) } -> sized_sentinel_for<decltype(_RANGES begin(__t))>;\r\n        };\r\n\r\n        class _Cpo {\r\n        private:\r\n            enum class _St { _None, _Array, _Member, _Non_member, _Subtract };\r\n\r\n            template <class _Ty>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                _STL_INTERNAL_STATIC_ASSERT(is_lvalue_reference_v<_Ty>);\r\n                using _UnCV = remove_cvref_t<_Ty>;\r\n\r\n                if constexpr (is_array_v<_UnCV>) {\r\n                    if constexpr (extent_v<_UnCV> != 0) {\r\n                        return {_St::_Array, true};\r\n                    } else {\r\n                        return {_St::_None};\r\n                    }\r\n                } else if constexpr (_Has_member<_Ty, _UnCV>) {\r\n                    return {_St::_Member, noexcept(_STD _Fake_copy_init(_STD declval<_Ty>().size()))};\r\n                } else if constexpr (_Has_ADL<_Ty, _UnCV>) {\r\n                    return {\r\n                        _St::_Non_member, noexcept(_STD _Fake_copy_init(size(_STD declval<_Ty>())))}; // intentional ADL\r\n                } else if constexpr (_Can_difference<_Ty>) {\r\n                    return {_St::_Subtract,\r\n                        noexcept(_RANGES end(_STD declval<_Ty>()) - _RANGES begin(_STD declval<_Ty>()))};\r\n                } else {\r\n                    return {_St::_None};\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Ty>();\r\n\r\n        public:\r\n            template <class _Ty>\r\n                requires (_Choice<_Ty&>._Strategy != _St::_None)\r\n            _NODISCARD static constexpr auto operator()(_Ty&& _Val) noexcept(_Choice<_Ty&>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Ty&>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_Array) {\r\n                    // extent_v<remove_cvref_t<_Ty&>> reuses specializations from _Choose\r\n                    return extent_v<remove_cvref_t<_Ty&>>;\r\n                } else if constexpr (_Strat == _St::_Member) {\r\n                    return _Val.size();\r\n                } else if constexpr (_Strat == _St::_Non_member) {\r\n                    return size(_Val); // intentional ADL\r\n                } else if constexpr (_Strat == _St::_Subtract) {\r\n                    const auto _Delta = _RANGES end(_Val) - _RANGES begin(_Val);\r\n                    return static_cast<_Make_unsigned_like_t<remove_cv_t<decltype(_Delta)>>>(_Delta);\r\n                } else {\r\n                    static_assert(false); // unexpected strategy\r\n                }\r\n            }\r\n        };\r\n    } // namespace _Size\r\n\r\n    inline namespace _Cpos {\r\n        _EXPORT_STD inline constexpr _Size::_Cpo size;\r\n    }\r\n\r\n    namespace _Empty {\r\n        template <class _Ty>\r\n        concept _Has_member = requires(_Ty __t) { static_cast<bool>(__t.empty()); };\r\n\r\n        template <class _Ty>\r\n        concept _Has_size = requires(_Ty __t) { _RANGES size(__t); };\r\n\r\n        template <class _Ty>\r\n        concept _Can_begin_end = requires(_Ty __t) {\r\n            { _RANGES begin(__t) } -> forward_iterator;\r\n            _RANGES end(__t);\r\n        };\r\n\r\n        class _Cpo {\r\n        private:\r\n            enum class _St { _None, _Member, _Size, _Compare };\r\n\r\n            template <class _Ty>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                _STL_INTERNAL_STATIC_ASSERT(is_lvalue_reference_v<_Ty>);\r\n                if constexpr (is_unbounded_array_v<remove_reference_t<_Ty>>) {\r\n                    return {_St::_None};\r\n                } else if constexpr (_Has_member<_Ty>) {\r\n                    return {_St::_Member, noexcept(static_cast<bool>(_STD declval<_Ty>().empty()))};\r\n                } else if constexpr (_Has_size<_Ty>) {\r\n                    return {_St::_Size, noexcept(_RANGES size(_STD declval<_Ty>()))};\r\n                } else if constexpr (_Can_begin_end<_Ty>) {\r\n                    constexpr auto _Nothrow = noexcept(\r\n                        static_cast<bool>(_RANGES begin(_STD declval<_Ty>()) == _RANGES end(_STD declval<_Ty>())));\r\n                    return {_St::_Compare, _Nothrow};\r\n                } else {\r\n                    return {_St::_None};\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Ty>();\r\n\r\n        public:\r\n            template <class _Ty>\r\n                requires (_Choice<_Ty&>._Strategy != _St::_None)\r\n            _NODISCARD static constexpr bool operator()(_Ty&& _Val) noexcept(_Choice<_Ty&>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Ty&>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_Member) {\r\n                    return static_cast<bool>(_Val.empty());\r\n                } else if constexpr (_Strat == _St::_Size) {\r\n                    return _RANGES size(_Val) == 0;\r\n                } else if constexpr (_Strat == _St::_Compare) {\r\n                    return static_cast<bool>(_RANGES begin(_Val) == _RANGES end(_Val));\r\n                } else {\r\n                    static_assert(false); // unexpected strategy\r\n                }\r\n            }\r\n        };\r\n    } // namespace _Empty\r\n\r\n    inline namespace _Cpos {\r\n        _EXPORT_STD inline constexpr _Empty::_Cpo empty;\r\n    }\r\n\r\n    namespace _Data {\r\n        template <class _Ty>\r\n        concept _Points_to_object = is_pointer_v<_Ty> && is_object_v<remove_pointer_t<_Ty>>;\r\n\r\n        template <class _Ty>\r\n        concept _Has_member = requires(_Ty __t) {\r\n            { _STD _Fake_copy_init(__t.data()) } -> _Points_to_object;\r\n        };\r\n\r\n        template <class _Ty>\r\n        concept _Has_contiguous_iterator = requires(_Ty __t) {\r\n            { _RANGES begin(__t) } -> contiguous_iterator;\r\n        };\r\n\r\n        class _Cpo {\r\n        private:\r\n            enum class _St { _None, _Member, _Address };\r\n\r\n            template <class _Ty>\r\n            _NODISCARD static consteval _Choice_t<_St> _Choose() noexcept {\r\n                _STL_INTERNAL_STATIC_ASSERT(is_lvalue_reference_v<_Ty>);\r\n                if constexpr (_Has_member<_Ty>) {\r\n                    return {_St::_Member, noexcept(_STD declval<_Ty>().data())};\r\n                } else if constexpr (_Has_contiguous_iterator<_Ty>) {\r\n                    return {_St::_Address, noexcept(_STD to_address(_RANGES begin(_STD declval<_Ty>())))};\r\n                } else {\r\n                    return {_St::_None};\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            static constexpr _Choice_t<_St> _Choice = _Choose<_Ty>();\r\n\r\n        public:\r\n            template <_Should_range_access _Ty>\r\n                requires (_Choice<_Ty&>._Strategy != _St::_None)\r\n            _NODISCARD static constexpr auto operator()(_Ty&& _Val) noexcept(_Choice<_Ty&>._No_throw) {\r\n                constexpr _St _Strat = _Choice<_Ty&>._Strategy;\r\n\r\n                if constexpr (_Strat == _St::_Member) {\r\n                    return _Val.data();\r\n                } else if constexpr (_Strat == _St::_Address) {\r\n                    return _STD to_address(_RANGES begin(_Val));\r\n                } else {\r\n                    static_assert(false); // unexpected strategy\r\n                }\r\n            }\r\n        };\r\n    } // namespace _Data\r\n\r\n    inline namespace _Cpos {\r\n        _EXPORT_STD inline constexpr _Data::_Cpo data;\r\n    }\r\n\r\n    struct _Cdata_fn {\r\n#if _HAS_CXX23\r\n        template <_Should_range_access _Ty>\r\n            requires requires(_Ty& _Val) { //\r\n                _RANGES _As_const_pointer(_RANGES data(_RANGES _Possibly_const_range(_Val)));\r\n            }\r\n        _NODISCARD static constexpr auto operator()(_Ty&& _Val)\r\n            noexcept(noexcept(_RANGES data(_RANGES _Possibly_const_range(_Val)))) {\r\n            return _RANGES _As_const_pointer(_RANGES data(_RANGES _Possibly_const_range(_Val)));\r\n        }\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n        template <class _Ty, class _CTy = _Const_thru_ref<_Ty>>\r\n        _NODISCARD static constexpr auto operator()(_Ty&& _Val)\r\n            noexcept(noexcept(_RANGES data(static_cast<_CTy&&>(_Val))))\r\n            requires requires { _RANGES data(static_cast<_CTy &&>(_Val)); }\r\n        {\r\n            return _RANGES data(static_cast<_CTy&&>(_Val));\r\n        }\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n    };\r\n\r\n    inline namespace _Cpos {\r\n        _EXPORT_STD inline constexpr _Cdata_fn cdata;\r\n    }\r\n\r\n    _EXPORT_STD template <class _Rng>\r\n    concept sized_range = range<_Rng> && requires(_Rng& __r) { _RANGES size(__r); };\r\n\r\n    _EXPORT_STD template <sized_range _Rng>\r\n    using range_size_t = decltype(_RANGES size(_STD declval<_Rng&>()));\r\n\r\n    _EXPORT_STD struct view_base {};\r\n\r\n    _EXPORT_STD template <class _Derived>\r\n        requires is_class_v<_Derived> && same_as<_Derived, remove_cv_t<_Derived>>\r\n    class view_interface;\r\n\r\n    template <class _Ty, class _Uty>\r\n        requires (!is_same_v<_Ty, view_interface<_Uty>>)\r\n    void _Strictly_derived_from_view_interface_impl(view_interface<_Uty>*);\r\n\r\n    _EXPORT_STD template <class _Ty> // specializations allowed by N5014 [range.view]/7\r\n    constexpr bool enable_view = derived_from<_Ty, view_base> || requires {\r\n        _RANGES _Strictly_derived_from_view_interface_impl<remove_cv_t<_Ty>>(\r\n            static_cast<remove_cv_t<_Ty>*>(nullptr)); // qualified: avoid ADL, handle incomplete types\r\n    };\r\n\r\n    _EXPORT_STD template <class _Ty>\r\n    concept view = range<_Ty> && movable<_Ty> && enable_view<_Ty>;\r\n\r\n    _EXPORT_STD template <class _Rng, class _Ty>\r\n    concept output_range = range<_Rng> && output_iterator<iterator_t<_Rng>, _Ty>;\r\n\r\n    _EXPORT_STD template <class _Rng>\r\n    concept forward_range = range<_Rng> && forward_iterator<iterator_t<_Rng>>;\r\n\r\n    _EXPORT_STD template <class _Rng>\r\n    concept bidirectional_range = range<_Rng> && bidirectional_iterator<iterator_t<_Rng>>;\r\n\r\n    _EXPORT_STD template <class _Rng>\r\n    concept random_access_range = range<_Rng> && random_access_iterator<iterator_t<_Rng>>;\r\n\r\n    _EXPORT_STD template <class _Rng>\r\n    concept contiguous_range = range<_Rng> && contiguous_iterator<iterator_t<_Rng>> && requires(_Rng& __r) {\r\n        { _RANGES data(__r) } -> same_as<add_pointer_t<range_reference_t<_Rng>>>;\r\n    };\r\n\r\n    struct _Advance_fn {\r\n        template <input_or_output_iterator _It>\r\n        static constexpr void operator()(_It& _Where, iter_difference_t<_It> _Off) {\r\n            if constexpr (random_access_iterator<_It>) {\r\n                _Where += _Off;\r\n            } else {\r\n                if constexpr (!bidirectional_iterator<_It>) {\r\n                    _STL_ASSERT(_Off >= 0, \"negative advance of non-bidirectional iterator\");\r\n                }\r\n\r\n                decltype(auto) _UWhere      = _STD _Get_unwrapped_n(_STD move(_Where), _Off);\r\n                constexpr bool _Need_rewrap = !is_reference_v<decltype(_STD _Get_unwrapped_n(_STD move(_Where), _Off))>;\r\n\r\n                if constexpr (bidirectional_iterator<_It>) {\r\n                    for (; _Off < 0; ++_Off) {\r\n                        --_UWhere;\r\n                    }\r\n                }\r\n\r\n                for (; _Off > 0; --_Off) {\r\n                    ++_UWhere;\r\n                }\r\n\r\n                if constexpr (_Need_rewrap) {\r\n                    _STD _Seek_wrapped(_Where, _STD move(_UWhere));\r\n                }\r\n            }\r\n        }\r\n\r\n        template <input_or_output_iterator _It, sentinel_for<_It> _Se>\r\n        static constexpr void operator()(_It& _Where, _Se _Last) {\r\n            if constexpr (assignable_from<_It&, _Se>) {\r\n                _Where = static_cast<_Se&&>(_Last);\r\n            } else if constexpr (sized_sentinel_for<_Se, _It>) {\r\n                operator()(_Where, _Last - _Where);\r\n            } else {\r\n                _STD _Adl_verify_range(_Where, _Last);\r\n\r\n                decltype(auto) _UWhere = _RANGES _Unwrap_iter<_Se>(static_cast<_It&&>(_Where));\r\n                constexpr bool _Need_rewrap =\r\n                    !is_reference_v<decltype(_RANGES _Unwrap_iter<_Se>(static_cast<_It&&>(_Where)))>;\r\n                decltype(auto) _ULast = _RANGES _Unwrap_sent<_It>(static_cast<_Se&&>(_Last));\r\n\r\n                while (_UWhere != _ULast) {\r\n                    ++_UWhere;\r\n                }\r\n\r\n                if constexpr (_Need_rewrap) {\r\n                    _STD _Seek_wrapped(_Where, _STD move(_UWhere));\r\n                }\r\n            }\r\n        }\r\n\r\n        template <input_or_output_iterator _It, sentinel_for<_It> _Se>\r\n        static constexpr iter_difference_t<_It> operator()(_It& _Where, iter_difference_t<_It> _Off, _Se _Last) {\r\n            if constexpr (sized_sentinel_for<_Se, _It>) {\r\n                const iter_difference_t<_It> _Delta = _Last - _Where;\r\n                if ((_Off < 0 && _Off <= _Delta) || (_Off > 0 && _Off >= _Delta)) {\r\n                    if constexpr (assignable_from<_It&, _Se>) {\r\n                        _Where = static_cast<_Se&&>(_Last);\r\n                    } else {\r\n                        operator()(_Where, _Delta);\r\n                    }\r\n                    return _Off - _Delta;\r\n                }\r\n\r\n                operator()(_Where, _Off);\r\n                return 0;\r\n            } else {\r\n                // performance note: develop unwrapping technology for (i, n, s)?\r\n                if constexpr (bidirectional_iterator<_It>) {\r\n                    for (; _Off < 0 && _Where != _Last; ++_Off) {\r\n                        --_Where;\r\n                    }\r\n                } else {\r\n                    _STL_ASSERT(_Off >= 0, \"negative advance of non-bidirectional iterator\");\r\n                }\r\n\r\n                for (; _Off > 0 && _Where != _Last; --_Off) {\r\n                    ++_Where;\r\n                }\r\n\r\n                return _Off;\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Advance_fn advance;\r\n\r\n    template <class _Ty>\r\n    using _Distance_iterator_t = // per LWG-4303\r\n        conditional_t<is_array_v<remove_reference_t<_Ty>>, decay_t<_Ty>, remove_const_t<remove_reference_t<_Ty>>>;\r\n\r\n    class _Distance_fn {\r\n    public:\r\n        template <class _It, sentinel_for<_It> _Se>\r\n            requires (!sized_sentinel_for<_Se, _It>)\r\n        _NODISCARD static constexpr iter_difference_t<_It> operator()(_It _First, _Se _Last)\r\n            noexcept(_Calculate_noexcept<_It, _Se>()) /* strengthened */ {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            return _Distance_unchecked(\r\n                _RANGES _Unwrap_iter<_Se>(_STD move(_First)), _RANGES _Unwrap_sent<_It>(_STD move(_Last)));\r\n        }\r\n\r\n        template <class _It, sized_sentinel_for<_Distance_iterator_t<_It>> _Se>\r\n        _NODISCARD static constexpr iter_difference_t<_Distance_iterator_t<_It>> operator()(\r\n            _It&& _First, const _Se _Last) noexcept(_Calculate_noexcept<_It, _Se>()) /* strengthened */ {\r\n            if constexpr (!is_array_v<remove_reference_t<_It>>) {\r\n                return _Last - _First;\r\n            } else {\r\n                return _Last - static_cast<decay_t<_It>>(_First);\r\n            }\r\n        }\r\n\r\n        template <range _Rng>\r\n        _NODISCARD static constexpr range_difference_t<_Rng> operator()(_Rng&& _Range)\r\n            noexcept(_Calculate_noexcept<_Rng>()) /* strengthened */ {\r\n            if constexpr (sized_range<_Rng>) {\r\n                return static_cast<range_difference_t<_Rng>>(_RANGES size(_Range));\r\n            } else {\r\n                return _Distance_unchecked(_Ubegin(_Range), _Uend(_Range));\r\n            }\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se>\r\n        _NODISCARD static constexpr iter_difference_t<_It> _Distance_unchecked(_It _First, const _Se _Last)\r\n            noexcept(noexcept(++_First != _Last)) {\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n\r\n            iter_difference_t<_It> _Count = 0;\r\n            for (; _First != _Last; ++_First) {\r\n                ++_Count;\r\n            }\r\n\r\n            return _Count;\r\n        }\r\n\r\n        template <class _It, class _Se>\r\n        _NODISCARD static consteval bool _Calculate_noexcept() noexcept {\r\n            if constexpr (sized_sentinel_for<_Se, _Distance_iterator_t<_It>>) {\r\n                if constexpr (!is_array_v<remove_reference_t<_It>>) {\r\n                    return noexcept(_STD declval<const _Se&>() - _STD declval<_It&>());\r\n                } else {\r\n                    return noexcept(_STD declval<const _Se&>() - _STD declval<decay_t<_It>>());\r\n                }\r\n            } else if constexpr (sentinel_for<_Se, _It> && !sized_sentinel_for<_Se, _It>) {\r\n                return noexcept(_Distance_unchecked(\r\n                    _STD _Get_unwrapped(_STD declval<_It>()), _STD _Get_unwrapped(_STD declval<_Se>())));\r\n            } else {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        template <class _Rng>\r\n        _NODISCARD static consteval bool _Calculate_noexcept() noexcept {\r\n            if constexpr (sized_range<_Rng>) {\r\n                return noexcept(_RANGES size(_STD declval<_Rng&>()));\r\n            } else {\r\n                return noexcept(_Distance_unchecked(_Ubegin(_STD declval<_Rng&>()), _Uend(_STD declval<_Rng&>())));\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Distance_fn distance;\r\n\r\n    struct _Ssize_fn {\r\n        template <class _Rng>\r\n        _NODISCARD static constexpr auto operator()(_Rng&& _Range) noexcept(noexcept(_RANGES size(_Range)))\r\n            requires requires { _RANGES size(_Range); }\r\n        {\r\n            using _Sty = _Make_signed_like_t<decltype(_RANGES size(_Range))>;\r\n            using _Ty  = common_type_t<conditional_t<is_integral_v<_Sty>, ptrdiff_t, _Sty>, _Sty>;\r\n            return static_cast<_Ty>(_RANGES size(_Range));\r\n        }\r\n    };\r\n\r\n    inline namespace _Cpos {\r\n        _EXPORT_STD inline constexpr _Ssize_fn ssize;\r\n    }\r\n\r\n    struct _Next_fn {\r\n        template <input_or_output_iterator _It>\r\n        _NODISCARD static constexpr _It operator()(_It _Where) {\r\n            ++_Where;\r\n            return _Where;\r\n        }\r\n\r\n        template <input_or_output_iterator _It>\r\n        _NODISCARD static constexpr _It operator()(_It _Where, const iter_difference_t<_It> _Off) {\r\n            _RANGES advance(_Where, _Off);\r\n            return _Where;\r\n        }\r\n\r\n        template <input_or_output_iterator _It, sentinel_for<_It> _Se>\r\n        _NODISCARD static constexpr _It operator()(_It _Where, _Se _Last) {\r\n            _RANGES advance(_Where, static_cast<_Se&&>(_Last));\r\n            return _Where;\r\n        }\r\n\r\n        template <input_or_output_iterator _It, sentinel_for<_It> _Se>\r\n        _NODISCARD static constexpr _It operator()(_It _Where, const iter_difference_t<_It> _Off, _Se _Last) {\r\n            _RANGES advance(_Where, _Off, static_cast<_Se&&>(_Last));\r\n            return _Where;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Next_fn next;\r\n\r\n    struct _Prev_fn {\r\n        template <bidirectional_iterator _It>\r\n        _NODISCARD static constexpr _It operator()(_It _Where) {\r\n            --_Where;\r\n            return _Where;\r\n        }\r\n\r\n        template <bidirectional_iterator _It>\r\n        _NODISCARD static constexpr _It operator()(_It _Where, const iter_difference_t<_It> _Off) {\r\n            _STL_ASSERT(_Off != _Min_possible_v<iter_difference_t<_It>>, \"integer overflow\");\r\n            _RANGES advance(_Where, -_Off);\r\n            return _Where;\r\n        }\r\n\r\n        template <bidirectional_iterator _It>\r\n        _NODISCARD static constexpr _It operator()(_It _Where, const iter_difference_t<_It> _Off, _It _Last) {\r\n            _STL_ASSERT(_Off != _Min_possible_v<iter_difference_t<_It>>, \"integer overflow\");\r\n            _RANGES advance(_Where, -_Off, static_cast<_It&&>(_Last));\r\n            return _Where;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Prev_fn prev;\r\n\r\n    template <forward_iterator _It, sentinel_for<_It> _Se>\r\n    _NODISCARD constexpr _It _Find_last_iterator(\r\n        const _It& _First, const _Se& _Last, const iter_difference_t<_It> _Count) {\r\n        // Find the iterator in [_First, _Last) (of length _Count) which equals _Last\r\n        _STL_INTERNAL_CHECK(_RANGES distance(_First, _Last) == _Count);\r\n        if constexpr (is_same_v<_It, _Se>) {\r\n            return _Last;\r\n        } else {\r\n            return _RANGES next(_First, _Count);\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD struct equal_to {\r\n        template <class _Ty1, class _Ty2>\r\n            requires equality_comparable_with<_Ty1, _Ty2>\r\n        _NODISCARD constexpr bool operator()(_Ty1&& _Left, _Ty2&& _Right) const noexcept(\r\n            noexcept(static_cast<bool>(static_cast<_Ty1&&>(_Left) == static_cast<_Ty2&&>(_Right)))) /* strengthened */ {\r\n            return static_cast<bool>(static_cast<_Ty1&&>(_Left) == static_cast<_Ty2&&>(_Right));\r\n        }\r\n\r\n        using is_transparent = int;\r\n    };\r\n\r\n    _EXPORT_STD struct less {\r\n        template <class _Ty1, class _Ty2>\r\n            requires totally_ordered_with<_Ty1, _Ty2>\r\n        _NODISCARD constexpr bool operator()(_Ty1&& _Left, _Ty2&& _Right) const noexcept(\r\n            noexcept(static_cast<bool>(static_cast<_Ty1&&>(_Left) < static_cast<_Ty2&&>(_Right)))) /* strengthened */ {\r\n            return static_cast<bool>(static_cast<_Ty1&&>(_Left) < static_cast<_Ty2&&>(_Right));\r\n        }\r\n\r\n        using is_transparent = int;\r\n    };\r\n\r\n    _EXPORT_STD struct greater {\r\n        template <class _Ty1, class _Ty2>\r\n            requires totally_ordered_with<_Ty1, _Ty2>\r\n        _NODISCARD constexpr bool operator()(_Ty1&& _Left, _Ty2&& _Right) const noexcept(\r\n            noexcept(static_cast<bool>(static_cast<_Ty2&&>(_Right) < static_cast<_Ty1&&>(_Left)))) /* strengthened */ {\r\n            return static_cast<bool>(static_cast<_Ty2&&>(_Right) < static_cast<_Ty1&&>(_Left));\r\n        }\r\n\r\n        using is_transparent = int;\r\n    };\r\n\r\n    _EXPORT_STD template <class _Rng>\r\n    concept common_range = range<_Rng> && same_as<iterator_t<_Rng>, sentinel_t<_Rng>>;\r\n\r\n    template <class _It, class _Se>\r\n    concept _Bidi_common = is_same_v<_It, _Se> && bidirectional_iterator<_It>;\r\n    template <class _Rng>\r\n    concept _Bidi_common_range = common_range<_Rng> && bidirectional_iterator<iterator_t<_Rng>>;\r\n\r\n    template <class _Ty>\r\n    concept _Can_empty = requires(_Ty __t) { _RANGES empty(__t); };\r\n\r\n    _EXPORT_STD template <class _Derived>\r\n        requires is_class_v<_Derived> && same_as<_Derived, remove_cv_t<_Derived>>\r\n    class view_interface {\r\n    private:\r\n        _NODISCARD constexpr _Derived& _Cast() noexcept {\r\n            static_assert(derived_from<_Derived, view_interface>,\r\n                \"view_interface's template argument D must derive from view_interface<D> \"\r\n                \"(N4950 [view.interface.general]/2).\");\r\n            static_assert(view<_Derived>,\r\n                \"view_interface's template argument must model the view concept (N4950 [view.interface.general]/2).\");\r\n            return static_cast<_Derived&>(*this);\r\n        }\r\n\r\n        _NODISCARD constexpr const _Derived& _Cast() const noexcept {\r\n            static_assert(derived_from<_Derived, view_interface>,\r\n                \"view_interface's template argument D must derive from view_interface<D> \"\r\n                \"(N4950 [view.interface.general]/2).\");\r\n            static_assert(view<_Derived>,\r\n                \"view_interface's template argument must model the view concept (N4950 [view.interface.general]/2).\");\r\n            return static_cast<const _Derived&>(*this);\r\n        }\r\n\r\n    public:\r\n        _NODISCARD constexpr bool empty()\r\n            requires sized_range<_Derived> || forward_range<_Derived>\r\n        {\r\n            auto& _Self = _Cast();\r\n            if constexpr (sized_range<_Derived>) {\r\n                return _RANGES size(_Self) == 0;\r\n            } else {\r\n                return _RANGES begin(_Self) == _RANGES end(_Self);\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr bool empty() const\r\n            requires sized_range<const _Derived> || forward_range<const _Derived>\r\n        {\r\n            auto& _Self = _Cast();\r\n            if constexpr (sized_range<const _Derived>) {\r\n                return _RANGES size(_Self) == 0;\r\n            } else {\r\n                return _RANGES begin(_Self) == _RANGES end(_Self);\r\n            }\r\n        }\r\n\r\n#if _HAS_CXX23\r\n        _NODISCARD constexpr auto cbegin()\r\n            requires input_range<_Derived>\r\n        {\r\n            return _RANGES cbegin(_Cast());\r\n        }\r\n\r\n        _NODISCARD constexpr auto cbegin() const\r\n            requires input_range<const _Derived>\r\n        {\r\n            return _RANGES cbegin(_Cast());\r\n        }\r\n\r\n        _NODISCARD constexpr auto cend()\r\n            requires input_range<_Derived>\r\n        {\r\n            return _RANGES cend(_Cast());\r\n        }\r\n\r\n        _NODISCARD constexpr auto cend() const\r\n            requires input_range<const _Derived>\r\n        {\r\n            return _RANGES cend(_Cast());\r\n        }\r\n#endif // _HAS_CXX23\r\n\r\n        constexpr explicit operator bool()\r\n            requires _Can_empty<_Derived>\r\n        {\r\n            return !_RANGES empty(_Cast());\r\n        }\r\n\r\n        constexpr explicit operator bool() const\r\n            requires _Can_empty<const _Derived>\r\n        {\r\n            return !_RANGES empty(_Cast());\r\n        }\r\n\r\n        _NODISCARD constexpr auto data()\r\n            requires contiguous_iterator<iterator_t<_Derived>>\r\n        {\r\n            return _STD to_address(_RANGES begin(_Cast()));\r\n        }\r\n\r\n        _NODISCARD constexpr auto data() const\r\n            requires range<const _Derived> && contiguous_iterator<iterator_t<const _Derived>>\r\n        {\r\n            return _STD to_address(_RANGES begin(_Cast()));\r\n        }\r\n\r\n        _NODISCARD constexpr auto size()\r\n            requires forward_range<_Derived> && sized_sentinel_for<sentinel_t<_Derived>, iterator_t<_Derived>>\r\n        {\r\n            auto& _Self = _Cast();\r\n            return _STD _To_unsigned_like(_RANGES end(_Self) - _RANGES begin(_Self));\r\n        }\r\n\r\n        _NODISCARD constexpr auto size() const\r\n            requires forward_range<const _Derived>\r\n                  && sized_sentinel_for<sentinel_t<const _Derived>, iterator_t<const _Derived>>\r\n        {\r\n            auto& _Self = _Cast();\r\n            return _STD _To_unsigned_like(_RANGES end(_Self) - _RANGES begin(_Self));\r\n        }\r\n\r\n        _NODISCARD constexpr decltype(auto) front()\r\n            requires forward_range<_Derived>\r\n        {\r\n            auto& _Self = _Cast();\r\n\r\n#if _MSVC_STL_HARDENING_RANGES_VIEW_INTERFACE || _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(!_RANGES empty(_Self), \"front() called on empty ranges::view_interface\");\r\n#endif\r\n\r\n            return *_RANGES begin(_Self);\r\n        }\r\n\r\n        _NODISCARD constexpr decltype(auto) front() const\r\n            requires forward_range<const _Derived>\r\n        {\r\n            auto& _Self = _Cast();\r\n\r\n#if _MSVC_STL_HARDENING_RANGES_VIEW_INTERFACE || _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(!_RANGES empty(_Self), \"front() called on empty ranges::view_interface\");\r\n#endif\r\n\r\n            return *_RANGES begin(_Self);\r\n        }\r\n\r\n        _NODISCARD constexpr decltype(auto) back()\r\n            requires bidirectional_range<_Derived> && common_range<_Derived>\r\n        {\r\n            auto& _Self = _Cast();\r\n\r\n#if _MSVC_STL_HARDENING_RANGES_VIEW_INTERFACE || _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(!_RANGES empty(_Self), \"back() called on empty ranges::view_interface\");\r\n#endif\r\n\r\n            auto _Last = _RANGES end(_Self);\r\n            return *--_Last;\r\n        }\r\n\r\n        _NODISCARD constexpr decltype(auto) back() const\r\n            requires bidirectional_range<const _Derived> && common_range<const _Derived>\r\n        {\r\n            auto& _Self = _Cast();\r\n\r\n#if _MSVC_STL_HARDENING_RANGES_VIEW_INTERFACE || _ITERATOR_DEBUG_LEVEL != 0\r\n            _STL_VERIFY(!_RANGES empty(_Self), \"back() called on empty ranges::view_interface\");\r\n#endif\r\n\r\n            auto _Last = _RANGES end(_Self);\r\n            return *--_Last;\r\n        }\r\n\r\n        template <random_access_range _Rng = _Derived>\r\n        _NODISCARD constexpr decltype(auto) operator[](const range_difference_t<_Rng> _Idx) {\r\n            auto& _Self = _Cast();\r\n\r\n#if _MSVC_STL_HARDENING_RANGES_VIEW_INTERFACE || _ITERATOR_DEBUG_LEVEL != 0\r\n            if constexpr (sized_range<_Derived>) {\r\n                using _U_diff = _Make_unsigned_like_t<range_difference_t<_Rng>>;\r\n                _STL_VERIFY(static_cast<_U_diff>(_Idx) < static_cast<_U_diff>(_RANGES size(_Self)),\r\n                    \"ranges::view_interface subscript out of range\");\r\n            }\r\n#endif // _MSVC_STL_HARDENING_RANGES_VIEW_INTERFACE || _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n            return _RANGES begin(_Self)[_Idx];\r\n        }\r\n\r\n        template <random_access_range _Rng = const _Derived>\r\n        _NODISCARD constexpr decltype(auto) operator[](const range_difference_t<_Rng> _Idx) const {\r\n            auto& _Self = _Cast();\r\n\r\n#if _MSVC_STL_HARDENING_RANGES_VIEW_INTERFACE || _ITERATOR_DEBUG_LEVEL != 0\r\n            if constexpr (sized_range<_Derived>) {\r\n                using _U_diff = _Make_unsigned_like_t<range_difference_t<_Rng>>;\r\n                _STL_VERIFY(static_cast<_U_diff>(_Idx) < static_cast<_U_diff>(_RANGES size(_Self)),\r\n                    \"ranges::view_interface subscript out of range\");\r\n            }\r\n#endif // _MSVC_STL_HARDENING_RANGES_VIEW_INTERFACE || _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n            return _RANGES begin(_Self)[_Idx];\r\n        }\r\n    };\r\n} // namespace ranges\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Ty>\r\nconcept _Pair_like = _Tuple_like<_Ty> && tuple_size_v<remove_cvref_t<_Ty>> == 2;\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\ntemplate <class _Ty>\r\nconcept _Pair_like = !is_reference_v<_Ty> && requires(_Ty __t) {\r\n    typename tuple_size<_Ty>::type;\r\n    requires derived_from<tuple_size<_Ty>, integral_constant<size_t, 2>>;\r\n    typename tuple_element_t<0, remove_const_t<_Ty>>;\r\n    typename tuple_element_t<1, remove_const_t<_Ty>>;\r\n    { _STD get<0>(__t) } -> convertible_to<const tuple_element_t<0, _Ty>&>;\r\n    { _STD get<1>(__t) } -> convertible_to<const tuple_element_t<1, _Ty>&>;\r\n};\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\nnamespace ranges {\r\n    template <class _From, class _To>\r\n    concept _Uses_nonqualification_pointer_conversion =\r\n        is_pointer_v<_From> && is_pointer_v<_To>\r\n        && !convertible_to<remove_pointer_t<_From> (*)[], remove_pointer_t<_To> (*)[]>;\r\n\r\n    template <class _From, class _To>\r\n    concept _Convertible_to_non_slicing =\r\n        convertible_to<_From, _To> && !_Uses_nonqualification_pointer_conversion<decay_t<_From>, decay_t<_To>>;\r\n\r\n    template <class _Ty, class _First, class _Second>\r\n    concept _Pair_like_convertible_from = !range<_Ty>\r\n#if _HAS_CXX23\r\n                                       && !is_reference_v<_Ty>\r\n#endif // _HAS_CXX23\r\n                                       && _Pair_like<_Ty> && constructible_from<_Ty, _First, _Second>\r\n                                       && _Convertible_to_non_slicing<_First, tuple_element_t<0, _Ty>>\r\n                                       && convertible_to<_Second, tuple_element_t<1, _Ty>>;\r\n\r\n    template <class _It, class _Se, subrange_kind _Ki>\r\n    concept _Store_size = (_Ki == subrange_kind::sized) && !sized_sentinel_for<_Se, _It>;\r\n\r\n    template <class _It, class _Se, subrange_kind _Ki>\r\n    class _Subrange_base : public view_interface<subrange<_It, _Se, _Ki>> {\r\n    protected:\r\n        using _Size_type = _Make_unsigned_like_t<iter_difference_t<_It>>;\r\n\r\n    public:\r\n        _Subrange_base() = default;\r\n        constexpr explicit _Subrange_base(const _Size_type&) noexcept {}\r\n    };\r\n\r\n    template <class _It, class _Se, subrange_kind _Ki>\r\n        requires _Store_size<_It, _Se, _Ki>\r\n    class _Subrange_base<_It, _Se, _Ki> : public view_interface<subrange<_It, _Se, _Ki>> {\r\n    protected:\r\n        using _Size_type = _Make_unsigned_like_t<iter_difference_t<_It>>;\r\n\r\n        _Size_type _Size = 0;\r\n\r\n    public:\r\n        _Subrange_base() = default;\r\n        constexpr explicit _Subrange_base(const _Size_type& _Size_) noexcept : _Size(_Size_) {}\r\n    };\r\n\r\n    _EXPORT_STD template <input_or_output_iterator _It, sentinel_for<_It> _Se, subrange_kind _Ki>\r\n        requires (_Ki == subrange_kind::sized || !sized_sentinel_for<_Se, _It>)\r\n    class subrange : public _Subrange_base<_It, _Se, _Ki> {\r\n    private:\r\n        using _Size_type = _Make_unsigned_like_t<iter_difference_t<_It>>;\r\n\r\n        // TRANSITION, ABI:\r\n        /* [[no_unique_address]] */ _It _First{};\r\n        /* [[no_unique_address]] */ _Se _Last{};\r\n        // [[no_unique_address]] conditional_t<_Store_size<_It, _Se, _Ki>, _Size_type, _Nil> _Size{};\r\n\r\n        template <class _Rng>\r\n        constexpr subrange(true_type, _Rng&& _Val)\r\n            : subrange(_STD forward<_Rng>(_Val), static_cast<_Size_type>(_RANGES size(_Val))) {\r\n            // delegation target for subrange(_Rng&&) when we must store the range size\r\n            _STL_INTERNAL_STATIC_ASSERT(_Store_size<_It, _Se, _Ki>);\r\n        }\r\n\r\n        template <class _Rng>\r\n        constexpr subrange(false_type, _Rng&& _Val) : subrange(_RANGES begin(_Val), _RANGES end(_Val)) {\r\n            // delegation target for subrange(_Rng&&) when we need not store the range size\r\n            _STL_INTERNAL_STATIC_ASSERT(!_Store_size<_It, _Se, _Ki>);\r\n        }\r\n\r\n    public:\r\n        subrange()\r\n            requires default_initializable<_It>\r\n        = default;\r\n\r\n        template <_Convertible_to_non_slicing<_It> _It2>\r\n        constexpr subrange(_It2 _First_, _Se _Last_)\r\n            requires (!_Store_size<_It, _Se, _Ki>)\r\n            : _First(_STD move(_First_)), _Last(_STD move(_Last_)) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n        }\r\n\r\n        template <_Convertible_to_non_slicing<_It> _It2>\r\n        constexpr subrange(_It2 _First_, _Se _Last_, const _Size_type _Size_)\r\n            requires (_Ki == subrange_kind::sized)\r\n            : _Subrange_base<_It, _Se, _Ki>(_Size_), _First(_STD move(_First_)), _Last(_STD move(_Last_)) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            if constexpr (sized_sentinel_for<_Se, _It>) {\r\n                _STL_ASSERT(_Size_ == static_cast<_Size_type>(_Last - _First),\r\n                    \"This constructor's third argument should be equal to the distance \"\r\n                    \"between the first and second arguments (N4950 [range.subrange.ctor]/3).\");\r\n            }\r\n        }\r\n\r\n        template <_Different_from<subrange> _Rng>\r\n            requires (borrowed_range<_Rng> && _Convertible_to_non_slicing<iterator_t<_Rng>, _It>\r\n                      && convertible_to<sentinel_t<_Rng>, _Se>)\r\n        constexpr subrange(_Rng&& _Val)\r\n            requires (!_Store_size<_It, _Se, _Ki> || sized_range<_Rng>)\r\n            : subrange{bool_constant<_Store_size<_It, _Se, _Ki>>{}, _STD forward<_Rng>(_Val)} {}\r\n\r\n        template <borrowed_range _Rng>\r\n            requires (_Convertible_to_non_slicing<iterator_t<_Rng>, _It> && convertible_to<sentinel_t<_Rng>, _Se>)\r\n        constexpr subrange(_Rng&& _Val, const _Size_type _Count)\r\n            requires (_Ki == subrange_kind::sized)\r\n            : subrange{_RANGES begin(_Val), _RANGES end(_Val), _Count} {}\r\n\r\n        template <_Different_from<subrange> _PairLike>\r\n            requires _Pair_like_convertible_from<_PairLike, const _It&, const _Se&>\r\n        constexpr operator _PairLike() const {\r\n            return _PairLike(_First, _Last);\r\n        }\r\n\r\n        _NODISCARD constexpr _It begin() const\r\n            requires copyable<_It>\r\n        {\r\n            return _First;\r\n        }\r\n        _NODISCARD constexpr _It begin()\r\n            requires (!copyable<_It>)\r\n        {\r\n            return _STD move(_First);\r\n        }\r\n\r\n        _NODISCARD constexpr _Se end() const {\r\n            return _Last;\r\n        }\r\n\r\n        _NODISCARD constexpr bool empty() const {\r\n            return _First == _Last;\r\n        }\r\n\r\n        _NODISCARD constexpr _Size_type size() const\r\n            requires (_Ki == subrange_kind::sized)\r\n        {\r\n            if constexpr (_Store_size<_It, _Se, _Ki>) {\r\n                return this->_Size;\r\n            } else {\r\n                return static_cast<_Size_type>(_Last - _First);\r\n            }\r\n        }\r\n\r\n        _NODISCARD constexpr subrange next() const&\r\n            requires forward_iterator<_It>\r\n        {\r\n            auto _Tmp = *this;\r\n            if (_Tmp._First != _Tmp._Last) {\r\n                ++_Tmp._First;\r\n                if constexpr (_Store_size<_It, _Se, _Ki>) {\r\n                    --_Tmp._Size;\r\n                }\r\n            }\r\n            return _Tmp;\r\n        }\r\n        _NODISCARD constexpr subrange next(const iter_difference_t<_It> _Count) const&\r\n            requires forward_iterator<_It>\r\n        {\r\n            auto _Tmp = *this;\r\n            _Tmp.advance(_Count);\r\n            return _Tmp;\r\n        }\r\n\r\n        _NODISCARD constexpr subrange next() && {\r\n            if (_First != _Last) {\r\n                ++_First;\r\n                if constexpr (_Store_size<_It, _Se, _Ki>) {\r\n                    --this->_Size;\r\n                }\r\n            }\r\n            return _STD move(*this);\r\n        }\r\n        _NODISCARD constexpr subrange next(const iter_difference_t<_It> _Count) && {\r\n            advance(_Count);\r\n            return _STD move(*this);\r\n        }\r\n\r\n        _NODISCARD constexpr subrange prev() const\r\n            requires bidirectional_iterator<_It>\r\n        {\r\n            auto _Tmp = *this;\r\n            --_Tmp._First;\r\n            if constexpr (_Store_size<_It, _Se, _Ki>) {\r\n                ++_Tmp._Size;\r\n            }\r\n            return _Tmp;\r\n        }\r\n        _NODISCARD constexpr subrange prev(const iter_difference_t<_It> _Count) const\r\n            requires bidirectional_iterator<_It>\r\n        {\r\n            auto _Tmp = *this;\r\n            _Tmp.advance(-_Count);\r\n            return _Tmp;\r\n        }\r\n\r\n        constexpr subrange& advance(const iter_difference_t<_It> _Count) {\r\n            if constexpr (bidirectional_iterator<_It>) {\r\n                if (_Count < 0) {\r\n                    _RANGES advance(_First, _Count);\r\n                    if constexpr (_Store_size<_It, _Se, _Ki>) {\r\n                        this->_Size += static_cast<_Size_type>(-_Count);\r\n                    }\r\n                    return *this;\r\n                }\r\n            }\r\n\r\n            const auto _Remainder = _RANGES advance(_First, _Count, _Last);\r\n            if constexpr (_Store_size<_It, _Se, _Ki>) {\r\n                this->_Size -= static_cast<_Size_type>(_Count - _Remainder);\r\n            }\r\n            return *this;\r\n        }\r\n    };\r\n\r\n    template <input_or_output_iterator _It, sentinel_for<_It> _Se>\r\n    subrange(_It, _Se) -> subrange<_It, _Se>;\r\n\r\n    template <input_or_output_iterator _It, sentinel_for<_It> _Se>\r\n    subrange(_It, _Se, _Make_unsigned_like_t<iter_difference_t<_It>>) -> subrange<_It, _Se, subrange_kind::sized>;\r\n\r\n    template <borrowed_range _Rng>\r\n    subrange(_Rng&&) -> subrange<iterator_t<_Rng>, sentinel_t<_Rng>,\r\n        (sized_range<_Rng> || sized_sentinel_for<sentinel_t<_Rng>, iterator_t<_Rng>>) ? subrange_kind::sized\r\n                                                                                      : subrange_kind::unsized>;\r\n\r\n    template <borrowed_range _Rng>\r\n    subrange(_Rng&&, _Make_unsigned_like_t<range_difference_t<_Rng>>)\r\n        -> subrange<iterator_t<_Rng>, sentinel_t<_Rng>, subrange_kind::sized>;\r\n\r\n    template <class _It, class _Se, subrange_kind _Ki>\r\n    constexpr bool enable_borrowed_range<subrange<_It, _Se, _Ki>> = true;\r\n\r\n    _EXPORT_STD template <size_t _Idx, class _It, class _Se, subrange_kind _Ki>\r\n        requires ((_Idx == 0 && copyable<_It>) || _Idx == 1)\r\n    _NODISCARD constexpr auto get(const subrange<_It, _Se, _Ki>& _Val) {\r\n        if constexpr (_Idx == 0) {\r\n            return _Val.begin();\r\n        } else {\r\n            return _Val.end();\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD template <size_t _Idx, class _It, class _Se, subrange_kind _Ki>\r\n        requires (_Idx < 2)\r\n    _NODISCARD constexpr auto get(subrange<_It, _Se, _Ki>&& _Val) {\r\n        if constexpr (_Idx == 0) {\r\n            return _Val.begin();\r\n        } else {\r\n            return _Val.end();\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD struct dangling {\r\n        constexpr dangling() noexcept = default;\r\n        template <class... _Args>\r\n        constexpr dangling(_Args&&...) noexcept {}\r\n    };\r\n\r\n    _EXPORT_STD template <range _Rng>\r\n    using borrowed_iterator_t = conditional_t<borrowed_range<_Rng>, iterator_t<_Rng>, dangling>;\r\n\r\n    _EXPORT_STD template <range _Rng>\r\n    using borrowed_subrange_t = conditional_t<borrowed_range<_Rng>, subrange<iterator_t<_Rng>>, dangling>;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\nstruct _Container_proxy;\r\nstruct _Iterator_base12;\r\n\r\nstruct _Default_sentinel {}; // empty struct to serve as the end of a range\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <semiregular>\r\nclass move_sentinel;\r\n\r\ntemplate <class>\r\nstruct _Move_iterator_category {};\r\n\r\ntemplate <class _Iter>\r\n    requires requires { typename _Iter_cat_t<_Iter>; }\r\nstruct _Move_iterator_category<_Iter> {\r\n    using iterator_category = conditional_t<derived_from<_Iter_cat_t<_Iter>, random_access_iterator_tag>,\r\n        random_access_iterator_tag, _Iter_cat_t<_Iter>>;\r\n};\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Iter>\r\nstruct _Move_iterator_category {\r\n    using iterator_category = _Iter_cat_t<_Iter>;\r\n};\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n_EXPORT_STD template <class _Iter>\r\nclass move_iterator : public _Move_iterator_category<_Iter> {\r\nprivate:\r\n    _Iter _Current{};\r\n\r\npublic:\r\n    using iterator_type   = _Iter;\r\n    using value_type      = _Iter_value_t<_Iter>;\r\n    using difference_type = _Iter_diff_t<_Iter>;\r\n    using pointer         = _Iter;\r\n\r\n#if _HAS_CXX20\r\nprivate:\r\n    static constexpr auto _Get_iter_concept() {\r\n        if constexpr (random_access_iterator<_Iter>) {\r\n            return random_access_iterator_tag{};\r\n        } else if constexpr (bidirectional_iterator<_Iter>) {\r\n            return bidirectional_iterator_tag{};\r\n        } else if constexpr (forward_iterator<_Iter>) {\r\n            return forward_iterator_tag{};\r\n        } else {\r\n            return input_iterator_tag{};\r\n        }\r\n    }\r\n\r\npublic:\r\n    using iterator_concept = decltype(_Get_iter_concept());\r\n\r\n    using reference = iter_rvalue_reference_t<_Iter>;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    using reference =\r\n        conditional_t<is_reference_v<_Iter_ref_t<_Iter>>, remove_reference_t<_Iter_ref_t<_Iter>>&&, _Iter_ref_t<_Iter>>;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    _CONSTEXPR17 move_iterator() = default;\r\n\r\n    _CONSTEXPR17 explicit move_iterator(_Iter _Right) noexcept(is_nothrow_move_constructible_v<_Iter>) // strengthened\r\n        : _Current(_STD move(_Right)) {}\r\n\r\n    template <class _Other>\r\n#if _HAS_CXX20\r\n        requires (!is_same_v<_Other, _Iter>) && convertible_to<const _Other&, _Iter>\r\n#endif // _HAS_CXX20\r\n    _CONSTEXPR17 move_iterator(const move_iterator<_Other>& _Right)\r\n        noexcept(is_nothrow_constructible_v<_Iter, const _Other&>) // strengthened\r\n        : _Current(_Right.base()) {\r\n    }\r\n\r\n    template <class _Other>\r\n#if _HAS_CXX20\r\n        requires (!is_same_v<_Other, _Iter>)\r\n              && convertible_to<const _Other&, _Iter> && assignable_from<_Iter&, const _Other&>\r\n#endif // _HAS_CXX20\r\n    _CONSTEXPR17 move_iterator& operator=(const move_iterator<_Other>& _Right)\r\n        noexcept(is_nothrow_assignable_v<_Iter&, const _Other&>) /* strengthened */ {\r\n        _Current = _Right.base();\r\n        return *this;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    _NODISCARD constexpr const iterator_type& base() const& noexcept {\r\n        return _Current;\r\n    }\r\n    _NODISCARD constexpr iterator_type base() && noexcept(is_nothrow_move_constructible_v<_Iter>) /* strengthened */ {\r\n        return _STD move(_Current);\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    _NODISCARD _CONSTEXPR17 iterator_type base() const\r\n        noexcept(is_nothrow_copy_constructible_v<_Iter>) /* strengthened */ {\r\n        return _Current;\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    _NODISCARD _CONSTEXPR17 reference operator*() const\r\n#if _HAS_CXX20\r\n        noexcept(noexcept(_RANGES iter_move(_Current))) /* strengthened */ {\r\n        return _RANGES iter_move(_Current);\r\n    }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n        noexcept(noexcept(static_cast<reference>(*_Current))) /* strengthened */ {\r\n        return static_cast<reference>(*_Current);\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    _CXX20_DEPRECATE_MOVE_ITERATOR_ARROW _NODISCARD _CONSTEXPR17 pointer operator->() const\r\n        noexcept(is_nothrow_copy_constructible_v<_Iter>) /* strengthened */ {\r\n        return _Current;\r\n    }\r\n\r\n    _CONSTEXPR17 move_iterator& operator++() noexcept(noexcept(++_Current)) /* strengthened */ {\r\n        ++_Current;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR17 auto operator++(int) noexcept(is_nothrow_copy_constructible_v<_Iter> //\r\n                                               && noexcept(++_Current)) /* strengthened */ {\r\n#if _HAS_CXX20\r\n        if constexpr (forward_iterator<_Iter>) {\r\n#endif // _HAS_CXX20\r\n            move_iterator _Tmp = *this;\r\n            ++_Current;\r\n            return _Tmp;\r\n#if _HAS_CXX20\r\n        } else {\r\n            ++_Current;\r\n        }\r\n#endif // _HAS_CXX20\r\n    }\r\n\r\n    _CONSTEXPR17 move_iterator& operator--() noexcept(noexcept(--_Current)) /* strengthened */ {\r\n        --_Current;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR17 move_iterator operator--(int) noexcept(is_nothrow_copy_constructible_v<_Iter> //\r\n                                                        && noexcept(--_Current)) /* strengthened */ {\r\n        move_iterator _Tmp = *this;\r\n        --_Current;\r\n        return _Tmp;\r\n    }\r\n\r\n    template <class _Iter2 = _Iter>\r\n    _NODISCARD auto operator==(_Default_sentinel _Sentinel) const noexcept //\r\n        -> decltype(_STD declval<const _Iter2&>() == _Sentinel) {\r\n        return _Current == _Sentinel;\r\n    }\r\n\r\n    template <class _Iter2 = _Iter>\r\n    _NODISCARD auto operator!=(_Default_sentinel _Sentinel) const noexcept //\r\n        -> decltype(_STD declval<const _Iter2&>() != _Sentinel) {\r\n        return _Current != _Sentinel;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 move_iterator operator+(const difference_type _Off) const\r\n        noexcept(noexcept(move_iterator(_Current + _Off))) /* strengthened */ {\r\n        return move_iterator(_Current + _Off);\r\n    }\r\n\r\n    _CONSTEXPR17 move_iterator& operator+=(const difference_type _Off)\r\n        noexcept(noexcept(_Current += _Off)) /* strengthened */ {\r\n        _Current += _Off;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 move_iterator operator-(const difference_type _Off) const\r\n        noexcept(noexcept(move_iterator(_Current - _Off))) /* strengthened */ {\r\n        return move_iterator(_Current - _Off);\r\n    }\r\n\r\n    _CONSTEXPR17 move_iterator& operator-=(const difference_type _Off)\r\n        noexcept(noexcept(_Current -= _Off)) /* strengthened */ {\r\n        _Current -= _Off;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD _CONSTEXPR17 reference operator[](const difference_type _Off) const\r\n#if _HAS_CXX20\r\n        noexcept(noexcept(_RANGES iter_move(_Current + _Off))) /* strengthened */ {\r\n        return _RANGES iter_move(_Current + _Off);\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n        noexcept(noexcept(_STD move(_Current[_Off]))) /* strengthened */ {\r\n        return _STD move(_Current[_Off]);\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    template <sentinel_for<_Iter> _Sent>\r\n    _NODISCARD friend constexpr bool operator==(const move_iterator& _Left, const move_sentinel<_Sent>& _Right)\r\n        noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left._Current == _Right._Get_last()))) /* strengthened */ {\r\n        return _Left._Current == _Right._Get_last();\r\n    }\r\n\r\n    template <sized_sentinel_for<_Iter> _Sent>\r\n    _NODISCARD friend constexpr difference_type operator-(const move_sentinel<_Sent>& _Left,\r\n        const move_iterator& _Right) noexcept(noexcept(_Left._Get_last() - _Right._Current)) /* strengthened */ {\r\n        return _Left._Get_last() - _Right._Current;\r\n    }\r\n\r\n    template <sized_sentinel_for<_Iter> _Sent>\r\n    _NODISCARD friend constexpr difference_type operator-(const move_iterator& _Left,\r\n        const move_sentinel<_Sent>& _Right) noexcept(noexcept(_Left._Current - _Right._Get_last())) /* strengthened */ {\r\n        return _Left._Current - _Right._Get_last();\r\n    }\r\n\r\n    _NODISCARD friend constexpr reference iter_move(const move_iterator& _It)\r\n        noexcept(noexcept(_RANGES iter_move(_It._Current))) {\r\n        return _RANGES iter_move(_It._Current);\r\n    }\r\n\r\n    template <indirectly_swappable<_Iter> _Iter2>\r\n    friend constexpr void iter_swap(const move_iterator& _Left, const move_iterator<_Iter2>& _Right)\r\n        noexcept(noexcept(_RANGES iter_swap(_Left._Current, _Right.base()))) {\r\n        _RANGES iter_swap(_Left._Current, _Right.base());\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    template <class _Iter2, enable_if_t<_Range_verifiable_v<_Iter, _Iter2>, int> = 0>\r\n    friend constexpr void _Verify_range(const move_iterator& _First, const move_iterator<_Iter2>& _Last) noexcept {\r\n        _Verify_range(_First._Current, _Last._Get_current());\r\n    }\r\n#if _HAS_CXX20\r\n    template <sentinel_for<_Iter> _Sent>\r\n        requires _Range_verifiable_v<_Iter, _Sent>\r\n    friend constexpr void _Verify_range(const move_iterator& _First, const move_sentinel<_Sent>& _Last) noexcept {\r\n        _Verify_range(_First._Current, _Last._Get_last());\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    using _Prevent_inheriting_unwrap = move_iterator;\r\n\r\n    template <class _Iter2 = iterator_type, enable_if_t<_Offset_verifiable_v<_Iter2>, int> = 0>\r\n    constexpr void _Verify_offset(const difference_type _Off) const noexcept {\r\n        _Current._Verify_offset(_Off);\r\n    }\r\n\r\n    template <class _Iter2 = iterator_type, enable_if_t<_Unwrappable_v<const _Iter2&>, int> = 0>\r\n    _NODISCARD constexpr move_iterator<_Unwrapped_t<const _Iter2&>> _Unwrapped() const& noexcept(\r\n        noexcept(static_cast<move_iterator<_Unwrapped_t<const _Iter2&>>>(_Current._Unwrapped()))) {\r\n        return static_cast<move_iterator<_Unwrapped_t<const _Iter2&>>>(_Current._Unwrapped());\r\n    }\r\n    template <class _Iter2 = iterator_type, enable_if_t<_Unwrappable_v<_Iter2>, int> = 0>\r\n    _NODISCARD constexpr move_iterator<_Unwrapped_t<_Iter2>> _Unwrapped() && noexcept(\r\n        noexcept(static_cast<move_iterator<_Unwrapped_t<_Iter2>>>(_STD move(_Current)._Unwrapped()))) {\r\n        return static_cast<move_iterator<_Unwrapped_t<_Iter2>>>(_STD move(_Current)._Unwrapped());\r\n    }\r\n\r\n    static constexpr bool _Unwrap_when_unverified = _Do_unwrap_when_unverified_v<iterator_type>;\r\n\r\n    template <class _Src, enable_if_t<_Wrapped_seekable_v<iterator_type, const _Src&>, int> = 0>\r\n    constexpr void _Seek_to(const move_iterator<_Src>& _It) noexcept(noexcept(_Current._Seek_to(_It._Get_current()))) {\r\n        _Current._Seek_to(_It._Get_current());\r\n    }\r\n    template <class _Src, enable_if_t<_Wrapped_seekable_v<iterator_type, _Src>, int> = 0>\r\n    constexpr void _Seek_to(move_iterator<_Src>&& _It)\r\n        noexcept(noexcept(_Current._Seek_to(_STD move(_It)._Get_current()))) {\r\n        _Current._Seek_to(_STD move(_It)._Get_current());\r\n    }\r\n\r\n    _NODISCARD constexpr const iterator_type& _Get_current() const& noexcept {\r\n        return _Current;\r\n    }\r\n    _NODISCARD constexpr iterator_type&& _Get_current() && noexcept {\r\n        return _STD move(_Current);\r\n    }\r\n};\r\n\r\n_EXPORT_STD template <class _Iter1, class _Iter2>\r\n_NODISCARD _CONSTEXPR17 bool operator==(const move_iterator<_Iter1>& _Left, const move_iterator<_Iter2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left.base() == _Right.base()))) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires {\r\n        { _Left.base() == _Right.base() }->_Implicitly_convertible_to<bool>;\r\n    }\r\n#endif // _HAS_CXX20\r\n{\r\n    return _Left.base() == _Right.base();\r\n}\r\n\r\n#if !_HAS_CXX20\r\ntemplate <class _Iter1, class _Iter2>\r\n_NODISCARD _CONSTEXPR17 bool operator!=(const move_iterator<_Iter1>& _Left, const move_iterator<_Iter2>& _Right)\r\n    noexcept(noexcept(_Left == _Right)) /* strengthened */ {\r\n    return !(_Left == _Right);\r\n}\r\n#endif // !_HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Iter1, class _Iter2>\r\n_NODISCARD _CONSTEXPR17 bool operator<(const move_iterator<_Iter1>& _Left, const move_iterator<_Iter2>& _Right)\r\n    noexcept(noexcept(_STD _Fake_copy_init<bool>(_Left.base() < _Right.base()))) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires {\r\n        { _Left.base() < _Right.base() }->_Implicitly_convertible_to<bool>;\r\n    }\r\n#endif // _HAS_CXX20\r\n{\r\n    return _Left.base() < _Right.base();\r\n}\r\n\r\n_EXPORT_STD template <class _Iter1, class _Iter2>\r\n_NODISCARD _CONSTEXPR17 bool operator>(const move_iterator<_Iter1>& _Left, const move_iterator<_Iter2>& _Right)\r\n    noexcept(noexcept(_Right < _Left)) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires { _Right < _Left; }\r\n#endif // _HAS_CXX20\r\n{\r\n    return _Right < _Left;\r\n}\r\n\r\n_EXPORT_STD template <class _Iter1, class _Iter2>\r\n_NODISCARD _CONSTEXPR17 bool operator<=(const move_iterator<_Iter1>& _Left, const move_iterator<_Iter2>& _Right)\r\n    noexcept(noexcept(_Right < _Left)) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires { _Right < _Left; }\r\n#endif // _HAS_CXX20\r\n{\r\n    return !(_Right < _Left);\r\n}\r\n\r\n_EXPORT_STD template <class _Iter1, class _Iter2>\r\n_NODISCARD _CONSTEXPR17 bool operator>=(const move_iterator<_Iter1>& _Left, const move_iterator<_Iter2>& _Right)\r\n    noexcept(noexcept(_Left < _Right)) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires { _Left < _Right; }\r\n#endif // _HAS_CXX20\r\n{\r\n    return !(_Left < _Right);\r\n}\r\n\r\n#if _HAS_CXX20\r\n_EXPORT_STD template <class _Iter1, three_way_comparable_with<_Iter1> _Iter2>\r\n_NODISCARD constexpr compare_three_way_result_t<_Iter1, _Iter2> operator<=>(const move_iterator<_Iter1>& _Left,\r\n    const move_iterator<_Iter2>& _Right) noexcept(noexcept(_Left.base() <=> _Right.base())) /* strengthened */ {\r\n    return _Left.base() <=> _Right.base();\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _Iter1, class _Iter2>\r\n_NODISCARD _CONSTEXPR17 auto operator-(const move_iterator<_Iter1>& _Left, const move_iterator<_Iter2>& _Right)\r\n    noexcept(noexcept(_Left.base() - _Right.base())) /* strengthened */\r\n    -> decltype(_Left.base() - _Right.base()) {\r\n    return _Left.base() - _Right.base();\r\n}\r\n\r\n_EXPORT_STD template <class _Iter>\r\n_NODISCARD _CONSTEXPR17 move_iterator<_Iter> operator+(\r\n    typename move_iterator<_Iter>::difference_type _Off, const move_iterator<_Iter>& _Right)\r\n    noexcept(noexcept(move_iterator<_Iter>(_Right.base() + _Off))) /* strengthened */\r\n#if _HAS_CXX20\r\n    requires requires {\r\n        { _Right.base() + _Off }->same_as<_Iter>;\r\n    }\r\n#endif // _HAS_CXX20\r\n{\r\n    return move_iterator<_Iter>(_Right.base() + _Off);\r\n}\r\n\r\n_EXPORT_STD template <class _Iter>\r\n_NODISCARD _CONSTEXPR17 move_iterator<_Iter> make_move_iterator(_Iter _It)\r\n    noexcept(is_nothrow_move_constructible_v<_Iter>) /* strengthened */ {\r\n    return move_iterator<_Iter>(_STD move(_It));\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Iter1, class _Iter2>\r\n    requires (!sized_sentinel_for<_Iter1, _Iter2>)\r\nconstexpr bool disable_sized_sentinel_for<move_iterator<_Iter1>, move_iterator<_Iter2>> = true;\r\n\r\n_EXPORT_STD struct unreachable_sentinel_t {\r\n    template <weakly_incrementable _Ty>\r\n    _NODISCARD constexpr bool operator==(const _Ty&) const noexcept {\r\n        return false;\r\n    }\r\n};\r\n\r\n_EXPORT_STD inline constexpr unreachable_sentinel_t unreachable_sentinel{};\r\n\r\nnamespace ranges {\r\n    struct _Distance_unbounded {\r\n        _NODISCARD constexpr _Distance_unbounded operator-() const noexcept {\r\n            return {};\r\n        }\r\n    };\r\n\r\n    template <class _Checked, class _Iter, class _Sent>\r\n    _NODISCARD constexpr auto _Idl_distance(const _Iter& _First, const _Sent& _Last) {\r\n        // Returns the distance between _First and _Last,\r\n        // an indicator that the distance is infinite, or\r\n        // an indicator that the distance cannot be determined in O(1).\r\n        _STL_INTERNAL_STATIC_ASSERT(same_as<_Unwrapped_t<_Checked>, _Iter>);\r\n\r\n        if constexpr (sized_sentinel_for<_Sent, _Iter>) {\r\n            return static_cast<iter_difference_t<_Checked>>(_Last - _First);\r\n        } else if constexpr (same_as<_Sent, unreachable_sentinel_t>) {\r\n            return _Distance_unbounded{};\r\n        } else {\r\n            return _Distance_unknown{};\r\n        }\r\n    }\r\n\r\n    template <range _Rng>\r\n    _NODISCARD constexpr auto _Idl_distance(_Rng& _Range) {\r\n        // Returns the length of _Range if it is finite and can be determined in O(1), or\r\n        // an indicator that the length is infinite, or\r\n        // an indicator that the length cannot be determined in O(1).\r\n        if constexpr (sized_range<_Rng>) {\r\n            return _RANGES distance(_Range);\r\n        } else if constexpr (same_as<sentinel_t<_Rng>, unreachable_sentinel_t>) {\r\n            return _Distance_unbounded{};\r\n        } else {\r\n            return _Distance_unknown{};\r\n        }\r\n    }\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n// _Iterator_is_contiguous<_Iter> reports whether an iterator is known to be contiguous.\r\n// (Without concepts, this detection is limited, which will limit when we can activate optimizations.)\r\n\r\n#if _HAS_CXX20\r\n// When concepts are available, we can detect arbitrary contiguous iterators.\r\ntemplate <class _Iter>\r\nconstexpr bool _Iterator_is_contiguous = contiguous_iterator<_Iter>;\r\n\r\ntemplate <class _Iter>\r\n_NODISCARD constexpr auto _To_address(const _Iter& _Val) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(contiguous_iterator<_Iter>);\r\n    return _STD to_address(_Val);\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n// When concepts aren't available, we can detect pointers. (Iterators should be unwrapped before using this.)\r\ntemplate <class _Iter>\r\nconstexpr bool _Iterator_is_contiguous = is_pointer_v<_Iter>;\r\n\r\ntemplate <class _Iter>\r\n_NODISCARD constexpr auto _To_address(const _Iter& _Val) noexcept {\r\n    _STL_INTERNAL_STATIC_ASSERT(is_pointer_v<_Iter>);\r\n    return _Val;\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\ntemplate <class _Iter>\r\n_NODISCARD constexpr auto _To_address(const move_iterator<_Iter>& _Val) noexcept {\r\n    return _To_address(_Val.base());\r\n}\r\n\r\ntemplate <class _Iter, class _Sent>\r\n_NODISCARD constexpr _Iter_diff_t<_Iter> _Contiguous_iter_distance(const _Iter& _First, const _Sent& _Last)\r\n    noexcept(is_same_v<_Iter, _Sent> || noexcept(_First + (_Last - _First))) {\r\n    _STL_INTERNAL_STATIC_ASSERT(_Iterator_is_contiguous<_Iter>);\r\n    if constexpr (is_same_v<_Iter, _Sent>) {\r\n        return static_cast<_Iter_diff_t<_Iter>>(_STD _To_address(_Last) - _STD _To_address(_First));\r\n    } else {\r\n        return static_cast<_Iter_diff_t<_Iter>>(_STD _To_address(_First + (_Last - _First)) - _STD _To_address(_First));\r\n    }\r\n}\r\n\r\ntemplate <class _Iter, class _Sent>\r\n_NODISCARD constexpr auto _Contiguous_iter_distance(const move_iterator<_Iter>& _First, const _Sent& _Last)\r\n    noexcept(noexcept(_STD _Contiguous_iter_distance(_First.base(), _Last))) {\r\n    return _STD _Contiguous_iter_distance(_First.base(), _Last);\r\n}\r\n\r\ntemplate <class _Iter>\r\nconstexpr void _Contiguous_iter_verify(const _Iter& _Val, const _Iter_diff_t<_Iter>& _Off)\r\n    noexcept(noexcept(_Val + _Off)) {\r\n    _STL_INTERNAL_STATIC_ASSERT(_Iterator_is_contiguous<_Iter>);\r\n    if constexpr (!is_pointer_v<_Iter>) {\r\n        (void) _STD _To_address(_Val + _Off);\r\n    }\r\n}\r\n\r\ntemplate <class _Iter>\r\nconstexpr void _Contiguous_iter_verify(const move_iterator<_Iter>& _Val, const _Iter_diff_t<_Iter>& _Off)\r\n    noexcept(noexcept(_STD _Contiguous_iter_verify(_Val.base(), _Off))) {\r\n    _STD _Contiguous_iter_verify(_Val.base(), _Off);\r\n}\r\n\r\n// _Iterators_are_contiguous<_Iter1, _Iter2> reports whether both iterators are known to be contiguous.\r\n\r\ntemplate <class _Iter1, class _Iter2>\r\nconstexpr bool _Iterators_are_contiguous = _Iterator_is_contiguous<_Iter1> && _Iterator_is_contiguous<_Iter2>;\r\n\r\ntemplate <class _Iter>\r\nconstexpr bool _Iterator_is_volatile = is_volatile_v<remove_reference_t<_Iter_ref_t<_Iter>>>;\r\n\r\ntemplate <class _Source, class _Dest>\r\nconstexpr bool _Is_pointer_address_convertible = is_void_v<_Source>\r\n                                              || is_void_v<_Dest>\r\n                                              // NOTE: is_same_v is required for function pointers to work\r\n                                              || is_same_v<remove_cv_t<_Source>, remove_cv_t<_Dest>>\r\n#ifdef __cpp_lib_is_pointer_interconvertible\r\n                                              || is_pointer_interconvertible_base_of_v<_Dest, _Source>\r\n#endif // defined(__cpp_lib_is_pointer_interconvertible)\r\n    ;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4242) // '%s': conversion from '%s' to '%s', possible loss of data\r\n#pragma warning(disable : 4244) // '%s': conversion from '%s' to '%s', possible loss of data (Yes, duplicated message.)\r\n#pragma warning(disable : 4267) // '%s': conversion from '%s' to '%s', possible loss of data (Yes, duplicated message!)\r\n#pragma warning(disable : 4365) // '%s': conversion from '%s' to '%s', signed/unsigned mismatch\r\n#pragma warning(disable : 5267) // definition of implicit assignment operator for '%s' is deprecated because it has a\r\n                                // user-provided copy constructor\r\n\r\n// Determines whether _DestRef is trivially assignable from _SourceRef, and if _Remove_cvref_t<_DestRef> is a class, the\r\n// assignment uses _Remove_cvref_t<_DestRef>::operator=.\r\n// Not pedantically reliable for vectorization, but working due to bugs of MSVC, Clang, and EDG. See LLVM-37038.\r\ntemplate <class _DestRef, class _SourceRef, bool = is_trivially_assignable_v<_DestRef, _SourceRef>>\r\nconstexpr bool _Is_trivially_assignable_returning_same_reference_v =\r\n    is_same_v<_DestRef, decltype(_STD declval<_DestRef>() = _STD declval<_SourceRef>())>;\r\ntemplate <class _DestRef, class _SourceRef>\r\nconstexpr bool _Is_trivially_assignable_returning_same_reference_v<_DestRef, _SourceRef, false> = false;\r\n\r\n#pragma warning(pop)\r\n\r\ntemplate <class _Source, class _Dest, class _SourceRef, class _DestRef>\r\nstruct _Trivial_cat {\r\n    using _USource = _Unwrap_enum_t<_Source>;\r\n    using _UDest   = _Unwrap_enum_t<_Dest>;\r\n\r\n    static constexpr bool _Same_size_and_compatible =\r\n        sizeof(_Source) == sizeof(_Dest)\r\n        // If _UDest is bool, _USource also needs to be bool\r\n        // Conversion from non-bool => non-bool | bool => bool | bool => non-bool is fine.\r\n        // Conversion from non-bool => bool is not fine.\r\n        && is_same_v<bool, _USource> >= is_same_v<bool, _UDest>\r\n        && (is_same_v<_USource, _UDest> || (is_integral_v<_USource> && is_integral_v<_UDest>)\r\n            || (is_floating_point_v<_USource> && is_floating_point_v<_UDest>) );\r\n\r\n    static constexpr bool _Bitcopy_constructible =\r\n        _Same_size_and_compatible && is_trivially_constructible_v<_Dest, _SourceRef>;\r\n\r\n    static constexpr bool _Bitcopy_assignable =\r\n        _Same_size_and_compatible && _Is_trivially_assignable_returning_same_reference_v<_DestRef, _SourceRef>;\r\n};\r\n\r\ntemplate <class _Source, class _Dest, class _SourceRef, class _DestRef>\r\nstruct _Trivial_cat<_Source*, _Dest*, _SourceRef, _DestRef> {\r\n    static constexpr bool _Bitcopy_constructible =\r\n        _Is_pointer_address_convertible<_Source, _Dest> && is_trivially_constructible_v<_Dest*, _SourceRef>;\r\n\r\n    static constexpr bool _Bitcopy_assignable =\r\n        _Is_pointer_address_convertible<_Source, _Dest>\r\n        && _Is_trivially_assignable_returning_same_reference_v<_DestRef, _SourceRef>;\r\n};\r\n\r\nstruct _False_trivial_cat {\r\n    static constexpr bool _Bitcopy_constructible = false;\r\n    static constexpr bool _Bitcopy_assignable    = false;\r\n};\r\n\r\ntemplate <class _SourceIt, class _DestIt,\r\n    bool _Are_contiguous = _Iterators_are_contiguous<_SourceIt, _DestIt> && !_Iterator_is_volatile<_SourceIt>\r\n                        && !_Iterator_is_volatile<_DestIt>>\r\nstruct _Iter_move_cat : _Trivial_cat<_Iter_value_t<_SourceIt>, _Iter_value_t<_DestIt>,\r\n                            remove_reference_t<_Iter_ref_t<_SourceIt>>&&, _Iter_ref_t<_DestIt>> {};\r\n\r\ntemplate <class _SourceIt, class _DestIt>\r\nstruct _Iter_move_cat<_SourceIt, _DestIt, false> : _False_trivial_cat {};\r\n\r\ntemplate <class _SourceIt, class _DestIt>\r\nstruct _Iter_move_cat<move_iterator<_SourceIt>, _DestIt, false> : _Iter_move_cat<_SourceIt, _DestIt> {};\r\n\r\ntemplate <class _SourceIt, class _DestIt,\r\n    bool _Are_contiguous = _Iterators_are_contiguous<_SourceIt, _DestIt> && !_Iterator_is_volatile<_SourceIt>\r\n                        && !_Iterator_is_volatile<_DestIt>>\r\nstruct _Iter_copy_cat\r\n    : _Trivial_cat<_Iter_value_t<_SourceIt>, _Iter_value_t<_DestIt>, _Iter_ref_t<_SourceIt>, _Iter_ref_t<_DestIt>> {};\r\n\r\ntemplate <class _SourceIt, class _DestIt>\r\nstruct _Iter_copy_cat<_SourceIt, _DestIt, false> : _False_trivial_cat {};\r\n\r\ntemplate <class _SourceIt, class _DestIt>\r\nstruct _Iter_copy_cat<move_iterator<_SourceIt>, _DestIt, false> : _Iter_move_cat<_SourceIt, _DestIt> {};\r\n\r\ntemplate <class _Iter1, class _Sent1, class _Iter2>\r\n_CONSTEXPR20 void _Verify_ranges_do_not_overlap(const _Iter1& _First1, const _Sent1& _Last1, const _Iter2& _First2) {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    if constexpr (_Iterators_are_contiguous<_Iter1, _Iter2>\r\n#if _HAS_CXX20\r\n                  && sized_sentinel_for<_Sent1, _Iter1>\r\n#endif // _HAS_CXX20\r\n    ) {\r\n#if _HAS_CXX20\r\n        if (_STD is_constant_evaluated()) {\r\n            return;\r\n        }\r\n#endif // _HAS_CXX20\r\n\r\n        const auto _Offset     = static_cast<ptrdiff_t>(_Last1 - _First1);\r\n        const auto _Ptr1Offset = _Offset * sizeof(*_STD _To_address(_First1));\r\n        const auto _Ptr2Offset = _Offset * sizeof(*_STD _To_address(_First2));\r\n        // This cast to `cv char*` allows us to compare pointers to distinct types,\r\n        // in case one range provides storage for the other.\r\n        const auto _PtrFirst1 = reinterpret_cast<const volatile char*>(_STD _To_address(_First1));\r\n        const auto _PtrLast1  = _PtrFirst1 + _Ptr1Offset;\r\n        const auto _PtrFirst2 = reinterpret_cast<const volatile char*>(_STD _To_address(_First2));\r\n        const auto _PtrLast2  = _PtrFirst2 + _Ptr2Offset;\r\n        _STL_VERIFY(_PtrLast1 <= _PtrFirst2 || _PtrLast2 <= _PtrFirst1, \"ranges should not overlap each other\");\r\n    }\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 2 / _ITERATOR_DEBUG_LEVEL != 2 vvv\r\n    (void) _First1;\r\n    (void) _Last1;\r\n    (void) _First2;\r\n#endif // _ITERATOR_DEBUG_LEVEL != 2 ^^^\r\n}\r\n\r\ntemplate <class _OutCtgIt>\r\n_OutCtgIt _Copy_memmove_tail(\r\n    const char* const _First_ch, const _OutCtgIt _Dest, const size_t _Byte_count, const size_t _Object_count) {\r\n    _STL_INTERNAL_CHECK(_Byte_count == _Object_count * sizeof(*_Dest));\r\n    // (pre-verified contiguous iterator)\r\n    const auto _Dest_ptr = _STD _To_address(_Dest);\r\n    const auto _Dest_ch  = const_cast<char*>(reinterpret_cast<const volatile char*>(_Dest_ptr));\r\n    _CSTD memmove(_Dest_ch, _First_ch, _Byte_count);\r\n    if constexpr (is_pointer_v<_OutCtgIt>) {\r\n        (void) _Object_count;\r\n        // CodeQL [SM02986] This cast is correct: we're bypassing pointer arithmetic for performance.\r\n        return reinterpret_cast<_OutCtgIt>(_Dest_ch + _Byte_count);\r\n    } else {\r\n        return _Dest + static_cast<_Iter_diff_t<_OutCtgIt>>(_Object_count);\r\n    }\r\n}\r\n\r\ntemplate <class _CtgIt, class _OutCtgIt>\r\n_OutCtgIt _Copy_memmove(_CtgIt _First, _CtgIt _Last, _OutCtgIt _Dest) {\r\n    _STL_INTERNAL_CHECK(_First <= _Last);\r\n    const auto _First_ptr    = _STD _To_address(_First);\r\n    const auto _Last_ptr     = _STD _To_address(_Last);\r\n    const auto _Ptr_diff     = _Last_ptr - _First_ptr;\r\n    const auto _Object_count = static_cast<size_t>(_Ptr_diff);\r\n    const auto _First_ch     = const_cast<const char*>(reinterpret_cast<const volatile char*>(_First_ptr));\r\n    const auto _Last_ch      = const_cast<const char*>(reinterpret_cast<const volatile char*>(_Last_ptr));\r\n    const auto _Byte_count   = static_cast<size_t>(_Last_ch - _First_ch);\r\n    _STD _Contiguous_iter_verify(_Dest, static_cast<_Iter_diff_t<_OutCtgIt>>(_Ptr_diff));\r\n    return _STD _Copy_memmove_tail(_First_ch, _STD move(_Dest), _Byte_count, _Object_count);\r\n}\r\n\r\ntemplate <class _CtgIt, class _OutCtgIt>\r\n_OutCtgIt _Copy_memmove_n(_CtgIt _First, const size_t _Object_count, _OutCtgIt _Dest) {\r\n    _STD _Contiguous_iter_verify(_First, static_cast<_Iter_diff_t<_CtgIt>>(_Object_count));\r\n    _STD _Contiguous_iter_verify(_Dest, static_cast<_Iter_diff_t<_OutCtgIt>>(_Object_count));\r\n    const auto _First_ptr  = _STD _To_address(_First);\r\n    const auto _First_ch   = const_cast<const char*>(reinterpret_cast<const volatile char*>(_First_ptr));\r\n    const auto _Byte_count = _Object_count * sizeof(*_First_ptr);\r\n    return _STD _Copy_memmove_tail(_First_ch, _STD move(_Dest), _Byte_count, _Object_count);\r\n}\r\n\r\ntemplate <class _Fn>\r\nstruct _Map_vb_functor {\r\n    using type = void;\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <>\r\nstruct _Map_vb_functor<identity> {\r\n    using type = identity;\r\n};\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Fn>\r\nusing _Map_vb_functor_t = typename _Map_vb_functor<_Fn>::type;\r\n\r\ntemplate <class _It, bool _RequiresMutable = false>\r\nconstexpr bool _Is_vb_iterator = false;\r\n\r\ntemplate <class _VbIt, class _OutIt>\r\n_CONSTEXPR20 _OutIt _Copy_vbool(_VbIt _First, _VbIt _Last, _OutIt _Dest);\r\n\r\ntemplate <class _VbIt>\r\n_NODISCARD _CONSTEXPR20 _Iter_diff_t<_VbIt> _Count_vbool(_VbIt _First, _VbIt _Last, bool _Val) noexcept;\r\n\r\ntemplate <class _VbIt>\r\n_CONSTEXPR20 void _Fill_vbool(_VbIt _First, _VbIt _Last, bool _Val) noexcept;\r\n\r\ntemplate <class _VbIt>\r\n_NODISCARD _CONSTEXPR20 _VbIt _Find_vbool(_VbIt _First, _VbIt _Last, bool _Val) noexcept;\r\n\r\ntemplate <class _InIt, class _SizeTy, class _OutIt>\r\n_CONSTEXPR20 _OutIt _Copy_n_unchecked4(_InIt _First, _SizeTy _Count, _OutIt _Dest) {\r\n    // copy _First + [0, _Count) to _Dest + [0, _Count), returning _Dest + _Count\r\n    // note: has callers outside the copy family\r\n    _STL_INTERNAL_STATIC_ASSERT(_Integer_like<_SizeTy>);\r\n    _STL_INTERNAL_CHECK(_Count >= 0);\r\n\r\n    if constexpr (_Iter_copy_cat<_InIt, _OutIt>::_Bitcopy_assignable) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            return _Copy_memmove_n(_First, static_cast<size_t>(_Count), _Dest);\r\n        }\r\n    }\r\n\r\n    for (; _Count != 0; ++_Dest, (void) ++_First, --_Count) {\r\n        *_Dest = *_First;\r\n    }\r\n\r\n    return _Dest;\r\n}\r\n\r\ntemplate <class _InIt, class _Sent, class _OutIt>\r\nusing _Sent_copy_cat = conditional_t<\r\n#if _HAS_CXX20\r\n    is_same_v<_Sent, _InIt> || sized_sentinel_for<_Sent, _InIt>,\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    is_same_v<_Sent, _InIt>,\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n    _Iter_copy_cat<_InIt, _OutIt>, _False_trivial_cat>;\r\n\r\ntemplate <class _InIt, class _Sent, class _OutIt>\r\n_CONSTEXPR20 _OutIt _Copy_unchecked(_InIt _First, _Sent _Last, _OutIt _Dest) {\r\n    // copy [_First, _Last) to [_Dest, ...)\r\n    // note: _Copy_unchecked has callers other than the copy family\r\n    if constexpr (_Is_vb_iterator<_InIt> && _Is_vb_iterator<_OutIt, true>) {\r\n        return _STD _Copy_vbool(_First, _Last, _Dest);\r\n    } else {\r\n        if constexpr (_Sent_copy_cat<_InIt, _Sent, _OutIt>::_Bitcopy_assignable) {\r\n#if _HAS_CXX20\r\n            if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n            {\r\n#if _HAS_CXX20\r\n                if constexpr (!is_same_v<_InIt, _Sent>) {\r\n                    return _STD _Copy_memmove_n(_First, static_cast<size_t>(_Last - _First), _Dest);\r\n                } else\r\n#endif // _HAS_CXX20\r\n                {\r\n                    return _STD _Copy_memmove(_First, _Last, _Dest);\r\n                }\r\n            }\r\n        }\r\n\r\n        for (; _First != _Last; ++_Dest, (void) ++_First) {\r\n            *_Dest = *_First;\r\n        }\r\n\r\n        return _Dest;\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt>\r\n_CONSTEXPR20 _OutIt copy(_InIt _First, _InIt _Last, _OutIt _Dest) { // copy [_First, _Last) to [_Dest, ...)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    auto _UDest        = _STD _Get_unwrapped_n(_STD move(_Dest), _STD _Idl_distance<_InIt>(_UFirst, _ULast));\r\n    _STD _Seek_wrapped(_Dest, _STD _Copy_unchecked(_UFirst, _ULast, _STD move(_UDest)));\r\n    return _Dest;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 copy(_ExPo&&, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest) noexcept /* terminates */ {\r\n    // copy [_First, _Last) to [_Dest, ...)\r\n    // not parallelized as benchmarks show it isn't worth it\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    return _STD copy(_First, _Last, _Dest);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <class _To, class _From>\r\n    concept _Convertible_from = convertible_to<_From, _To>;\r\n\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    struct in_out_result {\r\n        /* [[no_unique_address]] */ _In in;\r\n        /* [[no_unique_address]] */ _Out out;\r\n\r\n        template <_Convertible_from<const _In&> _IIn, _Convertible_from<const _Out&> _OOut>\r\n        constexpr operator in_out_result<_IIn, _OOut>() const& {\r\n            return {in, out};\r\n        }\r\n\r\n        template <_Convertible_from<_In> _IIn, _Convertible_from<_Out> _OOut>\r\n        constexpr operator in_out_result<_IIn, _OOut>() && {\r\n            return {_STD move(in), _STD move(out)};\r\n        }\r\n    };\r\n\r\n    template <forward_iterator _It, class _Se>\r\n        requires sentinel_for<remove_cvref_t<_Se>, _It>\r\n    _NODISCARD constexpr _Unwrap_iter_t<_It, _Se> _Get_final_iterator_unwrapped(\r\n        const _Unwrap_iter_t<_It, _Se>& _UFirst, _Se&& _Last) {\r\n        // find the iterator in [_UFirst, _Unwrap_sent<_It>(_Last)) which equals _Unwrap_sent<_It>(_Last)\r\n        // [possibly O(N)]\r\n        if constexpr (is_same_v<_Unwrap_iter_t<_It, _Se>, _Unwrap_sent_t<_Se, _It>>) {\r\n            return _RANGES _Unwrap_sent<_It>(_STD forward<_Se>(_Last));\r\n        } else {\r\n            return _RANGES next(_UFirst, _RANGES _Unwrap_sent<_It>(_STD forward<_Se>(_Last)));\r\n        }\r\n    }\r\n\r\n    template <forward_range _Rng>\r\n    _NODISCARD constexpr auto _Get_final_iterator_unwrapped(_Rng& _Range) {\r\n        // find the (unwrapped) iterator in _Range which equals _Uend(_Range) [possibly O(N)]\r\n        if constexpr (common_range<_Rng>) {\r\n            if constexpr (same_as<decltype(_Uend(_Range)), _Unwrapped_iterator_t<_Rng>>) {\r\n                return _Uend(_Range);\r\n            } else {\r\n                return _RANGES _Unwrap_range_sent<_Rng>(_RANGES end(_Range));\r\n            }\r\n        } else if constexpr (sized_range<_Rng>) {\r\n            return _RANGES next(_Ubegin(_Range), _RANGES distance(_Range));\r\n        } else {\r\n            return _RANGES next(_Ubegin(_Range), _Uend(_Range));\r\n        }\r\n    }\r\n\r\n    template <forward_range _Rng>\r\n    _NODISCARD constexpr auto _Get_final_iterator_unwrapped(_Rng& _Range, const _Unwrapped_iterator_t<_Rng>& _Mid) {\r\n        // find the (unwrapped) iterator in _Range which equals _Uend(_Range) [possibly O(N)]\r\n        // Pre: [ranges::begin(_Range), _Mid) and [_Mid, ranges::end(_Range)) denote ranges\r\n        if constexpr (common_range<_Rng>) {\r\n            if constexpr (same_as<decltype(_Uend(_Range)), _Unwrapped_iterator_t<_Rng>>) {\r\n                return _Uend(_Range);\r\n            } else {\r\n                return _Unwrap_range_sent<_Rng>(_RANGES end(_Range));\r\n            }\r\n        } else if constexpr (sized_range<_Rng>) {\r\n            const auto _Dist = _RANGES distance(_Range);\r\n            if constexpr (sized_sentinel_for<_Unwrapped_iterator_t<_Rng>, _Unwrapped_iterator_t<_Rng>>) {\r\n                return _RANGES next(_Mid, _Dist - (_Mid - _Ubegin(_Range)));\r\n            } else {\r\n                return _RANGES next(_Ubegin(_Range), _Dist);\r\n            }\r\n        } else {\r\n            return _RANGES next(_Mid, _Uend(_Range));\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    _EXPORT_STD template <class _Out, class _Ty>\r\n    struct out_value_result {\r\n        _MSVC_NO_UNIQUE_ADDRESS _Out out;\r\n        _MSVC_NO_UNIQUE_ADDRESS _Ty value;\r\n\r\n        template <_Convertible_from<const _Out&> _OOut, _Convertible_from<const _Ty&> _TTy>\r\n        constexpr operator out_value_result<_OOut, _TTy>() const& {\r\n            return {out, value};\r\n        }\r\n\r\n        template <_Convertible_from<_Out> _OOut, _Convertible_from<_Ty> _TTy>\r\n        constexpr operator out_value_result<_OOut, _TTy>() && {\r\n            return {_STD move(out), _STD move(value)};\r\n        }\r\n    };\r\n#endif // _HAS_CXX23\r\n\r\n    _EXPORT_STD template <class _In, class _Out>\r\n    using copy_result = in_out_result<_In, _Out>;\r\n\r\n    template <input_iterator _It, sentinel_for<_It> _Se, weakly_incrementable _Out>\r\n        requires indirectly_copyable<_It, _Out>\r\n    _NODISCARD constexpr copy_result<_It, _Out> _Copy_unchecked(_It _First, _Se _Last, _Out _Output) {\r\n        if constexpr (_Sent_copy_cat<_It, _Se, _Out>::_Bitcopy_assignable) {\r\n            if (!_STD is_constant_evaluated()) {\r\n                if constexpr (is_same_v<_It, _Se>) {\r\n                    _Output = _STD _Copy_memmove(_STD move(_First), _Last, _STD move(_Output));\r\n                    return {_STD move(_Last), _STD move(_Output)};\r\n                } else {\r\n                    const auto _Dist  = _Last - _First;\r\n                    const auto _Count = static_cast<size_t>(_Dist);\r\n                    _Output           = _STD _Copy_memmove_n(_First, _Count, _STD move(_Output));\r\n                    _First += _Dist;\r\n                    return {_STD move(_First), _STD move(_Output)};\r\n                }\r\n            }\r\n        }\r\n\r\n        for (; _First != _Last; ++_First, (void) ++_Output) {\r\n            *_Output = *_First;\r\n        }\r\n\r\n        return {_STD move(_First), _STD move(_Output)};\r\n    }\r\n\r\n    struct _Copy_fn {\r\n        template <input_iterator _It, sentinel_for<_It> _Se, weakly_incrementable _Out>\r\n            requires indirectly_copyable<_It, _Out>\r\n        static constexpr copy_result<_It, _Out> operator()(_It _First, _Se _Last, _Out _Output) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UFirst      = _RANGES _Unwrap_iter<_Se>(_STD move(_First));\r\n            auto _ULast       = _RANGES _Unwrap_sent<_It>(_STD move(_Last));\r\n            const auto _Count = _RANGES _Idl_distance<_It>(_UFirst, _ULast);\r\n            auto _UResult     = _RANGES _Copy_unchecked(\r\n                    _STD move(_UFirst), _STD move(_ULast), _STD _Get_unwrapped_n(_STD move(_Output), _Count));\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n\r\n        template <input_range _Rng, weakly_incrementable _Out>\r\n            requires indirectly_copyable<iterator_t<_Rng>, _Out>\r\n        static constexpr copy_result<borrowed_iterator_t<_Rng>, _Out> operator()(_Rng&& _Range, _Out _Output) {\r\n            const auto _Count = _RANGES _Idl_distance(_Range);\r\n            auto _First       = _RANGES begin(_Range);\r\n            auto _UResult = _RANGES _Copy_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range),\r\n                _STD _Get_unwrapped_n(_STD move(_Output), _Count));\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult.in));\r\n            _STD _Seek_wrapped(_Output, _STD move(_UResult.out));\r\n            return {_STD move(_First), _STD move(_Output)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Copy_fn copy;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _InIt, class _Diff, class _OutIt>\r\n_CONSTEXPR20 _OutIt copy_n(_InIt _First, _Diff _Count_raw, _OutIt _Dest) {\r\n    // copy [_First, _First + _Count) to [_Dest, ...)\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    if (0 < _Count) {\r\n        if constexpr (_Is_vb_iterator<_InIt> && _Is_vb_iterator<_OutIt, true>) {\r\n            return _STD _Copy_vbool(_First, _First + _Count, _Dest);\r\n        } else {\r\n            auto _UFirst = _STD _Get_unwrapped_n(_First, _Count);\r\n            auto _UDest  = _STD _Get_unwrapped_n(_Dest, _Count);\r\n            if constexpr (_Iter_copy_cat<decltype(_UFirst), decltype(_UDest)>::_Bitcopy_assignable) {\r\n#if _HAS_CXX20\r\n                if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n                {\r\n                    _UDest = _STD _Copy_memmove_n(_UFirst, static_cast<size_t>(_Count), _UDest);\r\n                    _STD _Seek_wrapped(_Dest, _UDest);\r\n                    return _Dest;\r\n                }\r\n            }\r\n\r\n            for (;;) {\r\n                *_UDest = *_UFirst;\r\n                ++_UDest;\r\n                --_Count;\r\n                // note that we avoid an extra ++_First here to allow istream_iterator to work, see LWG-2471\r\n                if (_Count == 0) {\r\n                    break;\r\n                }\r\n\r\n                ++_UFirst;\r\n            }\r\n\r\n            _STD _Seek_wrapped(_Dest, _UDest);\r\n        }\r\n    }\r\n\r\n    return _Dest;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _Diff, class _FwdIt2, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 copy_n(_ExPo&&, _FwdIt1 _First, _Diff _Count_raw, _FwdIt2 _Dest) noexcept /* terminates */ {\r\n    // copy [_First, _First + _Count) to [_Dest, ...)\r\n    // not parallelized as benchmarks show it isn't worth it\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    return _STD copy_n(_First, _Count_raw, _Dest);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class _CtgIt1, class _CtgIt2>\r\n_CtgIt2 _Copy_backward_memmove(_CtgIt1 _First, _CtgIt1 _Last, _CtgIt2 _Dest) {\r\n    // implement copy_backward-like function as memmove\r\n    const auto _First_ptr = _STD _To_address(_First);\r\n    const auto _Last_ptr  = _STD _To_address(_Last);\r\n    _STD _Contiguous_iter_verify(_Dest, static_cast<_Iter_diff_t<_CtgIt2>>(_First_ptr - _Last_ptr));\r\n    const auto _Dest_ptr = _STD _To_address(_Dest);\r\n    const auto _First_ch = const_cast<const char*>(reinterpret_cast<const volatile char*>(_First_ptr));\r\n    const auto _Last_ch  = const_cast<const char*>(reinterpret_cast<const volatile char*>(_Last_ptr));\r\n    const auto _Dest_ch  = const_cast<char*>(reinterpret_cast<const volatile char*>(_Dest_ptr));\r\n    const auto _Count    = static_cast<size_t>(_Last_ch - _First_ch);\r\n    const auto _Result   = _CSTD memmove(_Dest_ch - _Count, _First_ch, _Count);\r\n    if constexpr (is_pointer_v<_CtgIt2>) {\r\n        return static_cast<_CtgIt2>(_Result);\r\n    } else {\r\n        return _Dest - static_cast<_Iter_diff_t<_CtgIt2>>(_Last_ptr - _First_ptr);\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt1, class _BidIt2>\r\n_BidIt2 _Copy_backward_memmove(move_iterator<_BidIt1> _First, move_iterator<_BidIt1> _Last, _BidIt2 _Dest) {\r\n    return _STD _Copy_backward_memmove(_First.base(), _Last.base(), _Dest);\r\n}\r\n\r\ntemplate <class _BidIt1, class _BidIt2>\r\n_NODISCARD _CONSTEXPR20 _BidIt2 _Copy_backward_unchecked(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest) {\r\n    // copy [_First, _Last) backwards to [..., _Dest)\r\n    if constexpr (_Iter_copy_cat<_BidIt1, _BidIt2>::_Bitcopy_assignable) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            return _STD _Copy_backward_memmove(_First, _Last, _Dest);\r\n        }\r\n    }\r\n\r\n    while (_First != _Last) {\r\n        *--_Dest = *--_Last;\r\n    }\r\n\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt1, class _BidIt2>\r\n_CONSTEXPR20 _BidIt2 copy_backward(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest) {\r\n    // copy [_First, _Last) backwards to [..., _Dest)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    const auto _UDest  = _STD _Get_unwrapped_n(_Dest, -_STD _Idl_distance<_BidIt1>(_UFirst, _ULast));\r\n    _STD _Seek_wrapped(_Dest, _STD _Copy_backward_unchecked(_UFirst, _ULast, _UDest));\r\n    return _Dest;\r\n}\r\n\r\ntemplate <class _InIt, class _OutIt>\r\n_CONSTEXPR20 _OutIt _Move_unchecked(_InIt _First, _InIt _Last, _OutIt _Dest) {\r\n    // move [_First, _Last) to [_Dest, ...)\r\n    // note: _Move_unchecked has callers other than the move family\r\n    if constexpr (_Is_vb_iterator<_InIt> && _Is_vb_iterator<_OutIt, true>) {\r\n        return _STD _Copy_vbool(_First, _Last, _Dest);\r\n    } else {\r\n        if constexpr (_Iter_move_cat<_InIt, _OutIt>::_Bitcopy_assignable) {\r\n#if _HAS_CXX20\r\n            if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n            {\r\n                return _STD _Copy_memmove(_First, _Last, _Dest);\r\n            }\r\n        }\r\n\r\n        for (; _First != _Last; ++_Dest, (void) ++_First) {\r\n            *_Dest = _STD move(*_First);\r\n        }\r\n\r\n        return _Dest;\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _OutIt>\r\n_CONSTEXPR20 _OutIt move(_InIt _First, _InIt _Last, _OutIt _Dest) {\r\n    // move [_First, _Last) to [_Dest, ...)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    const auto _UDest  = _STD _Get_unwrapped_n(_Dest, _STD _Idl_distance<_InIt>(_UFirst, _ULast));\r\n    _STD _Seek_wrapped(_Dest, _STD _Move_unchecked(_UFirst, _ULast, _UDest));\r\n    return _Dest;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt2 move(_ExPo&&, _FwdIt1 _First, _FwdIt1 _Last, _FwdIt2 _Dest) noexcept /* terminates */ {\r\n    // move [_First, _Last) to [_Dest, ...)\r\n    // not parallelized as benchmarks show it isn't worth it\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt1);\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt2);\r\n    return _STD move(_First, _Last, _Dest);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class _BidIt1, class _BidIt2>\r\n_CONSTEXPR20 _BidIt2 _Move_backward_unchecked(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest) {\r\n    // move [_First, _Last) backwards to [..., _Dest)\r\n    // note: _Move_backward_unchecked has callers other than the move_backward family\r\n    if constexpr (_Iter_move_cat<_BidIt1, _BidIt2>::_Bitcopy_assignable) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            return _STD _Copy_backward_memmove(_First, _Last, _Dest);\r\n        }\r\n    }\r\n\r\n    while (_First != _Last) {\r\n        *--_Dest = _STD move(*--_Last);\r\n    }\r\n\r\n    return _Dest;\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt1, class _BidIt2>\r\n_CONSTEXPR20 _BidIt2 move_backward(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest) {\r\n    // move [_First, _Last) backwards to [..., _Dest)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    const auto _UFirst = _STD _Get_unwrapped(_First);\r\n    const auto _ULast  = _STD _Get_unwrapped(_Last);\r\n    const auto _UDest  = _STD _Get_unwrapped_n(_Dest, -_STD _Idl_distance<_BidIt1>(_UFirst, _ULast));\r\n    _STD _Seek_wrapped(_Dest, _STD _Move_backward_unchecked(_UFirst, _ULast, _UDest));\r\n    return _Dest;\r\n}\r\n\r\ntemplate <class _Ty>\r\nstruct _Is_character : false_type {}; // by default, not a character type\r\n\r\ntemplate <>\r\nstruct _Is_character<char> : true_type {}; // chars are characters\r\n\r\ntemplate <>\r\nstruct _Is_character<signed char> : true_type {}; // signed chars are also characters\r\n\r\ntemplate <>\r\nstruct _Is_character<unsigned char> : true_type {}; // unsigned chars are also characters\r\n\r\n#ifdef __cpp_char8_t\r\ntemplate <>\r\nstruct _Is_character<char8_t> : true_type {}; // UTF-8 code units are sort-of characters\r\n#endif // defined(__cpp_char8_t)\r\n\r\ntemplate <class _Ty>\r\nstruct _Is_character_or_bool : _Is_character<_Ty>::type {};\r\n\r\ntemplate <>\r\nstruct _Is_character_or_bool<bool> : true_type {};\r\n\r\ntemplate <class _Ty>\r\nstruct _Is_character_or_byte_or_bool : _Is_character_or_bool<_Ty>::type {};\r\n\r\n#ifdef __cpp_lib_byte\r\ntemplate <>\r\nstruct _Is_character_or_byte_or_bool<byte> : true_type {};\r\n#endif // defined(__cpp_lib_byte)\r\n\r\n// _Fill_memset_is_safe determines if _FwdIt and _Ty are eligible for memset optimization in fill.\r\n// Need to explicitly test for volatile because _Unwrap_enum_t discards qualifiers.\r\ntemplate <class _FwdIt, class _Ty, bool = _Iterator_is_contiguous<_FwdIt>>\r\nconstexpr bool _Fill_memset_is_safe = conjunction_v<is_scalar<_Ty>,\r\n    _Is_character_or_byte_or_bool<_Unwrap_enum_t<remove_reference_t<_Iter_ref_t<_FwdIt>>>>,\r\n    negation<is_volatile<remove_reference_t<_Iter_ref_t<_FwdIt>>>>, is_assignable<_Iter_ref_t<_FwdIt>, const _Ty&>>;\r\n\r\ntemplate <class _FwdIt, class _Ty>\r\nconstexpr bool _Fill_memset_is_safe<_FwdIt, _Ty, false> = false;\r\n\r\ntemplate <class _FwdIt, class _Ty, bool = _Iterator_is_contiguous<_FwdIt>>\r\nconstexpr bool _Fill_zero_memset_is_safe =\r\n    conjunction_v<is_scalar<_Ty>, is_scalar<_Iter_value_t<_FwdIt>>, negation<is_member_pointer<_Iter_value_t<_FwdIt>>>,\r\n        negation<is_volatile<remove_reference_t<_Iter_ref_t<_FwdIt>>>>, is_assignable<_Iter_ref_t<_FwdIt>, const _Ty&>>;\r\n\r\ntemplate <class _FwdIt, class _Ty>\r\nconstexpr bool _Fill_zero_memset_is_safe<_FwdIt, _Ty, false> = false;\r\n\r\ntemplate <class _CtgIt, class _Ty>\r\nvoid _Fill_memset(_CtgIt _Dest, const _Ty _Val, const size_t _Count) {\r\n    _STL_INTERNAL_STATIC_ASSERT(sizeof(_Iter_value_t<_CtgIt>) == sizeof(unsigned char));\r\n    _STD _Contiguous_iter_verify(_Dest, static_cast<_Iter_diff_t<_CtgIt>>(_Count));\r\n    // implicitly convert (a cast would suppress warnings); also handles _Iter_value_t<_CtgIt> being bool\r\n    _Iter_value_t<_CtgIt> _Dest_val = _Val;\r\n    _CSTD memset(_STD _To_address(_Dest), static_cast<unsigned char>(_Dest_val), _Count);\r\n}\r\n\r\ntemplate <class _CtgIt>\r\nvoid _Fill_zero_memset(_CtgIt _Dest, const size_t _Count) {\r\n    _STD _Contiguous_iter_verify(_Dest, static_cast<_Iter_diff_t<_CtgIt>>(_Count));\r\n    _CSTD memset(_STD _To_address(_Dest), 0, _Count * sizeof(_Iter_value_t<_CtgIt>));\r\n}\r\n\r\ntemplate <class _Ty>\r\n_NODISCARD bool _Is_all_bits_zero(const _Ty& _Val) {\r\n    // checks if scalar type has all bits set to zero\r\n    _STL_INTERNAL_STATIC_ASSERT(is_scalar_v<_Ty> && !is_member_pointer_v<_Ty>);\r\n    if constexpr (is_null_pointer_v<_Ty>) {\r\n        return true;\r\n    } else if constexpr (is_integral_v<_Ty> || is_pointer_v<_Ty>) {\r\n        return _Val == _Ty{};\r\n    } else if constexpr (sizeof(_Ty) == 1) {\r\n        return _STD _Bit_cast<uint8_t>(_Val) == 0;\r\n    } else if constexpr (sizeof(_Ty) == 2) {\r\n        return _STD _Bit_cast<uint16_t>(_Val) == 0;\r\n    } else if constexpr (sizeof(_Ty) == 4) {\r\n        return _STD _Bit_cast<uint32_t>(_Val) == 0;\r\n    } else if constexpr (sizeof(_Ty) == 8) {\r\n        return _STD _Bit_cast<uint64_t>(_Val) == 0;\r\n    } else {\r\n        static constexpr _Ty _Zero{};\r\n        return _CSTD memcmp(&_Val, &_Zero, sizeof(_Ty)) == 0;\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Ty>\r\n_CONSTEXPR20 void fill(const _FwdIt _First, const _FwdIt _Last, const _Ty& _Val) {\r\n    // copy _Val through [_First, _Last)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    if constexpr (_Is_vb_iterator<_FwdIt, true>) {\r\n        _STD _Fill_vbool(_First, _Last, _Val);\r\n    } else {\r\n        auto _UFirst      = _STD _Get_unwrapped(_First);\r\n        const auto _ULast = _STD _Get_unwrapped(_Last);\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            if constexpr (_Fill_memset_is_safe<decltype(_UFirst), _Ty>) {\r\n                _STD _Fill_memset(_UFirst, _Val, static_cast<size_t>(_ULast - _UFirst));\r\n                return;\r\n            } else if constexpr (_Fill_zero_memset_is_safe<decltype(_UFirst), _Ty>) {\r\n                if (_STD _Is_all_bits_zero(_Val)) {\r\n                    _STD _Fill_zero_memset(_UFirst, static_cast<size_t>(_ULast - _UFirst));\r\n                    return;\r\n                }\r\n            }\r\n        }\r\n\r\n        for (; _UFirst != _ULast; ++_UFirst) {\r\n            *_UFirst = _Val;\r\n        }\r\n    }\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid fill(_ExPo&&, _FwdIt _First, _FwdIt _Last, const _Ty& _Val) noexcept /* terminates */ {\r\n    // copy _Val through [_First, _Last)\r\n    // not parallelized as benchmarks show it isn't worth it\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt);\r\n    return _STD fill(_First, _Last, _Val);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _OutIt, class _Diff, class _Ty>\r\n_CONSTEXPR20 _OutIt fill_n(_OutIt _Dest, const _Diff _Count_raw, const _Ty& _Val) {\r\n    // copy _Val _Count times through [_Dest, ...)\r\n    _Algorithm_int_t<_Diff> _Count = _Count_raw;\r\n    if (0 < _Count) {\r\n        if constexpr (_Is_vb_iterator<_OutIt, true>) {\r\n            const auto _Last = _Dest + static_cast<typename _OutIt::difference_type>(_Count);\r\n            _STD _Fill_vbool(_Dest, _Last, _Val);\r\n            return _Last;\r\n        } else {\r\n            auto _UDest = _STD _Get_unwrapped_n(_Dest, _Count);\r\n#if _HAS_CXX20\r\n            if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n            {\r\n                if constexpr (_Fill_memset_is_safe<decltype(_UDest), _Ty>) {\r\n                    _STD _Fill_memset(_UDest, _Val, static_cast<size_t>(_Count));\r\n                    _STD _Seek_wrapped(_Dest, _UDest + _Count);\r\n                    return _Dest;\r\n                } else if constexpr (_Fill_zero_memset_is_safe<decltype(_UDest), _Ty>) {\r\n                    if (_STD _Is_all_bits_zero(_Val)) {\r\n                        _STD _Fill_zero_memset(_UDest, static_cast<size_t>(_Count));\r\n                        _STD _Seek_wrapped(_Dest, _UDest + static_cast<_Iter_diff_t<decltype(_UDest)>>(_Count));\r\n                        return _Dest;\r\n                    }\r\n                }\r\n            }\r\n\r\n            for (; 0 < _Count; --_Count, (void) ++_UDest) {\r\n                *_UDest = _Val;\r\n            }\r\n\r\n            _STD _Seek_wrapped(_Dest, _UDest);\r\n        }\r\n    }\r\n    return _Dest;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Diff, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt fill_n(_ExPo&&, _FwdIt _Dest, _Diff _Count_raw, const _Ty& _Val) noexcept /* terminates */ {\r\n    // copy _Val _Count times through [_Dest, ...)\r\n    // not parallelized as benchmarks show it isn't worth it\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt);\r\n    return _STD fill_n(_Dest, _Count_raw, _Val);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    struct _Fill_n_fn {\r\n        template <class _Ty, output_iterator<const _Ty&> _It>\r\n        static constexpr _It operator()(_It _First, iter_difference_t<_It> _Count, const _Ty& _Value) {\r\n            if (_Count > 0) {\r\n                auto _UFirst = _STD _Get_unwrapped_n(_STD move(_First), _Count);\r\n                if (!_STD is_constant_evaluated()) {\r\n                    if constexpr (_Fill_memset_is_safe<decltype(_UFirst), _Ty>) {\r\n                        _STD _Fill_memset(_UFirst, _Value, static_cast<size_t>(_Count));\r\n                        _STD _Seek_wrapped(_First, _UFirst + _Count); // no need to move since _UFirst is a pointer\r\n                        return _First;\r\n                    } else if constexpr (_Fill_zero_memset_is_safe<decltype(_UFirst), _Ty>) {\r\n                        if (_STD _Is_all_bits_zero(_Value)) {\r\n                            _STD _Fill_zero_memset(_UFirst, static_cast<size_t>(_Count));\r\n                            _STD _Seek_wrapped(_First, _UFirst + _Count); // no need to move since _UFirst is a pointer\r\n                            return _First;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                for (; _Count > 0; ++_UFirst, (void) --_Count) {\r\n                    *_UFirst = _Value;\r\n                }\r\n\r\n                _STD _Seek_wrapped(_First, _STD move(_UFirst));\r\n            }\r\n\r\n            return _First;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Fill_n_fn fill_n;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Ty1, class _Ty2, class = void>\r\nconstexpr bool _Can_compare_with_operator_equal = false;\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nconstexpr bool\r\n    _Can_compare_with_operator_equal<_Ty1, _Ty2, void_t<decltype(_STD declval<_Ty1&>() == _STD declval<_Ty2&>())>> =\r\n        true;\r\n\r\ntemplate <class _Ty1, class _Ty2>\r\nconstexpr bool _Is_pointer_address_comparable =\r\n    _Can_compare_with_operator_equal<_Ty1*, _Ty2*>\r\n    && (_Is_pointer_address_convertible<_Ty1, _Ty2> || _Is_pointer_address_convertible<_Ty2, _Ty1>);\r\n\r\n// _Can_memcmp_elements<_Elem1, _Elem2> reports whether `_Elem1 == _Elem2` can be optimized to memcmp.\r\n// Here, _Elem1 and _Elem2 aren't top-level const, because we remove_const_t before using _Can_memcmp_elements.\r\n\r\n// Integral types are eligible for memcmp in very specific cases.\r\n// * They must be the same size. (`int == long` is eligible; `int == long long` isn't.)\r\n// * The usual arithmetic conversions must preserve bit patterns. (This is true for `int == unsigned int`,\r\n//   but false for `short == unsigned short`.)\r\n#pragma warning(push)\r\n#pragma warning(disable : 4806) // no value of type 'bool' promoted to type 'char' can equal the given constant\r\ntemplate <class _Elem1, class _Elem2,\r\n    bool = sizeof(_Elem1) == sizeof(_Elem2) && is_integral_v<_Elem1> && is_integral_v<_Elem2>>\r\nconstexpr bool _Can_memcmp_elements =\r\n    is_same_v<_Elem1, bool> || is_same_v<_Elem2, bool> || static_cast<_Elem1>(-1) == static_cast<_Elem2>(-1);\r\n#pragma warning(pop)\r\n\r\n#ifdef __cpp_lib_byte\r\n// Allow memcmping std::byte.\r\n// inline is required here as explicit specializations of variable templates are problematic in C++14.\r\n// However, std::byte is C++17 and above so we are safe.\r\ntemplate <>\r\ninline constexpr bool _Can_memcmp_elements<byte, byte, false> = true;\r\n#endif // defined(__cpp_lib_byte)\r\n\r\n// Pointer elements are eligible for memcmp when they point to the same type, ignoring cv-qualification.\r\n// This handles pointers to object types, pointers to void, and pointers to function types.\r\ntemplate <class _Ty1, class _Ty2>\r\nconstexpr bool _Can_memcmp_elements<_Ty1*, _Ty2*, false> = _Is_pointer_address_comparable<_Ty1, _Ty2>;\r\n\r\n#ifdef __clang__\r\ntemplate <class _Elem1, class _Elem2>\r\nconstexpr bool _Is_same_and_builtin_trivially_equality_comparable =\r\n    is_same_v<_Elem1, _Elem2> && __is_trivially_equality_comparable(_Elem1);\r\n#else // ^^^ defined(__clang__) / !defined(__clang__) vvv\r\ntemplate <class _Elem1, class _Elem2>\r\nconstexpr bool _Is_same_and_builtin_trivially_equality_comparable = false;\r\n#endif // ^^^ !defined(__clang__) ^^^\r\n\r\ntemplate <class _Elem1, class _Elem2>\r\nconstexpr bool _Can_memcmp_elements<_Elem1, _Elem2, false> =\r\n    _Is_same_and_builtin_trivially_equality_comparable<_Elem1, _Elem2>;\r\n\r\n// _Can_memcmp_elements_with_pred<_Elem1, _Elem2, _Pr> reports whether the memcmp optimization is applicable,\r\n// given contiguously stored elements. (This avoids having to repeat the metaprogramming that finds the element types.)\r\n// _Elem1 and _Elem2 aren't top-level const here.\r\ntemplate <class _Elem1, class _Elem2, class _Pr>\r\nconstexpr bool _Can_memcmp_elements_with_pred = false;\r\n\r\n// With equal_to<_Elem3> we need to make sure that both _Elem1 and _Elem2 are convertible to _Elem3 without changing\r\n// object representation (we use _Iter_copy_cat for this task) and _Elem3 can be safely memcmp'ed with itself\r\ntemplate <class _Elem1, class _Elem2, class _Elem3>\r\nconstexpr bool _Can_memcmp_elements_with_pred<_Elem1, _Elem2, equal_to<_Elem3>> =\r\n    _Iter_copy_cat<_Elem1*, _Elem3*>::_Bitcopy_constructible && _Iter_copy_cat<_Elem2*, _Elem3*>::_Bitcopy_constructible\r\n    && _Can_memcmp_elements<remove_cv_t<_Elem3>, remove_cv_t<_Elem3>>;\r\n\r\n// equal_to<> is transparent.\r\ntemplate <class _Elem1, class _Elem2>\r\nconstexpr bool _Can_memcmp_elements_with_pred<_Elem1, _Elem2, equal_to<>> = _Can_memcmp_elements<_Elem1, _Elem2>;\r\n\r\n#if _HAS_CXX20\r\n// ranges::equal_to is also transparent.\r\ntemplate <class _Elem1, class _Elem2>\r\nconstexpr bool _Can_memcmp_elements_with_pred<_Elem1, _Elem2, _RANGES equal_to> = _Can_memcmp_elements<_Elem1, _Elem2>;\r\n#endif // _HAS_CXX20\r\n\r\n// _Equal_memcmp_is_safe<_Iter1, _Iter2, _Pr> reports whether we can activate the memcmp optimization\r\n// for arbitrary iterators and predicates.\r\n// It ignores top-level constness on the iterators and on the elements.\r\ntemplate <class _Iter1, class _Iter2, class _Pr>\r\nconstexpr bool _Equal_memcmp_is_safe_helper =\r\n    _Iterators_are_contiguous<_Iter1, _Iter2> && !_Iterator_is_volatile<_Iter1> && !_Iterator_is_volatile<_Iter2>\r\n    && _Can_memcmp_elements_with_pred<_Iter_value_t<_Iter1>, _Iter_value_t<_Iter2>, _Pr>;\r\n\r\ntemplate <class _Iter1, class _Iter2, class _Pr>\r\nconstexpr bool _Equal_memcmp_is_safe =\r\n    _Equal_memcmp_is_safe_helper<remove_const_t<_Iter1>, remove_const_t<_Iter2>, remove_const_t<_Pr>>;\r\n\r\n#if _VECTORIZED_SEARCH || _VECTORIZED_ADJACENT_FIND || _VECTORIZED_FIND_END || _VECTORIZED_FIND_FIRST_OF \\\r\n    || _VECTORIZED_UNIQUE || _VECTORIZED_UNIQUE_COPY\r\ntemplate <size_t _Size>\r\nconstexpr bool _Is_vector_element_size = _Size == 1 || _Size == 2 || _Size == 4 || _Size == 8;\r\n\r\n// Can we activate the vector algorithms for search, adjacent_find, find_end, find_first_of, and default_searcher?\r\n// (Also used indirectly for unique and unique_copy.)\r\ntemplate <class _It1, class _It2, class _Pr>\r\nconstexpr bool _Vector_alg_in_search_is_safe =\r\n    _Equal_memcmp_is_safe<_It1, _It2, _Pr> && _Is_vector_element_size<sizeof(_Iter_value_t<_It1>)>;\r\n#endif // ^^^ _Vector_alg_in_search_is_safe is available ^^^\r\n\r\ntemplate <class _CtgIt1, class _CtgIt2>\r\n_NODISCARD int _Memcmp_count(_CtgIt1 _First1, _CtgIt2 _First2, const size_t _Count) {\r\n    _STD _Contiguous_iter_verify(_First1, static_cast<_Iter_diff_t<_CtgIt1>>(_Count));\r\n    _STD _Contiguous_iter_verify(_First2, static_cast<_Iter_diff_t<_CtgIt2>>(_Count));\r\n    _STL_INTERNAL_STATIC_ASSERT(sizeof(_Iter_value_t<_CtgIt1>) == sizeof(_Iter_value_t<_CtgIt2>));\r\n    const auto _First1_ch = reinterpret_cast<const char*>(_STD _To_address(_First1));\r\n    const auto _First2_ch = reinterpret_cast<const char*>(_STD _To_address(_First2));\r\n    return _CSTD memcmp(_First1_ch, _First2_ch, _Count * sizeof(_Iter_value_t<_CtgIt1>));\r\n}\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _Pr>\r\n_NODISCARD _CONSTEXPR20 bool equal(const _InIt1 _First1, const _InIt1 _Last1, const _InIt2 _First2, _Pr _Pred) {\r\n    // compare [_First1, _Last1) to [_First2, ...)\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped_n(_First2, _STD _Idl_distance<_InIt1>(_UFirst1, _ULast1));\r\n    if constexpr (_Equal_memcmp_is_safe<decltype(_UFirst1), decltype(_UFirst2), _Pr>) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            _STL_INTERNAL_STATIC_ASSERT(\r\n                sizeof(_Iter_value_t<decltype(_UFirst1)>) == sizeof(_Iter_value_t<decltype(_UFirst2)>));\r\n            _STD _Contiguous_iter_verify(_UFirst2, static_cast<_Iter_diff_t<_InIt2>>(_ULast1 - _UFirst1));\r\n\r\n            const auto _First1_ch = reinterpret_cast<const char*>(_STD _To_address(_UFirst1));\r\n            const auto _Size      = reinterpret_cast<const char*>(_STD _To_address(_ULast1)) - _First1_ch;\r\n            return _CSTD memcmp(_First1_ch, _STD _To_address(_UFirst2), static_cast<size_t>(_Size)) == 0;\r\n        }\r\n    }\r\n\r\n    for (; _UFirst1 != _ULast1; ++_UFirst1, (void) ++_UFirst2) {\r\n        if (!_Pred(*_UFirst1, *_UFirst2)) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD bool equal(_ExPo&& _Exec, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2,\r\n    _Pr _Pred) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2>\r\n_NODISCARD _CONSTEXPR20 bool equal(const _InIt1 _First1, const _InIt1 _Last1, const _InIt2 _First2) {\r\n    // compare [_First1, _Last1) to [_First2, ...)\r\n    return _STD equal(_First1, _Last1, _First2, equal_to<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD bool equal(_ExPo&& _Exec, const _FwdIt1 _First1, const _FwdIt1 _Last1, const _FwdIt2 _First2) noexcept\r\n/* terminates */ {\r\n    // compare [_First1, _Last1) to [_First2, ...)\r\n    return _STD equal(_STD forward<_ExPo>(_Exec), _First1, _Last1, _First2, equal_to{});\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _Pr>\r\n_NODISCARD _CONSTEXPR20 bool equal(\r\n    const _InIt1 _First1, const _InIt1 _Last1, const _InIt2 _First2, const _InIt2 _Last2, _Pr _Pred) {\r\n    // compare [_First1, _Last1) to [_First2, _Last2)\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2 = _STD _Get_unwrapped(_Last2);\r\n    if constexpr (_Is_ranges_random_iter_v<_InIt1> && _Is_ranges_random_iter_v<_InIt2>) {\r\n        if (_ULast1 - _UFirst1 != _ULast2 - _UFirst2) {\r\n            return false;\r\n        }\r\n\r\n        return _STD equal(_UFirst1, _ULast1, _UFirst2, _STD _Pass_fn(_Pred));\r\n    } else {\r\n        for (;;) {\r\n            if (_UFirst1 == _ULast1) {\r\n                return _UFirst2 == _ULast2;\r\n            }\r\n\r\n            if (_UFirst2 == _ULast2) {\r\n                return false;\r\n            }\r\n\r\n            if (!_Pred(*_UFirst1, *_UFirst2)) {\r\n                return false;\r\n            }\r\n\r\n            ++_UFirst1;\r\n            ++_UFirst2;\r\n        }\r\n    }\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD bool equal(\r\n    _ExPo&& _Exec, _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _Pr _Pred) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2>\r\n_NODISCARD _CONSTEXPR20 bool equal(\r\n    const _InIt1 _First1, const _InIt1 _Last1, const _InIt2 _First2, const _InIt2 _Last2) {\r\n    // compare [_First1, _Last1) to [_First2, _Last2)\r\n    return _STD equal(_First1, _Last1, _First2, _Last2, equal_to<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD bool equal(_ExPo&& _Exec, const _FwdIt1 _First1, const _FwdIt1 _Last1, const _FwdIt2 _First2,\r\n    const _FwdIt2 _Last2) noexcept /* terminates */ {\r\n    // compare [_First1, _Last1) to [_First2, _Last2)\r\n    return _STD equal(_STD forward<_ExPo>(_Exec), _First1, _Last1, _First2, _Last2, equal_to{});\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <forward_range _Rng, class _It>\r\n    _NODISCARD constexpr iterator_t<_Rng> _Rewrap_iterator(_Rng&& _Range, _It&& _Val) {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_same_v<remove_cvref_t<_It>, _Unwrapped_iterator_t<_Rng>>);\r\n\r\n        if constexpr (is_same_v<remove_cvref_t<_It>, iterator_t<_Rng>>) {\r\n            return _STD forward<_It>(_Val);\r\n        } else {\r\n            auto _Result = _RANGES begin(_Range);\r\n            _Result._Seek_to(_STD forward<_It>(_Val));\r\n            return _Result;\r\n        }\r\n    }\r\n\r\n    _EXPORT_STD template <class _In1, class _In2>\r\n    struct in_in_result {\r\n        /* [[no_unique_address]] */ _In1 in1;\r\n        /* [[no_unique_address]] */ _In2 in2;\r\n\r\n        template <_Convertible_from<const _In1&> _IIn1, _Convertible_from<const _In2&> _IIn2>\r\n        constexpr operator in_in_result<_IIn1, _IIn2>() const& {\r\n            return {in1, in2};\r\n        }\r\n\r\n        template <_Convertible_from<_In1> _IIn1, _Convertible_from<_In2> _IIn2>\r\n        constexpr operator in_in_result<_IIn1, _IIn2>() && {\r\n            return {_STD move(in1), _STD move(in2)};\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD template <class _In1, class _In2>\r\n    using mismatch_result = in_in_result<_In1, _In2>;\r\n\r\n    template <input_iterator _It1, input_iterator _It2, class _Pr, class _Pj1, class _Pj2>\r\n        requires indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>\r\n    _NODISCARD constexpr mismatch_result<_It1, _It2> _Mismatch_n(\r\n        _It1 _First1, _It2 _First2, iter_difference_t<_It1> _Count, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n        _STL_INTERNAL_CHECK(_Count >= 0);\r\n#if _VECTORIZED_MISMATCH\r\n        if constexpr (_Equal_memcmp_is_safe<_It1, _It2, _Pr> && is_same_v<_Pj1, identity>\r\n                      && is_same_v<_Pj2, identity>) {\r\n            if (!_STD is_constant_evaluated()) {\r\n                _STL_INTERNAL_STATIC_ASSERT(sizeof(iter_value_t<_It1>) == sizeof(iter_value_t<_It2>));\r\n                _STD _Contiguous_iter_verify(_First1, _Count);\r\n                _STD _Contiguous_iter_verify(_First2, static_cast<iter_difference_t<_It2>>(_Count));\r\n\r\n                constexpr size_t _Elem_size = sizeof(iter_value_t<_It1>);\r\n\r\n                const size_t _Pos = _STD _Mismatch_vectorized<_Elem_size>(\r\n                    _STD _To_address(_First1), _STD _To_address(_First2), static_cast<size_t>(_Count));\r\n\r\n                return {_First1 + static_cast<iter_difference_t<_It1>>(_Pos),\r\n                    _First2 + static_cast<iter_difference_t<_It2>>(_Pos)};\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_MISMATCH ^^^\r\n        for (; _Count != 0; ++_First1, (void) ++_First2, --_Count) {\r\n            if (!_STD invoke(_Pred, _STD invoke(_Proj1, *_First1), _STD invoke(_Proj2, *_First2))) {\r\n                break;\r\n            }\r\n        }\r\n\r\n        return {_STD move(_First1), _STD move(_First2)};\r\n    }\r\n\r\n    template <input_iterator _It1, sentinel_for<_It1> _Se1, input_iterator _It2, sentinel_for<_It2> _Se2, class _Pr,\r\n        class _Pj1, class _Pj2>\r\n        requires indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>\r\n    _NODISCARD constexpr mismatch_result<_It1, _It2> _Mismatch_4(\r\n        _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n        for (; _First1 != _Last1 && _First2 != _Last2; ++_First1, (void) ++_First2) {\r\n            if (!_STD invoke(_Pred, _STD invoke(_Proj1, *_First1), _STD invoke(_Proj2, *_First2))) {\r\n                break;\r\n            }\r\n        }\r\n\r\n        return {_STD move(_First1), _STD move(_First2)};\r\n    }\r\n\r\n    struct _Mismatch_fn {\r\n        template <input_iterator _It1, sentinel_for<_It1> _Se1, input_iterator _It2, sentinel_for<_It2> _Se2,\r\n            class _Pr = ranges::equal_to, class _Pj1 = identity, class _Pj2 = identity>\r\n            requires indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>\r\n        _NODISCARD static constexpr mismatch_result<_It1, _It2> operator()(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n\r\n            if constexpr (sized_sentinel_for<_Se1, _It1> && sized_sentinel_for<_Se2, _It2>) {\r\n                iter_difference_t<_It1> _Count1       = _Last1 - _First1;\r\n                const iter_difference_t<_It2> _Count2 = _Last2 - _First2;\r\n                if (_Count1 > _Count2) {\r\n                    _Count1 = static_cast<decltype(_Count1)>(_Count2);\r\n                }\r\n\r\n                auto _Result = _RANGES _Mismatch_n(_STD _Get_unwrapped(_STD move(_First1)),\r\n                    _STD _Get_unwrapped(_STD move(_First2)), _Count1, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1),\r\n                    _STD _Pass_fn(_Proj2));\r\n                _STD _Seek_wrapped(_First1, _STD move(_Result.in1));\r\n                _STD _Seek_wrapped(_First2, _STD move(_Result.in2));\r\n                return {_STD move(_First1), _STD move(_First2)};\r\n            } else {\r\n                auto _Result = _RANGES _Mismatch_4(_RANGES _Unwrap_iter<_Se1>(_STD move(_First1)),\r\n                    _RANGES _Unwrap_sent<_It1>(_STD move(_Last1)), _RANGES _Unwrap_iter<_Se2>(_STD move(_First2)),\r\n                    _RANGES _Unwrap_sent<_It2>(_STD move(_Last2)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1),\r\n                    _STD _Pass_fn(_Proj2));\r\n                _STD _Seek_wrapped(_First1, _STD move(_Result.in1));\r\n                _STD _Seek_wrapped(_First2, _STD move(_Result.in2));\r\n                return {_STD move(_First1), _STD move(_First2)};\r\n            }\r\n        }\r\n\r\n        template <input_range _Rng1, input_range _Rng2, class _Pr = ranges::equal_to, class _Pj1 = identity,\r\n            class _Pj2 = identity>\r\n            requires indirectly_comparable<iterator_t<_Rng1>, iterator_t<_Rng2>, _Pr, _Pj1, _Pj2>\r\n        _NODISCARD static constexpr mismatch_result<borrowed_iterator_t<_Rng1>, borrowed_iterator_t<_Rng2>> operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            if constexpr (sized_range<_Rng1> && sized_range<_Rng2>) {\r\n                range_difference_t<_Rng1> _Count1       = _RANGES distance(_Range1);\r\n                const range_difference_t<_Rng2> _Count2 = _RANGES distance(_Range2);\r\n                if (_Count1 > _Count2) {\r\n                    _Count1 = static_cast<range_difference_t<_Rng1>>(_Count2);\r\n                }\r\n\r\n                auto _First1 = _RANGES begin(_Range1);\r\n                auto _First2 = _RANGES begin(_Range2);\r\n                auto _Result = _RANGES _Mismatch_n(_STD _Get_unwrapped(_STD move(_First1)),\r\n                    _STD _Get_unwrapped(_STD move(_First2)), _Count1, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1),\r\n                    _STD _Pass_fn(_Proj2));\r\n                _STD _Seek_wrapped(_First1, _STD move(_Result.in1));\r\n                _STD _Seek_wrapped(_First2, _STD move(_Result.in2));\r\n                return {_STD move(_First1), _STD move(_First2)};\r\n            } else {\r\n                auto _First1 = _RANGES begin(_Range1);\r\n                auto _First2 = _RANGES begin(_Range2);\r\n                auto _Result = _RANGES _Mismatch_4(_RANGES _Unwrap_range_iter<_Rng1>(_STD move(_First1)),\r\n                    _Uend(_Range1), _RANGES _Unwrap_range_iter<_Rng2>(_STD move(_First2)), _Uend(_Range2),\r\n                    _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n                _STD _Seek_wrapped(_First1, _STD move(_Result.in1));\r\n                _STD _Seek_wrapped(_First2, _STD move(_Result.in2));\r\n                return {_STD move(_First1), _STD move(_First2)};\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Mismatch_fn mismatch;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Elem1, class _Elem2>\r\nconstexpr bool _Lex_compare_memcmp_classify_elements =\r\n#if _VECTORIZED_MISMATCH\r\n    is_integral_v<_Elem1> && is_integral_v<_Elem2> && sizeof(_Elem1) == sizeof(_Elem2)\r\n    && is_unsigned_v<_Elem1> == is_unsigned_v<_Elem2>;\r\n#else // ^^^ _VECTORIZED_MISMATCH / !_VECTORIZED_MISMATCH vvv\r\n    conjunction_v<_Is_character_or_bool<_Elem1>, _Is_character_or_bool<_Elem2>, is_unsigned<_Elem1>,\r\n        is_unsigned<_Elem2>>;\r\n#endif // ^^^ !_VECTORIZED_MISMATCH ^^^\r\n\r\n#ifdef __cpp_lib_byte\r\ntemplate <>\r\ninline constexpr bool _Lex_compare_memcmp_classify_elements<byte, byte> = true;\r\n#endif // defined(__cpp_lib_byte)\r\n\r\ntemplate <class _Elem1, class _Elem2, class _Pr>\r\nstruct _Lex_compare_memcmp_classify_pred {\r\n    using _Pred = void;\r\n};\r\n\r\ntemplate <class _Elem1, class _Elem2, class _Elem3>\r\nstruct _Lex_compare_memcmp_classify_pred<_Elem1, _Elem2, less<_Elem3>> {\r\n    using _Pred = conditional_t<_Lex_compare_memcmp_classify_elements<_Elem3, _Elem3>\r\n                                    && _Iter_copy_cat<_Elem1*, _Elem3*>::_Bitcopy_constructible\r\n                                    && _Iter_copy_cat<_Elem2*, _Elem3*>::_Bitcopy_constructible,\r\n        less<int>, void>;\r\n};\r\n\r\ntemplate <class _Elem1, class _Elem2>\r\nstruct _Lex_compare_memcmp_classify_pred<_Elem1, _Elem2, less<>> {\r\n    using _Pred = conditional_t<_Lex_compare_memcmp_classify_elements<_Elem1, _Elem2>, less<int>, void>;\r\n};\r\n\r\ntemplate <class _Elem1, class _Elem2, class _Elem3>\r\nstruct _Lex_compare_memcmp_classify_pred<_Elem1, _Elem2, greater<_Elem3>> {\r\n    using _Pred = conditional_t<_Lex_compare_memcmp_classify_elements<_Elem3, _Elem3>\r\n                                    && _Iter_copy_cat<_Elem1*, _Elem3*>::_Bitcopy_constructible\r\n                                    && _Iter_copy_cat<_Elem2*, _Elem3*>::_Bitcopy_constructible,\r\n        greater<int>, void>;\r\n};\r\n\r\ntemplate <class _Elem1, class _Elem2>\r\nstruct _Lex_compare_memcmp_classify_pred<_Elem1, _Elem2, greater<>> {\r\n    using _Pred = conditional_t<_Lex_compare_memcmp_classify_elements<_Elem1, _Elem2>, greater<int>, void>;\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Elem1, class _Elem2>\r\nstruct _Lex_compare_memcmp_classify_pred<_Elem1, _Elem2, _RANGES less> {\r\n    using _Pred = conditional_t<_Lex_compare_memcmp_classify_elements<_Elem1, _Elem2>, less<int>, void>;\r\n};\r\n\r\ntemplate <class _Elem1, class _Elem2>\r\nstruct _Lex_compare_memcmp_classify_pred<_Elem1, _Elem2, _RANGES greater> {\r\n    using _Pred = conditional_t<_Lex_compare_memcmp_classify_elements<_Elem1, _Elem2>, greater<int>, void>;\r\n};\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _It1, class _It2, class _Pr>\r\nusing _Lex_compare_memcmp_classify =\r\n    conditional_t<_Iterators_are_contiguous<_It1, _It2> && !_Iterator_is_volatile<_It1> && !_Iterator_is_volatile<_It2>,\r\n        typename _Lex_compare_memcmp_classify_pred<_Iter_value_t<_It1>, _Iter_value_t<_It2>, _Pr>::_Pred, void>;\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _Pr>\r\n_NODISCARD _CONSTEXPR20 bool lexicographical_compare(\r\n    const _InIt1 _First1, const _InIt1 _Last1, const _InIt2 _First2, const _InIt2 _Last2, _Pr _Pred) {\r\n    // order [_First1, _Last1) vs. [_First2, _Last2)\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2 = _STD _Get_unwrapped(_Last2);\r\n\r\n    using _Memcmp_pred = _Lex_compare_memcmp_classify<decltype(_UFirst1), decltype(_UFirst2), _Pr>;\r\n    if constexpr (!is_void_v<_Memcmp_pred>) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            const auto _Num1  = static_cast<size_t>(_STD _Contiguous_iter_distance(_UFirst1, _ULast1));\r\n            const auto _Num2  = static_cast<size_t>(_STD _Contiguous_iter_distance(_UFirst2, _ULast2));\r\n            const size_t _Num = (_STD min) (_Num1, _Num2);\r\n#if _VECTORIZED_MISMATCH\r\n            const auto _First1_ptr = _STD _To_address(_UFirst1);\r\n            const auto _First2_ptr = _STD _To_address(_UFirst2);\r\n            const size_t _Pos      = _Mismatch_vectorized<sizeof(*_First1_ptr)>(_First1_ptr, _First2_ptr, _Num);\r\n            if (_Pos == _Num2) {\r\n                return false;\r\n            } else if (_Pos == _Num1) {\r\n                return true;\r\n            } else {\r\n                return _Pred(_First1_ptr[_Pos], _First2_ptr[_Pos]);\r\n            }\r\n#else // ^^^ _VECTORIZED_MISMATCH / !_VECTORIZED_MISMATCH vvv\r\n            const int _Ans = _STD _Memcmp_count(_UFirst1, _UFirst2, _Num);\r\n            return _Memcmp_pred{}(_Ans, 0) || (_Ans == 0 && _Num1 < _Num2);\r\n#endif // ^^^ !_VECTORIZED_MISMATCH ^^^\r\n        }\r\n    }\r\n\r\n    for (; _UFirst1 != _ULast1 && _UFirst2 != _ULast2; ++_UFirst1, (void) ++_UFirst2) { // something to compare, do it\r\n        if (_DEBUG_LT_PRED(_Pred, *_UFirst1, *_UFirst2)) {\r\n            return true;\r\n        } else if (_Pred(*_UFirst2, *_UFirst1)) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return _UFirst1 == _ULast1 && _UFirst2 != _ULast2;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2>\r\n_NODISCARD _CONSTEXPR20 bool lexicographical_compare(\r\n    const _InIt1 _First1, const _InIt1 _Last1, const _InIt2 _First2, const _InIt2 _Last2) {\r\n    // order [_First1, _Last1) vs. [_First2, _Last2)\r\n    return _STD lexicographical_compare(_First1, _Last1, _First2, _Last2, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD bool lexicographical_compare(_ExPo&&, const _FwdIt1 _First1, const _FwdIt1 _Last1, const _FwdIt2 _First2,\r\n    const _FwdIt2 _Last2, _Pr _Pred) noexcept /* terminates */ {\r\n    // order [_First1, _Last1) vs. [_First2, _Last2)\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    return _STD lexicographical_compare(_First1, _Last1, _First2, _Last2, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt1, class _FwdIt2, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD bool lexicographical_compare(_ExPo&&, const _FwdIt1 _First1, const _FwdIt1 _Last1, const _FwdIt2 _First2,\r\n    const _FwdIt2 _Last2) noexcept /* terminates */ {\r\n    // order [_First1, _Last1) vs. [_First2, _Last2)\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt1);\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt2);\r\n    return _STD lexicographical_compare(_First1, _Last1, _First2, _Last2);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\ntemplate <class _Elem1, class _Elem2, class _Cmp>\r\nstruct _Lex_compare_three_way_memcmp_classify_comp {\r\n    using _Comp = void;\r\n};\r\n\r\ntemplate <class _Elem1, class _Elem2>\r\nstruct _Lex_compare_three_way_memcmp_classify_comp<_Elem1, _Elem2, compare_three_way> {\r\n    using _Comp = conditional_t<_Lex_compare_memcmp_classify_elements<_Elem1, _Elem2>\r\n                                    && three_way_comparable_with<const _Elem1&, const _Elem2&>,\r\n        compare_three_way, void>;\r\n};\r\n\r\ntemplate <class _Elem1, class _Elem2>\r\nstruct _Lex_compare_three_way_memcmp_classify_comp<_Elem1, _Elem2, _Synth_three_way> {\r\n    using _Comp = conditional_t<_Lex_compare_memcmp_classify_elements<_Elem1, _Elem2>\r\n                                    && three_way_comparable_with<const _Elem1&, const _Elem2&>,\r\n        _Synth_three_way, void>;\r\n};\r\n\r\ntemplate <class _Elem1, class _Elem2>\r\nstruct _Lex_compare_three_way_memcmp_classify_comp<_Elem1, _Elem2, _Strong_order::_Cpo> {\r\n    using _Comp =\r\n        conditional_t<_Lex_compare_memcmp_classify_elements<_Elem1, _Elem2> && _Can_strong_order<_Elem1, _Elem2>,\r\n            _Strong_order::_Cpo, void>;\r\n};\r\n\r\ntemplate <class _Elem1, class _Elem2>\r\nstruct _Lex_compare_three_way_memcmp_classify_comp<_Elem1, _Elem2, _Weak_order::_Cpo> {\r\n    using _Comp =\r\n        conditional_t<_Lex_compare_memcmp_classify_elements<_Elem1, _Elem2> && _Can_weak_order<_Elem1, _Elem2>,\r\n            _Weak_order::_Cpo, void>;\r\n};\r\n\r\ntemplate <class _Elem1, class _Elem2>\r\nstruct _Lex_compare_three_way_memcmp_classify_comp<_Elem1, _Elem2, _Partial_order::_Cpo> {\r\n    using _Comp =\r\n        conditional_t<_Lex_compare_memcmp_classify_elements<_Elem1, _Elem2> && _Can_partial_order<_Elem1, _Elem2>,\r\n            _Partial_order::_Cpo, void>;\r\n};\r\n\r\ntemplate <class _It1, class _It2, class _Cmp>\r\nusing _Lex_compare_three_way_memcmp_classify =\r\n    conditional_t<_Iterators_are_contiguous<_It1, _It2> && !_Iterator_is_volatile<_It1> && !_Iterator_is_volatile<_It2>,\r\n        typename _Lex_compare_three_way_memcmp_classify_comp<_Iter_value_t<_It1>, _Iter_value_t<_It2>, _Cmp>::_Comp,\r\n        void>;\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2, class _Cmp>\r\n_NODISCARD constexpr auto lexicographical_compare_three_way(const _InIt1 _First1, const _InIt1 _Last1,\r\n    const _InIt2 _First2, const _InIt2 _Last2, _Cmp _Comp) -> decltype(_Comp(*_First1, *_First2)) {\r\n    static_assert(\r\n        _Classify_category<decltype(_Comp(*_First1, *_First2))> != _Comparison_category::_Comparison_category_none,\r\n        \"The result of the comparator must have comparison category type (N4988 [alg.three.way]/2).\");\r\n\r\n    _STD _Adl_verify_range(_First1, _Last1);\r\n    _STD _Adl_verify_range(_First2, _Last2);\r\n    auto _UFirst1      = _STD _Get_unwrapped(_First1);\r\n    const auto _ULast1 = _STD _Get_unwrapped(_Last1);\r\n    auto _UFirst2      = _STD _Get_unwrapped(_First2);\r\n    const auto _ULast2 = _STD _Get_unwrapped(_Last2);\r\n\r\n    using _Memcmp_pred = _Lex_compare_three_way_memcmp_classify<decltype(_UFirst1), decltype(_UFirst2), _Cmp>;\r\n    if constexpr (!is_void_v<_Memcmp_pred>) {\r\n        if (!_STD is_constant_evaluated()) {\r\n            const auto _Num1  = static_cast<size_t>(_STD _Contiguous_iter_distance(_UFirst1, _ULast1));\r\n            const auto _Num2  = static_cast<size_t>(_STD _Contiguous_iter_distance(_UFirst2, _ULast2));\r\n            const size_t _Num = (_STD min) (_Num1, _Num2);\r\n#if _VECTORIZED_MISMATCH\r\n            const auto _First1_ptr = _STD to_address(_UFirst1);\r\n            const auto _First2_ptr = _STD to_address(_UFirst2);\r\n            const size_t _Pos      = _Mismatch_vectorized<sizeof(*_First1_ptr)>(_First1_ptr, _First2_ptr, _Num);\r\n            if (_Pos == _Num1) {\r\n                return _Pos == _Num2 ? strong_ordering::equal : strong_ordering::less;\r\n            } else if (_Pos == _Num2) {\r\n                return strong_ordering::greater;\r\n            } else {\r\n                const auto _Val1 = _First1_ptr[_Pos];\r\n                const auto _Val2 = _First2_ptr[_Pos];\r\n                __assume(_Val1 != _Val2); // avoid one comparison\r\n                return _Comp(_Val1, _Val2);\r\n            }\r\n#else // ^^^ _VECTORIZED_MISMATCH / !_VECTORIZED_MISMATCH vvv\r\n            const int _Ans = _STD _Memcmp_count(_UFirst1, _UFirst2, _Num);\r\n            if (_Ans == 0) {\r\n                return _Num1 <=> _Num2;\r\n            } else {\r\n                return _Memcmp_pred{}(_Ans, 0);\r\n            }\r\n#endif // ^^^ !_VECTORIZED_MISMATCH ^^^\r\n        }\r\n    }\r\n\r\n    for (;;) {\r\n        if (_UFirst1 == _ULast1) {\r\n            return _UFirst2 == _ULast2 ? strong_ordering::equal : strong_ordering::less;\r\n        }\r\n\r\n        if (_UFirst2 == _ULast2) {\r\n            return strong_ordering::greater;\r\n        }\r\n\r\n        if (const auto _CmpResult = _Comp(*_UFirst1, *_UFirst2); _CmpResult != 0) {\r\n            return _CmpResult;\r\n        }\r\n\r\n        ++_UFirst1;\r\n        ++_UFirst2;\r\n    }\r\n}\r\n\r\n_EXPORT_STD template <class _InIt1, class _InIt2>\r\n_NODISCARD constexpr auto lexicographical_compare_three_way(\r\n    const _InIt1 _First1, const _InIt1 _Last1, const _InIt2 _First2, const _InIt2 _Last2) {\r\n    return _STD lexicographical_compare_three_way(_First1, _Last1, _First2, _Last2, compare_three_way{});\r\n}\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Ty, class _Elem>\r\nstruct _Vector_alg_in_find_is_safe_object_pointers : false_type {};\r\ntemplate <class _Ty1, class _Ty2>\r\nstruct _Vector_alg_in_find_is_safe_object_pointers<_Ty1*, _Ty2*>\r\n    : conjunction<\r\n          // _Ty1* is an object pointer type\r\n          disjunction<is_object<_Ty1>, is_void<_Ty1>>,\r\n          // _Ty2* is an object pointer type\r\n          disjunction<is_object<_Ty2>, is_void<_Ty2>>,\r\n          // either _Ty1 is the same as _Ty2 (ignoring cv-qualifiers), or one of the two is void\r\n          disjunction<is_same<remove_cv_t<_Ty1>, remove_cv_t<_Ty2>>, is_void<_Ty1>, is_void<_Ty2>>> {};\r\n\r\n// Can we activate the vector algorithms to find a value in a range of elements?\r\ntemplate <class _Ty, class _Elem>\r\nconstexpr bool _Vector_alg_in_find_is_safe_elem =\r\n    _Is_same_and_builtin_trivially_equality_comparable<_Ty, _Elem>\r\n    || disjunction_v<\r\n#ifdef __cpp_lib_byte\r\n        // We're finding a std::byte in a range of std::byte.\r\n        conjunction<is_same<_Ty, byte>, is_same<_Elem, byte>>,\r\n#endif // defined(__cpp_lib_byte)\r\n       // We're finding an integer in a range of integers.\r\n       // This case is the one that requires careful runtime handling in _Could_compare_equal_to_value_type.\r\n        conjunction<is_integral<_Ty>, is_integral<_Elem>>,\r\n        // We're finding an (object or function) pointer in a range of pointers of the same type.\r\n        conjunction<is_pointer<_Ty>, is_same<_Ty, _Elem>>,\r\n        // We're finding a nullptr in a range of (object or function) pointers.\r\n        conjunction<is_null_pointer<_Ty>, is_pointer<_Elem>>,\r\n        // We're finding an object pointer in a range of object pointers, and:\r\n        // - One of the pointer types is a cv void*.\r\n        // - One of the pointer types is a cv1 U* and the other is a cv2 U*.\r\n        _Vector_alg_in_find_is_safe_object_pointers<_Ty, _Elem>>;\r\n\r\n// Can we activate the vector algorithms for find, count, remove, remove_copy, and ranges::find_last?\r\n// (Also used indirectly for replace and search_n.)\r\ntemplate <class _Iter, class _Ty>\r\nconstexpr bool _Vector_alg_in_find_is_safe =\r\n    // The iterator must be contiguous so we can get raw pointers.\r\n    _Iterator_is_contiguous<_Iter>\r\n    // The iterator must not be volatile.\r\n    && !_Iterator_is_volatile<_Iter>\r\n    // The type of the value to find must be compatible with the type of the elements.\r\n    && _Vector_alg_in_find_is_safe_elem<_Ty, _Iter_value_t<_Iter>>;\r\n\r\ntemplate <class _InIt, class _Ty>\r\n_NODISCARD constexpr bool _Could_compare_equal_to_value_type(const _Ty& _Val) {\r\n    // check whether _Val is within the limits of _Elem\r\n    _STL_INTERNAL_STATIC_ASSERT(_Vector_alg_in_find_is_safe<_InIt, _Ty>);\r\n\r\n    using _Elem = _Iter_value_t<_InIt>;\r\n\r\n    if constexpr (disjunction_v<is_same<_Ty, _Elem>, // If types are the same, _Val can compare equal to _Elem\r\n                      is_same<_Ty, bool>, // true or false can be represented in any integer type\r\n                      is_pointer<_Ty>, // we only compare pointers vs. other pointers with the same representation\r\n                      is_null_pointer<_Ty> // we only compare nullptr_t against pointers; any pointer can be null\r\n                      >) {\r\n        return true;\r\n    } else {\r\n        _STL_INTERNAL_STATIC_ASSERT(is_integral_v<_Elem> && is_integral_v<_Ty>);\r\n\r\n        if constexpr (is_same_v<_Elem, bool>) {\r\n            return _Val == true || _Val == false;\r\n        } else if constexpr (is_signed_v<_Elem>) {\r\n            constexpr _Elem _Min = _STD _Min_limit<_Elem>();\r\n            constexpr _Elem _Max = _STD _Max_limit<_Elem>();\r\n\r\n            if constexpr (is_signed_v<_Ty>) {\r\n                // signed _Elem, signed _Ty\r\n                return _Min <= _Val && _Val <= _Max;\r\n            } else {\r\n                // signed _Elem, unsigned _Ty\r\n                if constexpr (_Elem{-1} == static_cast<_Ty>(-1)) {\r\n                    // negative values of _Elem can compare equal to values of _Ty\r\n                    return _Val <= _Max || static_cast<_Ty>(_Min) <= _Val;\r\n                } else {\r\n                    // negative values of _Elem cannot compare equal to values of _Ty\r\n                    return _Val <= _Max;\r\n                }\r\n            }\r\n        } else {\r\n            constexpr _Elem _Max = _STD _Max_limit<_Elem>();\r\n\r\n            if constexpr (is_unsigned_v<_Ty>) {\r\n                // unsigned _Elem, unsigned _Ty\r\n                return _Val <= _Max;\r\n            } else {\r\n                // unsigned _Elem, signed _Ty\r\n                if constexpr (_Ty{-1} == static_cast<_Elem>(-1)) {\r\n                    // negative values of _Ty can compare equal to values of _Elem\r\n                    return _Val <= _Max;\r\n                } else {\r\n                    // negative values of _Ty cannot compare equal to values of _Elem\r\n                    return 0 <= _Val && _Val <= _Max;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class _InIt, class _Ty>\r\n_NODISCARD _CONSTEXPR20 _InIt _Find_unchecked(_InIt _First, const _InIt _Last, const _Ty& _Val) {\r\n    // find first matching _Val; choose optimization\r\n    // activate optimization for contiguous iterators to most scalar types (possibly const-qualified)\r\n    if constexpr (_Vector_alg_in_find_is_safe<_InIt, _Ty>) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            if (!_STD _Could_compare_equal_to_value_type<_InIt>(_Val)) {\r\n                return _Last;\r\n            }\r\n#if _VECTORIZED_FIND\r\n            const auto _First_ptr = _STD _To_address(_First);\r\n            const auto _Result    = _STD _Find_vectorized(_First_ptr, _STD _To_address(_Last), _Val);\r\n            if constexpr (is_pointer_v<_InIt>) {\r\n                return _Result;\r\n            } else {\r\n                return _First + static_cast<_Iter_diff_t<_InIt>>(_Result - _First_ptr);\r\n            }\r\n#else // ^^^ _VECTORIZED_FIND / !_VECTORIZED_FIND vvv\r\n            if constexpr (sizeof(_Iter_value_t<_InIt>) <= 2) {\r\n                const auto _First_ptr = _STD _To_address(_First);\r\n                const auto _Count     = static_cast<size_t>(_STD _Contiguous_iter_distance(_First, _Last));\r\n\r\n                using _Ptr_t = remove_reference_t<_Iter_ref_t<_InIt>>*;\r\n                _Ptr_t _Result;\r\n\r\n                if constexpr (sizeof(_Iter_value_t<_InIt>) == 1) {\r\n                    _Result =\r\n                        static_cast<_Ptr_t>(_CSTD memchr(_First_ptr, _STD _Find_arg_cast<unsigned char>(_Val), _Count));\r\n                } else {\r\n                    _STL_INTERNAL_STATIC_ASSERT(sizeof(_Iter_value_t<_InIt>) == 2);\r\n                    _Result = reinterpret_cast<_Ptr_t>(const_cast<wchar_t*>(_CSTD wmemchr(\r\n                        reinterpret_cast<const wchar_t*>(_First_ptr), _STD _Find_arg_cast<wchar_t>(_Val), _Count)));\r\n                }\r\n\r\n                if constexpr (is_pointer_v<_InIt>) {\r\n                    return _Result ? _Result : _Last;\r\n                } else {\r\n                    return _Result ? _First + (_Result - _First_ptr) : _Last;\r\n                }\r\n            }\r\n#endif // ^^^ !_VECTORIZED_FIND ^^^\r\n        }\r\n    }\r\n\r\n    for (; _First != _Last; ++_First) {\r\n        if (*_First == _Val) {\r\n            break;\r\n        }\r\n    }\r\n\r\n    return _First;\r\n}\r\n\r\n_EXPORT_STD template <class _InIt, class _Ty>\r\n_NODISCARD _CONSTEXPR20 _InIt find(_InIt _First, const _InIt _Last, const _Ty& _Val) { // find first matching _Val\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    if constexpr (_Is_vb_iterator<_InIt> && is_same_v<_Ty, bool>) {\r\n        return _STD _Find_vbool(_First, _Last, _Val);\r\n    } else {\r\n        _STD _Seek_wrapped(_First, _STD _Find_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last), _Val));\r\n        return _First;\r\n    }\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt find(_ExPo&& _Exec, _FwdIt _First, _FwdIt _Last, const _Ty& _Val) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <class _Se, class _It>\r\n    concept _Sized_or_unreachable_sentinel_for = sized_sentinel_for<_Se, _It> || same_as<_Se, unreachable_sentinel_t>;\r\n\r\n    template <class _Rng>\r\n    concept _Sized_or_infinite_range =\r\n        range<_Rng> && (sized_range<_Rng> || same_as<sentinel_t<_Rng>, unreachable_sentinel_t>);\r\n\r\n    // concept-constrained for strict enforcement as it is used by several algorithms\r\n    template <input_iterator _It, sentinel_for<_It> _Se, class _Ty, class _Pj = identity>\r\n        requires indirect_binary_predicate<ranges::equal_to, projected<_It, _Pj>, const _Ty*>\r\n    _NODISCARD constexpr _It _Find_unchecked(_It _First, const _Se _Last, const _Ty& _Val, _Pj _Proj = {}) {\r\n        constexpr bool _Elements_are_1_byte  = sizeof(_Iter_value_t<_It>) == 1;\r\n        constexpr bool _Elements_are_2_bytes = sizeof(_Iter_value_t<_It>) == 2;\r\n        constexpr bool _Is_sized             = sized_sentinel_for<_Se, _It>;\r\n\r\n        if constexpr (_Vector_alg_in_find_is_safe<_It, _Ty> && same_as<_Pj, identity>\r\n                      && (_Elements_are_1_byte    ? _Is_sized || same_as<_Se, unreachable_sentinel_t>\r\n                          : _Elements_are_2_bytes ? _Is_sized\r\n                                                  : _Is_sized && _VECTORIZED_FIND)) {\r\n            if (!_STD is_constant_evaluated()) {\r\n                if (!_STD _Could_compare_equal_to_value_type<_It>(_Val)) {\r\n                    if constexpr (_Is_sized) {\r\n                        return _RANGES next(_STD move(_First), _Last);\r\n                    } else {\r\n                        _STL_ASSERT(false, \"Tried to find a value in a range with unreachable sentinel \"\r\n                                           \"that cannot be represented by the range's value type\");\r\n                    }\r\n                }\r\n\r\n                using _Ptr_t          = remove_reference_t<_Iter_ref_t<_It>>*;\r\n                const auto _First_ptr = _STD _To_address(_First);\r\n\r\n                _Ptr_t _Result;\r\n#if _VECTORIZED_FIND\r\n                if constexpr (_Is_sized) {\r\n                    // Prefer this over memchr()/wmemchr() below for performance\r\n                    const auto _Last_ptr = _STD _To_address(_First + (_Last - _First));\r\n                    _Result              = _STD _Find_vectorized(_First_ptr, _Last_ptr, _Val);\r\n                } else\r\n#endif // ^^^ _VECTORIZED_FIND ^^^\r\n                {\r\n                    if constexpr (_Elements_are_2_bytes) {\r\n                        _STL_INTERNAL_STATIC_ASSERT(_Is_sized);\r\n                        const auto _Wchar_ptr    = reinterpret_cast<const wchar_t*>(_First_ptr);\r\n                        const auto _Wchar_val    = _STD _Find_arg_cast<wchar_t>(_Val);\r\n                        const auto _Dist         = static_cast<size_t>(_STD _Contiguous_iter_distance(_First, _Last));\r\n                        const auto _Const_result = _CSTD wmemchr(_Wchar_ptr, _Wchar_val, _Dist);\r\n                        _Result                  = reinterpret_cast<_Ptr_t>(const_cast<wchar_t*>(_Const_result));\r\n                    } else {\r\n                        _STL_INTERNAL_STATIC_ASSERT(_Elements_are_1_byte);\r\n                        size_t _Count;\r\n                        if constexpr (_Is_sized) {\r\n                            _Count = static_cast<size_t>(_STD _Contiguous_iter_distance(_First, _Last));\r\n                        } else {\r\n                            _Count = SIZE_MAX;\r\n                        }\r\n\r\n                        // C23 7.27.5.2 \"The memchr generic function\"/2 says \"The implementation shall behave as if\r\n                        // it reads the characters sequentially and stops as soon as a matching character is found.\"\r\n                        // C23 7.32.4.6.9 \"The wmemchr generic function\"/2 lacks such wording,\r\n                        // so we don't use wmemchr(), avoiding issues with unreachable_sentinel_t.\r\n                        _Result = static_cast<_Ptr_t>(\r\n                            _CSTD memchr(_First_ptr, _STD _Find_arg_cast<unsigned char>(_Val), _Count));\r\n                    }\r\n\r\n                    if constexpr (_Is_sized) {\r\n                        if (_Result == nullptr) {\r\n                            return _RANGES next(_STD move(_First), _Last);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if constexpr (is_pointer_v<_It>) {\r\n                    return _Result;\r\n                } else {\r\n                    return _RANGES next(_STD move(_First), _Result - _First_ptr);\r\n                }\r\n            }\r\n        }\r\n\r\n        for (; _First != _Last; ++_First) {\r\n            if (_STD invoke(_Proj, *_First) == _Val) {\r\n                break;\r\n            }\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    struct _Find_fn {\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Ty, class _Pj = identity>\r\n            requires indirect_binary_predicate<ranges::equal_to, projected<_It, _Pj>, const _Ty*>\r\n        _NODISCARD static constexpr _It operator()(_It _First, _Se _Last, const _Ty& _Val, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _RANGES _Find_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _Val, _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult));\r\n            return _First;\r\n        }\r\n\r\n        template <input_range _Rng, class _Ty, class _Pj = identity>\r\n            requires indirect_binary_predicate<ranges::equal_to, projected<iterator_t<_Rng>, _Pj>, const _Ty*>\r\n        _NODISCARD static constexpr borrowed_iterator_t<_Rng> operator()(\r\n            _Rng&& _Range, const _Ty& _Val, _Pj _Proj = {}) {\r\n            auto _First   = _RANGES begin(_Range);\r\n            auto _UResult = _RANGES _Find_unchecked(\r\n                _RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range), _Val, _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult));\r\n            return _First;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Find_fn find;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _InIt, class _Ty>\r\n_NODISCARD _CONSTEXPR20 _Iter_diff_t<_InIt> count(const _InIt _First, const _InIt _Last, const _Ty& _Val) {\r\n    // count elements that match _Val\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    if constexpr (_Is_vb_iterator<_InIt> && is_same_v<_Ty, bool>) {\r\n        return _STD _Count_vbool(_First, _Last, _Val);\r\n    } else {\r\n        auto _UFirst      = _STD _Get_unwrapped(_First);\r\n        const auto _ULast = _STD _Get_unwrapped(_Last);\r\n\r\n#if _VECTORIZED_COUNT\r\n        if constexpr (_Vector_alg_in_find_is_safe<decltype(_UFirst), _Ty>) {\r\n#if _HAS_CXX20\r\n            if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n            {\r\n                if (!_STD _Could_compare_equal_to_value_type<decltype(_UFirst)>(_Val)) {\r\n                    return 0;\r\n                }\r\n\r\n                return static_cast<_Iter_diff_t<_InIt>>(\r\n                    _STD _Count_vectorized(_STD _To_address(_UFirst), _STD _To_address(_ULast), _Val));\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_COUNT ^^^\r\n\r\n        _Iter_diff_t<_InIt> _Count = 0;\r\n\r\n        for (; _UFirst != _ULast; ++_UFirst) {\r\n            if (*_UFirst == _Val) {\r\n                ++_Count;\r\n            }\r\n        }\r\n\r\n        return _Count;\r\n    }\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _Iter_diff_t<_FwdIt> count(\r\n    _ExPo&& _Exec, _FwdIt _First, _FwdIt _Last, const _Ty& _Val) noexcept; // terminates\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class _InIt, class _Ty, class _Pr>\r\n_NODISCARD constexpr _InIt _Find_pr(_InIt _First, const _InIt _Last, const _Ty& _Val, _Pr _Pred) {\r\n    for (; _First != _Last; ++_First) {\r\n        if (_Pred(*_First, _Val)) {\r\n            break;\r\n        }\r\n    }\r\n\r\n    return _First;\r\n}\r\n\r\ntemplate <class _InIt, class _Ty, class _Pr>\r\n_NODISCARD constexpr _Iter_diff_t<_InIt> _Count_pr(_InIt _First, const _InIt _Last, const _Ty& _Val, _Pr _Pred) {\r\n    _Iter_diff_t<_InIt> _Count = 0;\r\n\r\n    for (; _First != _Last; ++_First) {\r\n        if (_Pred(*_First, _Val)) {\r\n            ++_Count;\r\n        }\r\n    }\r\n\r\n    return _Count;\r\n}\r\n\r\nenum class _TrimResult : unsigned char { _KeepTrimming, _HaveWorkAfterTrimming, _ReturnFalse, _ReturnTrue };\r\n\r\ntemplate <class _BidIt1, class _BidIt2, class _Pr>\r\n_NODISCARD _CONSTEXPR20 _TrimResult _Trim_equal(\r\n    _BidIt1& _First1, _BidIt1& _Back1, _BidIt2& _First2, _BidIt2& _Back2, _Pr _Pred) {\r\n    // advances the iterators, trimming matching prefixes then matching suffixes\r\n    // from [_First1, _Back1] and [_First2, _Back2]\r\n    _STL_INTERNAL_CHECK(_First1 != _Back1);\r\n    _STL_INTERNAL_CHECK(_STD distance(_First1, _Back1) == _STD distance(_First2, _Back2));\r\n    if (_Pred(*_First1, *_First2)) {\r\n        do {\r\n            ++_First1;\r\n            ++_First2;\r\n            if (_First1 == _Back1) {\r\n                // only one element is left\r\n                return _Pred(*_First1, *_First2) ? _TrimResult::_ReturnTrue : _TrimResult::_ReturnFalse;\r\n            }\r\n        } while (_Pred(*_First1, *_First2));\r\n    } else {\r\n        if (!_Pred(*_Back1, *_Back2)) {\r\n            // nothing to trim\r\n            return _TrimResult::_HaveWorkAfterTrimming;\r\n        }\r\n        --_Back1;\r\n        --_Back2;\r\n    }\r\n\r\n    for (;;) {\r\n        if (_First1 == _Back1) {\r\n            // only one element is left, it can't match because it wasn't trimmed by the first loop\r\n            return _TrimResult::_ReturnFalse;\r\n        }\r\n\r\n        if (!_Pred(*_Back1, *_Back2)) {\r\n            return _TrimResult::_KeepTrimming;\r\n        }\r\n        --_Back1;\r\n        --_Back2;\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt1, class _BidIt2, class _Pr>\r\n_NODISCARD _CONSTEXPR20 _TrimResult _Trim_reversed(\r\n    _BidIt1& _First1, _BidIt1& _Back1, _BidIt2& _First2, _BidIt2& _Back2, _Pr _Pred) {\r\n    // advances the iterators, trimming each range's prefix that matches the other range's suffix\r\n    // from [_First1, _Back1] and [_First2, _Back2]\r\n    _STL_INTERNAL_CHECK(_First1 != _Back1);\r\n    _STL_INTERNAL_CHECK(_STD distance(_First1, _Back1) == _STD distance(_First2, _Back2));\r\n    if (_Pred(*_First1, *_Back2)) {\r\n        do {\r\n            ++_First1;\r\n            --_Back2;\r\n            if (_First1 == _Back1) {\r\n                // only one element is left\r\n                return _Pred(*_First1, *_First2) ? _TrimResult::_ReturnTrue : _TrimResult::_ReturnFalse;\r\n            }\r\n        } while (_Pred(*_First1, *_Back2));\r\n    } else {\r\n        if (!_Pred(*_Back1, *_First2)) {\r\n            // nothing to trim\r\n            return _TrimResult::_HaveWorkAfterTrimming;\r\n        }\r\n        --_Back1;\r\n        ++_First2;\r\n    }\r\n\r\n    for (;;) {\r\n        if (_First1 == _Back1) {\r\n            // only one element is left, it can't match because it wasn't trimmed by the first loop\r\n            return _TrimResult::_ReturnFalse;\r\n        }\r\n\r\n        if (!_Pred(*_Back1, *_First2)) {\r\n            return _TrimResult::_KeepTrimming;\r\n        }\r\n        --_Back1;\r\n        ++_First2;\r\n    }\r\n}\r\n\r\ntemplate <class _BidIt1, class _BidIt2, class _Pr>\r\n_NODISCARD _CONSTEXPR20 _TrimResult _Trim_completely(\r\n    _BidIt1& _First1, _BidIt1& _Back1, _BidIt2& _First2, _BidIt2& _Back2, _Pr _Pred) {\r\n    // alternates between calling _Trim_reversed and _Trim_equal until no more trimming is possible\r\n    _TrimResult _Res = _TrimResult::_KeepTrimming;\r\n\r\n    for (bool _Check_reversed = true; _Res == _TrimResult::_KeepTrimming; _Check_reversed = !_Check_reversed) {\r\n        if (_Check_reversed) {\r\n            _Res = _STD _Trim_reversed(_First1, _Back1, _First2, _Back2, _Pred);\r\n        } else {\r\n            _Res = _STD _Trim_equal(_First1, _Back1, _First2, _Back2, _Pred);\r\n        }\r\n    }\r\n\r\n    return _Res;\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2, class _Pr>\r\n_NODISCARD _CONSTEXPR20 bool _Check_match_counts(\r\n    _FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2, _Pr _Pred) {\r\n    // test if [_First1, _Last1) == permuted [_First2, _Last2), after matching prefix removal\r\n    _STL_INTERNAL_CHECK(!_Pred(*_First1, *_First2));\r\n    _STL_INTERNAL_CHECK(_STD distance(_First1, _Last1) == _STD distance(_First2, _Last2));\r\n    if constexpr (_Is_ranges_bidi_iter_v<_FwdIt1> && _Is_ranges_bidi_iter_v<_FwdIt2>) {\r\n        do { // find last inequality\r\n            --_Last1;\r\n            --_Last2;\r\n        } while (_Pred(*_Last1, *_Last2));\r\n\r\n        if (_First1 == _Last1) {\r\n            return false;\r\n        }\r\n\r\n        const _TrimResult _Res = _STD _Trim_completely(_First1, _Last1, _First2, _Last2, _Pred);\r\n\r\n        if (_Res != _TrimResult::_HaveWorkAfterTrimming) {\r\n            return _Res == _TrimResult::_ReturnTrue;\r\n        }\r\n\r\n        ++_Last1;\r\n        ++_Last2;\r\n    }\r\n\r\n    for (_FwdIt1 _Next1 = _First1; _Next1 != _Last1; ++_Next1) {\r\n        if (_Next1 == _STD _Find_pr(_First1, _Next1, *_Next1, _Pred)) { // new value, compare match counts\r\n            _Iter_diff_t<_FwdIt2> _Count2 = _STD _Count_pr(_First2, _Last2, *_Next1, _Pred);\r\n            if (_Count2 == 0) {\r\n                return false; // second range lacks value, not a permutation\r\n            }\r\n\r\n            _FwdIt1 _Skip1                = _STD _Next_iter(_Next1);\r\n            _Iter_diff_t<_FwdIt1> _Count1 = _STD _Count_pr(_Skip1, _Last1, *_Next1, _Pred) + 1;\r\n            if (_Count2 != _Count1) {\r\n                return false; // match counts differ, not a permutation\r\n            }\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n_EXPORT_STD template <class _BidIt>\r\n_CONSTEXPR20 void reverse(const _BidIt _First, const _BidIt _Last) { // reverse elements in [_First, _Last)\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst = _STD _Get_unwrapped(_First);\r\n    auto _ULast  = _STD _Get_unwrapped(_Last);\r\n#if _VECTORIZED_REVERSE\r\n    using _Elem                         = remove_reference_t<_Iter_ref_t<decltype(_UFirst)>>;\r\n    constexpr bool _Allow_vectorization = conjunction_v<bool_constant<_Iterator_is_contiguous<decltype(_UFirst)>>,\r\n        _Is_trivially_swappable<_Elem>, negation<is_volatile<_Elem>>>;\r\n    constexpr size_t _Nx                = sizeof(_Elem);\r\n\r\n    if constexpr (_Allow_vectorization && _Nx <= 8 && (_Nx & (_Nx - 1)) == 0) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            _STD _Reverse_vectorized<_Nx>(_STD _To_address(_UFirst), _STD _To_address(_ULast));\r\n            return;\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_REVERSE ^^^\r\n\r\n    for (; _UFirst != _ULast && _UFirst != --_ULast; ++_UFirst) {\r\n        swap(*_UFirst, *_ULast); // intentional ADL\r\n    }\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _BidIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\nvoid reverse(_ExPo&&, _BidIt _First, _BidIt _Last) noexcept /* terminates */ {\r\n    // reverse elements in [_First, _Last)\r\n    // not parallelized as benchmarks show it isn't worth it\r\n    _REQUIRE_CPP17_MUTABLE_BIDIRECTIONAL_ITERATOR(_BidIt);\r\n    return _STD reverse(_First, _Last);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class _BidIt>\r\nconstexpr pair<_BidIt, _BidIt> _Reverse_until_sentinel_unchecked(_BidIt _First, _BidIt _Sentinel, _BidIt _Last) {\r\n    // reverse until either _First or _Last hits _Sentinel\r\n    while (_First != _Sentinel && _Last != _Sentinel) {\r\n        swap(*_First, *--_Last); // intentional ADL\r\n        ++_First;\r\n    }\r\n\r\n    return pair<_BidIt, _BidIt>(_First, _Last);\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt>\r\n_CONSTEXPR20 _FwdIt rotate(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last) {\r\n    // exchange the ranges [_First, _Mid) and [_Mid, _Last)\r\n    // that is, rotates [_First, _Last) left by distance(_First, _Mid) positions\r\n    // returns the iterator pointing at *_First's new home\r\n    _STD _Adl_verify_range(_First, _Mid);\r\n    _STD _Adl_verify_range(_Mid, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    auto _UMid        = _STD _Get_unwrapped(_Mid);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    if (_UFirst == _UMid) {\r\n        return _Last;\r\n    }\r\n\r\n    if (_UMid == _ULast) {\r\n        return _First;\r\n    }\r\n\r\n    if constexpr (_Is_cpp17_random_iter_v<_FwdIt>) {\r\n#if _VECTORIZED_ROTATE\r\n        using _Elem = remove_reference_t<_Iter_ref_t<decltype(_UFirst)>>;\r\n\r\n        if constexpr (conjunction_v<bool_constant<_Iterator_is_contiguous<decltype(_UFirst)>>,\r\n                          _Is_trivially_swappable<_Elem>, negation<is_volatile<_Elem>>>) {\r\n            if (!_STD _Is_constant_evaluated()) {\r\n                ::__std_rotate(_STD _To_address(_UFirst), _STD _To_address(_UMid), _STD _To_address(_ULast));\r\n                return _First + (_Last - _Mid);\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_ROTATE ^^^\r\n        _STD reverse(_UFirst, _UMid);\r\n        _STD reverse(_UMid, _ULast);\r\n        _STD reverse(_UFirst, _ULast);\r\n        _STD _Seek_wrapped(_First, _UFirst + (_ULast - _UMid));\r\n    } else if constexpr (_Is_cpp17_bidi_iter_v<_FwdIt>) {\r\n        _STD reverse(_UFirst, _UMid);\r\n        _STD reverse(_UMid, _ULast);\r\n        auto _Tmp = _STD _Reverse_until_sentinel_unchecked(_UFirst, _UMid, _ULast);\r\n        _STD reverse(_Tmp.first, _Tmp.second);\r\n        _STD _Seek_wrapped(_First, _UMid != _Tmp.first ? _Tmp.first : _Tmp.second);\r\n    } else {\r\n        auto _UNext = _UMid;\r\n        do { // rotate the first cycle\r\n            swap(*_UFirst, *_UNext); // intentional ADL\r\n            ++_UFirst;\r\n            ++_UNext;\r\n            if (_UFirst == _UMid) {\r\n                _UMid = _UNext;\r\n            }\r\n        } while (_UNext != _ULast);\r\n        _STD _Seek_wrapped(_First, _UFirst);\r\n        while (_UMid != _ULast) { // rotate subsequent cycles\r\n            _UNext = _UMid;\r\n            do {\r\n                swap(*_UFirst, *_UNext); // intentional ADL\r\n                ++_UFirst;\r\n                ++_UNext;\r\n                if (_UFirst == _UMid) {\r\n                    _UMid = _UNext;\r\n                }\r\n            } while (_UNext != _ULast);\r\n        }\r\n    }\r\n\r\n    return _First;\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_FwdIt rotate(_ExPo&&, _FwdIt _First, _FwdIt _Mid, _FwdIt _Last) noexcept /* terminates */ {\r\n    // rotate [_First, _Last) left by distance(_First, _Mid) positions\r\n    // not parallelized as benchmarks show it isn't worth it\r\n    _REQUIRE_CPP17_MUTABLE_ITERATOR(_FwdIt);\r\n    return _STD rotate(_First, _Mid, _Last);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _InIt, class _Pr>\r\n_NODISCARD _CONSTEXPR20 _InIt find_if(_InIt _First, const _InIt _Last, _Pr _Pred) { // find first satisfying _Pred\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst      = _STD _Get_unwrapped(_First);\r\n    const auto _ULast = _STD _Get_unwrapped(_Last);\r\n    for (; _UFirst != _ULast; ++_UFirst) {\r\n        if (_Pred(*_UFirst)) {\r\n            break;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First, _UFirst);\r\n    return _First;\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <class _Result, class _Wrapped, class _Unwrapped>\r\n    _NODISCARD constexpr _Result _Rewrap_subrange(_Wrapped& _Val, subrange<_Unwrapped>&& _UResult) {\r\n        // conditionally computes a wrapped subrange from a wrapped iterator or range and unwrapped subrange\r\n        if constexpr (is_same_v<_Result, dangling>) {\r\n            return dangling{};\r\n        } else if constexpr (is_same_v<_Result, subrange<_Unwrapped>>) {\r\n            return _STD move(_UResult);\r\n        } else if constexpr (range<_Wrapped>) {\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_range<_Wrapped>);\r\n            _STL_INTERNAL_STATIC_ASSERT(is_same_v<_Unwrapped, _Unwrapped_iterator_t<_Wrapped>>);\r\n            _STL_INTERNAL_STATIC_ASSERT(is_same_v<_Result, subrange<iterator_t<_Wrapped>>>);\r\n\r\n            auto _First = _RANGES begin(_Val);\r\n            auto _Last  = _First;\r\n            _First._Seek_to(_UResult.begin());\r\n            _Last._Seek_to(_UResult.end());\r\n            return _Result{_STD move(_First), _STD move(_Last)};\r\n        } else {\r\n            _STL_INTERNAL_STATIC_ASSERT(is_same_v<_Unwrapped, _Unwrapped_t<_Wrapped>>);\r\n            _STL_INTERNAL_STATIC_ASSERT(is_same_v<_Result, subrange<_Wrapped>>);\r\n\r\n            auto _Last = _Val;\r\n            _Val._Seek_to(_UResult.begin());\r\n            _Last._Seek_to(_UResult.end());\r\n            return _Result{_STD move(_Val), _STD move(_Last)};\r\n        }\r\n    }\r\n\r\n    // concept-constrained for strict enforcement as it is used by several algorithms\r\n    template <input_iterator _It, sentinel_for<_It> _Se, class _Pj, indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n    _NODISCARD constexpr _It _Find_if_unchecked(_It _First, const _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n        for (; _First != _Last; ++_First) {\r\n            if (_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                break;\r\n            }\r\n        }\r\n\r\n        return _First;\r\n    }\r\n\r\n    struct _Find_if_fn {\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n        _NODISCARD static constexpr _It operator()(_It _First, _Se _Last, _Pr _Pred, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            auto _UResult = _RANGES _Find_if_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult));\r\n            return _First;\r\n        }\r\n\r\n        template <input_range _Rng, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n        _NODISCARD static constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred, _Pj _Proj = {}) {\r\n            auto _First   = _RANGES begin(_Range);\r\n            auto _UResult = _RANGES _Find_if_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)),\r\n                _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult));\r\n            return _First;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Find_if_fn find_if;\r\n\r\n    class _Find_if_not_fn {\r\n    public:\r\n        template <input_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_unary_predicate<projected<_It, _Pj>> _Pr>\r\n        _NODISCARD static constexpr _It operator()(_It _First, _Se _Last, _Pr _Pred, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n\r\n            auto _UResult = _Find_if_not_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult));\r\n            return _First;\r\n        }\r\n\r\n        template <input_range _Rng, class _Pj = identity,\r\n            indirect_unary_predicate<projected<iterator_t<_Rng>, _Pj>> _Pr>\r\n        _NODISCARD static constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred, _Pj _Proj = {}) {\r\n            auto _First = _RANGES begin(_Range);\r\n\r\n            auto _UResult = _Find_if_not_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), _Uend(_Range),\r\n                _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult));\r\n            return _First;\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Pj, class _Pr>\r\n        _NODISCARD static constexpr _It _Find_if_not_unchecked(_It _First, const _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n            _STL_INTERNAL_STATIC_ASSERT(input_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_unary_predicate<_Pr, projected<_It, _Pj>>);\r\n\r\n            for (; _First != _Last; ++_First) {\r\n                if (!_STD invoke(_Pred, _STD invoke(_Proj, *_First))) {\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return _First;\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Find_if_not_fn find_if_not;\r\n\r\n    class _Adjacent_find_fn {\r\n    public:\r\n        template <forward_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_binary_predicate<projected<_It, _Pj>, projected<_It, _Pj>> _Pr = ranges::equal_to>\r\n        _NODISCARD static constexpr _It operator()(_It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n\r\n            auto _UResult = _Adjacent_find_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n\r\n            _STD _Seek_wrapped(_First, _STD move(_UResult));\r\n            return _First;\r\n        }\r\n\r\n        template <forward_range _Rng, class _Pj = identity,\r\n            indirect_binary_predicate<projected<iterator_t<_Rng>, _Pj>, projected<iterator_t<_Rng>, _Pj>> _Pr =\r\n                ranges::equal_to>\r\n        _NODISCARD static constexpr borrowed_iterator_t<_Rng> operator()(\r\n            _Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            auto _UResult =\r\n                _Adjacent_find_unchecked(_Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n\r\n            return _RANGES _Rewrap_iterator(_Range, _STD move(_UResult));\r\n        }\r\n\r\n    private:\r\n        template <class _It, class _Se, class _Pj, class _Pr>\r\n        _NODISCARD static constexpr _It _Adjacent_find_unchecked(_It _First, const _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n            // find first satisfying _Pred with successor\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirect_binary_predicate<_Pr, projected<_It, _Pj>, projected<_It, _Pj>>);\r\n\r\n            if (_First == _Last) {\r\n                return _First;\r\n            }\r\n\r\n#if _VECTORIZED_ADJACENT_FIND\r\n            if constexpr (_Vector_alg_in_search_is_safe<_It, _It, _Pr> && sized_sentinel_for<_Se, _It>\r\n                          && is_same_v<_Pj, identity>) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    const auto _First_ptr = _STD _To_address(_First);\r\n                    const auto _Last_ptr  = _STD _To_address(_First + (_Last - _First));\r\n\r\n                    const auto _Result = _STD _Adjacent_find_vectorized(_First_ptr, _Last_ptr);\r\n                    if constexpr (is_pointer_v<_It>) {\r\n                        return _Result;\r\n                    } else {\r\n                        return _First + static_cast<iter_difference_t<_It>>(_Result - _First_ptr);\r\n                    }\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_ADJACENT_FIND ^^^\r\n\r\n            for (auto _Next = _First;; ++_First) {\r\n                if (++_Next == _Last) {\r\n                    return _Next;\r\n                }\r\n\r\n                if (_STD invoke(_Pred, _STD invoke(_Proj, *_First), _STD invoke(_Proj, *_Next))) {\r\n                    return _First;\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Adjacent_find_fn adjacent_find;\r\n\r\n    template <forward_iterator _It1, input_iterator _It2, sentinel_for<_It2> _Se2, class _Pr, class _Pj1, class _Pj2>\r\n        requires indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>\r\n    _NODISCARD constexpr pair<bool, _It1> _Equal_rev_pred(\r\n        _It1 _First1, _It2 _First2, const _Se2 _Last2, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n        // Returns {true, _First1 + (_Last2 - _First2)} if [_First1, ...) equals [_First2, _Last2), and {false, {}}\r\n        // otherwise.\r\n        for (; _First2 != _Last2; ++_First1, (void) ++_First2) {\r\n            if (!_STD invoke(_Pred, _STD invoke(_Proj1, *_First1), _STD invoke(_Proj2, *_First2))) {\r\n                return {false, _It1 {}};\r\n            }\r\n        }\r\n\r\n        return {true, _STD move(_First1)};\r\n    }\r\n\r\n    class _Search_fn {\r\n    public:\r\n        template <forward_iterator _It1, sentinel_for<_It1> _Se1, forward_iterator _It2, sentinel_for<_It2> _Se2,\r\n            class _Pr = ranges::equal_to, class _Pj1 = identity, class _Pj2 = identity>\r\n            requires indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>\r\n        _NODISCARD static constexpr subrange<_It1> operator()(\r\n            _It1 _First1, _Se1 _Last1, _It2 _First2, _Se2 _Last2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            _STD _Adl_verify_range(_First1, _Last1);\r\n            _STD _Adl_verify_range(_First2, _Last2);\r\n            auto _UFirst1 = _RANGES _Unwrap_iter<_Se1>(_STD move(_First1));\r\n            auto _ULast1  = _RANGES _Unwrap_sent<_It1>(_STD move(_Last1));\r\n            auto _UFirst2 = _RANGES _Unwrap_iter<_Se2>(_STD move(_First2));\r\n            auto _ULast2  = _RANGES _Unwrap_sent<_It2>(_STD move(_Last2));\r\n\r\n            if constexpr (sized_sentinel_for<_Se1, _It1> && sized_sentinel_for<_Se2, _It2>) {\r\n                const auto _Count1 = _ULast1 - _UFirst1;\r\n                const auto _Count2 = _ULast2 - _UFirst2;\r\n                auto _UResult = _Search_sized(_STD move(_UFirst1), _STD move(_ULast1), _Count1, _STD move(_UFirst2),\r\n                    _STD move(_ULast2), _Count2, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n                return _RANGES _Rewrap_subrange<subrange<_It1>>(_First1, _STD move(_UResult));\r\n            } else {\r\n                auto _UResult = _Search_unsized(_STD move(_UFirst1), _STD move(_ULast1), _STD move(_UFirst2),\r\n                    _STD move(_ULast2), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n                return _RANGES _Rewrap_subrange<subrange<_It1>>(_First1, _STD move(_UResult));\r\n            }\r\n        }\r\n\r\n        template <forward_range _Rng1, forward_range _Rng2, class _Pr = ranges::equal_to, class _Pj1 = identity,\r\n            class _Pj2 = identity>\r\n            requires indirectly_comparable<iterator_t<_Rng1>, iterator_t<_Rng2>, _Pr, _Pj1, _Pj2>\r\n        _NODISCARD static constexpr borrowed_subrange_t<_Rng1> operator()(\r\n            _Rng1&& _Range1, _Rng2&& _Range2, _Pr _Pred = {}, _Pj1 _Proj1 = {}, _Pj2 _Proj2 = {}) {\r\n            if constexpr (sized_range<_Rng1> && sized_range<_Rng2>) {\r\n                const auto _Count1 = _RANGES distance(_Range1);\r\n                const auto _Count2 = _RANGES distance(_Range2);\r\n                auto _UResult      = _Search_sized(_Ubegin(_Range1), _Uend(_Range1), _Count1, _Ubegin(_Range2),\r\n                         _Uend(_Range2), _Count2, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n                return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng1>>(_Range1, _STD move(_UResult));\r\n            } else {\r\n                auto _UResult = _Search_unsized(_Ubegin(_Range1), _Uend(_Range1), _Ubegin(_Range2), _Uend(_Range2),\r\n                    _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj1), _STD _Pass_fn(_Proj2));\r\n                return _RANGES _Rewrap_subrange<borrowed_subrange_t<_Rng1>>(_Range1, _STD move(_UResult));\r\n            }\r\n        }\r\n\r\n    private:\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr subrange<_It1> _Search_sized(_It1 _First1, const _Se1 _Last1,\r\n            iter_difference_t<_It1> _Count1, _It2 _First2, const _Se2 _Last2, const iter_difference_t<_It2> _Count2,\r\n            _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>);\r\n            _STL_INTERNAL_CHECK(_RANGES distance(_First1, _Last1) == _Count1);\r\n            _STL_INTERNAL_CHECK(_RANGES distance(_First2, _Last2) == _Count2);\r\n\r\n#if _VECTORIZED_SEARCH\r\n            if constexpr (_Vector_alg_in_search_is_safe<_It1, _It2, _Pr> && is_same_v<_Pj1, identity>\r\n                          && is_same_v<_Pj2, identity>) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    _STD _Contiguous_iter_verify(_First2, _Count2);\r\n\r\n                    const auto _Ptr1 = _STD to_address(_First1);\r\n                    const auto _Ptr2 = _STD to_address(_First2);\r\n                    remove_const_t<decltype(_Ptr1)> _Ptr_last1;\r\n\r\n                    if constexpr (is_same_v<_It1, _Se1>) {\r\n                        _Ptr_last1 = _STD to_address(_Last1);\r\n                    } else {\r\n                        _Ptr_last1 = _STD to_address(_First1 + _Count1);\r\n                    }\r\n\r\n                    const auto _Ptr_res1 =\r\n                        _STD _Search_vectorized(_Ptr1, _Ptr_last1, _Ptr2, static_cast<size_t>(_Count2));\r\n\r\n                    if constexpr (is_pointer_v<_It1>) {\r\n                        if (_Ptr_res1 != _Ptr_last1) {\r\n                            return {_Ptr_res1, _Ptr_res1 + _Count2};\r\n                        } else {\r\n                            return {_Ptr_res1, _Ptr_res1};\r\n                        }\r\n                    } else {\r\n                        _First1 += static_cast<iter_difference_t<_It1>>(_Ptr_res1 - _Ptr1);\r\n                        if (_First1 != _Last1) {\r\n                            return {_First1, _First1 + static_cast<iter_difference_t<_It1>>(_Count2)};\r\n                        } else {\r\n                            return {_First1, _First1};\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_SEARCH ^^^\r\n\r\n            for (; _Count1 >= _Count2; ++_First1, (void) --_Count1) {\r\n                auto _Match_and_mid1 = _RANGES _Equal_rev_pred(_First1, _First2, _Last2, _Pred, _Proj1, _Proj2);\r\n                if (_Match_and_mid1.first) {\r\n                    return {_STD move(_First1), _STD move(_Match_and_mid1.second)};\r\n                }\r\n            }\r\n\r\n            _First1 = _RANGES _Find_last_iterator(_First1, _Last1, _Count1);\r\n            return {_First1, _First1};\r\n        }\r\n\r\n        template <class _It1, class _Se1, class _It2, class _Se2, class _Pr, class _Pj1, class _Pj2>\r\n        _NODISCARD static constexpr subrange<_It1> _Search_unsized(\r\n            _It1 _First1, const _Se1 _Last1, _It2 _First2, const _Se2 _Last2, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) {\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se1, _It1>);\r\n            _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se2, _It2>);\r\n            _STL_INTERNAL_STATIC_ASSERT(indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2>);\r\n\r\n            for (;; ++_First1) {\r\n                auto _Mid1 = _First1;\r\n                for (auto _Mid2 = _First2;; ++_Mid1, (void) ++_Mid2) {\r\n                    if (_Mid2 == _Last2) { // match\r\n                        return {_STD move(_First1), _STD move(_Mid1)};\r\n                    }\r\n\r\n                    if (_Mid1 == _Last1) { // not enough haystack left to find a match\r\n                        return {_Mid1, _Mid1};\r\n                    }\r\n\r\n                    if (!_STD invoke(_Pred, _STD invoke(_Proj1, *_Mid1), _STD invoke(_Proj2, *_Mid2))) { // mismatch\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Search_fn search;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _Iter, class _Elem = _Iter_value_t<_Iter>>\r\nconstexpr bool _Is_min_max_iterators_safe =\r\n    _Iterator_is_contiguous<_Iter> // The iterator must be contiguous so we can get raw pointers.\r\n    && !_Iterator_is_volatile<_Iter> // The iterator must not be volatile.\r\n    && disjunction_v<\r\n#if _USE_STD_VECTOR_FLOATING_ALGORITHMS\r\n#if defined(__LDBL_DIG__) && __LDBL_DIG__ == 18\r\n        is_same<_Elem, float>, is_same<_Elem, double>,\r\n#else // ^^^ 80-bit long double (not supported by MSVC in general, see GH-1316) / 64-bit long double vvv\r\n        is_floating_point<_Elem>, // Element is floating-point or...\r\n#endif // ^^^ 64-bit long double ^^^\r\n#endif // _USE_STD_VECTOR_FLOATING_ALGORITHMS\r\n        is_integral<_Elem>, is_pointer<_Elem>>; // ... integral or pointer type.\r\n\r\ntemplate <class _Iter, class _Pr>\r\nconstexpr bool _Is_predicate_less = _Is_any_of_v<_Pr,\r\n#if _HAS_CXX20\r\n    _RANGES less,\r\n#endif // _HAS_CXX20\r\n    less<>, less<_Iter_value_t<_Iter>>>;\r\n\r\ntemplate <class _Iter, class _Pr>\r\nconstexpr bool _Is_predicate_greater = _Is_any_of_v<_Pr,\r\n#if _HAS_CXX20\r\n    _RANGES greater,\r\n#endif // _HAS_CXX20\r\n    greater<>, greater<_Iter_value_t<_Iter>>>;\r\n\r\n#if _VECTORIZED_MINMAX_ELEMENT_64BIT_INT\r\ntemplate <class _Ty>\r\n_INLINE_VAR constexpr bool _Is_64bit_int_excluded_from_min_max_element_optimization = false;\r\n#else // ^^^ _VECTORIZED_MINMAX_ELEMENT_64BIT_INT / !_VECTORIZED_MINMAX_ELEMENT_64BIT_INT vvv\r\ntemplate <class _Ty>\r\n_INLINE_VAR constexpr bool _Is_64bit_int_excluded_from_min_max_element_optimization =\r\n    sizeof(_Ty) == 8 && !is_floating_point_v<_Ty>;\r\n#endif // ^^^ !_VECTORIZED_MINMAX_ELEMENT_64BIT_INT ^^^\r\n\r\ntemplate <class _Iter, class _Pr>\r\nconstexpr bool _Is_min_max_optimization_safe = // Activate the vector algorithms for min_/max_element?\r\n    _Is_min_max_iterators_safe<_Iter> && _Is_predicate_less<_Iter, _Pr>\r\n    && !_Is_64bit_int_excluded_from_min_max_element_optimization<_Iter_value_t<_Iter>>;\r\n\r\n// Unlike the position-based vectorized implementation, the value-based vectorized implementation\r\n// does not always produce the expected results for floating-point types.\r\n//\r\n// Efficient vectorization needs to find the vertical minmax first, and then the horizontal one.\r\n// This alters the order of comparison: index zero element is first compared against\r\n// vector size equal index element and only in the end against index one element.\r\n// With equivalent but distinguishable +0.0 and -0.0 values, the altered comparison order\r\n// will not produce the expected result in some cases (will return +0.0 instead of -0.0 or the reverse).\r\n//\r\n// The result is still acceptable for /fp:fast when +0.0 / -0.0 are not expected to be properly distinguished,\r\n// and the compiler itself takes advantage of it.\r\ntemplate <class _Iter, class _Pr, class _Elem = _Iter_value_t<_Iter>>\r\nconstexpr bool _Is_min_max_value_optimization_safe = // Activate the vector algorithms for ranges::min/max?\r\n#ifndef _M_FP_FAST\r\n    !is_floating_point_v<_Elem> &&\r\n#endif // ^^^ !defined(_M_FP_FAST) ^^^\r\n    _Is_min_max_iterators_safe<_Iter> && _Is_predicate_less<_Iter, _Pr>;\r\n\r\ntemplate <class _FwdIt, class _Pr>\r\nconstexpr _FwdIt _Max_element_unchecked(_FwdIt _First, _FwdIt _Last, _Pr _Pred) { // find largest element\r\n#if _VECTORIZED_MINMAX_ELEMENT\r\n    if constexpr (_Is_min_max_optimization_safe<_FwdIt, _Pr>) {\r\n        if (!_Is_constant_evaluated()) {\r\n            const auto _First_ptr = _STD _To_address(_First);\r\n            const auto _Result    = _STD _Max_element_vectorized(_First_ptr, _STD _To_address(_Last));\r\n            if constexpr (is_pointer_v<_FwdIt>) {\r\n                return _Result;\r\n            } else {\r\n                return _First + static_cast<_Iter_diff_t<_FwdIt>>(_Result - _First_ptr);\r\n            }\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_MINMAX_ELEMENT ^^^\r\n\r\n    _FwdIt _Found = _First;\r\n    if (_First != _Last) {\r\n        while (++_First != _Last) {\r\n            if (_DEBUG_LT_PRED(_Pred, *_Found, *_First)) {\r\n                _Found = _First;\r\n            }\r\n        }\r\n    }\r\n\r\n    return _Found;\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Pr>\r\n_NODISCARD constexpr _FwdIt max_element(_FwdIt _First, _FwdIt _Last, _Pr _Pred) { // find largest element\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    _STD _Seek_wrapped(_First,\r\n        _STD _Max_element_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last), _STD _Pass_fn(_Pred)));\r\n    return _First;\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt>\r\n_NODISCARD constexpr _FwdIt max_element(_FwdIt _First, _FwdIt _Last) { // find largest element\r\n    return _STD max_element(_First, _Last, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt max_element(_ExPo&&, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // find largest element\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    return _STD max_element(_First, _Last, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt max_element(_ExPo&&, _FwdIt _First, _FwdIt _Last) noexcept /* terminates */ {\r\n    // find largest element\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    return _STD max_element(_First, _Last);\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <class _It, class _Se, class _Pr, class _Pj>\r\n    _NODISCARD constexpr _It _Max_element_unchecked(_It _First, const _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n        _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It>);\r\n        _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n        _STL_INTERNAL_STATIC_ASSERT(indirect_strict_weak_order<_Pr, projected<_It, _Pj>>);\r\n\r\n#if _VECTORIZED_MINMAX_ELEMENT\r\n        if constexpr (is_same_v<_Pj, identity> && _Is_min_max_optimization_safe<_It, _Pr>\r\n                      && sized_sentinel_for<_Se, _It>) {\r\n            if (!_STD is_constant_evaluated()) {\r\n                const auto _First_ptr = _STD to_address(_First);\r\n                const auto _Last_ptr  = _STD to_address(_First + (_Last - _First));\r\n                const auto _Result    = _STD _Max_element_vectorized(_First_ptr, _Last_ptr);\r\n                if constexpr (is_pointer_v<_It>) {\r\n                    return _Result;\r\n                } else {\r\n                    return _First + static_cast<iter_difference_t<_It>>(_Result - _First_ptr);\r\n                }\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_MINMAX_ELEMENT ^^^\r\n\r\n        auto _Found = _First;\r\n        if (_First == _Last) {\r\n            return _Found;\r\n        }\r\n\r\n        while (++_First != _Last) {\r\n            if (_STD invoke(_Pred, _STD invoke(_Proj, *_Found), _STD invoke(_Proj, *_First))) {\r\n                _Found = _First;\r\n            }\r\n        }\r\n\r\n        return _Found;\r\n    }\r\n\r\n    struct _Max_element_fn {\r\n        template <forward_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<_It, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr _It operator()(_It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            _STD _Seek_wrapped(\r\n                _First, _RANGES _Max_element_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                            _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj)));\r\n            return _First;\r\n        }\r\n\r\n        template <forward_range _Rng, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr borrowed_iterator_t<_Rng> operator()(\r\n            _Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            auto _UResult = _RANGES _Max_element_unchecked(\r\n                _Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _RANGES _Rewrap_iterator(_Range, _STD move(_UResult));\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Max_element_fn max_element;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Ty, class _Pr>\r\n_NODISCARD constexpr _Ty(max)(initializer_list<_Ty> _Ilist, _Pr _Pred) {\r\n    // return leftmost/largest\r\n    _STL_ASSERT(\r\n        _Ilist.size() != 0, \"An initializer_list passed to std::max must not be empty. (N4971 [alg.min.max]/13)\");\r\n#if _VECTORIZED_MINMAX\r\n    if constexpr (_Is_min_max_value_optimization_safe<const _Ty*, _Pr>) {\r\n        if (!_Is_constant_evaluated()) {\r\n            return static_cast<_Ty>(_STD _Max_vectorized(_Ilist.begin(), _Ilist.end()));\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_MINMAX ^^^\r\n    const _Ty* _Res = _STD _Max_element_unchecked(_Ilist.begin(), _Ilist.end(), _STD _Pass_fn(_Pred));\r\n    return *_Res;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD constexpr _Ty(max)(initializer_list<_Ty> _Ilist) {\r\n    // return leftmost/largest\r\n    return (_STD max) (_Ilist, less<>{});\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <class _It>\r\n    concept _Prefer_iterator_copies = // When we have a choice, should we copy iterators or copy elements?\r\n                                      // pre: input_iterator<_It>\r\n        sizeof(_It) <= 2 * sizeof(iter_value_t<_It>)\r\n        && (is_trivially_copyable_v<_It> || !is_trivially_copyable_v<iter_value_t<_It>>);\r\n\r\n    struct _Max_fn {\r\n        template <class _Ty, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<const _Ty*, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr const _Ty& operator()(const _Ty& _Left _MSVC_LIFETIMEBOUND,\r\n            const _Ty& _Right _MSVC_LIFETIMEBOUND, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            if (_STD invoke(_Pred, _STD invoke(_Proj, _Left), _STD invoke(_Proj, _Right))) {\r\n                return _Right;\r\n            } else {\r\n                return _Left;\r\n            }\r\n        }\r\n\r\n        template <copyable _Ty, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<const _Ty*, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr _Ty operator()(initializer_list<_Ty> _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            const auto _First = _Range.begin();\r\n            const auto _Last  = _Range.end();\r\n            _STL_ASSERT(_First != _Last,\r\n                \"An initializer_list passed to std::ranges::max must not be empty. (N4971 [alg.min.max]/13)\");\r\n#if _VECTORIZED_MINMAX\r\n            if constexpr (is_same_v<_Pj, identity> && _Is_min_max_value_optimization_safe<const _Ty*, _Pr>) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    return static_cast<_Ty>(_STD _Max_vectorized(_First, _Last));\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_MINMAX ^^^\r\n            return *_RANGES _Max_element_unchecked(_First, _Last, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n        }\r\n\r\n        template <input_range _Rng, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>\r\n            requires indirectly_copyable_storable<iterator_t<_Rng>, range_value_t<_Rng>*>\r\n        _NODISCARD static constexpr range_value_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            auto _UFirst = _Ubegin(_Range);\r\n            auto _ULast  = _Uend(_Range);\r\n            _STL_ASSERT(\r\n                _UFirst != _ULast, \"A range passed to std::ranges::max must not be empty. (N4971 [alg.min.max]/13)\");\r\n#if _VECTORIZED_MINMAX\r\n            if constexpr (is_same_v<_Pj, identity> && _Is_min_max_value_optimization_safe<decltype(_UFirst), _Pr>\r\n                          && sized_sentinel_for<decltype(_ULast), decltype(_UFirst)>) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    const auto _First_ptr = _STD to_address(_UFirst);\r\n                    const auto _Last_ptr  = _STD to_address(_UFirst + (_ULast - _UFirst));\r\n                    return static_cast<range_value_t<_Rng>>(_STD _Max_vectorized(_First_ptr, _Last_ptr));\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_MINMAX ^^^\r\n            if constexpr (forward_range<_Rng> && _Prefer_iterator_copies<decltype(_UFirst)>) {\r\n                return static_cast<range_value_t<_Rng>>(*_RANGES _Max_element_unchecked(\r\n                    _STD move(_UFirst), _STD move(_ULast), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj)));\r\n            } else {\r\n                range_value_t<_Rng> _Found(*_UFirst);\r\n                while (++_UFirst != _ULast) {\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj, _Found), _STD invoke(_Proj, *_UFirst))) {\r\n                        _Found = *_UFirst;\r\n                    }\r\n                }\r\n\r\n                return _Found;\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Max_fn max;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class _FwdIt, class _Pr>\r\nconstexpr _FwdIt _Min_element_unchecked(_FwdIt _First, _FwdIt _Last, _Pr _Pred) { // find smallest element\r\n#if _VECTORIZED_MINMAX_ELEMENT\r\n    if constexpr (_Is_min_max_optimization_safe<_FwdIt, _Pr>) {\r\n        if (!_Is_constant_evaluated()) {\r\n            const auto _First_ptr = _STD _To_address(_First);\r\n            const auto _Result    = _STD _Min_element_vectorized(_First_ptr, _STD _To_address(_Last));\r\n            if constexpr (is_pointer_v<_FwdIt>) {\r\n                return _Result;\r\n            } else {\r\n                return _First + static_cast<_Iter_diff_t<_FwdIt>>(_Result - _First_ptr);\r\n            }\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_MINMAX_ELEMENT ^^^\r\n\r\n    _FwdIt _Found = _First;\r\n    if (_First != _Last) {\r\n        while (++_First != _Last) {\r\n            if (_DEBUG_LT_PRED(_Pred, *_First, *_Found)) {\r\n                _Found = _First;\r\n            }\r\n        }\r\n    }\r\n\r\n    return _Found;\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Pr>\r\n_NODISCARD constexpr _FwdIt min_element(_FwdIt _First, _FwdIt _Last, _Pr _Pred) { // find smallest element\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    _STD _Seek_wrapped(_First,\r\n        _STD _Min_element_unchecked(_STD _Get_unwrapped(_First), _STD _Get_unwrapped(_Last), _STD _Pass_fn(_Pred)));\r\n    return _First;\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt>\r\n_NODISCARD constexpr _FwdIt min_element(_FwdIt _First, _FwdIt _Last) { // find smallest element\r\n    return _STD min_element(_First, _Last, less<>{});\r\n}\r\n\r\n#if _HAS_CXX17\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt min_element(_ExPo&&, _FwdIt _First, _FwdIt _Last, _Pr _Pred) noexcept /* terminates */ {\r\n    // find smallest element\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    return _STD min_element(_First, _Last, _STD _Pass_fn(_Pred));\r\n}\r\n\r\n_EXPORT_STD template <class _ExPo, class _FwdIt, _Enable_if_execution_policy_t<_ExPo> = 0>\r\n_NODISCARD _FwdIt min_element(_ExPo&&, _FwdIt _First, _FwdIt _Last) noexcept /* terminates */ {\r\n    // find smallest element\r\n    // not parallelized at present, parallelism expected to be feasible in a future release\r\n    _REQUIRE_PARALLEL_ITERATOR(_FwdIt);\r\n    return _STD min_element(_First, _Last);\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    template <class _It, class _Se, class _Pr, class _Pj>\r\n    _NODISCARD constexpr _It _Min_element_unchecked(_It _First, const _Se _Last, _Pr _Pred, _Pj _Proj) {\r\n        _STL_INTERNAL_STATIC_ASSERT(forward_iterator<_It>);\r\n        _STL_INTERNAL_STATIC_ASSERT(sentinel_for<_Se, _It>);\r\n        _STL_INTERNAL_STATIC_ASSERT(indirect_strict_weak_order<_Pr, projected<_It, _Pj>>);\r\n\r\n#if _VECTORIZED_MINMAX_ELEMENT\r\n        if constexpr (is_same_v<_Pj, identity> && _Is_min_max_optimization_safe<_It, _Pr>\r\n                      && sized_sentinel_for<_Se, _It>) {\r\n            if (!_STD is_constant_evaluated()) {\r\n                const auto _First_ptr = _STD to_address(_First);\r\n                const auto _Last_ptr  = _STD to_address(_First + (_Last - _First));\r\n                const auto _Result    = _STD _Min_element_vectorized(_First_ptr, _Last_ptr);\r\n                if constexpr (is_pointer_v<_It>) {\r\n                    return _Result;\r\n                } else {\r\n                    return _First + static_cast<iter_difference_t<_It>>(_Result - _First_ptr);\r\n                }\r\n            }\r\n        }\r\n#endif // ^^^ _VECTORIZED_MINMAX_ELEMENT ^^^\r\n\r\n        auto _Found = _First;\r\n        if (_First == _Last) {\r\n            return _Found;\r\n        }\r\n\r\n        while (++_First != _Last) {\r\n            if (_STD invoke(_Pred, _STD invoke(_Proj, *_First), _STD invoke(_Proj, *_Found))) {\r\n                _Found = _First;\r\n            }\r\n        }\r\n\r\n        return _Found;\r\n    }\r\n\r\n    struct _Min_element_fn {\r\n        template <forward_iterator _It, sentinel_for<_It> _Se, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<_It, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr _It operator()(_It _First, _Se _Last, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            _STD _Adl_verify_range(_First, _Last);\r\n            _STD _Seek_wrapped(\r\n                _First, _RANGES _Min_element_unchecked(_RANGES _Unwrap_iter<_Se>(_STD move(_First)),\r\n                            _RANGES _Unwrap_sent<_It>(_STD move(_Last)), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj)));\r\n            return _First;\r\n        }\r\n\r\n        template <forward_range _Rng, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr borrowed_iterator_t<_Rng> operator()(\r\n            _Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            auto _UResult = _RANGES _Min_element_unchecked(\r\n                _Ubegin(_Range), _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n            return _RANGES _Rewrap_iterator(_Range, _STD move(_UResult));\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Min_element_fn min_element;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\n_EXPORT_STD template <class _Ty, class _Pr>\r\n_NODISCARD constexpr _Ty(min)(initializer_list<_Ty> _Ilist, _Pr _Pred) {\r\n    // return leftmost/smallest\r\n    _STL_ASSERT(\r\n        _Ilist.size() != 0, \"An initializer_list passed to std::min must not be empty. (N4971 [alg.min.max]/5)\");\r\n#if _VECTORIZED_MINMAX\r\n    if constexpr (_Is_min_max_value_optimization_safe<const _Ty*, _Pr>) {\r\n        if (!_Is_constant_evaluated()) {\r\n            return static_cast<_Ty>(_STD _Min_vectorized(_Ilist.begin(), _Ilist.end()));\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_MINMAX ^^^\r\n    const _Ty* _Res = _STD _Min_element_unchecked(_Ilist.begin(), _Ilist.end(), _STD _Pass_fn(_Pred));\r\n    return *_Res;\r\n}\r\n\r\n_EXPORT_STD template <class _Ty>\r\n_NODISCARD constexpr _Ty(min)(initializer_list<_Ty> _Ilist) {\r\n    // return leftmost/smallest\r\n    return (_STD min) (_Ilist, less<>{});\r\n}\r\n\r\n#if _HAS_CXX20\r\nnamespace ranges {\r\n    struct _Min_fn {\r\n        template <class _Ty, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<const _Ty*, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr const _Ty& operator()(const _Ty& _Left _MSVC_LIFETIMEBOUND,\r\n            const _Ty& _Right _MSVC_LIFETIMEBOUND, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            if (_STD invoke(_Pred, _STD invoke(_Proj, _Right), _STD invoke(_Proj, _Left))) {\r\n                return _Right;\r\n            } else {\r\n                return _Left;\r\n            }\r\n        }\r\n\r\n        template <copyable _Ty, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<const _Ty*, _Pj>> _Pr = ranges::less>\r\n        _NODISCARD static constexpr _Ty operator()(initializer_list<_Ty> _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            const auto _First = _Range.begin();\r\n            const auto _Last  = _Range.end();\r\n            _STL_ASSERT(_First != _Last,\r\n                \"An initializer_list passed to std::ranges::min must not be empty. (N4971 [alg.min.max]/5)\");\r\n#if _VECTORIZED_MINMAX\r\n            if constexpr (is_same_v<_Pj, identity> && _Is_min_max_value_optimization_safe<const _Ty*, _Pr>) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    return static_cast<_Ty>(_STD _Min_vectorized(_First, _Last));\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_MINMAX ^^^\r\n            return *_RANGES _Min_element_unchecked(_First, _Last, _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj));\r\n        }\r\n\r\n        template <input_range _Rng, class _Pj = identity,\r\n            indirect_strict_weak_order<projected<iterator_t<_Rng>, _Pj>> _Pr = ranges::less>\r\n            requires indirectly_copyable_storable<iterator_t<_Rng>, range_value_t<_Rng>*>\r\n        _NODISCARD static constexpr range_value_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) {\r\n            auto _UFirst = _Ubegin(_Range);\r\n            auto _ULast  = _Uend(_Range);\r\n            _STL_ASSERT(\r\n                _UFirst != _ULast, \"A range passed to std::ranges::min must not be empty. (N4971 [alg.min.max]/5)\");\r\n#if _VECTORIZED_MINMAX\r\n            if constexpr (is_same_v<_Pj, identity> && _Is_min_max_value_optimization_safe<decltype(_UFirst), _Pr>\r\n                          && sized_sentinel_for<decltype(_ULast), decltype(_UFirst)>) {\r\n                if (!_STD is_constant_evaluated()) {\r\n                    const auto _First_ptr = _STD to_address(_UFirst);\r\n                    const auto _Last_ptr  = _STD to_address(_UFirst + (_ULast - _UFirst));\r\n                    return static_cast<range_value_t<_Rng>>(_STD _Min_vectorized(_First_ptr, _Last_ptr));\r\n                }\r\n            }\r\n#endif // ^^^ _VECTORIZED_MINMAX ^^^\r\n            if constexpr (forward_range<_Rng> && _Prefer_iterator_copies<decltype(_UFirst)>) {\r\n                return static_cast<range_value_t<_Rng>>(*_RANGES _Min_element_unchecked(\r\n                    _STD move(_UFirst), _STD move(_ULast), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj)));\r\n            } else {\r\n                range_value_t<_Rng> _Found(*_UFirst);\r\n                while (++_UFirst != _ULast) {\r\n                    if (_STD invoke(_Pred, _STD invoke(_Proj, *_UFirst), _STD invoke(_Proj, _Found))) {\r\n                        _Found = *_UFirst;\r\n                    }\r\n                }\r\n\r\n                return _Found;\r\n            }\r\n        }\r\n    };\r\n\r\n    _EXPORT_STD inline constexpr _Min_fn min;\r\n} // namespace ranges\r\n#endif // _HAS_CXX20\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Ty, class _Pr>\r\n_NODISCARD _CONSTEXPR20 _FwdIt lower_bound(_FwdIt _First, const _FwdIt _Last, const _Ty& _Val, _Pr _Pred) {\r\n    // find first element not before _Val\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst = _STD _Get_unwrapped(_First);\r\n    auto _Count  = _STD distance(_UFirst, _STD _Get_unwrapped(_Last));\r\n\r\n    while (0 < _Count) { // divide and conquer, find half that contains answer\r\n        const auto _Count2 = static_cast<decltype(_Count)>(_Count / 2);\r\n        const auto _UMid   = _STD next(_UFirst, _Count2);\r\n        if (_Pred(*_UMid, _Val)) { // try top half\r\n            _UFirst = _STD _Next_iter(_UMid);\r\n            _Count -= _Count2 + 1;\r\n        } else {\r\n            _Count = _Count2;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First, _UFirst);\r\n    return _First;\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Ty>\r\n_NODISCARD _CONSTEXPR20 _FwdIt lower_bound(_FwdIt _First, _FwdIt _Last, const _Ty& _Val) {\r\n    // find first element not before _Val\r\n    return _STD lower_bound(_First, _Last, _Val, less<>{});\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Ty, class _Pr>\r\n_NODISCARD _CONSTEXPR20 _FwdIt upper_bound(_FwdIt _First, _FwdIt _Last, const _Ty& _Val, _Pr _Pred) {\r\n    // find first element that _Val is before\r\n    _STD _Adl_verify_range(_First, _Last);\r\n    auto _UFirst = _STD _Get_unwrapped(_First);\r\n    auto _Count  = _STD distance(_UFirst, _STD _Get_unwrapped(_Last));\r\n\r\n    while (0 < _Count) { // divide and conquer, find half that contains answer\r\n        const auto _Count2 = static_cast<decltype(_Count)>(_Count / 2);\r\n        const auto _UMid   = _STD next(_UFirst, _Count2);\r\n        if (_Pred(_Val, *_UMid)) {\r\n            _Count = _Count2;\r\n        } else { // try top half\r\n            _UFirst = _STD _Next_iter(_UMid);\r\n            _Count -= _Count2 + 1;\r\n        }\r\n    }\r\n\r\n    _STD _Seek_wrapped(_First, _UFirst);\r\n    return _First;\r\n}\r\n\r\n_EXPORT_STD template <class _FwdIt, class _Ty>\r\n_NODISCARD _CONSTEXPR20 _FwdIt upper_bound(_FwdIt _First, _FwdIt _Last, const _Ty& _Val) {\r\n    // find first element that _Val is before\r\n    return _STD upper_bound(_First, _Last, _Val, less<>{});\r\n}\r\n\r\ntemplate <class _FwdIt1, class _FwdIt2>\r\n_CONSTEXPR20 _FwdIt2 _Swap_ranges_unchecked(_FwdIt1 _First1, const _FwdIt1 _Last1, _FwdIt2 _First2) {\r\n    // swap [_First1, _Last1) with [_First2, ...)\r\n\r\n#if _VECTORIZED_SWAP_RANGES\r\n    using _Elem1 = remove_reference_t<_Iter_ref_t<_FwdIt1>>;\r\n    using _Elem2 = remove_reference_t<_Iter_ref_t<_FwdIt2>>;\r\n    if constexpr (is_same_v<_Elem1, _Elem2> && _Is_trivially_swappable_v<_Elem1>\r\n                  && _Iterators_are_contiguous<_FwdIt1, _FwdIt2>) {\r\n#if _HAS_CXX20\r\n        if (!_STD is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n        {\r\n            const auto _Dist2 = static_cast<_Iter_diff_t<_FwdIt2>>(_Last1 - _First1);\r\n            _STD _Contiguous_iter_verify(_First2, _Dist2);\r\n            ::__std_swap_ranges_trivially_swappable_noalias(\r\n                _STD _To_address(_First1), _STD _To_address(_Last1), _STD _To_address(_First2));\r\n            return _First2 + _Dist2;\r\n        }\r\n    }\r\n#endif // ^^^ _VECTORIZED_SWAP_RANGES ^^^\r\n\r\n    for (; _First1 != _Last1; ++_First1, (void) ++_First2) {\r\n        swap(*_First1, *_First2); // intentional ADL\r\n    }\r\n\r\n    return _First2;\r\n}\r\n\r\nextern \"C++\" [[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xbad_alloc();\r\nextern \"C++\" [[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xinvalid_argument(_In_z_ const char*);\r\nextern \"C++\" [[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xlength_error(_In_z_ const char*);\r\nextern \"C++\" [[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xout_of_range(_In_z_ const char*);\r\nextern \"C++\" [[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xoverflow_error(_In_z_ const char*);\r\nextern \"C++\" [[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xruntime_error(_In_z_ const char*);\r\nextern \"C++\" [[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _XGetLastError();\r\n\r\n_EXPORT_STD template <class _Category, class _Ty, class _Diff = ptrdiff_t, class _Pointer = _Ty*,\r\n    class _Reference = _Ty&>\r\nstruct _CXX17_DEPRECATE_ITERATOR_BASE_CLASS iterator { // base type for iterator classes\r\n    using iterator_category = _Category;\r\n    using value_type        = _Ty;\r\n    using difference_type   = _Diff;\r\n    using pointer           = _Pointer;\r\n    using reference         = _Reference;\r\n};\r\n\r\n#if _HAS_CXX23\r\ntemplate <_Integer_like _Int>\r\n_NODISCARD constexpr bool _Add_overflow(const _Int _Left, const _Int _Right, _Int& _Out) {\r\n#ifdef __clang__\r\n    if constexpr (integral<_Int>) {\r\n        return __builtin_add_overflow(_Left, _Right, &_Out);\r\n    } else\r\n#endif // defined(__clang__)\r\n    {\r\n        if constexpr (!_Signed_integer_like<_Int>) {\r\n            _Out = static_cast<_Int>(_Left + _Right);\r\n            return _Out < _Left || _Out < _Right;\r\n        } else {\r\n            using _UInt = _Make_unsigned_like_t<_Int>;\r\n            _Out        = static_cast<_Int>(static_cast<_UInt>(_Left) + static_cast<_UInt>(_Right));\r\n            return (_Left > 0 && _Right > 0 && _Out <= 0) || (_Left < 0 && _Right < 0 && _Out >= 0);\r\n        }\r\n    }\r\n}\r\n#endif // _HAS_CXX23\r\n\r\n#if _HAS_CXX17\r\n#if _HAS_CXX20\r\ntemplate <_Integer_like _Int>\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class _Int, enable_if_t<_Is_nonbool_integral<_Int>, int> = 0>\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n_NODISCARD constexpr bool _Mul_overflow(const _Int _Left, const _Int _Right, _Int& _Out) {\r\n#if defined(__clang__) && !_HAS_CXX20\r\n    return __builtin_mul_overflow(_Left, _Right, &_Out);\r\n#else // ^^^ defined(__clang__) && !_HAS_CXX20 / !defined(__clang__) || _HAS_CXX20 vvv\r\n#ifdef __clang__\r\n    if constexpr (is_integral_v<_Int>) {\r\n        return __builtin_mul_overflow(_Left, _Right, &_Out);\r\n    } else\r\n#endif // defined(__clang__)\r\n    {\r\n        if constexpr (static_cast<_Int>(-1) > static_cast<_Int>(0)) {\r\n            constexpr auto _UInt_max = _STD _Max_limit<_Int>();\r\n            const bool _Overflow     = _Left != 0 && _Right > _UInt_max / _Left;\r\n            if (!_Overflow) {\r\n                _Out = static_cast<_Int>(_Left * _Right);\r\n            }\r\n            return _Overflow;\r\n        } else {\r\n            // vvv Based on llvm::MulOverflow vvv\r\n            // https://github.com/llvm/llvm-project/blob/88e5206/llvm/include/llvm/Support/MathExtras.h#L725-L750\r\n            //===----------------------------------------------------------------------===//\r\n            //\r\n            // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n            // See https://llvm.org/LICENSE.txt for license information.\r\n            // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n            //\r\n            //===----------------------------------------------------------------------===//\r\n            using _UInt = _Make_unsigned_like_t<_Int>;\r\n            const _UInt _ULeft =\r\n                static_cast<_UInt>(_Left < 0 ? (0 - static_cast<_UInt>(_Left)) : static_cast<_UInt>(_Left));\r\n            const _UInt _URight =\r\n                static_cast<_UInt>(_Right < 0 ? (0 - static_cast<_UInt>(_Right)) : static_cast<_UInt>(_Right));\r\n            const _UInt _UResult = static_cast<_UInt>(_ULeft * _URight);\r\n\r\n            const bool _Negative = (_Left < 0) != (_Right < 0);\r\n            _Out                 = static_cast<_Int>(_Negative ? (0 - _UResult) : _UResult);\r\n            if (_ULeft == 0 || _URight == 0) {\r\n                return false;\r\n            }\r\n\r\n            constexpr auto _Int_max = static_cast<_UInt>(_STD _Max_limit<_Int>());\r\n            if (_Negative) {\r\n                return _ULeft > (_Int_max + _UInt{1}) / _URight;\r\n            } else {\r\n                return _ULeft > _Int_max / _URight;\r\n            }\r\n            // ^^^ Based on llvm::MulOverflow ^^^\r\n        }\r\n    }\r\n#endif // ^^^ !defined(__clang__) || _HAS_CXX20 ^^^\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\ntemplate <class _Ty>\r\nconstexpr bool _Equivalence_is_equality_impl = is_integral_v<_Ty> || is_pointer_v<_Ty>;\r\n\r\n// For ranges::less and ranges::greater, see N5032 [range.cmp]/9, [concept.totallyordered]/1.1, [cmp.concept]/1.2.\r\ntemplate <class _Compare, class _Key>\r\nconstexpr bool _Equivalence_is_equality =\r\n    _Is_any_of_v<_Compare, _RANGES less, _RANGES greater>\r\n    || (_Is_any_of_v<_Compare, less<>, less<_Key>, greater<>, greater<_Key>> && _Equivalence_is_equality_impl<_Key>);\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class _Elem>\r\nstruct _Digit_pair_table {\r\n    _Elem _Data[100][2];\r\n\r\n    constexpr explicit _Digit_pair_table() : _Data{} {\r\n        for (int _Idx = 0; _Idx != 100; ++_Idx) {\r\n            _Data[_Idx][0] = static_cast<_Elem>('0' + _Idx / 10);\r\n            _Data[_Idx][1] = static_cast<_Elem>('0' + _Idx % 10);\r\n        }\r\n    }\r\n\r\n    _Digit_pair_table(const _Digit_pair_table&)            = delete;\r\n    _Digit_pair_table& operator=(const _Digit_pair_table&) = delete;\r\n};\r\n\r\ntemplate <class _Elem>\r\nconstexpr _Digit_pair_table<_Elem> _Digit_pairs{};\r\n_STD_END\r\n\r\n// TRANSITION, non-_Ugly attribute tokens\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"lifetimebound\")\r\n#pragma pop_macro(\"intrinsic\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _XUTILITY_\r\n"
  },
  {
    "path": "stl/inc/ymath.h",
    "content": "// ymath.h internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _YMATH\r\n#define _YMATH\r\n#include <yvals.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n_CRTIMP2_PURE double __CLRCALL_PURE_OR_CDECL _Cosh(double, double) noexcept;\r\n_CRTIMP2_PURE double __CLRCALL_PURE_OR_CDECL _Sinh(double, double) noexcept;\r\n_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _Exp(double*, double, short) noexcept;\r\n\r\n_CRTIMP2_PURE float __CLRCALL_PURE_OR_CDECL _FCosh(float, float) noexcept;\r\n_CRTIMP2_PURE float __CLRCALL_PURE_OR_CDECL _FSinh(float, float) noexcept;\r\n_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _FExp(float*, float, short) noexcept;\r\n\r\n_CRTIMP2_PURE long double __CLRCALL_PURE_OR_CDECL _LCosh(long double, long double) noexcept;\r\n_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _LDtest(long double*) noexcept;\r\n_CRTIMP2_PURE long double __CLRCALL_PURE_OR_CDECL _LSinh(long double, long double) noexcept;\r\n_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _LExp(long double*, long double, short) noexcept;\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _YMATH\r\n"
  },
  {
    "path": "stl/inc/yvals.h",
    "content": "// yvals.h internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// This header is used to compile the import library\r\n// (via locale0_implib.cpp => locale0.cpp => xfacet => yvals.h and regex.cpp => awint.hpp => yvals.h).\r\n// MAJOR LIMITATIONS apply to what can be included here!\r\n// Before editing this file, read: /docs/import_library.md\r\n\r\n#ifndef _YVALS\r\n#define _YVALS\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#ifdef _ENFORCE_ONLY_CORE_HEADERS\r\n_EMIT_STL_ERROR(\r\n    STL1005, \"Tried to include a non-core C++ Standard Library header file with _ENFORCE_ONLY_CORE_HEADERS defined.\");\r\n#endif // defined(_ENFORCE_ONLY_CORE_HEADERS)\r\n\r\n#include <crtdbg.h>\r\n#include <crtdefs.h>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n#if defined(MRTDLL) && defined(_CRTBLD)\r\n// process-global is the default for code built with /clr or /clr:oldSyntax.\r\n// appdomain-global is the default for code built with /clr:pure.\r\n// Code in MSVCM is built with /clr, but is used by user code built with /clr:pure\r\n// so it must conform to the expectations of /clr:pure clients.\r\n// Use __PURE_APPDOMAIN_GLOBAL when a global needs to be appdomain-global for pure\r\n// clients and process-global for mixed clients.\r\n#define __PURE_APPDOMAIN_GLOBAL __declspec(appdomain)\r\n#else\r\n#define __PURE_APPDOMAIN_GLOBAL\r\n#endif\r\n\r\n#ifndef _CRT_MSVCP_CURRENT\r\n#ifdef _CRT_WINDOWS\r\n// Windows\r\n#ifdef _DEBUG\r\n#define _CRT_MSVCP_CURRENT \"msvcpd_win.dll\"\r\n#else\r\n#define _CRT_MSVCP_CURRENT \"msvcp_win.dll\"\r\n#endif\r\n#else // ^^^ defined(_CRT_WINDOWS) / !defined(_CRT_WINDOWS) vvv\r\n// Visual Studio\r\n#ifdef _DEBUG\r\n#define _CRT_MSVCP_CURRENT \"msvcp140d.dll\"\r\n#else\r\n#define _CRT_MSVCP_CURRENT \"msvcp140.dll\"\r\n#endif\r\n#endif // ^^^ !defined(_CRT_WINDOWS) ^^^\r\n#endif // !defined(_CRT_MSVCP_CURRENT)\r\n\r\n#ifdef _ITERATOR_DEBUG_LEVEL // A. _ITERATOR_DEBUG_LEVEL is already defined.\r\n\r\n// A1. Validate _ITERATOR_DEBUG_LEVEL.\r\n#if _ITERATOR_DEBUG_LEVEL > 2 && defined(_DEBUG)\r\n#error _ITERATOR_DEBUG_LEVEL > 2 is not supported in debug mode.\r\n#elif _ITERATOR_DEBUG_LEVEL > 1 && !defined(_DEBUG)\r\n#error _ITERATOR_DEBUG_LEVEL > 1 is not supported in release mode.\r\n#endif\r\n\r\n// A2. Inspect _HAS_ITERATOR_DEBUGGING.\r\n#ifdef _HAS_ITERATOR_DEBUGGING // A2i. _HAS_ITERATOR_DEBUGGING is already defined, validate it.\r\n#if _ITERATOR_DEBUG_LEVEL == 2 && _HAS_ITERATOR_DEBUGGING != 1\r\n#error _ITERATOR_DEBUG_LEVEL == 2 must imply _HAS_ITERATOR_DEBUGGING == 1.\r\n#elif _ITERATOR_DEBUG_LEVEL < 2 && _HAS_ITERATOR_DEBUGGING != 0\r\n#error _ITERATOR_DEBUG_LEVEL < 2 must imply _HAS_ITERATOR_DEBUGGING == 0.\r\n#endif\r\n#else // A2ii. _HAS_ITERATOR_DEBUGGING is not yet defined, derive it.\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n#define _HAS_ITERATOR_DEBUGGING 1\r\n#else\r\n#define _HAS_ITERATOR_DEBUGGING 0\r\n#endif\r\n#endif // ^^^ !defined(_HAS_ITERATOR_DEBUGGING) ^^^\r\n\r\n// A3. Inspect _SECURE_SCL.\r\n#ifdef _SECURE_SCL // A3i. _SECURE_SCL is already defined, validate it.\r\n#if _ITERATOR_DEBUG_LEVEL > 0 && _SECURE_SCL != 1\r\n#error _ITERATOR_DEBUG_LEVEL > 0 must imply _SECURE_SCL == 1.\r\n#elif _ITERATOR_DEBUG_LEVEL == 0 && _SECURE_SCL != 0\r\n#error _ITERATOR_DEBUG_LEVEL == 0 must imply _SECURE_SCL == 0.\r\n#endif\r\n#else // A3ii. _SECURE_SCL is not yet defined, derive it.\r\n#if _ITERATOR_DEBUG_LEVEL > 0\r\n#define _SECURE_SCL 1\r\n#else\r\n#define _SECURE_SCL 0\r\n#endif\r\n#endif // ^^^ !defined(_SECURE_SCL) ^^^\r\n\r\n#else // B. _ITERATOR_DEBUG_LEVEL is not yet defined.\r\n\r\n// B1. Inspect _HAS_ITERATOR_DEBUGGING.\r\n#ifdef _HAS_ITERATOR_DEBUGGING // B1i. _HAS_ITERATOR_DEBUGGING is already defined, validate it.\r\n#if _HAS_ITERATOR_DEBUGGING > 1\r\n#error _HAS_ITERATOR_DEBUGGING must be either 0 or 1.\r\n#elif _HAS_ITERATOR_DEBUGGING == 1 && !defined(_DEBUG)\r\n#error _HAS_ITERATOR_DEBUGGING == 1 is not supported in release mode.\r\n#endif\r\n#else // B1ii. _HAS_ITERATOR_DEBUGGING is not yet defined, default it.\r\n#ifdef _DEBUG\r\n#define _HAS_ITERATOR_DEBUGGING 1\r\n#else\r\n#define _HAS_ITERATOR_DEBUGGING 0\r\n#endif\r\n#endif // ^^^ !defined(_HAS_ITERATOR_DEBUGGING) ^^^\r\n\r\n// B2. Inspect _SECURE_SCL.\r\n#ifdef _SECURE_SCL // B2i. _SECURE_SCL is already defined, validate it.\r\n#if _SECURE_SCL > 1\r\n#error _SECURE_SCL must be either 0 or 1.\r\n#endif\r\n#else // B2ii. _SECURE_SCL is not yet defined, default it.\r\n#if _HAS_ITERATOR_DEBUGGING == 1\r\n#define _SECURE_SCL 1\r\n#else\r\n#define _SECURE_SCL 0\r\n#endif\r\n#endif // ^^^ !defined(_SECURE_SCL) ^^^\r\n\r\n// B3. Derive _ITERATOR_DEBUG_LEVEL.\r\n#if _HAS_ITERATOR_DEBUGGING\r\n#define _ITERATOR_DEBUG_LEVEL 2\r\n#elif _SECURE_SCL\r\n#define _ITERATOR_DEBUG_LEVEL 1\r\n#else // ^^^ _SECURE_SCL / !_SECURE_SCL vvv\r\n#define _ITERATOR_DEBUG_LEVEL 0\r\n#endif // ^^^ !_HAS_ITERATOR_DEBUGGING && !_SECURE_SCL ^^^\r\n\r\n#endif // ^^^ !defined(_ITERATOR_DEBUG_LEVEL) ^^^\r\n\r\n#ifndef _ALLOW_MSC_VER_MISMATCH\r\n#pragma detect_mismatch(\"_MSC_VER\", \"1900\")\r\n#endif // !defined(_ALLOW_MSC_VER_MISMATCH)\r\n\r\n#ifndef _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH\r\n#pragma detect_mismatch(\"_ITERATOR_DEBUG_LEVEL\", _STL_STRINGIZE(_ITERATOR_DEBUG_LEVEL))\r\n#endif // !defined(_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH)\r\n\r\n#ifndef _ALLOW_RUNTIME_LIBRARY_MISMATCH\r\n#if !defined(_DLL) && !defined(_DEBUG)\r\n#pragma detect_mismatch(\"RuntimeLibrary\", \"MT_StaticRelease\")\r\n#elif !defined(_DLL) && defined(_DEBUG)\r\n#pragma detect_mismatch(\"RuntimeLibrary\", \"MTd_StaticDebug\")\r\n#elif defined(_DLL) && !defined(_DEBUG)\r\n#pragma detect_mismatch(\"RuntimeLibrary\", \"MD_DynamicRelease\")\r\n#elif defined(_DLL) && defined(_DEBUG)\r\n#pragma detect_mismatch(\"RuntimeLibrary\", \"MDd_DynamicDebug\")\r\n#endif // defined(_DLL) etc.\r\n#endif // !defined(_ALLOW_RUNTIME_LIBRARY_MISMATCH)\r\n\r\n#ifdef _CONTAINER_DEBUG_LEVEL\r\n_EMIT_STL_ERROR(STL1006, \"_CONTAINER_DEBUG_LEVEL has been removed. It was superseded by _MSVC_STL_HARDENING.\");\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING\r\n#define _MSVC_STL_HARDENING 0\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_ARRAY\r\n#define _MSVC_STL_HARDENING_ARRAY _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_BASIC_STACKTRACE\r\n#define _MSVC_STL_HARDENING_BASIC_STACKTRACE _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_BASIC_STRING\r\n#define _MSVC_STL_HARDENING_BASIC_STRING _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_BASIC_STRING_VIEW\r\n#define _MSVC_STL_HARDENING_BASIC_STRING_VIEW _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_BITSET\r\n#define _MSVC_STL_HARDENING_BITSET _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_COMMON_ITERATOR\r\n#define _MSVC_STL_HARDENING_COMMON_ITERATOR _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_COUNTED_ITERATOR\r\n#define _MSVC_STL_HARDENING_COUNTED_ITERATOR _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_DEQUE\r\n#define _MSVC_STL_HARDENING_DEQUE _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_EXPECTED\r\n#define _MSVC_STL_HARDENING_EXPECTED _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_FORWARD_LIST\r\n#define _MSVC_STL_HARDENING_FORWARD_LIST _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_LIST\r\n#define _MSVC_STL_HARDENING_LIST _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_MDSPAN\r\n#define _MSVC_STL_HARDENING_MDSPAN _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_OPTIONAL\r\n#define _MSVC_STL_HARDENING_OPTIONAL _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_RANGES_VIEW_INTERFACE\r\n#define _MSVC_STL_HARDENING_RANGES_VIEW_INTERFACE _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_SHARED_PTR_ARRAY\r\n#define _MSVC_STL_HARDENING_SHARED_PTR_ARRAY _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_SPAN\r\n#define _MSVC_STL_HARDENING_SPAN _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_VALARRAY\r\n#define _MSVC_STL_HARDENING_VALARRAY _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifndef _MSVC_STL_HARDENING_VECTOR\r\n#define _MSVC_STL_HARDENING_VECTOR _MSVC_STL_HARDENING\r\n#endif\r\n\r\n#ifdef _STL_CRT_SECURE_INVALID_PARAMETER\r\n_EMIT_STL_ERROR(STL1007, \"_STL_CRT_SECURE_INVALID_PARAMETER has been removed. \"\r\n                         \"It was superseded by _MSVC_STL_DOOM_FUNCTION.\");\r\n#endif\r\n\r\n#ifdef _STL_CALL_ABORT_INSTEAD_OF_INVALID_PARAMETER\r\n_EMIT_STL_ERROR(STL1008, \"_STL_CALL_ABORT_INSTEAD_OF_INVALID_PARAMETER has been removed. \"\r\n                         \"It was superseded by _MSVC_STL_USE_ABORT_AS_DOOM_FUNCTION.\");\r\n#endif\r\n\r\n// The STL's \"doom function\" can be replaced. Notes:\r\n// * It must not throw. (Attempting to throw would slam into noexcept.)\r\n// * Common case: If it doesn't return, it should be marked as `[[noreturn]]`.\r\n// * Uncommon case: If it returns, the STL will attempt to \"continue on error\", behaving as if no checking was done.\r\n//   + For example, a legacy codebase with a long startup time might want to log errors for investigation later.\r\n//   + WARNING: If you replace the STL's \"doom function\" to \"continue on error\", you do so at your own risk!\r\n//     After the STL has detected a precondition violation, undefined behavior is imminent. The STL will support\r\n//     \"continue on error\" by proceeding to do what it would have done anyways (instead of falling off the end of\r\n//     a non-void function, etc.), but it will not attempt to replace undefined behavior with implementation-defined\r\n//     behavior. (For example, we will not transform `pop_back()` of an empty `vector` to be a no-op.)\r\n#ifndef _MSVC_STL_DOOM_FUNCTION\r\n#ifdef _MSVC_STL_USE_ABORT_AS_DOOM_FUNCTION // The user wants to use abort():\r\n#define _MSVC_STL_DOOM_FUNCTION(mesg) _CSTD abort()\r\n#elif defined(__clang__) // Use the Clang intrinsic:\r\n#define _MSVC_STL_DOOM_FUNCTION(mesg) __builtin_verbose_trap(\"MSVC STL error\", mesg)\r\n#elif defined(_M_CEE) // TRANSITION, VSO-2457624 (/clr silent bad codegen for __fastfail); /clr:pure lacks __fastfail\r\n#define _MSVC_STL_DOOM_FUNCTION(mesg) ::_invoke_watson(nullptr, nullptr, nullptr, 0, 0)\r\n#else // Use the MSVC __fastfail intrinsic:\r\nextern \"C\" __declspec(noreturn) void __fastfail(unsigned int); // declared by <intrin.h>\r\n#define _MSVC_STL_DOOM_FUNCTION(mesg)                                                  \\\r\n    __fastfail(5); /* __fastfail(FAST_FAIL_INVALID_ARG), value defined by <winnt.h> */ \\\r\n    _STL_UNREACHABLE /* TRANSITION, DevCom-10914110 */\r\n#endif // choose \"doom function\"\r\n#endif // ^^^ !defined(_MSVC_STL_DOOM_FUNCTION) ^^^\r\n\r\n#define _STL_REPORT_ERROR(mesg) \\\r\n    _RPTF0(_CRT_ASSERT, mesg);  \\\r\n    _MSVC_STL_DOOM_FUNCTION(mesg)\r\n\r\n#define _STL_VERIFY(cond, mesg)  \\\r\n    if (!(cond)) {               \\\r\n        _STL_REPORT_ERROR(mesg); \\\r\n    }                            \\\r\n    _Analysis_assume_(cond)\r\n\r\n#ifdef _DEBUG\r\n#define _STL_ASSERT(cond, mesg) _STL_VERIFY(cond, mesg)\r\n#else // ^^^ defined(_DEBUG) / !defined(_DEBUG) vvv\r\n#define _STL_ASSERT(cond, mesg) _Analysis_assume_(cond)\r\n#endif // ^^^ !defined(_DEBUG) ^^^\r\n\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n#define _STL_INTERNAL_CHECK(...) _STL_VERIFY(__VA_ARGS__, \"STL internal check: \" #__VA_ARGS__)\r\n#else // ^^^ defined(_ENABLE_STL_INTERNAL_CHECK) / !defined(_ENABLE_STL_INTERNAL_CHECK) vvv\r\n#define _STL_INTERNAL_CHECK(...) _Analysis_assume_(__VA_ARGS__)\r\n#endif // ^^^ !defined(_ENABLE_STL_INTERNAL_CHECK) ^^^\r\n\r\n#ifndef _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n#define _MSVC_STL_DESTRUCTOR_TOMBSTONES 0\r\n#endif\r\n\r\n#ifndef _MSVC_STL_UINTPTR_TOMBSTONE_VALUE\r\n#define _MSVC_STL_UINTPTR_TOMBSTONE_VALUE uintptr_t{19937}\r\n#endif\r\n\r\n#include <use_ansi.h>\r\n\r\n#ifdef _STATIC_CPPLIB\r\n#ifndef _DISABLE_DEPRECATE_STATIC_CPPLIB\r\n#ifdef _DLL\r\n_EMIT_STL_WARNING(STL4000, \"_STATIC_CPPLIB is deprecated and will be REMOVED.\");\r\n#endif\r\n#ifdef _M_CEE_MIXED\r\n#error _STATIC_CPPLIB is not supported while building with /clr\r\n#endif\r\n#endif // !defined(_DISABLE_DEPRECATE_STATIC_CPPLIB)\r\n#ifdef _M_CEE_PURE\r\n#error _STATIC_CPPLIB cannot be used with /clr:pure (the resulting assembly would not be pure)\r\n#endif\r\n#endif // defined(_STATIC_CPPLIB)\r\n\r\n#if defined(_M_CEE_PURE) && !defined(_SILENCE_CLR_PURE_DEPRECATION_WARNING)\r\n_EMIT_STL_WARNING(STL4001, \"/clr:pure is deprecated and will be REMOVED.\");\r\n#endif\r\n\r\n#ifndef _MRTIMP2_PURE\r\n#ifdef _M_CEE_PURE\r\n#define _MRTIMP2_PURE\r\n#else\r\n#define _MRTIMP2_PURE _MRTIMP2\r\n#endif\r\n#endif // !defined(_MRTIMP2_PURE)\r\n\r\n#if defined(_DLL) && !defined(_STATIC_CPPLIB) && !defined(_M_CEE_PURE)\r\n#define _DLL_CPPLIB\r\n#endif\r\n\r\n#ifndef _CRTIMP2_PURE\r\n#ifdef _M_CEE_PURE\r\n#define _CRTIMP2_PURE\r\n#else\r\n#define _CRTIMP2_PURE _CRTIMP2\r\n#endif\r\n#endif // !defined(_CRTIMP2_PURE)\r\n\r\n#ifndef _CRTIMP2_IMPORT\r\n#if defined(CRTDLL2) && defined(_CRTBLD)\r\n#define _CRTIMP2_IMPORT __declspec(dllexport)\r\n#elif defined(_DLL) && !defined(_STATIC_CPPLIB)\r\n#define _CRTIMP2_IMPORT __declspec(dllimport)\r\n#else // ^^^ defined(_DLL) && !defined(_STATIC_CPPLIB) / !defined(_DLL) || defined(_STATIC_CPPLIB) vvv\r\n#define _CRTIMP2_IMPORT\r\n#endif // ^^^ !defined(_DLL) || defined(_STATIC_CPPLIB) ^^^\r\n#endif // !defined(_CRTIMP2_IMPORT)\r\n\r\n#ifndef _CRTIMP2_PURE_IMPORT\r\n#ifdef _M_CEE_PURE\r\n#define _CRTIMP2_PURE_IMPORT\r\n#else\r\n#define _CRTIMP2_PURE_IMPORT _CRTIMP2_IMPORT\r\n#endif\r\n#endif // !defined(_CRTIMP2_PURE_IMPORT)\r\n\r\n#ifndef _CRTIMP2_PURE_IMPORT_UNLESS_CODECVT_ID_SATELLITE\r\n#ifdef _BUILDING_SATELLITE_CODECVT_IDS\r\n#define _CRTIMP2_PURE_IMPORT_UNLESS_CODECVT_ID_SATELLITE\r\n#else\r\n#define _CRTIMP2_PURE_IMPORT_UNLESS_CODECVT_ID_SATELLITE _CRTIMP2_PURE_IMPORT\r\n#endif\r\n#endif // !defined(_CRTIMP2_PURE_IMPORT_UNLESS_CODECVT_ID_SATELLITE)\r\n\r\n#ifndef _CRTDATA2_IMPORT\r\n#if defined(MRTDLL) && defined(_CRTBLD)\r\n#define _CRTDATA2_IMPORT\r\n#else\r\n#define _CRTDATA2_IMPORT _CRTIMP2_IMPORT\r\n#endif\r\n#endif // !defined(_CRTDATA2_IMPORT)\r\n\r\n#define _LOCK_LOCALE 0\r\n#define _LOCK_STREAM 2\r\n#define _LOCK_DEBUG  3\r\n\r\n_STD_BEGIN\r\nenum _Uninitialized { // tag for suppressing initialization\r\n    _Noinit\r\n};\r\n\r\nextern \"C++\" class _CRTIMP2_PURE_IMPORT _Lockit { // lock while object in existence -- MUST NEST\r\npublic:\r\n#ifdef _M_CEE_PURE\r\n    __CLR_OR_THIS_CALL _Lockit() noexcept : _Locktype(0) {\r\n        _Lockit_ctor(this);\r\n    }\r\n\r\n    explicit __CLR_OR_THIS_CALL _Lockit(int _Kind) noexcept { // set the lock\r\n        _Lockit_ctor(this, _Kind);\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ~_Lockit() noexcept { // clear the lock\r\n        _Lockit_dtor(this);\r\n    }\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n    __thiscall _Lockit() noexcept;\r\n    explicit __thiscall _Lockit(int) noexcept; // set the lock\r\n    __thiscall ~_Lockit() noexcept; // clear the lock\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\n    static void __cdecl _Lockit_ctor(int) noexcept;\r\n    static void __cdecl _Lockit_dtor(int) noexcept;\r\n\r\nprivate:\r\n    static void __cdecl _Lockit_ctor(_Lockit*) noexcept;\r\n    static void __cdecl _Lockit_ctor(_Lockit*, int) noexcept;\r\n    static void __cdecl _Lockit_dtor(_Lockit*) noexcept;\r\n\r\npublic:\r\n    __CLR_OR_THIS_CALL _Lockit(const _Lockit&)            = delete;\r\n    _Lockit& __CLR_OR_THIS_CALL operator=(const _Lockit&) = delete;\r\n\r\nprivate:\r\n    int _Locktype;\r\n};\r\n\r\n#ifdef _M_CEE_PURE\r\nclass _CRTIMP2_PURE_IMPORT _EmptyLockit { // empty lock class used for bin compat\r\nprivate:\r\n    int _Locktype;\r\n};\r\n#endif // defined(_M_CEE_PURE)\r\n\r\n#ifdef _M_CEE\r\n#ifndef _PREPARE_CONSTRAINED_REGIONS\r\n#ifdef _M_CEE_PURE\r\n#define _PREPARE_CONSTRAINED_REGIONS 1\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n#define _PREPARE_CONSTRAINED_REGIONS 0\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n#endif // !defined(_PREPARE_CONSTRAINED_REGIONS)\r\n\r\n// Note: PrepareConstrainedRegions is not supported in .NET versions 6.0 and later. /clr:pure is\r\n// also not supported in /clr:netcore mode (which targets .NET 8.0 and later), so\r\n// _PREPARE_CONSTRAINED_REGIONS == 0 in that case.\r\n\r\n#if _PREPARE_CONSTRAINED_REGIONS\r\n#define _BEGIN_LOCK(_Kind)                                                                  \\\r\n    {                                                                                       \\\r\n        bool _MustReleaseLock = false;                                                      \\\r\n        int _LockKind         = _Kind;                                                      \\\r\n        System::Runtime::CompilerServices::RuntimeHelpers::PrepareConstrainedRegions();     \\\r\n        try {                                                                               \\\r\n            System::Runtime::CompilerServices::RuntimeHelpers::PrepareConstrainedRegions(); \\\r\n            try {                                                                           \\\r\n            } finally {                                                                     \\\r\n                _STD _Lockit::_Lockit_ctor(_LockKind);                                      \\\r\n                _MustReleaseLock = true;                                                    \\\r\n            }\r\n\r\n#define _END_LOCK()                                \\\r\n    }                                              \\\r\n    finally {                                      \\\r\n        if (_MustReleaseLock) {                    \\\r\n            _STD _Lockit::_Lockit_dtor(_LockKind); \\\r\n        }                                          \\\r\n    }                                              \\\r\n    }\r\n\r\n#else // ^^^ _PREPARE_CONSTRAINED_REGIONS / !_PREPARE_CONSTRAINED_REGIONS vvv\r\n#define _BEGIN_LOCK(_Kind) \\\r\n    {                      \\\r\n        _STD _Lockit _Lock(_Kind);\r\n\r\n#define _END_LOCK() }\r\n\r\n#endif // ^^^ !_PREPARE_CONSTRAINED_REGIONS ^^^\r\n\r\n#define _BEGIN_LOCINFO(_VarName) \\\r\n    _BEGIN_LOCK(_LOCK_LOCALE)    \\\r\n    _Locinfo _VarName;\r\n\r\n#define _END_LOCINFO() _END_LOCK()\r\n\r\n#else // ^^^ defined(_M_CEE) / !defined(_M_CEE) vvv\r\n#define _BEGIN_LOCK(_Kind) \\\r\n    {                      \\\r\n        _STD _Lockit _Lock(_Kind);\r\n\r\n#define _END_LOCK() }\r\n\r\n#define _BEGIN_LOCINFO(_VarName) \\\r\n    {                            \\\r\n        _Locinfo _VarName;\r\n\r\n#define _END_LOCINFO() }\r\n#endif // ^^^ !defined(_M_CEE) ^^^\r\n\r\n#if _HAS_EXCEPTIONS\r\n#define _TRY_BEGIN try {\r\n#define _CATCH(x) \\\r\n    }             \\\r\n    catch (x) {\r\n#define _CATCH_ALL \\\r\n    }              \\\r\n    catch (...) {\r\n#define _CATCH_END }\r\n\r\n#define _RERAISE    throw\r\n#define _THROW(...) throw(__VA_ARGS__)\r\n\r\n#else // ^^^ _HAS_EXCEPTIONS / !_HAS_EXCEPTIONS vvv\r\n#define _TRY_BEGIN \\\r\n    {              \\\r\n        if (1) {\r\n#define _CATCH(x) \\\r\n    }             \\\r\n    else if (0) {\r\n#define _CATCH_ALL \\\r\n    }              \\\r\n    else if (0) {\r\n#define _CATCH_END \\\r\n    }              \\\r\n    }\r\n\r\n#define _RAISE(x) _MSVC_STL_DOOM_FUNCTION(\"_RAISE was called with !_HAS_EXCEPTIONS\")\r\n\r\n#define _RERAISE\r\n#define _THROW(...) (__VA_ARGS__)._Raise()\r\n#endif // ^^^ !_HAS_EXCEPTIONS ^^^\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _YVALS\r\n"
  },
  {
    "path": "stl/inc/yvals_core.h",
    "content": "// yvals_core.h internal header (core)\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _YVALS_CORE_H_\r\n#define _YVALS_CORE_H_\r\n#ifndef _STL_COMPILER_PREPROCESSOR\r\n// All STL headers avoid exposing their contents when included by various\r\n// non-C++-compiler tools to avoid breaking builds when we use newer language\r\n// features in the headers than such tools understand.\r\n#if defined(RC_INVOKED) || defined(Q_MOC_RUN) || defined(__midl)\r\n#define _STL_COMPILER_PREPROCESSOR 0\r\n#else\r\n#define _STL_COMPILER_PREPROCESSOR 1\r\n#endif\r\n#endif // !defined(_STL_COMPILER_PREPROCESSOR)\r\n\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n// This does not use `_EMIT_STL_ERROR`, as it is checking the language itself.\r\n#ifndef __cplusplus\r\n#error error STL1003: Unexpected compiler, expected C++ compiler.\r\n#endif // !defined(__cplusplus)\r\n\r\n// Implemented unconditionally:\r\n// N3911 void_t\r\n// N4089 Safe Conversions In unique_ptr<T[]>\r\n// N4169 invoke()\r\n// N4258 noexcept Cleanups\r\n// N4259 uncaught_exceptions()\r\n// N4277 Trivially Copyable reference_wrapper\r\n// N4279 insert_or_assign()/try_emplace() For map/unordered_map\r\n// N4280 size(), empty(), data()\r\n// N4366 Precisely Constraining unique_ptr Assignment\r\n// N4387 Improving pair And tuple\r\n// N4389 bool_constant\r\n// N4508 shared_mutex (Untimed)\r\n// N4510 Supporting Incomplete Types In vector/list/forward_list\r\n// P0006R0 Variable Templates For Type Traits (is_same_v, etc.)\r\n// P0007R1 as_const()\r\n// P0013R1 Logical Operator Type Traits (conjunction, etc.)\r\n// P0033R1 Rewording enable_shared_from_this\r\n// P0063R3 C11 Standard Library\r\n// P0074R0 owner_less<>\r\n// P0092R1 <chrono> floor(), ceil(), round(), abs()\r\n// P0340R3 SFINAE-Friendly underlying_type\r\n// P0414R2 shared_ptr<T[]>, shared_ptr<T[N]>\r\n// P0418R2 atomic compare_exchange memory_order Requirements\r\n// P0435R1 Overhauling common_type\r\n// P0497R0 Fixing shared_ptr For Arrays\r\n// P0513R0 Poisoning hash\r\n// P0516R0 Marking shared_future Copying As noexcept\r\n// P0517R0 Constructing future_error From future_errc\r\n// P0548R1 Tweaking common_type And duration\r\n// P0558R1 Resolving atomic<T> Named Base Class Inconsistencies\r\n// P0599R1 noexcept hash\r\n// P0738R2 istream_iterator Cleanup\r\n// P0771R1 noexcept For std::function's Move Constructor\r\n// P0777R1 Avoiding Unnecessary decay\r\n// P0809R0 Comparing Unordered Containers\r\n// P0883R2 Fixing Atomic Initialization\r\n// P0935R0 Eradicating Unnecessarily Explicit Default Constructors\r\n// P0941R2 Feature-Test Macros\r\n// P0952R2 A New Specification For generate_canonical()\r\n// P0972R0 noexcept For <chrono> zero(), min(), max()\r\n// P1065R2 constexpr INVOKE\r\n//     (the std::invoke function only; other components like bind and reference_wrapper are C++20 only)\r\n// P1164R1 Making create_directory() Intuitive\r\n// P1165R1 Consistently Propagating Stateful Allocators In basic_string's operator+()\r\n// P1902R1 Missing Feature-Test Macros 2017-2019\r\n// P2013R5 Freestanding Language: Optional ::operator new\r\n//     (no change is needed for our hosted implementation)\r\n// P2198R7 Freestanding Feature-Test Macros And Implementation-Defined Extensions\r\n//     (except for __cpp_lib_freestanding_ranges)\r\n// P2338R4 Freestanding Library: Character Primitives And The C Library\r\n//     (except for __cpp_lib_freestanding_charconv)\r\n// P2401R0 Conditional noexcept For exchange()\r\n// P2407R5 Freestanding Library: Partial Classes\r\n//     (__cpp_lib_freestanding_algorithm and __cpp_lib_freestanding_array only)\r\n// P2937R0 Freestanding Library: Remove strtok\r\n// P2968R2 Make std::ignore A First-Class Object\r\n// P3016R6 Resolve Inconsistencies In begin/end For valarray And Braced Initializer Lists\r\n// P3223R2 Making istream::ignore() Less Surprising\r\n// P3323R1 Forbid atomic<cv T>, Specify atomic_ref<cv T>\r\n//     (for atomic<cv T>)\r\n// P3503R3 Make Type-Erased Allocator Use In promise And packaged_task Consistent\r\n// P3612R1 Harmonize Proxy-Reference Operations\r\n//     (deprecation controlled by _HAS_CXX26)\r\n\r\n// _HAS_CXX17 controls:\r\n// N4190 Removing auto_ptr, random_shuffle(), And Old <functional> Stuff\r\n// P0003R5 Removing Dynamic Exception Specifications\r\n// P0004R1 Removing Deprecated Iostreams Aliases\r\n// P0005R4 not_fn()\r\n// P0024R2 Parallel Algorithms\r\n// P0025R1 clamp()\r\n// P0030R1 hypot(x, y, z)\r\n// P0031R0 constexpr For <array> (Again) And <iterator>\r\n// P0032R3 Homogeneous Interface For variant/any/optional\r\n// P0040R3 Extending Memory Management Tools\r\n// P0067R5 Elementary String Conversions\r\n// P0083R3 Splicing Maps And Sets\r\n// P0084R2 Emplace Return Type\r\n// P0088R3 <variant>\r\n// P0137R1 launder()\r\n// P0152R1 atomic::is_always_lock_free\r\n// P0154R1 hardware_destructive_interference_size, etc.\r\n// P0156R2 scoped_lock\r\n// P0163R0 shared_ptr::weak_type\r\n// P0174R2 Deprecating Vestigial Library Parts\r\n// P0185R1 is_swappable, is_nothrow_swappable\r\n// P0209R2 make_from_tuple()\r\n// P0218R1 <filesystem>\r\n// P0220R1 <any>, <memory_resource>, <optional>, <string_view>, apply(), sample(), Boyer-Moore search()\r\n// P0226R1 Mathematical Special Functions\r\n// P0253R1 Fixing Searcher Return Types\r\n// P0254R2 Integrating string_view And std::string\r\n// P0258R2 has_unique_object_representations\r\n// P0272R1 Non-const basic_string::data()\r\n// P0295R0 gcd(), lcm()\r\n// P0298R3 std::byte\r\n// P0302R1 Removing Allocator Support In std::function\r\n// P0307R2 Making Optional Greater Equal Again\r\n// P0336R1 Renaming Parallel Execution Policies\r\n// P0337R0 Deleting polymorphic_allocator Assignment\r\n// P0358R1 Fixes For not_fn()\r\n// P0393R3 Making Variant Greater Equal\r\n// P0394R4 Parallel Algorithms Should terminate() For Exceptions\r\n// P0403R1 UDLs For <string_view> (\"meow\"sv, etc.)\r\n// P0426R1 constexpr For char_traits\r\n// P0433R2 Deduction Guides For The STL\r\n// P0452R1 Unifying <numeric> Parallel Algorithms\r\n// P0472R3 Put monostate In <utility>\r\n// P0504R0 Revisiting in_place_t/in_place_type_t<T>/in_place_index_t<I>\r\n// P0505R0 constexpr For <chrono> (Again)\r\n// P0508R0 Clarifying insert_return_type\r\n// P0510R0 Rejecting variants Of Nothing, Arrays, References, And Incomplete Types\r\n// P0521R0 Deprecating shared_ptr::unique()\r\n// P0602R4 Propagating Copy/Move Triviality In variant/optional\r\n// P0604R0 invoke_result, is_invocable, is_nothrow_invocable\r\n// P0607R0 Inline Variables For The STL\r\n// P0608R3 Improving variant's Converting Constructor/Assignment\r\n// P0618R0 Deprecating <codecvt>\r\n// P0682R1 Repairing Elementary String Conversions\r\n// P0739R0 Improving Class Template Argument Deduction For The STL\r\n// P0858R0 Constexpr Iterator Requirements\r\n// P1169R4 static operator()\r\n// P1518R2 Stop Overconstraining Allocators In Container Deduction Guides\r\n// P2162R2 Inheriting From variant\r\n// P2251R1 Require span And basic_string_view To Be Trivially Copyable\r\n//     (basic_string_view always provides this behavior)\r\n// P2338R4 Freestanding Library: Character Primitives And The C Library\r\n//     (including __cpp_lib_freestanding_charconv)\r\n// P2407R5 Freestanding Library: Partial Classes\r\n//     (including __cpp_lib_freestanding_optional, __cpp_lib_freestanding_string_view, and\r\n//     __cpp_lib_freestanding_variant)\r\n// P2517R1 Conditional noexcept For apply()\r\n// P2875R4 Undeprecate polymorphic_allocator::destroy\r\n// LWG-2385 function::assign allocator argument doesn't make sense\r\n// Enforcement of matching allocator value_types\r\n\r\n// Implemented when char8_t is available (C++14/17 with /Zc:char8_t, C++20 without /Zc:char8_t-):\r\n// P0482R6 Library Support For char8_t\r\n//     (mbrtoc8 and c8rtomb not yet implemented, see GH-2207)\r\n\r\n// _HAS_CXX20 controls:\r\n// P0019R8 atomic_ref\r\n// P0020R6 atomic<float>, atomic<double>, atomic<long double>\r\n// P0053R7 <syncstream>\r\n// P0122R7 <span>\r\n// P0202R3 constexpr For <algorithm> And exchange()\r\n// P0318R1 unwrap_reference, unwrap_ref_decay\r\n// P0325R4 to_array()\r\n// P0339R6 polymorphic_allocator<>\r\n// P0355R7 <chrono> Calendars And Time Zones\r\n// P0356R5 bind_front()\r\n// P0357R3 Supporting Incomplete Types In reference_wrapper\r\n// P0408R7 Efficient Access To basic_stringbuf's Buffer\r\n// P0415R1 constexpr For <complex> (Again)\r\n// P0439R0 enum class memory_order\r\n// P0457R2 starts_with()/ends_with() For basic_string/basic_string_view\r\n// P0458R2 contains() For Ordered And Unordered Associative Containers\r\n// P0463R1 endian\r\n// P0466R5 Layout-Compatibility And Pointer-Interconvertibility Traits\r\n// P0475R1 Guaranteed Copy Elision For Piecewise Construction\r\n// P0476R2 <bit> bit_cast\r\n// P0487R1 Fixing operator>>(basic_istream&, CharT*)\r\n// P0528R3 Atomic Compare-And-Exchange With Padding Bits\r\n// P0550R2 remove_cvref\r\n// P0553R4 <bit> Rotating And Counting Functions\r\n// P0556R3 <bit> Integral Power-Of-2 Operations (renamed by P1956R1)\r\n// P0586R2 Integer Comparison Functions\r\n// P0591R4 Utility Functions For Uses-Allocator Construction\r\n// P0595R2 is_constant_evaluated()\r\n// P0616R0 Using move() In <numeric>\r\n// P0619R4 Removing C++17-Deprecated Features\r\n// P0631R8 <numbers> Math Constants\r\n// P0645R10 <format> Text Formatting\r\n// P0646R1 list/forward_list remove()/remove_if()/unique() Return size_type\r\n// P0653R2 to_address()\r\n// P0655R1 visit<R>()\r\n// P0660R10 <stop_token> And jthread\r\n// P0674R1 make_shared() For Arrays\r\n// P0718R2 atomic<shared_ptr<T>>, atomic<weak_ptr<T>>\r\n// P0753R2 osyncstream Manipulators\r\n// P0758R1 is_nothrow_convertible\r\n// P0767R1 Deprecating is_pod\r\n// P0768R1 Library Support For The Spaceship Comparison Operator <=>\r\n// P0769R2 shift_left(), shift_right()\r\n// P0784R7 Library Support For More constexpr Containers\r\n// P0811R3 midpoint(), lerp()\r\n// P0849R8 auto(x): decay-copy In The Language\r\n//     (library part only)\r\n// P0879R0 constexpr For Swapping Functions\r\n// P0887R1 type_identity\r\n// P0896R4 Ranges\r\n// P0898R3 Standard Library Concepts\r\n// P0912R5 Library Support For Coroutines\r\n// P0919R3 Heterogeneous Lookup For Unordered Containers\r\n// P0966R1 string::reserve() Should Not Shrink\r\n// P0980R1 constexpr std::string\r\n// P1001R2 execution::unseq\r\n// P1004R2 constexpr std::vector\r\n// P1006R1 constexpr For pointer_traits<T*>::pointer_to()\r\n// P1007R3 assume_aligned()\r\n// P1020R1 Smart Pointer Creation With Default Initialization\r\n// P1023R0 constexpr For std::array Comparisons\r\n// P1024R3 Enhancing span Usability\r\n// P1032R1 Miscellaneous constexpr\r\n// P1035R7 Input Range Adaptors\r\n// P1065R2 constexpr INVOKE\r\n//     (except the std::invoke function which is implemented unconditionally)\r\n// P1085R2 Removing span Comparisons\r\n// P1115R3 erase()/erase_if() Return size_type\r\n// P1123R0 Atomic Compare-And-Exchange With Padding Bits For atomic_ref\r\n// P1135R6 The C++20 Synchronization Library\r\n// P1207R4 Movability Of Single-Pass Iterators\r\n// P1208R6 <source_location>\r\n// P1209R0 erase_if(), erase()\r\n// P1227R2 Signed std::ssize(), Unsigned span::size()\r\n// P1243R4 Rangify New Algorithms\r\n// P1248R1 Fixing Relations\r\n// P1252R2 Ranges Design Cleanup\r\n// P1357R1 is_bounded_array, is_unbounded_array\r\n// P1391R4 Range Constructor For string_view\r\n// P1394R4 Range Constructor For span\r\n// P1423R3 char8_t Backward Compatibility Remediation\r\n// P1456R1 Move-Only Views\r\n// P1474R1 Helpful Pointers For contiguous_iterator\r\n// P1522R1 Iterator Difference Type And Integer Overflow\r\n// P1523R1 Views And Size Types\r\n// P1612R1 Relocating endian To <bit>\r\n// P1614R2 Adding Spaceship <=> To The Library\r\n// P1638R1 basic_istream_view::iterator Should Not Be Copyable\r\n// P1645R1 constexpr For <numeric> Algorithms\r\n// P1651R0 bind_front() Should Not Unwrap reference_wrapper\r\n// P1690R1 Refining Heterogeneous Lookup For Unordered Containers\r\n// P1716R3 Range Comparison Algorithms Are Over-Constrained\r\n// P1739R4 Avoiding Template Bloat For Ranges\r\n// P1754R1 Rename Concepts To standard_case\r\n// P1831R1 Deprecating volatile In The Standard Library\r\n// P1862R1 Range Adaptors For Non-Copyable Iterators\r\n// P1865R1 Adding max() To latch And barrier\r\n// P1870R1 Rename forwarding-range To borrowed_range (Was safe_range before LWG-3379)\r\n// P1871R1 disable_sized_sentinel_for\r\n// P1872R0 span Should Have size_type, Not index_type\r\n// P1878R1 Constraining Readable Types\r\n// P1907R2 ranges::ssize\r\n// P1956R1 <bit> has_single_bit(), bit_ceil(), bit_floor(), bit_width()\r\n// P1959R0 Removing weak_equality And strong_equality\r\n// P1960R0 atomic_ref Cleanup\r\n// P1964R2 Replacing boolean With boolean-testable\r\n// P1973R1 Renaming default_init To for_overwrite\r\n// P1976R2 Explicit Constructors For Fixed-Extent span From Dynamic-Extent Ranges\r\n// P1983R0 Fixing Minor Ranges Issues\r\n// P1994R1 elements_view Needs Its Own sentinel\r\n// P2017R1 Conditionally Borrowed Ranges\r\n// P2091R0 Fixing Issues With Range Access CPOs\r\n// P2102R0 Making \"Implicit Expression Variations\" More Explicit\r\n// P2106R0 Range Algorithm Result Types\r\n// P2116R0 Removing tuple-Like Protocol Support From Fixed-Extent span\r\n// P2167R3 Improving boolean-testable Usage\r\n// P2198R7 Freestanding Feature-Test Macros And Implementation-Defined Extensions\r\n//     (including __cpp_lib_freestanding_ranges)\r\n// P2210R2 Superior String Splitting\r\n// P2216R3 std::format Improvements\r\n// P2231R1 Completing constexpr In optional And variant\r\n// P2251R1 Require span And basic_string_view To Be Trivially Copyable\r\n//     (span always provides this behavior)\r\n// P2259R1 Repairing Input Range Adaptors And counted_iterator\r\n// P2281R1 Clarifying Range Adaptor Objects\r\n// P2325R3 Views Should Not Be Required To Be Default Constructible\r\n// P2328R1 join_view Should Join All views Of ranges\r\n// P2367R0 Remove Misuses Of List-Initialization From Clause 24 Ranges\r\n// P2372R3 Fixing Locale Handling In chrono Formatters\r\n// P2393R1 Cleaning Up Integer-Class Types\r\n// P2404R3 Move-Only Types For Comparison Concepts\r\n// P2408R5 Ranges Iterators As Inputs To Non-Ranges Algorithms\r\n// P2415R2 What Is A view?\r\n// P2418R2 Add Support For std::generator-like Types To std::format\r\n// P2419R2 Clarify Handling Of Encodings In Localized Formatting Of chrono Types\r\n// P2432R1 Fix istream_view\r\n// P2465R3 Standard Library Modules std And std.compat\r\n// P2508R1 basic_format_string, format_string, wformat_string\r\n// P2510R3 Formatting Pointers\r\n// P2520R0 move_iterator<T*> Should Be A Random-Access Iterator\r\n// P2538R1 ADL-Proof projected\r\n// P2572R1 std::format Fill Character Allowances\r\n// P2588R3 barrier's Phase Completion Guarantees\r\n// P2602R2 Poison Pills Are Too Toxic\r\n// P2609R3 Relaxing Ranges Just A Smidge\r\n// P2655R3 common_reference_t Of reference_wrapper Should Be A Reference Type\r\n// P2675R1 Improving std::format's Width Estimation\r\n// P2711R1 Making Multi-Param Constructors Of Views explicit\r\n// P2736R2 Referencing The Unicode Standard\r\n// P2770R0 Stashing Stashing Iterators For Proper Flattening\r\n// P2905R2 Runtime Format Strings\r\n// P2909R4 Fix Formatting Of Code Units As Integers\r\n// P2997R1 Removing The Common Reference Requirement From The Indirectly Invocable Concepts\r\n// P3136R1 Retiring Niebloids\r\n// P3323R1 Forbid atomic<cv T>, Specify atomic_ref<cv T>\r\n//     (for atomic_ref<cv T>)\r\n// P3349R1 Converting Contiguous Iterators To Pointers\r\n// P3860R1 Make atomic_ref<T> Convertible To atomic_ref<const T>\r\n\r\n// _HAS_CXX23 controls:\r\n// P0009R18 <mdspan>\r\n// P0288R9 move_only_function\r\n// P0323R12 <expected>\r\n// P0401R6 Providing Size Feedback In The Allocator Interface\r\n// P0429R9 <flat_map>\r\n// P0448R4 <spanstream>\r\n// P0627R6 unreachable()\r\n// P0798R8 Monadic Operations For optional\r\n// P0881R7 <stacktrace>\r\n// P0943R6 Supporting C Atomics In C++\r\n// P1048R1 is_scoped_enum\r\n// P1072R10 basic_string::resize_and_overwrite\r\n// P1132R7 out_ptr(), inout_ptr()\r\n// P1147R1 Printing volatile Pointers\r\n// P1206R7 Conversions From Ranges To Containers\r\n// P1222R4 <flat_set>\r\n// P1223R5 ranges::find_last, ranges::find_last_if, ranges::find_last_if_not\r\n// P1272R4 byteswap()\r\n// P1328R1 constexpr type_info::operator==()\r\n// P1413R3 Deprecate aligned_storage And aligned_union\r\n// P1425R4 Iterator Pair Constructors For stack And queue\r\n// P1467R9 Extended Floating-Point Types\r\n//     (only the <stdfloat> header; we don't support any optional extended floating-point types)\r\n// P1659R3 ranges::starts_with, ranges::ends_with\r\n// P1679R3 contains() For basic_string/basic_string_view\r\n// P1682R3 to_underlying() For Enumerations\r\n// P1899R3 views::stride\r\n// P1951R1 Default Template Arguments For pair's Forwarding Constructor\r\n// P1989R2 Range Constructor For string_view\r\n// P2077R3 Heterogeneous Erasure Overloads For Associative Containers\r\n// P2093R14 <print>: Formatted Output\r\n// P2136R3 invoke_r()\r\n// P2164R9 views::enumerate\r\n// P2165R4 Compatibility Between tuple, pair, And tuple-like Objects\r\n// P2166R1 Prohibiting basic_string And basic_string_view Construction From nullptr\r\n// P2186R2 Removing Garbage Collection Support\r\n// P2255R2 Type Traits To Detect References Binding To Temporaries\r\n// P2273R3 constexpr unique_ptr\r\n// P2278R4 cbegin Should Always Return A Constant Iterator\r\n// P2286R8 Formatting Ranges\r\n// P2291R3 constexpr Integral <charconv>\r\n// P2302R4 ranges::contains, ranges::contains_subrange\r\n// P2321R2 zip\r\n// P2322R6 ranges::fold_left, ranges::fold_right, Etc.\r\n// P2374R4 views::cartesian_product\r\n// P2387R3 Pipe Support For User-Defined Range Adaptors\r\n// P2417R2 More constexpr bitset\r\n// P2438R2 string::substr() &&\r\n// P2440R1 ranges::iota, ranges::shift_left, ranges::shift_right\r\n// P2441R2 views::join_with\r\n// P2442R1 Windowing Range Adaptors: views::chunk, views::slide\r\n// P2443R1 views::chunk_by\r\n// P2445R1 forward_like()\r\n// P2446R2 views::as_rvalue\r\n// P2467R1 ios_base::noreplace: Exclusive Mode For fstreams\r\n// P2474R2 views::repeat\r\n// P2494R2 Relaxing Range Adaptors To Allow Move-Only Types\r\n// P2499R0 string_view Range Constructor Should Be explicit\r\n// P2502R2 <generator>: Synchronous Coroutine Generator For Ranges\r\n// P2505R5 Monadic Functions For expected\r\n// P2539R4 Synchronizing print() With The Underlying Stream\r\n// P2540R1 Empty Product For Certain Views\r\n// P2549R1 unexpected<E>::error()\r\n// P2585R1 Improve Default Container Formatting\r\n// P2599R2 mdspan: index_type, size_type\r\n// P2604R0 mdspan: data_handle_type, data_handle(), exhaustive\r\n// P2613R1 mdspan: empty()\r\n// P2614R2 Deprecating float_denorm_style, numeric_limits::has_denorm, numeric_limits::has_denorm_loss\r\n// P2652R2 Disallowing User Specialization Of allocator_traits\r\n// P2674R1 is_implicit_lifetime\r\n// P2693R1 Formatting thread::id And stacktrace\r\n// P2713R1 Escaping Improvements In std::format\r\n// P2763R1 Fixing layout_stride's Default Constructor For Fully Static Extents\r\n// P2787R1 pmr::generator\r\n// P2833R2 Freestanding Library: inout expected span\r\n//     (except for __cpp_lib_span which also covers C++26 span::at)\r\n// P2836R1 basic_const_iterator Should Follow Its Underlying Type's Convertibility\r\n// P3107R5 Permit An Efficient Implementation Of <print>\r\n// P3142R0 Printing Blank Lines With println()\r\n// P3235R3 std::print More Types Faster With Less Memory\r\n//     (partial implementation; see GH-4924)\r\n// P3567R2 flat_meow Fixes\r\n\r\n// Parallel Algorithms Notes\r\n// C++ allows an implementation to implement parallel algorithms as calls to the serial algorithms.\r\n// This implementation parallelizes several common algorithm calls, but not all.\r\n//\r\n// std::execution::unseq has no direct analogue for any optimizer we target as of 2020-07-29,\r\n// though we will map it to #pragma loop(ivdep) for the for_each algorithms only as these are the only algorithms where\r\n// the library does not need to introduce inter-loop-body dependencies to accomplish the algorithm's goals.\r\n//\r\n// The following algorithms are parallelized.\r\n// * adjacent_difference\r\n// * adjacent_find\r\n// * all_of\r\n// * any_of\r\n// * count\r\n// * count_if\r\n// * destroy\r\n// * destroy_n\r\n// * equal\r\n// * exclusive_scan\r\n// * find\r\n// * find_end\r\n// * find_first_of\r\n// * find_if\r\n// * find_if_not\r\n// * for_each\r\n// * for_each_n\r\n// * inclusive_scan\r\n// * is_heap\r\n// * is_heap_until\r\n// * is_partitioned\r\n// * is_sorted\r\n// * is_sorted_until\r\n// * mismatch\r\n// * none_of\r\n// * partition\r\n// * reduce\r\n// * remove\r\n// * remove_if\r\n// * replace\r\n// * replace_if\r\n// * search\r\n// * search_n\r\n// * set_difference\r\n// * set_intersection\r\n// * sort\r\n// * stable_sort\r\n// * transform\r\n// * transform_exclusive_scan\r\n// * transform_inclusive_scan\r\n// * transform_reduce\r\n// * uninitialized_default_construct\r\n// * uninitialized_default_construct_n\r\n// * uninitialized_value_construct\r\n// * uninitialized_value_construct_n\r\n//\r\n// The following are not presently parallelized:\r\n//\r\n// No apparent parallelism performance improvement on target hardware; all algorithms which\r\n// merely copy or permute elements with no branches are typically memory bandwidth limited.\r\n// * copy\r\n// * copy_n\r\n// * fill\r\n// * fill_n\r\n// * move\r\n// * reverse\r\n// * reverse_copy\r\n// * rotate\r\n// * rotate_copy\r\n// * shift_left\r\n// * shift_right\r\n// * swap_ranges\r\n//\r\n// Possibly same as above, but not yet tested.\r\n// * uninitialized_copy\r\n// * uninitialized_copy_n\r\n// * uninitialized_fill\r\n// * uninitialized_fill_n\r\n// * uninitialized_move\r\n// * uninitialized_move_n\r\n//\r\n// Confusion over user parallelism requirements exists; likely in the above category anyway.\r\n// * generate\r\n// * generate_n\r\n//\r\n// Effective parallelism suspected to be infeasible.\r\n// * partial_sort\r\n// * partial_sort_copy\r\n//\r\n// Not yet evaluated; parallelism may be implemented in a future release and is suspected to be beneficial.\r\n// * copy_if\r\n// * includes\r\n// * inplace_merge\r\n// * lexicographical_compare\r\n// * max_element\r\n// * merge\r\n// * min_element\r\n// * minmax_element\r\n// * nth_element\r\n// * partition_copy\r\n// * remove_copy\r\n// * remove_copy_if\r\n// * replace_copy\r\n// * replace_copy_if\r\n// * set_symmetric_difference\r\n// * set_union\r\n// * stable_partition\r\n// * unique\r\n// * unique_copy\r\n\r\n#include <vcruntime.h>\r\n#include <xkeycheck.h> // The _HAS_CXX tags must be defined before including this.\r\n\r\n#define _STL_STRINGIZE_(S) #S\r\n#define _STL_STRINGIZE(S)  _STL_STRINGIZE_(S)\r\n\r\n#define _STL_PRAGMA(PRAGMA)          _Pragma(#PRAGMA)\r\n#define _STL_PRAGMA_MESSAGE(MESSAGE) _STL_PRAGMA(message(MESSAGE))\r\n#define _EMIT_STL_MESSAGE(MESSAGE)   _STL_PRAGMA_MESSAGE(__FILE__ \"(\" _STL_STRINGIZE(__LINE__) \"): \" MESSAGE)\r\n\r\n#define _EMIT_STL_WARNING(NUMBER, MESSAGE) _EMIT_STL_MESSAGE(\"warning \" #NUMBER \": \" MESSAGE)\r\n#define _EMIT_STL_ERROR(NUMBER, MESSAGE)   static_assert(false, \"error \" #NUMBER \": \" MESSAGE)\r\n\r\n#ifndef _STL_WARNING_LEVEL\r\n#if defined(_MSVC_WARNING_LEVEL) && _MSVC_WARNING_LEVEL >= 4\r\n#define _STL_WARNING_LEVEL 4\r\n#else // defined(_MSVC_WARNING_LEVEL) && _MSVC_WARNING_LEVEL >= 4\r\n#define _STL_WARNING_LEVEL 3\r\n#endif // defined(_MSVC_WARNING_LEVEL) && _MSVC_WARNING_LEVEL >= 4\r\n#endif // !defined(_STL_WARNING_LEVEL)\r\n\r\n#if _STL_WARNING_LEVEL < 3\r\n#error _STL_WARNING_LEVEL cannot be less than 3.\r\n#endif // _STL_WARNING_LEVEL < 3\r\n\r\n#if _STL_WARNING_LEVEL > 4\r\n#error _STL_WARNING_LEVEL cannot be greater than 4.\r\n#endif // _STL_WARNING_LEVEL > 4\r\n\r\n#ifndef __has_cpp_attribute\r\n#define _FALLTHROUGH\r\n#elif __has_cpp_attribute(fallthrough) >= 201603L // TRANSITION, VSO-2696854\r\n#define _FALLTHROUGH [[fallthrough]]\r\n#else\r\n#define _FALLTHROUGH\r\n#endif\r\n\r\n// vcruntime.h defines _NODISCARD to [[nodiscard]]\r\n\r\n#define _NODISCARD_REMOVE_ALG                                                                                 \\\r\n    [[nodiscard(\"The 'remove' and 'remove_if' algorithms return the iterator past the last element \"          \\\r\n                \"that should be kept. You need to call container.erase(result, container.end()) afterwards. \" \\\r\n                \"In C++20, 'std::erase' and 'std::erase_if' are simpler replacements for these two steps.\")]]\r\n\r\n#define _NODISCARD_UNIQUE_ALG                                                                             \\\r\n    [[nodiscard(\"The 'unique' algorithm returns the iterator past the last element that should be kept. \" \\\r\n                \"You need to call container.erase(result, container.end()) afterwards.\")]]\r\n\r\n#define _NODISCARD_EMPTY_MEMBER                                                                        \\\r\n    [[nodiscard(\"This member function returns a bool indicating whether the collection is empty and \"  \\\r\n                \"has no other effects. It is not useful to call this member function and discard the \" \\\r\n                \"return value. Use the 'clear()' member function if you want to erase all elements.\")]]\r\n\r\n#define _NODISCARD_EMPTY_ARRAY_MEMBER                                                                  \\\r\n    [[nodiscard(\"This member function returns a bool indicating whether the array is empty and \"       \\\r\n                \"has no other effects. It is not useful to call this member function and discard the \" \\\r\n                \"return value. There's no way to clear an array as its size is fixed.\")]]\r\n\r\n#define _NODISCARD_EMPTY_MEMBER_NO_CLEAR                                                               \\\r\n    [[nodiscard(\"This member function returns a bool indicating whether the collection is empty and \"  \\\r\n                \"has no other effects. It is not useful to call this member function and discard the \" \\\r\n                \"return value. This collection can be cleared by assigning an empty value to it.\")]]\r\n\r\n#define _NODISCARD_EMPTY_NON_MEMBER                                                            \\\r\n    [[nodiscard(\"This function returns a bool indicating whether the collection is empty and \" \\\r\n                \"has no other effects. It is not useful to call this function and discard the return value.\")]]\r\n\r\n#define _NODISCARD_BARRIER_TOKEN \\\r\n    [[nodiscard(\"The token from 'arrive()' should not be discarded; it should be passed to 'wait()'.\")]]\r\n\r\n#define _NODISCARD_TRY_WAIT                                                                                            \\\r\n    [[nodiscard(\"This member function returns the state of the synchronization object and does not do anything else; \" \\\r\n                \"it is not useful to call this member function and discard the return value.\")]]\r\n\r\n#define _NODISCARD_TRY_CHANGE_STATE                                                                 \\\r\n    [[nodiscard(\"This function returns whether the operation succeeded in modifying object state. \" \\\r\n                \"It is dangerous to ignore the return value.\")]]\r\n\r\n#define _NODISCARD_SMART_PTR_ALLOC                                                                         \\\r\n    [[nodiscard(\"This function constructs an object wrapped by a smart pointer and has no other effects; \" \\\r\n                \"it is not useful to call this function and discard the return value.\")]]\r\n\r\n#define _NODISCARD_RAW_PTR_ALLOC                                             \\\r\n    [[nodiscard(\"This function allocates memory and returns a raw pointer. \" \\\r\n                \"Discarding the return value will cause a memory leak.\")]]\r\n\r\n#define _NODISCARD_ASSUME_ALIGNED                                                                                 \\\r\n    [[nodiscard(\"'std::assume_aligned' has a potential effect on the return value (not on the passed argument). \" \\\r\n                \"It is not useful to call 'std::assume_aligned' and discard the return value.\")]]\r\n\r\n#define _NODISCARD_LAUNDER                                                                                 \\\r\n    [[nodiscard(\"'std::launder' has a potential effect on the return value (not on the passed argument). \" \\\r\n                \"It is not useful to call 'std::launder' and discard the return value.\")]]\r\n\r\n#ifdef _SILENCE_NODISCARD_LOCK_WARNINGS\r\n#define _NODISCARD_LOCK\r\n#else // ^^^ warning disabled / warning enabled vvv\r\n#define _NODISCARD_LOCK                                                                                             \\\r\n    [[nodiscard(\"A lock should be stored in a variable to protect the scope. If you're intentionally constructing \" \\\r\n                \"a temporary to protect the rest of the current expression using the comma operator, you can cast \" \\\r\n                \"the temporary to void or define _SILENCE_NODISCARD_LOCK_WARNINGS to suppress this warning.\")]]\r\n#endif // ^^^ warning enabled ^^^\r\n\r\n#define _NODISCARD_CTOR_THREAD                                             \\\r\n    [[nodiscard(\"This temporary 'std::thread' is not joined or detached, \" \\\r\n                \"so 'std::terminate' will be called at the end of the statement.\")]]\r\n\r\n#define _NODISCARD_CTOR_JTHREAD                                                                    \\\r\n    [[nodiscard(\"This temporary 'std::jthread' is implicitly joined at the end of the statement. \" \\\r\n                \"If this is intentional, you can add '.join()' to suppress this warning. \"         \\\r\n                \"Otherwise, this 'std::jthread' should be stored in a variable.\")]]\r\n\r\n#define _NODISCARD_ASYNC                                                                                        \\\r\n    [[nodiscard(\"The result of 'std::async' should be stored in a variable. If the return value is discarded, \" \\\r\n                \"the temporary 'std::future' is destroyed, waiting for an async result or evaluating \"          \\\r\n                \"a deferred result, thus defeating the purpose of 'std::async'.\")]]\r\n\r\n#define _NODISCARD_GET_FUTURE \\\r\n    [[nodiscard(\"Since 'get_future' may be called only once, discarding the result is likely a mistake.\")]]\r\n\r\n#pragma push_macro(\"msvc\")\r\n#pragma push_macro(\"known_semantics\")\r\n#pragma push_macro(\"noop_dtor\")\r\n#pragma push_macro(\"intrinsic\")\r\n#pragma push_macro(\"lifetimebound\")\r\n#pragma push_macro(\"no_specializations\")\r\n#undef msvc\r\n#undef known_semantics\r\n#undef noop_dtor\r\n#undef intrinsic\r\n#undef lifetimebound\r\n#undef no_specializations\r\n\r\n#ifndef __has_cpp_attribute\r\n#define _HAS_MSVC_ATTRIBUTE(x) 0\r\n#else\r\n#define _HAS_MSVC_ATTRIBUTE(x) __has_cpp_attribute(msvc::x)\r\n#endif\r\n\r\n// Should we use [[msvc::known_semantics]] to tell the compiler that certain\r\n// type trait specializations have the standard-mandated semantics?\r\n#if _HAS_MSVC_ATTRIBUTE(known_semantics)\r\n#define _MSVC_KNOWN_SEMANTICS [[msvc::known_semantics]]\r\n#else\r\n#define _MSVC_KNOWN_SEMANTICS\r\n#endif\r\n\r\n// Should we use [[msvc::noop_dtor]] to tell the compiler that some non-trivial\r\n// destructors have no effects?\r\n#if _HAS_MSVC_ATTRIBUTE(noop_dtor)\r\n#define _MSVC_NOOP_DTOR [[msvc::noop_dtor]]\r\n#else\r\n#define _MSVC_NOOP_DTOR\r\n#endif\r\n\r\n// Should we use [[msvc::intrinsic]] allowing the compiler to implement the\r\n// behavior of certain trivial functions?\r\n#if _HAS_MSVC_ATTRIBUTE(intrinsic)\r\n#define _MSVC_INTRINSIC [[msvc::intrinsic]]\r\n#else\r\n#define _MSVC_INTRINSIC\r\n#endif\r\n\r\n// Should we enable [[msvc::lifetimebound]] or [[clang::lifetimebound]] warnings?\r\n#if !defined(__has_cpp_attribute) || defined(_SILENCE_LIFETIMEBOUND_WARNING)\r\n#define _MSVC_LIFETIMEBOUND\r\n#elif _HAS_MSVC_ATTRIBUTE(lifetimebound)\r\n#define _MSVC_LIFETIMEBOUND [[msvc::lifetimebound]]\r\n#elif __has_cpp_attribute(_Clang::__lifetimebound__)\r\n#define _MSVC_LIFETIMEBOUND [[_Clang::__lifetimebound__]]\r\n#else\r\n#define _MSVC_LIFETIMEBOUND\r\n#endif\r\n\r\n// Should we mark templates that users shouldn't specialize with [[msvc::no_specializations]]\r\n// or [[clang::no_specializations]]?\r\n#if _HAS_MSVC_ATTRIBUTE(no_specializations)\r\n#define _NO_SPECIALIZATIONS_MSG(_Msg) [[msvc::no_specializations(_Msg)]]\r\n#elif defined(__has_cpp_attribute) && __has_cpp_attribute(_Clang::__no_specializations__)\r\n#define _NO_SPECIALIZATIONS_MSG(_Msg) [[_Clang::__no_specializations__(_Msg)]]\r\n#else\r\n#define _NO_SPECIALIZATIONS_MSG(_Msg)\r\n#endif\r\n\r\n#define _NO_SPECIALIZATIONS_CITING(_Standardese) \\\r\n    _NO_SPECIALIZATIONS_MSG(\"Specializing this standard library template is forbidden by \" _Standardese)\r\n#define _NO_SPECIALIZATIONS_OF_VARIABLE_TEMPLATES     _NO_SPECIALIZATIONS_CITING(\"N5014 [namespace.std]/3\")\r\n#define _NO_SPECIALIZATIONS_OF_MEMBER_CLASS_TEMPLATES _NO_SPECIALIZATIONS_CITING(\"N5014 [namespace.std]/4.3\")\r\n#define _NO_SPECIALIZATIONS_OF_TYPE_TRAITS            _NO_SPECIALIZATIONS_CITING(\"N5014 [meta.rqmts]/4\")\r\n\r\n#if _HAS_CXX23 // TRANSITION, ABI, should just use [[no_unique_address]] when _HAS_CXX20.\r\n// Should we enable use of [[msvc::no_unique_address]] or [[no_unique_address]] to allow potentially-overlapping member\r\n// subobjects?\r\n#if _HAS_MSVC_ATTRIBUTE(no_unique_address)\r\n#define _MSVC_NO_UNIQUE_ADDRESS [[msvc::no_unique_address]]\r\n#elif __has_cpp_attribute(no_unique_address) // TRANSITION, DevCom-10747012, EDG recognizes [[no_unique_address]].\r\n#define _MSVC_NO_UNIQUE_ADDRESS [[no_unique_address]]\r\n#else\r\n#error Either [[msvc::no_unique_address]] or [[no_unique_address]] must be supported because this is ABI-critical.\r\n#endif\r\n#endif // _HAS_CXX23\r\n\r\n#undef _HAS_MSVC_ATTRIBUTE\r\n#pragma pop_macro(\"no_specializations\")\r\n#pragma pop_macro(\"lifetimebound\")\r\n#pragma pop_macro(\"intrinsic\")\r\n#pragma pop_macro(\"noop_dtor\")\r\n#pragma pop_macro(\"known_semantics\")\r\n#pragma pop_macro(\"msvc\")\r\n\r\n// warning C4577: 'noexcept' used with no exception handling mode specified;\r\n// termination on exception is not guaranteed. Specify /EHsc (/Wall)\r\n#if _HAS_EXCEPTIONS\r\n#define _STL_DISABLED_WARNING_C4577\r\n#else\r\n#define _STL_DISABLED_WARNING_C4577 4577\r\n#endif\r\n\r\n// warning C4984: 'if constexpr' is a C++17 language extension\r\n#if !_HAS_CXX17\r\n#define _STL_DISABLED_WARNING_C4984 4984\r\n#else\r\n#define _STL_DISABLED_WARNING_C4984\r\n#endif\r\n\r\n// warning C5053: support for 'explicit(<expr>)' in C++17 and earlier is a vendor extension\r\n#if !_HAS_CXX20\r\n#define _STL_DISABLED_WARNING_C5053 5053\r\n#else\r\n#define _STL_DISABLED_WARNING_C5053\r\n#endif\r\n\r\n#ifndef _STL_EXTRA_DISABLED_WARNINGS\r\n#define _STL_EXTRA_DISABLED_WARNINGS\r\n#endif // !defined(_STL_EXTRA_DISABLED_WARNINGS)\r\n\r\n// warning C4180: qualifier applied to function type has no meaning; ignored\r\n// warning C4324: structure was padded due to alignment specifier\r\n// warning C4412: function signature contains type 'meow'; C++ objects are unsafe to pass between pure code\r\n//                and mixed or native. (/Wall)\r\n// warning C4455: literal suffix identifiers that do not start with an underscore are reserved\r\n// warning C4494: Ignoring __declspec(allocator) because the function return type is not a pointer or reference\r\n// warning C4514: unreferenced inline function has been removed (/Wall)\r\n// warning C4574: 'MACRO' is defined to be '0': did you mean to use '#if MACRO'? (/Wall)\r\n// warning C4582: 'union': constructor is not implicitly called (/Wall)\r\n// warning C4583: 'union': destructor is not implicitly called (/Wall)\r\n// warning C4587: behavior change: constructor is no longer implicitly called (/Wall)\r\n// warning C4588: behavior change: destructor is no longer implicitly called (/Wall)\r\n// warning C4619: #pragma warning: there is no warning number 'number' (/Wall)\r\n// warning C4623: default constructor was implicitly defined as deleted (/Wall)\r\n// warning C4625: copy constructor was implicitly defined as deleted (/Wall)\r\n// warning C4626: assignment operator was implicitly defined as deleted (/Wall)\r\n// warning C4643: Forward declaring 'meow' in namespace std is not permitted by the C++ Standard. (/Wall)\r\n// warning C4648: standard attribute 'meow' is ignored\r\n// warning C4702: unreachable code\r\n// warning C4793: function compiled as native\r\n// warning C4820: 'N' bytes padding added after data member 'meow' (/Wall)\r\n// warning C4868: compiler may not enforce left-to-right evaluation order in braced initializer list (/Wall)\r\n// warning C4988: variable declared outside class/function scope (/Wall /d1WarnOnGlobals)\r\n// warning C5026: move constructor was implicitly defined as deleted (/Wall)\r\n// warning C5027: move assignment operator was implicitly defined as deleted (/Wall)\r\n// warning C5045: Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified (/Wall)\r\n// warning C5220: a non-static data member with a volatile qualified type no longer implies that compiler generated\r\n//                copy/move constructors and copy/move assignment operators are not trivial (/Wall)\r\n// warning C5246: 'member': the initialization of a subobject should be wrapped in braces (/Wall)\r\n// warning C5278: adding a specialization for 'type trait' has undefined behavior\r\n// warning C5280: a static operator '()' requires at least '/std:c++23preview'\r\n// warning C5281: a static lambda requires at least '/std:c++23preview'\r\n// warning C5285: cannot declare a specialization for 'meow'\r\n// warning C5291: 'DERIVED': deriving from the base class 'BASE' can cause potential runtime issues\r\n//                due to an ABI bug. Recommend adding a 4-byte data member to the base class\r\n//                for the padding at the end of it to work around this bug. (TRANSITION, ABI)\r\n// warning C6294: Ill-defined for-loop: initial condition does not satisfy test. Loop body not executed\r\n\r\n#ifndef _STL_DISABLED_WARNINGS\r\n// clang-format off: make macros readable\r\n#define _STL_DISABLED_WARNINGS                        \\\r\n    4180 4324 4412 4455 4494 4514 4574 4582 4583 4587 \\\r\n    4588 4619 4623 4625 4626 4643 4648 4702 4793 4820 \\\r\n    4868 4988 5026 5027 5045 5220 5246 5278 5280 5281 \\\r\n    5285 5291 6294                                    \\\r\n    _STL_DISABLED_WARNING_C4577                       \\\r\n    _STL_DISABLED_WARNING_C4984                       \\\r\n    _STL_DISABLED_WARNING_C5053                       \\\r\n    _STL_EXTRA_DISABLED_WARNINGS\r\n// clang-format on\r\n#endif // !defined(_STL_DISABLED_WARNINGS)\r\n\r\n// warning: constexpr if is a C++17 extension [-Wc++17-extensions]\r\n// warning: explicit(bool) is a C++20 extension [-Wc++20-extensions]\r\n// warning: declaring overloaded 'operator()' as 'static' is a C++23 extension [-Wc++23-extensions]\r\n// warning: static lambdas are a C++23 extension [-Wc++23-extensions]\r\n// warning: ignoring __declspec(allocator) because the function return type '%s' is not a pointer or reference type\r\n//     [-Wignored-attributes]\r\n// warning: '#pragma float_control' is not supported on this target - ignored [-Wignored-pragmas]\r\n// warning: '%s' cannot be specialized [-Winvalid-specialization]\r\n// warning: unknown pragma ignored [-Wunknown-pragmas]\r\n// warning: user-defined literal suffixes not starting with '_' are reserved [-Wuser-defined-literals]\r\n#ifndef _STL_DISABLE_CLANG_WARNINGS\r\n#ifdef __clang__\r\n// clang-format off: make macros readable\r\n#define _STL_DISABLE_CLANG_WARNINGS                                  \\\r\n    _Pragma(\"clang diagnostic push\")                                 \\\r\n    _Pragma(\"clang diagnostic ignored \\\"-Wc++17-extensions\\\"\")       \\\r\n    _Pragma(\"clang diagnostic ignored \\\"-Wc++20-extensions\\\"\")       \\\r\n    _Pragma(\"clang diagnostic ignored \\\"-Wc++23-extensions\\\"\")       \\\r\n    _Pragma(\"clang diagnostic ignored \\\"-Wignored-attributes\\\"\")     \\\r\n    _Pragma(\"clang diagnostic ignored \\\"-Wignored-pragmas\\\"\")        \\\r\n    _Pragma(\"clang diagnostic ignored \\\"-Winvalid-specialization\\\"\") \\\r\n    _Pragma(\"clang diagnostic ignored \\\"-Wunknown-pragmas\\\"\")        \\\r\n    _Pragma(\"clang diagnostic ignored \\\"-Wuser-defined-literals\\\"\")\r\n// clang-format on\r\n#elif defined(__CUDACC__) // use the same macros for Clang and CUDA's _Pragma operators\r\n// warning #342-D: operator may not be a static member function\r\n// warning #3395-D: a \"static\" lambda expression is nonstandard\r\n// clang-format off: make macros readable\r\n#define _STL_DISABLE_CLANG_WARNINGS  \\\r\n    _Pragma(\"nv_diagnostic push\")    \\\r\n    _Pragma(\"nv_diag_suppress 342\")  \\\r\n    _Pragma(\"nv_diag_suppress 3395\")\r\n// clang-format on\r\n#else // ^^^ defined(__CUDACC__) / !defined(__CUDACC__) vvv\r\n#define _STL_DISABLE_CLANG_WARNINGS\r\n#endif // ^^^ !defined(__CUDACC__) ^^^\r\n#endif // !defined(_STL_DISABLE_CLANG_WARNINGS)\r\n\r\n#ifndef _STL_RESTORE_CLANG_WARNINGS\r\n#ifdef __clang__\r\n#define _STL_RESTORE_CLANG_WARNINGS _Pragma(\"clang diagnostic pop\")\r\n#elif defined(__CUDACC__) // use the same macros for Clang and CUDA's _Pragma operators\r\n#define _STL_RESTORE_CLANG_WARNINGS _Pragma(\"nv_diagnostic pop\")\r\n#else // ^^^ defined(__CUDACC__) / !defined(__CUDACC__) vvv\r\n#define _STL_RESTORE_CLANG_WARNINGS\r\n#endif // ^^^ !defined(__CUDACC__) ^^^\r\n#endif // !defined(_STL_RESTORE_CLANG_WARNINGS)\r\n\r\n// warning: use of NaN is undefined behavior due to the currently enabled\r\n//     floating-point options [-Wnan-infinity-disabled]\r\n// warning: use of infinity is undefined behavior due to the currently enabled\r\n//     floating-point options [-Wnan-infinity-disabled]\r\n#ifndef _STL_DISABLE_CLANG_WARNING_NAN_INF_DISABLED\r\n#ifdef __clang__\r\n// clang-format off: make macros readable\r\n#define _STL_DISABLE_CLANG_WARNING_NAN_INF_DISABLED \\\r\n    _Pragma(\"clang diagnostic push\")                \\\r\n    _Pragma(\"clang diagnostic ignored \\\"-Wnan-infinity-disabled\\\"\")\r\n// clang-format on\r\n#else // ^^^ defined(__clang__) / !defined(__clang__) vvv\r\n#define _STL_DISABLE_CLANG_WARNING_NAN_INF_DISABLED\r\n#endif // ^^^ !defined(__clang__) ^^^\r\n#endif // !defined(_STL_DISABLE_CLANG_WARNING_NAN_INF_DISABLED)\r\n\r\n#ifndef _STL_RESTORE_CLANG_WARNING_NAN_INF_DISABLED\r\n#ifdef __clang__\r\n#define _STL_RESTORE_CLANG_WARNING_NAN_INF_DISABLED _Pragma(\"clang diagnostic pop\")\r\n#else // ^^^ defined(__clang__) / !defined(__clang__) vvv\r\n#define _STL_RESTORE_CLANG_WARNING_NAN_INF_DISABLED\r\n#endif // ^^^ !defined(__clang__) ^^^\r\n#endif // !defined(_STL_RESTORE_CLANG_WARNING_NAN_INF_DISABLED)\r\n\r\n// clang-format off: make macros readable\r\n#ifndef _STL_DISABLE_DEPRECATED_WARNING\r\n#ifdef __clang__\r\n#define _STL_DISABLE_DEPRECATED_WARNING \\\r\n    _Pragma(\"clang diagnostic push\")    \\\r\n    _Pragma(\"clang diagnostic ignored \\\"-Wdeprecated-declarations\\\"\")\r\n#else // ^^^ defined(__clang__) / !defined(__clang__) vvv\r\n#define _STL_DISABLE_DEPRECATED_WARNING \\\r\n    _Pragma(\"warning(push)\")            \\\r\n    _Pragma(\"warning(disable : 4996)\") // was declared deprecated\r\n#endif // ^^^ !defined(__clang__) ^^^\r\n#endif // _STL_DISABLE_DEPRECATED_WARNING\r\n// clang-format on\r\n\r\n#ifndef _STL_RESTORE_DEPRECATED_WARNING\r\n#ifdef __clang__\r\n#define _STL_RESTORE_DEPRECATED_WARNING _Pragma(\"clang diagnostic pop\")\r\n#else // ^^^ defined(__clang__) / !defined(__clang__) vvv\r\n#define _STL_RESTORE_DEPRECATED_WARNING _Pragma(\"warning(pop)\")\r\n#endif // ^^^ !defined(__clang__) ^^^\r\n#endif // !defined(_STL_RESTORE_DEPRECATED_WARNING)\r\n\r\n#define _CPPLIB_VER       650\r\n#define _MSVC_STL_VERSION 145\r\n#define _MSVC_STL_UPDATE  202603L\r\n\r\n#ifndef _ALLOW_COMPILER_AND_STL_VERSION_MISMATCH\r\n#if defined(__CUDACC__) && defined(__CUDACC_VER_MAJOR__)\r\n#if __CUDACC_VER_MAJOR__ < 13 || (__CUDACC_VER_MAJOR__ == 13 && __CUDACC_VER_MINOR__ < 2)\r\n_EMIT_STL_ERROR(STL1002, \"Unexpected compiler version, expected CUDA 13.2 or newer.\");\r\n#endif // ^^^ old CUDA ^^^\r\n#elif defined(__EDG__)\r\n// not attempting to detect __EDG_VERSION__ being less than expected\r\n#elif defined(__clang__)\r\n#if __clang_major__ < 20\r\n_EMIT_STL_ERROR(STL1000, \"Unexpected compiler version, expected Clang 20 or newer.\");\r\n#endif // ^^^ old Clang ^^^\r\n#elif defined(_MSC_VER)\r\n#if _MSC_VER < 1950 // Coarse-grained, not inspecting _MSC_FULL_VER\r\n_EMIT_STL_ERROR(STL1001, \"Unexpected compiler version, expected MSVC Compiler 19.50 or newer.\");\r\n#endif // ^^^ old MSVC ^^^\r\n#else // vvv other compilers vvv\r\n// not attempting to detect other compilers\r\n#endif // ^^^ other compilers ^^^\r\n#endif // !defined(_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH)\r\n\r\n#ifndef _HAS_STATIC_RTTI\r\n#define _HAS_STATIC_RTTI 1\r\n#endif // !defined(_HAS_STATIC_RTTI)\r\n\r\n#if defined(_CPPRTTI) && !_HAS_STATIC_RTTI\r\n#error /GR implies _HAS_STATIC_RTTI.\r\n#endif // defined(_CPPRTTI) && !_HAS_STATIC_RTTI\r\n\r\n// N4950 [dcl.constexpr]/1: \"A function or static data member declared with the\r\n// constexpr or consteval specifier is implicitly an inline function or variable\"\r\n\r\n// Functions that became constexpr in C++17\r\n#if _HAS_CXX17\r\n#define _CONSTEXPR17 constexpr\r\n#else // ^^^ constexpr in C++17 and later / inline (not constexpr) in C++14 vvv\r\n#define _CONSTEXPR17 inline\r\n#endif // ^^^ inline (not constexpr) in C++14 ^^^\r\n\r\n// Functions that became constexpr in C++20\r\n#if _HAS_CXX20\r\n#define _CONSTEXPR20 constexpr\r\n#else // ^^^ constexpr in C++20 and later / inline (not constexpr) in C++17 and earlier vvv\r\n#define _CONSTEXPR20 inline\r\n#endif // ^^^ inline (not constexpr) in C++17 and earlier ^^^\r\n\r\n// Functions that became constexpr in C++23\r\n#if _HAS_CXX23\r\n#define _CONSTEXPR23 constexpr\r\n#else // ^^^ constexpr in C++23 and later / inline (not constexpr) in C++20 and earlier vvv\r\n#define _CONSTEXPR23 inline\r\n#endif // ^^^ inline (not constexpr) in C++20 and earlier ^^^\r\n\r\n// P2465R3 Standard Library Modules std And std.compat\r\n#ifdef _BUILD_STD_MODULE\r\n#if !_HAS_CXX20\r\n#error The Standard Library Modules are available only with C++20 or later.\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n#define _EXPORT_STD export\r\n#else // ^^^ defined(_BUILD_STD_MODULE) / !defined(_BUILD_STD_MODULE) vvv\r\n#define _EXPORT_STD\r\n#endif // ^^^ !defined(_BUILD_STD_MODULE) ^^^\r\n\r\n// P0607R0 Inline Variables For The STL\r\n#if _HAS_CXX17\r\n#define _INLINE_VAR inline\r\n#else\r\n#define _INLINE_VAR\r\n#endif\r\n\r\n// N4190 Removing auto_ptr, random_shuffle(), And Old <functional> Stuff\r\n#ifndef _HAS_AUTO_PTR_ETC\r\n#define _HAS_AUTO_PTR_ETC (!_HAS_CXX17)\r\n#endif // !defined(_HAS_AUTO_PTR_ETC)\r\n\r\n// P0003R5 Removing Dynamic Exception Specifications\r\n#ifndef _HAS_UNEXPECTED\r\n#define _HAS_UNEXPECTED (!_HAS_CXX17)\r\n#endif // !defined(_HAS_UNEXPECTED)\r\n\r\n#if _HAS_UNEXPECTED && _HAS_CXX23\r\n_EMIT_STL_ERROR(STL1004, \"C++98 unexpected() is incompatible with C++23 unexpected<E>.\");\r\n#endif // _HAS_UNEXPECTED && _HAS_CXX23\r\n\r\n// P0004R1 Removing Deprecated Iostreams Aliases\r\n#ifndef _HAS_OLD_IOSTREAMS_MEMBERS\r\n#define _HAS_OLD_IOSTREAMS_MEMBERS (!_HAS_CXX17)\r\n#endif // !defined(_HAS_OLD_IOSTREAMS_MEMBERS)\r\n\r\n// P0298R3 std::byte\r\n#ifndef _HAS_STD_BYTE\r\n#define _HAS_STD_BYTE _HAS_CXX17 // TRANSITION, OS-14273702\r\n#endif // !defined(_HAS_STD_BYTE)\r\n\r\n// P0302R1 Removing Allocator Support In std::function\r\n// LWG-2385 function::assign allocator argument doesn't make sense\r\n#ifndef _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n#define _HAS_FUNCTION_ALLOCATOR_SUPPORT (!_HAS_CXX17)\r\n#endif // !defined(_HAS_FUNCTION_ALLOCATOR_SUPPORT)\r\n\r\n// STL4000 is \"_STATIC_CPPLIB is deprecated\", currently in yvals.h\r\n// STL4001 is \"/clr:pure is deprecated\", currently in yvals.h\r\n// STL4002 was \"The non-Standard std::tr1 namespace and TR1-only machinery are deprecated and will be REMOVED.\"\r\n// STL4003 was \"The non-Standard std::identity struct is deprecated and will be REMOVED.\"\r\n\r\n// Enforcement of matching allocator value_types\r\n#ifndef _ENFORCE_MATCHING_ALLOCATORS\r\n#define _ENFORCE_MATCHING_ALLOCATORS _HAS_CXX17\r\n#endif // !defined(_ENFORCE_MATCHING_ALLOCATORS)\r\n\r\n#define _MISMATCHED_ALLOCATOR_MESSAGE(_CONTAINER, _VALUE_TYPE)                                                      \\\r\n    _CONTAINER \" requires that Allocator's value_type match \" _VALUE_TYPE \" (See N4950 [container.alloc.reqmts]/5)\" \\\r\n               \" Either fix the allocator value_type or define _ENFORCE_MATCHING_ALLOCATORS=0\"                      \\\r\n               \" to suppress this error.\"\r\n\r\n// Enforcement of Standard facet specializations\r\n#ifndef _ENFORCE_FACET_SPECIALIZATIONS\r\n#define _ENFORCE_FACET_SPECIALIZATIONS 0\r\n#endif // !defined(_ENFORCE_FACET_SPECIALIZATIONS)\r\n\r\n#define _FACET_SPECIALIZATION_MESSAGE                                                  \\\r\n    \"Unsupported facet specialization; see N4950 [locale.category]. \"                  \\\r\n    \"Either use a Standard specialization or define _ENFORCE_FACET_SPECIALIZATIONS=0 \" \\\r\n    \"to suppress this error.\"\r\n\r\n// To improve compiler throughput, use 'hidden friend' operators in <system_error> instead of non-members that are\r\n// depicted in the Standard.\r\n#ifndef _STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS\r\n#define _STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS 1\r\n#endif // !defined(_STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS)\r\n\r\n// Controls whether the STL will force /fp:fast to enable vectorization of algorithms defined\r\n// in the standard as special cases; such as reduce, transform_reduce, inclusive_scan, exclusive_scan\r\n#ifndef _STD_VECTORIZE_WITH_FLOAT_CONTROL\r\n#ifdef _M_FP_EXCEPT\r\n#define _STD_VECTORIZE_WITH_FLOAT_CONTROL 0\r\n#else // ^^^ floating-point exceptions enabled / floating-point exceptions disabled (default) vvv\r\n#define _STD_VECTORIZE_WITH_FLOAT_CONTROL 1\r\n#endif // ^^^ floating-point exceptions disabled (default) ^^^\r\n#endif // !defined(_STD_VECTORIZE_WITH_FLOAT_CONTROL)\r\n\r\n// P0174R2 Deprecating Vestigial Library Parts\r\n// P0521R0 Deprecating shared_ptr::unique()\r\n// Other C++17 deprecation warnings\r\n\r\n// N4659 D.4 [depr.cpp.headers]\r\n#if _HAS_CXX17 && !defined(_SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS)\r\n#define _CXX17_DEPRECATE_C_HEADER                                                               \\\r\n    [[deprecated(\"warning STL4004: \"                                                            \\\r\n                 \"<ccomplex>, <cstdalign>, <cstdbool>, and <ctgmath> are deprecated in C++17. \" \\\r\n                 \"You can define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING \"                  \\\r\n                 \"or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX17_DEPRECATE_C_HEADER\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// N4659 D.6 [depr.str.strstreams]\r\n#if _HAS_CXX17 && !defined(_SILENCE_CXX17_STRSTREAM_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS)\r\n#define _CXX17_DEPRECATE_STRSTREAM                                              \\\r\n    [[deprecated(\"warning STL4005: <strstream> is deprecated in C++17. \"        \\\r\n                 \"You can define _SILENCE_CXX17_STRSTREAM_DEPRECATION_WARNING \" \\\r\n                 \"or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX17_DEPRECATE_STRSTREAM\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// N4659 D.7 [depr.uncaught]\r\n#if _HAS_CXX17 && !defined(_SILENCE_CXX17_UNCAUGHT_EXCEPTION_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS)\r\n#define _CXX17_DEPRECATE_UNCAUGHT_EXCEPTION                                              \\\r\n    [[deprecated(\"warning STL4006: \"                                                     \\\r\n                 \"std::uncaught_exception() is deprecated in C++17. \"                    \\\r\n                 \"It is superseded by std::uncaught_exceptions(), plural. \"              \\\r\n                 \"You can define _SILENCE_CXX17_UNCAUGHT_EXCEPTION_DEPRECATION_WARNING \" \\\r\n                 \"or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX17_DEPRECATE_UNCAUGHT_EXCEPTION\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// N4659 D.8.1 [depr.weak.result_type]\r\n// N4659 D.8.2 [depr.func.adaptor.typedefs]\r\n#if _HAS_CXX17 && !defined(_SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS)\r\n#define _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS                                                                         \\\r\n    [[deprecated(                                                                                                 \\\r\n        \"warning STL4007: Many result_type typedefs \"                                                             \\\r\n        \"and all argument_type, first_argument_type, and second_argument_type typedefs are deprecated in C++17. \" \\\r\n        \"You can define _SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING \"                                     \\\r\n        \"or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX17_DEPRECATE_ADAPTOR_TYPEDEFS\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// N4659 D.8.3 [depr.negators]\r\n#if _HAS_CXX17 && !defined(_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS)\r\n#define _CXX17_DEPRECATE_NEGATORS                                                                                \\\r\n    [[deprecated(\"warning STL4008: \"                                                                             \\\r\n                 \"std::not1(), std::not2(), std::unary_negate, and std::binary_negate are deprecated in C++17. \" \\\r\n                 \"They are superseded by std::not_fn(). \"                                                        \\\r\n                 \"You can define _SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING \"                                   \\\r\n                 \"or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX17_DEPRECATE_NEGATORS\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// STL4009 was \"std::allocator<void> is deprecated in C++17\"\r\n\r\n// N4659 D.9 [depr.default.allocator]\r\n#if _HAS_CXX17 && !defined(_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS)\r\n#define _CXX17_DEPRECATE_OLD_ALLOCATOR_MEMBERS                                              \\\r\n    [[deprecated(\"warning STL4010: \"                                                        \\\r\n                 \"Various members of std::allocator are deprecated in C++17. \"              \\\r\n                 \"Use std::allocator_traits instead of accessing these members directly. \"  \\\r\n                 \"You can define _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING \" \\\r\n                 \"or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX17_DEPRECATE_OLD_ALLOCATOR_MEMBERS\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// N4659 D.10 [depr.storage.iterator]\r\n#if _HAS_CXX17 && !defined(_SILENCE_CXX17_RAW_STORAGE_ITERATOR_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS)\r\n#define _CXX17_DEPRECATE_RAW_STORAGE_ITERATOR                                                  \\\r\n    [[deprecated(\"warning STL4011: \"                                                           \\\r\n                 \"std::raw_storage_iterator is deprecated in C++17. \"                          \\\r\n                 \"Consider using the std::uninitialized_copy() family of algorithms instead. \" \\\r\n                 \"You can define _SILENCE_CXX17_RAW_STORAGE_ITERATOR_DEPRECATION_WARNING \"     \\\r\n                 \"or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX17_DEPRECATE_RAW_STORAGE_ITERATOR\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// N4659 D.11 [depr.temporary.buffer]\r\n#if _HAS_CXX17 && !defined(_SILENCE_CXX17_TEMPORARY_BUFFER_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS)\r\n#define _CXX17_DEPRECATE_TEMPORARY_BUFFER                                                                   \\\r\n    [[deprecated(\"warning STL4012: \"                                                                        \\\r\n                 \"std::get_temporary_buffer() and std::return_temporary_buffer() are deprecated in C++17. \" \\\r\n                 \"You can define _SILENCE_CXX17_TEMPORARY_BUFFER_DEPRECATION_WARNING \"                      \\\r\n                 \"or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX17_DEPRECATE_TEMPORARY_BUFFER\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// N4659 D.12 [depr.meta.types]\r\n#if _HAS_CXX17 && !defined(_SILENCE_CXX17_IS_LITERAL_TYPE_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS)\r\n#define _CXX17_DEPRECATE_IS_LITERAL_TYPE                                                     \\\r\n    [[deprecated(\"warning STL4013: \"                                                         \\\r\n                 \"std::is_literal_type and std::is_literal_type_v are deprecated in C++17. \" \\\r\n                 \"You can define _SILENCE_CXX17_IS_LITERAL_TYPE_DEPRECATION_WARNING \"        \\\r\n                 \"or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX17_DEPRECATE_IS_LITERAL_TYPE\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// N4659 D.12 [depr.meta.types]\r\n#if _HAS_CXX17 && !defined(_SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS)\r\n#define _CXX17_DEPRECATE_RESULT_OF                                                      \\\r\n    [[deprecated(\"warning STL4014: \"                                                    \\\r\n                 \"std::result_of and std::result_of_t are deprecated in C++17. \"        \\\r\n                 \"They are superseded by std::invoke_result and std::invoke_result_t. \" \\\r\n                 \"You can define _SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING \"         \\\r\n                 \"or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX17_DEPRECATE_RESULT_OF\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// N4659 D.13 [depr.iterator.primitives]\r\n#if _HAS_CXX17 && !defined(_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS)\r\n#define _CXX17_DEPRECATE_ITERATOR_BASE_CLASS                                                                          \\\r\n    [[deprecated(                                                                                                     \\\r\n        \"warning STL4015: \"                                                                                           \\\r\n        \"The std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17. \"        \\\r\n        \"(The <iterator> header is NOT deprecated.) The C++ Standard has never required user-defined iterators to \"   \\\r\n        \"derive from std::iterator. To fix this warning, stop deriving from std::iterator and start providing \"       \\\r\n        \"publicly accessible typedefs named iterator_category, value_type, difference_type, pointer, and reference. \" \\\r\n        \"Note that value_type is required to be non-const, even for constant iterators. \"                             \\\r\n        \"You can define _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING \"                                      \\\r\n        \"or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX17_DEPRECATE_ITERATOR_BASE_CLASS\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// N4659 D.14 [depr.util.smartptr.shared.obs]\r\n#if _HAS_CXX17 && !defined(_SILENCE_CXX17_SHARED_PTR_UNIQUE_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS)\r\n#define _CXX17_DEPRECATE_SHARED_PTR_UNIQUE                                              \\\r\n    [[deprecated(\"warning STL4016: \"                                                    \\\r\n                 \"std::shared_ptr::unique() is deprecated in C++17. \"                   \\\r\n                 \"You can define _SILENCE_CXX17_SHARED_PTR_UNIQUE_DEPRECATION_WARNING \" \\\r\n                 \"or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX17_DEPRECATE_SHARED_PTR_UNIQUE\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// N4659 D.15 [depr.locale.stdcvt]\r\n// N4659 D.16 [depr.conversions]\r\n#if _HAS_CXX17 && !defined(_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS)\r\n#define _CXX17_DEPRECATE_CODECVT_HEADER                                                                        \\\r\n    [[deprecated(                                                                                              \\\r\n        \"warning STL4017: \"                                                                                    \\\r\n        \"std::wbuffer_convert, std::wstring_convert, and the <codecvt> header (containing std::codecvt_mode, \" \\\r\n        \"std::codecvt_utf8, std::codecvt_utf16, and std::codecvt_utf8_utf16) are deprecated in C++17. \"        \\\r\n        \"(The std::codecvt class template is NOT deprecated.) \"                                                \\\r\n        \"The C++ Standard doesn't provide equivalent non-deprecated functionality; \"                           \\\r\n        \"consider using MultiByteToWideChar() and WideCharToMultiByte() from <Windows.h> instead. \"            \\\r\n        \"You can define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING \"                                    \\\r\n        \"or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX17_DEPRECATE_CODECVT_HEADER\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// STL4018 was \"The non-Standard std::tr2::sys namespace is deprecated and will be REMOVED.\"\r\n\r\n// STL4019 was \"The member std::fpos::seekpos() is non-Standard, and [...] will be removed\"\r\n\r\n// P0482R6 Library Support For char8_t\r\n// Other C++20 deprecation warnings\r\n\r\n// N4868 D.23 [depr.locale.category]\r\n#if _HAS_CXX20 && !defined(_SILENCE_CXX20_CODECVT_FACETS_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS)\r\n#define _CXX20_DEPRECATE_CODECVT_FACETS                                                                                \\\r\n    [[deprecated(\"warning STL4020: \"                                                                                   \\\r\n                 \"std::codecvt<char16_t, char, mbstate_t>, std::codecvt<char32_t, char, mbstate_t>, \"                  \\\r\n                 \"std::codecvt_byname<char16_t, char, mbstate_t>, and std::codecvt_byname<char32_t, char, mbstate_t> \" \\\r\n                 \"are deprecated in C++20. You can define _SILENCE_CXX20_CODECVT_FACETS_DEPRECATION_WARNING \"          \\\r\n                 \"or _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX20_DEPRECATE_CODECVT_FACETS\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// N4868 D.24 [depr.fs.path.factory]\r\n#if _HAS_CXX20 && defined(__cpp_char8_t) && !defined(_SILENCE_CXX20_U8PATH_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS)\r\n#define _CXX20_DEPRECATE_U8PATH                                                                                      \\\r\n    [[deprecated(\"warning STL4021: \"                                                                                 \\\r\n                 \"The std::filesystem::u8path() overloads are deprecated in C++20. \"                                 \\\r\n                 \"The constructors of std::filesystem::path provide equivalent functionality via construction from \" \\\r\n                 \"u8string, u8string_view, or iterators with value_type char8_t. \"                                   \\\r\n                 \"You can define _SILENCE_CXX20_U8PATH_DEPRECATION_WARNING \"                                         \\\r\n                 \"or _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX20_DEPRECATE_U8PATH\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// STL4022 warned about \"The hash_meow and unordered_meow containers' non-Standard lower_bound() member\"\r\n// STL4023 warned about \"The hash_meow and unordered_meow containers' non-Standard upper_bound() member\"\r\n\r\n// P0966R1 [depr.string.capacity]\r\n#if _HAS_CXX20 && !defined(_SILENCE_CXX20_STRING_RESERVE_WITHOUT_ARGUMENT_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS)\r\n#define _CXX20_DEPRECATE_STRING_RESERVE_WITHOUT_ARGUMENT                                                             \\\r\n    [[deprecated(\"warning STL4024: \"                                                                                 \\\r\n                 \"std::string::reserve() without an argument is deprecated in C++20. \"                               \\\r\n                 \"To shrink the string's capacity, use std::string::shrink_to_fit() instead. Otherwise, provide an \" \\\r\n                 \"argument to std::string::reserve(). \"                                                              \\\r\n                 \"You can define _SILENCE_CXX20_STRING_RESERVE_WITHOUT_ARGUMENT_DEPRECATION_WARNING \"                \\\r\n                 \"or _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX20_DEPRECATE_STRING_RESERVE_WITHOUT_ARGUMENT\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// P0767R1 [depr.meta.types]\r\n#if _HAS_CXX20 && !defined(_SILENCE_CXX20_IS_POD_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS)\r\n#define _CXX20_DEPRECATE_IS_POD                                                                                     \\\r\n    [[deprecated(\"warning STL4025: \"                                                                                \\\r\n                 \"std::is_pod and std::is_pod_v are deprecated in C++20. \"                                          \\\r\n                 \"The std::is_trivially_copyable and/or std::is_standard_layout traits likely suit your use case. \" \\\r\n                 \"You can define _SILENCE_CXX20_IS_POD_DEPRECATION_WARNING \"                                        \\\r\n                 \"or _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX20_DEPRECATE_IS_POD\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// STL4026 was\r\n// \"std::experimental::erase() and std::experimental::erase_if() are deprecated by Microsoft and will be REMOVED.\"\r\n\r\n// P0768R1 [depr.relops]\r\n#if _HAS_CXX20 && !defined(_SILENCE_CXX20_REL_OPS_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS)\r\n#define _CXX20_DEPRECATE_REL_OPS                                                                                      \\\r\n    [[deprecated(\"warning STL4027: \"                                                                                  \\\r\n                 \"The namespace std::rel_ops and its contents are deprecated in C++20. \"                              \\\r\n                 \"Their use is superseded by C++20's <=> operator and automatic rewrites of relational expressions. \" \\\r\n                 \"You can define _SILENCE_CXX20_REL_OPS_DEPRECATION_WARNING or \"                                      \\\r\n                 \"_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX20_DEPRECATE_REL_OPS\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n#if _HAS_CXX20 && !defined(_SILENCE_CXX20_ATOMIC_INIT_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS)\r\n#define _CXX20_DEPRECATE_ATOMIC_INIT                                                  \\\r\n    [[deprecated(\"warning STL4028: \"                                                  \\\r\n                 \"std::atomic_init() overloads are deprecated in C++20. \"             \\\r\n                 \"The constructors of std::atomic provide equivalent functionality. \" \\\r\n                 \"You can define _SILENCE_CXX20_ATOMIC_INIT_DEPRECATION_WARNING \"     \\\r\n                 \"or _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX20_DEPRECATE_ATOMIC_INIT\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n#if _HAS_CXX20 && !defined(_SILENCE_CXX20_OLD_SHARED_PTR_ATOMIC_SUPPORT_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS)\r\n#define _CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT                                              \\\r\n    [[deprecated(\"warning STL4029: \"                                                                \\\r\n                 \"std::atomic_*() overloads for shared_ptr are deprecated in C++20. \"               \\\r\n                 \"The shared_ptr specialization of std::atomic provides superior functionality. \"   \\\r\n                 \"You can define _SILENCE_CXX20_OLD_SHARED_PTR_ATOMIC_SUPPORT_DEPRECATION_WARNING \" \\\r\n                 \"or _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n#if _HAS_CXX20 && !defined(_SILENCE_CXX20_VOLATILE_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS)\r\n#define _CXX20_DEPRECATE_VOLATILE                                                                   \\\r\n    [[deprecated(\"warning STL4030: \"                                                                \\\r\n                 \"Some operations on volatile-qualified types in the STL are deprecated in C++20. \" \\\r\n                 \"You can define _SILENCE_CXX20_VOLATILE_DEPRECATION_WARNING \"                      \\\r\n                 \"or _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX20_DEPRECATE_VOLATILE\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n#if _HAS_CXX20 && !defined(_SILENCE_CXX20_MOVE_ITERATOR_ARROW_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS)\r\n#define _CXX20_DEPRECATE_MOVE_ITERATOR_ARROW                                              \\\r\n    [[deprecated(\"warning STL4031: \"                                                      \\\r\n                 \"std::move_iterator::operator->() is deprecated in C++20. \"              \\\r\n                 \"You can define _SILENCE_CXX20_MOVE_ITERATOR_ARROW_DEPRECATION_WARNING \" \\\r\n                 \"or _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX20_DEPRECATE_MOVE_ITERATOR_ARROW\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// STL4032 was \"std::pmr::polymorphic_allocator::destroy() is deprecated in C++17 by LWG-3036.\" (reverted by P2875R4)\r\n\r\n#if _HAS_CXX20 && !defined(_SILENCE_CXX20_IS_ALWAYS_EQUAL_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS)\r\n#define _CXX20_DEPRECATE_IS_ALWAYS_EQUAL                                                \\\r\n    [[deprecated(\"warning STL4033: \"                                                    \\\r\n                 \"std::allocator::is_always_equal is deprecated in C++20 by LWG-3170. \" \\\r\n                 \"Prefer std::allocator_traits<allocator<T>>::is_always_equal. \"        \\\r\n                 \"You can define _SILENCE_CXX20_IS_ALWAYS_EQUAL_DEPRECATION_WARNING \"   \\\r\n                 \"or _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX20_DEPRECATE_IS_ALWAYS_EQUAL\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n#if _HAS_CXX23 && !defined(_SILENCE_CXX23_ALIGNED_STORAGE_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX23_DEPRECATION_WARNINGS)\r\n#define _CXX23_DEPRECATE_ALIGNED_STORAGE                                                     \\\r\n    [[deprecated(\"warning STL4034: \"                                                         \\\r\n                 \"std::aligned_storage and std::aligned_storage_t are deprecated in C++23. \" \\\r\n                 \"Prefer alignas(T) std::byte t_buff[sizeof(T)]. \"                           \\\r\n                 \"You can define _SILENCE_CXX23_ALIGNED_STORAGE_DEPRECATION_WARNING \"        \\\r\n                 \"or _SILENCE_ALL_CXX23_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX23_DEPRECATE_ALIGNED_STORAGE\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n#if _HAS_CXX23 && !defined(_SILENCE_CXX23_ALIGNED_UNION_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX23_DEPRECATION_WARNINGS)\r\n#define _CXX23_DEPRECATE_ALIGNED_UNION                                                   \\\r\n    [[deprecated(\"warning STL4035: \"                                                     \\\r\n                 \"std::aligned_union and std::aligned_union_t are deprecated in C++23. \" \\\r\n                 \"Prefer alignas(Ts...) std::byte t_buff[std::max({sizeof(Ts)...})]. \"   \\\r\n                 \"You can define _SILENCE_CXX23_ALIGNED_UNION_DEPRECATION_WARNING \"      \\\r\n                 \"or _SILENCE_ALL_CXX23_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX23_DEPRECATE_ALIGNED_UNION\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n#if _HAS_CXX20 && !defined(_SILENCE_CXX20_CISO646_REMOVED_WARNING) && !defined(_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS)\r\n#define _CXX20_REMOVE_CISO646                                             \\\r\n    [[deprecated(\"warning STL4036: \"                                      \\\r\n                 \"<ciso646> is removed in C++20. \"                        \\\r\n                 \"You can define _SILENCE_CXX20_CISO646_REMOVED_WARNING \" \\\r\n                 \"or _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX20_REMOVE_CISO646\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n#if !defined(_SILENCE_NONFLOATING_COMPLEX_DEPRECATION_WARNING)\r\n#define _DEPRECATE_NONFLOATING_COMPLEX                                                 \\\r\n    [[deprecated(\"warning STL4037: \"                                                   \\\r\n                 \"The effect of instantiating the template std::complex for any \"      \\\r\n                 \"type other than float, double, or long double is unspecified. \"      \\\r\n                 \"You can define _SILENCE_NONFLOATING_COMPLEX_DEPRECATION_WARNING to \" \\\r\n                 \"suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _DEPRECATE_NONFLOATING_COMPLEX\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// STL4038 is used to warn that \"The contents of <meow> are available only with C++NN or later.\"\r\n\r\n// STL4039 is used to warn that \"The contents of <coroutine> are not available with /await.\"\r\n\r\n// STL4040 is used to warn that \"The contents of <any> require static RTTI.\"\r\n\r\n#if _HAS_CXX23 && !defined(_SILENCE_CXX23_UNIX_STREAMS_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX23_DEPRECATION_WARNINGS)\r\n#define _CXX23_DEPRECATE_UNIX_STREAMS                                                                                  \\\r\n    [[deprecated(                                                                                                      \\\r\n        \"warning STL4041: \"                                                                                            \\\r\n        \"std::errc enumerators std::errc::no_message_available, std::errc::no_stream_resources, \"                      \\\r\n        \"std::errc::not_a_stream, and std::errc::stream_timeout and their corresponding errno macros ENODATA, ENOSR, \" \\\r\n        \"ENOSTR, and ETIME are deprecated in C++23 by LWG-3869. These errno macros are deprecated in POSIX 2008 and \"  \\\r\n        \"removed in POSIX 202x. You can define _SILENCE_CXX23_UNIX_STREAMS_DEPRECATION_WARNING or \"                    \\\r\n        \"_SILENCE_ALL_CXX23_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX23_DEPRECATE_UNIX_STREAMS\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n#if _HAS_CXX23 && !defined(_SILENCE_CXX23_DENORM_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX23_DEPRECATION_WARNINGS)\r\n#define _CXX23_DEPRECATE_DENORM                                                                                        \\\r\n    [[deprecated(\"warning STL4042: \"                                                                                   \\\r\n                 \"std::float_denorm_style, std::numeric_limits::has_denorm, and std::numeric_limits::has_denorm_loss \" \\\r\n                 \"are deprecated in C++23. You can define _SILENCE_CXX23_DENORM_DEPRECATION_WARNING or \"               \\\r\n                 \"_SILENCE_ALL_CXX23_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX23_DEPRECATE_DENORM\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// STL4043 was \"stdext::checked_array_iterator, stdext::unchecked_array_iterator,\r\n// and related factory functions are non-Standard extensions and will be removed\"\r\n\r\n// STL4044 was \"The contents of the stdext::cvt namespace are non-Standard extensions and will be removed\"\r\n\r\n// STL4045 was \"The ipfx(), isfx(), opfx(), and osfx() functions are [...] non-Standard extensions\"\r\n\r\n// STL4046 was \"Non-Standard TR1 components in <random> are deprecated and will be REMOVED.\"\r\n\r\n#if _HAS_CXX20 && defined(__cpp_char8_t) && !defined(_SILENCE_CXX20_CODECVT_CHAR8_T_FACETS_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS)\r\n#define _CXX20_DEPRECATE_CODECVT_CHAR8_T_FACETS                                                                     \\\r\n    [[deprecated(                                                                                                   \\\r\n        \"warning STL4047: std::codecvt<char16_t, char8_t, mbstate_t>, std::codecvt<char32_t, char8_t, mbstate_t>, \" \\\r\n        \"std::codecvt_byname<char16_t, char8_t, mbstate_t>, and std::codecvt_byname<char32_t, char8_t, mbstate_t> \" \\\r\n        \"are deprecated by LWG-3767. You can define _SILENCE_CXX20_CODECVT_CHAR8_T_FACETS_DEPRECATION_WARNING or \"  \\\r\n        \"_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _CXX20_DEPRECATE_CODECVT_CHAR8_T_FACETS\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// STL4048 was \"locale::empty() is a non-Standard extension and will be removed in the future.\"\r\n\r\n\r\n#if _HAS_CXX26 && !defined(_SILENCE_VECTOR_BOOL_STATIC_REFERENCE_SWAP_DEPRECATION_WARNING) \\\r\n    && !defined(_SILENCE_ALL_CXX26_DEPRECATION_WARNINGS)\r\n#define _DEPRECATE_VECTOR_BOOL_STATIC_REFERENCE_SWAP                                                                  \\\r\n    [[deprecated(\"warning STL4049: Static std::vector<bool>::swap(reference, reference) is deprecated by C++26 (see \" \\\r\n                 \"LWG-3638 and P3612R1). Use non-member function swap(reference, reference) instead. You can define \" \\\r\n                 \"_SILENCE_VECTOR_BOOL_STATIC_REFERENCE_SWAP_DEPRECATION_WARNING or \"                                 \\\r\n                 \"_SILENCE_ALL_CXX26_DEPRECATION_WARNINGS to suppress this warning.\")]]\r\n#else // ^^^ warning enabled / warning disabled vvv\r\n#define _DEPRECATE_VECTOR_BOOL_STATIC_REFERENCE_SWAP\r\n#endif // ^^^ warning disabled ^^^\r\n\r\n// next warning number: STL4050\r\n\r\n// next error number: STL1014\r\n\r\n// P0619R4 Removing C++17-Deprecated Features\r\n#ifndef _HAS_FEATURES_REMOVED_IN_CXX20\r\n#define _HAS_FEATURES_REMOVED_IN_CXX20 (!_HAS_CXX20)\r\n#endif // !defined(_HAS_FEATURES_REMOVED_IN_CXX20)\r\n\r\n#ifndef _HAS_DEPRECATED_ADAPTOR_TYPEDEFS\r\n#define _HAS_DEPRECATED_ADAPTOR_TYPEDEFS (_HAS_FEATURES_REMOVED_IN_CXX20)\r\n#endif // !defined(_HAS_DEPRECATED_ADAPTOR_TYPEDEFS)\r\n\r\n#ifndef _HAS_DEPRECATED_ALLOCATOR_MEMBERS\r\n#define _HAS_DEPRECATED_ALLOCATOR_MEMBERS (_HAS_FEATURES_REMOVED_IN_CXX20)\r\n#endif // !defined(_HAS_DEPRECATED_ALLOCATOR_MEMBERS)\r\n\r\n#ifndef _HAS_DEPRECATED_ALLOCATOR_VOID\r\n#define _HAS_DEPRECATED_ALLOCATOR_VOID (_HAS_FEATURES_REMOVED_IN_CXX20)\r\n#endif // !defined(_HAS_DEPRECATED_ALLOCATOR_VOID)\r\n\r\n#ifndef _HAS_DEPRECATED_IS_LITERAL_TYPE\r\n#define _HAS_DEPRECATED_IS_LITERAL_TYPE (_HAS_FEATURES_REMOVED_IN_CXX20)\r\n#endif // !defined(_HAS_DEPRECATED_IS_LITERAL_TYPE)\r\n\r\n#ifndef _HAS_DEPRECATED_NEGATORS\r\n#define _HAS_DEPRECATED_NEGATORS (_HAS_FEATURES_REMOVED_IN_CXX20)\r\n#endif // !defined(_HAS_DEPRECATED_NEGATORS)\r\n\r\n#ifndef _HAS_DEPRECATED_RAW_STORAGE_ITERATOR\r\n#define _HAS_DEPRECATED_RAW_STORAGE_ITERATOR (_HAS_FEATURES_REMOVED_IN_CXX20)\r\n#endif // !defined(_HAS_DEPRECATED_RAW_STORAGE_ITERATOR)\r\n\r\n#ifndef _HAS_DEPRECATED_RESULT_OF\r\n#define _HAS_DEPRECATED_RESULT_OF (_HAS_FEATURES_REMOVED_IN_CXX20)\r\n#endif // !defined(_HAS_DEPRECATED_RESULT_OF)\r\n\r\n#ifndef _HAS_DEPRECATED_SHARED_PTR_UNIQUE\r\n#define _HAS_DEPRECATED_SHARED_PTR_UNIQUE (_HAS_FEATURES_REMOVED_IN_CXX20)\r\n#endif // !defined(_HAS_DEPRECATED_SHARED_PTR_UNIQUE)\r\n\r\n#ifndef _HAS_DEPRECATED_TEMPORARY_BUFFER\r\n#define _HAS_DEPRECATED_TEMPORARY_BUFFER (_HAS_FEATURES_REMOVED_IN_CXX20)\r\n#endif // !defined(_HAS_DEPRECATED_TEMPORARY_BUFFER)\r\n\r\n#ifndef _HAS_DEPRECATED_UNCAUGHT_EXCEPTION\r\n#define _HAS_DEPRECATED_UNCAUGHT_EXCEPTION (_HAS_FEATURES_REMOVED_IN_CXX20)\r\n#endif // !defined(_HAS_DEPRECATED_UNCAUGHT_EXCEPTION)\r\n\r\n#if _HAS_DEPRECATED_ADAPTOR_TYPEDEFS\r\n#define _ARGUMENT_TYPE_NAME        argument_type\r\n#define _FIRST_ARGUMENT_TYPE_NAME  first_argument_type\r\n#define _SECOND_ARGUMENT_TYPE_NAME second_argument_type\r\n#define _RESULT_TYPE_NAME          result_type\r\n#else // ^^^ _HAS_DEPRECATED_ADAPTOR_TYPEDEFS / !_HAS_DEPRECATED_ADAPTOR_TYPEDEFS vvv\r\n#define _ARGUMENT_TYPE_NAME        _Unnameable_argument\r\n#define _FIRST_ARGUMENT_TYPE_NAME  _Unnameable_first_argument\r\n#define _SECOND_ARGUMENT_TYPE_NAME _Unnameable_second_argument\r\n#define _RESULT_TYPE_NAME          _Unnameable_result\r\n#endif // ^^^ !_HAS_DEPRECATED_ADAPTOR_TYPEDEFS ^^^\r\n\r\n// P1423R3 char8_t Backward Compatibility Remediation\r\n// Controls whether we allow the stream insertions this proposal forbids\r\n#ifndef _HAS_STREAM_INSERTION_OPERATORS_DELETED_IN_CXX20\r\n#define _HAS_STREAM_INSERTION_OPERATORS_DELETED_IN_CXX20 (_HAS_FEATURES_REMOVED_IN_CXX20)\r\n#endif // !defined(_HAS_STREAM_INSERTION_OPERATORS_DELETED_IN_CXX20)\r\n\r\n#ifndef _HAS_FEATURES_REMOVED_IN_CXX23\r\n#define _HAS_FEATURES_REMOVED_IN_CXX23 (!_HAS_CXX23)\r\n#endif // !defined(_HAS_FEATURES_REMOVED_IN_CXX23)\r\n\r\n// P2186R2 Removing Garbage Collection Support\r\n#ifndef _HAS_GARBAGE_COLLECTION_SUPPORT_DELETED_IN_CXX23\r\n#define _HAS_GARBAGE_COLLECTION_SUPPORT_DELETED_IN_CXX23 (_HAS_FEATURES_REMOVED_IN_CXX23)\r\n#endif // !defined(_HAS_GARBAGE_COLLECTION_SUPPORT_DELETED_IN_CXX23)\r\n\r\n// C++14\r\n#define __cpp_lib_chrono_udls                      201304L\r\n#define __cpp_lib_complex_udls                     201309L\r\n#define __cpp_lib_exchange_function                201304L\r\n#define __cpp_lib_freestanding_algorithm           202311L\r\n#define __cpp_lib_freestanding_array               202311L\r\n#define __cpp_lib_freestanding_char_traits         202306L\r\n#define __cpp_lib_freestanding_cstdlib             202306L\r\n#define __cpp_lib_freestanding_cstring             202311L\r\n#define __cpp_lib_freestanding_cwchar              202306L\r\n#define __cpp_lib_freestanding_errc                202306L\r\n#define __cpp_lib_freestanding_feature_test_macros 202306L\r\n#define __cpp_lib_freestanding_functional          202306L\r\n#define __cpp_lib_freestanding_iterator            202306L\r\n#define __cpp_lib_freestanding_memory              202306L\r\n#define __cpp_lib_freestanding_operator_new        202306L\r\n#define __cpp_lib_freestanding_ratio               202306L\r\n#define __cpp_lib_freestanding_tuple               202306L\r\n#define __cpp_lib_freestanding_utility             202306L\r\n#define __cpp_lib_generic_associative_lookup       201304L\r\n#define __cpp_lib_initializer_list                 202511L\r\n#define __cpp_lib_integer_sequence                 201304L\r\n#define __cpp_lib_integral_constant_callable       201304L\r\n#define __cpp_lib_is_final                         201402L\r\n#define __cpp_lib_is_null_pointer                  201309L\r\n#define __cpp_lib_make_reverse_iterator            201402L\r\n#define __cpp_lib_make_unique                      201304L\r\n#define __cpp_lib_null_iterators                   201304L\r\n#define __cpp_lib_quoted_string_io                 201304L\r\n#define __cpp_lib_result_of_sfinae                 201210L\r\n#define __cpp_lib_robust_nonmodifying_seq_ops      201304L\r\n#ifndef _M_CEE_PURE\r\n#define __cpp_lib_shared_timed_mutex 201402L\r\n#endif // !defined(_M_CEE_PURE)\r\n#define __cpp_lib_string_udls                  201304L\r\n#define __cpp_lib_transformation_trait_aliases 201304L\r\n#define __cpp_lib_tuple_element_t              201402L\r\n#define __cpp_lib_tuples_by_type               201304L\r\n#define __cpp_lib_valarray                     202511L\r\n\r\n// C++17\r\n#define __cpp_lib_addressof_constexpr              201603L\r\n#define __cpp_lib_allocator_traits_is_always_equal 201411L\r\n#define __cpp_lib_as_const                         201510L\r\n#define __cpp_lib_bool_constant                    201505L\r\n#define __cpp_lib_enable_shared_from_this          201603L\r\n#define __cpp_lib_incomplete_container_elements    201505L\r\n#define __cpp_lib_invoke                           201411L\r\n#define __cpp_lib_logical_traits                   201510L\r\n#define __cpp_lib_map_try_emplace                  201411L\r\n#define __cpp_lib_nonmember_container_access       201411L\r\n#define __cpp_lib_shared_mutex                     201505L\r\n#define __cpp_lib_transparent_operators            201510L\r\n#define __cpp_lib_type_trait_variable_templates    201510L\r\n#define __cpp_lib_uncaught_exceptions              201411L\r\n#define __cpp_lib_unordered_map_try_emplace        201411L\r\n#define __cpp_lib_void_t                           201411L\r\n\r\n#if _HAS_CXX17\r\n#if _HAS_STATIC_RTTI\r\n#define __cpp_lib_any 201606L\r\n#endif // _HAS_STATIC_RTTI\r\n#define __cpp_lib_apply                      201603L\r\n#define __cpp_lib_atomic_is_always_lock_free 201603L\r\n#define __cpp_lib_boyer_moore_searcher       201603L\r\n#if _HAS_STD_BYTE\r\n#define __cpp_lib_byte 201603L\r\n#endif // _HAS_STD_BYTE\r\n#define __cpp_lib_clamp                             201603L\r\n#define __cpp_lib_filesystem                        201703L\r\n#define __cpp_lib_freestanding_charconv             202306L\r\n#define __cpp_lib_freestanding_optional             202311L\r\n#define __cpp_lib_freestanding_string_view          202311L\r\n#define __cpp_lib_freestanding_variant              202311L\r\n#define __cpp_lib_gcd_lcm                           201606L\r\n#define __cpp_lib_hardware_interference_size        201703L\r\n#define __cpp_lib_has_unique_object_representations 201606L\r\n#define __cpp_lib_hypot                             201603L\r\n#define __cpp_lib_is_aggregate                      201703L\r\n#define __cpp_lib_is_invocable                      201703L\r\n#define __cpp_lib_is_swappable                      201603L\r\n#define __cpp_lib_launder                           201606L\r\n#define __cpp_lib_make_from_tuple                   201606L\r\n#define __cpp_lib_math_special_functions            201603L\r\n#define __cpp_lib_memory_resource                   201603L\r\n#define __cpp_lib_node_extract                      201606L\r\n#define __cpp_lib_not_fn                            201603L\r\n#ifndef _M_CEE_PURE\r\n#define __cpp_lib_parallel_algorithm 201603L\r\n#endif // !defined(_M_CEE_PURE)\r\n#define __cpp_lib_raw_memory_algorithms 201606L\r\n#define __cpp_lib_sample                201603L\r\n#define __cpp_lib_scoped_lock           201703L\r\n#define __cpp_lib_shared_ptr_weak_type  201606L\r\n#define __cpp_lib_string_view           201803L\r\n#define __cpp_lib_to_chars              201611L\r\n#endif // _HAS_CXX17\r\n\r\n// C++20\r\n#define __cpp_lib_atomic_value_initialization 201911L\r\n\r\n#ifdef __cpp_char8_t\r\n#define __cpp_lib_char8_t 201907L\r\n#endif // defined(__cpp_char8_t)\r\n\r\n#ifdef __cpp_impl_coroutine\r\n#define __cpp_lib_coroutine 201902L\r\n#endif // defined(__cpp_impl_coroutine)\r\n\r\n#if _HAS_CXX20\r\n#define __cpp_lib_algorithm_iterator_requirements 202207L\r\n#define __cpp_lib_assume_aligned                  201811L\r\n#define __cpp_lib_atomic_flag_test                201907L\r\n#define __cpp_lib_atomic_float                    201711L\r\n#define __cpp_lib_atomic_lock_free_type_aliases   201907L\r\n#define __cpp_lib_atomic_ref                      201806L\r\n#define __cpp_lib_atomic_shared_ptr               201711L\r\n#define __cpp_lib_atomic_wait                     201907L\r\n#define __cpp_lib_barrier                         202302L\r\n#define __cpp_lib_bind_front                      201907L\r\n#define __cpp_lib_bit_cast                        201806L\r\n#define __cpp_lib_bitops                          201907L\r\n#define __cpp_lib_bounded_array_traits            201902L\r\n#define __cpp_lib_common_reference                202302L\r\n#define __cpp_lib_common_reference_wrapper        202302L\r\n#define __cpp_lib_concepts                        202207L\r\n#define __cpp_lib_constexpr_algorithms            201806L\r\n#define __cpp_lib_constexpr_complex               201711L\r\n#define __cpp_lib_constexpr_dynamic_alloc         201907L\r\n#define __cpp_lib_constexpr_functional            201907L\r\n#define __cpp_lib_constexpr_iterator              201811L\r\n#define __cpp_lib_constexpr_numeric               201911L\r\n#define __cpp_lib_constexpr_string                201907L\r\n#define __cpp_lib_constexpr_string_view           201811L\r\n#define __cpp_lib_constexpr_tuple                 201811L\r\n#define __cpp_lib_constexpr_utility               201811L\r\n#define __cpp_lib_constexpr_vector                201907L\r\n#define __cpp_lib_destroying_delete               201806L\r\n#define __cpp_lib_endian                          201907L\r\n#define __cpp_lib_erase_if                        202002L\r\n#define __cpp_lib_format                          202304L\r\n#define __cpp_lib_format_uchar                    202311L\r\n#define __cpp_lib_freestanding_ranges             202306L\r\n#define __cpp_lib_generic_unordered_lookup        201811L\r\n#define __cpp_lib_int_pow2                        202002L\r\n#define __cpp_lib_integer_comparison_functions    202002L\r\n#define __cpp_lib_interpolate                     201902L\r\n#define __cpp_lib_is_constant_evaluated           201811L\r\n\r\n#ifndef __clang__ // TRANSITION, LLVM-48860\r\n#define __cpp_lib_is_layout_compatible 201907L\r\n#endif // ^^^ no workaround ^^^\r\n\r\n#define __cpp_lib_is_nothrow_convertible 201806L\r\n\r\n#ifndef __clang__ // TRANSITION, LLVM-48860\r\n#define __cpp_lib_is_pointer_interconvertible 201907L\r\n#endif // ^^^ no workaround ^^^\r\n\r\n#define __cpp_lib_jthread                 201911L\r\n#define __cpp_lib_latch                   201907L\r\n#define __cpp_lib_list_remove_return_type 201806L\r\n#define __cpp_lib_math_constants          201907L\r\n\r\n#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, Clang and EDG support for modules\r\n#define __cpp_lib_modules 202207L\r\n#endif // ^^^ no workaround ^^^\r\n\r\n#define __cpp_lib_move_iterator_concept   202207L\r\n#define __cpp_lib_polymorphic_allocator   201902L\r\n#define __cpp_lib_remove_cvref            201711L\r\n#define __cpp_lib_semaphore               201907L\r\n#define __cpp_lib_smart_ptr_for_overwrite 202002L\r\n#define __cpp_lib_source_location         201907L\r\n#define __cpp_lib_span                    202002L\r\n#define __cpp_lib_ssize                   201902L\r\n#define __cpp_lib_starts_ends_with        201711L\r\n#define __cpp_lib_syncbuf                 201803L\r\n#define __cpp_lib_three_way_comparison    201907L\r\n#define __cpp_lib_to_address              201711L\r\n#define __cpp_lib_to_array                201907L\r\n#define __cpp_lib_type_identity           201806L\r\n#define __cpp_lib_unwrap_ref              201811L\r\n#endif // _HAS_CXX20\r\n\r\n// C++23\r\n#if _HAS_CXX23\r\n#define __cpp_lib_adaptor_iterator_pair_constructor 202106L\r\n#define __cpp_lib_allocate_at_least                 202302L\r\n#define __cpp_lib_associative_heterogeneous_erasure 202110L\r\n#define __cpp_lib_bind_back                         202202L\r\n#define __cpp_lib_byteswap                          202110L\r\n#define __cpp_lib_constexpr_bitset                  202207L\r\n#define __cpp_lib_constexpr_charconv                202207L\r\n#define __cpp_lib_constexpr_typeinfo                202106L\r\n#define __cpp_lib_containers_ranges                 202202L\r\n#define __cpp_lib_expected                          202211L\r\n#define __cpp_lib_flat_map                          202511L\r\n#define __cpp_lib_flat_set                          202511L\r\n#define __cpp_lib_format_ranges                     202207L\r\n#define __cpp_lib_formatters                        202302L\r\n#define __cpp_lib_forward_like                      202207L\r\n#define __cpp_lib_freestanding_expected             202311L\r\n#define __cpp_lib_freestanding_mdspan               202311L\r\n#define __cpp_lib_generator                         202207L\r\n#define __cpp_lib_invoke_r                          202106L\r\n#define __cpp_lib_ios_noreplace                     202207L\r\n\r\n#if !defined(__EDG__) && (defined(__clang__) || _MSC_VER >= 1951) // TRANSITION, GH-5738, VSO-2581623, toolset update\r\n#define __cpp_lib_is_implicit_lifetime 202302L\r\n#endif // ^^^ no workaround ^^^\r\n\r\n#define __cpp_lib_is_scoped_enum           202011L\r\n#define __cpp_lib_mdspan                   202207L\r\n#define __cpp_lib_move_only_function       202110L\r\n#define __cpp_lib_out_ptr                  202311L\r\n#define __cpp_lib_print                    202406L\r\n#define __cpp_lib_ranges_as_const          202311L\r\n#define __cpp_lib_ranges_as_rvalue         202207L\r\n#define __cpp_lib_ranges_cartesian_product 202207L\r\n#define __cpp_lib_ranges_chunk             202202L\r\n#define __cpp_lib_ranges_chunk_by          202202L\r\n#define __cpp_lib_ranges_contains          202207L\r\n#define __cpp_lib_ranges_enumerate         202302L\r\n#define __cpp_lib_ranges_find_last         202207L\r\n#define __cpp_lib_ranges_fold              202207L\r\n#define __cpp_lib_ranges_iota              202202L\r\n#define __cpp_lib_ranges_join_with         202202L\r\n#define __cpp_lib_ranges_repeat            202207L\r\n#define __cpp_lib_ranges_slide             202202L\r\n#define __cpp_lib_ranges_starts_ends_with  202106L\r\n#define __cpp_lib_ranges_stride            202207L\r\n#define __cpp_lib_ranges_to_container      202202L\r\n#define __cpp_lib_ranges_zip               202110L\r\n\r\n#if defined(__clang__) || defined(__EDG__) || _MSC_VER >= 1951 // TRANSITION, GH-5755, toolset update\r\n#define __cpp_lib_reference_from_temporary 202202L\r\n#endif // ^^^ no workaround ^^^\r\n\r\n#define __cpp_lib_spanstream                  202106L\r\n#define __cpp_lib_stacktrace                  202011L\r\n#define __cpp_lib_stdatomic_h                 202011L\r\n#define __cpp_lib_string_contains             202011L\r\n#define __cpp_lib_string_resize_and_overwrite 202110L\r\n#define __cpp_lib_to_underlying               202102L\r\n#define __cpp_lib_tuple_like                  202207L\r\n#define __cpp_lib_unreachable                 202202L\r\n#endif // _HAS_CXX23\r\n\r\n// macros with language mode sensitivity\r\n#if _HAS_CXX20\r\n#define __cpp_lib_array_constexpr 201811L // P1032R1 Miscellaneous constexpr\r\n#elif _HAS_CXX17\r\n#define __cpp_lib_array_constexpr 201803L // P0858R0 Constexpr Iterator Requirements\r\n#endif\r\n\r\n#if _HAS_CXX20\r\n#define __cpp_lib_chrono 201907L // P1466R3 Miscellaneous Minor Fixes For <chrono>\r\n#elif _HAS_CXX17\r\n#define __cpp_lib_chrono 201611L // P0505R0 constexpr For <chrono> (Again)\r\n#else\r\n#define __cpp_lib_chrono 201510L // P0092R1 <chrono> floor(), ceil(), round(), abs()\r\n#endif\r\n\r\n#if _HAS_CXX23\r\n#define __cpp_lib_constexpr_memory 202202L // P2273R3 constexpr unique_ptr\r\n#elif _HAS_CXX20\r\n#define __cpp_lib_constexpr_memory 201811L // P1006R1 constexpr For pointer_traits<T*>::pointer_to()\r\n#endif\r\n\r\n#ifndef _M_CEE_PURE\r\n#if _HAS_CXX20\r\n#define __cpp_lib_execution 201902L // P1001R2 execution::unseq\r\n#elif _HAS_CXX17\r\n#define __cpp_lib_execution 201603L // P0024R2 Parallel Algorithms\r\n#endif // language mode\r\n#endif // !defined(_M_CEE_PURE)\r\n\r\n#if _HAS_CXX23\r\n#define __cpp_lib_optional 202110L // P0798R8 Monadic Operations For optional\r\n#elif _HAS_CXX20\r\n#define __cpp_lib_optional 202106L // P2231R1 Completing constexpr In optional And variant\r\n#elif _HAS_CXX17\r\n#define __cpp_lib_optional 201606L // P0307R2 Making Optional Greater Equal Again\r\n#endif\r\n\r\n#if _HAS_CXX23\r\n// P2997R1 Removing The Common Reference Requirement From The Indirectly Invocable Concepts\r\n#define __cpp_lib_ranges 202406L\r\n#elif _HAS_CXX20\r\n#define __cpp_lib_ranges 202110L // P2415R2 What Is A view?\r\n#endif\r\n\r\n#if _HAS_CXX20\r\n#define __cpp_lib_shared_ptr_arrays 201707L // P0674R1 make_shared() For Arrays\r\n#else\r\n#define __cpp_lib_shared_ptr_arrays 201611L // P0497R0 Fixing shared_ptr For Arrays\r\n#endif\r\n\r\n#if _HAS_CXX23\r\n#define __cpp_lib_shift 202202L // P2440R1 ranges::shift_left, ranges::shift_right\r\n#elif _HAS_CXX20\r\n#define __cpp_lib_shift 201806L // P0769R2 shift_left(), shift_right()\r\n#endif\r\n\r\n#if _HAS_CXX20\r\n#define __cpp_lib_variant 202106L // P2231R1 Completing constexpr In optional And variant\r\n#elif _HAS_CXX17\r\n#define __cpp_lib_variant 202102L // P2162R2 Inheriting From variant\r\n#endif\r\n\r\n#ifdef _RTC_CONVERSION_CHECKS_ENABLED\r\n_EMIT_STL_ERROR(STL1013, \"The STL doesn't support /RTCc because it rejects conformant code. Remove the /RTCc option.\");\r\n#endif\r\n\r\n#define _EMPTY_ARGUMENT // for empty macro argument\r\n\r\n// extern \"C++\" attaches declarations to the global module, see N4964 [module.unit]/7.2.\r\n// It has no effect in C++14/17.\r\n\r\n// In the STL's headers (which might be used to build the named module std), we unconditionally\r\n// and directly mark declarations of our separately compiled machinery as extern \"C++\", allowing\r\n// the named module to work with the separately compiled code (which is always built classically).\r\n\r\n// TRANSITION: _USE_EXTERN_CXX_EVERYWHERE_FOR_STL controls whether we also wrap the STL's\r\n// header-only code in this linkage-specification, as a temporary workaround to allow\r\n// importing the named module in a translation unit with classic includes.\r\n\r\n#ifndef _USE_EXTERN_CXX_EVERYWHERE_FOR_STL\r\n#define _USE_EXTERN_CXX_EVERYWHERE_FOR_STL _HAS_CXX20\r\n#endif // ^^^ !defined(_USE_EXTERN_CXX_EVERYWHERE_FOR_STL) ^^^\r\n\r\n#if _USE_EXTERN_CXX_EVERYWHERE_FOR_STL\r\n#define _EXTERN_CXX_WORKAROUND     extern \"C++\" {\r\n#define _END_EXTERN_CXX_WORKAROUND }\r\n#else // ^^^ _USE_EXTERN_CXX_EVERYWHERE_FOR_STL / !_USE_EXTERN_CXX_EVERYWHERE_FOR_STL vvv\r\n#define _EXTERN_CXX_WORKAROUND\r\n#define _END_EXTERN_CXX_WORKAROUND\r\n#endif // ^^^ !_USE_EXTERN_CXX_EVERYWHERE_FOR_STL ^^^\r\n\r\n#define _STD_BEGIN         \\\r\n    _EXTERN_CXX_WORKAROUND \\\r\n    namespace std {\r\n#define _STD_END \\\r\n    }            \\\r\n    _END_EXTERN_CXX_WORKAROUND\r\n\r\n#define _STD    ::std::\r\n#define _CHRONO ::std::chrono::\r\n#define _RANGES ::std::ranges::\r\n\r\n#define _CSTD ::\r\n\r\n#ifdef _M_CEE_PURE\r\n#define _EXTERN_C_UNLESS_PURE\r\n#define _END_EXTERN_C_UNLESS_PURE\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n#define _EXTERN_C_UNLESS_PURE     extern \"C\" {\r\n#define _END_EXTERN_C_UNLESS_PURE } // extern \"C\"\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\n#if defined(MRTDLL) && !defined(_CRTBLD)\r\n#error In yvals_core.h, defined(MRTDLL) implies defined(_CRTBLD); !defined(_CRTBLD) implies !defined(MRTDLL)\r\n#endif // defined(MRTDLL) && !defined(_CRTBLD)\r\n\r\n#if defined(MRTDLL) && !defined(_M_CEE_PURE)\r\n#error In yvals_core.h, defined(MRTDLL) implies defined(_M_CEE_PURE); !defined(_M_CEE_PURE) implies !defined(MRTDLL)\r\n#endif // defined(MRTDLL) && !defined(_M_CEE_PURE)\r\n\r\n// The earliest Windows supported by this implementation is Windows 10.\r\n\r\n#ifdef __cpp_noexcept_function_type\r\n#define _NOEXCEPT_FNPTR noexcept\r\n#else // ^^^ defined(__cpp_noexcept_function_type) / !defined(__cpp_noexcept_function_type) vvv\r\n#define _NOEXCEPT_FNPTR\r\n#endif // ^^^ !defined(__cpp_noexcept_function_type) ^^^\r\n\r\n#ifdef __clang__\r\n#define _STL_INTRIN_HEADER <intrin.h>\r\n#define _STL_UNREACHABLE   __builtin_unreachable()\r\n#else // ^^^ defined(__clang__) / !defined(__clang__) vvv\r\n#define _STL_INTRIN_HEADER <intrin0.h>\r\n#define _STL_UNREACHABLE   __assume(false)\r\n#endif // ^^^ !defined(__clang__) ^^^\r\n\r\n#ifdef _ENABLE_STL_INTERNAL_CHECK\r\n#define _STL_INTERNAL_STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n#else // ^^^ defined(_ENABLE_STL_INTERNAL_CHECK) / !defined(_ENABLE_STL_INTERNAL_CHECK) vvv\r\n#define _STL_INTERNAL_STATIC_ASSERT(...)\r\n#endif // ^^^ !defined(_ENABLE_STL_INTERNAL_CHECK) ^^^\r\n\r\n#ifdef __CUDACC__ // TRANSITION, CUDA rejects MSVC __restrict (GH-5061); CUDA __restrict__ is unusable in C++ (GH-5097)\r\n#define _RESTRICT\r\n#else // ^^^ workaround / no workaround vvv\r\n#define _RESTRICT __restrict\r\n#endif // ^^^ no workaround ^^^\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _YVALS_CORE_H_\r\n"
  },
  {
    "path": "stl/modules/modules.json",
    "content": "{\r\n    \"version\": 1,\r\n    \"revision\": 0,\r\n    \"library\": \"microsoft/STL\",\r\n    \"module-sources\": [\r\n        \"std.ixx\",\r\n        \"std.compat.ixx\"\r\n    ]\r\n}\r\n"
  },
  {
    "path": "stl/modules/std.compat.ixx",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nexport module std.compat;\r\n\r\nexport import std;\r\n\r\n// \"C++ headers for C library facilities\" [tab:headers.cpp.c]\r\n\r\n// <cassert>\r\n// Nothing to do, only macros.\r\n\r\n// <cctype>\r\nexport using std::isalnum;\r\nexport using std::isalpha;\r\nexport using std::isblank;\r\nexport using std::iscntrl;\r\nexport using std::isdigit;\r\nexport using std::isgraph;\r\nexport using std::islower;\r\nexport using std::isprint;\r\nexport using std::ispunct;\r\nexport using std::isspace;\r\nexport using std::isupper;\r\nexport using std::isxdigit;\r\nexport using std::tolower;\r\nexport using std::toupper;\r\n\r\n// <cerrno>\r\n// Nothing to do, only macros.\r\n\r\n// <cfenv>\r\nexport using std::fenv_t;\r\nexport using std::fexcept_t;\r\nexport using std::feclearexcept;\r\nexport using std::fegetexceptflag;\r\nexport using std::feraiseexcept;\r\nexport using std::fesetexceptflag;\r\nexport using std::fetestexcept;\r\nexport using std::fegetround;\r\nexport using std::fesetround;\r\nexport using std::fegetenv;\r\nexport using std::feholdexcept;\r\nexport using std::fesetenv;\r\nexport using std::feupdateenv;\r\n\r\n// <cfloat>\r\n// Nothing to do, only macros.\r\n\r\n// <cinttypes>\r\nexport using std::imaxdiv_t;\r\nexport using std::imaxabs;\r\nexport using std::imaxdiv;\r\nexport using std::strtoimax;\r\nexport using std::strtoumax;\r\nexport using std::wcstoimax;\r\nexport using std::wcstoumax;\r\n\r\n// <climits>\r\n// Nothing to do, only macros.\r\n\r\n// <clocale>\r\nexport using std::lconv;\r\nexport using std::setlocale;\r\nexport using std::localeconv;\r\n\r\n// <cmath>\r\nexport using std::float_t;\r\nexport using std::double_t;\r\nexport using std::acos;\r\nexport using std::acosf;\r\nexport using std::acosl;\r\nexport using std::asin;\r\nexport using std::asinf;\r\nexport using std::asinl;\r\nexport using std::atan;\r\nexport using std::atanf;\r\nexport using std::atanl;\r\nexport using std::atan2;\r\nexport using std::atan2f;\r\nexport using std::atan2l;\r\nexport using std::cos;\r\nexport using std::cosf;\r\nexport using std::cosl;\r\nexport using std::sin;\r\nexport using std::sinf;\r\nexport using std::sinl;\r\nexport using std::tan;\r\nexport using std::tanf;\r\nexport using std::tanl;\r\nexport using std::acosh;\r\nexport using std::acoshf;\r\nexport using std::acoshl;\r\nexport using std::asinh;\r\nexport using std::asinhf;\r\nexport using std::asinhl;\r\nexport using std::atanh;\r\nexport using std::atanhf;\r\nexport using std::atanhl;\r\nexport using std::cosh;\r\nexport using std::coshf;\r\nexport using std::coshl;\r\nexport using std::sinh;\r\nexport using std::sinhf;\r\nexport using std::sinhl;\r\nexport using std::tanh;\r\nexport using std::tanhf;\r\nexport using std::tanhl;\r\nexport using std::exp;\r\nexport using std::expf;\r\nexport using std::expl;\r\nexport using std::exp2;\r\nexport using std::exp2f;\r\nexport using std::exp2l;\r\nexport using std::expm1;\r\nexport using std::expm1f;\r\nexport using std::expm1l;\r\nexport using std::frexp;\r\nexport using std::frexpf;\r\nexport using std::frexpl;\r\nexport using std::ilogb;\r\nexport using std::ilogbf;\r\nexport using std::ilogbl;\r\nexport using std::ldexp;\r\nexport using std::ldexpf;\r\nexport using std::ldexpl;\r\nexport using std::log;\r\nexport using std::logf;\r\nexport using std::logl;\r\nexport using std::log10;\r\nexport using std::log10f;\r\nexport using std::log10l;\r\nexport using std::log1p;\r\nexport using std::log1pf;\r\nexport using std::log1pl;\r\nexport using std::log2;\r\nexport using std::log2f;\r\nexport using std::log2l;\r\nexport using std::logb;\r\nexport using std::logbf;\r\nexport using std::logbl;\r\nexport using std::modf;\r\nexport using std::modff;\r\nexport using std::modfl;\r\nexport using std::scalbn;\r\nexport using std::scalbnf;\r\nexport using std::scalbnl;\r\nexport using std::scalbln;\r\nexport using std::scalblnf;\r\nexport using std::scalblnl;\r\nexport using std::cbrt;\r\nexport using std::cbrtf;\r\nexport using std::cbrtl;\r\nexport using std::abs;\r\nexport using std::fabs;\r\nexport using std::fabsf;\r\nexport using std::fabsl;\r\nexport using std::_Binary_hypot::hypot; // export only C's hypot(x, y), not C++'s hypot(x, y, z)\r\nexport using std::hypotf;\r\nexport using std::hypotl;\r\nexport using std::pow;\r\nexport using std::powf;\r\nexport using std::powl;\r\nexport using std::sqrt;\r\nexport using std::sqrtf;\r\nexport using std::sqrtl;\r\nexport using std::erf;\r\nexport using std::erff;\r\nexport using std::erfl;\r\nexport using std::erfc;\r\nexport using std::erfcf;\r\nexport using std::erfcl;\r\nexport using std::lgamma;\r\nexport using std::lgammaf;\r\nexport using std::lgammal;\r\nexport using std::tgamma;\r\nexport using std::tgammaf;\r\nexport using std::tgammal;\r\nexport using std::ceil;\r\nexport using std::ceilf;\r\nexport using std::ceill;\r\nexport using std::floor;\r\nexport using std::floorf;\r\nexport using std::floorl;\r\nexport using std::nearbyint;\r\nexport using std::nearbyintf;\r\nexport using std::nearbyintl;\r\nexport using std::rint;\r\nexport using std::rintf;\r\nexport using std::rintl;\r\nexport using std::lrint;\r\nexport using std::lrintf;\r\nexport using std::lrintl;\r\nexport using std::llrint;\r\nexport using std::llrintf;\r\nexport using std::llrintl;\r\nexport using std::round;\r\nexport using std::roundf;\r\nexport using std::roundl;\r\nexport using std::lround;\r\nexport using std::lroundf;\r\nexport using std::lroundl;\r\nexport using std::llround;\r\nexport using std::llroundf;\r\nexport using std::llroundl;\r\nexport using std::trunc;\r\nexport using std::truncf;\r\nexport using std::truncl;\r\nexport using std::fmod;\r\nexport using std::fmodf;\r\nexport using std::fmodl;\r\nexport using std::remainder;\r\nexport using std::remainderf;\r\nexport using std::remainderl;\r\nexport using std::remquo;\r\nexport using std::remquof;\r\nexport using std::remquol;\r\nexport using std::copysign;\r\nexport using std::copysignf;\r\nexport using std::copysignl;\r\nexport using std::nan;\r\nexport using std::nanf;\r\nexport using std::nanl;\r\nexport using std::nextafter;\r\nexport using std::nextafterf;\r\nexport using std::nextafterl;\r\nexport using std::nexttoward;\r\nexport using std::nexttowardf;\r\nexport using std::nexttowardl;\r\nexport using std::fdim;\r\nexport using std::fdimf;\r\nexport using std::fdiml;\r\nexport using std::fmax;\r\nexport using std::fmaxf;\r\nexport using std::fmaxl;\r\nexport using std::fmin;\r\nexport using std::fminf;\r\nexport using std::fminl;\r\nexport using std::fma;\r\nexport using std::fmaf;\r\nexport using std::fmal;\r\nexport using std::fpclassify;\r\nexport using std::isfinite;\r\nexport using std::isinf;\r\nexport using std::isnan;\r\nexport using std::isnormal;\r\nexport using std::signbit;\r\nexport using std::isgreater;\r\nexport using std::isgreaterequal;\r\nexport using std::isless;\r\nexport using std::islessequal;\r\nexport using std::islessgreater;\r\nexport using std::isunordered;\r\n\r\n// <csetjmp>\r\nexport using std::jmp_buf;\r\nexport using std::longjmp;\r\n\r\n// <csignal>\r\nexport using std::sig_atomic_t;\r\nexport using std::signal;\r\nexport using std::raise;\r\n\r\n// <cstdarg>\r\nexport using std::va_list;\r\n\r\n// <cstddef>\r\nexport using std::ptrdiff_t;\r\nexport using std::size_t;\r\nexport using std::max_align_t;\r\nexport using std::nullptr_t; // added to the C Standard Library in C23\r\n\r\n// <cstdint>\r\nexport using std::int8_t;\r\nexport using std::int16_t;\r\nexport using std::int32_t;\r\nexport using std::int64_t;\r\nexport using std::int_fast8_t;\r\nexport using std::int_fast16_t;\r\nexport using std::int_fast32_t;\r\nexport using std::int_fast64_t;\r\nexport using std::int_least8_t;\r\nexport using std::int_least16_t;\r\nexport using std::int_least32_t;\r\nexport using std::int_least64_t;\r\nexport using std::intmax_t;\r\nexport using std::intptr_t;\r\nexport using std::uint8_t;\r\nexport using std::uint16_t;\r\nexport using std::uint32_t;\r\nexport using std::uint64_t;\r\nexport using std::uint_fast8_t;\r\nexport using std::uint_fast16_t;\r\nexport using std::uint_fast32_t;\r\nexport using std::uint_fast64_t;\r\nexport using std::uint_least8_t;\r\nexport using std::uint_least16_t;\r\nexport using std::uint_least32_t;\r\nexport using std::uint_least64_t;\r\nexport using std::uintmax_t;\r\nexport using std::uintptr_t;\r\n\r\n// <cstdio>\r\n// already exported std::size_t, see <cstddef>\r\nexport using std::FILE;\r\nexport using std::fpos_t;\r\nexport using std::remove;\r\nexport using std::rename;\r\nexport using std::tmpfile;\r\nexport using std::tmpnam;\r\nexport using std::fclose;\r\nexport using std::fflush;\r\nexport using std::fopen;\r\nexport using std::freopen;\r\nexport using std::setbuf;\r\nexport using std::setvbuf;\r\nexport using std::fprintf;\r\nexport using std::fscanf;\r\nexport using std::printf;\r\nexport using std::scanf;\r\nexport using std::snprintf;\r\nexport using std::sprintf;\r\nexport using std::sscanf;\r\nexport using std::vfprintf;\r\nexport using std::vfscanf;\r\nexport using std::vprintf;\r\nexport using std::vscanf;\r\nexport using std::vsnprintf;\r\nexport using std::vsprintf;\r\nexport using std::vsscanf;\r\nexport using std::fgetc;\r\nexport using std::fgets;\r\nexport using std::fputc;\r\nexport using std::fputs;\r\nexport using std::getc;\r\nexport using std::getchar;\r\nexport using std::putc;\r\nexport using std::putchar;\r\nexport using std::puts;\r\nexport using std::ungetc;\r\nexport using std::fread;\r\nexport using std::fwrite;\r\nexport using std::fgetpos;\r\nexport using std::fseek;\r\nexport using std::fsetpos;\r\nexport using std::ftell;\r\nexport using std::rewind;\r\nexport using std::clearerr;\r\nexport using std::feof;\r\nexport using std::ferror;\r\nexport using std::perror;\r\n\r\n// <cstdlib>\r\n// already exported std::size_t, see <cstddef>\r\nexport using std::div_t;\r\nexport using std::ldiv_t;\r\nexport using std::lldiv_t;\r\nexport using std::abort;\r\nexport using std::atexit;\r\nexport using std::at_quick_exit;\r\nexport using std::exit;\r\nexport using std::_Exit;\r\nexport using std::quick_exit;\r\nexport using std::getenv;\r\nexport using std::system;\r\nexport using std::calloc;\r\nexport using std::free;\r\nexport using std::malloc;\r\nexport using std::realloc;\r\nexport using std::atof;\r\nexport using std::atoi;\r\nexport using std::atol;\r\nexport using std::atoll;\r\nexport using std::strtod;\r\nexport using std::strtof;\r\nexport using std::strtold;\r\nexport using std::strtol;\r\nexport using std::strtoll;\r\nexport using std::strtoul;\r\nexport using std::strtoull;\r\nexport using std::mblen;\r\nexport using std::mbtowc;\r\nexport using std::wctomb;\r\nexport using std::mbstowcs;\r\nexport using std::wcstombs;\r\nexport using std::bsearch;\r\nexport using std::qsort;\r\nexport using std::rand;\r\nexport using std::srand;\r\n// already exported std::abs, see <cmath>\r\nexport using std::labs;\r\nexport using std::llabs;\r\nexport using std::div;\r\nexport using std::ldiv;\r\nexport using std::lldiv;\r\n\r\n// <cstring>\r\n// already exported std::size_t, see <cstddef>\r\nexport using std::memcpy;\r\nexport using std::memmove;\r\nexport using std::strcpy;\r\nexport using std::strncpy;\r\nexport using std::strcat;\r\nexport using std::strncat;\r\nexport using std::memcmp;\r\nexport using std::strcmp;\r\nexport using std::strcoll;\r\nexport using std::strncmp;\r\nexport using std::strxfrm;\r\nexport using std::memchr;\r\nexport using std::strchr;\r\nexport using std::strcspn;\r\nexport using std::strpbrk;\r\nexport using std::strrchr;\r\nexport using std::strspn;\r\nexport using std::strstr;\r\nexport using std::strtok;\r\nexport using std::memset;\r\nexport using std::strerror;\r\nexport using std::strlen;\r\n\r\n// <ctime>\r\n// already exported std::size_t, see <cstddef>\r\nexport using std::clock_t;\r\nexport using std::time_t;\r\nexport using std::timespec;\r\nexport using std::tm;\r\nexport using std::clock;\r\nexport using std::difftime;\r\nexport using std::mktime;\r\nexport using std::time;\r\nexport using std::timespec_get;\r\nexport using std::asctime;\r\nexport using std::ctime;\r\nexport using std::gmtime;\r\nexport using std::localtime;\r\nexport using std::strftime;\r\n\r\n// <cuchar>\r\nexport using std::mbstate_t;\r\n// already exported std::size_t, see <cstddef>\r\nexport using std::mbrtoc16;\r\nexport using std::c16rtomb;\r\nexport using std::mbrtoc32;\r\nexport using std::c32rtomb;\r\n\r\n// <cwchar>\r\n// already exported std::size_t, see <cstddef>\r\n// already exported std::mbstate_t, see <cuchar>\r\nexport using std::wint_t;\r\n// already exported std::tm, see <ctime>\r\nexport using std::fwprintf;\r\nexport using std::fwscanf;\r\nexport using std::swprintf;\r\nexport using std::swscanf;\r\nexport using std::vfwprintf;\r\nexport using std::vfwscanf;\r\nexport using std::vswprintf;\r\nexport using std::vswscanf;\r\nexport using std::vwprintf;\r\nexport using std::vwscanf;\r\nexport using std::wprintf;\r\nexport using std::wscanf;\r\nexport using std::fgetwc;\r\nexport using std::fgetws;\r\nexport using std::fputwc;\r\nexport using std::fputws;\r\nexport using std::fwide;\r\nexport using std::getwc;\r\nexport using std::getwchar;\r\nexport using std::putwc;\r\nexport using std::putwchar;\r\nexport using std::ungetwc;\r\nexport using std::wcstod;\r\nexport using std::wcstof;\r\nexport using std::wcstold;\r\nexport using std::wcstol;\r\nexport using std::wcstoll;\r\nexport using std::wcstoul;\r\nexport using std::wcstoull;\r\nexport using std::wcscpy;\r\nexport using std::wcsncpy;\r\nexport using std::wmemcpy;\r\nexport using std::wmemmove;\r\nexport using std::wcscat;\r\nexport using std::wcsncat;\r\nexport using std::wcscmp;\r\nexport using std::wcscoll;\r\nexport using std::wcsncmp;\r\nexport using std::wcsxfrm;\r\nexport using std::wmemcmp;\r\nexport using std::wcschr;\r\nexport using std::wcscspn;\r\nexport using std::wcspbrk;\r\nexport using std::wcsrchr;\r\nexport using std::wcsspn;\r\nexport using std::wcsstr;\r\nexport using std::wcstok;\r\nexport using std::wmemchr;\r\nexport using std::wcslen;\r\nexport using std::wmemset;\r\nexport using std::wcsftime;\r\nexport using std::btowc;\r\nexport using std::wctob;\r\nexport using std::mbsinit;\r\nexport using std::mbrlen;\r\nexport using std::mbrtowc;\r\nexport using std::wcrtomb;\r\nexport using std::mbsrtowcs;\r\nexport using std::wcsrtombs;\r\n\r\n// <cwctype>\r\n// already exported std::wint_t, see <cwchar>\r\nexport using std::wctrans_t;\r\nexport using std::wctype_t;\r\nexport using std::iswalnum;\r\nexport using std::iswalpha;\r\nexport using std::iswblank;\r\nexport using std::iswcntrl;\r\nexport using std::iswdigit;\r\nexport using std::iswgraph;\r\nexport using std::iswlower;\r\nexport using std::iswprint;\r\nexport using std::iswpunct;\r\nexport using std::iswspace;\r\nexport using std::iswupper;\r\nexport using std::iswxdigit;\r\nexport using std::iswctype;\r\nexport using std::wctype;\r\nexport using std::towlower;\r\nexport using std::towupper;\r\nexport using std::towctrans;\r\nexport using std::wctrans;\r\n"
  },
  {
    "path": "stl/modules/std.ixx",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// In a module-file, the optional `module;` must appear first; see [cpp.pre].\r\nmodule;\r\n\r\n// This named module expects to be built with classic headers, not header units.\r\n#define _BUILD_STD_MODULE\r\n\r\n// The subset of \"C headers\" [tab:c.headers] corresponding to\r\n// the \"C++ headers for C library facilities\" [tab:headers.cpp.c]\r\n#include <assert.h>\r\n#include <ctype.h>\r\n#include <errno.h>\r\n#include <fenv.h>\r\n#include <float.h>\r\n#include <inttypes.h>\r\n#include <limits.h>\r\n#include <locale.h>\r\n#include <math.h>\r\n#include <setjmp.h>\r\n#include <signal.h>\r\n#include <stdarg.h>\r\n#include <stddef.h>\r\n#include <stdint.h>\r\n#include <stdio.h>\r\n#include <stdlib.h>\r\n#include <string.h>\r\n#include <time.h>\r\n#include <uchar.h>\r\n#include <wchar.h>\r\n#include <wctype.h>\r\n\r\n// <intrin.h> defines some types outside of `extern \"C\"` or `extern \"C++\"`.\r\n#include <intrin.h>\r\n\r\nexport module std;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 5244) // '#include <meow>' in the purview of module 'std' appears erroneous.\r\n\r\n// \"C++ library headers\" [tab:headers.cpp]\r\n#include <algorithm>\r\n#include <array>\r\n#include <atomic>\r\n#include <barrier>\r\n#include <bit>\r\n#include <bitset>\r\n#include <charconv>\r\n#include <chrono>\r\n#include <codecvt>\r\n#include <compare>\r\n#include <complex>\r\n#include <concepts>\r\n#include <condition_variable>\r\n#include <coroutine>\r\n#include <deque>\r\n#include <exception>\r\n#include <execution>\r\n#include <filesystem>\r\n#include <format>\r\n#include <forward_list>\r\n#include <fstream>\r\n#include <functional>\r\n#include <future>\r\n#include <initializer_list>\r\n#include <iomanip>\r\n#include <ios>\r\n#include <iosfwd>\r\n#include <iostream>\r\n#include <istream>\r\n#include <iterator>\r\n#include <latch>\r\n#include <limits>\r\n#include <list>\r\n#include <locale>\r\n#include <map>\r\n#include <memory>\r\n#include <memory_resource>\r\n#include <mutex>\r\n#include <new>\r\n#include <numbers>\r\n#include <numeric>\r\n#include <optional>\r\n#include <ostream>\r\n#include <queue>\r\n#include <random>\r\n#include <ranges>\r\n#include <ratio>\r\n#include <regex>\r\n#include <scoped_allocator>\r\n#include <semaphore>\r\n#include <set>\r\n#include <shared_mutex>\r\n#include <source_location>\r\n#include <span>\r\n#include <sstream>\r\n#include <stack>\r\n#include <stdexcept>\r\n#include <stop_token>\r\n#include <streambuf>\r\n#include <string>\r\n#include <string_view>\r\n#include <strstream>\r\n#include <syncstream>\r\n#include <system_error>\r\n#include <thread>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <typeindex>\r\n#include <typeinfo>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <valarray>\r\n#include <variant>\r\n#include <vector>\r\n#include <version>\r\n\r\n#if _HAS_STATIC_RTTI\r\n#include <any>\r\n#endif // _HAS_STATIC_RTTI\r\n\r\n#if _HAS_CXX23\r\n#include <expected>\r\n#include <flat_map>\r\n#include <flat_set>\r\n#include <generator>\r\n#include <mdspan>\r\n#include <print>\r\n#include <spanstream>\r\n#include <stacktrace>\r\n#include <stdfloat>\r\n#endif // _HAS_CXX23\r\n\r\n// \"C++ headers for C library facilities\" [tab:headers.cpp.c]\r\n#include <cassert>\r\n#include <cctype>\r\n#include <cerrno>\r\n#include <cfenv>\r\n#include <cfloat>\r\n#include <cinttypes>\r\n#include <climits>\r\n#include <clocale>\r\n#include <cmath>\r\n#include <csetjmp>\r\n#include <csignal>\r\n#include <cstdarg>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <ctime>\r\n#include <cuchar>\r\n#include <cwchar>\r\n#include <cwctype>\r\n\r\n#pragma warning(pop)\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/amd64.exports",
    "content": "_Aligned_get_default_resource\r\n_Aligned_new_delete_resource\r\n_Aligned_set_default_resource\r\n_Unaligned_get_default_resource\r\n_Unaligned_new_delete_resource\r\n_Unaligned_set_default_resource\r\nnull_memory_resource\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/arm64.exports",
    "content": "_Aligned_get_default_resource\r\n_Aligned_new_delete_resource\r\n_Aligned_set_default_resource\r\n_Unaligned_get_default_resource\r\n_Unaligned_new_delete_resource\r\n_Unaligned_set_default_resource\r\nnull_memory_resource\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Condition=\"'$(CrtBuildMD)'  != 'false'\" Include=\"md\\dirs.proj\" />\r\n        <ProjectFile Condition=\"'$(CrtBuildXMD)' != 'false'\" Include=\"xmd\\dirs.proj\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/i386.exports",
    "content": "_Aligned_get_default_resource\r\n_Aligned_new_delete_resource\r\n_Aligned_set_default_resource\r\n_Unaligned_get_default_resource\r\n_Unaligned_new_delete_resource\r\n_Unaligned_set_default_resource\r\nnull_memory_resource\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/md/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"msvcp_1_md_app.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_1_md_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_1_md_onecore.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_1_md_netfx.vcxproj\" Condition=\"'$(BuildArchitecture)' != 'chpe'\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/md/msvcp_1_md_app.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{AC581714-5C34-43F1-88AA-F239723F751F}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>app</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_1.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/md/msvcp_1_md_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{58C30DB7-35C9-432D-8490-66F6E5901B8F}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_1.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/md/msvcp_1_md_netfx.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{CAA5F16A-A6C1-4450-981D-E3BF0F0A7B5B}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>netfx</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_1.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/md/msvcp_1_md_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{2BD1256B-3615-4061-AD30-4F5E1E092381}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_1.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/msvcp_1.settings.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"Dogfood\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n    <PropertyGroup Label=\"Configuration\">\r\n        <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n        <GenerateImportLib>true</GenerateImportLib>\r\n    </PropertyGroup>\r\n\r\n    <PropertyGroup>\r\n        <FinalBinary>p_1</FinalBinary>\r\n\r\n        <TargetAppFamily Condition=\"'$(MsvcpFlavor)' == 'app'\">true</TargetAppFamily>\r\n        <TargetCoreSystem Condition=\"'$(MsvcpFlavor)' == 'onecore'\">true</TargetCoreSystem>\r\n        <TargetNetFx Condition=\"'$(MsvcpFlavor)' == 'netfx'\">true</TargetNetFx>\r\n    </PropertyGroup>\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\crt_build.settings.targets\"/>\r\n\r\n    <PropertyGroup>\r\n        <ClrLibSuffix Condition=\"'$(MsvcpFlavor)' == 'netfx'\">_clr</ClrLibSuffix>\r\n\r\n        <MsvcpFlavorSuffix Condition=\"'$(MsvcpFlavor)' == 'app'\">_app</MsvcpFlavorSuffix>\r\n        <MsvcpFlavorSuffix Condition=\"'$(MsvcpFlavor)' == 'netfx'\">_clr$(NetFxVerX)</MsvcpFlavorSuffix>\r\n\r\n        <OutputName>msvcp$(VCToolsProdVerSuffix)_1$(BuildSuffix)$(MsvcpFlavorSuffix)</OutputName>\r\n        <LibOutputFileName>msvcprt_1$(BuildSuffix)$(ClrLibSuffix)</LibOutputFileName>\r\n        <LibOutputFile>$(LibOutputFileName).lib</LibOutputFile>\r\n\r\n        <ClDefines Condition=\"'$(MsvcpFlavor)' == 'app'\">$(ClDefines);_CRT_APP</ClDefines>\r\n\r\n        <UseMsvcrt>false</UseMsvcrt>\r\n        <RCIntermediateOutputDirectory>$(IntermediateOutputDirectory)</RCIntermediateOutputDirectory>\r\n        <IntermediateImportLibOutput>$(CrtBuildDir)\\msvcprt_1$(BuildSuffix).$(MsvcpFlavor).import_only.lib</IntermediateImportLibOutput>\r\n        <DllDefName>$(LibOutputFileName).$(MsvcpFlavor)</DllDefName>\r\n        <DllDef>$(IntermediateOutputDirectory)\\$(DllDefName).def</DllDef>\r\n\r\n        <LinkGenerateDebugInformation>true</LinkGenerateDebugInformation>\r\n        <LinkProgramDataBaseFileName>$(OutputPath)\\$(OutputName)$(_PDB_VER_NAME_)$(DllPdbFlavorSuffix)</LinkProgramDataBaseFileName>\r\n\r\n        <LinkAdditionalOptions>-debugtype:cv,fixup $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions Condition=\"$(DebugBuild) != 'true'\">-opt:ref,icf=3 $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions Condition=\"$(DebugBuild) == 'true'\">-opt:ref,noicf $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions>-nodefaultlib:libcpmt$(BuildSuffix).lib $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions>-nodefaultlib:$(LibOutputFile) $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n\r\n        <LinkGenerateMapFile>true</LinkGenerateMapFile>\r\n        <LinkRelease>true</LinkRelease>\r\n    </PropertyGroup>\r\n\r\n    <ItemGroup>\r\n        <CppPreprocess Include=\"$(MSBuildThisFileDirectory)\\msvcprt_1.src\">\r\n            <Defines>LIBRARYNAME=$(OutputName.ToUpper());$(DllCppDefines)</Defines>\r\n        </CppPreprocess>\r\n        <DefFromI Include=\"$(IntermediateOutputDirectory)\\msvcprt_1.i\">\r\n            <DestFolder1>$(IntermediateOutputDirectory)</DestFolder1>\r\n            <DestFolder2>$(IntermediateOutputDirectory)</DestFolder2>\r\n            <DestFile>$(DllDefName)</DestFile>\r\n        </DefFromI>\r\n        <ResourceCompile Include=\"$(MSBuildThisFileDirectory)\\msvcprt_1.rc\"/>\r\n    </ItemGroup>\r\n\r\n    <ItemGroup>\r\n        <ProjectReference Condition=\"'$(CrtBuildModel)'=='md' or '$(CrtBuildModel)'=='xmd'\" Include=\"$(VCToolsRootPath)\\crt\\github\\stl\\msbuild\\stl_base\\$(CrtBuildModel)\\msvcp_base_$(CrtBuildModel)_$(MsvcpFlavor).vcxproj\"/>\r\n        <TargetLib Include=\"$(CrtLibPath)\\msvcprt_base$(BuildSuffix)$(ClrLibSuffix).lib\"/>\r\n        <TargetLib Include=\"$(CrtLibPath)\\msvcrt$(BuildSuffix)$(ClrLibSuffix).lib\"/>\r\n        <TargetLib Include=\"$(CrtLibPath)\\vcruntime$(BuildSuffix)$(ClrLibSuffix).lib\"/>\r\n        <TargetLib Include=\"$(UniversalCRTLib)\"/>\r\n    </ItemGroup>\r\n\r\n    <!-- Copy the output dll and pdb to various destinations -->\r\n    <ItemGroup>\r\n        <CopyFilesForCrossTools Condition=\"'$(MsvcpFlavor)' == 'kernel32'\" Include=\"\r\n           $(LinkOutputFile);\r\n           $(LinkProgramDataBaseFileName);\r\n        \"/>\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)\\stl_1.files.settings.targets\"/>\r\n\r\n    <Import Project=\"$(VCToolsRootPath)\\crt\\crt_build.targets\"/>\r\n    <Target Name=\"GetBaseAddress\"/>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/msvcprt_1.rc",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////\r\n//\r\n// msvcprt_1.rc : Defines the version resource for the C++ Runtime Library \"_1\" DLL\r\n//\r\n//////////////////////////////////////////////////////////////////////////////////////\r\n\r\n#include \"winver.h\"                       // extract from windows header\r\n#include \"verstamp.h\"\r\n\r\n#define MKARGSTR2(X) #X\r\n#define MKARGSTR(X)  MKARGSTR2(X)\r\n\r\n#define VER_FILETYPE VFT_DLL\r\n#define VER_FILESUBTYPE VFT_UNKNOWN\r\n\r\n#define VER_FILEDESCRIPTION_STR  \"Microsoft\\256 C Runtime Library _1\\0\"\r\n#define VER_INTERNALNAME_STR     MKARGSTR(SXS_TARGET)\r\n#define VER_ORIGINALFILENAME_STR MKARGSTR(SXS_TARGET)\r\n\r\n#include <common.ver>\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/msvcprt_1.src",
    "content": "; Copyright (c) Microsoft Corporation.\r\n; SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n;********************************************************************************\r\n;\r\n; This is the .DEF file for the Microsoft Visual C++ Run-Time Library \"_1\" DLL\r\n; The release version is MSVCPXX_1.DLL and the debug version MSVCPXX_1D.DLL.\r\n;\r\n;********************************************************************************\r\n\r\nLIBRARY LIBRARYNAME\r\n\r\nEXPORTS\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/stl_1.files.settings.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"Dogfood\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <ItemGroup>\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\memory_resource.cpp\" />\r\n        <ClCompile Condition=\"'$(CrtBuildModelIsDll)' == 'true'\" Include=\"$(CrtRoot)\\github\\stl\\src\\dllmain_satellite.cpp\" />\r\n    </ItemGroup>\r\n\r\n    <Choose>\r\n      <When Condition=\"'$(CrtBuildModel)' != 'md'\">\r\n        <!-- Only check exports of release, DLL, builds -->\r\n      </When>\r\n\r\n      <When Condition=\"'$(BuildArchitecture)' == 'i386' or '$(BuildArchitecture)' == 'chpe'\">\r\n        <PropertyGroup>\r\n          <ExpectedExportsList>$(MSBuildThisFileDirectory)\\i386.exports</ExpectedExportsList>\r\n        </PropertyGroup>\r\n      </When>\r\n      <When Condition=\"'$(BuildArchitecture)' == 'amd64' or '$(BuildArchitecture)' == 'arm64ec'\">\r\n        <PropertyGroup>\r\n          <ExpectedExportsList>$(MSBuildThisFileDirectory)\\amd64.exports</ExpectedExportsList>\r\n        </PropertyGroup>\r\n      </When>\r\n      <When Condition=\"'$(BuildArchitecture)' == 'arm64'\">\r\n        <PropertyGroup>\r\n          <ExpectedExportsList>$(MSBuildThisFileDirectory)\\arm64.exports</ExpectedExportsList>\r\n        </PropertyGroup>\r\n      </When>\r\n    </Choose>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/xmd/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"msvcp_1_xmd_app.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_1_xmd_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_1_xmd_onecore.vcxproj\" />\r\n    </ItemGroup>\r\n\r\n    <ItemGroup Condition=\"'$(SpectreBuildMode)' == ''\">\r\n        <ProjectFile Include=\"msvcp_1_xmd_netfx.vcxproj\" Condition=\"'$(BuildArchitecture)' != 'chpe'\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/xmd/msvcp_1_xmd_app.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{E30D9740-AD72-4A90-B8A9-A1CABCC52EB9}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>app</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_1.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/xmd/msvcp_1_xmd_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{A90AB3DB-494B-4ECD-AEFB-E880F9C58F74}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_1.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/xmd/msvcp_1_xmd_netfx.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{B37B087A-D591-472E-8E73-396CD32F5E77}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>netfx</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_1.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_1/xmd/msvcp_1_xmd_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{6E55B52D-472B-4A51-AC94-B1E391ECAAD7}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_1.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/amd64.exports",
    "content": "__std_smf_assoc_laguerre\r\n__std_smf_assoc_laguerref\r\n__std_smf_assoc_legendre\r\n__std_smf_assoc_legendref\r\n__std_smf_beta\r\n__std_smf_betaf\r\n__std_smf_comp_ellint_1\r\n__std_smf_comp_ellint_1f\r\n__std_smf_comp_ellint_2\r\n__std_smf_comp_ellint_2f\r\n__std_smf_comp_ellint_3\r\n__std_smf_comp_ellint_3f\r\n__std_smf_cyl_bessel_i\r\n__std_smf_cyl_bessel_if\r\n__std_smf_cyl_bessel_j\r\n__std_smf_cyl_bessel_jf\r\n__std_smf_cyl_bessel_k\r\n__std_smf_cyl_bessel_kf\r\n__std_smf_cyl_neumann\r\n__std_smf_cyl_neumannf\r\n__std_smf_ellint_1\r\n__std_smf_ellint_1f\r\n__std_smf_ellint_2\r\n__std_smf_ellint_2f\r\n__std_smf_ellint_3\r\n__std_smf_ellint_3f\r\n__std_smf_expint\r\n__std_smf_expintf\r\n__std_smf_hermite\r\n__std_smf_hermitef\r\n__std_smf_hypot3\r\n__std_smf_hypot3f\r\n__std_smf_laguerre\r\n__std_smf_laguerref\r\n__std_smf_legendre\r\n__std_smf_legendref\r\n__std_smf_riemann_zeta\r\n__std_smf_riemann_zetaf\r\n__std_smf_sph_bessel\r\n__std_smf_sph_besself\r\n__std_smf_sph_legendre\r\n__std_smf_sph_legendref\r\n__std_smf_sph_neumann\r\n__std_smf_sph_neumannf\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/arm64.exports",
    "content": "__std_smf_assoc_laguerre\r\n__std_smf_assoc_laguerref\r\n__std_smf_assoc_legendre\r\n__std_smf_assoc_legendref\r\n__std_smf_beta\r\n__std_smf_betaf\r\n__std_smf_comp_ellint_1\r\n__std_smf_comp_ellint_1f\r\n__std_smf_comp_ellint_2\r\n__std_smf_comp_ellint_2f\r\n__std_smf_comp_ellint_3\r\n__std_smf_comp_ellint_3f\r\n__std_smf_cyl_bessel_i\r\n__std_smf_cyl_bessel_if\r\n__std_smf_cyl_bessel_j\r\n__std_smf_cyl_bessel_jf\r\n__std_smf_cyl_bessel_k\r\n__std_smf_cyl_bessel_kf\r\n__std_smf_cyl_neumann\r\n__std_smf_cyl_neumannf\r\n__std_smf_ellint_1\r\n__std_smf_ellint_1f\r\n__std_smf_ellint_2\r\n__std_smf_ellint_2f\r\n__std_smf_ellint_3\r\n__std_smf_ellint_3f\r\n__std_smf_expint\r\n__std_smf_expintf\r\n__std_smf_hermite\r\n__std_smf_hermitef\r\n__std_smf_hypot3\r\n__std_smf_hypot3f\r\n__std_smf_laguerre\r\n__std_smf_laguerref\r\n__std_smf_legendre\r\n__std_smf_legendref\r\n__std_smf_riemann_zeta\r\n__std_smf_riemann_zetaf\r\n__std_smf_sph_bessel\r\n__std_smf_sph_besself\r\n__std_smf_sph_legendre\r\n__std_smf_sph_legendref\r\n__std_smf_sph_neumann\r\n__std_smf_sph_neumannf\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Condition=\"'$(CrtBuildMD)'  != 'false'\" Include=\"md\\dirs.proj\" />\r\n        <ProjectFile Condition=\"'$(CrtBuildXMD)' != 'false'\" Include=\"xmd\\dirs.proj\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/i386.exports",
    "content": "___std_smf_assoc_laguerre@16\r\n___std_smf_assoc_laguerref@12\r\n___std_smf_assoc_legendre@16\r\n___std_smf_assoc_legendref@12\r\n___std_smf_beta@16\r\n___std_smf_betaf@8\r\n___std_smf_comp_ellint_1@8\r\n___std_smf_comp_ellint_1f@4\r\n___std_smf_comp_ellint_2@8\r\n___std_smf_comp_ellint_2f@4\r\n___std_smf_comp_ellint_3@16\r\n___std_smf_comp_ellint_3f@8\r\n___std_smf_cyl_bessel_i@16\r\n___std_smf_cyl_bessel_if@8\r\n___std_smf_cyl_bessel_j@16\r\n___std_smf_cyl_bessel_jf@8\r\n___std_smf_cyl_bessel_k@16\r\n___std_smf_cyl_bessel_kf@8\r\n___std_smf_cyl_neumann@16\r\n___std_smf_cyl_neumannf@8\r\n___std_smf_ellint_1@16\r\n___std_smf_ellint_1f@8\r\n___std_smf_ellint_2@16\r\n___std_smf_ellint_2f@8\r\n___std_smf_ellint_3@24\r\n___std_smf_ellint_3f@12\r\n___std_smf_expint@8\r\n___std_smf_expintf@4\r\n___std_smf_hermite@12\r\n___std_smf_hermitef@8\r\n___std_smf_hypot3@24\r\n___std_smf_hypot3f@12\r\n___std_smf_laguerre@12\r\n___std_smf_laguerref@8\r\n___std_smf_legendre@12\r\n___std_smf_legendref@8\r\n___std_smf_riemann_zeta@8\r\n___std_smf_riemann_zetaf@4\r\n___std_smf_sph_bessel@12\r\n___std_smf_sph_besself@8\r\n___std_smf_sph_legendre@16\r\n___std_smf_sph_legendref@12\r\n___std_smf_sph_neumann@12\r\n___std_smf_sph_neumannf@8\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/md/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"msvcp_2_md_app.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_2_md_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_2_md_onecore.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_2_md_netfx.vcxproj\" Condition=\"'$(BuildArchitecture)' != 'chpe'\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/md/msvcp_2_md_app.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{451BB540-FBE3-4BFC-B3FC-1D118E6D44ED}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>app</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_2.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/md/msvcp_2_md_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{219EFF3E-A40D-46E4-86DC-887AF90330CA}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_2.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/md/msvcp_2_md_netfx.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{DEC67AC5-1EF2-4745-BAFF-28484A23477E}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>netfx</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_2.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/md/msvcp_2_md_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{24C78BD7-AED7-4090-BE81-8E3247ECC5A3}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_2.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/msvcp_2.settings.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"Dogfood\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n    <PropertyGroup Label=\"Configuration\">\r\n        <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n        <GenerateImportLib>true</GenerateImportLib>\r\n    </PropertyGroup>\r\n\r\n    <PropertyGroup>\r\n        <FinalBinary>p_2</FinalBinary>\r\n\r\n        <TargetAppFamily Condition=\"'$(MsvcpFlavor)' == 'app'\">true</TargetAppFamily>\r\n        <TargetCoreSystem Condition=\"'$(MsvcpFlavor)' == 'onecore'\">true</TargetCoreSystem>\r\n        <TargetNetFx Condition=\"'$(MsvcpFlavor)' == 'netfx'\">true</TargetNetFx>\r\n    </PropertyGroup>\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\crt_build.settings.targets\"/>\r\n\r\n    <PropertyGroup>\r\n        <ClrLibSuffix Condition=\"'$(MsvcpFlavor)' == 'netfx'\">_clr</ClrLibSuffix>\r\n\r\n        <MsvcpFlavorSuffix Condition=\"'$(MsvcpFlavor)' == 'app'\">_app</MsvcpFlavorSuffix>\r\n        <MsvcpFlavorSuffix Condition=\"'$(MsvcpFlavor)' == 'netfx'\">_clr$(NetFxVerX)</MsvcpFlavorSuffix>\r\n\r\n        <OutputName>msvcp$(VCToolsProdVerSuffix)_2$(BuildSuffix)$(MsvcpFlavorSuffix)</OutputName>\r\n        <LibOutputFileName>msvcprt_2$(BuildSuffix)$(ClrLibSuffix)</LibOutputFileName>\r\n        <LibOutputFile>$(LibOutputFileName).lib</LibOutputFile>\r\n\r\n        <ClDefines Condition=\"'$(MsvcpFlavor)' == 'app'\">$(ClDefines);_CRT_APP</ClDefines>\r\n\r\n        <UseMsvcrt>false</UseMsvcrt>\r\n        <RCIntermediateOutputDirectory>$(IntermediateOutputDirectory)</RCIntermediateOutputDirectory>\r\n        <IntermediateImportLibOutput>$(CrtBuildDir)\\msvcprt_2$(BuildSuffix).$(MsvcpFlavor).import_only.lib</IntermediateImportLibOutput>\r\n        <DllDefName>$(LibOutputFileName).$(MsvcpFlavor)</DllDefName>\r\n        <DllDef>$(IntermediateOutputDirectory)\\$(DllDefName).def</DllDef>\r\n\r\n        <LinkGenerateDebugInformation>true</LinkGenerateDebugInformation>\r\n        <LinkProgramDataBaseFileName>$(OutputPath)\\$(OutputName)$(_PDB_VER_NAME_)$(DllPdbFlavorSuffix)</LinkProgramDataBaseFileName>\r\n\r\n        <LinkAdditionalOptions>-debugtype:cv,fixup $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions Condition=\"$(DebugBuild) != 'true'\">-opt:ref,icf=3 $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions Condition=\"$(DebugBuild) == 'true'\">-opt:ref,noicf $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions>-nodefaultlib:libcpmt$(BuildSuffix).lib $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions>-nodefaultlib:$(LibOutputFile) $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n\r\n        <LinkGenerateMapFile>true</LinkGenerateMapFile>\r\n        <LinkRelease>true</LinkRelease>\r\n    </PropertyGroup>\r\n\r\n    <ItemGroup>\r\n        <CppPreprocess Include=\"$(MSBuildThisFileDirectory)\\msvcprt_2.src\">\r\n            <Defines>LIBRARYNAME=$(OutputName.ToUpper());$(DllCppDefines)</Defines>\r\n        </CppPreprocess>\r\n        <DefFromI Include=\"$(IntermediateOutputDirectory)\\msvcprt_2.i\">\r\n            <DestFolder1>$(IntermediateOutputDirectory)</DestFolder1>\r\n            <DestFolder2>$(IntermediateOutputDirectory)</DestFolder2>\r\n            <DestFile>$(DllDefName)</DestFile>\r\n        </DefFromI>\r\n        <ResourceCompile Include=\"$(MSBuildThisFileDirectory)\\msvcprt_2.rc\"/>\r\n    </ItemGroup>\r\n\r\n    <ItemGroup>\r\n        <ProjectReference Condition=\"'$(CrtBuildModel)'=='md' or '$(CrtBuildModel)'=='xmd'\" Include=\"$(VCToolsRootPath)\\crt\\github\\stl\\msbuild\\stl_base\\$(CrtBuildModel)\\msvcp_base_$(CrtBuildModel)_$(MsvcpFlavor).vcxproj\"/>\r\n        <TargetLib Include=\"$(CrtLibPath)\\msvcprt_base$(BuildSuffix)$(ClrLibSuffix).lib\"/>\r\n        <TargetLib Include=\"$(CrtLibPath)\\msvcrt$(BuildSuffix)$(ClrLibSuffix).lib\"/>\r\n        <TargetLib Include=\"$(CrtLibPath)\\vcruntime$(BuildSuffix)$(ClrLibSuffix).lib\"/>\r\n        <TargetLib Include=\"$(UniversalCRTLib)\"/>\r\n    </ItemGroup>\r\n\r\n    <!-- Copy the output dll and pdb to various destinations -->\r\n    <ItemGroup>\r\n        <CopyFilesForCrossTools Condition=\"'$(MsvcpFlavor)' == 'kernel32'\" Include=\"\r\n           $(LinkOutputFile);\r\n           $(LinkProgramDataBaseFileName);\r\n        \"/>\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)\\stl_2.files.settings.targets\"/>\r\n\r\n    <Import Project=\"$(VCToolsRootPath)\\crt\\crt_build.targets\"/>\r\n    <Target Name=\"GetBaseAddress\"/>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/msvcprt_2.rc",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////\r\n//\r\n// msvcprt_2.rc : Defines the version resource for the C++ Runtime Library \"_2\" DLL\r\n//\r\n//////////////////////////////////////////////////////////////////////////////////////\r\n\r\n#include \"winver.h\"                       // extract from windows header\r\n#include \"verstamp.h\"\r\n\r\n#define MKARGSTR2(X) #X\r\n#define MKARGSTR(X)  MKARGSTR2(X)\r\n\r\n#define VER_FILETYPE VFT_DLL\r\n#define VER_FILESUBTYPE VFT_UNKNOWN\r\n\r\n#define VER_FILEDESCRIPTION_STR  \"Microsoft\\256 C Runtime Library _2\\0\"\r\n#define VER_INTERNALNAME_STR     MKARGSTR(SXS_TARGET)\r\n#define VER_ORIGINALFILENAME_STR MKARGSTR(SXS_TARGET)\r\n\r\n#include <common.ver>\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/msvcprt_2.src",
    "content": "; Copyright (c) Microsoft Corporation.\r\n; SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n;********************************************************************************\r\n;\r\n; This is the .DEF file for the Microsoft Visual C++ Run-Time Library \"_2\" DLL\r\n; The release version is MSVCPXX_2.DLL and the debug version MSVCPXX_2D.DLL.\r\n;\r\n;********************************************************************************\r\n\r\nLIBRARY LIBRARYNAME\r\n\r\nEXPORTS\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/stl_2.files.settings.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"Dogfood\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <ItemGroup>\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\special_math.cpp\" />\r\n        <ClCompile Condition=\"'$(CrtBuildModelIsDll)' == 'true'\" Include=\"$(CrtRoot)\\github\\stl\\src\\dllmain_satellite.cpp\" />\r\n    </ItemGroup>\r\n\r\n    <Choose>\r\n      <When Condition=\"'$(CrtBuildModel)' != 'md'\">\r\n        <!-- Only check exports of release, DLL, builds -->\r\n      </When>\r\n\r\n      <When Condition=\"'$(BuildArchitecture)' == 'i386' or '$(BuildArchitecture)' == 'chpe'\">\r\n        <PropertyGroup>\r\n          <ExpectedExportsList>$(MSBuildThisFileDirectory)\\i386.exports</ExpectedExportsList>\r\n        </PropertyGroup>\r\n      </When>\r\n      <When Condition=\"'$(BuildArchitecture)' == 'amd64' or '$(BuildArchitecture)' == 'arm64ec'\">\r\n        <PropertyGroup>\r\n          <ExpectedExportsList>$(MSBuildThisFileDirectory)\\amd64.exports</ExpectedExportsList>\r\n        </PropertyGroup>\r\n      </When>\r\n      <When Condition=\"'$(BuildArchitecture)' == 'arm64'\">\r\n        <PropertyGroup>\r\n          <ExpectedExportsList>$(MSBuildThisFileDirectory)\\arm64.exports</ExpectedExportsList>\r\n        </PropertyGroup>\r\n      </When>\r\n    </Choose>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/xmd/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"msvcp_2_xmd_app.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_2_xmd_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_2_xmd_onecore.vcxproj\" />\r\n    </ItemGroup>\r\n\r\n    <ItemGroup Condition=\"'$(SpectreBuildMode)' == ''\">\r\n        <ProjectFile Include=\"msvcp_2_xmd_netfx.vcxproj\" Condition=\"'$(BuildArchitecture)' != 'chpe'\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/xmd/msvcp_2_xmd_app.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{EFC70BD7-F82E-4951-8F60-468B164BF419}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>app</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_2.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/xmd/msvcp_2_xmd_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{3CFB766B-CCA6-4078-9A03-CAE24FF65373}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_2.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/xmd/msvcp_2_xmd_netfx.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{4A10E59B-BC11-478F-A911-4985F503B489}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>netfx</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_2.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_2/xmd/msvcp_2_xmd_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{4897703D-D42F-4CF6-B4C1-B7CFD3D9F054}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_2.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_asan/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"stl_asan.vcxproj\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_asan/stl_asan.files.settings.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"Dogfood\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <ItemGroup>\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\asan.cpp\" />\r\n    </ItemGroup>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_asan/stl_asan.settings.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"Dogfood\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n    <PropertyGroup Label=\"Configuration\">\r\n        <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    </PropertyGroup>\r\n\r\n    <PropertyGroup>\r\n        <FinalBinary>p_stl_asan</FinalBinary>\r\n        <Arm64CombinedPdb>true</Arm64CombinedPdb>\r\n    </PropertyGroup>\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\crt_build.settings.targets\"/>\r\n\r\n    <PropertyGroup>\r\n        <OutputName>stl_asan</OutputName>\r\n    </PropertyGroup>\r\n\r\n    <PropertyGroup>\r\n        <ClProgramDataBaseFileName>$(OutputLibPdbPath)$(OutputName)$(PdbVerName).pdb</ClProgramDataBaseFileName>\r\n    </PropertyGroup>\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)stl_asan.files.settings.targets\"/>\r\n\r\n    <Import Project=\"$(VCToolsRootPath)\\crt\\crt_build.targets\"/>\r\n    <Target Name=\"GetBaseAddress\"/>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_asan/stl_asan.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{B8236181-0F0C-465B-8729-36944CBF324A}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(MSBuildThisFileDirectory)stl_asan.settings.targets\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_atomic_wait/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Condition=\"'$(CrtBuildMD)'  != 'false'\" Include=\"md\\dirs.proj\" />\r\n        <ProjectFile Condition=\"'$(CrtBuildXMD)' != 'false'\" Include=\"xmd\\dirs.proj\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_atomic_wait/md/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"msvcp_atomic_wait_md_app.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_atomic_wait_md_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_atomic_wait_md_onecore.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_atomic_wait_md_netfx.vcxproj\" Condition=\"'$(BuildArchitecture)' != 'chpe'\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_atomic_wait/md/msvcp_atomic_wait_md_app.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{99C61FE5-793F-4D49-82F6-27938575B058}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>app</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_atomic_wait.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_atomic_wait/md/msvcp_atomic_wait_md_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{2C785D3F-9961-46E9-A202-D410DAD6269D}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_atomic_wait.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_atomic_wait/md/msvcp_atomic_wait_md_netfx.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{B0D8709C-8649-43DF-AB53-AA05134A9B83}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>netfx</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_atomic_wait.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_atomic_wait/md/msvcp_atomic_wait_md_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{22F86914-609E-4BF5-A1DA-2804C1251044}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_atomic_wait.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_atomic_wait/msvcp_atomic_wait.settings.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"Dogfood\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n    <PropertyGroup Label=\"Configuration\">\r\n        <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n        <GenerateImportLib>true</GenerateImportLib>\r\n    </PropertyGroup>\r\n\r\n    <PropertyGroup>\r\n        <FinalBinary>p_atomic_wait</FinalBinary>\r\n\r\n        <TargetAppFamily Condition=\"'$(MsvcpFlavor)' == 'app'\">true</TargetAppFamily>\r\n        <TargetCoreSystem Condition=\"'$(MsvcpFlavor)' == 'onecore'\">true</TargetCoreSystem>\r\n        <TargetNetFx Condition=\"'$(MsvcpFlavor)' == 'netfx'\">true</TargetNetFx>\r\n    </PropertyGroup>\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\crt_build.settings.targets\"/>\r\n\r\n    <PropertyGroup>\r\n        <ClrLibSuffix Condition=\"'$(MsvcpFlavor)' == 'netfx'\">_clr</ClrLibSuffix>\r\n\r\n        <MsvcpFlavorSuffix Condition=\"'$(MsvcpFlavor)' == 'app'\">_app</MsvcpFlavorSuffix>\r\n        <MsvcpFlavorSuffix Condition=\"'$(MsvcpFlavor)' == 'netfx'\">_clr$(NetFxVerX)</MsvcpFlavorSuffix>\r\n\r\n        <OutputName>msvcp$(VCToolsProdVerSuffix)$(BuildSuffix)_atomic_wait$(MsvcpFlavorSuffix)</OutputName>\r\n        <LibOutputFileName>msvcprt$(BuildSuffix)_atomic_wait$(ClrLibSuffix)</LibOutputFileName>\r\n        <LibOutputFile>$(LibOutputFileName).lib</LibOutputFile>\r\n\r\n        <ClDefines Condition=\"'$(MsvcpFlavor)' == 'app'\">$(ClDefines);_CRT_APP</ClDefines>\r\n\r\n        <UseMsvcrt>false</UseMsvcrt>\r\n        <RCIntermediateOutputDirectory>$(IntermediateOutputDirectory)</RCIntermediateOutputDirectory>\r\n        <IntermediateImportLibOutput>$(CrtBuildDir)\\msvcprt_atomic_wait$(BuildSuffix).$(MsvcpFlavor).import_only.lib</IntermediateImportLibOutput>\r\n        <DllDefName>$(LibOutputFileName).$(MsvcpFlavor)</DllDefName>\r\n        <DllDef>$(IntermediateOutputDirectory)\\$(DllDefName).def</DllDef>\r\n\r\n        <LinkGenerateDebugInformation>true</LinkGenerateDebugInformation>\r\n        <LinkProgramDataBaseFileName>$(OutputPath)\\$(OutputName)$(_PDB_VER_NAME_)$(DllPdbFlavorSuffix)</LinkProgramDataBaseFileName>\r\n\r\n        <LinkAdditionalOptions>-debugtype:cv,fixup $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions Condition=\"$(DebugBuild) != 'true'\">-opt:ref,icf=3 $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions Condition=\"$(DebugBuild) == 'true'\">-opt:ref,noicf $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions>-nodefaultlib:libcpmt$(BuildSuffix).lib $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions>-nodefaultlib:$(LibOutputFile) $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n\r\n        <LinkGenerateMapFile>true</LinkGenerateMapFile>\r\n        <LinkRelease>true</LinkRelease>\r\n    </PropertyGroup>\r\n\r\n    <ItemGroup>\r\n        <CppPreprocess Include=\"$(MSBuildThisFileDirectory)\\..\\..\\src\\msvcp_atomic_wait.src\">\r\n            <Defines>LIBRARYNAME=$(OutputName.ToUpper())</Defines>\r\n        </CppPreprocess>\r\n        <DefFromI Include=\"$(IntermediateOutputDirectory)\\msvcp_atomic_wait.i\">\r\n            <DestFolder1>$(IntermediateOutputDirectory)</DestFolder1>\r\n            <DestFolder2>$(IntermediateOutputDirectory)</DestFolder2>\r\n            <DestFile>$(DllDefName)</DestFile>\r\n        </DefFromI>\r\n        <ResourceCompile Include=\"$(MSBuildThisFileDirectory)\\msvcprt_atomic_wait.rc\"/>\r\n    </ItemGroup>\r\n\r\n    <ItemGroup>\r\n        <ProjectReference Condition=\"'$(CrtBuildModel)'=='md' or '$(CrtBuildModel)'=='xmd'\" Include=\"$(VCToolsRootPath)\\crt\\github\\stl\\msbuild\\stl_base\\$(CrtBuildModel)\\msvcp_base_$(CrtBuildModel)_$(MsvcpFlavor).vcxproj\"/>\r\n        <TargetLib Include=\"$(CrtLibPath)\\msvcprt_base$(BuildSuffix)$(ClrLibSuffix).lib\"/>\r\n        <TargetLib Include=\"$(CrtLibPath)\\msvcrt$(BuildSuffix)$(ClrLibSuffix).lib\"/>\r\n        <TargetLib Include=\"$(CrtLibPath)\\vcruntime$(BuildSuffix)$(ClrLibSuffix).lib\"/>\r\n        <TargetLib Include=\"$(UniversalCRTLib)\"/>\r\n        <TargetLib Condition=\"'$(MsvcpFlavor)' == 'kernel32' or '$(MsvcpFlavor)' == 'netfx'\" Include=\"$(SdkLibPath)\\advapi32.lib\"/>\r\n        <TargetLib Condition=\"'$(MsvcpFlavor)' == 'kernel32' or '$(MsvcpFlavor)' == 'netfx'\" Include=\"$(SdkLibPath)\\synchronization.lib\"/>\r\n    </ItemGroup>\r\n\r\n    <!-- Copy the output dll and pdb to various destinations -->\r\n    <ItemGroup>\r\n        <CopyFilesForCrossTools Condition=\"'$(MsvcpFlavor)' == 'kernel32'\" Include=\"\r\n           $(LinkOutputFile);\r\n           $(LinkProgramDataBaseFileName);\r\n        \"/>\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)\\stl_atomic_wait.files.settings.targets\"/>\r\n\r\n    <Import Project=\"$(VCToolsRootPath)\\crt\\crt_build.targets\"/>\r\n    <Target Name=\"GetBaseAddress\"/>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_atomic_wait/msvcprt_atomic_wait.rc",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////\r\n//\r\n// msvcprt_atomic_wait.rc : Defines the version resource for the C++ Runtime Library \"_atomic_wait\" DLL\r\n//\r\n//////////////////////////////////////////////////////////////////////////////////////\r\n\r\n#include \"winver.h\"                       // extract from windows header\r\n#include \"verstamp.h\"\r\n\r\n#define MKARGSTR2(X) #X\r\n#define MKARGSTR(X)  MKARGSTR2(X)\r\n\r\n#define VER_FILETYPE VFT_DLL\r\n#define VER_FILESUBTYPE VFT_UNKNOWN\r\n\r\n#define VER_FILEDESCRIPTION_STR  \"Microsoft\\256 C Runtime Library _atomic_wait\\0\"\r\n#define VER_INTERNALNAME_STR     MKARGSTR(SXS_TARGET)\r\n#define VER_ORIGINALFILENAME_STR MKARGSTR(SXS_TARGET)\r\n\r\n#include <common.ver>\r\n"
  },
  {
    "path": "stl/msbuild/stl_atomic_wait/stl_atomic_wait.files.settings.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"Dogfood\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n    <ItemGroup>\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\atomic_wait.cpp;\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\parallel_algorithms.cpp;\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\syncstream.cpp;\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\tzdb.cpp;\" />\r\n        <ClCompile Condition=\"'$(CrtBuildModelIsDll)' == 'true'\" Include=\"$(CrtRoot)\\github\\stl\\src\\dllmain_satellite.cpp;\" />\r\n    </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_atomic_wait/xmd/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"msvcp_atomic_wait_xmd_app.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_atomic_wait_xmd_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_atomic_wait_xmd_onecore.vcxproj\" />\r\n    </ItemGroup>\r\n\r\n    <ItemGroup Condition=\"'$(SpectreBuildMode)' == ''\">\r\n        <ProjectFile Include=\"msvcp_atomic_wait_xmd_netfx.vcxproj\" Condition=\"'$(BuildArchitecture)' != 'chpe'\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_atomic_wait/xmd/msvcp_atomic_wait_xmd_app.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{3AEA1ADF-5AA1-4BAB-B0AA-104B622C75B5}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>app</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_atomic_wait.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_atomic_wait/xmd/msvcp_atomic_wait_xmd_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{D771D7D3-3021-4CBE-A966-68CD817D0C04}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_atomic_wait.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_atomic_wait/xmd/msvcp_atomic_wait_xmd_netfx.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{31EE7F7B-CF43-489D-8419-EDB8F2C152EE}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>netfx</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_atomic_wait.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_atomic_wait/xmd/msvcp_atomic_wait_xmd_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{57A6A807-C9DC-4ADF-8128-3589FCDAA2E4}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_atomic_wait.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/amd64.exports",
    "content": "??$_Getvals@_W@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAX_WAEBV_Locinfo@1@@Z\r\n??$_Getvals@_W@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAX_WAEBV_Locinfo@1@@Z\r\n??$_Getvals@_W@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAX_WAEBV_Locinfo@1@@Z\r\n??0?$_Yarn@D@std@@QEAA@AEBV01@@Z\r\n??0?$_Yarn@D@std@@QEAA@PEBD@Z\r\n??0?$_Yarn@D@std@@QEAA@XZ\r\n??0?$_Yarn@G@std@@QEAA@AEBV01@@Z\r\n??0?$_Yarn@G@std@@QEAA@PEBG@Z\r\n??0?$_Yarn@G@std@@QEAA@XZ\r\n??0?$_Yarn@_W@std@@QEAA@AEBV01@@Z\r\n??0?$_Yarn@_W@std@@QEAA@PEB_W@Z\r\n??0?$_Yarn@_W@std@@QEAA@XZ\r\n??0?$basic_ios@DU?$char_traits@D@std@@@std@@IEAA@XZ\r\n??0?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??0?$basic_ios@GU?$char_traits@G@std@@@std@@IEAA@XZ\r\n??0?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAA@XZ\r\n??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??0?$basic_iostream@DU?$char_traits@D@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??0?$basic_iostream@GU?$char_traits@G@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_ostream@DU?$char_traits@D@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z\r\n??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z\r\n??0?$basic_ostream@GU?$char_traits@G@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z\r\n??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z\r\n??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z\r\n??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z\r\n??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@AEBV01@@Z\r\n??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@XZ\r\n??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@AEBV01@@Z\r\n??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@XZ\r\n??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@AEBV01@@Z\r\n??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@XZ\r\n??0?$codecvt@DDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$codecvt@DDU_Mbstatet@@@std@@QEAA@_K@Z\r\n??0?$codecvt@GDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$codecvt@GDU_Mbstatet@@@std@@QEAA@_K@Z\r\n??0?$codecvt@_SDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@KW4_Codecvt_mode@1@_K@Z\r\n??0?$codecvt@_SDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$codecvt@_SDU_Mbstatet@@@std@@QEAA@_K@Z\r\n??0?$codecvt@_UDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@KW4_Codecvt_mode@1@_K@Z\r\n??0?$codecvt@_UDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$codecvt@_UDU_Mbstatet@@@std@@QEAA@_K@Z\r\n??0?$codecvt@_WDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$codecvt@_WDU_Mbstatet@@@std@@QEAA@_K@Z\r\n??0?$ctype@D@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$ctype@D@std@@QEAA@PEBF_N_K@Z\r\n??0?$ctype@G@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$ctype@G@std@@QEAA@_K@Z\r\n??0?$ctype@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$ctype@_W@std@@QEAA@_K@Z\r\n??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAA@PEBD_K@Z\r\n??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAA@PEBD_K@Z\r\n??0?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAA@PEBD_K@Z\r\n??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAA@PEBD_K@Z\r\n??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAA@PEBD_K@Z\r\n??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z\r\n??0Init@ios_base@std@@QEAA@XZ\r\n??0_Facet_base@std@@QEAA@AEBV01@@Z\r\n??0_Facet_base@std@@QEAA@XZ\r\n??0_Init_locks@std@@QEAA@XZ\r\n??0_Locimp@locale@std@@AEAA@AEBV012@@Z\r\n??0_Locimp@locale@std@@AEAA@_N@Z\r\n??0_Locinfo@std@@QEAA@HPEBD@Z\r\n??0_Locinfo@std@@QEAA@PEBD@Z\r\n??0_Lockit@std@@QEAA@H@Z\r\n??0_Lockit@std@@QEAA@XZ\r\n??0_Timevec@std@@QEAA@AEBV01@@Z\r\n??0_Timevec@std@@QEAA@PEAX@Z\r\n??0_UShinit@std@@QEAA@XZ\r\n??0_Winit@std@@QEAA@XZ\r\n??0codecvt_base@std@@QEAA@_K@Z\r\n??0ctype_base@std@@QEAA@_K@Z\r\n??0facet@locale@std@@IEAA@_K@Z\r\n??0id@locale@std@@QEAA@_K@Z\r\n??0ios_base@std@@IEAA@XZ\r\n??0task_continuation_context@Concurrency@@AEAA@XZ\r\n??0time_base@std@@QEAA@_K@Z\r\n??1?$_Yarn@D@std@@QEAA@XZ\r\n??1?$_Yarn@G@std@@QEAA@XZ\r\n??1?$_Yarn@_W@std@@QEAA@XZ\r\n??1?$basic_ios@DU?$char_traits@D@std@@@std@@UEAA@XZ\r\n??1?$basic_ios@GU?$char_traits@G@std@@@std@@UEAA@XZ\r\n??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UEAA@XZ\r\n??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UEAA@XZ\r\n??1?$basic_iostream@GU?$char_traits@G@std@@@std@@UEAA@XZ\r\n??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ\r\n??1?$basic_istream@DU?$char_traits@D@std@@@std@@UEAA@XZ\r\n??1?$basic_istream@GU?$char_traits@G@std@@@std@@UEAA@XZ\r\n??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ\r\n??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UEAA@XZ\r\n??1?$basic_ostream@GU?$char_traits@G@std@@@std@@UEAA@XZ\r\n??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ\r\n??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAA@XZ\r\n??1?$basic_streambuf@GU?$char_traits@G@std@@@std@@UEAA@XZ\r\n??1?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UEAA@XZ\r\n??1?$codecvt@DDU_Mbstatet@@@std@@MEAA@XZ\r\n??1?$codecvt@GDU_Mbstatet@@@std@@MEAA@XZ\r\n??1?$codecvt@_SDU_Mbstatet@@@std@@MEAA@XZ\r\n??1?$codecvt@_UDU_Mbstatet@@@std@@MEAA@XZ\r\n??1?$codecvt@_WDU_Mbstatet@@@std@@MEAA@XZ\r\n??1?$ctype@D@std@@MEAA@XZ\r\n??1?$ctype@G@std@@MEAA@XZ\r\n??1?$ctype@_W@std@@MEAA@XZ\r\n??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ\r\n??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ\r\n??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ\r\n??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ\r\n??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ\r\n??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ\r\n??1Init@ios_base@std@@QEAA@XZ\r\n??1_Facet_base@std@@UEAA@XZ\r\n??1_Init_locks@std@@QEAA@XZ\r\n??1_Locimp@locale@std@@MEAA@XZ\r\n??1_Locinfo@std@@QEAA@XZ\r\n??1_Lockit@std@@QEAA@XZ\r\n??1_Timevec@std@@QEAA@XZ\r\n??1_UShinit@std@@QEAA@XZ\r\n??1_Winit@std@@QEAA@XZ\r\n??1codecvt_base@std@@UEAA@XZ\r\n??1ctype_base@std@@UEAA@XZ\r\n??1facet@locale@std@@MEAA@XZ\r\n??1ios_base@std@@UEAA@XZ\r\n??1time_base@std@@UEAA@XZ\r\n??4?$_Iosb@H@std@@QEAAAEAV01@$$QEAV01@@Z\r\n??4?$_Iosb@H@std@@QEAAAEAV01@AEBV01@@Z\r\n??4?$_Yarn@D@std@@QEAAAEAV01@AEBV01@@Z\r\n??4?$_Yarn@D@std@@QEAAAEAV01@PEBD@Z\r\n??4?$_Yarn@G@std@@QEAAAEAV01@AEBV01@@Z\r\n??4?$_Yarn@G@std@@QEAAAEAV01@PEBG@Z\r\n??4?$_Yarn@_W@std@@QEAAAEAV01@AEBV01@@Z\r\n??4?$_Yarn@_W@std@@QEAAAEAV01@PEB_W@Z\r\n??4?$basic_iostream@DU?$char_traits@D@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_iostream@GU?$char_traits@G@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_istream@DU?$char_traits@D@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_istream@GU?$char_traits@G@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_istream@_WU?$char_traits@_W@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_ostream@DU?$char_traits@D@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_ostream@GU?$char_traits@G@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_ostream@_WU?$char_traits@_W@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAAEAV01@AEBV01@@Z\r\n??4?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAAEAV01@AEBV01@@Z\r\n??4?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAAEAV01@AEBV01@@Z\r\n??4Init@ios_base@std@@QEAAAEAV012@AEBV012@@Z\r\n??4_Crt_new_delete@std@@QEAAAEAU01@$$QEAU01@@Z\r\n??4_Crt_new_delete@std@@QEAAAEAU01@AEBU01@@Z\r\n??4_Facet_base@std@@QEAAAEAV01@AEBV01@@Z\r\n??4_Init_locks@std@@QEAAAEAV01@AEBV01@@Z\r\n??4_Timevec@std@@QEAAAEAV01@AEBV01@@Z\r\n??4_UShinit@std@@QEAAAEAV01@AEBV01@@Z\r\n??4_Winit@std@@QEAAAEAV01@AEBV01@@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAF@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAG@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAH@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAI@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAJ@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAK@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAM@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAN@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAO@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAPEAX@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_J@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_K@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_N@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAF@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAG@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAH@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAI@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAJ@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAK@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAM@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAN@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAO@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAPEAX@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_J@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_K@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_N@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@GU?$char_traits@G@std@@@1@AEAV21@@Z@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAF@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAG@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAH@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAI@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAJ@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAK@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAM@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAN@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAO@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAPEAX@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_J@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_K@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_N@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@F@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@G@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@H@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@I@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@J@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@K@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@M@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@O@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEBX@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_J@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_K@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_N@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@F@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@G@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@H@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@I@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@J@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@K@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@M@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@N@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@O@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@GU?$char_traits@G@std@@@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEBX@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_J@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_K@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_N@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@F@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@G@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@H@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@I@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@J@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@K@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@M@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@N@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@O@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEBX@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_J@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_K@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_N@Z\r\n??7ios_base@std@@QEBA_NXZ\r\n??Bid@locale@std@@QEAA_KXZ\r\n??Bios_base@std@@QEBA_NXZ\r\n??_7?$basic_ios@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_ios@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_ios@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_iostream@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_iostream@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_iostream@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_istream@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_istream@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_istream@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_ostream@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_ostream@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_ostream@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_streambuf@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_streambuf@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$codecvt@DDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@GDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@_SDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@_UDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@_WDU_Mbstatet@@@std@@6B@\r\n??_7?$ctype@D@std@@6B@\r\n??_7?$ctype@G@std@@6B@\r\n??_7?$ctype@_W@std@@6B@\r\n??_7?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7_Facet_base@std@@6B@\r\n??_7_Locimp@locale@std@@6B@\r\n??_7codecvt_base@std@@6B@\r\n??_7ctype_base@std@@6B@\r\n??_7facet@locale@std@@6B@\r\n??_7ios_base@std@@6B@\r\n??_7time_base@std@@6B@\r\n??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@\r\n??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@\r\n??_8?$basic_iostream@GU?$char_traits@G@std@@@std@@7B?$basic_istream@GU?$char_traits@G@std@@@1@@\r\n??_8?$basic_iostream@GU?$char_traits@G@std@@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@\r\n??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_istream@_WU?$char_traits@_W@std@@@1@@\r\n??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_ostream@_WU?$char_traits@_W@std@@@1@@\r\n??_8?$basic_istream@DU?$char_traits@D@std@@@std@@7B@\r\n??_8?$basic_istream@GU?$char_traits@G@std@@@std@@7B@\r\n??_8?$basic_istream@_WU?$char_traits@_W@std@@@std@@7B@\r\n??_8?$basic_ostream@DU?$char_traits@D@std@@@std@@7B@\r\n??_8?$basic_ostream@GU?$char_traits@G@std@@@std@@7B@\r\n??_8?$basic_ostream@_WU?$char_traits@_W@std@@@std@@7B@\r\n??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n??_D?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n??_D?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n??_F?$codecvt@DDU_Mbstatet@@@std@@QEAAXXZ\r\n??_F?$codecvt@GDU_Mbstatet@@@std@@QEAAXXZ\r\n??_F?$codecvt@_SDU_Mbstatet@@@std@@QEAAXXZ\r\n??_F?$codecvt@_UDU_Mbstatet@@@std@@QEAAXXZ\r\n??_F?$codecvt@_WDU_Mbstatet@@@std@@QEAAXXZ\r\n??_F?$ctype@D@std@@QEAAXXZ\r\n??_F?$ctype@G@std@@QEAAXXZ\r\n??_F?$ctype@_W@std@@QEAAXXZ\r\n??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ\r\n??_F?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ\r\n??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ\r\n??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ\r\n??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ\r\n??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ\r\n??_F_Locinfo@std@@QEAAXXZ\r\n??_F_Timevec@std@@QEAAXXZ\r\n??_Fcodecvt_base@std@@QEAAXXZ\r\n??_Fctype_base@std@@QEAAXXZ\r\n??_Ffacet@locale@std@@QEAAXXZ\r\n??_Fid@locale@std@@QEAAXXZ\r\n??_Ftime_base@std@@QEAAXXZ\r\n?CaptureCallstack@platform@details@Concurrency@@YA_KPEAPEAX_K1@Z\r\n?GetCurrentThreadId@platform@details@Concurrency@@YAJXZ\r\n?GetNextAsyncId@platform@details@Concurrency@@YAIXZ\r\n?ReportUnhandledError@_ExceptionHolder@details@Concurrency@@AEAAXXZ\r\n?_Addcats@_Locinfo@std@@QEAAAEAV12@HPEBD@Z\r\n?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z\r\n?_Addstd@ios_base@std@@SAXPEAV12@@Z\r\n?_Assign@_ContextCallback@details@Concurrency@@AEAAXPEAX@Z\r\n?_Atexit@@YAXP6AXXZ@Z\r\n?_BADOFF@std@@3_JB\r\n?_C_str@?$_Yarn@D@std@@QEBAPEBDXZ\r\n?_C_str@?$_Yarn@G@std@@QEBAPEBGXZ\r\n?_C_str@?$_Yarn@_W@std@@QEBAPEB_WXZ\r\n?_CallInContext@_ContextCallback@details@Concurrency@@QEBAXV?$function@$$A6AXXZ@std@@_N@Z\r\n?_Callfns@ios_base@std@@AEAAXW4event@12@@Z\r\n?_Capture@_ContextCallback@details@Concurrency@@AEAAXXZ\r\n?_Clocptr@_Locimp@locale@std@@0PEAV123@EA\r\n?_Decref@facet@locale@std@@UEAAPEAV_Facet_base@3@XZ\r\n?_Donarrow@?$ctype@G@std@@IEBADGD@Z\r\n?_Donarrow@?$ctype@_W@std@@IEBAD_WD@Z\r\n?_Dowiden@?$ctype@G@std@@IEBAGD@Z\r\n?_Dowiden@?$ctype@_W@std@@IEBA_WD@Z\r\n?_Empty@?$_Yarn@D@std@@QEBA_NXZ\r\n?_Empty@?$_Yarn@G@std@@QEBA_NXZ\r\n?_Empty@?$_Yarn@_W@std@@QEBA_NXZ\r\n?_Execute_once@std@@YAHAEAUonce_flag@1@P6AHPEAX1PEAPEAX@Z1@Z\r\n?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADDH@Z\r\n?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADDH@Z\r\n?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADDH@Z\r\n?_Findarr@ios_base@std@@AEAAAEAU_Iosarray@12@H@Z\r\n?_Fiopen@std@@YAPEAU_iobuf@@PEBDHH@Z\r\n?_Fiopen@std@@YAPEAU_iobuf@@PEBGHH@Z\r\n?_Fiopen@std@@YAPEAU_iobuf@@PEB_WHH@Z\r\n?_Fput@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBD_K@Z\r\n?_Fput@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBD_K@Z\r\n?_Fput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBD_K@Z\r\n?_Getcat@?$codecvt@DDU_Mbstatet@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$codecvt@GDU_Mbstatet@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$codecvt@_SDU_Mbstatet@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$codecvt@_UDU_Mbstatet@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$codecvt@_WDU_Mbstatet@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@facet@locale@std@@SA_KPEAPEBV123@PEBV23@@Z\r\n?_Getcoll@_Locinfo@std@@QEBA?AU_Collvec@@XZ\r\n?_Getctype@_Locinfo@std@@QEBA?AU_Ctypevec@@XZ\r\n?_Getcvt@_Locinfo@std@@QEBA?AU_Cvtvec@@XZ\r\n?_Getdateorder@_Locinfo@std@@QEBAHXZ\r\n?_Getdays@_Locinfo@std@@QEBAPEBDXZ\r\n?_Getfalse@_Locinfo@std@@QEBAPEBDXZ\r\n?_Getffld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getffld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getffld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getffldx@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getffldx@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getffldx@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getfmt@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBD@Z\r\n?_Getfmt@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBD@Z\r\n?_Getfmt@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBD@Z\r\n?_Getgloballocale@locale@std@@CAPEAV_Locimp@12@XZ\r\n?_Getifld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1HAEBVlocale@2@@Z\r\n?_Getifld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1HAEBVlocale@2@@Z\r\n?_Getifld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1HAEBVlocale@2@@Z\r\n?_Getint@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@0HHAEAHAEBV?$ctype@D@2@@Z\r\n?_Getint@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@0HHAEAHAEBV?$ctype@G@2@@Z\r\n?_Getint@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@0HHAEAHAEBV?$ctype@_W@2@@Z\r\n?_Getlconv@_Locinfo@std@@QEBAPEBUlconv@@XZ\r\n?_Getmonths@_Locinfo@std@@QEBAPEBDXZ\r\n?_Getname@_Locinfo@std@@QEBAPEBDXZ\r\n?_Getptr@_Timevec@std@@QEBAPEAXXZ\r\n?_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ\r\n?_Gettrue@_Locinfo@std@@QEBAPEBDXZ\r\n?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBA_JXZ\r\n?_Gnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBA_JXZ\r\n?_Gnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBA_JXZ\r\n?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ\r\n?_Gndec@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ\r\n?_Gndec@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ\r\n?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ\r\n?_Gninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ\r\n?_Gninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ\r\n?_Gnpreinc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ\r\n?_Gnpreinc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ\r\n?_Gnpreinc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ\r\n?_Id_cnt@id@locale@std@@0HA\r\n?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z\r\n?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z\r\n?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z\r\n?_Incref@facet@locale@std@@UEAAXXZ\r\n?_Index@ios_base@std@@0HA\r\n?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAPEAD0PEAH001@Z\r\n?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXXZ\r\n?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAPEAG0PEAH001@Z\r\n?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXXZ\r\n?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAPEA_W0PEAH001@Z\r\n?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXXZ\r\n?_Init@?$codecvt@DDU_Mbstatet@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$codecvt@GDU_Mbstatet@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$codecvt@_SDU_Mbstatet@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$codecvt@_UDU_Mbstatet@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$codecvt@_WDU_Mbstatet@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$ctype@D@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$ctype@G@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$ctype@_W@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@ios_base@std@@IEAAXXZ\r\n?_Init@locale@std@@CAPEAV_Locimp@12@_N@Z\r\n?_Init_cnt@Init@ios_base@std@@0HA\r\n?_Init_cnt@_UShinit@std@@0HA\r\n?_Init_cnt@_Winit@std@@0HA\r\n?_Init_cnt_func@Init@ios_base@std@@CAAEAHXZ\r\n?_Init_ctor@Init@ios_base@std@@CAXPEAV123@@Z\r\n?_Init_dtor@Init@ios_base@std@@CAXPEAV123@@Z\r\n?_Init_locks_ctor@_Init_locks@std@@CAXPEAV12@@Z\r\n?_Init_locks_dtor@_Init_locks@std@@CAXPEAV12@@Z\r\n?_Ios_base_dtor@ios_base@std@@CAXPEAV12@@Z\r\n?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z\r\n?_Ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_N_N@Z\r\n?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z\r\n?_Iput@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEAD_K@Z\r\n?_Iput@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEAD_K@Z\r\n?_Iput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEAD_K@Z\r\n?_IsCurrentOriginSTA@_ContextCallback@details@Concurrency@@CA_NXZ\r\n?_IsNonBlockingThread@_Task_impl_base@details@Concurrency@@SA_NXZ\r\n?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z\r\n?_Locimp_ctor@_Locimp@locale@std@@CAXPEAV123@AEBV123@@Z\r\n?_Locimp_dtor@_Locimp@locale@std@@CAXPEAV123@@Z\r\n?_Locinfo_Addcats@_Locinfo@std@@SAAEAV12@PEAV12@HPEBD@Z\r\n?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@HPEBD@Z\r\n?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@PEBD@Z\r\n?_Locinfo_dtor@_Locinfo@std@@SAXPEAV12@@Z\r\n?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAAXXZ\r\n?_Lock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@UEAAXXZ\r\n?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UEAAXXZ\r\n?_Lockit_ctor@_Lockit@std@@CAXPEAV12@@Z\r\n?_Lockit_ctor@_Lockit@std@@CAXPEAV12@H@Z\r\n?_Lockit_ctor@_Lockit@std@@SAXH@Z\r\n?_Lockit_dtor@_Lockit@std@@CAXPEAV12@@Z\r\n?_Lockit_dtor@_Lockit@std@@SAXH@Z\r\n?_LogCancelTask@_TaskEventLogger@details@Concurrency@@QEAAXXZ\r\n?_LogScheduleTask@_TaskEventLogger@details@Concurrency@@QEAAX_N@Z\r\n?_LogTaskCompleted@_TaskEventLogger@details@Concurrency@@QEAAXXZ\r\n?_LogTaskExecutionCompleted@_TaskEventLogger@details@Concurrency@@QEAAXXZ\r\n?_LogWorkItemCompleted@_TaskEventLogger@details@Concurrency@@QEAAXXZ\r\n?_LogWorkItemStarted@_TaskEventLogger@details@Concurrency@@QEAAXXZ\r\n?_MP_Add@std@@YAXQEA_K_K@Z\r\n?_MP_Get@std@@YA_KQEA_K@Z\r\n?_MP_Mul@std@@YAXQEA_K_K1@Z\r\n?_MP_Rem@std@@YAXQEA_K_K@Z\r\n?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z\r\n?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z\r\n?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z\r\n?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z\r\n?_Mtx_delete@threads@stdext@@YAXPEAX@Z\r\n?_Mtx_lock@threads@stdext@@YAXPEAX@Z\r\n?_Mtx_new@threads@stdext@@YAXAEAPEAX@Z\r\n?_Mtx_unlock@threads@stdext@@YAXPEAX@Z\r\n?_New_Locimp@_Locimp@locale@std@@CAPEAV123@AEBV123@@Z\r\n?_New_Locimp@_Locimp@locale@std@@CAPEAV123@_N@Z\r\n?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n?_Osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBA_JXZ\r\n?_Pnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBA_JXZ\r\n?_Pnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBA_JXZ\r\n?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ\r\n?_Pninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ\r\n?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ\r\n?_Ptr_cerr@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA\r\n?_Ptr_cin@std@@3PEAV?$basic_istream@DU?$char_traits@D@std@@@1@EA\r\n?_Ptr_clog@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA\r\n?_Ptr_cout@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA\r\n?_Ptr_wcerr@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA\r\n?_Ptr_wcerr@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA\r\n?_Ptr_wcin@std@@3PEAV?$basic_istream@GU?$char_traits@G@std@@@1@EA\r\n?_Ptr_wcin@std@@3PEAV?$basic_istream@_WU?$char_traits@_W@std@@@1@EA\r\n?_Ptr_wclog@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA\r\n?_Ptr_wclog@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA\r\n?_Ptr_wcout@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA\r\n?_Ptr_wcout@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA\r\n?_Put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@PEBD_K@Z\r\n?_Put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@PEBG_K@Z\r\n?_Put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@PEB_W_K@Z\r\n?_Raise_handler@std@@3P6AXAEBVexception@stdext@@@ZEA\r\n?_Random_device@std@@YAIXZ\r\n?_Release_chore@details@Concurrency@@YAXPEAU_Threadpool_chore@12@@Z\r\n?_Rep@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@D_K@Z\r\n?_Rep@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@G_K@Z\r\n?_Rep@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@_W_K@Z\r\n?_ReportUnobservedException@details@Concurrency@@YAXXZ\r\n?_Reschedule_chore@details@Concurrency@@YAHPEBU_Threadpool_chore@12@@Z\r\n?_Reset@_ContextCallback@details@Concurrency@@AEAAXXZ\r\n?_Rethrow_future_exception@std@@YAXVexception_ptr@1@@Z\r\n?_Rng_abort@std@@YAXPEBD@Z\r\n?_Schedule_chore@details@Concurrency@@YAHPEAU_Threadpool_chore@12@@Z\r\n?_Setgloballocale@locale@std@@CAXPEAX@Z\r\n?_Src@?1??_Getffld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getffld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getffld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getffldx@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getffldx@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getffldx@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getifld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@3@1HAEBVlocale@3@@Z@4QBDB\r\n?_Src@?1??_Getifld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@3@1HAEBVlocale@3@@Z@4QBDB\r\n?_Src@?1??_Getifld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@3@1HAEBVlocale@3@@Z@4QBDB\r\n?_Sync@ios_base@std@@0_NA\r\n?_Syserror_map@std@@YAPEBDH@Z\r\n?_Throw_C_error@std@@YAXH@Z\r\n?_Throw_Cpp_error@std@@YAXH@Z\r\n?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z\r\n?_Tidy@?$_Yarn@D@std@@AEAAXXZ\r\n?_Tidy@?$_Yarn@G@std@@AEAAXXZ\r\n?_Tidy@?$_Yarn@_W@std@@AEAAXXZ\r\n?_Tidy@?$ctype@D@std@@IEAAXXZ\r\n?_Tidy@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEAAXXZ\r\n?_Tidy@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEAAXXZ\r\n?_Tidy@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEAAXXZ\r\n?_Tidy@ios_base@std@@AEAAXXZ\r\n?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAAXXZ\r\n?_Unlock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@UEAAXXZ\r\n?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UEAAXXZ\r\n?_W_Getdays@_Locinfo@std@@QEBAPEBGXZ\r\n?_W_Getmonths@_Locinfo@std@@QEBAPEBGXZ\r\n?_W_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ\r\n?_Winerror_map@std@@YAHH@Z\r\n?_Winerror_message@std@@YAKKPEADK@Z\r\n?_XGetLastError@std@@YAXXZ\r\n?_XLgamma@std@@YAMM@Z\r\n?_XLgamma@std@@YANN@Z\r\n?_XLgamma@std@@YAOO@Z\r\n?_Xbad_alloc@std@@YAXXZ\r\n?_Xbad_function_call@std@@YAXXZ\r\n?_Xinvalid_argument@std@@YAXPEBD@Z\r\n?_Xlength_error@std@@YAXPEBD@Z\r\n?_Xout_of_range@std@@YAXPEBD@Z\r\n?_Xoverflow_error@std@@YAXPEBD@Z\r\n?_Xregex_error@std@@YAXW4error_type@regex_constants@1@@Z\r\n?_Xruntime_error@std@@YAXPEBD@Z\r\n?__ExceptionPtrAssign@@YAXPEAXPEBX@Z\r\n?__ExceptionPtrCompare@@YA_NPEBX0@Z\r\n?__ExceptionPtrCopy@@YAXPEAXPEBX@Z\r\n?__ExceptionPtrCopyException@@YAXPEAXPEBX1@Z\r\n?__ExceptionPtrCreate@@YAXPEAX@Z\r\n?__ExceptionPtrCurrentException@@YAXPEAX@Z\r\n?__ExceptionPtrDestroy@@YAXPEAX@Z\r\n?__ExceptionPtrRethrow@@YAXPEBX@Z\r\n?__ExceptionPtrSwap@@YAXPEAX0@Z\r\n?__ExceptionPtrToBool@@YA_NPEBX@Z\r\n?always_noconv@codecvt_base@std@@QEBA_NXZ\r\n?bad@ios_base@std@@QEBA_NXZ\r\n?c_str@?$_Yarn@D@std@@QEBAPEBDXZ\r\n?c_str@?$_Yarn@G@std@@QEBAPEBGXZ\r\n?c_str@?$_Yarn@_W@std@@QEBAPEB_WXZ\r\n?cerr@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A\r\n?classic@locale@std@@SAAEBV12@XZ\r\n?classic_table@?$ctype@D@std@@SAPEBFXZ\r\n?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z\r\n?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z\r\n?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z\r\n?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z\r\n?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z\r\n?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z\r\n?clear@ios_base@std@@QEAAXH@Z\r\n?clear@ios_base@std@@QEAAXH_N@Z\r\n?clear@ios_base@std@@QEAAXI@Z\r\n?clog@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEBV12@@Z\r\n?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEBV12@@Z\r\n?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEBV12@@Z\r\n?copyfmt@ios_base@std@@QEAAAEAV12@AEBV12@@Z\r\n?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ\r\n?date_order@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ\r\n?date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ\r\n?do_always_noconv@?$codecvt@DDU_Mbstatet@@@std@@MEBA_NXZ\r\n?do_always_noconv@?$codecvt@GDU_Mbstatet@@@std@@MEBA_NXZ\r\n?do_always_noconv@?$codecvt@_SDU_Mbstatet@@@std@@MEBA_NXZ\r\n?do_always_noconv@?$codecvt@_UDU_Mbstatet@@@std@@MEBA_NXZ\r\n?do_always_noconv@?$codecvt@_WDU_Mbstatet@@@std@@MEBA_NXZ\r\n?do_always_noconv@codecvt_base@std@@MEBA_NXZ\r\n?do_date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ\r\n?do_date_order@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ\r\n?do_date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ\r\n?do_encoding@?$codecvt@GDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_encoding@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_encoding@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_encoding@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_encoding@codecvt_base@std@@MEBAHXZ\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?do_get@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?do_get@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?do_get@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?do_get_date@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_date@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_date@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_monthname@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_monthname@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_monthname@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_time@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_time@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_time@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_weekday@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_weekday@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_weekday@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_year@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_year@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_year@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_in@?$codecvt@DDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAD3AEAPEAD@Z\r\n?do_in@?$codecvt@GDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAG3AEAPEAG@Z\r\n?do_in@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_S3AEAPEA_S@Z\r\n?do_in@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_U3AEAPEA_U@Z\r\n?do_in@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_W3AEAPEA_W@Z\r\n?do_is@?$ctype@G@std@@MEBAPEBGPEBG0PEAF@Z\r\n?do_is@?$ctype@G@std@@MEBA_NFG@Z\r\n?do_is@?$ctype@_W@std@@MEBAPEB_WPEB_W0PEAF@Z\r\n?do_is@?$ctype@_W@std@@MEBA_NF_W@Z\r\n?do_length@?$codecvt@DDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?do_length@?$codecvt@GDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?do_length@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?do_length@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?do_length@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?do_max_length@?$codecvt@GDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_max_length@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_max_length@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_max_length@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_max_length@codecvt_base@std@@MEBAHXZ\r\n?do_narrow@?$ctype@D@std@@MEBADDD@Z\r\n?do_narrow@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD@Z\r\n?do_narrow@?$ctype@G@std@@MEBADGD@Z\r\n?do_narrow@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD@Z\r\n?do_narrow@?$ctype@_W@std@@MEBAD_WD@Z\r\n?do_narrow@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD@Z\r\n?do_out@?$codecvt@DDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAD3AEAPEAD@Z\r\n?do_out@?$codecvt@GDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBG1AEAPEBGPEAD3AEAPEAD@Z\r\n?do_out@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEB_S1AEAPEB_SPEAD3AEAPEAD@Z\r\n?do_out@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEB_U1AEAPEB_UPEAD3AEAPEAD@Z\r\n?do_out@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEB_W1AEAPEB_WPEAD3AEAPEAD@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DJ@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DK@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DN@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DO@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBX@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_J@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_K@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_N@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GJ@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GK@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GN@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GO@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBX@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_J@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_K@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_N@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WJ@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WK@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WN@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WO@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBX@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_J@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_K@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_N@Z\r\n?do_put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBUtm@@DD@Z\r\n?do_put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBUtm@@DD@Z\r\n?do_put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBUtm@@DD@Z\r\n?do_scan_is@?$ctype@G@std@@MEBAPEBGFPEBG0@Z\r\n?do_scan_is@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z\r\n?do_scan_not@?$ctype@G@std@@MEBAPEBGFPEBG0@Z\r\n?do_scan_not@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z\r\n?do_tolower@?$ctype@D@std@@MEBADD@Z\r\n?do_tolower@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z\r\n?do_tolower@?$ctype@G@std@@MEBAGG@Z\r\n?do_tolower@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z\r\n?do_tolower@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z\r\n?do_tolower@?$ctype@_W@std@@MEBA_W_W@Z\r\n?do_toupper@?$ctype@D@std@@MEBADD@Z\r\n?do_toupper@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z\r\n?do_toupper@?$ctype@G@std@@MEBAGG@Z\r\n?do_toupper@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z\r\n?do_toupper@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z\r\n?do_toupper@?$ctype@_W@std@@MEBA_W_W@Z\r\n?do_unshift@?$codecvt@DDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?do_unshift@?$codecvt@GDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?do_unshift@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?do_unshift@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?do_unshift@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?do_widen@?$ctype@D@std@@MEBADD@Z\r\n?do_widen@?$ctype@D@std@@MEBAPEBDPEBD0PEAD@Z\r\n?do_widen@?$ctype@G@std@@MEBAGD@Z\r\n?do_widen@?$ctype@G@std@@MEBAPEBDPEBD0PEAG@Z\r\n?do_widen@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W@Z\r\n?do_widen@?$ctype@_W@std@@MEBA_WD@Z\r\n?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?eback@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?eback@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?egptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?egptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?empty@?$_Yarn@D@std@@QEBA_NXZ\r\n?empty@?$_Yarn@G@std@@QEBA_NXZ\r\n?empty@?$_Yarn@_W@std@@QEBA_NXZ\r\n?empty@locale@std@@SA?AV12@XZ\r\n?encoding@codecvt_base@std@@QEBAHXZ\r\n?eof@ios_base@std@@QEBA_NXZ\r\n?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?epptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?epptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?exceptions@ios_base@std@@QEAAXH@Z\r\n?exceptions@ios_base@std@@QEAAXI@Z\r\n?exceptions@ios_base@std@@QEBAHXZ\r\n?fail@ios_base@std@@QEBA_NXZ\r\n?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAADD@Z\r\n?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADXZ\r\n?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAGG@Z\r\n?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGXZ\r\n?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA_W_W@Z\r\n?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WXZ\r\n?flags@ios_base@std@@QEAAHH@Z\r\n?flags@ios_base@std@@QEBAHXZ\r\n?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ\r\n?flush@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@XZ\r\n?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ\r\n?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z\r\n?gbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z\r\n?gbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z\r\n?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QEBA_JXZ\r\n?gcount@?$basic_istream@GU?$char_traits@G@std@@@std@@QEBA_JXZ\r\n?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEBA_JXZ\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAD@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAG@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@G@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_JG@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEA_W@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?get@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?get@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBD4@Z\r\n?get@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?get@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBG4@Z\r\n?get@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?get@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEB_W4@Z\r\n?get_date@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_date@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_date@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_monthname@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_monthname@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_monthname@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_new_handler@std@@YAP6AXXZXZ\r\n?get_time@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_time@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_time@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_weekday@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_weekday@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_weekday@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_year@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_year@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_year@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z\r\n?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z\r\n?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z\r\n?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_JG@Z\r\n?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z\r\n?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z\r\n?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEBA?AVlocale@2@XZ\r\n?getloc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEBA?AVlocale@2@XZ\r\n?getloc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEBA?AVlocale@2@XZ\r\n?getloc@ios_base@std@@QEBA?AVlocale@2@XZ\r\n?global@locale@std@@SA?AV12@AEBV12@@Z\r\n?good@ios_base@std@@QEBA_NXZ\r\n?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?gptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?gptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?id@?$codecvt@DDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@GDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@_WDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$collate@D@std@@2V0locale@2@A\r\n?id@?$collate@G@std@@2V0locale@2@A\r\n?id@?$collate@_W@std@@2V0locale@2@A\r\n?id@?$ctype@D@std@@2V0locale@2@A\r\n?id@?$ctype@G@std@@2V0locale@2@A\r\n?id@?$ctype@_W@std@@2V0locale@2@A\r\n?id@?$messages@D@std@@2V0locale@2@A\r\n?id@?$messages@G@std@@2V0locale@2@A\r\n?id@?$messages@_W@std@@2V0locale@2@A\r\n?id@?$money_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$moneypunct@D$00@std@@2V0locale@2@A\r\n?id@?$moneypunct@D$0A@@std@@2V0locale@2@A\r\n?id@?$moneypunct@G$00@std@@2V0locale@2@A\r\n?id@?$moneypunct@G$0A@@std@@2V0locale@2@A\r\n?id@?$moneypunct@_W$00@std@@2V0locale@2@A\r\n?id@?$moneypunct@_W$0A@@std@@2V0locale@2@A\r\n?id@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$numpunct@D@std@@2V0locale@2@A\r\n?id@?$numpunct@G@std@@2V0locale@2@A\r\n?id@?$numpunct@_W@std@@2V0locale@2@A\r\n?id@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z\r\n?ignore@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JG@Z\r\n?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JG@Z\r\n?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?imbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAXAEBVlocale@2@@Z\r\n?imbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAXAEBVlocale@2@@Z\r\n?imbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAXAEBVlocale@2@@Z\r\n?imbue@ios_base@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?in@?$codecvt@DDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAD3AEAPEAD@Z\r\n?in@?$codecvt@GDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAG3AEAPEAG@Z\r\n?in@?$codecvt@_SDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_S3AEAPEA_S@Z\r\n?in@?$codecvt@_UDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_U3AEAPEA_U@Z\r\n?in@?$codecvt@_WDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_W3AEAPEA_W@Z\r\n?in_avail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JXZ\r\n?in_avail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JXZ\r\n?in_avail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JXZ\r\n?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IEAAXPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z\r\n?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IEAAXPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z\r\n?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAAXPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z\r\n?intl@?$moneypunct@D$00@std@@2_NB\r\n?intl@?$moneypunct@D$0A@@std@@2_NB\r\n?intl@?$moneypunct@G$00@std@@2_NB\r\n?intl@?$moneypunct@G$0A@@std@@2_NB\r\n?intl@?$moneypunct@_W$00@std@@2_NB\r\n?intl@?$moneypunct@_W$0A@@std@@2_NB\r\n?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z\r\n?ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_N_N@Z\r\n?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z\r\n?is@?$ctype@D@std@@QEBAPEBDPEBD0PEAF@Z\r\n?is@?$ctype@D@std@@QEBA_NFD@Z\r\n?is@?$ctype@G@std@@QEBAPEBGPEBG0PEAF@Z\r\n?is@?$ctype@G@std@@QEBA_NFG@Z\r\n?is@?$ctype@_W@std@@QEBAPEB_WPEB_W0PEAF@Z\r\n?is@?$ctype@_W@std@@QEBA_NF_W@Z\r\n?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n?isfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n?iword@ios_base@std@@QEAAAEAJH@Z\r\n?length@?$codecvt@DDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?length@?$codecvt@GDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?length@?$codecvt@_SDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?length@?$codecvt@_UDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?length@?$codecvt@_WDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?max_length@codecvt_base@std@@QEBAHXZ\r\n?move@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAX$$QEAV12@@Z\r\n?move@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXAEAV12@@Z\r\n?move@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAX$$QEAV12@@Z\r\n?move@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXAEAV12@@Z\r\n?move@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAX$$QEAV12@@Z\r\n?move@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXAEAV12@@Z\r\n?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADDD@Z\r\n?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBADGD@Z\r\n?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAD_WD@Z\r\n?narrow@?$ctype@D@std@@QEBADDD@Z\r\n?narrow@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD@Z\r\n?narrow@?$ctype@G@std@@QEBADGD@Z\r\n?narrow@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD@Z\r\n?narrow@?$ctype@_W@std@@QEBAD_WD@Z\r\n?narrow@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD@Z\r\n?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA_NXZ\r\n?opfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA_NXZ\r\n?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA_NXZ\r\n?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n?osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n?out@?$codecvt@DDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAD3AEAPEAD@Z\r\n?out@?$codecvt@GDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBG1AEAPEBGPEAD3AEAPEAD@Z\r\n?out@?$codecvt@_SDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEB_S1AEAPEB_SPEAD3AEAPEAD@Z\r\n?out@?$codecvt@_UDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEB_U1AEAPEB_UPEAD3AEAPEAD@Z\r\n?out@?$codecvt@_WDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEB_W1AEAPEB_WPEAD3AEAPEAD@Z\r\n?overflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z\r\n?overflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z\r\n?overflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z\r\n?pbackfail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z\r\n?pbackfail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z\r\n?pbackfail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z\r\n?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?pbase@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?pbase@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z\r\n?pbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z\r\n?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z\r\n?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?peek@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?pptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?pptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?precision@ios_base@std@@QEAA_J_J@Z\r\n?precision@ios_base@std@@QEBA_JXZ\r\n?pubimbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?pubimbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?pubimbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JII@Z\r\n?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JII@Z\r\n?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JII@Z\r\n?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@I@Z\r\n?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@I@Z\r\n?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@I@Z\r\n?pubsetbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEAD_J@Z\r\n?pubsetbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEAG_J@Z\r\n?pubsetbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEA_W_J@Z\r\n?pubsync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?pubsync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAHXZ\r\n?pubsync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAHXZ\r\n?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z\r\n?put@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@G@Z\r\n?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DJ@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DK@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DN@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DO@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBX@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_J@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_K@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_N@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GJ@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GK@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GN@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GO@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBX@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_J@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_K@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_N@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WJ@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WK@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WN@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WO@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBX@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_J@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_K@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_N@Z\r\n?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBUtm@@DD@Z\r\n?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBUtm@@PEBD3@Z\r\n?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBUtm@@DD@Z\r\n?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBUtm@@PEBG3@Z\r\n?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBUtm@@DD@Z\r\n?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBUtm@@PEB_W4@Z\r\n?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z\r\n?putback@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@G@Z\r\n?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z\r\n?pword@ios_base@std@@QEAAAEAPEAXH@Z\r\n?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PEAV32@@Z\r\n?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ\r\n?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PEAV32@@Z\r\n?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ\r\n?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PEAV32@@Z\r\n?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ\r\n?rdstate@ios_base@std@@QEBAHXZ\r\n?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z\r\n?read@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z\r\n?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z\r\n?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z\r\n?readsome@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_J@Z\r\n?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z\r\n?register_callback@ios_base@std@@QEAAXP6AXW4event@12@AEAV12@H@ZH@Z\r\n?resetiosflags@std@@YA?AU?$_Smanip@H@1@H@Z\r\n?sbumpc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?sbumpc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?sbumpc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?scan_is@?$ctype@D@std@@QEBAPEBDFPEBD0@Z\r\n?scan_is@?$ctype@G@std@@QEBAPEBGFPEBG0@Z\r\n?scan_is@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z\r\n?scan_not@?$ctype@D@std@@QEBAPEBDFPEBD0@Z\r\n?scan_not@?$ctype@G@std@@QEBAPEBGFPEBG0@Z\r\n?scan_not@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z\r\n?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?seekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?seekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?seekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?seekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?set_new_handler@std@@YAP6AXXZP6AXXZ@Z\r\n?set_rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z\r\n?set_rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z\r\n?set_rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z\r\n?setbase@std@@YA?AU?$_Smanip@H@1@H@Z\r\n?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAPEAV12@PEAD_J@Z\r\n?setbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAPEAV12@PEAG_J@Z\r\n?setbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAPEAV12@PEA_W_J@Z\r\n?setf@ios_base@std@@QEAAHH@Z\r\n?setf@ios_base@std@@QEAAHHH@Z\r\n?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z\r\n?setg@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG00@Z\r\n?setg@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W00@Z\r\n?setiosflags@std@@YA?AU?$_Smanip@H@1@H@Z\r\n?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z\r\n?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD0@Z\r\n?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG00@Z\r\n?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG0@Z\r\n?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W00@Z\r\n?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W0@Z\r\n?setprecision@std@@YA?AU?$_Smanip@_J@1@_J@Z\r\n?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z\r\n?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z\r\n?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z\r\n?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z\r\n?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z\r\n?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z\r\n?setstate@ios_base@std@@QEAAXH@Z\r\n?setstate@ios_base@std@@QEAAXH_N@Z\r\n?setstate@ios_base@std@@QEAAXI@Z\r\n?setw@std@@YA?AU?$_Smanip@_J@1@_J@Z\r\n?sgetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?sgetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?sgetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?sgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z\r\n?sgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_J@Z\r\n?sgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z\r\n?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JXZ\r\n?showmanyc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JXZ\r\n?showmanyc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JXZ\r\n?snextc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?snextc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?snextc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?sputbackc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z\r\n?sputbackc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGG@Z\r\n?sputbackc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z\r\n?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z\r\n?sputc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGG@Z\r\n?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z\r\n?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEBD_J@Z\r\n?sputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEBG_J@Z\r\n?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEB_W_J@Z\r\n?stossc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n?stossc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n?stossc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n?sungetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?sungetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?sungetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?swap@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXAEAV12@@Z\r\n?swap@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXAEAV12@@Z\r\n?swap@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXAEAV12@@Z\r\n?swap@?$basic_iostream@DU?$char_traits@D@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_iostream@GU?$char_traits@G@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_ostream@DU?$char_traits@D@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_ostream@GU?$char_traits@G@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@ios_base@std@@QEAAXAEAV12@@Z\r\n?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?sync@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAHXZ\r\n?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAHXZ\r\n?sync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ\r\n?sync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAHXZ\r\n?sync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAHXZ\r\n?sync_with_stdio@ios_base@std@@SA_N_N@Z\r\n?table@?$ctype@D@std@@QEBAPEBFXZ\r\n?table_size@?$ctype@D@std@@2_KB\r\n?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@PEAV32@@Z\r\n?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ\r\n?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@PEAV32@@Z\r\n?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ\r\n?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PEAV32@@Z\r\n?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ\r\n?tolower@?$ctype@D@std@@QEBADD@Z\r\n?tolower@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z\r\n?tolower@?$ctype@G@std@@QEBAGG@Z\r\n?tolower@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z\r\n?tolower@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z\r\n?tolower@?$ctype@_W@std@@QEBA_W_W@Z\r\n?toupper@?$ctype@D@std@@QEBADD@Z\r\n?toupper@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z\r\n?toupper@?$ctype@G@std@@QEBAGG@Z\r\n?toupper@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z\r\n?toupper@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z\r\n?toupper@?$ctype@_W@std@@QEBA_W_W@Z\r\n?uflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ\r\n?uflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGXZ\r\n?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ\r\n?uncaught_exception@std@@YA_NXZ\r\n?uncaught_exceptions@std@@YAHXZ\r\n?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ\r\n?underflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGXZ\r\n?underflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ\r\n?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ\r\n?unget@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@XZ\r\n?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ\r\n?unsetf@ios_base@std@@QEAAXH@Z\r\n?unshift@?$codecvt@DDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?unshift@?$codecvt@GDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?unshift@?$codecvt@_SDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?unshift@?$codecvt@_UDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?unshift@?$codecvt@_WDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?wcerr@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?wcerr@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?wcin@std@@3V?$basic_istream@GU?$char_traits@G@std@@@1@A\r\n?wcin@std@@3V?$basic_istream@_WU?$char_traits@_W@std@@@1@A\r\n?wclog@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?wclog@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?wcout@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?wcout@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADD@Z\r\n?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGD@Z\r\n?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WD@Z\r\n?widen@?$ctype@D@std@@QEBADD@Z\r\n?widen@?$ctype@D@std@@QEBAPEBDPEBD0PEAD@Z\r\n?widen@?$ctype@G@std@@QEBAGD@Z\r\n?widen@?$ctype@G@std@@QEBAPEBDPEBD0PEAG@Z\r\n?widen@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W@Z\r\n?widen@?$ctype@_W@std@@QEBA_WD@Z\r\n?width@ios_base@std@@QEAA_J_J@Z\r\n?width@ios_base@std@@QEBA_JXZ\r\n?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEBD_J@Z\r\n?write@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEBG_J@Z\r\n?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEB_W_J@Z\r\n?xalloc@ios_base@std@@SAHXZ\r\n?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEAD_J@Z\r\n?xsgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEAG_J@Z\r\n?xsgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEA_W_J@Z\r\n?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEBD_J@Z\r\n?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEBG_J@Z\r\n?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEB_W_J@Z\r\n_Chmod\r\n_Close_dir\r\n_Cnd_broadcast\r\n_Cnd_destroy\r\n_Cnd_destroy_in_situ\r\n_Cnd_do_broadcast_at_thread_exit\r\n_Cnd_init\r\n_Cnd_init_in_situ\r\n_Cnd_register_at_thread_exit\r\n_Cnd_signal\r\n_Cnd_timedwait\r\n_Cnd_unregister_at_thread_exit\r\n_Cnd_wait\r\n_Copy_file\r\n_Cosh\r\n_Current_get\r\n_Current_set\r\n_Denorm\r\n_Dtest\r\n_Equivalent\r\n_Exp\r\n_FCosh\r\n_FDenorm\r\n_FDtest\r\n_FExp\r\n_FInf\r\n_FNan\r\n_FSinh\r\n_FSnan\r\n_File_size\r\n_Getcoll\r\n_Getctype\r\n_Getcvt\r\n_Getdateorder\r\n_Getwctype\r\n_Getwctypes\r\n_Hard_links\r\n_Hugeval\r\n_Inf\r\n_LCosh\r\n_LDenorm\r\n_LDtest\r\n_LExp\r\n_LInf\r\n_LNan\r\n_LSinh\r\n_LSnan\r\n_Last_write_time\r\n_Link\r\n_Lock_shared_ptr_spin_lock\r\n_Lstat\r\n_Make_dir\r\n_Mbrtowc\r\n_Mtx_clear_owner\r\n_Mtx_current_owns\r\n_Mtx_destroy\r\n_Mtx_destroy_in_situ\r\n_Mtx_getconcrtcs\r\n_Mtx_init\r\n_Mtx_init_in_situ\r\n_Mtx_lock\r\n_Mtx_reset_owner\r\n_Mtx_timedlock\r\n_Mtx_trylock\r\n_Mtx_unlock\r\n_Mtxdst\r\n_Mtxinit\r\n_Mtxlock\r\n_Mtxunlock\r\n_Nan\r\n_Open_dir\r\n_Query_perf_counter\r\n_Query_perf_frequency\r\n_Read_dir\r\n_Remove_dir\r\n_Rename\r\n_Resize\r\n_Set_last_write_time\r\n_Sinh\r\n_Snan\r\n_Stat\r\n_Statvfs\r\n_Stod\r\n_Stodx\r\n_Stof\r\n_Stofx\r\n_Stold\r\n_Stoldx\r\n_Stoll\r\n_Stollx\r\n_Stolx\r\n_Stoul\r\n_Stoull\r\n_Stoullx\r\n_Stoulx\r\n_Strcoll\r\n_Strxfrm\r\n_Symlink\r\n_Symlink_get\r\n_Temp_get\r\n_Thrd_abort\r\n_Thrd_create\r\n_Thrd_current\r\n_Thrd_detach\r\n_Thrd_equal\r\n_Thrd_exit\r\n_Thrd_hardware_concurrency\r\n_Thrd_id\r\n_Thrd_join\r\n_Thrd_sleep\r\n_Thrd_start\r\n_Thrd_yield\r\n_To_byte\r\n_To_wide\r\n_Tolower\r\n_Toupper\r\n_Towlower\r\n_Towupper\r\n_Unlink\r\n_Unlock_shared_ptr_spin_lock\r\n_WStod\r\n_WStodx\r\n_WStof\r\n_WStofx\r\n_WStold\r\n_WStoldx\r\n_Wcrtomb\r\n_Wcscoll\r\n_Wcsxfrm\r\n_Xtime_diff_to_millis\r\n_Xtime_diff_to_millis2\r\n_Xtime_get_ticks\r\n__Wcrtomb_lk\r\n__crtCloseThreadpoolTimer\r\n__crtCloseThreadpoolWait\r\n__crtCompareStringA\r\n__crtCompareStringEx\r\n__crtCompareStringW\r\n__crtCreateEventExW\r\n__crtCreateSemaphoreExW\r\n__crtCreateSymbolicLinkW\r\n__crtCreateThreadpoolTimer\r\n__crtCreateThreadpoolWait\r\n__crtFlushProcessWriteBuffers\r\n__crtFreeLibraryWhenCallbackReturns\r\n__crtGetCurrentProcessorNumber\r\n__crtGetFileInformationByHandleEx\r\n__crtGetLocaleInfoEx\r\n__crtGetSystemTimePreciseAsFileTime\r\n__crtGetTickCount64\r\n__crtInitOnceExecuteOnce\r\n__crtInitializeCriticalSectionEx\r\n__crtIsPackagedApp\r\n__crtLCMapStringA\r\n__crtLCMapStringEx\r\n__crtLCMapStringW\r\n__crtSetFileInformationByHandle\r\n__crtSetThreadpoolTimer\r\n__crtSetThreadpoolWait\r\n__crtWaitForThreadpoolTimerCallbacks\r\n__set_stl_sync_api_mode\r\nxtime_get\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/amd64_onecore.exports",
    "content": "??$_Getvals@_W@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAX_WAEBV_Locinfo@1@@Z\r\n??$_Getvals@_W@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAX_WAEBV_Locinfo@1@@Z\r\n??$_Getvals@_W@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAX_WAEBV_Locinfo@1@@Z\r\n??0?$_Yarn@D@std@@QEAA@AEBV01@@Z\r\n??0?$_Yarn@D@std@@QEAA@PEBD@Z\r\n??0?$_Yarn@D@std@@QEAA@XZ\r\n??0?$_Yarn@G@std@@QEAA@AEBV01@@Z\r\n??0?$_Yarn@G@std@@QEAA@PEBG@Z\r\n??0?$_Yarn@G@std@@QEAA@XZ\r\n??0?$_Yarn@_W@std@@QEAA@AEBV01@@Z\r\n??0?$_Yarn@_W@std@@QEAA@PEB_W@Z\r\n??0?$_Yarn@_W@std@@QEAA@XZ\r\n??0?$basic_ios@DU?$char_traits@D@std@@@std@@IEAA@XZ\r\n??0?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??0?$basic_ios@GU?$char_traits@G@std@@@std@@IEAA@XZ\r\n??0?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAA@XZ\r\n??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??0?$basic_iostream@DU?$char_traits@D@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??0?$basic_iostream@GU?$char_traits@G@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_ostream@DU?$char_traits@D@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z\r\n??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z\r\n??0?$basic_ostream@GU?$char_traits@G@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z\r\n??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z\r\n??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z\r\n??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z\r\n??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@AEBV01@@Z\r\n??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@XZ\r\n??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@AEBV01@@Z\r\n??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@XZ\r\n??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@AEBV01@@Z\r\n??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@XZ\r\n??0?$codecvt@DDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$codecvt@DDU_Mbstatet@@@std@@QEAA@_K@Z\r\n??0?$codecvt@GDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$codecvt@GDU_Mbstatet@@@std@@QEAA@_K@Z\r\n??0?$codecvt@_SDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@KW4_Codecvt_mode@1@_K@Z\r\n??0?$codecvt@_SDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$codecvt@_SDU_Mbstatet@@@std@@QEAA@_K@Z\r\n??0?$codecvt@_UDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@KW4_Codecvt_mode@1@_K@Z\r\n??0?$codecvt@_UDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$codecvt@_UDU_Mbstatet@@@std@@QEAA@_K@Z\r\n??0?$codecvt@_WDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$codecvt@_WDU_Mbstatet@@@std@@QEAA@_K@Z\r\n??0?$ctype@D@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$ctype@D@std@@QEAA@PEBF_N_K@Z\r\n??0?$ctype@G@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$ctype@G@std@@QEAA@_K@Z\r\n??0?$ctype@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$ctype@_W@std@@QEAA@_K@Z\r\n??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAA@PEBD_K@Z\r\n??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAA@PEBD_K@Z\r\n??0?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAA@PEBD_K@Z\r\n??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAA@PEBD_K@Z\r\n??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAA@PEBD_K@Z\r\n??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z\r\n??0Init@ios_base@std@@QEAA@XZ\r\n??0_Facet_base@std@@QEAA@AEBV01@@Z\r\n??0_Facet_base@std@@QEAA@XZ\r\n??0_Init_locks@std@@QEAA@XZ\r\n??0_Locimp@locale@std@@AEAA@AEBV012@@Z\r\n??0_Locimp@locale@std@@AEAA@_N@Z\r\n??0_Locinfo@std@@QEAA@HPEBD@Z\r\n??0_Locinfo@std@@QEAA@PEBD@Z\r\n??0_Lockit@std@@QEAA@H@Z\r\n??0_Lockit@std@@QEAA@XZ\r\n??0_Timevec@std@@QEAA@AEBV01@@Z\r\n??0_Timevec@std@@QEAA@PEAX@Z\r\n??0_UShinit@std@@QEAA@XZ\r\n??0_Winit@std@@QEAA@XZ\r\n??0codecvt_base@std@@QEAA@_K@Z\r\n??0ctype_base@std@@QEAA@_K@Z\r\n??0facet@locale@std@@IEAA@_K@Z\r\n??0id@locale@std@@QEAA@_K@Z\r\n??0ios_base@std@@IEAA@XZ\r\n??0task_continuation_context@Concurrency@@AEAA@XZ\r\n??0time_base@std@@QEAA@_K@Z\r\n??1?$_Yarn@D@std@@QEAA@XZ\r\n??1?$_Yarn@G@std@@QEAA@XZ\r\n??1?$_Yarn@_W@std@@QEAA@XZ\r\n??1?$basic_ios@DU?$char_traits@D@std@@@std@@UEAA@XZ\r\n??1?$basic_ios@GU?$char_traits@G@std@@@std@@UEAA@XZ\r\n??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UEAA@XZ\r\n??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UEAA@XZ\r\n??1?$basic_iostream@GU?$char_traits@G@std@@@std@@UEAA@XZ\r\n??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ\r\n??1?$basic_istream@DU?$char_traits@D@std@@@std@@UEAA@XZ\r\n??1?$basic_istream@GU?$char_traits@G@std@@@std@@UEAA@XZ\r\n??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ\r\n??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UEAA@XZ\r\n??1?$basic_ostream@GU?$char_traits@G@std@@@std@@UEAA@XZ\r\n??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ\r\n??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAA@XZ\r\n??1?$basic_streambuf@GU?$char_traits@G@std@@@std@@UEAA@XZ\r\n??1?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UEAA@XZ\r\n??1?$codecvt@DDU_Mbstatet@@@std@@MEAA@XZ\r\n??1?$codecvt@GDU_Mbstatet@@@std@@MEAA@XZ\r\n??1?$codecvt@_SDU_Mbstatet@@@std@@MEAA@XZ\r\n??1?$codecvt@_UDU_Mbstatet@@@std@@MEAA@XZ\r\n??1?$codecvt@_WDU_Mbstatet@@@std@@MEAA@XZ\r\n??1?$ctype@D@std@@MEAA@XZ\r\n??1?$ctype@G@std@@MEAA@XZ\r\n??1?$ctype@_W@std@@MEAA@XZ\r\n??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ\r\n??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ\r\n??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ\r\n??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ\r\n??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ\r\n??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ\r\n??1Init@ios_base@std@@QEAA@XZ\r\n??1_Facet_base@std@@UEAA@XZ\r\n??1_Init_locks@std@@QEAA@XZ\r\n??1_Locimp@locale@std@@MEAA@XZ\r\n??1_Locinfo@std@@QEAA@XZ\r\n??1_Lockit@std@@QEAA@XZ\r\n??1_Timevec@std@@QEAA@XZ\r\n??1_UShinit@std@@QEAA@XZ\r\n??1_Winit@std@@QEAA@XZ\r\n??1codecvt_base@std@@UEAA@XZ\r\n??1ctype_base@std@@UEAA@XZ\r\n??1facet@locale@std@@MEAA@XZ\r\n??1ios_base@std@@UEAA@XZ\r\n??1time_base@std@@UEAA@XZ\r\n??4?$_Iosb@H@std@@QEAAAEAV01@$$QEAV01@@Z\r\n??4?$_Iosb@H@std@@QEAAAEAV01@AEBV01@@Z\r\n??4?$_Yarn@D@std@@QEAAAEAV01@AEBV01@@Z\r\n??4?$_Yarn@D@std@@QEAAAEAV01@PEBD@Z\r\n??4?$_Yarn@G@std@@QEAAAEAV01@AEBV01@@Z\r\n??4?$_Yarn@G@std@@QEAAAEAV01@PEBG@Z\r\n??4?$_Yarn@_W@std@@QEAAAEAV01@AEBV01@@Z\r\n??4?$_Yarn@_W@std@@QEAAAEAV01@PEB_W@Z\r\n??4?$basic_iostream@DU?$char_traits@D@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_iostream@GU?$char_traits@G@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_istream@DU?$char_traits@D@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_istream@GU?$char_traits@G@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_istream@_WU?$char_traits@_W@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_ostream@DU?$char_traits@D@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_ostream@GU?$char_traits@G@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_ostream@_WU?$char_traits@_W@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAAEAV01@AEBV01@@Z\r\n??4?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAAEAV01@AEBV01@@Z\r\n??4?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAAEAV01@AEBV01@@Z\r\n??4Init@ios_base@std@@QEAAAEAV012@AEBV012@@Z\r\n??4_Crt_new_delete@std@@QEAAAEAU01@$$QEAU01@@Z\r\n??4_Crt_new_delete@std@@QEAAAEAU01@AEBU01@@Z\r\n??4_Facet_base@std@@QEAAAEAV01@AEBV01@@Z\r\n??4_Init_locks@std@@QEAAAEAV01@AEBV01@@Z\r\n??4_Timevec@std@@QEAAAEAV01@AEBV01@@Z\r\n??4_UShinit@std@@QEAAAEAV01@AEBV01@@Z\r\n??4_Winit@std@@QEAAAEAV01@AEBV01@@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAF@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAG@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAH@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAI@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAJ@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAK@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAM@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAN@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAO@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAPEAX@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_J@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_K@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_N@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAF@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAG@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAH@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAI@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAJ@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAK@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAM@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAN@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAO@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAPEAX@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_J@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_K@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_N@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@GU?$char_traits@G@std@@@1@AEAV21@@Z@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAF@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAG@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAH@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAI@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAJ@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAK@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAM@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAN@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAO@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAPEAX@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_J@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_K@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_N@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@F@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@G@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@H@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@I@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@J@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@K@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@M@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@O@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEBX@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_J@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_K@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_N@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@F@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@G@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@H@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@I@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@J@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@K@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@M@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@N@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@O@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@GU?$char_traits@G@std@@@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEBX@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_J@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_K@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_N@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@F@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@G@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@H@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@I@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@J@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@K@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@M@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@N@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@O@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEBX@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_J@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_K@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_N@Z\r\n??7ios_base@std@@QEBA_NXZ\r\n??Bid@locale@std@@QEAA_KXZ\r\n??Bios_base@std@@QEBA_NXZ\r\n??_7?$basic_ios@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_ios@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_ios@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_iostream@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_iostream@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_iostream@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_istream@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_istream@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_istream@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_ostream@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_ostream@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_ostream@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_streambuf@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_streambuf@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$codecvt@DDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@GDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@_SDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@_UDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@_WDU_Mbstatet@@@std@@6B@\r\n??_7?$ctype@D@std@@6B@\r\n??_7?$ctype@G@std@@6B@\r\n??_7?$ctype@_W@std@@6B@\r\n??_7?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7_Facet_base@std@@6B@\r\n??_7_Locimp@locale@std@@6B@\r\n??_7codecvt_base@std@@6B@\r\n??_7ctype_base@std@@6B@\r\n??_7facet@locale@std@@6B@\r\n??_7ios_base@std@@6B@\r\n??_7time_base@std@@6B@\r\n??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@\r\n??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@\r\n??_8?$basic_iostream@GU?$char_traits@G@std@@@std@@7B?$basic_istream@GU?$char_traits@G@std@@@1@@\r\n??_8?$basic_iostream@GU?$char_traits@G@std@@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@\r\n??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_istream@_WU?$char_traits@_W@std@@@1@@\r\n??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_ostream@_WU?$char_traits@_W@std@@@1@@\r\n??_8?$basic_istream@DU?$char_traits@D@std@@@std@@7B@\r\n??_8?$basic_istream@GU?$char_traits@G@std@@@std@@7B@\r\n??_8?$basic_istream@_WU?$char_traits@_W@std@@@std@@7B@\r\n??_8?$basic_ostream@DU?$char_traits@D@std@@@std@@7B@\r\n??_8?$basic_ostream@GU?$char_traits@G@std@@@std@@7B@\r\n??_8?$basic_ostream@_WU?$char_traits@_W@std@@@std@@7B@\r\n??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n??_D?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n??_D?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n??_F?$codecvt@DDU_Mbstatet@@@std@@QEAAXXZ\r\n??_F?$codecvt@GDU_Mbstatet@@@std@@QEAAXXZ\r\n??_F?$codecvt@_SDU_Mbstatet@@@std@@QEAAXXZ\r\n??_F?$codecvt@_UDU_Mbstatet@@@std@@QEAAXXZ\r\n??_F?$codecvt@_WDU_Mbstatet@@@std@@QEAAXXZ\r\n??_F?$ctype@D@std@@QEAAXXZ\r\n??_F?$ctype@G@std@@QEAAXXZ\r\n??_F?$ctype@_W@std@@QEAAXXZ\r\n??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ\r\n??_F?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ\r\n??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ\r\n??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ\r\n??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ\r\n??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ\r\n??_F_Locinfo@std@@QEAAXXZ\r\n??_F_Timevec@std@@QEAAXXZ\r\n??_Fcodecvt_base@std@@QEAAXXZ\r\n??_Fctype_base@std@@QEAAXXZ\r\n??_Ffacet@locale@std@@QEAAXXZ\r\n??_Fid@locale@std@@QEAAXXZ\r\n??_Ftime_base@std@@QEAAXXZ\r\n?CaptureCallstack@platform@details@Concurrency@@YA_KPEAPEAX_K1@Z\r\n?GetCurrentThreadId@platform@details@Concurrency@@YAJXZ\r\n?GetNextAsyncId@platform@details@Concurrency@@YAIXZ\r\n?ReportUnhandledError@_ExceptionHolder@details@Concurrency@@AEAAXXZ\r\n?_Addcats@_Locinfo@std@@QEAAAEAV12@HPEBD@Z\r\n?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z\r\n?_Addstd@ios_base@std@@SAXPEAV12@@Z\r\n?_Assign@_ContextCallback@details@Concurrency@@AEAAXPEAX@Z\r\n?_Atexit@@YAXP6AXXZ@Z\r\n?_BADOFF@std@@3_JB\r\n?_C_str@?$_Yarn@D@std@@QEBAPEBDXZ\r\n?_C_str@?$_Yarn@G@std@@QEBAPEBGXZ\r\n?_C_str@?$_Yarn@_W@std@@QEBAPEB_WXZ\r\n?_CallInContext@_ContextCallback@details@Concurrency@@QEBAXV?$function@$$A6AXXZ@std@@_N@Z\r\n?_Callfns@ios_base@std@@AEAAXW4event@12@@Z\r\n?_Capture@_ContextCallback@details@Concurrency@@AEAAXXZ\r\n?_Clocptr@_Locimp@locale@std@@0PEAV123@EA\r\n?_Decref@facet@locale@std@@UEAAPEAV_Facet_base@3@XZ\r\n?_Donarrow@?$ctype@G@std@@IEBADGD@Z\r\n?_Donarrow@?$ctype@_W@std@@IEBAD_WD@Z\r\n?_Dowiden@?$ctype@G@std@@IEBAGD@Z\r\n?_Dowiden@?$ctype@_W@std@@IEBA_WD@Z\r\n?_Empty@?$_Yarn@D@std@@QEBA_NXZ\r\n?_Empty@?$_Yarn@G@std@@QEBA_NXZ\r\n?_Empty@?$_Yarn@_W@std@@QEBA_NXZ\r\n?_Execute_once@std@@YAHAEAUonce_flag@1@P6AHPEAX1PEAPEAX@Z1@Z\r\n?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADDH@Z\r\n?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADDH@Z\r\n?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADDH@Z\r\n?_Findarr@ios_base@std@@AEAAAEAU_Iosarray@12@H@Z\r\n?_Fiopen@std@@YAPEAU_iobuf@@PEBDHH@Z\r\n?_Fiopen@std@@YAPEAU_iobuf@@PEBGHH@Z\r\n?_Fiopen@std@@YAPEAU_iobuf@@PEB_WHH@Z\r\n?_Fput@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBD_K@Z\r\n?_Fput@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBD_K@Z\r\n?_Fput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBD_K@Z\r\n?_Getcat@?$codecvt@DDU_Mbstatet@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$codecvt@GDU_Mbstatet@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$codecvt@_SDU_Mbstatet@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$codecvt@_UDU_Mbstatet@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$codecvt@_WDU_Mbstatet@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@facet@locale@std@@SA_KPEAPEBV123@PEBV23@@Z\r\n?_Getcoll@_Locinfo@std@@QEBA?AU_Collvec@@XZ\r\n?_Getctype@_Locinfo@std@@QEBA?AU_Ctypevec@@XZ\r\n?_Getcvt@_Locinfo@std@@QEBA?AU_Cvtvec@@XZ\r\n?_Getdateorder@_Locinfo@std@@QEBAHXZ\r\n?_Getdays@_Locinfo@std@@QEBAPEBDXZ\r\n?_Getfalse@_Locinfo@std@@QEBAPEBDXZ\r\n?_Getffld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getffld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getffld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getffldx@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getffldx@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getffldx@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getfmt@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBD@Z\r\n?_Getfmt@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBD@Z\r\n?_Getfmt@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBD@Z\r\n?_Getgloballocale@locale@std@@CAPEAV_Locimp@12@XZ\r\n?_Getifld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1HAEBVlocale@2@@Z\r\n?_Getifld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1HAEBVlocale@2@@Z\r\n?_Getifld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1HAEBVlocale@2@@Z\r\n?_Getint@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@0HHAEAHAEBV?$ctype@D@2@@Z\r\n?_Getint@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@0HHAEAHAEBV?$ctype@G@2@@Z\r\n?_Getint@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@0HHAEAHAEBV?$ctype@_W@2@@Z\r\n?_Getlconv@_Locinfo@std@@QEBAPEBUlconv@@XZ\r\n?_Getmonths@_Locinfo@std@@QEBAPEBDXZ\r\n?_Getname@_Locinfo@std@@QEBAPEBDXZ\r\n?_Getptr@_Timevec@std@@QEBAPEAXXZ\r\n?_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ\r\n?_Gettrue@_Locinfo@std@@QEBAPEBDXZ\r\n?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBA_JXZ\r\n?_Gnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBA_JXZ\r\n?_Gnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBA_JXZ\r\n?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ\r\n?_Gndec@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ\r\n?_Gndec@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ\r\n?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ\r\n?_Gninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ\r\n?_Gninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ\r\n?_Gnpreinc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ\r\n?_Gnpreinc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ\r\n?_Gnpreinc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ\r\n?_Id_cnt@id@locale@std@@0HA\r\n?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z\r\n?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z\r\n?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z\r\n?_Incref@facet@locale@std@@UEAAXXZ\r\n?_Index@ios_base@std@@0HA\r\n?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAPEAD0PEAH001@Z\r\n?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXXZ\r\n?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAPEAG0PEAH001@Z\r\n?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXXZ\r\n?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAPEA_W0PEAH001@Z\r\n?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXXZ\r\n?_Init@?$codecvt@DDU_Mbstatet@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$codecvt@GDU_Mbstatet@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$codecvt@_SDU_Mbstatet@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$codecvt@_UDU_Mbstatet@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$codecvt@_WDU_Mbstatet@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$ctype@D@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$ctype@G@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$ctype@_W@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@ios_base@std@@IEAAXXZ\r\n?_Init@locale@std@@CAPEAV_Locimp@12@_N@Z\r\n?_Init_cnt@Init@ios_base@std@@0HA\r\n?_Init_cnt@_UShinit@std@@0HA\r\n?_Init_cnt@_Winit@std@@0HA\r\n?_Init_cnt_func@Init@ios_base@std@@CAAEAHXZ\r\n?_Init_ctor@Init@ios_base@std@@CAXPEAV123@@Z\r\n?_Init_dtor@Init@ios_base@std@@CAXPEAV123@@Z\r\n?_Init_locks_ctor@_Init_locks@std@@CAXPEAV12@@Z\r\n?_Init_locks_dtor@_Init_locks@std@@CAXPEAV12@@Z\r\n?_Ios_base_dtor@ios_base@std@@CAXPEAV12@@Z\r\n?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z\r\n?_Ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_N_N@Z\r\n?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z\r\n?_Iput@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEAD_K@Z\r\n?_Iput@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEAD_K@Z\r\n?_Iput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEAD_K@Z\r\n?_IsCurrentOriginSTA@_ContextCallback@details@Concurrency@@CA_NXZ\r\n?_IsNonBlockingThread@_Task_impl_base@details@Concurrency@@SA_NXZ\r\n?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z\r\n?_Locimp_ctor@_Locimp@locale@std@@CAXPEAV123@AEBV123@@Z\r\n?_Locimp_dtor@_Locimp@locale@std@@CAXPEAV123@@Z\r\n?_Locinfo_Addcats@_Locinfo@std@@SAAEAV12@PEAV12@HPEBD@Z\r\n?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@HPEBD@Z\r\n?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@PEBD@Z\r\n?_Locinfo_dtor@_Locinfo@std@@SAXPEAV12@@Z\r\n?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAAXXZ\r\n?_Lock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@UEAAXXZ\r\n?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UEAAXXZ\r\n?_Lockit_ctor@_Lockit@std@@CAXPEAV12@@Z\r\n?_Lockit_ctor@_Lockit@std@@CAXPEAV12@H@Z\r\n?_Lockit_ctor@_Lockit@std@@SAXH@Z\r\n?_Lockit_dtor@_Lockit@std@@CAXPEAV12@@Z\r\n?_Lockit_dtor@_Lockit@std@@SAXH@Z\r\n?_LogCancelTask@_TaskEventLogger@details@Concurrency@@QEAAXXZ\r\n?_LogScheduleTask@_TaskEventLogger@details@Concurrency@@QEAAX_N@Z\r\n?_LogTaskCompleted@_TaskEventLogger@details@Concurrency@@QEAAXXZ\r\n?_LogTaskExecutionCompleted@_TaskEventLogger@details@Concurrency@@QEAAXXZ\r\n?_LogWorkItemCompleted@_TaskEventLogger@details@Concurrency@@QEAAXXZ\r\n?_LogWorkItemStarted@_TaskEventLogger@details@Concurrency@@QEAAXXZ\r\n?_MP_Add@std@@YAXQEA_K_K@Z\r\n?_MP_Get@std@@YA_KQEA_K@Z\r\n?_MP_Mul@std@@YAXQEA_K_K1@Z\r\n?_MP_Rem@std@@YAXQEA_K_K@Z\r\n?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z\r\n?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z\r\n?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z\r\n?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z\r\n?_Mtx_delete@threads@stdext@@YAXPEAX@Z\r\n?_Mtx_lock@threads@stdext@@YAXPEAX@Z\r\n?_Mtx_new@threads@stdext@@YAXAEAPEAX@Z\r\n?_Mtx_unlock@threads@stdext@@YAXPEAX@Z\r\n?_New_Locimp@_Locimp@locale@std@@CAPEAV123@AEBV123@@Z\r\n?_New_Locimp@_Locimp@locale@std@@CAPEAV123@_N@Z\r\n?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n?_Osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBA_JXZ\r\n?_Pnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBA_JXZ\r\n?_Pnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBA_JXZ\r\n?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ\r\n?_Pninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ\r\n?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ\r\n?_Ptr_cerr@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA\r\n?_Ptr_cin@std@@3PEAV?$basic_istream@DU?$char_traits@D@std@@@1@EA\r\n?_Ptr_clog@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA\r\n?_Ptr_cout@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA\r\n?_Ptr_wcerr@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA\r\n?_Ptr_wcerr@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA\r\n?_Ptr_wcin@std@@3PEAV?$basic_istream@GU?$char_traits@G@std@@@1@EA\r\n?_Ptr_wcin@std@@3PEAV?$basic_istream@_WU?$char_traits@_W@std@@@1@EA\r\n?_Ptr_wclog@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA\r\n?_Ptr_wclog@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA\r\n?_Ptr_wcout@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA\r\n?_Ptr_wcout@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA\r\n?_Put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@PEBD_K@Z\r\n?_Put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@PEBG_K@Z\r\n?_Put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@PEB_W_K@Z\r\n?_Raise_handler@std@@3P6AXAEBVexception@stdext@@@ZEA\r\n?_Random_device@std@@YAIXZ\r\n?_Release_chore@details@Concurrency@@YAXPEAU_Threadpool_chore@12@@Z\r\n?_Rep@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@D_K@Z\r\n?_Rep@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@G_K@Z\r\n?_Rep@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@_W_K@Z\r\n?_ReportUnobservedException@details@Concurrency@@YAXXZ\r\n?_Reschedule_chore@details@Concurrency@@YAHPEBU_Threadpool_chore@12@@Z\r\n?_Reset@_ContextCallback@details@Concurrency@@AEAAXXZ\r\n?_Rethrow_future_exception@std@@YAXVexception_ptr@1@@Z\r\n?_Rng_abort@std@@YAXPEBD@Z\r\n?_Schedule_chore@details@Concurrency@@YAHPEAU_Threadpool_chore@12@@Z\r\n?_Setgloballocale@locale@std@@CAXPEAX@Z\r\n?_Src@?1??_Getffld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getffld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getffld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getffldx@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getffldx@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getffldx@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getifld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@3@1HAEBVlocale@3@@Z@4QBDB\r\n?_Src@?1??_Getifld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@3@1HAEBVlocale@3@@Z@4QBDB\r\n?_Src@?1??_Getifld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@3@1HAEBVlocale@3@@Z@4QBDB\r\n?_Sync@ios_base@std@@0_NA\r\n?_Syserror_map@std@@YAPEBDH@Z\r\n?_Throw_C_error@std@@YAXH@Z\r\n?_Throw_Cpp_error@std@@YAXH@Z\r\n?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z\r\n?_Tidy@?$_Yarn@D@std@@AEAAXXZ\r\n?_Tidy@?$_Yarn@G@std@@AEAAXXZ\r\n?_Tidy@?$_Yarn@_W@std@@AEAAXXZ\r\n?_Tidy@?$ctype@D@std@@IEAAXXZ\r\n?_Tidy@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEAAXXZ\r\n?_Tidy@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEAAXXZ\r\n?_Tidy@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEAAXXZ\r\n?_Tidy@ios_base@std@@AEAAXXZ\r\n?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAAXXZ\r\n?_Unlock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@UEAAXXZ\r\n?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UEAAXXZ\r\n?_W_Getdays@_Locinfo@std@@QEBAPEBGXZ\r\n?_W_Getmonths@_Locinfo@std@@QEBAPEBGXZ\r\n?_W_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ\r\n?_Winerror_map@std@@YAHH@Z\r\n?_Winerror_message@std@@YAKKPEADK@Z\r\n?_XGetLastError@std@@YAXXZ\r\n?_XLgamma@std@@YAMM@Z\r\n?_XLgamma@std@@YANN@Z\r\n?_XLgamma@std@@YAOO@Z\r\n?_Xbad_alloc@std@@YAXXZ\r\n?_Xbad_function_call@std@@YAXXZ\r\n?_Xinvalid_argument@std@@YAXPEBD@Z\r\n?_Xlength_error@std@@YAXPEBD@Z\r\n?_Xout_of_range@std@@YAXPEBD@Z\r\n?_Xoverflow_error@std@@YAXPEBD@Z\r\n?_Xregex_error@std@@YAXW4error_type@regex_constants@1@@Z\r\n?_Xruntime_error@std@@YAXPEBD@Z\r\n?__ExceptionPtrAssign@@YAXPEAXPEBX@Z\r\n?__ExceptionPtrCompare@@YA_NPEBX0@Z\r\n?__ExceptionPtrCopy@@YAXPEAXPEBX@Z\r\n?__ExceptionPtrCopyException@@YAXPEAXPEBX1@Z\r\n?__ExceptionPtrCreate@@YAXPEAX@Z\r\n?__ExceptionPtrCurrentException@@YAXPEAX@Z\r\n?__ExceptionPtrDestroy@@YAXPEAX@Z\r\n?__ExceptionPtrRethrow@@YAXPEBX@Z\r\n?__ExceptionPtrSwap@@YAXPEAX0@Z\r\n?__ExceptionPtrToBool@@YA_NPEBX@Z\r\n?always_noconv@codecvt_base@std@@QEBA_NXZ\r\n?bad@ios_base@std@@QEBA_NXZ\r\n?c_str@?$_Yarn@D@std@@QEBAPEBDXZ\r\n?c_str@?$_Yarn@G@std@@QEBAPEBGXZ\r\n?c_str@?$_Yarn@_W@std@@QEBAPEB_WXZ\r\n?cerr@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A\r\n?classic@locale@std@@SAAEBV12@XZ\r\n?classic_table@?$ctype@D@std@@SAPEBFXZ\r\n?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z\r\n?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z\r\n?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z\r\n?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z\r\n?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z\r\n?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z\r\n?clear@ios_base@std@@QEAAXH@Z\r\n?clear@ios_base@std@@QEAAXH_N@Z\r\n?clear@ios_base@std@@QEAAXI@Z\r\n?clog@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEBV12@@Z\r\n?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEBV12@@Z\r\n?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEBV12@@Z\r\n?copyfmt@ios_base@std@@QEAAAEAV12@AEBV12@@Z\r\n?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ\r\n?date_order@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ\r\n?date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ\r\n?do_always_noconv@?$codecvt@DDU_Mbstatet@@@std@@MEBA_NXZ\r\n?do_always_noconv@?$codecvt@GDU_Mbstatet@@@std@@MEBA_NXZ\r\n?do_always_noconv@?$codecvt@_SDU_Mbstatet@@@std@@MEBA_NXZ\r\n?do_always_noconv@?$codecvt@_UDU_Mbstatet@@@std@@MEBA_NXZ\r\n?do_always_noconv@?$codecvt@_WDU_Mbstatet@@@std@@MEBA_NXZ\r\n?do_always_noconv@codecvt_base@std@@MEBA_NXZ\r\n?do_date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ\r\n?do_date_order@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ\r\n?do_date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ\r\n?do_encoding@?$codecvt@GDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_encoding@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_encoding@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_encoding@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_encoding@codecvt_base@std@@MEBAHXZ\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?do_get@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?do_get@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?do_get@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?do_get_date@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_date@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_date@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_monthname@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_monthname@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_monthname@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_time@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_time@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_time@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_weekday@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_weekday@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_weekday@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_year@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_year@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_year@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_in@?$codecvt@DDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAD3AEAPEAD@Z\r\n?do_in@?$codecvt@GDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAG3AEAPEAG@Z\r\n?do_in@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_S3AEAPEA_S@Z\r\n?do_in@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_U3AEAPEA_U@Z\r\n?do_in@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_W3AEAPEA_W@Z\r\n?do_is@?$ctype@G@std@@MEBAPEBGPEBG0PEAF@Z\r\n?do_is@?$ctype@G@std@@MEBA_NFG@Z\r\n?do_is@?$ctype@_W@std@@MEBAPEB_WPEB_W0PEAF@Z\r\n?do_is@?$ctype@_W@std@@MEBA_NF_W@Z\r\n?do_length@?$codecvt@DDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?do_length@?$codecvt@GDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?do_length@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?do_length@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?do_length@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?do_max_length@?$codecvt@GDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_max_length@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_max_length@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_max_length@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_max_length@codecvt_base@std@@MEBAHXZ\r\n?do_narrow@?$ctype@D@std@@MEBADDD@Z\r\n?do_narrow@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD@Z\r\n?do_narrow@?$ctype@G@std@@MEBADGD@Z\r\n?do_narrow@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD@Z\r\n?do_narrow@?$ctype@_W@std@@MEBAD_WD@Z\r\n?do_narrow@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD@Z\r\n?do_out@?$codecvt@DDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAD3AEAPEAD@Z\r\n?do_out@?$codecvt@GDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBG1AEAPEBGPEAD3AEAPEAD@Z\r\n?do_out@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEB_S1AEAPEB_SPEAD3AEAPEAD@Z\r\n?do_out@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEB_U1AEAPEB_UPEAD3AEAPEAD@Z\r\n?do_out@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEB_W1AEAPEB_WPEAD3AEAPEAD@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DJ@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DK@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DN@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DO@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBX@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_J@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_K@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_N@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GJ@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GK@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GN@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GO@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBX@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_J@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_K@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_N@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WJ@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WK@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WN@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WO@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBX@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_J@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_K@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_N@Z\r\n?do_put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBUtm@@DD@Z\r\n?do_put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBUtm@@DD@Z\r\n?do_put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBUtm@@DD@Z\r\n?do_scan_is@?$ctype@G@std@@MEBAPEBGFPEBG0@Z\r\n?do_scan_is@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z\r\n?do_scan_not@?$ctype@G@std@@MEBAPEBGFPEBG0@Z\r\n?do_scan_not@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z\r\n?do_tolower@?$ctype@D@std@@MEBADD@Z\r\n?do_tolower@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z\r\n?do_tolower@?$ctype@G@std@@MEBAGG@Z\r\n?do_tolower@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z\r\n?do_tolower@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z\r\n?do_tolower@?$ctype@_W@std@@MEBA_W_W@Z\r\n?do_toupper@?$ctype@D@std@@MEBADD@Z\r\n?do_toupper@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z\r\n?do_toupper@?$ctype@G@std@@MEBAGG@Z\r\n?do_toupper@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z\r\n?do_toupper@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z\r\n?do_toupper@?$ctype@_W@std@@MEBA_W_W@Z\r\n?do_unshift@?$codecvt@DDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?do_unshift@?$codecvt@GDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?do_unshift@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?do_unshift@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?do_unshift@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?do_widen@?$ctype@D@std@@MEBADD@Z\r\n?do_widen@?$ctype@D@std@@MEBAPEBDPEBD0PEAD@Z\r\n?do_widen@?$ctype@G@std@@MEBAGD@Z\r\n?do_widen@?$ctype@G@std@@MEBAPEBDPEBD0PEAG@Z\r\n?do_widen@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W@Z\r\n?do_widen@?$ctype@_W@std@@MEBA_WD@Z\r\n?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?eback@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?eback@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?egptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?egptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?empty@?$_Yarn@D@std@@QEBA_NXZ\r\n?empty@?$_Yarn@G@std@@QEBA_NXZ\r\n?empty@?$_Yarn@_W@std@@QEBA_NXZ\r\n?empty@locale@std@@SA?AV12@XZ\r\n?encoding@codecvt_base@std@@QEBAHXZ\r\n?eof@ios_base@std@@QEBA_NXZ\r\n?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?epptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?epptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?exceptions@ios_base@std@@QEAAXH@Z\r\n?exceptions@ios_base@std@@QEAAXI@Z\r\n?exceptions@ios_base@std@@QEBAHXZ\r\n?fail@ios_base@std@@QEBA_NXZ\r\n?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAADD@Z\r\n?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADXZ\r\n?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAGG@Z\r\n?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGXZ\r\n?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA_W_W@Z\r\n?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WXZ\r\n?flags@ios_base@std@@QEAAHH@Z\r\n?flags@ios_base@std@@QEBAHXZ\r\n?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ\r\n?flush@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@XZ\r\n?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ\r\n?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z\r\n?gbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z\r\n?gbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z\r\n?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QEBA_JXZ\r\n?gcount@?$basic_istream@GU?$char_traits@G@std@@@std@@QEBA_JXZ\r\n?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEBA_JXZ\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAD@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAG@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@G@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_JG@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEA_W@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?get@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?get@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBD4@Z\r\n?get@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?get@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBG4@Z\r\n?get@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?get@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEB_W4@Z\r\n?get_date@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_date@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_date@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_monthname@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_monthname@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_monthname@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_new_handler@std@@YAP6AXXZXZ\r\n?get_time@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_time@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_time@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_weekday@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_weekday@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_weekday@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_year@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_year@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_year@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z\r\n?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z\r\n?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z\r\n?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_JG@Z\r\n?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z\r\n?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z\r\n?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEBA?AVlocale@2@XZ\r\n?getloc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEBA?AVlocale@2@XZ\r\n?getloc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEBA?AVlocale@2@XZ\r\n?getloc@ios_base@std@@QEBA?AVlocale@2@XZ\r\n?global@locale@std@@SA?AV12@AEBV12@@Z\r\n?good@ios_base@std@@QEBA_NXZ\r\n?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?gptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?gptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?id@?$codecvt@DDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@GDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@_WDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$collate@D@std@@2V0locale@2@A\r\n?id@?$collate@G@std@@2V0locale@2@A\r\n?id@?$collate@_W@std@@2V0locale@2@A\r\n?id@?$ctype@D@std@@2V0locale@2@A\r\n?id@?$ctype@G@std@@2V0locale@2@A\r\n?id@?$ctype@_W@std@@2V0locale@2@A\r\n?id@?$messages@D@std@@2V0locale@2@A\r\n?id@?$messages@G@std@@2V0locale@2@A\r\n?id@?$messages@_W@std@@2V0locale@2@A\r\n?id@?$money_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$moneypunct@D$00@std@@2V0locale@2@A\r\n?id@?$moneypunct@D$0A@@std@@2V0locale@2@A\r\n?id@?$moneypunct@G$00@std@@2V0locale@2@A\r\n?id@?$moneypunct@G$0A@@std@@2V0locale@2@A\r\n?id@?$moneypunct@_W$00@std@@2V0locale@2@A\r\n?id@?$moneypunct@_W$0A@@std@@2V0locale@2@A\r\n?id@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$numpunct@D@std@@2V0locale@2@A\r\n?id@?$numpunct@G@std@@2V0locale@2@A\r\n?id@?$numpunct@_W@std@@2V0locale@2@A\r\n?id@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z\r\n?ignore@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JG@Z\r\n?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JG@Z\r\n?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?imbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAXAEBVlocale@2@@Z\r\n?imbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAXAEBVlocale@2@@Z\r\n?imbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAXAEBVlocale@2@@Z\r\n?imbue@ios_base@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?in@?$codecvt@DDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAD3AEAPEAD@Z\r\n?in@?$codecvt@GDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAG3AEAPEAG@Z\r\n?in@?$codecvt@_SDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_S3AEAPEA_S@Z\r\n?in@?$codecvt@_UDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_U3AEAPEA_U@Z\r\n?in@?$codecvt@_WDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_W3AEAPEA_W@Z\r\n?in_avail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JXZ\r\n?in_avail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JXZ\r\n?in_avail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JXZ\r\n?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IEAAXPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z\r\n?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IEAAXPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z\r\n?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAAXPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z\r\n?intl@?$moneypunct@D$00@std@@2_NB\r\n?intl@?$moneypunct@D$0A@@std@@2_NB\r\n?intl@?$moneypunct@G$00@std@@2_NB\r\n?intl@?$moneypunct@G$0A@@std@@2_NB\r\n?intl@?$moneypunct@_W$00@std@@2_NB\r\n?intl@?$moneypunct@_W$0A@@std@@2_NB\r\n?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z\r\n?ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_N_N@Z\r\n?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z\r\n?is@?$ctype@D@std@@QEBAPEBDPEBD0PEAF@Z\r\n?is@?$ctype@D@std@@QEBA_NFD@Z\r\n?is@?$ctype@G@std@@QEBAPEBGPEBG0PEAF@Z\r\n?is@?$ctype@G@std@@QEBA_NFG@Z\r\n?is@?$ctype@_W@std@@QEBAPEB_WPEB_W0PEAF@Z\r\n?is@?$ctype@_W@std@@QEBA_NF_W@Z\r\n?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n?isfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n?iword@ios_base@std@@QEAAAEAJH@Z\r\n?length@?$codecvt@DDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?length@?$codecvt@GDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?length@?$codecvt@_SDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?length@?$codecvt@_UDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?length@?$codecvt@_WDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?max_length@codecvt_base@std@@QEBAHXZ\r\n?move@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAX$$QEAV12@@Z\r\n?move@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXAEAV12@@Z\r\n?move@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAX$$QEAV12@@Z\r\n?move@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXAEAV12@@Z\r\n?move@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAX$$QEAV12@@Z\r\n?move@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXAEAV12@@Z\r\n?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADDD@Z\r\n?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBADGD@Z\r\n?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAD_WD@Z\r\n?narrow@?$ctype@D@std@@QEBADDD@Z\r\n?narrow@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD@Z\r\n?narrow@?$ctype@G@std@@QEBADGD@Z\r\n?narrow@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD@Z\r\n?narrow@?$ctype@_W@std@@QEBAD_WD@Z\r\n?narrow@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD@Z\r\n?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA_NXZ\r\n?opfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA_NXZ\r\n?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA_NXZ\r\n?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n?osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n?out@?$codecvt@DDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAD3AEAPEAD@Z\r\n?out@?$codecvt@GDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBG1AEAPEBGPEAD3AEAPEAD@Z\r\n?out@?$codecvt@_SDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEB_S1AEAPEB_SPEAD3AEAPEAD@Z\r\n?out@?$codecvt@_UDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEB_U1AEAPEB_UPEAD3AEAPEAD@Z\r\n?out@?$codecvt@_WDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEB_W1AEAPEB_WPEAD3AEAPEAD@Z\r\n?overflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z\r\n?overflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z\r\n?overflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z\r\n?pbackfail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z\r\n?pbackfail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z\r\n?pbackfail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z\r\n?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?pbase@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?pbase@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z\r\n?pbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z\r\n?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z\r\n?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?peek@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?pptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?pptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?precision@ios_base@std@@QEAA_J_J@Z\r\n?precision@ios_base@std@@QEBA_JXZ\r\n?pubimbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?pubimbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?pubimbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JII@Z\r\n?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JII@Z\r\n?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JII@Z\r\n?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@I@Z\r\n?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@I@Z\r\n?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@I@Z\r\n?pubsetbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEAD_J@Z\r\n?pubsetbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEAG_J@Z\r\n?pubsetbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEA_W_J@Z\r\n?pubsync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?pubsync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAHXZ\r\n?pubsync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAHXZ\r\n?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z\r\n?put@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@G@Z\r\n?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DJ@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DK@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DN@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DO@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBX@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_J@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_K@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_N@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GJ@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GK@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GN@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GO@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBX@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_J@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_K@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_N@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WJ@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WK@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WN@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WO@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBX@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_J@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_K@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_N@Z\r\n?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBUtm@@DD@Z\r\n?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBUtm@@PEBD3@Z\r\n?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBUtm@@DD@Z\r\n?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBUtm@@PEBG3@Z\r\n?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBUtm@@DD@Z\r\n?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBUtm@@PEB_W4@Z\r\n?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z\r\n?putback@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@G@Z\r\n?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z\r\n?pword@ios_base@std@@QEAAAEAPEAXH@Z\r\n?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PEAV32@@Z\r\n?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ\r\n?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PEAV32@@Z\r\n?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ\r\n?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PEAV32@@Z\r\n?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ\r\n?rdstate@ios_base@std@@QEBAHXZ\r\n?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z\r\n?read@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z\r\n?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z\r\n?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z\r\n?readsome@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_J@Z\r\n?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z\r\n?register_callback@ios_base@std@@QEAAXP6AXW4event@12@AEAV12@H@ZH@Z\r\n?resetiosflags@std@@YA?AU?$_Smanip@H@1@H@Z\r\n?sbumpc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?sbumpc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?sbumpc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?scan_is@?$ctype@D@std@@QEBAPEBDFPEBD0@Z\r\n?scan_is@?$ctype@G@std@@QEBAPEBGFPEBG0@Z\r\n?scan_is@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z\r\n?scan_not@?$ctype@D@std@@QEBAPEBDFPEBD0@Z\r\n?scan_not@?$ctype@G@std@@QEBAPEBGFPEBG0@Z\r\n?scan_not@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z\r\n?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?seekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?seekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?seekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?seekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?set_new_handler@std@@YAP6AXXZP6AXXZ@Z\r\n?set_rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z\r\n?set_rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z\r\n?set_rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z\r\n?setbase@std@@YA?AU?$_Smanip@H@1@H@Z\r\n?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAPEAV12@PEAD_J@Z\r\n?setbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAPEAV12@PEAG_J@Z\r\n?setbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAPEAV12@PEA_W_J@Z\r\n?setf@ios_base@std@@QEAAHH@Z\r\n?setf@ios_base@std@@QEAAHHH@Z\r\n?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z\r\n?setg@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG00@Z\r\n?setg@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W00@Z\r\n?setiosflags@std@@YA?AU?$_Smanip@H@1@H@Z\r\n?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z\r\n?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD0@Z\r\n?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG00@Z\r\n?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG0@Z\r\n?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W00@Z\r\n?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W0@Z\r\n?setprecision@std@@YA?AU?$_Smanip@_J@1@_J@Z\r\n?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z\r\n?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z\r\n?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z\r\n?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z\r\n?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z\r\n?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z\r\n?setstate@ios_base@std@@QEAAXH@Z\r\n?setstate@ios_base@std@@QEAAXH_N@Z\r\n?setstate@ios_base@std@@QEAAXI@Z\r\n?setw@std@@YA?AU?$_Smanip@_J@1@_J@Z\r\n?sgetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?sgetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?sgetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?sgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z\r\n?sgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_J@Z\r\n?sgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z\r\n?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JXZ\r\n?showmanyc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JXZ\r\n?showmanyc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JXZ\r\n?snextc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?snextc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?snextc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?sputbackc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z\r\n?sputbackc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGG@Z\r\n?sputbackc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z\r\n?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z\r\n?sputc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGG@Z\r\n?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z\r\n?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEBD_J@Z\r\n?sputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEBG_J@Z\r\n?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEB_W_J@Z\r\n?stossc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n?stossc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n?stossc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n?sungetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?sungetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?sungetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?swap@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXAEAV12@@Z\r\n?swap@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXAEAV12@@Z\r\n?swap@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXAEAV12@@Z\r\n?swap@?$basic_iostream@DU?$char_traits@D@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_iostream@GU?$char_traits@G@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_ostream@DU?$char_traits@D@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_ostream@GU?$char_traits@G@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@ios_base@std@@QEAAXAEAV12@@Z\r\n?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?sync@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAHXZ\r\n?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAHXZ\r\n?sync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ\r\n?sync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAHXZ\r\n?sync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAHXZ\r\n?sync_with_stdio@ios_base@std@@SA_N_N@Z\r\n?table@?$ctype@D@std@@QEBAPEBFXZ\r\n?table_size@?$ctype@D@std@@2_KB\r\n?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@PEAV32@@Z\r\n?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ\r\n?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@PEAV32@@Z\r\n?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ\r\n?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PEAV32@@Z\r\n?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ\r\n?tolower@?$ctype@D@std@@QEBADD@Z\r\n?tolower@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z\r\n?tolower@?$ctype@G@std@@QEBAGG@Z\r\n?tolower@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z\r\n?tolower@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z\r\n?tolower@?$ctype@_W@std@@QEBA_W_W@Z\r\n?toupper@?$ctype@D@std@@QEBADD@Z\r\n?toupper@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z\r\n?toupper@?$ctype@G@std@@QEBAGG@Z\r\n?toupper@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z\r\n?toupper@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z\r\n?toupper@?$ctype@_W@std@@QEBA_W_W@Z\r\n?uflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ\r\n?uflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGXZ\r\n?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ\r\n?uncaught_exception@std@@YA_NXZ\r\n?uncaught_exceptions@std@@YAHXZ\r\n?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ\r\n?underflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGXZ\r\n?underflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ\r\n?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ\r\n?unget@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@XZ\r\n?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ\r\n?unsetf@ios_base@std@@QEAAXH@Z\r\n?unshift@?$codecvt@DDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?unshift@?$codecvt@GDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?unshift@?$codecvt@_SDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?unshift@?$codecvt@_UDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?unshift@?$codecvt@_WDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?wcerr@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?wcerr@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?wcin@std@@3V?$basic_istream@GU?$char_traits@G@std@@@1@A\r\n?wcin@std@@3V?$basic_istream@_WU?$char_traits@_W@std@@@1@A\r\n?wclog@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?wclog@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?wcout@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?wcout@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADD@Z\r\n?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGD@Z\r\n?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WD@Z\r\n?widen@?$ctype@D@std@@QEBADD@Z\r\n?widen@?$ctype@D@std@@QEBAPEBDPEBD0PEAD@Z\r\n?widen@?$ctype@G@std@@QEBAGD@Z\r\n?widen@?$ctype@G@std@@QEBAPEBDPEBD0PEAG@Z\r\n?widen@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W@Z\r\n?widen@?$ctype@_W@std@@QEBA_WD@Z\r\n?width@ios_base@std@@QEAA_J_J@Z\r\n?width@ios_base@std@@QEBA_JXZ\r\n?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEBD_J@Z\r\n?write@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEBG_J@Z\r\n?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEB_W_J@Z\r\n?xalloc@ios_base@std@@SAHXZ\r\n?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEAD_J@Z\r\n?xsgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEAG_J@Z\r\n?xsgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEA_W_J@Z\r\n?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEBD_J@Z\r\n?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEBG_J@Z\r\n?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEB_W_J@Z\r\n_Chmod\r\n_Close_dir\r\n_Cnd_broadcast\r\n_Cnd_destroy\r\n_Cnd_destroy_in_situ\r\n_Cnd_do_broadcast_at_thread_exit\r\n_Cnd_init\r\n_Cnd_init_in_situ\r\n_Cnd_register_at_thread_exit\r\n_Cnd_signal\r\n_Cnd_timedwait\r\n_Cnd_unregister_at_thread_exit\r\n_Cnd_wait\r\n_Copy_file\r\n_Cosh\r\n_Current_get\r\n_Current_set\r\n_Denorm\r\n_Dtest\r\n_Equivalent\r\n_Exp\r\n_FCosh\r\n_FDenorm\r\n_FDtest\r\n_FExp\r\n_FInf\r\n_FNan\r\n_FSinh\r\n_FSnan\r\n_File_size\r\n_Getcoll\r\n_Getctype\r\n_Getcvt\r\n_Getdateorder\r\n_Getwctype\r\n_Getwctypes\r\n_Hard_links\r\n_Hugeval\r\n_Inf\r\n_LCosh\r\n_LDenorm\r\n_LDtest\r\n_LExp\r\n_LInf\r\n_LNan\r\n_LSinh\r\n_LSnan\r\n_Last_write_time\r\n_Link\r\n_Lock_shared_ptr_spin_lock\r\n_Lstat\r\n_Make_dir\r\n_Mbrtowc\r\n_Mtx_clear_owner\r\n_Mtx_current_owns\r\n_Mtx_destroy\r\n_Mtx_destroy_in_situ\r\n_Mtx_getconcrtcs\r\n_Mtx_init\r\n_Mtx_init_in_situ\r\n_Mtx_lock\r\n_Mtx_reset_owner\r\n_Mtx_timedlock\r\n_Mtx_trylock\r\n_Mtx_unlock\r\n_Mtxdst\r\n_Mtxinit\r\n_Mtxlock\r\n_Mtxunlock\r\n_Nan\r\n_Open_dir\r\n_Query_perf_counter\r\n_Query_perf_frequency\r\n_Read_dir\r\n_Remove_dir\r\n_Rename\r\n_Resize\r\n_Set_last_write_time\r\n_Sinh\r\n_Snan\r\n_Stat\r\n_Statvfs\r\n_Stod\r\n_Stodx\r\n_Stof\r\n_Stofx\r\n_Stold\r\n_Stoldx\r\n_Stoll\r\n_Stollx\r\n_Stolx\r\n_Stoul\r\n_Stoull\r\n_Stoullx\r\n_Stoulx\r\n_Strcoll\r\n_Strxfrm\r\n_Symlink\r\n_Symlink_get\r\n_Temp_get\r\n_Thrd_abort\r\n_Thrd_create\r\n_Thrd_current\r\n_Thrd_detach\r\n_Thrd_equal\r\n_Thrd_exit\r\n_Thrd_hardware_concurrency\r\n_Thrd_id\r\n_Thrd_join\r\n_Thrd_sleep\r\n_Thrd_start\r\n_Thrd_yield\r\n_To_byte\r\n_To_wide\r\n_Tolower\r\n_Toupper\r\n_Towlower\r\n_Towupper\r\n_Unlink\r\n_Unlock_shared_ptr_spin_lock\r\n_WStod\r\n_WStodx\r\n_WStof\r\n_WStofx\r\n_WStold\r\n_WStoldx\r\n_Wcrtomb\r\n_Wcscoll\r\n_Wcsxfrm\r\n_Xtime_diff_to_millis\r\n_Xtime_diff_to_millis2\r\n_Xtime_get_ticks\r\n__Wcrtomb_lk\r\n__crtCompareStringA\r\n__crtCompareStringW\r\n__crtIsPackagedApp\r\n__crtLCMapStringA\r\n__crtLCMapStringW\r\n__set_stl_sync_api_mode\r\nxtime_get\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/arm64.exports",
    "content": "??$_Getvals@_W@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAX_WAEBV_Locinfo@1@@Z\r\n??$_Getvals@_W@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAX_WAEBV_Locinfo@1@@Z\r\n??$_Getvals@_W@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAX_WAEBV_Locinfo@1@@Z\r\n??0?$_Yarn@D@std@@QEAA@AEBV01@@Z\r\n??0?$_Yarn@D@std@@QEAA@PEBD@Z\r\n??0?$_Yarn@D@std@@QEAA@XZ\r\n??0?$_Yarn@G@std@@QEAA@AEBV01@@Z\r\n??0?$_Yarn@G@std@@QEAA@PEBG@Z\r\n??0?$_Yarn@G@std@@QEAA@XZ\r\n??0?$_Yarn@_W@std@@QEAA@AEBV01@@Z\r\n??0?$_Yarn@_W@std@@QEAA@PEB_W@Z\r\n??0?$_Yarn@_W@std@@QEAA@XZ\r\n??0?$basic_ios@DU?$char_traits@D@std@@@std@@IEAA@XZ\r\n??0?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??0?$basic_ios@GU?$char_traits@G@std@@@std@@IEAA@XZ\r\n??0?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAA@XZ\r\n??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??0?$basic_iostream@DU?$char_traits@D@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??0?$basic_iostream@GU?$char_traits@G@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_ostream@DU?$char_traits@D@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z\r\n??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z\r\n??0?$basic_ostream@GU?$char_traits@G@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z\r\n??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z\r\n??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@IEAA@$$QEAV01@@Z\r\n??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z\r\n??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z\r\n??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@AEBV01@@Z\r\n??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@XZ\r\n??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@AEBV01@@Z\r\n??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@XZ\r\n??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@AEBV01@@Z\r\n??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@W4_Uninitialized@1@@Z\r\n??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@XZ\r\n??0?$codecvt@DDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$codecvt@DDU_Mbstatet@@@std@@QEAA@_K@Z\r\n??0?$codecvt@GDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$codecvt@GDU_Mbstatet@@@std@@QEAA@_K@Z\r\n??0?$codecvt@_SDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@KW4_Codecvt_mode@1@_K@Z\r\n??0?$codecvt@_SDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$codecvt@_SDU_Mbstatet@@@std@@QEAA@_K@Z\r\n??0?$codecvt@_UDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@KW4_Codecvt_mode@1@_K@Z\r\n??0?$codecvt@_UDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$codecvt@_UDU_Mbstatet@@@std@@QEAA@_K@Z\r\n??0?$codecvt@_WDU_Mbstatet@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$codecvt@_WDU_Mbstatet@@@std@@QEAA@_K@Z\r\n??0?$ctype@D@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$ctype@D@std@@QEAA@PEBF_N_K@Z\r\n??0?$ctype@G@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$ctype@G@std@@QEAA@_K@Z\r\n??0?$ctype@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$ctype@_W@std@@QEAA@_K@Z\r\n??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAA@PEBD_K@Z\r\n??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAA@PEBD_K@Z\r\n??0?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAA@PEBD_K@Z\r\n??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAA@PEBD_K@Z\r\n??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z\r\n??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAA@PEBD_K@Z\r\n??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z\r\n??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z\r\n??0Init@ios_base@std@@QEAA@XZ\r\n??0_Facet_base@std@@QEAA@AEBV01@@Z\r\n??0_Facet_base@std@@QEAA@XZ\r\n??0_Init_locks@std@@QEAA@XZ\r\n??0_Locimp@locale@std@@AEAA@AEBV012@@Z\r\n??0_Locimp@locale@std@@AEAA@_N@Z\r\n??0_Locinfo@std@@QEAA@HPEBD@Z\r\n??0_Locinfo@std@@QEAA@PEBD@Z\r\n??0_Lockit@std@@QEAA@H@Z\r\n??0_Lockit@std@@QEAA@XZ\r\n??0_Timevec@std@@QEAA@AEBV01@@Z\r\n??0_Timevec@std@@QEAA@PEAX@Z\r\n??0_UShinit@std@@QEAA@XZ\r\n??0_Winit@std@@QEAA@XZ\r\n??0codecvt_base@std@@QEAA@_K@Z\r\n??0ctype_base@std@@QEAA@_K@Z\r\n??0facet@locale@std@@IEAA@_K@Z\r\n??0id@locale@std@@QEAA@_K@Z\r\n??0ios_base@std@@IEAA@XZ\r\n??0task_continuation_context@Concurrency@@AEAA@XZ\r\n??0time_base@std@@QEAA@_K@Z\r\n??1?$_Yarn@D@std@@QEAA@XZ\r\n??1?$_Yarn@G@std@@QEAA@XZ\r\n??1?$_Yarn@_W@std@@QEAA@XZ\r\n??1?$basic_ios@DU?$char_traits@D@std@@@std@@UEAA@XZ\r\n??1?$basic_ios@GU?$char_traits@G@std@@@std@@UEAA@XZ\r\n??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UEAA@XZ\r\n??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UEAA@XZ\r\n??1?$basic_iostream@GU?$char_traits@G@std@@@std@@UEAA@XZ\r\n??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ\r\n??1?$basic_istream@DU?$char_traits@D@std@@@std@@UEAA@XZ\r\n??1?$basic_istream@GU?$char_traits@G@std@@@std@@UEAA@XZ\r\n??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ\r\n??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UEAA@XZ\r\n??1?$basic_ostream@GU?$char_traits@G@std@@@std@@UEAA@XZ\r\n??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ\r\n??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAA@XZ\r\n??1?$basic_streambuf@GU?$char_traits@G@std@@@std@@UEAA@XZ\r\n??1?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UEAA@XZ\r\n??1?$codecvt@DDU_Mbstatet@@@std@@MEAA@XZ\r\n??1?$codecvt@GDU_Mbstatet@@@std@@MEAA@XZ\r\n??1?$codecvt@_SDU_Mbstatet@@@std@@MEAA@XZ\r\n??1?$codecvt@_UDU_Mbstatet@@@std@@MEAA@XZ\r\n??1?$codecvt@_WDU_Mbstatet@@@std@@MEAA@XZ\r\n??1?$ctype@D@std@@MEAA@XZ\r\n??1?$ctype@G@std@@MEAA@XZ\r\n??1?$ctype@_W@std@@MEAA@XZ\r\n??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ\r\n??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ\r\n??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ\r\n??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ\r\n??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ\r\n??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ\r\n??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ\r\n??1Init@ios_base@std@@QEAA@XZ\r\n??1_Facet_base@std@@UEAA@XZ\r\n??1_Init_locks@std@@QEAA@XZ\r\n??1_Locimp@locale@std@@MEAA@XZ\r\n??1_Locinfo@std@@QEAA@XZ\r\n??1_Lockit@std@@QEAA@XZ\r\n??1_Timevec@std@@QEAA@XZ\r\n??1_UShinit@std@@QEAA@XZ\r\n??1_Winit@std@@QEAA@XZ\r\n??1codecvt_base@std@@UEAA@XZ\r\n??1ctype_base@std@@UEAA@XZ\r\n??1facet@locale@std@@MEAA@XZ\r\n??1ios_base@std@@UEAA@XZ\r\n??1time_base@std@@UEAA@XZ\r\n??4?$_Iosb@H@std@@QEAAAEAV01@$$QEAV01@@Z\r\n??4?$_Iosb@H@std@@QEAAAEAV01@AEBV01@@Z\r\n??4?$_Yarn@D@std@@QEAAAEAV01@AEBV01@@Z\r\n??4?$_Yarn@D@std@@QEAAAEAV01@PEBD@Z\r\n??4?$_Yarn@G@std@@QEAAAEAV01@AEBV01@@Z\r\n??4?$_Yarn@G@std@@QEAAAEAV01@PEBG@Z\r\n??4?$_Yarn@_W@std@@QEAAAEAV01@AEBV01@@Z\r\n??4?$_Yarn@_W@std@@QEAAAEAV01@PEB_W@Z\r\n??4?$basic_iostream@DU?$char_traits@D@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_iostream@GU?$char_traits@G@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_istream@DU?$char_traits@D@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_istream@GU?$char_traits@G@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_istream@_WU?$char_traits@_W@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_ostream@DU?$char_traits@D@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_ostream@GU?$char_traits@G@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_ostream@_WU?$char_traits@_W@std@@@std@@IEAAAEAV01@$$QEAV01@@Z\r\n??4?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAAEAV01@AEBV01@@Z\r\n??4?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAAEAV01@AEBV01@@Z\r\n??4?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAAEAV01@AEBV01@@Z\r\n??4Init@ios_base@std@@QEAAAEAV012@AEBV012@@Z\r\n??4_Crt_new_delete@std@@QEAAAEAU01@$$QEAU01@@Z\r\n??4_Crt_new_delete@std@@QEAAAEAU01@AEBU01@@Z\r\n??4_Facet_base@std@@QEAAAEAV01@AEBV01@@Z\r\n??4_Init_locks@std@@QEAAAEAV01@AEBV01@@Z\r\n??4_Timevec@std@@QEAAAEAV01@AEBV01@@Z\r\n??4_UShinit@std@@QEAAAEAV01@AEBV01@@Z\r\n??4_Winit@std@@QEAAAEAV01@AEBV01@@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAF@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAG@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAH@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAI@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAJ@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAK@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAM@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAN@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAO@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAPEAX@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_J@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_K@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_N@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAF@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAG@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAH@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAI@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAJ@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAK@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAM@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAN@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAO@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAPEAX@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_J@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_K@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_N@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@GU?$char_traits@G@std@@@1@AEAV21@@Z@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAF@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAG@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAH@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAI@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAJ@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAK@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAM@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAN@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAO@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAPEAX@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_J@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_K@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_N@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@F@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@G@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@H@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@I@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@J@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@K@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@M@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@O@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEBX@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_J@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_K@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_N@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@F@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@G@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@H@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@I@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@J@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@K@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@M@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@N@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@O@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@GU?$char_traits@G@std@@@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEBX@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_J@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_K@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_N@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@F@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@G@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@H@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@I@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@J@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@K@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@M@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@N@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@O@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEBX@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_J@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_K@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_N@Z\r\n??7ios_base@std@@QEBA_NXZ\r\n??Bid@locale@std@@QEAA_KXZ\r\n??Bios_base@std@@QEBA_NXZ\r\n??_7?$basic_ios@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_ios@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_ios@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_iostream@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_iostream@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_iostream@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_istream@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_istream@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_istream@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_ostream@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_ostream@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_ostream@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_streambuf@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_streambuf@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$codecvt@DDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@GDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@_SDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@_UDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@_WDU_Mbstatet@@@std@@6B@\r\n??_7?$ctype@D@std@@6B@\r\n??_7?$ctype@G@std@@6B@\r\n??_7?$ctype@_W@std@@6B@\r\n??_7?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7_Facet_base@std@@6B@\r\n??_7_Locimp@locale@std@@6B@\r\n??_7codecvt_base@std@@6B@\r\n??_7ctype_base@std@@6B@\r\n??_7facet@locale@std@@6B@\r\n??_7ios_base@std@@6B@\r\n??_7time_base@std@@6B@\r\n??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@\r\n??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@\r\n??_8?$basic_iostream@GU?$char_traits@G@std@@@std@@7B?$basic_istream@GU?$char_traits@G@std@@@1@@\r\n??_8?$basic_iostream@GU?$char_traits@G@std@@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@\r\n??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_istream@_WU?$char_traits@_W@std@@@1@@\r\n??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_ostream@_WU?$char_traits@_W@std@@@1@@\r\n??_8?$basic_istream@DU?$char_traits@D@std@@@std@@7B@\r\n??_8?$basic_istream@GU?$char_traits@G@std@@@std@@7B@\r\n??_8?$basic_istream@_WU?$char_traits@_W@std@@@std@@7B@\r\n??_8?$basic_ostream@DU?$char_traits@D@std@@@std@@7B@\r\n??_8?$basic_ostream@GU?$char_traits@G@std@@@std@@7B@\r\n??_8?$basic_ostream@_WU?$char_traits@_W@std@@@std@@7B@\r\n??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n??_D?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n??_D?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n??_F?$codecvt@DDU_Mbstatet@@@std@@QEAAXXZ\r\n??_F?$codecvt@GDU_Mbstatet@@@std@@QEAAXXZ\r\n??_F?$codecvt@_SDU_Mbstatet@@@std@@QEAAXXZ\r\n??_F?$codecvt@_UDU_Mbstatet@@@std@@QEAAXXZ\r\n??_F?$codecvt@_WDU_Mbstatet@@@std@@QEAAXXZ\r\n??_F?$ctype@D@std@@QEAAXXZ\r\n??_F?$ctype@G@std@@QEAAXXZ\r\n??_F?$ctype@_W@std@@QEAAXXZ\r\n??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ\r\n??_F?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ\r\n??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ\r\n??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ\r\n??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ\r\n??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ\r\n??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ\r\n??_F_Locinfo@std@@QEAAXXZ\r\n??_F_Timevec@std@@QEAAXXZ\r\n??_Fcodecvt_base@std@@QEAAXXZ\r\n??_Fctype_base@std@@QEAAXXZ\r\n??_Ffacet@locale@std@@QEAAXXZ\r\n??_Fid@locale@std@@QEAAXXZ\r\n??_Ftime_base@std@@QEAAXXZ\r\n?CaptureCallstack@platform@details@Concurrency@@YA_KPEAPEAX_K1@Z\r\n?GetCurrentThreadId@platform@details@Concurrency@@YAJXZ\r\n?GetNextAsyncId@platform@details@Concurrency@@YAIXZ\r\n?ReportUnhandledError@_ExceptionHolder@details@Concurrency@@AEAAXXZ\r\n?_Addcats@_Locinfo@std@@QEAAAEAV12@HPEBD@Z\r\n?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z\r\n?_Addstd@ios_base@std@@SAXPEAV12@@Z\r\n?_Assign@_ContextCallback@details@Concurrency@@AEAAXPEAX@Z\r\n?_Atexit@@YAXP6AXXZ@Z\r\n?_BADOFF@std@@3_JB\r\n?_C_str@?$_Yarn@D@std@@QEBAPEBDXZ\r\n?_C_str@?$_Yarn@G@std@@QEBAPEBGXZ\r\n?_C_str@?$_Yarn@_W@std@@QEBAPEB_WXZ\r\n?_CallInContext@_ContextCallback@details@Concurrency@@QEBAXV?$function@$$A6AXXZ@std@@_N@Z\r\n?_Callfns@ios_base@std@@AEAAXW4event@12@@Z\r\n?_Capture@_ContextCallback@details@Concurrency@@AEAAXXZ\r\n?_Clocptr@_Locimp@locale@std@@0PEAV123@EA\r\n?_Decref@facet@locale@std@@UEAAPEAV_Facet_base@3@XZ\r\n?_Donarrow@?$ctype@G@std@@IEBADGD@Z\r\n?_Donarrow@?$ctype@_W@std@@IEBAD_WD@Z\r\n?_Dowiden@?$ctype@G@std@@IEBAGD@Z\r\n?_Dowiden@?$ctype@_W@std@@IEBA_WD@Z\r\n?_Empty@?$_Yarn@D@std@@QEBA_NXZ\r\n?_Empty@?$_Yarn@G@std@@QEBA_NXZ\r\n?_Empty@?$_Yarn@_W@std@@QEBA_NXZ\r\n?_Execute_once@std@@YAHAEAUonce_flag@1@P6AHPEAX1PEAPEAX@Z1@Z\r\n?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADDH@Z\r\n?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADDH@Z\r\n?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADDH@Z\r\n?_Findarr@ios_base@std@@AEAAAEAU_Iosarray@12@H@Z\r\n?_Fiopen@std@@YAPEAU_iobuf@@PEBDHH@Z\r\n?_Fiopen@std@@YAPEAU_iobuf@@PEBGHH@Z\r\n?_Fiopen@std@@YAPEAU_iobuf@@PEB_WHH@Z\r\n?_Fput@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBD_K@Z\r\n?_Fput@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBD_K@Z\r\n?_Fput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBD_K@Z\r\n?_Getcat@?$codecvt@DDU_Mbstatet@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$codecvt@GDU_Mbstatet@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$codecvt@_SDU_Mbstatet@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$codecvt@_UDU_Mbstatet@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$codecvt@_WDU_Mbstatet@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z\r\n?_Getcat@facet@locale@std@@SA_KPEAPEBV123@PEBV23@@Z\r\n?_Getcoll@_Locinfo@std@@QEBA?AU_Collvec@@XZ\r\n?_Getctype@_Locinfo@std@@QEBA?AU_Ctypevec@@XZ\r\n?_Getcvt@_Locinfo@std@@QEBA?AU_Cvtvec@@XZ\r\n?_Getdateorder@_Locinfo@std@@QEBAHXZ\r\n?_Getdays@_Locinfo@std@@QEBAPEBDXZ\r\n?_Getfalse@_Locinfo@std@@QEBAPEBDXZ\r\n?_Getffld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getffld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getffld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getffldx@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getffldx@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getffldx@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1AEAVios_base@2@PEAH@Z\r\n?_Getfmt@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBD@Z\r\n?_Getfmt@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBD@Z\r\n?_Getfmt@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBD@Z\r\n?_Getgloballocale@locale@std@@CAPEAV_Locimp@12@XZ\r\n?_Getifld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1HAEBVlocale@2@@Z\r\n?_Getifld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1HAEBVlocale@2@@Z\r\n?_Getifld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1HAEBVlocale@2@@Z\r\n?_Getint@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@0HHAEAHAEBV?$ctype@D@2@@Z\r\n?_Getint@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@0HHAEAHAEBV?$ctype@G@2@@Z\r\n?_Getint@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@0HHAEAHAEBV?$ctype@_W@2@@Z\r\n?_Getlconv@_Locinfo@std@@QEBAPEBUlconv@@XZ\r\n?_Getmonths@_Locinfo@std@@QEBAPEBDXZ\r\n?_Getname@_Locinfo@std@@QEBAPEBDXZ\r\n?_Getptr@_Timevec@std@@QEBAPEAXXZ\r\n?_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ\r\n?_Gettrue@_Locinfo@std@@QEBAPEBDXZ\r\n?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBA_JXZ\r\n?_Gnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBA_JXZ\r\n?_Gnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBA_JXZ\r\n?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ\r\n?_Gndec@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ\r\n?_Gndec@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ\r\n?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ\r\n?_Gninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ\r\n?_Gninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ\r\n?_Gnpreinc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ\r\n?_Gnpreinc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ\r\n?_Gnpreinc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ\r\n?_Id_cnt@id@locale@std@@0HA\r\n?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z\r\n?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z\r\n?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z\r\n?_Incref@facet@locale@std@@UEAAXXZ\r\n?_Index@ios_base@std@@0HA\r\n?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAPEAD0PEAH001@Z\r\n?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXXZ\r\n?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAPEAG0PEAH001@Z\r\n?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXXZ\r\n?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAPEA_W0PEAH001@Z\r\n?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXXZ\r\n?_Init@?$codecvt@DDU_Mbstatet@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$codecvt@GDU_Mbstatet@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$codecvt@_SDU_Mbstatet@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$codecvt@_UDU_Mbstatet@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$codecvt@_WDU_Mbstatet@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$ctype@D@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$ctype@G@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$ctype@_W@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z\r\n?_Init@ios_base@std@@IEAAXXZ\r\n?_Init@locale@std@@CAPEAV_Locimp@12@_N@Z\r\n?_Init_cnt@Init@ios_base@std@@0HA\r\n?_Init_cnt@_UShinit@std@@0HA\r\n?_Init_cnt@_Winit@std@@0HA\r\n?_Init_cnt_func@Init@ios_base@std@@CAAEAHXZ\r\n?_Init_ctor@Init@ios_base@std@@CAXPEAV123@@Z\r\n?_Init_dtor@Init@ios_base@std@@CAXPEAV123@@Z\r\n?_Init_locks_ctor@_Init_locks@std@@CAXPEAV12@@Z\r\n?_Init_locks_dtor@_Init_locks@std@@CAXPEAV12@@Z\r\n?_Ios_base_dtor@ios_base@std@@CAXPEAV12@@Z\r\n?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z\r\n?_Ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_N_N@Z\r\n?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z\r\n?_Iput@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEAD_K@Z\r\n?_Iput@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEAD_K@Z\r\n?_Iput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEAD_K@Z\r\n?_IsCurrentOriginSTA@_ContextCallback@details@Concurrency@@CA_NXZ\r\n?_IsNonBlockingThread@_Task_impl_base@details@Concurrency@@SA_NXZ\r\n?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z\r\n?_Locimp_ctor@_Locimp@locale@std@@CAXPEAV123@AEBV123@@Z\r\n?_Locimp_dtor@_Locimp@locale@std@@CAXPEAV123@@Z\r\n?_Locinfo_Addcats@_Locinfo@std@@SAAEAV12@PEAV12@HPEBD@Z\r\n?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@HPEBD@Z\r\n?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@PEBD@Z\r\n?_Locinfo_dtor@_Locinfo@std@@SAXPEAV12@@Z\r\n?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAAXXZ\r\n?_Lock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@UEAAXXZ\r\n?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UEAAXXZ\r\n?_Lockit_ctor@_Lockit@std@@CAXPEAV12@@Z\r\n?_Lockit_ctor@_Lockit@std@@CAXPEAV12@H@Z\r\n?_Lockit_ctor@_Lockit@std@@SAXH@Z\r\n?_Lockit_dtor@_Lockit@std@@CAXPEAV12@@Z\r\n?_Lockit_dtor@_Lockit@std@@SAXH@Z\r\n?_LogCancelTask@_TaskEventLogger@details@Concurrency@@QEAAXXZ\r\n?_LogScheduleTask@_TaskEventLogger@details@Concurrency@@QEAAX_N@Z\r\n?_LogTaskCompleted@_TaskEventLogger@details@Concurrency@@QEAAXXZ\r\n?_LogTaskExecutionCompleted@_TaskEventLogger@details@Concurrency@@QEAAXXZ\r\n?_LogWorkItemCompleted@_TaskEventLogger@details@Concurrency@@QEAAXXZ\r\n?_LogWorkItemStarted@_TaskEventLogger@details@Concurrency@@QEAAXXZ\r\n?_MP_Add@std@@YAXQEA_K_K@Z\r\n?_MP_Get@std@@YA_KQEA_K@Z\r\n?_MP_Mul@std@@YAXQEA_K_K1@Z\r\n?_MP_Rem@std@@YAXQEA_K_K@Z\r\n?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z\r\n?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z\r\n?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z\r\n?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z\r\n?_Mtx_delete@threads@stdext@@YAXPEAX@Z\r\n?_Mtx_lock@threads@stdext@@YAXPEAX@Z\r\n?_Mtx_new@threads@stdext@@YAXAEAPEAX@Z\r\n?_Mtx_unlock@threads@stdext@@YAXPEAX@Z\r\n?_New_Locimp@_Locimp@locale@std@@CAPEAV123@AEBV123@@Z\r\n?_New_Locimp@_Locimp@locale@std@@CAPEAV123@_N@Z\r\n?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n?_Osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBA_JXZ\r\n?_Pnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBA_JXZ\r\n?_Pnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBA_JXZ\r\n?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ\r\n?_Pninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ\r\n?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ\r\n?_Ptr_cerr@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA\r\n?_Ptr_cin@std@@3PEAV?$basic_istream@DU?$char_traits@D@std@@@1@EA\r\n?_Ptr_clog@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA\r\n?_Ptr_cout@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA\r\n?_Ptr_wcerr@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA\r\n?_Ptr_wcerr@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA\r\n?_Ptr_wcin@std@@3PEAV?$basic_istream@GU?$char_traits@G@std@@@1@EA\r\n?_Ptr_wcin@std@@3PEAV?$basic_istream@_WU?$char_traits@_W@std@@@1@EA\r\n?_Ptr_wclog@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA\r\n?_Ptr_wclog@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA\r\n?_Ptr_wcout@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA\r\n?_Ptr_wcout@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA\r\n?_Put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@PEBD_K@Z\r\n?_Put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@PEBG_K@Z\r\n?_Put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@PEB_W_K@Z\r\n?_Raise_handler@std@@3P6AXAEBVexception@stdext@@@ZEA\r\n?_Random_device@std@@YAIXZ\r\n?_Release_chore@details@Concurrency@@YAXPEAU_Threadpool_chore@12@@Z\r\n?_Rep@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@D_K@Z\r\n?_Rep@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@G_K@Z\r\n?_Rep@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@_W_K@Z\r\n?_ReportUnobservedException@details@Concurrency@@YAXXZ\r\n?_Reschedule_chore@details@Concurrency@@YAHPEBU_Threadpool_chore@12@@Z\r\n?_Reset@_ContextCallback@details@Concurrency@@AEAAXXZ\r\n?_Rethrow_future_exception@std@@YAXVexception_ptr@1@@Z\r\n?_Rng_abort@std@@YAXPEBD@Z\r\n?_Schedule_chore@details@Concurrency@@YAHPEAU_Threadpool_chore@12@@Z\r\n?_Setgloballocale@locale@std@@CAXPEAX@Z\r\n?_Src@?1??_Getffld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getffld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getffld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getffldx@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getffldx@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getffldx@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@3@1AEAVios_base@3@PEAH@Z@4QBDB\r\n?_Src@?1??_Getifld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@3@1HAEBVlocale@3@@Z@4QBDB\r\n?_Src@?1??_Getifld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@3@1HAEBVlocale@3@@Z@4QBDB\r\n?_Src@?1??_Getifld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@3@1HAEBVlocale@3@@Z@4QBDB\r\n?_Sync@ios_base@std@@0_NA\r\n?_Syserror_map@std@@YAPEBDH@Z\r\n?_Throw_C_error@std@@YAXH@Z\r\n?_Throw_Cpp_error@std@@YAXH@Z\r\n?_Throw_future_error@std@@YAXAEBVerror_code@1@@Z\r\n?_Tidy@?$_Yarn@D@std@@AEAAXXZ\r\n?_Tidy@?$_Yarn@G@std@@AEAAXXZ\r\n?_Tidy@?$_Yarn@_W@std@@AEAAXXZ\r\n?_Tidy@?$ctype@D@std@@IEAAXXZ\r\n?_Tidy@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEAAXXZ\r\n?_Tidy@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEAAXXZ\r\n?_Tidy@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEAAXXZ\r\n?_Tidy@ios_base@std@@AEAAXXZ\r\n?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAAXXZ\r\n?_Unlock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@UEAAXXZ\r\n?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UEAAXXZ\r\n?_W_Getdays@_Locinfo@std@@QEBAPEBGXZ\r\n?_W_Getmonths@_Locinfo@std@@QEBAPEBGXZ\r\n?_W_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ\r\n?_Winerror_map@std@@YAHH@Z\r\n?_Winerror_message@std@@YAKKPEADK@Z\r\n?_XGetLastError@std@@YAXXZ\r\n?_XLgamma@std@@YAMM@Z\r\n?_XLgamma@std@@YANN@Z\r\n?_XLgamma@std@@YAOO@Z\r\n?_Xbad_alloc@std@@YAXXZ\r\n?_Xbad_function_call@std@@YAXXZ\r\n?_Xinvalid_argument@std@@YAXPEBD@Z\r\n?_Xlength_error@std@@YAXPEBD@Z\r\n?_Xout_of_range@std@@YAXPEBD@Z\r\n?_Xoverflow_error@std@@YAXPEBD@Z\r\n?_Xregex_error@std@@YAXW4error_type@regex_constants@1@@Z\r\n?_Xruntime_error@std@@YAXPEBD@Z\r\n?__ExceptionPtrAssign@@YAXPEAXPEBX@Z\r\n?__ExceptionPtrCompare@@YA_NPEBX0@Z\r\n?__ExceptionPtrCopy@@YAXPEAXPEBX@Z\r\n?__ExceptionPtrCopyException@@YAXPEAXPEBX1@Z\r\n?__ExceptionPtrCreate@@YAXPEAX@Z\r\n?__ExceptionPtrCurrentException@@YAXPEAX@Z\r\n?__ExceptionPtrDestroy@@YAXPEAX@Z\r\n?__ExceptionPtrRethrow@@YAXPEBX@Z\r\n?__ExceptionPtrSwap@@YAXPEAX0@Z\r\n?__ExceptionPtrToBool@@YA_NPEBX@Z\r\n?always_noconv@codecvt_base@std@@QEBA_NXZ\r\n?bad@ios_base@std@@QEBA_NXZ\r\n?c_str@?$_Yarn@D@std@@QEBAPEBDXZ\r\n?c_str@?$_Yarn@G@std@@QEBAPEBGXZ\r\n?c_str@?$_Yarn@_W@std@@QEBAPEB_WXZ\r\n?cerr@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A\r\n?classic@locale@std@@SAAEBV12@XZ\r\n?classic_table@?$ctype@D@std@@SAPEBFXZ\r\n?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z\r\n?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z\r\n?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z\r\n?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z\r\n?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z\r\n?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z\r\n?clear@ios_base@std@@QEAAXH@Z\r\n?clear@ios_base@std@@QEAAXH_N@Z\r\n?clear@ios_base@std@@QEAAXI@Z\r\n?clog@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEBV12@@Z\r\n?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEBV12@@Z\r\n?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEBV12@@Z\r\n?copyfmt@ios_base@std@@QEAAAEAV12@AEBV12@@Z\r\n?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ\r\n?date_order@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ\r\n?date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ\r\n?do_always_noconv@?$codecvt@DDU_Mbstatet@@@std@@MEBA_NXZ\r\n?do_always_noconv@?$codecvt@GDU_Mbstatet@@@std@@MEBA_NXZ\r\n?do_always_noconv@?$codecvt@_SDU_Mbstatet@@@std@@MEBA_NXZ\r\n?do_always_noconv@?$codecvt@_UDU_Mbstatet@@@std@@MEBA_NXZ\r\n?do_always_noconv@?$codecvt@_WDU_Mbstatet@@@std@@MEBA_NXZ\r\n?do_always_noconv@codecvt_base@std@@MEBA_NXZ\r\n?do_date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ\r\n?do_date_order@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ\r\n?do_date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ\r\n?do_encoding@?$codecvt@GDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_encoding@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_encoding@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_encoding@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_encoding@codecvt_base@std@@MEBAHXZ\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?do_get@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?do_get@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?do_get@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?do_get_date@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_date@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_date@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_monthname@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_monthname@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_monthname@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_time@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_time@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_time@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_weekday@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_weekday@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_weekday@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_year@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_year@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_get_year@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?do_in@?$codecvt@DDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAD3AEAPEAD@Z\r\n?do_in@?$codecvt@GDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAG3AEAPEAG@Z\r\n?do_in@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_S3AEAPEA_S@Z\r\n?do_in@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_U3AEAPEA_U@Z\r\n?do_in@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_W3AEAPEA_W@Z\r\n?do_is@?$ctype@G@std@@MEBAPEBGPEBG0PEAF@Z\r\n?do_is@?$ctype@G@std@@MEBA_NFG@Z\r\n?do_is@?$ctype@_W@std@@MEBAPEB_WPEB_W0PEAF@Z\r\n?do_is@?$ctype@_W@std@@MEBA_NF_W@Z\r\n?do_length@?$codecvt@DDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?do_length@?$codecvt@GDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?do_length@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?do_length@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?do_length@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?do_max_length@?$codecvt@GDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_max_length@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_max_length@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_max_length@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHXZ\r\n?do_max_length@codecvt_base@std@@MEBAHXZ\r\n?do_narrow@?$ctype@D@std@@MEBADDD@Z\r\n?do_narrow@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD@Z\r\n?do_narrow@?$ctype@G@std@@MEBADGD@Z\r\n?do_narrow@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD@Z\r\n?do_narrow@?$ctype@_W@std@@MEBAD_WD@Z\r\n?do_narrow@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD@Z\r\n?do_out@?$codecvt@DDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAD3AEAPEAD@Z\r\n?do_out@?$codecvt@GDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEBG1AEAPEBGPEAD3AEAPEAD@Z\r\n?do_out@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEB_S1AEAPEB_SPEAD3AEAPEAD@Z\r\n?do_out@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEB_U1AEAPEB_UPEAD3AEAPEAD@Z\r\n?do_out@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEB_W1AEAPEB_WPEAD3AEAPEAD@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DJ@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DK@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DN@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DO@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBX@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_J@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_K@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_N@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GJ@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GK@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GN@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GO@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBX@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_J@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_K@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_N@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WJ@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WK@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WN@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WO@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBX@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_J@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_K@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_N@Z\r\n?do_put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBUtm@@DD@Z\r\n?do_put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBUtm@@DD@Z\r\n?do_put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBUtm@@DD@Z\r\n?do_scan_is@?$ctype@G@std@@MEBAPEBGFPEBG0@Z\r\n?do_scan_is@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z\r\n?do_scan_not@?$ctype@G@std@@MEBAPEBGFPEBG0@Z\r\n?do_scan_not@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z\r\n?do_tolower@?$ctype@D@std@@MEBADD@Z\r\n?do_tolower@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z\r\n?do_tolower@?$ctype@G@std@@MEBAGG@Z\r\n?do_tolower@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z\r\n?do_tolower@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z\r\n?do_tolower@?$ctype@_W@std@@MEBA_W_W@Z\r\n?do_toupper@?$ctype@D@std@@MEBADD@Z\r\n?do_toupper@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z\r\n?do_toupper@?$ctype@G@std@@MEBAGG@Z\r\n?do_toupper@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z\r\n?do_toupper@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z\r\n?do_toupper@?$ctype@_W@std@@MEBA_W_W@Z\r\n?do_unshift@?$codecvt@DDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?do_unshift@?$codecvt@GDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?do_unshift@?$codecvt@_SDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?do_unshift@?$codecvt@_UDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?do_unshift@?$codecvt@_WDU_Mbstatet@@@std@@MEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?do_widen@?$ctype@D@std@@MEBADD@Z\r\n?do_widen@?$ctype@D@std@@MEBAPEBDPEBD0PEAD@Z\r\n?do_widen@?$ctype@G@std@@MEBAGD@Z\r\n?do_widen@?$ctype@G@std@@MEBAPEBDPEBD0PEAG@Z\r\n?do_widen@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W@Z\r\n?do_widen@?$ctype@_W@std@@MEBA_WD@Z\r\n?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?eback@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?eback@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?egptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?egptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?empty@?$_Yarn@D@std@@QEBA_NXZ\r\n?empty@?$_Yarn@G@std@@QEBA_NXZ\r\n?empty@?$_Yarn@_W@std@@QEBA_NXZ\r\n?empty@locale@std@@SA?AV12@XZ\r\n?encoding@codecvt_base@std@@QEBAHXZ\r\n?eof@ios_base@std@@QEBA_NXZ\r\n?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?epptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?epptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?exceptions@ios_base@std@@QEAAXH@Z\r\n?exceptions@ios_base@std@@QEAAXI@Z\r\n?exceptions@ios_base@std@@QEBAHXZ\r\n?fail@ios_base@std@@QEBA_NXZ\r\n?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAADD@Z\r\n?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADXZ\r\n?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAGG@Z\r\n?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGXZ\r\n?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA_W_W@Z\r\n?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WXZ\r\n?flags@ios_base@std@@QEAAHH@Z\r\n?flags@ios_base@std@@QEBAHXZ\r\n?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ\r\n?flush@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@XZ\r\n?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ\r\n?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z\r\n?gbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z\r\n?gbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z\r\n?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QEBA_JXZ\r\n?gcount@?$basic_istream@GU?$char_traits@G@std@@@std@@QEBA_JXZ\r\n?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEBA_JXZ\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAD@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAG@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@G@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_JG@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEA_W@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z\r\n?get@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?get@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBD4@Z\r\n?get@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?get@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBG4@Z\r\n?get@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@DD@Z\r\n?get@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEB_W4@Z\r\n?get_date@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_date@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_date@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_monthname@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_monthname@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_monthname@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_new_handler@std@@YAP6AXXZXZ\r\n?get_time@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_time@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_time@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_weekday@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_weekday@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_weekday@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_year@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_year@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?get_year@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@@Z\r\n?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z\r\n?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z\r\n?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z\r\n?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_JG@Z\r\n?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z\r\n?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z\r\n?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEBA?AVlocale@2@XZ\r\n?getloc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEBA?AVlocale@2@XZ\r\n?getloc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEBA?AVlocale@2@XZ\r\n?getloc@ios_base@std@@QEBA?AVlocale@2@XZ\r\n?global@locale@std@@SA?AV12@AEBV12@@Z\r\n?good@ios_base@std@@QEBA_NXZ\r\n?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?gptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?gptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?id@?$codecvt@DDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@GDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@_WDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$collate@D@std@@2V0locale@2@A\r\n?id@?$collate@G@std@@2V0locale@2@A\r\n?id@?$collate@_W@std@@2V0locale@2@A\r\n?id@?$ctype@D@std@@2V0locale@2@A\r\n?id@?$ctype@G@std@@2V0locale@2@A\r\n?id@?$ctype@_W@std@@2V0locale@2@A\r\n?id@?$messages@D@std@@2V0locale@2@A\r\n?id@?$messages@G@std@@2V0locale@2@A\r\n?id@?$messages@_W@std@@2V0locale@2@A\r\n?id@?$money_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$moneypunct@D$00@std@@2V0locale@2@A\r\n?id@?$moneypunct@D$0A@@std@@2V0locale@2@A\r\n?id@?$moneypunct@G$00@std@@2V0locale@2@A\r\n?id@?$moneypunct@G$0A@@std@@2V0locale@2@A\r\n?id@?$moneypunct@_W$00@std@@2V0locale@2@A\r\n?id@?$moneypunct@_W$0A@@std@@2V0locale@2@A\r\n?id@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$numpunct@D@std@@2V0locale@2@A\r\n?id@?$numpunct@G@std@@2V0locale@2@A\r\n?id@?$numpunct@_W@std@@2V0locale@2@A\r\n?id@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z\r\n?ignore@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JG@Z\r\n?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JG@Z\r\n?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?imbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAXAEBVlocale@2@@Z\r\n?imbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAXAEBVlocale@2@@Z\r\n?imbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAXAEBVlocale@2@@Z\r\n?imbue@ios_base@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?in@?$codecvt@DDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAD3AEAPEAD@Z\r\n?in@?$codecvt@GDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAG3AEAPEAG@Z\r\n?in@?$codecvt@_SDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_S3AEAPEA_S@Z\r\n?in@?$codecvt@_UDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_U3AEAPEA_U@Z\r\n?in@?$codecvt@_WDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEA_W3AEAPEA_W@Z\r\n?in_avail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JXZ\r\n?in_avail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JXZ\r\n?in_avail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JXZ\r\n?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IEAAXPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z\r\n?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IEAAXPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z\r\n?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAAXPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z\r\n?intl@?$moneypunct@D$00@std@@2_NB\r\n?intl@?$moneypunct@D$0A@@std@@2_NB\r\n?intl@?$moneypunct@G$00@std@@2_NB\r\n?intl@?$moneypunct@G$0A@@std@@2_NB\r\n?intl@?$moneypunct@_W$00@std@@2_NB\r\n?intl@?$moneypunct@_W$0A@@std@@2_NB\r\n?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z\r\n?ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_N_N@Z\r\n?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z\r\n?is@?$ctype@D@std@@QEBAPEBDPEBD0PEAF@Z\r\n?is@?$ctype@D@std@@QEBA_NFD@Z\r\n?is@?$ctype@G@std@@QEBAPEBGPEBG0PEAF@Z\r\n?is@?$ctype@G@std@@QEBA_NFG@Z\r\n?is@?$ctype@_W@std@@QEBAPEB_WPEB_W0PEAF@Z\r\n?is@?$ctype@_W@std@@QEBA_NF_W@Z\r\n?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n?isfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n?iword@ios_base@std@@QEAAAEAJH@Z\r\n?length@?$codecvt@DDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?length@?$codecvt@GDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?length@?$codecvt@_SDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?length@?$codecvt@_UDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?length@?$codecvt@_WDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1_K@Z\r\n?max_length@codecvt_base@std@@QEBAHXZ\r\n?move@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAX$$QEAV12@@Z\r\n?move@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXAEAV12@@Z\r\n?move@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAX$$QEAV12@@Z\r\n?move@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXAEAV12@@Z\r\n?move@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAX$$QEAV12@@Z\r\n?move@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXAEAV12@@Z\r\n?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADDD@Z\r\n?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBADGD@Z\r\n?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAD_WD@Z\r\n?narrow@?$ctype@D@std@@QEBADDD@Z\r\n?narrow@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD@Z\r\n?narrow@?$ctype@G@std@@QEBADGD@Z\r\n?narrow@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD@Z\r\n?narrow@?$ctype@_W@std@@QEBAD_WD@Z\r\n?narrow@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD@Z\r\n?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA_NXZ\r\n?opfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA_NXZ\r\n?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA_NXZ\r\n?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n?osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n?out@?$codecvt@DDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAD3AEAPEAD@Z\r\n?out@?$codecvt@GDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBG1AEAPEBGPEAD3AEAPEAD@Z\r\n?out@?$codecvt@_SDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEB_S1AEAPEB_SPEAD3AEAPEAD@Z\r\n?out@?$codecvt@_UDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEB_U1AEAPEB_UPEAD3AEAPEAD@Z\r\n?out@?$codecvt@_WDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEB_W1AEAPEB_WPEAD3AEAPEAD@Z\r\n?overflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z\r\n?overflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z\r\n?overflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z\r\n?pbackfail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z\r\n?pbackfail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z\r\n?pbackfail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z\r\n?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?pbase@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?pbase@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z\r\n?pbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z\r\n?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z\r\n?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?peek@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ\r\n?pptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ\r\n?pptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ\r\n?precision@ios_base@std@@QEAA_J_J@Z\r\n?precision@ios_base@std@@QEBA_JXZ\r\n?pubimbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?pubimbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?pubimbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z\r\n?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JII@Z\r\n?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JII@Z\r\n?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@_JII@Z\r\n?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@I@Z\r\n?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@I@Z\r\n?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@V32@I@Z\r\n?pubsetbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEAD_J@Z\r\n?pubsetbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEAG_J@Z\r\n?pubsetbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEA_W_J@Z\r\n?pubsync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?pubsync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAHXZ\r\n?pubsync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAHXZ\r\n?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z\r\n?put@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@G@Z\r\n?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DJ@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DK@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DN@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DO@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBX@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_J@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_K@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_N@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GJ@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GK@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GN@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GO@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBX@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_J@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_K@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_N@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WJ@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WK@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WN@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WO@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBX@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_J@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_K@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_N@Z\r\n?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBUtm@@DD@Z\r\n?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBUtm@@PEBD3@Z\r\n?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBUtm@@DD@Z\r\n?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBUtm@@PEBG3@Z\r\n?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBUtm@@DD@Z\r\n?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBUtm@@PEB_W4@Z\r\n?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z\r\n?putback@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@G@Z\r\n?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z\r\n?pword@ios_base@std@@QEAAAEAPEAXH@Z\r\n?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PEAV32@@Z\r\n?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ\r\n?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PEAV32@@Z\r\n?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ\r\n?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PEAV32@@Z\r\n?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ\r\n?rdstate@ios_base@std@@QEBAHXZ\r\n?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z\r\n?read@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z\r\n?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z\r\n?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z\r\n?readsome@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_J@Z\r\n?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z\r\n?register_callback@ios_base@std@@QEAAXP6AXW4event@12@AEAV12@H@ZH@Z\r\n?resetiosflags@std@@YA?AU?$_Smanip@H@1@H@Z\r\n?sbumpc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?sbumpc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?sbumpc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?scan_is@?$ctype@D@std@@QEBAPEBDFPEBD0@Z\r\n?scan_is@?$ctype@G@std@@QEBAPEBGFPEBG0@Z\r\n?scan_is@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z\r\n?scan_not@?$ctype@D@std@@QEBAPEBDFPEBD0@Z\r\n?scan_not@?$ctype@G@std@@QEBAPEBGFPEBG0@Z\r\n?scan_not@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z\r\n?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?seekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?seekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JH@Z\r\n?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?seekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?seekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?set_new_handler@std@@YAP6AXXZP6AXXZ@Z\r\n?set_rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z\r\n?set_rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z\r\n?set_rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z\r\n?setbase@std@@YA?AU?$_Smanip@H@1@H@Z\r\n?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAPEAV12@PEAD_J@Z\r\n?setbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAPEAV12@PEAG_J@Z\r\n?setbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAPEAV12@PEA_W_J@Z\r\n?setf@ios_base@std@@QEAAHH@Z\r\n?setf@ios_base@std@@QEAAHHH@Z\r\n?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z\r\n?setg@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG00@Z\r\n?setg@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W00@Z\r\n?setiosflags@std@@YA?AU?$_Smanip@H@1@H@Z\r\n?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z\r\n?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD0@Z\r\n?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG00@Z\r\n?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG0@Z\r\n?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W00@Z\r\n?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W0@Z\r\n?setprecision@std@@YA?AU?$_Smanip@_J@1@_J@Z\r\n?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z\r\n?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z\r\n?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z\r\n?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z\r\n?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z\r\n?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z\r\n?setstate@ios_base@std@@QEAAXH@Z\r\n?setstate@ios_base@std@@QEAAXH_N@Z\r\n?setstate@ios_base@std@@QEAAXI@Z\r\n?setw@std@@YA?AU?$_Smanip@_J@1@_J@Z\r\n?sgetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?sgetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?sgetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?sgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z\r\n?sgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_J@Z\r\n?sgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z\r\n?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JXZ\r\n?showmanyc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JXZ\r\n?showmanyc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JXZ\r\n?snextc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?snextc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?snextc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?sputbackc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z\r\n?sputbackc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGG@Z\r\n?sputbackc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z\r\n?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z\r\n?sputc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGG@Z\r\n?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z\r\n?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEBD_J@Z\r\n?sputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEBG_J@Z\r\n?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEB_W_J@Z\r\n?stossc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ\r\n?stossc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ\r\n?stossc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ\r\n?sungetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?sungetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ\r\n?sungetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ\r\n?swap@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXAEAV12@@Z\r\n?swap@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXAEAV12@@Z\r\n?swap@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXAEAV12@@Z\r\n?swap@?$basic_iostream@DU?$char_traits@D@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_iostream@GU?$char_traits@G@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_ostream@DU?$char_traits@D@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_ostream@GU?$char_traits@G@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXAEAV12@@Z\r\n?swap@ios_base@std@@QEAAXAEAV12@@Z\r\n?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ\r\n?sync@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAHXZ\r\n?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAHXZ\r\n?sync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ\r\n?sync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAHXZ\r\n?sync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAHXZ\r\n?sync_with_stdio@ios_base@std@@SA_N_N@Z\r\n?table@?$ctype@D@std@@QEBAPEBFXZ\r\n?table_size@?$ctype@D@std@@2_KB\r\n?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@PEAV32@@Z\r\n?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ\r\n?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@PEAV32@@Z\r\n?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ\r\n?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PEAV32@@Z\r\n?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ\r\n?tolower@?$ctype@D@std@@QEBADD@Z\r\n?tolower@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z\r\n?tolower@?$ctype@G@std@@QEBAGG@Z\r\n?tolower@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z\r\n?tolower@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z\r\n?tolower@?$ctype@_W@std@@QEBA_W_W@Z\r\n?toupper@?$ctype@D@std@@QEBADD@Z\r\n?toupper@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z\r\n?toupper@?$ctype@G@std@@QEBAGG@Z\r\n?toupper@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z\r\n?toupper@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z\r\n?toupper@?$ctype@_W@std@@QEBA_W_W@Z\r\n?uflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ\r\n?uflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGXZ\r\n?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ\r\n?uncaught_exception@std@@YA_NXZ\r\n?uncaught_exceptions@std@@YAHXZ\r\n?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ\r\n?underflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGXZ\r\n?underflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ\r\n?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ\r\n?unget@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@XZ\r\n?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ\r\n?unsetf@ios_base@std@@QEAAXH@Z\r\n?unshift@?$codecvt@DDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?unshift@?$codecvt@GDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?unshift@?$codecvt@_SDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?unshift@?$codecvt@_UDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?unshift@?$codecvt@_WDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEAD1AEAPEAD@Z\r\n?wcerr@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?wcerr@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?wcin@std@@3V?$basic_istream@GU?$char_traits@G@std@@@1@A\r\n?wcin@std@@3V?$basic_istream@_WU?$char_traits@_W@std@@@1@A\r\n?wclog@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?wclog@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?wcout@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?wcout@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADD@Z\r\n?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGD@Z\r\n?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WD@Z\r\n?widen@?$ctype@D@std@@QEBADD@Z\r\n?widen@?$ctype@D@std@@QEBAPEBDPEBD0PEAD@Z\r\n?widen@?$ctype@G@std@@QEBAGD@Z\r\n?widen@?$ctype@G@std@@QEBAPEBDPEBD0PEAG@Z\r\n?widen@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W@Z\r\n?widen@?$ctype@_W@std@@QEBA_WD@Z\r\n?width@ios_base@std@@QEAA_J_J@Z\r\n?width@ios_base@std@@QEBA_JXZ\r\n?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEBD_J@Z\r\n?write@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEBG_J@Z\r\n?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEB_W_J@Z\r\n?xalloc@ios_base@std@@SAHXZ\r\n?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEAD_J@Z\r\n?xsgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEAG_J@Z\r\n?xsgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEA_W_J@Z\r\n?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEBD_J@Z\r\n?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEBG_J@Z\r\n?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEB_W_J@Z\r\n_Chmod\r\n_Close_dir\r\n_Cnd_broadcast\r\n_Cnd_destroy\r\n_Cnd_destroy_in_situ\r\n_Cnd_do_broadcast_at_thread_exit\r\n_Cnd_init\r\n_Cnd_init_in_situ\r\n_Cnd_register_at_thread_exit\r\n_Cnd_signal\r\n_Cnd_timedwait\r\n_Cnd_unregister_at_thread_exit\r\n_Cnd_wait\r\n_Copy_file\r\n_Cosh\r\n_Current_get\r\n_Current_set\r\n_Denorm\r\n_Dtest\r\n_Equivalent\r\n_Exp\r\n_FCosh\r\n_FDenorm\r\n_FDtest\r\n_FExp\r\n_FInf\r\n_FNan\r\n_FSinh\r\n_FSnan\r\n_File_size\r\n_Getcoll\r\n_Getctype\r\n_Getcvt\r\n_Getdateorder\r\n_Getwctype\r\n_Getwctypes\r\n_Hard_links\r\n_Hugeval\r\n_Inf\r\n_LCosh\r\n_LDenorm\r\n_LDtest\r\n_LExp\r\n_LInf\r\n_LNan\r\n_LSinh\r\n_LSnan\r\n_Last_write_time\r\n_Link\r\n_Lock_shared_ptr_spin_lock\r\n_Lstat\r\n_Make_dir\r\n_Mbrtowc\r\n_Mtx_clear_owner\r\n_Mtx_current_owns\r\n_Mtx_destroy\r\n_Mtx_destroy_in_situ\r\n_Mtx_getconcrtcs\r\n_Mtx_init\r\n_Mtx_init_in_situ\r\n_Mtx_lock\r\n_Mtx_reset_owner\r\n_Mtx_timedlock\r\n_Mtx_trylock\r\n_Mtx_unlock\r\n_Mtxdst\r\n_Mtxinit\r\n_Mtxlock\r\n_Mtxunlock\r\n_Nan\r\n_Open_dir\r\n_Query_perf_counter\r\n_Query_perf_frequency\r\n_Read_dir\r\n_Remove_dir\r\n_Rename\r\n_Resize\r\n_Set_last_write_time\r\n_Sinh\r\n_Snan\r\n_Stat\r\n_Statvfs\r\n_Stod\r\n_Stodx\r\n_Stof\r\n_Stofx\r\n_Stold\r\n_Stoldx\r\n_Stoll\r\n_Stollx\r\n_Stolx\r\n_Stoul\r\n_Stoull\r\n_Stoullx\r\n_Stoulx\r\n_Strcoll\r\n_Strxfrm\r\n_Symlink\r\n_Symlink_get\r\n_Temp_get\r\n_Thrd_abort\r\n_Thrd_create\r\n_Thrd_current\r\n_Thrd_detach\r\n_Thrd_equal\r\n_Thrd_exit\r\n_Thrd_hardware_concurrency\r\n_Thrd_id\r\n_Thrd_join\r\n_Thrd_sleep\r\n_Thrd_start\r\n_Thrd_yield\r\n_To_byte\r\n_To_wide\r\n_Tolower\r\n_Toupper\r\n_Towlower\r\n_Towupper\r\n_Unlink\r\n_Unlock_shared_ptr_spin_lock\r\n_WStod\r\n_WStodx\r\n_WStof\r\n_WStofx\r\n_WStold\r\n_WStoldx\r\n_Wcrtomb\r\n_Wcscoll\r\n_Wcsxfrm\r\n_Xtime_diff_to_millis\r\n_Xtime_diff_to_millis2\r\n_Xtime_get_ticks\r\n__Wcrtomb_lk\r\n__crtCompareStringA\r\n__crtCompareStringW\r\n__crtIsPackagedApp\r\n__crtLCMapStringA\r\n__crtLCMapStringW\r\n__set_stl_sync_api_mode\r\nxtime_get\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Condition=\"'$(CrtBuildMD)'  != 'false'\" Include=\"md\\dirs.proj\" />\r\n        <ProjectFile Condition=\"'$(CrtBuildXMD)' != 'false'\" Include=\"xmd\\dirs.proj\" />\r\n        <ProjectFile Condition=\"'$(CrtBuildMT)'  != 'false'\" Include=\"mt\\dirs.proj\" />\r\n        <ProjectFile Condition=\"'$(CrtBuildMT)'  != 'false'\" Include=\"mt1\\dirs.proj\" />\r\n        <ProjectFile Condition=\"'$(CrtBuildXMT)' != 'false'\" Include=\"xmt\\dirs.proj\" />\r\n        <ProjectFile Condition=\"'$(CrtBuildXMT)' != 'false'\" Include=\"xmt0\\dirs.proj\" />\r\n        <ProjectFile Condition=\"'$(CrtBuildXMT)' != 'false'\" Include=\"xmt1\\dirs.proj\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/i386.exports",
    "content": "??$_Getvals@_W@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEX_WABV_Locinfo@1@@Z\r\n??$_Getvals@_W@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEX_WABV_Locinfo@1@@Z\r\n??$_Getvals@_W@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEX_WABV_Locinfo@1@@Z\r\n??0?$_Yarn@D@std@@QAE@ABV01@@Z\r\n??0?$_Yarn@D@std@@QAE@PBD@Z\r\n??0?$_Yarn@D@std@@QAE@XZ\r\n??0?$_Yarn@G@std@@QAE@ABV01@@Z\r\n??0?$_Yarn@G@std@@QAE@PBG@Z\r\n??0?$_Yarn@G@std@@QAE@XZ\r\n??0?$_Yarn@_W@std@@QAE@ABV01@@Z\r\n??0?$_Yarn@_W@std@@QAE@PB_W@Z\r\n??0?$_Yarn@_W@std@@QAE@XZ\r\n??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ\r\n??0?$basic_ios@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??0?$basic_ios@GU?$char_traits@G@std@@@std@@IAE@XZ\r\n??0?$basic_ios@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAE@XZ\r\n??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??0?$basic_iostream@DU?$char_traits@D@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??0?$basic_iostream@GU?$char_traits@G@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_iostream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@@Z\r\n??0?$basic_ostream@DU?$char_traits@D@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z\r\n??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@_N@Z\r\n??0?$basic_ostream@GU?$char_traits@G@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z\r\n??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@_N@Z\r\n??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z\r\n??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@_N@Z\r\n??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@ABV01@@Z\r\n??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@W4_Uninitialized@1@@Z\r\n??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@XZ\r\n??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAE@ABV01@@Z\r\n??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAE@W4_Uninitialized@1@@Z\r\n??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAE@XZ\r\n??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAE@ABV01@@Z\r\n??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAE@W4_Uninitialized@1@@Z\r\n??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAE@XZ\r\n??0?$codecvt@DDU_Mbstatet@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$codecvt@DDU_Mbstatet@@@std@@QAE@I@Z\r\n??0?$codecvt@GDU_Mbstatet@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$codecvt@GDU_Mbstatet@@@std@@QAE@I@Z\r\n??0?$codecvt@_SDU_Mbstatet@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$codecvt@_SDU_Mbstatet@@@std@@QAE@ABV_Locinfo@1@KW4_Codecvt_mode@1@I@Z\r\n??0?$codecvt@_SDU_Mbstatet@@@std@@QAE@I@Z\r\n??0?$codecvt@_UDU_Mbstatet@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$codecvt@_UDU_Mbstatet@@@std@@QAE@ABV_Locinfo@1@KW4_Codecvt_mode@1@I@Z\r\n??0?$codecvt@_UDU_Mbstatet@@@std@@QAE@I@Z\r\n??0?$codecvt@_WDU_Mbstatet@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$codecvt@_WDU_Mbstatet@@@std@@QAE@I@Z\r\n??0?$ctype@D@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$ctype@D@std@@QAE@PBF_NI@Z\r\n??0?$ctype@G@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$ctype@G@std@@QAE@I@Z\r\n??0?$ctype@_W@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$ctype@_W@std@@QAE@I@Z\r\n??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z\r\n??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z\r\n??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z\r\n??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z\r\n??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z\r\n??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z\r\n??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAE@PBDI@Z\r\n??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z\r\n??0?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAE@PBDI@Z\r\n??0?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z\r\n??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAE@PBDI@Z\r\n??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z\r\n??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z\r\n??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAE@PBDI@Z\r\n??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z\r\n??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAE@PBDI@Z\r\n??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z\r\n??0Init@ios_base@std@@QAE@XZ\r\n??0_Facet_base@std@@QAE@ABV01@@Z\r\n??0_Facet_base@std@@QAE@XZ\r\n??0_Init_locks@std@@QAE@XZ\r\n??0_Locimp@locale@std@@AAE@ABV012@@Z\r\n??0_Locimp@locale@std@@AAE@_N@Z\r\n??0_Locinfo@std@@QAE@HPBD@Z\r\n??0_Locinfo@std@@QAE@PBD@Z\r\n??0_Lockit@std@@QAE@H@Z\r\n??0_Lockit@std@@QAE@XZ\r\n??0_Timevec@std@@QAE@ABV01@@Z\r\n??0_Timevec@std@@QAE@PAX@Z\r\n??0_UShinit@std@@QAE@XZ\r\n??0_Winit@std@@QAE@XZ\r\n??0codecvt_base@std@@QAE@I@Z\r\n??0ctype_base@std@@QAE@I@Z\r\n??0facet@locale@std@@IAE@I@Z\r\n??0id@locale@std@@QAE@I@Z\r\n??0ios_base@std@@IAE@XZ\r\n??0task_continuation_context@Concurrency@@AAE@XZ\r\n??0time_base@std@@QAE@I@Z\r\n??1?$_Yarn@D@std@@QAE@XZ\r\n??1?$_Yarn@G@std@@QAE@XZ\r\n??1?$_Yarn@_W@std@@QAE@XZ\r\n??1?$basic_ios@DU?$char_traits@D@std@@@std@@UAE@XZ\r\n??1?$basic_ios@GU?$char_traits@G@std@@@std@@UAE@XZ\r\n??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UAE@XZ\r\n??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ\r\n??1?$basic_iostream@GU?$char_traits@G@std@@@std@@UAE@XZ\r\n??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UAE@XZ\r\n??1?$basic_istream@DU?$char_traits@D@std@@@std@@UAE@XZ\r\n??1?$basic_istream@GU?$char_traits@G@std@@@std@@UAE@XZ\r\n??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UAE@XZ\r\n??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UAE@XZ\r\n??1?$basic_ostream@GU?$char_traits@G@std@@@std@@UAE@XZ\r\n??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UAE@XZ\r\n??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAE@XZ\r\n??1?$basic_streambuf@GU?$char_traits@G@std@@@std@@UAE@XZ\r\n??1?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UAE@XZ\r\n??1?$codecvt@DDU_Mbstatet@@@std@@MAE@XZ\r\n??1?$codecvt@GDU_Mbstatet@@@std@@MAE@XZ\r\n??1?$codecvt@_SDU_Mbstatet@@@std@@MAE@XZ\r\n??1?$codecvt@_UDU_Mbstatet@@@std@@MAE@XZ\r\n??1?$codecvt@_WDU_Mbstatet@@@std@@MAE@XZ\r\n??1?$ctype@D@std@@MAE@XZ\r\n??1?$ctype@G@std@@MAE@XZ\r\n??1?$ctype@_W@std@@MAE@XZ\r\n??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ\r\n??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ\r\n??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ\r\n??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ\r\n??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ\r\n??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ\r\n??1?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ\r\n??1?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ\r\n??1?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ\r\n??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ\r\n??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ\r\n??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ\r\n??1Init@ios_base@std@@QAE@XZ\r\n??1_Facet_base@std@@UAE@XZ\r\n??1_Init_locks@std@@QAE@XZ\r\n??1_Locimp@locale@std@@MAE@XZ\r\n??1_Locinfo@std@@QAE@XZ\r\n??1_Lockit@std@@QAE@XZ\r\n??1_Timevec@std@@QAE@XZ\r\n??1_UShinit@std@@QAE@XZ\r\n??1_Winit@std@@QAE@XZ\r\n??1codecvt_base@std@@UAE@XZ\r\n??1ctype_base@std@@UAE@XZ\r\n??1facet@locale@std@@MAE@XZ\r\n??1ios_base@std@@UAE@XZ\r\n??1time_base@std@@UAE@XZ\r\n??4?$_Iosb@H@std@@QAEAAV01@$$QAV01@@Z\r\n??4?$_Iosb@H@std@@QAEAAV01@ABV01@@Z\r\n??4?$_Yarn@D@std@@QAEAAV01@ABV01@@Z\r\n??4?$_Yarn@D@std@@QAEAAV01@PBD@Z\r\n??4?$_Yarn@G@std@@QAEAAV01@ABV01@@Z\r\n??4?$_Yarn@G@std@@QAEAAV01@PBG@Z\r\n??4?$_Yarn@_W@std@@QAEAAV01@ABV01@@Z\r\n??4?$_Yarn@_W@std@@QAEAAV01@PB_W@Z\r\n??4?$basic_iostream@DU?$char_traits@D@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_iostream@GU?$char_traits@G@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_istream@DU?$char_traits@D@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_istream@GU?$char_traits@G@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_istream@_WU?$char_traits@_W@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_ostream@DU?$char_traits@D@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_ostream@GU?$char_traits@G@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_ostream@_WU?$char_traits@_W@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEAAV01@ABV01@@Z\r\n??4?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEAAV01@ABV01@@Z\r\n??4?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEAAV01@ABV01@@Z\r\n??4Init@ios_base@std@@QAEAAV012@ABV012@@Z\r\n??4_Crt_new_delete@std@@QAEAAU01@$$QAU01@@Z\r\n??4_Crt_new_delete@std@@QAEAAU01@ABU01@@Z\r\n??4_Facet_base@std@@QAEAAV01@ABV01@@Z\r\n??4_Init_locks@std@@QAEAAV01@ABV01@@Z\r\n??4_Timevec@std@@QAEAAV01@ABV01@@Z\r\n??4_UShinit@std@@QAEAAV01@ABV01@@Z\r\n??4_Winit@std@@QAEAAV01@ABV01@@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAF@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAG@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAH@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAI@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAJ@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAK@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAM@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAN@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAO@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAPAX@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_J@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_K@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_N@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@DU?$char_traits@D@std@@@1@AAV21@@Z@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAF@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAG@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAH@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAI@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAJ@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAK@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAM@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAN@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAO@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAPAX@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_J@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_K@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_N@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@GU?$char_traits@G@std@@@1@AAV21@@Z@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAF@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAG@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAH@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAI@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAJ@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAK@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAM@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAN@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAO@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAPAX@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_J@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_K@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_N@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AAV21@@Z@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@F@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@G@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@I@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@J@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@K@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@M@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@O@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@DU?$char_traits@D@std@@@1@AAV21@@Z@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PBX@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_J@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_K@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_N@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@F@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@G@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@H@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@I@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@J@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@K@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@M@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@N@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@O@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@GU?$char_traits@G@std@@@1@AAV21@@Z@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PBX@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_J@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_K@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_N@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@F@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@G@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@H@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@I@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@J@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@K@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@M@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@N@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@O@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AAV21@@Z@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PBX@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_J@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_K@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_N@Z\r\n??7ios_base@std@@QBE_NXZ\r\n??Bid@locale@std@@QAEIXZ\r\n??Bios_base@std@@QBE_NXZ\r\n??_7?$basic_ios@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_ios@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_ios@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_iostream@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_iostream@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_iostream@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_istream@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_istream@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_istream@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_ostream@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_ostream@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_ostream@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_streambuf@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_streambuf@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$codecvt@DDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@GDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@_SDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@_UDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@_WDU_Mbstatet@@@std@@6B@\r\n??_7?$ctype@D@std@@6B@\r\n??_7?$ctype@G@std@@6B@\r\n??_7?$ctype@_W@std@@6B@\r\n??_7?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7_Facet_base@std@@6B@\r\n??_7_Locimp@locale@std@@6B@\r\n??_7codecvt_base@std@@6B@\r\n??_7ctype_base@std@@6B@\r\n??_7facet@locale@std@@6B@\r\n??_7ios_base@std@@6B@\r\n??_7time_base@std@@6B@\r\n??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@\r\n??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@\r\n??_8?$basic_iostream@GU?$char_traits@G@std@@@std@@7B?$basic_istream@GU?$char_traits@G@std@@@1@@\r\n??_8?$basic_iostream@GU?$char_traits@G@std@@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@\r\n??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_istream@_WU?$char_traits@_W@std@@@1@@\r\n??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_ostream@_WU?$char_traits@_W@std@@@1@@\r\n??_8?$basic_istream@DU?$char_traits@D@std@@@std@@7B@\r\n??_8?$basic_istream@GU?$char_traits@G@std@@@std@@7B@\r\n??_8?$basic_istream@_WU?$char_traits@_W@std@@@std@@7B@\r\n??_8?$basic_ostream@DU?$char_traits@D@std@@@std@@7B@\r\n??_8?$basic_ostream@GU?$char_traits@G@std@@@std@@7B@\r\n??_8?$basic_ostream@_WU?$char_traits@_W@std@@@std@@7B@\r\n??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QAEXXZ\r\n??_D?$basic_iostream@GU?$char_traits@G@std@@@std@@QAEXXZ\r\n??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ\r\n??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ\r\n??_D?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXXZ\r\n??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXXZ\r\n??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ\r\n??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ\r\n??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ\r\n??_F?$codecvt@DDU_Mbstatet@@@std@@QAEXXZ\r\n??_F?$codecvt@GDU_Mbstatet@@@std@@QAEXXZ\r\n??_F?$codecvt@_SDU_Mbstatet@@@std@@QAEXXZ\r\n??_F?$codecvt@_UDU_Mbstatet@@@std@@QAEXXZ\r\n??_F?$codecvt@_WDU_Mbstatet@@@std@@QAEXXZ\r\n??_F?$ctype@D@std@@QAEXXZ\r\n??_F?$ctype@G@std@@QAEXXZ\r\n??_F?$ctype@_W@std@@QAEXXZ\r\n??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ\r\n??_F?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ\r\n??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ\r\n??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ\r\n??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ\r\n??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ\r\n??_F?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ\r\n??_F?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ\r\n??_F?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ\r\n??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ\r\n??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ\r\n??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ\r\n??_F_Locinfo@std@@QAEXXZ\r\n??_F_Timevec@std@@QAEXXZ\r\n??_Fcodecvt_base@std@@QAEXXZ\r\n??_Fctype_base@std@@QAEXXZ\r\n??_Ffacet@locale@std@@QAEXXZ\r\n??_Fid@locale@std@@QAEXXZ\r\n??_Ftime_base@std@@QAEXXZ\r\n?CaptureCallstack@platform@details@Concurrency@@YAIPAPAXII@Z\r\n?GetCurrentThreadId@platform@details@Concurrency@@YAJXZ\r\n?GetNextAsyncId@platform@details@Concurrency@@YAIXZ\r\n?ReportUnhandledError@_ExceptionHolder@details@Concurrency@@AAEXXZ\r\n?_Addcats@_Locinfo@std@@QAEAAV12@HPBD@Z\r\n?_Addfac@_Locimp@locale@std@@AAEXPAVfacet@23@I@Z\r\n?_Addstd@ios_base@std@@SAXPAV12@@Z\r\n?_Assign@_ContextCallback@details@Concurrency@@AAEXPAX@Z\r\n?_Atexit@@YAXP6AXXZ@Z\r\n?_BADOFF@std@@3_JB\r\n?_C_str@?$_Yarn@D@std@@QBEPBDXZ\r\n?_C_str@?$_Yarn@G@std@@QBEPBGXZ\r\n?_C_str@?$_Yarn@_W@std@@QBEPB_WXZ\r\n?_CallInContext@_ContextCallback@details@Concurrency@@QBEXV?$function@$$A6AXXZ@std@@_N@Z\r\n?_Callfns@ios_base@std@@AAEXW4event@12@@Z\r\n?_Capture@_ContextCallback@details@Concurrency@@AAEXXZ\r\n?_Clocptr@_Locimp@locale@std@@0PAV123@A\r\n?_Decref@facet@locale@std@@UAEPAV_Facet_base@3@XZ\r\n?_Donarrow@?$ctype@G@std@@IBEDGD@Z\r\n?_Donarrow@?$ctype@_W@std@@IBED_WD@Z\r\n?_Dowiden@?$ctype@G@std@@IBEGD@Z\r\n?_Dowiden@?$ctype@_W@std@@IBE_WD@Z\r\n?_Empty@?$_Yarn@D@std@@QBE_NXZ\r\n?_Empty@?$_Yarn@G@std@@QBE_NXZ\r\n?_Empty@?$_Yarn@_W@std@@QBE_NXZ\r\n?_Execute_once@std@@YAHAAUonce_flag@1@P6GHPAX1PAPAX@Z1@Z\r\n?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADDH@Z\r\n?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADDH@Z\r\n?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADDH@Z\r\n?_Findarr@ios_base@std@@AAEAAU_Iosarray@12@H@Z\r\n?_Fiopen@std@@YAPAU_iobuf@@PBDHH@Z\r\n?_Fiopen@std@@YAPAU_iobuf@@PBGHH@Z\r\n?_Fiopen@std@@YAPAU_iobuf@@PB_WHH@Z\r\n?_Fput@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBDI@Z\r\n?_Fput@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBDI@Z\r\n?_Fput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBDI@Z\r\n?_Getcat@?$codecvt@DDU_Mbstatet@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$codecvt@GDU_Mbstatet@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$codecvt@_SDU_Mbstatet@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$codecvt@_UDU_Mbstatet@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$codecvt@_WDU_Mbstatet@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@facet@locale@std@@SAIPAPBV123@PBV23@@Z\r\n?_Getcoll@_Locinfo@std@@QBE?AU_Collvec@@XZ\r\n?_Getctype@_Locinfo@std@@QBE?AU_Ctypevec@@XZ\r\n?_Getcvt@_Locinfo@std@@QBE?AU_Cvtvec@@XZ\r\n?_Getdateorder@_Locinfo@std@@QBEHXZ\r\n?_Getdays@_Locinfo@std@@QBEPBDXZ\r\n?_Getfalse@_Locinfo@std@@QBEPBDXZ\r\n?_Getffld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1AAVios_base@2@PAH@Z\r\n?_Getffld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1AAVios_base@2@PAH@Z\r\n?_Getffld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1AAVios_base@2@PAH@Z\r\n?_Getffldx@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1AAVios_base@2@PAH@Z\r\n?_Getffldx@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1AAVios_base@2@PAH@Z\r\n?_Getffldx@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1AAVios_base@2@PAH@Z\r\n?_Getfmt@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@PBD@Z\r\n?_Getfmt@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@PBD@Z\r\n?_Getfmt@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@PBD@Z\r\n?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ\r\n?_Getifld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1HABVlocale@2@@Z\r\n?_Getifld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1HABVlocale@2@@Z\r\n?_Getifld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1HABVlocale@2@@Z\r\n?_Getint@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@0HHAAHABV?$ctype@D@2@@Z\r\n?_Getint@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@0HHAAHABV?$ctype@G@2@@Z\r\n?_Getint@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@0HHAAHABV?$ctype@_W@2@@Z\r\n?_Getlconv@_Locinfo@std@@QBEPBUlconv@@XZ\r\n?_Getmonths@_Locinfo@std@@QBEPBDXZ\r\n?_Getname@_Locinfo@std@@QBEPBDXZ\r\n?_Getptr@_Timevec@std@@QBEPAXXZ\r\n?_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ\r\n?_Gettrue@_Locinfo@std@@QBEPBDXZ\r\n?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBE_JXZ\r\n?_Gnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBE_JXZ\r\n?_Gnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBE_JXZ\r\n?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ\r\n?_Gndec@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ\r\n?_Gndec@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ\r\n?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ\r\n?_Gninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ\r\n?_Gninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ\r\n?_Gnpreinc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ\r\n?_Gnpreinc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ\r\n?_Gnpreinc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ\r\n?_Id_cnt@id@locale@std@@0HA\r\n?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADPBDH@Z\r\n?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADPBDH@Z\r\n?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADPBDH@Z\r\n?_Incref@facet@locale@std@@UAEXXZ\r\n?_Index@ios_base@std@@0HA\r\n?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAPAD0PAH001@Z\r\n?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXXZ\r\n?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAPAG0PAH001@Z\r\n?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXXZ\r\n?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPAPA_W0PAH001@Z\r\n?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXXZ\r\n?_Init@?$codecvt@DDU_Mbstatet@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$codecvt@GDU_Mbstatet@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$codecvt@_SDU_Mbstatet@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$codecvt@_UDU_Mbstatet@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$codecvt@_WDU_Mbstatet@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$ctype@D@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$ctype@G@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$ctype@_W@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@ios_base@std@@IAEXXZ\r\n?_Init@locale@std@@CAPAV_Locimp@12@_N@Z\r\n?_Init_cnt@Init@ios_base@std@@0HA\r\n?_Init_cnt@_UShinit@std@@0HA\r\n?_Init_cnt@_Winit@std@@0HA\r\n?_Init_cnt_func@Init@ios_base@std@@CAAAHXZ\r\n?_Init_ctor@Init@ios_base@std@@CAXPAV123@@Z\r\n?_Init_dtor@Init@ios_base@std@@CAXPAV123@@Z\r\n?_Init_locks_ctor@_Init_locks@std@@CAXPAV12@@Z\r\n?_Init_locks_dtor@_Init_locks@std@@CAXPAV12@@Z\r\n?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z\r\n?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z\r\n?_Ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_N_N@Z\r\n?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_N_N@Z\r\n?_Iput@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPADI@Z\r\n?_Iput@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPADI@Z\r\n?_Iput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPADI@Z\r\n?_IsCurrentOriginSTA@_ContextCallback@details@Concurrency@@CA_NXZ\r\n?_IsNonBlockingThread@_Task_impl_base@details@Concurrency@@SA_NXZ\r\n?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z\r\n?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z\r\n?_Locimp_dtor@_Locimp@locale@std@@CAXPAV123@@Z\r\n?_Locinfo_Addcats@_Locinfo@std@@SAAAV12@PAV12@HPBD@Z\r\n?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@HPBD@Z\r\n?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z\r\n?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z\r\n?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAEXXZ\r\n?_Lock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@UAEXXZ\r\n?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UAEXXZ\r\n?_Lockit_ctor@_Lockit@std@@CAXPAV12@@Z\r\n?_Lockit_ctor@_Lockit@std@@CAXPAV12@H@Z\r\n?_Lockit_ctor@_Lockit@std@@SAXH@Z\r\n?_Lockit_dtor@_Lockit@std@@CAXPAV12@@Z\r\n?_Lockit_dtor@_Lockit@std@@SAXH@Z\r\n?_LogCancelTask@_TaskEventLogger@details@Concurrency@@QAEXXZ\r\n?_LogScheduleTask@_TaskEventLogger@details@Concurrency@@QAEX_N@Z\r\n?_LogTaskCompleted@_TaskEventLogger@details@Concurrency@@QAEXXZ\r\n?_LogTaskExecutionCompleted@_TaskEventLogger@details@Concurrency@@QAEXXZ\r\n?_LogWorkItemCompleted@_TaskEventLogger@details@Concurrency@@QAEXXZ\r\n?_LogWorkItemStarted@_TaskEventLogger@details@Concurrency@@QAEXXZ\r\n?_MP_Add@std@@YAXQA_K_K@Z\r\n?_MP_Get@std@@YA_KQA_K@Z\r\n?_MP_Mul@std@@YAXQA_K_K1@Z\r\n?_MP_Rem@std@@YAXQA_K_K@Z\r\n?_Makeloc@_Locimp@locale@std@@CAPAV123@ABV_Locinfo@3@HPAV123@PBV23@@Z\r\n?_Makeushloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z\r\n?_Makewloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z\r\n?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z\r\n?_Mtx_delete@threads@stdext@@YAXPAX@Z\r\n?_Mtx_lock@threads@stdext@@YAXPAX@Z\r\n?_Mtx_new@threads@stdext@@YAXAAPAX@Z\r\n?_Mtx_unlock@threads@stdext@@YAXPAX@Z\r\n?_New_Locimp@_Locimp@locale@std@@CAPAV123@ABV123@@Z\r\n?_New_Locimp@_Locimp@locale@std@@CAPAV123@_N@Z\r\n?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ\r\n?_Osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ\r\n?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ\r\n?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBE_JXZ\r\n?_Pnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBE_JXZ\r\n?_Pnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBE_JXZ\r\n?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ\r\n?_Pninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ\r\n?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ\r\n?_Ptr_cerr@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?_Ptr_cin@std@@3PAV?$basic_istream@DU?$char_traits@D@std@@@1@A\r\n?_Ptr_clog@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?_Ptr_cout@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?_Ptr_wcerr@std@@3PAV?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?_Ptr_wcerr@std@@3PAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?_Ptr_wcin@std@@3PAV?$basic_istream@GU?$char_traits@G@std@@@1@A\r\n?_Ptr_wcin@std@@3PAV?$basic_istream@_WU?$char_traits@_W@std@@@1@A\r\n?_Ptr_wclog@std@@3PAV?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?_Ptr_wclog@std@@3PAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?_Ptr_wcout@std@@3PAV?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?_Ptr_wcout@std@@3PAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?_Put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@PBDI@Z\r\n?_Put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@PBGI@Z\r\n?_Put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@PB_WI@Z\r\n?_Raise_handler@std@@3P6AXABVexception@stdext@@@ZA\r\n?_Random_device@std@@YAIXZ\r\n?_Release_chore@details@Concurrency@@YAXPAU_Threadpool_chore@12@@Z\r\n?_Rep@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@DI@Z\r\n?_Rep@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@GI@Z\r\n?_Rep@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@_WI@Z\r\n?_ReportUnobservedException@details@Concurrency@@YAXXZ\r\n?_Reschedule_chore@details@Concurrency@@YAHPBU_Threadpool_chore@12@@Z\r\n?_Reset@_ContextCallback@details@Concurrency@@AAEXXZ\r\n?_Rethrow_future_exception@std@@YAXVexception_ptr@1@@Z\r\n?_Rng_abort@std@@YAXPBD@Z\r\n?_Schedule_chore@details@Concurrency@@YAHPAU_Threadpool_chore@12@@Z\r\n?_Setgloballocale@locale@std@@CAXPAX@Z\r\n?_Src@?1??_Getffld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@3@1AAVios_base@3@PAH@Z@4QBDB\r\n?_Src@?1??_Getffld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@3@1AAVios_base@3@PAH@Z@4QBDB\r\n?_Src@?1??_Getffld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@3@1AAVios_base@3@PAH@Z@4QBDB\r\n?_Src@?1??_Getffldx@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@3@1AAVios_base@3@PAH@Z@4QBDB\r\n?_Src@?1??_Getffldx@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@3@1AAVios_base@3@PAH@Z@4QBDB\r\n?_Src@?1??_Getffldx@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@3@1AAVios_base@3@PAH@Z@4QBDB\r\n?_Src@?1??_Getifld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@3@1HABVlocale@3@@Z@4QBDB\r\n?_Src@?1??_Getifld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@3@1HABVlocale@3@@Z@4QBDB\r\n?_Src@?1??_Getifld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@3@1HABVlocale@3@@Z@4QBDB\r\n?_Sync@ios_base@std@@0_NA\r\n?_Syserror_map@std@@YAPBDH@Z\r\n?_Throw_C_error@std@@YAXH@Z\r\n?_Throw_Cpp_error@std@@YAXH@Z\r\n?_Throw_future_error@std@@YAXABVerror_code@1@@Z\r\n?_Tidy@?$_Yarn@D@std@@AAEXXZ\r\n?_Tidy@?$_Yarn@G@std@@AAEXXZ\r\n?_Tidy@?$_Yarn@_W@std@@AAEXXZ\r\n?_Tidy@?$ctype@D@std@@IAEXXZ\r\n?_Tidy@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AAEXXZ\r\n?_Tidy@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AAEXXZ\r\n?_Tidy@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AAEXXZ\r\n?_Tidy@ios_base@std@@AAEXXZ\r\n?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAEXXZ\r\n?_Unlock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@UAEXXZ\r\n?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UAEXXZ\r\n?_W_Getdays@_Locinfo@std@@QBEPBGXZ\r\n?_W_Getmonths@_Locinfo@std@@QBEPBGXZ\r\n?_W_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ\r\n?_Winerror_map@std@@YAHH@Z\r\n?_Winerror_message@std@@YAKKPADK@Z\r\n?_XGetLastError@std@@YAXXZ\r\n?_XLgamma@std@@YAMM@Z\r\n?_XLgamma@std@@YANN@Z\r\n?_XLgamma@std@@YAOO@Z\r\n?_Xbad_alloc@std@@YAXXZ\r\n?_Xbad_function_call@std@@YAXXZ\r\n?_Xinvalid_argument@std@@YAXPBD@Z\r\n?_Xlength_error@std@@YAXPBD@Z\r\n?_Xout_of_range@std@@YAXPBD@Z\r\n?_Xoverflow_error@std@@YAXPBD@Z\r\n?_Xregex_error@std@@YAXW4error_type@regex_constants@1@@Z\r\n?_Xruntime_error@std@@YAXPBD@Z\r\n?__ExceptionPtrAssign@@YAXPAXPBX@Z\r\n?__ExceptionPtrCompare@@YA_NPBX0@Z\r\n?__ExceptionPtrCopy@@YAXPAXPBX@Z\r\n?__ExceptionPtrCopyException@@YAXPAXPBX1@Z\r\n?__ExceptionPtrCreate@@YAXPAX@Z\r\n?__ExceptionPtrCurrentException@@YAXPAX@Z\r\n?__ExceptionPtrDestroy@@YAXPAX@Z\r\n?__ExceptionPtrRethrow@@YAXPBX@Z\r\n?__ExceptionPtrSwap@@YAXPAX0@Z\r\n?__ExceptionPtrToBool@@YA_NPBX@Z\r\n?always_noconv@codecvt_base@std@@QBE_NXZ\r\n?bad@ios_base@std@@QBE_NXZ\r\n?c_str@?$_Yarn@D@std@@QBEPBDXZ\r\n?c_str@?$_Yarn@G@std@@QBEPBGXZ\r\n?c_str@?$_Yarn@_W@std@@QBEPB_WXZ\r\n?cerr@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A\r\n?classic@locale@std@@SAABV12@XZ\r\n?classic_table@?$ctype@D@std@@SAPBFXZ\r\n?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z\r\n?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z\r\n?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXH_N@Z\r\n?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXI@Z\r\n?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z\r\n?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z\r\n?clear@ios_base@std@@QAEXH@Z\r\n?clear@ios_base@std@@QAEXH_N@Z\r\n?clear@ios_base@std@@QAEXI@Z\r\n?clog@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEAAV12@ABV12@@Z\r\n?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEAAV12@ABV12@@Z\r\n?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEAAV12@ABV12@@Z\r\n?copyfmt@ios_base@std@@QAEAAV12@ABV12@@Z\r\n?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AW4dateorder@time_base@2@XZ\r\n?date_order@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AW4dateorder@time_base@2@XZ\r\n?date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AW4dateorder@time_base@2@XZ\r\n?do_always_noconv@?$codecvt@DDU_Mbstatet@@@std@@MBE_NXZ\r\n?do_always_noconv@?$codecvt@GDU_Mbstatet@@@std@@MBE_NXZ\r\n?do_always_noconv@?$codecvt@_SDU_Mbstatet@@@std@@MBE_NXZ\r\n?do_always_noconv@?$codecvt@_UDU_Mbstatet@@@std@@MBE_NXZ\r\n?do_always_noconv@?$codecvt@_WDU_Mbstatet@@@std@@MBE_NXZ\r\n?do_always_noconv@codecvt_base@std@@MBE_NXZ\r\n?do_date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AW4dateorder@time_base@2@XZ\r\n?do_date_order@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AW4dateorder@time_base@2@XZ\r\n?do_date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AW4dateorder@time_base@2@XZ\r\n?do_encoding@?$codecvt@GDU_Mbstatet@@@std@@MBEHXZ\r\n?do_encoding@?$codecvt@_SDU_Mbstatet@@@std@@MBEHXZ\r\n?do_encoding@?$codecvt@_UDU_Mbstatet@@@std@@MBEHXZ\r\n?do_encoding@?$codecvt@_WDU_Mbstatet@@@std@@MBEHXZ\r\n?do_encoding@codecvt_base@std@@MBEHXZ\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAG@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAI@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAK@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAM@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAN@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAO@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAG@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAI@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAK@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAM@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAN@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAO@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAG@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAI@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAK@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAM@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAN@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAO@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z\r\n?do_get@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@DD@Z\r\n?do_get@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@DD@Z\r\n?do_get@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@DD@Z\r\n?do_get_date@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_date@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_date@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_monthname@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_monthname@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_monthname@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_time@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_time@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_time@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_weekday@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_weekday@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_weekday@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_year@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_year@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_year@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_in@?$codecvt@DDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1AAPBDPAD3AAPAD@Z\r\n?do_in@?$codecvt@GDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1AAPBDPAG3AAPAG@Z\r\n?do_in@?$codecvt@_SDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1AAPBDPA_S3AAPA_S@Z\r\n?do_in@?$codecvt@_UDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1AAPBDPA_U3AAPA_U@Z\r\n?do_in@?$codecvt@_WDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1AAPBDPA_W3AAPA_W@Z\r\n?do_is@?$ctype@G@std@@MBEPBGPBG0PAF@Z\r\n?do_is@?$ctype@G@std@@MBE_NFG@Z\r\n?do_is@?$ctype@_W@std@@MBEPB_WPB_W0PAF@Z\r\n?do_is@?$ctype@_W@std@@MBE_NF_W@Z\r\n?do_length@?$codecvt@DDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1I@Z\r\n?do_length@?$codecvt@GDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1I@Z\r\n?do_length@?$codecvt@_SDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1I@Z\r\n?do_length@?$codecvt@_UDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1I@Z\r\n?do_length@?$codecvt@_WDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1I@Z\r\n?do_max_length@?$codecvt@GDU_Mbstatet@@@std@@MBEHXZ\r\n?do_max_length@?$codecvt@_SDU_Mbstatet@@@std@@MBEHXZ\r\n?do_max_length@?$codecvt@_UDU_Mbstatet@@@std@@MBEHXZ\r\n?do_max_length@?$codecvt@_WDU_Mbstatet@@@std@@MBEHXZ\r\n?do_max_length@codecvt_base@std@@MBEHXZ\r\n?do_narrow@?$ctype@D@std@@MBEDDD@Z\r\n?do_narrow@?$ctype@D@std@@MBEPBDPBD0DPAD@Z\r\n?do_narrow@?$ctype@G@std@@MBEDGD@Z\r\n?do_narrow@?$ctype@G@std@@MBEPBGPBG0DPAD@Z\r\n?do_narrow@?$ctype@_W@std@@MBED_WD@Z\r\n?do_narrow@?$ctype@_W@std@@MBEPB_WPB_W0DPAD@Z\r\n?do_out@?$codecvt@DDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1AAPBDPAD3AAPAD@Z\r\n?do_out@?$codecvt@GDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBG1AAPBGPAD3AAPAD@Z\r\n?do_out@?$codecvt@_SDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PB_S1AAPB_SPAD3AAPAD@Z\r\n?do_out@?$codecvt@_UDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PB_U1AAPB_UPAD3AAPAD@Z\r\n?do_out@?$codecvt@_WDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PB_W1AAPB_WPAD3AAPAD@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DJ@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DK@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DN@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DO@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBX@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_J@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_K@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_N@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GJ@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GK@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GN@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GO@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBX@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_J@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_K@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_N@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WJ@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WK@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WN@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WO@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBX@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_J@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_K@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_N@Z\r\n?do_put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBUtm@@DD@Z\r\n?do_put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBUtm@@DD@Z\r\n?do_put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBUtm@@DD@Z\r\n?do_scan_is@?$ctype@G@std@@MBEPBGFPBG0@Z\r\n?do_scan_is@?$ctype@_W@std@@MBEPB_WFPB_W0@Z\r\n?do_scan_not@?$ctype@G@std@@MBEPBGFPBG0@Z\r\n?do_scan_not@?$ctype@_W@std@@MBEPB_WFPB_W0@Z\r\n?do_tolower@?$ctype@D@std@@MBEDD@Z\r\n?do_tolower@?$ctype@D@std@@MBEPBDPADPBD@Z\r\n?do_tolower@?$ctype@G@std@@MBEGG@Z\r\n?do_tolower@?$ctype@G@std@@MBEPBGPAGPBG@Z\r\n?do_tolower@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z\r\n?do_tolower@?$ctype@_W@std@@MBE_W_W@Z\r\n?do_toupper@?$ctype@D@std@@MBEDD@Z\r\n?do_toupper@?$ctype@D@std@@MBEPBDPADPBD@Z\r\n?do_toupper@?$ctype@G@std@@MBEGG@Z\r\n?do_toupper@?$ctype@G@std@@MBEPBGPAGPBG@Z\r\n?do_toupper@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z\r\n?do_toupper@?$ctype@_W@std@@MBE_W_W@Z\r\n?do_unshift@?$codecvt@DDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?do_unshift@?$codecvt@GDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?do_unshift@?$codecvt@_SDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?do_unshift@?$codecvt@_UDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?do_unshift@?$codecvt@_WDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?do_widen@?$ctype@D@std@@MBEDD@Z\r\n?do_widen@?$ctype@D@std@@MBEPBDPBD0PAD@Z\r\n?do_widen@?$ctype@G@std@@MBEGD@Z\r\n?do_widen@?$ctype@G@std@@MBEPBDPBD0PAG@Z\r\n?do_widen@?$ctype@_W@std@@MBEPBDPBD0PA_W@Z\r\n?do_widen@?$ctype@_W@std@@MBE_WD@Z\r\n?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ\r\n?eback@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ\r\n?eback@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ\r\n?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ\r\n?egptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ\r\n?egptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ\r\n?empty@?$_Yarn@D@std@@QBE_NXZ\r\n?empty@?$_Yarn@G@std@@QBE_NXZ\r\n?empty@?$_Yarn@_W@std@@QBE_NXZ\r\n?empty@locale@std@@SA?AV12@XZ\r\n?encoding@codecvt_base@std@@QBEHXZ\r\n?eof@ios_base@std@@QBE_NXZ\r\n?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ\r\n?epptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ\r\n?epptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ\r\n?exceptions@ios_base@std@@QAEXH@Z\r\n?exceptions@ios_base@std@@QAEXI@Z\r\n?exceptions@ios_base@std@@QBEHXZ\r\n?fail@ios_base@std@@QBE_NXZ\r\n?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEDD@Z\r\n?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ\r\n?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEGG@Z\r\n?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEGXZ\r\n?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE_W_W@Z\r\n?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WXZ\r\n?flags@ios_base@std@@QAEHH@Z\r\n?flags@ios_base@std@@QBEHXZ\r\n?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ\r\n?flush@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@XZ\r\n?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ\r\n?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z\r\n?gbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXH@Z\r\n?gbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXH@Z\r\n?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QBE_JXZ\r\n?gcount@?$basic_istream@GU?$char_traits@G@std@@@std@@QBE_JXZ\r\n?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QBE_JXZ\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAD@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PAD_J@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PAD_JD@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAG@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAV?$basic_streambuf@GU?$char_traits@G@std@@@2@G@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAG_J@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAG_JG@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEGXZ\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AA_W@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_W_J@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_W_J_W@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEGXZ\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAG@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAI@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAK@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAM@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAN@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAO@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAG@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAI@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAK@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAM@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAN@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAO@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAG@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAI@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAK@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAM@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAN@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAO@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z\r\n?get@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@DD@Z\r\n?get@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@PBD4@Z\r\n?get@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@DD@Z\r\n?get@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@PBG4@Z\r\n?get@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@DD@Z\r\n?get@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@PB_W4@Z\r\n?get_date@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_date@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_date@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_monthname@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_monthname@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_monthname@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_new_handler@std@@YAP6AXXZXZ\r\n?get_time@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_time@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_time@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_weekday@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_weekday@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_weekday@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_year@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_year@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_year@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PAD_J@Z\r\n?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PAD_JD@Z\r\n?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAG_J@Z\r\n?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAG_JG@Z\r\n?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_W_J@Z\r\n?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_W_J_W@Z\r\n?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QBE?AVlocale@2@XZ\r\n?getloc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QBE?AVlocale@2@XZ\r\n?getloc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QBE?AVlocale@2@XZ\r\n?getloc@ios_base@std@@QBE?AVlocale@2@XZ\r\n?global@locale@std@@SA?AV12@ABV12@@Z\r\n?good@ios_base@std@@QBE_NXZ\r\n?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ\r\n?gptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ\r\n?gptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ\r\n?id@?$codecvt@DDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@GDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@_WDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$collate@D@std@@2V0locale@2@A\r\n?id@?$collate@G@std@@2V0locale@2@A\r\n?id@?$collate@_W@std@@2V0locale@2@A\r\n?id@?$ctype@D@std@@2V0locale@2@A\r\n?id@?$ctype@G@std@@2V0locale@2@A\r\n?id@?$ctype@_W@std@@2V0locale@2@A\r\n?id@?$messages@D@std@@2V0locale@2@A\r\n?id@?$messages@G@std@@2V0locale@2@A\r\n?id@?$messages@_W@std@@2V0locale@2@A\r\n?id@?$money_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$moneypunct@D$00@std@@2V0locale@2@A\r\n?id@?$moneypunct@D$0A@@std@@2V0locale@2@A\r\n?id@?$moneypunct@G$00@std@@2V0locale@2@A\r\n?id@?$moneypunct@G$0A@@std@@2V0locale@2@A\r\n?id@?$moneypunct@_W$00@std@@2V0locale@2@A\r\n?id@?$moneypunct@_W$0A@@std@@2V0locale@2@A\r\n?id@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$numpunct@D@std@@2V0locale@2@A\r\n?id@?$numpunct@G@std@@2V0locale@2@A\r\n?id@?$numpunct@_W@std@@2V0locale@2@A\r\n?id@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@_JH@Z\r\n?ignore@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@_JG@Z\r\n?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_JG@Z\r\n?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z\r\n?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QAE?AVlocale@2@ABV32@@Z\r\n?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE?AVlocale@2@ABV32@@Z\r\n?imbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEXABVlocale@2@@Z\r\n?imbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEXABVlocale@2@@Z\r\n?imbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEXABVlocale@2@@Z\r\n?imbue@ios_base@std@@QAE?AVlocale@2@ABV32@@Z\r\n?in@?$codecvt@DDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1AAPBDPAD3AAPAD@Z\r\n?in@?$codecvt@GDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1AAPBDPAG3AAPAG@Z\r\n?in@?$codecvt@_SDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1AAPBDPA_S3AAPA_S@Z\r\n?in@?$codecvt@_UDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1AAPBDPA_U3AAPA_U@Z\r\n?in@?$codecvt@_WDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1AAPBDPA_W3AAPA_W@Z\r\n?in_avail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE_JXZ\r\n?in_avail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE_JXZ\r\n?in_avail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE_JXZ\r\n?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z\r\n?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IAEXPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z\r\n?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAEXPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z\r\n?intl@?$moneypunct@D$00@std@@2_NB\r\n?intl@?$moneypunct@D$0A@@std@@2_NB\r\n?intl@?$moneypunct@G$00@std@@2_NB\r\n?intl@?$moneypunct@G$0A@@std@@2_NB\r\n?intl@?$moneypunct@_W$00@std@@2_NB\r\n?intl@?$moneypunct@_W$0A@@std@@2_NB\r\n?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z\r\n?ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_N_N@Z\r\n?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_N_N@Z\r\n?is@?$ctype@D@std@@QBEPBDPBD0PAF@Z\r\n?is@?$ctype@D@std@@QBE_NFD@Z\r\n?is@?$ctype@G@std@@QBEPBGPBG0PAF@Z\r\n?is@?$ctype@G@std@@QBE_NFG@Z\r\n?is@?$ctype@_W@std@@QBEPB_WPB_W0PAF@Z\r\n?is@?$ctype@_W@std@@QBE_NF_W@Z\r\n?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ\r\n?isfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXXZ\r\n?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXXZ\r\n?iword@ios_base@std@@QAEAAJH@Z\r\n?length@?$codecvt@DDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1I@Z\r\n?length@?$codecvt@GDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1I@Z\r\n?length@?$codecvt@_SDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1I@Z\r\n?length@?$codecvt@_UDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1I@Z\r\n?length@?$codecvt@_WDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1I@Z\r\n?max_length@codecvt_base@std@@QBEHXZ\r\n?move@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEX$$QAV12@@Z\r\n?move@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXAAV12@@Z\r\n?move@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEX$$QAV12@@Z\r\n?move@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXAAV12@@Z\r\n?move@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEX$$QAV12@@Z\r\n?move@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXAAV12@@Z\r\n?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDDD@Z\r\n?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEDGD@Z\r\n?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBED_WD@Z\r\n?narrow@?$ctype@D@std@@QBEDDD@Z\r\n?narrow@?$ctype@D@std@@QBEPBDPBD0DPAD@Z\r\n?narrow@?$ctype@G@std@@QBEDGD@Z\r\n?narrow@?$ctype@G@std@@QBEPBGPBG0DPAD@Z\r\n?narrow@?$ctype@_W@std@@QBED_WD@Z\r\n?narrow@?$ctype@_W@std@@QBEPB_WPB_W0DPAD@Z\r\n?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE_NXZ\r\n?opfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE_NXZ\r\n?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE_NXZ\r\n?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ\r\n?osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ\r\n?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ\r\n?out@?$codecvt@DDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1AAPBDPAD3AAPAD@Z\r\n?out@?$codecvt@GDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBG1AAPBGPAD3AAPAD@Z\r\n?out@?$codecvt@_SDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PB_S1AAPB_SPAD3AAPAD@Z\r\n?out@?$codecvt@_UDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PB_U1AAPB_UPAD3AAPAD@Z\r\n?out@?$codecvt@_WDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PB_W1AAPB_WPAD3AAPAD@Z\r\n?overflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHH@Z\r\n?overflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGG@Z\r\n?overflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z\r\n?pbackfail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHH@Z\r\n?pbackfail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGG@Z\r\n?pbackfail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z\r\n?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ\r\n?pbase@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ\r\n?pbase@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ\r\n?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z\r\n?pbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXH@Z\r\n?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXH@Z\r\n?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ\r\n?peek@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEGXZ\r\n?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEGXZ\r\n?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ\r\n?pptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ\r\n?pptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ\r\n?precision@ios_base@std@@QAE_J_J@Z\r\n?precision@ios_base@std@@QBE_JXZ\r\n?pubimbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z\r\n?pubimbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AVlocale@2@ABV32@@Z\r\n?pubimbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AVlocale@2@ABV32@@Z\r\n?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@_JII@Z\r\n?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@_JII@Z\r\n?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@_JII@Z\r\n?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@V32@I@Z\r\n?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@V32@I@Z\r\n?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@V32@I@Z\r\n?pubsetbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PAD_J@Z\r\n?pubsetbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PAG_J@Z\r\n?pubsetbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PA_W_J@Z\r\n?pubsync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ\r\n?pubsync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHXZ\r\n?pubsync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHXZ\r\n?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z\r\n?put@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@G@Z\r\n?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_W@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DJ@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DK@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DN@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DO@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBX@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_J@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_K@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_N@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GJ@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GK@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GN@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GO@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBX@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_J@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_K@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_N@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WJ@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WK@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WN@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WO@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBX@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_J@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_K@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_N@Z\r\n?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBUtm@@DD@Z\r\n?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBUtm@@PBD3@Z\r\n?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBUtm@@DD@Z\r\n?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBUtm@@PBG3@Z\r\n?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBUtm@@DD@Z\r\n?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBUtm@@PB_W4@Z\r\n?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z\r\n?putback@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@G@Z\r\n?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_W@Z\r\n?pword@ios_base@std@@QAEAAPAXH@Z\r\n?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PAV32@@Z\r\n?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ\r\n?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PAV32@@Z\r\n?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ\r\n?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PAV32@@Z\r\n?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ\r\n?rdstate@ios_base@std@@QBEHXZ\r\n?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PAD_J@Z\r\n?read@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAG_J@Z\r\n?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_W_J@Z\r\n?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_JPAD_J@Z\r\n?readsome@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_JPAG_J@Z\r\n?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_JPA_W_J@Z\r\n?register_callback@ios_base@std@@QAEXP6AXW4event@12@AAV12@H@ZH@Z\r\n?resetiosflags@std@@YA?AU?$_Smanip@H@1@H@Z\r\n?sbumpc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ\r\n?sbumpc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ\r\n?sbumpc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ\r\n?scan_is@?$ctype@D@std@@QBEPBDFPBD0@Z\r\n?scan_is@?$ctype@G@std@@QBEPBGFPBG0@Z\r\n?scan_is@?$ctype@_W@std@@QBEPB_WFPB_W0@Z\r\n?scan_not@?$ctype@D@std@@QBEPBDFPBD0@Z\r\n?scan_not@?$ctype@G@std@@QBEPBGFPBG0@Z\r\n?scan_not@?$ctype@_W@std@@QBEPB_WFPB_W0@Z\r\n?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@_JH@Z\r\n?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@_JH@Z\r\n?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_JH@Z\r\n?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?seekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?seekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@_JH@Z\r\n?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@_JH@Z\r\n?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_JH@Z\r\n?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?seekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?seekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?set_new_handler@std@@YAP6AXXZP6AXXZ@Z\r\n?set_rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z\r\n?set_rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z\r\n?set_rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z\r\n?setbase@std@@YA?AU?$_Smanip@H@1@H@Z\r\n?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEPAV12@PAD_J@Z\r\n?setbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEPAV12@PAG_J@Z\r\n?setbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEPAV12@PA_W_J@Z\r\n?setf@ios_base@std@@QAEHH@Z\r\n?setf@ios_base@std@@QAEHHH@Z\r\n?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z\r\n?setg@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG00@Z\r\n?setg@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W00@Z\r\n?setiosflags@std@@YA?AU?$_Smanip@H@1@H@Z\r\n?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z\r\n?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD0@Z\r\n?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG00@Z\r\n?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG0@Z\r\n?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W00@Z\r\n?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W0@Z\r\n?setprecision@std@@YA?AU?$_Smanip@_J@1@_J@Z\r\n?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z\r\n?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z\r\n?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXH_N@Z\r\n?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXI@Z\r\n?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z\r\n?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z\r\n?setstate@ios_base@std@@QAEXH@Z\r\n?setstate@ios_base@std@@QAEXH_N@Z\r\n?setstate@ios_base@std@@QAEXI@Z\r\n?setw@std@@YA?AU?$_Smanip@_J@1@_J@Z\r\n?sgetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ\r\n?sgetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ\r\n?sgetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ\r\n?sgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE_JPAD_J@Z\r\n?sgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE_JPAG_J@Z\r\n?sgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE_JPA_W_J@Z\r\n?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE_JXZ\r\n?showmanyc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE_JXZ\r\n?showmanyc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE_JXZ\r\n?snextc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ\r\n?snextc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ\r\n?snextc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ\r\n?sputbackc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z\r\n?sputbackc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGG@Z\r\n?sputbackc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEG_W@Z\r\n?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z\r\n?sputc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGG@Z\r\n?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEG_W@Z\r\n?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE_JPBD_J@Z\r\n?sputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE_JPBG_J@Z\r\n?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE_JPB_W_J@Z\r\n?stossc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ\r\n?stossc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ\r\n?stossc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ\r\n?sungetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ\r\n?sungetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ\r\n?sungetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ\r\n?swap@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXAAV12@@Z\r\n?swap@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXAAV12@@Z\r\n?swap@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXAAV12@@Z\r\n?swap@?$basic_iostream@DU?$char_traits@D@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_iostream@GU?$char_traits@G@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_ostream@DU?$char_traits@D@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_ostream@GU?$char_traits@G@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXAAV12@@Z\r\n?swap@ios_base@std@@QAEXAAV12@@Z\r\n?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ\r\n?sync@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHXZ\r\n?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHXZ\r\n?sync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ\r\n?sync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHXZ\r\n?sync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHXZ\r\n?sync_with_stdio@ios_base@std@@SA_N_N@Z\r\n?table@?$ctype@D@std@@QBEPBFXZ\r\n?table_size@?$ctype@D@std@@2IB\r\n?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@PAV32@@Z\r\n?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ\r\n?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEPAV?$basic_ostream@GU?$char_traits@G@std@@@2@PAV32@@Z\r\n?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ\r\n?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PAV32@@Z\r\n?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ\r\n?tolower@?$ctype@D@std@@QBEDD@Z\r\n?tolower@?$ctype@D@std@@QBEPBDPADPBD@Z\r\n?tolower@?$ctype@G@std@@QBEGG@Z\r\n?tolower@?$ctype@G@std@@QBEPBGPAGPBG@Z\r\n?tolower@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z\r\n?tolower@?$ctype@_W@std@@QBE_W_W@Z\r\n?toupper@?$ctype@D@std@@QBEDD@Z\r\n?toupper@?$ctype@D@std@@QBEPBDPADPBD@Z\r\n?toupper@?$ctype@G@std@@QBEGG@Z\r\n?toupper@?$ctype@G@std@@QBEPBGPAGPBG@Z\r\n?toupper@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z\r\n?toupper@?$ctype@_W@std@@QBE_W_W@Z\r\n?uflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ\r\n?uflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGXZ\r\n?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ\r\n?uncaught_exception@std@@YA_NXZ\r\n?uncaught_exceptions@std@@YAHXZ\r\n?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ\r\n?underflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGXZ\r\n?underflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ\r\n?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ\r\n?unget@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@XZ\r\n?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ\r\n?unsetf@ios_base@std@@QAEXH@Z\r\n?unshift@?$codecvt@DDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?unshift@?$codecvt@GDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?unshift@?$codecvt@_SDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?unshift@?$codecvt@_UDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?unshift@?$codecvt@_WDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?wcerr@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?wcerr@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?wcin@std@@3V?$basic_istream@GU?$char_traits@G@std@@@1@A\r\n?wcin@std@@3V?$basic_istream@_WU?$char_traits@_W@std@@@1@A\r\n?wclog@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?wclog@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?wcout@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?wcout@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDD@Z\r\n?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEGD@Z\r\n?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WD@Z\r\n?widen@?$ctype@D@std@@QBEDD@Z\r\n?widen@?$ctype@D@std@@QBEPBDPBD0PAD@Z\r\n?widen@?$ctype@G@std@@QBEGD@Z\r\n?widen@?$ctype@G@std@@QBEPBDPBD0PAG@Z\r\n?widen@?$ctype@_W@std@@QBEPBDPBD0PA_W@Z\r\n?widen@?$ctype@_W@std@@QBE_WD@Z\r\n?width@ios_base@std@@QAE_J_J@Z\r\n?width@ios_base@std@@QBE_JXZ\r\n?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@PBD_J@Z\r\n?write@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@PBG_J@Z\r\n?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PB_W_J@Z\r\n?xalloc@ios_base@std@@SAHXZ\r\n?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE_JPAD_J@Z\r\n?xsgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE_JPAG_J@Z\r\n?xsgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE_JPA_W_J@Z\r\n?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE_JPBD_J@Z\r\n?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE_JPBG_J@Z\r\n?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE_JPB_W_J@Z\r\n_Chmod\r\n_Close_dir\r\n_Cnd_broadcast\r\n_Cnd_destroy\r\n_Cnd_destroy_in_situ\r\n_Cnd_do_broadcast_at_thread_exit\r\n_Cnd_init\r\n_Cnd_init_in_situ\r\n_Cnd_register_at_thread_exit\r\n_Cnd_signal\r\n_Cnd_timedwait\r\n_Cnd_unregister_at_thread_exit\r\n_Cnd_wait\r\n_Copy_file\r\n_Cosh\r\n_Current_get\r\n_Current_set\r\n_Denorm\r\n_Dtest\r\n_Equivalent\r\n_Exp\r\n_FCosh\r\n_FDenorm\r\n_FDtest\r\n_FExp\r\n_FInf\r\n_FNan\r\n_FSinh\r\n_FSnan\r\n_File_size\r\n_Getcoll\r\n_Getctype\r\n_Getcvt\r\n_Getdateorder\r\n_Getwctype\r\n_Getwctypes\r\n_Hard_links\r\n_Hugeval\r\n_Inf\r\n_LCosh\r\n_LDenorm\r\n_LDtest\r\n_LExp\r\n_LInf\r\n_LNan\r\n_LSinh\r\n_LSnan\r\n_Last_write_time\r\n_Link\r\n_Lock_shared_ptr_spin_lock\r\n_Lstat\r\n_Make_dir\r\n_Mbrtowc\r\n_Mtx_clear_owner\r\n_Mtx_current_owns\r\n_Mtx_destroy\r\n_Mtx_destroy_in_situ\r\n_Mtx_getconcrtcs\r\n_Mtx_init\r\n_Mtx_init_in_situ\r\n_Mtx_lock\r\n_Mtx_reset_owner\r\n_Mtx_timedlock\r\n_Mtx_trylock\r\n_Mtx_unlock\r\n_Mtxdst\r\n_Mtxinit\r\n_Mtxlock\r\n_Mtxunlock\r\n_Nan\r\n_Open_dir\r\n_Query_perf_counter\r\n_Query_perf_frequency\r\n_Read_dir\r\n_Remove_dir\r\n_Rename\r\n_Resize\r\n_Set_last_write_time\r\n_Sinh\r\n_Snan\r\n_Stat\r\n_Statvfs\r\n_Stod\r\n_Stodx\r\n_Stof\r\n_Stofx\r\n_Stold\r\n_Stoldx\r\n_Stoll\r\n_Stollx\r\n_Stolx\r\n_Stoul\r\n_Stoull\r\n_Stoullx\r\n_Stoulx\r\n_Strcoll\r\n_Strxfrm\r\n_Symlink\r\n_Symlink_get\r\n_Temp_get\r\n_Thrd_abort\r\n_Thrd_create\r\n_Thrd_current\r\n_Thrd_detach\r\n_Thrd_equal\r\n_Thrd_exit\r\n_Thrd_hardware_concurrency\r\n_Thrd_id\r\n_Thrd_join\r\n_Thrd_sleep\r\n_Thrd_start\r\n_Thrd_yield\r\n_To_byte\r\n_To_wide\r\n_Tolower\r\n_Toupper\r\n_Towlower\r\n_Towupper\r\n_Unlink\r\n_Unlock_shared_ptr_spin_lock\r\n_WStod\r\n_WStodx\r\n_WStof\r\n_WStofx\r\n_WStold\r\n_WStoldx\r\n_Wcrtomb\r\n_Wcscoll\r\n_Wcsxfrm\r\n_Xtime_diff_to_millis\r\n_Xtime_diff_to_millis2\r\n_Xtime_get_ticks\r\n__Wcrtomb_lk\r\n__crtCloseThreadpoolTimer\r\n__crtCloseThreadpoolWait\r\n__crtCompareStringA\r\n__crtCompareStringEx\r\n__crtCompareStringW\r\n__crtCreateEventExW\r\n__crtCreateSemaphoreExW\r\n__crtCreateSymbolicLinkW\r\n__crtCreateThreadpoolTimer\r\n__crtCreateThreadpoolWait\r\n__crtFlushProcessWriteBuffers\r\n__crtFreeLibraryWhenCallbackReturns\r\n__crtGetCurrentProcessorNumber\r\n__crtGetFileInformationByHandleEx\r\n__crtGetLocaleInfoEx\r\n__crtGetSystemTimePreciseAsFileTime\r\n__crtGetTickCount64\r\n__crtInitOnceExecuteOnce\r\n__crtInitializeCriticalSectionEx\r\n__crtIsPackagedApp\r\n__crtLCMapStringA\r\n__crtLCMapStringEx\r\n__crtLCMapStringW\r\n__crtSetFileInformationByHandle\r\n__crtSetThreadpoolTimer\r\n__crtSetThreadpoolWait\r\n__crtWaitForThreadpoolTimerCallbacks\r\n__set_stl_sync_api_mode\r\nxtime_get\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/i386_onecore.exports",
    "content": "??$_Getvals@_W@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEX_WABV_Locinfo@1@@Z\r\n??$_Getvals@_W@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEX_WABV_Locinfo@1@@Z\r\n??$_Getvals@_W@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEX_WABV_Locinfo@1@@Z\r\n??0?$_Yarn@D@std@@QAE@ABV01@@Z\r\n??0?$_Yarn@D@std@@QAE@PBD@Z\r\n??0?$_Yarn@D@std@@QAE@XZ\r\n??0?$_Yarn@G@std@@QAE@ABV01@@Z\r\n??0?$_Yarn@G@std@@QAE@PBG@Z\r\n??0?$_Yarn@G@std@@QAE@XZ\r\n??0?$_Yarn@_W@std@@QAE@ABV01@@Z\r\n??0?$_Yarn@_W@std@@QAE@PB_W@Z\r\n??0?$_Yarn@_W@std@@QAE@XZ\r\n??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ\r\n??0?$basic_ios@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??0?$basic_ios@GU?$char_traits@G@std@@@std@@IAE@XZ\r\n??0?$basic_ios@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAE@XZ\r\n??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??0?$basic_iostream@DU?$char_traits@D@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??0?$basic_iostream@GU?$char_traits@G@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_iostream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z\r\n??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z\r\n??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z\r\n??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@@Z\r\n??0?$basic_ostream@DU?$char_traits@D@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z\r\n??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@_N@Z\r\n??0?$basic_ostream@GU?$char_traits@G@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z\r\n??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@_N@Z\r\n??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@IAE@$$QAV01@@Z\r\n??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z\r\n??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@_N@Z\r\n??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@ABV01@@Z\r\n??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@W4_Uninitialized@1@@Z\r\n??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@XZ\r\n??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAE@ABV01@@Z\r\n??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAE@W4_Uninitialized@1@@Z\r\n??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAE@XZ\r\n??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAE@ABV01@@Z\r\n??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAE@W4_Uninitialized@1@@Z\r\n??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAE@XZ\r\n??0?$codecvt@DDU_Mbstatet@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$codecvt@DDU_Mbstatet@@@std@@QAE@I@Z\r\n??0?$codecvt@GDU_Mbstatet@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$codecvt@GDU_Mbstatet@@@std@@QAE@I@Z\r\n??0?$codecvt@_SDU_Mbstatet@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$codecvt@_SDU_Mbstatet@@@std@@QAE@ABV_Locinfo@1@KW4_Codecvt_mode@1@I@Z\r\n??0?$codecvt@_SDU_Mbstatet@@@std@@QAE@I@Z\r\n??0?$codecvt@_UDU_Mbstatet@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$codecvt@_UDU_Mbstatet@@@std@@QAE@ABV_Locinfo@1@KW4_Codecvt_mode@1@I@Z\r\n??0?$codecvt@_UDU_Mbstatet@@@std@@QAE@I@Z\r\n??0?$codecvt@_WDU_Mbstatet@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$codecvt@_WDU_Mbstatet@@@std@@QAE@I@Z\r\n??0?$ctype@D@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$ctype@D@std@@QAE@PBF_NI@Z\r\n??0?$ctype@G@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$ctype@G@std@@QAE@I@Z\r\n??0?$ctype@_W@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$ctype@_W@std@@QAE@I@Z\r\n??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z\r\n??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z\r\n??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z\r\n??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z\r\n??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z\r\n??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z\r\n??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAE@PBDI@Z\r\n??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z\r\n??0?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAE@PBDI@Z\r\n??0?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z\r\n??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAE@PBDI@Z\r\n??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z\r\n??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z\r\n??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAE@PBDI@Z\r\n??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z\r\n??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAE@PBDI@Z\r\n??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z\r\n??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z\r\n??0Init@ios_base@std@@QAE@XZ\r\n??0_Facet_base@std@@QAE@ABV01@@Z\r\n??0_Facet_base@std@@QAE@XZ\r\n??0_Init_locks@std@@QAE@XZ\r\n??0_Locimp@locale@std@@AAE@ABV012@@Z\r\n??0_Locimp@locale@std@@AAE@_N@Z\r\n??0_Locinfo@std@@QAE@HPBD@Z\r\n??0_Locinfo@std@@QAE@PBD@Z\r\n??0_Lockit@std@@QAE@H@Z\r\n??0_Lockit@std@@QAE@XZ\r\n??0_Timevec@std@@QAE@ABV01@@Z\r\n??0_Timevec@std@@QAE@PAX@Z\r\n??0_UShinit@std@@QAE@XZ\r\n??0_Winit@std@@QAE@XZ\r\n??0codecvt_base@std@@QAE@I@Z\r\n??0ctype_base@std@@QAE@I@Z\r\n??0facet@locale@std@@IAE@I@Z\r\n??0id@locale@std@@QAE@I@Z\r\n??0ios_base@std@@IAE@XZ\r\n??0task_continuation_context@Concurrency@@AAE@XZ\r\n??0time_base@std@@QAE@I@Z\r\n??1?$_Yarn@D@std@@QAE@XZ\r\n??1?$_Yarn@G@std@@QAE@XZ\r\n??1?$_Yarn@_W@std@@QAE@XZ\r\n??1?$basic_ios@DU?$char_traits@D@std@@@std@@UAE@XZ\r\n??1?$basic_ios@GU?$char_traits@G@std@@@std@@UAE@XZ\r\n??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UAE@XZ\r\n??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ\r\n??1?$basic_iostream@GU?$char_traits@G@std@@@std@@UAE@XZ\r\n??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UAE@XZ\r\n??1?$basic_istream@DU?$char_traits@D@std@@@std@@UAE@XZ\r\n??1?$basic_istream@GU?$char_traits@G@std@@@std@@UAE@XZ\r\n??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UAE@XZ\r\n??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UAE@XZ\r\n??1?$basic_ostream@GU?$char_traits@G@std@@@std@@UAE@XZ\r\n??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UAE@XZ\r\n??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAE@XZ\r\n??1?$basic_streambuf@GU?$char_traits@G@std@@@std@@UAE@XZ\r\n??1?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UAE@XZ\r\n??1?$codecvt@DDU_Mbstatet@@@std@@MAE@XZ\r\n??1?$codecvt@GDU_Mbstatet@@@std@@MAE@XZ\r\n??1?$codecvt@_SDU_Mbstatet@@@std@@MAE@XZ\r\n??1?$codecvt@_UDU_Mbstatet@@@std@@MAE@XZ\r\n??1?$codecvt@_WDU_Mbstatet@@@std@@MAE@XZ\r\n??1?$ctype@D@std@@MAE@XZ\r\n??1?$ctype@G@std@@MAE@XZ\r\n??1?$ctype@_W@std@@MAE@XZ\r\n??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ\r\n??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ\r\n??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ\r\n??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ\r\n??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ\r\n??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ\r\n??1?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ\r\n??1?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ\r\n??1?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ\r\n??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ\r\n??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ\r\n??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ\r\n??1Init@ios_base@std@@QAE@XZ\r\n??1_Facet_base@std@@UAE@XZ\r\n??1_Init_locks@std@@QAE@XZ\r\n??1_Locimp@locale@std@@MAE@XZ\r\n??1_Locinfo@std@@QAE@XZ\r\n??1_Lockit@std@@QAE@XZ\r\n??1_Timevec@std@@QAE@XZ\r\n??1_UShinit@std@@QAE@XZ\r\n??1_Winit@std@@QAE@XZ\r\n??1codecvt_base@std@@UAE@XZ\r\n??1ctype_base@std@@UAE@XZ\r\n??1facet@locale@std@@MAE@XZ\r\n??1ios_base@std@@UAE@XZ\r\n??1time_base@std@@UAE@XZ\r\n??4?$_Iosb@H@std@@QAEAAV01@$$QAV01@@Z\r\n??4?$_Iosb@H@std@@QAEAAV01@ABV01@@Z\r\n??4?$_Yarn@D@std@@QAEAAV01@ABV01@@Z\r\n??4?$_Yarn@D@std@@QAEAAV01@PBD@Z\r\n??4?$_Yarn@G@std@@QAEAAV01@ABV01@@Z\r\n??4?$_Yarn@G@std@@QAEAAV01@PBG@Z\r\n??4?$_Yarn@_W@std@@QAEAAV01@ABV01@@Z\r\n??4?$_Yarn@_W@std@@QAEAAV01@PB_W@Z\r\n??4?$basic_iostream@DU?$char_traits@D@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_iostream@GU?$char_traits@G@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_istream@DU?$char_traits@D@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_istream@GU?$char_traits@G@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_istream@_WU?$char_traits@_W@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_ostream@DU?$char_traits@D@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_ostream@GU?$char_traits@G@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_ostream@_WU?$char_traits@_W@std@@@std@@IAEAAV01@$$QAV01@@Z\r\n??4?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEAAV01@ABV01@@Z\r\n??4?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEAAV01@ABV01@@Z\r\n??4?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEAAV01@ABV01@@Z\r\n??4Init@ios_base@std@@QAEAAV012@ABV012@@Z\r\n??4_Crt_new_delete@std@@QAEAAU01@$$QAU01@@Z\r\n??4_Crt_new_delete@std@@QAEAAU01@ABU01@@Z\r\n??4_Facet_base@std@@QAEAAV01@ABV01@@Z\r\n??4_Init_locks@std@@QAEAAV01@ABV01@@Z\r\n??4_Timevec@std@@QAEAAV01@ABV01@@Z\r\n??4_UShinit@std@@QAEAAV01@ABV01@@Z\r\n??4_Winit@std@@QAEAAV01@ABV01@@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAF@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAG@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAH@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAI@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAJ@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAK@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAM@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAN@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAO@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAPAX@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_J@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_K@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_N@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@DU?$char_traits@D@std@@@1@AAV21@@Z@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z\r\n??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAF@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAG@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAH@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAI@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAJ@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAK@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAM@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAN@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAO@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAPAX@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_J@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_K@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_N@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@GU?$char_traits@G@std@@@1@AAV21@@Z@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z\r\n??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAF@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAG@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAH@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAI@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAJ@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAK@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAM@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAN@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAO@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAPAX@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_J@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_K@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_N@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AAV21@@Z@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z\r\n??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@F@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@G@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@I@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@J@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@K@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@M@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@O@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@DU?$char_traits@D@std@@@1@AAV21@@Z@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PBX@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_J@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_K@Z\r\n??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_N@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@F@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@G@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@H@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@I@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@J@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@K@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@M@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@N@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@O@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@GU?$char_traits@G@std@@@1@AAV21@@Z@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PBX@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_J@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_K@Z\r\n??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_N@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@F@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@G@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@H@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@I@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@J@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@K@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@M@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@N@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@O@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AAV21@@Z@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PBX@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_J@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_K@Z\r\n??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_N@Z\r\n??7ios_base@std@@QBE_NXZ\r\n??Bid@locale@std@@QAEIXZ\r\n??Bios_base@std@@QBE_NXZ\r\n??_7?$basic_ios@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_ios@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_ios@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_iostream@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_iostream@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_iostream@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_istream@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_istream@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_istream@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_ostream@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_ostream@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_ostream@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$basic_streambuf@DU?$char_traits@D@std@@@std@@6B@\r\n??_7?$basic_streambuf@GU?$char_traits@G@std@@@std@@6B@\r\n??_7?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@6B@\r\n??_7?$codecvt@DDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@GDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@_SDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@_UDU_Mbstatet@@@std@@6B@\r\n??_7?$codecvt@_WDU_Mbstatet@@@std@@6B@\r\n??_7?$ctype@D@std@@6B@\r\n??_7?$ctype@G@std@@6B@\r\n??_7?$ctype@_W@std@@6B@\r\n??_7?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@\r\n??_7?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@\r\n??_7?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@\r\n??_7_Facet_base@std@@6B@\r\n??_7_Locimp@locale@std@@6B@\r\n??_7codecvt_base@std@@6B@\r\n??_7ctype_base@std@@6B@\r\n??_7facet@locale@std@@6B@\r\n??_7ios_base@std@@6B@\r\n??_7time_base@std@@6B@\r\n??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@\r\n??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@\r\n??_8?$basic_iostream@GU?$char_traits@G@std@@@std@@7B?$basic_istream@GU?$char_traits@G@std@@@1@@\r\n??_8?$basic_iostream@GU?$char_traits@G@std@@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@\r\n??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_istream@_WU?$char_traits@_W@std@@@1@@\r\n??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_ostream@_WU?$char_traits@_W@std@@@1@@\r\n??_8?$basic_istream@DU?$char_traits@D@std@@@std@@7B@\r\n??_8?$basic_istream@GU?$char_traits@G@std@@@std@@7B@\r\n??_8?$basic_istream@_WU?$char_traits@_W@std@@@std@@7B@\r\n??_8?$basic_ostream@DU?$char_traits@D@std@@@std@@7B@\r\n??_8?$basic_ostream@GU?$char_traits@G@std@@@std@@7B@\r\n??_8?$basic_ostream@_WU?$char_traits@_W@std@@@std@@7B@\r\n??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QAEXXZ\r\n??_D?$basic_iostream@GU?$char_traits@G@std@@@std@@QAEXXZ\r\n??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ\r\n??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ\r\n??_D?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXXZ\r\n??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXXZ\r\n??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ\r\n??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ\r\n??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ\r\n??_F?$codecvt@DDU_Mbstatet@@@std@@QAEXXZ\r\n??_F?$codecvt@GDU_Mbstatet@@@std@@QAEXXZ\r\n??_F?$codecvt@_SDU_Mbstatet@@@std@@QAEXXZ\r\n??_F?$codecvt@_UDU_Mbstatet@@@std@@QAEXXZ\r\n??_F?$codecvt@_WDU_Mbstatet@@@std@@QAEXXZ\r\n??_F?$ctype@D@std@@QAEXXZ\r\n??_F?$ctype@G@std@@QAEXXZ\r\n??_F?$ctype@_W@std@@QAEXXZ\r\n??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ\r\n??_F?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ\r\n??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ\r\n??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ\r\n??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ\r\n??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ\r\n??_F?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ\r\n??_F?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ\r\n??_F?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ\r\n??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ\r\n??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ\r\n??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ\r\n??_F_Locinfo@std@@QAEXXZ\r\n??_F_Timevec@std@@QAEXXZ\r\n??_Fcodecvt_base@std@@QAEXXZ\r\n??_Fctype_base@std@@QAEXXZ\r\n??_Ffacet@locale@std@@QAEXXZ\r\n??_Fid@locale@std@@QAEXXZ\r\n??_Ftime_base@std@@QAEXXZ\r\n?CaptureCallstack@platform@details@Concurrency@@YAIPAPAXII@Z\r\n?GetCurrentThreadId@platform@details@Concurrency@@YAJXZ\r\n?GetNextAsyncId@platform@details@Concurrency@@YAIXZ\r\n?ReportUnhandledError@_ExceptionHolder@details@Concurrency@@AAEXXZ\r\n?_Addcats@_Locinfo@std@@QAEAAV12@HPBD@Z\r\n?_Addfac@_Locimp@locale@std@@AAEXPAVfacet@23@I@Z\r\n?_Addstd@ios_base@std@@SAXPAV12@@Z\r\n?_Assign@_ContextCallback@details@Concurrency@@AAEXPAX@Z\r\n?_Atexit@@YAXP6AXXZ@Z\r\n?_BADOFF@std@@3_JB\r\n?_C_str@?$_Yarn@D@std@@QBEPBDXZ\r\n?_C_str@?$_Yarn@G@std@@QBEPBGXZ\r\n?_C_str@?$_Yarn@_W@std@@QBEPB_WXZ\r\n?_CallInContext@_ContextCallback@details@Concurrency@@QBEXV?$function@$$A6AXXZ@std@@_N@Z\r\n?_Callfns@ios_base@std@@AAEXW4event@12@@Z\r\n?_Capture@_ContextCallback@details@Concurrency@@AAEXXZ\r\n?_Clocptr@_Locimp@locale@std@@0PAV123@A\r\n?_Decref@facet@locale@std@@UAEPAV_Facet_base@3@XZ\r\n?_Donarrow@?$ctype@G@std@@IBEDGD@Z\r\n?_Donarrow@?$ctype@_W@std@@IBED_WD@Z\r\n?_Dowiden@?$ctype@G@std@@IBEGD@Z\r\n?_Dowiden@?$ctype@_W@std@@IBE_WD@Z\r\n?_Empty@?$_Yarn@D@std@@QBE_NXZ\r\n?_Empty@?$_Yarn@G@std@@QBE_NXZ\r\n?_Empty@?$_Yarn@_W@std@@QBE_NXZ\r\n?_Execute_once@std@@YAHAAUonce_flag@1@P6GHPAX1PAPAX@Z1@Z\r\n?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADDH@Z\r\n?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADDH@Z\r\n?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADDH@Z\r\n?_Findarr@ios_base@std@@AAEAAU_Iosarray@12@H@Z\r\n?_Fiopen@std@@YAPAU_iobuf@@PBDHH@Z\r\n?_Fiopen@std@@YAPAU_iobuf@@PBGHH@Z\r\n?_Fiopen@std@@YAPAU_iobuf@@PB_WHH@Z\r\n?_Fput@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBDI@Z\r\n?_Fput@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBDI@Z\r\n?_Fput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBDI@Z\r\n?_Getcat@?$codecvt@DDU_Mbstatet@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$codecvt@GDU_Mbstatet@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$codecvt@_SDU_Mbstatet@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$codecvt@_UDU_Mbstatet@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$codecvt@_WDU_Mbstatet@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z\r\n?_Getcat@facet@locale@std@@SAIPAPBV123@PBV23@@Z\r\n?_Getcoll@_Locinfo@std@@QBE?AU_Collvec@@XZ\r\n?_Getctype@_Locinfo@std@@QBE?AU_Ctypevec@@XZ\r\n?_Getcvt@_Locinfo@std@@QBE?AU_Cvtvec@@XZ\r\n?_Getdateorder@_Locinfo@std@@QBEHXZ\r\n?_Getdays@_Locinfo@std@@QBEPBDXZ\r\n?_Getfalse@_Locinfo@std@@QBEPBDXZ\r\n?_Getffld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1AAVios_base@2@PAH@Z\r\n?_Getffld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1AAVios_base@2@PAH@Z\r\n?_Getffld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1AAVios_base@2@PAH@Z\r\n?_Getffldx@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1AAVios_base@2@PAH@Z\r\n?_Getffldx@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1AAVios_base@2@PAH@Z\r\n?_Getffldx@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1AAVios_base@2@PAH@Z\r\n?_Getfmt@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@PBD@Z\r\n?_Getfmt@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@PBD@Z\r\n?_Getfmt@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@PBD@Z\r\n?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ\r\n?_Getifld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1HABVlocale@2@@Z\r\n?_Getifld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1HABVlocale@2@@Z\r\n?_Getifld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1HABVlocale@2@@Z\r\n?_Getint@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@0HHAAHABV?$ctype@D@2@@Z\r\n?_Getint@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@0HHAAHABV?$ctype@G@2@@Z\r\n?_Getint@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@0HHAAHABV?$ctype@_W@2@@Z\r\n?_Getlconv@_Locinfo@std@@QBEPBUlconv@@XZ\r\n?_Getmonths@_Locinfo@std@@QBEPBDXZ\r\n?_Getname@_Locinfo@std@@QBEPBDXZ\r\n?_Getptr@_Timevec@std@@QBEPAXXZ\r\n?_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ\r\n?_Gettrue@_Locinfo@std@@QBEPBDXZ\r\n?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBE_JXZ\r\n?_Gnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBE_JXZ\r\n?_Gnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBE_JXZ\r\n?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ\r\n?_Gndec@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ\r\n?_Gndec@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ\r\n?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ\r\n?_Gninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ\r\n?_Gninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ\r\n?_Gnpreinc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ\r\n?_Gnpreinc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ\r\n?_Gnpreinc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ\r\n?_Id_cnt@id@locale@std@@0HA\r\n?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADPBDH@Z\r\n?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADPBDH@Z\r\n?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADPBDH@Z\r\n?_Incref@facet@locale@std@@UAEXXZ\r\n?_Index@ios_base@std@@0HA\r\n?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAPAD0PAH001@Z\r\n?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXXZ\r\n?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAPAG0PAH001@Z\r\n?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXXZ\r\n?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPAPA_W0PAH001@Z\r\n?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXXZ\r\n?_Init@?$codecvt@DDU_Mbstatet@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$codecvt@GDU_Mbstatet@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$codecvt@_SDU_Mbstatet@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$codecvt@_UDU_Mbstatet@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$codecvt@_WDU_Mbstatet@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$ctype@D@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$ctype@G@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$ctype@_W@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z\r\n?_Init@ios_base@std@@IAEXXZ\r\n?_Init@locale@std@@CAPAV_Locimp@12@_N@Z\r\n?_Init_cnt@Init@ios_base@std@@0HA\r\n?_Init_cnt@_UShinit@std@@0HA\r\n?_Init_cnt@_Winit@std@@0HA\r\n?_Init_cnt_func@Init@ios_base@std@@CAAAHXZ\r\n?_Init_ctor@Init@ios_base@std@@CAXPAV123@@Z\r\n?_Init_dtor@Init@ios_base@std@@CAXPAV123@@Z\r\n?_Init_locks_ctor@_Init_locks@std@@CAXPAV12@@Z\r\n?_Init_locks_dtor@_Init_locks@std@@CAXPAV12@@Z\r\n?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z\r\n?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z\r\n?_Ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_N_N@Z\r\n?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_N_N@Z\r\n?_Iput@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPADI@Z\r\n?_Iput@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPADI@Z\r\n?_Iput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPADI@Z\r\n?_IsCurrentOriginSTA@_ContextCallback@details@Concurrency@@CA_NXZ\r\n?_IsNonBlockingThread@_Task_impl_base@details@Concurrency@@SA_NXZ\r\n?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z\r\n?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z\r\n?_Locimp_dtor@_Locimp@locale@std@@CAXPAV123@@Z\r\n?_Locinfo_Addcats@_Locinfo@std@@SAAAV12@PAV12@HPBD@Z\r\n?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@HPBD@Z\r\n?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z\r\n?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z\r\n?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAEXXZ\r\n?_Lock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@UAEXXZ\r\n?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UAEXXZ\r\n?_Lockit_ctor@_Lockit@std@@CAXPAV12@@Z\r\n?_Lockit_ctor@_Lockit@std@@CAXPAV12@H@Z\r\n?_Lockit_ctor@_Lockit@std@@SAXH@Z\r\n?_Lockit_dtor@_Lockit@std@@CAXPAV12@@Z\r\n?_Lockit_dtor@_Lockit@std@@SAXH@Z\r\n?_LogCancelTask@_TaskEventLogger@details@Concurrency@@QAEXXZ\r\n?_LogScheduleTask@_TaskEventLogger@details@Concurrency@@QAEX_N@Z\r\n?_LogTaskCompleted@_TaskEventLogger@details@Concurrency@@QAEXXZ\r\n?_LogTaskExecutionCompleted@_TaskEventLogger@details@Concurrency@@QAEXXZ\r\n?_LogWorkItemCompleted@_TaskEventLogger@details@Concurrency@@QAEXXZ\r\n?_LogWorkItemStarted@_TaskEventLogger@details@Concurrency@@QAEXXZ\r\n?_MP_Add@std@@YAXQA_K_K@Z\r\n?_MP_Get@std@@YA_KQA_K@Z\r\n?_MP_Mul@std@@YAXQA_K_K1@Z\r\n?_MP_Rem@std@@YAXQA_K_K@Z\r\n?_Makeloc@_Locimp@locale@std@@CAPAV123@ABV_Locinfo@3@HPAV123@PBV23@@Z\r\n?_Makeushloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z\r\n?_Makewloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z\r\n?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z\r\n?_Mtx_delete@threads@stdext@@YAXPAX@Z\r\n?_Mtx_lock@threads@stdext@@YAXPAX@Z\r\n?_Mtx_new@threads@stdext@@YAXAAPAX@Z\r\n?_Mtx_unlock@threads@stdext@@YAXPAX@Z\r\n?_New_Locimp@_Locimp@locale@std@@CAPAV123@ABV123@@Z\r\n?_New_Locimp@_Locimp@locale@std@@CAPAV123@_N@Z\r\n?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ\r\n?_Osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ\r\n?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ\r\n?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBE_JXZ\r\n?_Pnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBE_JXZ\r\n?_Pnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBE_JXZ\r\n?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ\r\n?_Pninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ\r\n?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ\r\n?_Ptr_cerr@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?_Ptr_cin@std@@3PAV?$basic_istream@DU?$char_traits@D@std@@@1@A\r\n?_Ptr_clog@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?_Ptr_cout@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?_Ptr_wcerr@std@@3PAV?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?_Ptr_wcerr@std@@3PAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?_Ptr_wcin@std@@3PAV?$basic_istream@GU?$char_traits@G@std@@@1@A\r\n?_Ptr_wcin@std@@3PAV?$basic_istream@_WU?$char_traits@_W@std@@@1@A\r\n?_Ptr_wclog@std@@3PAV?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?_Ptr_wclog@std@@3PAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?_Ptr_wcout@std@@3PAV?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?_Ptr_wcout@std@@3PAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?_Put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@PBDI@Z\r\n?_Put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@PBGI@Z\r\n?_Put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@PB_WI@Z\r\n?_Raise_handler@std@@3P6AXABVexception@stdext@@@ZA\r\n?_Random_device@std@@YAIXZ\r\n?_Release_chore@details@Concurrency@@YAXPAU_Threadpool_chore@12@@Z\r\n?_Rep@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@DI@Z\r\n?_Rep@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@GI@Z\r\n?_Rep@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@_WI@Z\r\n?_ReportUnobservedException@details@Concurrency@@YAXXZ\r\n?_Reschedule_chore@details@Concurrency@@YAHPBU_Threadpool_chore@12@@Z\r\n?_Reset@_ContextCallback@details@Concurrency@@AAEXXZ\r\n?_Rethrow_future_exception@std@@YAXVexception_ptr@1@@Z\r\n?_Rng_abort@std@@YAXPBD@Z\r\n?_Schedule_chore@details@Concurrency@@YAHPAU_Threadpool_chore@12@@Z\r\n?_Setgloballocale@locale@std@@CAXPAX@Z\r\n?_Src@?1??_Getffld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@3@1AAVios_base@3@PAH@Z@4QBDB\r\n?_Src@?1??_Getffld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@3@1AAVios_base@3@PAH@Z@4QBDB\r\n?_Src@?1??_Getffld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@3@1AAVios_base@3@PAH@Z@4QBDB\r\n?_Src@?1??_Getffldx@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@3@1AAVios_base@3@PAH@Z@4QBDB\r\n?_Src@?1??_Getffldx@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@3@1AAVios_base@3@PAH@Z@4QBDB\r\n?_Src@?1??_Getffldx@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@3@1AAVios_base@3@PAH@Z@4QBDB\r\n?_Src@?1??_Getifld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@3@1HABVlocale@3@@Z@4QBDB\r\n?_Src@?1??_Getifld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@3@1HABVlocale@3@@Z@4QBDB\r\n?_Src@?1??_Getifld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@3@1HABVlocale@3@@Z@4QBDB\r\n?_Sync@ios_base@std@@0_NA\r\n?_Syserror_map@std@@YAPBDH@Z\r\n?_Throw_C_error@std@@YAXH@Z\r\n?_Throw_Cpp_error@std@@YAXH@Z\r\n?_Throw_future_error@std@@YAXABVerror_code@1@@Z\r\n?_Tidy@?$_Yarn@D@std@@AAEXXZ\r\n?_Tidy@?$_Yarn@G@std@@AAEXXZ\r\n?_Tidy@?$_Yarn@_W@std@@AAEXXZ\r\n?_Tidy@?$ctype@D@std@@IAEXXZ\r\n?_Tidy@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AAEXXZ\r\n?_Tidy@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AAEXXZ\r\n?_Tidy@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AAEXXZ\r\n?_Tidy@ios_base@std@@AAEXXZ\r\n?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAEXXZ\r\n?_Unlock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@UAEXXZ\r\n?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UAEXXZ\r\n?_W_Getdays@_Locinfo@std@@QBEPBGXZ\r\n?_W_Getmonths@_Locinfo@std@@QBEPBGXZ\r\n?_W_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ\r\n?_Winerror_map@std@@YAHH@Z\r\n?_Winerror_message@std@@YAKKPADK@Z\r\n?_XGetLastError@std@@YAXXZ\r\n?_XLgamma@std@@YAMM@Z\r\n?_XLgamma@std@@YANN@Z\r\n?_XLgamma@std@@YAOO@Z\r\n?_Xbad_alloc@std@@YAXXZ\r\n?_Xbad_function_call@std@@YAXXZ\r\n?_Xinvalid_argument@std@@YAXPBD@Z\r\n?_Xlength_error@std@@YAXPBD@Z\r\n?_Xout_of_range@std@@YAXPBD@Z\r\n?_Xoverflow_error@std@@YAXPBD@Z\r\n?_Xregex_error@std@@YAXW4error_type@regex_constants@1@@Z\r\n?_Xruntime_error@std@@YAXPBD@Z\r\n?__ExceptionPtrAssign@@YAXPAXPBX@Z\r\n?__ExceptionPtrCompare@@YA_NPBX0@Z\r\n?__ExceptionPtrCopy@@YAXPAXPBX@Z\r\n?__ExceptionPtrCopyException@@YAXPAXPBX1@Z\r\n?__ExceptionPtrCreate@@YAXPAX@Z\r\n?__ExceptionPtrCurrentException@@YAXPAX@Z\r\n?__ExceptionPtrDestroy@@YAXPAX@Z\r\n?__ExceptionPtrRethrow@@YAXPBX@Z\r\n?__ExceptionPtrSwap@@YAXPAX0@Z\r\n?__ExceptionPtrToBool@@YA_NPBX@Z\r\n?always_noconv@codecvt_base@std@@QBE_NXZ\r\n?bad@ios_base@std@@QBE_NXZ\r\n?c_str@?$_Yarn@D@std@@QBEPBDXZ\r\n?c_str@?$_Yarn@G@std@@QBEPBGXZ\r\n?c_str@?$_Yarn@_W@std@@QBEPB_WXZ\r\n?cerr@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A\r\n?classic@locale@std@@SAABV12@XZ\r\n?classic_table@?$ctype@D@std@@SAPBFXZ\r\n?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z\r\n?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z\r\n?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXH_N@Z\r\n?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXI@Z\r\n?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z\r\n?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z\r\n?clear@ios_base@std@@QAEXH@Z\r\n?clear@ios_base@std@@QAEXH_N@Z\r\n?clear@ios_base@std@@QAEXI@Z\r\n?clog@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEAAV12@ABV12@@Z\r\n?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEAAV12@ABV12@@Z\r\n?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEAAV12@ABV12@@Z\r\n?copyfmt@ios_base@std@@QAEAAV12@ABV12@@Z\r\n?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A\r\n?date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AW4dateorder@time_base@2@XZ\r\n?date_order@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AW4dateorder@time_base@2@XZ\r\n?date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AW4dateorder@time_base@2@XZ\r\n?do_always_noconv@?$codecvt@DDU_Mbstatet@@@std@@MBE_NXZ\r\n?do_always_noconv@?$codecvt@GDU_Mbstatet@@@std@@MBE_NXZ\r\n?do_always_noconv@?$codecvt@_SDU_Mbstatet@@@std@@MBE_NXZ\r\n?do_always_noconv@?$codecvt@_UDU_Mbstatet@@@std@@MBE_NXZ\r\n?do_always_noconv@?$codecvt@_WDU_Mbstatet@@@std@@MBE_NXZ\r\n?do_always_noconv@codecvt_base@std@@MBE_NXZ\r\n?do_date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AW4dateorder@time_base@2@XZ\r\n?do_date_order@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AW4dateorder@time_base@2@XZ\r\n?do_date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AW4dateorder@time_base@2@XZ\r\n?do_encoding@?$codecvt@GDU_Mbstatet@@@std@@MBEHXZ\r\n?do_encoding@?$codecvt@_SDU_Mbstatet@@@std@@MBEHXZ\r\n?do_encoding@?$codecvt@_UDU_Mbstatet@@@std@@MBEHXZ\r\n?do_encoding@?$codecvt@_WDU_Mbstatet@@@std@@MBEHXZ\r\n?do_encoding@codecvt_base@std@@MBEHXZ\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAG@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAI@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAK@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAM@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAN@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAO@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z\r\n?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAG@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAI@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAK@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAM@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAN@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAO@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z\r\n?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAG@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAI@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAK@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAM@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAN@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAO@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z\r\n?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z\r\n?do_get@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@DD@Z\r\n?do_get@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@DD@Z\r\n?do_get@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@DD@Z\r\n?do_get_date@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_date@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_date@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_monthname@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_monthname@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_monthname@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_time@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_time@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_time@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_weekday@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_weekday@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_weekday@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_year@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_year@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_get_year@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?do_in@?$codecvt@DDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1AAPBDPAD3AAPAD@Z\r\n?do_in@?$codecvt@GDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1AAPBDPAG3AAPAG@Z\r\n?do_in@?$codecvt@_SDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1AAPBDPA_S3AAPA_S@Z\r\n?do_in@?$codecvt@_UDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1AAPBDPA_U3AAPA_U@Z\r\n?do_in@?$codecvt@_WDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1AAPBDPA_W3AAPA_W@Z\r\n?do_is@?$ctype@G@std@@MBEPBGPBG0PAF@Z\r\n?do_is@?$ctype@G@std@@MBE_NFG@Z\r\n?do_is@?$ctype@_W@std@@MBEPB_WPB_W0PAF@Z\r\n?do_is@?$ctype@_W@std@@MBE_NF_W@Z\r\n?do_length@?$codecvt@DDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1I@Z\r\n?do_length@?$codecvt@GDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1I@Z\r\n?do_length@?$codecvt@_SDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1I@Z\r\n?do_length@?$codecvt@_UDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1I@Z\r\n?do_length@?$codecvt@_WDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1I@Z\r\n?do_max_length@?$codecvt@GDU_Mbstatet@@@std@@MBEHXZ\r\n?do_max_length@?$codecvt@_SDU_Mbstatet@@@std@@MBEHXZ\r\n?do_max_length@?$codecvt@_UDU_Mbstatet@@@std@@MBEHXZ\r\n?do_max_length@?$codecvt@_WDU_Mbstatet@@@std@@MBEHXZ\r\n?do_max_length@codecvt_base@std@@MBEHXZ\r\n?do_narrow@?$ctype@D@std@@MBEDDD@Z\r\n?do_narrow@?$ctype@D@std@@MBEPBDPBD0DPAD@Z\r\n?do_narrow@?$ctype@G@std@@MBEDGD@Z\r\n?do_narrow@?$ctype@G@std@@MBEPBGPBG0DPAD@Z\r\n?do_narrow@?$ctype@_W@std@@MBED_WD@Z\r\n?do_narrow@?$ctype@_W@std@@MBEPB_WPB_W0DPAD@Z\r\n?do_out@?$codecvt@DDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBD1AAPBDPAD3AAPAD@Z\r\n?do_out@?$codecvt@GDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PBG1AAPBGPAD3AAPAD@Z\r\n?do_out@?$codecvt@_SDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PB_S1AAPB_SPAD3AAPAD@Z\r\n?do_out@?$codecvt@_UDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PB_U1AAPB_UPAD3AAPAD@Z\r\n?do_out@?$codecvt@_WDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PB_W1AAPB_WPAD3AAPAD@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DJ@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DK@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DN@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DO@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBX@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_J@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_K@Z\r\n?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_N@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GJ@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GK@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GN@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GO@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBX@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_J@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_K@Z\r\n?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_N@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WJ@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WK@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WN@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WO@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBX@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_J@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_K@Z\r\n?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_N@Z\r\n?do_put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBUtm@@DD@Z\r\n?do_put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBUtm@@DD@Z\r\n?do_put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBUtm@@DD@Z\r\n?do_scan_is@?$ctype@G@std@@MBEPBGFPBG0@Z\r\n?do_scan_is@?$ctype@_W@std@@MBEPB_WFPB_W0@Z\r\n?do_scan_not@?$ctype@G@std@@MBEPBGFPBG0@Z\r\n?do_scan_not@?$ctype@_W@std@@MBEPB_WFPB_W0@Z\r\n?do_tolower@?$ctype@D@std@@MBEDD@Z\r\n?do_tolower@?$ctype@D@std@@MBEPBDPADPBD@Z\r\n?do_tolower@?$ctype@G@std@@MBEGG@Z\r\n?do_tolower@?$ctype@G@std@@MBEPBGPAGPBG@Z\r\n?do_tolower@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z\r\n?do_tolower@?$ctype@_W@std@@MBE_W_W@Z\r\n?do_toupper@?$ctype@D@std@@MBEDD@Z\r\n?do_toupper@?$ctype@D@std@@MBEPBDPADPBD@Z\r\n?do_toupper@?$ctype@G@std@@MBEGG@Z\r\n?do_toupper@?$ctype@G@std@@MBEPBGPAGPBG@Z\r\n?do_toupper@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z\r\n?do_toupper@?$ctype@_W@std@@MBE_W_W@Z\r\n?do_unshift@?$codecvt@DDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?do_unshift@?$codecvt@GDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?do_unshift@?$codecvt@_SDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?do_unshift@?$codecvt@_UDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?do_unshift@?$codecvt@_WDU_Mbstatet@@@std@@MBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?do_widen@?$ctype@D@std@@MBEDD@Z\r\n?do_widen@?$ctype@D@std@@MBEPBDPBD0PAD@Z\r\n?do_widen@?$ctype@G@std@@MBEGD@Z\r\n?do_widen@?$ctype@G@std@@MBEPBDPBD0PAG@Z\r\n?do_widen@?$ctype@_W@std@@MBEPBDPBD0PA_W@Z\r\n?do_widen@?$ctype@_W@std@@MBE_WD@Z\r\n?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ\r\n?eback@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ\r\n?eback@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ\r\n?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ\r\n?egptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ\r\n?egptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ\r\n?empty@?$_Yarn@D@std@@QBE_NXZ\r\n?empty@?$_Yarn@G@std@@QBE_NXZ\r\n?empty@?$_Yarn@_W@std@@QBE_NXZ\r\n?empty@locale@std@@SA?AV12@XZ\r\n?encoding@codecvt_base@std@@QBEHXZ\r\n?eof@ios_base@std@@QBE_NXZ\r\n?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ\r\n?epptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ\r\n?epptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ\r\n?exceptions@ios_base@std@@QAEXH@Z\r\n?exceptions@ios_base@std@@QAEXI@Z\r\n?exceptions@ios_base@std@@QBEHXZ\r\n?fail@ios_base@std@@QBE_NXZ\r\n?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEDD@Z\r\n?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ\r\n?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEGG@Z\r\n?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEGXZ\r\n?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE_W_W@Z\r\n?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WXZ\r\n?flags@ios_base@std@@QAEHH@Z\r\n?flags@ios_base@std@@QBEHXZ\r\n?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ\r\n?flush@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@XZ\r\n?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ\r\n?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z\r\n?gbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXH@Z\r\n?gbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXH@Z\r\n?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QBE_JXZ\r\n?gcount@?$basic_istream@GU?$char_traits@G@std@@@std@@QBE_JXZ\r\n?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QBE_JXZ\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAD@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PAD_J@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PAD_JD@Z\r\n?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAG@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAV?$basic_streambuf@GU?$char_traits@G@std@@@2@G@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAG_J@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAG_JG@Z\r\n?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEGXZ\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AA_W@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_W_J@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_W_J_W@Z\r\n?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEGXZ\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAG@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAI@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAK@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAM@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAN@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAO@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z\r\n?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAG@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAI@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAK@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAM@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAN@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAO@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z\r\n?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAG@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAI@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAK@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAM@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAN@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAO@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z\r\n?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z\r\n?get@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@DD@Z\r\n?get@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@PBD4@Z\r\n?get@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@DD@Z\r\n?get@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@PBG4@Z\r\n?get@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@DD@Z\r\n?get@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@PB_W4@Z\r\n?get_date@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_date@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_date@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_monthname@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_monthname@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_monthname@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_new_handler@std@@YAP6AXXZXZ\r\n?get_time@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_time@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_time@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_weekday@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_weekday@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_weekday@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_year@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_year@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?get_year@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@@Z\r\n?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PAD_J@Z\r\n?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PAD_JD@Z\r\n?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAG_J@Z\r\n?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAG_JG@Z\r\n?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_W_J@Z\r\n?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_W_J_W@Z\r\n?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QBE?AVlocale@2@XZ\r\n?getloc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QBE?AVlocale@2@XZ\r\n?getloc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QBE?AVlocale@2@XZ\r\n?getloc@ios_base@std@@QBE?AVlocale@2@XZ\r\n?global@locale@std@@SA?AV12@ABV12@@Z\r\n?good@ios_base@std@@QBE_NXZ\r\n?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ\r\n?gptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ\r\n?gptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ\r\n?id@?$codecvt@DDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@GDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@_WDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$collate@D@std@@2V0locale@2@A\r\n?id@?$collate@G@std@@2V0locale@2@A\r\n?id@?$collate@_W@std@@2V0locale@2@A\r\n?id@?$ctype@D@std@@2V0locale@2@A\r\n?id@?$ctype@G@std@@2V0locale@2@A\r\n?id@?$ctype@_W@std@@2V0locale@2@A\r\n?id@?$messages@D@std@@2V0locale@2@A\r\n?id@?$messages@G@std@@2V0locale@2@A\r\n?id@?$messages@_W@std@@2V0locale@2@A\r\n?id@?$money_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$money_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$moneypunct@D$00@std@@2V0locale@2@A\r\n?id@?$moneypunct@D$0A@@std@@2V0locale@2@A\r\n?id@?$moneypunct@G$00@std@@2V0locale@2@A\r\n?id@?$moneypunct@G$0A@@std@@2V0locale@2@A\r\n?id@?$moneypunct@_W$00@std@@2V0locale@2@A\r\n?id@?$moneypunct@_W$0A@@std@@2V0locale@2@A\r\n?id@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$numpunct@D@std@@2V0locale@2@A\r\n?id@?$numpunct@G@std@@2V0locale@2@A\r\n?id@?$numpunct@_W@std@@2V0locale@2@A\r\n?id@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A\r\n?id@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A\r\n?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@_JH@Z\r\n?ignore@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@_JG@Z\r\n?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_JG@Z\r\n?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z\r\n?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QAE?AVlocale@2@ABV32@@Z\r\n?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE?AVlocale@2@ABV32@@Z\r\n?imbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEXABVlocale@2@@Z\r\n?imbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEXABVlocale@2@@Z\r\n?imbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEXABVlocale@2@@Z\r\n?imbue@ios_base@std@@QAE?AVlocale@2@ABV32@@Z\r\n?in@?$codecvt@DDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1AAPBDPAD3AAPAD@Z\r\n?in@?$codecvt@GDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1AAPBDPAG3AAPAG@Z\r\n?in@?$codecvt@_SDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1AAPBDPA_S3AAPA_S@Z\r\n?in@?$codecvt@_UDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1AAPBDPA_U3AAPA_U@Z\r\n?in@?$codecvt@_WDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1AAPBDPA_W3AAPA_W@Z\r\n?in_avail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE_JXZ\r\n?in_avail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE_JXZ\r\n?in_avail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE_JXZ\r\n?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z\r\n?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IAEXPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z\r\n?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAEXPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z\r\n?intl@?$moneypunct@D$00@std@@2_NB\r\n?intl@?$moneypunct@D$0A@@std@@2_NB\r\n?intl@?$moneypunct@G$00@std@@2_NB\r\n?intl@?$moneypunct@G$0A@@std@@2_NB\r\n?intl@?$moneypunct@_W$00@std@@2_NB\r\n?intl@?$moneypunct@_W$0A@@std@@2_NB\r\n?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z\r\n?ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_N_N@Z\r\n?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_N_N@Z\r\n?is@?$ctype@D@std@@QBEPBDPBD0PAF@Z\r\n?is@?$ctype@D@std@@QBE_NFD@Z\r\n?is@?$ctype@G@std@@QBEPBGPBG0PAF@Z\r\n?is@?$ctype@G@std@@QBE_NFG@Z\r\n?is@?$ctype@_W@std@@QBEPB_WPB_W0PAF@Z\r\n?is@?$ctype@_W@std@@QBE_NF_W@Z\r\n?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ\r\n?isfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXXZ\r\n?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXXZ\r\n?iword@ios_base@std@@QAEAAJH@Z\r\n?length@?$codecvt@DDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1I@Z\r\n?length@?$codecvt@GDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1I@Z\r\n?length@?$codecvt@_SDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1I@Z\r\n?length@?$codecvt@_UDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1I@Z\r\n?length@?$codecvt@_WDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1I@Z\r\n?max_length@codecvt_base@std@@QBEHXZ\r\n?move@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEX$$QAV12@@Z\r\n?move@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXAAV12@@Z\r\n?move@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEX$$QAV12@@Z\r\n?move@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXAAV12@@Z\r\n?move@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEX$$QAV12@@Z\r\n?move@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXAAV12@@Z\r\n?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDDD@Z\r\n?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEDGD@Z\r\n?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBED_WD@Z\r\n?narrow@?$ctype@D@std@@QBEDDD@Z\r\n?narrow@?$ctype@D@std@@QBEPBDPBD0DPAD@Z\r\n?narrow@?$ctype@G@std@@QBEDGD@Z\r\n?narrow@?$ctype@G@std@@QBEPBGPBG0DPAD@Z\r\n?narrow@?$ctype@_W@std@@QBED_WD@Z\r\n?narrow@?$ctype@_W@std@@QBEPB_WPB_W0DPAD@Z\r\n?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE_NXZ\r\n?opfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE_NXZ\r\n?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE_NXZ\r\n?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ\r\n?osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ\r\n?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ\r\n?out@?$codecvt@DDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1AAPBDPAD3AAPAD@Z\r\n?out@?$codecvt@GDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBG1AAPBGPAD3AAPAD@Z\r\n?out@?$codecvt@_SDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PB_S1AAPB_SPAD3AAPAD@Z\r\n?out@?$codecvt@_UDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PB_U1AAPB_UPAD3AAPAD@Z\r\n?out@?$codecvt@_WDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PB_W1AAPB_WPAD3AAPAD@Z\r\n?overflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHH@Z\r\n?overflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGG@Z\r\n?overflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z\r\n?pbackfail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHH@Z\r\n?pbackfail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGG@Z\r\n?pbackfail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z\r\n?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ\r\n?pbase@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ\r\n?pbase@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ\r\n?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z\r\n?pbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXH@Z\r\n?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXH@Z\r\n?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ\r\n?peek@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEGXZ\r\n?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEGXZ\r\n?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ\r\n?pptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ\r\n?pptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ\r\n?precision@ios_base@std@@QAE_J_J@Z\r\n?precision@ios_base@std@@QBE_JXZ\r\n?pubimbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z\r\n?pubimbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AVlocale@2@ABV32@@Z\r\n?pubimbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AVlocale@2@ABV32@@Z\r\n?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@_JII@Z\r\n?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@_JII@Z\r\n?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@_JII@Z\r\n?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@V32@I@Z\r\n?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@V32@I@Z\r\n?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@V32@I@Z\r\n?pubsetbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PAD_J@Z\r\n?pubsetbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PAG_J@Z\r\n?pubsetbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PA_W_J@Z\r\n?pubsync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ\r\n?pubsync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHXZ\r\n?pubsync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHXZ\r\n?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z\r\n?put@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@G@Z\r\n?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_W@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DJ@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DK@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DN@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DO@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBX@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_J@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_K@Z\r\n?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_N@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GJ@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GK@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GN@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GO@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBX@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_J@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_K@Z\r\n?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_N@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WJ@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WK@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WN@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WO@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBX@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_J@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_K@Z\r\n?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_N@Z\r\n?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBUtm@@DD@Z\r\n?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBUtm@@PBD3@Z\r\n?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBUtm@@DD@Z\r\n?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBUtm@@PBG3@Z\r\n?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBUtm@@DD@Z\r\n?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBUtm@@PB_W4@Z\r\n?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z\r\n?putback@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@G@Z\r\n?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_W@Z\r\n?pword@ios_base@std@@QAEAAPAXH@Z\r\n?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PAV32@@Z\r\n?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ\r\n?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PAV32@@Z\r\n?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ\r\n?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PAV32@@Z\r\n?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ\r\n?rdstate@ios_base@std@@QBEHXZ\r\n?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PAD_J@Z\r\n?read@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAG_J@Z\r\n?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_W_J@Z\r\n?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_JPAD_J@Z\r\n?readsome@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_JPAG_J@Z\r\n?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_JPA_W_J@Z\r\n?register_callback@ios_base@std@@QAEXP6AXW4event@12@AAV12@H@ZH@Z\r\n?resetiosflags@std@@YA?AU?$_Smanip@H@1@H@Z\r\n?sbumpc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ\r\n?sbumpc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ\r\n?sbumpc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ\r\n?scan_is@?$ctype@D@std@@QBEPBDFPBD0@Z\r\n?scan_is@?$ctype@G@std@@QBEPBGFPBG0@Z\r\n?scan_is@?$ctype@_W@std@@QBEPB_WFPB_W0@Z\r\n?scan_not@?$ctype@D@std@@QBEPBDFPBD0@Z\r\n?scan_not@?$ctype@G@std@@QBEPBGFPBG0@Z\r\n?scan_not@?$ctype@_W@std@@QBEPB_WFPB_W0@Z\r\n?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@_JH@Z\r\n?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@_JH@Z\r\n?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_JH@Z\r\n?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?seekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?seekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@U_Mbstatet@@@2@_JHH@Z\r\n?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@_JH@Z\r\n?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@_JH@Z\r\n?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@U_Mbstatet@@@2@@Z\r\n?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_JH@Z\r\n?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?seekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?seekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@U_Mbstatet@@@2@V32@H@Z\r\n?set_new_handler@std@@YAP6AXXZP6AXXZ@Z\r\n?set_rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z\r\n?set_rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z\r\n?set_rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z\r\n?setbase@std@@YA?AU?$_Smanip@H@1@H@Z\r\n?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEPAV12@PAD_J@Z\r\n?setbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEPAV12@PAG_J@Z\r\n?setbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEPAV12@PA_W_J@Z\r\n?setf@ios_base@std@@QAEHH@Z\r\n?setf@ios_base@std@@QAEHHH@Z\r\n?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z\r\n?setg@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG00@Z\r\n?setg@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W00@Z\r\n?setiosflags@std@@YA?AU?$_Smanip@H@1@H@Z\r\n?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z\r\n?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD0@Z\r\n?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG00@Z\r\n?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG0@Z\r\n?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W00@Z\r\n?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W0@Z\r\n?setprecision@std@@YA?AU?$_Smanip@_J@1@_J@Z\r\n?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z\r\n?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z\r\n?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXH_N@Z\r\n?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXI@Z\r\n?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z\r\n?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z\r\n?setstate@ios_base@std@@QAEXH@Z\r\n?setstate@ios_base@std@@QAEXH_N@Z\r\n?setstate@ios_base@std@@QAEXI@Z\r\n?setw@std@@YA?AU?$_Smanip@_J@1@_J@Z\r\n?sgetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ\r\n?sgetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ\r\n?sgetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ\r\n?sgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE_JPAD_J@Z\r\n?sgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE_JPAG_J@Z\r\n?sgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE_JPA_W_J@Z\r\n?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE_JXZ\r\n?showmanyc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE_JXZ\r\n?showmanyc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE_JXZ\r\n?snextc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ\r\n?snextc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ\r\n?snextc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ\r\n?sputbackc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z\r\n?sputbackc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGG@Z\r\n?sputbackc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEG_W@Z\r\n?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z\r\n?sputc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGG@Z\r\n?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEG_W@Z\r\n?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE_JPBD_J@Z\r\n?sputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE_JPBG_J@Z\r\n?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE_JPB_W_J@Z\r\n?stossc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ\r\n?stossc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ\r\n?stossc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ\r\n?sungetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ\r\n?sungetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ\r\n?sungetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ\r\n?swap@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXAAV12@@Z\r\n?swap@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXAAV12@@Z\r\n?swap@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXAAV12@@Z\r\n?swap@?$basic_iostream@DU?$char_traits@D@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_iostream@GU?$char_traits@G@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_ostream@DU?$char_traits@D@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_ostream@GU?$char_traits@G@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXAAV12@@Z\r\n?swap@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXAAV12@@Z\r\n?swap@ios_base@std@@QAEXAAV12@@Z\r\n?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ\r\n?sync@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHXZ\r\n?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHXZ\r\n?sync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ\r\n?sync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHXZ\r\n?sync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHXZ\r\n?sync_with_stdio@ios_base@std@@SA_N_N@Z\r\n?table@?$ctype@D@std@@QBEPBFXZ\r\n?table_size@?$ctype@D@std@@2IB\r\n?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@XZ\r\n?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@PAV32@@Z\r\n?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ\r\n?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEPAV?$basic_ostream@GU?$char_traits@G@std@@@2@PAV32@@Z\r\n?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ\r\n?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PAV32@@Z\r\n?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ\r\n?tolower@?$ctype@D@std@@QBEDD@Z\r\n?tolower@?$ctype@D@std@@QBEPBDPADPBD@Z\r\n?tolower@?$ctype@G@std@@QBEGG@Z\r\n?tolower@?$ctype@G@std@@QBEPBGPAGPBG@Z\r\n?tolower@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z\r\n?tolower@?$ctype@_W@std@@QBE_W_W@Z\r\n?toupper@?$ctype@D@std@@QBEDD@Z\r\n?toupper@?$ctype@D@std@@QBEPBDPADPBD@Z\r\n?toupper@?$ctype@G@std@@QBEGG@Z\r\n?toupper@?$ctype@G@std@@QBEPBGPAGPBG@Z\r\n?toupper@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z\r\n?toupper@?$ctype@_W@std@@QBE_W_W@Z\r\n?uflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ\r\n?uflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGXZ\r\n?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ\r\n?uncaught_exception@std@@YA_NXZ\r\n?uncaught_exceptions@std@@YAHXZ\r\n?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ\r\n?underflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGXZ\r\n?underflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ\r\n?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ\r\n?unget@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@XZ\r\n?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ\r\n?unsetf@ios_base@std@@QAEXH@Z\r\n?unshift@?$codecvt@DDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?unshift@?$codecvt@GDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?unshift@?$codecvt@_SDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?unshift@?$codecvt@_UDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?unshift@?$codecvt@_WDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PAD1AAPAD@Z\r\n?wcerr@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?wcerr@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?wcin@std@@3V?$basic_istream@GU?$char_traits@G@std@@@1@A\r\n?wcin@std@@3V?$basic_istream@_WU?$char_traits@_W@std@@@1@A\r\n?wclog@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?wclog@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?wcout@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A\r\n?wcout@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A\r\n?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDD@Z\r\n?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEGD@Z\r\n?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WD@Z\r\n?widen@?$ctype@D@std@@QBEDD@Z\r\n?widen@?$ctype@D@std@@QBEPBDPBD0PAD@Z\r\n?widen@?$ctype@G@std@@QBEGD@Z\r\n?widen@?$ctype@G@std@@QBEPBDPBD0PAG@Z\r\n?widen@?$ctype@_W@std@@QBEPBDPBD0PA_W@Z\r\n?widen@?$ctype@_W@std@@QBE_WD@Z\r\n?width@ios_base@std@@QAE_J_J@Z\r\n?width@ios_base@std@@QBE_JXZ\r\n?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@PBD_J@Z\r\n?write@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@PBG_J@Z\r\n?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PB_W_J@Z\r\n?xalloc@ios_base@std@@SAHXZ\r\n?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE_JPAD_J@Z\r\n?xsgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE_JPAG_J@Z\r\n?xsgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE_JPA_W_J@Z\r\n?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE_JPBD_J@Z\r\n?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE_JPBG_J@Z\r\n?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE_JPB_W_J@Z\r\n_Chmod\r\n_Close_dir\r\n_Cnd_broadcast\r\n_Cnd_destroy\r\n_Cnd_destroy_in_situ\r\n_Cnd_do_broadcast_at_thread_exit\r\n_Cnd_init\r\n_Cnd_init_in_situ\r\n_Cnd_register_at_thread_exit\r\n_Cnd_signal\r\n_Cnd_timedwait\r\n_Cnd_unregister_at_thread_exit\r\n_Cnd_wait\r\n_Copy_file\r\n_Cosh\r\n_Current_get\r\n_Current_set\r\n_Denorm\r\n_Dtest\r\n_Equivalent\r\n_Exp\r\n_FCosh\r\n_FDenorm\r\n_FDtest\r\n_FExp\r\n_FInf\r\n_FNan\r\n_FSinh\r\n_FSnan\r\n_File_size\r\n_Getcoll\r\n_Getctype\r\n_Getcvt\r\n_Getdateorder\r\n_Getwctype\r\n_Getwctypes\r\n_Hard_links\r\n_Hugeval\r\n_Inf\r\n_LCosh\r\n_LDenorm\r\n_LDtest\r\n_LExp\r\n_LInf\r\n_LNan\r\n_LSinh\r\n_LSnan\r\n_Last_write_time\r\n_Link\r\n_Lock_shared_ptr_spin_lock\r\n_Lstat\r\n_Make_dir\r\n_Mbrtowc\r\n_Mtx_clear_owner\r\n_Mtx_current_owns\r\n_Mtx_destroy\r\n_Mtx_destroy_in_situ\r\n_Mtx_getconcrtcs\r\n_Mtx_init\r\n_Mtx_init_in_situ\r\n_Mtx_lock\r\n_Mtx_reset_owner\r\n_Mtx_timedlock\r\n_Mtx_trylock\r\n_Mtx_unlock\r\n_Mtxdst\r\n_Mtxinit\r\n_Mtxlock\r\n_Mtxunlock\r\n_Nan\r\n_Open_dir\r\n_Query_perf_counter\r\n_Query_perf_frequency\r\n_Read_dir\r\n_Remove_dir\r\n_Rename\r\n_Resize\r\n_Set_last_write_time\r\n_Sinh\r\n_Snan\r\n_Stat\r\n_Statvfs\r\n_Stod\r\n_Stodx\r\n_Stof\r\n_Stofx\r\n_Stold\r\n_Stoldx\r\n_Stoll\r\n_Stollx\r\n_Stolx\r\n_Stoul\r\n_Stoull\r\n_Stoullx\r\n_Stoulx\r\n_Strcoll\r\n_Strxfrm\r\n_Symlink\r\n_Symlink_get\r\n_Temp_get\r\n_Thrd_abort\r\n_Thrd_create\r\n_Thrd_current\r\n_Thrd_detach\r\n_Thrd_equal\r\n_Thrd_exit\r\n_Thrd_hardware_concurrency\r\n_Thrd_id\r\n_Thrd_join\r\n_Thrd_sleep\r\n_Thrd_start\r\n_Thrd_yield\r\n_To_byte\r\n_To_wide\r\n_Tolower\r\n_Toupper\r\n_Towlower\r\n_Towupper\r\n_Unlink\r\n_Unlock_shared_ptr_spin_lock\r\n_WStod\r\n_WStodx\r\n_WStof\r\n_WStofx\r\n_WStold\r\n_WStoldx\r\n_Wcrtomb\r\n_Wcscoll\r\n_Wcsxfrm\r\n_Xtime_diff_to_millis\r\n_Xtime_diff_to_millis2\r\n_Xtime_get_ticks\r\n__Wcrtomb_lk\r\n__crtCompareStringA\r\n__crtCompareStringW\r\n__crtIsPackagedApp\r\n__crtLCMapStringA\r\n__crtLCMapStringW\r\n__set_stl_sync_api_mode\r\nxtime_get\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/libcp.settings.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"Dogfood\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n    <PropertyGroup Label=\"Configuration\">\r\n        <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    </PropertyGroup>\r\n\r\n    <PropertyGroup>\r\n        <FinalBinary>p</FinalBinary>\r\n        <TargetAppFamily Condition=\"'$(MsvcpFlavor)' == 'app'\">true</TargetAppFamily>\r\n        <TargetCoreSystem Condition=\"'$(MsvcpFlavor)' == 'onecore'\">true</TargetCoreSystem>\r\n        <Arm64CombinedPdb>true</Arm64CombinedPdb>\r\n    </PropertyGroup>\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\crt_build.settings.targets\"/>\r\n\r\n    <PropertyGroup>\r\n        <OutputName Condition=\"'$(CrtBuildModel)' == 'mt'\">libcpmt</OutputName>\r\n        <OutputName Condition=\"'$(CrtBuildModel)' == 'mt1'\">libcpmt1</OutputName>\r\n        <OutputName Condition=\"'$(CrtBuildModel)' == 'xmt'\">libcpmtd</OutputName>\r\n        <OutputName Condition=\"'$(CrtBuildModel)' == 'xmt0'\">libcpmtd0</OutputName>\r\n        <OutputName Condition=\"'$(CrtBuildModel)' == 'xmt1'\">libcpmtd1</OutputName>\r\n    </PropertyGroup>\r\n\r\n    <PropertyGroup>\r\n        <ClProgramDataBaseFileName>$(OutputLibPdbPath)$(OutputName)$(PdbVerName).pdb</ClProgramDataBaseFileName>\r\n        <ClDefines>$(ClDefines);_ANNOTATE_STL</ClDefines>\r\n    </PropertyGroup>\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)\\stl.files.settings.targets\"/>\r\n\r\n    <Import Project=\"$(VCToolsRootPath)\\crt\\crt_build.targets\"/>\r\n    <Target Name=\"GetBaseAddress\"/>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/md/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"msvcp_base_md_app.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_base_md_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_base_md_onecore.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_base_md_netfx.vcxproj\" Condition=\"'$(BuildArchitecture)' != 'chpe'\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/md/msvcp_base_md_app.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{26CFD97A-BD12-4347-ACEA-3B13904E59DA}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>app</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/md/msvcp_base_md_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{00EE32E2-A705-4D07-A967-60092E13F497}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/md/msvcp_base_md_netfx.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{98CE2EB2-F428-4C28-9186-8D614658A1BE}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>netfx</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/md/msvcp_base_md_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{3318F9FE-FD4A-4D16-82F6-7DBC8007D1B6}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/msvcp.settings.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"Dogfood\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n    <PropertyGroup Label=\"Configuration\">\r\n        <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n        <GenerateImportLib>true</GenerateImportLib>\r\n    </PropertyGroup>\r\n\r\n    <PropertyGroup>\r\n        <FinalBinary>p</FinalBinary>\r\n\r\n        <DependsOnVCStartupLib>$(MsvcpFlavor)</DependsOnVCStartupLib>\r\n        <DependsOnVCRuntimeLib>$(MsvcpFlavor)</DependsOnVCRuntimeLib>\r\n\r\n        <TargetAppFamily Condition=\"'$(MsvcpFlavor)' == 'app'\">true</TargetAppFamily>\r\n        <TargetCoreSystem Condition=\"'$(MsvcpFlavor)' == 'onecore'\">true</TargetCoreSystem>\r\n        <TargetNetFx Condition=\"'$(MsvcpFlavor)' == 'netfx'\">true</TargetNetFx>\r\n    </PropertyGroup>\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\crt_build.settings.targets\"/>\r\n\r\n    <PropertyGroup>\r\n        <ClrLibSuffix Condition=\"'$(MsvcpFlavor)' == 'netfx'\">_clr</ClrLibSuffix>\r\n\r\n        <MsvcpFlavorSuffix Condition=\"'$(MsvcpFlavor)' == 'app'\">_app</MsvcpFlavorSuffix>\r\n        <MsvcpFlavorSuffix Condition=\"'$(MsvcpFlavor)' == 'netfx'\">_clr$(NetFxVerX)</MsvcpFlavorSuffix>\r\n\r\n        <OutputName>msvcp$(VCToolsProdVerSuffix)$(BuildSuffix)$(MsvcpFlavorSuffix)</OutputName>\r\n        <LibOutputFileName>msvcprt_base$(BuildSuffix)$(ClrLibSuffix)</LibOutputFileName>\r\n        <LibOutputFile>$(LibOutputFileName).lib</LibOutputFile>\r\n\r\n        <ClDefines Condition=\"'$(MsvcpFlavor)' == 'app'\">$(ClDefines);_CRT_APP</ClDefines>\r\n\r\n        <UseMsvcrt>false</UseMsvcrt>\r\n        <RCIntermediateOutputDirectory>$(IntermediateOutputDirectory)</RCIntermediateOutputDirectory>\r\n        <IntermediateImportLibOutput>$(CrtBuildDir)\\msvcprt_base$(BuildSuffix).$(MsvcpFlavor).import_only.lib</IntermediateImportLibOutput>\r\n        <DllDefName>$(LibOutputFileName).$(MsvcpFlavor)</DllDefName>\r\n        <DllDef>$(IntermediateOutputDirectory)\\$(DllDefName).def</DllDef>\r\n\r\n        <LinkGenerateDebugInformation>true</LinkGenerateDebugInformation>\r\n        <LinkProgramDataBaseFileName>$(OutputPath)\\$(OutputName)$(_PDB_VER_NAME_)$(DllPdbFlavorSuffix)</LinkProgramDataBaseFileName>\r\n        <LinkProgramDataBaseFileName Condition=\"'$(BuildArchitecture)' =='arm64ec' and '$(Platform)' != '$(BuildArchitecture)'\">$(OutputPath)\\$(OutputName).arm64$(DllPdbFlavorSuffix)</LinkProgramDataBaseFileName>\r\n\r\n        <LinkAdditionalOptions>-debugtype:cv,fixup $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions Condition=\"$(DebugBuild) != 'true'\">-opt:ref,icf=3 $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions Condition=\"$(DebugBuild) == 'true'\">-opt:ref,noicf $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions>-nodefaultlib:libcpmt$(BuildSuffix).lib $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions>-nodefaultlib:$(LibOutputFile) $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n\r\n        <LinkGenerateMapFile>true</LinkGenerateMapFile>\r\n        <LinkRelease>true</LinkRelease>\r\n    </PropertyGroup>\r\n\r\n    <ItemGroup>\r\n        <CppPreprocess Include=\"$(CrtRoot)\\crtw32\\msvcprt.src\">\r\n            <Defines>LIBRARYNAME=$(OutputName.ToUpper());$(DllCppDefines)</Defines>\r\n        </CppPreprocess>\r\n        <DefFromI Include=\"$(IntermediateOutputDirectory)\\msvcprt.i\">\r\n            <DestFolder1>$(IntermediateOutputDirectory)</DestFolder1>\r\n            <DestFolder2>$(IntermediateOutputDirectory)</DestFolder2>\r\n            <DestFile>$(DllDefName)</DestFile>\r\n        </DefFromI>\r\n        <ResourceCompile Include=\"$(CrtRoot)\\crtw32\\msvcprt.rc\"/>\r\n    </ItemGroup>\r\n\r\n    <ItemGroup>\r\n        <TargetLib Include=\"$(CrtLibPath)\\msvcrt$(BuildSuffix)$(ClrLibSuffix).lib\"/>\r\n        <TargetLib Include=\"$(CrtLibPath)\\vcruntime$(BuildSuffix)$(ClrLibSuffix).lib\"/>\r\n        <TargetLib Include=\"$(UniversalCRTLib)\"/>\r\n        <TargetLib Condition=\"'$(BuildArchitecture)' == 'arm64' or '$(BuildArchitecture)' == 'arm64ec'\" Include=\"$(SdkLibPath)\\softintrin.lib\"/>\r\n    </ItemGroup>\r\n\r\n    <!-- Copy the output dll and pdb to various destinations -->\r\n    <ItemGroup>\r\n        <CopyFilesForCrossTools Condition=\"'$(MsvcpFlavor)' == 'kernel32'\" Include=\"\r\n           $(LinkOutputFile);\r\n           $(LinkProgramDataBaseFileName);\r\n        \"/>\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)\\stl.files.settings.targets\"/>\r\n\r\n    <Import Project=\"$(VCToolsRootPath)\\crt\\crt_build.targets\"/>\r\n    <Target Name=\"GetBaseAddress\"/>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/mt/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"libcpmt_mt_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"libcpmt_mt_onecore.vcxproj\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/mt/libcpmt_mt_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{B56C39F9-89BF-486F-9C5E-B88FD82E2AA7}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>mt</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(libcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/mt/libcpmt_mt_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{5F515BBF-E680-4553-B38E-0C125D2A6455}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>mt</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(libcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/mt1/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"libcpmt_mt1_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"libcpmt_mt1_onecore.vcxproj\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/mt1/libcpmt_mt1_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{027B5024-5996-4645-BC46-8FEF2E2A4E71}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>mt1</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(libcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/mt1/libcpmt_mt1_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{0824A200-D996-41C0-87D8-62CF1D7483C6}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>mt1</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(libcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/stl.files.settings.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"Dogfood\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <ItemGroup>\r\n        <!-- Objs that exist only in libcpmt[d][01].lib. -->\r\n        <ClCompile Include=\"\r\n            $(CrtRoot)\\github\\stl\\src\\atomic_wait.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\memory_resource.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\parallel_algorithms.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\special_math.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\syncstream.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\tzdb.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\ulocale.cpp;\r\n            \">\r\n            <LinkCompiled>false</LinkCompiled>\r\n            <LibCompiled>true</LibCompiled>\r\n            <ImpLibCompiled>false</ImpLibCompiled>\r\n        </ClCompile>\r\n\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\excptptr.cpp;\">\r\n          <ExceptionHandling>async</ExceptionHandling>\r\n        </ClCompile>\r\n\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\StlCompareStringA.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\StlCompareStringW.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\StlLCMapStringA.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\StlLCMapStringW.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\winapinls.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\_tolower.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\_toupper.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\atomic.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\cerr.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\cin.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\clog.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\cout.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\filesys.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\fiopen.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\future.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\iomanip.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\ios.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\iosptrs.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\iostream.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\locale.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\locale0.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\multprec.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\raisehan.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\stdhndlr.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\stdthrow.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\syserror.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\cond.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\cthread.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\mutex.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\pplerror.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\ppltasks.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\taskscheduler.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xnotify.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xtime.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\thread0.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\uncaught_exception.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\uncaught_exceptions.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\ushcerr.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\ushcin.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\ushclog.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\ushcout.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\ushiostr.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\wcerr.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\wcin.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\wclog.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\wcout.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\wiostrea.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\wlocale.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xalloc.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xcosh.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xdateord.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xdtest.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xexp.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xgetwctype.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xlgamma.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xlocale.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xlock.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xmbtowc.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xmtx.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xonce.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xrngabort.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xrngdev.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xsinh.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xstod.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xstof.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xstol.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xstoll.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xstoul.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xstoull.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xstrcoll.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xstrxfrm.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xthrow.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xtowlower.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xtowupper.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xvalues.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xwcscoll.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xwcsxfrm.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xwctomb.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xwstod.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\xwstof.cpp\" />\r\n\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\winapisupp.cpp\">\r\n            <HasCrtInitializers>true</HasCrtInitializers>\r\n        </ClCompile>\r\n\r\n        <!-- Objs that exist in both libcpmt[d][01].lib and msvcprt[d].lib\r\n             (controlled by ExtraImpLibCompiled). -->\r\n        <ClCompile Include=\"\r\n            $(CrtRoot)\\github\\stl\\src\\asan_noop.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\charconv.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\filesystem.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\format.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\locale0_implib.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\nothrow.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\print.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\regex.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\sharedmutex.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\stacktrace.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\syserror_import_lib.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\vector_algorithms.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\xcharconv_ryu_tables.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\xcharconv_tables_double.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\xcharconv_tables_float.cpp;\r\n            $(CrtRoot)\\github\\stl\\src\\xonce2.cpp;\r\n            \">\r\n            <ExtraImpLibCompiled>true</ExtraImpLibCompiled>\r\n            <PreprocessorDefinitions>$(ClDefines);_ENFORCE_ONLY_CORE_HEADERS</PreprocessorDefinitions>\r\n        </ClCompile>\r\n    </ItemGroup>\r\n\r\n    <ItemGroup Condition=\"'$(BuildArchitecture)' == 'i386' or '$(BuildArchitecture)' == 'amd64'\">\r\n        <!-- Objs that exist in both libcpmt[d][01].lib and msvcprt[d].lib\r\n             (controlled by ExtraImpLibCompiled). -->\r\n        <BuildFiles Include=\"\r\n            $(CrtRoot)\\github\\stl\\src\\alias_init_once_begin_initialize.asm;\r\n            $(CrtRoot)\\github\\stl\\src\\alias_init_once_complete.asm;\r\n            \">\r\n            <BuildAs>asm</BuildAs>\r\n            <ExtraImpLibCompiled>true</ExtraImpLibCompiled>\r\n        </BuildFiles>\r\n    </ItemGroup>\r\n\r\n    <ItemGroup Condition=\"'$(CrtBuildModelIsDll)' == 'true'\">\r\n        <!-- The following files are linked in msvcpXXX[d][_clr].dll. -->\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\dllmain.cpp\" />\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\instances.cpp\" />\r\n    </ItemGroup>\r\n\r\n    <Choose>\r\n      <When Condition=\"'$(CrtBuildModel)' != 'md'\">\r\n        <!-- Only check exports of release, DLL, builds -->\r\n      </When>\r\n\r\n      <When Condition=\"'$(BuildArchitecture)' == 'i386' or '$(BuildArchitecture)' == 'chpe'\">\r\n        <Choose>\r\n          <When Condition=\"'$(MsvcpFlavor)' == 'kernel32' or '$(MsvcpFlavor)' == 'netfx'\">\r\n            <PropertyGroup>\r\n              <ExpectedExportsList>$(MSBuildThisFileDirectory)\\i386.exports</ExpectedExportsList>\r\n            </PropertyGroup>\r\n          </When>\r\n          <Otherwise>\r\n            <PropertyGroup>\r\n              <ExpectedExportsList>$(MSBuildThisFileDirectory)\\i386_onecore.exports</ExpectedExportsList>\r\n            </PropertyGroup>\r\n          </Otherwise>\r\n        </Choose>\r\n      </When>\r\n      <When Condition=\"'$(BuildArchitecture)' == 'amd64' or '$(BuildArchitecture)' == 'arm64ec'\">\r\n        <Choose>\r\n          <When Condition=\"'$(MsvcpFlavor)' == 'kernel32' or '$(MsvcpFlavor)' == 'netfx'\">\r\n            <PropertyGroup>\r\n              <ExpectedExportsList>$(MSBuildThisFileDirectory)\\amd64.exports</ExpectedExportsList>\r\n            </PropertyGroup>\r\n          </When>\r\n          <Otherwise>\r\n            <PropertyGroup>\r\n              <ExpectedExportsList>$(MSBuildThisFileDirectory)\\amd64_onecore.exports</ExpectedExportsList>\r\n            </PropertyGroup>\r\n          </Otherwise>\r\n        </Choose>\r\n      </When>\r\n      <When Condition=\"'$(BuildArchitecture)' == 'arm64'\">\r\n        <PropertyGroup>\r\n          <ExpectedExportsList>$(MSBuildThisFileDirectory)\\arm64.exports</ExpectedExportsList>\r\n        </PropertyGroup>\r\n      </When>\r\n    </Choose>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/xmd/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"msvcp_base_xmd_app.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_base_xmd_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_base_xmd_onecore.vcxproj\" />\r\n    </ItemGroup>\r\n\r\n    <ItemGroup Condition=\"'$(SpectreBuildMode)' == ''\">\r\n        <ProjectFile Include=\"msvcp_base_xmd_netfx.vcxproj\" Condition=\"'$(BuildArchitecture)' != 'chpe'\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/xmd/msvcp_base_xmd_app.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{3DFFE995-1592-4D71-A088-65B5E90829E3}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>app</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/xmd/msvcp_base_xmd_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{19B72B03-37A8-4ED7-85D9-26031335269E}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/xmd/msvcp_base_xmd_netfx.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{9E0C069E-C345-4977-9753-16CEE50029D8}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>netfx</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/xmd/msvcp_base_xmd_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{617D60ED-BAB2-45FA-8FAF-B0E7F9304403}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/xmt/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"libcpmt_xmt_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"libcpmt_xmt_onecore.vcxproj\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/xmt/libcpmt_xmt_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{ECA62467-8F67-4F70-953D-0916472878AA}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmt</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(libcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/xmt/libcpmt_xmt_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{02DA6861-AC66-4EA6-B558-9D0E0F1073A8}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmt</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(libcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/xmt0/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"libcpmt_xmt0_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"libcpmt_xmt0_onecore.vcxproj\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/xmt0/libcpmt_xmt0_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{C9715C5F-41D3-472B-AC8D-4E374105FD6B}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmt0</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(libcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/xmt0/libcpmt_xmt0_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{5B4429AE-5436-4C16-A6D6-998D76182CF1}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmt0</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(libcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/xmt1/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"libcpmt_xmt1_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"libcpmt_xmt1_onecore.vcxproj\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/xmt1/libcpmt_xmt1_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{C5C4581F-36C6-4327-BB54-6C1DFF52A60F}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmt1</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(libcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_base/xmt1/libcpmt_xmt1_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{4B156573-7D78-4FDA-B365-320A91AE8916}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmt1</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(libcp.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/amd64.exports",
    "content": "?id@?$codecvt@_SDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@_UDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@_S_QU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@_U_QU_Mbstatet@@@std@@2V0locale@2@A\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/arm64.exports",
    "content": "?id@?$codecvt@_SDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@_UDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@_S_QU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@_U_QU_Mbstatet@@@std@@2V0locale@2@A\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Condition=\"'$(CrtBuildMD)'  != 'false'\" Include=\"md\\dirs.proj\" />\r\n        <ProjectFile Condition=\"'$(CrtBuildXMD)' != 'false'\" Include=\"xmd\\dirs.proj\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/i386.exports",
    "content": "?id@?$codecvt@_SDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@_UDU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@_S_QU_Mbstatet@@@std@@2V0locale@2@A\r\n?id@?$codecvt@_U_QU_Mbstatet@@@std@@2V0locale@2@A\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/md/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"msvcp_codecvt_ids_md_app.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_codecvt_ids_md_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_codecvt_ids_md_onecore.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_codecvt_ids_md_netfx.vcxproj\" Condition=\"'$(BuildArchitecture)' != 'chpe'\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/md/msvcp_codecvt_ids_md_app.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{CD1E3105-704A-4D91-B49A-4D6E96546ED5}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>app</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_codecvt_ids.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/md/msvcp_codecvt_ids_md_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{ED7C0741-B3D2-4EAD-AA7E-BDF1B0948ECC}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_codecvt_ids.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/md/msvcp_codecvt_ids_md_netfx.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{5F6F2FF5-EFED-4CF7-8F44-810DB15F32CD}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>netfx</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_codecvt_ids.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/md/msvcp_codecvt_ids_md_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{32352E48-0D6E-4BCA-935A-76DAFDD4239D}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_codecvt_ids.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/msvcp_codecvt_ids.settings.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"Dogfood\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n    <PropertyGroup Label=\"Configuration\">\r\n        <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n        <GenerateImportLib>true</GenerateImportLib>\r\n    </PropertyGroup>\r\n\r\n    <PropertyGroup>\r\n        <FinalBinary>p_codecvt_ids</FinalBinary>\r\n\r\n        <TargetAppFamily Condition=\"'$(MsvcpFlavor)' == 'app'\">true</TargetAppFamily>\r\n        <TargetCoreSystem Condition=\"'$(MsvcpFlavor)' == 'onecore'\">true</TargetCoreSystem>\r\n        <TargetNetFx Condition=\"'$(MsvcpFlavor)' == 'netfx'\">true</TargetNetFx>\r\n    </PropertyGroup>\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\crt_build.settings.targets\"/>\r\n\r\n    <PropertyGroup>\r\n        <ClrLibSuffix Condition=\"'$(MsvcpFlavor)' == 'netfx'\">_clr</ClrLibSuffix>\r\n\r\n        <MsvcpFlavorSuffix Condition=\"'$(MsvcpFlavor)' == 'app'\">_app</MsvcpFlavorSuffix>\r\n        <MsvcpFlavorSuffix Condition=\"'$(MsvcpFlavor)' == 'netfx'\">_clr$(NetFxVerX)</MsvcpFlavorSuffix>\r\n\r\n        <OutputName>msvcp$(VCToolsProdVerSuffix)$(BuildSuffix)_codecvt_ids$(MsvcpFlavorSuffix)</OutputName>\r\n        <LibOutputFileName>msvcprt$(BuildSuffix)_codecvt_ids$(ClrLibSuffix)</LibOutputFileName>\r\n        <LibOutputFile>$(LibOutputFileName).lib</LibOutputFile>\r\n\r\n        <ClDefines Condition=\"'$(MsvcpFlavor)' == 'app'\">$(ClDefines);_CRT_APP</ClDefines>\r\n\r\n        <UseMsvcrt>false</UseMsvcrt>\r\n        <RCIntermediateOutputDirectory>$(IntermediateOutputDirectory)</RCIntermediateOutputDirectory>\r\n        <IntermediateImportLibOutput>$(CrtBuildDir)\\msvcprt$(BuildSuffix)_codecvt_ids.$(MsvcpFlavor).import_only.lib</IntermediateImportLibOutput>\r\n        <DllDefName>$(LibOutputFileName).$(MsvcpFlavor)</DllDefName>\r\n        <DllDef>$(IntermediateOutputDirectory)\\$(DllDefName).def</DllDef>\r\n\r\n        <LinkGenerateDebugInformation>true</LinkGenerateDebugInformation>\r\n        <LinkProgramDataBaseFileName>$(OutputPath)\\$(OutputName)$(_PDB_VER_NAME_)$(DllPdbFlavorSuffix)</LinkProgramDataBaseFileName>\r\n\r\n        <LinkAdditionalOptions>-debugtype:cv,fixup $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions Condition=\"$(DebugBuild) != 'true'\">-opt:ref,icf=3 $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions Condition=\"$(DebugBuild) == 'true'\">-opt:ref,noicf $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions>-nodefaultlib:libcpmt$(BuildSuffix).lib $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions>-nodefaultlib:$(LibOutputFile) $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n\r\n        <LinkGenerateMapFile>true</LinkGenerateMapFile>\r\n        <LinkRelease>true</LinkRelease>\r\n    </PropertyGroup>\r\n\r\n    <ItemGroup>\r\n        <CppPreprocess Include=\"$(MSBuildThisFileDirectory)\\msvcprt_codecvt_ids.src\">\r\n            <Defines>LIBRARYNAME=$(OutputName.ToUpper());$(DllCppDefines)</Defines>\r\n        </CppPreprocess>\r\n        <DefFromI Include=\"$(IntermediateOutputDirectory)\\msvcprt_codecvt_ids.i\">\r\n            <DestFolder1>$(IntermediateOutputDirectory)</DestFolder1>\r\n            <DestFolder2>$(IntermediateOutputDirectory)</DestFolder2>\r\n            <DestFile>$(DllDefName)</DestFile>\r\n        </DefFromI>\r\n        <ResourceCompile Include=\"$(MSBuildThisFileDirectory)\\msvcprt_codecvt_ids.rc\"/>\r\n    </ItemGroup>\r\n\r\n    <ItemGroup>\r\n        <ProjectReference Condition=\"'$(CrtBuildModel)'=='md' or '$(CrtBuildModel)'=='xmd'\" Include=\"$(VCToolsRootPath)\\crt\\github\\stl\\msbuild\\stl_base\\$(CrtBuildModel)\\msvcp_base_$(CrtBuildModel)_$(MsvcpFlavor).vcxproj\"/>\r\n        <TargetLib Include=\"$(CrtLibPath)\\msvcprt_base$(BuildSuffix)$(ClrLibSuffix).lib\"/>\r\n        <TargetLib Include=\"$(CrtLibPath)\\msvcrt$(BuildSuffix)$(ClrLibSuffix).lib\"/>\r\n        <TargetLib Include=\"$(CrtLibPath)\\vcruntime$(BuildSuffix)$(ClrLibSuffix).lib\"/>\r\n        <TargetLib Include=\"$(UniversalCRTLib)\"/>\r\n    </ItemGroup>\r\n\r\n    <!-- Copy the output dll and pdb to various destinations -->\r\n    <ItemGroup>\r\n        <CopyFilesForCrossTools Condition=\"'$(MsvcpFlavor)' == 'kernel32'\" Include=\"\r\n           $(LinkOutputFile);\r\n           $(LinkProgramDataBaseFileName);\r\n        \"/>\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)\\stl_codecvt_ids.files.settings.targets\"/>\r\n\r\n    <Import Project=\"$(VCToolsRootPath)\\crt\\crt_build.targets\"/>\r\n    <Target Name=\"GetBaseAddress\"/>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/msvcprt_codecvt_ids.rc",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////\r\n//\r\n// msvcprt_codecvt_ids.rc : Defines the version resource for the C++ Runtime Library\r\n// \"_codecvt_ids\" satellite DLL\r\n//\r\n//////////////////////////////////////////////////////////////////////////////////////\r\n\r\n#include \"winver.h\"                       // extract from windows header\r\n#include \"verstamp.h\"\r\n\r\n#define MKARGSTR2(X) #X\r\n#define MKARGSTR(X)  MKARGSTR2(X)\r\n\r\n#define VER_FILETYPE VFT_DLL\r\n#define VER_FILESUBTYPE VFT_UNKNOWN\r\n\r\n#define VER_FILEDESCRIPTION_STR  \"Microsoft\\256 C Runtime Library _codecvt_ids\\0\"\r\n#define VER_INTERNALNAME_STR     MKARGSTR(SXS_TARGET)\r\n#define VER_ORIGINALFILENAME_STR MKARGSTR(SXS_TARGET)\r\n\r\n#include <common.ver>\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/msvcprt_codecvt_ids.src",
    "content": "; Copyright (c) Microsoft Corporation.\r\n; SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n;********************************************************************************\r\n;\r\n; This is the .DEF file for the Microsoft Visual C++ Run-Time Library\r\n; \"_codecvt_ids\" satellite DLL\r\n; The release version is MSVCPXX_CODECVT_IDS.DLL and the debug version\r\n; MSVCPXXD_CODECVT_IDS.DLL.\r\n;\r\n;********************************************************************************\r\n\r\nLIBRARY LIBRARYNAME\r\n\r\nEXPORTS\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/stl_codecvt_ids.files.settings.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"Dogfood\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <ItemGroup>\r\n        <ClCompile Include=\"$(CrtRoot)\\github\\stl\\src\\ulocale.cpp\" />\r\n        <ClCompile Condition=\"'$(CrtBuildModelIsDll)' == 'true'\" Include=\"$(CrtRoot)\\github\\stl\\src\\dllmain_satellite.cpp;\" />\r\n    </ItemGroup>\r\n\r\n    <Choose>\r\n      <When Condition=\"'$(CrtBuildModel)' != 'md'\">\r\n        <!-- Only check exports of release, DLL, builds -->\r\n      </When>\r\n\r\n      <When Condition=\"'$(BuildArchitecture)' == 'i386' or '$(BuildArchitecture)' == 'chpe'\">\r\n        <PropertyGroup>\r\n          <ExpectedExportsList>$(MSBuildThisFileDirectory)\\i386.exports</ExpectedExportsList>\r\n        </PropertyGroup>\r\n      </When>\r\n      <When Condition=\"'$(BuildArchitecture)' == 'amd64' or '$(BuildArchitecture)' == 'arm64ec'\">\r\n        <PropertyGroup>\r\n          <ExpectedExportsList>$(MSBuildThisFileDirectory)\\amd64.exports</ExpectedExportsList>\r\n        </PropertyGroup>\r\n      </When>\r\n      <When Condition=\"'$(BuildArchitecture)' == 'arm64'\">\r\n        <PropertyGroup>\r\n          <ExpectedExportsList>$(MSBuildThisFileDirectory)\\arm64.exports</ExpectedExportsList>\r\n        </PropertyGroup>\r\n      </When>\r\n    </Choose>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/xmd/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"msvcp_codecvt_ids_xmd_app.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_codecvt_ids_xmd_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_codecvt_ids_xmd_onecore.vcxproj\" />\r\n    </ItemGroup>\r\n\r\n    <ItemGroup Condition=\"'$(SpectreBuildMode)' == ''\">\r\n        <ProjectFile Include=\"msvcp_codecvt_ids_xmd_netfx.vcxproj\" Condition=\"'$(BuildArchitecture)' != 'chpe' and '$(BuildArchitecture)' != 'arm64ec'\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/xmd/msvcp_codecvt_ids_xmd_app.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{53AB0179-49FF-4620-9D42-45BD8ED71EA8}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>app</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_codecvt_ids.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/xmd/msvcp_codecvt_ids_xmd_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{9D9D5B21-5342-4726-AA4F-ACDF4D028F28}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_codecvt_ids.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/xmd/msvcp_codecvt_ids_xmd_netfx.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{D561DC89-A909-478B-8566-41640F9F5B53}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>netfx</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_codecvt_ids.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_codecvt_ids/xmd/msvcp_codecvt_ids_xmd_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{10C04DBD-4EB2-4590-BC8D-25DBA780905C}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_codecvt_ids.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_post/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Condition=\"'$(CrtBuildMD)'  != 'false'\" Include=\"md\\dirs.proj\" />\r\n        <ProjectFile Condition=\"'$(CrtBuildXMD)' != 'false'\" Include=\"xmd\\dirs.proj\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_post/md/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"msvcp_post_md_app.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_post_md_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_post_md_onecore.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_post_md_netfx.vcxproj\" Condition=\"'$(BuildArchitecture)' != 'chpe'\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_post/md/msvcp_post_md_app.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{0E89DF6E-E7BA-44A1-841E-E6310F470211}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>app</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_post.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_post/md/msvcp_post_md_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{4BC58285-8BF8-4362-BE62-38CCBB34EA57}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_post.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_post/md/msvcp_post_md_netfx.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{9EAC2409-0DE5-465D-BEB2-08DD9221CDC7}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>netfx</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_post.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_post/md/msvcp_post_md_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{8A1D8A23-DBBA-4356-816E-344F7956D497}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>md</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_post.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_post/msvcp_post.settings.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"Dogfood\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n    <PropertyGroup Label=\"Configuration\">\r\n        <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    </PropertyGroup>\r\n\r\n    <PropertyGroup>\r\n        <FinalBinary>p_post</FinalBinary>\r\n\r\n        <TargetAppFamily Condition=\"'$(MsvcpFlavor)' == 'app'\">true</TargetAppFamily>\r\n        <TargetCoreSystem Condition=\"'$(MsvcpFlavor)' == 'onecore'\">true</TargetCoreSystem>\r\n        <TargetNetFx Condition=\"'$(MsvcpFlavor)' == 'netfx'\">true</TargetNetFx>\r\n    </PropertyGroup>\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\crt_build.settings.targets\"/>\r\n\r\n    <PropertyGroup>\r\n        <ClrLibSuffix Condition=\"'$(MsvcpFlavor)' == 'netfx'\">_clr</ClrLibSuffix>\r\n\r\n        <MsvcpFlavorSuffix Condition=\"'$(MsvcpFlavor)' == 'app'\">_app</MsvcpFlavorSuffix>\r\n        <MsvcpFlavorSuffix Condition=\"'$(MsvcpFlavor)' == 'netfx'\">_clr$(NetFxVerX)</MsvcpFlavorSuffix>\r\n\r\n        <LibOutputFileName>msvcprt$(BuildSuffix)$(ClrLibSuffix)</LibOutputFileName>\r\n        <LibOutputFile>$(LibOutputFileName).lib</LibOutputFile>\r\n\r\n        <UseMsvcrt>false</UseMsvcrt>\r\n\r\n        <LinkGenerateDebugInformation>true</LinkGenerateDebugInformation>\r\n        <LinkProgramDataBaseFileName>$(OutputPath)\\$(OutputName)$(_PDB_VER_NAME_)$(DllPdbFlavorSuffix)</LinkProgramDataBaseFileName>\r\n\r\n        <LinkAdditionalOptions>-debugtype:cv,fixup $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions Condition=\"$(DebugBuild) != 'true'\">-opt:ref,icf=3 $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions Condition=\"$(DebugBuild) == 'true'\">-opt:ref,noicf $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions>-nodefaultlib:libcpmt$(BuildSuffix).lib $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n        <LinkAdditionalOptions>-nodefaultlib:$(LibOutputFile) $(LinkAdditionalOptions)</LinkAdditionalOptions>\r\n\r\n        <LinkGenerateMapFile>true</LinkGenerateMapFile>\r\n        <LinkRelease>true</LinkRelease>\r\n    </PropertyGroup>\r\n\r\n    <ItemGroup>\r\n        <ProjectReference\r\n            Include=\"$(CrtRoot)\\github\\stl\\msbuild\\stl_base\\$(CrtBuildModel)\\msvcp_base_$(CrtBuildModel)_$(MsvcpFlavor).vcxproj\"/>\r\n        <ProjectReference\r\n            Include=\"$(CrtRoot)\\github\\stl\\msbuild\\stl_1\\$(CrtBuildModel)\\msvcp_1_$(CrtBuildModel)_$(MsvcpFlavor).vcxproj\"/>\r\n        <ProjectReference\r\n            Include=\"$(CrtRoot)\\github\\stl\\msbuild\\stl_2\\$(CrtBuildModel)\\msvcp_2_$(CrtBuildModel)_$(MsvcpFlavor).vcxproj\"/>\r\n        <ProjectReference\r\n            Include=\"$(CrtRoot)\\github\\stl\\msbuild\\stl_codecvt_ids\\$(CrtBuildModel)\\msvcp_codecvt_ids_$(CrtBuildModel)_$(MsvcpFlavor).vcxproj\"/>\r\n        <ProjectReference\r\n            Include=\"$(CrtRoot)\\github\\stl\\msbuild\\stl_atomic_wait\\$(CrtBuildModel)\\msvcp_atomic_wait_$(CrtBuildModel)_$(MsvcpFlavor).vcxproj\"/>\r\n        <Lib Include=\"$(CrtLibPath)\\msvcprt_base$(BuildSuffix)$(ClrLibSuffix).lib\">\r\n            <IncludeInChameleonLib>false</IncludeInChameleonLib>\r\n        </Lib>\r\n        <Lib Include=\"$(CrtLibPath)\\msvcprt_1$(BuildSuffix)$(ClrLibSuffix).lib\">\r\n            <IncludeInChameleonLib>false</IncludeInChameleonLib>\r\n        </Lib>\r\n        <Lib Include=\"$(CrtLibPath)\\msvcprt_2$(BuildSuffix)$(ClrLibSuffix).lib\">\r\n            <IncludeInChameleonLib>false</IncludeInChameleonLib>\r\n        </Lib>\r\n        <Lib Include=\"$(CrtLibPath)\\msvcprt$(BuildSuffix)_codecvt_ids$(ClrLibSuffix).lib\">\r\n            <IncludeInChameleonLib>false</IncludeInChameleonLib>\r\n        </Lib>\r\n        <Lib Include=\"$(CrtLibPath)\\msvcprt$(BuildSuffix)_atomic_wait$(ClrLibSuffix).lib\">\r\n            <IncludeInChameleonLib>false</IncludeInChameleonLib>\r\n        </Lib>\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$(VCToolsRootPath)\\crt\\crt_build.targets\"/>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_post/xmd/dirs.proj",
    "content": "<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n    <Import Project=\"$(MSBuildThisFileDirectory)..\\..\\..\\..\\..\\crt-common.settings.targets\" />\r\n\r\n    <ItemGroup>\r\n        <ProjectFile Include=\"msvcp_post_xmd_app.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_post_xmd_kernel32.vcxproj\" />\r\n        <ProjectFile Include=\"msvcp_post_xmd_onecore.vcxproj\" />\r\n    </ItemGroup>\r\n\r\n    <ItemGroup Condition=\"'$(SpectreBuildMode)' == ''\">\r\n        <ProjectFile Include=\"msvcp_post_xmd_netfx.vcxproj\" Condition=\"'$(BuildArchitecture)' != 'chpe'\" />\r\n    </ItemGroup>\r\n\r\n    <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Traversal.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_post/xmd/msvcp_post_xmd_app.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{687A5106-D6CE-4BC4-8BA1-27D84F895FF5}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>app</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_post.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_post/xmd/msvcp_post_xmd_kernel32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{13998FA0-CBA7-4303-9212-879E17F69D53}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>kernel32</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_post.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_post/xmd/msvcp_post_xmd_netfx.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{9FAAE4A7-D6CE-48C8-8B80-6EA96F508545}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>netfx</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_post.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/msbuild/stl_post/xmd/msvcp_post_xmd_onecore.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"Dogfood\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <!--\r\n  Copyright (c) Microsoft Corporation.\r\n  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n  -->\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{8DA22F7E-CE13-4885-AD01-D97B180E815C}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(VCTools.Cpp.Default.props))\" />\r\n  <PropertyGroup>\r\n    <CrtBuildModel>xmd</CrtBuildModel>\r\n    <MsvcpFlavor>onecore</MsvcpFlavor>\r\n    <Arm64X>true</Arm64X>\r\n  </PropertyGroup>\r\n  <Import Project=\"$([MSBuild]::GetPathOfFileAbove(msvcp_post.settings.targets))\" />\r\n</Project>\r\n"
  },
  {
    "path": "stl/set_environment.bat.in",
    "content": ":: Copyright (c) Microsoft Corporation.\r\n:: SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n@set PATH=%~dp0out\\bin\\@VCLIBS_I386_OR_AMD64@;%PATH%\r\n@set INCLUDE=%~dp0out\\inc;%INCLUDE%\r\n@set LIB=%~dp0out\\lib\\@VCLIBS_I386_OR_AMD64@;%LIB%\r\n"
  },
  {
    "path": "stl/set_environment.ps1.in",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n$env:PATH=\"$PSScriptRoot\\out\\bin\\@VCLIBS_I386_OR_AMD64@;$env:PATH\"\r\n$env:INCLUDE=\"$PSScriptRoot\\out\\inc;$env:INCLUDE\"\r\n$env:LIB=\"$PSScriptRoot\\out\\lib\\@VCLIBS_I386_OR_AMD64@;$env:LIB\"\r\n"
  },
  {
    "path": "stl/src/StlCompareStringA.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <crtdbg.h>\r\n#include <cstring> // for __strncnt\r\n#include <internal_shared.h>\r\n\r\n#include <Windows.h>\r\n\r\n#include \"awint.hpp\"\r\n\r\n// int __cdecl __crtCompareStringA - Get type information about an ANSI string.\r\n//\r\n// Purpose:\r\n//   Internal support function. Assumes info in ANSI string format. Tries\r\n//   to use NLS API call CompareStringA if available and uses CompareStringW\r\n//   if it must. If neither is available it fails and returns 0.\r\n//\r\n// Entry:\r\n//   LPCWSTR  LocaleName  - locale context for the comparison.\r\n//   DWORD    dwCmpFlags  - https://learn.microsoft.com/windows/win32/api/stringapiset/nf-stringapiset-comparestringex\r\n//   LPCSTR   lpStringn   - multibyte string to be compared\r\n//   int      cchCountn   - char (byte) count (NOT including null terminator) (-1 if null terminated)\r\n//   int      code_page   - for MB/WC conversion. If 0, use __lc_codepage\r\n//\r\n// Exit:\r\n//   Success: 1 - if lpString1 <  lpString2\r\n//            2 - if lpString1 == lpString2\r\n//            3 - if lpString1 >  lpString2\r\n//   Failure: 0\r\nextern \"C\" _CRTIMP2 int __cdecl __crtCompareStringA(_In_z_ LPCWSTR LocaleName, _In_ DWORD dwCmpFlags,\r\n    _In_reads_(cchCount1) LPCSTR lpString1, _In_ int cchCount1, _In_reads_(cchCount2) LPCSTR lpString2,\r\n    _In_ int cchCount2, _In_ int code_page) noexcept {\r\n    // CompareString will compare past null terminator. Must find null terminator if in string before cchCountn chars.\r\n    if (cchCount1 > 0) {\r\n        cchCount1 = static_cast<int>(__strncnt(lpString1, cchCount1));\r\n    } else if (cchCount1 < -1) {\r\n        return FALSE;\r\n    }\r\n\r\n    if (cchCount2 > 0) {\r\n        cchCount2 = static_cast<int>(__strncnt(lpString2, cchCount2));\r\n    } else if (cchCount2 < -1) {\r\n        return FALSE;\r\n    }\r\n\r\n    // Special case: at least one count is zero\r\n    if (!cchCount1 || !cchCount2) {\r\n        // both strings zero\r\n        if (cchCount1 == cchCount2) {\r\n            return 2;\r\n        }\r\n\r\n        // string 1 greater\r\n        if (cchCount2 > 1) {\r\n            return 1;\r\n        }\r\n\r\n        // string 2 greater\r\n        if (cchCount1 > 1) {\r\n            return 3;\r\n        }\r\n\r\n        // one has zero count, the other has a count of one\r\n        // - if the one count is a naked lead byte, the strings are equal\r\n        // - otherwise it is a single character and they are unequal\r\n        CPINFO cpInfo;\r\n        if (!GetCPInfo(code_page, &cpInfo)) {\r\n            return 0;\r\n        }\r\n\r\n        _ASSERTE((cchCount1 == 0 && cchCount2 == 1) || (cchCount1 == 1 && cchCount2 == 0));\r\n\r\n        // string 1 has count of 1\r\n        if (cchCount1 > 0) {\r\n            if (cpInfo.MaxCharSize < 2) {\r\n                return 3;\r\n            }\r\n\r\n            for (auto cp = &cpInfo.LeadByte[0]; cp[0] && cp[1]; cp += 2) {\r\n                const auto ch = static_cast<unsigned char>(*lpString1);\r\n                if (ch >= cp[0] && ch <= cp[1]) {\r\n                    return 2;\r\n                }\r\n            }\r\n\r\n            return 3;\r\n        }\r\n\r\n        // string 2 has count of 1\r\n        if (cchCount2 > 0) {\r\n            if (cpInfo.MaxCharSize < 2) {\r\n                return 1;\r\n            }\r\n\r\n            for (auto cp = &cpInfo.LeadByte[0]; cp[0] && cp[1]; cp += 2) {\r\n                const auto ch = static_cast<unsigned char>(*lpString2);\r\n                if (ch >= cp[0] && ch <= cp[1]) {\r\n                    return 2;\r\n                }\r\n            }\r\n\r\n            return 1;\r\n        }\r\n    }\r\n\r\n    // Convert strings and return the requested information.\r\n\r\n    // find out how big a buffer we need (includes null terminator if any)\r\n    const int buff_size1 =\r\n        MultiByteToWideChar(code_page, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, lpString1, cchCount1, nullptr, 0);\r\n    if (0 == buff_size1) {\r\n        return 0;\r\n    }\r\n\r\n    // allocate enough space for chars\r\n    __crt_scoped_stack_ptr<wchar_t> wbuffer1(_malloca_crt_t(wchar_t, buff_size1));\r\n    if (wbuffer1.get() == nullptr) {\r\n        return 0;\r\n    }\r\n\r\n    // do the conversion\r\n    if (0 == MultiByteToWideChar(code_page, MB_PRECOMPOSED, lpString1, cchCount1, wbuffer1.get(), buff_size1)) {\r\n        return 0;\r\n    }\r\n\r\n    // find out how big a buffer we need (includes null terminator if any)\r\n    const int buff_size2 =\r\n        MultiByteToWideChar(code_page, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, lpString2, cchCount2, nullptr, 0);\r\n    if (0 == buff_size2) {\r\n        return 0;\r\n    }\r\n\r\n    // allocate enough space for chars\r\n    const __crt_scoped_stack_ptr<wchar_t> wbuffer2(_malloca_crt_t(wchar_t, buff_size2));\r\n    if (wbuffer2.get() == nullptr) {\r\n        return 0;\r\n    }\r\n\r\n    const int actual_size =\r\n        MultiByteToWideChar(code_page, MB_PRECOMPOSED, lpString2, cchCount2, wbuffer2.get(), buff_size2);\r\n    if (actual_size == 0) {\r\n        return 0;\r\n    }\r\n\r\n    return CompareStringEx(\r\n        LocaleName, dwCmpFlags, wbuffer1.get(), buff_size1, wbuffer2.get(), buff_size2, nullptr, nullptr, 0);\r\n}\r\n"
  },
  {
    "path": "stl/src/StlCompareStringW.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstring> // for wcsnlen\r\n\r\n#include <Windows.h>\r\n\r\n#include \"awint.hpp\"\r\n\r\n// int __cdecl __crtCompareStringW - Get type information about a wide string.\r\n//\r\n// Purpose:\r\n//   Internal support function. Assumes info in wide string format.\r\n//\r\n// Entry:\r\n//   LPCWSTR  LocaleName  - locale context for the comparison.\r\n//   DWORD    dwCmpFlags  - https://learn.microsoft.com/windows/win32/api/stringapiset/nf-stringapiset-comparestringex\r\n//   LPCWSTR  lpStringn   - wide string to be compared\r\n//   int      cchCountn   - wide char (word) count (NOT including null terminator) (-1 if null terminated)\r\n//\r\n// Exit:\r\n//   Success: 1 - if lpString1 <  lpString2\r\n//            2 - if lpString1 == lpString2\r\n//            3 - if lpString1 >  lpString2\r\n//   Failure: 0\r\nextern \"C\" _CRTIMP2 int __cdecl __crtCompareStringW(_In_z_ LPCWSTR LocaleName, _In_ DWORD dwCmpFlags,\r\n    _In_reads_(cchCount1) LPCWSTR lpString1, _In_ int cchCount1, _In_reads_(cchCount2) LPCWSTR lpString2,\r\n    _In_ int cchCount2) noexcept {\r\n    // CompareString will compare past null terminator. Must find null terminator if in string before cchCountn wide\r\n    // characters.\r\n    if (cchCount1 > 0) {\r\n        cchCount1 = static_cast<int>(wcsnlen(lpString1, cchCount1));\r\n    }\r\n\r\n    if (cchCount2 > 0) {\r\n        cchCount2 = static_cast<int>(wcsnlen(lpString2, cchCount2));\r\n    }\r\n\r\n    if (!cchCount1 || !cchCount2) {\r\n        return (cchCount1 - cchCount2 == 0) ? 2 : (cchCount1 - cchCount2 < 0) ? 1 : 3;\r\n    }\r\n\r\n    return CompareStringEx(LocaleName, dwCmpFlags, lpString1, cchCount1, lpString2, cchCount2, nullptr, nullptr, 0);\r\n}\r\n"
  },
  {
    "path": "stl/src/StlLCMapStringA.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <internal_shared.h>\r\n\r\n#include \"awint.hpp\"\r\n\r\n// int __cdecl __crtLCMapStringA - Get type information about an ANSI string.\r\n//\r\n// Purpose:\r\n//        Internal support function. Assumes info in ANSI string format. Tries\r\n//        to use NLS API call LCMapStringA if available and uses LCMapStringW\r\n//        if it must. If neither is available it fails and returns 0.\r\n//\r\n// Entry:\r\n//        LPCWSTR  LocaleName  - locale context for the comparison.\r\n//        DWORD    dwMapFlags  - see https://learn.microsoft.com/windows/win32/api/winnls/nf-winnls-lcmapstringex\r\n//        LPCSTR   lpSrcStr    - pointer to string to be mapped\r\n//        int      cchSrc      - wide char (word) count of input string\r\n//                               (including null terminator if any)\r\n//                               (-1 if null terminated)\r\n//        LPSTR    lpDestStr   - pointer to memory to store mapping\r\n//        int      cchDest     - char (byte) count of buffer (including null terminator)\r\n//        int      code_page   - for MB/WC conversion. If 0, use __lc_codepage\r\n//        BOOL     bError      - TRUE if MB_ERR_INVALID_CHARS set on call to MultiByteToWideChar when GetStringTypeW\r\n//                               used.\r\n//\r\n// Exit:\r\n//        Success: number of chars written to lpDestStr (including null terminator)\r\n//        Failure: 0\r\nextern \"C\" _CRTIMP2 int __cdecl __crtLCMapStringA(_In_opt_z_ LPCWSTR LocaleName, _In_ DWORD dwMapFlags,\r\n    _In_reads_(cchSrc) LPCSTR lpSrcStr, _In_ int cchSrc, _Out_writes_opt_(cchDest) char* lpDestStr, _In_ int cchDest,\r\n    _In_ int code_page, _In_ BOOL bError) noexcept {\r\n    // LCMapString will map past the null terminator.  We must find the null\r\n    // terminator if it occurs in the string before cchSrc characters\r\n    // and cap the number of characters to be considered.\r\n    if (cchSrc > 0) {\r\n        const int cchSrcCnt = static_cast<int>(__strncnt(lpSrcStr, cchSrc));\r\n\r\n        // Include the null terminator if the source string is terminated within\r\n        // the buffer.\r\n        if (cchSrcCnt < cchSrc) {\r\n            cchSrc = cchSrcCnt + 1;\r\n        } else {\r\n            cchSrc = cchSrcCnt;\r\n        }\r\n    }\r\n\r\n    // Convert string and return the requested information. Note that we are converting to a wide string so there is not\r\n    // a one-to-one correspondence between number of wide chars in the input string and the number of *bytes* in the\r\n    // buffer. However, there had *better be* a one-to-one correspondence between the number of wide characters and the\r\n    // number of multibyte characters or the resulting mapped string will be worthless to the user.\r\n\r\n    // find out how big a buffer we need (includes null terminator if any)\r\n    const int inbuff_size = MultiByteToWideChar(\r\n        code_page, bError ? MB_PRECOMPOSED | MB_ERR_INVALID_CHARS : MB_PRECOMPOSED, lpSrcStr, cchSrc, nullptr, 0);\r\n    if (0 == inbuff_size) {\r\n        return 0;\r\n    }\r\n\r\n    // allocate enough space for wide chars\r\n    const __crt_scoped_stack_ptr<wchar_t> inwbuffer(_malloca_crt_t(wchar_t, inbuff_size));\r\n    if (!inwbuffer) {\r\n        return 0;\r\n    }\r\n\r\n    // do the conversion\r\n    if (0 == MultiByteToWideChar(code_page, MB_PRECOMPOSED, lpSrcStr, cchSrc, inwbuffer.get(), inbuff_size)) {\r\n        return 0;\r\n    }\r\n\r\n    // get size required for string mapping\r\n    int retval = LCMapStringEx(LocaleName, dwMapFlags, inwbuffer.get(), inbuff_size, nullptr, 0, nullptr, nullptr, 0);\r\n    if (0 == retval) {\r\n        return 0;\r\n    }\r\n\r\n    if (dwMapFlags & LCMAP_SORTKEY) {\r\n        // retval is size in BYTES\r\n        if (0 != cchDest) {\r\n            if (retval > cchDest) {\r\n                return retval;\r\n            }\r\n\r\n            // CodeQL [SM02986] This cast is correct: LCMAP_SORTKEY stores \"an opaque array of bytes\".\r\n            const auto wide_dest = reinterpret_cast<LPWSTR>(lpDestStr);\r\n\r\n            // do string mapping\r\n            if (0\r\n                == LCMapStringEx(\r\n                    LocaleName, dwMapFlags, inwbuffer.get(), inbuff_size, wide_dest, cchDest, nullptr, nullptr, 0)) {\r\n                return retval;\r\n            }\r\n        }\r\n    } else {\r\n        // retval is size in wide chars\r\n        int outbuff_size = retval;\r\n\r\n        // allocate enough space for wide chars (includes null terminator if any)\r\n        const __crt_scoped_stack_ptr<wchar_t> outwbuffer(_malloca_crt_t(wchar_t, outbuff_size));\r\n        if (!outwbuffer) {\r\n            return retval;\r\n        }\r\n\r\n        // do string mapping\r\n        if (0\r\n            == LCMapStringEx(LocaleName, dwMapFlags, inwbuffer.get(), inbuff_size, outwbuffer.get(), outbuff_size,\r\n                nullptr, nullptr, 0)) {\r\n            return retval;\r\n        }\r\n\r\n        if (0 == cchDest) {\r\n            // get size required\r\n            retval = WideCharToMultiByte(code_page, 0, outwbuffer.get(), outbuff_size, nullptr, 0, nullptr, nullptr);\r\n        } else {\r\n            // convert mapping\r\n            retval =\r\n                WideCharToMultiByte(code_page, 0, outwbuffer.get(), outbuff_size, lpDestStr, cchDest, nullptr, nullptr);\r\n        }\r\n    }\r\n\r\n    return retval;\r\n}\r\n"
  },
  {
    "path": "stl/src/StlLCMapStringW.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstring> // for wcsnlen\r\n\r\n#include \"awint.hpp\"\r\n\r\n// int __cdecl __crtLCMapStringW - Get type information about a wide string.\r\n//\r\n// Purpose:\r\n//        Internal support function. Assumes info in wide string format.\r\n//\r\n// Entry:\r\n//        LPCWSTR  locale_name       - locale context for the comparison.\r\n//        DWORD    map_flags         - see https://learn.microsoft.com/windows/win32/api/winnls/nf-winnls-lcmapstringex\r\n//        LPCWSTR  source            - pointer to string to be mapped\r\n//        int      source_count      - wide char (word) count of input string\r\n//                                     (including null terminator if any)\r\n//                                     (-1 if null terminated)\r\n//        LPWSTR   destination       - pointer to memory to store mapping\r\n//        int      destination_count - wide char (word) count of buffer (including L'\\0')\r\n//\r\n//        NOTE:    if LCMAP_SORTKEY is specified, then cchDest refers to number\r\n//                 of BYTES, not number of wide chars. The return string will be\r\n//                 a series of bytes with a null terminator.\r\n//\r\n// Exit:\r\n//        Success: if LCMAP_SORTKEY:\r\n//                    number of bytes written to destination (including null terminator)\r\n//                 else\r\n//                    number of wide characters written to destination (including null terminator)\r\n//        Failure: 0\r\nextern \"C\" _CRTIMP2 int __cdecl __crtLCMapStringW(_In_opt_z_ LPCWSTR const locale_name, _In_ DWORD const map_flags,\r\n    _In_reads_(source_count) LPCWSTR const source, _In_ int source_count,\r\n    _Out_writes_opt_(destination_count) wchar_t* const destination, _In_ int const destination_count) noexcept {\r\n    // LCMapString will map past the null terminator.  We must find the null terminator if it occurs in the string\r\n    // before source_count characters and cap the number of characters to be considered.\r\n    if (source_count > 0) {\r\n        const int source_length = static_cast<int>(wcsnlen(source, source_count));\r\n\r\n        // Include the null terminator if the source string is terminated within the buffer.\r\n        if (source_length < source_count) {\r\n            source_count = source_length + 1;\r\n        } else {\r\n            source_count = source_length;\r\n        }\r\n    }\r\n\r\n    return LCMapStringEx(\r\n        locale_name, map_flags, source, source_count, destination, destination_count, nullptr, nullptr, 0);\r\n}\r\n"
  },
  {
    "path": "stl/src/_tolower.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// convert character to lower case\r\n\r\n#include <yvals.h>\r\n\r\n#include <__msvc_xlocinfo_types.hpp>\r\n#include <cctype>\r\n#include <clocale>\r\n#include <cstdlib>\r\n#include <internal_shared.h>\r\n\r\n#include \"awint.hpp\"\r\n\r\n// remove macro definitions of _tolower() and tolower()\r\n#undef _tolower\r\n#undef tolower\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n// int _Tolower(c) - convert character to lower case\r\n//\r\n// Purpose:\r\n//     _Tolower() is a version of tolower with a locale argument.\r\n//\r\n// Entry:\r\n//     c - int value of character to be converted\r\n//     const _Ctypevec * = pointer to locale info\r\n//\r\n// Exit:\r\n//     returns int value of lower case representation of c\r\n//\r\n// Exceptions:\r\n//     None.\r\n_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Tolower(int c, const _Ctypevec* ploc) noexcept {\r\n    int size;\r\n    unsigned char inbuffer[3];\r\n    unsigned char outbuffer[3];\r\n\r\n    UINT codepage;\r\n    const wchar_t* locale_name;\r\n\r\n    if (ploc == nullptr) {\r\n        locale_name = ___lc_locale_name_func()[LC_CTYPE];\r\n        codepage    = ___lc_codepage_func();\r\n    } else {\r\n        locale_name = ploc->_LocaleName;\r\n        codepage    = ploc->_Page;\r\n    }\r\n\r\n    if (locale_name == nullptr) {\r\n        if (c >= 'A' && c <= 'Z') {\r\n            c = c + ('a' - 'A');\r\n        }\r\n\r\n        return c;\r\n    }\r\n\r\n    // if checking case of c does not require API call, do it\r\n    if (static_cast<unsigned int>(c) < 256) {\r\n        if (ploc == nullptr) {\r\n            if (!isupper(c)) {\r\n                return c;\r\n            }\r\n        } else {\r\n            if (!(ploc->_Table[c] & _UPPER)) {\r\n                return c;\r\n            }\r\n        }\r\n    }\r\n\r\n    // convert int c to multibyte string\r\n    if (ploc == nullptr ? _cpp_isleadbyte((c >> 8) & 0xff) : (ploc->_Table[(c >> 8) & 0xff] & _LEADBYTE) != 0) {\r\n        inbuffer[0] = ((c >> 8) & 0xff);\r\n        inbuffer[1] = static_cast<unsigned char>(c);\r\n        inbuffer[2] = 0;\r\n        size        = 2;\r\n    } else {\r\n        inbuffer[0] = static_cast<unsigned char>(c);\r\n        inbuffer[1] = 0;\r\n        size        = 1;\r\n    }\r\n\r\n    // convert wide char to lowercase\r\n    size = __crtLCMapStringA(locale_name, LCMAP_LOWERCASE, reinterpret_cast<const char*>(inbuffer), size,\r\n        reinterpret_cast<char*>(outbuffer), 3, codepage, TRUE);\r\n\r\n    if (size == 0) {\r\n        return c;\r\n    }\r\n\r\n    // construct integer return value\r\n    if (size == 1) {\r\n        return static_cast<int>(outbuffer[0]);\r\n    } else {\r\n        return static_cast<int>(outbuffer[1]) | (static_cast<int>(outbuffer[0]) << 8);\r\n    }\r\n}\r\n\r\n_CRTIMP2_PURE _Ctypevec __CLRCALL_PURE_OR_CDECL _Getctype() noexcept {\r\n    // get ctype info for current locale\r\n    _Ctypevec ctype;\r\n\r\n    ctype._Page  = ___lc_codepage_func();\r\n    ctype._Table = static_cast<const short*>(_calloc_crt(256, sizeof(*__pctype_func())));\r\n    if (ctype._Table != nullptr) {\r\n        memcpy(const_cast<short*>(ctype._Table), __pctype_func(), 256 * sizeof(*__pctype_func()));\r\n        ctype._Delfl = 1;\r\n    } else {\r\n        ctype._Table = reinterpret_cast<const short*>(__pctype_func());\r\n        ctype._Delfl = 0;\r\n    }\r\n    ctype._LocaleName = ___lc_locale_name_func()[LC_COLLATE];\r\n    if (ctype._LocaleName) {\r\n        ctype._LocaleName = _wcsdup_dbg(ctype._LocaleName, _CRT_BLOCK, __FILE__, __LINE__);\r\n    }\r\n\r\n    return ctype;\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/_toupper.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// convert character to uppercase\r\n\r\n#include <yvals.h>\r\n\r\n#include <__msvc_xlocinfo_types.hpp>\r\n#include <cctype>\r\n#include <clocale>\r\n#include <cstddef>\r\n\r\n#include \"awint.hpp\"\r\n\r\n// remove macro definitions of _toupper() and toupper()\r\n#undef _toupper\r\n#undef toupper\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n// int _Toupper(c) - convert character to uppercase\r\n//\r\n// Purpose:\r\n//     _Toupper() is a version of toupper with a locale argument.\r\n//\r\n// Entry:\r\n//     c - int value of character to be converted\r\n//     const _Ctypevec * = pointer to locale info\r\n//\r\n// Exit:\r\n//     returns int value of uppercase representation of c\r\n//\r\n// Exceptions:\r\n//     None.\r\n_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Toupper(int c, const _Ctypevec* ploc) noexcept {\r\n    int size;\r\n    unsigned char inbuffer[3];\r\n    unsigned char outbuffer[3];\r\n\r\n    const wchar_t* locale_name;\r\n    UINT codepage;\r\n\r\n    if (ploc == nullptr) {\r\n        locale_name = ___lc_locale_name_func()[LC_CTYPE];\r\n        codepage    = ___lc_codepage_func();\r\n    } else {\r\n        locale_name = ploc->_LocaleName;\r\n        codepage    = ploc->_Page;\r\n    }\r\n\r\n    if (locale_name == nullptr) {\r\n        if (c >= 'a' && c <= 'z') {\r\n            c = c - ('a' - 'A');\r\n        }\r\n\r\n        return c;\r\n    }\r\n\r\n    // if checking case of c does not require API call, do it\r\n    if (static_cast<unsigned int>(c) < 256) {\r\n        if (ploc == nullptr) {\r\n            if (!islower(c)) {\r\n                return c;\r\n            }\r\n        } else {\r\n            if (!(ploc->_Table[c] & _LOWER)) {\r\n                return c;\r\n            }\r\n        }\r\n    }\r\n\r\n    // convert int c to multibyte string\r\n    if (ploc == nullptr ? _cpp_isleadbyte((c >> 8) & 0xff) : (ploc->_Table[(c >> 8) & 0xff] & _LEADBYTE) != 0) {\r\n        inbuffer[0] = ((c >> 8) & 0xff);\r\n        inbuffer[1] = static_cast<unsigned char>(c);\r\n        inbuffer[2] = 0;\r\n        size        = 2;\r\n    } else {\r\n        inbuffer[0] = static_cast<unsigned char>(c);\r\n        inbuffer[1] = 0;\r\n        size        = 1;\r\n    }\r\n\r\n    // convert wide char to uppercase\r\n    size = __crtLCMapStringA(locale_name, LCMAP_UPPERCASE, reinterpret_cast<const char*>(inbuffer), size,\r\n        reinterpret_cast<char*>(outbuffer), 3, codepage, TRUE);\r\n\r\n    if (size == 0) {\r\n        return c;\r\n    }\r\n\r\n    // construct integer return value\r\n    if (size == 1) {\r\n        return static_cast<int>(outbuffer[0]);\r\n    } else {\r\n        return static_cast<int>(outbuffer[1]) | (static_cast<int>(outbuffer[0]) << 8);\r\n    }\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/alias_init_once_begin_initialize.asm",
    "content": "; Copyright (c) Microsoft Corporation.\r\n; SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n; weak symbol aliases\r\n\r\n; This checks if we're in x64 mode (using ml64).\r\n; Note that RAX isn't really an assembler symbol,\r\n; and this check only works in the IFDEF direction.\r\n; That is:\r\n; IFDEF RAX\r\n;   meow\r\n; ENDIF\r\n; will expand to meow on only x64 systems, however:\r\n; IFNDEF RAX\r\n;   meow\r\n; ENDIF\r\n; will expand to meow on _BOTH_ x64 and x86 systems.\r\nIFDEF RAX\r\n    EXTERN __imp_InitOnceBeginInitialize : PROC\r\n    ALIAS <__imp___std_init_once_begin_initialize> = <__imp_InitOnceBeginInitialize>\r\nELSE\r\n    EXTERN __imp__InitOnceBeginInitialize@16 : PROC\r\n    ALIAS <__imp____std_init_once_begin_initialize@16> = <__imp__InitOnceBeginInitialize@16>\r\nENDIF\r\n\r\nEND\r\n"
  },
  {
    "path": "stl/src/alias_init_once_complete.asm",
    "content": "; Copyright (c) Microsoft Corporation.\r\n; SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n; weak symbol aliases\r\n\r\n; This checks if we're in x64 mode (using ml64).\r\n; Note that RAX isn't really an assembler symbol,\r\n; and this check only works in the IFDEF direction.\r\n; That is:\r\n; IFDEF RAX\r\n;   meow\r\n; ENDIF\r\n; will expand to meow on only x64 systems, however:\r\n; IFNDEF RAX\r\n;   meow\r\n; ENDIF\r\n; will expand to meow on _BOTH_ x64 and x86 systems.\r\nIFDEF RAX\r\n    EXTERN __imp_InitOnceComplete : PROC\r\n    ALIAS <__imp___std_init_once_complete> = <__imp_InitOnceComplete>\r\nELSE\r\n    EXTERN __imp__InitOnceComplete@12 : PROC\r\n    ALIAS <__imp____std_init_once_complete@12> = <__imp__InitOnceComplete@12>\r\nENDIF\r\n\r\nEND\r\n"
  },
  {
    "path": "stl/src/asan.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nnamespace std {\r\n    extern \"C\" {\r\n    extern const bool _Asan_string_should_annotate = true;\r\n    extern const bool _Asan_vector_should_annotate = true;\r\n    } // extern \"C\"\r\n} // namespace std\r\n"
  },
  {
    "path": "stl/src/asan_noop.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nextern \"C\" {\r\nextern const bool _Asan_string_should_annotate_default = false;\r\nextern const bool _Asan_vector_should_annotate_default = false;\r\n\r\nvoid __cdecl __sanitizer_annotate_contiguous_container_default(\r\n    const void*, const void*, const void*, const void*) noexcept {}\r\n} // extern \"C\"\r\n"
  },
  {
    "path": "stl/src/atomic.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// implement shared_ptr spin lock\r\n\r\n#include <yvals.h>\r\n\r\n#include <Windows.h>\r\n\r\nnamespace {\r\n    SRWLOCK _Shared_ptr_lock = SRWLOCK_INIT;\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n_CRTIMP2_PURE void __cdecl _Lock_shared_ptr_spin_lock() noexcept { // TRANSITION, ABI: \"spin_lock\" name is outdated\r\n    AcquireSRWLockExclusive(&_Shared_ptr_lock);\r\n}\r\n\r\n_CRTIMP2_PURE void __cdecl _Unlock_shared_ptr_spin_lock() noexcept { // release previously obtained lock\r\n    _Analysis_assume_lock_held_(_Shared_ptr_lock);\r\n    ReleaseSRWLockExclusive(&_Shared_ptr_lock);\r\n}\r\n\r\n} // extern \"C\"\r\n"
  },
  {
    "path": "stl/src/atomic_wait.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// implement atomic wait / notify_one / notify_all\r\n\r\n#include <atomic>\r\n#include <cstdint>\r\n#include <cstdlib>\r\n#include <new>\r\n#include <thread>\r\n\r\n#include <Windows.h>\r\n\r\n#pragma comment(lib, \"synchronization\")\r\n\r\nnamespace {\r\n    constexpr unsigned long long _Atomic_wait_no_deadline = 0xFFFF'FFFF'FFFF'FFFF;\r\n\r\n    constexpr size_t _Wait_table_size_power = 8;\r\n    constexpr size_t _Wait_table_size       = 1 << _Wait_table_size_power;\r\n    constexpr size_t _Wait_table_index_mask = _Wait_table_size - 1;\r\n\r\n    struct _Wait_context {\r\n        const void* _Storage; // Pointer to wait on\r\n        _Wait_context* _Next;\r\n        _Wait_context* _Prev;\r\n        CONDITION_VARIABLE _Condition;\r\n    };\r\n\r\n    struct [[nodiscard]] _Guarded_wait_context : _Wait_context {\r\n        _Guarded_wait_context(const void* _Storage_, _Wait_context* const _Head) noexcept\r\n            : _Wait_context{_Storage_, _Head, _Head->_Prev, CONDITION_VARIABLE_INIT} {\r\n            _Prev->_Next = this;\r\n            _Next->_Prev = this;\r\n        }\r\n\r\n        ~_Guarded_wait_context() {\r\n            const auto _Next_local = _Next;\r\n            const auto _Prev_local = _Prev;\r\n            _Next->_Prev           = _Prev_local;\r\n            _Prev->_Next           = _Next_local;\r\n        }\r\n\r\n        _Guarded_wait_context(const _Guarded_wait_context&)            = delete;\r\n        _Guarded_wait_context& operator=(const _Guarded_wait_context&) = delete;\r\n    };\r\n\r\n    class [[nodiscard]] _SrwLock_guard {\r\n    public:\r\n        explicit _SrwLock_guard(SRWLOCK& _Locked_) noexcept : _Locked(&_Locked_) {\r\n            AcquireSRWLockExclusive(_Locked);\r\n        }\r\n\r\n        ~_SrwLock_guard() {\r\n            ReleaseSRWLockExclusive(_Locked);\r\n        }\r\n\r\n        _SrwLock_guard(const _SrwLock_guard&)            = delete;\r\n        _SrwLock_guard& operator=(const _SrwLock_guard&) = delete;\r\n\r\n    private:\r\n        SRWLOCK* _Locked;\r\n    };\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4324) // structure was padded due to alignment specifier\r\n    struct alignas(_STD hardware_destructive_interference_size) _Wait_table_entry {\r\n        SRWLOCK _Lock = SRWLOCK_INIT;\r\n        // Initialize to all zeros, self-link lazily to optimize for space.\r\n        // Since _Wait_table_entry is initialized to all zero bytes,\r\n        // _Atomic_wait_table_entry::wait_table will also be all zero bytes.\r\n        // It can thus can be stored in the .bss section, and not in the actual binary.\r\n        _Wait_context _Wait_list_head = {nullptr, nullptr, nullptr, CONDITION_VARIABLE_INIT};\r\n\r\n        constexpr _Wait_table_entry() noexcept = default;\r\n    };\r\n#pragma warning(pop)\r\n\r\n    [[nodiscard]] _Wait_table_entry& _Atomic_wait_table_entry(const void* const _Storage) noexcept {\r\n        static _Wait_table_entry wait_table[_Wait_table_size];\r\n        auto index = reinterpret_cast<_STD uintptr_t>(_Storage);\r\n        index ^= index >> (_Wait_table_size_power * 2);\r\n        index ^= index >> _Wait_table_size_power;\r\n        return wait_table[index & _Wait_table_index_mask];\r\n    }\r\n\r\n    void _Assume_timeout() noexcept {\r\n#ifdef _DEBUG\r\n        if (GetLastError() != ERROR_TIMEOUT) {\r\n            _CSTD abort();\r\n        }\r\n#endif // defined(_DEBUG)\r\n    }\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\nint __stdcall __std_atomic_wait_direct(const void* const _Storage, void* const _Comparand, const size_t _Size,\r\n    const unsigned long _Remaining_timeout) noexcept {\r\n    const auto _Result =\r\n        WaitOnAddress(const_cast<volatile void*>(_Storage), const_cast<void*>(_Comparand), _Size, _Remaining_timeout);\r\n\r\n    if (!_Result) {\r\n        _Assume_timeout();\r\n    }\r\n    return _Result;\r\n}\r\n\r\nvoid __stdcall __std_atomic_notify_one_direct(const void* const _Storage) noexcept {\r\n    WakeByAddressSingle(const_cast<void*>(_Storage));\r\n}\r\n\r\nvoid __stdcall __std_atomic_notify_all_direct(const void* const _Storage) noexcept {\r\n    WakeByAddressAll(const_cast<void*>(_Storage));\r\n}\r\n\r\nvoid __stdcall __std_atomic_notify_one_indirect(const void* const _Storage) noexcept {\r\n    auto& _Entry = _Atomic_wait_table_entry(_Storage);\r\n    _SrwLock_guard _Guard(_Entry._Lock);\r\n    _Wait_context* _Context = _Entry._Wait_list_head._Next;\r\n\r\n    if (_Context == nullptr) {\r\n        return;\r\n    }\r\n\r\n    for (; _Context != &_Entry._Wait_list_head; _Context = _Context->_Next) {\r\n        if (_Context->_Storage == _Storage) {\r\n            // Can't move wake outside SRWLOCKed section: SRWLOCK also protects the _Context itself\r\n            WakeAllConditionVariable(&_Context->_Condition);\r\n            break;\r\n        }\r\n    }\r\n}\r\n\r\nvoid __stdcall __std_atomic_notify_all_indirect(const void* const _Storage) noexcept {\r\n    auto& _Entry = _Atomic_wait_table_entry(_Storage);\r\n    _SrwLock_guard _Guard(_Entry._Lock);\r\n    _Wait_context* _Context = _Entry._Wait_list_head._Next;\r\n\r\n    if (_Context == nullptr) {\r\n        return;\r\n    }\r\n\r\n    for (; _Context != &_Entry._Wait_list_head; _Context = _Context->_Next) {\r\n        if (_Context->_Storage == _Storage) {\r\n            // Can't move wake outside SRWLOCKed section: SRWLOCK also protects the _Context itself\r\n            WakeAllConditionVariable(&_Context->_Condition);\r\n        }\r\n    }\r\n}\r\n\r\nint __stdcall __std_atomic_wait_indirect(const void* _Storage, void* _Comparand, size_t _Size, void* _Param,\r\n    _Atomic_wait_indirect_equal_callback_t _Are_equal, unsigned long _Remaining_timeout) noexcept {\r\n    auto& _Entry = _Atomic_wait_table_entry(_Storage);\r\n\r\n    _SrwLock_guard _Guard(_Entry._Lock);\r\n\r\n    if (_Entry._Wait_list_head._Next == nullptr) {\r\n        _Entry._Wait_list_head._Next = &_Entry._Wait_list_head;\r\n        _Entry._Wait_list_head._Prev = &_Entry._Wait_list_head;\r\n    }\r\n\r\n    _Guarded_wait_context _Context{_Storage, &_Entry._Wait_list_head};\r\n    for (;;) {\r\n        if (!_Are_equal(_Storage, _Comparand, _Size, _Param)) { // note: under lock to prevent lost wakes\r\n            return TRUE;\r\n        }\r\n\r\n        if (!SleepConditionVariableSRW(&_Context._Condition, &_Entry._Lock, _Remaining_timeout, 0)) {\r\n            _Assume_timeout();\r\n            return FALSE;\r\n        }\r\n\r\n        if (_Remaining_timeout != __std_atomic_wait_no_timeout) {\r\n            // spurious wake to recheck the clock\r\n            return TRUE;\r\n        }\r\n    }\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nunsigned long long __stdcall __std_atomic_wait_get_deadline(const unsigned long long _Timeout) noexcept {\r\n    if (_Timeout == _Atomic_wait_no_deadline) {\r\n        return _Atomic_wait_no_deadline;\r\n    } else {\r\n        return GetTickCount64() + _Timeout;\r\n    }\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nunsigned long __stdcall __std_atomic_wait_get_remaining_timeout(unsigned long long _Deadline) noexcept {\r\n    static_assert(__std_atomic_wait_no_timeout == INFINITE,\r\n        \"__std_atomic_wait_no_timeout is passed directly to underlying API, so should match it\");\r\n\r\n    if (_Deadline == _Atomic_wait_no_deadline) {\r\n        return INFINITE;\r\n    }\r\n\r\n    const unsigned long long _Current_time = GetTickCount64();\r\n    if (_Current_time >= _Deadline) {\r\n        return 0;\r\n    }\r\n\r\n    unsigned long long _Remaining     = _Deadline - _Current_time;\r\n    constexpr unsigned long _Ten_days = 864'000'000;\r\n    if (_Remaining > _Ten_days) {\r\n        return _Ten_days;\r\n    }\r\n    return static_cast<unsigned long>(_Remaining);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nenum class __std_atomic_api_level : unsigned long { __not_set, __detecting, __has_srwlock, __has_wait_on_address };\r\n__std_atomic_api_level __stdcall __std_atomic_set_api_level(__std_atomic_api_level) noexcept {\r\n    return __std_atomic_api_level::__has_wait_on_address;\r\n}\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4324) // structure was padded due to alignment specifier\r\n_Smtx_t* __stdcall __std_atomic_get_mutex(const void* const _Key) noexcept {\r\n    constexpr size_t _Table_size_power = 8;\r\n    constexpr size_t _Table_size       = 1 << _Table_size_power;\r\n    constexpr size_t _Table_index_mask = _Table_size - 1;\r\n\r\n    struct alignas(std::hardware_destructive_interference_size) _Table_entry {\r\n        _Smtx_t _Mutex;\r\n    };\r\n\r\n    static _Table_entry _Table[_Table_size]{};\r\n\r\n    auto _Index = reinterpret_cast<std::uintptr_t>(_Key);\r\n    _Index ^= _Index >> (_Table_size_power * 2);\r\n    _Index ^= _Index >> _Table_size_power;\r\n    return &_Table[_Index & _Table_index_mask]._Mutex;\r\n}\r\n#pragma warning(pop)\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n[[nodiscard]] unsigned char __stdcall __std_atomic_compare_exchange_128(_Inout_bytecount_(16) long long* _Destination,\r\n    _In_ long long _ExchangeHigh, _In_ long long _ExchangeLow,\r\n    _Inout_bytecount_(16) long long* _ComparandResult) noexcept {\r\n#ifdef _WIN64\r\n    return _InterlockedCompareExchange128(_Destination, _ExchangeHigh, _ExchangeLow, _ComparandResult);\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n    (void) _Destination;\r\n    (void) _ExchangeHigh;\r\n    (void) _ExchangeLow;\r\n    (void) _ComparandResult;\r\n    _CSTD abort();\r\n#endif // ^^^ 32-bit ^^^\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n[[nodiscard]] char __stdcall __std_atomic_has_cmpxchg16b() noexcept {\r\n#ifdef _WIN64\r\n    return true;\r\n#else\r\n    _CSTD abort();\r\n#endif\r\n}\r\n} // extern \"C\"\r\n"
  },
  {
    "path": "stl/src/awint.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Internal definitions for A&W Win32 wrapper routines.\r\n\r\n// This file is compiled into the import library (via regex.cpp => awint.hpp).\r\n// MAJOR LIMITATIONS apply to what can be included here!\r\n// Before editing this file, read: /docs/import_library.md\r\n\r\n#pragma once\r\n\r\n#include <yvals.h>\r\n\r\n#include <sdkddkver.h>\r\n\r\n#include <Windows.h>\r\n\r\n#define _cpp_isleadbyte(c) (__pctype_func()[static_cast<unsigned char>(c)] & _LEADBYTE)\r\n\r\n_CRT_BEGIN_C_HEADER\r\n\r\n_CRTIMP2 int __cdecl __crtCompareStringA(_In_z_ LPCWSTR _LocaleName, _In_ DWORD _DwCmpFlags,\r\n    _In_reads_(_CchCount1) LPCSTR _LpString1, _In_ int _CchCount1, _In_reads_(_CchCount2) LPCSTR _LpString2,\r\n    _In_ int _CchCount2, _In_ int _CodePage) noexcept;\r\n\r\n_CRTIMP2 int __cdecl __crtCompareStringW(_In_z_ LPCWSTR _LocaleName, _In_ DWORD _DwCmpFlags,\r\n    _In_reads_(_CchCount1) LPCWSTR _LpString1, _In_ int _CchCount1, _In_reads_(_CchCount2) LPCWSTR _LpString2,\r\n    _In_ int _CchCount2) noexcept;\r\n\r\n_CRTIMP2 int __cdecl __crtLCMapStringA(_In_opt_z_ LPCWSTR _LocaleName, _In_ DWORD _DwMapFlag,\r\n    _In_reads_(_CchSrc) LPCSTR _LpSrcStr, _In_ int _CchSrc, _Out_writes_opt_(_CchDest) char* _LpDestStr,\r\n    _In_ int _CchDest, _In_ int _CodePage, _In_ BOOL _BError) noexcept;\r\n\r\n_CRTIMP2 int __cdecl __crtLCMapStringW(_In_opt_z_ LPCWSTR _LocaleName, _In_ DWORD _DWMapFlag,\r\n    _In_reads_(_CchSrc) LPCWSTR _LpSrcStr, _In_ int _CchSrc, _Out_writes_opt_(_CchDest) wchar_t* _LpDestStr,\r\n    _In_ int _CchDest) noexcept;\r\n\r\n_CRT_END_C_HEADER\r\n"
  },
  {
    "path": "stl/src/cerr.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// initialize standard error stream\r\n\r\n#include <fstream>\r\n#include <iostream>\r\n\r\n#include \"init_locks.hpp\"\r\n\r\n#pragma warning(disable : 4074)\r\n#pragma init_seg(compiler)\r\nstatic std::_Init_locks initlocks;\r\n\r\n_STD_BEGIN\r\n\r\n__PURE_APPDOMAIN_GLOBAL static filebuf ferr(stderr);\r\n\r\n#if defined(_M_CEE_PURE)\r\n__PURE_APPDOMAIN_GLOBAL extern ostream cerr(&ferr);\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT ostream cerr(&ferr);\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\nstruct _Init_cerr { // ensures that cerr is initialized\r\n    __CLR_OR_THIS_CALL _Init_cerr() { // initialize cerr\r\n        _Ptr_cerr = &cerr;\r\n        cerr.tie(_Ptr_cout);\r\n        cerr.setf(ios_base::unitbuf);\r\n    }\r\n};\r\n\r\n__PURE_APPDOMAIN_GLOBAL static _Init_cerr init_cerr;\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/charconv.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstdint>\r\n\r\n// Generated by /tools/scripts/charconv_generate.cpp\r\n\r\nnamespace std {\r\n\r\n    extern const uint32_t _Large_power_data[578] = {0x540be400, 0x00000002, 0x63100000, 0x6bc75e2d, 0x00000005,\r\n        0x40000000, 0x4674edea, 0x9f2c9cd0, 0x0000000c, 0xb9f56100, 0x5ca4bfab, 0x6329f1c3, 0x0000001d, 0xb5640000,\r\n        0xc40534fd, 0x926687d2, 0x6c3b15f9, 0x00000044, 0x10000000, 0x946590d9, 0xd762422c, 0x9a224501, 0x4f272617,\r\n        0x0000009f, 0x07950240, 0x245689c1, 0xc5faa71c, 0x73c86d67, 0xebad6ddc, 0x00000172, 0xcec10000, 0x63a22764,\r\n        0xefa418ca, 0xcdd17b25, 0x6bdfef70, 0x9dea3e1f, 0x0000035f, 0xe4000000, 0xcdc3fe6e, 0x66bc0c6a, 0x2e391f32,\r\n        0x5a450203, 0x71d2f825, 0xc3c24a56, 0x000007da, 0xa82e8f10, 0xaab24308, 0x8e211a7c, 0xf38ace40, 0x84c4ce0b,\r\n        0x7ceb0b27, 0xad2594c3, 0x00001249, 0xdd1a4000, 0xcc9f54da, 0xdc5961bf, 0xc75cabab, 0xf505440c, 0xd1bc1667,\r\n        0xfbb7af52, 0x608f8d29, 0x00002a94, 0x21000000, 0x17bb8a0c, 0x56af8ea4, 0x06479fa9, 0x5d4bb236, 0x80dc5fe0,\r\n        0xf0feaa0a, 0xa88ed940, 0x6b1a80d0, 0x00006323, 0x324c3864, 0x8357c796, 0xe44a42d5, 0xd9a92261, 0xbd3c103d,\r\n        0x91e5f372, 0xc0591574, 0xec1da60d, 0x102ad96c, 0x0000e6d3, 0x1e851000, 0x6e4f615b, 0x187b2a69, 0x0450e21c,\r\n        0x2fdd342b, 0x635027ee, 0xa6c97199, 0x8e4ae916, 0x17082e28, 0x1a496e6f, 0x0002196e, 0x32400000, 0x04ad4026,\r\n        0xf91e7250, 0x2994d1d5, 0x665bcdbb, 0xa23b2e96, 0x65fa7ddb, 0x77de53ac, 0xb020a29b, 0xc6bff953, 0x4b9425ab,\r\n        0x0004e34d, 0xfbc32d81, 0x5222d0f4, 0xb70f2850, 0x5713f2f3, 0xdc421413, 0xd6395d7d, 0xf8591999, 0x0092381c,\r\n        0x86b314d6, 0x7aa577b9, 0x12b7fe61, 0x000b616a, 0x1d11e400, 0x56c3678d, 0x3a941f20, 0x9b09368b, 0xbd706908,\r\n        0x207665be, 0x9b26c4eb, 0x1567e89d, 0x9d15096e, 0x7132f22b, 0xbe485113, 0x45e5a2ce, 0x001a7f52, 0xbb100000,\r\n        0x02f79478, 0x8c1b74c0, 0xb0f05d00, 0xa9dbc675, 0xe2d9b914, 0x650f72df, 0x77284b4c, 0x6df6e016, 0x514391c2,\r\n        0x2795c9cf, 0xd6e2ab55, 0x9ca8e627, 0x003db1a6, 0x40000000, 0xf4ecd04a, 0x7f2388f0, 0x580a6dc5, 0x43bf046f,\r\n        0xf82d5dc3, 0xee110848, 0xfaa0591c, 0xcdf4f028, 0x192ea53f, 0xbcd671a0, 0x7d694487, 0x10f96e01, 0x791a569d,\r\n        0x008fa475, 0xb9b2e100, 0x8288753c, 0xcd3f1693, 0x89b43a6b, 0x089e87de, 0x684d4546, 0xfddba60c, 0xdf249391,\r\n        0x3068ec13, 0x99b44427, 0xb68141ee, 0x5802cac3, 0xd96851f1, 0x7d7625a2, 0x014e718d, 0xfb640000, 0xf25a83e6,\r\n        0x9457ad0f, 0x0080b511, 0x2029b566, 0xd7c5d2cf, 0xa53f6d7d, 0xcdb74d1c, 0xda9d70de, 0xb716413d, 0x71d0ca4e,\r\n        0xd7e41398, 0x4f403a90, 0xf9ab3fe2, 0x264d776f, 0x030aafe6, 0x10000000, 0x09ab5531, 0xa60c58d2, 0x566126cb,\r\n        0x6a1c8387, 0x7587f4c1, 0x2c44e876, 0x41a047cf, 0xc908059e, 0xa0ba063e, 0xe7cfc8e8, 0xe1fac055, 0xef0144b2,\r\n        0x24207eb0, 0xd1722573, 0xe4b8f981, 0x071505ae, 0x7a3b6240, 0xcea45d4f, 0x4fe24133, 0x210f6d6d, 0xe55633f2,\r\n        0x25c11356, 0x28ebd797, 0xd396eb84, 0x1e493b77, 0x471f2dae, 0x96ad3820, 0x8afaced1, 0x4edecddb, 0x5568c086,\r\n        0xb2695da1, 0x24123c89, 0x107d4571, 0x1c410000, 0x6e174a27, 0xec62ae57, 0xef2289aa, 0xb6a2fbdd, 0x17e1efe4,\r\n        0x3366bdf2, 0x37b48880, 0xbfb82c3e, 0x19acde91, 0xd4f46408, 0x35ff6a4e, 0x67566a0e, 0x40dbb914, 0x782a3bca,\r\n        0x6b329b68, 0xf5afc5d9, 0x266469bc, 0xe4000000, 0xfb805ff4, 0xed55d1af, 0x9b4a20a8, 0xab9757f8, 0x01aefe0a,\r\n        0x4a2ca67b, 0x1ebf9569, 0xc7c41c29, 0xd8d5d2aa, 0xd136c776, 0x93da550c, 0x9ac79d90, 0x254bcba8, 0x0df07618,\r\n        0xf7a88809, 0x3a1f1074, 0xe54811fc, 0x59638ead, 0x97cbe710, 0x26d769e8, 0xb4e4723e, 0x5b90aa86, 0x9c333922,\r\n        0x4b7a0775, 0x2d47e991, 0x9a6ef977, 0x160b40e7, 0x0c92f8c4, 0xf25ff010, 0x25c36c11, 0xc9f98b42, 0x730b919d,\r\n        0x05ff7caf, 0xb0432d85, 0x2d2b7569, 0xa657842c, 0xd01fef10, 0xc77a4000, 0xe8b862e5, 0x10d8886a, 0xc8cd98e5,\r\n        0x108955c5, 0xd059b655, 0x58fbbed4, 0x03b88231, 0x034c4519, 0x194dc939, 0x1fc500ac, 0x794cc0e2, 0x3bc980a1,\r\n        0xe9b12dd1, 0x5e6d22f8, 0x7b38899a, 0xce7919d8, 0x78c67672, 0x79e5b99f, 0xe494034e, 0x00000001, 0xa1000000,\r\n        0x6c5cd4e9, 0x9be47d6f, 0xf93bd9e7, 0x77626fa1, 0xc68b3451, 0xde2b59e8, 0xcf3cde58, 0x2246ff58, 0xa8577c15,\r\n        0x26e77559, 0x17776753, 0xebe6b763, 0xe3fd0a5f, 0x33e83969, 0xa805a035, 0xf631b987, 0x211f0f43, 0xd85a43db,\r\n        0xab1bf596, 0x683f19a2, 0x00000004, 0xbe7dfe64, 0x4bc9042f, 0xe1f5edb0, 0x8fa14eda, 0xe409db73, 0x674fee9c,\r\n        0xa9159f0d, 0xf6b5b5d6, 0x7338960e, 0xeb49c291, 0x5f2b97cc, 0x0f383f95, 0x2091b3f6, 0xd1783714, 0xc1d142df,\r\n        0x153e22de, 0x8aafdf57, 0x77f5e55f, 0xa3e7ca8b, 0x032f525b, 0x42e74f3d, 0x0000000a, 0xf4dd1000, 0x5d450952,\r\n        0xaeb442e1, 0xa3b3342e, 0x3fcda36f, 0xb4287a6e, 0x4bc177f7, 0x67d2c8d0, 0xaea8f8e0, 0xadc93b67, 0x6cc856b3,\r\n        0x959d9d0b, 0x5b48c100, 0x4abe8a3d, 0x52d936f4, 0x71dbe84d, 0xf91c21c5, 0x4a458109, 0xd7aad86a, 0x08e14c7c,\r\n        0x759ba59c, 0xe43c8800, 0x00000017, 0x92400000, 0x04f110d4, 0x186472be, 0x8736c10c, 0x1478abfb, 0xfc51af29,\r\n        0x25eb9739, 0x4c2b3015, 0xa1030e0b, 0x28fe3c3b, 0x7788fcba, 0xb89e4358, 0x733de4a4, 0x7c46f2c2, 0x8f746298,\r\n        0xdb19210f, 0x2ea3b6ae, 0xaa5014b2, 0xea39ab8d, 0x97963442, 0x01dfdfa9, 0xd2f3d3fe, 0xa0790280, 0x00000037,\r\n        0x509c9b01, 0xc7dcadf1, 0x383dad2c, 0x73c64d37, 0xea6d67d0, 0x519ba806, 0xc403f2f8, 0xa052e1a2, 0xd710233a,\r\n        0x448573a9, 0xcf12d9ba, 0x70871803, 0x52dc3a9b, 0xe5b252e8, 0x0717fb4e, 0xbe4da62f, 0x0aabd7e1, 0x8c62ed4f,\r\n        0xceb9ec7b, 0xd4664021, 0xa1158300, 0xcce375e6, 0x842f29f2, 0x00000081, 0x7717e400, 0xd3f5fb64, 0xa0763d71,\r\n        0x7d142fe9, 0x33f44c66, 0xf3b8f12e, 0x130f0d8e, 0x734c9469, 0x60260fa8, 0x3c011340, 0xcc71880a, 0x37a52d21,\r\n        0x8adac9ef, 0x42bb31b4, 0xd6f94c41, 0xc88b056c, 0xe20501b8, 0x5297ed7c, 0x62c361c4, 0x87dad8aa, 0xb833eade,\r\n        0x94f06861, 0x13cc9abd, 0x8dc1d56a, 0x0000012d, 0x13100000, 0xc67a36e8, 0xf416299e, 0xf3493f0a, 0x77a5a6cf,\r\n        0xa4be23a3, 0xcca25b82, 0x3510722f, 0xbe9d447f, 0xa8c213b8, 0xc94c324e, 0xbc9e33ad, 0x76acfeba, 0x2e4c2132,\r\n        0x3e13cd32, 0x70fe91b4, 0xbb5cd936, 0x42149785, 0x46cc1afd, 0xe638ddf8, 0x690787d2, 0x1a02d117, 0x3eb5f1fe,\r\n        0xc3b9abae, 0x1c08ee6f, 0x000002be, 0x40000000, 0x8140c2aa, 0x2cf877d9, 0x71e1d73d, 0xd5e72f98, 0x72516309,\r\n        0xafa819dd, 0xd62a5a46, 0x2a02dcce, 0xce46ddfe, 0x2713248d, 0xb723d2ad, 0xc404bb19, 0xb706cc2b, 0x47b1ebca,\r\n        0x9d094bdc, 0xc5dc02ca, 0x31e6518e, 0x8ec35680, 0x342f58a8, 0x8b041e42, 0xfebfe514, 0x05fffc13, 0x6763790f,\r\n        0x66d536fd, 0xb9e15076, 0x00000662, 0x67b06100, 0xd2010a1a, 0xd005e1c0, 0xdb12733b, 0xa39f2e3f, 0x61b29de2,\r\n        0x2a63dce2, 0x942604bc, 0x6170d59b, 0xc2e32596, 0x140b75b9, 0x1f1d2c21, 0xb8136a60, 0x89d23ba2, 0x60f17d73,\r\n        0xc6cad7df, 0x0669df2b, 0x24b88737, 0x669306ed, 0x19496eeb, 0x938ddb6f, 0x5e748275, 0xc56e9a36, 0x3690b731,\r\n        0xc82842c5, 0x24ae798e, 0x00000ede, 0x41640000, 0xd5889ac1, 0xd9432c99, 0xa280e71a, 0x6bf63d2e, 0x8249793d,\r\n        0x79e7a943, 0x22fde64a, 0xe0d6709a, 0x05cacfef, 0xbd8da4d7, 0xe364006c, 0xa54edcb3, 0xa1a8086e, 0x748f459e,\r\n        0xfc8e54c8, 0xcc74c657, 0x42b8c3d4, 0x57d9636e, 0x35b55bcc, 0x6c13fee9, 0x1ac45161, 0xb595badb, 0xa1f14e9d,\r\n        0xdcf9e750, 0x07637f71, 0xde2f9f2b, 0x0000229d, 0x10000000, 0x3c5ebd89, 0xe3773756, 0x3dcba338, 0x81d29e4f,\r\n        0xa4f79e2c, 0xc3f9c774, 0x6a1ce797, 0xac5fe438, 0x07f38b9c, 0xd588ecfa, 0x3e5ac1ac, 0x85afccce, 0x9d1f3f70,\r\n        0xe82d6dd3, 0x177d180c, 0x5e69946f, 0x648e2ce1, 0x95a13948, 0x340fe011, 0xb4173c58, 0x2748f694, 0x7c2657bd,\r\n        0x758bda2e, 0x3b8090a0, 0x2ddbb613, 0x6dcf4890, 0x24e4047e, 0x00005099};\r\n\r\n} // namespace std\r\n"
  },
  {
    "path": "stl/src/cin.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// initialize standard input stream\r\n\r\n#include <fstream>\r\n#include <iostream>\r\n\r\n#include \"init_locks.hpp\"\r\n\r\n#pragma warning(disable : 4074)\r\n#pragma init_seg(compiler)\r\nstatic std::_Init_locks initlocks;\r\n\r\n_STD_BEGIN\r\n\r\n__PURE_APPDOMAIN_GLOBAL static filebuf fin(stdin);\r\n\r\n#if defined(_M_CEE_PURE)\r\n__PURE_APPDOMAIN_GLOBAL extern istream cin(&fin);\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT istream cin(&fin);\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\nstruct _Init_cin { // ensures that cin is initialized\r\n    __CLR_OR_THIS_CALL _Init_cin() { // initialize cin\r\n        _Ptr_cin = &cin;\r\n        cin.tie(_Ptr_cout);\r\n    }\r\n};\r\n\r\n__PURE_APPDOMAIN_GLOBAL static _Init_cin init_cin;\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/clog.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// initialize standard log stream\r\n\r\n#include <fstream>\r\n#include <iostream>\r\n\r\n#include \"init_locks.hpp\"\r\n\r\n#ifndef MRTDLL\r\n#pragma warning(disable : 4074)\r\n#pragma init_seg(compiler)\r\nstatic std::_Init_locks initlocks;\r\n#endif // MRTDLL\r\n\r\n_STD_BEGIN\r\n\r\n__PURE_APPDOMAIN_GLOBAL static filebuf flog(stderr);\r\n\r\n#if defined(_M_CEE_PURE)\r\n__PURE_APPDOMAIN_GLOBAL extern ostream clog(&flog);\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT ostream clog(&flog);\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\nstruct _Init_clog { // ensures that clog is initialized\r\n    __CLR_OR_THIS_CALL _Init_clog() { // initialize clog\r\n        _Ptr_clog = &clog;\r\n    }\r\n};\r\n\r\n__PURE_APPDOMAIN_GLOBAL static _Init_clog init_clog;\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/cond.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstdlib>\r\n#include <internal_shared.h>\r\n#include <new>\r\n#include <type_traits>\r\n#include <xthreads.h>\r\n#include <xtimec.h>\r\n\r\n#include \"primitives.hpp\"\r\n\r\nextern \"C\" {\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility (and _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR)\r\n_CRTIMP2_PURE void __cdecl _Cnd_init_in_situ(const _Cnd_t cond) noexcept { // initialize condition variable in situ\r\n    new (cond) _Cnd_internal_imp_t;\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE void __cdecl _Cnd_destroy_in_situ(_Cnd_t) noexcept {} // destroy condition variable in situ\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Cnd_init(_Cnd_t* const pcond) noexcept { // initialize\r\n    *pcond = nullptr;\r\n\r\n    const auto cond = static_cast<_Cnd_t>(_calloc_crt(1, sizeof(_Cnd_internal_imp_t)));\r\n    if (cond == nullptr) {\r\n        return _Thrd_result::_Nomem; // report alloc failed\r\n    }\r\n\r\n    _Cnd_init_in_situ(cond);\r\n    *pcond = cond;\r\n    return _Thrd_result::_Success;\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE void __cdecl _Cnd_destroy(const _Cnd_t cond) noexcept { // clean up\r\n    if (cond) { // something to do, do it\r\n        _free_crt(cond);\r\n    }\r\n}\r\n\r\n// TRANSITION, ABI: should be static; dllexported for binary compatibility\r\n_CRTIMP2_PURE void __cdecl _Mtx_clear_owner(_Mtx_t mtx) noexcept { // set owner to nobody\r\n    mtx->_Thread_id = -1;\r\n    --mtx->_Count;\r\n}\r\n\r\n// TRANSITION, ABI: should be static; dllexported for binary compatibility\r\n_CRTIMP2_PURE void __cdecl _Mtx_reset_owner(_Mtx_t mtx) noexcept { // set owner to current thread\r\n    mtx->_Thread_id = static_cast<long>(GetCurrentThreadId());\r\n    ++mtx->_Count;\r\n}\r\n\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Cnd_wait(const _Cnd_t cond, const _Mtx_t mtx) noexcept { // wait until signaled\r\n    _Mtx_clear_owner(mtx);\r\n    _Primitive_wait(cond, mtx);\r\n    _Mtx_reset_owner(mtx);\r\n    return _Thrd_result::_Success; // TRANSITION, ABI: Always succeeds\r\n}\r\n\r\n// TRANSITION, ABI: preserved for compatibility; wait until signaled or timeout\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Cnd_timedwait(\r\n    const _Cnd_t cond, const _Mtx_t mtx, const _timespec64* const target) noexcept {\r\n    _Thrd_result res = _Thrd_result::_Success;\r\n    if (target == nullptr) { // no target time specified, wait on mutex\r\n        _Mtx_clear_owner(mtx);\r\n        _Primitive_wait(cond, mtx);\r\n        _Mtx_reset_owner(mtx);\r\n    } else { // target time specified, wait for it\r\n        _timespec64 now;\r\n        _Timespec64_get_sys(&now);\r\n        _Mtx_clear_owner(mtx);\r\n        if (!_Primitive_wait_for(cond, mtx, _Xtime_diff_to_millis2(target, &now))) { // report timeout\r\n            _Timespec64_get_sys(&now);\r\n            if (_Xtime_diff_to_millis2(target, &now) == 0) {\r\n                res = _Thrd_result::_Timedout;\r\n            }\r\n        }\r\n        _Mtx_reset_owner(mtx);\r\n    }\r\n    return res;\r\n}\r\n\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Cnd_signal(const _Cnd_t cond) noexcept { // release one waiting thread\r\n    _Primitive_notify_one(cond);\r\n    return _Thrd_result::_Success; // TRANSITION, ABI: Always succeeds\r\n}\r\n\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Cnd_broadcast(const _Cnd_t cond) noexcept { // release all waiting threads\r\n    _Primitive_notify_all(cond);\r\n    return _Thrd_result::_Success; // TRANSITION, ABI: Always succeeds\r\n}\r\n\r\n} // extern \"C\"\r\n\r\n/*\r\n * This file is derived from software bearing the following\r\n * restrictions:\r\n *\r\n * (c) Copyright William E. Kempf 2001\r\n *\r\n * Permission to use, copy, modify, distribute and sell this\r\n * software and its documentation for any purpose is hereby\r\n * granted without fee, provided that the above copyright\r\n * notice appear in all copies and that both that copyright\r\n * notice and this permission notice appear in supporting\r\n * documentation. William E. Kempf makes no representations\r\n * about the suitability of this software for any purpose.\r\n * It is provided \"as is\" without express or implied warranty.\r\n */\r\n"
  },
  {
    "path": "stl/src/cout.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// initialize standard output stream\r\n\r\n#include <fstream>\r\n#include <iostream>\r\n\r\n#include \"init_locks.hpp\"\r\n\r\n#pragma warning(disable : 4074)\r\n#pragma init_seg(compiler)\r\nstatic std::_Init_locks initlocks;\r\n\r\n_STD_BEGIN\r\n\r\n__PURE_APPDOMAIN_GLOBAL static filebuf fout(stdout);\r\n\r\n#if defined(_M_CEE_PURE)\r\n__PURE_APPDOMAIN_GLOBAL extern ostream cout(&fout);\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT ostream cout(&fout);\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\nstruct _Init_cout { // ensures that cout is initialized\r\n    __CLR_OR_THIS_CALL _Init_cout() { // initialize cout\r\n        _Ptr_cout = &cout;\r\n        if (_Ptr_cin != nullptr) {\r\n            _Ptr_cin->tie(_Ptr_cout);\r\n        }\r\n\r\n        if (_Ptr_cerr != nullptr) {\r\n            _Ptr_cerr->tie(_Ptr_cout);\r\n        }\r\n    }\r\n};\r\n\r\n__PURE_APPDOMAIN_GLOBAL static _Init_cout init_cout;\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/cthread.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <bit>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <memory>\r\n#include <process.h>\r\n#include <xthreads.h>\r\n\r\n#include <Windows.h>\r\n\r\nnamespace {\r\n    using _Thrd_start_t = int (*)(void*);\r\n\r\n    struct _Thrd_binder { // bind function pointer and data to pass to thread entry point\r\n        _Thrd_start_t func;\r\n        void* data;\r\n        _Cnd_t* cond;\r\n        _Mtx_t* mtx;\r\n        int* started;\r\n    };\r\n\r\n    using _Thrd_callback_t = unsigned int(__stdcall*)(void*);\r\n\r\n    unsigned int __stdcall _Thrd_runner(void* d) { // call thread function\r\n        _Thrd_binder b = *static_cast<_Thrd_binder*>(d);\r\n        _Mtx_lock(*b.mtx);\r\n        *b.started = 1;\r\n        _Cnd_signal(*b.cond);\r\n        _Mtx_unlock(*b.mtx);\r\n        const unsigned int res = b.func(b.data);\r\n        _Cnd_do_broadcast_at_thread_exit();\r\n        return res;\r\n    }\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n// TRANSITION, ABI: _Thrd_exit() is preserved for binary compatibility\r\n[[noreturn]] _CRTIMP2_PURE void __cdecl _Thrd_exit(int res) noexcept { // terminate execution of calling thread\r\n    _endthreadex(res);\r\n}\r\n\r\n// TRANSITION, ABI: _Thrd_start() is preserved for binary compatibility\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Thrd_start(_Thrd_t* thr, _Thrd_callback_t func, void* b) noexcept {\r\n    // start a thread\r\n    thr->_Hnd = reinterpret_cast<HANDLE>(_beginthreadex(nullptr, 0, func, b, 0, &thr->_Id));\r\n    return thr->_Hnd == nullptr ? _Thrd_result::_Error : _Thrd_result::_Success;\r\n}\r\n\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Thrd_join(_Thrd_t thr, int* code) noexcept { // returns when thread terminates\r\n    if (WaitForSingleObjectEx(thr._Hnd, INFINITE, FALSE) == WAIT_FAILED) {\r\n        return _Thrd_result::_Error;\r\n    }\r\n\r\n    if (code) { // TRANSITION, ABI: code is preserved for binary compatibility\r\n        unsigned long res;\r\n        if (!GetExitCodeThread(thr._Hnd, &res)) {\r\n            return _Thrd_result::_Error;\r\n        }\r\n        *code = static_cast<int>(res);\r\n    }\r\n\r\n    return CloseHandle(thr._Hnd) ? _Thrd_result::_Success : _Thrd_result::_Error;\r\n}\r\n\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Thrd_detach(_Thrd_t thr) noexcept {\r\n    // tell OS to release thread's resources when it terminates\r\n    return CloseHandle(thr._Hnd) ? _Thrd_result::_Success : _Thrd_result::_Error;\r\n}\r\n\r\n// TRANSITION, ABI: _Thrd_sleep() is preserved for binary compatibility\r\n_CRTIMP2_PURE void __cdecl _Thrd_sleep(const _timespec64* xt) noexcept { // suspend thread until time xt\r\n    _timespec64 now;\r\n    _Timespec64_get_sys(&now);\r\n    do { // sleep and check time\r\n        Sleep(_Xtime_diff_to_millis2(xt, &now));\r\n        _Timespec64_get_sys(&now);\r\n    } while (now.tv_sec < xt->tv_sec || now.tv_sec == xt->tv_sec && now.tv_nsec < xt->tv_nsec);\r\n}\r\n\r\n_CRTIMP2_PURE void __cdecl _Thrd_yield() noexcept { // surrender remainder of timeslice\r\n    SwitchToThread();\r\n}\r\n\r\n// TRANSITION, ABI: _Thrd_equal() is preserved for binary compatibility\r\n_CRTIMP2_PURE int __cdecl _Thrd_equal(_Thrd_t thr0, _Thrd_t thr1) noexcept {\r\n    // return 1 if thr0 and thr1 identify same thread\r\n    return thr0._Id == thr1._Id;\r\n}\r\n\r\n// TRANSITION, ABI: _Thrd_current() is preserved for binary compatibility\r\n_CRTIMP2_PURE _Thrd_t __cdecl _Thrd_current() noexcept { // return _Thrd_t identifying current thread\r\n    _Thrd_t result;\r\n    result._Hnd = nullptr;\r\n    result._Id  = GetCurrentThreadId();\r\n    return result;\r\n}\r\n\r\n_CRTIMP2_PURE _Thrd_id_t __cdecl _Thrd_id() noexcept { // return unique id for current thread\r\n    return GetCurrentThreadId();\r\n}\r\n\r\n_CRTIMP2_PURE unsigned int __cdecl _Thrd_hardware_concurrency() noexcept { // return number of processors\r\n    // Most devices have only one processor group and thus have the same buffer_size.\r\n#ifdef _WIN64\r\n    constexpr int stack_buffer_size = 48; // 16 bytes per group\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n    constexpr int stack_buffer_size = 44; // 12 bytes per group\r\n#endif // ^^^ 32-bit ^^^\r\n\r\n    alignas(SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX) unsigned char stack_buffer[stack_buffer_size];\r\n    unsigned char* buffer_ptr = stack_buffer;\r\n    DWORD buffer_size         = stack_buffer_size;\r\n    _STD unique_ptr<unsigned char[]> new_buffer;\r\n\r\n    // https://learn.microsoft.com/windows/win32/api/sysinfoapi/nf-sysinfoapi-getlogicalprocessorinformationex\r\n    // The buffer \"receives a sequence of variable-sized SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX structures\".\r\n    for (;;) {\r\n        if (GetLogicalProcessorInformationEx(RelationProcessorPackage,\r\n                reinterpret_cast<PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX>(buffer_ptr), &buffer_size)) {\r\n            unsigned int logical_processors = 0;\r\n\r\n            while (buffer_size > 0) {\r\n                // Each structure in the buffer describes a processor package (aka socket)...\r\n                const auto structure_ptr  = reinterpret_cast<PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX>(buffer_ptr);\r\n                const auto structure_size = structure_ptr->Size;\r\n\r\n                // ... which contains one or more processor groups.\r\n                for (WORD i = 0; i != structure_ptr->Processor.GroupCount; ++i) {\r\n                    logical_processors += _STD popcount(structure_ptr->Processor.GroupMask[i].Mask);\r\n                }\r\n\r\n                // Step forward to the next structure in the buffer.\r\n                buffer_ptr += structure_size;\r\n                buffer_size -= structure_size;\r\n            }\r\n\r\n            return logical_processors;\r\n        }\r\n\r\n        if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {\r\n            return 0; // API failure\r\n        }\r\n\r\n        new_buffer.reset(::new (_STD nothrow) unsigned char[buffer_size]);\r\n\r\n        if (!new_buffer) {\r\n            return 0; // allocation failure\r\n        }\r\n\r\n        buffer_ptr = new_buffer.get();\r\n    }\r\n}\r\n\r\n// TRANSITION, ABI: _Thrd_create() is preserved for binary compatibility\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Thrd_create(_Thrd_t* thr, _Thrd_start_t func, void* d) noexcept { // create thread\r\n    _Thrd_result res;\r\n    _Thrd_binder b;\r\n    int started = 0;\r\n    _Cnd_internal_imp_t cond_var{};\r\n    _Cnd_t cond = &cond_var;\r\n    _Mtx_internal_imp_t mtx_var{};\r\n    _Mtx_t mtx = &mtx_var;\r\n    _Mtx_init_in_situ(mtx, _Mtx_plain);\r\n    b.func    = func;\r\n    b.data    = d;\r\n    b.cond    = &cond;\r\n    b.mtx     = &mtx;\r\n    b.started = &started;\r\n    _Mtx_lock(mtx);\r\n    if ((res = _Thrd_start(thr, _Thrd_runner, &b)) == _Thrd_result::_Success) { // wait for handshake\r\n        while (!started) {\r\n            _Cnd_wait(cond, mtx);\r\n        }\r\n    }\r\n    _Mtx_unlock(mtx);\r\n    return res;\r\n}\r\n\r\n} // extern \"C\"\r\n\r\n/*\r\n * This file is derived from software bearing the following\r\n * restrictions:\r\n *\r\n * (c) Copyright William E. Kempf 2001\r\n *\r\n * Permission to use, copy, modify, distribute and sell this\r\n * software and its documentation for any purpose is hereby\r\n * granted without fee, provided that the above copyright\r\n * notice appear in all copies and that both that copyright\r\n * notice and this permission notice appear in supporting\r\n * documentation. William E. Kempf makes no representations\r\n * about the suitability of this software for any purpose.\r\n * It is provided \"as is\" without express or implied warranty.\r\n */\r\n"
  },
  {
    "path": "stl/src/dllmain.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <internal_shared.h>\r\n\r\n#include <Windows.h>\r\n\r\nextern \"C\" BOOL APIENTRY DllMain(HMODULE, DWORD, LPVOID) noexcept {\r\n    return TRUE;\r\n}\r\n"
  },
  {
    "path": "stl/src/dllmain_satellite.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <Windows.h>\r\n\r\n// DllMain for 'satellite' DLLs which don't need TLS.\r\n\r\nextern \"C\" BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID) noexcept {\r\n    if (ul_reason_for_call == DLL_PROCESS_ATTACH) {\r\n        if (!DisableThreadLibraryCalls(hModule)) {\r\n            return FALSE;\r\n        }\r\n    }\r\n\r\n    return TRUE;\r\n}\r\n"
  },
  {
    "path": "stl/src/excptptr.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// This implementation communicates with the EH runtime though vcruntime's per-thread-data structure; see\r\n// _pCurrentException in <trnsctrl.h>.\r\n//\r\n// As a result, normal EH runtime services (such as noexcept functions) are safe to use in this file.\r\n\r\n#ifndef _VCRT_ALLOW_INTERNALS\r\n#define _VCRT_ALLOW_INTERNALS\r\n#endif\r\n\r\n#include <Unknwn.h>\r\n#include <cstdlib> // for abort\r\n#include <cstring> // for memcpy\r\n#include <eh.h>\r\n#include <ehdata.h>\r\n#include <exception>\r\n#include <internal_shared.h>\r\n#include <malloc.h>\r\n#include <memory>\r\n#include <new>\r\n#include <stdexcept>\r\n#include <trnsctrl.h>\r\n#include <xcall_once.h>\r\n\r\n#include <Windows.h>\r\n\r\n// Pre-V4 managed exception code\r\n#define MANAGED_EXCEPTION_CODE 0XE0434F4D\r\n\r\n// V4 and later managed exception code\r\n#define MANAGED_EXCEPTION_CODE_V4 0XE0434352\r\n\r\nextern \"C\" _CRTIMP2 void* __cdecl __AdjustPointer(void*, const PMD&); // defined in frame.cpp\r\n\r\nusing namespace std;\r\n\r\nnamespace {\r\n#if defined(_M_CEE_PURE)\r\n    template <class _Ty>\r\n    _Ty& _Immortalize() { // return a reference to an object that will live forever\r\n        /* MAGIC */ static _Immortalizer_impl<_Ty> _Static;\r\n        return reinterpret_cast<_Ty&>(_Static._Storage);\r\n    }\r\n#elif !defined(_M_CEE)\r\n    template <class _Ty>\r\n    struct _Constexpr_excptptr_immortalize_impl {\r\n        union {\r\n            _Ty _Storage;\r\n        };\r\n\r\n        constexpr _Constexpr_excptptr_immortalize_impl() noexcept : _Storage{} {}\r\n\r\n        _Constexpr_excptptr_immortalize_impl(const _Constexpr_excptptr_immortalize_impl&)            = delete;\r\n        _Constexpr_excptptr_immortalize_impl& operator=(const _Constexpr_excptptr_immortalize_impl&) = delete;\r\n\r\n        _MSVC_NOOP_DTOR ~_Constexpr_excptptr_immortalize_impl() {\r\n            // do nothing, allowing _Ty to be used during shutdown\r\n        }\r\n    };\r\n\r\n    template <class _Ty>\r\n    _Constexpr_excptptr_immortalize_impl<_Ty> _Immortalize_impl;\r\n\r\n    template <class _Ty>\r\n    [[nodiscard]] _Ty& _Immortalize() noexcept {\r\n        return _Immortalize_impl<_Ty>._Storage;\r\n    }\r\n#else // ^^^ !defined(_M_CEE) / defined(_M_CEE), TRANSITION, VSO-1153256 vvv\r\n    template <class _Ty>\r\n    _Ty& _Immortalize() { // return a reference to an object that will live forever\r\n        static once_flag _Flag;\r\n        alignas(_Ty) static unsigned char _Storage[sizeof(_Ty)];\r\n        call_once(_Flag, [&_Storage] { ::new (static_cast<void*>(&_Storage)) _Ty(); });\r\n        return reinterpret_cast<_Ty&>(_Storage);\r\n    }\r\n#endif // ^^^ !defined(_M_CEE_PURE) && defined(_M_CEE), TRANSITION, VSO-1153256 ^^^\r\n\r\n    void _PopulateCppExceptionRecord(\r\n        _EXCEPTION_RECORD& _Record, const void* const _PExcept, ThrowInfo* _PThrow) noexcept {\r\n        _Record.ExceptionCode           = EH_EXCEPTION_NUMBER;\r\n        _Record.ExceptionFlags          = EXCEPTION_NONCONTINUABLE;\r\n        _Record.ExceptionRecord         = nullptr; // no SEH to chain\r\n        _Record.ExceptionAddress        = nullptr; // Address of exception. Will be overwritten by OS\r\n        _Record.NumberParameters        = EH_EXCEPTION_PARAMETERS;\r\n        _Record.ExceptionInformation[0] = EH_MAGIC_NUMBER1; // params.magicNumber\r\n        _Record.ExceptionInformation[1] = reinterpret_cast<ULONG_PTR>(_PExcept); // params.pExceptionObject\r\n\r\n        if (_PThrow && (_PThrow->attributes & TI_IsWinRT)) {\r\n            // The pointer to the ExceptionInfo structure is stored sizeof(void*) in front of each WinRT Exception Info.\r\n            const auto _PWei = (*static_cast<WINRTEXCEPTIONINFO** const*>(_PExcept))[-1];\r\n            _PThrow          = _PWei->throwInfo;\r\n        }\r\n\r\n        _Record.ExceptionInformation[2] = reinterpret_cast<ULONG_PTR>(_PThrow); // params.pThrowInfo\r\n\r\n#if _EH_RELATIVE_TYPEINFO\r\n        void* _ThrowImageBase =\r\n            _PThrow ? RtlPcToFileHeader(const_cast<void*>(static_cast<const void*>(_PThrow)), &_ThrowImageBase)\r\n                    : nullptr;\r\n        _Record.ExceptionInformation[3] = reinterpret_cast<ULONG_PTR>(_ThrowImageBase); // params.pThrowImageBase\r\n#endif // _EH_RELATIVE_TYPEINFO\r\n\r\n        // If the throw info indicates this throw is from a pure region,\r\n        // set the magic number to the Pure one, so only a pure-region\r\n        // catch will see it.\r\n        //\r\n        // Also use the Pure magic number on 64-bit platforms if we were unable to\r\n        // determine an image base, since that was the old way to determine\r\n        // a pure throw, before the TI_IsPure bit was added to the FuncInfo\r\n        // attributes field.\r\n        if (_PThrow\r\n            && ((_PThrow->attributes & TI_IsPure)\r\n#if _EH_RELATIVE_TYPEINFO\r\n                || !_ThrowImageBase\r\n#endif // _EH_RELATIVE_TYPEINFO\r\n                )) {\r\n            _Record.ExceptionInformation[0] = EH_PURE_MAGIC_NUMBER1;\r\n        }\r\n    }\r\n\r\n    void _CopyExceptionRecord(_EXCEPTION_RECORD& _Dest, const _EXCEPTION_RECORD& _Src) noexcept {\r\n        _Dest.ExceptionCode = _Src.ExceptionCode;\r\n        // we force EXCEPTION_NONCONTINUABLE because rethrow_exception is [[noreturn]]\r\n        _Dest.ExceptionFlags   = _Src.ExceptionFlags | EXCEPTION_NONCONTINUABLE;\r\n        _Dest.ExceptionRecord  = nullptr; // We don't chain SEH exceptions\r\n        _Dest.ExceptionAddress = nullptr; // Useless field to copy. It will be overwritten by RaiseException()\r\n        const auto _Parameters = _Src.NumberParameters;\r\n        _Dest.NumberParameters = _Parameters;\r\n\r\n        // copy the number of parameters in use\r\n        constexpr auto _Max_parameters = static_cast<DWORD>(EXCEPTION_MAXIMUM_PARAMETERS);\r\n        const auto _In_use             = (_STD min) (_Parameters, _Max_parameters);\r\n        _CSTD memcpy(_Dest.ExceptionInformation, _Src.ExceptionInformation, _In_use * sizeof(ULONG_PTR));\r\n        _CSTD memset(&_Dest.ExceptionInformation[_In_use], 0, (_Max_parameters - _In_use) * sizeof(ULONG_PTR));\r\n    }\r\n\r\n    void _CopyExceptionObject(void* _Dest, const void* _Src, const CatchableType* const _PType\r\n#if _EH_RELATIVE_TYPEINFO\r\n        ,\r\n        const uintptr_t _ThrowImageBase\r\n#endif // _EH_RELATIVE_TYPEINFO\r\n    ) {\r\n        // copy an object of type denoted by *_PType from _Src to _Dest; throws whatever the copy ctor of the type\r\n        // denoted by *_PType throws\r\n        if ((_PType->properties & CT_IsSimpleType) || _PType->copyFunction == 0) {\r\n            memcpy(_Dest, _Src, _PType->sizeOrOffset);\r\n\r\n            if (_PType->properties & CT_IsWinRTHandle) {\r\n                const auto _PUnknown = *static_cast<IUnknown* const*>(_Src);\r\n                if (_PUnknown) {\r\n                    _PUnknown->AddRef();\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n#if _EH_RELATIVE_TYPEINFO\r\n        const auto _CopyFunc = reinterpret_cast<void*>(_ThrowImageBase + _PType->copyFunction);\r\n#else // ^^^ _EH_RELATIVE_TYPEINFO / !_EH_RELATIVE_TYPEINFO vvv\r\n        const auto _CopyFunc = _PType->copyFunction;\r\n#endif // ^^^ !_EH_RELATIVE_TYPEINFO ^^^\r\n\r\n        const auto _Adjusted = __AdjustPointer(const_cast<void*>(_Src), _PType->thisDisplacement);\r\n        if (_PType->properties & CT_HasVirtualBase) {\r\n#ifdef _M_CEE_PURE\r\n            reinterpret_cast<void(__clrcall*)(void*, void*, int)>(_CopyFunc)(_Dest, _Adjusted, 1);\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n            _CallMemberFunction2(_Dest, _CopyFunc, _Adjusted, 1);\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n        } else {\r\n#ifdef _M_CEE_PURE\r\n            reinterpret_cast<void(__clrcall*)(void*, void*)>(_CopyFunc)(_Dest, _Adjusted);\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n            _CallMemberFunction1(_Dest, _CopyFunc, _Adjusted);\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n        }\r\n    }\r\n} // unnamed namespace\r\n\r\n// All exception_ptr implementations are out-of-line because <memory> depends on <exception>,\r\n// which means <exception> cannot include <memory> -- and shared_ptr is defined in <memory>.\r\n// To workaround this, we created a dummy class exception_ptr, which is structurally identical to shared_ptr.\r\n\r\n_STD_BEGIN\r\nstruct _Exception_ptr_access {\r\n    template <class _Ty, class _Ty2>\r\n    static void _Set_ptr_rep(_Ptr_base<_Ty>& _This, _Ty2* _Px, _Ref_count_base* _Rx) noexcept {\r\n        _This._Ptr = _Px;\r\n        _This._Rep = _Rx;\r\n    }\r\n};\r\n_STD_END\r\n\r\nstatic_assert(sizeof(exception_ptr) == sizeof(shared_ptr<const _EXCEPTION_RECORD>)\r\n                  && alignof(exception_ptr) == alignof(shared_ptr<const _EXCEPTION_RECORD>),\r\n    \"std::exception_ptr and std::shared_ptr<const _EXCEPTION_RECORD> must have the same layout.\");\r\n\r\nnamespace {\r\n    template <class _StaticEx>\r\n    class _ExceptionPtr_static final : public _Ref_count_base {\r\n        // reference count control block for special \"never allocates\" exceptions like the bad_alloc or bad_exception\r\n        // exception_ptrs\r\n    private:\r\n        void _Destroy() noexcept override {\r\n            // intentionally does nothing\r\n        }\r\n\r\n        void _Delete_this() noexcept override {\r\n            // intentionally does nothing\r\n        }\r\n\r\n    public:\r\n        // constexpr, TRANSITION P1064\r\n        explicit _ExceptionPtr_static() noexcept : _Ref_count_base() {\r\n            _PopulateCppExceptionRecord(_ExRecord, &_Ex, static_cast<ThrowInfo*>(__GetExceptionInfo(_Ex)));\r\n        }\r\n\r\n        static shared_ptr<const _EXCEPTION_RECORD> _Get() noexcept {\r\n            auto& _Instance = _Immortalize<_ExceptionPtr_static>();\r\n            shared_ptr<const _EXCEPTION_RECORD> _Ret;\r\n            _Instance._Incref();\r\n            _Exception_ptr_access::_Set_ptr_rep(_Ret, &_Instance._ExRecord, &_Instance);\r\n            return _Ret;\r\n        }\r\n\r\n        _EXCEPTION_RECORD _ExRecord;\r\n        _StaticEx _Ex;\r\n    };\r\n\r\n    class _ExceptionPtr_normal final : public _Ref_count_base {\r\n        // reference count control block for exception_ptrs; the exception object is stored at\r\n        // reinterpret_cast<unsigned char*>(this) + sizeof(_ExceptionPtr_normal)\r\n    private:\r\n        void _Destroy() noexcept override {\r\n            // call the destructor for a stored pure or native C++ exception if necessary\r\n            const auto& _CppEhRecord = reinterpret_cast<EHExceptionRecord&>(_ExRecord);\r\n\r\n            if (!PER_IS_MSVC_PURE_OR_NATIVE_EH(&_CppEhRecord)) {\r\n                return;\r\n            }\r\n\r\n            const auto _PThrow = _CppEhRecord.params.pThrowInfo;\r\n            if (!_PThrow) {\r\n                // No ThrowInfo exists. If this was a C++ exception, something must have corrupted it.\r\n                _CSTD abort();\r\n            }\r\n\r\n            if (!_CppEhRecord.params.pExceptionObject) {\r\n                return;\r\n            }\r\n\r\n#if _EH_RELATIVE_TYPEINFO\r\n            const auto _ThrowImageBase     = reinterpret_cast<uintptr_t>(_CppEhRecord.params.pThrowImageBase);\r\n            const auto _CatchableTypeArray = reinterpret_cast<const CatchableTypeArray*>(\r\n                static_cast<uintptr_t>(_PThrow->pCatchableTypeArray) + _ThrowImageBase);\r\n            const auto _PType = reinterpret_cast<CatchableType*>(\r\n                static_cast<uintptr_t>(_CatchableTypeArray->arrayOfCatchableTypes[0]) + _ThrowImageBase);\r\n#else // ^^^ _EH_RELATIVE_TYPEINFO / !_EH_RELATIVE_TYPEINFO vvv\r\n            const auto _PType = _PThrow->pCatchableTypeArray->arrayOfCatchableTypes[0];\r\n#endif // ^^^ !_EH_RELATIVE_TYPEINFO ^^^\r\n\r\n            if (_PThrow->pmfnUnwind) {\r\n                // The exception was a user defined type with a nontrivial destructor, call it\r\n#if defined(_M_CEE_PURE)\r\n                reinterpret_cast<void(__clrcall*)(void*)>(_PThrow->pmfnUnwind)(_CppEhRecord.params.pExceptionObject);\r\n#elif _EH_RELATIVE_TYPEINFO\r\n                _CallMemberFunction0(_CppEhRecord.params.pExceptionObject,\r\n                    reinterpret_cast<void*>(_PThrow->pmfnUnwind + _ThrowImageBase));\r\n#else // ^^^ _EH_RELATIVE_TYPEINFO && !defined(_M_CEE_PURE) / !_EH_RELATIVE_TYPEINFO && !defined(_M_CEE_PURE) vvv\r\n                _CallMemberFunction0(_CppEhRecord.params.pExceptionObject, _PThrow->pmfnUnwind);\r\n#endif // ^^^ !_EH_RELATIVE_TYPEINFO && !defined(_M_CEE_PURE) ^^^\r\n            } else if (_PType->properties & CT_IsWinRTHandle) {\r\n                const auto _PUnknown = *static_cast<IUnknown* const*>(_CppEhRecord.params.pExceptionObject);\r\n                if (_PUnknown) {\r\n                    _PUnknown->Release();\r\n                }\r\n            }\r\n        }\r\n\r\n        void _Delete_this() noexcept override {\r\n            free(this);\r\n        }\r\n\r\n    public:\r\n        explicit _ExceptionPtr_normal(const _EXCEPTION_RECORD& _Record) noexcept : _Ref_count_base() {\r\n            _CopyExceptionRecord(_ExRecord, _Record);\r\n        }\r\n\r\n        _EXCEPTION_RECORD _ExRecord;\r\n        void* _Unused_alignment_padding{};\r\n    };\r\n\r\n    // We aren't using alignas because this file might be compiled with _M_CEE_PURE\r\n    static_assert(sizeof(_ExceptionPtr_normal) % __STDCPP_DEFAULT_NEW_ALIGNMENT__ == 0,\r\n        \"Exception in exception_ptr would be constructed with the wrong alignment\");\r\n\r\n    void _Assign_seh_exception_ptr_from_record(\r\n        shared_ptr<const _EXCEPTION_RECORD>& _Dest, const _EXCEPTION_RECORD& _Record, void* const _RxRaw) noexcept {\r\n        // in the memory _RxRaw, constructs a reference count control block for a SEH exception denoted by _Record\r\n        // if _RxRaw is nullptr, assigns bad_alloc instead\r\n        if (!_RxRaw) {\r\n            _Dest = _ExceptionPtr_static<bad_alloc>::_Get();\r\n            return;\r\n        }\r\n\r\n        const auto _Rx = ::new (_RxRaw) _ExceptionPtr_normal(_Record);\r\n        _Exception_ptr_access::_Set_ptr_rep(_Dest, &_Rx->_ExRecord, _Rx);\r\n    }\r\n\r\n    void _Assign_cpp_exception_ptr_from_record(\r\n        shared_ptr<const _EXCEPTION_RECORD>& _Dest, const EHExceptionRecord& _Record) noexcept {\r\n        // construct a reference count control block for the C++ exception recorded by _Record, and bind it to _Dest\r\n        // if allocating memory for the reference count control block fails, sets _Dest to bad_alloc\r\n        // if copying the exception object referred to _Record throws, constructs a reference count control block for\r\n        //      that exception instead\r\n        // if copying the exception object thrown by copying the original exception object throws, sets _Dest to\r\n        //      bad_exception\r\n        const auto _PThrow = _Record.params.pThrowInfo;\r\n#if _EH_RELATIVE_TYPEINFO\r\n        const auto _ThrowImageBase     = reinterpret_cast<uintptr_t>(_Record.params.pThrowImageBase);\r\n        const auto _CatchableTypeArray = reinterpret_cast<const CatchableTypeArray*>(\r\n            static_cast<uintptr_t>(_PThrow->pCatchableTypeArray) + _ThrowImageBase);\r\n        const auto _PType = reinterpret_cast<CatchableType*>(\r\n            static_cast<uintptr_t>(_CatchableTypeArray->arrayOfCatchableTypes[0]) + _ThrowImageBase);\r\n#else // ^^^ _EH_RELATIVE_TYPEINFO / !_EH_RELATIVE_TYPEINFO vvv\r\n        const auto _PType = _PThrow->pCatchableTypeArray->arrayOfCatchableTypes[0];\r\n#endif // ^^^ !_EH_RELATIVE_TYPEINFO ^^^\r\n\r\n        const auto _ExceptionObjectSize = static_cast<size_t>(_PType->sizeOrOffset);\r\n        const auto _AllocSize           = sizeof(_ExceptionPtr_normal) + _ExceptionObjectSize;\r\n        _Analysis_assume_(_AllocSize >= sizeof(_ExceptionPtr_normal));\r\n        auto _RxRaw = malloc(_AllocSize);\r\n        if (!_RxRaw) {\r\n            _Dest = _ExceptionPtr_static<bad_alloc>::_Get();\r\n            return;\r\n        }\r\n\r\n        try {\r\n            _CopyExceptionObject(static_cast<_ExceptionPtr_normal*>(_RxRaw) + 1, _Record.params.pExceptionObject, _PType\r\n#if _EH_RELATIVE_TYPEINFO\r\n                ,\r\n                _ThrowImageBase\r\n#endif // _EH_RELATIVE_TYPEINFO\r\n            );\r\n\r\n            const auto _Rx = ::new (_RxRaw) _ExceptionPtr_normal(reinterpret_cast<const _EXCEPTION_RECORD&>(_Record));\r\n            reinterpret_cast<EHExceptionRecord&>(_Rx->_ExRecord).params.pExceptionObject =\r\n                static_cast<_ExceptionPtr_normal*>(_RxRaw) + 1;\r\n            _Exception_ptr_access::_Set_ptr_rep(_Dest, &_Rx->_ExRecord, _Rx);\r\n        } catch (...) { // copying the exception object threw an exception\r\n            const auto& _InnerRecord = *_pCurrentException; // exception thrown by the original exception's copy ctor\r\n            if (_InnerRecord.ExceptionCode == MANAGED_EXCEPTION_CODE\r\n                || _InnerRecord.ExceptionCode == MANAGED_EXCEPTION_CODE_V4) {\r\n                // we don't support managed exceptions and don't want to say there's no active exception, so give up and\r\n                // say bad_exception\r\n                free(_RxRaw);\r\n                _Dest = _ExceptionPtr_static<bad_exception>::_Get();\r\n                return;\r\n            }\r\n\r\n            if (!PER_IS_MSVC_PURE_OR_NATIVE_EH(&_InnerRecord)) { // catching a non-C++ exception depends on /EHa\r\n                _Assign_seh_exception_ptr_from_record(\r\n                    _Dest, reinterpret_cast<const _EXCEPTION_RECORD&>(_InnerRecord), _RxRaw);\r\n                return;\r\n            }\r\n\r\n            const auto _PInnerThrow = _InnerRecord.params.pThrowInfo;\r\n#if _EH_RELATIVE_TYPEINFO\r\n            const auto _InnerThrowImageBase     = reinterpret_cast<uintptr_t>(_InnerRecord.params.pThrowImageBase);\r\n            const auto _InnerCatchableTypeArray = reinterpret_cast<const CatchableTypeArray*>(\r\n                static_cast<uintptr_t>(_PInnerThrow->pCatchableTypeArray) + _InnerThrowImageBase);\r\n            const auto _PInnerType = reinterpret_cast<CatchableType*>(\r\n                static_cast<uintptr_t>(_InnerCatchableTypeArray->arrayOfCatchableTypes[0]) + _InnerThrowImageBase);\r\n#else // ^^^ _EH_RELATIVE_TYPEINFO / !_EH_RELATIVE_TYPEINFO vvv\r\n            const auto _PInnerType = _PInnerThrow->pCatchableTypeArray->arrayOfCatchableTypes[0];\r\n#endif // ^^^ !_EH_RELATIVE_TYPEINFO ^^^\r\n\r\n            const auto _InnerExceptionSize = static_cast<size_t>(_PInnerType->sizeOrOffset);\r\n            const auto _InnerAllocSize     = sizeof(_ExceptionPtr_normal) + _InnerExceptionSize;\r\n            if (_InnerAllocSize > _AllocSize) {\r\n                free(_RxRaw);\r\n                _RxRaw = malloc(_InnerAllocSize);\r\n                if (!_RxRaw) {\r\n                    _Dest = _ExceptionPtr_static<bad_alloc>::_Get();\r\n                    return;\r\n                }\r\n            }\r\n\r\n            try {\r\n                _CopyExceptionObject(\r\n                    static_cast<_ExceptionPtr_normal*>(_RxRaw) + 1, _InnerRecord.params.pExceptionObject, _PInnerType\r\n#if _EH_RELATIVE_TYPEINFO\r\n                    ,\r\n                    _ThrowImageBase\r\n#endif // _EH_RELATIVE_TYPEINFO\r\n                );\r\n            } catch (...) { // copying the exception emitted while copying the original exception also threw, give up\r\n                free(_RxRaw);\r\n                _Dest = _ExceptionPtr_static<bad_exception>::_Get();\r\n                return;\r\n            }\r\n\r\n            // this next block must be duplicated inside the catch (even though it looks identical to the block in the\r\n            // try) so that _InnerRecord is held alive; exiting the catch will destroy it\r\n            const auto _Rx =\r\n                ::new (_RxRaw) _ExceptionPtr_normal(reinterpret_cast<const _EXCEPTION_RECORD&>(_InnerRecord));\r\n            reinterpret_cast<EHExceptionRecord&>(_Rx->_ExRecord).params.pExceptionObject =\r\n                static_cast<_ExceptionPtr_normal*>(_RxRaw) + 1;\r\n            _Exception_ptr_access::_Set_ptr_rep(_Dest, &_Rx->_ExRecord, _Rx);\r\n        }\r\n    }\r\n} // unnamed namespace\r\n\r\n_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL __ExceptionPtrCreate(_Out_ void* _Ptr) noexcept {\r\n    ::new (_Ptr) shared_ptr<const _EXCEPTION_RECORD>();\r\n}\r\n\r\n_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL __ExceptionPtrDestroy(_Inout_ void* _Ptr) noexcept {\r\n    static_cast<shared_ptr<const _EXCEPTION_RECORD>*>(_Ptr)->~shared_ptr<const _EXCEPTION_RECORD>();\r\n}\r\n\r\n_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL __ExceptionPtrCopy(_Out_ void* _Dest, _In_ const void* _Src) noexcept {\r\n    ::new (_Dest) shared_ptr<const _EXCEPTION_RECORD>(*static_cast<const shared_ptr<const _EXCEPTION_RECORD>*>(_Src));\r\n}\r\n\r\n_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL __ExceptionPtrAssign(_Inout_ void* _Dest, _In_ const void* _Src) noexcept {\r\n    *static_cast<shared_ptr<const _EXCEPTION_RECORD>*>(_Dest) =\r\n        *static_cast<const shared_ptr<const _EXCEPTION_RECORD>*>(_Src);\r\n}\r\n\r\n_CRTIMP2_PURE bool __CLRCALL_PURE_OR_CDECL __ExceptionPtrCompare(\r\n    _In_ const void* _Lhs, _In_ const void* _Rhs) noexcept {\r\n    return *static_cast<const shared_ptr<const _EXCEPTION_RECORD>*>(_Lhs)\r\n        == *static_cast<const shared_ptr<const _EXCEPTION_RECORD>*>(_Rhs);\r\n}\r\n\r\n_CRTIMP2_PURE bool __CLRCALL_PURE_OR_CDECL __ExceptionPtrToBool(_In_ const void* _Ptr) noexcept {\r\n    return static_cast<bool>(*static_cast<const shared_ptr<const _EXCEPTION_RECORD>*>(_Ptr));\r\n}\r\n\r\n_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL __ExceptionPtrSwap(_Inout_ void* _Lhs, _Inout_ void* _Rhs) noexcept {\r\n    static_cast<shared_ptr<const _EXCEPTION_RECORD>*>(_Lhs)->swap(\r\n        *static_cast<shared_ptr<const _EXCEPTION_RECORD>*>(_Rhs));\r\n}\r\n\r\n_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL __ExceptionPtrCurrentException(void* _Ptr) noexcept {\r\n    const auto _PRecord = _pCurrentException; // nontrivial FLS cost, pay it once\r\n    if (!_PRecord || _PRecord->ExceptionCode == MANAGED_EXCEPTION_CODE\r\n        || _PRecord->ExceptionCode == MANAGED_EXCEPTION_CODE_V4) {\r\n        return; // no current exception, or we don't support managed exceptions\r\n    }\r\n\r\n    auto& _Dest = *static_cast<shared_ptr<const _EXCEPTION_RECORD>*>(_Ptr);\r\n    if (PER_IS_MSVC_PURE_OR_NATIVE_EH(_PRecord)) {\r\n        _Assign_cpp_exception_ptr_from_record(_Dest, *_PRecord);\r\n    } else {\r\n        // _Assign_seh_exception_ptr_from_record handles failed malloc\r\n        _Assign_seh_exception_ptr_from_record(\r\n            _Dest, reinterpret_cast<_EXCEPTION_RECORD&>(*_PRecord), malloc(sizeof(_ExceptionPtr_normal)));\r\n    }\r\n}\r\n\r\n[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL __ExceptionPtrRethrow(_In_ const void* _PtrRaw) {\r\n    const shared_ptr<const _EXCEPTION_RECORD>* _Ptr = static_cast<const shared_ptr<const _EXCEPTION_RECORD>*>(_PtrRaw);\r\n    // throwing a bad_exception if they give us a nullptr exception_ptr\r\n    if (!*_Ptr) {\r\n        throw bad_exception();\r\n    }\r\n\r\n    auto _RecordCopy = **_Ptr;\r\n    auto& _CppRecord = reinterpret_cast<EHExceptionRecord&>(_RecordCopy);\r\n    if (PER_IS_MSVC_PURE_OR_NATIVE_EH(&_CppRecord)) {\r\n        // This is a C++ exception.\r\n        // We need to build the exception on the stack because the current exception mechanism assumes the exception\r\n        // object is on the stack and will call the appropriate destructor (if there's a nontrivial one).\r\n        const auto _PThrow = _CppRecord.params.pThrowInfo;\r\n        if (!_CppRecord.params.pExceptionObject || !_PThrow || !_PThrow->pCatchableTypeArray) {\r\n            // Missing or corrupt ThrowInfo. If this was a C++ exception, something must have corrupted it.\r\n            _CSTD abort();\r\n        }\r\n\r\n#if _EH_RELATIVE_TYPEINFO\r\n        const auto _ThrowImageBase = reinterpret_cast<uintptr_t>(_CppRecord.params.pThrowImageBase);\r\n        const auto _CatchableTypeArray =\r\n            reinterpret_cast<const CatchableTypeArray*>(_ThrowImageBase + _PThrow->pCatchableTypeArray);\r\n#else // ^^^ _EH_RELATIVE_TYPEINFO / !_EH_RELATIVE_TYPEINFO vvv\r\n        const auto _CatchableTypeArray = _PThrow->pCatchableTypeArray;\r\n#endif // ^^^ !_EH_RELATIVE_TYPEINFO ^^^\r\n\r\n        if (_CatchableTypeArray->nCatchableTypes <= 0) {\r\n            // Ditto corrupted.\r\n            _CSTD abort();\r\n        }\r\n\r\n        // we finally got the type info we want\r\n#if _EH_RELATIVE_TYPEINFO\r\n        const auto _PType = reinterpret_cast<CatchableType*>(\r\n            static_cast<uintptr_t>(_CatchableTypeArray->arrayOfCatchableTypes[0]) + _ThrowImageBase);\r\n#else // ^^^ _EH_RELATIVE_TYPEINFO / !_EH_RELATIVE_TYPEINFO vvv\r\n        const auto _PType = _PThrow->pCatchableTypeArray->arrayOfCatchableTypes[0];\r\n#endif // ^^^ !_EH_RELATIVE_TYPEINFO ^^^\r\n\r\n        // Alloc memory on stack for exception object. This might cause a stack overflow SEH exception, or another C++\r\n        // exception when copying the C++ exception object. In that case, we just let that become the thrown exception.\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 6255) //  _alloca indicates failure by raising a stack overflow exception\r\n        void* _PExceptionBuffer = alloca(_PType->sizeOrOffset);\r\n#pragma warning(pop)\r\n        _CopyExceptionObject(_PExceptionBuffer, _CppRecord.params.pExceptionObject, _PType\r\n#if _EH_RELATIVE_TYPEINFO\r\n            ,\r\n            _ThrowImageBase\r\n#endif // _EH_RELATIVE_TYPEINFO\r\n        );\r\n\r\n        _CppRecord.params.pExceptionObject = _PExceptionBuffer;\r\n    } else {\r\n        // this is a SEH exception, no special handling is required\r\n    }\r\n\r\n    _Analysis_assume_(_RecordCopy.NumberParameters <= EXCEPTION_MAXIMUM_PARAMETERS);\r\n    RaiseException(_RecordCopy.ExceptionCode, _RecordCopy.ExceptionFlags, _RecordCopy.NumberParameters,\r\n        _RecordCopy.ExceptionInformation);\r\n}\r\n\r\n_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL __ExceptionPtrCopyException(\r\n    _Inout_ void* _Ptr, _In_ const void* _PExceptRaw, _In_ const void* _PThrowRaw) noexcept {\r\n    _EXCEPTION_RECORD _Record;\r\n    _PopulateCppExceptionRecord(_Record, _PExceptRaw, static_cast<ThrowInfo*>(_PThrowRaw));\r\n    _Assign_cpp_exception_ptr_from_record(\r\n        *static_cast<shared_ptr<const _EXCEPTION_RECORD>*>(_Ptr), reinterpret_cast<const EHExceptionRecord&>(_Record));\r\n}\r\n"
  },
  {
    "path": "stl/src/filesys.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// filesys.cpp -- <experimental/filesystem> implementation\r\n// (see filesystem.cpp for C++17 <filesystem> implementation)\r\n\r\n// TRANSITION, ABI: Everything in this file is preserved for binary compatibility.\r\n\r\n#include <yvals.h>\r\n\r\n#include <cstdint>\r\n#include <cstring>\r\n#include <direct.h>\r\n#include <io.h>\r\n#include <string>\r\n\r\n#include <Windows.h>\r\n\r\n#define _MAX_FILESYS_NAME 260 // longest Windows or Posix filename + 1\r\n\r\n#define _FS_BEGIN              \\\r\n    _STD_BEGIN                 \\\r\n    namespace experimental {   \\\r\n        namespace filesystem { \\\r\n            inline namespace v1 {\r\n\r\n#define _FS_END \\\r\n    }           \\\r\n    }           \\\r\n    }           \\\r\n    _STD_END\r\n\r\n#ifdef _M_CEE_PURE\r\n#define __crtGetTempPath2W(BufferLength, Buffer) GetTempPathW(BufferLength, Buffer)\r\n#else // vvv !defined(_M_CEE_PURE) vvv\r\nextern \"C\" _Success_(return > 0 && return < BufferLength) DWORD __stdcall __crtGetTempPath2W(\r\n    _In_ DWORD BufferLength, _Out_writes_to_opt_(BufferLength, return +1) LPWSTR Buffer) noexcept;\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\n_FS_BEGIN\r\n\r\nenum class file_type { // names for file types\r\n    not_found = -1,\r\n    none,\r\n    regular,\r\n    directory,\r\n    symlink,\r\n    block,\r\n    character,\r\n    fifo,\r\n    socket,\r\n    unknown\r\n};\r\n\r\nenum class perms { // names for permissions\r\n    none             = 0,\r\n    owner_read       = 0400, // S_IRUSR\r\n    owner_write      = 0200, // S_IWUSR\r\n    owner_exec       = 0100, // S_IXUSR\r\n    owner_all        = 0700, // S_IRWXU\r\n    group_read       = 040, // S_IRGRP\r\n    group_write      = 020, // S_IWGRP\r\n    group_exec       = 010, // S_IXGRP\r\n    group_all        = 070, // S_IRWXG\r\n    others_read      = 04, // S_IROTH\r\n    others_write     = 02, // S_IWOTH\r\n    others_exec      = 01, // S_IXOTH\r\n    others_all       = 07, // S_IRWXO\r\n    all              = 0777,\r\n    set_uid          = 04000, // S_ISUID\r\n    set_gid          = 02000, // S_ISGID\r\n    sticky_bit       = 01000, // S_ISVTX\r\n    mask             = 07777,\r\n    unknown          = 0xFFFF,\r\n    add_perms        = 0x10000,\r\n    remove_perms     = 0x20000,\r\n    resolve_symlinks = 0x40000\r\n};\r\n\r\n_BITMASK_OPS(_EMPTY_ARGUMENT, perms)\r\n\r\nstruct space_info { // space information for a file\r\n    uintmax_t capacity;\r\n    uintmax_t free;\r\n    uintmax_t available;\r\n};\r\n\r\nstatic file_type _Map_mode(int _Mode) { // map Windows file attributes to file_status\r\n    constexpr int _File_attribute_regular =\r\n        FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_COMPRESSED | FILE_ATTRIBUTE_ENCRYPTED | FILE_ATTRIBUTE_HIDDEN\r\n        | FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED | FILE_ATTRIBUTE_OFFLINE | FILE_ATTRIBUTE_READONLY\r\n        | FILE_ATTRIBUTE_SPARSE_FILE | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_TEMPORARY;\r\n\r\n    if ((_Mode & FILE_ATTRIBUTE_DIRECTORY) != 0) {\r\n        return file_type::directory;\r\n    } else if ((_Mode & _File_attribute_regular) != 0) {\r\n        return file_type::regular;\r\n    } else {\r\n        return file_type::unknown;\r\n    }\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Close_dir(void* _Handle) noexcept { // close a directory\r\n    FindClose(_Handle);\r\n}\r\n\r\nstatic wchar_t* _Strcpy(wchar_t (&_Dest)[_MAX_FILESYS_NAME], const wchar_t* _Src) { // copy an NTCTS\r\n    ::wcscpy_s(_Dest, _MAX_FILESYS_NAME, _Src);\r\n    return _Dest;\r\n}\r\n\r\nstatic HANDLE _FilesysOpenFile(const wchar_t* _Fname, DWORD _Desired_access, DWORD _Flags) {\r\n    CREATEFILE2_EXTENDED_PARAMETERS _Create_file_parameters = {};\r\n    _Create_file_parameters.dwSize                          = sizeof(_Create_file_parameters);\r\n    _Create_file_parameters.dwFileFlags                     = _Flags;\r\n\r\n    return CreateFile2(_Fname, _Desired_access, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, OPEN_EXISTING,\r\n        &_Create_file_parameters);\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE wchar_t* __CLRCALL_PURE_OR_CDECL _Read_dir(\r\n    wchar_t (&_Dest)[_MAX_FILESYS_NAME], void* _Handle, file_type& _Ftype) noexcept { // read a directory entry\r\n    WIN32_FIND_DATAW _Dentry;\r\n\r\n    while (FindNextFileW(_Handle, &_Dentry)) {\r\n        if (_Dentry.cFileName[0] != L'.'\r\n            || (_Dentry.cFileName[1] != L'\\0'\r\n                && (_Dentry.cFileName[1] != L'.'\r\n                    || _Dentry.cFileName[2] != L'\\0'))) { // not \".\" or \"..\", get file type and return name\r\n            _Ftype = _Map_mode(_Dentry.dwFileAttributes);\r\n            return _Strcpy(_Dest, &_Dentry.cFileName[0]);\r\n        }\r\n    }\r\n\r\n    _Ftype = file_type::unknown;\r\n    return _Strcpy(_Dest, L\"\");\r\n}\r\n\r\nstatic unsigned int _Filesys_code_page() { // determine appropriate code page\r\n#if defined(_ONECORE)\r\n    return CP_ACP;\r\n#else // ^^^ defined(_ONECORE) / !defined(_ONECORE) vvv\r\n    if (AreFileApisANSI()) {\r\n        return CP_ACP;\r\n    } else {\r\n        return CP_OEMCP;\r\n    }\r\n#endif // ^^^ !defined(_ONECORE) ^^^\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _To_wide(const char* _Bsrc, wchar_t* _Wdest) noexcept {\r\n    // return nonzero on success\r\n    return MultiByteToWideChar(_Filesys_code_page(), 0, _Bsrc, -1, _Wdest, _MAX_FILESYS_NAME);\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _To_byte(const wchar_t* _Wsrc, char* _Bdest) noexcept {\r\n    // return nonzero on success\r\n    return WideCharToMultiByte(_Filesys_code_page(), 0, _Wsrc, -1, _Bdest, _MAX_FILESYS_NAME, nullptr, nullptr);\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE void* __CLRCALL_PURE_OR_CDECL _Open_dir(\r\n    wchar_t (&_Dest)[_MAX_FILESYS_NAME], const wchar_t* _Dirname, int& _Errno, file_type& _Ftype) noexcept {\r\n    // open a directory for reading\r\n    WIN32_FIND_DATAW _Dentry;\r\n    wstring _Wildname(_Dirname);\r\n    if (!_Wildname.empty()) {\r\n        _Wildname.append(L\"\\\\*\");\r\n    }\r\n\r\n    void* _Handle =\r\n        FindFirstFileExW(_Wildname.c_str(), FindExInfoStandard, &_Dentry, FindExSearchNameMatch, nullptr, 0);\r\n    if (_Handle == INVALID_HANDLE_VALUE) { // report failure\r\n        _Errno = ERROR_BAD_PATHNAME;\r\n        *_Dest = L'\\0';\r\n        return nullptr;\r\n    }\r\n\r\n    // success, get first directory entry\r\n    _Errno = 0;\r\n    if (_Dentry.cFileName[0] == L'.'\r\n        && (_Dentry.cFileName[1] == L'\\0'\r\n            || _Dentry.cFileName[1] == L'.' && _Dentry.cFileName[2] == L'\\0')) { // skip \".\" and \"..\"\r\n        _Read_dir(_Dest, _Handle, _Ftype);\r\n        if (_Dest[0] == L'\\0') {\r\n            // no entries, release handle\r\n            _Close_dir(_Handle);\r\n            return nullptr;\r\n        }\r\n        return _Handle;\r\n    }\r\n\r\n    // get file type and return handle\r\n    _Strcpy(_Dest, _Dentry.cFileName);\r\n    _Ftype = _Map_mode(_Dentry.dwFileAttributes);\r\n    return _Handle;\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE bool __CLRCALL_PURE_OR_CDECL _Current_get(wchar_t (&_Dest)[_MAX_FILESYS_NAME]) noexcept {\r\n    // get current working directory\r\n    _Strcpy(_Dest, L\"\");\r\n#ifdef _CRT_APP\r\n    return false; // no support\r\n#else // ^^^ defined(_CRT_APP) / !defined(_CRT_APP) vvv\r\n    return _wgetcwd(_Dest, _MAX_FILESYS_NAME) != nullptr;\r\n#endif // ^^^ !defined(_CRT_APP) ^^^\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE bool __CLRCALL_PURE_OR_CDECL _Current_set(const wchar_t* _Dirname) noexcept {\r\n    // set current working directory\r\n#ifdef _CRT_APP\r\n    (void) _Dirname;\r\n    return false; // no support\r\n#else // ^^^ defined(_CRT_APP) / !defined(_CRT_APP) vvv\r\n    return _wchdir(_Dirname) == 0;\r\n#endif // ^^^ !defined(_CRT_APP) ^^^\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE wchar_t* __CLRCALL_PURE_OR_CDECL _Symlink_get(\r\n    wchar_t (&_Dest)[_MAX_FILESYS_NAME], const wchar_t*) noexcept {\r\n    // get symlink -- DUMMY\r\n    _Dest[0] = L'\\0';\r\n    return _Dest;\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE wchar_t* __CLRCALL_PURE_OR_CDECL _Temp_get(wchar_t (&_Dest)[_MAX_FILESYS_NAME]) noexcept {\r\n    // get temp directory\r\n    wchar_t _Dentry[MAX_PATH];\r\n    return _Strcpy(_Dest, __crtGetTempPath2W(MAX_PATH, _Dentry) != 0 ? _Dentry : L\".\");\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Make_dir(const wchar_t* _Fname, const wchar_t*) noexcept {\r\n    // make a new directory (ignore attributes)\r\n    if (CreateDirectoryW(_Fname, nullptr)) {\r\n        return 1;\r\n    } else if (GetLastError() == ERROR_ALREADY_EXISTS) {\r\n        return 0;\r\n    } else {\r\n        return -1;\r\n    }\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE bool __CLRCALL_PURE_OR_CDECL _Remove_dir(\r\n    const wchar_t* _Fname) noexcept { // remove a directory\r\n    return _wrmdir(_Fname) != -1;\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE file_type __CLRCALL_PURE_OR_CDECL _Stat(\r\n    const wchar_t* _Fname, perms* _Pmode) noexcept { // get file status\r\n    WIN32_FILE_ATTRIBUTE_DATA _Data;\r\n\r\n    if (GetFileAttributesExW(_Fname, GetFileExInfoStandard, &_Data)) {\r\n        // get file type and return permissions\r\n        if (_Pmode != nullptr) {\r\n            constexpr perms _Write_perms    = perms::owner_write | perms::group_write | perms::others_write;\r\n            constexpr perms _Readonly_perms = perms::all & ~_Write_perms;\r\n\r\n            *_Pmode = (_Data.dwFileAttributes & FILE_ATTRIBUTE_READONLY) != 0u ? _Readonly_perms : perms::all;\r\n        }\r\n\r\n        return _Map_mode(_Data.dwFileAttributes);\r\n    }\r\n\r\n    // invalid, get error code\r\n    switch (GetLastError()) {\r\n    case ERROR_FILE_NOT_FOUND:\r\n    case ERROR_PATH_NOT_FOUND:\r\n    case ERROR_INVALID_NAME:\r\n    case ERROR_INVALID_DRIVE:\r\n    case ERROR_INVALID_PARAMETER:\r\n    case ERROR_BAD_NETPATH:\r\n    case ERROR_BAD_PATHNAME:\r\n        return file_type::not_found;\r\n    default:\r\n        return file_type::unknown;\r\n    }\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE file_type __CLRCALL_PURE_OR_CDECL _Lstat(const wchar_t* _Fname, perms* _Pmode) noexcept {\r\n    // get symlink file status\r\n    return _Stat(_Fname, _Pmode); // symlink not supported\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE uintmax_t __CLRCALL_PURE_OR_CDECL _Hard_links(const wchar_t* _Fname) noexcept {\r\n    // get hard link count\r\n    HANDLE _Handle = _FilesysOpenFile(_Fname, FILE_READ_ATTRIBUTES, FILE_FLAG_BACKUP_SEMANTICS);\r\n\r\n    if (_Handle == INVALID_HANDLE_VALUE) {\r\n        return static_cast<uintmax_t>(-1);\r\n    }\r\n\r\n    FILE_STANDARD_INFO _Info = {0};\r\n\r\n    // get file info\r\n    const auto _Ok = GetFileInformationByHandleEx(_Handle, FileStandardInfo, &_Info, sizeof(_Info));\r\n    CloseHandle(_Handle);\r\n    return _Ok ? _Info.NumberOfLinks : static_cast<uintmax_t>(-1);\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE uintmax_t __CLRCALL_PURE_OR_CDECL _File_size(const wchar_t* _Fname) noexcept { // get file size\r\n    WIN32_FILE_ATTRIBUTE_DATA _Data;\r\n\r\n    if (GetFileAttributesExW(_Fname, GetFileExInfoStandard, &_Data)) {\r\n        return static_cast<uintmax_t>(_Data.nFileSizeHigh) << 32 | _Data.nFileSizeLow;\r\n    } else {\r\n        return static_cast<uintmax_t>(-1);\r\n    }\r\n}\r\n\r\n// 3 centuries with 24 leap years each:\r\n// 1600 is excluded, 1700/1800 are not leap years\r\n// 1 partial century with 17 leap years:\r\n// 1900 is not a leap year\r\n// 1904 is leap year number 1\r\n// 1908 is leap year number 2\r\n// 1968 is leap year number 17\r\n\r\nconstexpr uint64_t _Win_ticks_per_second = 10000000ULL;\r\nconstexpr uint64_t _Win_ticks_from_epoch = ((1970 - 1601) * 365 + 3 * 24 + 17) * 86400ULL * _Win_ticks_per_second;\r\n\r\nextern \"C\" _CRTIMP2_PURE int64_t __CLRCALL_PURE_OR_CDECL _Last_write_time(\r\n    const wchar_t* _Fname) noexcept { // get last write time\r\n    WIN32_FILE_ATTRIBUTE_DATA _Data;\r\n\r\n    if (!GetFileAttributesExW(_Fname, GetFileExInfoStandard, &_Data)) {\r\n        return -1;\r\n    }\r\n\r\n    // success, convert time\r\n    uint64_t _Wtime =\r\n        static_cast<uint64_t>(_Data.ftLastWriteTime.dwHighDateTime) << 32 | _Data.ftLastWriteTime.dwLowDateTime;\r\n    return static_cast<int64_t>(_Wtime - _Win_ticks_from_epoch);\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Set_last_write_time(\r\n    const wchar_t* _Fname, int64_t _When) noexcept {\r\n    // set last write time\r\n    HANDLE _Handle = _FilesysOpenFile(_Fname, FILE_WRITE_ATTRIBUTES, FILE_FLAG_BACKUP_SEMANTICS);\r\n\r\n    if (_Handle == INVALID_HANDLE_VALUE) {\r\n        return 0;\r\n    }\r\n\r\n    // convert to FILETIME and set\r\n    uint64_t _Wtime = static_cast<uint64_t>(_When) + _Win_ticks_from_epoch;\r\n    FILETIME _Ft;\r\n    _Ft.dwLowDateTime  = static_cast<DWORD>(_Wtime & 0xFFFFFFFFUL);\r\n    _Ft.dwHighDateTime = static_cast<DWORD>(_Wtime >> 32);\r\n    int _Result        = SetFileTime(_Handle, nullptr, nullptr, &_Ft);\r\n    CloseHandle(_Handle);\r\n    return _Result;\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE space_info __CLRCALL_PURE_OR_CDECL _Statvfs(const wchar_t* _Fname) noexcept {\r\n    // get space information for volume\r\n    space_info _Ans  = {static_cast<uintmax_t>(-1), static_cast<uintmax_t>(-1), static_cast<uintmax_t>(-1)};\r\n    wstring _Devname = _Fname;\r\n\r\n    if (_Devname.empty() || _Devname.back() != L'/' && _Devname.back() != L'\\\\') {\r\n        _Devname.push_back(L'/');\r\n    }\r\n\r\n    _ULARGE_INTEGER _Available;\r\n    _ULARGE_INTEGER _Capacity;\r\n    _ULARGE_INTEGER _Free;\r\n\r\n    if (GetDiskFreeSpaceExW(_Devname.c_str(), &_Available, &_Capacity, &_Free)) { // convert values\r\n        _Ans.capacity  = _Capacity.QuadPart;\r\n        _Ans.free      = _Free.QuadPart;\r\n        _Ans.available = _Available.QuadPart;\r\n    }\r\n    return _Ans;\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Equivalent(\r\n    const wchar_t* _Fname1, const wchar_t* _Fname2) noexcept { // test for equivalent file names\r\n    // See GH-3571: File IDs are only guaranteed to be unique and stable while handles remain open\r\n    _FILE_ID_INFO _Info1 = {0};\r\n    _FILE_ID_INFO _Info2 = {0};\r\n    bool _Ok1            = false;\r\n    bool _Ok2            = false;\r\n\r\n    HANDLE _Handle1 = _FilesysOpenFile(_Fname1, FILE_READ_ATTRIBUTES, FILE_FLAG_BACKUP_SEMANTICS);\r\n    if (_Handle1 != INVALID_HANDLE_VALUE) { // get file1 info\r\n        _Ok1 = GetFileInformationByHandleEx(_Handle1, FileIdInfo, &_Info1, sizeof(_Info1)) != 0;\r\n    }\r\n\r\n    HANDLE _Handle2 = _FilesysOpenFile(_Fname2, FILE_READ_ATTRIBUTES, FILE_FLAG_BACKUP_SEMANTICS);\r\n    if (_Handle2 != INVALID_HANDLE_VALUE) { // get file2 info\r\n        _Ok2 = GetFileInformationByHandleEx(_Handle2, FileIdInfo, &_Info2, sizeof(_Info2)) != 0;\r\n        CloseHandle(_Handle2);\r\n    }\r\n\r\n    if (_Handle1 != INVALID_HANDLE_VALUE) {\r\n        CloseHandle(_Handle1);\r\n    }\r\n\r\n    if (!_Ok1 && !_Ok2) {\r\n        return -1;\r\n    } else if (!_Ok1 || !_Ok2) {\r\n        return 0;\r\n    } else { // test existing files for equivalence\r\n        return memcmp(&_Info1, &_Info2, sizeof(_FILE_ID_INFO)) == 0 ? 1 : 0;\r\n    }\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Link(const wchar_t* _Fname1, const wchar_t* _Fname2) noexcept {\r\n    // link _Fname2 to _Fname1\r\n#ifdef _CRT_APP\r\n    (void) _Fname1;\r\n    (void) _Fname2;\r\n    return errno = EDOM; // hardlinks not supported\r\n#else // ^^^ defined(_CRT_APP) / !defined(_CRT_APP) vvv\r\n    return CreateHardLinkW(_Fname2, _Fname1, nullptr) ? 0 : GetLastError();\r\n#endif // ^^^ !defined(_CRT_APP) ^^^\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Symlink(const wchar_t* _Fname1, const wchar_t* _Fname2) noexcept {\r\n    // link _Fname2 to _Fname1\r\n#ifdef _CRT_APP\r\n    (void) _Fname1;\r\n    (void) _Fname2;\r\n    return errno = EDOM; // symlinks not supported\r\n#else // ^^^ defined(_CRT_APP) / !defined(_CRT_APP) vvv\r\n    return CreateSymbolicLinkW(_Fname2, _Fname1, 0) ? 0 : GetLastError();\r\n#endif // ^^^ !defined(_CRT_APP) ^^^\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Rename(const wchar_t* _Fname1, const wchar_t* _Fname2) noexcept {\r\n    // rename _Fname1 as _Fname2\r\n    return _wrename(_Fname1, _Fname2) == 0 ? 0 : GetLastError();\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Resize(\r\n    const wchar_t* _Fname, uintmax_t _Newsize) noexcept { // change file size\r\n\r\n    HANDLE _Handle = _FilesysOpenFile(_Fname, FILE_GENERIC_WRITE, 0);\r\n\r\n    if (_Handle == INVALID_HANDLE_VALUE) {\r\n        return GetLastError();\r\n    }\r\n\r\n    FILE_END_OF_FILE_INFO _File_info;\r\n    _File_info.EndOfFile.QuadPart = static_cast<LONGLONG>(_Newsize);\r\n\r\n    const auto _Ok = SetFileInformationByHandle(_Handle, FileEndOfFileInfo, &_File_info, sizeof(_File_info));\r\n\r\n    CloseHandle(_Handle);\r\n    return _Ok ? 0 : GetLastError();\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Unlink(const wchar_t* _Fname) noexcept { // unlink _Fname\r\n    return _wremove(_Fname) == 0 ? 0 : GetLastError();\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Copy_file(\r\n    const wchar_t* _Fname1, const wchar_t* _Fname2) noexcept {\r\n    // copy _Fname1 to _Fname2\r\n    COPYFILE2_EXTENDED_PARAMETERS _Params = {0};\r\n    _Params.dwSize                        = sizeof(COPYFILE2_EXTENDED_PARAMETERS);\r\n    _Params.dwCopyFlags                   = 0;\r\n\r\n    const HRESULT _Copy_result = CopyFile2(_Fname1, _Fname2, &_Params);\r\n    if (SUCCEEDED(_Copy_result)) {\r\n        return 0;\r\n    }\r\n\r\n    // take lower bits to undo HRESULT_FROM_WIN32\r\n    return _Copy_result & 0x0000FFFFU;\r\n}\r\n\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Chmod(const wchar_t* _Fname, perms _Newmode) noexcept {\r\n    // change file mode to _Newmode\r\n    WIN32_FILE_ATTRIBUTE_DATA _Data;\r\n\r\n    if (!GetFileAttributesExW(_Fname, GetFileExInfoStandard, &_Data)) {\r\n        return -1;\r\n    }\r\n\r\n    // got mode, alter readonly bit\r\n    DWORD _Oldmode = _Data.dwFileAttributes;\r\n    DWORD _Mode    = _Oldmode;\r\n\r\n    constexpr perms _Write_perms = perms::owner_write | perms::group_write | perms::others_write;\r\n\r\n    if ((_Newmode & _Write_perms) == perms::none) {\r\n        _Mode |= FILE_ATTRIBUTE_READONLY;\r\n    } else {\r\n        _Mode &= ~FILE_ATTRIBUTE_READONLY;\r\n    }\r\n\r\n    return _Mode == _Oldmode || SetFileAttributesW(_Fname, _Mode) ? 0 : -1;\r\n}\r\n_FS_END\r\n"
  },
  {
    "path": "stl/src/filesystem.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// filesystem.cpp -- C++17 <filesystem> implementation\r\n\r\n#include <clocale>\r\n#include <corecrt_terminate.h>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <internal_shared.h>\r\n#include <xfilesystem_abi.h>\r\n\r\n#include <Windows.h>\r\n#include <winioctl.h>\r\n\r\n// We have several switches that do not have case statements for every possible enum value.\r\n// Hence, disabling this warning.\r\n#pragma warning(disable : 4061) // enumerator '__std_win_error::_Success' in switch of enum\r\n                                // '__std_win_error' is not explicitly handled by a case label\r\n\r\nstatic_assert(__std_code_page::_Utf8 == __std_code_page{CP_UTF8});\r\n\r\nnamespace {\r\n\r\n#ifdef _CRT_APP\r\n    BOOLEAN __stdcall _Not_supported_CreateSymbolicLinkW(const wchar_t*, const wchar_t*, DWORD) {\r\n        SetLastError(ERROR_NOT_SUPPORTED);\r\n        return 0;\r\n    }\r\n#define __vcrt_CreateSymbolicLinkW _Not_supported_CreateSymbolicLinkW\r\n#else // ^^^ defined(_CRT_APP) / !defined(_CRT_APP) vvv\r\n#define __vcrt_CreateSymbolicLinkW CreateSymbolicLinkW\r\n#endif // ^^^ !defined(_CRT_APP) ^^^\r\n\r\n    HANDLE __stdcall __vcp_CreateFile(const wchar_t* const _File_name, const unsigned long _Desired_access,\r\n        const unsigned long _Share, SECURITY_ATTRIBUTES* const _Security_attributes,\r\n        const unsigned long _Creation_disposition, const unsigned long _Flags_and_attributes,\r\n        const HANDLE _Template_file) noexcept {\r\n        CREATEFILE2_EXTENDED_PARAMETERS _Create_file_parameters{};\r\n        _Create_file_parameters.dwSize               = sizeof(_Create_file_parameters);\r\n        _Create_file_parameters.dwFileAttributes     = _Flags_and_attributes & 0x0000FFFFU;\r\n        _Create_file_parameters.dwFileFlags          = _Flags_and_attributes & 0xFFFF0000U;\r\n        _Create_file_parameters.lpSecurityAttributes = _Security_attributes;\r\n        _Create_file_parameters.hTemplateFile        = _Template_file;\r\n        return CreateFile2(_File_name, _Desired_access, _Share, _Creation_disposition, &_Create_file_parameters);\r\n    }\r\n\r\n    [[nodiscard]] __std_win_error __stdcall _Translate_CreateFile_last_error(const HANDLE _Handle) {\r\n        if (_Handle != INVALID_HANDLE_VALUE) {\r\n            return __std_win_error::_Success;\r\n        }\r\n\r\n        return __std_win_error{GetLastError()};\r\n    }\r\n\r\n    [[nodiscard]] __std_fs_copy_file_result __stdcall __vcp_Copyfile(\r\n        const wchar_t* const _Source, const wchar_t* const _Target, const bool _Fail_if_exists) noexcept {\r\n        COPYFILE2_EXTENDED_PARAMETERS _Params{};\r\n        _Params.dwSize      = sizeof(_Params);\r\n        _Params.dwCopyFlags = _Fail_if_exists ? COPY_FILE_FAIL_IF_EXISTS : 0;\r\n\r\n        const HRESULT _Copy_result = CopyFile2(_Source, _Target, &_Params);\r\n        if (SUCCEEDED(_Copy_result)) {\r\n            return {true, __std_win_error::_Success};\r\n        }\r\n\r\n        // take lower bits to undo HRESULT_FROM_WIN32\r\n        return {false, __std_win_error{_Copy_result & 0x0000FFFFU}};\r\n    }\r\n\r\n    [[nodiscard]] __std_win_error __stdcall _Create_symlink(\r\n        const wchar_t* const _Symlink_file_name, const wchar_t* const _Target_file_name, const DWORD _Flags) noexcept {\r\n        if (__vcrt_CreateSymbolicLinkW(\r\n                _Symlink_file_name, _Target_file_name, _Flags | SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE)) {\r\n            return __std_win_error::_Success;\r\n        }\r\n\r\n        DWORD _Last_error = GetLastError();\r\n        if (_Last_error == ERROR_INVALID_PARAMETER) {\r\n            if (__vcrt_CreateSymbolicLinkW(_Symlink_file_name, _Target_file_name, _Flags)) {\r\n                return __std_win_error::_Success;\r\n            }\r\n\r\n            _Last_error = GetLastError();\r\n        }\r\n\r\n        return __std_win_error{_Last_error};\r\n    }\r\n\r\n    [[nodiscard]] __std_win_error __stdcall _Translate_not_found_to_success(const __std_win_error _Err) noexcept {\r\n        if (__std_is_file_not_found(_Err)) {\r\n            return __std_win_error::_Success;\r\n        }\r\n\r\n        return _Err;\r\n    }\r\n\r\n    [[nodiscard]] __std_win_error __stdcall _Get_last_write_time_by_handle(\r\n        const HANDLE _Handle, long long* const _Last_write_filetime) {\r\n        // read the last write time from _Handle and store it in _Last_write_filetime\r\n        FILE_BASIC_INFO _Ex_info;\r\n        if (GetFileInformationByHandleEx(_Handle, FileBasicInfo, &_Ex_info, sizeof(_Ex_info))) {\r\n            *_Last_write_filetime = _Ex_info.LastWriteTime.QuadPart;\r\n            return __std_win_error::_Success;\r\n        }\r\n\r\n        return __std_win_error{GetLastError()};\r\n    }\r\n\r\n    [[nodiscard]] __std_win_error __stdcall _Get_file_id_by_handle(\r\n        const HANDLE _Handle, _Out_ FILE_ID_INFO* const _Id) noexcept {\r\n        if (GetFileInformationByHandleEx(_Handle, FileIdInfo, _Id, sizeof(*_Id))) {\r\n            // if we could get FILE_ID_INFO, use that as the source of truth\r\n            return __std_win_error::_Success;\r\n        }\r\n\r\n        return __std_win_error{GetLastError()};\r\n    }\r\n\r\n    [[nodiscard]] _Success_(return == __std_win_error::_Success) __std_win_error\r\n        __stdcall _Set_delete_flag(_In_ __std_fs_file_handle _Handle) {\r\n\r\n        // See minwinbase.h and WinBase.h.\r\n        FILE_DISPOSITION_INFO_EX _Info_ex{FILE_DISPOSITION_FLAG_DELETE | FILE_DISPOSITION_FLAG_POSIX_SEMANTICS};\r\n        if (SetFileInformationByHandle(\r\n                reinterpret_cast<HANDLE>(_Handle), FileDispositionInfoEx, &_Info_ex, sizeof(_Info_ex))) {\r\n            return __std_win_error::_Success;\r\n        }\r\n\r\n        const __std_win_error _Last_error{GetLastError()};\r\n        switch (_Last_error) {\r\n        case __std_win_error::_Invalid_parameter: // Older Windows versions\r\n        case __std_win_error::_Invalid_function: // Windows 10 1607\r\n        case __std_win_error::_Not_supported: // POSIX delete not supported by the file system\r\n            break; // try non-POSIX delete below\r\n        case __std_win_error::_Access_denied: // This might be due to the read-only bit, try to clear it and try again\r\n        default:\r\n            return _Last_error;\r\n        }\r\n\r\n        FILE_DISPOSITION_INFO _Info{/* .Delete= */ TRUE};\r\n        if (SetFileInformationByHandle(reinterpret_cast<HANDLE>(_Handle), FileDispositionInfo, &_Info, sizeof(_Info))) {\r\n            return __std_win_error::_Success;\r\n        }\r\n\r\n        return __std_win_error{GetLastError()};\r\n    }\r\n\r\n    [[nodiscard]] unsigned long long _Merge_to_ull(DWORD _High, DWORD _Low) noexcept {\r\n        return (static_cast<unsigned long long>(_High) << 32) | static_cast<unsigned long long>(_Low);\r\n    }\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n[[nodiscard]] __std_ulong_and_error __stdcall __std_fs_get_full_path_name(_In_z_ const wchar_t* _Source,\r\n    _In_ unsigned long _Target_size, _Out_writes_z_(_Target_size) wchar_t* _Target) noexcept { // calls GetFullPathNameW\r\n    const auto _Result = GetFullPathNameW(_Source, _Target_size, _Target, nullptr);\r\n    return {_Result, _Result == 0 ? __std_win_error{GetLastError()} : __std_win_error::_Success};\r\n}\r\n\r\n[[nodiscard]] __std_win_error __stdcall __std_fs_open_handle(_Out_ __std_fs_file_handle* const _Handle,\r\n    _In_z_ const wchar_t* const _File_name, _In_ const __std_access_rights _Desired_access,\r\n    _In_ const __std_fs_file_flags _Flags) noexcept { // calls CreateFile2 or CreateFileW\r\n    const HANDLE _Result = __vcp_CreateFile(_File_name, static_cast<unsigned long>(_Desired_access),\r\n        FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, nullptr, OPEN_EXISTING,\r\n        static_cast<unsigned long>(_Flags), nullptr);\r\n    *_Handle             = static_cast<__std_fs_file_handle>(reinterpret_cast<intptr_t>(_Result));\r\n    return _Translate_CreateFile_last_error(_Result);\r\n}\r\n\r\nvoid __stdcall __std_fs_close_handle(const __std_fs_file_handle _Handle) noexcept { // calls CloseHandle\r\n    if (_Handle != __std_fs_file_handle::_Invalid && !CloseHandle(reinterpret_cast<HANDLE>(_Handle))) {\r\n        _CSTD abort();\r\n    }\r\n}\r\n\r\n[[nodiscard]] _Success_(return == __std_win_error::_Success) __std_win_error\r\n    __stdcall __std_fs_get_file_attributes_by_handle(\r\n        _In_ const __std_fs_file_handle _Handle, _Out_ unsigned long* const _File_attributes) noexcept {\r\n    // read the attributes from _Handle and store it in _File_attributes\r\n    const HANDLE _As_plain_handle = reinterpret_cast<HANDLE>(_Handle);\r\n\r\n    FILE_BASIC_INFO _Ex_info;\r\n    if (GetFileInformationByHandleEx(_As_plain_handle, FileBasicInfo, &_Ex_info, sizeof(_Ex_info))) {\r\n        *_File_attributes = _Ex_info.FileAttributes;\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    return __std_win_error{GetLastError()};\r\n}\r\n\r\n[[nodiscard]] __std_ulong_and_error __stdcall __std_fs_get_final_path_name_by_handle(\r\n    _In_ const __std_fs_file_handle _Handle, _Out_writes_z_(_Target_size) wchar_t* const _Target,\r\n    _In_ const unsigned long _Target_size,\r\n    _In_ const __std_fs_volume_name_kind _Flags) noexcept { // calls GetFinalPathNameByHandleW\r\n    const auto _Result = GetFinalPathNameByHandleW(\r\n        reinterpret_cast<HANDLE>(_Handle), _Target, _Target_size, static_cast<unsigned long>(_Flags));\r\n    return {_Result, _Result == 0 ? __std_win_error{GetLastError()} : __std_win_error::_Success};\r\n}\r\n\r\nstatic_assert(sizeof(WIN32_FIND_DATAW) == sizeof(__std_fs_find_data));\r\nstatic_assert(alignof(WIN32_FIND_DATAW) == alignof(__std_fs_find_data));\r\n\r\n[[nodiscard]] __std_win_error __stdcall __std_fs_directory_iterator_open(_In_z_ const wchar_t* const _Path_spec,\r\n    _Inout_ __std_fs_dir_handle* const _Handle, _Out_ __std_fs_find_data* const _Results) noexcept {\r\n    __std_fs_directory_iterator_close(*_Handle);\r\n    *_Handle = __std_fs_dir_handle{reinterpret_cast<intptr_t>(\r\n        FindFirstFileExW(_Path_spec, FindExInfoBasic, _Results, FindExSearchNameMatch, nullptr, 0))};\r\n    if (*_Handle != __std_fs_dir_handle::_Invalid) {\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    return __std_win_error{GetLastError()};\r\n}\r\n\r\nvoid __stdcall __std_fs_directory_iterator_close(_In_ const __std_fs_dir_handle _Handle) noexcept {\r\n    if (_Handle != __std_fs_dir_handle::_Invalid && !FindClose(reinterpret_cast<HANDLE>(_Handle))) {\r\n        _CSTD abort();\r\n    }\r\n}\r\n\r\n[[nodiscard]] __std_win_error __stdcall __std_fs_directory_iterator_advance(\r\n    _In_ const __std_fs_dir_handle _Handle, _Out_ __std_fs_find_data* const _Results) noexcept {\r\n    if (FindNextFileW(reinterpret_cast<HANDLE>(_Handle), reinterpret_cast<WIN32_FIND_DATAW*>(_Results))) {\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    return __std_win_error{GetLastError()};\r\n}\r\n\r\n[[nodiscard]] __std_code_page __stdcall __std_fs_code_page() noexcept {\r\n    if (___lc_codepage_func() == CP_UTF8) {\r\n        return __std_code_page{CP_UTF8};\r\n    }\r\n\r\n#if !defined(_ONECORE)\r\n    if (!AreFileApisANSI()) {\r\n        return __std_code_page{CP_OEMCP};\r\n    }\r\n#endif // !defined(_ONECORE)\r\n\r\n    return __std_code_page{CP_ACP};\r\n}\r\n\r\n[[nodiscard]] __std_fs_convert_result __stdcall __std_fs_convert_narrow_to_wide(_In_ const __std_code_page _Code_page,\r\n    _In_reads_(_Input_len) const char* const _Input_str, _In_ const int _Input_len,\r\n    _Out_writes_opt_(_Output_len) wchar_t* const _Output_str, _In_ const int _Output_len) noexcept {\r\n    const int _Len = MultiByteToWideChar(\r\n        static_cast<unsigned int>(_Code_page), MB_ERR_INVALID_CHARS, _Input_str, _Input_len, _Output_str, _Output_len);\r\n    return {_Len, _Len == 0 ? __std_win_error{GetLastError()} : __std_win_error::_Success};\r\n}\r\n\r\n[[nodiscard]] __std_fs_convert_result __stdcall __std_fs_convert_wide_to_narrow(_In_ const __std_code_page _Code_page,\r\n    _In_reads_(_Input_len) const wchar_t* const _Input_str, _In_ const int _Input_len,\r\n    _Out_writes_opt_(_Output_len) char* const _Output_str, _In_ const int _Output_len) noexcept {\r\n    __std_fs_convert_result _Result;\r\n\r\n    if (_Code_page == __std_code_page{CP_UTF8} || _Code_page == __std_code_page{54936}) {\r\n        // For UTF-8 or GB18030, attempt to use WC_ERR_INVALID_CHARS. (These codepages can't use WC_NO_BEST_FIT_CHARS\r\n        // below, and other codepages can't use WC_ERR_INVALID_CHARS.)\r\n        _Result._Len = WideCharToMultiByte(static_cast<unsigned int>(_Code_page), WC_ERR_INVALID_CHARS, _Input_str,\r\n            _Input_len, _Output_str, _Output_len, nullptr, nullptr);\r\n    } else { // For other codepages, attempt to use WC_NO_BEST_FIT_CHARS.\r\n             // Codepages that don't support this will activate the ERROR_INVALID_FLAGS fallback below.\r\n        BOOL _Used_default_char = FALSE;\r\n\r\n        _Result._Len = WideCharToMultiByte(static_cast<unsigned int>(_Code_page), WC_NO_BEST_FIT_CHARS, _Input_str,\r\n            _Input_len, _Output_str, _Output_len, nullptr, &_Used_default_char);\r\n\r\n        if (_Used_default_char) { // Report round-tripping failure with ERROR_NO_UNICODE_TRANSLATION,\r\n                                  // \"No mapping for the Unicode character exists in the target multi-byte code page.\"\r\n            return {0, __std_win_error{ERROR_NO_UNICODE_TRANSLATION}};\r\n        }\r\n    }\r\n\r\n    _Result._Err = _Result._Len == 0 ? __std_win_error{GetLastError()} : __std_win_error::_Success;\r\n\r\n    if (_Result._Err == __std_win_error{ERROR_INVALID_FLAGS}) { // Fall back to a non-strict conversion.\r\n        _Result._Len = WideCharToMultiByte(static_cast<unsigned int>(_Code_page), 0, _Input_str, _Input_len,\r\n            _Output_str, _Output_len, nullptr, nullptr);\r\n\r\n        _Result._Err = _Result._Len == 0 ? __std_win_error{GetLastError()} : __std_win_error::_Success;\r\n    }\r\n\r\n    return _Result;\r\n}\r\n\r\n[[nodiscard]] __std_fs_convert_result __stdcall __std_fs_convert_wide_to_narrow_replace_chars(\r\n    _In_ const __std_code_page _Code_page, _In_reads_(_Input_len) const wchar_t* const _Input_str,\r\n    _In_ const int _Input_len, _Out_writes_opt_(_Output_len) char* const _Output_str,\r\n    _In_ const int _Output_len) noexcept {\r\n    __std_fs_convert_result _Result;\r\n\r\n    _Result._Len = WideCharToMultiByte(static_cast<unsigned int>(_Code_page), WC_NO_BEST_FIT_CHARS, _Input_str,\r\n        _Input_len, _Output_str, _Output_len, nullptr, nullptr);\r\n\r\n    _Result._Err = _Result._Len == 0 ? __std_win_error{GetLastError()} : __std_win_error::_Success;\r\n\r\n    // Some codepages don't support WC_NO_BEST_FIT_CHARS, fall back to default conversion.\r\n    if (_Result._Err == __std_win_error{ERROR_INVALID_FLAGS}) {\r\n        _Result._Len = WideCharToMultiByte(static_cast<unsigned int>(_Code_page), 0, _Input_str, _Input_len,\r\n            _Output_str, _Output_len, nullptr, nullptr);\r\n\r\n        _Result._Err = _Result._Len == 0 ? __std_win_error{GetLastError()} : __std_win_error::_Success;\r\n    }\r\n\r\n    return _Result;\r\n}\r\n\r\n[[nodiscard]] __std_fs_copy_file_result __stdcall __std_fs_copy_file(_In_z_ const wchar_t* const _Source,\r\n    _In_z_ const wchar_t* const _Target, _In_ __std_fs_copy_options _Options) noexcept { // copy _Source to _Target\r\n    _Options &= __std_fs_copy_options::_Existing_mask;\r\n    if (_Options != __std_fs_copy_options::_Overwrite_existing) {\r\n        const __std_fs_copy_file_result _First_try_result =\r\n            __vcp_Copyfile(_Source, _Target, /* _Fail_if_exists = */ true);\r\n        if (_First_try_result._Error != __std_win_error::_File_exists // successful copy or I/O error\r\n            || _Options == __std_fs_copy_options::_None) { // caller requested fail if exists behavior\r\n            return _First_try_result;\r\n        }\r\n\r\n        // At this point, the target exists, and we are `skip_existing` or `update_existing`.\r\n        // To resolve either, we need to open handles to test `equivalent()` and `last_write_time()`.\r\n        // We allow other programs to have these files open in read-only mode,\r\n        // since that doesn't affect the last-write-check.\r\n        // We also allow `FILE_SHARE_WRITE` when `skip_existing`, since that doesn't affect anything.\r\n        {\r\n            DWORD _Share_mode = FILE_SHARE_READ;\r\n            if (_Options == __std_fs_copy_options::_Skip_existing) {\r\n                _Share_mode |= FILE_SHARE_WRITE;\r\n            }\r\n\r\n            const _STD _Fs_file _Source_handle(\r\n                __vcp_CreateFile(_Source, FILE_READ_ATTRIBUTES, _Share_mode, nullptr, OPEN_EXISTING, 0, nullptr));\r\n            __std_win_error _Last_error = _Translate_CreateFile_last_error(_Source_handle._Get());\r\n            if (_Last_error != __std_win_error::_Success) {\r\n                return {false, _Last_error};\r\n            }\r\n\r\n            const _STD _Fs_file _Target_handle(\r\n                __vcp_CreateFile(_Target, FILE_READ_ATTRIBUTES, _Share_mode, nullptr, OPEN_EXISTING, 0, nullptr));\r\n            _Last_error = _Translate_CreateFile_last_error(_Target_handle._Get());\r\n            if (_Last_error != __std_win_error::_Success) {\r\n                return {false, _Last_error};\r\n            }\r\n\r\n            bool _Do_copy = false;\r\n            if (_Options == __std_fs_copy_options::_Update_existing) {\r\n                long long _Source_last_write_time;\r\n                _Last_error = _Get_last_write_time_by_handle(_Source_handle._Get(), &_Source_last_write_time);\r\n                if (_Last_error != __std_win_error::_Success) {\r\n                    return {false, _Last_error};\r\n                }\r\n\r\n                long long _Target_last_write_time;\r\n                _Last_error = _Get_last_write_time_by_handle(_Target_handle._Get(), &_Target_last_write_time);\r\n                if (_Last_error != __std_win_error::_Success) {\r\n                    return {false, _Last_error};\r\n                }\r\n\r\n                if (_Target_last_write_time < _Source_last_write_time) { // _Source is newer, so update_existing\r\n                    _Do_copy = true;\r\n                }\r\n            }\r\n\r\n            if (!_Do_copy) {\r\n                // We only need to test `equivalent()` if we _aren't_ going to `CopyFile2()`,\r\n                // since that call will fail with an `ERROR_SHARING_VIOLATION` anyways.\r\n                FILE_ID_INFO _Source_id;\r\n                _Last_error = _Get_file_id_by_handle(_Source_handle._Get(), &_Source_id);\r\n                if (_Last_error != __std_win_error::_Success) {\r\n                    return {false, _Last_error};\r\n                }\r\n                FILE_ID_INFO _Target_id;\r\n                _Last_error = _Get_file_id_by_handle(_Target_handle._Get(), &_Target_id);\r\n                if (_Last_error != __std_win_error::_Success) {\r\n                    return {false, _Last_error};\r\n                }\r\n\r\n                if (_CSTD memcmp(&_Source_id, &_Target_id, sizeof(FILE_ID_INFO)) == 0) {\r\n                    // the files are equivalent\r\n                    return {false, __std_win_error::_Sharing_violation};\r\n                }\r\n\r\n                return {false, __std_win_error::_Success};\r\n            }\r\n\r\n            // if we get here, we've decided we want to overwrite the destination due to update_existing,\r\n            // so fall through to the overwrite_existing path below\r\n        } // close handles\r\n    } // !_Overwrite_existing\r\n\r\n    // The following errors were observed through experimentation:\r\n    // is_regular_file(from) is false => ERROR_ACCESS_DENIED\r\n    // exists(to) is true and is_regular_file(to) is false => ERROR_ACCESS_DENIED\r\n    // exists(to) is true and equivalent(from, to) is true => ERROR_SHARING_VIOLATION\r\n    return __vcp_Copyfile(_Source, _Target, /* _Fail_if_exists = */ false);\r\n}\r\n\r\nstruct __std_fs_file_id { // typedef struct _FILE_ID_INFO {\r\n    unsigned long long _Volume_serial_number; //    ULONGLONG VolumeSerialNumber;\r\n    unsigned char _Id[16]; //    FILE_ID_128 FileId;\r\n}; // } FILE_ID_INFO, ...;\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n[[nodiscard]] _Success_(return == __std_win_error::_Success) __std_win_error\r\n    __stdcall __std_fs_get_file_id(_Out_ __std_fs_file_id* const _Id, _In_z_ const wchar_t* const _Path) noexcept {\r\n    __std_win_error _Last_error;\r\n    const _STD _Fs_file _Handle(\r\n        _Path, __std_access_rights::_File_read_attributes, __std_fs_file_flags::_Backup_semantics, &_Last_error);\r\n    if (_Last_error != __std_win_error::_Success) {\r\n        return _Last_error;\r\n    }\r\n\r\n    static_assert(sizeof(FILE_ID_INFO) == sizeof(__std_fs_file_id));\r\n    static_assert(alignof(FILE_ID_INFO) == alignof(__std_fs_file_id));\r\n    return _Get_file_id_by_handle(_Handle._Get(), reinterpret_cast<FILE_ID_INFO*>(_Id));\r\n}\r\n\r\n[[nodiscard]] __std_fs_equivalent_result __stdcall __std_fs_equivalent(\r\n    _In_z_ const wchar_t* const _Left_path, _In_z_ const wchar_t* const _Right_path) noexcept {\r\n    // See GH-3571: File IDs are only guaranteed to be unique and stable while handles remain open\r\n    __std_win_error _Last_error;\r\n    const _STD _Fs_file _Left_handle(\r\n        _Left_path, __std_access_rights::_File_read_attributes, __std_fs_file_flags::_Backup_semantics, &_Last_error);\r\n    if (_Last_error != __std_win_error::_Success) {\r\n        return {false, _Last_error};\r\n    }\r\n\r\n    FILE_ID_INFO _Left_info;\r\n    _Last_error = _Get_file_id_by_handle(_Left_handle._Get(), &_Left_info);\r\n    if (_Last_error != __std_win_error::_Success) {\r\n        return {false, _Last_error};\r\n    }\r\n\r\n    const _STD _Fs_file _Right_handle(\r\n        _Right_path, __std_access_rights::_File_read_attributes, __std_fs_file_flags::_Backup_semantics, &_Last_error);\r\n    if (_Last_error != __std_win_error::_Success) {\r\n        return {false, _Last_error};\r\n    }\r\n\r\n    FILE_ID_INFO _Right_info;\r\n    _Last_error = _Get_file_id_by_handle(_Right_handle._Get(), &_Right_info);\r\n    if (_Last_error != __std_win_error::_Success) {\r\n        return {false, _Last_error};\r\n    }\r\n\r\n    return {_CSTD memcmp(&_Left_info, &_Right_info, sizeof(FILE_ID_INFO)) == 0, __std_win_error::_Success};\r\n}\r\n\r\n[[nodiscard]] __std_win_error __stdcall __std_fs_create_directory_symbolic_link(\r\n    _In_z_ const wchar_t* const _Symlink_file_name, _In_z_ const wchar_t* const _Target_file_name) noexcept {\r\n    return _Create_symlink(_Symlink_file_name, _Target_file_name, SYMBOLIC_LINK_FLAG_DIRECTORY);\r\n}\r\n\r\n[[nodiscard]] __std_win_error __stdcall __std_fs_create_hard_link(\r\n    _In_z_ const wchar_t* const _File_name, _In_z_ const wchar_t* const _Existing_file_name) noexcept {\r\n#if defined(_CRT_APP)\r\n    (void) _File_name;\r\n    (void) _Existing_file_name;\r\n    return __std_win_error::_Not_supported;\r\n#else // ^^^ defined(_CRT_APP) / !defined(_CRT_APP) vvv\r\n    if (CreateHardLinkW(_File_name, _Existing_file_name, nullptr)) {\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    return __std_win_error{GetLastError()};\r\n#endif // defined(_CRT_APP)\r\n}\r\n\r\n[[nodiscard]] __std_win_error __stdcall __std_fs_create_symbolic_link(\r\n    _In_z_ const wchar_t* const _Symlink_file_name, _In_z_ const wchar_t* const _Target_file_name) noexcept {\r\n    return _Create_symlink(_Symlink_file_name, _Target_file_name, 0);\r\n}\r\n\r\n[[nodiscard]] __std_win_error __stdcall __std_fs_read_reparse_data_buffer(_In_ const __std_fs_file_handle _Handle,\r\n    _Out_writes_bytes_(_Buffer_size) void* const _Buffer, _In_ const unsigned long _Buffer_size) noexcept {\r\n    unsigned long _Bytes_returned;\r\n    if (DeviceIoControl(reinterpret_cast<HANDLE>(_Handle), FSCTL_GET_REPARSE_POINT, nullptr, 0, _Buffer, _Buffer_size,\r\n            &_Bytes_returned, nullptr)) {\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    // If DeviceIoControl fails, _Bytes_returned is 0.\r\n    return __std_win_error{GetLastError()};\r\n}\r\n\r\n[[nodiscard]] __std_win_error __stdcall __std_fs_write_reparse_data_buffer(\r\n    _In_ const __std_fs_file_handle _Handle, _In_ const __std_fs_reparse_data_buffer* const _Buffer) noexcept {\r\n    constexpr unsigned long _Reparse_data_buffer_header_size = 8; // REPARSE_DATA_BUFFER_HEADER_SIZE\r\n    const auto _Buffer_size = _Reparse_data_buffer_header_size + _Buffer->_Reparse_data_length;\r\n    if (DeviceIoControl(reinterpret_cast<HANDLE>(_Handle), FSCTL_SET_REPARSE_POINT,\r\n            const_cast<__std_fs_reparse_data_buffer*>(_Buffer), _Buffer_size, nullptr, 0, nullptr, nullptr)) {\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    // If DeviceIoControl fails, _Bytes_returned is 0.\r\n    return __std_win_error{GetLastError()};\r\n}\r\n\r\n[[nodiscard]] bool __stdcall __std_fs_is_junction_from_reparse_data_buffer(\r\n    _In_ const __std_fs_reparse_data_buffer* const _Buffer) noexcept {\r\n    return _Buffer->_Reparse_tag == IO_REPARSE_TAG_MOUNT_POINT;\r\n}\r\n\r\n[[nodiscard]] _Success_(return == __std_win_error::_Success) __std_win_error\r\n    __stdcall __std_fs_read_name_from_reparse_data_buffer(_In_ __std_fs_reparse_data_buffer* const _Buffer,\r\n        _Out_ wchar_t** const _Offset, _Out_ unsigned short* const _Length) noexcept {\r\n    if (_Buffer->_Reparse_tag == IO_REPARSE_TAG_SYMLINK) {\r\n        auto& _Symlink_buffer             = _Buffer->_Symbolic_link_reparse_buffer;\r\n        const unsigned short _Temp_length = _Symlink_buffer._Print_name_length / sizeof(wchar_t);\r\n\r\n        if (_Temp_length == 0) {\r\n            *_Length = _Symlink_buffer._Substitute_name_length / sizeof(wchar_t);\r\n            *_Offset = &_Symlink_buffer._Path_buffer[_Symlink_buffer._Substitute_name_offset / sizeof(wchar_t)];\r\n        } else {\r\n            *_Length = _Temp_length;\r\n            *_Offset = &_Symlink_buffer._Path_buffer[_Symlink_buffer._Print_name_offset / sizeof(wchar_t)];\r\n        }\r\n    } else if (_Buffer->_Reparse_tag == IO_REPARSE_TAG_MOUNT_POINT) {\r\n        // junction\r\n        auto& _Junction_buffer            = _Buffer->_Mount_point_reparse_buffer;\r\n        const unsigned short _Temp_length = _Junction_buffer._Print_name_length / sizeof(wchar_t);\r\n\r\n        if (_Temp_length == 0) {\r\n            *_Length = _Junction_buffer._Substitute_name_length / sizeof(wchar_t);\r\n            *_Offset = &_Junction_buffer._Path_buffer[_Junction_buffer._Substitute_name_offset / sizeof(wchar_t)];\r\n        } else {\r\n            *_Length = _Temp_length;\r\n            *_Offset = &_Junction_buffer._Path_buffer[_Junction_buffer._Print_name_offset / sizeof(wchar_t)];\r\n        }\r\n    } else {\r\n        return __std_win_error::_Reparse_tag_invalid;\r\n    }\r\n\r\n    return __std_win_error::_Success;\r\n}\r\n\r\n[[nodiscard]] __std_win_error __stdcall __std_fs_set_last_write_time(\r\n    _In_ const long long _Last_write_filetime, _In_z_ const wchar_t* const _Path) noexcept {\r\n    __std_win_error _Last_error;\r\n    const _STD _Fs_file _Handle(\r\n        _Path, __std_access_rights::_File_write_attributes, __std_fs_file_flags::_Backup_semantics, &_Last_error);\r\n    if (_Last_error != __std_win_error::_Success) {\r\n        return _Last_error;\r\n    }\r\n\r\n    if (SetFileTime(_Handle._Get(), nullptr, nullptr, reinterpret_cast<const FILETIME*>(&_Last_write_filetime))) {\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    return __std_win_error{GetLastError()};\r\n}\r\n\r\n[[nodiscard]] __std_fs_remove_result __stdcall __std_fs_remove(_In_z_ const wchar_t* const _Target) noexcept {\r\n    // remove _Target without caring whether _Target is a file or directory\r\n    __std_win_error _Last_error;\r\n    bool _Able_to_change_attributes = false;\r\n\r\n    constexpr auto _Flags = __std_fs_file_flags::_Backup_semantics | __std_fs_file_flags::_Open_reparse_point;\r\n    _STD _Fs_file _Handle(_Target,\r\n        __std_access_rights::_Delete | __std_access_rights::_File_read_attributes\r\n            | __std_access_rights::_File_write_attributes,\r\n        _Flags, &_Last_error);\r\n    if (_Last_error == __std_win_error::_Success) {\r\n        _Able_to_change_attributes = true;\r\n    } else if (_Last_error == __std_win_error::_Access_denied) {\r\n        // change the underlying HANDLE of _Handle\r\n        _Last_error = __std_fs_open_handle(&_Handle._Raw, _Target, __std_access_rights::_Delete, _Flags);\r\n        if (_Last_error != __std_win_error::_Success) {\r\n            return {false, _Last_error};\r\n        }\r\n    } else {\r\n        return {false, _Translate_not_found_to_success(_Last_error)};\r\n    }\r\n\r\n    // See minwinbase.h and WinBase.h.\r\n    // Windows 10 1809 added support for FILE_DISPOSITION_FLAG_IGNORE_READONLY_ATTRIBUTE.\r\n    FILE_DISPOSITION_INFO_EX _Info_ex{FILE_DISPOSITION_FLAG_DELETE | FILE_DISPOSITION_FLAG_POSIX_SEMANTICS\r\n                                      | FILE_DISPOSITION_FLAG_IGNORE_READONLY_ATTRIBUTE};\r\n    if (SetFileInformationByHandle(_Handle._Get(), FileDispositionInfoEx, &_Info_ex, sizeof(_Info_ex))) {\r\n        return {true, __std_win_error::_Success};\r\n    }\r\n\r\n    _Last_error = __std_win_error{GetLastError()};\r\n    switch (_Last_error) {\r\n    // Windows versions older than 1809\r\n    case __std_win_error::_Invalid_parameter:\r\n    case __std_win_error::_Invalid_function:\r\n    case __std_win_error::_Not_supported:\r\n        break;\r\n    default:\r\n        // If we fail for reasons other than those mentioned above just return to the caller\r\n        return {false, _Last_error};\r\n    }\r\n\r\n    // code path for versions older than 1809\r\n    _Last_error = _Set_delete_flag(_Handle._Raw);\r\n    if (_Last_error == __std_win_error::_Success) {\r\n        return {true, __std_win_error::_Success};\r\n    }\r\n\r\n    if (_Last_error == __std_win_error::_Access_denied && _Able_to_change_attributes) {\r\n        FILE_BASIC_INFO _Basic_info;\r\n        if (!GetFileInformationByHandleEx(_Handle._Get(), FileBasicInfo, &_Basic_info, sizeof(_Basic_info))) {\r\n            return {false, __std_win_error{GetLastError()}};\r\n        }\r\n        // check if FILE_ATTRIBUTE_READONLY is set\r\n        if ((_Basic_info.FileAttributes & FILE_ATTRIBUTE_READONLY) != 0u) {\r\n            // try to remove FILE_ATTRIBUTE_READONLY\r\n            _Basic_info.FileAttributes ^= FILE_ATTRIBUTE_READONLY;\r\n            if (!SetFileInformationByHandle(_Handle._Get(), FileBasicInfo, &_Basic_info, sizeof(_Basic_info))) {\r\n                return {false, __std_win_error{GetLastError()}};\r\n            }\r\n            // removed FILE_ATTRIBUTE_READONLY, now try to set the delete flag again\r\n            _Last_error = _Set_delete_flag(_Handle._Raw);\r\n            if (_Last_error == __std_win_error::_Success) {\r\n                return {true, __std_win_error::_Success};\r\n            } else if (_Last_error == __std_win_error::_Access_denied) {\r\n                // looks like we failed to set the delete flag, after clearing the FILE_ATTRIBUTE_READONLY flag\r\n                // perform rollback\r\n                _Basic_info.FileAttributes |= FILE_ATTRIBUTE_READONLY;\r\n                if (!SetFileInformationByHandle(_Handle._Get(), FileBasicInfo, &_Basic_info, sizeof(_Basic_info))) {\r\n                    return {false, __std_win_error{GetLastError()}};\r\n                }\r\n                return {false, _Last_error};\r\n            }\r\n        } else {\r\n            return {false, _Last_error};\r\n        }\r\n    } else {\r\n        return {false, _Last_error};\r\n    }\r\n\r\n    return {false, __std_win_error{GetLastError()}};\r\n}\r\n\r\n[[nodiscard]] __std_win_error __stdcall __std_fs_change_permissions(\r\n    _In_z_ const wchar_t* const _Path, _In_ const bool _Follow_symlinks, _In_ const bool _Readonly) noexcept {\r\n    const DWORD _Old_attributes = GetFileAttributesW(_Path);\r\n    if (_Old_attributes == INVALID_FILE_ATTRIBUTES) {\r\n        return __std_win_error{GetLastError()};\r\n    }\r\n\r\n    const DWORD _Readonly_test = _Readonly ? FILE_ATTRIBUTE_READONLY : 0;\r\n    if ((_Old_attributes & FILE_ATTRIBUTE_REPARSE_POINT) != 0u && _Follow_symlinks) {\r\n        __std_win_error _Err;\r\n        _STD _Fs_file _Handle(_Path,\r\n            __std_access_rights::_File_read_attributes | __std_access_rights::_File_write_attributes,\r\n            __std_fs_file_flags::_Backup_semantics, &_Err);\r\n\r\n        if (_Err != __std_win_error::_Success) {\r\n            return _Err;\r\n        }\r\n\r\n        FILE_BASIC_INFO _Basic_info;\r\n        if (!GetFileInformationByHandleEx(_Handle._Get(), FileBasicInfo, &_Basic_info, sizeof(_Basic_info))) {\r\n            return __std_win_error{GetLastError()};\r\n        }\r\n\r\n        if ((_Basic_info.FileAttributes & FILE_ATTRIBUTE_READONLY) == _Readonly_test) { // nothing to do\r\n            return __std_win_error::_Success;\r\n        }\r\n\r\n        _Basic_info.FileAttributes ^= FILE_ATTRIBUTE_READONLY;\r\n        if (SetFileInformationByHandle(_Handle._Get(), FileBasicInfo, &_Basic_info, sizeof(_Basic_info))) {\r\n            return __std_win_error::_Success;\r\n        }\r\n\r\n        return __std_win_error{GetLastError()};\r\n    }\r\n\r\n    if ((_Old_attributes & FILE_ATTRIBUTE_READONLY) == _Readonly_test) { // nothing to do\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    if (SetFileAttributesW(_Path, _Old_attributes ^ FILE_ATTRIBUTE_READONLY)) {\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    return __std_win_error{GetLastError()};\r\n}\r\n\r\n[[nodiscard]] __std_win_error __stdcall __std_fs_rename(\r\n    _In_z_ const wchar_t* const _Source, _In_z_ const wchar_t* const _Target) noexcept {\r\n    if (MoveFileExW(_Source, _Target, MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING)) {\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    return __std_win_error{GetLastError()};\r\n}\r\n\r\n[[nodiscard]] __std_win_error __stdcall __std_fs_resize_file(\r\n    _In_z_ const wchar_t* const _Target, const uintmax_t _New_size) noexcept {\r\n    __std_win_error _Err;\r\n    const _STD _Fs_file _Handle(_Target, __std_access_rights::_File_generic_write, __std_fs_file_flags::_None, &_Err);\r\n    if (_Err != __std_win_error::_Success) {\r\n        return _Err;\r\n    }\r\n\r\n    FILE_END_OF_FILE_INFO _File_info;\r\n    _File_info.EndOfFile.QuadPart = static_cast<LONGLONG>(_New_size);\r\n\r\n    if (SetFileInformationByHandle(_Handle._Get(), FileEndOfFileInfo, &_File_info, sizeof(_File_info))) {\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    return __std_win_error{GetLastError()};\r\n}\r\n\r\n[[nodiscard]] __std_win_error __stdcall __std_fs_space(_In_z_ const wchar_t* const _Target,\r\n    _Out_ uintmax_t* const _Available, _Out_ uintmax_t* const _Total_bytes,\r\n    _Out_ uintmax_t* const _Free_bytes) noexcept {\r\n    // get capacity information for the volume on which the file _Target resides\r\n    static_assert(sizeof(uintmax_t) == sizeof(ULARGE_INTEGER) && alignof(uintmax_t) == alignof(ULARGE_INTEGER),\r\n        \"Size and alignment must match for reinterpret_cast<PULARGE_INTEGER>\");\r\n    const auto _Available_c   = reinterpret_cast<PULARGE_INTEGER>(_Available);\r\n    const auto _Total_bytes_c = reinterpret_cast<PULARGE_INTEGER>(_Total_bytes);\r\n    const auto _Free_bytes_c  = reinterpret_cast<PULARGE_INTEGER>(_Free_bytes);\r\n    if (GetDiskFreeSpaceExW(_Target, _Available_c, _Total_bytes_c, _Free_bytes_c)) {\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    __std_win_error _Last_error{GetLastError()};\r\n    _Available_c->QuadPart   = ~0ull;\r\n    _Total_bytes_c->QuadPart = ~0ull;\r\n    _Free_bytes_c->QuadPart  = ~0ull;\r\n    if (_Last_error != __std_win_error::_Directory_name_is_invalid) {\r\n        return _Last_error;\r\n    }\r\n\r\n    // Input could have been a file; canonicalize and remove the last component.\r\n    // We use VOLUME_NAME_NT because it always has a mapping available and we don't care about the canonical path\r\n    // being \"ugly\" due to needing the _Dos_to_nt_prefix.\r\n    static constexpr wchar_t _Dos_to_nt_prefix[] = LR\"(\\\\?\\GLOBALROOT)\";\r\n    constexpr size_t _Dos_to_nt_prefix_count     = sizeof(_Dos_to_nt_prefix) / sizeof(wchar_t) - 1;\r\n    __crt_unique_heap_ptr<wchar_t> _Buf;\r\n    DWORD _Actual_length;\r\n    {\r\n        const _STD _Fs_file _Handle(\r\n            _Target, __std_access_rights::_File_read_attributes, __std_fs_file_flags::_Backup_semantics, &_Last_error);\r\n        if (_Last_error != __std_win_error::_Success) {\r\n            return _Last_error;\r\n        }\r\n\r\n        DWORD _Buf_count = MAX_PATH;\r\n        for (;;) {\r\n            _Buf = _malloc_crt_t(wchar_t, _Buf_count);\r\n            if (!_Buf) {\r\n                return __std_win_error::_Not_enough_memory;\r\n            }\r\n\r\n            _Actual_length = GetFinalPathNameByHandleW(_Handle._Get(), _Buf.get() + _Dos_to_nt_prefix_count,\r\n                _Buf_count - _Dos_to_nt_prefix_count, FILE_NAME_NORMALIZED | VOLUME_NAME_NT);\r\n            if (_Actual_length == 0) {\r\n                return __std_win_error{GetLastError()};\r\n            }\r\n\r\n            _Actual_length += _Dos_to_nt_prefix_count;\r\n            if (_Actual_length <= _Buf_count) {\r\n                break;\r\n            }\r\n\r\n            _Buf_count = _Actual_length;\r\n        }\r\n    } // close _Handle\r\n\r\n    const auto _Ptr = _Buf.get();\r\n\r\n    memcpy(_Ptr, _Dos_to_nt_prefix, _Dos_to_nt_prefix_count * sizeof(wchar_t));\r\n\r\n    // insert null terminator at the last slash\r\n    auto _Cursor = _Ptr + _Actual_length;\r\n    do {\r\n        --_Cursor; // cannot run off start because _Dos_to_nt_prefix contains a backslash\r\n    } while (*_Cursor != L'\\\\');\r\n\r\n    *_Cursor = L'\\0';\r\n    if (GetDiskFreeSpaceExW(_Ptr, _Available_c, _Total_bytes_c, _Free_bytes_c)) {\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    _Available_c->QuadPart   = ~0ull;\r\n    _Total_bytes_c->QuadPart = ~0ull;\r\n    _Free_bytes_c->QuadPart  = ~0ull;\r\n    return __std_win_error{GetLastError()};\r\n}\r\n\r\nnamespace {\r\n    _Success_(return > 0 && return < nBufferLength) DWORD WINAPI _Stl_GetTempPath2W(\r\n        _In_ DWORD nBufferLength, _Out_writes_to_opt_(nBufferLength, return +1) LPWSTR lpBuffer) noexcept {\r\n#if !defined(_ONECORE)\r\n        // See GH-3011: This is intentionally not attempting to cache the function pointer.\r\n        // TRANSITION, ABI: This should use __crtGetTempPath2W after this code is moved into the STL's DLL.\r\n\r\n        // use GetTempPath2W if it is available (only on Windows 11+)...\r\n        const auto _Kernel32 = ::GetModuleHandleW(L\"kernel32.dll\");\r\n        _Analysis_assume_(_Kernel32);\r\n        const auto _Pf = reinterpret_cast<decltype(&::GetTempPath2W)>(::GetProcAddress(_Kernel32, \"GetTempPath2W\"));\r\n        if (_Pf) {\r\n            return _Pf(nBufferLength, lpBuffer);\r\n        }\r\n#endif // ^^^ !defined(_ONECORE) ^^^\r\n\r\n        // ...otherwise use GetTempPathW.\r\n        return GetTempPathW(nBufferLength, lpBuffer);\r\n    }\r\n} // unnamed namespace\r\n\r\n[[nodiscard]] _Success_(return._Error == __std_win_error::_Success) __std_ulong_and_error\r\n    __stdcall __std_fs_get_temp_path(_Out_writes_z_(__std_fs_temp_path_max) wchar_t* const _Target) noexcept {\r\n    // calls GetTempPath2W if available (Win11+), else calls GetTempPathW\r\n    // If getting the path failed, returns 0 size; otherwise, returns the size of the\r\n    // expected directory. If the path could be resolved to an existing directory,\r\n    // returns __std_win_error::_Success; otherwise, returns __std_win_error::_Max.\r\n    const auto _Size = _Stl_GetTempPath2W(__std_fs_temp_path_max, _Target);\r\n    if (_Size == 0) {\r\n        return {0, __std_win_error{GetLastError()}};\r\n    }\r\n\r\n    // Effects: If exists(p) is false or is_directory(p) is false, an error is reported\r\n    const DWORD _Attributes = GetFileAttributesW(_Target);\r\n    if (_Attributes == INVALID_FILE_ATTRIBUTES || (_Attributes & FILE_ATTRIBUTE_DIRECTORY) == 0u) {\r\n        return {_Size, __std_win_error::_Max};\r\n    }\r\n\r\n    if ((_Attributes & FILE_ATTRIBUTE_REPARSE_POINT) != 0u) {\r\n        __std_fs_file_handle _Handle;\r\n        const auto _Last_error = __std_fs_open_handle(\r\n            &_Handle, _Target, __std_access_rights::_File_read_attributes, __std_fs_file_flags::_Backup_semantics);\r\n        __std_fs_close_handle(_Handle);\r\n        if (_Last_error != __std_win_error::_Success) {\r\n            return {_Size, __std_win_error::_Max};\r\n        }\r\n    }\r\n\r\n    return {_Size, __std_win_error::_Success};\r\n}\r\n\r\n[[nodiscard]] _Success_(return == __std_win_error::_Success) __std_win_error\r\n    __stdcall __std_fs_get_stats(_In_z_ const wchar_t* const _Path, __std_fs_stats* const _Stats,\r\n        _In_ __std_fs_stats_flags _Flags, _In_ const __std_fs_file_attr _Symlink_attribute_hint) noexcept {\r\n    const bool _Follow_symlinks = _STD _Bitmask_includes_any(_Flags, __std_fs_stats_flags::_Follow_symlinks);\r\n    _Flags &= ~__std_fs_stats_flags::_Follow_symlinks;\r\n    if (_Follow_symlinks && _STD _Bitmask_includes_any(_Flags, __std_fs_stats_flags::_Reparse_tag)) {\r\n        return __std_win_error::_Invalid_parameter;\r\n    }\r\n\r\n    if (_STD _Bitmask_includes_any(_Flags, __std_fs_stats_flags::_Attributes)\r\n        && _Symlink_attribute_hint != __std_fs_file_attr::_Invalid\r\n        && (!_STD _Bitmask_includes_any(_Symlink_attribute_hint, __std_fs_file_attr::_Reparse_point)\r\n            || !_Follow_symlinks)) { // if the hint can't be a symlink, we already have the attributes\r\n        _Flags &= ~__std_fs_stats_flags::_Attributes;\r\n        _Stats->_Attributes = _Symlink_attribute_hint;\r\n    }\r\n\r\n    if (_Flags == __std_fs_stats_flags::_None) { // no more data to get, report success\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    constexpr auto _Get_file_attributes_data =\r\n        __std_fs_stats_flags::_Attributes | __std_fs_stats_flags::_File_size | __std_fs_stats_flags::_Last_write_time;\r\n    if (_STD _Bitmask_includes_any(_Flags, _Get_file_attributes_data)) {\r\n        // caller wants something GetFileAttributesExW/FindFirstFileW might provide\r\n        if (_Symlink_attribute_hint == __std_fs_file_attr::_Invalid\r\n            || !_STD _Bitmask_includes_any(_Symlink_attribute_hint, __std_fs_file_attr::_Reparse_point)\r\n            || !_Follow_symlinks) { // we might not be a symlink or not following symlinks, so\r\n                                    // GetFileAttributesExW/FindFirstFileW would return the right answer\r\n\r\n            WIN32_FILE_ATTRIBUTE_DATA _Data;\r\n            if (!GetFileAttributesExW(_Path, GetFileExInfoStandard, &_Data)) {\r\n                // In some cases, ERROR_SHARING_VIOLATION is returned from GetFileAttributesExW;\r\n                // FindFirstFileW will work in those cases if we have read permissions on the directory.\r\n                if (const __std_win_error _Last_error{GetLastError()};\r\n                    _Last_error != __std_win_error::_Sharing_violation) {\r\n                    return _Last_error;\r\n                }\r\n\r\n                // Note that FindFirstFileW does allow globbing characters and has extra behavior with them\r\n                // that we don't want. However, GetFileAttributesExW would've failed with ERROR_INVALID_NAME\r\n                // if there were any globbing characters in _Path.\r\n                WIN32_FIND_DATAW _Find_data;\r\n                {\r\n                    HANDLE _Find_handle = FindFirstFileW(_Path, &_Find_data);\r\n                    if (_Find_handle == INVALID_HANDLE_VALUE) {\r\n                        return __std_win_error{GetLastError()};\r\n                    }\r\n                    FindClose(_Find_handle);\r\n                }\r\n\r\n                _Data.dwFileAttributes = _Find_data.dwFileAttributes;\r\n                _Data.nFileSizeHigh    = _Find_data.nFileSizeHigh;\r\n                _Data.nFileSizeLow     = _Find_data.nFileSizeLow;\r\n                _Data.ftLastWriteTime  = _Find_data.ftLastWriteTime;\r\n            }\r\n\r\n            const __std_fs_file_attr _Attributes{_Data.dwFileAttributes};\r\n            if (!_Follow_symlinks || !_STD _Bitmask_includes_any(_Attributes, __std_fs_file_attr::_Reparse_point)) {\r\n                // if we aren't following symlinks or can't be a symlink, that data was useful, record\r\n                _Stats->_Attributes      = _Attributes;\r\n                _Stats->_File_size       = _Merge_to_ull(_Data.nFileSizeHigh, _Data.nFileSizeLow);\r\n                _Stats->_Last_write_time = static_cast<long long>(\r\n                    _Merge_to_ull(_Data.ftLastWriteTime.dwHighDateTime, _Data.ftLastWriteTime.dwLowDateTime));\r\n\r\n                _Flags &= ~_Get_file_attributes_data;\r\n            }\r\n\r\n            if (!_STD _Bitmask_includes_any(_Attributes, __std_fs_file_attr::_Reparse_point)\r\n                && _STD _Bitmask_includes_any(_Flags, __std_fs_stats_flags::_Reparse_tag)) {\r\n                // if reparse tag is requested by caller but the file is not a reparse point, set tag to _None\r\n                _Stats->_Reparse_point_tag = __std_fs_reparse_tag::_None;\r\n                _Flags &= ~__std_fs_stats_flags::_Reparse_tag;\r\n            }\r\n        }\r\n    }\r\n\r\n    if (_Flags == __std_fs_stats_flags::_None) { // no more data to get, report success\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    // Let's try to open the file (either reparse point or destination).\r\n    __std_win_error _Last_error;\r\n    const auto _File_flags = _Follow_symlinks\r\n                               ? __std_fs_file_flags::_Backup_semantics\r\n                               : __std_fs_file_flags::_Backup_semantics | __std_fs_file_flags::_Open_reparse_point;\r\n    const _STD _Fs_file _Handle(_Path, __std_access_rights::_File_read_attributes, _File_flags, &_Last_error);\r\n    if (_Last_error != __std_win_error::_Success) {\r\n        return _Last_error;\r\n    }\r\n\r\n    constexpr auto _Basic_info_data    = __std_fs_stats_flags::_Attributes | __std_fs_stats_flags::_Last_write_time;\r\n    constexpr auto _Standard_info_data = __std_fs_stats_flags::_File_size | __std_fs_stats_flags::_Link_count;\r\n\r\n    if (_STD _Bitmask_includes_any(_Flags, _Basic_info_data | __std_fs_stats_flags::_Reparse_tag)) {\r\n        FILE_BASIC_INFO _Info;\r\n        if (!GetFileInformationByHandleEx(_Handle._Get(), FileBasicInfo, &_Info, sizeof(_Info))) {\r\n            return __std_win_error{GetLastError()};\r\n        }\r\n\r\n        _Stats->_Attributes      = __std_fs_file_attr{_Info.FileAttributes};\r\n        _Stats->_Last_write_time = _Info.LastWriteTime.QuadPart;\r\n        _Flags &= ~_Basic_info_data;\r\n        if (_STD _Bitmask_includes_any(_Flags, __std_fs_stats_flags::_Reparse_tag)) {\r\n            // Calling GetFileInformationByHandleEx with FileAttributeTagInfo fails on FAT file system with\r\n            // ERROR_INVALID_PARAMETER. We avoid calling this for non-reparse-points.\r\n            if ((_Info.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) != 0u) {\r\n                FILE_ATTRIBUTE_TAG_INFO _TagInfo;\r\n                if (!GetFileInformationByHandleEx(_Handle._Get(), FileAttributeTagInfo, &_TagInfo, sizeof(_TagInfo))) {\r\n                    return __std_win_error{GetLastError()};\r\n                }\r\n\r\n                _Stats->_Reparse_point_tag = __std_fs_reparse_tag{_TagInfo.ReparseTag};\r\n            } else {\r\n                _Stats->_Reparse_point_tag = __std_fs_reparse_tag::_None;\r\n            }\r\n            _Flags &= ~__std_fs_stats_flags::_Reparse_tag;\r\n        }\r\n    }\r\n\r\n    if (_STD _Bitmask_includes_any(_Flags, _Standard_info_data)) {\r\n        FILE_STANDARD_INFO _Info;\r\n        if (!GetFileInformationByHandleEx(_Handle._Get(), FileStandardInfo, &_Info, sizeof(_Info))) {\r\n            return __std_win_error{GetLastError()};\r\n        }\r\n\r\n        _Stats->_File_size  = _Info.EndOfFile.QuadPart;\r\n        _Stats->_Link_count = _Info.NumberOfLinks;\r\n        _Flags &= ~_Standard_info_data;\r\n    }\r\n\r\n    if (_Flags == __std_fs_stats_flags::_None) { // no more data to get, report success\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    // somehow the caller asked for more data than we yet know about, maybe new headers\r\n    // targeting old separately compiled bits\r\n    return __std_win_error::_Not_supported;\r\n}\r\n\r\n[[nodiscard]] __std_fs_create_directory_result __stdcall __std_fs_create_directory(\r\n    _In_z_ const wchar_t* const _New_directory) noexcept {\r\n    if (CreateDirectoryW(_New_directory, nullptr)) {\r\n        return {true, __std_win_error::_Success};\r\n    }\r\n\r\n    __std_win_error _Last_error{GetLastError()};\r\n    if (_Last_error == __std_win_error::_Already_exists) {\r\n        __std_fs_stats _Stats;\r\n        _Last_error = __std_fs_get_stats(\r\n            _New_directory, &_Stats, __std_fs_stats_flags::_Attributes | __std_fs_stats_flags::_Follow_symlinks);\r\n        if (_Last_error == __std_win_error::_Success\r\n            && !_STD _Bitmask_includes_any(_Stats._Attributes, __std_fs_file_attr::_Directory)) {\r\n            _Last_error = __std_win_error::_Already_exists;\r\n        }\r\n    }\r\n\r\n    return {false, _Last_error};\r\n}\r\n\r\n// TRANSITION, ABI: __std_fs_create_directory_template() is preserved for binary compatibility\r\n[[nodiscard]] __std_fs_create_directory_result __stdcall __std_fs_create_directory_template(\r\n    _In_z_ const wchar_t* const _Template_directory, _In_z_ const wchar_t* const _New_directory) noexcept {\r\n#if defined(_CRT_APP)\r\n    (void) _Template_directory;\r\n    return __std_fs_create_directory(_New_directory);\r\n#else // ^^^ defined(_CRT_APP) / !defined(_CRT_APP) vvv\r\n    if (CreateDirectoryExW(_Template_directory, _New_directory, nullptr)) {\r\n        return {true, __std_win_error::_Success};\r\n    }\r\n\r\n    __std_win_error _Last_error{GetLastError()};\r\n    if (_Last_error == __std_win_error::_Already_exists) {\r\n        _Last_error = __std_win_error::_Success;\r\n    }\r\n\r\n    return {false, _Last_error};\r\n#endif // defined(_CRT_APP)\r\n}\r\n\r\n[[nodiscard]] _Success_(return._Error == __std_win_error::_Success) __std_ulong_and_error\r\n    __stdcall __std_fs_get_current_path(\r\n        _In_ const unsigned long _Target_size, _Out_writes_z_(_Target_size) wchar_t* const _Target) noexcept {\r\n    // If getting the path failed, GetCurrentDirectoryW returns 0; otherwise, returns the size of the expected\r\n    // directory.\r\n    const auto _Size = GetCurrentDirectoryW(_Target_size, _Target);\r\n    if (_Size != 0 && _Size <= _Target_size) {\r\n        return {_Size, __std_win_error::_Success};\r\n    }\r\n\r\n    return {_Size, __std_win_error{GetLastError()}};\r\n}\r\n\r\n[[nodiscard]] __std_win_error __stdcall __std_fs_set_current_path(_In_z_ const wchar_t* const _Target) noexcept {\r\n    // If setting the path failed, SetCurrentDirectoryW returns 0; otherwise returns non-zero.\r\n    if (SetCurrentDirectoryW(_Target)) {\r\n        return __std_win_error::_Success;\r\n    }\r\n\r\n    return __std_win_error{GetLastError()};\r\n}\r\n\r\n} // extern \"C\"\r\n"
  },
  {
    "path": "stl/src/fiopen.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// _Fiopen(const char */const wchar_t *, ios_base::openmode)\r\n\r\n#include <fstream>\r\n\r\nnamespace {\r\n    using _STD ios_base;\r\n\r\n    FILE* _Xfsopen(_In_z_ const char* filename, _In_ int mode, _In_ int prot) {\r\n        static const char* const mods[] = {// fopen mode strings corresponding to valid[i]\r\n            \"r\", \"w\", \"w\", \"a\", \"rb\", \"wb\", \"wb\", \"ab\", \"r+\", \"w+\", \"a+\", \"r+b\", \"w+b\", \"a+b\", \"wx\", \"wx\", \"w+x\", \"wbx\",\r\n            \"wbx\", \"w+bx\", nullptr};\r\n\r\n        return _fsopen(filename, mods[mode], prot);\r\n    }\r\n\r\n    FILE* _Xfsopen(_In_z_ const wchar_t* filename, _In_ int mode, _In_ int prot) {\r\n        static const wchar_t* const mods[] = {// fopen mode strings corresponding to valid[i]\r\n            L\"r\", L\"w\", L\"w\", L\"a\", L\"rb\", L\"wb\", L\"wb\", L\"ab\", L\"r+\", L\"w+\", L\"a+\", L\"r+b\", L\"w+b\", L\"a+b\", L\"wx\",\r\n            L\"wx\", L\"w+x\", L\"wbx\", L\"wbx\", L\"w+bx\", nullptr};\r\n\r\n        return _wfsopen(filename, mods[mode], prot);\r\n    }\r\n\r\n    template <class CharT>\r\n    FILE* _Xfiopen(const CharT* filename, ios_base::openmode mode, int prot) {\r\n        static const ios_base::openmode valid[] = {\r\n            // valid combinations of open flags\r\n            ios_base::in,\r\n            ios_base::out,\r\n            ios_base::out | ios_base::trunc,\r\n            ios_base::out | ios_base::app,\r\n            ios_base::in | ios_base::binary,\r\n            ios_base::out | ios_base::binary,\r\n            ios_base::out | ios_base::trunc | ios_base::binary,\r\n            ios_base::out | ios_base::app | ios_base::binary,\r\n            ios_base::in | ios_base::out,\r\n            ios_base::in | ios_base::out | ios_base::trunc,\r\n            ios_base::in | ios_base::out | ios_base::app,\r\n            ios_base::in | ios_base::out | ios_base::binary,\r\n            ios_base::in | ios_base::out | ios_base::trunc | ios_base::binary,\r\n            ios_base::in | ios_base::out | ios_base::app | ios_base::binary,\r\n            ios_base::out | ios_base::_Noreplace,\r\n            ios_base::out | ios_base::trunc | ios_base::_Noreplace,\r\n            ios_base::out | ios_base::in | ios_base::trunc | ios_base::_Noreplace,\r\n            ios_base::out | ios_base::binary | ios_base::_Noreplace,\r\n            ios_base::out | ios_base::binary | ios_base::trunc | ios_base::_Noreplace,\r\n            ios_base::out | ios_base::in | ios_base::trunc | ios_base::binary | ios_base::_Noreplace,\r\n        };\r\n\r\n        FILE* fp          = nullptr;\r\n        const bool at_end = (mode & ios_base::ate) != 0;\r\n\r\n        if (mode & ios_base::_Nocreate) {\r\n            mode |= ios_base::in; // file must exist\r\n        }\r\n\r\n        if (mode & ios_base::app) {\r\n            mode |= ios_base::out; // extension -- app implies out\r\n        }\r\n\r\n        mode &= ~(ios_base::ate | ios_base::_Nocreate);\r\n\r\n        // look for a valid mode\r\n        int n = 0;\r\n        while (valid[n] != mode) {\r\n            if (++n == static_cast<int>(_STD size(valid))) {\r\n                return nullptr; // no valid mode\r\n            }\r\n        }\r\n\r\n        if ((fp = _Xfsopen(filename, n, prot)) == nullptr) {\r\n            return nullptr; // open failed\r\n        }\r\n\r\n        if (at_end && fseek(fp, 0, SEEK_END) != 0) {\r\n            fclose(fp); // can't position at end\r\n            return nullptr;\r\n        }\r\n\r\n        return fp; // no need to seek to end, or seek succeeded\r\n    }\r\n} // unnamed namespace\r\n\r\n_STD_BEGIN\r\n\r\n_CRTIMP2_PURE FILE* __CLRCALL_PURE_OR_CDECL _Fiopen(\r\n    const char* filename, ios_base::openmode mode, int prot) { // open wide-named file with byte name\r\n    return _Xfiopen(filename, mode, prot);\r\n}\r\n\r\n_CRTIMP2_PURE FILE* __CLRCALL_PURE_OR_CDECL _Fiopen(\r\n    const wchar_t* filename, ios_base::openmode mode, int prot) { // open a file with native name\r\n    return _Xfiopen(filename, mode, prot);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE FILE* __CLRCALL_PURE_OR_CDECL _Fiopen(\r\n    const unsigned short* _Filename, ios_base::openmode _Mode, int _Prot) { // open file with wide name\r\n    return _Fiopen(reinterpret_cast<const wchar_t*>(_Filename), _Mode, _Prot);\r\n}\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/format.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Implements a win32 API wrapper for <format>\r\n\r\n#include <__msvc_xlocinfo_types.hpp>\r\n#include <xfilesystem_abi.h>\r\n\r\n#include <Windows.h>\r\n\r\nstatic_assert(__std_code_page::_Acp == __std_code_page{CP_ACP});\r\n\r\nextern \"C\" [[nodiscard]] __std_win_error __stdcall __std_get_cvt(\r\n    const __std_code_page _Codepage, _Cvtvec* const _Pcvt) noexcept {\r\n    // get conversion info for an arbitrary codepage\r\n    *_Pcvt = {};\r\n\r\n    CPINFOEXW _Info{};\r\n    const DWORD _Flags = 0; // reserved, must be zero\r\n    if (!GetCPInfoExW(static_cast<UINT>(_Codepage), _Flags, &_Info)) {\r\n        // NB: the only documented failure mode for GetCPInfoExW is ERROR_INVALID_PARAMETER,\r\n        // so in practice it should never fail for CP_ACP.\r\n        return __std_win_error{GetLastError()};\r\n    }\r\n\r\n    _Pcvt->_Page     = _Info.CodePage;\r\n    _Pcvt->_Mbcurmax = _Info.MaxCharSize;\r\n\r\n    for (int _Idx = 0; _Idx < MAX_LEADBYTES; _Idx += 2) {\r\n        if (_Info.LeadByte[_Idx] == 0 && _Info.LeadByte[_Idx + 1] == 0) {\r\n            break;\r\n        }\r\n\r\n        for (unsigned int _First = _Info.LeadByte[_Idx], _Last = _Info.LeadByte[_Idx + 1]; _First <= _Last; ++_First) {\r\n            _Pcvt->_Isleadbyte[_First >> 3] |= 1u << (_First & 0b111u);\r\n        }\r\n    }\r\n\r\n    return __std_win_error::_Success;\r\n}\r\n"
  },
  {
    "path": "stl/src/future.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <exception>\r\n#include <future>\r\n\r\n_STD_BEGIN\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Throw_future_error(const error_code& _Code) {\r\n    _THROW(future_error(_Code));\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Rethrow_future_exception(exception_ptr _Ptr) {\r\n    _STD rethrow_exception(_Ptr);\r\n}\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/init_locks.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <yvals.h>\r\n\r\n_STD_BEGIN\r\n\r\nclass _CRTIMP2_PURE_IMPORT _Init_locks { // initialize mutexes\r\npublic:\r\n#ifdef _M_CEE_PURE\r\n    __CLR_OR_THIS_CALL _Init_locks() noexcept {\r\n        _Init_locks_ctor(this);\r\n    }\r\n\r\n    __CLR_OR_THIS_CALL ~_Init_locks() noexcept {\r\n        _Init_locks_dtor(this);\r\n    }\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n    __thiscall _Init_locks() noexcept;\r\n    __thiscall ~_Init_locks() noexcept;\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\nprivate:\r\n    static void __cdecl _Init_locks_ctor(_Init_locks*) noexcept;\r\n    static void __cdecl _Init_locks_dtor(_Init_locks*) noexcept;\r\n};\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/instances.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// force DLL instances\r\n\r\n#define __FORCE_INSTANCE\r\n\r\n#include <ios>\r\n#include <istream>\r\n#include <locale>\r\n#include <ostream>\r\n#include <streambuf>\r\n#include <xlocale>\r\n#include <xlocmes>\r\n#include <xlocmon>\r\n#include <xlocnum>\r\n#include <xloctime>\r\n\r\n_STD_BEGIN\r\n\r\ntemplate class _CRTIMP2_PURE_IMPORT _Yarn<char>;\r\ntemplate class _CRTIMP2_PURE_IMPORT _Yarn<wchar_t>;\r\ntemplate class _CRTIMP2_PURE_IMPORT _Yarn<unsigned short>;\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/iomanip.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// instantiations of iomanip\r\n\r\n#include <iomanip>\r\n_STD_BEGIN\r\nstatic void __cdecl rsfun(ios_base& iostr, ios_base::fmtflags mask) { // reset specified format flags\r\n    iostr.setf(ios_base::_Fmtzero, mask);\r\n}\r\n\r\nstatic void __cdecl sifun(ios_base& iostr, ios_base::fmtflags mask) { // set specified format flags\r\n    iostr.setf(ios_base::_Fmtmask, mask);\r\n}\r\n\r\nstatic void __cdecl sbfun(ios_base& iostr, int base) { // set base\r\n    iostr.setf(base == 8    ? ios_base::oct\r\n               : base == 10 ? ios_base::dec\r\n               : base == 16 ? ios_base::hex\r\n                            : ios_base::_Fmtzero,\r\n        ios_base::basefield);\r\n}\r\n\r\nstatic void __cdecl spfun(ios_base& iostr, streamsize prec) { // set precision\r\n    iostr.precision(prec);\r\n}\r\n\r\nstatic void __cdecl swfun(ios_base& iostr, streamsize wide) { // set width\r\n    iostr.width(wide);\r\n}\r\n\r\n_MRTIMP2 _Smanip<ios_base::fmtflags> __cdecl resetiosflags(\r\n    ios_base::fmtflags mask) { // manipulator to reset format flags\r\n    return _Smanip<ios_base::fmtflags>(&rsfun, mask);\r\n}\r\n\r\n_MRTIMP2 _Smanip<ios_base::fmtflags> __cdecl setiosflags(ios_base::fmtflags mask) { // manipulator to set format flags\r\n    return _Smanip<ios_base::fmtflags>(&sifun, mask);\r\n}\r\n\r\n_MRTIMP2 _Smanip<int> __cdecl setbase(int base) { // manipulator to set base\r\n    return _Smanip<int>(&sbfun, base);\r\n}\r\n\r\n_MRTIMP2 _Smanip<streamsize> __cdecl setprecision(streamsize prec) { // manipulator to set precision\r\n    return _Smanip<streamsize>(&spfun, prec);\r\n}\r\n\r\n_MRTIMP2 _Smanip<streamsize> __cdecl setw(streamsize wide) { // manipulator to set width\r\n    return _Smanip<streamsize>(&swfun, wide);\r\n}\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/ios.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// ios_base basic members\r\n\r\n#include <xiosbase>\r\n_STD_BEGIN\r\n\r\nconstexpr int _Nstdstr = 8; // cin, wcin, cout, wcout, cerr, wcerr, clog, wclog\r\n\r\n// TRANSITION, ABI: _BADOFF is preserved for binary compatibility\r\n#if defined(_M_CEE_PURE)\r\nextern const streamoff _BADOFF;\r\nconst streamoff _BADOFF = -1;\r\n#else\r\nextern _CRTDATA2_IMPORT _PGLOBAL const streamoff _BADOFF;\r\n_PGLOBAL _CRTDATA2_IMPORT const streamoff _BADOFF = -1; // initialize constant for bad file offset\r\n#endif\r\n\r\n__PURE_APPDOMAIN_GLOBAL int ios_base::_Index = 0; // initialize source of unique indexes\r\n__PURE_APPDOMAIN_GLOBAL bool ios_base::_Sync = true; // initialize synchronization flag\r\n\r\n__PURE_APPDOMAIN_GLOBAL static ios_base* stdstr[_Nstdstr + 2] = {\r\n    nullptr}; // [1, _Nstdstr] hold pointers to standard streams\r\n__PURE_APPDOMAIN_GLOBAL static char stdopens[_Nstdstr + 2] = {0}; // [1, _Nstdstr] hold open counts for standard streams\r\n\r\nvoid __CLRCALL_PURE_OR_CDECL ios_base::_Ios_base_dtor(ios_base* _This) { // destroy the object\r\n    if (0 < _This->_Stdstr && 0 < --stdopens[_This->_Stdstr]) {\r\n        return;\r\n    }\r\n\r\n    _This->_Tidy();\r\n\r\n    delete _This->_Ploc;\r\n}\r\n\r\nvoid __CLRCALL_PURE_OR_CDECL ios_base::_Addstd(ios_base* _This) { // add standard stream to destructor list\r\n    _BEGIN_LOCK(_LOCK_STREAM)\r\n    for (_This->_Stdstr = 1; _This->_Stdstr < _Nstdstr; ++_This->_Stdstr) {\r\n        if (stdstr[_This->_Stdstr] == nullptr || stdstr[_This->_Stdstr] == _This) {\r\n            break; // found a candidate\r\n        }\r\n    }\r\n\r\n    stdstr[_This->_Stdstr] = _This;\r\n    ++stdopens[_This->_Stdstr];\r\n    _END_LOCK()\r\n}\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/iosptrs.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// iostream object pointers\r\n\r\n#ifdef _M_CEE_PURE\r\n#error This file cannot be built with /clr:pure.\r\n#endif\r\n\r\n#include <iostream>\r\n\r\n#include <Windows.h>\r\n\r\n#include \"init_locks.hpp\"\r\n\r\n_STD_BEGIN\r\n#pragma warning(disable : 4074)\r\n#pragma init_seg(compiler)\r\n_PGLOBAL static std::_Init_locks initlocks;\r\n\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT istream* _Ptr_cin  = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT ostream* _Ptr_cout = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT ostream* _Ptr_cerr = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT ostream* _Ptr_clog = nullptr;\r\n\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT wistream* _Ptr_wcin  = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT wostream* _Ptr_wcout = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT wostream* _Ptr_wcerr = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT wostream* _Ptr_wclog = nullptr;\r\n_STD_END\r\n\r\nconstexpr int _Nats = 10; // fclose, xgetloc, locks, facet free, etc.\r\n\r\n__PURE_APPDOMAIN_GLOBAL static void(__cdecl* atfuns_cdecl[_Nats])() = {};\r\n__PURE_APPDOMAIN_GLOBAL static size_t atcount_cdecl                 = _Nats;\r\n_MRTIMP2 void __cdecl _Atexit(void(__cdecl* pf)()) { // add to wrapup list\r\n    if (atcount_cdecl == 0) {\r\n        _CSTD abort(); // stack full, give up\r\n    } else {\r\n        atfuns_cdecl[--atcount_cdecl] = reinterpret_cast<void(__cdecl*)()>(EncodePointer(reinterpret_cast<void*>(pf)));\r\n    }\r\n}\r\n\r\nstruct _Init_atexit { // controller for atexit processing\r\n    __CLR_OR_THIS_CALL ~_Init_atexit() noexcept { // process wrapup functions\r\n        while (atcount_cdecl < _Nats) {\r\n            const auto pf = reinterpret_cast<void(__cdecl*)()>(\r\n                DecodePointer(reinterpret_cast<void*>(atfuns_cdecl[atcount_cdecl++])));\r\n            if (pf) {\r\n                pf();\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\n__PURE_APPDOMAIN_GLOBAL static _Init_atexit init_atexit;\r\n"
  },
  {
    "path": "stl/src/iostream.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// ios::Init members\r\n\r\n#include <iostream>\r\n_STD_BEGIN\r\n\r\n__PURE_APPDOMAIN_GLOBAL int ios_base::Init::_Init_cnt = -1;\r\nint& ios_base::Init::_Init_cnt_func() {\r\n    return ios_base::Init::_Init_cnt;\r\n}\r\n\r\n_CRTIMP2_PURE void __cdecl ios_base::Init::_Init_ctor(ios_base::Init*) { // initialize standard streams first time\r\n    if (0 <= _Init_cnt) {\r\n        ++_Init_cnt;\r\n    } else {\r\n        _Init_cnt = 1;\r\n    }\r\n}\r\n\r\n_CRTIMP2_PURE void __cdecl ios_base::Init::_Init_dtor(ios_base::Init*) { // flush standard streams last time\r\n    if (--_Init_cnt == 0) { // flush standard streams\r\n        if (_Ptr_cerr != nullptr) {\r\n            _Ptr_cerr->flush();\r\n        }\r\n\r\n        if (_Ptr_clog != nullptr) {\r\n            _Ptr_clog->flush();\r\n        }\r\n\r\n        if (_Ptr_cout != nullptr) {\r\n            _Ptr_cout->flush();\r\n        }\r\n    }\r\n}\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/locale.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// class locale member functions\r\n\r\n#if !defined(STDCPP_IMPLIB)\r\n#define STDCPP_IMPLIB 0\r\n#endif\r\n\r\n#include <cstdlib>\r\n#include <internal_shared.h>\r\n#include <istream>\r\n#include <xlocale>\r\n\r\n#pragma warning(disable : 4074)\r\n#pragma init_seg(compiler)\r\n\r\n_STD_BEGIN\r\n\r\n_MRTIMP2_PURE locale __CLRCALL_PURE_OR_CDECL locale::global(const locale& loc) { // change global locale\r\n    locale _Oldglobal;\r\n    _BEGIN_LOCK(_LOCK_LOCALE)\r\n    locale::_Locimp* ptr = _Getgloballocale();\r\n\r\n    if (ptr != loc._Ptr) { // set new global locale\r\n        delete ptr->_Decref();\r\n        _Setgloballocale(ptr = loc._Ptr);\r\n        ptr->_Incref();\r\n        category _Cmask = ptr->_Catmask & all;\r\n        if (_Cmask == all) {\r\n            setlocale(LC_ALL, ptr->_Name._C_str());\r\n        } else {\r\n            for (int catindex = 0; catindex <= _X_MAX; ++catindex) {\r\n                if ((_CATMASK(catindex) & _Cmask) != 0) {\r\n                    setlocale(catindex, ptr->_Name._C_str());\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return _Oldglobal;\r\n    _END_LOCK()\r\n}\r\n\r\n#if STDCPP_IMPLIB || !defined(_M_CEE_PURE)\r\n// facets associated with C categories\r\n#define ADDFAC(Facet, cat, ptrimp, ptrloc)                                                                  \\\r\n    if ((_CATMASK(Facet::_Getcat()) & cat) == 0) {                                                          \\\r\n        ;                                                                                                   \\\r\n    } else if (ptrloc == nullptr) {                                                                         \\\r\n        ptrimp->_Addfac(new Facet(lobj), Facet::id._Get_index());                                           \\\r\n    } else {                                                                                                \\\r\n        ptrimp->_Addfac(                                                                                    \\\r\n            const_cast<locale::facet*>(static_cast<const locale::facet*>(&_STD use_facet<Facet>(*ptrloc))), \\\r\n            Facet::id._Get_index());                                                                        \\\r\n    }\r\n\r\nusing _Tc1 = ctype<char>;\r\nusing _Tc2 = num_get<char>;\r\nusing _Tc3 = num_put<char>;\r\nusing _Tc4 = numpunct<char>;\r\nusing _Tc5 = codecvt<char, char, _Mbstatet>;\r\n// others moved to wlocale and xlocale to ease subsetting\r\n\r\nlocale::_Locimp* __CLRCALL_OR_CDECL locale::_Locimp::_Makeloc(\r\n    const _Locinfo& lobj, locale::category cat, _Locimp* ptrimp, const locale* ptrloc) { // setup a new locale\r\n    ADDFAC(_Tc1, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tc2, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tc3, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tc4, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tc5, cat, ptrimp, ptrloc);\r\n    _Locimp::_Makexloc(lobj, cat, ptrimp, ptrloc);\r\n    _Locimp::_Makewloc(lobj, cat, ptrimp, ptrloc);\r\n    _Locimp::_Makeushloc(lobj, cat, ptrimp, ptrloc);\r\n    ptrimp->_Catmask |= cat;\r\n    ptrimp->_Name = lobj._Getname();\r\n    return ptrimp;\r\n}\r\n\r\nvoid __CLRCALL_PURE_OR_CDECL locale::_Locimp::_Locimp_ctor(\r\n    locale::_Locimp* _This, const locale::_Locimp& imp) { // construct a _Locimp from a copy\r\n    if (&imp == _Clocptr) {\r\n        _BEGIN_LOCINFO(_Lobj)\r\n        _Makeloc(_Lobj, locale::all, _This, nullptr);\r\n        _END_LOCINFO()\r\n    } else { // lock to keep facets from disappearing\r\n        _BEGIN_LOCK(_LOCK_LOCALE)\r\n        if (0 < _This->_Facetcount) { // copy over nonempty facet vector\r\n            _This->_Facetvec = static_cast<locale::facet**>(_malloc_crt(_This->_Facetcount * sizeof(locale::facet*)));\r\n            if (_This->_Facetvec == nullptr) { // report no memory\r\n                _Xbad_alloc();\r\n            }\r\n\r\n            for (size_t count = _This->_Facetcount; 0 < count;) { // copy over facet pointers\r\n                locale::facet* ptrfac = imp._Facetvec[--count];\r\n                if ((_This->_Facetvec[count] = ptrfac) != nullptr) {\r\n                    ptrfac->_Incref();\r\n                }\r\n            }\r\n        }\r\n        _END_LOCK()\r\n    }\r\n}\r\n#endif // STDCPP_IMPLIB || !defined(_M_CEE_PURE)\r\n\r\nvoid __CLRCALL_PURE_OR_CDECL locale::_Locimp::_Locimp_Addfac(\r\n    _Locimp* _This, locale::facet* ptrfac, size_t id) { // add a facet to a locale\r\n    _BEGIN_LOCK(_LOCK_LOCALE)\r\n    const size_t MINCAT = 40; // minimum number of facets in a locale\r\n\r\n    if (_This->_Facetcount <= id) { // make facet vector larger\r\n        size_t count = id + 1;\r\n        if (count < MINCAT) {\r\n            count = MINCAT;\r\n        }\r\n\r\n        locale::facet** ptrnewvec =\r\n            static_cast<locale::facet**>(_realloc_crt(_This->_Facetvec, count * sizeof(locale::facet**)));\r\n        if (ptrnewvec == nullptr) { // report no memory\r\n            _Xbad_alloc();\r\n        }\r\n        _This->_Facetvec = ptrnewvec;\r\n        for (; _This->_Facetcount < count; ++_This->_Facetcount) {\r\n            _This->_Facetvec[_This->_Facetcount] = nullptr;\r\n        }\r\n    }\r\n    ptrfac->_Incref();\r\n#pragma warning(push)\r\n#pragma warning(disable : 6001) // PREfast isn't following through _realloc_crt here\r\n    if (_This->_Facetvec[id] != nullptr) {\r\n#pragma warning(pop)\r\n        delete _This->_Facetvec[id]->_Decref();\r\n    }\r\n\r\n    _This->_Facetvec[id] = ptrfac;\r\n    _END_LOCK()\r\n}\r\n\r\nvoid __CLRCALL_PURE_OR_CDECL _Locinfo::_Locinfo_ctor(\r\n    _Locinfo* pLocinfo, int cat, const char* locname) { // capture a named locale\r\n    pLocinfo->_Oldlocname._From_wide(_wsetlocale(LC_ALL, nullptr));\r\n    _Locinfo_Addcats(pLocinfo, cat, locname);\r\n}\r\n\r\n_Locinfo& __CLRCALL_PURE_OR_CDECL _Locinfo::_Locinfo_Addcats(\r\n    _Locinfo* pLocinfo, int cat, const char* locname) { // merge in another named locale\r\n    const char* oldlocname = nullptr;\r\n\r\n    if (locname == nullptr) {\r\n        _Xruntime_error(\"bad locale name\");\r\n    }\r\n\r\n    if (locname[0] != '*' || locname[1] != '\\0') {\r\n        if (cat == 0) {\r\n            oldlocname = setlocale(LC_ALL, nullptr);\r\n        } else if (cat == _M_ALL) {\r\n            oldlocname = setlocale(LC_ALL, locname);\r\n        } else { // alter selected categories\r\n            for (int catindex = 0; catindex <= _X_MAX; ++catindex) {\r\n                if ((_CATMASK(catindex) & cat) != 0) {\r\n                    setlocale(catindex, locname);\r\n                }\r\n            }\r\n\r\n            oldlocname = setlocale(LC_ALL, locname);\r\n        }\r\n    }\r\n\r\n    if (oldlocname == nullptr) {\r\n        pLocinfo->_Newlocname = \"*\";\r\n    } else if (strcmp(pLocinfo->_Newlocname._C_str(), \"*\") != 0) {\r\n        pLocinfo->_Newlocname = oldlocname;\r\n    }\r\n\r\n    return *pLocinfo;\r\n}\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/locale0.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// class locale basic member functions\r\n\r\n// This file is compiled into the import library (via locale0_implib.cpp => locale0.cpp).\r\n// MAJOR LIMITATIONS apply to what can be included here!\r\n// Before editing this file, read: /docs/import_library.md\r\n\r\n#undef _ENFORCE_ONLY_CORE_HEADERS // TRANSITION, <xfacet> should be a core header\r\n\r\n#include <crtdbg.h>\r\n#include <internal_shared.h>\r\n#include <xatomic.h>\r\n#include <xfacet>\r\n\r\n// This should probably go to a compiler section just after the locks - unfortunately we have per-appdomain\r\n// and per-process variables to initialize\r\n#pragma warning(disable : 4073)\r\n#pragma init_seg(lib)\r\n\r\n_STD_BEGIN\r\n[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xbad_alloc();\r\n\r\nstruct _Fac_node { // node for lazy facet recording\r\n    _Fac_node(_Fac_node* _Nextarg, _Facet_base* _Facptrarg)\r\n        : _Next(_Nextarg), _Facptr(_Facptrarg) {} // construct a node with value\r\n\r\n    ~_Fac_node() noexcept { // destroy a facet\r\n        delete _Facptr->_Decref();\r\n    }\r\n\r\n    void* operator new(size_t _Size) { // replace operator new\r\n        void* _Ptr = _malloc_dbg(_Size > 0 ? _Size : 1, _CRT_BLOCK, __FILE__, __LINE__);\r\n        if (!_Ptr) {\r\n            _Xbad_alloc();\r\n        }\r\n\r\n        return _Ptr;\r\n    }\r\n\r\n    void operator delete(void* _Ptr) noexcept { // replace operator delete\r\n        _free_dbg(_Ptr, _CRT_BLOCK);\r\n    }\r\n\r\n    _Fac_node* _Next;\r\n    _Facet_base* _Facptr;\r\n};\r\n\r\n__PURE_APPDOMAIN_GLOBAL static _Fac_node* _Fac_head = nullptr;\r\n\r\nstruct _Fac_tidy_reg_t {\r\n    ~_Fac_tidy_reg_t() noexcept { // destroy lazy facets\r\n        while (_Fac_head != nullptr) { // destroy a lazy facet node\r\n            _Fac_node* nodeptr = _Fac_head;\r\n            _Fac_head          = nodeptr->_Next;\r\n            delete nodeptr;\r\n        }\r\n    }\r\n};\r\n\r\n__PURE_APPDOMAIN_GLOBAL const _Fac_tidy_reg_t _Fac_tidy_reg;\r\n\r\n#if defined(_M_CEE)\r\nvoid __CLRCALL_OR_CDECL _Facet_Register_m(_Facet_base* _This)\r\n#else // ^^^ defined(_M_CEE) / !defined(_M_CEE) vvv\r\nvoid __CLRCALL_OR_CDECL _Facet_Register(_Facet_base* _This)\r\n#endif // ^^^ !defined(_M_CEE) ^^^\r\n{ // queue up lazy facet for destruction\r\n    _Fac_head = new _Fac_node(_Fac_head, _This);\r\n}\r\n_STD_END\r\n\r\n#if !STDCPP_IMPLIB || defined(_M_CEE_PURE)\r\n\r\n#include <cstdlib>\r\n#include <locale>\r\n\r\nextern \"C\" {\r\n\r\nvoid __CLRCALL_OR_CDECL _Deletegloballocale(void* ptr) noexcept { // delete a global locale reference\r\n    std::locale::_Locimp* locptr = *static_cast<std::locale::_Locimp**>(ptr);\r\n    if (locptr != nullptr) {\r\n        delete locptr->_Decref();\r\n    }\r\n}\r\n\r\n__PURE_APPDOMAIN_GLOBAL static std::locale::_Locimp* global_locale = nullptr; // pointer to current locale\r\n\r\nstatic void __CLRCALL_PURE_OR_CDECL tidy_global() noexcept { // delete static global locale reference\r\n    _BEGIN_LOCK(_LOCK_LOCALE) // prevent double delete\r\n    _Deletegloballocale(&global_locale);\r\n    global_locale = nullptr;\r\n    _END_LOCK()\r\n}\r\n\r\n} // extern \"C\"\r\n\r\n_MRTIMP2 void __cdecl _Atexit(void(__cdecl*)());\r\n\r\n_STD_BEGIN\r\n\r\n_MRTIMP2_PURE std::locale::_Locimp* __CLRCALL_PURE_OR_CDECL\r\n    std::locale::_Getgloballocale() { // return pointer to current locale\r\n    return global_locale;\r\n}\r\n\r\n_MRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL std::locale::_Setgloballocale(void* ptr) { // alter pointer to current locale\r\n    __PURE_APPDOMAIN_GLOBAL static bool registered = false;\r\n\r\n    if (!registered) { // register cleanup first time\r\n        registered = true;\r\n#if !defined(_M_CEE_PURE)\r\n        ::_Atexit(&tidy_global);\r\n#else\r\n        _atexit_m_appdomain(tidy_global);\r\n#endif\r\n    }\r\n    global_locale = static_cast<std::locale::_Locimp*>(ptr);\r\n}\r\n\r\n__PURE_APPDOMAIN_GLOBAL static locale classic_locale(_Noinit); // \"C\" locale object, uninitialized\r\n\r\n__PURE_APPDOMAIN_GLOBAL locale::_Locimp* locale::_Locimp::_Clocptr = nullptr; // pointer to classic_locale\r\n\r\n__PURE_APPDOMAIN_GLOBAL int locale::id::_Id_cnt = 0; // unique id counter for facets\r\n\r\n__PURE_APPDOMAIN_GLOBAL locale::id ctype<char>::id{};\r\n\r\n__PURE_APPDOMAIN_GLOBAL locale::id ctype<wchar_t>::id{};\r\n\r\n__PURE_APPDOMAIN_GLOBAL locale::id codecvt<wchar_t, char, mbstate_t>::id{};\r\n\r\n__PURE_APPDOMAIN_GLOBAL locale::id ctype<unsigned short>::id{};\r\n\r\n__PURE_APPDOMAIN_GLOBAL locale::id codecvt<unsigned short, char, mbstate_t>::id{};\r\n\r\n_MRTIMP2_PURE const locale& __CLRCALL_PURE_OR_CDECL locale::classic() { // get reference to \"C\" locale\r\n#if !defined(_M_CEE_PURE)\r\n    const auto mem = reinterpret_cast<const intptr_t*>(&locale::_Locimp::_Clocptr);\r\n    intptr_t as_bytes;\r\n#ifdef _WIN64\r\n    as_bytes = __iso_volatile_load64(mem);\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n    as_bytes = __iso_volatile_load32(mem);\r\n#endif // ^^^ 32-bit ^^^\r\n    _Compiler_or_memory_barrier();\r\n    const auto ptr = reinterpret_cast<locale::_Locimp*>(as_bytes);\r\n    if (ptr == nullptr)\r\n#endif // !defined(_M_CEE_PURE)\r\n    {\r\n        _Init();\r\n    }\r\n\r\n    return classic_locale;\r\n}\r\n\r\n// TRANSITION, ABI: non-Standard locale::empty() is preserved for binary compatibility\r\n_MRTIMP2_PURE locale __CLRCALL_PURE_OR_CDECL locale::empty() { // make empty transparent locale\r\n    _Init();\r\n    return locale{_Secret_locale_construct_tag{}, _Locimp::_New_Locimp(true)};\r\n}\r\n\r\n_MRTIMP2_PURE locale::_Locimp* __CLRCALL_PURE_OR_CDECL locale::_Init(bool _Do_incref) { // setup global and \"C\" locales\r\n    locale::_Locimp* ptr = nullptr;\r\n\r\n    _BEGIN_LOCK(_LOCK_LOCALE) // prevent double initialization\r\n\r\n    ptr = _Getgloballocale();\r\n\r\n    if (ptr == nullptr) { // create new locales\r\n        _Setgloballocale(ptr = _Locimp::_New_Locimp());\r\n        ptr->_Catmask = all; // set current locale to \"C\"\r\n        ptr->_Name    = \"C\";\r\n\r\n        // set classic to match\r\n        ptr->_Incref();\r\n        ::new (&classic_locale) locale{_Secret_locale_construct_tag{}, ptr};\r\n#if defined(_M_CEE_PURE)\r\n        locale::_Locimp::_Clocptr = ptr;\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n        const auto mem      = reinterpret_cast<volatile intptr_t*>(&locale::_Locimp::_Clocptr);\r\n        const auto as_bytes = reinterpret_cast<intptr_t>(ptr);\r\n        _Compiler_or_memory_barrier();\r\n#ifdef _WIN64\r\n        __iso_volatile_store64(mem, as_bytes);\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n        __iso_volatile_store32(mem, as_bytes);\r\n#endif // ^^^ 32-bit ^^^\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n    }\r\n\r\n    if (_Do_incref) {\r\n        ptr->_Incref();\r\n    }\r\n\r\n    _END_LOCK()\r\n\r\n    return ptr;\r\n}\r\n\r\nlocale::_Locimp* __CLRCALL_PURE_OR_CDECL locale::_Locimp::_New_Locimp(bool _Transparent) {\r\n    return new _Locimp(_Transparent);\r\n}\r\n\r\nlocale::_Locimp* __CLRCALL_PURE_OR_CDECL locale::_Locimp::_New_Locimp(const _Locimp& _Right) {\r\n    return new _Locimp(_Right);\r\n}\r\n\r\nvoid __CLRCALL_PURE_OR_CDECL locale::_Locimp::_Locimp_dtor(_Locimp* _This) { // destruct a _Locimp\r\n    _BEGIN_LOCK(_LOCK_LOCALE) // prevent double delete\r\n    for (size_t count = _This->_Facetcount; 0 < count;) {\r\n        if (_This->_Facetvec[--count] != nullptr) {\r\n            delete _This->_Facetvec[count]->_Decref();\r\n        }\r\n    }\r\n\r\n    free(_This->_Facetvec);\r\n    _END_LOCK()\r\n}\r\n\r\nvoid __CLRCALL_PURE_OR_CDECL _Locinfo::_Locinfo_ctor(\r\n    _Locinfo* pLocinfo, const char* locname) { // switch to a named locale\r\n    pLocinfo->_Oldlocname._From_wide(_wsetlocale(LC_ALL, nullptr));\r\n\r\n    if (locname != nullptr) {\r\n        locname = setlocale(LC_ALL, locname);\r\n    }\r\n\r\n    pLocinfo->_Newlocname = locname == nullptr ? \"*\" : locname;\r\n}\r\n\r\nvoid __CLRCALL_PURE_OR_CDECL _Locinfo::_Locinfo_dtor(_Locinfo* pLocinfo) { // destroy a _Locinfo object, revert locale\r\n    if (pLocinfo->_Oldlocname._Empty()) {\r\n        // `pLocinfo->_Oldlocname._C_str()` points to a single `char` of value 0 in this case,\r\n        // so reinterpret_cast is not reliable.\r\n        _wsetlocale(LC_ALL, L\"\");\r\n    } else {\r\n        _wsetlocale(LC_ALL, reinterpret_cast<const wchar_t*>(pLocinfo->_Oldlocname._C_str()));\r\n    }\r\n}\r\n_STD_END\r\n\r\n#endif // !STDCPP_IMPLIB || defined(_M_CEE_PURE)\r\n"
  },
  {
    "path": "stl/src/locale0_implib.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#if defined(_DLL)\r\n#ifdef CRTDLL2\r\n#undef CRTDLL2\r\n#endif\r\n\r\n#ifdef MRTDLL\r\n#undef MRTDLL\r\n#endif\r\n\r\n#define STDCPP_IMPLIB 1\r\n\r\n// When building for msvcmrt.lib, inject a dependency to the msvcp DLL.\r\n#if defined(_M_CEE) && !defined(_M_CEE_PURE)\r\n#ifdef _CRTBLD\r\n#define _CRTBLD_WAS_DEFINED\r\n#undef _CRTBLD\r\n#endif\r\n#include <use_ansi.h>\r\n#ifdef _CRTBLD_WAS_DEFINED\r\n#define _CRTBLD\r\n#undef _CRTBLD_WAS_DEFINED\r\n#endif\r\n#endif\r\n\r\n#include \"locale0.cpp\"\r\n\r\n#endif // defined(_DLL)\r\n"
  },
  {
    "path": "stl/src/locale_implib_pure.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define STDCPP_IMPLIB 1\r\n#include \"locale.cpp\"\r\n"
  },
  {
    "path": "stl/src/memory_resource.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <internal_shared.h>\r\n#include <memory_resource>\r\n#include <system_error>\r\n\r\n_STD_BEGIN\r\nnamespace pmr {\r\n\r\n    static memory_resource* _Default_resource{nullptr};\r\n\r\n    extern \"C\" _CRT_SATELLITE_1 _Aligned_new_delete_resource_impl* __cdecl _Aligned_new_delete_resource() noexcept {\r\n        return &const_cast<_Aligned_new_delete_resource_impl&>(\r\n            _Immortalize_memcpy_image<_Aligned_new_delete_resource_impl>());\r\n    }\r\n\r\n    extern \"C\" _CRT_SATELLITE_1 _Unaligned_new_delete_resource_impl* __cdecl _Unaligned_new_delete_resource() noexcept {\r\n        return &const_cast<_Unaligned_new_delete_resource_impl&>(\r\n            _Immortalize_memcpy_image<_Unaligned_new_delete_resource_impl>());\r\n    }\r\n\r\n    extern \"C\" _CRT_SATELLITE_1 memory_resource* __cdecl _Aligned_get_default_resource() noexcept {\r\n        memory_resource* const _Temp = __crt_interlocked_read_pointer(&_Default_resource);\r\n        if (_Temp) {\r\n            return _Temp;\r\n        }\r\n\r\n        return _Aligned_new_delete_resource();\r\n    }\r\n\r\n    extern \"C\" _CRT_SATELLITE_1 memory_resource* __cdecl _Unaligned_get_default_resource() noexcept {\r\n        memory_resource* const _Temp = __crt_interlocked_read_pointer(&_Default_resource);\r\n        if (_Temp) {\r\n            return _Temp;\r\n        }\r\n\r\n        return _Unaligned_new_delete_resource();\r\n    }\r\n\r\n    extern \"C\" _CRT_SATELLITE_1 memory_resource* __cdecl _Aligned_set_default_resource(\r\n        memory_resource* const _Resource) noexcept {\r\n        memory_resource* const _Temp = __crt_interlocked_exchange_pointer(&_Default_resource, _Resource);\r\n        if (_Temp) {\r\n            return _Temp;\r\n        }\r\n\r\n        return _Aligned_new_delete_resource();\r\n    }\r\n\r\n    extern \"C\" _CRT_SATELLITE_1 memory_resource* __cdecl _Unaligned_set_default_resource(\r\n        memory_resource* const _Resource) noexcept {\r\n        memory_resource* const _Temp = __crt_interlocked_exchange_pointer(&_Default_resource, _Resource);\r\n        if (_Temp) {\r\n            return _Temp;\r\n        }\r\n\r\n        return _Unaligned_new_delete_resource();\r\n    }\r\n\r\n    extern \"C\" [[nodiscard]] _CRT_SATELLITE_1 memory_resource* __cdecl null_memory_resource() noexcept {\r\n        class _Null_resource final : public _Identity_equal_resource {\r\n            void* do_allocate(size_t, size_t) override { // Sorry, OOM!\r\n                _Xbad_alloc();\r\n            }\r\n            void do_deallocate(void*, size_t, size_t) override {} // Nothing to do\r\n        };\r\n\r\n        return &const_cast<_Null_resource&>(_Immortalize_memcpy_image<_Null_resource>());\r\n    }\r\n\r\n} // namespace pmr\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/mexcptptr.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// The /clr:pure exception_ptr implementation.\r\n#ifdef CRTDLL\r\n#undef CRTDLL\r\n#endif\r\n\r\n#ifdef MRTDLL\r\n#undef MRTDLL\r\n#endif\r\n\r\n#ifndef _DLL\r\n#define _DLL\r\n#endif\r\n\r\n#include \"excptptr.cpp\"\r\n"
  },
  {
    "path": "stl/src/mpiostream.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// This file is built into msvcurt.lib\r\n#if !defined(_M_CEE_PURE)\r\n#error This file must be built with /clr:pure.\r\n#endif\r\n\r\n#include <iostream>\r\n\r\n#pragma warning(disable : 4074)\r\n#pragma init_seg(compiler)\r\n\r\n_STD_BEGIN\r\n\r\n__PURE_APPDOMAIN_GLOBAL extern istream* _Ptr_cin  = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern ostream* _Ptr_cout = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern ostream* _Ptr_cerr = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern ostream* _Ptr_clog = nullptr;\r\n\r\n__PURE_APPDOMAIN_GLOBAL extern wistream* _Ptr_wcin  = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern wostream* _Ptr_wcout = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern wostream* _Ptr_wcerr = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern wostream* _Ptr_wclog = nullptr;\r\n\r\n__PURE_APPDOMAIN_GLOBAL int ios_base::Init::_Init_cnt = -1;\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/msvcp_atomic_wait.src",
    "content": "; Copyright (c) Microsoft Corporation.\r\n; SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n; atomic wait satellite DLL definition\r\n\r\n; NOTE: \"LIBRARYNAME\" is just a placeholder. It gets dynamically replaced with the generated\r\n; DLL name during the CMake build. (See the generate_satellite_def() function in\r\n; stl\\CMakeLists.txt.) Doing this instead of using, e.g., CMake variable substitution allows\r\n; for file preprocessing via \"cl /DLIBRARYNAME=...\"\r\nLIBRARY LIBRARYNAME\r\n\r\nEXPORTS\r\n    __std_acquire_shared_mutex_for_instance\r\n    __std_atomic_compare_exchange_128\r\n    __std_atomic_get_mutex\r\n    __std_atomic_has_cmpxchg16b\r\n    __std_atomic_notify_all_direct\r\n    __std_atomic_notify_all_indirect\r\n    __std_atomic_notify_one_direct\r\n    __std_atomic_notify_one_indirect\r\n    __std_atomic_set_api_level\r\n    __std_atomic_wait_direct\r\n    __std_atomic_wait_get_deadline\r\n    __std_atomic_wait_get_remaining_timeout\r\n    __std_atomic_wait_indirect\r\n    __std_bulk_submit_threadpool_work\r\n    __std_calloc_crt\r\n    __std_close_threadpool_work\r\n    __std_create_threadpool_work\r\n    __std_execution_wait_on_uchar\r\n    __std_execution_wake_by_address_all\r\n    __std_free_crt\r\n    __std_parallel_algorithms_hw_threads\r\n    __std_release_shared_mutex_for_instance\r\n    __std_submit_threadpool_work\r\n    __std_tzdb_delete_current_zone\r\n    __std_tzdb_delete_leap_seconds\r\n    __std_tzdb_delete_sys_info\r\n    __std_tzdb_delete_time_zones\r\n    __std_tzdb_get_current_zone\r\n    __std_tzdb_get_leap_seconds\r\n    __std_tzdb_get_sys_info\r\n    __std_tzdb_get_time_zones\r\n    __std_wait_for_threadpool_work_callbacks\r\n"
  },
  {
    "path": "stl/src/multprec.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Once upon a time, this implemented multiprecision math for linear_congruential_engine.\r\n\r\n#include <yvals.h>\r\n\r\n#include <__msvc_int128.hpp>\r\n#include <cstdint>\r\n\r\nnamespace {\r\n    using _STD _Unsigned128;\r\n\r\n    using _MP_arr = uint64_t[5]; // Stores a 128-bit value in four 32-bit parts.\r\n    // Each part was uint64_t for intermediate computations (now unused) and the fifth part was always unused.\r\n\r\n    [[nodiscard]] _Unsigned128 _Get_u128_from_mp(_MP_arr _Wx) noexcept {\r\n        const uint64_t _Lo = (_Wx[1] << 32) + _Wx[0];\r\n        const uint64_t _Hi = (_Wx[3] << 32) + _Wx[2];\r\n\r\n        return _Unsigned128{_Lo, _Hi};\r\n    }\r\n\r\n    void _Assign_mp_from_u128(_MP_arr _Wx, const _Unsigned128 _Result) noexcept {\r\n        const uint64_t _Lo = _Result._Word[0];\r\n        const uint64_t _Hi = _Result._Word[1];\r\n\r\n        _Wx[0] = static_cast<uint32_t>(_Lo);\r\n        _Wx[1] = _Lo >> 32;\r\n        _Wx[2] = static_cast<uint32_t>(_Hi);\r\n        _Wx[3] = _Hi >> 32;\r\n        _Wx[4] = 0; // unused, but zeroed out to preserve behavior exactly\r\n    }\r\n} // unnamed namespace\r\n\r\n_STD_BEGIN\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n[[nodiscard]] _CRTIMP2_PURE uint64_t __CLRCALL_PURE_OR_CDECL _MP_Get(_MP_arr _Wx) noexcept {\r\n    // convert multi-word value to scalar value; always called with a value that won't exceed 64 bits\r\n    return (_Wx[1] << 32) + _Wx[0];\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _MP_Add(_MP_arr _Wx, const uint64_t _Cx) noexcept {\r\n    // perform \"_Wx += _Cx\"; always called with values that won't overflow 128 bits\r\n    const auto _Result = _Get_u128_from_mp(_Wx) + _Cx;\r\n    _Assign_mp_from_u128(_Wx, _Result);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _MP_Mul(_MP_arr _Wx, const uint64_t _Prev, const uint64_t _Ax) noexcept {\r\n    // set _Wx to the 128-bit product of _Prev and _Ax\r\n    const auto _Result = _Unsigned128{_Prev} * _Ax;\r\n    _Assign_mp_from_u128(_Wx, _Result);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _MP_Rem(_MP_arr _Wx, const uint64_t _Mx) noexcept {\r\n    // perform \"_Wx %= _Mx\"\r\n    const auto _Result = _Get_u128_from_mp(_Wx) % _Mx;\r\n    _Assign_mp_from_u128(_Wx, _Result);\r\n}\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/mutex.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <internal_shared.h>\r\n#include <mutex>\r\n#include <new>\r\n#include <type_traits>\r\n#include <xthreads.h>\r\n#include <xtimec.h>\r\n\r\nextern \"C\" {\r\n\r\n// TRANSITION, ABI: exported only for ABI compat\r\n[[noreturn]] _CRTIMP2_PURE void __cdecl _Thrd_abort(const char* msg) noexcept { // abort on precondition failure\r\n    fputs(msg, stderr);\r\n    fputc('\\n', stderr);\r\n    abort();\r\n}\r\n\r\n#ifdef _DEBUG\r\n#define _THREAD_QUOTX(x)          #x\r\n#define _THREAD_QUOT(x)           _THREAD_QUOTX(x)\r\n#define _THREAD_ASSERT(expr, msg) ((expr) ? (void) 0 : _Thrd_abort(__FILE__ \"(\" _THREAD_QUOT(__LINE__) \"): \" msg))\r\n#else // ^^^ defined(_DEBUG) / !defined(_DEBUG) vvv\r\n#define _THREAD_ASSERT(expr, msg) ((void) 0)\r\n#endif // ^^^ !defined(_DEBUG) ^^^\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nenum class __stl_sync_api_modes_enum { normal, win7, vista, concrt };\r\n_CRTIMP2 void __cdecl __set_stl_sync_api_mode(__stl_sync_api_modes_enum) noexcept {}\r\n\r\n[[nodiscard]] static PSRWLOCK get_srw_lock(_Mtx_t mtx) noexcept {\r\n    return reinterpret_cast<PSRWLOCK>(&mtx->_Critical_section._M_srw_lock);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility (and _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR)\r\n_CRTIMP2_PURE void __cdecl _Mtx_init_in_situ(_Mtx_t mtx, int type) noexcept { // initialize mutex in situ\r\n    new (&mtx->_Critical_section) _Stl_critical_section;\r\n    mtx->_Thread_id = -1;\r\n    mtx->_Type      = type;\r\n    mtx->_Count     = 0;\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE void __cdecl _Mtx_destroy_in_situ(_Mtx_t mtx) noexcept { // destroy mutex in situ\r\n    _THREAD_ASSERT(mtx->_Count == 0, \"mutex destroyed while busy\");\r\n    (void) mtx;\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Mtx_init(_Mtx_t* mtx, int type) noexcept { // initialize mutex\r\n    *mtx = nullptr;\r\n\r\n    _Mtx_t mutex = static_cast<_Mtx_t>(_calloc_crt(1, sizeof(_Mtx_internal_imp_t)));\r\n\r\n    if (mutex == nullptr) {\r\n        return _Thrd_result::_Nomem; // report alloc failed\r\n    }\r\n\r\n    _Mtx_init_in_situ(mutex, type);\r\n\r\n    *mtx = mutex;\r\n    return _Thrd_result::_Success;\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE void __cdecl _Mtx_destroy(_Mtx_t mtx) noexcept { // destroy mutex\r\n    if (mtx) { // something to do, do it\r\n        _Mtx_destroy_in_situ(mtx);\r\n        _free_crt(mtx);\r\n    }\r\n}\r\n\r\nstatic _Thrd_result mtx_do_lock(_Mtx_t mtx, const _timespec64* target) noexcept { // lock mutex\r\n    // TRANSITION, ABI: the use of `const _timespec64*` is preserved for `_Mtx_timedlock`\r\n    const auto current_thread_id = static_cast<long>(GetCurrentThreadId());\r\n    if ((mtx->_Type & ~_Mtx_recursive) == _Mtx_plain) { // set the lock\r\n        // TRANSITION, ABI: this branch is preserved for `_Thrd_create`\r\n\r\n        if (mtx->_Thread_id != current_thread_id) { // not current thread, do lock\r\n            AcquireSRWLockExclusive(get_srw_lock(mtx));\r\n            mtx->_Thread_id = current_thread_id;\r\n        }\r\n        ++mtx->_Count;\r\n\r\n        return _Thrd_result::_Success;\r\n    } else { // handle timed or recursive mutex\r\n        int res = WAIT_TIMEOUT;\r\n        if (target == nullptr) { // no target --> plain wait (i.e. infinite timeout)\r\n            if (mtx->_Thread_id != current_thread_id) {\r\n                AcquireSRWLockExclusive(get_srw_lock(mtx));\r\n            }\r\n\r\n            res = WAIT_OBJECT_0;\r\n\r\n        } else if (target->tv_sec < 0 || (target->tv_sec == 0 && target->tv_nsec <= 0)) {\r\n            // target time <= 0 --> plain trylock or timed wait for time that has passed; try to lock with 0 timeout\r\n            if (mtx->_Thread_id != current_thread_id) { // not this thread, lock it\r\n                if (TryAcquireSRWLockExclusive(get_srw_lock(mtx)) != 0) {\r\n                    res = WAIT_OBJECT_0;\r\n                }\r\n            } else {\r\n                res = WAIT_OBJECT_0;\r\n            }\r\n\r\n        } else { // check timeout\r\n            // TRANSITION, ABI: this branch is preserved for `_Mtx_timedlock`\r\n            _timespec64 now;\r\n            _Timespec64_get_sys(&now);\r\n            while (now.tv_sec < target->tv_sec || (now.tv_sec == target->tv_sec && now.tv_nsec < target->tv_nsec)) {\r\n                // time has not expired\r\n                if (mtx->_Thread_id == current_thread_id\r\n                    || TryAcquireSRWLockExclusive(get_srw_lock(mtx)) != 0) { // stop waiting\r\n                    res = WAIT_OBJECT_0;\r\n                    break;\r\n                }\r\n\r\n                _Timespec64_get_sys(&now);\r\n            }\r\n        }\r\n\r\n        if (res == WAIT_OBJECT_0) {\r\n            if (1 < ++mtx->_Count) { // check count\r\n                if ((mtx->_Type & _Mtx_recursive) != _Mtx_recursive) { // not recursive, fixup count\r\n                    --mtx->_Count;\r\n                    res = WAIT_TIMEOUT;\r\n                }\r\n            } else {\r\n                mtx->_Thread_id = current_thread_id;\r\n            }\r\n        }\r\n\r\n        if (res == WAIT_OBJECT_0) {\r\n            return _Thrd_result::_Success;\r\n        }\r\n\r\n        // res is WAIT_TIMEOUT here\r\n\r\n        if (target == nullptr || (target->tv_sec == 0 && target->tv_nsec == 0)) {\r\n            return _Thrd_result::_Busy;\r\n        }\r\n\r\n        return _Thrd_result::_Timedout;\r\n    }\r\n}\r\n\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Mtx_unlock(_Mtx_t mtx) noexcept { // unlock mutex\r\n    _THREAD_ASSERT(mtx->_Count > 0, \"unlock of unowned mutex\");\r\n    _THREAD_ASSERT(\r\n        mtx->_Thread_id == static_cast<long>(GetCurrentThreadId()), \"unlock of mutex not owned by the current thread\");\r\n\r\n    if (--mtx->_Count == 0) { // leave critical section\r\n        mtx->_Thread_id = -1;\r\n\r\n        auto srw_lock = get_srw_lock(mtx);\r\n        _Analysis_assume_lock_held_(*srw_lock);\r\n        ReleaseSRWLockExclusive(srw_lock);\r\n    }\r\n    return _Thrd_result::_Success; // TRANSITION, ABI: Always succeeds\r\n}\r\n\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Mtx_lock(_Mtx_t mtx) noexcept { // lock mutex\r\n    return mtx_do_lock(mtx, nullptr);\r\n}\r\n\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Mtx_trylock(_Mtx_t mtx) noexcept { // attempt to lock try_mutex\r\n    _timespec64 xt;\r\n    _THREAD_ASSERT((mtx->_Type & (_Mtx_try | _Mtx_timed)) != 0, \"trylock not supported by mutex\");\r\n    xt.tv_sec  = 0;\r\n    xt.tv_nsec = 0;\r\n    return mtx_do_lock(mtx, &xt);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE _Thrd_result __cdecl _Mtx_timedlock(_Mtx_t mtx, const _timespec64* xt) noexcept {\r\n    // attempt to lock timed mutex\r\n    _Thrd_result res;\r\n\r\n    _THREAD_ASSERT((mtx->_Type & _Mtx_timed) != 0, \"timedlock not supported by mutex\");\r\n    res = mtx_do_lock(mtx, xt);\r\n    return res == _Thrd_result::_Busy ? _Thrd_result::_Timedout : res;\r\n}\r\n\r\n_CRTIMP2_PURE int __cdecl _Mtx_current_owns(_Mtx_t mtx) noexcept { // test if current thread owns mutex\r\n    return mtx->_Count != 0 && mtx->_Thread_id == static_cast<long>(GetCurrentThreadId());\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE void* __cdecl _Mtx_getconcrtcs(_Mtx_t mtx) noexcept { // get internal cs impl\r\n    return &mtx->_Critical_section;\r\n}\r\n\r\n} // extern \"C\"\r\n\r\n/*\r\n * This file is derived from software bearing the following\r\n * restrictions:\r\n *\r\n * (c) Copyright William E. Kempf 2001\r\n *\r\n * Permission to use, copy, modify, distribute and sell this\r\n * software and its documentation for any purpose is hereby\r\n * granted without fee, provided that the above copyright\r\n * notice appear in all copies and that both that copyright\r\n * notice and this permission notice appear in supporting\r\n * documentation. William E. Kempf makes no representations\r\n * about the suitability of this software for any purpose.\r\n * It is provided \"as is\" without express or implied warranty.\r\n */\r\n"
  },
  {
    "path": "stl/src/nothrow.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// define nothrow object\r\n\r\n#ifdef CRTDLL2\r\n#undef CRTDLL2\r\n#endif\r\n\r\n#ifdef MRTDLL\r\n#undef MRTDLL\r\n#endif\r\n\r\n#include <yvals_core.h>\r\n\r\n#include <vcruntime_new.h>\r\n\r\n_STD_BEGIN\r\nconst nothrow_t nothrow = nothrow_t();\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/parallel_algorithms.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// support for <execution>\r\n\r\n#include <internal_shared.h>\r\n#include <thread>\r\n#include <xatomic_wait.h>\r\n\r\nextern \"C\" {\r\n\r\n[[nodiscard]] unsigned int __stdcall __std_parallel_algorithms_hw_threads() noexcept {\r\n    static int _Cached_hw_concurrency = -1;\r\n    int _Hw_concurrency               = __iso_volatile_load32(&_Cached_hw_concurrency);\r\n    if (_Hw_concurrency == -1) {\r\n        _Hw_concurrency = static_cast<int>(_STD thread::hardware_concurrency());\r\n        __iso_volatile_store32(&_Cached_hw_concurrency, _Hw_concurrency);\r\n    }\r\n\r\n    return static_cast<unsigned int>(_Hw_concurrency);\r\n}\r\n\r\n[[nodiscard]] PTP_WORK __stdcall __std_create_threadpool_work(\r\n    PTP_WORK_CALLBACK _Callback, void* _Context, PTP_CALLBACK_ENVIRON _Callback_environ) noexcept {\r\n    return CreateThreadpoolWork(_Callback, _Context, _Callback_environ);\r\n}\r\n\r\nvoid __stdcall __std_submit_threadpool_work(PTP_WORK _Work) noexcept {\r\n    SubmitThreadpoolWork(_Work);\r\n}\r\n\r\nvoid __stdcall __std_bulk_submit_threadpool_work(PTP_WORK _Work, const size_t _Submissions) noexcept {\r\n    for (size_t _Idx = 0; _Idx < _Submissions; ++_Idx) {\r\n        SubmitThreadpoolWork(_Work);\r\n    }\r\n}\r\n\r\nvoid __stdcall __std_close_threadpool_work(PTP_WORK _Work) noexcept {\r\n    CloseThreadpoolWork(_Work);\r\n}\r\n\r\nvoid __stdcall __std_wait_for_threadpool_work_callbacks(PTP_WORK _Work, BOOL _Cancel) noexcept {\r\n    WaitForThreadpoolWorkCallbacks(_Work, _Cancel);\r\n}\r\n\r\nvoid __stdcall __std_execution_wait_on_uchar(const volatile unsigned char* _Address, unsigned char _Compare) noexcept {\r\n    __std_atomic_wait_direct(const_cast<const unsigned char*>(_Address), &_Compare, 1, __std_atomic_wait_no_timeout);\r\n}\r\n\r\nvoid __stdcall __std_execution_wake_by_address_all(const volatile void* _Address) noexcept {\r\n    __std_atomic_notify_all_direct(const_cast<const void*>(_Address));\r\n}\r\n\r\n} // extern \"C\"\r\n"
  },
  {
    "path": "stl/src/pplerror.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _VCRT_ALLOW_INTERNALS\r\n#define _VCRT_ALLOW_INTERNALS\r\n#endif\r\n\r\n#include <ppltasks.h>\r\n\r\n#if defined(_CRT_APP) || defined(UNDOCKED_WINDOWS_UCRT)\r\n\r\n#include <RestrictedErrorInfo.h>\r\n#include <ehdata.h>\r\n#include <exception>\r\n#include <roerrorapi.h>\r\n#include <trnsctrl.h>\r\n\r\nextern \"C\" void* __GetPlatformExceptionInfo(int*);\r\n\r\nnamespace Concurrency {\r\n    namespace details {\r\n\r\n        _CRTIMP2 void __thiscall _ExceptionHolder::ReportUnhandledError() {\r\n            if (_M_stdException) {\r\n                try {\r\n                    std::rethrow_exception(_M_stdException);\r\n                } catch (...) {\r\n                    int isBadAlloc;\r\n                    auto info = static_cast<WINRTEXCEPTIONINFO*>(__GetPlatformExceptionInfo(&isBadAlloc));\r\n                    // If it is a winrt exception\r\n                    if (!isBadAlloc && info != nullptr) {\r\n                        auto restrictedInfo(static_cast<IRestrictedErrorInfo*>(info->restrictedInfo));\r\n                        if (restrictedInfo != nullptr) {\r\n#ifndef _M_ARM64 // CRT_REFACTOR TODO\r\n                            ::RoReportUnhandledError(restrictedInfo);\r\n#endif // !defined(_M_ARM64)\r\n\r\n                            // IRestrictedErrorInfo should be put back\r\n                            // to make sure that RoFailFastWithErrorContext can extract the information\r\n                            ::SetRestrictedErrorInfo(restrictedInfo);\r\n                        }\r\n                        ::RoFailFastWithErrorContext(info->hr);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n    } // namespace details\r\n} // namespace Concurrency\r\n\r\n#else // defined(_CRT_APP) || defined(UNDOCKED_WINDOWS_UCRT)\r\n\r\nnamespace Concurrency {\r\n    namespace details {\r\n\r\n        _CRTIMP2 void __thiscall _ExceptionHolder::ReportUnhandledError() {}\r\n\r\n    } // namespace details\r\n} // namespace Concurrency\r\n\r\n#endif // defined(_CRT_APP) || defined(UNDOCKED_WINDOWS_UCRT)\r\n"
  },
  {
    "path": "stl/src/ppltasks.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <crtdefs.h>\r\n#include <pplinterface.h>\r\n#include <ppltasks.h>\r\n\r\n#include <Windows.h>\r\n\r\n#if defined(_CRT_APP) || defined(UNDOCKED_WINDOWS_UCRT)\r\n#ifndef UNDOCKED_WINDOWS_UCRT\r\n#pragma warning(push)\r\n#pragma warning(disable : 4265) // non-virtual destructor in base class\r\n#endif\r\n#include <wrl.h>\r\n#ifndef UNDOCKED_WINDOWS_UCRT\r\n#pragma warning(pop)\r\n#endif\r\n#include <ctxtcall.h>\r\n#include <functional>\r\n#include <stdexcept>\r\n#include <windows.foundation.diagnostics.h>\r\n#endif\r\n\r\nnamespace Concurrency {\r\n\r\n    namespace details {\r\n        [[noreturn]] _CRTIMP2 void __cdecl _ReportUnobservedException() {\r\n            __fastfail(FAST_FAIL_INVALID_ARG);\r\n        }\r\n\r\n        namespace platform {\r\n\r\n            _CRTIMP2 long __cdecl GetCurrentThreadId() {\r\n                return static_cast<long>(::GetCurrentThreadId());\r\n            }\r\n\r\n            /// <summary>\r\n            ///     CRT CaptureStackBackTrace API wrapper\r\n            /// </summary>\r\n            _CRTIMP2 size_t __cdecl CaptureCallstack(void** stackData, size_t skipFrames, size_t captureFrames) {\r\n                return RtlCaptureStackBackTrace(\r\n                    static_cast<DWORD>(skipFrames + 1), static_cast<DWORD>(captureFrames), stackData, nullptr);\r\n            }\r\n\r\n            static unsigned int s_asyncId = 0;\r\n\r\n            _CRTIMP2 unsigned int __cdecl GetNextAsyncId() {\r\n                return static_cast<unsigned int>(::_InterlockedIncrement(reinterpret_cast<volatile LONG*>(&s_asyncId)));\r\n            }\r\n\r\n        } // namespace platform\r\n\r\n        _CRTIMP2 void __thiscall _TaskEventLogger::_LogScheduleTask(bool) {}\r\n\r\n        _CRTIMP2 void __thiscall _TaskEventLogger::_LogTaskCompleted() {}\r\n\r\n        _CRTIMP2 void __thiscall _TaskEventLogger::_LogCancelTask() {}\r\n\r\n        _CRTIMP2 void __thiscall _TaskEventLogger::_LogTaskExecutionCompleted() {}\r\n\r\n        _CRTIMP2 void __thiscall _TaskEventLogger::_LogWorkItemStarted() {}\r\n\r\n        _CRTIMP2 void __thiscall _TaskEventLogger::_LogWorkItemCompleted() {}\r\n\r\n#if defined(_CRT_APP) || defined(UNDOCKED_WINDOWS_UCRT)\r\n        using namespace ABI::Windows::Foundation;\r\n        using namespace ABI::Windows::Foundation::Diagnostics;\r\n        using namespace Microsoft::WRL;\r\n        using namespace Microsoft::WRL::Wrappers;\r\n\r\n        // This IID is exported by ole32.dll; we cannot depend on ole32.dll.\r\n        static GUID const Local_IID_ICallbackWithNoReentrancyToApplicationSTA = {\r\n            0x0A299774, 0x3E4E, 0xFC42, {0x1D, 0x9D, 0x72, 0xCE, 0xE1, 0x05, 0xCA, 0x57}};\r\n\r\n        static HRESULT __stdcall _PPLTaskContextCallbackBridge(ComCallData* _PParam) {\r\n            auto pFunc = static_cast<std::function<void()>*>(_PParam->pUserDefined);\r\n            (*pFunc)();\r\n            return S_OK;\r\n        }\r\n        _CRTIMP2 void __thiscall _ContextCallback::_CallInContext(\r\n            _CallbackFunction _Func, bool _IgnoreDisconnect) const {\r\n            if (!_HasCapturedContext()) {\r\n                _Func();\r\n            } else {\r\n                ComCallData callData;\r\n                ZeroMemory(&callData, sizeof(callData));\r\n                callData.pUserDefined = &_Func;\r\n\r\n                HRESULT hresult = static_cast<IContextCallback*>(_M_context._M_pContextCallback)\r\n                                      ->ContextCallback(&_PPLTaskContextCallbackBridge, &callData,\r\n                                          Local_IID_ICallbackWithNoReentrancyToApplicationSTA, 5, nullptr);\r\n                if (FAILED(hresult) && !(_IgnoreDisconnect && _IsHRCOMDisconnected(hresult))) {\r\n                    throw std::runtime_error(\"Context callback failed.\");\r\n                }\r\n            }\r\n        }\r\n        _CRTIMP2 void __thiscall _ContextCallback::_Capture() {\r\n            HRESULT _Hr = CoGetObjectContext(__uuidof(IContextCallback), &_M_context._M_pContextCallback);\r\n            if (FAILED(_Hr)) {\r\n                _M_context._M_pContextCallback = nullptr;\r\n            }\r\n        }\r\n\r\n        _CRTIMP2 void __thiscall _ContextCallback::_Reset() {\r\n            if (_M_context._M_captureMethod != _S_captureDeferred && _M_context._M_pContextCallback != nullptr) {\r\n                static_cast<IContextCallback*>(_M_context._M_pContextCallback)->Release();\r\n            }\r\n        }\r\n\r\n        _CRTIMP2 void __thiscall _ContextCallback::_Assign(void* _PContextCallback) {\r\n            _M_context._M_pContextCallback = _PContextCallback;\r\n            if (_M_context._M_captureMethod != _S_captureDeferred && _M_context._M_pContextCallback != nullptr) {\r\n                static_cast<IContextCallback*>(_M_context._M_pContextCallback)->AddRef();\r\n            }\r\n        }\r\n\r\n        _CRTIMP2 bool __cdecl _ContextCallback::_IsCurrentOriginSTA() {\r\n            APTTYPE _AptType;\r\n            APTTYPEQUALIFIER _AptTypeQualifier;\r\n\r\n            HRESULT hr = CoGetApartmentType(&_AptType, &_AptTypeQualifier);\r\n            if (SUCCEEDED(hr)) {\r\n                // We determine the origin of a task continuation by looking at where .then is called, so we can tell\r\n                // whether to need to marshal the continuation back to the originating apartment. If an STA thread is in\r\n                // executing in a neutral apartment when it schedules a continuation, we will not marshal continuations\r\n                // back to the STA, since variables used within a neutral apartment are expected to be apartment\r\n                // neutral.\r\n                switch (_AptType) {\r\n                case APTTYPE_MAINSTA:\r\n                case APTTYPE_STA:\r\n                    return true;\r\n                default:\r\n                    break;\r\n                }\r\n            }\r\n            return false;\r\n        }\r\n\r\n        _CRTIMP2 bool __cdecl _Task_impl_base::_IsNonBlockingThread() {\r\n            APTTYPE _AptType;\r\n            APTTYPEQUALIFIER _AptTypeQualifier;\r\n\r\n            HRESULT hr = CoGetApartmentType(&_AptType, &_AptTypeQualifier);\r\n            //\r\n            // If it failed, it's not a Windows Runtime/COM initialized thread. This is not a failure.\r\n            //\r\n            if (SUCCEEDED(hr)) {\r\n                switch (_AptType) {\r\n                case APTTYPE_STA:\r\n                case APTTYPE_MAINSTA:\r\n                    return true;\r\n                case APTTYPE_NA:\r\n                    switch (_AptTypeQualifier) {\r\n                        // A thread executing in a neutral apartment is either STA or MTA. To find out if this thread is\r\n                        // allowed to wait, we check the app qualifier. If it is an STA thread executing in a neutral\r\n                        // apartment, waiting is illegal, because the thread is responsible for pumping messages and\r\n                        // waiting on a task could take the thread out of circulation for a while.\r\n                    case APTTYPEQUALIFIER_NA_ON_STA:\r\n                    case APTTYPEQUALIFIER_NA_ON_MAINSTA:\r\n                        return true;\r\n                    }\r\n                    break;\r\n                }\r\n            }\r\n            return false;\r\n        }\r\n\r\n#else // ^^^ defined(_CRT_APP) || defined(UNDOCKED_WINDOWS_UCRT)\r\n      //                                         / !defined(_CRT_APP) && !defined(UNDOCKED_WINDOWS_UCRT) vvv\r\n        _CRTIMP2 void __thiscall _ContextCallback::_CallInContext(_CallbackFunction _Func, bool) const {\r\n            _Func();\r\n        }\r\n\r\n        _CRTIMP2 void __thiscall _ContextCallback::_Capture() {}\r\n\r\n        _CRTIMP2 void __thiscall _ContextCallback::_Reset() {}\r\n\r\n        _CRTIMP2 void __thiscall _ContextCallback::_Assign(void*) {}\r\n\r\n        _CRTIMP2 bool __cdecl _ContextCallback::_IsCurrentOriginSTA() {\r\n            return false;\r\n        }\r\n\r\n        _CRTIMP2 bool __cdecl _Task_impl_base::_IsNonBlockingThread() {\r\n            return false;\r\n        }\r\n#endif // ^^^ !defined(_CRT_APP) && !defined(UNDOCKED_WINDOWS_UCRT) ^^^\r\n    } // namespace details\r\n\r\n#ifdef _CRT_APP\r\n    _CRTIMP2 __thiscall task_continuation_context::task_continuation_context()\r\n        : _ContextCallback(true), _M_RunInline(false) {}\r\n#else // ^^^ defined(_CRT_APP) / !defined(_CRT_APP) vvv\r\n    _CRTIMP2 __thiscall task_continuation_context::task_continuation_context()\r\n        : _ContextCallback(false), _M_RunInline(false) {}\r\n#endif // ^^^ !defined(_CRT_APP) ^^^\r\n\r\n} // namespace Concurrency\r\n"
  },
  {
    "path": "stl/src/primitives.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <__msvc_threads_core.hpp>\r\n#include <cstdlib>\r\n\r\n#include <Windows.h>\r\n\r\ninline bool _Primitive_wait_for(const _Cnd_t cond, const _Mtx_t mtx, const unsigned int timeout) noexcept {\r\n    const auto pcv  = reinterpret_cast<PCONDITION_VARIABLE>(&cond->_Stl_cv._Win_cv);\r\n    const auto psrw = reinterpret_cast<PSRWLOCK>(&mtx->_Critical_section._M_srw_lock);\r\n    return SleepConditionVariableSRW(pcv, psrw, timeout, 0) != 0;\r\n}\r\n\r\ninline void _Primitive_wait(const _Cnd_t cond, const _Mtx_t mtx) noexcept {\r\n    if (!_Primitive_wait_for(cond, mtx, INFINITE)) {\r\n        _CSTD abort();\r\n    }\r\n}\r\n\r\ninline void _Primitive_notify_one(const _Cnd_t cond) noexcept {\r\n    const auto pcv = reinterpret_cast<PCONDITION_VARIABLE>(&cond->_Stl_cv._Win_cv);\r\n    WakeConditionVariable(pcv);\r\n}\r\n\r\ninline void _Primitive_notify_all(const _Cnd_t cond) noexcept {\r\n    const auto pcv = reinterpret_cast<PCONDITION_VARIABLE>(&cond->_Stl_cv._Win_cv);\r\n    WakeAllConditionVariable(pcv);\r\n}\r\n"
  },
  {
    "path": "stl/src/print.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// print.cpp -- C++23 <print> implementation\r\n\r\n#include <__msvc_print.hpp>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <internal_shared.h>\r\n#include <io.h>\r\n#include <type_traits>\r\n\r\n#include <Windows.h>\r\n\r\nextern \"C\" {\r\n\r\n[[nodiscard]] _Success_(return._Error == __std_win_error::_Success) __std_unicode_console_retrieval_result\r\n    __stdcall __std_get_unicode_console_handle_from_file_stream(_In_ FILE* const _Stream) noexcept {\r\n    if (_Stream == nullptr) {\r\n        return __std_unicode_console_retrieval_result{._Error = __std_win_error::_Invalid_parameter};\r\n    }\r\n\r\n    const int _Fd = _fileno(_Stream);\r\n\r\n    if (_Fd == -2) {\r\n        // According to https://learn.microsoft.com/cpp/c-runtime-library/reference/fileno ,\r\n        // _fileno() returns -2 if _Stream refers to either stdout or stderr and there is no associated output stream.\r\n        // In that case, there is also no associated console HANDLE. (We haven't observed this happening in practice.)\r\n        return __std_unicode_console_retrieval_result{._Error = __std_win_error::_Not_supported};\r\n    } else if (_Fd == -1) {\r\n        return __std_unicode_console_retrieval_result{._Error = __std_win_error::_Invalid_parameter};\r\n    }\r\n\r\n    const HANDLE _Console_handle = reinterpret_cast<HANDLE>(_get_osfhandle(_Fd));\r\n\r\n    if (_Console_handle == INVALID_HANDLE_VALUE) {\r\n        return __std_unicode_console_retrieval_result{._Error = __std_win_error::_Invalid_parameter};\r\n    }\r\n\r\n    // We can check if _Console_handle actually refers to a console or not by checking the\r\n    // return value of GetConsoleMode().\r\n    DWORD _Console_mode;\r\n    const bool _Is_unicode_console = GetConsoleMode(_Console_handle, &_Console_mode) != 0;\r\n\r\n    if (!_Is_unicode_console) {\r\n        return __std_unicode_console_retrieval_result{._Error = __std_win_error::_File_not_found};\r\n    }\r\n\r\n    return __std_unicode_console_retrieval_result{\r\n        ._Console_handle = static_cast<__std_unicode_console_handle>(\r\n            reinterpret_cast<_STD underlying_type_t<__std_unicode_console_handle>>(_Console_handle)),\r\n        ._Error = __std_win_error::_Success};\r\n}\r\n\r\n} // extern \"C\"\r\n\r\nnamespace {\r\n    class _Allocated_string {\r\n    public:\r\n        _Allocated_string() noexcept {\r\n            _Buffer[0] = L'\\0'; // Activate _Buffer\r\n        }\r\n\r\n        ~_Allocated_string() {\r\n            if (_Using_heap()) {\r\n                _Str.~_Heap_string();\r\n            }\r\n        }\r\n\r\n        [[nodiscard]] wchar_t* _Data() noexcept {\r\n            return _Using_heap() ? _Str.get() : _Buffer;\r\n        }\r\n\r\n        [[nodiscard]] size_t _Capacity() const noexcept {\r\n            return _Str_capacity;\r\n        }\r\n\r\n        [[nodiscard]] bool _Grow(const size_t _Capacity) noexcept {\r\n            if (_Capacity <= _Str_capacity) {\r\n                return true;\r\n            }\r\n\r\n            if (_Using_heap()) {\r\n                _Str.~_Heap_string();\r\n                // We must not throw until restoring the invariant that:\r\n                // (_Str_capacity == _Buffer_size && _Buffer is active) ||\r\n                // (_Str_capacity > _Buffer_size && _Str is active)\r\n            }\r\n\r\n            ::new (&_Str) _Heap_string(_malloc_crt_t(wchar_t, _Capacity)); // Activate _Str\r\n\r\n            if (!_Str) {\r\n                _Str_capacity = _Buffer_size;\r\n                _Buffer[0]    = L'\\0'; // Activate _Buffer\r\n                return false;\r\n            }\r\n\r\n            _Str_capacity = _Capacity;\r\n            return true;\r\n        }\r\n\r\n    private:\r\n        using _Heap_string = __crt_unique_heap_ptr<wchar_t>;\r\n\r\n        // Allows small formatted strings, such as those from _Print_to_unicode_console_it, to not allocate any extra\r\n        // internal transcoding buffer\r\n        static constexpr size_t _Buffer_size = 2048;\r\n\r\n        [[nodiscard]] bool _Using_heap() const noexcept {\r\n            return _Str_capacity > _Buffer_size;\r\n        }\r\n\r\n        size_t _Str_capacity = _Buffer_size;\r\n        union {\r\n            wchar_t _Buffer[_Buffer_size];\r\n            _Heap_string _Str;\r\n        };\r\n    };\r\n\r\n    template <class _Char_type>\r\n    class _Really_basic_string_view {\r\n    public:\r\n        _Really_basic_string_view() = default;\r\n\r\n        explicit _Really_basic_string_view(const _Char_type* const _Other_str, const size_t _Other_size) noexcept\r\n            : _Str(_Other_str), _Str_size(_Other_size) {}\r\n\r\n        [[nodiscard]] const _Char_type* _Data() const noexcept {\r\n            return _Str;\r\n        }\r\n\r\n        [[nodiscard]] size_t _Size() const noexcept {\r\n            return _Str_size;\r\n        }\r\n\r\n        [[nodiscard]] bool _Empty() const noexcept {\r\n            return _Str_size == 0;\r\n        }\r\n\r\n    private:\r\n        const _Char_type* _Str = nullptr;\r\n        size_t _Str_size       = 0;\r\n    };\r\n\r\n    using _Minimal_string_view  = _Really_basic_string_view<char>;\r\n    using _Minimal_wstring_view = _Really_basic_string_view<wchar_t>;\r\n\r\n    [[nodiscard]] _Minimal_string_view _Get_next_utf8_string_segment(\r\n        const char* const _Str, const size_t _Str_size) noexcept {\r\n        constexpr size_t _Max_str_segment_size = 8192;\r\n\r\n        if (_Str_size <= _Max_str_segment_size) {\r\n            return _Minimal_string_view{_Str, _Str_size};\r\n        }\r\n\r\n        // Let's refer to _Max_str_segment_size as M.\r\n        // Now we know _Str_size > M, so we can read _Str[M].\r\n        // We might need to shrink this segment down to M - 3 bytes, in this worst case scenario:\r\n\r\n        //  Values:        [byte1][byte2][byte3] | [byte4]\r\n        // Indices: [M - 4][M - 3][M - 2][M - 1] | [  M  ]\r\n        //   Sizes: [M - 3][M - 2][M - 1][  M  ] | [M + 1]\r\n        //              Maximum segment boundary ^\r\n\r\n        for (size_t _Shrink = 0; _Shrink < 3; ++_Shrink) {\r\n            const size_t _Kx = _Max_str_segment_size - _Shrink; // consider a segment of _Kx bytes\r\n\r\n            // The first byte after the segment is at index _Kx, which we can read (see above).\r\n            // If _Str[_Kx] is a non-trailing byte, then it's the beginning of a code point.\r\n            const bool _Trailing_byte = (static_cast<unsigned char>(_Str[_Kx]) >> 6) == 0b10;\r\n\r\n            if (!_Trailing_byte) {\r\n                return _Minimal_string_view{_Str, _Kx}; // found a boundary between code points\r\n            }\r\n        }\r\n\r\n        return _Minimal_string_view{_Str, _Max_str_segment_size - 3}; // worst case scenario\r\n    }\r\n\r\n    class _Transcode_result {\r\n    public:\r\n        _Transcode_result() noexcept : _Transcoded_str(), _Successful(true) {}\r\n\r\n        _Transcode_result(_Minimal_wstring_view _Result_str) noexcept\r\n            : _Transcoded_str(_Result_str), _Successful(true) {}\r\n\r\n        _Transcode_result(__std_win_error _Result_error) noexcept : _Win_error(_Result_error), _Successful(false) {}\r\n\r\n        [[nodiscard]] bool _Has_value() const noexcept {\r\n            return _Successful;\r\n        }\r\n\r\n        [[nodiscard]] _Minimal_wstring_view _Value() const noexcept {\r\n            return _Transcoded_str;\r\n        }\r\n\r\n        [[nodiscard]] __std_win_error _Error() const noexcept {\r\n            return _Win_error;\r\n        }\r\n\r\n    private:\r\n        union {\r\n            _Minimal_wstring_view _Transcoded_str;\r\n            __std_win_error _Win_error;\r\n        };\r\n\r\n        bool _Successful;\r\n    };\r\n\r\n    [[nodiscard]] _Transcode_result _Transcode_utf8_string(\r\n        _Allocated_string& _Dst_str, const _Minimal_string_view _Src_str) noexcept {\r\n        // MultiByteToWideChar() fails if strLength == 0.\r\n        if (_Src_str._Empty()) {\r\n            return {};\r\n        }\r\n\r\n        // For vprint_unicode(), N4950 [ostream.formatted.print]/4 suggests replacing invalid code units with U+FFFD.\r\n        // This is done automatically by MultiByteToWideChar(), so long as we do not use the MB_ERR_INVALID_CHARS flag.\r\n        // We transcode up to 8,192 bytes per segment, which easily fits in an int.\r\n        const int32_t _Num_chars_required =\r\n            MultiByteToWideChar(CP_UTF8, 0, _Src_str._Data(), static_cast<int>(_Src_str._Size()), nullptr, 0);\r\n\r\n        if (_Num_chars_required == 0) {\r\n            return static_cast<__std_win_error>(GetLastError());\r\n        }\r\n\r\n        const bool _Has_space = _Dst_str._Grow(static_cast<size_t>(_Num_chars_required));\r\n        if (!_Has_space) {\r\n            return __std_win_error::_Not_enough_memory;\r\n        }\r\n\r\n        const int32_t _Conversion_result = MultiByteToWideChar(CP_UTF8, 0, _Src_str._Data(),\r\n            static_cast<int>(_Src_str._Size()), _Dst_str._Data(), static_cast<int>(_Dst_str._Capacity()));\r\n\r\n        if (_Conversion_result == 0) {\r\n            // This shouldn't happen...\r\n            _CSTD abort();\r\n        }\r\n\r\n        return _Minimal_wstring_view{_Dst_str._Data(), static_cast<size_t>(_Conversion_result)};\r\n    }\r\n\r\n    [[nodiscard]] __std_win_error _Write_console(\r\n        const HANDLE _Console_handle, const _Minimal_wstring_view _Wide_str) noexcept {\r\n        const BOOL _Write_result =\r\n            WriteConsoleW(_Console_handle, _Wide_str._Data(), static_cast<DWORD>(_Wide_str._Size()), nullptr, nullptr);\r\n\r\n        if (!_Write_result) {\r\n            return static_cast<__std_win_error>(GetLastError());\r\n        }\r\n\r\n        return __std_win_error::_Success;\r\n    }\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n[[nodiscard]] _Success_(return == __std_win_error::_Success) __std_win_error\r\n    __stdcall __std_print_to_unicode_console(_In_ const __std_unicode_console_handle _Console_handle,\r\n        _In_reads_(_Str_size) const char* const _Str, _In_ const size_t _Str_size) noexcept {\r\n    if (_Console_handle == __std_unicode_console_handle::_Invalid || _Str == nullptr) {\r\n        return __std_win_error::_Invalid_parameter;\r\n    }\r\n\r\n    const HANDLE _Actual_console_handle = reinterpret_cast<HANDLE>(_Console_handle);\r\n\r\n    // We transcode in fairly large segments of 8,192 bytes per segment,\r\n    // so one iteration should handle the vast majority of strings.\r\n    const char* _Remaining_str = _Str;\r\n    size_t _Remaining_str_size = _Str_size;\r\n\r\n    _Minimal_string_view _Curr_str_segment{};\r\n    _Allocated_string _Allocated_str{};\r\n    _Transcode_result _Transcoded_str{};\r\n\r\n    for (;;) {\r\n        _Curr_str_segment = _Get_next_utf8_string_segment(_Remaining_str, _Remaining_str_size);\r\n        _Transcoded_str   = _Transcode_utf8_string(_Allocated_str, _Curr_str_segment);\r\n\r\n        if (!_Transcoded_str._Has_value()) {\r\n            return _Transcoded_str._Error();\r\n        }\r\n\r\n        const __std_win_error _Write_result = _Write_console(_Actual_console_handle, _Transcoded_str._Value());\r\n\r\n        if (_Write_result != __std_win_error::_Success) {\r\n            return _Write_result;\r\n        }\r\n\r\n        _Remaining_str_size -= _Curr_str_segment._Size();\r\n\r\n        if (_Remaining_str_size == 0) {\r\n            return __std_win_error::_Success;\r\n        }\r\n\r\n        _Remaining_str += _Curr_str_segment._Size();\r\n    }\r\n}\r\n\r\n[[nodiscard]] _Success_(return == __std_win_error::_Success) __std_win_error\r\n    __stdcall __std_print_newline_only_to_unicode_console(\r\n        _In_ const __std_unicode_console_handle _Console_handle) noexcept {\r\n    if (_Console_handle == __std_unicode_console_handle::_Invalid) {\r\n        return __std_win_error::_Invalid_parameter;\r\n    }\r\n\r\n    const auto _Actual_console_handle = reinterpret_cast<HANDLE>(_Console_handle);\r\n\r\n    const BOOL _Write_result = WriteConsoleW(_Actual_console_handle, L\"\\n\", 1, nullptr, nullptr);\r\n\r\n    if (!_Write_result) {\r\n        return static_cast<__std_win_error>(GetLastError());\r\n    }\r\n\r\n    return __std_win_error::_Success;\r\n}\r\n\r\n} // extern \"C\"\r\n"
  },
  {
    "path": "stl/src/raisehan.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// pointer to raise handler\r\n\r\n#ifndef _M_CEE_PURE\r\n#define _HAS_EXCEPTIONS 0\r\n#endif // !defined(_M_CEE_PURE)\r\n#include <exception>\r\n_STD_BEGIN\r\n\r\n_Prhand _Raise_handler = nullptr; // define raise handler pointer\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/regex.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// This file is compiled into the import library.\r\n// MAJOR LIMITATIONS apply to what can be included here!\r\n// Before editing this file, read: /docs/import_library.md\r\n\r\n#include <__msvc_xlocinfo_types.hpp>\r\n#include <clocale>\r\n#include <crtdefs.h>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <internal_shared.h>\r\n\r\n#include <Windows.h>\r\n\r\n#undef _ENFORCE_ONLY_CORE_HEADERS\r\n#include \"awint.hpp\"\r\n\r\nextern \"C\" {\r\n\r\n// derived from xstrxfrm.cpp\r\nsize_t __stdcall __std_regex_transform_primary_char(\r\n    _Out_writes_(end1 - string1) _Post_readable_size_(return) char* string1, char* end1,\r\n    _In_reads_(end2 - string2) const char* string2, const char* end2, _In_opt_ const _Collvec* ploc) noexcept {\r\n    size_t n1     = end1 - string1;\r\n    size_t n2     = end2 - string2;\r\n    size_t retval = static_cast<size_t>(-1);\r\n    UINT codepage;\r\n    const wchar_t* locale_name;\r\n\r\n    if (ploc == nullptr) {\r\n        locale_name = ___lc_locale_name_func()[LC_COLLATE];\r\n        codepage    = ___lc_collate_cp_func();\r\n    } else {\r\n        locale_name = ploc->_LocaleName;\r\n        codepage    = ploc->_Page;\r\n    }\r\n\r\n    if (locale_name == nullptr && codepage == CP_ACP) {\r\n        if (n2 <= n1) {\r\n            memcpy(string1, string2, n2);\r\n        }\r\n        retval = n2;\r\n    } else {\r\n        // Inquire size of dst string in BYTES\r\n        const int dstlen = __crtLCMapStringA(locale_name,\r\n            LCMAP_SORTKEY | LINGUISTIC_IGNORECASE | LINGUISTIC_IGNOREDIACRITIC | NORM_IGNOREKANATYPE | NORM_IGNOREWIDTH,\r\n            string2, static_cast<int>(n2), nullptr, 0, codepage, TRUE);\r\n\r\n        if (dstlen != 0) {\r\n            retval = dstlen;\r\n\r\n            // if not enough room, return amount needed\r\n            if (dstlen <= static_cast<int>(n1)) {\r\n                // Map src string to dst string\r\n                __crtLCMapStringA(locale_name,\r\n                    LCMAP_SORTKEY | LINGUISTIC_IGNORECASE | LINGUISTIC_IGNOREDIACRITIC | NORM_IGNOREKANATYPE\r\n                        | NORM_IGNOREWIDTH,\r\n                    string2, static_cast<int>(n2), string1, static_cast<int>(n1), codepage, TRUE);\r\n            }\r\n        }\r\n    }\r\n\r\n    return retval;\r\n}\r\n\r\n// derived from xwcsxfrm.cpp\r\nsize_t __stdcall __std_regex_transform_primary_wchar_t(\r\n    _Out_writes_(end1 - string1) _Post_readable_size_(return) wchar_t* string1, wchar_t* end1,\r\n    _In_reads_(end2 - string2) const wchar_t* string2, const wchar_t* end2, _In_opt_ const _Collvec* ploc) noexcept {\r\n    size_t n1   = end1 - string1;\r\n    size_t n2   = end2 - string2;\r\n    size_t size = static_cast<size_t>(-1);\r\n    const wchar_t* locale_name;\r\n\r\n    if (ploc == nullptr) {\r\n        locale_name = ___lc_locale_name_func()[LC_COLLATE];\r\n    } else {\r\n        locale_name = ploc->_LocaleName;\r\n    }\r\n\r\n    if (locale_name == nullptr) {\r\n        if (n2 <= n1) {\r\n            memcpy(string1, string2, n2 * sizeof(wchar_t));\r\n        }\r\n        size = n2;\r\n    } else {\r\n        // When using LCMAP_SORTKEY, LCMapStringW handles BYTES not wide\r\n        // chars. We use a byte buffer to hold bytes and then convert the\r\n        // byte string to a wide char string and return this so it can be\r\n        // compared using wcscmp(). User's buffer is n1 wide chars, so\r\n        // use an internal buffer of n1 bytes.\r\n\r\n        auto bbuffer = _malloc_crt_t(unsigned char, n1);\r\n\r\n        if (bbuffer) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 6386) // PREfast doesn't understand LCMAP_SORTKEY\r\n            size = __crtLCMapStringW(locale_name,\r\n                LCMAP_SORTKEY | LINGUISTIC_IGNORECASE | LINGUISTIC_IGNOREDIACRITIC | NORM_IGNOREKANATYPE\r\n                    | NORM_IGNOREWIDTH,\r\n                string2, static_cast<int>(n2), reinterpret_cast<wchar_t*>(bbuffer.get()), static_cast<int>(n1));\r\n#pragma warning(pop)\r\n\r\n            if (size == 0) {\r\n                // buffer not big enough, get size required.\r\n                size = __crtLCMapStringW(locale_name,\r\n                    LCMAP_SORTKEY | LINGUISTIC_IGNORECASE | LINGUISTIC_IGNOREDIACRITIC | NORM_IGNOREKANATYPE\r\n                        | NORM_IGNOREWIDTH,\r\n                    string2, static_cast<int>(n2), nullptr, 0);\r\n\r\n                if (size == 0) {\r\n                    size = static_cast<size_t>(-1); // default error\r\n                }\r\n            } else {\r\n                // string successfully mapped, convert to wide char\r\n\r\n                for (size_t i = 0; i < size; ++i) {\r\n                    string1[i] = static_cast<wchar_t>(bbuffer.get()[i]);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    return size;\r\n}\r\n} // extern \"C\"\r\n"
  },
  {
    "path": "stl/src/sharedmutex.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <__msvc_threads_core.hpp>\r\n\r\n#include <Windows.h>\r\n\r\n#include \"primitives.hpp\"\r\n\r\n// these declarations must be in sync with those in xthreads.h\r\n\r\nextern \"C\" {\r\nstatic_assert(sizeof(_Smtx_t) == sizeof(SRWLOCK), \"_Smtx_t must be the same size as SRWLOCK.\");\r\nstatic_assert(alignof(_Smtx_t) == alignof(SRWLOCK), \"_Smtx_t must be the same alignment as SRWLOCK.\");\r\n\r\nvoid __cdecl _Smtx_lock_exclusive(_Smtx_t* smtx) noexcept { // lock shared mutex exclusively\r\n    AcquireSRWLockExclusive(reinterpret_cast<PSRWLOCK>(smtx));\r\n}\r\n\r\nvoid __cdecl _Smtx_lock_shared(_Smtx_t* smtx) noexcept { // lock shared mutex non-exclusively\r\n    AcquireSRWLockShared(reinterpret_cast<PSRWLOCK>(smtx));\r\n}\r\n\r\nint __cdecl _Smtx_try_lock_exclusive(_Smtx_t* smtx) noexcept { // try to lock shared mutex exclusively\r\n    return TryAcquireSRWLockExclusive(reinterpret_cast<PSRWLOCK>(smtx));\r\n}\r\n\r\nint __cdecl _Smtx_try_lock_shared(_Smtx_t* smtx) noexcept { // try to lock shared mutex non-exclusively\r\n    return TryAcquireSRWLockShared(reinterpret_cast<PSRWLOCK>(smtx));\r\n}\r\n\r\nvoid __cdecl _Smtx_unlock_exclusive(_Smtx_t* smtx) noexcept { // unlock exclusive shared mutex\r\n    _Analysis_assume_lock_held_(*reinterpret_cast<PSRWLOCK>(smtx));\r\n    ReleaseSRWLockExclusive(reinterpret_cast<PSRWLOCK>(smtx));\r\n}\r\n\r\nvoid __cdecl _Smtx_unlock_shared(_Smtx_t* smtx) noexcept { // unlock non-exclusive shared mutex\r\n    ReleaseSRWLockShared(reinterpret_cast<PSRWLOCK>(smtx));\r\n}\r\n\r\nvoid __stdcall _Thrd_sleep_for(const unsigned long ms) noexcept { // suspend current thread for `ms` milliseconds\r\n    Sleep(ms);\r\n}\r\n\r\nnamespace {\r\n    _Thrd_result __stdcall _Cnd_timedwait_for_impl(\r\n        const _Cnd_t cond, const _Mtx_t mtx, const unsigned int target_ms, const bool checked) noexcept {\r\n        _Thrd_result res            = _Thrd_result::_Success;\r\n        unsigned long long start_ms = 0;\r\n\r\n        if (checked) {\r\n            start_ms = GetTickCount64();\r\n        }\r\n\r\n        // TRANSITION: replace with _Mtx_clear_owner(mtx);\r\n        mtx->_Thread_id = -1;\r\n        --mtx->_Count;\r\n\r\n        if (!_Primitive_wait_for(cond, mtx, target_ms)) { // report timeout\r\n            if (!checked || GetTickCount64() - start_ms >= target_ms) {\r\n                res = _Thrd_result::_Timedout;\r\n            }\r\n        }\r\n        // TRANSITION: replace with _Mtx_reset_owner(mtx);\r\n        mtx->_Thread_id = static_cast<long>(GetCurrentThreadId());\r\n        ++mtx->_Count;\r\n\r\n        return res;\r\n    }\r\n} // unnamed namespace\r\n\r\n// TRANSITION, ABI: preserved for compatibility\r\n_Thrd_result __stdcall _Cnd_timedwait_for(const _Cnd_t cond, const _Mtx_t mtx, const unsigned int target_ms) noexcept {\r\n    return _Cnd_timedwait_for_impl(cond, mtx, target_ms, true);\r\n}\r\n\r\n_Thrd_result __stdcall _Cnd_timedwait_for_unchecked(\r\n    const _Cnd_t cond, const _Mtx_t mtx, const unsigned int target_ms) noexcept {\r\n    return _Cnd_timedwait_for_impl(cond, mtx, target_ms, false);\r\n}\r\n\r\n\r\n} // extern \"C\"\r\n"
  },
  {
    "path": "stl/src/special_math.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cerrno>\r\n#include <cmath>\r\n#include <limits>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4702) // unreachable code\r\n#pragma warning(disable : 4714) // function marked as __forceinline not inlined\r\n\r\n#define BOOST_MATH_DOMAIN_ERROR_POLICY   errno_on_error\r\n#define BOOST_MATH_OVERFLOW_ERROR_POLICY ignore_error\r\n\r\n// Avoid SSE intrinsics in EC\r\n#if defined(_M_ARM64EC)\r\n// need to include intrinsics to ensure that x64 definitions in intrin0.h are not lost\r\n#include <intrin.h>\r\n#undef _M_AMD64\r\n#undef _M_X64\r\n#define _M_ARM64\r\n#endif // defined(_M_ARM64EC)\r\n\r\n// Using headers from Boost.Math\r\n#include <boost/math/special_functions/bessel.hpp>\r\n#include <boost/math/special_functions/beta.hpp>\r\n#include <boost/math/special_functions/ellint_1.hpp>\r\n#include <boost/math/special_functions/ellint_2.hpp>\r\n#include <boost/math/special_functions/ellint_3.hpp>\r\n#include <boost/math/special_functions/expint.hpp>\r\n#include <boost/math/special_functions/hermite.hpp>\r\n#include <boost/math/special_functions/laguerre.hpp>\r\n#include <boost/math/special_functions/legendre.hpp>\r\n#include <boost/math/special_functions/spherical_harmonic.hpp>\r\n#include <boost/math/special_functions/zeta.hpp>\r\n#include <boost/math/tools/config.hpp>\r\n#include <boost/math/tools/precision.hpp>\r\n\r\n#if defined(_M_ARM64EC)\r\n#undef _M_ARM64\r\n#define _M_AMD64\r\n#define _M_X64\r\n#endif // defined(_M_ARM64EC)\r\n\r\n#pragma warning(pop)\r\n\r\nnamespace {\r\n    template <class _Func>\r\n    [[nodiscard]] auto _Boost_call(const _Func& _Fn) noexcept {\r\n        _TRY_BEGIN\r\n        return _Fn();\r\n        _CATCH_ALL\r\n        errno     = EDOM;\r\n        using _Ty = _STD decay_t<decltype(_Fn())>;\r\n        return _STD numeric_limits<_Ty>::quiet_NaN();\r\n        _CATCH_END\r\n    }\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_assoc_laguerre(\r\n    const unsigned int _Pn, const unsigned int _Pm, const double _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::laguerre(_Pn, _Pm, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_assoc_laguerref(\r\n    const unsigned int _Pn, const unsigned int _Pm, const float _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::laguerre(_Pn, _Pm, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_assoc_legendre(\r\n    const unsigned int _Pl, const unsigned int _Pm, const double _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] {\r\n        auto _Result = ::boost::math::legendre_p(_Pl, _Pm, _Px);\r\n        // Boost includes the Condon-Shortley phase term (-1)^m, std does not\r\n        if ((_Pm & 1u) != 0) {\r\n            _Result = -_Result;\r\n        }\r\n        return _Result;\r\n    });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_assoc_legendref(\r\n    const unsigned int _Pl, const unsigned int _Pm, const float _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] {\r\n        auto _Result = ::boost::math::legendre_p(_Pl, _Pm, _Px);\r\n        // Boost includes the Condon-Shortley phase term (-1)^m, std does not\r\n        if ((_Pm & 1u) != 0) {\r\n            _Result = -_Result;\r\n        }\r\n        return _Result;\r\n    });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_beta(const double _Px, const double _Py) noexcept {\r\n    return _Boost_call([=] { return ::boost::math::beta(_Px, _Py); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_betaf(const float _Px, const float _Py) noexcept {\r\n    return _Boost_call([=] { return ::boost::math::beta(_Px, _Py); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_comp_ellint_1(const double _Pk) noexcept {\r\n    return _Boost_call([=] { return ::boost::math::ellint_1(_Pk); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_comp_ellint_1f(const float _Pk) noexcept {\r\n    return _Boost_call([=] { return ::boost::math::ellint_1(_Pk); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_comp_ellint_2(const double _Pk) noexcept {\r\n    if (_STD isnan(_Pk)) {\r\n        return _Pk;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::ellint_2(_Pk); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_comp_ellint_2f(const float _Pk) noexcept {\r\n    if (_STD isnan(_Pk)) {\r\n        return _Pk;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::ellint_2(_Pk); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_comp_ellint_3(const double _Pk, const double _Pnu) noexcept {\r\n    if (_STD isnan(_Pk)) {\r\n        return _Pk;\r\n    }\r\n\r\n    if (_STD isnan(_Pnu)) {\r\n        return _Pnu;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::ellint_3(_Pk, _Pnu); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_comp_ellint_3f(const float _Pk, const float _Pnu) noexcept {\r\n    if (_STD isnan(_Pk)) {\r\n        return _Pk;\r\n    }\r\n\r\n    if (_STD isnan(_Pnu)) {\r\n        return _Pnu;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::ellint_3(_Pk, _Pnu); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_cyl_bessel_i(const double _Pnu, const double _Px) noexcept {\r\n    if (_STD isnan(_Pnu)) {\r\n        return _Pnu;\r\n    }\r\n\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::cyl_bessel_i(_Pnu, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_cyl_bessel_if(const float _Pnu, const float _Px) noexcept {\r\n    if (_STD isnan(_Pnu)) {\r\n        return _Pnu;\r\n    }\r\n\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::cyl_bessel_i(_Pnu, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_cyl_bessel_j(const double _Pnu, const double _Px) noexcept {\r\n    if (_STD isnan(_Pnu)) {\r\n        return _Pnu;\r\n    }\r\n\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::cyl_bessel_j(_Pnu, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_cyl_bessel_jf(const float _Pnu, const float _Px) noexcept {\r\n    if (_STD isnan(_Pnu)) {\r\n        return _Pnu;\r\n    }\r\n\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::cyl_bessel_j(_Pnu, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_cyl_bessel_k(const double _Pnu, const double _Px) noexcept {\r\n    if (_STD isnan(_Pnu)) {\r\n        return _Pnu;\r\n    }\r\n\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::cyl_bessel_k(_Pnu, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_cyl_bessel_kf(const float _Pnu, const float _Px) noexcept {\r\n    if (_STD isnan(_Pnu)) {\r\n        return _Pnu;\r\n    }\r\n\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::cyl_bessel_k(_Pnu, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_cyl_neumann(const double _Pnu, const double _Px) noexcept {\r\n    if (_STD isnan(_Pnu)) {\r\n        return _Pnu;\r\n    }\r\n\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::cyl_neumann(_Pnu, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_cyl_neumannf(const float _Pnu, const float _Px) noexcept {\r\n    if (_STD isnan(_Pnu)) {\r\n        return _Pnu;\r\n    }\r\n\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::cyl_neumann(_Pnu, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_ellint_1(const double _Pk, const double _Pphi) noexcept {\r\n    if (_STD isnan(_Pk)) {\r\n        return _Pk;\r\n    }\r\n\r\n    if (_STD isnan(_Pphi)) {\r\n        return _Pphi;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::ellint_1(_Pk, _Pphi); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_ellint_1f(const float _Pk, const float _Pphi) noexcept {\r\n    if (_STD isnan(_Pk)) {\r\n        return _Pk;\r\n    }\r\n\r\n    if (_STD isnan(_Pphi)) {\r\n        return _Pphi;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::ellint_1(_Pk, _Pphi); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_ellint_2(const double _Pk, const double _Pphi) noexcept {\r\n    if (_STD isnan(_Pk)) {\r\n        return _Pk;\r\n    }\r\n\r\n    if (_STD isnan(_Pphi)) {\r\n        return _Pphi;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::ellint_2(_Pk, _Pphi); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_ellint_2f(const float _Pk, const float _Pphi) noexcept {\r\n    if (_STD isnan(_Pk)) {\r\n        return _Pk;\r\n    }\r\n\r\n    if (_STD isnan(_Pphi)) {\r\n        return _Pphi;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::ellint_2(_Pk, _Pphi); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_ellint_3(\r\n    const double _Pk, const double _Pnu, const double _Pphi) noexcept {\r\n    if (_STD isnan(_Pk)) {\r\n        return _Pk;\r\n    }\r\n\r\n    if (_STD isnan(_Pnu)) {\r\n        return _Pnu;\r\n    }\r\n\r\n    if (_STD isnan(_Pphi)) {\r\n        return _Pphi;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::ellint_3(_Pk, _Pnu, _Pphi); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_ellint_3f(\r\n    const float _Pk, const float _Pnu, const float _Pphi) noexcept {\r\n    if (_STD isnan(_Pk)) {\r\n        return _Pk;\r\n    }\r\n\r\n    if (_STD isnan(_Pnu)) {\r\n        return _Pnu;\r\n    }\r\n\r\n    if (_STD isnan(_Pphi)) {\r\n        return _Pphi;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::ellint_3(_Pk, _Pnu, _Pphi); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_expint(const double _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::expint(_Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_expintf(const float _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::expint(_Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_hermite(const unsigned int _Pn, const double _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::hermite(_Pn, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_hermitef(const unsigned int _Pn, const float _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::hermite(_Pn, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_laguerre(const unsigned int _Pn, const double _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::laguerre(_Pn, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_laguerref(const unsigned int _Pn, const float _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::laguerre(_Pn, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_legendre(const unsigned int _Pl, const double _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::legendre_p(_Pl, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_legendref(const unsigned int _Pl, const float _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::legendre_p(_Pl, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_riemann_zeta(const double _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::zeta(_Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_riemann_zetaf(const float _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::zeta(_Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_sph_bessel(\r\n    const unsigned int _Pn, const double _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::sph_bessel(_Pn, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_sph_besself(const unsigned int _Pn, const float _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::sph_bessel(_Pn, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_sph_legendre(\r\n    const unsigned int _Pl, const unsigned int _Pm, const double _Ptheta) noexcept {\r\n    if (_STD isnan(_Ptheta)) {\r\n        return _Ptheta;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::spherical_harmonic_r(_Pl, _Pm, _Ptheta, 0.0); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_sph_legendref(\r\n    const unsigned int _Pl, const unsigned int _Pm, const float _Ptheta) noexcept {\r\n    if (_STD isnan(_Ptheta)) {\r\n        return _Ptheta;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::spherical_harmonic_r(_Pl, _Pm, _Ptheta, 0.0f); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_sph_neumann(\r\n    const unsigned int _Pn, const double _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::sph_neumann(_Pn, _Px); });\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_sph_neumannf(\r\n    const unsigned int _Pn, const float _Px) noexcept {\r\n    if (_STD isnan(_Px)) {\r\n        return _Px;\r\n    }\r\n\r\n    return _Boost_call([=] { return ::boost::math::sph_neumann(_Pn, _Px); });\r\n}\r\n} // extern \"C\"\r\n\r\nnamespace {\r\n    template <class _Ty>\r\n    [[nodiscard]] _Ty _Hypot3(_Ty _Dx, _Ty _Dy, _Ty _Dz) noexcept { // type-oblivious backend for 3-arg hypot\r\n        static_assert(_STD is_floating_point_v<_Ty>);\r\n        _Dx = _STD abs(_Dx);\r\n        _Dy = _STD abs(_Dy);\r\n        _Dz = _STD abs(_Dz);\r\n\r\n        constexpr _Ty _Infinity = _STD numeric_limits<_Ty>::infinity();\r\n        if (_Dx == _Infinity || _Dy == _Infinity || _Dz == _Infinity) {\r\n            return _Infinity;\r\n        }\r\n\r\n        if (_Dy > _Dx) {\r\n            _STD swap(_Dx, _Dy);\r\n        }\r\n\r\n        if (_Dz > _Dx) {\r\n            _STD swap(_Dx, _Dz);\r\n        }\r\n\r\n        constexpr _Ty _Eps = ::boost::math::tools::epsilon<_Ty>();\r\n        if (_Dx * _Eps >= _Dy && _Dx * _Eps >= _Dz) {\r\n            return _Dx;\r\n        }\r\n\r\n        const auto _DyDx = _Dy / _Dx;\r\n        const auto _DzDx = _Dz / _Dx;\r\n\r\n        return _Dx * _STD sqrt(1 + _DyDx * _DyDx + _DzDx * _DzDx);\r\n    }\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n[[nodiscard]] _CRT_SATELLITE_2 double __stdcall __std_smf_hypot3(\r\n    const double _Dx, const double _Dy, const double _Dz) noexcept {\r\n    return _Hypot3(_Dx, _Dy, _Dz);\r\n}\r\n\r\n[[nodiscard]] _CRT_SATELLITE_2 float __stdcall __std_smf_hypot3f(\r\n    const float _Dx, const float _Dy, const float _Dz) noexcept {\r\n    return _Hypot3(_Dx, _Dy, _Dz);\r\n}\r\n} // extern \"C\"\r\n"
  },
  {
    "path": "stl/src/stacktrace.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstdio>\r\n#include <cstdlib>\r\n\r\n#include <initguid.h>\r\n#include <DbgEng.h>\r\n#include <DbgHelp.h>\r\n#include <Shlwapi.h>\r\n\r\n// The below function pointer types must be in sync with <stacktrace>\r\n\r\nextern \"C\" {\r\nusing _Stacktrace_string_fill_callback = size_t(__stdcall*)(char* _Data, size_t _Size, void* _Context) _NOEXCEPT_FNPTR;\r\n\r\nusing _Stacktrace_string_fill = size_t(__stdcall*)(\r\n    size_t _Size, void* _String, void* _Context, _Stacktrace_string_fill_callback _Callback);\r\n} // extern \"C\"\r\n\r\nnamespace {\r\n    template <class F>\r\n    size_t string_fill(const _Stacktrace_string_fill callback, const size_t size, void* const str, F f) {\r\n        return callback(size, str, &f,\r\n            [](char* s, size_t sz, void* context) noexcept -> size_t { return (*static_cast<F*>(context))(s, sz); });\r\n    }\r\n\r\n    // TRANSITION, GH-2285. Use SRWLOCK instead of std::mutex to avoid nontrivial constructor and nontrivial destructor\r\n    void lock_and_uninitialize() noexcept;\r\n\r\n    class [[nodiscard]] dbg_eng_data {\r\n    public:\r\n        dbg_eng_data() noexcept {\r\n            AcquireSRWLockExclusive(&srw);\r\n        }\r\n\r\n        ~dbg_eng_data() {\r\n            ReleaseSRWLockExclusive(&srw);\r\n        }\r\n\r\n        dbg_eng_data(const dbg_eng_data&)            = delete;\r\n        dbg_eng_data& operator=(const dbg_eng_data&) = delete;\r\n\r\n        void uninitialize() noexcept {\r\n            // \"Phoenix singleton\" - destroy and set to null, so that it can be initialized later again\r\n\r\n            if (debug_client != nullptr) {\r\n                if (attached) {\r\n                    (void) debug_client->DetachProcesses();\r\n                    attached = false;\r\n                }\r\n\r\n                debug_client->Release();\r\n                debug_client = nullptr;\r\n            }\r\n\r\n            if (debug_control != nullptr) {\r\n                debug_control->Release();\r\n                debug_control = nullptr;\r\n            }\r\n\r\n            if (debug_symbols != nullptr) {\r\n                debug_symbols->Release();\r\n                debug_symbols = nullptr;\r\n            }\r\n\r\n            if (dbgeng != nullptr) {\r\n                (void) FreeLibrary(dbgeng);\r\n                dbgeng = nullptr;\r\n            }\r\n\r\n            initialize_attempted = false;\r\n        }\r\n\r\n        [[nodiscard]] bool try_initialize() noexcept {\r\n            if (!initialize_attempted) {\r\n                initialize_attempted = true;\r\n\r\n                if (std::atexit(lock_and_uninitialize) != 0) {\r\n                    return false;\r\n                }\r\n\r\n                dbgeng = LoadLibraryExW(L\"dbgeng.dll\", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32);\r\n\r\n                if (dbgeng != nullptr) {\r\n                    const auto debug_create =\r\n                        reinterpret_cast<decltype(&DebugCreate)>(GetProcAddress(dbgeng, \"DebugCreate\"));\r\n\r\n                    // Deliberately not calling CoInitialize[Ex]. DbgEng.h API works fine without it.\r\n                    // COM initialization may have undesired interference with user's code.\r\n                    if (debug_create != nullptr\r\n                        && SUCCEEDED(debug_create(IID_IDebugClient, reinterpret_cast<void**>(&debug_client)))\r\n                        && SUCCEEDED(\r\n                            debug_client->QueryInterface(IID_IDebugSymbols, reinterpret_cast<void**>(&debug_symbols)))\r\n                        && SUCCEEDED(debug_client->QueryInterface(\r\n                            IID_IDebugControl, reinterpret_cast<void**>(&debug_control)))) {\r\n                        attached = SUCCEEDED(debug_client->AttachProcess(\r\n                            0, GetCurrentProcessId(), DEBUG_ATTACH_NONINVASIVE | DEBUG_ATTACH_NONINVASIVE_NO_SUSPEND));\r\n                        if (attached) {\r\n                            (void) debug_control->WaitForEvent(0, INFINITE);\r\n                        }\r\n\r\n                        constexpr ULONG add_options = SYMOPT_CASE_INSENSITIVE | SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS\r\n                                                    | SYMOPT_LOAD_LINES | SYMOPT_OMAP_FIND_NEAREST\r\n                                                    | SYMOPT_FAIL_CRITICAL_ERRORS | SYMOPT_AUTO_PUBLICS\r\n                                                    | SYMOPT_NO_PROMPTS;\r\n\r\n                        constexpr ULONG remove_options = SYMOPT_NO_CPP | SYMOPT_LOAD_ANYTHING\r\n                                                       | SYMOPT_NO_UNQUALIFIED_LOADS | SYMOPT_EXACT_SYMBOLS\r\n                                                       | SYMOPT_IGNORE_NT_SYMPATH | SYMOPT_PUBLICS_ONLY\r\n                                                       | SYMOPT_NO_PUBLICS | SYMOPT_NO_IMAGE_SEARCH;\r\n\r\n                        (void) debug_symbols->AddSymbolOptions(add_options);\r\n                        (void) debug_symbols->RemoveSymbolOptions(remove_options);\r\n                    }\r\n                }\r\n            }\r\n\r\n            return attached;\r\n        }\r\n\r\n        size_t get_description(\r\n            const void* const address, void* const str, size_t off, const _Stacktrace_string_fill fill) {\r\n            // Initially pass the current capacity, will retry with bigger buffer if it fails.\r\n            size_t size          = fill(0, str, nullptr, nullptr) - off;\r\n            HRESULT hr           = E_UNEXPECTED;\r\n            ULONG64 displacement = 0;\r\n\r\n            for (;;) {\r\n                ULONG new_size = 0;\r\n\r\n                const size_t new_off = string_fill(\r\n                    fill, off + size, str, [address, off, size, &new_size, &hr, &displacement](char* s, size_t) {\r\n                        hr = debug_symbols->GetNameByOffset(reinterpret_cast<uintptr_t>(address), s + off,\r\n                            static_cast<ULONG>(size + 1), &new_size, &displacement);\r\n\r\n                        return (hr == S_OK) ? off + new_size - 1 : off;\r\n                    });\r\n\r\n                if (hr == S_OK) {\r\n                    off = new_off;\r\n                    break;\r\n                } else if (hr == S_FALSE) {\r\n                    size = new_size - 1; // retry with bigger buffer\r\n                } else {\r\n                    return off;\r\n                }\r\n            }\r\n\r\n            if (displacement != 0) {\r\n                constexpr size_t max_disp_num = sizeof(\"+0x1122334455667788\") - 1; // maximum possible offset\r\n\r\n                off = string_fill(fill, off + max_disp_num, str, [displacement, off](char* s, size_t) {\r\n                    const int ret = std::snprintf(s + off, max_disp_num + 1, \"+0x%llX\", displacement);\r\n                    if (ret <= 0) {\r\n                        std::abort(); // formatting error\r\n                    }\r\n                    return off + ret;\r\n                });\r\n            }\r\n\r\n            return off;\r\n        }\r\n\r\n        size_t source_file(const void* const address, void* const str, size_t off, ULONG* const line,\r\n            const _Stacktrace_string_fill fill) {\r\n            // Initially pass the current capacity, will retry with bigger buffer if fails.\r\n            size_t size = fill(0, str, nullptr, nullptr) - off;\r\n            HRESULT hr  = E_UNEXPECTED;\r\n\r\n            for (;;) {\r\n                ULONG new_size = 0;\r\n\r\n                const size_t new_off =\r\n                    string_fill(fill, off + size, str, [address, off, size, line, &new_size, &hr](char* s, size_t) {\r\n                        hr = debug_symbols->GetLineByOffset(reinterpret_cast<uintptr_t>(address), line, s + off,\r\n                            static_cast<ULONG>(size + 1), &new_size, nullptr);\r\n\r\n                        return (hr == S_OK) ? off + new_size - 1 : off;\r\n                    });\r\n\r\n                if (hr == S_OK) {\r\n                    off = new_off;\r\n                    break;\r\n                } else if (hr == S_FALSE) {\r\n                    size = new_size - 1; // retry with bigger buffer\r\n                } else {\r\n                    if (line) {\r\n                        *line = 0;\r\n                    }\r\n\r\n                    return off;\r\n                }\r\n            }\r\n\r\n            return off;\r\n        }\r\n\r\n        [[nodiscard]] unsigned int source_line(const void* const address) noexcept {\r\n            ULONG line = 0;\r\n\r\n            if (FAILED(debug_symbols->GetLineByOffset(\r\n                    reinterpret_cast<uintptr_t>(address), &line, nullptr, 0, nullptr, nullptr))) {\r\n                return 0;\r\n            }\r\n\r\n            return line;\r\n        }\r\n\r\n        size_t address_to_string(\r\n            const void* const address, void* const str, size_t off, const _Stacktrace_string_fill fill) {\r\n            ULONG line = 0;\r\n\r\n            off = source_file(address, str, off, &line, fill);\r\n\r\n            if (line != 0) {\r\n                constexpr size_t max_line_num = sizeof(\"(4294967295): \") - 1; // maximum possible line number\r\n\r\n                off = string_fill(fill, off + max_line_num, str, [line, off](char* s, size_t) {\r\n                    const int ret = std::snprintf(s + off, max_line_num + 1, \"(%u): \", line);\r\n                    if (ret <= 0) {\r\n                        std::abort(); // formatting error\r\n                    }\r\n                    return off + ret;\r\n                });\r\n            }\r\n\r\n            return get_description(address, str, off, fill);\r\n        }\r\n\r\n    private:\r\n        inline static SRWLOCK srw                  = SRWLOCK_INIT;\r\n        inline static IDebugClient* debug_client   = nullptr;\r\n        inline static IDebugSymbols* debug_symbols = nullptr;\r\n        inline static IDebugControl* debug_control = nullptr;\r\n        inline static bool attached                = false;\r\n        inline static bool initialize_attempted    = false;\r\n        inline static HMODULE dbgeng               = nullptr;\r\n    };\r\n\r\n    void lock_and_uninitialize() noexcept {\r\n        dbg_eng_data locked_data;\r\n\r\n        locked_data.uninitialize();\r\n    }\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n#pragma optimize(\"\", off) // inhibit tail call optimization to have consistent _Frames_to_skip adjustment here\r\n[[nodiscard]] unsigned short __stdcall __std_stacktrace_capture(unsigned long _Frames_to_skip,\r\n    const unsigned long _Frames_to_capture, void** const _Back_trace, unsigned long* const _Back_trace_hash) noexcept {\r\n    return CaptureStackBackTrace(_Frames_to_skip + 1, _Frames_to_capture, _Back_trace, _Back_trace_hash);\r\n}\r\n#pragma optimize(\"\", on) // end inhibit tail call optimization\r\n\r\n// Some of these functions may throw (They would propagate bad_alloc potentially thrown from\r\n// string::resize_and_overwrite)\r\n\r\nvoid __stdcall __std_stacktrace_description(\r\n    const void* const _Address, void* const _Str, const _Stacktrace_string_fill _Fill) noexcept(false) {\r\n    dbg_eng_data locked_data;\r\n\r\n    if (!locked_data.try_initialize()) {\r\n        return;\r\n    }\r\n\r\n    locked_data.get_description(_Address, _Str, 0, _Fill);\r\n}\r\n\r\nvoid __stdcall __std_stacktrace_source_file(\r\n    const void* const _Address, void* const _Str, const _Stacktrace_string_fill _Fill) noexcept(false) {\r\n    dbg_eng_data locked_data;\r\n\r\n    if (!locked_data.try_initialize()) {\r\n        return;\r\n    }\r\n\r\n    locked_data.source_file(_Address, _Str, 0, nullptr, _Fill);\r\n}\r\n\r\n[[nodiscard]] unsigned int __stdcall __std_stacktrace_source_line(const void* const _Address) noexcept {\r\n    dbg_eng_data locked_data;\r\n\r\n    if (!locked_data.try_initialize()) {\r\n        return 0;\r\n    }\r\n\r\n    return locked_data.source_line(_Address);\r\n}\r\n\r\nvoid __stdcall __std_stacktrace_address_to_string(\r\n    const void* const _Address, void* const _Str, const _Stacktrace_string_fill _Fill) noexcept(false) {\r\n    dbg_eng_data locked_data;\r\n\r\n    if (!locked_data.try_initialize()) {\r\n        return;\r\n    }\r\n\r\n    locked_data.address_to_string(_Address, _Str, 0, _Fill);\r\n}\r\n\r\nvoid __stdcall __std_stacktrace_to_string(const void* const* const _Addresses, const size_t _Size, void* const _Str,\r\n    const _Stacktrace_string_fill _Fill) noexcept(false) {\r\n    dbg_eng_data locked_data;\r\n\r\n    if (!locked_data.try_initialize()) {\r\n        return;\r\n    }\r\n\r\n    size_t off = 0;\r\n\r\n    for (size_t i = 0; i != _Size; ++i) {\r\n        if (off != 0) {\r\n            off = string_fill(_Fill, off + 1, _Str, [](char* s, size_t sz) {\r\n                s[sz - 1] = '\\n';\r\n                return sz;\r\n            });\r\n        }\r\n\r\n        constexpr size_t max_entry_num = sizeof(\"65536> \") - 1; // maximum possible entry number\r\n\r\n        off = string_fill(_Fill, off + max_entry_num, _Str, [off, i](char* s, size_t) {\r\n            const int ret = std::snprintf(s + off, max_entry_num + 1, \"%u> \", static_cast<unsigned int>(i));\r\n            if (ret <= 0) {\r\n                std::abort(); // formatting error\r\n            }\r\n            return off + ret;\r\n        });\r\n\r\n        off = locked_data.address_to_string(_Addresses[i], _Str, off, _Fill);\r\n    }\r\n}\r\n} // extern \"C\"\r\n"
  },
  {
    "path": "stl/src/stdhndlr.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// set_new_handler\r\n\r\n#include <mutex>\r\n#include <new.h>\r\n#include <new>\r\n\r\nnamespace {\r\n    _STD new_handler _New_handler;\r\n    constinit _STD mutex _New_handler_mutex;\r\n\r\n    int __cdecl _New_handler_interface(size_t) { // interface to existing Microsoft _callnewh mechanism\r\n        _New_handler();\r\n        return 1;\r\n    }\r\n} // unnamed namespace\r\n\r\n_STD_BEGIN\r\n\r\n_CRTIMP2 new_handler __cdecl set_new_handler(_In_opt_ new_handler pnew) noexcept { // remove current handler\r\n    lock_guard _Lock{_New_handler_mutex};\r\n    new_handler pold = _New_handler;\r\n    _New_handler     = pnew;\r\n    _set_new_handler(pnew ? _New_handler_interface : nullptr);\r\n    return pold;\r\n}\r\n\r\n_CRTIMP2 new_handler __cdecl get_new_handler() noexcept { // get current new handler\r\n    lock_guard _Lock{_New_handler_mutex};\r\n    return _New_handler;\r\n}\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/stdthrow.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <yvals.h>\r\n\r\n_STD_BEGIN\r\n// TRANSITION, ABI: _Debug_message() overloads are preserved for binary compatibility\r\n\r\n#ifdef _DEBUG\r\n_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Debug_message(\r\n    const wchar_t* message, const wchar_t* file, unsigned int line) { // report error and die\r\n    if (::_CrtDbgReportW(_CRT_ASSERT, file, line, nullptr, L\"%ls\", message) == 1) {\r\n        ::_CrtDbgBreak();\r\n    }\r\n}\r\n\r\n_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Debug_message(\r\n    const unsigned short* message, const unsigned short* file, unsigned int line) { // report error and die\r\n    _Debug_message(reinterpret_cast<const wchar_t*>(message), reinterpret_cast<const wchar_t*>(file), line);\r\n}\r\n#endif // ^^^ defined(_DEBUG) ^^^\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/syncstream.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// initialize syncstream mutex map\r\n\r\n#include <__msvc_tzdb.hpp>\r\n#include <functional>\r\n#include <map>\r\n#include <mutex>\r\n#include <new>\r\n#include <shared_mutex>\r\n#include <utility>\r\n\r\n#include \"init_locks.hpp\"\r\n\r\n#pragma warning(disable : 4074)\r\n#pragma init_seg(compiler)\r\nstatic std::_Init_locks initlocks;\r\n\r\nnamespace {\r\n    struct _Mutex_count_pair {\r\n        _STD shared_mutex _Mutex;\r\n        size_t _Ref_count = 0;\r\n    };\r\n\r\n    using _Map_alloc = _STD _Crt_allocator<_STD pair<void* const, _Mutex_count_pair>>;\r\n    using _Map_type  = _STD map<void*, _Mutex_count_pair, _STD less<void*>, _Map_alloc>;\r\n\r\n    _Map_type _Lookup_map;\r\n    _STD shared_mutex _Lookup_mutex;\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n// TRANSITION, ABI: This returns a pointer to a C++ type.\r\n// A flat C interface would return an opaque handle and would provide separate functions for locking and unlocking.\r\n[[nodiscard]] _STD shared_mutex* __stdcall __std_acquire_shared_mutex_for_instance(void* _Ptr) noexcept {\r\n    try {\r\n        _STD scoped_lock _Guard(_Lookup_mutex);\r\n        auto& [_Mutex, _Refs] = _Lookup_map.try_emplace(_Ptr).first->second;\r\n        ++_Refs;\r\n        return &_Mutex;\r\n    } catch (...) {\r\n        return nullptr;\r\n    }\r\n}\r\n\r\nvoid __stdcall __std_release_shared_mutex_for_instance(void* _Ptr) noexcept {\r\n    _STD scoped_lock _Guard(_Lookup_mutex);\r\n    const auto _Instance_mutex_iter = _Lookup_map.find(_Ptr);\r\n    _ASSERT_EXPR(_Instance_mutex_iter != _Lookup_map.end(), \"No mutex exists for given instance!\");\r\n    auto& _Refs = _Instance_mutex_iter->second._Ref_count;\r\n    if (--_Refs == 0) {\r\n        _Lookup_map.erase(_Instance_mutex_iter);\r\n    }\r\n}\r\n\r\n} // extern \"C\"\r\n"
  },
  {
    "path": "stl/src/syserror.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// system_error message mapping\r\n\r\n#define _SILENCE_CXX23_UNIX_STREAMS_DEPRECATION_WARNING\r\n\r\n#include <algorithm>\r\n#include <functional>\r\n#include <system_error>\r\n\r\n#include <Windows.h>\r\n\r\n// TRANSITION, MSBuild\r\n// MSBuild has a hard requirement against including the same file in both a DLL and its import lib, so we include\r\n// the import lib .cpp here to make those functions available for internal use by other parts of our DLL.\r\n#ifdef _DLL\r\n#include \"syserror_import_lib.cpp\"\r\n#endif\r\n\r\nnamespace {\r\n    using _STD errc;\r\n\r\n    struct _Win_errtab_t { // maps Windows error to Posix error\r\n        int _Windows;\r\n        errc _Posix;\r\n    };\r\n\r\n    constexpr _Win_errtab_t _Win_errtab[] = {\r\n        // table of Windows/Posix pairs\r\n        {ERROR_INVALID_FUNCTION, errc::function_not_supported},\r\n        {ERROR_FILE_NOT_FOUND, errc::no_such_file_or_directory},\r\n        {ERROR_PATH_NOT_FOUND, errc::no_such_file_or_directory},\r\n        {ERROR_TOO_MANY_OPEN_FILES, errc::too_many_files_open},\r\n        {ERROR_ACCESS_DENIED, errc::permission_denied},\r\n        {ERROR_INVALID_HANDLE, errc::invalid_argument},\r\n        {ERROR_NOT_ENOUGH_MEMORY, errc::not_enough_memory},\r\n        {ERROR_INVALID_ACCESS, errc::permission_denied},\r\n        {ERROR_OUTOFMEMORY, errc::not_enough_memory},\r\n        {ERROR_INVALID_DRIVE, errc::no_such_device},\r\n        {ERROR_CURRENT_DIRECTORY, errc::permission_denied},\r\n        {ERROR_NOT_SAME_DEVICE, errc::cross_device_link},\r\n        {ERROR_WRITE_PROTECT, errc::permission_denied},\r\n        {ERROR_BAD_UNIT, errc::no_such_device},\r\n        {ERROR_NOT_READY, errc::resource_unavailable_try_again},\r\n        {ERROR_SEEK, errc::io_error},\r\n        {ERROR_WRITE_FAULT, errc::io_error},\r\n        {ERROR_READ_FAULT, errc::io_error},\r\n        {ERROR_SHARING_VIOLATION, errc::permission_denied},\r\n        {ERROR_LOCK_VIOLATION, errc::no_lock_available},\r\n        {ERROR_HANDLE_DISK_FULL, errc::no_space_on_device},\r\n        {ERROR_NOT_SUPPORTED, errc::not_supported},\r\n        {ERROR_BAD_NETPATH, errc::no_such_file_or_directory},\r\n        {ERROR_DEV_NOT_EXIST, errc::no_such_device},\r\n        {ERROR_BAD_NET_NAME, errc::no_such_file_or_directory},\r\n        {ERROR_FILE_EXISTS, errc::file_exists},\r\n        {ERROR_CANNOT_MAKE, errc::permission_denied},\r\n        {ERROR_INVALID_PARAMETER, errc::invalid_argument},\r\n        {ERROR_BROKEN_PIPE, errc::broken_pipe},\r\n        {ERROR_OPEN_FAILED, errc::io_error},\r\n        {ERROR_BUFFER_OVERFLOW, errc::filename_too_long},\r\n        {ERROR_DISK_FULL, errc::no_space_on_device},\r\n        {ERROR_SEM_TIMEOUT, errc::timed_out},\r\n        {ERROR_INVALID_NAME, errc::no_such_file_or_directory},\r\n        {ERROR_NEGATIVE_SEEK, errc::invalid_argument},\r\n        {ERROR_BUSY_DRIVE, errc::device_or_resource_busy},\r\n        {ERROR_DIR_NOT_EMPTY, errc::directory_not_empty},\r\n        {ERROR_BUSY, errc::device_or_resource_busy},\r\n        {ERROR_ALREADY_EXISTS, errc::file_exists},\r\n        {ERROR_FILENAME_EXCED_RANGE, errc::filename_too_long},\r\n        {ERROR_LOCKED, errc::no_lock_available},\r\n        {WAIT_TIMEOUT, errc::timed_out},\r\n        {ERROR_DIRECTORY, errc::invalid_argument},\r\n        {ERROR_OPERATION_ABORTED, errc::operation_canceled},\r\n        {ERROR_NOACCESS, errc::permission_denied},\r\n        {ERROR_CANTOPEN, errc::io_error},\r\n        {ERROR_CANTREAD, errc::io_error},\r\n        {ERROR_CANTWRITE, errc::io_error},\r\n        {ERROR_RETRY, errc::resource_unavailable_try_again},\r\n        {ERROR_TIMEOUT, errc::timed_out},\r\n        {ERROR_OPEN_FILES, errc::device_or_resource_busy},\r\n        {ERROR_DEVICE_IN_USE, errc::device_or_resource_busy},\r\n        {ERROR_REPARSE_TAG_INVALID, errc::invalid_argument},\r\n        {WSAEINTR, errc::interrupted},\r\n        {WSAEBADF, errc::bad_file_descriptor},\r\n        {WSAEACCES, errc::permission_denied},\r\n        {WSAEFAULT, errc::bad_address},\r\n        {WSAEINVAL, errc::invalid_argument},\r\n        {WSAEMFILE, errc::too_many_files_open},\r\n        {WSAEWOULDBLOCK, errc::operation_would_block},\r\n        {WSAEINPROGRESS, errc::operation_in_progress},\r\n        {WSAEALREADY, errc::connection_already_in_progress},\r\n        {WSAENOTSOCK, errc::not_a_socket},\r\n        {WSAEDESTADDRREQ, errc::destination_address_required},\r\n        {WSAEMSGSIZE, errc::message_size},\r\n        {WSAEPROTOTYPE, errc::wrong_protocol_type},\r\n        {WSAENOPROTOOPT, errc::no_protocol_option},\r\n        {WSAEPROTONOSUPPORT, errc::protocol_not_supported},\r\n        {WSAEOPNOTSUPP, errc::operation_not_supported},\r\n        {WSAEAFNOSUPPORT, errc::address_family_not_supported},\r\n        {WSAEADDRINUSE, errc::address_in_use},\r\n        {WSAEADDRNOTAVAIL, errc::address_not_available},\r\n        {WSAENETDOWN, errc::network_down},\r\n        {WSAENETUNREACH, errc::network_unreachable},\r\n        {WSAENETRESET, errc::network_reset},\r\n        {WSAECONNABORTED, errc::connection_aborted},\r\n        {WSAECONNRESET, errc::connection_reset},\r\n        {WSAENOBUFS, errc::no_buffer_space},\r\n        {WSAEISCONN, errc::already_connected},\r\n        {WSAENOTCONN, errc::not_connected},\r\n        {WSAETIMEDOUT, errc::timed_out},\r\n        {WSAECONNREFUSED, errc::connection_refused},\r\n        {WSAENAMETOOLONG, errc::filename_too_long},\r\n        {WSAEHOSTUNREACH, errc::host_unreachable},\r\n    };\r\n\r\n#ifndef _M_CEE_PURE\r\n    static_assert(\r\n        _RANGES adjacent_find(_Win_errtab, _RANGES greater_equal{}, &_Win_errtab_t::_Windows) == _STD end(_Win_errtab),\r\n        \"The Windows error codes in _Win_errtab should be numerically sorted and unique.\");\r\n#endif // !defined(_M_CEE_PURE)\r\n\r\n    struct _Sys_errtab_t { // maps error_code to NTBS\r\n        errc _Errcode;\r\n        const char* _Name;\r\n    };\r\n\r\n    constexpr _Sys_errtab_t _Sys_errtab[] = {\r\n        // table of Posix code/name pairs\r\n        {static_cast<errc>(0), \"success\"},\r\n        {errc::address_family_not_supported, \"address family not supported\"},\r\n        {errc::address_in_use, \"address in use\"},\r\n        {errc::address_not_available, \"address not available\"},\r\n        {errc::already_connected, \"already connected\"},\r\n        {errc::argument_list_too_long, \"argument list too long\"},\r\n        {errc::argument_out_of_domain, \"argument out of domain\"},\r\n        {errc::bad_address, \"bad address\"},\r\n        {errc::bad_file_descriptor, \"bad file descriptor\"},\r\n        {errc::bad_message, \"bad message\"},\r\n        {errc::broken_pipe, \"broken pipe\"},\r\n        {errc::connection_aborted, \"connection aborted\"},\r\n        {errc::connection_already_in_progress, \"connection already in progress\"},\r\n        {errc::connection_refused, \"connection refused\"},\r\n        {errc::connection_reset, \"connection reset\"},\r\n        {errc::cross_device_link, \"cross device link\"},\r\n        {errc::destination_address_required, \"destination address required\"},\r\n        {errc::device_or_resource_busy, \"device or resource busy\"},\r\n        {errc::directory_not_empty, \"directory not empty\"},\r\n        {errc::executable_format_error, \"executable format error\"},\r\n        {errc::file_exists, \"file exists\"},\r\n        {errc::file_too_large, \"file too large\"},\r\n        {errc::filename_too_long, \"filename too long\"},\r\n        {errc::function_not_supported, \"function not supported\"},\r\n        {errc::host_unreachable, \"host unreachable\"},\r\n        {errc::identifier_removed, \"identifier removed\"},\r\n        {errc::illegal_byte_sequence, \"illegal byte sequence\"},\r\n        {errc::inappropriate_io_control_operation, \"inappropriate io control operation\"},\r\n        {errc::interrupted, \"interrupted\"},\r\n        {errc::invalid_argument, \"invalid argument\"},\r\n        {errc::invalid_seek, \"invalid seek\"},\r\n        {errc::io_error, \"io error\"},\r\n        {errc::is_a_directory, \"is a directory\"},\r\n        {errc::message_size, \"message size\"},\r\n        {errc::network_down, \"network down\"},\r\n        {errc::network_reset, \"network reset\"},\r\n        {errc::network_unreachable, \"network unreachable\"},\r\n        {errc::no_buffer_space, \"no buffer space\"},\r\n        {errc::no_child_process, \"no child process\"},\r\n        {errc::no_link, \"no link\"},\r\n        {errc::no_lock_available, \"no lock available\"},\r\n        {errc::no_message_available, \"no message available\"},\r\n        {errc::no_message, \"no message\"},\r\n        {errc::no_protocol_option, \"no protocol option\"},\r\n        {errc::no_space_on_device, \"no space on device\"},\r\n        {errc::no_stream_resources, \"no stream resources\"},\r\n        {errc::no_such_device_or_address, \"no such device or address\"},\r\n        {errc::no_such_device, \"no such device\"},\r\n        {errc::no_such_file_or_directory, \"no such file or directory\"},\r\n        {errc::no_such_process, \"no such process\"},\r\n        {errc::not_a_directory, \"not a directory\"},\r\n        {errc::not_a_socket, \"not a socket\"},\r\n        {errc::not_a_stream, \"not a stream\"},\r\n        {errc::not_connected, \"not connected\"},\r\n        {errc::not_enough_memory, \"not enough memory\"},\r\n        {errc::not_supported, \"not supported\"},\r\n        {errc::operation_canceled, \"operation canceled\"},\r\n        {errc::operation_in_progress, \"operation in progress\"},\r\n        {errc::operation_not_permitted, \"operation not permitted\"},\r\n        {errc::operation_not_supported, \"operation not supported\"},\r\n        {errc::operation_would_block, \"operation would block\"},\r\n        {errc::owner_dead, \"owner dead\"},\r\n        {errc::permission_denied, \"permission denied\"},\r\n        {errc::protocol_error, \"protocol error\"},\r\n        {errc::protocol_not_supported, \"protocol not supported\"},\r\n        {errc::read_only_file_system, \"read only file system\"},\r\n        {errc::resource_deadlock_would_occur, \"resource deadlock would occur\"},\r\n        {errc::resource_unavailable_try_again, \"resource unavailable try again\"},\r\n        {errc::result_out_of_range, \"result out of range\"},\r\n        {errc::state_not_recoverable, \"state not recoverable\"},\r\n        {errc::stream_timeout, \"stream timeout\"},\r\n        {errc::text_file_busy, \"text file busy\"},\r\n        {errc::timed_out, \"timed out\"},\r\n        {errc::too_many_files_open_in_system, \"too many files open in system\"},\r\n        {errc::too_many_files_open, \"too many files open\"},\r\n        {errc::too_many_links, \"too many links\"},\r\n        {errc::too_many_symbolic_link_levels, \"too many symbolic link levels\"},\r\n        {errc::value_too_large, \"value too large\"},\r\n        {errc::wrong_protocol_type, \"wrong protocol type\"},\r\n    };\r\n} // unnamed namespace\r\n\r\n_STD_BEGIN\r\n\r\n_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Winerror_map(int _Errcode) {\r\n    // convert Windows error to Posix error if possible, otherwise 0\r\n    for (const auto& _Entry : _Win_errtab) {\r\n        if (_Entry._Windows == _Errcode) {\r\n            return static_cast<int>(_Entry._Posix);\r\n        }\r\n    }\r\n\r\n    return 0;\r\n}\r\n\r\n// TRANSITION, ABI: _Winerror_message() is preserved for binary compatibility\r\n_CRTIMP2_PURE unsigned long __CLRCALL_PURE_OR_CDECL _Winerror_message(\r\n    unsigned long _Message_id, char* _Narrow, unsigned long _Size) {\r\n    // convert to name of Windows error, return 0 for failure, otherwise return number of chars written\r\n    // pre: _Size < INT_MAX\r\n    const unsigned long _Chars = FormatMessageA(\r\n        FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, _Message_id, 0, _Narrow, _Size, nullptr);\r\n\r\n    return static_cast<unsigned long>(_CSTD __std_get_string_size_without_trailing_whitespace(_Narrow, _Chars));\r\n}\r\n\r\n_CRTIMP2_PURE const char* __CLRCALL_PURE_OR_CDECL _Syserror_map(int _Errcode) { // convert to name of generic error\r\n    for (const auto& _Entry : _Sys_errtab) {\r\n        if (static_cast<int>(_Entry._Errcode) == _Errcode) {\r\n            return _Entry._Name;\r\n        }\r\n    }\r\n\r\n    return \"unknown error\";\r\n}\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/syserror_import_lib.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <__msvc_system_error_abi.hpp>\r\n\r\n#include <Windows.h>\r\n\r\nnamespace {\r\n    struct _Whitespace_bitmap_t {\r\n        bool _Is_whitespace[256];\r\n\r\n        constexpr _Whitespace_bitmap_t() noexcept : _Is_whitespace{} {\r\n            _Is_whitespace[' ']  = true;\r\n            _Is_whitespace['\\n'] = true;\r\n            _Is_whitespace['\\r'] = true;\r\n            _Is_whitespace['\\t'] = true;\r\n            _Is_whitespace['\\0'] = true;\r\n        }\r\n\r\n        [[nodiscard]] constexpr bool _Test(const char _Ch) const noexcept {\r\n            return _Is_whitespace[static_cast<unsigned char>(_Ch)];\r\n        }\r\n    };\r\n\r\n    constexpr _Whitespace_bitmap_t _Whitespace_bitmap;\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n[[nodiscard]] size_t __CLRCALL_PURE_OR_STDCALL __std_get_string_size_without_trailing_whitespace(\r\n    const char* const _Str, size_t _Size) noexcept {\r\n    while (_Size != 0 && _Whitespace_bitmap._Test(_Str[_Size - 1])) {\r\n        --_Size;\r\n    }\r\n\r\n    return _Size;\r\n}\r\n\r\n[[nodiscard]] size_t __CLRCALL_PURE_OR_STDCALL __std_system_error_allocate_message(\r\n    const unsigned long _Message_id, char** const _Ptr_str) noexcept {\r\n    // convert to name of Windows error, return 0 for failure, otherwise return number of chars in buffer\r\n    // __std_system_error_deallocate_message should be called even if 0 is returned\r\n    // pre: *_Ptr_str == nullptr\r\n\r\n    // We start by requesting US English for system_category() messages. (See GH-2451 and GH-3254 for the history.)\r\n    // This is consistent with generic_category(), which uses a table of US English strings in the STL.\r\n    // In general, system_error messages aren't directly useful to end-users - they're meant for programmer-users.\r\n    // Of course, the programmer-user might not speak US English, but machine translation of the message\r\n    // (and the numeric value of the error code) should help them understand the error.\r\n\r\n    constexpr auto _Flags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS;\r\n\r\n    DWORD _Lang_id = 0;\r\n    DWORD _Chars   = 0;\r\n\r\n    for (int _Attempt = 0; _Attempt < 3 && _Chars == 0; ++_Attempt) {\r\n        if (_Attempt == 0) {\r\n            _Lang_id = 0x0409; // 1033 decimal, \"en-US\" locale\r\n        } else if (_Attempt == 1) {\r\n            const int _Ret = GetLocaleInfoEx(LOCALE_NAME_SYSTEM_DEFAULT, LOCALE_ILANGUAGE | LOCALE_RETURN_NUMBER,\r\n                reinterpret_cast<LPWSTR>(&_Lang_id), sizeof(_Lang_id) / sizeof(wchar_t));\r\n            if (_Ret == 0) {\r\n                continue; // If we can't get the system locale's language ID, skip this attempt\r\n            }\r\n        } else {\r\n            _Lang_id = 0;\r\n        }\r\n\r\n        _Chars = FormatMessageA(_Flags, nullptr, _Message_id, _Lang_id, reinterpret_cast<char*>(_Ptr_str), 0, nullptr);\r\n    }\r\n\r\n    return _CSTD __std_get_string_size_without_trailing_whitespace(*_Ptr_str, _Chars);\r\n}\r\n\r\nvoid __CLRCALL_PURE_OR_STDCALL __std_system_error_deallocate_message(char* const _Str) noexcept {\r\n    LocalFree(_Str);\r\n}\r\n} // extern \"C\"\r\n"
  },
  {
    "path": "stl/src/taskscheduler.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <condition_variable>\r\n#include <cstddef> // for size_t\r\n#include <mutex>\r\n#include <ppltaskscheduler.h>\r\n\r\n#include <Windows.h>\r\n\r\n#include \"init_locks.hpp\"\r\n\r\n#pragma warning(disable : 4074)\r\n#pragma init_seg(compiler)\r\n\r\nstatic std::_Init_locks initlocks;\r\n\r\nextern \"C\" IMAGE_DOS_HEADER __ImageBase;\r\n\r\nnamespace Concurrency {\r\n    namespace details {\r\n        namespace {\r\n            // When the CRT and STL are statically linked into an EXE, their uninitialization will take place\r\n            // inside of the call to exit(), before ExitProcess() is called.  This means that their\r\n            // uninitialization occurs before other threads in the process are terminated.  We block the exit\r\n            // from proceeding until all outstanding tasks have completed, to ensure that they do not run after\r\n            // we destroy the STL's internal locks.\r\n\r\n            // When the CRT and STL are hosted in DLLs (either in their own DLLs or statically linked into a\r\n            // user DLL), they are uninitialized when the DLL is notified for DLL_PROCESS_DETACH before it is\r\n            // unloaded.  Termination unload occurs after all other threads in the process have been terminated,\r\n            // so there is no risk of other threads touching internal STL state.  We prevent non-termination\r\n            // unload from occurring while there are outstanding tasks, by having each task own a reference to\r\n            // the DLL in which the callback is located.\r\n\r\n            HMODULE _Call_get_module_handle_ex(DWORD _Flags, LPCWSTR _Addr) {\r\n#if defined(_CRT_APP)\r\n                // We can't call GetModuleHandleExW from an app context, so treat\r\n                // that as a failure to call.\r\n                (void) _Flags;\r\n                (void) _Addr;\r\n                return nullptr;\r\n#else // ^^^ defined(_CRT_APP) / !defined(_CRT_APP) vvv\r\n                HMODULE _Result;\r\n                if (!GetModuleHandleExW(_Flags, _Addr, &_Result)) {\r\n                    return nullptr;\r\n                }\r\n\r\n                return _Result;\r\n#endif // defined(_CRT_APP)\r\n            }\r\n\r\n            enum class _STL_host_status { _Exe, _Dll, _Unknown };\r\n\r\n            _STL_host_status _Get_STL_host_status() {\r\n#ifdef CRTDLL2\r\n                return _STL_host_status::_Dll;\r\n#else // ^^^ defined(CRTDLL2) / !defined(CRTDLL2) vvv\r\n                HANDLE _HExe = _Call_get_module_handle_ex(GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, nullptr);\r\n                if (_HExe == nullptr) {\r\n                    return _STL_host_status::_Unknown;\r\n                } else if (_HExe == reinterpret_cast<HMODULE>(&__ImageBase)) {\r\n                    return _STL_host_status::_Exe;\r\n                } else {\r\n                    return _STL_host_status::_Dll;\r\n                }\r\n#endif // ^^^ !defined(CRTDLL2) ^^^\r\n            }\r\n\r\n#ifdef CRTDLL2\r\n            // If the STL is a DLL, no reference counting is necessary, because the CRT shutdown is\r\n            // always through DLL_PROCESS_DETACH, so keeping the owning reference to the callback\r\n            // code is sufficient.\r\n            void _Increment_outstanding() {}\r\n            void _Decrement_outstanding() {}\r\n#else // ^^^ defined(CRTDLL2) / !defined(CRTDLL2) vvv\r\n            size_t _Outstanding_tasks = 0;\r\n            _STD mutex _Task_cv_mutex;\r\n            _STD condition_variable _Task_cv;\r\n\r\n            void _Increment_outstanding() { // block shutdown\r\n                if (_Get_STL_host_status() == _STL_host_status::_Dll) {\r\n                    return;\r\n                }\r\n\r\n                _STD lock_guard<_STD mutex> _Lg(_Task_cv_mutex);\r\n                ++_Outstanding_tasks;\r\n            }\r\n\r\n            void _Decrement_outstanding() { // release shutdown\r\n                if (_Get_STL_host_status() == _STL_host_status::_Dll) {\r\n                    return;\r\n                }\r\n\r\n                size_t _Dec_outstanding;\r\n                {\r\n                    _STD lock_guard<_STD mutex> _Lg(_Task_cv_mutex);\r\n                    _Dec_outstanding = --_Outstanding_tasks;\r\n                }\r\n\r\n                if (_Dec_outstanding == 0) {\r\n                    _Task_cv.notify_all();\r\n                }\r\n            }\r\n\r\n            struct _Task_scheduler_main_block {\r\n                _Task_scheduler_main_block()                                             = default;\r\n                _Task_scheduler_main_block(const _Task_scheduler_main_block&)            = delete;\r\n                _Task_scheduler_main_block& operator=(const _Task_scheduler_main_block&) = delete;\r\n                ~_Task_scheduler_main_block() noexcept { // block shutdown of the CRT until std::async shutdown has\r\n                                                         // completed\r\n                    _STD unique_lock<_STD mutex> _Lck(_Task_cv_mutex);\r\n                    _Task_cv.wait(_Lck, [] { return _Outstanding_tasks == 0; });\r\n                }\r\n            };\r\n            _Task_scheduler_main_block _Task_scheduler_main_block_instance;\r\n#endif // ^^^ !defined(CRTDLL2) ^^^\r\n\r\n            void CALLBACK _Task_scheduler_callback(PTP_CALLBACK_INSTANCE _Pci, PVOID _Args, PTP_WORK) noexcept {\r\n                _Increment_outstanding();\r\n                const auto _Chore = static_cast<_Threadpool_chore*>(_Args);\r\n                if (_Get_STL_host_status() != _STL_host_status::_Exe) { // ensure user code held alive by\r\n                                                                        // _Reschedule_chore is freed when we're done\r\n                    const HMODULE _Callback_dll = _Call_get_module_handle_ex(\r\n                        GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,\r\n                        reinterpret_cast<LPCWSTR>(_Chore->_M_callback));\r\n\r\n                    if (_Callback_dll != nullptr) {\r\n                        FreeLibraryWhenCallbackReturns(_Pci, _Callback_dll);\r\n                    }\r\n                }\r\n\r\n                _Chore->_M_callback(_Chore->_M_data);\r\n                _Decrement_outstanding();\r\n            }\r\n        } // unnamed namespace\r\n\r\n        _CRTIMP2 void __cdecl _Release_chore(_Threadpool_chore* _Chore) {\r\n            if (_Chore->_M_work != nullptr) {\r\n                CloseThreadpoolWork(static_cast<PTP_WORK>(_Chore->_M_work));\r\n                _Chore->_M_work = nullptr;\r\n            }\r\n        }\r\n\r\n        _CRTIMP2 int __cdecl _Reschedule_chore(const _Threadpool_chore* _Chore) {\r\n            _ASSERT(_Chore->_M_work);\r\n\r\n            // Adds a reference to the DLL with the code to execute on async; the callback will\r\n            // FreeLibraryWhenCallbackReturns this DLL once it starts running.\r\n            if (_Get_STL_host_status() != _STL_host_status::_Exe) {\r\n                (void) _Call_get_module_handle_ex(\r\n                    GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, reinterpret_cast<LPCWSTR>(_Chore->_M_callback));\r\n            }\r\n\r\n            SubmitThreadpoolWork(static_cast<PTP_WORK>(_Chore->_M_work));\r\n            return 0;\r\n        }\r\n\r\n        _CRTIMP2 int __cdecl _Schedule_chore(_Threadpool_chore* _Chore) {\r\n            _ASSERT(_Chore->_M_work == nullptr);\r\n            _ASSERT(_Chore->_M_callback != nullptr);\r\n\r\n            _Chore->_M_work = CreateThreadpoolWork(_Task_scheduler_callback, _Chore, nullptr);\r\n\r\n            if (_Chore->_M_work) {\r\n                return _Reschedule_chore(_Chore);\r\n            } else {\r\n                return static_cast<int>(GetLastError()); // LastError won't be 0 when it's in error state\r\n            }\r\n        }\r\n    } // namespace details\r\n} // namespace Concurrency\r\n"
  },
  {
    "path": "stl/src/thread0.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstdlib>\r\n#include <system_error>\r\n#include <xthreads.h>\r\n\r\n_STD_BEGIN\r\n\r\nstatic constexpr const char* msgs[] = {\r\n    // error messages\r\n    \"device or resource busy\",\r\n    \"invalid argument\",\r\n    \"no such process\",\r\n    \"not enough memory\",\r\n    \"operation not permitted\",\r\n    \"resource deadlock would occur\",\r\n    \"resource unavailable try again\",\r\n};\r\n\r\nstatic constexpr errc codes[] = {\r\n    // system_error codes\r\n    errc::device_or_resource_busy,\r\n    errc::invalid_argument,\r\n    errc::no_such_process,\r\n    errc::not_enough_memory,\r\n    errc::operation_not_permitted,\r\n    errc::resource_deadlock_would_occur,\r\n    errc::resource_unavailable_try_again,\r\n};\r\n\r\n[[noreturn]] _CRTIMP2_PURE void __cdecl _Throw_Cpp_error(int code) { // throw error object\r\n    _THROW(system_error(static_cast<int>(codes[code]), _STD generic_category(), msgs[code]));\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n[[noreturn]] _CRTIMP2_PURE void __cdecl _Throw_C_error(int code) { // throw error object for C error\r\n    switch (static_cast<_Thrd_result>(code)) { // select the exception\r\n    case _Thrd_result::_Nomem:\r\n    case _Thrd_result::_Timedout:\r\n        _Throw_Cpp_error(_RESOURCE_UNAVAILABLE_TRY_AGAIN);\r\n\r\n    case _Thrd_result::_Busy:\r\n        _Throw_Cpp_error(_DEVICE_OR_RESOURCE_BUSY);\r\n\r\n    case _Thrd_result::_Error:\r\n        _Throw_Cpp_error(_INVALID_ARGUMENT);\r\n\r\n    default:\r\n        _CSTD abort();\r\n    }\r\n}\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/tzdb.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <__msvc_tzdb.hpp>\r\n#include <atomic>\r\n#include <functional>\r\n#include <icu.h>\r\n#include <internal_shared.h>\r\n#include <memory>\r\n#include <string_view>\r\n#include <xfilesystem_abi.h>\r\n\r\n#include <Windows.h>\r\n\r\n#pragma comment(lib, \"Advapi32\")\r\n\r\nnamespace {\r\n    enum class _Icu_api_level : unsigned long {\r\n        _Not_set,\r\n        _Detecting,\r\n        _Has_failed,\r\n        _Has_icu_addresses,\r\n    };\r\n\r\n    struct _Icu_functions_table {\r\n        _STD atomic<decltype(&::ucal_close)> _Pfn_ucal_close{nullptr};\r\n        _STD atomic<decltype(&::ucal_get)> _Pfn_ucal_get{nullptr};\r\n        _STD atomic<decltype(&::ucal_getCanonicalTimeZoneID)> _Pfn_ucal_getCanonicalTimeZoneID{nullptr};\r\n        _STD atomic<decltype(&::ucal_getDefaultTimeZone)> _Pfn_ucal_getDefaultTimeZone{nullptr};\r\n        _STD atomic<decltype(&::ucal_getTimeZoneDisplayName)> _Pfn_ucal_getTimeZoneDisplayName{nullptr};\r\n        _STD atomic<decltype(&::ucal_getTimeZoneTransitionDate)> _Pfn_ucal_getTimeZoneTransitionDate{nullptr};\r\n        _STD atomic<decltype(&::ucal_getTZDataVersion)> _Pfn_ucal_getTZDataVersion{nullptr};\r\n        _STD atomic<decltype(&::ucal_open)> _Pfn_ucal_open{nullptr};\r\n        _STD atomic<decltype(&::ucal_openTimeZoneIDEnumeration)> _Pfn_ucal_openTimeZoneIDEnumeration{nullptr};\r\n        _STD atomic<decltype(&::ucal_setMillis)> _Pfn_ucal_setMillis{nullptr};\r\n        _STD atomic<decltype(&::uenum_close)> _Pfn_uenum_close{nullptr};\r\n        _STD atomic<decltype(&::uenum_count)> _Pfn_uenum_count{nullptr};\r\n        _STD atomic<decltype(&::uenum_unext)> _Pfn_uenum_unext{nullptr};\r\n        _STD atomic<_Icu_api_level> _Api_level{_Icu_api_level::_Not_set};\r\n    };\r\n\r\n    _Icu_functions_table _Icu_functions;\r\n\r\n    template <class _Ty>\r\n    void _Load_address(\r\n        const HMODULE _Module, _STD atomic<_Ty>& _Stored_Pfn, LPCSTR _Fn_name, DWORD& _Last_error) noexcept {\r\n        const auto _Pfn = reinterpret_cast<_Ty>(GetProcAddress(_Module, _Fn_name));\r\n        if (_Pfn != nullptr) {\r\n            _Stored_Pfn.store(_Pfn, _STD memory_order_relaxed);\r\n        } else {\r\n            _Last_error = GetLastError();\r\n        }\r\n    }\r\n\r\n    [[nodiscard]] _Icu_api_level _Init_icu_functions(_Icu_api_level _Level) noexcept {\r\n        while (!_Icu_functions._Api_level.compare_exchange_weak(\r\n            _Level, _Icu_api_level::_Detecting, _STD memory_order_acq_rel)) {\r\n            if (_Level > _Icu_api_level::_Detecting) {\r\n                return _Level;\r\n            }\r\n        }\r\n\r\n        _Level = _Icu_api_level::_Has_failed;\r\n\r\n        const HMODULE _Icu_module = LoadLibraryExW(L\"icu.dll\", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32);\r\n        if (_Icu_module != nullptr) {\r\n            // collect at least one error if any GetProcAddress call fails\r\n            DWORD _Last_error{ERROR_SUCCESS};\r\n            _Load_address(_Icu_module, _Icu_functions._Pfn_ucal_close, \"ucal_close\", _Last_error);\r\n            _Load_address(_Icu_module, _Icu_functions._Pfn_ucal_get, \"ucal_get\", _Last_error);\r\n            _Load_address(_Icu_module, _Icu_functions._Pfn_ucal_getCanonicalTimeZoneID, \"ucal_getCanonicalTimeZoneID\",\r\n                _Last_error);\r\n            _Load_address(\r\n                _Icu_module, _Icu_functions._Pfn_ucal_getDefaultTimeZone, \"ucal_getDefaultTimeZone\", _Last_error);\r\n            _Load_address(_Icu_module, _Icu_functions._Pfn_ucal_getTimeZoneDisplayName, \"ucal_getTimeZoneDisplayName\",\r\n                _Last_error);\r\n            _Load_address(_Icu_module, _Icu_functions._Pfn_ucal_getTimeZoneTransitionDate,\r\n                \"ucal_getTimeZoneTransitionDate\", _Last_error);\r\n            _Load_address(_Icu_module, _Icu_functions._Pfn_ucal_getTZDataVersion, \"ucal_getTZDataVersion\", _Last_error);\r\n            _Load_address(_Icu_module, _Icu_functions._Pfn_ucal_open, \"ucal_open\", _Last_error);\r\n            _Load_address(_Icu_module, _Icu_functions._Pfn_ucal_openTimeZoneIDEnumeration,\r\n                \"ucal_openTimeZoneIDEnumeration\", _Last_error);\r\n            _Load_address(_Icu_module, _Icu_functions._Pfn_ucal_setMillis, \"ucal_setMillis\", _Last_error);\r\n            _Load_address(_Icu_module, _Icu_functions._Pfn_uenum_close, \"uenum_close\", _Last_error);\r\n            _Load_address(_Icu_module, _Icu_functions._Pfn_uenum_count, \"uenum_count\", _Last_error);\r\n            _Load_address(_Icu_module, _Icu_functions._Pfn_uenum_unext, \"uenum_unext\", _Last_error);\r\n            if (_Last_error == ERROR_SUCCESS) {\r\n                _Level = _Icu_api_level::_Has_icu_addresses;\r\n            } else {\r\n                // reset last error code for thread in case a later GetProcAddress resets it\r\n                SetLastError(_Last_error);\r\n            }\r\n        }\r\n\r\n        _Icu_functions._Api_level.store(_Level, _STD memory_order_release);\r\n        return _Level;\r\n    }\r\n\r\n    [[nodiscard]] _Icu_api_level _Acquire_icu_functions() noexcept {\r\n        auto _Level = _Icu_functions._Api_level.load(_STD memory_order_acquire);\r\n        if (_Level <= _Icu_api_level::_Detecting) {\r\n            _Level = _Init_icu_functions(_Level);\r\n        }\r\n\r\n        return _Level;\r\n    }\r\n\r\n    void __icu_ucal_close(UCalendar* cal) noexcept {\r\n        const auto _Fun = _Icu_functions._Pfn_ucal_close.load(_STD memory_order_relaxed);\r\n        _Fun(cal);\r\n    }\r\n\r\n    [[nodiscard]] int32_t __icu_ucal_get(const UCalendar* cal, UCalendarDateFields field, UErrorCode* status) noexcept {\r\n        const auto _Fun = _Icu_functions._Pfn_ucal_get.load(_STD memory_order_relaxed);\r\n        return _Fun(cal, field, status);\r\n    }\r\n\r\n    [[nodiscard]] int32_t __icu_ucal_getCanonicalTimeZoneID(const UChar* id, int32_t len, UChar* result,\r\n        int32_t resultCapacity, UBool* isSystemID, UErrorCode* status) noexcept {\r\n        const auto _Fun = _Icu_functions._Pfn_ucal_getCanonicalTimeZoneID.load(_STD memory_order_relaxed);\r\n        return _Fun(id, len, result, resultCapacity, isSystemID, status);\r\n    }\r\n\r\n    [[nodiscard]] int32_t __icu_ucal_getDefaultTimeZone(\r\n        UChar* result, int32_t resultCapacity, UErrorCode* ec) noexcept {\r\n        const auto _Fun = _Icu_functions._Pfn_ucal_getDefaultTimeZone.load(_STD memory_order_relaxed);\r\n        return _Fun(result, resultCapacity, ec);\r\n    }\r\n\r\n    [[nodiscard]] int32_t __icu_ucal_getTimeZoneDisplayName(const UCalendar* cal, UCalendarDisplayNameType type,\r\n        const char* locale, UChar* result, int32_t resultLength, UErrorCode* status) noexcept {\r\n        const auto _Fun = _Icu_functions._Pfn_ucal_getTimeZoneDisplayName.load(_STD memory_order_relaxed);\r\n        return _Fun(cal, type, locale, result, resultLength, status);\r\n    }\r\n\r\n    [[nodiscard]] UBool __icu_ucal_getTimeZoneTransitionDate(\r\n        const UCalendar* cal, UTimeZoneTransitionType type, UDate* transition, UErrorCode* status) noexcept {\r\n        const auto _Fun = _Icu_functions._Pfn_ucal_getTimeZoneTransitionDate.load(_STD memory_order_relaxed);\r\n        return _Fun(cal, type, transition, status);\r\n    }\r\n\r\n    [[nodiscard]] const char* __icu_ucal_getTZDataVersion(UErrorCode* status) noexcept {\r\n        const auto _Fun = _Icu_functions._Pfn_ucal_getTZDataVersion.load(_STD memory_order_relaxed);\r\n        return _Fun(status);\r\n    }\r\n\r\n    [[nodiscard]] UCalendar* __icu_ucal_open(\r\n        const UChar* zoneID, int32_t len, const char* locale, UCalendarType type, UErrorCode* status) noexcept {\r\n        const auto _Fun = _Icu_functions._Pfn_ucal_open.load(_STD memory_order_relaxed);\r\n        return _Fun(zoneID, len, locale, type, status);\r\n    }\r\n\r\n    [[nodiscard]] UEnumeration* __icu_ucal_openTimeZoneIDEnumeration(\r\n        USystemTimeZoneType zoneType, const char* region, const int32_t* rawOffset, UErrorCode* ec) noexcept {\r\n        const auto _Fun = _Icu_functions._Pfn_ucal_openTimeZoneIDEnumeration.load(_STD memory_order_relaxed);\r\n        return _Fun(zoneType, region, rawOffset, ec);\r\n    }\r\n\r\n    void __icu_ucal_setMillis(UCalendar* cal, UDate dateTime, UErrorCode* status) noexcept {\r\n        const auto _Fun = _Icu_functions._Pfn_ucal_setMillis.load(_STD memory_order_relaxed);\r\n        _Fun(cal, dateTime, status);\r\n    }\r\n\r\n    void __icu_uenum_close(UEnumeration* en) noexcept {\r\n        const auto _Fun = _Icu_functions._Pfn_uenum_close.load(_STD memory_order_relaxed);\r\n        _Fun(en);\r\n    }\r\n\r\n    [[nodiscard]] int32_t __icu_uenum_count(UEnumeration* en, UErrorCode* ec) noexcept {\r\n        const auto _Fun = _Icu_functions._Pfn_uenum_count.load(_STD memory_order_relaxed);\r\n        return _Fun(en, ec);\r\n    }\r\n\r\n    [[nodiscard]] const UChar* __icu_uenum_unext(UEnumeration* en, int32_t* resultLength, UErrorCode* status) noexcept {\r\n        const auto _Fun = _Icu_functions._Pfn_uenum_unext.load(_STD memory_order_relaxed);\r\n        return _Fun(en, resultLength, status);\r\n    }\r\n\r\n    struct _UEnumeration_deleter {\r\n        void operator()(UEnumeration* _En) const noexcept {\r\n            __icu_uenum_close(_En);\r\n        }\r\n    };\r\n\r\n    struct _UCalendar_deleter {\r\n        void operator()(UCalendar* _Cal) const noexcept {\r\n            __icu_ucal_close(_Cal);\r\n        }\r\n    };\r\n\r\n    [[nodiscard]] const char* _Allocate_wide_to_narrow(\r\n        const char16_t* const _Input, const int _Input_len, __std_tzdb_error& _Err) noexcept {\r\n        const auto _Code_page      = __std_fs_code_page();\r\n        const auto _Input_as_wchar = reinterpret_cast<const wchar_t*>(_Input);\r\n        const auto _Count_result = __std_fs_convert_wide_to_narrow(_Code_page, _Input_as_wchar, _Input_len, nullptr, 0);\r\n        if (_Count_result._Err != __std_win_error::_Success) {\r\n            SetLastError(static_cast<DWORD>(_Count_result._Err));\r\n            _Err = __std_tzdb_error::_Win_error;\r\n            return nullptr;\r\n        }\r\n\r\n        _STD unique_ptr<char[]> _Data{new (_STD nothrow) char[_Count_result._Len + 1]};\r\n        if (_Data == nullptr) {\r\n            return nullptr;\r\n        }\r\n\r\n        _Data[_Count_result._Len] = '\\0';\r\n\r\n        const auto _Result =\r\n            __std_fs_convert_wide_to_narrow(_Code_page, _Input_as_wchar, _Input_len, _Data.get(), _Count_result._Len);\r\n        if (_Result._Err != __std_win_error::_Success) {\r\n            SetLastError(static_cast<DWORD>(_Result._Err));\r\n            _Err = __std_tzdb_error::_Win_error;\r\n            return nullptr;\r\n        }\r\n\r\n        return _Data.release();\r\n    }\r\n\r\n    [[nodiscard]] _STD unique_ptr<const char16_t[]> _Allocate_narrow_to_wide(\r\n        const char* const _Input, const int _Input_len, __std_tzdb_error& _Err) noexcept {\r\n        const auto _Code_page = __std_fs_code_page();\r\n        const auto _Count     = __std_fs_convert_narrow_to_wide(_Code_page, _Input, _Input_len, nullptr, 0);\r\n        if (_Count._Err != __std_win_error::_Success) {\r\n            _Err = __std_tzdb_error::_Win_error;\r\n            return nullptr;\r\n        }\r\n\r\n        _STD unique_ptr<char16_t[]> _Data{new (_STD nothrow) char16_t[_Count._Len + 1]};\r\n        if (_Data == nullptr) {\r\n            return nullptr;\r\n        }\r\n\r\n        _Data[_Count._Len]          = u'\\0';\r\n        const auto _Output_as_wchar = reinterpret_cast<wchar_t*>(_Data.get());\r\n\r\n        const auto _Result =\r\n            __std_fs_convert_narrow_to_wide(_Code_page, _Input, _Input_len, _Output_as_wchar, _Count._Len);\r\n        if (_Result._Err != __std_win_error::_Success) {\r\n            _Err = __std_tzdb_error::_Win_error;\r\n            return nullptr;\r\n        }\r\n\r\n        return _Data;\r\n    }\r\n\r\n    template <class _Function>\r\n    [[nodiscard]] _STD unique_ptr<const char16_t[]> _Get_icu_string_impl(const _Function _Icu_fn,\r\n        const int32_t _Initial_buf_len, int32_t& _Result_len, __std_tzdb_error& _Err) noexcept {\r\n        _STD unique_ptr<char16_t[]> _Str_buf{new (_STD nothrow) char16_t[_Initial_buf_len]};\r\n        if (_Str_buf == nullptr) {\r\n            return nullptr;\r\n        }\r\n\r\n        UErrorCode _UErr{U_ZERO_ERROR};\r\n        _Result_len = _Icu_fn(_Str_buf.get(), _Initial_buf_len, &_UErr);\r\n        if (_UErr == U_BUFFER_OVERFLOW_ERROR && _Result_len > 0) {\r\n            _Str_buf.reset(new (_STD nothrow) char16_t[_Result_len + 1]);\r\n            if (_Str_buf == nullptr) {\r\n                return nullptr;\r\n            }\r\n\r\n            _UErr       = U_ZERO_ERROR; // reset error.\r\n            _Result_len = _Icu_fn(_Str_buf.get(), _Result_len, &_UErr);\r\n            if (U_FAILURE(_UErr)) {\r\n                _Err = __std_tzdb_error::_Icu_error;\r\n                return nullptr;\r\n            }\r\n        } else if (U_FAILURE(_UErr) || _Result_len <= 0) {\r\n            _Err = __std_tzdb_error::_Icu_error;\r\n            return nullptr;\r\n        }\r\n\r\n        return _Str_buf;\r\n    }\r\n\r\n    [[nodiscard]] _STD unique_ptr<const char16_t[]> _Get_canonical_id(\r\n        const char16_t* _Id, const int32_t _Len, int32_t& _Result_len, __std_tzdb_error& _Err) noexcept {\r\n        const auto _Icu_fn = [_Id, _Len](UChar* _Result, int32_t _Result_capacity, UErrorCode* _UErr) {\r\n            UBool _Is_system{};\r\n            return __icu_ucal_getCanonicalTimeZoneID(_Id, _Len, _Result, _Result_capacity, &_Is_system, _UErr);\r\n        };\r\n        return _Get_icu_string_impl(_Icu_fn, 32, _Result_len, _Err);\r\n    }\r\n\r\n    [[nodiscard]] _STD unique_ptr<const char16_t[]> _Get_default_timezone(\r\n        int32_t& _Result_len, __std_tzdb_error& _Err) noexcept {\r\n        const auto _Icu_fn = [](UChar* _Result, int32_t _Result_capacity, UErrorCode* _UErr) {\r\n            return __icu_ucal_getDefaultTimeZone(_Result, _Result_capacity, _UErr);\r\n        };\r\n        return _Get_icu_string_impl(_Icu_fn, 32, _Result_len, _Err);\r\n    }\r\n\r\n    [[nodiscard]] _STD unique_ptr<const char16_t[]> _Get_timezone_short_id(\r\n        UCalendar* const _Cal, const bool _Is_daylight, int32_t& _Result_len, __std_tzdb_error& _Err) noexcept {\r\n        const auto _Display_type =\r\n            _Is_daylight ? UCalendarDisplayNameType::UCAL_SHORT_DST : UCalendarDisplayNameType::UCAL_SHORT_STANDARD;\r\n        const auto _Icu_fn = [_Cal, _Display_type](UChar* _Result, int32_t _Result_capacity, UErrorCode* _UErr) {\r\n            return __icu_ucal_getTimeZoneDisplayName(_Cal, _Display_type, nullptr, _Result, _Result_capacity, _UErr);\r\n        };\r\n        return _Get_icu_string_impl(_Icu_fn, 12, _Result_len, _Err);\r\n    }\r\n\r\n    [[nodiscard]] _STD unique_ptr<UCalendar, _UCalendar_deleter> _Get_cal(\r\n        const char* _Tz, const size_t _Tz_len, __std_tzdb_error& _Err) noexcept {\r\n        const auto _Tz_name = _Allocate_narrow_to_wide(_Tz, static_cast<int>(_Tz_len), _Err);\r\n        if (_Tz_name == nullptr) {\r\n            return nullptr;\r\n        }\r\n\r\n        UErrorCode _UErr{U_ZERO_ERROR};\r\n        _STD unique_ptr<UCalendar, _UCalendar_deleter> _Cal{\r\n            __icu_ucal_open(_Tz_name.get(), -1, nullptr, UCalendarType::UCAL_DEFAULT, &_UErr)};\r\n        if (U_FAILURE(_UErr)) {\r\n            _Err = __std_tzdb_error::_Icu_error;\r\n        }\r\n\r\n        return _Cal;\r\n    }\r\n\r\n    template <class _Ty, class _Dx>\r\n    [[nodiscard]] _Ty* _Report_error(_STD unique_ptr<_Ty, _Dx>& _Info, const __std_tzdb_error _Err) noexcept {\r\n        _Info->_Err = _Err;\r\n        return _Info.release();\r\n    }\r\n\r\n    template <class _Ty, class _Dx>\r\n    [[nodiscard]] _Ty* _Propagate_error(_STD unique_ptr<_Ty, _Dx>& _Info) noexcept {\r\n        // a bad_alloc returns nullptr and does not set __std_tzdb_error\r\n        return _Info->_Err == __std_tzdb_error::_Success ? nullptr : _Info.release();\r\n    }\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n[[nodiscard]] __std_tzdb_time_zones_info* __stdcall __std_tzdb_get_time_zones() noexcept {\r\n    // On exit---\r\n    //    _Info == nullptr          --> bad_alloc\r\n    //    _Info->_Err == _Win_error --> failed, call GetLastError()\r\n    //    _Info->_Err == _Icu_error --> runtime_error interacting with ICU\r\n#pragma warning(push)\r\n#pragma warning(disable : 28182) // TRANSITION, VSO-1558277: Dereferencing NULL pointer.\r\n    _STD unique_ptr<__std_tzdb_time_zones_info, _STD _Tzdb_deleter<__std_tzdb_time_zones_info>> _Info{\r\n        new (_STD nothrow) __std_tzdb_time_zones_info{}};\r\n#pragma warning(pop)\r\n    if (_Info == nullptr) {\r\n        return nullptr;\r\n    }\r\n\r\n    if (_Acquire_icu_functions() < _Icu_api_level::_Has_icu_addresses) {\r\n        return _Report_error(_Info, __std_tzdb_error::_Win_error);\r\n    }\r\n\r\n    UErrorCode _UErr{U_ZERO_ERROR};\r\n    _Info->_Version = __icu_ucal_getTZDataVersion(&_UErr);\r\n    if (U_FAILURE(_UErr)) {\r\n        return _Report_error(_Info, __std_tzdb_error::_Icu_error);\r\n    }\r\n\r\n    _STD unique_ptr<UEnumeration, _UEnumeration_deleter> _Enum{\r\n        __icu_ucal_openTimeZoneIDEnumeration(USystemTimeZoneType::UCAL_ZONE_TYPE_ANY, nullptr, nullptr, &_UErr)};\r\n    if (U_FAILURE(_UErr)) {\r\n        return _Report_error(_Info, __std_tzdb_error::_Icu_error);\r\n    }\r\n\r\n    // uenum_count may be expensive but is required to pre-allocate arrays.\r\n    const int32_t _Num_time_zones = __icu_uenum_count(_Enum.get(), &_UErr);\r\n    if (U_FAILURE(_UErr)) {\r\n        return _Report_error(_Info, __std_tzdb_error::_Icu_error);\r\n    }\r\n\r\n    _Info->_Num_time_zones = static_cast<size_t>(_Num_time_zones);\r\n    // value-init to ensure __std_tzdb_delete_time_zones() cleanup is valid\r\n    if (const auto _Names = new (_STD nothrow) const char* [_Info->_Num_time_zones] {}) {\r\n        _Info->_Names = _Names;\r\n    } else {\r\n        return nullptr;\r\n    }\r\n\r\n    // value-init to ensure __std_tzdb_delete_time_zones() cleanup is valid\r\n    if (const auto _Links = new (_STD nothrow) const char* [_Info->_Num_time_zones] {}) {\r\n        _Info->_Links = _Links;\r\n    } else {\r\n        return nullptr;\r\n    }\r\n\r\n    for (size_t _Name_idx = 0; _Name_idx < _Info->_Num_time_zones; ++_Name_idx) {\r\n        int32_t _Elem_len{};\r\n        const auto _Elem = __icu_uenum_unext(_Enum.get(), &_Elem_len, &_UErr);\r\n        if (U_FAILURE(_UErr) || _Elem == nullptr) {\r\n            return _Report_error(_Info, __std_tzdb_error::_Icu_error);\r\n        }\r\n\r\n        _Info->_Names[_Name_idx] = _Allocate_wide_to_narrow(_Elem, _Elem_len, _Info->_Err);\r\n        if (_Info->_Names[_Name_idx] == nullptr) {\r\n            return _Propagate_error(_Info);\r\n        }\r\n\r\n        int32_t _Link_len{};\r\n        const auto _Link = _Get_canonical_id(_Elem, _Elem_len, _Link_len, _Info->_Err);\r\n        if (_Link == nullptr) {\r\n            return _Propagate_error(_Info);\r\n        }\r\n\r\n        if (_STD u16string_view{_Elem, static_cast<size_t>(_Elem_len)}\r\n            != _STD u16string_view{_Link.get(), static_cast<size_t>(_Link_len)}) {\r\n            _Info->_Links[_Name_idx] = _Allocate_wide_to_narrow(_Link.get(), _Link_len, _Info->_Err);\r\n            if (_Info->_Links[_Name_idx] == nullptr) {\r\n                return _Propagate_error(_Info);\r\n            }\r\n        }\r\n    }\r\n\r\n    return _Info.release();\r\n}\r\n\r\nvoid __stdcall __std_tzdb_delete_time_zones(__std_tzdb_time_zones_info* const _Info) noexcept {\r\n    if (_Info != nullptr) {\r\n        if (_Info->_Names != nullptr) {\r\n            for (size_t _Idx = 0; _Idx < _Info->_Num_time_zones; ++_Idx) {\r\n                delete[] _Info->_Names[_Idx];\r\n            }\r\n\r\n            delete[] _Info->_Names;\r\n        }\r\n\r\n        if (_Info->_Links != nullptr) {\r\n            for (size_t _Idx = 0; _Idx < _Info->_Num_time_zones; ++_Idx) {\r\n                delete[] _Info->_Links[_Idx];\r\n            }\r\n\r\n            delete[] _Info->_Links;\r\n        }\r\n\r\n        delete _Info;\r\n    }\r\n}\r\n\r\n[[nodiscard]] __std_tzdb_current_zone_info* __stdcall __std_tzdb_get_current_zone() noexcept {\r\n    // On exit---\r\n    //    _Info == nullptr          --> bad_alloc\r\n    //    _Info->_Err == _Win_error --> failed, call GetLastError()\r\n    //    _Info->_Err == _Icu_error --> runtime_error interacting with ICU\r\n#pragma warning(push)\r\n#pragma warning(disable : 28182) // TRANSITION, VSO-1558277: Dereferencing NULL pointer.\r\n    _STD unique_ptr<__std_tzdb_current_zone_info, _STD _Tzdb_deleter<__std_tzdb_current_zone_info>> _Info{\r\n        new (_STD nothrow) __std_tzdb_current_zone_info{}};\r\n#pragma warning(pop)\r\n    if (_Info == nullptr) {\r\n        return nullptr;\r\n    }\r\n\r\n    if (_Acquire_icu_functions() < _Icu_api_level::_Has_icu_addresses) {\r\n        return _Report_error(_Info, __std_tzdb_error::_Win_error);\r\n    }\r\n\r\n    int32_t _Id_len{};\r\n    const auto _Id_name = _Get_default_timezone(_Id_len, _Info->_Err);\r\n    if (_Id_name == nullptr) {\r\n        return _Propagate_error(_Info);\r\n    }\r\n\r\n    _Info->_Tz_name = _Allocate_wide_to_narrow(_Id_name.get(), _Id_len, _Info->_Err);\r\n    if (_Info->_Tz_name == nullptr) {\r\n        return _Propagate_error(_Info);\r\n    }\r\n\r\n    return _Info.release();\r\n}\r\n\r\nvoid __stdcall __std_tzdb_delete_current_zone(__std_tzdb_current_zone_info* const _Info) noexcept {\r\n    if (_Info) {\r\n        delete[] _Info->_Tz_name;\r\n\r\n        delete _Info;\r\n    }\r\n}\r\n\r\n[[nodiscard]] __std_tzdb_sys_info* __stdcall __std_tzdb_get_sys_info(\r\n    const char* _Tz, const size_t _Tz_len, __std_tzdb_epoch_milli _Sys) noexcept {\r\n    // On exit---\r\n    //    _Info == nullptr          --> bad_alloc\r\n    //    _Info->_Err == _Win_error --> failed, call GetLastError()\r\n    //    _Info->_Err == _Icu_error --> runtime_error interacting with ICU\r\n#pragma warning(push)\r\n#pragma warning(disable : 28182) // TRANSITION, VSO-1558277: Dereferencing NULL pointer.\r\n    _STD unique_ptr<__std_tzdb_sys_info, _STD _Tzdb_deleter<__std_tzdb_sys_info>> _Info{\r\n        new (_STD nothrow) __std_tzdb_sys_info{}};\r\n#pragma warning(pop)\r\n    if (_Info == nullptr) {\r\n        return nullptr;\r\n    }\r\n\r\n    if (_Acquire_icu_functions() < _Icu_api_level::_Has_icu_addresses) {\r\n        return _Report_error(_Info, __std_tzdb_error::_Win_error);\r\n    }\r\n\r\n    // Get the option stored after the time zone name. If there's no option, _Tz[_Tz_len] is the null terminator in the\r\n    // std::string, and will be treated the same as __std_tzdb_sys_info_type::_Full.\r\n    const auto _Type = static_cast<__std_tzdb_sys_info_type>(_Tz[_Tz_len]);\r\n\r\n    // TRANSITION, ABI\r\n    // Profiling shows that _Get_cal is a hot path. Its result should be cached (preferably in the time_zone object).\r\n    const auto _Cal = _Get_cal(_Tz, _Tz_len, _Info->_Err);\r\n    if (_Cal == nullptr) {\r\n        return _Propagate_error(_Info);\r\n    }\r\n\r\n    UErrorCode _UErr{};\r\n    __icu_ucal_setMillis(_Cal.get(), _Sys, &_UErr);\r\n    if (U_FAILURE(_UErr)) {\r\n        return _Report_error(_Info, __std_tzdb_error::_Icu_error);\r\n    }\r\n\r\n    _Info->_Save = __icu_ucal_get(_Cal.get(), UCalendarDateFields::UCAL_DST_OFFSET, &_UErr);\r\n    if (U_FAILURE(_UErr)) {\r\n        return _Report_error(_Info, __std_tzdb_error::_Icu_error);\r\n    }\r\n\r\n    _Info->_Offset = __icu_ucal_get(_Cal.get(), UCalendarDateFields::UCAL_ZONE_OFFSET, &_UErr) + _Info->_Save;\r\n    if (U_FAILURE(_UErr)) {\r\n        return _Report_error(_Info, __std_tzdb_error::_Icu_error);\r\n    }\r\n\r\n    if (_Type == __std_tzdb_sys_info_type::_Offset_only) {\r\n        return _Info.release();\r\n    }\r\n\r\n    UDate _Transition{};\r\n    _Info->_Begin = __icu_ucal_getTimeZoneTransitionDate(_Cal.get(),\r\n                        UTimeZoneTransitionType::UCAL_TZ_TRANSITION_PREVIOUS_INCLUSIVE, &_Transition, &_UErr)\r\n                      ? _Transition\r\n                      : U_DATE_MIN;\r\n    if (U_FAILURE(_UErr)) {\r\n        return _Report_error(_Info, __std_tzdb_error::_Icu_error);\r\n    }\r\n\r\n    _Info->_End = __icu_ucal_getTimeZoneTransitionDate(\r\n                      _Cal.get(), UTimeZoneTransitionType::UCAL_TZ_TRANSITION_NEXT, &_Transition, &_UErr)\r\n                    ? _Transition\r\n                    : U_DATE_MAX;\r\n    if (U_FAILURE(_UErr)) {\r\n        return _Report_error(_Info, __std_tzdb_error::_Icu_error);\r\n    }\r\n\r\n    if (_Type == __std_tzdb_sys_info_type::_Offset_and_range) {\r\n        return _Info.release();\r\n    }\r\n\r\n    int32_t _Abbrev_len{};\r\n    const auto _Abbrev = _Get_timezone_short_id(_Cal.get(), _Info->_Save != 0, _Abbrev_len, _Info->_Err);\r\n    if (_Abbrev == nullptr) {\r\n        return _Propagate_error(_Info);\r\n    }\r\n\r\n    _Info->_Abbrev = _Allocate_wide_to_narrow(_Abbrev.get(), _Abbrev_len, _Info->_Err);\r\n    if (_Info->_Abbrev == nullptr) {\r\n        const auto _Abs_offset        = _Info->_Offset < 0 ? -_Info->_Offset : _Info->_Offset;\r\n        const auto _Offset_in_minutes = _Abs_offset / (60 * 1000);\r\n        const auto _Hours             = _Offset_in_minutes / 60;\r\n        const auto _Mins              = _Offset_in_minutes % 60;\r\n\r\n        _STD unique_ptr<char[]> _Fallback_abbrev{new (_STD nothrow) char[_Mins == 0 ? 4 : 6]};\r\n\r\n        if (_Fallback_abbrev == nullptr) {\r\n            return nullptr;\r\n        }\r\n\r\n        _Fallback_abbrev[0] = _Info->_Offset < 0 ? '-' : '+';\r\n        _Fallback_abbrev[1] = static_cast<char>('0' + _Hours / 10);\r\n        _Fallback_abbrev[2] = static_cast<char>('0' + _Hours % 10);\r\n\r\n        if (_Mins == 0) {\r\n            _Fallback_abbrev[3] = '\\0';\r\n        } else {\r\n            _Fallback_abbrev[3] = static_cast<char>('0' + _Mins / 10);\r\n            _Fallback_abbrev[4] = static_cast<char>('0' + _Mins % 10);\r\n            _Fallback_abbrev[5] = '\\0';\r\n        }\r\n\r\n        _Info->_Err    = __std_tzdb_error::_Success;\r\n        _Info->_Abbrev = _Fallback_abbrev.release();\r\n    }\r\n\r\n    return _Info.release();\r\n}\r\n\r\nvoid __stdcall __std_tzdb_delete_sys_info(__std_tzdb_sys_info* const _Info) noexcept {\r\n    if (_Info) {\r\n        delete[] _Info->_Abbrev;\r\n\r\n        delete _Info;\r\n    }\r\n}\r\n\r\n[[nodiscard]] __std_tzdb_leap_info* __stdcall __std_tzdb_get_leap_seconds(\r\n    const size_t prev_reg_ls_size, size_t* const current_reg_ls_size) noexcept {\r\n    // On exit---\r\n    //    *current_reg_ls_size <= prev_reg_ls_size, reg_ls_data == nullptr --> no new data\r\n    //    *current_reg_ls_size >  prev_reg_ls_size, reg_ls_data != nullptr --> new data, successfully read\r\n    //    *current_reg_ls_size == 0,                reg_ls_data != nullptr --> new data, failed reading\r\n    //    *current_reg_ls_size >  prev_reg_ls_size, reg_ls_data == nullptr --> new data, failed allocation\r\n\r\n    constexpr auto reg_key_name    = LR\"(SYSTEM\\CurrentControlSet\\Control\\LeapSecondInformation)\";\r\n    constexpr auto reg_subkey_name = L\"LeapSeconds\";\r\n    *current_reg_ls_size           = 0;\r\n    HKEY leap_sec_key              = nullptr;\r\n\r\n    LSTATUS status = RegOpenKeyExW(HKEY_LOCAL_MACHINE, reg_key_name, 0, KEY_READ, &leap_sec_key);\r\n    if (status != ERROR_SUCCESS) {\r\n        // May not exist on older systems. Treat this as equivalent to the key existing but with no data.\r\n        return nullptr;\r\n    }\r\n\r\n    DWORD byte_size = 0;\r\n    status          = RegQueryValueExW(leap_sec_key, reg_subkey_name, nullptr, nullptr, nullptr, &byte_size);\r\n    static_assert(sizeof(__std_tzdb_leap_info) == 12);\r\n    const auto ls_size   = byte_size / 12;\r\n    *current_reg_ls_size = ls_size;\r\n\r\n    __std_tzdb_leap_info* reg_ls_data = nullptr;\r\n    if ((status == ERROR_SUCCESS || status == ERROR_MORE_DATA) && ls_size > prev_reg_ls_size) {\r\n        try {\r\n            reg_ls_data = new __std_tzdb_leap_info[ls_size];\r\n\r\n            status = RegQueryValueExW(\r\n                leap_sec_key, reg_subkey_name, nullptr, nullptr, reinterpret_cast<LPBYTE>(reg_ls_data), &byte_size);\r\n            if (status != ERROR_SUCCESS) {\r\n                *current_reg_ls_size = 0;\r\n            }\r\n        } catch (...) {\r\n        }\r\n    }\r\n\r\n    RegCloseKey(leap_sec_key);\r\n    if (status != ERROR_SUCCESS) {\r\n        SetLastError(status);\r\n    }\r\n\r\n    return reg_ls_data;\r\n}\r\n\r\nvoid __stdcall __std_tzdb_delete_leap_seconds(__std_tzdb_leap_info* _Info) noexcept {\r\n    delete[] _Info;\r\n}\r\n\r\n[[nodiscard]] void* __stdcall __std_calloc_crt(const size_t count, const size_t size) noexcept {\r\n    return _calloc_crt(count, size);\r\n}\r\n\r\nvoid __stdcall __std_free_crt(void* p) noexcept {\r\n    _free_crt(p);\r\n}\r\n\r\n} // extern \"C\"\r\n"
  },
  {
    "path": "stl/src/ulocale.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Machinery for the UTF-8 codecvt facets\r\n\r\n#if !defined(_DLL) || defined(_BUILDING_SATELLITE_CODECVT_IDS)\r\n#include <xlocale>\r\n\r\n#ifdef _DLL\r\n#define EXPORT __declspec(dllexport)\r\n#else\r\n#define EXPORT\r\n#endif\r\n\r\n_STD_BEGIN\r\nEXPORT locale::id codecvt<char16_t, char8_t, mbstate_t>::id;\r\nEXPORT locale::id codecvt<char32_t, char8_t, mbstate_t>::id;\r\n\r\n// These specializations are exported from msvcp140, *except* for their ids\r\nEXPORT locale::id codecvt<char16_t, char, mbstate_t>::id;\r\nEXPORT locale::id codecvt<char32_t, char, mbstate_t>::id;\r\n_STD_END\r\n#endif // !defined(_DLL) || defined(_BUILDING_SATELLITE_CODECVT_IDS)\r\n"
  },
  {
    "path": "stl/src/uncaught_exception.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <eh.h>\r\n#include <exception>\r\n_STD_BEGIN\r\n\r\n_CXX17_DEPRECATE_UNCAUGHT_EXCEPTION _NODISCARD _CRTIMP2_PURE bool __CLRCALL_PURE_OR_CDECL\r\n    uncaught_exception() noexcept {\r\n    return __uncaught_exception();\r\n}\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/uncaught_exceptions.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <eh.h>\r\n#include <exception>\r\n_STD_BEGIN\r\n\r\n_NODISCARD _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL uncaught_exceptions() noexcept {\r\n    return __uncaught_exceptions();\r\n}\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/ushcerr.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// initialize standard wide error stream (unsigned short version)\r\n\r\n#include <fstream>\r\n\r\n_STD_BEGIN\r\n\r\nusing ushistream = basic_istream<unsigned short, char_traits<unsigned short>>;\r\nusing ushostream = basic_ostream<unsigned short, char_traits<unsigned short>>;\r\nusing ushfilebuf = basic_filebuf<unsigned short, char_traits<unsigned short>>;\r\n\r\n_STD_END\r\n\r\n#define wistream    ushistream\r\n#define wostream    ushostream\r\n#define wfilebuf    ushfilebuf\r\n#define _Init_wcerr _Init_ushcerr\r\n#define init_wcerr  init_ushcerr\r\n#define _Winit      _UShinit\r\n\r\n#include \"wcerr.cpp\"\r\n"
  },
  {
    "path": "stl/src/ushcin.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// initialize standard wide input stream (unsigned short version)\r\n\r\n#include <fstream>\r\n\r\n_STD_BEGIN\r\n\r\nusing ushistream = basic_istream<unsigned short, char_traits<unsigned short>>;\r\nusing ushostream = basic_ostream<unsigned short, char_traits<unsigned short>>;\r\nusing ushfilebuf = basic_filebuf<unsigned short, char_traits<unsigned short>>;\r\n\r\n_STD_END\r\n\r\n#define wistream   ushistream\r\n#define wostream   ushostream\r\n#define wfilebuf   ushfilebuf\r\n#define _Init_wcin _Init_ushcin\r\n#define init_wcin  init_ushcin\r\n#define _Winit     _UShinit\r\n\r\n#include \"wcin.cpp\"\r\n"
  },
  {
    "path": "stl/src/ushclog.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// initialize standard wide log stream (unsigned short version)\r\n\r\n#include <fstream>\r\n\r\n_STD_BEGIN\r\n\r\nusing ushistream = basic_istream<unsigned short, char_traits<unsigned short>>;\r\nusing ushostream = basic_ostream<unsigned short, char_traits<unsigned short>>;\r\nusing ushfilebuf = basic_filebuf<unsigned short, char_traits<unsigned short>>;\r\n\r\n_STD_END\r\n\r\n#define wistream    ushistream\r\n#define wostream    ushostream\r\n#define wfilebuf    ushfilebuf\r\n#define _Init_wclog _Init_ushclog\r\n#define init_wclog  init_ushclog\r\n#define _Winit      _UShinit\r\n\r\n#include \"wclog.cpp\"\r\n"
  },
  {
    "path": "stl/src/ushcout.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// initialize standard wide output stream (unsigned short version)\r\n\r\n#include <fstream>\r\n\r\n_STD_BEGIN\r\n\r\nusing ushistream = basic_istream<unsigned short, char_traits<unsigned short>>;\r\nusing ushostream = basic_ostream<unsigned short, char_traits<unsigned short>>;\r\nusing ushfilebuf = basic_filebuf<unsigned short, char_traits<unsigned short>>;\r\n\r\n_STD_END\r\n\r\n#define wistream    ushistream\r\n#define wostream    ushostream\r\n#define wfilebuf    ushfilebuf\r\n#define _Init_wcout _Init_ushcout\r\n#define init_wcout  init_ushcout\r\n#define _Winit      _UShinit\r\n\r\n#include \"wcout.cpp\"\r\n"
  },
  {
    "path": "stl/src/ushiostr.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// _UShinit members (unsigned short version)\r\n\r\n#include <fstream>\r\n\r\n_STD_BEGIN\r\n\r\nusing ushistream = basic_istream<unsigned short, char_traits<unsigned short>>;\r\nusing ushostream = basic_ostream<unsigned short, char_traits<unsigned short>>;\r\nusing ushfilebuf = basic_filebuf<unsigned short, char_traits<unsigned short>>;\r\n\r\n_STD_END\r\n\r\n#define wistream ushistream\r\n#define wostream ushostream\r\n#define wfilebuf ushfilebuf\r\n#define _Winit   _UShinit\r\n\r\n#include <iostream>\r\n\r\n#if defined(_M_CEE_PURE)\r\n_STD_BEGIN\r\n__PURE_APPDOMAIN_GLOBAL extern wistream* _Ptr_wcin  = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern wostream* _Ptr_wcout = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern wostream* _Ptr_wcerr = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern wostream* _Ptr_wclog = nullptr;\r\n_STD_END\r\n#else // ^^^ defined(_M_CEE_PURE) / !defined(_M_CEE_PURE) vvv\r\n_STD_BEGIN\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT wistream* _Ptr_wcin  = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT wostream* _Ptr_wcout = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT wostream* _Ptr_wcerr = nullptr;\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT wostream* _Ptr_wclog = nullptr;\r\n_STD_END\r\n#include \"wiostrea.cpp\"\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n"
  },
  {
    "path": "stl/src/vector_algorithms.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifdef _M_CEE_PURE\r\n#error _M_CEE_PURE should not be defined when compiling vector_algorithms.cpp.\r\n#endif\r\n\r\n#include <__msvc_minmax.hpp>\r\n#include <cstdint>\r\n#include <cstring>\r\n#include <cwchar>\r\n#include <type_traits>\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n#include <arm64_neon.h>\r\n\r\n#include <Windows.h>\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n#include <intrin.h>\r\n#include <isa_availability.h>\r\n\r\nextern \"C\" long __isa_enabled;\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\nnamespace {\r\n#if !defined(_M_ARM64) && !defined(_M_ARM64EC)\r\n    bool _Use_avx2() noexcept {\r\n        return __check_arch_support(__IA_SUPPORT_VECTOR256, 0) || (__isa_enabled & (1 << __ISA_AVAILABLE_AVX2));\r\n    }\r\n\r\n    bool _Use_sse42() noexcept {\r\n        return __check_arch_support(__IA_SUPPORT_SSE42, 0) || (__isa_enabled & (1 << __ISA_AVAILABLE_SSE42));\r\n    }\r\n\r\n    struct [[nodiscard]] _Zeroupper_on_exit { // TRANSITION, DevCom-10331414\r\n        _Zeroupper_on_exit() = default;\r\n\r\n        _Zeroupper_on_exit(const _Zeroupper_on_exit&)            = delete;\r\n        _Zeroupper_on_exit& operator=(const _Zeroupper_on_exit&) = delete;\r\n\r\n        ~_Zeroupper_on_exit() {\r\n            _mm256_zeroupper();\r\n        }\r\n    };\r\n\r\n    __m256i _Avx2_tail_mask_32(const size_t _Count_in_bytes) noexcept {\r\n        // _Count_in_bytes must be within [0, 32].\r\n        static constexpr unsigned int _Tail_masks[16] = {\r\n            ~0u, ~0u, ~0u, ~0u, ~0u, ~0u, ~0u, ~0u, 0, 0, 0, 0, 0, 0, 0, 0};\r\n        return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(\r\n            reinterpret_cast<const unsigned char*>(_Tail_masks) + (32 - _Count_in_bytes)));\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    bool _Use_FEAT_DotProd() noexcept {\r\n        return IsProcessorFeaturePresent(PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE);\r\n    }\r\n\r\n    bool _Use_FEAT_I8MM() noexcept {\r\n        return IsProcessorFeaturePresent(PF_ARM_V82_I8MM_INSTRUCTIONS_AVAILABLE);\r\n    }\r\n\r\n    bool _Use_FEAT_SHA3() noexcept {\r\n        return IsProcessorFeaturePresent(PF_ARM_SHA3_INSTRUCTIONS_AVAILABLE);\r\n    }\r\n\r\n    bool _Use_FEAT_SVE() noexcept {\r\n        return IsProcessorFeaturePresent(PF_ARM_SVE_INSTRUCTIONS_AVAILABLE);\r\n    }\r\n\r\n    bool _Use_FEAT_SVE2() noexcept {\r\n        return IsProcessorFeaturePresent(PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE);\r\n    }\r\n\r\n    bool _Use_FEAT_SVE2p1() noexcept {\r\n        return IsProcessorFeaturePresent(PF_ARM_SVE2_1_INSTRUCTIONS_AVAILABLE);\r\n    }\r\n\r\n    bool _Use_FEAT_SVE_SHA3() noexcept {\r\n        return IsProcessorFeaturePresent(PF_ARM_SVE_SHA3_INSTRUCTIONS_AVAILABLE);\r\n    }\r\n\r\n    bool _Use_FEAT_AES() noexcept {\r\n        return IsProcessorFeaturePresent(PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE);\r\n    }\r\n\r\n    bool _Use_FEAT_BitPerm() noexcept {\r\n        return IsProcessorFeaturePresent(PF_ARM_SVE_BITPERM_INSTRUCTIONS_AVAILABLE);\r\n    }\r\n#endif // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) ^^^\r\n\r\n    size_t _Byte_length(const void* const _First, const void* const _Last) noexcept {\r\n        return static_cast<const unsigned char*>(_Last) - static_cast<const unsigned char*>(_First);\r\n    }\r\n\r\n    void _Rewind_bytes(void*& _Target, const size_t _Offset) noexcept {\r\n        _Target = static_cast<unsigned char*>(_Target) - _Offset;\r\n    }\r\n\r\n    void _Rewind_bytes(const void*& _Target, const size_t _Offset) noexcept {\r\n        _Target = static_cast<const unsigned char*>(_Target) - _Offset;\r\n    }\r\n\r\n    template <class _Integral>\r\n    void _Advance_bytes(void*& _Target, const _Integral _Offset) noexcept {\r\n        _Target = static_cast<unsigned char*>(_Target) + _Offset;\r\n    }\r\n\r\n    template <class _Integral>\r\n    void _Advance_bytes(const void*& _Target, const _Integral _Offset) noexcept {\r\n        _Target = static_cast<const unsigned char*>(_Target) + _Offset;\r\n    }\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n__declspec(noalias) void __cdecl __std_swap_ranges_trivially_swappable_noalias(\r\n    void* _First1, void* const _Last1, void* _First2) noexcept {\r\n    if (_Byte_length(_First1, _Last1) >= 64) {\r\n        constexpr size_t _Mask_64 = ~((static_cast<size_t>(1) << 6) - 1);\r\n        const void* _Stop_at      = _First1;\r\n        _Advance_bytes(_Stop_at, _Byte_length(_First1, _Last1) & _Mask_64);\r\n        do {\r\n            const uint8x16_t _Left1  = vld1q_u8(static_cast<uint8_t*>(_First1) + 0);\r\n            const uint8x16_t _Left2  = vld1q_u8(static_cast<uint8_t*>(_First1) + 16);\r\n            const uint8x16_t _Left3  = vld1q_u8(static_cast<uint8_t*>(_First1) + 32);\r\n            const uint8x16_t _Left4  = vld1q_u8(static_cast<uint8_t*>(_First1) + 48);\r\n            const uint8x16_t _Right1 = vld1q_u8(static_cast<uint8_t*>(_First2) + 0);\r\n            const uint8x16_t _Right2 = vld1q_u8(static_cast<uint8_t*>(_First2) + 16);\r\n            const uint8x16_t _Right3 = vld1q_u8(static_cast<uint8_t*>(_First2) + 32);\r\n            const uint8x16_t _Right4 = vld1q_u8(static_cast<uint8_t*>(_First2) + 48);\r\n            vst1q_u8(static_cast<uint8_t*>(_First1) + 0, _Right1);\r\n            vst1q_u8(static_cast<uint8_t*>(_First1) + 16, _Right2);\r\n            vst1q_u8(static_cast<uint8_t*>(_First1) + 32, _Right3);\r\n            vst1q_u8(static_cast<uint8_t*>(_First1) + 48, _Right4);\r\n            vst1q_u8(static_cast<uint8_t*>(_First2) + 0, _Left1);\r\n            vst1q_u8(static_cast<uint8_t*>(_First2) + 16, _Left2);\r\n            vst1q_u8(static_cast<uint8_t*>(_First2) + 32, _Left3);\r\n            vst1q_u8(static_cast<uint8_t*>(_First2) + 48, _Left4);\r\n            _Advance_bytes(_First1, 64);\r\n            _Advance_bytes(_First2, 64);\r\n        } while (_First1 != _Stop_at);\r\n    }\r\n\r\n    if (_Byte_length(_First1, _Last1) >= 32) {\r\n        const uint8x16_t _Left1  = vld1q_u8(static_cast<uint8_t*>(_First1) + 0);\r\n        const uint8x16_t _Left2  = vld1q_u8(static_cast<uint8_t*>(_First1) + 16);\r\n        const uint8x16_t _Right1 = vld1q_u8(static_cast<uint8_t*>(_First2) + 0);\r\n        const uint8x16_t _Right2 = vld1q_u8(static_cast<uint8_t*>(_First2) + 16);\r\n        vst1q_u8(static_cast<uint8_t*>(_First1) + 0, _Right1);\r\n        vst1q_u8(static_cast<uint8_t*>(_First1) + 16, _Right2);\r\n        vst1q_u8(static_cast<uint8_t*>(_First2) + 0, _Left1);\r\n        vst1q_u8(static_cast<uint8_t*>(_First2) + 16, _Left2);\r\n        _Advance_bytes(_First1, 32);\r\n        _Advance_bytes(_First2, 32);\r\n    }\r\n\r\n    if (_Byte_length(_First1, _Last1) >= 16) {\r\n        const uint8x16_t _Left  = vld1q_u8(static_cast<uint8_t*>(_First1));\r\n        const uint8x16_t _Right = vld1q_u8(static_cast<uint8_t*>(_First2));\r\n        vst1q_u8(static_cast<uint8_t*>(_First1), _Right);\r\n        vst1q_u8(static_cast<uint8_t*>(_First2), _Left);\r\n        _Advance_bytes(_First1, 16);\r\n        _Advance_bytes(_First2, 16);\r\n    }\r\n\r\n    if (_Byte_length(_First1, _Last1) >= 8) {\r\n        const uint8x8_t _Left  = vld1_u8(static_cast<uint8_t*>(_First1));\r\n        const uint8x8_t _Right = vld1_u8(static_cast<uint8_t*>(_First2));\r\n        vst1_u8(static_cast<uint8_t*>(_First1), _Right);\r\n        vst1_u8(static_cast<uint8_t*>(_First2), _Left);\r\n        _Advance_bytes(_First1, 8);\r\n        _Advance_bytes(_First2, 8);\r\n    }\r\n\r\n    if (_Byte_length(_First1, _Last1) >= 4) {\r\n        uint32x2_t _Left  = vdup_n_u32(0);\r\n        uint32x2_t _Right = vdup_n_u32(0);\r\n        _Left             = vld1_lane_u32(static_cast<uint32_t*>(_First1), _Left, 0);\r\n        _Right            = vld1_lane_u32(static_cast<uint32_t*>(_First2), _Right, 0);\r\n        vst1_lane_u32(static_cast<uint32_t*>(_First1), _Right, 0);\r\n        vst1_lane_u32(static_cast<uint32_t*>(_First2), _Left, 0);\r\n        _Advance_bytes(_First1, 4);\r\n        _Advance_bytes(_First2, 4);\r\n    }\r\n\r\n    auto _First1c = static_cast<unsigned char*>(_First1);\r\n    auto _First2c = static_cast<unsigned char*>(_First2);\r\n    for (; _First1c != _Last1; ++_First1c, ++_First2c) {\r\n        const unsigned char _Ch = *_First1c;\r\n        *_First1c               = *_First2c;\r\n        *_First2c               = _Ch;\r\n    }\r\n}\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n__declspec(noalias) void __cdecl __std_swap_ranges_trivially_swappable_noalias(\r\n    void* _First1, void* const _Last1, void* _First2) noexcept {\r\n    constexpr size_t _Mask_32 = ~((static_cast<size_t>(1) << 5) - 1);\r\n    if (_Byte_length(_First1, _Last1) >= 32 && _Use_avx2()) {\r\n        const void* _Stop_at = _First1;\r\n        _Advance_bytes(_Stop_at, _Byte_length(_First1, _Last1) & _Mask_32);\r\n        do {\r\n            const __m256i _Left  = _mm256_loadu_si256(static_cast<__m256i*>(_First1));\r\n            const __m256i _Right = _mm256_loadu_si256(static_cast<__m256i*>(_First2));\r\n            _mm256_storeu_si256(static_cast<__m256i*>(_First1), _Right);\r\n            _mm256_storeu_si256(static_cast<__m256i*>(_First2), _Left);\r\n            _Advance_bytes(_First1, 32);\r\n            _Advance_bytes(_First2, 32);\r\n        } while (_First1 != _Stop_at);\r\n\r\n        _mm256_zeroupper(); // TRANSITION, DevCom-10331414\r\n    }\r\n\r\n    constexpr size_t _Mask_16 = ~((static_cast<size_t>(1) << 4) - 1);\r\n    if (_Byte_length(_First1, _Last1) >= 16 && _Use_sse42()) {\r\n        const void* _Stop_at = _First1;\r\n        _Advance_bytes(_Stop_at, _Byte_length(_First1, _Last1) & _Mask_16);\r\n        do {\r\n            const __m128i _Left  = _mm_loadu_si128(static_cast<__m128i*>(_First1));\r\n            const __m128i _Right = _mm_loadu_si128(static_cast<__m128i*>(_First2));\r\n            _mm_storeu_si128(static_cast<__m128i*>(_First1), _Right);\r\n            _mm_storeu_si128(static_cast<__m128i*>(_First2), _Left);\r\n            _Advance_bytes(_First1, 16);\r\n            _Advance_bytes(_First2, 16);\r\n        } while (_First1 != _Stop_at);\r\n    }\r\n\r\n#ifdef _WIN64\r\n    constexpr size_t _Mask_8 = ~((static_cast<size_t>(1) << 3) - 1);\r\n    if (_Byte_length(_First1, _Last1) >= 8) {\r\n        const void* _Stop_at = _First1;\r\n        _Advance_bytes(_Stop_at, _Byte_length(_First1, _Last1) & _Mask_8);\r\n        do {\r\n            unsigned long long _Left;\r\n            unsigned long long _Right;\r\n            memcpy(&_Left, _First1, 8);\r\n            memcpy(&_Right, _First2, 8);\r\n            memcpy(_First1, &_Right, 8);\r\n            memcpy(_First2, &_Left, 8);\r\n            _Advance_bytes(_First1, 8);\r\n            _Advance_bytes(_First2, 8);\r\n        } while (_First1 != _Stop_at);\r\n    }\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n    constexpr size_t _Mask_4 = ~((static_cast<size_t>(1) << 2) - 1);\r\n    if (_Byte_length(_First1, _Last1) >= 4) {\r\n        const void* _Stop_at = _First1;\r\n        _Advance_bytes(_Stop_at, _Byte_length(_First1, _Last1) & _Mask_4);\r\n        do {\r\n            unsigned long _Left;\r\n            unsigned long _Right;\r\n            memcpy(&_Left, _First1, 4);\r\n            memcpy(&_Right, _First2, 4);\r\n            memcpy(_First1, &_Right, 4);\r\n            memcpy(_First2, &_Left, 4);\r\n            _Advance_bytes(_First1, 4);\r\n            _Advance_bytes(_First2, 4);\r\n        } while (_First1 != _Stop_at);\r\n    }\r\n#endif // ^^^ 32-bit ^^^\r\n\r\n    auto _First1c = static_cast<unsigned char*>(_First1);\r\n    auto _First2c = static_cast<unsigned char*>(_First2);\r\n    for (; _First1c != _Last1; ++_First1c, ++_First2c) {\r\n        const unsigned char _Ch = *_First1c;\r\n        *_First1c               = *_First2c;\r\n        *_First2c               = _Ch;\r\n    }\r\n}\r\n\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n#ifndef _M_ARM64\r\n// TRANSITION, ABI: __std_swap_ranges_trivially_swappable() is preserved for binary compatibility (x64/x86/ARM64EC)\r\nvoid* __cdecl __std_swap_ranges_trivially_swappable(\r\n    void* const _First1, void* const _Last1, void* const _First2) noexcept {\r\n    __std_swap_ranges_trivially_swappable_noalias(_First1, _Last1, _First2);\r\n    return static_cast<char*>(_First2) + (static_cast<char*>(_Last1) - static_cast<char*>(_First1));\r\n}\r\n#endif // ^^^ !defined(_M_ARM64) ^^^\r\n\r\n} // extern \"C\"\r\n\r\nnamespace {\r\n    namespace _Rotating {\r\n        // The 'rotate' algorithm can be implemented:\r\n        //  - using 'reverse' on the parts and the whole\r\n        //  - using 'swap_ranges' repeatedly\r\n        // If both are vectorized, the latter is generally faster, due to avoiding extra swizzling.\r\n        //\r\n        // On top of 'swap_ranges' the following optimizations are made:\r\n        //  - using a temporary buffer (on the stack), if one of the parts is small enough\r\n        //  - 'swap_ranges' with more than two ranges\r\n        //\r\n        // When swapping multiple ranges, the more ranges the fewer operations, however:\r\n        //  - determining the number of ranges at runtime will require more instructions to manage it\r\n        //  - adding more code paths will spend more instruction cache and will fail branch prediction more often\r\n        //  - going way too far with the number of ranges may interfere with prefetching\r\n        //\r\n        // We implement the 'swap_ranges' approach with a small temporary buffer and swapping three ranges.\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        void __forceinline _Swap_3_ranges(void* _First1, void* const _Last1, void* _First2, void* _First3) noexcept {\r\n            if (_Byte_length(_First1, _Last1) >= 64) {\r\n                constexpr size_t _Mask_64 = ~((static_cast<size_t>(1) << 6) - 1);\r\n                const void* _Stop_at      = _First1;\r\n                _Advance_bytes(_Stop_at, _Byte_length(_First1, _Last1) & _Mask_64);\r\n                do {\r\n                    const uint8x16_t _Val1Lo1 = vld1q_u8(static_cast<uint8_t*>(_First1) + 0);\r\n                    const uint8x16_t _Val1Lo2 = vld1q_u8(static_cast<uint8_t*>(_First1) + 16);\r\n                    const uint8x16_t _Val1Hi1 = vld1q_u8(static_cast<uint8_t*>(_First1) + 32);\r\n                    const uint8x16_t _Val1Hi2 = vld1q_u8(static_cast<uint8_t*>(_First1) + 48);\r\n                    const uint8x16_t _Val2Lo1 = vld1q_u8(static_cast<uint8_t*>(_First2) + 0);\r\n                    const uint8x16_t _Val2Lo2 = vld1q_u8(static_cast<uint8_t*>(_First2) + 16);\r\n                    const uint8x16_t _Val2Hi1 = vld1q_u8(static_cast<uint8_t*>(_First2) + 32);\r\n                    const uint8x16_t _Val2Hi2 = vld1q_u8(static_cast<uint8_t*>(_First2) + 48);\r\n                    const uint8x16_t _Val3Lo1 = vld1q_u8(static_cast<uint8_t*>(_First3) + 0);\r\n                    const uint8x16_t _Val3Lo2 = vld1q_u8(static_cast<uint8_t*>(_First3) + 16);\r\n                    const uint8x16_t _Val3Hi1 = vld1q_u8(static_cast<uint8_t*>(_First3) + 32);\r\n                    const uint8x16_t _Val3Hi2 = vld1q_u8(static_cast<uint8_t*>(_First3) + 48);\r\n                    vst1q_u8(static_cast<uint8_t*>(_First1) + 0, _Val2Lo1);\r\n                    vst1q_u8(static_cast<uint8_t*>(_First1) + 16, _Val2Lo2);\r\n                    vst1q_u8(static_cast<uint8_t*>(_First1) + 32, _Val2Hi1);\r\n                    vst1q_u8(static_cast<uint8_t*>(_First1) + 48, _Val2Hi2);\r\n                    vst1q_u8(static_cast<uint8_t*>(_First2) + 0, _Val3Lo1);\r\n                    vst1q_u8(static_cast<uint8_t*>(_First2) + 16, _Val3Lo2);\r\n                    vst1q_u8(static_cast<uint8_t*>(_First2) + 32, _Val3Hi1);\r\n                    vst1q_u8(static_cast<uint8_t*>(_First2) + 48, _Val3Hi2);\r\n                    vst1q_u8(static_cast<uint8_t*>(_First3) + 0, _Val1Lo1);\r\n                    vst1q_u8(static_cast<uint8_t*>(_First3) + 16, _Val1Lo2);\r\n                    vst1q_u8(static_cast<uint8_t*>(_First3) + 32, _Val1Hi1);\r\n                    vst1q_u8(static_cast<uint8_t*>(_First3) + 48, _Val1Hi2);\r\n                    _Advance_bytes(_First1, 64);\r\n                    _Advance_bytes(_First2, 64);\r\n                    _Advance_bytes(_First3, 64);\r\n                } while (_First1 != _Stop_at);\r\n            }\r\n\r\n            if (_Byte_length(_First1, _Last1) >= 32) {\r\n                const uint8x16_t _Val1Lo = vld1q_u8(static_cast<uint8_t*>(_First1) + 0);\r\n                const uint8x16_t _Val1Hi = vld1q_u8(static_cast<uint8_t*>(_First1) + 16);\r\n                const uint8x16_t _Val2Lo = vld1q_u8(static_cast<uint8_t*>(_First2) + 0);\r\n                const uint8x16_t _Val2Hi = vld1q_u8(static_cast<uint8_t*>(_First2) + 16);\r\n                const uint8x16_t _Val3Lo = vld1q_u8(static_cast<uint8_t*>(_First3) + 0);\r\n                const uint8x16_t _Val3Hi = vld1q_u8(static_cast<uint8_t*>(_First3) + 16);\r\n                vst1q_u8(static_cast<uint8_t*>(_First1) + 0, _Val2Lo);\r\n                vst1q_u8(static_cast<uint8_t*>(_First1) + 16, _Val2Hi);\r\n                vst1q_u8(static_cast<uint8_t*>(_First2) + 0, _Val3Lo);\r\n                vst1q_u8(static_cast<uint8_t*>(_First2) + 16, _Val3Hi);\r\n                vst1q_u8(static_cast<uint8_t*>(_First3) + 0, _Val1Lo);\r\n                vst1q_u8(static_cast<uint8_t*>(_First3) + 16, _Val1Hi);\r\n                _Advance_bytes(_First1, 32);\r\n                _Advance_bytes(_First2, 32);\r\n                _Advance_bytes(_First3, 32);\r\n            }\r\n\r\n            if (_Byte_length(_First1, _Last1) >= 16) {\r\n                const uint8x16_t _Val1 = vld1q_u8(static_cast<uint8_t*>(_First1));\r\n                const uint8x16_t _Val2 = vld1q_u8(static_cast<uint8_t*>(_First2));\r\n                const uint8x16_t _Val3 = vld1q_u8(static_cast<uint8_t*>(_First3));\r\n                vst1q_u8(static_cast<uint8_t*>(_First1), _Val2);\r\n                vst1q_u8(static_cast<uint8_t*>(_First2), _Val3);\r\n                vst1q_u8(static_cast<uint8_t*>(_First3), _Val1);\r\n                _Advance_bytes(_First1, 16);\r\n                _Advance_bytes(_First2, 16);\r\n                _Advance_bytes(_First3, 16);\r\n            }\r\n\r\n            if (_Byte_length(_First1, _Last1) >= 8) {\r\n                const uint8x8_t _Val1 = vld1_u8(static_cast<uint8_t*>(_First1));\r\n                const uint8x8_t _Val2 = vld1_u8(static_cast<uint8_t*>(_First2));\r\n                const uint8x8_t _Val3 = vld1_u8(static_cast<uint8_t*>(_First3));\r\n                vst1_u8(static_cast<uint8_t*>(_First1), _Val2);\r\n                vst1_u8(static_cast<uint8_t*>(_First2), _Val3);\r\n                vst1_u8(static_cast<uint8_t*>(_First3), _Val1);\r\n                _Advance_bytes(_First1, 8);\r\n                _Advance_bytes(_First2, 8);\r\n                _Advance_bytes(_First3, 8);\r\n            }\r\n\r\n            if (_Byte_length(_First1, _Last1) >= 4) {\r\n                uint32x2_t _Val1 = vdup_n_u32(0);\r\n                uint32x2_t _Val2 = vdup_n_u32(0);\r\n                uint32x2_t _Val3 = vdup_n_u32(0);\r\n                _Val1            = vld1_lane_u32(static_cast<uint32_t*>(_First1), _Val1, 0);\r\n                _Val2            = vld1_lane_u32(static_cast<uint32_t*>(_First2), _Val2, 0);\r\n                _Val3            = vld1_lane_u32(static_cast<uint32_t*>(_First3), _Val3, 0);\r\n                vst1_lane_u32(static_cast<uint32_t*>(_First1), _Val2, 0);\r\n                vst1_lane_u32(static_cast<uint32_t*>(_First2), _Val3, 0);\r\n                vst1_lane_u32(static_cast<uint32_t*>(_First3), _Val1, 0);\r\n                _Advance_bytes(_First1, 4);\r\n                _Advance_bytes(_First2, 4);\r\n                _Advance_bytes(_First3, 4);\r\n            }\r\n\r\n            auto _First1c = static_cast<unsigned char*>(_First1);\r\n            auto _First2c = static_cast<unsigned char*>(_First2);\r\n            auto _First3c = static_cast<unsigned char*>(_First3);\r\n            for (; _First1c != _Last1; ++_First1c, ++_First2c, ++_First3c) {\r\n                const unsigned char _Ch = *_First1c;\r\n                *_First1c               = *_First2c;\r\n                *_First2c               = *_First3c;\r\n                *_First3c               = _Ch;\r\n            }\r\n        }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        void _Swap_3_ranges(void* _First1, void* const _Last1, void* _First2, void* _First3) noexcept {\r\n            constexpr size_t _Mask_32 = ~((static_cast<size_t>(1) << 5) - 1);\r\n            if (_Byte_length(_First1, _Last1) >= 32 && _Use_avx2()) {\r\n                const void* _Stop_at = _First1;\r\n                _Advance_bytes(_Stop_at, _Byte_length(_First1, _Last1) & _Mask_32);\r\n                do {\r\n                    const __m256i _Val1 = _mm256_loadu_si256(static_cast<__m256i*>(_First1));\r\n                    const __m256i _Val2 = _mm256_loadu_si256(static_cast<__m256i*>(_First2));\r\n                    const __m256i _Val3 = _mm256_loadu_si256(static_cast<__m256i*>(_First3));\r\n                    _mm256_storeu_si256(static_cast<__m256i*>(_First1), _Val2);\r\n                    _mm256_storeu_si256(static_cast<__m256i*>(_First2), _Val3);\r\n                    _mm256_storeu_si256(static_cast<__m256i*>(_First3), _Val1);\r\n                    _Advance_bytes(_First1, 32);\r\n                    _Advance_bytes(_First2, 32);\r\n                    _Advance_bytes(_First3, 32);\r\n                } while (_First1 != _Stop_at);\r\n\r\n                _mm256_zeroupper(); // TRANSITION, DevCom-10331414\r\n            }\r\n\r\n            constexpr size_t _Mask_16 = ~((static_cast<size_t>(1) << 4) - 1);\r\n            if (_Byte_length(_First1, _Last1) >= 16 && _Use_sse42()) {\r\n                const void* _Stop_at = _First1;\r\n                _Advance_bytes(_Stop_at, _Byte_length(_First1, _Last1) & _Mask_16);\r\n                do {\r\n                    const __m128i _Val1 = _mm_loadu_si128(static_cast<__m128i*>(_First1));\r\n                    const __m128i _Val2 = _mm_loadu_si128(static_cast<__m128i*>(_First2));\r\n                    const __m128i _Val3 = _mm_loadu_si128(static_cast<__m128i*>(_First3));\r\n                    _mm_storeu_si128(static_cast<__m128i*>(_First1), _Val2);\r\n                    _mm_storeu_si128(static_cast<__m128i*>(_First2), _Val3);\r\n                    _mm_storeu_si128(static_cast<__m128i*>(_First3), _Val1);\r\n                    _Advance_bytes(_First1, 16);\r\n                    _Advance_bytes(_First2, 16);\r\n                    _Advance_bytes(_First3, 16);\r\n                } while (_First1 != _Stop_at);\r\n            }\r\n\r\n#ifdef _WIN64\r\n            constexpr size_t _Mask_8 = ~((static_cast<size_t>(1) << 3) - 1);\r\n            if (_Byte_length(_First1, _Last1) >= 8) {\r\n                const void* _Stop_at = _First1;\r\n                _Advance_bytes(_Stop_at, _Byte_length(_First1, _Last1) & _Mask_8);\r\n                do {\r\n                    unsigned long long _Val1;\r\n                    unsigned long long _Val2;\r\n                    unsigned long long _Val3;\r\n                    memcpy(&_Val1, _First1, 8);\r\n                    memcpy(&_Val2, _First2, 8);\r\n                    memcpy(&_Val3, _First3, 8);\r\n                    memcpy(_First1, &_Val2, 8);\r\n                    memcpy(_First2, &_Val3, 8);\r\n                    memcpy(_First3, &_Val1, 8);\r\n                    _Advance_bytes(_First1, 8);\r\n                    _Advance_bytes(_First2, 8);\r\n                    _Advance_bytes(_First3, 8);\r\n                } while (_First1 != _Stop_at);\r\n            }\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n            constexpr size_t _Mask_4 = ~((static_cast<size_t>(1) << 2) - 1);\r\n            if (_Byte_length(_First1, _Last1) >= 4) {\r\n                const void* _Stop_at = _First1;\r\n                _Advance_bytes(_Stop_at, _Byte_length(_First1, _Last1) & _Mask_4);\r\n                do {\r\n                    unsigned long _Val1;\r\n                    unsigned long _Val2;\r\n                    unsigned long _Val3;\r\n                    memcpy(&_Val1, _First1, 4);\r\n                    memcpy(&_Val2, _First2, 4);\r\n                    memcpy(&_Val3, _First3, 4);\r\n                    memcpy(_First1, &_Val2, 4);\r\n                    memcpy(_First2, &_Val3, 4);\r\n                    memcpy(_First3, &_Val1, 4);\r\n                    _Advance_bytes(_First1, 4);\r\n                    _Advance_bytes(_First2, 4);\r\n                    _Advance_bytes(_First3, 4);\r\n                } while (_First1 != _Stop_at);\r\n            }\r\n#endif // ^^^ 32-bit ^^^\r\n\r\n            auto _First1c = static_cast<unsigned char*>(_First1);\r\n            auto _First2c = static_cast<unsigned char*>(_First2);\r\n            auto _First3c = static_cast<unsigned char*>(_First3);\r\n            for (; _First1c != _Last1; ++_First1c, ++_First2c, ++_First3c) {\r\n                const unsigned char _Ch = *_First1c;\r\n                *_First1c               = *_First2c;\r\n                *_First2c               = *_First3c;\r\n                *_First3c               = _Ch;\r\n            }\r\n        }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n        constexpr size_t _Buf_size = 512;\r\n\r\n        bool _Use_buffer(const size_t _Smaller, const size_t _Larger) noexcept {\r\n            return _Smaller <= _Buf_size && (_Smaller <= 128 || _Larger >= _Smaller * 2);\r\n        }\r\n    } // namespace _Rotating\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n__declspec(noalias) void __stdcall __std_rotate(void* _First, void* const _Mid, void* _Last) noexcept {\r\n    unsigned char _Buf[_Rotating::_Buf_size];\r\n\r\n    for (;;) {\r\n        const size_t _Left  = _Byte_length(_First, _Mid);\r\n        const size_t _Right = _Byte_length(_Mid, _Last);\r\n\r\n        if (_Left <= _Right) {\r\n            if (_Left == 0) {\r\n                break;\r\n            }\r\n\r\n            if (_Rotating::_Use_buffer(_Left, _Right)) {\r\n                memcpy(_Buf, _First, _Left);\r\n                memmove(_First, _Mid, _Right);\r\n                _Advance_bytes(_First, _Right);\r\n                memcpy(_First, _Buf, _Left);\r\n                break;\r\n            }\r\n\r\n            void* _Mid2 = _Last;\r\n            _Rewind_bytes(_Mid2, _Left);\r\n            if (_Left * 2 > _Right) {\r\n                __std_swap_ranges_trivially_swappable_noalias(_Mid2, _Last, _First);\r\n                _Last = _Mid2;\r\n            } else {\r\n                void* _Mid3 = _Mid2;\r\n                _Rewind_bytes(_Mid3, _Left);\r\n                _Rotating::_Swap_3_ranges(_Mid2, _Last, _First, _Mid3);\r\n                _Last = _Mid3;\r\n            }\r\n        } else {\r\n            if (_Right == 0) {\r\n                break;\r\n            }\r\n\r\n            if (_Rotating::_Use_buffer(_Right, _Left)) {\r\n                _Rewind_bytes(_Last, _Right);\r\n                memcpy(_Buf, _Last, _Right);\r\n                void* _Mid2 = _First;\r\n                _Advance_bytes(_Mid2, _Right);\r\n                memmove(_Mid2, _First, _Left);\r\n                memcpy(_First, _Buf, _Right);\r\n                break;\r\n            }\r\n\r\n            if (_Right * 2 > _Left) {\r\n                __std_swap_ranges_trivially_swappable_noalias(_Mid, _Last, _First);\r\n                _Advance_bytes(_First, _Right);\r\n            } else {\r\n                void* _Mid2 = _First;\r\n                _Advance_bytes(_Mid2, _Right);\r\n                _Rotating::_Swap_3_ranges(_Mid, _Last, _Mid2, _First);\r\n                _Advance_bytes(_First, _Right * 2);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n} // extern \"C\"\r\n\r\nnamespace {\r\n    namespace _Reversing {\r\n        template <class _BidIt>\r\n        void _Reverse_tail(_BidIt _First, _BidIt _Last) noexcept {\r\n            for (; _First != _Last && _First != --_Last; ++_First) {\r\n                const auto _Temp = *_First;\r\n                *_First          = *_Last;\r\n                *_Last           = _Temp;\r\n            }\r\n        }\r\n\r\n        template <class _BidIt, class _OutIt>\r\n        void _Reverse_copy_tail(const _BidIt _First, _BidIt _Last, _OutIt _Dest) noexcept {\r\n            while (_First != _Last) {\r\n                *_Dest++ = *--_Last;\r\n            }\r\n        }\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        struct _Traits_1 {\r\n            static uint8x8_t _Rev(const uint8x8_t _Val) noexcept {\r\n                return vrev64_u8(_Val);\r\n            }\r\n\r\n            static uint8x16_t _Rev(const uint8x16_t _Val) noexcept {\r\n                const uint8x16_t _Rev_val = vrev64q_u8(_Val);\r\n                return vextq_u8(_Rev_val, _Rev_val, 8);\r\n            }\r\n        };\r\n\r\n        struct _Traits_2 {\r\n            static uint8x8_t _Rev(const uint8x8_t _Val) noexcept {\r\n                return vreinterpret_u8_u16(vrev64_u16(vreinterpret_u16_u8(_Val)));\r\n            }\r\n\r\n            static uint8x16_t _Rev(const uint8x16_t _Val) noexcept {\r\n                const uint8x16_t _Rev_val = vreinterpretq_u8_u16(vrev64q_u16(vreinterpretq_u16_u8(_Val)));\r\n                return vextq_u8(_Rev_val, _Rev_val, 8);\r\n            }\r\n        };\r\n\r\n        struct _Traits_4 {\r\n            static uint8x8_t _Rev(const uint8x8_t _Val) noexcept {\r\n                return vreinterpret_u8_u32(vrev64_u32(vreinterpret_u32_u8(_Val)));\r\n            }\r\n\r\n            static uint8x16_t _Rev(const uint8x16_t _Val) noexcept {\r\n                const uint8x16_t _Rev_val = vreinterpretq_u8_u32(vrev64q_u32(vreinterpretq_u32_u8(_Val)));\r\n                return vextq_u8(_Rev_val, _Rev_val, 8);\r\n            }\r\n        };\r\n\r\n        struct _Traits_8 {\r\n            static uint8x8_t _Rev(const uint8x8_t _Val) noexcept {\r\n                return _Val;\r\n            }\r\n\r\n            static uint8x16_t _Rev(const uint8x16_t _Val) noexcept {\r\n                return vextq_u8(_Val, _Val, 8);\r\n            }\r\n        };\r\n\r\n        template <class _Traits, class _Ty>\r\n        __declspec(noalias) void __cdecl _Reverse_impl(void* _First, void* _Last) noexcept {\r\n            if (const size_t _Length = _Byte_length(_First, _Last); _Length >= 64) {\r\n                const void* _Stop_at      = _First;\r\n                constexpr size_t _Mask_32 = ~((static_cast<size_t>(1) << 5) - 1);\r\n                _Advance_bytes(_Stop_at, (_Length >> 1) & _Mask_32);\r\n                do {\r\n                    _Advance_bytes(_Last, -32);\r\n\r\n                    const uint8x16_t _Left1  = vld1q_u8(static_cast<uint8_t*>(_First) + 0);\r\n                    const uint8x16_t _Left2  = vld1q_u8(static_cast<uint8_t*>(_First) + 16);\r\n                    const uint8x16_t _Right1 = vld1q_u8(static_cast<uint8_t*>(_Last) + 0);\r\n                    const uint8x16_t _Right2 = vld1q_u8(static_cast<uint8_t*>(_Last) + 16);\r\n\r\n                    const uint8x16_t _Left1_reversed  = _Traits::_Rev(_Left1);\r\n                    const uint8x16_t _Left2_reversed  = _Traits::_Rev(_Left2);\r\n                    const uint8x16_t _Right1_reversed = _Traits::_Rev(_Right1);\r\n                    const uint8x16_t _Right2_reversed = _Traits::_Rev(_Right2);\r\n\r\n                    vst1q_u8(static_cast<uint8_t*>(_First) + 0, _Right2_reversed);\r\n                    vst1q_u8(static_cast<uint8_t*>(_First) + 16, _Right1_reversed);\r\n                    vst1q_u8(static_cast<uint8_t*>(_Last) + 0, _Left2_reversed);\r\n                    vst1q_u8(static_cast<uint8_t*>(_Last) + 16, _Left1_reversed);\r\n\r\n                    _Advance_bytes(_First, 32);\r\n                } while (_First != _Stop_at);\r\n            }\r\n\r\n            if (const size_t _Length = _Byte_length(_First, _Last); _Length >= 32) {\r\n                _Advance_bytes(_Last, -16);\r\n                const uint8x16_t _Left  = vld1q_u8(static_cast<uint8_t*>(_First));\r\n                const uint8x16_t _Right = vld1q_u8(static_cast<uint8_t*>(_Last));\r\n\r\n                const uint8x16_t _Left_reversed  = _Traits::_Rev(_Left);\r\n                const uint8x16_t _Right_reversed = _Traits::_Rev(_Right);\r\n\r\n                vst1q_u8(static_cast<uint8_t*>(_First), _Right_reversed);\r\n                vst1q_u8(static_cast<uint8_t*>(_Last), _Left_reversed);\r\n                _Advance_bytes(_First, 16);\r\n            }\r\n\r\n            if (const size_t _Length = _Byte_length(_First, _Last); _Length >= 16) {\r\n                _Advance_bytes(_Last, -8);\r\n                const uint8x8_t _Left  = vld1_u8(static_cast<uint8_t*>(_First));\r\n                const uint8x8_t _Right = vld1_u8(static_cast<uint8_t*>(_Last));\r\n\r\n                const uint8x8_t _Left_reversed  = _Traits::_Rev(_Left);\r\n                const uint8x8_t _Right_reversed = _Traits::_Rev(_Right);\r\n\r\n                vst1_u8(static_cast<uint8_t*>(_First), _Right_reversed);\r\n                vst1_u8(static_cast<uint8_t*>(_Last), _Left_reversed);\r\n                _Advance_bytes(_First, 8);\r\n            }\r\n\r\n            if constexpr (sizeof(_Ty) < 8) {\r\n                if (const size_t _Length = _Byte_length(_First, _Last); _Length >= 8) {\r\n                    _Advance_bytes(_Last, -8);\r\n\r\n                    // Intentional overlapped loads/stores: read both sides first, then write.\r\n                    const uint8x8_t _Left  = vld1_u8(static_cast<uint8_t*>(_First));\r\n                    const uint8x8_t _Right = vld1_u8(static_cast<uint8_t*>(_Last));\r\n\r\n                    const uint8x8_t _Left_reversed  = _Traits::_Rev(_Left);\r\n                    const uint8x8_t _Right_reversed = _Traits::_Rev(_Right);\r\n\r\n                    vst1_u8(static_cast<uint8_t*>(_First), _Right_reversed);\r\n                    vst1_u8(static_cast<uint8_t*>(_Last), _Left_reversed);\r\n\r\n                    // Overlapped stores cover any 8-15B remainder, so do not fall through to scalar tail.\r\n                    return;\r\n                }\r\n            }\r\n\r\n            if constexpr (sizeof(_Ty) < 4) {\r\n                _Reverse_tail(static_cast<_Ty*>(_First), static_cast<_Ty*>(_Last));\r\n            }\r\n        }\r\n\r\n        template <class _Traits, class _Ty>\r\n        __declspec(noalias) void __cdecl _Reverse_copy_impl(\r\n            const void* _First, const void* _Last, void* _Dest) noexcept {\r\n            if (const size_t _Length = _Byte_length(_First, _Last); _Length >= 64) {\r\n                const void* _Stop_at      = _Dest;\r\n                constexpr size_t _Mask_64 = ~((static_cast<size_t>(1) << 6) - 1);\r\n                _Advance_bytes(_Stop_at, _Length & _Mask_64);\r\n                do {\r\n                    _Advance_bytes(_Last, -64);\r\n                    const uint8x16_t _Block1 = vld1q_u8(static_cast<const uint8_t*>(_Last) + 0);\r\n                    const uint8x16_t _Block2 = vld1q_u8(static_cast<const uint8_t*>(_Last) + 16);\r\n                    const uint8x16_t _Block3 = vld1q_u8(static_cast<const uint8_t*>(_Last) + 32);\r\n                    const uint8x16_t _Block4 = vld1q_u8(static_cast<const uint8_t*>(_Last) + 48);\r\n\r\n                    const uint8x16_t _Block1_reversed = _Traits::_Rev(_Block1);\r\n                    const uint8x16_t _Block2_reversed = _Traits::_Rev(_Block2);\r\n                    const uint8x16_t _Block3_reversed = _Traits::_Rev(_Block3);\r\n                    const uint8x16_t _Block4_reversed = _Traits::_Rev(_Block4);\r\n\r\n                    vst1q_u8(static_cast<uint8_t*>(_Dest) + 0, _Block4_reversed);\r\n                    vst1q_u8(static_cast<uint8_t*>(_Dest) + 16, _Block3_reversed);\r\n                    vst1q_u8(static_cast<uint8_t*>(_Dest) + 32, _Block2_reversed);\r\n                    vst1q_u8(static_cast<uint8_t*>(_Dest) + 48, _Block1_reversed);\r\n                    _Advance_bytes(_Dest, 64);\r\n                } while (_Dest != _Stop_at);\r\n            }\r\n\r\n            if (const size_t _Length = _Byte_length(_First, _Last); _Length >= 32) {\r\n                _Advance_bytes(_Last, -32);\r\n                const uint8x16_t _Block1 = vld1q_u8(static_cast<const uint8_t*>(_Last) + 0);\r\n                const uint8x16_t _Block2 = vld1q_u8(static_cast<const uint8_t*>(_Last) + 16);\r\n\r\n                const uint8x16_t _Block1_reversed = _Traits::_Rev(_Block1);\r\n                const uint8x16_t _Block2_reversed = _Traits::_Rev(_Block2);\r\n\r\n                vst1q_u8(static_cast<uint8_t*>(_Dest) + 0, _Block2_reversed);\r\n                vst1q_u8(static_cast<uint8_t*>(_Dest) + 16, _Block1_reversed);\r\n                _Advance_bytes(_Dest, 32);\r\n            }\r\n\r\n            if (const size_t _Length = _Byte_length(_First, _Last); _Length >= 16) {\r\n                _Advance_bytes(_Last, -16);\r\n                const uint8x16_t _Block          = vld1q_u8(static_cast<const uint8_t*>(_Last));\r\n                const uint8x16_t _Block_reversed = _Traits::_Rev(_Block);\r\n                vst1q_u8(static_cast<uint8_t*>(_Dest), _Block_reversed);\r\n                _Advance_bytes(_Dest, 16);\r\n            }\r\n\r\n            if (const size_t _Length = _Byte_length(_First, _Last); _Length >= 8) {\r\n                _Advance_bytes(_Last, -8);\r\n                const uint8x8_t _Block          = vld1_u8(static_cast<const uint8_t*>(_Last));\r\n                const uint8x8_t _Block_reversed = _Traits::_Rev(_Block);\r\n                vst1_u8(static_cast<uint8_t*>(_Dest), _Block_reversed);\r\n                _Advance_bytes(_Dest, 8);\r\n            }\r\n\r\n            if constexpr (sizeof(_Ty) < 8) {\r\n                _Reverse_copy_tail(\r\n                    static_cast<const _Ty*>(_First), static_cast<const _Ty*>(_Last), static_cast<_Ty*>(_Dest));\r\n            }\r\n        }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        struct _Traits_1 {\r\n            static __m256i _Rev_avx(const __m256i _Val) noexcept {\r\n                const __m256i _Reverse_char_lanes_avx = _mm256_set_epi8( //\r\n                    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, //\r\n                    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\r\n\r\n                const __m256i _Perm = _mm256_permute4x64_epi64(_Val, _MM_SHUFFLE(1, 0, 3, 2));\r\n                return _mm256_shuffle_epi8(_Perm, _Reverse_char_lanes_avx);\r\n            }\r\n\r\n            static __m128i _Rev_sse(const __m128i _Val) noexcept {\r\n                const __m128i _Reverse_char_sse = _mm_set_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\r\n                return _mm_shuffle_epi8(_Val, _Reverse_char_sse);\r\n            }\r\n        };\r\n\r\n        struct _Traits_2 {\r\n            static __m256i _Rev_avx(const __m256i _Val) noexcept {\r\n                const __m256i _Reverse_short_lanes_avx = _mm256_set_epi8( //\r\n                    1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, //\r\n                    1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14);\r\n\r\n                const __m256i _Perm = _mm256_permute4x64_epi64(_Val, _MM_SHUFFLE(1, 0, 3, 2));\r\n                return _mm256_shuffle_epi8(_Perm, _Reverse_short_lanes_avx);\r\n            }\r\n\r\n            static __m128i _Rev_sse(const __m128i _Val) noexcept {\r\n                const __m128i _Reverse_short_sse = _mm_set_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14);\r\n                return _mm_shuffle_epi8(_Val, _Reverse_short_sse);\r\n            }\r\n        };\r\n\r\n        struct _Traits_4 {\r\n            static __m256i _Rev_avx(const __m256i _Val) noexcept {\r\n                const __m256i _Shuf = _mm256_set_epi32(0, 1, 2, 3, 4, 5, 6, 7);\r\n                return _mm256_permutevar8x32_epi32(_Val, _Shuf);\r\n            }\r\n\r\n            static __m128i _Rev_sse(const __m128i _Val) noexcept {\r\n                return _mm_shuffle_epi32(_Val, _MM_SHUFFLE(0, 1, 2, 3));\r\n            }\r\n        };\r\n\r\n        struct _Traits_8 {\r\n            static __m256i _Rev_avx(const __m256i _Val) noexcept {\r\n                return _mm256_permute4x64_epi64(_Val, _MM_SHUFFLE(0, 1, 2, 3));\r\n            }\r\n\r\n            static __m128i _Rev_sse(const __m128i _Val) noexcept {\r\n                return _mm_shuffle_epi32(_Val, _MM_SHUFFLE(1, 0, 3, 2));\r\n            }\r\n        };\r\n\r\n        __m256i _Avx2_rev_tail_mask_32(const size_t _Count_in_bytes) noexcept {\r\n            // _Count_in_bytes must be within [0, 32].\r\n            static constexpr unsigned int _Tail_masks[16] = {\r\n                0, 0, 0, 0, 0, 0, 0, 0, ~0u, ~0u, ~0u, ~0u, ~0u, ~0u, ~0u, ~0u};\r\n            return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(\r\n                reinterpret_cast<const unsigned char*>(_Tail_masks) + _Count_in_bytes));\r\n        }\r\n\r\n        template <class _Traits, class _Ty>\r\n        __declspec(noalias) void __cdecl _Reverse_impl(void* _First, void* _Last) noexcept {\r\n            if (const size_t _Length = _Byte_length(_First, _Last); _Length >= 64 && _Use_avx2()) {\r\n                const void* _Stop_at = _First;\r\n                _Advance_bytes(_Stop_at, (_Length >> 1) & ~size_t{0x1F});\r\n                do {\r\n                    _Advance_bytes(_Last, -32);\r\n                    const __m256i _Left           = _mm256_loadu_si256(static_cast<__m256i*>(_First));\r\n                    const __m256i _Right          = _mm256_loadu_si256(static_cast<__m256i*>(_Last));\r\n                    const __m256i _Left_reversed  = _Traits::_Rev_avx(_Left);\r\n                    const __m256i _Right_reversed = _Traits::_Rev_avx(_Right);\r\n                    _mm256_storeu_si256(static_cast<__m256i*>(_First), _Right_reversed);\r\n                    _mm256_storeu_si256(static_cast<__m256i*>(_Last), _Left_reversed);\r\n                    _Advance_bytes(_First, 32);\r\n                } while (_First != _Stop_at);\r\n\r\n                _mm256_zeroupper(); // TRANSITION, DevCom-10331414\r\n            }\r\n\r\n            if (const size_t _Length = _Byte_length(_First, _Last); _Length >= 32 && _Use_sse42()) {\r\n                const void* _Stop_at = _First;\r\n                _Advance_bytes(_Stop_at, (_Length >> 1) & ~size_t{0xF});\r\n                do {\r\n                    _Advance_bytes(_Last, -16);\r\n                    const __m128i _Left           = _mm_loadu_si128(static_cast<__m128i*>(_First));\r\n                    const __m128i _Right          = _mm_loadu_si128(static_cast<__m128i*>(_Last));\r\n                    const __m128i _Left_reversed  = _Traits::_Rev_sse(_Left);\r\n                    const __m128i _Right_reversed = _Traits::_Rev_sse(_Right);\r\n                    _mm_storeu_si128(static_cast<__m128i*>(_First), _Right_reversed);\r\n                    _mm_storeu_si128(static_cast<__m128i*>(_Last), _Left_reversed);\r\n                    _Advance_bytes(_First, 16);\r\n                } while (_First != _Stop_at);\r\n            }\r\n\r\n            _Reverse_tail(static_cast<_Ty*>(_First), static_cast<_Ty*>(_Last));\r\n        }\r\n\r\n        template <class _Traits, class _Ty>\r\n        __declspec(noalias) void __cdecl _Reverse_copy_impl(\r\n            const void* _First, const void* _Last, void* _Dest) noexcept {\r\n            if (const size_t _Length = _Byte_length(_First, _Last); _Length >= 32 && _Use_avx2()) {\r\n                const void* _Stop_at = _Dest;\r\n                _Advance_bytes(_Stop_at, _Length & ~size_t{0x1F});\r\n                do {\r\n                    _Advance_bytes(_Last, -32);\r\n                    const __m256i _Block          = _mm256_loadu_si256(static_cast<const __m256i*>(_Last));\r\n                    const __m256i _Block_reversed = _Traits::_Rev_avx(_Block);\r\n                    _mm256_storeu_si256(static_cast<__m256i*>(_Dest), _Block_reversed);\r\n                    _Advance_bytes(_Dest, 32);\r\n                } while (_Dest != _Stop_at);\r\n\r\n                if (const size_t _Avx_tail = _Length & 0x1C; _Avx_tail != 0) {\r\n                    _Advance_bytes(_Last, -32);\r\n                    const __m256i _Mask           = _Avx2_tail_mask_32(_Avx_tail);\r\n                    const __m256i _Rev_mask       = _Avx2_rev_tail_mask_32(_Avx_tail);\r\n                    const __m256i _Block          = _mm256_maskload_epi32(static_cast<const int*>(_Last), _Rev_mask);\r\n                    const __m256i _Block_reversed = _Traits::_Rev_avx(_Block);\r\n                    _mm256_maskstore_epi32(static_cast<int*>(_Dest), _Mask, _Block_reversed);\r\n                    if constexpr (sizeof(_Ty) < 4) {\r\n                        _Advance_bytes(_Dest, _Avx_tail);\r\n                        _Advance_bytes(_Last, 32 - _Avx_tail);\r\n                    }\r\n                }\r\n\r\n                _mm256_zeroupper(); // TRANSITION, DevCom-10331414\r\n\r\n                if constexpr (sizeof(_Ty) >= 4) {\r\n                    return;\r\n                }\r\n            } else if (_Length >= 16 && _Use_sse42()) {\r\n                const void* _Stop_at = _Dest;\r\n                _Advance_bytes(_Stop_at, _Length & ~size_t{0xF});\r\n                do {\r\n                    _Advance_bytes(_Last, -16);\r\n                    const __m128i _Block          = _mm_loadu_si128(static_cast<const __m128i*>(_Last));\r\n                    const __m128i _Block_reversed = _Traits::_Rev_sse(_Block);\r\n                    _mm_storeu_si128(static_cast<__m128i*>(_Dest), _Block_reversed);\r\n                    _Advance_bytes(_Dest, 16);\r\n                } while (_Dest != _Stop_at);\r\n            }\r\n\r\n            _Reverse_copy_tail(\r\n                static_cast<const _Ty*>(_First), static_cast<const _Ty*>(_Last), static_cast<_Ty*>(_Dest));\r\n        }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n    } // namespace _Reversing\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n__declspec(noalias) void __cdecl __std_reverse_trivially_swappable_1(void* _First, void* _Last) noexcept {\r\n    _Reversing::_Reverse_impl<_Reversing::_Traits_1, uint8_t>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) void __cdecl __std_reverse_trivially_swappable_2(void* _First, void* _Last) noexcept {\r\n    _Reversing::_Reverse_impl<_Reversing::_Traits_2, uint16_t>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) void __cdecl __std_reverse_trivially_swappable_4(void* _First, void* _Last) noexcept {\r\n    _Reversing::_Reverse_impl<_Reversing::_Traits_4, uint32_t>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) void __cdecl __std_reverse_trivially_swappable_8(void* _First, void* _Last) noexcept {\r\n    _Reversing::_Reverse_impl<_Reversing::_Traits_8, uint64_t>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) void __cdecl __std_reverse_copy_trivially_copyable_1(\r\n    const void* _First, const void* _Last, void* _Dest) noexcept {\r\n    _Reversing::_Reverse_copy_impl<_Reversing::_Traits_1, uint8_t>(_First, _Last, _Dest);\r\n}\r\n\r\n__declspec(noalias) void __cdecl __std_reverse_copy_trivially_copyable_2(\r\n    const void* _First, const void* _Last, void* _Dest) noexcept {\r\n    _Reversing::_Reverse_copy_impl<_Reversing::_Traits_2, uint16_t>(_First, _Last, _Dest);\r\n}\r\n\r\n__declspec(noalias) void __cdecl __std_reverse_copy_trivially_copyable_4(\r\n    const void* _First, const void* _Last, void* _Dest) noexcept {\r\n    _Reversing::_Reverse_copy_impl<_Reversing::_Traits_4, uint32_t>(_First, _Last, _Dest);\r\n}\r\n\r\n__declspec(noalias) void __cdecl __std_reverse_copy_trivially_copyable_8(\r\n    const void* _First, const void* _Last, void* _Dest) noexcept {\r\n    _Reversing::_Reverse_copy_impl<_Reversing::_Traits_8, uint64_t>(_First, _Last, _Dest);\r\n}\r\n\r\n} // extern \"C\"\r\n\r\nnamespace {\r\n    namespace _Sorting {\r\n        // The 'minmax' and 'minmax_element' algorithms first compare vectors against other vectors\r\n        // (\"vertical\" comparisons), then elements of the same vector (\"horizontal\" comparisons).\r\n        // For 'minmax' that's it.\r\n        //\r\n        // 'minmax_element' needs to track element positions, so it has a vector of integers that is incremented,\r\n        // and min/max indices vectors.\r\n        // Since small integer indices for small elements may overflow, we sometimes have to do the horizontal part\r\n        // more often than just once at the end.\r\n\r\n        enum _Min_max_mode {\r\n            _Mode_min  = 1 << 0,\r\n            _Mode_max  = 1 << 1,\r\n            _Mode_both = _Mode_min | _Mode_max,\r\n        };\r\n\r\n        template <class _Base>\r\n        struct _Traits_scalar : _Base {\r\n            static constexpr bool _Vectorized       = false;\r\n            static constexpr size_t _Tail_mask      = 0;\r\n            static constexpr bool _Has_unsigned_cmp = false;\r\n            using _Vec_t                            = void;\r\n        };\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        struct _Traits_neon_base {\r\n            using _Guard                            = char;\r\n            static constexpr bool _Vectorized       = true;\r\n            static constexpr size_t _Vec_size       = 16;\r\n            static constexpr size_t _Vec_mask       = 0xF;\r\n            static constexpr size_t _Tail_mask      = 0;\r\n            static constexpr bool _Has_unsigned_cmp = true;\r\n\r\n            static void _Exit_vectorized() noexcept {}\r\n        };\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        struct _Traits_sse_base {\r\n            using _Guard                            = char;\r\n            static constexpr bool _Vectorized       = true;\r\n            static constexpr size_t _Vec_size       = 16;\r\n            static constexpr size_t _Vec_mask       = 0xF;\r\n            static constexpr size_t _Tail_mask      = 0;\r\n            static constexpr bool _Has_unsigned_cmp = false;\r\n            using _Vec_t                            = __m128i;\r\n\r\n            static __m128i _Zero() noexcept {\r\n                return _mm_setzero_si128();\r\n            }\r\n\r\n            static __m128i _All_ones() noexcept {\r\n                return _mm_set1_epi8(static_cast<char>(0xFF));\r\n            }\r\n\r\n            static __m128i _Blend(const __m128i _Px1, const __m128i _Px2, const __m128i _Msk) noexcept {\r\n                return _mm_blendv_epi8(_Px1, _Px2, _Msk);\r\n            }\r\n\r\n            static unsigned long _Mask(const __m128i _Val) noexcept {\r\n                return _mm_movemask_epi8(_Val);\r\n            }\r\n\r\n            static void _Exit_vectorized() noexcept {}\r\n\r\n            static unsigned long _Get_first_h_pos(const unsigned long _Mask) noexcept {\r\n                unsigned long _H_pos;\r\n                // CodeQL [SM02313] _H_pos is always initialized: element exists, so _Mask != 0.\r\n                _BitScanForward(&_H_pos, _Mask);\r\n                return _H_pos;\r\n            }\r\n\r\n            static unsigned long _Get_last_h_pos(const unsigned long _Mask) noexcept {\r\n                unsigned long _H_pos;\r\n                // CodeQL [SM02313] _H_pos is always initialized: element exists, so _Mask != 0.\r\n                _BitScanReverse(&_H_pos, _Mask);\r\n                return _H_pos;\r\n            }\r\n        };\r\n\r\n        struct _Traits_avx_base {\r\n            using _Guard                            = _Zeroupper_on_exit;\r\n            static constexpr bool _Vectorized       = true;\r\n            static constexpr size_t _Vec_size       = 32;\r\n            static constexpr size_t _Vec_mask       = 0x1F;\r\n            static constexpr bool _Has_unsigned_cmp = false;\r\n\r\n            static __m256i _Zero() noexcept {\r\n                return _mm256_setzero_si256();\r\n            }\r\n\r\n            static __m256i _All_ones() noexcept {\r\n                return _mm256_set1_epi8(static_cast<char>(0xFF));\r\n            }\r\n\r\n            static __m256i _Blend(const __m256i _Px1, const __m256i _Px2, const __m256i _Msk) noexcept {\r\n                return _mm256_blendv_epi8(_Px1, _Px2, _Msk);\r\n            }\r\n\r\n            static unsigned long _Mask(const __m256i _Val) noexcept {\r\n                return _mm256_movemask_epi8(_Val);\r\n            }\r\n\r\n            static void _Exit_vectorized() noexcept {\r\n                _mm256_zeroupper();\r\n            }\r\n\r\n            static unsigned long _Get_first_h_pos(const unsigned long _Mask) noexcept {\r\n                return _tzcnt_u32(_Mask);\r\n            }\r\n\r\n            static unsigned long _Get_last_h_pos(const unsigned long _Mask) noexcept {\r\n                return 31 - _lzcnt_u32(_Mask);\r\n            }\r\n        };\r\n\r\n        struct _Traits_avx_i_base : _Traits_avx_base {\r\n            static constexpr size_t _Tail_mask = 0x1C;\r\n            using _Vec_t                       = __m256i;\r\n\r\n            static __m256i _Blendval(const __m256i _Px1, const __m256i _Px2, const __m256i _Msk) noexcept {\r\n                return _mm256_blendv_epi8(_Px1, _Px2, _Msk);\r\n            }\r\n\r\n            static __m256i _Load_mask(const void* const _Src, const __m256i _Mask) noexcept {\r\n                return _mm256_maskload_epi32(reinterpret_cast<const int*>(_Src), _Mask);\r\n            }\r\n        };\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n        struct _Traits_1_base {\r\n            static constexpr bool _Is_floating = false;\r\n\r\n            using _Signed_t   = int8_t;\r\n            using _Unsigned_t = uint8_t;\r\n\r\n            static constexpr _Signed_t _Init_min_val = static_cast<_Signed_t>(0x7F);\r\n            static constexpr _Signed_t _Init_max_val = static_cast<_Signed_t>(0x80);\r\n\r\n            using _Minmax_i_t = _Min_max_1i;\r\n            using _Minmax_u_t = _Min_max_1u;\r\n\r\n            static constexpr bool _Has_portion_max = true;\r\n            static constexpr size_t _Portion_max   = 256;\r\n        };\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        struct _Traits_1_neon : _Traits_1_base, _Traits_neon_base {\r\n            using _Vec_t = int8x16_t;\r\n\r\n            static _Vec_t _Sign_correction(const _Vec_t _Val, bool) noexcept {\r\n                return _Val;\r\n            }\r\n\r\n            static _Vec_t _Zero() noexcept {\r\n                return vdupq_n_s8(0);\r\n            }\r\n\r\n            static _Vec_t _All_ones() noexcept {\r\n                return vdupq_n_s8(static_cast<int8_t>(0xFF));\r\n            }\r\n\r\n            static _Vec_t _Blend(const _Vec_t _Px1, const _Vec_t _Px2, const _Vec_t _Msk) noexcept {\r\n                return vbslq_s8(vreinterpretq_u8_s8(_Msk), _Px2, _Px1);\r\n            }\r\n\r\n            // Compresses a 128-bit Mask of 16 8-bit values into a 64-bit Mask of 16 4-bit values.\r\n            static uint64_t _Mask(const _Vec_t _Val) noexcept {\r\n                const uint8x8_t _Res = vshrn_n_u16(vreinterpretq_u16_s8(_Val), 4);\r\n                return vget_lane_u64(vreinterpret_u64_u8(_Res), 0);\r\n            }\r\n\r\n            static uint64_t _Match_mask(const _Vec_t _Val_lo, const _Vec_t _Val_hi) noexcept {\r\n                const uint64x2_t _Val = vreinterpretq_u64_s8(vorrq_s8(_Val_lo, _Val_hi));\r\n                return vgetq_lane_u64(vpaddq_u64(_Val, _Val), 0);\r\n            }\r\n\r\n            static unsigned long _Get_first_h_pos(const uint64_t _Mask) noexcept {\r\n                return _CountTrailingZeros64(_Mask) >> 2;\r\n            }\r\n\r\n            static unsigned long _Get_last_h_pos(const uint64_t _Mask) noexcept {\r\n                return 15 - (_CountLeadingZeros64(_Mask) >> 2);\r\n            }\r\n\r\n            static _Vec_t _Load(const void* const _Src) noexcept {\r\n                return vld1q_s8(reinterpret_cast<const int8_t*>(_Src));\r\n            }\r\n\r\n            static _Vec_t _Inc(const _Vec_t _Idx) noexcept {\r\n                return vaddq_s8(_Idx, vdupq_n_s8(1));\r\n            }\r\n\r\n            static _Vec_t _H_min(const _Vec_t _Cur) noexcept {\r\n                return vdupq_n_s8(vminvq_s8(_Cur));\r\n            }\r\n\r\n            static _Vec_t _H_max(const _Vec_t _Cur) noexcept {\r\n                return vdupq_n_s8(vmaxvq_s8(_Cur));\r\n            }\r\n\r\n            static _Vec_t _H_min_u(const _Vec_t _Cur) noexcept {\r\n                const uint8_t _Mx = vminvq_u8(vreinterpretq_u8_s8(_Cur));\r\n                return vreinterpretq_s8_u8(vdupq_n_u8(_Mx));\r\n            }\r\n\r\n            static _Vec_t _H_max_u(const _Vec_t _Cur) noexcept {\r\n                const uint8_t _Mx = vmaxvq_u8(vreinterpretq_u8_s8(_Cur));\r\n                return vreinterpretq_s8_u8(vdupq_n_u8(_Mx));\r\n            }\r\n\r\n            static _Signed_t _Get_any(const _Vec_t _Cur) noexcept {\r\n                return static_cast<_Signed_t>(vgetq_lane_s8(_Cur, 0));\r\n            }\r\n\r\n            static _Unsigned_t _Get_v_pos(const _Vec_t _Cur) noexcept {\r\n                return static_cast<_Unsigned_t>(_Get_any(_Cur));\r\n            }\r\n\r\n            static _Vec_t _Cmp_eq(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return vreinterpretq_s8_u8(vceqq_s8(_First, _Second));\r\n            }\r\n\r\n            static _Vec_t _Cmp_gt(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return vreinterpretq_s8_u8(vcgtq_s8(_First, _Second));\r\n            }\r\n\r\n            static _Vec_t _Cmp_gt_u(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return vreinterpretq_s8_u8(vcgtq_u8(vreinterpretq_u8_s8(_First), vreinterpretq_u8_s8(_Second)));\r\n            }\r\n\r\n            static _Vec_t _Cmp_eq_idx(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return _Cmp_eq(_First, _Second);\r\n            }\r\n\r\n            static _Vec_t _Min(const _Vec_t _First, const _Vec_t _Second, _Vec_t = vdupq_n_s8(0)) noexcept {\r\n                return vminq_s8(_First, _Second);\r\n            }\r\n\r\n            static _Vec_t _Max(const _Vec_t _First, const _Vec_t _Second, _Vec_t = vdupq_n_s8(0)) noexcept {\r\n                return vmaxq_s8(_First, _Second);\r\n            }\r\n\r\n            static _Vec_t _Min_u(const _Vec_t _First, const _Vec_t _Second, _Vec_t = vdupq_n_s8(0)) noexcept {\r\n                const uint8x16_t _Rx = vminq_u8(vreinterpretq_u8_s8(_First), vreinterpretq_u8_s8(_Second));\r\n                return vreinterpretq_s8_u8(_Rx);\r\n            }\r\n\r\n            static _Vec_t _Max_u(const _Vec_t _First, const _Vec_t _Second, _Vec_t = vdupq_n_s8(0)) noexcept {\r\n                const uint8x16_t _Rx = vmaxq_u8(vreinterpretq_u8_s8(_First), vreinterpretq_u8_s8(_Second));\r\n                return vreinterpretq_s8_u8(_Rx);\r\n            }\r\n\r\n            static _Vec_t _Mask_cast(const _Vec_t _Mask) noexcept {\r\n                return _Mask;\r\n            }\r\n        };\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        struct _Traits_1_sse : _Traits_1_base, _Traits_sse_base {\r\n            static __m128i _Load(const void* const _Src) noexcept {\r\n                return _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Src));\r\n            }\r\n\r\n            static __m128i _Sign_correction(const __m128i _Val, const bool _Sign) noexcept {\r\n                alignas(16) static constexpr _Unsigned_t _Sign_corrections[2][16] = {\r\n                    {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80},\r\n                    {}};\r\n                return _mm_sub_epi8(_Val, _mm_load_si128(reinterpret_cast<const __m128i*>(_Sign_corrections[_Sign])));\r\n            }\r\n\r\n            static __m128i _Inc(const __m128i _Idx) noexcept {\r\n                return _mm_add_epi8(_Idx, _mm_set1_epi8(1));\r\n            }\r\n\r\n            template <class _Fn>\r\n            static __m128i _H_func(const __m128i _Cur, const _Fn _Funct) noexcept {\r\n                const __m128i _Shuf_b = _mm_set_epi8(14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1);\r\n                const __m128i _Shuf_w = _mm_set_epi8(13, 12, 15, 14, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2);\r\n\r\n                __m128i _H_min_val = _Cur;\r\n                _H_min_val         = _Funct(_H_min_val, _mm_shuffle_epi32(_H_min_val, _MM_SHUFFLE(1, 0, 3, 2)));\r\n                _H_min_val         = _Funct(_H_min_val, _mm_shuffle_epi32(_H_min_val, _MM_SHUFFLE(2, 3, 0, 1)));\r\n                _H_min_val         = _Funct(_H_min_val, _mm_shuffle_epi8(_H_min_val, _Shuf_w));\r\n                _H_min_val         = _Funct(_H_min_val, _mm_shuffle_epi8(_H_min_val, _Shuf_b));\r\n                return _H_min_val;\r\n            }\r\n\r\n            static __m128i _H_min(const __m128i _Cur) noexcept {\r\n                return _H_func(\r\n                    _Cur, [](const __m128i _Val1, const __m128i _Val2) noexcept { return _mm_min_epi8(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m128i _H_max(const __m128i _Cur) noexcept {\r\n                return _H_func(\r\n                    _Cur, [](const __m128i _Val1, const __m128i _Val2) noexcept { return _mm_max_epi8(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m128i _H_min_u(const __m128i _Cur) noexcept {\r\n                return _H_func(\r\n                    _Cur, [](const __m128i _Val1, const __m128i _Val2) noexcept { return _mm_min_epu8(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m128i _H_max_u(const __m128i _Cur) noexcept {\r\n                return _H_func(\r\n                    _Cur, [](const __m128i _Val1, const __m128i _Val2) noexcept { return _mm_max_epu8(_Val1, _Val2); });\r\n            }\r\n\r\n            static _Signed_t _Get_any(const __m128i _Cur) noexcept {\r\n                return static_cast<_Signed_t>(_mm_cvtsi128_si32(_Cur));\r\n            }\r\n\r\n            static _Unsigned_t _Get_v_pos(const __m128i _Idx) noexcept {\r\n                return static_cast<_Unsigned_t>(_Get_any(_Idx));\r\n            }\r\n\r\n            static __m128i _Cmp_eq(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpeq_epi8(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Cmp_gt(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpgt_epi8(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Cmp_eq_idx(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpeq_epi8(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Min(const __m128i _First, const __m128i _Second, __m128i = _mm_undefined_si128()) noexcept {\r\n                return _mm_min_epi8(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Max(const __m128i _First, const __m128i _Second, __m128i = _mm_undefined_si128()) noexcept {\r\n                return _mm_max_epi8(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Min_u(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_min_epu8(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Max_u(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_max_epu8(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Mask_cast(const __m128i _Mask) noexcept {\r\n                return _Mask;\r\n            }\r\n        };\r\n\r\n        struct _Traits_1_avx : _Traits_1_base, _Traits_avx_i_base {\r\n            static __m256i _Load(const void* const _Src) noexcept {\r\n                return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_Src));\r\n            }\r\n\r\n            static __m256i _Sign_correction(const __m256i _Val, const bool _Sign) noexcept {\r\n                alignas(32) static constexpr _Unsigned_t _Sign_corrections[2][32] = {\r\n                    {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,\r\n                        0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80},\r\n                    {}};\r\n                return _mm256_sub_epi8(\r\n                    _Val, _mm256_load_si256(reinterpret_cast<const __m256i*>(_Sign_corrections[_Sign])));\r\n            }\r\n\r\n            static __m256i _Inc(const __m256i _Idx) noexcept {\r\n                return _mm256_add_epi8(_Idx, _mm256_set1_epi8(1));\r\n            }\r\n\r\n            template <class _Fn>\r\n            static __m256i _H_func(const __m256i _Cur, const _Fn _Funct) noexcept {\r\n                const __m128i _Shuf_b = _mm_set_epi8(14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1);\r\n                const __m128i _Shuf_w = _mm_set_epi8(13, 12, 15, 14, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2);\r\n\r\n                __m256i _H_min_val = _Cur;\r\n                _H_min_val         = _Funct(_H_min_val, _mm256_permute4x64_epi64(_H_min_val, _MM_SHUFFLE(1, 0, 3, 2)));\r\n                _H_min_val         = _Funct(_H_min_val, _mm256_shuffle_epi32(_H_min_val, _MM_SHUFFLE(1, 0, 3, 2)));\r\n                _H_min_val         = _Funct(_H_min_val, _mm256_shuffle_epi32(_H_min_val, _MM_SHUFFLE(2, 3, 0, 1)));\r\n                _H_min_val = _Funct(_H_min_val, _mm256_shuffle_epi8(_H_min_val, _mm256_broadcastsi128_si256(_Shuf_w)));\r\n                _H_min_val = _Funct(_H_min_val, _mm256_shuffle_epi8(_H_min_val, _mm256_broadcastsi128_si256(_Shuf_b)));\r\n                return _H_min_val;\r\n            }\r\n\r\n            static __m256i _H_min(const __m256i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m256i _Val1, const __m256i _Val2) noexcept { return _mm256_min_epi8(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m256i _H_max(const __m256i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m256i _Val1, const __m256i _Val2) noexcept { return _mm256_max_epi8(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m256i _H_min_u(const __m256i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m256i _Val1, const __m256i _Val2) noexcept { return _mm256_min_epu8(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m256i _H_max_u(const __m256i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m256i _Val1, const __m256i _Val2) noexcept { return _mm256_max_epu8(_Val1, _Val2); });\r\n            }\r\n\r\n            static _Signed_t _Get_any(const __m256i _Cur) noexcept {\r\n                return static_cast<_Signed_t>(_mm256_cvtsi256_si32(_Cur));\r\n            }\r\n\r\n            static _Unsigned_t _Get_v_pos(const __m256i _Idx) noexcept {\r\n                return static_cast<_Unsigned_t>(_Get_any(_Idx));\r\n            }\r\n\r\n            static __m256i _Cmp_eq(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpeq_epi8(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Cmp_gt(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpgt_epi8(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Cmp_eq_idx(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpeq_epi8(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Min(\r\n                const __m256i _First, const __m256i _Second, __m256i = _mm256_undefined_si256()) noexcept {\r\n                return _mm256_min_epi8(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Max(\r\n                const __m256i _First, const __m256i _Second, __m256i = _mm256_undefined_si256()) noexcept {\r\n                return _mm256_max_epi8(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Min_u(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_min_epu8(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Max_u(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_max_epu8(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Mask_cast(const __m256i _Mask) noexcept {\r\n                return _Mask;\r\n            }\r\n        };\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n        struct _Traits_2_base {\r\n            static constexpr bool _Is_floating = false;\r\n\r\n            using _Signed_t   = int16_t;\r\n            using _Unsigned_t = uint16_t;\r\n\r\n            static constexpr _Signed_t _Init_min_val = static_cast<_Signed_t>(0x7FFF);\r\n            static constexpr _Signed_t _Init_max_val = static_cast<_Signed_t>(0x8000);\r\n\r\n            using _Minmax_i_t = _Min_max_2i;\r\n            using _Minmax_u_t = _Min_max_2u;\r\n\r\n            static constexpr bool _Has_portion_max = true;\r\n            static constexpr size_t _Portion_max   = 65536;\r\n        };\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        struct _Traits_2_neon : _Traits_2_base, _Traits_neon_base {\r\n            using _Vec_t = int16x8_t;\r\n\r\n            static _Vec_t _Sign_correction(const _Vec_t _Val, bool) noexcept {\r\n                return _Val;\r\n            }\r\n\r\n            static _Vec_t _Zero() noexcept {\r\n                return vdupq_n_s16(0);\r\n            }\r\n\r\n            static _Vec_t _All_ones() noexcept {\r\n                return vreinterpretq_s16_s8(vdupq_n_s8(static_cast<int8_t>(0xFF)));\r\n            }\r\n\r\n            static _Vec_t _Blend(const _Vec_t _Px1, const _Vec_t _Px2, const _Vec_t _Msk) noexcept {\r\n                return vbslq_s16(vreinterpretq_u16_s16(_Msk), _Px2, _Px1);\r\n            }\r\n\r\n            // Compresses a 128-bit Mask of 8 16-bit values into a 64-bit Mask of 8 8-bit values.\r\n            static uint64_t _Mask(const _Vec_t _Val) noexcept {\r\n                const uint16x4_t _Res = vshrn_n_u32(vreinterpretq_u32_s16(_Val), 8);\r\n                return vget_lane_u64(vreinterpret_u64_u16(_Res), 0);\r\n            }\r\n\r\n            static uint64_t _Match_mask(const _Vec_t _Val_lo, const _Vec_t _Val_hi) noexcept {\r\n                const int8x8_t _Val = vaddhn_s16(_Val_lo, _Val_hi);\r\n                return vget_lane_u64(vreinterpret_u64_s8(_Val), 0);\r\n            }\r\n\r\n            static unsigned long _Get_first_h_pos(const uint64_t _Mask) noexcept {\r\n                return _CountTrailingZeros64(_Mask) >> 2;\r\n            }\r\n\r\n            static unsigned long _Get_last_h_pos(const uint64_t _Mask) noexcept {\r\n                return 15 - (_CountLeadingZeros64(_Mask) >> 2);\r\n            }\r\n\r\n            static _Vec_t _Load(const void* const _Src) noexcept {\r\n                return vld1q_s16(reinterpret_cast<const int16_t*>(_Src));\r\n            }\r\n\r\n            static _Vec_t _Inc(const _Vec_t _Idx) noexcept {\r\n                return vaddq_s16(_Idx, vdupq_n_s16(1));\r\n            }\r\n\r\n            static _Vec_t _H_min(const _Vec_t _Cur) noexcept {\r\n                return vdupq_n_s16(vminvq_s16(_Cur));\r\n            }\r\n\r\n            static _Vec_t _H_max(const _Vec_t _Cur) noexcept {\r\n                return vdupq_n_s16(vmaxvq_s16(_Cur));\r\n            }\r\n\r\n            static _Vec_t _H_min_u(const _Vec_t _Cur) noexcept {\r\n                const uint16_t _Mx = vminvq_u16(vreinterpretq_u16_s16(_Cur));\r\n                return vreinterpretq_s16_u16(vdupq_n_u16(_Mx));\r\n            }\r\n\r\n            static _Vec_t _H_max_u(const _Vec_t _Cur) noexcept {\r\n                const uint16_t _Mx = vmaxvq_u16(vreinterpretq_u16_s16(_Cur));\r\n                return vreinterpretq_s16_u16(vdupq_n_u16(_Mx));\r\n            }\r\n\r\n            static _Signed_t _Get_any(const _Vec_t _Cur) noexcept {\r\n                return static_cast<_Signed_t>(vgetq_lane_s16(_Cur, 0));\r\n            }\r\n\r\n            static _Unsigned_t _Get_v_pos(const _Vec_t _Cur) noexcept {\r\n                return static_cast<_Unsigned_t>(_Get_any(_Cur));\r\n            }\r\n\r\n            static _Vec_t _Cmp_eq(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return vreinterpretq_s16_u16(vceqq_s16(_First, _Second));\r\n            }\r\n\r\n            static _Vec_t _Cmp_gt(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return vreinterpretq_s16_u16(vcgtq_s16(_First, _Second));\r\n            }\r\n\r\n            static _Vec_t _Cmp_gt_u(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return vreinterpretq_s16_u16(vcgtq_u16(vreinterpretq_u16_s16(_First), vreinterpretq_u16_s16(_Second)));\r\n            }\r\n\r\n            static _Vec_t _Cmp_eq_idx(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return _Cmp_eq(_First, _Second);\r\n            }\r\n\r\n            static _Vec_t _Min(const _Vec_t _First, const _Vec_t _Second, _Vec_t = vdupq_n_s16(0)) noexcept {\r\n                return vminq_s16(_First, _Second);\r\n            }\r\n\r\n            static _Vec_t _Max(const _Vec_t _First, const _Vec_t _Second, _Vec_t = vdupq_n_s16(0)) noexcept {\r\n                return vmaxq_s16(_First, _Second);\r\n            }\r\n\r\n            static _Vec_t _Min_u(const _Vec_t _First, const _Vec_t _Second, _Vec_t = vdupq_n_s16(0)) noexcept {\r\n                const uint16x8_t _Rx = vminq_u16(vreinterpretq_u16_s16(_First), vreinterpretq_u16_s16(_Second));\r\n                return vreinterpretq_s16_u16(_Rx);\r\n            }\r\n\r\n            static _Vec_t _Max_u(const _Vec_t _First, const _Vec_t _Second, _Vec_t = vdupq_n_s16(0)) noexcept {\r\n                const uint16x8_t _Rx = vmaxq_u16(vreinterpretq_u16_s16(_First), vreinterpretq_u16_s16(_Second));\r\n                return vreinterpretq_s16_u16(_Rx);\r\n            }\r\n\r\n            static _Vec_t _Mask_cast(const _Vec_t _Mask) noexcept {\r\n                return _Mask;\r\n            }\r\n        };\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        struct _Traits_2_sse : _Traits_2_base, _Traits_sse_base {\r\n            static __m128i _Load(const void* const _Src) noexcept {\r\n                return _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Src));\r\n            }\r\n\r\n            static __m128i _Sign_correction(const __m128i _Val, const bool _Sign) noexcept {\r\n                alignas(16) static constexpr _Unsigned_t _Sign_corrections[2][8] = {\r\n                    0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, {}};\r\n                return _mm_sub_epi16(_Val, _mm_load_si128(reinterpret_cast<const __m128i*>(_Sign_corrections[_Sign])));\r\n            }\r\n\r\n            static __m128i _Inc(const __m128i _Idx) noexcept {\r\n                return _mm_add_epi16(_Idx, _mm_set1_epi16(1));\r\n            }\r\n\r\n            template <class _Fn>\r\n            static __m128i _H_func(const __m128i _Cur, const _Fn _Funct) noexcept {\r\n                const __m128i _Shuf_w = _mm_set_epi8(13, 12, 15, 14, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2);\r\n\r\n                __m128i _H_min_val = _Cur;\r\n                _H_min_val         = _Funct(_H_min_val, _mm_shuffle_epi32(_H_min_val, _MM_SHUFFLE(1, 0, 3, 2)));\r\n                _H_min_val         = _Funct(_H_min_val, _mm_shuffle_epi32(_H_min_val, _MM_SHUFFLE(2, 3, 0, 1)));\r\n                _H_min_val         = _Funct(_H_min_val, _mm_shuffle_epi8(_H_min_val, _Shuf_w));\r\n                return _H_min_val;\r\n            }\r\n\r\n            static __m128i _H_min(const __m128i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m128i _Val1, const __m128i _Val2) noexcept { return _mm_min_epi16(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m128i _H_max(const __m128i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m128i _Val1, const __m128i _Val2) noexcept { return _mm_max_epi16(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m128i _H_min_u(const __m128i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m128i _Val1, const __m128i _Val2) noexcept { return _mm_min_epu16(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m128i _H_max_u(const __m128i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m128i _Val1, const __m128i _Val2) noexcept { return _mm_max_epu16(_Val1, _Val2); });\r\n            }\r\n\r\n            static _Signed_t _Get_any(const __m128i _Cur) noexcept {\r\n                return static_cast<_Signed_t>(_mm_cvtsi128_si32(_Cur));\r\n            }\r\n\r\n            static _Unsigned_t _Get_v_pos(const __m128i _Idx) noexcept {\r\n                return static_cast<_Unsigned_t>(_Get_any(_Idx));\r\n            }\r\n\r\n            static __m128i _Cmp_eq(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpeq_epi16(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Cmp_gt(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpgt_epi16(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Cmp_eq_idx(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpeq_epi16(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Min(const __m128i _First, const __m128i _Second, __m128i = _mm_undefined_si128()) noexcept {\r\n                return _mm_min_epi16(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Max(const __m128i _First, const __m128i _Second, __m128i = _mm_undefined_si128()) noexcept {\r\n                return _mm_max_epi16(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Min_u(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_min_epu16(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Max_u(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_max_epu16(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Mask_cast(const __m128i _Mask) noexcept {\r\n                return _Mask;\r\n            }\r\n        };\r\n\r\n        struct _Traits_2_avx : _Traits_2_base, _Traits_avx_i_base {\r\n            static __m256i _Load(const void* const _Src) noexcept {\r\n                return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_Src));\r\n            }\r\n\r\n            static __m256i _Sign_correction(const __m256i _Val, const bool _Sign) noexcept {\r\n                alignas(32) static constexpr _Unsigned_t _Sign_corrections[2][16] = {0x8000, 0x8000, 0x8000, 0x8000,\r\n                    0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, {}};\r\n                return _mm256_sub_epi16(\r\n                    _Val, _mm256_load_si256(reinterpret_cast<const __m256i*>(_Sign_corrections[_Sign])));\r\n            }\r\n\r\n            static __m256i _Inc(const __m256i _Idx) noexcept {\r\n                return _mm256_add_epi16(_Idx, _mm256_set1_epi16(1));\r\n            }\r\n\r\n            template <class _Fn>\r\n            static __m256i _H_func(const __m256i _Cur, const _Fn _Funct) noexcept {\r\n                const __m128i _Shuf_w = _mm_set_epi8(13, 12, 15, 14, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2);\r\n\r\n                __m256i _H_min_val = _Cur;\r\n                _H_min_val         = _Funct(_H_min_val, _mm256_permute4x64_epi64(_H_min_val, _MM_SHUFFLE(1, 0, 3, 2)));\r\n                _H_min_val         = _Funct(_H_min_val, _mm256_shuffle_epi32(_H_min_val, _MM_SHUFFLE(1, 0, 3, 2)));\r\n                _H_min_val         = _Funct(_H_min_val, _mm256_shuffle_epi32(_H_min_val, _MM_SHUFFLE(2, 3, 0, 1)));\r\n                _H_min_val = _Funct(_H_min_val, _mm256_shuffle_epi8(_H_min_val, _mm256_broadcastsi128_si256(_Shuf_w)));\r\n                return _H_min_val;\r\n            }\r\n\r\n            static __m256i _H_min(const __m256i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m256i _Val1, const __m256i _Val2) noexcept { return _mm256_min_epi16(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m256i _H_max(const __m256i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m256i _Val1, const __m256i _Val2) noexcept { return _mm256_max_epi16(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m256i _H_min_u(const __m256i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m256i _Val1, const __m256i _Val2) noexcept { return _mm256_min_epu16(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m256i _H_max_u(const __m256i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m256i _Val1, const __m256i _Val2) noexcept { return _mm256_max_epu16(_Val1, _Val2); });\r\n            }\r\n\r\n            static _Signed_t _Get_any(const __m256i _Cur) noexcept {\r\n                return static_cast<_Signed_t>(_mm256_cvtsi256_si32(_Cur));\r\n            }\r\n\r\n            static _Unsigned_t _Get_v_pos(const __m256i _Idx) noexcept {\r\n                return static_cast<_Unsigned_t>(_Get_any(_Idx));\r\n            }\r\n\r\n            static __m256i _Cmp_eq(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpeq_epi16(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Cmp_gt(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpgt_epi16(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Cmp_eq_idx(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpeq_epi16(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Min(\r\n                const __m256i _First, const __m256i _Second, __m256i = _mm256_undefined_si256()) noexcept {\r\n                return _mm256_min_epi16(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Max(\r\n                const __m256i _First, const __m256i _Second, __m256i = _mm256_undefined_si256()) noexcept {\r\n                return _mm256_max_epi16(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Min_u(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_min_epu16(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Max_u(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_max_epu16(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Mask_cast(const __m256i _Mask) noexcept {\r\n                return _Mask;\r\n            }\r\n        };\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n        struct _Traits_4_base {\r\n            static constexpr bool _Is_floating = false;\r\n\r\n            using _Signed_t   = int32_t;\r\n            using _Unsigned_t = uint32_t;\r\n\r\n            using _Minmax_i_t = _Min_max_4i;\r\n            using _Minmax_u_t = _Min_max_4u;\r\n\r\n            static constexpr _Signed_t _Init_min_val = static_cast<_Signed_t>(0x7FFF'FFFFUL);\r\n            static constexpr _Signed_t _Init_max_val = static_cast<_Signed_t>(0x8000'0000UL);\r\n\r\n#ifdef _WIN64\r\n            static constexpr bool _Has_portion_max = true;\r\n            static constexpr size_t _Portion_max   = 0x1'0000'0000ULL;\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n            static constexpr bool _Has_portion_max = false;\r\n#endif // ^^^ 32-bit ^^^\r\n        };\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        struct _Traits_4_neon : _Traits_4_base, _Traits_neon_base {\r\n            using _Vec_t = int32x4_t;\r\n\r\n            static _Vec_t _Sign_correction(const _Vec_t _Val, bool) noexcept {\r\n                return _Val;\r\n            }\r\n\r\n            static _Vec_t _Zero() noexcept {\r\n                return vdupq_n_s32(0);\r\n            }\r\n\r\n            static _Vec_t _All_ones() noexcept {\r\n                return vreinterpretq_s32_s8(vdupq_n_s8(static_cast<int8_t>(0xFF)));\r\n            }\r\n\r\n            static _Vec_t _Blend(const _Vec_t _Px1, const _Vec_t _Px2, const _Vec_t _Msk) noexcept {\r\n                return vbslq_s32(vreinterpretq_u32_s32(_Msk), _Px2, _Px1);\r\n            }\r\n\r\n            // Compresses a 128-bit Mask of 4 32-bit values into a 64-bit Mask of 4 16-bit values.\r\n            static uint64_t _Mask(const int32x4_t _Val) noexcept {\r\n                const uint32x2_t _Res = vshrn_n_u64(vreinterpretq_u64_s32(_Val), 16);\r\n                return vget_lane_u64(vreinterpret_u64_u32(_Res), 0);\r\n            }\r\n\r\n            static uint64_t _Match_mask(const _Vec_t _Val_lo, const _Vec_t _Val_hi) noexcept {\r\n                const int8x8_t _Val = vaddhn_s16(vreinterpretq_s16_s32(_Val_lo), vreinterpretq_s16_s32(_Val_hi));\r\n                return vget_lane_u64(vreinterpret_u64_s8(_Val), 0);\r\n            }\r\n\r\n            static unsigned long _Get_first_h_pos(const uint64_t _Mask) noexcept {\r\n                return _CountTrailingZeros64(_Mask) >> 2;\r\n            }\r\n\r\n            static unsigned long _Get_last_h_pos(const uint64_t _Mask) noexcept {\r\n                return 15 - (_CountLeadingZeros64(_Mask) >> 2);\r\n            }\r\n\r\n            static _Vec_t _Load(const void* const _Src) noexcept {\r\n                return vld1q_s32(reinterpret_cast<const int32_t*>(_Src));\r\n            }\r\n\r\n            static _Vec_t _Inc(const _Vec_t _Idx) noexcept {\r\n                return vaddq_s32(_Idx, vdupq_n_s32(1));\r\n            }\r\n\r\n            static _Vec_t _H_min(const _Vec_t _Cur) noexcept {\r\n                return vdupq_n_s32(vminvq_s32(_Cur));\r\n            }\r\n\r\n            static _Vec_t _H_max(const _Vec_t _Cur) noexcept {\r\n                return vdupq_n_s32(vmaxvq_s32(_Cur));\r\n            }\r\n\r\n            static _Vec_t _H_min_u(const _Vec_t _Cur) noexcept {\r\n                const uint32_t _Mx = vminvq_u32(vreinterpretq_u32_s32(_Cur));\r\n                return vreinterpretq_s32_u32(vdupq_n_u32(_Mx));\r\n            }\r\n\r\n            static _Vec_t _H_max_u(const _Vec_t _Cur) noexcept {\r\n                const uint32_t _Mx = vmaxvq_u32(vreinterpretq_u32_s32(_Cur));\r\n                return vreinterpretq_s32_u32(vdupq_n_u32(_Mx));\r\n            }\r\n\r\n            static _Signed_t _Get_any(const _Vec_t _Cur) noexcept {\r\n                return static_cast<_Signed_t>(vgetq_lane_s32(_Cur, 0));\r\n            }\r\n\r\n            static _Unsigned_t _Get_v_pos(const _Vec_t _Cur) noexcept {\r\n                return static_cast<_Unsigned_t>(_Get_any(_Cur));\r\n            }\r\n\r\n            static _Vec_t _Cmp_eq(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return vreinterpretq_s32_u32(vceqq_s32(_First, _Second));\r\n            }\r\n\r\n            static _Vec_t _Cmp_gt(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return vreinterpretq_s32_u32(vcgtq_s32(_First, _Second));\r\n            }\r\n\r\n            static _Vec_t _Cmp_gt_u(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return vreinterpretq_s32_u32(vcgtq_u32(vreinterpretq_u32_s32(_First), vreinterpretq_u32_s32(_Second)));\r\n            }\r\n\r\n            static _Vec_t _Cmp_eq_idx(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return _Cmp_eq(_First, _Second);\r\n            }\r\n\r\n            static _Vec_t _Min(const _Vec_t _First, const _Vec_t _Second, _Vec_t = vdupq_n_s32(0)) noexcept {\r\n                return vminq_s32(_First, _Second);\r\n            }\r\n\r\n            static _Vec_t _Max(const _Vec_t _First, const _Vec_t _Second, _Vec_t = vdupq_n_s32(0)) noexcept {\r\n                return vmaxq_s32(_First, _Second);\r\n            }\r\n\r\n            static _Vec_t _Min_u(const _Vec_t _First, const _Vec_t _Second, _Vec_t = vdupq_n_s32(0)) noexcept {\r\n                const uint32x4_t _Rx = vminq_u32(vreinterpretq_u32_s32(_First), vreinterpretq_u32_s32(_Second));\r\n                return vreinterpretq_s32_u32(_Rx);\r\n            }\r\n\r\n            static _Vec_t _Max_u(const _Vec_t _First, const _Vec_t _Second, _Vec_t = vdupq_n_s32(0)) noexcept {\r\n                const uint32x4_t _Rx = vmaxq_u32(vreinterpretq_u32_s32(_First), vreinterpretq_u32_s32(_Second));\r\n                return vreinterpretq_s32_u32(_Rx);\r\n            }\r\n\r\n            static _Vec_t _Mask_cast(const _Vec_t _Mask) noexcept {\r\n                return _Mask;\r\n            }\r\n        };\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        struct _Traits_4_sse : _Traits_4_base, _Traits_sse_base {\r\n            static __m128i _Load(const void* const _Src) noexcept {\r\n                return _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Src));\r\n            }\r\n\r\n            static __m128i _Sign_correction(const __m128i _Val, const bool _Sign) noexcept {\r\n                alignas(16) static constexpr _Unsigned_t _Sign_corrections[2][4] = {\r\n                    0x8000'0000UL, 0x8000'0000UL, 0x8000'0000UL, 0x8000'0000UL, {}};\r\n                return _mm_sub_epi32(_Val, _mm_load_si128(reinterpret_cast<const __m128i*>(_Sign_corrections[_Sign])));\r\n            }\r\n\r\n            static __m128i _Inc(const __m128i _Idx) noexcept {\r\n                return _mm_add_epi32(_Idx, _mm_set1_epi32(1));\r\n            }\r\n\r\n            template <class _Fn>\r\n            static __m128i _H_func(const __m128i _Cur, const _Fn _Funct) noexcept {\r\n                __m128i _H_min_val = _Cur;\r\n                _H_min_val         = _Funct(_H_min_val, _mm_shuffle_epi32(_H_min_val, _MM_SHUFFLE(1, 0, 3, 2)));\r\n                _H_min_val         = _Funct(_H_min_val, _mm_shuffle_epi32(_H_min_val, _MM_SHUFFLE(2, 3, 0, 1)));\r\n                return _H_min_val;\r\n            }\r\n\r\n            static __m128i _H_min(const __m128i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m128i _Val1, const __m128i _Val2) noexcept { return _mm_min_epi32(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m128i _H_max(const __m128i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m128i _Val1, const __m128i _Val2) noexcept { return _mm_max_epi32(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m128i _H_min_u(const __m128i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m128i _Val1, const __m128i _Val2) noexcept { return _mm_min_epu32(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m128i _H_max_u(const __m128i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m128i _Val1, const __m128i _Val2) noexcept { return _mm_max_epu32(_Val1, _Val2); });\r\n            }\r\n\r\n            static _Signed_t _Get_any(const __m128i _Cur) noexcept {\r\n                return static_cast<_Signed_t>(_mm_cvtsi128_si32(_Cur));\r\n            }\r\n\r\n            static _Unsigned_t _Get_v_pos(const __m128i _Idx) noexcept {\r\n                return static_cast<_Unsigned_t>(_Get_any(_Idx));\r\n            }\r\n\r\n            static __m128i _Cmp_eq(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpeq_epi32(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Cmp_gt(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpgt_epi32(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Cmp_eq_idx(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpeq_epi32(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Min(const __m128i _First, const __m128i _Second, __m128i = _mm_undefined_si128()) noexcept {\r\n                return _mm_min_epi32(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Max(const __m128i _First, const __m128i _Second, __m128i = _mm_undefined_si128()) noexcept {\r\n                return _mm_max_epi32(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Min_u(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_min_epu32(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Max_u(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_max_epu32(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Mask_cast(const __m128i _Mask) noexcept {\r\n                return _Mask;\r\n            }\r\n        };\r\n\r\n        struct _Traits_4_avx : _Traits_4_base, _Traits_avx_i_base {\r\n            static __m256i _Load(const void* const _Src) noexcept {\r\n                return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_Src));\r\n            }\r\n\r\n            static __m256i _Sign_correction(const __m256i _Val, const bool _Sign) noexcept {\r\n                alignas(32) static constexpr _Unsigned_t _Sign_corrections[2][8] = {0x8000'0000UL, 0x8000'0000UL,\r\n                    0x8000'0000UL, 0x8000'0000UL, 0x8000'0000UL, 0x8000'0000UL, 0x8000'0000UL, 0x8000'0000UL, {}};\r\n                return _mm256_sub_epi32(\r\n                    _Val, _mm256_load_si256(reinterpret_cast<const __m256i*>(_Sign_corrections[_Sign])));\r\n            }\r\n\r\n            static __m256i _Inc(const __m256i _Idx) noexcept {\r\n                return _mm256_add_epi32(_Idx, _mm256_set1_epi32(1));\r\n            }\r\n\r\n            template <class _Fn>\r\n            static __m256i _H_func(const __m256i _Cur, const _Fn _Funct) noexcept {\r\n                __m256i _H_min_val = _Cur;\r\n                _H_min_val         = _Funct(_H_min_val, _mm256_permute4x64_epi64(_H_min_val, _MM_SHUFFLE(1, 0, 3, 2)));\r\n                _H_min_val         = _Funct(_H_min_val, _mm256_shuffle_epi32(_H_min_val, _MM_SHUFFLE(1, 0, 3, 2)));\r\n                _H_min_val         = _Funct(_H_min_val, _mm256_shuffle_epi32(_H_min_val, _MM_SHUFFLE(2, 3, 0, 1)));\r\n                return _H_min_val;\r\n            }\r\n\r\n            static __m256i _H_min(const __m256i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m256i _Val1, const __m256i _Val2) noexcept { return _mm256_min_epi32(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m256i _H_max(const __m256i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m256i _Val1, const __m256i _Val2) noexcept { return _mm256_max_epi32(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m256i _H_min_u(const __m256i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m256i _Val1, const __m256i _Val2) noexcept { return _mm256_min_epu32(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m256i _H_max_u(const __m256i _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m256i _Val1, const __m256i _Val2) noexcept { return _mm256_max_epu32(_Val1, _Val2); });\r\n            }\r\n\r\n            static _Signed_t _Get_any(const __m256i _Cur) noexcept {\r\n                return static_cast<_Signed_t>(_mm256_cvtsi256_si32(_Cur));\r\n            }\r\n\r\n            static _Unsigned_t _Get_v_pos(const __m256i _Idx) noexcept {\r\n                return static_cast<_Unsigned_t>(_Get_any(_Idx));\r\n            }\r\n\r\n            static __m256i _Cmp_eq(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpeq_epi32(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Cmp_gt(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpgt_epi32(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Cmp_eq_idx(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpeq_epi32(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Min(\r\n                const __m256i _First, const __m256i _Second, __m256i = _mm256_undefined_si256()) noexcept {\r\n                return _mm256_min_epi32(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Max(\r\n                const __m256i _First, const __m256i _Second, __m256i = _mm256_undefined_si256()) noexcept {\r\n                return _mm256_max_epi32(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Min_u(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_min_epu32(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Max_u(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_max_epu32(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Mask_cast(const __m256i _Mask) noexcept {\r\n                return _Mask;\r\n            }\r\n        };\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n        struct _Traits_8_base {\r\n            static constexpr bool _Is_floating = false;\r\n\r\n            using _Signed_t   = int64_t;\r\n            using _Unsigned_t = uint64_t;\r\n\r\n            static constexpr _Signed_t _Init_min_val = static_cast<_Signed_t>(0x7FFF'FFFF'FFFF'FFFFULL);\r\n            static constexpr _Signed_t _Init_max_val = static_cast<_Signed_t>(0x8000'0000'0000'0000ULL);\r\n\r\n            using _Minmax_i_t = _Min_max_8i;\r\n            using _Minmax_u_t = _Min_max_8u;\r\n\r\n            static constexpr bool _Has_portion_max = false;\r\n        };\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        struct _Traits_8_neon : _Traits_8_base, _Traits_neon_base {\r\n            using _Vec_t = int64x2_t;\r\n\r\n            static _Vec_t _Sign_correction(const _Vec_t _Val, bool) noexcept {\r\n                return _Val;\r\n            }\r\n\r\n            // Compresses a 128-bit Mask of 2 64-bit values into a 64-bit Mask of 2 32-bit values.\r\n            static uint64_t _Mask(const _Vec_t _Val) noexcept {\r\n                const uint32x2_t _Res = vreinterpret_u32_s32(vmovn_s64(_Val));\r\n                return vget_lane_u64(vreinterpret_u64_u32(_Res), 0);\r\n            }\r\n\r\n            static uint64_t _Match_mask(const _Vec_t _Val_lo, const _Vec_t _Val_hi) noexcept {\r\n                const int8x8_t _Val = vaddhn_s16(vreinterpretq_s16_s64(_Val_lo), vreinterpretq_s16_s64(_Val_hi));\r\n                return vget_lane_u64(vreinterpret_u64_s8(_Val), 0);\r\n            }\r\n\r\n            static unsigned long _Get_first_h_pos(const uint64_t _Mask) noexcept {\r\n                return _CountTrailingZeros64(_Mask) >> 2;\r\n            }\r\n\r\n            static _Vec_t _Load(const void* const _Src) noexcept {\r\n                return vld1q_s64(reinterpret_cast<const int64_t*>(_Src));\r\n            }\r\n\r\n            static _Vec_t _H_min(const _Vec_t _Cur) noexcept {\r\n                const int64x2_t _Swapped  = vextq_s64(_Cur, _Cur, 1);\r\n                const uint64x2_t _Mask_lt = vcltq_s64(_Swapped, _Cur);\r\n                return vbslq_s64(_Mask_lt, _Swapped, _Cur);\r\n            }\r\n\r\n            static _Vec_t _H_max(const _Vec_t _Cur) noexcept {\r\n                const int64x2_t _Swapped  = vextq_s64(_Cur, _Cur, 1);\r\n                const uint64x2_t _Mask_gt = vcgtq_s64(_Swapped, _Cur);\r\n                return vbslq_s64(_Mask_gt, _Swapped, _Cur);\r\n            }\r\n\r\n            static _Vec_t _H_min_u(const _Vec_t _Cur) noexcept {\r\n                const uint64x2_t _Cur_u   = vreinterpretq_u64_s64(_Cur);\r\n                const uint64x2_t _Swapped = vextq_u64(_Cur_u, _Cur_u, 1);\r\n                const uint64x2_t _Mask_lt = vcltq_u64(_Swapped, _Cur_u);\r\n                return vreinterpretq_s64_u64(vbslq_u64(_Mask_lt, _Swapped, _Cur_u));\r\n            }\r\n\r\n            static _Vec_t _H_max_u(const _Vec_t _Cur) noexcept {\r\n                const uint64x2_t _Cur_u   = vreinterpretq_u64_s64(_Cur);\r\n                const uint64x2_t _Swapped = vextq_u64(_Cur_u, _Cur_u, 1);\r\n                const uint64x2_t _Mask_gt = vcgtq_u64(_Swapped, _Cur_u);\r\n                return vreinterpretq_s64_u64(vbslq_u64(_Mask_gt, _Swapped, _Cur_u));\r\n            }\r\n\r\n            static _Signed_t _Get_any(const _Vec_t _Cur) noexcept {\r\n                return static_cast<_Signed_t>(vgetq_lane_s64(_Cur, 0));\r\n            }\r\n\r\n            static _Vec_t _Cmp_gt(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return vreinterpretq_s64_u64(vcgtq_s64(_First, _Second));\r\n            }\r\n\r\n            static _Vec_t _Cmp_gt_u(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return vreinterpretq_s64_u64(vcgtq_u64(vreinterpretq_u64_s64(_First), vreinterpretq_u64_s64(_Second)));\r\n            }\r\n\r\n            static _Vec_t _Min(const _Vec_t _First, const _Vec_t _Second, const _Vec_t _Mask) noexcept {\r\n                return vbslq_s64(vreinterpretq_u64_s64(_Mask), _Second, _First);\r\n            }\r\n\r\n            static _Vec_t _Min(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return _Min(_First, _Second, _Cmp_gt(_First, _Second));\r\n            }\r\n\r\n            static _Vec_t _Min_u(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return _Min(_First, _Second, _Cmp_gt_u(_First, _Second));\r\n            }\r\n\r\n            static _Vec_t _Max(const _Vec_t _First, const _Vec_t _Second, const _Vec_t _Mask) noexcept {\r\n                return vbslq_s64(vreinterpretq_u64_s64(_Mask), _Second, _First);\r\n            }\r\n\r\n            static _Vec_t _Max(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return _Max(_First, _Second, _Cmp_gt(_Second, _First));\r\n            }\r\n\r\n            static _Vec_t _Max_u(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return _Max(_First, _Second, _Cmp_gt_u(_Second, _First));\r\n            }\r\n\r\n            static _Vec_t _Mask_cast(const _Vec_t _Mask) noexcept {\r\n                return _Mask;\r\n            }\r\n        };\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        struct _Traits_8_sse : _Traits_8_base, _Traits_sse_base {\r\n            static __m128i _Load(const void* const _Src) noexcept {\r\n                return _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Src));\r\n            }\r\n\r\n            static __m128i _Sign_correction(const __m128i _Val, const bool _Sign) noexcept {\r\n                alignas(16) static constexpr _Unsigned_t _Sign_corrections[2][2] = {\r\n                    0x8000'0000'0000'0000ULL, 0x8000'0000'0000'0000ULL, {}};\r\n                return _mm_sub_epi64(_Val, _mm_load_si128(reinterpret_cast<const __m128i*>(_Sign_corrections[_Sign])));\r\n            }\r\n\r\n            static __m128i _Inc(const __m128i _Idx) noexcept {\r\n                return _mm_add_epi64(_Idx, _mm_set1_epi64x(1));\r\n            }\r\n\r\n            template <class _Fn>\r\n            static __m128i _H_func(const __m128i _Cur, const _Fn _Funct) noexcept {\r\n                _Signed_t _H_min_a       = _Get_any(_Cur);\r\n                const _Signed_t _H_min_b = _Get_any(_mm_bsrli_si128(_Cur, 8));\r\n                if (_Funct(_H_min_b, _H_min_a)) {\r\n                    _H_min_a = _H_min_b;\r\n                }\r\n                return _mm_set1_epi64x(_H_min_a);\r\n            }\r\n\r\n            static __m128i _H_min(const __m128i _Cur) noexcept {\r\n                return _H_func(_Cur, [](const _Signed_t _Lhs, const _Signed_t _Rhs) noexcept { return _Lhs < _Rhs; });\r\n            }\r\n\r\n            static __m128i _H_max(const __m128i _Cur) noexcept {\r\n                return _H_func(_Cur, [](const _Signed_t _Lhs, const _Signed_t _Rhs) noexcept { return _Lhs > _Rhs; });\r\n            }\r\n\r\n            static __m128i _H_min_u(const __m128i _Cur) noexcept {\r\n                return _H_func(\r\n                    _Cur, [](const _Unsigned_t _Lhs, const _Unsigned_t _Rhs) noexcept { return _Lhs < _Rhs; });\r\n            }\r\n\r\n            static __m128i _H_max_u(const __m128i _Cur) noexcept {\r\n                return _H_func(\r\n                    _Cur, [](const _Unsigned_t _Lhs, const _Unsigned_t _Rhs) noexcept { return _Lhs > _Rhs; });\r\n            }\r\n\r\n            static _Signed_t _Get_any(const __m128i _Cur) noexcept {\r\n                // With optimizations enabled, compiles into register movement, rather than an actual stack spill.\r\n                // Works around the absence of _mm_cvtsi128_si64 on 32-bit.\r\n                _Signed_t _Array[2];\r\n                _mm_storeu_si128(reinterpret_cast<__m128i*>(&_Array), _Cur);\r\n                return _Array[0];\r\n            }\r\n\r\n            static _Unsigned_t _Get_v_pos(const __m128i _Idx) noexcept {\r\n                return static_cast<_Unsigned_t>(_Get_any(_Idx));\r\n            }\r\n\r\n            static __m128i _Cmp_eq(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpeq_epi64(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Cmp_gt(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpgt_epi64(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Cmp_eq_idx(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpeq_epi64(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Min(const __m128i _First, const __m128i _Second, const __m128i _Mask) noexcept {\r\n                return _mm_blendv_epi8(_First, _Second, _Mask);\r\n            }\r\n\r\n            static __m128i _Max(const __m128i _First, const __m128i _Second, const __m128i _Mask) noexcept {\r\n                return _mm_blendv_epi8(_First, _Second, _Mask);\r\n            }\r\n\r\n            static __m128i _Min(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_blendv_epi8(_First, _Second, _Cmp_gt(_First, _Second));\r\n            }\r\n\r\n            static __m128i _Max(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_blendv_epi8(_First, _Second, _Cmp_gt(_Second, _First));\r\n            }\r\n\r\n            static __m128i _Mask_cast(const __m128i _Mask) noexcept {\r\n                return _Mask;\r\n            }\r\n        };\r\n\r\n        struct _Traits_8_avx : _Traits_8_base, _Traits_avx_i_base {\r\n            static __m256i _Load(const void* const _Src) noexcept {\r\n                return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_Src));\r\n            }\r\n\r\n            static __m256i _Sign_correction(const __m256i _Val, const bool _Sign) noexcept {\r\n                alignas(32) static constexpr _Unsigned_t _Sign_corrections[2][4] = {0x8000'0000'0000'0000ULL,\r\n                    0x8000'0000'0000'0000ULL, 0x8000'0000'0000'0000ULL, 0x8000'0000'0000'0000ULL, {}};\r\n                return _mm256_sub_epi64(\r\n                    _Val, _mm256_load_si256(reinterpret_cast<const __m256i*>(_Sign_corrections[_Sign])));\r\n            }\r\n\r\n            static __m256i _Inc(const __m256i _Idx) noexcept {\r\n                return _mm256_add_epi64(_Idx, _mm256_set1_epi64x(1));\r\n            }\r\n\r\n            template <class _Fn>\r\n            static __m256i _H_func(const __m256i _Cur, const _Fn _Funct) noexcept {\r\n                alignas(32) _Signed_t _Array[4];\r\n                _mm256_store_si256(reinterpret_cast<__m256i*>(_Array), _Cur);\r\n\r\n                _Signed_t _H_min_v = _Array[0];\r\n\r\n                if (_Funct(_Array[1], _H_min_v)) {\r\n                    _H_min_v = _Array[1];\r\n                }\r\n\r\n                if (_Funct(_Array[2], _H_min_v)) {\r\n                    _H_min_v = _Array[2];\r\n                }\r\n\r\n                if (_Funct(_Array[3], _H_min_v)) {\r\n                    _H_min_v = _Array[3];\r\n                }\r\n\r\n                return _mm256_set1_epi64x(_H_min_v);\r\n            }\r\n\r\n            static __m256i _H_min(const __m256i _Cur) noexcept {\r\n                return _H_func(_Cur, [](const _Signed_t _Lhs, const _Signed_t _Rhs) noexcept { return _Lhs < _Rhs; });\r\n            }\r\n\r\n            static __m256i _H_max(const __m256i _Cur) noexcept {\r\n                return _H_func(_Cur, [](const _Signed_t _Lhs, const _Signed_t _Rhs) noexcept { return _Lhs > _Rhs; });\r\n            }\r\n\r\n            static __m256i _H_min_u(const __m256i _Cur) noexcept {\r\n                return _H_func(\r\n                    _Cur, [](const _Unsigned_t _Lhs, const _Unsigned_t _Rhs) noexcept { return _Lhs < _Rhs; });\r\n            }\r\n\r\n            static __m256i _H_max_u(const __m256i _Cur) noexcept {\r\n                return _H_func(\r\n                    _Cur, [](const _Unsigned_t _Lhs, const _Unsigned_t _Rhs) noexcept { return _Lhs > _Rhs; });\r\n            }\r\n\r\n            static _Signed_t _Get_any(const __m256i _Cur) noexcept {\r\n                return _Traits_8_sse::_Get_any(_mm256_castsi256_si128(_Cur));\r\n            }\r\n\r\n            static _Unsigned_t _Get_v_pos(const __m256i _Idx) noexcept {\r\n                return static_cast<_Unsigned_t>(_Get_any(_Idx));\r\n            }\r\n\r\n            static __m256i _Cmp_eq(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpeq_epi64(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Cmp_gt(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpgt_epi64(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Cmp_eq_idx(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpeq_epi64(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Min(const __m256i _First, const __m256i _Second, const __m256i _Mask) noexcept {\r\n                return _mm256_blendv_epi8(_First, _Second, _Mask);\r\n            }\r\n\r\n            static __m256i _Max(const __m256i _First, const __m256i _Second, const __m256i _Mask) noexcept {\r\n                return _mm256_blendv_epi8(_First, _Second, _Mask);\r\n            }\r\n\r\n            static __m256i _Min(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_blendv_epi8(_First, _Second, _Cmp_gt(_First, _Second));\r\n            }\r\n\r\n            static __m256i _Max(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_blendv_epi8(_First, _Second, _Cmp_gt(_Second, _First));\r\n            }\r\n\r\n            static __m256i _Mask_cast(const __m256i _Mask) noexcept {\r\n                return _Mask;\r\n            }\r\n        };\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n        struct _Traits_f_base {\r\n            static constexpr bool _Is_floating = true;\r\n\r\n            using _Signed_t   = float;\r\n            using _Unsigned_t = void;\r\n\r\n            static constexpr _Signed_t _Init_min_val = __builtin_huge_valf();\r\n            static constexpr _Signed_t _Init_max_val = -__builtin_huge_valf();\r\n\r\n            using _Minmax_i_t = _Min_max_f;\r\n            using _Minmax_u_t = void;\r\n\r\n#ifdef _WIN64\r\n            static constexpr bool _Has_portion_max = true;\r\n            static constexpr size_t _Portion_max   = 0x1'0000'0000ULL;\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n            static constexpr bool _Has_portion_max = false;\r\n#endif // ^^^ 32-bit ^^^\r\n        };\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        struct _Traits_f_neon : _Traits_f_base, _Traits_neon_base {\r\n            using _Vec_t                            = float32x4_t;\r\n            using _Idx_t                            = int32x4_t;\r\n            static constexpr bool _Has_unsigned_cmp = false;\r\n\r\n            static _Vec_t _Sign_correction(const _Vec_t _Val, bool) noexcept {\r\n                return _Val;\r\n            }\r\n\r\n            static _Idx_t _Zero() noexcept {\r\n                return vdupq_n_s32(0);\r\n            }\r\n\r\n            static _Idx_t _All_ones() noexcept {\r\n                return vreinterpretq_s32_s8(vdupq_n_s8(static_cast<int8_t>(0xFF)));\r\n            }\r\n\r\n            static _Idx_t _Blend(const _Idx_t _Px1, const _Idx_t _Px2, const _Idx_t _Msk) noexcept {\r\n                return vbslq_s32(vreinterpretq_u32_s32(_Msk), _Px2, _Px1);\r\n            }\r\n\r\n            static uint64_t _Mask(const _Idx_t _Val) noexcept {\r\n                return _Traits_4_neon::_Mask(_Val);\r\n            }\r\n\r\n            static uint64_t _Match_mask(const _Idx_t _Val_lo, const _Idx_t _Val_hi) noexcept {\r\n                return _Traits_4_neon::_Match_mask(_Val_lo, _Val_hi);\r\n            }\r\n\r\n            static unsigned long _Get_first_h_pos(const uint64_t _Mask) noexcept {\r\n                return _Traits_4_neon::_Get_first_h_pos(_Mask);\r\n            }\r\n\r\n            static unsigned long _Get_last_h_pos(const uint64_t _Mask) noexcept {\r\n                return _Traits_4_neon::_Get_last_h_pos(_Mask);\r\n            }\r\n\r\n            static _Vec_t _Load(const void* const _Src) noexcept {\r\n                return vld1q_f32(reinterpret_cast<const float32_t*>(_Src));\r\n            }\r\n\r\n            static _Idx_t _Inc(const _Idx_t _Idx) noexcept {\r\n                return _Traits_4_neon::_Inc(_Idx);\r\n            }\r\n\r\n            static _Vec_t _H_min(const _Vec_t _Cur) noexcept {\r\n                return vdupq_n_f32(vminvq_f32(_Cur));\r\n            }\r\n\r\n            static _Vec_t _H_max(const _Vec_t _Cur) noexcept {\r\n                return vdupq_n_f32(vmaxvq_f32(_Cur));\r\n            }\r\n\r\n            static _Idx_t _H_min_u(const _Idx_t _Cur) noexcept {\r\n                return _Traits_4_neon::_H_min_u(_Cur);\r\n            }\r\n\r\n            static _Idx_t _H_max_u(const _Idx_t _Cur) noexcept {\r\n                return _Traits_4_neon::_H_max_u(_Cur);\r\n            }\r\n\r\n            static float _Get_any(const _Vec_t _Cur) noexcept {\r\n                return vgetq_lane_f32(_Cur, 0);\r\n            }\r\n\r\n            static _Traits_4_neon::_Unsigned_t _Get_v_pos(const _Idx_t _Cur) noexcept {\r\n                return _Traits_4_neon::_Get_v_pos(_Cur);\r\n            }\r\n\r\n            static _Idx_t _Cmp_eq(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return vreinterpretq_s32_u32(vceqq_f32(_First, _Second));\r\n            }\r\n\r\n            static _Idx_t _Cmp_gt(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return vreinterpretq_s32_u32(vcgtq_f32(_First, _Second));\r\n            }\r\n\r\n            static _Idx_t _Cmp_eq_idx(const _Idx_t _First, const _Idx_t _Second) noexcept {\r\n                return _Traits_4_neon::_Cmp_eq_idx(_First, _Second);\r\n            }\r\n\r\n            static _Vec_t _Min(const _Vec_t _First, const _Vec_t _Second, _Idx_t = vdupq_n_s32(0)) noexcept {\r\n                return vminq_f32(_First, _Second);\r\n            }\r\n\r\n            static _Vec_t _Max(const _Vec_t _First, const _Vec_t _Second, _Idx_t = vdupq_n_s32(0)) noexcept {\r\n                return vmaxq_f32(_First, _Second);\r\n            }\r\n\r\n            static _Idx_t _Mask_cast(const _Idx_t _Mask) noexcept {\r\n                return _Mask;\r\n            }\r\n        };\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        struct _Traits_f_sse : _Traits_f_base, _Traits_sse_base {\r\n            using _Vec_t = __m128;\r\n\r\n            static __m128 _Load(const void* const _Src) noexcept {\r\n                return _mm_loadu_ps(reinterpret_cast<const float*>(_Src));\r\n            }\r\n\r\n            static __m128 _Sign_correction(const __m128 _Val, bool) noexcept {\r\n                return _Val;\r\n            }\r\n\r\n            static __m128i _Inc(const __m128i _Idx) noexcept {\r\n                return _mm_add_epi32(_Idx, _mm_set1_epi32(1));\r\n            }\r\n\r\n            template <class _Fn>\r\n            static __m128 _H_func(const __m128 _Cur, const _Fn _Funct) noexcept {\r\n                __m128 _H_min_val = _Cur;\r\n                _H_min_val        = _Funct(_mm_shuffle_ps(_H_min_val, _H_min_val, _MM_SHUFFLE(2, 3, 0, 1)), _H_min_val);\r\n                _H_min_val        = _Funct(_mm_shuffle_ps(_H_min_val, _H_min_val, _MM_SHUFFLE(1, 0, 3, 2)), _H_min_val);\r\n                return _H_min_val;\r\n            }\r\n\r\n            static __m128 _H_min(const __m128 _Cur) noexcept {\r\n                return _H_func(\r\n                    _Cur, [](const __m128 _Val1, const __m128 _Val2) noexcept { return _mm_min_ps(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m128 _H_max(const __m128 _Cur) noexcept {\r\n                return _H_func(\r\n                    _Cur, [](const __m128 _Val1, const __m128 _Val2) noexcept { return _mm_max_ps(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m128i _H_min_u(const __m128i _Cur) noexcept {\r\n                return _Traits_4_sse::_H_min_u(_Cur);\r\n            }\r\n\r\n            static __m128i _H_max_u(const __m128i _Cur) noexcept {\r\n                return _Traits_4_sse::_H_max_u(_Cur);\r\n            }\r\n\r\n            static float _Get_any(const __m128 _Cur) noexcept {\r\n                return _mm_cvtss_f32(_Cur);\r\n            }\r\n\r\n            static uint32_t _Get_v_pos(const __m128i _Idx) noexcept {\r\n                return _Traits_4_sse::_Get_v_pos(_Idx);\r\n            }\r\n\r\n            static __m128 _Cmp_eq(const __m128 _First, const __m128 _Second) noexcept {\r\n                return _mm_cmpeq_ps(_First, _Second);\r\n            }\r\n\r\n            static __m128 _Cmp_gt(const __m128 _First, const __m128 _Second) noexcept {\r\n                return _mm_cmpgt_ps(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Cmp_eq_idx(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpeq_epi32(_First, _Second);\r\n            }\r\n\r\n            static __m128 _Min(const __m128 _First, const __m128 _Second, __m128 = _mm_undefined_ps()) noexcept {\r\n                return _mm_min_ps(_Second, _First);\r\n            }\r\n\r\n            static __m128 _Max(const __m128 _First, const __m128 _Second, __m128 = _mm_undefined_ps()) noexcept {\r\n                return _mm_max_ps(_Second, _First);\r\n            }\r\n\r\n            static __m128i _Mask_cast(const __m128 _Mask) noexcept {\r\n                return _mm_castps_si128(_Mask);\r\n            }\r\n        };\r\n\r\n        struct _Traits_f_avx : _Traits_f_base, _Traits_avx_base {\r\n            static constexpr size_t _Tail_mask = 0x1C;\r\n            using _Vec_t                       = __m256;\r\n\r\n            static __m256 _Blendval(const __m256 _Px1, const __m256 _Px2, const __m256i _Msk) noexcept {\r\n                return _mm256_blendv_ps(_Px1, _Px2, _mm256_castsi256_ps(_Msk));\r\n            }\r\n\r\n            static __m256 _Load(const void* const _Src) noexcept {\r\n                return _mm256_loadu_ps(reinterpret_cast<const float*>(_Src));\r\n            }\r\n\r\n            static __m256 _Load_mask(const void* const _Src, const __m256i _Mask) noexcept {\r\n                return _mm256_maskload_ps(reinterpret_cast<const float*>(_Src), _Mask);\r\n            }\r\n\r\n            static __m256 _Sign_correction(const __m256 _Val, bool) noexcept {\r\n                return _Val;\r\n            }\r\n\r\n            static __m256i _Inc(const __m256i _Idx) noexcept {\r\n                return _mm256_add_epi32(_Idx, _mm256_set1_epi32(1));\r\n            }\r\n\r\n            template <class _Fn>\r\n            static __m256 _H_func(const __m256 _Cur, const _Fn _Funct) noexcept {\r\n                __m256 _H_min_val = _Cur;\r\n                _H_min_val = _Funct(_mm256_shuffle_ps(_H_min_val, _H_min_val, _MM_SHUFFLE(2, 3, 0, 1)), _H_min_val);\r\n                _H_min_val = _Funct(_mm256_shuffle_ps(_H_min_val, _H_min_val, _MM_SHUFFLE(1, 0, 3, 2)), _H_min_val);\r\n                _H_min_val = _Funct(_mm256_permute2f128_ps(_H_min_val, _mm256_undefined_ps(), 0x01), _H_min_val);\r\n                return _H_min_val;\r\n            }\r\n\r\n            static __m256 _H_min(const __m256 _Cur) noexcept {\r\n                return _H_func(\r\n                    _Cur, [](const __m256 _Val1, const __m256 _Val2) noexcept { return _mm256_min_ps(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m256 _H_max(const __m256 _Cur) noexcept {\r\n                return _H_func(\r\n                    _Cur, [](const __m256 _Val1, const __m256 _Val2) noexcept { return _mm256_max_ps(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m256i _H_min_u(const __m256i _Cur) noexcept {\r\n                return _Traits_4_avx::_H_min_u(_Cur);\r\n            }\r\n\r\n            static __m256i _H_max_u(const __m256i _Cur) noexcept {\r\n                return _Traits_4_avx::_H_max_u(_Cur);\r\n            }\r\n\r\n            static float _Get_any(const __m256 _Cur) noexcept {\r\n                return _mm256_cvtss_f32(_Cur);\r\n            }\r\n\r\n            static uint32_t _Get_v_pos(const __m256i _Idx) noexcept {\r\n                return _Traits_4_avx::_Get_v_pos(_Idx);\r\n            }\r\n\r\n            static __m256 _Cmp_eq(const __m256 _First, const __m256 _Second) noexcept {\r\n                return _mm256_cmp_ps(_First, _Second, _CMP_EQ_OQ);\r\n            }\r\n\r\n            static __m256 _Cmp_gt(const __m256 _First, const __m256 _Second) noexcept {\r\n                return _mm256_cmp_ps(_First, _Second, _CMP_GT_OQ);\r\n            }\r\n\r\n            static __m256i _Cmp_eq_idx(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpeq_epi32(_First, _Second);\r\n            }\r\n\r\n            static __m256 _Min(const __m256 _First, const __m256 _Second, __m256 = _mm256_undefined_ps()) noexcept {\r\n                return _mm256_min_ps(_Second, _First);\r\n            }\r\n\r\n            static __m256 _Max(const __m256 _First, const __m256 _Second, __m256 = _mm256_undefined_ps()) noexcept {\r\n                return _mm256_max_ps(_Second, _First);\r\n            }\r\n\r\n            static __m256i _Mask_cast(const __m256 _Mask) noexcept {\r\n                return _mm256_castps_si256(_Mask);\r\n            }\r\n        };\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n        struct _Traits_d_base {\r\n            static constexpr bool _Is_floating = true;\r\n\r\n            using _Signed_t   = double;\r\n            using _Unsigned_t = void;\r\n\r\n            static constexpr _Signed_t _Init_min_val = __builtin_huge_val();\r\n            static constexpr _Signed_t _Init_max_val = -__builtin_huge_val();\r\n\r\n            using _Minmax_i_t = _Min_max_d;\r\n            using _Minmax_u_t = void;\r\n\r\n            static constexpr bool _Has_portion_max = false;\r\n        };\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        struct _Traits_d_neon : _Traits_d_base, _Traits_neon_base {\r\n            using _Vec_t                            = float64x2_t;\r\n            using _Idx_t                            = int64x2_t;\r\n            static constexpr bool _Has_unsigned_cmp = false;\r\n\r\n            static _Vec_t _Sign_correction(const _Vec_t _Val, bool) noexcept {\r\n                return _Val;\r\n            }\r\n\r\n            static _Idx_t _Zero() noexcept {\r\n                return vdupq_n_s64(0);\r\n            }\r\n\r\n            static _Idx_t _All_ones() noexcept {\r\n                return vreinterpretq_s64_s8(vdupq_n_s8(static_cast<int8_t>(0xFF)));\r\n            }\r\n\r\n            static _Idx_t _Blend(const _Idx_t _Px1, const _Idx_t _Px2, const _Idx_t _Msk) noexcept {\r\n                return vbslq_s64(vreinterpretq_u64_s64(_Msk), _Px2, _Px1);\r\n            }\r\n\r\n            // Compresses a 128-bit Mask of 2 64-bit values into a 64-bit Mask of 2 32-bit values.\r\n            static uint64_t _Mask(const int64x2_t _Val) noexcept {\r\n                return _Traits_8_neon::_Mask(_Val);\r\n            }\r\n\r\n            static uint64_t _Match_mask(const _Idx_t _Val_lo, const _Idx_t _Val_hi) noexcept {\r\n                return _Traits_8_neon::_Match_mask(_Val_lo, _Val_hi);\r\n            }\r\n\r\n            static unsigned long _Get_first_h_pos(const uint64_t _Mask) noexcept {\r\n                return _Traits_8_neon::_Get_first_h_pos(_Mask);\r\n            }\r\n\r\n            static unsigned long _Get_last_h_pos(const uint64_t _Mask) noexcept {\r\n                return 15 - (_CountLeadingZeros64(_Mask) >> 2);\r\n            }\r\n\r\n            static _Vec_t _Load(const void* const _Src) noexcept {\r\n                return vld1q_f64(reinterpret_cast<const float64_t*>(_Src));\r\n            }\r\n\r\n            static _Idx_t _Inc(const _Idx_t _Idx) noexcept {\r\n                return vaddq_s64(_Idx, vdupq_n_s64(1));\r\n            }\r\n\r\n            static _Vec_t _H_min(const _Vec_t _Cur) noexcept {\r\n                return vdupq_n_f64(vminvq_f64(_Cur));\r\n            }\r\n\r\n            static _Vec_t _H_max(const _Vec_t _Cur) noexcept {\r\n                return vdupq_n_f64(vmaxvq_f64(_Cur));\r\n            }\r\n\r\n            static _Idx_t _H_min_u(const _Idx_t _Cur) noexcept {\r\n                return _Traits_8_neon::_H_min_u(_Cur);\r\n            }\r\n\r\n            static _Idx_t _H_max_u(const _Idx_t _Cur) noexcept {\r\n                return _Traits_8_neon::_H_max_u(_Cur);\r\n            }\r\n\r\n            static double _Get_any(const _Vec_t _Cur) noexcept {\r\n                return vgetq_lane_f64(_Cur, 0);\r\n            }\r\n\r\n            static _Traits_8_base::_Unsigned_t _Get_v_pos(const _Idx_t _Cur) noexcept {\r\n                return static_cast<_Traits_8_base::_Unsigned_t>(vgetq_lane_s64(_Cur, 0));\r\n            }\r\n\r\n            static _Idx_t _Cmp_eq(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return vreinterpretq_s64_u64(vceqq_f64(_First, _Second));\r\n            }\r\n\r\n            static _Idx_t _Cmp_gt(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return vreinterpretq_s64_u64(vcgtq_f64(_First, _Second));\r\n            }\r\n\r\n            static _Idx_t _Cmp_eq_idx(const _Idx_t _First, const _Idx_t _Second) noexcept {\r\n                return vreinterpretq_s64_u64(vceqq_s64(_First, _Second));\r\n            }\r\n\r\n            static _Vec_t _Min(const _Vec_t _First, const _Vec_t _Second, _Idx_t = vdupq_n_s64(0)) noexcept {\r\n                return vminq_f64(_First, _Second);\r\n            }\r\n\r\n            static _Vec_t _Max(const _Vec_t _First, const _Vec_t _Second, _Idx_t = vdupq_n_s64(0)) noexcept {\r\n                return vmaxq_f64(_First, _Second);\r\n            }\r\n\r\n            static _Idx_t _Mask_cast(const _Idx_t _Mask) noexcept {\r\n                return _Mask;\r\n            }\r\n        };\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        struct _Traits_d_sse : _Traits_d_base, _Traits_sse_base {\r\n            using _Vec_t = __m128d;\r\n\r\n            static __m128d _Load(const void* const _Src) noexcept {\r\n                return _mm_loadu_pd(reinterpret_cast<const double*>(_Src));\r\n            }\r\n\r\n            static __m128d _Sign_correction(const __m128d _Val, bool) noexcept {\r\n                return _Val;\r\n            }\r\n\r\n            static __m128i _Inc(const __m128i _Idx) noexcept {\r\n                return _mm_add_epi64(_Idx, _mm_set1_epi64x(1));\r\n            }\r\n\r\n            template <class _Fn>\r\n            static __m128d _H_func(const __m128d _Cur, const _Fn _Funct) noexcept {\r\n                __m128d _H_min_val = _Cur;\r\n                _H_min_val         = _Funct(_mm_shuffle_pd(_H_min_val, _H_min_val, 1), _H_min_val);\r\n                return _H_min_val;\r\n            }\r\n\r\n            static __m128d _H_min(const __m128d _Cur) noexcept {\r\n                return _H_func(\r\n                    _Cur, [](const __m128d _Val1, const __m128d _Val2) noexcept { return _mm_min_pd(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m128d _H_max(const __m128d _Cur) noexcept {\r\n                return _H_func(\r\n                    _Cur, [](const __m128d _Val1, const __m128d _Val2) noexcept { return _mm_max_pd(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m128i _H_min_u(const __m128i _Cur) noexcept {\r\n                return _Traits_8_sse::_H_min_u(_Cur);\r\n            }\r\n\r\n            static __m128i _H_max_u(const __m128i _Cur) noexcept {\r\n                return _Traits_8_sse::_H_max_u(_Cur);\r\n            }\r\n            static double _Get_any(const __m128d _Cur) noexcept {\r\n                return _mm_cvtsd_f64(_Cur);\r\n            }\r\n\r\n            static uint64_t _Get_v_pos(const __m128i _Idx) noexcept {\r\n                return _Traits_8_sse::_Get_v_pos(_Idx);\r\n            }\r\n\r\n            static __m128d _Cmp_eq(const __m128d _First, const __m128d _Second) noexcept {\r\n                return _mm_cmpeq_pd(_First, _Second);\r\n            }\r\n\r\n            static __m128d _Cmp_gt(const __m128d _First, const __m128d _Second) noexcept {\r\n                return _mm_cmpgt_pd(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Cmp_eq_idx(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpeq_epi64(_First, _Second);\r\n            }\r\n\r\n            static __m128d _Min(const __m128d _First, const __m128d _Second, __m128d = _mm_undefined_pd()) noexcept {\r\n                return _mm_min_pd(_Second, _First);\r\n            }\r\n\r\n            static __m128d _Max(const __m128d _First, const __m128d _Second, __m128d = _mm_undefined_pd()) noexcept {\r\n                return _mm_max_pd(_Second, _First);\r\n            }\r\n\r\n            static __m128i _Mask_cast(const __m128d _Mask) noexcept {\r\n                return _mm_castpd_si128(_Mask);\r\n            }\r\n        };\r\n\r\n        struct _Traits_d_avx : _Traits_d_base, _Traits_avx_base {\r\n            static constexpr size_t _Tail_mask = 0x18;\r\n            using _Vec_t                       = __m256d;\r\n\r\n            static __m256d _Blendval(const __m256d _Px1, const __m256d _Px2, const __m256i _Msk) noexcept {\r\n                return _mm256_blendv_pd(_Px1, _Px2, _mm256_castsi256_pd(_Msk));\r\n            }\r\n\r\n            static __m256d _Load(const void* const _Src) noexcept {\r\n                return _mm256_loadu_pd(reinterpret_cast<const double*>(_Src));\r\n            }\r\n\r\n            static __m256d _Load_mask(const void* const _Src, const __m256i _Mask) noexcept {\r\n                return _mm256_maskload_pd(reinterpret_cast<const double*>(_Src), _Mask);\r\n            }\r\n\r\n            static __m256d _Sign_correction(const __m256d _Val, bool) noexcept {\r\n                return _Val;\r\n            }\r\n\r\n            static __m256i _Inc(const __m256i _Idx) noexcept {\r\n                return _mm256_add_epi64(_Idx, _mm256_set1_epi64x(1));\r\n            }\r\n\r\n            template <class _Fn>\r\n            static __m256d _H_func(const __m256d _Cur, const _Fn _Funct) noexcept {\r\n                __m256d _H_min_val = _Cur;\r\n                _H_min_val         = _Funct(_mm256_shuffle_pd(_H_min_val, _H_min_val, 0b0101), _H_min_val);\r\n                _H_min_val         = _Funct(_mm256_permute4x64_pd(_H_min_val, _MM_SHUFFLE(1, 0, 3, 2)), _H_min_val);\r\n                return _H_min_val;\r\n            }\r\n\r\n            static __m256d _H_min(const __m256d _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m256d _Val1, const __m256d _Val2) noexcept { return _mm256_min_pd(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m256d _H_max(const __m256d _Cur) noexcept {\r\n                return _H_func(_Cur,\r\n                    [](const __m256d _Val1, const __m256d _Val2) noexcept { return _mm256_max_pd(_Val1, _Val2); });\r\n            }\r\n\r\n            static __m256i _H_min_u(const __m256i _Cur) noexcept {\r\n                return _Traits_8_avx::_H_min_u(_Cur);\r\n            }\r\n\r\n            static __m256i _H_max_u(const __m256i _Cur) noexcept {\r\n                return _Traits_8_avx::_H_max_u(_Cur);\r\n            }\r\n\r\n            static double _Get_any(const __m256d _Cur) noexcept {\r\n                return _mm256_cvtsd_f64(_Cur);\r\n            }\r\n\r\n            static uint64_t _Get_v_pos(const __m256i _Idx) noexcept {\r\n                return _Traits_8_avx::_Get_v_pos(_Idx);\r\n            }\r\n\r\n            static __m256d _Cmp_eq(const __m256d _First, const __m256d _Second) noexcept {\r\n                return _mm256_cmp_pd(_First, _Second, _CMP_EQ_OQ);\r\n            }\r\n\r\n            static __m256d _Cmp_gt(const __m256d _First, const __m256d _Second) noexcept {\r\n                return _mm256_cmp_pd(_First, _Second, _CMP_GT_OQ);\r\n            }\r\n\r\n            static __m256i _Cmp_eq_idx(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpeq_epi64(_First, _Second);\r\n            }\r\n\r\n            static __m256d _Min(const __m256d _First, const __m256d _Second, __m256d = _mm256_undefined_pd()) noexcept {\r\n                return _mm256_min_pd(_Second, _First);\r\n            }\r\n\r\n            static __m256d _Max(const __m256d _First, const __m256d _Second, __m256d = _mm256_undefined_pd()) noexcept {\r\n                return _mm256_max_pd(_Second, _First);\r\n            }\r\n\r\n            static __m256i _Mask_cast(const __m256d _Mask) noexcept {\r\n                return _mm256_castpd_si256(_Mask);\r\n            }\r\n        };\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n        struct _Traits_1 {\r\n            using _Scalar = _Traits_scalar<_Traits_1_base>;\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            using _Neon = _Traits_1_neon;\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            using _Sse = _Traits_1_sse;\r\n            using _Avx = _Traits_1_avx;\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n        };\r\n\r\n        struct _Traits_2 {\r\n            using _Scalar = _Traits_scalar<_Traits_2_base>;\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            using _Neon = _Traits_2_neon;\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            using _Sse = _Traits_2_sse;\r\n            using _Avx = _Traits_2_avx;\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n        };\r\n\r\n        struct _Traits_4 {\r\n            using _Scalar = _Traits_scalar<_Traits_4_base>;\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            using _Neon = _Traits_4_neon;\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            using _Sse = _Traits_4_sse;\r\n            using _Avx = _Traits_4_avx;\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n        };\r\n\r\n        struct _Traits_8 {\r\n            using _Scalar = _Traits_scalar<_Traits_8_base>;\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            using _Neon = _Traits_8_neon;\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            using _Sse = _Traits_8_sse;\r\n            using _Avx = _Traits_8_avx;\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n        };\r\n\r\n        struct _Traits_f {\r\n            using _Scalar = _Traits_scalar<_Traits_f_base>;\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            using _Neon = _Traits_f_neon;\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            using _Sse = _Traits_f_sse;\r\n            using _Avx = _Traits_f_avx;\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n        };\r\n\r\n        struct _Traits_d {\r\n            using _Scalar = _Traits_scalar<_Traits_d_base>;\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            using _Neon = _Traits_d_neon;\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            using _Sse = _Traits_d_sse;\r\n            using _Avx = _Traits_d_avx;\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n        };\r\n\r\n        template <class _Ty>\r\n        const void* _Min_tail(const void* const _First, const void* const _Last, const void* _Res, _Ty _Cur) noexcept {\r\n            for (auto _Ptr = static_cast<const _Ty*>(_First); _Ptr != _Last; ++_Ptr) {\r\n                if (*_Ptr < _Cur) {\r\n                    _Res = _Ptr;\r\n                    _Cur = *_Ptr;\r\n                }\r\n            }\r\n\r\n            return _Res;\r\n        }\r\n\r\n        template <class _Ty>\r\n        const void* _Max_tail(const void* const _First, const void* const _Last, const void* _Res, _Ty _Cur) noexcept {\r\n            for (auto _Ptr = static_cast<const _Ty*>(_First); _Ptr != _Last; ++_Ptr) {\r\n                if (_Cur < *_Ptr) {\r\n                    _Res = _Ptr;\r\n                    _Cur = *_Ptr;\r\n                }\r\n            }\r\n\r\n            return _Res;\r\n        }\r\n\r\n        template <class _Ty>\r\n        _Min_max_element_t _Both_tail(const void* const _First, const void* const _Last, _Min_max_element_t& _Res,\r\n            _Ty _Cur_min, _Ty _Cur_max) noexcept {\r\n            for (auto _Ptr = static_cast<const _Ty*>(_First); _Ptr != _Last; ++_Ptr) {\r\n                if (*_Ptr < _Cur_min) {\r\n                    _Res._Min = _Ptr;\r\n                    _Cur_min  = *_Ptr;\r\n                }\r\n                // Not else!\r\n                // * Needed for correctness if start with maximum, as we don't handle specially the first element.\r\n                // * Promote branchless code generation.\r\n                if (_Cur_max <= *_Ptr) {\r\n                    _Res._Max = _Ptr;\r\n                    _Cur_max  = *_Ptr;\r\n                }\r\n            }\r\n\r\n            return _Res;\r\n        }\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        template <_Min_max_mode _Mode, class _Traits, bool _Sign>\r\n        auto _Minmax_element_impl(const void* _First, const void* const _Last) noexcept {\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        template <_Min_max_mode _Mode, class _Traits>\r\n        auto _Minmax_element_impl(const void* _First, const void* const _Last, const bool _Sign) noexcept {\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n            _Min_max_element_t _Res = {_First, _First};\r\n            auto _Cur_min_val       = _Traits::_Init_min_val;\r\n            auto _Cur_max_val       = _Traits::_Init_max_val;\r\n\r\n            if constexpr (_Traits::_Vectorized) {\r\n                auto _Base                = static_cast<const char*>(_First);\r\n                size_t _Portion_byte_size = _Byte_length(_First, _Last) & ~_Traits::_Vec_mask;\r\n\r\n                if constexpr (_Traits::_Has_portion_max) {\r\n                    // vector of indices will wrap around at exactly this size\r\n                    constexpr size_t _Max_portion_byte_size = _Traits::_Portion_max * _Traits::_Vec_size;\r\n                    if (_Portion_byte_size > _Max_portion_byte_size) {\r\n                        _Portion_byte_size = _Max_portion_byte_size;\r\n                    }\r\n                }\r\n\r\n                const void* _Stop_at = _First;\r\n                _Advance_bytes(_Stop_at, _Portion_byte_size);\r\n\r\n                // Load values and if unsigned adjust them to be signed (for signed vector comparisons)\r\n                auto _Cur_vals     = _Traits::_Sign_correction(_Traits::_Load(_First), _Sign);\r\n                auto _Cur_vals_min = _Cur_vals; // vector of vertical minimum values\r\n                auto _Cur_idx_min  = _Traits::_Zero(); // vector of vertical minimum indices\r\n                auto _Cur_vals_max = _Cur_vals; // vector of vertical maximum values\r\n                auto _Cur_idx_max  = _Traits::_Zero(); // vector of vertical maximum indices\r\n                auto _Cur_idx      = _Traits::_Zero(); // current vector of indices\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n                const auto _Cmp_gt_wrap = [](const auto _First, const auto _Second) noexcept {\r\n                    if constexpr (_Sign || !_Traits::_Has_unsigned_cmp) {\r\n                        return _Traits::_Cmp_gt(_First, _Second);\r\n                    } else {\r\n                        return _Traits::_Cmp_gt_u(_First, _Second);\r\n                    }\r\n                };\r\n                const auto _Min_wrap = [](const auto _First, const auto _Second, const auto _Mask) noexcept {\r\n                    if constexpr (_Sign || !_Traits::_Has_unsigned_cmp) {\r\n                        return _Traits::_Min(_First, _Second, _Mask);\r\n                    } else {\r\n                        return _Traits::_Min_u(_First, _Second, _Mask);\r\n                    }\r\n                };\r\n                const auto _Max_wrap = [](const auto _First, const auto _Second, const auto _Mask) noexcept {\r\n                    if constexpr (_Sign || !_Traits::_Has_unsigned_cmp) {\r\n                        return _Traits::_Max(_First, _Second, _Mask);\r\n                    } else {\r\n                        return _Traits::_Max_u(_First, _Second, _Mask);\r\n                    }\r\n                };\r\n                const auto _H_min_wrap = [](const auto _Vals) noexcept {\r\n                    if constexpr (_Sign || !_Traits::_Has_unsigned_cmp) {\r\n                        return _Traits::_H_min(_Vals);\r\n                    } else {\r\n                        return _Traits::_H_min_u(_Vals);\r\n                    }\r\n                };\r\n                const auto _H_max_wrap = [](const auto _Vals) noexcept {\r\n                    if constexpr (_Sign || !_Traits::_Has_unsigned_cmp) {\r\n                        return _Traits::_H_max(_Vals);\r\n                    } else {\r\n                        return _Traits::_H_max_u(_Vals);\r\n                    }\r\n                };\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n                const auto _Cmp_gt_wrap = [](const auto _First, const auto _Second) noexcept {\r\n                    return _Traits::_Cmp_gt(_First, _Second);\r\n                };\r\n                const auto _Min_wrap = [](const auto _First, const auto _Second, const auto _Mask) noexcept {\r\n                    return _Traits::_Min(_First, _Second, _Mask);\r\n                };\r\n                const auto _Max_wrap = [](const auto _First, const auto _Second, const auto _Mask) noexcept {\r\n                    return _Traits::_Max(_First, _Second, _Mask);\r\n                };\r\n                const auto _H_min_wrap = [](const auto _Vals) noexcept { return _Traits::_H_min(_Vals); };\r\n                const auto _H_max_wrap = [](const auto _Vals) noexcept { return _Traits::_H_max(_Vals); };\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n                const auto _Update_min_max = [&](const auto _Cur_vals, [[maybe_unused]] const auto _Blend_idx_0,\r\n                                                 const auto _Blend_idx_1) noexcept {\r\n                    if constexpr ((_Mode & _Mode_min) != 0) {\r\n                        // Looking for the first occurrence of minimum, don't overwrite with newly found occurrences\r\n                        const auto _Is_less = _Cmp_gt_wrap(_Cur_vals_min, _Cur_vals); // _Cur_vals < _Cur_vals_min\r\n                        // Remember their vertical indices\r\n                        _Cur_idx_min  = _Blend_idx_1(_Cur_idx_min, _Cur_idx, _Traits::_Mask_cast(_Is_less));\r\n                        _Cur_vals_min = _Min_wrap(_Cur_vals_min, _Cur_vals, _Is_less); // Update the current minimum\r\n                    }\r\n\r\n                    if constexpr (_Mode == _Mode_max) {\r\n                        // Looking for the first occurrence of maximum, don't overwrite with newly found occurrences\r\n                        // _Cur_vals > _Cur_vals_max\r\n                        const auto _Is_greater = _Cmp_gt_wrap(_Cur_vals, _Cur_vals_max);\r\n                        // Remember their vertical indices\r\n                        _Cur_idx_max = _Blend_idx_1(_Cur_idx_max, _Cur_idx, _Traits::_Mask_cast(_Is_greater));\r\n                        // Update the current maximum\r\n                        _Cur_vals_max = _Max_wrap(_Cur_vals_max, _Cur_vals, _Is_greater);\r\n                    } else if constexpr (_Mode == _Mode_both) {\r\n                        // Looking for the last occurrence of maximum, do overwrite with newly found occurrences\r\n                        // !(_Cur_vals >= _Cur_vals_max)\r\n                        const auto _Is_less = _Cmp_gt_wrap(_Cur_vals_max, _Cur_vals);\r\n                        // Remember their vertical indices\r\n                        _Cur_idx_max  = _Blend_idx_0(_Cur_idx_max, _Cur_idx, _Traits::_Mask_cast(_Is_less));\r\n                        _Cur_vals_max = _Max_wrap(_Cur_vals, _Cur_vals_max, _Is_less); // Update the current maximum\r\n                    }\r\n                };\r\n\r\n                const auto _Blend_idx_0 = [](const auto _Prev, const auto _Cur, const auto _Mask) noexcept {\r\n                    return _Traits::_Blend(_Cur, _Prev, _Mask);\r\n                };\r\n\r\n                const auto _Blend_idx_1 = [](const auto _Prev, const auto _Cur, const auto _Mask) noexcept {\r\n                    return _Traits::_Blend(_Prev, _Cur, _Mask);\r\n                };\r\n\r\n                for (;;) {\r\n                    _Advance_bytes(_First, _Traits::_Vec_size);\r\n\r\n                    // Increment vertical indices. Will stop at exactly wrap around, if not reach the end before\r\n                    _Cur_idx = _Traits::_Inc(_Cur_idx);\r\n\r\n                    if (_First != _Stop_at) {\r\n                        // This is the main part, finding vertical minimum/maximum\r\n\r\n                        // Load values and if unsigned adjust them to be signed (for signed vector comparisons)\r\n                        _Cur_vals = _Traits::_Sign_correction(_Traits::_Load(_First), _Sign);\r\n\r\n                        _Update_min_max(_Cur_vals, _Blend_idx_0, _Blend_idx_1);\r\n                    } else {\r\n                        if constexpr (_Traits::_Tail_mask != 0) {\r\n                            const size_t _Remaining_byte_size = _Byte_length(_First, _Last);\r\n                            bool _Last_portion;\r\n\r\n                            if constexpr (_Traits::_Has_portion_max) {\r\n                                _Last_portion = (_Remaining_byte_size & ~_Traits::_Vec_mask) == 0;\r\n                            } else {\r\n                                _Last_portion = true;\r\n                            }\r\n\r\n                            const size_t _Tail_byte_size = _Remaining_byte_size & _Traits::_Tail_mask;\r\n\r\n                            if (_Last_portion && _Tail_byte_size != 0) {\r\n                                const auto _Tail_mask = _Avx2_tail_mask_32(_Tail_byte_size);\r\n                                const auto _Tail_vals =\r\n                                    _Traits::_Sign_correction(_Traits::_Load_mask(_First, _Tail_mask), _Sign);\r\n                                _Cur_vals = _Traits::_Blendval(_Cur_vals, _Tail_vals, _Tail_mask);\r\n\r\n                                const auto _Blend_idx_0_mask = [_Tail_mask](const auto _Prev, const auto _Cur,\r\n                                                                   const auto _Mask) noexcept {\r\n                                    return _Traits::_Blend(_Prev, _Cur, _mm256_andnot_si256(_Mask, _Tail_mask));\r\n                                };\r\n\r\n                                const auto _Blend_idx_1_mask = [_Tail_mask](const auto _Prev, const auto _Cur,\r\n                                                                   const auto _Mask) noexcept {\r\n                                    return _Traits::_Blend(_Prev, _Cur, _mm256_and_si256(_Tail_mask, _Mask));\r\n                                };\r\n\r\n                                _Update_min_max(_Cur_vals, _Blend_idx_0_mask, _Blend_idx_1_mask);\r\n                                _Advance_bytes(_First, _Tail_byte_size);\r\n                            }\r\n                        }\r\n\r\n                        // Reached end or indices wrap around point.\r\n                        // Compute horizontal min and/or max. Determine horizontal and vertical position of it.\r\n\r\n                        if constexpr ((_Mode & _Mode_min) != 0) {\r\n                            // Vector populated by the smallest element\r\n                            const auto _H_min     = _H_min_wrap(_Cur_vals_min);\r\n                            const auto _H_min_val = _Traits::_Get_any(_H_min); // Get any element of it\r\n\r\n                            if (_H_min_val < _Cur_min_val) { // Current horizontal min is less than the old\r\n                                _Cur_min_val = _H_min_val; // update min\r\n                                // Mask of all elems eq to min\r\n                                const auto _Eq_mask = _Traits::_Cmp_eq(_H_min, _Cur_vals_min);\r\n                                auto _Mask          = _Traits::_Mask(_Traits::_Mask_cast(_Eq_mask));\r\n                                // Indices of minimum elements or the greatest index if none\r\n                                const auto _Idx_min_val =\r\n                                    _Traits::_Blend(_Traits::_All_ones(), _Cur_idx_min, _Traits::_Mask_cast(_Eq_mask));\r\n                                auto _Idx_min = _Traits::_H_min_u(_Idx_min_val); // The smallest indices\r\n                                // Select the smallest vertical indices from the smallest element mask\r\n                                _Mask &= _Traits::_Mask(_Traits::_Cmp_eq_idx(_Idx_min, _Idx_min_val));\r\n\r\n                                // Find the smallest horizontal index\r\n                                const unsigned long _H_pos = _Traits::_Get_first_h_pos(_Mask);\r\n\r\n                                // Extract its vertical index\r\n                                const auto _V_pos = _Traits::_Get_v_pos(_Idx_min);\r\n                                // Finally, compute the pointer\r\n                                _Res._Min = _Base + static_cast<size_t>(_V_pos) * _Traits::_Vec_size + _H_pos;\r\n                            }\r\n                        }\r\n\r\n                        if constexpr ((_Mode & _Mode_max) != 0) {\r\n                            // Vector populated by the largest element\r\n                            const auto _H_max     = _H_max_wrap(_Cur_vals_max);\r\n                            const auto _H_max_val = _Traits::_Get_any(_H_max); // Get any element of it\r\n\r\n                            if (_Mode == _Mode_both && _Cur_max_val <= _H_max_val\r\n                                || _Mode == _Mode_max && _Cur_max_val < _H_max_val) {\r\n                                // max_element: current horizontal max is greater than the old, update max\r\n                                // minmax_element: current horizontal max is not less than the old, update max\r\n                                _Cur_max_val = _H_max_val;\r\n\r\n                                // Mask of all elems eq to max\r\n                                const auto _Eq_mask = _Traits::_Cmp_eq(_H_max, _Cur_vals_max);\r\n                                auto _Mask          = _Traits::_Mask(_Traits::_Mask_cast(_Eq_mask));\r\n\r\n                                unsigned long _H_pos;\r\n                                size_t _V_pos;\r\n                                if constexpr (_Mode == _Mode_both) {\r\n                                    // Looking for the last occurrence of maximum\r\n                                    // Indices of maximum elements or zero if none\r\n                                    const auto _Idx_max_val =\r\n                                        _Traits::_Blend(_Traits::_Zero(), _Cur_idx_max, _Traits::_Mask_cast(_Eq_mask));\r\n                                    const auto _Idx_max = _Traits::_H_max_u(_Idx_max_val); // The greatest indices\r\n                                    // Select the greatest vertical indices from the largest element mask\r\n                                    _Mask &= _Traits::_Mask(_Traits::_Cmp_eq_idx(_Idx_max, _Idx_max_val));\r\n\r\n                                    // Find the largest horizontal index\r\n                                    _H_pos = _Traits::_Get_last_h_pos(_Mask);\r\n                                    _H_pos -= sizeof(_Cur_max_val) - 1; // Correct from highest val bit to lowest\r\n\r\n                                    // Extract its vertical index\r\n                                    _V_pos = static_cast<size_t>(_Traits::_Get_v_pos(_Idx_max));\r\n                                } else {\r\n                                    // Looking for the first occurrence of maximum\r\n                                    // Indices of maximum elements or the greatest index if none\r\n                                    const auto _Idx_max_val = _Traits::_Blend(\r\n                                        _Traits::_All_ones(), _Cur_idx_max, _Traits::_Mask_cast(_Eq_mask));\r\n                                    const auto _Idx_max = _Traits::_H_min_u(_Idx_max_val); // The smallest indices\r\n\r\n                                    // Select the smallest vertical indices from the largest element mask\r\n                                    _Mask &= _Traits::_Mask(_Traits::_Cmp_eq_idx(_Idx_max, _Idx_max_val));\r\n\r\n                                    // Find the smallest horizontal index\r\n                                    _H_pos = _Traits::_Get_first_h_pos(_Mask);\r\n\r\n                                    // Extract its vertical index\r\n                                    _V_pos = static_cast<size_t>(_Traits::_Get_v_pos(_Idx_max));\r\n                                }\r\n\r\n                                // Finally, compute the pointer\r\n                                _Res._Max = _Base + _V_pos * _Traits::_Vec_size + _H_pos;\r\n                            }\r\n                        }\r\n                        // Horizontal part done, results are saved, now need to see if there is another portion.\r\n\r\n                        if constexpr (_Traits::_Has_portion_max) {\r\n                            // Either the last portion or wrapping point reached, need to determine\r\n                            _Portion_byte_size = _Byte_length(_First, _Last) & ~_Traits::_Vec_mask;\r\n                            if (_Portion_byte_size == 0) {\r\n                                break; // That was the last portion\r\n                            }\r\n                            // Start next portion to handle the wrapping indices. Assume _Cur_idx is zero\r\n                            constexpr size_t _Max_portion_byte_size = _Traits::_Portion_max * _Traits::_Vec_size;\r\n                            if (_Portion_byte_size > _Max_portion_byte_size) {\r\n                                _Portion_byte_size = _Max_portion_byte_size;\r\n                            }\r\n\r\n                            _Advance_bytes(_Stop_at, _Portion_byte_size);\r\n                            // Indices will be relative to the new base\r\n                            _Base = static_cast<const char*>(_First);\r\n                            // Load values and if unsigned adjust them to be signed (for signed vector comparisons)\r\n                            _Cur_vals = _Traits::_Sign_correction(_Traits::_Load(_First), _Sign);\r\n\r\n                            if constexpr ((_Mode & _Mode_min) != 0) {\r\n                                _Cur_vals_min = _Cur_vals;\r\n                                _Cur_idx_min  = _Traits::_Zero();\r\n                            }\r\n\r\n                            if constexpr ((_Mode & _Mode_max) != 0) {\r\n                                _Cur_vals_max = _Cur_vals;\r\n                                _Cur_idx_max  = _Traits::_Zero();\r\n                            }\r\n                        } else {\r\n                            break; // No wrapping, so it was the only portion\r\n                        }\r\n                    }\r\n                }\r\n\r\n                _Traits::_Exit_vectorized(); // TRANSITION, DevCom-10331414\r\n            }\r\n\r\n            if constexpr (_Traits::_Is_floating) {\r\n                if constexpr (_Mode == _Mode_min) {\r\n                    return _Min_tail(_First, _Last, _Res._Min, _Cur_min_val);\r\n                } else if constexpr (_Mode == _Mode_max) {\r\n                    return _Max_tail(_First, _Last, _Res._Max, _Cur_max_val);\r\n                } else {\r\n                    return _Both_tail(_First, _Last, _Res, _Cur_min_val, _Cur_max_val);\r\n                }\r\n            } else {\r\n                using _STy = _Traits::_Signed_t;\r\n                using _UTy = _Traits::_Unsigned_t;\r\n\r\n                constexpr _UTy _Correction = _Traits::_Has_unsigned_cmp ? 0 : _UTy{1} << (sizeof(_UTy) * 8 - 1);\r\n\r\n                if constexpr (_Mode == _Mode_min) {\r\n                    if (_Sign) {\r\n                        return _Min_tail(_First, _Last, _Res._Min, static_cast<_STy>(_Cur_min_val));\r\n                    } else {\r\n                        return _Min_tail(_First, _Last, _Res._Min, static_cast<_UTy>(_Cur_min_val + _Correction));\r\n                    }\r\n                } else if constexpr (_Mode == _Mode_max) {\r\n                    if (_Sign) {\r\n                        return _Max_tail(_First, _Last, _Res._Max, static_cast<_STy>(_Cur_max_val));\r\n                    } else {\r\n                        return _Max_tail(_First, _Last, _Res._Max, static_cast<_UTy>(_Cur_max_val + _Correction));\r\n                    }\r\n                } else {\r\n                    if (_Sign) {\r\n                        return _Both_tail(\r\n                            _First, _Last, _Res, static_cast<_STy>(_Cur_min_val), static_cast<_STy>(_Cur_max_val));\r\n                    } else {\r\n                        return _Both_tail(_First, _Last, _Res, static_cast<_UTy>(_Cur_min_val + _Correction),\r\n                            static_cast<_UTy>(_Cur_max_val + _Correction));\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        template <_Min_max_mode _Mode, class _Traits>\r\n        auto __stdcall _Minmax_element_disp(\r\n            const void* const _First, const void* const _Last, const bool _Sign) noexcept {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            if constexpr (!std::is_same_v<typename _Traits::_Neon, _Traits_8_neon>) {\r\n                if (_Byte_length(_First, _Last) >= 16) {\r\n                    if (_Sign) {\r\n                        return _Minmax_element_impl<_Mode, typename _Traits::_Neon, true>(_First, _Last);\r\n                    } else {\r\n                        return _Minmax_element_impl<_Mode, typename _Traits::_Neon, false>(_First, _Last);\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (_Sign) {\r\n                return _Minmax_element_impl<_Mode, typename _Traits::_Scalar, true>(_First, _Last);\r\n            } else {\r\n                return _Minmax_element_impl<_Mode, typename _Traits::_Scalar, false>(_First, _Last);\r\n            }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            if (_Byte_length(_First, _Last) >= 32 && _Use_avx2()) {\r\n                return _Minmax_element_impl<_Mode, typename _Traits::_Avx>(_First, _Last, _Sign);\r\n            }\r\n\r\n            if (_Byte_length(_First, _Last) >= 16 && _Use_sse42()) {\r\n                return _Minmax_element_impl<_Mode, typename _Traits::_Sse>(_First, _Last, _Sign);\r\n            }\r\n            return _Minmax_element_impl<_Mode, typename _Traits::_Scalar>(_First, _Last, _Sign);\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n        }\r\n\r\n        template <_Min_max_mode _Mode, class _Traits, bool _Sign, bool _Unrolled = false>\r\n        auto _Minmax_impl(const void* _First, const void* const _Last) noexcept {\r\n            using _Ty    = std::conditional_t<_Sign, typename _Traits::_Signed_t, typename _Traits::_Unsigned_t>;\r\n            using _VecTy = _Traits::_Vec_t;\r\n\r\n            _Ty _Cur_min_val; // initialized in both of the branches below\r\n            _Ty _Cur_max_val; // initialized in both of the branches below\r\n\r\n            if constexpr (_Traits::_Vectorized) {\r\n                constexpr size_t _Lanes          = _Unrolled ? 2 : 1;\r\n                constexpr size_t _Bytes_per_iter = _Lanes * _Traits::_Vec_size;\r\n\r\n                const size_t _Total_size_bytes = _Byte_length(_First, _Last);\r\n                const size_t _Vec_byte_size    = _Total_size_bytes & ~(_Bytes_per_iter - 1);\r\n\r\n                const void* _Stop_at = _First;\r\n                _Advance_bytes(_Stop_at, _Vec_byte_size);\r\n\r\n                // We don't have unsigned 64-bit stuff, so we'll use sign correction just for that case\r\n                constexpr bool _Sign_correction = sizeof(_Ty) == 8 && !_Sign && !_Traits::_Has_unsigned_cmp;\r\n\r\n                _VecTy _Cur_vals[_Lanes];\r\n                _VecTy _Cur_vals_min[_Lanes]; // vector of vertical minimum values\r\n                _VecTy _Cur_vals_max[_Lanes]; // vector of vertical maximum values\r\n                for (size_t _Lane = 0; _Lane < _Lanes; ++_Lane) {\r\n                    _Cur_vals[_Lane] = _Traits::_Load(static_cast<const uint8_t*>(_First) + _Lane * _Traits::_Vec_size);\r\n                    if constexpr (_Sign_correction) {\r\n                        _Cur_vals[_Lane] = _Traits::_Sign_correction(_Cur_vals[_Lane], false);\r\n                    }\r\n                    _Cur_vals_min[_Lane] = _Cur_vals[_Lane];\r\n                    _Cur_vals_max[_Lane] = _Cur_vals[_Lane];\r\n                }\r\n\r\n                const auto _Update_min_max = [&](const auto _Cur_vals, size_t _Lane = 0) noexcept {\r\n                    if constexpr ((_Mode & _Mode_min) != 0) {\r\n                        if constexpr (_Sign || _Sign_correction) {\r\n                            _Cur_vals_min[_Lane] =\r\n                                _Traits::_Min(_Cur_vals_min[_Lane], _Cur_vals); // Update the current minimum\r\n                        } else {\r\n                            _Cur_vals_min[_Lane] =\r\n                                _Traits::_Min_u(_Cur_vals_min[_Lane], _Cur_vals); // Update the current minimum\r\n                        }\r\n                    }\r\n\r\n                    if constexpr ((_Mode & _Mode_max) != 0) {\r\n                        if constexpr (_Sign || _Sign_correction) {\r\n                            _Cur_vals_max[_Lane] =\r\n                                _Traits::_Max(_Cur_vals_max[_Lane], _Cur_vals); // Update the current maximum\r\n                        } else {\r\n                            _Cur_vals_max[_Lane] =\r\n                                _Traits::_Max_u(_Cur_vals_max[_Lane], _Cur_vals); // Update the current maximum\r\n                        }\r\n                    }\r\n                };\r\n\r\n                for (;;) {\r\n                    _Advance_bytes(_First, _Bytes_per_iter);\r\n\r\n                    if (_First != _Stop_at) {\r\n                        // This is the main part, finding vertical minimum/maximum\r\n\r\n                        for (size_t _Lane = 0; _Lane < _Lanes; ++_Lane) {\r\n                            _Cur_vals[_Lane] =\r\n                                _Traits::_Load(static_cast<const uint8_t*>(_First) + _Lane * _Traits::_Vec_size);\r\n\r\n                            if constexpr (_Sign_correction) {\r\n                                _Cur_vals[_Lane] = _Traits::_Sign_correction(_Cur_vals[_Lane], false);\r\n                            }\r\n\r\n                            _Update_min_max(_Cur_vals[_Lane], _Lane);\r\n                        }\r\n                    } else {\r\n                        if constexpr (_Unrolled) {\r\n                            const bool _Has_vec_tail = (_Byte_length(_First, _Last) & ~_Traits::_Vec_mask) != 0;\r\n\r\n                            if (_Has_vec_tail) {\r\n                                _Cur_vals[0] = _Traits::_Load(_First);\r\n\r\n                                if constexpr (_Sign_correction) {\r\n                                    _Cur_vals[0] = _Traits::_Sign_correction(_Cur_vals[0], false);\r\n                                }\r\n\r\n                                _Update_min_max(_Cur_vals[0], 0);\r\n\r\n                                _Advance_bytes(_First, _Traits::_Vec_size);\r\n                            }\r\n                        }\r\n\r\n                        if constexpr (_Traits::_Tail_mask != 0) {\r\n                            const size_t _Tail_byte_size = _Total_size_bytes & _Traits::_Tail_mask;\r\n                            if (_Tail_byte_size != 0) {\r\n                                const auto _Tail_mask = _Avx2_tail_mask_32(_Tail_byte_size);\r\n                                auto _Tail_vals       = _Traits::_Load_mask(_First, _Tail_mask);\r\n\r\n                                if constexpr (_Sign_correction) {\r\n                                    _Tail_vals = _Traits::_Sign_correction(_Tail_vals, false);\r\n                                }\r\n\r\n                                _Tail_vals = _Traits::_Blendval(_Cur_vals[0], _Tail_vals, _Tail_mask);\r\n\r\n                                _Update_min_max(_Tail_vals);\r\n\r\n                                _Advance_bytes(_First, _Tail_byte_size);\r\n                            }\r\n                        }\r\n\r\n                        // Reached end. Compute horizontal min and/or max.\r\n\r\n                        if constexpr ((_Mode & _Mode_min) != 0) {\r\n                            if constexpr (_Sign || _Sign_correction) {\r\n                                if constexpr (_Unrolled) {\r\n                                    for (size_t _Lane = 1; _Lane < _Lanes; ++_Lane) {\r\n                                        _Cur_vals_min[0] = _Traits::_Min(_Cur_vals_min[0], _Cur_vals_min[_Lane]);\r\n                                    }\r\n                                }\r\n\r\n                                // Vector populated by the smallest element\r\n                                const auto _H_min = _Traits::_H_min(_Cur_vals_min[0]);\r\n                                _Cur_min_val      = _Traits::_Get_any(_H_min); // Get any element of it\r\n                            } else {\r\n                                if constexpr (_Unrolled) {\r\n                                    for (size_t _Lane = 1; _Lane < _Lanes; ++_Lane) {\r\n                                        _Cur_vals_min[0] = _Traits::_Min_u(_Cur_vals_min[0], _Cur_vals_min[_Lane]);\r\n                                    }\r\n                                }\r\n\r\n                                // Vector populated by the smallest element\r\n                                const auto _H_min = _Traits::_H_min_u(_Cur_vals_min[0]);\r\n                                _Cur_min_val      = _Traits::_Get_any(_H_min); // Get any element of it\r\n                            }\r\n                        }\r\n\r\n                        if constexpr ((_Mode & _Mode_max) != 0) {\r\n                            if constexpr (_Sign || _Sign_correction) {\r\n                                if constexpr (_Unrolled) {\r\n                                    for (size_t _Lane = 1; _Lane < _Lanes; ++_Lane) {\r\n                                        _Cur_vals_max[0] = _Traits::_Max(_Cur_vals_max[0], _Cur_vals_max[_Lane]);\r\n                                    }\r\n                                }\r\n\r\n                                // Vector populated by the largest element\r\n                                const auto _H_max = _Traits::_H_max(_Cur_vals_max[0]);\r\n                                _Cur_max_val      = _Traits::_Get_any(_H_max); // Get any element of it\r\n                            } else {\r\n                                if constexpr (_Unrolled) {\r\n                                    for (size_t _Lane = 1; _Lane < _Lanes; ++_Lane) {\r\n                                        _Cur_vals_max[0] = _Traits::_Max_u(_Cur_vals_max[0], _Cur_vals_max[_Lane]);\r\n                                    }\r\n                                }\r\n\r\n                                // Vector populated by the largest element\r\n                                const auto _H_max = _Traits::_H_max_u(_Cur_vals_max[0]);\r\n                                _Cur_max_val      = _Traits::_Get_any(_H_max); // Get any element of it\r\n                            }\r\n                        }\r\n\r\n                        if constexpr (_Sign_correction) {\r\n                            constexpr _Ty _Correction = _Ty{1} << (sizeof(_Ty) * 8 - 1);\r\n\r\n                            if constexpr ((_Mode & _Mode_min) != 0) {\r\n                                _Cur_min_val += _Correction;\r\n                            }\r\n\r\n                            if constexpr ((_Mode & _Mode_max) != 0) {\r\n                                _Cur_max_val += _Correction;\r\n                            }\r\n                        }\r\n\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                _Traits::_Exit_vectorized(); // TRANSITION, DevCom-10331414\r\n            } else {\r\n                _Cur_min_val = *reinterpret_cast<const _Ty*>(_First);\r\n                _Cur_max_val = *reinterpret_cast<const _Ty*>(_First);\r\n\r\n                _Advance_bytes(_First, sizeof(_Ty));\r\n            }\r\n\r\n// Avoid auto-vectorization of the scalar tail, as this is not beneficial for performance.\r\n#pragma loop(no_vector)\r\n            for (auto _Ptr = static_cast<const _Ty*>(_First); _Ptr != _Last; ++_Ptr) {\r\n                if constexpr ((_Mode & _Mode_min) != 0) {\r\n                    if (*_Ptr < _Cur_min_val) {\r\n                        _Cur_min_val = *_Ptr;\r\n                    }\r\n                }\r\n\r\n                if constexpr ((_Mode & _Mode_max) != 0) {\r\n                    if (_Cur_max_val < *_Ptr) {\r\n                        _Cur_max_val = *_Ptr;\r\n                    }\r\n                }\r\n\r\n                // _Mode_both could have been handled separately with 'else'.\r\n                // We have _Cur_min_val / _Cur_max_val initialized by processing at least one element,\r\n                // so the 'else' would be correct here.\r\n                // But still separate 'if' statements promote branchless codegen.\r\n            }\r\n\r\n            if constexpr (_Mode == _Mode_min) {\r\n                return _Cur_min_val;\r\n            } else if constexpr (_Mode == _Mode_max) {\r\n                return _Cur_max_val;\r\n            } else {\r\n                using _Rx = std::conditional_t<_Sign, typename _Traits::_Minmax_i_t, typename _Traits::_Minmax_u_t>;\r\n                return _Rx{_Cur_min_val, _Cur_max_val};\r\n            }\r\n        }\r\n\r\n#if !defined(_M_ARM64) && !defined(_M_ARM64EC)\r\n        // TRANSITION, DevCom-10767462\r\n        template <_Min_max_mode _Mode, class _Traits, bool _Sign>\r\n        auto _Minmax_impl_wrap(const void* const _First, const void* const _Last) noexcept {\r\n            auto _Rx = _Minmax_impl<_Mode, _Traits, _Sign>(_First, _Last);\r\n            _mm256_zeroupper();\r\n            return _Rx;\r\n        }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n        template <_Min_max_mode _Mode, class _Traits, bool _Sign>\r\n        auto __stdcall _Minmax_disp(const void* const _First, const void* const _Last) noexcept {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            if (_Byte_length(_First, _Last) >= 32) {\r\n                return _Minmax_impl<_Mode, typename _Traits::_Neon, _Sign, true>(_First, _Last);\r\n            }\r\n\r\n            if (_Byte_length(_First, _Last) >= 16) {\r\n                return _Minmax_impl<_Mode, typename _Traits::_Neon, _Sign, false>(_First, _Last);\r\n            }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            if (_Byte_length(_First, _Last) >= 32 && _Use_avx2()) {\r\n                if constexpr (_Traits::_Avx::_Is_floating) {\r\n                    return _Minmax_impl_wrap<_Mode, typename _Traits::_Avx, _Sign>(_First, _Last);\r\n                } else {\r\n                    return _Minmax_impl<_Mode, typename _Traits::_Avx, _Sign>(_First, _Last);\r\n                }\r\n            }\r\n\r\n            if (_Byte_length(_First, _Last) >= 16 && _Use_sse42()) {\r\n                return _Minmax_impl<_Mode, typename _Traits::_Sse, _Sign>(_First, _Last);\r\n            }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n            return _Minmax_impl<_Mode, typename _Traits::_Scalar, _Sign>(_First, _Last);\r\n        }\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        template <class _Traits, class _Ty>\r\n        const void* _Is_sorted_until_impl(const void* _First, const void* const _Last, const bool _Greater) noexcept {\r\n            const ptrdiff_t _Left_off  = 0 - static_cast<ptrdiff_t>(_Greater);\r\n            const ptrdiff_t _Right_off = static_cast<ptrdiff_t>(_Greater) - 1;\r\n\r\n            if constexpr (_Traits::_Vectorized) {\r\n                const size_t _Total_size_bytes = _Byte_length(_First, _Last);\r\n\r\n                const auto _Cmp_gt_wrap = [](const auto _Right, const auto _Left) noexcept {\r\n                    constexpr bool _Unsigned = static_cast<_Ty>(-1) > _Ty{0};\r\n\r\n                    if constexpr (_Unsigned && _Traits::_Has_unsigned_cmp) {\r\n                        return _Traits::_Cmp_gt_u(_Right, _Left);\r\n                    } else {\r\n                        return _Traits::_Cmp_gt(_Right, _Left);\r\n                    }\r\n                };\r\n\r\n                if (_Total_size_bytes >= 32) {\r\n                    constexpr size_t _Bytes_per_iter = 2 * _Traits::_Vec_size;\r\n                    const size_t _Vec_byte_size      = _Total_size_bytes & ~(_Bytes_per_iter - 1);\r\n                    const void* _Stop_at             = _First;\r\n                    _Advance_bytes(_Stop_at, _Vec_byte_size);\r\n\r\n                    do {\r\n                        const void* const _Next = static_cast<const uint8_t*>(_First) + _Traits::_Vec_size;\r\n\r\n                        const auto _Left_lo  = _Traits::_Load(static_cast<const _Ty*>(_First) + _Left_off);\r\n                        const auto _Right_lo = _Traits::_Load(static_cast<const _Ty*>(_First) + _Right_off);\r\n                        const auto _Left_hi  = _Traits::_Load(static_cast<const _Ty*>(_Next) + _Left_off);\r\n                        const auto _Right_hi = _Traits::_Load(static_cast<const _Ty*>(_Next) + _Right_off);\r\n\r\n                        const auto _Is_less_lo = _Cmp_gt_wrap(_Right_lo, _Left_lo);\r\n                        const auto _Is_less_hi = _Cmp_gt_wrap(_Right_hi, _Left_hi);\r\n                        const auto _Any_match  = _Traits::_Match_mask(_Is_less_lo, _Is_less_hi);\r\n\r\n                        if (_Any_match != 0) {\r\n                            const auto _Mask_lo = _Traits::_Mask(_Is_less_lo);\r\n                            if (_Mask_lo != 0) {\r\n                                const unsigned long _H_pos = _Traits::_Get_first_h_pos(_Mask_lo);\r\n                                _Advance_bytes(_First, _H_pos);\r\n                                return _First;\r\n                            }\r\n\r\n                            const auto _Mask_hi        = _Traits::_Mask(_Is_less_hi);\r\n                            const unsigned long _H_pos = _Traits::_Get_first_h_pos(_Mask_hi) + _Traits::_Vec_size;\r\n                            _Advance_bytes(_First, _H_pos);\r\n                            return _First;\r\n                        }\r\n\r\n                        _Advance_bytes(_First, 2 * _Traits::_Vec_size);\r\n                    } while (_First != _Stop_at);\r\n                }\r\n\r\n                const size_t _Has_vec_tail = (_Byte_length(_First, _Last) & ~_Traits::_Vec_mask) != 0;\r\n                if (_Has_vec_tail) {\r\n                    const auto _Left  = _Traits::_Load(static_cast<const _Ty*>(_First) + _Left_off);\r\n                    const auto _Right = _Traits::_Load(static_cast<const _Ty*>(_First) + _Right_off);\r\n\r\n                    const auto _Is_less = _Cmp_gt_wrap(_Right, _Left);\r\n                    const auto _Mask    = _Traits::_Mask(_Traits::_Mask_cast(_Is_less));\r\n\r\n                    if (_Mask != 0) {\r\n                        const unsigned long _H_pos = _Traits::_Get_first_h_pos(_Mask);\r\n                        _Advance_bytes(_First, _H_pos);\r\n                        return _First;\r\n                    }\r\n\r\n                    _Advance_bytes(_First, _Traits::_Vec_size);\r\n                }\r\n            }\r\n\r\n            for (const _Ty* _Ptr = static_cast<const _Ty*>(_First); _Ptr != _Last; ++_Ptr) {\r\n                if (_Ptr[_Left_off] < _Ptr[_Right_off]) {\r\n                    return _Ptr;\r\n                }\r\n            }\r\n\r\n            return _Last;\r\n        }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        template <class _Traits, class _Ty>\r\n        const void* _Is_sorted_until_impl(const void* _First, const void* const _Last, const bool _Greater) noexcept {\r\n            const ptrdiff_t _Left_off  = 0 - static_cast<ptrdiff_t>(_Greater);\r\n            const ptrdiff_t _Right_off = static_cast<ptrdiff_t>(_Greater) - 1;\r\n\r\n            if constexpr (_Traits::_Vectorized) {\r\n                [[maybe_unused]] typename _Traits::_Guard _Guard; // TRANSITION, DevCom-10331414\r\n\r\n                constexpr bool _Sign_cor = static_cast<_Ty>(-1) > _Ty{0};\r\n\r\n                const size_t _Total_size_bytes = _Byte_length(_First, _Last);\r\n                const size_t _Vec_byte_size    = _Total_size_bytes & ~_Traits::_Vec_mask;\r\n\r\n                const void* _Stop_at = _First;\r\n                _Advance_bytes(_Stop_at, _Vec_byte_size);\r\n\r\n                do {\r\n                    auto _Left  = _Traits::_Load(static_cast<const _Ty*>(_First) + _Left_off);\r\n                    auto _Right = _Traits::_Load(static_cast<const _Ty*>(_First) + _Right_off);\r\n\r\n                    if constexpr (_Sign_cor) {\r\n                        _Left  = _Traits::_Sign_correction(_Left, false);\r\n                        _Right = _Traits::_Sign_correction(_Right, false);\r\n                    }\r\n\r\n                    const auto _Is_less = _Traits::_Cmp_gt(_Right, _Left);\r\n                    const auto _Mask    = _Traits::_Mask(_Traits::_Mask_cast(_Is_less));\r\n\r\n                    if (_Mask != 0) {\r\n                        const unsigned long _H_pos = _Traits::_Get_first_h_pos(_Mask);\r\n                        _Advance_bytes(_First, _H_pos);\r\n                        return _First;\r\n                    }\r\n\r\n                    _Advance_bytes(_First, _Traits::_Vec_size);\r\n                } while (_First != _Stop_at);\r\n\r\n                if constexpr (_Traits::_Tail_mask != 0) {\r\n                    const size_t _Tail_byte_size = _Total_size_bytes & _Traits::_Tail_mask;\r\n                    if (_Tail_byte_size != 0) {\r\n                        const auto _Tail_mask = _Avx2_tail_mask_32(_Tail_byte_size);\r\n\r\n                        auto _Left  = _Traits::_Load_mask(static_cast<const _Ty*>(_First) + _Left_off, _Tail_mask);\r\n                        auto _Right = _Traits::_Load_mask(static_cast<const _Ty*>(_First) + _Right_off, _Tail_mask);\r\n\r\n                        if constexpr (_Sign_cor) {\r\n                            _Left  = _Traits::_Sign_correction(_Left, false);\r\n                            _Right = _Traits::_Sign_correction(_Right, false);\r\n                        }\r\n\r\n                        const auto _Is_less = _Traits::_Cmp_gt(_Right, _Left);\r\n                        const auto _Mask = _Traits::_Mask(_mm256_and_si256(_Traits::_Mask_cast(_Is_less), _Tail_mask));\r\n\r\n                        if (_Mask != 0) {\r\n                            const unsigned long _H_pos = _Traits::_Get_first_h_pos(_Mask);\r\n                            _Advance_bytes(_First, _H_pos);\r\n                            return _First;\r\n                        }\r\n\r\n                        _Advance_bytes(_First, _Tail_byte_size);\r\n                    }\r\n                }\r\n            }\r\n\r\n            if constexpr ((_Traits::_Tail_mask & sizeof(_Ty)) != sizeof(_Ty)) {\r\n                for (const _Ty* _Ptr = static_cast<const _Ty*>(_First); _Ptr != _Last; ++_Ptr) {\r\n                    if (_Ptr[_Left_off] < _Ptr[_Right_off]) {\r\n                        return _Ptr;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return _Last;\r\n        }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n        template <class _Traits, class _Ty>\r\n        const void* __stdcall _Is_sorted_until_disp(\r\n            const void* _First, const void* const _Last, const bool _Greater) noexcept {\r\n            if (_First == _Last) {\r\n                return _First;\r\n            }\r\n\r\n            _Advance_bytes(_First, sizeof(_Ty));\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            if (_Byte_length(_First, _Last) >= 16) {\r\n                return _Is_sorted_until_impl<typename _Traits::_Neon, _Ty>(_First, _Last, _Greater);\r\n            }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            if (_Byte_length(_First, _Last) >= 32 && _Use_avx2()) {\r\n                return _Is_sorted_until_impl<typename _Traits::_Avx, _Ty>(_First, _Last, _Greater);\r\n            }\r\n\r\n            if (_Byte_length(_First, _Last) >= 16 && _Use_sse42()) {\r\n                return _Is_sorted_until_impl<typename _Traits::_Sse, _Ty>(_First, _Last, _Greater);\r\n            }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n            return _Is_sorted_until_impl<typename _Traits::_Scalar, _Ty>(_First, _Last, _Greater);\r\n        }\r\n    } // namespace _Sorting\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\nconst void* __stdcall __std_min_element_1(\r\n    const void* const _First, const void* const _Last, const bool _Signed) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_min, _Sorting::_Traits_1>(_First, _Last, _Signed);\r\n}\r\n\r\nconst void* __stdcall __std_min_element_2(\r\n    const void* const _First, const void* const _Last, const bool _Signed) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_min, _Sorting::_Traits_2>(_First, _Last, _Signed);\r\n}\r\n\r\nconst void* __stdcall __std_min_element_4(\r\n    const void* const _First, const void* const _Last, const bool _Signed) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_min, _Sorting::_Traits_4>(_First, _Last, _Signed);\r\n}\r\n\r\n#ifndef _M_ARM64\r\nconst void* __stdcall __std_min_element_8(\r\n    const void* const _First, const void* const _Last, const bool _Signed) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_min, _Sorting::_Traits_8>(_First, _Last, _Signed);\r\n}\r\n#endif // ^^^ !defined(_M_ARM64) ^^^\r\n\r\n// TRANSITION, ABI: remove unused `bool`\r\nconst void* __stdcall __std_min_element_f(const void* const _First, const void* const _Last, bool) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_min, _Sorting::_Traits_f>(_First, _Last, false);\r\n}\r\n\r\n// TRANSITION, ABI: remove unused `bool`\r\nconst void* __stdcall __std_min_element_d(const void* const _First, const void* const _Last, bool) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_min, _Sorting::_Traits_d>(_First, _Last, false);\r\n}\r\n\r\nconst void* __stdcall __std_max_element_1(\r\n    const void* const _First, const void* const _Last, const bool _Signed) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_max, _Sorting::_Traits_1>(_First, _Last, _Signed);\r\n}\r\n\r\nconst void* __stdcall __std_max_element_2(\r\n    const void* const _First, const void* const _Last, const bool _Signed) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_max, _Sorting::_Traits_2>(_First, _Last, _Signed);\r\n}\r\n\r\nconst void* __stdcall __std_max_element_4(\r\n    const void* const _First, const void* const _Last, const bool _Signed) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_max, _Sorting::_Traits_4>(_First, _Last, _Signed);\r\n}\r\n\r\n#ifndef _M_ARM64\r\nconst void* __stdcall __std_max_element_8(\r\n    const void* const _First, const void* const _Last, const bool _Signed) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_max, _Sorting::_Traits_8>(_First, _Last, _Signed);\r\n}\r\n#endif // ^^^ !defined(_M_ARM64) ^^^\r\n\r\n// TRANSITION, ABI: remove unused `bool`\r\nconst void* __stdcall __std_max_element_f(const void* const _First, const void* const _Last, bool) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_max, _Sorting::_Traits_f>(_First, _Last, false);\r\n}\r\n\r\n// TRANSITION, ABI: remove unused `bool`\r\nconst void* __stdcall __std_max_element_d(const void* const _First, const void* const _Last, bool) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_max, _Sorting::_Traits_d>(_First, _Last, false);\r\n}\r\n\r\n_Min_max_element_t __stdcall __std_minmax_element_1(\r\n    const void* const _First, const void* const _Last, const bool _Signed) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_both, _Sorting::_Traits_1>(_First, _Last, _Signed);\r\n}\r\n\r\n_Min_max_element_t __stdcall __std_minmax_element_2(\r\n    const void* const _First, const void* const _Last, const bool _Signed) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_both, _Sorting::_Traits_2>(_First, _Last, _Signed);\r\n}\r\n\r\n_Min_max_element_t __stdcall __std_minmax_element_4(\r\n    const void* const _First, const void* const _Last, const bool _Signed) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_both, _Sorting::_Traits_4>(_First, _Last, _Signed);\r\n}\r\n\r\n#ifndef _M_ARM64\r\n_Min_max_element_t __stdcall __std_minmax_element_8(\r\n    const void* const _First, const void* const _Last, const bool _Signed) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_both, _Sorting::_Traits_8>(_First, _Last, _Signed);\r\n}\r\n#endif // ^^^ !defined(_M_ARM64) ^^^\r\n\r\n// TRANSITION, ABI: remove unused `bool`\r\n_Min_max_element_t __stdcall __std_minmax_element_f(const void* const _First, const void* const _Last, bool) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_both, _Sorting::_Traits_f>(_First, _Last, false);\r\n}\r\n\r\n// TRANSITION, ABI: remove unused `bool`\r\n_Min_max_element_t __stdcall __std_minmax_element_d(const void* const _First, const void* const _Last, bool) noexcept {\r\n    return _Sorting::_Minmax_element_disp<_Sorting::_Mode_both, _Sorting::_Traits_d>(_First, _Last, false);\r\n}\r\n\r\n__declspec(noalias) int8_t __stdcall __std_min_1i(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_min, _Sorting::_Traits_1, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) uint8_t __stdcall __std_min_1u(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_min, _Sorting::_Traits_1, false>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) int16_t __stdcall __std_min_2i(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_min, _Sorting::_Traits_2, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) uint16_t __stdcall __std_min_2u(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_min, _Sorting::_Traits_2, false>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) int32_t __stdcall __std_min_4i(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_min, _Sorting::_Traits_4, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) uint32_t __stdcall __std_min_4u(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_min, _Sorting::_Traits_4, false>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) int64_t __stdcall __std_min_8i(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_min, _Sorting::_Traits_8, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) uint64_t __stdcall __std_min_8u(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_min, _Sorting::_Traits_8, false>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) float __stdcall __std_min_f(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_min, _Sorting::_Traits_f, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) double __stdcall __std_min_d(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_min, _Sorting::_Traits_d, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) int8_t __stdcall __std_max_1i(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_max, _Sorting::_Traits_1, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) uint8_t __stdcall __std_max_1u(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_max, _Sorting::_Traits_1, false>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) int16_t __stdcall __std_max_2i(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_max, _Sorting::_Traits_2, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) uint16_t __stdcall __std_max_2u(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_max, _Sorting::_Traits_2, false>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) int32_t __stdcall __std_max_4i(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_max, _Sorting::_Traits_4, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) uint32_t __stdcall __std_max_4u(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_max, _Sorting::_Traits_4, false>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) int64_t __stdcall __std_max_8i(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_max, _Sorting::_Traits_8, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) uint64_t __stdcall __std_max_8u(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_max, _Sorting::_Traits_8, false>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) float __stdcall __std_max_f(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_max, _Sorting::_Traits_f, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) double __stdcall __std_max_d(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_max, _Sorting::_Traits_d, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) _Min_max_1i __stdcall __std_minmax_1i(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_both, _Sorting::_Traits_1, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) _Min_max_1u __stdcall __std_minmax_1u(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_both, _Sorting::_Traits_1, false>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) _Min_max_2i __stdcall __std_minmax_2i(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_both, _Sorting::_Traits_2, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) _Min_max_2u __stdcall __std_minmax_2u(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_both, _Sorting::_Traits_2, false>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) _Min_max_4i __stdcall __std_minmax_4i(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_both, _Sorting::_Traits_4, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) _Min_max_4u __stdcall __std_minmax_4u(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_both, _Sorting::_Traits_4, false>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) _Min_max_8i __stdcall __std_minmax_8i(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_both, _Sorting::_Traits_8, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) _Min_max_8u __stdcall __std_minmax_8u(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_both, _Sorting::_Traits_8, false>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) _Min_max_f __stdcall __std_minmax_f(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_both, _Sorting::_Traits_f, true>(_First, _Last);\r\n}\r\n\r\n__declspec(noalias) _Min_max_d __stdcall __std_minmax_d(const void* const _First, const void* const _Last) noexcept {\r\n    return _Sorting::_Minmax_disp<_Sorting::_Mode_both, _Sorting::_Traits_d, true>(_First, _Last);\r\n}\r\n\r\nconst void* __stdcall __std_is_sorted_until_1i(\r\n    const void* const _First, const void* const _Last, const bool _Greater) noexcept {\r\n    return _Sorting::_Is_sorted_until_disp<_Sorting::_Traits_1, int8_t>(_First, _Last, _Greater);\r\n}\r\n\r\nconst void* __stdcall __std_is_sorted_until_1u(\r\n    const void* const _First, const void* const _Last, const bool _Greater) noexcept {\r\n    return _Sorting::_Is_sorted_until_disp<_Sorting::_Traits_1, uint8_t>(_First, _Last, _Greater);\r\n}\r\n\r\nconst void* __stdcall __std_is_sorted_until_2i(\r\n    const void* const _First, const void* const _Last, const bool _Greater) noexcept {\r\n    return _Sorting::_Is_sorted_until_disp<_Sorting::_Traits_2, int16_t>(_First, _Last, _Greater);\r\n}\r\n\r\nconst void* __stdcall __std_is_sorted_until_2u(\r\n    const void* const _First, const void* const _Last, const bool _Greater) noexcept {\r\n    return _Sorting::_Is_sorted_until_disp<_Sorting::_Traits_2, uint16_t>(_First, _Last, _Greater);\r\n}\r\n\r\nconst void* __stdcall __std_is_sorted_until_4i(\r\n    const void* const _First, const void* const _Last, const bool _Greater) noexcept {\r\n    return _Sorting::_Is_sorted_until_disp<_Sorting::_Traits_4, int32_t>(_First, _Last, _Greater);\r\n}\r\n\r\nconst void* __stdcall __std_is_sorted_until_4u(\r\n    const void* const _First, const void* const _Last, const bool _Greater) noexcept {\r\n    return _Sorting::_Is_sorted_until_disp<_Sorting::_Traits_4, uint32_t>(_First, _Last, _Greater);\r\n}\r\n\r\nconst void* __stdcall __std_is_sorted_until_8i(\r\n    const void* const _First, const void* const _Last, const bool _Greater) noexcept {\r\n    return _Sorting::_Is_sorted_until_disp<_Sorting::_Traits_8, int64_t>(_First, _Last, _Greater);\r\n}\r\n\r\nconst void* __stdcall __std_is_sorted_until_8u(\r\n    const void* const _First, const void* const _Last, const bool _Greater) noexcept {\r\n    return _Sorting::_Is_sorted_until_disp<_Sorting::_Traits_8, uint64_t>(_First, _Last, _Greater);\r\n}\r\n\r\nconst void* __stdcall __std_is_sorted_until_f(\r\n    const void* const _First, const void* const _Last, const bool _Greater) noexcept {\r\n    return _Sorting::_Is_sorted_until_disp<_Sorting::_Traits_f, float>(_First, _Last, _Greater);\r\n}\r\n\r\nconst void* __stdcall __std_is_sorted_until_d(\r\n    const void* const _First, const void* const _Last, const bool _Greater) noexcept {\r\n    return _Sorting::_Is_sorted_until_disp<_Sorting::_Traits_d, double>(_First, _Last, _Greater);\r\n}\r\n\r\n} // extern \"C\"\r\n\r\nnamespace {\r\n    namespace _Finding {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        struct _Find_traits_1 {\r\n            static uint8x16_t _Load_q(const void* const _Ptr) noexcept {\r\n                return vld1q_u8(static_cast<const uint8_t*>(_Ptr));\r\n            }\r\n\r\n            static uint8x8_t _Load(const void* const _Ptr) noexcept {\r\n                return vld1_u8(static_cast<const uint8_t*>(_Ptr));\r\n            }\r\n\r\n            static void _Store_q(void* const _Ptr, const uint8x16_t _Val) noexcept {\r\n                vst1q_u8(static_cast<uint8_t*>(_Ptr), _Val);\r\n            }\r\n\r\n            static void _Store(void* const _Ptr, const uint8x8_t _Val) noexcept {\r\n                vst1_u8(static_cast<uint8_t*>(_Ptr), _Val);\r\n            }\r\n\r\n            static uint8x16_t _Set_neon_q(const uint8_t _Val) noexcept {\r\n                return vdupq_n_u8(_Val);\r\n            }\r\n\r\n            static uint8x8_t _Set_neon(const uint8_t _Val) noexcept {\r\n                return vdup_n_u8(_Val);\r\n            }\r\n\r\n            static uint8x16_t _Cmp_neon_q(const uint8x16_t _Lhs, const uint8x16_t _Rhs) noexcept {\r\n                return vceqq_u8(_Lhs, _Rhs);\r\n            }\r\n\r\n            static uint8x8_t _Cmp_neon(const uint8x8_t _Lhs, const uint8x8_t _Rhs) noexcept {\r\n                return vceq_u8(_Lhs, _Rhs);\r\n            }\r\n\r\n            // Compresses a 128-bit Mask of 16 8-bit values into a 64-bit Mask of 16 4-bit values.\r\n            static uint64_t _Mask_q(const uint8x16_t _Val) noexcept {\r\n                const uint8x8_t _Res = vshrn_n_u16(vreinterpretq_u16_u8(_Val), 4);\r\n                return vget_lane_u64(vreinterpret_u64_u8(_Res), 0);\r\n            }\r\n\r\n            static uint64_t _Mask(const uint8x8_t _Val) noexcept {\r\n                return vget_lane_u64(vreinterpret_u64_u8(_Val), 0);\r\n            }\r\n\r\n            static uint64_t _Match_mask_eq(const uint8x16_t _Cmp_lo, const uint8x16_t _Cmp_hi) noexcept {\r\n                const auto _Cmp = vreinterpretq_u64_u8(vorrq_u8(_Cmp_lo, _Cmp_hi));\r\n                return vgetq_lane_u64(vpaddq_u64(_Cmp, _Cmp), 0);\r\n            }\r\n\r\n            static uint64_t _Match_mask_ne(const uint8x16_t _Cmp_lo, const uint8x16_t _Cmp_hi) noexcept {\r\n                const auto _Cmp  = vminq_u8(_Cmp_lo, _Cmp_hi);\r\n                const auto _Comb = vreinterpretq_u64_u8(vpminq_u8(_Cmp, _Cmp));\r\n                return vgetq_lane_u64(_Comb, 0) ^ 0xFFFF'FFFF'FFFF'FFFF;\r\n            }\r\n\r\n            static uint8x16_t _Blend_q(const uint8x16_t _Px1, const uint8x16_t _Px2, const uint8x16_t _Msk) noexcept {\r\n                return vbslq_u8(_Msk, _Px2, _Px1);\r\n            }\r\n\r\n            static uint8x8_t _Blend(const uint8x8_t _Px1, const uint8x8_t _Px2, const uint8x8_t _Msk) noexcept {\r\n                return vbsl_u8(_Msk, _Px2, _Px1);\r\n            }\r\n\r\n            static uint64_t _Nibble_mask(const uint8x16_t _Val) noexcept {\r\n                return _Mask_q(_Val);\r\n            }\r\n        };\r\n\r\n        struct _Find_traits_2 {\r\n            static uint16x8_t _Load_q(const void* const _Ptr) noexcept {\r\n                return vld1q_u16(static_cast<const uint16_t*>(_Ptr));\r\n            }\r\n\r\n            static uint16x4_t _Load(const void* const _Ptr) noexcept {\r\n                return vld1_u16(static_cast<const uint16_t*>(_Ptr));\r\n            }\r\n\r\n            static void _Store_q(void* const _Ptr, const uint16x8_t _Val) noexcept {\r\n                vst1q_u16(static_cast<uint16_t*>(_Ptr), _Val);\r\n            }\r\n\r\n            static void _Store(void* const _Ptr, const uint16x4_t _Val) noexcept {\r\n                vst1_u16(static_cast<uint16_t*>(_Ptr), _Val);\r\n            }\r\n\r\n            static uint16x8_t _Set_neon_q(const uint16_t _Val) noexcept {\r\n                return vdupq_n_u16(_Val);\r\n            }\r\n\r\n            static uint16x4_t _Set_neon(const uint16_t _Val) noexcept {\r\n                return vdup_n_u16(_Val);\r\n            }\r\n\r\n            static uint16x8_t _Cmp_neon_q(const uint16x8_t _Lhs, const uint16x8_t _Rhs) noexcept {\r\n                return vceqq_u16(_Lhs, _Rhs);\r\n            }\r\n\r\n            static uint16x4_t _Cmp_neon(const uint16x4_t _Lhs, const uint16x4_t _Rhs) noexcept {\r\n                return vceq_u16(_Lhs, _Rhs);\r\n            }\r\n\r\n            // Compresses a 128-bit Mask of 8 16-bit values into a 64-bit Mask of 8 8-bit values.\r\n            static uint64_t _Mask_q(const uint16x8_t _Val) noexcept {\r\n                const uint16x4_t _Res = vshrn_n_u32(vreinterpretq_u32_u16(_Val), 8);\r\n                return vget_lane_u64(vreinterpret_u64_u16(_Res), 0);\r\n            }\r\n\r\n            static uint64_t _Mask(const uint16x4_t _Val) noexcept {\r\n                return vget_lane_u64(vreinterpret_u64_u16(_Val), 0);\r\n            }\r\n\r\n            static uint64_t _Match_mask_eq(const uint16x8_t _Cmp_lo, const uint16x8_t _Cmp_hi) noexcept {\r\n                const uint8x8_t _Cmp = vaddhn_u16(_Cmp_lo, _Cmp_hi);\r\n                return vget_lane_u64(vreinterpret_u64_u8(_Cmp), 0);\r\n            }\r\n\r\n            static uint64_t _Match_mask_ne(const uint16x8_t _Cmp_lo, const uint16x8_t _Cmp_hi) noexcept {\r\n                const auto _Cmp  = vminq_u16(_Cmp_lo, _Cmp_hi);\r\n                const auto _Comb = vreinterpretq_u64_u16(vpminq_u16(_Cmp, _Cmp));\r\n                return vgetq_lane_u64(_Comb, 0) ^ 0xFFFF'FFFF'FFFF'FFFF;\r\n            }\r\n\r\n            static uint16x8_t _Blend_q(const uint16x8_t _Px1, const uint16x8_t _Px2, const uint16x8_t _Msk) noexcept {\r\n                return vbslq_u16(_Msk, _Px2, _Px1);\r\n            }\r\n\r\n            static uint16x4_t _Blend(const uint16x4_t _Px1, const uint16x4_t _Px2, const uint16x4_t _Msk) noexcept {\r\n                return vbsl_u16(_Msk, _Px2, _Px1);\r\n            }\r\n\r\n            static uint64_t _Nibble_mask(const uint16x8_t _Val) noexcept {\r\n                return _Find_traits_1::_Nibble_mask(vreinterpretq_u8_u16(_Val));\r\n            }\r\n        };\r\n\r\n        struct _Find_traits_4 {\r\n            static uint32x4_t _Load_q(const void* const _Ptr) noexcept {\r\n                return vld1q_u32(static_cast<const uint32_t*>(_Ptr));\r\n            }\r\n\r\n            static uint32x2_t _Load(const void* const _Ptr) noexcept {\r\n                return vld1_u32(static_cast<const uint32_t*>(_Ptr));\r\n            }\r\n\r\n            static void _Store_q(void* const _Ptr, const uint32x4_t _Val) noexcept {\r\n                vst1q_u32(static_cast<uint32_t*>(_Ptr), _Val);\r\n            }\r\n\r\n            static void _Store(void* const _Ptr, const uint32x2_t _Val) noexcept {\r\n                vst1_u32(static_cast<uint32_t*>(_Ptr), _Val);\r\n            }\r\n\r\n            static uint32x4_t _Set_neon_q(const uint32_t _Val) noexcept {\r\n                return vdupq_n_u32(_Val);\r\n            }\r\n\r\n            static uint32x2_t _Set_neon(const uint32_t _Val) noexcept {\r\n                return vdup_n_u32(_Val);\r\n            }\r\n\r\n            static uint32x4_t _Cmp_neon_q(const uint32x4_t _Lhs, const uint32x4_t _Rhs) noexcept {\r\n                return vceqq_u32(_Lhs, _Rhs);\r\n            }\r\n\r\n            static uint32x2_t _Cmp_neon(const uint32x2_t _Lhs, const uint32x2_t _Rhs) noexcept {\r\n                return vceq_u32(_Lhs, _Rhs);\r\n            }\r\n\r\n            // Compresses a 128-bit Mask of 4 32-bit values into a 64-bit Mask of 4 16-bit values.\r\n            static uint64_t _Mask_q(const uint32x4_t _Val) noexcept {\r\n                const uint32x2_t _Res = vshrn_n_u64(vreinterpretq_u64_u32(_Val), 16);\r\n                return vget_lane_u64(vreinterpret_u64_u32(_Res), 0);\r\n            }\r\n\r\n            static uint64_t _Mask(const uint32x2_t _Val) noexcept {\r\n                return vget_lane_u64(vreinterpret_u64_u32(_Val), 0);\r\n            }\r\n\r\n            static uint64_t _Match_mask_eq(const uint32x4_t _Cmp_lo, const uint32x4_t _Cmp_hi) noexcept {\r\n                const uint8x8_t _Cmp = vaddhn_u16(vreinterpretq_u16_u32(_Cmp_lo), vreinterpretq_u16_u32(_Cmp_hi));\r\n                return vget_lane_u64(vreinterpret_u64_u8(_Cmp), 0);\r\n            }\r\n\r\n            static uint64_t _Match_mask_ne(const uint32x4_t _Cmp_lo, const uint32x4_t _Cmp_hi) noexcept {\r\n                const auto _Cmp  = vminq_u32(_Cmp_lo, _Cmp_hi);\r\n                const auto _Comb = vreinterpretq_u64_u32(vpminq_u32(_Cmp, _Cmp));\r\n                return vgetq_lane_u64(_Comb, 0) ^ 0xFFFF'FFFF'FFFF'FFFF;\r\n            }\r\n\r\n            static uint32x4_t _Blend_q(const uint32x4_t _Px1, const uint32x4_t _Px2, const uint32x4_t _Msk) noexcept {\r\n                return vbslq_u32(_Msk, _Px2, _Px1);\r\n            }\r\n\r\n            static uint32x2_t _Blend(const uint32x2_t _Px1, const uint32x2_t _Px2, const uint32x2_t _Msk) noexcept {\r\n                return vbsl_u32(_Msk, _Px2, _Px1);\r\n            }\r\n\r\n            static uint64_t _Nibble_mask(const uint32x4_t _Val) noexcept {\r\n                return _Find_traits_1::_Nibble_mask(vreinterpretq_u8_u32(_Val));\r\n            }\r\n        };\r\n\r\n        struct _Find_traits_8 {\r\n            static uint64x2_t _Load_q(const void* const _Ptr) noexcept {\r\n                return vld1q_u64(static_cast<const uint64_t*>(_Ptr));\r\n            }\r\n\r\n            static void _Store_q(void* const _Ptr, const uint64x2_t _Val) noexcept {\r\n                vst1q_u64(static_cast<uint64_t*>(_Ptr), _Val);\r\n            }\r\n\r\n            static uint64x2_t _Set_neon_q(const uint64_t _Val) noexcept {\r\n                return vdupq_n_u64(_Val);\r\n            }\r\n\r\n            static uint64x2_t _Cmp_neon_q(const uint64x2_t _Lhs, const uint64x2_t _Rhs) noexcept {\r\n                return vceqq_u64(_Lhs, _Rhs);\r\n            }\r\n\r\n            // Compresses a 128-bit Mask of 2 64-bit values into a 64-bit Mask of 2 32-bit values.\r\n            static uint64_t _Mask_q(const uint64x2_t _Val) noexcept {\r\n                const uint32x2_t _Res = vmovn_u64(_Val);\r\n                return vget_lane_u64(vreinterpret_u64_u32(_Res), 0);\r\n            }\r\n\r\n            static uint64_t _Match_mask_eq(const uint64x2_t _Cmp_lo, const uint64x2_t _Cmp_hi) noexcept {\r\n                const uint8x8_t _Cmp = vaddhn_u16(vreinterpretq_u16_u64(_Cmp_lo), vreinterpretq_u16_u64(_Cmp_hi));\r\n                return vget_lane_u64(vreinterpret_u64_u8(_Cmp), 0);\r\n            }\r\n\r\n            static uint64_t _Match_mask_ne(const uint64x2_t _Cmp_lo, const uint64x2_t _Cmp_hi) noexcept {\r\n                return _Mask_q(vandq_u64(_Cmp_lo, _Cmp_hi)) ^ 0xFFFF'FFFF'FFFF'FFFF;\r\n            }\r\n\r\n            static uint64x2_t _Blend_q(const uint64x2_t _Px1, const uint64x2_t _Px2, const uint64x2_t _Msk) noexcept {\r\n                return vbslq_u64(_Msk, _Px2, _Px1);\r\n            }\r\n\r\n            static uint64_t _Nibble_mask(const uint64x2_t _Val) noexcept {\r\n                return _Find_traits_1::_Nibble_mask(vreinterpretq_u8_u64(_Val));\r\n            }\r\n        };\r\n\r\n        unsigned long _Get_first_h_pos_q(const uint64_t _Mask) noexcept {\r\n            return _CountTrailingZeros64(_Mask) >> 2;\r\n        }\r\n\r\n        unsigned long _Get_first_h_pos_d(const uint64_t _Mask) noexcept {\r\n            return _CountTrailingZeros64(_Mask) >> 3;\r\n        }\r\n\r\n        unsigned long _Get_last_h_pos_q(const uint64_t _Mask) noexcept {\r\n            return 15 - (_CountLeadingZeros64(_Mask) >> 2);\r\n        }\r\n\r\n        unsigned long _Get_last_h_pos_d(const uint64_t _Mask) noexcept {\r\n            return 7 - (_CountLeadingZeros64(_Mask) >> 3);\r\n        }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        struct _Find_traits_1 {\r\n            static __m256i _Set_avx(const uint8_t _Val) noexcept {\r\n                return _mm256_set1_epi8(_Val);\r\n            }\r\n\r\n            static __m128i _Set_sse(const uint8_t _Val) noexcept {\r\n                return _mm_shuffle_epi8(_mm_cvtsi32_si128(_Val), _mm_setzero_si128());\r\n            }\r\n\r\n            static __m256i _Cmp_avx(const __m256i _Lhs, const __m256i _Rhs) noexcept {\r\n                return _mm256_cmpeq_epi8(_Lhs, _Rhs);\r\n            }\r\n\r\n            static __m128i _Cmp_sse(const __m128i _Lhs, const __m128i _Rhs) noexcept {\r\n                return _mm_cmpeq_epi8(_Lhs, _Rhs);\r\n            }\r\n        };\r\n\r\n        struct _Find_traits_2 {\r\n            static __m256i _Set_avx(const uint16_t _Val) noexcept {\r\n                return _mm256_set1_epi16(_Val);\r\n            }\r\n\r\n            static __m128i _Set_sse(const uint16_t _Val) noexcept {\r\n                return _mm_set1_epi16(_Val);\r\n            }\r\n\r\n            static __m256i _Cmp_avx(const __m256i _Lhs, const __m256i _Rhs) noexcept {\r\n                return _mm256_cmpeq_epi16(_Lhs, _Rhs);\r\n            }\r\n\r\n            static __m128i _Cmp_sse(const __m128i _Lhs, const __m128i _Rhs) noexcept {\r\n                return _mm_cmpeq_epi16(_Lhs, _Rhs);\r\n            }\r\n        };\r\n\r\n        struct _Find_traits_4 {\r\n            static __m256i _Set_avx(const uint32_t _Val) noexcept {\r\n                return _mm256_set1_epi32(_Val);\r\n            }\r\n\r\n            static __m128i _Set_sse(const uint32_t _Val) noexcept {\r\n                return _mm_set1_epi32(_Val);\r\n            }\r\n\r\n            static __m256i _Cmp_avx(const __m256i _Lhs, const __m256i _Rhs) noexcept {\r\n                return _mm256_cmpeq_epi32(_Lhs, _Rhs);\r\n            }\r\n\r\n            static __m128i _Cmp_sse(const __m128i _Lhs, const __m128i _Rhs) noexcept {\r\n                return _mm_cmpeq_epi32(_Lhs, _Rhs);\r\n            }\r\n        };\r\n\r\n        struct _Find_traits_8 {\r\n            static __m256i _Set_avx(const uint64_t _Val) noexcept {\r\n                return _mm256_set1_epi64x(_Val);\r\n            }\r\n\r\n            static __m128i _Set_sse(const uint64_t _Val) noexcept {\r\n                return _mm_set1_epi64x(_Val);\r\n            }\r\n\r\n            static __m256i _Cmp_avx(const __m256i _Lhs, const __m256i _Rhs) noexcept {\r\n                return _mm256_cmpeq_epi64(_Lhs, _Rhs);\r\n            }\r\n\r\n            static __m128i _Cmp_sse(const __m128i _Lhs, const __m128i _Rhs) noexcept {\r\n                return _mm_cmpeq_epi64(_Lhs, _Rhs);\r\n            }\r\n        };\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n#ifndef _M_ARM64\r\n        // TRANSITION, ABI: used only in functions preserved for binary compatibility\r\n        template <class _Ty>\r\n        const void* __stdcall _Find_unsized_impl(const void* const _First, const _Ty _Val) noexcept {\r\n            auto _Ptr = static_cast<const _Ty*>(_First);\r\n            while (*_Ptr != _Val) {\r\n                ++_Ptr;\r\n            }\r\n            return _Ptr;\r\n        }\r\n#endif // ^^^ !defined(_M_ARM64) ^^^\r\n\r\n        enum class _Predicate { _Equal, _Not_equal };\r\n\r\n        template <_Predicate _Pred, class _Ty>\r\n        const void* _Find_scalar_tail(const void* const _First, const void* const _Last, const _Ty _Val) noexcept {\r\n            auto _Ptr = static_cast<const _Ty*>(_First);\r\n            if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                while (_Ptr != _Last && *_Ptr == _Val) {\r\n                    ++_Ptr;\r\n                }\r\n            } else {\r\n                while (_Ptr != _Last && *_Ptr != _Val) {\r\n                    ++_Ptr;\r\n                }\r\n            }\r\n            return _Ptr;\r\n        }\r\n\r\n        template <_Predicate _Pred, class _Ty>\r\n        const void* _Find_last_scalar_tail(\r\n            const void* const _First, const void* const _Last, const void* const _Real_last, const _Ty _Val) noexcept {\r\n            auto _Ptr = static_cast<const _Ty*>(_Last);\r\n\r\n            while (_Ptr != _First) {\r\n                --_Ptr;\r\n                if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                    if (*_Ptr != _Val) {\r\n                        return _Ptr;\r\n                    }\r\n                } else {\r\n                    if (*_Ptr == _Val) {\r\n                        return _Ptr;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return _Real_last;\r\n        }\r\n\r\n        // The below functions have exactly the same signature as the extern \"C\" functions, up to calling convention.\r\n        // This makes sure the template specialization can be fused with the extern \"C\" function.\r\n        // In optimized builds it avoids an extra call, as these functions are too large to inline.\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        template <class _Traits, _Predicate _Pred, class _Ty>\r\n        const void* __stdcall _Find_impl(const void* _First, const void* const _Last, const _Ty _Val) noexcept {\r\n            const size_t _Size_bytes = _Byte_length(_First, _Last);\r\n\r\n            if (const size_t _Neon_size = _Size_bytes & ~size_t{0x1F}; _Neon_size != 0) {\r\n                const auto _Comparand = _Traits::_Set_neon_q(_Val);\r\n                const void* _Stop_at  = _First;\r\n                _Advance_bytes(_Stop_at, _Neon_size);\r\n\r\n                do {\r\n                    const auto _Data_lo = _Traits::_Load_q(static_cast<const uint8_t*>(_First) + 0);\r\n                    const auto _Data_hi = _Traits::_Load_q(static_cast<const uint8_t*>(_First) + 16);\r\n\r\n                    const auto _Comparison_lo = _Traits::_Cmp_neon_q(_Data_lo, _Comparand);\r\n                    const auto _Comparison_hi = _Traits::_Cmp_neon_q(_Data_hi, _Comparand);\r\n\r\n                    // Use a fast check for the termination condition.\r\n                    uint64_t _Any_match = 0;\r\n                    if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                        _Any_match = _Traits::_Match_mask_ne(_Comparison_lo, _Comparison_hi);\r\n                    } else {\r\n                        _Any_match = _Traits::_Match_mask_eq(_Comparison_lo, _Comparison_hi);\r\n                    }\r\n\r\n                    if (_Any_match != 0) {\r\n                        auto _Mask_lo = _Traits::_Mask_q(_Comparison_lo);\r\n                        if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                            _Mask_lo ^= 0xFFFF'FFFF'FFFF'FFFF;\r\n                        }\r\n\r\n                        if (_Mask_lo != 0) {\r\n                            const auto _Offset = _Get_first_h_pos_q(_Mask_lo);\r\n                            _Advance_bytes(_First, _Offset);\r\n                            return _First;\r\n                        }\r\n\r\n                        auto _Mask_hi = _Traits::_Mask_q(_Comparison_hi);\r\n                        if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                            _Mask_hi ^= 0xFFFF'FFFF'FFFF'FFFF;\r\n                        }\r\n\r\n                        const auto _Offset = _Get_first_h_pos_q(_Mask_hi) + 16;\r\n                        _Advance_bytes(_First, _Offset);\r\n                        return _First;\r\n                    }\r\n\r\n                    _Advance_bytes(_First, 32);\r\n                } while (_First != _Stop_at);\r\n            }\r\n\r\n            if ((_Size_bytes & size_t{0x10}) != 0) { // use original _Size_bytes; we've read only 32-byte chunks\r\n                const auto _Comparand = _Traits::_Set_neon_q(_Val);\r\n                const auto _Data      = _Traits::_Load_q(_First);\r\n\r\n                const auto _Comparison = _Traits::_Cmp_neon_q(_Data, _Comparand);\r\n\r\n                auto _Match = _Traits::_Mask_q(_Comparison);\r\n                if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                    _Match ^= 0xFFFF'FFFF'FFFF'FFFF;\r\n                }\r\n\r\n                if (_Match != 0) {\r\n                    const auto _Offset = _Get_first_h_pos_q(_Match);\r\n                    _Advance_bytes(_First, _Offset);\r\n                    return _First;\r\n                }\r\n\r\n                _Advance_bytes(_First, 16);\r\n            }\r\n\r\n            if constexpr (sizeof(_Ty) < 8) {\r\n                if ((_Size_bytes & size_t{0x08}) != 0) { // use original _Size_bytes; we've read only 16/32-byte chunks\r\n                    const auto _Comparand = _Traits::_Set_neon(_Val);\r\n                    const auto _Data      = _Traits::_Load(_First);\r\n\r\n                    const auto _Comparison = _Traits::_Cmp_neon(_Data, _Comparand);\r\n\r\n                    auto _Match = _Traits::_Mask(_Comparison);\r\n                    if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                        _Match ^= 0xFFFF'FFFF'FFFF'FFFF;\r\n                    }\r\n\r\n                    if (_Match != 0) {\r\n                        const auto _Offset = _Get_first_h_pos_d(_Match);\r\n                        _Advance_bytes(_First, _Offset);\r\n                        return _First;\r\n                    }\r\n\r\n                    _Advance_bytes(_First, 8);\r\n                }\r\n            }\r\n\r\n            return _Find_scalar_tail<_Pred>(_First, _Last, _Val);\r\n        }\r\n\r\n        template <class _Traits, _Predicate _Pred, class _Ty>\r\n        const void* __stdcall _Find_last_impl(const void* const _First, const void* _Last, const _Ty _Val) noexcept {\r\n            const void* const _Real_last = _Last;\r\n            const size_t _Size_bytes     = _Byte_length(_First, _Last);\r\n\r\n            if (const size_t _Neon_size = _Size_bytes & ~size_t{0x1F}; _Neon_size != 0) {\r\n                const auto _Comparand = _Traits::_Set_neon_q(_Val);\r\n                const void* _Stop_at  = _Last;\r\n                _Rewind_bytes(_Stop_at, _Neon_size);\r\n\r\n                do {\r\n                    _Rewind_bytes(_Last, 32);\r\n                    const auto _Data_lo = _Traits::_Load_q(static_cast<const uint8_t*>(_Last) + 0);\r\n                    const auto _Data_hi = _Traits::_Load_q(static_cast<const uint8_t*>(_Last) + 16);\r\n\r\n                    const auto _Comparison_lo = _Traits::_Cmp_neon_q(_Data_lo, _Comparand);\r\n                    const auto _Comparison_hi = _Traits::_Cmp_neon_q(_Data_hi, _Comparand);\r\n\r\n                    // Use a fast check for the termination condition.\r\n                    uint64_t _Any_match = 0;\r\n                    if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                        _Any_match = _Traits::_Match_mask_ne(_Comparison_lo, _Comparison_hi);\r\n                    } else {\r\n                        _Any_match = _Traits::_Match_mask_eq(_Comparison_lo, _Comparison_hi);\r\n                    }\r\n\r\n                    if (_Any_match != 0) {\r\n                        auto _Mask_hi = _Traits::_Mask_q(_Comparison_hi);\r\n                        if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                            _Mask_hi ^= 0xFFFF'FFFF'FFFF'FFFF;\r\n                        }\r\n\r\n                        if (_Mask_hi != 0) {\r\n                            const auto _Offset = _Get_last_h_pos_q(_Mask_hi) + 16;\r\n                            _Advance_bytes(_Last, _Offset - (sizeof(_Ty) - 1));\r\n                            return _Last;\r\n                        }\r\n\r\n                        auto _Mask_lo = _Traits::_Mask_q(_Comparison_lo);\r\n                        if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                            _Mask_lo ^= 0xFFFF'FFFF'FFFF'FFFF;\r\n                        }\r\n\r\n                        const auto _Offset = _Get_last_h_pos_q(_Mask_lo);\r\n                        _Advance_bytes(_Last, _Offset - (sizeof(_Ty) - 1));\r\n                        return _Last;\r\n                    }\r\n                } while (_Last != _Stop_at);\r\n            }\r\n\r\n            if ((_Size_bytes & size_t{0x10}) != 0) { // use original _Size_bytes; we've read only 32-byte chunks\r\n                const auto _Comparand = _Traits::_Set_neon_q(_Val);\r\n                _Rewind_bytes(_Last, 16);\r\n                const auto _Data = _Traits::_Load_q(_Last);\r\n\r\n                const auto _Comparison = _Traits::_Cmp_neon_q(_Data, _Comparand);\r\n\r\n                auto _Match = _Traits::_Mask_q(_Comparison);\r\n                if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                    _Match ^= 0xFFFF'FFFF'FFFF'FFFF;\r\n                }\r\n\r\n                if (_Match != 0) {\r\n                    const auto _Offset = _Get_last_h_pos_q(_Match);\r\n                    _Advance_bytes(_Last, _Offset - (sizeof(_Ty) - 1));\r\n                    return _Last;\r\n                }\r\n            }\r\n\r\n            if constexpr (sizeof(_Ty) < 8) {\r\n                if ((_Size_bytes & size_t{0x08}) != 0) { // use original _Size_bytes; we've read only 16/32-byte chunks\r\n                    const auto _Comparand = _Traits::_Set_neon(_Val);\r\n                    _Rewind_bytes(_Last, 8);\r\n                    const auto _Data = _Traits::_Load(_Last);\r\n\r\n                    const auto _Comparison = _Traits::_Cmp_neon(_Data, _Comparand);\r\n\r\n                    auto _Match = _Traits::_Mask(_Comparison);\r\n                    if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                        _Match ^= 0xFFFF'FFFF'FFFF'FFFF;\r\n                    }\r\n\r\n                    if (_Match != 0) {\r\n                        const auto _Offset = _Get_last_h_pos_d(_Match);\r\n                        _Advance_bytes(_Last, _Offset - (sizeof(_Ty) - 1));\r\n                        return _Last;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return _Find_last_scalar_tail<_Pred>(_First, _Last, _Real_last, _Val);\r\n        }\r\n\r\n        template <class _Traits, class _Ty>\r\n        const void* __stdcall _Adjacent_find_impl(const void* _First, const void* const _Last) noexcept {\r\n            if (_First == _Last) {\r\n                return _Last;\r\n            }\r\n\r\n            const size_t _Size_bytes = _Byte_length(_First, _Last) - sizeof(_Ty);\r\n\r\n            if (const size_t _Neon_size = _Size_bytes & ~size_t{0x1F}; _Neon_size != 0) {\r\n                const void* _Stop_at = _First;\r\n                _Advance_bytes(_Stop_at, _Neon_size);\r\n\r\n                do {\r\n                    const void* _Next = _First;\r\n                    _Advance_bytes(_Next, sizeof(_Ty));\r\n\r\n                    const auto _Data_lo      = _Traits::_Load_q(static_cast<const uint8_t*>(_First) + 0);\r\n                    const auto _Data_hi      = _Traits::_Load_q(static_cast<const uint8_t*>(_First) + 16);\r\n                    const auto _Comparand_lo = _Traits::_Load_q(static_cast<const uint8_t*>(_Next) + 0);\r\n                    const auto _Comparand_hi = _Traits::_Load_q(static_cast<const uint8_t*>(_Next) + 16);\r\n\r\n                    const auto _Comparison_lo = _Traits::_Cmp_neon_q(_Data_lo, _Comparand_lo);\r\n                    const auto _Comparison_hi = _Traits::_Cmp_neon_q(_Data_hi, _Comparand_hi);\r\n\r\n                    // Use a fast check for the termination condition.\r\n                    const uint64_t _Any_match = _Traits::_Match_mask_eq(_Comparison_lo, _Comparison_hi);\r\n\r\n                    if (_Any_match != 0) {\r\n                        const auto _Mask_lo = _Traits::_Mask_q(_Comparison_lo);\r\n                        if (_Mask_lo != 0) {\r\n                            const auto _Offset = _Get_first_h_pos_q(_Mask_lo);\r\n                            _Advance_bytes(_First, _Offset);\r\n                            return _First;\r\n                        }\r\n\r\n                        const auto _Mask_hi = _Traits::_Mask_q(_Comparison_hi);\r\n                        const auto _Offset  = _Get_first_h_pos_q(_Mask_hi) + 16;\r\n                        _Advance_bytes(_First, _Offset);\r\n                        return _First;\r\n                    }\r\n\r\n                    _Advance_bytes(_First, 32);\r\n                } while (_First != _Stop_at);\r\n            }\r\n\r\n            if ((_Size_bytes & size_t{0x10}) != 0) { // use original _Size_bytes; we've read only 32-byte chunks\r\n                const void* _Next = _First;\r\n                _Advance_bytes(_Next, sizeof(_Ty));\r\n\r\n                const auto _Data      = _Traits::_Load_q(_First);\r\n                const auto _Comparand = _Traits::_Load_q(_Next);\r\n\r\n                const auto _Comparison = _Traits::_Cmp_neon_q(_Data, _Comparand);\r\n\r\n                const auto _Match = _Traits::_Mask_q(_Comparison);\r\n                if (_Match != 0) {\r\n                    const auto _Offset = _Get_first_h_pos_q(_Match);\r\n                    _Advance_bytes(_First, _Offset);\r\n                    return _First;\r\n                }\r\n\r\n                _Advance_bytes(_First, 16);\r\n            }\r\n\r\n            if constexpr (sizeof(_Ty) < 8) {\r\n                if ((_Size_bytes & size_t{0x08}) != 0) { // use original _Size_bytes; we've read only 16/32-byte chunks\r\n                    const void* _Next = _First;\r\n                    _Advance_bytes(_Next, sizeof(_Ty));\r\n\r\n                    const auto _Data      = _Traits::_Load(_First);\r\n                    const auto _Comparand = _Traits::_Load(_Next);\r\n\r\n                    const auto _Comparison = _Traits::_Cmp_neon(_Data, _Comparand);\r\n\r\n                    const auto _Match = _Traits::_Mask(_Comparison);\r\n                    if (_Match != 0) {\r\n                        const auto _Offset = _Get_first_h_pos_d(_Match);\r\n                        _Advance_bytes(_First, _Offset);\r\n                        return _First;\r\n                    }\r\n\r\n                    _Advance_bytes(_First, 8);\r\n                }\r\n            }\r\n\r\n            auto _Ptr  = static_cast<const _Ty*>(_First);\r\n            auto _Next = _Ptr + 1;\r\n            for (; _Next != _Last; ++_Ptr, ++_Next) {\r\n                if (*_Ptr == *_Next) {\r\n                    return _Ptr;\r\n                }\r\n            }\r\n\r\n            return _Last;\r\n        }\r\n\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        template <class _Traits, _Predicate _Pred, class _Ty>\r\n        const void* __stdcall _Find_impl(const void* _First, const void* const _Last, const _Ty _Val) noexcept {\r\n            const size_t _Size_bytes = _Byte_length(_First, _Last);\r\n\r\n            if (const size_t _Avx_size = _Size_bytes & ~size_t{0x1F}; _Avx_size != 0 && _Use_avx2()) {\r\n                _Zeroupper_on_exit _Guard; // TRANSITION, DevCom-10331414\r\n\r\n                const __m256i _Comparand = _Traits::_Set_avx(_Val);\r\n                const void* _Stop_at     = _First;\r\n                _Advance_bytes(_Stop_at, _Avx_size);\r\n\r\n                do {\r\n                    const __m256i _Data = _mm256_loadu_si256(static_cast<const __m256i*>(_First));\r\n                    unsigned int _Bingo = _mm256_movemask_epi8(_Traits::_Cmp_avx(_Data, _Comparand));\r\n\r\n                    if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                        _Bingo ^= 0xFFFF'FFFF;\r\n                    }\r\n\r\n                    if (_Bingo != 0) {\r\n                        const unsigned long _Offset = _tzcnt_u32(_Bingo);\r\n                        _Advance_bytes(_First, _Offset);\r\n                        return _First;\r\n                    }\r\n\r\n                    _Advance_bytes(_First, 32);\r\n                } while (_First != _Stop_at);\r\n\r\n                if (const size_t _Avx_tail_size = _Size_bytes & 0x1C; _Avx_tail_size != 0) {\r\n                    const __m256i _Tail_mask = _Avx2_tail_mask_32(_Avx_tail_size);\r\n                    const __m256i _Data      = _mm256_maskload_epi32(static_cast<const int*>(_First), _Tail_mask);\r\n                    const __m256i _Cmp       = _Traits::_Cmp_avx(_Data, _Comparand);\r\n                    unsigned int _Bingo      = _mm256_movemask_epi8(_mm256_and_si256(_Cmp, _Tail_mask));\r\n\r\n                    if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                        _Bingo ^= (1 << _Avx_tail_size) - 1;\r\n                    }\r\n\r\n                    if (_Bingo != 0) {\r\n                        const unsigned long _Offset = _tzcnt_u32(_Bingo);\r\n                        _Advance_bytes(_First, _Offset);\r\n                        return _First;\r\n                    }\r\n\r\n                    _Advance_bytes(_First, _Avx_tail_size);\r\n                }\r\n\r\n                if constexpr (sizeof(_Ty) >= 4) {\r\n                    return _First;\r\n                }\r\n            } else if (const size_t _Sse_size = _Size_bytes & ~size_t{0xF}; _Sse_size != 0 && _Use_sse42()) {\r\n                const __m128i _Comparand = _Traits::_Set_sse(_Val);\r\n                const void* _Stop_at     = _First;\r\n                _Advance_bytes(_Stop_at, _Sse_size);\r\n\r\n                do {\r\n                    const __m128i _Data = _mm_loadu_si128(static_cast<const __m128i*>(_First));\r\n                    unsigned int _Bingo = _mm_movemask_epi8(_Traits::_Cmp_sse(_Data, _Comparand));\r\n\r\n                    if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                        _Bingo ^= 0xFFFF;\r\n                    }\r\n\r\n                    if (_Bingo != 0) {\r\n                        unsigned long _Offset;\r\n                        // CodeQL [SM02313] _Offset is always initialized: we just tested `if (_Bingo != 0)`.\r\n                        _BitScanForward(&_Offset, _Bingo);\r\n                        _Advance_bytes(_First, _Offset);\r\n                        return _First;\r\n                    }\r\n\r\n                    _Advance_bytes(_First, 16);\r\n                } while (_First != _Stop_at);\r\n            }\r\n\r\n            return _Find_scalar_tail<_Pred>(_First, _Last, _Val);\r\n        }\r\n\r\n        template <class _Traits, _Predicate _Pred, class _Ty>\r\n        const void* __stdcall _Find_last_impl(const void* const _First, const void* _Last, const _Ty _Val) noexcept {\r\n            const void* const _Real_last = _Last;\r\n\r\n            const size_t _Size_bytes = _Byte_length(_First, _Last);\r\n\r\n            if (const size_t _Avx_size = _Size_bytes & ~size_t{0x1F}; _Avx_size != 0 && _Use_avx2()) {\r\n                _Zeroupper_on_exit _Guard; // TRANSITION, DevCom-10331414\r\n\r\n                const __m256i _Comparand = _Traits::_Set_avx(_Val);\r\n                const void* _Stop_at     = _Last;\r\n                _Rewind_bytes(_Stop_at, _Avx_size);\r\n\r\n                do {\r\n                    _Rewind_bytes(_Last, 32);\r\n                    const __m256i _Data = _mm256_loadu_si256(static_cast<const __m256i*>(_Last));\r\n                    unsigned int _Bingo = _mm256_movemask_epi8(_Traits::_Cmp_avx(_Data, _Comparand));\r\n\r\n                    if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                        _Bingo ^= 0xFFFF'FFFF;\r\n                    }\r\n\r\n                    if (_Bingo != 0) {\r\n                        const unsigned long _Offset = _lzcnt_u32(_Bingo);\r\n                        _Advance_bytes(_Last, (31 - _Offset) - (sizeof(_Ty) - 1));\r\n                        return _Last;\r\n                    }\r\n                } while (_Last != _Stop_at);\r\n\r\n                if (const size_t _Avx_tail_size = _Size_bytes & 0x1C; _Avx_tail_size != 0) {\r\n                    _Rewind_bytes(_Last, _Avx_tail_size);\r\n                    const __m256i _Tail_mask = _Avx2_tail_mask_32(_Avx_tail_size);\r\n                    const __m256i _Data      = _mm256_maskload_epi32(static_cast<const int*>(_Last), _Tail_mask);\r\n                    const __m256i _Cmp       = _Traits::_Cmp_avx(_Data, _Comparand);\r\n                    unsigned int _Bingo      = _mm256_movemask_epi8(_mm256_and_si256(_Cmp, _Tail_mask));\r\n\r\n                    if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                        _Bingo ^= (1 << _Avx_tail_size) - 1;\r\n                    }\r\n\r\n                    if (_Bingo != 0) {\r\n                        const unsigned long _Offset = _lzcnt_u32(_Bingo);\r\n                        _Advance_bytes(_Last, (31 - _Offset) - (sizeof(_Ty) - 1));\r\n                        return _Last;\r\n                    }\r\n                }\r\n\r\n                if constexpr (sizeof(_Ty) >= 4) {\r\n                    return _Real_last;\r\n                }\r\n            } else if (const size_t _Sse_size = _Size_bytes & ~size_t{0xF}; _Sse_size != 0 && _Use_sse42()) {\r\n                const __m128i _Comparand = _Traits::_Set_sse(_Val);\r\n                const void* _Stop_at     = _Last;\r\n                _Rewind_bytes(_Stop_at, _Sse_size);\r\n\r\n                do {\r\n                    _Rewind_bytes(_Last, 16);\r\n                    const __m128i _Data = _mm_loadu_si128(static_cast<const __m128i*>(_Last));\r\n                    unsigned int _Bingo = _mm_movemask_epi8(_Traits::_Cmp_sse(_Data, _Comparand));\r\n\r\n                    if constexpr (_Pred == _Predicate::_Not_equal) {\r\n                        _Bingo ^= 0xFFFF;\r\n                    }\r\n\r\n                    if (_Bingo != 0) {\r\n                        unsigned long _Offset;\r\n                        // CodeQL [SM02313] _Offset is always initialized: we just tested `if (_Bingo != 0)`.\r\n                        _BitScanReverse(&_Offset, _Bingo);\r\n                        _Advance_bytes(_Last, _Offset - (sizeof(_Ty) - 1));\r\n                        return _Last;\r\n                    }\r\n                } while (_Last != _Stop_at);\r\n            }\r\n            return _Find_last_scalar_tail<_Pred>(_First, _Last, _Real_last, _Val);\r\n        }\r\n\r\n        template <class _Traits, class _Ty>\r\n        const void* __stdcall _Adjacent_find_impl(const void* _First, const void* const _Last) noexcept {\r\n            if (_First == _Last) {\r\n                return _Last;\r\n            }\r\n\r\n            const size_t _Size_bytes = _Byte_length(_First, _Last) - sizeof(_Ty);\r\n\r\n            if (const size_t _Avx_size = _Size_bytes & ~size_t{0x1F}; _Avx_size != 0 && _Use_avx2()) {\r\n                _Zeroupper_on_exit _Guard; // TRANSITION, DevCom-10331414\r\n\r\n                const void* _Stop_at = _First;\r\n                _Advance_bytes(_Stop_at, _Avx_size);\r\n\r\n                do {\r\n                    const void* _Next = _First;\r\n                    _Advance_bytes(_Next, sizeof(_Ty));\r\n\r\n                    const __m256i _Data       = _mm256_loadu_si256(static_cast<const __m256i*>(_First));\r\n                    const __m256i _Comparand  = _mm256_loadu_si256(static_cast<const __m256i*>(_Next));\r\n                    const unsigned int _Bingo = _mm256_movemask_epi8(_Traits::_Cmp_avx(_Data, _Comparand));\r\n\r\n                    if (_Bingo != 0) {\r\n                        const unsigned long _Offset = _tzcnt_u32(_Bingo);\r\n                        _Advance_bytes(_First, _Offset);\r\n                        return _First;\r\n                    }\r\n\r\n                    _Advance_bytes(_First, 32);\r\n                } while (_First != _Stop_at);\r\n\r\n                if (const size_t _Avx_tail_size = _Size_bytes & 0x1C; _Avx_tail_size != 0) {\r\n                    const void* _Next = _First;\r\n                    _Advance_bytes(_Next, sizeof(_Ty));\r\n\r\n                    const __m256i _Tail_mask  = _Avx2_tail_mask_32(_Avx_tail_size);\r\n                    const __m256i _Data       = _mm256_maskload_epi32(static_cast<const int*>(_First), _Tail_mask);\r\n                    const __m256i _Comparand  = _mm256_maskload_epi32(static_cast<const int*>(_Next), _Tail_mask);\r\n                    const __m256i _Cmp        = _Traits::_Cmp_avx(_Data, _Comparand);\r\n                    const unsigned int _Bingo = _mm256_movemask_epi8(_mm256_and_si256(_Cmp, _Tail_mask));\r\n\r\n                    if (_Bingo != 0) {\r\n                        const unsigned long _Offset = _tzcnt_u32(_Bingo);\r\n                        _Advance_bytes(_First, _Offset);\r\n                        return _First;\r\n                    }\r\n\r\n                    _Advance_bytes(_First, _Avx_tail_size);\r\n                }\r\n\r\n                if constexpr (sizeof(_Ty) >= 4) {\r\n                    return _Last;\r\n                }\r\n            } else if (const size_t _Sse_size = _Size_bytes & ~size_t{0xF}; _Sse_size != 0 && _Use_sse42()) {\r\n                const void* _Stop_at = _First;\r\n                _Advance_bytes(_Stop_at, _Sse_size);\r\n\r\n                do {\r\n                    const void* _Next = _First;\r\n                    _Advance_bytes(_Next, sizeof(_Ty));\r\n\r\n                    const __m128i _Data       = _mm_loadu_si128(static_cast<const __m128i*>(_First));\r\n                    const __m128i _Comparand  = _mm_loadu_si128(static_cast<const __m128i*>(_Next));\r\n                    const unsigned int _Bingo = _mm_movemask_epi8(_Traits::_Cmp_sse(_Data, _Comparand));\r\n\r\n                    if (_Bingo != 0) {\r\n                        unsigned long _Offset;\r\n                        // CodeQL [SM02313] _Offset is always initialized: we just tested `if (_Bingo != 0)`.\r\n                        _BitScanForward(&_Offset, _Bingo);\r\n                        _Advance_bytes(_First, _Offset);\r\n                        return _First;\r\n                    }\r\n\r\n                    _Advance_bytes(_First, 16);\r\n                } while (_First != _Stop_at);\r\n            }\r\n\r\n            auto _Ptr  = static_cast<const _Ty*>(_First);\r\n            auto _Next = _Ptr + 1;\r\n            for (; _Next != _Last; ++_Ptr, ++_Next) {\r\n                if (*_Ptr == *_Next) {\r\n                    return _Ptr;\r\n                }\r\n            }\r\n\r\n            return _Last;\r\n        }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n        template <class _Ty>\r\n        const void* _Search_n_tail(const void* const _First, const void* const _Last, const size_t _Count,\r\n            const _Ty* _Mid1, const _Ty _Val) noexcept {\r\n            auto _Match_start    = static_cast<const _Ty*>(_First);\r\n            const auto _Last_ptr = static_cast<const _Ty*>(_Last);\r\n\r\n            if (static_cast<size_t>(_Last_ptr - _Match_start) < _Count) {\r\n                return _Last_ptr;\r\n            }\r\n\r\n            auto _Match_end = _Match_start + _Count;\r\n            auto _Mid2      = _Match_end;\r\n            for (;;) {\r\n                // Invariants: _Match_end - _Match_start == _Count, [_Match_start, _Mid1) and [_Mid2, _Match_end) match\r\n                // _Val:\r\n                //\r\n                // _Match_start  _Mid1    _Mid2    _Match_end\r\n                // |=============|????????|========|??????????...\r\n\r\n                --_Mid2;\r\n                if (*_Mid2 == _Val) { // match;\r\n                    if (_Mid1 == _Mid2) { // [_Mid1, _Mid2) is empty, so [_Match_start, _Match_end) all match\r\n                        return _Match_start;\r\n                    }\r\n                } else { // mismatch; skip past it\r\n                    _Match_start = _Mid2 + 1;\r\n\r\n                    if (static_cast<size_t>(_Last_ptr - _Match_start) < _Count) { // not enough space left\r\n                        return _Last_ptr;\r\n                    }\r\n\r\n                    _Mid1      = _Match_end;\r\n                    _Match_end = _Match_start + _Count;\r\n                    _Mid2      = _Match_end;\r\n                }\r\n            }\r\n        }\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        template <class _Traits, class _Ty>\r\n        const void* __stdcall _Search_n_impl(\r\n            const void* _First, const void* const _Last, const size_t _Count, const _Ty _Val) noexcept {\r\n            if (_Count == 0) {\r\n                return _First;\r\n            } else if (_Count == 1) {\r\n                return _Find_impl<_Traits, _Predicate::_Equal>(_First, _Last, _Val);\r\n            }\r\n\r\n            auto _Mid1           = static_cast<const _Ty*>(_First);\r\n            const size_t _Length = _Byte_length(_First, _Last);\r\n            if (_Count <= 8 / sizeof(_Ty) && _Length >= 16) {\r\n                // We use 64-bit masks, consisting of 4-bits per byte of the input element.\r\n                constexpr size_t _Bits_per_element = sizeof(_Ty) << 2;\r\n                const size_t _Count_bits           = _Count * _Bits_per_element;\r\n                const size_t _Sh1                  = sizeof(_Ty) != 1 ? 0 : (_Count_bits < 16 ? _Count_bits - 8 : 8);\r\n                const size_t _Sh2                  = sizeof(_Ty) >= 4 ? 0\r\n                                                   : _Count_bits < 16 ? 0\r\n                                                                      : (_Count_bits < 32 ? _Count_bits - 16 : 16);\r\n\r\n                const auto _Comparand = _Traits::_Set_neon_q(_Val);\r\n\r\n                const void* _Stop_at = _First;\r\n                _Advance_bytes(_Stop_at, _Length & ~size_t{0xF});\r\n\r\n                uint64_t _Carry = 0;\r\n                do {\r\n                    const auto _Data = _Traits::_Load_q(_First);\r\n\r\n                    const auto _Cmp      = _Traits::_Cmp_neon_q(_Comparand, _Data);\r\n                    const uint64_t _Mask = _Traits::_Nibble_mask(_Cmp);\r\n\r\n                    if (_Carry != 0) {\r\n                        const uint64_t _Tail_bits   = _CountLeadingZeros64(~_Carry);\r\n                        const uint64_t _Need        = _Count_bits - _Tail_bits;\r\n                        const uint64_t _Prefix_mask = (uint64_t{1} << _Need) - 1;\r\n                        if ((_Mask & _Prefix_mask) == _Prefix_mask) {\r\n                            _Rewind_bytes(_First, _Tail_bits >> 2);\r\n                            return _First;\r\n                        }\r\n                    }\r\n\r\n                    uint64_t _MskX = _Mask;\r\n\r\n                    _MskX = (_MskX >> _Bits_per_element) & _MskX;\r\n\r\n                    if constexpr (sizeof(_Ty) == 1) {\r\n                        _MskX = (_MskX >> _Sh1) & _MskX;\r\n                    }\r\n\r\n                    if constexpr (sizeof(_Ty) < 4) {\r\n                        _MskX = (_MskX >> _Sh2) & _MskX;\r\n                    }\r\n\r\n                    if (_MskX != 0) {\r\n                        const auto _Pos = _CountTrailingZeros64(_MskX) >> 2;\r\n                        _Advance_bytes(_First, _Pos);\r\n                        return _First;\r\n                    }\r\n\r\n                    _Carry = _Mask;\r\n\r\n                    _Advance_bytes(_First, 16);\r\n                } while (_First != _Stop_at);\r\n\r\n                _Mid1 = static_cast<const _Ty*>(_First);\r\n\r\n                const auto _Tail_run = _CountLeadingZeros64(~_Carry) >> 2;\r\n                _Rewind_bytes(_First, _Tail_run);\r\n            }\r\n\r\n            return _Search_n_tail(_First, _Last, _Count, _Mid1, _Val);\r\n        }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        template <class _Traits, class _Ty>\r\n        const void* __stdcall _Search_n_impl(\r\n            const void* _First, const void* const _Last, const size_t _Count, const _Ty _Val) noexcept {\r\n            if (_Count == 0) {\r\n                return _First;\r\n            } else if (_Count == 1) {\r\n                return _Find_impl<_Traits, _Predicate::_Equal>(_First, _Last, _Val);\r\n            }\r\n\r\n            auto _Mid1           = static_cast<const _Ty*>(_First);\r\n            const size_t _Length = _Byte_length(_First, _Last);\r\n            if (_Count <= 16 / sizeof(_Ty) && _Length >= 32 && _Use_avx2()) {\r\n                _Zeroupper_on_exit _Guard; // TRANSITION, DevCom-10331414\r\n\r\n                const int _Bytes_count = static_cast<int>(_Count * sizeof(_Ty));\r\n                const int _Sh1         = sizeof(_Ty) != 1 ? 0 : (_Bytes_count < 4 ? _Bytes_count - 2 : 2);\r\n                const int _Sh2         = sizeof(_Ty) >= 4 ? 0\r\n                                       : _Bytes_count < 4 ? 0\r\n                                                          : (_Bytes_count < 8 ? _Bytes_count - 4 : 4);\r\n                const int _Sh3         = sizeof(_Ty) == 8 ? 0 : (_Bytes_count < 8 ? 0 : _Bytes_count - 8);\r\n\r\n                const __m256i _Comparand = _Traits::_Set_avx(_Val);\r\n\r\n                const void* _Stop_at = _First;\r\n                _Advance_bytes(_Stop_at, _Length & ~size_t{0x1F});\r\n\r\n                uint32_t _Carry = 0;\r\n                do {\r\n                    const __m256i _Data = _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_First));\r\n\r\n                    const __m256i _Cmp   = _Traits::_Cmp_avx(_Comparand, _Data);\r\n                    const uint32_t _Mask = _mm256_movemask_epi8(_Cmp);\r\n\r\n                    uint64_t _MskX = uint64_t{_Carry} | (uint64_t{_Mask} << 32);\r\n\r\n                    _MskX = (_MskX >> sizeof(_Ty)) & _MskX;\r\n\r\n                    // Use __ull_rshift for better codegen in 32-bit mode, assuming the shifts are small.\r\n                    // In 64-bit mode, __ull_rshift works exactly the same as the right shift operator.\r\n\r\n                    if constexpr (sizeof(_Ty) == 1) {\r\n                        _MskX = __ull_rshift(_MskX, _Sh1) & _MskX;\r\n                    }\r\n\r\n                    if constexpr (sizeof(_Ty) < 4) {\r\n                        _MskX = __ull_rshift(_MskX, _Sh2) & _MskX;\r\n                    }\r\n\r\n                    if constexpr (sizeof(_Ty) < 8) {\r\n                        _MskX = __ull_rshift(_MskX, _Sh3) & _MskX;\r\n                    }\r\n\r\n                    if (_MskX != 0) {\r\n#ifdef _WIN64\r\n                        const long long _Shift = static_cast<long long>(_tzcnt_u64(_MskX)) - 32;\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n                        const uint32_t _MskLow = static_cast<uint32_t>(_MskX);\r\n\r\n                        const int _Shift = _MskLow != 0\r\n                                             ? static_cast<int>(_tzcnt_u32(_MskLow)) - 32\r\n                                             : static_cast<int>(_tzcnt_u32(static_cast<uint32_t>(_MskX >> 32)));\r\n#endif // ^^^ 32-bit ^^^\r\n                        _Advance_bytes(_First, _Shift);\r\n                        return _First;\r\n                    }\r\n\r\n                    _Carry = _Mask;\r\n\r\n                    _Advance_bytes(_First, 32);\r\n                } while (_First != _Stop_at);\r\n\r\n                if (const size_t _Tail = _Length & 0x1C; _Tail != 0) {\r\n                    const __m256i _Tail_mask = _Avx2_tail_mask_32(_Tail);\r\n                    const __m256i _Data      = _mm256_maskload_epi32(reinterpret_cast<const int*>(_First), _Tail_mask);\r\n\r\n                    const __m256i _Cmp   = _Traits::_Cmp_avx(_Comparand, _Data);\r\n                    const uint32_t _Mask = _mm256_movemask_epi8(_mm256_and_si256(_Cmp, _Tail_mask));\r\n\r\n                    const uint64_t _Msk_with_carry = uint64_t{_Carry} | (uint64_t{_Mask} << 32);\r\n                    uint64_t _MskX                 = _Msk_with_carry;\r\n\r\n                    _MskX = (_MskX >> sizeof(_Ty)) & _MskX;\r\n\r\n                    if constexpr (sizeof(_Ty) == 1) {\r\n                        _MskX = __ull_rshift(_MskX, _Sh1) & _MskX;\r\n                    }\r\n\r\n                    if constexpr (sizeof(_Ty) < 4) {\r\n                        _MskX = __ull_rshift(_MskX, _Sh2) & _MskX;\r\n                    }\r\n\r\n                    if constexpr (sizeof(_Ty) < 8) {\r\n                        _MskX = __ull_rshift(_MskX, _Sh3) & _MskX;\r\n                    }\r\n\r\n                    if (_MskX != 0) {\r\n#ifdef _WIN64\r\n                        const long long _Shift = static_cast<long long>(_tzcnt_u64(_MskX)) - 32;\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n                        const uint32_t _MskLow = static_cast<uint32_t>(_MskX);\r\n\r\n                        const int _Shift = _MskLow != 0\r\n                                             ? static_cast<int>(_tzcnt_u32(_MskLow)) - 32\r\n                                             : static_cast<int>(_tzcnt_u32(static_cast<uint32_t>(_MskX >> 32)));\r\n#endif // ^^^ 32-bit ^^^\r\n                        _Advance_bytes(_First, _Shift);\r\n                        return _First;\r\n                    }\r\n\r\n                    _Carry = static_cast<uint32_t>(__ull_rshift(_Msk_with_carry, static_cast<int>(_Tail)));\r\n\r\n                    _Advance_bytes(_First, _Tail);\r\n                }\r\n\r\n                _Mid1 = static_cast<const _Ty*>(_First);\r\n                _Rewind_bytes(_First, _lzcnt_u32(~_Carry));\r\n            } else if constexpr (sizeof(_Ty) < 8) {\r\n                if (_Count <= 8 / sizeof(_Ty) && _Length >= 16 && _Use_sse42()) {\r\n                    const int _Bytes_count = static_cast<int>(_Count * sizeof(_Ty));\r\n                    const int _Sh1         = sizeof(_Ty) != 1 ? 0 : (_Bytes_count < 4 ? _Bytes_count - 2 : 2);\r\n                    const int _Sh2         = sizeof(_Ty) >= 4 ? 0\r\n                                           : _Bytes_count < 4 ? 0\r\n                                                              : (_Bytes_count < 8 ? _Bytes_count - 4 : 4);\r\n\r\n                    const __m128i _Comparand = _Traits::_Set_sse(_Val);\r\n\r\n                    const void* _Stop_at = _First;\r\n                    _Advance_bytes(_Stop_at, _Length & ~size_t{0xF});\r\n\r\n                    uint32_t _Carry = 0;\r\n                    do {\r\n                        const __m128i _Data = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_First));\r\n\r\n                        const __m128i _Cmp   = _Traits::_Cmp_sse(_Comparand, _Data);\r\n                        const uint32_t _Mask = _mm_movemask_epi8(_Cmp);\r\n\r\n                        uint32_t _MskX = _Carry | (_Mask << 16);\r\n\r\n                        _MskX = (_MskX >> sizeof(_Ty)) & _MskX;\r\n\r\n                        if constexpr (sizeof(_Ty) == 1) {\r\n                            _MskX = (_MskX >> _Sh1) & _MskX;\r\n                        }\r\n\r\n                        if constexpr (sizeof(_Ty) < 4) {\r\n                            _MskX = (_MskX >> _Sh2) & _MskX;\r\n                        }\r\n\r\n                        if (_MskX != 0) {\r\n                            unsigned long _Pos;\r\n                            // CodeQL [SM02313] _Pos is always initialized: _MskX != 0 was checked right above.\r\n                            _BitScanForward(&_Pos, _MskX);\r\n                            _Advance_bytes(_First, static_cast<ptrdiff_t>(_Pos) - 16);\r\n                            return _First;\r\n                        }\r\n\r\n                        _Carry = _Mask;\r\n\r\n                        _Advance_bytes(_First, 16);\r\n                    } while (_First != _Stop_at);\r\n\r\n                    _Mid1 = static_cast<const _Ty*>(_First);\r\n\r\n                    unsigned long _Carry_pos;\r\n                    // Here, _Carry can't be 0xFFFF, because that would have been a match. Therefore:\r\n                    // CodeQL [SM02313] _Carry_pos is always initialized: `(_Carry ^ 0xFFFF) != 0` is always true.\r\n                    _BitScanReverse(&_Carry_pos, _Carry ^ 0xFFFF);\r\n                    _Rewind_bytes(_First, 15 - static_cast<ptrdiff_t>(_Carry_pos));\r\n                }\r\n            }\r\n\r\n            return _Search_n_tail(_First, _Last, _Count, _Mid1, _Val);\r\n        }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n        template <class _Traits, _Predicate _Pred, class _Ty>\r\n        size_t __stdcall _Find_last_pos_impl(\r\n            const void* const _First, const void* const _Last, const _Ty _Val) noexcept {\r\n            const void* const _Result = _Find_last_impl<_Traits, _Pred>(_First, _Last, _Val);\r\n            if (_Result == _Last) {\r\n                return static_cast<size_t>(-1);\r\n            } else {\r\n                return _Byte_length(_First, _Result) / sizeof(_Ty);\r\n            }\r\n        }\r\n    } // namespace _Finding\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n#ifndef _M_ARM64\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nconst void* __stdcall __std_find_trivial_unsized_1(const void* const _First, const uint8_t _Val) noexcept {\r\n    // C23 7.27.5.2 \"The memchr generic function\"/2 says \"The implementation shall behave as if\r\n    // it reads the characters sequentially and stops as soon as a matching character is found.\"\r\n    return memchr(_First, _Val, SIZE_MAX);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nconst void* __stdcall __std_find_trivial_unsized_2(const void* const _First, const uint16_t _Val) noexcept {\r\n    // C23 7.27.5.2 \"The memchr generic function\"/2 says \"The implementation shall behave as if\r\n    // it reads the characters sequentially and stops as soon as a matching character is found.\"\r\n    // C23 7.32.4.6.9 \"The wmemchr generic function\"/2 lacks such wording,\r\n    // so we don't use wmemchr(), avoiding issues with unreachable_sentinel_t.\r\n    return _Finding::_Find_unsized_impl(_First, _Val);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nconst void* __stdcall __std_find_trivial_unsized_4(const void* const _First, const uint32_t _Val) noexcept {\r\n    return _Finding::_Find_unsized_impl(_First, _Val);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nconst void* __stdcall __std_find_trivial_unsized_8(const void* const _First, const uint64_t _Val) noexcept {\r\n    return _Finding::_Find_unsized_impl(_First, _Val);\r\n}\r\n#endif // ^^^ !defined(_M_ARM64) ^^^\r\n\r\nconst void* __stdcall __std_find_trivial_1(\r\n    const void* const _First, const void* const _Last, const uint8_t _Val) noexcept {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    auto _Result = memchr(_First, _Val, _Byte_length(_First, _Last));\r\n    return _Result ? _Result : _Last;\r\n#else\r\n    return _Finding::_Find_impl<_Finding::_Find_traits_1, _Finding::_Predicate::_Equal>(_First, _Last, _Val);\r\n#endif\r\n}\r\n\r\nconst void* __stdcall __std_find_trivial_2(\r\n    const void* const _First, const void* const _Last, const uint16_t _Val) noexcept {\r\n    return _Finding::_Find_impl<_Finding::_Find_traits_2, _Finding::_Predicate::_Equal>(_First, _Last, _Val);\r\n}\r\n\r\nconst void* __stdcall __std_find_trivial_4(\r\n    const void* const _First, const void* const _Last, const uint32_t _Val) noexcept {\r\n    return _Finding::_Find_impl<_Finding::_Find_traits_4, _Finding::_Predicate::_Equal>(_First, _Last, _Val);\r\n}\r\n\r\nconst void* __stdcall __std_find_trivial_8(\r\n    const void* const _First, const void* const _Last, const uint64_t _Val) noexcept {\r\n    return _Finding::_Find_impl<_Finding::_Find_traits_8, _Finding::_Predicate::_Equal>(_First, _Last, _Val);\r\n}\r\n\r\nconst void* __stdcall __std_find_last_trivial_1(\r\n    const void* const _First, const void* const _Last, const uint8_t _Val) noexcept {\r\n    return _Finding::_Find_last_impl<_Finding::_Find_traits_1, _Finding::_Predicate::_Equal>(_First, _Last, _Val);\r\n}\r\n\r\nconst void* __stdcall __std_find_last_trivial_2(\r\n    const void* const _First, const void* const _Last, const uint16_t _Val) noexcept {\r\n    return _Finding::_Find_last_impl<_Finding::_Find_traits_2, _Finding::_Predicate::_Equal>(_First, _Last, _Val);\r\n}\r\n\r\nconst void* __stdcall __std_find_last_trivial_4(\r\n    const void* const _First, const void* const _Last, const uint32_t _Val) noexcept {\r\n    return _Finding::_Find_last_impl<_Finding::_Find_traits_4, _Finding::_Predicate::_Equal>(_First, _Last, _Val);\r\n}\r\n\r\nconst void* __stdcall __std_find_last_trivial_8(\r\n    const void* const _First, const void* const _Last, const uint64_t _Val) noexcept {\r\n    return _Finding::_Find_last_impl<_Finding::_Find_traits_8, _Finding::_Predicate::_Equal>(_First, _Last, _Val);\r\n}\r\n\r\nconst void* __stdcall __std_find_not_ch_1(\r\n    const void* const _First, const void* const _Last, const uint8_t _Val) noexcept {\r\n    return _Finding::_Find_impl<_Finding::_Find_traits_1, _Finding::_Predicate::_Not_equal>(_First, _Last, _Val);\r\n}\r\n\r\nconst void* __stdcall __std_find_not_ch_2(\r\n    const void* const _First, const void* const _Last, const uint16_t _Val) noexcept {\r\n    return _Finding::_Find_impl<_Finding::_Find_traits_2, _Finding::_Predicate::_Not_equal>(_First, _Last, _Val);\r\n}\r\n\r\nconst void* __stdcall __std_find_not_ch_4(\r\n    const void* const _First, const void* const _Last, const uint32_t _Val) noexcept {\r\n    return _Finding::_Find_impl<_Finding::_Find_traits_4, _Finding::_Predicate::_Not_equal>(_First, _Last, _Val);\r\n}\r\n\r\nconst void* __stdcall __std_find_not_ch_8(\r\n    const void* const _First, const void* const _Last, const uint64_t _Val) noexcept {\r\n    return _Finding::_Find_impl<_Finding::_Find_traits_8, _Finding::_Predicate::_Not_equal>(_First, _Last, _Val);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_find_last_not_ch_pos_1(\r\n    const void* const _First, const void* const _Last, const uint8_t _Val) noexcept {\r\n    return _Finding::_Find_last_pos_impl<_Finding::_Find_traits_1, _Finding::_Predicate::_Not_equal>(\r\n        _First, _Last, _Val);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_find_last_not_ch_pos_2(\r\n    const void* const _First, const void* const _Last, const uint16_t _Val) noexcept {\r\n    return _Finding::_Find_last_pos_impl<_Finding::_Find_traits_2, _Finding::_Predicate::_Not_equal>(\r\n        _First, _Last, _Val);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_find_last_not_ch_pos_4(\r\n    const void* const _First, const void* const _Last, const uint32_t _Val) noexcept {\r\n    return _Finding::_Find_last_pos_impl<_Finding::_Find_traits_4, _Finding::_Predicate::_Not_equal>(\r\n        _First, _Last, _Val);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_find_last_not_ch_pos_8(\r\n    const void* const _First, const void* const _Last, const uint64_t _Val) noexcept {\r\n    return _Finding::_Find_last_pos_impl<_Finding::_Find_traits_8, _Finding::_Predicate::_Not_equal>(\r\n        _First, _Last, _Val);\r\n}\r\n\r\nconst void* __stdcall __std_adjacent_find_1(const void* const _First, const void* const _Last) noexcept {\r\n    return _Finding::_Adjacent_find_impl<_Finding::_Find_traits_1, uint8_t>(_First, _Last);\r\n}\r\n\r\nconst void* __stdcall __std_adjacent_find_2(const void* const _First, const void* const _Last) noexcept {\r\n    return _Finding::_Adjacent_find_impl<_Finding::_Find_traits_2, uint16_t>(_First, _Last);\r\n}\r\n\r\nconst void* __stdcall __std_adjacent_find_4(const void* const _First, const void* const _Last) noexcept {\r\n    return _Finding::_Adjacent_find_impl<_Finding::_Find_traits_4, uint32_t>(_First, _Last);\r\n}\r\n\r\nconst void* __stdcall __std_adjacent_find_8(const void* const _First, const void* const _Last) noexcept {\r\n    return _Finding::_Adjacent_find_impl<_Finding::_Find_traits_8, uint64_t>(_First, _Last);\r\n}\r\n\r\nconst void* __stdcall __std_search_n_1(\r\n    const void* const _First, const void* const _Last, const size_t _Count, const uint8_t _Value) noexcept {\r\n    return _Finding::_Search_n_impl<_Finding::_Find_traits_1>(_First, _Last, _Count, _Value);\r\n}\r\n\r\nconst void* __stdcall __std_search_n_2(\r\n    const void* const _First, const void* const _Last, const size_t _Count, const uint16_t _Value) noexcept {\r\n    return _Finding::_Search_n_impl<_Finding::_Find_traits_2>(_First, _Last, _Count, _Value);\r\n}\r\n\r\nconst void* __stdcall __std_search_n_4(\r\n    const void* const _First, const void* const _Last, const size_t _Count, const uint32_t _Value) noexcept {\r\n    return _Finding::_Search_n_impl<_Finding::_Find_traits_4>(_First, _Last, _Count, _Value);\r\n}\r\n\r\nconst void* __stdcall __std_search_n_8(\r\n    const void* const _First, const void* const _Last, const size_t _Count, const uint64_t _Value) noexcept {\r\n    return _Finding::_Search_n_impl<_Finding::_Find_traits_8>(_First, _Last, _Count, _Value);\r\n}\r\n\r\n} // extern \"C\"\r\n\r\nnamespace {\r\n    namespace _Counting {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        struct _Count_traits_8 : _Finding::_Find_traits_8 {\r\n            static uint64x2_t _Sub(const uint64x2_t _Lhs, const uint64x2_t _Rhs) noexcept {\r\n                return vsubq_u64(_Lhs, _Rhs);\r\n            }\r\n\r\n            static size_t _Reduce(const uint64x2_t _Val) noexcept {\r\n                return vgetq_lane_u64(vpaddq_u64(_Val, _Val), 0);\r\n            }\r\n\r\n            static size_t _Reduce(const uint64x2_t _Val_lo, const uint64x2_t _Val_hi) noexcept {\r\n                return _Reduce(vaddq_u64(_Val_lo, _Val_hi));\r\n            }\r\n        };\r\n\r\n        struct _Count_traits_4 : _Finding::_Find_traits_4 {\r\n            // Max value that will fit in 32-bit counters without overflow.\r\n            static constexpr size_t _Max_count = 0xFFFFFFFF;\r\n\r\n            static uint32x4_t _Sub(const uint32x4_t _Lhs, const uint32x4_t _Rhs) noexcept {\r\n                return vsubq_u32(_Lhs, _Rhs);\r\n            }\r\n\r\n            static size_t _Reduce(const uint32x4_t _Val) noexcept {\r\n                return vaddlvq_u32(_Val);\r\n            }\r\n\r\n            static size_t _Reduce(const uint32x4_t _Val_lo, const uint32x4_t _Val_hi) noexcept {\r\n                uint64x2_t _Sum = vpaddlq_u32(_Val_lo);\r\n                _Sum            = vpadalq_u32(_Sum, _Val_hi);\r\n                return _Count_traits_8::_Reduce(_Sum);\r\n            }\r\n        };\r\n\r\n        struct _Count_traits_2 : _Finding::_Find_traits_2 {\r\n            // Max value that will fit in 16-bit counters without overflow.\r\n            static constexpr size_t _Max_count = 0xFFFF;\r\n\r\n            static uint16x8_t _Sub(const uint16x8_t _Lhs, const uint16x8_t _Rhs) noexcept {\r\n                return vsubq_u16(_Lhs, _Rhs);\r\n            }\r\n\r\n            static size_t _Reduce(const uint16x8_t _Val) noexcept {\r\n                return vaddlvq_u16(_Val);\r\n            }\r\n\r\n            static size_t _Reduce(const uint16x8_t _Val_lo, const uint16x8_t _Val_hi) noexcept {\r\n                uint32x4_t _Sum = vpaddlq_u16(_Val_lo);\r\n                _Sum            = vpadalq_u16(_Sum, _Val_hi);\r\n                return _Count_traits_4::_Reduce(_Sum);\r\n            }\r\n        };\r\n\r\n        struct _Count_traits_1 : _Finding::_Find_traits_1 {\r\n            // Max value that will fit in 8-bit counters without overflow.\r\n            static constexpr size_t _Max_count = 0xFF;\r\n\r\n            static uint8x16_t _Sub(const uint8x16_t _Lhs, const uint8x16_t _Rhs) noexcept {\r\n                return vsubq_u8(_Lhs, _Rhs);\r\n            }\r\n\r\n            static size_t _Reduce(const uint8x16_t _Val) noexcept {\r\n                return vaddlvq_u8(_Val);\r\n            }\r\n\r\n            static size_t _Reduce(const uint8x16_t _Val_lo, const uint8x16_t _Val_hi) noexcept {\r\n                uint16x8_t _Sum = vpaddlq_u8(_Val_lo);\r\n                _Sum            = vpadalq_u8(_Sum, _Val_hi);\r\n                return _Count_traits_2::_Reduce(_Sum);\r\n            }\r\n        };\r\n\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        struct _Count_traits_8 : _Finding::_Find_traits_8 {\r\n            static __m256i _Sub_avx(const __m256i _Lhs, const __m256i _Rhs) noexcept {\r\n                return _mm256_sub_epi64(_Lhs, _Rhs);\r\n            }\r\n\r\n            static __m128i _Sub_sse(const __m128i _Lhs, const __m128i _Rhs) noexcept {\r\n                return _mm_sub_epi64(_Lhs, _Rhs);\r\n            }\r\n\r\n            static size_t _Reduce_avx(const __m256i _Val) noexcept {\r\n                const __m128i _Lo64 = _mm256_extracti128_si256(_Val, 0);\r\n                const __m128i _Hi64 = _mm256_extracti128_si256(_Val, 1);\r\n                const __m128i _Rx8  = _mm_add_epi64(_Lo64, _Hi64);\r\n                return _Reduce_sse(_Rx8);\r\n            }\r\n\r\n            static size_t _Reduce_sse(const __m128i _Val) noexcept {\r\n#ifdef _WIN64\r\n                return _mm_cvtsi128_si64(_Val) + _mm_extract_epi64(_Val, 1);\r\n#else // ^^^ 64-bit / 32-bit vvv\r\n                return static_cast<uint32_t>(_mm_cvtsi128_si32(_Val))\r\n                     + static_cast<uint32_t>(_mm_extract_epi32(_Val, 2));\r\n#endif // ^^^ 32-bit ^^^\r\n            }\r\n        };\r\n\r\n        struct _Count_traits_4 : _Finding::_Find_traits_4 {\r\n            // For AVX2, we use hadd_epi32 three times to combine pairs of 32-bit counters into 32-bit results.\r\n            // Therefore, _Max_count is 0x1FFF'FFFF, which is 0xFFFF'FFF8 when doubled three times; any more would\r\n            // overflow.\r\n\r\n            // For SSE4.2, we use hadd_epi32 twice. This would allow a larger limit,\r\n            // but it's simpler to use the smaller limit for both codepaths.\r\n\r\n            static constexpr size_t _Max_count = 0x1FFF'FFFF;\r\n\r\n            static __m256i _Sub_avx(const __m256i _Lhs, const __m256i _Rhs) noexcept {\r\n                return _mm256_sub_epi32(_Lhs, _Rhs);\r\n            }\r\n\r\n            static __m128i _Sub_sse(const __m128i _Lhs, const __m128i _Rhs) noexcept {\r\n                return _mm_sub_epi32(_Lhs, _Rhs);\r\n            }\r\n\r\n            static size_t _Reduce_avx(const __m256i _Val) noexcept {\r\n                constexpr auto _Shuf = _MM_SHUFFLE(3, 1, 2, 0); // Cross lane, to reduce further on low lane\r\n                const __m256i _Rx4   = _mm256_hadd_epi32(_Val, _mm256_setzero_si256()); // (0+1),(2+3),0,0 per lane\r\n                const __m256i _Rx5   = _mm256_permute4x64_epi64(_Rx4, _Shuf); // low lane  (0+1),(2+3),(4+5),(6+7)\r\n                const __m256i _Rx6   = _mm256_hadd_epi32(_Rx5, _mm256_setzero_si256()); // (0+...+3),(4+...+7),0,0\r\n                const __m256i _Rx7   = _mm256_hadd_epi32(_Rx6, _mm256_setzero_si256()); // (0+...+7),0,0,0\r\n                return static_cast<uint32_t>(_mm_cvtsi128_si32(_mm256_castsi256_si128(_Rx7)));\r\n            }\r\n\r\n            static size_t _Reduce_sse(const __m128i _Val) noexcept {\r\n                const __m128i _Rx4 = _mm_hadd_epi32(_Val, _mm_setzero_si128()); // (0+1),(2+3),0,0\r\n                const __m128i _Rx5 = _mm_hadd_epi32(_Rx4, _mm_setzero_si128()); // (0+...+3),0,0,0\r\n                return static_cast<uint32_t>(_mm_cvtsi128_si32(_Rx5));\r\n            }\r\n        };\r\n\r\n        struct _Count_traits_2 : _Finding::_Find_traits_2 {\r\n            // For both AVX2 and SSE4.2, we use hadd_epi16 once to combine pairs of 16-bit counters into 16-bit results.\r\n            // Therefore, _Max_count is 0x7FFF, which is 0xFFFE when doubled; any more would overflow.\r\n\r\n            static constexpr size_t _Max_count = 0x7FFF;\r\n\r\n            static __m256i _Sub_avx(const __m256i _Lhs, const __m256i _Rhs) noexcept {\r\n                return _mm256_sub_epi16(_Lhs, _Rhs);\r\n            }\r\n\r\n            static __m128i _Sub_sse(const __m128i _Lhs, const __m128i _Rhs) noexcept {\r\n                return _mm_sub_epi16(_Lhs, _Rhs);\r\n            }\r\n\r\n            static size_t _Reduce_avx(const __m256i _Val) noexcept {\r\n                const __m256i _Rx2 = _mm256_hadd_epi16(_Val, _mm256_setzero_si256());\r\n                const __m256i _Rx3 = _mm256_unpacklo_epi16(_Rx2, _mm256_setzero_si256());\r\n                return _Count_traits_4::_Reduce_avx(_Rx3);\r\n            }\r\n\r\n            static size_t _Reduce_sse(const __m128i _Val) noexcept {\r\n                const __m128i _Rx2 = _mm_hadd_epi16(_Val, _mm_setzero_si128());\r\n                const __m128i _Rx3 = _mm_unpacklo_epi16(_Rx2, _mm_setzero_si128());\r\n                return _Count_traits_4::_Reduce_sse(_Rx3);\r\n            }\r\n        };\r\n\r\n        struct _Count_traits_1 : _Finding::_Find_traits_1 {\r\n            // For AVX2, _Max_portion_size below is _Max_count * 32 bytes, and we have 1-byte elements.\r\n            // We're using packed 8-bit counters, and 32 of those fit in 256 bits.\r\n\r\n            // For SSE4.2, _Max_portion_size below is _Max_count * 16 bytes, and we have 1-byte elements.\r\n            // We're using packed 8-bit counters, and 16 of those fit in 128 bits.\r\n\r\n            // For both codepaths, this is why _Max_count is the maximum unsigned 8-bit integer.\r\n            // (The reduction steps aren't the limiting factor here.)\r\n\r\n            static constexpr size_t _Max_count = 0xFF;\r\n\r\n            static __m256i _Sub_avx(const __m256i _Lhs, const __m256i _Rhs) noexcept {\r\n                return _mm256_sub_epi8(_Lhs, _Rhs);\r\n            }\r\n\r\n            static __m128i _Sub_sse(const __m128i _Lhs, const __m128i _Rhs) noexcept {\r\n                return _mm_sub_epi8(_Lhs, _Rhs);\r\n            }\r\n\r\n            static size_t _Reduce_avx(const __m256i _Val) noexcept {\r\n                const __m256i _Rx1 = _mm256_sad_epu8(_Val, _mm256_setzero_si256());\r\n                return _Count_traits_8::_Reduce_avx(_Rx1);\r\n            }\r\n\r\n            static size_t _Reduce_sse(const __m128i _Val) noexcept {\r\n                const __m128i _Rx1 = _mm_sad_epu8(_Val, _mm_setzero_si128());\r\n                return _Count_traits_8::_Reduce_sse(_Rx1);\r\n            }\r\n        };\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        template <class _Traits, class _Ty>\r\n        __declspec(noalias) size_t __stdcall _Count_impl(\r\n            const void* _First, const void* const _Last, const _Ty _Val) noexcept {\r\n            size_t _Result           = 0;\r\n            const size_t _Size_bytes = _Byte_length(_First, _Last);\r\n\r\n            if (size_t _Size = _Size_bytes & ~size_t{0x1F}; _Size != 0) {\r\n                const auto _Comparand = _Traits::_Set_neon_q(_Val);\r\n                const void* _Stop_at  = _First;\r\n\r\n                for (;;) {\r\n                    if constexpr (sizeof(_Ty) >= sizeof(size_t)) {\r\n                        _Advance_bytes(_Stop_at, _Size);\r\n                    } else {\r\n                        constexpr size_t _Max_portion_size = _Traits::_Max_count * 32;\r\n                        const size_t _Portion_size         = _Size < _Max_portion_size ? _Size : _Max_portion_size;\r\n                        _Advance_bytes(_Stop_at, _Portion_size);\r\n                        _Size -= _Portion_size;\r\n                    }\r\n\r\n                    auto _Count_lo = _Traits::_Set_neon_q(0);\r\n                    auto _Count_hi = _Traits::_Set_neon_q(0);\r\n\r\n                    do {\r\n                        const auto _Data_lo = _Traits::_Load_q(static_cast<const uint8_t*>(_First) + 0);\r\n                        const auto _Data_hi = _Traits::_Load_q(static_cast<const uint8_t*>(_First) + 16);\r\n\r\n                        const auto _Mask_lo = _Traits::_Cmp_neon_q(_Data_lo, _Comparand);\r\n                        const auto _Mask_hi = _Traits::_Cmp_neon_q(_Data_hi, _Comparand);\r\n                        _Count_lo           = _Traits::_Sub(_Count_lo, _Mask_lo);\r\n                        _Count_hi           = _Traits::_Sub(_Count_hi, _Mask_hi);\r\n                        _Advance_bytes(_First, 32);\r\n                    } while (_First != _Stop_at);\r\n\r\n                    _Result += _Traits::_Reduce(_Count_lo, _Count_hi);\r\n\r\n                    if constexpr (sizeof(_Ty) >= sizeof(size_t)) {\r\n                        break;\r\n                    } else {\r\n                        if (_Size == 0) {\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            if ((_Size_bytes & size_t{0x10}) != 0) { // use original _Size_bytes; we've read only 32-byte chunks\r\n                const auto _Comparand = _Traits::_Set_neon_q(_Val);\r\n                auto _Count_vector    = _Traits::_Set_neon_q(0);\r\n\r\n                const auto _Data = _Traits::_Load_q(_First);\r\n                const auto _Mask = _Traits::_Cmp_neon_q(_Data, _Comparand);\r\n                _Count_vector    = _Traits::_Sub(_Count_vector, _Mask);\r\n                _Result += _Traits::_Reduce(_Count_vector);\r\n\r\n                _Advance_bytes(_First, 16);\r\n            }\r\n\r\n// Avoid auto-vectorization of the scalar tail, as this is not beneficial for performance.\r\n#pragma loop(no_vector)\r\n            for (auto _Ptr = static_cast<const _Ty*>(_First); _Ptr != _Last; ++_Ptr) {\r\n                if (*_Ptr == _Val) {\r\n                    ++_Result;\r\n                }\r\n            }\r\n            return _Result;\r\n        }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        template <class _Traits, class _Ty>\r\n        __declspec(noalias) size_t __stdcall _Count_impl(\r\n            const void* _First, const void* const _Last, const _Ty _Val) noexcept {\r\n            size_t _Result = 0;\r\n\r\n            const size_t _Size_bytes = _Byte_length(_First, _Last);\r\n\r\n            if (size_t _Avx_size = _Size_bytes & ~size_t{0x1F}; _Avx_size != 0 && _Use_avx2()) {\r\n                const __m256i _Comparand = _Traits::_Set_avx(_Val);\r\n                const void* _Stop_at     = _First;\r\n\r\n                for (;;) {\r\n                    if constexpr (sizeof(_Ty) >= sizeof(size_t)) {\r\n                        _Advance_bytes(_Stop_at, _Avx_size);\r\n                    } else {\r\n                        constexpr size_t _Max_portion_size = _Traits::_Max_count * 32;\r\n                        const size_t _Portion_size = _Avx_size < _Max_portion_size ? _Avx_size : _Max_portion_size;\r\n                        _Advance_bytes(_Stop_at, _Portion_size);\r\n                        _Avx_size -= _Portion_size;\r\n                    }\r\n\r\n                    __m256i _Count_vector = _mm256_setzero_si256();\r\n\r\n                    do {\r\n                        const __m256i _Data = _mm256_loadu_si256(static_cast<const __m256i*>(_First));\r\n                        const __m256i _Mask = _Traits::_Cmp_avx(_Data, _Comparand);\r\n                        _Count_vector       = _Traits::_Sub_avx(_Count_vector, _Mask);\r\n                        _Advance_bytes(_First, 32);\r\n                    } while (_First != _Stop_at);\r\n\r\n                    _Result += _Traits::_Reduce_avx(_Count_vector);\r\n\r\n                    if constexpr (sizeof(_Ty) >= sizeof(size_t)) {\r\n                        break;\r\n                    } else {\r\n                        if (_Avx_size == 0) {\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (const size_t _Avx_tail_size = _Size_bytes & 0x1C; _Avx_tail_size != 0) {\r\n                    const __m256i _Tail_mask  = _Avx2_tail_mask_32(_Avx_tail_size);\r\n                    const __m256i _Data       = _mm256_maskload_epi32(static_cast<const int*>(_First), _Tail_mask);\r\n                    const __m256i _Mask       = _mm256_and_si256(_Traits::_Cmp_avx(_Data, _Comparand), _Tail_mask);\r\n                    const unsigned int _Bingo = _mm256_movemask_epi8(_Mask);\r\n                    const size_t _Tail_count  = __popcnt(_Bingo); // Assume available with SSE4.2\r\n                    _Result += _Tail_count / sizeof(_Ty);\r\n                    _Advance_bytes(_First, _Avx_tail_size);\r\n                }\r\n\r\n                _mm256_zeroupper(); // TRANSITION, DevCom-10331414\r\n\r\n                if constexpr (sizeof(_Ty) >= 4) {\r\n                    return _Result;\r\n                }\r\n            } else if (size_t _Sse_size = _Size_bytes & ~size_t{0xF}; _Sse_size != 0 && _Use_sse42()) {\r\n                const __m128i _Comparand = _Traits::_Set_sse(_Val);\r\n                const void* _Stop_at     = _First;\r\n\r\n                for (;;) {\r\n                    if constexpr (sizeof(_Ty) >= sizeof(size_t)) {\r\n                        _Advance_bytes(_Stop_at, _Sse_size);\r\n                    } else {\r\n                        constexpr size_t _Max_portion_size = _Traits::_Max_count * 16;\r\n                        const size_t _Portion_size = _Sse_size < _Max_portion_size ? _Sse_size : _Max_portion_size;\r\n                        _Advance_bytes(_Stop_at, _Portion_size);\r\n                        _Sse_size -= _Portion_size;\r\n                    }\r\n\r\n                    __m128i _Count_vector = _mm_setzero_si128();\r\n\r\n                    do {\r\n                        const __m128i _Data = _mm_loadu_si128(static_cast<const __m128i*>(_First));\r\n                        const __m128i _Mask = _Traits::_Cmp_sse(_Data, _Comparand);\r\n                        _Count_vector       = _Traits::_Sub_sse(_Count_vector, _Mask);\r\n                        _Advance_bytes(_First, 16);\r\n                    } while (_First != _Stop_at);\r\n\r\n                    _Result += _Traits::_Reduce_sse(_Count_vector);\r\n\r\n                    if constexpr (sizeof(_Ty) >= sizeof(size_t)) {\r\n                        break;\r\n                    } else {\r\n                        if (_Sse_size == 0) {\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            for (auto _Ptr = static_cast<const _Ty*>(_First); _Ptr != _Last; ++_Ptr) {\r\n                if (*_Ptr == _Val) {\r\n                    ++_Result;\r\n                }\r\n            }\r\n            return _Result;\r\n        }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n    } // namespace _Counting\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n__declspec(noalias) size_t __stdcall __std_count_trivial_1(\r\n    const void* const _First, const void* const _Last, const uint8_t _Val) noexcept {\r\n    return _Counting::_Count_impl<_Counting::_Count_traits_1>(_First, _Last, _Val);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_count_trivial_2(\r\n    const void* const _First, const void* const _Last, const uint16_t _Val) noexcept {\r\n    return _Counting::_Count_impl<_Counting::_Count_traits_2>(_First, _Last, _Val);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_count_trivial_4(\r\n    const void* const _First, const void* const _Last, const uint32_t _Val) noexcept {\r\n    return _Counting::_Count_impl<_Counting::_Count_traits_4>(_First, _Last, _Val);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_count_trivial_8(\r\n    const void* const _First, const void* const _Last, const uint64_t _Val) noexcept {\r\n    return _Counting::_Count_impl<_Counting::_Count_traits_8>(_First, _Last, _Val);\r\n}\r\n\r\n} // extern \"C\"\r\n\r\nnamespace {\r\n    namespace _Find_meow_of {\r\n        // 'find_meow_of' is a quadratic complexity algorithm.\r\n        // Quadratic vectorization:\r\n        //  - SSE4.2 for 8-bit and 16-bit elements: _mm_cmpestri\r\n        //  - AVX2 for 32-bit and 64-bit elements: shuffle elements so that each is tried in each position,\r\n        //    find the min/max match position\r\n        //\r\n        // But for a needle with elements in a small range, a bitmap can be used, making the algorithm linear.\r\n        // We consider that only for 'basic_string'/'basic_string_view', not for 'std::find_first_of'.\r\n        // We consider bitmaps for elements in the range [0, 255].\r\n        //\r\n        // We have two different bitmap algorithms: AVX2 and scalar.\r\n        // The decision is based on needle and haystack lengths, see _Pick_strategy.\r\n\r\n        enum class _Predicate { _Any_of, _None_of };\r\n\r\n        namespace _Bitmap_details {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            __forceinline uint8x16_t _Bitmap_step(const uint8x16_t _Data, const uint8x16x2_t _Bitmap) noexcept {\r\n                const uint8x16_t _Idx = vshrq_n_u8(_Data, 3);\r\n                const uint8x16_t _Bit = vandq_u8(_Data, vdupq_n_u8(7));\r\n\r\n                const uint8x16_t _Byte = vqtbl2q_u8(_Bitmap, _Idx);\r\n                const int8x16_t _Shift = vnegq_s8(vreinterpretq_s8_u8(_Bit));\r\n                const uint8x16_t _Test = vshlq_u8(_Byte, _Shift);\r\n                return vtstq_u8(_Test, vdupq_n_u8(1));\r\n            }\r\n\r\n            uint8x16_t _Pack_u16(const uint16x8_t _Val0, const uint16x8_t _Val1) noexcept {\r\n                return vuzp1q_u8(vreinterpretq_u8_u16(_Val0), vreinterpretq_u8_u16(_Val1));\r\n            }\r\n\r\n            uint8x16_t _Pack_u32(const uint32x4_t _Val0, const uint32x4_t _Val1, const uint32x4_t _Val2,\r\n                const uint32x4_t _Val3) noexcept {\r\n                const auto _Val01 = vuzp1q_u16(vreinterpretq_u16_u32(_Val0), vreinterpretq_u16_u32(_Val1));\r\n                const auto _Val23 = vuzp1q_u16(vreinterpretq_u16_u32(_Val2), vreinterpretq_u16_u32(_Val3));\r\n                return _Pack_u16(_Val01, _Val23);\r\n            }\r\n\r\n            template <class _Ty>\r\n            __forceinline uint8x16_t _Do_bitmap(const _Ty* const _Src, const uint8x16x2_t _Bitmap) noexcept {\r\n                if constexpr (sizeof(_Ty) == 1) {\r\n                    const uint8x16_t _Data = vld1q_u8(_Src);\r\n                    return _Bitmap_step(_Data, _Bitmap);\r\n                } else if constexpr (sizeof(_Ty) == 2) {\r\n                    const auto _Data0 = vld1q_u16(_Src + 0);\r\n                    const auto _Data1 = vld1q_u16(_Src + 8);\r\n                    const auto _Data  = _Pack_u16(_Data0, _Data1);\r\n\r\n                    const auto _Limit     = vdupq_n_u16(0xFF);\r\n                    const auto _Overflow  = _Pack_u16(vcleq_u16(_Data0, _Limit), vcleq_u16(_Data1, _Limit));\r\n                    const auto _Mask_part = _Bitmap_step(_Data, _Bitmap);\r\n                    return vandq_u8(_Mask_part, _Overflow);\r\n                } else if constexpr (sizeof(_Ty) == 4) {\r\n                    const auto _Data0 = vld1q_u32(_Src + 0);\r\n                    const auto _Data1 = vld1q_u32(_Src + 4);\r\n                    const auto _Data2 = vld1q_u32(_Src + 8);\r\n                    const auto _Data3 = vld1q_u32(_Src + 12);\r\n                    const auto _Data  = _Pack_u32(_Data0, _Data1, _Data2, _Data3);\r\n\r\n                    const auto _Limit     = vdupq_n_u32(0xFF);\r\n                    const auto _Overflow0 = vcleq_u32(_Data0, _Limit);\r\n                    const auto _Overflow1 = vcleq_u32(_Data1, _Limit);\r\n                    const auto _Overflow2 = vcleq_u32(_Data2, _Limit);\r\n                    const auto _Overflow3 = vcleq_u32(_Data3, _Limit);\r\n                    const auto _Overflow  = _Pack_u32(_Overflow0, _Overflow1, _Overflow2, _Overflow3);\r\n\r\n                    const auto _Mask_part = _Bitmap_step(_Data, _Bitmap);\r\n                    return vandq_u8(_Mask_part, _Overflow);\r\n                } else {\r\n                    static_assert(false, \"Unexpected size\");\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            __forceinline bool _Make_bitmap_small(\r\n                const void* const _Needle, const size_t _Needle_length, uint8x16x2_t& _Bitmap) noexcept {\r\n                auto _Needle_ptr = static_cast<const _Ty*>(_Needle);\r\n                const auto _Stop = _Needle_ptr + _Needle_length;\r\n\r\n                uint64_t _Bitmap0 = 0;\r\n                uint64_t _Bitmap1 = 0;\r\n                uint64_t _Bitmap2 = 0;\r\n                uint64_t _Bitmap3 = 0;\r\n\r\n                constexpr uint64_t _One = 1;\r\n\r\n                for (; _Needle_ptr != _Stop; ++_Needle_ptr) {\r\n                    const unsigned int _Val = static_cast<unsigned int>(*_Needle_ptr);\r\n\r\n                    if constexpr (sizeof(_Ty) > 1) {\r\n                        if (_Val >= 256) {\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n                    const uint64_t _One_low  = _rotl64(_One, _Val);\r\n                    const uint64_t _Bitmap01 = (_Val & 0x80) == 0 ? _One_low : 0;\r\n                    const uint64_t _Bitmap23 = (_Val & 0x80) != 0 ? _One_low : 0;\r\n                    _Bitmap0 |= (_Val & 0x40) == 0 ? _Bitmap01 : 0;\r\n                    _Bitmap1 |= (_Val & 0x40) != 0 ? _Bitmap01 : 0;\r\n                    _Bitmap2 |= (_Val & 0x40) == 0 ? _Bitmap23 : 0;\r\n                    _Bitmap3 |= (_Val & 0x40) != 0 ? _Bitmap23 : 0;\r\n                }\r\n\r\n                _Bitmap.val[0] = vreinterpretq_u8_u64(vsetq_lane_u64(_Bitmap1, vdupq_n_u64(_Bitmap0), 1));\r\n                _Bitmap.val[1] = vreinterpretq_u8_u64(vsetq_lane_u64(_Bitmap3, vdupq_n_u64(_Bitmap2), 1));\r\n\r\n                return true;\r\n            }\r\n\r\n            __forceinline uint64x1_t _Movemask_128_x4(const uint8x16_t _In0, const uint8x16_t _In1,\r\n                const uint8x16_t _In2, const uint8x16_t _In3, const uint8x16_t _Mask) noexcept {\r\n                uint8x16_t _And0 = vandq_u8(_In0, _Mask);\r\n                uint8x16_t _And1 = vandq_u8(_In1, _Mask);\r\n                uint8x16_t _And2 = vandq_u8(_In2, _Mask);\r\n                uint8x16_t _And3 = vandq_u8(_In3, _Mask);\r\n\r\n                uint8x16_t _Sum0 = vpaddq_u8(_And0, _And1);\r\n                uint8x16_t _Sum1 = vpaddq_u8(_And2, _And3);\r\n                _Sum0            = vpaddq_u8(_Sum0, _Sum1);\r\n                _Sum0            = vpaddq_u8(_Sum0, _Sum0);\r\n\r\n                return vget_low_u64(vreinterpretq_u64_u8(_Sum0));\r\n            }\r\n\r\n            template <class _Ty>\r\n            __forceinline bool _Make_bitmap_large_neon(\r\n                const void* const _Needle, const size_t _Needle_length, uint8x16x2_t& _Bitmap) noexcept {\r\n                // TRANSITION, DevCom-11055227\r\n                constexpr uint8_t _Mask_arr[16] = {\r\n                    0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};\r\n                const auto _Mask = vld1q_u8(_Mask_arr);\r\n\r\n                auto _Needle_ptr       = static_cast<const _Ty*>(_Needle);\r\n                const _Ty* const _Stop = _Needle_ptr + _Needle_length;\r\n\r\n                alignas(16) uint8_t _Table[256] = {};\r\n                for (; _Needle_ptr != _Stop; ++_Needle_ptr) {\r\n                    if constexpr (sizeof(_Ty) > 1) {\r\n                        if (*_Needle_ptr >= 256) {\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n                    _Table[*_Needle_ptr] = 0xFF;\r\n                }\r\n\r\n                for (size_t _Ix = 0; _Ix < 2; ++_Ix) {\r\n                    const auto _In0 = vld1q_u8(_Table + _Ix * 128 + 0 * 16);\r\n                    const auto _In1 = vld1q_u8(_Table + _Ix * 128 + 1 * 16);\r\n                    const auto _In2 = vld1q_u8(_Table + _Ix * 128 + 2 * 16);\r\n                    const auto _In3 = vld1q_u8(_Table + _Ix * 128 + 3 * 16);\r\n\r\n                    const auto _Bm0 = _Movemask_128_x4(_In0, _In1, _In2, _In3, _Mask);\r\n\r\n                    const auto _In4 = vld1q_u8(_Table + _Ix * 128 + 4 * 16);\r\n                    const auto _In5 = vld1q_u8(_Table + _Ix * 128 + 5 * 16);\r\n                    const auto _In6 = vld1q_u8(_Table + _Ix * 128 + 6 * 16);\r\n                    const auto _In7 = vld1q_u8(_Table + _Ix * 128 + 7 * 16);\r\n\r\n                    const auto _Bm1 = _Movemask_128_x4(_In4, _In5, _In6, _In7, _Mask);\r\n\r\n                    _Bitmap.val[_Ix] = vreinterpretq_u8_u64(vcombine_u64(_Bm0, _Bm1));\r\n                }\r\n\r\n                return true;\r\n            }\r\n\r\n            template <class _Ty>\r\n            __forceinline bool _Make_bitmap(\r\n                const void* const _Needle, const size_t _Needle_length, uint8x16x2_t& _Bitmap) noexcept {\r\n                if (_Needle_length <= 20) {\r\n                    return _Make_bitmap_small<_Ty>(_Needle, _Needle_length, _Bitmap);\r\n                } else {\r\n                    return _Make_bitmap_large_neon<_Ty>(_Needle, _Needle_length, _Bitmap);\r\n                }\r\n            }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n\r\n            // AVX2 bitmap: __m256i value with each bit corresponding to a needle element. Set bits mean \"present\".\r\n            //\r\n            // The bitmap algorithm implemented in _Bitmap_step:\r\n            //  - Process by 8 elements, populate them as in 32-bit values vector,\r\n            //    regardless of the original element size\r\n            //  - Split the low 5 bits and high 3 bits of these elements\r\n            //  - Use the high 3 bits with _mm256_permutevar8x32_epi32 to find 32-bit bitmap portion for each element\r\n            //  - Use the low 5 bits to shift the bitmap portion, so that the bitmap bit corresponding to them is on\r\n            //    highest position. Negate these low 5 bits before that, as we're populating the highest position\r\n            //  - The resulting mask can later be converted via _mm256_movemask_ps to one byte bitmap\r\n            __m256i _Bitmap_step(const __m256i _Bitmap, const __m256i _Data) noexcept {\r\n                const __m256i _Data_high    = _mm256_srli_epi32(_Data, 5);\r\n                const __m256i _Bitmap_parts = _mm256_permutevar8x32_epi32(_Bitmap, _Data_high);\r\n                const __m256i _Data_low_inv = _mm256_andnot_si256(_Data, _mm256_set1_epi32(0x1F));\r\n                const __m256i _Mask         = _mm256_sllv_epi32(_Bitmap_parts, _Data_low_inv);\r\n                return _Mask;\r\n            }\r\n\r\n            template <class _Ty>\r\n            __m256i _Load_avx_256_8(const _Ty* const _Src) noexcept {\r\n                if constexpr (sizeof(_Ty) == 1) {\r\n                    return _mm256_cvtepu8_epi32(_mm_loadu_si64(_Src));\r\n                } else if constexpr (sizeof(_Ty) == 2) {\r\n                    return _mm256_cvtepu16_epi32(_mm_loadu_si128(reinterpret_cast<const __m128i*>(_Src)));\r\n                } else if constexpr (sizeof(_Ty) == 4) {\r\n                    return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_Src));\r\n                } else if constexpr (sizeof(_Ty) == 8) {\r\n                    const __m256i _Low  = _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_Src));\r\n                    const __m256i _High = _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_Src) + 1);\r\n                    const __m256i _Pack = _mm256_packs_epi32(_Low, _High);\r\n                    return _mm256_permute4x64_epi64(_Pack, _MM_SHUFFLE(3, 1, 2, 0));\r\n                } else {\r\n                    static_assert(false, \"Unexpected size\");\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            __m256i _Load_avx_256_8_last(const _Ty* const _Src, const size_t _Count) noexcept {\r\n                if constexpr (sizeof(_Ty) == 1) {\r\n                    uint8_t _Buf[8];\r\n                    memcpy(_Buf, _Src, _Count);\r\n                    return _mm256_cvtepu8_epi32(_mm_loadu_si64(_Buf));\r\n                } else if constexpr (sizeof(_Ty) == 2) {\r\n                    uint8_t _Buf[16];\r\n                    memcpy(_Buf, _Src, _Count * 2);\r\n                    return _mm256_cvtepu16_epi32(_mm_loadu_si128(reinterpret_cast<const __m128i*>(_Buf)));\r\n                } else if constexpr (sizeof(_Ty) == 4) {\r\n                    return _mm256_maskload_epi32(reinterpret_cast<const int*>(_Src), _Avx2_tail_mask_32(_Count * 4));\r\n                } else if constexpr (sizeof(_Ty) == 8) {\r\n                    const __m256i _Mask_low  = _Avx2_tail_mask_32((_Count > 4 ? 4 : _Count) * 8);\r\n                    const __m256i _Low       = _mm256_maskload_epi32(reinterpret_cast<const int*>(_Src) + 0, _Mask_low);\r\n                    const __m256i _Mask_high = _Avx2_tail_mask_32((_Count > 4 ? _Count - 4 : 0) * 8);\r\n                    const __m256i _High = _mm256_maskload_epi32(reinterpret_cast<const int*>(_Src) + 8, _Mask_high);\r\n                    const __m256i _Pack = _mm256_packs_epi32(_Low, _High);\r\n                    return _mm256_permute4x64_epi64(_Pack, _MM_SHUFFLE(3, 1, 2, 0));\r\n                } else {\r\n                    static_assert(false, \"Unexpected size\");\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            __m256i _Mask_out_overflow(const __m256i _Mask, const __m256i _Data) noexcept {\r\n                if constexpr (sizeof(_Ty) == 1) {\r\n                    return _Mask;\r\n                } else {\r\n                    const __m256i _Data_high =\r\n                        _mm256_and_si256(_Data, _mm256_set1_epi32(static_cast<int>(0xFFFF'FF00)));\r\n                    const __m256i _Fit_mask = _mm256_cmpeq_epi32(_Data_high, _mm256_setzero_si256());\r\n                    return _mm256_and_si256(_Mask, _Fit_mask);\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            __forceinline __m256i _Make_bitmap_small(const _Ty* _Needle_ptr, const size_t _Needle_length) noexcept {\r\n                __m256i _Bitmap = _mm256_setzero_si256();\r\n\r\n                const _Ty* const _Stop = _Needle_ptr + _Needle_length;\r\n\r\n                const __m256i _High_bits_pattern =\r\n                    _mm256_set_epi32(7 << 5, 6 << 5, 5 << 5, 4 << 5, 3 << 5, 2 << 5, 1 << 5, 0 << 5);\r\n                const __m256i _Ones = _mm256_set1_epi32(1);\r\n\r\n                for (; _Needle_ptr != _Stop; ++_Needle_ptr) {\r\n                    const _Ty _Val = *_Needle_ptr;\r\n                    // Broadcast character value to eight 32-bit vector elements\r\n                    const __m128i _Count_low = _mm_cvtsi32_si128(static_cast<uint32_t>(_Val));\r\n                    const __m256i _Count_all = _mm256_broadcastd_epi32(_Count_low);\r\n                    // XOR with high bit patterns to make the right element below 32\r\n                    const __m256i _Count_one = _mm256_xor_si256(_High_bits_pattern, _Count_all);\r\n                    // The shift will produce zero for all ones, except the right one\r\n                    const __m256i _One_1 = _mm256_sllv_epi32(_Ones, _Count_one);\r\n                    _Bitmap              = _mm256_or_si256(_Bitmap, _One_1);\r\n                }\r\n\r\n                return _Bitmap;\r\n            }\r\n\r\n            template <class _Ty>\r\n            __forceinline __m256i _Make_bitmap_large(const _Ty* _Needle_ptr, const size_t _Needle_length) noexcept {\r\n                alignas(32) uint8_t _Table[256] = {};\r\n\r\n                const _Ty* const _Stop = _Needle_ptr + _Needle_length;\r\n\r\n                for (; _Needle_ptr != _Stop; ++_Needle_ptr) {\r\n                    _Table[*_Needle_ptr] = 0xFF;\r\n                }\r\n\r\n                const auto _Table_as_avx = reinterpret_cast<const __m256i*>(_Table);\r\n\r\n                return _mm256_setr_epi32( //\r\n                    _mm256_movemask_epi8(_mm256_load_si256(_Table_as_avx + 0)),\r\n                    _mm256_movemask_epi8(_mm256_load_si256(_Table_as_avx + 1)),\r\n                    _mm256_movemask_epi8(_mm256_load_si256(_Table_as_avx + 2)),\r\n                    _mm256_movemask_epi8(_mm256_load_si256(_Table_as_avx + 3)),\r\n                    _mm256_movemask_epi8(_mm256_load_si256(_Table_as_avx + 4)),\r\n                    _mm256_movemask_epi8(_mm256_load_si256(_Table_as_avx + 5)),\r\n                    _mm256_movemask_epi8(_mm256_load_si256(_Table_as_avx + 6)),\r\n                    _mm256_movemask_epi8(_mm256_load_si256(_Table_as_avx + 7)));\r\n            }\r\n\r\n            template <class _Ty>\r\n            __forceinline __m256i _Make_bitmap(const _Ty* const _Needle_ptr, const size_t _Needle_length) noexcept {\r\n                if (_Needle_length <= 20) {\r\n                    return _Make_bitmap_small(_Needle_ptr, _Needle_length);\r\n                } else {\r\n                    return _Make_bitmap_large(_Needle_ptr, _Needle_length);\r\n                }\r\n            }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n        } // namespace _Bitmap_details\r\n\r\n        namespace _Bitmap_impl {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            template <class _Ty>\r\n            bool _Use_bitmap_scalar(const size_t _Count1, const size_t _Count2) noexcept {\r\n                // Neon shuffle implementation is scalar for haystack < 16B.\r\n                if (_Count1 * sizeof(_Ty) < 16) {\r\n                    return true;\r\n                }\r\n\r\n                if constexpr (sizeof(_Ty) == 1) {\r\n                    return _Count2 >= 16;\r\n                } else if constexpr (sizeof(_Ty) == 2) {\r\n                    if (_Count2 < 8) {\r\n                        return false;\r\n                    } else if (_Count2 < 16) {\r\n                        return _Count1 >= 64;\r\n                    } else {\r\n                        return true;\r\n                    }\r\n                } else if constexpr (sizeof(_Ty) == 4) {\r\n                    if (_Count2 < 4) {\r\n                        return false;\r\n                    } else if (_Count2 < 8) {\r\n                        return _Count1 >= 24;\r\n                    } else {\r\n                        return true;\r\n                    }\r\n                } else {\r\n                    return _Count2 >= 2;\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            bool _Use_bitmap_neon(const size_t _Count1, const size_t _Count2) noexcept {\r\n                if constexpr (sizeof(_Ty) == 1) {\r\n                    if (_Count1 < 32) {\r\n                        return false;\r\n                    } else if (_Count1 < 64) {\r\n                        return _Count2 >= 24;\r\n                    } else if (_Count1 < 128) {\r\n                        return _Count2 >= 8;\r\n                    } else {\r\n                        return _Count2 >= 4;\r\n                    }\r\n                } else if constexpr (sizeof(_Ty) == 2) {\r\n                    if (_Count1 < 32) {\r\n                        return false;\r\n                    } else if (_Count1 < 96) {\r\n                        return _Count2 >= 8;\r\n                    } else {\r\n                        return _Count2 >= 4;\r\n                    }\r\n                } else if constexpr (sizeof(_Ty) == 4) {\r\n                    if (_Count1 < 32) {\r\n                        return false;\r\n                    } else if (_Count1 < 64) {\r\n                        return _Count2 >= 64;\r\n                    } else if (_Count1 < 96) {\r\n                        return _Count2 >= 8;\r\n                    } else {\r\n                        return _Count2 >= 4;\r\n                    }\r\n                } else {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            template <class _Ty, _Predicate _Pred>\r\n            size_t _Impl_first_neon(\r\n                const void* const _Haystack, const size_t _Haystack_length, const uint8x16x2_t _Bitmap) noexcept {\r\n                const auto _Hay_ptr = static_cast<const _Ty*>(_Haystack);\r\n\r\n                size_t _Ix            = 0;\r\n                const size_t _Vec_end = _Haystack_length & ~size_t{15};\r\n                for (; _Ix != _Vec_end; _Ix += 16) {\r\n                    const auto _Eq = _Bitmap_details::_Do_bitmap(_Hay_ptr + _Ix, _Bitmap);\r\n\r\n                    auto _Mask = _Finding::_Find_traits_1::_Mask_q(_Eq);\r\n                    if constexpr (_Pred == _Predicate::_None_of) {\r\n                        _Mask ^= 0xFFFF'FFFF'FFFF'FFFF;\r\n                    }\r\n\r\n                    if (_Mask != 0) {\r\n                        return _Ix + _Finding::_Get_first_h_pos_q(_Mask);\r\n                    }\r\n                }\r\n\r\n                if (_Ix != _Haystack_length) {\r\n                    alignas(16) uint8_t _Bitmap_scalar_tail[32];\r\n                    vst1q_u8(_Bitmap_scalar_tail, _Bitmap.val[0]);\r\n                    vst1q_u8(_Bitmap_scalar_tail + 16, _Bitmap.val[1]);\r\n\r\n                    do {\r\n                        const _Ty _Val = _Hay_ptr[_Ix];\r\n\r\n                        if constexpr (sizeof(_Val) > 1) {\r\n                            if (_Val >= 256) {\r\n                                if constexpr (_Pred == _Predicate::_Any_of) {\r\n                                    continue;\r\n                                } else {\r\n                                    return _Ix;\r\n                                }\r\n                            }\r\n                        }\r\n\r\n                        const auto _Val_u8 = static_cast<uint8_t>(_Val);\r\n                        const uint8_t _Hi  = static_cast<uint8_t>(_Val_u8 >> 3);\r\n                        const uint8_t _Lo  = static_cast<uint8_t>(_Val_u8 & 0x7);\r\n                        const bool _Hit    = ((_Bitmap_scalar_tail[_Hi] >> _Lo) & 0x1) != 0;\r\n\r\n                        if constexpr (_Pred == _Predicate::_Any_of) {\r\n                            if (_Hit) {\r\n                                return _Ix;\r\n                            }\r\n                        } else {\r\n                            if (!_Hit) {\r\n                                return _Ix;\r\n                            }\r\n                        }\r\n\r\n                        ++_Ix;\r\n                    } while (_Ix != _Haystack_length);\r\n                }\r\n\r\n                return static_cast<size_t>(-1);\r\n            }\r\n\r\n            template <class _Ty, _Predicate _Pred>\r\n            size_t _Impl_last_neon(\r\n                const void* const _Haystack, const size_t _Haystack_length, const uint8x16x2_t _Bitmap) noexcept {\r\n                const auto _Hay_ptr = static_cast<const _Ty*>(_Haystack);\r\n\r\n                size_t _Ix = _Haystack_length;\r\n                while (_Ix >= 16) {\r\n                    _Ix -= 16;\r\n                    const auto _Eq = _Bitmap_details::_Do_bitmap(_Hay_ptr + _Ix, _Bitmap);\r\n\r\n                    auto _Mask = _Finding::_Find_traits_1::_Mask_q(_Eq);\r\n                    if constexpr (_Pred == _Predicate::_None_of) {\r\n                        _Mask ^= 0xFFFF'FFFF'FFFF'FFFF;\r\n                    }\r\n\r\n                    if (_Mask != 0) {\r\n                        return _Ix + _Finding::_Get_last_h_pos_q(_Mask);\r\n                    }\r\n                }\r\n\r\n                if (_Ix != 0) {\r\n                    alignas(16) uint8_t _Bitmap_scalar_tail[32];\r\n                    vst1q_u8(_Bitmap_scalar_tail, _Bitmap.val[0]);\r\n                    vst1q_u8(_Bitmap_scalar_tail + 16, _Bitmap.val[1]);\r\n\r\n                    do {\r\n                        --_Ix;\r\n                        const _Ty _Val = _Hay_ptr[_Ix];\r\n\r\n                        if constexpr (sizeof(_Val) > 1) {\r\n                            if (_Val >= 256) {\r\n                                if constexpr (_Pred == _Predicate::_Any_of) {\r\n                                    continue;\r\n                                } else {\r\n                                    return _Ix;\r\n                                }\r\n                            }\r\n                        }\r\n\r\n                        const auto _Val_u8 = static_cast<uint8_t>(_Val);\r\n                        const uint8_t _Hi  = static_cast<uint8_t>(_Val_u8 >> 3);\r\n                        const uint8_t _Lo  = static_cast<uint8_t>(_Val_u8 & 0x7);\r\n                        const bool _Hit    = ((_Bitmap_scalar_tail[_Hi] >> _Lo) & 0x1) != 0;\r\n\r\n                        if constexpr (_Pred == _Predicate::_Any_of) {\r\n                            if (_Hit) {\r\n                                return _Ix;\r\n                            }\r\n                        } else {\r\n                            if (!_Hit) {\r\n                                return _Ix;\r\n                            }\r\n                        }\r\n                    } while (_Ix != 0);\r\n                }\r\n\r\n                return static_cast<size_t>(-1);\r\n            }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            template <class _Ty>\r\n            bool _Use_bitmap_avx(const size_t _Count1, const size_t _Count2) noexcept {\r\n                if constexpr (sizeof(_Ty) == 1) {\r\n                    if (_Count2 <= 16) {\r\n                        return _Count1 > 1000;\r\n                    } else if (_Count2 <= 48) {\r\n                        return _Count1 > 80;\r\n                    } else if (_Count2 <= 240) {\r\n                        return _Count1 > 40;\r\n                    } else if (_Count2 <= 1000) {\r\n                        return _Count1 > 32;\r\n                    } else {\r\n                        return _Count1 > 16;\r\n                    }\r\n                } else if constexpr (sizeof(_Ty) == 2) {\r\n                    if (_Count2 <= 8) {\r\n                        return _Count1 > 128;\r\n                    } else if (_Count2 <= 48) {\r\n                        return _Count1 > 32;\r\n                    } else if (_Count2 <= 72) {\r\n                        return _Count1 > 24;\r\n                    } else if (_Count2 <= 144) {\r\n                        return _Count1 > 16;\r\n                    } else {\r\n                        return _Count1 > 8;\r\n                    }\r\n                } else if constexpr (sizeof(_Ty) == 4) {\r\n                    if (_Count2 <= 8) {\r\n                        return _Count1 > 64;\r\n                    } else if (_Count2 <= 24) {\r\n                        return _Count1 > 40;\r\n                    } else if (_Count2 <= 44) {\r\n                        return _Count1 > 24;\r\n                    } else if (_Count2 <= 112) {\r\n                        return _Count1 > 16;\r\n                    } else {\r\n                        return _Count1 > 8;\r\n                    }\r\n                } else if constexpr (sizeof(_Ty) == 8) {\r\n                    if (_Count2 <= 8) {\r\n                        return _Count1 > 40;\r\n                    } else if (_Count2 <= 12) {\r\n                        return _Count1 > 20;\r\n                    } else if (_Count2 <= 48) {\r\n                        return _Count1 > 16;\r\n                    } else if (_Count2 <= 64) {\r\n                        return _Count1 > 12;\r\n                    } else if (_Count2 <= 192) {\r\n                        return _Count1 > 8;\r\n                    } else {\r\n                        return _Count1 > 4;\r\n                    }\r\n                } else {\r\n                    static_assert(false, \"unexpected size\");\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            bool _Use_bitmap_scalar(const size_t _Count1, const size_t _Count2) noexcept {\r\n                if constexpr (sizeof(_Ty) == 1) {\r\n                    if (_Count2 <= 32) {\r\n                        return false;\r\n                    } else if (_Count2 <= 48) {\r\n                        return _Count1 > 416;\r\n                    } else if (_Count2 <= 64) {\r\n                        return _Count1 > 224;\r\n                    } else if (_Count2 <= 80) {\r\n                        return _Count1 > 128;\r\n                    } else if (_Count2 <= 540) {\r\n                        return _Count1 > 48;\r\n                    } else {\r\n                        return _Count1 > 32;\r\n                    }\r\n                } else if constexpr (sizeof(_Ty) == 2) {\r\n                    if (_Count2 <= 8) {\r\n                        return false;\r\n                    } else if (_Count2 <= 80) {\r\n                        return _Count1 > 16;\r\n                    } else {\r\n                        return _Count1 > 8;\r\n                    }\r\n                } else if constexpr (sizeof(_Ty) == 4) {\r\n                    if (_Count2 <= 32) {\r\n                        return false;\r\n                    } else if (_Count2 <= 112) {\r\n                        return _Count1 > 16;\r\n                    } else {\r\n                        return _Count1 > 8;\r\n                    }\r\n                } else if constexpr (sizeof(_Ty) == 8) {\r\n                    if (_Count2 <= 16) {\r\n                        return false;\r\n                    } else if (_Count2 <= 32) {\r\n                        return _Count1 > 16;\r\n                    } else if (_Count2 <= 112) {\r\n                        return _Count1 > 8;\r\n                    } else {\r\n                        return _Count1 > 4;\r\n                    }\r\n                } else {\r\n                    static_assert(false, \"unexpected size\");\r\n                }\r\n            }\r\n\r\n            // The bitmap takes time to setup (especially AVX2), but it's linear and fast (especially AVX2, again), so:\r\n            //  - with a small amount of total iterations, the vectorized quadratic algorithm wins over bitmaps\r\n            //  - with a small haystack, among bitmaps the scalar bitmap is preferred, even if AVX2 is available\r\n\r\n            enum class _Strategy { _No_bitmap, _Scalar_bitmap, _Vector_bitmap };\r\n\r\n            template <class _Ty>\r\n            _Strategy _Pick_strategy(const size_t _Count1, const size_t _Count2, const bool _Use_avx2_) noexcept {\r\n                if (_Use_avx2_ && _Count1 > 48) {\r\n                    return _Use_bitmap_avx<_Ty>(_Count1, _Count2) ? _Strategy::_Vector_bitmap : _Strategy::_No_bitmap;\r\n                } else {\r\n                    return _Use_bitmap_scalar<_Ty>(_Count1, _Count2) ? _Strategy::_Scalar_bitmap\r\n                                                                     : _Strategy::_No_bitmap;\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            bool _Can_fit_256_bits_sse(const _Ty* _Needle_ptr, const size_t _Needle_length) noexcept {\r\n                if constexpr (sizeof(_Ty) == 1) {\r\n                    return true;\r\n                } else {\r\n                    __m128i _Mask = _mm_undefined_si128();\r\n                    if constexpr (sizeof(_Ty) == 2) {\r\n                        _Mask = _mm_set1_epi16(static_cast<short>(0xFF00));\r\n                    } else if constexpr (sizeof(_Ty) == 4) {\r\n                        _Mask = _mm_set1_epi32(static_cast<int>(0xFFFF'FF00));\r\n                    } else if constexpr (sizeof(_Ty) == 8) {\r\n                        _Mask = _mm_set1_epi64x(static_cast<long long>(0xFFFF'FFFF'FFFF'FF00));\r\n                    } else {\r\n                        static_assert(false, \"Unexpected size\");\r\n                    }\r\n\r\n                    const size_t _Byte_size = _Needle_length * sizeof(_Ty);\r\n\r\n                    constexpr size_t _Vec_size = sizeof(_Mask);\r\n                    constexpr size_t _Vec_mask = _Vec_size - 1;\r\n                    static_assert((_Vec_size & _Vec_mask) == 0);\r\n\r\n                    const void* _Stop = _Needle_ptr;\r\n                    _Advance_bytes(_Stop, _Byte_size & ~_Vec_mask);\r\n                    for (; _Needle_ptr != _Stop; _Needle_ptr += _Vec_size / sizeof(_Ty)) {\r\n                        const __m128i _Data = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Needle_ptr));\r\n                        if (!_mm_testz_si128(_Mask, _Data)) {\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n                    _Advance_bytes(_Stop, _Byte_size & _Vec_mask);\r\n                    for (; _Needle_ptr != _Stop; ++_Needle_ptr) {\r\n                        if ((*_Needle_ptr & ~_Ty{0xFF}) != 0) {\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            template <class _Ty, _Predicate _Pred>\r\n            size_t _Impl_first_avx(const void* const _Haystack, const size_t _Haystack_length,\r\n                const void* const _Needle, const size_t _Needle_length) noexcept {\r\n                _Zeroupper_on_exit _Guard; // TRANSITION, DevCom-10331414\r\n\r\n                const auto _Haystack_ptr = static_cast<const _Ty*>(_Haystack);\r\n                const auto _Needle_ptr   = static_cast<const _Ty*>(_Needle);\r\n\r\n                const __m256i _Bitmap = _Bitmap_details::_Make_bitmap(_Needle_ptr, _Needle_length);\r\n\r\n                const size_t _Haystack_length_vec = _Haystack_length & ~size_t{7};\r\n                for (size_t _Ix = 0; _Ix != _Haystack_length_vec; _Ix += 8) {\r\n                    const __m256i _Data      = _Bitmap_details::_Load_avx_256_8(_Haystack_ptr + _Ix);\r\n                    const __m256i _Mask_part = _Bitmap_details::_Bitmap_step(_Bitmap, _Data);\r\n                    const __m256i _Mask_full = _Bitmap_details::_Mask_out_overflow<_Ty>(_Mask_part, _Data);\r\n                    unsigned int _Bingo      = _mm256_movemask_ps(_mm256_castsi256_ps(_Mask_full));\r\n\r\n                    if constexpr (_Pred == _Predicate::_None_of) {\r\n                        _Bingo ^= 0xFF;\r\n                    }\r\n\r\n                    if (_Bingo != 0) {\r\n                        return _Ix + _tzcnt_u32(_Bingo);\r\n                    }\r\n                }\r\n\r\n                const size_t _Haystack_length_tail = _Haystack_length & 7;\r\n                if (_Haystack_length_tail != 0) {\r\n                    const unsigned int _Tail_bingo_mask = (1 << _Haystack_length_tail) - 1;\r\n                    const auto _Last_ptr                = _Haystack_ptr + _Haystack_length_vec;\r\n                    const __m256i _Data      = _Bitmap_details::_Load_avx_256_8_last(_Last_ptr, _Haystack_length_tail);\r\n                    const __m256i _Mask_part = _Bitmap_details::_Bitmap_step(_Bitmap, _Data);\r\n                    const __m256i _Mask_full = _Bitmap_details::_Mask_out_overflow<_Ty>(_Mask_part, _Data);\r\n                    unsigned int _Bingo      = _mm256_movemask_ps(_mm256_castsi256_ps(_Mask_full)) & _Tail_bingo_mask;\r\n\r\n                    if constexpr (_Pred == _Predicate::_None_of) {\r\n                        _Bingo ^= _Tail_bingo_mask;\r\n                    }\r\n\r\n                    if (_Bingo != 0) {\r\n                        return _Haystack_length_vec + _tzcnt_u32(_Bingo);\r\n                    }\r\n                }\r\n\r\n                return static_cast<size_t>(-1);\r\n            }\r\n\r\n            template <class _Ty, _Predicate _Pred>\r\n            size_t _Impl_last_avx(const void* const _Haystack, size_t _Haystack_length, const void* const _Needle,\r\n                const size_t _Needle_length) noexcept {\r\n                _Zeroupper_on_exit _Guard; // TRANSITION, DevCom-10331414\r\n\r\n                const auto _Haystack_ptr = static_cast<const _Ty*>(_Haystack);\r\n                const auto _Needle_ptr   = static_cast<const _Ty*>(_Needle);\r\n\r\n                const __m256i _Bitmap = _Bitmap_details::_Make_bitmap(_Needle_ptr, _Needle_length);\r\n\r\n                while (_Haystack_length >= 8) {\r\n                    _Haystack_length -= 8;\r\n                    const __m256i _Data      = _Bitmap_details::_Load_avx_256_8(_Haystack_ptr + _Haystack_length);\r\n                    const __m256i _Mask_part = _Bitmap_details::_Bitmap_step(_Bitmap, _Data);\r\n                    const __m256i _Mask_full = _Bitmap_details::_Mask_out_overflow<_Ty>(_Mask_part, _Data);\r\n                    unsigned int _Bingo      = _mm256_movemask_ps(_mm256_castsi256_ps(_Mask_full));\r\n\r\n                    if constexpr (_Pred == _Predicate::_None_of) {\r\n                        _Bingo ^= 0xFF;\r\n                    }\r\n\r\n                    if (_Bingo != 0) {\r\n                        return _Haystack_length + 31 - _lzcnt_u32(_Bingo);\r\n                    }\r\n                }\r\n\r\n                const size_t _Haystack_length_tail = _Haystack_length & 7;\r\n                if (_Haystack_length_tail != 0) {\r\n                    const unsigned int _Tail_bingo_mask = (1 << _Haystack_length_tail) - 1;\r\n                    const __m256i _Data = _Bitmap_details::_Load_avx_256_8_last(_Haystack_ptr, _Haystack_length_tail);\r\n                    const __m256i _Mask_part = _Bitmap_details::_Bitmap_step(_Bitmap, _Data);\r\n                    const __m256i _Mask_full = _Bitmap_details::_Mask_out_overflow<_Ty>(_Mask_part, _Data);\r\n                    unsigned int _Bingo      = _mm256_movemask_ps(_mm256_castsi256_ps(_Mask_full)) & _Tail_bingo_mask;\r\n\r\n                    if constexpr (_Pred == _Predicate::_None_of) {\r\n                        _Bingo ^= _Tail_bingo_mask;\r\n                    }\r\n\r\n                    if (_Bingo != 0) {\r\n                        return 31 - _lzcnt_u32(_Bingo);\r\n                    }\r\n                }\r\n\r\n                return static_cast<size_t>(-1);\r\n            }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n            // Scalar bitmap: bools, not really compressed to bits, for faster building and faster access.\r\n            // For sizes above integers but fitting within cache, this approach wins.\r\n            using _Scalar_table_t = bool[256];\r\n\r\n            template <class _Ty>\r\n            [[nodiscard]] bool _Build_scalar_table(\r\n                const void* const _Needle, const size_t _Needle_length, _Scalar_table_t& _Table) noexcept {\r\n                auto _Ptr       = static_cast<const _Ty*>(_Needle);\r\n                const auto _End = _Ptr + _Needle_length;\r\n\r\n                for (; _Ptr != _End; ++_Ptr) {\r\n                    const _Ty _Val = *_Ptr;\r\n\r\n                    if constexpr (sizeof(_Val) > 1) {\r\n                        if (_Val >= 256) {\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n                    _Table[_Val] = true;\r\n                }\r\n\r\n                return true;\r\n            }\r\n\r\n#if !defined(_M_ARM64) && !defined(_M_ARM64EC)\r\n            template <class _Ty>\r\n            void _Build_scalar_table_no_check(\r\n                const void* const _Needle, const size_t _Needle_length, _Scalar_table_t& _Table) noexcept {\r\n                auto _Ptr       = static_cast<const _Ty*>(_Needle);\r\n                const auto _End = _Ptr + _Needle_length;\r\n\r\n                for (; _Ptr != _End; ++_Ptr) {\r\n                    _Table[*_Ptr] = true;\r\n                }\r\n            }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n            template <class _Ty, _Predicate _Pred>\r\n            size_t _Impl_first_scalar(\r\n                const void* const _Haystack, const size_t _Haystack_length, const _Scalar_table_t& _Table) noexcept {\r\n                const auto _Haystack_ptr = static_cast<const _Ty*>(_Haystack);\r\n\r\n                for (size_t _Ix = 0; _Ix != _Haystack_length; ++_Ix) {\r\n                    const _Ty _Val = _Haystack_ptr[_Ix];\r\n\r\n                    if constexpr (sizeof(_Val) > 1) {\r\n                        if (_Val >= 256) {\r\n                            if constexpr (_Pred == _Predicate::_Any_of) {\r\n                                continue;\r\n                            } else {\r\n                                return _Ix;\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    if constexpr (_Pred == _Predicate::_Any_of) {\r\n                        if (_Table[_Val]) {\r\n                            return _Ix;\r\n                        }\r\n                    } else {\r\n                        if (!_Table[_Val]) {\r\n                            return _Ix;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                return static_cast<size_t>(-1);\r\n            }\r\n\r\n            template <class _Ty, _Predicate _Pred>\r\n            size_t _Impl_last_scalar(\r\n                const void* const _Haystack, size_t _Haystack_length, const _Scalar_table_t& _Table) noexcept {\r\n                const auto _Haystack_ptr = static_cast<const _Ty*>(_Haystack);\r\n\r\n                while (_Haystack_length != 0) {\r\n                    --_Haystack_length;\r\n\r\n                    const _Ty _Val = _Haystack_ptr[_Haystack_length];\r\n\r\n                    if constexpr (sizeof(_Val) > 1) {\r\n                        if (_Val >= 256) {\r\n                            if constexpr (_Pred == _Predicate::_Any_of) {\r\n                                continue;\r\n                            } else {\r\n                                return _Haystack_length;\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    if constexpr (_Pred == _Predicate::_Any_of) {\r\n                        if (_Table[_Val]) {\r\n                            return _Haystack_length;\r\n                        }\r\n                    } else {\r\n                        if (!_Table[_Val]) {\r\n                            return _Haystack_length;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                return static_cast<size_t>(-1);\r\n            }\r\n        } // namespace _Bitmap_impl\r\n\r\n        namespace _First_of {\r\n            template <class _Ty, _Predicate _Pred>\r\n            const void* _Fallback(const void* _First1, const void* const _Last1, const void* const _First2,\r\n                const void* const _Last2) noexcept {\r\n                auto _Ptr_haystack           = static_cast<const _Ty*>(_First1);\r\n                const auto _Ptr_haystack_end = static_cast<const _Ty*>(_Last1);\r\n                const auto _Ptr_needle       = static_cast<const _Ty*>(_First2);\r\n                const auto _Ptr_needle_end   = static_cast<const _Ty*>(_Last2);\r\n\r\n                for (; _Ptr_haystack != _Ptr_haystack_end; ++_Ptr_haystack) {\r\n                    if constexpr (_Pred == _Predicate::_Any_of) {\r\n                        for (auto _Ptr = _Ptr_needle; _Ptr != _Ptr_needle_end; ++_Ptr) {\r\n                            if (*_Ptr_haystack == *_Ptr) {\r\n                                return _Ptr_haystack;\r\n                            }\r\n                        }\r\n                    } else {\r\n                        bool _Match = false;\r\n                        for (auto _Ptr = _Ptr_needle; _Ptr != _Ptr_needle_end; ++_Ptr) {\r\n                            if (*_Ptr_haystack == *_Ptr) {\r\n                                _Match = true;\r\n                                break;\r\n                            }\r\n                        }\r\n\r\n                        if (!_Match) {\r\n                            return _Ptr_haystack;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                return _Ptr_haystack;\r\n            }\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            template <class _Ty>\r\n            struct _Find_first_of_traits;\r\n\r\n            template <>\r\n            struct _Find_first_of_traits<uint8_t> : _Finding::_Find_traits_1 {\r\n                using _Vec_t = uint8x16_t;\r\n\r\n                static _Vec_t _Or(const _Vec_t _Lhs, const _Vec_t _Rhs) noexcept {\r\n                    return vorrq_u8(_Lhs, _Rhs);\r\n                }\r\n\r\n                static _Vec_t _And(const _Vec_t _Lhs, const _Vec_t _Rhs) noexcept {\r\n                    return vandq_u8(_Lhs, _Rhs);\r\n                }\r\n\r\n                template <size_t _Nx>\r\n                static _Vec_t _Ext(const _Vec_t _Val) noexcept {\r\n                    return vextq_u8(_Val, _Val, _Nx);\r\n                }\r\n            };\r\n\r\n            template <>\r\n            struct _Find_first_of_traits<uint16_t> : _Finding::_Find_traits_2 {\r\n                using _Vec_t = uint16x8_t;\r\n\r\n                static _Vec_t _Or(const _Vec_t _Lhs, const _Vec_t _Rhs) noexcept {\r\n                    return vorrq_u16(_Lhs, _Rhs);\r\n                }\r\n\r\n                static _Vec_t _And(const _Vec_t _Lhs, const _Vec_t _Rhs) noexcept {\r\n                    return vandq_u16(_Lhs, _Rhs);\r\n                }\r\n\r\n                template <size_t _Nx>\r\n                static _Vec_t _Ext(const _Vec_t _Val) noexcept {\r\n                    return vextq_u16(_Val, _Val, _Nx);\r\n                }\r\n            };\r\n\r\n            template <>\r\n            struct _Find_first_of_traits<uint32_t> : _Finding::_Find_traits_4 {\r\n                using _Vec_t = uint32x4_t;\r\n\r\n                static _Vec_t _Or(const _Vec_t _Lhs, const _Vec_t _Rhs) noexcept {\r\n                    return vorrq_u32(_Lhs, _Rhs);\r\n                }\r\n\r\n                static _Vec_t _And(const _Vec_t _Lhs, const _Vec_t _Rhs) noexcept {\r\n                    return vandq_u32(_Lhs, _Rhs);\r\n                }\r\n\r\n                template <size_t _Nx>\r\n                static _Vec_t _Ext(const _Vec_t _Val) noexcept {\r\n                    return vextq_u32(_Val, _Val, _Nx);\r\n                }\r\n            };\r\n\r\n            template <>\r\n            struct _Find_first_of_traits<uint64_t> : _Finding::_Find_traits_8 {\r\n                using _Vec_t = uint64x2_t;\r\n\r\n                static _Vec_t _Or(const _Vec_t _Lhs, const _Vec_t _Rhs) noexcept {\r\n                    return vorrq_u64(_Lhs, _Rhs);\r\n                }\r\n\r\n                static _Vec_t _And(const _Vec_t _Lhs, const _Vec_t _Rhs) noexcept {\r\n                    return vandq_u64(_Lhs, _Rhs);\r\n                }\r\n\r\n                template <size_t _Nx>\r\n                static _Vec_t _Ext(const _Vec_t _Val) noexcept {\r\n                    return vextq_u64(_Val, _Val, _Nx);\r\n                }\r\n            };\r\n\r\n            template <class _Ty>\r\n            using _Find_first_of_vec_t = _Find_first_of_traits<_Ty>::_Vec_t;\r\n\r\n            template <class _Traits, size_t _Needle_length_el_magnitude, class _Ty>\r\n            _Find_first_of_vec_t<_Ty> _Shuffle_step(\r\n                const _Find_first_of_vec_t<_Ty> _Data1, const _Find_first_of_vec_t<_Ty> _Data2s0) noexcept {\r\n                _Find_first_of_vec_t<_Ty> _Eq{};\r\n                if constexpr (_Needle_length_el_magnitude >= 1) {\r\n                    _Eq = _Traits::_Cmp_neon_q(_Data1, _Data2s0);\r\n                    if constexpr (_Needle_length_el_magnitude >= 2) {\r\n                        const auto _Data2s1 = _Traits::template _Ext<1>(_Data2s0);\r\n                        _Eq                 = _Traits::_Or(_Eq, _Traits::_Cmp_neon_q(_Data1, _Data2s1));\r\n                        if constexpr (sizeof(_Ty) != 8 && _Needle_length_el_magnitude >= 4) {\r\n                            const auto _Data2s2 = _Traits::template _Ext<2>(_Data2s0);\r\n                            _Eq                 = _Traits::_Or(_Eq, _Traits::_Cmp_neon_q(_Data1, _Data2s2));\r\n                            const auto _Data2s3 = _Traits::template _Ext<3>(_Data2s0);\r\n                            _Eq                 = _Traits::_Or(_Eq, _Traits::_Cmp_neon_q(_Data1, _Data2s3));\r\n                            if constexpr (_Needle_length_el_magnitude >= 8) {\r\n                                const auto _Data2s4 = _Traits::template _Ext<4>(_Data2s0);\r\n                                _Eq                 = _Traits::_Or(_Eq, _Traits::_Cmp_neon_q(_Data1, _Data2s4));\r\n                                const auto _Data2s5 = _Traits::template _Ext<5>(_Data2s0);\r\n                                _Eq                 = _Traits::_Or(_Eq, _Traits::_Cmp_neon_q(_Data1, _Data2s5));\r\n                                const auto _Data2s6 = _Traits::template _Ext<6>(_Data2s0);\r\n                                _Eq                 = _Traits::_Or(_Eq, _Traits::_Cmp_neon_q(_Data1, _Data2s6));\r\n                                const auto _Data2s7 = _Traits::template _Ext<7>(_Data2s0);\r\n                                _Eq                 = _Traits::_Or(_Eq, _Traits::_Cmp_neon_q(_Data1, _Data2s7));\r\n                                if constexpr (_Needle_length_el_magnitude >= 16) {\r\n                                    const auto _Data2s8  = _Traits::template _Ext<8>(_Data2s0);\r\n                                    _Eq                  = _Traits::_Or(_Eq, _Traits::_Cmp_neon_q(_Data1, _Data2s8));\r\n                                    const auto _Data2s9  = _Traits::template _Ext<9>(_Data2s0);\r\n                                    _Eq                  = _Traits::_Or(_Eq, _Traits::_Cmp_neon_q(_Data1, _Data2s9));\r\n                                    const auto _Data2s10 = _Traits::template _Ext<10>(_Data2s0);\r\n                                    _Eq                  = _Traits::_Or(_Eq, _Traits::_Cmp_neon_q(_Data1, _Data2s10));\r\n                                    const auto _Data2s11 = _Traits::template _Ext<11>(_Data2s0);\r\n                                    _Eq                  = _Traits::_Or(_Eq, _Traits::_Cmp_neon_q(_Data1, _Data2s11));\r\n                                    const auto _Data2s12 = _Traits::template _Ext<12>(_Data2s0);\r\n                                    _Eq                  = _Traits::_Or(_Eq, _Traits::_Cmp_neon_q(_Data1, _Data2s12));\r\n                                    const auto _Data2s13 = _Traits::template _Ext<13>(_Data2s0);\r\n                                    _Eq                  = _Traits::_Or(_Eq, _Traits::_Cmp_neon_q(_Data1, _Data2s13));\r\n                                    const auto _Data2s14 = _Traits::template _Ext<14>(_Data2s0);\r\n                                    _Eq                  = _Traits::_Or(_Eq, _Traits::_Cmp_neon_q(_Data1, _Data2s14));\r\n                                    const auto _Data2s15 = _Traits::template _Ext<15>(_Data2s0);\r\n                                    _Eq                  = _Traits::_Or(_Eq, _Traits::_Cmp_neon_q(_Data1, _Data2s15));\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                return _Eq;\r\n            }\r\n\r\n            template <class _Ty, _Predicate _Pred, size_t _Unrolled_tail_elems>\r\n            const void* _Shuffle_impl(const void* _First1, const void* const _Last1, const void* const _First2,\r\n                const void* const _Last2) noexcept {\r\n                using _Traits = _Find_first_of_traits<_Ty>;\r\n\r\n                constexpr size_t _Length_el = 16 / sizeof(_Ty);\r\n\r\n                const void* _Stop1            = _First1;\r\n                const size_t _Haystack_length = _Byte_length(_First1, _Last1);\r\n                const size_t _Vec_bytes       = _Haystack_length & ~size_t{0xF};\r\n                _Advance_bytes(_Stop1, _Vec_bytes);\r\n\r\n                if (_First1 != _Stop1) {\r\n                    const size_t _Needle_length = _Byte_length(_First2, _Last2);\r\n                    const void* _Stop2          = _First2;\r\n                    _Advance_bytes(_Stop2, _Needle_length & ~size_t{0xF});\r\n\r\n                    // Set _Lanes to 1 when we have 0 tail elements,\r\n                    // to stop the compiler from complaining about an empty array.\r\n                    constexpr size_t _Lanes = _Unrolled_tail_elems == 0 ? 1 : _Unrolled_tail_elems;\r\n                    _Find_first_of_vec_t<_Ty> _Needle_tail[_Lanes];\r\n\r\n                    if constexpr (_Unrolled_tail_elems > 0) {\r\n                        for (size_t _Lane = 0; _Lane < _Unrolled_tail_elems; ++_Lane) {\r\n                            _Needle_tail[_Lane] = _Traits::_Set_neon_q(*(static_cast<const _Ty*>(_Stop2) + _Lane));\r\n                        }\r\n                    }\r\n\r\n                    do {\r\n                        const auto _Data1 = _Traits::_Load_q(_First1);\r\n\r\n                        auto _Eq = _Traits::_Set_neon_q(0);\r\n\r\n                        const void* _Ptr2 = _First2;\r\n                        for (; _Ptr2 != _Stop2; _Advance_bytes(_Ptr2, 16)) {\r\n                            const auto _Data2s0 = _Traits::_Load_q(_Ptr2);\r\n                            _Eq = _Traits::_Or(_Eq, _Shuffle_step<_Traits, _Length_el, _Ty>(_Data1, _Data2s0));\r\n                        }\r\n\r\n                        if constexpr (_Unrolled_tail_elems > 0) {\r\n                            // Unrolled tail.\r\n                            for (size_t _Lane = 0; _Lane < _Unrolled_tail_elems; ++_Lane) {\r\n                                const auto _Cmp = _Traits::_Cmp_neon_q(_Data1, _Needle_tail[_Lane]);\r\n                                _Eq             = _Traits::_Or(_Eq, _Cmp);\r\n                            }\r\n                        }\r\n\r\n                        // We unroll by a maximum of 4 (for 2-byte and 1-byte element types), so we need a non-unrolled\r\n                        // tail loop.\r\n                        if constexpr (_Unrolled_tail_elems == 4) {\r\n                            _Advance_bytes(_Ptr2, sizeof(_Ty) * _Unrolled_tail_elems);\r\n\r\n                            for (; _Ptr2 != _Last2; _Advance_bytes(_Ptr2, sizeof(_Ty))) {\r\n                                const auto _Needle = _Traits::_Set_neon_q(*(static_cast<const _Ty*>(_Ptr2)));\r\n                                const auto _Cmp    = _Traits::_Cmp_neon_q(_Data1, _Needle);\r\n                                _Eq                = _Traits::_Or(_Eq, _Cmp);\r\n                            }\r\n                        }\r\n\r\n                        uint64_t _Match = _Traits::_Mask_q(_Eq);\r\n                        if constexpr (_Pred == _Predicate::_None_of) {\r\n                            _Match ^= 0xFFFF'FFFF'FFFF'FFFF;\r\n                        }\r\n\r\n                        if (_Match != 0) {\r\n                            const unsigned long _Offset = _Finding::_Get_first_h_pos_q(_Match);\r\n                            _Advance_bytes(_First1, _Offset);\r\n                            return _First1;\r\n                        }\r\n\r\n                        _Advance_bytes(_First1, 16);\r\n                    } while (_First1 != _Stop1);\r\n                }\r\n\r\n                return _Fallback<_Ty, _Pred>(_First1, _Last1, _First2, _Last2);\r\n            }\r\n\r\n            const void* _Fallback_find_not_2(const void* const _First1, const void* const _Last1,\r\n                const void* const _First2, const void* const _Last2) noexcept {\r\n                auto _Ptr_haystack           = static_cast<const uint16_t*>(_First1);\r\n                const auto _Ptr_haystack_end = static_cast<const uint16_t*>(_Last1);\r\n\r\n                for (; _Ptr_haystack != _Ptr_haystack_end; ++_Ptr_haystack) {\r\n                    if (_Finding::_Find_impl<_Finding::_Find_traits_2, _Finding::_Predicate::_Equal>(\r\n                            _First2, _Last2, *_Ptr_haystack)\r\n                        == _Last2) {\r\n                        return _Ptr_haystack;\r\n                    }\r\n                }\r\n\r\n                return _Ptr_haystack;\r\n            }\r\n\r\n            template <class _Ty, _Predicate _Pred>\r\n            const void* __stdcall _Shuffle_impl_dispatch(const void* const _First1, const void* const _Last1,\r\n                const void* const _First2, const void* const _Last2) noexcept {\r\n\r\n                const size_t _Needle_length       = _Byte_length(_First2, _Last2);\r\n                const size_t _Needle_tail_length  = _Needle_length & 0xF;\r\n                const size_t _Last_tail_length_el = _Needle_tail_length / sizeof(_Ty);\r\n\r\n                if (_Last_tail_length_el == 0) {\r\n                    return _Shuffle_impl<_Ty, _Pred, 0>(_First1, _Last1, _First2, _Last2);\r\n                } else if (_Last_tail_length_el == 1) {\r\n                    return _Shuffle_impl<_Ty, _Pred, 1>(_First1, _Last1, _First2, _Last2);\r\n                } else if (_Last_tail_length_el == 2) {\r\n                    if constexpr (sizeof(_Ty) <= 4) {\r\n                        return _Shuffle_impl<_Ty, _Pred, 2>(_First1, _Last1, _First2, _Last2);\r\n                    }\r\n                } else if (_Last_tail_length_el == 3) {\r\n                    if constexpr (sizeof(_Ty) <= 4) {\r\n                        return _Shuffle_impl<_Ty, _Pred, 3>(_First1, _Last1, _First2, _Last2);\r\n                    }\r\n                } else if (_Last_tail_length_el >= 4) {\r\n                    if constexpr (sizeof(_Ty) <= 2) {\r\n                        return _Shuffle_impl<_Ty, _Pred, 4>(_First1, _Last1, _First2, _Last2);\r\n                    }\r\n                }\r\n\r\n                _STL_UNREACHABLE;\r\n            }\r\n\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            template <class _Ty, _Predicate _Pred>\r\n            const void* _Impl_pcmpestri(const void* _First1, const size_t _Haystack_length, const void* const _First2,\r\n                const size_t _Needle_length) noexcept {\r\n                constexpr int _Op_base =\r\n                    (_Pred == _Predicate::_Any_of ? _SIDD_POSITIVE_POLARITY : _SIDD_MASKED_NEGATIVE_POLARITY)\r\n                    | (sizeof(_Ty) == 1 ? _SIDD_UBYTE_OPS : _SIDD_UWORD_OPS) | _SIDD_CMP_EQUAL_ANY;\r\n                constexpr int _Op           = _Op_base | _SIDD_LEAST_SIGNIFICANT;\r\n                constexpr int _Part_size_el = sizeof(_Ty) == 1 ? 16 : 8;\r\n\r\n                const void* _Stop_at = _First1;\r\n                _Advance_bytes(_Stop_at, _Haystack_length & ~size_t{0xF});\r\n\r\n                if (_Needle_length <= 16) {\r\n                    // Special handling of small needle\r\n                    // The generic branch could also be modified to handle it, but with slightly worse performance\r\n\r\n                    const int _Needle_length_el = static_cast<int>(_Needle_length / sizeof(_Ty));\r\n\r\n                    alignas(16) uint8_t _Tmp2[16];\r\n                    memcpy(_Tmp2, _First2, _Needle_length);\r\n                    const __m128i _Data2 = _mm_load_si128(reinterpret_cast<const __m128i*>(_Tmp2));\r\n\r\n                    while (_First1 != _Stop_at) {\r\n                        const __m128i _Data1 = _mm_loadu_si128(static_cast<const __m128i*>(_First1));\r\n                        if (_mm_cmpestrc(_Data2, _Needle_length_el, _Data1, _Part_size_el, _Op)) {\r\n                            const int _Pos = _mm_cmpestri(_Data2, _Needle_length_el, _Data1, _Part_size_el, _Op);\r\n                            _Advance_bytes(_First1, _Pos * sizeof(_Ty));\r\n                            return _First1;\r\n                        }\r\n\r\n                        _Advance_bytes(_First1, 16);\r\n                    }\r\n\r\n                    if (const size_t _Last_part_size = _Haystack_length & 0xF; _Last_part_size != 0) {\r\n                        const int _Last_part_size_el = static_cast<int>(_Last_part_size / sizeof(_Ty));\r\n\r\n                        alignas(16) uint8_t _Tmp1[16];\r\n                        memcpy(_Tmp1, _First1, _Last_part_size);\r\n                        const __m128i _Data1 = _mm_load_si128(reinterpret_cast<const __m128i*>(_Tmp1));\r\n\r\n                        if (_mm_cmpestrc(_Data2, _Needle_length_el, _Data1, _Last_part_size_el, _Op)) {\r\n                            const int _Pos = _mm_cmpestri(_Data2, _Needle_length_el, _Data1, _Last_part_size_el, _Op);\r\n                            _Advance_bytes(_First1, _Pos * sizeof(_Ty));\r\n                            return _First1;\r\n                        }\r\n\r\n                        _Advance_bytes(_First1, _Last_part_size);\r\n                    }\r\n\r\n                    return _First1;\r\n                } else {\r\n                    const void* _Last_needle = _First2;\r\n                    _Advance_bytes(_Last_needle, _Needle_length & ~size_t{0xF});\r\n\r\n                    const int _Last_needle_length = static_cast<int>(_Needle_length & 0xF);\r\n\r\n                    alignas(16) uint8_t _Tmp2[16];\r\n                    memcpy(_Tmp2, _Last_needle, _Last_needle_length);\r\n                    const __m128i _Last_needle_val   = _mm_load_si128(reinterpret_cast<const __m128i*>(_Tmp2));\r\n                    const int _Last_needle_length_el = _Last_needle_length / sizeof(_Ty);\r\n\r\n                    constexpr int _Not_found      = 16; // arbitrary value greater than any found value\r\n#pragma warning(push)\r\n#pragma warning(disable : 4324) // structure was padded due to alignment specifier\r\n                    const auto _Test_whole_needle = [=](const __m128i _Data1, const int _Size1,\r\n                                                        const int _Found_pos_init) noexcept {\r\n                        if constexpr (_Pred == _Predicate::_Any_of) {\r\n                            int _Found_pos = _Found_pos_init;\r\n\r\n                            const auto _Step = [&_Found_pos](const __m128i _Data2, const int _Size2,\r\n                                                   const __m128i _Data1, const int _Size1) noexcept {\r\n                                if (_mm_cmpestrc(_Data2, _Size2, _Data1, _Size1, _Op)) {\r\n                                    const int _Pos = _mm_cmpestri(_Data2, _Size2, _Data1, _Size1, _Op);\r\n                                    if (_Pos < _Found_pos) {\r\n                                        _Found_pos = _Pos;\r\n                                    }\r\n                                }\r\n                            };\r\n\r\n                            const void* _Cur_needle = _First2;\r\n                            do {\r\n                                const __m128i _Data2 = _mm_loadu_si128(static_cast<const __m128i*>(_Cur_needle));\r\n                                _Step(_Data2, _Part_size_el, _Data1, _Size1);\r\n                                _Advance_bytes(_Cur_needle, 16);\r\n                            } while (_Cur_needle != _Last_needle);\r\n\r\n                            if (_Last_needle_length_el != 0) {\r\n                                _Step(_Last_needle_val, _Last_needle_length_el, _Data1, _Size1);\r\n                            }\r\n\r\n                            return _Found_pos;\r\n                        } else {\r\n                            constexpr int _Op_mask = _Op_base | _SIDD_BIT_MASK;\r\n\r\n                            const void* _Cur_needle = _First2;\r\n\r\n                            const __m128i _Data2_first = _mm_loadu_si128(static_cast<const __m128i*>(_Cur_needle));\r\n\r\n                            __m128i _Found = _mm_cmpestrm(_Data2_first, _Part_size_el, _Data1, _Size1, _Op_mask);\r\n                            _Advance_bytes(_Cur_needle, 16);\r\n\r\n                            while (_Cur_needle != _Last_needle) {\r\n                                const __m128i _Data2 = _mm_loadu_si128(static_cast<const __m128i*>(_Cur_needle));\r\n                                const __m128i _Found_part =\r\n                                    _mm_cmpestrm(_Data2, _Part_size_el, _Data1, _Size1, _Op_mask);\r\n                                _Found = _mm_and_si128(_Found, _Found_part);\r\n                                _Advance_bytes(_Cur_needle, 16);\r\n                            }\r\n\r\n                            if (_Last_needle_length_el != 0) {\r\n                                const __m128i _Found_part =\r\n                                    _mm_cmpestrm(_Last_needle_val, _Last_needle_length_el, _Data1, _Size1, _Op_mask);\r\n                                _Found = _mm_and_si128(_Found, _Found_part);\r\n                            }\r\n\r\n                            const unsigned int _Bingo = _mm_cvtsi128_si32(_Found);\r\n                            int _Found_pos            = _Found_pos_init;\r\n\r\n                            if (_Bingo != 0) {\r\n                                unsigned long _Tmp;\r\n                                // CodeQL [SM02313] _Tmp is always initialized: we just tested `if (_Bingo != 0)`.\r\n                                _BitScanForward(&_Tmp, _Bingo);\r\n                                if (_Found_pos > static_cast<int>(_Tmp)) {\r\n                                    _Found_pos = static_cast<int>(_Tmp);\r\n                                }\r\n                            }\r\n\r\n                            return _Found_pos;\r\n                        }\r\n                    };\r\n#pragma warning(pop)\r\n\r\n                    while (_First1 != _Stop_at) {\r\n                        const int _Found_pos = _Test_whole_needle(\r\n                            _mm_loadu_si128(static_cast<const __m128i*>(_First1)), _Part_size_el, _Not_found);\r\n\r\n                        if (_Found_pos != _Not_found) {\r\n                            _Advance_bytes(_First1, _Found_pos * sizeof(_Ty));\r\n                            return _First1;\r\n                        }\r\n\r\n                        _Advance_bytes(_First1, 16);\r\n                    }\r\n\r\n                    if (const size_t _Last_part_size = _Haystack_length & 0xF; _Last_part_size != 0) {\r\n                        const int _Last_part_size_el = static_cast<int>(_Last_part_size / sizeof(_Ty));\r\n\r\n                        alignas(16) uint8_t _Tmp1[16];\r\n                        memcpy(_Tmp1, _First1, _Last_part_size);\r\n                        const __m128i _Data1 = _mm_load_si128(reinterpret_cast<const __m128i*>(_Tmp1));\r\n\r\n                        const int _Found_pos = _Test_whole_needle(_Data1, _Last_part_size_el, _Last_part_size_el);\r\n\r\n                        _Advance_bytes(_First1, _Found_pos * sizeof(_Ty));\r\n                    }\r\n\r\n                    return _First1;\r\n                }\r\n            }\r\n\r\n            template <class _Ty>\r\n            struct _Find_first_of_traits;\r\n\r\n            template <>\r\n            struct _Find_first_of_traits<uint32_t> {\r\n                static __m256i _Cmp_avx(const __m256i _Lhs, const __m256i _Rhs) noexcept {\r\n                    return _mm256_cmpeq_epi32(_Lhs, _Rhs);\r\n                }\r\n\r\n                template <size_t _Amount>\r\n                static __m256i _Spread_avx(__m256i _Val, const size_t _Needle_length_el) noexcept {\r\n                    if constexpr (_Amount == 0) {\r\n                        return _mm256_undefined_si256();\r\n                    } else if constexpr (_Amount == 1) {\r\n                        return _mm256_broadcastd_epi32(_mm256_castsi256_si128(_Val));\r\n                    } else if constexpr (_Amount == 2) {\r\n                        return _mm256_broadcastq_epi64(_mm256_castsi256_si128(_Val));\r\n                    } else if constexpr (_Amount == 4) {\r\n                        if (_Needle_length_el < 4) {\r\n                            _Val = _mm256_shuffle_epi32(_Val, _MM_SHUFFLE(0, 2, 1, 0));\r\n                        }\r\n\r\n                        return _mm256_permute4x64_epi64(_Val, _MM_SHUFFLE(1, 0, 1, 0));\r\n                    } else if constexpr (_Amount == 8) {\r\n                        if (_Needle_length_el < 8) {\r\n                            const __m256i _Mask = _Avx2_tail_mask_32(_Needle_length_el * 4);\r\n                            // zero unused elements in sequential permutation mask, so will be filled by 1st\r\n                            const __m256i _Perm = _mm256_and_si256(_mm256_set_epi32(7, 6, 5, 4, 3, 2, 1, 0), _Mask);\r\n                            _Val                = _mm256_permutevar8x32_epi32(_Val, _Perm);\r\n                        }\r\n\r\n                        return _Val;\r\n                    } else {\r\n                        static_assert(false, \"Unexpected amount\");\r\n                    }\r\n                }\r\n\r\n                template <size_t _Amount>\r\n                static __m256i _Shuffle_avx(const __m256i _Val) noexcept {\r\n                    if constexpr (_Amount == 1) {\r\n                        return _mm256_shuffle_epi32(_Val, _MM_SHUFFLE(2, 3, 0, 1));\r\n                    } else if constexpr (_Amount == 2) {\r\n                        return _mm256_shuffle_epi32(_Val, _MM_SHUFFLE(1, 0, 3, 2));\r\n                    } else if constexpr (_Amount == 4) {\r\n                        return _mm256_permute4x64_epi64(_Val, _MM_SHUFFLE(1, 0, 3, 2));\r\n                    } else {\r\n                        static_assert(false, \"Unexpected amount\");\r\n                    }\r\n                }\r\n            };\r\n\r\n            template <>\r\n            struct _Find_first_of_traits<uint64_t> {\r\n                static __m256i _Cmp_avx(const __m256i _Lhs, const __m256i _Rhs) noexcept {\r\n                    return _mm256_cmpeq_epi64(_Lhs, _Rhs);\r\n                }\r\n\r\n                template <size_t _Amount>\r\n                static __m256i _Spread_avx(const __m256i _Val, const size_t _Needle_length_el) noexcept {\r\n                    if constexpr (_Amount == 0) {\r\n                        return _mm256_undefined_si256();\r\n                    } else if constexpr (_Amount == 1) {\r\n                        return _mm256_broadcastq_epi64(_mm256_castsi256_si128(_Val));\r\n                    } else if constexpr (_Amount == 2) {\r\n                        return _mm256_permute4x64_epi64(_Val, _MM_SHUFFLE(1, 0, 1, 0));\r\n                    } else if constexpr (_Amount == 4) {\r\n                        if (_Needle_length_el < 4) {\r\n                            return _mm256_permute4x64_epi64(_Val, _MM_SHUFFLE(0, 2, 1, 0));\r\n                        }\r\n\r\n                        return _Val;\r\n                    } else {\r\n                        static_assert(false, \"Unexpected amount\");\r\n                    }\r\n                }\r\n\r\n                template <size_t _Amount>\r\n                static __m256i _Shuffle_avx(const __m256i _Val) noexcept {\r\n                    if constexpr (_Amount == 1) {\r\n                        return _mm256_shuffle_epi32(_Val, _MM_SHUFFLE(1, 0, 3, 2));\r\n                    } else if constexpr (_Amount == 2) {\r\n                        return _mm256_permute4x64_epi64(_Val, _MM_SHUFFLE(1, 0, 3, 2));\r\n                    } else {\r\n                        static_assert(false, \"Unexpected amount\");\r\n                    }\r\n                }\r\n            };\r\n\r\n            template <class _Traits, size_t _Needle_length_el_magnitude>\r\n            __m256i _Shuffle_step(const __m256i _Data1, const __m256i _Data2s0) noexcept {\r\n                __m256i _Eq = _mm256_setzero_si256();\r\n                if constexpr (_Needle_length_el_magnitude >= 1) {\r\n                    _Eq = _Traits::_Cmp_avx(_Data1, _Data2s0);\r\n                    if constexpr (_Needle_length_el_magnitude >= 2) {\r\n                        const __m256i _Data2s1 = _Traits::template _Shuffle_avx<1>(_Data2s0);\r\n                        _Eq                    = _mm256_or_si256(_Eq, _Traits::_Cmp_avx(_Data1, _Data2s1));\r\n                        if constexpr (_Needle_length_el_magnitude >= 4) {\r\n                            const __m256i _Data2s2 = _Traits::template _Shuffle_avx<2>(_Data2s0);\r\n                            _Eq                    = _mm256_or_si256(_Eq, _Traits::_Cmp_avx(_Data1, _Data2s2));\r\n                            const __m256i _Data2s3 = _Traits::template _Shuffle_avx<1>(_Data2s2);\r\n                            _Eq                    = _mm256_or_si256(_Eq, _Traits::_Cmp_avx(_Data1, _Data2s3));\r\n                            if constexpr (_Needle_length_el_magnitude >= 8) {\r\n                                const __m256i _Data2s4 = _Traits::template _Shuffle_avx<4>(_Data2s0);\r\n                                _Eq                    = _mm256_or_si256(_Eq, _Traits::_Cmp_avx(_Data1, _Data2s4));\r\n                                const __m256i _Data2s5 = _Traits::template _Shuffle_avx<1>(_Data2s4);\r\n                                _Eq                    = _mm256_or_si256(_Eq, _Traits::_Cmp_avx(_Data1, _Data2s5));\r\n                                const __m256i _Data2s6 = _Traits::template _Shuffle_avx<2>(_Data2s4);\r\n                                _Eq                    = _mm256_or_si256(_Eq, _Traits::_Cmp_avx(_Data1, _Data2s6));\r\n                                const __m256i _Data2s7 = _Traits::template _Shuffle_avx<1>(_Data2s6);\r\n                                _Eq                    = _mm256_or_si256(_Eq, _Traits::_Cmp_avx(_Data1, _Data2s7));\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                return _Eq;\r\n            }\r\n\r\n            template <class _Ty, bool _Large, size_t _Last2_length_el_magnitude>\r\n            const void* _Shuffle_impl(const void* _First1, const size_t _Haystack_length, const void* const _First2,\r\n                const void* const _Stop2, const size_t _Last2_length_el) noexcept {\r\n                using _Traits               = _Find_first_of_traits<_Ty>;\r\n                constexpr size_t _Length_el = 32 / sizeof(_Ty);\r\n\r\n                const __m256i _Last2val = _mm256_maskload_epi32(\r\n                    reinterpret_cast<const int*>(_Stop2), _Avx2_tail_mask_32(_Last2_length_el * sizeof(_Ty)));\r\n                const __m256i _Last2s0 =\r\n                    _Traits::template _Spread_avx<_Last2_length_el_magnitude>(_Last2val, _Last2_length_el);\r\n\r\n                const void* _Stop1 = _First1;\r\n                _Advance_bytes(_Stop1, _Haystack_length & ~size_t{0x1F});\r\n\r\n                for (; _First1 != _Stop1; _Advance_bytes(_First1, 32)) {\r\n                    const __m256i _Data1 = _mm256_loadu_si256(static_cast<const __m256i*>(_First1));\r\n                    __m256i _Eq          = _Shuffle_step<_Traits, _Last2_length_el_magnitude>(_Data1, _Last2s0);\r\n\r\n                    if constexpr (_Large) {\r\n                        for (const void* _Ptr2 = _First2; _Ptr2 != _Stop2; _Advance_bytes(_Ptr2, 32)) {\r\n                            const __m256i _Data2s0 = _mm256_loadu_si256(static_cast<const __m256i*>(_Ptr2));\r\n                            _Eq = _mm256_or_si256(_Eq, _Shuffle_step<_Traits, _Length_el>(_Data1, _Data2s0));\r\n                        }\r\n                    }\r\n\r\n                    if (const uint32_t _Bingo = _mm256_movemask_epi8(_Eq); _Bingo != 0) {\r\n                        const unsigned long _Offset = _tzcnt_u32(_Bingo);\r\n                        _Advance_bytes(_First1, _Offset);\r\n                        return _First1;\r\n                    }\r\n                }\r\n\r\n                if (const size_t _Haystack_tail_length = _Haystack_length & 0x1C; _Haystack_tail_length != 0) {\r\n                    const __m256i _Tail_mask = _Avx2_tail_mask_32(_Haystack_tail_length);\r\n                    const __m256i _Data1     = _mm256_maskload_epi32(static_cast<const int*>(_First1), _Tail_mask);\r\n                    __m256i _Eq              = _Shuffle_step<_Traits, _Last2_length_el_magnitude>(_Data1, _Last2s0);\r\n\r\n                    if constexpr (_Large) {\r\n                        for (const void* _Ptr2 = _First2; _Ptr2 != _Stop2; _Advance_bytes(_Ptr2, 32)) {\r\n                            const __m256i _Data2s0 = _mm256_loadu_si256(static_cast<const __m256i*>(_Ptr2));\r\n                            _Eq = _mm256_or_si256(_Eq, _Shuffle_step<_Traits, _Length_el>(_Data1, _Data2s0));\r\n                        }\r\n                    }\r\n\r\n                    if (const uint32_t _Bingo = _mm256_movemask_epi8(_mm256_and_si256(_Eq, _Tail_mask)); _Bingo != 0) {\r\n                        const unsigned long _Offset = _tzcnt_u32(_Bingo);\r\n                        _Advance_bytes(_First1, _Offset);\r\n                        return _First1;\r\n                    }\r\n\r\n                    _Advance_bytes(_First1, _Haystack_tail_length);\r\n                }\r\n\r\n                return _First1;\r\n            }\r\n\r\n            template <class _Ty, bool _Large>\r\n            const void* _Shuffle_impl_dispatch_magnitude(const void* const _First1, const size_t _Haystack_length,\r\n                const void* const _First2, const void* const _Stop2, const size_t _Last2_length_el) noexcept {\r\n                if (_Last2_length_el == 0) {\r\n                    return _Shuffle_impl<_Ty, _Large, 0>(_First1, _Haystack_length, _First2, _Stop2, _Last2_length_el);\r\n                } else if (_Last2_length_el == 1) {\r\n                    return _Shuffle_impl<_Ty, _Large, 1>(_First1, _Haystack_length, _First2, _Stop2, _Last2_length_el);\r\n                } else if (_Last2_length_el == 2) {\r\n                    return _Shuffle_impl<_Ty, _Large, 2>(_First1, _Haystack_length, _First2, _Stop2, _Last2_length_el);\r\n                } else if (_Last2_length_el <= 4) {\r\n                    return _Shuffle_impl<_Ty, _Large, 4>(_First1, _Haystack_length, _First2, _Stop2, _Last2_length_el);\r\n                } else if (_Last2_length_el <= 8) {\r\n                    if constexpr (sizeof(_Ty) == 4) {\r\n                        return _Shuffle_impl<_Ty, _Large, 8>(\r\n                            _First1, _Haystack_length, _First2, _Stop2, _Last2_length_el);\r\n                    }\r\n                }\r\n\r\n                _STL_UNREACHABLE;\r\n            }\r\n\r\n            template <class _Ty>\r\n            const void* _Impl_4_8(const void* const _First1, const size_t _Haystack_length, const void* const _First2,\r\n                const size_t _Needle_length) noexcept {\r\n                _Zeroupper_on_exit _Guard; // TRANSITION, DevCom-10331414\r\n\r\n                const size_t _Last_needle_length    = _Needle_length & 0x1F;\r\n                const size_t _Last_needle_length_el = _Last_needle_length / sizeof(_Ty);\r\n\r\n                if (const size_t _Needle_length_large = _Needle_length & ~size_t{0x1F}; _Needle_length_large != 0) {\r\n                    const void* _Stop2 = _First2;\r\n                    _Advance_bytes(_Stop2, _Needle_length_large);\r\n                    return _Shuffle_impl_dispatch_magnitude<_Ty, true>(\r\n                        _First1, _Haystack_length, _First2, _Stop2, _Last_needle_length_el);\r\n                } else {\r\n                    return _Shuffle_impl_dispatch_magnitude<_Ty, false>(\r\n                        _First1, _Haystack_length, _First2, _First2, _Last_needle_length_el);\r\n                }\r\n            }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n            template <class _Ty>\r\n            const void* __stdcall _Dispatch_ptr(const void* const _First1, const void* const _Last1,\r\n                const void* const _First2, const void* const _Last2) noexcept {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n                return _Shuffle_impl_dispatch<_Ty, _Predicate::_Any_of>(_First1, _Last1, _First2, _Last2);\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n                if constexpr (sizeof(_Ty) <= 2) {\r\n                    if (_Use_sse42()) {\r\n                        return _Impl_pcmpestri<_Ty, _Predicate::_Any_of>(\r\n                            _First1, _Byte_length(_First1, _Last1), _First2, _Byte_length(_First2, _Last2));\r\n                    }\r\n                } else {\r\n                    if (_Use_avx2()) {\r\n                        return _Impl_4_8<_Ty>(\r\n                            _First1, _Byte_length(_First1, _Last1), _First2, _Byte_length(_First2, _Last2));\r\n                    }\r\n                }\r\n\r\n                return _Fallback<_Ty, _Predicate::_Any_of>(_First1, _Last1, _First2, _Last2);\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n            }\r\n\r\n            template <class _Ty>\r\n            size_t _Pos_from_ptr(\r\n                const void* const _Result, const void* const _First1, const void* const _Last1) noexcept {\r\n                if (_Result != _Last1) {\r\n                    return _Byte_length(_First1, _Result) / sizeof(_Ty);\r\n                } else {\r\n                    return static_cast<size_t>(-1);\r\n                }\r\n            }\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            template <class _Ty, _Predicate _Pred>\r\n            size_t _Dispatch_pos_neon(const void* const _First1, const size_t _Count1, const void* const _First2,\r\n                const size_t _Count2) noexcept {\r\n                using namespace _Bitmap_impl;\r\n\r\n                if (_Use_bitmap_neon<_Ty>(_Count1, _Count2)) {\r\n                    if constexpr (sizeof(_Ty) < 8) {\r\n                        uint8x16x2_t _Bitmap;\r\n                        if (_Bitmap_details::_Make_bitmap<_Ty>(_First2, _Count2, _Bitmap)) {\r\n                            return _Impl_first_neon<_Ty, _Pred>(_First1, _Count1, _Bitmap);\r\n                        }\r\n                    }\r\n                } else if (_Use_bitmap_scalar<_Ty>(_Count1, _Count2)) {\r\n                    _Scalar_table_t _Table = {};\r\n                    if (_Build_scalar_table<_Ty>(_First2, _Count2, _Table)) {\r\n                        return _Impl_first_scalar<_Ty, _Pred>(_First1, _Count1, _Table);\r\n                    }\r\n                }\r\n\r\n                const void* const _Last1 = static_cast<const _Ty*>(_First1) + _Count1;\r\n                const void* const _Last2 = static_cast<const _Ty*>(_First2) + _Count2;\r\n\r\n                // For _None_of, it can be faster to Find Haystack elements in Needle for longer Needles or\r\n                // non-vectorized Haystack lengths.\r\n                if constexpr (_Pred == _Predicate::_None_of && sizeof(_Ty) >= 2) {\r\n                    static_assert(sizeof(_Ty) == 2);\r\n\r\n                    // Heuristic of Haystack smaller than Neon width, or Needle at least twice the Neon width.\r\n                    if (_Count1 * sizeof(_Ty) < 16 || _Count2 * sizeof(_Ty) >= 32) {\r\n                        return _Pos_from_ptr<_Ty>(\r\n                            _Fallback_find_not_2(_First1, _Last1, _First2, _Last2), _First1, _Last1);\r\n                    }\r\n                }\r\n\r\n                return _Pos_from_ptr<_Ty>(\r\n                    _Shuffle_impl_dispatch<_Ty, _Pred>(_First1, _Last1, _First2, _Last2), _First1, _Last1);\r\n            }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            template <class _Ty, _Predicate _Pred>\r\n            size_t _Dispatch_pos_sse_1_2(const void* const _First1, const size_t _Count1, const void* const _First2,\r\n                const size_t _Count2) noexcept {\r\n                using namespace _Bitmap_impl;\r\n\r\n                const _Strategy _Strat = _Pick_strategy<_Ty>(_Count1, _Count2, _Use_avx2());\r\n\r\n                if (_Strat == _Strategy::_Vector_bitmap) {\r\n                    if (_Can_fit_256_bits_sse(static_cast<const _Ty*>(_First2), _Count2)) {\r\n                        return _Impl_first_avx<_Ty, _Pred>(_First1, _Count1, _First2, _Count2);\r\n                    }\r\n                } else if (_Strat == _Strategy::_Scalar_bitmap) {\r\n                    if (_Can_fit_256_bits_sse(static_cast<const _Ty*>(_First2), _Count2)) {\r\n                        alignas(32) _Scalar_table_t _Table = {};\r\n                        _Build_scalar_table_no_check<_Ty>(_First2, _Count2, _Table);\r\n                        return _Impl_first_scalar<_Ty, _Pred>(_First1, _Count1, _Table);\r\n                    }\r\n                }\r\n\r\n                const void* const _Last1   = static_cast<const _Ty*>(_First1) + _Count1;\r\n                const size_t _Size_bytes_1 = _Count1 * sizeof(_Ty);\r\n                const size_t _Size_bytes_2 = _Count2 * sizeof(_Ty);\r\n\r\n                return _Pos_from_ptr<_Ty>(\r\n                    _Impl_pcmpestri<_Ty, _Pred>(_First1, _Size_bytes_1, _First2, _Size_bytes_2), _First1, _Last1);\r\n            }\r\n\r\n            template <class _Ty>\r\n            size_t _Dispatch_pos_avx_4_8(const void* const _First1, const size_t _Count1, const void* const _First2,\r\n                const size_t _Count2) noexcept {\r\n                using namespace _Bitmap_impl;\r\n\r\n                const auto _Strat = _Pick_strategy<_Ty>(_Count1, _Count2, true);\r\n\r\n                if (_Strat == _Strategy::_Vector_bitmap) {\r\n                    if (_Can_fit_256_bits_sse(static_cast<const _Ty*>(_First2), _Count2)) {\r\n                        return _Impl_first_avx<_Ty, _Predicate::_Any_of>(_First1, _Count1, _First2, _Count2);\r\n                    }\r\n                } else if (_Strat == _Strategy::_Scalar_bitmap) {\r\n                    if (_Can_fit_256_bits_sse(static_cast<const _Ty*>(_First2), _Count2)) {\r\n                        alignas(32) _Scalar_table_t _Table = {};\r\n                        _Build_scalar_table_no_check<_Ty>(_First2, _Count2, _Table);\r\n                        return _Impl_first_scalar<_Ty, _Predicate::_Any_of>(_First1, _Count1, _Table);\r\n                    }\r\n                }\r\n\r\n                const void* const _Last1   = static_cast<const _Ty*>(_First1) + _Count1;\r\n                const size_t _Size_bytes_1 = _Count1 * sizeof(_Ty);\r\n                const size_t _Size_bytes_2 = _Count2 * sizeof(_Ty);\r\n\r\n                return _Pos_from_ptr<_Ty>(\r\n                    _Impl_4_8<_Ty>(_First1, _Size_bytes_1, _First2, _Size_bytes_2), _First1, _Last1);\r\n            }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n            template <class _Ty, _Predicate _Pred>\r\n            size_t _Dispatch_pos_fallback(const void* const _First1, const size_t _Count1, const void* const _First2,\r\n                const size_t _Count2) noexcept {\r\n                using namespace _Bitmap_impl;\r\n\r\n                _Scalar_table_t _Table = {};\r\n                if (_Build_scalar_table<_Ty>(_First2, _Count2, _Table)) {\r\n                    return _Impl_first_scalar<_Ty, _Pred>(_First1, _Count1, _Table);\r\n                }\r\n\r\n                const void* const _Last1 = static_cast<const _Ty*>(_First1) + _Count1;\r\n                const void* const _Last2 = static_cast<const _Ty*>(_First2) + _Count2;\r\n\r\n                return _Pos_from_ptr<_Ty>(_Fallback<_Ty, _Pred>(_First1, _Last1, _First2, _Last2), _First1, _Last1);\r\n            }\r\n\r\n            template <class _Ty, _Predicate _Pred>\r\n            size_t __stdcall _Dispatch_pos(const void* const _First1, const size_t _Count1, const void* const _First2,\r\n                const size_t _Count2) noexcept {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n                return _Dispatch_pos_neon<_Ty, _Pred>(_First1, _Count1, _First2, _Count2);\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n                if constexpr (sizeof(_Ty) <= 2) {\r\n                    if (_Use_sse42()) {\r\n                        return _Dispatch_pos_sse_1_2<_Ty, _Pred>(_First1, _Count1, _First2, _Count2);\r\n                    }\r\n                } else {\r\n                    if (_Use_avx2()) {\r\n                        static_assert(_Pred == _Predicate::_Any_of);\r\n\r\n                        return _Dispatch_pos_avx_4_8<_Ty>(_First1, _Count1, _First2, _Count2);\r\n                    }\r\n                }\r\n                return _Dispatch_pos_fallback<_Ty, _Pred>(_First1, _Count1, _First2, _Count2);\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n            }\r\n        } // namespace _First_of\r\n\r\n        namespace _Last_of {\r\n            template <class _Ty, _Predicate _Pred>\r\n            size_t __stdcall _Fallback(const void* const _Haystack, const size_t _Haystack_length,\r\n                const void* const _Needle, const size_t _Needle_length) noexcept {\r\n\r\n                const auto _Ptr_haystack = static_cast<const _Ty*>(_Haystack);\r\n                size_t _Pos              = _Haystack_length;\r\n                const auto _Needle_end   = static_cast<const _Ty*>(_Needle) + _Needle_length;\r\n\r\n                while (_Pos != 0) {\r\n                    --_Pos;\r\n\r\n                    if constexpr (_Pred == _Predicate::_Any_of) {\r\n                        for (auto _Ptr = static_cast<const _Ty*>(_Needle); _Ptr != _Needle_end; ++_Ptr) {\r\n                            if (_Ptr_haystack[_Pos] == *_Ptr) {\r\n                                return _Pos;\r\n                            }\r\n                        }\r\n                    } else {\r\n                        bool _Match = false;\r\n                        for (auto _Ptr = static_cast<const _Ty*>(_Needle); _Ptr != _Needle_end; ++_Ptr) {\r\n                            if (_Ptr_haystack[_Pos] == *_Ptr) {\r\n                                _Match = true;\r\n                                break;\r\n                            }\r\n                        }\r\n\r\n                        if (!_Match) {\r\n                            return _Pos;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                return static_cast<size_t>(-1);\r\n            }\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            template <class _Ty, _Predicate _Pred, size_t _Unrolled_tail_elems>\r\n            size_t _Shuffle_impl(const void* const _First1, const size_t _Count1, const void* const _First2,\r\n                const size_t _Count2) noexcept {\r\n                using _Traits                   = _First_of::_Find_first_of_traits<_Ty>;\r\n                constexpr size_t _Vec_size_elem = 16 / sizeof(_Ty);\r\n\r\n                const void* const _Last1 = static_cast<const _Ty*>(_First1) + _Count1;\r\n                const void* const _Last2 = static_cast<const _Ty*>(_First2) + _Count2;\r\n\r\n                const size_t _Haystack_length = _Byte_length(_First1, _Last1);\r\n                const size_t _Vec_bytes       = _Haystack_length & ~size_t{0xF};\r\n                const void* _Stop1            = _Last1;\r\n                _Rewind_bytes(_Stop1, _Vec_bytes);\r\n\r\n                const void* _Cur1 = _Last1;\r\n                if (_Cur1 != _Stop1) {\r\n                    const size_t _Needle_length = _Byte_length(_First2, _Last2);\r\n                    const void* _Stop2          = _First2;\r\n                    _Advance_bytes(_Stop2, _Needle_length & ~size_t{0xF});\r\n\r\n                    // Set _Lanes to 1 when we have 0 tail elements,\r\n                    // to stop the compiler from complaining about an empty array.\r\n                    constexpr size_t _Lanes = _Unrolled_tail_elems == 0 ? 1 : _Unrolled_tail_elems;\r\n                    _First_of::_Find_first_of_vec_t<_Ty> _Needle_tail[_Lanes];\r\n\r\n                    if constexpr (_Unrolled_tail_elems > 0) {\r\n                        for (size_t _Lane = 0; _Lane < _Unrolled_tail_elems; ++_Lane) {\r\n                            _Needle_tail[_Lane] = _Traits::_Set_neon_q(*(static_cast<const _Ty*>(_Stop2) + _Lane));\r\n                        }\r\n                    }\r\n\r\n                    do {\r\n                        _Rewind_bytes(_Cur1, 16);\r\n                        const auto _Data1 = _Traits::_Load_q(_Cur1);\r\n\r\n                        auto _Eq = _Traits::_Set_neon_q(0);\r\n\r\n                        const void* _Ptr2 = _First2;\r\n                        for (; _Ptr2 != _Stop2; _Advance_bytes(_Ptr2, 16)) {\r\n                            const auto _Data2s0 = _Traits::_Load_q(_Ptr2);\r\n                            _Eq                 = _Traits::_Or(\r\n                                _Eq, _First_of::_Shuffle_step<_Traits, _Vec_size_elem, _Ty>(_Data1, _Data2s0));\r\n                        }\r\n\r\n                        if constexpr (_Unrolled_tail_elems > 0) {\r\n                            // Unrolled tail.\r\n                            for (size_t _Lane = 0; _Lane < _Unrolled_tail_elems; ++_Lane) {\r\n                                const auto _Cmp = _Traits::_Cmp_neon_q(_Data1, _Needle_tail[_Lane]);\r\n                                _Eq             = _Traits::_Or(_Eq, _Cmp);\r\n                            }\r\n                        }\r\n\r\n                        // We unroll by a maximum of 4 (for 2-byte and 1-byte element types), so we need a non-unrolled\r\n                        // tail loop.\r\n                        if constexpr (_Unrolled_tail_elems == 4) {\r\n                            _Advance_bytes(_Ptr2, sizeof(_Ty) * _Unrolled_tail_elems);\r\n\r\n                            for (; _Ptr2 != _Last2; _Advance_bytes(_Ptr2, sizeof(_Ty))) {\r\n                                const auto _Needle = _Traits::_Set_neon_q(*(static_cast<const _Ty*>(_Ptr2)));\r\n                                const auto _Cmp    = _Traits::_Cmp_neon_q(_Data1, _Needle);\r\n                                _Eq                = _Traits::_Or(_Eq, _Cmp);\r\n                            }\r\n                        }\r\n\r\n                        uint64_t _Match = _Traits::_Mask_q(_Eq);\r\n                        if constexpr (_Pred == _Predicate::_None_of) {\r\n                            _Match ^= 0xFFFF'FFFF'FFFF'FFFF;\r\n                        }\r\n\r\n                        if (_Match != 0) {\r\n                            const auto _Pos = _Finding::_Get_last_h_pos_q(_Match);\r\n                            _Advance_bytes(_Cur1, _Pos - (sizeof(_Ty) - 1));\r\n                            return _Byte_length(_First1, _Cur1) / sizeof(_Ty);\r\n                        }\r\n                    } while (_Cur1 != _Stop1);\r\n                }\r\n\r\n                const auto _Rem1 = _Byte_length(_First1, _Cur1) / sizeof(_Ty);\r\n\r\n                return _Fallback<_Ty, _Pred>(_First1, _Rem1, _First2, _Count2);\r\n            }\r\n\r\n            template <class _Ty, _Predicate _Pred>\r\n            size_t __stdcall _Shuffle_impl_dispatch(const void* const _First1, const size_t _Count1,\r\n                const void* const _First2, const size_t _Count2) noexcept {\r\n\r\n                constexpr size_t _Vec_size_elems  = 16 / sizeof(_Ty);\r\n                const size_t _Last_tail_length_el = _Count2 & (_Vec_size_elems - 1);\r\n\r\n                if (_Last_tail_length_el == 0) {\r\n                    return _Shuffle_impl<_Ty, _Pred, 0>(_First1, _Count1, _First2, _Count2);\r\n                } else if (_Last_tail_length_el == 1) {\r\n                    return _Shuffle_impl<_Ty, _Pred, 1>(_First1, _Count1, _First2, _Count2);\r\n                } else if (_Last_tail_length_el == 2) {\r\n                    if constexpr (sizeof(_Ty) <= 4) {\r\n                        return _Shuffle_impl<_Ty, _Pred, 2>(_First1, _Count1, _First2, _Count2);\r\n                    }\r\n                } else if (_Last_tail_length_el == 3) {\r\n                    if constexpr (sizeof(_Ty) <= 4) {\r\n                        return _Shuffle_impl<_Ty, _Pred, 3>(_First1, _Count1, _First2, _Count2);\r\n                    }\r\n                } else if (_Last_tail_length_el >= 4) {\r\n                    if constexpr (sizeof(_Ty) <= 2) {\r\n                        return _Shuffle_impl<_Ty, _Pred, 4>(_First1, _Count1, _First2, _Count2);\r\n                    }\r\n                }\r\n\r\n                _STL_UNREACHABLE;\r\n            }\r\n\r\n            size_t _Fallback_find_not_2(const void* const _First1, const size_t _Count1, const void* const _First2,\r\n                const size_t _Count2) noexcept {\r\n                const auto _Haystack_start = static_cast<const uint16_t*>(_First1);\r\n                const auto _Last2          = static_cast<const uint16_t*>(_First2) + _Count2;\r\n\r\n                for (auto _Ptr = _Haystack_start + _Count1 - 1;; --_Ptr) {\r\n                    if (_Finding::_Find_impl<_Finding::_Find_traits_2, _Finding::_Predicate::_Equal>(\r\n                            _First2, _Last2, *_Ptr)\r\n                        == _Last2) {\r\n                        return static_cast<size_t>(_Ptr - _Haystack_start);\r\n                    }\r\n\r\n                    if (_Ptr == _Haystack_start) {\r\n                        return static_cast<size_t>(-1);\r\n                    }\r\n                }\r\n            }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            template <class _Ty, _Predicate _Pred>\r\n            size_t _Impl(const void* const _Haystack, const size_t _Haystack_length, const void* const _Needle,\r\n                const size_t _Needle_length) noexcept {\r\n                const size_t _Haystack_length_bytes = _Haystack_length * sizeof(_Ty);\r\n\r\n                constexpr int _Op_base =\r\n                    (_Pred == _Predicate::_Any_of ? _SIDD_POSITIVE_POLARITY : _SIDD_MASKED_NEGATIVE_POLARITY)\r\n                    | (sizeof(_Ty) == 1 ? _SIDD_UBYTE_OPS : _SIDD_UWORD_OPS) | _SIDD_CMP_EQUAL_ANY;\r\n                constexpr int _Op           = _Op_base | _SIDD_MOST_SIGNIFICANT;\r\n                constexpr int _Part_size_el = sizeof(_Ty) == 1 ? 16 : 8;\r\n\r\n                const size_t _Last_part_size = _Haystack_length_bytes & 0xF;\r\n\r\n                const void* _Stop_at = _Haystack;\r\n                _Advance_bytes(_Stop_at, _Last_part_size);\r\n\r\n                const void* _Cur = _Haystack;\r\n                _Advance_bytes(_Cur, _Haystack_length_bytes);\r\n\r\n                const size_t _Needle_length_bytes = _Needle_length * sizeof(_Ty);\r\n\r\n                if (_Needle_length_bytes <= 16) {\r\n                    // Special handling of small needle\r\n                    // The generic branch could also be modified to handle it, but with slightly worse performance\r\n                    const int _Needle_length_el = static_cast<int>(_Needle_length);\r\n\r\n                    alignas(16) uint8_t _Tmp2[16];\r\n                    memcpy(_Tmp2, _Needle, _Needle_length_bytes);\r\n                    const __m128i _Data2 = _mm_load_si128(reinterpret_cast<const __m128i*>(_Tmp2));\r\n\r\n                    while (_Cur != _Stop_at) {\r\n                        _Rewind_bytes(_Cur, 16);\r\n                        const __m128i _Data1 = _mm_loadu_si128(static_cast<const __m128i*>(_Cur));\r\n                        if (_mm_cmpestrc(_Data2, _Needle_length_el, _Data1, _Part_size_el, _Op)) {\r\n                            const int _Pos = _mm_cmpestri(_Data2, _Needle_length_el, _Data1, _Part_size_el, _Op);\r\n                            return _Byte_length(_Haystack, _Cur) / sizeof(_Ty) + _Pos;\r\n                        }\r\n                    }\r\n\r\n                    if (_Last_part_size != 0) {\r\n                        const int _Last_part_size_el = static_cast<int>(_Last_part_size / sizeof(_Ty));\r\n                        __m128i _Data1;\r\n\r\n                        if (_Haystack_length_bytes >= 16) {\r\n                            _Data1 = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Haystack));\r\n                        } else {\r\n                            alignas(16) uint8_t _Tmp1[16];\r\n                            memcpy(_Tmp1, _Haystack, _Haystack_length_bytes);\r\n                            _Data1 = _mm_load_si128(reinterpret_cast<const __m128i*>(_Tmp1));\r\n                        }\r\n\r\n                        if (_mm_cmpestrc(_Data2, _Needle_length_el, _Data1, _Last_part_size_el, _Op)) {\r\n                            return _mm_cmpestri(_Data2, _Needle_length_el, _Data1, _Last_part_size_el, _Op);\r\n                        }\r\n                    }\r\n\r\n                    return static_cast<size_t>(-1);\r\n                } else {\r\n                    const void* _Last_needle = _Needle;\r\n                    _Advance_bytes(_Last_needle, _Needle_length_bytes & ~size_t{0xF});\r\n\r\n                    const int _Last_needle_length = static_cast<int>(_Needle_length_bytes & 0xF);\r\n\r\n                    alignas(16) uint8_t _Tmp2[16];\r\n                    memcpy(_Tmp2, _Last_needle, _Last_needle_length);\r\n                    const __m128i _Last_needle_val   = _mm_load_si128(reinterpret_cast<const __m128i*>(_Tmp2));\r\n                    const int _Last_needle_length_el = _Last_needle_length / sizeof(_Ty);\r\n\r\n                    // equal to npos when treated as size_t; also less than any found value\r\n                    constexpr int _Not_found      = -1;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4324) // structure was padded due to alignment specifier\r\n                    const auto _Test_whole_needle = [=](const __m128i _Data1, const int _Size1) noexcept {\r\n                        if constexpr (_Pred == _Predicate::_Any_of) {\r\n                            int _Found_pos = _Not_found;\r\n\r\n                            const auto _Step = [&_Found_pos](const __m128i _Data2, const int _Size2,\r\n                                                   const __m128i _Data1, const int _Size1) noexcept {\r\n                                if (_mm_cmpestrc(_Data2, _Size2, _Data1, _Size1, _Op)) {\r\n                                    const int _Pos = _mm_cmpestri(_Data2, _Size2, _Data1, _Size1, _Op);\r\n                                    if (_Pos > _Found_pos) {\r\n                                        _Found_pos = _Pos;\r\n                                    }\r\n                                }\r\n                            };\r\n\r\n                            const void* _Cur_needle = _Needle;\r\n                            do {\r\n                                const __m128i _Data2 = _mm_loadu_si128(static_cast<const __m128i*>(_Cur_needle));\r\n                                _Step(_Data2, _Part_size_el, _Data1, _Size1);\r\n                                _Advance_bytes(_Cur_needle, 16);\r\n                            } while (_Cur_needle != _Last_needle);\r\n\r\n                            if (_Last_needle_length_el != 0) {\r\n                                _Step(_Last_needle_val, _Last_needle_length_el, _Data1, _Size1);\r\n                            }\r\n\r\n                            return _Found_pos;\r\n                        } else {\r\n                            constexpr int _Op_mask = _Op_base | _SIDD_BIT_MASK;\r\n\r\n                            const void* _Cur_needle = _Needle;\r\n\r\n                            const __m128i _Data2_first = _mm_loadu_si128(static_cast<const __m128i*>(_Cur_needle));\r\n\r\n                            __m128i _Found = _mm_cmpestrm(_Data2_first, _Part_size_el, _Data1, _Size1, _Op_mask);\r\n\r\n                            while (_Cur_needle != _Last_needle) {\r\n                                const __m128i _Data2 = _mm_loadu_si128(static_cast<const __m128i*>(_Cur_needle));\r\n                                const __m128i _Found_part =\r\n                                    _mm_cmpestrm(_Data2, _Part_size_el, _Data1, _Size1, _Op_mask);\r\n                                _Found = _mm_and_si128(_Found, _Found_part);\r\n                                _Advance_bytes(_Cur_needle, 16);\r\n                            }\r\n\r\n                            if (_Last_needle_length_el != 0) {\r\n                                const __m128i _Found_part =\r\n                                    _mm_cmpestrm(_Last_needle_val, _Last_needle_length_el, _Data1, _Size1, _Op_mask);\r\n                                _Found = _mm_and_si128(_Found, _Found_part);\r\n                                _Advance_bytes(_Cur_needle, 16);\r\n                            }\r\n\r\n                            const unsigned int _Bingo = _mm_cvtsi128_si32(_Found);\r\n                            int _Found_pos            = _Not_found;\r\n\r\n                            if (_Bingo != 0) {\r\n                                unsigned long _Tmp;\r\n                                // CodeQL [SM02313] _Tmp is always initialized: we just tested `if (_Bingo != 0)`.\r\n                                _BitScanReverse(&_Tmp, _Bingo);\r\n                                _Found_pos = static_cast<int>(_Tmp);\r\n                            }\r\n\r\n                            return _Found_pos;\r\n                        }\r\n                    };\r\n#pragma warning(pop)\r\n\r\n                    while (_Cur != _Stop_at) {\r\n                        _Rewind_bytes(_Cur, 16);\r\n                        const int _Found_pos =\r\n                            _Test_whole_needle(_mm_loadu_si128(static_cast<const __m128i*>(_Cur)), _Part_size_el);\r\n\r\n                        if (_Found_pos != _Not_found) {\r\n                            return _Byte_length(_Haystack, _Cur) / sizeof(_Ty) + _Found_pos;\r\n                        }\r\n                    }\r\n\r\n                    if (_Last_part_size != 0) {\r\n                        const int _Last_part_size_el = static_cast<int>(_Last_part_size / sizeof(_Ty));\r\n                        __m128i _Data1;\r\n\r\n                        if (_Haystack_length_bytes >= 16) {\r\n                            _Data1 = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Haystack));\r\n                        } else {\r\n                            alignas(16) uint8_t _Tmp1[16];\r\n                            memcpy(_Tmp1, _Haystack, _Haystack_length_bytes);\r\n                            _Data1 = _mm_load_si128(reinterpret_cast<const __m128i*>(_Tmp1));\r\n                        }\r\n\r\n                        return _Test_whole_needle(_Data1, _Last_part_size_el);\r\n                    }\r\n\r\n                    return static_cast<size_t>(_Not_found);\r\n                }\r\n            }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n            template <class _Ty, _Predicate _Pred>\r\n            size_t __stdcall _Dispatch_pos(const void* const _First1, const size_t _Count1, const void* const _First2,\r\n                const size_t _Count2) noexcept {\r\n                using namespace _Bitmap_impl;\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n                if (_Use_bitmap_neon<_Ty>(_Count1, _Count2)) {\r\n                    if constexpr (sizeof(_Ty) < 8) {\r\n                        uint8x16x2_t _Bitmap;\r\n                        if (_Bitmap_details::_Make_bitmap<_Ty>(_First2, _Count2, _Bitmap)) {\r\n                            return _Impl_last_neon<_Ty, _Pred>(_First1, _Count1, _Bitmap);\r\n                        }\r\n                    }\r\n                } else if (_Use_bitmap_scalar<_Ty>(_Count1, _Count2)) {\r\n                    alignas(32) _Scalar_table_t _Table = {};\r\n                    if (_Build_scalar_table<_Ty>(_First2, _Count2, _Table)) {\r\n                        return _Impl_last_scalar<_Ty, _Pred>(_First1, _Count1, _Table);\r\n                    }\r\n                }\r\n\r\n                // For _None_of, it can be faster to Find Haystack elements in Needle for longer Needles or\r\n                // non-vectorized Haystack lengths.\r\n                if constexpr (_Pred == _Predicate::_None_of && sizeof(_Ty) >= 2) {\r\n                    static_assert(sizeof(_Ty) == 2);\r\n\r\n                    // Heuristic of Haystack smaller than Neon width, or Needle at least twice the Neon width.\r\n                    if (_Count1 * sizeof(_Ty) < 16 || _Count2 * sizeof(_Ty) >= 32) {\r\n                        return _Fallback_find_not_2(_First1, _Count1, _First2, _Count2);\r\n                    }\r\n                }\r\n\r\n                return _Shuffle_impl_dispatch<_Ty, _Pred>(_First1, _Count1, _First2, _Count2);\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n                if (_Use_sse42()) {\r\n                    const auto _Strat = _Pick_strategy<_Ty>(_Count1, _Count2, _Use_avx2());\r\n\r\n                    if (_Strat == _Strategy::_Vector_bitmap) {\r\n                        if (_Can_fit_256_bits_sse(static_cast<const _Ty*>(_First2), _Count2)) {\r\n                            return _Impl_last_avx<_Ty, _Pred>(_First1, _Count1, _First2, _Count2);\r\n                        }\r\n                    } else if (_Strat == _Strategy::_Scalar_bitmap) {\r\n                        if (_Can_fit_256_bits_sse(static_cast<const _Ty*>(_First2), _Count2)) {\r\n                            alignas(32) _Scalar_table_t _Table = {};\r\n                            _Build_scalar_table_no_check<_Ty>(_First2, _Count2, _Table);\r\n                            return _Impl_last_scalar<_Ty, _Pred>(_First1, _Count1, _Table);\r\n                        }\r\n                    }\r\n\r\n                    return _Impl<_Ty, _Pred>(_First1, _Count1, _First2, _Count2);\r\n                } else {\r\n                    alignas(32) _Scalar_table_t _Table = {};\r\n                    if (_Build_scalar_table<_Ty>(_First2, _Count2, _Table)) {\r\n                        return _Impl_last_scalar<_Ty, _Pred>(_First1, _Count1, _Table);\r\n                    }\r\n\r\n                    return _Fallback<_Ty, _Pred>(_First1, _Count1, _First2, _Count2);\r\n                }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n            }\r\n        } // namespace _Last_of\r\n    } // namespace _Find_meow_of\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\nconst void* __stdcall __std_find_first_of_trivial_1(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const void* const _Last2) noexcept {\r\n    return _Find_meow_of::_First_of::_Dispatch_ptr<uint8_t>(_First1, _Last1, _First2, _Last2);\r\n}\r\n\r\nconst void* __stdcall __std_find_first_of_trivial_2(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const void* const _Last2) noexcept {\r\n    return _Find_meow_of::_First_of::_Dispatch_ptr<uint16_t>(_First1, _Last1, _First2, _Last2);\r\n}\r\n\r\nconst void* __stdcall __std_find_first_of_trivial_4(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const void* const _Last2) noexcept {\r\n    return _Find_meow_of::_First_of::_Dispatch_ptr<uint32_t>(_First1, _Last1, _First2, _Last2);\r\n}\r\n\r\nconst void* __stdcall __std_find_first_of_trivial_8(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const void* const _Last2) noexcept {\r\n    return _Find_meow_of::_First_of::_Dispatch_ptr<uint64_t>(_First1, _Last1, _First2, _Last2);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_find_first_of_trivial_pos_1(const void* const _Haystack,\r\n    const size_t _Haystack_length, const void* const _Needle, const size_t _Needle_length) noexcept {\r\n    return _Find_meow_of::_First_of::_Dispatch_pos<uint8_t, _Find_meow_of::_Predicate::_Any_of>(\r\n        _Haystack, _Haystack_length, _Needle, _Needle_length);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_find_first_of_trivial_pos_2(const void* const _Haystack,\r\n    const size_t _Haystack_length, const void* const _Needle, const size_t _Needle_length) noexcept {\r\n    return _Find_meow_of::_First_of::_Dispatch_pos<uint16_t, _Find_meow_of::_Predicate::_Any_of>(\r\n        _Haystack, _Haystack_length, _Needle, _Needle_length);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_find_first_of_trivial_pos_4(const void* const _Haystack,\r\n    const size_t _Haystack_length, const void* const _Needle, const size_t _Needle_length) noexcept {\r\n    return _Find_meow_of::_First_of::_Dispatch_pos<uint32_t, _Find_meow_of::_Predicate::_Any_of>(\r\n        _Haystack, _Haystack_length, _Needle, _Needle_length);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_find_first_of_trivial_pos_8(const void* const _Haystack,\r\n    const size_t _Haystack_length, const void* const _Needle, const size_t _Needle_length) noexcept {\r\n    return _Find_meow_of::_First_of::_Dispatch_pos<uint64_t, _Find_meow_of::_Predicate::_Any_of>(\r\n        _Haystack, _Haystack_length, _Needle, _Needle_length);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_find_last_of_trivial_pos_1(const void* const _Haystack,\r\n    const size_t _Haystack_length, const void* const _Needle, const size_t _Needle_length) noexcept {\r\n    return _Find_meow_of::_Last_of::_Dispatch_pos<uint8_t, _Find_meow_of::_Predicate::_Any_of>(\r\n        _Haystack, _Haystack_length, _Needle, _Needle_length);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_find_last_of_trivial_pos_2(const void* const _Haystack,\r\n    const size_t _Haystack_length, const void* const _Needle, const size_t _Needle_length) noexcept {\r\n    return _Find_meow_of::_Last_of::_Dispatch_pos<uint16_t, _Find_meow_of::_Predicate::_Any_of>(\r\n        _Haystack, _Haystack_length, _Needle, _Needle_length);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_find_first_not_of_trivial_pos_1(const void* const _Haystack,\r\n    const size_t _Haystack_length, const void* const _Needle, const size_t _Needle_length) noexcept {\r\n    return _Find_meow_of::_First_of::_Dispatch_pos<uint8_t, _Find_meow_of::_Predicate::_None_of>(\r\n        _Haystack, _Haystack_length, _Needle, _Needle_length);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_find_first_not_of_trivial_pos_2(const void* const _Haystack,\r\n    const size_t _Haystack_length, const void* const _Needle, const size_t _Needle_length) noexcept {\r\n    return _Find_meow_of::_First_of::_Dispatch_pos<uint16_t, _Find_meow_of::_Predicate::_None_of>(\r\n        _Haystack, _Haystack_length, _Needle, _Needle_length);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_find_last_not_of_trivial_pos_1(const void* const _Haystack,\r\n    const size_t _Haystack_length, const void* const _Needle, const size_t _Needle_length) noexcept {\r\n    return _Find_meow_of::_Last_of::_Dispatch_pos<uint8_t, _Find_meow_of::_Predicate::_None_of>(\r\n        _Haystack, _Haystack_length, _Needle, _Needle_length);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_find_last_not_of_trivial_pos_2(const void* const _Haystack,\r\n    const size_t _Haystack_length, const void* const _Needle, const size_t _Needle_length) noexcept {\r\n    return _Find_meow_of::_Last_of::_Dispatch_pos<uint16_t, _Find_meow_of::_Predicate::_None_of>(\r\n        _Haystack, _Haystack_length, _Needle, _Needle_length);\r\n}\r\n\r\n} // extern \"C\"\r\n\r\nnamespace {\r\n    namespace _Find_seq {\r\n        // The caveat in the 'search' and 'find_end' optimization is that this pattern would be inefficient:\r\n        //   for (auto i = hay_begin; i != hay_end; ++i) {\r\n        //      if (memcmp(i, needle, size) == 0) { return i; }\r\n        //   }\r\n        // because the mismatch usually happens early, so memcmp would typically be slower than a simple loop.\r\n        //\r\n        // The solution is:\r\n        //  - in outer loop, do the 'find'-like thing, but preserve the setup (i.e. vector with first needle element)\r\n        //  - in inner loop, try to compare with readily available needle in a register,\r\n        //    or at least with the needle start, if the needle is long, to fail early mismatches early.\r\n        // Or use SSE4.2 _mm_cmpestri, which can be good too, especially for 8-bit forward search.\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        struct _Find_seq_traits_neon {\r\n            static constexpr size_t _Vec_size = 16;\r\n            using _Guard                      = char;\r\n\r\n            static uint64_t _Tail_bitmask(const size_t _Tail_bytes) noexcept {\r\n                // _Tail_bytes in [0,16].\r\n                if (_Tail_bytes == 16) {\r\n                    return ~0ull;\r\n                }\r\n                return (uint64_t{1} << (4 * _Tail_bytes)) - 1;\r\n            }\r\n\r\n            static uint64_t _Bsf(const uint64_t _Mask) noexcept {\r\n                return _Finding::_Get_first_h_pos_q(_Mask);\r\n            }\r\n\r\n            static uint64_t _Bsr(const uint64_t _Mask) noexcept {\r\n                return _Finding::_Get_last_h_pos_q(_Mask);\r\n            }\r\n\r\n            static uint64_t _Bingo_next(const uint64_t _Bingo, const uint64_t _Pos) noexcept {\r\n                return _Bingo ^ (uint64_t{0xF} << (_Pos << 2));\r\n            }\r\n\r\n            static __forceinline bool _Memcmp_inline_eq(\r\n                const void* const _First, const void* const _Second, const size_t _Count) noexcept {\r\n                const auto _First_b  = static_cast<const uint8_t*>(_First);\r\n                const auto _Second_b = static_cast<const uint8_t*>(_Second);\r\n\r\n                size_t _Ix = 0;\r\n\r\n                if (_Count >= 16) {\r\n                    const size_t _Vec_end = _Count & ~size_t{0x1F};\r\n\r\n                    for (; _Ix < _Vec_end; _Ix += 32) {\r\n                        const auto _Cmp1    = veorq_u8(vld1q_u8(_First_b + _Ix), vld1q_u8(_Second_b + _Ix));\r\n                        const auto _Cmp2    = veorq_u8(vld1q_u8(_First_b + _Ix + 16), vld1q_u8(_Second_b + _Ix + 16));\r\n                        const auto _Combine = vpmaxq_u8(_Cmp1, _Cmp2);\r\n                        const uint64_t _Any = vgetq_lane_u64(vreinterpretq_u64_u8(vpmaxq_u8(_Combine, _Combine)), 0);\r\n                        if (_Any != 0) {\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n                    if ((_Count & size_t{0x10}) != 0) { // use original _Count; we've read only 32-byte chunks\r\n                        const auto _Cmp     = veorq_u8(vld1q_u8(_First_b + _Ix), vld1q_u8(_Second_b + _Ix));\r\n                        const uint64_t _Any = vgetq_lane_u64(vreinterpretq_u64_u8(vpmaxq_u8(_Cmp, _Cmp)), 0);\r\n                        if (_Any != 0) {\r\n                            return false;\r\n                        }\r\n\r\n                        _Ix += 16;\r\n                    }\r\n                }\r\n\r\n                if (_Ix < _Count) {\r\n                    // Overlapped Neon path avoids need for scalar tail.\r\n                    const ptrdiff_t _Ix_tail = static_cast<ptrdiff_t>(_Count) - 16;\r\n                    const auto _Cmp          = veorq_u8(vld1q_u8(_First_b + _Ix_tail), vld1q_u8(_Second_b + _Ix_tail));\r\n                    const uint64_t _Any      = vgetq_lane_u64(vreinterpretq_u64_u8(vpmaxq_u8(_Cmp, _Cmp)), 0);\r\n                    if (_Any != 0) {\r\n                        return false;\r\n                    }\r\n                }\r\n\r\n                return true;\r\n            }\r\n        };\r\n\r\n        struct _Find_seq_traits_neon_1 : _Find_seq_traits_neon {\r\n            using _Vec_t = uint8x16_t;\r\n\r\n            static _Vec_t _Load(const void* const _Src) noexcept {\r\n                return vld1q_u8(static_cast<const uint8_t*>(_Src));\r\n            }\r\n\r\n            static _Vec_t _Load_tail(const void* const _Src, const size_t _Size_bytes, _Vec_t = {}) noexcept {\r\n                unsigned char _Tmp[16];\r\n                memcpy(_Tmp, _Src, _Size_bytes);\r\n                return _Load(_Tmp);\r\n            }\r\n\r\n            static _Vec_t _Broadcast(const _Vec_t _Data) noexcept {\r\n                return vdupq_n_u8(vgetq_lane_u8(_Data, 0));\r\n            }\r\n\r\n            static uint64_t _Cmp(const _Vec_t _Lhs, const _Vec_t _Rhs) noexcept {\r\n                return _Finding::_Find_traits_1::_Mask_q(vceqq_u8(_Lhs, _Rhs));\r\n            }\r\n\r\n            static _Vec_t _Xor(const _Vec_t _Val1, const _Vec_t _Val2) noexcept {\r\n                return veorq_u8(_Val1, _Val2);\r\n            }\r\n\r\n            static bool _TestZ(const _Vec_t _Val) noexcept {\r\n                const auto _Msk = vgetq_lane_u64(vreinterpretq_u64_u8(vpmaxq_u8(_Val, _Val)), 0);\r\n                return _Msk == 0;\r\n            }\r\n\r\n            static bool _TestZ(const _Vec_t _Val, const _Vec_t _Mask) noexcept {\r\n                return _TestZ(vandq_u8(_Val, _Mask));\r\n            }\r\n\r\n            static uint8x16_t _Mask(const size_t _Count_in_bytes) noexcept {\r\n                // _Count_in_bytes must be within [0,16].\r\n                static constexpr uint32_t _Tail_masks[8] = {~0u, ~0u, ~0u, ~0u, 0, 0, 0, 0};\r\n                const auto _Base                         = reinterpret_cast<const uint8_t*>(_Tail_masks);\r\n                return vld1q_u8(_Base + (16 - _Count_in_bytes));\r\n            }\r\n        };\r\n\r\n        struct _Find_seq_traits_neon_2 : _Find_seq_traits_neon {\r\n            using _Vec_t = uint16x8_t;\r\n\r\n            static _Vec_t _Load(const void* const _Src) noexcept {\r\n                return vld1q_u16(static_cast<const uint16_t*>(_Src));\r\n            }\r\n\r\n            static _Vec_t _Load_tail(const void* const _Src, const size_t _Size_bytes, _Vec_t = {}) noexcept {\r\n                unsigned char _Tmp[16];\r\n                memcpy(_Tmp, _Src, _Size_bytes);\r\n                return _Load(_Tmp);\r\n            }\r\n\r\n            static _Vec_t _Broadcast(const _Vec_t _Data) noexcept {\r\n                return vdupq_n_u16(vgetq_lane_u16(_Data, 0));\r\n            }\r\n\r\n            static uint64_t _Cmp(const _Vec_t _Lhs, const _Vec_t _Rhs) noexcept {\r\n                return _Finding::_Find_traits_2::_Mask_q(vceqq_u16(_Lhs, _Rhs)) & 0x0F0F0F0F0F0F0F0F;\r\n            }\r\n\r\n            static _Vec_t _Xor(const _Vec_t _Val1, const _Vec_t _Val2) noexcept {\r\n                return veorq_u16(_Val1, _Val2);\r\n            }\r\n\r\n            static bool _TestZ(const _Vec_t _Val) noexcept {\r\n                return _Find_seq_traits_neon_1::_TestZ(vreinterpretq_u8_u16(_Val));\r\n            }\r\n\r\n            static bool _TestZ(const _Vec_t _Val, const _Vec_t _Mask) noexcept {\r\n                return _TestZ(vandq_u16(_Val, _Mask));\r\n            }\r\n\r\n            static _Vec_t _Mask(const size_t _Count_in_bytes) noexcept {\r\n                return vreinterpretq_u16_u8(_Find_seq_traits_neon_1::_Mask(_Count_in_bytes));\r\n            }\r\n        };\r\n\r\n        struct _Find_seq_traits_neon_4 : _Find_seq_traits_neon {\r\n            using _Vec_t = uint32x4_t;\r\n\r\n            static _Vec_t _Load(const void* const _Src) noexcept {\r\n                return vld1q_u32(static_cast<const uint32_t*>(_Src));\r\n            }\r\n\r\n            static _Vec_t _Load_tail(const void* const _Src, const size_t _Size_bytes, _Vec_t = {}) noexcept {\r\n                unsigned char _Tmp[16];\r\n                memcpy(_Tmp, _Src, _Size_bytes);\r\n                return _Load(_Tmp);\r\n            }\r\n\r\n            static _Vec_t _Broadcast(const _Vec_t _Data) noexcept {\r\n                return vdupq_n_u32(vgetq_lane_u32(_Data, 0));\r\n            }\r\n\r\n            static uint64_t _Cmp(const _Vec_t _Lhs, const _Vec_t _Rhs) noexcept {\r\n                return _Finding::_Find_traits_4::_Mask_q(vceqq_u32(_Lhs, _Rhs)) & 0x000F000F000F000F;\r\n            }\r\n\r\n            static _Vec_t _Xor(const _Vec_t _Val1, const _Vec_t _Val2) noexcept {\r\n                return veorq_u32(_Val1, _Val2);\r\n            }\r\n\r\n            static bool _TestZ(const _Vec_t _Val) noexcept {\r\n                return _Find_seq_traits_neon_1::_TestZ(vreinterpretq_u8_u32(_Val));\r\n            }\r\n\r\n            static bool _TestZ(const _Vec_t _Val, const _Vec_t _Mask) noexcept {\r\n                return _TestZ(vandq_u32(_Val, _Mask));\r\n            }\r\n\r\n            static _Vec_t _Mask(const size_t _Count_in_bytes) noexcept {\r\n                return vreinterpretq_u32_u8(_Find_seq_traits_neon_1::_Mask(_Count_in_bytes));\r\n            }\r\n        };\r\n\r\n        struct _Find_seq_traits_neon_8 : _Find_seq_traits_neon {\r\n            using _Vec_t = uint64x2_t;\r\n\r\n            static _Vec_t _Load(const void* const _Src) noexcept {\r\n                return vld1q_u64(static_cast<const uint64_t*>(_Src));\r\n            }\r\n\r\n            static _Vec_t _Load_tail(const void* const _Src, const size_t _Size_bytes, _Vec_t = {}) noexcept {\r\n                unsigned char _Tmp[16];\r\n                memcpy(_Tmp, _Src, _Size_bytes);\r\n                return _Load(_Tmp);\r\n            }\r\n\r\n            static _Vec_t _Broadcast(const _Vec_t _Data) noexcept {\r\n                return vdupq_n_u64(vgetq_lane_u64(_Data, 0));\r\n            }\r\n\r\n            static uint64_t _Cmp(const _Vec_t _Lhs, const _Vec_t _Rhs) noexcept {\r\n                return _Finding::_Find_traits_8::_Mask_q(vceqq_u64(_Lhs, _Rhs)) & 0x0000000F0000000F;\r\n            }\r\n\r\n            static _Vec_t _Xor(const _Vec_t _Val1, const _Vec_t _Val2) noexcept {\r\n                return veorq_u64(_Val1, _Val2);\r\n            }\r\n\r\n            static bool _TestZ(const _Vec_t _Val) noexcept {\r\n                return _Find_seq_traits_neon_1::_TestZ(vreinterpretq_u8_u64(_Val));\r\n            }\r\n\r\n            static bool _TestZ(const _Vec_t _Val, const _Vec_t _Mask) noexcept {\r\n                return _TestZ(vandq_u64(_Val, _Mask));\r\n            }\r\n\r\n            static _Vec_t _Mask(const size_t _Count_in_bytes) noexcept {\r\n                return vreinterpretq_u64_u8(_Find_seq_traits_neon_1::_Mask(_Count_in_bytes));\r\n            }\r\n        };\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        struct _Find_seq_traits_avx {\r\n            using _Guard = _Zeroupper_on_exit;\r\n\r\n            static constexpr size_t _Vec_size = 32;\r\n\r\n            static unsigned long _Bingo_next(const unsigned long _Bingo, const unsigned int _Pos) noexcept {\r\n                return _Bingo ^ (1 << _Pos);\r\n            }\r\n\r\n            static __m256i _Mask(const size_t _Count_in_bytes) noexcept {\r\n                return _Avx2_tail_mask_32(_Count_in_bytes);\r\n            }\r\n\r\n            static unsigned int _Tail_bitmask(const size_t _Tail_bytes) noexcept {\r\n                return (1 << _Tail_bytes) - 1;\r\n            }\r\n\r\n            static __m256i _Load(const void* const _Src) noexcept {\r\n                return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_Src));\r\n            }\r\n\r\n            static __m256i _Xor(const __m256i _Val1, const __m256i _Val2) noexcept {\r\n                return _mm256_xor_si256(_Val1, _Val2);\r\n            }\r\n\r\n            static bool _TestZ(const __m256i _Val) noexcept {\r\n                return _mm256_testz_si256(_Val, _Val);\r\n            }\r\n\r\n            static bool _TestZ(const __m256i _Val1, const __m256i _Val2) noexcept {\r\n                return _mm256_testz_si256(_Val1, _Val2);\r\n            }\r\n\r\n            static unsigned int _Bsf(const unsigned long _Mask) noexcept {\r\n                return _tzcnt_u32(_Mask);\r\n            }\r\n\r\n            static unsigned int _Bsr(const unsigned long _Mask) noexcept {\r\n                return 31 - _lzcnt_u32(_Mask);\r\n            }\r\n\r\n            static __forceinline bool _Memcmp_inline_eq(\r\n                const void* const _First, const void* const _Second, const size_t _Count) noexcept {\r\n                return memcmp(_First, _Second, _Count) == 0;\r\n            }\r\n        };\r\n\r\n        struct _Find_seq_traits_avx_1_2 : _Find_seq_traits_avx {\r\n            static __m256i _Load_tail(\r\n                const void* const _Src, const size_t _Size_bytes, __m256i = _mm256_undefined_si256()) noexcept {\r\n                unsigned char _Tmp[32];\r\n                memcpy(_Tmp, _Src, _Size_bytes);\r\n                return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_Tmp));\r\n            }\r\n        };\r\n\r\n        struct _Find_seq_traits_avx_4_8 : _Find_seq_traits_avx {\r\n            static __m256i _Load_tail(const void* const _Src, size_t, const __m256i _Mask) noexcept {\r\n                return _mm256_maskload_epi32(reinterpret_cast<const int*>(_Src), _Mask);\r\n            }\r\n\r\n            static __m256i _Load_tail(const void* const _Src, const size_t _Size_bytes) noexcept {\r\n                const __m256i _Mask = _Avx2_tail_mask_32(_Size_bytes);\r\n                return _mm256_maskload_epi32(reinterpret_cast<const int*>(_Src), _Mask);\r\n            }\r\n        };\r\n\r\n        struct _Find_seq_traits_avx_1 : _Find_seq_traits_avx_1_2 {\r\n            static __m256i _Broadcast(const __m256i _Data) noexcept {\r\n                return _mm256_broadcastb_epi8(_mm256_castsi256_si128(_Data));\r\n            }\r\n\r\n            static unsigned long _Cmp(const __m256i _Lhs, const __m256i _Rhs) noexcept {\r\n                return _mm256_movemask_epi8(_mm256_cmpeq_epi8(_Lhs, _Rhs));\r\n            }\r\n        };\r\n\r\n        struct _Find_seq_traits_avx_2 : _Find_seq_traits_avx_1_2 {\r\n            static __m256i _Broadcast(const __m256i _Data) noexcept {\r\n                return _mm256_broadcastw_epi16(_mm256_castsi256_si128(_Data));\r\n            }\r\n\r\n            static unsigned long _Cmp(const __m256i _Lhs, const __m256i _Rhs) noexcept {\r\n                return _mm256_movemask_epi8(_mm256_cmpeq_epi16(_Lhs, _Rhs)) & 0x55555555;\r\n            }\r\n        };\r\n\r\n        struct _Find_seq_traits_avx_4 : _Find_seq_traits_avx_4_8 {\r\n            static __m256i _Broadcast(const __m256i _Data) noexcept {\r\n                return _mm256_broadcastd_epi32(_mm256_castsi256_si128(_Data));\r\n            }\r\n\r\n            static unsigned long _Cmp(const __m256i _Lhs, const __m256i _Rhs) noexcept {\r\n                return _mm256_movemask_epi8(_mm256_cmpeq_epi32(_Lhs, _Rhs)) & 0x11111111;\r\n            }\r\n        };\r\n\r\n        struct _Find_seq_traits_avx_8 : _Find_seq_traits_avx_4_8 {\r\n            static __m256i _Broadcast(const __m256i _Data) noexcept {\r\n                return _mm256_broadcastq_epi64(_mm256_castsi256_si128(_Data));\r\n            }\r\n\r\n            static unsigned long _Cmp(const __m256i _Lhs, const __m256i _Rhs) noexcept {\r\n                return _mm256_movemask_epi8(_mm256_cmpeq_epi64(_Lhs, _Rhs)) & 0x01010101;\r\n            }\r\n        };\r\n\r\n        struct _Find_seq_traits_sse_4_8 {\r\n            using _Guard = char;\r\n\r\n            static constexpr size_t _Vec_size = 16;\r\n\r\n            static unsigned long _Bingo_next(const unsigned long _Bingo, const unsigned int _Pos) noexcept {\r\n                return _Bingo ^ (1 << _Pos);\r\n            }\r\n\r\n            static __m128i _Mask(const size_t _Count_in_bytes) noexcept {\r\n                // _Count_in_bytes must be within [0, 16].\r\n                static constexpr unsigned int _Tail_masks[8] = {~0u, ~0u, ~0u, ~0u, 0, 0, 0, 0};\r\n                return _mm_loadu_si128(reinterpret_cast<const __m128i*>(\r\n                    reinterpret_cast<const unsigned char*>(_Tail_masks) + (16 - _Count_in_bytes)));\r\n            }\r\n\r\n            static unsigned int _Tail_bitmask(const size_t _Tail_bytes) noexcept {\r\n                return (1 << _Tail_bytes) - 1;\r\n            }\r\n\r\n            static __m128i _Load(const void* const _Src) noexcept {\r\n                return _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Src));\r\n            }\r\n\r\n            static __m128i _Xor(const __m128i _Val1, const __m128i _Val2) noexcept {\r\n                return _mm_xor_si128(_Val1, _Val2);\r\n            }\r\n\r\n            static bool _TestZ(const __m128i _Val) noexcept {\r\n                return _mm_testz_si128(_Val, _Val);\r\n            }\r\n\r\n            static bool _TestZ(const __m128i _Val1, const __m128i _Val2) noexcept {\r\n                return _mm_testz_si128(_Val1, _Val2);\r\n            }\r\n\r\n            static __m128i _Load_tail(\r\n                const void* const _Src, const size_t _Size_bytes, __m128i = _mm_undefined_si128()) noexcept {\r\n                unsigned char _Tmp[16];\r\n                memcpy(_Tmp, _Src, _Size_bytes);\r\n                return _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Tmp));\r\n            }\r\n\r\n            static unsigned int _Bsf(const unsigned long _Mask) noexcept {\r\n                unsigned long _Index;\r\n                // CodeQL [SM02313] _Index is always initialized: we checked _Mask != 0 on every call site\r\n                _BitScanForward(&_Index, _Mask);\r\n                return _Index;\r\n            }\r\n\r\n            static unsigned int _Bsr(const unsigned long _Mask) noexcept {\r\n                unsigned long _Index;\r\n                // CodeQL [SM02313] _Index is always initialized: we checked _Mask != 0 on every call site\r\n                _BitScanReverse(&_Index, _Mask);\r\n                return _Index;\r\n            }\r\n\r\n            static __forceinline bool _Memcmp_inline_eq(\r\n                const void* const _First, const void* const _Second, const size_t _Count) noexcept {\r\n                return memcmp(_First, _Second, _Count) == 0;\r\n            }\r\n        };\r\n\r\n        struct _Find_seq_traits_sse_4 : _Find_seq_traits_sse_4_8 {\r\n            static __m128i _Broadcast(const __m128i _Data) noexcept {\r\n                return _mm_shuffle_epi32(_Data, _MM_SHUFFLE(0, 0, 0, 0));\r\n            }\r\n\r\n            static unsigned long _Cmp(const __m128i _Lhs, const __m128i _Rhs) noexcept {\r\n                return _mm_movemask_epi8(_mm_cmpeq_epi32(_Lhs, _Rhs)) & 0x1111;\r\n            }\r\n        };\r\n\r\n        struct _Find_seq_traits_sse_8 : _Find_seq_traits_sse_4_8 {\r\n            static __m128i _Broadcast(const __m128i _Data) noexcept {\r\n                return _mm_shuffle_epi32(_Data, _MM_SHUFFLE(1, 0, 1, 0));\r\n            }\r\n\r\n            static unsigned long _Cmp(const __m128i _Lhs, const __m128i _Rhs) noexcept {\r\n                return _mm_movemask_epi8(_mm_cmpeq_epi64(_Lhs, _Rhs)) & 0x0101;\r\n            }\r\n        };\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n        template <class _Ty>\r\n        const void* _Search_scalar_tail(const void* const _First1, const void* const _Last1, const size_t _Size_bytes_1,\r\n            const void* const _First2, const size_t _Count2, const size_t _Size_bytes_2) noexcept {\r\n            const size_t _Max_pos = _Size_bytes_1 - _Size_bytes_2 + sizeof(_Ty);\r\n\r\n            auto _Ptr1         = static_cast<const _Ty*>(_First1);\r\n            const auto _Ptr2   = static_cast<const _Ty*>(_First2);\r\n            const void* _Stop1 = _Ptr1;\r\n            _Advance_bytes(_Stop1, _Max_pos);\r\n\r\n            for (; _Ptr1 != _Stop1; ++_Ptr1) {\r\n                if (*_Ptr1 != *_Ptr2) {\r\n                    continue;\r\n                }\r\n\r\n                bool _Equal = true;\r\n\r\n                for (size_t _Idx = 1; _Idx != _Count2; ++_Idx) {\r\n                    if (_Ptr1[_Idx] != _Ptr2[_Idx]) {\r\n                        _Equal = false;\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                if (_Equal) {\r\n                    return _Ptr1;\r\n                }\r\n            }\r\n\r\n            return _Last1;\r\n        }\r\n\r\n        template <class _Ty>\r\n        const void* _Find_end_scalar_tail(const void* const _First1, const void* const _Last1,\r\n            const void* const _First2, const size_t _Count2) noexcept {\r\n            auto _Ptr1       = static_cast<const _Ty*>(_Last1) - _Count2;\r\n            const auto _Ptr2 = static_cast<const _Ty*>(_First2);\r\n\r\n            for (;;) {\r\n                if (*_Ptr1 == *_Ptr2) {\r\n                    bool _Equal = true;\r\n\r\n                    for (size_t _Idx = 1; _Idx != _Count2; ++_Idx) {\r\n                        if (_Ptr1[_Idx] != _Ptr2[_Idx]) {\r\n                            _Equal = false;\r\n                            break;\r\n                        }\r\n                    }\r\n\r\n                    if (_Equal) {\r\n                        return _Ptr1;\r\n                    }\r\n                }\r\n\r\n                if (_Ptr1 == _First1) {\r\n                    return _Last1;\r\n                }\r\n\r\n                --_Ptr1;\r\n            }\r\n        }\r\n\r\n        template <class _Traits, class _Ty>\r\n        const void* _Search_cmpeq(const void* _First1, const void* const _Last1, const void* const _First2,\r\n            const size_t _Size_bytes_2) noexcept {\r\n            [[maybe_unused]] typename _Traits::_Guard _Guard; // TRANSITION, DevCom-10331414\r\n            const size_t _Size_bytes_1 = _Byte_length(_First1, _Last1);\r\n            constexpr size_t _Vec_size = _Traits::_Vec_size;\r\n            constexpr size_t _Vec_mask = _Vec_size - 1;\r\n\r\n            if (_Size_bytes_2 <= _Vec_size) {\r\n                const auto _Mask2  = _Traits::_Mask(_Size_bytes_2);\r\n                const auto _Data2  = _Traits::_Load_tail(_First2, _Size_bytes_2, _Mask2);\r\n                const auto _Start2 = _Traits::_Broadcast(_Data2);\r\n\r\n                const void* _Stop1 = _First1;\r\n                _Advance_bytes(_Stop1, _Size_bytes_1 & ~_Vec_mask);\r\n                do {\r\n                    const auto _Data1 = _Traits::_Load(_First1);\r\n                    auto _Bingo       = _Traits::_Cmp(_Data1, _Start2);\r\n\r\n                    while (_Bingo != 0) {\r\n                        const auto _Pos = _Traits::_Bsf(_Bingo);\r\n\r\n                        const void* _Match = _First1;\r\n                        _Advance_bytes(_Match, _Pos);\r\n\r\n                        decltype(_Traits::_Load(_Match)) _Cmp;\r\n                        if (const size_t _Left_match = _Byte_length(_Match, _Last1); _Left_match >= _Vec_size) {\r\n                            const auto _Match_val = _Traits::_Load(_Match);\r\n                            _Cmp                  = _Traits::_Xor(_Data2, _Match_val);\r\n                        } else if (_Left_match >= _Size_bytes_2) {\r\n                            const auto _Match_val = _Traits::_Load_tail(_Match, _Left_match);\r\n                            _Cmp                  = _Traits::_Xor(_Data2, _Match_val);\r\n                        } else {\r\n                            break;\r\n                        }\r\n\r\n                        if (_Traits::_TestZ(_Cmp, _Mask2)) {\r\n                            return _Match;\r\n                        }\r\n\r\n                        _Bingo = _Traits::_Bingo_next(_Bingo, _Pos);\r\n                    }\r\n\r\n                    _Advance_bytes(_First1, _Vec_size);\r\n                } while (_First1 != _Stop1);\r\n\r\n                if (const size_t _Left1 = _Byte_length(_First1, _Last1); _Left1 >= _Size_bytes_2) {\r\n                    const auto _Data1 = _Traits::_Load_tail(_First1, _Left1);\r\n                    auto _Bingo       = _Traits::_Cmp(_Data1, _Start2);\r\n\r\n                    while (_Bingo != 0) {\r\n                        const auto _Pos = _Traits::_Bsf(_Bingo);\r\n\r\n                        if (_Pos > _Left1 - _Size_bytes_2) {\r\n                            break;\r\n                        }\r\n\r\n                        const void* _Match = _First1;\r\n                        _Advance_bytes(_Match, _Pos);\r\n\r\n                        const size_t _Left_match = _Byte_length(_Match, _Last1);\r\n                        const auto _Match_val    = _Traits::_Load_tail(_Match, _Left_match);\r\n                        const auto _Cmp          = _Traits::_Xor(_Data2, _Match_val);\r\n\r\n                        if (_Traits::_TestZ(_Cmp, _Mask2)) {\r\n                            return _Match;\r\n                        }\r\n\r\n                        _Bingo = _Traits::_Bingo_next(_Bingo, _Pos);\r\n                    }\r\n                }\r\n\r\n                return _Last1;\r\n            } else { // _Size_bytes_2 is greater than _Vec_size bytes\r\n                const auto _Data2  = _Traits::_Load(_First2);\r\n                const auto _Start2 = _Traits::_Broadcast(_Data2);\r\n\r\n                const size_t _Max_pos = _Size_bytes_1 - _Size_bytes_2;\r\n\r\n                const void* _Stop1 = _First1;\r\n                _Advance_bytes(_Stop1, _Max_pos);\r\n\r\n                const void* _Tail2 = _First2;\r\n                _Advance_bytes(_Tail2, _Vec_size);\r\n\r\n                do {\r\n                    const auto _Data1 = _Traits::_Load(_First1);\r\n                    auto _Bingo       = _Traits::_Cmp(_Data1, _Start2);\r\n\r\n                    while (_Bingo != 0) {\r\n                        const auto _Pos = _Traits::_Bsf(_Bingo);\r\n\r\n                        const void* _Match = _First1;\r\n                        _Advance_bytes(_Match, _Pos);\r\n\r\n                        if (_Match > _Stop1) {\r\n                            break; // Oops, doesn't fit\r\n                        }\r\n\r\n                        const auto _Match_val = _Traits::_Load(_Match);\r\n                        const auto _Cmp       = _Traits::_Xor(_Data2, _Match_val);\r\n\r\n                        if (_Traits::_TestZ(_Cmp)) {\r\n                            const void* _Tail1 = _Match;\r\n                            _Advance_bytes(_Tail1, _Vec_size);\r\n\r\n                            if (_Traits::_Memcmp_inline_eq(_Tail1, _Tail2, _Size_bytes_2 - _Vec_size)) {\r\n                                return _Match;\r\n                            }\r\n                        }\r\n\r\n                        _Bingo = _Traits::_Bingo_next(_Bingo, _Pos);\r\n                    }\r\n\r\n                    _Advance_bytes(_First1, _Vec_size);\r\n                } while (_First1 <= _Stop1);\r\n\r\n                return _Last1;\r\n            }\r\n        }\r\n\r\n        template <class _Traits, class _Ty>\r\n        const void* _Find_end_cmpeq(const void* const _First1, const void* const _Last1, const void* const _First2,\r\n            const size_t _Size_bytes_2) noexcept {\r\n            [[maybe_unused]] typename _Traits::_Guard _Guard; // TRANSITION, DevCom-10331414\r\n            const size_t _Size_bytes_1 = _Byte_length(_First1, _Last1);\r\n            constexpr size_t _Vec_size = _Traits::_Vec_size;\r\n            constexpr size_t _Vec_mask = _Vec_size - 1;\r\n\r\n            if (_Size_bytes_2 <= _Vec_size) {\r\n                const auto _Needle_fit_mask = _Traits::_Tail_bitmask(_Traits::_Vec_size - _Size_bytes_2 + sizeof(_Ty));\r\n\r\n                const void* _Stop1 = _First1;\r\n                _Advance_bytes(_Stop1, _Size_bytes_1 & _Vec_mask);\r\n\r\n                const auto _Mask2  = _Traits::_Mask(_Size_bytes_2);\r\n                const auto _Data2  = _Traits::_Load_tail(_First2, _Size_bytes_2, _Mask2);\r\n                const auto _Start2 = _Traits::_Broadcast(_Data2);\r\n\r\n                const void* _Mid1 = _Last1;\r\n                _Rewind_bytes(_Mid1, _Vec_size);\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4324) // structure was padded due to alignment specifier\r\n                const auto _Check_first = [=, &_Mid1](auto _Match) noexcept [[msvc::forceinline]] {\r\n                    while (_Match != 0) {\r\n                        const auto _Pos = _Traits::_Bsr(_Match);\r\n\r\n                        const void* _Tmp1 = _Mid1;\r\n                        _Advance_bytes(_Tmp1, _Pos);\r\n\r\n                        const auto _Match_data = _Traits::_Load_tail(_Tmp1, _Byte_length(_Tmp1, _Last1));\r\n                        const auto _Cmp_result = _Traits::_Xor(_Data2, _Match_data);\r\n\r\n                        if (_Traits::_TestZ(_Cmp_result, _Mask2)) {\r\n                            _Mid1 = _Tmp1;\r\n                            return true;\r\n                        }\r\n\r\n                        _Match = _Traits::_Bingo_next(_Match, _Pos);\r\n                    }\r\n\r\n                    return false;\r\n                };\r\n\r\n                const auto _Check = [=, &_Mid1](auto _Match) noexcept [[msvc::forceinline]] {\r\n                    while (_Match != 0) {\r\n                        const auto _Pos = _Traits::_Bsr(_Match);\r\n\r\n                        const void* _Tmp1 = _Mid1;\r\n                        _Advance_bytes(_Tmp1, _Pos);\r\n\r\n                        const auto _Match_data = _Traits::_Load(_Tmp1);\r\n                        const auto _Cmp_result = _Traits::_Xor(_Data2, _Match_data);\r\n\r\n                        if (_Traits::_TestZ(_Cmp_result, _Mask2)) {\r\n                            _Mid1 = _Tmp1;\r\n                            return true;\r\n                        }\r\n\r\n                        _Match = _Traits::_Bingo_next(_Match, _Pos);\r\n                    }\r\n\r\n                    return false;\r\n                };\r\n#pragma warning(pop)\r\n\r\n                // The very last part, for any match needle should fit, otherwise false match\r\n                const auto _Data1_last     = _Traits::_Load(_Mid1);\r\n                const auto _Match_last_val = _Traits::_Cmp(_Data1_last, _Start2);\r\n                if (_Check_first(_Match_last_val & _Needle_fit_mask)) {\r\n                    return _Mid1;\r\n                }\r\n\r\n                // The middle part, fit and unfit needle\r\n                while (_Mid1 != _Stop1) {\r\n                    _Rewind_bytes(_Mid1, _Vec_size);\r\n                    const auto _Data1     = _Traits::_Load(_Mid1);\r\n                    const auto _Match_val = _Traits::_Cmp(_Data1, _Start2);\r\n                    if (_Check(_Match_val)) {\r\n                        return _Mid1;\r\n                    }\r\n                }\r\n\r\n                // The first part, fit and unfit needle, mask out already processed positions\r\n                if (const size_t _Tail_bytes_1 = _Size_bytes_1 & _Vec_mask; _Tail_bytes_1 != 0) {\r\n                    _Mid1                 = _First1;\r\n                    const auto _Data1     = _Traits::_Load(_Mid1);\r\n                    const auto _Match_val = _Traits::_Cmp(_Data1, _Start2);\r\n                    if (_Match_val != 0 && _Check(_Match_val & _Traits::_Tail_bitmask(_Tail_bytes_1))) {\r\n                        return _Mid1;\r\n                    }\r\n                }\r\n\r\n                return _Last1;\r\n            } else { // _Size_bytes_2 is greater than _Vec_size bytes\r\n                const auto _Data2  = _Traits::_Load(_First2);\r\n                const auto _Start2 = _Traits::_Broadcast(_Data2);\r\n\r\n                const void* _Tail2 = _First2;\r\n                _Advance_bytes(_Tail2, _Vec_size);\r\n\r\n                const void* _Mid1 = _Last1;\r\n                _Rewind_bytes(_Mid1, _Size_bytes_2);\r\n\r\n                const size_t _Size_diff_bytes = _Size_bytes_1 - _Size_bytes_2;\r\n                const void* _Stop1            = _First1;\r\n                _Advance_bytes(_Stop1, _Size_diff_bytes & _Vec_mask);\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4324) // structure was padded due to alignment specifier\r\n                const auto _Check = [=, &_Mid1](auto _Match) noexcept [[msvc::forceinline]] {\r\n                    while (_Match != 0) {\r\n                        const auto _Pos = _Traits::_Bsr(_Match);\r\n\r\n                        const void* _Tmp1 = _Mid1;\r\n                        _Advance_bytes(_Tmp1, _Pos);\r\n\r\n                        const auto _Match_data = _Traits::_Load(_Tmp1);\r\n                        const auto _Cmp_result = _Traits::_Xor(_Data2, _Match_data);\r\n\r\n                        if (_Traits::_TestZ(_Cmp_result)) {\r\n                            const void* _Tail1 = _Tmp1;\r\n                            _Advance_bytes(_Tail1, _Vec_size);\r\n\r\n                            if (_Traits::_Memcmp_inline_eq(_Tail1, _Tail2, _Size_bytes_2 - _Vec_size)) {\r\n                                _Mid1 = _Tmp1;\r\n                                return true;\r\n                            }\r\n                        }\r\n\r\n                        _Match = _Traits::_Bingo_next(_Match, _Pos);\r\n                    }\r\n\r\n                    return false;\r\n                };\r\n#pragma warning(pop)\r\n                // The very last part, just compare, as true match must start with first symbol\r\n                const auto _Data1_last = _Traits::_Load(_Mid1);\r\n                const auto _Match_last = _Traits::_Xor(_Data2, _Data1_last);\r\n\r\n                if (_Traits::_TestZ(_Match_last)) {\r\n                    // Matched _Vec_size bytes, check the rest\r\n                    const void* _Tail1 = _Mid1;\r\n                    _Advance_bytes(_Tail1, _Vec_size);\r\n\r\n                    if (_Traits::_Memcmp_inline_eq(_Tail1, _Tail2, _Size_bytes_2 - _Vec_size)) {\r\n                        return _Mid1;\r\n                    }\r\n                }\r\n\r\n                // The main part, match all characters\r\n                while (_Mid1 != _Stop1) {\r\n                    _Rewind_bytes(_Mid1, _Vec_size);\r\n\r\n                    const auto _Data1     = _Traits::_Load(_Mid1);\r\n                    const auto _Match_val = _Traits::_Cmp(_Data1, _Start2);\r\n                    if (_Check(_Match_val)) {\r\n                        return _Mid1;\r\n                    }\r\n                }\r\n\r\n                // The first part, mask out already processed positions\r\n                if (const size_t _Tail_bytes_1 = _Size_diff_bytes & _Vec_mask; _Tail_bytes_1 != 0) {\r\n                    _Mid1                 = _First1;\r\n                    const auto _Data1     = _Traits::_Load(_Mid1);\r\n                    const auto _Match_val = _Traits::_Cmp(_Data1, _Start2);\r\n                    if (_Match_val != 0 && _Check(_Match_val & _Traits::_Tail_bitmask(_Tail_bytes_1))) {\r\n                        return _Mid1;\r\n                    }\r\n                }\r\n\r\n                return _Last1;\r\n            }\r\n        }\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        template <class _FindTraits, class _Traits, class _Ty>\r\n        const void* __stdcall _Search_impl(const void* const _First1, const void* const _Last1,\r\n            const void* const _First2, const size_t _Count2) noexcept {\r\n            if (_Count2 == 0) {\r\n                return _First1;\r\n            }\r\n\r\n            if (_Count2 == 1) {\r\n                return _Finding::_Find_impl<_FindTraits, _Finding::_Predicate::_Equal>(\r\n                    _First1, _Last1, *static_cast<const _Ty*>(_First2));\r\n            }\r\n\r\n            const size_t _Size_bytes_1 = _Byte_length(_First1, _Last1);\r\n            const size_t _Size_bytes_2 = _Count2 * sizeof(_Ty);\r\n\r\n            if (_Size_bytes_1 < _Size_bytes_2) {\r\n                return _Last1;\r\n            }\r\n\r\n            if (_Size_bytes_1 >= 16) {\r\n                return _Search_cmpeq<_Traits, _Ty>(_First1, _Last1, _First2, _Size_bytes_2);\r\n            }\r\n\r\n            return _Search_scalar_tail<_Ty>(_First1, _Last1, _Size_bytes_1, _First2, _Count2, _Size_bytes_2);\r\n        }\r\n\r\n        template <class _FindTraits, class _Traits, class _Ty>\r\n        const void* __stdcall _Find_end_impl(const void* const _First1, const void* const _Last1,\r\n            const void* const _First2, const size_t _Count2) noexcept {\r\n            if (_Count2 == 0) {\r\n                return _Last1;\r\n            }\r\n\r\n            if (_Count2 == 1) {\r\n                return _Finding::_Find_last_impl<_FindTraits, _Finding::_Predicate::_Equal>(\r\n                    _First1, _Last1, *static_cast<const _Ty*>(_First2));\r\n            }\r\n\r\n            const size_t _Size_bytes_1 = _Byte_length(_First1, _Last1);\r\n            const size_t _Size_bytes_2 = _Count2 * sizeof(_Ty);\r\n\r\n            if (_Size_bytes_1 < _Size_bytes_2) {\r\n                return _Last1;\r\n            }\r\n\r\n            if (_Size_bytes_1 >= 16) {\r\n                return _Find_end_cmpeq<_Traits, _Ty>(_First1, _Last1, _First2, _Size_bytes_2);\r\n            }\r\n\r\n            return _Find_end_scalar_tail<_Ty>(_First1, _Last1, _First2, _Count2);\r\n        }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        template <class _FindTraits, class _Traits_avx, class _Traits_sse, class _Ty>\r\n        const void* __stdcall _Search_impl(\r\n            const void* _First1, const void* const _Last1, const void* const _First2, const size_t _Count2) noexcept {\r\n            if (_Count2 == 0) {\r\n                return _First1;\r\n            }\r\n\r\n            if (_Count2 == 1) {\r\n                return _Finding::_Find_impl<_FindTraits, _Finding::_Predicate::_Equal>(\r\n                    _First1, _Last1, *static_cast<const _Ty*>(_First2));\r\n            }\r\n\r\n            const size_t _Size_bytes_1 = _Byte_length(_First1, _Last1);\r\n            const size_t _Size_bytes_2 = _Count2 * sizeof(_Ty);\r\n\r\n            if (_Size_bytes_1 < _Size_bytes_2) {\r\n                return _Last1;\r\n            }\r\n\r\n            // The AVX2 path for 8-bit elements is not necessarily more efficient than the SSE4.2 cmpestri path\r\n            if constexpr (sizeof(_Ty) != 1) {\r\n                if (_Use_avx2() && _Size_bytes_1 >= 32) {\r\n                    return _Search_cmpeq<_Traits_avx, _Ty>(_First1, _Last1, _First2, _Size_bytes_2);\r\n                }\r\n            }\r\n\r\n            if (_Use_sse42() && _Size_bytes_1 >= 16) {\r\n                if constexpr (sizeof(_Ty) >= 4) {\r\n                    return _Search_cmpeq<_Traits_sse, _Ty>(_First1, _Last1, _First2, _Size_bytes_2);\r\n                } else {\r\n                    constexpr int _Op =\r\n                        (sizeof(_Ty) == 1 ? _SIDD_UBYTE_OPS : _SIDD_UWORD_OPS) | _SIDD_CMP_EQUAL_ORDERED;\r\n                    constexpr int _Part_size_el = sizeof(_Ty) == 1 ? 16 : 8;\r\n\r\n                    if (_Size_bytes_2 <= 16) {\r\n                        const int _Size_el_2 = static_cast<int>(_Size_bytes_2 / sizeof(_Ty));\r\n\r\n                        const int _Max_full_match_pos = _Part_size_el - _Size_el_2;\r\n\r\n                        alignas(16) uint8_t _Tmp2[16];\r\n                        memcpy(_Tmp2, _First2, _Size_bytes_2);\r\n                        const __m128i _Data2 = _mm_load_si128(reinterpret_cast<const __m128i*>(_Tmp2));\r\n\r\n                        const void* _Stop1 = _First1;\r\n                        _Advance_bytes(_Stop1, _Size_bytes_1 - 16);\r\n\r\n                        do {\r\n                            const __m128i _Data1 = _mm_loadu_si128(static_cast<const __m128i*>(_First1));\r\n\r\n                            if (!_mm_cmpestrc(_Data2, _Size_el_2, _Data1, _Part_size_el, _Op)) {\r\n                                _Advance_bytes(_First1, 16); // No matches, next.\r\n                            } else {\r\n                                const int _Pos = _mm_cmpestri(_Data2, _Size_el_2, _Data1, _Part_size_el, _Op);\r\n                                _Advance_bytes(_First1, _Pos * sizeof(_Ty));\r\n                                if (_Pos <= _Max_full_match_pos) {\r\n                                    // Full match. Return this match.\r\n                                    return _First1;\r\n                                }\r\n                                // Partial match. Search again from the match start. Will return it if it is full.\r\n                            }\r\n                        } while (_First1 <= _Stop1);\r\n\r\n                        const size_t _Size_bytes_1_tail = _Byte_length(_First1, _Last1);\r\n                        if (_Size_bytes_1_tail != 0) {\r\n                            const int _Size_el_1_tail = static_cast<int>(_Size_bytes_1_tail / sizeof(_Ty));\r\n\r\n                            alignas(16) uint8_t _Tmp1[16];\r\n                            memcpy(_Tmp1, _First1, _Size_bytes_1_tail);\r\n                            const __m128i _Data1 = _mm_load_si128(reinterpret_cast<const __m128i*>(_Tmp1));\r\n\r\n                            if (_mm_cmpestrc(_Data2, _Size_el_2, _Data1, _Size_el_1_tail, _Op)) {\r\n                                const int _Pos = _mm_cmpestri(_Data2, _Size_el_2, _Data1, _Size_el_1_tail, _Op);\r\n                                _Advance_bytes(_First1, _Pos * sizeof(_Ty));\r\n                                // Full match because size is less than 16. Return this match.\r\n                                return _First1;\r\n                            }\r\n                        }\r\n\r\n                        return _Last1;\r\n                    } else { // _Size_bytes_2 is greater than 16 bytes\r\n                        const __m128i _Data2  = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_First2));\r\n                        const size_t _Max_pos = _Size_bytes_1 - _Size_bytes_2;\r\n\r\n                        const void* _Stop1 = _First1;\r\n                        _Advance_bytes(_Stop1, _Max_pos);\r\n\r\n                        const void* _Tail2 = _First2;\r\n                        _Advance_bytes(_Tail2, 16);\r\n\r\n                        do {\r\n                            const __m128i _Data1 = _mm_loadu_si128(static_cast<const __m128i*>(_First1));\r\n                            if (!_mm_cmpestrc(_Data2, _Part_size_el, _Data1, _Part_size_el, _Op)) {\r\n                                _Advance_bytes(_First1, 16); // No matches, next.\r\n                            } else {\r\n                                const int _Pos = _mm_cmpestri(_Data2, _Part_size_el, _Data1, _Part_size_el, _Op);\r\n\r\n                                bool _Match_1st_16 = true;\r\n\r\n                                if (_Pos != 0) {\r\n                                    _Advance_bytes(_First1, _Pos * sizeof(_Ty));\r\n\r\n                                    if (_First1 > _Stop1) {\r\n                                        break; // Oops, doesn't fit\r\n                                    }\r\n\r\n                                    // Match not from the first byte, check 16 symbols\r\n                                    const __m128i _Match1 = _mm_loadu_si128(static_cast<const __m128i*>(_First1));\r\n                                    const __m128i _Cmp    = _mm_xor_si128(_Data2, _Match1);\r\n                                    if (!_mm_testz_si128(_Cmp, _Cmp)) {\r\n                                        _Match_1st_16 = false;\r\n                                    }\r\n                                }\r\n\r\n                                if (_Match_1st_16) {\r\n                                    const void* _Tail1 = _First1;\r\n                                    _Advance_bytes(_Tail1, 16);\r\n\r\n                                    if (memcmp(_Tail1, _Tail2, _Size_bytes_2 - 16) == 0) {\r\n                                        return _First1;\r\n                                    }\r\n                                }\r\n\r\n                                // Start from the next element\r\n                                _Advance_bytes(_First1, sizeof(_Ty));\r\n                            }\r\n                        } while (_First1 <= _Stop1);\r\n\r\n                        return _Last1;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return _Search_scalar_tail<_Ty>(_First1, _Last1, _Size_bytes_1, _First2, _Count2, _Size_bytes_2);\r\n        }\r\n\r\n        template <class _FindTraits, class _Traits_avx, class _Traits_sse, class _Ty>\r\n        const void* __stdcall _Find_end_impl(const void* const _First1, const void* const _Last1,\r\n            const void* const _First2, const size_t _Count2) noexcept {\r\n            if (_Count2 == 0) {\r\n                return _Last1;\r\n            }\r\n\r\n            if (_Count2 == 1) {\r\n                return _Finding::_Find_last_impl<_FindTraits, _Finding::_Predicate::_Equal>(\r\n                    _First1, _Last1, *static_cast<const _Ty*>(_First2));\r\n            }\r\n\r\n            const size_t _Size_bytes_1 = _Byte_length(_First1, _Last1);\r\n            const size_t _Size_bytes_2 = _Count2 * sizeof(_Ty);\r\n\r\n            if (_Size_bytes_1 < _Size_bytes_2) {\r\n                return _Last1;\r\n            }\r\n\r\n            if (_Use_avx2() && _Size_bytes_1 >= 32) {\r\n                return _Find_end_cmpeq<_Traits_avx, _Ty>(_First1, _Last1, _First2, _Size_bytes_2);\r\n            }\r\n\r\n            if (_Use_sse42() && _Size_bytes_1 >= 16) {\r\n                if constexpr (sizeof(_Ty) >= 4) {\r\n                    return _Find_end_cmpeq<_Traits_sse, _Ty>(_First1, _Last1, _First2, _Size_bytes_2);\r\n                } else {\r\n                    constexpr int _Op =\r\n                        (sizeof(_Ty) == 1 ? _SIDD_UBYTE_OPS : _SIDD_UWORD_OPS) | _SIDD_CMP_EQUAL_ORDERED;\r\n                    constexpr int _Part_size_el = sizeof(_Ty) == 1 ? 16 : 8;\r\n\r\n                    static constexpr int8_t _Low_part_mask[] = {//\r\n                        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, //\r\n                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};\r\n\r\n                    if (_Size_bytes_2 <= 16) {\r\n                        const int _Size_el_2                  = static_cast<int>(_Count2);\r\n                        constexpr unsigned int _Whole_mask    = (1 << _Part_size_el) - 1;\r\n                        const unsigned int _Needle_fit_mask   = (1 << (_Part_size_el - _Size_el_2 + 1)) - 1;\r\n                        const unsigned int _Needle_unfit_mask = _Whole_mask ^ _Needle_fit_mask;\r\n\r\n                        const void* _Stop1 = _First1;\r\n                        _Advance_bytes(_Stop1, _Size_bytes_1 & 0xF);\r\n\r\n                        alignas(16) uint8_t _Tmp2[16];\r\n                        memcpy(_Tmp2, _First2, _Size_bytes_2);\r\n                        const __m128i _Data2 = _mm_load_si128(reinterpret_cast<const __m128i*>(_Tmp2));\r\n\r\n                        const void* _Mid1 = _Last1;\r\n                        _Rewind_bytes(_Mid1, 16);\r\n\r\n                        const auto _Check_fit = [&_Mid1, _Needle_fit_mask](const unsigned int _Match) noexcept {\r\n                            const unsigned int _Fit_match = _Match & _Needle_fit_mask;\r\n                            if (_Fit_match != 0) {\r\n                                unsigned long _Match_last_pos;\r\n\r\n                                // CodeQL [SM02313] Result is always initialized: we just tested that _Fit_match != 0.\r\n                                _BitScanReverse(&_Match_last_pos, _Fit_match);\r\n\r\n                                _Advance_bytes(_Mid1, _Match_last_pos * sizeof(_Ty));\r\n                                return true;\r\n                            }\r\n\r\n                            return false;\r\n                        };\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4324) // structure was padded due to alignment specifier\r\n                        const auto _Check_unfit = [=, &_Mid1](const unsigned int _Match) noexcept {\r\n                            unsigned long _Unfit_match = _Match & _Needle_unfit_mask;\r\n                            while (_Unfit_match != 0) {\r\n                                const void* _Tmp1 = _Mid1;\r\n                                unsigned long _Match_last_pos;\r\n\r\n                                // CodeQL [SM02313] Result is always initialized: we just tested that _Unfit_match != 0.\r\n                                _BitScanReverse(&_Match_last_pos, _Unfit_match);\r\n\r\n                                _Advance_bytes(_Tmp1, _Match_last_pos * sizeof(_Ty));\r\n\r\n                                const __m128i _Match_data = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Tmp1));\r\n                                const __m128i _Cmp_result = _mm_xor_si128(_Data2, _Match_data);\r\n                                const __m128i _Data_mask  = _mm_loadu_si128(\r\n                                    reinterpret_cast<const __m128i*>(_Low_part_mask + 16 - _Size_bytes_2));\r\n\r\n                                if (_mm_testz_si128(_Cmp_result, _Data_mask)) {\r\n                                    _Mid1 = _Tmp1;\r\n                                    return true;\r\n                                }\r\n\r\n                                _Unfit_match ^= 1 << _Match_last_pos;\r\n                            }\r\n\r\n                            return false;\r\n                        };\r\n#pragma warning(pop)\r\n\r\n                        // TRANSITION, DevCom-10689455, the code below could test with _mm_cmpestrc,\r\n                        // if it has been fused with _mm_cmpestrm.\r\n\r\n                        // The very last part, for any match needle should fit, otherwise false match\r\n                        const __m128i _Data1_last = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Mid1));\r\n                        const auto _Match_last    = _mm_cmpestrm(_Data2, _Size_el_2, _Data1_last, _Part_size_el, _Op);\r\n                        const unsigned int _Match_last_val = _mm_cvtsi128_si32(_Match_last);\r\n                        if (_Check_fit(_Match_last_val)) {\r\n                            return _Mid1;\r\n                        }\r\n\r\n                        // The middle part, fit and unfit needle\r\n                        while (_Mid1 != _Stop1) {\r\n                            _Rewind_bytes(_Mid1, 16);\r\n                            const __m128i _Data1 = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Mid1));\r\n                            const auto _Match    = _mm_cmpestrm(_Data2, _Size_el_2, _Data1, _Part_size_el, _Op);\r\n                            const unsigned int _Match_val = _mm_cvtsi128_si32(_Match);\r\n                            if (_Match_val != 0 && (_Check_unfit(_Match_val) || _Check_fit(_Match_val))) {\r\n                                return _Mid1;\r\n                            }\r\n                        }\r\n\r\n                        // The first part, fit and unfit needle, mask out already processed positions\r\n                        if (const size_t _Tail_bytes_1 = _Size_bytes_1 & 0xF; _Tail_bytes_1 != 0) {\r\n                            _Mid1                   = _First1;\r\n                            const __m128i _Data1    = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Mid1));\r\n                            const auto _Match       = _mm_cmpestrm(_Data2, _Size_el_2, _Data1, _Part_size_el, _Op);\r\n                            const size_t _Tail_el_1 = _Tail_bytes_1 / sizeof(_Ty);\r\n                            const unsigned int _Match_val = _mm_cvtsi128_si32(_Match) & ((1 << _Tail_el_1) - 1);\r\n                            if (_Match_val != 0 && (_Check_unfit(_Match_val) || _Check_fit(_Match_val))) {\r\n                                return _Mid1;\r\n                            }\r\n                        }\r\n\r\n                        return _Last1;\r\n                    } else { // _Size_bytes_2 is greater than 16 bytes\r\n                        const __m128i _Data2 = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_First2));\r\n\r\n                        const void* _Tail2 = _First2;\r\n                        _Advance_bytes(_Tail2, 16);\r\n\r\n                        const void* _Mid1 = _Last1;\r\n                        _Rewind_bytes(_Mid1, _Size_bytes_2);\r\n\r\n                        const size_t _Size_diff_bytes = _Size_bytes_1 - _Size_bytes_2;\r\n                        const void* _Stop1            = _First1;\r\n                        _Advance_bytes(_Stop1, _Size_diff_bytes & 0xF);\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4324) // structure was padded due to alignment specifier\r\n                        const auto _Check = [=, &_Mid1](unsigned long _Match) noexcept {\r\n                            while (_Match != 0) {\r\n                                const void* _Tmp1 = _Mid1;\r\n                                unsigned long _Match_last_pos;\r\n\r\n                                // CodeQL [SM02313] Result is always initialized: we just tested that _Match != 0.\r\n                                _BitScanReverse(&_Match_last_pos, _Match);\r\n\r\n                                bool _Match_1st_16 = true;\r\n\r\n                                if (_Match_last_pos != 0) {\r\n                                    _Advance_bytes(_Tmp1, _Match_last_pos * sizeof(_Ty));\r\n\r\n                                    const __m128i _Match_data =\r\n                                        _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Tmp1));\r\n                                    const __m128i _Cmp_result = _mm_xor_si128(_Data2, _Match_data);\r\n\r\n                                    if (!_mm_testz_si128(_Cmp_result, _Cmp_result)) {\r\n                                        _Match_1st_16 = false;\r\n                                    }\r\n                                }\r\n\r\n                                if (_Match_1st_16) {\r\n                                    const void* _Tail1 = _Tmp1;\r\n                                    _Advance_bytes(_Tail1, 16);\r\n\r\n                                    if (memcmp(_Tail1, _Tail2, _Size_bytes_2 - 16) == 0) {\r\n                                        _Mid1 = _Tmp1;\r\n                                        return true;\r\n                                    }\r\n                                }\r\n\r\n                                _Match ^= 1 << _Match_last_pos;\r\n                            }\r\n\r\n                            return false;\r\n                        };\r\n#pragma warning(pop)\r\n                        // The very last part, just compare, as true match must start with first symbol\r\n                        const __m128i _Data1_last = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Mid1));\r\n                        const __m128i _Match_last = _mm_xor_si128(_Data2, _Data1_last);\r\n                        if (_mm_testz_si128(_Match_last, _Match_last)) {\r\n                            // Matched 16 bytes, check the rest\r\n                            const void* _Tail1 = _Mid1;\r\n                            _Advance_bytes(_Tail1, 16);\r\n\r\n                            if (memcmp(_Tail1, _Tail2, _Size_bytes_2 - 16) == 0) {\r\n                                return _Mid1;\r\n                            }\r\n                        }\r\n\r\n                        // TRANSITION, DevCom-10689455, the code below could test with _mm_cmpestrc,\r\n                        // if it has been fused with _mm_cmpestrm.\r\n\r\n                        // The main part, match all characters\r\n                        while (_Mid1 != _Stop1) {\r\n                            _Rewind_bytes(_Mid1, 16);\r\n\r\n                            const __m128i _Data1 = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Mid1));\r\n                            const auto _Match    = _mm_cmpestrm(_Data2, _Part_size_el, _Data1, _Part_size_el, _Op);\r\n                            const unsigned int _Match_val = _mm_cvtsi128_si32(_Match);\r\n                            if (_Match_val != 0 && _Check(_Match_val)) {\r\n                                return _Mid1;\r\n                            }\r\n                        }\r\n\r\n                        // The first part, mask out already processed positions\r\n                        if (const size_t _Tail_bytes_1 = _Size_diff_bytes & 0xF; _Tail_bytes_1 != 0) {\r\n                            _Mid1                   = _First1;\r\n                            const __m128i _Data1    = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Mid1));\r\n                            const auto _Match       = _mm_cmpestrm(_Data2, _Part_size_el, _Data1, _Part_size_el, _Op);\r\n                            const size_t _Tail_el_1 = _Tail_bytes_1 / sizeof(_Ty);\r\n                            const unsigned int _Match_val = _mm_cvtsi128_si32(_Match) & ((1 << _Tail_el_1) - 1);\r\n                            if (_Match_val != 0 && _Check(_Match_val)) {\r\n                                return _Mid1;\r\n                            }\r\n                        }\r\n\r\n                        return _Last1;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return _Find_end_scalar_tail<_Ty>(_First1, _Last1, _First2, _Count2);\r\n        }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n    } // namespace _Find_seq\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\nconst void* __stdcall __std_search_1(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const size_t _Count2) noexcept {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    return _Find_seq::_Search_impl<_Finding::_Find_traits_1, _Find_seq::_Find_seq_traits_neon_1, uint8_t>(\r\n        _First1, _Last1, _First2, _Count2);\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    return _Find_seq::_Search_impl<_Finding::_Find_traits_1, void, void, uint8_t>(_First1, _Last1, _First2, _Count2);\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n}\r\n\r\nconst void* __stdcall __std_search_2(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const size_t _Count2) noexcept {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    return _Find_seq::_Search_impl<_Finding::_Find_traits_2, _Find_seq::_Find_seq_traits_neon_2, uint16_t>(\r\n        _First1, _Last1, _First2, _Count2);\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    return _Find_seq::_Search_impl<_Finding::_Find_traits_2, _Find_seq::_Find_seq_traits_avx_2, void, uint16_t>(\r\n        _First1, _Last1, _First2, _Count2);\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n}\r\n\r\nconst void* __stdcall __std_search_4(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const size_t _Count2) noexcept {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    return _Find_seq::_Search_impl<_Finding::_Find_traits_4, _Find_seq::_Find_seq_traits_neon_4, uint32_t>(\r\n        _First1, _Last1, _First2, _Count2);\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    return _Find_seq::_Search_impl<_Finding::_Find_traits_4, _Find_seq::_Find_seq_traits_avx_4,\r\n        _Find_seq::_Find_seq_traits_sse_4, uint32_t>(_First1, _Last1, _First2, _Count2);\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n}\r\n\r\nconst void* __stdcall __std_search_8(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const size_t _Count2) noexcept {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    return _Find_seq::_Search_impl<_Finding::_Find_traits_8, _Find_seq::_Find_seq_traits_neon_8, uint64_t>(\r\n        _First1, _Last1, _First2, _Count2);\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    return _Find_seq::_Search_impl<_Finding::_Find_traits_8, _Find_seq::_Find_seq_traits_avx_8,\r\n        _Find_seq::_Find_seq_traits_sse_8, uint64_t>(_First1, _Last1, _First2, _Count2);\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n}\r\n\r\n\r\nconst void* __stdcall __std_find_end_1(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const size_t _Count2) noexcept {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    return _Find_seq::_Find_end_impl<_Finding::_Find_traits_1, _Find_seq::_Find_seq_traits_neon_1, uint8_t>(\r\n        _First1, _Last1, _First2, _Count2);\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    return _Find_seq::_Find_end_impl<_Finding::_Find_traits_1, _Find_seq::_Find_seq_traits_avx_1, void, uint8_t>(\r\n        _First1, _Last1, _First2, _Count2);\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n}\r\n\r\nconst void* __stdcall __std_find_end_2(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const size_t _Count2) noexcept {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    return _Find_seq::_Find_end_impl<_Finding::_Find_traits_2, _Find_seq::_Find_seq_traits_neon_2, uint16_t>(\r\n        _First1, _Last1, _First2, _Count2);\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    return _Find_seq::_Find_end_impl<_Finding::_Find_traits_2, _Find_seq::_Find_seq_traits_avx_2, void, uint16_t>(\r\n        _First1, _Last1, _First2, _Count2);\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n}\r\n\r\nconst void* __stdcall __std_find_end_4(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const size_t _Count2) noexcept {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    return _Find_seq::_Find_end_impl<_Finding::_Find_traits_4, _Find_seq::_Find_seq_traits_neon_4, uint32_t>(\r\n        _First1, _Last1, _First2, _Count2);\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    return _Find_seq::_Find_end_impl<_Finding::_Find_traits_4, _Find_seq::_Find_seq_traits_avx_4,\r\n        _Find_seq::_Find_seq_traits_sse_4, uint32_t>(_First1, _Last1, _First2, _Count2);\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n}\r\n\r\nconst void* __stdcall __std_find_end_8(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const size_t _Count2) noexcept {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    return _Find_seq::_Find_end_impl<_Finding::_Find_traits_8, _Find_seq::_Find_seq_traits_neon_8, uint64_t>(\r\n        _First1, _Last1, _First2, _Count2);\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    return _Find_seq::_Find_end_impl<_Finding::_Find_traits_8, _Find_seq::_Find_seq_traits_avx_8,\r\n        _Find_seq::_Find_seq_traits_sse_8, uint64_t>(_First1, _Last1, _First2, _Count2);\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n}\r\n\r\n} // extern \"C\"\r\n\r\nnamespace {\r\n    namespace _Mismatching {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        template <class _Ty>\r\n        __declspec(noalias) size_t __stdcall _Mismatch_impl(\r\n            const void* const _First1, const void* const _First2, const size_t _Count) noexcept {\r\n            size_t _Result            = 0;\r\n            const auto _First1_ch     = static_cast<const uint8_t*>(_First1);\r\n            const auto _First2_ch     = static_cast<const uint8_t*>(_First2);\r\n            const size_t _Count_bytes = _Count * sizeof(_Ty);\r\n\r\n            const size_t _Count_bytes_32 = _Count_bytes & ~size_t{0x1F};\r\n            for (; _Result != _Count_bytes_32; _Result += 0x20) {\r\n                const auto _Elem1_lo = _Finding::_Find_traits_1::_Load_q(_First1_ch + _Result);\r\n                const auto _Elem2_lo = _Finding::_Find_traits_1::_Load_q(_First2_ch + _Result);\r\n                const auto _Elem1_hi = _Finding::_Find_traits_1::_Load_q(_First1_ch + _Result + 0x10);\r\n                const auto _Elem2_hi = _Finding::_Find_traits_1::_Load_q(_First2_ch + _Result + 0x10);\r\n\r\n                const auto _Cmp_lo = _Finding::_Find_traits_1::_Cmp_neon_q(_Elem1_lo, _Elem2_lo);\r\n                const auto _Cmp_hi = _Finding::_Find_traits_1::_Cmp_neon_q(_Elem1_hi, _Elem2_hi);\r\n\r\n                const auto _Any_mismatch = _Finding::_Find_traits_1::_Match_mask_ne(_Cmp_lo, _Cmp_hi);\r\n                if (_Any_mismatch != 0) {\r\n                    auto _Mask_lo = ~_Finding::_Find_traits_1::_Mask_q(_Cmp_lo);\r\n                    if (_Mask_lo != 0) {\r\n                        const auto _Offset = _Finding::_Get_first_h_pos_q(_Mask_lo);\r\n                        return (_Result + _Offset) / sizeof(_Ty);\r\n                    }\r\n\r\n                    auto _Mask_hi      = ~_Finding::_Find_traits_1::_Mask_q(_Cmp_hi);\r\n                    const auto _Offset = _Finding::_Get_first_h_pos_q(_Mask_hi) + 0x10;\r\n                    return (_Result + _Offset) / sizeof(_Ty);\r\n                }\r\n            }\r\n\r\n            if ((_Count_bytes & size_t{0x10}) != 0) { // use original _Count_bytes; we've read only 32-byte chunks\r\n                const auto _Elem1 = _Finding::_Find_traits_1::_Load_q(_First1_ch + _Result);\r\n                const auto _Elem2 = _Finding::_Find_traits_1::_Load_q(_First2_ch + _Result);\r\n                const auto _Cmp   = _Finding::_Find_traits_1::_Cmp_neon_q(_Elem1, _Elem2);\r\n\r\n                const auto _Mask = ~_Finding::_Find_traits_1::_Mask_q(_Cmp);\r\n                if (_Mask != 0) {\r\n                    const auto _Offset = _Finding::_Get_first_h_pos_q(_Mask);\r\n                    return (_Result + _Offset) / sizeof(_Ty);\r\n                }\r\n\r\n                _Result += 0x10;\r\n            }\r\n\r\n            if constexpr (sizeof(_Ty) < 8) {\r\n                // use original _Count_bytes; we've read only 16/32-byte chunks\r\n                if ((_Count_bytes & size_t{0x08}) != 0) {\r\n                    const auto _Elem1 = _Finding::_Find_traits_1::_Load(_First1_ch + _Result);\r\n                    const auto _Elem2 = _Finding::_Find_traits_1::_Load(_First2_ch + _Result);\r\n                    const auto _Cmp   = _Finding::_Find_traits_1::_Cmp_neon(_Elem1, _Elem2);\r\n\r\n                    const auto _Mask = ~_Finding::_Find_traits_1::_Mask(_Cmp);\r\n                    if (_Mask != 0) {\r\n                        const auto _Offset = _Finding::_Get_first_h_pos_d(_Mask);\r\n                        return (_Result + _Offset) / sizeof(_Ty);\r\n                    }\r\n\r\n                    _Result += 0x08;\r\n                }\r\n            }\r\n\r\n            _Result /= sizeof(_Ty);\r\n\r\n            const auto _First1_el = static_cast<const _Ty*>(_First1);\r\n            const auto _First2_el = static_cast<const _Ty*>(_First2);\r\n\r\n            for (; _Result != _Count; ++_Result) {\r\n                if (_First1_el[_Result] != _First2_el[_Result]) {\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return _Result;\r\n        }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        template <class _Ty>\r\n        __declspec(noalias) size_t __stdcall _Mismatch_impl(\r\n            const void* const _First1, const void* const _First2, const size_t _Count) noexcept {\r\n            size_t _Result = 0;\r\n\r\n            const auto _First1_ch = static_cast<const char*>(_First1);\r\n            const auto _First2_ch = static_cast<const char*>(_First2);\r\n\r\n            if (_Use_avx2()) {\r\n                _Zeroupper_on_exit _Guard; // TRANSITION, DevCom-10331414\r\n\r\n                const size_t _Count_bytes          = _Count * sizeof(_Ty);\r\n                const size_t _Count_bytes_avx_full = _Count_bytes & ~size_t{0x1F};\r\n\r\n                for (; _Result != _Count_bytes_avx_full; _Result += 0x20) {\r\n                    const __m256i _Elem1 = _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_First1_ch + _Result));\r\n                    const __m256i _Elem2 = _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_First2_ch + _Result));\r\n                    const __m256i _Cmp   = _mm256_cmpeq_epi8(_Elem1, _Elem2);\r\n                    const auto _Bingo    = ~static_cast<unsigned int>(_mm256_movemask_epi8(_Cmp));\r\n                    if (_Bingo != 0) {\r\n                        return (_Result + _tzcnt_u32(_Bingo)) / sizeof(_Ty);\r\n                    }\r\n                }\r\n\r\n                const size_t _Count_tail = _Count_bytes & size_t{0x1C};\r\n\r\n                if (_Count_tail != 0) {\r\n                    const __m256i _Tail_mask = _Avx2_tail_mask_32(_Count_tail);\r\n                    const __m256i _Elem1 =\r\n                        _mm256_maskload_epi32(reinterpret_cast<const int*>(_First1_ch + _Result), _Tail_mask);\r\n                    const __m256i _Elem2 =\r\n                        _mm256_maskload_epi32(reinterpret_cast<const int*>(_First2_ch + _Result), _Tail_mask);\r\n\r\n                    const __m256i _Cmp = _mm256_cmpeq_epi8(_Elem1, _Elem2);\r\n                    const auto _Bingo  = ~static_cast<unsigned int>(_mm256_movemask_epi8(_Cmp));\r\n                    if (_Bingo != 0) {\r\n                        return (_Result + _tzcnt_u32(_Bingo)) / sizeof(_Ty);\r\n                    }\r\n\r\n                    _Result += _Count_tail;\r\n                }\r\n\r\n                _Result /= sizeof(_Ty);\r\n\r\n                if constexpr (sizeof(_Ty) >= 4) {\r\n                    return _Result;\r\n                }\r\n            } else if (_Use_sse42()) {\r\n                const size_t _Count_bytes_sse = (_Count * sizeof(_Ty)) & ~size_t{0xF};\r\n\r\n                for (; _Result != _Count_bytes_sse; _Result += 0x10) {\r\n                    const __m128i _Elem1 = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_First1_ch + _Result));\r\n                    const __m128i _Elem2 = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_First2_ch + _Result));\r\n                    const __m128i _Cmp   = _mm_cmpeq_epi8(_Elem1, _Elem2);\r\n                    const auto _Bingo    = static_cast<unsigned int>(_mm_movemask_epi8(_Cmp)) ^ 0xFFFF;\r\n                    if (_Bingo != 0) {\r\n                        unsigned long _Offset;\r\n                        // CodeQL [SM02313] _Offset is always initialized: we just tested `if (_Bingo != 0)`.\r\n                        _BitScanForward(&_Offset, _Bingo);\r\n                        return (_Result + _Offset) / sizeof(_Ty);\r\n                    }\r\n                }\r\n\r\n                _Result /= sizeof(_Ty);\r\n            }\r\n\r\n            const auto _First1_el = static_cast<const _Ty*>(_First1);\r\n            const auto _First2_el = static_cast<const _Ty*>(_First2);\r\n\r\n            for (; _Result != _Count; ++_Result) {\r\n                if (_First1_el[_Result] != _First2_el[_Result]) {\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return _Result;\r\n        }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n    } // namespace _Mismatching\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n__declspec(noalias) size_t __stdcall __std_mismatch_1(\r\n    const void* const _First1, const void* const _First2, const size_t _Count) noexcept {\r\n    return _Mismatching::_Mismatch_impl<uint8_t>(_First1, _First2, _Count);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_mismatch_2(\r\n    const void* const _First1, const void* const _First2, const size_t _Count) noexcept {\r\n    return _Mismatching::_Mismatch_impl<uint16_t>(_First1, _First2, _Count);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_mismatch_4(\r\n    const void* const _First1, const void* const _First2, const size_t _Count) noexcept {\r\n    return _Mismatching::_Mismatch_impl<uint32_t>(_First1, _First2, _Count);\r\n}\r\n\r\n__declspec(noalias) size_t __stdcall __std_mismatch_8(\r\n    const void* const _First1, const void* const _First2, const size_t _Count) noexcept {\r\n    return _Mismatching::_Mismatch_impl<uint64_t>(_First1, _First2, _Count);\r\n}\r\n\r\n} // extern \"C\"\r\n\r\nnamespace {\r\n    namespace _Replacing {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        template <class _Traits, class _Ty>\r\n        __declspec(noalias) void __stdcall _Replace_copy_impl(\r\n            const void* _First, const void* const _Last, void* _Dest, const _Ty _Old_val, const _Ty _New_val) noexcept {\r\n            const size_t _Size_bytes = _Byte_length(_First, _Last);\r\n\r\n            if (const size_t _Size = _Size_bytes & ~size_t{0x1F}; _Size != 0) {\r\n                const auto _Comparand   = _Traits::_Set_neon_q(_Old_val);\r\n                const auto _Replacement = _Traits::_Set_neon_q(_New_val);\r\n                const void* _Stop_at    = _First;\r\n                _Advance_bytes(_Stop_at, _Size);\r\n\r\n                do {\r\n                    const auto _Data_lo = _Traits::_Load_q(static_cast<const uint8_t*>(_First) + 0);\r\n                    const auto _Data_hi = _Traits::_Load_q(static_cast<const uint8_t*>(_First) + 16);\r\n\r\n                    const auto _Mask_lo = _Traits::_Cmp_neon_q(_Data_lo, _Comparand);\r\n                    const auto _Mask_hi = _Traits::_Cmp_neon_q(_Data_hi, _Comparand);\r\n\r\n                    const auto _Val_lo = _Traits::_Blend_q(_Data_lo, _Replacement, _Mask_lo);\r\n                    const auto _Val_hi = _Traits::_Blend_q(_Data_hi, _Replacement, _Mask_hi);\r\n\r\n                    _Traits::_Store_q(static_cast<uint8_t*>(_Dest) + 0, _Val_lo);\r\n                    _Traits::_Store_q(static_cast<uint8_t*>(_Dest) + 16, _Val_hi);\r\n\r\n                    _Advance_bytes(_First, 32);\r\n                    _Advance_bytes(_Dest, 32);\r\n                } while (_First != _Stop_at);\r\n            }\r\n\r\n            if ((_Size_bytes & size_t{0x10}) != 0) { // use original _Size_bytes; we've read only 32-byte chunks\r\n                const auto _Comparand   = _Traits::_Set_neon_q(_Old_val);\r\n                const auto _Replacement = _Traits::_Set_neon_q(_New_val);\r\n\r\n                const auto _Data = _Traits::_Load_q(_First);\r\n                const auto _Mask = _Traits::_Cmp_neon_q(_Data, _Comparand);\r\n                const auto _Val  = _Traits::_Blend_q(_Data, _Replacement, _Mask);\r\n\r\n                _Traits::_Store_q(_Dest, _Val);\r\n\r\n                _Advance_bytes(_First, 16);\r\n                _Advance_bytes(_Dest, 16);\r\n            }\r\n\r\n            if constexpr (sizeof(_Ty) < 8) {\r\n                if ((_Size_bytes & size_t{0x08}) != 0) { // use original _Size_bytes; we've read only 16/32-byte chunks\r\n                    const auto _Comparand   = _Traits::_Set_neon(_Old_val);\r\n                    const auto _Replacement = _Traits::_Set_neon(_New_val);\r\n\r\n                    const auto _Data = _Traits::_Load(_First);\r\n                    const auto _Mask = _Traits::_Cmp_neon(_Data, _Comparand);\r\n                    const auto _Val  = _Traits::_Blend(_Data, _Replacement, _Mask);\r\n\r\n                    _Traits::_Store(_Dest, _Val);\r\n\r\n                    _Advance_bytes(_First, 8);\r\n                    _Advance_bytes(_Dest, 8);\r\n                }\r\n            }\r\n\r\n            auto _Ptr_dest = static_cast<_Ty*>(_Dest);\r\n// Avoid auto-vectorization of the scalar tail, as this is not beneficial for performance.\r\n#pragma loop(no_vector)\r\n            for (auto _Ptr_src = static_cast<const _Ty*>(_First); _Ptr_src != _Last; ++_Ptr_src) {\r\n                const _Ty _Val = *_Ptr_src;\r\n                *_Ptr_dest     = _Val == _Old_val ? _New_val : _Val;\r\n                ++_Ptr_dest;\r\n            }\r\n        }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        template <class _Traits, class _Ty>\r\n        __declspec(noalias) void __stdcall _Replace_copy_impl(\r\n            const void* _First, const void* const _Last, void* _Dest, const _Ty _Old_val, const _Ty _New_val) noexcept {\r\n            const size_t _Size_bytes = _Byte_length(_First, _Last);\r\n\r\n            if (const size_t _Avx_size = _Size_bytes & ~size_t{0x1F}; _Avx_size != 0 && _Use_avx2()) {\r\n                const __m256i _Comparand   = _Traits::_Set_avx(_Old_val);\r\n                const __m256i _Replacement = _Traits::_Set_avx(_New_val);\r\n                const void* _Stop_at       = _First;\r\n                _Advance_bytes(_Stop_at, _Avx_size);\r\n\r\n                do {\r\n                    const __m256i _Data = _mm256_loadu_si256(static_cast<const __m256i*>(_First));\r\n                    const __m256i _Mask = _Traits::_Cmp_avx(_Data, _Comparand);\r\n                    const __m256i _Val  = _mm256_blendv_epi8(_Data, _Replacement, _Mask);\r\n\r\n                    _mm256_storeu_si256(static_cast<__m256i*>(_Dest), _Val);\r\n\r\n                    _Advance_bytes(_First, 32);\r\n                    _Advance_bytes(_Dest, 32);\r\n                } while (_First != _Stop_at);\r\n\r\n                if (const size_t _Avx_tail_size = _Size_bytes & 0x1C; _Avx_tail_size != 0) {\r\n                    const __m256i _Tail_mask = _Avx2_tail_mask_32(_Avx_tail_size);\r\n                    const __m256i _Data      = _mm256_maskload_epi32(static_cast<const int*>(_First), _Tail_mask);\r\n                    const __m256i _Mask      = _Traits::_Cmp_avx(_Data, _Comparand);\r\n                    const __m256i _Val       = _mm256_blendv_epi8(_Data, _Replacement, _Mask);\r\n\r\n                    _mm256_maskstore_epi32(static_cast<int*>(_Dest), _Tail_mask, _Val);\r\n\r\n                    _Advance_bytes(_First, _Avx_tail_size);\r\n                    _Advance_bytes(_Dest, _Avx_tail_size);\r\n                }\r\n\r\n                _mm256_zeroupper(); // TRANSITION, DevCom-10331414\r\n\r\n                if constexpr (sizeof(_Ty) >= 4) {\r\n                    return;\r\n                }\r\n            } else if (const size_t _Sse_size = _Size_bytes & ~size_t{0xF}; _Sse_size != 0 && _Use_sse42()) {\r\n                const __m128i _Comparand   = _Traits::_Set_sse(_Old_val);\r\n                const __m128i _Replacement = _Traits::_Set_sse(_New_val);\r\n                const void* _Stop_at       = _First;\r\n                _Advance_bytes(_Stop_at, _Sse_size);\r\n\r\n                do {\r\n                    const __m128i _Data = _mm_loadu_si128(static_cast<const __m128i*>(_First));\r\n                    const __m128i _Mask = _Traits::_Cmp_sse(_Data, _Comparand);\r\n                    const __m128i _Val  = _mm_blendv_epi8(_Data, _Replacement, _Mask);\r\n\r\n                    _mm_storeu_si128(static_cast<__m128i*>(_Dest), _Val);\r\n\r\n                    _Advance_bytes(_First, 16);\r\n                    _Advance_bytes(_Dest, 16);\r\n                } while (_First != _Stop_at);\r\n            }\r\n            auto _Ptr_dest = static_cast<_Ty*>(_Dest);\r\n            for (auto _Ptr_src = static_cast<const _Ty*>(_First); _Ptr_src != _Last; ++_Ptr_src) {\r\n                const _Ty _Val = *_Ptr_src;\r\n                *_Ptr_dest     = _Val == _Old_val ? _New_val : _Val;\r\n                ++_Ptr_dest;\r\n            }\r\n        }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n    } // namespace _Replacing\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n#ifndef _M_ARM64\r\n__declspec(noalias) void __stdcall __std_replace_4(\r\n    void* _First, void* const _Last, const uint32_t _Old_val, const uint32_t _New_val) noexcept {\r\n#ifndef _M_ARM64EC\r\n    if (_Use_avx2()) {\r\n        const __m256i _Comparand   = _mm256_broadcastd_epi32(_mm_cvtsi32_si128(_Old_val));\r\n        const __m256i _Replacement = _mm256_broadcastd_epi32(_mm_cvtsi32_si128(_New_val));\r\n        const size_t _Full_length  = _Byte_length(_First, _Last);\r\n\r\n        void* _Stop_at = _First;\r\n        _Advance_bytes(_Stop_at, _Full_length & ~size_t{0x1F});\r\n\r\n        while (_First != _Stop_at) {\r\n            const __m256i _Data = _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_First));\r\n            const __m256i _Mask = _mm256_cmpeq_epi32(_Comparand, _Data);\r\n            _mm256_maskstore_epi32(reinterpret_cast<int*>(_First), _Mask, _Replacement);\r\n\r\n            _Advance_bytes(_First, 32);\r\n        }\r\n\r\n        if (const size_t _Tail_length = _Full_length & 0x1C; _Tail_length != 0) {\r\n            const __m256i _Tail_mask = _Avx2_tail_mask_32(_Tail_length);\r\n            const __m256i _Data      = _mm256_maskload_epi32(reinterpret_cast<const int*>(_First), _Tail_mask);\r\n            const __m256i _Mask      = _mm256_and_si256(_mm256_cmpeq_epi32(_Comparand, _Data), _Tail_mask);\r\n            _mm256_maskstore_epi32(reinterpret_cast<int*>(_First), _Mask, _Replacement);\r\n        }\r\n\r\n        _mm256_zeroupper(); // TRANSITION, DevCom-10331414\r\n    } else\r\n#endif // ^^^ !defined(_M_ARM64EC) ^^^\r\n    {\r\n        for (auto _Cur = reinterpret_cast<uint32_t*>(_First); _Cur != _Last; ++_Cur) {\r\n            if (*_Cur == _Old_val) {\r\n                *_Cur = _New_val;\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n__declspec(noalias) void __stdcall __std_replace_8(\r\n    void* _First, void* const _Last, const uint64_t _Old_val, const uint64_t _New_val) noexcept {\r\n#ifndef _M_ARM64EC\r\n    if (_Use_avx2()) {\r\n#ifdef _WIN64\r\n        const __m256i _Comparand   = _mm256_broadcastq_epi64(_mm_cvtsi64_si128(_Old_val));\r\n        const __m256i _Replacement = _mm256_broadcastq_epi64(_mm_cvtsi64_si128(_New_val));\r\n#else // ^^^ defined(_WIN64) / !defined(_WIN64), workaround, _mm_cvtsi64_si128 does not compile vvv\r\n        const __m256i _Comparand   = _mm256_set1_epi64x(_Old_val);\r\n        const __m256i _Replacement = _mm256_set1_epi64x(_New_val);\r\n#endif // ^^^ !defined(_WIN64) ^^^\r\n        const size_t _Full_length = _Byte_length(_First, _Last);\r\n\r\n        void* _Stop_at = _First;\r\n        _Advance_bytes(_Stop_at, _Full_length & ~size_t{0x1F});\r\n\r\n        while (_First != _Stop_at) {\r\n            const __m256i _Data = _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_First));\r\n            const __m256i _Mask = _mm256_cmpeq_epi64(_Comparand, _Data);\r\n            _mm256_maskstore_epi64(reinterpret_cast<long long*>(_First), _Mask, _Replacement);\r\n\r\n            _Advance_bytes(_First, 32);\r\n        }\r\n\r\n        if (const size_t _Tail_length = _Full_length & 0x18; _Tail_length != 0) {\r\n            const __m256i _Tail_mask = _Avx2_tail_mask_32(_Tail_length);\r\n            const __m256i _Data      = _mm256_maskload_epi64(reinterpret_cast<const long long*>(_First), _Tail_mask);\r\n            const __m256i _Mask      = _mm256_and_si256(_mm256_cmpeq_epi64(_Comparand, _Data), _Tail_mask);\r\n            _mm256_maskstore_epi64(reinterpret_cast<long long*>(_First), _Mask, _Replacement);\r\n        }\r\n\r\n        _mm256_zeroupper(); // TRANSITION, DevCom-10331414\r\n    } else\r\n#endif // ^^^ !defined(_M_ARM64EC) ^^^\r\n    {\r\n        for (auto _Cur = reinterpret_cast<uint64_t*>(_First); _Cur != _Last; ++_Cur) {\r\n            if (*_Cur == _Old_val) {\r\n                *_Cur = _New_val;\r\n            }\r\n        }\r\n    }\r\n}\r\n#endif // ^^^ !defined(_M_ARM64) ^^^\r\n\r\n__declspec(noalias) void __stdcall __std_replace_copy_1(const void* const _First, const void* const _Last,\r\n    void* const _Dest, const uint8_t _Old_val, const uint8_t _New_val) noexcept {\r\n    _Replacing::_Replace_copy_impl<_Finding::_Find_traits_1>(_First, _Last, _Dest, _Old_val, _New_val);\r\n}\r\n\r\n__declspec(noalias) void __stdcall __std_replace_copy_2(const void* const _First, const void* const _Last,\r\n    void* const _Dest, const uint16_t _Old_val, const uint16_t _New_val) noexcept {\r\n    _Replacing::_Replace_copy_impl<_Finding::_Find_traits_2>(_First, _Last, _Dest, _Old_val, _New_val);\r\n}\r\n\r\n__declspec(noalias) void __stdcall __std_replace_copy_4(const void* const _First, const void* const _Last,\r\n    void* const _Dest, const uint32_t _Old_val, const uint32_t _New_val) noexcept {\r\n    _Replacing::_Replace_copy_impl<_Finding::_Find_traits_4>(_First, _Last, _Dest, _Old_val, _New_val);\r\n}\r\n\r\n__declspec(noalias) void __stdcall __std_replace_copy_8(const void* const _First, const void* const _Last,\r\n    void* const _Dest, const uint64_t _Old_val, const uint64_t _New_val) noexcept {\r\n    _Replacing::_Replace_copy_impl<_Finding::_Find_traits_8>(_First, _Last, _Dest, _Old_val, _New_val);\r\n}\r\n\r\n} // extern \"C\"\r\n\r\nnamespace {\r\n    namespace _Removing {\r\n        // 'remove' and 'unique': form bit mask based on matches, then do _mm_shuffle_epi8/_mm256_permutevar8x32_epi32\r\n        // to the destination with removed matches; the shuffle pattern is taken from a lookup table using the bit mask.\r\n        // After writing to dest, shift the dest pointer by the mismatch count.\r\n        // There will be redundant elements written, and they will be subsequently overwritten by overlapped writes.\r\n        //\r\n        // 'unique': the bit mask is formed by comparing against shifted self. 'adjacent_find' must precede this\r\n        // to avoid a load overlapping a just stored vector (store buffer stall).\r\n        //\r\n        // Non '_copy' flavors: store directly, the data past the returned iterator must be ignored anyway.\r\n        // '_copy' flavors: can't write more than expected, use intermediate buffer and then copy to dest.\r\n\r\n        template <class _Ty>\r\n        void* _Remove_fallback(\r\n            const void* const _First, const void* const _Last, void* const _Out, const _Ty _Val) noexcept {\r\n            const _Ty* _Src = reinterpret_cast<const _Ty*>(_First);\r\n            _Ty* _Dest      = reinterpret_cast<_Ty*>(_Out);\r\n\r\n            while (_Src != _Last) {\r\n                if (*_Src != _Val) {\r\n                    *_Dest = *_Src;\r\n                    ++_Dest;\r\n                }\r\n\r\n                ++_Src;\r\n            }\r\n\r\n            return _Dest;\r\n        }\r\n\r\n        template <class _Ty>\r\n        void* _Unique_fallback(const void* const _First, const void* const _Last, void* const _Dest) noexcept {\r\n            _Ty* _Out       = reinterpret_cast<_Ty*>(_Dest);\r\n            const _Ty* _Src = reinterpret_cast<const _Ty*>(_First);\r\n\r\n            while (_Src != _Last) {\r\n                if (*_Src != *_Out) {\r\n                    ++_Out;\r\n                    *_Out = *_Src;\r\n                }\r\n\r\n                ++_Src;\r\n            }\r\n\r\n            ++_Out;\r\n            return _Out;\r\n        }\r\n\r\n        template <size_t _Size_v, size_t _Size_h>\r\n        struct _Tables {\r\n            uint8_t _Shuf[_Size_v][_Size_h];\r\n            uint8_t _Size[_Size_v];\r\n        };\r\n\r\n        template <size_t _Size_v, size_t _Size_h>\r\n        constexpr auto _Make_tables(const uint32_t _Mul, const uint32_t _Ew) {\r\n            _Tables<_Size_v, _Size_h> _Result;\r\n\r\n            for (uint32_t _Vx = 0; _Vx != _Size_v; ++_Vx) {\r\n                uint32_t _Nx = 0;\r\n\r\n                // Make shuffle mask for pshufb / vpermd corresponding to _Vx bit value.\r\n                // Every bit set corresponds to an element skipped.\r\n                for (uint32_t _Hx = 0; _Hx != _Size_h / _Ew; ++_Hx) {\r\n                    if ((_Vx & (1 << _Hx)) == 0) {\r\n                        // Inner loop needed for cases where the shuffle mask operates on element parts rather than\r\n                        // whole elements; for whole elements there would be one iteration.\r\n                        for (uint32_t _Ex = 0; _Ex != _Ew; ++_Ex) {\r\n                            _Result._Shuf[_Vx][_Nx * _Ew + _Ex] = static_cast<uint8_t>(_Hx * _Ew + _Ex);\r\n                        }\r\n                        ++_Nx;\r\n                    }\r\n                }\r\n\r\n                // Size of elements that are not removed in bytes.\r\n                _Result._Size[_Vx] = static_cast<uint8_t>(_Nx * _Mul);\r\n\r\n                // Fill the remaining with arbitrary elements.\r\n                // It is not possible to leave them untouched while keeping this optimization efficient.\r\n                // This should not be a problem though, as they should be either overwritten by the next step,\r\n                // or left in the removed range.\r\n                for (; _Nx != _Size_h / _Ew; ++_Nx) {\r\n                    // Inner loop needed for cases where the shuffle mask operates on element parts rather than whole\r\n                    // elements; for whole elements there would be one iteration.\r\n                    for (uint32_t _Ex = 0; _Ex != _Ew; ++_Ex) {\r\n                        _Result._Shuf[_Vx][_Nx * _Ew + _Ex] = static_cast<uint8_t>(_Nx * _Ew + _Ex);\r\n                    }\r\n                }\r\n            }\r\n\r\n            return _Result;\r\n        }\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        constexpr auto _Tables_1_neon = _Make_tables<256, 8>(1, 1);\r\n        constexpr auto _Tables_2_neon = _Make_tables<256, 16>(2, 2);\r\n        constexpr auto _Tables_4_neon = _Make_tables<16, 16>(4, 4);\r\n\r\n        struct _Neon_1 {\r\n            static constexpr size_t _Elem_size = 1;\r\n            static constexpr size_t _Step      = 8;\r\n            using _Vec_t                       = uint8x8_t;\r\n\r\n            static _Vec_t _Set(const uint8_t _Val) noexcept {\r\n                return vdup_n_u8(_Val);\r\n            }\r\n\r\n            static _Vec_t _Load(const void* const _Ptr) noexcept {\r\n                return vld1_u8(static_cast<const uint8_t*>(_Ptr));\r\n            }\r\n\r\n            static uint32_t _Mask(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                const auto _Cmp = vceq_u8(_First, _Second);\r\n                uint64_t _Val   = vget_lane_u64(vreinterpret_u64_u8(_Cmp), 0);\r\n                _Val &= 0x8080808080808080ull;\r\n                _Val *= 0x02040810204081ull;\r\n                return static_cast<uint32_t>(_Val >> 56);\r\n            }\r\n\r\n            static void* _Store_masked(void* _Out, const _Vec_t _Src, const uint32_t _Bingo) noexcept {\r\n                const auto _Shuf = vld1_u8(_Tables_1_neon._Shuf[_Bingo]);\r\n                const auto _Dest = vtbl1_u8(_Src, _Shuf);\r\n                vst1_u8(static_cast<uint8_t*>(_Out), _Dest);\r\n                _Advance_bytes(_Out, _Tables_1_neon._Size[_Bingo]);\r\n                return _Out;\r\n            }\r\n        };\r\n\r\n        struct _Neon_2 {\r\n            static constexpr size_t _Elem_size = 2;\r\n            static constexpr size_t _Step      = 16;\r\n            using _Vec_t                       = uint16x8_t;\r\n\r\n            static _Vec_t _Set(const uint16_t _Val) noexcept {\r\n                return vdupq_n_u16(_Val);\r\n            }\r\n\r\n            static _Vec_t _Load(const void* const _Ptr) noexcept {\r\n                return vld1q_u16(static_cast<const uint16_t*>(_Ptr));\r\n            }\r\n\r\n            static uint32_t _Mask(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                // TRANSITION, DevCom-11055227\r\n                constexpr uint16_t _Weights_arr[8] = {1, 2, 4, 8, 16, 32, 64, 128};\r\n                const auto _Weights                = vld1q_u16(_Weights_arr);\r\n\r\n                const auto _Cmp  = vceqq_u16(_First, _Second);\r\n                const auto _Bits = vandq_u16(_Cmp, _Weights);\r\n                return vaddvq_u16(_Bits);\r\n            }\r\n\r\n            static void* _Store_masked(void* _Out, const _Vec_t _Src, const uint32_t _Bingo) noexcept {\r\n                const auto _Shuf = vld1q_u8(_Tables_2_neon._Shuf[_Bingo]);\r\n                const auto _Dest = vreinterpretq_u16_u8(vqtbl1q_u8(vreinterpretq_u8_u16(_Src), _Shuf));\r\n                vst1q_u16(static_cast<uint16_t*>(_Out), _Dest);\r\n                _Advance_bytes(_Out, _Tables_2_neon._Size[_Bingo]);\r\n                return _Out;\r\n            }\r\n        };\r\n\r\n        struct _Neon_4 {\r\n            static constexpr size_t _Elem_size = 4;\r\n            static constexpr size_t _Step      = 16;\r\n            using _Vec_t                       = uint32x4_t;\r\n\r\n            static _Vec_t _Set(const uint32_t _Val) noexcept {\r\n                return vdupq_n_u32(_Val);\r\n            }\r\n\r\n            static _Vec_t _Load(const void* const _Ptr) noexcept {\r\n                return vld1q_u32(static_cast<const uint32_t*>(_Ptr));\r\n            }\r\n\r\n            static uint32_t _Mask(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                // TRANSITION, DevCom-11055227\r\n                constexpr uint32_t _Weights_arr[4] = {1, 2, 4, 8};\r\n                const auto _Weights                = vld1q_u32(_Weights_arr);\r\n\r\n                const auto _Cmp  = vceqq_u32(_First, _Second);\r\n                const auto _Bits = vandq_u32(_Cmp, _Weights);\r\n                return vaddvq_u32(_Bits);\r\n            }\r\n\r\n            static void* _Store_masked(void* _Out, const _Vec_t _Src, const uint32_t _Bingo) noexcept {\r\n                const auto _Shuf = vld1q_u8(_Tables_4_neon._Shuf[_Bingo]);\r\n                const auto _Dest = vreinterpretq_u32_u8(vqtbl1q_u8(vreinterpretq_u8_u32(_Src), _Shuf));\r\n                vst1q_u32(static_cast<uint32_t*>(_Out), _Dest);\r\n                _Advance_bytes(_Out, _Tables_4_neon._Size[_Bingo]);\r\n                return _Out;\r\n            }\r\n        };\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        constexpr auto _Tables_1_sse = _Make_tables<256, 8>(1, 1);\r\n        constexpr auto _Tables_2_sse = _Make_tables<256, 16>(2, 2);\r\n        constexpr auto _Tables_4_sse = _Make_tables<16, 16>(4, 4);\r\n        constexpr auto _Tables_4_avx = _Make_tables<256, 8>(4, 1);\r\n        constexpr auto _Tables_8_sse = _Make_tables<4, 16>(8, 8);\r\n        constexpr auto _Tables_8_avx = _Make_tables<16, 8>(8, 2);\r\n\r\n        struct _Sse_1 {\r\n            static constexpr size_t _Elem_size = 1;\r\n            static constexpr size_t _Step      = 8;\r\n\r\n            static __m128i _Set(const uint8_t _Val) noexcept {\r\n                return _mm_shuffle_epi8(_mm_cvtsi32_si128(_Val), _mm_setzero_si128());\r\n            }\r\n\r\n            static __m128i _Load(const void* const _Ptr) noexcept {\r\n                return _mm_loadu_si64(_Ptr);\r\n            }\r\n\r\n            static uint32_t _Mask(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_movemask_epi8(_mm_cmpeq_epi8(_First, _Second)) & 0xFF;\r\n            }\r\n\r\n            static void* _Store_masked(void* _Out, const __m128i _Src, const uint32_t _Bingo) noexcept {\r\n                const __m128i _Shuf = _mm_loadu_si64(_Tables_1_sse._Shuf[_Bingo]);\r\n                const __m128i _Dest = _mm_shuffle_epi8(_Src, _Shuf);\r\n                _mm_storeu_si64(_Out, _Dest);\r\n                _Advance_bytes(_Out, _Tables_1_sse._Size[_Bingo]);\r\n                return _Out;\r\n            }\r\n        };\r\n\r\n        struct _Sse_2 {\r\n            static constexpr size_t _Elem_size = 2;\r\n            static constexpr size_t _Step      = 16;\r\n\r\n            static __m128i _Set(const uint16_t _Val) noexcept {\r\n                return _mm_set1_epi16(_Val);\r\n            }\r\n\r\n            static __m128i _Load(const void* const _Ptr) noexcept {\r\n                return _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Ptr));\r\n            }\r\n\r\n            static uint32_t _Mask(const __m128i _First, const __m128i _Second) noexcept {\r\n                const __m128i _Mask = _mm_cmpeq_epi16(_First, _Second);\r\n                return _mm_movemask_epi8(_mm_packs_epi16(_Mask, _mm_setzero_si128()));\r\n            }\r\n\r\n            static void* _Store_masked(void* _Out, const __m128i _Src, const uint32_t _Bingo) noexcept {\r\n                const __m128i _Shuf = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Tables_2_sse._Shuf[_Bingo]));\r\n                const __m128i _Dest = _mm_shuffle_epi8(_Src, _Shuf);\r\n                _mm_storeu_si128(reinterpret_cast<__m128i*>(_Out), _Dest);\r\n                _Advance_bytes(_Out, _Tables_2_sse._Size[_Bingo]);\r\n                return _Out;\r\n            }\r\n        };\r\n\r\n        struct _Avx_4 {\r\n            static constexpr size_t _Elem_size = 4;\r\n            static constexpr size_t _Step      = 32;\r\n\r\n            static __m256i _Set(const uint32_t _Val) noexcept {\r\n                return _mm256_set1_epi32(_Val);\r\n            }\r\n\r\n            static __m256i _Load(const void* const _Ptr) noexcept {\r\n                return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_Ptr));\r\n            }\r\n\r\n            static uint32_t _Mask(const __m256i _First, const __m256i _Second) noexcept {\r\n                const __m256i _Mask = _mm256_cmpeq_epi32(_First, _Second);\r\n                return _mm256_movemask_ps(_mm256_castsi256_ps(_Mask));\r\n            }\r\n\r\n            static void* _Store_masked(void* _Out, const __m256i _Src, const uint32_t _Bingo) noexcept {\r\n                const __m256i _Shuf = _mm256_cvtepu8_epi32(_mm_loadu_si64(_Tables_4_avx._Shuf[_Bingo]));\r\n                const __m256i _Dest = _mm256_permutevar8x32_epi32(_Src, _Shuf);\r\n                _mm256_storeu_si256(reinterpret_cast<__m256i*>(_Out), _Dest);\r\n                _Advance_bytes(_Out, _Tables_4_avx._Size[_Bingo]);\r\n                return _Out;\r\n            }\r\n        };\r\n\r\n        struct _Sse_4 {\r\n            static constexpr size_t _Elem_size = 4;\r\n            static constexpr size_t _Step      = 16;\r\n\r\n            static __m128i _Set(const uint32_t _Val) noexcept {\r\n                return _mm_set1_epi32(_Val);\r\n            }\r\n\r\n            static __m128i _Load(const void* const _Ptr) noexcept {\r\n                return _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Ptr));\r\n            }\r\n\r\n            static uint32_t _Mask(const __m128i _First, const __m128i _Second) noexcept {\r\n                const __m128i _Mask = _mm_cmpeq_epi32(_First, _Second);\r\n                return _mm_movemask_ps(_mm_castsi128_ps(_Mask));\r\n            }\r\n\r\n            static void* _Store_masked(void* _Out, const __m128i _Src, const uint32_t _Bingo) noexcept {\r\n                const __m128i _Shuf = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Tables_4_sse._Shuf[_Bingo]));\r\n                const __m128i _Dest = _mm_shuffle_epi8(_Src, _Shuf);\r\n                _mm_storeu_si128(reinterpret_cast<__m128i*>(_Out), _Dest);\r\n                _Advance_bytes(_Out, _Tables_4_sse._Size[_Bingo]);\r\n                return _Out;\r\n            }\r\n        };\r\n\r\n        struct _Avx_8 {\r\n            static constexpr size_t _Elem_size = 8;\r\n            static constexpr size_t _Step      = 32;\r\n\r\n            static __m256i _Set(const uint64_t _Val) noexcept {\r\n                return _mm256_set1_epi64x(_Val);\r\n            }\r\n\r\n            static __m256i _Load(const void* const _Ptr) noexcept {\r\n                return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_Ptr));\r\n            }\r\n\r\n            static uint32_t _Mask(const __m256i _First, const __m256i _Second) noexcept {\r\n                const __m256i _Mask = _mm256_cmpeq_epi64(_First, _Second);\r\n                return _mm256_movemask_pd(_mm256_castsi256_pd(_Mask));\r\n            }\r\n\r\n            static void* _Store_masked(void* _Out, const __m256i _Src, const uint32_t _Bingo) noexcept {\r\n                const __m256i _Shuf = _mm256_cvtepu8_epi32(_mm_loadu_si64(_Tables_8_avx._Shuf[_Bingo]));\r\n                const __m256i _Dest = _mm256_permutevar8x32_epi32(_Src, _Shuf);\r\n                _mm256_storeu_si256(reinterpret_cast<__m256i*>(_Out), _Dest);\r\n                _Advance_bytes(_Out, _Tables_8_avx._Size[_Bingo]);\r\n                return _Out;\r\n            }\r\n        };\r\n\r\n        struct _Sse_8 {\r\n            static constexpr size_t _Elem_size = 8;\r\n            static constexpr size_t _Step      = 16;\r\n\r\n            static __m128i _Set(const uint64_t _Val) noexcept {\r\n                return _mm_set1_epi64x(_Val);\r\n            }\r\n\r\n            static __m128i _Load(const void* const _Ptr) noexcept {\r\n                return _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Ptr));\r\n            }\r\n\r\n            static uint32_t _Mask(const __m128i _First, const __m128i _Second) noexcept {\r\n                const __m128i _Mask = _mm_cmpeq_epi64(_First, _Second);\r\n                return _mm_movemask_pd(_mm_castsi128_pd(_Mask));\r\n            }\r\n\r\n            static void* _Store_masked(void* _Out, const __m128i _Src, const uint32_t _Bingo) noexcept {\r\n                const __m128i _Shuf = _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Tables_8_sse._Shuf[_Bingo]));\r\n                const __m128i _Dest = _mm_shuffle_epi8(_Src, _Shuf);\r\n                _mm_storeu_si128(reinterpret_cast<__m128i*>(_Out), _Dest);\r\n                _Advance_bytes(_Out, _Tables_8_sse._Size[_Bingo]);\r\n                return _Out;\r\n            }\r\n        };\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n        constexpr size_t _Copy_buffer_size = 512;\r\n\r\n        template <class _Traits, class _Ty>\r\n        void* _Remove_impl(void* _First, void* const _Stop, const _Ty _Val) noexcept {\r\n            void* _Out        = _First;\r\n            const auto _Match = _Traits::_Set(_Val);\r\n\r\n            do {\r\n                const auto _Src       = _Traits::_Load(_First);\r\n                const uint32_t _Bingo = _Traits::_Mask(_Src, _Match);\r\n                _Out                  = _Traits::_Store_masked(_Out, _Src, _Bingo);\r\n                _Advance_bytes(_First, _Traits::_Step);\r\n            } while (_First != _Stop);\r\n\r\n            return _Out;\r\n        }\r\n\r\n        template <class _Traits, class _Ty>\r\n        void* _Remove_copy_impl(const void* _First, const void* const _Stop, void* _Out, const _Ty _Val) noexcept {\r\n            unsigned char _Buffer[_Copy_buffer_size];\r\n            void* _Buffer_out        = _Buffer;\r\n            void* const _Buffer_stop = _Buffer + _Copy_buffer_size - _Traits::_Step;\r\n\r\n            const auto _Match = _Traits::_Set(_Val);\r\n\r\n            do {\r\n                const auto _Src       = _Traits::_Load(_First);\r\n                const uint32_t _Bingo = _Traits::_Mask(_Src, _Match);\r\n                _Buffer_out           = _Traits::_Store_masked(_Buffer_out, _Src, _Bingo);\r\n                _Advance_bytes(_First, _Traits::_Step);\r\n\r\n                if (_Buffer_out >= _Buffer_stop) {\r\n                    const size_t _Fill = _Byte_length(_Buffer, _Buffer_out);\r\n                    memcpy(_Out, _Buffer, _Fill);\r\n                    _Advance_bytes(_Out, _Fill);\r\n                    _Buffer_out = _Buffer;\r\n                }\r\n            } while (_First != _Stop);\r\n\r\n            const size_t _Fill = _Byte_length(_Buffer, _Buffer_out);\r\n            memcpy(_Out, _Buffer, _Fill);\r\n            _Advance_bytes(_Out, _Fill);\r\n            return _Out;\r\n        }\r\n\r\n        template <class _Traits>\r\n        void* _Unique_impl(void* _First, void* const _Stop) noexcept {\r\n            void* _Out = _First;\r\n\r\n            do {\r\n                const auto _Src = _Traits::_Load(_First);\r\n                void* _First_d  = _First;\r\n                _Rewind_bytes(_First_d, _Traits::_Elem_size);\r\n                const auto _Match     = _Traits::_Load(_First_d);\r\n                const uint32_t _Bingo = _Traits::_Mask(_Src, _Match);\r\n                _Out                  = _Traits::_Store_masked(_Out, _Src, _Bingo);\r\n                _Advance_bytes(_First, _Traits::_Step);\r\n            } while (_First != _Stop);\r\n\r\n            _Rewind_bytes(_Out, _Traits::_Elem_size);\r\n            return _Out;\r\n        }\r\n\r\n        template <class _Traits>\r\n        void* _Unique_copy_impl(const void* _First, const void* const _Stop, void* _Out) noexcept {\r\n            unsigned char _Buffer[_Copy_buffer_size];\r\n            void* _Buffer_out        = _Buffer;\r\n            void* const _Buffer_stop = _Buffer + _Copy_buffer_size - _Traits::_Step;\r\n\r\n            do {\r\n                const auto _Src      = _Traits::_Load(_First);\r\n                const void* _First_d = _First;\r\n                _Rewind_bytes(_First_d, _Traits::_Elem_size);\r\n                const auto _Match     = _Traits::_Load(_First_d);\r\n                const uint32_t _Bingo = _Traits::_Mask(_Src, _Match);\r\n                _Buffer_out           = _Traits::_Store_masked(_Buffer_out, _Src, _Bingo);\r\n                _Advance_bytes(_First, _Traits::_Step);\r\n\r\n                if (_Buffer_out >= _Buffer_stop) {\r\n                    const size_t _Fill = _Byte_length(_Buffer, _Buffer_out);\r\n                    memcpy(static_cast<unsigned char*>(_Out) + _Traits::_Elem_size, _Buffer, _Fill);\r\n                    _Advance_bytes(_Out, _Fill);\r\n                    _Buffer_out = _Buffer;\r\n                }\r\n            } while (_First != _Stop);\r\n\r\n            const size_t _Fill = _Byte_length(_Buffer, _Buffer_out);\r\n            memcpy(static_cast<unsigned char*>(_Out) + _Traits::_Elem_size, _Buffer, _Fill);\r\n            _Advance_bytes(_Out, _Fill);\r\n            return _Out;\r\n        }\r\n    } // namespace _Removing\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\nvoid* __stdcall __std_remove_1(void* _First, void* const _Last, const uint8_t _Val) noexcept {\r\n    void* _Out = _First;\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Size_bytes >= 8) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{7});\r\n        _Out   = _Removing::_Remove_impl<_Removing::_Neon_1>(_First, _Stop, _Val);\r\n        _First = _Stop;\r\n    }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Use_sse42() && _Size_bytes >= 8) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{7});\r\n        _Out   = _Removing::_Remove_impl<_Removing::_Sse_1>(_First, _Stop, _Val);\r\n        _First = _Stop;\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n    return _Removing::_Remove_fallback(_First, _Last, _Out, _Val);\r\n}\r\n\r\nvoid* __stdcall __std_remove_2(void* _First, void* const _Last, const uint16_t _Val) noexcept {\r\n    void* _Out = _First;\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Size_bytes >= 16) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Out   = _Removing::_Remove_impl<_Removing::_Neon_2>(_First, _Stop, _Val);\r\n        _First = _Stop;\r\n    }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Use_sse42() && _Size_bytes >= 16) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Out   = _Removing::_Remove_impl<_Removing::_Sse_2>(_First, _Stop, _Val);\r\n        _First = _Stop;\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n    return _Removing::_Remove_fallback(_First, _Last, _Out, _Val);\r\n}\r\n\r\nvoid* __stdcall __std_remove_4(void* _First, void* const _Last, const uint32_t _Val) noexcept {\r\n    void* _Out = _First;\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Size_bytes >= 16) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Out   = _Removing::_Remove_impl<_Removing::_Neon_4>(_First, _Stop, _Val);\r\n        _First = _Stop;\r\n    }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Use_avx2() && _Size_bytes >= 32) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0x1F});\r\n        _Out   = _Removing::_Remove_impl<_Removing::_Avx_4>(_First, _Stop, _Val);\r\n        _First = _Stop;\r\n\r\n        _mm256_zeroupper(); // TRANSITION, DevCom-10331414\r\n    } else if (_Use_sse42() && _Size_bytes >= 16) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Out   = _Removing::_Remove_impl<_Removing::_Sse_4>(_First, _Stop, _Val);\r\n        _First = _Stop;\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n    return _Removing::_Remove_fallback(_First, _Last, _Out, _Val);\r\n}\r\n\r\nvoid* __stdcall __std_remove_8(void* _First, void* const _Last, const uint64_t _Val) noexcept {\r\n    void* _Out = _First;\r\n\r\n#if !defined(_M_ARM64) && !defined(_M_ARM64EC)\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Use_avx2() && _Size_bytes >= 32) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0x1F});\r\n        _Out   = _Removing::_Remove_impl<_Removing::_Avx_8>(_First, _Stop, _Val);\r\n        _First = _Stop;\r\n\r\n        _mm256_zeroupper(); // TRANSITION, DevCom-10331414\r\n    } else if (_Use_sse42() && _Size_bytes >= 16) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Out   = _Removing::_Remove_impl<_Removing::_Sse_8>(_First, _Stop, _Val);\r\n        _First = _Stop;\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n    return _Removing::_Remove_fallback(_First, _Last, _Out, _Val);\r\n}\r\n\r\nvoid* __stdcall __std_remove_copy_1(\r\n    const void* _First, const void* const _Last, void* _Out, const uint8_t _Val) noexcept {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Size_bytes >= 8) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{7});\r\n        _Out   = _Removing::_Remove_copy_impl<_Removing::_Neon_1>(_First, _Stop, _Out, _Val);\r\n        _First = _Stop;\r\n    }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Use_sse42() && _Size_bytes >= 8) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{7});\r\n        _Out   = _Removing::_Remove_copy_impl<_Removing::_Sse_1>(_First, _Stop, _Out, _Val);\r\n        _First = _Stop;\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n    return _Removing::_Remove_fallback(_First, _Last, _Out, _Val);\r\n}\r\n\r\nvoid* __stdcall __std_remove_copy_2(\r\n    const void* _First, const void* const _Last, void* _Out, const uint16_t _Val) noexcept {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Size_bytes >= 16) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Out   = _Removing::_Remove_copy_impl<_Removing::_Neon_2>(_First, _Stop, _Out, _Val);\r\n        _First = _Stop;\r\n    }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Use_sse42() && _Size_bytes >= 16) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Out   = _Removing::_Remove_copy_impl<_Removing::_Sse_2>(_First, _Stop, _Out, _Val);\r\n        _First = _Stop;\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n    return _Removing::_Remove_fallback(_First, _Last, _Out, _Val);\r\n}\r\n\r\nvoid* __stdcall __std_remove_copy_4(\r\n    const void* _First, const void* const _Last, void* _Out, const uint32_t _Val) noexcept {\r\n// We choose not to vectorize remove_copy for 32-bit elements on ARM64/ARM64EC\r\n// as this does not improve performance over the scalar code.\r\n#if !defined(_M_ARM64) && !defined(_M_ARM64EC)\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Use_avx2() && _Size_bytes >= 32) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0x1F});\r\n        _Out   = _Removing::_Remove_copy_impl<_Removing::_Avx_4>(_First, _Stop, _Out, _Val);\r\n        _First = _Stop;\r\n\r\n        _mm256_zeroupper(); // TRANSITION, DevCom-10331414\r\n    } else if (_Use_sse42() && _Size_bytes >= 16) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Out   = _Removing::_Remove_copy_impl<_Removing::_Sse_4>(_First, _Stop, _Out, _Val);\r\n        _First = _Stop;\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n    return _Removing::_Remove_fallback(_First, _Last, _Out, _Val);\r\n}\r\n\r\nvoid* __stdcall __std_remove_copy_8(\r\n    const void* _First, const void* const _Last, void* _Out, const uint64_t _Val) noexcept {\r\n#if !defined(_M_ARM64) && !defined(_M_ARM64EC)\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Use_avx2() && _Size_bytes >= 32) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0x1F});\r\n        _Out   = _Removing::_Remove_copy_impl<_Removing::_Avx_8>(_First, _Stop, _Out, _Val);\r\n        _First = _Stop;\r\n\r\n        _mm256_zeroupper(); // TRANSITION, DevCom-10331414\r\n    } else if (_Use_sse42() && _Size_bytes >= 16) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Out   = _Removing::_Remove_copy_impl<_Removing::_Sse_8>(_First, _Stop, _Out, _Val);\r\n        _First = _Stop;\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n    return _Removing::_Remove_fallback(_First, _Last, _Out, _Val);\r\n}\r\n\r\nvoid* __stdcall __std_unique_1(void* _First, void* const _Last) noexcept {\r\n    _First = const_cast<void*>(__std_adjacent_find_1(_First, _Last));\r\n\r\n    if (_First == _Last) {\r\n        return _First;\r\n    }\r\n\r\n    void* _Dest = _First;\r\n    _Advance_bytes(_First, 1);\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Size_bytes >= 8) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{7});\r\n        _Dest  = _Removing::_Unique_impl<_Removing::_Neon_1>(_First, _Stop);\r\n        _First = _Stop;\r\n    }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Use_sse42() && _Size_bytes >= 8) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{7});\r\n        _Dest  = _Removing::_Unique_impl<_Removing::_Sse_1>(_First, _Stop);\r\n        _First = _Stop;\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n    return _Removing::_Unique_fallback<uint8_t>(_First, _Last, _Dest);\r\n}\r\n\r\nvoid* __stdcall __std_unique_2(void* _First, void* const _Last) noexcept {\r\n    _First = const_cast<void*>(__std_adjacent_find_2(_First, _Last));\r\n\r\n    if (_First == _Last) {\r\n        return _First;\r\n    }\r\n\r\n    void* _Dest = _First;\r\n    _Advance_bytes(_First, 2);\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Size_bytes >= 16) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Dest  = _Removing::_Unique_impl<_Removing::_Neon_2>(_First, _Stop);\r\n        _First = _Stop;\r\n    }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Use_sse42() && _Size_bytes >= 16) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Dest  = _Removing::_Unique_impl<_Removing::_Sse_2>(_First, _Stop);\r\n        _First = _Stop;\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n    return _Removing::_Unique_fallback<uint16_t>(_First, _Last, _Dest);\r\n}\r\n\r\nvoid* __stdcall __std_unique_4(void* _First, void* const _Last) noexcept {\r\n    _First = const_cast<void*>(__std_adjacent_find_4(_First, _Last));\r\n\r\n    if (_First == _Last) {\r\n        return _First;\r\n    }\r\n\r\n    void* _Dest = _First;\r\n    _Advance_bytes(_First, 4);\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Size_bytes >= 16) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Dest  = _Removing::_Unique_impl<_Removing::_Neon_4>(_First, _Stop);\r\n        _First = _Stop;\r\n    }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Use_avx2() && _Size_bytes >= 32) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0x1F});\r\n        _Dest  = _Removing::_Unique_impl<_Removing::_Avx_4>(_First, _Stop);\r\n        _First = _Stop;\r\n\r\n        _mm256_zeroupper(); // TRANSITION, DevCom-10331414\r\n    } else if (_Use_sse42() && _Size_bytes >= 16) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Dest  = _Removing::_Unique_impl<_Removing::_Sse_4>(_First, _Stop);\r\n        _First = _Stop;\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n    return _Removing::_Unique_fallback<uint32_t>(_First, _Last, _Dest);\r\n}\r\n\r\nvoid* __stdcall __std_unique_8(void* _First, void* const _Last) noexcept {\r\n    _First = const_cast<void*>(__std_adjacent_find_8(_First, _Last));\r\n\r\n    if (_First == _Last) {\r\n        return _First;\r\n    }\r\n\r\n    void* _Dest = _First;\r\n    _Advance_bytes(_First, 8);\r\n\r\n#if !defined(_M_ARM64) && !defined(_M_ARM64EC)\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Use_avx2() && _Size_bytes >= 32) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0x1F});\r\n        _Dest  = _Removing::_Unique_impl<_Removing::_Avx_8>(_First, _Stop);\r\n        _First = _Stop;\r\n\r\n        _mm256_zeroupper(); // TRANSITION, DevCom-10331414\r\n    } else if (_Use_sse42() && _Size_bytes >= 16) {\r\n        void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Dest  = _Removing::_Unique_impl<_Removing::_Sse_8>(_First, _Stop);\r\n        _First = _Stop;\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n    return _Removing::_Unique_fallback<uint64_t>(_First, _Last, _Dest);\r\n}\r\n\r\nvoid* __stdcall __std_unique_copy_1(const void* _First, const void* const _Last, void* _Dest) noexcept {\r\n    if (_First == _Last) {\r\n        return _Dest;\r\n    }\r\n\r\n    memcpy(_Dest, _First, 1);\r\n    _Advance_bytes(_First, 1);\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Size_bytes >= 8) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{7});\r\n        _Dest  = _Removing::_Unique_copy_impl<_Removing::_Neon_1>(_First, _Stop, _Dest);\r\n        _First = _Stop;\r\n    }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Use_sse42() && _Size_bytes >= 8) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{7});\r\n        _Dest  = _Removing::_Unique_copy_impl<_Removing::_Sse_1>(_First, _Stop, _Dest);\r\n        _First = _Stop;\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n    return _Removing::_Unique_fallback<uint8_t>(_First, _Last, _Dest);\r\n}\r\n\r\nvoid* __stdcall __std_unique_copy_2(const void* _First, const void* const _Last, void* _Dest) noexcept {\r\n    if (_First == _Last) {\r\n        return _Dest;\r\n    }\r\n\r\n    memcpy(_Dest, _First, 2);\r\n    _Advance_bytes(_First, 2);\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Size_bytes >= 16) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Dest  = _Removing::_Unique_copy_impl<_Removing::_Neon_2>(_First, _Stop, _Dest);\r\n        _First = _Stop;\r\n    }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Use_sse42() && _Size_bytes >= 16) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Dest  = _Removing::_Unique_copy_impl<_Removing::_Sse_2>(_First, _Stop, _Dest);\r\n        _First = _Stop;\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n    return _Removing::_Unique_fallback<uint16_t>(_First, _Last, _Dest);\r\n}\r\n\r\nvoid* __stdcall __std_unique_copy_4(const void* _First, const void* const _Last, void* _Dest) noexcept {\r\n    if (_First == _Last) {\r\n        return _Dest;\r\n    }\r\n\r\n    memcpy(_Dest, _First, 4);\r\n    _Advance_bytes(_First, 4);\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Size_bytes >= 16) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Dest  = _Removing::_Unique_copy_impl<_Removing::_Neon_4>(_First, _Stop, _Dest);\r\n        _First = _Stop;\r\n    }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Use_avx2() && _Size_bytes >= 32) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0x1F});\r\n        _Dest  = _Removing::_Unique_copy_impl<_Removing::_Avx_4>(_First, _Stop, _Dest);\r\n        _First = _Stop;\r\n\r\n        _mm256_zeroupper(); // TRANSITION, DevCom-10331414\r\n    } else if (_Use_sse42() && _Size_bytes >= 16) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Dest  = _Removing::_Unique_copy_impl<_Removing::_Sse_4>(_First, _Stop, _Dest);\r\n        _First = _Stop;\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n    return _Removing::_Unique_fallback<uint32_t>(_First, _Last, _Dest);\r\n}\r\n\r\nvoid* __stdcall __std_unique_copy_8(const void* _First, const void* const _Last, void* _Dest) noexcept {\r\n    if (_First == _Last) {\r\n        return _Dest;\r\n    }\r\n\r\n    memcpy(_Dest, _First, 8);\r\n    _Advance_bytes(_First, 8);\r\n\r\n#if !defined(_M_ARM64) && !defined(_M_ARM64EC)\r\n    if (const size_t _Size_bytes = _Byte_length(_First, _Last); _Use_avx2() && _Size_bytes >= 32) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0x1F});\r\n        _Dest  = _Removing::_Unique_copy_impl<_Removing::_Avx_8>(_First, _Stop, _Dest);\r\n        _First = _Stop;\r\n\r\n        _mm256_zeroupper(); // TRANSITION, DevCom-10331414\r\n    } else if (_Use_sse42() && _Size_bytes >= 16) {\r\n        const void* _Stop = _First;\r\n        _Advance_bytes(_Stop, _Size_bytes & ~size_t{0xF});\r\n        _Dest  = _Removing::_Unique_copy_impl<_Removing::_Sse_8>(_First, _Stop, _Dest);\r\n        _First = _Stop;\r\n    }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n    return _Removing::_Unique_fallback<uint64_t>(_First, _Last, _Dest);\r\n}\r\n\r\n} // extern \"C\"\r\n\r\nnamespace {\r\n    namespace _Sorted_ranges {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n        struct _Traits_neon {\r\n            using _Guard                                = char;\r\n            static constexpr size_t _Vec_size           = 16;\r\n            static constexpr size_t _Tail_mask          = 0;\r\n            static constexpr bool _Has_unsigned_cmp     = true;\r\n            static constexpr uint64_t _Highest_one_mask = 1ull << 63;\r\n            static constexpr uint64_t _All_ones_mask    = static_cast<uint64_t>(-1);\r\n\r\n            static uint64_t _Bsf(const uint64_t _Mask) noexcept {\r\n                return _CountTrailingZeros64(_Mask) >> 2;\r\n            }\r\n        };\r\n\r\n        struct _Traits_1_neon : _Traits_neon {\r\n            using _Vec_t = int8x16_t;\r\n\r\n            static _Vec_t _Load(const void* const _Src) noexcept {\r\n                return _Sorting::_Traits_1_neon::_Load(_Src);\r\n            }\r\n\r\n            static uint64_t _Mask(const _Vec_t _Val) noexcept {\r\n                return _Finding::_Find_traits_1::_Mask_q(vreinterpretq_u8_s8(_Val));\r\n            }\r\n\r\n            static _Vec_t _Broadcast(const uint8_t _Data) noexcept {\r\n                return vreinterpretq_s8_u8(_Finding::_Find_traits_1::_Set_neon_q(_Data));\r\n            }\r\n\r\n            static _Vec_t _Cmp_gt(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return _Sorting::_Traits_1_neon::_Cmp_gt(_First, _Second);\r\n            }\r\n\r\n            static _Vec_t _Cmp_gt_u(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return _Sorting::_Traits_1_neon::_Cmp_gt_u(_First, _Second);\r\n            }\r\n        };\r\n\r\n        struct _Traits_2_neon : _Traits_neon {\r\n            using _Vec_t = int16x8_t;\r\n\r\n            static _Vec_t _Load(const void* const _Src) noexcept {\r\n                return _Sorting::_Traits_2_neon::_Load(_Src);\r\n            }\r\n\r\n            static uint64_t _Mask(const _Vec_t _Val) noexcept {\r\n                return _Finding::_Find_traits_2::_Mask_q(vreinterpretq_u16_s16(_Val));\r\n            }\r\n\r\n            static _Vec_t _Broadcast(const uint16_t _Data) noexcept {\r\n                return vreinterpretq_s16_u16(_Finding::_Find_traits_2::_Set_neon_q(_Data));\r\n            }\r\n\r\n            static _Vec_t _Cmp_gt(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return _Sorting::_Traits_2_neon::_Cmp_gt(_First, _Second);\r\n            }\r\n\r\n            static _Vec_t _Cmp_gt_u(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return _Sorting::_Traits_2_neon::_Cmp_gt_u(_First, _Second);\r\n            }\r\n        };\r\n\r\n        struct _Traits_4_neon : _Traits_neon {\r\n            using _Vec_t = int32x4_t;\r\n\r\n            static _Vec_t _Load(const void* const _Src) noexcept {\r\n                return _Sorting::_Traits_4_neon::_Load(_Src);\r\n            }\r\n\r\n            static uint64_t _Mask(const _Vec_t _Val) noexcept {\r\n                return _Finding::_Find_traits_4::_Mask_q(vreinterpretq_u32_s32(_Val));\r\n            }\r\n\r\n            static _Vec_t _Broadcast(const uint32_t _Data) noexcept {\r\n                return vreinterpretq_s32_u32(_Finding::_Find_traits_4::_Set_neon_q(_Data));\r\n            }\r\n\r\n            static _Vec_t _Cmp_gt(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return _Sorting::_Traits_4_neon::_Cmp_gt(_First, _Second);\r\n            }\r\n\r\n            static _Vec_t _Cmp_gt_u(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return _Sorting::_Traits_4_neon::_Cmp_gt_u(_First, _Second);\r\n            }\r\n        };\r\n\r\n        struct _Traits_8_neon : _Traits_neon {\r\n            using _Vec_t = int64x2_t;\r\n\r\n            static _Vec_t _Load(const void* const _Src) noexcept {\r\n                return _Sorting::_Traits_8_neon::_Load(_Src);\r\n            }\r\n\r\n            static uint64_t _Mask(const _Vec_t _Val) noexcept {\r\n                return _Finding::_Find_traits_8::_Mask_q(vreinterpretq_u64_s64(_Val));\r\n            }\r\n\r\n            static _Vec_t _Broadcast(const uint64_t _Data) noexcept {\r\n                return vreinterpretq_s64_u64(_Finding::_Find_traits_8::_Set_neon_q(_Data));\r\n            }\r\n\r\n            static _Vec_t _Cmp_gt(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return _Sorting::_Traits_8_neon::_Cmp_gt(_First, _Second);\r\n            }\r\n\r\n            static _Vec_t _Cmp_gt_u(const _Vec_t _First, const _Vec_t _Second) noexcept {\r\n                return _Sorting::_Traits_8_neon::_Cmp_gt_u(_First, _Second);\r\n            }\r\n        };\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n        struct _Traits_avx {\r\n            using _Guard                                = _Zeroupper_on_exit;\r\n            static constexpr size_t _Vec_size           = 32;\r\n            static constexpr size_t _Tail_mask          = 0x1C;\r\n            static constexpr bool _Has_unsigned_cmp     = false;\r\n            static constexpr uint32_t _Highest_one_mask = 1u << (_Vec_size - 1);\r\n            static constexpr uint32_t _All_ones_mask    = uint32_t{(uint64_t{1} << _Vec_size) - 1};\r\n\r\n            static __m256i _Load(const void* const _Src) noexcept {\r\n                return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_Src));\r\n            }\r\n\r\n            static __m256i _Load_mask(const void* const _Src, const __m256i _Mask) noexcept {\r\n                return _mm256_maskload_epi32(reinterpret_cast<const int*>(_Src), _Mask);\r\n            }\r\n\r\n            static unsigned long _Mask(const __m256i _Val) noexcept {\r\n                return _mm256_movemask_epi8(_Val);\r\n            }\r\n\r\n            static uint32_t _Bsf(const uint32_t _Val) noexcept {\r\n                return _tzcnt_u32(_Val);\r\n            }\r\n        };\r\n\r\n        struct _Traits_1_avx : _Traits_avx {\r\n            static __m256i _Broadcast(const uint8_t _Data) noexcept {\r\n                return _mm256_broadcastb_epi8(_mm_cvtsi32_si128(static_cast<uint32_t>(_Data)));\r\n            }\r\n\r\n            static __m256i _Cmp_gt(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpgt_epi8(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Sign_correction(const __m256i _Data) noexcept {\r\n                return _mm256_sub_epi8(_Data, _mm256_set1_epi8(static_cast<char>(0x80)));\r\n            }\r\n        };\r\n\r\n        struct _Traits_2_avx : _Traits_avx {\r\n            static __m256i _Broadcast(const uint16_t _Data) noexcept {\r\n                return _mm256_broadcastw_epi16(_mm_cvtsi32_si128(static_cast<uint32_t>(_Data)));\r\n            }\r\n\r\n            static __m256i _Cmp_gt(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpgt_epi16(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Sign_correction(const __m256i _Data) noexcept {\r\n                return _mm256_sub_epi16(_Data, _mm256_set1_epi16(static_cast<short>(0x8000)));\r\n            }\r\n        };\r\n\r\n        struct _Traits_4_avx : _Traits_avx {\r\n            static __m256i _Broadcast(const uint32_t _Data) noexcept {\r\n                return _mm256_broadcastd_epi32(_mm_cvtsi32_si128(_Data));\r\n            }\r\n\r\n            static __m256i _Cmp_gt(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpgt_epi32(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Sign_correction(const __m256i _Data) noexcept {\r\n                return _mm256_sub_epi32(_Data, _mm256_set1_epi32(static_cast<long>(0x8000'0000)));\r\n            }\r\n        };\r\n\r\n        struct _Traits_8_avx : _Traits_avx {\r\n            static __m256i _Broadcast(const uint64_t _Data) noexcept {\r\n#ifdef _WIN64\r\n                return _mm256_broadcastq_epi64(_mm_cvtsi64_si128(_Data));\r\n#else // ^^^ defined(_WIN64) / !defined(_WIN64), workaround, _mm_cvtsi64_si128 does not compile vvv\r\n                return _mm256_set1_epi64x(_Data);\r\n#endif // ^^^ !defined(_WIN64) ^^^\r\n            }\r\n\r\n            static __m256i _Cmp_gt(const __m256i _First, const __m256i _Second) noexcept {\r\n                return _mm256_cmpgt_epi64(_First, _Second);\r\n            }\r\n\r\n            static __m256i _Sign_correction(const __m256i _Data) noexcept {\r\n                return _mm256_sub_epi64(_Data, _mm256_set1_epi64x(static_cast<long long>(0x8000'0000'0000'0000)));\r\n            }\r\n        };\r\n\r\n        struct _Traits_sse {\r\n            using _Guard                                = char;\r\n            static constexpr size_t _Vec_size           = 16;\r\n            static constexpr size_t _Tail_mask          = 0;\r\n            static constexpr bool _Has_unsigned_cmp     = false;\r\n            static constexpr uint32_t _Highest_one_mask = 1u << (_Vec_size - 1);\r\n            static constexpr uint32_t _All_ones_mask    = uint32_t{(uint64_t{1} << _Vec_size) - 1};\r\n\r\n            static __m128i _Load(const void* const _Src) noexcept {\r\n                return _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Src));\r\n            }\r\n\r\n            static unsigned long _Mask(const __m128i _Val) noexcept {\r\n                return _mm_movemask_epi8(_Val);\r\n            }\r\n\r\n            static uint32_t _Bsf(const uint32_t _Val) noexcept {\r\n                unsigned long _Index;\r\n                // CodeQL [SM02313] _Index is always initialized: _Val != 0; see explanation at call sites.\r\n                _BitScanForward(&_Index, _Val);\r\n                return _Index;\r\n            }\r\n        };\r\n\r\n        struct _Traits_1_sse : _Traits_sse {\r\n            static __m128i _Broadcast(const uint8_t _Data) noexcept {\r\n                return _mm_shuffle_epi8(_mm_cvtsi32_si128(static_cast<uint32_t>(_Data)), _mm_setzero_si128());\r\n            }\r\n\r\n            static __m128i _Cmp_gt(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpgt_epi8(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Sign_correction(const __m128i _Data) noexcept {\r\n                return _mm_sub_epi8(_Data, _mm_set1_epi8(static_cast<char>(0x80)));\r\n            }\r\n        };\r\n\r\n        struct _Traits_2_sse : _Traits_sse {\r\n            static __m128i _Broadcast(const uint16_t _Data) noexcept {\r\n                return _mm_shuffle_epi8(_mm_cvtsi32_si128(static_cast<uint32_t>(_Data)), _mm_set1_epi16(0x0100));\r\n            }\r\n\r\n            static __m128i _Cmp_gt(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpgt_epi16(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Sign_correction(const __m128i _Data) noexcept {\r\n                return _mm_sub_epi16(_Data, _mm_set1_epi16(static_cast<short>(0x8000)));\r\n            }\r\n        };\r\n\r\n        struct _Traits_4_sse : _Traits_sse {\r\n            static __m128i _Broadcast(const uint32_t _Data) noexcept {\r\n                return _mm_shuffle_epi32(_mm_cvtsi32_si128(_Data), _MM_SHUFFLE(0, 0, 0, 0));\r\n            }\r\n\r\n            static __m128i _Cmp_gt(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpgt_epi32(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Sign_correction(const __m128i _Data) noexcept {\r\n                return _mm_sub_epi32(_Data, _mm_set1_epi32(static_cast<long>(0x8000'0000)));\r\n            }\r\n        };\r\n\r\n        struct _Traits_8_sse : _Traits_sse {\r\n            static __m128i _Broadcast(const uint64_t _Data) noexcept {\r\n#ifdef _WIN64\r\n                return _mm_shuffle_epi32(_mm_cvtsi64_si128(_Data), _MM_SHUFFLE(1, 0, 1, 0));\r\n#else // ^^^ defined(_WIN64) / !defined(_WIN64), workaround, _mm_cvtsi64_si128 does not compile vvv\r\n                return _mm_set1_epi64x(_Data);\r\n#endif // ^^^ !defined(_WIN64) ^^^\r\n            }\r\n\r\n            static __m128i _Cmp_gt(const __m128i _First, const __m128i _Second) noexcept {\r\n                return _mm_cmpgt_epi64(_First, _Second);\r\n            }\r\n\r\n            static __m128i _Sign_correction(const __m128i _Data) noexcept {\r\n                return _mm_sub_epi64(_Data, _mm_set1_epi64x(static_cast<long long>(0x8000'0000'0000'0000)));\r\n            }\r\n        };\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n\r\n        template <class _Traits, class _Ty>\r\n        bool _Includes_impl(\r\n            const void* _First1, const void* const _Last1, const void* _First2, const void* const _Last2) noexcept {\r\n            if constexpr (!std::is_void_v<_Traits>) {\r\n                // Only skipping some parts of haystack that are less than current needle element is vectorized.\r\n                // Otherwise this is scalar algorithm.\r\n\r\n                constexpr bool _Is_signed = std::is_signed_v<_Ty>;\r\n                [[maybe_unused]] typename _Traits::_Guard _Guard; // TRANSITION, DevCom-10331414\r\n\r\n                const size_t _Size_bytes_1 = _Byte_length(_First1, _Last1);\r\n                const void* _Stop1         = _First1;\r\n                _Advance_bytes(_Stop1, _Size_bytes_1 & ~(_Traits::_Vec_size - 1));\r\n\r\n                _Ty _Val2    = *reinterpret_cast<const _Ty*>(_First2);\r\n                auto _Start2 = _Traits::_Broadcast(_Val2);\r\n                if constexpr (!_Is_signed && !_Traits::_Has_unsigned_cmp) {\r\n                    _Start2 = _Traits::_Sign_correction(_Start2);\r\n                }\r\n\r\n                do {\r\n                    auto _Data1 = _Traits::_Load(_First1);\r\n                    if constexpr (!_Is_signed && !_Traits::_Has_unsigned_cmp) {\r\n                        _Data1 = _Traits::_Sign_correction(_Data1);\r\n                    }\r\n\r\n                    const void* _Next1 = _First1;\r\n                    _Advance_bytes(_Next1, _Traits::_Vec_size);\r\n\r\n                    const auto _Cmp_gt_wrap = [](const auto _First, const auto _Second) noexcept {\r\n                        if constexpr (_Is_signed || !_Traits::_Has_unsigned_cmp) {\r\n                            return _Traits::_Cmp_gt(_First, _Second);\r\n                        } else {\r\n                            return _Traits::_Cmp_gt_u(_First, _Second);\r\n                        }\r\n                    };\r\n\r\n                    const auto _Greater_start_2 = _Traits::_Mask(_Cmp_gt_wrap(_Start2, _Data1));\r\n                    // Testing _Highest_one_mask can be a bit more efficient than comparing against\r\n                    // _All_ones_mask (will test sign, and can share comparison with != 0 below).\r\n                    if ((_Greater_start_2 & _Traits::_Highest_one_mask) != 0) {\r\n                        // Needle first element is greater than each element of haystack vector.\r\n                        // Proceed to the next one, without updating the needle comparand.\r\n                        _First1 = _Next1;\r\n                    } else {\r\n                        if (_Greater_start_2 != 0) {\r\n                            // Needle first element is greater than some first elements of haystack part.\r\n                            // Advance past these elements.\r\n                            // The input is nonzero because we handled that case with _Highest_one_mask branch above.\r\n                            const auto _Skip = _Traits::_Bsf(_Greater_start_2 ^ _Traits::_All_ones_mask);\r\n                            _Advance_bytes(_First1, _Skip);\r\n                        }\r\n\r\n                        // The rest is scalar loop that completes the remaining vector-sized haystack part.\r\n                        // Except that it updates current needle value to compare against.\r\n                        do {\r\n                            const _Ty _Val1 = *static_cast<const _Ty*>(_First1);\r\n\r\n                            if (_Val2 < _Val1) {\r\n                                return false;\r\n                            }\r\n\r\n                            if (_Val2 == _Val1) {\r\n                                _Advance_bytes(_First2, sizeof(_Ty));\r\n                                if (_First2 == _Last2) {\r\n                                    return true;\r\n                                }\r\n\r\n                                _Val2 = *reinterpret_cast<const _Ty*>(_First2);\r\n                            }\r\n\r\n                            _Advance_bytes(_First1, sizeof(_Ty));\r\n                        } while (_First1 != _Next1);\r\n\r\n                        _Start2 = _Traits::_Broadcast(_Val2);\r\n                        if constexpr (!_Is_signed && !_Traits::_Has_unsigned_cmp) {\r\n                            _Start2 = _Traits::_Sign_correction(_Start2);\r\n                        }\r\n                    }\r\n                } while (_First1 != _Stop1);\r\n\r\n                if constexpr (_Traits::_Tail_mask != 0) {\r\n                    const size_t _Tail_bytes_size_1 = _Size_bytes_1 & _Traits::_Tail_mask;\r\n                    if (_Tail_bytes_size_1 != 0) {\r\n                        // Just try to advance past less one more time.\r\n                        // Don't need to repeat the scalar part here - falling to scalar loop anyway.\r\n                        const auto _Tail_mask = _Avx2_tail_mask_32(_Tail_bytes_size_1);\r\n                        auto _Data1           = _Traits::_Load_mask(_First1, _Tail_mask);\r\n                        if constexpr (!_Is_signed) {\r\n                            _Data1 = _Traits::_Sign_correction(_Data1);\r\n                        }\r\n\r\n                        const auto _Cmp                 = _Traits::_Cmp_gt(_Start2, _Data1);\r\n                        const uint32_t _Greater_start_2 = _Traits::_Mask(_mm256_and_si256(_Cmp, _Tail_mask));\r\n                        if (_Greater_start_2 != 0) {\r\n                            // Needle first element is greater than some first elements of haystack part.\r\n                            // Advance past these elements.\r\n                            // The input is nonzero because tail mask will have zeros for remaining elements.\r\n                            const uint32_t _Skip = _Traits::_Bsf(_Greater_start_2 ^ _Traits::_All_ones_mask);\r\n                            _Advance_bytes(_First1, _Skip);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (_First1 == _Last1) {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            auto _Ptr1 = static_cast<const _Ty*>(_First1);\r\n            auto _Ptr2 = static_cast<const _Ty*>(_First2);\r\n\r\n            for (;;) {\r\n                if (*_Ptr1 < *_Ptr2) {\r\n                    ++_Ptr1;\r\n                    if (_Ptr1 == _Last1) {\r\n                        return false;\r\n                    }\r\n                } else if (*_Ptr2 < *_Ptr1) {\r\n                    return false;\r\n                } else {\r\n                    ++_Ptr1;\r\n                    ++_Ptr2;\r\n                    if (_Ptr2 == _Last2) {\r\n                        return true;\r\n                    } else if (_Ptr1 == _Last1) {\r\n                        return false;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        struct _Traits_1 {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            using _Neon = _Traits_1_neon;\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            using _Sse = _Traits_1_sse;\r\n            using _Avx = _Traits_1_avx;\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n        };\r\n\r\n        struct _Traits_2 {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            using _Neon = _Traits_2_neon;\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            using _Sse = _Traits_2_sse;\r\n            using _Avx = _Traits_2_avx;\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n        };\r\n\r\n        struct _Traits_4 {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            using _Neon = _Traits_4_neon;\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            using _Sse = _Traits_4_sse;\r\n            using _Avx = _Traits_4_avx;\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n        };\r\n\r\n        struct _Traits_8 {\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            using _Neon = _Traits_8_neon;\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            using _Sse = _Traits_8_sse;\r\n            using _Avx = _Traits_8_avx;\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n        };\r\n\r\n        template <class _Traits, class _Ty>\r\n        bool __stdcall _Includes_disp(const void* const _First1, const void* const _Last1, const void* const _First2,\r\n            const void* const _Last2) noexcept {\r\n            const size_t _Size_bytes_1 = _Byte_length(_First1, _Last1);\r\n            const size_t _Size_bytes_2 = _Byte_length(_First2, _Last2);\r\n            if (_Size_bytes_2 == 0) {\r\n                return true;\r\n            } else if (_Size_bytes_1 < _Size_bytes_2) {\r\n                return false;\r\n            }\r\n\r\n#if defined(_M_ARM64) || defined(_M_ARM64EC)\r\n            if (_Size_bytes_1 >= 16) {\r\n                return _Includes_impl<typename _Traits::_Neon, _Ty>(_First1, _Last1, _First2, _Last2);\r\n            }\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) / !defined(_M_ARM64) && !defined(_M_ARM64EC) vvv\r\n            if (_Size_bytes_1 >= 32 && _Use_avx2()) {\r\n                return _Includes_impl<typename _Traits::_Avx, _Ty>(_First1, _Last1, _First2, _Last2);\r\n            }\r\n\r\n            if (_Size_bytes_1 >= 16 && _Use_sse42()) {\r\n                return _Includes_impl<typename _Traits::_Sse, _Ty>(_First1, _Last1, _First2, _Last2);\r\n            }\r\n#endif // ^^^ !defined(_M_ARM64) && !defined(_M_ARM64EC) ^^^\r\n            return _Includes_impl<void, _Ty>(_First1, _Last1, _First2, _Last2);\r\n        }\r\n    } // namespace _Sorted_ranges\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n__declspec(noalias) bool __stdcall __std_includes_less_1i(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const void* const _Last2) noexcept {\r\n    return _Sorted_ranges::_Includes_disp<_Sorted_ranges::_Traits_1, int8_t>(_First1, _Last1, _First2, _Last2);\r\n}\r\n\r\n__declspec(noalias) bool __stdcall __std_includes_less_1u(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const void* const _Last2) noexcept {\r\n    return _Sorted_ranges::_Includes_disp<_Sorted_ranges::_Traits_1, uint8_t>(_First1, _Last1, _First2, _Last2);\r\n}\r\n\r\n__declspec(noalias) bool __stdcall __std_includes_less_2i(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const void* const _Last2) noexcept {\r\n    return _Sorted_ranges::_Includes_disp<_Sorted_ranges::_Traits_2, int16_t>(_First1, _Last1, _First2, _Last2);\r\n}\r\n\r\n__declspec(noalias) bool __stdcall __std_includes_less_2u(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const void* const _Last2) noexcept {\r\n    return _Sorted_ranges::_Includes_disp<_Sorted_ranges::_Traits_2, uint16_t>(_First1, _Last1, _First2, _Last2);\r\n}\r\n\r\n__declspec(noalias) bool __stdcall __std_includes_less_4i(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const void* const _Last2) noexcept {\r\n    return _Sorted_ranges::_Includes_disp<_Sorted_ranges::_Traits_4, int32_t>(_First1, _Last1, _First2, _Last2);\r\n}\r\n\r\n__declspec(noalias) bool __stdcall __std_includes_less_4u(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const void* const _Last2) noexcept {\r\n    return _Sorted_ranges::_Includes_disp<_Sorted_ranges::_Traits_4, uint32_t>(_First1, _Last1, _First2, _Last2);\r\n}\r\n\r\n__declspec(noalias) bool __stdcall __std_includes_less_8i(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const void* const _Last2) noexcept {\r\n    return _Sorted_ranges::_Includes_disp<_Sorted_ranges::_Traits_8, int64_t>(_First1, _Last1, _First2, _Last2);\r\n}\r\n\r\n__declspec(noalias) bool __stdcall __std_includes_less_8u(\r\n    const void* const _First1, const void* const _Last1, const void* const _First2, const void* const _Last2) noexcept {\r\n    return _Sorted_ranges::_Includes_disp<_Sorted_ranges::_Traits_8, uint64_t>(_First1, _Last1, _First2, _Last2);\r\n}\r\n\r\n} // extern \"C\"\r\n\r\n#ifndef _M_ARM64\r\nnamespace {\r\n    namespace _Bitset_to_string {\r\n#ifdef _M_ARM64EC\r\n        using _Traits_1_avx = void;\r\n        using _Traits_1_sse = void;\r\n        using _Traits_2_avx = void;\r\n        using _Traits_2_sse = void;\r\n#else // ^^^ defined(_M_ARM64EC) / !defined(_M_ARM64EC) vvv\r\n        struct _Traits_avx {\r\n            static void _Out(void* const _Dest, const __m256i _Elems) noexcept {\r\n                _mm256_storeu_si256(static_cast<__m256i*>(_Dest), _Elems);\r\n            }\r\n\r\n            static void _Exit_vectorized() noexcept {\r\n                _mm256_zeroupper();\r\n            }\r\n        };\r\n\r\n        struct _Traits_sse {\r\n            static void _Out(void* const _Dest, const __m128i _Elems) noexcept {\r\n                _mm_storeu_si128(static_cast<__m128i*>(_Dest), _Elems);\r\n            }\r\n\r\n            static void _Exit_vectorized() noexcept {}\r\n        };\r\n\r\n        struct _Traits_1_avx : _Traits_avx {\r\n            using _Value_type = uint32_t;\r\n\r\n            static __m256i _Set(const char _Val) noexcept {\r\n                return _mm256_broadcastb_epi8(_mm_cvtsi32_si128(_Val));\r\n            }\r\n\r\n            static __m256i __forceinline _Step(const uint32_t _Val, const __m256i _Px0, const __m256i _Px1) noexcept {\r\n                const __m128i _Vx0 = _mm_cvtsi32_si128(_Val);\r\n                const __m128i _Vx1 =\r\n                    _mm_shuffle_epi8(_Vx0, _mm_set_epi32(0x00000000, 0x01010101, 0x02020202, 0x03030303));\r\n                const __m256i _Vx2 = _mm256_castsi128_si256(_Vx1);\r\n                const __m256i _Vx3 = _mm256_permutevar8x32_epi32(_Vx2, _mm256_set_epi32(3, 3, 2, 2, 1, 1, 0, 0));\r\n                const __m256i _Msk = _mm256_and_si256(_Vx3, _mm256_set1_epi64x(0x0102040810204080));\r\n                const __m256i _Ex0 = _mm256_cmpeq_epi8(_Msk, _mm256_setzero_si256());\r\n                const __m256i _Ex1 = _mm256_blendv_epi8(_Px1, _Px0, _Ex0);\r\n                return _Ex1;\r\n            }\r\n        };\r\n\r\n        struct _Traits_1_sse : _Traits_sse {\r\n            using _Value_type = uint16_t;\r\n\r\n            static __m128i _Set(const char _Val) noexcept {\r\n                return _mm_shuffle_epi8(_mm_cvtsi32_si128(_Val), _mm_setzero_si128());\r\n            }\r\n\r\n            static __m128i __forceinline _Step(const uint16_t _Val, const __m128i _Px0, const __m128i _Px1) noexcept {\r\n                const __m128i _Vx0 = _mm_cvtsi32_si128(_Val);\r\n                const __m128i _Vx1 =\r\n                    _mm_shuffle_epi8(_Vx0, _mm_set_epi32(0x00000000, 0x00000000, 0x01010101, 0x01010101));\r\n                const __m128i _Msk = _mm_and_si128(_Vx1, _mm_set1_epi64x(0x0102040810204080));\r\n                const __m128i _Ex0 = _mm_cmpeq_epi8(_Msk, _mm_setzero_si128());\r\n                const __m128i _Ex1 = _mm_blendv_epi8(_Px1, _Px0, _Ex0);\r\n                return _Ex1;\r\n            }\r\n        };\r\n\r\n        struct _Traits_2_avx : _Traits_avx {\r\n            using _Value_type = uint16_t;\r\n\r\n            static __m256i _Set(const wchar_t _Val) noexcept {\r\n                return _mm256_broadcastw_epi16(_mm_cvtsi32_si128(_Val));\r\n            }\r\n\r\n            static __m256i __forceinline _Step(const uint16_t _Val, const __m256i _Px0, const __m256i _Px1) noexcept {\r\n                const __m128i _Vx0 = _mm_cvtsi32_si128(_Val);\r\n                const __m128i _Vx1 =\r\n                    _mm_shuffle_epi8(_Vx0, _mm_set_epi32(0x00000000, 0x00000000, 0x01010101, 0x01010101));\r\n                const __m256i _Vx2 = _mm256_castsi128_si256(_Vx1);\r\n                const __m256i _Vx3 = _mm256_permute4x64_epi64(_Vx2, _MM_SHUFFLE(1, 1, 0, 0));\r\n                const __m256i _Msk = _mm256_and_si256(_Vx3,\r\n                    _mm256_set_epi64x(0x0001000200040008, 0x0010002000400080, 0x0001000200040008, 0x0010002000400080));\r\n                const __m256i _Ex0 = _mm256_cmpeq_epi16(_Msk, _mm256_setzero_si256());\r\n                const __m256i _Ex1 = _mm256_blendv_epi8(_Px1, _Px0, _Ex0);\r\n                return _Ex1;\r\n            }\r\n        };\r\n\r\n        struct _Traits_2_sse : _Traits_sse {\r\n            using _Value_type = uint8_t;\r\n\r\n            static __m128i _Set(const wchar_t _Val) noexcept {\r\n                return _mm_set1_epi16(_Val);\r\n            }\r\n\r\n            static __m128i __forceinline _Step(const uint8_t _Val, const __m128i _Px0, const __m128i _Px1) noexcept {\r\n                const __m128i _Vx  = _mm_set1_epi16(_Val);\r\n                const __m128i _Msk = _mm_and_si128(_Vx, _mm_set_epi64x(0x0001000200040008, 0x0010002000400080));\r\n                const __m128i _Ex0 = _mm_cmpeq_epi16(_Msk, _mm_setzero_si128());\r\n                const __m128i _Ex1 = _mm_blendv_epi8(_Px1, _Px0, _Ex0);\r\n                return _Ex1;\r\n            }\r\n        };\r\n\r\n        template <class _Traits, class _Elem>\r\n        void __stdcall _Impl(\r\n            _Elem* const _Dest, const void* _Src, size_t _Size_bits, const _Elem _Elem0, const _Elem _Elem1) noexcept {\r\n            constexpr size_t _Step_size_bits = sizeof(typename _Traits::_Value_type) * 8;\r\n\r\n            const auto _Px0 = _Traits::_Set(_Elem0);\r\n            const auto _Px1 = _Traits::_Set(_Elem1);\r\n            if (_Size_bits >= _Step_size_bits) {\r\n                _Elem* _Pos = _Dest + _Size_bits;\r\n                _Size_bits &= _Step_size_bits - 1;\r\n                _Elem* const _Stop_at = _Dest + _Size_bits;\r\n                do {\r\n                    typename _Traits::_Value_type _Val;\r\n                    memcpy(&_Val, _Src, sizeof(_Val));\r\n                    const auto _Elems = _Traits::_Step(_Val, _Px0, _Px1);\r\n                    _Pos -= _Step_size_bits;\r\n                    _Traits::_Out(_Pos, _Elems);\r\n                    _Advance_bytes(_Src, sizeof(_Val));\r\n                } while (_Pos != _Stop_at);\r\n            }\r\n\r\n            if (_Size_bits > 0) {\r\n                typename _Traits::_Value_type _Val;\r\n                memcpy(&_Val, _Src, sizeof(_Val));\r\n                const auto _Elems = _Traits::_Step(_Val, _Px0, _Px1);\r\n                _Elem _Tmp[_Step_size_bits];\r\n                _Traits::_Out(_Tmp, _Elems);\r\n                const _Elem* const _Tmpd = _Tmp + (_Step_size_bits - _Size_bits);\r\n                memcpy(_Dest, _Tmpd, _Size_bits * sizeof(_Elem));\r\n            }\r\n\r\n            _Traits::_Exit_vectorized(); // TRANSITION, DevCom-10331414\r\n        }\r\n#endif // ^^^ !defined(_M_ARM64EC) ^^^\r\n\r\n        template <class _Avx_traits, class _Sse_traits, class _Elem>\r\n        void __stdcall _Dispatch(_Elem* const _Dest, const void* const _Src, const size_t _Size_bits,\r\n            const _Elem _Elem0, const _Elem _Elem1) noexcept {\r\n#ifndef _M_ARM64EC\r\n            if (_Use_avx2() && _Size_bits >= 256) {\r\n                _Impl<_Avx_traits>(_Dest, _Src, _Size_bits, _Elem0, _Elem1);\r\n            } else if (_Use_sse42()) {\r\n                _Impl<_Sse_traits>(_Dest, _Src, _Size_bits, _Elem0, _Elem1);\r\n            } else\r\n#endif // ^^^ !defined(_M_ARM64EC) ^^^\r\n            {\r\n                const auto _Arr = reinterpret_cast<const uint8_t*>(_Src);\r\n                for (size_t _Ix = 0; _Ix < _Size_bits; ++_Ix) {\r\n                    _Dest[_Size_bits - 1 - _Ix] = ((_Arr[_Ix >> 3] >> (_Ix & 7)) & 1) != 0 ? _Elem1 : _Elem0;\r\n                }\r\n            }\r\n        }\r\n    } // namespace _Bitset_to_string\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n__declspec(noalias) void __stdcall __std_bitset_to_string_1(\r\n    char* const _Dest, const void* const _Src, const size_t _Size_bits, const char _Elem0, const char _Elem1) noexcept {\r\n    using namespace _Bitset_to_string;\r\n    _Dispatch<_Traits_1_avx, _Traits_1_sse>(_Dest, _Src, _Size_bits, _Elem0, _Elem1);\r\n}\r\n\r\n__declspec(noalias) void __stdcall __std_bitset_to_string_2(wchar_t* const _Dest, const void* const _Src,\r\n    const size_t _Size_bits, const wchar_t _Elem0, const wchar_t _Elem1) noexcept {\r\n    using namespace _Bitset_to_string;\r\n    _Dispatch<_Traits_2_avx, _Traits_2_sse>(_Dest, _Src, _Size_bits, _Elem0, _Elem1);\r\n}\r\n\r\n} // extern \"C\"\r\n\r\nnamespace {\r\n    namespace _Bitset_from_string {\r\n#ifdef _M_ARM64EC\r\n        using _Traits_1_avx = void;\r\n        using _Traits_1_sse = void;\r\n        using _Traits_2_avx = void;\r\n        using _Traits_2_sse = void;\r\n#else // ^^^ defined(_M_ARM64EC) / !defined(_M_ARM64EC) vvv\r\n        struct _Traits_avx {\r\n            using _Guard = _Zeroupper_on_exit;\r\n            using _Vec   = __m256i;\r\n\r\n            static __m256i _Load(const void* _Src) noexcept {\r\n                return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(_Src));\r\n            }\r\n\r\n            static void _Store(void* _Dest, const __m256i _Val) noexcept {\r\n                _mm256_storeu_si256(reinterpret_cast<__m256i*>(_Dest), _Val);\r\n            }\r\n\r\n            static bool _Check(const __m256i _Val, const __m256i _Ex1, const __m256i _Dx0) noexcept {\r\n                return _mm256_testc_si256(_Ex1, _mm256_xor_si256(_Val, _Dx0));\r\n            }\r\n        };\r\n\r\n        struct _Traits_sse {\r\n            using _Guard = char;\r\n            using _Vec   = __m128i;\r\n\r\n            static __m128i _Load(const void* _Src) noexcept {\r\n                return _mm_loadu_si128(reinterpret_cast<const __m128i*>(_Src));\r\n            }\r\n\r\n            static void _Store(void* _Dest, const __m128i _Val) noexcept {\r\n                _mm_storeu_si128(reinterpret_cast<__m128i*>(_Dest), _Val);\r\n            }\r\n\r\n            static bool _Check(const __m128i _Val, const __m128i _Ex1, const __m128i _Dx0) noexcept {\r\n                return _mm_testc_si128(_Ex1, _mm_xor_si128(_Val, _Dx0));\r\n            }\r\n        };\r\n\r\n        struct _Traits_1_avx : _Traits_avx {\r\n            static __m256i _Set(const char _Val) noexcept {\r\n                return _mm256_set1_epi8(_Val);\r\n            }\r\n\r\n            static uint32_t _To_bits(const __m256i _Ex1) noexcept {\r\n                const __m256i _Shuf = _mm256_set_epi8( //\r\n                    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, //\r\n                    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\r\n\r\n                const __m256i _Ex2 = _mm256_shuffle_epi8(_Ex1, _Shuf);\r\n                return _rotl(static_cast<uint32_t>(_mm256_movemask_epi8(_Ex2)), 16);\r\n            }\r\n\r\n            static __m256i _Cmp(const __m256i _Val, const __m256i _Dx1) noexcept {\r\n                return _mm256_cmpeq_epi8(_Val, _Dx1);\r\n            }\r\n        };\r\n\r\n        struct _Traits_1_sse : _Traits_sse {\r\n            static __m128i _Set(const char _Val) noexcept {\r\n                return _mm_shuffle_epi8(_mm_cvtsi32_si128(_Val), _mm_setzero_si128());\r\n            }\r\n\r\n            static uint16_t _To_bits(const __m128i _Ex1) noexcept {\r\n                const __m128i _Shuf = _mm_set_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\r\n                const __m128i _Ex2  = _mm_shuffle_epi8(_Ex1, _Shuf);\r\n                return static_cast<uint16_t>(_mm_movemask_epi8(_Ex2));\r\n            }\r\n\r\n            static __m128i _Cmp(const __m128i _Val, const __m128i _Dx1) noexcept {\r\n                return _mm_cmpeq_epi8(_Val, _Dx1);\r\n            }\r\n        };\r\n\r\n        struct _Traits_2_avx : _Traits_avx {\r\n            static __m256i _Set(const wchar_t _Val) noexcept {\r\n                return _mm256_set1_epi16(_Val);\r\n            }\r\n\r\n            static uint16_t _To_bits(const __m256i _Ex1) noexcept {\r\n                const __m256i _Shuf = _mm256_set_epi8( //\r\n                    +0, +2, +4, +6, +8, 10, 12, 14, -1, -1, -1, -1, -1, -1, -1, -1, //\r\n                    -1, -1, -1, -1, -1, -1, -1, -1, +0, +2, +4, +6, +8, 10, 12, 14);\r\n\r\n                const __m256i _Ex2 = _mm256_shuffle_epi8(_Ex1, _Shuf);\r\n                return static_cast<uint16_t>(_rotl(static_cast<uint32_t>(_mm256_movemask_epi8(_Ex2)), 8));\r\n            }\r\n\r\n            static __m256i _Cmp(const __m256i _Val, const __m256i _Dx1) noexcept {\r\n                return _mm256_cmpeq_epi16(_Val, _Dx1);\r\n            }\r\n        };\r\n\r\n        struct _Traits_2_sse : _Traits_sse {\r\n            static __m128i _Set(const wchar_t _Val) noexcept {\r\n                return _mm_set1_epi16(_Val);\r\n            }\r\n\r\n            static uint8_t _To_bits(const __m128i _Ex1) noexcept {\r\n                const __m128i _Shuf = _mm_set_epi8(-1, -1, -1, -1, -1, -1, -1, -1, 0, 2, 4, 6, 8, 10, 12, 14);\r\n                const __m128i _Ex2  = _mm_shuffle_epi8(_Ex1, _Shuf);\r\n                return static_cast<uint8_t>(_mm_movemask_epi8(_Ex2));\r\n            }\r\n\r\n            static __m128i _Cmp(const __m128i _Val, const __m128i _Dx1) noexcept {\r\n                return _mm_cmpeq_epi16(_Val, _Dx1);\r\n            }\r\n        };\r\n\r\n        template <class _Traits, class _Elem, class _OutFn>\r\n        bool _Loop(const _Elem* const _Src, const _Elem* _Src_end, const typename _Traits::_Vec _Dx0,\r\n            const typename _Traits::_Vec _Dx1, _OutFn _Out) noexcept {\r\n            for (;;) {\r\n                typename _Traits::_Vec _Val;\r\n                constexpr size_t _Per_vec = sizeof(_Val) / sizeof(_Elem);\r\n\r\n                if (const size_t _Left = _Src_end - _Src; _Left >= _Per_vec) {\r\n                    _Src_end -= _Per_vec;\r\n                    _Val = _Traits::_Load(_Src_end);\r\n                } else if (_Left == 0) {\r\n                    return true;\r\n                } else {\r\n                    _Src_end = _Src;\r\n                    _Elem _Tmp[_Per_vec];\r\n                    _Traits::_Store(_Tmp, _Dx0);\r\n                    _Elem* const _Tmpd = _Tmp + (_Per_vec - _Left);\r\n                    memcpy(_Tmpd, _Src_end, _Left * sizeof(_Elem));\r\n                    _Val = _Traits::_Load(_Tmp);\r\n                }\r\n\r\n                const auto _Ex1 = _Traits::_Cmp(_Val, _Dx1);\r\n\r\n                if (!_Traits::_Check(_Val, _Ex1, _Dx0)) {\r\n                    return false;\r\n                }\r\n\r\n                _Out(_Ex1);\r\n            }\r\n        }\r\n\r\n        template <class _Traits, class _Elem>\r\n        bool _Impl(void* _Dest, const _Elem* const _Src, const size_t _Size_bytes, const size_t _Size_bits,\r\n            const size_t _Size_chars, const _Elem _Elem0, const _Elem _Elem1) noexcept {\r\n            [[maybe_unused]] typename _Traits::_Guard _Guard; // TRANSITION, DevCom-10331414\r\n            const auto _Dx0 = _Traits::_Set(_Elem0);\r\n            const auto _Dx1 = _Traits::_Set(_Elem1);\r\n\r\n            void* _Dest_end = _Dest;\r\n            _Advance_bytes(_Dest_end, _Size_bytes);\r\n\r\n            auto _Out = [&_Dest](const _Traits::_Vec _Ex1) {\r\n                const auto _Val = _Traits::_To_bits(_Ex1);\r\n                memcpy(_Dest, &_Val, sizeof(_Val));\r\n                _Advance_bytes(_Dest, sizeof(_Val));\r\n            };\r\n\r\n            const size_t _Size_convert = (_Size_chars <= _Size_bits) ? _Size_chars : _Size_bits;\r\n\r\n            // Convert characters to bits\r\n            if (!_Loop<_Traits>(_Src, _Src + _Size_convert, _Dx0, _Dx1, _Out)) {\r\n                return false;\r\n            }\r\n\r\n            // Verify remaining characters, if any\r\n            if (_Size_convert != _Size_chars\r\n                && !_Loop<_Traits>(_Src + _Size_convert, _Src + _Size_chars, _Dx0, _Dx1, [](_Traits::_Vec) {})) {\r\n                return false;\r\n            }\r\n\r\n            // Trim tail (may be padding tail, or too short string, or both)\r\n            if (_Dest != _Dest_end) {\r\n                memset(_Dest, 0, _Byte_length(_Dest, _Dest_end));\r\n            }\r\n\r\n            return true;\r\n        }\r\n#endif // ^^^ !defined(_M_ARM64EC) ^^^\r\n\r\n        template <class _Elem>\r\n        bool _Fallback(void* const _Dest, const _Elem* const _Src, const size_t _Size_bytes, const size_t _Size_bits,\r\n            const size_t _Size_chars, const _Elem _Elem0, const _Elem _Elem1) noexcept {\r\n            const auto _Dest_bytes = static_cast<uint8_t*>(_Dest);\r\n            size_t _Size_convert   = _Size_chars;\r\n\r\n            if (_Size_chars > _Size_bits) {\r\n                _Size_convert = _Size_bits;\r\n\r\n                for (size_t _Ix = _Size_bits; _Ix < _Size_chars; ++_Ix) {\r\n                    if (const _Elem _Cur = _Src[_Ix]; _Cur != _Elem0 && _Cur != _Elem1) {\r\n                        return false;\r\n                    }\r\n                }\r\n            }\r\n\r\n            memset(_Dest, 0, _Size_bytes);\r\n\r\n            for (size_t _Ix = 0; _Ix != _Size_convert; ++_Ix) {\r\n                const _Elem _Cur = _Src[_Size_convert - _Ix - 1];\r\n\r\n                if (_Cur != _Elem0 && _Cur != _Elem1) {\r\n                    return false;\r\n                }\r\n\r\n                _Dest_bytes[_Ix >> 3] |= static_cast<uint8_t>(_Cur == _Elem1) << (_Ix & 0x7);\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        template <class _Avx, class _Sse, class _Elem>\r\n        bool _Dispatch(void* _Dest, const _Elem* _Src, size_t _Size_bytes, size_t _Size_bits, size_t _Size_chars,\r\n            _Elem _Elem0, _Elem _Elem1) noexcept {\r\n#ifndef _M_ARM64EC\r\n            if (_Use_avx2() && _Size_bits >= 256) {\r\n                return _Impl<_Avx>(_Dest, _Src, _Size_bytes, _Size_bits, _Size_chars, _Elem0, _Elem1);\r\n            } else if (_Use_sse42()) {\r\n                return _Impl<_Sse>(_Dest, _Src, _Size_bytes, _Size_bits, _Size_chars, _Elem0, _Elem1);\r\n            } else\r\n#endif // ^^^ !defined(_M_ARM64EC) ^^^\r\n            {\r\n                return _Fallback(_Dest, _Src, _Size_bytes, _Size_bits, _Size_chars, _Elem0, _Elem1);\r\n            }\r\n        }\r\n    } // namespace _Bitset_from_string\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n__declspec(noalias) bool __stdcall __std_bitset_from_string_1(void* const _Dest, const char* const _Src,\r\n    const size_t _Size_bytes, const size_t _Size_bits, const size_t _Size_chars, const char _Elem0,\r\n    const char _Elem1) noexcept {\r\n    using namespace _Bitset_from_string;\r\n\r\n    return _Dispatch<_Traits_1_avx, _Traits_1_sse>(_Dest, _Src, _Size_bytes, _Size_bits, _Size_chars, _Elem0, _Elem1);\r\n}\r\n\r\n__declspec(noalias) bool __stdcall __std_bitset_from_string_2(void* const _Dest, const wchar_t* const _Src,\r\n    const size_t _Size_bytes, const size_t _Size_bits, const size_t _Size_chars, const wchar_t _Elem0,\r\n    const wchar_t _Elem1) noexcept {\r\n    using namespace _Bitset_from_string;\r\n\r\n    return _Dispatch<_Traits_2_avx, _Traits_2_sse>(_Dest, _Src, _Size_bytes, _Size_bits, _Size_chars, _Elem0, _Elem1);\r\n}\r\n\r\n} // extern \"C\"\r\n#endif // ^^^ !defined(_M_ARM64) ^^^\r\n"
  },
  {
    "path": "stl/src/wcerr.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// initialize standard wide error stream\r\n\r\n#include <fstream>\r\n#include <iostream>\r\n\r\n#include \"init_locks.hpp\"\r\n\r\n#pragma warning(disable : 4074)\r\n#pragma init_seg(compiler)\r\nstatic std::_Init_locks initlocks;\r\n\r\n_STD_BEGIN\r\n\r\n__PURE_APPDOMAIN_GLOBAL static wfilebuf wferr(stderr);\r\n#if defined(_M_CEE_PURE)\r\n__PURE_APPDOMAIN_GLOBAL extern wostream wcerr(&wferr);\r\n#else\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT wostream wcerr(&wferr);\r\n#endif\r\n\r\nstruct _Init_wcerr { // ensures that wcerr is initialized\r\n    __CLR_OR_THIS_CALL _Init_wcerr() { // initialize wcerr\r\n        _Ptr_wcerr = &wcerr;\r\n        wcerr.tie(_Ptr_wcout);\r\n        wcerr.setf(ios_base::unitbuf);\r\n    }\r\n};\r\n__PURE_APPDOMAIN_GLOBAL static _Init_wcerr init_wcerr;\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/wcin.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// initialize standard wide input stream\r\n\r\n#include <fstream>\r\n#include <iostream>\r\n\r\n#include \"init_locks.hpp\"\r\n\r\n#pragma warning(disable : 4074)\r\n#pragma init_seg(compiler)\r\nstatic std::_Init_locks initlocks;\r\n\r\n_STD_BEGIN\r\n\r\n__PURE_APPDOMAIN_GLOBAL static wfilebuf wfin(stdin);\r\n#if defined(_M_CEE_PURE)\r\n__PURE_APPDOMAIN_GLOBAL extern wistream wcin(&wfin);\r\n#else\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT wistream wcin(&wfin);\r\n#endif\r\n\r\nstruct _Init_wcin { // ensures that wcin is initialized\r\n    __CLR_OR_THIS_CALL _Init_wcin() { // initialize wcin\r\n        _Ptr_wcin = &wcin;\r\n        wcin.tie(_Ptr_wcout);\r\n    }\r\n};\r\n__PURE_APPDOMAIN_GLOBAL static _Init_wcin init_wcin;\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/wclog.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// initialize standard wide log stream\r\n\r\n#include <fstream>\r\n#include <iostream>\r\n\r\n#include \"init_locks.hpp\"\r\n\r\n#pragma warning(disable : 4074)\r\n#pragma init_seg(compiler)\r\nstatic std::_Init_locks initlocks;\r\n\r\n_STD_BEGIN\r\n\r\n__PURE_APPDOMAIN_GLOBAL static wfilebuf wflog(stderr);\r\n#if defined(_M_CEE_PURE)\r\n__PURE_APPDOMAIN_GLOBAL extern wostream wclog(&wflog);\r\n#else\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT wostream wclog(&wflog);\r\n#endif\r\n\r\nstruct _Init_wclog { // ensures that wclog is initialized\r\n    __CLR_OR_THIS_CALL _Init_wclog() { // initialize wclog\r\n        _Ptr_wclog = &wclog;\r\n    }\r\n};\r\n__PURE_APPDOMAIN_GLOBAL static _Init_wclog init_wclog;\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/wcout.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// initialize standard wide output stream\r\n\r\n#include <fstream>\r\n#include <iostream>\r\n\r\n#include \"init_locks.hpp\"\r\n\r\n#pragma warning(disable : 4074)\r\n#pragma init_seg(compiler)\r\nstatic std::_Init_locks initlocks;\r\n\r\n_STD_BEGIN\r\n\r\n__PURE_APPDOMAIN_GLOBAL static wfilebuf wfout(stdout);\r\n#if defined(_M_CEE_PURE)\r\n__PURE_APPDOMAIN_GLOBAL extern wostream wcout(&wfout);\r\n#else\r\n__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2_IMPORT wostream wcout(&wfout);\r\n#endif\r\n\r\nstruct _Init_wcout { // ensures that wcout is initialized\r\n    __CLR_OR_THIS_CALL _Init_wcout() { // initialize wcout\r\n        _Ptr_wcout = &wcout;\r\n        if (_Ptr_wcin != nullptr) {\r\n            _Ptr_wcin->tie(_Ptr_wcout);\r\n        }\r\n\r\n        if (_Ptr_wcerr != nullptr) {\r\n            _Ptr_wcerr->tie(_Ptr_wcout);\r\n        }\r\n    }\r\n};\r\n__PURE_APPDOMAIN_GLOBAL static _Init_wcout init_wcout;\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/winapinls.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Previously, x64/x86 Desktop builds had to support targeting old versions of Windows, so we dllexported functions to\r\n// dynamically load new Windows APIs. Now, we directly call those Windows APIs, and the dllexported functions have\r\n// become simple wrappers, but they still need to be preserved for binary compatibility. The ARM64, App, and OneCore\r\n// builds never supported targeting old versions of Windows, so they never provided these dllexported functions.\r\n#if !(defined(_M_ARM64) || defined(_CRT_APP) || defined(_ONECORE))\r\n\r\n#include <yvals.h>\r\n\r\n#include <Windows.h>\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 int __cdecl __crtCompareStringEx(_In_opt_ LPCWSTR lpLocaleName, _In_ DWORD dwCmpFlags,\r\n    _In_NLS_string_(cchCount1) LPCWSTR lpString1, _In_ int cchCount1, _In_NLS_string_(cchCount2) LPCWSTR lpString2,\r\n    _In_ int cchCount2) noexcept {\r\n    return CompareStringEx(lpLocaleName, dwCmpFlags, lpString1, cchCount1, lpString2, cchCount2, nullptr, nullptr, 0);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 int __cdecl __crtLCMapStringEx(_In_opt_ LPCWSTR lpLocaleName, _In_ DWORD dwMapFlags,\r\n    _In_reads_(cchSrc) LPCWSTR lpSrcStr, _In_ int cchSrc, _Out_writes_opt_(cchDest) LPWSTR lpDestStr,\r\n    _In_ int cchDest) noexcept {\r\n    return LCMapStringEx(lpLocaleName, dwMapFlags, lpSrcStr, cchSrc, lpDestStr, cchDest, nullptr, nullptr, 0);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 int __cdecl __crtGetLocaleInfoEx(_In_opt_ LPCWSTR const lpLocaleName, _In_ LCTYPE const LCType,\r\n    _Out_writes_opt_(cchData) LPWSTR const lpLCData, _In_ int const cchData) noexcept {\r\n    return GetLocaleInfoEx(lpLocaleName, LCType, lpLCData, cchData);\r\n}\r\n\r\n#endif // ^^^ !(defined(_M_ARM64) || defined(_CRT_APP) || defined(_ONECORE)) ^^^\r\n"
  },
  {
    "path": "stl/src/winapisupp.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <yvals.h>\r\n\r\n#include <cstdlib>\r\n#include <internal_shared.h>\r\n\r\n#include <Windows.h>\r\n\r\n#if !defined(_ONECORE)\r\nnamespace {\r\n\r\n// Use this macro for defining the following function pointers\r\n#define DEFINEFUNCTIONPOINTER(fn_name) decltype(&fn_name) __KERNEL32Function_##fn_name = nullptr\r\n\r\n    DEFINEFUNCTIONPOINTER(GetTempPath2W);\r\n\r\n// Use this macro for caching a function pointer from a DLL\r\n#define STOREFUNCTIONPOINTER(instance, fn_name) \\\r\n    __KERNEL32Function_##fn_name = reinterpret_cast<decltype(&fn_name)>(GetProcAddress(instance, #fn_name))\r\n\r\n// Use this macro for retrieving a cached function pointer from a DLL\r\n#define IFDYNAMICGETCACHEDFUNCTION(fn_name) if (const auto pf##fn_name = __KERNEL32Function_##fn_name)\r\n\r\n} // unnamed namespace\r\n#endif // ^^^ !defined(_ONECORE) ^^^\r\n\r\n#if !defined(_CRT_WINDOWS) && !defined(UNDOCKED_WINDOWS_UCRT)\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 BOOL __cdecl __crtIsPackagedApp() noexcept {\r\n    return FALSE;\r\n}\r\n\r\n#endif // !defined(_CRT_WINDOWS) && !defined(UNDOCKED_WINDOWS_UCRT)\r\n\r\n// Previously, x64/x86 Desktop builds had to support targeting old versions of Windows, so we dllexported functions to\r\n// dynamically load new Windows APIs. Now, we directly call those Windows APIs, and the dllexported functions have\r\n// become simple wrappers, but they still need to be preserved for binary compatibility. The ARM64, App, and OneCore\r\n// builds never supported targeting old versions of Windows, so they never provided these dllexported functions.\r\n#if !(defined(_M_ARM64) || defined(_CRT_APP) || defined(_ONECORE))\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 ULONGLONG __cdecl __crtGetTickCount64() noexcept {\r\n    return GetTickCount64();\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 BOOL __cdecl __crtInitializeCriticalSectionEx(\r\n    _Out_ LPCRITICAL_SECTION const lpCriticalSection, _In_ DWORD const dwSpinCount, _In_ DWORD const Flags) noexcept {\r\n    return InitializeCriticalSectionEx(lpCriticalSection, dwSpinCount, Flags);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 BOOL __cdecl __crtInitOnceExecuteOnce(_Inout_ PINIT_ONCE const InitOnce,\r\n    _In_ PINIT_ONCE_FN const InitFn, _Inout_opt_ PVOID const Parameter, LPVOID* const Context) noexcept {\r\n    return InitOnceExecuteOnce(InitOnce, InitFn, Parameter, Context);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 HANDLE __cdecl __crtCreateEventExW(_In_opt_ LPSECURITY_ATTRIBUTES const lpEventAttributes,\r\n    _In_opt_ LPCWSTR const lpName, _In_ DWORD const dwFlags, _In_ DWORD const dwDesiredAccess) noexcept {\r\n    return CreateEventExW(lpEventAttributes, lpName, dwFlags, dwDesiredAccess);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 HANDLE __cdecl __crtCreateSemaphoreExW(_In_opt_ LPSECURITY_ATTRIBUTES const lpSemaphoreAttributes,\r\n    _In_ LONG const lInitialCount, _In_ LONG const lMaximumCount, _In_opt_ LPCWSTR const lpName,\r\n    _Reserved_ DWORD const dwFlags, _In_ DWORD const dwDesiredAccess) noexcept {\r\n    return CreateSemaphoreExW(lpSemaphoreAttributes, lInitialCount, lMaximumCount, lpName, dwFlags, dwDesiredAccess);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 PTP_TIMER __cdecl __crtCreateThreadpoolTimer(_In_ PTP_TIMER_CALLBACK const pfnti,\r\n    _Inout_opt_ PVOID const pv, _In_opt_ PTP_CALLBACK_ENVIRON const pcbe) noexcept {\r\n    return CreateThreadpoolTimer(pfnti, pv, pcbe);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 VOID __cdecl __crtSetThreadpoolTimer(_Inout_ PTP_TIMER const pti,\r\n    _In_opt_ PFILETIME const pftDueTime, _In_ DWORD const msPeriod, _In_ DWORD const msWindowLength) noexcept {\r\n    SetThreadpoolTimer(pti, pftDueTime, msPeriod, msWindowLength);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 VOID __cdecl __crtWaitForThreadpoolTimerCallbacks(\r\n    _Inout_ PTP_TIMER const pti, _In_ BOOL const fCancelPendingCallbacks) noexcept {\r\n    WaitForThreadpoolTimerCallbacks(pti, fCancelPendingCallbacks);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 VOID __cdecl __crtCloseThreadpoolTimer(_Inout_ PTP_TIMER const pti) noexcept {\r\n    CloseThreadpoolTimer(pti);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 PTP_WAIT __cdecl __crtCreateThreadpoolWait(\r\n    _In_ PTP_WAIT_CALLBACK const pfnwa, _Inout_opt_ PVOID const pv, _In_opt_ PTP_CALLBACK_ENVIRON const pcbe) noexcept {\r\n    return CreateThreadpoolWait(pfnwa, pv, pcbe);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 VOID __cdecl __crtSetThreadpoolWait(\r\n    _Inout_ PTP_WAIT const pwa, _In_opt_ HANDLE const h, _In_opt_ PFILETIME const pftTimeout) noexcept {\r\n    SetThreadpoolWait(pwa, h, pftTimeout);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 VOID __cdecl __crtCloseThreadpoolWait(_Inout_ PTP_WAIT const pwa) noexcept {\r\n    CloseThreadpoolWait(pwa);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 VOID __cdecl __crtFlushProcessWriteBuffers() noexcept {\r\n    FlushProcessWriteBuffers();\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 VOID __cdecl __crtFreeLibraryWhenCallbackReturns(\r\n    _Inout_ PTP_CALLBACK_INSTANCE const pci, _In_ HMODULE const mod) noexcept {\r\n    FreeLibraryWhenCallbackReturns(pci, mod);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 DWORD __cdecl __crtGetCurrentProcessorNumber() noexcept {\r\n    return GetCurrentProcessorNumber();\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 BOOLEAN __cdecl __crtCreateSymbolicLinkW(\r\n    _In_ LPCWSTR const lpSymlinkFileName, _In_ LPCWSTR const lpTargetFileName, _In_ DWORD const dwFlags) noexcept {\r\n#ifdef _CRT_APP\r\n    (void) lpSymlinkFileName;\r\n    (void) lpTargetFileName;\r\n    (void) dwFlags;\r\n    SetLastError(ERROR_NOT_SUPPORTED);\r\n    return 0;\r\n#else // ^^^ defined(_CRT_APP) / !defined(_CRT_APP) vvv\r\n    return CreateSymbolicLinkW(lpSymlinkFileName, lpTargetFileName, dwFlags);\r\n#endif // ^^^ !defined(_CRT_APP) ^^^\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 _Success_(return) BOOL __cdecl __crtGetFileInformationByHandleEx(_In_ HANDLE const hFile,\r\n    _In_ FILE_INFO_BY_HANDLE_CLASS const FileInformationClass,\r\n    _Out_writes_bytes_(dwBufferSize) LPVOID const lpFileInformation, _In_ DWORD const dwBufferSize) noexcept {\r\n    return GetFileInformationByHandleEx(hFile, FileInformationClass, lpFileInformation, dwBufferSize);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 BOOL __cdecl __crtSetFileInformationByHandle(_In_ HANDLE const hFile,\r\n    _In_ FILE_INFO_BY_HANDLE_CLASS const FileInformationClass,\r\n    _In_reads_bytes_(dwBufferSize) LPVOID const lpFileInformation, _In_ DWORD const dwBufferSize) noexcept {\r\n    return SetFileInformationByHandle(hFile, FileInformationClass, lpFileInformation, dwBufferSize);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nextern \"C\" _CRTIMP2 void __cdecl __crtGetSystemTimePreciseAsFileTime(_Out_ LPFILETIME lpSystemTimeAsFileTime) noexcept {\r\n    GetSystemTimePreciseAsFileTime(lpSystemTimeAsFileTime);\r\n}\r\n\r\n#endif // ^^^ !(defined(_M_ARM64) || defined(_CRT_APP) || defined(_ONECORE)) ^^^\r\n\r\nextern \"C\" _Success_(return > 0 && return < BufferLength) DWORD __stdcall __crtGetTempPath2W(\r\n    _In_ DWORD BufferLength, _Out_writes_to_opt_(BufferLength, return +1) LPWSTR Buffer) noexcept {\r\n#if !defined(_ONECORE)\r\n    // use GetTempPath2W if it is available (only on Windows 11+)...\r\n    IFDYNAMICGETCACHEDFUNCTION(GetTempPath2W) {\r\n        return pfGetTempPath2W(BufferLength, Buffer);\r\n    }\r\n#endif // ^^^ !defined(_ONECORE) ^^^\r\n\r\n    // ...otherwise use GetTempPathW.\r\n    return GetTempPathW(BufferLength, Buffer);\r\n}\r\n\r\n// Helper to load all necessary Win32 API function pointers\r\n\r\n#if defined(_ONECORE)\r\n\r\n// All APIs are statically available, and we can't call GetModuleHandleW().\r\n\r\n#else // ^^^ defined(_ONECORE) / !defined(_ONECORE) vvv\r\n\r\nstatic int __cdecl initialize_pointers() noexcept {\r\n    HINSTANCE hKernel32 = GetModuleHandleW(L\"kernel32.dll\");\r\n    _Analysis_assume_(hKernel32);\r\n\r\n    // Note that GetTempPath2W is defined as of Windows 10 Build 20348 (a server release) or Windows 11,\r\n    // but there is no \"_WIN32_WINNT_WIN11\" constant, so we will always dynamically load it\r\n    STOREFUNCTIONPOINTER(hKernel32, GetTempPath2W);\r\n\r\n    return 0;\r\n}\r\n\r\n_CRTALLOC(\".CRT$XIC\") static _PIFV pinit = initialize_pointers;\r\n\r\n#endif // ^^^ !defined(_ONECORE) ^^^\r\n"
  },
  {
    "path": "stl/src/wiostrea.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// _Winit members\r\n\r\n#include <iostream>\r\n_STD_BEGIN\r\n\r\n__PURE_APPDOMAIN_GLOBAL int _Winit::_Init_cnt = -1;\r\n\r\n_CRTIMP2_PURE __thiscall _Winit::_Winit() { // initialize standard wide streams first time\r\n    if (0 <= _Init_cnt) {\r\n        ++_Init_cnt;\r\n    } else {\r\n        _Init_cnt = 1;\r\n    }\r\n}\r\n\r\n_CRTIMP2_PURE __thiscall _Winit::~_Winit() noexcept { // flush standard wide streams last time\r\n    if (--_Init_cnt == 0) { // flush standard wide streams\r\n        if (_Ptr_wcout != nullptr) {\r\n            _Ptr_wcout->flush();\r\n        }\r\n\r\n        if (_Ptr_wcerr != nullptr) {\r\n            _Ptr_wcerr->flush();\r\n        }\r\n\r\n        if (_Ptr_wclog != nullptr) {\r\n            _Ptr_wclog->flush();\r\n        }\r\n    }\r\n}\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/wlocale.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// class locale wide member functions\r\n\r\n#include <istream>\r\n#include <locale>\r\n_STD_BEGIN\r\n\r\n#pragma warning(disable : 4074)\r\n#pragma init_seg(compiler)\r\n\r\n// facets associated with C categories\r\n#define ADDFAC(Facet, cat, ptrimp, ptrloc)                                                                  \\\r\n    if ((_CATMASK(Facet::_Getcat()) & cat) == 0) {                                                          \\\r\n        ;                                                                                                   \\\r\n    } else if (ptrloc == nullptr) {                                                                         \\\r\n        ptrimp->_Addfac(new Facet(lobj), Facet::id._Get_index());                                           \\\r\n    } else {                                                                                                \\\r\n        ptrimp->_Addfac(                                                                                    \\\r\n            const_cast<locale::facet*>(static_cast<const locale::facet*>(&_STD use_facet<Facet>(*ptrloc))), \\\r\n            Facet::id._Get_index());                                                                        \\\r\n    }\r\n\r\n// moved from locale to ease subsetting\r\nusing _Tw1  = ctype<wchar_t>;\r\nusing _Tw2  = num_get<wchar_t>;\r\nusing _Tw3  = num_put<wchar_t>;\r\nusing _Tw4  = numpunct<wchar_t>;\r\nusing _Tw5  = collate<wchar_t>;\r\nusing _Tw6  = messages<wchar_t>;\r\nusing _Tw7  = money_get<wchar_t>;\r\nusing _Tw8  = money_put<wchar_t>;\r\nusing _Tw9  = moneypunct<wchar_t, false>;\r\nusing _Tw10 = moneypunct<wchar_t, true>;\r\nusing _Tw11 = time_get<wchar_t>;\r\nusing _Tw12 = time_put<wchar_t>;\r\nusing _Tw13 = codecvt<wchar_t, char, _Mbstatet>;\r\n__PURE_APPDOMAIN_GLOBAL locale::id time_put<wchar_t>::id{};\r\n\r\nvoid __CLRCALL_OR_CDECL locale::_Locimp::_Makewloc(const _Locinfo& lobj, locale::category cat, _Locimp* ptrimp,\r\n    const locale* ptrloc) { // setup wide part of a new locale\r\n    ADDFAC(_Tw1, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tw2, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tw3, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tw4, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tw5, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tw6, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tw7, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tw8, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tw9, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tw10, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tw11, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tw12, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tw13, cat, ptrimp, ptrloc);\r\n}\r\n\r\n// moved from locale to ease subsetting\r\nusing _Tu1  = ctype<unsigned short>;\r\nusing _Tu2  = num_get<unsigned short>;\r\nusing _Tu3  = num_put<unsigned short>;\r\nusing _Tu4  = numpunct<unsigned short>;\r\nusing _Tu5  = collate<unsigned short>;\r\nusing _Tu6  = messages<unsigned short>;\r\nusing _Tu7  = money_get<unsigned short>;\r\nusing _Tu8  = money_put<unsigned short>;\r\nusing _Tu9  = moneypunct<unsigned short, false>;\r\nusing _Tu10 = moneypunct<unsigned short, true>;\r\nusing _Tu11 = time_get<unsigned short>;\r\nusing _Tu12 = time_put<unsigned short>;\r\nusing _Tu13 = codecvt<unsigned short, char, _Mbstatet>;\r\n\r\nvoid __CLRCALL_OR_CDECL locale::_Locimp::_Makeushloc(const _Locinfo& lobj, locale::category cat, _Locimp* ptrimp,\r\n    const locale* ptrloc) { // setup wide part of a new locale\r\n    ADDFAC(_Tu1, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tu2, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tu3, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tu4, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tu5, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tu6, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tu7, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tu8, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tu9, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tu10, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tu11, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tu12, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tu13, cat, ptrimp, ptrloc);\r\n}\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/xalloc.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// TRANSITION, ABI: The functions in this file are preserved for binary compatibility\r\n\r\n#include <yvals.h>\r\n\r\n#include <Windows.h>\r\n\r\nnamespace stdext {\r\n    namespace threads {\r\n\r\n        _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Mtx_new(void*& _Ptr) {\r\n            _Ptr = new CRITICAL_SECTION;\r\n            InitializeCriticalSectionEx(static_cast<CRITICAL_SECTION*>(_Ptr), 4000, 0);\r\n        }\r\n\r\n        _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Mtx_delete(void* _Ptr) {\r\n            DeleteCriticalSection(static_cast<CRITICAL_SECTION*>(_Ptr));\r\n            delete static_cast<CRITICAL_SECTION*>(_Ptr);\r\n        }\r\n\r\n        _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Mtx_lock(void* _Ptr) {\r\n            EnterCriticalSection(static_cast<CRITICAL_SECTION*>(_Ptr));\r\n        }\r\n\r\n        _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Mtx_unlock(void* _Ptr) {\r\n            LeaveCriticalSection(static_cast<CRITICAL_SECTION*>(_Ptr));\r\n        }\r\n\r\n    } // namespace threads\r\n} // namespace stdext\r\n"
  },
  {
    "path": "stl/src/xcharconv_ryu_tables.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception AND BSL-1.0\r\n\r\n\r\n// Copyright 2018 Ulf Adams\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n// Boost Software License - Version 1.0 - August 17th, 2003\r\n\r\n// Permission is hereby granted, free of charge, to any person or organization\r\n// obtaining a copy of the software and accompanying documentation covered by\r\n// this license (the \"Software\") to use, reproduce, display, distribute,\r\n// execute, and transmit the Software, and to prepare derivative works of the\r\n// Software, and to permit third-parties to whom the Software is furnished to\r\n// do so, all subject to the following:\r\n\r\n// The copyright notices in the Software and this entire statement, including\r\n// the above license grant, this restriction and the following disclaimer,\r\n// must be included in all copies of the Software, in whole or in part, and\r\n// all derivative works of the Software, unless such copies or derivative\r\n// works are solely in the form of machine-executable object code generated by\r\n// a source language processor.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r\n// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r\n// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r\n// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\n// DEALINGS IN THE SOFTWARE.\r\n\r\n\r\n#include <cstdint>\r\n\r\nnamespace std {\r\n\r\n    // clang-format off: avoid diverging from external code\r\n\r\n// vvvvvvvvvv DERIVED FROM d2s_full_table.h vvvvvvvvvv\r\n\r\n// These tables are generated by PrintDoubleLookupTable.\r\nextern const uint64_t __DOUBLE_POW5_INV_SPLIT[292][2] = {\r\n  {                    1u, 288230376151711744u }, {  3689348814741910324u, 230584300921369395u },\r\n  {  2951479051793528259u, 184467440737095516u }, { 17118578500402463900u, 147573952589676412u },\r\n  { 12632330341676300947u, 236118324143482260u }, { 10105864273341040758u, 188894659314785808u },\r\n  { 15463389048156653253u, 151115727451828646u }, { 17362724847566824558u, 241785163922925834u },\r\n  { 17579528692795369969u, 193428131138340667u }, {  6684925324752475329u, 154742504910672534u },\r\n  { 18074578149087781173u, 247588007857076054u }, { 18149011334012135262u, 198070406285660843u },\r\n  {  3451162622983977240u, 158456325028528675u }, {  5521860196774363583u, 253530120045645880u },\r\n  {  4417488157419490867u, 202824096036516704u }, {  7223339340677503017u, 162259276829213363u },\r\n  {  7867994130342094503u, 259614842926741381u }, {  2605046489531765280u, 207691874341393105u },\r\n  {  2084037191625412224u, 166153499473114484u }, { 10713157136084480204u, 265845599156983174u },\r\n  { 12259874523609494487u, 212676479325586539u }, { 13497248433629505913u, 170141183460469231u },\r\n  { 14216899864323388813u, 272225893536750770u }, { 11373519891458711051u, 217780714829400616u },\r\n  {  5409467098425058518u, 174224571863520493u }, {  4965798542738183305u, 278759314981632789u },\r\n  {  7661987648932456967u, 223007451985306231u }, {  2440241304404055250u, 178405961588244985u },\r\n  {  3904386087046488400u, 285449538541191976u }, { 17880904128604832013u, 228359630832953580u },\r\n  { 14304723302883865611u, 182687704666362864u }, { 15133127457049002812u, 146150163733090291u },\r\n  { 16834306301794583852u, 233840261972944466u }, {  9778096226693756759u, 187072209578355573u },\r\n  { 15201174610838826053u, 149657767662684458u }, {  2185786488890659746u, 239452428260295134u },\r\n  {  5437978005854438120u, 191561942608236107u }, { 15418428848909281466u, 153249554086588885u },\r\n  {  6222742084545298729u, 245199286538542217u }, { 16046240111861969953u, 196159429230833773u },\r\n  {  1768945645263844993u, 156927543384667019u }, { 10209010661905972635u, 251084069415467230u },\r\n  {  8167208529524778108u, 200867255532373784u }, { 10223115638361732810u, 160693804425899027u },\r\n  {  1599589762411131202u, 257110087081438444u }, {  4969020624670815285u, 205688069665150755u },\r\n  {  3975216499736652228u, 164550455732120604u }, { 13739044029062464211u, 263280729171392966u },\r\n  {  7301886408508061046u, 210624583337114373u }, { 13220206756290269483u, 168499666669691498u },\r\n  { 17462981995322520850u, 269599466671506397u }, {  6591687966774196033u, 215679573337205118u },\r\n  { 12652048002903177473u, 172543658669764094u }, {  9175230360419352987u, 276069853871622551u },\r\n  {  3650835473593572067u, 220855883097298041u }, { 17678063637842498946u, 176684706477838432u },\r\n  { 13527506561580357021u, 282695530364541492u }, {  3443307619780464970u, 226156424291633194u },\r\n  {  6443994910566282300u, 180925139433306555u }, {  5155195928453025840u, 144740111546645244u },\r\n  { 15627011115008661990u, 231584178474632390u }, { 12501608892006929592u, 185267342779705912u },\r\n  {  2622589484121723027u, 148213874223764730u }, {  4196143174594756843u, 237142198758023568u },\r\n  { 10735612169159626121u, 189713759006418854u }, { 12277838550069611220u, 151771007205135083u },\r\n  { 15955192865369467629u, 242833611528216133u }, {  1696107848069843133u, 194266889222572907u },\r\n  { 12424932722681605476u, 155413511378058325u }, {  1433148282581017146u, 248661618204893321u },\r\n  { 15903913885032455010u, 198929294563914656u }, {  9033782293284053685u, 159143435651131725u },\r\n  { 14454051669254485895u, 254629497041810760u }, { 11563241335403588716u, 203703597633448608u },\r\n  { 16629290697806691620u, 162962878106758886u }, {   781423413297334329u, 260740604970814219u },\r\n  {  4314487545379777786u, 208592483976651375u }, {  3451590036303822229u, 166873987181321100u },\r\n  {  5522544058086115566u, 266998379490113760u }, {  4418035246468892453u, 213598703592091008u },\r\n  { 10913125826658934609u, 170878962873672806u }, { 10082303693170474728u, 273406340597876490u },\r\n  {  8065842954536379782u, 218725072478301192u }, { 17520720807854834795u, 174980057982640953u },\r\n  {  5897060404116273733u, 279968092772225526u }, {  1028299508551108663u, 223974474217780421u },\r\n  { 15580034865808528224u, 179179579374224336u }, { 17549358155809824511u, 286687326998758938u },\r\n  {  2971440080422128639u, 229349861599007151u }, { 17134547323305344204u, 183479889279205720u },\r\n  { 13707637858644275364u, 146783911423364576u }, { 14553522944347019935u, 234854258277383322u },\r\n  {  4264120725993795302u, 187883406621906658u }, { 10789994210278856888u, 150306725297525326u },\r\n  {  9885293106962350374u, 240490760476040522u }, {   529536856086059653u, 192392608380832418u },\r\n  {  7802327114352668369u, 153914086704665934u }, {  1415676938738538420u, 246262538727465495u },\r\n  {  1132541550990830736u, 197010030981972396u }, { 15663428499760305882u, 157608024785577916u },\r\n  { 17682787970132668764u, 252172839656924666u }, { 10456881561364224688u, 201738271725539733u },\r\n  { 15744202878575200397u, 161390617380431786u }, { 17812026976236499989u, 258224987808690858u },\r\n  {  3181575136763469022u, 206579990246952687u }, { 13613306553636506187u, 165263992197562149u },\r\n  { 10713244041592678929u, 264422387516099439u }, { 12259944048016053467u, 211537910012879551u },\r\n  {  6118606423670932450u, 169230328010303641u }, {  2411072648389671274u, 270768524816485826u },\r\n  { 16686253377679378312u, 216614819853188660u }, { 13349002702143502650u, 173291855882550928u },\r\n  { 17669055508687693916u, 277266969412081485u }, { 14135244406950155133u, 221813575529665188u },\r\n  {   240149081334393137u, 177450860423732151u }, { 11452284974360759988u, 283921376677971441u },\r\n  {  5472479164746697667u, 227137101342377153u }, { 11756680961281178780u, 181709681073901722u },\r\n  {  2026647139541122378u, 145367744859121378u }, { 18000030682233437097u, 232588391774594204u },\r\n  { 18089373360528660001u, 186070713419675363u }, {  3403452244197197031u, 148856570735740291u },\r\n  { 16513570034941246220u, 238170513177184465u }, { 13210856027952996976u, 190536410541747572u },\r\n  {  3189987192878576934u, 152429128433398058u }, {  1414630693863812771u, 243886605493436893u },\r\n  {  8510402184574870864u, 195109284394749514u }, { 10497670562401807014u, 156087427515799611u },\r\n  {  9417575270359070576u, 249739884025279378u }, { 14912757845771077107u, 199791907220223502u },\r\n  {  4551508647133041040u, 159833525776178802u }, { 10971762650154775986u, 255733641241886083u },\r\n  { 16156107749607641435u, 204586912993508866u }, {  9235537384944202825u, 163669530394807093u },\r\n  { 11087511001168814197u, 261871248631691349u }, { 12559357615676961681u, 209496998905353079u },\r\n  { 13736834907283479668u, 167597599124282463u }, { 18289587036911657145u, 268156158598851941u },\r\n  { 10942320814787415393u, 214524926879081553u }, { 16132554281313752961u, 171619941503265242u },\r\n  { 11054691591134363444u, 274591906405224388u }, { 16222450902391311402u, 219673525124179510u },\r\n  { 12977960721913049122u, 175738820099343608u }, { 17075388340318968271u, 281182112158949773u },\r\n  {  2592264228029443648u, 224945689727159819u }, {  5763160197165465241u, 179956551781727855u },\r\n  {  9221056315464744386u, 287930482850764568u }, { 14755542681855616155u, 230344386280611654u },\r\n  { 15493782960226403247u, 184275509024489323u }, {  1326979923955391628u, 147420407219591459u },\r\n  {  9501865507812447252u, 235872651551346334u }, { 11290841220991868125u, 188698121241077067u },\r\n  {  1653975347309673853u, 150958496992861654u }, { 10025058185179298811u, 241533595188578646u },\r\n  {  4330697733401528726u, 193226876150862917u }, { 14532604630946953951u, 154581500920690333u },\r\n  {  1116074521063664381u, 247330401473104534u }, {  4582208431592841828u, 197864321178483627u },\r\n  { 14733813189500004432u, 158291456942786901u }, { 16195403473716186445u, 253266331108459042u },\r\n  {  5577625149489128510u, 202613064886767234u }, {  8151448934333213131u, 162090451909413787u },\r\n  { 16731667109675051333u, 259344723055062059u }, { 17074682502481951390u, 207475778444049647u },\r\n  {  6281048372501740465u, 165980622755239718u }, {  6360328581260874421u, 265568996408383549u },\r\n  {  8777611679750609860u, 212455197126706839u }, { 10711438158542398211u, 169964157701365471u },\r\n  {  9759603424184016492u, 271942652322184754u }, { 11497031554089123517u, 217554121857747803u },\r\n  { 16576322872755119460u, 174043297486198242u }, { 11764721337440549842u, 278469275977917188u },\r\n  { 16790474699436260520u, 222775420782333750u }, { 13432379759549008416u, 178220336625867000u },\r\n  {  3045063541568861850u, 285152538601387201u }, { 17193446092222730773u, 228122030881109760u },\r\n  { 13754756873778184618u, 182497624704887808u }, { 18382503128506368341u, 145998099763910246u },\r\n  {  3586563302416817083u, 233596959622256395u }, {  2869250641933453667u, 186877567697805116u },\r\n  { 17052795772514404226u, 149502054158244092u }, { 12527077977055405469u, 239203286653190548u },\r\n  { 17400360011128145022u, 191362629322552438u }, {  2852241564676785048u, 153090103458041951u },\r\n  { 15631632947708587046u, 244944165532867121u }, {  8815957543424959314u, 195955332426293697u },\r\n  { 18120812478965698421u, 156764265941034957u }, { 14235904707377476180u, 250822825505655932u },\r\n  {  4010026136418160298u, 200658260404524746u }, { 17965416168102169531u, 160526608323619796u },\r\n  {  2919224165770098987u, 256842573317791675u }, {  2335379332616079190u, 205474058654233340u },\r\n  {  1868303466092863352u, 164379246923386672u }, {  6678634360490491686u, 263006795077418675u },\r\n  {  5342907488392393349u, 210405436061934940u }, {  4274325990713914679u, 168324348849547952u },\r\n  { 10528270399884173809u, 269318958159276723u }, { 15801313949391159694u, 215455166527421378u },\r\n  {  1573004715287196786u, 172364133221937103u }, { 17274202803427156150u, 275782613155099364u },\r\n  { 17508711057483635243u, 220626090524079491u }, { 10317620031244997871u, 176500872419263593u },\r\n  { 12818843235250086271u, 282401395870821749u }, { 13944423402941979340u, 225921116696657399u },\r\n  { 14844887537095493795u, 180736893357325919u }, { 15565258844418305359u, 144589514685860735u },\r\n  {  6457670077359736959u, 231343223497377177u }, { 16234182506113520537u, 185074578797901741u },\r\n  {  9297997190148906106u, 148059663038321393u }, { 11187446689496339446u, 236895460861314229u },\r\n  { 12639306166338981880u, 189516368689051383u }, { 17490142562555006151u, 151613094951241106u },\r\n  {  2158786396894637579u, 242580951921985771u }, { 16484424376483351356u, 194064761537588616u },\r\n  {  9498190686444770762u, 155251809230070893u }, { 11507756283569722895u, 248402894768113429u },\r\n  { 12895553841597688639u, 198722315814490743u }, { 17695140702761971558u, 158977852651592594u },\r\n  { 17244178680193423523u, 254364564242548151u }, { 10105994129412828495u, 203491651394038521u },\r\n  {  4395446488788352473u, 162793321115230817u }, { 10722063196803274280u, 260469313784369307u },\r\n  {  1198952927958798777u, 208375451027495446u }, { 15716557601334680315u, 166700360821996356u },\r\n  { 17767794532651667857u, 266720577315194170u }, { 14214235626121334286u, 213376461852155336u },\r\n  {  7682039686155157106u, 170701169481724269u }, {  1223217053622520399u, 273121871170758831u },\r\n  { 15735968901865657612u, 218497496936607064u }, { 16278123936234436413u, 174797997549285651u },\r\n  {   219556594781725998u, 279676796078857043u }, {  7554342905309201445u, 223741436863085634u },\r\n  {  9732823138989271479u, 178993149490468507u }, {   815121763415193074u, 286389039184749612u },\r\n  { 11720143854957885429u, 229111231347799689u }, { 13065463898708218666u, 183288985078239751u },\r\n  {  6763022304224664610u, 146631188062591801u }, {  3442138057275642729u, 234609900900146882u },\r\n  { 13821756890046245153u, 187687920720117505u }, { 11057405512036996122u, 150150336576094004u },\r\n  {  6623802375033462826u, 240240538521750407u }, { 16367088344252501231u, 192192430817400325u },\r\n  { 13093670675402000985u, 153753944653920260u }, {  2503129006933649959u, 246006311446272417u },\r\n  { 13070549649772650937u, 196805049157017933u }, { 17835137349301941396u, 157444039325614346u },\r\n  {  2710778055689733971u, 251910462920982955u }, {  2168622444551787177u, 201528370336786364u },\r\n  {  5424246770383340065u, 161222696269429091u }, {  1300097203129523457u, 257956314031086546u },\r\n  { 15797473021471260058u, 206365051224869236u }, {  8948629602435097724u, 165092040979895389u },\r\n  {  3249760919670425388u, 264147265567832623u }, {  9978506365220160957u, 211317812454266098u },\r\n  { 15361502721659949412u, 169054249963412878u }, {  2442311466204457120u, 270486799941460606u },\r\n  { 16711244431931206989u, 216389439953168484u }, { 17058344360286875914u, 173111551962534787u },\r\n  { 12535955717491360170u, 276978483140055660u }, { 10028764573993088136u, 221582786512044528u },\r\n  { 15401709288678291155u, 177266229209635622u }, {  9885339602917624555u, 283625966735416996u },\r\n  {  4218922867592189321u, 226900773388333597u }, { 14443184738299482427u, 181520618710666877u },\r\n  {  4175850161155765295u, 145216494968533502u }, { 10370709072591134795u, 232346391949653603u },\r\n  { 15675264887556728482u, 185877113559722882u }, {  5161514280561562140u, 148701690847778306u },\r\n  {   879725219414678777u, 237922705356445290u }, {   703780175531743021u, 190338164285156232u },\r\n  { 11631070584651125387u, 152270531428124985u }, {   162968861732249003u, 243632850284999977u },\r\n  { 11198421533611530172u, 194906280227999981u }, {  5269388412147313814u, 155925024182399985u },\r\n  {  8431021459435702103u, 249480038691839976u }, {  3055468352806651359u, 199584030953471981u },\r\n  { 17201769941212962380u, 159667224762777584u }, { 16454785461715008838u, 255467559620444135u },\r\n  { 13163828369372007071u, 204374047696355308u }, { 17909760324981426303u, 163499238157084246u },\r\n  {  2830174816776909822u, 261598781051334795u }, {  2264139853421527858u, 209279024841067836u },\r\n  { 16568707141704863579u, 167423219872854268u }, {  4373838538276319787u, 267877151796566830u },\r\n  {  3499070830621055830u, 214301721437253464u }, {  6488605479238754987u, 171441377149802771u },\r\n  {  3003071137298187333u, 274306203439684434u }, {  6091805724580460189u, 219444962751747547u },\r\n  { 15941491023890099121u, 175555970201398037u }, { 10748990379256517301u, 280889552322236860u },\r\n  {  8599192303405213841u, 224711641857789488u }, { 14258051472207991719u, 179769313486231590u }\r\n};\r\n\r\nextern const uint64_t __DOUBLE_POW5_SPLIT[326][2] = {\r\n  {                    0u,  72057594037927936u }, {                    0u,  90071992547409920u },\r\n  {                    0u, 112589990684262400u }, {                    0u, 140737488355328000u },\r\n  {                    0u,  87960930222080000u }, {                    0u, 109951162777600000u },\r\n  {                    0u, 137438953472000000u }, {                    0u,  85899345920000000u },\r\n  {                    0u, 107374182400000000u }, {                    0u, 134217728000000000u },\r\n  {                    0u,  83886080000000000u }, {                    0u, 104857600000000000u },\r\n  {                    0u, 131072000000000000u }, {                    0u,  81920000000000000u },\r\n  {                    0u, 102400000000000000u }, {                    0u, 128000000000000000u },\r\n  {                    0u,  80000000000000000u }, {                    0u, 100000000000000000u },\r\n  {                    0u, 125000000000000000u }, {                    0u,  78125000000000000u },\r\n  {                    0u,  97656250000000000u }, {                    0u, 122070312500000000u },\r\n  {                    0u,  76293945312500000u }, {                    0u,  95367431640625000u },\r\n  {                    0u, 119209289550781250u }, {  4611686018427387904u,  74505805969238281u },\r\n  { 10376293541461622784u,  93132257461547851u }, {  8358680908399640576u, 116415321826934814u },\r\n  {   612489549322387456u,  72759576141834259u }, { 14600669991935148032u,  90949470177292823u },\r\n  { 13639151471491547136u, 113686837721616029u }, {  3213881284082270208u, 142108547152020037u },\r\n  {  4314518811765112832u,  88817841970012523u }, {   781462496279003136u, 111022302462515654u },\r\n  { 10200200157203529728u, 138777878078144567u }, { 13292654125893287936u,  86736173798840354u },\r\n  {  7392445620511834112u, 108420217248550443u }, {  4628871007212404736u, 135525271560688054u },\r\n  { 16728102434789916672u,  84703294725430033u }, {  7075069988205232128u, 105879118406787542u },\r\n  { 18067209522111315968u, 132348898008484427u }, {  8986162942105878528u,  82718061255302767u },\r\n  {  6621017659204960256u, 103397576569128459u }, {  3664586055578812416u, 129246970711410574u },\r\n  { 16125424340018921472u,  80779356694631608u }, {  1710036351314100224u, 100974195868289511u },\r\n  { 15972603494424788992u, 126217744835361888u }, {  9982877184015493120u,  78886090522101180u },\r\n  { 12478596480019366400u,  98607613152626475u }, { 10986559581596820096u, 123259516440783094u },\r\n  {  2254913720070624656u,  77037197775489434u }, { 12042014186943056628u,  96296497219361792u },\r\n  { 15052517733678820785u, 120370621524202240u }, {  9407823583549262990u,  75231638452626400u },\r\n  { 11759779479436578738u,  94039548065783000u }, { 14699724349295723422u, 117549435082228750u },\r\n  {  4575641699882439235u,  73468396926392969u }, { 10331238143280436948u,  91835496157991211u },\r\n  {  8302361660673158281u, 114794370197489014u }, {  1154580038986672043u, 143492962746861268u },\r\n  {  9944984561221445835u,  89683101716788292u }, { 12431230701526807293u, 112103877145985365u },\r\n  {  1703980321626345405u, 140129846432481707u }, { 17205888765512323542u,  87581154020301066u },\r\n  { 12283988920035628619u, 109476442525376333u }, {  1519928094762372062u, 136845553156720417u },\r\n  { 12479170105294952299u,  85528470722950260u }, { 15598962631618690374u, 106910588403687825u },\r\n  {  5663645234241199255u, 133638235504609782u }, { 17374836326682913246u,  83523897190381113u },\r\n  {  7883487353071477846u, 104404871487976392u }, {  9854359191339347308u, 130506089359970490u },\r\n  { 10770660513014479971u,  81566305849981556u }, { 13463325641268099964u, 101957882312476945u },\r\n  {  2994098996302961243u, 127447352890596182u }, { 15706369927971514489u,  79654595556622613u },\r\n  {  5797904354682229399u,  99568244445778267u }, {  2635694424925398845u, 124460305557222834u },\r\n  {  6258995034005762182u,  77787690973264271u }, {  3212057774079814824u,  97234613716580339u },\r\n  { 17850130272881932242u, 121543267145725423u }, { 18073860448192289507u,  75964541966078389u },\r\n  {  8757267504958198172u,  94955677457597987u }, {  6334898362770359811u, 118694596821997484u },\r\n  { 13182683513586250689u,  74184123013748427u }, { 11866668373555425458u,  92730153767185534u },\r\n  {  5609963430089506015u, 115912692208981918u }, { 17341285199088104971u,  72445432630613698u },\r\n  { 12453234462005355406u,  90556790788267123u }, { 10954857059079306353u, 113195988485333904u },\r\n  { 13693571323849132942u, 141494985606667380u }, { 17781854114260483896u,  88434366004167112u },\r\n  {  3780573569116053255u, 110542957505208891u }, {   114030942967678664u, 138178696881511114u },\r\n  {  4682955357782187069u,  86361685550944446u }, { 15077066234082509644u, 107952106938680557u },\r\n  {  5011274737320973344u, 134940133673350697u }, { 14661261756894078100u,  84337583545844185u },\r\n  {  4491519140835433913u, 105421979432305232u }, {  5614398926044292391u, 131777474290381540u },\r\n  { 12732371365632458552u,  82360921431488462u }, {  6692092170185797382u, 102951151789360578u },\r\n  { 17588487249587022536u, 128688939736700722u }, { 15604490549419276989u,  80430587335437951u },\r\n  { 14893927168346708332u, 100538234169297439u }, { 14005722942005997511u, 125672792711621799u },\r\n  { 15671105866394830300u,  78545495444763624u }, {  1142138259283986260u,  98181869305954531u },\r\n  { 15262730879387146537u, 122727336632443163u }, {  7233363790403272633u,  76704585395276977u },\r\n  { 13653390756431478696u,  95880731744096221u }, {  3231680390257184658u, 119850914680120277u },\r\n  {  4325643253124434363u,  74906821675075173u }, { 10018740084832930858u,  93633527093843966u },\r\n  {  3300053069186387764u, 117041908867304958u }, { 15897591223523656064u,  73151193042065598u },\r\n  { 10648616992549794273u,  91438991302581998u }, {  4087399203832467033u, 114298739128227498u },\r\n  { 14332621041645359599u, 142873423910284372u }, { 18181260187883125557u,  89295889943927732u },\r\n  {  4279831161144355331u, 111619862429909666u }, { 14573160988285219972u, 139524828037387082u },\r\n  { 13719911636105650386u,  87203017523366926u }, {  7926517508277287175u, 109003771904208658u },\r\n  {   684774848491833161u, 136254714880260823u }, {  7345513307948477581u,  85159196800163014u },\r\n  { 18405263671790372785u, 106448996000203767u }, { 18394893571310578077u, 133061245000254709u },\r\n  { 13802651491282805250u,  83163278125159193u }, {  3418256308821342851u, 103954097656448992u },\r\n  {  4272820386026678563u, 129942622070561240u }, {  2670512741266674102u,  81214138794100775u },\r\n  { 17173198981865506339u, 101517673492625968u }, {  3019754653622331308u, 126897091865782461u },\r\n  {  4193189667727651020u,  79310682416114038u }, { 14464859121514339583u,  99138353020142547u },\r\n  { 13469387883465536574u, 123922941275178184u }, {  8418367427165960359u,  77451838296986365u },\r\n  { 15134645302384838353u,  96814797871232956u }, {   471562554271496325u, 121018497339041196u },\r\n  {  9518098633274461011u,  75636560836900747u }, {  7285937273165688360u,  94545701046125934u },\r\n  { 18330793628311886258u, 118182126307657417u }, {  4539216990053847055u,  73863828942285886u },\r\n  { 14897393274422084627u,  92329786177857357u }, {  4786683537745442072u, 115412232722321697u },\r\n  { 14520892257159371055u,  72132645451451060u }, { 18151115321449213818u,  90165806814313825u },\r\n  {  8853836096529353561u, 112707258517892282u }, {  1843923083806916143u, 140884073147365353u },\r\n  { 12681666973447792349u,  88052545717103345u }, {  2017025661527576725u, 110065682146379182u },\r\n  { 11744654113764246714u, 137582102682973977u }, {   422879793461572340u,  85988814176858736u },\r\n  {   528599741826965425u, 107486017721073420u }, {   660749677283706782u, 134357522151341775u },\r\n  {  7330497575943398595u,  83973451344588609u }, { 13774807988356636147u, 104966814180735761u },\r\n  {  3383451930163631472u, 131208517725919702u }, { 15949715511634433382u,  82005323578699813u },\r\n  {  6102086334260878016u, 102506654473374767u }, {  3015921899398709616u, 128133318091718459u },\r\n  { 18025852251620051174u,  80083323807324036u }, {  4085571240815512351u, 100104154759155046u },\r\n  { 14330336087874166247u, 125130193448943807u }, { 15873989082562435760u,  78206370905589879u },\r\n  { 15230800334775656796u,  97757963631987349u }, {  5203442363187407284u, 122197454539984187u },\r\n  {   946308467778435600u,  76373409087490117u }, {  5794571603150432404u,  95466761359362646u },\r\n  { 16466586540792816313u, 119333451699203307u }, {  7985773578781816244u,  74583407312002067u },\r\n  {  5370530955049882401u,  93229259140002584u }, {  6713163693812353001u, 116536573925003230u },\r\n  { 18030785363914884337u,  72835358703127018u }, { 13315109668038829614u,  91044198378908773u },\r\n  {  2808829029766373305u, 113805247973635967u }, { 17346094342490130344u, 142256559967044958u },\r\n  {  6229622945628943561u,  88910349979403099u }, {  3175342663608791547u, 111137937474253874u },\r\n  { 13192550366365765242u, 138922421842817342u }, {  3633657960551215372u,  86826513651760839u },\r\n  { 18377130505971182927u, 108533142064701048u }, {  4524669058754427043u, 135666427580876311u },\r\n  {  9745447189362598758u,  84791517238047694u }, {  2958436949848472639u, 105989396547559618u },\r\n  { 12921418224165366607u, 132486745684449522u }, { 12687572408530742033u,  82804216052780951u },\r\n  { 11247779492236039638u, 103505270065976189u }, {   224666310012885835u, 129381587582470237u },\r\n  {  2446259452971747599u,  80863492239043898u }, { 12281196353069460307u, 101079365298804872u },\r\n  { 15351495441336825384u, 126349206623506090u }, { 14206370669262903769u,  78968254139691306u },\r\n  {  8534591299723853903u,  98710317674614133u }, { 15279925143082205283u, 123387897093267666u },\r\n  { 14161639232853766206u,  77117435683292291u }, { 13090363022639819853u,  96396794604115364u },\r\n  { 16362953778299774816u, 120495993255144205u }, { 12532689120651053212u,  75309995784465128u },\r\n  { 15665861400813816515u,  94137494730581410u }, { 10358954714162494836u, 117671868413226763u },\r\n  {  4168503687137865320u,  73544917758266727u }, {   598943590494943747u,  91931147197833409u },\r\n  {  5360365506546067587u, 114913933997291761u }, { 11312142901609972388u, 143642417496614701u },\r\n  {  9375932322719926695u,  89776510935384188u }, { 11719915403399908368u, 112220638669230235u },\r\n  { 10038208235822497557u, 140275798336537794u }, { 10885566165816448877u,  87672373960336121u },\r\n  { 18218643725697949000u, 109590467450420151u }, { 18161618638695048346u, 136988084313025189u },\r\n  { 13656854658398099168u,  85617552695640743u }, { 12459382304570236056u, 107021940869550929u },\r\n  {  1739169825430631358u, 133777426086938662u }, { 14922039196176308311u,  83610891304336663u },\r\n  { 14040862976792997485u, 104513614130420829u }, {  3716020665709083144u, 130642017663026037u },\r\n  {  4628355925281870917u,  81651261039391273u }, { 10397130925029726550u, 102064076299239091u },\r\n  {  8384727637859770284u, 127580095374048864u }, {  5240454773662356427u,  79737559608780540u },\r\n  {  6550568467077945534u,  99671949510975675u }, {  3576524565420044014u, 124589936888719594u },\r\n  {  6847013871814915412u,  77868710555449746u }, { 17782139376623420074u,  97335888194312182u },\r\n  { 13004302183924499284u, 121669860242890228u }, { 17351060901807587860u,  76043662651806392u },\r\n  {  3242082053549933210u,  95054578314757991u }, { 17887660622219580224u, 118818222893447488u },\r\n  { 11179787888887237640u,  74261389308404680u }, { 13974734861109047050u,  92826736635505850u },\r\n  {  8245046539531533005u, 116033420794382313u }, { 16682369133275677888u,  72520887996488945u },\r\n  {  7017903361312433648u,  90651109995611182u }, { 17995751238495317868u, 113313887494513977u },\r\n  {  8659630992836983623u, 141642359368142472u }, {  5412269370523114764u,  88526474605089045u },\r\n  { 11377022731581281359u, 110658093256361306u }, {  4997906377621825891u, 138322616570451633u },\r\n  { 14652906532082110942u,  86451635356532270u }, {  9092761128247862869u, 108064544195665338u },\r\n  {  2142579373455052779u, 135080680244581673u }, { 12868327154477877747u,  84425425152863545u },\r\n  {  2250350887815183471u, 105531781441079432u }, {  2812938609768979339u, 131914726801349290u },\r\n  {  6369772649532999991u,  82446704250843306u }, { 17185587848771025797u, 103058380313554132u },\r\n  {  3035240737254230630u, 128822975391942666u }, {  6508711479211282048u,  80514359619964166u },\r\n  { 17359261385868878368u, 100642949524955207u }, { 17087390713908710056u, 125803686906194009u },\r\n  {  3762090168551861929u,  78627304316371256u }, {  4702612710689827411u,  98284130395464070u },\r\n  { 15101637925217060072u, 122855162994330087u }, { 16356052730901744401u,  76784476871456304u },\r\n  {  1998321839917628885u,  95980596089320381u }, {  7109588318324424010u, 119975745111650476u },\r\n  { 13666864735807540814u,  74984840694781547u }, { 12471894901332038114u,  93731050868476934u },\r\n  {  6366496589810271835u, 117163813585596168u }, {  3979060368631419896u,  73227383490997605u },\r\n  {  9585511479216662775u,  91534229363747006u }, {  2758517312166052660u, 114417786704683758u },\r\n  { 12671518677062341634u, 143022233380854697u }, {  1002170145522881665u,  89388895863034186u },\r\n  { 10476084718758377889u, 111736119828792732u }, { 13095105898447972362u, 139670149785990915u },\r\n  {  5878598177316288774u,  87293843616244322u }, { 16571619758500136775u, 109117304520305402u },\r\n  { 11491152661270395161u, 136396630650381753u }, {   264441385652915120u,  85247894156488596u },\r\n  {   330551732066143900u, 106559867695610745u }, {  5024875683510067779u, 133199834619513431u },\r\n  { 10058076329834874218u,  83249896637195894u }, {  3349223375438816964u, 104062370796494868u },\r\n  {  4186529219298521205u, 130077963495618585u }, { 14145795808130045513u,  81298727184761615u },\r\n  { 13070558741735168987u, 101623408980952019u }, { 11726512408741573330u, 127029261226190024u },\r\n  {  7329070255463483331u,  79393288266368765u }, { 13773023837756742068u,  99241610332960956u },\r\n  { 17216279797195927585u, 124052012916201195u }, {  8454331864033760789u,  77532508072625747u },\r\n  {  5956228811614813082u,  96915635090782184u }, {  7445286014518516353u, 121144543863477730u },\r\n  {  9264989777501460624u,  75715339914673581u }, { 16192923240304213684u,  94644174893341976u },\r\n  {  1794409976670715490u, 118305218616677471u }, {  8039035263060279037u,  73940761635423419u },\r\n  {  5437108060397960892u,  92425952044279274u }, { 16019757112352226923u, 115532440055349092u },\r\n  {   788976158365366019u,  72207775034593183u }, { 14821278253238871236u,  90259718793241478u },\r\n  {  9303225779693813237u, 112824648491551848u }, { 11629032224617266546u, 141030810614439810u },\r\n  { 11879831158813179495u,  88144256634024881u }, {  1014730893234310657u, 110180320792531102u },\r\n  { 10491785653397664129u, 137725400990663877u }, {  8863209042587234033u,  86078375619164923u },\r\n  {  6467325284806654637u, 107597969523956154u }, { 17307528642863094104u, 134497461904945192u },\r\n  { 10817205401789433815u,  84060913690590745u }, { 18133192770664180173u, 105076142113238431u },\r\n  { 18054804944902837312u, 131345177641548039u }, { 18201782118205355176u,  82090736025967524u },\r\n  {  4305483574047142354u, 102613420032459406u }, { 14605226504413703751u, 128266775040574257u },\r\n  {  2210737537617482988u,  80166734400358911u }, { 16598479977304017447u, 100208418000448638u },\r\n  { 11524727934775246001u, 125260522500560798u }, {  2591268940807140847u,  78287826562850499u },\r\n  { 17074144231291089770u,  97859783203563123u }, { 16730994270686474309u, 122324729004453904u },\r\n  { 10456871419179046443u,  76452955627783690u }, {  3847717237119032246u,  95566194534729613u },\r\n  {  9421332564826178211u, 119457743168412016u }, {  5888332853016361382u,  74661089480257510u },\r\n  { 16583788103125227536u,  93326361850321887u }, { 16118049110479146516u, 116657952312902359u },\r\n  { 16991309721690548428u,  72911220195563974u }, { 12015765115258409727u,  91139025244454968u },\r\n  { 15019706394073012159u, 113923781555568710u }, {  9551260955736489391u, 142404726944460888u },\r\n  {  5969538097335305869u,  89002954340288055u }, {  2850236603241744433u, 111253692925360069u }\r\n};\r\n\r\n// ^^^^^^^^^^ DERIVED FROM d2s_full_table.h ^^^^^^^^^^\r\n\r\n// vvvvvvvvvv DERIVED FROM d2fixed_full_table.h vvvvvvvvvv\r\n\r\nextern const uint64_t __POW10_SPLIT[1224][3] = {\r\n  {                    1u,    72057594037927936u,                    0u },\r\n  {   699646928636035157u,             72057594u,                    0u },\r\n  {                    1u,                    0u,                  256u },\r\n  { 11902091922964236229u,        4722366482869u,                    0u },\r\n  {  6760415703743915872u,                 4722u,                    0u },\r\n  {                    1u,                    0u,             16777216u },\r\n  { 13369850649504950658u,   309485009821345068u,                    0u },\r\n  { 15151142278969419334u,            309485009u,                    0u },\r\n  {                    1u,                    0u,          75511627776u },\r\n  {  4635408826454083567u,  9437866644873197963u,                 1099u },\r\n  { 12367138975830625353u,       20282409603651u,                    0u },\r\n  {  7555853734021184432u,                20282u,                    0u },\r\n  {                    1u,                    0u,         250037927936u },\r\n  {  5171444645924616995u,   699646928636035156u,             72057594u },\r\n  { 16672297533003297786u,  1329227995784915872u,                    0u },\r\n  { 14479142226848862515u,           1329227995u,                    0u },\r\n  {                    1u,                    0u,         181645213696u },\r\n  { 12214193123817091081u, 11902091922964236228u,         114366482869u },\r\n  { 16592893013671929435u,  6760415703743915871u,                 4722u },\r\n  {  4549827147718617003u,       87112285931760u,                    0u },\r\n  {  5274510003815168971u,                87112u,                    0u },\r\n  {                    1u,                    0u,          44724781056u },\r\n  {  9794971998307800535u, 13369850649504950657u,         209821345068u },\r\n  { 14720142899209240169u, 15151142278969419333u,            309485009u },\r\n  {  4300745446091561535u,  5708990770823839524u,                    0u },\r\n  { 15197156861335443364u,           5708990770u,                    0u },\r\n  {                    1u,                    0u,         139251286016u },\r\n  { 13484604155038683037u,  4635408826454083566u,          67670423947u },\r\n  {  8356963862052375699u, 12367138975830625352u,          58409603651u },\r\n  {  5850852848337610021u,  7555853734021184431u,                20282u },\r\n  {  2712780827214982050u,      374144419156711u,                    0u },\r\n  {  7732076577307618052u,               374144u,                    0u },\r\n  {                    1u,                    0u,          84280344576u },\r\n  { 17296309485351745867u,  5171444645924616994u,         160903807060u },\r\n  { 16598859101615853088u, 16672297533003297785u,         219784915872u },\r\n  {  7469952526870444257u, 14479142226848862514u,           1329227995u },\r\n  { 13531654022114669524u,  6073184580144670117u,                    1u },\r\n  { 15757609704383306943u,          24519928653u,                    0u },\r\n  {  9590990814237149590u,                   24u,                    0u },\r\n  {                    1u,                    0u,         196662132736u },\r\n  { 15408590707489433890u, 12214193123817091080u,          95899502532u },\r\n  { 18332056844289122710u, 16592893013671929434u,         240246646623u },\r\n  { 11114572877353986193u,  4549827147718617002u,          72285931760u },\r\n  {  1703393793997526525u,  5274510003815168970u,                87112u },\r\n  {  5082852056285196265u,     1606938044258990u,                    0u },\r\n  {   816434266573722365u,              1606938u,                    0u },\r\n  {                    1u,                    0u,         129530986496u },\r\n  {  5736523019264798742u,  9794971998307800534u,          69797980545u },\r\n  { 10129314776268243339u, 14720142899209240168u,          36233143877u },\r\n  { 16511595775483995364u,  4300745446091561534u,          50823839524u },\r\n  { 12367293405401453325u, 15197156861335443363u,           5708990770u },\r\n  { 16934621733248854291u, 13078571300009428617u,                    5u },\r\n  { 10278280417769171336u,         105312291668u,                    0u },\r\n  {  5760764486226151240u,                  105u,                    0u },\r\n  {                    1u,                    0u,         238731001856u },\r\n  {  4128368337188369761u, 13484604155038683036u,          72453031918u },\r\n  { 10240941003671005056u,  8356963862052375698u,         175317175368u },\r\n  { 17933378316822368251u,  5850852848337610020u,         231147060143u },\r\n  {  8346249813075698616u,  2712780827214982049u,         128419156711u },\r\n  { 15906203609160902695u,  7732076577307618051u,               374144u },\r\n  { 14525607416135386328u,     6901746346790563u,                    0u },\r\n  {  6397156777364256320u,              6901746u,                    0u },\r\n  {                    1u,                    0u,          34937634816u },\r\n  { 16798760952716600048u, 17296309485351745866u,         249899825954u },\r\n  {  2419982808370854967u, 16598859101615853087u,          50404946937u },\r\n  {  2922947087773078956u,  7469952526870444256u,         165733552434u },\r\n  { 15419220167069510190u, 13531654022114669523u,          77854221733u },\r\n  {  3452124642157173416u, 15757609704383306942u,          24519928653u },\r\n  {  5979700067267186899u,  9590990814237149589u,                   24u },\r\n  {  4913998146922579597u,         452312848583u,                    0u },\r\n  {  5771037749337678924u,                  452u,                    0u },\r\n  {                    1u,                    0u,           8835301376u },\r\n  {  3464734175350698519u, 15408590707489433889u,          90993782792u },\r\n  {  9334527711335850125u, 18332056844289122709u,         170602522202u },\r\n  {  7269882896518450106u, 11114572877353986192u,         202092341162u },\r\n  {  1372511258182263196u,  1703393793997526524u,         174275541962u },\r\n  {  7571228438575951046u,  5082852056285196264u,          26044258990u },\r\n  {  2992506536646070406u,   816434266573722364u,              1606938u },\r\n  {   524517896824344606u,    29642774844752946u,                    0u },\r\n  { 15582941400898702773u,             29642774u,                    0u },\r\n  {                    1u,                    0u,         214310977536u },\r\n  {  3846112492507251066u,  5736523019264798741u,         104549111254u },\r\n  { 16681117750123089487u, 10129314776268243338u,          62895095400u },\r\n  { 14986314536556547267u, 16511595775483995363u,         163670432318u },\r\n  {  2573712825027107389u, 12367293405401453324u,         137918027683u },\r\n  {  7504855874008324928u, 16934621733248854290u,          84557186697u },\r\n  {  9572138030626879787u, 10278280417769171335u,         105312291668u },\r\n  {  8520676959353394843u,  5760764486226151239u,                  105u },\r\n  { 13448984662897903496u,        1942668892225u,                    0u },\r\n  { 12338883700918130648u,                 1942u,                    0u },\r\n  {                    1u,                    0u,         156223799296u },\r\n  {  2517285787892561600u,  4128368337188369760u,         146555162524u },\r\n  {  4338831817635138103u, 10240941003671005055u,          36972170386u },\r\n  {  1561495325934523196u, 17933378316822368250u,         161452451108u },\r\n  { 12262635050079398786u,  8346249813075698615u,           3862277025u },\r\n  { 11144065765517284188u, 15906203609160902694u,         163787434755u },\r\n  {  1212260522471875711u, 14525607416135386327u,         242346790563u },\r\n  {  9695352922247418869u,  6397156777364256319u,              6901746u },\r\n  {  7227025834627242948u,   127314748520905380u,                    0u },\r\n  {  9609008238705447829u,            127314748u,                    0u },\r\n  {                    1u,                    0u,          74910662656u },\r\n  {  3609144142396852269u, 16798760952716600047u,          31131187530u },\r\n  { 11568848377382068865u,  2419982808370854966u,         224158453279u },\r\n  { 10068303578029323957u,  2922947087773078955u,         211835877600u },\r\n  { 11645070846862630231u, 15419220167069510189u,         190187140051u },\r\n  { 12449386705878485055u,  3452124642157173415u,         149324160190u },\r\n  { 15025619323517318418u,  5979700067267186898u,         199266388373u },\r\n  { 14996237555047131272u,  4913998146922579596u,         196312848583u },\r\n  { 10211005638256058413u,  5771037749337678923u,                  452u },\r\n  {  1014743503555840530u,        8343699359066u,                    0u },\r\n  { 12900897707145290678u,                 8343u,                    0u },\r\n  {                    1u,                    0u,          33187823616u },\r\n  {  4718003016239473662u,  3464734175350698518u,         149506025761u },\r\n  { 14865830648693666725u,  9334527711335850124u,         144394101141u },\r\n  { 14754517212823091778u,  7269882896518450105u,         252074403984u },\r\n  { 11113946551474911901u,  1372511258182263195u,         232410437116u },\r\n  {  1963520352638130630u,  7571228438575951045u,         252162224104u },\r\n  { 13342587341404964200u,  2992506536646070405u,          50028434172u },\r\n  {  6240392545013573291u,   524517896824344605u,          22844752946u },\r\n  { 14377490861349714758u, 15582941400898702772u,             29642774u },\r\n  {  1717863312631397839u,   546812681195752981u,                    0u },\r\n  {  3611005143890591770u,            546812681u,                    0u },\r\n  {                    1u,                    0u,          21208498176u },\r\n  { 13168252824351245504u,  3846112492507251065u,         138904285205u },\r\n  {   735883891883379688u, 16681117750123089486u,         227812409738u },\r\n  { 10609203866866106404u, 14986314536556547266u,          12139521251u },\r\n  { 12358191111890306470u,  2573712825027107388u,          18406839052u },\r\n  { 15229916368406413528u,  7504855874008324927u,         135518906642u },\r\n  {  7241424335568075942u,  9572138030626879786u,          71461906823u },\r\n  {  6049715868779871913u,  8520676959353394842u,          65729070919u },\r\n  {  2000548404719336762u, 13448984662897903495u,         150668892225u },\r\n  {  1410974761895205301u, 12338883700918130647u,                 1942u },\r\n  { 16000132467694084868u,       35835915874844u,                    0u },\r\n  { 16894908866816792556u,                35835u,                    0u },\r\n  {                    1u,                    0u,          96136462336u },\r\n  {   589096329272056762u,  2517285787892561599u,         127235208544u },\r\n  {  7097729792403256904u,  4338831817635138102u,         250084648831u },\r\n  {  8553736750439287020u,  1561495325934523195u,         183664758778u },\r\n  {  2114152625261065696u, 12262635050079398785u,          38604121015u },\r\n  {  9817523680007641224u, 11144065765517284187u,         215065716774u },\r\n  { 13047215537500048015u,  1212260522471875710u,          63525586135u },\r\n  { 16755544192002345880u,  9695352922247418868u,         164391777855u },\r\n  {  6930119832670648356u,  7227025834627242947u,          60520905380u },\r\n  { 14560698131901886167u,  9609008238705447828u,            127314748u },\r\n  { 16408020927503338035u,  2348542582773833227u,                    0u },\r\n  { 14274703510609809116u,           2348542582u,                    0u },\r\n  {                    1u,                    0u,         239195652096u },\r\n  { 16428432973129962470u,  3609144142396852268u,          54627148527u },\r\n  {  3721112279790863774u, 11568848377382068864u,         171545803830u },\r\n  { 18032764903259620753u, 10068303578029323956u,          45631280555u },\r\n  { 18058455550468776079u, 11645070846862630230u,         167674882605u },\r\n  { 15692090139033993190u, 12449386705878485054u,         210814540455u },\r\n  {   389416944300619393u, 15025619323517318417u,         140812947666u },\r\n  { 12009691357260487293u, 14996237555047131271u,          75553539724u },\r\n  { 13494259174449809900u, 10211005638256058412u,          90055009355u },\r\n  { 18288583400616279877u,  1014743503555840529u,         151699359066u },\r\n  {     7216107869057472u, 12900897707145290677u,                 8343u },\r\n  { 17237061291959073878u,      153914086704665u,                    0u },\r\n  {  1599418782488783273u,               153914u,                    0u },\r\n  {                    1u,                    0u,          22255763456u },\r\n  {  9565464987240335777u,  4718003016239473661u,         140805878294u },\r\n  {   857713933775880687u, 14865830648693666724u,         185799843980u },\r\n  {  4621617820081363356u, 14754517212823091777u,         155602488249u },\r\n  {  9630162611715632528u, 11113946551474911900u,         197106442651u },\r\n  {  9283986497984645815u,  1963520352638130629u,         133723303109u },\r\n  {  8981807745082630996u, 13342587341404964199u,          29338292357u },\r\n  { 18350140531565934622u,  6240392545013573290u,         180779405341u },\r\n  {  4411619033127524143u, 14377490861349714757u,          21093125556u },\r\n  {  1852297584111266889u,  1717863312631397838u,           9195752981u },\r\n  { 11746243463811666096u,  3611005143890591769u,            546812681u },\r\n  {  6335244004343789147u, 10086913586276986678u,                    0u },\r\n  {  5109502367228239844u,          10086913586u,                    0u },\r\n  {  1603272682579847821u,                   10u,                    0u },\r\n  {                    1u,                    0u,         121713852416u },\r\n  {  6609546910952910052u, 13168252824351245503u,          78039892345u },\r\n  {  3911171343112928288u,   735883891883379687u,         194575126094u },\r\n  {  5254510615100863555u, 10609203866866106403u,          60669938882u },\r\n  {  3881927570803887650u, 12358191111890306469u,          63825615420u },\r\n  {  6379348759607163190u, 15229916368406413527u,          42392558399u },\r\n  { 14595733737222406466u,  7241424335568075941u,         154327955754u },\r\n  { 14670223432002373542u,  6049715868779871912u,         135108449946u },\r\n  {  4045087795619708513u,  2000548404719336761u,         215076489095u },\r\n  { 12598467307137142718u,  1410974761895205300u,          28867368919u },\r\n  {   734704388050777108u, 16000132467694084867u,         251915874844u },\r\n  {  5682201693687285822u, 16894908866816792555u,                35835u },\r\n  { 11048712694145438788u,      661055968790248u,                    0u },\r\n  { 17871025777010319485u,               661055u,                    0u },\r\n  {                    1u,                    0u,         191031934976u },\r\n  { 15268761435931663695u,   589096329272056761u,          54384768703u },\r\n  {  5016238054648555438u,  7097729792403256903u,          59463698998u },\r\n  { 14236047313993899750u,  8553736750439287019u,         129114608443u },\r\n  {  6957759675154690848u,  2114152625261065695u,          91532209025u },\r\n  { 18439367135478514473u,  9817523680007641223u,         126707290971u },\r\n  {  8539004472540641041u, 13047215537500048014u,         244908319870u },\r\n  {  1908462039431738399u, 16755544192002345879u,         195375682548u },\r\n  {   714690453250792146u,  6930119832670648355u,         148789337027u },\r\n  { 13782189447673929633u, 14560698131901886166u,          11889480596u },\r\n  {  3584742913798803164u, 16408020927503338034u,         118773833227u },\r\n  {  4347581515245125291u, 14274703510609809115u,           2348542582u },\r\n  { 16836742268156371392u,  6429475823218628948u,                    2u },\r\n  { 11764082328865615308u,          43322963970u,                    0u },\r\n  {  5957633711383291746u,                   43u,                    0u },\r\n  {                    1u,                    0u,          44890587136u },\r\n  {  9917186842884466953u, 16428432973129962469u,         128201721900u },\r\n  {  4751011869809829335u,  3721112279790863773u,         180977558144u },\r\n  { 11068497969931435029u, 18032764903259620752u,          86978950836u },\r\n  { 17118056985122509954u, 18058455550468776078u,          62850669910u },\r\n  { 14607066080907684459u, 15692090139033993189u,          17021110334u },\r\n  { 11768892370493391107u,   389416944300619392u,         135651046673u },\r\n  {  4043396447647747170u, 12009691357260487292u,          44731525255u },\r\n  {  1670341095362518057u, 13494259174449809899u,          17991426092u },\r\n  {  3190817644167043165u, 18288583400616279876u,         181000391185u },\r\n  { 10425820027224322486u,     7216107869057471u,          25934422965u },\r\n  { 13139964660506311565u, 17237061291959073877u,          58086704665u },\r\n  {  2297772885416059937u,  1599418782488783272u,               153914u },\r\n  {  7677687919964523763u,     2839213766779714u,                    0u },\r\n  { 14144589152747892828u,              2839213u,                    0u },\r\n  {                    1u,                    0u,         253518544896u },\r\n  { 17069730341503660290u,  9565464987240335776u,         164046496765u },\r\n  { 18167423787163077107u,   857713933775880686u,          65250538404u },\r\n  {  3765746945827805904u,  4621617820081363355u,         156522052161u },\r\n  { 10241734342430761691u,  9630162611715632527u,         197503285916u },\r\n  { 13345717282537140784u,  9283986497984645814u,         103486904773u },\r\n  {  9313926784816939953u,  8981807745082630995u,         170994763111u },\r\n  {   550974205049535019u, 18350140531565934621u,          69239154346u },\r\n  {  4494692285504086222u,  4411619033127524142u,         206100413253u },\r\n  {  1134308559863725587u,  1852297584111266888u,          25636765134u },\r\n  { 17587558045116130233u, 11746243463811666095u,          54343434265u },\r\n  {  9817142032346161594u,  6335244004343789146u,          50276986678u },\r\n  {  6071944935834172568u,  5109502367228239843u,          10086913586u },\r\n  { 11564168293299416955u,  1603272682579847820u,                   10u },\r\n  { 12458266507226064437u,         186070713419u,                    0u },\r\n  {  1304432355328256915u,                  186u,                    0u },\r\n  {                    1u,                    0u,         191358304256u },\r\n  { 15946798815542087355u,  6609546910952910051u,         231212025023u },\r\n  { 12082566083831286138u,  3911171343112928287u,          35284847591u },\r\n  { 11449623684706196411u,  5254510615100863554u,         165210439715u },\r\n  { 17518743620362604446u,  3881927570803887649u,         215345825189u },\r\n  {  9451061563087633805u,  6379348759607163189u,         165791236311u },\r\n  { 13191114787623314926u, 14595733737222406465u,         168795274405u },\r\n  {  8367349876734474799u, 14670223432002373541u,          57219284648u },\r\n  {  6544253801674393507u,  4045087795619708512u,         180682964281u },\r\n  { 16113906253336597498u, 12598467307137142717u,           3039828404u },\r\n  { 10294087136797312392u,   734704388050777107u,         235308032771u },\r\n  {  9127173070014462803u,  5682201693687285821u,         232598951915u },\r\n  { 16266900839595484952u, 11048712694145438787u,          63968790248u },\r\n  {  3299745387370952632u, 17871025777010319484u,               661055u },\r\n  { 12061115182604399189u,    12194330274671844u,                    0u },\r\n  {  5066801222582989646u,             12194330u,                    0u },\r\n  {                    1u,                    0u,         185827721216u },\r\n  {  7568423425299591513u, 15268761435931663694u,          71271930809u },\r\n  { 16561505984665207377u,  5016238054648555437u,         235771737671u },\r\n  {  4329114621856906245u, 14236047313993899749u,         223377180907u },\r\n  {  1477500474861899139u,  6957759675154690847u,         135999600095u },\r\n  { 16891579639263969684u, 18439367135478514472u,         142462900359u },\r\n  {  4684451357140027420u,  8539004472540641040u,         151103457934u },\r\n  { 14727186580409080709u,  1908462039431738398u,          35038743447u },\r\n  { 15864176859687308834u,   714690453250792145u,         214747133987u },\r\n  {  1755486942842684438u, 13782189447673929632u,          50194329302u },\r\n  { 17417077516652710041u,  3584742913798803163u,         219235682866u },\r\n  {  4290982361913532783u,  4347581515245125290u,          84912721627u },\r\n  { 11826659981004351409u, 16836742268156371391u,           2637732180u },\r\n  {   932930645678090820u, 11764082328865615307u,          43322963970u },\r\n  { 12707792781328052617u,  5957633711383291745u,                   43u },\r\n  { 16491596426880311906u,         799167628880u,                    0u },\r\n  {  3092207065214166010u,                  799u,                    0u },\r\n  {                    1u,                    0u,         229537611776u },\r\n  {  8142946531605512550u,  9917186842884466952u,         157257552869u },\r\n  {  5328402096432654515u,  4751011869809829334u,         144600024477u },\r\n  {  1932004361303814512u, 11068497969931435028u,         142927971728u },\r\n  {  2511477647985517771u, 17118056985122509953u,         229791850638u },\r\n  { 17451375493324716694u, 14607066080907684458u,         128637992933u },\r\n  {  9489266854478998489u, 11768892370493391106u,         124219192960u },\r\n  {  8803053132063235169u,  4043396447647747169u,         235090549372u },\r\n  { 16198682197142616773u,  1670341095362518056u,          68172974571u },\r\n  { 13696242485403414202u,  3190817644167043164u,         191565184836u },\r\n  { 16409082426079859931u, 10425820027224322485u,          85712318911u },\r\n  { 11653410736879597610u, 13139964660506311564u,         168124562517u },\r\n  { 13589514120653213261u,  2297772885416059936u,          66416208296u },\r\n  {  8032934885905905774u,  7677687919964523762u,         173766779714u },\r\n  {  2753021350129449273u, 14144589152747892827u,              2839213u },\r\n  { 16974897459201404133u,    52374249726338269u,                    0u },\r\n  { 13398576176159101589u,             52374249u,                    0u },\r\n  {                    1u,                    0u,         160925351936u },\r\n  { 10284586955251725351u, 17069730341503660289u,         238984858016u },\r\n  {  5294476488634150891u, 18167423787163077106u,         155204141550u },\r\n  { 15833244538135063323u,  3765746945827805903u,         143555205531u },\r\n  { 10348512742273116664u, 10241734342430761690u,         182723472783u },\r\n  { 13658504610142595663u, 13345717282537140783u,          83504908982u },\r\n  { 11956362239240850266u,  9313926784816939952u,          29029868371u },\r\n  { 13415901703662731781u,   550974205049535018u,          46243657757u },\r\n  {  5161774027546852762u,  4494692285504086221u,          72061490990u },\r\n  { 15274384838790587711u,  1134308559863725586u,         175953423432u },\r\n  { 14233354597679374929u, 17587558045116130232u,          90532188335u },\r\n  {  4274656492162486921u,  9817142032346161593u,         227329160794u },\r\n  { 12040276505541795046u,  6071944935834172567u,         140626894819u },\r\n  { 13238307206256765457u, 11564168293299416954u,          75675363980u },\r\n  { 12850161204172713271u, 12458266507226064436u,         186070713419u },\r\n  { 17531777095001445154u,  1304432355328256914u,                  186u },\r\n  {  5623628114515245990u,        3432398830065u,                    0u },\r\n  {  7357116143579573377u,                 3432u,                    0u },\r\n  {                    1u,                    0u,         227864477696u },\r\n  {  3555734177475596582u, 15946798815542087354u,          31654997219u },\r\n  { 14001876724756424382u, 12082566083831286137u,          66620685343u },\r\n  { 18159905057231476140u, 11449623684706196410u,          33949692994u },\r\n  {  5585207679308509467u, 17518743620362604445u,          53512343073u },\r\n  { 13948697622866724672u,  9451061563087633804u,          65715091765u },\r\n  {  9807691927739036432u, 13191114787623314925u,         165453594945u },\r\n  { 15818010096140820918u,  8367349876734474798u,          96354764709u },\r\n  {  5629845624785010943u,  6544253801674393506u,         189873536608u },\r\n  {  9517635131137734707u, 16113906253336597497u,          19558043581u },\r\n  {   619338244618780585u, 10294087136797312391u,          61494785043u },\r\n  { 11632367007491958899u,  9127173070014462802u,          67881830461u },\r\n  { 12083314261009739916u, 16266900839595484951u,         124178879555u },\r\n  { 16880538609458881650u,  3299745387370952631u,         228653834364u },\r\n  { 17404223674486504228u, 12061115182604399188u,          26274671844u },\r\n  {  7089067015287185433u,  5066801222582989645u,             12194330u },\r\n  {  2592264228029443648u,   224945689727159819u,                    0u },\r\n  { 13413731084370224440u,            224945689u,                    0u },\r\n  {                    1u,                    0u,          78410285056u },\r\n  {  9323915941641553425u,  7568423425299591512u,         173897801038u },\r\n  { 12155831029092699564u, 16561505984665207376u,         229234681773u },\r\n  { 17397171276588232676u,  4329114621856906244u,          31080095461u },\r\n  { 11874560617553253769u,  1477500474861899138u,          40915694367u },\r\n  { 13444839516837727954u, 16891579639263969683u,          16253944616u },\r\n  { 16994416043584590671u,  4684451357140027419u,          30798362384u },\r\n  { 15879694502877015730u, 14727186580409080708u,         209859998750u },\r\n  {  4234647645735263359u, 15864176859687308833u,         160095165137u },\r\n  {  7978589901512919496u,  1755486942842684437u,         219944181664u },\r\n  {  6114237175390859894u, 17417077516652710040u,         170232614619u },\r\n  {  8658612872088282708u,  4290982361913532782u,         191641124522u },\r\n  { 10253813330683324853u, 11826659981004351408u,         203050574271u },\r\n  { 13289465061747830991u,   932930645678090819u,          97688890827u },\r\n  {  4123165538545565412u, 12707792781328052616u,          80894011233u },\r\n  {  7846417485927038481u, 16491596426880311905u,          31167628880u },\r\n  { 10562273346358018864u,  3092207065214166009u,                  799u },\r\n  {  2691512658346619120u,       14742040721959u,                    0u },\r\n  {   751187558544605998u,                14742u,                    0u },\r\n  {                    1u,                    0u,           8441430016u },\r\n  {  3757709791947931308u,  8142946531605512549u,         214288853256u },\r\n  {  3452755398462519465u,  5328402096432654514u,          20104734166u },\r\n  {  3105818720159874523u,  1932004361303814511u,         129136147476u },\r\n  { 16859138458894499364u,  2511477647985517770u,         106946040961u },\r\n  { 12271894740606233755u, 17451375493324716693u,           2514414186u },\r\n  {  5429638071845793701u,  9489266854478998488u,          97477214466u },\r\n  {   145278150038876889u,  8803053132063235168u,          40878132321u },\r\n  {  9050266019724932450u, 16198682197142616772u,          92742474792u },\r\n  { 11907016253451490866u, 13696242485403414201u,         181889538140u },\r\n  {  2472757296513770735u, 16409082426079859930u,         140631732661u },\r\n  { 10558733798178239360u, 11653410736879597609u,          32736689036u },\r\n  { 15917322570831255850u, 13589514120653213260u,         242435466272u },\r\n  { 12254334656791355238u,  8032934885905905773u,          91149241586u },\r\n  {  7869542424662730262u,  2753021350129449272u,         221920211035u },\r\n  {  1378558986933000253u, 16974897459201404132u,         233726338269u },\r\n  { 13521405041909411105u, 13398576176159101588u,             52374249u },\r\n  {  3206744593298092012u,   966134380754314586u,                    0u },\r\n  { 13914648122214918505u,            966134380u,                    0u },\r\n  {                    1u,                    0u,           1557528576u },\r\n  {  1235541077112082496u, 10284586955251725350u,         242287014145u },\r\n  { 12014985518315533846u,  5294476488634150890u,         207858321906u },\r\n  {  1561535086344155741u, 15833244538135063322u,         218560993999u },\r\n  { 12761747276316224577u, 10348512742273116663u,          47740429018u },\r\n  {  9745594781103966137u, 13658504610142595662u,         176648155695u },\r\n  { 17514238702394846785u, 11956362239240850265u,          42727277488u },\r\n  {  2428898913707151713u, 13415901703662731780u,         205279820330u },\r\n  {    71666709959904945u,  5161774027546852761u,          18828026061u },\r\n  {  4049380135452919193u, 15274384838790587710u,         184771591698u },\r\n  { 18422240861777453733u, 14233354597679374928u,         185231729592u },\r\n  {  2914504416394425696u,  4274656492162486920u,         151652704697u },\r\n  { 12721377795748989418u, 12040276505541795045u,         122717650071u },\r\n  {  2626074459217717422u, 13238307206256765456u,          52696608634u },\r\n  {  4261529925046307655u, 12850161204172713270u,         146950399540u },\r\n  { 11536038685430305586u, 17531777095001445153u,         241304857490u },\r\n  { 12555757789435162768u,  5623628114515245989u,         104398830065u },\r\n  { 11905178684546080059u,  7357116143579573376u,                 3432u },\r\n  { 14032797718924543051u,       63316582777114u,                    0u },\r\n  { 10750340288005853484u,                63316u,                    0u },\r\n  {                    1u,                    0u,         186192756736u },\r\n  {  9660290106216358253u,  3555734177475596581u,         121759043258u },\r\n  { 14820142034615351103u, 14001876724756424381u,         186984450425u },\r\n  { 12674041783707777619u, 18159905057231476139u,         157302774714u },\r\n  { 15386686816442679994u,  5585207679308509466u,         140756160413u },\r\n  {  5679510383719146248u, 13948697622866724671u,         237531676044u },\r\n  {  1391101719248678506u,  9807691927739036431u,          46857496045u },\r\n  {  3364596672173710517u, 15818010096140820917u,         162305194542u },\r\n  { 11276509210104319732u,  5629845624785010942u,         249515952034u },\r\n  {  5316312656902630164u,  9517635131137734706u,         135033574393u },\r\n  { 17470981304473644647u,   619338244618780584u,          82630591879u },\r\n  {  7373293636384920591u, 11632367007491958898u,          23655037778u },\r\n  {  7616810902585191937u, 12083314261009739915u,         183915095831u },\r\n  { 12740295655921903924u, 16880538609458881649u,          84943484855u },\r\n  { 18366635945916526940u, 17404223674486504227u,          77384299092u },\r\n  {  4472171448243407067u,  7089067015287185432u,          11140526925u },\r\n  {   229592460858185629u,  2592264228029443647u,          25727159819u },\r\n  { 12749672866417114996u, 13413731084370224439u,            224945689u },\r\n  {  9452256722867098693u,  4149515568880992958u,                    0u },\r\n  { 16251451636418604634u,           4149515568u,                    0u },\r\n  {                    1u,                    0u,          88505450496u },\r\n  {  4515791283442995454u,  9323915941641553424u,          80658968920u },\r\n  { 13306155670047701346u, 12155831029092699563u,           4943102544u },\r\n  {  4456930152933417601u, 17397171276588232675u,         130643721220u },\r\n  {  9089157128546489637u, 11874560617553253768u,         147728846210u },\r\n  { 12437332180345515840u, 13444839516837727953u,          27921269139u },\r\n  {  3433060408790452524u, 16994416043584590670u,         132860839963u },\r\n  {  8275594526021936172u, 15879694502877015729u,          33229560708u },\r\n  {  3846512444641107689u,  4234647645735263358u,          21432520225u },\r\n  {  6210962618469046250u,  7978589901512919495u,         152331453461u },\r\n  {  7272858906616296575u,  6114237175390859893u,         110469384344u },\r\n  {  3710743300451225347u,  8658612872088282707u,         176555860334u },\r\n  {  6424677242672030600u, 10253813330683324852u,          67720423344u },\r\n  { 11485842256170301862u, 13289465061747830990u,         136223517251u },\r\n  {  7355797963557024308u,  4123165538545565411u,          97425355144u },\r\n  {  6358188982569427273u,  7846417485927038480u,         249572581985u },\r\n  { 12475094728768767402u, 10562273346358018863u,          39145907193u },\r\n  { 17288154837907896183u,  2691512658346619119u,         150040721959u },\r\n  {  2983850577727105262u,   751187558544605997u,                14742u },\r\n  { 13918604635001185935u,      271942652322184u,                    0u },\r\n  { 12033220395769876327u,               271942u,                    0u },\r\n  {                    1u,                    0u,         101203705856u },\r\n  {  5782377197813462997u,  3757709791947931307u,         178187174245u },\r\n  { 17732139848231399226u,  3452755398462519464u,         111168366770u },\r\n  {  3628839527415562921u,  3105818720159874522u,         202913935727u },\r\n  {  3188692267613601004u, 16859138458894499363u,         149665260746u },\r\n  {  5168130193478377352u, 12271894740606233754u,         216294341269u },\r\n  { 12556227529405091290u,  5429638071845793700u,          96007875544u },\r\n  { 15087090312791441192u,   145278150038876888u,         196490615904u },\r\n  { 10281804758610642494u,  9050266019724932449u,         185645480644u },\r\n  { 14238177586158586580u, 11907016253451490865u,         218134048441u },\r\n  {  7107927498217678128u,  2472757296513770734u,          41572390106u },\r\n  {  3845814658485364450u, 10558733798178239359u,          76862879785u },\r\n  {   714293333681725946u, 15917322570831255849u,         109664308812u },\r\n  { 16766172658649116982u, 12254334656791355237u,          56426608749u },\r\n  {   812461421432632215u,  7869542424662730261u,         228074731832u },\r\n  { 15218024718633799196u,  1378558986933000252u,         148732996836u },\r\n  {  8110797782612805146u, 13521405041909411104u,          90173837972u },\r\n  { 15941193964933529227u,  3206744593298092011u,         108754314586u },\r\n  { 14144280602323277933u, 13914648122214918504u,            966134380u },\r\n  { 15072402647813125245u, 17822033662586700072u,                    0u },\r\n  { 10822706091283369889u,          17822033662u,                    0u },\r\n  { 15163844593710966731u,                   17u,                    0u },\r\n  {                    1u,                    0u,          38066978816u },\r\n  {  2408529687792073670u,  1235541077112082495u,         234651333670u },\r\n  {  3980682212356510808u, 12014985518315533845u,          26084650986u },\r\n  {  4202670442792148519u,  1561535086344155740u,         247691815706u },\r\n  {  9419583343154651922u, 12761747276316224576u,          78528309751u },\r\n  { 16359166491570434575u,  9745594781103966136u,          89949448782u },\r\n  { 12567727056384237385u, 17514238702394846784u,           4131670873u },\r\n  {  2068388267923286639u,  2428898913707151712u,         153003885060u },\r\n  {  5689135844565021196u,    71666709959904944u,          62219517337u },\r\n  {  3104061965171139313u,  4049380135452919192u,          80998671678u },\r\n  {  7955173880156328016u, 18422240861777453732u,         136157995600u },\r\n  {  1445179403240833754u,  2914504416394425695u,         229689627272u },\r\n  { 12538201164459126715u, 12721377795748989417u,          16142359781u },\r\n  {  7580606719088482667u,  2626074459217717421u,          54231018000u },\r\n  {  8168318283218819755u,  4261529925046307654u,          33625369910u },\r\n  {  5249615277755961676u, 11536038685430305585u,         165680648993u },\r\n  {  6312997372068219831u, 12555757789435162767u,         128645381029u },\r\n  {  9183815417025176703u, 11905178684546080058u,          26760719488u },\r\n  { 10683849953373876937u, 14032797718924543050u,          84582777114u },\r\n  { 17175012155615667568u, 10750340288005853483u,                63316u },\r\n  { 18003508288378896912u,     1167984798111281u,                    0u },\r\n  { 14722554560950996951u,              1167984u,                    0u },\r\n  {                    1u,                    0u,          37523685376u },\r\n  { 15059324482416394930u,  9660290106216358252u,         189803401509u },\r\n  {  4134778595813308312u, 14820142034615351102u,         171687061181u },\r\n  { 16321118342639660948u, 12674041783707777618u,          26834113963u },\r\n  {  1523550293123468805u, 15386686816442679993u,          63307886874u },\r\n  {  8016371634569878509u,  5679510383719146247u,          15075411775u },\r\n  {  9884220139611134110u,  1391101719248678505u,         181182395151u },\r\n  {  7218073002727840414u,  3364596672173710516u,         254611300789u },\r\n  { 16062235669481359233u, 11276509210104319731u,          50288197886u },\r\n  { 15558048660560338002u,  5316312656902630163u,         168947103794u },\r\n  {  8394398745765058609u, 17470981304473644646u,         114399707048u },\r\n  {  5693296366442904274u,  7373293636384920590u,         139412908146u },\r\n  { 11783494675061161358u,  7616810902585191936u,         113690652811u },\r\n  { 13377293110865447894u, 12740295655921903923u,          35995657329u },\r\n  { 12840734051093062130u, 18366635945916526939u,          24242436899u },\r\n  {  7009868331566697505u,  4472171448243407066u,          63012446232u },\r\n  {  5019690705031194477u,   229592460858185628u,          55691161151u },\r\n  {  8608277240439804984u, 12749672866417114995u,         190512407863u },\r\n  { 12172482590657749222u,  9452256722867098692u,          48880992958u },\r\n  { 16613484892678771990u, 16251451636418604633u,           4149515568u },\r\n  {  5721488662757049244u,  2758075434182769113u,                    4u },\r\n  {   386931106438877039u,          76545051729u,                    0u },\r\n  { 10054429752182825659u,                   76u,                    0u },\r\n  {                    1u,                    0u,          16244801536u },\r\n  {  8634592106137071313u,  4515791283442995453u,         171721328144u },\r\n  { 12626356501369830731u, 13306155670047701345u,         227241610667u },\r\n  {  4803333258178976933u,  4456930152933417600u,         136492724195u },\r\n  { 13613083223558209297u,  9089157128546489636u,         209674229128u },\r\n  { 16106967997237446989u, 12437332180345515839u,          78186106577u },\r\n  { 14832921244380020170u,  3433060408790452523u,         177448620878u },\r\n  { 13774024637717231397u,  8275594526021936171u,         126208519857u },\r\n  {  9673012968505228885u,  3846512444641107688u,         199336696958u },\r\n  {  5391832334264815667u,  6210962618469046249u,         117394262471u },\r\n  { 16514436292632703088u,  7272858906616296574u,          83201159797u },\r\n  { 12025036352783454153u,  3710743300451225346u,         180348282451u },\r\n  {  7059867105311401050u,  6424677242672030599u,         206622648756u },\r\n  { 12769210631552594670u, 11485842256170301861u,         227398758606u },\r\n  {  8328873878884556145u,  7355797963557024307u,          16344678115u },\r\n  {  1016565892414238685u,  6358188982569427272u,          47676276240u },\r\n  {  9662978461927250281u, 12475094728768767401u,         239937192751u },\r\n  { 13729967277551868112u, 17288154837907896182u,          45161754863u },\r\n  {  6371593776693359475u,  2983850577727105261u,         136754529069u },\r\n  { 17617208110845643245u, 13918604635001185934u,          70652322184u },\r\n  { 14960960225633086797u, 12033220395769876326u,               271942u },\r\n  { 12090634301321662558u,     5016456510113118u,                    0u },\r\n  {  9409926148478635503u,              5016456u,                    0u },\r\n  {                    1u,                    0u,         171313463296u },\r\n  {  4307062684900157136u,  5782377197813462996u,         168961261227u },\r\n  { 15300759383869911853u, 17732139848231399225u,         218196719784u },\r\n  { 16007534237643445447u,  3628839527415562920u,          35172859354u },\r\n  {  7138502295759677634u,  3188692267613601003u,         154280164899u },\r\n  {  8218537071653683708u,  5168130193478377351u,         164680674458u },\r\n  {  2254219416760329296u, 12556227529405091289u,         216817872804u },\r\n  {  3057410459568460683u, 15087090312791441191u,          97557377752u },\r\n  {  8217810929938874370u, 10281804758610642493u,          49771853153u },\r\n  { 11741126472498340929u, 14238177586158586579u,         238385321521u },\r\n  {  1175325363726654805u,  7107927498217678127u,         127208482030u },\r\n  {  9428843070696730900u,  3845814658485364449u,          41038721919u },\r\n  { 12662500978715131896u,   714293333681725945u,         101908896041u },\r\n  {  6443045597035184564u, 16766172658649116981u,          21044043621u },\r\n  {  1921385512639171183u,   812461421432632214u,          60824970773u },\r\n  { 10469475094355551399u, 15218024718633799195u,          32439687228u },\r\n  { 14679174489076953574u,  8110797782612805145u,         235864173856u },\r\n  { 11853074234719825644u, 15941193964933529226u,         104766762987u },\r\n  {  8270896886596139124u, 14144280602323277932u,          40817076584u },\r\n  { 16532667046659118126u, 15072402647813125244u,         254586700072u },\r\n  {   148341279888833483u, 10822706091283369888u,          17822033662u },\r\n  { 10364629296397276041u, 15163844593710966730u,                   17u },\r\n  { 14265682585545771671u,         328758493846u,                    0u },\r\n  { 13991741872911347878u,                  328u,                    0u },\r\n  {                    1u,                    0u,          63130566656u },\r\n  { 14029045786848724433u,  2408529687792073669u,          21215793215u },\r\n  {  4005878521026842341u,  3980682212356510807u,          92227827221u },\r\n  {  3428326338640386488u,  4202670442792148518u,          64510636636u },\r\n  {  1010001558294829380u,  9419583343154651921u,         184886832192u },\r\n  {  2012063724327403418u, 16359166491570434574u,          64681297848u },\r\n  { 10997154538851372612u, 12567727056384237384u,          96112127552u },\r\n  {  1917749645489607898u,  2068388267923286638u,         176308408672u },\r\n  {  9763872523711218805u,  5689135844565021195u,         152168271536u },\r\n  { 15875699078454059311u,  3104061965171139312u,         164431250840u },\r\n  { 10966529452671276106u,  7955173880156328015u,          95078343332u },\r\n  { 18073244132105736913u,  1445179403240833753u,         233679697247u },\r\n  {  4435241176994913173u, 12538201164459126714u,         173410945513u },\r\n  {  5464400086219074323u,  7580606719088482666u,          70442805421u },\r\n  {  2445909179323258812u,  8168318283218819754u,          49284582214u },\r\n  {   873962058644121211u,  5249615277755961675u,         143342228273u },\r\n  { 16675872194112650857u,  6312997372068219830u,          58497855631u },\r\n  { 10680102689274800355u,  9183815417025176702u,          74579172666u },\r\n  {  2370498083108897524u, 10683849953373876936u,          43931059274u },\r\n  { 15354400521451334666u, 17175012155615667567u,          49975972139u },\r\n  {   259991949657381021u, 18003508288378896911u,         112798111281u },\r\n  { 10335286558772966917u, 14722554560950996950u,              1167984u },\r\n  { 16337526653906757263u,    21545516652742137u,                    0u },\r\n  { 12040967163702784894u,             21545516u,                    0u },\r\n  {                    1u,                    0u,         108816367616u },\r\n  {  3373309160242342187u, 15059324482416394929u,          62224146796u },\r\n  { 13639841054510584221u,  4134778595813308311u,          82884769598u },\r\n  { 15898855427739708031u, 16321118342639660947u,         185082591826u },\r\n  {  4544387940067005419u,  1523550293123468804u,           7434568377u },\r\n  {  5281598644835398575u,  8016371634569878508u,         105535824647u },\r\n  { 13675642405083408835u,  9884220139611134109u,         180391292521u },\r\n  {  3973392623768015721u,  7218073002727840413u,         243870735540u },\r\n  {  4491285101509114191u, 16062235669481359232u,          19843403507u },\r\n  { 15002304272810270500u, 15558048660560338001u,         102455061267u },\r\n  { 17325098540619893468u,  8394398745765058608u,          14308634214u },\r\n  {  1137212864974584822u,  5693296366442904273u,            638784526u },\r\n  {  2619406097224859078u, 11783494675061161357u,          51725184512u },\r\n  {  8281347529729293732u, 13377293110865447893u,          91696097587u },\r\n  { 11344719666795450104u, 12840734051093062129u,         218380005723u },\r\n  { 17283870506679425783u,  7009868331566697504u,         156272117978u },\r\n  { 11054210518010603775u,  5019690705031194476u,         115466655644u },\r\n  {  6399455551799092885u,  8608277240439804983u,          68659871603u },\r\n  { 12930529916573967170u, 12172482590657749221u,          89900618820u },\r\n  { 14550097052337552404u, 16613484892678771989u,         217310162521u },\r\n  { 12487632712206414748u,  5721488662757049243u,          81020975577u },\r\n  {  5791017277843595715u,   386931106438877038u,          76545051729u },\r\n  { 10227264183449036113u, 10054429752182825658u,                   76u },\r\n  {  2006055278511721441u,        1412006979354u,                    0u },\r\n  {   128746359043876333u,                 1412u,                    0u },\r\n  {                    1u,                    0u,         253468082176u },\r\n  {  7408146306870995754u,  8634592106137071312u,          97684476157u },\r\n  {  8299024588195267962u, 12626356501369830730u,         128260389217u },\r\n  {  1497052939192040881u,  4803333258178976932u,          36737966720u },\r\n  { 16771714264265803747u, 13613083223558209296u,          63873160484u },\r\n  {   142988846654429432u, 16106967997237446988u,          43804094271u },\r\n  { 11839838367716104145u, 14832921244380020169u,          43746691371u },\r\n  {  6019646776647679765u, 13774024637717231396u,         232524375083u },\r\n  {  4611972391702034948u,  9673012968505228884u,         233292291816u },\r\n  { 16447182322205429545u,  5391832334264815666u,         126895249385u },\r\n  {  2113477168726764245u, 16514436292632703087u,           2651878526u },\r\n  {  3536261187802311516u, 12025036352783454152u,         135382716162u },\r\n  { 18444381860986709854u,  7059867105311401049u,         165692220295u },\r\n  {  4734315730275909838u, 12769210631552594669u,          51451509157u },\r\n  {  9974936316849658174u,  8328873878884556144u,          72055108147u },\r\n  { 11864423681540657642u,  1016565892414238684u,         169523831112u },\r\n  {  8207245621417902667u,  9662978461927250280u,         118744303017u },\r\n  {  7992526918695295028u, 13729967277551868111u,         237345404790u },\r\n  {  8679354522130259987u,  6371593776693359474u,         142955030765u },\r\n  {  6065763799692166461u, 17617208110845643244u,         102811035278u },\r\n  { 18143341109049024976u, 14960960225633086796u,          94655434598u },\r\n  { 15242492331283350570u, 12090634301321662557u,         136510113118u },\r\n  {  9986352353182266963u,  9409926148478635502u,              5016456u },\r\n  { 17340463289911536077u,    92537289398950870u,                    0u },\r\n  {  7359344614214233035u,             92537289u,                    0u },\r\n  {                    1u,                    0u,         212233486336u },\r\n  {   419091135888749535u,  4307062684900157135u,          57829455828u },\r\n  {  1073142712661309790u, 15300759383869911852u,         168867770169u },\r\n  { 11076438902195672286u, 16007534237643445446u,         235386978984u },\r\n  {  1820390940081322073u,  7138502295759677633u,         135445527787u },\r\n  { 18417808973944523597u,  8218537071653683707u,         217122201479u },\r\n  { 10251294197731582957u,  2254219416760329295u,          39165742553u },\r\n  {  1502394029870156428u,  3057410459568460682u,          61445488423u },\r\n  {   321014853559106075u,  8217810929938874369u,         211636487741u },\r\n  {  2390953058510591778u, 11741126472498340928u,          47063714515u },\r\n  { 10685224265907994087u,  1175325363726654804u,         225511138607u },\r\n  {  5967405799190505023u,  9428843070696730899u,         249686435553u },\r\n  { 11210723659228214761u, 12662500978715131895u,          53349278201u },\r\n  { 12327123641078462773u,  6443045597035184563u,         150104158517u },\r\n  {  1709976940107894237u,  1921385512639171182u,          27567551382u },\r\n  { 16607686590938553511u, 10469475094355551398u,          25795759643u },\r\n  { 18332088094272679457u, 14679174489076953573u,         138642556441u },\r\n  {  2946170632136780882u, 11853074234719825643u,         108448366218u },\r\n  {  4824449494694383419u,  8270896886596139123u,         124896237676u },\r\n  { 17008332258693407134u, 16532667046659118125u,         160008041596u },\r\n  {  1773419466622750661u,   148341279888833482u,         202561867680u },\r\n  {  3892343466023784379u, 10364629296397276040u,         150773344202u },\r\n  { 12001571085575422796u, 14265682585545771670u,          72758493846u },\r\n  { 12933506765500977582u, 13991741872911347877u,                  328u },\r\n  { 11884830007749143734u,        6064523798049u,                    0u },\r\n  {  9662368568096205337u,                 6064u,                    0u },\r\n  {                    1u,                    0u,         197760516096u },\r\n  { 16801499925276664442u, 14029045786848724432u,          87217159109u },\r\n  { 10492407990787637084u,  4005878521026842340u,          38185849943u },\r\n  {  7673849751013230269u,  3428326338640386487u,          17054752294u },\r\n  {  6046724489853072367u,  1010001558294829379u,          14109074193u },\r\n  {  3723941391207507903u,  2012063724327403417u,          72596156942u },\r\n  { 16844122108860347659u, 10997154538851372611u,         110103961416u },\r\n  { 10622020182694668027u,  1917749645489607897u,          11529300590u },\r\n  {  8741198820686854862u,  9763872523711218804u,         240860623371u },\r\n  {  6855480461211306807u, 15875699078454059310u,          79594496752u },\r\n  { 10005708458011566304u, 10966529452671276105u,         217979752527u },\r\n  {  8932093106442919061u, 18073244132105736912u,         186240434905u },\r\n  {  9062763476260756743u,  4435241176994913172u,         106296225722u },\r\n  { 13664977682032775521u,  5464400086219074322u,         170132593002u },\r\n  {  1078499125430623453u,  2445909179323258811u,          75047377578u },\r\n  {  6554586738078431161u,   873962058644121210u,         182904000843u },\r\n  { 12177313698643242883u, 16675872194112650856u,         126578969526u },\r\n  { 16615072271904633953u, 10680102689274800354u,         200128504958u },\r\n  { 16375404983106569285u,  2370498083108897523u,         111832363720u },\r\n  { 13552251831473522729u, 15354400521451334665u,          15014094191u },\r\n  {  8330500218412111874u,   259991949657381020u,         214560277007u },\r\n  {  7044338079053294004u, 10335286558772966916u,         249885659094u },\r\n  {  2688849443046530184u, 16337526653906757262u,          44652742137u },\r\n  {   855940991879596845u, 12040967163702784893u,             21545516u },\r\n  {  7344363609485825662u,   397444631628981487u,                    0u },\r\n  { 11602660525134634992u,            397444631u,                    0u },\r\n  {                    1u,                    0u,         177182867456u },\r\n  { 16945343208344873835u,  3373309160242342186u,         151739417265u },\r\n  {  9617992661337889145u, 13639841054510584220u,         147861878679u },\r\n  { 18280344933262742088u, 15898855427739708030u,           4246351763u },\r\n  {  5179975582362777795u,  4544387940067005418u,         236286316036u },\r\n  {  1798918997870037130u,  5281598644835398574u,         157741358060u },\r\n  {  6327667344756325883u, 13675642405083408834u,         157215398045u },\r\n  { 18380327574124007701u,  3973392623768015720u,         128243473053u },\r\n  { 18015447557304295289u,  4491285101509114190u,          81813276544u },\r\n  { 10315590748073249878u, 15002304272810270499u,          48939195473u },\r\n  {  7697916092577993382u, 17325098540619893467u,         209061648432u },\r\n  {  3124132817942110723u,  1137212864974584821u,         141141998289u },\r\n  {  7448238998520507049u,  2619406097224859077u,         213448932749u },\r\n  { 13892823322374205297u,  8281347529729293731u,         241614998485u },\r\n  { 11042137840046332564u, 11344719666795450103u,          32936960497u },\r\n  { 10513966307445593804u, 17283870506679425782u,         108599249952u },\r\n  {  9388437460943526958u, 11054210518010603774u,          55346915180u },\r\n  { 10967228614677896228u,  6399455551799092884u,         229700965431u },\r\n  {  2310996671540235542u, 12930529916573967169u,          21788762341u },\r\n  {  4989110555003898587u, 14550097052337552403u,         155676955925u },\r\n  { 16271452421983657679u, 12487632712206414747u,         110313931675u },\r\n  {  9523160181437090473u,  5791017277843595714u,         186554421102u },\r\n  { 13137707423765072250u, 10227264183449036112u,          26108748474u },\r\n  { 16846859744221860705u,  2006055278511721440u,         132006979354u },\r\n  {  7767140033449795569u,   128746359043876332u,                 1412u },\r\n  { 17169456915721160017u,       26046931378436u,                    0u },\r\n  { 17180899661833327819u,                26046u,                    0u },\r\n  {                    1u,                    0u,         208401596416u },\r\n  { 17572520700934791416u,  7408146306870995753u,          74449891024u },\r\n  { 17968798858233825417u,  8299024588195267961u,         164081155402u },\r\n  { 15338423313945305609u,  1497052939192040880u,          16909196452u },\r\n  { 17895321323836726301u, 16771714264265803746u,          76007751440u },\r\n  {   814069333008965773u,   142988846654429431u,         201641838924u },\r\n  {  7200328959852723947u, 11839838367716104144u,          36326325705u },\r\n  {   759884557248133773u,  6019646776647679764u,          84250015524u },\r\n  { 13410165861863974851u,  4611972391702034947u,          50891603540u },\r\n  {  6278452420856351570u, 16447182322205429544u,         111114571826u },\r\n  {  9072115382556676442u,  2113477168726764244u,         200191701103u },\r\n  {  2755882551854926563u,  3536261187802311515u,          89999871944u },\r\n  {  8496072611504649269u, 18444381860986709853u,         237256647769u },\r\n  {  4122009033579215815u,  4734315730275909837u,         112540742381u },\r\n  { 10222217724450527221u,  9974936316849658173u,         220643171696u },\r\n  {  2064539481554006325u, 11864423681540657641u,         104444915676u },\r\n  {  7935605886598063693u,  8207245621417902666u,         207433275752u },\r\n  {  7805147585347548429u,  7992526918695295027u,         114470508751u },\r\n  {  5709020905457661273u,  8679354522130259986u,         236328825714u },\r\n  { 16257370307404906674u,  6065763799692166460u,          76983552492u },\r\n  { 14971258192939373646u, 18143341109049024975u,          93826297164u },\r\n  {  1133404845901376390u, 15242492331283350569u,         238541361245u },\r\n  {  9460827548162822047u,  9986352353182266962u,         214940028398u },\r\n  {  1273897659779791346u, 17340463289911536076u,         201398950870u },\r\n  {  7833262224435092783u,  7359344614214233034u,             92537289u },\r\n  {  3033420566713364587u,  1707011694817242694u,                    0u },\r\n  { 15075466825360349103u,           1707011694u,                    0u },\r\n  {                    1u,                    0u,         207022718976u },\r\n  {  2484134775182816690u,   419091135888749534u,          44058175183u },\r\n  { 18400539815335991277u,  1073142712661309789u,         198600454956u },\r\n  {   485494064952118286u, 11076438902195672285u,         193098683590u },\r\n  { 17577048805241314891u,  1820390940081322072u,         251998431425u },\r\n  {  2863946907557583807u, 18417808973944523596u,          79555723771u },\r\n  { 13045307417786230800u, 10251294197731582956u,         138081444943u },\r\n  { 12032088871615097766u,  1502394029870156427u,           1017402250u },\r\n  {  8848763446997690580u,   321014853559106074u,          64129613825u },\r\n  { 10031289150307672684u,  2390953058510591777u,          84579247168u },\r\n  { 11592215575498656563u, 10685224265907994086u,          19323493716u },\r\n  { 15894436747956898388u,  5967405799190505022u,         247607734547u },\r\n  {  2091546719588500923u, 11210723659228214760u,         179668254711u },\r\n  {  5863809244813756109u, 12327123641078462772u,         110092698035u },\r\n  { 11303008753675411245u,  1709976940107894236u,         166900304494u },\r\n  { 13238426537506910532u, 16607686590938553510u,         229993784486u },\r\n  { 17258458071023005565u, 18332088094272679456u,         235159712229u },\r\n  {  8385733444777075179u,  2946170632136780881u,         115261533931u },\r\n  {  9530757096163247300u,  4824449494694383418u,          45922023539u },\r\n  { 14423000845391072217u, 17008332258693407133u,         202096137261u },\r\n  { 10953140011159884311u,  1773419466622750660u,         136211004362u },\r\n  { 12228340237948264127u,  3892343466023784378u,         150650606472u },\r\n  { 11279134946966259189u, 12001571085575422795u,         165701126806u },\r\n  { 14640097792684582651u, 12933506765500977581u,          33644277925u },\r\n  {  6232313315128656728u, 11884830007749143733u,         176523798049u },\r\n  { 16136121832933322088u,  9662368568096205336u,                 6064u },\r\n  { 15074767079673358271u,      111870718431542u,                    0u },\r\n  { 13252722804829281908u,               111870u,                    0u },\r\n  {                    1u,                    0u,         208910811136u },\r\n  {  7740175894281560509u, 16801499925276664441u,         228568794576u },\r\n  { 15670495392425593226u, 10492407990787637083u,         183416000228u },\r\n  { 15152257626756992778u,  7673849751013230268u,          67327793591u },\r\n  {  4090073428152440422u,  6046724489853072366u,         153201875267u },\r\n  { 14450327772834205584u,  3723941391207507902u,          67913121689u },\r\n  {  4466091895542494216u, 16844122108860347658u,         217575820867u },\r\n  { 10454115378553795377u, 10622020182694668026u,         116473861337u },\r\n  {  2267817233475657788u,  8741198820686854861u,          46371636340u },\r\n  {  5500455702636497521u,  6855480461211306806u,          73542410542u },\r\n  { 15178768299492252549u, 10005708458011566303u,         208484209737u },\r\n  {  7062359872332045590u,  8932093106442919060u,         148491293392u },\r\n  { 12297347290027942576u,  9062763476260756742u,          18740779924u },\r\n  {  8030124596941085588u, 13664977682032775520u,         187058465554u },\r\n  {  6526656990996654843u,  1078499125430623452u,         122355324859u },\r\n  {  6254287345256979850u,  6554586738078431160u,         104660133498u },\r\n  {  6642007136244870032u, 12177313698643242882u,         226900704872u },\r\n  {  2027592955437164718u, 16615072271904633952u,         243887712482u },\r\n  {   942718349157325567u, 16375404983106569284u,           9734669043u },\r\n  { 14617066671884002278u, 13552251831473522728u,         156451597321u },\r\n  {  6831631114396133348u,  8330500218412111873u,           4381874332u },\r\n  { 14603040013386939258u,  7044338079053294003u,         142145762820u },\r\n  {  9906106765319401103u,  2688849443046530183u,         125046400654u },\r\n  {  1396179595609933063u,   855940991879596844u,         239398138749u },\r\n  { 11524884268464976417u,  7344363609485825661u,          23628981487u },\r\n  {   382929570730827274u, 11602660525134634991u,            397444631u },\r\n  {  6109721884461301381u,  7331559403129590068u,                    0u },\r\n  {  2390514825000339691u,           7331559403u,                    0u },\r\n  {  6116191454763441755u,                    7u,                    0u },\r\n  {                    1u,                    0u,          42918608896u },\r\n  { 11598868771099176310u, 16945343208344873834u,         156521392426u },\r\n  { 14449966445520085105u,  9617992661337889144u,         126990979484u },\r\n  { 11675595287405614726u, 18280344933262742087u,         234280807038u },\r\n  { 15860796398550489897u,  5179975582362777794u,         174097519594u },\r\n  { 16180408435245829662u,  1798918997870037129u,         194343023534u },\r\n  { 13756992797154950706u,  6327667344756325882u,         104996399554u },\r\n  {  8830551328786758466u, 18380327574124007700u,          78976619368u },\r\n  { 16699955256560951264u, 18015447557304295288u,          35559209294u },\r\n  { 10038983627153402074u, 10315590748073249877u,         219417304867u },\r\n  { 15085100736692127346u,  7697916092577993381u,         245169359579u },\r\n  { 10007783780289711125u,  3124132817942110722u,         197403769845u },\r\n  { 17596907048353602192u,  7448238998520507048u,         163753131461u },\r\n  { 13530650344896573509u, 13892823322374205296u,         247598595491u },\r\n  {  6337724853398437005u, 11042137840046332563u,         246569963255u },\r\n  { 12768885008904063297u, 10513966307445593803u,         254508948214u },\r\n  {  2759773619512884114u,  9388437460943526957u,         148594534654u },\r\n  {  8434364600126655292u, 10967228614677896227u,          65125279380u },\r\n  {  3843827521199949338u,  2310996671540235541u,          19270460225u },\r\n  {  4661660852957808994u,  4989110555003898586u,         155882077203u },\r\n  { 15298044134177324417u, 16271452421983657678u,         194516251547u },\r\n  {  7747773274913338217u,  9523160181437090472u,          80712196546u },\r\n  { 10348785912020632966u, 13137707423765072249u,         224913270096u },\r\n  {  4175372293197190170u, 16846859744221860704u,         236421057504u },\r\n  { 11326064156813083145u,  7767140033449795568u,           4930758124u },\r\n  {  8100407170505981763u, 17169456915721160016u,         190931378436u },\r\n  {  1706556116319916846u, 17180899661833327818u,                26046u },\r\n  { 15028897280749641942u,      480481077043500u,                    0u },\r\n  {  1421201742071739121u,               480481u,                    0u },\r\n  {                    1u,                    0u,          41952608256u },\r\n  {  8480737406125178272u, 17572520700934791415u,         121974090537u },\r\n  { 10947205650755620361u, 17968798858233825416u,         176831497593u },\r\n  {   868577942165647781u, 15338423313945305608u,         226970107312u },\r\n  { 16017710019091388479u, 17895321323836726300u,         247044130786u },\r\n  {  6610879150827623375u,   814069333008965772u,         208390330615u },\r\n  { 12110095866223762092u,  7200328959852723946u,          20041193424u },\r\n  {  7756802952949470775u,   759884557248133772u,           3726966548u },\r\n  {  2941800790804618759u, 13410165861863974850u,          40340355587u },\r\n  { 11703600274199927522u,  6278452420856351569u,         212491800360u },\r\n  {   806737539257940346u,  9072115382556676441u,          91149396692u },\r\n  { 14579028397110132023u,  2755882551854926562u,          93460573019u },\r\n  { 14247808875344366934u,  8496072611504649268u,         205223454557u },\r\n  {  9713379923695279513u,  4122009033579215814u,          61554147533u },\r\n  {  2246428675703313877u, 10222217724450527220u,         233111918909u },\r\n  {  3549783776592680620u,  2064539481554006324u,          74430190057u },\r\n  { 12645029747929213033u,  7935605886598063692u,          51423117898u },\r\n  { 16279009267476580506u,  7805147585347548428u,          18309486643u },\r\n  {   343358782242907186u,  5709020905457661272u,          60881313810u },\r\n  { 10077054739085890321u, 16257370307404906673u,         207811593532u },\r\n  { 10526715404712173586u, 14971258192939373645u,          41061441999u },\r\n  { 11438715865125144243u,  1133404845901376389u,          82512872489u },\r\n  {  5040916178827294801u,  9460827548162822046u,         204069058130u },\r\n  { 16643761637275849508u,  1273897659779791345u,         202424641996u },\r\n  {  4852542977279030386u,  7833262224435092782u,          70164442058u },\r\n  {  7883373066544387129u,  3033420566713364586u,         110817242694u },\r\n  { 16699064314768500978u, 15075466825360349102u,           1707011694u },\r\n  {  6805863634444817214u, 13042063791413317777u,                    1u },\r\n  {  2266540253968903500u,          31488807865u,                    0u },\r\n  {  9016913589137908810u,                   31u,                    0u },\r\n  {                    1u,                    0u,         222134665216u },\r\n  { 11654451024602552034u,  2484134775182816689u,          93997495262u },\r\n  {  5299013208454526793u, 18400539815335991276u,         221026318685u },\r\n  { 14918550373926182540u,   485494064952118285u,          88952853725u },\r\n  {  6225552657491071054u, 17577048805241314890u,          76155254872u },\r\n  { 10344713496596235785u,  2863946907557583806u,         236707187532u },\r\n  { 12972405634433280209u, 13045307417786230799u,         139652260844u },\r\n  { 12911885282402784945u, 12032088871615097765u,          26479692427u },\r\n  {  6934311832970995868u,  8848763446997690579u,          33543797274u },\r\n  {  9975729197003430461u, 10031289150307672683u,         230628415265u },\r\n  {  1982857556803548935u, 11592215575498656562u,          62861639142u },\r\n  {  2095735223386298223u, 15894436747956898387u,         232113382974u },\r\n  {  7110931538347639365u,  2091546719588500922u,          52317877736u },\r\n  { 15822183724630969535u,  5863809244813756108u,         220612737332u },\r\n  { 16931982690156327501u, 11303008753675411244u,         166717656540u },\r\n  {  6740069226761666110u, 13238426537506910531u,          32935582886u },\r\n  {  3138792961008474902u, 17258458071023005564u,          81454591520u },\r\n  { 12154594426971851390u,  8385733444777075178u,          58516663377u },\r\n  { 15780127219221910902u,  9530757096163247299u,         157781872442u },\r\n  { 16421541930960194381u, 14423000845391072216u,         196593770909u },\r\n  {  7485894627196740576u, 10953140011159884310u,         186662899652u },\r\n  {  8897269432694476707u, 12228340237948264126u,          75611443130u },\r\n  { 17189823634941678805u, 11279134946966259188u,         173793641291u },\r\n  {  9585582064286255216u, 14640097792684582650u,         181337854381u },\r\n  { 12835472279575022097u,  6232313315128656727u,          24874740917u },\r\n  {  6776016669542754608u, 16136121832933322087u,          54817204760u },\r\n  { 18340015775620871027u, 15074767079673358270u,         254718431542u },\r\n  {  5254188752292365830u, 13252722804829281907u,               111870u },\r\n  {  6798802596750151183u,     2063650512248692u,                    0u },\r\n  {  9449320530215272000u,              2063650u,                    0u },\r\n  {                    1u,                    0u,         121419595776u },\r\n  { 17110720482574968811u,  7740175894281560508u,          91849499257u },\r\n  { 16172441693558688213u, 15670495392425593225u,         188821405531u },\r\n  {  6234654946353717320u, 15152257626756992777u,         238221723324u },\r\n  { 11180283100679445438u,  4090073428152440421u,         190783353838u },\r\n  { 14852260031176961272u, 14450327772834205583u,          10242107326u },\r\n  {  4481533167346438750u,  4466091895542494215u,         250566718730u },\r\n  {  4269718344362365664u, 10454115378553795376u,         205122938618u },\r\n  { 11520029752381101466u,  2267817233475657787u,          54298180301u },\r\n  { 16778682550309368417u,  5500455702636497520u,         223822842678u },\r\n  {  9687587467301363608u, 15178768299492252548u,         148382851295u },\r\n  { 10093971076828497318u,  7062359872332045589u,           6666640532u },\r\n  {  1913763026490934696u, 12297347290027942575u,          96435313926u },\r\n  { 12701450127613557000u,  8030124596941085587u,         220353810784u },\r\n  {  8974572160711134644u,  6526656990996654842u,         184339045596u },\r\n  {  9890000077336694124u,  6254287345256979849u,         130360063928u },\r\n  {  4292326716201059148u,  6642007136244870031u,          96109916034u },\r\n  { 14644519175104337420u,  2027592955437164717u,          68051104864u },\r\n  {  5051178622270136798u,   942718349157325566u,          40792392772u },\r\n  {   675983118348065839u, 14617066671884002277u,           1370343464u },\r\n  {  4431647660065117244u,  6831631114396133347u,         179791632385u },\r\n  {  8316115180008411962u, 14603040013386939257u,         135537011123u },\r\n  {  9621158095544965602u,  9906106765319401102u,          44075687047u },\r\n  { 15283478958951102072u,  1396179595609933062u,         125624765228u },\r\n  { 13981553073094447813u, 11524884268464976416u,         239020758653u },\r\n  {  4558368743929911607u,   382929570730827273u,          52331208687u },\r\n  { 15217004469858477791u,  6109721884461301380u,         235129590068u },\r\n  { 11589190369996515737u,  2390514825000339690u,           7331559403u },\r\n  {  3670624237398152929u,  6116191454763441754u,                    7u },\r\n  { 13471713758418039777u,         135243399970u,                    0u },\r\n  {  4489936967610296411u,                  135u,                    0u },\r\n  {                    1u,                    0u,         106628775936u },\r\n  {  9052049303222747950u, 11598868771099176309u,         120783334250u },\r\n  {  1011330006193020538u, 14449966445520085104u,          71632935288u },\r\n  { 17412075644359478612u, 11675595287405614725u,         194859815495u },\r\n  {  6358678384745980468u, 15860796398550489896u,         137877141698u },\r\n  { 15262353928842850919u, 16180408435245829661u,         250745768073u },\r\n  { 11145257686438581736u, 13756992797154950705u,          20478705146u },\r\n  {  1600562031807691890u,  8830551328786758465u,         120905306388u },\r\n  {  6775147337046626724u, 16699955256560951263u,          85544214392u },\r\n  { 15772127322106297822u, 10038983627153402073u,         165817764949u },\r\n  {  4141472200527441474u, 15085100736692127345u,           2542523045u },\r\n  { 18246007807879281267u, 10007783780289711124u,         168953930242u },\r\n  {   960746958654787123u, 17596907048353602191u,         112733498024u },\r\n  { 11355981212264408477u, 13530650344896573508u,         147343568752u },\r\n  {  1573078209576251481u,  6337724853398437004u,         203692202643u },\r\n  {  6245294478780491367u, 12768885008904063296u,          45149607627u },\r\n  {  7523292955659721510u,  2759773619512884113u,          35457227821u },\r\n  { 14454736751015226505u,  8434364600126655291u,          21208374307u },\r\n  {  7219786377781411316u,  3843827521199949337u,         218252709141u },\r\n  { 10597123082209392431u,  4661660852957808993u,         206829308634u },\r\n  {  6922353544343010714u, 15298044134177324416u,         168420007630u },\r\n  { 14317523356293377430u,  7747773274913338216u,         121561008808u },\r\n  {  4057766168681892717u, 10348785912020632965u,          96226347385u },\r\n  { 15214083611901244045u,  4175372293197190169u,         240613987168u },\r\n  {  8390569016883950721u, 11326064156813083144u,          80439123952u },\r\n  { 10680472538208175055u,  8100407170505981762u,         202092512592u },\r\n  { 12173567833130544927u,  1706556116319916845u,          44814718154u },\r\n  {  1386341248286610026u, 15028897280749641941u,         225077043500u },\r\n  { 12487300952797237352u,  1421201742071739120u,               480481u },\r\n  {  2614759871804869720u,     8863311460481781u,                    0u },\r\n  {  8494389567327729477u,              8863311u,                    0u },\r\n  {                    1u,                    0u,         247459741696u },\r\n  {  6260469580539185878u,  8480737406125178271u,         136593449207u },\r\n  { 17818573101084525841u, 10947205650755620360u,           8047085704u },\r\n  {  2201029069927307150u,   868577942165647780u,          28868321800u },\r\n  { 10397997613804897039u, 16017710019091388478u,         140358376476u },\r\n  { 14269915965770103741u,  6610879150827623374u,         234656489612u },\r\n  { 16776139909196366727u, 12110095866223762091u,         140420497130u },\r\n  {  6246513436385199720u,  7756802952949470774u,         194159475340u },\r\n  {  2926026498821554288u,  2941800790804618758u,          81634453442u },\r\n  { 15725499391028340982u, 11703600274199927521u,          89043733329u },\r\n  {  8576577277771450827u,   806737539257940345u,         226790330713u },\r\n  { 15523351176022259335u, 14579028397110132022u,          52772375266u },\r\n  {  4775158829429176134u, 14247808875344366933u,         198526563380u },\r\n  { 10141817222123532462u,  9713379923695279512u,         244121779142u },\r\n  { 12847658900242624586u,  2246428675703313876u,          52192434164u },\r\n  { 13708197964460514655u,  3549783776592680619u,          76685488436u },\r\n  {  1951540006613246932u, 12645029747929213032u,          12882486860u },\r\n  {  9979297327280092199u, 16279009267476580505u,          88018613516u },\r\n  { 15381307706282553684u,   343358782242907185u,         177546278232u },\r\n  { 10037428657543061177u, 10077054739085890320u,          77570654385u },\r\n  {  2584877324547208668u, 10526715404712173585u,         133620094029u },\r\n  {  1126624732730703576u, 11438715865125144242u,         158273268613u },\r\n  {  1501064139624981020u,  5040916178827294800u,         241902260126u },\r\n  {  5219661484955306109u, 16643761637275849507u,          46263056881u },\r\n  {  5336997298570282212u,  4852542977279030385u,         106427358510u },\r\n  { 12191131175733833362u,  7883373066544387128u,         174905258090u },\r\n  {  3707068178994436536u, 16699064314768500977u,         145368946606u },\r\n  {  5045484691732942022u,  6805863634444817213u,         185122869393u },\r\n  { 14847900542908711232u,  2266540253968903499u,          31488807865u },\r\n  {  9097257915916965135u,  9016913589137908809u,                   31u },\r\n  {  2472027983230314217u,         580865979874u,                    0u },\r\n  { 15974509111133272205u,                  580u,                    0u },\r\n  {                    1u,                    0u,         177631789056u },\r\n  { 12099486841948187399u, 11654451024602552033u,         236287260081u },\r\n  {  5319910566029976328u,  5299013208454526792u,          13808736236u },\r\n  { 11549214421017285864u, 14918550373926182539u,          74337487885u },\r\n  {  1998791413186046700u,  6225552657491071053u,         190560788042u },\r\n  { 17075171930090011210u, 10344713496596235784u,          15703235518u },\r\n  { 15158296003813501474u, 12972405634433280208u,         165699954703u },\r\n  {  1360083178079384115u, 12911885282402784944u,         211375909797u },\r\n  {  6167980558592741158u,  6934311832970995867u,         107540785363u },\r\n  {  3630180428124865653u,  9975729197003430460u,          50107490923u },\r\n  {  2276550099763657677u,  1982857556803548934u,          83113610034u },\r\n  {   407006713016100655u,  2095735223386298222u,         186385484371u },\r\n  { 14242579061653496002u,  7110931538347639364u,         204857722298u },\r\n  { 17944493332678643704u, 15822183724630969534u,          44917884620u },\r\n  {   987185901870869452u, 16931982690156327500u,          67365379884u },\r\n  {  5578665155415167745u,  6740069226761666109u,         124170154307u },\r\n  {  4849210377429577536u,  3138792961008474901u,         234658901884u },\r\n  { 10811995403388891862u, 12154594426971851389u,         195855442410u },\r\n  {  7051931074990177294u, 15780127219221910901u,         216890213571u },\r\n  {  2030832259446664275u, 16421541930960194380u,          22405811160u },\r\n  {  6069512651054767896u,  7485894627196740575u,         190482321942u },\r\n  { 10608701253763958799u,  8897269432694476706u,         244931862206u },\r\n  { 15700053443426906717u, 17189823634941678804u,         250519635444u },\r\n  { 17759719234725541222u,  9585582064286255215u,          87695812346u },\r\n  { 15187321568916405210u, 12835472279575022096u,         103367328599u },\r\n  { 11040156458113129594u,  6776016669542754607u,         190994214247u },\r\n  {  2800727824598008497u, 18340015775620871026u,         115284830142u },\r\n  {  2997236166375604479u,  5254188752292365829u,         116368563827u },\r\n  {  6260091886451512841u,  6798802596750151182u,          34512248692u },\r\n  { 17573059315228347474u,  9449320530215271999u,              2063650u },\r\n  {  7519453664590169251u,    38067632857031246u,                    0u },\r\n  { 15809436065653866529u,             38067632u,                    0u },\r\n  {                    1u,                    0u,         188927574016u },\r\n  {   228921437623588922u, 17110720482574968810u,         137876709820u },\r\n  {  2195862230003073884u, 16172441693558688212u,           9337981321u },\r\n  {   960207412233973688u,  6234654946353717319u,         101606084361u },\r\n  {  2464387149230492479u, 11180283100679445437u,         143805142629u },\r\n  {  3631866936444955213u, 14852260031176961271u,           7242944399u },\r\n  {  1578304441149380227u,  4481533167346438749u,          48231461895u },\r\n  { 18190538519673445181u,  4269718344362365663u,          59624502064u },\r\n  {  1271000736479934749u, 11520029752381101465u,         112909574203u },\r\n  { 18292963032817745634u, 16778682550309368416u,         132525165168u },\r\n  { 17168014021925537455u,  9687587467301363607u,          21547195268u },\r\n  { 18046757712870378949u, 10093971076828497317u,         175103745301u },\r\n  { 14857998893911743220u,  1913763026490934695u,         147688546991u },\r\n  { 11933607369968684575u, 12701450127613556999u,         250486512531u },\r\n  {  3483798509902859162u,  8974572160711134643u,         137536137978u },\r\n  {  7378828438829845831u,  9890000077336694123u,         143232687497u },\r\n  { 15791137430347699565u,  4292326716201059147u,         173793880975u },\r\n  { 17044141236829932641u, 14644519175104337419u,         254273824941u },\r\n  {  9075651910862456484u,  5051178622270136797u,         229036645118u },\r\n  { 17811207355884564095u,   675983118348065838u,         227240240101u },\r\n  {  4438638126207305937u,  4431647660065117243u,         121450817507u },\r\n  { 12507972635512950185u,  8316115180008411961u,         142521564025u },\r\n  { 14658269128098109408u,  9621158095544965601u,           6828519054u },\r\n  {  3642436268910286111u, 15283478958951102071u,          32757941510u },\r\n  {  3783099432964819561u, 13981553073094447812u,           9247109664u },\r\n  {  9497579866027539638u,  4558368743929911606u,         132824915465u },\r\n  {  3395179445046271361u, 15217004469858477790u,         234628251268u },\r\n  {  5938502732309497276u, 11589190369996515736u,          90198984938u },\r\n  {  5793671185917606255u,  3670624237398152928u,          34730303066u },\r\n  {   889272970253526588u, 13471713758418039776u,         135243399970u },\r\n  {  8594177504370135501u,  4489936967610296410u,                  135u },\r\n  {  7374354721120724712u,        2494800386918u,                    0u },\r\n  { 14764532643665507567u,                 2494u,                    0u },\r\n  {                    1u,                    0u,         117490712576u },\r\n  {  5392404173658087695u,  9052049303222747949u,         112054824309u },\r\n  {  4976586473237854316u,  1011330006193020537u,         133943910512u },\r\n  {  6308932742419013569u, 17412075644359478611u,          40344704645u },\r\n  {  4831846642430703059u,  6358678384745980467u,          29827373864u },\r\n  { 18139507855949846901u, 15262353928842850918u,          49604185629u },\r\n  {  4865833876326628410u, 11145257686438581735u,          65086766641u },\r\n  { 14296661839130179261u,  1600562031807691889u,         223367281473u },\r\n  {  9254773150378118248u,  6775147337046626723u,         217855008735u },\r\n  { 12174712433727875143u, 15772127322106297821u,         113224509657u },\r\n  {   705653145340915199u,  4141472200527441473u,          20989118065u },\r\n  { 17763928858962481812u, 18246007807879281266u,         143052082196u },\r\n  {  3982836567612046296u,   960746958654787122u,          68615608975u },\r\n  { 12730849277561967739u, 11355981212264408476u,         140085276740u },\r\n  { 17314488764367235908u,  1573078209576251480u,          64338558092u },\r\n  { 15951418930590301119u,  6245294478780491366u,         145407838528u },\r\n  {  7193356087283467261u,  7523292955659721509u,          59783592849u },\r\n  { 17592945625696089446u, 14454736751015226504u,          25391385403u },\r\n  {  3554461664875361428u,  7219786377781411315u,          97574471193u },\r\n  {  2213779057785318208u, 10597123082209392430u,         128375261537u },\r\n  {  3880940796082421148u,  6922353544343010713u,         104776154496u },\r\n  {  4528237545358141043u, 14317523356293377429u,         133219971944u },\r\n  { 11681196539088147363u,  4057766168681892716u,          25824757125u },\r\n  {  9835005502912643017u, 15214083611901244044u,           8454853657u },\r\n  {  4964088126040986696u,  8390569016883950720u,          66578989576u },\r\n  {  3355564873147047622u, 10680472538208175054u,          45659930434u },\r\n  {  1853093467828272927u, 12173567833130544926u,         213075153709u },\r\n  { 14755341584803008677u,  1386341248286610025u,         240676937941u },\r\n  {  4701571132542556621u, 12487300952797237351u,         245141746416u },\r\n  {  6128849686644853851u,  2614759871804869719u,          79460481781u },\r\n  { 12026867901170202094u,  8494389567327729476u,              8863311u },\r\n  { 17909760324981426303u,   163499238157084246u,                    0u },\r\n  {  2897692901883393664u,            163499238u,                    0u },\r\n  {                    1u,                    0u,         159339380736u },\r\n  { 12323704802554838154u,  6260469580539185877u,           8965946783u },\r\n  {  7135886931147821732u, 17818573101084525840u,         164119318024u },\r\n  { 15341283120292884947u,  2201029069927307149u,          62563676580u },\r\n  {  3092789040392634166u, 10397997613804897038u,         206773573694u },\r\n  {  8811761390822097865u, 14269915965770103740u,         171909436366u },\r\n  { 16870860798610218169u, 16776139909196366726u,          54338624171u },\r\n  { 17452041453591904833u,  6246513436385199719u,           6158620214u },\r\n  { 10314783684009874908u,  2926026498821554287u,         225852481030u },\r\n  {  4932636630789274903u, 15725499391028340981u,         121464937185u },\r\n  { 18143884346082124480u,  8576577277771450826u,          54841522553u },\r\n  {  2823209155405527322u, 15523351176022259334u,          85258861878u },\r\n  { 16195396106620226251u,  4775158829429176133u,         152549789013u },\r\n  {  1150544491807648944u, 10141817222123532461u,         212696472984u },\r\n  {  7767455475523884824u, 12847658900242624585u,         171743122900u },\r\n  { 15204378045683991808u, 13708197964460514654u,         104105793195u },\r\n  { 17239732561718805622u,  1951540006613246931u,         153540978792u },\r\n  { 12886430624522800062u,  9979297327280092198u,          49833822361u },\r\n  { 18162250541178258136u, 15381307706282553683u,          16544130097u },\r\n  { 17028935366700158084u, 10037428657543061176u,          17140126480u },\r\n  { 16075467823964198637u,  2584877324547208667u,         178061074449u },\r\n  {  9803858825574498304u,  1126624732730703575u,          80081372850u },\r\n  { 17464070808143041817u,  1501064139624981019u,          35282958416u },\r\n  { 17682703471239266776u,  5219661484955306108u,         113289319203u },\r\n  { 18147688354161351336u,  5336997298570282211u,          56660882545u },\r\n  {  6663423873348080051u, 12191131175733833361u,         241200960568u },\r\n  {  9417270363716235133u,  3707068178994436535u,          61273516273u },\r\n  {  9295013721571344179u,  5045484691732942021u,          75804906301u },\r\n  {  6199479138350037783u, 14847900542908711231u,          73493163339u },\r\n  {   887603005365085688u,  9097257915916965134u,         226134008905u },\r\n  {   333989628642975696u,  2472027983230314216u,          68865979874u },\r\n  {  4620735991403939439u, 15974509111133272204u,                  580u },\r\n  { 12418523063962801201u,       10715086071862u,                    0u },\r\n  {  1587745622680169419u,                10715u,                    0u },\r\n  {                    1u,                    0u,         225655914496u },\r\n  { 10968905082284365638u, 12099486841948187398u,          72288392929u },\r\n  { 14076907092801977812u,  5319910566029976327u,         139626084168u },\r\n  {  3438322122816124202u, 11549214421017285863u,          77108354699u },\r\n  { 14645413324829073676u,  1998791413186046699u,           8925646925u },\r\n  { 12271281439492289999u, 17075171930090011209u,         208821732872u },\r\n  {  6233751789862708246u, 15158296003813501473u,         176073730256u },\r\n  {  1962644459455827991u,  1360083178079384114u,         155334366896u },\r\n  {  8726934184642952500u,  6167980558592741157u,          60196792475u },\r\n  {  4531087719737475147u,  3630180428124865652u,           6123412028u },\r\n  {   481513520412720775u,  2276550099763657676u,         110022063878u },\r\n  {   992149349835802669u,   407006713016100654u,          68772091758u },\r\n  { 11165474436676191361u, 14242579061653496001u,         190972772932u },\r\n  { 10240785855143707184u, 17944493332678643703u,          76053515454u },\r\n  { 10059329918238932466u,   987185901870869451u,          61302420044u },\r\n  { 14791716450947031886u,  5578665155415167744u,          21262876221u },\r\n  { 15378882314737417403u,  4849210377429577535u,         125586119445u },\r\n  { 14726970229242271128u, 10811995403388891861u,         117382285949u },\r\n  {  5090110549507128156u,  7051931074990177293u,          76110091637u },\r\n  { 17185220781106503841u,  2030832259446664274u,         223329028940u },\r\n  {  9858517691519529306u,  6069512651054767895u,         162575098847u },\r\n  {  5595905546638020703u, 10608701253763958798u,         212851101602u },\r\n  { 15555173226968030256u, 15700053443426906716u,         111962756308u },\r\n  { 10745236628845355771u, 17759719234725541221u,          16823306351u },\r\n  {  9973314042399760760u, 15187321568916405209u,          47598488080u },\r\n  {  4374506813558796576u, 11040156458113129593u,         114151827759u },\r\n  { 15960826480426749933u,  2800727824598008496u,           5162480498u },\r\n  {  9636454862798615738u,  2997236166375604478u,          14339360261u },\r\n  { 17973331528911319269u,  6260091886451512840u,          63952637454u },\r\n  {  7366495200039369602u, 17573059315228347473u,          78407630399u },\r\n  { 10505831326526933399u,  7519453664590169250u,         176857031246u },\r\n  {  2803218632575724145u, 15809436065653866528u,             38067632u },\r\n  {  8425731874431741636u,   702223880805592151u,                    0u },\r\n  { 14860552245711912111u,            702223880u,                    0u },\r\n  {                    1u,                    0u,         234012409856u },\r\n  {  6993664200669526994u,   228921437623588921u,         212119037930u },\r\n  {  4065363582031999356u,  2195862230003073883u,          71052052948u },\r\n  {  6899780515342669867u,   960207412233973687u,         189133594695u },\r\n  { 17713500890201844939u,  2464387149230492478u,         247196883901u },\r\n  {  6445781125105107086u,  3631866936444955212u,          93085560055u },\r\n  { 13563044070717478571u,  1578304441149380226u,         223986111069u },\r\n  { 13167612994149348885u, 18190538519673445180u,         153068901087u },\r\n  {  5505463469596727288u,  1271000736479934748u,          96991663513u },\r\n  { 12125446212518819372u, 18292963032817745633u,         151930679904u },\r\n  { 12537707724735421794u, 17168014021925537454u,         165978316695u },\r\n  { 15173675086703777069u, 18046757712870378948u,         167805453733u },\r\n  { 13535510174093048476u, 14857998893911743219u,           7646922151u },\r\n  { 10698912997087096629u, 11933607369968684574u,         179188857095u },\r\n  { 16952559548431933861u,  3483798509902859161u,         107400007091u },\r\n  { 13528255827744249993u,  7378828438829845830u,          75856039275u },\r\n  { 14122167436324771955u, 15791137430347699564u,          11923964747u },\r\n  { 13071007137740038297u, 17044141236829932640u,         221491992075u },\r\n  { 13011887609328904025u,  9075651910862456483u,          46965547485u },\r\n  {  3116434332871336590u, 17811207355884564094u,          59240619054u },\r\n  {  9050993820536772770u,  4438638126207305936u,          57678058555u },\r\n  { 11993719123438634238u, 12507972635512950184u,         225794626361u },\r\n  {  1414857165879849301u, 14658269128098109407u,         119197456865u },\r\n  { 13819438220812375094u,  3642436268910286110u,         196205082231u },\r\n  {  6073063033888264440u,  3783099432964819560u,          54514864836u },\r\n  {  6828883869150720294u,  9497579866027539637u,         222184053046u },\r\n  {  4548265621068768345u,  3395179445046271360u,         152321926878u },\r\n  { 10422524923581371874u,  5938502732309497275u,         224314075544u },\r\n  {  1858996082510682634u,  5793671185917606254u,         224048207584u },\r\n  {   890276727450878316u,   889272970253526587u,          90465891296u },\r\n  {  3886008133802710905u,  8594177504370135500u,         102399764570u },\r\n  {   612074409233016757u,  7374354721120724711u,         190800386918u },\r\n  {  3927020336901729264u, 14764532643665507566u,                 2494u },\r\n  {  5298603480094474942u,       46020944252475u,                    0u },\r\n  { 17418383752590430025u,                46020u,                    0u },\r\n  {                    1u,                    0u,          45292322816u },\r\n  {  8973799690601597929u,  5392404173658087694u,         121269781293u },\r\n  {  1343055462055792431u,  4976586473237854315u,          83342007929u },\r\n  { 17425118728683169659u,  6308932742419013568u,          51261934931u },\r\n  { 18389781726026675967u,  4831846642430703058u,         102983344691u },\r\n  {   272526939565961561u, 18139507855949846900u,         231263777382u },\r\n  { 11293026845930963228u,  4865833876326628409u,         113775023591u },\r\n  { 13997416438903902597u, 14296661839130179260u,         163501702257u },\r\n  {  6186605805999441184u,  9254773150378118247u,         221659992483u },\r\n  {  4401776373281836138u, 12174712433727875142u,          65038253533u },\r\n  { 16338917089754547008u,   705653145340915198u,         114962984513u },\r\n  { 13337700757935003056u, 17763928858962481811u,          50215910002u },\r\n  { 14612496890816348693u,  3982836567612046295u,         156690140722u },\r\n  {  3219935399907691719u, 12730849277561967738u,          88938620316u },\r\n  { 10887238730052330387u, 17314488764367235907u,         102864728152u },\r\n  {   360256418697768294u, 15951418930590301118u,          37389952614u },\r\n  {   321440824631118565u,  7193356087283467260u,         136953715493u },\r\n  { 10069228080701402580u, 17592945625696089445u,         243192687752u },\r\n  {  9428069607611622975u,  3554461664875361427u,          46120009203u },\r\n  { 14736799017468812344u,  2213779057785318207u,         153210386222u },\r\n  { 10875332567307979280u,  3880940796082421147u,         149245476249u },\r\n  {  4611492910339012807u,  4528237545358141042u,         108633238933u },\r\n  { 10743508637597314786u, 11681196539088147362u,         140533156716u },\r\n  {  9356196315668016028u,  9835005502912643016u,         128269103756u },\r\n  { 15755598617722189347u,  4964088126040986695u,         206181905536u },\r\n  {  1275276394173375542u,  3355564873147047621u,          30100456398u },\r\n  { 12644999363867216251u,  1853093467828272926u,         105799888670u },\r\n  {  4553830511509832021u, 14755341584803008676u,         103254872681u },\r\n  {  8869400642218174412u,  4701571132542556620u,          87332245607u },\r\n  { 16570849151159054040u,  6128849686644853850u,          68651977815u },\r\n  { 16127119334101797673u, 12026867901170202093u,          86970890052u },\r\n  {  9686867250420930550u, 17909760324981426302u,         230157084246u },\r\n  { 10678226869774428035u,  2897692901883393663u,            163499238u },\r\n  {  7767227962910162068u,  3016028602530220424u,                    0u },\r\n  {  9780840471948993674u,           3016028602u,                    0u },\r\n  {                    1u,                    0u,         213668069376u },\r\n  {  6288709332106746357u, 12323704802554838153u,          16386837205u },\r\n  {  9066785620141948673u,  7135886931147821731u,         141831652624u },\r\n  {  8442375916704414909u, 15341283120292884946u,          14167660429u },\r\n  { 11604629218100425803u,  3092789040392634165u,         188477686542u },\r\n  {  3877248044010875762u,  8811761390822097864u,         134914571196u },\r\n  { 16435137704395217283u, 16870860798610218168u,         103946077062u },\r\n  { 14994442577577813271u, 17452041453591904832u,         111559165543u },\r\n  {  4410105917142436089u, 10314783684009874907u,         245267398767u },\r\n  {  4632574728444936970u,  4932636630789274902u,         202983581941u },\r\n  {  9117147535650050359u, 18143884346082124479u,         134153046474u },\r\n  {   588939301256904809u,  2823209155405527321u,          69877954182u },\r\n  {   324393982565305683u, 16195396106620226250u,         173062371141u },\r\n  {  9380909186923521175u,  1150544491807648943u,          73421074605u },\r\n  {  4463385697777230217u,  7767455475523884823u,          94824230985u },\r\n  { 16378985502426333808u, 15204378045683991807u,         211934567774u },\r\n  { 18210894922387834354u, 17239732561718805621u,          38698574803u },\r\n  {  1555748035329493205u, 12886430624522800061u,          83984577574u },\r\n  {  4277055533891898507u, 18162250541178258135u,         184923140435u },\r\n  { 11574429772510874408u, 17028935366700158083u,         219871452856u },\r\n  { 17391099253493808815u, 16075467823964198636u,         215531468251u },\r\n  {  5791212393959129882u,  9803858825574498303u,          27946729175u },\r\n  { 11254268231455680880u, 17464070808143041816u,         124958581275u },\r\n  { 16355477587312235322u, 17682703471239266775u,         227983788156u },\r\n  {  2411485149249320633u, 18147688354161351335u,         145361224931u },\r\n  { 12763114642070638360u,  6663423873348080050u,         183510511249u },\r\n  {  1147543073987366419u,  9417270363716235132u,         197503883703u },\r\n  {  8410777835225272692u,  9295013721571344178u,          63336074437u },\r\n  {  8134725822306818018u,  6199479138350037782u,          14048117055u },\r\n  {  8899607004752328377u,   887603005365085687u,         232018105614u },\r\n  {   690976506652396830u,   333989628642975695u,         140250490600u },\r\n  { 12281570945595192074u,  4620735991403939438u,          54673209484u },\r\n  { 12592957291365552899u, 12418523063962801200u,         219086071862u },\r\n  { 13595807339013970272u,  1587745622680169418u,                10715u },\r\n  {  9698096389749839992u,      197658450495420u,                    0u },\r\n  {  8310173728816391804u,               197658u,                    0u },\r\n};\r\n\r\nextern const uint64_t __POW10_SPLIT_2[3133][3] = {\r\n  {                    0u,                    0u,              3906250u },\r\n  {                    0u,                    0u,         202000000000u },\r\n  {                    0u, 11153727427136454656u,                   59u },\r\n  {                    0u,  7205759403792793600u,          59604644775u },\r\n  {                    0u,                    0u,         167390625000u },\r\n  {                    0u,                    0u,         232000000000u },\r\n  {                    0u,    16777216000000000u,                    0u },\r\n  {                    0u, 12945425605062557696u,               909494u },\r\n  {                    0u,  4388757836872548352u,         182701772928u },\r\n  {                    0u,  1152921504606846976u,         128237915039u },\r\n  {                    0u,                    0u,         159062500000u },\r\n  {                    0u,                    0u,         160000000000u },\r\n  {                    0u,         256000000000u,                    0u },\r\n  {                    0u, 16192327041775828992u,                   13u },\r\n  {                    0u, 15024075324038053888u,          13877787807u },\r\n  {                    0u,  5449091666327633920u,         159814456755u },\r\n  {                    0u,  2494994193563254784u,         179295395851u },\r\n  {                    0u,  4611686018427387904u,          11135253906u },\r\n  {                    0u,                    0u,         146250000000u },\r\n  {                    0u,                    0u,         128000000000u },\r\n  {                    0u,              3906250u,                    0u },\r\n  {                    0u,     3906250000000000u,                    0u },\r\n  {                    0u,  4368439412768899072u,               211758u },\r\n  {                    0u,  1563676642168012800u,          46236813575u },\r\n  {                    0u, 11532349341402398720u,           7084767080u },\r\n  {                    0u,  9048364970084925440u,         104625169910u },\r\n  {                    0u, 16609275425742389248u,         246490512847u },\r\n  {                    0u,                    0u,         207900390625u },\r\n  {                    0u,                    0u,         225000000000u },\r\n  { 11153727427136454656u,                   59u,                    0u },\r\n  {  7205759403792793600u,          59604644775u,                    0u },\r\n  {                    0u,  4264412554261970152u,                    3u },\r\n  {                    0u, 14485570586272534528u,           3231174267u },\r\n  {                    0u, 17827675094632103936u,         123785264354u },\r\n  {                    0u,  7347197909193981952u,         226966440203u },\r\n  {                    0u, 13677404030777688064u,          11398292396u },\r\n  {                    0u,  3810326759732150272u,         172741453558u },\r\n  {                    0u,  9943947977234055168u,         246206558227u },\r\n  {                    0u,                    0u,          19539062500u },\r\n  {                    0u,                    0u,         228000000000u },\r\n  { 12945425605062557696u,               909494u,                    0u },\r\n  {  4388757836872548352u,      909494701772928u,                    0u },\r\n  {  1152921504606846976u, 14878706826214591391u,                49303u },\r\n  {                    0u,  4387341015746028192u,         151806576313u },\r\n  {                    0u,   651726680428265472u,         185237838233u },\r\n  {                    0u,  2570638187944738816u,         153035330174u },\r\n  {                    0u,  7419175577111756800u,         126139354575u },\r\n  {                    0u, 17299322326264840192u,         207402194313u },\r\n  {                    0u,  7990511638862102528u,         137937798142u },\r\n  {                    0u, 16717361816799281152u,         254433166503u },\r\n  {                    0u,                    0u,         167906250000u },\r\n  {                    0u,                    0u,          16000000000u },\r\n  { 16192327041775828992u,                   13u,                    0u },\r\n  { 15024075324038053888u,          13877787807u,                    0u },\r\n  {  5449091666327633920u, 13877787807814456755u,                    0u },\r\n  {  2494994193563254784u,  9707857417284919307u,            752316384u },\r\n  {  4611686018427387904u,  1844515466944871826u,         224526264005u },\r\n  {                    0u, 15167599819856275072u,         197099991383u },\r\n  {                    0u, 14830185305589481472u,          87822237233u },\r\n  {                    0u,  6163721531743535104u,          49803945956u },\r\n  {                    0u, 14122847407012052992u,         228334136013u },\r\n  {                    0u,   335491783960035328u,         205765601092u },\r\n  {                    0u,   941252322120433664u,          68018187046u },\r\n  {                    0u, 11529215046068469760u,          38051025390u },\r\n  {                    0u,                    0u,         238625000000u },\r\n  {                    0u,                    0u,          64000000000u },\r\n  {  4368439412768899072u,               211758u,                    0u },\r\n  {  1563676642168012800u,      211758236813575u,                    0u },\r\n  { 11532349341402398720u,  8061591463141767016u,                11479u },\r\n  {  9048364970084925440u, 16628725344207857142u,         215437019748u },\r\n  { 16609275425742389248u,  3555541870038531535u,         100901445007u },\r\n  {                    0u, 18316647450161853665u,         143192746310u },\r\n  {                    0u, 16709574568378075648u,          70992947447u },\r\n  {                    0u,  7696022835795591168u,         247905827852u },\r\n  {                    0u, 16664449640376041472u,          12417202233u },\r\n  {                    0u,  3109186955116544000u,          57903381625u },\r\n  {                    0u, 10515518101817131008u,         121168549362u },\r\n  {                    0u,  9961962375743537152u,         242570047378u },\r\n  {                    0u,  9223372036854775808u,         146540039062u },\r\n  {                    0u,                    0u,         150500000000u },\r\n  { 14485570586272534528u,           3231174267u,                    0u },\r\n  { 17827675094632103936u,  3231174267785264354u,                    0u },\r\n  {  7347197909193981952u,   748977172262750475u,            175162308u },\r\n  { 13677404030777688064u, 15965033457315095468u,         196040602133u },\r\n  {  3810326759732150272u, 16809402149066729206u,          21865466197u },\r\n  {  9943947977234055168u,  7563769067065700371u,          85911239516u },\r\n  {                    0u, 13550322810840051428u,          92410032742u },\r\n  {                    0u,  8663209637545764864u,         102734564471u },\r\n  {                    0u,  8969247575312957440u,         119469633535u },\r\n  {                    0u,  6193172891660451840u,         255486223885u },\r\n  {                    0u,  3427954273864908800u,          13335732575u },\r\n  {                    0u, 10058367555266936832u,          95185829773u },\r\n  {                    0u, 13907115649320091648u,         141545265197u },\r\n  {                    0u,                    0u,          45753906250u },\r\n  {                    0u,                    0u,          74000000000u },\r\n  { 14878706826214591391u,                49303u,                    0u },\r\n  {  4387341015746028192u,       49303806576313u,                    0u },\r\n  {   651726680428265472u, 14106411361315920281u,                 2672u },\r\n  {  2570638187944738816u,  3609034283485221502u,         112764710092u },\r\n  {  7419175577111756800u,  9896072247338192335u,         204195646140u },\r\n  { 17299322326264840192u,  8889095178479228297u,         188536467151u },\r\n  {  7990511638862102528u,  3631796911038383102u,         207481878815u },\r\n  { 16717361816799281152u,   898318840772166823u,          31196880105u },\r\n  {                    0u, 17293677953982795024u,         233048697961u },\r\n  {                    0u,  7353628266884669440u,         105937492160u },\r\n  {                    0u,  2404693032470315008u,         192398640987u },\r\n  {                    0u,  9191155893041889280u,          91130358670u },\r\n  {                    0u,  6353946855033798656u,         142498253559u },\r\n  {                    0u,  3767824038248841216u,         247344448149u },\r\n  {                    0u,  7205759403792793600u,         149204254150u },\r\n  {                    0u,                    0u,         198390625000u },\r\n  {                    0u,                    0u,         232000000000u },\r\n  {  9707857417284919307u,            752316384u,                    0u },\r\n  {  1844515466944871826u,   752316384526264005u,                    0u },\r\n  { 15167599819856275072u, 17063068157692817751u,             40783152u },\r\n  { 14830185305589481472u,  5385330256507239985u,          48924990778u },\r\n  {  6163721531743535104u,  3373050282752075748u,          58291939338u },\r\n  { 14122847407012052992u,  4116064001262906061u,          10182853422u },\r\n  {   335491783960035328u, 11306582046748043076u,          46223132276u },\r\n  {   941252322120433664u, 17035410946089626406u,         116612931040u },\r\n  { 11529215046068469760u, 15618595715183448558u,         224923491477u },\r\n  {                    0u,  5141740092277295680u,         149846685770u },\r\n  {                    0u, 16973644291514990592u,          74278734288u },\r\n  {                    0u, 14625255268443750400u,         208920143100u },\r\n  {                    0u, 14021170507320131584u,         252792836676u },\r\n  {                    0u,  4451355232865091584u,          68760089176u },\r\n  {                    0u, 12891553933348044800u,          88241308450u },\r\n  {                    0u,  1152921504606846976u,          34698852539u },\r\n  {                    0u,                    0u,         187062500000u },\r\n  {                    0u,                    0u,         160000000000u },\r\n  {  8061591463141767016u,                11479u,                    0u },\r\n  { 16628725344207857142u,       11479437019748u,                    0u },\r\n  {  3555541870038531535u,  5562205901560339855u,                  622u },\r\n  { 18316647450161853665u,  2106077949367544134u,         110301527786u },\r\n  { 16709574568378075648u,  7496855998374373623u,         234114170714u },\r\n  {  7696022835795591168u,   229183437194837004u,          90406405378u },\r\n  { 16664449640376041472u,   465169186276472889u,           2012424059u },\r\n  {  3109186955116544000u,  2152980561625316473u,         123025216872u },\r\n  { 10515518101817131008u,  2059790725449340402u,         104116713310u },\r\n  {  9961962375743537152u, 17891190926410198930u,          94111661478u },\r\n  {  9223372036854775808u,  9930696175609809814u,         166969883403u },\r\n  {                    0u,  7276914261609005312u,          11538344118u },\r\n  {                    0u, 10539762974036983808u,         182394482312u },\r\n  {                    0u, 12851089458992250880u,         136571361695u },\r\n  {                    0u,  9449311677678878720u,         159696658955u },\r\n  {                    0u,  8699564697382289408u,          11512248212u },\r\n  {                    0u,  4224376450473525248u,         148471604347u },\r\n  {                    0u,  4611686018427387904u,         123229003906u },\r\n  {                    0u,                    0u,         130250000000u },\r\n  {                    0u,                    0u,         128000000000u },\r\n  {   748977172262750475u,            175162308u,                    0u },\r\n  { 15965033457315095468u,   175162308040602133u,                    0u },\r\n  { 16809402149066729206u, 13756840147955779925u,              9495567u },\r\n  {  7563769067065700371u, 13788447602092505948u,          15745759798u },\r\n  { 13550322810840051428u,  4972540435632173670u,          54747473242u },\r\n  {  8663209637545764864u,  2844874687533091959u,          90269561957u },\r\n  {  8969247575312957440u, 15377573779532804095u,         101154220965u },\r\n  {  6193172891660451840u, 17824715805091194381u,         165833619944u },\r\n  {  3427954273864908800u, 18277569135638159711u,         232966279779u },\r\n  { 10058367555266936832u,  4254645803379752845u,          99990829008u },\r\n  { 13907115649320091648u,  2933643244178200621u,         208230644811u },\r\n  {                    0u, 17188148801879487562u,          75159033118u },\r\n  {                    0u, 11069762501163246592u,          30931771413u },\r\n  {                    0u, 11676570643941818368u,          21600093027u },\r\n  {                    0u, 17840016768744030208u,          99632988162u },\r\n  {                    0u, 16463817321652158464u,           2967109246u },\r\n  {                    0u,  6954191143357644800u,         126892505325u },\r\n  {                    0u,  5080060379673919488u,         237376987457u },\r\n  {                    0u,                    0u,          65275390625u },\r\n  {                    0u,                    0u,         161000000000u },\r\n  { 14106411361315920281u,                 2672u,                    0u },\r\n  {  3609034283485221502u,        2672764710092u,                    0u },\r\n  {  9896072247338192335u, 16433563478020213436u,                  144u },\r\n  {  8889095178479228297u,  4194750497955655375u,         144890865261u },\r\n  {  3631796911038383102u,  2691539602252904735u,         109227397880u },\r\n  {   898318840772166823u,  3775467271962795241u,         248145908654u },\r\n  { 17293677953982795024u, 16980212613224918121u,         174204668490u },\r\n  {  7353628266884669440u,  4172857038337333440u,          74920499170u },\r\n  {  2404693032470315008u,  5936867627376461659u,         226226211033u },\r\n  {  9191155893041889280u, 17856837443266866062u,         217321838238u },\r\n  {  6353946855033798656u,  8956297047799810807u,         158968021097u },\r\n  {  3767824038248841216u, 15356974049716912789u,         105485521835u },\r\n  {  7205759403792793600u,  6923608913322982854u,         171832503231u },\r\n  {                    0u,  4855902993563955944u,         191375329591u },\r\n  {                    0u, 13835893222288330752u,          55263239028u },\r\n  {                    0u,  9114973913760137216u,         116750045274u },\r\n  {                    0u, 17937099003422310400u,          90494123725u },\r\n  {                    0u,  7007960010734960640u,         205972372085u },\r\n  {                    0u,  7683422439270776832u,         117379902273u },\r\n  {                    0u,   720575940379279360u,          65416519165u },\r\n  {                    0u,                    0u,         253039062500u },\r\n  {                    0u,                    0u,         228000000000u },\r\n  { 17063068157692817751u,             40783152u,                    0u },\r\n  {  5385330256507239985u,    40783152924990778u,                    0u },\r\n  {  3373050282752075748u,  2768933352715741194u,              2210859u },\r\n  {  4116064001262906061u, 15201941611824153390u,          43150104177u },\r\n  { 11306582046748043076u,  1418128541727000180u,         113824098906u },\r\n  { 17035410946089626406u,  5353350204565757408u,          90076876902u },\r\n  { 15618595715183448558u,  1721001680354286741u,         102290205696u },\r\n  {  5141740092277295680u,   637631411660453962u,             93295688u },\r\n  { 16973644291514990592u,  1630012588870568400u,          72034566068u },\r\n  { 14625255268443750400u,  9253063571656828156u,         180088363159u },\r\n  { 14021170507320131584u,  6029146854993203780u,         151501609581u },\r\n  {  4451355232865091584u, 16987401965352759896u,         109326840705u },\r\n  { 12891553933348044800u, 14499131620542087970u,         129920888905u },\r\n  {  1152921504606846976u,  1978417255298660539u,          73785999500u },\r\n  {                    0u,  5790079354402454176u,         140107250214u },\r\n  {                    0u, 13748918935842078720u,          38313880830u },\r\n  {                    0u, 18047438014740692992u,         254745330388u },\r\n  {                    0u,  3116889656839372800u,         212978353575u },\r\n  {                    0u, 15995952446606147584u,         167168966926u },\r\n  {                    0u, 12530140063251562496u,          14867142319u },\r\n  {                    0u, 16717361816799281152u,         175679260253u },\r\n  {                    0u,                    0u,          93906250000u },\r\n  {                    0u,                    0u,          16000000000u },\r\n  {  5562205901560339855u,                  622u,                    0u },\r\n  {  2106077949367544134u,         622301527786u,                    0u },\r\n  {  7496855998374373623u, 13558973353698967386u,                   33u },\r\n  {   229183437194837004u,  6228991722850501890u,          33735033418u },\r\n  {   465169186276472889u, 16886831391703377787u,          74337674317u },\r\n  {  2152980561625316473u,  1181713637872883048u,          77915436964u },\r\n  {  2059790725449340402u, 12393932434925221726u,         164064060824u },\r\n  { 17891190926410198930u, 10684799845419711910u,         152671876423u },\r\n  {  9930696175609809814u,  4590318792215640843u,          71579224160u },\r\n  {  7276914261609005312u,  6383712187366189238u,          96248841680u },\r\n  { 10539762974036983808u,  1904270214927675016u,         208346061731u },\r\n  { 12851089458992250880u,  3711506775113308575u,         163103230695u },\r\n  {  9449311677678878720u,  8091219444738793995u,         231201201185u },\r\n  {  8699564697382289408u,    39436684991068052u,          33438625885u },\r\n  {  4224376450473525248u, 18025182908196512891u,          93002137866u },\r\n  {  4611686018427387904u,  7853924592034603138u,          10977147123u },\r\n  {                    0u,  4815749283615688320u,         243425762105u },\r\n  {                    0u, 14242399906544287744u,          57261062291u },\r\n  {                    0u,    76242322576113664u,         147772082046u },\r\n  {                    0u, 10858088421377703936u,         126004133104u },\r\n  {                    0u, 14293835879041466368u,         240588618152u },\r\n  {                    0u, 12182236992037191680u,         168774870395u },\r\n  {                    0u, 11529215046068469760u,         123660400390u },\r\n  {                    0u,                    0u,           6625000000u },\r\n  {                    0u,                    0u,          64000000000u },\r\n  { 13756840147955779925u,              9495567u,                    0u },\r\n  { 13788447602092505948u,     9495567745759798u,                    0u },\r\n  {  4972540435632173670u, 14000097438505379162u,               514755u },\r\n  {  2844874687533091959u, 16451062686452429925u,         195758946802u },\r\n  { 15377573779532804095u,  4009347599785716645u,         242891813895u },\r\n  { 17824715805091194381u, 16544162347546196456u,           7217347168u },\r\n  { 18277569135638159711u, 17674258299745817187u,          96896860837u },\r\n  {  4254645803379752845u,  5215238411201214416u,         165958123462u },\r\n  {  2933643244178200621u, 14253990228345322571u,         198282718640u },\r\n  { 17188148801879487562u, 11214836553940194590u,         176772710358u },\r\n  { 11069762501163246592u, 14620711348380590101u,         214607957507u },\r\n  { 11676570643941818368u,  6638710787931587427u,           3792590350u },\r\n  { 17840016768744030208u, 17320000343692853250u,          14359885232u },\r\n  { 16463817321652158464u,    75147386268843646u,         176938919100u },\r\n  {  6954191143357644800u, 17938801582125480173u,         188004073747u },\r\n  {  5080060379673919488u,  6573358613626446145u,          19972464382u },\r\n  {                    0u,  8688505427903736481u,         254356342484u },\r\n  {                    0u,   539870168696556032u,         212471004823u },\r\n  {                    0u,  9002861336394465280u,         151029266420u },\r\n  {                    0u, 17989846818158018560u,         244488046090u },\r\n  {                    0u,  2700938287723315200u,          10975231550u },\r\n  {                    0u, 17800090499088908288u,          62146418157u },\r\n  {                    0u,  8809040871136690176u,         237964944839u },\r\n  {                    0u,  9223372036854775808u,         199477539062u },\r\n  {                    0u,                    0u,         246500000000u },\r\n  { 16433563478020213436u,                  144u,                    0u },\r\n  {  4194750497955655375u,         144890865261u,                    0u },\r\n  {  2691539602252904735u, 15763656745260536568u,                    7u },\r\n  {  3775467271962795241u,  8787336846248645550u,           7854549544u },\r\n  { 16980212613224918121u, 17584084447880694346u,          40476362484u },\r\n  {  4172857038337333440u, 18041672551129683938u,         244953235127u },\r\n  {  5936867627376461659u, 14025886302294509785u,         183978041028u },\r\n  { 17856837443266866062u, 18430498103283160734u,         196760344819u },\r\n  {  8956297047799810807u,  3292348826238025833u,         243999119304u },\r\n  { 15356974049716912789u,  9211721212658275243u,         200178478587u },\r\n  {  6923608913322982854u, 10233245872666307519u,         251499368407u },\r\n  {  4855902993563955944u,  6200995035623311671u,         215554745370u },\r\n  { 13835893222288330752u,  8480542380570450804u,          26336156614u },\r\n  {  9114973913760137216u, 11870363864499900506u,         198459731123u },\r\n  { 17937099003422310400u,  9301051379839581901u,         179643493714u },\r\n  {  7007960010734960640u, 11456694803569638005u,          82504211005u },\r\n  {  7683422439270776832u, 14327208890643983169u,          61621068669u },\r\n  {   720575940379279360u,  4510081789599866365u,         125776679550u },\r\n  {                    0u, 13255356976020303332u,         126244492023u },\r\n  {                    0u,  9658806854127314944u,         247718574341u },\r\n  {                    0u, 13708435528809971712u,           5523604968u },\r\n  {                    0u,  1580190652103131136u,         232743135779u },\r\n  {                    0u, 16557336970347413504u,          35085662306u },\r\n  {                    0u, 12751520132434493440u,          98897575035u },\r\n  {                    0u,  9295429630892703744u,         123691261291u },\r\n  {                    0u,                    0u,         107503906250u },\r\n  {                    0u,                    0u,         202000000000u },\r\n  {  2768933352715741194u,              2210859u,                    0u },\r\n  { 15201941611824153390u,     2210859150104177u,                    0u },\r\n  {  1418128541727000180u, 16872870088062921306u,               119850u },\r\n  {  5353350204565757408u,  5112979788807802982u,          42914680120u },\r\n  {  1721001680354286741u, 13742728082020150272u,          56277175189u },\r\n  {   637631411660453962u,  2217110934613627976u,         149744994782u },\r\n  {  1630012588870568400u, 11021433940188610484u,         222120189824u },\r\n  {  9253063571656828156u,  1713669895470733463u,         128597473131u },\r\n  {  6029146854993203780u,  3313382510572018285u,         107092898231u },\r\n  { 16987401965352759896u, 14976595232784069505u,         183179618825u },\r\n  { 14499131620542087970u,  7213172372862496841u,           9811882854u },\r\n  {  1978417255298660539u, 15836474542502248588u,         102391026857u },\r\n  {  5790079354402454176u,  3221099285878340134u,         169858497005u },\r\n  { 13748918935842078720u,  3265814602578095358u,         237174616142u },\r\n  { 18047438014740692992u,  6502528252282225364u,          78177040164u },\r\n  {  3116889656839372800u, 16392476834556790183u,          36352502762u },\r\n  { 15995952446606147584u, 15167629413417091342u,         234888637949u },\r\n  { 12530140063251562496u,  1366763272626280111u,         253822238838u },\r\n  { 16717361816799281152u,  8720523635169216093u,         118074092385u },\r\n  {                    0u,  9649171375767398672u,          97472740533u },\r\n  {                    0u,  7647980704001073152u,         181523082628u },\r\n  {                    0u, 13286434495608651776u,         132414597864u },\r\n  {                    0u,  4358271637167013888u,         232720259057u },\r\n  {                    0u, 15954987941890097152u,         241236262378u },\r\n  {                    0u,  7911135695429697536u,         234864921629u },\r\n  {                    0u,  7205759403792793600u,          29428863525u },\r\n  {                    0u,                    0u,          37390625000u },\r\n  {                    0u,                    0u,         232000000000u },\r\n  { 13558973353698967386u,                   33u,                    0u },\r\n  {  6228991722850501890u,          33735033418u,                    0u },\r\n  { 16886831391703377787u, 15288289344628122701u,                    1u },\r\n  {  1181713637872883048u,   952589339068938148u,           1828779826u },\r\n  { 12393932434925221726u, 10058155040190817688u,          50051639971u },\r\n  { 10684799845419711910u,  5322725640026584391u,         163545253677u },\r\n  {  4590318792215640843u,  2269982385930389600u,          45288545535u },\r\n  {  6383712187366189238u, 13216683679976310224u,         255123055991u },\r\n  {  1904270214927675016u, 17417440642083494819u,         119716477857u },\r\n  {  3711506775113308575u,  3029180749090900711u,         161944201349u },\r\n  {  8091219444738793995u,  8315443826261908513u,         133164212217u },\r\n  {    39436684991068052u,  1488962797247197277u,         249450781113u },\r\n  { 18025182908196512891u, 18009099634999034122u,         185080716834u },\r\n  {  7853924592034603138u,  8092455412807497971u,          34976275247u },\r\n  {  4815749283615688320u, 17808458047236758329u,          47438692886u },\r\n  { 14242399906544287744u,  3164591817527425171u,          22965398445u },\r\n  {    76242322576113664u,  3314036340472350590u,         173171552866u },\r\n  { 10858088421377703936u,    33234902404332784u,          98179654270u },\r\n  { 14293835879041466368u, 12349284717857274280u,         126001801667u },\r\n  { 12182236992037191680u, 18209607903013119355u,         195669456065u },\r\n  { 11529215046068469760u,  7891549145984268038u,         193987144822u },\r\n  {                    0u,  7703609897518594624u,         118427801736u },\r\n  {                    0u,  6336912652634587136u,         136417613529u },\r\n  {                    0u,  4461621834659397632u,         217343524723u },\r\n  {                    0u,  5484660635557953536u,         115241865004u },\r\n  {                    0u, 15142619273265938432u,          44297324048u },\r\n  {                    0u, 12170977992968765440u,          16820883035u },\r\n  {                    0u,  1152921504606846976u,          91659790039u },\r\n  {                    0u,                    0u,         215062500000u },\r\n  {                    0u,                    0u,         160000000000u },\r\n  { 14000097438505379162u,               514755u,                    0u },\r\n  { 16451062686452429925u,      514755758946802u,                    0u },\r\n  {  4009347599785716645u, 17812314011563521031u,                27904u },\r\n  { 16544162347546196456u,  7684138864490314336u,            965607477u },\r\n  { 17674258299745817187u,  9740522787420029605u,          53416558002u },\r\n  {  5215238411201214416u,  6701109407732989894u,         178528034798u },\r\n  { 14253990228345322571u, 16534886227502443952u,         238363267868u },\r\n  { 11214836553940194590u,  8908667306968317910u,          28896357978u },\r\n  { 14620711348380590101u,  7531472173477105155u,          90482939822u },\r\n  {  6638710787931587427u, 11527371604834801166u,         174408281924u },\r\n  { 17320000343692853250u, 15688593496691078576u,          68624900066u },\r\n  {    75147386268843646u, 11394944804253312188u,         226850480357u },\r\n  { 17938801582125480173u, 11182279880854372627u,         229617721195u },\r\n  {  6573358613626446145u,   150579373068361470u,         107606192607u },\r\n  {  8688505427903736481u,  3147220002440857300u,         223008162924u },\r\n  {   539870168696556032u,  3630514817795505815u,         108170611138u },\r\n  {  9002861336394465280u, 11708796588334233588u,         194196810602u },\r\n  { 17989846818158018560u, 16844495466426369546u,         106634735134u },\r\n  {  2700938287723315200u, 17636655472325475902u,          30913141928u },\r\n  { 17800090499088908288u, 17038926655686645229u,         168956085008u },\r\n  {  8809040871136690176u, 15602838456783529415u,          16923682064u },\r\n  {  9223372036854775808u, 10869815869248876790u,          16845831567u },\r\n  {                    0u, 18407124180939800832u,         143589253898u },\r\n  {                    0u,  5705018517251293184u,          10997852201u },\r\n  {                    0u,  9660452258743058432u,          41309269673u },\r\n  {                    0u,  5646292272224927744u,         169523694166u },\r\n  {                    0u,  7410409304047484928u,          86306086117u },\r\n  {                    0u,  5953758707383795712u,         229401719093u },\r\n  {                    0u,  4611686018427387904u,          53322753906u },\r\n  {                    0u,                    0u,         114250000000u },\r\n  {                    0u,                    0u,         128000000000u },\r\n  { 15763656745260536568u,                    7u,                    0u },\r\n  {  8787336846248645550u,           7854549544u,                    0u },\r\n  { 17584084447880694346u,  7854549544476362484u,                    0u },\r\n  { 18041672551129683938u,    15035424419724983u,            425795984u },\r\n  { 14025886302294509785u, 18280822466032836292u,         144000815071u },\r\n  { 18430498103283160734u, 11524250747302615283u,         223991005371u },\r\n  {  3292348826238025833u, 15212285943691810760u,         187624730884u },\r\n  {  9211721212658275243u,  7951804027551297019u,           4824659673u },\r\n  { 10233245872666307519u,  1706416229965221847u,         217431068160u },\r\n  {  6200995035623311671u,  3406023111930700826u,             92505009u },\r\n  {  8480542380570450804u, 16132696204133391302u,         177184640882u },\r\n  { 11870363864499900506u, 11593846688794356915u,         114874555213u },\r\n  {  9301051379839581901u,  6875759884161133906u,          77628503688u },\r\n  { 11456694803569638005u,  3593593325323835965u,         136372735690u },\r\n  { 14327208890643983169u,  9542049733257388925u,         202194809084u },\r\n  {  4510081789599866365u,  9926551925937787518u,         252517275552u },\r\n  { 13255356976020303332u,  3128491553219547895u,         160538119458u },\r\n  {  9658806854127314944u, 17158408656931354885u,          34169595866u },\r\n  { 13708435528809971712u,  2065169543154992616u,         218930159197u },\r\n  {  1580190652103131136u,  4832622393556232739u,          93111953065u },\r\n  { 16557336970347413504u, 16505930714733656162u,         169261976984u },\r\n  { 12751520132434493440u, 18270988073492888699u,         152894788296u },\r\n  {  9295429630892703744u,  2525111411519708523u,         200990472248u },\r\n  {                    0u, 16728989342518570442u,          56136886563u },\r\n  {                    0u,  7974052022039438336u,          35906880329u },\r\n  {                    0u,  5356554962386550784u,          73432274226u },\r\n  {                    0u,  6693869495028547584u,          50290379426u },\r\n  {                    0u,  8157517147199766528u,         162362875392u },\r\n  {                    0u, 12065776720423157760u,            442219890u },\r\n  {                    0u, 11997589407315001344u,         114654087066u },\r\n  {                    0u,                    0u,         154650390625u },\r\n  {                    0u,                    0u,          97000000000u },\r\n  { 16872870088062921306u,               119850u,                    0u },\r\n  {  5112979788807802982u,      119850914680120u,                    0u },\r\n  { 13742728082020150272u,  2418433229320326037u,                 6497u },\r\n  {  2217110934613627976u,  1143911773589293534u,          97131103528u },\r\n  { 11021433940188610484u,  9276183703610924928u,          40062011581u },\r\n  {  1713669895470733463u,  3532180128827684715u,         189502862926u },\r\n  {  3313382510572018285u,  8563997501322031543u,          78191479868u },\r\n  { 14976595232784069505u, 14843890409658460681u,          60464255234u },\r\n  {  7213172372862496841u,  9489417861634552678u,           2804688911u },\r\n  { 15836474542502248588u,  1113198223322322089u,          15514422373u },\r\n  {  3221099285878340134u, 11190777557146597869u,         101060346596u },\r\n  {  3265814602578095358u, 17764553645932638286u,         228606653266u },\r\n  {  6502528252282225364u, 14900777150991234852u,          82963018382u },\r\n  { 16392476834556790183u, 17364899863357893610u,         142807772747u },\r\n  { 15167629413417091342u, 15537570181590167037u,          75941353107u },\r\n  {  1366763272626280111u,  5558052627121307766u,         147842293367u },\r\n  {  8720523635169216093u, 12095241565795232609u,         119301302636u },\r\n  {  9649171375767398672u,  2187936505958366389u,         108655684359u },\r\n  {  7647980704001073152u, 12009203621325860228u,           7118608275u },\r\n  { 13286434495608651776u, 14814842834750302952u,         147651020232u },\r\n  {  4358271637167013888u,  5965296499605198833u,         200803114239u },\r\n  { 15954987941890097152u,  4051026394962148842u,         255323379371u },\r\n  {  7911135695429697536u, 16799526299141688349u,         171219606580u },\r\n  {  7205759403792793600u,  9460214166646215205u,          52910704145u },\r\n  {                    0u, 10750736995029068008u,          17512839237u },\r\n  {                    0u,  5377963045376430080u,          69582798620u },\r\n  {                    0u, 15996910350253424640u,          28291539960u },\r\n  {                    0u, 13651157529655246848u,         248867194247u },\r\n  {                    0u,  9771305410219737088u,         135740030732u },\r\n  {                    0u, 12709439623416250368u,          12529703527u },\r\n  {                    0u,  9943947977234055168u,         103688980102u },\r\n  {                    0u,                    0u,         134539062500u },\r\n  {                    0u,                    0u,         228000000000u },\r\n  {   952589339068938148u,           1828779826u,                    0u },\r\n  { 10058155040190817688u,  1828779826051639971u,                    0u },\r\n  {  5322725640026584391u,   371564423966525229u,             99138353u },\r\n  {  2269982385930389600u, 14464859121514339583u,          49020142547u },\r\n  { 13216683679976310224u,  3913119023023056247u,         211784141584u },\r\n  { 17417440642083494819u,  5493396321716566945u,          16212130607u },\r\n  {  3029180749090900711u,  5837454566818211973u,          47297797611u },\r\n  {  8315443826261908513u,  2886670683193253881u,         235316449046u },\r\n  {  1488962797247197277u,  5504823105587173817u,          22156486731u },\r\n  { 18009099634999034122u,  9431834277334851106u,          75298417058u },\r\n  {  8092455412807497971u, 12921661346456247087u,         162511300760u },\r\n  { 17808458047236758329u,  3643076516404724246u,         152700484665u },\r\n  {  3164591817527425171u, 12559396953196866477u,          57197491573u },\r\n  {  3314036340472350590u,  1626880974916825698u,         117680846273u },\r\n  {    33234902404332784u,  6806994170946429566u,         193088193394u },\r\n  { 12349284717857274280u,  7596631230206896579u,         114369007893u },\r\n  { 18209607903013119355u,  3100480253729502401u,          21411814204u },\r\n  {  7891549145984268038u,  6310570748781063286u,          60168077371u },\r\n  {  7703609897518594624u, 14251867077375744136u,          59342096725u },\r\n  {  6336912652634587136u,  6701165793751570137u,          85772595262u },\r\n  {  4461621834659397632u, 10856833140463959923u,          62363270925u },\r\n  {  5484660635557953536u, 15867563727561248556u,          13588550103u },\r\n  { 15142619273265938432u,  5048961008671491600u,         215860182353u },\r\n  { 12170977992968765440u, 13278183119599849051u,          81273704724u },\r\n  {  1152921504606846976u,  4547591784941053655u,          20719811749u },\r\n  {                    0u, 11815437715887182496u,         165246525444u },\r\n  {                    0u,   398495392178782208u,           4640516162u },\r\n  {                    0u,  9154841240825495552u,          66021602478u },\r\n  {                    0u,  1902683298245640192u,         174496284938u },\r\n  {                    0u,  5081900962138816512u,          10103144668u },\r\n  {                    0u,  3234710432358858752u,         220275490403u },\r\n  {                    0u, 16717361816799281152u,          99175354003u },\r\n  {                    0u,                    0u,         147906250000u },\r\n  {                    0u,                    0u,          16000000000u },\r\n  { 17812314011563521031u,                27904u,                    0u },\r\n  {  7684138864490314336u,       27904965607477u,                    0u },\r\n  {  9740522787420029605u, 13488568028574514610u,                 1512u },\r\n  {  6701109407732989894u,   275784718433886190u,         232731216738u },\r\n  { 16534886227502443952u, 10020568880357102364u,          98014950319u },\r\n  {  8908667306968317910u,  8876397213146246746u,         175543216127u },\r\n  {  7531472173477105155u,  2155905919114811310u,         255481190457u },\r\n  { 11527371604834801166u,  1087100407155601220u,          57116871894u },\r\n  { 15688593496691078576u,  2903498381705011170u,         214058931831u },\r\n  { 11394944804253312188u, 12223476257006657765u,         119157398962u },\r\n  { 11182279880854372627u, 12148657163736735595u,         178662635975u },\r\n  {   150579373068361470u,  8951241323311673823u,         199658580024u },\r\n  {  3147220002440857300u,  8463862715901576300u,          56485247764u },\r\n  {  3630514817795505815u,  3873401978748963266u,          20458826917u },\r\n  { 11708796588334233588u,   248364795947002730u,         165209977542u },\r\n  { 16844495466426369546u, 10454378025404001822u,         198013463882u },\r\n  { 17636655472325475902u,  6574176865628265640u,          74566732968u },\r\n  { 17038926655686645229u,    16703315293848336u,         168356386842u },\r\n  { 15602838456783529415u,  9896033222450013456u,          26000905488u },\r\n  { 10869815869248876790u, 17311376269334085007u,          16536465035u },\r\n  { 18407124180939800832u, 18378511316495639306u,         139938451587u },\r\n  {  5705018517251293184u, 15120796393727584297u,         131996301094u },\r\n  {  9660452258743058432u, 18253447805740347049u,          38819700014u },\r\n  {  5646292272224927744u,  5842497225601731158u,          46989521388u },\r\n  {  7410409304047484928u,  4369968404176723173u,         236316722409u },\r\n  {  5953758707383795712u, 16142207253674488117u,         233236896461u },\r\n  {  4611686018427387904u, 12124259227391928178u,         205875070808u },\r\n  {                    0u, 13019483264566077056u,          88657257409u },\r\n  {                    0u,    74901376448135168u,         193705787602u },\r\n  {                    0u, 13897060093813325824u,         210004060411u },\r\n  {                    0u,  4495486210810052608u,         251753361137u },\r\n  {                    0u, 14885496280087265280u,         241243700795u },\r\n  {                    0u,  4976477588244398080u,          59806944370u },\r\n  {                    0u, 11529215046068469760u,         114269775390u },\r\n  {                    0u,                    0u,          30625000000u },\r\n  {                    0u,                    0u,          64000000000u },\r\n  {    15035424419724983u,            425795984u,                    0u },\r\n  { 18280822466032836292u,   425795984000815071u,                    0u },\r\n  { 11524250747302615283u, 10043594327130472635u,             23082446u },\r\n  { 15212285943691810760u,  8336034337032909060u,         206544464339u },\r\n  {  7951804027551297019u, 16717215784895280857u,         211451897326u },\r\n  {  1706416229965221847u, 10968831263951212032u,         238906242083u },\r\n  {  3406023111930700826u,  5536629379734406065u,          35594621534u },\r\n  { 16132696204133391302u,  1618806894932332402u,          94300141280u },\r\n  { 11593846688794356915u, 11363331325254998861u,         224087755697u },\r\n  {  6875759884161133906u,  8775167772751754888u,         177616007425u },\r\n  {  3593593325323835965u,  2898202945316114122u,           1475702798u },\r\n  {  9542049733257388925u,  8868842714495185148u,          14157111896u },\r\n  {  9926551925937787518u, 17052094667531999136u,          88480780926u },\r\n  {  3128491553219547895u,  3658615537031138594u,         126924395904u },\r\n  { 17158408656931354885u, 12486952437987190746u,         128198333945u },\r\n  {  2065169543154992616u,   912079238520577629u,         249676919048u },\r\n  {  4832622393556232739u, 10960072898031888041u,           8049443914u },\r\n  { 16505930714733656162u,  6129550094334741912u,          74594146742u },\r\n  { 18270988073492888699u,  7965724516573729480u,         182332283576u },\r\n  {  2525111411519708523u,  5801761178810791992u,         184431822791u },\r\n  { 16728989342518570442u, 13197466483098446115u,         199314514103u },\r\n  {  7974052022039438336u, 11326268638393107273u,         183715436091u },\r\n  {  5356554962386550784u,  3597339351794947378u,          59613998253u },\r\n  {  6693869495028547584u,   353880726151383714u,         173195012157u },\r\n  {  8157517147199766528u, 11154818162602073600u,          61019183912u },\r\n  { 12065776720423157760u,  5141043976157511026u,          40604703904u },\r\n  { 11997589407315001344u,  7188225141808859034u,         160278696552u },\r\n  {                    0u, 13894168943295705185u,         104389674465u },\r\n  {                    0u, 12176538069834828288u,         225753204407u },\r\n  {                    0u,  7994239409235165184u,         183660091451u },\r\n  {                    0u, 13707777025480065024u,          59433368586u },\r\n  {                    0u, 10120227247676719104u,          10743100081u },\r\n  {                    0u,  7358494763030413312u,         177548618618u },\r\n  {                    0u,  7656119366529843200u,         122398904800u },\r\n  {                    0u,  9223372036854775808u,         224415039062u },\r\n  {                    0u,                    0u,          86500000000u },\r\n  {  2418433229320326037u,                 6497u,                    0u },\r\n  {  1143911773589293534u,        6497131103528u,                    0u },\r\n  {  9276183703610924928u,  3877189582299842749u,                  352u },\r\n  {  3532180128827684715u,  7625565791857948238u,          96210182868u },\r\n  {  8563997501322031543u, 16568435163612007484u,         212413382749u },\r\n  { 14843890409658460681u, 17592071940521808130u,          93898176669u },\r\n  {  9489417861634552678u, 15158637878035490831u,         157953668130u },\r\n  {  1113198223322322089u, 17789243229146401893u,          34821751405u },\r\n  { 11190777557146597869u, 14677686051252896484u,         109964356807u },\r\n  { 17764553645932638286u,  3531237481269211986u,         199795678955u },\r\n  { 14900777150991234852u,  8074435404989280910u,         235191428767u },\r\n  { 17364899863357893610u,  7086549341467684427u,         159437716020u },\r\n  { 15537570181590167037u, 10556134770918626963u,          52384162609u },\r\n  {  5558052627121307766u, 10772666134712966775u,          49572249212u },\r\n  { 12095241565795232609u,  6195173298198112620u,         124583987401u },\r\n  {  2187936505958366389u,  8144773843324250887u,         201335841017u },\r\n  { 12009203621325860228u, 14144284817150924691u,         249441529074u },\r\n  { 14814842834750302952u,  6464447844648863176u,         242766763216u },\r\n  {  5965296499605198833u, 15760468443293179135u,         208350438419u },\r\n  {  4051026394962148842u,  5172191224908322475u,          19854376706u },\r\n  { 16799526299141688349u,  2357554307308969012u,           2280385048u },\r\n  {  9460214166646215205u,  1602046917604361745u,          24127803275u },\r\n  { 10750736995029068008u,  7830970218109515845u,         139086847137u },\r\n  {  5377963045376430080u,  2899479134887821084u,         161424517746u },\r\n  { 15996910350253424640u, 15792042302392017912u,         114157181078u },\r\n  { 13651157529655246848u, 11286099112296056199u,         150856088328u },\r\n  {  9771305410219737088u, 15161477829153947404u,           8611820658u },\r\n  { 12709439623416250368u,   423831848142641767u,         114821905360u },\r\n  {  9943947977234055168u,  9707413321046312582u,         208022975970u },\r\n  {                    0u, 10969483299803835620u,         226526239930u },\r\n  {                    0u,  4326479556120930304u,         186594656881u },\r\n  {                    0u, 12876227232041795584u,         113234538926u },\r\n  {                    0u, 16967986827791171584u,         174698021676u },\r\n  {                    0u,  1288146316538413056u,          44919836409u },\r\n  {                    0u, 13715290452691779584u,         249069830551u },\r\n  {                    0u,  4683743612465315840u,         151743507385u },\r\n  {                    0u,                    0u,         185253906250u },\r\n  {                    0u,                    0u,          74000000000u },\r\n  {   371564423966525229u,             99138353u,                    0u },\r\n  { 14464859121514339583u,    99138353020142547u,                    0u },\r\n  {  3913119023023056247u, 16344805304534272784u,              5374300u },\r\n  {  5493396321716566945u,    26429987091348271u,          92886053671u },\r\n  {  5837454566818211973u,  8691371289609838059u,          39001432772u },\r\n  {  2886670683193253881u, 12980168378493046550u,         196471160181u },\r\n  {  5504823105587173817u, 14010125458129496139u,         117703656337u },\r\n  {  9431834277334851106u, 17061829677031795106u,         145759490422u },\r\n  { 12921661346456247087u,  2227928323072698520u,         118924923640u },\r\n  {  3643076516404724246u,  7394752319272287289u,         248120776236u },\r\n  { 12559396953196866477u,  8805771303577744757u,          44400870326u },\r\n  {  1626880974916825698u, 16371027194302248385u,         182477361818u },\r\n  {  6806994170946429566u,  9114324123731231602u,         154887475162u },\r\n  {  7596631230206896579u, 14468189808746991893u,         218494088500u },\r\n  {  3100480253729502401u,  2376054557800684348u,          52784322141u },\r\n  {  6310570748781063286u, 12462238943546048571u,          93128806175u },\r\n  { 14251867077375744136u, 15334855370842605909u,          31675579326u },\r\n  {  6701165793751570137u,  7211347914013798462u,         190831304175u },\r\n  { 10856833140463959923u, 13763642332572548877u,         239390927953u },\r\n  { 15867563727561248556u, 16868268377740071383u,          81746128545u },\r\n  {  5048961008671491600u,  1120013377627684177u,         161914430661u },\r\n  { 13278183119599849051u, 15898107650717274388u,         197060716046u },\r\n  {  4547591784941053655u, 12281923376333274277u,          14861838142u },\r\n  { 11815437715887182496u,  6383530489286615044u,          62665804400u },\r\n  {   398495392178782208u,  4253822060257126466u,         112346051881u },\r\n  {  9154841240825495552u, 17614372438391501998u,          41230600155u },\r\n  {  1902683298245640192u,  4309951310554333450u,         219954877043u },\r\n  {  5081900962138816512u, 13106185988973773020u,         115233642928u },\r\n  {  3234710432358858752u,  2070134359761960547u,         176710487766u },\r\n  { 16717361816799281152u,  9399359914137865875u,         214112222208u },\r\n  {                    0u, 17415053284723541264u,            509540321u },\r\n  {                    0u,  4840502610448261120u,         225944071930u },\r\n  {                    0u,  5690599259712258048u,         250262404172u },\r\n  {                    0u,   114769594245185536u,          76308488004u },\r\n  {                    0u,  3150620882578178048u,          68006221672u },\r\n  {                    0u,  5136918324969472000u,         104170795500u },\r\n  {                    0u,  7205759403792793600u,         236278472900u },\r\n  {                    0u,                    0u,         196390625000u },\r\n  {                    0u,                    0u,         232000000000u },\r\n  { 13488568028574514610u,                 1512u,                    0u },\r\n  {   275784718433886190u,        1512731216738u,                    0u },\r\n  { 10020568880357102364u,    98202693831717807u,                   82u },\r\n  {  8876397213146246746u, 12909287260170414079u,          82005323578u },\r\n  {  2155905919114811310u, 11728631949380786233u,          58699813864u },\r\n  {  1087100407155601220u, 18263701925522197718u,         232635810411u },\r\n  {  2903498381705011170u,  4868886449713321591u,         107990077265u },\r\n  { 12223476257006657765u,  5870139507184082354u,          81263942863u },\r\n  { 12148657163736735595u,  5978562500822661575u,         207318220900u },\r\n  {  8951241323311673823u, 10821136839630268472u,         100324098522u },\r\n  {  8463862715901576300u,  9490907630136752916u,         218586615003u },\r\n  {  3873401978748963266u, 10564005678001613989u,         219514503133u },\r\n  {   248364795947002730u,  5754050547468481222u,         221572675895u },\r\n  { 10454378025404001822u,  3833909949855542602u,          55311927705u },\r\n  {  6574176865628265640u, 15446538552665967784u,         153207836674u },\r\n  {    16703315293848336u, 14924837848804399130u,           2837358532u },\r\n  {  9896033222450013456u, 18140170340418344208u,         196809077080u },\r\n  { 17311376269334085007u, 11380424819825208971u,          88983380604u },\r\n  { 18378511316495639306u, 12416915664152252547u,         124616934065u },\r\n  { 15120796393727584297u, 17195282241626289958u,         177673122346u },\r\n  { 18253447805740347049u,  2649541045825281326u,          42932158118u },\r\n  {  5842497225601731158u, 16577429864268509676u,         166143631907u },\r\n  {  4369968404176723173u, 12051257060168107241u,          35898664273u },\r\n  { 16142207253674488117u,  5363884561143470797u,          81653299954u },\r\n  { 12124259227391928178u, 13054029903083620184u,         242290776764u },\r\n  { 13019483264566077056u,   566314952158634945u,         188707660379u },\r\n  {    74901376448135168u,  1329472079642345682u,          91030699995u },\r\n  { 13897060093813325824u, 15686237486658857211u,         219072070825u },\r\n  {  4495486210810052608u,  1069073549290598129u,         169850352638u },\r\n  { 14885496280087265280u,  4323599065125928507u,         254057954593u },\r\n  {  4976477588244398080u, 17861823329752681586u,          33234382774u },\r\n  { 11529215046068469760u, 17220149985412802078u,         182968291382u },\r\n  {                    0u,  4344934572159429184u,          54933506201u },\r\n  {                    0u,  2252927464837120000u,         153235539375u },\r\n  {                    0u, 10910018171964489728u,         175122131442u },\r\n  {                    0u,  3597328585515335680u,         242591433270u },\r\n  {                    0u,  6972808074239148032u,          54195011573u },\r\n  {                    0u,  2227030015734710272u,         245377996683u },\r\n  {                    0u,  1152921504606846976u,         139120727539u },\r\n  {                    0u,                    0u,         243062500000u },\r\n  {                    0u,                    0u,         160000000000u },\r\n  { 10043594327130472635u,             23082446u,                    0u },\r\n  {  8336034337032909060u,    23082446544464339u,                    0u },\r\n  { 16717215784895280857u, 17238287503805244910u,              1251301u },\r\n  { 10968831263951212032u,  1434575446038410275u,         229934489438u },\r\n  {  5536629379734406065u, 14009569747841241694u,          94077768490u },\r\n  {  1618806894932332402u, 14938795732275951328u,          42759460297u },\r\n  { 11363331325254998861u,  6687653542888983473u,         201809833739u },\r\n  {  8775167772751754888u,    28238723295162625u,          11362538425u },\r\n  {  2898202945316114122u,  4745270274832691214u,         185001530824u },\r\n  {  8868842714495185148u,   926478968112308824u,         200257241617u },\r\n  { 17052094667531999136u,  9213681606604198526u,          17050224525u },\r\n  {  3658615537031138594u, 13346223820579313024u,         141499474680u },\r\n  { 12486952437987190746u,   691642518601291257u,         248723500243u },\r\n  {   912079238520577629u,  1153720150033789192u,         211037494016u },\r\n  { 10960072898031888041u, 12089015034721780810u,             62543294u },\r\n  {  6129550094334741912u,  3555868702841788854u,         190655346818u },\r\n  {  7965724516573729480u, 11708406782758214328u,         130192764028u },\r\n  {  5801761178810791992u,  9417497762905343943u,         124634714003u },\r\n  { 13197466483098446115u, 12838336066957615287u,         147510523576u },\r\n  { 11326268638393107273u, 13737708142128207419u,         184695967592u },\r\n  {  3597339351794947378u, 11683434809834695853u,         104744722650u },\r\n  {   353880726151383714u,  2689114340106315837u,         218633360270u },\r\n  { 11154818162602073600u,  8859225263374261032u,         142145777180u },\r\n  {  5141043976157511026u, 15761671984578600096u,          28480259563u },\r\n  {  7188225141808859034u,  7087267079878005352u,         235854441950u },\r\n  { 13894168943295705185u,  4601291730423121377u,         222384201518u },\r\n  { 12176538069834828288u,  9559411037059581623u,          46249436524u },\r\n  {  7994239409235165184u, 12969820289641388091u,         108518216710u },\r\n  { 13707777025480065024u, 13628239920285957130u,           6703095366u },\r\n  { 10120227247676719104u,  8049893933765800625u,          70738788366u },\r\n  {  7358494763030413312u, 10391755948840250234u,          14436385624u },\r\n  {  7656119366529843200u, 14454650777462444512u,          88563338218u },\r\n  {  9223372036854775808u, 14244638523341127254u,         234783588188u },\r\n  {                    0u, 12246016810439753984u,          92772203401u },\r\n  {                    0u,  9382741764551081984u,         137663857901u },\r\n  {                    0u,  4608696190291148800u,         237508639450u },\r\n  {                    0u,  1696483666416369664u,         218249837921u },\r\n  {                    0u, 15416683541605384192u,          97091966563u },\r\n  {                    0u,  7683140964294066176u,          99835740089u },\r\n  {                    0u,  4611686018427387904u,         185416503906u },\r\n  {                    0u,                    0u,          98250000000u },\r\n  {                    0u,                    0u,         128000000000u },\r\n  {  3877189582299842749u,                  352u,                    0u },\r\n  {  7625565791857948238u,         352210182868u,                    0u },\r\n  { 16568435163612007484u,  1722045467931902045u,                   19u },\r\n  { 17592071940521808130u, 16095324008152856733u,          19093352271u },\r\n  { 15158637878035490831u, 15216188060094280738u,          79872529262u },\r\n  { 17789243229146401893u, 10793385929903030893u,         110824871207u },\r\n  { 14677686051252896484u, 12613277226875940039u,          39585110623u },\r\n  {  3531237481269211986u, 10644539625155600107u,          95683767128u },\r\n  {  8074435404989280910u,  6181262895644173983u,          88577041649u },\r\n  {  7086549341467684427u,   148914399627082292u,         241335086933u },\r\n  { 10556134770918626963u, 14379289774887985969u,          85008072665u },\r\n  { 10772666134712966775u, 11743339675582627452u,         217779502860u },\r\n  {  6195173298198112620u,  7841621929809463497u,          12636607719u },\r\n  {  8144773843324250887u, 11168944680251236601u,         231425095176u },\r\n  { 14144284817150924691u,  6178560202529287410u,           8605469704u },\r\n  {  6464447844648863176u, 13295243308201596112u,           8334940419u },\r\n  { 15760468443293179135u, 17040673746172470291u,           3720736583u },\r\n  {  5172191224908322475u, 14957442487039409922u,          71923776774u },\r\n  {  2357554307308969012u, 17778155426506992152u,           6810844581u },\r\n  {  1602046917604361745u, 14945404984219733899u,         165963755736u },\r\n  {  7830970218109515845u, 11590754866058681505u,         216810192027u },\r\n  {  2899479134887821084u,  6020790784469412466u,         155628336080u },\r\n  { 15792042302392017912u,  7934351824569522326u,         208326387722u },\r\n  { 11286099112296056199u,  5038361112172116744u,          10430122074u },\r\n  { 15161477829153947404u,  3305187319649924210u,          90273130103u },\r\n  {   423831848142641767u, 11470175511099161552u,         119179174563u },\r\n  {  9707413321046312582u,  7308362160352048610u,         163621799460u },\r\n  { 10969483299803835620u, 10666410671225576634u,          36396187106u },\r\n  {  4326479556120930304u,  2181639019945820785u,         226578227281u },\r\n  { 12876227232041795584u,  4615749499734847918u,          81118266888u },\r\n  { 16967986827791171584u, 14076159200958497580u,           8250220281u },\r\n  {  1288146316538413056u,  5470405257862074105u,         249763070119u },\r\n  { 13715290452691779584u,  4565741478181339543u,         167296551263u },\r\n  {  4683743612465315840u,  8901832997861862329u,          95247509341u },\r\n  {                    0u, 14190141170191714122u,          93482569333u },\r\n  {                    0u,  4240772322245764096u,         117769249094u },\r\n  {                    0u,  4422842195340951552u,          70229892728u },\r\n  {                    0u, 15448426386733137920u,         120239762755u },\r\n  {                    0u,  9203504548935630848u,          67837460872u },\r\n  {                    0u,  5936377627571912704u,         136498922981u },\r\n  {                    0u,   468374361246531584u,         229321811676u },\r\n  {                    0u,                    0u,         220025390625u },\r\n  {                    0u,                    0u,          33000000000u },\r\n  { 16344805304534272784u,              5374300u,                    0u },\r\n  {    26429987091348271u,     5374300886053671u,                    0u },\r\n  {  8691371289609838059u,  8020875056524075716u,               291341u },\r\n  { 12980168378493046550u,  1400288714762747253u,          13434812508u },\r\n  { 14010125458129496139u,  6136037711314764689u,          92075909803u },\r\n  { 17061829677031795106u, 15735488086392394102u,         171332635270u },\r\n  {  2227928323072698520u,  7735094782793634552u,         134853022518u },\r\n  {  7394752319272287289u,  7273689191766726188u,          54419320328u },\r\n  {  8805771303577744757u,  3410634565056431030u,           8394307481u },\r\n  { 16371027194302248385u,  4600927904885215898u,         153184890870u },\r\n  {  9114324123731231602u,  9154871331680374746u,         246249416801u },\r\n  { 14468189808746991893u,  6117978272461042996u,          97496286569u },\r\n  {  2376054557800684348u, 13116904339287496285u,         105331656266u },\r\n  { 12462238943546048571u,   867037205615660831u,          74711068809u },\r\n  { 15334855370842605909u,  1802487145191504830u,         137047002181u },\r\n  {  7211347914013798462u, 17242009718457409007u,          69097713023u },\r\n  { 13763642332572548877u, 13620802355488468049u,         127934691219u },\r\n  { 16868268377740071383u,  4442227880594435745u,         147738385175u },\r\n  {  1120013377627684177u, 17354849212854314181u,          23240813655u },\r\n  { 15898107650717274388u, 18202319179831567886u,          87940808260u },\r\n  { 12281923376333274277u, 17568634016348874558u,          68986749699u },\r\n  {  6383530489286615044u,  7496925598312450672u,           3952397558u },\r\n  {  4253822060257126466u,   601870379496813865u,         246406409151u },\r\n  { 17614372438391501998u, 11995106565680728027u,         191032627458u },\r\n  {  4309951310554333450u, 16331071694764184179u,           2650256029u },\r\n  { 13106185988973773020u,  9665962217000524208u,         157885309170u },\r\n  {  2070134359761960547u, 13682661374415474390u,         242523992861u },\r\n  {  9399359914137865875u,  6940361789924260864u,          29741738559u },\r\n  { 17415053284723541264u,  9658039831644010465u,          63376237766u },\r\n  {  4840502610448261120u,  6843715893910236922u,         198523563388u },\r\n  {  5690599259712258048u,    47089792870595660u,         124370998582u },\r\n  {   114769594245185536u, 14510386192097156932u,          54002552742u },\r\n  {  3150620882578178048u, 12059931208360040296u,         166786609611u },\r\n  {  5136918324969472000u, 14877013468459184620u,         203653770180u },\r\n  {  7205759403792793600u,  2397668560671695044u,         196806484516u },\r\n  {                    0u,  2195572305559232232u,          36129977873u },\r\n  {                    0u,  3261686279425953792u,          17119022213u },\r\n  {                    0u,  9333850662059900928u,         133176816367u },\r\n  {                    0u,  5036522340217782272u,         239505989058u },\r\n  {                    0u,  2800120215143186432u,         194273030423u },\r\n  {                    0u,   441634238459019264u,          23151794821u },\r\n  {                    0u,   720575940379279360u,         133023941040u },\r\n  {                    0u,                    0u,         176039062500u },\r\n  {                    0u,                    0u,         228000000000u },\r\n  {    98202693831717807u,                   82u,                    0u },\r\n  { 12909287260170414079u,          82005323578u,                    0u },\r\n  { 11728631949380786233u,  8218347283861607400u,                    4u },\r\n  { 18263701925522197718u, 17896200385973633643u,           4445517498u },\r\n  {  4868886449713321591u, 16333242102094352209u,         186970154966u },\r\n  {  5870139507184082354u,  9981905728606788815u,         214885426828u },\r\n  {  5978562500822661575u, 15219470018924839012u,         140541120193u },\r\n  { 10821136839630268472u, 17152070168529617370u,         193825049122u },\r\n  {  9490907630136752916u, 17841343440958328027u,          34929815586u },\r\n  { 10564005678001613989u, 17291078023923990493u,          34967181165u },\r\n  {  5754050547468481222u, 16744804581790759223u,         109937351217u },\r\n  {  3833909949855542602u,  5001622214111594905u,          49907737675u },\r\n  { 15446538552665967784u,  9676746897435398146u,          75271138483u },\r\n  { 14924837848804399130u,  8109025833995118532u,         179524577500u },\r\n  { 18140170340418344208u,  5495826424046694744u,         220439591171u },\r\n  { 11380424819825208971u,  7890288164365705852u,           3297929347u },\r\n  { 12416915664152252547u,  8616438349039895217u,         131427733378u },\r\n  { 17195282241626289958u, 15787154801788760618u,         130467098058u },\r\n  {  2649541045825281326u, 12418659311480782502u,         202855823376u },\r\n  { 16577429864268509676u,  4486988874116669987u,          16673216870u },\r\n  { 12051257060168107241u,  4828971301551875409u,         102243240154u },\r\n  {  5363884561143470797u, 14769106422014442226u,         218261779058u },\r\n  { 13054029903083620184u,  7763933466423188156u,         114800634863u },\r\n  {   566314952158634945u, 10449097116253839963u,         239420883676u },\r\n  {  1329472079642345682u, 12870692502472900571u,         220566446689u },\r\n  { 15686237486658857211u, 11597479481311003817u,          97697721638u },\r\n  {  1069073549290598129u,  8294994869530047486u,          38628700622u },\r\n  {  4323599065125928507u, 16879315829924478241u,         206449672572u },\r\n  { 17861823329752681586u, 11873324837601439670u,         124915029544u },\r\n  { 17220149985412802078u,  3277599055636107318u,          40643654229u },\r\n  {  4344934572159429184u, 15363467897354242201u,          85177679000u },\r\n  {  2252927464837120000u, 10351182204479784367u,         152832855263u },\r\n  { 10910018171964489728u, 12811517584931924466u,         223561138711u },\r\n  {  3597328585515335680u, 16988930699558748726u,          23694513759u },\r\n  {  6972808074239148032u, 11683499918824718325u,          95920971778u },\r\n  {  2227030015734710272u, 13119300691281647499u,           2633363799u },\r\n  {  1152921504606846976u, 10125549106595354099u,          87711198715u },\r\n  {                    0u, 17505352699870800544u,         251548907116u },\r\n  {                    0u,  6756039242241163264u,         108948967071u },\r\n  {                    0u,  3537338758766526464u,         159366245621u },\r\n  {                    0u,  6522626374119718912u,         245191759518u },\r\n  {                    0u,  4733294203482669056u,         158353592284u },\r\n  {                    0u, 16997710893603094528u,         220256592392u },\r\n  {                    0u, 16717361816799281152u,           8921447753u },\r\n  {                    0u,                    0u,          73906250000u },\r\n  {                    0u,                    0u,          16000000000u },\r\n  { 17238287503805244910u,              1251301u,                    0u },\r\n  {  1434575446038410275u,     1251301934489438u,                    0u },\r\n  { 14009569747841241694u,  3943737498063000362u,                67833u },\r\n  { 14938795732275951328u,  2870731037991212489u,         249213790438u },\r\n  {  6687653542888983473u,  7389433400402095883u,         230155622641u },\r\n  {    28238723295162625u,  5675049236146197433u,         241400581987u },\r\n  {  4745270274832691214u,  9953779846262904264u,          99307645035u },\r\n  {   926478968112308824u, 12691978937179636241u,         107539595486u },\r\n  {  9213681606604198526u, 15523327331528198029u,         222688033556u },\r\n  { 13346223820579313024u, 15722603279568118520u,          20841521260u },\r\n  {   691642518601291257u, 11838632364171816147u,         108852324031u },\r\n  {  1153720150033789192u,  7832751832367143680u,         191641773546u },\r\n  { 12089015034721780810u, 12167724027162940862u,         234424614327u },\r\n  {  3555868702841788854u,  4108211144748152962u,         183659613641u },\r\n  { 11708406782758214328u,  7530983398136343676u,         201222706572u },\r\n  {  9417497762905343943u,  1117587133956542355u,         140408255428u },\r\n  { 12838336066957615287u, 17134748625149490872u,         196060584519u },\r\n  { 13737708142128207419u,  4039918359454207848u,          71928876584u },\r\n  { 11683434809834695853u,  1830218764589441242u,          40219004413u },\r\n  {  2689114340106315837u,   637895981480825742u,         253099216358u },\r\n  {  8859225263374261032u,  8246879226348334620u,         230034580410u },\r\n  { 15761671984578600096u, 12389239568142583275u,         186447064218u },\r\n  {  7087267079878005352u, 14041257178803154398u,         154671622022u },\r\n  {  4601291730423121377u, 16312515716494630702u,         134761178076u },\r\n  {  9559411037059581623u, 17088522799596987756u,         220884303248u },\r\n  { 12969820289641388091u,  3588932524637852678u,         144926370677u },\r\n  { 13628239920285957130u,   107218049069817414u,         117194556422u },\r\n  {  8049893933765800625u,  1596707240462008334u,           6005812302u },\r\n  { 10391755948840250234u, 17461913142391587672u,          78086557672u },\r\n  { 14454650777462444512u,  4366474266651610090u,         232946612208u },\r\n  { 14244638523341127254u,  5539304013194805084u,         240236707044u },\r\n  { 12246016810439753984u,  4762470619211987849u,         228300286272u },\r\n  {  9382741764551081984u, 10835638458986644717u,          64258174049u },\r\n  {  4608696190291148800u, 16141642290510052058u,          97587401137u },\r\n  {  1696483666416369664u, 17390568670756355425u,         177875040181u },\r\n  { 15416683541605384192u, 12536768491333867107u,         181942744616u },\r\n  {  7683140964294066176u, 13145148522871947193u,          40679619581u },\r\n  {  4611686018427387904u,  5665349945233068642u,         253712599929u },\r\n  {                    0u, 17074607537751066240u,         121307119235u },\r\n  {                    0u,  6241525660962062336u,         131925616329u },\r\n  {                    0u,  1142860629783085056u,         201338353784u },\r\n  {                    0u, 16287527416870469632u,         120061954598u },\r\n  {                    0u,  9028002014738513920u,          38882948630u },\r\n  {                    0u, 16217462258161156096u,          22489408969u },\r\n  {                    0u, 11529215046068469760u,         201879150390u },\r\n  {                    0u,                    0u,          54625000000u },\r\n  {                    0u,                    0u,          64000000000u },\r\n  {  1722045467931902045u,                   19u,                    0u },\r\n  { 16095324008152856733u,          19093352271u,                    0u },\r\n  { 15216188060094280738u,   646608198162977646u,                    1u },\r\n  { 10793385929903030893u, 12170458846894708007u,           1035052700u },\r\n  { 12613277226875940039u,  1797330480103086687u,         156659761896u },\r\n  { 10644539625155600107u, 10332188564497263448u,         232097433480u },\r\n  {  6181262895644173983u,  7524259485079594225u,         136560109064u },\r\n  {   148914399627082292u,    62681109059153749u,           8407890924u },\r\n  { 14379289774887985969u, 13480636451804037081u,         236003397949u },\r\n  { 11743339675582627452u,  6948168233012789004u,          61730786766u },\r\n  {  7841621929809463497u, 12015502974041806055u,         206376660954u },\r\n  { 11168944680251236601u,  7343801660689004040u,         218651361721u },\r\n  {  6178560202529287410u, 13670580858640731144u,         185398108285u },\r\n  { 13295243308201596112u,  5605073897566574851u,         125741083673u },\r\n  { 17040673746172470291u, 15387788940505247559u,          25303851664u },\r\n  { 14957442487039409922u, 17565181499678113030u,         144834173709u },\r\n  { 17778155426506992152u,  1893743623847493029u,          13952210397u },\r\n  { 14945404984219733899u, 10243498996716269784u,         221102660047u },\r\n  { 11590754866058681505u,  5619675836950314139u,         207555301193u },\r\n  {  6020790784469412466u, 10224869737511515088u,          73304643237u },\r\n  {  7934351824569522326u,  2574495974386198538u,         165554291299u },\r\n  {  5038361112172116744u,  7825756347302873178u,          99139563706u },\r\n  {  3305187319649924210u, 12071550103794656887u,         186424235101u },\r\n  { 11470175511099161552u,  7195875213867606691u,          93654400042u },\r\n  {  7308362160352048610u, 18271364438406891044u,          42390089176u },\r\n  { 10666410671225576634u, 16966521933952564706u,         216990492650u },\r\n  {  2181639019945820785u,   289920862029570129u,         234919756997u },\r\n  {  4615749499734847918u,  7804199568098625032u,         197015716641u },\r\n  { 14076159200958497580u,  5758118571242446585u,          33423066506u },\r\n  {  5470405257862074105u,  4030788293606375591u,         138312148233u },\r\n  {  4565741478181339543u,  4387716460037196127u,           9218509471u },\r\n  {  8901832997861862329u, 16807506478881285981u,         159237858585u },\r\n  { 14190141170191714122u, 17033060604413529717u,          25911136751u },\r\n  {  4240772322245764096u, 10498418508292170054u,         239923364065u },\r\n  {  4422842195340951552u, 13237752038744465016u,         225569120407u },\r\n  { 15448426386733137920u, 17737618428304633155u,         151717619975u },\r\n  {  9203504548935630848u, 13546183833248825736u,           7961558221u },\r\n  {  5936377627571912704u,   826778452978976229u,         205734340097u },\r\n  {   468374361246531584u, 13728076626990147292u,           1044819749u },\r\n  {                    0u,  2794860281883592225u,          37744200525u },\r\n  {                    0u,  8680705720425908736u,          77151509679u },\r\n  {                    0u,   731520517439488000u,         175470582000u },\r\n  {                    0u, 13120812320768917504u,         240039655806u },\r\n  {                    0u,  2722954908557901824u,         126711280661u },\r\n  {                    0u,  6860847004205973504u,          21147611681u },\r\n  {                    0u,  6503197861922996224u,          33371927261u },\r\n  {                    0u,  9223372036854775808u,         221352539062u },\r\n  {                    0u,                    0u,         182500000000u },\r\n  {  8020875056524075716u,               291341u,                    0u },\r\n  {  1400288714762747253u,      291341434812508u,                    0u },\r\n  {  6136037711314764689u, 12005656413127238315u,                15793u },\r\n  { 15735488086392394102u,  4821130826186787462u,         177650827938u },\r\n  {  7735094782793634552u, 14377899467066168118u,         162261354025u },\r\n  {  7273689191766726188u, 16575613239625444872u,          41779427491u },\r\n  {  3410634565056431030u,  4317827099179284377u,         163898565794u },\r\n  {  4600927904885215898u,  1242354770412171254u,         162234069876u },\r\n  {  9154871331680374746u,   994838588328896609u,         116067348187u },\r\n  {  6117978272461042996u, 17283309862013060457u,         219053930307u },\r\n  { 13116904339287496285u,   124242522249856586u,          67936930105u },\r\n  {   867037205615660831u, 11564608014666985609u,          57006735200u },\r\n  {  1802487145191504830u, 12401028575581654085u,          96626918656u },\r\n  { 17242009718457409007u,  2490725392961465727u,            672261106u },\r\n  { 13620802355488468049u,  1949482237120640915u,         242135022494u },\r\n  {  4442227880594435745u, 15410502396166200087u,         158105681643u },\r\n  { 17354849212854314181u, 15694919529799920727u,         235835405008u },\r\n  { 18202319179831567886u, 10324869370171768388u,         208850823292u },\r\n  { 17568634016348874558u,  1631866459122189059u,         124559712290u },\r\n  {  7496925598312450672u,   172020494461226230u,          34088463658u },\r\n  {   601870379496813865u, 12734610307908856767u,          42009325249u },\r\n  { 11995106565680728027u,  1467513250829340930u,         193690344608u },\r\n  { 16331071694764184179u, 13558759428494307997u,         160079554052u },\r\n  {  9665962217000524208u,  7915355143999496434u,           4735021821u },\r\n  { 13682661374415474390u,  2876370200608797469u,         253429092262u },\r\n  {  6940361789924260864u,   343685370404989503u,         166155928341u },\r\n  {  9658039831644010465u,  4837266557407634630u,          21018631221u },\r\n  {  6843715893910236922u,  9622591415747161468u,          53262228745u },\r\n  {    47089792870595660u, 16503783814424220982u,           9521641725u },\r\n  { 14510386192097156932u,  5377083431343591334u,         253894671913u },\r\n  { 12059931208360040296u, 16508482371299291595u,          41291492276u },\r\n  { 14877013468459184620u, 10515883558812249028u,         180894926622u },\r\n  {  2397668560671695044u,    63492062913405476u,          30570067190u },\r\n  {  2195572305559232232u, 11571919759617799697u,         246003441911u },\r\n  {  3261686279425953792u,  2956602334970088581u,         247627315027u },\r\n  {  9333850662059900928u, 13604736747717849839u,          83160277733u },\r\n  {  5036522340217782272u, 16573540719338151362u,         229737514256u },\r\n  {  2800120215143186432u, 12620703004601168151u,          16898453442u },\r\n  {   441634238459019264u, 14649407809089591941u,         194684169680u },\r\n  {   720575940379279360u, 11290375247898624432u,         208794145988u },\r\n  {                    0u, 11020319450292874212u,         196612052468u },\r\n  {                    0u,  8754634933362354176u,         244597412714u },\r\n  {                    0u, 12976319450332528640u,         106474589710u },\r\n  {                    0u, 17447331119627239424u,          14703447686u },\r\n  {                    0u,  3665184902673858560u,         134945821715u },\r\n  {                    0u, 12949678516038795264u,          19198690071u },\r\n  {                    0u,    72057594037927936u,          23702003479u },\r\n  {                    0u,                    0u,          23003906250u },\r\n  {                    0u,                    0u,         202000000000u },\r\n  {  8218347283861607400u,                    4u,                    0u },\r\n  { 17896200385973633643u,           4445517498u,                    0u },\r\n  { 16333242102094352209u,  4445517498970154966u,                    0u },\r\n  {  9981905728606788815u,  9413159735776077452u,            240991986u },\r\n  { 15219470018924839012u, 14279163482889998017u,         242510288411u },\r\n  { 17152070168529617370u,  8693044629541194274u,          27774075003u },\r\n  { 17841343440958328027u, 11863110253260222498u,         123471250893u },\r\n  { 17291078023923990493u,  8319293368489531245u,         205643100495u },\r\n  { 16744804581790759223u,  3376307525676489265u,          79450989797u },\r\n  {  5001622214111594905u, 13205662254759912523u,         229183029997u },\r\n  {  9676746897435398146u,  5276250334231686323u,         237715880385u },\r\n  {  8109025833995118532u, 13790198520922745052u,         193286026103u },\r\n  {  5495826424046694744u, 14195535250150996227u,         119747568159u },\r\n  {  7890288164365705852u, 16425228796427004035u,          31769541507u },\r\n  {  8616438349039895217u,  4295900841296269186u,         131890413437u },\r\n  { 15787154801788760618u,  4533952595483946442u,         125232881251u },\r\n  { 12418659311480782502u, 12885038019373447184u,          99245786062u },\r\n  {  4486988874116669987u, 12140736240487831910u,         206698499310u },\r\n  {  4828971301551875409u,  6927124077155322074u,         238658150630u },\r\n  { 14769106422014442226u, 12477788342407819890u,         230375520148u },\r\n  {  7763933466423188156u,  7980854329409711087u,         148676422261u },\r\n  { 10449097116253839963u,  2062671021810827996u,         117432642980u },\r\n  { 12870692502472900571u,  2739521363598172769u,         164111817620u },\r\n  { 11597479481311003817u, 12897585686593465638u,         148148509750u },\r\n  {  8294994869530047486u,  1127632646629044686u,          54699179521u },\r\n  { 16879315829924478241u,  4833775019274666364u,           1061129088u },\r\n  { 11873324837601439670u, 15867662672939849256u,         128262039468u },\r\n  {  3277599055636107318u,  2092350330982953557u,         172860187717u },\r\n  { 15363467897354242201u, 13330062299842493592u,          69113426538u },\r\n  { 10351182204479784367u,  4479193352178519263u,         106722624125u },\r\n  { 12811517584931924466u,  3149393938889064983u,         125242817558u },\r\n  { 16988930699558748726u,  9736379904070620767u,          22170728987u },\r\n  { 11683499918824718325u,  3816238703055069186u,          27527810212u },\r\n  { 13119300691281647499u, 11598915938798661975u,         164206878714u },\r\n  { 10125549106595354099u, 17821633264606555643u,         250628778492u },\r\n  { 17505352699870800544u,  2514623558764574316u,         252966112675u },\r\n  {  6756039242241163264u,  4976730480406253215u,         163136318016u },\r\n  {  3537338758766526464u, 17276563697191611637u,          64269789099u },\r\n  {  6522626374119718912u, 12524734095940998814u,         171936564394u },\r\n  {  4733294203482669056u, 15331551308930355164u,         170678967195u },\r\n  { 16997710893603094528u, 15417115581125943816u,         155831125061u },\r\n  { 16717361816799281152u,  6010750237807115593u,          69835763510u },\r\n  {                    0u,  5624630987553628432u,          54325843423u },\r\n  {                    0u, 14881848243837640704u,         223304911856u },\r\n  {                    0u, 15281613886881529856u,         240806746609u },\r\n  {                    0u, 14057902358273196032u,         241828417948u },\r\n  {                    0u, 16075318494433902592u,         156762080413u },\r\n  {                    0u, 13891916000577716224u,         157871444761u },\r\n  {                    0u,  7205759403792793600u,          25753082275u },\r\n  {                    0u,                    0u,         163390625000u },\r\n  {                    0u,                    0u,         232000000000u },\r\n  {  3943737498063000362u,                67833u,                    0u },\r\n  {  2870731037991212489u,       67833213790438u,                    0u },\r\n  {  7389433400402095883u,  4535831408134330609u,                 3677u },\r\n  {  5675049236146197433u,  6204770794376564579u,          93245887913u },\r\n  {  9953779846262904264u, 13869812122751887467u,         169336361298u },\r\n  { 12691978937179636241u, 14253229412394467550u,          82751884021u },\r\n  { 15523327331528198029u, 12776557610216045332u,         245772669114u },\r\n  { 15722603279568118520u, 16493640728678654060u,         186692618575u },\r\n  { 11838632364171816147u,  9434398296825833151u,          79894122055u },\r\n  {  7832751832367143680u,  8773374058285327850u,          71511439756u },\r\n  { 12167724027162940862u, 12932015276748029367u,         140475605560u },\r\n  {  4108211144748152962u, 16293958583527755209u,          56701045952u },\r\n  {  7530983398136343676u, 13511893936143127948u,         192883297264u },\r\n  {  1117587133956542355u, 18409936402005226436u,         240732481237u },\r\n  { 17134748625149490872u,  2189663026458466887u,         213998004652u },\r\n  {  4039918359454207848u,  9497725274248154664u,         172118701870u },\r\n  {  1830218764589441242u, 14766925481127792125u,          46514872718u },\r\n  {   637895981480825742u,  6982373971809635814u,         142800516634u },\r\n  {  8246879226348334620u,  8616702383006884794u,          26378515251u },\r\n  { 12389239568142583275u,  3059473300040871066u,          51467112372u },\r\n  { 14041257178803154398u, 17123843157031495558u,         180165854379u },\r\n  { 16312515716494630702u, 11210627174210626524u,         171928285397u },\r\n  { 17088522799596987756u, 15868067138625928592u,         213607729316u },\r\n  {  3588932524637852678u,  4467869511636937589u,         164860209643u },\r\n  {   107218049069817414u, 10052108125844341766u,         235242203691u },\r\n  {  1596707240462008334u,  7470588003218451534u,          43544925873u },\r\n  { 17461913142391587672u,  2613527085490786280u,         177404981387u },\r\n  {  4366474266651610090u,  3632919450036549616u,         139141679587u },\r\n  {  5539304013194805084u,   179367907231218916u,         227196940958u },\r\n  {  4762470619211987849u, 13553068184555874624u,         158009723553u },\r\n  { 10835638458986644717u,  8798774862365584481u,         161734713298u },\r\n  { 16141642290510052058u,   910911255817064881u,         210476982541u },\r\n  { 17390568670756355425u,  2304331144765093813u,          13049380598u },\r\n  { 12536768491333867107u, 12248937023083640360u,         246124918041u },\r\n  { 13145148522871947193u, 10206039550662130685u,          25664016206u },\r\n  {  5665349945233068642u, 12267881323837852537u,          78553270512u },\r\n  { 17074607537751066240u,  2858642007937891971u,         240665043179u },\r\n  {  6241525660962062336u, 14171330289750320841u,         235154967293u },\r\n  {  1142860629783085056u,  6601103619749017720u,         253768229354u },\r\n  { 16287527416870469632u,  4919573414486739494u,         234357846544u },\r\n  {  9028002014738513920u,  3401998285294974486u,          16266690609u },\r\n  { 16217462258161156096u, 10799436256515532233u,          49184422696u },\r\n  { 11529215046068469760u, 10083786644665753398u,          40585438612u },\r\n  {                    0u,  6481194517685688896u,         148546643169u },\r\n  {                    0u, 15104161756860547072u,         225351346258u },\r\n  {                    0u,  9556039274244079616u,          82818798249u },\r\n  {                    0u,  1376343134954323968u,         169518033927u },\r\n  {                    0u, 15682488278596976640u,           7074611710u },\r\n  {                    0u,  1506454075355430912u,         254850149393u },\r\n  {                    0u,  1152921504606846976u,          17081665039u },\r\n  {                    0u,                    0u,          15062500000u },\r\n  {                    0u,                    0u,         160000000000u },\r\n  { 12170458846894708007u,           1035052700u,                    0u },\r\n  {  1797330480103086687u,  1035052700659761896u,                    0u },\r\n  { 10332188564497263448u,  6172559441576707976u,             56110319u },\r\n  {  7524259485079594225u, 15083329738554729992u,         239334615117u },\r\n  {    62681109059153749u, 10013126833549229036u,          77817668943u },\r\n  { 13480636451804037081u,  5817156823499936061u,          79542812693u },\r\n  {  6948168233012789004u,  5282692560913632718u,          21315348703u },\r\n  { 12015502974041806055u, 10252307034225766362u,         223286375337u },\r\n  {  7343801660689004040u, 17981881283247669689u,         169555778677u },\r\n  { 13670580858640731144u, 11689290159733383293u,         117974799737u },\r\n  {  5605073897566574851u,  5530668968487988249u,         121633677689u },\r\n  { 15387788940505247559u, 10083765740821947024u,         121299818165u },\r\n  { 17565181499678113030u,  2798423656816843533u,         181546642036u },\r\n  {  1893743623847493029u,  7614494481582904797u,         116151702850u },\r\n  { 10243498996716269784u, 17811318500083423695u,          66412782572u },\r\n  {  5619675836950314139u, 11641467412200329033u,         236965553510u },\r\n  { 10224869737511515088u, 17733593025296340645u,         102631085212u },\r\n  {  2574495974386198538u,  3689424000190644835u,         156961340004u },\r\n  {  7825756347302873178u, 14966634145516728506u,         100200004075u },\r\n  { 12071550103794656887u, 14171681941562070109u,         235811342862u },\r\n  {  7195875213867606691u,  8130575762882608170u,          14768248417u },\r\n  { 18271364438406891044u,  5234550794400656856u,          97440759395u },\r\n  { 16966521933952564706u,  3020576149360486378u,          99283765567u },\r\n  {   289920862029570129u,  3038675756589057221u,          63163745761u },\r\n  {  7804199568098625032u, 15470260187120878369u,         225164726942u },\r\n  {  5758118571242446585u,  3497929414841828746u,         158838644485u },\r\n  {  4030788293606375591u,  9935840636861015305u,           5189623133u },\r\n  {  4387716460037196127u,  3647355485153741471u,          93538623000u },\r\n  { 16807506478881285981u,   766100215038272793u,          24197723537u },\r\n  { 17033060604413529717u, 16128087474216800751u,         145041530375u },\r\n  { 10498418508292170054u, 16216631732633731297u,           7874305373u },\r\n  { 13237752038744465016u, 13760220872779997335u,          93879105367u },\r\n  { 17737618428304633155u,  3826276262374222087u,          87745943068u },\r\n  { 13546183833248825736u, 14938032745839181005u,          28207422851u },\r\n  {   826778452978976229u, 14479259995009508865u,         131809792377u },\r\n  { 13728076626990147292u,  2372033248156102437u,         121784922257u },\r\n  {  2794860281883592225u,   792005346826701645u,         145128588180u },\r\n  {  8680705720425908736u, 16278924527931792559u,         148042934695u },\r\n  {   731520517439488000u, 17442516423538940144u,         167882482266u },\r\n  { 13120812320768917504u,    13844184233048446u,          90945560710u },\r\n  {  2722954908557901824u, 13486193870480782357u,         134000750494u },\r\n  {  6860847004205973504u, 11931315179184648737u,         158731088034u },\r\n  {  6503197861922996224u, 16492562205587485405u,         162646797891u },\r\n  {  9223372036854775808u, 12128987217680380854u,          67894063588u },\r\n  {                    0u, 10568123814189138176u,         228657513714u },\r\n  {                    0u, 17007583519117541376u,         242572899139u },\r\n  {                    0u,   143791533903052800u,          67921982950u },\r\n  {                    0u, 12398714235792654336u,         230007794954u },\r\n  {                    0u,  9659957317919047680u,          10672135645u },\r\n  {                    0u,  9412523221204336640u,         221523667335u },\r\n  {                    0u,  4611686018427387904u,         135510253906u },\r\n  {                    0u,                    0u,          82250000000u },\r\n  {                    0u,                    0u,         128000000000u },\r\n  { 12005656413127238315u,                15793u,                    0u },\r\n  {  4821130826186787462u,       15793650827938u,                    0u },\r\n  { 14377899467066168118u,  3237900842885170729u,                  856u },\r\n  { 16575613239625444872u,  7515893506498066595u,          88175526956u },\r\n  {  4317827099179284377u,  7300206309181072546u,          44407437403u },\r\n  {  1242354770412171254u,     5999737279837044u,          91395744977u },\r\n  {   994838588328896609u,  7556839307242450651u,         209000325246u },\r\n  { 17283309862013060457u, 12946035041643640643u,         126409657079u },\r\n  {   124242522249856586u, 15885877642352740665u,         247701805965u },\r\n  { 11564608014666985609u, 10770818348246089568u,         141861175152u },\r\n  { 12401028575581654085u, 11635415503599551744u,         112583887232u },\r\n  {  2490725392961465727u,  6248053924100826098u,         128630757138u },\r\n  {  1949482237120640915u, 16894170802729859998u,          18338707681u },\r\n  { 15410502396166200087u,  6143589029651889899u,         225915834834u },\r\n  { 15694919529799920727u, 11812087701837886160u,         210333044628u },\r\n  { 10324869370171768388u,  7306705080150829180u,         148640334557u },\r\n  {  1631866459122189059u,  1485332570280714274u,         221396097276u },\r\n  {   172020494461226230u, 18042602303295630634u,         252080520039u },\r\n  { 12734610307908856767u, 13397029889257074369u,         103978091430u },\r\n  {  1467513250829340930u,  9948104869613411488u,         166726254445u },\r\n  { 13558759428494307997u, 10836066241170646532u,         109539287845u },\r\n  {  7915355143999496434u, 18330574781234459389u,          37587424327u },\r\n  {  2876370200608797469u,   666297360208433062u,          71993702450u },\r\n  {   343685370404989503u,  5035352224889324309u,          50036120052u },\r\n  {  4837266557407634630u,  1341745796439923765u,         244272966991u },\r\n  {  9622591415747161468u,  6846932182653803785u,          79072736185u },\r\n  { 16503783814424220982u,  6727685027257825533u,         185371172937u },\r\n  {  5377083431343591334u,  2168538874806877737u,          73364708536u },\r\n  { 16508482371299291595u, 17694936100676971444u,         184117556727u },\r\n  { 10515883558812249028u,  2163944241059563294u,         247959244408u },\r\n  {    63492062913405476u,  6727780864524301558u,         120117307652u },\r\n  { 11571919759617799697u,  8599551977795002615u,           4364713731u },\r\n  {  2956602334970088581u, 15428264807806859091u,           3466182646u },\r\n  { 13604736747717849839u,  2126771385339683557u,         246836367911u },\r\n  { 16573540719338151362u, 15094316562082972944u,          39115292507u },\r\n  { 12620703004601168151u,  8111300598225956802u,          91818264540u },\r\n  { 14649407809089591941u,  9481215200564260304u,         220439714486u },\r\n  { 11290375247898624432u, 16836674128623424708u,         182513977705u },\r\n  { 11020319450292874212u,  7087243115299722740u,         105912717933u },\r\n  {  8754634933362354176u,  2343560867338408810u,         109384200219u },\r\n  { 12976319450332528640u,  3431385749090422286u,          27127044689u },\r\n  { 17447331119627239424u,  3504545517469224582u,          81186015794u },\r\n  {  3665184902673858560u,  3333759805712094227u,          50189981793u },\r\n  { 12949678516038795264u,  3595183476205994775u,          97180723481u },\r\n  {    72057594037927936u, 14191566632569921303u,          25194895286u },\r\n  {                    0u, 12917427671358095562u,         182769326368u },\r\n  {                    0u,  3883793922738316288u,          32700255157u },\r\n  {                    0u,  7857281689266421760u,         181210540890u },\r\n  {                    0u, 15987081651486195712u,          90425944093u },\r\n  {                    0u, 16827562156399525888u,          29866661432u },\r\n  {                    0u,  7012737938513461248u,          56912223972u },\r\n  {                    0u,  7385903388887613440u,         228380161285u },\r\n  {                    0u,                    0u,           5400390625u },\r\n  {                    0u,                    0u,         225000000000u },\r\n  {  9413159735776077452u,            240991986u,                    0u },\r\n  { 14279163482889998017u,   240991986510288411u,                    0u },\r\n  {  8693044629541194274u, 14135788013842776187u,             13064201u },\r\n  { 11863110253260222498u, 13284322918167594445u,           9766302603u },\r\n  {  8319293368489531245u,  7264587765474046287u,         139720144588u },\r\n  {  3376307525676489265u, 16176482219778368741u,         204393814091u },\r\n  { 13205662254759912523u,  5401983818872095469u,          75876928858u },\r\n  {  5276250334231686323u, 11208857446851049921u,          90292842129u },\r\n  { 13790198520922745052u, 13794690008281035639u,         145607633379u },\r\n  { 14195535250150996227u, 14519782740993303071u,         227747811643u },\r\n  { 16425228796427004035u, 10885858587044789123u,          59787118999u },\r\n  {  4295900841296269186u,  8710500938899914621u,         151590123576u },\r\n  {  4533952595483946442u,  1284182587483102819u,          56472197202u },\r\n  { 12885038019373447184u, 10346074482131502030u,          82069615677u },\r\n  { 12140736240487831910u,  9429804686255246574u,          61560861821u },\r\n  {  6927124077155322074u,  6412022633845121254u,         125511190736u },\r\n  { 12477788342407819890u,  8892351297529018260u,         208347596443u },\r\n  {  7980854329409711087u, 14098160105983060597u,         155482055329u },\r\n  {  2062671021810827996u, 13793833029739474340u,         161764262790u },\r\n  {  2739521363598172769u, 16367653765996977044u,         134747765186u },\r\n  { 12897585686593465638u, 10684788343333772342u,         194887292288u },\r\n  {  1127632646629044686u, 13272681218705145345u,         128579223536u },\r\n  {  4833775019274666364u, 11093568615497829248u,         240719513490u },\r\n  { 15867662672939849256u, 12488220765137758124u,         146601383559u },\r\n  {  2092350330982953557u,  3727114642519696453u,         135676987804u },\r\n  { 13330062299842493592u, 11549865375695057514u,         156202047289u },\r\n  {  4479193352178519263u, 11292809154908783229u,          57626119456u },\r\n  {  3149393938889064983u, 17723904861837310998u,          32612184410u },\r\n  {  9736379904070620767u, 14877674388187150875u,          90960814807u },\r\n  {  3816238703055069186u, 12178961950105734308u,         215806520344u },\r\n  { 11598915938798661975u,  4540604068069253114u,          24660222850u },\r\n  { 17821633264606555643u, 13832478722153359868u,         130246146639u },\r\n  {  2514623558764574316u,  1308046668730371491u,          79749860174u },\r\n  {  4976730480406253215u, 18400531023544756800u,          78070909351u },\r\n  { 17276563697191611637u,  9789823458621466539u,         167997494785u },\r\n  { 12524734095940998814u,  1924870562610267306u,           1530707393u },\r\n  { 15331551308930355164u,  5290016144582400923u,         193104347442u },\r\n  { 15417115581125943816u, 15162883663174059077u,          50286772349u },\r\n  {  6010750237807115593u,  8078086116520046390u,         125821981570u },\r\n  {  5624630987553628432u, 15731407332173190623u,         130437913925u },\r\n  { 14881848243837640704u,  5346389182763011056u,          69852801300u },\r\n  { 15281613886881529856u,  6368422217216252401u,          20289828338u },\r\n  { 14057902358273196032u,  2961453088119116188u,         242345232860u },\r\n  { 16075318494433902592u, 10932141691610170525u,         220160540693u },\r\n  { 13891916000577716224u, 11034016191361782553u,          21592632588u },\r\n  {  7205759403792793600u,  5455325785621453219u,          12598155216u },\r\n  {                    0u,  7735615202566149352u,         208295733803u },\r\n  {                    0u,  7502396497775759360u,          43419348540u },\r\n  {                    0u,  1601286435751591936u,          60406705729u },\r\n  {                    0u, 11449383158571597824u,          65086805911u },\r\n  {                    0u, 13043944595690356736u,         151620672304u },\r\n  {                    0u,  7773494431818186752u,          48707113653u },\r\n  {                    0u,  9943947977234055168u,         181421401977u },\r\n  {                    0u,                    0u,         121539062500u },\r\n  {                    0u,                    0u,         228000000000u },\r\n  {  4535831408134330609u,                 3677u,                    0u },\r\n  {  6204770794376564579u,        3677245887913u,                    0u },\r\n  { 13869812122751887467u,  6343817245135589714u,                  199u },\r\n  { 14253229412394467550u, 17549323075660516085u,         199343899021u },\r\n  { 12776557610216045332u,  3948641822109421754u,         141951350710u },\r\n  { 16493640728678654060u,  1750739713693534543u,         182214056302u },\r\n  {  9434398296825833151u,   962163898128633415u,         110094907790u },\r\n  {  8773374058285327850u,  7967320249386531212u,         142052159009u },\r\n  { 12932015276748029367u,  3018466665533383224u,          33431909296u },\r\n  { 16293958583527755209u, 15076865731854945472u,         176163631405u },\r\n  { 13511893936143127948u,   691187172844604400u,          45817318529u },\r\n  { 18409936402005226436u, 13274492813370992341u,         129037469331u },\r\n  {  2189663026458466887u,  6364168818499152300u,         147719611697u },\r\n  {  9497725274248154664u, 17599380787401914158u,          49345002282u },\r\n  { 14766925481127792125u,  3782323149461692814u,          42954064344u },\r\n  {  6982373971809635814u, 14470163442442237466u,         216205040148u },\r\n  {  8616702383006884794u,   476109872130437939u,          20784429132u },\r\n  {  3059473300040871066u, 16330548844673355700u,          76025809967u },\r\n  { 17123843157031495558u, 14089158961463739563u,          47885280826u },\r\n  { 11210627174210626524u, 13385510793074798805u,          58763774837u },\r\n  { 15868067138625928592u,  1549401308746959012u,         117725629994u },\r\n  {  4467869511636937589u,  4607384943843027435u,          42083993213u },\r\n  { 10052108125844341766u,  5157353797716093483u,         125249766838u },\r\n  {  7470588003218451534u, 10846828782671550129u,         182279580709u },\r\n  {  2613527085490786280u,  9915857350819131531u,          37588007766u },\r\n  {  3632919450036549616u,  1673544973504317923u,          86537539704u },\r\n  {   179367907231218916u, 14780986291622785694u,         120090723054u },\r\n  { 13553068184555874624u,  8168111319515466401u,         238801278872u },\r\n  {  8798774862365584481u, 16345760387859734482u,         152442794201u },\r\n  {   910911255817064881u,  3177475373321281805u,         217886105446u },\r\n  {  2304331144765093813u,  2558676822419554038u,         102172251285u },\r\n  { 12248937023083640360u,  8813474062662382873u,         149138706148u },\r\n  { 10206039550662130685u,  5426294560236228430u,         228477779386u },\r\n  { 12267881323837852537u,  9919177474128333040u,         186294160017u },\r\n  {  2858642007937891971u,  6197383943089627371u,         145537719688u },\r\n  { 14171330289750320841u, 13673239314867423997u,         136335960856u },\r\n  {  6601103619749017720u,  9309584098968723946u,          24741227788u },\r\n  {  4919573414486739494u,  4647101757759615504u,          12504673565u },\r\n  {  3401998285294974486u,  1405809295505096753u,          29251919891u },\r\n  { 10799436256515532233u, 11332704079573859112u,          19076209074u },\r\n  { 10083786644665753398u,  2960072434514044308u,         178614347119u },\r\n  {  6481194517685688896u,  3887266602785432801u,         111160465848u },\r\n  { 15104161756860547072u, 14545546084687849554u,         184210729144u },\r\n  {  9556039274244079616u,  4617763804182385321u,         184788515633u },\r\n  {  1376343134954323968u,  7857823815580249095u,          49250329477u },\r\n  { 15682488278596976640u, 10939326736548364798u,         133425973482u },\r\n  {  1506454075355430912u, 12262012446566951953u,         234593022090u },\r\n  {  1152921504606846976u, 12555024338687723023u,         138664725026u },\r\n  {                    0u,  3332969632922829472u,          34680609233u },\r\n  {                    0u, 15535060143360327680u,         209180680645u },\r\n  {                    0u, 15794322927987458048u,         197842157297u },\r\n  {                    0u, 10571474314433921024u,         241856211961u },\r\n  {                    0u, 16679514427547975680u,         249573080770u },\r\n  {                    0u, 16925653299565166592u,         194904198288u },\r\n  {                    0u, 16717361816799281152u,         144917541503u },\r\n  {                    0u,                    0u,         127906250000u },\r\n  {                    0u,                    0u,          16000000000u },\r\n  {  6172559441576707976u,             56110319u,                    0u },\r\n  { 15083329738554729992u,    56110319334615117u,                    0u },\r\n  { 10013126833549229036u,  9335385384027907407u,              3041746u },\r\n  {  5817156823499936061u, 13237828406194798613u,         210506072255u },\r\n  {  5282692560913632718u, 15667486867836528863u,         191717624115u },\r\n  { 10252307034225766362u, 17982325043592934313u,          51849336164u },\r\n  { 17981881283247669689u, 17159117626917379189u,         100974823793u },\r\n  { 11689290159733383293u,  8336208968408929657u,         113930197630u },\r\n  {  5530668968487988249u, 12767090573379150201u,         126451906793u },\r\n  { 10083765740821947024u, 14736070002412246709u,         233692105366u },\r\n  {  2798423656816843533u,  9697296975344560756u,         150798843955u },\r\n  {  7614494481582904797u,  7291706381199103298u,          51525691522u },\r\n  { 17811318500083423695u, 18098546597780825068u,         130395284194u },\r\n  { 11641467412200329033u,   132913902678533478u,         226981124177u },\r\n  { 17733593025296340645u,  1879347741692007580u,          81007205277u },\r\n  {  3689424000190644835u,  4056624629214083684u,         157101879645u },\r\n  { 14966634145516728506u, 14713227692042795499u,          93219910061u },\r\n  { 14171681941562070109u,  7366415124022528526u,         173797605671u },\r\n  {  8130575762882608170u,   825770353378039393u,          39399334164u },\r\n  {  5234550794400656856u, 10244023944395357795u,          20044765100u },\r\n  {  3020576149360486378u, 14302658294713551167u,         172555329650u },\r\n  {  3038675756589057221u, 14246653166206862817u,         114775348659u },\r\n  { 15470260187120878369u, 12404486258134291102u,         179772312615u },\r\n  {  3497929414841828746u,  8887442218637942533u,          39672448547u },\r\n  {  9935840636861015305u,  1186724038081863005u,          35481789208u },\r\n  {  3647355485153741471u,   211331772484951576u,          24064332439u },\r\n  {   766100215038272793u,  6311919513247413649u,         151011456318u },\r\n  { 16128087474216800751u,  8131780018703965703u,          62342169842u },\r\n  { 16216631732633731297u,  2262544347226725725u,         242440824678u },\r\n  { 13760220872779997335u, 15318188749880522583u,         102122652774u },\r\n  {  3826276262374222087u,  1073117094162650652u,         102830400676u },\r\n  { 14938032745839181005u,  4447950380665871747u,         164058173794u },\r\n  { 14479259995009508865u,  5373227185066463609u,          98241123873u },\r\n  {  2372033248156102437u,  6739731406934274193u,          33291283229u },\r\n  {   792005346826701645u, 12328812617001239444u,          29365361571u },\r\n  { 16278924527931792559u,  3246111484407310759u,         163668346271u },\r\n  { 17442516423538940144u,  3250825415176839770u,         159175972056u },\r\n  {    13844184233048446u, 16146270540000862342u,         216176227598u },\r\n  { 13486193870480782357u, 15686773375425916830u,          14875291079u },\r\n  { 11931315179184648737u, 11920791905793880226u,         199850381688u },\r\n  { 16492562205587485405u,  1853290561644080707u,         120646227424u },\r\n  { 12128987217680380854u, 12157689141506159076u,         224100467082u },\r\n  { 10568123814189138176u, 18100318838862562546u,         138659069648u },\r\n  { 17007583519117541376u,  7171257882533475139u,         208981220250u },\r\n  {   143791533903052800u, 14477550873015039462u,         154388754668u },\r\n  { 12398714235792654336u,  8109481182495403274u,         236784829605u },\r\n  {  9659957317919047680u, 14565395719337663965u,         165439615855u },\r\n  {  9412523221204336640u,  1860318978161305991u,         111789591684u },\r\n  {  4611686018427387904u, 16268646275151585618u,         132100848093u },\r\n  {                    0u, 13759019338835519104u,         221881925081u },\r\n  {                    0u, 17003783176010661888u,         217745877932u },\r\n  {                    0u, 18357489540307877888u,         172921776932u },\r\n  {                    0u,   905481790074912768u,          36995161502u },\r\n  {                    0u,  3638882110636294144u,         158049086266u },\r\n  {                    0u,  9011702854368362496u,          58197264194u },\r\n  {                    0u, 11529215046068469760u,          66488525390u },\r\n  {                    0u,                    0u,          78625000000u },\r\n  {                    0u,                    0u,          64000000000u },\r\n  {  3237900842885170729u,                  856u,                    0u },\r\n  {  7515893506498066595u,         856175526956u,                    0u },\r\n  {  7300206309181072546u,  7625299565768063067u,                   46u },\r\n  {     5999737279837044u, 13889021769065194705u,          46413368317u },\r\n  {  7556839307242450651u, 14498170692313014398u,         253752925378u },\r\n  { 12946035041643640643u,  1541631360972245751u,         194785947408u },\r\n  { 15885877642352740665u,  9903958882920799117u,          16083572003u },\r\n  { 10770818348246089568u, 15744148547788062576u,          35536894686u },\r\n  { 11635415503599551744u, 17936061801321712000u,         222853492002u },\r\n  {  6248053924100826098u,  9986394078324430610u,          34972315858u },\r\n  { 16894170802729859998u, 13849561248103430369u,         210541363507u },\r\n  {  6143589029651889899u, 12142378807953854930u,          51750786219u },\r\n  { 11812087701837886160u,  2513847703931031444u,         171658239674u },\r\n  {  7306705080150829180u,  1752183758129038045u,         186136275957u },\r\n  {  1485332570280714274u, 15824833342220556540u,         245094986071u },\r\n  { 18042602303295630634u,  8168747198299470695u,          87857865934u },\r\n  { 13397029889257074369u, 17414799840149357478u,         206442828672u },\r\n  {  9948104869613411488u,    83147520704167789u,         128944058191u },\r\n  { 10836066241170646532u,  2383542703041471269u,          79004507436u },\r\n  { 18330574781234459389u, 15540952725549257799u,          44129212108u },\r\n  {   666297360208433062u,  6949835416232048690u,         204842476735u },\r\n  {  5035352224889324309u, 15398868937585367540u,         191376751332u },\r\n  {  1341745796439923765u, 14710915985268256079u,         228834774357u },\r\n  {  6846932182653803785u,  9665704836873335737u,          85797480353u },\r\n  {  6727685027257825533u,  2528789298740305993u,         161523978909u },\r\n  {  2168538874806877737u, 10562914675687726264u,         157137085942u },\r\n  { 17694936100676971444u, 17671658300096837111u,         246572616751u },\r\n  {  2163944241059563294u,   356471401631698552u,          47957982516u },\r\n  {  6727780864524301558u,  7450677157218003204u,          52019324353u },\r\n  {  8599551977795002615u,   317174560787152643u,         193403902018u },\r\n  { 15428264807806859091u,  7251937674440720374u,          66017194067u },\r\n  {  2126771385339683557u,  1252631516699038247u,          83393128329u },\r\n  { 15094316562082972944u, 10818009768860843867u,         137067905290u },\r\n  {  8111300598225956802u, 12330114194950162396u,          10586445484u },\r\n  {  9481215200564260304u, 15826681638261168822u,         172668416829u },\r\n  { 16836674128623424708u, 14240150078499211625u,          61857966130u },\r\n  {  7087243115299722740u, 10725372116242125421u,          50771960082u },\r\n  {  2343560867338408810u,  8434925524647833627u,          18581423587u },\r\n  {  3431385749090422286u, 17133902668520348241u,         227457258228u },\r\n  {  3504545517469224582u, 15093996047981365810u,         244928830724u },\r\n  {  3333759805712094227u,  6187974166976813153u,           4818247165u },\r\n  {  3595183476205994775u, 13946144707720259865u,         253335450751u },\r\n  { 14191566632569921303u,  9138079832881862582u,         127756022019u },\r\n  { 12917427671358095562u,  6600697628576225568u,           3495376300u },\r\n  {  3883793922738316288u,  8137099536646556597u,         172357824535u },\r\n  {  7857281689266421760u, 14169855543453903706u,          23441113049u },\r\n  { 15987081651486195712u,  3706403268650100765u,         217768149408u },\r\n  { 16827562156399525888u, 14736932266877982264u,         160200924523u },\r\n  {  7012737938513461248u, 18004795125138956004u,         107798890698u },\r\n  {  7385903388887613440u,  9068489270661002501u,         202976041899u },\r\n  {                    0u,  7758835715193269217u,         171491603788u },\r\n  {                    0u, 16943947811135261184u,          76420607326u },\r\n  {                    0u,  6745843108403216384u,          94918533251u },\r\n  {                    0u, 12338229654069444608u,         131365692887u },\r\n  {                    0u, 14358176069683511296u,         215668856769u },\r\n  {                    0u,  7083775185760813056u,         193778358284u },\r\n  {                    0u,  5350276357316149248u,          12384012222u },\r\n  {                    0u,  9223372036854775808u,         190290039062u },\r\n  {                    0u,                    0u,          22500000000u },\r\n  { 14135788013842776187u,             13064201u,                    0u },\r\n  { 13284322918167594445u,    13064201766302603u,                    0u },\r\n  {  7264587765474046287u, 14699116688460625612u,               708211u },\r\n  { 16176482219778368741u,  6684126021499623499u,         115796840712u },\r\n  {  5401983818872095469u, 12614606079692508506u,           8362347197u },\r\n  { 11208857446851049921u, 15358270276683001489u,         189683839165u },\r\n  { 13794690008281035639u, 18077126190953408995u,         189832573499u },\r\n  { 14519782740993303071u,  7864121581925945659u,          59979962974u },\r\n  { 10885858587044789123u,  3518026639210514839u,          94426314885u },\r\n  {  8710500938899914621u,  4698310163811252280u,         133190712606u },\r\n  {  1284182587483102819u,  6101155398200416338u,          30254695904u },\r\n  { 10346074482131502030u, 16049178580360033341u,         224330744296u },\r\n  {  9429804686255246574u,  3167464649127375997u,         232870027714u },\r\n  {  6412022633845121254u, 12778923935480989904u,         194171708602u },\r\n  {  8892351297529018260u, 11875553912612980379u,         186692746854u },\r\n  { 14098160105983060597u, 10628760849351697057u,         102643775067u },\r\n  { 13793833029739474340u,  3408944711673234310u,          91576186280u },\r\n  { 16367653765996977044u,  2102091496050506178u,         168184799263u },\r\n  { 10684788343333772342u,  6254611118630245760u,          31113954608u },\r\n  { 13272681218705145345u,  2647941151989776368u,          48339063148u },\r\n  { 11093568615497829248u,  8855437735410157458u,         108143545177u },\r\n  { 12488220765137758124u, 10184270603132180103u,          89480054241u },\r\n  {  3727114642519696453u, 12079083162535627164u,         225552090415u },\r\n  { 11549865375695057514u,  5952952868716156729u,          47654808410u },\r\n  { 11292809154908783229u, 11958907037815852320u,          90322710221u },\r\n  { 17723904861837310998u, 10101562137321697626u,         205648293649u },\r\n  { 14877674388187150875u, 13633527411279258327u,          17547606780u },\r\n  { 12178961950105734308u, 16555627393501768728u,         252739075001u },\r\n  {  4540604068069253114u,  6359650463500280706u,         185897482359u },\r\n  { 13832478722153359868u,  8093923611102181967u,         119344757342u },\r\n  {  1308046668730371491u,  2848827352928635726u,          94438772478u },\r\n  { 18400531023544756800u,  4686723431961561511u,         254154435240u },\r\n  {  9789823458621466539u,  6245554925867652609u,         168254067786u },\r\n  {  1924870562610267306u, 17527406820792516033u,          74338572210u },\r\n  {  5290016144582400923u, 12119966834653692210u,         178950162627u },\r\n  { 15162883663174059077u, 11606502845877928061u,         195657024718u },\r\n  {  8078086116520046390u,   424311496652297090u,         206629189780u },\r\n  { 15731407332173190623u,  5977664048034127173u,         148023001972u },\r\n  {  5346389182763011056u,  6702712461535947028u,         116324049817u },\r\n  {  6368422217216252401u, 11384349854055020018u,         153363354770u },\r\n  {  2961453088119116188u,  3782955013294836188u,         146617146842u },\r\n  { 10932141691610170525u,  3531805968821207061u,         218205074402u },\r\n  { 11034016191361782553u,  3867566898657193228u,         226191459585u },\r\n  {  5455325785621453219u, 12688734637425072080u,           1209661221u },\r\n  {  7735615202566149352u, 18435982764454619691u,          37687857682u },\r\n  {  7502396497775759360u,  4728836163964677692u,          18999416628u },\r\n  {  1601286435751591936u,  2120012917348838977u,          52256350722u },\r\n  { 11449383158571597824u,  9856965465824679831u,           2114926130u },\r\n  { 13043944595690356736u, 11217197671061248816u,          50534347168u },\r\n  {  7773494431818186752u,  3840562972677739189u,         160608085504u },\r\n  {  9943947977234055168u, 17104366978925258617u,            208197335u },\r\n  {                    0u, 16177877219841993444u,         215927229591u },\r\n  {                    0u,  7338522384267208704u,         151877004481u },\r\n  {                    0u, 10935240458612244480u,         193397822095u },\r\n  {                    0u,  1732868046462124032u,         143592800573u },\r\n  {                    0u,   557965042578882560u,          61093938965u },\r\n  {                    0u, 10454684322475540480u,          21030247345u },\r\n  {                    0u, 13907115649320091648u,         177566749572u },\r\n  {                    0u,                    0u,         132753906250u },\r\n  {                    0u,                    0u,          74000000000u },\r\n  {  6343817245135589714u,                  199u,                    0u },\r\n  { 17549323075660516085u,         199343899021u,                    0u },\r\n  {  3948641822109421754u, 14876458284855834550u,                   10u },\r\n  {  1750739713693534543u, 10450704926982265198u,          10806454419u },\r\n  {   962163898128633415u,  5385653213018257806u,         147566533849u },\r\n  {  7967320249386531212u, 12735569669880147489u,         217291956845u },\r\n  {  3018466665533383224u,  3619762560577729456u,         109690396615u },\r\n  { 15076865731854945472u, 11123448126624084269u,         199196227721u },\r\n  {   691187172844604400u,  4072715118852885633u,         137603003331u },\r\n  { 13274492813370992341u, 18239087231420827283u,         195220782328u },\r\n  {  6364168818499152300u,   423431461216085297u,         248988742900u },\r\n  { 17599380787401914158u,  9360976716520160042u,         244022954265u },\r\n  {  3782323149461692814u, 11655927117263208920u,          25507459564u },\r\n  { 14470163442442237466u,  2646622721938364948u,         236631869075u },\r\n  {   476109872130437939u,  4496462484548171852u,         147143473705u },\r\n  { 16330548844673355700u, 13140258519803350063u,          41243753719u },\r\n  { 14089158961463739563u, 13089764333320627770u,         247712334841u },\r\n  { 13385510793074798805u,  6926286827289840501u,         249709597546u },\r\n  {  1549401308746959012u,  4985580225290866218u,         106375474761u },\r\n  {  4607384943843027435u, 10478790837359789693u,          73270268845u },\r\n  {  5157353797716093483u, 10041191967455692214u,         173568056389u },\r\n  { 10846828782671550129u,  5035461258013813797u,          69544334107u },\r\n  {  9915857350819131531u, 14208759661559249750u,          27272972901u },\r\n  {  1673544973504317923u, 12347272163241758840u,         101770258404u },\r\n  { 14780986291622785694u,  3372534174410277614u,         228669346965u },\r\n  {  8168111319515466401u, 17226704187274712984u,         149182825443u },\r\n  { 16345760387859734482u,  4250480179449852121u,         227933861505u },\r\n  {  3177475373321281805u,  4303723537755414374u,         129230418992u },\r\n  {  2558676822419554038u,  8680503847344854165u,          48233305320u },\r\n  {  8813474062662382873u,  8817608623911079652u,         232470571056u },\r\n  {  5426294560236228430u,  5692030448698539450u,          48478003521u },\r\n  {  9919177474128333040u, 16908836314686769809u,          65308565588u },\r\n  {  6197383943089627371u,  6073762347067727240u,          84916629853u },\r\n  { 13673239314867423997u, 10931066692585106200u,          93329259316u },\r\n  {  9309584098968723946u, 14466591364061539596u,          52592574312u },\r\n  {  4647101757759615504u,  4958077340960173341u,         104784235489u },\r\n  {  1405809295505096753u,  4076890037156765715u,         225268777911u },\r\n  { 11332704079573859112u, 14083973146609179058u,         183221008651u },\r\n  {  2960072434514044308u,  2565183738039805295u,          11763493714u },\r\n  {  3887266602785432801u,  1482420938751351224u,          82139058889u },\r\n  { 14545546084687849554u,  2151089495335413944u,         201080362200u },\r\n  {  4617763804182385321u,  3738604531753220913u,         216116610795u },\r\n  {  7857823815580249095u, 14195686514836005765u,         235202670157u },\r\n  { 10939326736548364798u, 17808833916231796970u,          77769549707u },\r\n  { 12262012446566951953u,  1302384553035657354u,         139965418821u },\r\n  { 12555024338687723023u,  1672033517974833698u,          69070602408u },\r\n  {  3332969632922829472u, 11673925532927662545u,         168090641118u },\r\n  { 15535060143360327680u,  3905334232240480709u,         222632844771u },\r\n  { 15794322927987458048u, 17411087320267472625u,         227211708592u },\r\n  { 10571474314433921024u, 16573305231063706617u,         176943856934u },\r\n  { 16679514427547975680u, 15481103236037148354u,          38898440676u },\r\n  { 16925653299565166592u,   907440704754420880u,         228839232288u },\r\n  { 16717361816799281152u,  3224970785139077759u,          32049192459u },\r\n  {                    0u, 10560826509734608144u,          11174826016u },\r\n  {                    0u,  4700940027512659968u,          32572503552u },\r\n  {                    0u,  9733694683502084096u,            254838469u },\r\n  {                    0u,  1995535635724632064u,         197527664646u },\r\n  {                    0u, 10629833226245373952u,           6108178203u },\r\n  {                    0u, 15729384648544878592u,          27576244413u },\r\n  {                    0u,  7205759403792793600u,         189852691650u },\r\n  {                    0u,                    0u,         194390625000u },\r\n  {                    0u,                    0u,         232000000000u },\r\n  {  9335385384027907407u,              3041746u,                    0u },\r\n  { 13237828406194798613u,     3041746506072255u,                    0u },\r\n  { 15667486867836528863u,  7535526066623007027u,               164893u },\r\n  { 17982325043592934313u, 11302146918409311588u,          29408501686u },\r\n  { 17159117626917379189u,  2480833299122194801u,         182612690612u },\r\n  {  8336208968408929657u, 11513226205589330558u,         180134486242u },\r\n  { 12767090573379150201u,  4073957068281936105u,         226624133243u },\r\n  { 14736070002412246709u,  3729887061093812886u,         123220849655u },\r\n  {  9697296975344560756u, 13616911779739451443u,         247202197582u },\r\n  {  7291706381199103298u, 13039053282195777666u,          78738174266u },\r\n  { 18098546597780825068u, 14490756113210417890u,          58706848494u },\r\n  {   132913902678533478u, 17432486112977557585u,         238785545462u },\r\n  {  1879347741692007580u, 14308820825344039837u,         246945016965u },\r\n  {  4056624629214083684u,  4190949538817536349u,         133775682731u },\r\n  { 14713227692042795499u, 13616552502810964397u,         171227191829u },\r\n  {  7366415124022528526u,  4898145803694965031u,          21738154790u },\r\n  {   825770353378039393u,  1399036321001644308u,          38265529016u },\r\n  { 10244023944395357795u, 17170331128243738540u,         184075841910u },\r\n  { 14302658294713551167u, 10641321388205367410u,         118930805515u },\r\n  { 14246653166206862817u,  6648873641312572851u,          11576867188u },\r\n  { 12404486258134291102u,  5988456964560374823u,         116360436162u },\r\n  {  8887442218637942533u,  9972593758348346915u,         194324634902u },\r\n  {  1186724038081863005u, 16709668921872818968u,          22540615390u },\r\n  {   211331772484951576u,  6094829131503407767u,         222905832967u },\r\n  {  6311919513247413649u,  4892016478899926334u,           7330401349u },\r\n  {  8131780018703965703u, 13150857244079031538u,          69265196744u },\r\n  {  2262544347226725725u, 12983943395318785894u,         200712909399u },\r\n  { 15318188749880522583u, 15341644584614757478u,          87703860981u },\r\n  {  1073117094162650652u,  7507635124856644772u,         245831672219u },\r\n  {  4447950380665871747u, 11619655367084544354u,         155406989715u },\r\n  {  5373227185066463609u, 11553116952478783009u,         147629902779u },\r\n  {  6739731406934274193u, 17392150014233193245u,         187626295724u },\r\n  { 12328812617001239444u,  8877887560294980515u,         172942830341u },\r\n  {  3246111484407310759u, 18404180619915609503u,           5481271248u },\r\n  {  3250825415176839770u, 10079413095288181976u,         208997692630u },\r\n  { 16146270540000862342u, 14102802966539105550u,         214546406078u },\r\n  { 15686773375425916830u, 13333966026135891399u,         190764514480u },\r\n  { 11920791905793880226u, 12344968670173516152u,         176722835746u },\r\n  {  1853290561644080707u, 10577007819804726752u,          34669222092u },\r\n  { 12157689141506159076u, 15337041354031088010u,         204573380742u },\r\n  { 18100318838862562546u, 14333607285614673616u,         134831422677u },\r\n  {  7171257882533475139u, 17171597563219696538u,         213777026407u },\r\n  { 14477550873015039462u,  2849642930482147564u,         103930874169u },\r\n  {  8109481182495403274u, 14791248423979435173u,          57154479452u },\r\n  { 14565395719337663965u, 13882371364576310127u,          92801835183u },\r\n  {  1860318978161305991u, 11735995808941329540u,         175752564859u },\r\n  { 16268646275151585618u, 11376996674339273181u,         123636209607u },\r\n  { 13759019338835519104u,  9849638057168043481u,         199616748225u },\r\n  { 17003783176010661888u, 18241520229279361964u,         193533949948u },\r\n  { 18357489540307877888u,  1865852368526961444u,         252988874793u },\r\n  {   905481790074912768u, 10601487369276448158u,          41101148059u },\r\n  {  3638882110636294144u, 15999931310312762170u,         155574707781u },\r\n  {  9011702854368362496u,  5773775867713013570u,          69867358014u },\r\n  { 11529215046068469760u, 17726239863982547534u,          62312997016u },\r\n  {                    0u,  9711316695888316992u,         152960941388u },\r\n  {                    0u, 17872002620723724288u,          76526451532u },\r\n  {                    0u,  7429694208660733952u,          76968843203u },\r\n  {                    0u,  1782821038871019520u,         195402764530u },\r\n  {                    0u,  3225250234313474048u,         242096646922u },\r\n  {                    0u, 10009250171830927360u,          10174841165u },\r\n  {                    0u,  1152921504606846976u,          77542602539u },\r\n  {                    0u,                    0u,          43062500000u },\r\n  {                    0u,                    0u,         160000000000u },\r\n  {  7625299565768063067u,                   46u,                    0u },\r\n  { 13889021769065194705u,          46413368317u,                    0u },\r\n  { 14498170692313014398u,  9519880170333822146u,                    2u },\r\n  {  1541631360972245751u,  2285186318012886800u,           2516073738u },\r\n  {  9903958882920799117u,  9706420951402272035u,          10123880198u },\r\n  { 15744148547788062576u,  2369632031840402142u,           6526186134u },\r\n  { 17936061801321712000u, 15599123897979399458u,         150128458009u },\r\n  {  9986394078324430610u, 17579576584023912658u,          25845630200u },\r\n  { 13849561248103430369u,  3480927339588501811u,         248952990756u },\r\n  { 12142378807953854930u,  3547346616671294635u,          36188701449u },\r\n  {  2513847703931031444u,  7705317123868384954u,           9192302045u },\r\n  {  1752183758129038045u,  4969425237478353909u,         221417706078u },\r\n  { 15824833342220556540u, 17043246700132217175u,          94269393081u },\r\n  {  8168747198299470695u, 17053788362783499470u,         185923916254u },\r\n  { 17414799840149357478u, 11102988228454224768u,         222924487719u },\r\n  {    83147520704167789u, 16944305387801685839u,          39601894197u },\r\n  {  2383542703041471269u, 11725142977459199276u,          53918552635u },\r\n  { 15540952725549257799u,  8175984171998533324u,          59635621274u },\r\n  {  6949835416232048690u,  1372352885142856895u,         154443220990u },\r\n  { 15398868937585367540u, 17975093466502888164u,         254074395398u },\r\n  { 14710915985268256079u,  6467823391459085653u,           6974431769u },\r\n  {  9665704836873335737u, 11319386883146885025u,          25350621408u },\r\n  {  2528789298740305993u,  9141999262922068637u,         224613625192u },\r\n  { 10562914675687726264u,  1587330393383478774u,         104495588773u },\r\n  { 17671658300096837111u,   884187548095712303u,         165086049353u },\r\n  {   356471401631698552u,   488841225726377268u,          73047931903u },\r\n  {  7450677157218003204u, 17462624199405856193u,         255026500135u },\r\n  {   317174560787152643u, 13183677579115583554u,          39946650754u },\r\n  {  7251937674440720374u, 11645015818917277779u,         130714688593u },\r\n  {  1252631516699038247u,  8760523002035971977u,          81631277572u },\r\n  { 10818009768860843867u, 10068817678491468042u,           4474908903u },\r\n  { 12330114194950162396u,  1273658177787418284u,         231545831700u },\r\n  { 15826681638261168822u,  3100019384328057661u,          20069045148u },\r\n  { 14240150078499211625u, 10363063568089458738u,         156168052387u },\r\n  { 10725372116242125421u, 13030756371481403666u,         163561782801u },\r\n  {  8434925524647833627u,  6538878900684195299u,          17706398718u },\r\n  { 17133902668520348241u,  8984884716779098868u,         254354473335u },\r\n  { 15093996047981365810u,  8728727397070363908u,         119487071576u },\r\n  {  6187974166976813153u,  6398650562917867005u,          88473185260u },\r\n  { 13946144707720259865u,  1190873176164938879u,         236346871542u },\r\n  {  9138079832881862582u,  4383628525805121795u,         246064557364u },\r\n  {  6600697628576225568u, 10189374699734119852u,          52237636978u },\r\n  {  8137099536646556597u,  5276291920541626391u,         114552367109u },\r\n  { 14169855543453903706u,  2692252373800386521u,           5286028358u },\r\n  {  3706403268650100765u, 11578684995169173920u,          70145947293u },\r\n  { 14736932266877982264u,  5799408022254132587u,         157627681771u },\r\n  { 18004795125138956004u, 15548569837712345290u,         235314386538u },\r\n  {  9068489270661002501u, 15763030464322902955u,         106842889659u },\r\n  {  7758835715193269217u, 13257749746581255500u,         187854515593u },\r\n  { 16943947811135261184u, 16152470009188707678u,         137718704053u },\r\n  {  6745843108403216384u, 13806790848493904003u,         181875627153u },\r\n  { 12338229654069444608u, 11981226523265951191u,         145748467631u },\r\n  { 14358176069683511296u,  5133628726077003713u,         175649503591u },\r\n  {  7083775185760813056u, 16183955741910833164u,         103278294570u },\r\n  {  5350276357316149248u, 13640425554331371454u,          42877333998u },\r\n  {  9223372036854775808u, 18108120906868035862u,         238739448950u },\r\n  {                    0u,  6324011669895037184u,         118981643201u },\r\n  {                    0u, 10444437689515769856u,         193342825359u },\r\n  {                    0u, 12324712543665782784u,         143566194101u },\r\n  {                    0u, 13928941951563857920u,         181668124005u },\r\n  {                    0u,  3975288688270639104u,         101755089456u },\r\n  {                    0u, 11141905478114607104u,          48215500831u },\r\n  {                    0u,  4611686018427387904u,          31604003906u },\r\n  {                    0u,                    0u,          66250000000u },\r\n  {                    0u,                    0u,         128000000000u },\r\n  { 14699116688460625612u,               708211u,                    0u },\r\n  {  6684126021499623499u,      708211796840712u,                    0u },\r\n  { 12614606079692508506u,  4398362855256705725u,                38392u },\r\n  { 15358270276683001489u,  2812083125569302717u,         248238435728u },\r\n  { 18077126190953408995u, 12868509142973100603u,         144152443331u },\r\n  {  7864121581925945659u,  8726243776748165726u,         195697603278u },\r\n  {  3518026639210514839u,   358304413426858117u,         206473050623u },\r\n  {  4698310163811252280u,  3180720351566429470u,         255019423721u },\r\n  {  6101155398200416338u, 14053818240400098784u,         233172427195u },\r\n  { 16049178580360033341u,  7340140541492429288u,         187761859013u },\r\n  {  3167464649127375997u,  1323571167904965058u,         197397909816u },\r\n  { 12778923935480989904u, 14463851737583396026u,          56071750936u },\r\n  { 11875553912612980379u, 15122784818916048486u,          24784086973u },\r\n  { 10628760849351697057u, 13557974621377508955u,         189819807807u },\r\n  {  3408944711673234310u, 17525172074563876264u,          63734979276u },\r\n  {  2102091496050506178u, 15148880683074215967u,         204950041481u },\r\n  {  6254611118630245760u,  6744828147558597936u,         137821222467u },\r\n  {  2647941151989776368u,  9799290779647971692u,          67365637866u },\r\n  {  8855437735410157458u, 11170890203898678105u,         234531220617u },\r\n  { 10184270603132180103u,  7068779781287527905u,         137605575171u },\r\n  { 12079083162535627164u, 14474741922505540911u,           3383199319u },\r\n  {  5952952868716156729u, 17107062680405191514u,          87784677331u },\r\n  { 11958907037815852320u,  2712598571300237005u,         211927375726u },\r\n  { 10101562137321697626u,  3767556054903418641u,         110147050263u },\r\n  { 13633527411279258327u, 18158239681706277628u,          23204239622u },\r\n  { 16555627393501768728u, 10531652712128330681u,           6984360145u },\r\n  {  6359650463500280706u,  9548395326934120567u,         209570922037u },\r\n  {  8093923611102181967u, 15875647850297719390u,          53517619547u },\r\n  {  2848827352928635726u,  8215825295203192574u,          91860620594u },\r\n  {  4686723431961561511u, 12747310908260543144u,          50445380781u },\r\n  {  6245554925867652609u,    77706528053613642u,         173691033109u },\r\n  { 17527406820792516033u,  6024737704056756146u,          21004212479u },\r\n  { 12119966834653692210u,  6819452388570089667u,         255326601685u },\r\n  { 11606502845877928061u, 13695926775373186254u,         213369683254u },\r\n  {   424311496652297090u,  3746531715392682132u,          54742457678u },\r\n  {  5977664048034127173u,  4717376233154528116u,          78203099891u },\r\n  {  6702712461535947028u,   385190957950313369u,         243255729478u },\r\n  { 11384349854055020018u, 12388374310648616082u,          70020881243u },\r\n  {  3782955013294836188u,  1078067332084407770u,          91671575117u },\r\n  {  3531805968821207061u,  3257295319358714850u,          77058442147u },\r\n  {  3867566898657193228u,  1545453099660723457u,         163176578333u },\r\n  { 12688734637425072080u,  7495477664653506341u,          29083779180u },\r\n  { 18435982764454619691u,  7225503732673614354u,         108406330658u },\r\n  {  4728836163964677692u,  3935478326103643956u,          34391695342u },\r\n  {  2120012917348838977u, 10082240682742686210u,         238213342707u },\r\n  {  9856965465824679831u, 10838712705567897138u,         243546559362u },\r\n  { 11217197671061248816u,  2142546572501643680u,         130587567793u },\r\n  {  3840562972677739189u,  7893042119150331392u,         177116147682u },\r\n  { 17104366978925258617u, 12084811642251302615u,         226427882670u },\r\n  { 16177877219841993444u, 15317234482572954775u,         174655118951u },\r\n  {  7338522384267208704u,  2283226355108359361u,         103830348945u },\r\n  { 10935240458612244480u, 13359725152575722127u,         145123773948u },\r\n  {  1732868046462124032u, 13126551011491594557u,         252724232151u },\r\n  {   557965042578882560u,  3598021288691861269u,         215711591756u },\r\n  { 10454684322475540480u, 16462621795896662961u,          76195049124u },\r\n  { 13907115649320091648u, 14682112756964627332u,         164892440515u },\r\n  {                    0u,  7174112100896070218u,         195795918927u },\r\n  {                    0u,  5023109019590616064u,          79388909396u },\r\n  {                    0u, 10765223023086141440u,          84272303285u },\r\n  {                    0u,  8228137177297453056u,         181583583909u },\r\n  {                    0u,  2891199497780592640u,         165446048210u },\r\n  {                    0u, 15294857653247803392u,         210156732238u },\r\n  {                    0u, 14303432416528695296u,          78829135894u },\r\n  {                    0u,                    0u,          22775390625u },\r\n  {                    0u,                    0u,         161000000000u },\r\n  { 14876458284855834550u,                   10u,                    0u },\r\n  { 10450704926982265198u,          10806454419u,                    0u },\r\n  {  5385653213018257806u, 10806454419566533849u,                    0u },\r\n  { 12735569669880147489u, 17118225092618494573u,            585819067u },\r\n  {  3619762560577729456u, 13385738875341807559u,         187927980841u },\r\n  { 11123448126624084269u,  8272682717439277193u,          41725642358u },\r\n  {  4072715118852885633u, 13402436483369350083u,         118448463028u },\r\n  { 18239087231420827283u, 10946328903241612536u,         180726547537u },\r\n  {   423431461216085297u, 16265808923426731252u,          81593401678u },\r\n  {  9360976716520160042u, 11080374459871185177u,          78881771268u },\r\n  { 11655927117263208920u,  1240761893433831916u,           4600668303u },\r\n  {  2646622721938364948u,   367264070493390483u,         143067261837u },\r\n  {  4496462484548171852u,  2863675693461092905u,         141019909425u },\r\n  { 13140258519803350063u,  7511929581752138999u,          49155240170u },\r\n  { 13089764333320627770u, 11154557789993845753u,         234407222518u },\r\n  {  6926286827289840501u,  8325416539745948522u,         246604689789u },\r\n  {  4985580225290866218u, 17745129874679852617u,         125451321734u },\r\n  { 10478790837359789693u,  1074820986392253357u,         134961965418u },\r\n  { 10041191967455692214u,  7820952682162838597u,         106058266162u },\r\n  {  5035461258013813797u,  8215518006273528603u,          50423974694u },\r\n  { 14208759661559249750u,  9680426791089900133u,          38445364123u },\r\n  { 12347272163241758840u, 16128495723604797412u,         155524776987u },\r\n  {  3372534174410277614u,  2264789053583348885u,          27874327505u },\r\n  { 17226704187274712984u, 11175458488686298083u,         209122774460u },\r\n  {  4250480179449852121u, 11026777810412287617u,         188605822818u },\r\n  {  4303723537755414374u, 16199890034895598640u,          98597762822u },\r\n  {  8680503847344854165u,  9094320719494763752u,           6878197798u },\r\n  {  8817608623911079652u,  1250835564687222832u,          38493004114u },\r\n  {  5692030448698539450u, 15362466642459337025u,          82067807931u },\r\n  { 16908836314686769809u,  7831109835595423828u,         187832800985u },\r\n  {  6073762347067727240u, 15426237284335022429u,         217424525314u },\r\n  { 10931066692585106200u, 15636308361455434548u,           2836257998u },\r\n  { 14466591364061539596u, 13967173875944980328u,         206847645974u },\r\n  {  4958077340960173341u, 18245979923595824097u,          22757162012u },\r\n  {  4076890037156765715u, 11335054479675278263u,          28989116553u },\r\n  { 14083973146609179058u, 11165339882630461707u,         137614474534u },\r\n  {  2565183738039805295u, 15944437408299395922u,          38605274287u },\r\n  {  1482420938751351224u, 15806416348777321161u,         175864349683u },\r\n  {  2151089495335413944u,  4201030477408556248u,         243856867547u },\r\n  {  3738604531753220913u,  9485474942554588907u,         219227738318u },\r\n  { 14195686514836005765u, 18238757647663230541u,         206514208626u },\r\n  { 17808833916231796970u,  4642199687824746379u,         114988725033u },\r\n  {  1302384553035657354u,  6134575894869364037u,          41251654149u },\r\n  {  1672033517974833698u, 11524208547121316008u,           5332556025u },\r\n  { 11673925532927662545u,  2734683241527878366u,         249624728597u },\r\n  {  3905334232240480709u, 10629223456178675171u,          21148247475u },\r\n  { 17411087320267472625u,  2788042336985254064u,         179576211358u },\r\n  { 16573305231063706617u, 17285498758066142502u,         158151140077u },\r\n  { 15481103236037148354u,  5525538192421886436u,         237937048765u },\r\n  {   907440704754420880u, 11414325503043801888u,         189299540025u },\r\n  {  3224970785139077759u,  7246608114685173259u,          57618771825u },\r\n  { 10560826509734608144u,  1007884269852184608u,         113392839413u },\r\n  {  4700940027512659968u, 13823717876510029312u,         245054637515u },\r\n  {  9733694683502084096u, 12487410768239429317u,         203749385247u },\r\n  {  1995535635724632064u,  3361062421598631942u,          31676943894u },\r\n  { 10629833226245373952u, 17853337379088328475u,          22182203558u },\r\n  { 15729384648544878592u, 11551561037491869885u,         166967831358u },\r\n  {  7205759403792793600u, 11480877996635204802u,          62626211378u },\r\n  {                    0u,  5527488381934471912u,          50622379643u },\r\n  {                    0u, 11143438404407726080u,         123299645745u },\r\n  {                    0u,  6472279730688098304u,          49604087006u },\r\n  {                    0u,  4561816853579563008u,         222350862987u },\r\n  {                    0u,  2888714464062865408u,         139247296587u },\r\n  {                    0u, 16258276129784201216u,          75156597524u },\r\n  {                    0u,   720575940379279360u,          20881362915u },\r\n  {                    0u,                    0u,         227039062500u },\r\n  {                    0u,                    0u,         228000000000u },\r\n  {  7535526066623007027u,               164893u,                    0u },\r\n  { 11302146918409311588u,      164893408501686u,                    0u },\r\n  {  2480833299122194801u, 16409970870640346804u,                 8938u },\r\n  { 11513226205589330558u,  7721907286269370594u,         234889586303u },\r\n  {  4073957068281936105u, 14300743897882155131u,         127418605432u },\r\n  {  3729887061093812886u,  2068482633821123575u,         120775244880u },\r\n  { 13616911779739451443u,  4922882895416406094u,          80112132668u },\r\n  { 13039053282195777666u,  9317632875623428410u,          60266870016u },\r\n  { 14490756113210417890u,  5693844901999766254u,            505109890u },\r\n  { 17432486112977557585u, 11569484900262102262u,         130308663950u },\r\n  { 14308820825344039837u,  3138170119352085637u,         142627183033u },\r\n  {  4190949538817536349u,   950584692575235243u,         185170120543u },\r\n  { 13616552502810964397u,  8136430299747162645u,          95051531299u },\r\n  {  4898145803694965031u,  6698711700804594470u,          35441076770u },\r\n  {  1399036321001644308u, 17401191571004302008u,          34363137888u },\r\n  { 17170331128243738540u,  4721732028538188150u,          96943320485u },\r\n  { 10641321388205367410u,  2984214103553086219u,         165255965606u },\r\n  {  6648873641312572851u, 13128675202005662068u,         166161774570u },\r\n  {  5988456964560374823u, 14638512997670672834u,         234711706908u },\r\n  {  9972593758348346915u, 12942085665769692438u,          28793555379u },\r\n  { 16709668921872818968u, 14131134357119205086u,         179701591869u },\r\n  {  6094829131503407767u,  8921946894736102919u,          61766050328u },\r\n  {  4892016478899926334u,  5601522560505809989u,          24483659710u },\r\n  { 13150857244079031538u,  8602606493507716808u,         190303659146u },\r\n  { 12983943395318785894u,  8576789731078566487u,         138466348232u },\r\n  { 15341644584614757478u, 17881118138842658549u,         200464948702u },\r\n  {  7507635124856644772u, 11624372674432704923u,         222969337356u },\r\n  { 11619655367084544354u,  6826284072848095635u,          12630158505u },\r\n  { 11553116952478783009u,  1646466632033733563u,         169370053601u },\r\n  { 17392150014233193245u, 17871081657060299180u,         225089255134u },\r\n  {  8877887560294980515u, 15910893124677544709u,         222968793277u },\r\n  { 18404180619915609503u, 11031217459450580944u,         189862531244u },\r\n  { 10079413095288181976u, 13554987390037243094u,         172598003496u },\r\n  { 14102802966539105550u, 15026714590903687870u,          40734817338u },\r\n  { 13333966026135891399u,  4406379654994689200u,          58814599830u },\r\n  { 12344968670173516152u, 13596329092861950242u,         150238870319u },\r\n  { 10577007819804726752u,   284812388227373260u,          47737058477u },\r\n  { 15337041354031088010u,  9285079159392309382u,         173015439710u },\r\n  { 14333607285614673616u, 15046108141952711893u,          94503345149u },\r\n  { 17171597563219696538u, 13795366909944958311u,         253815651156u },\r\n  {  2849642930482147564u, 12909920641180059961u,          84747848338u },\r\n  { 14791248423979435173u,  5333762939889788252u,         146699848200u },\r\n  { 13882371364576310127u,  6411331390005944495u,           8289143868u },\r\n  { 11735995808941329540u,  1447104583224217723u,          60347558971u },\r\n  { 11376996674339273181u, 11940049226167932871u,          59078447696u },\r\n  {  9849638057168043481u,  9772290783590472385u,          80647271365u },\r\n  { 18241520229279361964u, 16351989577831528444u,         197529756944u },\r\n  {  1865852368526961444u,  4376738725895725097u,          16886443131u },\r\n  { 10601487369276448158u, 13851276297739812763u,         123237263481u },\r\n  { 15999931310312762170u, 12641996203470333509u,         121750879192u },\r\n  {  5773775867713013570u,  7707081716407945022u,         216685323987u },\r\n  { 17726239863982547534u,   417638323657040024u,         211417801737u },\r\n  {  9711316695888316992u, 16438047707692449100u,           9022640218u },\r\n  { 17872002620723724288u, 14850108107043306316u,          90891108351u },\r\n  {  7429694208660733952u, 10423290807904720835u,         255805025973u },\r\n  {  1782821038871019520u, 16951162310302339314u,         181565047726u },\r\n  {  3225250234313474048u,  2752437506572397322u,         174918924350u },\r\n  { 10009250171830927360u,  3925815842962784589u,          62149209936u },\r\n  {  1152921504606846976u,  5274166674003605291u,          80212818903u },\r\n  {                    0u,  5538963350863452832u,         215285913148u },\r\n  {                    0u, 16900671634439028736u,          60300267804u },\r\n  {                    0u,  2326997710751662080u,          28916187245u },\r\n  {                    0u, 12327726161625874432u,         109126146798u },\r\n  {                    0u,  5756455743825903616u,         238668287374u },\r\n  {                    0u,  3018537650245074944u,         142312058091u },\r\n  {                    0u, 16717361816799281152u,         235163635253u },\r\n  {                    0u,                    0u,          53906250000u },\r\n  {                    0u,                    0u,          16000000000u },\r\n  {  2285186318012886800u,           2516073738u,                    0u },\r\n  {  9706420951402272035u,  2516073738123880198u,                    0u },\r\n  {  2369632031840402142u, 11997425759292732054u,            136396630u },\r\n  { 15599123897979399458u, 11491152661270395161u,          86650381753u },\r\n  { 17579576584023912658u, 18181063258234881272u,         185622936633u },\r\n  {  3480927339588501811u,  2466921813123869732u,          57985597414u },\r\n  {  3547346616671294635u,  8430880678232179465u,         230133732099u },\r\n  {  7705317123868384954u,  6738034873677997533u,           3457038957u },\r\n  {  4969425237478353909u,  7678250951042929246u,         109365269602u },\r\n  { 17043246700132217175u,  1853560606315563193u,          98416238818u },\r\n  { 17053788362783499470u, 14942676593409905118u,         226100481721u },\r\n  { 11102988228454224768u,  4909892170837638183u,         185810044121u },\r\n  { 16944305387801685839u, 16871149368312132405u,         217266165787u },\r\n  { 11725142977459199276u, 16096130589333770811u,          27914586839u },\r\n  {  8175984171998533324u, 12512479187631824282u,         215872572987u },\r\n  {  1372352885142856895u, 16980304980540557310u,          59678302855u },\r\n  { 17975093466502888164u,  8640919162749295366u,         135920504177u },\r\n  {  6467823391459085653u,  7862382415464063513u,         113468425166u },\r\n  { 11319386883146885025u, 14534157903009925344u,         206426220604u },\r\n  {  9141999262922068637u, 12627464554215107944u,          60787898278u },\r\n  {  1587330393383478774u,  2456849734836299173u,         166684536225u },\r\n  {   884187548095712303u, 18428252197697827913u,         161133186090u },\r\n  {   488841225726377268u,  7244734215936736255u,          42998997553u },\r\n  { 17462624199405856193u, 14756175050504770087u,          49392737828u },\r\n  { 13183677579115583554u,  6764116534566945922u,          36799933852u },\r\n  { 11645015818917277779u,  1588822142405565521u,         156366683492u },\r\n  {  8760523002035971977u, 17053265624843842052u,         100086130220u },\r\n  { 10068817678491468042u, 16996891591759999207u,          44924459381u },\r\n  {  1273658177787418284u,  8565556232370585876u,         117921403339u },\r\n  {  3100019384328057661u, 14464960359145886620u,         203464339733u },\r\n  { 10363063568089458738u,  5813189542048784035u,          21784147072u },\r\n  { 13030756371481403666u,  9739241026882027025u,         128315133636u },\r\n  {  6538878900684195299u, 18175068535675302910u,         196527965313u },\r\n  {  8984884716779098868u, 10562697212061761911u,         129985272439u },\r\n  {  8728727397070363908u,  4264834835660801368u,         119572604963u },\r\n  {  6398650562917867005u, 13019066443690126316u,          35231197159u },\r\n  {  1190873176164938879u,  1828040177823321846u,         231705765006u },\r\n  {  4383628525805121795u, 11240369830376975668u,         142099098256u },\r\n  { 10189374699734119852u,  8886938465302549874u,         144609341669u },\r\n  {  5276291920541626391u,  9985240313589688325u,         229481761899u },\r\n  {  2692252373800386521u,   722909126956573766u,         107541300962u },\r\n  { 11578684995169173920u,  5493363474638452381u,         226039188982u },\r\n  {  5799408022254132587u, 12410535279213120491u,         246297795830u },\r\n  { 15548569837712345290u, 10543108918366869098u,         246672776465u },\r\n  { 15763030464322902955u, 12953909016524823995u,          17571543079u },\r\n  { 13257749746581255500u, 16505942145872588169u,          39702232814u },\r\n  { 16152470009188707678u, 12428594380392015797u,         238894788916u },\r\n  { 13806790848493904003u,  7528259605829768337u,          52673755451u },\r\n  { 11981226523265951191u, 18147447600042811311u,          59408107770u },\r\n  {  5133628726077003713u, 12021069431116183911u,         250983775105u },\r\n  { 16183955741910833164u, 11819985069665662506u,         129651663479u },\r\n  { 13640425554331371454u, 10401877114068152814u,         119640762674u },\r\n  { 18108120906868035862u,  4611631138117837942u,          50563886888u },\r\n  {  6324011669895037184u, 17200813398607252417u,          40249997024u },\r\n  { 10444437689515769856u, 14100466137553658767u,         224932457962u },\r\n  { 12324712543665782784u, 17887776768825509301u,         234764387800u },\r\n  { 13928941951563857920u, 12632656857970087269u,         216969698321u },\r\n  {  3975288688270639104u,  8923681664054686256u,          17684817700u },\r\n  { 11141905478114607104u,  6213926103737837599u,          36483753752u },\r\n  {  4611686018427387904u,  1233118281776157762u,          24336857609u },\r\n  {                    0u,    30716279628678784u,           9066847476u },\r\n  {                    0u, 15775734650898546688u,         244001665132u },\r\n  {                    0u,   976806005729918976u,         108855204289u },\r\n  {                    0u, 12460098853279891456u,         193052952759u },\r\n  {                    0u,  5635665595421687808u,         183675463312u },\r\n  {                    0u,  1805943450575568896u,         144305510044u },\r\n  {                    0u, 11529215046068469760u,         156097900390u },\r\n  {                    0u,                    0u,         102625000000u },\r\n  {                    0u,                    0u,          64000000000u },\r\n  {  4398362855256705725u,                38392u,                    0u },\r\n  {  2812083125569302717u,       38392238435728u,                    0u },\r\n  { 12868509142973100603u,  4564018338575530435u,                 2081u },\r\n  {  8726243776748165726u, 16553437246451512014u,          33247415929u },\r\n  {   358304413426858117u,  4339777136957372927u,         121897363631u },\r\n  {  3180720351566429470u, 18439463366554654697u,         175235259789u },\r\n  { 14053818240400098784u,  1370067356680643003u,         141999605312u },\r\n  {  7340140541492429288u,  4210124040914115013u,          64074271500u },\r\n  {  1323571167904965058u, 10692225626142609720u,          12228231281u },\r\n  { 14463851737583396026u, 11592856673895384344u,         113579626712u },\r\n  { 15122784818916048486u, 10284479231227406269u,         216628450019u },\r\n  { 13557974621377508955u,  4961071383534266431u,         227557522736u },\r\n  { 17525172074563876264u, 10960611551445686988u,          48268940218u },\r\n  { 15148880683074215967u, 14616396723115619209u,         186594175942u },\r\n  {  6744828147558597936u,  1025604265437492803u,         198792356454u },\r\n  {  9799290779647971692u, 11711588454892179178u,         102055598118u },\r\n  { 11170890203898678105u,  5580373263251565705u,          38634886482u },\r\n  {  7068779781287527905u, 14109334653033148931u,          82302512640u },\r\n  { 14474741922505540911u,  2899414033769399895u,            764868564u },\r\n  { 17107062680405191514u, 13233457234892808147u,         212157177549u },\r\n  {  2712598571300237005u,  3287946691509034862u,         205717387154u },\r\n  {  3767556054903418641u,  5488480288717445911u,         146178239947u },\r\n  { 18158239681706277628u, 11687233053874362630u,         203297531112u },\r\n  { 10531652712128330681u,  6783772100089274577u,         232633566173u },\r\n  {  9548395326934120567u,  7898291058728402485u,         221367749022u },\r\n  { 15875647850297719390u,  4423684977486598491u,         158428167216u },\r\n  {  8215825295203192574u,  2750833684599526706u,          48239808443u },\r\n  { 12747310908260543144u, 15669689830489025709u,         187149122992u },\r\n  {    77706528053613642u, 15117307274214954517u,         176849455587u },\r\n  {  6024737704056756146u,  8148639818575698175u,         227819510869u },\r\n  {  6819452388570089667u, 13006484426078994901u,          85441738649u },\r\n  { 13695926775373186254u, 10287496057845513526u,         153705082933u },\r\n  {  3746531715392682132u, 14159876032966532430u,          53557686278u },\r\n  {  4717376233154528116u, 15742212196465548019u,           6767608417u },\r\n  {   385190957950313369u,  2892220461917134150u,          97853387033u },\r\n  { 12388374310648616082u,  7487151560715393883u,          25156787585u },\r\n  {  1078067332084407770u,  7245756744165177933u,         129405879299u },\r\n  {  3257295319358714850u,  3067122860671533987u,           3392793260u },\r\n  {  1545453099660723457u,  8135043905834122525u,         172166269063u },\r\n  {  7495477664653506341u, 14730019368921022572u,         135441001613u },\r\n  {  7225503732673614354u,   495969939682055458u,         141798515950u },\r\n  {  3935478326103643956u,  5617761407265775598u,         238026886584u },\r\n  { 10082240682742686210u,  2087044847072781811u,         184304539456u },\r\n  { 10838712705567897138u, 15929674232061203330u,          64113138927u },\r\n  {  2142546572501643680u,  8658086469608285873u,         239863549370u },\r\n  {  7893042119150331392u, 18369871790780313570u,         186469355807u },\r\n  { 12084811642251302615u,  3545648451947416750u,          31995832745u },\r\n  { 15317234482572954775u, 13347376792767929959u,         169192209987u },\r\n  {  2283226355108359361u, 14482164459838203025u,          67723562745u },\r\n  { 13359725152575722127u,  8899577765623565820u,         249785079708u },\r\n  { 13126551011491594557u,  7095320096604405719u,         156482447077u },\r\n  {  3598021288691861269u,  2968593824439315788u,         229384638073u },\r\n  { 16462621795896662961u, 12621408323612585636u,         121160927793u },\r\n  { 14682112756964627332u,  3954422936414648259u,          49684207916u },\r\n  {  7174112100896070218u, 17143730087577690191u,          44214369696u },\r\n  {  5023109019590616064u,  5033045529399041876u,         160929363470u },\r\n  { 10765223023086141440u, 15857648521994521781u,          14272841944u },\r\n  {  8228137177297453056u, 16655573486499109541u,         216859644848u },\r\n  {  2891199497780592640u, 16652154439190075858u,         176902900447u },\r\n  { 15294857653247803392u, 18016950600164130638u,         223902715100u },\r\n  { 14303432416528695296u,  2086292996072613910u,         220976700849u },\r\n  {                    0u, 17324462585194799521u,         177113098169u },\r\n  {                    0u, 11079151463184927232u,         185939160998u },\r\n  {                    0u,  5239846817488961536u,         166600602004u },\r\n  {                    0u,  2778806963520143360u,         148284052665u },\r\n  {                    0u,  6240890740138835968u,         185150639427u },\r\n  {                    0u, 17250651344549707776u,          67338319364u },\r\n  {                    0u,  4197354852709302272u,           4935159683u },\r\n  {                    0u,  9223372036854775808u,         131227539062u },\r\n  {                    0u,                    0u,         118500000000u },\r\n  { 17118225092618494573u,            585819067u,                    0u },\r\n  { 13385738875341807559u,   585819067927980841u,                    0u },\r\n  {  8272682717439277193u,  5654803392547571318u,             31757315u },\r\n  { 13402436483369350083u,  2931628102185393332u,           3306547506u },\r\n  { 10946328903241612536u, 15964697617980212305u,          50158923877u },\r\n  { 16265808923426731252u,   450380868305846606u,         101865447992u },\r\n  { 11080374459871185177u, 14631133530814566148u,          56024415195u },\r\n  {  1240761893433831916u,    31969822783742095u,         219793155338u },\r\n  {   367264070493390483u, 10437269029385743245u,          10001733087u },\r\n  {  2863675693461092905u, 15196146496377392433u,         223565805487u },\r\n  {  7511929581752138999u,  4409099735137480938u,         175823784752u },\r\n  { 11154557789993845753u, 10644987914903248118u,          48239017775u },\r\n  {  8325416539745948522u,  3154431617534062973u,          47577065951u },\r\n  { 17745129874679852617u, 11702056331247960454u,         223171002080u },\r\n  {  1074820986392253357u, 15575315065965259114u,         224634369744u },\r\n  {  7820952682162838597u, 10759747609480050226u,         208844339521u },\r\n  {  8215518006273528603u, 12538236653960743718u,          65583287086u },\r\n  {  9680426791089900133u, 17857942663978005403u,          46679699170u },\r\n  { 16128495723604797412u, 11443004154750813211u,         226968081011u },\r\n  {  2264789053583348885u,  4004313188770806737u,         115620326498u },\r\n  { 11175458488686298083u, 17134872954824183228u,          98217074252u },\r\n  { 11026777810412287617u,  2659553912986171234u,          76928883324u },\r\n  { 16199890034895598640u,  9501854300969137926u,         124144174706u },\r\n  {  9094320719494763752u, 14528169966301018150u,         114515096553u },\r\n  {  1250835564687222832u, 18172091996515901778u,         233787573671u },\r\n  { 15362466642459337025u,  1133541705604751035u,         167985111081u },\r\n  {  7831109835595423828u, 18280349987988641497u,          41061449418u },\r\n  { 15426237284335022429u,  9936015874712336386u,         202990979758u },\r\n  { 15636308361455434548u, 15876720399740689614u,         174538632499u },\r\n  { 13967173875944980328u,  8618117825152456982u,          51860678737u },\r\n  { 18245979923595824097u,  8085525680745921564u,          81467189103u },\r\n  { 11335054479675278263u,  8072355444669730953u,         111438317225u },\r\n  { 11165339882630461707u,  9395030504766848294u,         169437603265u },\r\n  { 15944437408299395922u,  3537903114058185903u,         193509305624u },\r\n  { 15806416348777321161u,  2126094743961928691u,          24191790112u },\r\n  {  4201030477408556248u,   289185362555601115u,          32115255827u },\r\n  {  9485474942554588907u, 16909937501450129614u,          19015676769u },\r\n  { 18238757647663230541u, 14449642060360499058u,          97916689548u },\r\n  {  4642199687824746379u, 12433818908498244393u,         140783316665u },\r\n  {  6134575894869364037u, 11884444034578008581u,         185674038673u },\r\n  { 11524208547121316008u,   988625838444140793u,         145644257002u },\r\n  {  2734683241527878366u,  1675370907158909973u,         234053593514u },\r\n  { 10629223456178675171u, 15920186275316934067u,         170090822038u },\r\n  {  2788042336985254064u,  5600921198503757726u,         150863035027u },\r\n  { 17285498758066142502u, 10457357161776341741u,         147303626546u },\r\n  {  5525538192421886436u, 12225356765775740093u,          50566894467u },\r\n  { 11414325503043801888u,  4486633318598164537u,         131662737918u },\r\n  {  7246608114685173259u, 10302486602879381361u,         254243220879u },\r\n  {  1007884269852184608u, 15536428611301239541u,         143558498917u },\r\n  { 13823717876510029312u, 12026126645955462603u,         101842231482u },\r\n  { 12487410768239429317u, 14877968141142123551u,         186651937631u },\r\n  {  3361062421598631942u,   734560801645383190u,          95806536269u },\r\n  { 17853337379088328475u, 15648943144911081638u,          77039820620u },\r\n  { 11551561037491869885u, 13664182862003235646u,          76848330907u },\r\n  { 11480877996635204802u,  3895127525902132786u,         155740736837u },\r\n  {  5527488381934471912u,  5249187334214137467u,          69211155286u },\r\n  { 11143438404407726080u, 10642260063359027505u,          86284559015u },\r\n  {  6472279730688098304u,   783598951897779422u,         167576918074u },\r\n  {  4561816853579563008u,  5538576558607624843u,          58042478984u },\r\n  {  2888714464062865408u, 15974581187564609611u,         136300246836u },\r\n  { 16258276129784201216u,  7474269406918257428u,          52865983781u },\r\n  {   720575940379279360u,  8045286838779138019u,          37405180956u },\r\n  {                    0u,  8184246376556341732u,          28436135873u },\r\n  {                    0u,  1493267152679331840u,         193443668885u },\r\n  {                    0u, 10179074811222818816u,         149080950174u },\r\n  {                    0u,  3892499202005008384u,         158551808751u },\r\n  {                    0u, 10341173215925108736u,         239211012804u },\r\n  {                    0u,  6230307872002015232u,         196560596123u },\r\n  {                    0u,  9295429630892703744u,         155337745666u },\r\n  {                    0u,                    0u,           2503906250u },\r\n  {                    0u,                    0u,         202000000000u },\r\n  { 16409970870640346804u,                 8938u,                    0u },\r\n  {  7721907286269370594u,        8938889586303u,                    0u },\r\n  { 14300743897882155131u, 10665454627995623288u,                  484u },\r\n  {  2068482633821123575u, 16803537892767562832u,         228578175453u },\r\n  {  4922882895416406094u,  8099123106849104444u,         221910921614u },\r\n  {  9317632875623428410u,  7077413686679401728u,         142439054343u },\r\n  {  5693844901999766254u, 13536636358372449666u,           7383667364u },\r\n  { 11569484900262102262u,  7280632235418610318u,         164733822527u },\r\n  {  3138170119352085637u,  6187823673116858809u,          63394683864u },\r\n  {   950584692575235243u,  8624343686231740255u,         216335442593u },\r\n  {  8136430299747162645u,   806211610822132771u,         161467526608u },\r\n  {  6698711700804594470u, 18388078233202190882u,         208043704818u },\r\n  { 17401191571004302008u,  7628864426595573600u,         242996819718u },\r\n  {  4721732028538188150u,  4530799784343874981u,           6413561569u },\r\n  {  2984214103553086219u,  8561580552078486438u,         225245615148u },\r\n  { 13128675202005662068u, 13349114951221999594u,          44464124211u },\r\n  { 14638512997670672834u, 10029144738508991772u,          51723656971u },\r\n  { 12942085665769692438u, 12601907197916268979u,          11543681025u },\r\n  { 14131134357119205086u,  1329580921391066941u,           1683150758u },\r\n  {  8921946894736102919u,  3198179786356761112u,         166072076726u },\r\n  {  5601522560505809989u, 11406753413634654142u,         182173373673u },\r\n  {  8602606493507716808u, 11131812960525182090u,         233618361341u },\r\n  {  8576789731078566487u, 14299636753645227208u,         253603456789u },\r\n  { 17881118138842658549u, 12964114684643663326u,          21775184861u },\r\n  { 11624372674432704923u,  5019257593846306316u,         221702786065u },\r\n  {  6826284072848095635u,  6929086798159998121u,          17272094499u },\r\n  {  1646466632033733563u, 18359765766933703649u,          35375626547u },\r\n  { 17871081657060299180u,  9993076234752063198u,          51995284896u },\r\n  { 15910893124677544709u,  3257189215046584509u,         160541725748u },\r\n  { 11031217459450580944u,  2905234736672690348u,          52176572581u },\r\n  { 13554987390037243094u, 12064985302079670056u,         165157493090u },\r\n  { 15026714590903687870u, 14315096064942799930u,          98654044163u },\r\n  {  4406379654994689200u, 11943971043551974038u,           3776022912u },\r\n  { 13596329092861950242u, 12472773152119929647u,         128647483967u },\r\n  {   284812388227373260u,  7791259796982183085u,          63676150387u },\r\n  {  9285079159392309382u, 16866829442051086686u,         115422365039u },\r\n  { 15046108141952711893u,  3702498393844653053u,         111914352656u },\r\n  { 13795366909944958311u,  2057239613841701716u,          16200712840u },\r\n  { 12909920641180059961u, 17201969976738286226u,         136111523182u },\r\n  {  5333762939889788252u, 18271566505443461640u,         110932520660u },\r\n  {  6411331390005944495u, 18368509115417119804u,         212990503604u },\r\n  {  1447104583224217723u,  7613923684154518587u,         180995758874u },\r\n  { 11940049226167932871u, 17984805084714865232u,          26412751629u },\r\n  {  9772290783590472385u,  4220802739051410373u,          13974958237u },\r\n  { 16351989577831528444u, 17812459042810815760u,         157228810174u },\r\n  {  4376738725895725097u, 10629526089664605307u,         190965615339u },\r\n  { 13851276297739812763u, 17437443267816548473u,         235576227763u },\r\n  { 12641996203470333509u, 12506371893701049304u,         179945285693u },\r\n  {  7707081716407945022u, 15737221540003030739u,          61677971778u },\r\n  {   417638323657040024u,  2358380859011605513u,          66853116489u },\r\n  { 16438047707692449100u, 10042972713837039706u,          73127848082u },\r\n  { 14850108107043306316u, 13424397272769642495u,         146544430641u },\r\n  { 10423290807904720835u,  6867102315755663029u,          49727738034u },\r\n  { 16951162310302339314u,  8690748404825506734u,         178372266362u },\r\n  {  2752437506572397322u,   956229930815387710u,         122471126415u },\r\n  {  3925815842962784589u,  7734449506297687888u,         143051837328u },\r\n  {  5274166674003605291u, 16332184961683848151u,         144419285347u },\r\n  {  5538963350863452832u, 15580777817612768828u,          99885369520u },\r\n  { 16900671634439028736u, 17404245271944696092u,         176844635657u },\r\n  {  2326997710751662080u, 13201420160494469229u,           9943486026u },\r\n  { 12327726161625874432u, 16511717657124068078u,          74715650420u },\r\n  {  5756455743825903616u, 14131292492116594062u,         116895102007u },\r\n  {  3018537650245074944u, 18429136031865875691u,          55766058900u },\r\n  { 16717361816799281152u,  2563978348305862197u,         148999045466u },\r\n  {                    0u, 14239974392147482896u,          90138993544u },\r\n  {                    0u, 11164201396098998272u,         136771950558u },\r\n  {                    0u,  7116971104932986880u,         222605212570u },\r\n  {                    0u, 12437629862867369984u,         154385811776u },\r\n  {                    0u, 16501893821638901760u,          64674245265u },\r\n  {                    0u, 10649324268870959104u,         145894569456u },\r\n  {                    0u,  7205759403792793600u,         240577301025u },\r\n  {                    0u,                    0u,          33390625000u },\r\n  {                    0u,                    0u,         232000000000u },\r\n  { 11997425759292732054u,            136396630u,                    0u },\r\n  { 11491152661270395161u,   136396630650381753u,                    0u },\r\n  { 18181063258234881272u,  3016823727048309817u,              7394076u },\r\n  {  2466921813123869732u, 17405973192644624358u,          28163542341u },\r\n  {  8430880678232179465u,  8937219978302591747u,          69943579697u },\r\n  {  6738034873677997533u, 15178463196824222317u,          49484487665u },\r\n  {  7678250951042929246u, 11979404627460330594u,         241822826138u },\r\n  {  1853560606315563193u,  2006448052689740002u,         154649404826u },\r\n  { 14942676593409905118u, 16330465320863239865u,         154108769766u },\r\n  {  4909892170837638183u, 17136208883957646553u,         230885276298u },\r\n  { 16871149368312132405u,   140455118208931867u,         138928955745u },\r\n  { 16096130589333770811u,  3964972929179372247u,          97007614087u },\r\n  { 12512479187631824282u,  3378050330022776379u,         135214941613u },\r\n  { 16980304980540557310u,  6065353437512901255u,         173183124475u },\r\n  {  8640919162749295366u, 12768753059854699889u,         251328803468u },\r\n  {  7862382415464063513u,  6848720690951013326u,         140692195490u },\r\n  { 14534157903009925344u, 10953228058585475132u,         162371269892u },\r\n  { 12627464554215107944u, 15539127852083296166u,           4593775682u },\r\n  {  2456849734836299173u, 14534853647735598497u,          66842377808u },\r\n  { 18428252197697827913u,  1506909603576368170u,          80787935995u },\r\n  {  7244734215936736255u,  5475702579938239025u,         251081689733u },\r\n  { 14756175050504770087u, 12039747373985783332u,         133296838431u },\r\n  {  6764116534566945922u, 17572399137760898460u,          31652676012u },\r\n  {  1588822142405565521u,   869552790852091236u,         172952601666u },\r\n  { 17053265624843842052u,  4549585778048181804u,          66047138551u },\r\n  { 16996891591759999207u,  4121918231767210357u,         247246633539u },\r\n  {  8565556232370585876u,  1558397953312543179u,          67223449635u },\r\n  { 14464960359145886620u,  6067524298738069781u,          35084480922u },\r\n  {  5813189542048784035u,  5811095224555517056u,         154328921151u },\r\n  {  9739241026882027025u,  6440894514158997188u,          63315020103u },\r\n  { 18175068535675302910u,  4612748874388784257u,          71349161591u },\r\n  { 10562697212061761911u,  9908101430749813367u,         119250057617u },\r\n  {  4264834835660801368u, 15150017990912190499u,         145537119254u },\r\n  { 13019066443690126316u, 17470426264690059239u,          22821284120u },\r\n  {  1828040177823321846u,  9615161096851907726u,          24947073705u },\r\n  { 11240369830376975668u,  9227932132124142224u,         169521238927u },\r\n  {  8886938465302549874u,  4794113194321211621u,         143500247203u },\r\n  {  9985240313589688325u,   391512698859146347u,         163259889397u },\r\n  {   722909126956573766u, 17209658878068655842u,         245021223945u },\r\n  {  5493363474638452381u,  3077364726606876150u,           9932937477u },\r\n  { 12410535279213120491u,  1952989567673965814u,           5166824276u },\r\n  { 10543108918366869098u, 11172860676923186449u,          84105871776u },\r\n  { 12953909016524823995u, 17338078544784947239u,         160605681990u },\r\n  { 16505942145872588169u,  4593380466519703278u,          70939899121u },\r\n  { 12428594380392015797u,   786884753602720052u,         241249007654u },\r\n  {  7528259605829768337u, 17848875822468020539u,          38042657107u },\r\n  { 18147447600042811311u,  2899664567187130618u,          83967589497u },\r\n  { 12021069431116183911u,  2973178834961857409u,         121157191131u },\r\n  { 11819985069665662506u, 11117453141176836727u,         219161176347u },\r\n  { 10401877114068152814u,  7535238370146462002u,          27602678342u },\r\n  {  4611631138117837942u, 10246175467290865448u,          70408486090u },\r\n  { 17200813398607252417u,  1203128834127050464u,         202555446285u },\r\n  { 14100466137553658767u, 14518048959078919658u,          13065221744u },\r\n  { 17887776768825509301u,  1553474987376920024u,         112787025011u },\r\n  { 12632656857970087269u, 14956572380830948369u,         115084214047u },\r\n  {  8923681664054686256u,  7594162606042048292u,          31810797413u },\r\n  {  6213926103737837599u, 14461296147288811288u,         101411680379u },\r\n  {  1233118281776157762u, 18305427728131488265u,         123783948434u },\r\n  {    30716279628678784u, 10253208939347909876u,         146992339225u },\r\n  { 15775734650898546688u,  6446028915490812012u,          25555827570u },\r\n  {   976806005729918976u, 12986063676957432257u,         114349439927u },\r\n  { 12460098853279891456u,  9769714697972762807u,         183703975922u },\r\n  {  5635665595421687808u,    97429465146664592u,         242529617295u },\r\n  {  1805943450575568896u, 16395571728207795868u,         143005281661u },\r\n  { 11529215046068469760u,  6331668478323650406u,         125888805724u },\r\n  {                    0u, 18129911846294207040u,          92343240435u },\r\n  {                    0u,  9890094564876124160u,         243982824490u },\r\n  {                    0u, 12290856656987750400u,          42536143100u },\r\n  {                    0u,  8498454992640802816u,         252666288674u },\r\n  {                    0u,  5341660584200896512u,          34460702168u },\r\n  {                    0u,  9288674231451648000u,         216289572000u },\r\n  {                    0u,  1152921504606846976u,         160503540039u },\r\n  {                    0u,                    0u,          71062500000u },\r\n  {                    0u,                    0u,         160000000000u },\r\n  {  4564018338575530435u,                 2081u,                    0u },\r\n  { 16553437246451512014u,        2081247415929u,                    0u },\r\n  {  4339777136957372927u, 15212079674427582639u,                  112u },\r\n  { 18439463366554654697u, 10179808126814248333u,         112824648491u },\r\n  {  1370067356680643003u,  6066766544199222848u,          43551848504u },\r\n  {  4210124040914115013u,  6625308131806923532u,          56328880073u },\r\n  { 10692225626142609720u,  9122786786400665713u,         201359158673u },\r\n  { 11592856673895384344u, 11932880778639151320u,         145494547262u },\r\n  { 10284479231227406269u,  3884040911779255011u,          62646882763u },\r\n  {  4961071383534266431u, 13441817515637357872u,         203210554279u },\r\n  { 10960611551445686988u, 11628577856022352826u,         167728682387u },\r\n  { 14616396723115619209u, 13296656925520243654u,         147630386468u },\r\n  {  1025604265437492803u,  5020720704545399398u,          36720813216u },\r\n  { 11711588454892179178u, 14121973606499014694u,         160272173814u },\r\n  {  5580373263251565705u,  3642481034345420114u,         246765553723u },\r\n  { 14109334653033148931u,  9845536238569696768u,          59197459292u },\r\n  {  2899414033769399895u, 17655403572195686356u,          92533727588u },\r\n  { 13233457234892808147u,  8377495365136654029u,         100957101345u },\r\n  {  3287946691509034862u, 13713682649609025426u,          33454144933u },\r\n  {  5488480288717445911u,  1367709905452854731u,         165743420226u },\r\n  { 11687233053874362630u,  9981467701727208680u,          66074143702u },\r\n  {  6783772100089274577u,  6277920117543306205u,         214541096448u },\r\n  {  7898291058728402485u,  9344111460418701726u,            340326731u },\r\n  {  4423684977486598491u,  4918507011364617264u,          75506545297u },\r\n  {  2750833684599526706u,  6554777203830755259u,         145266632799u },\r\n  { 15669689830489025709u,  4198262173120265648u,          95355335184u },\r\n  { 15117307274214954517u,  8080325935698446819u,          16227588248u },\r\n  {  8148639818575698175u, 12797633874200091733u,         152438035346u },\r\n  { 13006484426078994901u,  8376502502208665497u,         146693761122u },\r\n  { 10287496057845513526u,  9891973386793349173u,          98454091110u },\r\n  { 14159876032966532430u, 14877430279003795462u,         102536244951u },\r\n  { 15742212196465548019u,  8759933935842067041u,         215806507111u },\r\n  {  2892220461917134150u,  3753418510388703513u,         103474876970u },\r\n  {  7487151560715393883u,  2961383332545305985u,          42203473225u },\r\n  {  7245756744165177933u,  2497674184068629507u,          73160536912u },\r\n  {  3067122860671533987u, 15244544070742305452u,          80135399188u },\r\n  {  8135043905834122525u,    45953573565810823u,          20826408390u },\r\n  { 14730019368921022572u,  3960077421351906445u,         198002491148u },\r\n  {   495969939682055458u,  3173330011013883118u,          12214676227u },\r\n  {  5617761407265775598u, 11026266219545759160u,           3172026564u },\r\n  {  2087044847072781811u,  8886757764964685632u,         196597735089u },\r\n  { 15929674232061203330u, 13952322129918090479u,         177481752103u },\r\n  {  8658086469608285873u,  4127250666614902202u,          39756356898u },\r\n  { 18369871790780313570u, 17649958504065306911u,          34223738706u },\r\n  {  3545648451947416750u, 13269305359002216873u,          82956806167u },\r\n  { 13347376792767929959u, 16236593433831947843u,          23719330484u },\r\n  { 14482164459838203025u, 13580930396682424057u,         180880187493u },\r\n  {  8899577765623565820u,   421976357197961116u,         101736223712u },\r\n  {  7095320096604405719u,  2962130818798626533u,         224022875384u },\r\n  {  2968593824439315788u,  8234383947306356345u,         248160577433u },\r\n  { 12621408323612585636u,  4380469931801381425u,         153446386848u },\r\n  {  3954422936414648259u, 15279887469027055916u,         160237465750u },\r\n  { 17143730087577690191u,  8534542821713755552u,         150828324359u },\r\n  {  5033045529399041876u,  7814613482565088782u,           7462658493u },\r\n  { 15857648521994521781u, 13771954404705323224u,         189423631045u },\r\n  { 16655573486499109541u,  4568173274762548144u,         197746579144u },\r\n  { 16652154439190075858u,  8105292616250821343u,         200247641169u },\r\n  { 18016950600164130638u,  2923678426777275612u,          81439388793u },\r\n  {  2086292996072613910u,  1808633176918384049u,         121158492925u },\r\n  { 17324462585194799521u, 18118642609460438969u,         253098046200u },\r\n  { 11079151463184927232u, 18138164175864360870u,         248982213583u },\r\n  {  5239846817488961536u,  4031433690465792404u,         207983271850u },\r\n  {  2778806963520143360u,  5012226396942308537u,         170218544458u },\r\n  {  6240890740138835968u,  7889712298793536835u,          74271713337u },\r\n  { 17250651344549707776u, 13500762396543628804u,          57427702160u },\r\n  {  4197354852709302272u,   501020624068841347u,         144731877796u },\r\n  {  9223372036854775808u,  8370653768288261750u,         164027160382u },\r\n  {                    0u,   647579990023635200u,          62453774050u },\r\n  {                    0u, 11106569307181154304u,         226035105381u },\r\n  {                    0u, 10797461613892861952u,         101602088328u },\r\n  {                    0u, 17627230675448889344u,         136585331566u },\r\n  {                    0u, 12197735707942322176u,         110955574089u },\r\n  {                    0u, 12871287735024877568u,          73661240577u },\r\n  {                    0u,  4611686018427387904u,           1697753906u },\r\n  {                    0u,                    0u,          50250000000u },\r\n  {                    0u,                    0u,         128000000000u },\r\n  {  5654803392547571318u,             31757315u,                    0u },\r\n  {  2931628102185393332u,    31757315306547506u,                    0u },\r\n  { 15964697617980212305u,  9451803574512021605u,              1721567u },\r\n  {   450380868305846606u,  8662766454758138424u,         223512383298u },\r\n  { 14631133530814566148u,  9207992007314947035u,          66469609510u },\r\n  {    31969822783742095u, 17118602861291201802u,          38499166246u },\r\n  { 10437269029385743245u, 11186560605745599967u,          38928001320u },\r\n  { 15196146496377392433u, 10505549821532796847u,          40606424665u },\r\n  {  4409099735137480938u, 18133667530488679216u,          89569506996u },\r\n  { 10644987914903248118u, 10778135771244330799u,         180983028086u },\r\n  {  3154431617534062973u, 17087985777033767391u,         118584283910u },\r\n  { 11702056331247960454u,  2639185991757283040u,           6926341565u },\r\n  { 15575315065965259114u,  5401720287293896400u,         189143070559u },\r\n  { 10759747609480050226u,  9816495392633895233u,          95292827843u },\r\n  { 12538236653960743718u, 10042051500090034990u,         195532153281u },\r\n  { 17857942663978005403u, 11629689537856384738u,         193544380702u },\r\n  { 11443004154750813211u,  2099086731766010483u,          30630446733u },\r\n  {  4004313188770806737u, 13665537898516458594u,         141113791719u },\r\n  { 17134872954824183228u, 16375672064669490764u,         231740810293u },\r\n  {  2659553912986171234u,  7770550512184564348u,          53887726961u },\r\n  {  9501854300969137926u,  6197048880720627314u,         113421242387u },\r\n  { 14528169966301018150u, 17963594118523106281u,          19335942692u },\r\n  { 18172091996515901778u,  8255454642407818663u,          36973808388u },\r\n  {  1133541705604751035u, 16744201957549498409u,           4447529092u },\r\n  { 18280349987988641497u, 17442505417202859722u,         132907705006u },\r\n  {  9936015874712336386u,  6383975767786687150u,         174945560113u },\r\n  { 15876720399740689614u, 15245442964998335795u,          49346076019u },\r\n  {  8618117825152456982u,  2910016124519524433u,         115826457119u },\r\n  {  8085525680745921564u,  3847913871169988463u,          31157752290u },\r\n  {  8072355444669730953u, 17210451512590059177u,         226208595828u },\r\n  {  9395030504766848294u, 17899408909991454145u,         116932980445u },\r\n  {  3537903114058185903u,  5920601932753251608u,         221970328901u },\r\n  {  2126094743961928691u, 16521781895108979744u,          69320956473u },\r\n  {   289185362555601115u,  3697493405554698771u,          57895647591u },\r\n  { 16909937501450129614u,  2816108280295732065u,         103200441519u },\r\n  { 14449642060360499058u, 14251078772056398988u,         175152661535u },\r\n  { 12433818908498244393u,  4543066550096031417u,          31772552528u },\r\n  { 11884444034578008581u,  3099369389734296977u,          80246280131u },\r\n  {   988625838444140793u,  5243484113636490986u,         195168017151u },\r\n  {  1675370907158909973u,  6823370511605197226u,         255284249843u },\r\n  { 15920186275316934067u, 11396290277624641942u,         243369895656u },\r\n  {  5600921198503757726u, 15934361408437566099u,         232617794133u },\r\n  { 10457357161776341741u, 14939272230935131954u,          85863803462u },\r\n  { 12225356765775740093u,  7500666177940329347u,          70809859570u },\r\n  {  4486633318598164537u,  4806714453065462270u,         242406611928u },\r\n  { 10302486602879381361u, 11557851247268441487u,         216260572512u },\r\n  { 15536428611301239541u, 10655523157206817381u,          96626552371u },\r\n  { 12026126645955462603u, 14769600176490881210u,          51577637067u },\r\n  { 14877968141142123551u, 16688495540925795167u,         203800661629u },\r\n  {   734560801645383190u,   909793965395524173u,         125904685156u },\r\n  { 15648943144911081638u, 12724590949761703756u,         100049320029u },\r\n  { 13664182862003235646u, 10810739657314826395u,          93689801457u },\r\n  {  3895127525902132786u,  2431218615388671301u,         241586051371u },\r\n  {  5249187334214137467u,  4235001167959059286u,          43131796625u },\r\n  { 10642260063359027505u,  6253317787396334247u,         145229579873u },\r\n  {   783598951897779422u,  9534525563070371898u,          97338993036u },\r\n  {  5538576558607624843u,  8392783992374030728u,         140516867666u },\r\n  { 15974581187564609611u, 16356257019231647540u,          82454973731u },\r\n  {  7474269406918257428u, 12896334001521091877u,          35886674469u },\r\n  {  8045286838779138019u,  1427636373320877084u,          37699111667u },\r\n  {  8184246376556341732u, 16116755731295043521u,         243077392322u },\r\n  {  1493267152679331840u, 15945633911163986837u,         194873691078u },\r\n  { 10179074811222818816u,  7510154241072743838u,         198864414546u },\r\n  {  3892499202005008384u,  3571560509790395119u,          82407126277u },\r\n  { 10341173215925108736u,  3576991649007035076u,           5193614683u },\r\n  {  6230307872002015232u, 15509961892750732443u,          91193909105u },\r\n  {  9295429630892703744u, 17789791359353349378u,         113840796718u },\r\n  {                    0u, 18331227331079738314u,          46964386521u },\r\n  {                    0u, 15386712883100476416u,         217993737824u },\r\n  {                    0u, 14082462055028752384u,          96834115376u },\r\n  {                    0u, 12919043128765186048u,          48763411797u },\r\n  {                    0u,  6125373368465096704u,          85700342731u },\r\n  {                    0u, 12335992698065387520u,         203332057155u },\r\n  {                    0u,  2774217370460225536u,          67668735504u },\r\n  {                    0u,                    0u,          16150390625u },\r\n  {                    0u,                    0u,          97000000000u },\r\n  { 10665454627995623288u,                  484u,                    0u },\r\n  { 16803537892767562832u,         484578175453u,                    0u },\r\n  {  8099123106849104444u,  4962829537462579598u,                   26u },\r\n  {  7077413686679401728u,  5711259460785241095u,          26269035528u },\r\n  { 13536636358372449666u, 13845894607204897444u,           8309607995u },\r\n  {  7280632235418610318u, 12116633056637003327u,          59750587450u },\r\n  {  6187823673116858809u,  2965791047992089560u,          58656843994u },\r\n  {  8624343686231740255u, 16021997451315962529u,         218160775854u },\r\n  {   806211610822132771u,  3942052271663803856u,         174868554222u },\r\n  { 18388078233202190882u, 15669876414782439922u,         238213699081u },\r\n  {  7628864426595573600u, 10594415915406145286u,           9849465702u },\r\n  {  4530799784343874981u, 10789820553031921377u,         102574324437u },\r\n  {  8561580552078486438u,  3989990218583987244u,         213584917344u },\r\n  { 13349114951221999594u,  2937341169808224563u,          96216297803u },\r\n  { 10029144738508991772u, 16267436558584536843u,          75159233583u },\r\n  { 12601907197916268979u, 16221580362814625793u,          47881859502u },\r\n  {  1329580921391066941u,  9695437602320209830u,         174879373633u },\r\n  {  3198179786356761112u, 10729753156793715126u,          65525590725u },\r\n  { 11406753413634654142u,  2609241432056861929u,         197581661084u },\r\n  { 11131812960525182090u,  8462663743997037565u,         156141447261u },\r\n  { 14299636753645227208u, 14993422143908194069u,          93458761920u },\r\n  { 12964114684643663326u,  1307443894537745373u,         192812795043u },\r\n  {  5019257593846306316u, 10017257439419829265u,         163070876675u },\r\n  {  6929086798159998121u, 16754772009970777891u,           3543036613u },\r\n  { 18359765766933703649u, 11722573031602862387u,         197908278010u },\r\n  {  9993076234752063198u,  7363764277467092384u,         250635481957u },\r\n  {  3257189215046584509u,  6733958494847390772u,         101399190461u },\r\n  {  2905234736672690348u,  8799796600227451045u,         189365048621u },\r\n  { 12064985302079670056u, 10512023194742249826u,          45477037929u },\r\n  { 14315096064942799930u,  4572542132337197059u,         105569857919u },\r\n  { 11943971043551974038u, 12600500455757416832u,         127247878005u },\r\n  { 12472773152119929647u,  7873789864743195199u,         117683074498u },\r\n  {  7791259796982183085u, 15724851676325671539u,         194426839003u },\r\n  { 16866829442051086686u,  8748017220462413167u,         219852445917u },\r\n  {  3702498393844653053u, 14172589522760466448u,         221474230963u },\r\n  {  2057239613841701716u,  9520545591489413768u,         179768297617u },\r\n  { 17201969976738286226u, 12488551088392570222u,         145516109810u },\r\n  { 18271566505443461640u,  1135798823651241684u,         242677005711u },\r\n  { 18368509115417119804u, 11168725610120161972u,         143061571777u },\r\n  {  7613923684154518587u,  9580104948718508826u,         193605457828u },\r\n  { 17984805084714865232u, 16638722716909738765u,         164519338529u },\r\n  {  4220802739051410373u, 15732724012348272797u,          33901986965u },\r\n  { 17812459042810815760u, 12269722190021214142u,         149852872677u },\r\n  { 10629526089664605307u, 13110655916311972587u,         229665142972u },\r\n  { 17437443267816548473u,  6618112997062866867u,         188710730081u },\r\n  { 12506371893701049304u,  8457936459015989309u,          97358768624u },\r\n  { 15737221540003030739u,  3329167139937134914u,         240458505654u },\r\n  {  2358380859011605513u,  5245511557216705097u,         182180474512u },\r\n  { 10042972713837039706u,  5655931353280440466u,         144284359751u },\r\n  { 13424397272769642495u,   604622132328697393u,          71306608653u },\r\n  {  6867102315755663029u,  8673282619234652338u,          13032776631u },\r\n  {  8690748404825506734u, 16929477433058445690u,         183470179592u },\r\n  {   956229930815387710u, 11036952409253549455u,           8917748810u },\r\n  {  7734449506297687888u, 18199392190170386320u,          74598314388u },\r\n  { 16332184961683848151u,  9683116091880335715u,         148986591027u },\r\n  { 15580777817612768828u,  2993913337608915120u,          51524922775u },\r\n  { 17404245271944696092u,  4490779842162392585u,         151162300367u },\r\n  { 13201420160494469229u,   946849923353644618u,         207243445663u },\r\n  { 16511717657124068078u,  3613491058474899828u,         159051328837u },\r\n  { 14131292492116594062u, 14624054199004410935u,          69195887742u },\r\n  { 18429136031865875691u, 12088470271991908244u,         126792771566u },\r\n  {  2563978348305862197u, 10071980927725011290u,         238655317286u },\r\n  { 14239974392147482896u,  2833441711428854664u,          38546003180u },\r\n  { 11164201396098998272u, 17655572411864340446u,         236153601182u },\r\n  {  7116971104932986880u,  4997642792058747802u,         158957110498u },\r\n  { 12437629862867369984u, 11489200787635734848u,         226270922758u },\r\n  { 16501893821638901760u, 12983586226429536913u,           6622830822u },\r\n  { 10649324268870959104u, 12311150768725063152u,         230703841619u },\r\n  {  7205759403792793600u,  8530052476845967905u,          83667388820u },\r\n  {                    0u,  6282736361499820264u,         148462415071u },\r\n  {                    0u, 11337164765929082880u,         223340587820u },\r\n  {                    0u,  8343856200414134272u,          44614588933u },\r\n  {                    0u, 17889330377156198400u,           5452321350u },\r\n  {                    0u, 17730714064155312128u,          70969782542u },\r\n  {                    0u,  7449235258647511040u,          14961183935u },\r\n  {                    0u,  9943947977234055168u,         191403823852u },\r\n  {                    0u,                    0u,         236539062500u },\r\n  {                    0u,                    0u,         228000000000u },\r\n  {  3016823727048309817u,              7394076u,                    0u },\r\n  { 17405973192644624358u,     7394076163542341u,                    0u },\r\n  {  8937219978302591747u, 12396245121240683569u,               400833u },\r\n  { 15178463196824222317u, 10248996648596888561u,         193672001794u },\r\n  { 11979404627460330594u, 11257495103713935002u,           2555599221u },\r\n  {  2006448052689740002u,  7555396579247433114u,         117610270032u },\r\n  { 16330465320863239865u,  4805022328730367462u,          80409578869u },\r\n  { 17136208883957646553u,  7056637817080232586u,         117260480782u },\r\n  {   140455118208931867u, 10811411483818434913u,          14382541102u },\r\n  {  3964972929179372247u, 16962406704495245447u,          46586087790u },\r\n  {  3378050330022776379u, 18074517319117194669u,         110919533909u },\r\n  {  6065353437512901255u,  3702019776117654523u,          85979821547u },\r\n  { 12768753059854699889u,  3551977551381082764u,         235200686894u },\r\n  {  6848720690951013326u, 16442608985936005282u,          46192553088u },\r\n  { 10953228058585475132u,  3580046275479139588u,         128891355619u },\r\n  { 15539127852083296166u,  8737412692712715330u,         227194074697u },\r\n  { 14534853647735598497u,  3082033243045084752u,          73473656091u },\r\n  {  1506909603576368170u, 16401023756841128699u,          27167077356u },\r\n  {  5475702579938239025u,  7520296082779572869u,         236889101279u },\r\n  { 12039747373985783332u,  9854104766152464159u,         223407676067u },\r\n  { 17572399137760898460u, 14169188802648310188u,         163534192089u },\r\n  {   869552790852091236u,  2018609909210367042u,         217768113264u },\r\n  {  4549585778048181804u,  8270271948267674359u,         112109429062u },\r\n  {  4121918231767210357u, 12320338602894572099u,          70448332340u },\r\n  {  1558397953312543179u, 17538536685990080547u,          52667886893u },\r\n  {  6067524298738069781u, 15833914616956760474u,          45950765978u },\r\n  {  5811095224555517056u,  6137696141415969855u,         154858358231u },\r\n  {  6440894514158997188u,  9757490468419438919u,         215332725174u },\r\n  {  4612748874388784257u,  3566639201356598903u,         182528954618u },\r\n  {  9908101430749813367u,  9760900035773954449u,         250193347898u },\r\n  { 15150017990912190499u,  3873778773990716438u,          58529139451u },\r\n  { 17470426264690059239u,  2295668377270167832u,         251209997968u },\r\n  {  9615161096851907726u,  1791721710912807593u,         144124448432u },\r\n  {  9227932132124142224u, 10571009006922683279u,         176097129428u },\r\n  {  4794113194321211621u,  9840791932778184867u,         212573055546u },\r\n  {   391512698859146347u, 11525464956561274613u,          58533470399u },\r\n  { 17209658878068655842u,  4435781488897895433u,         191624796707u },\r\n  {  3077364726606876150u,  6395563367070996741u,          35240464196u },\r\n  {  1952989567673965814u, 15538690795135662932u,          68346704184u },\r\n  { 11172860676923186449u, 16294558813563371936u,          56842354115u },\r\n  { 17338078544784947239u,  4942096228426070342u,         195883329803u },\r\n  {  4593380466519703278u,  6910116424372647153u,          11267911573u },\r\n  {   786884753602720052u, 17923400669760829478u,         149374598161u },\r\n  { 17848875822468020539u,  4134686917293039955u,          17971629497u },\r\n  {  2899664567187130618u, 16857102463116098681u,         185224141826u },\r\n  {  2973178834961857409u, 11364321508775167451u,           2913825355u },\r\n  { 11117453141176836727u,  7966947780972783899u,          75616061103u },\r\n  {  7535238370146462002u, 11261055695926686278u,         175431889104u },\r\n  { 10246175467290865448u,  9227040437353594058u,         208610463052u },\r\n  {  1203128834127050464u,  7185344074282882061u,          76500198864u },\r\n  { 14518048959078919658u, 14197856148610578032u,         208389518282u },\r\n  {  1553474987376920024u,   885688687260429427u,         202769667324u },\r\n  { 14956572380830948369u, 17407816160380305183u,         252048013279u },\r\n  {  7594162606042048292u, 17812728703806357349u,         223943679604u },\r\n  { 14461296147288811288u, 17120198191964319867u,         116965629957u },\r\n  { 18305427728131488265u, 12091952048375408786u,           5928087803u },\r\n  { 10253208939347909876u,   405056939269888281u,         251655506034u },\r\n  {  6446028915490812012u, 12485440679452408690u,         114021958180u },\r\n  { 12986063676957432257u,  8394369900823444407u,          36676837095u },\r\n  {  9769714697972762807u,  2877421667354294258u,         231455059704u },\r\n  {    97429465146664592u,  2676980714750756239u,         248155985341u },\r\n  { 16395571728207795868u,  6119309228579057021u,         189145119415u },\r\n  {  6331668478323650406u, 18203256146533333852u,         183331728417u },\r\n  { 18129911846294207040u,   351919978865493747u,          33986800493u },\r\n  {  9890094564876124160u,  5190010931882390570u,         109019077620u },\r\n  { 12290856656987750400u,  6982466386088036604u,         244281351056u },\r\n  {  8498454992640802816u,  4707293888784996898u,         144378520261u },\r\n  {  5341660584200896512u,   690306801165964760u,         197255182913u },\r\n  {  9288674231451648000u, 12456770961278956704u,          65037421606u },\r\n  {  1152921504606846976u, 16946092489294063943u,          38675282906u },\r\n  {                    0u, 11098404173866185376u,         218918649514u },\r\n  {                    0u, 15152070965853306880u,         170601645695u },\r\n  {                    0u, 17370091362040414208u,         127821395412u },\r\n  {                    0u, 10141938552171134976u,         212941634539u },\r\n  {                    0u, 10586988556645826560u,         235549795590u },\r\n  {                    0u, 12169852093061922816u,           6573921799u },\r\n  {                    0u, 16717361816799281152u,           7659729003u },\r\n  {                    0u,                    0u,         107906250000u },\r\n  {                    0u,                    0u,          16000000000u },\r\n  { 15212079674427582639u,                  112u,                    0u },\r\n  { 10179808126814248333u,         112824648491u,                    0u },\r\n  {  6066766544199222848u,  2144184049294538808u,                    6u },\r\n  {  6625308131806923532u,  4108002197393276873u,           6116236450u },\r\n  {  9122786786400665713u,  6446230217393892753u,         162222695245u },\r\n  { 11932880778639151320u,  5571068025259989822u,          77349450840u },\r\n  {  3884040911779255011u, 14804812668872528331u,          88302008202u },\r\n  { 13441817515637357872u, 17369928488562523047u,         138802570502u },\r\n  { 11628577856022352826u,  2967474173531035027u,           6941625710u },\r\n  { 13296656925520243654u,  5291425437992807716u,         110160867097u },\r\n  {  5020720704545399398u, 14219547193739388064u,          25286848747u },\r\n  { 14121973606499014694u, 17720313647158217462u,         235770843197u },\r\n  {  3642481034345420114u, 12334850628290578491u,          61960620127u },\r\n  {  9845536238569696768u,  7818499847417334620u,          95668673592u },\r\n  { 17655403572195686356u,   136007040922198372u,          56423841726u },\r\n  {  8377495365136654029u,  8523477092112604449u,         190007372956u },\r\n  { 13713682649609025426u,   367934822655966629u,         156462058619u },\r\n  {  1367709905452854731u, 12964987687054730050u,         123019945786u },\r\n  {  9981467701727208680u, 15267036012420885462u,          58702833390u },\r\n  {  6277920117543306205u, 11142900264750765568u,         238827627680u },\r\n  {  9344111460418701726u, 13680181547777718603u,         160604057833u },\r\n  {  4918507011364617264u, 13001922925761426065u,         233741604127u },\r\n  {  6554777203830755259u,  2397730045956515935u,          31704835654u },\r\n  {  4198262173120265648u,  4482395522588406288u,          70129981206u },\r\n  {  8080325935698446819u,  3255525722490493080u,          22242991148u },\r\n  { 12797633874200091733u,   836222287193822098u,          44176482403u },\r\n  {  8376502502208665497u,   420898743993182306u,          99045331701u },\r\n  {  9891973386793349173u, 11652649973356574054u,         245022816966u },\r\n  { 14877430279003795462u, 15058402726661910231u,         198631691420u },\r\n  {  8759933935842067041u,  9600134495208339559u,         156816317647u },\r\n  {  3753418510388703513u, 14626343323989004842u,         207520424333u },\r\n  {  2961383332545305985u,  6813981265331086665u,         141792895660u },\r\n  {  2497674184068629507u, 10281745288790487888u,         172369386664u },\r\n  { 15244544070742305452u, 17569829347075761940u,         168557374528u },\r\n  {    45953573565810823u,  7654580675237889478u,          64952462357u },\r\n  {  3960077421351906445u, 16194838649686212364u,          21414955649u },\r\n  {  3173330011013883118u,  6495102772252453635u,         129877923962u },\r\n  { 11026266219545759160u, 14935159852819761348u,         122352100226u },\r\n  {  8886757764964685632u, 17381879863441579697u,         130809636637u },\r\n  { 13952322129918090479u,  9062335510435372583u,          29942273595u },\r\n  {  4127250666614902202u,  7569219009130126626u,          59491270192u },\r\n  { 17649958504065306911u, 12652124168176193362u,          48410328184u },\r\n  { 13269305359002216873u,  8940200224697247767u,         120685873025u },\r\n  { 16236593433831947843u,  5600570701927432884u,         129484649225u },\r\n  { 13580930396682424057u,  2018432801986093157u,           9303607546u },\r\n  {   421976357197961116u,  8235849749361824736u,         250109419461u },\r\n  {  2962130818798626533u,  9705097287982370040u,         197446466309u },\r\n  {  8234383947306356345u,  3517483139049842585u,           5526114378u },\r\n  {  4380469931801381425u,   958281614186777760u,          74190683143u },\r\n  { 15279887469027055916u,  7336473432636108950u,           7051948550u },\r\n  {  8534542821713755552u, 12955383920176764423u,           6397711021u },\r\n  {  7814613482565088782u, 10735469126281273789u,         173702312769u },\r\n  { 13771954404705323224u,  8637888232514730693u,          65581970947u },\r\n  {  4568173274762548144u,  6806336737533581000u,           3468260859u },\r\n  {  8105292616250821343u, 16142569672872330321u,         251368972253u },\r\n  {  2923678426777275612u,  8141285259947963513u,         221875090455u },\r\n  {  1808633176918384049u,  5220241098754220797u,          23441339958u },\r\n  { 18118642609460438969u,   154438799943119608u,          54282989837u },\r\n  { 18138164175864360870u,  2226876628677628879u,          13008372144u },\r\n  {  4031433690465792404u, 17219557081221357482u,         176120719223u },\r\n  {  5012226396942308537u, 15401507148161015114u,         119933474059u },\r\n  {  7889712298793536835u,  8842629766613985337u,          11834917375u },\r\n  { 13500762396543628804u,  3180100571546071440u,         255479359920u },\r\n  {   501020624068841347u,  7740848704392475044u,         176172393597u },\r\n  {  8370653768288261750u,  2014314126623495998u,         125419632249u },\r\n  {   647579990023635200u, 11209566016506885858u,         121109196187u },\r\n  { 11106569307181154304u,  7117166613733441125u,         155607671791u },\r\n  { 10797461613892861952u,  4197646860931880328u,         239385822375u },\r\n  { 17627230675448889344u,  5487263271238026094u,         167227554892u },\r\n  { 12197735707942322176u, 18148076225293562697u,          76297465137u },\r\n  { 12871287735024877568u,  9127276943027950849u,          49983809183u },\r\n  {  4611686018427387904u,  9691696125379324722u,         159494790674u },\r\n  {                    0u, 13102362262487705216u,          18525387899u },\r\n  {                    0u,  8929385439893192704u,         123710280481u },\r\n  {                    0u, 11891353410743566336u,          33484062954u },\r\n  {                    0u,  1587423090877399040u,         234644631560u },\r\n  {                    0u,  3489137423026225152u,           8086054378u },\r\n  {                    0u, 13046928120492326912u,         234189146518u },\r\n  {                    0u, 11529215046068469760u,         150707275390u },\r\n  {                    0u,                    0u,         126625000000u },\r\n  {                    0u,                    0u,          64000000000u },\r\n  {  9451803574512021605u,              1721567u,                    0u },\r\n  {  8662766454758138424u,     1721567512383298u,                    0u },\r\n  {  9207992007314947035u,  6674960280855494694u,                93326u },\r\n  { 17118602861291201802u, 16378845781483497510u,         142361850321u },\r\n  { 11186560605745599967u, 17606907750956804392u,         209887899008u },\r\n  { 10505549821532796847u, 13225609159240506969u,         128954472381u },\r\n  { 18133667530488679216u,  2668084873338435252u,         189716961709u },\r\n  { 10778135771244330799u, 14802814305275861366u,         173144637170u },\r\n  { 17087985777033767391u,  8005510553372365574u,         242802462171u },\r\n  {  2639185991757283040u, 12748500143273514429u,         219433979596u },\r\n  {  5401720287293896400u, 10393733905569036127u,         204691097577u },\r\n  {  9816495392633895233u,   603389089974790339u,         233563445444u },\r\n  { 10042051500090034990u,  2033494532597735873u,         196032709788u },\r\n  { 11629689537856384738u,  9204796763694620958u,         156110235959u },\r\n  {  2099086731766010483u,  7826260310402107021u,          55498993032u },\r\n  { 13665537898516458594u, 10122690201685169383u,         136424262421u },\r\n  { 16375672064669490764u,  7438455564568110133u,          21548752135u },\r\n  {  7770550512184564348u,  2805412574380520817u,           7403239484u },\r\n  {  6197048880720627314u,  7250965427231182867u,          60152081720u },\r\n  { 17963594118523106281u,  8136242944826085924u,          56393075623u },\r\n  {  8255454642407818663u, 15357191647956011780u,         167441066613u },\r\n  { 16744201957549498409u,  7369614426695395460u,         117832515027u },\r\n  { 17442505417202859722u, 10886957545142526638u,         211399507598u },\r\n  {  6383975767786687150u,  2030047207417538097u,         142590183151u },\r\n  { 15245442964998335795u, 11557093828502314355u,         239110049079u },\r\n  {  2910016124519524433u, 15201062539664128543u,          55626511311u },\r\n  {  3847913871169988463u,  8846936323343880674u,         207824051251u },\r\n  { 17210451512590059177u,  1485291750116245364u,          51479593379u },\r\n  { 17899408909991454145u,  2076024439668322013u,         163080517827u },\r\n  {  5920601932753251608u,  7029497773682748741u,         195112541510u },\r\n  { 16521781895108979744u, 16333533921668749881u,          70381069837u },\r\n  {  3697493405554698771u,  2065057316131928423u,          13885442648u },\r\n  {  2816108280295732065u,  7800502648925570223u,          88111946981u },\r\n  { 14251078772056398988u, 17011619967093802015u,         229422866095u },\r\n  {  4543066550096031417u,  5368819344429198672u,         175922201766u },\r\n  {  3099369389734296977u, 15598879366754275267u,         166291044279u },\r\n  {  5243484113636490986u, 16393893486035835647u,         183845616944u },\r\n  {  6823370511605197226u, 12042046205096920307u,          48888714746u },\r\n  { 11396290277624641942u, 15437070428008474344u,         250652800632u },\r\n  { 15934361408437566099u, 13704569163204647509u,         120836845264u },\r\n  { 14939272230935131954u, 18192483750856993350u,         208742926182u },\r\n  {  7500666177940329347u,  5152535865317963250u,         102986216520u },\r\n  {  4806714453065462270u, 17512614083933854680u,          72279319528u },\r\n  { 11557851247268441487u, 14481918350603613536u,         232949360711u },\r\n  { 10655523157206817381u, 16124419709964004915u,          71785066366u },\r\n  { 14769600176490881210u, 18088011566435813579u,         126874106543u },\r\n  { 16688495540925795167u, 15008862380698848893u,         175980553071u },\r\n  {   909793965395524173u, 18160498644611827812u,         111813632059u },\r\n  { 12724590949761703756u,  3604680497457231965u,          59984482604u },\r\n  { 10810739657314826395u,  5957615565551495921u,          44195410121u },\r\n  {  2431218615388671301u, 17528455034961565995u,         201322962986u },\r\n  {  4235001167959059286u,  8503772325120113809u,          42950219451u },\r\n  {  6253317787396334247u,  8501492578048509537u,         187460990421u },\r\n  {  9534525563070371898u,  2296237701094386060u,         213460866836u },\r\n  {  8392783992374030728u,  3753593040591076946u,          20124479295u },\r\n  { 16356257019231647540u,  8518075399775653155u,          63203482686u },\r\n  { 12896334001521091877u, 12757855675959554597u,          62461765792u },\r\n  {  1427636373320877084u,   121631169379748595u,         160691604742u },\r\n  { 16116755731295043521u, 16679062494579173314u,           6006593638u },\r\n  { 15945633911163986837u, 10739912744743898054u,         102904173789u },\r\n  {  7510154241072743838u,  9367340677776287570u,         221582211836u },\r\n  {  3571560509790395119u, 12227321512794715397u,         252507804555u },\r\n  {  3576991649007035076u,  7241061891859170651u,         139662844427u },\r\n  { 15509961892750732443u, 13148571323079237489u,          11392538751u },\r\n  { 17789791359353349378u, 12509763434355012654u,         127712785479u },\r\n  { 18331227331079738314u, 11812768946960181977u,          71678155634u },\r\n  { 15386712883100476416u, 14170358803552564832u,         114640371487u },\r\n  { 14082462055028752384u, 18179989524780635952u,          31768176689u },\r\n  { 12919043128765186048u, 17091718978514754901u,          49985539206u },\r\n  {  6125373368465096704u,  7394768384359232459u,         134926543942u },\r\n  { 12335992698065387520u,  6778628272692852803u,          70400871197u },\r\n  {  2774217370460225536u, 18193335045875234320u,          29367470174u },\r\n  {                    0u,  1378519212560967521u,          94986262669u },\r\n  {                    0u,  4677732610631043584u,         141074729676u },\r\n  {                    0u, 17296098591070486528u,         204253580392u },\r\n  {                    0u,  7343735382392963072u,         104937623383u },\r\n  {                    0u, 14525996728454217728u,          87398104692u },\r\n  {                    0u,  9691359370008330240u,         116787455860u },\r\n  {                    0u,  3044433348102455296u,         116525369644u },\r\n  {                    0u,  9223372036854775808u,          44165039062u },\r\n  {                    0u,                    0u,         214500000000u },\r\n  {  4962829537462579598u,                   26u,                    0u },\r\n  {  5711259460785241095u,          26269035528u,                    0u },\r\n  { 13845894607204897444u,  7822291454600056379u,                    1u },\r\n  { 12116633056637003327u,  8201586317771250746u,           1424047269u },\r\n  {  2965791047992089560u,  3278889188817135834u,         165444608885u },\r\n  { 16021997451315962529u,  1710725240251040430u,         117177748939u },\r\n  {  3942052271663803856u,  1850175733663425006u,         203092738601u },\r\n  { 15669876414782439922u,  9147599666163914249u,          41100298227u },\r\n  { 10594415915406145286u, 10221885933644344166u,         243495892371u },\r\n  { 10789820553031921377u, 14901479793736678101u,         147554129546u },\r\n  {  3989990218583987244u,  5181831442059703136u,         138807810838u },\r\n  {  2937341169808224563u,  6396246577759793483u,          22280907645u },\r\n  { 16267436558584536843u, 14167229556464870447u,         125346741221u },\r\n  { 16221580362814625793u,  2969982933326311854u,         229768007053u },\r\n  {  9695437602320209830u,  7892677766222018881u,         141161003097u },\r\n  { 10729753156793715126u,   798698968922663621u,          89427862919u },\r\n  {  2609241432056861929u, 15926812109043458972u,         135043297557u },\r\n  {  8462663743997037565u,  8663842590352697437u,          21863394214u },\r\n  { 14993422143908194069u, 17093523026636671168u,         166469667847u },\r\n  {  1307443894537745373u,   839764004742743203u,           7926641740u },\r\n  { 10017257439419829265u, 16894643909298232323u,          76045523697u },\r\n  { 16754772009970777891u,  9066702926218949317u,         241915860481u },\r\n  { 11722573031602862387u,  9119392417260546810u,           1491506950u },\r\n  {  7363764277467092384u,  9723021096578315109u,           6494363253u },\r\n  {  6733958494847390772u, 14787464248751217597u,         117527086029u },\r\n  {  8799796600227451045u,  3733434565920249133u,         205801630043u },\r\n  { 10512023194742249826u,  6643788868836820841u,          91202389893u },\r\n  {  4572542132337197059u,  4729646697422664063u,         133360160516u },\r\n  { 12600500455757416832u,  4090144564201555829u,           4256394661u },\r\n  {  7873789864743195199u,  2109480737093400002u,         165221727181u },\r\n  { 15724851676325671539u, 16577155033369419739u,         205114355179u },\r\n  {  8748017220462413167u,   745377248603805917u,         235898649375u },\r\n  { 14172589522760466448u, 11305561465807999667u,          31040406981u },\r\n  {  9520545591489413768u,  2211245518782892177u,         197612875715u },\r\n  { 12488551088392570222u, 14170095199249735666u,         195119871859u },\r\n  {  1135798823651241684u, 17849973668116118927u,         115768162399u },\r\n  { 11168725610120161972u,  9020960204585720001u,          95967649011u },\r\n  {  9580104948718508826u, 10807134002871850916u,         243489027232u },\r\n  { 16638722716909738765u,  3925122626254791201u,         160585855908u },\r\n  { 15732724012348272797u, 17208463291312718997u,         164212781323u },\r\n  { 12269722190021214142u,  5145077219589447653u,          11932872664u },\r\n  { 13110655916311972587u, 17602397765035489468u,         216278915194u },\r\n  {  6618112997062866867u, 16422643262490753377u,         122954227894u },\r\n  {  8457936459015989309u,  2902509461400906224u,         182890273275u },\r\n  {  3329167139937134914u,  3422418805967265206u,         251157345353u },\r\n  {  5245511557216705097u,  4228874576277237392u,          73185529695u },\r\n  {  5655931353280440466u,  2553488530807495751u,          95229247750u },\r\n  {   604622132328697393u, 11546099176912486413u,           6138424890u },\r\n  {  8673282619234652338u, 10460791037534167991u,          58625915290u },\r\n  { 16929477433058445690u,  8127117908566000904u,         154567080618u },\r\n  { 11036952409253549455u, 11541304458088287306u,         170440571944u },\r\n  { 18199392190170386320u,  6249718665174839700u,          40625655368u },\r\n  {  9683116091880335715u, 13102508413386290995u,          72338797927u },\r\n  {  2993913337608915120u,  6274675218640661911u,         103710288404u },\r\n  {  4490779842162392585u,  3404497118599817167u,          20340150825u },\r\n  {   946849923353644618u, 11258566093988562335u,          41184558158u },\r\n  {  3613491058474899828u, 16762592482501635397u,          78610328090u },\r\n  { 14624054199004410935u,  5550125446725071998u,          26908701959u },\r\n  { 12088470271991908244u,  6370033225258510318u,           7300872903u },\r\n  { 10071980927725011290u,  1503521728674735398u,         199345320193u },\r\n  {  2833441711428854664u,  4250415082606384364u,           1081506076u },\r\n  { 17655572411864340446u,  6020091901030562974u,          28230415463u },\r\n  {  4997642792058747802u, 16288222967151527138u,         103326349835u },\r\n  { 11489200787635734848u,  6377016228656203782u,          11882986336u },\r\n  { 12983586226429536913u,  8378856515587563750u,          96345698742u },\r\n  { 12311150768725063152u, 15812881490200838483u,         182454218721u },\r\n  {  8530052476845967905u,  4548570371183413652u,         225857218023u },\r\n  {  6282736361499820264u, 16731431495283420383u,         231246578493u },\r\n  { 11337164765929082880u, 14737727629551135532u,          61907012718u },\r\n  {  8343856200414134272u, 12413722258104293893u,         110798933815u },\r\n  { 17889330377156198400u,   800899742400762438u,          55672949232u },\r\n  { 17730714064155312128u,   603197008376033550u,         240043416862u },\r\n  {  7449235258647511040u,  6380777281587743935u,          30032699375u },\r\n  {  9943947977234055168u, 10001440249018225388u,         239345902629u },\r\n  {                    0u,  5505914461980436708u,          37542179162u },\r\n  {                    0u,  1105464290051876864u,          90298476221u },\r\n  {                    0u,  4500443576769970176u,         189059927339u },\r\n  {                    0u,  2843045143185981440u,          43243969535u },\r\n  {                    0u,   660949699682893824u,         255154121786u },\r\n  {                    0u,   276549164618219520u,          58035830155u },\r\n  {                    0u,  4683743612465315840u,         139014991760u },\r\n  {                    0u,                    0u,         144253906250u },\r\n  {                    0u,                    0u,          74000000000u },\r\n  { 12396245121240683569u,               400833u,                    0u },\r\n  { 10248996648596888561u,      400833672001794u,                    0u },\r\n  { 11257495103713935002u,  4370024159708535157u,                21729u },\r\n  {  7555396579247433114u,  7166684413908503888u,         225236899484u },\r\n  {  4805022328730367462u, 10217286283215687029u,         156388506740u },\r\n  {  7056637817080232586u,  4767369911989629198u,         116553880199u },\r\n  { 10811411483818434913u, 14407999214182082862u,         135258439640u },\r\n  { 16962406704495245447u,  8472271297615317358u,         216781059202u },\r\n  { 18074517319117194669u,  6236024012584764757u,         130459282747u },\r\n  {  3702019776117654523u,  1951826556984620523u,          59338055539u },\r\n  {  3551977551381082764u, 12357130551551830830u,         115105808729u },\r\n  { 16442608985936005282u,  8927758011099278464u,          89669881389u },\r\n  {  3580046275479139588u, 10199854049407140323u,          45483974731u },\r\n  {  8737412692712715330u, 17895455027038549577u,          75552935195u },\r\n  {  3082033243045084752u, 16539200343720527131u,          27970114560u },\r\n  { 16401023756841128699u,  3536976106235802604u,            896591847u },\r\n  {  7520296082779572869u, 16980391644793590751u,         231191739858u },\r\n  {  9854104766152464159u, 10090294316609084067u,         210920508875u },\r\n  { 14169188802648310188u, 17603457857266236889u,         203546995950u },\r\n  {  2018609909210367042u, 11164962743035868272u,         238954285362u },\r\n  {  8270271948267674359u,  1585686890718568774u,          50605253843u },\r\n  { 12320338602894572099u, 10882524700472655412u,         211085960258u },\r\n  { 17538536685990080547u,  2194808754940947757u,          66589942846u },\r\n  { 15833914616956760474u,   274100791137209242u,          62118980821u },\r\n  {  6137696141415969855u, 12203404582981010903u,         213014859033u },\r\n  {  9757490468419438919u,   541940706340938166u,          25661547888u },\r\n  {  3566639201356598903u, 10305434016011833594u,         112029378664u },\r\n  {  9760900035773954449u,  7900783531944543546u,         104558658697u },\r\n  {  3873778773990716438u,  8920818625012419323u,         137428302333u },\r\n  {  2295668377270167832u, 12532363335400447632u,         253483598546u },\r\n  {  1791721710912807593u, 13483507182924762800u,         210679380777u },\r\n  { 10571009006922683279u,   415911049779278804u,          41730942389u },\r\n  {  9840791932778184867u,  3441628281170127418u,         181022546583u },\r\n  { 11525464956561274613u, 17830811568183566527u,         151186571042u },\r\n  {  4435781488897895433u, 17897295813176613411u,          34966610231u },\r\n  {  6395563367070996741u,  2086148701331574596u,          55970214350u },\r\n  { 15538690795135662932u, 13015567826878853432u,         206113090347u },\r\n  { 16294558813563371936u, 12944531121587846595u,          43705575345u },\r\n  {  4942096228426070342u,  3534180912913737995u,         177701724438u },\r\n  {  6910116424372647153u,  3447584022400118677u,          22191588331u },\r\n  { 17923400669760829478u,  6375676813770849297u,         235186893904u },\r\n  {  4134686917293039955u, 11580694081479200185u,          80345626132u },\r\n  { 16857102463116098681u,  1872134358882196482u,          20627790684u },\r\n  { 11364321508775167451u, 17602652840520938059u,          92101488606u },\r\n  {  7966947780972783899u, 10331040597716338351u,         222954241722u },\r\n  { 11261055695926686278u,    73785407041056976u,         186560046833u },\r\n  {  9227040437353594058u, 17166209109167902028u,         241003999914u },\r\n  {  7185344074282882061u,  8762475644006589904u,         170930582060u },\r\n  { 14197856148610578032u,  8839001228645872586u,          44475014756u },\r\n  {   885688687260429427u, 13558262784529110268u,         100479163216u },\r\n  { 17407816160380305183u,  5640853896420358111u,          80734994898u },\r\n  { 17812728703806357349u,  8459930353450835572u,         210305791302u },\r\n  { 17120198191964319867u,  7643830211500171269u,          70458613743u },\r\n  { 12091952048375408786u,  1308629115231236347u,         239414372866u },\r\n  {   405056939269888281u,  8957268500971669618u,           2070940926u },\r\n  { 12485440679452408690u,  7645679094277669412u,         254485574498u },\r\n  {  8394369900823444407u,  3821107497040617191u,          98414473094u },\r\n  {  2877421667354294258u,  8847137191985934072u,         134207142652u },\r\n  {  2676980714750756239u,  3531126524756088253u,         252479604268u },\r\n  {  6119309228579057021u,  8726915034124352183u,          44191422752u },\r\n  { 18203256146533333852u, 17611136727168068641u,          32473087011u },\r\n  {   351919978865493747u, 18017743272784259949u,          35954701634u },\r\n  {  5190010931882390570u, 18113575006829616116u,          66976743819u },\r\n  {  6982466386088036604u, 12805550441678740368u,         139981938868u },\r\n  {  4707293888784996898u,  8061966093393027781u,         180694190280u },\r\n  {   690306801165964760u, 11954593141554100801u,         200437040057u },\r\n  { 12456770961278956704u, 14068656112359197734u,         185648059792u },\r\n  { 16946092489294063943u,   895878255770467290u,         144762663376u },\r\n  { 11098404173866185376u, 10319906489512197802u,         208048565657u },\r\n  { 15152070965853306880u, 14551142616794302079u,         153559443251u },\r\n  { 17370091362040414208u, 15933181735739307476u,          51788819021u },\r\n  { 10141938552171134976u, 11524527334398983147u,          77863739512u },\r\n  { 10586988556645826560u, 11828012606225556742u,         120624745878u },\r\n  { 12169852093061922816u,  3556238869349799431u,         150641197848u },\r\n  { 16717361816799281152u,  7403090230513381483u,          24192784095u },\r\n  {                    0u, 10172292854665622800u,         223401322325u },\r\n  {                    0u, 11240746576366182400u,          85551441100u },\r\n  {                    0u, 17021927826892259328u,         204609362092u },\r\n  {                    0u,  9046328496309141504u,         172922760556u },\r\n  {                    0u,  8038996803112140800u,         108490402450u },\r\n  {                    0u, 17098478935265509376u,         146435794889u },\r\n  {                    0u,  7205759403792793600u,         201926910400u },\r\n  {                    0u,                    0u,         192390625000u },\r\n  {                    0u,                    0u,         232000000000u },\r\n  {  2144184049294538808u,                    6u,                    0u },\r\n  {  4108002197393276873u,           6116236450u,                    0u },\r\n  {  6446230217393892753u,  6116236450222695245u,                    0u },\r\n  {  5571068025259989822u,  6240972538554414168u,            331561842u },\r\n  { 14804812668872528331u,  4356262642990299018u,         114338323799u },\r\n  { 17369928488562523047u,  1335108558830511366u,          87236153471u },\r\n  {  2967474173531035027u, 18435704923261947246u,         127072376379u },\r\n  {  5291425437992807716u,  8395401931972636441u,          59999401566u },\r\n  { 14219547193739388064u, 12482665946362458347u,          94455115650u },\r\n  { 17720313647158217462u, 16101242875289374781u,         130676686676u },\r\n  { 12334850628290578491u,  4708983440241068127u,          84872850125u },\r\n  {  7818499847417334620u, 14856666972541426744u,         205255274503u },\r\n  {   136007040922198372u,  6938795288315789246u,           7805381530u },\r\n  {  8523477092112604449u,  5556307628265073820u,         154376152846u },\r\n  {   367934822655966629u,  1441404248927865979u,          14301208040u },\r\n  { 12964987687054730050u, 16710378912353838906u,         232078138680u },\r\n  { 15267036012420885462u, 18289940136919312110u,          56905871455u },\r\n  { 11142900264750765568u, 10217414145292657824u,          95991499641u },\r\n  { 13680181547777718603u, 12461165826430955753u,         121553887130u },\r\n  { 13001922925761426065u,   662762458988270879u,         154675521153u },\r\n  {  2397730045956515935u, 16488546856395302470u,         129035928424u },\r\n  {  4482395522588406288u,  2612816787977180950u,         104893845916u },\r\n  {  3255525722490493080u, 16446616379327454252u,         156141641081u },\r\n  {   836222287193822098u,  7842178508581740643u,         121891572860u },\r\n  {   420898743993182306u, 14779029861369369333u,         124425125348u },\r\n  { 11652649973356574054u,  2697664446153849542u,         228801172814u },\r\n  { 15058402726661910231u, 12135106444393649308u,          78146240682u },\r\n  {  9600134495208339559u,  9550285041205189839u,         170657845438u },\r\n  { 14626343323989004842u,  8790318168586740109u,         190517721989u },\r\n  {  6813981265331086665u, 14038474217155846828u,         133476524102u },\r\n  { 10281745288790487888u,  4263144264274812072u,          70761027212u },\r\n  { 17569829347075761940u, 11940456333341715520u,         140231105513u },\r\n  {  7654580675237889478u, 15751110736831573013u,         233647293434u },\r\n  { 16194838649686212364u, 18384528705472318081u,         250853869423u },\r\n  {  6495102772252453635u,  2393654818032310394u,         111996627298u },\r\n  { 14935159852819761348u, 12812209822018626434u,          98129760287u },\r\n  { 17381879863441579697u,  3110778569433458461u,          31694551286u },\r\n  {  9062335510435372583u,  2860264756226872891u,         246168635644u },\r\n  {  7569219009130126626u,  2384146980060315184u,         252155055263u },\r\n  { 12652124168176193362u, 14117430062880324728u,         159129244866u },\r\n  {  8940200224697247767u,  3769610173216737153u,         194765307417u },\r\n  {  5600570701927432884u, 17731974340232672009u,          25204350976u },\r\n  {  2018432801986093157u,  1971479303384713466u,            961252255u },\r\n  {  8235849749361824736u,  3449462959779012549u,         159106874107u },\r\n  {  9705097287982370040u, 13743454852043766533u,         251186995761u },\r\n  {  3517483139049842585u,  7417711187131879498u,          49745034180u },\r\n  {   958281614186777760u,  3650992383501007879u,         196402114929u },\r\n  {  7336473432636108950u, 12838770342493958662u,         113197920693u },\r\n  { 12955383920176764423u, 16025068246546338477u,         181695991134u },\r\n  { 10735469126281273789u,  6579965938260177729u,          94868720690u },\r\n  {  8637888232514730693u,  4742939430174291459u,          50356700668u },\r\n  {  6806336737533581000u, 13062256857527449083u,         252257115261u },\r\n  { 16142569672872330321u,  2301174570202439645u,         125708106363u },\r\n  {  8141285259947963513u,  7638687886069412887u,         123124746923u },\r\n  {  5220241098754220797u,   936322449610274358u,         171414094100u },\r\n  {   154438799943119608u, 12926010544311283981u,          20050758141u },\r\n  {  2226876628677628879u, 12647854908989899184u,         253700720435u },\r\n  { 17219557081221357482u,  8862093163358513015u,          51685641588u },\r\n  { 15401507148161015114u,   444784343917630731u,         116480415033u },\r\n  {  8842629766613985337u, 11033952249213387263u,          57024111807u },\r\n  {  3180100571546071440u, 18168634046363183536u,         191598151749u },\r\n  {  7740848704392475044u,  3837904761417065597u,          69984923625u },\r\n  {  2014314126623495998u,   111459007020906105u,         233208053234u },\r\n  { 11209566016506885858u, 16191761957496794523u,         242006042204u },\r\n  {  7117166613733441125u,  9856250800340378607u,          92877757174u },\r\n  {  4197646860931880328u,  9491800102275105959u,         246534308426u },\r\n  {  5487263271238026094u, 10777328578953608268u,          74514551514u },\r\n  { 18148076225293562697u, 17424440628313779505u,         218584240152u },\r\n  {  9127276943027950849u,  3285814872419755679u,          24944580819u },\r\n  {  9691696125379324722u,  2824823424107240978u,         211178124381u },\r\n  { 13102362262487705216u, 12271707680713669755u,          93153133984u },\r\n  {  8929385439893192704u,  6951481875178001185u,         160665250606u },\r\n  { 11891353410743566336u, 10202522487003824362u,          46376840587u },\r\n  {  1587423090877399040u,  4834668463880990728u,         139553079852u },\r\n  {  3489137423026225152u, 10871520987687904746u,          44262087902u },\r\n  { 13046928120492326912u, 12057698794225322390u,         222589346333u },\r\n  { 11529215046068469760u,  7263351819222681214u,          29653649161u },\r\n  {                    0u,  1778055686910650944u,           9393747091u },\r\n  {                    0u, 17108187120491986944u,         147096388591u },\r\n  {                    0u,  3067636961549221888u,         239927436682u },\r\n  {                    0u, 16702141595163557888u,         138166296932u },\r\n  {                    0u,  2432053749942845440u,         100905424910u },\r\n  {                    0u, 17791470327927144448u,          14131841897u },\r\n  {                    0u,  1152921504606846976u,         105964477539u },\r\n  {                    0u,                    0u,          99062500000u },\r\n  {                    0u,                    0u,         160000000000u },\r\n  {  6674960280855494694u,                93326u,                    0u },\r\n  { 16378845781483497510u,       93326361850321u,                    0u },\r\n  { 17606907750956804392u,  4283581425266273664u,                 5059u },\r\n  { 13225609159240506969u,  6725911039793895357u,         195232213414u },\r\n  {  2668084873338435252u,  1188689198788975021u,         166364612368u },\r\n  { 14802814305275861366u, 10825527435847761650u,          16064438970u },\r\n  {  8005510553372365574u,  3917696829526085083u,         186586853018u },\r\n  { 12748500143273514429u, 12646861173976387276u,         154212378770u },\r\n  { 10393733905569036127u, 18398576063183996905u,         146685587717u },\r\n  {   603389089974790339u, 16919251228485834948u,           5997388806u },\r\n  {  2033494532597735873u, 17296019588687185052u,           6917194446u },\r\n  {  9204796763694620958u, 12365301604512770359u,         206937619100u },\r\n  {  7826260310402107021u,  2814271599679204744u,         156670324343u },\r\n  { 10122690201685169383u,  2154994415780170517u,         119152561969u },\r\n  {  7438455564568110133u,  6717373824370072839u,          49116822481u },\r\n  {  2805412574380520817u, 12709155755801344060u,         209364149564u },\r\n  {  7250965427231182867u,   826847911966403896u,          60688964714u },\r\n  {  8136242944826085924u,  2277322703890025383u,         106044823515u },\r\n  { 15357191647956011780u,  2774508958389496437u,         219123453911u },\r\n  {  7369614426695395460u,   245697774950120915u,         215150406432u },\r\n  { 10886957545142526638u,  1268929063431863950u,          32013319303u },\r\n  {  2030047207417538097u,  6735665673159411439u,         135068788782u },\r\n  { 11557093828502314355u, 14734771742997073207u,          46365141167u },\r\n  { 15201062539664128543u, 13683287077957612495u,         175798773576u },\r\n  {  8846936323343880674u, 15370263741354826803u,          72741772478u },\r\n  {  1485291750116245364u,    48035913070297507u,         190833223667u },\r\n  {  2076024439668322013u,  1206547475966802115u,         243002604032u },\r\n  {  7029497773682748741u, 13512340386605768006u,             65407069u },\r\n  { 16333533921668749881u,  2325760467700278797u,          93732505440u },\r\n  {  2065057316131928423u, 10848110652847753816u,          96126079727u },\r\n  {  7800502648925570223u, 15846378960784301285u,         239588077256u },\r\n  { 17011619967093802015u, 14121839924449844911u,         200859033924u },\r\n  {  5368819344429198672u,  5147613424753296550u,          68765546476u },\r\n  { 15598879366754275267u, 16817040482828810167u,         236279052682u },\r\n  { 16393893486035835647u,  5773528746119363888u,         138911653591u },\r\n  { 12042046205096920307u,  8716201595536184826u,         215312983620u },\r\n  { 15437070428008474344u,  5259122109038474872u,          68472506235u },\r\n  { 13704569163204647509u, 14744540084230155984u,         123285097580u },\r\n  { 18192483750856993350u, 10719345477982635878u,         108799303119u },\r\n  {  5152535865317963250u, 13698037261310555208u,         207581096882u },\r\n  { 17512614083933854680u, 16141171632951976936u,         178742572087u },\r\n  { 14481918350603613536u, 10060790174955808839u,          55875014667u },\r\n  { 16124419709964004915u,  4250043307981877118u,          11545396528u },\r\n  { 18088011566435813579u,  7075646198054337199u,          48230395309u },\r\n  { 15008862380698848893u, 18141738384245531503u,         173383571548u },\r\n  { 18160498644611827812u,  8174370508376809531u,          92983465608u },\r\n  {  3604680497457231965u,  3581964982731575596u,         136443133513u },\r\n  {  5957615565551495921u, 14798509948722114761u,          73194178710u },\r\n  { 17528455034961565995u, 14713923334885122090u,         150802228831u },\r\n  {  8503772325120113809u,  5042978054260414139u,          95797643382u },\r\n  {  8501492578048509537u,  2052996319372883413u,         118273380388u },\r\n  {  2296237701094386060u,  8825683007899981588u,          36111293153u },\r\n  {  3753593040591076946u,  9992196755378745151u,         225478441234u },\r\n  {  8518075399775653155u,  9301073417573669950u,          18541678071u },\r\n  { 12757855675959554597u,  5331614769144850592u,         247504212200u },\r\n  {   121631169379748595u, 14354009428310052102u,         232289027415u },\r\n  { 16679062494579173314u,  5581221063029119078u,          87778132410u },\r\n  { 10739912744743898054u,  1529260335339476189u,         186302558600u },\r\n  {  9367340677776287570u, 16483061525949201148u,         136082901368u },\r\n  { 12227321512794715397u, 14431217812333089675u,         120893548555u },\r\n  {  7241061891859170651u,  3452349151135392267u,          11782317885u },\r\n  { 13148571323079237489u,  9075317899834447999u,          61187152222u },\r\n  { 12509763434355012654u,  2764331337978901575u,          94491973969u },\r\n  { 11812768946960181977u,  1942890683708857202u,          81149854702u },\r\n  { 14170358803552564832u,   165089169728028447u,         238105324315u },\r\n  { 18179989524780635952u, 15193620741871233073u,          27008949501u },\r\n  { 17091718978514754901u, 14995000835194145926u,         253823647830u },\r\n  {  7394768384359232459u,  1788823614552255558u,          86812880624u },\r\n  {  6778628272692852803u,  8384901184618498845u,         240096972322u },\r\n  { 18193335045875234320u,   405511217862281310u,          34454546404u },\r\n  {  1378519212560967521u,  3111530463755196557u,         228021982807u },\r\n  {  4677732610631043584u,  7893558450035460812u,          87168676404u },\r\n  { 17296098591070486528u,   156573858237402216u,          52427910661u },\r\n  {  7343735382392963072u, 15915324019419451223u,           5008487885u },\r\n  { 14525996728454217728u, 16293363012778802804u,         205862771443u },\r\n  {  9691359370008330240u, 14342105318291351412u,         243883264978u },\r\n  {  3044433348102455296u,  3788398842525387052u,         210777487087u },\r\n  {  9223372036854775808u, 14118764407048307670u,         239205369512u },\r\n  {                    0u,  2705021334614720768u,         168765379752u },\r\n  {                    0u,  7017988973805568000u,         168146639500u },\r\n  {                    0u, 10956732053634154496u,         140380445944u },\r\n  {                    0u, 14657517938546835456u,         248593965634u },\r\n  {                    0u, 11268868284797157376u,          66794585639u },\r\n  {                    0u, 14600669991935148032u,          39610886573u },\r\n  {                    0u,  4611686018427387904u,         173791503906u },\r\n  {                    0u,                    0u,          34250000000u },\r\n  {                    0u,                    0u,         128000000000u },\r\n  {  8201586317771250746u,           1424047269u,                    0u },\r\n  {  3278889188817135834u,  1424047269444608885u,                    0u },\r\n  {  1710725240251040430u,  3001188830946823627u,             77197757u },\r\n  {  1850175733663425006u,  9732296932705387049u,         189162694772u },\r\n  {  9147599666163914249u, 16337535782679529459u,         116527588873u },\r\n  { 10221885933644344166u,  7969742269895046547u,           9885659589u },\r\n  { 14901479793736678101u,  2923592083903829642u,         197432040594u },\r\n  {  5181831442059703136u,  8144196241160608534u,         146158488244u },\r\n  {  6396246577759793483u, 16431078457793424253u,         180441497762u },\r\n  { 14167229556464870447u,   202362949592775653u,         162890730548u },\r\n  {  2969982933326311854u,  8835125248522947981u,          52010970117u },\r\n  {  7892677766222018881u,  7959873808777345113u,           5478953099u },\r\n  {   798698968922663621u, 14929747122315126151u,         139431505623u },\r\n  { 15926812109043458972u,  4310328817360515349u,         215809343213u },\r\n  {  8663842590352697437u,  7294899422760201126u,         237233663393u },\r\n  { 17093523026636671168u,  2047461597291187207u,         161395457290u },\r\n  {   839764004742743203u, 10942374468813517900u,          10110993115u },\r\n  { 16894643909298232323u, 10364795403063433969u,         219593187308u },\r\n  {  9066702926218949317u, 12330859528790939137u,         236561876684u },\r\n  {  9119392417260546810u,  8973160144879916806u,         204668457234u },\r\n  {  9723021096578315109u,  2895354388547509877u,          18486435986u },\r\n  { 14787464248751217597u, 16766844772497556429u,         146156957475u },\r\n  {  3733434565920249133u,  7442407174620948827u,          35908932476u },\r\n  {  6643788868836820841u,  6683013428676659077u,         124403453701u },\r\n  {  4729646697422664063u, 16713703375071907588u,           5362286883u },\r\n  {  4090144564201555829u,  8791044883080637861u,          35906051675u },\r\n  {  2109480737093400002u,   602844107089214413u,          91476563498u },\r\n  { 16577155033369419739u,  9754832281172880875u,          42032680244u },\r\n  {   745377248603805917u, 10587846778003503903u,          52528810517u },\r\n  { 11305561465807999667u, 17206244172922947013u,          21573968323u },\r\n  {  2211245518782892177u, 11620628420699303875u,         195932752365u },\r\n  { 14170095199249735666u, 17864732368219338611u,         237629955528u },\r\n  { 17849973668116118927u,  4146383014621345887u,         200968449082u },\r\n  {  9020960204585720001u, 11445705075042688243u,          58224775873u },\r\n  { 10807134002871850916u,  7369147888966546592u,         193620472915u },\r\n  {  3925122626254791201u,  9762476865090597796u,          83399482307u },\r\n  { 17208463291312718997u,  5507001428194242827u,         195529224931u },\r\n  {  5145077219589447653u, 11371471148365328344u,         227298535145u },\r\n  { 17602397765035489468u,  3148788104946538618u,         233616448686u },\r\n  { 16422643262490753377u,  3762722308424507574u,         174170696145u },\r\n  {  2902509461400906224u,  1156171244825745915u,         209203977585u },\r\n  {  3422418805967265206u, 14208921674868257865u,         113062676168u },\r\n  {  4228874576277237392u,  7903080886897905503u,         200770267187u },\r\n  {  2553488530807495751u,  6367240794154270982u,          51428426873u },\r\n  { 11546099176912486413u,  1623672396662369850u,         121345168815u },\r\n  { 10460791037534167991u, 18323231215381674394u,         175088019456u },\r\n  {  8127117908566000904u,  9842279843006544554u,            993304354u },\r\n  { 11541304458088287306u,  7376839231308610600u,          34533551059u },\r\n  {  6249718665174839700u,   609751749293657672u,         211399899256u },\r\n  { 13102508413386290995u, 10386457966860989799u,         120033054708u },\r\n  {  6274675218640661911u, 11160336020836149780u,         244563051014u },\r\n  {  3404497118599817167u, 17947559933847409193u,           6605003027u },\r\n  { 11258566093988562335u, 10229787001712704590u,          19972939173u },\r\n  { 16762592482501635397u, 10441677090043619866u,         165554557864u },\r\n  {  5550125446725071998u,  4996681336392922375u,         168566044449u },\r\n  {  6370033225258510318u,   124497102381021895u,          33270870638u },\r\n  {  1503521728674735398u,  8180812057779384577u,         110006749001u },\r\n  {  4250415082606384364u,  5294232873532946716u,          73443482710u },\r\n  {  6020091901030562974u,  2885620189169448039u,          86287000939u },\r\n  { 16288222967151527138u, 16662526875008170507u,         107156429783u },\r\n  {  6377016228656203782u, 15663095032402672480u,         215903277391u },\r\n  {  8378856515587563750u,  1824281504410546614u,          79849098083u },\r\n  { 15812881490200838483u,  9506565509584809953u,          99098894498u },\r\n  {  4548570371183413652u, 16941136942345070055u,         162515351948u },\r\n  { 16731431495283420383u, 15924115693705937725u,         140918380873u },\r\n  { 14737727629551135532u,  9247807690406628462u,          73863248041u },\r\n  { 12413722258104293893u,  7993916633864834871u,         169501324659u },\r\n  {   800899742400762438u,  1018504409177639408u,         115433351089u },\r\n  {   603197008376033550u, 12097800686634130718u,         177055213234u },\r\n  {  6380777281587743935u,  6221488888422637551u,         178655823089u },\r\n  { 10001440249018225388u,  8229322865256080421u,         241337267588u },\r\n  {  5505914461980436708u,  7927745108183101786u,         132446112486u },\r\n  {  1105464290051876864u,  8488683721235326653u,         230429763923u },\r\n  {  4500443576769970176u, 11165516518170922283u,          83460172466u },\r\n  {  2843045143185981440u,  5463648141113596927u,         178605283863u },\r\n  {   660949699682893824u,  3958440403860778042u,          23296184959u },\r\n  {   276549164618219520u,  5091534813990256011u,         127214587484u },\r\n  {  4683743612465315840u,  6100166970623291280u,          92276012655u },\r\n  {                    0u,  1913011027739012426u,         111330690714u },\r\n  {                    0u, 11310957650604221440u,         154103704535u },\r\n  {                    0u, 16303817257009020928u,         215613168242u },\r\n  {                    0u,  9090406322154766336u,         114883831704u },\r\n  {                    0u,  3003279315069566976u,         152492791914u },\r\n  {                    0u, 16582887146675765248u,         106162808097u },\r\n  {                    0u,  9691746398101307392u,          33898960113u },\r\n  {                    0u,                    0u,         241525390625u },\r\n  {                    0u,                    0u,          33000000000u },\r\n};\r\n\r\n// ^^^^^^^^^^ DERIVED FROM d2fixed_full_table.h ^^^^^^^^^^\r\n\r\n    // clang-format on\r\n\r\n} // namespace std\r\n"
  },
  {
    "path": "stl/src/xcharconv_tables_double.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <xcharconv_tables.h>\r\n\r\nnamespace std {\r\n\r\n    const uint64_t _General_precision_tables_2<double>::_Special_X_table[195] = {0x3F18E757928E0C9Du,\r\n        0x3F4F212D77318FC5u, 0x3F8374BC6A7EF9DBu, 0x3FB851EB851EB851u, 0x3FEE666666666666u, 0x4022FFFFFFFFFFFFu,\r\n        0x3F1A1554FBDAD751u, 0x3F504D551D68C692u, 0x3F8460AA64C2F837u, 0x3FB978D4FDF3B645u, 0x3FEFD70A3D70A3D7u,\r\n        0x4023E66666666666u, 0x4058DFFFFFFFFFFFu, 0x3F1A3387ECC8EB96u, 0x3F506034F3FD933Eu, 0x3F84784230FCF80Du,\r\n        0x3FB99652BD3C3611u, 0x3FEFFBE76C8B4395u, 0x4023FD70A3D70A3Du, 0x4058FCCCCCCCCCCCu, 0x408F3BFFFFFFFFFFu,\r\n        0x3F1A368D04E0BA6Au, 0x3F506218230C7482u, 0x3F847A9E2BCF91A3u, 0x3FB99945B6C3760Bu, 0x3FEFFF972474538Eu,\r\n        0x4023FFBE76C8B439u, 0x4058FFAE147AE147u, 0x408F3F9999999999u, 0x40C387BFFFFFFFFFu, 0x3F1A36DA54164F19u,\r\n        0x3F506248748DF16Fu, 0x3F847ADA91B16DCBu, 0x3FB99991361DC93Eu, 0x3FEFFFF583A53B8Eu, 0x4023FFF972474538u,\r\n        0x4058FFF7CED91687u, 0x408F3FF5C28F5C28u, 0x40C387F999999999u, 0x40F869F7FFFFFFFFu, 0x3F1A36E20F35445Du,\r\n        0x3F50624D49814ABAu, 0x3F847AE09BE19D69u, 0x3FB99998C2DA04C3u, 0x3FEFFFFEF39085F4u, 0x4023FFFF583A53B8u,\r\n        0x4058FFFF2E48E8A7u, 0x408F3FFEF9DB22D0u, 0x40C387FF5C28F5C2u, 0x40F869FF33333333u, 0x412E847EFFFFFFFFu,\r\n        0x3F1A36E2D51EC34Bu, 0x3F50624DC5333A0Eu, 0x3F847AE136800892u, 0x3FB9999984200AB7u, 0x3FEFFFFFE5280D65u,\r\n        0x4023FFFFEF39085Fu, 0x4058FFFFEB074A77u, 0x408F3FFFE5C91D14u, 0x40C387FFEF9DB22Du, 0x40F869FFEB851EB8u,\r\n        0x412E847FE6666666u, 0x416312CFEFFFFFFFu, 0x3F1A36E2E8E94FFCu, 0x3F50624DD191D1FDu, 0x3F847AE145F6467Du,\r\n        0x3FB999999773D81Cu, 0x3FEFFFFFFD50CE23u, 0x4023FFFFFE5280D6u, 0x4058FFFFFDE7210Bu, 0x408F3FFFFD60E94Eu,\r\n        0x40C387FFFE5C91D1u, 0x40F869FFFDF3B645u, 0x412E847FFD70A3D7u, 0x416312CFFE666666u, 0x4197D783FDFFFFFFu,\r\n        0x3F1A36E2EAE3F7A7u, 0x3F50624DD2CE7AC8u, 0x3F847AE14782197Bu, 0x3FB9999999629FD9u, 0x3FEFFFFFFFBB47D0u,\r\n        0x4023FFFFFFD50CE2u, 0x4058FFFFFFCA501Au, 0x408F3FFFFFBCE421u, 0x40C387FFFFD60E94u, 0x40F869FFFFCB923Au,\r\n        0x412E847FFFBE76C8u, 0x416312CFFFD70A3Du, 0x4197D783FFCCCCCCu, 0x41CDCD64FFBFFFFFu, 0x3F1A36E2EB16A205u,\r\n        0x3F50624DD2EE2543u, 0x3F847AE147A9AE94u, 0x3FB9999999941A39u, 0x3FEFFFFFFFF920C8u, 0x4023FFFFFFFBB47Du,\r\n        0x4058FFFFFFFAA19Cu, 0x408F3FFFFFF94A03u, 0x40C387FFFFFBCE42u, 0x40F869FFFFFAC1D2u, 0x412E847FFFF97247u,\r\n        0x416312CFFFFBE76Cu, 0x4197D783FFFAE147u, 0x41CDCD64FFF99999u, 0x4202A05F1FFBFFFFu, 0x3F1A36E2EB1BB30Fu,\r\n        0x3F50624DD2F14FE9u, 0x3F847AE147ADA3E3u, 0x3FB9999999990CDCu, 0x3FEFFFFFFFFF5014u, 0x4023FFFFFFFF920Cu,\r\n        0x4058FFFFFFFF768Fu, 0x408F3FFFFFFF5433u, 0x40C387FFFFFF94A0u, 0x40F869FFFFFF79C8u, 0x412E847FFFFF583Au,\r\n        0x416312CFFFFF9724u, 0x4197D783FFFF7CEDu, 0x41CDCD64FFFF5C28u, 0x4202A05F1FFF9999u, 0x42374876E7FF7FFFu,\r\n        0x3F1A36E2EB1C34C3u, 0x3F50624DD2F1A0FAu, 0x3F847AE147AE0938u, 0x3FB9999999998B86u, 0x3FEFFFFFFFFFEE68u,\r\n        0x4023FFFFFFFFF501u, 0x4058FFFFFFFFF241u, 0x408F3FFFFFFFEED1u, 0x40C387FFFFFFF543u, 0x40F869FFFFFFF294u,\r\n        0x412E847FFFFFEF39u, 0x416312CFFFFFF583u, 0x4197D783FFFFF2E4u, 0x41CDCD64FFFFEF9Du, 0x4202A05F1FFFF5C2u,\r\n        0x42374876E7FFF333u, 0x426D1A94A1FFEFFFu, 0x3F1A36E2EB1C41BBu, 0x3F50624DD2F1A915u, 0x3F847AE147AE135Au,\r\n        0x3FB9999999999831u, 0x3FEFFFFFFFFFFE3Du, 0x4023FFFFFFFFFEE6u, 0x4058FFFFFFFFFEA0u, 0x408F3FFFFFFFFE48u,\r\n        0x40C387FFFFFFFEEDu, 0x40F869FFFFFFFEA8u, 0x412E847FFFFFFE52u, 0x416312CFFFFFFEF3u, 0x4197D783FFFFFEB0u,\r\n        0x41CDCD64FFFFFE5Cu, 0x4202A05F1FFFFEF9u, 0x42374876E7FFFEB8u, 0x426D1A94A1FFFE66u, 0x42A2309CE53FFEFFu,\r\n        0x3F1A36E2EB1C4307u, 0x3F50624DD2F1A9E4u, 0x3F847AE147AE145Eu, 0x3FB9999999999975u, 0x3FEFFFFFFFFFFFD2u,\r\n        0x4023FFFFFFFFFFE3u, 0x4058FFFFFFFFFFDCu, 0x408F3FFFFFFFFFD4u, 0x40C387FFFFFFFFE4u, 0x40F869FFFFFFFFDDu,\r\n        0x412E847FFFFFFFD5u, 0x416312CFFFFFFFE5u, 0x4197D783FFFFFFDEu, 0x41CDCD64FFFFFFD6u, 0x4202A05F1FFFFFE5u,\r\n        0x42374876E7FFFFDFu, 0x426D1A94A1FFFFD7u, 0x42A2309CE53FFFE6u, 0x42D6BCC41E8FFFDFu, 0x3F1A36E2EB1C4328u,\r\n        0x3F50624DD2F1A9F9u, 0x3F847AE147AE1477u, 0x3FB9999999999995u, 0x3FEFFFFFFFFFFFFBu, 0x4023FFFFFFFFFFFDu,\r\n        0x4058FFFFFFFFFFFCu, 0x408F3FFFFFFFFFFBu, 0x40C387FFFFFFFFFDu, 0x40F869FFFFFFFFFCu, 0x412E847FFFFFFFFBu,\r\n        0x416312CFFFFFFFFDu, 0x4197D783FFFFFFFCu, 0x41CDCD64FFFFFFFBu, 0x4202A05F1FFFFFFDu, 0x42374876E7FFFFFCu,\r\n        0x426D1A94A1FFFFFBu, 0x42A2309CE53FFFFDu, 0x42D6BCC41E8FFFFCu, 0x430C6BF52633FFFBu};\r\n\r\n    const uint64_t _General_precision_tables_2<double>::_Ordinary_X_table[314] = {0x3F1A36E2EB1C432Cu,\r\n        0x3F50624DD2F1A9FBu, 0x3F847AE147AE147Au, 0x3FB9999999999999u, 0x3FEFFFFFFFFFFFFFu, 0x4023FFFFFFFFFFFFu,\r\n        0x4058FFFFFFFFFFFFu, 0x408F3FFFFFFFFFFFu, 0x40C387FFFFFFFFFFu, 0x40F869FFFFFFFFFFu, 0x412E847FFFFFFFFFu,\r\n        0x416312CFFFFFFFFFu, 0x4197D783FFFFFFFFu, 0x41CDCD64FFFFFFFFu, 0x4202A05F1FFFFFFFu, 0x42374876E7FFFFFFu,\r\n        0x426D1A94A1FFFFFFu, 0x42A2309CE53FFFFFu, 0x42D6BCC41E8FFFFFu, 0x430C6BF52633FFFFu, 0x4341C37937E07FFFu,\r\n        0x4376345785D89FFFu, 0x43ABC16D674EC7FFu, 0x43E158E460913CFFu, 0x4415AF1D78B58C3Fu, 0x444B1AE4D6E2EF4Fu,\r\n        0x4480F0CF064DD591u, 0x44B52D02C7E14AF6u, 0x44EA784379D99DB4u, 0x45208B2A2C280290u, 0x4554ADF4B7320334u,\r\n        0x4589D971E4FE8401u, 0x45C027E72F1F1281u, 0x45F431E0FAE6D721u, 0x46293E5939A08CE9u, 0x465F8DEF8808B024u,\r\n        0x4693B8B5B5056E16u, 0x46C8A6E32246C99Cu, 0x46FED09BEAD87C03u, 0x4733426172C74D82u, 0x476812F9CF7920E2u,\r\n        0x479E17B84357691Bu, 0x47D2CED32A16A1B1u, 0x48078287F49C4A1Du, 0x483D6329F1C35CA4u, 0x48725DFA371A19E6u,\r\n        0x48A6F578C4E0A060u, 0x48DCB2D6F618C878u, 0x4911EFC659CF7D4Bu, 0x49466BB7F0435C9Eu, 0x497C06A5EC5433C6u,\r\n        0x49B18427B3B4A05Bu, 0x49E5E531A0A1C872u, 0x4A1B5E7E08CA3A8Fu, 0x4A511B0EC57E6499u, 0x4A8561D276DDFDC0u,\r\n        0x4ABABA4714957D30u, 0x4AF0B46C6CDD6E3Eu, 0x4B24E1878814C9CDu, 0x4B5A19E96A19FC40u, 0x4B905031E2503DA8u,\r\n        0x4BC4643E5AE44D12u, 0x4BF97D4DF19D6057u, 0x4C2FDCA16E04B86Du, 0x4C63E9E4E4C2F344u, 0x4C98E45E1DF3B015u,\r\n        0x4CCF1D75A5709C1Au, 0x4D03726987666190u, 0x4D384F03E93FF9F4u, 0x4D6E62C4E38FF872u, 0x4DA2FDBB0E39FB47u,\r\n        0x4DD7BD29D1C87A19u, 0x4E0DAC74463A989Fu, 0x4E428BC8ABE49F63u, 0x4E772EBAD6DDC73Cu, 0x4EACFA698C95390Bu,\r\n        0x4EE21C81F7DD43A7u, 0x4F16A3A275D49491u, 0x4F4C4C8B1349B9B5u, 0x4F81AFD6EC0E1411u, 0x4FB61BCCA7119915u,\r\n        0x4FEBA2BFD0D5FF5Bu, 0x502145B7E285BF98u, 0x50559725DB272F7Fu, 0x508AFCEF51F0FB5Eu, 0x50C0DE1593369D1Bu,\r\n        0x50F5159AF8044462u, 0x512A5B01B605557Au, 0x516078E111C3556Cu, 0x5194971956342AC7u, 0x51C9BCDFABC13579u,\r\n        0x5200160BCB58C16Cu, 0x52341B8EBE2EF1C7u, 0x526922726DBAAE39u, 0x529F6B0F092959C7u, 0x52D3A2E965B9D81Cu,\r\n        0x53088BA3BF284E23u, 0x533EAE8CAEF261ACu, 0x53732D17ED577D0Bu, 0x53A7F85DE8AD5C4Eu, 0x53DDF67562D8B362u,\r\n        0x5412BA095DC7701Du, 0x5447688BB5394C25u, 0x547D42AEA2879F2Eu, 0x54B249AD2594C37Cu, 0x54E6DC186EF9F45Cu,\r\n        0x551C931E8AB87173u, 0x5551DBF316B346E7u, 0x558652EFDC6018A1u, 0x55BBE7ABD3781ECAu, 0x55F170CB642B133Eu,\r\n        0x5625CCFE3D35D80Eu, 0x565B403DCC834E11u, 0x569108269FD210CBu, 0x56C54A3047C694FDu, 0x56FA9CBC59B83A3Du,\r\n        0x5730A1F5B8132466u, 0x5764CA732617ED7Fu, 0x5799FD0FEF9DE8DFu, 0x57D03E29F5C2B18Bu, 0x58044DB473335DEEu,\r\n        0x583961219000356Au, 0x586FB969F40042C5u, 0x58A3D3E2388029BBu, 0x58D8C8DAC6A0342Au, 0x590EFB1178484134u,\r\n        0x59435CEAEB2D28C0u, 0x59783425A5F872F1u, 0x59AE412F0F768FADu, 0x59E2E8BD69AA19CCu, 0x5A17A2ECC414A03Fu,\r\n        0x5A4D8BA7F519C84Fu, 0x5A827748F9301D31u, 0x5AB7151B377C247Eu, 0x5AECDA62055B2D9Du, 0x5B22087D4358FC82u,\r\n        0x5B568A9C942F3BA3u, 0x5B8C2D43B93B0A8Bu, 0x5BC19C4A53C4E697u, 0x5BF6035CE8B6203Du, 0x5C2B843422E3A84Cu,\r\n        0x5C6132A095CE492Fu, 0x5C957F48BB41DB7Bu, 0x5CCADF1AEA12525Au, 0x5D00CB70D24B7378u, 0x5D34FE4D06DE5056u,\r\n        0x5D6A3DE04895E46Cu, 0x5DA066AC2D5DAEC3u, 0x5DD4805738B51A74u, 0x5E09A06D06E26112u, 0x5E400444244D7CABu,\r\n        0x5E7405552D60DBD6u, 0x5EA906AA78B912CBu, 0x5EDF485516E7577Eu, 0x5F138D352E5096AFu, 0x5F48708279E4BC5Au,\r\n        0x5F7E8CA3185DEB71u, 0x5FB317E5EF3AB327u, 0x5FE7DDDF6B095FF0u, 0x601DD55745CBB7ECu, 0x6052A5568B9F52F4u,\r\n        0x60874EAC2E8727B1u, 0x60BD22573A28F19Du, 0x60F2357684599702u, 0x6126C2D4256FFCC2u, 0x615C73892ECBFBF3u,\r\n        0x6191C835BD3F7D78u, 0x61C63A432C8F5CD6u, 0x61FBC8D3F7B3340Bu, 0x62315D847AD00087u, 0x6265B4E5998400A9u,\r\n        0x629B221EFFE500D3u, 0x62D0F5535FEF2084u, 0x630532A837EAE8A5u, 0x633A7F5245E5A2CEu, 0x63708F936BAF85C1u,\r\n        0x63A4B378469B6731u, 0x63D9E056584240FDu, 0x64102C35F729689Eu, 0x6444374374F3C2C6u, 0x647945145230B377u,\r\n        0x64AF965966BCE055u, 0x64E3BDF7E0360C35u, 0x6518AD75D8438F43u, 0x654ED8D34E547313u, 0x6583478410F4C7ECu,\r\n        0x65B819651531F9E7u, 0x65EE1FBE5A7E7861u, 0x6622D3D6F88F0B3Cu, 0x665788CCB6B2CE0Cu, 0x668D6AFFE45F818Fu,\r\n        0x66C262DFEEBBB0F9u, 0x66F6FB97EA6A9D37u, 0x672CBA7DE5054485u, 0x6761F48EAF234AD3u, 0x679671B25AEC1D88u,\r\n        0x67CC0E1EF1A724EAu, 0x680188D357087712u, 0x6835EB082CCA94D7u, 0x686B65CA37FD3A0Du, 0x68A11F9E62FE4448u,\r\n        0x68D56785FBBDD55Au, 0x690AC1677AAD4AB0u, 0x6940B8E0ACAC4EAEu, 0x6974E718D7D7625Au, 0x69AA20DF0DCD3AF0u,\r\n        0x69E0548B68A044D6u, 0x6A1469AE42C8560Cu, 0x6A498419D37A6B8Fu, 0x6A7FE52048590672u, 0x6AB3EF342D37A407u,\r\n        0x6AE8EB0138858D09u, 0x6B1F25C186A6F04Cu, 0x6B537798F428562Fu, 0x6B88557F31326BBBu, 0x6BBE6ADEFD7F06AAu,\r\n        0x6BF302CB5E6F642Au, 0x6C27C37E360B3D35u, 0x6C5DB45DC38E0C82u, 0x6C9290BA9A38C7D1u, 0x6CC734E940C6F9C5u,\r\n        0x6CFD022390F8B837u, 0x6D3221563A9B7322u, 0x6D66A9ABC9424FEBu, 0x6D9C5416BB92E3E6u, 0x6DD1B48E353BCE6Fu,\r\n        0x6E0621B1C28AC20Bu, 0x6E3BAA1E332D728Eu, 0x6E714A52DFFC6799u, 0x6EA59CE797FB817Fu, 0x6EDB04217DFA61DFu,\r\n        0x6F10E294EEBC7D2Bu, 0x6F451B3A2A6B9C76u, 0x6F7A6208B5068394u, 0x6FB07D457124123Cu, 0x6FE49C96CD6D16CBu,\r\n        0x7019C3BC80C85C7Eu, 0x70501A55D07D39CFu, 0x708420EB449C8842u, 0x70B9292615C3AA53u, 0x70EF736F9B3494E8u,\r\n        0x7123A825C100DD11u, 0x7158922F31411455u, 0x718EB6BAFD91596Bu, 0x71C33234DE7AD7E2u, 0x71F7FEC216198DDBu,\r\n        0x722DFE729B9FF152u, 0x7262BF07A143F6D3u, 0x72976EC98994F488u, 0x72CD4A7BEBFA31AAu, 0x73024E8D737C5F0Au,\r\n        0x7336E230D05B76CDu, 0x736C9ABD04725480u, 0x73A1E0B622C774D0u, 0x73D658E3AB795204u, 0x740BEF1C9657A685u,\r\n        0x74417571DDF6C813u, 0x7475D2CE55747A18u, 0x74AB4781EAD1989Eu, 0x74E10CB132C2FF63u, 0x75154FDD7F73BF3Bu,\r\n        0x754AA3D4DF50AF0Au, 0x7580A6650B926D66u, 0x75B4CFFE4E7708C0u, 0x75EA03FDE214CAF0u, 0x7620427EAD4CFED6u,\r\n        0x7654531E58A03E8Bu, 0x768967E5EEC84E2Eu, 0x76BFC1DF6A7A61BAu, 0x76F3D92BA28C7D14u, 0x7728CF768B2F9C59u,\r\n        0x775F03542DFB8370u, 0x779362149CBD3226u, 0x77C83A99C3EC7EAFu, 0x77FE494034E79E5Bu, 0x7832EDC82110C2F9u,\r\n        0x7867A93A2954F3B7u, 0x789D9388B3AA30A5u, 0x78D27C35704A5E67u, 0x79071B42CC5CF601u, 0x793CE2137F743381u,\r\n        0x79720D4C2FA8A030u, 0x79A6909F3B92C83Du, 0x79DC34C70A777A4Cu, 0x7A11A0FC668AAC6Fu, 0x7A46093B802D578Bu,\r\n        0x7A7B8B8A6038AD6Eu, 0x7AB137367C236C65u, 0x7AE585041B2C477Eu, 0x7B1AE64521F7595Eu, 0x7B50CFEB353A97DAu,\r\n        0x7B8503E602893DD1u, 0x7BBA44DF832B8D45u, 0x7BF06B0BB1FB384Bu, 0x7C2485CE9E7A065Eu, 0x7C59A742461887F6u,\r\n        0x7C9008896BCF54F9u, 0x7CC40AABC6C32A38u, 0x7CF90D56B873F4C6u, 0x7D2F50AC6690F1F8u, 0x7D63926BC01A973Bu,\r\n        0x7D987706B0213D09u, 0x7DCE94C85C298C4Cu, 0x7E031CFD3999F7AFu, 0x7E37E43C8800759Bu, 0x7E6DDD4BAA009302u,\r\n        0x7EA2AA4F4A405BE1u, 0x7ED754E31CD072D9u, 0x7F0D2A1BE4048F90u, 0x7F423A516E82D9BAu, 0x7F76C8E5CA239028u,\r\n        0x7FAC7B1F3CAC7433u, 0x7FE1CCF385EBC89Fu, 0x7FEFFFFFFFFFFFFFu};\r\n\r\n} // namespace std\r\n"
  },
  {
    "path": "stl/src/xcharconv_tables_float.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <xcharconv_tables.h>\r\n\r\nnamespace std {\r\n\r\n    const uint32_t _General_precision_tables_2<float>::_Special_X_table[63] = {0x38C73ABCu, 0x3A79096Bu, 0x3C1BA5E3u,\r\n        0x3DC28F5Cu, 0x3F733333u, 0x4117FFFFu, 0x38D0AAA7u, 0x3A826AA8u, 0x3C230553u, 0x3DCBC6A7u, 0x3F7EB851u,\r\n        0x411F3333u, 0x42C6FFFFu, 0x38D19C3Fu, 0x3A8301A7u, 0x3C23C211u, 0x3DCCB295u, 0x3F7FDF3Bu, 0x411FEB85u,\r\n        0x42C7E666u, 0x4479DFFFu, 0x38D1B468u, 0x3A8310C1u, 0x3C23D4F1u, 0x3DCCCA2Du, 0x3F7FFCB9u, 0x411FFDF3u,\r\n        0x42C7FD70u, 0x4479FCCCu, 0x461C3DFFu, 0x38D1B6D2u, 0x3A831243u, 0x3C23D6D4u, 0x3DCCCC89u, 0x3F7FFFACu,\r\n        0x411FFFCBu, 0x42C7FFBEu, 0x4479FFAEu, 0x461C3FCCu, 0x47C34FBFu, 0x38D1B710u, 0x3A83126Au, 0x3C23D704u,\r\n        0x3DCCCCC6u, 0x3F7FFFF7u, 0x411FFFFAu, 0x42C7FFF9u, 0x4479FFF7u, 0x461C3FFAu, 0x47C34FF9u, 0x497423F7u,\r\n        0x38D1B716u, 0x3A83126Eu, 0x3C23D709u, 0x3DCCCCCCu, 0x3F7FFFFFu, 0x411FFFFFu, 0x42C7FFFFu, 0x4479FFFFu,\r\n        0x461C3FFFu, 0x47C34FFFu, 0x497423FFu, 0x4B18967Fu};\r\n\r\n    const uint32_t _General_precision_tables_2<float>::_Ordinary_X_table[44] = {0x38D1B717u, 0x3A83126Eu, 0x3C23D70Au,\r\n        0x3DCCCCCCu, 0x3F7FFFFFu, 0x411FFFFFu, 0x42C7FFFFu, 0x4479FFFFu, 0x461C3FFFu, 0x47C34FFFu, 0x497423FFu,\r\n        0x4B18967Fu, 0x4CBEBC1Fu, 0x4E6E6B27u, 0x501502F8u, 0x51BA43B7u, 0x5368D4A5u, 0x551184E7u, 0x56B5E620u,\r\n        0x58635FA9u, 0x5A0E1BC9u, 0x5BB1A2BCu, 0x5D5E0B6Bu, 0x5F0AC723u, 0x60AD78EBu, 0x6258D726u, 0x64078678u,\r\n        0x65A96816u, 0x6753C21Bu, 0x69045951u, 0x6AA56FA5u, 0x6C4ECB8Fu, 0x6E013F39u, 0x6FA18F07u, 0x7149F2C9u,\r\n        0x72FC6F7Cu, 0x749DC5ADu, 0x76453719u, 0x77F684DFu, 0x799A130Bu, 0x7B4097CEu, 0x7CF0BDC2u, 0x7E967699u,\r\n        0x7F7FFFFFu};\r\n\r\n} // namespace std\r\n"
  },
  {
    "path": "stl/src/xcosh.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cerrno>\r\n#include <cmath>\r\n#include <ymath.h>\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n_CRTIMP2_PURE double __CLRCALL_PURE_OR_CDECL _Cosh(double x, double y) noexcept { // compute y * cosh(x), |y| <= 1\r\n    switch (_STD fpclassify(x)) { // test for special codes\r\n    case FP_NAN:\r\n    case FP_INFINITE:\r\n        return x;\r\n    case FP_ZERO:\r\n        return y;\r\n    default: // finite\r\n        if (y == 0.0) {\r\n            return y;\r\n        }\r\n\r\n        if (x < 0.0) {\r\n            x = -x;\r\n        }\r\n\r\n        constexpr double _Xbig = ((48 + _DOFF) + 2) * 0.347;\r\n        if (x < _Xbig) { // worth adding in exp(-x)\r\n            _Exp(&x, 1.0, -1);\r\n            return y * (x + 0.25 / x);\r\n        }\r\n        switch (_Exp(&x, y, -1)) {\r\n        case FP_ZERO: // report underflow\r\n        case FP_INFINITE: // report overflow\r\n            errno = ERANGE;\r\n            break;\r\n        }\r\n        return x;\r\n    }\r\n}\r\n\r\n_CRTIMP2_PURE long double __CLRCALL_PURE_OR_CDECL _LCosh(long double x, long double y) noexcept {\r\n    return _Cosh(static_cast<double>(x), static_cast<double>(y));\r\n}\r\n\r\n_CRTIMP2_PURE float __CLRCALL_PURE_OR_CDECL _FCosh(float x, float y) noexcept { // compute y * cosh(x), |y| <= 1\r\n    switch (_STD fpclassify(x)) { // test for special codes\r\n    case FP_NAN:\r\n    case FP_INFINITE:\r\n        return x;\r\n    case FP_ZERO:\r\n        return y;\r\n    default: // finite\r\n        if (y == 0.0) {\r\n            return y;\r\n        }\r\n\r\n        if (x < 0.0) {\r\n            x = -x;\r\n        }\r\n\r\n        constexpr float _FXbig = ((16 + _FOFF) + 2) * 0.347f;\r\n        if (x < _FXbig) { // worth adding in exp(-x)\r\n            _FExp(&x, 1.0F, -1);\r\n            return y * (x + 0.25F / x);\r\n        }\r\n        switch (_FExp(&x, y, -1)) {\r\n        case FP_ZERO: // report underflow\r\n        case FP_INFINITE: // report overflow\r\n            errno = ERANGE;\r\n            break;\r\n        }\r\n        return x;\r\n    }\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xdateord.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// look up date ordering\r\n\r\n#include <locale>\r\n\r\n#include <Windows.h>\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Getdateorder() noexcept { // return date order for current locale\r\n    const wchar_t* const locale_name = ___lc_locale_name_func()[LC_TIME];\r\n    if (locale_name == nullptr) { // Indicates \"C\" locale; GetLocaleInfoEx would see this as LOCALE_NAME_USER_DEFAULT\r\n        return std::time_base::mdy;\r\n    }\r\n\r\n    wchar_t buf[2] = {0};\r\n    GetLocaleInfoEx(locale_name, LOCALE_ILDATE, buf, static_cast<int>(std::size(buf)));\r\n\r\n    switch (buf[0]) {\r\n    case L'0':\r\n        return std::time_base::mdy;\r\n    case L'1':\r\n        return std::time_base::dmy;\r\n    case L'2':\r\n        return std::time_base::ymd;\r\n    default:\r\n        return std::time_base::no_order;\r\n    }\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xdtest.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cmath>\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _Dtest(double* px) noexcept {\r\n    return static_cast<short>(_STD fpclassify(*px));\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _LDtest(long double* px) noexcept {\r\n    return _Dtest(reinterpret_cast<double*>(px));\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _FDtest(float* px) noexcept {\r\n    return static_cast<short>(_STD fpclassify(*px));\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xexp.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cmath>\r\n#include <limits>\r\n\r\nnamespace {\r\n    constexpr int _D0 = 3; // little-endian\r\n    constexpr int _D1 = 2;\r\n    constexpr int _D2 = 1;\r\n    constexpr int _D3 = 0;\r\n\r\n    union _Dval { // pun floating type as integer array\r\n        unsigned short _Sh[4];\r\n        double _Val;\r\n    };\r\n    static_assert(sizeof(_Dval::_Sh) == sizeof(_Dval::_Val), \"_Dval members should be the same size\");\r\n\r\n    short _Dnorm(_Dval* ps) noexcept { // normalize double fraction\r\n        short xchar         = 1;\r\n        unsigned short sign = static_cast<unsigned short>(ps->_Sh[_D0] & _DSIGN);\r\n\r\n        if ((ps->_Sh[_D0] &= _DFRAC) != 0 || ps->_Sh[_D1] || ps->_Sh[_D2] || ps->_Sh[_D3]) { // nonzero, scale\r\n            for (; ps->_Sh[_D0] == 0; xchar -= 16) { // shift left by 16\r\n                ps->_Sh[_D0] = ps->_Sh[_D1];\r\n                ps->_Sh[_D1] = ps->_Sh[_D2];\r\n                ps->_Sh[_D2] = ps->_Sh[_D3];\r\n                ps->_Sh[_D3] = 0;\r\n            }\r\n            for (; ps->_Sh[_D0] < 1 << _DOFF; --xchar) { // shift left by 1\r\n                ps->_Sh[_D0] = static_cast<unsigned short>(ps->_Sh[_D0] << 1 | ps->_Sh[_D1] >> 15);\r\n                ps->_Sh[_D1] = static_cast<unsigned short>(ps->_Sh[_D1] << 1 | ps->_Sh[_D2] >> 15);\r\n                ps->_Sh[_D2] = static_cast<unsigned short>(ps->_Sh[_D2] << 1 | ps->_Sh[_D3] >> 15);\r\n                ps->_Sh[_D3] <<= 1;\r\n            }\r\n            for (; 1 << (_DOFF + 1) <= ps->_Sh[_D0]; ++xchar) { // shift right by 1\r\n                ps->_Sh[_D3] = static_cast<unsigned short>(ps->_Sh[_D3] >> 1 | ps->_Sh[_D2] << 15);\r\n                ps->_Sh[_D2] = static_cast<unsigned short>(ps->_Sh[_D2] >> 1 | ps->_Sh[_D1] << 15);\r\n                ps->_Sh[_D1] = static_cast<unsigned short>(ps->_Sh[_D1] >> 1 | ps->_Sh[_D0] << 15);\r\n                ps->_Sh[_D0] >>= 1;\r\n            }\r\n            ps->_Sh[_D0] &= _DFRAC;\r\n        }\r\n        ps->_Sh[_D0] |= sign;\r\n        return xchar;\r\n    }\r\n\r\n    short _Dscale(double* px, long lexp) noexcept { // scale *px by 2^xexp with checking\r\n        const auto ps = reinterpret_cast<_Dval*>(px);\r\n        short xchar   = static_cast<short>((ps->_Sh[_D0] & _DMASK) >> _DOFF);\r\n\r\n        if (xchar == _DMAX) {\r\n            return (ps->_Sh[_D0] & _DFRAC) != 0 || ps->_Sh[_D1] != 0 || ps->_Sh[_D2] != 0 || ps->_Sh[_D3] != 0\r\n                     ? FP_NAN\r\n                     : FP_INFINITE;\r\n        } else if (xchar == 0 && 0 < (xchar = _Dnorm(ps))) {\r\n            return FP_ZERO;\r\n        }\r\n\r\n        if (0 < lexp && _DMAX - xchar <= lexp) { // overflow, return +/-INF\r\n            constexpr double inf = _STD numeric_limits<double>::infinity();\r\n\r\n            *px = ps->_Sh[_D0] & _DSIGN ? -inf : inf;\r\n            return FP_INFINITE;\r\n        } else if (-xchar < lexp) { // finite result, repack\r\n            ps->_Sh[_D0] = static_cast<unsigned short>(ps->_Sh[_D0] & ~_DMASK | (lexp + xchar) << _DOFF);\r\n            return FP_NORMAL;\r\n        } else { // denormalized, scale\r\n            unsigned short sign = static_cast<unsigned short>(ps->_Sh[_D0] & _DSIGN);\r\n\r\n            ps->_Sh[_D0] = static_cast<unsigned short>(1 << _DOFF | ps->_Sh[_D0] & _DFRAC);\r\n            lexp += xchar - 1;\r\n            if (lexp < -(48 + 1 + _DOFF) || 0 <= lexp) { // certain underflow, return +/-0\r\n                ps->_Sh[_D0] = sign;\r\n                ps->_Sh[_D1] = 0;\r\n                ps->_Sh[_D2] = 0;\r\n                ps->_Sh[_D3] = 0;\r\n                return FP_ZERO;\r\n            } else { // nonzero, align fraction\r\n                short xexp         = static_cast<short>(lexp);\r\n                unsigned short psx = 0;\r\n\r\n                for (; xexp <= -16; xexp += 16) { // scale by words\r\n                    psx          = ps->_Sh[_D3] | (psx != 0 ? 1 : 0);\r\n                    ps->_Sh[_D3] = ps->_Sh[_D2];\r\n                    ps->_Sh[_D2] = ps->_Sh[_D1];\r\n                    ps->_Sh[_D1] = ps->_Sh[_D0];\r\n                    ps->_Sh[_D0] = 0;\r\n                }\r\n                if (xexp != 0) { // scale by bits\r\n                    xexp         = -xexp;\r\n                    psx          = (ps->_Sh[_D3] << (16 - xexp)) | (psx != 0 ? 1 : 0);\r\n                    ps->_Sh[_D3] = static_cast<unsigned short>(ps->_Sh[_D3] >> xexp | ps->_Sh[_D2] << (16 - xexp));\r\n                    ps->_Sh[_D2] = static_cast<unsigned short>(ps->_Sh[_D2] >> xexp | ps->_Sh[_D1] << (16 - xexp));\r\n                    ps->_Sh[_D1] = static_cast<unsigned short>(ps->_Sh[_D1] >> xexp | ps->_Sh[_D0] << (16 - xexp));\r\n                    ps->_Sh[_D0] >>= xexp;\r\n                }\r\n\r\n                ps->_Sh[_D0] |= sign;\r\n                if ((0x8000 < psx || 0x8000 == psx && (ps->_Sh[_D3] & 0x0001) != 0) && (++ps->_Sh[_D3] & 0xffff) == 0\r\n                    && (++ps->_Sh[_D2] & 0xffff) == 0 && (++ps->_Sh[_D1] & 0xffff) == 0) {\r\n                    ++ps->_Sh[_D0]; // round up\r\n                } else if (ps->_Sh[_D0] == sign && ps->_Sh[_D1] == 0 && ps->_Sh[_D2] == 0 && ps->_Sh[_D3] == 0) {\r\n                    return FP_ZERO;\r\n                }\r\n\r\n                return FP_NORMAL;\r\n            }\r\n        }\r\n    }\r\n\r\n    constexpr int _F0 = 1; // little-endian\r\n    constexpr int _F1 = 0;\r\n\r\n    union _Fval { // pun floating type as integer array\r\n        unsigned short _Sh[2];\r\n        float _Val;\r\n    };\r\n    static_assert(sizeof(_Fval::_Sh) == sizeof(_Fval::_Val), \"_Fval members should be the same size\");\r\n\r\n    short _FDnorm(_Fval* ps) noexcept { // normalize float fraction\r\n        short xchar         = 1;\r\n        unsigned short sign = static_cast<unsigned short>(ps->_Sh[_F0] & _FSIGN);\r\n\r\n        if ((ps->_Sh[_F0] &= _FFRAC) != 0 || ps->_Sh[_F1]) { // nonzero, scale\r\n            if (ps->_Sh[_F0] == 0) {\r\n                ps->_Sh[_F0] = ps->_Sh[_F1];\r\n                ps->_Sh[_F1] = 0;\r\n                xchar -= 16;\r\n            }\r\n\r\n            for (; ps->_Sh[_F0] < 1 << _FOFF; --xchar) { // shift left by 1\r\n                ps->_Sh[_F0] = static_cast<unsigned short>(ps->_Sh[_F0] << 1 | ps->_Sh[_F1] >> 15);\r\n                ps->_Sh[_F1] <<= 1;\r\n            }\r\n            for (; 1 << (_FOFF + 1) <= ps->_Sh[_F0]; ++xchar) { // shift right by 1\r\n                ps->_Sh[_F1] = static_cast<unsigned short>(ps->_Sh[_F1] >> 1 | ps->_Sh[_F0] << 15);\r\n                ps->_Sh[_F0] >>= 1;\r\n            }\r\n            ps->_Sh[_F0] &= _FFRAC;\r\n        }\r\n        ps->_Sh[_F0] |= sign;\r\n        return xchar;\r\n    }\r\n\r\n    short _FDscale(float* px, long lexp) noexcept { // scale *px by 2^xexp with checking\r\n        const auto ps = reinterpret_cast<_Fval*>(px);\r\n        short xchar   = static_cast<short>((ps->_Sh[_F0] & _FMASK) >> _FOFF);\r\n\r\n        if (xchar == _FMAX) {\r\n            return (ps->_Sh[_F0] & _FFRAC) != 0 || ps->_Sh[_F1] != 0 ? FP_NAN : FP_INFINITE;\r\n        } else if (xchar == 0 && 0 < (xchar = _FDnorm(ps))) {\r\n            return FP_ZERO;\r\n        }\r\n\r\n        if (0 < lexp && _FMAX - xchar <= lexp) { // overflow, return +/-INF\r\n            constexpr float inf = _STD numeric_limits<float>::infinity();\r\n\r\n            *px = ps->_Sh[_F0] & _FSIGN ? -inf : inf;\r\n            return FP_INFINITE;\r\n        } else if (-xchar < lexp) { // finite result, repack\r\n            ps->_Sh[_F0] = static_cast<unsigned short>(ps->_Sh[_F0] & ~_FMASK | (lexp + xchar) << _FOFF);\r\n            return FP_NORMAL;\r\n        } else { // denormalized, scale\r\n            unsigned short sign = static_cast<unsigned short>(ps->_Sh[_F0] & _FSIGN);\r\n\r\n            ps->_Sh[_F0] = static_cast<unsigned short>(1 << _FOFF | ps->_Sh[_F0] & _FFRAC);\r\n            lexp += xchar - 1;\r\n            if (lexp < -(16 + 1 + _FOFF) || 0 <= lexp) { // underflow, return +/-0\r\n                ps->_Sh[_F0] = sign;\r\n                ps->_Sh[_F1] = 0;\r\n                return FP_ZERO;\r\n            } else { // nonzero, align fraction\r\n                short xexp         = static_cast<short>(lexp);\r\n                unsigned short psx = 0;\r\n\r\n                if (xexp <= -16) { // scale by words\r\n                    psx          = ps->_Sh[_F1];\r\n                    ps->_Sh[_F1] = ps->_Sh[_F0];\r\n                    ps->_Sh[_F0] = 0;\r\n                    xexp += 16;\r\n                }\r\n\r\n                if (xexp != 0) { // scale by bits\r\n                    xexp         = -xexp;\r\n                    psx          = (ps->_Sh[_F1] << (16 - xexp)) | (psx != 0 ? 1 : 0);\r\n                    ps->_Sh[_F1] = static_cast<unsigned short>(ps->_Sh[_F1] >> xexp | ps->_Sh[_F0] << (16 - xexp));\r\n                    ps->_Sh[_F0] >>= xexp;\r\n                }\r\n\r\n                ps->_Sh[_F0] |= sign;\r\n                if ((0x8000 < psx || 0x8000 == psx && (ps->_Sh[_F1] & 0x0001) != 0) && (++ps->_Sh[_F1] & 0xffff) == 0) {\r\n                    ++ps->_Sh[_F0]; // round up\r\n                } else if (ps->_Sh[_F0] == sign && ps->_Sh[_F1] == 0) {\r\n                    return FP_ZERO;\r\n                }\r\n\r\n                return FP_NORMAL;\r\n            }\r\n        }\r\n    }\r\n\r\n// raise IEEE 754 exceptions\r\n#ifndef _M_CEE_PURE\r\n#pragma float_control(except, on, push)\r\n#endif\r\n\r\n    template <class T>\r\n    [[nodiscard]] T _Xfe_overflow(const T sign) noexcept {\r\n        static_assert(_STD is_floating_point_v<T>, \"Expected is_floating_point_v<T>.\");\r\n        constexpr T huge = _STD numeric_limits<T>::max();\r\n        return _STD copysign(huge, sign) * huge;\r\n    }\r\n\r\n    template <class T>\r\n    [[nodiscard]] T _Xfe_underflow(const T sign) noexcept {\r\n        static_assert(_STD is_floating_point_v<T>, \"Expected is_floating_point_v<T>.\");\r\n        constexpr T tiny = _STD numeric_limits<T>::min();\r\n        return _STD copysign(tiny, sign) * tiny;\r\n    }\r\n\r\n#ifndef _M_CEE_PURE\r\n#pragma float_control(pop)\r\n#endif\r\n\r\n} // unnamed namespace\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _Exp(double* px, double y, short eoff) noexcept {\r\n    // compute y * e^(*px), (*px) finite, |y| not huge\r\n\r\n    // coefficients\r\n    static constexpr double p[] = {1.0, 420.30235984910635, 15132.70094680474802};\r\n    static constexpr double q[] = {30.01511290683317, 3362.72154416553028, 30265.40189360949691};\r\n    constexpr double c1         = 22713.0 / 32768.0;\r\n    constexpr double c2         = 1.4286068203094172321214581765680755e-6;\r\n    constexpr double hugexp     = static_cast<int>(_DMAX * 900L / 1000);\r\n    constexpr double invln2     = 1.4426950408889634073599246810018921;\r\n\r\n    if (y == 0.0) { // zero\r\n        *px = y;\r\n        return FP_ZERO;\r\n    } else if (*px < -hugexp) { // certain underflow\r\n        *px = _Xfe_underflow(y);\r\n        return FP_ZERO;\r\n    } else if (hugexp < *px) { // certain overflow\r\n        *px = _Xfe_overflow(y);\r\n        return FP_INFINITE;\r\n    } else { // xexp won't overflow\r\n        double g   = *px * invln2;\r\n        short xexp = static_cast<short>(g + (g < 0.0 ? -0.5 : +0.5));\r\n\r\n        g = xexp;\r\n        g = (*px - g * c1) - g * c2;\r\n\r\n        constexpr double eps = 0x1p-54;\r\n        if (-eps < g && g < eps) {\r\n            *px = y;\r\n        } else { // g * g worth computing\r\n            const double z = g * g;\r\n            const double w = (q[0] * z + q[1]) * z + q[2];\r\n\r\n            g *= (z + p[1]) * z + p[2];\r\n            *px = (w + g) / (w - g) * 2.0 * y;\r\n            --xexp;\r\n        }\r\n\r\n        const short result_code = _Dscale(px, static_cast<long>(xexp) + eoff);\r\n\r\n        switch (result_code) {\r\n        case FP_ZERO:\r\n            *px = _Xfe_underflow(y);\r\n            break;\r\n        case FP_INFINITE:\r\n            *px = _Xfe_overflow(y);\r\n            break;\r\n        default:\r\n            break;\r\n        }\r\n\r\n        return result_code;\r\n    }\r\n}\r\n\r\n_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _LExp(long double* px, long double y, short eoff) noexcept {\r\n    return _Exp(reinterpret_cast<double*>(px), static_cast<double>(y), eoff);\r\n}\r\n\r\n_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _FExp(float* px, float y, short eoff) noexcept {\r\n    // compute y * e^(*px), (*px) finite, |y| not huge\r\n\r\n    static constexpr float p[] = {1.0F, 60.09114349F};\r\n    static constexpr float q[] = {12.01517514F, 120.18228722F};\r\n    constexpr float c1         = (22713.0F / 32768.0F);\r\n    constexpr float c2         = 1.4286068203094172321214581765680755e-6F;\r\n    constexpr float hugexp     = static_cast<int>(_FMAX * 900L / 1000);\r\n    constexpr float invln2     = 1.4426950408889634073599246810018921F;\r\n\r\n    if (y == 0.0F) { // zero\r\n        *px = y;\r\n        return FP_ZERO;\r\n    } else if (*px < -hugexp) { // certain underflow\r\n        *px = _Xfe_underflow(y);\r\n        return FP_ZERO;\r\n    } else if (hugexp < *px) { // certain overflow\r\n        *px = _Xfe_overflow(y);\r\n        return FP_INFINITE;\r\n    } else { // xexp won't overflow\r\n        float g    = *px * invln2;\r\n        short xexp = static_cast<short>(g + (g < 0.0F ? -0.5F : +0.5F));\r\n\r\n        g = xexp;\r\n        g = static_cast<float>((*px - g * c1) - g * c2);\r\n\r\n        constexpr float eps = 0x1p-25f;\r\n        if (-eps < g && g < eps) {\r\n            *px = y;\r\n        } else { // g * g worth computing\r\n            const float z = g * g;\r\n            const float w = q[0] * z + q[1];\r\n\r\n            g *= z + p[1];\r\n            *px = (w + g) / (w - g) * 2.0F * y;\r\n            --xexp;\r\n        }\r\n\r\n        const short result_code = _FDscale(px, static_cast<long>(xexp) + eoff);\r\n\r\n        switch (result_code) {\r\n        case FP_ZERO:\r\n            *px = _Xfe_underflow(y);\r\n            break;\r\n        case FP_INFINITE:\r\n            *px = _Xfe_overflow(y);\r\n            break;\r\n        default:\r\n            break;\r\n        }\r\n\r\n        return result_code;\r\n    }\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xgetwctype.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// _Getwctype -- return character classification flags for wide character\r\n\r\n#include <yvals.h>\r\n\r\n#include <__msvc_xlocinfo_types.hpp>\r\n#include <cwchar>\r\n\r\n#include <Windows.h>\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _Getwctype(wchar_t _Ch, const _Ctypevec* _Ctype) noexcept {\r\n    // return character classification flags for _Ch\r\n    _CRT_UNUSED(_Ctype);\r\n    short _Mask;\r\n    return static_cast<short>(GetStringTypeW(CT_CTYPE1, &_Ch, 1, reinterpret_cast<LPWORD>(&_Mask)) == 0 ? 0 : _Mask);\r\n}\r\n\r\n_CRTIMP2_PURE const wchar_t* __CLRCALL_PURE_OR_CDECL _Getwctypes(\r\n    const wchar_t* _First, const wchar_t* _Last, short* _Dest, const _Ctypevec* _Ctype) noexcept {\r\n    // get mask sequence for elements in [_First, _Last)\r\n    _CRT_UNUSED(_Ctype);\r\n    GetStringTypeW(CT_CTYPE1, _First, static_cast<int>(_Last - _First), reinterpret_cast<LPWORD>(_Dest));\r\n    return _Last;\r\n}\r\n\r\n#ifdef MRTDLL\r\n_CRTIMP2_PURE short __CLRCALL_PURE_OR_CDECL _Getwctype(unsigned short _Ch, const _Ctypevec* _Ctype) noexcept {\r\n    return _Getwctype(static_cast<wchar_t>(_Ch), _Ctype);\r\n}\r\n\r\n_CRTIMP2_PURE const unsigned short* __CLRCALL_PURE_OR_CDECL _Getwctypes(\r\n    const unsigned short* _First, const unsigned short* _Last, short* _Dest, const _Ctypevec* _Ctype) noexcept {\r\n    return reinterpret_cast<const unsigned short*>(\r\n        _Getwctypes(reinterpret_cast<const wchar_t*>(_First), reinterpret_cast<const wchar_t*>(_Last), _Dest, _Ctype));\r\n}\r\n#endif // ^^^ defined(MRTDLL) ^^^\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xlgamma.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cmath>\r\n\r\n_STD_BEGIN\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE float __CLRCALL_PURE_OR_CDECL _XLgamma(float x) noexcept {\r\n    return _STD lgamma(x);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE double __CLRCALL_PURE_OR_CDECL _XLgamma(double x) noexcept {\r\n    return _STD lgamma(x);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE long double __CLRCALL_PURE_OR_CDECL _XLgamma(long double x) noexcept {\r\n    return _STD lgamma(x);\r\n}\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/xlocale.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// class locale exotic char member functions\r\n\r\n#include <istream>\r\n#include <locale>\r\n_STD_BEGIN\r\n\r\n#pragma warning(disable : 4074)\r\n#pragma init_seg(compiler)\r\n\r\n// facets associated with C categories\r\n#define ADDFAC(Facet, cat, ptrimp, ptrloc)                                                                  \\\r\n    if ((_CATMASK(Facet::_Getcat()) & cat) == 0) {                                                          \\\r\n        ;                                                                                                   \\\r\n    } else if (ptrloc == nullptr) {                                                                         \\\r\n        ptrimp->_Addfac(new Facet(lobj), Facet::id._Get_index());                                           \\\r\n    } else {                                                                                                \\\r\n        ptrimp->_Addfac(                                                                                    \\\r\n            const_cast<locale::facet*>(static_cast<const locale::facet*>(&_STD use_facet<Facet>(*ptrloc))), \\\r\n            Facet::id._Get_index());                                                                        \\\r\n    }\r\n\r\n// moved from locale to ease subsetting\r\nusing _Tx1 = collate<char>;\r\nusing _Tx2 = messages<char>;\r\nusing _Tx3 = money_get<char>;\r\nusing _Tx4 = money_put<char>;\r\nusing _Tx5 = moneypunct<char, false>;\r\nusing _Tx6 = moneypunct<char, true>;\r\nusing _Tx7 = time_get<char>;\r\nusing _Tx8 = time_put<char>;\r\n\r\nvoid __CLRCALL_OR_CDECL locale::_Locimp::_Makexloc(const _Locinfo& lobj, locale::category cat, _Locimp* ptrimp,\r\n    const locale* ptrloc) { // setup exotic char part of a new locale\r\n    ADDFAC(_Tx1, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tx2, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tx3, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tx4, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tx5, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tx6, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tx7, cat, ptrimp, ptrloc);\r\n    ADDFAC(_Tx8, cat, ptrimp, ptrloc);\r\n}\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/xlock.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// global lock for locales, etc.\r\n\r\n#include <yvals.h>\r\n\r\n#include <clocale>\r\n#include <cstdlib>\r\n\r\n#include \"init_locks.hpp\"\r\n#include \"xmtx.hpp\"\r\n\r\n_STD_BEGIN\r\n\r\nconstexpr int _Max_lock = 8; // must be power of two; TRANSITION, ABI: may be less now\r\n\r\n#pragma warning(disable : 4074)\r\n#pragma init_seg(compiler)\r\n\r\nstatic _Rmtx mtx[_Max_lock];\r\nstatic long init = -1;\r\n\r\n#if !defined(MRTDLL)\r\n\r\n__thiscall _Init_locks::_Init_locks() noexcept { // initialize locks\r\n    if (InterlockedIncrement(&init) == 0) {\r\n        for (auto& elem : mtx) {\r\n            _Mtxinit(&elem);\r\n        }\r\n    }\r\n}\r\n\r\n__thiscall _Init_locks::~_Init_locks() noexcept { // clean up locks\r\n    if (InterlockedDecrement(&init) < 0) {\r\n        for (auto& elem : mtx) {\r\n            _Mtxdst(&elem);\r\n        }\r\n    }\r\n}\r\n\r\n#endif // ^^^ !defined(MRTDLL) ^^^\r\n\r\nvoid __cdecl _Init_locks::_Init_locks_ctor(_Init_locks*) noexcept { // initialize locks\r\n    if (InterlockedIncrement(&init) == 0) {\r\n        for (auto& elem : mtx) {\r\n            _Mtxinit(&elem);\r\n        }\r\n    }\r\n}\r\n\r\nvoid __cdecl _Init_locks::_Init_locks_dtor(_Init_locks*) noexcept { // clean up locks\r\n    if (InterlockedDecrement(&init) < 0) {\r\n        for (auto& elem : mtx) {\r\n            _Mtxdst(&elem);\r\n        }\r\n    }\r\n}\r\n\r\nstatic _Init_locks initlocks;\r\n\r\n#if !defined(MRTDLL)\r\n\r\n__thiscall _Lockit::_Lockit() noexcept : _Locktype(0) { // lock default mutex\r\n    if (_Locktype == _LOCK_LOCALE) {\r\n        _lock_locales();\r\n    } else {\r\n        _Mtxlock(&mtx[0]);\r\n    }\r\n}\r\n\r\n__thiscall _Lockit::_Lockit(int kind) noexcept : _Locktype(kind) { // lock the mutex\r\n    if (_Locktype == _LOCK_LOCALE) {\r\n        _lock_locales();\r\n    } else if (_Locktype < _Max_lock) {\r\n        _Mtxlock(&mtx[_Locktype]);\r\n    }\r\n}\r\n\r\n__thiscall _Lockit::~_Lockit() noexcept { // unlock the mutex\r\n    if (_Locktype == _LOCK_LOCALE) {\r\n        _unlock_locales();\r\n    } else if (_Locktype < _Max_lock) {\r\n        _Mtxunlock(&mtx[_Locktype]);\r\n    }\r\n}\r\n\r\n#endif // ^^^ !defined(MRTDLL) ^^^\r\n\r\nvoid __cdecl _Lockit::_Lockit_ctor(_Lockit*) noexcept { // lock default mutex\r\n    _Mtxlock(&mtx[0]);\r\n}\r\n\r\nvoid __cdecl _Lockit::_Lockit_ctor(_Lockit* _This, int kind) noexcept { // lock the mutex\r\n    if (kind == _LOCK_LOCALE) {\r\n        _lock_locales();\r\n    } else {\r\n        _This->_Locktype = kind & (_Max_lock - 1);\r\n        _Mtxlock(&mtx[_This->_Locktype]);\r\n    }\r\n}\r\n\r\nvoid __cdecl _Lockit::_Lockit_dtor(_Lockit* _This) noexcept { // unlock the mutex\r\n    _Mtxunlock(&mtx[_This->_Locktype]);\r\n}\r\n\r\n_RELIABILITY_CONTRACT\r\nvoid __cdecl _Lockit::_Lockit_ctor(int kind) noexcept { // lock the mutex\r\n    if (kind == _LOCK_LOCALE) {\r\n        _lock_locales();\r\n    } else {\r\n        _Mtxlock(&mtx[kind & (_Max_lock - 1)]);\r\n    }\r\n}\r\n\r\n_RELIABILITY_CONTRACT\r\nvoid __cdecl _Lockit::_Lockit_dtor(int kind) noexcept { // unlock the mutex\r\n    if (kind == _LOCK_LOCALE) {\r\n        _unlock_locales();\r\n    } else {\r\n        _Mtxunlock(&mtx[kind & (_Max_lock - 1)]);\r\n    }\r\n}\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/xmbtowc.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Convert multibyte char to wide char.\r\n\r\n#include <yvals.h>\r\n\r\n#include <__msvc_xlocinfo_types.hpp>\r\n#include <cctype>\r\n#include <cerrno>\r\n#include <climits> // for INT_MAX\r\n#include <crtdbg.h>\r\n#include <internal_shared.h>\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\nstatic int _Utf8_trailing_byte_count(unsigned long* partialCh, unsigned char ch) noexcept {\r\n    if ((ch & 0x80u) == 0x00u) { // high bit unset, plain ASCII\r\n        return 0;\r\n    }\r\n\r\n    if ((ch & 0xE0u) == 0xC0u) { // first 3 bits are 110, 1 trailing byte\r\n        *partialCh = ch & 0x1Fu;\r\n        return 1;\r\n    }\r\n\r\n    if ((ch & 0xF0u) == 0xE0u) { // first 4 bits are 1110, 2 trailing bytes\r\n        *partialCh = ch & 0x0Fu;\r\n        return 2;\r\n    }\r\n\r\n    if ((ch & 0xF8u) == 0xF0u) { // first 5 bits are 11110, 3 trailing bytes\r\n        *partialCh = ch & 0x07u;\r\n        return 3;\r\n    }\r\n\r\n    return INT_MAX;\r\n}\r\n\r\nstatic int _Decode_utf8_trailing_byte(unsigned long* partialCh, unsigned char ch) noexcept {\r\n    if ((ch & 0xC0) == 0x80) {\r\n        *partialCh <<= 6;\r\n        *partialCh |= ch & 0x3Fu;\r\n        return 0;\r\n    }\r\n\r\n    return 1;\r\n}\r\n\r\n// int _Mbrtowc() - Convert multibyte char to wide character.\r\n//\r\n// Purpose:\r\n//     Convert a multi-byte character into the equivalent wide character,\r\n//     according to the specified LC_CTYPE category, or the current locale.\r\n//     [ANSI].\r\n//\r\n// Entry:\r\n//     wchar_t* pwc        = pointer to destination wide character\r\n//     const char* s       = pointer to multibyte character\r\n//     size_t n            = maximum length of multibyte character to consider\r\n//     mbstate_t* pst      = pointer to state\r\n//     const _Cvtvec* ploc = pointer to locale info\r\n//\r\n// Returns: 0 (if *s = null char)\r\n//          -1 (if the next n or fewer bytes not valid mbc)\r\n//          -2 (if partial conversion)\r\n//          number of bytes comprising converted mbc\r\n_MRTIMP2 _Success_(return >= 0) int __cdecl _Mbrtowc(\r\n    _When_(n != 0, _Out_) wchar_t* pwc, const char* s, size_t n, mbstate_t* pst, const _Cvtvec* ploc) noexcept {\r\n    (void) pst;\r\n    if (n == 0) { // indicate do not have state-dependent encodings, handle zero length string\r\n        return 0;\r\n    }\r\n\r\n    if (!*s) { // handle null terminator, TRANSITION, VSO-654347\r\n        *pwc = 0;\r\n        return 0;\r\n    }\r\n\r\n    // perform locale-dependent parse\r\n    unsigned char ch = static_cast<unsigned char>(*s);\r\n    if (ploc->_Isclocale) {\r\n        *pwc = ch;\r\n        return 1;\r\n    }\r\n\r\n    unsigned long wch;\r\n    int consumedCount;\r\n    int trailingUtf8Units;\r\n    switch (ploc->_Mbcurmax) {\r\n    default:\r\n        _ASSERTE(!\"Bad number of encoding units for this code page\");\r\n        _FALLTHROUGH;\r\n    case 1:\r\n        if (MultiByteToWideChar(ploc->_Page, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, s, 1, pwc, 1) == 0) {\r\n            errno = EILSEQ;\r\n            return -1;\r\n        }\r\n\r\n        return 1;\r\n\r\n    case 4: // UTF-8\r\n        _ASSERTE(ploc->_Page == CP_UTF8);\r\n        trailingUtf8Units = _Utf8_trailing_byte_count(&wch, ch);\r\n        if (trailingUtf8Units == 0) { // optimistic ASCII passthrough\r\n            *pwc = static_cast<wchar_t>(ch);\r\n            return 1;\r\n        }\r\n\r\n        if (trailingUtf8Units > 2) { // this would result in a UTF-16 surrogate pair, which we can't emit in our\r\n                                     // singular output wchar_t, so fail\r\n                                     // see N4950 [locale.codecvt.virtuals]/3\r\n            errno = EILSEQ;\r\n            return -1;\r\n        }\r\n\r\n        consumedCount = 1;\r\n        for (; trailingUtf8Units; ++consumedCount, --trailingUtf8Units) { // consume remaining trailing bytes\r\n            if (static_cast<size_t>(consumedCount) >= n) { // no byte to consume, return partial\r\n                return -2;\r\n            }\r\n\r\n            if (_Decode_utf8_trailing_byte(&wch, static_cast<unsigned char>(s[consumedCount]))) {\r\n                errno = EILSEQ;\r\n                return -1;\r\n            }\r\n        }\r\n\r\n        if ((consumedCount == 2 && wch < 0x80u) || (consumedCount == 3 && wch < 0x800u)) { // overlong forms\r\n            errno = EILSEQ;\r\n            return -1;\r\n        }\r\n\r\n        if (wch >= 0xD800u && wch <= 0xDFFFu) { // tried to decode unpaired surrogate\r\n            errno = EILSEQ;\r\n            return -1;\r\n        }\r\n\r\n        *pwc = static_cast<wchar_t>(wch);\r\n        return consumedCount;\r\n\r\n    case 2:\r\n        if (ploc->_Isleadbyte[ch >> 3] & (1u << (ch & 7u))) {\r\n            if (n == 1) { // partial multibyte character\r\n                return -2;\r\n            }\r\n\r\n            consumedCount = 2;\r\n        } else {\r\n            consumedCount = 1;\r\n        }\r\n\r\n        if (MultiByteToWideChar(ploc->_Page, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, s, consumedCount, pwc, 1) == 0) {\r\n            errno = EILSEQ;\r\n            return -1;\r\n        }\r\n\r\n        return consumedCount;\r\n    }\r\n}\r\n\r\n#ifdef MRTDLL\r\n_MRTIMP2 int __cdecl _Mbrtowc(\r\n    unsigned short* pwc, const char* s, size_t n, mbstate_t* pst, const _Cvtvec* ploc) noexcept {\r\n    return _Mbrtowc(reinterpret_cast<wchar_t*>(pwc), s, n, pst, ploc);\r\n}\r\n#endif // defined(MRTDLL)\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xmtx.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// mutex support\r\n\r\n#include \"xmtx.hpp\"\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n// Win32 critical sections are recursive\r\n\r\n_MRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Mtxinit(_Rmtx* _Mtx) noexcept { // initialize mutex\r\n    InitializeCriticalSectionEx(_Mtx, 4000, 0);\r\n}\r\n\r\n_MRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Mtxdst(_Rmtx* _Mtx) noexcept { // delete mutex\r\n    DeleteCriticalSection(_Mtx);\r\n}\r\n\r\n_RELIABILITY_CONTRACT\r\n_MRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Mtxlock(_Rmtx* _Mtx) noexcept { // lock mutex\r\n#ifdef _M_CEE\r\n    System::Threading::Thread::BeginThreadAffinity();\r\n#endif\r\n    EnterCriticalSection(_Mtx);\r\n}\r\n\r\n_RELIABILITY_CONTRACT\r\n_MRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Mtxunlock(_Rmtx* _Mtx) noexcept { // unlock mutex\r\n    LeaveCriticalSection(_Mtx);\r\n#ifdef _M_CEE\r\n    System::Threading::Thread::EndThreadAffinity();\r\n#endif\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xmtx.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <yvals.h>\r\n\r\n#include <cstdlib>\r\n\r\n#include <Windows.h>\r\n\r\n#ifdef _M_CEE\r\n#if _PREPARE_CONSTRAINED_REGIONS\r\n#define _CRT_SUPPRESS_C4950\r\n#define _CRT_RESTORE_C4950\r\n#else // ^^^ _PREPARE_CONSTRAINED_REGIONS / !_PREPARE_CONSTRAINED_REGIONS vvv\r\n// Constrained regions are obsolete in .NET 6 and above.\r\n#define _CRT_SUPPRESS_C4950 __pragma(warning(push)) _pragma(warning(disable : 4950))\r\n#define _CRT_RESTORE_C4950  __pragma(warning(pop))\r\n#endif // ^^^ !_PREPARE_CONSTRAINED_REGIONS ^^^\r\n#define _RELIABILITY_CONTRACT                                                    \\\r\n    _CRT_SUPPRESS_C4950                                                          \\\r\n    [System::Runtime::ConstrainedExecution::ReliabilityContract(                 \\\r\n        System::Runtime::ConstrainedExecution::Consistency::WillNotCorruptState, \\\r\n        System::Runtime::ConstrainedExecution::Cer::Success)] /**/               \\\r\n        _CRT_RESTORE_C4950\r\n#else // ^^^ defined(_M_CEE) / !defined(_M_CEE) vvv\r\n#define _RELIABILITY_CONTRACT\r\n#endif // ^^^ !defined(_M_CEE) ^^^\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\nusing _Rmtx = CRITICAL_SECTION;\r\n\r\n_MRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Mtxinit(_Rmtx*) noexcept;\r\n_MRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Mtxdst(_Rmtx*) noexcept;\r\n_MRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Mtxlock(_Rmtx*) noexcept;\r\n_MRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Mtxunlock(_Rmtx*) noexcept;\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xnotify.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstdlib>\r\n#include <mutex>\r\n#include <xthreads.h>\r\n\r\n#include <Windows.h>\r\n\r\nconstexpr int _Nitems = 20;\r\n\r\nnamespace {\r\n    struct _At_thread_exit_data { // data for condition-variable slot\r\n        _Thrd_t id;\r\n        _Mtx_t mtx;\r\n        _Cnd_t cnd;\r\n        int* res;\r\n    };\r\n\r\n    struct _At_thread_exit_block { // block of condition-variable slots\r\n        _At_thread_exit_data data[_Nitems];\r\n        int num_used;\r\n        _At_thread_exit_block* next;\r\n    };\r\n\r\n    _At_thread_exit_block _Thread_exit_data;\r\n\r\n    constinit std::mutex _Thread_exit_data_mutex;\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n_CRTIMP2_PURE void __cdecl _Cnd_register_at_thread_exit(_Cnd_t cnd, _Mtx_t mtx, int* p) noexcept {\r\n    // register condition variable and mutex for cleanup at thread exit\r\n\r\n    // find block with available space\r\n    _At_thread_exit_block* block = &_Thread_exit_data;\r\n\r\n    std::lock_guard _Lock{_Thread_exit_data_mutex};\r\n    while (block != nullptr) { // loop through list of blocks\r\n        if (block->num_used == _Nitems) { // block is full; move to next block and allocate\r\n            if (block->next == nullptr) {\r\n                block->next = static_cast<_At_thread_exit_block*>(calloc(1, sizeof(_At_thread_exit_block)));\r\n            }\r\n\r\n            block = block->next;\r\n        } else { // found block with available space\r\n            for (int i = 0; i < _Nitems; ++i) { // find empty slot\r\n                if (block->data[i].mtx == nullptr) { // store into empty slot\r\n                    block->data[i].id._Id = GetCurrentThreadId();\r\n                    block->data[i].mtx    = mtx;\r\n                    block->data[i].cnd    = cnd;\r\n                    block->data[i].res    = p;\r\n                    ++block->num_used;\r\n                    break;\r\n                }\r\n            }\r\n            block = nullptr;\r\n        }\r\n    }\r\n}\r\n\r\n_CRTIMP2_PURE void __cdecl _Cnd_unregister_at_thread_exit(_Mtx_t mtx) noexcept {\r\n    // unregister condition variable/mutex for cleanup at thread exit\r\n\r\n    // find condition variables waiting for this thread to exit\r\n    _At_thread_exit_block* block = &_Thread_exit_data;\r\n\r\n    std::lock_guard _Lock{_Thread_exit_data_mutex};\r\n    while (block != nullptr) { // loop through list of blocks\r\n        for (int i = 0; block->num_used != 0 && i < _Nitems; ++i) {\r\n            if (block->data[i].mtx == mtx) { // release slot\r\n                block->data[i].mtx = nullptr;\r\n                --block->num_used;\r\n            }\r\n        }\r\n\r\n        block = block->next;\r\n    }\r\n}\r\n\r\n_CRTIMP2_PURE void __cdecl _Cnd_do_broadcast_at_thread_exit() noexcept {\r\n    // notify condition variables waiting for this thread to exit\r\n\r\n    // find condition variables waiting for this thread to exit\r\n    _At_thread_exit_block* block       = &_Thread_exit_data;\r\n    const unsigned int currentThreadId = _Thrd_id();\r\n\r\n    std::lock_guard _Lock{_Thread_exit_data_mutex};\r\n    while (block != nullptr) { // loop through list of blocks\r\n        for (int i = 0; block->num_used != 0 && i < _Nitems; ++i) {\r\n            if (block->data[i].mtx != nullptr && block->data[i].id._Id == currentThreadId) { // notify and release slot\r\n                if (block->data[i].res) {\r\n                    *block->data[i].res = 1;\r\n                }\r\n                _Cnd_broadcast(block->data[i].cnd);\r\n                _Mtx_unlock(block->data[i].mtx);\r\n                block->data[i].mtx = nullptr;\r\n                --block->num_used;\r\n            }\r\n        }\r\n\r\n        block = block->next;\r\n    }\r\n}\r\n\r\n} // extern \"C\"\r\n\r\n/*\r\n * This file is derived from software bearing the following\r\n * restrictions:\r\n *\r\n * (c) Copyright William E. Kempf 2001\r\n *\r\n * Permission to use, copy, modify, distribute and sell this\r\n * software and its documentation for any purpose is hereby\r\n * granted without fee, provided that the above copyright\r\n * notice appear in all copies and that both that copyright\r\n * notice and this permission notice appear in supporting\r\n * documentation. William E. Kempf makes no representations\r\n * about the suitability of this software for any purpose.\r\n * It is provided \"as is\" without express or implied warranty.\r\n */\r\n"
  },
  {
    "path": "stl/src/xonce.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <mutex>\r\n\r\n#include <Windows.h>\r\n\r\n_STD_BEGIN\r\n// Returns BOOL, nonzero to indicate success, zero for failure\r\nusing _Execute_once_fp_t = int(__stdcall*)(void*, void*, void**);\r\n\r\n// TRANSITION, ABI: _Execute_once() is preserved for binary compatibility\r\n_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Execute_once(\r\n    once_flag& _Flag, _Execute_once_fp_t _Callback, void* _Pv) noexcept { // wrap Win32 InitOnceExecuteOnce()\r\n    static_assert(sizeof(_Flag._Opaque) == sizeof(INIT_ONCE), \"invalid size\");\r\n\r\n    return InitOnceExecuteOnce(\r\n        reinterpret_cast<PINIT_ONCE>(&_Flag._Opaque), reinterpret_cast<PINIT_ONCE_FN>(_Callback), _Pv, nullptr);\r\n}\r\n\r\n[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL\r\n    _XGetLastError() { // throw system_error containing GetLastError()\r\n    error_code _Code(static_cast<int>(GetLastError()), _STD system_category());\r\n    _THROW(system_error(_Code));\r\n}\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/xonce2.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <yvals_core.h>\r\n\r\n#include <cstdlib>\r\n\r\n#include <Windows.h>\r\n\r\n// Provides forwarders for InitOnceBeginInitialize and InitOnceComplete for\r\n// environments that can't use /ALTERNATENAME.\r\n// They were originally specific to /clr but are now used in other scenarios.\r\n\r\nextern \"C\" {\r\n\r\nint __stdcall __std_init_once_begin_initialize_clr(\r\n    void** _LpInitOnce, unsigned long _DwFlags, int* _FPending, void** _LpContext) noexcept {\r\n    return InitOnceBeginInitialize(reinterpret_cast<LPINIT_ONCE>(_LpInitOnce), _DwFlags, _FPending, _LpContext);\r\n}\r\n\r\nint __stdcall __std_init_once_complete_clr(void** _LpInitOnce, unsigned long _DwFlags, void* _LpContext) noexcept {\r\n    return InitOnceComplete(reinterpret_cast<LPINIT_ONCE>(_LpInitOnce), _DwFlags, _LpContext);\r\n}\r\n\r\n[[noreturn]] void __stdcall __std_init_once_link_alternate_names_and_abort() noexcept {\r\n    _CSTD abort();\r\n}\r\n\r\n#if defined(_M_HYBRID)\r\n// <mutex> uses the forwarder fallbacks for ARM64EC and CHPE.\r\n// Note that ARM64EC nevertheless needs the ALTERNATENAMEs to support x64 object files.\r\n#elif defined(_M_IX86)\r\n#pragma comment(linker, \"/ALTERNATENAME:__imp____std_init_once_begin_initialize@16=__imp__InitOnceBeginInitialize@16\")\r\n#pragma comment(linker, \"/ALTERNATENAME:__imp____std_init_once_complete@12=__imp__InitOnceComplete@12\")\r\n#elif defined(_M_X64) || defined(_M_ARM64) // Note: includes _M_ARM64EC\r\n#pragma comment(linker, \"/ALTERNATENAME:__imp___std_init_once_begin_initialize=__imp_InitOnceBeginInitialize\")\r\n#pragma comment(linker, \"/ALTERNATENAME:__imp___std_init_once_complete=__imp_InitOnceComplete\")\r\n#else // ^^^ known architecture / unknown architecture vvv\r\n#error Unknown architecture\r\n#endif // ^^^ unknown architecture ^^^\r\n\r\n} // extern \"C\"\r\n"
  },
  {
    "path": "stl/src/xrngabort.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// abort on precondition failure in random number generators\r\n\r\n#include <yvals.h>\r\n\r\n#include <cstdio>\r\n#include <cstdlib>\r\n\r\n_STD_BEGIN\r\n// TRANSITION, ABI: _Rng_abort() is preserved for binary compatibility\r\n[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Rng_abort(_In_z_ const char* _Msg) {\r\n    // abort on precondition failure\r\n    _CSTD fputs(_Msg, stderr);\r\n    _CSTD fputc('\\n', stderr);\r\n    _CSTD abort();\r\n}\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/xrngdev.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// implement random_device\r\n\r\n#include <cstdlib>\r\n#include <xutility>\r\n\r\n_STD_BEGIN\r\n_CRTIMP2_PURE unsigned int __CLRCALL_PURE_OR_CDECL _Random_device() { // return a random value\r\n    unsigned int ans;\r\n    if (_CSTD rand_s(&ans)) {\r\n        _Xout_of_range(\"invalid random_device value\");\r\n    }\r\n\r\n    return ans;\r\n}\r\n\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/xsinh.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cerrno>\r\n#include <cmath>\r\n#include <xutility>\r\n#include <ymath.h>\r\n\r\nnamespace {\r\n    double _Poly(double x, const double* tab, int n) noexcept { // compute polynomial\r\n        double y;\r\n\r\n        for (y = *tab; 0 <= --n;) {\r\n            y = y * x + *++tab;\r\n        }\r\n\r\n        return y;\r\n    }\r\n} // unnamed namespace\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n_CRTIMP2_PURE double __CLRCALL_PURE_OR_CDECL _Sinh(double x, double y) noexcept {\r\n    // compute y * sinh(x), |y| <= 1\r\n\r\n    // coefficients\r\n    static constexpr double p[] = {0.0000000001632881, 0.0000000250483893, 0.0000027557344615, 0.0001984126975233,\r\n        0.0083333333334816, 0.1666666666666574, 1.0000000000000001};\r\n    constexpr size_t NP         = std::size(p) - 1;\r\n\r\n    short neg;\r\n\r\n    switch (_STD fpclassify(x)) { // test for special codes\r\n    case FP_NAN:\r\n        return x;\r\n    case FP_INFINITE:\r\n        return y != 0.0 ? x : _STD signbit(x) ? -y : y;\r\n    case FP_ZERO:\r\n        return x * y;\r\n    default: // finite\r\n        if (y == 0.0) {\r\n            return x < 0.0 ? -y : y;\r\n        }\r\n\r\n        if (x < 0.0) {\r\n            x   = -x;\r\n            neg = 1;\r\n        } else {\r\n            neg = 0;\r\n        }\r\n\r\n        constexpr double rteps = 0x1p-27;\r\n        constexpr double _Xbig = ((48 + _DOFF) + 2) * 0.347;\r\n        if (x < rteps) {\r\n            x *= y; // x tiny\r\n        } else if (x < 1.0) {\r\n            double w = x * x;\r\n\r\n            x += x * w * _Poly(w, p, NP - 1);\r\n            x *= y;\r\n        } else if (x < _Xbig) { // worth adding in exp(-x)\r\n            _Exp(&x, 1.0, -1);\r\n            x = y * (x - 0.25 / x);\r\n        } else {\r\n            switch (_Exp(&x, y, -1)) {\r\n            case FP_ZERO: // report underflow\r\n            case FP_INFINITE: // report overflow\r\n                errno = ERANGE;\r\n                break;\r\n            }\r\n        }\r\n\r\n        return neg ? -x : x;\r\n    }\r\n}\r\n\r\n_CRTIMP2_PURE long double __CLRCALL_PURE_OR_CDECL _LSinh(long double x, long double y) noexcept {\r\n    return _Sinh(static_cast<double>(x), static_cast<double>(y));\r\n}\r\n\r\n_CRTIMP2_PURE float __CLRCALL_PURE_OR_CDECL _FSinh(float x, float y) noexcept {\r\n    // compute y * sinh(x), |y| <= 1\r\n\r\n    // coefficients\r\n    static constexpr float p[] = {0.00020400F, 0.00832983F, 0.16666737F, 0.99999998F};\r\n\r\n    short neg;\r\n\r\n    switch (_STD fpclassify(x)) { // test for special codes\r\n    case FP_NAN:\r\n        return x;\r\n    case FP_INFINITE:\r\n        return y != 0.0F ? x : _STD signbit(x) ? -y : y;\r\n    case FP_ZERO:\r\n        return x * y;\r\n    default: // finite\r\n        if (y == 0.0F) {\r\n            return x < 0.0F ? -y : y;\r\n        }\r\n\r\n        if (x < 0.0F) {\r\n            x   = -x;\r\n            neg = 1;\r\n        } else {\r\n            neg = 0;\r\n        }\r\n\r\n        constexpr float rteps  = 0x1p-12f;\r\n        constexpr float _FXbig = ((16 + _FOFF) + 2) * 0.347f;\r\n        if (x < rteps) {\r\n            x *= y; // x tiny\r\n        } else if (x < 1.0F) {\r\n            float w = x * x;\r\n\r\n            x += ((p[0] * w + p[1]) * w + p[2]) * w * x;\r\n            x *= y;\r\n        } else if (x < _FXbig) { // worth adding in exp(-x)\r\n            _FExp(&x, 1.0F, -1);\r\n            x = y * (x - 0.25F / x);\r\n        } else {\r\n            switch (_FExp(&x, y, -1)) {\r\n            case FP_ZERO: // report underflow\r\n            case FP_INFINITE: // report overflow\r\n                errno = ERANGE;\r\n                break;\r\n            }\r\n        }\r\n\r\n        return neg ? -x : x;\r\n    }\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xstod.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cmath>\r\n#include <cstdlib>\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE double __CLRCALL_PURE_OR_CDECL _Stodx(const char* _Str, char** _Endptr, long _Pten, int* _Perr) noexcept {\r\n    int& _Errno_ref = errno; // Nonzero cost, pay it once\r\n    const int _Orig = _Errno_ref;\r\n\r\n    _Errno_ref  = 0;\r\n    double _Val = _CSTD strtod(_Str, _Endptr);\r\n    *_Perr      = _Errno_ref;\r\n    _Errno_ref  = _Orig;\r\n\r\n    if (_Pten != 0) {\r\n        _Val *= _CSTD pow(10.0, static_cast<double>(_Pten));\r\n    }\r\n\r\n    return _Val;\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE double __CLRCALL_PURE_OR_CDECL _Stod(const char* s, char** endptr, long pten) noexcept {\r\n    return _Stodx(s, endptr, pten, nullptr);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE long double __CLRCALL_PURE_OR_CDECL _Stoldx(const char* s, char** endptr, long pten, int* perr) noexcept {\r\n    return _Stodx(s, endptr, pten, perr);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE long double __CLRCALL_PURE_OR_CDECL _Stold(const char* s, char** endptr, long pten) noexcept {\r\n    return _Stodx(s, endptr, pten, nullptr);\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xstof.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cmath>\r\n#include <cstdlib>\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE float __CLRCALL_PURE_OR_CDECL _Stofx(const char* _Str, char** _Endptr, long _Pten, int* _Perr) noexcept {\r\n    int& _Errno_ref = errno; // Nonzero cost, pay it once\r\n    const int _Orig = _Errno_ref;\r\n\r\n    _Errno_ref = 0;\r\n    float _Val = _CSTD strtof(_Str, _Endptr);\r\n    *_Perr     = _Errno_ref;\r\n    _Errno_ref = _Orig;\r\n\r\n    if (_Pten != 0) {\r\n        _Val *= _CSTD powf(10.0f, static_cast<float>(_Pten));\r\n    }\r\n\r\n    return _Val;\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE float __CLRCALL_PURE_OR_CDECL _Stof(const char* s, char** endptr, long pten) noexcept {\r\n    return _Stofx(s, endptr, pten, nullptr);\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xstol.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <yvals.h>\r\n\r\n#include <cctype>\r\n#include <cerrno>\r\n#include <climits>\r\n#include <cstdlib>\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n_CRTIMP2_PURE unsigned long __CLRCALL_PURE_OR_CDECL _Stoulx(const char*, char**, int, int*) noexcept;\r\n\r\n_CRTIMP2_PURE long __CLRCALL_PURE_OR_CDECL _Stolx(const char* s, char** endptr, int base, int* perr) noexcept {\r\n    // convert string to long, with checking\r\n    const char* sc;\r\n    char* se;\r\n    char sign;\r\n    unsigned long x;\r\n\r\n    if (endptr == nullptr) {\r\n        endptr = &se;\r\n    }\r\n\r\n    sc = s;\r\n    while (isspace(static_cast<unsigned char>(*sc))) {\r\n        ++sc;\r\n    }\r\n\r\n    sign = *sc == '-' || *sc == '+' ? *sc++ : '+';\r\n    x    = _Stoulx(sc, endptr, base, perr);\r\n    if (sc == *endptr) {\r\n        *endptr = const_cast<char*>(s);\r\n    }\r\n\r\n    if (s == *endptr && x != 0 || sign == '+' && LONG_MAX < x || sign == '-' && (1ul << 31) < x) { // overflow\r\n        errno = ERANGE;\r\n        if (perr != nullptr) {\r\n            *perr = 1;\r\n        }\r\n\r\n        return sign == '-' ? LONG_MIN : LONG_MAX;\r\n    }\r\n\r\n    return static_cast<long>(sign == '-' ? 0 - x : x);\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xstoll.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <yvals.h>\r\n\r\n#include <cctype>\r\n#include <cerrno>\r\n#include <climits>\r\n#include <cstdlib>\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n_CRTIMP2_PURE unsigned long long __CLRCALL_PURE_OR_CDECL _Stoullx(const char*, char**, int, int*) noexcept;\r\n\r\n_CRTIMP2_PURE long long __CLRCALL_PURE_OR_CDECL _Stollx(const char* s, char** endptr, int base, int* perr) noexcept {\r\n    // convert string to long long, with checking\r\n    const char* sc;\r\n    char* se;\r\n    char sign;\r\n    unsigned long long x;\r\n\r\n    if (endptr == nullptr) {\r\n        endptr = &se;\r\n    }\r\n\r\n    sc = s;\r\n    while (isspace(static_cast<unsigned char>(*sc))) {\r\n        ++sc;\r\n    }\r\n\r\n    sign = static_cast<char>(*sc == '-' || *sc == '+' ? *sc++ : '+');\r\n    x    = _Stoullx(sc, endptr, base, perr);\r\n    if (sc == *endptr) {\r\n        *endptr = const_cast<char*>(s);\r\n    }\r\n\r\n    if (s == *endptr && x != 0 || sign == '+' && LLONG_MAX < x || sign == '-' && (1ull << 63) < x) { // overflow\r\n        errno = ERANGE;\r\n        if (perr != nullptr) {\r\n            *perr = 1;\r\n        }\r\n\r\n        return sign == '-' ? LLONG_MIN : LLONG_MAX;\r\n    }\r\n\r\n    return static_cast<long long>(sign == '-' ? 0 - x : x);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE long long __CLRCALL_PURE_OR_CDECL _Stoll(const char* s, char** endptr, int base) noexcept {\r\n    // convert string, discard error code\r\n    return _Stollx(s, endptr, base, nullptr);\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xstoul.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <yvals.h>\r\n\r\n#include <cctype>\r\n#include <cerrno>\r\n#include <climits>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <cstring>\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n_CRTIMP2_PURE unsigned long __CLRCALL_PURE_OR_CDECL _Stoulx(\r\n    const char* s, char** endptr, int base, int* perr) noexcept {\r\n    // convert string to unsigned long, with checking\r\n\r\n    constexpr int _Base_max                    = 36; // largest valid base\r\n    static constexpr char digits[]             = \"0123456789abcdefghijklmnopqrstuvwxyz\"; // valid digits\r\n    static constexpr char ndigs[_Base_max + 1] = {0, 0, 33, 21, 17, 14, 13, 12, 11, 11, 10, 10, 9, 9, 9, 9, 9, 8, 8, 8,\r\n        8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7}; // 32-bits!\r\n\r\n    const char* sc;\r\n    const char* sd;\r\n    const char* s1;\r\n    const char* s2;\r\n    char dig = 0;\r\n    char sign;\r\n    ptrdiff_t n;\r\n    unsigned long x;\r\n    unsigned long y;\r\n\r\n    if (perr != nullptr) {\r\n        *perr = 0;\r\n    }\r\n\r\n    sc = s;\r\n    while (isspace(static_cast<unsigned char>(*sc))) {\r\n        ++sc;\r\n    }\r\n\r\n    sign = *sc == '-' || *sc == '+' ? *sc++ : '+';\r\n    if (base < 0 || base == 1 || _Base_max < base) { // silly base\r\n        if (endptr != nullptr) {\r\n            *endptr = const_cast<char*>(s);\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    if (0 < base) { // strip 0x or 0X\r\n        if (base == 16 && *sc == '0' && (sc[1] == 'x' || sc[1] == 'X')) {\r\n            sc += 2;\r\n        }\r\n    } else if (*sc != '0') {\r\n        base = 10;\r\n    } else if (sc[1] == 'x' || sc[1] == 'X') {\r\n        base = 16;\r\n        sc += 2;\r\n    } else {\r\n        base = 8;\r\n    }\r\n\r\n    s1 = sc;\r\n    while (*sc == '0') { // skip leading zeros\r\n        ++sc;\r\n    }\r\n\r\n    x = 0;\r\n    for (s2 = sc, y = 0; (sd = static_cast<const char*>(memchr(&digits[0], tolower(*sc), base))) != nullptr;\r\n        ++sc) { // accumulate digits\r\n        y   = x;\r\n        dig = static_cast<char>(sd - digits); // for overflow checking\r\n        x   = x * base + dig;\r\n    }\r\n\r\n    if (s1 == sc) { // check string validity\r\n        if (endptr != nullptr) {\r\n            *endptr = const_cast<char*>(s);\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    n = sc - s2 - ndigs[base];\r\n    if (n >= 0 && (0 < n || x < x - dig || (x - dig) / base != y)) { // overflow\r\n        errno = ERANGE;\r\n        if (perr != nullptr) {\r\n            *perr = 1;\r\n        }\r\n\r\n        x    = ULONG_MAX;\r\n        sign = '+'; // silence negation\r\n    }\r\n\r\n    if (sign == '-') { // get final value\r\n        x = 0 - x;\r\n    }\r\n\r\n    if (endptr != nullptr) {\r\n        *endptr = const_cast<char*>(sc);\r\n    }\r\n\r\n    return x;\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE unsigned long __CLRCALL_PURE_OR_CDECL _Stoul(const char* s, char** endptr, int base) noexcept {\r\n    // convert string, discard error code\r\n    return _Stoulx(s, endptr, base, nullptr);\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xstoull.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <yvals.h>\r\n\r\n#include <cctype>\r\n#include <cerrno>\r\n#include <climits>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <cstring>\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n_CRTIMP2_PURE unsigned long long __CLRCALL_PURE_OR_CDECL _Stoullx(\r\n    const char* s, char** endptr, int base, int* perr) noexcept {\r\n    // convert string to unsigned long long, with checking\r\n\r\n    constexpr int _Base_max                    = 36; // largest valid base\r\n    static constexpr char digits[]             = \"0123456789abcdefghijklmnopqrstuvwxyz\"; // valid digits\r\n    static constexpr char ndigs[_Base_max + 1] = {0, 0, 65, 41, 33, 28, 25, 23, 22, 21, 20, 19, 18, 18, 17, 17, 17, 16,\r\n        16, 16, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13}; // 64-bits!\r\n\r\n    const char* sc;\r\n    const char* sd;\r\n    const char* s1;\r\n    const char* s2;\r\n    char dig;\r\n    char sign;\r\n    ptrdiff_t n;\r\n    unsigned long long x;\r\n    unsigned long long y;\r\n\r\n    if (perr != nullptr) {\r\n        *perr = 0;\r\n    }\r\n\r\n    sc = s;\r\n    while (isspace(static_cast<unsigned char>(*sc))) {\r\n        ++sc;\r\n    }\r\n\r\n    sign = static_cast<char>(*sc == '-' || *sc == '+' ? *sc++ : '+');\r\n    if (base < 0 || base == 1 || _Base_max < base) { // silly base\r\n        if (endptr != nullptr) {\r\n            *endptr = const_cast<char*>(s);\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    if (0 < base) { // strip 0x or 0X\r\n        if (base == 16 && *sc == '0' && (sc[1] == 'x' || sc[1] == 'X')) {\r\n            sc += 2;\r\n        }\r\n    } else if (*sc != '0') {\r\n        base = 10;\r\n    } else if (sc[1] == 'x' || sc[1] == 'X') {\r\n        base = 16;\r\n        sc += 2;\r\n    } else {\r\n        base = 8;\r\n    }\r\n\r\n    for (s1 = sc; *sc == '0'; ++sc) { // skip leading zeros\r\n    }\r\n\r\n    x = 0;\r\n    for (s2 = sc, y = 0, dig = 0; (sd = static_cast<const char*>(memchr(&digits[0], tolower(*sc), base))) != nullptr;\r\n        ++sc) { // accumulate digits\r\n        y   = x;\r\n        dig = static_cast<char>(sd - digits); // for overflow checking\r\n        x   = x * base + dig;\r\n    }\r\n\r\n    if (s1 == sc) { // check string validity\r\n        if (endptr != nullptr) {\r\n            *endptr = const_cast<char*>(s);\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    n = sc - s2 - ndigs[base];\r\n    if (n >= 0 && (0 < n || x < x - dig || (x - dig) / base != y)) { // overflow\r\n        errno = ERANGE;\r\n        if (perr != nullptr) {\r\n            *perr = 1;\r\n        }\r\n\r\n        x    = ULLONG_MAX;\r\n        sign = '+';\r\n    }\r\n\r\n    if (sign == '-') { // get final value\r\n        x = 0 - x;\r\n    }\r\n\r\n    if (endptr != nullptr) {\r\n        *endptr = const_cast<char*>(sc);\r\n    }\r\n\r\n    return x;\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE unsigned long long __CLRCALL_PURE_OR_CDECL _Stoull(const char* s, char** endptr, int base) noexcept {\r\n    // convert string, discard error code\r\n    return _Stoullx(s, endptr, base, nullptr);\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xstrcoll.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Compare two strings using the locale LC_COLLATE information.\r\n\r\n#include <__msvc_xlocinfo_types.hpp>\r\n#include <cerrno>\r\n#include <clocale>\r\n#include <crtdbg.h>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <malloc.h>\r\n\r\n#include \"awint.hpp\"\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n// int _Strcoll() - Collate locale strings\r\n//\r\n// Purpose:\r\n//     Compare two strings using the locale LC_COLLATE information.\r\n//     [ANSI].\r\n//\r\n//     In the C locale, strcoll() simply resolves to strcmp().\r\n//\r\n// Entry:\r\n//     const char* string1  = pointer to beginning of the first string\r\n//     const char* end1     = pointer past end of the first string\r\n//     const char* string2  = pointer to beginning of the second string\r\n//     const char* end2     = pointer past end of the second string\r\n//     const _Collvec* ploc = pointer to locale info\r\n//\r\n// Exit:\r\n//     Less than 0    = first string less than second string\r\n//     0              = strings are equal\r\n//     Greater than 0 = first string greater than second string\r\n//\r\n// Exceptions:\r\n//     _NLSCMPERROR = error\r\n//     errno = EINVAL\r\n_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Strcoll(\r\n    const char* string1, const char* end1, const char* string2, const char* end2, const _Collvec* ploc) noexcept {\r\n    int ret = 0;\r\n    UINT codepage;\r\n    int n1 = static_cast<int>(end1 - string1);\r\n    int n2 = static_cast<int>(end2 - string2);\r\n    const wchar_t* locale_name;\r\n\r\n    if (ploc == nullptr) {\r\n        locale_name = ___lc_locale_name_func()[LC_COLLATE];\r\n        codepage    = ___lc_collate_cp_func();\r\n    } else {\r\n        locale_name = ploc->_LocaleName;\r\n        codepage    = ploc->_Page;\r\n    }\r\n\r\n    if (locale_name == nullptr) {\r\n        int ans = memcmp(string1, string2, n1 < n2 ? n1 : n2);\r\n        ret     = (ans != 0 || n1 == n2 ? ans : n1 < n2 ? -1 : +1);\r\n    } else {\r\n        ret = __crtCompareStringA(locale_name, SORT_STRINGSORT, string1, n1, string2, n2, codepage);\r\n\r\n        if (ret == 0) {\r\n            errno = EINVAL;\r\n            ret   = _NLSCMPERROR;\r\n        } else {\r\n            ret -= 2;\r\n        }\r\n    }\r\n\r\n    return ret;\r\n}\r\n\r\n// _Collvec _Getcoll() - get collation info for current locale\r\n_CRTIMP2_PURE _Collvec __CLRCALL_PURE_OR_CDECL _Getcoll() noexcept {\r\n    _Collvec coll;\r\n\r\n    coll._Page       = ___lc_collate_cp_func();\r\n    coll._LocaleName = ___lc_locale_name_func()[LC_COLLATE];\r\n    if (coll._LocaleName) {\r\n        coll._LocaleName = _wcsdup_dbg(coll._LocaleName, _CRT_BLOCK, __FILE__, __LINE__);\r\n    }\r\n\r\n    return coll;\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xstrxfrm.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Transform a string using the locale information as set by LC_COLLATE.\r\n\r\n#include <__msvc_xlocinfo_types.hpp>\r\n#include <clocale>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <malloc.h>\r\n\r\n#include <Windows.h>\r\n\r\n#include \"awint.hpp\"\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n// size_t _Strxfrm() - Transform a string using locale information\r\n//\r\n// Purpose:\r\n//     Transform the string pointed to by string2 and place the\r\n//     resulting string into the array pointed to by string1.\r\n//     No more than end1 - string1 characters are placed into the\r\n//     resulting string (including the null).\r\n//\r\n//     The transformation is such that if strcmp() is applied to\r\n//     the two transformed strings, the return value is equal to\r\n//     the result of strcoll() applied to the two original strings.\r\n//     Thus, the conversion must take the locale LC_COLLATE info\r\n//     into account.\r\n//     [ANSI]\r\n//\r\n//     The value of the following expression is the size of the array\r\n//     needed to hold the transformation of the source string:\r\n//\r\n//     1 + strxfrm(nullptr,string,0)\r\n//\r\n//     In the \"C\" locale, _Strxfrm() simply resolves to strncpy()/strlen().\r\n//\r\n// Entry:\r\n//     char* string1        = pointer to beginning of result string\r\n//     char* end1           = pointer past end of result string\r\n//     const char* string2  = pointer to beginning of source string\r\n//     const char* end2     = pointer past end of source string\r\n//     const _Collvec* ploc = pointer to locale info\r\n//\r\n// Exit:\r\n//     Length of the transformed string.\r\n//     If the value returned is too big, the contents of the\r\n//     string1 array are indeterminate.\r\n//\r\n// Exceptions:\r\n//     Non-standard: if OM/API error, return SIZE_MAX.\r\n_CRTIMP2_PURE size_t __CLRCALL_PURE_OR_CDECL _Strxfrm(\r\n    _Out_writes_(end1 - string1) _Post_readable_size_(return) char* string1, char* end1,\r\n    _In_reads_(end2 - string2) const char* string2, const char* end2, _In_opt_ const _Collvec* ploc) noexcept {\r\n    size_t n1     = end1 - string1;\r\n    size_t n2     = end2 - string2;\r\n    size_t retval = static_cast<size_t>(-1); // NON-ANSI: default if OM or API error\r\n    UINT codepage;\r\n    const wchar_t* locale_name;\r\n\r\n    if (ploc == nullptr) {\r\n        locale_name = ___lc_locale_name_func()[LC_COLLATE];\r\n        codepage    = ___lc_collate_cp_func();\r\n    } else {\r\n        locale_name = ploc->_LocaleName;\r\n        codepage    = ploc->_Page;\r\n    }\r\n\r\n    if (locale_name == nullptr && codepage == CP_ACP) {\r\n        if (n2 <= n1) {\r\n            memcpy(string1, string2, n2);\r\n        }\r\n        retval = n2;\r\n    } else {\r\n        // Inquire size of dst string in BYTES\r\n        const int dstlen =\r\n            __crtLCMapStringA(locale_name, LCMAP_SORTKEY, string2, static_cast<int>(n2), nullptr, 0, codepage, TRUE);\r\n\r\n        if (dstlen != 0) {\r\n            retval = dstlen;\r\n\r\n            // if not enough room, return amount needed\r\n            if (dstlen <= static_cast<int>(n1)) {\r\n                // Map src string to dst string\r\n                __crtLCMapStringA(locale_name, LCMAP_SORTKEY, string2, static_cast<int>(n2), string1,\r\n                    static_cast<int>(n1), codepage, TRUE);\r\n            }\r\n        }\r\n    }\r\n\r\n    return retval;\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xthrow.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <functional>\r\n#include <new>\r\n#include <regex>\r\n#include <stdexcept>\r\n\r\n_STD_BEGIN\r\n[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xbad_alloc() {\r\n    _THROW(bad_alloc{});\r\n}\r\n\r\n[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xinvalid_argument(_In_z_ const char* const _Message) {\r\n    _THROW(invalid_argument(_Message));\r\n}\r\n\r\n[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xlength_error(_In_z_ const char* const _Message) {\r\n    _THROW(length_error(_Message));\r\n}\r\n\r\n[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xout_of_range(_In_z_ const char* const _Message) {\r\n    _THROW(out_of_range(_Message));\r\n}\r\n\r\n[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xoverflow_error(_In_z_ const char* const _Message) {\r\n    _THROW(overflow_error(_Message));\r\n}\r\n\r\n[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xruntime_error(_In_z_ const char* const _Message) {\r\n    _THROW(runtime_error(_Message));\r\n}\r\n\r\n[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xbad_function_call() {\r\n    _THROW(bad_function_call{});\r\n}\r\n\r\n[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xregex_error(const regex_constants::error_type _Code) {\r\n    _THROW(regex_error(_Code));\r\n}\r\n_STD_END\r\n"
  },
  {
    "path": "stl/src/xtime.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// _timespec64 functions for system time\r\n\r\n#include <atomic>\r\n#include <xtimec.h>\r\n\r\n#include <Windows.h>\r\n\r\nnamespace {\r\n    constexpr long _Nsec_per_sec  = 1000000000L;\r\n    constexpr long _Nsec_per_msec = 1000000L;\r\n    constexpr int _Msec_per_sec   = 1000;\r\n\r\n    void _timespec64_normalize(_timespec64* xt) { // adjust so that 0 <= tv_nsec < 1 000 000 000\r\n        while (xt->tv_nsec < 0) { // normalize target time\r\n            xt->tv_sec -= 1;\r\n            xt->tv_nsec += _Nsec_per_sec;\r\n        }\r\n        while (_Nsec_per_sec <= xt->tv_nsec) { // normalize target time\r\n            xt->tv_sec += 1;\r\n            xt->tv_nsec -= _Nsec_per_sec;\r\n        }\r\n    }\r\n\r\n    // return _timespec64 object holding difference between xt and now, treating negative difference as 0\r\n    _timespec64 _timespec64_diff(const _timespec64* xt, const _timespec64* now) {\r\n        _timespec64 diff = *xt;\r\n        _timespec64_normalize(&diff);\r\n        if (diff.tv_nsec < now->tv_nsec) { // avoid underflow\r\n            diff.tv_sec -= now->tv_sec + 1;\r\n            diff.tv_nsec += _Nsec_per_sec - now->tv_nsec;\r\n        } else { // no underflow\r\n            diff.tv_sec -= now->tv_sec;\r\n            diff.tv_nsec -= now->tv_nsec;\r\n        }\r\n\r\n        if (diff.tv_sec < 0 || (diff.tv_sec == 0 && diff.tv_nsec <= 0)) { // time is zero\r\n            diff.tv_sec  = 0;\r\n            diff.tv_nsec = 0;\r\n        }\r\n        return diff;\r\n    }\r\n} // unnamed namespace\r\n\r\nextern \"C\" {\r\n\r\n_CRTIMP2_PURE long long __cdecl _Xtime_get_ticks() noexcept {\r\n    // get system time in 100-nanosecond intervals since the epoch\r\n    constexpr long long _Epoch = 0x19DB1DED53E8000LL;\r\n\r\n    FILETIME ft;\r\n    GetSystemTimePreciseAsFileTime(&ft);\r\n    return ((static_cast<long long>(ft.dwHighDateTime)) << 32) + static_cast<long long>(ft.dwLowDateTime) - _Epoch;\r\n}\r\n\r\n// Used by several src files, but not dllexported.\r\nvoid _Timespec64_get_sys(_timespec64* xt) noexcept { // get system time with nanosecond resolution\r\n    constexpr long _Nsec100_per_sec = _Nsec_per_sec / 100;\r\n\r\n    unsigned long long now = _Xtime_get_ticks();\r\n    xt->tv_sec             = static_cast<__time64_t>(now / _Nsec100_per_sec);\r\n    xt->tv_nsec            = static_cast<long>(now % _Nsec100_per_sec) * 100;\r\n}\r\n\r\n// convert time to milliseconds\r\n_CRTIMP2_PURE long __cdecl _Xtime_diff_to_millis2(const _timespec64* xt1, const _timespec64* xt2) noexcept {\r\n    _timespec64 diff = _timespec64_diff(xt1, xt2);\r\n    return static_cast<long>(diff.tv_sec * _Msec_per_sec + (diff.tv_nsec + _Nsec_per_msec - 1) / _Nsec_per_msec);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE long __cdecl _Xtime_diff_to_millis(const _timespec64* xt) noexcept { // convert time to milliseconds\r\n    _timespec64 now;\r\n    _Timespec64_get_sys(&now);\r\n    return _Xtime_diff_to_millis2(xt, &now);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE int __cdecl xtime_get(_timespec64* xt, int type) noexcept { // get current time\r\n    if (type != TIME_UTC || xt == nullptr) {\r\n        type = 0;\r\n    } else {\r\n        _Timespec64_get_sys(xt);\r\n    }\r\n\r\n    return type;\r\n}\r\n\r\n_CRTIMP2_PURE long long __cdecl _Query_perf_counter() noexcept { // get current value of performance counter\r\n    LARGE_INTEGER li;\r\n    QueryPerformanceCounter(&li); // always succeeds\r\n    return li.QuadPart;\r\n}\r\n\r\n_CRTIMP2_PURE long long __cdecl _Query_perf_frequency() noexcept { // get frequency of performance counter\r\n    static std::atomic<long long> freq_cached{0};\r\n    long long freq = freq_cached.load(std::memory_order_relaxed);\r\n    if (freq == 0) {\r\n        LARGE_INTEGER li;\r\n        QueryPerformanceFrequency(&li); // always succeeds\r\n        freq = li.QuadPart; // doesn't change after system boot\r\n        freq_cached.store(freq, std::memory_order_relaxed);\r\n    }\r\n    return freq;\r\n}\r\n\r\n} // extern \"C\"\r\n\r\n/*\r\n * This file is derived from software bearing the following\r\n * restrictions:\r\n *\r\n * (c) Copyright William E. Kempf 2001\r\n *\r\n * Permission to use, copy, modify, distribute and sell this\r\n * software and its documentation for any purpose is hereby\r\n * granted without fee, provided that the above copyright\r\n * notice appear in all copies and that both that copyright\r\n * notice and this permission notice appear in supporting\r\n * documentation. William E. Kempf makes no representations\r\n * about the suitability of this software for any purpose.\r\n * It is provided \"as is\" without express or implied warranty.\r\n */\r\n"
  },
  {
    "path": "stl/src/xtowlower.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// _Towlower -- convert wchar_t to lower case\r\n\r\n#include <__msvc_xlocinfo_types.hpp>\r\n#include <cwchar>\r\n\r\n#include \"awint.hpp\"\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n_CRTIMP2_PURE wchar_t __CLRCALL_PURE_OR_CDECL _Towlower(wchar_t _Ch, const _Ctypevec* _Ctype) noexcept {\r\n    // convert element to lower case\r\n    wchar_t _Res = _Ch;\r\n    if (_Ch != WEOF) {\r\n        if (_Ctype->_LocaleName == nullptr && _Ch < 256) { // handle ASCII character in C locale\r\n            if (L'A' <= _Ch && _Ch <= L'Z') {\r\n                _Res = static_cast<wchar_t>(_Ch - L'A' + L'a');\r\n            }\r\n        } else if (__crtLCMapStringW(_Ctype->_LocaleName, LCMAP_LOWERCASE, &_Ch, 1, &_Res, 1) == 0) {\r\n            _Res = _Ch;\r\n        }\r\n    }\r\n\r\n    return _Res;\r\n}\r\n\r\n#ifdef MRTDLL\r\n_CRTIMP2_PURE unsigned short __CLRCALL_PURE_OR_CDECL _Towlower(unsigned short _Ch, const _Ctypevec* _Ctype) noexcept {\r\n    return _Towlower(static_cast<wchar_t>(_Ch), _Ctype);\r\n}\r\n#endif\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xtowupper.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// _Towupper -- convert wchar_t to upper case\r\n\r\n#include <__msvc_xlocinfo_types.hpp>\r\n#include <cwchar>\r\n\r\n#include \"awint.hpp\"\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n_CRTIMP2_PURE wchar_t __CLRCALL_PURE_OR_CDECL _Towupper(wchar_t _Ch, const _Ctypevec* _Ctype) noexcept {\r\n    // convert element to upper case\r\n    wchar_t _Res = _Ch;\r\n    if (_Ch != WEOF) {\r\n        if (_Ctype->_LocaleName == nullptr && _Ch < 256) { // handle ASCII character in C locale\r\n            if (L'a' <= _Ch && _Ch <= L'z') {\r\n                _Res = static_cast<wchar_t>(_Ch - L'a' + L'A');\r\n            }\r\n        } else if (__crtLCMapStringW(_Ctype->_LocaleName, LCMAP_UPPERCASE, &_Ch, 1, &_Res, 1) == 0) {\r\n            _Res = _Ch;\r\n        }\r\n    }\r\n\r\n    return _Res;\r\n}\r\n\r\n#ifdef MRTDLL\r\n_CRTIMP2_PURE unsigned short __CLRCALL_PURE_OR_CDECL _Towupper(unsigned short _Ch, const _Ctypevec* _Ctype) noexcept {\r\n    return _Towupper(static_cast<wchar_t>(_Ch), _Ctype);\r\n}\r\n#endif\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xvalues.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// values used by math functions -- IEEE 754 version\r\n\r\n#if defined(_M_CEE_PURE)\r\n#if defined(MRTDLL)\r\n#undef MRTDLL\r\n#endif\r\n#endif\r\n\r\n#include <yvals.h>\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\nunion _Dconst { // pun float types as integer array\r\n    unsigned short _Word[8];\r\n    float _Float;\r\n    double _Double;\r\n    long double _Long_double;\r\n};\r\nextern _CRTIMP2_PURE _Dconst _Denorm  = {1, 0, 0, 0};\r\nextern _CRTIMP2_PURE _Dconst _LDenorm = {1, 0, 0, 0};\r\nextern _CRTIMP2_PURE _Dconst _Hugeval = {0, 0, 0, 0x7ff0};\r\nextern _CRTIMP2_PURE _Dconst _Inf     = {0, 0, 0, 0x7ff0};\r\nextern _CRTIMP2_PURE _Dconst _LInf    = {0, 0, 0, 0x7ff0};\r\nextern _CRTIMP2_PURE _Dconst _Nan     = {0, 0, 0, 0x7ff8};\r\nextern _CRTIMP2_PURE _Dconst _LNan    = {0, 0, 0, 0x7ff8};\r\nextern _CRTIMP2_PURE _Dconst _Snan    = {1, 0, 0, 0x7ff0};\r\nextern _CRTIMP2_PURE _Dconst _LSnan   = {1, 0, 0, 0x7ff0};\r\nextern _CRTIMP2_PURE _Dconst _FDenorm = {1, 0};\r\nextern _CRTIMP2_PURE _Dconst _FInf    = {0, 0x7f80};\r\nextern _CRTIMP2_PURE _Dconst _FNan    = {0, 0x7fc0};\r\nextern _CRTIMP2_PURE _Dconst _FSnan   = {1, 0x7f80};\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xwcscoll.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Compare two wchar_t strings using the locale LC_COLLATE information.\r\n\r\n#include <__msvc_xlocinfo_types.hpp>\r\n#include <cerrno>\r\n#include <clocale>\r\n#include <cstdlib>\r\n#include <cwchar>\r\n\r\n#include \"awint.hpp\"\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n// int _Wcscoll() - Collate wide-character locale strings\r\n//\r\n// Purpose:\r\n//     Compare two wchar_t strings using the locale LC_COLLATE information.\r\n//     In the C locale, wcscmp() is used to make the comparison.\r\n//\r\n// Entry:\r\n//     const wchar_t* string1  = pointer to beginning of the first string\r\n//     const wchar_t* end1     = pointer past end of the first string\r\n//     const wchar_t* string2  = pointer to beginning of the second string\r\n//     const wchar_t* end2     = pointer past end of the second string\r\n//     const _Collvec* ploc    = pointer to locale info\r\n//\r\n// Exit:\r\n//     -1 = first string less than second string\r\n//     0 = strings are equal\r\n//     1 = first string greater than second string\r\n//     This range of return values may differ from other *cmp / *coll functions.\r\n//\r\n// Exceptions:\r\n//     _NLSCMPERROR = error\r\n//     errno = EINVAL\r\n_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Wcscoll(const wchar_t* string1, const wchar_t* end1, const wchar_t* string2,\r\n    const wchar_t* end2, const _Collvec* ploc) noexcept {\r\n    int n1  = static_cast<int>(end1 - string1);\r\n    int n2  = static_cast<int>(end2 - string2);\r\n    int ret = 0;\r\n    const wchar_t* locale_name;\r\n\r\n    if (ploc == nullptr) {\r\n        locale_name = ___lc_locale_name_func()[LC_COLLATE];\r\n    } else {\r\n        locale_name = ploc->_LocaleName;\r\n    }\r\n\r\n    if (locale_name == nullptr) {\r\n        int ans = wmemcmp(string1, string2, n1 < n2 ? n1 : n2);\r\n        ret     = (ans != 0 || n1 == n2 ? ans : n1 < n2 ? -1 : +1);\r\n    } else {\r\n        ret = __crtCompareStringW(locale_name, SORT_STRINGSORT, string1, n1, string2, n2);\r\n\r\n        if (ret == 0) {\r\n            errno = EINVAL;\r\n            ret   = _NLSCMPERROR;\r\n        } else {\r\n            ret -= 2;\r\n        }\r\n    }\r\n\r\n    return ret;\r\n}\r\n\r\n#ifdef MRTDLL\r\n_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Wcscoll(const unsigned short* string1, const unsigned short* end1,\r\n    const unsigned short* string2, const unsigned short* end2, const _Collvec* ploc) noexcept {\r\n    return _Wcscoll(reinterpret_cast<const wchar_t*>(string1), reinterpret_cast<const wchar_t*>(end1),\r\n        reinterpret_cast<const wchar_t*>(string2), reinterpret_cast<const wchar_t*>(end2), ploc);\r\n}\r\n#endif // defined(MRTDLL)\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xwcsxfrm.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Transform a wide-character string using the locale information as set by LC_COLLATE.\r\n\r\n#include <__msvc_xlocinfo_types.hpp>\r\n#include <climits>\r\n#include <clocale>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <internal_shared.h>\r\n\r\n#include \"awint.hpp\"\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n// size_t _Wcsxfrm() - Transform a string using locale information\r\n//\r\n// Purpose:\r\n//     Transform the wide string pointed to by string2 and place the\r\n//     resulting wide string into the array pointed to by string1.\r\n//     No more than end1 - string1 wide characters are placed into the\r\n//     resulting string (including the null).\r\n//\r\n//     The transformation is such that if wcscmp() is applied to\r\n//     the two transformed strings, the return value is equal to\r\n//     the result of wcscoll() applied to the two original strings.\r\n//     Thus, the conversion must take the locale LC_COLLATE info\r\n//     into account.\r\n//\r\n//     In the C locale, wcsxfrm() simply resolves to wcsncpy()/wcslen().\r\n//\r\n// Entry:\r\n//     wchar_t* string1        = pointer to beginning of result string\r\n//     wchar_t* end1           = pointer past end of result string\r\n//     const wchar_t* string2  = pointer to beginning of source string\r\n//     const wchar_t* end2     = pointer past end of source string\r\n//     const _Collvec* ploc    = pointer to locale info\r\n//\r\n// Exit:\r\n//     Length of the transformed string.\r\n//     If the value returned is too big, the contents of the\r\n//     string1 array are indeterminate.\r\n//\r\n// Exceptions:\r\n//     Non-standard: if OM/API error, return SIZE_MAX.\r\n_CRTIMP2_PURE size_t __CLRCALL_PURE_OR_CDECL _Wcsxfrm(\r\n    _Out_writes_(end1 - string1) _Post_readable_size_(return) wchar_t* string1, wchar_t* end1,\r\n    _In_reads_(end2 - string2) const wchar_t* string2, const wchar_t* end2, _In_opt_ const _Collvec* ploc) noexcept {\r\n    size_t n1   = end1 - string1;\r\n    size_t n2   = end2 - string2;\r\n    size_t size = static_cast<size_t>(-1);\r\n    const wchar_t* locale_name;\r\n\r\n    if (ploc == nullptr) {\r\n        locale_name = ___lc_locale_name_func()[LC_COLLATE];\r\n    } else {\r\n        locale_name = ploc->_LocaleName;\r\n    }\r\n\r\n    if (locale_name == nullptr) {\r\n        if (n2 <= n1) {\r\n            memcpy(string1, string2, n2 * sizeof(wchar_t));\r\n        }\r\n        size = n2;\r\n    } else {\r\n        // When using LCMAP_SORTKEY, LCMapStringW handles BYTES not wide\r\n        // chars. We use a byte buffer to hold bytes and then convert the\r\n        // byte string to a wide char string and return this so it can be\r\n        // compared using wcscmp(). User's buffer is n1 wide chars, so\r\n        // use an internal buffer of n1 bytes.\r\n\r\n        auto bbuffer = _malloc_crt_t(unsigned char, n1);\r\n\r\n        if (bbuffer) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 6386) // PREfast doesn't understand LCMAP_SORTKEY\r\n            size = __crtLCMapStringW(locale_name, LCMAP_SORTKEY, string2, static_cast<int>(n2),\r\n                reinterpret_cast<wchar_t*>(bbuffer.get()), static_cast<int>(n1));\r\n#pragma warning(pop)\r\n\r\n            if (size == 0) {\r\n                // buffer not big enough, get size required.\r\n                size = __crtLCMapStringW(locale_name, LCMAP_SORTKEY, string2, static_cast<int>(n2), nullptr, 0);\r\n\r\n                if (size == 0) {\r\n                    size = static_cast<size_t>(-1); // default error\r\n                }\r\n            } else {\r\n                // string successfully mapped, convert to wide char\r\n\r\n                for (size_t i = 0; i < size; ++i) {\r\n                    string1[i] = static_cast<wchar_t>(bbuffer.get()[i]);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    return size;\r\n}\r\n\r\n#ifdef MRTDLL\r\n_CRTIMP2_PURE size_t __CLRCALL_PURE_OR_CDECL _Wcsxfrm(unsigned short* string1, unsigned short* end1,\r\n    const unsigned short* string2, const unsigned short* end2, const _Collvec* ploc) noexcept {\r\n    return _Wcsxfrm(reinterpret_cast<wchar_t*>(string1), reinterpret_cast<wchar_t*>(end1),\r\n        reinterpret_cast<const wchar_t*>(string2), reinterpret_cast<const wchar_t*>(end2), ploc);\r\n}\r\n#endif // defined(MRTDLL)\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xwctomb.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Convert wide character to multibyte character, with locale.\r\n\r\n#include <yvals.h>\r\n\r\n#include <__msvc_xlocinfo_types.hpp>\r\n#include <cerrno>\r\n#include <climits> // for MB_LEN_MAX\r\n#include <clocale>\r\n#include <cstdlib>\r\n#include <mbctype.h>\r\n\r\n#include <Windows.h>\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n_CRTIMP2_PURE _Cvtvec __CLRCALL_PURE_OR_CDECL _Getcvt() noexcept { // get conversion info for current locale\r\n    _Cvtvec _Cvt = {0};\r\n\r\n    _Cvt._Page      = ___lc_codepage_func();\r\n    _Cvt._Mbcurmax  = ___mb_cur_max_func();\r\n    _Cvt._Isclocale = ___lc_locale_name_func()[LC_CTYPE] == nullptr;\r\n\r\n    if (!_Cvt._Isclocale) {\r\n        const unsigned short* const _Ctype_table = __pctype_func();\r\n        for (int _Idx = 0; _Idx < 256; ++_Idx) {\r\n            if (_Ctype_table[_Idx] & _LEADBYTE) {\r\n                _Cvt._Isleadbyte[_Idx >> 3] |= 1 << (_Idx & 7);\r\n            }\r\n        }\r\n    }\r\n\r\n    return _Cvt;\r\n}\r\n\r\n// int _Wcrtomb() - Convert wide character to multibyte character.\r\n//\r\n// Purpose:\r\n//     Convert a wide character into the equivalent multi-byte character,\r\n//     according to the specified LC_CTYPE category, or the current locale.\r\n//     [ANSI].\r\n//\r\n// Entry:\r\n//     char* s             = pointer to multibyte character\r\n//     wchar_t wchar       = source wide character\r\n//     mbstate_t* pst      = pointer to state (not used)\r\n//     const _Cvtvec* ploc = pointer to locale info\r\n//\r\n// Exit:\r\n// Returns:\r\n//     -1 (if error) or number of bytes comprising converted mbc\r\n//\r\n// Exceptions:\r\n//     None.\r\n\r\n_CRTIMP2_PURE _Success_(return != -1) int __CLRCALL_PURE_OR_CDECL\r\n    _Wcrtomb(_Out_ char* s, wchar_t wchar, mbstate_t* pst, const _Cvtvec* ploc) noexcept {\r\n    _CRT_UNUSED(pst);\r\n    if (ploc->_Isclocale) {\r\n        if (wchar > 255) { // validate high byte\r\n            errno = EILSEQ;\r\n            return -1;\r\n        }\r\n\r\n        *s = static_cast<char>(wchar);\r\n        return sizeof(char);\r\n    } else {\r\n        BOOL defused = 0;\r\n        _Cvtvec cvtvec;\r\n\r\n        if (ploc == nullptr) {\r\n            cvtvec = _Getcvt();\r\n            ploc   = &cvtvec;\r\n        }\r\n\r\n        const int size = WideCharToMultiByte(ploc->_Page, 0, &wchar, 1, s, ploc->_Mbcurmax, nullptr, &defused);\r\n        if (size == 0 || defused) {\r\n            errno = EILSEQ;\r\n            return -1;\r\n        }\r\n\r\n        return size;\r\n    }\r\n}\r\n\r\n#ifdef MRTDLL\r\n_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Wcrtomb(\r\n    char* s, unsigned short wchar, mbstate_t* pst, const _Cvtvec* ploc) noexcept {\r\n    return _Wcrtomb(s, static_cast<wchar_t>(wchar), pst, ploc);\r\n}\r\n#endif // defined(MRTDLL)\r\n\r\n// TRANSITION, ABI: __Wcrtomb_lk() is preserved for binary compatibility\r\n_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL __Wcrtomb_lk(\r\n    char* s, wchar_t wchar, mbstate_t* pst, const _Cvtvec* ploc) noexcept {\r\n    return _Wcrtomb(s, wchar, pst, ploc);\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xwstod.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cmath>\r\n#include <cwchar>\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE double __CLRCALL_PURE_OR_CDECL _WStodx(\r\n    const wchar_t* _Str, wchar_t** _Endptr, long _Pten, int* _Perr) noexcept {\r\n    int& _Errno_ref = errno; // Nonzero cost, pay it once\r\n    const int _Orig = _Errno_ref;\r\n\r\n    _Errno_ref  = 0;\r\n    double _Val = _CSTD wcstod(_Str, _Endptr);\r\n    *_Perr      = _Errno_ref;\r\n    _Errno_ref  = _Orig;\r\n\r\n    if (_Pten != 0) {\r\n        _Val *= _CSTD pow(10.0, static_cast<double>(_Pten));\r\n    }\r\n\r\n    return _Val;\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE double __CLRCALL_PURE_OR_CDECL _WStod(const wchar_t* s, wchar_t** endptr, long pten) noexcept {\r\n    return _WStodx(s, endptr, pten, nullptr);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE long double __CLRCALL_PURE_OR_CDECL _WStoldx(\r\n    const wchar_t* s, wchar_t** endptr, long pten, int* perr) noexcept {\r\n    return _WStodx(s, endptr, pten, perr);\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE long double __CLRCALL_PURE_OR_CDECL _WStold(const wchar_t* s, wchar_t** endptr, long pten) noexcept {\r\n    return _WStodx(s, endptr, pten, nullptr);\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "stl/src/xwstof.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cmath>\r\n#include <cwchar>\r\n\r\n_EXTERN_C_UNLESS_PURE\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE float __CLRCALL_PURE_OR_CDECL _WStofx(\r\n    const wchar_t* _Str, wchar_t** _Endptr, long _Pten, int* _Perr) noexcept {\r\n    int& _Errno_ref = errno; // Nonzero cost, pay it once\r\n    const int _Orig = _Errno_ref;\r\n\r\n    _Errno_ref = 0;\r\n    float _Val = _CSTD wcstof(_Str, _Endptr);\r\n    *_Perr     = _Errno_ref;\r\n    _Errno_ref = _Orig;\r\n\r\n    if (_Pten != 0) {\r\n        _Val *= _CSTD powf(10.0f, static_cast<float>(_Pten));\r\n    }\r\n\r\n    return _Val;\r\n}\r\n\r\n// TRANSITION, ABI: preserved for binary compatibility\r\n_CRTIMP2_PURE float __CLRCALL_PURE_OR_CDECL _WStof(const wchar_t* s, wchar_t** endptr, long pten) noexcept {\r\n    return _WStofx(s, endptr, pten, nullptr);\r\n}\r\n\r\n_END_EXTERN_C_UNLESS_PURE\r\n"
  },
  {
    "path": "tests/CMakeLists.txt",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nfind_package(Python \"3.14.3\" REQUIRED COMPONENTS Interpreter)\r\n\r\nset(STL_BUILD_ROOT \"${PROJECT_BINARY_DIR}/out\")\r\nset(STL_SOURCE_DIR \"${PROJECT_SOURCE_DIR}\")\r\nset(STL_TEST_OUTPUT_DIR \"${CMAKE_CURRENT_BINARY_DIR}\")\r\nset(STL_TEST_UTILS_DIR \"${CMAKE_CURRENT_SOURCE_DIR}/utils\")\r\nset(STL_TESTED_HEADERS_DIR \"${STL_BUILD_ROOT}/inc\")\r\nset(STL_TESTED_MODULES_DIR \"${STL_BUILD_ROOT}/modules\")\r\n\r\nset(LLVM_PROJECT_SOURCE_DIR \"${STL_SOURCE_DIR}/llvm-project\" CACHE PATH\r\n    \"Location of the llvm-project source tree\")\r\nset(LIBCXX_SOURCE_DIR \"${LLVM_PROJECT_SOURCE_DIR}/libcxx\" CACHE PATH\r\n    \"Location of the libcxx source tree\")\r\n\r\noption(TESTS_BUILD_ONLY \"Only run the build steps of tests\" OFF)\r\n\r\nadd_subdirectory(libcxx)\r\nadd_subdirectory(std)\r\nadd_subdirectory(tr1)\r\n\r\n# Add the stl-lit subdirectory last so all the test directories have had a\r\n# chance to add to the config map and test directory global properties.\r\nadd_subdirectory(utils/stl-lit)\r\n\r\nif(NOT DEFINED LIT_FLAGS)\r\n    set(LIT_FLAGS \"-o\" \"${CMAKE_CURRENT_BINARY_DIR}/test_results.json\")\r\nendif()\r\n\r\nset(STL_LIT_COMMAND ${Python_EXECUTABLE} ${STL_LIT_OUTPUT} ${LIT_FLAGS})\r\nget_property(STL_LIT_TEST_DIRS GLOBAL PROPERTY STL_LIT_TEST_DIRS)\r\n\r\nadd_custom_target(STL-CI COMMAND ${STL_LIT_COMMAND} --time-tests -Dnotags=ASAN ${STL_LIT_TEST_DIRS} USES_TERMINAL)\r\nadd_custom_target(STL-ASan-CI COMMAND ${STL_LIT_COMMAND} --time-tests -Dtags=ASAN ${STL_LIT_TEST_DIRS} USES_TERMINAL)\r\nadd_custom_target(test-only-edg COMMAND ${STL_LIT_COMMAND} --time-tests -Dnotags=ASAN -Dtest-only-edg=True --xunit-xml-output test-results.xml ${STL_LIT_TEST_DIRS} USES_TERMINAL)\r\n"
  },
  {
    "path": "tests/libcxx/CMakeLists.txt",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nexecute_process(\r\n  COMMAND \"${Python_EXECUTABLE}\" \"${STL_SOURCE_DIR}/tools/scripts/check_libcxx_paths.py\"\r\n  COMMAND_ERROR_IS_FATAL ANY\r\n)\r\n\r\nset(LIBCXX_ENVLST \"${CMAKE_CURRENT_SOURCE_DIR}/usual_matrix.lst\")\r\nset(LIBCXX_EXPECTED_RESULTS \"${CMAKE_CURRENT_SOURCE_DIR}/expected_results.txt\")\r\nset(LIBCXX_TEST_OUTPUT_DIR \"${STL_TEST_OUTPUT_DIR}/libcxx\")\r\n\r\nconfigure_file(\r\n  ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in\r\n  ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg)\r\n\r\nset(LIBCXX_LIT_CONFIG_MAP \"map_config(\\\"${LIBCXX_SOURCE_DIR}/test/lit.cfg.py\\\", \\\"${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg\\\")\\n\")\r\nstring(APPEND LIBCXX_LIT_CONFIG_MAP \"map_config(\\\"${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg\\\", \\\"${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg\\\")\\n\")\r\n\r\nset_property(GLOBAL APPEND_STRING PROPERTY STL_LIT_CONFIG_MAP ${LIBCXX_LIT_CONFIG_MAP})\r\nset_property(GLOBAL APPEND PROPERTY STL_LIT_TEST_DIRS \"${LIBCXX_SOURCE_DIR}/test/std\")\r\n"
  },
  {
    "path": "tests/libcxx/contest.yaml",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n---\r\n  tests-root: '..\\..\\llvm-project\\libcxx\\test\\std'\r\n  skipped-test-lists-relative-to-tests-root: true\r\n  skipped-test-directories:\r\n    - 'experimental'\r\n    - 'pstl'\r\n  skipped-test-file-names:\r\n    - 'nothing_to_do.pass.cpp'\r\n  skipped-tests-comment-list-files:\r\n    - 'magic_comments.txt'\r\n  skipped-tests-list-files:\r\n    - 'expected_results.txt'\r\n  configuration-files:\r\n    - 'usual_matrix.lst'\r\n"
  },
  {
    "path": "tests/libcxx/expected_results.txt",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# *** ISSUES REPORTED/KNOWN UPSTREAM ***\r\n# LLVM-48860: P0466R5 Layout-Compatibility And Pointer-Interconvertibility Traits\r\nstd/language.support/support.limits/support.limits.general/type_traits.version.compile.pass.cpp:2 FAIL\r\n\r\n# LLVM-73836: warning C5101: use of preprocessor directive in function-like macro argument list is undefined behavior\r\nstd/time/time.syn/formatter.duration.pass.cpp:0 FAIL\r\nstd/time/time.syn/formatter.duration.pass.cpp:1 FAIL\r\nstd/time/time.syn/formatter.file_time.pass.cpp:0 FAIL\r\nstd/time/time.syn/formatter.file_time.pass.cpp:1 FAIL\r\nstd/time/time.syn/formatter.gps_time.pass.cpp:0 FAIL\r\nstd/time/time.syn/formatter.gps_time.pass.cpp:1 FAIL\r\nstd/time/time.syn/formatter.hh_mm_ss.pass.cpp:0 FAIL\r\nstd/time/time.syn/formatter.hh_mm_ss.pass.cpp:1 FAIL\r\nstd/time/time.syn/formatter.local_time.pass.cpp:0 FAIL\r\nstd/time/time.syn/formatter.local_time.pass.cpp:1 FAIL\r\nstd/time/time.syn/formatter.sys_time.pass.cpp:0 FAIL\r\nstd/time/time.syn/formatter.sys_time.pass.cpp:1 FAIL\r\nstd/time/time.syn/formatter.tai_time.pass.cpp:0 FAIL\r\nstd/time/time.syn/formatter.tai_time.pass.cpp:1 FAIL\r\nstd/time/time.syn/formatter.utc_time.pass.cpp:0 FAIL\r\nstd/time/time.syn/formatter.utc_time.pass.cpp:1 FAIL\r\nstd/time/time.syn/formatter.year.pass.cpp:0 FAIL\r\nstd/time/time.syn/formatter.year.pass.cpp:1 FAIL\r\nstd/time/time.syn/formatter.year_month.pass.cpp:0 FAIL\r\nstd/time/time.syn/formatter.year_month.pass.cpp:1 FAIL\r\nstd/time/time.syn/formatter.year_month_day_last.pass.cpp:0 FAIL\r\nstd/time/time.syn/formatter.year_month_day_last.pass.cpp:1 FAIL\r\nstd/time/time.syn/formatter.year_month_weekday.pass.cpp:0 FAIL\r\nstd/time/time.syn/formatter.year_month_weekday.pass.cpp:1 FAIL\r\nstd/time/time.syn/formatter.zoned_time.pass.cpp:0 FAIL\r\nstd/time/time.syn/formatter.zoned_time.pass.cpp:1 FAIL\r\n\r\n# LLVM-74838: [libc++] std::regex match_prev_avail implementation is regressed\r\nstd/re/re.const/re.matchflag/match_prev_avail.pass.cpp FAIL\r\n\r\n# LLVM-90196: [libc++][format] Formatting range with m range-type is incorrect\r\nstd/utilities/format/format.range/format.range.formatter/format.functions.format.pass.cpp FAIL\r\nstd/utilities/format/format.range/format.range.formatter/format.functions.vformat.pass.cpp FAIL\r\nstd/utilities/format/format.range/format.range.fmtset/format.functions.format.pass.cpp FAIL\r\nstd/utilities/format/format.range/format.range.fmtset/format.functions.vformat.pass.cpp FAIL\r\n\r\n# LLVM-100506: [libc++][test] Precondition violation in rand.dist.uni.real/param_ctor.pass.cpp\r\nstd/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.real/param_ctor.pass.cpp FAIL\r\n\r\n# LLVM-122638: [libc++][test] re.regex.construct/bad_backref.pass.cpp assumes non-standard extension to extended regular expressions\r\nstd/re/re.regex/re.regex.construct/bad_backref.pass.cpp FAIL\r\n\r\n# LLVM-138375: [libc++][test] Make narrowing in nasty_char_traits::to_char_type more explicit\r\nstd/strings/basic.string/string.modifiers/string_append/initializer_list.pass.cpp:0 FAIL\r\nstd/strings/basic.string/string.modifiers/string_append/initializer_list.pass.cpp:1 FAIL\r\nstd/strings/basic.string/string.modifiers/string_assign/string.pass.cpp:0 FAIL\r\nstd/strings/basic.string/string.modifiers/string_assign/string.pass.cpp:1 FAIL\r\n\r\n# LLVM-158302: Clang 20 i686-pc-windows-msvc regression, silent bad codegen for std::current_exception()\r\n# SKIPPED because this is x86-specific.\r\nstd/language.support/support.exception/except.nested/assign.pass.cpp:2 SKIPPED\r\nstd/language.support/support.exception/except.nested/ctor_copy.pass.cpp:2 SKIPPED\r\nstd/language.support/support.exception/except.nested/ctor_default.pass.cpp:2 SKIPPED\r\n\r\n# LLVM-158341: Coroutines on arm64ec-pc-windows-msvc emit error LNK2001: unresolved external symbol #__NoopCoro_ResumeDestroy (EC Symbol)\r\n# SKIPPED because this is ARM64EC-specific.\r\nstd/language.support/support.coroutines/coroutine.handle/coroutine.handle.noop/noop_coroutine.pass.cpp:2 SKIPPED\r\n\r\n# LLVM-171438: [Clang] __builtin_common_type is overly permissive\r\n# These tests are improperly working around this Clang bug by detecting Clang and asserting buggy results,\r\n# but only libc++ with Clang is affected; MSVC's STL with Clang is unaffected.\r\nstd/concepts/concepts.compare/concept.equalitycomparable/equality_comparable_with.compile.pass.cpp:2 FAIL\r\nstd/language.support/cmp/cmp.concept/three_way_comparable_with.compile.pass.cpp:2 FAIL\r\n\r\n# LLVM-182390: [libc++][test] facet.num.get.members/get_long.pass.cpp uses std::to_string() without including <string>\r\nstd/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_long.pass.cpp FAIL\r\n\r\n# LLVM-182392: [libc++][test] vector/trivial_relocation.pass.cpp uses implementation-specific attribute [[clang::trivial_abi]]\r\nstd/containers/sequences/vector/trivial_relocation.pass.cpp:0 FAIL\r\nstd/containers/sequences/vector/trivial_relocation.pass.cpp:1 FAIL\r\n\r\n# LLVM-182397: [libc++][test] rand.dist.bern.negbin/eval.pass.cpp constructs with p == 1, which has undefined behavior\r\nstd/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.negbin/eval.pass.cpp FAIL\r\n\r\n# Non-Standard regex behavior.\r\n# \"It seems likely that the test is still non-conforming due to how libc++ handles the 'w' character class.\"\r\nstd/re/re.traits/lookup_classname.pass.cpp FAIL\r\n\r\n# These tests are extremely slow, taking over 23 minutes to execute (in debug mode, non-optimized).\r\n# They contain 10K^2 / 2 == 50M loops.\r\nstd/input.output/iostreams.base/ios.base/ios.base.storage/iword.pass.cpp SKIPPED\r\nstd/input.output/iostreams.base/ios.base/ios.base.storage/pword.pass.cpp SKIPPED\r\n\r\n# This test is passing non-BidirectionalIterators to std::prev.\r\n# LWG-3197 \"std::prev should not require BidirectionalIterator\" (New)\r\nstd/iterators/iterator.primitives/iterator.operations/prev.pass.cpp FAIL\r\n\r\n# Tests with undefined behavior under N4842 [basic.start.term]/6 (detached threads)\r\nstd/thread/futures/futures.task/futures.task.members/dtor.pass.cpp SKIPPED\r\nstd/thread/futures/futures.unique_future/wait_until.pass.cpp SKIPPED\r\nstd/thread/thread.jthread/detach.pass.cpp SKIPPED\r\n\r\n# Bogus test believes that copyability of array<T, 0> must be the same as array<T, 1>\r\nstd/containers/sequences/array/array.cons/implicit_copy.pass.cpp FAIL\r\n\r\n# libc++ hasn't implemented P0952R2, which changes the generate_canonical algorithm.\r\nstd/numerics/rand/rand.util/rand.util.canonical/generate_canonical.pass.cpp FAIL\r\n\r\n# Test expects __cpp_lib_chrono to have the old value 201611L for P0505R0; we define the C++20 value 201907L for P1466R3.\r\nstd/language.support/support.limits/support.limits.general/chrono.version.compile.pass.cpp FAIL\r\n\r\n# Test expects __cpp_lib_freestanding_algorithm to not be defined before C++26; we define it unconditionally.\r\n# Test expects __cpp_lib_shift to have the C++20 value 201806L for P0769R2; we define the C++23 value 202202L for P2440R1.\r\nstd/language.support/support.limits/support.limits.general/algorithm.version.compile.pass.cpp FAIL\r\n\r\n# Test expects __cpp_lib_print to have the old value 202207L for P2093R14; we define the C++23 value 202406L for P3235R3.\r\nstd/language.support/support.limits/support.limits.general/ostream.version.compile.pass.cpp FAIL\r\nstd/language.support/support.limits/support.limits.general/print.version.compile.pass.cpp FAIL\r\n\r\n# libc++ tests strengthened assignment operators (not compatible with P2165R4: \"Compatibility Between tuple, pair, And tuple-like Objects\")\r\nstd/utilities/tuple/tuple.tuple/tuple.assign/const_pair.pass.cpp FAIL\r\n\r\n# libc++ doesn't implement P2231R1 Add further constexpr support for variant\r\nstd/language.support/support.limits/support.limits.general/variant.version.compile.pass.cpp FAIL\r\n\r\n# libc++ has not implemented P2278R4: \"cbegin should always return a constant iterator\"\r\nstd/containers/views/views.span/span.cons/span.pass.cpp FAIL\r\nstd/containers/views/views.span/types.pass.cpp FAIL\r\nstd/ranges/range.access/begin.pass.cpp FAIL\r\nstd/ranges/range.access/data.pass.cpp FAIL\r\nstd/ranges/range.access/end.pass.cpp FAIL\r\nstd/ranges/range.access/rbegin.pass.cpp FAIL\r\nstd/ranges/range.access/rend.pass.cpp FAIL\r\n\r\n# libc++ has not implemented P2407R5: \"Freestanding Library: Partial Classes\"\r\nstd/language.support/support.limits/support.limits.general/array.version.compile.pass.cpp FAIL\r\nstd/language.support/support.limits/support.limits.general/optional.version.compile.pass.cpp FAIL\r\nstd/language.support/support.limits/support.limits.general/string_view.version.compile.pass.cpp FAIL\r\n\r\n# libc++ doesn't implement P2588R3 barrier's Phase Completion Guarantees\r\nstd/language.support/support.limits/support.limits.general/barrier.version.compile.pass.cpp FAIL\r\n\r\n# libc++ has not implemented P2833R2: \"Freestanding Library: inout expected span\"\r\nstd/language.support/support.limits/support.limits.general/expected.version.compile.pass.cpp FAIL\r\nstd/language.support/support.limits/support.limits.general/mdspan.version.compile.pass.cpp FAIL\r\n\r\n# libc++ has not implemented P2937R0: \"Freestanding Library: Remove strtok\"\r\nstd/language.support/support.limits/support.limits.general/cstring.version.compile.pass.cpp FAIL\r\n\r\n# libc++ has not implemented P3016R6: \"Resolve Inconsistencies In begin/end For valarray And Braced Initializer Lists\"\r\nstd/language.support/support.initlist/support.initlist.range/begin_end.pass.cpp FAIL\r\n\r\n# libc++ has not implemented P3323R1: \"Forbid atomic<cv T>, Specify atomic_ref<cv T>\"\r\nstd/atomics/atomics.ref/member_types.compile.pass.cpp FAIL\r\n\r\n# libc++ has not implemented P3503R3 \"Make Type-Erased Allocator Use In promise And packaged_task Consistent\"\r\nstd/thread/futures/futures.promise/uses_allocator.pass.cpp FAIL\r\nstd/thread/futures/futures.task/futures.task.members/ctor2.compile.pass.cpp FAIL\r\n\r\n# libc++ has not implemented P3612R1 \"Harmonize Proxy-Reference Operations\"\r\nstd/containers/sequences/vector.bool/reference.swap.pass.cpp FAIL\r\n\r\n# Various bogosity (LLVM-D141004)\r\nstd/utilities/utility/mem.res/mem.res.pool/mem.res.pool.ctor/ctor_does_not_allocate.pass.cpp FAIL\r\nstd/utilities/utility/mem.res/mem.res.pool/mem.res.pool.ctor/sync_with_default_resource.pass.cpp FAIL\r\nstd/utilities/utility/mem.res/mem.res.pool/mem.res.pool.ctor/unsync_with_default_resource.pass.cpp FAIL\r\nstd/utilities/utility/mem.res/mem.res.pool/mem.res.pool.mem/sync_allocate.pass.cpp FAIL\r\nstd/utilities/utility/mem.res/mem.res.pool/mem.res.pool.mem/sync_allocate_overaligned_request.pass.cpp FAIL\r\nstd/utilities/utility/mem.res/mem.res.pool/mem.res.pool.mem/sync_deallocate_matches_allocate.pass.cpp FAIL\r\nstd/utilities/utility/mem.res/mem.res.pool/mem.res.pool.mem/unsync_allocate.pass.cpp FAIL\r\nstd/utilities/utility/mem.res/mem.res.pool/mem.res.pool.mem/unsync_allocate_overaligned_request.pass.cpp FAIL\r\nstd/utilities/utility/mem.res/mem.res.pool/mem.res.pool.mem/unsync_deallocate_matches_allocate.pass.cpp FAIL\r\n\r\n# libc++ hasn't completely implemented P2255R2 \"Type Traits To Detect References Binding To Temporaries\"\r\nstd/utilities/meta/meta.rel/is_invocable_r.compile.pass.cpp FAIL\r\nstd/utilities/meta/meta.rel/is_invocable_r_v.compile.pass.cpp FAIL\r\n\r\n# libc++ is missing various Ranges DRs\r\nstd/language.support/support.limits/support.limits.general/memory.version.compile.pass.cpp FAIL\r\nstd/language.support/support.limits/support.limits.general/ranges.version.compile.pass.cpp FAIL\r\n\r\n# libc++ is missing various <format> DRs\r\nstd/language.support/support.limits/support.limits.general/format.version.compile.pass.cpp FAIL\r\n\r\n# libc++ doesn't implement LWG-2295 \"Locale name when the provided Facet is a nullptr\"\r\nstd/localization/locales/locale/locale.cons/name_construction.pass.cpp FAIL\r\n\r\n# libc++ doesn't implement LWG-2584 (LLVM-99976)\r\nstd/re/re.regex/re.regex.construct/bad_escape.pass.cpp FAIL\r\n\r\n# libc++ doesn't implement LWG-3187\r\nstd/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_piecewise_pair_evil.pass.cpp FAIL\r\n\r\n# libc++ doesn't implement LWG-3670\r\nstd/ranges/range.factories/range.iota.view/iterator/member_typedefs.compile.pass.cpp FAIL\r\n\r\n# libc++ doesn't implement LWG-4013\r\nstd/ranges/range.adaptors/range.lazy.split/range.lazy.split.outer.value/ctor.default.pass.cpp FAIL\r\nstd/ranges/range.adaptors/range.lazy.split/range.lazy.split.outer.value/ctor.iter.pass.cpp FAIL\r\n\r\n# libc++ doesn't implement LWG-4112\r\nstd/ranges/range.adaptors/range.join/range.join.iterator/arrow.pass.cpp FAIL\r\n\r\n# libc++ doesn't implement LWG-4266 \"`layout_stride::mapping` should treat empty mappings as exhaustive\"\r\nstd/containers/views/mdspan/layout_stride/is_exhaustive_corner_case.pass.cpp FAIL\r\nstd/containers/views/mdspan/layout_stride/properties.pass.cpp FAIL\r\n\r\n# libc++ doesn't implement LWG-4272 \"For `rank == 0`, `layout_stride` is atypically convertible\"\r\nstd/containers/views/mdspan/layout_left/ctor.layout_stride.pass.cpp FAIL\r\nstd/containers/views/mdspan/layout_right/ctor.layout_stride.pass.cpp FAIL\r\n\r\n# If any feature-test macro test is failing, this consolidated test will also fail.\r\nstd/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp FAIL\r\n\r\n\r\n# *** INTERACTIONS WITH MSVC THAT UPSTREAM LIKELY WON'T FIX ***\r\n# These tests set an allocator with a max_size() too small to default construct an unordered container\r\n# (due to our minimum bucket size).\r\nstd/containers/unord/unord.map/max_size.pass.cpp FAIL\r\nstd/containers/unord/unord.multimap/max_size.pass.cpp FAIL\r\nstd/containers/unord/unord.multiset/max_size.pass.cpp FAIL\r\nstd/containers/unord/unord.set/max_size.pass.cpp FAIL\r\n\r\n# Extreme compiler memory consumption.\r\nstd/utilities/tuple/tuple.tuple/tuple.apply/apply_large_arity.pass.cpp SKIPPED\r\nstd/utilities/tuple/tuple.tuple/tuple.cnstr/recursion_depth.pass.cpp SKIPPED\r\n\r\n# Our GitHub and MSVC-internal test harnesses would need special machinery to build the Standard Library Modules.\r\nstd/modules/std.compat.pass.cpp FAIL\r\nstd/modules/std.pass.cpp FAIL\r\n\r\n\r\n# *** ASAN FAILURES ***\r\n# Even with `allocator_may_return_null=1`, ASan kills oversized allocations instead of throwing `bad_alloc`.\r\n# (google/sanitizers#295)\r\nstd/language.support/support.dynamic/new.delete/new.delete.array/new.size_align_nothrow.except.pass.cpp:1 FAIL\r\nstd/language.support/support.dynamic/new.delete/new.delete.array/new.size_align.except.pass.cpp:1 FAIL\r\nstd/language.support/support.dynamic/new.delete/new.delete.array/new.size_align.pass.cpp:1 FAIL\r\nstd/language.support/support.dynamic/new.delete/new.delete.array/new.size_nothrow.except.pass.cpp:1 FAIL\r\nstd/language.support/support.dynamic/new.delete/new.delete.array/new.size.except.pass.cpp:1 FAIL\r\nstd/language.support/support.dynamic/new.delete/new.delete.array/new.size.pass.cpp:1 FAIL\r\nstd/language.support/support.dynamic/new.delete/new.delete.single/new.size_align_nothrow.except.pass.cpp:1 FAIL\r\nstd/language.support/support.dynamic/new.delete/new.delete.single/new.size_align.except.pass.cpp:1 FAIL\r\nstd/language.support/support.dynamic/new.delete/new.delete.single/new.size_align.pass.cpp:1 FAIL\r\nstd/language.support/support.dynamic/new.delete/new.delete.single/new.size_nothrow.except.pass.cpp:1 FAIL\r\nstd/language.support/support.dynamic/new.delete/new.delete.single/new.size.except.pass.cpp:1 FAIL\r\nstd/language.support/support.dynamic/new.delete/new.delete.single/new.size.pass.cpp:1 FAIL\r\nstd/strings/basic.string/string.capacity/max_size.pass.cpp:1 FAIL\r\n\r\n# Even with `allocator_may_return_null=1`, ASan doesn't call `new_handler` on allocation failure. (LLVM-15544)\r\nstd/language.support/support.dynamic/new.delete/new.delete.array/new.size_align_nothrow.pass.cpp:1 FAIL\r\nstd/language.support/support.dynamic/new.delete/new.delete.array/new.size_nothrow.pass.cpp:1 FAIL\r\nstd/language.support/support.dynamic/new.delete/new.delete.single/new.size_align_nothrow.pass.cpp:1 FAIL\r\nstd/language.support/support.dynamic/new.delete/new.delete.single/new.size_nothrow.pass.cpp:1 FAIL\r\n\r\n\r\n# *** MISSING STL FEATURES ***\r\n# Missing mbrtoc8 and c8rtomb\r\nstd/depr/depr.c.headers/uchar_h.compile.pass.cpp FAIL\r\nstd/strings/c.strings/cuchar.compile.pass.cpp FAIL\r\n\r\n# P0533R9 constexpr For <cmath> And <cstdlib>\r\nstd/language.support/support.limits/support.limits.general/cmath.version.compile.pass.cpp FAIL\r\nstd/language.support/support.limits/support.limits.general/cstdlib.version.compile.pass.cpp FAIL\r\n\r\n# P0543R3 Saturation Arithmetic\r\n# Add 'std-at-least-c++26' to tests/utils/stl/test/tests.py when beginning work on C++26.\r\nstd/numerics/numeric.ops/numeric.ops.sat/add_sat.compile.pass.cpp FAIL\r\nstd/numerics/numeric.ops/numeric.ops.sat/add_sat.pass.cpp FAIL\r\nstd/numerics/numeric.ops/numeric.ops.sat/div_sat.compile.pass.cpp FAIL\r\nstd/numerics/numeric.ops/numeric.ops.sat/div_sat.pass.cpp FAIL\r\nstd/numerics/numeric.ops/numeric.ops.sat/mul_sat.compile.pass.cpp FAIL\r\nstd/numerics/numeric.ops/numeric.ops.sat/mul_sat.pass.cpp FAIL\r\nstd/numerics/numeric.ops/numeric.ops.sat/saturate_cast.compile.pass.cpp FAIL\r\nstd/numerics/numeric.ops/numeric.ops.sat/saturate_cast.pass.cpp FAIL\r\nstd/numerics/numeric.ops/numeric.ops.sat/sub_sat.compile.pass.cpp FAIL\r\nstd/numerics/numeric.ops/numeric.ops.sat/sub_sat.pass.cpp FAIL\r\n\r\n# P1789R3 Library Support For Expansion Statements\r\n# Add 'std-at-least-c++26' to tests/utils/stl/test/tests.py when beginning work on C++26.\r\nstd/utilities/intseq/intseq.binding/structured_binding.pass.cpp FAIL\r\nstd/utilities/intseq/intseq.binding/tuple_interface.compile.pass.cpp FAIL\r\n\r\n# P2592R3 Hashing Support For chrono Value Classes\r\n# Add 'std-at-least-c++26' to tests/utils/stl/test/tests.py when beginning work on C++26.\r\nstd/time/time.hash/time.hash_enabled.pass.cpp FAIL\r\n\r\n# P2835R7 atomic_ref::address()\r\n# Add 'std-at-least-c++26' to tests/utils/stl/test/tests.py when beginning work on C++26.\r\nstd/atomics/atomics.ref/address.pass.cpp FAIL\r\n\r\n# P2944R3 Comparisons For reference_wrapper\r\n# Add 'std-at-least-c++26' to tests/utils/stl/test/tests.py when beginning work on C++26.\r\nstd/utilities/function.objects/refwrap/refwrap.comparisons/compare.three_way.refwrap.const_ref.pass.cpp FAIL\r\nstd/utilities/function.objects/refwrap/refwrap.comparisons/compare.three_way.refwrap.refwrap_const.pass.cpp FAIL\r\nstd/utilities/function.objects/refwrap/refwrap.comparisons/compare.three_way.refwrap.refwrap.pass.cpp FAIL\r\n\r\n# P2988R12 optional<T&>\r\n# Add 'std-at-least-c++26' to tests/utils/stl/test/tests.py when beginning work on C++26.\r\nstd/utilities/optional/optional.object/optional.object.ctor/ref_t.pass.cpp FAIL\r\n\r\n# P3044R2 basic_string::subview()\r\n# Add 'std-at-least-c++26' to tests/utils/stl/test/tests.py when beginning work on C++26.\r\nstd/strings/basic.string/string.ops/string_substr/subview.pass.cpp FAIL\r\nstd/strings/string.view/string.view.ops/subview.pass.cpp FAIL\r\n\r\n# P3060R3 views::indices\r\n# Add 'std-at-least-c++26' to tests/utils/stl/test/tests.py when beginning work on C++26.\r\nstd/ranges/range.factories/range.iota.view/indices.pass.cpp FAIL\r\n\r\n# P3168R2 std::optional Range Support\r\n# Add 'std-at-least-c++26' to tests/utils/stl/test/tests.py when beginning work on C++26.\r\nstd/utilities/optional/optional.iterator/begin.pass.cpp FAIL\r\nstd/utilities/optional/optional.iterator/borrowed_range.compile.pass.cpp FAIL\r\nstd/utilities/optional/optional.iterator/compare.pass.cpp FAIL\r\nstd/utilities/optional/optional.iterator/end.pass.cpp FAIL\r\nstd/utilities/optional/optional.iterator/iterator.pass.cpp FAIL\r\n\r\n\r\n# *** MISSING COMPILER FEATURES ***\r\n\r\n# None!\r\n\r\n\r\n# *** MISSING LWG ISSUE RESOLUTIONS ***\r\n# LWG-2532 \"Satisfying a promise at thread exit\" (Open)\r\nstd/thread/futures/futures.promise/set_exception_at_thread_exit.pass.cpp FAIL\r\nstd/thread/futures/futures.promise/set_lvalue_at_thread_exit.pass.cpp FAIL\r\nstd/thread/futures/futures.promise/set_rvalue_at_thread_exit.pass.cpp FAIL\r\nstd/thread/futures/futures.promise/set_value_at_thread_exit_const.pass.cpp FAIL\r\nstd/thread/futures/futures.promise/set_value_at_thread_exit_void.pass.cpp FAIL\r\nstd/thread/futures/futures.task/futures.task.members/make_ready_at_thread_exit.pass.cpp FAIL\r\n\r\n# LWG-3120 Unclear behavior of monotonic_buffer_resource::release()\r\nstd/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/release_reset_initial_status.pass.cpp FAIL\r\n\r\n\r\n# *** C1XX COMPILER BUGS ***\r\n# DevCom-1436243 VSO-1335743 constexpr new initialized array\r\nstd/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.modifiers/reset_self.pass.cpp:0 FAIL\r\nstd/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.modifiers/reset_self.pass.cpp:1 FAIL\r\nstd/utilities/smartptr/unique.ptr/unique.ptr.create/make_unique.array.pass.cpp:0 FAIL\r\nstd/utilities/smartptr/unique.ptr/unique.ptr.create/make_unique.array.pass.cpp:1 FAIL\r\n\r\n# DevCom-1626139 VSO-1456427 \"compile-time NaN comparison\"\r\nstd/iterators/predef.iterators/reverse.iterators/reverse.iter.cmp/three-way.pass.cpp:0 FAIL\r\nstd/iterators/predef.iterators/reverse.iterators/reverse.iter.cmp/three-way.pass.cpp:1 FAIL\r\nstd/library/description/conventions/expos.only.func/synth_three_way.pass.cpp:0 FAIL\r\nstd/library/description/conventions/expos.only.func/synth_three_way.pass.cpp:1 FAIL\r\nstd/utilities/function.objects/comparisons/compare_three_way.pass.cpp:0 FAIL\r\nstd/utilities/function.objects/comparisons/compare_three_way.pass.cpp:1 FAIL\r\nstd/utilities/tuple/tuple.tuple/tuple.rel/three_way.pass.cpp:0 FAIL\r\nstd/utilities/tuple/tuple.tuple/tuple.rel/three_way.pass.cpp:1 FAIL\r\nstd/utilities/utility/pairs/pairs.spec/three_way_comparison.pass.cpp:0 FAIL\r\nstd/utilities/utility/pairs/pairs.spec/three_way_comparison.pass.cpp:1 FAIL\r\nstd/utilities/variant/variant.relops/three_way.pass.cpp:0 FAIL\r\nstd/utilities/variant/variant.relops/three_way.pass.cpp:1 FAIL\r\n\r\n# VSO-2188243 constexpr ICE in C1XX adapt::to_prvalue\r\nstd/algorithms/robust_re_difference_type.compile.pass.cpp:0 FAIL\r\nstd/algorithms/robust_re_difference_type.compile.pass.cpp:1 FAIL\r\n\r\n# DevCom-10439137 VSO-1869865: Discarded id-expression causes unnecessary reading\r\nstd/containers/sequences/array/array.cons/initialization.pass.cpp:0 FAIL\r\nstd/containers/sequences/array/array.cons/initialization.pass.cpp:1 FAIL\r\n\r\n# DevCom-10456523 VSO-1880569: MSVC incorrectly raises constant evaluation failure in pointer comparison\r\nstd/algorithms/robust_against_adl.compile.pass.cpp:0 FAIL\r\nstd/algorithms/robust_against_adl.compile.pass.cpp:1 FAIL\r\n\r\n# VSO-1948221 x86chk ICE with constexpr type_info: Assertion failed: isIndirection()\r\nstd/language.support/support.rtti/type.info/type_info.equal.pass.cpp:0 FAIL\r\nstd/language.support/support.rtti/type.info/type_info.equal.pass.cpp:1 FAIL\r\n\r\n# VSO-2338829 constexpr error \"subtracting pointers to elements of different arrays\" in _String_const_iterator::_Verify_offset()\r\nstd/strings/basic.string/string.modifiers/string_erase/iter.pass.cpp:0 FAIL\r\nstd/strings/basic.string/string.modifiers/string_erase/iter.pass.cpp:1 FAIL\r\nstd/strings/basic.string/string.modifiers/string_erase/iter_iter.pass.cpp:0 FAIL\r\nstd/strings/basic.string/string.modifiers/string_erase/iter_iter.pass.cpp:1 FAIL\r\nstd/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp:0 FAIL\r\nstd/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp:1 FAIL\r\nstd/strings/basic.string/string.modifiers/string_insert/iter_size_char.pass.cpp:0 FAIL\r\nstd/strings/basic.string/string.modifiers/string_insert/iter_size_char.pass.cpp:1 FAIL\r\nstd/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp:0 FAIL\r\nstd/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp:1 FAIL\r\nstd/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp:0 FAIL\r\nstd/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp:1 FAIL\r\nstd/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp:0 FAIL\r\nstd/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp:1 FAIL\r\nstd/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp:0 FAIL\r\nstd/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp:1 FAIL\r\nstd/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp:0 FAIL\r\nstd/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp:1 FAIL\r\nstd/strings/basic.string/string.modifiers/string_replace/iter_iter_string_view.pass.cpp:0 FAIL\r\nstd/strings/basic.string/string.modifiers/string_replace/iter_iter_string_view.pass.cpp:1 FAIL\r\nstd/strings/strings.erasure/erase_if.pass.cpp:0 FAIL\r\nstd/strings/strings.erasure/erase_if.pass.cpp:1 FAIL\r\nstd/strings/strings.erasure/erase.pass.cpp:0 FAIL\r\nstd/strings/strings.erasure/erase.pass.cpp:1 FAIL\r\n\r\n# VSO-2338880 constexpr error in vector::iterator's _Compat() check when using views::transform\r\nstd/algorithms/alg.modifying.operations/alg.copy/ranges.copy_backward.pass.cpp:0 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.copy/ranges.copy_backward.pass.cpp:1 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.copy/ranges.copy_backward.segmented.pass.cpp:0 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.copy/ranges.copy_backward.segmented.pass.cpp:1 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.copy/ranges.copy_n.segmented.pass.cpp:0 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.copy/ranges.copy_n.segmented.pass.cpp:1 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.copy/ranges.copy.segmented.pass.cpp:0 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.copy/ranges.copy.segmented.pass.cpp:1 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.move/ranges.move_backward.segmented.pass.cpp:0 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.move/ranges.move_backward.segmented.pass.cpp:1 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.move/ranges.move.segmented.pass.cpp:0 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.move/ranges.move.segmented.pass.cpp:1 FAIL\r\n\r\n# VSO-2574451 constexpr error with designated initializers: failure was caused by a read of a variable outside its lifetime\r\nstd/ranges/range.adaptors/range.join.with/range.join.with.iterator/types.compile.pass.cpp:0 FAIL\r\nstd/ranges/range.adaptors/range.join.with/range.join.with.iterator/types.compile.pass.cpp:1 FAIL\r\nstd/ranges/range.adaptors/range.join.with/range.join.with.view/begin.pass.cpp:0 FAIL\r\nstd/ranges/range.adaptors/range.join.with/range.join.with.view/begin.pass.cpp:1 FAIL\r\n\r\n# VSO-2574465 constexpr error with a static_assert accessing a local variable: failure was caused by a read of a variable outside its lifetime\r\nstd/containers/views/mdspan/mdspan/index_operator.pass.cpp:0 FAIL\r\nstd/containers/views/mdspan/mdspan/index_operator.pass.cpp:1 FAIL\r\n\r\n# VSO-2574469 constexpr error in unique_ptr with a reference-to-function deleter: failure was caused by a read of an uninitialized symbol\r\nstd/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.ctor/pointer_deleter.pass.cpp:0 FAIL\r\nstd/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.ctor/pointer_deleter.pass.cpp:1 FAIL\r\n\r\n# VSO-2574473 constexpr error in ranges::join_with_view: failure was caused by unevaluable pointer value\r\nstd/ranges/range.adaptors/range.adjacent.transform/general.pass.cpp:0 FAIL\r\nstd/ranges/range.adaptors/range.adjacent.transform/general.pass.cpp:1 FAIL\r\nstd/ranges/range.adaptors/range.adjacent/general.pass.cpp:0 FAIL\r\nstd/ranges/range.adaptors/range.adjacent/general.pass.cpp:1 FAIL\r\nstd/ranges/range.adaptors/range.join.with/range.join.with.iterator/ctor.not_const.pass.cpp:0 FAIL\r\nstd/ranges/range.adaptors/range.join.with/range.join.with.iterator/ctor.not_const.pass.cpp:1 FAIL\r\n\r\n# VSO-2574489 constexpr ICE-on-valid with vector<bool>\r\nstd/algorithms/alg.modifying.operations/alg.copy/copy_n.pass.cpp:0 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.copy/copy_n.pass.cpp:1 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.move/move.pass.cpp:0 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.move/move.pass.cpp:1 FAIL\r\nstd/algorithms/alg.nonmodifying/alg.equal/equal.pass.cpp:0 FAIL\r\nstd/algorithms/alg.nonmodifying/alg.equal/equal.pass.cpp:1 FAIL\r\nstd/algorithms/alg.nonmodifying/alg.equal/ranges.equal.pass.cpp:0 FAIL\r\nstd/algorithms/alg.nonmodifying/alg.equal/ranges.equal.pass.cpp:1 FAIL\r\n\r\n# VSO-2742607 C1XX __reference_constructs_from_temporary mishandles a couple of cases\r\nstd/utilities/meta/meta.unary/meta.unary.prop/reference_constructs_from_temporary.pass.cpp:0 FAIL\r\nstd/utilities/meta/meta.unary/meta.unary.prop/reference_constructs_from_temporary.pass.cpp:1 FAIL\r\nstd/utilities/meta/meta.unary/meta.unary.prop/reference_converts_from_temporary.pass.cpp:0 FAIL\r\nstd/utilities/meta/meta.unary/meta.unary.prop/reference_converts_from_temporary.pass.cpp:1 FAIL\r\n\r\n# DevCom-10892055 VSO-2453093 ADL fails to consider the namespace associated with the base class under a specific scenario\r\nstd/ranges/range.adaptors/range.adaptor.object/range_adaptor_closure.pass.cpp:0 FAIL\r\nstd/ranges/range.adaptors/range.adaptor.object/range_adaptor_closure.pass.cpp:1 FAIL\r\n\r\n\r\n# *** CLANG COMPILER BUGS ***\r\n# LLVM-46207 Clang's tgmath.h interferes with the UCRT's tgmath.h\r\nstd/depr/depr.c.headers/tgmath_h.pass.cpp:2 FAIL\r\n\r\n\r\n# *** CLANG ISSUES, NOT YET ANALYZED ***\r\n# Not analyzed. Possibly C++20 equality operator rewrite issues.\r\nstd/utilities/expected/expected.expected/equality/equality.other_expected.pass.cpp:2 FAIL\r\nstd/utilities/expected/expected.void/equality/equality.other_expected.pass.cpp:2 FAIL\r\n\r\n\r\n# *** STL BUGS ***\r\n# GH-784 <type_traits>: aligned_storage has incorrect alignment defaults\r\nstd/utilities/meta/meta.trans/meta.trans.other/aligned_storage.pass.cpp FAIL\r\n\r\n# GH-1006 <algorithm>: debug checks for predicates are observable\r\nstd/algorithms/alg.sorting/alg.min.max/minmax_init_list_comp.pass.cpp FAIL\r\n\r\n# GH-1035 <forward_list>, <string>, <vector>: Debug mode STL causes terminate() to be called under low memory\r\nstd/containers/container.adaptors/priority.queue/priqueue.members/push_range.pass.cpp FAIL\r\nstd/containers/sequences/forwardlist/forwardlist.modifiers/assign_range.pass.cpp FAIL\r\nstd/containers/sequences/forwardlist/forwardlist.modifiers/insert_range_after.pass.cpp FAIL\r\nstd/containers/sequences/forwardlist/forwardlist.modifiers/prepend_range.pass.cpp FAIL\r\nstd/containers/sequences/vector.bool/construct_from_range.pass.cpp FAIL\r\nstd/containers/sequences/vector/vector.modifiers/append_range.pass.cpp FAIL\r\nstd/containers/sequences/vector/vector.modifiers/assign_range.pass.cpp FAIL\r\nstd/strings/basic.string/string.modifiers/string_append/append_range.pass.cpp FAIL\r\nstd/strings/basic.string/string.modifiers/string_assign/assign_range.pass.cpp FAIL\r\nstd/strings/basic.string/string.modifiers/string_insert/insert_range.pass.cpp FAIL\r\n\r\n# GH-1112 <locale>: the enum value of std::money_base is not correct\r\nstd/localization/locale.categories/category.monetary/locale.moneypunct/money_base.pass.cpp FAIL\r\n\r\n# GH-1113 <fstream>: basic_filebuf doesn't comply with setbuf(0,0) requirement in the standard\r\nstd/input.output/file.streams/fstreams/filebuf.virtuals/overflow.pass.cpp FAIL\r\nstd/input.output/file.streams/fstreams/filebuf.virtuals/underflow.pass.cpp FAIL\r\n\r\n# GH-1190 <future>: incorrectly used copy assignment instead of copy construction in set_value\r\nstd/thread/futures/futures.promise/set_value_const.pass.cpp FAIL\r\nstd/thread/futures/futures.promise/set_rvalue.pass.cpp FAIL\r\n\r\n# GH-1264 <locale>: wbuffer_convert does not implement seek\r\nstd/localization/locales/locale.convenience/conversions/conversions.buffer/seekoff.pass.cpp FAIL\r\n\r\n# GH-1275 <locale>: missing some locale names\r\n# We don't have the locale names libcxx wants specialized in platform_support.hpp\r\n# More bugs may be uncovered when the locale names are present.\r\n# move.pass.cpp can crash.\r\nstd/input.output/iostreams.base/ios/basic.ios.members/move.pass.cpp SKIPPED\r\nstd/localization/locale.categories/category.monetary/locale.moneypunct.byname/curr_symbol.pass.cpp FAIL\r\nstd/localization/locale.categories/category.monetary/locale.moneypunct.byname/decimal_point.pass.cpp FAIL\r\nstd/localization/locale.categories/category.monetary/locale.moneypunct.byname/neg_format.pass.cpp FAIL\r\nstd/localization/locale.categories/category.monetary/locale.moneypunct.byname/negative_sign.pass.cpp FAIL\r\nstd/localization/locale.categories/category.monetary/locale.moneypunct.byname/pos_format.pass.cpp FAIL\r\nstd/localization/locale.categories/category.monetary/locale.moneypunct.byname/thousands_sep.pass.cpp FAIL\r\nstd/localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep.pass.cpp FAIL\r\n\r\n# GH-1374: Spaceship CPO wording in [cmp.alg] needs an overhaul\r\n# (Technically an STL bug until the wording in the working draft is fixed to agree.)\r\nstd/language.support/cmp/cmp.alg/compare_partial_order_fallback.pass.cpp FAIL\r\nstd/language.support/cmp/cmp.alg/compare_strong_order_fallback.pass.cpp FAIL\r\nstd/language.support/cmp/cmp.alg/compare_weak_order_fallback.pass.cpp FAIL\r\nstd/language.support/cmp/cmp.alg/partial_order.pass.cpp FAIL\r\nstd/language.support/cmp/cmp.alg/strong_order.pass.cpp FAIL\r\nstd/language.support/cmp/cmp.alg/weak_order.pass.cpp FAIL\r\n\r\n# GH-4238: <chrono>: file_clock::to_utc() overflows for file_time<nanoseconds>\r\n# This test also has a bogus assumption about the file_time epoch, and file_time<nanoseconds> is doomed on Windows.\r\nstd/time/time.clock/time.clock.file/ostream.pass.cpp FAIL\r\n\r\n# GH-4248: <chrono>: format() %y mishandles negative year values\r\n# LLVM-74727: [libc++] Should formatting year{-99} with %C produce \"-1\" or \"-01\"?\r\nstd/time/time.syn/formatter.year.pass.cpp:2 FAIL\r\n\r\n# GH-4268: <sstream>, <syncstream>: Buffer types assume that allocated pointers are not modified by users\r\nstd/input.output/string.streams/stringbuf/stringbuf.members/str.pass.cpp FAIL\r\nstd/input.output/string.streams/stringbuf/stringbuf.members/view.pass.cpp FAIL\r\nstd/input.output/syncstream/syncbuf/syncstream.syncbuf.cons/dtor.pass.cpp FAIL\r\nstd/input.output/syncstream/syncbuf/syncstream.syncbuf.members/emit.pass.cpp FAIL\r\n\r\n# GH-4273: <ranges>: lazy_split_view should use _Non_propagating_cache instead of _Defaultabox\r\nstd/ranges/range.adaptors/range.lazy.split/ctor.copy_move.pass.cpp FAIL\r\nstd/ranges/range.adaptors/range.lazy.split/range.lazy.split.inner/iter_swap.pass.cpp FAIL\r\n\r\n# GH-5393: <regex>: What names can and should regex_traits::lookup_collatename() recognize?\r\nstd/re/re.alg/re.alg.match/awk.pass.cpp FAIL\r\nstd/re/re.alg/re.alg.match/basic.pass.cpp FAIL\r\nstd/re/re.alg/re.alg.match/ecma.pass.cpp FAIL\r\nstd/re/re.alg/re.alg.match/extended.pass.cpp FAIL\r\nstd/re/re.alg/re.alg.search/awk.pass.cpp FAIL\r\nstd/re/re.alg/re.alg.search/basic.pass.cpp FAIL\r\nstd/re/re.alg/re.alg.search/ecma.pass.cpp FAIL\r\nstd/re/re.alg/re.alg.search/extended.pass.cpp FAIL\r\nstd/re/re.traits/lookup_collatename.pass.cpp FAIL\r\n\r\n# GH-6128 <xloctime>: do_get_monthname and do_get_weekday do not set eofbit in some cases, but libcxx tests expect them to do\r\nstd/localization/locale.categories/category.time/locale.time.get.byname/get_monthname.pass.cpp FAIL\r\nstd/localization/locale.categories/category.time/locale.time.get.byname/get_monthname_wide.pass.cpp FAIL\r\nstd/localization/locale.categories/category.time/locale.time.get.byname/get_weekday.pass.cpp FAIL\r\nstd/localization/locale.categories/category.time/locale.time.get.byname/get_weekday_wide.pass.cpp FAIL\r\nstd/localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_monthname.pass.cpp FAIL\r\nstd/localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_monthname_wide.pass.cpp FAIL\r\nstd/localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_weekday.pass.cpp FAIL\r\nstd/localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_weekday_wide.pass.cpp FAIL\r\n\r\n# GH-6129 <xloctime>: time_get::do_get uses the wrong format for %c and %x\r\n# GH-6130 <xloctime>: time_get::do_get doesn't parse a literal %\r\nstd/localization/locale.categories/category.time/locale.time.get.byname/get_one.pass.cpp FAIL\r\nstd/localization/locale.categories/category.time/locale.time.get.byname/get_one_wide.pass.cpp FAIL\r\nstd/localization/locale.categories/category.time/locale.time.get/locale.time.get.members/get_one.pass.cpp FAIL\r\n\r\n# GH-6134 <xloctime>: time_put::do_put does not match strftime for the %c and %r specifiers in the \"C\" locale\r\nstd/localization/locale.categories/category.time/locale.time.put/locale.time.put.members/put2.pass.cpp FAIL\r\n\r\n# GH-6135 <xloctime>: time_put_byname doesn't encode the output in UTF-8 even if the locale name contains \".UTF-8\"\r\nstd/localization/locale.categories/category.time/locale.time.put.byname/put1.pass.cpp FAIL\r\n\r\n\r\n# *** VCRUNTIME BUGS ***\r\n\r\n# None!\r\n\r\n\r\n# *** CRT BUGS ***\r\n# We're permanently missing aligned_alloc().\r\nstd/depr/depr.c.headers/stdlib_h.aligned_alloc.compile.pass.cpp FAIL\r\nstd/language.support/support.runtime/cstdlib.aligned_alloc.compile.pass.cpp FAIL\r\n\r\n# ArchivedOS-12440914 \"_Exit allows cleanup in other DLLs\"\r\nstd/thread/thread.threads/thread.thread.class/thread.thread.assign/move2.pass.cpp SKIPPED\r\nstd/thread/thread.threads/thread.thread.class/thread.thread.member/join.pass.cpp SKIPPED\r\n\r\n# OS-29877133 \"LDBL_DECIMAL_DIG missing from <float.h>\"\r\nstd/depr/depr.c.headers/float_h.compile.pass.cpp:0 FAIL\r\nstd/depr/depr.c.headers/float_h.compile.pass.cpp:1 FAIL\r\nstd/language.support/support.limits/c.limits/cfloat.pass.cpp:0 FAIL\r\nstd/language.support/support.limits/c.limits/cfloat.pass.cpp:1 FAIL\r\n\r\n# DevCom-10299797 VSO-1760401 \"max_align_t is not provided by stddef.h\"\r\nstd/depr/depr.c.headers/stddef_h.compile.pass.cpp:0 FAIL\r\nstd/depr/depr.c.headers/stddef_h.compile.pass.cpp:1 FAIL\r\n\r\n\r\n# *** LIKELY BOGUS TESTS ***\r\n\r\n# The test for `__cpp_lib_is_implicit_lifetime` is guarded by `__has_builtin(__builtin_is_implicit_lifetime)`\r\n# which MSVC doesn't understand. This is generated by: libcxx/utils/generate_feature_test_macro_components.py\r\nstd/language.support/support.limits/support.limits.general/type_traits.version.compile.pass.cpp:0 FAIL\r\nstd/language.support/support.limits/support.limits.general/type_traits.version.compile.pass.cpp:1 FAIL\r\n\r\n# Test bug after LWG-2899 \"is_(nothrow_)move_constructible and tuple, optional and unique_ptr\" was accepted.\r\nstd/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.asgn/move_convert.pass.cpp FAIL\r\nstd/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.asgn/move_convert.runtime.pass.cpp FAIL\r\nstd/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.asgn/move_convert.single.pass.cpp FAIL\r\nstd/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.asgn/move.pass.cpp FAIL\r\n\r\n# `ALLOW_RETRIES` comments indicate tests with timing assumptions\r\nstd/thread/futures/futures.async/async.pass.cpp SKIPPED\r\nstd/thread/futures/futures.unique_future/wait_for.pass.cpp SKIPPED\r\nstd/thread/thread.condition/thread.condition.condvarany/notify_one.pass.cpp SKIPPED\r\nstd/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_try_to_lock.pass.cpp SKIPPED\r\n\r\n# Not analyzed, likely bogus tests. Appears to be timing assumptions.\r\nstd/thread/futures/futures.shared_future/get.pass.cpp SKIPPED\r\nstd/thread/futures/futures.shared_future/wait.pass.cpp SKIPPED\r\nstd/thread/futures/futures.shared_future/wait_for.pass.cpp SKIPPED\r\nstd/thread/futures/futures.shared_future/wait_until.pass.cpp SKIPPED\r\nstd/thread/futures/futures.unique_future/get.pass.cpp SKIPPED\r\nstd/thread/futures/futures.unique_future/wait.pass.cpp SKIPPED\r\nstd/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_duration.pass.cpp SKIPPED\r\nstd/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp SKIPPED\r\nstd/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex.pass.cpp SKIPPED\r\nstd/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/lock.pass.cpp SKIPPED\r\nstd/thread/thread.threads/thread.thread.class/thread.thread.destr/dtor.pass.cpp SKIPPED\r\nstd/thread/thread.threads/thread.thread.this/sleep_until.pass.cpp SKIPPED\r\n\r\n# Not analyzed, likely bogus tests. Appears to be timing assumptions.\r\n# These tests have failed in practice, see GH-5733.\r\nstd/thread/thread.semaphore/timed.pass.cpp SKIPPED\r\n\r\n# \"This is technically flaky\" comments indicate tests with timing assumptions.\r\n# These tests have failed in practice, see VSO-2321213, VSO-2416940, and GH-5899.\r\nstd/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_for.pass.cpp SKIPPED\r\nstd/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_for.pass.cpp SKIPPED\r\nstd/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_until.pass.cpp SKIPPED\r\nstd/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until.pass.cpp SKIPPED\r\nstd/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_for.pass.cpp SKIPPED\r\nstd/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_until.pass.cpp SKIPPED\r\nstd/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_for.pass.cpp SKIPPED\r\nstd/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_until.pass.cpp SKIPPED\r\n\r\n# Not analyzed, likely bogus tests. Various assertions, probably POSIX assumptions.\r\nstd/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code_const_char_pointer.pass.cpp FAIL\r\nstd/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code_string.pass.cpp FAIL\r\nstd/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_error_code.pass.cpp FAIL\r\nstd/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category_const_char_pointer.pass.cpp FAIL\r\nstd/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category_string.pass.cpp FAIL\r\nstd/diagnostics/syserr/syserr.syserr/syserr.syserr.members/ctor_int_error_category.pass.cpp FAIL\r\n\r\n# Sensitive to implementation details. Assertion failed: test_alloc_base::count == expected_num_allocs\r\nstd/containers/container.requirements/container.requirements.general/allocator_move.pass.cpp FAIL\r\n\r\n# Tests emit warning C4244: 'argument': conversion from 'T' to 'const std::complex<double>::_Ty', possible loss of data\r\nstd/numerics/complex.number/cmplx.over/conj.pass.cpp:0 FAIL\r\nstd/numerics/complex.number/cmplx.over/conj.pass.cpp:1 FAIL\r\nstd/numerics/complex.number/cmplx.over/pow.pass.cpp:0 FAIL\r\nstd/numerics/complex.number/cmplx.over/pow.pass.cpp:1 FAIL\r\nstd/numerics/complex.number/cmplx.over/proj.pass.cpp:0 FAIL\r\nstd/numerics/complex.number/cmplx.over/proj.pass.cpp:1 FAIL\r\n\r\n# Assertion failed: c == NaN || c == non_zero_nan\r\n# Testing input values outside the range of [complex.value.ops]/9\r\n# libc++ handles those input values differently\r\nstd/numerics/complex.number/complex.value.ops/polar.pass.cpp FAIL\r\n\r\n# Assertion failed: (std::lerp(T(2.3), T(2.3), inf) == T(2.3))\r\n# Asserts `(std::lerp(T(2.3), T(2.3), inf) == T(2.3))` and `std::isnan(std::lerp(T( 0), T( 0), inf))`\r\n# They shouldn't behave differently. Both of them should probably return NaN.\r\nstd/numerics/c.math/lerp.pass.cpp FAIL\r\n\r\n# Bogus test passes a class type as the second argument to std::advance\r\nstd/iterators/iterator.primitives/iterator.operations/robust_against_adl.pass.cpp FAIL\r\n\r\n# Non-Standard assumption that std::filesystem::file_time_type::duration::period is std::nano\r\nstd/input.output/filesystems/fs.filesystem.synopsis/file_time_type_resolution.compile.pass.cpp FAIL\r\n\r\n# libc++ requires bind_front to be SFINAE-friendly, although the Standard uses \"Mandates:\" for constructibility.\r\nstd/utilities/function.objects/func.bind_front/bind_front.pass.cpp FAIL\r\n\r\n# libc++ chose option A for [time.clock.file.members], and we chose option B.\r\nstd/time/time.clock/time.clock.file/to_from_sys.pass.cpp FAIL\r\n\r\n# libc++'s filesystem::path::iterator models bidirectional_iterator, which is not guaranteed by the Standard\r\nstd/input.output/filesystems/class.path/path.itr/iterator.pass.cpp FAIL\r\nstd/input.output/filesystems/class.path/range_concept_conformance.compile.pass.cpp FAIL\r\n\r\n# MSVC's STL and libc++ speculatively implement LWG-2227 (not yet resolved) in different ways.\r\n# static_assert(!std::is_nothrow_move_constructible_v<C>) with C = std::flat_(multi)map<int, int, ThrowingMoveComp>\r\nstd/containers/container.adaptors/flat.map/flat.map.cons/move_noexcept.pass.cpp FAIL\r\nstd/containers/container.adaptors/flat.multimap/flat.multimap.cons/move_noexcept.pass.cpp FAIL\r\n\r\n# libc++ speculatively implemented an old proposed resolution for LWG-3645.\r\n# This test is bogus according to the wording that was ultimately accepted for C++23.\r\nstd/strings/basic.string/string.capacity/resize_and_overwrite.pass.cpp FAIL\r\n\r\n# libc++ speculatively implements the proposed resolution for LWG-4058.\r\nstd/iterators/iterator.requirements/iterator.concepts/iterator.concept.random.access/contiguous_iterator.compile.pass.cpp FAIL\r\nstd/utilities/memory/pointer.conversion/to_address_without_pointer_traits.pass.cpp FAIL\r\n\r\n# We disagree about whether various chrono types should be optimized, and the test is clearly wrong about vector<bool>::reference.\r\nstd/utilities/format/format.formatter/format.formatter.locking/enable_nonlocking_formatter_optimization.compile.pass.cpp FAIL\r\n\r\n# We disagree on the syntax flags set by the default basic_regex constructor: we set 0, libc++ sets ECMAScript.\r\n# Relates to LWG-3604.\r\nstd/re/re.regex/re.regex.construct/default.pass.cpp FAIL\r\nstd/re/re.regex/re.regex.nonmemb/re.regex.nmswap/swap.pass.cpp FAIL\r\nstd/re/re.regex/re.regex.swap/swap.pass.cpp FAIL\r\n\r\n# Test emits a Clang -Wself-move warning, so it should avoid the self-move or suppress the warning.\r\nstd/containers/sequences/vector/addressof.compile.pass.cpp:2 FAIL\r\nstd/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/move_assign.pass.cpp:2 FAIL\r\nstd/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_assign.pass.cpp:2 FAIL\r\n\r\n# throwing_allocator appears to be totally non-Standard.\r\nstd/containers/sequences/vector.bool/ctor_exceptions.pass.cpp FAIL\r\n\r\n# x64 truncation warnings caused by allocators.\r\nstd/containers/sequences/vector/vector.capacity/reserve_exceptions.pass.cpp:0 SKIPPED\r\nstd/containers/sequences/vector/vector.capacity/reserve_exceptions.pass.cpp:1 SKIPPED\r\nstd/containers/sequences/vector/vector.capacity/resize_size_exceptions.pass.cpp:0 SKIPPED\r\nstd/containers/sequences/vector/vector.capacity/resize_size_exceptions.pass.cpp:1 SKIPPED\r\nstd/containers/sequences/vector/vector.capacity/resize_size_value_exceptions.pass.cpp:0 SKIPPED\r\nstd/containers/sequences/vector/vector.capacity/resize_size_value_exceptions.pass.cpp:1 SKIPPED\r\n\r\n# Instantiating istreambuf_iterator requires _Traits to be complete.\r\n# However, when only <iterator> is included, char_traits is merely forward-declared in our implementation.\r\n# The definition of char_traits isn't required to be provided by <iterator>, so this test appears to be bogus.\r\n# error: incomplete type 'std::char_traits<char>' named in nested name specifier\r\nstd/iterators/iterator.requirements/iterator.assoc.types/readable.traits/indirectly_readable_traits.compile.pass.cpp FAIL\r\n\r\n# Not analyzed, likely bogus test. constexpr fails with \"vector iterators incompatible\".\r\nstd/ranges/range.adaptors/range.join.with/range.join.with.iterator/ctor.default.pass.cpp FAIL\r\n\r\n# Problems in this test:\r\n# - Clang does not trap on ARM64, but MSVC does.\r\n# - The test inspects `__x86_64__` and `__i386__`, which MSVC doesn't define.\r\n# - The __x86_64__ is defined on ARM64EC, but it is expected to behave like ARM64\r\n# :2 SKIPPED because this passes for x64/x86/ARM64 and fails for ARM64EC.\r\nstd/language.support/support.limits/limits/numeric.limits.members/traps.pass.cpp:0 FAIL\r\nstd/language.support/support.limits/limits/numeric.limits.members/traps.pass.cpp:1 FAIL\r\nstd/language.support/support.limits/limits/numeric.limits.members/traps.pass.cpp:2 SKIPPED\r\n\r\n# Non-Standard assumption that current_zone() is affected by the TZ environment variable\r\nstd/time/time.zone/time.zone.db/time.zone.db.access/current_zone.pass.cpp FAIL\r\nstd/time/time.zone/time.zone.db/time.zone.db.tzdb/current_zone.pass.cpp FAIL\r\n\r\n# LWG-4285 \"time_get::do_get_date is problematic even after LWG-461\" (Open)\r\nstd/localization/locale.categories/category.time/locale.time.get.byname/get_date.pass.cpp FAIL\r\nstd/localization/locale.categories/category.time/locale.time.get.byname/get_date_wide.pass.cpp FAIL\r\n\r\n\r\n# *** LIKELY STL BUGS ***\r\n# Not analyzed, likely STL bugs. Various assertions.\r\nstd/numerics/complex.number/complex.ops/complex_divide_complex.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.ops/complex_times_complex.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.ops/scalar_divide_complex.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.transcendentals/acos.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.transcendentals/acosh.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.transcendentals/asin.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.transcendentals/asinh.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.transcendentals/atanh.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.transcendentals/cos.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.transcendentals/cosh.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.transcendentals/log10.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.transcendentals/pow_complex_complex.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.transcendentals/pow_complex_scalar.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.transcendentals/pow_scalar_complex.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.transcendentals/sin.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.transcendentals/sinh.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.transcendentals/tanh.pass.cpp FAIL\r\nstd/numerics/complex.number/complex.value.ops/norm.pass.cpp FAIL\r\n\r\n# Not analyzed, likely STL bugs. Many various assertions.\r\nstd/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_en_US.pass.cpp FAIL\r\nstd/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR.pass.cpp FAIL\r\nstd/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_ru_RU.pass.cpp FAIL\r\nstd/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_string_en_US.pass.cpp FAIL\r\nstd/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_en_US.pass.cpp FAIL\r\nstd/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_fr_FR.pass.cpp FAIL\r\nstd/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_ru_RU.pass.cpp FAIL\r\nstd/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_zh_CN.pass.cpp FAIL\r\nstd/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_string_en_US.pass.cpp FAIL\r\nstd/localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/decimal_point.pass.cpp FAIL\r\nstd/localization/locale.categories/category.monetary/locale.moneypunct/locale.moneypunct.members/thousands_sep.pass.cpp FAIL\r\nstd/localization/locale.stdcvt/codecvt_utf16_in.pass.cpp FAIL\r\nstd/localization/locale.stdcvt/codecvt_utf16_length.pass.cpp FAIL\r\nstd/localization/locale.stdcvt/codecvt_utf16_max_length.pass.cpp FAIL\r\nstd/localization/locale.stdcvt/codecvt_utf16_out.pass.cpp FAIL\r\nstd/localization/locale.stdcvt/codecvt_utf16.pass.cpp FAIL\r\nstd/localization/locale.stdcvt/codecvt_utf8_in.pass.cpp FAIL\r\nstd/localization/locale.stdcvt/codecvt_utf8_length.pass.cpp FAIL\r\nstd/localization/locale.stdcvt/codecvt_utf8_max_length.pass.cpp FAIL\r\nstd/localization/locale.stdcvt/codecvt_utf8_out.pass.cpp FAIL\r\nstd/localization/locale.stdcvt/codecvt_utf8_utf16_in.pass.cpp FAIL\r\nstd/localization/locale.stdcvt/codecvt_utf8_utf16_length.pass.cpp FAIL\r\nstd/localization/locale.stdcvt/codecvt_utf8_utf16_max_length.pass.cpp FAIL\r\nstd/localization/locale.stdcvt/codecvt_utf8_utf16_out.pass.cpp FAIL\r\nstd/localization/locale.stdcvt/codecvt_utf8.pass.cpp FAIL\r\nstd/localization/locales/locale.convenience/conversions/conversions.buffer/overflow.pass.cpp FAIL\r\nstd/localization/locales/locale.convenience/conversions/conversions.buffer/pbackfail.pass.cpp FAIL\r\nstd/localization/locales/locale.convenience/conversions/conversions.buffer/underflow.pass.cpp FAIL\r\nstd/localization/locales/locale.convenience/conversions/conversions.string/ctor_err_string.pass.cpp FAIL\r\n\r\n# Not analyzed, likely STL bugs. Various assertions.\r\nstd/input.output/iostream.format/ext.manip/get_money.pass.cpp FAIL\r\nstd/input.output/iostream.format/ext.manip/put_money.pass.cpp FAIL\r\nstd/input.output/iostreams.base/ios/basic.ios.members/copyfmt.pass.cpp FAIL\r\n\r\n# Possible STL bugs in pair and tuple.\r\nstd/utilities/tuple/tuple.tuple/tuple.cnstr/PR23256_constrain_UTypes_ctor.pass.cpp:0 FAIL\r\nstd/utilities/tuple/tuple.tuple/tuple.cnstr/PR23256_constrain_UTypes_ctor.pass.cpp:1 FAIL\r\nstd/utilities/tuple/tuple.tuple/tuple.cnstr/PR31384.pass.cpp:0 FAIL\r\nstd/utilities/tuple/tuple.tuple/tuple.cnstr/PR31384.pass.cpp:1 FAIL\r\n\r\n# Bugs/questionable choices in codecvt<char(16|32)_t, char, mbstate_t>, which we probably will not fix since\r\n# (1) they are deprecated, and (2) we don't want to break existing users.\r\nstd/localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char16_t_max_length.pass.cpp FAIL\r\nstd/localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char16_t_unshift.pass.cpp FAIL\r\nstd/localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char32_t_encoding.pass.cpp FAIL\r\nstd/localization/locale.categories/category.ctype/locale.codecvt/locale.codecvt.members/char32_t_max_length.pass.cpp FAIL\r\n\r\n# Implementation divergence, see LWG-3856 \"Unclear which conversion specifiers are valid for each chrono type\".\r\n# For %d, %e, and %j with month_day_last, libc++ thinks they're invalid, while MSVC's STL thinks they're valid.\r\nstd/time/time.syn/formatter.month_day_last.pass.cpp FAIL\r\n\r\n# Our monotonic_buffer_resource takes \"user\" space for metadata, which it probably should not do.\r\nstd/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/allocate_with_initial_size.pass.cpp FAIL\r\n\r\n# Looks like we don't handle const value_types as required by N5032 [fs.path.req]/2.2:\r\n# \"the qualified-id iterator_traits<decay_t<Source>>::value_type is valid and denotes a possibly const encoded character type\"\r\nstd/input.output/filesystems/class.path/path.member/path.append.pass.cpp FAIL\r\nstd/input.output/filesystems/class.path/path.member/path.assign/source.pass.cpp FAIL\r\nstd/input.output/filesystems/class.path/path.member/path.concat.pass.cpp FAIL\r\nstd/input.output/filesystems/class.path/path.member/path.construct/source.pass.cpp FAIL\r\n\r\n\r\n# *** NOT YET ANALYZED ***\r\n# Not analyzed. Clang instantiates BoomOnAnything during template argument substitution.\r\nstd/utilities/variant/variant.variant/variant.ctor/T.pass.cpp:2 FAIL\r\n\r\n# Not analyzed. MSVC emits \"warning C4310: cast truncates constant value\" for char(0xc3).\r\nstd/input.output/filesystems/class.path/path.member/path.charconv.pass.cpp:0 FAIL\r\nstd/input.output/filesystems/class.path/path.member/path.charconv.pass.cpp:1 FAIL\r\n\r\n# Not analyzed. Clang is attempting to default construct cpp17_input_iterator<int *>.\r\nstd/iterators/predef.iterators/move.iterators/move.iterator/iterator_concept_conformance.compile.pass.cpp:2 FAIL\r\n\r\n# Not analyzed. Asserting about alloc_count.\r\nstd/thread/futures/futures.promise/alloc_ctor.pass.cpp FAIL\r\nstd/thread/futures/futures.promise/move_assign.pass.cpp FAIL\r\nstd/thread/futures/futures.promise/move_ctor.pass.cpp FAIL\r\nstd/thread/futures/futures.promise/swap.pass.cpp FAIL\r\nstd/thread/futures/futures.shared_future/dtor.pass.cpp FAIL\r\nstd/thread/futures/futures.unique_future/dtor.pass.cpp FAIL\r\n\r\n# Not analyzed. Expects implicit deduction guides to SFINAE away when allocators are passed where comparators should be.\r\nstd/containers/associative/map/map.cons/deduct.pass.cpp FAIL\r\nstd/containers/associative/multimap/multimap.cons/deduct.pass.cpp FAIL\r\nstd/containers/container.adaptors/priority.queue/priqueue.cons/deduct.pass.cpp FAIL\r\nstd/containers/unord/unord.map/unord.map.cnstr/deduct.pass.cpp FAIL\r\nstd/containers/unord/unord.multimap/unord.multimap.cnstr/deduct.pass.cpp FAIL\r\n\r\n# Not analyzed. Possibly testing nonstandard deduction guides involving pair<const K, V> and pair<const K, const V>.\r\nstd/containers/associative/map/map.cons/deduct_const.pass.cpp FAIL\r\nstd/containers/associative/multimap/multimap.cons/deduct_const.pass.cpp FAIL\r\nstd/containers/unord/unord.map/unord.map.cnstr/deduct_const.pass.cpp FAIL\r\nstd/containers/unord/unord.multimap/unord.multimap.cnstr/deduct_const.pass.cpp FAIL\r\n\r\n# Not analyzed. Possible MSVC compiler bug, as Clang is unaffected.\r\nstd/utilities/tuple/tuple.tuple/tuple.cnstr/deduct.pass.cpp:0 FAIL\r\nstd/utilities/tuple/tuple.tuple/tuple.cnstr/deduct.pass.cpp:1 FAIL\r\n\r\n# Not analyzed. Frequent timeouts\r\nstd/containers/sequences/deque/deque.modifiers/insert_iter_iter.pass.cpp SKIPPED\r\n\r\n# Not analyzed. Seems to force a sign conversion error?\r\nstd/iterators/iterator.primitives/iterator.operations/advance.pass.cpp SKIPPED\r\n\r\n# Not analyzed. Maybe Clang over-eagerly instantiating noexcept-specifier?\r\nstd/utilities/memory/unique.ptr/iterator_concept_conformance.compile.pass.cpp:2 SKIPPED\r\n\r\n# Not analyzed. Runs forever\r\nstd/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp SKIPPED\r\n\r\n# Not analyzed. This test seemingly fails for ARM64 because MSVC STL considers `tinyness_before` to be\r\n# always `false` even for ARM64, but libc++ considers it to be `true` for floating-point types on ARM64.\r\n# I don't know which is right.\r\nstd/language.support/support.limits/limits/numeric.limits.members/tinyness_before.pass.cpp SKIPPED\r\n\r\n# Not analyzed. x64-specific truncation warnings.\r\nstd/algorithms/alg.modifying.operations/alg.fill/fill_n.pass.cpp:0 SKIPPED\r\nstd/algorithms/alg.modifying.operations/alg.fill/fill_n.pass.cpp:1 SKIPPED\r\nstd/algorithms/alg.modifying.operations/alg.random.shuffle/ranges_shuffle.pass.cpp:0 SKIPPED\r\nstd/algorithms/alg.modifying.operations/alg.random.shuffle/ranges_shuffle.pass.cpp:1 SKIPPED\r\nstd/containers/associative/map/map.access/iterator.pass.cpp:0 SKIPPED\r\nstd/containers/associative/map/map.access/iterator.pass.cpp:1 SKIPPED\r\nstd/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.-/sentinel.pass.cpp:0 SKIPPED\r\nstd/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.-/sentinel.pass.cpp:1 SKIPPED\r\n\r\n# Not analyzed. the test fails on x86 but passes on x64\r\n# warning C4389: '==': signed/unsigned mismatch\r\nstd/algorithms/alg.modifying.operations/alg.unique/ranges_unique.pass.cpp:0 SKIPPED\r\nstd/algorithms/alg.modifying.operations/alg.unique/ranges_unique.pass.cpp:1 SKIPPED\r\n\r\n# Not analyzed. These tests are marked `XFAIL: msvc`, citing DevCom-1660844.\r\nstd/localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_long_double.hex.pass.cpp SKIPPED\r\nstd/localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_double.hex.pass.cpp SKIPPED\r\n\r\n# Not analyzed. Failing assert(swaps <= expected).\r\nstd/algorithms/alg.modifying.operations/alg.rotate/ranges_rotate.pass.cpp FAIL\r\n\r\n# Not analyzed. Assertion failed: numberOfComp <= static_cast<int>(in.size() - 1)\r\nstd/algorithms/alg.sorting/alg.merge/ranges_inplace_merge.pass.cpp FAIL\r\n\r\n# Not analyzed. error C2397: conversion from 'const _In' to '_In' requires a narrowing conversion\r\nstd/algorithms/algorithms.results/in_found_result.pass.cpp:0 FAIL\r\nstd/algorithms/algorithms.results/in_found_result.pass.cpp:1 FAIL\r\n\r\n# Not analyzed. error C2397: conversion from 'const _Ty' to '_Ty' requires a narrowing conversion\r\nstd/algorithms/algorithms.results/min_max_result.pass.cpp:0 FAIL\r\nstd/algorithms/algorithms.results/min_max_result.pass.cpp:1 FAIL\r\n\r\n# Not analyzed.\r\nstd/algorithms/robust_against_proxy_iterators_lifetime_bugs.pass.cpp FAIL\r\n\r\n# Not analyzed. Failing assert(arr[0].moves() == 1 && arr[1].moves() == 3).\r\nstd/iterators/iterator.requirements/iterator.cust/iterator.cust.swap/iter_swap.pass.cpp FAIL\r\n\r\n# Not analyzed. error C2678: binary '>': no operator found which takes a left-hand operand of type 'const std::move_iterator<CustomIt>' (or there is no acceptable conversion)\r\nstd/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.comp/op_gt.pass.cpp FAIL\r\nstd/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.comp/op_gte.pass.cpp FAIL\r\nstd/iterators/predef.iterators/move.iterators/move.iter.ops/move.iter.op.comp/op_lte.pass.cpp FAIL\r\n\r\n# Not analyzed.\r\n# Clang error: non-type template argument is not a constant expression\r\nstd/utilities/tuple/tuple.tuple/tuple.cnstr/convert_const_move.pass.cpp:2 FAIL\r\n\r\n# Not analyzed, possible path length issue. With a repo root of D:\\GitHub\\STL (13 characters), fails with:\r\n# \"error RC2136 : missing '=' in EXSTYLE=<flags>\" followed by \"LINK : fatal error LNK1327: failure during running rc.exe\"\r\nstd/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until_deadlock_bug.pass.cpp SKIPPED\r\n\r\n# Not analyzed, failing due to constexpr step limits. SKIPPED because they occasionally pass in certain configurations.\r\nstd/algorithms/alg.modifying.operations/alg.copy/ranges.copy_backward.pass.cpp SKIPPED\r\nstd/algorithms/alg.modifying.operations/alg.move/move.pass.cpp SKIPPED\r\nstd/algorithms/alg.modifying.operations/alg.rotate/rotate.pass.cpp SKIPPED\r\nstd/algorithms/alg.modifying.operations/alg.shift/ranges_shift_right.pass.cpp SKIPPED\r\nstd/algorithms/alg.modifying.operations/alg.shift/ranges.shift_left.pass.cpp SKIPPED\r\nstd/algorithms/alg.modifying.operations/alg.swap/ranges.swap_ranges.pass.cpp SKIPPED\r\nstd/algorithms/alg.nonmodifying/alg.contains/ranges.contains_subrange.pass.cpp SKIPPED\r\nstd/algorithms/alg.nonmodifying/alg.count/count.pass.cpp SKIPPED\r\nstd/algorithms/alg.nonmodifying/alg.count/ranges.count.pass.cpp SKIPPED\r\nstd/algorithms/alg.sorting/alg.sort/partial.sort.copy/ranges_partial_sort_copy.pass.cpp SKIPPED\r\nstd/containers/sequences/vector.bool/append_range.pass.cpp SKIPPED\r\nstd/containers/sequences/vector.bool/assign_range.pass.cpp SKIPPED\r\nstd/containers/sequences/vector.bool/flip.pass.cpp SKIPPED\r\nstd/containers/sequences/vector.bool/insert_range.pass.cpp SKIPPED\r\nstd/containers/sequences/vector/vector.modifiers/destroy_elements.pass.cpp SKIPPED\r\nstd/containers/sequences/vector/vector.modifiers/emplace.pass.cpp SKIPPED\r\nstd/containers/sequences/vector/vector.modifiers/insert_range.pass.cpp SKIPPED\r\nstd/ranges/range.adaptors/range.join.with/range.join.with.view/end.pass.cpp SKIPPED\r\nstd/strings/basic.string/string.modifiers/string_replace/replace_with_range.pass.cpp SKIPPED\r\nstd/utilities/charconv/charconv.to.chars/integral.pass.cpp SKIPPED\r\nstd/utilities/template.bitset/bitset.members/left_shift_eq.pass.cpp SKIPPED\r\nstd/utilities/template.bitset/bitset.members/op_and_eq.pass.cpp SKIPPED\r\nstd/utilities/template.bitset/bitset.members/op_or_eq.pass.cpp SKIPPED\r\nstd/utilities/template.bitset/bitset.members/right_shift_eq.pass.cpp SKIPPED\r\n\r\n# Not analyzed. In debug mode, looks like a proxy object unexpectedly exhausts an 80-byte buffer.\r\n# In release mode, fails in a later assertion that appears to be testing libc++-specific behavior.\r\nstd/input.output/string.streams/istringstream/istringstream.members/str.allocator_propagation.pass.cpp FAIL\r\nstd/input.output/string.streams/ostringstream/ostringstream.members/str.allocator_propagation.pass.cpp FAIL\r\nstd/input.output/string.streams/stringstream/stringstream.members/str.allocator_propagation.pass.cpp FAIL\r\n\r\n# These formatter tests need to create basic_format_contexts, so test_format_context.h\r\n# says \"Please create a vendor specific version of the test functions\".\r\n# If we do, some of these tests should be able to work.\r\nstd/containers/container.adaptors/container.adaptors.format/format.pass.cpp FAIL\r\nstd/containers/sequences/vector.bool/vector.bool.fmt/format.pass.cpp FAIL\r\nstd/thread/thread.threads/thread.thread.class/thread.thread.id/format.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.context/format.context/advance_to.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.context/format.context/arg.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.context/format.context/ctor.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.context/format.context/locale.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.context/format.context/out.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.formatter.spec/formatter.bool.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.formatter.spec/formatter.c_string.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.formatter.spec/formatter.char_array.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.formatter.spec/formatter.char.fsigned-char.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.formatter.spec/formatter.char.funsigned-char.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.formatter.spec/formatter.char.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.formatter.spec/formatter.floating_point.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.formatter.spec/formatter.handle.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.formatter.spec/formatter.pointer.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.formatter.spec/formatter.signed_integral.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.formatter.spec/formatter.string.pass.cpp FAIL\r\nstd/utilities/format/format.formatter/format.formatter.spec/formatter.unsigned_integral.pass.cpp FAIL\r\nstd/utilities/format/format.range/format.range.formatter/format.pass.cpp FAIL\r\nstd/utilities/format/format.range/format.range.formatter/set_brackets.pass.cpp FAIL\r\nstd/utilities/format/format.range/format.range.formatter/set_separator.pass.cpp FAIL\r\nstd/utilities/format/format.range/format.range.fmtdef/format.pass.cpp FAIL\r\nstd/utilities/format/format.range/format.range.fmtdef/set_brackets.pass.cpp FAIL\r\nstd/utilities/format/format.range/format.range.fmtdef/set_separator.pass.cpp FAIL\r\nstd/utilities/format/format.range/format.range.fmtmap/format.pass.cpp FAIL\r\nstd/utilities/format/format.range/format.range.fmtset/format.pass.cpp FAIL\r\nstd/utilities/format/format.range/format.range.fmtstr/format.pass.cpp FAIL\r\nstd/utilities/format/format.tuple/format.pass.cpp FAIL\r\n\r\n# Not analyzed, unexpected separators. Assertion failed: stream_fr_FR_locale<CharT>(-1'000'000s) == SV(\"-1 000 000s\")\r\nstd/time/time.duration/time.duration.nonmember/ostream.pass.cpp FAIL\r\n\r\n# Not analyzed. Blocked by our ctype_base deriving from locale::facet.\r\nstd/localization/locale.categories/category.numeric/locale.num.get/user_defined_char_type.pass.cpp FAIL\r\n\r\n# Not analyzed. Assertion failed: res == cvt.ok\r\nstd/localization/codecvt_unicode.pass.cpp FAIL\r\n\r\n# Not analyzed. Various runtime behavior differences.\r\nstd/time/time.syn/formatter.duration.pass.cpp:2 FAIL\r\nstd/time/time.syn/formatter.file_time.pass.cpp:2 FAIL\r\nstd/time/time.syn/formatter.gps_time.pass.cpp:2 FAIL\r\nstd/time/time.syn/formatter.hh_mm_ss.pass.cpp:2 FAIL\r\nstd/time/time.syn/formatter.local_time.pass.cpp:2 FAIL\r\nstd/time/time.syn/formatter.sys_time.pass.cpp:2 FAIL\r\nstd/time/time.syn/formatter.tai_time.pass.cpp:2 FAIL\r\nstd/time/time.syn/formatter.utc_time.pass.cpp:2 FAIL\r\nstd/time/time.syn/formatter.zoned_time.pass.cpp:2 FAIL\r\n\r\n# Not analyzed. Possible Clang constexpr bug involving the test's sized_allocator and our check for transposed ranges.\r\nstd/algorithms/alg.modifying.operations/alg.copy/copy.pass.cpp:2 FAIL\r\n\r\n# Not analyzed. SKIPPED because this is x86-specific, fatal error C1060: compiler is out of heap space\r\nstd/algorithms/alg.modifying.operations/alg.transform/ranges.transform.binary.iterator.pass.cpp:0 SKIPPED\r\nstd/algorithms/alg.modifying.operations/alg.transform/ranges.transform.binary.iterator.pass.cpp:1 SKIPPED\r\nstd/algorithms/alg.modifying.operations/alg.transform/ranges.transform.binary.range.pass.cpp:0 SKIPPED\r\nstd/algorithms/alg.modifying.operations/alg.transform/ranges.transform.binary.range.pass.cpp:1 SKIPPED\r\nstd/algorithms/alg.nonmodifying/alg.ends_with/ranges.ends_with.pass.cpp:0 SKIPPED\r\nstd/algorithms/alg.nonmodifying/alg.ends_with/ranges.ends_with.pass.cpp:1 SKIPPED\r\nstd/algorithms/alg.sorting/alg.lex.comparison/ranges.lexicographical_compare.pass.cpp:0 SKIPPED\r\nstd/algorithms/alg.sorting/alg.lex.comparison/ranges.lexicographical_compare.pass.cpp:1 SKIPPED\r\nstd/algorithms/alg.sorting/alg.merge/ranges_merge.pass.cpp:0 SKIPPED\r\nstd/algorithms/alg.sorting/alg.merge/ranges_merge.pass.cpp:1 SKIPPED\r\nstd/algorithms/alg.sorting/alg.set.operations/includes/ranges_includes.pass.cpp:0 SKIPPED\r\nstd/algorithms/alg.sorting/alg.set.operations/includes/ranges_includes.pass.cpp:1 SKIPPED\r\nstd/algorithms/alg.sorting/alg.set.operations/set.difference/ranges_set_difference.pass.cpp:0 SKIPPED\r\nstd/algorithms/alg.sorting/alg.set.operations/set.difference/ranges_set_difference.pass.cpp:1 SKIPPED\r\nstd/algorithms/alg.sorting/alg.set.operations/set.intersection/ranges_set_intersection.pass.cpp:0 SKIPPED\r\nstd/algorithms/alg.sorting/alg.set.operations/set.intersection/ranges_set_intersection.pass.cpp:1 SKIPPED\r\nstd/algorithms/alg.sorting/alg.set.operations/set.symmetric.difference/ranges_set_symmetric_difference.pass.cpp:0 SKIPPED\r\nstd/algorithms/alg.sorting/alg.set.operations/set.symmetric.difference/ranges_set_symmetric_difference.pass.cpp:1 SKIPPED\r\nstd/algorithms/alg.sorting/alg.set.operations/set.union/ranges_set_union.pass.cpp:0 SKIPPED\r\nstd/algorithms/alg.sorting/alg.set.operations/set.union/ranges_set_union.pass.cpp:1 SKIPPED\r\n\r\n# Not analyzed. Clang emits a -Wundefined-inline warning.\r\nstd/utilities/variant/variant.relops/three_way.pass.cpp:2 FAIL\r\n\r\n# Not analyzed.\r\n# MSVC error C2719: '_Fun_': formal parameter with requested alignment of 128 won't be aligned\r\n# Clang error: unknown attribute 'no_unique_address' ignored [-Werror,-Wunknown-attributes]\r\nstd/ranges/ranges_robust_against_no_unique_address.pass.cpp FAIL\r\n\r\n# Not analyzed. test_chrono_leap_second.h wants us to provide a vendor-specific version of\r\n# test_leap_second_create(), but it's unclear how to adapt their parameters to our implementation.\r\nstd/time/time.zone/time.zone.leap/assign.copy.pass.cpp FAIL\r\nstd/time/time.zone/time.zone.leap/cons.copy.pass.cpp FAIL\r\nstd/time/time.zone/time.zone.leap/members/date.pass.cpp FAIL\r\nstd/time/time.zone/time.zone.leap/members/value.pass.cpp FAIL\r\nstd/time/time.zone/time.zone.leap/nonmembers/comparison.pass.cpp FAIL\r\n\r\n# Not analyzed. Assertion failed: buffer.pubsetbuf(b, 10) == &buffer\r\nstd/input.output/file.streams/fstreams/filebuf.virtuals/setbuf.pass.cpp FAIL\r\n\r\n# Not analyzed. constexpr evaluation fails in assert(it.stride_count() == expected_counts.stride_count).\r\nstd/iterators/iterator.primitives/range.iter.ops/range.iter.ops.advance/iterator_count_sentinel.pass.cpp FAIL\r\n\r\n# Not analyzed. Says \"no exception is thrown while an exception of type std::format_error was expected\".\r\nstd/time/time.syn/formatter.local_info.pass.cpp FAIL\r\n\r\n# Not analyzed. Attempting to delete `nullptr_t`.\r\nstd/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter.pass.cpp FAIL\r\n\r\n# Not analyzed. Various assertions.\r\nstd/time/time.clock/time.clock.utc/time.clock.utc.members/to_sys.pass.cpp FAIL\r\nstd/time/time.zone/time.zone.timezone/time.zone.members/get_info.local_time.pass.cpp FAIL\r\nstd/time/time.zone/time.zone.zonedtime/time.zone.zonedtime.members/get_info.pass.cpp FAIL\r\nstd/time/time.zone/time.zone.zonedtime/time.zone.zonedtime.nonmembers/ostream.pass.cpp FAIL\r\n\r\n# Not analyzed. static_assert(testComplexity()) is failing.\r\nstd/algorithms/alg.sorting/alg.set.operations/set.intersection/set_intersection_complexity.pass.cpp FAIL\r\n\r\n# Not analyzed.\r\n# MSVC truncation warnings.\r\n# Clang assertion: std::hermite(n, +inf) == inf\r\nstd/numerics/c.math/hermite.pass.cpp FAIL\r\n\r\n# Not analyzed. These tests disable or limit allocations, which interferes with our proxy objects.\r\nstd/algorithms/alg.sorting/alg.sort/stable.sort/stable_sort.pass.cpp FAIL\r\nstd/containers/sequences/vector/vector.capacity/shrink_to_fit_exceptions.pass.cpp FAIL\r\n\r\n# Not analyzed. Our stdalign.h doesn't define __alignas_is_defined in C++ mode.\r\nstd/depr/depr.c.headers/stdalign_h.compile.pass.cpp:0 FAIL\r\nstd/depr/depr.c.headers/stdalign_h.compile.pass.cpp:1 FAIL\r\n\r\n# Not analyzed. Emitting easily-suppressed truncation warnings for MSVC, but also compiler errors for MSVC and Clang.\r\nstd/algorithms/alg.modifying.operations/alg.copy/ranges.copy.pass.cpp FAIL\r\n\r\n# Not analyzed, likely MSVC compiler bugs.\r\nstd/utilities/function.objects/refwrap/common_reference.compile.pass.cpp:0 FAIL\r\nstd/utilities/function.objects/refwrap/common_reference.compile.pass.cpp:1 FAIL\r\n\r\n# Not analyzed. MSVC emits warning C4267: 'argument': conversion from 'size_t' to 'unsigned char', possible loss of data\r\nstd/algorithms/alg.modifying.operations/alg.copy/copy_backward.pass.cpp:0 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.copy/copy_backward.pass.cpp:1 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.copy/copy.pass.cpp:0 FAIL\r\nstd/algorithms/alg.modifying.operations/alg.copy/copy.pass.cpp:1 FAIL\r\n\r\n# Not analyzed. MSVC emits warning C4242: 'argument': conversion from 'int' to 'char', possible loss of data\r\nstd/input.output/file.streams/fstreams/filebuf.virtuals/xsputn.pass.cpp:0 FAIL\r\nstd/input.output/file.streams/fstreams/filebuf.virtuals/xsputn.pass.cpp:1 FAIL\r\n\r\n# Not analyzed.\r\n# warning C4200: nonstandard extension used: zero-sized array in struct/union\r\n# warning C4265: class has virtual functions, but its non-trivial destructor is not virtual; instances of this class may not be destructed correctly\r\n# warning C4624: destructor was implicitly defined as deleted\r\n# Failed assertion in test_is_implicit_lifetime<volatile std::expected<int, float>, true>()\r\nstd/utilities/meta/meta.unary/meta.unary.prop/is_implicit_lifetime.pass.cpp:0 FAIL\r\nstd/utilities/meta/meta.unary/meta.unary.prop/is_implicit_lifetime.pass.cpp:1 FAIL\r\n\r\n# Not analyzed. Assertion failed: globalMemCounter.checkOutstandingNewLessThanOrEqual(1)\r\nstd/input.output/filesystems/class.path/path.member/path.assign/move.pass.cpp FAIL\r\nstd/input.output/filesystems/class.path/path.member/path.construct/move.pass.cpp FAIL\r\n\r\n# Not analyzed. Assertion failed: Alloc::outstanding_alloc() == 1\r\nstd/input.output/filesystems/class.path/path.member/path.generic.obs/generic_string_alloc.pass.cpp FAIL\r\n\r\n# Not analyzed. Assertion failed: std::equal(p.begin(), p.end(), TC.elements.begin(), ComparePathExact())\r\nstd/input.output/filesystems/class.path/path.member/path.decompose/path.decompose.pass.cpp FAIL\r\n\r\n# Not analyzed. Assertion failed: ret.is_absolute()\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.absolute/absolute.pass.cpp FAIL\r\n\r\n# Not analyzed. Assertion failed: ret == TC.p\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.temp_dir_path/temp_directory_path.pass.cpp FAIL\r\n\r\n# Not analyzed. Assertion failure: PathEq(output, expect)\r\nstd/input.output/filesystems/class.path/path.member/path.gen/lexically_relative_and_proximate.pass.cpp FAIL\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.proximate/proximate.pass.cpp FAIL\r\n\r\n# Not analyzed. Test aborts.\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.remove_all/toctou.pass.cpp FAIL\r\n\r\n# Not analyzed. Asserts that `fs::copy_file(p, p, ec)` and `fs::copy_file(p, p, opts, ec)` \"must NOT be noexcept\".\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.copy_file/copy_file.pass.cpp FAIL\r\n\r\n\r\n# *** MSVC-INTERNAL TEST HARNESS ISSUES (note: configuration :9 restricts these skips to be MSVC-internal) ***\r\n\r\n# These tests need ADDITIONAL_COMPILE_FLAGS(cl-style-warnings) and/or ADDITIONAL_COMPILE_FLAGS(gcc-style-warnings)\r\n# to silence warnings, but the MSVC-internal test harness doesn't yet parse ADDITIONAL_COMPILE_FLAGS.\r\nstd/algorithms/alg.modifying.operations/alg.replace/ranges.replace.pass.cpp:9 SKIPPED\r\nstd/algorithms/alg.nonmodifying/alg.equal/equal.pass.cpp:9 SKIPPED\r\nstd/algorithms/alg.nonmodifying/alg.find.last/ranges.find_last.pass.cpp:9 SKIPPED\r\nstd/algorithms/alg.nonmodifying/alg.find/find.pass.cpp:9 SKIPPED\r\nstd/algorithms/alg.nonmodifying/alg.find/ranges.find.pass.cpp:9 SKIPPED\r\nstd/algorithms/alg.nonmodifying/alg.fold/left_folds.pass.cpp:9 SKIPPED\r\nstd/atomics/atomics.ref/compare_exchange_strong.pass.cpp:9 SKIPPED\r\nstd/atomics/atomics.ref/compare_exchange_weak.pass.cpp:9 SKIPPED\r\nstd/atomics/atomics.ref/wait.pass.cpp:9 SKIPPED\r\nstd/containers/associative/map/map.modifiers/insert_range.pass.cpp:9 SKIPPED\r\nstd/containers/associative/multimap/multimap.modifiers/insert_range.pass.cpp:9 SKIPPED\r\nstd/containers/associative/multiset/insert_range.pass.cpp:9 SKIPPED\r\nstd/containers/associative/set/insert_range.pass.cpp:9 SKIPPED\r\nstd/containers/unord/unord.map/unord.map.modifiers/insert_range.pass.cpp:9 SKIPPED\r\nstd/containers/unord/unord.multimap/unord.multimap.modifiers/insert_range.pass.cpp:9 SKIPPED\r\nstd/containers/unord/unord.multiset/insert_range.pass.cpp:9 SKIPPED\r\nstd/containers/unord/unord.set/insert_range.pass.cpp:9 SKIPPED\r\nstd/containers/views/mdspan/mdspan/conversion.pass.cpp:9 SKIPPED\r\nstd/depr/depr.c.headers/setjmp_h.compile.pass.cpp:9 SKIPPED\r\nstd/input.output/file.streams/fstreams/ifstream.members/buffered_reads.pass.cpp:9 SKIPPED\r\nstd/input.output/file.streams/fstreams/ofstream.members/buffered_writes.pass.cpp:9 SKIPPED\r\nstd/language.support/support.runtime/csetjmp.pass.cpp:9 SKIPPED\r\nstd/numerics/numeric.ops/numeric.ops.midpoint/midpoint.pointer.pass.cpp:9 SKIPPED\r\nstd/ranges/range.adaptors/range.lazy.split/constraints.compile.pass.cpp:9 SKIPPED\r\nstd/ranges/range.utility/range.utility.conv/to.pass.cpp:9 SKIPPED\r\nstd/thread/thread.jthread/assign.move.pass.cpp:9 SKIPPED\r\nstd/utilities/meta/meta.unary/dependent_return_type.pass.cpp:9 SKIPPED\r\n\r\n# These tests are marked as `REQUIRES: can-create-symlinks`\r\nstd/input.output/filesystems/class.directory_entry/directory_entry.cons/path.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/class.directory_entry/directory_entry.mods/assign.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/class.directory_entry/directory_entry.mods/refresh.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/class.directory_entry/directory_entry.mods/replace_filename.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/class.directory_entry/directory_entry.obs/file_size.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/class.directory_entry/directory_entry.obs/file_type_obs.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/class.directory_entry/directory_entry.obs/hard_link_count.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/class.directory_entry/directory_entry.obs/last_write_time.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/class.rec.dir.itr/rec.dir.itr.members/recursion_pending.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.copy_symlink/copy_symlink.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.copy/copy.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.create_directories/create_directories.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.create_directory/create_directory_with_attributes.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.file_size/file_size.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.is_block_file/is_block_file.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.is_char_file/is_character_file.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.is_fifo/is_fifo.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.is_socket/is_socket.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.last_write_time/last_write_time.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.relative/relative.pass.cpp:9 SKIPPED\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.weakly_canonical/weakly_canonical.pass.cpp:9 SKIPPED\r\n\r\n# These tests are marked as `REQUIRES: linux`\r\nstd/input.output/filesystems/fs.op.funcs/fs.op.copy_file/copy_file_procfs.pass.cpp:9 SKIPPED\r\n\r\n# These tests are marked as `XFAIL: *`\r\nstd/input.output/filesystems/class.path/path.nonmember/path.io.unicode_bug.pass.cpp:9 SKIPPED\r\n\r\n# These tests are marked as `XFAIL: msvc`, but the MSVC-internal test harness doesn't yet parse XFAIL.\r\nstd/algorithms/algorithms.results/no_unique_address.compile.pass.cpp:9 SKIPPED\r\nstd/input.output/iostream.format/print.fun/no_file_description.pass.cpp:9 SKIPPED\r\nstd/language.support/support.exception/except.nested/rethrow_if_nested.pass.cpp:9 SKIPPED\r\nstd/language.support/support.exception/propagation/current_exception.pass.cpp:9 SKIPPED\r\nstd/time/time.syn/formatter.day.pass.cpp:9 SKIPPED\r\nstd/time/time.syn/formatter.month_day.pass.cpp:9 SKIPPED\r\nstd/time/time.syn/formatter.weekday_index.pass.cpp:9 SKIPPED\r\nstd/time/time.syn/formatter.weekday_last.pass.cpp:9 SKIPPED\r\nstd/time/time.syn/formatter.weekday.pass.cpp:9 SKIPPED\r\nstd/time/time.syn/formatter.year_month_day.pass.cpp:9 SKIPPED\r\nstd/utilities/function.objects/func.wrap/func.wrap.func/noncopyable_return_type.pass.cpp:9 SKIPPED\r\n\r\n# This test is marked as `REQUIRES: large_tests`. The GitHub test harness doesn't define that feature, so it doesn't\r\n# run this test. However, the MSVC-internal test harness doesn't yet parse REQUIRES, and simply runs everything.\r\nstd/input.output/string.streams/stringstream/stringstream.members/gcount.pass.cpp:9 SKIPPED\r\n\r\n# Similarly, this test is marked as `REQUIRES: 32-bit-pointer`.\r\nstd/iterators/iterator.container/ssize.LWG3207.compile.pass.cpp:9 SKIPPED\r\n\r\n# This test is marked as `REQUIRES: target={{.+}}-apple-{{.+}}`.\r\nstd/input.output/file.streams/fstreams/filebuf.virtuals/overflow.writefail.pass.cpp:9 SKIPPED\r\n\r\n# This test has one check guarded in a \"not CLANG\" block, but upcoming MSVC will implement the\r\n# same behavior for binding an xvalue conversion function result to a const lvalue reference.\r\nstd/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp:9 SKIPPED\r\n"
  },
  {
    "path": "tests/libcxx/lit.cfg",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nlit_config.fatal(\r\n    \"You seem to be running Lit directly -- you should be running Lit through \"\r\n    \"<build>/tests/utils/stl-lit/stl-lit.py, which will ensure that the right Lit configuration \"\r\n    \"file is used.\")\r\n"
  },
  {
    "path": "tests/libcxx/lit.site.cfg.in",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\nimport site\r\nsite.addsitedir(\"@STL_TEST_UTILS_DIR@\")\r\nsite.addsitedir(os.path.join(\"@LIBCXX_SOURCE_DIR@\", \"utils\"))\r\nimport stl.test.config\r\nimport stl.test.features\r\nimport stl.test.file_parsing\r\nimport stl.test.format\r\nimport stl.test.params\r\n\r\nconfig.envlst_path      = '@LIBCXX_ENVLST@'\r\nconfig.name             = 'libc++'\r\nconfig.suffixes         = ['[.]pass[.]cpp$', '[.]fail[.]cpp$']\r\nconfig.test_exec_root   = '@LIBCXX_TEST_OUTPUT_DIR@'\r\nconfig.test_format      = stl.test.format.LibcxxTestFormat()\r\nconfig.test_source_root = '@LIBCXX_SOURCE_DIR@/test'\r\nconfig.substitutions.append(('%{cxx_std}', ''))\r\n\r\nlit_config.expected_results = getattr(lit_config, 'expected_results', dict())\r\nlit_config.include_dirs     = getattr(lit_config, 'include_dirs', dict())\r\nlit_config.library_dirs     = getattr(lit_config, 'library_dirs', dict())\r\nlit_config.test_subdirs     = getattr(lit_config, 'test_subdirs', dict())\r\n\r\nlit_config.expected_results[config.name] = stl.test.file_parsing.parse_result_file('@LIBCXX_EXPECTED_RESULTS@')\r\nlit_config.include_dirs[config.name]     = ['@STL_TESTED_HEADERS_DIR@', '@LIBCXX_SOURCE_DIR@/test/support']\r\nlit_config.library_dirs[config.name]     = ['@STL_LIBRARY_OUTPUT_DIRECTORY@', '@TOOLSET_LIB@']\r\nlit_config.test_subdirs[config.name]     = ['@LIBCXX_SOURCE_DIR@/test/std']\r\n\r\nlit_config.cxx_runtime = '@STL_RUNTIME_OUTPUT_DIRECTORY@'\r\nlit_config.target_arch = '@VCLIBS_TARGET_ARCHITECTURE@'\r\nlit_config.build_only  = '@TESTS_BUILD_ONLY@'.lower() in ['1', 'true', 'on']\r\n\r\n# Add parameters and features to the config\r\nstl.test.config.configure(\r\n    stl.test.params.getDefaultParameters(config, lit_config),\r\n    stl.test.features.getDefaultFeatures(config, lit_config),\r\n    config,\r\n    lit_config\r\n)\r\n"
  },
  {
    "path": "tests/libcxx/magic_comments.txt",
    "content": "// REQUIRES: c++03\r\n// REQUIRES: c++03 || c++11\r\n// REQUIRES: c++03 || c++11 || c++14\r\n// REQUIRES: c++03 || c++11 || c++14 || c++17\r\n// REQUIRES: c++11\r\n// REQUIRES: c++11 || c++14\r\n// REQUIRES: c++11 || c++14 || c++17 || c++20\r\n// REQUIRES: c++17\r\n// REQUIRES: has-unix-headers\r\n// REQUIRES: stdlib=libc++\r\n// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23\r\n// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23, c++26\r\n// UNSUPPORTED: msvc\r\n// UNSUPPORTED: no-filesystem, no-localization, no-tzdb, has-no-zdump\r\n// UNSUPPORTED: windows\r\n"
  },
  {
    "path": "tests/libcxx/usual_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\universal_prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /utf-8 /FImsvc_stdlib_force_include.h /wd4643\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/Zc:preprocessor\"\r\nASAN\tPM_CL=\"-fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call\"\r\n"
  },
  {
    "path": "tests/std/CMakeLists.txt",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nexecute_process(\r\n  COMMAND \"${Python_EXECUTABLE}\" \"${STL_SOURCE_DIR}/tools/scripts/check_test_lst_paths.py\" \"${CMAKE_CURRENT_SOURCE_DIR}\"\r\n  COMMAND_ERROR_IS_FATAL ANY\r\n)\r\n\r\nset(STD_EXPECTED_RESULTS \"${CMAKE_CURRENT_SOURCE_DIR}/expected_results.txt\")\r\nset(STD_TEST_OUTPUT_DIR \"${STL_TEST_OUTPUT_DIR}/std\")\r\n\r\nconfigure_file(\r\n  ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in\r\n  ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg)\r\n\r\nset(STD_LIT_CONFIG_MAP \"map_config(\\\"${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg\\\", \\\"${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg\\\")\\n\")\r\nset_property(GLOBAL APPEND_STRING PROPERTY STL_LIT_CONFIG_MAP ${STD_LIT_CONFIG_MAP})\r\nset_property(GLOBAL APPEND PROPERTY STL_LIT_TEST_DIRS \"${CMAKE_CURRENT_SOURCE_DIR}/tests\")\r\n"
  },
  {
    "path": "tests/std/expected_results.txt",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n"
  },
  {
    "path": "tests/std/include/constexpr_char_traits.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n#include <cstdio>\r\n#include <cwchar>\r\n\r\nstruct constexpr_char_traits {\r\n    typedef char char_type;\r\n    typedef long int_type;\r\n    typedef long pos_type;\r\n    typedef long off_type;\r\n    typedef mbstate_t state_type;\r\n\r\n    static constexpr int compare(const char* first1, const char* first2, size_t count) {\r\n        for (; 0 < count; --count, ++first1, ++first2) {\r\n            if (!eq(*first1, *first2)) {\r\n                return lt(*first1, *first2) ? -1 : +1;\r\n            }\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    static constexpr size_t length(const char* first) {\r\n        size_t count = 0;\r\n        for (; !eq(*first, char()); ++first) {\r\n            ++count;\r\n        }\r\n\r\n        return count;\r\n    }\r\n\r\n    static constexpr char* copy(char* first1, const char* first2, size_t count) {\r\n        char* next = first1;\r\n        for (; 0 < count; --count, ++next, ++first2) {\r\n            assign(*next, *first2);\r\n        }\r\n        return first1;\r\n    }\r\n\r\n    static constexpr char* _Copy_s(char* first1, size_t, const char* first2, size_t count) {\r\n        // let's just pretend :)\r\n        return copy(first1, first2, count);\r\n    }\r\n\r\n    static constexpr const char* find(const char* first, size_t count, const char ch) {\r\n        for (; 0 < count; --count, ++first) {\r\n            if (eq(*first, ch)) {\r\n                return first;\r\n            }\r\n        }\r\n\r\n        return nullptr;\r\n    }\r\n\r\n    static constexpr char* move(char* first1, const char* first2, size_t count) {\r\n        char* next = first1;\r\n        if (first2 < next && next < first2 + count) {\r\n            for (next += count, first2 += count; 0 < count; --count) {\r\n                assign(*--next, *--first2);\r\n            }\r\n        } else {\r\n            for (; 0 < count; --count, ++next, ++first2) {\r\n                assign(*next, *first2);\r\n            }\r\n        }\r\n        return first1;\r\n    }\r\n\r\n    static constexpr char* assign(char* first, size_t count, const char ch) {\r\n        char* next = first;\r\n        for (; 0 < count; --count, ++next) {\r\n            assign(*next, ch);\r\n        }\r\n\r\n        return first;\r\n    }\r\n\r\n    static constexpr void assign(char& left, const char right) noexcept {\r\n        left = right;\r\n    }\r\n\r\n    static constexpr bool eq(const char left, const char right) noexcept {\r\n        return left == right;\r\n    }\r\n\r\n    static constexpr bool lt(const char left, const char right) noexcept {\r\n        return left < right;\r\n    }\r\n\r\n    static constexpr char to_char_type(const int_type meta) noexcept {\r\n        return static_cast<char>(meta);\r\n    }\r\n\r\n    static constexpr int_type to_int_type(const char ch) noexcept {\r\n        return ch;\r\n    }\r\n\r\n    static constexpr bool eq_int_type(const int_type left, const int_type right) noexcept {\r\n        return left == right;\r\n    }\r\n\r\n    static constexpr int_type not_eof(const int_type meta) noexcept {\r\n        return meta != eof() ? meta : !eof();\r\n    }\r\n\r\n    static constexpr int_type eof() noexcept {\r\n        return EOF;\r\n    }\r\n};\r\n"
  },
  {
    "path": "tests/std/include/experimental_filesystem.hpp",
    "content": "// filesystem experimental header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// ********************************************************************************************************************\r\n// * This was previously shipped in product code as <experimental/filesystem>.                                        *\r\n// * It's now preserved in cryostasis for test code to exercise functions that are retained for binary compatibility. *\r\n// * This file should generally not be changed, except to fix compiler warnings/errors and to update clang-format.    *\r\n// ********************************************************************************************************************\r\n\r\n#ifndef _EXPERIMENTAL_FILESYSTEM_\r\n#define _EXPERIMENTAL_FILESYSTEM_\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <algorithm> // for replace\r\n#include <chrono> // for chrono::time_point\r\n#include <codecvt> // for codecvt_utf8_*\r\n#include <list> // for recursive_directory_iterator stack\r\n#include <locale> // for wstring_convert\r\n#include <memory> // for shared_ptr\r\n#include <vector> // for canonical's .. handling\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n#ifndef _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING\r\n#error The <experimental/filesystem> header providing std::experimental::filesystem is deprecated by Microsoft \\\r\nand will be REMOVED. It is superseded by the C++17 <filesystem> header providing std::filesystem. \\\r\nYou can define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING to suppress this error.\r\n#endif // !defined(_SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING)\r\n\r\n#pragma warning(disable : 4365) // conversion from 'type_1' to 'type_2', signed/unsigned mismatch (/Wall)\r\n\r\n#define _MAX_FILESYS_NAME 260 // longest Windows or Posix filename + 1\r\n\r\n#define _FS_BEGIN              \\\r\n    _STD_BEGIN                 \\\r\n    namespace experimental {   \\\r\n        namespace filesystem { \\\r\n            inline namespace v1 {\r\n#define _FS_END \\\r\n    }           \\\r\n    }           \\\r\n    }           \\\r\n    _STD_END\r\n#define _FSPFX _STD experimental::filesystem::v1::\r\n\r\n_FS_BEGIN\r\n#define _FS_ISSEP(x) ((x) == L'/' || (x) == L'\\\\')\r\n#define _FS_PREF     L'\\\\'\r\n\r\n#define _FS_COLON  L':'\r\n#define _FS_PERIOD L'.'\r\n#define _FS_SLASH  L'/'\r\n#define _FS_BSLASH L'\\\\'\r\n\r\nstruct _Char8_t; // flag for UTF8\r\n\r\nenum class file_type { // names for file types\r\n    not_found = -1,\r\n    none,\r\n    regular,\r\n    directory,\r\n    symlink,\r\n    block,\r\n    character,\r\n    fifo,\r\n    socket,\r\n    unknown\r\n};\r\n\r\nenum class copy_options { // names for copy options\r\n    none                                  = 0,\r\n    skip_existing                         = 1,\r\n    overwrite_existing                    = 2,\r\n    update_existing                       = 4,\r\n    recursive                             = 8,\r\n    copy_symlinks                         = 16,\r\n    skip_symlinks                         = 32,\r\n    directories_only                      = 64,\r\n    create_symlinks                       = 128,\r\n    create_hard_links                     = 256,\r\n    _Unspecified_recursion_prevention_tag = 512\r\n};\r\n\r\n_BITMASK_OPS(_EMPTY_ARGUMENT, copy_options)\r\n\r\nenum class directory_options { // names for directory options\r\n    none = 0,\r\n    follow_directory_symlink\r\n};\r\n\r\nenum class perms { // names for permissions\r\n    none             = 0,\r\n    owner_read       = 0400, // S_IRUSR\r\n    owner_write      = 0200, // S_IWUSR\r\n    owner_exec       = 0100, // S_IXUSR\r\n    owner_all        = 0700, // S_IRWXU\r\n    group_read       = 040, // S_IRGRP\r\n    group_write      = 020, // S_IWGRP\r\n    group_exec       = 010, // S_IXGRP\r\n    group_all        = 070, // S_IRWXG\r\n    others_read      = 04, // S_IROTH\r\n    others_write     = 02, // S_IWOTH\r\n    others_exec      = 01, // S_IXOTH\r\n    others_all       = 07, // S_IRWXO\r\n    all              = 0777,\r\n    set_uid          = 04000, // S_ISUID\r\n    set_gid          = 02000, // S_ISGID\r\n    sticky_bit       = 01000, // S_ISVTX\r\n    mask             = 07777,\r\n    unknown          = 0xFFFF,\r\n    add_perms        = 0x10000,\r\n    remove_perms     = 0x20000,\r\n    resolve_symlinks = 0x40000\r\n};\r\n\r\n_BITMASK_OPS(_EMPTY_ARGUMENT, perms)\r\n\r\nclass file_status { // stores file status\r\npublic:\r\n    explicit file_status(file_type _Ftype = file_type::none, perms _Prms = perms::unknown) noexcept\r\n        : _Myftype(_Ftype), _Myperms(_Prms) {}\r\n\r\n    file_status(const file_status&) noexcept            = default;\r\n    file_status& operator=(const file_status&) noexcept = default;\r\n\r\n    file_status(file_status&&)            = default;\r\n    file_status& operator=(file_status&&) = default;\r\n\r\n    _NODISCARD file_type type() const noexcept {\r\n        return _Myftype;\r\n    }\r\n\r\n    _NODISCARD perms permissions() const noexcept {\r\n        return _Myperms;\r\n    }\r\n\r\n    void type(file_type _Ftype) noexcept {\r\n        _Myftype = _Ftype;\r\n    }\r\n\r\n    void permissions(perms _Prms) noexcept {\r\n        _Myperms = _Prms;\r\n    }\r\n\r\nprivate:\r\n    file_type _Myftype;\r\n    perms _Myperms;\r\n};\r\n\r\nstruct space_info { // space information for a file\r\n    uintmax_t capacity;\r\n    uintmax_t free;\r\n    uintmax_t available;\r\n};\r\n\r\n// wide filenames\r\nextern \"C\" _CRTIMP2_PURE void* __CLRCALL_PURE_OR_CDECL _Open_dir(\r\n    wchar_t (&)[_MAX_FILESYS_NAME], const wchar_t*, int&, file_type&) noexcept;\r\nextern \"C\" _CRTIMP2_PURE wchar_t* __CLRCALL_PURE_OR_CDECL _Read_dir(\r\n    wchar_t (&)[_MAX_FILESYS_NAME], void*, file_type&) noexcept;\r\nextern \"C\" _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Close_dir(void*) noexcept;\r\nextern \"C\" _CRTIMP2_PURE bool __CLRCALL_PURE_OR_CDECL _Current_get(wchar_t (&)[_MAX_FILESYS_NAME]) noexcept;\r\nextern \"C\" _CRTIMP2_PURE bool __CLRCALL_PURE_OR_CDECL _Current_set(const wchar_t*) noexcept;\r\nextern \"C\" _CRTIMP2_PURE wchar_t* __CLRCALL_PURE_OR_CDECL _Symlink_get(\r\n    wchar_t (&)[_MAX_FILESYS_NAME], const wchar_t*) noexcept;\r\nextern \"C\" _CRTIMP2_PURE wchar_t* __CLRCALL_PURE_OR_CDECL _Temp_get(wchar_t (&)[_MAX_FILESYS_NAME]) noexcept;\r\n\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Make_dir(const wchar_t*, const wchar_t*) noexcept;\r\nextern \"C\" _CRTIMP2_PURE bool __CLRCALL_PURE_OR_CDECL _Remove_dir(const wchar_t*) noexcept;\r\n\r\nextern \"C\" _CRTIMP2_PURE file_type __CLRCALL_PURE_OR_CDECL _Stat(const wchar_t*, perms*) noexcept;\r\nextern \"C\" _CRTIMP2_PURE file_type __CLRCALL_PURE_OR_CDECL _Lstat(const wchar_t*, perms*) noexcept;\r\nextern \"C\" _CRTIMP2_PURE uintmax_t __CLRCALL_PURE_OR_CDECL _File_size(const wchar_t*) noexcept;\r\nextern \"C\" _CRTIMP2_PURE uintmax_t __CLRCALL_PURE_OR_CDECL _Hard_links(const wchar_t*) noexcept;\r\nextern \"C\" _CRTIMP2_PURE int64_t __CLRCALL_PURE_OR_CDECL _Last_write_time(const wchar_t*) noexcept;\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Set_last_write_time(const wchar_t*, int64_t) noexcept;\r\nextern \"C\" _CRTIMP2_PURE space_info __CLRCALL_PURE_OR_CDECL _Statvfs(const wchar_t*) noexcept;\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Equivalent(const wchar_t*, const wchar_t*) noexcept;\r\n\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Link(const wchar_t*, const wchar_t*) noexcept;\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Symlink(const wchar_t*, const wchar_t*) noexcept;\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Rename(const wchar_t*, const wchar_t*) noexcept;\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Resize(const wchar_t*, uintmax_t) noexcept;\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Unlink(const wchar_t*) noexcept;\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Copy_file(const wchar_t*, const wchar_t*) noexcept;\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Chmod(const wchar_t*, perms) noexcept;\r\n\r\ntemplate <class _Inchar, class _Outchar, class _Outtraits = char_traits<_Outchar>,\r\n    class _Outalloc = allocator<_Outchar>>\r\nstruct _Path_cvt { // converts among {char, wchar_t, UTF8, char16_t, char32_t} paths\r\n    using _Outstr = basic_string<_Outchar, _Outtraits, _Outalloc>;\r\n    static _Outstr&& _Cvt(_Outstr& _Str, const _Inchar* _First, size_t _Size,\r\n        _Unused_parameter = {}) { // convert _Inchar sequence to _Outchar one-to-one\r\n        for (; 0 < _Size; --_Size, ++_First) {\r\n            _Str.push_back(static_cast<_Outchar>(*_First));\r\n        }\r\n\r\n        return _STD move(_Str);\r\n    }\r\n};\r\n\r\ntemplate <class _Outchar, class _Outtraits, class _Outalloc>\r\nstruct _Path_cvt<_Outchar, _Outchar, _Outtraits,\r\n    _Outalloc> { // converts among {char, wchar_t, UTF8, char16_t, char32_t} paths\r\n    using _Outstr = basic_string<_Outchar, _Outtraits, _Outalloc>;\r\n    static _Outstr&& _Cvt(_Outstr& _Str, const _Outchar* _First, size_t _Size,\r\n        _Unused_parameter = {}) { // copy _Outchar sequence to _Outchar one-to-one\r\n        return _STD move(_Str.append(_First, _First + _Size));\r\n    }\r\n};\r\n\r\n_STL_DISABLE_DEPRECATED_WARNING\r\ntemplate <class _Outtraits, class _Outalloc>\r\nstruct _Path_cvt<char, char16_t, _Outtraits,\r\n    _Outalloc> { // converts among {char, wchar_t, UTF8, char16_t, char32_t} paths\r\n    using _Inchar  = char;\r\n    using _Outchar = char16_t;\r\n    using _Outstr  = basic_string<_Outchar, _Outtraits, _Outalloc>;\r\n    static _Outstr&& _Cvt(_Outstr& _Str, const _Inchar* _First, size_t _Size,\r\n        _Unused_parameter = {}) { // convert char sequence to char16_t string\r\n        wstring_convert<codecvt_utf8_utf16<_Outchar>, _Outchar> _Wcvt;\r\n        return _STD move(_Str.append(_Wcvt.from_bytes(_First, _First + _Size)));\r\n    }\r\n};\r\n\r\ntemplate <class _Outtraits, class _Outalloc>\r\nstruct _Path_cvt<char16_t, char, _Outtraits,\r\n    _Outalloc> { // converts among {char, wchar_t, UTF8, char16_t, char32_t} paths\r\n    using _Inchar  = char16_t;\r\n    using _Outchar = char;\r\n    using _Outstr  = basic_string<_Outchar, _Outtraits, _Outalloc>;\r\n    static _Outstr&& _Cvt(_Outstr& _Str, const _Inchar* _First, size_t _Size,\r\n        _Unused_parameter = {}) { // convert char16_t sequence to char string\r\n        wstring_convert<codecvt_utf8_utf16<_Inchar>, _Inchar> _Wcvt;\r\n        return _STD move(_Str.append(_Wcvt.to_bytes(_First, _First + _Size)));\r\n    }\r\n};\r\n\r\ntemplate <class _Outtraits, class _Outalloc>\r\nstruct _Path_cvt<char, char32_t, _Outtraits,\r\n    _Outalloc> { // converts among {char, wchar_t, UTF8, char16_t, char32_t} paths\r\n    using _Inchar  = char;\r\n    using _Outchar = char32_t;\r\n    using _Outstr  = basic_string<_Outchar, _Outtraits, _Outalloc>;\r\n    static _Outstr&& _Cvt(_Outstr& _Str, const _Inchar* _First, size_t _Size,\r\n        _Unused_parameter = {}) { // convert char sequence to char32_t string\r\n        wstring_convert<codecvt_utf8<_Outchar>, _Outchar> _Wcvt;\r\n        return _STD move(_Str.append(_Wcvt.from_bytes(_First, _First + _Size)));\r\n    }\r\n};\r\n\r\ntemplate <class _Outtraits, class _Outalloc>\r\nstruct _Path_cvt<char32_t, char, _Outtraits,\r\n    _Outalloc> { // converts among {char, wchar_t, UTF8, char16_t, char32_t} paths\r\n    using _Inchar  = char32_t;\r\n    using _Outchar = char;\r\n    using _Outstr  = basic_string<_Outchar, _Outtraits, _Outalloc>;\r\n    static _Outstr&& _Cvt(_Outstr& _Str, const _Inchar* _First, size_t _Size,\r\n        _Unused_parameter = {}) { // convert char32_t sequence to char string\r\n        wstring_convert<codecvt_utf8<_Inchar>, _Inchar> _Wcvt;\r\n        return _STD move(_Str.append(_Wcvt.to_bytes(_First, _First + _Size)));\r\n    }\r\n};\r\n\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _To_byte(const wchar_t*, char*) noexcept;\r\nextern \"C\" _CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _To_wide(const char*, wchar_t*) noexcept;\r\n\r\ntemplate <class _Outtraits, class _Outalloc>\r\nstruct _Path_cvt<char, wchar_t, _Outtraits,\r\n    _Outalloc> { // converts among {char, wchar_t, UTF8, char16_t, char32_t} paths\r\n    using _Inchar  = char;\r\n    using _Outchar = wchar_t;\r\n    using _Outstr  = basic_string<_Outchar, _Outtraits, _Outalloc>;\r\n    static _Outstr&& _Cvt(_Outstr& _Str, const _Inchar* _First,\r\n        size_t) { // convert char sequence to wchar_t string -- Windows\r\n        _Outchar _Fname_wide[_MAX_FILESYS_NAME];\r\n        if (_To_wide(_First, _Fname_wide) == 0) {\r\n            _Xinvalid_argument(\"invalid char filename argument\");\r\n        }\r\n\r\n        return _STD move(_Str.append(_Fname_wide));\r\n    }\r\n\r\n    static _Outstr&& _Cvt(_Outstr& _Str, const _Inchar* _First, size_t _Size,\r\n        const locale& _Loc) { // convert char sequence to wchar_t string, locale -- Windows\r\n        using _Mycvt = codecvt<_Outchar, _Inchar, _Mbstatet>;\r\n        wstring_convert<_Mycvt> _Wcvt(&_STD use_facet<_Mycvt>(_Loc));\r\n        return _STD move(_Str.append(_Wcvt.from_bytes(_First, _First + _Size)));\r\n    }\r\n};\r\n\r\ntemplate <class _Outtraits, class _Outalloc>\r\nstruct _Path_cvt<wchar_t, char, _Outtraits,\r\n    _Outalloc> { // converts among {char, wchar_t, UTF8, char16_t, char32_t} paths\r\n    using _Inchar  = wchar_t;\r\n    using _Outchar = char;\r\n    using _Outstr  = basic_string<_Outchar, _Outtraits, _Outalloc>;\r\n    static _Outstr&& _Cvt(_Outstr& _Str, const _Inchar* _First,\r\n        size_t) { // convert wchar_t sequence to char string -- Windows\r\n        _Outchar _Fname_byte[_MAX_FILESYS_NAME];\r\n        if (_To_byte(_First, _Fname_byte) == 0) {\r\n            _Xinvalid_argument(\"invalid wchar_t filename argument\");\r\n        }\r\n\r\n        return _STD move(_Str.append(_Fname_byte));\r\n    }\r\n\r\n    static _Outstr&& _Cvt(_Outstr& _Str, const _Inchar* _First, size_t _Size,\r\n        const locale& _Loc) { // convert wchar_t sequence to char string, locale -- Windows\r\n        using _Mycvt = codecvt<_Inchar, _Outchar, _Mbstatet>;\r\n        wstring_convert<_Mycvt> _Wcvt(&_STD use_facet<_Mycvt>(_Loc));\r\n        return _STD move(_Str.append(_Wcvt.to_bytes(_First, _First + _Size)));\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct _Path_cvt<char, _Char8_t, char_traits<char>,\r\n    allocator<char>> { // converts among {char, wchar_t, UTF8, char16_t, char32_t} paths\r\n    using _Inchar    = char;\r\n    using _Outchar   = char;\r\n    using _Outtraits = char_traits<_Outchar>;\r\n    using _Outalloc  = allocator<_Outchar>;\r\n    using _Outstr    = basic_string<_Outchar, _Outtraits, _Outalloc>;\r\n    static _Outstr&& _Cvt(_Outstr& _Str, const _Inchar* _First, size_t,\r\n        _Unused_parameter = {}) { // convert char sequence to UTF8 string -- Windows\r\n        wchar_t _Fname_wide[_MAX_FILESYS_NAME];\r\n        if (_To_wide(_First, _Fname_wide) == 0) {\r\n            _Xinvalid_argument(\"invalid char filename argument\");\r\n        }\r\n\r\n        wstring_convert<codecvt_utf8<wchar_t>, wchar_t> _Wcvt;\r\n        wchar_t* _Last1 = _Fname_wide;\r\n        while (*_Last1 != L'\\0') {\r\n            ++_Last1;\r\n        }\r\n\r\n        return _STD move(_Str.append(_Wcvt.to_bytes(_Fname_wide, _Last1)));\r\n    }\r\n};\r\n\r\ntemplate <class _Outtraits, class _Outalloc>\r\nstruct _Path_cvt<_Char8_t, char, _Outtraits,\r\n    _Outalloc> { // converts among {char, wchar_t, UTF8, char16_t, char32_t} paths\r\n    using _Inchar  = char;\r\n    using _Outchar = char;\r\n    using _Outstr  = basic_string<_Outchar, _Outtraits, _Outalloc>;\r\n    static _Outstr&& _Cvt(_Outstr& _Str, const _Inchar* _First, size_t _Size,\r\n        _Unused_parameter = {}) { // convert UTF8 sequence to char string -- Windows\r\n        wstring_convert<codecvt_utf8_utf16<wchar_t>, wchar_t> _Wcvt;\r\n        wstring _Str0(_Wcvt.from_bytes(_First, _First + _Size));\r\n\r\n        _Outchar _Fname_byte[_MAX_FILESYS_NAME];\r\n        if (_To_byte(_Str0.c_str(), _Fname_byte) == 0) {\r\n            _Xinvalid_argument(\"invalid UTF8 filename argument\");\r\n        }\r\n\r\n        return _STD move(_Str.append(_Fname_byte));\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct _Path_cvt<wchar_t, _Char8_t, char_traits<char>,\r\n    allocator<char>> { // converts among {char, wchar_t, UTF8, char16_t, char32_t} paths\r\n    using _Inchar    = wchar_t;\r\n    using _Outchar   = char;\r\n    using _Outtraits = char_traits<_Outchar>;\r\n    using _Outalloc  = allocator<_Outchar>;\r\n    using _Outstr    = basic_string<_Outchar, _Outtraits, _Outalloc>;\r\n    static _Outstr&& _Cvt(_Outstr& _Str, const _Inchar* _First, size_t _Size,\r\n        _Unused_parameter = {}) { // convert wchar_t sequence to UTF8 string -- Windows\r\n        wstring_convert<codecvt_utf8<_Inchar>, _Inchar> _Wcvt;\r\n        return _STD move(_Str.append(_Wcvt.to_bytes(_First, _First + _Size)));\r\n    }\r\n};\r\n\r\ntemplate <class _Outtraits, class _Outalloc>\r\nstruct _Path_cvt<_Char8_t, wchar_t, _Outtraits,\r\n    _Outalloc> { // converts among {char, wchar_t, UTF8, char16_t, char32_t} paths\r\n    using _Inchar  = char;\r\n    using _Outchar = wchar_t;\r\n    using _Outstr  = basic_string<_Outchar, _Outtraits, _Outalloc>;\r\n    static _Outstr&& _Cvt(_Outstr& _Str, const _Inchar* _First, size_t _Size,\r\n        _Unused_parameter = {}) { // convert UTF8 sequence to wchar_t string -- Windows\r\n        wstring_convert<codecvt_utf8<_Outchar>, _Outchar> _Wcvt;\r\n        return _STD move(_Str.append(_Wcvt.from_bytes(_First, _First + _Size)));\r\n    }\r\n};\r\n\r\n// struct _Path_cvt<wchar_t, char16_t, _Outtraits, _Outalloc> Windows (copy)\r\n// struct _Path_cvt<char16_t, wchar_t, _Outtraits, _Outalloc> Windows (copy)\r\n\r\ntemplate <class _Outtraits, class _Outalloc>\r\nstruct _Path_cvt<wchar_t, char32_t, _Outtraits,\r\n    _Outalloc> { // converts among {char, wchar_t, UTF8, char16_t, char32_t} paths\r\n    using _Inchar  = wchar_t;\r\n    using _Outchar = char32_t;\r\n    using _Outstr  = basic_string<_Outchar, _Outtraits, _Outalloc>;\r\n    static _Outstr&& _Cvt(_Outstr& _Str, const _Inchar* _First, size_t _Size,\r\n        _Unused_parameter = {}) { // convert wchar_t sequence to char32_t string -- Windows\r\n        wstring_convert<codecvt_utf8_utf16<_Inchar>, _Inchar> _Wcvt0;\r\n        _STD string _Str0(_Wcvt0.to_bytes(_First, _First + _Size));\r\n\r\n        wstring_convert<codecvt_utf8<_Outchar>, _Outchar> _Wcvt;\r\n        return _STD move(_Str.append(_Wcvt.from_bytes(_Str0)));\r\n    }\r\n};\r\n\r\ntemplate <class _Outtraits, class _Outalloc>\r\nstruct _Path_cvt<char32_t, wchar_t, _Outtraits,\r\n    _Outalloc> { // converts among {char, wchar_t, UTF8, char16_t, char32_t} paths\r\n    using _Inchar  = char32_t;\r\n    using _Outchar = wchar_t;\r\n    using _Outstr  = basic_string<_Outchar, _Outtraits, _Outalloc>;\r\n    static _Outstr&& _Cvt(_Outstr& _Str, const _Inchar* _First, size_t _Size,\r\n        _Unused_parameter = {}) { // convert char32_t sequence to wchar_t string -- Windows\r\n        wstring_convert<codecvt_utf8<_Inchar>, _Inchar> _Wcvt0;\r\n        _STD string _Str0(_Wcvt0.to_bytes(_First, _First + _Size));\r\n\r\n        wstring_convert<codecvt_utf8_utf16<_Outchar>, _Outchar> _Wcvt;\r\n        return _STD move(_Str.append(_Wcvt.from_bytes(_Str0)));\r\n    }\r\n};\r\n_STL_RESTORE_DEPRECATED_WARNING\r\n\r\nclass path;\r\npath operator/(const path&, const path&);\r\n\r\npath _Absolute(const path&, const path&, error_code&);\r\n// path absolute(const path&, const path& = current_path());\r\n\r\nvoid _Canonicalize_string_only(path&, const path&);\r\n// path canonical(const path&, const path& _Base = current_path());\r\npath canonical(const path&, error_code&);\r\npath canonical(const path&, const path&, error_code&);\r\n\r\nvoid copy(const path&, const path&);\r\nvoid copy(const path&, const path&, error_code&) noexcept;\r\nvoid copy(const path&, const path&, copy_options);\r\nvoid copy(const path&, const path&, copy_options, error_code&) noexcept;\r\n\r\nbool copy_file(const path&, const path&, copy_options = copy_options::none);\r\nbool copy_file(const path&, const path&, error_code&) noexcept;\r\nbool copy_file(const path&, const path&, copy_options, error_code&) noexcept;\r\n\r\nvoid copy_symlink(const path&, const path&);\r\nvoid copy_symlink(const path&, const path&, error_code&) noexcept;\r\n\r\nbool create_directories(const path&);\r\nbool create_directories(const path&, error_code&) noexcept;\r\n\r\nbool create_directory(const path&);\r\nbool create_directory(const path&, error_code&) noexcept;\r\nbool create_directory(const path&, const path&);\r\nbool create_directory(const path&, const path&, error_code&) noexcept;\r\n\r\nvoid create_directory_symlink(const path&, const path&);\r\nvoid create_directory_symlink(const path&, const path&, error_code&) noexcept;\r\n\r\nvoid create_hard_link(const path&, const path&);\r\nvoid create_hard_link(const path&, const path&, error_code&) noexcept;\r\n\r\nvoid create_symlink(const path&, const path&);\r\nvoid create_symlink(const path&, const path&, error_code&) noexcept;\r\n\r\npath current_path();\r\npath current_path(error_code&);\r\nvoid current_path(const path&);\r\nvoid current_path(const path&, error_code&) noexcept;\r\n\r\nbool equivalent(const path&, const path&);\r\nbool equivalent(const path&, const path&, error_code&) noexcept;\r\n\r\nbool exists(file_status) noexcept;\r\nbool exists(const path&);\r\nbool exists(const path&, error_code&) noexcept;\r\n\r\nuintmax_t file_size(const path&);\r\nuintmax_t file_size(const path&, error_code&) noexcept;\r\n\r\nuintmax_t hard_link_count(const path&);\r\nuintmax_t hard_link_count(const path&, error_code&) noexcept;\r\n\r\nbool is_block_file(file_status) noexcept;\r\nbool is_block_file(const path&);\r\nbool is_block_file(const path&, error_code&) noexcept;\r\n\r\nbool is_character_file(file_status) noexcept;\r\nbool is_character_file(const path&);\r\nbool is_character_file(const path&, error_code&) noexcept;\r\n\r\nbool is_directory(file_status) noexcept;\r\nbool is_directory(const path&);\r\nbool is_directory(const path&, error_code&) noexcept;\r\n\r\nbool is_empty(const path&);\r\nbool is_empty(const path&, error_code&) noexcept;\r\n\r\nbool is_fifo(file_status) noexcept;\r\nbool is_fifo(const path&);\r\nbool is_fifo(const path&, error_code&) noexcept;\r\n\r\nbool is_other(file_status) noexcept;\r\nbool is_other(const path&);\r\nbool is_other(const path&, error_code&) noexcept;\r\n\r\nbool is_regular_file(file_status) noexcept;\r\nbool is_regular_file(const path&);\r\nbool is_regular_file(const path&, error_code&) noexcept;\r\n\r\nbool is_socket(file_status) noexcept;\r\nbool is_socket(const path&);\r\nbool is_socket(const path&, error_code&) noexcept;\r\n\r\nbool is_symlink(file_status) noexcept;\r\nbool is_symlink(const path&);\r\nbool is_symlink(const path&, error_code&) noexcept;\r\n\r\nusing file_time_type = chrono::system_clock::time_point;\r\n\r\nfile_time_type last_write_time(const path&, error_code&) noexcept;\r\nfile_time_type last_write_time(const path&);\r\nvoid last_write_time(const path&, file_time_type, error_code&) noexcept;\r\nvoid last_write_time(const path&, file_time_type);\r\n\r\nvoid permissions(const path&, perms);\r\nvoid permissions(const path&, perms, error_code&);\r\n\r\npath read_symlink(const path&);\r\npath read_symlink(const path&, error_code&);\r\n\r\nbool remove(const path&);\r\nbool remove(const path&, error_code&) noexcept;\r\n\r\nuintmax_t remove_all(const path&);\r\nuintmax_t remove_all(const path&, error_code&) noexcept;\r\n\r\nvoid rename(const path&, const path&);\r\nvoid rename(const path&, const path&, error_code&) noexcept;\r\n\r\nvoid resize_file(const path&, uintmax_t);\r\nvoid resize_file(const path&, uintmax_t, error_code&) noexcept;\r\n\r\nspace_info space(const path&);\r\nspace_info space(const path&, error_code&) noexcept;\r\n\r\nfile_status status(const path&);\r\nfile_status status(const path&, error_code&) noexcept;\r\n\r\nbool status_known(file_status) noexcept;\r\n\r\nfile_status symlink_status(const path&);\r\nfile_status symlink_status(const path&, error_code&) noexcept;\r\n\r\npath system_complete(const path&);\r\npath system_complete(const path&, error_code&);\r\n\r\npath temp_directory_path();\r\npath temp_directory_path(error_code&);\r\n\r\ntemplate <class _Path_type>\r\nclass _Path_iterator {\r\npublic:\r\n    using path_type   = _Path_type;\r\n    using string_type = typename _Path_type::string_type;\r\n\r\n    using iterator_category = bidirectional_iterator_tag;\r\n    using value_type        = path_type;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = const value_type*;\r\n    using reference         = const value_type&;\r\n\r\n    _Path_iterator() : _Myptr(nullptr), _Myoff(0) {}\r\n\r\n    _Path_iterator(const path_type& _Path, size_t _Off) : _Myptr(&_Path), _Myoff(_Off) {\r\n        _Getval();\r\n    }\r\n\r\n    _Path_iterator(const _Path_iterator& _Right)\r\n        : _Myptr(_Right._Myptr), _Myelem(_Right._Myelem), _Myoff(_Right._Myoff) {}\r\n\r\n    _Path_iterator& operator=(const _Path_iterator& _Right) {\r\n        _Myptr  = _Right._Myptr;\r\n        _Myelem = _Right._Myelem;\r\n        _Myoff  = _Right._Myoff;\r\n        return *this;\r\n    }\r\n\r\n    _Path_iterator(_Path_iterator&& _Right) noexcept\r\n        : _Myptr(_Right._Myptr), _Myelem(_STD move(_Right._Myelem)), _Myoff(_Right._Myoff) {}\r\n\r\n    _Path_iterator& operator=(_Path_iterator&& _Right) noexcept {\r\n        _Myptr  = _Right._Myptr;\r\n        _Myelem = _STD move(_Right._Myelem);\r\n        _Myoff  = _Right._Myoff;\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD reference operator*() const {\r\n        return _Myelem;\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _Path_iterator& operator++() {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Myptr && _Myoff < _Myptr->_Mystr.size(), \"path::iterator is not incrementable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        const size_t _Pend = _Myptr->_Prefix_end();\r\n        const size_t _Size = _Myptr->_Mystr.size();\r\n\r\n        if (_Myoff < _Pend) {\r\n            _Myoff = _Pend; // point past \"x:\"\r\n        } else if (_Myoff == _Pend && _Pend < _Size\r\n                   && _FS_ISSEP(_Myptr->_Mystr[_Pend])) { // point past root \"/\" and following slashes\r\n            for (++_Myoff; _Myoff < _Size; ++_Myoff) {\r\n                if (!_FS_ISSEP(_Myptr->_Mystr[_Myoff])) {\r\n                    break;\r\n                }\r\n            }\r\n        } else { // point past slashes followed by stuff\r\n            for (; _Myoff < _Size; ++_Myoff) {\r\n                if (!_FS_ISSEP(_Myptr->_Mystr[_Myoff])) {\r\n                    break;\r\n                }\r\n            }\r\n            for (; _Myoff < _Size; ++_Myoff) {\r\n                if (_FS_ISSEP(_Myptr->_Mystr[_Myoff])) {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        _Getval();\r\n        return *this;\r\n    }\r\n\r\n    _Path_iterator operator++(int) {\r\n        _Path_iterator _Tmp = *this;\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _Path_iterator& operator--() {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Myptr && _Myoff != 0, \"path::iterator is not decrementable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        const size_t _Myoff_sav = _Myoff;\r\n        size_t _Off_back        = 0;\r\n        _Myoff                  = 0;\r\n        do { // scan down to previous\r\n            _Off_back = _Myoff;\r\n            ++*this;\r\n        } while (_Myoff < _Myoff_sav);\r\n        _Myoff = _Off_back;\r\n        _Getval();\r\n        return *this;\r\n    }\r\n\r\n    _Path_iterator operator--(int) {\r\n        _Path_iterator _Tmp = *this;\r\n        --*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    _NODISCARD bool operator==(const _Path_iterator& _Right) const {\r\n        return _Myptr == _Right._Myptr && _Myoff == _Right._Myoff;\r\n    }\r\n\r\n    _NODISCARD bool operator!=(const _Path_iterator& _Right) const {\r\n        return !(*this == _Right);\r\n    }\r\n\r\nprivate:\r\n    void _Getval() { // determine _Myelem\r\n        string_type _Str;\r\n        const size_t _Pend = _Myptr->_Prefix_end();\r\n        const size_t _Size = _Myptr->_Mystr.size();\r\n\r\n        if (_Size > _Myoff) {\r\n            if (_Myoff < _Pend) {\r\n                _Str = _Myptr->_Mystr.substr(0, _Pend); // get \"x:\"\r\n            } else if (_Myoff == _Pend && _Pend < _Size && _FS_ISSEP(_Myptr->_Mystr[_Pend])) {\r\n                _Str = _FS_PREF; // get \"/\"\r\n            } else { // determine next field as slashes followed by stuff\r\n                size_t _Nslash = 0;\r\n                size_t _Nstuff = 0;\r\n\r\n                for (; _Myoff + _Nslash < _Size; ++_Nslash) {\r\n                    if (!_FS_ISSEP(_Myptr->_Mystr[_Myoff + _Nslash])) {\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                for (; _Myoff + _Nslash + _Nstuff < _Size; ++_Nstuff) {\r\n                    if (_FS_ISSEP(_Myptr->_Mystr[_Myoff + _Nslash + _Nstuff])) {\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                if (0 < _Nstuff) {\r\n                    _Str = _Myptr->_Mystr.substr(_Myoff + _Nslash, _Nstuff); // get \"stuff\"\r\n                } else if (0 < _Nslash) {\r\n                    _Str = _FS_PERIOD; // get \".\"\r\n                }\r\n            }\r\n        }\r\n\r\n        _Myelem = _Str;\r\n    }\r\n\r\n    const path_type* _Myptr; // pointer to full path\r\n    path_type _Myelem; // current element subpath\r\n    size_t _Myoff; // current offset in full path\r\n};\r\n\r\nclass path { // stores a pathname\r\npublic:\r\n    using value_type  = wchar_t;\r\n    using string_type = basic_string<value_type>;\r\n\r\n    static constexpr value_type preferred_separator = _FS_PREF;\r\n\r\n    path() {}\r\n\r\n    path(const path& _Right) : _Mystr(_Right._Mystr) {}\r\n\r\n    template <class _InIt, enable_if_t<_Is_iterator_v<_InIt>, int> = 0>\r\n    path(_InIt _First, _InIt _Last) {\r\n        using _Valty = _Iter_value_t<_InIt>;\r\n        basic_string<_Valty> _Str(_First, _Last);\r\n        string_type _Str_out;\r\n        *this /= _Path_cvt<_Valty, value_type>::_Cvt(_Str_out, _Str.c_str(), _Str.size());\r\n    }\r\n\r\n    template <class _InIt, enable_if_t<conjunction_v<negation<is_same<_InIt, path>>, _Is_iterator<_InIt>>, int> = 0>\r\n    path(_InIt _First) {\r\n        using _Valty = _Iter_value_t<_InIt>;\r\n        basic_string<_Valty> _Str;\r\n        for (; *_First != _Valty(0); ++_First) {\r\n            _Str += *_First;\r\n        }\r\n\r\n        string_type _Str_out;\r\n        *this /= _Path_cvt<_Valty, value_type>::_Cvt(_Str_out, _Str.c_str(), _Str.size());\r\n    }\r\n\r\n    template <class _Elem, class _Traits, class _Alloc>\r\n    path(const basic_string<_Elem, _Traits, _Alloc>& _Str) {\r\n        string_type _Str_out;\r\n        *this /= _Path_cvt<_Elem, value_type>::_Cvt(_Str_out, _Str.c_str(), _Str.size());\r\n    }\r\n\r\n    template <class _InIt, enable_if_t<_Is_iterator_v<_InIt>, int> = 0>\r\n    path(_InIt _First, _InIt _Last, const locale& _Loc) {\r\n        using _Valty = _Iter_value_t<_InIt>;\r\n        basic_string<_Valty> _Str(_First, _Last);\r\n        string_type _Str_out;\r\n        *this /= _Path_cvt<_Valty, value_type>::_Cvt(_Str_out, _Str.c_str(), _Str.size(), _Loc);\r\n    }\r\n\r\n    template <class _InIt, enable_if_t<_Is_iterator_v<_InIt>, int> = 0>\r\n    path(_InIt _First, const locale& _Loc) {\r\n        using _Valty = _Iter_value_t<_InIt>;\r\n        basic_string<_Valty> _Str;\r\n        for (; *_First != _Valty(0); ++_First) {\r\n            _Str += *_First;\r\n        }\r\n\r\n        string_type _Str_out;\r\n        *this /= _Path_cvt<_Valty, value_type>::_Cvt(_Str_out, _Str.c_str(), _Str.size(), _Loc);\r\n    }\r\n\r\n    template <class _Elem, class _Traits, class _Alloc>\r\n    path(const basic_string<_Elem, _Traits, _Alloc>& _Str, const locale& _Loc) {\r\n        string_type _Str_out;\r\n        *this /= _Path_cvt<_Elem, value_type>::_Cvt(_Str_out, _Str.c_str(), _Str.size(), _Loc);\r\n    }\r\n\r\n    path(path&& _Right) noexcept : _Mystr(_STD move(_Right._Mystr)) {}\r\n\r\n    path& operator=(path&& _Right) noexcept {\r\n        _Mystr = _STD move(_Right._Mystr);\r\n        return *this;\r\n    }\r\n\r\n    ~path() noexcept {}\r\n\r\n    path& operator=(const path& _Right) {\r\n        _Mystr = _Right._Mystr;\r\n        return *this;\r\n    }\r\n\r\n    template <class _InIt>\r\n    path& operator=(_InIt _First) {\r\n        return *this = path{_First};\r\n    }\r\n\r\n    template <class _Elem, class _Traits, class _Alloc>\r\n    path& operator=(const basic_string<_Elem, _Traits, _Alloc>& _Str) {\r\n        return *this = path{_Str};\r\n    }\r\n\r\n    template <class _InIt>\r\n    path& assign(_InIt _First, _InIt _Last) {\r\n        return *this = path{_First, _Last};\r\n    }\r\n\r\n    template <class _InIt>\r\n    path& assign(_InIt _First) {\r\n        return *this = path{_First};\r\n    }\r\n\r\n    template <class _Elem, class _Traits, class _Alloc>\r\n    path& assign(const basic_string<_Elem, _Traits, _Alloc>& _Str) {\r\n        return *this = path{_Str};\r\n    }\r\n\r\n    path& operator/=(const path& _Path) { // append copy\r\n        return append(_Path._Mystr);\r\n    }\r\n\r\n    template <class _InIt>\r\n    path& operator/=(_InIt _First) { // append NTCTS, given iterator\r\n        return append(path{_First}._Mystr);\r\n    }\r\n\r\n    template <class _Elem, class _Traits, class _Alloc>\r\n    path& operator/=(const basic_string<_Elem, _Traits, _Alloc>& _Str) { // append arbitrary source string\r\n        return append(_Str);\r\n    }\r\n\r\n    template <class _InIt>\r\n    path& append(_InIt _First, _InIt _Last) { // append NTCTS\r\n        return append(path{_First, _Last}._Mystr);\r\n    }\r\n\r\n    template <class _InIt>\r\n    path& append(_InIt _First) { // append NTCTS\r\n        return append(path{_First}._Mystr);\r\n    }\r\n\r\n    template <class _Elem, class _Traits, class _Alloc>\r\n    path& append(const basic_string<_Elem, _Traits, _Alloc>& _Str0) { // append arbitrary source string\r\n        string_type _Str(_Str0.size(), L'\\0');\r\n        // convert _Elem and '/' to '\\'\r\n        _STD transform(_Str0.begin(), _Str0.end(), _Str.begin(), [](const _Elem _Ch) static {\r\n            auto _Wch = static_cast<wchar_t>(_Ch);\r\n            if (_Wch == _FS_SLASH) {\r\n                _Wch = _FS_PREF;\r\n            }\r\n\r\n            return _Wch;\r\n        });\r\n\r\n        if (0 < _Mystr.size() && 0 < _Str.size() && _Mystr.back() != _FS_COLON && !_FS_ISSEP(_Mystr.back())\r\n            && !_FS_ISSEP(_Str[0])) {\r\n            _Mystr.push_back(_FS_PREF); // add needed separator\r\n        }\r\n\r\n        _Mystr.append(_Str);\r\n        return *this;\r\n    }\r\n\r\n    path& operator+=(const path& _Path) { // concatenate copy\r\n        return concat(_Path._Mystr);\r\n    }\r\n\r\n    template <class _Ty>\r\n    path& operator+=(_Ty _Val) { // concatenate NTCTS, given iterator/element\r\n        return concat(_Val);\r\n    }\r\n\r\n    template <class _Elem, class _Traits, class _Alloc>\r\n    path& operator+=(const basic_string<_Elem, _Traits, _Alloc>& _Str) { // concatenate arbitrary source string\r\n        return concat(_Str);\r\n    }\r\n\r\n    template <class _Elem>\r\n    path& operator+=(const _Elem* _Ptr) { // concatenate arbitrary NTCTS\r\n        return concat(basic_string<_Elem>(_Ptr));\r\n    }\r\n\r\n    template <class _InIt>\r\n    path& concat(_InIt _First, _InIt _Last) { // concatenate NTCTS\r\n        return concat(path{_First, _Last}._Mystr);\r\n    }\r\n\r\n    template <class _Elem>\r\n    path& concat(const _Elem* _Ptr) { // concatenate arbitrary NTCTS\r\n        return concat(basic_string<_Elem>(_Ptr));\r\n    }\r\n\r\n    template <class _InIt, enable_if_t<_Is_iterator_v<_InIt>, int> = 0>\r\n    path& concat(_InIt _First) { // concatenate NTCTS\r\n        return concat(path{_First}._Mystr);\r\n    }\r\n\r\n    template <class _Elem, enable_if_t<!_Is_iterator_v<_Elem>, int> = 0>\r\n    path& concat(_Elem _Val) { // concatenate element\r\n        return concat(path{basic_string<_Elem>(1, _Val)}._Mystr);\r\n    }\r\n\r\n    template <class _Elem, class _Traits, class _Alloc>\r\n    path& concat(const basic_string<_Elem, _Traits, _Alloc>& _Str) { // concatenate arbitrary source string\r\n        for (const auto& _Ch : _Str) {\r\n            _Mystr.push_back(static_cast<wchar_t>(_Ch));\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    void clear() noexcept { // clear the stored string\r\n        _Mystr.clear();\r\n    }\r\n\r\n    path& make_preferred() { // convert any '/' to '\\'\r\n        _STD replace(_Mystr.begin(), _Mystr.end(), _FS_SLASH, _FS_BSLASH);\r\n        return *this;\r\n    }\r\n\r\n    path& remove_filename() { // remove filename (leaf)\r\n        if (!empty() && begin() != --end()) { // leaf to remove, back up over it\r\n            const size_t _Rend = _Root_end();\r\n            size_t _Idx        = _Mystr.size();\r\n\r\n            for (; _Rend < _Idx; --_Idx) {\r\n                if (_FS_ISSEP(_Mystr[_Idx - 1])) {\r\n                    break; // back up over stuff at end\r\n                }\r\n            }\r\n\r\n            for (; _Rend < _Idx; --_Idx) {\r\n                if (!_FS_ISSEP(_Mystr[_Idx - 1])) {\r\n                    break; // back up over trailing non-root slashes\r\n                }\r\n            }\r\n\r\n            _Mystr.erase(_Idx);\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    path& replace_filename(const path& _Path) { // replace filename\r\n        remove_filename();\r\n        *this /= _Path;\r\n        return *this;\r\n    }\r\n\r\n    path& replace_extension(const path& _Newext = {}) { // replace extension with _Newext\r\n        if (_Newext.empty() || _Newext.c_str()[0] == _FS_PERIOD) {\r\n            *this = parent_path() / path{stem().native() + _Newext.native()};\r\n        } else {\r\n            *this = parent_path() / path{stem().native() + _FS_PERIOD + _Newext.native()};\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    void swap(path& _Right) noexcept {\r\n        _Mystr.swap(_Right._Mystr);\r\n    }\r\n\r\n    _NODISCARD const string_type& native() const noexcept {\r\n        return _Mystr;\r\n    }\r\n\r\n    _NODISCARD _Ret_z_ const value_type* c_str() const noexcept {\r\n        return _Mystr.c_str();\r\n    }\r\n\r\n    operator string_type() const {\r\n        return _Mystr;\r\n    }\r\n\r\n    template <class _Elem, class _Traits = char_traits<_Elem>, class _Alloc = allocator<_Elem>>\r\n    _NODISCARD basic_string<_Elem, _Traits, _Alloc> string(\r\n        const _Alloc& _Al = _Alloc()) const { // return path as basic_string<_Elem, _Traits, _Alloc>\r\n        basic_string<_Elem, _Traits, _Alloc> _Str(_Al);\r\n        return _Path_cvt<value_type, _Elem>::_Cvt(_Str, _Mystr.c_str(), _Mystr.size());\r\n    }\r\n\r\n    _NODISCARD _STD string string() const { // return path as basic_string<char> native\r\n        _STD string _Str;\r\n        return _Path_cvt<value_type, char>::_Cvt(_Str, _Mystr.c_str(), _Mystr.size());\r\n    }\r\n\r\n    _NODISCARD _STD wstring wstring() const { // return path as basic_string<wchar_t> native\r\n        _STD wstring _Str;\r\n        return _Path_cvt<value_type, wchar_t>::_Cvt(_Str, _Mystr.c_str(), _Mystr.size());\r\n    }\r\n\r\n    _NODISCARD _STD string u8string() const { // return path as basic_string<char> UTF8\r\n        _STD string _Str;\r\n        return _Path_cvt<value_type, _Char8_t, char_traits<char>, allocator<char>>::_Cvt(\r\n            _Str, _Mystr.c_str(), _Mystr.size());\r\n    }\r\n\r\n    _NODISCARD _STD u16string u16string() const { // return path as basic_string<char16_t> UTF16\r\n        _STD u16string _Str;\r\n        return _Path_cvt<value_type, char16_t>::_Cvt(_Str, _Mystr.c_str(), _Mystr.size());\r\n    }\r\n\r\n    _STD u32string u32string() const = delete;\r\n\r\n    string_type _Make_generic() const { // copy and convert any '\\' to '/'\r\n        string_type _Str = _Mystr;\r\n        _STD replace(_Str.begin(), _Str.end(), _FS_BSLASH, _FS_SLASH);\r\n        return _Str;\r\n    }\r\n\r\n    template <class _Elem, class _Traits = char_traits<_Elem>, class _Alloc = allocator<_Elem>>\r\n    _NODISCARD basic_string<_Elem, _Traits, _Alloc> generic_string(\r\n        const _Alloc& _Al = _Alloc()) const { // return path as basic_string<_Elem, _Traits, _Alloc>\r\n        basic_string<_Elem, _Traits, _Alloc> _Str(_Al);\r\n        const string_type _Genstr = _Make_generic();\r\n        return _Path_cvt<value_type, _Elem>::_Cvt(_Str, _Genstr.c_str(), _Genstr.size());\r\n    }\r\n\r\n    _NODISCARD _STD string generic_string() const { // return path as basic_string<char> native\r\n        _STD string _Str;\r\n        const string_type _Genstr = _Make_generic();\r\n        return _Path_cvt<value_type, char>::_Cvt(_Str, _Genstr.c_str(), _Genstr.size());\r\n    }\r\n\r\n    _NODISCARD _STD wstring generic_wstring() const { // return path as basic_string<wchar_t> native\r\n        _STD wstring _Str;\r\n        const string_type _Genstr = _Make_generic();\r\n        return _Path_cvt<value_type, wchar_t>::_Cvt(_Str, _Genstr.c_str(), _Genstr.size());\r\n    }\r\n\r\n    _NODISCARD _STD string generic_u8string() const { // return path as basic_string<char> UTF8\r\n        _STD string _Str;\r\n        const string_type _Genstr = _Make_generic();\r\n        return _Path_cvt<value_type, _Char8_t, char_traits<char>, allocator<char>>::_Cvt(\r\n            _Str, _Genstr.c_str(), _Genstr.size());\r\n    }\r\n\r\n    _NODISCARD _STD u16string generic_u16string() const { // return path as basic_string<char16_t> UTF16\r\n        _STD u16string _Str;\r\n        const string_type _Genstr = _Make_generic();\r\n        return _Path_cvt<value_type, char16_t>::_Cvt(_Str, _Genstr.c_str(), _Genstr.size());\r\n    }\r\n\r\n    _STD u32string generic_u32string() const = delete;\r\n\r\n    _NODISCARD int compare(const path& _Path) const noexcept { // compare native() to _Path.native()\r\n        return _Mystr.compare(_Path._Mystr);\r\n    }\r\n\r\n    _NODISCARD int compare(const string_type& _Str) const { // compare native() to string\r\n        return _Mystr.compare(_Str);\r\n    }\r\n\r\n    _NODISCARD int compare(const value_type* _Ptr) const { // compare native() to NTCS\r\n        return _Mystr.compare(_Ptr);\r\n    }\r\n\r\n    _NODISCARD path root_name() const {\r\n        return path{_Mystr.substr(0, _Prefix_end())};\r\n    }\r\n\r\n    _NODISCARD path root_directory() const {\r\n        const size_t _Idx = _Prefix_end();\r\n        if (_Idx < _Mystr.size() && _FS_ISSEP(_Mystr[_Idx])) {\r\n            return path{string_type(1, _FS_PREF)};\r\n        } else {\r\n            return {};\r\n        }\r\n    }\r\n\r\n    _NODISCARD path root_path() const {\r\n        return path{_Mystr.c_str(), _Mystr.c_str() + _Root_end()};\r\n    }\r\n\r\n    _NODISCARD path relative_path() const {\r\n        size_t _Idx = _Root_end();\r\n        while (_Idx < _Mystr.size() && _FS_ISSEP(_Mystr[_Idx])) {\r\n            ++_Idx; // skip extra '/' after root\r\n        }\r\n\r\n        return path{_Mystr.substr(_Idx)};\r\n    }\r\n\r\n    _NODISCARD path parent_path() const {\r\n        path _Ans;\r\n        if (!empty()) { // append all but last element\r\n            iterator _End = --end();\r\n            for (iterator _Next = begin(); _Next != _End; ++_Next) {\r\n                _Ans /= *_Next;\r\n            }\r\n        }\r\n        return _Ans;\r\n    }\r\n\r\n    _NODISCARD path filename() const {\r\n        return empty() ? path{} : path{*--end()};\r\n    }\r\n\r\n    _NODISCARD path stem() const { // pick off stem (basename) in filename (leaf) before dot\r\n        string_type _Str0 = filename().native();\r\n        string_type _Str1 = extension().native();\r\n        _Str0.resize(_Str0.size() - _Str1.size());\r\n        return path{_Str0};\r\n    }\r\n\r\n    _NODISCARD path extension() const { // pick off .extension in filename (leaf), including dot\r\n        string_type _Str  = filename().native();\r\n        const size_t _Idx = _Str.rfind(_FS_PERIOD);\r\n        return _Idx == string_type::npos // no .\r\n                    || _Str.size() == 1 // only .\r\n                    || (_Str.size() == 2 && _Str[0] == _FS_PERIOD && _Str[1] == _FS_PERIOD) // only ..\r\n                 ? path{}\r\n                 : path{_Str.substr(_Idx)};\r\n    }\r\n\r\n    _NODISCARD bool empty() const noexcept {\r\n        return _Mystr.empty();\r\n    }\r\n\r\n    _NODISCARD bool has_root_name() const {\r\n        return !root_name().empty();\r\n    }\r\n\r\n    _NODISCARD bool has_root_directory() const {\r\n        return !root_directory().empty();\r\n    }\r\n\r\n    _NODISCARD bool has_root_path() const {\r\n        return !root_path().empty();\r\n    }\r\n\r\n    _NODISCARD bool has_relative_path() const {\r\n        return !relative_path().empty();\r\n    }\r\n\r\n    _NODISCARD bool has_parent_path() const {\r\n        return !parent_path().empty();\r\n    }\r\n\r\n    _NODISCARD bool has_filename() const {\r\n        return !filename().empty();\r\n    }\r\n\r\n    _NODISCARD bool has_stem() const {\r\n        return !stem().empty();\r\n    }\r\n\r\n    _NODISCARD bool has_extension() const {\r\n        return !extension().empty();\r\n    }\r\n\r\n    _NODISCARD bool is_absolute() const {\r\n        return has_root_name() && has_root_directory();\r\n    }\r\n\r\n    _NODISCARD bool is_relative() const {\r\n        return !is_absolute();\r\n    }\r\n\r\n    using iterator       = _Path_iterator<path>;\r\n    using const_iterator = iterator;\r\n\r\n    _NODISCARD iterator begin() const {\r\n        return iterator(*this, 0);\r\n    }\r\n\r\n    _NODISCARD iterator end() const {\r\n        return iterator(*this, _Mystr.size());\r\n    }\r\n\r\n    size_t _Prefix_end() const {\r\n        if (2 < _Mystr.size() && _FS_ISSEP(_Mystr[0]) && _FS_ISSEP(_Mystr[1])\r\n            && !_FS_ISSEP(_Mystr[2])) { // network name, pick off \\\\name\r\n            size_t _Idx = 3;\r\n            while (_Idx < _Mystr.size() && !_FS_ISSEP(_Mystr[_Idx])) {\r\n                ++_Idx;\r\n            }\r\n\r\n            return _Idx;\r\n        } else { // no network name, pick off drive:\r\n            size_t _Idx = _Mystr.find(_FS_COLON, 0);\r\n            if (_Idx == _Mystr.npos) {\r\n                _Idx = 0;\r\n            } else {\r\n                ++_Idx;\r\n            }\r\n\r\n            return _Idx;\r\n        }\r\n    }\r\n\r\n    size_t _Root_end() const {\r\n        size_t _Idx = _Prefix_end();\r\n        if (_Idx < _Mystr.size() && _FS_ISSEP(_Mystr[_Idx])) {\r\n            ++_Idx;\r\n        }\r\n\r\n        return _Idx;\r\n    }\r\n\r\n    string_type _Mystr;\r\n};\r\n\r\ninline void swap(path& _Left, path& _Right) noexcept {\r\n    _Left.swap(_Right);\r\n}\r\n\r\n_NODISCARD inline size_t hash_value(const path& _Path) noexcept {\r\n    return hash<path::string_type>()(_Path.native());\r\n}\r\n\r\n_NODISCARD inline bool operator==(const path& _Left, const path& _Right) noexcept {\r\n    return _Left.native() == _Right.native();\r\n}\r\n\r\n_NODISCARD inline bool operator!=(const path& _Left, const path& _Right) noexcept {\r\n    return !(_Left == _Right);\r\n}\r\n\r\n_NODISCARD inline bool operator<(const path& _Left, const path& _Right) noexcept {\r\n    return _Left.native() < _Right.native();\r\n}\r\n\r\n_NODISCARD inline bool operator<=(const path& _Left, const path& _Right) noexcept {\r\n    return !(_Right < _Left);\r\n}\r\n\r\n_NODISCARD inline bool operator>(const path& _Left, const path& _Right) noexcept {\r\n    return _Right < _Left;\r\n}\r\n\r\n_NODISCARD inline bool operator>=(const path& _Left, const path& _Right) noexcept {\r\n    return !(_Left < _Right);\r\n}\r\n\r\n_NODISCARD inline path operator/(const path& _Left, const path& _Right) { // concatenate paths\r\n    path _Ans = _Left;\r\n    _Ans /= _Right;\r\n    return _Ans;\r\n}\r\n\r\ntemplate <class _Elem, class _Traits>\r\nbasic_ostream<_Elem, _Traits>& operator<<(basic_ostream<_Elem, _Traits>& _Ostr, const path& _Path) { // insert a path\r\n    return _Ostr << _Path.string<_Elem, _Traits, allocator<_Elem>>();\r\n}\r\n\r\ntemplate <class _Elem, class _Traits>\r\nbasic_istream<_Elem, _Traits>& operator>>(basic_istream<_Elem, _Traits>& _Istr, path& _Path) { // extract a path\r\n    basic_string<_Elem, _Traits> _Str;\r\n    _Istr >> _Str;\r\n    _Path = _Str;\r\n    return _Istr;\r\n}\r\n\r\ntemplate <class _InIt, enable_if_t<_Is_iterator_v<_InIt>, int> = 0>\r\n_NODISCARD path u8path(_InIt _First, _InIt _Last) { // make path from [_First, _Last) UTF8, given iterators\r\n    string _Str(_First, _Last);\r\n    path::string_type _Str_out;\r\n    return path{_Path_cvt<_Char8_t, wchar_t>::_Cvt(_Str_out, _Str.c_str(), _Str.size())};\r\n}\r\n\r\ntemplate <class _InIt, enable_if_t<_Is_iterator_v<_InIt>, int> = 0>\r\n_NODISCARD path u8path(_InIt _First) { // make path from NTBS UTF8, given iterator\r\n    string _Str;\r\n    for (; *_First != '\\0'; ++_First) {\r\n        _Str += *_First;\r\n    }\r\n\r\n    path::string_type _Str_out;\r\n    return path{_Path_cvt<_Char8_t, wchar_t>::_Cvt(_Str_out, _Str.c_str(), _Str.size())};\r\n}\r\n\r\ntemplate <class _Traits, class _Alloc>\r\n_NODISCARD path u8path(const basic_string<char, _Traits, _Alloc>& _Str) { // make path from arbitrary char string UTF8\r\n    path::string_type _Str_out;\r\n    return path{_Path_cvt<_Char8_t, wchar_t>::_Cvt(_Str_out, _Str.c_str(), _Str.size())};\r\n}\r\n\r\nclass _NODISCARD filesystem_error : public system_error { // base of all filesystem-error exceptions\r\npublic:\r\n    explicit filesystem_error(\r\n        const string& _Message, error_code _Errcode = make_error_code(errc::operation_not_permitted))\r\n        : system_error(_Errcode, _Message) {}\r\n\r\n    filesystem_error(const string& _Message, const path& _Path1, error_code _Errcode)\r\n        : system_error(_Errcode, _Message), _Mypval1(_Path1) {}\r\n\r\n    filesystem_error(const string& _Message, const path& _Path1, const path& _Path2, error_code _Errcode)\r\n        : system_error(_Errcode, _Message), _Mypval1(_Path1), _Mypval2(_Path2) {}\r\n\r\n    __CLR_OR_THIS_CALL ~filesystem_error() noexcept override {}\r\n\r\n    filesystem_error(filesystem_error&& _Right) noexcept\r\n        : system_error(_Right.code(), _Right.what()), _Mypval1(_STD move(_Right._Mypval1)),\r\n          _Mypval2(_STD move(_Right._Mypval2)) {}\r\n\r\n    filesystem_error& operator=(filesystem_error&& _Right) noexcept {\r\n        static_cast<system_error&>(*this) = _Right;\r\n        _Mypval1                          = _STD move(_Right._Mypval1);\r\n        _Mypval2                          = _STD move(_Right._Mypval2);\r\n        return *this;\r\n    }\r\n\r\n    _NODISCARD const path& path1() const noexcept {\r\n        return _Mypval1;\r\n    }\r\n\r\n    _NODISCARD const path& path2() const noexcept {\r\n        return _Mypval2;\r\n    }\r\n\r\n    filesystem_error(const filesystem_error&)            = default;\r\n    filesystem_error& operator=(const filesystem_error&) = default;\r\n\r\nprivate:\r\n    path _Mypval1;\r\n    path _Mypval2;\r\n\r\n#if !_HAS_EXCEPTIONS\r\nprotected:\r\n    __CLR_OR_THIS_CALL void _Doraise() const override { // perform class-specific exception handling\r\n        _RAISE(*this);\r\n    }\r\n#endif // !_HAS_EXCEPTIONS\r\n};\r\n\r\n[[noreturn]] inline void _Throw_filesystem_error(const char* const _Message) {\r\n    _THROW(filesystem_error{_Message}); // centralize construction of temporary string\r\n}\r\n\r\nclass directory_entry { // represents a directory entry\r\npublic:\r\n    using string_type = _FSPFX path::string_type;\r\n\r\n    directory_entry() : _Mystat(), _Mysymstat() {}\r\n\r\n    directory_entry(const directory_entry&)            = default;\r\n    directory_entry& operator=(const directory_entry&) = default;\r\n\r\n    directory_entry(directory_entry&&)            = default;\r\n    directory_entry& operator=(directory_entry&&) = default;\r\n\r\n    explicit directory_entry(\r\n        const _FSPFX path& _Path, file_status _Statarg = file_status{}, file_status _Symstatarg = file_status{})\r\n        : _Mypval(_Path), _Mystat(_Statarg), _Mysymstat(_Symstatarg) {}\r\n\r\n    void assign(\r\n        const _FSPFX path& _Path, file_status _Statarg = file_status{}, file_status _Symstatarg = file_status{}) {\r\n        _Mypval    = _Path;\r\n        _Mystat    = _Statarg;\r\n        _Mysymstat = _Symstatarg;\r\n    }\r\n\r\n    void replace_filename(const _FSPFX path& _Path, file_status _Statarg = file_status{},\r\n        file_status _Symstatarg = file_status{}) { // replace filename and assign status\r\n        _Mypval    = _Mypval.parent_path() / _Path;\r\n        _Mystat    = _Statarg;\r\n        _Mysymstat = _Symstatarg;\r\n    }\r\n\r\n    operator const _FSPFX path&() const noexcept {\r\n        return _Mypval;\r\n    }\r\n\r\n    _NODISCARD const _FSPFX path& path() const noexcept {\r\n        return _Mypval;\r\n    }\r\n\r\n    _NODISCARD file_status status() const {\r\n        error_code _Code;\r\n        return status(_Code);\r\n    }\r\n\r\n    _NODISCARD file_status status(error_code& _Code) const noexcept {\r\n        _Code.clear();\r\n        if (!status_known(_Mystat)) {\r\n            if (status_known(_Mysymstat) && !is_symlink(_Mysymstat)) {\r\n                _Mystat = _Mysymstat;\r\n            } else {\r\n                _Mystat = _FSPFX status(_Mypval, _Code);\r\n            }\r\n        }\r\n\r\n        return _Mystat;\r\n    }\r\n\r\n    _NODISCARD file_status symlink_status() const {\r\n        error_code _Code;\r\n        return symlink_status(_Code);\r\n    }\r\n\r\n    _NODISCARD file_status symlink_status(error_code& _Code) const noexcept {\r\n        _Code.clear();\r\n        if (!status_known(_Mysymstat)) {\r\n            _Mysymstat = _FSPFX symlink_status(_Mypval, _Code);\r\n        }\r\n\r\n        return _Mysymstat;\r\n    }\r\n\r\n    _NODISCARD bool operator==(const directory_entry& _Right) const noexcept {\r\n        return _Mypval == _Right._Mypval;\r\n    }\r\n\r\n    _NODISCARD bool operator!=(const directory_entry& _Right) const noexcept {\r\n        return !(*this == _Right);\r\n    }\r\n\r\n    _NODISCARD bool operator<(const directory_entry& _Right) const noexcept {\r\n        return _Mypval < _Right._Mypval;\r\n    }\r\n\r\n    _NODISCARD bool operator>(const directory_entry& _Right) const noexcept {\r\n        return _Right < *this;\r\n    }\r\n    _NODISCARD bool operator<=(const directory_entry& _Right) const noexcept {\r\n        return !(_Right < *this);\r\n    }\r\n\r\n    _NODISCARD bool operator>=(const directory_entry& _Right) const noexcept {\r\n        return !(*this < _Right);\r\n    }\r\n\r\nprivate:\r\n    _FSPFX path _Mypval;\r\n    mutable file_status _Mystat;\r\n    mutable file_status _Mysymstat;\r\n};\r\n\r\ntemplate <class _Prefix_directory>\r\nclass _Directory_iterator {\r\npublic:\r\n    using string_type = path::string_type;\r\n\r\n    using iterator_category = input_iterator_tag;\r\n    using value_type        = directory_entry;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = const value_type*;\r\n    using reference         = const value_type&;\r\n\r\n    _Directory_iterator() noexcept : _Mypdir(new void*(nullptr), &_Delptr) {}\r\n\r\n    explicit _Directory_iterator(const path& _Path) : _Mypdir(new void*(nullptr), &_Delptr), _Mydirpath(_Path) {\r\n        typename string_type::value_type _Dest[_MAX_FILESYS_NAME];\r\n        int _Errno = 0;\r\n        file_type _Ftype;\r\n\r\n        *_Mypdir = _Open_dir(_Dest, _Path.c_str(), _Errno, _Ftype);\r\n        if (*_Mypdir) {\r\n            _Form_name(_Dest, _Ftype);\r\n        }\r\n    }\r\n\r\n    _Directory_iterator(const path& _Path, error_code& _Code) noexcept\r\n        : _Mypdir(new void*(nullptr), &_Delptr), _Mydirpath(_Path) {\r\n        typename string_type::value_type _Dest[_MAX_FILESYS_NAME];\r\n        int _Errno = 0;\r\n        file_type _Ftype;\r\n\r\n        *_Mypdir = _Open_dir(_Dest, _Path.c_str(), _Errno, _Ftype);\r\n        if (*_Mypdir) {\r\n            _Form_name(_Dest, _Ftype);\r\n        }\r\n\r\n        _Code = error_code(_Errno, _STD system_category());\r\n    }\r\n\r\n    _Directory_iterator(const _Directory_iterator&)            = default;\r\n    _Directory_iterator& operator=(const _Directory_iterator&) = default;\r\n\r\n    _Directory_iterator(_Directory_iterator&&)            = default;\r\n    _Directory_iterator& operator=(_Directory_iterator&&) = default;\r\n\r\n    _NODISCARD const value_type& operator*() const {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(*_Mypdir, \"directory_iterator is not dereferenceable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return _Myentry;\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    _Directory_iterator& operator++() {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(*_Mypdir, \"directory_iterator is not incrementable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        _Get();\r\n        return *this;\r\n    }\r\n\r\n    _Directory_iterator& increment(error_code& _Code) noexcept {\r\n        _Code.clear();\r\n        if (_Mypdir && *_Mypdir) {\r\n            _Get();\r\n        } else {\r\n            _Code = make_error_code(errc::operation_not_permitted);\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    _Directory_iterator operator++(int) {\r\n        _Directory_iterator _Tmp = *this;\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    bool _Equal(const _Directory_iterator& _Right) const {\r\n        if (_Mypdir.get() && _Right._Mypdir.get()) {\r\n            return *_Mypdir == *_Right._Mypdir;\r\n        }\r\n\r\n        return !_Mypdir.get() && !_Right._Mypdir.get();\r\n    }\r\n\r\nprivate:\r\n    static void _Delptr(void** _Ptr) { // close directory and delete pointer\r\n        if (_Ptr && *_Ptr) {\r\n            _Close_dir(*_Ptr);\r\n        }\r\n\r\n        delete _Ptr;\r\n    }\r\n\r\n    void _Get() { // peek at next input element\r\n        if (*_Mypdir) { // read a directory entry\r\n            typename string_type::value_type _Dest[_MAX_FILESYS_NAME];\r\n            file_type _Ftype;\r\n            if (_Read_dir(_Dest, *_Mypdir, _Ftype)[0] == 0) { // end of directory, close it\r\n                _Close_dir(*_Mypdir);\r\n                *_Mypdir = nullptr; // end of directory\r\n            } else {\r\n                _Form_name(_Dest, _Ftype);\r\n            }\r\n        }\r\n    }\r\n\r\n    void _Form_name(typename string_type::value_type* _Filename, file_type _Ftype) {\r\n        if constexpr (_Prefix_directory::value) {\r\n            // set entry to _Mydirpath/_Filename\r\n            _Myentry.assign(_Mydirpath / path{_Filename}, file_status{_Ftype});\r\n        } else {\r\n            // set entry to _Filename\r\n            _Myentry.assign(path{_Filename}, file_status{_Ftype});\r\n        }\r\n    }\r\n\r\n    shared_ptr<void*> _Mypdir;\r\n    path _Mydirpath;\r\n    value_type _Myentry;\r\n};\r\n\r\ntemplate <class _Prefix_directory>\r\n_NODISCARD bool operator==(\r\n    const _Directory_iterator<_Prefix_directory>& _Left, const _Directory_iterator<_Prefix_directory>& _Right) {\r\n    return _Left._Equal(_Right);\r\n}\r\n\r\ntemplate <class _Prefix_directory>\r\n_NODISCARD bool operator!=(\r\n    const _Directory_iterator<_Prefix_directory>& _Left, const _Directory_iterator<_Prefix_directory>& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\nusing directory_iterator = _Directory_iterator<true_type>;\r\n\r\n_NODISCARD inline const directory_iterator& begin(const directory_iterator& _Iter) noexcept {\r\n    return _Iter;\r\n}\r\n\r\n_NODISCARD inline directory_iterator end(const directory_iterator&) noexcept {\r\n    return {};\r\n}\r\n\r\nclass recursive_directory_iterator {\r\npublic:\r\n    using _Myiter     = _Directory_iterator<false_type>;\r\n    using _Mypair     = pair<_Myiter, path>;\r\n    using string_type = path::string_type;\r\n    using char_type   = string_type::value_type;\r\n\r\n    using iterator_category = input_iterator_tag;\r\n    using value_type        = directory_entry;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = const value_type*;\r\n    using reference         = const value_type&;\r\n\r\n    recursive_directory_iterator() noexcept\r\n        : _Mylist(1, _Mypair()), _Myentry(), _No_push(false), _Options(directory_options::none) {}\r\n\r\n    explicit recursive_directory_iterator(const path& _Path, directory_options _Opts = directory_options::none)\r\n        : _Mylist(1, _Mypair(_Myiter(_Path), _Path)), _Myentry(), _No_push(false), _Options(_Opts) {\r\n        _Get();\r\n    }\r\n\r\n    recursive_directory_iterator(const path& _Path, directory_options _Opts, error_code& _Code) noexcept\r\n        : _Mylist(1, _Mypair(_Myiter(_Path), _Path)), _Myentry(), _No_push(false), _Options(_Opts) {\r\n        _Code.clear();\r\n        _Get();\r\n    }\r\n\r\n    recursive_directory_iterator(const path& _Path, error_code& _Code) noexcept\r\n        : _Mylist(1, _Mypair(_Myiter(_Path), _Path)), _Myentry(), _No_push(false), _Options(directory_options::none) {\r\n        _Code.clear();\r\n        _Get();\r\n    }\r\n\r\n    recursive_directory_iterator(const recursive_directory_iterator&)            = default;\r\n    recursive_directory_iterator& operator=(const recursive_directory_iterator&) = default;\r\n\r\n    recursive_directory_iterator(recursive_directory_iterator&&)            = default;\r\n    recursive_directory_iterator& operator=(recursive_directory_iterator&&) = default;\r\n\r\n    _NODISCARD directory_options options() const {\r\n        return _Options;\r\n    }\r\n\r\n    _NODISCARD int depth() const {\r\n        return static_cast<int>(_Mylist.size()) - 1;\r\n    }\r\n\r\n    _NODISCARD bool recursion_pending() const {\r\n        return !_No_push;\r\n    }\r\n\r\n    void pop() { // pop a level\r\n        if (_Mylist.size() > 1) {\r\n            _Mylist.pop_front(); // something to pop, do it\r\n        }\r\n    }\r\n\r\n    void disable_recursion_pending() { // disable directory recursion\r\n        _No_push = true;\r\n    }\r\n\r\n    _NODISCARD const value_type& operator*() const {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mylist.front().first != _Myiter(), \"recursive_directory_iterator is not dereferenceable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        return _Myentry;\r\n    }\r\n\r\n    _NODISCARD pointer operator->() const {\r\n        return pointer_traits<pointer>::pointer_to(**this);\r\n    }\r\n\r\n    recursive_directory_iterator& operator++() {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        _STL_VERIFY(_Mylist.front().first != _Myiter(), \"recursive_directory_iterator is not incrementable\");\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n        if (_No_push || !is_directory(_Mylist.front().first->status())\r\n            || (_Options != directory_options::follow_directory_symlink\r\n                && is_symlink(_Mylist.front().first->status()))) {\r\n            _No_push = false;\r\n            ++_Mylist.front().first;\r\n        } else { // push down a subdirectory\r\n            path _Newpath = _Mylist.front().second / _Mylist.front().first->path();\r\n            ++_Mylist.front().first;\r\n            _Mylist.emplace_front(_Myiter(_Newpath), _Newpath);\r\n        }\r\n        while (1 < _Mylist.size() && _Mylist.front().first == _Myiter()) {\r\n            pop();\r\n        }\r\n\r\n        _Get();\r\n        return *this;\r\n    }\r\n\r\n    recursive_directory_iterator& increment(error_code& _Code) noexcept {\r\n        _Code.clear();\r\n        if (_Mylist.front().first == _Myiter()) {\r\n            _Code = make_error_code(errc::operation_not_permitted);\r\n        } else {\r\n            ++*this;\r\n        }\r\n\r\n        return *this;\r\n    }\r\n\r\n    recursive_directory_iterator operator++(int) {\r\n        recursive_directory_iterator _Tmp = *this;\r\n        ++*this;\r\n        return _Tmp;\r\n    }\r\n\r\n    bool _Equal(const recursive_directory_iterator& _Right) const {\r\n        return _Mylist.front().first == _Right._Mylist.front().first;\r\n    }\r\n\r\n    void _Get() { // prime _Myentry for future gets\r\n        if (_Mylist.front().first != _Myiter()) { // item present, get it\r\n            value_type _Dentry = *_Mylist.front().first;\r\n            _Myentry.assign(_Mylist.front().second / _Dentry.path(), _Dentry.status(), _Dentry.symlink_status());\r\n        }\r\n    }\r\n\r\nprivate:\r\n    list<_Mypair> _Mylist;\r\n    value_type _Myentry;\r\n    bool _No_push;\r\n    directory_options _Options;\r\n};\r\n\r\n_NODISCARD inline bool operator==(\r\n    const recursive_directory_iterator& _Left, const recursive_directory_iterator& _Right) {\r\n    return _Left._Equal(_Right);\r\n}\r\n\r\n_NODISCARD inline bool operator!=(\r\n    const recursive_directory_iterator& _Left, const recursive_directory_iterator& _Right) {\r\n    return !(_Left == _Right);\r\n}\r\n\r\n_NODISCARD inline const recursive_directory_iterator& begin(const recursive_directory_iterator& _Iter) noexcept {\r\n    return _Iter;\r\n}\r\n\r\n_NODISCARD inline recursive_directory_iterator end(const recursive_directory_iterator&) noexcept {\r\n    return {};\r\n}\r\n\r\ninline path _Absolute(const path& _Path, const path& _Base,\r\n    error_code& _Code) { // make absolute path from _Path and directory _Base; errors in _Code\r\n    _Code.clear();\r\n    const bool _Path_has_root_name      = _Path.has_root_name();\r\n    const bool _Path_has_root_directory = _Path.has_root_directory();\r\n    if (_Path_has_root_name && _Path_has_root_directory) {\r\n        return _Path; // fine as is\r\n    }\r\n\r\n    path _Current = current_path(_Code);\r\n    if (_Code) {\r\n        return {};\r\n    }\r\n\r\n    path _Abs_base = _Absolute(_Base, _Current, _Code);\r\n    if (_Code) {\r\n        return {};\r\n    }\r\n\r\n    if (_Path_has_root_name) { // insert _Base\r\n        return _Path.root_name() / _Abs_base.root_directory() / _Abs_base.relative_path() / _Path.relative_path();\r\n    } else if (_Path_has_root_directory) {\r\n        return _Abs_base.root_name() / _Path; // prepend root name of base\r\n    } else {\r\n        return _Abs_base / _Path; // prepend absolute name of base\r\n    }\r\n}\r\n\r\n_NODISCARD inline path absolute(const path& _Path,\r\n    const path& _Base = current_path()) { // make absolute path from _Path and directory _Base\r\n    error_code _Code;\r\n    path _Result = _Absolute(_Path, _Base, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"absolute(p1, p2): current_path() couldn't get current working directory\");\r\n    }\r\n\r\n    return _Result;\r\n}\r\n\r\ninline void _Canonicalize_string_only(\r\n    path& _Canon_path, const path& _Abs_path) { // transform absolute path _Abs_path, removing .s, and ..s,\r\n                                                // using string manipulations (rather than platform support)\r\n    vector<path> _Components;\r\n    path::const_iterator _Abs_path_next      = _Abs_path.begin();\r\n    const path::const_iterator _Abs_path_end = _Abs_path.end();\r\n    // This is safe because we have already made the path absolute\r\n    _Canon_path /= *_Abs_path_next; // root_name\r\n    ++_Abs_path_next;\r\n    _Canon_path /= *_Abs_path_next; // root_directory\r\n    ++_Abs_path_next;\r\n    for (; _Abs_path_next != _Abs_path_end; ++_Abs_path_next) {\r\n        const auto _Cstr = _Abs_path_next->c_str();\r\n        if (_Cstr[0] == _FS_PERIOD) {\r\n            if (_Cstr[1] == static_cast<path::value_type>(0)) {\r\n                continue; // consume \".\"\r\n            } else if (_Cstr[1] == _FS_PERIOD && _Cstr[2] == static_cast<path::value_type>(0)) {\r\n                // If no parent is found to remove with .., ignore ..\r\n                // (that is, C:\\..\\..\\..\\Meow canonicalizes to C:\\Meow)\r\n                if (!_Components.empty()) {\r\n                    _Components.pop_back();\r\n                }\r\n\r\n                continue; // consume \"..\"\r\n            }\r\n        }\r\n\r\n        _Components.push_back(*_Abs_path_next);\r\n    }\r\n\r\n    for (const auto& _Component : _Components) {\r\n        _Canon_path /= _Component;\r\n    }\r\n}\r\n\r\n_NODISCARD inline path canonical(const path& _Path,\r\n    const path& _Base = current_path()) { // make absolute path from _Path, _Base with no ., .., or symlink\r\n    error_code _Code;\r\n    path _Ans = canonical(_Path, _Base, _Code);\r\n\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"canonical(p1, p2): invalid arguments\");\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_NODISCARD inline path canonical(const path& _Path,\r\n    error_code& _Code) { // make absolute path from _Path with no ., .., or symlink\r\n    path _Current = current_path(_Code);\r\n    if (_Code) {\r\n        return {};\r\n    }\r\n\r\n    return canonical(_Path, _Current, _Code);\r\n}\r\n\r\n_NODISCARD inline path canonical(const path& _Path, const path& _Base,\r\n    error_code& _Code) { // make absolute path from _Path, _Base with no \".\", \"..\", symlink\r\n    _Code.clear();\r\n    path _Canon_path; // NRVO this variable\r\n    path _Abs_path = _Absolute(_Path, _Base, _Code);\r\n    if (_Code) {\r\n        return _Canon_path;\r\n    }\r\n\r\n    if (_Abs_path.native().size() >= _MAX_FILESYS_NAME) {\r\n        _Code = make_error_code(errc::filename_too_long);\r\n        return _Canon_path;\r\n    }\r\n\r\n    _Canonicalize_string_only(_Canon_path, _Abs_path);\r\n    return _Canon_path;\r\n}\r\n\r\ninline bool _Copy_options_indicate_recursive_copy(\r\n    copy_options _Opts) { // Checks a copy_options for whether copy should call itself recursively\r\n    if (_Opts == copy_options::none) {\r\n        // This supports \"copying a directory\" as copying the directory and\r\n        // files therein but not subdirectories.\r\n        return true;\r\n    }\r\n\r\n    if ((_Opts & copy_options::recursive) != copy_options::none) {\r\n        return true;\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\ninline void copy(const path& _Oldpval, const path& _Newpval) { // copy _Oldpval to _Newpval, general\r\n    error_code _Code;\r\n\r\n    copy(_Oldpval, _Newpval, copy_options::none, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"copy(p1, p2): invalid arguments\");\r\n    }\r\n}\r\n\r\ninline void copy(const path& _Oldpval, const path& _Newpval,\r\n    error_code& _Code) noexcept { // copy _Oldpval to _Newpval, general\r\n    copy(_Oldpval, _Newpval, copy_options::none, _Code);\r\n}\r\n\r\ninline void copy(const path& _Oldpval, const path& _Newpval,\r\n    copy_options _Opts) { // copy _Oldpval to _Newpval, general\r\n    error_code _Code;\r\n\r\n    copy(_Oldpval, _Newpval, _Opts, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"copy(p1, p2, options): invalid arguments\");\r\n    }\r\n}\r\n\r\ninline void copy(const path& _Oldpval, const path& _Newpval, copy_options _Opts,\r\n    error_code& _Code) noexcept { // copy _Oldpval to _Newpval, general\r\n    file_status _Oldstat;\r\n    file_status _Newstat;\r\n    error_code _Code2;\r\n\r\n    _Code.clear();\r\n    if ((_Opts & copy_options::create_symlinks) != copy_options::none\r\n        || (_Opts & copy_options::skip_symlinks) != copy_options::none) { // get symlink status\r\n        _Oldstat = symlink_status(_Oldpval);\r\n        _Newstat = symlink_status(_Newpval);\r\n    } else { // get file status\r\n        _Oldstat = status(_Oldpval);\r\n        _Newstat = status(_Newpval);\r\n    }\r\n\r\n    if (!exists(_Oldstat) || equivalent(_Oldpval, _Newpval, _Code2) || is_other(_Oldstat) || is_other(_Newstat)\r\n        || (is_directory(_Oldstat) && is_regular_file(_Newstat))) {\r\n        _Code = make_error_code(errc::operation_not_permitted);\r\n    } else if (is_symlink(_Oldstat)) {\r\n        if ((_Opts & copy_options::skip_symlinks) == copy_options::none) {\r\n            if (exists(_Newstat) || (_Opts & copy_options::copy_symlinks) == copy_options::none) {\r\n                _Code = make_error_code(errc::operation_not_permitted);\r\n            } else {\r\n                copy_symlink(_Oldpval, _Newpval, _Code);\r\n            }\r\n        }\r\n    } else if (is_regular_file(_Oldstat)) {\r\n        if ((_Opts & copy_options::directories_only) == copy_options::none) {\r\n            if ((_Opts & copy_options::create_symlinks) != copy_options::none) {\r\n                create_symlink(_Oldpval, _Newpval, _Code);\r\n            } else if ((_Opts & copy_options::create_hard_links) != copy_options::none) {\r\n                create_hard_link(_Oldpval, _Newpval, _Code);\r\n            } else if (is_directory(_Newstat)) {\r\n                copy_file(_Oldpval, _Newpval / _Oldpval.filename(), _Opts, _Code);\r\n            } else {\r\n                copy_file(_Oldpval, _Newpval, _Opts, _Code);\r\n            }\r\n        }\r\n    } else if (is_directory(_Oldstat) && _Copy_options_indicate_recursive_copy(_Opts)) { // copy directory recursively\r\n        if (!exists(_Newpval) && !create_directory(_Newpval, _Code) && !_Code) {\r\n            _Code = make_error_code(errc::operation_not_permitted);\r\n        }\r\n\r\n        for (directory_iterator _Next(_Oldpval), _End; !_Code && _Next != _End; ++_Next) {\r\n            copy(_Next->path(), _Newpval / _Next->path().filename(),\r\n                _Opts | copy_options::_Unspecified_recursion_prevention_tag, _Code);\r\n        }\r\n    }\r\n}\r\n\r\ninline bool copy_file(const path& _Oldpval, const path& _Newpval,\r\n    copy_options _Opt /* = copy_options::none */) { // copy _Oldpval to _Newpval\r\n    error_code _Code;\r\n    const bool _Ans = copy_file(_Oldpval, _Newpval, _Opt, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"copy_file(p1, p2, options): invalid arguments\");\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\ninline bool copy_file(const path& _Oldpval, const path& _Newpval,\r\n    error_code& _Code) noexcept { // copy _Oldpval to _Newpval\r\n    return copy_file(_Oldpval, _Newpval, copy_options::none, _Code);\r\n}\r\n\r\ninline bool copy_file(const path& _Oldpval, const path& _Newpval, copy_options _Opt,\r\n    error_code& _Code) noexcept { // copy _Oldpval to _Newpval\r\n    _Opt &= (copy_options::skip_existing | copy_options::overwrite_existing | copy_options::update_existing);\r\n    const bool _Exists = exists(_Newpval);\r\n    file_time_type _Oldtime;\r\n    file_time_type _Newtime;\r\n\r\n    _Code.clear();\r\n    if (_Exists && (_Opt == copy_options::none || equivalent(_Oldpval, _Newpval, _Code))) {\r\n        _Code = make_error_code(errc::file_exists);\r\n        return false;\r\n    }\r\n\r\n    if (_Code) { // equivalent() failed, report error\r\n        return false;\r\n    }\r\n\r\n    if (!_Exists || (_Opt & copy_options::overwrite_existing) != copy_options::none\r\n        || ((_Opt & copy_options::update_existing) != copy_options::none\r\n            && ((void) (_Oldtime = last_write_time(_Oldpval, _Code)), !_Code)\r\n            && ((void) (_Newtime = last_write_time(_Newpval, _Code)), !_Code)\r\n            && _Newtime < _Oldtime)) { // ok to overwrite, if necessary\r\n        if (_Copy_file(_Oldpval.c_str(), _Newpval.c_str()) == 0) {\r\n            return true;\r\n        }\r\n\r\n        _Code = make_error_code(errc::operation_not_permitted);\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\ninline void copy_symlink(const path& _Oldpval, const path& _Newpval) { // copy symlink, file or directory\r\n    error_code _Code;\r\n    copy_symlink(_Oldpval, _Newpval, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"copy_symlink(p1, p2): invalid arguments\");\r\n    }\r\n}\r\n\r\ninline void copy_symlink(const path& _Oldpval, const path& _Newpval,\r\n    error_code& _Code) noexcept { // copy symlink, file or directory\r\n    if (is_directory(_Oldpval)) {\r\n        create_directory_symlink(_Oldpval, _Newpval, _Code);\r\n    } else {\r\n        create_symlink(_Oldpval, _Newpval, _Code);\r\n    }\r\n}\r\n\r\ninline bool create_directories(const path& _Path) { // create directories chain\r\n    error_code _Code;\r\n    const bool _Ans = create_directories(_Path, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"create_directories(p): invalid argument\");\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\ninline bool create_directories(const path& _Path,\r\n    error_code& _Code) noexcept { // create directory chain\r\n    _Code.clear();\r\n    if (_Path.empty()) {\r\n        return false;\r\n    } else if (!exists(_Path)) { // recursively create parent directories, then current\r\n        create_directories(_Path.parent_path(), _Code);\r\n        if (_Code) {\r\n            return false; // report error\r\n        }\r\n\r\n        create_directory(_Path, _Code);\r\n        if (_Code) {\r\n            return false; // report error\r\n        }\r\n\r\n        return true;\r\n    } else if (is_directory(_Path)) {\r\n        return false; // directory already there\r\n    } else { // report bad argument\r\n        _Code = make_error_code(errc::operation_not_permitted);\r\n        return false;\r\n    }\r\n}\r\n\r\ninline bool create_directory(const path& _Path) { // create a directory\r\n    error_code _Code;\r\n    const bool _Ans = create_directory(_Path, _Code);\r\n\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"create_directory(p): invalid argument\");\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\ninline bool create_directory(const path& _Path,\r\n    error_code& _Code) noexcept { // create a directory\r\n    const int _Ans = _Make_dir(_Path.c_str(), nullptr);\r\n\r\n    _Code.clear();\r\n    if (_Ans < 0) {\r\n        _Code = make_error_code(errc::operation_not_permitted);\r\n    }\r\n\r\n    return 0 < _Ans;\r\n}\r\n\r\ninline bool create_directory(const path& _Path, const path& _Attrs) { // create a directory, copying attributes\r\n    error_code _Code;\r\n    const bool _Ans = create_directory(_Path, _Attrs, _Code);\r\n\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"create_directory(p1, p2): invalid arguments\");\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\ninline bool create_directory(const path& _Path, const path& _Attrs,\r\n    error_code& _Code) noexcept { // create a directory, copying attributes\r\n    const int _Ans = _Make_dir(_Path.c_str(), _Attrs.c_str());\r\n\r\n    _Code.clear();\r\n    if (_Ans < 0) {\r\n        _Code = make_error_code(errc::operation_not_permitted);\r\n    }\r\n\r\n    return 0 < _Ans;\r\n}\r\n\r\ninline void create_directory_symlink(const path& _Oldpval,\r\n    const path& _Newpval) { // symlink directory _Newpval to _Oldpval\r\n    error_code _Code;\r\n    create_directory_symlink(_Oldpval, _Newpval, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"create_directory_symlink(p1, p2): invalid arguments\");\r\n    }\r\n}\r\n\r\ninline void create_directory_symlink(const path& _Oldpval, const path& _Newpval,\r\n    error_code& _Code) noexcept { // symlink directory_Newpval to _Oldpval (NB: SAME AS FILE)\r\n    const int _Ans = _Symlink(_Oldpval.c_str(), _Newpval.c_str());\r\n\r\n    _Code.clear();\r\n    if (_Ans != 0) {\r\n        _Code = error_code(_Ans, _STD system_category());\r\n    }\r\n}\r\n\r\ninline void create_hard_link(const path& _Oldpval, const path& _Newpval) { // hard link _Newpval to _Oldpval\r\n    error_code _Code;\r\n    create_hard_link(_Oldpval, _Newpval, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"create_hard_link(p1, p2): invalid arguments\");\r\n    }\r\n}\r\n\r\ninline void create_hard_link(const path& _Oldpval, const path& _Newpval,\r\n    error_code& _Code) noexcept { // hard link _Newpval to _Oldpval\r\n    const int _Ans = _Link(_Oldpval.c_str(), _Newpval.c_str());\r\n\r\n    _Code.clear();\r\n    if (_Ans != 0) {\r\n        _Code = error_code(_Ans, _STD system_category());\r\n    }\r\n}\r\n\r\ninline void create_symlink(const path& _Oldpval, const path& _Newpval) { // symlink _Newpval to _Oldpval\r\n    error_code _Code;\r\n    create_symlink(_Oldpval, _Newpval, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"create_symlink(p1, p2): invalid arguments\");\r\n    }\r\n}\r\n\r\ninline void create_symlink(const path& _Oldpval, const path& _Newpval,\r\n    error_code& _Code) noexcept { // symlink _Newpval to _Oldpval\r\n    const int _Ans = _Symlink(_Oldpval.c_str(), _Newpval.c_str());\r\n\r\n    _Code.clear();\r\n    if (_Ans != 0) {\r\n        _Code = error_code(_Ans, _STD system_category());\r\n    }\r\n}\r\n\r\n_NODISCARD inline path current_path() {\r\n    error_code _Code;\r\n    path _Ans = current_path(_Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"current_path(): can't get current working directory\");\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_NODISCARD inline path current_path(error_code& _Code) {\r\n    _Code.clear();\r\n    wchar_t _Dest[_MAX_FILESYS_NAME];\r\n    if (!_Current_get(_Dest)) { // report error\r\n        _Code = make_error_code(errc::operation_not_permitted);\r\n        return {};\r\n    }\r\n    return path{_Dest};\r\n}\r\n\r\ninline void current_path(const path& _Path) { // set current working directory\r\n    if (!_Current_set(_Path.c_str())) {\r\n        _Throw_filesystem_error(\"current_path(p): invalid argument\");\r\n    }\r\n}\r\n\r\ninline void current_path(const path& _Path,\r\n    error_code& _Code) noexcept { // set current working directory\r\n    _Code.clear();\r\n    if (!_Current_set(_Path.c_str())) {\r\n        _Code = make_error_code(errc::no_such_file_or_directory);\r\n    }\r\n}\r\n\r\n_NODISCARD inline bool equivalent(const path& _Path1, const path& _Path2) {\r\n    error_code _Code;\r\n    const int _Ans = equivalent(_Path1, _Path2, _Code);\r\n\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"equivalent(p1, p2): invalid arguments\");\r\n    }\r\n\r\n    return 0 < _Ans;\r\n}\r\n\r\n_NODISCARD inline bool equivalent(const path& _Path1, const path& _Path2, error_code& _Code) noexcept {\r\n    const int _Ans = _Equivalent(_Path1.c_str(), _Path2.c_str());\r\n\r\n    _Code.clear();\r\n    if (_Ans < 0) {\r\n        _Code = make_error_code(errc::operation_not_permitted);\r\n    }\r\n\r\n    return 0 < _Ans;\r\n}\r\n\r\n_NODISCARD inline bool exists(file_status _Stat) noexcept {\r\n    return status_known(_Stat) && _Stat.type() != file_type::not_found;\r\n}\r\n\r\n_NODISCARD inline bool exists(const path& _Path) {\r\n    return exists(status(_Path));\r\n}\r\n\r\n_NODISCARD inline bool exists(const path& _Path, error_code& _Code) noexcept {\r\n    _Code.clear();\r\n    return exists(status(_Path));\r\n}\r\n\r\n_NODISCARD inline uintmax_t file_size(const path& _Path) {\r\n    error_code _Code;\r\n    const uintmax_t _Ans = file_size(_Path, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"file_size(p): invalid argument\");\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_NODISCARD inline uintmax_t file_size(const path& _Path, error_code& _Code) noexcept {\r\n    uintmax_t _Ans          = static_cast<uintmax_t>(-1);\r\n    const file_status _Stat = status(_Path);\r\n\r\n    _Code.clear();\r\n    if (exists(_Stat) && is_regular_file(_Stat)) {\r\n        _Ans = _File_size(_Path.c_str());\r\n    }\r\n\r\n    if (_Ans == static_cast<uintmax_t>(-1)) {\r\n        _Code = make_error_code(errc::operation_not_permitted);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_NODISCARD inline uintmax_t hard_link_count(const path& _Path) {\r\n    error_code _Code;\r\n    const uintmax_t _Ans = hard_link_count(_Path, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"hard_link_count(p): invalid argument\");\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_NODISCARD inline uintmax_t hard_link_count(const path& _Path, error_code& _Code) noexcept {\r\n    _Code.clear();\r\n    const uintmax_t _Ans = _Hard_links(_Path.c_str());\r\n    if (_Ans == static_cast<uintmax_t>(-1)) {\r\n        _Code = make_error_code(errc::operation_not_permitted);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_NODISCARD inline bool is_block_file(file_status _Stat) noexcept {\r\n    return _Stat.type() == file_type::block;\r\n}\r\n\r\n_NODISCARD inline bool is_block_file(const path& _Path) {\r\n    return is_block_file(status(_Path));\r\n}\r\n\r\n_NODISCARD inline bool is_block_file(const path& _Path, error_code& _Code) noexcept {\r\n    return is_block_file(status(_Path, _Code));\r\n}\r\n\r\n_NODISCARD inline bool is_character_file(file_status _Stat) noexcept {\r\n    return _Stat.type() == file_type::character;\r\n}\r\n\r\n_NODISCARD inline bool is_character_file(const path& _Path) {\r\n    return is_character_file(status(_Path));\r\n}\r\n\r\n_NODISCARD inline bool is_character_file(const path& _Path, error_code& _Code) noexcept {\r\n    return is_character_file(status(_Path, _Code));\r\n}\r\n\r\n_NODISCARD inline bool is_directory(file_status _Stat) noexcept {\r\n    return _Stat.type() == file_type::directory;\r\n}\r\n\r\n_NODISCARD inline bool is_directory(const path& _Path) {\r\n    return is_directory(status(_Path));\r\n}\r\n\r\n_NODISCARD inline bool is_directory(const path& _Path, error_code& _Code) noexcept {\r\n    return is_directory(status(_Path, _Code));\r\n}\r\n\r\n_NODISCARD inline bool is_empty(const path& _Path) {\r\n    error_code _Code;\r\n    const bool _Ans = _FSPFX is_empty(_Path, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"is_empty(p): invalid argument\");\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_NODISCARD inline bool is_empty(const path& _Path, error_code& _Code) noexcept {\r\n    const file_status _Stat = status(_Path);\r\n\r\n    _Code.clear();\r\n    if (is_directory(_Stat)) {\r\n        return directory_iterator(_Path) == directory_iterator();\r\n    } else {\r\n        return file_size(_Path, _Code) == 0;\r\n    }\r\n}\r\n\r\n_NODISCARD inline bool is_fifo(file_status _Stat) noexcept {\r\n    return _Stat.type() == file_type::fifo;\r\n}\r\n\r\n_NODISCARD inline bool is_fifo(const path& _Path) {\r\n    return is_fifo(status(_Path));\r\n}\r\n\r\n_NODISCARD inline bool is_fifo(const path& _Path, error_code& _Code) noexcept {\r\n    return is_fifo(status(_Path, _Code));\r\n}\r\n\r\n_NODISCARD inline bool is_other(file_status _Stat) noexcept {\r\n    return exists(_Stat) && !is_regular_file(_Stat) && !is_directory(_Stat) && !is_symlink(_Stat);\r\n}\r\n\r\n_NODISCARD inline bool is_other(const path& _Path) {\r\n    return is_other(status(_Path));\r\n}\r\n\r\n_NODISCARD inline bool is_other(const path& _Path, error_code& _Code) noexcept {\r\n    return is_other(status(_Path, _Code));\r\n}\r\n\r\n_NODISCARD inline bool is_regular_file(file_status _Stat) noexcept {\r\n    return _Stat.type() == file_type::regular;\r\n}\r\n\r\n_NODISCARD inline bool is_regular_file(const path& _Path) {\r\n    return is_regular_file(status(_Path));\r\n}\r\n\r\n_NODISCARD inline bool is_regular_file(const path& _Path, error_code& _Code) noexcept {\r\n    return is_regular_file(status(_Path, _Code));\r\n}\r\n\r\n_NODISCARD inline bool is_socket(file_status _Stat) noexcept {\r\n    return _Stat.type() == file_type::socket;\r\n}\r\n\r\n_NODISCARD inline bool is_socket(const path& _Path) {\r\n    return is_socket(status(_Path));\r\n}\r\n\r\n_NODISCARD inline bool is_socket(const path& _Path, error_code& _Code) noexcept {\r\n    return is_socket(status(_Path, _Code));\r\n}\r\n\r\n_NODISCARD inline bool is_symlink(file_status _Stat) noexcept {\r\n    return _Stat.type() == file_type::symlink;\r\n}\r\n\r\n_NODISCARD inline bool is_symlink(const path& _Path) {\r\n    return is_symlink(status(_Path));\r\n}\r\n\r\n_NODISCARD inline bool is_symlink(const path& _Path, error_code& _Code) noexcept {\r\n    return is_symlink(status(_Path, _Code));\r\n}\r\n\r\n_NODISCARD inline file_time_type last_write_time(const path& _Path) {\r\n    error_code _Code;\r\n    file_time_type _Ans = last_write_time(_Path, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"last_write_time(p): invalid argument\");\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_NODISCARD inline file_time_type last_write_time(const path& _Path, error_code& _Code) noexcept {\r\n    const int64_t _Ticks = _Last_write_time(_Path.c_str());\r\n\r\n    _Code.clear();\r\n    if (_Ticks == -1) { // report error\r\n        _Code = make_error_code(errc::operation_not_permitted);\r\n        return (file_time_type::min) ();\r\n    }\r\n    return file_time_type(chrono::system_clock::duration(_Ticks));\r\n}\r\n\r\ninline void last_write_time(const path& _Path, file_time_type _Newtime) { // set last write time\r\n    error_code _Code;\r\n    last_write_time(_Path, _Newtime, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"last_write_time(p, new_time): invalid arguments\");\r\n    }\r\n}\r\n\r\ninline void last_write_time(const path& _Path, file_time_type _Newtime,\r\n    error_code& _Code) noexcept { // set last write time\r\n    _Code.clear();\r\n    if (_Set_last_write_time(_Path.c_str(), _Newtime.time_since_epoch().count()) == 0) {\r\n        _Code = make_error_code(errc::operation_not_permitted);\r\n    }\r\n}\r\n\r\ninline void permissions(const path& _Path, perms _Mask) { // set access permissions\r\n    error_code _Code;\r\n    permissions(_Path, _Mask, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"permissions(p, prms): can't set permissions\");\r\n    }\r\n}\r\n\r\ninline void permissions(const path& _Path, perms _Mask,\r\n    error_code& _Code) { // set access permissions\r\n    const perms _Todo = _Mask;\r\n    _Mask             = _Mask & perms::mask;\r\n    bool _Ok          = true;\r\n\r\n    _Code.clear();\r\n    if ((_Todo & perms::add_perms) == perms::none) {\r\n        if ((_Todo & perms::remove_perms) != perms::none) {\r\n            _Mask = status(_Path).permissions() & ~_Mask;\r\n        }\r\n    } else {\r\n        if ((_Todo & perms::remove_perms) == perms::none) {\r\n            _Mask = _Mask | status(_Path).permissions();\r\n        } else {\r\n            _Ok = false;\r\n        }\r\n    }\r\n\r\n    if (!_Ok || _Chmod(_Path.c_str(), _Mask) != 0) {\r\n        _Code = make_error_code(errc::operation_not_permitted);\r\n    }\r\n}\r\n\r\n_NODISCARD inline path read_symlink(const path& _Path) { // read symbolic link\r\n    error_code _Code;\r\n    path _Sympath = read_symlink(_Path, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"read_symlink(p): can't read symbolic link\");\r\n    }\r\n\r\n    return _Sympath;\r\n}\r\n\r\n_NODISCARD inline path read_symlink(const path& _Path,\r\n    error_code& _Code) { // read symbolic link\r\n    _Code.clear();\r\n    if (!is_symlink(_Path)) { // report error\r\n        _Code = make_error_code(errc::no_such_file_or_directory);\r\n        return {};\r\n    }\r\n    wchar_t _Dest[_MAX_FILESYS_NAME];\r\n    return path{_Symlink_get(_Dest, _Path.c_str())};\r\n}\r\n\r\ninline bool remove(const path& _Path) { // remove a file\r\n    error_code _Code;\r\n    const bool _Ans = remove(_Path, _Code);\r\n\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"remove(p): invalid argument\");\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\ninline bool remove(const path& _Path,\r\n    error_code& _Code) noexcept { // remove a file\r\n    _Code.clear();\r\n    if (!exists(symlink_status(_Path))) {\r\n        return false;\r\n    } else if (is_directory(_Path, _Code)) {\r\n        if (_Remove_dir(_Path.c_str())) {\r\n            return true;\r\n        } else { // couldn't remove emptied directory, report it\r\n            _Code = make_error_code(errc::operation_not_permitted);\r\n            return false;\r\n        }\r\n    } else { // file exists, try to remove it\r\n        const bool _Ans = _Unlink(_Path.c_str()) == 0;\r\n        if (!_Ans) {\r\n            _Code = make_error_code(errc::operation_not_permitted);\r\n        }\r\n\r\n        return _Ans;\r\n    }\r\n}\r\n\r\ninline bool _Remove_all(const path& _Path, uintmax_t& _Ans,\r\n    error_code& _Code) noexcept { // recursively remove a file or directory, count removed files\r\n    _Code.clear();\r\n    if (is_directory(_Path)) { // empty and remove a directory\r\n        using _Myit = _Directory_iterator<false_type>;\r\n        _Myit _Last;\r\n\r\n        for (;;) { // remove a directory entry\r\n            _Myit _First(_Path);\r\n            if (_First == _Last) {\r\n                break;\r\n            }\r\n\r\n            if (!_Remove_all(_Path / _First->path(), _Ans, _Code)) {\r\n                return false;\r\n            }\r\n        }\r\n        if (_Remove_dir(_Path.c_str())) {\r\n            return true;\r\n        } else { // couldn't remove emptied directory, report it\r\n            _Code = make_error_code(errc::operation_not_permitted);\r\n            return false;\r\n        }\r\n    } else if (!remove(_Path, _Code)) {\r\n        return false;\r\n    } else { // file remove succeeded, count it\r\n        ++_Ans;\r\n        return true;\r\n    }\r\n}\r\n\r\ninline uintmax_t remove_all(const path& _Path) { // recursively remove a directory\r\n    error_code _Code;\r\n    const uintmax_t _Ans = remove_all(_Path, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"remove_all(p): invalid argument\");\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\ninline uintmax_t remove_all(const path& _Path,\r\n    error_code& _Code) noexcept { // recursively remove a directory\r\n    uintmax_t _Ans = 0;\r\n    _Remove_all(_Path, _Ans, _Code);\r\n    if (_Code) {\r\n        return static_cast<uintmax_t>(-1);\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\ninline void rename(const path& _Oldpval, const path& _Newpval) { // rename _Oldpval as _Newpval\r\n    error_code _Code;\r\n    rename(_Oldpval, _Newpval, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"rename(p1, p2): invalid arguments\");\r\n    }\r\n}\r\n\r\ninline void rename(const path& _Oldpval, const path& _Newpval,\r\n    error_code& _Code) noexcept { // rename _Oldpval as _Newpval\r\n    _Code.clear();\r\n\r\n    if (!exists(_Oldpval)) { // fail immediately without modifying the filesystem\r\n        _Code = make_error_code(errc::operation_not_permitted);\r\n        return;\r\n    }\r\n\r\n    if (exists(_Newpval)) { // both exist; there can be only one\r\n        if (equivalent(_Oldpval, _Newpval, _Code) || _Code) {\r\n            return; // successful no-op, or report equivalent() failure\r\n        }\r\n\r\n        if (!remove(_Newpval, _Code)) {\r\n            return; // report remove() failure\r\n        }\r\n    }\r\n\r\n    if (_Rename(_Oldpval.c_str(), _Newpval.c_str()) != 0) {\r\n        _Code = make_error_code(errc::operation_not_permitted);\r\n    }\r\n}\r\n\r\ninline void resize_file(const path& _Path, uintmax_t _Newsize) { // change file size\r\n    error_code _Code;\r\n    resize_file(_Path, _Newsize, _Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"resize_file(p, n): invalid arguments\");\r\n    }\r\n}\r\n\r\ninline void resize_file(const path& _Path, uintmax_t _Newsize,\r\n    error_code& _Code) noexcept { // change file size\r\n    const int _Errno = _Resize(_Path.c_str(), _Newsize);\r\n\r\n    _Code.clear();\r\n    if (_Errno != 0) {\r\n        _Code = error_code(_Errno, _STD system_category());\r\n    }\r\n}\r\n\r\n_NODISCARD inline space_info space(const path& _Path) {\r\n    return _Statvfs(_Path.c_str());\r\n}\r\n\r\n_NODISCARD inline space_info space(const path& _Path, error_code& _Code) noexcept {\r\n    _Code.clear();\r\n    return _Statvfs(_Path.c_str());\r\n}\r\n\r\n_NODISCARD inline file_status status(const path& _Path) {\r\n    error_code _Code;\r\n    return status(_Path, _Code);\r\n}\r\n\r\n_NODISCARD inline file_status status(const path& _Path, error_code& _Code) noexcept {\r\n    _Code.clear();\r\n    perms _Mode;\r\n    const file_type _Ftype = _Stat(_Path.c_str(), &_Mode);\r\n    return file_status{_Ftype, _Mode};\r\n}\r\n\r\n_NODISCARD inline bool status_known(file_status _Stat) noexcept {\r\n    return _Stat.type() != file_type::unknown;\r\n}\r\n\r\n_NODISCARD inline file_status symlink_status(const path& _Path) {\r\n    error_code _Code;\r\n    return symlink_status(_Path, _Code);\r\n}\r\n\r\n_NODISCARD inline file_status symlink_status(const path& _Path, error_code& _Code) noexcept {\r\n    perms _Mode;\r\n    const file_type _Ftype = _Lstat(_Path.c_str(), &_Mode);\r\n\r\n    _Code.clear();\r\n    return file_status{_Ftype, _Mode};\r\n}\r\n\r\n_NODISCARD inline path system_complete(const path& _Path) {\r\n    if (_Path.is_absolute()) {\r\n        return _Path;\r\n    }\r\n\r\n    path _Curpath = current_path();\r\n    if (!_Path.has_root_name() || _Path.root_name() == _Curpath.root_name()) {\r\n        return absolute(_Path);\r\n    }\r\n\r\n    current_path(_Path.root_name()); // switch to new device\r\n    path _Altpath = current_path(); // get its full current path\r\n    current_path(_Curpath); // revert to original current path\r\n    return _Altpath / _Path.relative_path();\r\n}\r\n\r\n_NODISCARD inline path system_complete(const path& _Path, error_code& _Code) {\r\n    _Code.clear();\r\n\r\n    path _Ans;\r\n\r\n    _TRY_BEGIN\r\n    _Ans = system_complete(_Path);\r\n    _CATCH_ALL\r\n    _Code = make_error_code(errc::operation_not_permitted);\r\n    return {};\r\n    _CATCH_END\r\n\r\n    return _Ans;\r\n}\r\n\r\n_NODISCARD inline path temp_directory_path() {\r\n    error_code _Code;\r\n    path _Ans = temp_directory_path(_Code);\r\n    if (_Code) {\r\n        _Throw_filesystem_error(\"temp_directory_path(): can't find temp directory\");\r\n    }\r\n\r\n    return _Ans;\r\n}\r\n\r\n_NODISCARD inline path temp_directory_path(error_code& _Code) {\r\n    wchar_t _Dest[_MAX_FILESYS_NAME];\r\n    _Temp_get(_Dest);\r\n    path _Ans(_Dest);\r\n\r\n    _Code.clear();\r\n    if (!exists(_Ans) || !is_directory(_Ans)) { // report error\r\n        _Code = make_error_code(errc::no_such_file_or_directory);\r\n        return {};\r\n    }\r\n    return _Ans;\r\n}\r\n_FS_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // _EXPERIMENTAL_FILESYSTEM_\r\n"
  },
  {
    "path": "tests/std/include/fenv_prefix.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#ifdef FP_CONFIG_PRESET\r\n#if FP_CONFIG_PRESET == 3\r\n#define FP_PRESET_FAST 1\r\n#else // ^^^ FP_CONFIG_PRESET == 3 / FP_CONFIG_PRESET != 3 vvv\r\n#define FP_PRESET_FAST 0\r\n#endif // ^^^ FP_CONFIG_PRESET != 3 ^^^\r\n#endif // defined(FP_CONFIG_PRESET)\r\n\r\n#ifdef FP_CONTRACT_MODE\r\n#ifdef __clang__\r\n\r\n#if FP_CONTRACT_MODE == 0\r\n#pragma STDC FP_CONTRACT OFF\r\n#elif FP_CONTRACT_MODE == 1 // ^^^ no floating point contraction / standard floating point contraction vvv\r\n#pragma STDC FP_CONTRACT ON\r\n#elif FP_CONTRACT_MODE == 2 // ^^^ standard floating point contraction / fast floating point contraction vvv\r\n#pragma STDC FP_CONTRACT ON\r\n#else // ^^^ fast floating point contraction / invalid FP_CONTRACT_MODE vvv\r\n#error invalid FP_CONTRACT_MODE\r\n#endif // ^^^ invalid FP_CONTRACT_MODE ^^^\r\n\r\n#else // ^^^ clang / MSVC vvv\r\n\r\n#if FP_CONTRACT_MODE == 0\r\n#pragma fp_contract(off)\r\n#elif FP_CONTRACT_MODE == 1 // ^^^ no floating point contraction / standard floating point contraction vvv\r\n#pragma fp_contract(on)\r\n#elif FP_CONTRACT_MODE == 2 // ^^^ standard floating point contraction / fast floating point contraction vvv\r\n#pragma fp_contract(on)\r\n#else // ^^^ fast floating point contraction / invalid FP_CONTRACT_MODE vvv\r\n#error invalid FP_CONTRACT_MODE\r\n#endif // ^^^ invalid FP_CONTRACT_MODE ^^^\r\n\r\n#endif // ^^^ MSVC ^^^\r\n#endif // defined(FP_CONTRACT_MODE)\r\n\r\n#include <cassert>\r\n#include <cfloat>\r\n\r\nstruct fenv_initializer_t {\r\n    fenv_initializer_t() {\r\n#if WITH_FP_ABRUPT_UNDERFLOW\r\n        {\r\n            const errno_t result = _controlfp_s(nullptr, _DN_FLUSH, _MCW_DN);\r\n            assert(result == 0);\r\n        }\r\n#endif // WITH_FP_ABRUPT_UNDERFLOW\r\n    }\r\n\r\n    ~fenv_initializer_t() = default;\r\n\r\n    fenv_initializer_t(const fenv_initializer_t&)            = delete;\r\n    fenv_initializer_t& operator=(const fenv_initializer_t&) = delete;\r\n};\r\n\r\nconst fenv_initializer_t fenv_initializer{};\r\n"
  },
  {
    "path": "tests/std/include/floating_point_test_cases.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <cstdint>\r\n#include <utility>\r\n\r\nconstexpr std::pair<const char*, uint64_t> floating_point_test_cases_double[] = {\r\n    // Verify small exactly-representable integers:\r\n    {\"1\", 0x3FF0000000000000ULL},\r\n    {\"2\", 0x4000000000000000ULL},\r\n    {\"3\", 0x4008000000000000ULL},\r\n    {\"4\", 0x4010000000000000ULL},\r\n    {\"5\", 0x4014000000000000ULL},\r\n    {\"6\", 0x4018000000000000ULL},\r\n    {\"7\", 0x401C000000000000ULL},\r\n    {\"8\", 0x4020000000000000ULL},\r\n\r\n    // Verify large exactly-representable integers:\r\n    {\"9007199254740984\", 0x433FFFFFFFFFFFF8ULL},\r\n    {\"9007199254740985\", 0x433FFFFFFFFFFFF9ULL},\r\n    {\"9007199254740986\", 0x433FFFFFFFFFFFFAULL},\r\n    {\"9007199254740987\", 0x433FFFFFFFFFFFFBULL},\r\n    {\"9007199254740988\", 0x433FFFFFFFFFFFFCULL},\r\n    {\"9007199254740989\", 0x433FFFFFFFFFFFFDULL},\r\n    {\"9007199254740990\", 0x433FFFFFFFFFFFFEULL},\r\n    {\"9007199254740991\", 0x433FFFFFFFFFFFFFULL}, // 2^53 - 1\r\n\r\n    // Verify the smallest denormal values:\r\n    {\"5.0e-324\", 0x0000000000000001ULL},\r\n    {\"1.0e-323\", 0x0000000000000002ULL},\r\n    {\"1.5e-323\", 0x0000000000000003ULL},\r\n    {\"2.0e-323\", 0x0000000000000004ULL},\r\n    {\"2.5e-323\", 0x0000000000000005ULL},\r\n    {\"3.0e-323\", 0x0000000000000006ULL},\r\n    {\"3.5e-323\", 0x0000000000000007ULL},\r\n    {\"4.0e-323\", 0x0000000000000008ULL},\r\n    {\"4.5e-323\", 0x0000000000000009ULL},\r\n    {\"5.0e-323\", 0x000000000000000AULL},\r\n    {\"5.5e-323\", 0x000000000000000BULL},\r\n    {\"6.0e-323\", 0x000000000000000CULL},\r\n    {\"6.5e-323\", 0x000000000000000DULL},\r\n    {\"7.0e-323\", 0x000000000000000EULL},\r\n    {\"7.5e-323\", 0x000000000000000FULL},\r\n\r\n    // Verify the largest denormal values:\r\n    {\"2.2250738585071935e-308\", 0x000FFFFFFFFFFFF0ULL},\r\n    {\"2.2250738585071940e-308\", 0x000FFFFFFFFFFFF1ULL},\r\n    {\"2.2250738585071945e-308\", 0x000FFFFFFFFFFFF2ULL},\r\n    {\"2.2250738585071950e-308\", 0x000FFFFFFFFFFFF3ULL},\r\n    {\"2.2250738585071955e-308\", 0x000FFFFFFFFFFFF4ULL},\r\n    {\"2.2250738585071960e-308\", 0x000FFFFFFFFFFFF5ULL},\r\n    {\"2.2250738585071964e-308\", 0x000FFFFFFFFFFFF6ULL},\r\n    {\"2.2250738585071970e-308\", 0x000FFFFFFFFFFFF7ULL},\r\n    {\"2.2250738585071974e-308\", 0x000FFFFFFFFFFFF8ULL},\r\n    {\"2.2250738585071980e-308\", 0x000FFFFFFFFFFFF9ULL},\r\n    {\"2.2250738585071984e-308\", 0x000FFFFFFFFFFFFAULL},\r\n    {\"2.2250738585071990e-308\", 0x000FFFFFFFFFFFFBULL},\r\n    {\"2.2250738585071994e-308\", 0x000FFFFFFFFFFFFCULL},\r\n    {\"2.2250738585072000e-308\", 0x000FFFFFFFFFFFFDULL},\r\n    {\"2.2250738585072004e-308\", 0x000FFFFFFFFFFFFEULL},\r\n    {\"2.2250738585072010e-308\", 0x000FFFFFFFFFFFFFULL},\r\n\r\n    // DevDiv-576315 \"I/O library incorrect rounds floating point numbers on input\"\r\n    // DevDiv-616647 \"Visual C++ 11: iostream bug: incorrect input streaming of the smallest normal double and some\r\n    // denormals\"\r\n    // DevDiv-730414 \"iostreams is still misparsing floating-point\"\r\n    // DevDiv-938627 \"parsing float values using std::istream gives results inconsistent with sscanf() and with C++\r\n    // compiler\"\r\n    // DevDiv-961116 \"floating point string conversion accuracy\"\r\n    {\"2.2250738585072014e-308\", 0x0010000000000000ULL}, // DBL_MIN\r\n    {\"1.7976931348623158e+308\", 0x7FEFFFFFFFFFFFFFULL}, // DBL_MAX\r\n    {\"4.26144921954407e-309\", 0x00031076B2F00000ULL},\r\n    {\"179.9999999999999855\", 0x40667FFFFFFFFFFFULL},\r\n    {\"4.1\", 0x4010666666666666ULL},\r\n    {\"0.2288884\", 0x3FCD4C37103785A8ULL},\r\n    {\"0.168\", 0x3FC5810624DD2F1BULL},\r\n    {\"1.68\", 0x3FFAE147AE147AE1ULL},\r\n    {\"16.80000001\", 0x4030CCCCCCF7BFEBULL},\r\n\r\n    // Test cases from Rick Regan's article, \"Incorrectly Rounded Conversions in Visual C++\":\r\n    // https://www.exploringbinary.com/incorrectly-rounded-conversions-in-visual-c-plus-plus/\r\n\r\n    // Example 1:\r\n    {\"9214843084008499\", 0x43405E6CEC57761AULL},\r\n\r\n    // Example 2 (2^-1 + 2^-53 + 2^-54):\r\n    {\"0.500000000000000166533453693773481063544750213623046875\", 0x3FE0000000000002ULL},\r\n\r\n    // Example 3:\r\n    {\"30078505129381147446200\", 0x44997A3C7271B021ULL},\r\n\r\n    // Example 4:\r\n    {\"1777820000000000000001\", 0x4458180D5BAD2E3EULL},\r\n\r\n    // Example 5 (2^-1 + 2^-53 + 2^-54 + 2^-66):\r\n    {\"0.500000000000000166547006220929549868969843373633921146392822265625\", 0x3FE0000000000002ULL},\r\n\r\n    // Example 6 (2^-1 + 2^-53 + 2^-54 + 2^-65):\r\n    {\"0.50000000000000016656055874808561867439493653364479541778564453125\", 0x3FE0000000000002ULL},\r\n\r\n    // Example 7:\r\n    {\"0.3932922657273\", 0x3FD92BB352C4623AULL},\r\n\r\n    // The following test cases are taken from other articles on Rick Regan's\r\n    // Exploring Binary blog. These are conversions that other implementations\r\n    // were found to perform incorrectly.\r\n\r\n    // https://www.exploringbinary.com/incorrectly-rounded-subnormal-conversions-in-java/\r\n    // Example 1 (2^-1047 + 2^-1075, half-ulp above a power of two):\r\n    {\"6.6312368714697582767853966302759672433990999473553031442499717587\"\r\n     \"362866301392654396180682007880487441059604205526018528897150063763\"\r\n     \"256665955396033303618005191075917832333584923372080578494993608994\"\r\n     \"251286407188566165030934449228547591599881603044399098682919739314\"\r\n     \"266256986631577498362522745234853124423586512070512924530832781161\"\r\n     \"439325697279187097860044978723221938561502254152119972830784963194\"\r\n     \"121246401117772161481107528151017752957198119743384519360959074196\"\r\n     \"224175384736794951486324803914359317679811223967034438033355297560\"\r\n     \"033532098300718322306892013830155987921841729099279241763393155074\"\r\n     \"022348361207309147831684007154624400538175927027662135590421159867\"\r\n     \"638194826541287705957668068727833491469671712939495988506756821156\"\r\n     \"96218943412532098591327667236328125E-316\",\r\n        0x0000000008000000ULL},\r\n\r\n    // Example 2 (2^-1058 - 2^-1075, half-ulp below a power of two):\r\n    {\"3.2378839133029012895883524125015321748630376694231080599012970495\"\r\n     \"523019706706765657868357425877995578606157765598382834355143910841\"\r\n     \"531692526891905643964595773946180389283653051434639551003566966656\"\r\n     \"292020173313440317300443693602052583458034314716600326995807313009\"\r\n     \"548483639755486900107515300188817581841745696521731104736960227499\"\r\n     \"346384253806233697747365600089974040609674980283891918789639685754\"\r\n     \"392222064169814626901133425240027243859416510512935526014211553334\"\r\n     \"302252372915238433223313261384314778235911424088000307751706259156\"\r\n     \"707286570031519536642607698224949379518458015308952384398197084033\"\r\n     \"899378732414634842056080000272705311068273879077914449185347715987\"\r\n     \"501628125488627684932015189916680282517302999531439241685457086639\"\r\n     \"13273994694463908672332763671875E-319\",\r\n        0x0000000000010000ULL},\r\n\r\n    // Example 3 (2^-1027 + 2^-1066 + 2^-1075, half-ulp above a non-power of two):\r\n    {\"6.9533558078476771059728052155218916902221198171459507544162056079\"\r\n     \"800301315496366888061157263994418800653863998640286912755395394146\"\r\n     \"528315847956685600829998895513577849614468960421131982842131079351\"\r\n     \"102171626549398024160346762138294097205837595404767869364138165416\"\r\n     \"212878432484332023692099166122496760055730227032447997146221165421\"\r\n     \"888377703760223711720795591258533828013962195524188394697705149041\"\r\n     \"926576270603193728475623010741404426602378441141744972109554498963\"\r\n     \"891803958271916028866544881824524095839813894427833770015054620157\"\r\n     \"450178487545746683421617594966617660200287528887833870748507731929\"\r\n     \"971029979366198762266880963149896457660004790090837317365857503352\"\r\n     \"620998601508967187744019647968271662832256419920407478943826987518\"\r\n     \"09812609536720628966577351093292236328125E-310\",\r\n        0x0000800000000100ULL},\r\n\r\n    // Example 4 (2^-1058 + 2^-1063 - 2^-1075, half-ulp below a non-power of two):\r\n    {\"3.3390685575711885818357137012809439119234019169985217716556569973\"\r\n     \"284403145596153181688491490746626090999981130094655664268081703784\"\r\n     \"340657229916596426194677060348844249897410807907667784563321682004\"\r\n     \"646515939958173717821250106683466529959122339932545844611258684816\"\r\n     \"333436749050742710644097630907080178565840197768788124253120088123\"\r\n     \"262603630354748115322368533599053346255754042160606228586332807443\"\r\n     \"018924703005556787346899784768703698535494132771566221702458461669\"\r\n     \"916553215355296238706468887866375289955928004361779017462862722733\"\r\n     \"744717014529914330472578638646014242520247915673681950560773208853\"\r\n     \"293843223323915646452641434007986196650406080775491621739636492640\"\r\n     \"497383622906068758834568265867109610417379088720358034812416003767\"\r\n     \"05491726170293986797332763671875E-319\",\r\n        0x0000000000010800ULL},\r\n\r\n    // A number between 2^-1074 and 2^-1075, just slightly larger than 2^-1075.\r\n    // It has bit 1075 set (the denormal rounding bit), followed by 2506 zeroes,\r\n    // followed by one bits. It should round up to 2^-1074.\r\n    {\"2.470328229206232720882843964341106861825299013071623822127928412503\"\r\n     \"37753635104375932649918180817996189898282347722858865463328355177969\"\r\n     \"89819938739800539093906315035659515570226392290858392449105184435931\"\r\n     \"80284993653615250031937045767824921936562366986365848075700158576926\"\r\n     \"99037063119282795585513329278343384093519780155312465972635795746227\"\r\n     \"66465272827220056374006485499977096599470454020828166226237857393450\"\r\n     \"73633900796776193057750674017632467360096895134053553745851666113422\"\r\n     \"37666786041621596804619144672918403005300575308490487653917113865916\"\r\n     \"46239524912623653881879636239373280423891018672348497668235089863388\"\r\n     \"58792562830275599565752445550725518931369083625477918694866799496832\"\r\n     \"40497058210285131854513962138377228261454376934125320985913276672363\"\r\n     \"28125001e-324\",\r\n        0x0000000000000001ULL},\r\n\r\n    // This value has a non-terminating binary fraction. It has a 0 at bit 54 followed by 120 ones.\r\n    {\"1.8254370818746402660437411213933955878019332885742187\", 0x3FFD34FD8378EA83ULL},\r\n\r\n    // https://www.exploringbinary.com/incorrect-decimal-to-floating-point-conversion-in-sqlite/\r\n    {\"1e-23\", 0x3B282DB34012B251ULL},\r\n    {\"8.533e+68\", 0x4E3FA69165A8EEA2ULL},\r\n    {\"4.1006e-184\", 0x19DBE0D1C7EA60C9ULL},\r\n    {\"9.998e+307\", 0x7FE1CC0A350CA87BULL},\r\n    {\"9.9538452227e-280\", 0x0602117AE45CDE43ULL},\r\n    {\"6.47660115e-260\", 0x0A1FDD9E333BADADULL},\r\n    {\"7.4e+47\", 0x49E033D7ECA0ADEFULL},\r\n    {\"5.92e+48\", 0x4A1033D7ECA0ADEFULL},\r\n    {\"7.35e+66\", 0x4DD172B70EABABA9ULL},\r\n    {\"8.32116e+55\", 0x4B8B2628393E02CDULL},\r\n};\r\n\r\nconstexpr std::pair<const char*, uint32_t> floating_point_test_cases_float[] = {\r\n    // Verify small exactly-representable integers:\r\n    {\"1\", 0x3F800000U},\r\n    {\"2\", 0x40000000U},\r\n    {\"3\", 0x40400000U},\r\n    {\"4\", 0x40800000U},\r\n    {\"5\", 0x40A00000U},\r\n    {\"6\", 0x40C00000U},\r\n    {\"7\", 0x40E00000U},\r\n    {\"8\", 0x41000000U},\r\n\r\n    // Verify large exactly-representable integers:\r\n    {\"16777208\", 0x4B7FFFF8U},\r\n    {\"16777209\", 0x4B7FFFF9U},\r\n    {\"16777210\", 0x4B7FFFFAU},\r\n    {\"16777211\", 0x4B7FFFFBU},\r\n    {\"16777212\", 0x4B7FFFFCU},\r\n    {\"16777213\", 0x4B7FFFFDU},\r\n    {\"16777214\", 0x4B7FFFFEU},\r\n    {\"16777215\", 0x4B7FFFFFU}, // 2^24 - 1\r\n\r\n    // Verify the smallest denormal values:\r\n    {\"1.4012984643248170e-45\", 0x00000001U},\r\n    {\"2.8025969286496340e-45\", 0x00000002U},\r\n    {\"4.2038953929744510e-45\", 0x00000003U},\r\n    {\"5.6051938572992680e-45\", 0x00000004U},\r\n    {\"7.0064923216240850e-45\", 0x00000005U},\r\n    {\"8.4077907859489020e-45\", 0x00000006U},\r\n    {\"9.8090892502737200e-45\", 0x00000007U},\r\n    {\"1.1210387714598537e-44\", 0x00000008U},\r\n    {\"1.2611686178923354e-44\", 0x00000009U},\r\n    {\"1.4012984643248170e-44\", 0x0000000AU},\r\n    {\"1.5414283107572988e-44\", 0x0000000BU},\r\n    {\"1.6815581571897805e-44\", 0x0000000CU},\r\n    {\"1.8216880036222622e-44\", 0x0000000DU},\r\n    {\"1.9618178500547440e-44\", 0x0000000EU},\r\n    {\"2.1019476964872256e-44\", 0x0000000FU},\r\n\r\n    // Verify the largest denormal values:\r\n    {\"1.1754921087447446e-38\", 0x007FFFF0U},\r\n    {\"1.1754922488745910e-38\", 0x007FFFF1U},\r\n    {\"1.1754923890044375e-38\", 0x007FFFF2U},\r\n    {\"1.1754925291342839e-38\", 0x007FFFF3U},\r\n    {\"1.1754926692641303e-38\", 0x007FFFF4U},\r\n    {\"1.1754928093939768e-38\", 0x007FFFF5U},\r\n    {\"1.1754929495238232e-38\", 0x007FFFF6U},\r\n    {\"1.1754930896536696e-38\", 0x007FFFF7U},\r\n    {\"1.1754932297835160e-38\", 0x007FFFF8U},\r\n    {\"1.1754933699133625e-38\", 0x007FFFF9U},\r\n    {\"1.1754935100432089e-38\", 0x007FFFFAU},\r\n    {\"1.1754936501730553e-38\", 0x007FFFFBU},\r\n    {\"1.1754937903029018e-38\", 0x007FFFFCU},\r\n    {\"1.1754939304327482e-38\", 0x007FFFFDU},\r\n    {\"1.1754940705625946e-38\", 0x007FFFFEU},\r\n    {\"1.1754942106924411e-38\", 0x007FFFFFU},\r\n\r\n    // DevDiv-576315 \"I/O library incorrect rounds floating point numbers on input\"\r\n    // DevDiv-616647 \"Visual C++ 11: iostream bug: incorrect input streaming of the smallest normal double and some\r\n    // denormals\"\r\n    // DevDiv-730414 \"iostreams is still misparsing floating-point\"\r\n    // DevDiv-938627 \"parsing float values using std::istream gives results inconsistent with sscanf() and with C++\r\n    // compiler\"\r\n    // DevDiv-961116 \"floating point string conversion accuracy\"\r\n    {\"1.175494351e-38\", 0x00800000U}, // FLT_MIN\r\n    {\"3.402823466e+38\", 0x7F7FFFFFU}, // FLT_MAX\r\n    {\"179.9999999999999855\", 0x43340000U},\r\n    {\"4.1\", 0x40833333U},\r\n    {\"0.2288884\", 0x3E6A61B9U},\r\n    {\"0.168\", 0x3E2C0831U},\r\n    {\"1.68\", 0x3FD70A3DU},\r\n    {\"16.80000001\", 0x41866666U},\r\n};\r\n"
  },
  {
    "path": "tests/std/include/force_include.hpp",
    "content": "//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n#pragma once\r\n\r\n#ifndef NO_TEST_ENVIRONMENT_PREPARER\r\n\r\n#include <crtdbg.h>\r\n#include <stdio.h>\r\n#include <stdlib.h>\r\n\r\nstruct TestEnvironmentPreparer {\r\n    TestEnvironmentPreparer() noexcept {\r\n        // avoid assertion dialog boxes; see GH-781\r\n        _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);\r\n        _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);\r\n        _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);\r\n        _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);\r\n        _set_abort_behavior(0, _CALL_REPORTFAULT);\r\n\r\n        // set stdout to be unbuffered; see GH-789\r\n        setvbuf(stdout, nullptr, _IONBF, 0);\r\n    }\r\n\r\n    [[nodiscard]] bool succeeded() const noexcept {\r\n        return true;\r\n    }\r\n};\r\n\r\nconst TestEnvironmentPreparer test_environment_preparer{};\r\n\r\n#endif // NO_TEST_ENVIRONMENT_PREPARER\r\n"
  },
  {
    "path": "tests/std/include/input_iterator.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <cstddef>\r\n#include <initializer_list>\r\n#include <iterator>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n// No STL containers support only input_iterator_tag (just stuff like istream_iterator).\r\n// input_iterator_container is a range that only supports input iterators\r\n// with added unchecked/rechecked functionality to ensure we traverse those code paths\r\nnamespace std_testing {\r\n\r\n    template <typename T>\r\n    struct const_unchecked_input_iterator {\r\n        using difference_type   = std::ptrdiff_t;\r\n        using value_type        = T;\r\n        using pointer           = const T*;\r\n        using reference         = const T&;\r\n        using iterator_category = std::input_iterator_tag;\r\n        using my_iter           = const_unchecked_input_iterator;\r\n\r\n        explicit const_unchecked_input_iterator(const T* val) : m_val(const_cast<T*>(val)) {}\r\n        const_unchecked_input_iterator(const const_unchecked_input_iterator&)            = default;\r\n        const_unchecked_input_iterator(const_unchecked_input_iterator&&)                 = default;\r\n        const_unchecked_input_iterator& operator=(const const_unchecked_input_iterator&) = default;\r\n        const_unchecked_input_iterator& operator=(const_unchecked_input_iterator&&)      = default;\r\n\r\n        reference operator*() const {\r\n            return *m_val;\r\n        }\r\n\r\n        pointer operator->() const {\r\n            return m_val;\r\n        }\r\n\r\n        my_iter& operator++() {\r\n            ++m_val;\r\n            return *this;\r\n        }\r\n\r\n        void operator++(int) = delete; // avoid postincrement\r\n\r\n        bool operator==(const my_iter& right) const {\r\n            return m_val == right.m_val;\r\n        }\r\n\r\n        bool operator!=(const my_iter& right) const {\r\n            return !(*this == right);\r\n        }\r\n\r\n        T* m_val;\r\n\r\n    protected:\r\n        explicit const_unchecked_input_iterator(T* val) : m_val(val) {}\r\n    };\r\n\r\n    template <typename T>\r\n    struct unchecked_input_iterator : const_unchecked_input_iterator<T> {\r\n        using difference_type   = std::ptrdiff_t;\r\n        using value_type        = T;\r\n        using pointer           = T*;\r\n        using reference         = T&;\r\n        using iterator_category = std::input_iterator_tag;\r\n        using my_iter           = unchecked_input_iterator;\r\n\r\n        explicit unchecked_input_iterator(T* val) : const_unchecked_input_iterator<T>(val) {}\r\n        unchecked_input_iterator(const unchecked_input_iterator&)            = default;\r\n        unchecked_input_iterator(unchecked_input_iterator&&)                 = default;\r\n        unchecked_input_iterator& operator=(const unchecked_input_iterator&) = default;\r\n        unchecked_input_iterator& operator=(unchecked_input_iterator&&)      = default;\r\n\r\n        reference operator*() const {\r\n            return *this->m_val;\r\n        }\r\n\r\n        pointer operator->() const {\r\n            return this->m_val;\r\n        }\r\n\r\n        my_iter& operator++() {\r\n            ++this->m_val;\r\n            return *this;\r\n        }\r\n\r\n        void operator++(int) = delete; // avoid postincrement\r\n    };\r\n\r\n    template <typename T>\r\n    struct const_checked_input_iterator : const_unchecked_input_iterator<T> {\r\n        using difference_type   = std::ptrdiff_t;\r\n        using value_type        = T;\r\n        using pointer           = const T*;\r\n        using reference         = const T&;\r\n        using iterator_category = std::input_iterator_tag;\r\n        using my_iter           = const_checked_input_iterator;\r\n\r\n        explicit const_checked_input_iterator(const T* val) : const_unchecked_input_iterator<T>(val) {}\r\n        const_checked_input_iterator(const const_checked_input_iterator&)            = default;\r\n        const_checked_input_iterator(const_checked_input_iterator&&)                 = default;\r\n        const_checked_input_iterator& operator=(const const_checked_input_iterator&) = default;\r\n        const_checked_input_iterator& operator=(const_checked_input_iterator&&)      = default;\r\n\r\n        void _Seek_to(const_unchecked_input_iterator<T> right) {\r\n            this->m_val = right.m_val;\r\n        }\r\n\r\n        const_unchecked_input_iterator<T> _Unwrapped() const {\r\n            return const_unchecked_input_iterator<T>(this->m_val);\r\n        }\r\n\r\n        static constexpr bool _Unwrap_when_unverified = _ITERATOR_DEBUG_LEVEL == 0;\r\n\r\n        my_iter& operator++() {\r\n            ++this->m_val;\r\n            return *this;\r\n        }\r\n\r\n        void operator++(int) = delete; // avoid postincrement\r\n    };\r\n\r\n    template <typename T>\r\n    struct checked_input_iterator : unchecked_input_iterator<T> {\r\n        using difference_type   = std::ptrdiff_t;\r\n        using value_type        = T;\r\n        using pointer           = T*;\r\n        using reference         = T&;\r\n        using iterator_category = std::input_iterator_tag;\r\n        using my_iter           = checked_input_iterator;\r\n\r\n        explicit checked_input_iterator(T* val) : unchecked_input_iterator<T>(val) {}\r\n        checked_input_iterator(const checked_input_iterator&)            = default;\r\n        checked_input_iterator(checked_input_iterator&&)                 = default;\r\n        checked_input_iterator& operator=(const checked_input_iterator&) = default;\r\n        checked_input_iterator& operator=(checked_input_iterator&&)      = default;\r\n\r\n        void _Seek_to(unchecked_input_iterator<T> right) {\r\n            this->m_val = right.m_val;\r\n        }\r\n\r\n        unchecked_input_iterator<T> _Unwrapped() const {\r\n            return unchecked_input_iterator<T>(this->m_val);\r\n        }\r\n\r\n        static constexpr bool _Unwrap_when_unverified = _ITERATOR_DEBUG_LEVEL == 0;\r\n\r\n        my_iter& operator++() {\r\n            ++this->m_val;\r\n            return *this;\r\n        }\r\n\r\n        void operator++(int) = delete; // avoid postincrement\r\n    };\r\n\r\n    template <typename T>\r\n    struct input_iterator_container {\r\n        using impl_value = std::conditional_t<std::is_same_v<T, bool>, char, T>; // avoid vector<bool> nonsense\r\n        STATIC_ASSERT(sizeof(impl_value) == sizeof(T));\r\n        STATIC_ASSERT(alignof(impl_value) == alignof(T));\r\n\r\n        using iterator       = checked_input_iterator<T>;\r\n        using const_iterator = const_checked_input_iterator<T>;\r\n\r\n        input_iterator_container() = default;\r\n\r\n        template <typename InIt>\r\n        input_iterator_container(InIt first, InIt last) : m_val(first, last) {}\r\n\r\n        input_iterator_container(std::initializer_list<T> init_list)\r\n            : input_iterator_container(init_list.begin(), init_list.end()) {}\r\n\r\n        input_iterator_container(const input_iterator_container&)            = default;\r\n        input_iterator_container(input_iterator_container&&)                 = default;\r\n        input_iterator_container& operator=(const input_iterator_container&) = default;\r\n        input_iterator_container& operator=(input_iterator_container&&)      = default;\r\n\r\n        const_iterator begin() const {\r\n            return const_iterator{reinterpret_cast<const T*>(m_val.data())};\r\n        }\r\n        const_iterator end() const {\r\n            return const_iterator{reinterpret_cast<const T*>(m_val.data()) + m_val.size()};\r\n        }\r\n        iterator begin() {\r\n            return iterator{reinterpret_cast<T*>(m_val.data())};\r\n        }\r\n        iterator end() {\r\n            return iterator{reinterpret_cast<T*>(m_val.data()) + m_val.size()};\r\n        }\r\n\r\n        const_iterator cbegin() const {\r\n            return begin();\r\n        }\r\n        const_iterator cend() const {\r\n            return end();\r\n        }\r\n\r\n        std::vector<impl_value> m_val;\r\n    };\r\n} // namespace std_testing\r\n\r\n#undef STATIC_ASSERT\r\n"
  },
  {
    "path": "tests/std/include/instantiate_algorithms.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n// This tests all STL algorithms, including <numeric> and <memory>.\r\n// Notably, all permutations of all iterator strengths are tested.\r\n\r\n#include <algorithm>\r\n#include <cstddef>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <memory>\r\n#include <numeric>\r\n#include <type_traits>\r\n\r\n#ifdef __cpp_lib_execution\r\n#include <execution>\r\n#endif // __cpp_lib_execution\r\n\r\n// Compiling all algorithms takes too long for one test case.\r\n// Therefore, when using this header, be sure to define INSTANTIATE_ALGORITHMS_SPLIT_MODE\r\n// to indicate if this should compile part 1 or part 2.\r\n#if !defined(INSTANTIATE_ALGORITHMS_SPLIT_MODE) || INSTANTIATE_ALGORITHMS_SPLIT_MODE < 1 \\\r\n    || INSTANTIATE_ALGORITHMS_SPLIT_MODE > 2\r\n#error INSTANTIATE_ALGORITHMS_SPLIT_MODE must be defined to 1 or 2.\r\n#endif\r\n\r\nnamespace std_testing {\r\n    namespace dummy_functors {\r\n        // Various functors required by various algorithms.\r\n        // Note that the standard actually requires these to be copyable. As a \"nonstandard extension\" we want\r\n        // to ensure we don't copy them, because copying some functors (e.g. std::function) is comparatively\r\n        // expensive, and even for relatively cheap to copy function objects we care (somewhat) about debug\r\n        // mode perf.\r\n\r\n        struct Immobile {\r\n            Immobile()                           = default;\r\n            Immobile(const Immobile&)            = delete;\r\n            Immobile& operator=(const Immobile&) = delete;\r\n        };\r\n\r\n        struct MoveOnly {\r\n            MoveOnly()                           = default;\r\n            MoveOnly(const MoveOnly&)            = delete;\r\n            MoveOnly(MoveOnly&&)                 = default;\r\n            MoveOnly& operator=(const MoveOnly&) = delete;\r\n            MoveOnly& operator=(MoveOnly&&)      = delete;\r\n        };\r\n\r\n        template <typename T>\r\n        struct Predicate : MoveOnly {\r\n            bool operator()(const T&) const {\r\n                return true;\r\n            }\r\n        };\r\n\r\n        template <typename T>\r\n        struct BiPredicate : MoveOnly {\r\n            bool operator()(const T&, const T&) const {\r\n                return true;\r\n            }\r\n        };\r\n\r\n        template <typename T>\r\n        struct UnaryOperation : MoveOnly {\r\n            T operator()(const T&) const {\r\n                return {};\r\n            }\r\n        };\r\n\r\n        template <typename T>\r\n        struct BinaryOperation : MoveOnly {\r\n            T operator()(const T&, const T&) const {\r\n                return {};\r\n            }\r\n        };\r\n\r\n        template <typename T>\r\n        struct Generator : MoveOnly {\r\n            T operator()() const {\r\n                return {};\r\n            }\r\n        };\r\n\r\n        template <typename T>\r\n        struct Function : MoveOnly {\r\n            void operator()(const T&) {}\r\n        };\r\n\r\n        struct Rng : Immobile {\r\n            template <typename Integral>\r\n            Integral operator()(Integral) {\r\n                return 0;\r\n            }\r\n        };\r\n\r\n        struct Urng : Immobile {\r\n            typedef unsigned int result_type;\r\n            unsigned int operator()() {\r\n                return 4; // chosen by fair dice roll; guaranteed to be random\r\n            }\r\n            static constexpr unsigned int min() {\r\n                return 0;\r\n            }\r\n            static constexpr unsigned int max() {\r\n                return 100;\r\n            }\r\n        };\r\n\r\n        // Check for op,()\r\n        template <typename T, typename U>\r\n        void operator,(const T&, const U&) = delete;\r\n    } // namespace dummy_functors\r\n\r\n\r\n    template <typename ValueType, typename InIt, typename FwdIt, typename BidIt, typename RanIt, typename OutIt,\r\n        typename PRED, typename BIPRED, typename UNARYOP, typename BINARYOP, typename GENERATOR, typename FUNCTION,\r\n        typename RNG, typename URNG>\r\n    struct algorithms_tester {\r\n\r\n        // The convention here is that \"UPPERCASE\" variables are fixed types, while\r\n        // \"lowercase\" variables are varying types.\r\n        // For example, \"FWDIT\" is always a forward-only iterator, while \"fwd1\"\r\n        // is a forward-or-better iterator.\r\n\r\n        ValueType VAL;\r\n        ValueType VALARR[10];\r\n\r\n        ValueType (&ARRIT)[10] = VALARR;\r\n        typedef decltype(ARRIT) ArrIt;\r\n\r\n        typedef BIPRED COMP;\r\n\r\n        InIt INIT;\r\n        FwdIt FWDIT;\r\n        BidIt BIDIT;\r\n        RanIt RANIT;\r\n        OutIt OUTIT;\r\n\r\n        template <typename Iter>\r\n        typename std::iterator_traits<Iter>::difference_type Get_size(Iter) {\r\n            return {};\r\n        }\r\n\r\n#if INSTANTIATE_ALGORITHMS_SPLIT_MODE == 1\r\n        std::list<ValueType> LST;\r\n        std::forward_list<ValueType> FLST;\r\n#endif // SPLIT_MODE\r\n\r\n        algorithms_tester(InIt a, FwdIt b, BidIt c, RanIt d, OutIt e)\r\n            : INIT(a), FWDIT(b), BIDIT(c), RANIT(d), OUTIT(e) {}\r\n\r\n        // Now, test everything!\r\n        template <typename In1, typename In2, typename Out>\r\n        void test_in1_in2_out(In1 in1, In2 in2, Out out) {\r\n#if INSTANTIATE_ALGORITHMS_SPLIT_MODE == 1\r\n            std::transform(in1, in1, in2, out, BINARYOP{});\r\n            std::merge(in1, in1, in2, in2, out);\r\n            std::merge(in1, in1, in2, in2, out, COMP{});\r\n            std::set_union(in1, in1, in2, in2, out);\r\n            std::set_union(in1, in1, in2, in2, out, COMP{});\r\n#else // ^^^ SPLIT_MODE 1 / SPLIT_MODE 2 vvv\r\n            std::set_intersection(in1, in1, in2, in2, out);\r\n            std::set_intersection(in1, in1, in2, in2, out, COMP{});\r\n            std::set_difference(in1, in1, in2, in2, out);\r\n            std::set_difference(in1, in1, in2, in2, out, COMP{});\r\n            std::set_symmetric_difference(in1, in1, in2, in2, out);\r\n            std::set_symmetric_difference(in1, in1, in2, in2, out, COMP{});\r\n#endif // SPLIT_MODE\r\n        }\r\n\r\n        template <typename In1, typename In2>\r\n        void test_in1_in2(In1 in1, In2 in2) {\r\n            test_in1_in2_out(in1, in2, OUTIT);\r\n            test_in1_in2_out(in1, in2, INIT);\r\n            test_in1_in2_out(in1, in2, FWDIT);\r\n            test_in1_in2_out(in1, in2, BIDIT);\r\n            test_in1_in2_out(in1, in2, RANIT);\r\n            test_in1_in2_out(in1, in2, ARRIT);\r\n\r\n#if INSTANTIATE_ALGORITHMS_SPLIT_MODE == 2\r\n            (void) std::mismatch(in1, in1, in2);\r\n            (void) std::mismatch(in1, in1, in2, BIPRED{});\r\n            (void) std::mismatch(in1, in1, in2, in2);\r\n            (void) std::mismatch(in1, in1, in2, in2, BIPRED{});\r\n            (void) std::equal(in1, in1, in2);\r\n            (void) std::equal(in1, in1, in2, BIPRED{});\r\n            (void) std::equal(in1, in1, in2, in2);\r\n            (void) std::equal(in1, in1, in2, in2, BIPRED{});\r\n            (void) std::includes(in1, in1, in2, in2);\r\n            (void) std::includes(in1, in1, in2, in2, COMP{});\r\n            (void) std::lexicographical_compare(in1, in1, in2, in2);\r\n            (void) std::lexicographical_compare(in1, in1, in2, in2, COMP{});\r\n\r\n            (void) std::inner_product(in1, in1, in2, VAL);\r\n            (void) std::inner_product(in1, in1, in2, VAL, BINARYOP{}, BINARYOP{});\r\n#if _HAS_CXX17\r\n            (void) std::transform_reduce(in1, in1, in2, VAL);\r\n            (void) std::transform_reduce(in1, in1, in2, VAL, BINARYOP{}, BINARYOP{});\r\n#endif // _HAS_CXX17\r\n#endif // SPLIT_MODE\r\n        }\r\n\r\n        template <typename In1, typename Fwd1>\r\n        void test_in1_fwd1(In1 in1, Fwd1 fwd1) {\r\n            // SPLIT_MODE 1\r\n            (void) std::find_first_of(in1, in1, fwd1, fwd1);\r\n            (void) std::find_first_of(in1, in1, fwd1, fwd1, BIPRED{});\r\n\r\n            std::uninitialized_copy(in1, in1, fwd1);\r\n            std::uninitialized_copy_n(in1, Get_size(in1), fwd1);\r\n#if _HAS_CXX17\r\n            std::uninitialized_move(in1, in1, fwd1);\r\n            std::uninitialized_move_n(in1, Get_size(in1), fwd1);\r\n#endif // _HAS_CXX17\r\n        }\r\n\r\n        template <typename In1, typename Out, typename Out2>\r\n        void test_in1_out_out2(In1 in1, Out out, Out2 out2) {\r\n            // SPLIT_MODE 1\r\n            std::partition_copy(in1, in1, out, out2, PRED{});\r\n        }\r\n\r\n        template <typename In1, typename Out>\r\n        void test_in1_out(In1 in1, Out out) {\r\n            // SPLIT_MODE 1\r\n            test_in1_out_out2(in1, out, OUTIT);\r\n            test_in1_out_out2(in1, out, INIT);\r\n            test_in1_out_out2(in1, out, FWDIT);\r\n            test_in1_out_out2(in1, out, BIDIT);\r\n            test_in1_out_out2(in1, out, RANIT);\r\n            test_in1_out_out2(in1, out, ARRIT);\r\n\r\n            std::copy(in1, in1, out);\r\n            std::copy_n(in1, Get_size(in1), out);\r\n            std::copy_if(in1, in1, out, PRED{});\r\n            std::move(in1, in1, out);\r\n            std::transform(in1, in1, out, UNARYOP{});\r\n            std::replace_copy(in1, in1, out, VAL, VAL);\r\n            std::replace_copy_if(in1, in1, out, PRED{}, VAL);\r\n            std::remove_copy(in1, in1, out, VAL);\r\n            std::remove_copy_if(in1, in1, out, PRED{});\r\n            std::unique_copy(in1, in1, out);\r\n            std::unique_copy(in1, in1, out, BIPRED{});\r\n\r\n            std::partial_sum(in1, in1, out);\r\n            std::partial_sum(in1, in1, out, BINARYOP{});\r\n#if _HAS_CXX17\r\n            std::exclusive_scan(in1, in1, out, VAL);\r\n            std::exclusive_scan(in1, in1, out, VAL, BINARYOP{});\r\n            std::inclusive_scan(in1, in1, out);\r\n            std::inclusive_scan(in1, in1, out, BINARYOP{});\r\n            std::inclusive_scan(in1, in1, out, BINARYOP{}, VAL);\r\n            std::transform_exclusive_scan(in1, in1, out, VAL, BINARYOP{}, UNARYOP{});\r\n            std::transform_inclusive_scan(in1, in1, out, BINARYOP{}, UNARYOP{});\r\n            std::transform_inclusive_scan(in1, in1, out, BINARYOP{}, UNARYOP{}, VAL);\r\n#endif // _HAS_CXX17\r\n            std::adjacent_difference(in1, in1, out);\r\n            std::adjacent_difference(in1, in1, out, BINARYOP{});\r\n        }\r\n\r\n        template <typename In1>\r\n        void test_in1(In1 in1) {\r\n            test_in1_in2(in1, INIT);\r\n            test_in1_in2(in1, FWDIT);\r\n            test_in1_in2(in1, BIDIT);\r\n            test_in1_in2(in1, RANIT);\r\n            test_in1_in2(in1, ARRIT);\r\n\r\n#if INSTANTIATE_ALGORITHMS_SPLIT_MODE == 1\r\n            test_in1_fwd1(in1, FWDIT);\r\n            test_in1_fwd1(in1, BIDIT);\r\n            test_in1_fwd1(in1, RANIT);\r\n            test_in1_fwd1(in1, ARRIT);\r\n\r\n            test_in1_out(in1, OUTIT);\r\n            test_in1_out(in1, INIT);\r\n            test_in1_out(in1, FWDIT);\r\n            test_in1_out(in1, BIDIT);\r\n            test_in1_out(in1, RANIT);\r\n            test_in1_out(in1, ARRIT);\r\n\r\n            LST.assign(in1, in1);\r\n            LST.insert(LST.end(), in1, in1);\r\n\r\n            FLST.assign(in1, in1);\r\n            FLST.insert_after(FLST.begin(), in1, in1);\r\n\r\n#else // ^^^ SPLIT_MODE 1 / SPLIT_MODE 2 vvv\r\n            (void) std::all_of(in1, in1, PRED{});\r\n            (void) std::any_of(in1, in1, PRED{});\r\n            (void) std::none_of(in1, in1, PRED{});\r\n            std::for_each(in1, in1, FUNCTION{});\r\n#if _HAS_CXX17\r\n            std::for_each_n(in1, Get_size(in1), FUNCTION{});\r\n#endif // _HAS_CXX17\r\n            (void) std::find(in1, in1, VAL);\r\n            (void) std::find_if(in1, in1, PRED{});\r\n            (void) std::find_if_not(in1, in1, PRED{});\r\n            (void) std::count(in1, in1, VAL);\r\n            (void) std::count_if(in1, in1, PRED{});\r\n            (void) std::is_partitioned(in1, in1, PRED{});\r\n            std::partial_sort_copy(in1, in1, RANIT, RANIT);\r\n            std::partial_sort_copy(in1, in1, RANIT, RANIT, COMP{});\r\n#if _HAS_CXX17\r\n            std::sample(in1, in1, RANIT, Get_size(in1), URNG{});\r\n            std::sample(in1, in1, ARRIT, Get_size(in1), URNG{});\r\n#endif // _HAS_CXX17\r\n\r\n            (void) std::accumulate(in1, in1, VAL);\r\n            (void) std::accumulate(in1, in1, VAL, BINARYOP{});\r\n#if _HAS_CXX17\r\n            (void) std::reduce(in1, in1);\r\n            (void) std::reduce(in1, in1, VAL);\r\n            (void) std::reduce(in1, in1, VAL, BINARYOP{});\r\n            (void) std::transform_reduce(in1, in1, VAL, BINARYOP{}, UNARYOP{});\r\n#endif // _HAS_CXX17\r\n\r\n\r\n#endif // SPLIT_MODE\r\n        }\r\n\r\n#ifdef __cpp_lib_execution\r\n        template <typename Fwd1, typename Fwd2, typename Fwd3, typename ExecutionPolicy>\r\n        void test_exec_fwd1_fwd2_fwd3(ExecutionPolicy&& exec, Fwd1 fwd1, Fwd2 fwd2, Fwd3 fwd3) {\r\n            std::transform(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd3, BINARYOP{});\r\n\r\n            std::partition_copy(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd3, PRED{});\r\n\r\n            std::merge(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, fwd3);\r\n            std::merge(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, fwd3, COMP{});\r\n\r\n            std::set_union(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, fwd3);\r\n            std::set_union(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, fwd3, COMP{});\r\n            std::set_intersection(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, fwd3);\r\n            std::set_intersection(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, fwd3, COMP{});\r\n            std::set_difference(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, fwd3);\r\n            std::set_difference(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, fwd3, COMP{});\r\n            std::set_symmetric_difference(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, fwd3);\r\n            std::set_symmetric_difference(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, fwd3, COMP{});\r\n        }\r\n\r\n        template <typename Fwd1, typename Fwd2, typename ExecutionPolicy>\r\n        void test_exec_fwd1_fwd2(ExecutionPolicy&& exec, Fwd1 fwd1, Fwd2 fwd2) {\r\n            test_exec_fwd1_fwd2_fwd3(std::forward<ExecutionPolicy>(exec), fwd1, fwd2, FWDIT);\r\n            test_exec_fwd1_fwd2_fwd3(std::forward<ExecutionPolicy>(exec), fwd1, fwd2, BIDIT);\r\n            test_exec_fwd1_fwd2_fwd3(std::forward<ExecutionPolicy>(exec), fwd1, fwd2, RANIT);\r\n            test_exec_fwd1_fwd2_fwd3(std::forward<ExecutionPolicy>(exec), fwd1, fwd2, ARRIT);\r\n\r\n            (void) std::find_end(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2);\r\n            (void) std::find_end(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, BIPRED{});\r\n            (void) std::find_first_of(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2);\r\n            (void) std::find_first_of(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, BIPRED{});\r\n            (void) std::mismatch(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2);\r\n            (void) std::mismatch(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, BIPRED{});\r\n            (void) std::mismatch(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2);\r\n            (void) std::mismatch(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, BIPRED{});\r\n            (void) std::equal(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2);\r\n            (void) std::equal(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, BIPRED{});\r\n            (void) std::equal(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2);\r\n            (void) std::equal(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, BIPRED{});\r\n            (void) std::search(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2);\r\n            (void) std::search(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, BIPRED{});\r\n\r\n            std::copy(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2);\r\n            std::copy_if(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, PRED{});\r\n            std::copy_n(std::forward<ExecutionPolicy>(exec), fwd1, Get_size(fwd1), fwd2);\r\n            std::move(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2);\r\n            std::swap_ranges(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2);\r\n            std::transform(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, UNARYOP{});\r\n            std::rotate_copy(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd1, fwd2);\r\n            std::replace_copy(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, VAL, VAL);\r\n            std::replace_copy_if(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, PRED{}, VAL);\r\n            std::remove_copy(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, VAL);\r\n            std::remove_copy_if(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, PRED{});\r\n            std::unique_copy(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2);\r\n            std::unique_copy(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, BIPRED{});\r\n\r\n            (void) std::includes(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2);\r\n            (void) std::includes(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, COMP{});\r\n\r\n            (void) std::lexicographical_compare(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2);\r\n            (void) std::lexicographical_compare(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, fwd2, COMP{});\r\n\r\n            (void) std::transform_reduce(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, VAL);\r\n            (void) std::transform_reduce(\r\n                std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, VAL, BINARYOP{}, BINARYOP{});\r\n            std::exclusive_scan(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, VAL);\r\n            std::exclusive_scan(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, VAL, BINARYOP{});\r\n            std::inclusive_scan(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2);\r\n            std::inclusive_scan(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, BINARYOP{});\r\n            std::inclusive_scan(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, BINARYOP{}, VAL);\r\n            std::transform_exclusive_scan(\r\n                std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, VAL, BINARYOP{}, UNARYOP{});\r\n            std::transform_inclusive_scan(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, BINARYOP{}, UNARYOP{});\r\n            std::transform_inclusive_scan(\r\n                std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, BINARYOP{}, UNARYOP{}, VAL);\r\n            std::adjacent_difference(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2);\r\n            std::adjacent_difference(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd2, BINARYOP{});\r\n        }\r\n#endif // __cpp_lib_execution\r\n\r\n        template <typename Fwd1, typename Fwd2>\r\n        void test_fwd1_fwd2(Fwd1 fwd1, Fwd2 fwd2) {\r\n            // SPLIT_MODE 1\r\n#ifdef __cpp_lib_execution\r\n            test_exec_fwd1_fwd2(std::execution::seq, fwd1, fwd2);\r\n            test_exec_fwd1_fwd2(std::execution::par, fwd1, fwd2);\r\n            test_exec_fwd1_fwd2(std::execution::par_unseq, fwd1, fwd2);\r\n#if _HAS_CXX20\r\n            test_exec_fwd1_fwd2(std::execution::unseq, fwd1, fwd2);\r\n#endif // _HAS_CXX20\r\n#endif // __cpp_lib_execution\r\n\r\n            (void) std::find_end(fwd1, fwd1, fwd2, fwd2);\r\n            (void) std::find_end(fwd1, fwd1, fwd2, fwd2, BIPRED{});\r\n            (void) std::is_permutation(fwd1, fwd1, fwd2);\r\n            (void) std::is_permutation(fwd1, fwd1, fwd2, BIPRED{});\r\n            (void) std::is_permutation(fwd1, fwd1, fwd2, fwd2);\r\n            (void) std::is_permutation(fwd1, fwd1, fwd2, fwd2, BIPRED{});\r\n            (void) std::search(fwd1, fwd1, fwd2, fwd2);\r\n            (void) std::search(fwd1, fwd1, fwd2, fwd2, BIPRED{});\r\n            std::swap_ranges(fwd1, fwd1, fwd2);\r\n            std::iter_swap(fwd1, fwd2);\r\n        }\r\n\r\n        template <typename Fwd1, typename Out>\r\n        void test_fwd1_out(Fwd1 fwd1, Out out) {\r\n            // SPLIT_MODE 2\r\n            std::rotate_copy(fwd1, fwd1, fwd1, out);\r\n#if _HAS_CXX17\r\n            std::sample(fwd1, fwd1, out, Get_size(fwd1), URNG{});\r\n#endif // _HAS_CXX17\r\n        }\r\n\r\n#ifdef __cpp_lib_execution\r\n        template <typename Fwd1, typename ExecutionPolicy>\r\n        void test_exec_fwd1(ExecutionPolicy&& exec, Fwd1 fwd1) {\r\n            (void) std::all_of(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, PRED{});\r\n            (void) std::any_of(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, PRED{});\r\n            (void) std::none_of(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, PRED{});\r\n            std::for_each(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, FUNCTION{});\r\n            std::for_each_n(std::forward<ExecutionPolicy>(exec), fwd1, Get_size(fwd1), FUNCTION{});\r\n            (void) std::find(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, VAL);\r\n            (void) std::find_if(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, PRED{});\r\n            (void) std::find_if_not(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, PRED{});\r\n            (void) std::adjacent_find(std::forward<ExecutionPolicy>(exec), fwd1, fwd1);\r\n            (void) std::adjacent_find(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, BIPRED{});\r\n            (void) std::count(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, VAL);\r\n            (void) std::count_if(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, PRED{});\r\n            (void) std::search_n(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, Get_size(fwd1), VAL);\r\n            (void) std::search_n(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, Get_size(fwd1), VAL, BIPRED{});\r\n            std::replace(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, VAL, VAL);\r\n            std::replace_if(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, PRED{}, VAL);\r\n            std::fill(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, VAL);\r\n            std::fill_n(std::forward<ExecutionPolicy>(exec), fwd1, Get_size(fwd1), VAL);\r\n            std::generate(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, GENERATOR{});\r\n            std::generate_n(std::forward<ExecutionPolicy>(exec), fwd1, Get_size(fwd1), GENERATOR{});\r\n            (void) std::remove(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, VAL);\r\n            (void) std::remove_if(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, PRED{});\r\n            (void) std::unique(std::forward<ExecutionPolicy>(exec), fwd1, fwd1);\r\n            (void) std::unique(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, COMP{});\r\n            std::rotate(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, fwd1);\r\n\r\n            std::partial_sort_copy(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, RANIT, RANIT);\r\n            std::partial_sort_copy(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, RANIT, RANIT, COMP{});\r\n            (void) std::is_sorted(std::forward<ExecutionPolicy>(exec), fwd1, fwd1);\r\n            (void) std::is_sorted(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, COMP{});\r\n            (void) std::is_sorted_until(std::forward<ExecutionPolicy>(exec), fwd1, fwd1);\r\n            (void) std::is_sorted_until(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, COMP{});\r\n\r\n#if _HAS_CXX20\r\n            std::shift_left(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, 42);\r\n            std::shift_right(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, 42);\r\n#endif // _HAS_CXX20\r\n\r\n            std::partition(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, PRED{});\r\n            (void) std::is_partitioned(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, PRED{});\r\n\r\n            (void) std::min_element(std::forward<ExecutionPolicy>(exec), fwd1, fwd1);\r\n            (void) std::min_element(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, COMP{});\r\n            (void) std::max_element(std::forward<ExecutionPolicy>(exec), fwd1, fwd1);\r\n            (void) std::max_element(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, COMP{});\r\n            (void) std::minmax_element(std::forward<ExecutionPolicy>(exec), fwd1, fwd1);\r\n            (void) std::minmax_element(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, COMP{});\r\n\r\n            (void) std::reduce(std::forward<ExecutionPolicy>(exec), fwd1, fwd1);\r\n            (void) std::reduce(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, VAL);\r\n            (void) std::reduce(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, VAL, BINARYOP{});\r\n            (void) std::transform_reduce(std::forward<ExecutionPolicy>(exec), fwd1, fwd1, VAL, BINARYOP{}, UNARYOP{});\r\n        }\r\n#endif // __cpp_lib_execution\r\n\r\n        template <typename Fwd1>\r\n        void test_fwd1(Fwd1 fwd1) {\r\n            // SPLIT_MODE 2\r\n#ifdef __cpp_lib_execution\r\n            test_exec_fwd1(std::execution::seq, fwd1);\r\n            test_exec_fwd1(std::execution::par, fwd1);\r\n            test_exec_fwd1(std::execution::par_unseq, fwd1);\r\n#if _HAS_CXX20\r\n            test_exec_fwd1(std::execution::unseq, fwd1);\r\n#endif // _HAS_CXX20\r\n#endif // __cpp_lib_execution\r\n\r\n            test_fwd1_fwd2(fwd1, FWDIT);\r\n            test_fwd1_fwd2(fwd1, BIDIT);\r\n            test_fwd1_fwd2(fwd1, RANIT);\r\n            test_fwd1_fwd2(fwd1, ARRIT);\r\n\r\n            test_fwd1_out(fwd1, OUTIT);\r\n            test_fwd1_out(fwd1, INIT);\r\n            test_fwd1_out(fwd1, FWDIT);\r\n            test_fwd1_out(fwd1, BIDIT);\r\n            test_fwd1_out(fwd1, RANIT);\r\n            test_fwd1_out(fwd1, ARRIT);\r\n\r\n            (void) std::adjacent_find(fwd1, fwd1);\r\n            (void) std::adjacent_find(fwd1, fwd1, BIPRED{});\r\n            (void) std::search_n(fwd1, fwd1, Get_size(fwd1), VAL);\r\n            (void) std::search_n(fwd1, fwd1, Get_size(fwd1), VAL, BIPRED{});\r\n            std::replace(fwd1, fwd1, VAL, VAL);\r\n            std::replace_if(fwd1, fwd1, PRED{}, VAL);\r\n            std::fill(fwd1, fwd1, VAL);\r\n            std::generate(fwd1, fwd1, GENERATOR{});\r\n            (void) std::remove(fwd1, fwd1, VAL);\r\n            (void) std::remove_if(fwd1, fwd1, PRED{});\r\n            (void) std::unique(fwd1, fwd1);\r\n            (void) std::unique(fwd1, fwd1, BIPRED{});\r\n            std::rotate(fwd1, fwd1, fwd1);\r\n\r\n#if _HAS_CXX20\r\n            std::shift_left(fwd1, fwd1, 42);\r\n            std::shift_right(fwd1, fwd1, 42);\r\n#endif // _HAS_CXX20\r\n\r\n            std::partition(fwd1, fwd1, PRED{});\r\n            (void) std::partition_point(fwd1, fwd1, PRED{});\r\n            (void) std::is_sorted(fwd1, fwd1);\r\n            (void) std::is_sorted(fwd1, fwd1, COMP{});\r\n            (void) std::is_sorted_until(fwd1, fwd1);\r\n            (void) std::is_sorted_until(fwd1, fwd1, COMP{});\r\n            (void) std::lower_bound(fwd1, fwd1, VAL);\r\n            (void) std::lower_bound(fwd1, fwd1, VAL, COMP{});\r\n            (void) std::upper_bound(fwd1, fwd1, VAL);\r\n            (void) std::upper_bound(fwd1, fwd1, VAL, COMP{});\r\n            (void) std::equal_range(fwd1, fwd1, VAL);\r\n            (void) std::equal_range(fwd1, fwd1, VAL, COMP{});\r\n            (void) std::binary_search(fwd1, fwd1, VAL);\r\n            (void) std::binary_search(fwd1, fwd1, VAL, COMP{});\r\n            (void) std::min_element(fwd1, fwd1);\r\n            (void) std::min_element(fwd1, fwd1, COMP{});\r\n            (void) std::max_element(fwd1, fwd1);\r\n            (void) std::max_element(fwd1, fwd1, COMP{});\r\n            (void) std::minmax_element(fwd1, fwd1);\r\n            (void) std::minmax_element(fwd1, fwd1, COMP{});\r\n\r\n            std::iota(fwd1, fwd1, VAL);\r\n\r\n#if _HAS_CXX17\r\n            std::uninitialized_default_construct(fwd1, fwd1);\r\n            std::uninitialized_default_construct_n(fwd1, Get_size(fwd1));\r\n\r\n            std::uninitialized_value_construct(fwd1, fwd1);\r\n            std::uninitialized_value_construct_n(fwd1, Get_size(fwd1));\r\n#endif // _HAS_CXX17\r\n\r\n            std::uninitialized_fill(fwd1, fwd1, VAL);\r\n            std::uninitialized_fill_n(fwd1, Get_size(fwd1), VAL);\r\n\r\n#if _HAS_CXX17\r\n            std::destroy(fwd1, fwd1);\r\n            std::destroy_n(fwd1, Get_size(fwd1));\r\n#endif // _HAS_CXX17\r\n        }\r\n\r\n        template <typename Bid1, typename Bid2>\r\n        void test_bid1_bid2_xxx_backward(Bid1 bid1, Bid2 bid2) {\r\n            // SPLIT_MODE 2\r\n            std::copy_backward(bid1, bid1, bid2);\r\n            std::move_backward(bid1, bid1, bid2);\r\n        }\r\n\r\n        template <typename Bid1, typename Out>\r\n        void test_bid1_out(Bid1 bid1, Out out) {\r\n            // SPLIT_MODE 2\r\n            std::reverse_copy(bid1, bid1, out);\r\n        }\r\n\r\n#ifdef __cpp_lib_execution\r\n        template <typename Bid1, typename Fwd1, typename ExecutionPolicy>\r\n        void test_exec_bid1_fwd1(ExecutionPolicy&& exec, Bid1 bid1, Fwd1 fwd1) {\r\n            std::reverse_copy(std::forward<ExecutionPolicy>(exec), bid1, bid1, fwd1);\r\n        }\r\n\r\n        template <typename Bid1, typename Fwd1>\r\n        void test_bid1_fwd1(Bid1 bid1, Fwd1 fwd1) {\r\n            test_exec_bid1_fwd1(std::execution::seq, bid1, fwd1);\r\n            test_exec_bid1_fwd1(std::execution::par, bid1, fwd1);\r\n            test_exec_bid1_fwd1(std::execution::par_unseq, bid1, fwd1);\r\n#if _HAS_CXX20\r\n            test_exec_bid1_fwd1(std::execution::unseq, bid1, fwd1);\r\n#endif // _HAS_CXX20\r\n        }\r\n\r\n        template <typename Bid1, typename ExecutionPolicy>\r\n        void test_exec_bid1(ExecutionPolicy&& exec, Bid1 bid1) {\r\n            std::reverse(std::forward<ExecutionPolicy>(exec), bid1, bid1);\r\n            // Currently the standard requires random-access iterators for stable_sort, but our implementation\r\n            // works with bidirectional iterators and we don't want to regress this.\r\n            std::stable_sort(std::forward<ExecutionPolicy>(exec), bid1, bid1);\r\n            std::stable_sort(std::forward<ExecutionPolicy>(exec), bid1, bid1, COMP{});\r\n            std::stable_partition(std::forward<ExecutionPolicy>(exec), bid1, bid1, PRED{});\r\n            std::inplace_merge(std::forward<ExecutionPolicy>(exec), bid1, bid1, bid1);\r\n            std::inplace_merge(std::forward<ExecutionPolicy>(exec), bid1, bid1, bid1, COMP{});\r\n        }\r\n#endif // __cpp_lib_execution\r\n\r\n        template <typename Bid1>\r\n        void test_bid1(Bid1 bid1) {\r\n            // SPLIT_MODE 2\r\n            test_bid1_bid2_xxx_backward(bid1, BIDIT);\r\n            test_bid1_bid2_xxx_backward(bid1, RANIT);\r\n            test_bid1_bid2_xxx_backward(bid1, ARRIT);\r\n\r\n            test_bid1_out(bid1, OUTIT);\r\n            test_bid1_out(bid1, INIT);\r\n            test_bid1_out(bid1, FWDIT);\r\n            test_bid1_out(bid1, BIDIT);\r\n            test_bid1_out(bid1, RANIT);\r\n            test_bid1_out(bid1, ARRIT);\r\n\r\n#ifdef __cpp_lib_execution\r\n            test_bid1_fwd1(bid1, FWDIT);\r\n            test_bid1_fwd1(bid1, BIDIT);\r\n            test_bid1_fwd1(bid1, RANIT);\r\n            test_bid1_fwd1(bid1, ARRIT);\r\n\r\n            test_exec_bid1(std::execution::seq, bid1);\r\n            test_exec_bid1(std::execution::par, bid1);\r\n            test_exec_bid1(std::execution::par_unseq, bid1);\r\n#if _HAS_CXX20\r\n            test_exec_bid1(std::execution::unseq, bid1);\r\n#endif // _HAS_CXX20\r\n#endif // __cpp_lib_execution\r\n\r\n            std::reverse(bid1, bid1);\r\n            // Currently the standard requires random-access iterators for stable_sort, but our implementation\r\n            // works with bidirectional iterators and we don't want to regress this.\r\n            std::stable_sort(bid1, bid1);\r\n            std::stable_sort(bid1, bid1, COMP{});\r\n            std::stable_partition(bid1, bid1, PRED{});\r\n            std::inplace_merge(bid1, bid1, bid1);\r\n            std::inplace_merge(bid1, bid1, bid1, COMP{});\r\n            std::next_permutation(bid1, bid1);\r\n            std::next_permutation(bid1, bid1, COMP{});\r\n            std::prev_permutation(bid1, bid1);\r\n            std::prev_permutation(bid1, bid1, COMP{});\r\n        }\r\n\r\n\r\n        template <typename Out>\r\n        void test_out(Out out) {\r\n            // SPLIT_MODE 1\r\n            std::fill_n(out, 0, VAL);\r\n            std::generate_n(out, 0, GENERATOR{});\r\n        }\r\n\r\n#ifdef __cpp_lib_execution\r\n        template <typename Ran, typename ExecutionPolicy>\r\n        void test_exec_ran(ExecutionPolicy&& exec, Ran ran) {\r\n            std::sort(std::forward<ExecutionPolicy>(exec), ran, ran);\r\n            std::sort(std::forward<ExecutionPolicy>(exec), ran, ran, COMP{});\r\n            std::partial_sort(std::forward<ExecutionPolicy>(exec), ran, ran, ran);\r\n            std::partial_sort(std::forward<ExecutionPolicy>(exec), ran, ran, ran, COMP{});\r\n            std::nth_element(std::forward<ExecutionPolicy>(exec), ran, ran, ran);\r\n            std::nth_element(std::forward<ExecutionPolicy>(exec), ran, ran, ran, COMP{});\r\n            (void) std::is_heap(std::forward<ExecutionPolicy>(exec), ran, ran);\r\n            (void) std::is_heap(std::forward<ExecutionPolicy>(exec), ran, ran, COMP{});\r\n            (void) std::is_heap_until(std::forward<ExecutionPolicy>(exec), ran, ran);\r\n            (void) std::is_heap_until(std::forward<ExecutionPolicy>(exec), ran, ran, COMP{});\r\n        }\r\n#endif // __cpp_lib_execution\r\n\r\n        template <typename Ran>\r\n        void test_ran(Ran ran) {\r\n            // SPLIT_MODE 1\r\n#ifdef __cpp_lib_execution\r\n            test_exec_ran(std::execution::seq, ran);\r\n            test_exec_ran(std::execution::par, ran);\r\n            test_exec_ran(std::execution::par_unseq, ran);\r\n#if _HAS_CXX20\r\n            test_exec_ran(std::execution::unseq, ran);\r\n#endif // _HAS_CXX20\r\n#endif // __cpp_lib_execution\r\n\r\n#if _HAS_AUTO_PTR_ETC\r\n            std::random_shuffle(ran, ran);\r\n            std::random_shuffle(ran, ran, RNG{});\r\n#endif // _HAS_AUTO_PTR_ETC\r\n            std::shuffle(ran, ran, URNG{});\r\n            std::sort(ran, ran);\r\n            std::sort(ran, ran, COMP{});\r\n            std::partial_sort(ran, ran, ran);\r\n            std::partial_sort(ran, ran, ran, COMP{});\r\n            std::nth_element(ran, ran, ran);\r\n            std::nth_element(ran, ran, ran, COMP{});\r\n            std::push_heap(ran, ran);\r\n            std::push_heap(ran, ran, COMP{});\r\n            std::pop_heap(ran, ran);\r\n            std::pop_heap(ran, ran, COMP{});\r\n            std::make_heap(ran, ran);\r\n            std::make_heap(ran, ran, COMP{});\r\n            std::sort_heap(ran, ran);\r\n            std::sort_heap(ran, ran, COMP{});\r\n            (void) std::is_heap(ran, ran);\r\n            (void) std::is_heap(ran, ran, COMP{});\r\n            (void) std::is_heap_until(ran, ran);\r\n            (void) std::is_heap_until(ran, ran, COMP{});\r\n        }\r\n\r\n\r\n        void test() {\r\n            test_in1(INIT);\r\n            test_in1(FWDIT);\r\n            test_in1(BIDIT);\r\n            test_in1(RANIT);\r\n            test_in1(ARRIT);\r\n\r\n#if INSTANTIATE_ALGORITHMS_SPLIT_MODE == 2\r\n            test_fwd1(FWDIT);\r\n            test_fwd1(BIDIT);\r\n            test_fwd1(RANIT);\r\n            test_fwd1(ARRIT);\r\n\r\n            test_bid1(BIDIT);\r\n            test_bid1(RANIT);\r\n            test_bid1(ARRIT);\r\n#endif // SPLIT_MODE\r\n\r\n#if INSTANTIATE_ALGORITHMS_SPLIT_MODE == 1\r\n            test_out(OUTIT);\r\n            test_out(INIT);\r\n            test_out(FWDIT);\r\n            test_out(BIDIT);\r\n            test_out(RANIT);\r\n            test_out(ARRIT);\r\n\r\n            test_ran(RANIT);\r\n            test_ran(ARRIT);\r\n\r\n            LST.merge(LST);\r\n            LST.merge(std::move(LST));\r\n            LST.merge(LST, COMP{});\r\n            LST.merge(std::move(LST), COMP{});\r\n            LST.remove(VAL);\r\n            LST.remove_if(PRED{});\r\n            LST.reverse();\r\n            LST.sort();\r\n            LST.sort(COMP{});\r\n            LST.splice(LST.end(), LST);\r\n            LST.splice(LST.end(), std::move(LST));\r\n            LST.splice(LST.end(), LST, LST.begin());\r\n            LST.splice(LST.end(), std::move(LST), LST.begin());\r\n            LST.splice(LST.end(), LST, LST.begin(), LST.end());\r\n            LST.splice(LST.end(), std::move(LST), LST.begin(), LST.end());\r\n            LST.unique();\r\n            LST.unique(COMP{});\r\n            (void) (LST == LST);\r\n\r\n            FLST.merge(FLST);\r\n            FLST.merge(std::move(FLST));\r\n            FLST.merge(FLST, COMP{});\r\n            FLST.merge(std::move(FLST), COMP{});\r\n            FLST.remove(VAL);\r\n            FLST.remove_if(PRED{});\r\n            FLST.reverse();\r\n            FLST.sort();\r\n            FLST.sort(COMP{});\r\n            FLST.splice_after(FLST.end(), FLST);\r\n            FLST.splice_after(FLST.end(), std::move(FLST));\r\n            FLST.splice_after(FLST.end(), FLST, FLST.begin());\r\n            FLST.splice_after(FLST.end(), std::move(FLST), FLST.begin());\r\n            FLST.splice_after(FLST.end(), FLST, FLST.begin(), FLST.end());\r\n            FLST.splice_after(FLST.end(), std::move(FLST), FLST.begin(), FLST.end());\r\n            FLST.unique();\r\n            FLST.unique(COMP{});\r\n            (void) (FLST == FLST);\r\n\r\n            (void) std::min(VAL, VAL);\r\n            (void) std::min(VAL, VAL, COMP{});\r\n            (void) std::min({VAL, VAL, VAL});\r\n            (void) std::min({VAL, VAL, VAL}, COMP{});\r\n            (void) std::max(VAL, VAL);\r\n            (void) std::max(VAL, VAL, COMP{});\r\n            (void) std::max({VAL, VAL, VAL});\r\n            (void) std::max({VAL, VAL, VAL}, COMP{});\r\n#if _HAS_CXX17\r\n            (void) std::clamp(VAL, VAL, VAL);\r\n            (void) std::clamp(VAL, VAL, VAL, COMP{});\r\n#endif // _HAS_CXX17\r\n            (void) std::minmax(VAL, VAL);\r\n            (void) std::minmax(VAL, VAL, COMP{});\r\n            (void) std::minmax({VAL, VAL, VAL});\r\n            (void) std::minmax({VAL, VAL, VAL}, COMP{});\r\n#endif // SPLIT_MODE\r\n        }\r\n    };\r\n\r\n    template <typename ValueType, typename InIt, typename FwdIt, typename BidIt, typename RanIt, typename OutIt,\r\n        typename PRED = dummy_functors::Predicate<ValueType>, typename BIPRED = dummy_functors::BiPredicate<ValueType>,\r\n        typename UNARYOP   = dummy_functors::UnaryOperation<ValueType>,\r\n        typename BINARYOP  = dummy_functors::BinaryOperation<ValueType>,\r\n        typename GENERATOR = dummy_functors::Generator<ValueType>,\r\n        typename FUNCTION = dummy_functors::Function<ValueType>, typename RNG = dummy_functors::Rng,\r\n        typename URNG = dummy_functors::Urng>\r\n    void instantiate_std_algorithms_with(InIt a, FwdIt b, BidIt c, RanIt d, OutIt e) {\r\n        algorithms_tester<ValueType, InIt, FwdIt, BidIt, RanIt, OutIt, PRED, BIPRED, UNARYOP, BINARYOP, GENERATOR,\r\n            FUNCTION, RNG, URNG>\r\n            test_algorithms{a, b, c, d, e};\r\n        test_algorithms.test();\r\n    }\r\n} // namespace std_testing\r\n"
  },
  {
    "path": "tests/std/include/instantiate_algorithms_int.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n// This header contains all code for the instantiate_algorithms_int* test cases.\r\n// The instantiate_algorithm* tests take too long individually, so must be split into two parts.\r\n\r\n#include <input_iterator.hpp>\r\n#include <instantiate_algorithms.hpp>\r\n\r\nvoid test() {\r\n    std_testing::input_iterator_container<int> input_it{};\r\n    std::forward_list<int> fwd_it{};\r\n    std::list<int> bidi_it{};\r\n    std::vector<int> rand_it{};\r\n\r\n    std_testing::instantiate_std_algorithms_with<int>(\r\n        input_it.begin(), fwd_it.begin(), bidi_it.begin(), rand_it.begin(), std::front_inserter(fwd_it));\r\n}\r\n"
  },
  {
    "path": "tests/std/include/instantiate_algorithms_nontrivial.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n// This header contains all code for the instantiate_algorithms_nontrivial* test cases.\r\n// The instantiate_algorithm* tests take too long individually, so must be split into two parts.\r\n\r\n#include <random>\r\n#include <type_traits>\r\n\r\n#include <input_iterator.hpp>\r\n#include <instantiate_algorithms.hpp>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n// This is a type whose constructors and destructor are all non-trivial,\r\n// since we support some optimizations for trivial types.\r\nstruct NonTrivialType {\r\n    NonTrivialType() : m_data(get_random()) {}\r\n    ~NonTrivialType() {\r\n        m_data = get_random();\r\n    }\r\n    NonTrivialType(const NonTrivialType&) : m_data(get_random()) {}\r\n\r\n    NonTrivialType& operator=(const NonTrivialType&) {\r\n        m_data = get_random();\r\n        return *this;\r\n    }\r\n\r\n    bool operator<(const NonTrivialType&) const {\r\n        return false;\r\n    }\r\n    bool operator==(const NonTrivialType&) const {\r\n        return true;\r\n    }\r\n\r\n    NonTrivialType operator+(const NonTrivialType& v) const {\r\n        return v;\r\n    }\r\n    NonTrivialType operator-(const NonTrivialType& v) const {\r\n        return v;\r\n    }\r\n    NonTrivialType operator*(const NonTrivialType& v) const {\r\n        return v;\r\n    }\r\n\r\n    NonTrivialType& operator++() {\r\n        return *this;\r\n    }\r\n\r\n    unsigned int get_random() {\r\n        std::random_device get_rand{};\r\n        return get_rand();\r\n    }\r\n\r\n    unsigned int m_data;\r\n};\r\n\r\nSTATIC_ASSERT(!std::is_trivially_default_constructible_v<NonTrivialType>);\r\nSTATIC_ASSERT(!std::is_trivially_copy_constructible_v<NonTrivialType>);\r\nSTATIC_ASSERT(!std::is_trivially_move_constructible_v<NonTrivialType>);\r\nSTATIC_ASSERT(!std::is_trivially_destructible_v<NonTrivialType>);\r\nSTATIC_ASSERT(!std::is_trivially_copy_assignable_v<NonTrivialType>);\r\nSTATIC_ASSERT(!std::is_trivially_move_assignable_v<NonTrivialType>);\r\n\r\nvoid test() {\r\n    std_testing::input_iterator_container<NonTrivialType> input_it{};\r\n    std::forward_list<NonTrivialType> fwd_it{};\r\n    std::list<NonTrivialType> bidi_it{};\r\n    std::vector<NonTrivialType> rand_it{};\r\n\r\n    std_testing::instantiate_std_algorithms_with<NonTrivialType>(\r\n        input_it.begin(), fwd_it.begin(), bidi_it.begin(), rand_it.begin(), std::front_inserter(fwd_it));\r\n}\r\n\r\n#undef STATIC_ASSERT\r\n"
  },
  {
    "path": "tests/std/include/instantiate_algorithms_op_deref.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n// This header contains all code for the instantiate_algorithms_op_deref* test cases.\r\n// The instantiate_algorithm* tests take too long individually, so must be split into two parts.\r\n\r\n#include <instantiate_algorithms.hpp>\r\n\r\n// DevDiv-758138 \"Several algorithms break with iterators that overload the comma operator.\"\r\n// DevDiv-758134 \"uninitialized_copy and uninitialized_copy_n break with classes that overload operator &.\"\r\n\r\n// ADL will search this namespace for op,().\r\nnamespace Meow {\r\n\r\n    // This is an evil element type that overloads op&().\r\n    // It supports various operations required by various algorithms.\r\n    struct Evil {\r\n        void operator&() const = delete;\r\n\r\n        bool operator<(const Evil&) const {\r\n            return false;\r\n        }\r\n        bool operator==(const Evil&) const {\r\n            return true;\r\n        }\r\n\r\n        Evil operator+(const Evil& e) const {\r\n            return e;\r\n        }\r\n        Evil operator-(const Evil& e) const {\r\n            return e;\r\n        }\r\n        Evil operator*(const Evil& e) const {\r\n            return e;\r\n        }\r\n\r\n        Evil& operator++() {\r\n            return *this;\r\n        }\r\n    };\r\n\r\n    // These iterators point to Evil elements and will activate the op,() below.\r\n    template <bool is_checked>\r\n    struct BasicInIt {\r\n        using iterator_category = std::input_iterator_tag;\r\n        using value_type        = Evil;\r\n        using difference_type   = test_difference_type;\r\n        using pointer           = Evil*;\r\n        using reference         = Evil&;\r\n\r\n        BasicInIt(int, int) {}\r\n        BasicInIt(const BasicInIt&)            = default;\r\n        BasicInIt(BasicInIt&&)                 = default;\r\n        BasicInIt& operator=(const BasicInIt&) = default;\r\n        BasicInIt& operator=(BasicInIt&&)      = default;\r\n        ~BasicInIt()                           = default;\r\n\r\n        Evil& operator*() const {\r\n            static Evil val{};\r\n            return val;\r\n        }\r\n        Evil* operator->() const {\r\n            return nullptr;\r\n        }\r\n        BasicInIt& operator++() {\r\n            return *this;\r\n        }\r\n        void operator++(int) = delete; // avoid postincrement\r\n        bool operator==(const BasicInIt&) const {\r\n            return true;\r\n        }\r\n        bool operator!=(const BasicInIt&) const {\r\n            return true;\r\n        }\r\n\r\n        void _Seek_to(BasicInIt<false>) {}\r\n\r\n        BasicInIt<false> _Unwrapped() const {\r\n            return BasicInIt<false>{11, 22};\r\n        }\r\n\r\n        static constexpr bool _Unwrap_when_unverified = _ITERATOR_DEBUG_LEVEL == 0;\r\n    };\r\n\r\n    template <bool is_checked>\r\n    struct BasicFwdIt {\r\n        using iterator_category = std::forward_iterator_tag;\r\n        using value_type        = Evil;\r\n        using difference_type   = test_difference_type;\r\n        using pointer           = Evil*;\r\n        using reference         = Evil&;\r\n\r\n        BasicFwdIt()                             = default;\r\n        BasicFwdIt(const BasicFwdIt&)            = default;\r\n        BasicFwdIt(BasicFwdIt&&)                 = default;\r\n        BasicFwdIt& operator=(const BasicFwdIt&) = default;\r\n        BasicFwdIt& operator=(BasicFwdIt&&)      = default;\r\n        ~BasicFwdIt()                            = default;\r\n\r\n        Evil& operator*() const {\r\n            static Evil val{};\r\n            return val;\r\n        }\r\n        Evil* operator->() const {\r\n            return nullptr;\r\n        }\r\n        BasicFwdIt& operator++() {\r\n            return *this;\r\n        }\r\n        void operator++(int) = delete; // avoid postincrement\r\n        bool operator==(const BasicFwdIt&) const {\r\n            return true;\r\n        }\r\n        bool operator!=(const BasicFwdIt&) const {\r\n            return true;\r\n        }\r\n\r\n        void _Seek_to(BasicFwdIt<false>) {}\r\n\r\n        BasicFwdIt<false> _Unwrapped() const {\r\n            return BasicFwdIt<false>{};\r\n        }\r\n\r\n        static constexpr bool _Unwrap_when_unverified = _ITERATOR_DEBUG_LEVEL == 0;\r\n    };\r\n\r\n    template <bool is_checked>\r\n    struct BasicBidIt {\r\n        using iterator_category = std::bidirectional_iterator_tag;\r\n        using value_type        = Evil;\r\n        using difference_type   = test_difference_type;\r\n        using pointer           = Evil*;\r\n        using reference         = Evil&;\r\n\r\n        BasicBidIt()                             = default;\r\n        BasicBidIt(const BasicBidIt&)            = default;\r\n        BasicBidIt(BasicBidIt&&)                 = default;\r\n        BasicBidIt& operator=(const BasicBidIt&) = default;\r\n        BasicBidIt& operator=(BasicBidIt&&)      = default;\r\n        ~BasicBidIt()                            = default;\r\n\r\n        Evil& operator*() const {\r\n            static Evil val{};\r\n            return val;\r\n        }\r\n        Evil* operator->() const {\r\n            return nullptr;\r\n        }\r\n        BasicBidIt& operator++() {\r\n            return *this;\r\n        }\r\n        void operator++(int) = delete; // avoid postincrement\r\n        bool operator==(const BasicBidIt&) const {\r\n            return true;\r\n        }\r\n        bool operator!=(const BasicBidIt&) const {\r\n            return true;\r\n        }\r\n\r\n        BasicBidIt& operator--() {\r\n            return *this;\r\n        }\r\n        void operator--(int) = delete; // avoid postdecrement\r\n\r\n\r\n        void _Seek_to(BasicBidIt<false>) {}\r\n\r\n        BasicBidIt<false> _Unwrapped() const {\r\n            return BasicBidIt<false>{};\r\n        }\r\n\r\n        static constexpr bool _Unwrap_when_unverified = _ITERATOR_DEBUG_LEVEL == 0;\r\n    };\r\n\r\n    template <bool is_checked>\r\n    struct BasicRanIt {\r\n        using iterator_category = std::random_access_iterator_tag;\r\n        using value_type        = Evil;\r\n        using difference_type   = test_difference_type;\r\n        using pointer           = Evil*;\r\n        using reference         = Evil&;\r\n\r\n        BasicRanIt()                             = default;\r\n        BasicRanIt(const BasicRanIt&)            = default;\r\n        BasicRanIt(BasicRanIt&&)                 = default;\r\n        BasicRanIt& operator=(const BasicRanIt&) = default;\r\n        BasicRanIt& operator=(BasicRanIt&&)      = default;\r\n        ~BasicRanIt()                            = default;\r\n\r\n        Evil& operator*() const {\r\n            static Evil val{};\r\n            return val;\r\n        }\r\n        Evil* operator->() const {\r\n            return nullptr;\r\n        }\r\n        BasicRanIt& operator++() {\r\n            return *this;\r\n        }\r\n        void operator++(int) = delete; // avoid postincrement\r\n        bool operator==(const BasicRanIt&) const {\r\n            return true;\r\n        }\r\n        bool operator!=(const BasicRanIt&) const {\r\n            return true;\r\n        }\r\n        BasicRanIt& operator--() {\r\n            return *this;\r\n        }\r\n        void operator--(int) = delete; // avoid postdecrement\r\n\r\n        BasicRanIt& operator+=(difference_type) {\r\n            return *this;\r\n        }\r\n        BasicRanIt& operator-=(difference_type) {\r\n            return *this;\r\n        }\r\n        BasicRanIt operator+(difference_type) const {\r\n            return *this;\r\n        }\r\n        BasicRanIt operator-(difference_type) const {\r\n            return *this;\r\n        }\r\n        difference_type operator-(const BasicRanIt&) const {\r\n            return 0;\r\n        }\r\n\r\n        Evil& operator[](difference_type) const = delete; // avoid subscript, N4849 [algorithms.requirements]/8\r\n\r\n        bool operator<(const BasicRanIt&) const {\r\n            return true;\r\n        }\r\n        bool operator<=(const BasicRanIt&) const {\r\n            return true;\r\n        }\r\n        bool operator>(const BasicRanIt&) const {\r\n            return true;\r\n        }\r\n        bool operator>=(const BasicRanIt&) const {\r\n            return true;\r\n        }\r\n\r\n        void _Seek_to(BasicRanIt<false>) {}\r\n\r\n        BasicRanIt<false> _Unwrapped() const {\r\n            return BasicRanIt<false>{};\r\n        }\r\n\r\n        static constexpr bool _Unwrap_when_unverified = _ITERATOR_DEBUG_LEVEL == 0;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        void _Verify_offset(difference_type) const {}\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n    };\r\n\r\n    template <bool is_checked>\r\n    BasicRanIt<is_checked> operator+(test_difference_type, const BasicRanIt<is_checked>& i) {\r\n        return i;\r\n    }\r\n\r\n    template <bool is_checked>\r\n    struct BasicOutIt {\r\n        using iterator_category = std::output_iterator_tag;\r\n        using value_type        = void;\r\n        using difference_type   = void;\r\n        using pointer           = void;\r\n        using reference         = void;\r\n\r\n        BasicOutIt(int, int) {}\r\n        BasicOutIt(const BasicOutIt&)            = default;\r\n        BasicOutIt(BasicOutIt&&)                 = default;\r\n        BasicOutIt& operator=(const BasicOutIt&) = default;\r\n        BasicOutIt& operator=(BasicOutIt&&)      = default;\r\n        ~BasicOutIt()                            = default;\r\n\r\n        Evil& operator*() const {\r\n            static Evil val{};\r\n            return val;\r\n        }\r\n        BasicOutIt& operator++() {\r\n            return *this;\r\n        }\r\n        void operator++(int) = delete; // avoid postincrement\r\n\r\n\r\n        void _Seek_to(BasicOutIt<false>) {}\r\n\r\n        BasicOutIt<false> _Unwrapped() const {\r\n            return BasicOutIt<false>{11, 22};\r\n        }\r\n\r\n        static constexpr bool _Unwrap_when_unverified = _ITERATOR_DEBUG_LEVEL == 0;\r\n    };\r\n\r\n    // If it's dragged in via ADL, this op,() will absorb anything.\r\n    template <typename T, typename U>\r\n    void operator,(const T&, const U&) = delete;\r\n\r\n    // VSO-258601 \"std::vector should not rely on operator& in Debug mode\"\r\n    // If it's dragged in via ADL, this op&() will absorb anything.\r\n    template <typename T>\r\n    void operator&(const T&) = delete;\r\n\r\n} // namespace Meow\r\n\r\nvoid test() {\r\n    // Test with iterators which have overloaded comma operator.\r\n    std_testing::instantiate_std_algorithms_with<Meow::Evil>(Meow::BasicInIt<true>{11, 22}, Meow::BasicFwdIt<true>{},\r\n        Meow::BasicBidIt<true>{}, Meow::BasicRanIt<true>{}, Meow::BasicOutIt<true>{11, 22});\r\n}\r\n\r\n// Also test DevDiv-938759 \"<type_traits>: is_assignable should tolerate overloaded comma operators [libcxx]\".\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nSTATIC_ASSERT(std::is_assignable_v<Meow::Evil&, Meow::Evil>);\r\nSTATIC_ASSERT(!std::is_assignable_v<Meow::Evil&, int>);\r\n\r\n#undef STATIC_ASSERT\r\n\r\n#if _HAS_CXX17\r\n#include <optional>\r\n\r\n// Defend against regression of the \",\" operator in optional::value\r\nvoid test_optional() {\r\n    using Meow::Evil;\r\n    using std::optional;\r\n    {\r\n        optional<Evil> oe{Evil()};\r\n        (void) oe.value();\r\n    }\r\n    {\r\n        const optional<Evil> oe{Evil()};\r\n        (void) oe.value();\r\n    }\r\n    {\r\n        (void) optional<Evil>{Evil()}.value();\r\n    }\r\n    {\r\n        using T = const optional<Evil>;\r\n        (void) T{Evil()}.value();\r\n    }\r\n}\r\n#endif // _HAS_CXX17\r\n"
  },
  {
    "path": "tests/std/include/instantiate_containers_iterators_common.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n#include <algorithm>\r\n#include <cstddef>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <initializer_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <input_iterator.hpp>\r\n\r\n// lets INSTANTIATE macro be used for types that aren't default constructible.\r\n// Doesn't actually instantiate the type if not default constructible,\r\n// but it will inspect the type, which is the true purpose.\r\ntemplate <typename T, bool = std::is_default_constructible_v<T>>\r\nstruct instantiate_helper;\r\n\r\ntemplate <typename T>\r\nstruct instantiate_helper<T, true> {\r\n    using type = T;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct instantiate_helper<T, false> {\r\n    using type = int;\r\n};\r\n\r\n#define USE_VALUE(...)          \\\r\n    do {                        \\\r\n        auto val = __VA_ARGS__; \\\r\n        (void) val;             \\\r\n    } while (0)\r\n#define INSTANTIATE(...)                                      \\\r\n    do {                                                      \\\r\n        typename instantiate_helper<__VA_ARGS__>::type val{}; \\\r\n        (void) val;                                           \\\r\n    } while (0)\r\n#define TRAIT_V(TRAIT_NAME, ...) USE_VALUE(TRAIT_NAME##_v<__VA_ARGS__>)\r\n\r\n// need to prefer copy constructor over default constructor so iterator comparison is valid.\r\ntemplate <typename T>\r\nstd::enable_if_t<std::is_copy_constructible_v<T>, T> construct_another(const T& value) {\r\n    return value;\r\n}\r\n\r\ntemplate <typename T>\r\nstd::enable_if_t<!std::is_copy_constructible_v<T>, T> construct_another(const T&) {\r\n    return T{};\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nvoid equality_test(T&& lhs, U&& rhs) {\r\n    USE_VALUE(lhs == rhs);\r\n    USE_VALUE(lhs != rhs);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid equality_test(T value) {\r\n    T another = construct_another(value);\r\n    equality_test(value, another);\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nvoid comparable_test(T&& lhs, U&& rhs) {\r\n    equality_test(lhs, rhs);\r\n    USE_VALUE(lhs < rhs);\r\n    USE_VALUE(lhs > rhs);\r\n    USE_VALUE(lhs <= rhs);\r\n    USE_VALUE(lhs >= rhs);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid comparable_test(T value) {\r\n    T another = construct_another(value);\r\n    comparable_test(value, another);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid swap_test(const T& value) {\r\n    T lhs = construct_another(value);\r\n    T rhs = construct_another(value);\r\n    std::swap(lhs, rhs);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid hash_test(T&& value) {\r\n    auto hasher = std::hash<std::decay_t<T>>();\r\n    (void) hasher(std::forward<T>(value));\r\n}\r\n\r\ntemplate <typename T>\r\nvoid hash_test() {\r\n    T value{};\r\n    auto hasher = std::hash<T>();\r\n    (void) hasher(value);\r\n}\r\n\r\ntemplate <typename Container>\r\nvoid fwd_iterators_test() {\r\n    using ValueType = typename Container::value_type;\r\n    Container c{static_cast<ValueType>(1), static_cast<ValueType>(2), static_cast<ValueType>(3),\r\n        static_cast<ValueType>(4), static_cast<ValueType>(5), static_cast<ValueType>(6), static_cast<ValueType>(7),\r\n        static_cast<ValueType>(8), static_cast<ValueType>(9), static_cast<ValueType>(10)};\r\n\r\n    auto it  = begin(c);\r\n    auto it2 = it;\r\n\r\n    INSTANTIATE(std::iterator_traits<decltype(it)>);\r\n    (void) next(it);\r\n    advance(it2, 5);\r\n    (void) distance(it, it2);\r\n\r\n    USE_VALUE(make_move_iterator(it));\r\n    swap_test(it);\r\n}\r\n\r\ntemplate <typename Container>\r\nvoid bidi_iterators_test() {\r\n    using ValueType = typename Container::value_type;\r\n    Container c{static_cast<ValueType>(1), static_cast<ValueType>(2), static_cast<ValueType>(3),\r\n        static_cast<ValueType>(4), static_cast<ValueType>(5), static_cast<ValueType>(6), static_cast<ValueType>(7),\r\n        static_cast<ValueType>(8), static_cast<ValueType>(9), static_cast<ValueType>(10)};\r\n    auto it = begin(c);\r\n    equality_test(it);\r\n    auto rit = end(c);\r\n    equality_test(rit);\r\n    (void) prev(next(it));\r\n}\r\n\r\ntemplate <typename T>\r\nvoid random_access_iterator_test(T value) {\r\n    typename std::iterator_traits<T>::difference_type diff{};\r\n    USE_VALUE(diff + value);\r\n    USE_VALUE(value - value);\r\n    comparable_test(value);\r\n    ++value;\r\n    value++;\r\n    --value;\r\n    value--;\r\n}\r\n\r\ntemplate <typename Container>\r\nvoid random_iterators_test() {\r\n    using ValueType = typename Container::value_type;\r\n    Container c{static_cast<ValueType>(1), static_cast<ValueType>(2), static_cast<ValueType>(3),\r\n        static_cast<ValueType>(4), static_cast<ValueType>(5), static_cast<ValueType>(6), static_cast<ValueType>(7),\r\n        static_cast<ValueType>(8), static_cast<ValueType>(9), static_cast<ValueType>(10)};\r\n    random_access_iterator_test(c.begin());\r\n    random_access_iterator_test(c.rbegin());\r\n}\r\n\r\ntemplate <typename T>\r\nauto get_all_iterator_types_for(T value) {\r\n    using value_type = typename T::value_type;\r\n\r\n    return std::make_tuple(std_testing::input_iterator_container<value_type>(begin(value), end(value)),\r\n        std::forward_list<value_type>(begin(value), end(value)), std::list<value_type>(begin(value), end(value)),\r\n        std::vector<value_type>(begin(value), end(value)));\r\n}\r\n"
  },
  {
    "path": "tests/std/include/is_permissive.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <yvals_core.h>\r\n\r\nnamespace detail {\r\n    constexpr bool permissive() {\r\n        return false;\r\n    }\r\n\r\n    template <class>\r\n    struct PermissiveTestBase {\r\n        static constexpr bool permissive() {\r\n            return true;\r\n        }\r\n    };\r\n\r\n    template <class T>\r\n    struct PermissiveTest : PermissiveTestBase<T> {\r\n        static constexpr bool test() {\r\n            return permissive();\r\n        }\r\n    };\r\n} // namespace detail\r\n\r\ntemplate <class T>\r\nconstexpr bool is_permissive_v = detail::PermissiveTest<T>::test();\r\n\r\n_INLINE_VAR constexpr bool is_permissive = is_permissive_v<int>;\r\n"
  },
  {
    "path": "tests/std/include/new_counter.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <new>\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\n\r\nnamespace std_testing {\r\n    size_t g_total_news    = 0;\r\n    size_t g_total_deletes = 0;\r\n    size_t g_maximum_news  = 0;\r\n\r\n    void reset_new_counters(size_t new_maximum_news) {\r\n        assert(g_total_news == g_total_deletes);\r\n        g_total_news    = 0;\r\n        g_total_deletes = 0;\r\n        g_maximum_news  = new_maximum_news;\r\n    }\r\n} // namespace std_testing\r\n\r\nvoid* operator new(size_t size) {\r\n    void* const p = ::operator new(size, std::nothrow);\r\n    if (p == nullptr) {\r\n        throw std::bad_alloc{};\r\n    }\r\n\r\n    return p;\r\n}\r\n\r\n#ifdef __cpp_aligned_new\r\nvoid* operator new(size_t, std::align_val_t) {\r\n    abort();\r\n}\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n\r\nvoid* operator new(size_t size, const std::nothrow_t&) noexcept {\r\n    if (std_testing::g_total_news == std_testing::g_maximum_news) {\r\n        return nullptr;\r\n    }\r\n\r\n    if (size == 0) {\r\n        ++size;\r\n    }\r\n\r\n    ++std_testing::g_total_news;\r\n    return malloc(size);\r\n}\r\n\r\n#ifdef __cpp_aligned_new\r\nvoid* operator new(size_t, std::align_val_t, const std::nothrow_t&) noexcept {\r\n    abort();\r\n}\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n\r\nvoid operator delete(void* ptr) noexcept {\r\n    ::operator delete(ptr, std::nothrow);\r\n}\r\n\r\nvoid operator delete(void* ptr, size_t) noexcept {\r\n    ::operator delete(ptr, std::nothrow);\r\n}\r\n\r\n#ifdef __cpp_aligned_new\r\nvoid operator delete(void*, std::align_val_t) noexcept {\r\n    abort();\r\n}\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n\r\nvoid operator delete(void* ptr, const std::nothrow_t&) noexcept {\r\n    if (ptr) {\r\n        ++std_testing::g_total_deletes;\r\n        assert(std_testing::g_total_deletes <= std_testing::g_total_news);\r\n        free(ptr);\r\n    }\r\n}\r\n\r\n#ifdef __cpp_aligned_new\r\nvoid operator delete(void*, std::align_val_t, const std::nothrow_t&) noexcept {\r\n    abort();\r\n}\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n\r\nvoid* operator new[](size_t size) {\r\n    return ::operator new(size);\r\n}\r\n\r\n#ifdef __cpp_aligned_new\r\nvoid* operator new[](size_t, std::align_val_t) {\r\n    abort();\r\n}\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n\r\nvoid* operator new[](size_t size, const std::nothrow_t&) noexcept {\r\n    return ::operator new(size, std::nothrow);\r\n}\r\n\r\n#ifdef __cpp_aligned_new\r\nvoid* operator new[](size_t, std::align_val_t, const std::nothrow_t&) noexcept {\r\n    abort();\r\n}\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n\r\nvoid operator delete[](void* ptr) noexcept {\r\n    ::operator delete(ptr);\r\n}\r\n\r\nvoid operator delete[](void* ptr, size_t size) noexcept {\r\n    ::operator delete(ptr, size);\r\n}\r\n\r\n#ifdef __cpp_aligned_new\r\nvoid operator delete[](void*, std::align_val_t) noexcept {\r\n    abort();\r\n}\r\n\r\nvoid operator delete[](void*, size_t, std::align_val_t) noexcept {\r\n    abort();\r\n}\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n\r\nvoid operator delete[](void* ptr, const std::nothrow_t&) noexcept {\r\n    ::operator delete(ptr, std::nothrow);\r\n}\r\n\r\n#ifdef __cpp_aligned_new\r\nvoid operator delete[](void*, std::align_val_t, const std::nothrow_t&) noexcept {\r\n    abort();\r\n}\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n\r\n#pragma warning(pop)\r\n"
  },
  {
    "path": "tests/std/include/parallel_algorithms_utilities.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n#include <algorithm>\r\n#include <cstddef>\r\n#include <limits>\r\n#include <thread>\r\n\r\n#ifdef EXHAUSTIVE\r\nconst size_t max_parallel_test_case_n = 4096;\r\n// the number of linear steps a test case that is quadratic should attempt:\r\nconst size_t quadratic_complexity_case_limit = std::numeric_limits<std::size_t>::max();\r\n#else // ^^^ EXHAUSTIVE / !EXHAUSTIVE vvv\r\n// The constant 32 comes from std::_Oversubscription_multiplier\r\nconst size_t max_parallel_test_case_n        = std::max(4u, std::thread::hardware_concurrency() * 32) + 1;\r\nconst size_t quadratic_complexity_case_limit = 128;\r\n#endif // EXHAUSTIVE\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4640) // 'cases': construction of local static object is not thread-safe\r\ntemplate <typename Fx, typename... Args>\r\nvoid parallel_test_case(Fx fn, Args&... vals) {\r\n    // call fn with \"interesting\" test case sizes and additional parameters\r\n#ifdef EXHAUSTIVE\r\n    for (size_t testSize = 0; testSize < max_parallel_test_case_n; ++testSize) {\r\n#else // ^^^ EXHAUSTIVE / !EXHAUSTIVE vvv\r\n    static const size_t cases[] = {\r\n        0, 1, 2, max_parallel_test_case_n - 2, max_parallel_test_case_n - 1, max_parallel_test_case_n};\r\n    for (size_t testSize : cases) {\r\n#endif // EXHAUSTIVE\r\n        fn(testSize, vals...);\r\n    }\r\n}\r\n#pragma warning(pop)\r\n"
  },
  {
    "path": "tests/std/include/range_algorithm_support.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <iterator>\r\n#include <memory>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <is_permissive.hpp>\r\n\r\nnamespace ranges = std::ranges;\r\n\r\ntemplate <class T>\r\nconstexpr T* nullptr_to = nullptr;\r\n\r\ntemplate <bool>\r\nstruct borrowed { // borrowed<true> is a borrowed_range; borrowed<false> is not\r\n    int* begin() const;\r\n    int* end() const;\r\n};\r\n\r\ntemplate <>\r\ninline constexpr bool ranges::enable_borrowed_range<borrowed<true>> = true;\r\n\r\nstruct boolish {\r\n    bool value_ = true;\r\n\r\n    constexpr operator bool() const noexcept {\r\n        return value_;\r\n    }\r\n\r\n    [[nodiscard]] constexpr boolish operator!() const noexcept {\r\n        return {!value_};\r\n    }\r\n};\r\n\r\ntemplate <class T, std::size_t N>\r\nstruct holder {\r\n    static_assert(N < ~std::size_t{0} / sizeof(T));\r\n\r\n    alignas(T) unsigned char space[N * sizeof(T)];\r\n\r\n    auto as_span() {\r\n        return std::span<T, N>{reinterpret_cast<T*>(space + 0), N};\r\n    }\r\n};\r\n\r\nnamespace test {\r\n    using std::assignable_from, std::conditional_t, std::convertible_to, std::copy_constructible, std::derived_from,\r\n        std::exchange, std::ptrdiff_t, std::span;\r\n\r\n    using output     = std::output_iterator_tag;\r\n    using input      = std::input_iterator_tag;\r\n    using fwd        = std::forward_iterator_tag;\r\n    using bidi       = std::bidirectional_iterator_tag;\r\n    using random     = std::random_access_iterator_tag;\r\n    using contiguous = std::contiguous_iterator_tag;\r\n\r\n    template <class T>\r\n    void operator&(T&&) {\r\n        static_assert(false);\r\n    }\r\n\r\n    template <class T, class U>\r\n    void operator,(T&&, U&&) {\r\n        static_assert(false);\r\n    }\r\n\r\n    enum class CanDifference : bool { no, yes };\r\n    enum class CanCompare : bool { no, yes };\r\n    enum class ProxyRef { no, yes, prvalue, xvalue };\r\n    enum class WrappedState {\r\n        wrapped,\r\n        unwrapped,\r\n        ignorant,\r\n    };\r\n\r\n    template <class Derived, WrappedState Wrapped>\r\n    struct prevent_inheriting_unwrap_base {\r\n        using _Prevent_inheriting_unwrap = Derived;\r\n    };\r\n    template <class Derived>\r\n    struct prevent_inheriting_unwrap_base<Derived, WrappedState::ignorant> {};\r\n\r\n    [[nodiscard]] constexpr bool is_wrapped(WrappedState s) {\r\n        return s == WrappedState::wrapped;\r\n    }\r\n\r\n    template <WrappedState W1, WrappedState W2>\r\n    concept compatible_wrapped_state = (W1 == W2) || (W1 == WrappedState::wrapped && W2 == WrappedState::ignorant)\r\n                                    || (W1 == WrappedState::ignorant && W2 == WrappedState::wrapped);\r\n\r\n    template <class T>\r\n    [[nodiscard]] constexpr bool to_bool(T const t) noexcept {\r\n        static_assert(std::is_enum_v<T> && std::same_as<std::underlying_type_t<T>, bool>);\r\n        return static_cast<bool>(t);\r\n    }\r\n\r\n    template <class Element, WrappedState Wrapped = WrappedState::wrapped>\r\n    class sentinel : public prevent_inheriting_unwrap_base<sentinel<Element, Wrapped>, Wrapped> {\r\n        Element* ptr_ = nullptr;\r\n\r\n    public:\r\n        sentinel() = default;\r\n        constexpr explicit sentinel(Element* ptr) noexcept : ptr_{ptr} {}\r\n\r\n        [[nodiscard]] constexpr Element* peek() const noexcept {\r\n            return ptr_;\r\n        }\r\n\r\n        using unwrap    = sentinel<Element, WrappedState::unwrapped>;\r\n        using Constinel = sentinel<const Element, Wrapped>;\r\n\r\n        constexpr operator Constinel() && noexcept {\r\n            return Constinel{exchange(ptr_, nullptr)};\r\n        }\r\n\r\n        constexpr operator Constinel() const& noexcept {\r\n            return Constinel{ptr_};\r\n        }\r\n\r\n        [[nodiscard]] constexpr auto _Unwrapped() const noexcept\r\n            requires (is_wrapped(Wrapped))\r\n        {\r\n            return unwrap{ptr_};\r\n        }\r\n\r\n        static constexpr bool _Unwrap_when_unverified = true;\r\n\r\n        constexpr void _Seek_to(unwrap const& s) noexcept\r\n            requires (is_wrapped(Wrapped))\r\n        {\r\n            ptr_ = s.peek();\r\n        }\r\n\r\n        [[nodiscard]] friend constexpr boolish operator==(sentinel const s, Element* const ptr) noexcept {\r\n            return {s.ptr_ == ptr};\r\n        }\r\n        [[nodiscard]] friend constexpr boolish operator==(Element* const ptr, sentinel const s) noexcept {\r\n            return {s.ptr_ == ptr};\r\n        }\r\n        [[nodiscard]] friend constexpr boolish operator!=(sentinel const s, Element* const ptr) noexcept {\r\n            return !(s == ptr);\r\n        }\r\n        [[nodiscard]] friend constexpr boolish operator!=(Element* const ptr, sentinel const s) noexcept {\r\n            return !(s == ptr);\r\n        }\r\n\r\n        [[nodiscard]] friend constexpr ptrdiff_t operator-(sentinel const s, Element* const ptr) noexcept {\r\n            return s.ptr_ - ptr;\r\n        }\r\n        [[nodiscard]] friend constexpr ptrdiff_t operator-(Element* const ptr, sentinel const s) noexcept {\r\n            return ptr - s.ptr_;\r\n        }\r\n    };\r\n\r\n    template <class T, class U>\r\n    concept CanEq = requires(T const& t, U const& u) {\r\n        { t == u } -> convertible_to<bool>;\r\n    };\r\n\r\n    template <class T, class U>\r\n    concept CanNEq = requires(T const& t, U const& u) {\r\n        { t != u } -> convertible_to<bool>;\r\n    };\r\n\r\n    template <class T, class U>\r\n    concept CanLt = requires(T const& t, U const& u) {\r\n        { t < u } -> convertible_to<bool>;\r\n    };\r\n\r\n    template <class T, class U>\r\n    concept CanLtE = requires(T const& t, U const& u) {\r\n        { t <= u } -> convertible_to<bool>;\r\n    };\r\n\r\n    template <class T, class U>\r\n    concept CanGt = requires(T const& t, U const& u) {\r\n        { t > u } -> convertible_to<bool>;\r\n    };\r\n\r\n    template <class T, class U>\r\n    concept CanGtE = requires(T const& t, U const& u) {\r\n        { t >= u } -> convertible_to<bool>;\r\n    };\r\n\r\n    template <class Category, class Element>\r\n    class proxy_reference {\r\n        Element& ref_;\r\n\r\n        using Value = std::remove_cv_t<Element>;\r\n\r\n    public:\r\n        constexpr explicit proxy_reference(Element& r) : ref_{r} {}\r\n        proxy_reference(proxy_reference const&) = default;\r\n\r\n        constexpr proxy_reference const& operator=(proxy_reference const& that) const\r\n            requires assignable_from<Element&, Element&>\r\n        {\r\n            ref_ = that.ref_;\r\n            return *this;\r\n        }\r\n\r\n        constexpr operator Element&() const\r\n            requires derived_from<Category, input>\r\n        {\r\n            return ref_;\r\n        }\r\n\r\n        template <class T>\r\n            requires (!std::same_as<std::remove_cvref_t<T>, proxy_reference> && assignable_from<Element&, T>)\r\n        constexpr void operator=(T&& val) const {\r\n            ref_ = std::forward<T>(val);\r\n        }\r\n\r\n        template <class Cat, class Elem>\r\n        [[nodiscard]] constexpr boolish operator==(proxy_reference<Cat, Elem> that) const\r\n            requires CanEq<Element, Elem>\r\n        {\r\n            return {ref_ == that.peek()};\r\n        }\r\n        template <class Cat, class Elem>\r\n        [[nodiscard]] constexpr boolish operator!=(proxy_reference<Cat, Elem> that) const\r\n            requires CanNEq<Element, Elem>\r\n        {\r\n            return {ref_ != that.peek()};\r\n        }\r\n        template <class Cat, class Elem>\r\n        [[nodiscard]] constexpr boolish operator<(proxy_reference<Cat, Elem> that) const\r\n            requires CanLt<Element, Elem>\r\n        {\r\n            return {ref_ < that.peek()};\r\n        }\r\n        template <class Cat, class Elem>\r\n        [[nodiscard]] constexpr boolish operator>(proxy_reference<Cat, Elem> that) const\r\n            requires CanGt<Element, Elem>\r\n        {\r\n            return {ref_ > that.peek()};\r\n        }\r\n        template <class Cat, class Elem>\r\n        [[nodiscard]] constexpr boolish operator<=(proxy_reference<Cat, Elem> that) const\r\n            requires CanLtE<Element, Elem>\r\n        {\r\n            return {ref_ <= that.peek()};\r\n        }\r\n        template <class Cat, class Elem>\r\n        [[nodiscard]] constexpr boolish operator>=(proxy_reference<Cat, Elem> that) const\r\n            requires CanGtE<Element, Elem>\r\n        {\r\n            return {ref_ >= that.peek()};\r\n        }\r\n\r\n        [[nodiscard]] friend constexpr boolish operator==(proxy_reference r, Value const& val)\r\n            requires CanEq<Element, Value>\r\n        {\r\n            return {r.ref_ == val};\r\n        }\r\n        [[nodiscard]] friend constexpr boolish operator==(Value const& val, proxy_reference r)\r\n            requires CanEq<Element, Value>\r\n        {\r\n            return {r.ref_ == val};\r\n        }\r\n        [[nodiscard]] friend constexpr boolish operator!=(proxy_reference r, Value const& val)\r\n            requires CanNEq<Element, Value>\r\n        {\r\n            return {r.ref_ != val};\r\n        }\r\n        [[nodiscard]] friend constexpr boolish operator!=(Value const& val, proxy_reference r)\r\n            requires CanNEq<Element, Value>\r\n        {\r\n            return {r.ref_ != val};\r\n        }\r\n        [[nodiscard]] friend constexpr boolish operator<(Value const& val, proxy_reference r)\r\n            requires CanLt<Value, Element>\r\n        {\r\n            return {val < r.ref_};\r\n        }\r\n        [[nodiscard]] friend constexpr boolish operator<(proxy_reference r, Value const& val)\r\n            requires CanLt<Element, Value>\r\n        {\r\n            return {r.ref_ < val};\r\n        }\r\n        [[nodiscard]] friend constexpr boolish operator>(Value const& val, proxy_reference r)\r\n            requires CanGt<Value, Element>\r\n        {\r\n            return {val > r.ref_};\r\n        }\r\n        [[nodiscard]] friend constexpr boolish operator>(proxy_reference r, Value const& val)\r\n            requires CanGt<Element, Value>\r\n        {\r\n            return {r.ref_ > val};\r\n        }\r\n        [[nodiscard]] friend constexpr boolish operator<=(Value const& val, proxy_reference r)\r\n            requires CanLtE<Value, Element>\r\n        {\r\n            return {val <= r.ref_};\r\n        }\r\n        [[nodiscard]] friend constexpr boolish operator<=(proxy_reference r, Value const& val)\r\n            requires CanLtE<Element, Value>\r\n        {\r\n            return {r.ref_ <= val};\r\n        }\r\n        [[nodiscard]] friend constexpr boolish operator>=(Value const& val, proxy_reference r)\r\n            requires CanGtE<Value, Element>\r\n        {\r\n            return {val >= r.ref_};\r\n        }\r\n        [[nodiscard]] friend constexpr boolish operator>=(proxy_reference r, Value const& val)\r\n            requires CanGtE<Element, Value>\r\n        {\r\n            return {r.ref_ >= val};\r\n        }\r\n\r\n        [[nodiscard]] constexpr Element& peek() const noexcept {\r\n            return ref_;\r\n        }\r\n    };\r\n\r\n    template <class Ref>\r\n    struct common_reference {\r\n        Ref ref_;\r\n\r\n        common_reference(Ref r) : ref_{static_cast<Ref>(r)} {}\r\n\r\n        template <class Cat, class Elem>\r\n            requires convertible_to<Elem&, Ref>\r\n        common_reference(proxy_reference<Cat, Elem> pref) : ref_{pref.peek()} {}\r\n    };\r\n} // namespace test\r\n\r\ntemplate <class Cat, class Elem, class U, template <class> class TQuals, template <class> class UQuals>\r\n    requires std::common_reference_with<Elem&, UQuals<U>>\r\nstruct std::basic_common_reference<::test::proxy_reference<Cat, Elem>, U, TQuals, UQuals> {\r\n    using type = common_reference_t<Elem&, UQuals<U>>;\r\n};\r\n\r\ntemplate <class T, class Cat, class Elem, template <class> class TQuals, template <class> class UQuals>\r\n    requires std::common_reference_with<TQuals<T>, Elem&>\r\nstruct std::basic_common_reference<T, ::test::proxy_reference<Cat, Elem>, TQuals, UQuals> {\r\n    using type = common_reference_t<TQuals<T>, Elem&>;\r\n};\r\n\r\ntemplate <class Cat1, class Elem1, class Cat2, class Elem2, template <class> class TQuals,\r\n    template <class> class UQuals>\r\n    requires std::common_reference_with<Elem1&, Elem2&>\r\nstruct std::basic_common_reference<::test::proxy_reference<Cat1, Elem1>, ::test::proxy_reference<Cat2, Elem2>, TQuals,\r\n    UQuals> {\r\n    using type = common_reference_t<Elem1&, Elem2&>;\r\n};\r\n\r\nnamespace test {\r\n    template <class T>\r\n    struct init_list_not_constructible_sentinel {\r\n        init_list_not_constructible_sentinel() = default;\r\n        init_list_not_constructible_sentinel(T*) {}\r\n\r\n        template <class U>\r\n        init_list_not_constructible_sentinel(std::initializer_list<U>) = delete;\r\n    };\r\n\r\n    template <class T>\r\n    struct init_list_not_constructible_iterator {\r\n        using value_type      = T;\r\n        using difference_type = int;\r\n\r\n        init_list_not_constructible_iterator() = default;\r\n        init_list_not_constructible_iterator(T*) {}\r\n\r\n        template <class U>\r\n        init_list_not_constructible_iterator(std::initializer_list<U>) = delete;\r\n\r\n        T& operator*() const; // not defined\r\n        init_list_not_constructible_iterator& operator++(); // not defined\r\n        init_list_not_constructible_iterator operator++(int); // not defined\r\n\r\n        bool operator==(init_list_not_constructible_iterator) const; // not defined\r\n        bool operator==(init_list_not_constructible_sentinel<T>) const; // not defined\r\n    };\r\n\r\n    static_assert(std::forward_iterator<init_list_not_constructible_iterator<int>>);\r\n    static_assert(\r\n        std::sentinel_for<init_list_not_constructible_sentinel<int>, init_list_not_constructible_iterator<int>>);\r\n\r\n    template <class Category, class Element,\r\n        // Model sized_sentinel_for along with sentinel?\r\n        CanDifference Diff = CanDifference{derived_from<Category, random>},\r\n        // Model sentinel_for with self (and sized_sentinel_for if Diff implies copyable)?\r\n        CanCompare Eq = CanCompare{derived_from<Category, fwd>},\r\n        // Use a ProxyRef reference type (instead of Element&)?\r\n        ProxyRef Proxy = ProxyRef{!derived_from<Category, contiguous>},\r\n        // Interact with the STL's iterator unwrapping machinery?\r\n        WrappedState Wrapped = WrappedState::wrapped>\r\n        requires (to_bool(Eq) || !derived_from<Category, fwd>)\r\n              && (Proxy == ProxyRef::no || !derived_from<Category, contiguous>)\r\n    class iterator\r\n        : public prevent_inheriting_unwrap_base<iterator<Category, Element, Diff, Eq, Proxy, Wrapped>, Wrapped> {\r\n        Element* ptr_;\r\n\r\n        template <class T>\r\n        static constexpr bool at_least = derived_from<Category, T>;\r\n\r\n        using ReferenceType = conditional_t<Proxy == ProxyRef::yes, proxy_reference<Category, Element>,\r\n            conditional_t<Proxy == ProxyRef::prvalue, std::remove_cv_t<Element>,\r\n                conditional_t<Proxy == ProxyRef::xvalue, Element&&, Element&>>>;\r\n\r\n        struct post_increment_proxy {\r\n            Element* ptr_;\r\n\r\n            const post_increment_proxy& operator*() const noexcept {\r\n                return *this;\r\n            }\r\n\r\n            template <class T>\r\n                requires std::indirectly_writable<Element*, T>\r\n            const post_increment_proxy& operator=(T&& t) const noexcept {\r\n                *ptr_ = std::forward<T>(t);\r\n                return *this;\r\n            }\r\n        };\r\n\r\n    public:\r\n        using Consterator = iterator<Category, const Element, Diff, Eq, Proxy, Wrapped>;\r\n\r\n        // output iterator operations\r\n        iterator()\r\n            requires at_least<fwd> || (Eq == CanCompare::yes)\r\n        = default;\r\n\r\n        constexpr explicit iterator(Element* ptr) noexcept : ptr_{ptr} {}\r\n\r\n        constexpr iterator(iterator&& that) noexcept : ptr_{exchange(that.ptr_, nullptr)} {}\r\n        constexpr iterator& operator=(iterator&& that) noexcept {\r\n            ptr_ = exchange(that.ptr_, nullptr);\r\n            return *this;\r\n        }\r\n\r\n        constexpr operator Consterator() && noexcept {\r\n            return Consterator{exchange(ptr_, nullptr)};\r\n        }\r\n\r\n        [[nodiscard]] constexpr Element* peek() const noexcept {\r\n            return ptr_;\r\n        }\r\n\r\n        [[nodiscard]] constexpr ReferenceType operator*() const noexcept {\r\n            return static_cast<ReferenceType>(*ptr_);\r\n        }\r\n\r\n        template <WrappedState OtherWrapped>\r\n        [[nodiscard]] friend constexpr boolish operator==(\r\n            iterator const& i, sentinel<Element, OtherWrapped> const& s) noexcept\r\n            requires compatible_wrapped_state<Wrapped, OtherWrapped>\r\n        {\r\n            return boolish{i.peek() == s.peek()};\r\n        }\r\n        template <WrappedState OtherWrapped>\r\n        [[nodiscard]] friend constexpr boolish operator==(\r\n            sentinel<Element, OtherWrapped> const& s, iterator const& i) noexcept\r\n            requires compatible_wrapped_state<Wrapped, OtherWrapped>\r\n        {\r\n            return i == s;\r\n        }\r\n\r\n        template <WrappedState OtherWrapped>\r\n        [[nodiscard]] friend constexpr boolish operator!=(\r\n            iterator const& i, sentinel<Element, OtherWrapped> const& s) noexcept\r\n            requires compatible_wrapped_state<Wrapped, OtherWrapped>\r\n        {\r\n            return !(i == s);\r\n        }\r\n        template <WrappedState OtherWrapped>\r\n        [[nodiscard]] friend constexpr boolish operator!=(\r\n            sentinel<Element, OtherWrapped> const& s, iterator const& i) noexcept\r\n            requires compatible_wrapped_state<Wrapped, OtherWrapped>\r\n        {\r\n            return !(i == s);\r\n        }\r\n\r\n        constexpr iterator& operator++() & noexcept {\r\n            ++ptr_;\r\n            return *this;\r\n        }\r\n\r\n        constexpr post_increment_proxy operator++(int) & noexcept\r\n            requires std::is_same_v<Category, output>\r\n        {\r\n            post_increment_proxy result{ptr_};\r\n            ++ptr_;\r\n            return result;\r\n        }\r\n\r\n        auto operator--() & {\r\n            static_assert(false);\r\n        }\r\n        auto operator--(int) & {\r\n            static_assert(false);\r\n        }\r\n\r\n        friend void iter_swap(iterator const&, iterator const&)\r\n            requires std::is_same_v<Category, output>\r\n        {\r\n            static_assert(false);\r\n        }\r\n\r\n        void operator<(iterator const&) const {\r\n            static_assert(false);\r\n        }\r\n        void operator>(iterator const&) const {\r\n            static_assert(false);\r\n        }\r\n        void operator<=(iterator const&) const {\r\n            static_assert(false);\r\n        }\r\n        void operator>=(iterator const&) const {\r\n            static_assert(false);\r\n        }\r\n\r\n        // input iterator operations:\r\n        constexpr void operator++(int) & noexcept\r\n            requires std::is_same_v<Category, input>\r\n        {\r\n            ++ptr_;\r\n        }\r\n\r\n        [[nodiscard]] friend constexpr Element&& iter_move(iterator const& i)\r\n            requires at_least<input>\r\n        {\r\n            return std::move(*i.ptr_);\r\n        }\r\n\r\n        friend constexpr void iter_swap(iterator const& x, iterator const& y)\r\n            noexcept(std::is_nothrow_swappable_v<Element>)\r\n            requires at_least<input> && std::swappable<Element>\r\n        {\r\n            ranges::swap(*x.ptr_, *y.ptr_);\r\n        }\r\n\r\n        // forward iterator operations:\r\n        constexpr iterator operator++(int) & noexcept\r\n            requires at_least<fwd>\r\n        {\r\n            auto tmp = *this;\r\n            ++ptr_;\r\n            return tmp;\r\n        }\r\n\r\n        // sentinel operations (implied by forward iterator):\r\n        iterator(iterator const&)\r\n            requires (to_bool(Eq))\r\n        = default;\r\n        iterator& operator=(iterator const&)\r\n            requires (to_bool(Eq))\r\n        = default;\r\n\r\n        constexpr operator Consterator() const& noexcept\r\n            requires (to_bool(Eq))\r\n        {\r\n            return Consterator{ptr_};\r\n        }\r\n\r\n        [[nodiscard]] constexpr boolish operator==(iterator const& that) const noexcept\r\n            requires (to_bool(Eq))\r\n        {\r\n            return {ptr_ == that.ptr_};\r\n        }\r\n        [[nodiscard]] constexpr boolish operator!=(iterator const& that) const noexcept\r\n            requires (to_bool(Eq))\r\n        {\r\n            return !(*this == that);\r\n        }\r\n\r\n        // bidi iterator operations:\r\n        constexpr iterator& operator--() & noexcept\r\n            requires at_least<bidi>\r\n        {\r\n            --ptr_;\r\n            return *this;\r\n        }\r\n        constexpr iterator operator--(int) & noexcept\r\n            requires at_least<bidi>\r\n        {\r\n            auto tmp = *this;\r\n            --ptr_;\r\n            return tmp;\r\n        }\r\n\r\n        // random-access iterator operations:\r\n        [[nodiscard]] constexpr boolish operator<(iterator const& that) const noexcept\r\n            requires at_least<random>\r\n        {\r\n            return {ptr_ < that.ptr_};\r\n        }\r\n        [[nodiscard]] constexpr boolish operator>(iterator const& that) const noexcept\r\n            requires at_least<random>\r\n        {\r\n            return that < *this;\r\n        }\r\n        [[nodiscard]] constexpr boolish operator<=(iterator const& that) const noexcept\r\n            requires at_least<random>\r\n        {\r\n            return !(that < *this);\r\n        }\r\n        [[nodiscard]] constexpr boolish operator>=(iterator const& that) const noexcept\r\n            requires at_least<random>\r\n        {\r\n            return !(*this < that);\r\n        }\r\n        [[nodiscard]] constexpr auto operator<=>(iterator const& that) const noexcept\r\n            requires at_least<random>\r\n        {\r\n            return ptr_ <=> that.ptr_;\r\n        }\r\n\r\n        [[nodiscard]] constexpr ReferenceType operator[](ptrdiff_t const n) const& noexcept\r\n            requires at_least<random>\r\n        {\r\n            return ReferenceType{ptr_[n]};\r\n        }\r\n\r\n        constexpr iterator& operator+=(ptrdiff_t const n) & noexcept\r\n            requires at_least<random>\r\n        {\r\n            ptr_ += n;\r\n            return *this;\r\n        }\r\n        constexpr iterator& operator-=(ptrdiff_t const n) & noexcept\r\n            requires at_least<random>\r\n        {\r\n            ptr_ -= n;\r\n            return *this;\r\n        }\r\n\r\n        [[nodiscard]] constexpr iterator operator+(ptrdiff_t const n) const noexcept\r\n            requires at_least<random>\r\n        {\r\n            return iterator{ptr_ + n};\r\n        }\r\n        [[nodiscard]] friend constexpr iterator operator+(ptrdiff_t const n, iterator const& i) noexcept\r\n            requires at_least<random>\r\n        {\r\n            return i + n;\r\n        }\r\n\r\n        [[nodiscard]] constexpr iterator operator-(ptrdiff_t const n) const noexcept\r\n            requires at_least<random>\r\n        {\r\n            return iterator{ptr_ - n};\r\n        }\r\n\r\n        // contiguous iterator operations:\r\n        [[nodiscard]] constexpr Element* operator->() const noexcept\r\n            requires at_least<contiguous>\r\n        {\r\n            return ptr_;\r\n        }\r\n\r\n        // sized_sentinel_for operations:\r\n        [[nodiscard]] constexpr ptrdiff_t operator-(iterator const& that) const noexcept\r\n            requires at_least<random> || (to_bool(Diff) && to_bool(Eq))\r\n        {\r\n            return ptr_ - that.ptr_;\r\n        }\r\n\r\n        template <WrappedState OtherWrapped>\r\n        [[nodiscard]] constexpr ptrdiff_t operator-(sentinel<Element, OtherWrapped> const& s) const noexcept\r\n            requires compatible_wrapped_state<Wrapped, OtherWrapped> && (to_bool(Diff))\r\n        {\r\n            return ptr_ - s.peek();\r\n        }\r\n        template <WrappedState OtherWrapped>\r\n        [[nodiscard]] friend constexpr ptrdiff_t operator-(\r\n            sentinel<Element, OtherWrapped> const& s, iterator const& i) noexcept\r\n            requires compatible_wrapped_state<Wrapped, OtherWrapped> && (to_bool(Diff))\r\n        {\r\n            return -(i - s);\r\n        }\r\n\r\n        using unwrap              = std::conditional_t<derived_from<Category, contiguous>, Element*,\r\n                         iterator<Category, Element, Diff, Eq, Proxy, WrappedState::unwrapped>>;\r\n        using unwrapping_ignorant = iterator<Category, Element, Diff, Eq, Proxy, WrappedState::ignorant>;\r\n\r\n        [[nodiscard]] constexpr auto _Unwrapped() const& noexcept\r\n            requires (is_wrapped(Wrapped) && to_bool(Eq))\r\n        {\r\n            return unwrap{ptr_};\r\n        }\r\n\r\n        [[nodiscard]] constexpr auto _Unwrapped() && noexcept\r\n            requires (is_wrapped(Wrapped))\r\n        {\r\n            return unwrap{exchange(ptr_, nullptr)};\r\n        }\r\n\r\n        static constexpr bool _Unwrap_when_unverified = true;\r\n\r\n        constexpr void _Seek_to(unwrap const& i) noexcept\r\n            requires (is_wrapped(Wrapped) && to_bool(Eq))\r\n        {\r\n            if constexpr (at_least<contiguous>) {\r\n                ptr_ = i;\r\n            } else {\r\n                ptr_ = i.peek();\r\n            }\r\n        }\r\n\r\n        constexpr void _Seek_to(unwrap&& i) noexcept\r\n            requires (is_wrapped(Wrapped))\r\n        {\r\n            if constexpr (at_least<contiguous>) {\r\n                ptr_ = i;\r\n            } else {\r\n                ptr_ = i.peek();\r\n            }\r\n        }\r\n    };\r\n\r\n    template <class Category, bool IsForward, bool IsProxy, bool EqAndCopy>\r\n    struct iterator_traits_base {};\r\n\r\n    template <class Category>\r\n    struct iterator_traits_base<Category, true, false, true> {\r\n        using iterator_category = Category;\r\n    };\r\n\r\n    template <class Category>\r\n    struct iterator_traits_base<Category, true, true, true> {\r\n        using iterator_category = input;\r\n    };\r\n\r\n    template <class Category, bool IsProxy>\r\n    struct iterator_traits_base<Category, false, IsProxy, true> {\r\n        using iterator_category = input;\r\n    };\r\n} // namespace test\r\n\r\ntemplate <class Category, class Element, ::test::CanDifference Diff, ::test::CanCompare Eq, ::test::ProxyRef Proxy,\r\n    ::test::WrappedState Wrapped>\r\nstruct std::iterator_traits<::test::iterator<Category, Element, Diff, Eq, Proxy, Wrapped>>\r\n    : ::test::iterator_traits_base<Category, derived_from<Category, forward_iterator_tag>,\r\n          Proxy == ::test::ProxyRef::yes, Eq == ::test::CanCompare::yes> {\r\n    using iterator_concept = Category;\r\n    using value_type       = remove_cv_t<Element>;\r\n    using difference_type  = ptrdiff_t;\r\n    using pointer          = conditional_t<derived_from<Category, contiguous_iterator_tag>, Element*, void>;\r\n    using reference        = iter_reference_t<::test::iterator<Category, Element, Diff, Eq, Proxy, Wrapped>>;\r\n};\r\n\r\ntemplate <class Element, ::test::CanDifference Diff, ::test::WrappedState Wrapped>\r\nstruct std::pointer_traits<::test::iterator<std::contiguous_iterator_tag, Element, Diff, ::test::CanCompare::yes,\r\n    ::test::ProxyRef::no, Wrapped>> {\r\n    using pointer         = ::test::iterator<contiguous_iterator_tag, Element, Diff, ::test::CanCompare::yes,\r\n                ::test::ProxyRef::no, Wrapped>;\r\n    using element_type    = Element;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    [[nodiscard]] static constexpr element_type* to_address(pointer const& x) noexcept {\r\n        return x.peek();\r\n    }\r\n};\r\n\r\nnamespace test {\r\n    enum class Sized : bool { no, yes };\r\n    enum class Common : bool { no, yes };\r\n    enum class CanView : bool { no, yes };\r\n    enum class Copyability { immobile, move_only, copyable };\r\n\r\n    namespace detail {\r\n        template <class Element, Copyability Copy>\r\n        class range_base {\r\n        public:\r\n            static_assert(Copy == Copyability::immobile);\r\n\r\n            range_base() = delete;\r\n            constexpr explicit range_base(span<Element> elements) noexcept : elements_{elements} {}\r\n\r\n            range_base(const range_base&)            = delete;\r\n            range_base& operator=(const range_base&) = delete;\r\n\r\n        protected:\r\n            [[nodiscard]] constexpr bool moved_from() const noexcept {\r\n                return false;\r\n            }\r\n            span<Element> elements_;\r\n        };\r\n\r\n        template <class Element>\r\n        class range_base<Element, Copyability::move_only> {\r\n        public:\r\n            range_base() = delete;\r\n            constexpr explicit range_base(span<Element> elements) noexcept : elements_{elements} {}\r\n\r\n            constexpr range_base(range_base&& that) noexcept\r\n                : elements_{that.elements_}, moved_from_{that.moved_from_} {\r\n                that.elements_   = {};\r\n                that.moved_from_ = true;\r\n            }\r\n\r\n            constexpr range_base& operator=(range_base&& that) noexcept {\r\n                elements_        = that.elements_;\r\n                moved_from_      = that.moved_from_;\r\n                that.elements_   = {};\r\n                that.moved_from_ = true;\r\n                return *this;\r\n            }\r\n\r\n        protected:\r\n            [[nodiscard]] constexpr bool moved_from() const noexcept {\r\n                return moved_from_;\r\n            }\r\n\r\n            span<Element> elements_;\r\n\r\n        private:\r\n            bool moved_from_ = false;\r\n        };\r\n\r\n        template <class Element>\r\n        class range_base<Element, Copyability::copyable> {\r\n        public:\r\n            constexpr range_base() = default;\r\n            constexpr explicit range_base(span<Element> elements) noexcept : elements_{elements} {}\r\n\r\n            constexpr range_base(const range_base&)            = default;\r\n            constexpr range_base& operator=(const range_base&) = default;\r\n\r\n            constexpr range_base(range_base&& that) noexcept\r\n                : elements_{that.elements_}, moved_from_{that.moved_from_} {\r\n                that.elements_   = {};\r\n                that.moved_from_ = true;\r\n            }\r\n\r\n            constexpr range_base& operator=(range_base&& that) noexcept {\r\n                elements_        = that.elements_;\r\n                moved_from_      = that.moved_from_;\r\n                that.elements_   = {};\r\n                that.moved_from_ = true;\r\n                return *this;\r\n            }\r\n\r\n        protected:\r\n            [[nodiscard]] constexpr bool moved_from() const noexcept {\r\n                return moved_from_;\r\n            }\r\n\r\n            span<Element> elements_;\r\n\r\n        private:\r\n            bool moved_from_ = false;\r\n        };\r\n    } // namespace detail\r\n\r\n    template <class Category, class Element,\r\n        // Implement member size? (NB: Not equivalent to \"Is this a sized_range?\")\r\n        Sized IsSized = Sized::no,\r\n        // iterator and sentinel model sized_sentinel_for (also iterator and iterator if Eq)\r\n        CanDifference Diff = CanDifference{derived_from<Category, random>},\r\n        // Model common_range?\r\n        Common IsCommon = Common::no,\r\n        // Iterator models sentinel_for with self\r\n        CanCompare Eq = CanCompare{derived_from<Category, fwd>},\r\n        // Use a ProxyRef reference type?\r\n        ProxyRef Proxy = ProxyRef{!derived_from<Category, contiguous>},\r\n        // Should this range satisfy the view concept?\r\n        CanView IsView = CanView::no,\r\n        // Should this range type be copyable/movable/neither?\r\n        Copyability Copy = IsView == CanView::yes ? Copyability::move_only : Copyability::immobile>\r\n        requires (!to_bool(IsCommon) || to_bool(Eq)) && (to_bool(Eq) || !derived_from<Category, fwd>)\r\n              && (Proxy == ProxyRef::no || !derived_from<Category, contiguous>)\r\n              && (!to_bool(IsView) || Copy != Copyability::immobile)\r\n    class range : public detail::range_base<Element, Copy> {\r\n    private:\r\n        mutable bool begin_called_ = false;\r\n        using detail::range_base<Element, Copy>::elements_;\r\n\r\n        using detail::range_base<Element, Copy>::moved_from;\r\n\r\n    public:\r\n        using I = iterator<Category, Element, Diff, Eq, Proxy, WrappedState::wrapped>;\r\n        using S = conditional_t<to_bool(IsCommon), I, sentinel<Element, WrappedState::wrapped>>;\r\n        using RebindAsMoveOnly =\r\n            range<Category, Element, IsSized, Diff, IsCommon, Eq, Proxy, IsView, Copyability::move_only>;\r\n\r\n        template <class OtherElement>\r\n        using RebindElement = range<Category, OtherElement, IsSized, Diff, IsCommon, Eq, Proxy, IsView, Copy>;\r\n\r\n        static constexpr ProxyRef proxy_ref = Proxy;\r\n\r\n        using detail::range_base<Element, Copy>::range_base;\r\n\r\n        [[nodiscard]] constexpr I begin() const noexcept {\r\n            assert(!moved_from());\r\n            if constexpr (!derived_from<Category, fwd>) {\r\n                assert(!exchange(begin_called_, true));\r\n            }\r\n            return I{elements_.data()};\r\n        }\r\n\r\n        [[nodiscard]] constexpr S end() const noexcept {\r\n            assert(!moved_from());\r\n            return S{elements_.data() + elements_.size()};\r\n        }\r\n\r\n        [[nodiscard]] constexpr ptrdiff_t size() const noexcept\r\n            requires (to_bool(IsSized))\r\n        {\r\n            assert(!moved_from());\r\n            if constexpr (!derived_from<Category, fwd>) {\r\n                assert(!begin_called_);\r\n            }\r\n            return static_cast<ptrdiff_t>(elements_.size());\r\n        }\r\n\r\n        [[nodiscard]] constexpr Element* data() const noexcept\r\n            requires derived_from<Category, contiguous>\r\n        {\r\n            assert(!moved_from());\r\n            return elements_.data();\r\n        }\r\n\r\n        using UI = I::unwrap;\r\n        using US = conditional_t<to_bool(IsCommon), UI, sentinel<Element, WrappedState::unwrapped>>;\r\n\r\n        [[nodiscard]] constexpr UI _Unchecked_begin() const noexcept {\r\n            assert(!moved_from());\r\n            if constexpr (!derived_from<Category, fwd>) {\r\n                assert(!exchange(begin_called_, true));\r\n            }\r\n            return UI{elements_.data()};\r\n        }\r\n        [[nodiscard]] constexpr US _Unchecked_end() const noexcept {\r\n            assert(!moved_from());\r\n            return US{elements_.data() + elements_.size()};\r\n        }\r\n\r\n        void operator&() const {\r\n            static_assert(false);\r\n        }\r\n        template <class T>\r\n        friend void operator,(range const&, T&&) {\r\n            static_assert(false);\r\n        }\r\n    };\r\n\r\n    template <std::_Signed_integer_like I>\r\n    [[nodiscard]] constexpr auto to_unsigned(I n) noexcept {\r\n        if constexpr (std::signed_integral<I>) {\r\n            return static_cast<std::make_unsigned_t<I>>(n);\r\n        } else {\r\n            return static_cast<std::_Unsigned128>(n);\r\n        }\r\n    }\r\n\r\n    template <std::_Signed_integer_like Diff, std::input_iterator It>\r\n    struct redifference_iterator_category_base {};\r\n\r\n    template <std::_Signed_integer_like Diff, std::input_iterator It>\r\n        requires std::signed_integral<Diff> && requires { typename std::iterator_traits<It>::iterator_category; }\r\n    struct redifference_iterator_category_base<Diff, It> {\r\n        using iterator_category = std::iterator_traits<It>::iterator_category;\r\n    };\r\n\r\n    template <std::_Signed_integer_like Diff, std::input_iterator It>\r\n    class redifference_iterator : public redifference_iterator_category_base<Diff, It> {\r\n    public:\r\n        using iterator_concept = decltype([] {\r\n            if constexpr (std::contiguous_iterator<It>) {\r\n                return std::contiguous_iterator_tag{};\r\n            } else if constexpr (std::random_access_iterator<It>) {\r\n                return std::random_access_iterator_tag{};\r\n            } else if constexpr (std::bidirectional_iterator<It>) {\r\n                return std::bidirectional_iterator_tag{};\r\n            } else if constexpr (std::forward_iterator<It>) {\r\n                return std::forward_iterator_tag{};\r\n            } else {\r\n                return std::input_iterator_tag{};\r\n            }\r\n        }());\r\n        using value_type       = std::iter_value_t<It>;\r\n        using difference_type  = Diff;\r\n\r\n        redifference_iterator() = default;\r\n        constexpr explicit redifference_iterator(It it) : i_{std::move(it)} {}\r\n\r\n        [[nodiscard]] constexpr decltype(auto) operator*() const {\r\n            return *i_;\r\n        }\r\n\r\n        constexpr decltype(auto) operator->() const\r\n            requires std::contiguous_iterator<It> || (requires(const It& i) { i.operator->(); })\r\n        {\r\n            if constexpr (std::contiguous_iterator<It>) {\r\n                return std::to_address(i_);\r\n            } else {\r\n                return i_.operator->();\r\n            }\r\n        }\r\n\r\n        constexpr redifference_iterator& operator++() {\r\n            ++i_;\r\n            return *this;\r\n        }\r\n\r\n        constexpr decltype(auto) operator++(int) {\r\n            if constexpr (std::is_same_v<decltype(i_++), It>) {\r\n                return redifference_iterator{i_++};\r\n            } else {\r\n                return i_++;\r\n            }\r\n        }\r\n\r\n        constexpr redifference_iterator& operator--()\r\n            requires std::bidirectional_iterator<It>\r\n        {\r\n            --i_;\r\n            return *this;\r\n        }\r\n\r\n        constexpr redifference_iterator operator--(int)\r\n            requires std::bidirectional_iterator<It>\r\n        {\r\n            return redifference_iterator{--i_};\r\n        }\r\n\r\n        constexpr redifference_iterator& operator+=(std::same_as<difference_type> auto n)\r\n            requires std::random_access_iterator<It>\r\n        {\r\n            i_ += static_cast<std::iter_difference_t<It>>(n);\r\n            return *this;\r\n        }\r\n\r\n        constexpr redifference_iterator& operator-=(std::same_as<difference_type> auto n)\r\n            requires std::random_access_iterator<It>\r\n        {\r\n            i_ -= static_cast<std::iter_difference_t<It>>(n);\r\n            return *this;\r\n        }\r\n\r\n        [[nodiscard]] constexpr decltype(auto) operator[](std::same_as<difference_type> auto n) const\r\n            requires std::random_access_iterator<It>\r\n        {\r\n            return i_[static_cast<std::iter_difference_t<It>>(n)];\r\n        }\r\n\r\n        [[nodiscard]] friend constexpr bool operator==(const redifference_iterator& i, const redifference_iterator& j) {\r\n            return i.i_ == j.i_;\r\n        }\r\n\r\n        template <std::same_as<difference_type> I> // TRANSITION, DevCom-10735214, should be abbreviated\r\n        [[nodiscard]] friend constexpr redifference_iterator operator+(const redifference_iterator& it, I n)\r\n            requires std::random_access_iterator<It>\r\n        {\r\n            return redifference_iterator{it.i_ + static_cast<std::iter_difference_t<It>>(n)};\r\n        }\r\n\r\n        template <std::same_as<difference_type> I> // TRANSITION, DevCom-10735214, should be abbreviated\r\n        [[nodiscard]] friend constexpr redifference_iterator operator+(I n, const redifference_iterator& it)\r\n            requires std::random_access_iterator<It>\r\n        {\r\n            return redifference_iterator{it.i_ + static_cast<std::iter_difference_t<It>>(n)};\r\n        }\r\n\r\n        template <std::same_as<difference_type> I> // TRANSITION, DevCom-10735214, should be abbreviated\r\n        [[nodiscard]] friend constexpr redifference_iterator operator-(const redifference_iterator& it, I n)\r\n            requires std::random_access_iterator<It>\r\n        {\r\n            return redifference_iterator{it.i_ - static_cast<std::iter_difference_t<It>>(n)};\r\n        }\r\n\r\n        [[nodiscard]] friend constexpr difference_type operator-(\r\n            const redifference_iterator& i, const redifference_iterator& j)\r\n            requires std::random_access_iterator<It>\r\n        {\r\n            return static_cast<Diff>(i.i_ - j.i_);\r\n        }\r\n\r\n        [[nodiscard]] friend constexpr auto operator<=>(const redifference_iterator& i, const redifference_iterator& j)\r\n            requires std::random_access_iterator<It>\r\n        {\r\n            if constexpr (std::three_way_comparable<It>) {\r\n                return i.i_ <=> j.i_;\r\n            } else {\r\n                if (i.i_ < j.i_) {\r\n                    return std::weak_ordering::less;\r\n                } else if (j.i_ < i.i_) {\r\n                    return std::weak_ordering::greater;\r\n                } else {\r\n                    return std::weak_ordering::equivalent;\r\n                }\r\n            }\r\n        }\r\n\r\n        [[nodiscard]] friend constexpr bool operator<(const redifference_iterator& i, const redifference_iterator& j)\r\n            requires std::random_access_iterator<It>\r\n        {\r\n            return i.i_ < j.i_;\r\n        }\r\n\r\n        [[nodiscard]] friend constexpr bool operator>(const redifference_iterator& i, const redifference_iterator& j)\r\n            requires std::random_access_iterator<It>\r\n        {\r\n            return j.i_ < i.i_;\r\n        }\r\n\r\n        [[nodiscard]] friend constexpr bool operator<=(const redifference_iterator& i, const redifference_iterator& j)\r\n            requires std::random_access_iterator<It>\r\n        {\r\n            return !(j.i_ < i.i_);\r\n        }\r\n\r\n        [[nodiscard]] friend constexpr bool operator>=(const redifference_iterator& i, const redifference_iterator& j)\r\n            requires std::random_access_iterator<It>\r\n        {\r\n            return !(i.i_ < j.i_);\r\n        }\r\n\r\n        [[nodiscard]] constexpr const It& base() const noexcept {\r\n            return i_;\r\n        }\r\n\r\n    private:\r\n        It i_;\r\n    };\r\n\r\n    template <std::copyable S>\r\n    struct redifference_sentinel {\r\n        S se_;\r\n\r\n        template <std::_Signed_integer_like Diff, class It>\r\n            requires std::sentinel_for<S, It>\r\n        [[nodiscard]] friend constexpr bool operator==(\r\n            const redifference_iterator<Diff, It>& i, const redifference_sentinel& s) {\r\n            return i.base() == s.se_;\r\n        }\r\n\r\n        template <std::_Signed_integer_like Diff, class It>\r\n            requires std::sized_sentinel_for<S, It>\r\n        [[nodiscard]] friend constexpr Diff operator-(\r\n            const redifference_iterator<Diff, It>& i, const redifference_sentinel& s) {\r\n            return static_cast<Diff>(i.base() - s.se_);\r\n        }\r\n        template <std::_Signed_integer_like Diff, class It>\r\n            requires std::sized_sentinel_for<S, It>\r\n        [[nodiscard]] friend constexpr Diff operator-(\r\n            const redifference_sentinel& s, const redifference_iterator<Diff, It>& i) {\r\n            return static_cast<Diff>(s.se_ - i.base());\r\n        }\r\n    };\r\n\r\n    template <std::_Signed_integer_like Diff, ranges::borrowed_range Rng>\r\n    [[nodiscard]] constexpr auto make_redifference_subrange(Rng&& r) {\r\n        constexpr bool is_sized =\r\n            ranges::sized_range<Rng> || std::sized_sentinel_for<ranges::sentinel_t<Rng>, ranges::iterator_t<Rng>>;\r\n        using rediff_iter = redifference_iterator<Diff, ranges::iterator_t<Rng>>;\r\n        using rediff_sent = redifference_sentinel<ranges::sentinel_t<Rng>>;\r\n\r\n        if constexpr (is_sized) {\r\n            const auto sz = to_unsigned(static_cast<Diff>(ranges::distance(r)));\r\n            return ranges::subrange<rediff_iter, rediff_sent, ranges::subrange_kind::sized>{\r\n                rediff_iter{ranges::begin(r)}, rediff_sent{ranges::end(r)}, sz};\r\n        } else {\r\n            return ranges::subrange<rediff_iter, rediff_sent, ranges::subrange_kind::unsized>{\r\n                rediff_iter{ranges::begin(r)}, rediff_sent{ranges::end(r)}};\r\n        }\r\n    }\r\n} // namespace test\r\n\r\ntemplate <class Category, class Element, test::Sized IsSized, test::CanDifference Diff, test::Common IsCommon,\r\n    test::CanCompare Eq, test::ProxyRef Proxy, test::Copyability Copy>\r\nconstexpr bool std::ranges::enable_view<\r\n    test::range<Category, Element, IsSized, Diff, IsCommon, Eq, Proxy, test::CanView::yes, Copy>> = true;\r\n\r\ntemplate <class T>\r\nclass basic_borrowed_range : public test::range<test::input, T, test::Sized::no, test::CanDifference::no,\r\n                                 test::Common::no, test::CanCompare::no, test::ProxyRef::no> {\r\n    using test::range<test::input, T, test::Sized::no, test::CanDifference::no, test::Common::no, test::CanCompare::no,\r\n        test::ProxyRef::no>::range;\r\n};\r\n\r\ntemplate <ranges::contiguous_range R>\r\nbasic_borrowed_range(R&) -> basic_borrowed_range<std::remove_reference_t<ranges::range_reference_t<R>>>;\r\n\r\ntemplate <class T>\r\nconstexpr bool ranges::enable_borrowed_range<::basic_borrowed_range<T>> = true;\r\n\r\ntemplate <int>\r\nstruct unique_tag {};\r\n\r\ntemplate <class I, int Tag = 0>\r\nusing ProjectionFor = unique_tag<Tag> (*)(std::iter_common_reference_t<I>);\r\n\r\ntemplate <class I>\r\nusing UnaryPredicateFor = boolish (*)(std::iter_common_reference_t<I>);\r\n\r\ntemplate <int Tag = 0>\r\nusing ProjectedUnaryPredicate = boolish (*)(unique_tag<Tag>);\r\ntemplate <class I2, int Tag1 = 0>\r\nusing HalfProjectedBinaryPredicateFor = boolish (*)(unique_tag<Tag1>, std::iter_common_reference_t<I2>);\r\ntemplate <int Tag1 = 0, int Tag2 = 0>\r\nusing ProjectedBinaryPredicate = boolish (*)(unique_tag<Tag1>, unique_tag<Tag2>);\r\n\r\ntemplate <class I1, class I2>\r\nusing BinaryPredicateFor = boolish (*)(std::iter_common_reference_t<I1>, std::iter_common_reference_t<I2>);\r\n\r\ntemplate <class Continuation, class Element>\r\nstruct with_output_iterators {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::iterator;\r\n\r\n        // Diff and Eq are not significant for \"lone\" single-pass iterators, so we can ignore them here.\r\n        Continuation::template call<Args...,\r\n            iterator<output, Element, CanDifference::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            iterator<output, Element, CanDifference::no, CanCompare::no, ProxyRef::yes>>();\r\n        // For forward and bidi, Eq is necessarily true but Diff and Proxy may vary.\r\n        Continuation::template call<Args...,\r\n            iterator<fwd, Element, CanDifference::no, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            iterator<fwd, Element, CanDifference::no, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            iterator<fwd, Element, CanDifference::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            iterator<fwd, Element, CanDifference::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args...,\r\n            iterator<bidi, Element, CanDifference::no, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            iterator<bidi, Element, CanDifference::no, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            iterator<bidi, Element, CanDifference::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            iterator<bidi, Element, CanDifference::yes, CanCompare::yes, ProxyRef::yes>>();\r\n        // Random iterators are Diff and Eq - only Proxy varies.\r\n        Continuation::template call<Args...,\r\n            iterator<random, Element, CanDifference::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            iterator<random, Element, CanDifference::yes, CanCompare::yes, ProxyRef::yes>>();\r\n        // Contiguous iterators are totally locked down.\r\n        Continuation::template call<Args..., iterator<contiguous, Element>>();\r\n    }\r\n};\r\n\r\ntemplate <class Continuation, class Element>\r\nstruct with_writable_iterators {\r\n    template <class... Args>\r\n    static constexpr bool call() {\r\n        using namespace test;\r\n        using test::iterator;\r\n\r\n        // Diff and Eq are not significant for \"lone\" single-pass iterators, so we can ignore them here.\r\n        Continuation::template call<Args...,\r\n            iterator<input, Element, CanDifference::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            iterator<input, Element, CanDifference::no, CanCompare::no, ProxyRef::yes>>();\r\n\r\n        with_output_iterators<Continuation, Element>::template call<Args...>();\r\n\r\n        return true;\r\n    }\r\n};\r\n\r\ntemplate <class Continuation, class Element>\r\nstruct with_contiguous_ranges {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::range;\r\n\r\n        // Ditto always Eq; !IsSized && SizedSentinel is uninteresting (ranges::size still works), as is\r\n        // !IsSized && IsCommon. contiguous also implies !Proxy.\r\n        Continuation::template call<Args...,\r\n            range<contiguous, Element, Sized::no, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<contiguous, Element, Sized::yes, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<contiguous, Element, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<contiguous, Element, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<contiguous, Element, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n    }\r\n};\r\n\r\ntemplate <class Continuation, class Element>\r\nstruct with_random_ranges {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::range;\r\n\r\n        // Ditto always Eq; !IsSized && SizedSentinel is uninteresting (ranges::size works either way), as is\r\n        // !IsSized && IsCommon.\r\n        Continuation::template call<Args...,\r\n            range<random, Element, Sized::no, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<random, Element, Sized::no, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<random, Element, Sized::yes, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<random, Element, Sized::yes, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<random, Element, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<random, Element, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<random, Element, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<random, Element, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<random, Element, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<random, Element, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        with_contiguous_ranges<Continuation, Element>::template call<Args...>();\r\n    }\r\n};\r\n\r\ntemplate <class Continuation, class Element>\r\nstruct with_bidirectional_ranges {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::range;\r\n\r\n        // Ditto always Eq; !IsSized && Diff is uninteresting (ranges::size still works).\r\n        Continuation::template call<Args...,\r\n            range<bidi, Element, Sized::no, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<bidi, Element, Sized::no, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<bidi, Element, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<bidi, Element, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<bidi, Element, Sized::yes, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<bidi, Element, Sized::yes, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<bidi, Element, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<bidi, Element, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<bidi, Element, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<bidi, Element, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<bidi, Element, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<bidi, Element, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        with_random_ranges<Continuation, Element>::template call<Args...>();\r\n    }\r\n};\r\n\r\ntemplate <class Continuation, class Element>\r\nstruct with_forward_ranges {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::range;\r\n\r\n        // forward always has Eq; !IsSized && Diff is uninteresting (sized_range is sized_range).\r\n        Continuation::template call<Args...,\r\n            range<fwd, Element, Sized::no, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<fwd, Element, Sized::no, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<fwd, Element, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<fwd, Element, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<fwd, Element, Sized::yes, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<fwd, Element, Sized::yes, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<fwd, Element, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<fwd, Element, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<fwd, Element, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<fwd, Element, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<fwd, Element, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<fwd, Element, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        with_bidirectional_ranges<Continuation, Element>::template call<Args...>();\r\n    }\r\n};\r\n\r\ntemplate <class Continuation, class Element>\r\nstruct with_input_ranges {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::range;\r\n\r\n        // For all ranges, IsCommon implies Eq.\r\n        // For single-pass ranges, Eq is uninteresting without IsCommon (there's only one valid iterator\r\n        // value at a time, and no reason to compare it with itself for equality).\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::no, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::no, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::yes, CanDifference::no, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::yes, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::yes, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::yes, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        with_forward_ranges<Continuation, Element>::template call<Args...>();\r\n    }\r\n};\r\n\r\ntemplate <class Continuation, class Element>\r\nstruct with_output_ranges {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::range;\r\n\r\n        // For all ranges, IsCommon implies Eq.\r\n        // For single-pass ranges, Eq is uninteresting without IsCommon (there's only one valid iterator\r\n        // value at a time, and no reason to compare it with itself for equality).\r\n        Continuation::template call<Args...,\r\n            range<output, Element, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<output, Element, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<output, Element, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<output, Element, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args...,\r\n            range<output, Element, Sized::no, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<output, Element, Sized::no, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<output, Element, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<output, Element, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args...,\r\n            range<output, Element, Sized::yes, CanDifference::no, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<output, Element, Sized::yes, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<output, Element, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<output, Element, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args...,\r\n            range<output, Element, Sized::yes, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<output, Element, Sized::yes, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<output, Element, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<output, Element, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        with_forward_ranges<Continuation, Element>::template call<Args...>();\r\n    }\r\n};\r\n\r\ntemplate <class Continuation, class Element>\r\nstruct with_input_or_output_ranges {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::range;\r\n\r\n        // For all ranges, IsCommon implies Eq.\r\n        // For single-pass ranges, Eq is uninteresting without IsCommon (there's only one valid iterator\r\n        // value at a time, and no reason to compare it with itself for equality).\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::no, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::no, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::yes, CanDifference::no, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::yes, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::yes, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::yes, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, Element, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        with_output_ranges<Continuation, Element>::template call<Args...>();\r\n    }\r\n};\r\n\r\ntemplate <class Continuation, class Element>\r\nstruct with_input_iterators {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::iterator;\r\n\r\n        // IsSized and Eq are not significant for \"lone\" single-pass iterators, so we can ignore them here.\r\n        Continuation::template call<Args...,\r\n            iterator<input, Element, CanDifference::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            iterator<input, Element, CanDifference::no, CanCompare::no, ProxyRef::yes>>();\r\n        // For forward and bidi, Eq is necessarily true but IsSized and Proxy may vary.\r\n        Continuation::template call<Args...,\r\n            iterator<fwd, Element, CanDifference::no, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            iterator<fwd, Element, CanDifference::no, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            iterator<fwd, Element, CanDifference::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            iterator<fwd, Element, CanDifference::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args...,\r\n            iterator<bidi, Element, CanDifference::no, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            iterator<bidi, Element, CanDifference::no, CanCompare::yes, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            iterator<bidi, Element, CanDifference::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            iterator<bidi, Element, CanDifference::yes, CanCompare::yes, ProxyRef::yes>>();\r\n        // Random iterators are IsSized and Eq - only Proxy varies.\r\n        Continuation::template call<Args...,\r\n            iterator<random, Element, CanDifference::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            iterator<random, Element, CanDifference::yes, CanCompare::yes, ProxyRef::yes>>();\r\n        // Contiguous iterators are totally locked down.\r\n        Continuation::template call<Args..., iterator<contiguous, Element>>();\r\n    }\r\n};\r\n\r\ntemplate <class Instantiator, class Element>\r\nconstexpr void test_out() {\r\n    with_output_ranges<Instantiator, Element>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element>\r\nconstexpr void test_in() {\r\n    with_input_ranges<Instantiator, Element>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element>\r\nconstexpr void test_inout() {\r\n    with_input_or_output_ranges<Instantiator, Element>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element>\r\nconstexpr void test_fwd() {\r\n    with_forward_ranges<Instantiator, Element>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element>\r\nconstexpr void test_bidi() {\r\n    with_bidirectional_ranges<Instantiator, Element>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element>\r\nconstexpr void test_random() {\r\n    with_random_ranges<Instantiator, Element>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element>\r\nconstexpr void test_contiguous() {\r\n    with_contiguous_ranges<Instantiator, Element>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element1, class Element2>\r\nconstexpr void test_in_in() {\r\n    with_input_ranges<with_input_ranges<Instantiator, Element2>, Element1>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element1, class Element2>\r\nconstexpr void test_in_fwd() {\r\n    with_input_ranges<with_forward_ranges<Instantiator, Element2>, Element1>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element1, class Element2>\r\nconstexpr void test_in_random() {\r\n    with_input_ranges<with_random_ranges<Instantiator, Element2>, Element1>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element1, class Element2>\r\nconstexpr void test_fwd_fwd() {\r\n    with_forward_ranges<with_forward_ranges<Instantiator, Element2>, Element1>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element1, class Element2>\r\nconstexpr void test_bidi_bidi() {\r\n    with_bidirectional_ranges<with_bidirectional_ranges<Instantiator, Element2>, Element1>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element1, class Element2>\r\nconstexpr void input_range_output_iterator_permutations() {\r\n    with_input_ranges<with_output_iterators<Instantiator, Element2>, Element1>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element1, class Element2>\r\nconstexpr void test_in_write() {\r\n    with_input_ranges<with_writable_iterators<Instantiator, Element2>, Element1>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element1, class Element2>\r\nconstexpr void test_fwd_write() {\r\n    with_forward_ranges<with_writable_iterators<Instantiator, Element2>, Element1>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element1, class Element2>\r\nconstexpr void test_bidi_write() {\r\n    with_bidirectional_ranges<with_writable_iterators<Instantiator, Element2>, Element1>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element1, class Element2>\r\nconstexpr void test_contiguous_write() {\r\n    with_contiguous_ranges<with_writable_iterators<Instantiator, Element2>, Element1>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element>\r\nconstexpr void test_read() {\r\n    with_input_iterators<Instantiator, Element>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element1, class Element2>\r\nconstexpr void test_read_write() {\r\n    with_input_iterators<with_writable_iterators<Instantiator, Element2>, Element1>::call();\r\n}\r\n\r\ntemplate <class Instantiator, class Element1, class Element2, class Element3>\r\nconstexpr void test_in_in_write() {\r\n    with_input_ranges<with_input_ranges<with_writable_iterators<Instantiator, Element3>, Element2>, Element1>::call();\r\n}\r\n\r\ntemplate <std::size_t I>\r\nstruct get_nth_fn {\r\n    template <class T>\r\n    [[nodiscard]] constexpr auto&& operator()(T&& t) const noexcept\r\n        requires requires { get<I>(std::forward<T>(t)); }\r\n    {\r\n        return get<I>(std::forward<T>(t));\r\n    }\r\n\r\n    template <class T, class Elem>\r\n    [[nodiscard]] constexpr decltype(auto) operator()(test::proxy_reference<T, Elem> r) const noexcept\r\n        requires requires { (*this)(r.peek()); }\r\n    {\r\n        return (*this)(r.peek());\r\n    }\r\n};\r\ninline constexpr get_nth_fn<0> get_first;\r\ninline constexpr get_nth_fn<1> get_second;\r\n\r\ntemplate <class R>\r\nconcept CanBegin = requires(R&& r) { ranges::begin(std::forward<R>(r)); };\r\ntemplate <class R>\r\nconcept CanMemberBegin = requires(R&& r) { std::forward<R>(r).begin(); };\r\n\r\ntemplate <class R>\r\nconcept CanEnd = requires(R&& r) { ranges::end(std::forward<R>(r)); };\r\ntemplate <class R>\r\nconcept CanMemberEnd = requires(R&& r) { std::forward<R>(r).end(); };\r\n\r\ntemplate <class R>\r\nconcept CanCBegin = requires(R&& r) { ranges::cbegin(std::forward<R>(r)); };\r\ntemplate <class R>\r\nconcept CanMemberCBegin = requires(R&& r) { std::forward<R>(r).cbegin(); };\r\n\r\ntemplate <class R>\r\nconcept CanCEnd = requires(R&& r) { ranges::cend(std::forward<R>(r)); };\r\ntemplate <class R>\r\nconcept CanMemberCEnd = requires(R&& r) { std::forward<R>(r).cend(); };\r\n\r\ntemplate <class R>\r\nconcept CanRBegin = requires(R&& r) { ranges::rbegin(std::forward<R>(r)); };\r\ntemplate <class R>\r\nconcept CanREnd = requires(R&& r) { ranges::rend(std::forward<R>(r)); };\r\n\r\ntemplate <class R>\r\nconcept CanCRBegin = requires(R&& r) { ranges::crbegin(std::forward<R>(r)); };\r\ntemplate <class R>\r\nconcept CanCREnd = requires(R&& r) { ranges::crend(std::forward<R>(r)); };\r\n\r\ntemplate <class R>\r\nconcept CanEmpty = requires(R&& r) { ranges::empty(std::forward<R>(r)); };\r\n\r\ntemplate <class R>\r\nconcept CanSize = requires(R&& r) { ranges::size(std::forward<R>(r)); };\r\ntemplate <class R>\r\nconcept CanMemberSize = requires(R&& r) { std::forward<R>(r).size(); };\r\n\r\ntemplate <class R>\r\nconcept CanSSize = requires(R&& r) { ranges::ssize(std::forward<R>(r)); };\r\n\r\ntemplate <class R>\r\nconcept CanData = requires(R&& r) { ranges::data(std::forward<R>(r)); };\r\ntemplate <class R>\r\nconcept CanMemberData = requires(R&& r) { std::forward<R>(r).data(); };\r\n\r\ntemplate <class R>\r\nconcept CanCData = requires(R&& r) { ranges::cdata(std::forward<R>(r)); };\r\n\r\ntemplate <class T>\r\nconcept CanMemberBase = requires(T&& t) { std::forward<T>(t).base(); };\r\n\r\ntemplate <class R>\r\nconcept CanMemberEmpty = requires(R&& r) { std::forward<R>(r).empty(); };\r\n\r\ntemplate <class R>\r\nconcept CanMemberFront = requires(R&& r) { std::forward<R>(r).front(); };\r\ntemplate <class R>\r\nconcept CanMemberBack = requires(R&& r) { std::forward<R>(r).back(); };\r\n\r\ntemplate <class R>\r\nconcept CanIndex = requires(R&& r, const ranges::range_difference_t<R> i) { std::forward<R>(r)[i]; };\r\n\r\ntemplate <class R>\r\nconcept CanBool = requires(R&& r) { std::forward<R>(r) ? true : false; };\r\n\r\ntemplate <class I>\r\nconcept CanIterSwap = requires(I&& i1, I&& i2) { ranges::iter_swap(std::forward<I>(i1), std::forward<I>(i2)); };\r\n"
  },
  {
    "path": "tests/std/include/temp_file_name.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <random>\r\n#include <string>\r\n\r\n[[nodiscard]] inline std::string temp_file_name() {\r\n    std::string ret{\"msvc_stl_\"};\r\n    std::uniform_int_distribution<int> dist{0, 15};\r\n    std::random_device rd;\r\n\r\n    for (int i = 0; i < 32; ++i) { // 32 hexits = 128 bits of entropy\r\n        ret.push_back(\"0123456789ABCDEF\"[dist(rd)]);\r\n    }\r\n\r\n    ret += \".tmp\";\r\n\r\n    return ret;\r\n}\r\n"
  },
  {
    "path": "tests/std/include/test_container_requirements.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <compare>\r\n#include <format>\r\n#include <iterator>\r\n#include <print>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n// Extracted common functionality from flat_map and flat_set tests.\r\n// May be extended for other containers if needed.\r\n\r\ntemplate <class T>\r\nvoid assert_container_requirements(const T& s) {\r\n    T m = s;\r\n    assert(m == s);\r\n\r\n    static_assert(std::is_same_v<decltype(m = s), T&>);\r\n    static_assert(std::is_same_v<decltype(m = std::move(m)), T&>);\r\n    static_assert(std::is_same_v<decltype(m.begin()), typename T::iterator>);\r\n    static_assert(std::is_same_v<decltype(m.end()), typename T::iterator>);\r\n    static_assert(std::is_same_v<decltype(s.begin()), typename T::const_iterator>);\r\n    static_assert(std::is_same_v<decltype(s.end()), typename T::const_iterator>);\r\n    static_assert(std::is_same_v<decltype(m.cbegin()), typename T::const_iterator>);\r\n    static_assert(std::is_same_v<decltype(m.cend()), typename T::const_iterator>);\r\n    static_assert(std::is_same_v<decltype(s.cbegin()), typename T::const_iterator>);\r\n    static_assert(std::is_same_v<decltype(s.cend()), typename T::const_iterator>);\r\n    static_assert(std::is_convertible_v<typename T::iterator, typename T::const_iterator>);\r\n    static_assert(std::is_same_v<decltype(m.begin() <=> m.end()), std::strong_ordering>);\r\n    static_assert(std::is_same_v<decltype(s.size()), typename T::size_type>);\r\n    static_assert(std::is_same_v<decltype(s.max_size()), typename T::size_type>);\r\n    static_assert(std::is_same_v<decltype(*m.begin()), typename T::reference>\r\n                  || std::is_same_v<decltype(*m.begin()), typename T::const_reference>);\r\n    static_assert(std::is_same_v<decltype(*m.cbegin()), typename T::const_reference>);\r\n\r\n    T my_moved = std::move(m);\r\n    assert(!(my_moved != s));\r\n\r\n    T my_empty{};\r\n    assert(my_empty.empty());\r\n\r\n    T non_empty = s;\r\n    my_empty.swap(non_empty);\r\n    assert(non_empty.empty());\r\n    assert(my_empty == s);\r\n\r\n    std::swap(my_empty, non_empty);\r\n    assert(my_empty.empty());\r\n    assert(non_empty == s);\r\n\r\n    assert(s.cbegin() <= s.cend());\r\n    assert((s.cbegin() < s.cend()) == !s.empty());\r\n\r\n    assert(m.begin() <= m.end());\r\n    assert((m.begin() < m.end()) == !m.empty());\r\n\r\n    assert(static_cast<T::size_type>(s.cend() - s.cbegin()) == s.size());\r\n}\r\n\r\ntemplate <class T>\r\nvoid assert_reversible_container_requirements(const T& s) {\r\n    static_assert(std::is_same_v<std::reverse_iterator<typename T::iterator>, typename T::reverse_iterator>);\r\n    static_assert(\r\n        std::is_same_v<std::reverse_iterator<typename T::const_iterator>, typename T::const_reverse_iterator>);\r\n    static_assert(std::is_same_v<decltype(T{}.rbegin()), typename T::reverse_iterator>);\r\n    static_assert(std::is_same_v<decltype(T{}.rend()), typename T::reverse_iterator>);\r\n    static_assert(std::is_same_v<decltype(s.rbegin()), typename T::const_reverse_iterator>);\r\n    static_assert(std::is_same_v<decltype(s.rend()), typename T::const_reverse_iterator>);\r\n    static_assert(std::is_same_v<decltype(T{}.crbegin()), typename T::const_reverse_iterator>);\r\n    static_assert(std::is_same_v<decltype(T{}.crend()), typename T::const_reverse_iterator>);\r\n    static_assert(std::is_same_v<decltype(s.crbegin()), typename T::const_reverse_iterator>);\r\n    static_assert(std::is_same_v<decltype(s.crend()), typename T::const_reverse_iterator>);\r\n    static_assert(std::is_convertible_v<typename T::reverse_iterator, typename T::const_reverse_iterator>);\r\n}\r\n\r\ntemplate <class T>\r\nconcept map_has_nothrow_swappable_containers = requires {\r\n    typename T::key_container_type;\r\n    typename T::mapped_container_type;\r\n    requires std::is_nothrow_swappable_v<typename T::key_container_type>;\r\n    requires std::is_nothrow_swappable_v<typename T::mapped_container_type>;\r\n};\r\n\r\ntemplate <class T>\r\nconcept set_has_nothrow_swappable_containers = requires {\r\n    typename T::container_type;\r\n    requires std::is_nothrow_swappable_v<typename T::container_type>;\r\n};\r\n\r\ntemplate <class T>\r\nconcept has_nothrow_swappable_containers =\r\n    set_has_nothrow_swappable_containers<T> || map_has_nothrow_swappable_containers<T>;\r\n\r\ntemplate <class T>\r\nvoid assert_noexcept_requirements(T& s) {\r\n    static_assert(noexcept(s.begin()));\r\n    static_assert(noexcept(s.end()));\r\n    static_assert(noexcept(s.cbegin()));\r\n    static_assert(noexcept(s.cend()));\r\n    static_assert(noexcept(s.rbegin()));\r\n    static_assert(noexcept(s.rend()));\r\n    static_assert(noexcept(s.crbegin()));\r\n    static_assert(noexcept(s.crend()));\r\n\r\n    static_assert(noexcept(s.empty()));\r\n    static_assert(noexcept(s.size()));\r\n    static_assert(noexcept(s.max_size()));\r\n\r\n    if constexpr (!std::is_const_v<T>) {\r\n        constexpr bool is_noexcept =\r\n            has_nothrow_swappable_containers<T> && std::is_nothrow_swappable_v<typename T::key_compare>;\r\n        static_assert(noexcept(s.swap(s)) == is_noexcept);\r\n        static_assert(noexcept(std::ranges::swap(s, s)) == is_noexcept); // using ADL-swap\r\n        static_assert(noexcept(s.clear()));\r\n    }\r\n}\r\n\r\ntemplate <bool ExpectedUnique, class T>\r\nvoid assert_is_sorted_maybe_unique(const T& s) {\r\n    const auto val_comp = s.value_comp();\r\n    const auto begin_it = s.cbegin();\r\n    const auto end_it   = s.cend();\r\n\r\n    // internal check by the container itself\r\n    assert(s._Is_sorted_maybe_unique());\r\n\r\n    // external check observable by the user\r\n    assert(std::is_sorted(begin_it, end_it, val_comp));\r\n    if constexpr (ExpectedUnique) {\r\n        const auto not_comp  = [&](const auto& left, const auto& right) { return !val_comp(left, right); };\r\n        const bool is_unique = std::adjacent_find(begin_it, end_it, not_comp) == end_it;\r\n\r\n        if constexpr (std::formattable<T, char>) {\r\n            if (!is_unique) {\r\n                std::println(\"Container {} is not unique\", s);\r\n            }\r\n        }\r\n        assert(is_unique);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid assert_set_requirements() {\r\n    using iterator        = T::iterator;\r\n    using const_iterator  = T::const_iterator;\r\n    using key_type        = T::key_type;\r\n    using value_type      = T::value_type;\r\n    using reference       = T::reference;\r\n    using const_reference = T::const_reference;\r\n\r\n    static_assert(std::same_as<std::const_iterator<const_iterator>, const_iterator>);\r\n    static_assert(std::is_convertible_v<iterator, const_iterator>);\r\n\r\n    // additionally:\r\n    static_assert(std::is_same_v<key_type, value_type>);\r\n    static_assert(std::same_as<std::const_iterator<iterator>, iterator>);\r\n    static_assert(std::is_convertible_v<const_iterator, iterator>);\r\n    static_assert(std::is_same_v<decltype(*std::declval<T>().begin()), const value_type&>);\r\n    static_assert(std::is_same_v<std::remove_cvref_t<reference>, value_type>);\r\n    static_assert(std::is_same_v<const_reference, const value_type&>);\r\n}\r\n\r\ntemplate <class T>\r\nvoid assert_map_requirements() {\r\n    using iterator       = T::iterator;\r\n    using const_iterator = T::const_iterator;\r\n    using key_type       = T::key_type;\r\n    using value_type     = T::value_type;\r\n    using mapped_type    = T::mapped_type;\r\n\r\n    static_assert(std::same_as<std::const_iterator<const_iterator>, const_iterator>);\r\n    static_assert(std::is_convertible_v<iterator, const_iterator>);\r\n\r\n    // additionally:\r\n    static_assert(std::is_same_v<value_type, std::pair<key_type, mapped_type>>);\r\n}\r\n\r\ntemplate <class T>\r\nvoid assert_three_way_comparability() {\r\n    using value_type = T::value_type;\r\n    if constexpr (std::three_way_comparable<value_type>) {\r\n        static_assert(std::three_way_comparable<T>);\r\n    }\r\n}\r\n\r\nclass key_comparator {\r\nprivate:\r\n    static const auto& extract_key(const auto& obj) {\r\n        if constexpr (requires { obj.key; }) {\r\n            return obj.key;\r\n        } else {\r\n            return obj;\r\n        }\r\n    }\r\n\r\npublic:\r\n    bool operator()(const auto& lhs, const auto& rhs) const {\r\n        return extract_key(lhs) < extract_key(rhs);\r\n    }\r\n\r\n    using is_transparent = int;\r\n};\r\n"
  },
  {
    "path": "tests/std/include/test_death.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n#include <crtdbg.h>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <string>\r\n#include <vector>\r\n\r\n#pragma warning(push) // TRANSITION, OS-23694920\r\n#pragma warning(disable : 4668) // 'MEOW' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'\r\n#include <Windows.h>\r\n#pragma warning(pop)\r\n\r\nnamespace std_testing {\r\n    constexpr int internal_failure = 103;\r\n    using normal_function_t        = void (*)();\r\n    using death_function_t         = void (*)();\r\n\r\n    [[noreturn]] inline void api_unexpected(const char* const api_name) {\r\n        const auto last_error = static_cast<unsigned int>(::GetLastError());\r\n        printf(\"%s failed; LastError: 0x%08X\\n\", api_name, last_error);\r\n        abort();\r\n    }\r\n\r\n    class death_test_executive {\r\n        const normal_function_t run_normal_tests;\r\n        std::vector<death_function_t> death_tests;\r\n\r\n        int execute_death_test(const char* const test_id) const {\r\n            const auto testId = static_cast<size_t>(atoi(test_id));\r\n\r\n            if (errno == 0) {\r\n                _set_abort_behavior(0, _WRITE_ABORT_MSG);\r\n                _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);\r\n                _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT);\r\n\r\n                death_tests[testId]();\r\n                return 0;\r\n            } else {\r\n                puts(\"failed to parse test_id\");\r\n                return internal_failure;\r\n            }\r\n        }\r\n\r\n        DWORD dispatch_death_test(const size_t test_id, const wchar_t* const this_program) const {\r\n            STARTUPINFOW si{};\r\n            si.cb = sizeof(si);\r\n\r\n            PROCESS_INFORMATION pi{};\r\n\r\n            std::wstring test_id_str(1, L' ');\r\n            test_id_str.append(std::to_wstring(test_id));\r\n            if (::CreateProcessW(this_program, &test_id_str[0], nullptr, nullptr, FALSE, 0, nullptr, nullptr, &si, &pi)\r\n                == 0) {\r\n                api_unexpected(\"CreateProcessW\");\r\n            }\r\n\r\n            if (::WaitForSingleObject(pi.hProcess, INFINITE) != WAIT_OBJECT_0) {\r\n                api_unexpected(\"WaitForSingleObject\");\r\n            }\r\n\r\n            DWORD exit_code = 0;\r\n            if (::GetExitCodeProcess(pi.hProcess, &exit_code) == 0) {\r\n                api_unexpected(\"GetExitCodeProcess\");\r\n            }\r\n\r\n            ::CloseHandle(pi.hThread);\r\n            ::CloseHandle(pi.hProcess);\r\n\r\n            return exit_code;\r\n        }\r\n\r\n        static std::wstring get_current_process_path() {\r\n            std::wstring result(MAX_PATH, L'\\0');\r\n            for (;;) {\r\n                const DWORD result_size = ::GetModuleFileNameW(nullptr, &result[0], static_cast<DWORD>(result.size()));\r\n                const size_t str_size   = result.size();\r\n                if (result_size == str_size) {\r\n                    // buffer was not big enough\r\n                    const size_t str_max_size    = result.max_size();\r\n                    const size_t result_max_size = str_max_size - str_max_size / 2;\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wtautological-constant-out-of-range-compare\"\r\n#endif // __clang__\r\n                    if (result_size >= result_max_size) {\r\n                        api_unexpected(\"GetModuleFileNameW\");\r\n                    }\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // __clang__\r\n\r\n                    result.resize(result_size + result_size / 2);\r\n                } else if (result_size == 0) {\r\n                    api_unexpected(\"GetModuleFileNameW\");\r\n                } else {\r\n                    result.resize(result_size);\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n    public:\r\n        death_test_executive() : run_normal_tests(nullptr) {}\r\n\r\n        explicit death_test_executive(const normal_function_t normal_tests_function)\r\n            : run_normal_tests(normal_tests_function) {}\r\n\r\n        template <size_t TestsCount>\r\n        void add_death_tests(const death_function_t (&tests)[TestsCount]) {\r\n            death_tests.insert(death_tests.end(), tests, std::end(tests));\r\n        }\r\n\r\n        int run(int argc, char* argv[]) const {\r\n            if (argc == 1) {\r\n                // first pass, run normal tests and sub-process loop\r\n                printf(\"running normal tests...\");\r\n                if (run_normal_tests != nullptr) {\r\n                    run_normal_tests();\r\n                }\r\n                puts(\" passed!\");\r\n\r\n                ::SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);\r\n                const auto this_program       = get_current_process_path();\r\n                const size_t death_tests_size = death_tests.size();\r\n                for (size_t idx = 0; idx < death_tests_size; ++idx) {\r\n                    printf(\"running death test %zu... \", idx);\r\n                    const DWORD death_test_result = dispatch_death_test(idx, this_program.c_str());\r\n                    if (death_test_result <= 1000U) {\r\n                        printf(\"returned %lu\", death_test_result);\r\n                    } else {\r\n                        printf(\"returned 0x%lX\", death_test_result);\r\n                    }\r\n\r\n                    if (death_test_result == 0 || death_test_result == 100) {\r\n                        puts(\", a success code (this is bad)\");\r\n                        puts(\"Terminate!\");\r\n                        return 1;\r\n                    } else if (death_test_result == internal_failure) {\r\n                        puts(\", an internal test harness failure\");\r\n                        puts(\"Terminate!\");\r\n                        return 1;\r\n                    } else {\r\n                        puts(\", a failure code (this is good)\");\r\n                    }\r\n                }\r\n\r\n                return 0;\r\n            } else if (argc == 2) {\r\n                return execute_death_test(argv[1]);\r\n            } else {\r\n                puts(\"incorrect command line\");\r\n                return 1;\r\n            }\r\n        }\r\n    };\r\n} // namespace std_testing\r\n"
  },
  {
    "path": "tests/std/include/test_filesystem_support.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <algorithm>\r\n#include <filesystem>\r\n#include <iterator>\r\n#include <random>\r\n#include <string>\r\n\r\ntemplate <class T>\r\nstd::string get_test_directory_subname(const T& testName) {\r\n    using namespace std;\r\n    random_device rd;\r\n    uniform_int_distribution<> dist(0, 15);\r\n    string subName(testName);\r\n    subName.push_back('_');\r\n    generate_n(back_inserter(subName), 32, [&] { return \"0123456789ABCDEF\"[dist(rd)]; });\r\n    return subName;\r\n}\r\n\r\n#if _HAS_CXX17\r\n#include <cassert>\r\n#include <iostream>\r\n#include <string_view>\r\n#include <system_error>\r\n\r\ninline std::filesystem::path get_test_directory(std::string_view testName) {\r\n    return std::filesystem::temp_directory_path() / get_test_directory_subname(testName);\r\n}\r\n\r\nstruct [[nodiscard]] test_temp_directory {\r\n    const std::filesystem::path directoryPath;\r\n\r\n    explicit test_temp_directory(const std::string_view testName) : directoryPath(get_test_directory(testName)) {\r\n        std::error_code ec;\r\n        std::filesystem::remove_all(directoryPath, ec);\r\n        if (ec) {\r\n            std::wcerr << L\"Warning, couldn't clean up \" << directoryPath << L\" before test.\" << std::endl;\r\n        } else {\r\n            std::filesystem::create_directories(directoryPath, ec);\r\n            assert(!ec);\r\n        }\r\n    }\r\n\r\n    test_temp_directory(const test_temp_directory&)            = delete;\r\n    test_temp_directory& operator=(const test_temp_directory&) = delete;\r\n\r\n    ~test_temp_directory() noexcept {\r\n        std::error_code ec;\r\n        std::filesystem::remove_all(directoryPath, ec);\r\n        if (ec) {\r\n            std::wcerr << L\"Warning, couldn't clean up \" << directoryPath << L\" after test.\" << std::endl;\r\n        }\r\n    }\r\n};\r\n#endif // _HAS_CXX17\r\n"
  },
  {
    "path": "tests/std/include/test_format_support.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <format>\r\n#include <iterator>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n// copied from the string_view tests\r\ntemplate <typename CharT>\r\nstruct choose_literal; // not defined\r\n\r\ntemplate <>\r\nstruct choose_literal<char> {\r\n    static constexpr const char* choose(const char* s, const wchar_t*) {\r\n        return s;\r\n    }\r\n\r\n    static constexpr char choose(char c, wchar_t) {\r\n        return c;\r\n    }\r\n\r\n    static constexpr std::string_view choose(std::string_view sv, std::wstring_view) {\r\n        return sv;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct choose_literal<wchar_t> {\r\n    static constexpr const wchar_t* choose(const char*, const wchar_t* s) {\r\n        return s;\r\n    }\r\n\r\n    static constexpr wchar_t choose(char, wchar_t c) {\r\n        return c;\r\n    }\r\n\r\n    static constexpr std::wstring_view choose(std::string_view, std::wstring_view sv) {\r\n        return sv;\r\n    }\r\n};\r\n\r\n#define TYPED_LITERAL(CharT, Literal) (choose_literal<CharT>::choose(Literal, L##Literal))\r\n\r\ntemplate <typename CharT>\r\nstruct noop_testing_callbacks {\r\n    constexpr void _On_align(std::_Fmt_align) {}\r\n    constexpr void _On_fill(std::basic_string_view<CharT>) {}\r\n    constexpr void _On_width(unsigned int) {}\r\n    constexpr void _On_dynamic_width(std::size_t) {}\r\n    constexpr void _On_dynamic_width(std::_Auto_id_tag) {}\r\n    constexpr void _On_precision(unsigned int) {}\r\n    constexpr void _On_dynamic_precision(std::size_t) {}\r\n    constexpr void _On_dynamic_precision(std::_Auto_id_tag) {}\r\n    constexpr void _On_sign(std::_Fmt_sign) {}\r\n    constexpr void _On_hash() {}\r\n    constexpr void _On_zero() {}\r\n    constexpr void _On_localized() {}\r\n    constexpr void _On_type(CharT) {}\r\n};\r\n\r\ntemplate <typename CharT>\r\nstruct testing_callbacks {\r\n    std::_Fmt_align expected_alignment = std::_Fmt_align::_None;\r\n    std::_Fmt_sign expected_sign       = std::_Fmt_sign::_None;\r\n    std::basic_string_view<CharT> expected_fill{};\r\n    int expected_width                     = -1;\r\n    std::size_t expected_dynamic_width     = static_cast<std::size_t>(-1);\r\n    bool expected_auto_dynamic_width       = false;\r\n    int expected_precision                 = -1;\r\n    std::size_t expected_dynamic_precision = static_cast<std::size_t>(-1);\r\n    bool expected_auto_dynamic_precision   = false;\r\n    bool expected_hash                     = false;\r\n    bool expected_zero                     = false;\r\n    bool expected_localized                = false;\r\n    CharT expected_type                    = '\\0';\r\n\r\n    constexpr void _On_align(std::_Fmt_align aln) {\r\n        assert(aln == expected_alignment);\r\n    }\r\n    constexpr void _On_fill(std::basic_string_view<CharT> str_view) {\r\n        assert(str_view == expected_fill);\r\n    }\r\n    constexpr void _On_width(int width) {\r\n        assert(width == expected_width);\r\n    }\r\n    constexpr void _On_dynamic_width(std::size_t id) {\r\n        assert(id == expected_dynamic_width);\r\n    }\r\n    constexpr void _On_dynamic_width(std::_Auto_id_tag) {\r\n        assert(expected_auto_dynamic_width);\r\n    }\r\n    constexpr void _On_precision(int pre) {\r\n        assert(pre == expected_precision);\r\n    }\r\n    constexpr void _On_dynamic_precision(std::size_t id) {\r\n        assert(id == expected_dynamic_precision);\r\n    }\r\n    constexpr void _On_dynamic_precision(std::_Auto_id_tag) {\r\n        assert(expected_auto_dynamic_precision);\r\n    }\r\n    constexpr void _On_sign(std::_Fmt_sign sgn) {\r\n        assert(sgn == expected_sign);\r\n    }\r\n    constexpr void _On_hash() {\r\n        assert(expected_hash);\r\n    }\r\n    constexpr void _On_zero() {\r\n        assert(expected_zero);\r\n    }\r\n    constexpr void _On_localized() {\r\n        assert(expected_localized);\r\n    }\r\n    constexpr void _On_type(CharT type) {\r\n        assert(type == expected_type);\r\n    }\r\n};\r\ntemplate <typename CharT>\r\ntesting_callbacks(std::_Fmt_align, std::basic_string_view<CharT>) -> testing_callbacks<CharT>;\r\n\r\nstruct testing_arg_id_callbacks {\r\n    constexpr void _On_auto_id() {}\r\n    constexpr void _On_manual_id(std::size_t) {}\r\n};\r\n\r\ntemplate <typename CharT, typename callback_type>\r\nvoid test_parse_helper(const CharT* (*func)(const CharT*, const CharT*, callback_type&&),\r\n    std::basic_string_view<CharT> view, bool err_expected = false,\r\n    typename std::basic_string_view<CharT>::size_type expected_end_position = std::basic_string_view<CharT>::npos,\r\n    callback_type&& callbacks                                               = {}) {\r\n    try {\r\n        auto end = func(view.data(), view.data() + view.size(), std::move(callbacks));\r\n        if (expected_end_position == std::basic_string_view<CharT>::npos) {\r\n            expected_end_position = view.size();\r\n        }\r\n        assert(end == view.data() + expected_end_position);\r\n        assert(!err_expected);\r\n    } catch (const std::format_error&) {\r\n        assert(err_expected);\r\n    }\r\n}\r\n\r\ntemplate <class CharT>\r\nstruct FormatFn {\r\n    template <class... Args>\r\n    [[nodiscard]] auto operator()(\r\n        const std::basic_format_string<CharT, std::type_identity_t<Args>...> str, Args&&... args) const {\r\n        return std::format(str, std::forward<Args>(args)...);\r\n    }\r\n};\r\n\r\ntemplate <class CharT>\r\nstruct VFormatFn {\r\n    template <class... Args>\r\n    [[nodiscard]] auto operator()(const std::basic_string_view<CharT> str, Args&&... args) const {\r\n        if constexpr (std::same_as<CharT, char>) {\r\n            return std::vformat(str, std::make_format_args(args...));\r\n        } else {\r\n            return std::vformat(str, std::make_wformat_args(args...));\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class CharT>\r\nstruct ExpectFormatError {\r\nprivate:\r\n    VFormatFn<CharT> base;\r\n\r\npublic:\r\n    template <class... Args>\r\n    void operator()(const std::basic_string_view<CharT> str, Args&&... args) const {\r\n        try {\r\n            (void) base(str, std::forward<Args>(args)...);\r\n            assert(false && \"No exception.\");\r\n        } catch (const std::format_error&) {\r\n            return;\r\n        } catch (...) {\r\n            assert(false && \"Incorrect exception.\");\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class CharT>\r\nstruct MoveOnlyFormat {\r\nprivate:\r\n    struct StringInserter {\r\n        using iterator_category = std::output_iterator_tag;\r\n        using difference_type   = std::ptrdiff_t;\r\n        using container_type    = std::basic_string<CharT>;\r\n\r\n        StringInserter()                            = default;\r\n        StringInserter(StringInserter&&)            = default;\r\n        StringInserter& operator=(StringInserter&&) = default;\r\n\r\n        StringInserter(const StringInserter&)            = delete;\r\n        StringInserter& operator=(const StringInserter&) = delete;\r\n\r\n        StringInserter& operator=(const CharT val) {\r\n            str.push_back(val);\r\n            return *this;\r\n        }\r\n\r\n        StringInserter& operator*() {\r\n            return *this;\r\n        }\r\n\r\n        StringInserter& operator++() {\r\n            return *this;\r\n        }\r\n\r\n        StringInserter operator++(int) {\r\n            return *this;\r\n        }\r\n\r\n        std::basic_string<CharT> str;\r\n    };\r\n\r\npublic:\r\n    static_assert(std::output_iterator<StringInserter, CharT>);\r\n    static_assert(!std::copyable<StringInserter>);\r\n    static_assert(std::movable<StringInserter>);\r\n\r\n    template <class... Args>\r\n    [[nodiscard]] auto operator()(\r\n        const std::basic_format_string<CharT, std::type_identity_t<Args>...> str, Args&&... args) const {\r\n        return std::format_to(StringInserter{}, str, std::forward<Args>(args)...).str;\r\n    }\r\n};\r\n"
  },
  {
    "path": "tests/std/include/test_generator_support.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <generator>\r\n#include <memory>\r\n#include <type_traits>\r\n\r\ntemplate <class R, class V = void, class A = void>\r\nstruct gen_traits;\r\n\r\ntemplate <class R>\r\nstruct gen_traits<R> {\r\n    using generator = std::generator<R>;\r\n    using value     = std::remove_cvref_t<R>;\r\n    using reference = R&&;\r\n    using yielded   = reference;\r\n\r\n    // Verify the default template arguments\r\n    static_assert(std::same_as<std::generator<R>, std::generator<R, void>>);\r\n    static_assert(std::same_as<std::generator<R, void>, std::generator<R, void, void>>);\r\n};\r\ntemplate <class R, class V>\r\nstruct gen_traits<R, V> {\r\n    using generator = std::generator<R, V>;\r\n    using value     = V;\r\n    using reference = R;\r\n    using yielded   = std::conditional_t<std::is_reference_v<R>, R, const R&>;\r\n\r\n    // Ditto verify default template arguments\r\n    static_assert(std::same_as<std::generator<R, V>, std::generator<R, V, void>>);\r\n};\r\ntemplate <class R, class V, class A>\r\nstruct gen_traits : gen_traits<R, V> {\r\n    using generator = std::generator<R, V, A>;\r\n};\r\n\r\ntemplate <class Ref, class V>\r\nusing gen_value_t = gen_traits<Ref, V>::value;\r\n\r\ntemplate <class Ref, class V>\r\nusing gen_reference_t = gen_traits<Ref, V>::reference;\r\n\r\ntemplate <class T, class AlwaysEqual = std::true_type, std::signed_integral DifferenceType = std::ptrdiff_t>\r\nclass StatelessAlloc {\r\npublic:\r\n    using value_type      = T;\r\n    using is_always_equal = AlwaysEqual;\r\n    using difference_type = DifferenceType;\r\n    using size_type       = std::make_unsigned_t<difference_type>;\r\n\r\n    StatelessAlloc() = default;\r\n\r\n    template <class U>\r\n    StatelessAlloc(const StatelessAlloc<U, AlwaysEqual, DifferenceType>&) {}\r\n\r\n    T* allocate(const size_type s) {\r\n        return std::allocator<T>{}.allocate(s);\r\n    }\r\n\r\n    void deallocate(T* const p, const size_type n) noexcept {\r\n        std::allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class U>\r\n    bool operator==(const StatelessAlloc<U, AlwaysEqual, DifferenceType>&) const noexcept {\r\n        return true;\r\n    }\r\n};\r\n\r\nstatic_assert(std::default_initializable<StatelessAlloc<int>>);\r\n\r\ntemplate <class T>\r\nclass StatefulAlloc {\r\npublic:\r\n    using value_type = T;\r\n\r\n    explicit StatefulAlloc(int dom) noexcept : domain{dom} {}\r\n\r\n    template <class U>\r\n    StatefulAlloc(const StatefulAlloc<U>& that) noexcept : domain{that.domain} {}\r\n\r\n    T* allocate(const size_t n) {\r\n        return std::allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* const p, const size_t n) noexcept {\r\n        return std::allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class U>\r\n    bool operator==(const StatefulAlloc<U>& that) noexcept {\r\n        return domain == that.domain;\r\n    }\r\n\r\nprivate:\r\n    int domain;\r\n\r\n    template <class U>\r\n    friend class StatefulAlloc;\r\n};\r\n\r\nstatic_assert(!std::default_initializable<StatefulAlloc<int>>);\r\n\r\nstruct MoveOnly {\r\n    MoveOnly()                           = default;\r\n    MoveOnly(const MoveOnly&)            = delete;\r\n    MoveOnly& operator=(const MoveOnly&) = delete;\r\n    MoveOnly(MoveOnly&&)                 = default;\r\n    MoveOnly& operator=(MoveOnly&&)      = default;\r\n};\r\n\r\nstatic_assert(std::movable<MoveOnly>);\r\nstatic_assert(!std::copyable<MoveOnly>);\r\n\r\nstruct Immovable {\r\n    Immovable()                       = default;\r\n    Immovable(Immovable&&)            = delete;\r\n    Immovable& operator=(Immovable&&) = delete;\r\n};\r\n\r\nstatic_assert(!std::movable<Immovable>);\r\n\r\ntemplate <class T>\r\nclass Proxy {\r\npublic:\r\n    Proxy(const T&) {}\r\n};\r\n\r\ntemplate <std::equality_comparable T>\r\nclass Proxy<T> {\r\npublic:\r\n    Proxy(const T& _value_) : value(_value_) {}\r\n\r\n    bool operator==(const Proxy& other) const {\r\n        return value == other.value;\r\n    }\r\n\r\n    bool operator==(const T& x) const {\r\n        return value == x;\r\n    }\r\n\r\nprivate:\r\n    const T& value;\r\n};\r\n"
  },
  {
    "path": "tests/std/include/test_header_units_and_modules.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// ****************************************************************************************************\r\n// THIS FILE IS SPECIAL!\r\n// Don't import or include anything here.\r\n// This is order-dependent. It assumes that the STL has been imported and <assert.h> has been included.\r\n// This is not a true header file. It doesn't need `#pragma once` or `inline`.\r\n// ****************************************************************************************************\r\n\r\nvoid test_algorithm() {\r\n    using namespace std;\r\n    puts(\"Testing <algorithm>.\");\r\n    constexpr int arr[]{11, 0, 22, 0, 33, 0, 44, 0, 55};\r\n    assert(count(begin(arr), end(arr), 0) == 4);\r\n    assert(ranges::count(arr, 0) == 4);\r\n    static_assert(count(begin(arr), end(arr), 0) == 4);\r\n    static_assert(ranges::count(arr, 0) == 4);\r\n}\r\n\r\nvoid test_any() {\r\n    using namespace std;\r\n#if defined(_HAS_STATIC_RTTI) && _HAS_STATIC_RTTI == 0 // intentional: `import std;` can't provide a default definition\r\n    puts(\"Nothing to test in <any> when static RTTI is disabled.\");\r\n#else // ^^^ static RTTI is disabled / static RTTI is enabled vvv\r\n    puts(\"Testing <any>.\");\r\n    any a1{1729};\r\n    any a2{7.5};\r\n    a1.swap(a2);\r\n    assert(any_cast<double>(a1) == 7.5);\r\n    assert(any_cast<int>(a2) == 1729);\r\n#endif // ^^^ static RTTI is enabled ^^^\r\n}\r\n\r\nvoid test_array() {\r\n    using namespace std;\r\n    puts(\"Testing <array>.\");\r\n    constexpr array arr{10, 20, 30, 40, 50};\r\n    assert(arr[2] == 30);\r\n    static_assert(arr[2] == 30);\r\n}\r\n\r\nvoid test_atomic() {\r\n    using namespace std;\r\n    puts(\"Testing <atomic>.\");\r\n    atomic<int> atom{1729};\r\n    assert(atom.load() == 1729);\r\n    ++atom;\r\n    assert(atom.load() == 1730);\r\n    static_assert(atomic<int>::is_always_lock_free); // implementation-defined\r\n}\r\n\r\nvoid test_barrier() {\r\n    using namespace std;\r\n    puts(\"Testing <barrier>.\");\r\n    static_assert(barrier<>::max() >= 5);\r\n    barrier b{2};\r\n    atomic<int> atom{0};\r\n    thread t1{[&] {\r\n        for (int i = 0; i < 5; ++i) {\r\n            auto token = b.arrive();\r\n            b.wait(move(token));\r\n            atom.fetch_add(1, memory_order_relaxed);\r\n        }\r\n    }};\r\n    thread t2{[&] {\r\n        for (int i = 0; i < 3; ++i) {\r\n            b.arrive_and_wait();\r\n            atom.fetch_add(1, memory_order_relaxed);\r\n        }\r\n        b.arrive_and_drop();\r\n    }};\r\n    t1.join();\r\n    t2.join();\r\n    assert(atom.load(memory_order_relaxed) == 8);\r\n}\r\n\r\nvoid test_bit() {\r\n    using namespace std;\r\n    puts(\"Testing <bit>.\");\r\n    assert(popcount(0x1234ABCDu) == 15);\r\n    static_assert(popcount(0x1234ABCDu) == 15);\r\n}\r\n\r\nvoid test_bitset() {\r\n    using namespace std;\r\n    puts(\"Testing <bitset>.\");\r\n    constexpr bitset<32> b{0x1234ABCDu};\r\n    assert(b[3] && b[2] && !b[1] && b[0]);\r\n    static_assert(b[3] && b[2] && !b[1] && b[0]);\r\n}\r\n\r\nvoid test_charconv() {\r\n    using namespace std;\r\n    puts(\"Testing <charconv>.\");\r\n    char buf[4]{};\r\n    const to_chars_result result = to_chars(buf, end(buf), 3.14);\r\n    assert(result.ec == errc{});\r\n    assert(result.ptr == end(buf));\r\n    const string_view sv{buf, size(buf)};\r\n    assert(sv == \"3.14\");\r\n}\r\n\r\nvoid test_chrono() {\r\n    using namespace std;\r\n    puts(\"Testing <chrono>.\");\r\n    constexpr chrono::seconds dur = 3min;\r\n    assert(dur.count() == 180);\r\n    static_assert(dur.count() == 180);\r\n}\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4996) // was declared deprecated\r\nvoid test_codecvt() {\r\n    using namespace std;\r\n    puts(\"Testing <codecvt>.\");\r\n    const string utf8_koshka_cat{\"\\xD0\\xBA\\xD0\\xBE\\xD1\\x88\\xD0\\xBA\\xD0\\xB0_\\xF0\\x9F\\x90\\x88\"};\r\n    const wstring utf16_koshka_cat{L\"\\x043A\\x043E\\x0448\\x043A\\x0430_\\xD83D\\xDC08\"};\r\n    wstring_convert<codecvt_utf8_utf16<wchar_t>> conv;\r\n    assert(conv.from_bytes(utf8_koshka_cat) == utf16_koshka_cat);\r\n    assert(conv.to_bytes(utf16_koshka_cat) == utf8_koshka_cat);\r\n\r\n    static_assert(static_cast<int>(codecvt_mode::consume_header) == 4);\r\n}\r\n#pragma warning(pop)\r\n\r\nvoid test_compare() {\r\n    using namespace std;\r\n    puts(\"Testing <compare>.\");\r\n    assert(is_lt(10 <=> 20));\r\n    static_assert(is_lt(10 <=> 20));\r\n}\r\n\r\nvoid test_complex() {\r\n    using namespace std;\r\n    puts(\"Testing <complex>.\");\r\n    constexpr complex<double> c{3.0, 4.0};\r\n    assert(norm(c) == 25.0);\r\n    static_assert(norm(c) == 25.0);\r\n}\r\n\r\nvoid test_concepts() {\r\n    using namespace std;\r\n    puts(\"Testing <concepts>.\");\r\n    static_assert(signed_integral<short>);\r\n    static_assert(!signed_integral<unsigned short>);\r\n    static_assert(!signed_integral<double>);\r\n}\r\n\r\nvoid test_condition_variable() {\r\n    using namespace std;\r\n    puts(\"Testing <condition_variable>.\");\r\n    condition_variable cv;\r\n    mutex mut;\r\n    vector<int> vec = {5};\r\n\r\n    thread odd{[&cv, &mut, &vec] {\r\n        unique_lock<mutex> lk{mut};\r\n\r\n        while (vec.size() < 6) {\r\n            cv.wait(lk, [&vec] { return vec.size() % 2 == 1; });\r\n            const int n = vec.back();\r\n            vec.push_back(n * 10 + 1);\r\n            cv.notify_one();\r\n        }\r\n    }};\r\n\r\n    thread even{[&cv, &mut, &vec] {\r\n        unique_lock<mutex> lk{mut};\r\n\r\n        while (vec.size() < 7) {\r\n            cv.wait(lk, [&vec] { return vec.size() % 2 == 0; });\r\n            const int n = vec.back();\r\n            vec.push_back(n * 10 + 2);\r\n            cv.notify_one();\r\n        }\r\n    }};\r\n\r\n    odd.join();\r\n    even.join();\r\n\r\n    const vector<int> expected_val = {5, 51, 512, 5121, 51212, 512121, 5121212};\r\n    assert(vec == expected_val);\r\n\r\n    static_assert(static_cast<int>(cv_status::no_timeout) == 0);\r\n    static_assert(static_cast<int>(cv_status::timeout) == 1);\r\n}\r\n\r\nvoid test_coroutine() {\r\n    using namespace std;\r\n    puts(\"Testing <coroutine>.\");\r\n    constexpr coroutine_handle<> handle{};\r\n    assert(handle.address() == nullptr);\r\n    static_assert(handle.address() == nullptr);\r\n}\r\n\r\nvoid test_deque() {\r\n    using namespace std;\r\n    puts(\"Testing <deque>.\");\r\n    const deque<int> d{10, 20, 30, 40, 50};\r\n    assert(d[2] == 30);\r\n}\r\n\r\nvoid test_exception() {\r\n    using namespace std;\r\n    puts(\"Testing <exception>.\");\r\n\r\n    static_assert(is_class_v<exception>);\r\n    static_assert(is_class_v<bad_exception>);\r\n\r\n    assert(uncaught_exceptions() == 0);\r\n    const exception_ptr ep = current_exception();\r\n    assert(!ep);\r\n}\r\n\r\nvoid test_execution() {\r\n    using namespace std;\r\n    puts(\"Testing <execution>.\");\r\n    constexpr int arr[]{11, 0, 22, 0, 33, 0, 44, 0, 55};\r\n    assert(count(execution::par, begin(arr), end(arr), 0) == 4);\r\n}\r\n\r\n#if TEST_STANDARD >= 23\r\nvoid test_expected() {\r\n    using namespace std;\r\n    puts(\"Testing <expected>.\");\r\n    constexpr expected<double, int> test{unexpect, 42};\r\n    assert(test.error() == 42);\r\n}\r\n#endif // TEST_STANDARD >= 23\r\n\r\nvoid test_filesystem() {\r\n    using namespace std;\r\n    puts(\"Testing <filesystem>.\");\r\n    constexpr wstring_view dot{L\".\"};\r\n    error_code ec{};\r\n    const filesystem::space_info info = filesystem::space(dot, ec);\r\n    assert(!ec);\r\n    assert(info.capacity > 0);\r\n    assert(info.capacity != static_cast<decltype(info.capacity)>(-1));\r\n}\r\n\r\n#if TEST_STANDARD >= 23\r\nvoid test_flat_map() {\r\n    using namespace std;\r\n    puts(\"Testing <flat_map>.\");\r\n\r\n    [[maybe_unused]] constexpr sorted_unique_t unique_tag         = sorted_unique;\r\n    [[maybe_unused]] constexpr sorted_equivalent_t equivalent_tag = sorted_equivalent;\r\n\r\n    constexpr auto simple_truth = [](const auto&) { return true; };\r\n\r\n    flat_map<int, int> fm;\r\n    fm.emplace(42, 172);\r\n    fm.emplace(42, 729);\r\n    assert(fm.size() == 1);\r\n    assert(erase_if(fm, simple_truth) == 1);\r\n    assert(fm.empty());\r\n\r\n    flat_multimap<int, int> fmm;\r\n    fmm.emplace(42, 172);\r\n    fmm.emplace(42, 729);\r\n    assert(fmm.size() == 2);\r\n    assert(erase_if(fmm, simple_truth) == 2);\r\n    assert(fmm.empty());\r\n}\r\n\r\nvoid test_flat_set() {\r\n    using namespace std;\r\n    puts(\"Testing <flat_set>.\");\r\n\r\n    [[maybe_unused]] constexpr sorted_unique_t unique_tag         = sorted_unique;\r\n    [[maybe_unused]] constexpr sorted_equivalent_t equivalent_tag = sorted_equivalent;\r\n\r\n    constexpr auto simple_truth = [](const auto&) { return true; };\r\n\r\n    flat_set<int> fs;\r\n    fs.emplace(42);\r\n    fs.emplace(42);\r\n    assert(fs.size() == 1);\r\n    assert(erase_if(fs, simple_truth) == 1);\r\n    assert(fs.empty());\r\n\r\n    flat_multiset<int> fms;\r\n    fms.emplace(42);\r\n    fms.emplace(42);\r\n    assert(fms.size() == 2);\r\n    assert(erase_if(fms, simple_truth) == 2);\r\n    assert(fms.empty());\r\n}\r\n#endif // TEST_STANDARD >= 23\r\n\r\nvoid test_format() {\r\n    using namespace std;\r\n    puts(\"Testing <format>.\");\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-2744645\r\n    assert(format(\"{} {}\", 1729, \"kittens\") == \"1729 kittens\");\r\n    assert(format(L\"{} {}\", 1729, L\"kittens\") == L\"1729 kittens\");\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n\r\nvoid test_forward_list() {\r\n    using namespace std;\r\n    puts(\"Testing <forward_list>.\");\r\n    const forward_list<int> fl{10, 20, 30, 40, 50};\r\n    assert(*next(fl.begin(), 2) == 30);\r\n}\r\n\r\nvoid test_fstream() {\r\n    using namespace std;\r\n    puts(\"Testing <fstream>.\");\r\n    const ifstream f{};\r\n    assert(!f.is_open());\r\n}\r\n\r\nvoid test_functional() {\r\n    using namespace std;\r\n    puts(\"Testing <functional>.\");\r\n    function<int(int, int)> f{multiplies{}};\r\n    assert(f(3, 5) == 15);\r\n    f = [](int x, int y) { return x * 100 + y * 10; };\r\n    assert(f(3, 5) == 350);\r\n    constexpr auto b = bind(multiplies{}, placeholders::_1, 11);\r\n    assert(b(3) == 33);\r\n    static_assert(b(3) == 33);\r\n}\r\n\r\nvoid test_future() {\r\n    using namespace std;\r\n    puts(\"Testing <future>.\");\r\n    promise<int> p{};\r\n    future<int> f{p.get_future()};\r\n    assert(f.wait_for(0s) == future_status::timeout);\r\n    p.set_value(1729);\r\n    assert(f.wait_for(0s) == future_status::ready);\r\n    assert(f.get() == 1729);\r\n}\r\n\r\n#if TEST_STANDARD >= 23\r\nvoid test_generator() {\r\n    using namespace std;\r\n    puts(\"Testing <generator>.\");\r\n    auto some_ints = [](int hi) -> generator<int> {\r\n        for (int i = 0; i < hi; ++i) {\r\n            co_yield i;\r\n        }\r\n    };\r\n    constexpr int bound = 42;\r\n    assert(ranges::equal(some_ints(bound), views::iota(0, bound)));\r\n}\r\n#endif // TEST_STANDARD >= 23\r\n\r\nvoid test_initializer_list() {\r\n    using namespace std;\r\n    puts(\"Testing <initializer_list>.\");\r\n    const initializer_list<int> il{10, 20, 30, 40, 50};\r\n    assert(il.begin()[2] == 30);\r\n}\r\n\r\nvoid test_iomanip() {\r\n    using namespace std;\r\n    puts(\"Testing <iomanip>.\");\r\n    ostringstream oss;\r\n    oss << \"I have \" << setfill('.') << setw(7) << 9 * 9 * 9 + 10 * 10 * 10 << \" cute fluffy kittens.\";\r\n    assert(oss.str() == \"I have ...1729 cute fluffy kittens.\");\r\n    oss.str(\"\");\r\n    oss << quoted(R\"(Read \"C:\\Temp\\Cat Names.txt\" for more info.)\");\r\n    const char* const expected_quoted = R\"(\"Read \\\"C:\\\\Temp\\\\Cat Names.txt\\\" for more info.\")\";\r\n    assert(oss.str() == expected_quoted);\r\n}\r\n\r\nvoid test_ios() {\r\n    using namespace std;\r\n    puts(\"Testing <ios>.\");\r\n    ios b{nullptr};\r\n    assert(b.rdbuf() == nullptr);\r\n    assert(b.rdstate() == ios_base::badbit);\r\n    assert(b.precision() == 6);\r\n    static_assert(ios_base::floatfield == (ios_base::fixed | ios_base::scientific));\r\n}\r\n\r\nvoid test_iosfwd() {\r\n    using namespace std;\r\n    puts(\"Testing <iosfwd>.\");\r\n    static_assert(is_same_v<istream, basic_istream<char>>);\r\n    static_assert(is_same_v<wostream, basic_ostream<wchar_t>>);\r\n}\r\n\r\nvoid test_iostream() {\r\n    using namespace std;\r\n    puts(\"Testing <iostream>.\");\r\n    cout << \"Testing cout.\\n\";\r\n    assert(cin.tie() == &cout);\r\n}\r\n\r\nvoid test_istream() {\r\n    using namespace std;\r\n    puts(\"Testing <istream>.\");\r\n    const istream is{nullptr};\r\n    assert(is.gcount() == 0);\r\n}\r\n\r\nvoid test_iterator() {\r\n    using namespace std;\r\n    puts(\"Testing <iterator>.\");\r\n    static constexpr int arr[]{10, 20, 30, 40, 50};\r\n    constexpr reverse_iterator<const int*> ri{end(arr)};\r\n    assert(*ri == 50);\r\n    assert(*next(ri) == 40);\r\n    static_assert(*ri == 50);\r\n    static_assert(*next(ri) == 40);\r\n}\r\n\r\nvoid test_latch() {\r\n    using namespace std;\r\n    puts(\"Testing <latch>.\");\r\n    static_assert(latch::max() >= 5);\r\n    for (const auto& release_wait : {true, false}) {\r\n        latch l{5};\r\n        thread t1{[&] { l.wait(); }};\r\n        thread t2{[&] { l.arrive_and_wait(2); }};\r\n        l.count_down();\r\n        if (release_wait) {\r\n            l.arrive_and_wait(2);\r\n        } else {\r\n            l.count_down(2);\r\n        }\r\n        t1.join();\r\n        t2.join();\r\n    }\r\n}\r\n\r\nvoid test_limits() {\r\n    using namespace std;\r\n    puts(\"Testing <limits>.\");\r\n    static_assert(numeric_limits<short>::min() == -32768);\r\n    static_assert(numeric_limits<short>::max() == 32767);\r\n}\r\n\r\nvoid test_list() {\r\n    using namespace std;\r\n    puts(\"Testing <list>.\");\r\n    const list<int> l{10, 20, 30, 40, 50};\r\n    assert(*next(l.begin(), 2) == 30);\r\n}\r\n\r\nvoid test_locale() {\r\n    using namespace std;\r\n    puts(\"Testing <locale>.\");\r\n    locale loc{};\r\n    assert(isdigit('1', loc));\r\n    assert(!isdigit('a', loc));\r\n    using L = locale;\r\n    static_assert((L::collate | L::ctype | L::monetary | L::numeric | L::time | L::messages | L::all) == L::all);\r\n}\r\n\r\nvoid test_map() {\r\n    using namespace std;\r\n    puts(\"Testing <map>.\");\r\n    map<int, int> m{{10, 11}, {20, 22}, {30, 33}, {40, 44}, {50, 55}};\r\n    assert(m[30] == 33);\r\n}\r\n\r\n#if TEST_STANDARD >= 23\r\nvoid test_mdspan() {\r\n    using namespace std;\r\n    puts(\"Testing <mdspan>.\");\r\n\r\n    {\r\n        int arr[] = {10, 0, 0, 0, 20, 0, 0, 0, 30};\r\n        layout_right::mapping<extents<int, 3, 3>> mp;\r\n        assert(arr[mp(0, 0)] == 10);\r\n        assert(arr[mp(1, 1)] == 20);\r\n        assert(arr[mp(2, 2)] == 30);\r\n    }\r\n\r\n    {\r\n        array<int, 15> arr{//\r\n            50, 60, 70, 80, 90, //\r\n            51, 61, 71, 81, 91, //\r\n            52, 62, 72, 82, 92};\r\n\r\n        mdspan md{arr.data(), extents<size_t, 3, 5>{}};\r\n\r\n        static_assert(is_same_v<decltype(md), mdspan<int, extents<size_t, 3, 5>>>);\r\n\r\n        assert((md[array{0, 0}] == 50));\r\n        assert((md[array{0, 4}] == 90));\r\n        assert((md[array{1, 1}] == 61));\r\n        assert((md[array{2, 0}] == 52));\r\n        assert((md[array{2, 4}] == 92));\r\n\r\n        md[array{2, 4}] = 1729;\r\n\r\n        assert(arr.back() == 1729);\r\n    }\r\n}\r\n#endif // TEST_STANDARD >= 23\r\n\r\nvoid test_memory() {\r\n    using namespace std;\r\n    puts(\"Testing <memory>.\");\r\n    unique_ptr<int> up = make_unique<int>(1729);\r\n    assert(*up == 1729);\r\n    shared_ptr<int> sp{move(up)};\r\n    assert(!up);\r\n    assert(*sp == 1729);\r\n    weak_ptr<const int> wp{sp};\r\n    assert(!wp.expired());\r\n    shared_ptr<const int> other = wp.lock();\r\n    assert(*other == 1729);\r\n    ++*sp;\r\n    assert(*other == 1730);\r\n}\r\n\r\nvoid test_memory_resource() {\r\n    using namespace std;\r\n    puts(\"Testing <memory_resource>.\");\r\n    pmr::monotonic_buffer_resource mbr{};\r\n    pmr::polymorphic_allocator<int> al{&mbr};\r\n    pmr::vector<int> v({10, 20, 30, 40, 50}, al);\r\n    assert(v[2] == 30);\r\n    v.push_back(60);\r\n    assert(v[5] == 60);\r\n}\r\n\r\nvoid test_mutex() {\r\n    using namespace std;\r\n    puts(\"Testing <mutex>.\");\r\n    // see above, tested with <condition_variable>\r\n    int n       = 10;\r\n    auto lambda = [&n] { ++n; };\r\n    once_flag flag;\r\n    assert(n == 10);\r\n    call_once(flag, lambda);\r\n    assert(n == 11);\r\n    call_once(flag, lambda);\r\n    assert(n == 11);\r\n}\r\n\r\nvoid test_new() {\r\n    using namespace std;\r\n    puts(\"Testing <new>.\");\r\n\r\n    static_assert(is_class_v<bad_alloc>);\r\n    static_assert(is_class_v<bad_array_new_length>);\r\n#ifdef __cpp_aligned_new\r\n    static_assert(is_same_v<underlying_type_t<align_val_t>, size_t>);\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n    static_assert(is_class_v<nothrow_t>);\r\n\r\n    bool caught_bad_alloc = false;\r\n\r\n    try {\r\n        throw bad_array_new_length{};\r\n    } catch (const bad_alloc&) {\r\n        caught_bad_alloc = true;\r\n    } catch (...) {\r\n        assert(false);\r\n    }\r\n\r\n    assert(caught_bad_alloc);\r\n\r\n    const int* const ptr = new (nothrow) int{1729};\r\n    assert(ptr);\r\n    assert(*ptr == 1729);\r\n    delete ptr;\r\n\r\n    static_assert(hardware_constructive_interference_size == 64); // implementation-defined\r\n    static_assert(hardware_destructive_interference_size == 64); // implementation-defined\r\n}\r\n\r\nvoid test_numbers() {\r\n    using namespace std;\r\n    puts(\"Testing <numbers>.\");\r\n    static_assert(3.14 < numbers::pi && numbers::pi < 3.15);\r\n    static_assert(2.71828f < numbers::e_v<float> && numbers::e_v<float> < 2.71829f);\r\n}\r\n\r\nvoid test_numeric() {\r\n    using namespace std;\r\n    puts(\"Testing <numeric>.\");\r\n    constexpr int arr[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};\r\n    assert(accumulate(begin(arr), end(arr), 0) == 55);\r\n    static_assert(accumulate(begin(arr), end(arr), 0) == 55);\r\n}\r\n\r\nvoid test_optional() {\r\n    using namespace std;\r\n    puts(\"Testing <optional>.\");\r\n    constexpr optional<int> opt{in_place, 1729};\r\n    assert(opt.has_value());\r\n    assert(opt.value() == 1729);\r\n    static_assert(opt.has_value());\r\n    static_assert(opt.value() == 1729);\r\n\r\n    constexpr optional<int> empty{nullopt};\r\n    assert(!empty.has_value());\r\n    assert(empty.value_or(-1) == -1);\r\n    static_assert(!empty.has_value());\r\n    static_assert(empty.value_or(-1) == -1);\r\n}\r\n\r\nvoid test_ostream() {\r\n    using namespace std;\r\n    puts(\"Testing <ostream>.\");\r\n    const ostream os{nullptr};\r\n    assert(os.rdbuf() == nullptr);\r\n}\r\n\r\n#if TEST_STANDARD >= 23\r\nvoid test_print() {\r\n    using namespace std;\r\n    puts(\"Testing <print>.\");\r\n    println(\"Hello, world!\");\r\n    println();\r\n\r\n#ifdef _CPPRTTI\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-2744645\r\n    println(cout, \"The answer to life, the universe, and everything: {}\", 42);\r\n#endif // ^^^ no workaround ^^^\r\n    println(cout);\r\n#endif // _CPPRTTI\r\n}\r\n#endif // TEST_STANDARD >= 23\r\n\r\nvoid test_queue() {\r\n    using namespace std;\r\n    puts(\"Testing <queue>.\");\r\n    queue<int> q;\r\n    q.push(10);\r\n    q.push(20);\r\n    q.push(30);\r\n    assert(q.size() == 3);\r\n    assert(q.front() == 10);\r\n    q.pop();\r\n    assert(q.front() == 20);\r\n    q.pop();\r\n    assert(q.front() == 30);\r\n    q.pop();\r\n    assert(q.empty());\r\n\r\n    priority_queue<int> pq;\r\n    pq.push(50);\r\n    pq.push(10);\r\n    pq.push(1729);\r\n    pq.push(200);\r\n    assert(pq.size() == 4);\r\n    assert(pq.top() == 1729);\r\n    pq.pop();\r\n    assert(pq.top() == 200);\r\n    pq.pop();\r\n    assert(pq.top() == 50);\r\n    pq.pop();\r\n    assert(pq.top() == 10);\r\n    pq.pop();\r\n    assert(pq.empty());\r\n}\r\n\r\nvoid test_random() {\r\n    using namespace std;\r\n    puts(\"Testing <random>.\");\r\n    minstd_rand0 lcg;\r\n    lcg.discard(9999);\r\n    assert(lcg() == 1043618065); // N4868 [rand.predef]/1\r\n\r\n#ifndef _MSVC_INTERNAL_TESTING // TRANSITION, VSO-2226569\r\n    // Test coverage for GH-4899 \"Standard Library Modules: uniform_real_distribution emits\r\n    // error C2512: 'std::_Unsigned128': no appropriate default constructor available\":\r\n    const double val = generate_canonical<double, 53>(lcg);\r\n    assert(val >= 0.0);\r\n    assert(val < 1.0);\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n\r\nvoid test_ranges() {\r\n    using namespace std;\r\n    puts(\"Testing <ranges>.\");\r\n\r\n    {\r\n        constexpr int arr[]{11, 0, 22, 0, 33, 0, 44, 0, 55};\r\n        assert(ranges::distance(views::filter(arr, [](int x) { return x == 0; })) == 4);\r\n        static_assert(ranges::distance(views::filter(arr, [](int x) { return x != 0; })) == 5);\r\n    }\r\n\r\n#if TEST_STANDARD >= 23\r\n    // Also test GH-4404 \"unrecoverable error importing module 'std' with std::ranges::views::pairwise_transform\"\r\n    {\r\n        constexpr array arr{10, 2, 30, 4, 50};\r\n\r\n        constexpr auto pairwise_plus = views::pairwise_transform(plus{});\r\n        const auto vec2              = ranges::to<vector>(arr | pairwise_plus);\r\n        const vector correct2{12, 32, 34, 54};\r\n        assert(vec2 == correct2);\r\n\r\n        constexpr auto triplewise_plus = views::adjacent_transform<3>([](int x, int y, int z) { return x + y + z; });\r\n        const auto vec3                = ranges::to<vector>(arr | triplewise_plus);\r\n        const vector correct3{42, 36, 84};\r\n        assert(vec3 == correct3);\r\n    }\r\n#endif // TEST_STANDARD >= 23\r\n}\r\n\r\nvoid test_ratio() {\r\n    using namespace std;\r\n    puts(\"Testing <ratio>.\");\r\n    static_assert(ratio_equal_v<ratio_multiply<milli, hecto>, deci>);\r\n}\r\n\r\nvoid test_regex() {\r\n    using namespace std;\r\n    puts(\"Testing <regex>.\");\r\n    const regex r{R\"(\\w+)\"};\r\n    const string s{\"cute! fluffy? kittens.\"};\r\n    vector<string> v;\r\n\r\n    for (sregex_token_iterator it{s.begin(), s.end(), r}, end; it != end; ++it) {\r\n        v.push_back(it->str());\r\n    }\r\n\r\n    const vector<string> expected_val{\"cute\", \"fluffy\", \"kittens\"};\r\n    assert(v == expected_val);\r\n}\r\n\r\nvoid test_scoped_allocator() {\r\n    using namespace std;\r\n    puts(\"Testing <scoped_allocator>.\");\r\n    vector<int, scoped_allocator_adaptor<allocator<int>>> v;\r\n    v.push_back(11);\r\n    v.push_back(22);\r\n    v.push_back(33);\r\n    constexpr int expected_val[]{11, 22, 33};\r\n    assert(equal(v.begin(), v.end(), begin(expected_val), end(expected_val)));\r\n}\r\n\r\nvoid test_semaphore() {\r\n    using namespace std;\r\n    puts(\"Testing <semaphore>.\");\r\n    static_assert(binary_semaphore::max() >= 1);\r\n    binary_semaphore s{1};\r\n    int val{0};\r\n    s.acquire();\r\n    thread t1{[&] {\r\n        for (int i = 0; i < 17; ++i) {\r\n            s.acquire();\r\n            val += 100;\r\n            s.release();\r\n        }\r\n    }};\r\n    thread t2{[&] {\r\n        for (int i = 0; i < 29; ++i) {\r\n            s.acquire();\r\n            ++val;\r\n            s.release();\r\n        }\r\n    }};\r\n    s.release();\r\n    t1.join();\r\n    t2.join();\r\n    assert(val == 1729);\r\n}\r\n\r\nvoid test_set() {\r\n    using namespace std;\r\n    puts(\"Testing <set>.\");\r\n    const set<int> s{10, 20, 30, 40, 50};\r\n    assert(*next(s.begin(), 2) == 30);\r\n\r\n    const multiset<int> ms{10, 20, 20, 30, 30, 30, 40, 40, 40, 40};\r\n    const auto p = ms.equal_range(30);\r\n    assert(distance(p.first, p.second) == 3);\r\n}\r\n\r\nvoid test_shared_mutex() {\r\n    using namespace std;\r\n    puts(\"Testing <shared_mutex>.\");\r\n    condition_variable_any cv;\r\n    shared_mutex mut;\r\n    vector<int> vec = {5};\r\n\r\n    thread odd{[&cv, &mut, &vec] {\r\n        unique_lock<shared_mutex> lk{mut};\r\n\r\n        while (vec.size() < 6) {\r\n            cv.wait(lk, [&vec] { return vec.size() % 2 == 1; });\r\n            const int n = vec.back();\r\n            vec.push_back(n * 10 + 1);\r\n            cv.notify_one();\r\n        }\r\n    }};\r\n\r\n    thread even{[&cv, &mut, &vec] {\r\n        unique_lock<shared_mutex> lk{mut};\r\n\r\n        while (vec.size() < 7) {\r\n            cv.wait(lk, [&vec] { return vec.size() % 2 == 0; });\r\n            const int n = vec.back();\r\n            vec.push_back(n * 10 + 2);\r\n            cv.notify_one();\r\n        }\r\n    }};\r\n\r\n    odd.join();\r\n    even.join();\r\n\r\n    const vector<int> expected_val = {5, 51, 512, 5121, 51212, 512121, 5121212};\r\n    assert(vec == expected_val);\r\n}\r\n\r\nconstexpr bool impl_test_source_location() {\r\n    using namespace std;\r\n    const auto sl = source_location::current();\r\n    assert(sl.line() == __LINE__ - 1);\r\n    assert(sl.column() == 38);\r\n\r\n#ifdef __EDG__\r\n    assert(sl.function_name() == \"bool impl_test_source_location()\"sv);\r\n#else // ^^^ EDG / Other vvv\r\n    assert(sl.function_name() == \"bool __cdecl impl_test_source_location(void)\"sv);\r\n#endif // ^^^ Other ^^^\r\n\r\n    assert(string_view{sl.file_name()}.ends_with(\"test_header_units_and_modules.hpp\"sv));\r\n    return true;\r\n}\r\n\r\nvoid test_source_location() {\r\n    using namespace std;\r\n    puts(\"Testing <source_location>.\");\r\n    assert(impl_test_source_location());\r\n    static_assert(impl_test_source_location());\r\n}\r\n\r\nvoid test_span() {\r\n    using namespace std;\r\n    puts(\"Testing <span>.\");\r\n    static constexpr int arr[]{11, 22, 33, 44, 55};\r\n    constexpr span<const int, 5> whole{arr};\r\n    constexpr span<const int, 3> mid = whole.subspan<1, 3>();\r\n    assert(mid[0] == 22 && mid[1] == 33 && mid[2] == 44);\r\n    static_assert(mid[0] == 22 && mid[1] == 33 && mid[2] == 44);\r\n}\r\n\r\n#if TEST_STANDARD >= 23\r\nvoid test_spanstream() {\r\n    using namespace std;\r\n    puts(\"Testing <spanstream>.\");\r\n    char ibuffer[] = \"1 2 3 4 5\";\r\n    ispanstream is{span<char>{ibuffer}};\r\n    int read = 0;\r\n    for (int expected_val = 1; expected_val <= 5; ++expected_val) {\r\n        assert(is.good());\r\n        is >> read;\r\n        assert(read == expected_val);\r\n    }\r\n\r\n    const char const_buffer[] = \"1 2 3 4 5\";\r\n    basic_ispanstream<char> is_const_buffer{span<const char>{const_buffer}};\r\n    read = 0;\r\n    for (int expected_val = 1; expected_val <= 5; ++expected_val) {\r\n        assert(is_const_buffer.good());\r\n        is_const_buffer >> read;\r\n        assert(read == expected_val);\r\n    }\r\n\r\n    const auto expected_val = \"102030\"sv;\r\n    char obuffer[10];\r\n    ospanstream os{span<char>{obuffer}};\r\n    os << 10 << 20 << 30;\r\n    assert(equal(begin(os.span()), end(os.span()), begin(expected_val), end(expected_val)));\r\n\r\n    char buffer[10];\r\n    spanstream s{span<char>{buffer}};\r\n    s << 10 << 20 << 30;\r\n    assert(equal(begin(s.span()), end(s.span()), begin(expected_val), end(expected_val)));\r\n}\r\n#endif // TEST_STANDARD >= 23\r\n\r\nvoid test_sstream() {\r\n    using namespace std;\r\n    puts(\"Testing <sstream>.\");\r\n    ostringstream oss;\r\n    oss << \"I have \" << 9 * 9 * 9 + 10 * 10 * 10 << \" cute fluffy kittens.\";\r\n    assert(oss.str() == \"I have 1729 cute fluffy kittens.\");\r\n}\r\n\r\nvoid test_stack() {\r\n    using namespace std;\r\n    puts(\"Testing <stack>.\");\r\n    stack<int> s;\r\n    s.push(10);\r\n    s.push(20);\r\n    s.push(30);\r\n    assert(s.size() == 3);\r\n    assert(s.top() == 30);\r\n    s.pop();\r\n    assert(s.top() == 20);\r\n    s.pop();\r\n    assert(s.top() == 10);\r\n    s.pop();\r\n    assert(s.empty());\r\n}\r\n\r\n#if TEST_STANDARD >= 23\r\n__declspec(dllexport) void test_stacktrace() { // export test_stacktrace to have it named even without debug info\r\n    using namespace std;\r\n    puts(\"Testing <stacktrace>.\");\r\n    auto desc = stacktrace::current().at(0).description();\r\n\r\n    if (auto pos = desc.find(\"!\"); pos != string::npos) {\r\n        desc = desc.substr(pos + 1);\r\n    }\r\n\r\n    if (auto pos = desc.find(\"+\"); pos != string::npos) {\r\n        desc.resize(pos);\r\n    }\r\n\r\n#ifndef _M_ARM64EC // TRANSITION, GH-5830\r\n    assert(desc == \"test_stacktrace\");\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n#endif // TEST_STANDARD >= 23\r\n\r\nvoid test_stdexcept() {\r\n    using namespace std;\r\n    puts(\"Testing <stdexcept>.\");\r\n    bool caught_puppies = false;\r\n\r\n    try {\r\n        throw overflow_error{\"too many puppies\"};\r\n    } catch (const runtime_error& e) {\r\n        caught_puppies = e.what() == \"too many puppies\"sv;\r\n    } catch (...) {\r\n        assert(false);\r\n    }\r\n\r\n    assert(caught_puppies);\r\n}\r\n\r\n#if TEST_STANDARD >= 23\r\nvoid test_stdfloat() {\r\n    using namespace std;\r\n    puts(\"Testing <stdfloat>.\");\r\n    // `namespace std` is available, so we're done.\r\n}\r\n#endif // TEST_STANDARD >= 23\r\n\r\nvoid test_stop_token() {\r\n    using namespace std;\r\n    puts(\"Testing <stop_token>.\");\r\n    vector<int> vec;\r\n    {\r\n        latch l{1};\r\n        jthread jt{[&](const stop_token& token) {\r\n            int val{1729};\r\n            // Generate the Collatz sequence for 1729.\r\n            // test_stop_token() shouldn't ask us to stop early; if it does, the sequence will be truncated.\r\n            while (!token.stop_requested()) {\r\n                vec.push_back(val);\r\n                if (val == 1) {\r\n                    break;\r\n                } else if (val % 2 == 0) {\r\n                    val /= 2;\r\n                } else {\r\n                    val = 3 * val + 1;\r\n                }\r\n            }\r\n            l.count_down(); // tell test_stop_token() that we're done\r\n            while (!token.stop_requested()) {\r\n                this_thread::sleep_for(10ms); // not a timing assumption; avoids spinning furiously\r\n            }\r\n            vec.push_back(-1000); // indicate that token.stop_requested() returned true\r\n        }};\r\n        l.wait(); // wait for jt to generate the sequence\r\n    } // destroying jt will ask it to stop\r\n    static constexpr int expected_val[]{1729, 5188, 2594, 1297, 3892, 1946, 973, 2920, 1460, 730, 365, 1096, 548, 274,\r\n        137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668,\r\n        334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238,\r\n        1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732,\r\n        866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16,\r\n        8, 4, 2, 1, -1000};\r\n    assert(equal(vec.begin(), vec.end(), begin(expected_val), end(expected_val)));\r\n}\r\n\r\nvoid test_streambuf() {\r\n    using namespace std;\r\n    puts(\"Testing <streambuf>.\");\r\n    istringstream iss{\"kittens\"};\r\n    assert(iss.rdbuf()->in_avail() == 7);\r\n}\r\n\r\nvoid test_string() {\r\n    using namespace std;\r\n    puts(\"Testing <string>.\");\r\n    const string small_string{\"homeowner\"};\r\n    const string large_string{\"Cute fluffy kittens are so adorable when they meow and purr.\"};\r\n    assert(small_string.find(\"meow\") == 2);\r\n    assert(large_string.find(\"meow\") == 46);\r\n}\r\n\r\nvoid test_string_view() {\r\n    using namespace std;\r\n    puts(\"Testing <string_view>.\");\r\n    constexpr string_view catenary{\"catenary\"};\r\n    assert(catenary.starts_with(\"cat\"));\r\n    assert(!catenary.starts_with(\"dog\"));\r\n    static_assert(catenary.starts_with(\"cat\"));\r\n    static_assert(!catenary.starts_with(\"dog\"));\r\n}\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4996) // was declared deprecated\r\nvoid test_strstream() {\r\n    using namespace std;\r\n    puts(\"Testing <strstream>.\");\r\n    istrstream istr{\"1729\"};\r\n    int n = -1;\r\n    istr >> n;\r\n    assert(n == 1729);\r\n}\r\n#pragma warning(pop)\r\n\r\nvoid test_syncstream() {\r\n    using namespace std;\r\n    puts(\"Testing <syncstream>.\");\r\n    syncbuf sync_buf{nullptr};\r\n    assert(sync_buf.get_wrapped() == nullptr);\r\n    assert(sync_buf.get_allocator() == allocator<char>{});\r\n    assert(sync_buf.emit() == false);\r\n    osyncstream sync_str{cout};\r\n    sync_str << \"Testing osyncstream.\\n\";\r\n    assert(sync_str.rdbuf()->get_wrapped() == cout.rdbuf());\r\n}\r\n\r\nvoid test_system_error() {\r\n    using namespace std;\r\n    puts(\"Testing <system_error>.\");\r\n    const error_code code = make_error_code(errc::value_too_large);\r\n    assert(code.value() == static_cast<int>(errc::value_too_large));\r\n    assert(code.category() == generic_category());\r\n    assert(code);\r\n}\r\n\r\nvoid test_thread() {\r\n    using namespace std;\r\n    puts(\"Testing <thread>.\");\r\n    // see above, tested with <condition_variable>\r\n    assert(this_thread::get_id() != thread::id{});\r\n}\r\n\r\nvoid test_tuple() {\r\n    using namespace std;\r\n    puts(\"Testing <tuple>.\");\r\n    constexpr tuple<int, char, double> t{1729, 'c', 1.25};\r\n    assert(get<int>(t) == 1729);\r\n    assert(get<char>(t) == 'c');\r\n    assert(get<double>(t) == 1.25);\r\n    static_assert(get<int>(t) == 1729);\r\n    static_assert(get<char>(t) == 'c');\r\n    static_assert(get<double>(t) == 1.25);\r\n}\r\n\r\nvoid test_type_traits() {\r\n    using namespace std;\r\n    puts(\"Testing <type_traits>.\");\r\n    static_assert(is_void_v<void>);\r\n    static_assert(!is_void_v<double>);\r\n    static_assert(is_same_v<remove_extent_t<int[10][20][30]>, int[20][30]>);\r\n    static_assert(is_same_v<remove_extent_t<double>, double>);\r\n\r\n    constexpr auto compiletime_10_or_runtime_20 = [] {\r\n        if (is_constant_evaluated()) {\r\n            return 10;\r\n        } else {\r\n            return 20;\r\n        }\r\n    };\r\n\r\n    assert(compiletime_10_or_runtime_20() == 20);\r\n    static_assert(compiletime_10_or_runtime_20() == 10);\r\n}\r\n\r\nvoid test_typeindex() {\r\n    using namespace std;\r\n    puts(\"Testing <typeindex>.\");\r\n    const type_index ti_int{typeid(int)};\r\n    type_index ti{typeid(double)};\r\n    assert(ti != ti_int);\r\n    ti = ti_int;\r\n    assert(ti == ti_int);\r\n}\r\n\r\nvoid test_typeinfo() {\r\n    using namespace std;\r\n    puts(\"Testing <typeinfo>.\");\r\n\r\n    static_assert(is_class_v<type_info>);\r\n    static_assert(is_class_v<bad_cast>);\r\n    static_assert(is_class_v<bad_typeid>);\r\n\r\n    const type_info& t1 = typeid(int);\r\n    const type_info& t2 = typeid(const int&);\r\n    const type_info& t3 = typeid(double);\r\n    assert(t1 == t2);\r\n    assert(t1 != t3);\r\n\r\n    assert(typeid(double).name() == \"double\"sv); // also test DevCom-10349749\r\n}\r\n\r\nvoid test_unordered_map() {\r\n    using namespace std;\r\n    puts(\"Testing <unordered_map>.\");\r\n    unordered_map<int, int> um{{1, 1}, {2, 4}, {3, 9}, {4, 16}, {5, 25}};\r\n    for (const auto& p : um) {\r\n        assert(p.first * p.first == p.second);\r\n    }\r\n}\r\n\r\nvoid test_unordered_set() {\r\n    using namespace std;\r\n    puts(\"Testing <unordered_set>.\");\r\n    unordered_set<int> us{10, 20, 30, 40, 50};\r\n    for (const auto& elem : us) {\r\n        assert(elem % 10 == 0);\r\n    }\r\n}\r\n\r\nvoid test_utility() {\r\n    using namespace std;\r\n    puts(\"Testing <utility>.\");\r\n    constexpr pair<int, double> p{44, 5.5};\r\n    assert(p.first == 44);\r\n    assert(p.second == 5.5);\r\n    static_assert(p.first == 44);\r\n    static_assert(p.second == 5.5);\r\n\r\n    assert(in_range<unsigned char>(200));\r\n    assert(!in_range<unsigned char>(300));\r\n    static_assert(in_range<unsigned char>(200));\r\n    static_assert(!in_range<unsigned char>(300));\r\n\r\n    static_assert(is_same_v<make_integer_sequence<int, 4>, integer_sequence<int, 0, 1, 2, 3>>);\r\n    static_assert(is_same_v<decltype(declval<short>() + declval<unsigned short>()), int>);\r\n}\r\n\r\nvoid test_valarray() {\r\n    using namespace std;\r\n    puts(\"Testing <valarray>.\");\r\n    valarray<int> val{1, 2, 3};\r\n    val *= 10;\r\n    assert(val[0] == 10 && val[1] == 20 && val[2] == 30);\r\n}\r\n\r\nvoid test_variant() {\r\n    using namespace std;\r\n    puts(\"Testing <variant>.\");\r\n    constexpr const char* cats = \"CATS\";\r\n    constexpr variant<int, const char*, double> var{in_place_type<const char*>, cats};\r\n    static_assert(var.index() == 1);\r\n    static_assert(holds_alternative<const char*>(var));\r\n    static_assert(get<const char*>(var) == cats);\r\n    assert(var.index() == 1);\r\n    assert(holds_alternative<const char*>(var));\r\n    assert(get<const char*>(var) == cats);\r\n\r\n    constexpr variant<short, float, double> var2{in_place_type<double>, 2.5};\r\n    assert(var2.index() == 2);\r\n    assert(holds_alternative<double>(var2));\r\n    assert(get<double>(var2) == 2.5);\r\n    static_assert(var2.index() == 2);\r\n    static_assert(holds_alternative<double>(var2));\r\n    static_assert(get<double>(var2) == 2.5);\r\n}\r\n\r\nvoid test_vector() {\r\n    using namespace std;\r\n    puts(\"Testing <vector>.\");\r\n    const vector<int> v{10, 20, 30, 40, 50};\r\n    assert(v[2] == 30);\r\n\r\n    const vector<bool> vb{true, true, false, true};\r\n    assert(vb[0] && vb[1] && !vb[2] && vb[3]);\r\n}\r\n\r\nvoid test_version() {\r\n    using namespace std;\r\n#ifdef TEST_HEADER_UNITS\r\n    puts(\"Testing <version>.\");\r\n    static_assert(__cpp_lib_make_unique >= 201304L);\r\n#else // ^^^ header units / named modules vvv\r\n    puts(\"Nothing to test in <version>, only macros.\");\r\n#endif // ^^^ named modules ^^^\r\n}\r\n\r\n// VSO-1593165 \"Standard Library Modules: time_put<wchar_t> emits bogus error LNK2019: unresolved external symbol\"\r\nvoid test_VSO_1593165() {\r\n    using namespace std;\r\n    puts(\"Testing VSO-1593165.\");\r\n\r\n    // Originally from the Dev11_0494593_time_put_wchar_t test:\r\n    using Facet = time_put<wchar_t, wstring::iterator>;\r\n\r\n    const tm t = [] {\r\n        tm ret{};\r\n\r\n        ret.tm_sec   = 57;\r\n        ret.tm_min   = 42;\r\n        ret.tm_hour  = 20;\r\n        ret.tm_mday  = 28;\r\n        ret.tm_mon   = 3;\r\n        ret.tm_year  = 108;\r\n        ret.tm_wday  = 1;\r\n        ret.tm_yday  = 118;\r\n        ret.tm_isdst = 0;\r\n\r\n        return ret;\r\n    }();\r\n\r\n    const locale l;\r\n    wstring s(15, L'x');\r\n    wstringstream stream;\r\n    const wchar_t fill          = L' ';\r\n    const wchar_t pattern[]     = L\"%Y.%m.%d\";\r\n    const wstring::iterator ret = use_facet<Facet>(l).put(s.begin(), stream, fill, &t, begin(pattern), end(pattern));\r\n    assert(ret == s.begin() + 11);\r\n    const wstring correct(L\"2008.04.28\\0xxxx\", 15);\r\n    assert(s == correct);\r\n}\r\n\r\nvoid all_cpp_header_tests() {\r\n    test_algorithm();\r\n    test_any();\r\n    test_array();\r\n    test_atomic();\r\n    test_barrier();\r\n    test_bit();\r\n    test_bitset();\r\n    test_charconv();\r\n    test_chrono();\r\n    test_codecvt();\r\n    test_compare();\r\n    test_complex();\r\n    test_concepts();\r\n    test_condition_variable();\r\n    test_coroutine();\r\n    test_deque();\r\n    test_exception();\r\n    test_execution();\r\n#if TEST_STANDARD >= 23\r\n    test_expected();\r\n#endif // TEST_STANDARD >= 23\r\n    test_filesystem();\r\n#if TEST_STANDARD >= 23\r\n    test_flat_map();\r\n    test_flat_set();\r\n#endif // TEST_STANDARD >= 23\r\n    test_format();\r\n    test_forward_list();\r\n    test_fstream();\r\n    test_functional();\r\n    test_future();\r\n#if TEST_STANDARD >= 23\r\n    test_generator();\r\n#endif // TEST_STANDARD >= 23\r\n    test_initializer_list();\r\n    test_iomanip();\r\n    test_ios();\r\n    test_iosfwd();\r\n    test_iostream();\r\n    test_istream();\r\n    test_iterator();\r\n    test_latch();\r\n    test_limits();\r\n    test_list();\r\n    test_locale();\r\n    test_map();\r\n#if TEST_STANDARD >= 23\r\n    test_mdspan();\r\n#endif // TEST_STANDARD >= 23\r\n    test_memory();\r\n    test_memory_resource();\r\n    test_mutex();\r\n    test_new();\r\n    test_numbers();\r\n    test_numeric();\r\n    test_optional();\r\n    test_ostream();\r\n#if TEST_STANDARD >= 23\r\n    test_print();\r\n#endif // TEST_STANDARD >= 23\r\n    test_queue();\r\n    test_random();\r\n    test_ranges();\r\n    test_ratio();\r\n    test_regex();\r\n    test_scoped_allocator();\r\n    test_semaphore();\r\n    test_set();\r\n    test_shared_mutex();\r\n    test_source_location();\r\n    test_span();\r\n#if TEST_STANDARD >= 23\r\n    test_spanstream();\r\n#endif // TEST_STANDARD >= 23\r\n    test_sstream();\r\n    test_stack();\r\n#if TEST_STANDARD >= 23\r\n    test_stacktrace();\r\n#endif // TEST_STANDARD >= 23\r\n    test_stdexcept();\r\n#if TEST_STANDARD >= 23\r\n    test_stdfloat();\r\n#endif // TEST_STANDARD >= 23\r\n    test_stop_token();\r\n    test_streambuf();\r\n    test_string();\r\n    test_string_view();\r\n    test_strstream();\r\n    test_syncstream();\r\n    test_system_error();\r\n    test_thread();\r\n    test_tuple();\r\n    test_type_traits();\r\n    test_typeindex();\r\n    test_typeinfo();\r\n    test_unordered_map();\r\n    test_unordered_set();\r\n    test_utility();\r\n    test_valarray();\r\n    test_variant();\r\n    test_vector();\r\n    test_version();\r\n\r\n    test_VSO_1593165();\r\n}\r\n"
  },
  {
    "path": "tests/std/include/test_is_sorted_until_support.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <vector>\r\n\r\ntemplate <class FwdIt, class Comp>\r\nFwdIt last_known_good_is_sorted_until(FwdIt first, FwdIt last, Comp comp) {\r\n    if (first == last) {\r\n        return last;\r\n    }\r\n\r\n    FwdIt next = first;\r\n    for (++next; next != last; ++first, ++next) {\r\n        if (comp(*next, *first)) {\r\n            return next;\r\n        }\r\n    }\r\n\r\n    return last;\r\n}\r\n\r\ntemplate <class T, class Comp>\r\nvoid test_case_is_sorted_until(const std::vector<T>& input, Comp comp) {\r\n    auto expected = last_known_good_is_sorted_until(input.begin(), input.end(), comp);\r\n    auto actual   = std::is_sorted_until(input.begin(), input.end(), comp);\r\n    assert(expected == actual);\r\n#if _HAS_CXX20\r\n    auto actual_r = std::ranges::is_sorted_until(input, comp);\r\n    assert(expected == actual_r);\r\n#endif // _HAS_CXX20\r\n}\r\n"
  },
  {
    "path": "tests/std/include/test_mdspan_support.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <mdspan>\r\n#include <optional>\r\n#include <ranges>\r\n#include <span>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <is_permissive.hpp>\r\n\r\nenum class IsExplicit : bool { no, yes };\r\nenum class IsNothrow : bool { no, yes };\r\n\r\ntemplate <std::integral Int, IsNothrow Nothrow = IsNothrow::yes, IsExplicit Explicit = IsExplicit::no>\r\nstruct ConvertibleToInt {\r\n    Int val = 1;\r\n\r\n    constexpr explicit(std::to_underlying(Explicit)) operator Int() const noexcept(std::to_underlying(Nothrow)) {\r\n        return val;\r\n    }\r\n};\r\n\r\nstatic_assert(std::is_aggregate_v<ConvertibleToInt<int>>);\r\nstatic_assert(std::is_convertible_v<ConvertibleToInt<int>, int>);\r\nstatic_assert(std::is_nothrow_convertible_v<ConvertibleToInt<int>, int>);\r\nstatic_assert(!std::is_nothrow_convertible_v<ConvertibleToInt<int, IsNothrow::no>, int>);\r\nstatic_assert(std::is_convertible_v<ConvertibleToInt<int, IsNothrow::no>, int>);\r\nstatic_assert(!std::is_convertible_v<ConvertibleToInt<int, IsNothrow::no, IsExplicit::yes>, int>);\r\n\r\ntemplate <std::integral Int>\r\nstruct NonConstConvertibleToInt {\r\n    operator Int() noexcept; // not defined\r\n};\r\n\r\nstatic_assert(std::is_convertible_v<NonConstConvertibleToInt<int>, int>);\r\nstatic_assert(!std::is_convertible_v<const NonConstConvertibleToInt<int>, int>);\r\nstatic_assert(std::is_nothrow_convertible_v<NonConstConvertibleToInt<int>, int>);\r\nstatic_assert(!std::is_nothrow_convertible_v<const NonConstConvertibleToInt<int>, int>);\r\n\r\nstruct NonConvertibleToAnything {};\r\n\r\nnamespace detail {\r\n    template <class T>\r\n    void check_implicit_conversion(T); // not defined\r\n}\r\n\r\ntemplate <class T, class... Args>\r\nconcept NotImplicitlyConstructibleFrom = std::constructible_from<T, Args...> && !requires(Args&&... args) {\r\n    detail::check_implicit_conversion<T>({std::forward<Args>(args)...});\r\n};\r\n\r\nnamespace detail {\r\n    template <class T>\r\n    constexpr bool is_extents_v = false;\r\n\r\n    template <class T, size_t... E>\r\n    constexpr bool is_extents_v<std::extents<T, E...>> = true;\r\n\r\n    template <class Layout, class Mapping>\r\n    constexpr bool is_mapping_of_v =\r\n        std::is_same_v<typename Layout::template mapping<typename Mapping::extents_type>, Mapping>;\r\n\r\n    template <class M>\r\n    concept CheckNestedTypesOfLayoutMapping = is_extents_v<typename M::extents_type>\r\n                                           && std::same_as<typename M::index_type, typename M::extents_type::index_type>\r\n                                           && std::same_as<typename M::rank_type, typename M::extents_type::rank_type>\r\n                                           && is_mapping_of_v<typename M::layout_type, M>;\r\n\r\n    template <class M>\r\n    concept CheckMemberFunctionsOfLayoutMapping = requires(const M m) {\r\n        { m.extents() } -> std::same_as<const typename M::extents_type&>;\r\n        { m.required_span_size() } -> std::same_as<typename M::index_type>;\r\n        { m.is_unique() } -> std::same_as<bool>;\r\n        { m.is_exhaustive() } -> std::same_as<bool>;\r\n        { m.is_strided() } -> std::same_as<bool>;\r\n    };\r\n\r\n    template <class M>\r\n    concept CheckStaticFunctionsOfLayoutMapping = requires {\r\n        { M::is_always_strided() } -> std::same_as<bool>;\r\n        { M::is_always_exhaustive() } -> std::same_as<bool>;\r\n        { M::is_always_unique() } -> std::same_as<bool>;\r\n        std::bool_constant<M::is_always_strided()>::value;\r\n        std::bool_constant<M::is_always_exhaustive()>::value;\r\n        std::bool_constant<M::is_always_unique()>::value;\r\n    };\r\n} // namespace detail\r\n\r\ntemplate <class M, class... Indices>\r\nconcept CheckCallOperatorOfLayoutMapping = requires(const M m, Indices... i) {\r\n    { m(i...) } -> std::same_as<typename M::index_type>;\r\n    { m(i...) == m(static_cast<M::index_type>(i)...) } -> std::same_as<bool>;\r\n};\r\n\r\ntemplate <class M>\r\nconcept CheckStrideMemberFunction = requires(M mapping, M::rank_type i) {\r\n    { mapping.stride(i) } -> std::same_as<typename M::index_type>;\r\n};\r\n\r\ntemplate <class M>\r\nconstexpr bool check_layout_mapping_requirements() {\r\n    static_assert(std::copyable<M>);\r\n    static_assert(std::equality_comparable<M>);\r\n    static_assert(std::is_nothrow_move_constructible_v<M>);\r\n    static_assert(std::is_nothrow_move_assignable_v<M>);\r\n    static_assert(std::is_nothrow_swappable_v<M>);\r\n    static_assert(detail::CheckNestedTypesOfLayoutMapping<M>);\r\n    static_assert(detail::CheckMemberFunctionsOfLayoutMapping<M>);\r\n    static_assert(detail::CheckStaticFunctionsOfLayoutMapping<M>);\r\n\r\n    []<size_t... Indices>(std::index_sequence<Indices...>) {\r\n        static_assert(CheckCallOperatorOfLayoutMapping<M, decltype(Indices)...>);\r\n    }(std::make_index_sequence<M::extents_type::rank()>{});\r\n\r\n    if constexpr (requires(M m, M::rank_type i) { m.stride(i); }) {\r\n        static_assert(CheckStrideMemberFunction<M>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class MP, class E>\r\n    requires detail::is_extents_v<E>\r\nconstexpr bool check_layout_mapping_policy_requirements() {\r\n    using X = MP::template mapping<E>;\r\n    static_assert(check_layout_mapping_requirements<X>());\r\n    static_assert(std::same_as<typename X::layout_type, MP>);\r\n    static_assert(std::same_as<typename X::extents_type, E>);\r\n    return true;\r\n}\r\n\r\ntemplate <class A>\r\nconstexpr bool check_accessor_policy_requirements();\r\n\r\nnamespace detail {\r\n    template <class A>\r\n    concept CheckNestedTypesOfAccessorPolicy =\r\n        sizeof(typename A::element_type) > 0\r\n        && !std::is_abstract_v<typename A::element_type> && std::copyable<typename A::data_handle_type>\r\n        && std::is_nothrow_move_constructible_v<typename A::data_handle_type>\r\n        && std::is_nothrow_move_assignable_v<typename A::data_handle_type>\r\n        && std::is_nothrow_swappable_v<typename A::data_handle_type>\r\n        && std::common_reference_with<typename A::reference, typename A::element_type&&>\r\n        && (std::same_as<typename A::offset_policy, A>\r\n            || check_accessor_policy_requirements<typename A::offset_policy>())\r\n        && std::constructible_from<typename A::offset_policy, const A&>\r\n        && std::is_same_v<typename A::offset_policy::element_type, typename A::element_type>;\r\n\r\n    template <class A>\r\n    concept CheckMemberFunctionsOfAccessorPolicy = requires(const A a, const A::data_handle_type p, size_t i) {\r\n        { a.access(p, i) } -> std::same_as<typename A::reference>;\r\n        { a.offset(p, i) } -> std::same_as<typename A::offset_policy::data_handle_type>;\r\n    };\r\n} // namespace detail\r\n\r\ntemplate <class A>\r\nconstexpr bool check_accessor_policy_requirements() {\r\n    static_assert(std::copyable<A>);\r\n    static_assert(std::is_nothrow_move_constructible_v<A>);\r\n    static_assert(std::is_nothrow_move_assignable_v<A>);\r\n    static_assert(std::is_nothrow_swappable_v<A>);\r\n    static_assert(detail::CheckNestedTypesOfAccessorPolicy<A>);\r\n    static_assert(detail::CheckMemberFunctionsOfAccessorPolicy<A>);\r\n    return true;\r\n}\r\n\r\ntemplate <class ElementType>\r\nstruct TrivialAccessor {\r\n    using offset_policy    = TrivialAccessor;\r\n    using element_type     = ElementType;\r\n    using reference        = ElementType&;\r\n    using data_handle_type = ElementType*;\r\n\r\n    constexpr reference access(data_handle_type handle, std::size_t off) const noexcept {\r\n        return handle[off];\r\n    }\r\n\r\n    constexpr data_handle_type offset(data_handle_type handle, std::size_t off) const noexcept {\r\n        return handle + off;\r\n    }\r\n\r\n    int member;\r\n};\r\n\r\nstatic_assert(check_accessor_policy_requirements<TrivialAccessor<int>>());\r\nstatic_assert(std::is_trivially_copyable_v<TrivialAccessor<int>>);\r\nstatic_assert(std::is_trivially_default_constructible_v<TrivialAccessor<int>>);\r\n\r\nnamespace detail {\r\n    template <size_t... Extents, class Fn>\r\n    constexpr void check_members_with_mixed_extents(Fn&& fn) {\r\n        auto select_extent = [](size_t e) consteval {\r\n            return e == std::dynamic_extent ? (std::min) (sizeof...(Extents), size_t{3}) : e;\r\n        };\r\n\r\n        // Check signed integers\r\n        fn(std::extents<signed char, Extents...>{select_extent(Extents)...});\r\n        fn(std::extents<short, Extents...>{select_extent(Extents)...});\r\n        fn(std::extents<int, Extents...>{select_extent(Extents)...});\r\n        fn(std::extents<long, Extents...>{select_extent(Extents)...});\r\n        fn(std::extents<long long, Extents...>{select_extent(Extents)...});\r\n\r\n        // Check unsigned integers\r\n        fn(std::extents<unsigned char, Extents...>{select_extent(Extents)...});\r\n        fn(std::extents<unsigned short, Extents...>{select_extent(Extents)...});\r\n        fn(std::extents<unsigned int, Extents...>{select_extent(Extents)...});\r\n        fn(std::extents<unsigned long, Extents...>{select_extent(Extents)...});\r\n        fn(std::extents<unsigned long long, Extents...>{select_extent(Extents)...});\r\n    }\r\n\r\n    template <class Fn, size_t... Seq>\r\n    constexpr void check_members_with_various_extents_impl(Fn&& fn, std::index_sequence<Seq...>) {\r\n        auto static_or_dynamic = [](size_t i) consteval {\r\n            return i == 0 ? std::dynamic_extent : (std::min) (sizeof...(Seq), size_t{3});\r\n        };\r\n\r\n        if constexpr (sizeof...(Seq) <= 1) {\r\n            check_members_with_mixed_extents<>(std::forward<Fn>(fn));\r\n        } else if constexpr (sizeof...(Seq) <= 2) {\r\n            (check_members_with_mixed_extents<static_or_dynamic(Seq)>(std::forward<Fn>(fn)), ...);\r\n        } else if constexpr (sizeof...(Seq) <= 4) {\r\n            (check_members_with_mixed_extents<static_or_dynamic(Seq & 0x2), static_or_dynamic(Seq & 0x1)>(\r\n                 std::forward<Fn>(fn)),\r\n                ...);\r\n        } else if constexpr (sizeof...(Seq) <= 8) {\r\n            (check_members_with_mixed_extents<static_or_dynamic(Seq & 0x4), static_or_dynamic(Seq & 0x2),\r\n                 static_or_dynamic(Seq & 0x1)>(std::forward<Fn>(fn)),\r\n                ...);\r\n        } else if constexpr (sizeof...(Seq) <= 16) {\r\n            (check_members_with_mixed_extents<static_or_dynamic(Seq & 0x8), static_or_dynamic(Seq & 0x4),\r\n                 static_or_dynamic(Seq & 0x2), static_or_dynamic(Seq & 0x1)>(std::forward<Fn>(fn)),\r\n                ...);\r\n        } else {\r\n            static_assert(sizeof...(Seq) <= 16, \"We don't need more testing.\");\r\n        }\r\n    }\r\n} // namespace detail\r\n\r\ntemplate <class Fn>\r\nconstexpr void check_members_with_various_extents(Fn&& fn) {\r\n    detail::check_members_with_various_extents_impl(std::forward<Fn>(fn), std::make_index_sequence<1>{});\r\n    detail::check_members_with_various_extents_impl(std::forward<Fn>(fn), std::make_index_sequence<2>{});\r\n    detail::check_members_with_various_extents_impl(std::forward<Fn>(fn), std::make_index_sequence<4>{});\r\n    detail::check_members_with_various_extents_impl(std::forward<Fn>(fn), std::make_index_sequence<8>{});\r\n    if (!std::is_constant_evaluated()) {\r\n        detail::check_members_with_various_extents_impl(std::forward<Fn>(fn), std::make_index_sequence<16>{});\r\n    }\r\n}\r\n\r\ntemplate <class Mapping>\r\nstruct MappingProperties {\r\n    Mapping::index_type req_span_size;\r\n    bool uniqueness;\r\n    bool exhaustiveness;\r\n    bool strideness;\r\n};\r\n\r\ntemplate <class Mapping>\r\n    requires (!is_permissive_v<Mapping>)\r\nMappingProperties<Mapping> get_mapping_properties(const Mapping& mapping) {\r\n    using IndexType     = Mapping::index_type;\r\n    constexpr auto rank = Mapping::extents_type::rank();\r\n    constexpr std::make_index_sequence<rank> rank_indices;\r\n\r\n    auto get_extent = [&](size_t i) {\r\n        assert(i < rank);\r\n        return mapping.extents().extent(i);\r\n    };\r\n    auto multidim_indices = [&]<size_t... Indices>(std::index_sequence<Indices...>) {\r\n        return std::views::cartesian_product(std::views::iota(IndexType{0}, get_extent(Indices))...);\r\n    }(rank_indices);\r\n\r\n    auto map_index      = [&](const auto& tpl) { return std::apply(mapping, tpl); };\r\n    auto mapped_indices = multidim_indices | std::views::transform(map_index) | std::ranges::to<std::vector>();\r\n    std::ranges::sort(mapped_indices);\r\n\r\n    MappingProperties<Mapping> props{};\r\n\r\n    // Find required span size (N4950 [mdspan.layout.reqmts]/12)\r\n    if (std::ranges::contains(std::views::iota(0u, rank) | std::views::transform(get_extent), IndexType{0})) {\r\n        props.req_span_size = 0;\r\n    } else {\r\n        props.req_span_size = static_cast<IndexType>(1 + mapped_indices.back());\r\n    }\r\n\r\n    // Is mapping unique? (N4950 [mdspan.layout.reqmts]/14)\r\n    props.uniqueness = std::ranges::adjacent_find(mapped_indices) == mapped_indices.end();\r\n\r\n    // Is mapping exhaustive? (N4950 [mdspan.layout.reqmts]/16)\r\n    props.exhaustiveness =\r\n        std::ranges::adjacent_find(mapped_indices, [](auto x, auto y) { return y - x > 1; }) == mapped_indices.end();\r\n\r\n    { // Is mapping strided? (N4950 [mdspan.layout.reqmts]/18)\r\n        props.strideness = true; // assumption\r\n        for (auto r : std::views::iota(0u, rank)) {\r\n            std::optional<IndexType> sr;\r\n            for (auto i : multidim_indices) {\r\n                const auto i_plus_dr = [&]<size_t... Indices>(std::index_sequence<Indices...>) {\r\n                    return std::array<IndexType, rank>{\r\n                        static_cast<IndexType>(std::get<Indices>(i) + (Indices == r ? 1 : 0))...};\r\n                }(rank_indices);\r\n\r\n                if (i_plus_dr[r] < get_extent(r)) {\r\n                    const auto diff = static_cast<IndexType>(map_index(i_plus_dr) - map_index(i));\r\n                    if (!sr.has_value()) {\r\n                        sr = diff;\r\n                    } else if (*sr != diff) {\r\n                        props.strideness = false;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (!props.strideness) {\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    return props;\r\n}\r\n\r\ntemplate <class Mapping>\r\n    requires (is_permissive_v<Mapping>)\r\nconstexpr MappingProperties<Mapping> get_mapping_properties(const Mapping&) {\r\n    return {}; // we cannot get properties in '/permissive' mode\r\n}\r\n"
  },
  {
    "path": "tests/std/include/test_min_max_element_support.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cmath>\r\n#include <cstddef>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#if _HAS_CXX20\r\n#include <ranges>\r\n#endif\r\n\r\ntemplate <class FwdIt>\r\nFwdIt last_known_good_min_element(FwdIt first, FwdIt last) {\r\n    FwdIt result = first;\r\n\r\n    for (; first != last; ++first) {\r\n        if (*first < *result) {\r\n            result = first;\r\n        }\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\ntemplate <class FwdIt>\r\nFwdIt last_known_good_max_element(FwdIt first, FwdIt last) {\r\n    FwdIt result = first;\r\n\r\n    for (; first != last; ++first) {\r\n        if (*result < *first) {\r\n            result = first;\r\n        }\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\ntemplate <class FwdIt>\r\nstd::pair<FwdIt, FwdIt> last_known_good_minmax_element(FwdIt first, FwdIt last) {\r\n    // find smallest and largest elements\r\n    std::pair<FwdIt, FwdIt> found(first, first);\r\n\r\n    if (first != last) {\r\n        while (++first != last) { // process one or two elements\r\n            FwdIt next = first;\r\n            if (++next == last) { // process last element\r\n                if (*first < *found.first) {\r\n                    found.first = first;\r\n                } else if (!(*first < *found.second)) {\r\n                    found.second = first;\r\n                }\r\n            } else { // process next two elements\r\n                if (*next < *first) { // test next for new smallest\r\n                    if (*next < *found.first) {\r\n                        found.first = next;\r\n                    }\r\n\r\n                    if (!(*first < *found.second)) {\r\n                        found.second = first;\r\n                    }\r\n                } else { // test first for new smallest\r\n                    if (*first < *found.first) {\r\n                        found.first = first;\r\n                    }\r\n\r\n                    if (!(*next < *found.second)) {\r\n                        found.second = next;\r\n                    }\r\n                }\r\n                first = next;\r\n            }\r\n        }\r\n    }\r\n\r\n    return found;\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_min_max_element(const std::vector<T>& input) {\r\n    auto expected_min    = last_known_good_min_element(input.begin(), input.end());\r\n    auto expected_max    = last_known_good_max_element(input.begin(), input.end());\r\n    auto expected_minmax = last_known_good_minmax_element(input.begin(), input.end());\r\n    auto actual_min      = std::min_element(input.begin(), input.end());\r\n    auto actual_max      = std::max_element(input.begin(), input.end());\r\n    auto actual_minmax   = std::minmax_element(input.begin(), input.end());\r\n    assert(expected_min == actual_min);\r\n    assert(expected_max == actual_max);\r\n    assert(expected_minmax == actual_minmax);\r\n#if _HAS_CXX20\r\n    using std::ranges::views::take, std::ptrdiff_t;\r\n\r\n    auto actual_min_range          = std::ranges::min_element(input);\r\n    auto actual_max_range          = std::ranges::max_element(input);\r\n    auto actual_minmax_range       = std::ranges::minmax_element(input);\r\n    auto actual_min_sized_range    = std::ranges::min_element(take(input, static_cast<ptrdiff_t>(input.size())));\r\n    auto actual_max_sized_range    = std::ranges::max_element(take(input, static_cast<ptrdiff_t>(input.size())));\r\n    auto actual_minmax_sized_range = std::ranges::minmax_element(take(input, static_cast<ptrdiff_t>(input.size())));\r\n    assert(expected_min == actual_min_range);\r\n    assert(expected_max == actual_max_range);\r\n    assert(expected_minmax.first == actual_minmax_range.min);\r\n    assert(expected_minmax.second == actual_minmax_range.max);\r\n    assert(expected_min == actual_min_sized_range);\r\n    assert(expected_max == actual_max_sized_range);\r\n    assert(expected_minmax.first == actual_minmax_sized_range.min);\r\n    assert(expected_minmax.second == actual_minmax_sized_range.max);\r\n\r\n    if (!input.empty()) {\r\n        auto actual_min_value    = std::ranges::min(input);\r\n        auto actual_max_value    = std::ranges::max(input);\r\n        auto actual_minmax_value = std::ranges::minmax(input);\r\n        assert(*expected_min == actual_min_value);\r\n        assert(*expected_max == actual_max_value);\r\n        assert(*expected_minmax.first == actual_minmax_value.min);\r\n        assert(*expected_minmax.second == actual_minmax_value.max);\r\n\r\n#ifndef _M_FP_FAST\r\n        // With /fp:fast mode the compiler does not try to produce the code that correctly\r\n        // distinguishes +0.0 and -0.0, so the algorithms are not expected to either.\r\n        if constexpr (std::is_floating_point_v<T>) {\r\n            assert(std::signbit(*expected_min) == std::signbit(actual_min_value));\r\n            assert(std::signbit(*expected_max) == std::signbit(actual_max_value));\r\n            assert(std::signbit(*expected_minmax.first) == std::signbit(actual_minmax_value.min));\r\n            assert(std::signbit(*expected_minmax.second) == std::signbit(actual_minmax_value.max));\r\n        }\r\n#endif // !defined(_M_FP_FAST)\r\n    }\r\n#endif // _HAS_CXX20\r\n}\r\n"
  },
  {
    "path": "tests/std/include/test_regex_support.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n#include <cstddef>\r\n#include <cstdio>\r\n#include <initializer_list>\r\n#include <regex>\r\n#include <string>\r\n#include <utility>\r\n\r\nclass regex_fixture {\r\n    int regex_test_result = 0;\r\n\r\npublic:\r\n    int result() const {\r\n        return regex_test_result;\r\n    }\r\n\r\n    void fail_regex() {\r\n        regex_test_result = 1;\r\n    }\r\n\r\n    void verify(const bool b) {\r\n        if (!b) {\r\n            fail_regex();\r\n        }\r\n    }\r\n\r\n    void verify_match_regex(const std::string& subject, const std::string& pattern, const std::regex& r,\r\n        const std::regex_constants::syntax_option_type syntax, const bool correct) {\r\n        try {\r\n            if (std::regex_match(subject, r) != correct) {\r\n                printf(R\"(Expected regex_match(\"%s\", regex(\"%s\", 0x%X)) to be %s.)\"\r\n                       \"\\n\",\r\n                    subject.c_str(), pattern.c_str(), static_cast<unsigned int>(syntax), correct ? \"true\" : \"false\");\r\n                fail_regex();\r\n            }\r\n        } catch (const std::regex_error& e) {\r\n            printf(R\"(Failed to regex_match(\"%s\", regex(\"%s\", 0x%X)): regex_error: \"%s\")\"\r\n                   \"\\n\",\r\n                subject.c_str(), pattern.c_str(), static_cast<unsigned int>(syntax), e.what());\r\n            fail_regex();\r\n        }\r\n    }\r\n\r\n    void verify_match_impl(const std::string& subject, const std::string& pattern,\r\n        const std::regex_constants::syntax_option_type syntax, const bool correct) {\r\n        try {\r\n            const std::regex r(pattern, syntax);\r\n            verify_match_regex(subject, pattern, r, syntax, correct);\r\n        } catch (const std::regex_error& e) {\r\n            printf(R\"(Failed to construct regex(\"%s\", 0x%X): \"%s\")\"\r\n                   \"\\n\",\r\n                pattern.c_str(), static_cast<unsigned int>(syntax), e.what());\r\n            fail_regex();\r\n        }\r\n    }\r\n\r\n    void should_match(const std::string& subject, const std::string& pattern,\r\n        const std::regex_constants::syntax_option_type syntax = std::regex_constants::ECMAScript) {\r\n        verify_match_impl(subject, pattern, syntax, true);\r\n    }\r\n\r\n    void should_match(const std::string& subject, const std::string& pattern, const std::regex& regex,\r\n        const std::regex_constants::syntax_option_type syntax = std::regex_constants::ECMAScript) {\r\n        verify_match_regex(subject, pattern, regex, syntax, true);\r\n    }\r\n\r\n    void should_not_match(const std::string& subject, const std::string& pattern,\r\n        const std::regex_constants::syntax_option_type syntax = std::regex_constants::ECMAScript) {\r\n        verify_match_impl(subject, pattern, syntax, false);\r\n    }\r\n\r\n    void should_not_match(const std::string& subject, const std::string& pattern, const std::regex& regex,\r\n        const std::regex_constants::syntax_option_type syntax = std::regex_constants::ECMAScript) {\r\n        verify_match_regex(subject, pattern, regex, syntax, false);\r\n    }\r\n\r\n    void should_capture(const std::string& subject, const std::string& pattern, const std::string& group) {\r\n        try {\r\n            const std::regex r(pattern);\r\n            std::smatch m;\r\n\r\n            if (!std::regex_match(subject, m, r)) {\r\n                printf(R\"(Expected regex(\"%s\") to match \"%s\".)\"\r\n                       \"\\n\",\r\n                    pattern.c_str(), subject.c_str());\r\n                fail_regex();\r\n                return;\r\n            }\r\n\r\n            if (m.size() != 2) {\r\n                printf(R\"(should_capture(\"%s\", \"%s\", \"%s\"): bad group count (%zu))\"\r\n                       \"\\n\",\r\n                    subject.c_str(), pattern.c_str(), group.c_str(), m.size());\r\n                fail_regex();\r\n                return;\r\n            }\r\n\r\n            if (m[0] != subject) {\r\n                printf(R\"(should_capture(\"%s\", \"%s\", \"%s\"): m[0] == \"%s\")\"\r\n                       \"\\n\",\r\n                    subject.c_str(), pattern.c_str(), group.c_str(), m[0].str().c_str());\r\n                fail_regex();\r\n            }\r\n\r\n            if (m[1] != group) {\r\n                printf(R\"(should_capture(\"%s\", \"%s\", \"%s\"): m[1] == \"%s\")\"\r\n                       \"\\n\",\r\n                    subject.c_str(), pattern.c_str(), group.c_str(), m[1].str().c_str());\r\n                fail_regex();\r\n            }\r\n        } catch (const std::regex_error& e) {\r\n            printf(R\"(should_capture(\"%s\", \"%s\", \"%s\"): regex_error: \"%s\")\"\r\n                   \"\\n\",\r\n                subject.c_str(), pattern.c_str(), group.c_str(), e.what());\r\n            fail_regex();\r\n        }\r\n    }\r\n\r\n    void should_replace_to(const std::string& subject, const std::string& pattern, const std::string& fmt,\r\n        const std::regex_constants::match_flag_type match_flags, const std::string& expected) {\r\n        try {\r\n            const std::regex r(pattern);\r\n\r\n            const std::string result = std::regex_replace(subject, r, fmt, match_flags);\r\n            if (result != expected) {\r\n                printf(\"should_replace_to(\\n\"\r\n                       R\"(subject:     \"%s\")\"\r\n                       \"\\n\"\r\n                       R\"(pattern:     \"%s\")\"\r\n                       \"\\n\"\r\n                       R\"(fmt:         \"%s\")\"\r\n                       \"\\n\"\r\n                       R\"(match_flags: 0x%X)\"\r\n                       \"\\n\"\r\n                       R\"(expected:    \"%s\")\"\r\n                       \"\\n\"\r\n                       R\"(): bad answer, returned: \"%s\")\"\r\n                       \"\\n\",\r\n                    subject.c_str(), pattern.c_str(), fmt.c_str(), static_cast<unsigned int>(match_flags),\r\n                    expected.c_str(), result.c_str());\r\n                fail_regex();\r\n            }\r\n        } catch (const std::regex_error& e) {\r\n            printf(\"should_replace_to(\\n\"\r\n                   R\"(subject:     \"%s\")\"\r\n                   \"\\n\"\r\n                   R\"(pattern:     \"%s\")\"\r\n                   \"\\n\"\r\n                   R\"(fmt:         \"%s\")\"\r\n                   \"\\n\"\r\n                   R\"(match_flags: 0x%X)\"\r\n                   \"\\n\"\r\n                   R\"(expected:    \"%s\")\"\r\n                   \"\\n\"\r\n                   R\"(): regex_error: \"%s\")\"\r\n                   \"\\n\",\r\n                subject.c_str(), pattern.c_str(), fmt.c_str(), static_cast<unsigned int>(match_flags), expected.c_str(),\r\n                e.what());\r\n            fail_regex();\r\n        }\r\n    }\r\n\r\n    void should_throw(const std::string& pattern, const std::regex_constants::error_type expectedCode,\r\n        const std::regex_constants::syntax_option_type syntax = std::regex_constants::ECMAScript) {\r\n        try {\r\n            const std::regex r(pattern, syntax);\r\n            printf(R\"(regex r(\"%s\", 0x%X) succeeded (which is bad).)\"\r\n                   \"\\n\",\r\n                pattern.c_str(), static_cast<unsigned int>(syntax));\r\n            fail_regex();\r\n        } catch (const std::regex_error& e) {\r\n            if (e.code() != expectedCode) {\r\n                printf(R\"(regex r(\"%s\", 0x%X) threw 0x%X; expected 0x%X)\"\r\n                       \"\\n\",\r\n                    pattern.c_str(), static_cast<unsigned int>(syntax), static_cast<unsigned int>(e.code()),\r\n                    static_cast<unsigned int>(expectedCode));\r\n                fail_regex();\r\n            }\r\n        }\r\n    }\r\n\r\n    void should_throw(const std::wstring& pattern, const std::regex_constants::error_type expectedCode,\r\n        const std::regex_constants::syntax_option_type syntax = std::regex_constants::ECMAScript) {\r\n        try {\r\n            const std::wregex r(pattern, syntax);\r\n            wprintf(LR\"(wregex r(\"%s\", 0x%X) succeeded (which is bad).)\"\r\n                    L\"\\n\",\r\n                pattern.c_str(), static_cast<unsigned int>(syntax));\r\n            fail_regex();\r\n        } catch (const std::regex_error& e) {\r\n            if (e.code() != expectedCode) {\r\n                wprintf(LR\"(wregex r(\"%s\", 0x%X) threw 0x%X; expected 0x%X)\"\r\n                        L\"\\n\",\r\n                    pattern.c_str(), static_cast<unsigned int>(syntax), static_cast<unsigned int>(e.code()),\r\n                    static_cast<unsigned int>(expectedCode));\r\n                fail_regex();\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nclass test_regex {\r\n    regex_fixture* const fixture;\r\n    const std::string pattern;\r\n    const std::regex_constants::syntax_option_type syntax;\r\n    const std::regex r;\r\n\r\npublic:\r\n    test_regex(regex_fixture* fixture, const std::string& pattern,\r\n        std::regex_constants::syntax_option_type syntax = std::regex_constants::ECMAScript)\r\n        : fixture(fixture), pattern(pattern), syntax(syntax), r(pattern, syntax) {}\r\n\r\n    test_regex(const test_regex&)            = delete;\r\n    test_regex& operator=(const test_regex&) = delete;\r\n\r\n    void should_search_match(const std::string& subject, const std::string& expected,\r\n        const std::regex_constants::match_flag_type match_flags = std::regex_constants::match_default) const {\r\n        std::smatch mr;\r\n        try {\r\n            const bool search_result = std::regex_search(subject, mr, r, match_flags);\r\n            if (!search_result || mr[0] != expected) {\r\n                printf(R\"(Expected regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X) to find \"%s\", )\", subject.c_str(),\r\n                    pattern.c_str(), static_cast<unsigned int>(syntax), static_cast<unsigned int>(match_flags),\r\n                    expected.c_str());\r\n                if (search_result) {\r\n                    printf(R\"(but it matched \"%s\")\"\r\n                           \"\\n\",\r\n                        mr.str().c_str());\r\n                } else {\r\n                    puts(\"but it failed to match\");\r\n                }\r\n\r\n                fixture->fail_regex();\r\n            }\r\n        } catch (const std::regex_error& e) {\r\n            printf(R\"(Failed to regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X): regex_error: \"%s\")\"\r\n                   \"\\n\",\r\n                subject.c_str(), pattern.c_str(), static_cast<unsigned int>(syntax),\r\n                static_cast<unsigned int>(match_flags), e.what());\r\n            fixture->fail_regex();\r\n        }\r\n    }\r\n\r\n    void should_search_fail(const std::string& subject,\r\n        const std::regex_constants::match_flag_type match_flags = std::regex_constants::match_default) const {\r\n        std::smatch mr;\r\n        try {\r\n            if (std::regex_search(subject, mr, r, match_flags)) {\r\n                printf(R\"(Expected regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X) to not match, but it found \"%s\")\"\r\n                       \"\\n\",\r\n                    subject.c_str(), pattern.c_str(), static_cast<unsigned int>(syntax),\r\n                    static_cast<unsigned int>(match_flags), mr.str().c_str());\r\n                fixture->fail_regex();\r\n            }\r\n        } catch (const std::regex_error& e) {\r\n            printf(R\"(Failed to regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X): regex_error: \"%s\")\"\r\n                   \"\\n\",\r\n                subject.c_str(), pattern.c_str(), static_cast<unsigned int>(syntax),\r\n                static_cast<unsigned int>(match_flags), e.what());\r\n            fixture->fail_regex();\r\n        }\r\n    }\r\n\r\n    void should_search_match_capture_groups(const std::string& subject, const std::string& expected,\r\n        const std::regex_constants::match_flag_type match_flags,\r\n        std::initializer_list<std::pair<std::ptrdiff_t, std::ptrdiff_t>> capture_groups) const {\r\n        std::smatch mr;\r\n        try {\r\n            const bool search_result = std::regex_search(subject, mr, r, match_flags);\r\n            if (!search_result || mr[0] != expected) {\r\n                printf(R\"(Expected regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X) to find \"%s\", )\", subject.c_str(),\r\n                    pattern.c_str(), static_cast<unsigned int>(syntax), static_cast<unsigned int>(match_flags),\r\n                    expected.c_str());\r\n                if (search_result) {\r\n                    printf(R\"(but it matched \"%s\")\"\r\n                           \"\\n\",\r\n                        mr.str().c_str());\r\n                } else {\r\n                    puts(\"but it failed to match\");\r\n                }\r\n\r\n                fixture->fail_regex();\r\n            } else if (capture_groups.size() + 1 != mr.size()) {\r\n                printf(R\"(Expected regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X) to match %zu capture groups in \"%s\", )\",\r\n                    subject.c_str(), pattern.c_str(), static_cast<unsigned int>(syntax),\r\n                    static_cast<unsigned int>(match_flags), capture_groups.size() + 1, expected.c_str());\r\n                printf(R\"(but it matched %zu groups)\"\r\n                       \"\\n\",\r\n                    mr.size());\r\n                fixture->fail_regex();\r\n            } else {\r\n                bool submatches_success = true;\r\n                for (std::size_t i = 1U; i < mr.size(); ++i) {\r\n                    const auto& expected_capture = capture_groups.begin()[i - 1];\r\n                    const auto& actual_capture   = mr[i];\r\n                    if (expected_capture.first == -1) {\r\n                        if (actual_capture.matched) {\r\n                            submatches_success = false;\r\n                            break;\r\n                        }\r\n                    } else if (!actual_capture.matched\r\n                               || actual_capture.first != (subject.begin() + expected_capture.first)\r\n                               || actual_capture.second != (subject.begin() + expected_capture.second)) {\r\n                        submatches_success = false;\r\n                        break;\r\n                    }\r\n                }\r\n                if (!submatches_success) {\r\n                    printf(R\"(Expected regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X) to find capture groups {)\",\r\n                        subject.c_str(), pattern.c_str(), static_cast<unsigned int>(syntax),\r\n                        static_cast<unsigned int>(match_flags));\r\n\r\n                    bool initial = true;\r\n                    for (const auto& expected_capture : capture_groups) {\r\n                        std::string capture = \"(unmatched)\";\r\n                        if (expected_capture.first != -1) {\r\n                            capture.assign(\r\n                                subject.begin() + expected_capture.first, subject.begin() + expected_capture.second);\r\n                        }\r\n                        printf(R\"(%s\"%s\" [%td %td])\", initial ? \"\" : \", \", capture.c_str(), expected_capture.first,\r\n                            expected_capture.second);\r\n                        initial = false;\r\n                    }\r\n                    printf(R\"(} in \"%s\", but found {)\", expected.c_str());\r\n\r\n                    initial = true;\r\n                    for (std::size_t i = 1U; i < mr.size(); ++i) {\r\n                        const auto& actual_capture = mr[i];\r\n                        std::string capture        = \"(unmatched)\";\r\n                        std::ptrdiff_t first       = -1;\r\n                        std::ptrdiff_t last        = -1;\r\n                        if (actual_capture.matched) {\r\n                            capture = actual_capture.str();\r\n                            first   = actual_capture.first - subject.begin();\r\n                            last    = actual_capture.second - subject.begin();\r\n                        }\r\n                        printf(R\"(%s\"%s\" [%td %td])\", initial ? \"\" : \", \", capture.c_str(), first, last);\r\n                        initial = false;\r\n                    }\r\n                    printf(\"}\\n\");\r\n                    fixture->fail_regex();\r\n                }\r\n            }\r\n        } catch (const std::regex_error& e) {\r\n            printf(R\"(Failed to regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X): regex_error: \"%s\")\"\r\n                   \"\\n\",\r\n                subject.c_str(), pattern.c_str(), static_cast<unsigned int>(syntax),\r\n                static_cast<unsigned int>(match_flags), e.what());\r\n            fixture->fail_regex();\r\n        }\r\n    }\r\n};\r\n\r\nclass test_wregex {\r\n    regex_fixture* const fixture;\r\n    const std::wstring pattern;\r\n    const std::regex_constants::syntax_option_type syntax;\r\n    const std::wregex r;\r\n\r\npublic:\r\n    test_wregex(regex_fixture* fixture, const std::wstring& pattern,\r\n        std::regex_constants::syntax_option_type syntax = std::regex_constants::ECMAScript)\r\n        : fixture(fixture), pattern(pattern), syntax(syntax), r(pattern, syntax) {}\r\n\r\n    test_wregex(const test_wregex&)            = delete;\r\n    test_wregex& operator=(const test_wregex&) = delete;\r\n\r\n    void should_search_match(const std::wstring& subject, const std::wstring& expected,\r\n        const std::regex_constants::match_flag_type match_flags = std::regex_constants::match_default) const {\r\n        std::wsmatch mr;\r\n        try {\r\n            const bool search_result = std::regex_search(subject, mr, r, match_flags);\r\n            if (!search_result || mr[0] != expected) {\r\n                wprintf(LR\"(Expected regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X) to find \"%s\", )\", subject.c_str(),\r\n                    pattern.c_str(), static_cast<unsigned int>(syntax), static_cast<unsigned int>(match_flags),\r\n                    expected.c_str());\r\n                if (search_result) {\r\n                    wprintf(LR\"(but it matched \"%s\")\"\r\n                            \"\\n\",\r\n                        mr.str().c_str());\r\n                } else {\r\n                    puts(\"but it failed to match\");\r\n                }\r\n\r\n                fixture->fail_regex();\r\n            }\r\n        } catch (const std::regex_error& e) {\r\n            wprintf(LR\"(Failed to regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X): regex_error: )\", subject.c_str(),\r\n                pattern.c_str(), static_cast<unsigned int>(syntax), static_cast<unsigned int>(match_flags));\r\n            printf(\"\\\"%s\\\"\\n\", e.what());\r\n            fixture->fail_regex();\r\n        }\r\n    }\r\n\r\n    void should_search_fail(const std::wstring& subject,\r\n        const std::regex_constants::match_flag_type match_flags = std::regex_constants::match_default) const {\r\n        std::wsmatch mr;\r\n        try {\r\n            if (std::regex_search(subject, mr, r, match_flags)) {\r\n                wprintf(LR\"(Expected regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X) to not match, but it found \"%s\")\"\r\n                        \"\\n\",\r\n                    subject.c_str(), pattern.c_str(), static_cast<unsigned int>(syntax),\r\n                    static_cast<unsigned int>(match_flags), mr.str().c_str());\r\n                fixture->fail_regex();\r\n            }\r\n        } catch (const std::regex_error& e) {\r\n            wprintf(LR\"(Failed to regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X): regex_error: )\", subject.c_str(),\r\n                pattern.c_str(), static_cast<unsigned int>(syntax), static_cast<unsigned int>(match_flags));\r\n            printf(\"\\\"%s\\\"\\n\", e.what());\r\n            fixture->fail_regex();\r\n        }\r\n    }\r\n};\r\n"
  },
  {
    "path": "tests/std/include/test_thread_support.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <chrono>\r\n#include <condition_variable>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <mutex>\r\n#include <thread>\r\n\r\n#pragma warning(push) // TRANSITION, OS-23694920\r\n#pragma warning(disable : 4668) // 'MEOW' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'\r\n#include <Windows.h>\r\n#pragma warning(pop)\r\n\r\nclass one_shot {\r\n    bool unblock = false;\r\n    std::mutex mtx;\r\n    std::condition_variable cv;\r\n\r\npublic:\r\n    template <typename Rep, typename Period>\r\n    bool wait_for(const std::chrono::duration<Rep, Period>& dur) {\r\n        std::unique_lock<std::mutex> lck(this->mtx);\r\n        return this->cv.wait_for(lck, dur, [this] { return this->unblock; });\r\n    }\r\n\r\n    void fire() {\r\n        {\r\n            std::lock_guard<std::mutex> lck(this->mtx);\r\n            if (this->unblock) {\r\n                return;\r\n            }\r\n\r\n            this->unblock = true;\r\n        }\r\n\r\n        this->cv.notify_all();\r\n    }\r\n};\r\n\r\nclass watchdog {\r\n    one_shot os;\r\n    std::thread t;\r\n\r\n    static void kill() {\r\n        fprintf(stdout, \"Terminating test due to watchdog timeout.\\n\");\r\n        fflush(stdout);\r\n        _Exit(1);\r\n    }\r\n\r\n    static void kill_if_not_debugging() {\r\n        if (::IsDebuggerPresent()) {\r\n            fprintf(stdout, \"Watchdog not terminating because debugger is connected.\\n\");\r\n            fflush(stdout);\r\n        } else {\r\n            kill();\r\n        }\r\n    }\r\n\r\npublic:\r\n    template <typename Rep, typename Period>\r\n    explicit watchdog(const std::chrono::duration<Rep, Period>& dur)\r\n        : os(), t([dur, this]() {\r\n              if (!this->os.wait_for(dur)) {\r\n                  kill_if_not_debugging();\r\n              }\r\n          }) {}\r\n\r\n    void muzzle() {\r\n        this->os.fire();\r\n    }\r\n\r\n    ~watchdog() {\r\n        this->muzzle();\r\n        this->t.join();\r\n    }\r\n};\r\n"
  },
  {
    "path": "tests/std/include/test_vector_algorithms_support.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <functional>\r\n#include <isa_availability.h>\r\n#include <random>\r\n#include <string>\r\n#include <vector>\r\n\r\ninline void initialize_randomness(std::mt19937_64& gen) {\r\n    constexpr std::size_t n = std::mt19937_64::state_size;\r\n    constexpr std::size_t w = std::mt19937_64::word_size;\r\n    static_assert(w % 32 == 0, \"w should be evenly divisible by 32\");\r\n    constexpr std::size_t k = w / 32;\r\n\r\n    std::vector<std::uint32_t> vec(n * k);\r\n\r\n    std::random_device rd;\r\n    std::generate(vec.begin(), vec.end(), std::ref(rd));\r\n\r\n    std::printf(\"This is a randomized test.\\n\");\r\n    std::printf(\"DO NOT IGNORE/RERUN ANY FAILURES.\\n\");\r\n    std::printf(\"You must report them to the STL maintainers.\\n\\n\");\r\n\r\n    std::printf(\"Seed vector: \");\r\n    for (const auto& e : vec) {\r\n        std::printf(\"%u,\", e);\r\n    }\r\n    std::printf(\"\\n\");\r\n\r\n    std::seed_seq seq(vec.cbegin(), vec.cend());\r\n    gen.seed(seq);\r\n}\r\n\r\n#if (defined(_M_IX86) || defined(_M_X64)) && !defined(_M_CEE_PURE)\r\nextern \"C\" long __isa_enabled;\r\n\r\ninline void disable_instructions(ISA_AVAILABILITY isa) {\r\n    const unsigned long as_ulong = static_cast<unsigned long>(isa);\r\n\r\n    auto has_env_var_escape_hatch = [] {\r\n        size_t return_value = 0;\r\n        char buffer[2]{};\r\n        const errno_t err = ::getenv_s(&return_value, buffer, std::size(buffer), \"STL_TEST_DOWNLEVEL_MACHINE\");\r\n        return err == 0 && buffer == std::string{\"1\"};\r\n    };\r\n\r\n    if (!has_env_var_escape_hatch()) {\r\n        const bool has_feature = (__isa_enabled & (1UL << as_ulong)) != 0;\r\n        if (!has_feature) {\r\n            std::printf(\"The feature %lu is not available, the test does not have full coverage!\\n\"\r\n                        \"You can set the environment variable STL_TEST_DOWNLEVEL_MACHINE to 1,\\n\"\r\n                        \"if you intentionally test on a machine without all features available.\\n\",\r\n                as_ulong);\r\n        }\r\n        assert(has_feature);\r\n    }\r\n\r\n    __isa_enabled &= ~(1UL << as_ulong);\r\n}\r\n#endif // (defined(_M_IX86) || defined(_M_X64)) && !defined(_M_CEE_PURE)\r\n\r\nconstexpr std::size_t dataCount = 1024;\r\n\r\ntemplate <class TestFunc>\r\nvoid run_tests_with_different_isa_levels(TestFunc tests) {\r\n    tests();\r\n\r\n#if (defined(_M_IX86) || (defined(_M_X64) && !defined(_M_ARM64EC))) && !defined(_M_CEE_PURE)\r\n    const auto original_isa = __isa_enabled;\r\n\r\n    disable_instructions(__ISA_AVAILABLE_AVX2);\r\n    tests();\r\n\r\n    disable_instructions(__ISA_AVAILABLE_SSE42);\r\n    tests();\r\n\r\n    __isa_enabled = original_isa;\r\n#endif // (defined(_M_IX86) || (defined(_M_X64) && !defined(_M_ARM64EC))) && !defined(_M_CEE_PURE)\r\n}\r\n\r\ntemplate <class TestFunc>\r\nvoid run_randomized_tests_with_different_isa_levels(TestFunc tests) {\r\n    std::mt19937_64 gen;\r\n    initialize_randomness(gen);\r\n\r\n    run_tests_with_different_isa_levels([&] { tests(gen); });\r\n}\r\n"
  },
  {
    "path": "tests/std/include/timezone_data.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n#include <cassert>\r\n#include <chrono>\r\n#include <cstdlib>\r\n#include <exception>\r\n#include <iostream>\r\n#include <stdexcept>\r\n#include <string_view>\r\n#include <system_error>\r\n#include <utility>\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\n\r\nclass Transition {\r\npublic:\r\n    constexpr Transition(string_view name, seconds offset, minutes save, string_view abbrev, string_view abbrev_alt,\r\n        sys_seconds sys_begin, sys_seconds sys_end)\r\n        : _name(name), _offset(offset), _save(save), _abbrev(abbrev), _abbrev_alt(abbrev_alt), _begin(sys_begin),\r\n          _end(sys_end) {}\r\n\r\n    constexpr string_view name() const {\r\n        return _name;\r\n    }\r\n\r\n    constexpr seconds offset() const {\r\n        return _offset;\r\n    }\r\n\r\n    constexpr minutes save() const {\r\n        return _save;\r\n    }\r\n\r\n    constexpr string_view abbrev() const {\r\n        return _abbrev;\r\n    }\r\n\r\n    constexpr string_view abbrev_alt() const {\r\n        return _abbrev_alt;\r\n    }\r\n\r\n    constexpr bool is_daylight() const {\r\n        return _save != minutes{0};\r\n    }\r\n\r\n    template <class Duration = seconds>\r\n    constexpr sys_time<Duration> begin() const {\r\n        return sys_time<Duration>{duration_cast<Duration>(_begin.time_since_epoch())};\r\n    }\r\n\r\n    template <class Duration = seconds>\r\n    constexpr sys_time<Duration> end() const {\r\n        return sys_time<Duration>{duration_cast<Duration>(_end.time_since_epoch())};\r\n    }\r\n\r\n    template <class Duration = seconds>\r\n    constexpr local_time<Duration> local_begin() const {\r\n        return local_time<Duration>{duration_cast<Duration>(_begin.time_since_epoch() + _offset)};\r\n    }\r\n\r\n    template <class Duration = seconds>\r\n    constexpr local_time<Duration> local_end() const {\r\n        return local_time<Duration>{duration_cast<Duration>(_end.time_since_epoch() + _offset)};\r\n    }\r\n\r\nprivate:\r\n    string_view _name;\r\n    seconds _offset;\r\n    minutes _save;\r\n    string_view _abbrev;\r\n    string_view _abbrev_alt;\r\n    sys_seconds _begin;\r\n    sys_seconds _end;\r\n};\r\n\r\n// start of ambiguous/nonexistent zone between transitions\r\ntemplate <class Duration = seconds>\r\nconstexpr local_time<Duration> get_danger_begin(const Transition& first, const Transition& second) {\r\n    assert(first.end<Duration>() == second.begin<Duration>());\r\n    return first.local_end<Duration>() - first.save();\r\n}\r\n\r\n// end of ambiguous/nonexistent zone between transitions\r\ntemplate <class Duration = seconds>\r\nconstexpr local_time<Duration> get_danger_end(const Transition& first, const Transition& second) {\r\n    assert(first.end<Duration>() == second.begin<Duration>());\r\n    return second.local_begin<Duration>() + first.save();\r\n}\r\n\r\n// Sydney\r\n// Standard time (AEST : UTC+10) -1 @ 3am\r\n// Daylight time (AEDT : UTC+11) +1 @ 2am\r\nnamespace Sydney {\r\n    inline constexpr string_view Tz_name{\"Australia/Sydney\"sv};\r\n    inline constexpr string_view Standard_abbrev{\"AEST\"sv};\r\n    inline constexpr string_view Daylight_abbrev{\"AEDT\"sv};\r\n    inline constexpr string_view Standard_abbrev_alt{\"GMT+10\"sv};\r\n    inline constexpr string_view Daylight_abbrev_alt{\"GMT+11\"sv};\r\n    inline constexpr seconds Standard_offset{hours{10}};\r\n    inline constexpr seconds Daylight_offset{hours{11}};\r\n    inline constexpr auto Daylight_begin_2019 =\r\n        sys_seconds{sys_days{year{2019} / October / day{6}}} + hours{2} - Standard_offset;\r\n    inline constexpr auto Standard_begin_2020 =\r\n        sys_seconds{sys_days{year{2020} / April / day{5}}} + hours{3} - Daylight_offset;\r\n    inline constexpr auto Daylight_begin_2020 =\r\n        sys_seconds{sys_days{year{2020} / October / day{4}}} + hours{2} - Standard_offset;\r\n    inline constexpr auto Standard_begin_2021 =\r\n        sys_seconds{sys_days{year{2021} / April / day{4}}} + hours{3} - Daylight_offset;\r\n\r\n    inline constexpr Transition Day_1{Tz_name, Daylight_offset, hours{1}, Daylight_abbrev, Daylight_abbrev_alt,\r\n        Daylight_begin_2019, Standard_begin_2020};\r\n    inline constexpr Transition Std_1{Tz_name, Standard_offset, hours{0}, Standard_abbrev, Standard_abbrev_alt,\r\n        Standard_begin_2020, Daylight_begin_2020};\r\n    inline constexpr Transition Day_2{Tz_name, Daylight_offset, hours{1}, Daylight_abbrev, Daylight_abbrev_alt,\r\n        Daylight_begin_2020, Standard_begin_2021};\r\n\r\n    inline constexpr pair<Transition, Transition> Day_to_Std{Day_1, Std_1};\r\n    inline constexpr pair<Transition, Transition> Std_to_Day{Std_1, Day_2};\r\n\r\n} // namespace Sydney\r\n\r\n// Los Angeles\r\n// Standard time (PST : UTC-8) +1 @ 2am\r\n// Daylight time (PDT : UTC-7) -1 @ 2am\r\nnamespace LA {\r\n    inline constexpr string_view Tz_name{\"America/Los_Angeles\"sv};\r\n    inline constexpr string_view Standard_abbrev{\"PST\"sv};\r\n    inline constexpr string_view Daylight_abbrev{\"PDT\"sv};\r\n    inline constexpr string_view Standard_abbrev_alt{\"GMT-8\"sv};\r\n    inline constexpr string_view Daylight_abbrev_alt{\"GMT-7\"sv};\r\n    inline constexpr seconds Standard_offset{hours{-8}};\r\n    inline constexpr seconds Daylight_offset{hours{-7}};\r\n    inline constexpr auto Daylight_begin_2020 =\r\n        sys_seconds{sys_days{year{2020} / March / day{8}}} + hours{2} - Standard_offset;\r\n    inline constexpr auto Standard_begin_2020 =\r\n        sys_seconds{sys_days{year{2020} / November / day{1}}} + hours{2} - Daylight_offset;\r\n    inline constexpr auto Daylight_begin_2021 =\r\n        sys_seconds{sys_days{year{2021} / March / day{14}}} + hours{2} - Standard_offset;\r\n    inline constexpr auto Standard_begin_2021 =\r\n        sys_seconds{sys_days{year{2021} / November / day{7}}} + hours{2} - Daylight_offset;\r\n\r\n    inline constexpr Transition Day_1{Tz_name, Daylight_offset, hours{1}, Daylight_abbrev, Daylight_abbrev_alt,\r\n        Daylight_begin_2020, Standard_begin_2020};\r\n    inline constexpr Transition Std_1{Tz_name, Standard_offset, hours{0}, Standard_abbrev, Standard_abbrev_alt,\r\n        Standard_begin_2020, Daylight_begin_2021};\r\n    inline constexpr Transition Day_2{Tz_name, Daylight_offset, hours{1}, Daylight_abbrev, Daylight_abbrev_alt,\r\n        Daylight_begin_2021, Standard_begin_2021};\r\n\r\n    inline constexpr pair<Transition, Transition> Day_to_Std{Day_1, Std_1};\r\n    inline constexpr pair<Transition, Transition> Std_to_Day{Std_1, Day_2};\r\n\r\n} // namespace LA\r\n\r\ntemplate <class TestFunction>\r\nvoid run_tz_test(TestFunction test_function) {\r\n    try {\r\n        test_function();\r\n    } catch (const system_error& ex) {\r\n        cerr << \"Test threw system_error: \" << ex.what() << \"\\n\";\r\n        cerr << \"With error_code: \" << ex.code() << \"\\n\";\r\n        assert(false);\r\n    } catch (const runtime_error& ex) {\r\n        cerr << \"Test threw runtime_error: \" << ex.what() << \"\\n\";\r\n        assert(false);\r\n    } catch (const exception& ex) {\r\n        cerr << \"Test threw exception: \" << ex.what() << \"\\n\";\r\n        assert(false);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/lit.cfg",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nlit_config.fatal(\r\n    \"You seem to be running Lit directly -- you should be running Lit through \"\r\n    \"<build>/tests/utils/stl-lit/stl-lit.py, which will ensure that the right Lit configuration \"\r\n    \"file is used.\")\r\n"
  },
  {
    "path": "tests/std/lit.site.cfg.in",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\nimport site\r\nsite.addsitedir(\"@STL_TEST_UTILS_DIR@\")\r\nsite.addsitedir(os.path.join(\"@LIBCXX_SOURCE_DIR@\", \"utils\"))\r\nimport stl.test.config\r\nimport stl.test.features\r\nimport stl.test.file_parsing\r\nimport stl.test.format\r\nimport stl.test.params\r\n\r\nconfig.name           = 'std'\r\nconfig.suffixes       = ['test[.]cpp$', 'test[.]compile[.]pass[.]cpp$']\r\nconfig.test_exec_root = \"@STD_TEST_OUTPUT_DIR@\"\r\nconfig.test_format    = stl.test.format.STLTestFormat()\r\nconfig.substitutions.append(('%{cxx_std}', ''))\r\n\r\nlit_config.expected_results = getattr(lit_config, 'expected_results', dict())\r\nlit_config.include_dirs     = getattr(lit_config, 'include_dirs', dict())\r\nlit_config.library_dirs     = getattr(lit_config, 'library_dirs', dict())\r\nlit_config.ruleset_dirs     = getattr(lit_config, 'ruleset_dirs', dict())\r\nlit_config.test_subdirs     = getattr(lit_config, 'test_subdirs', dict())\r\n\r\nlit_config.expected_results[config.name] = stl.test.file_parsing.parse_result_file('@STD_EXPECTED_RESULTS@')\r\nlit_config.include_dirs[config.name]     = \\\r\n    ['@STL_TESTED_HEADERS_DIR@', '@LIBCXX_SOURCE_DIR@/test/support', '@STL_SOURCE_DIR@/tests/std/include']\r\nlit_config.library_dirs[config.name]     = ['@STL_LIBRARY_OUTPUT_DIRECTORY@', '@TOOLSET_LIB@']\r\nlit_config.ruleset_dirs[config.name]     = ['@STL_SOURCE_DIR@/tests/std/rulesets']\r\nlit_config.test_subdirs[config.name]     = ['@CMAKE_CURRENT_SOURCE_DIR@/tests']\r\n\r\nlit_config.cxx_headers = '@STL_TESTED_HEADERS_DIR@'\r\nlit_config.cxx_modules = '@STL_TESTED_MODULES_DIR@'\r\nlit_config.cxx_runtime = '@STL_RUNTIME_OUTPUT_DIRECTORY@'\r\nlit_config.target_arch = '@VCLIBS_TARGET_ARCHITECTURE@'\r\nlit_config.build_only  = '@TESTS_BUILD_ONLY@'.lower() in ['1', 'true', 'on']\r\n\r\n# Add parameters and features to the config\r\nstl.test.config.configure(\r\n    stl.test.params.getDefaultParameters(config, lit_config),\r\n    stl.test.features.getDefaultFeatures(config, lit_config),\r\n    config,\r\n    lit_config\r\n)\r\n"
  },
  {
    "path": "tests/std/rulesets/stl.ruleset",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<!-- Copyright (c) Microsoft Corporation. -->\r\n<!-- SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -->\r\n<RuleSet Name=\"STL Ruleset\" Description=\"C++ Core Guidelines rules for microsoft/STL\" ToolsVersion=\"15.0\">\r\n  <Rules AnalyzerId=\"Microsoft.Analyzers.NativeCodeAnalysis\" RuleNamespace=\"Microsoft.Rules.Native\">\r\n    <!-- The pointer is dangling because it points at a temporary instance that was destroyed. (ES.65) -->\r\n    <Rule Id=\"C26815\" Action=\"Warning\" />\r\n    <!-- The pointer points to memory allocated on the stack (ES.65) -->\r\n    <Rule Id=\"C26816\" Action=\"Warning\" />\r\n    <!-- Switch statement does not cover all cases. Consider adding a 'default' label (es.79). -->\r\n    <Rule Id=\"C26818\" Action=\"Warning\" />\r\n  </Rules>\r\n</RuleSet>\r\n"
  },
  {
    "path": "tests/std/run.pl",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nuse strict;\r\nuse File::Basename;\r\n\r\n# This file is part of a Microsoft-internal legacy test harness, which we hope to replace in the future.\r\n# Within the Microsoft-internal repo, this uses run.pl and run.pm in src\\qa\\VC\\shared\\testenv\\bin .\r\n\r\nmy $path = $ENV{PATH};\r\n$path =~ s/\\//\\\\/g;\r\n\r\n# pick out just *:*\\testenv\\bin from the path\r\n$path =~ m/.*?([^\\;]*\\\\testenv\\\\bin)($|\\\\$|\\\\;|;).*/i;\r\n\r\nmy $testenv = $1;\r\nmy $testdir = dirname($0); # $0 contains the full path including the filename, dirname($0) extracts the directory path.\r\n\r\n# add testenv to perllib so we don't have to search for it in other files.\r\nif ($ENV{PERLLIB})\r\n{\r\n    $ENV{PERLLIB} = $ENV{PERLLIB} . \";\" . $testenv;\r\n}\r\nelse\r\n{\r\n    $ENV{PERLLIB} = $testenv;\r\n}\r\n\r\nif ($ENV{PM_COMPILER} && $ENV{PM_COMPILER} eq \"clang-cl\" && $ENV{CLANG_TARGET} && $ENV{CLANG_TARGET} =~ /^(-m32|-m64)$/)\r\n{\r\n    $ENV{PM_COMPILER} .= \" \" . $ENV{CLANG_TARGET};\r\n}\r\n\r\n# add additional compiler flags if the compiler is cl.exe.\r\nif (not $ENV{PM_COMPILER})\r\n{\r\n    $ENV{PM_CL} .= \" \" . $ENV{PM_CL_MSVC};\r\n}\r\n\r\nmy $RunPL = \"\";\r\nif ($ENV{PM_CL} && $ENV{PM_CL} =~ m/[\\-\\/]BE / )\r\n{\r\n    $RunPL = $testdir . \"\\\\runbe.pl\";\r\n}\r\nelse\r\n{\r\n    $RunPL = $testenv . \"\\\\run.pl\";\r\n}\r\n\r\nprint \"Executing: \\\"$RunPL\\\"\\n\";\r\nexit(system(\"perl -w $RunPL\")>>8);\r\n"
  },
  {
    "path": "tests/std/runbe.pl",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nuse strict;\r\nuse Run;\r\n\r\nif ($ENV{HAS_EDG} && $ENV{HAS_EDG} eq \"yes\")\r\n{\r\n    my $callString = Run::CreateCompilandString();\r\n\r\n    if (Run::ExecuteCL($callString) == 0)\r\n    {\r\n        Run::Pass();\r\n    }\r\n    else\r\n    {\r\n        Run::Fail();\r\n    }\r\n}\r\nelse\r\n{\r\n    Run::Pass();\r\n}\r\n"
  },
  {
    "path": "tests/std/test.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# CUDA is not available in the MSVC-internal test harness:\r\n# tests\\GH_000639_nvcc_include_all\r\n\r\n# Needs special machinery to work in the MSVC-internal test harness, not yet implemented:\r\n# tests\\GH_002094_cpp_core_guidelines\r\n\r\ntests\\Dev08_496675_iostream_int_reading\r\ntests\\Dev08_527068_scl_no_exceptions\r\ntests\\Dev08_563686_ostream\r\ntests\\Dev08_563705_std_malloc_free\r\ntests\\Dev08_576265_list_remove\r\ntests\\Dev08_584299_search_n\r\ntests\\Dev09_012361_vector_swap\r\ntests\\Dev09_052961_has_iterator_debugging_0\r\ntests\\Dev09_056375_locale_cleanup\r\ntests\\Dev09_098637_stl_function_typeids\r\ntests\\Dev09_119637_throwing_string_with_hid0\r\ntests\\Dev09_119644_compiler_option_gz\r\ntests\\Dev09_126254_persistent_aux_allocators\r\ntests\\Dev09_130060_unique_copy\r\ntests\\Dev09_152755_tr1_nested_bind\r\ntests\\Dev09_153419_tr1_allocators\r\ntests\\Dev09_154033_tr1_predicate_search_n\r\ntests\\Dev09_155328_tr1_vector_of_set\r\ntests\\Dev09_158181_tr1_unordered_meow_swap\r\ntests\\Dev09_158457_tr1_mem_fn_calling_conventions\r\ntests\\Dev09_161106_tr1_bind_templated_fxn_call_operator\r\ntests\\Dev09_165853_tr1_tuple_swap\r\ntests\\Dev09_171205_tr1_assign_pair_to_tuple\r\ntests\\Dev09_172497_tr1_mem_fn_const_correctness\r\ntests\\Dev09_172505_tr1_bind_reference_wrapper\r\ntests\\Dev09_172666_tr1_tuple_odr\r\ntests\\Dev09_173612_tr1_regex_leak\r\ntests\\Dev09_174589_tr1_function_storing_pmf_called_with_reference_or_pointer\r\ntests\\Dev09_175314_tr1_reference_wrapper_assignment\r\ntests\\Dev09_175716_tr1_dereferencing_reference_wrapper\r\ntests\\Dev09_176467_tr1_make_tuple_from_string_literal\r\ntests\\Dev09_176498_tr1_binding_functors_with_non_const_fxn_call_ops\r\ntests\\Dev09_181509_tr1_inf_loop_uniform_int_ull\r\ntests\\Dev09_182017_tr1_search_n\r\ntests\\Dev09_186118_stoullx_corner_cases\r\ntests\\Dev09_192736_tr1_prngs_not_copyconstructible\r\ntests\\Dev09_195561_tr1_function_const_op\r\ntests\\Dev09_196243_tr1_enable_shared_from_this_ops\r\ntests\\Dev09_199123_tr1_mem_fun_abstract_classes\r\ntests\\Dev10_391723_bind_result_type\r\ntests\\Dev10_414242_facet_bug_use_facet_ctype_char\r\ntests\\Dev10_441756_function_reference_wrapper\r\ntests\\Dev10_445289_make_shared\r\ntests\\Dev10_470547_facet_bug_stringstream\r\ntests\\Dev10_482830_header_only_string\r\ntests\\Dev10_491486_floating_point_hash\r\ntests\\Dev10_492345_tr1_function_swap\r\ntests\\Dev10_498944_enable_shared_from_this_auto_ptr\r\ntests\\Dev10_500860_overloaded_address_of\r\ntests\\Dev10_544258_heterogeneous_comparisons\r\ntests\\Dev10_555491_complex_linker_errors\r\ntests\\Dev10_561430_list_and_tree_leaks\r\ntests\\Dev10_562056_tree_leak\r\ntests\\Dev10_563443_empty_vector_begin_plus_zero\r\ntests\\Dev10_567556_move_from_empty_list\r\ntests\\Dev10_579381_vector_grow_to\r\ntests\\Dev10_590599_hash_string\r\ntests\\Dev10_609053_ctype_char_table_size\r\ntests\\Dev10_617014_tuple_tie\r\ntests\\Dev10_632876_regex_proxy\r\ntests\\Dev10_635436_shared_ptr_reset\r\ntests\\Dev10_639436_const_map_at\r\ntests\\Dev10_646244_bad_alloc_message\r\ntests\\Dev10_646556_construct_tuple_from_const\r\ntests\\Dev10_654977_655012_shared_ptr_move\r\ntests\\Dev10_661739_tuple_copy_ctors\r\ntests\\Dev10_682964_stable_sort_warnings\r\ntests\\Dev10_689595_back_inserter_vector_bool\r\ntests\\Dev10_709168_marking_iterators_as_checked\r\ntests\\Dev10_722102_shared_ptr_nullptr\r\ntests\\Dev10_729003_bind_reference_wrapper\r\ntests\\Dev10_766948_insert_ambiguity\r\ntests\\Dev10_780098_movable_elements\r\ntests\\Dev10_783436_rvalue_string_plus\r\ntests\\Dev10_809142_copy_n_istream_iterator\r\ntests\\Dev10_814245_regex_character_class_crash\r\ntests\\Dev10_816787_swap_vector_bool_elements\r\ntests\\Dev10_847656_shared_ptr_is_convertible\r\ntests\\Dev10_851347_weak_ptr_virtual_inheritance\r\ntests\\Dev10_860410_bitset_ctors\r\ntests\\Dev10_860421_deque_push_back_pop_front\r\ntests\\Dev10_881629_vector_erase_return_value\r\ntests\\Dev10_904413_moved_from_function_should_be_empty\r\ntests\\Dev10_905461_is_sorted_until\r\ntests\\Dev10_908702_string_memory_leak\r\ntests\\Dev10_909646_stringstream_vd2\r\ntests\\Dev11_0000000_dual_range_algorithms\r\ntests\\Dev11_0000000_function_crashes\r\ntests\\Dev11_0000000_include_each_header_alone\r\ntests\\Dev11_0000000_null_forward_iterators\r\ntests\\Dev11_0000000_quoted\r\ntests\\Dev11_0000000_rotate_test\r\ntests\\Dev11_0000000_tuple_cat\r\ntests\\Dev11_0000000_user_defined_literals\r\ntests\\Dev11_0019127_singular_iterators\r\ntests\\Dev11_0091392_string_erase_resize_perf\r\ntests\\Dev11_0133625_locale0_implib_cpp\r\ntests\\Dev11_0135139_vector_bool_comparisons\r\ntests\\Dev11_0235721_async_and_packaged_task\r\ntests\\Dev11_0253803_debug_pointer\r\ntests\\Dev11_0272959_make_signed\r\ntests\\Dev11_0289403_partition_point_complexity\r\ntests\\Dev11_0299014_exception_ptr_requirements\r\ntests\\Dev11_0302476_pair_move\r\ntests\\Dev11_0314451_make_pair_make_tuple\r\ntests\\Dev11_0316853_find_memchr_optimization\r\ntests\\Dev11_0343056_pair_tuple_ctor_sfinae\r\ntests\\Dev11_0376122_grand_theft_bind\r\ntests\\Dev11_0377755_thread_ctor_move_only_types\r\ntests\\Dev11_0387701_container_equality\r\ntests\\Dev11_0417110_nullptr_t_is_scalar\r\ntests\\Dev11_0435439_call_once_deadlock\r\ntests\\Dev11_0437519_container_behavior\r\ntests\\Dev11_0437519_container_requirements\r\ntests\\Dev11_0447546_facet_allocation\r\ntests\\Dev11_0483851_vector_debug_allocator_use\r\ntests\\Dev11_0485243_condition_variable_crash\r\ntests\\Dev11_0493504_error_category_lifetime\r\ntests\\Dev11_0494593_time_put_wchar_t\r\ntests\\Dev11_0496153_locale_ctor\r\ntests\\Dev11_0532622_minmax_element\r\ntests\\Dev11_0535636_functional_overhaul\r\ntests\\Dev11_0555154_system_clock_to_time_t\r\ntests\\Dev11_0577418_random_seed_0\r\ntests\\Dev11_0579795_inplace_merge_out_of_memory\r\ntests\\Dev11_0607540_pair_tuple_rvalue_references\r\ntests\\Dev11_0617384_empty_std_function\r\ntests\\Dev11_0653897_codecvt_partial\r\ntests\\Dev11_0671816_list_splice\r\ntests\\Dev11_0696045_future_wait_for\r\ntests\\Dev11_0704582_ratio\r\ntests\\Dev11_0732166_unordered_strong_guarantee\r\ntests\\Dev11_0748972_function_crash_out_of_memory\r\ntests\\Dev11_0823534_transparent_lookup\r\ntests\\Dev11_0835323_to_string\r\ntests\\Dev11_0836436_get_time\r\ntests\\Dev11_0845312_comprehensive_floating_point\r\ntests\\Dev11_0863628_atomic_compare_exchange\r\ntests\\Dev11_0920385_list_sort_allocator\r\ntests\\Dev11_1003120_search_test\r\ntests\\Dev11_1066589_shared_ptr_atomic_deadlock\r\ntests\\Dev11_1066931_filesystem_rename_noop\r\ntests\\Dev11_1074023_constexpr\r\ntests\\Dev11_1086953_call_once_overhaul\r\ntests\\Dev11_1114006_condition_variable_pred\r\ntests\\Dev11_1127004_future_has_exceptions_0\r\ntests\\Dev11_1131212_uncaught_exceptions\r\ntests\\Dev11_1137366_nested_exception\r\ntests\\Dev11_1140665_unique_ptr_array_conversions\r\ntests\\Dev11_1150223_shared_mutex\r\ntests\\Dev11_1158803_regex_thread_safety\r\ntests\\Dev11_1180290_filesystem_error_code\r\ntests\\GH_000073_regex_multiline_escape_hatch\r\ntests\\GH_000140_adl_proof_comparison\r\ntests\\GH_000140_adl_proof_construction\r\ntests\\GH_000140_adl_proof_views\r\ntests\\GH_000177_forbidden_aliasing\r\ntests\\GH_000178_uniform_int\r\ntests\\GH_000342_filebuf_close\r\ntests\\GH_000431_copy_move_family\r\ntests\\GH_000431_equal_family\r\ntests\\GH_000431_equal_memcmp_is_safe\r\ntests\\GH_000431_iter_copy_move_cat\r\ntests\\GH_000431_lex_compare_family\r\ntests\\GH_000431_lex_compare_memcmp_classify\r\ntests\\GH_000442_random_subtract_with_carry_engine_io\r\ntests\\GH_000457_system_error_message\r\ntests\\GH_000519_cmath_overloads\r\ntests\\GH_000527_remove_allocator_void\r\ntests\\GH_000545_include_compare\r\ntests\\GH_000625_vector_bool_optimization\r\ntests\\GH_000685_condition_variable_any\r\ntests\\GH_000690_overaligned_function\r\ntests\\GH_000732_hash_reserve\r\ntests\\GH_000856_nth_element_linear\r\ntests\\GH_000890_pow_template\r\ntests\\GH_000935_complex_numerical_accuracy\r\ntests\\GH_000940_missing_valarray_copy\r\ntests\\GH_000952_bind_constraints\r\ntests\\GH_000990_any_link_without_exceptions\r\ntests\\GH_000995_regex_custom_char_types\r\ntests\\GH_001001_random_rejection_rounding\r\ntests\\GH_001010_filesystem_error_encoding\r\ntests\\GH_001017_discrete_distribution_out_of_range\r\ntests\\GH_001059_hyperbolic_truncation\r\ntests\\GH_001086_partial_sort_copy\r\ntests\\GH_001103_countl_zero_correctness\r\ntests\\GH_001105_custom_streambuf_throws\r\ntests\\GH_001123_random_cast_out_of_range\r\ntests\\GH_001277_num_get_bad_grouping\r\ntests\\GH_001394_msvc_no_unique_address_23\r\ntests\\GH_001411_core_headers\r\ntests\\GH_001530_binomial_accuracy\r\ntests\\GH_001541_case_sensitive_boolalpha\r\ntests\\GH_001596_adl_proof_algorithms\r\ntests\\GH_001600_random_inheritance\r\ntests\\GH_001638_dllexport_derived_classes\r\ntests\\GH_001850_clog_tied_to_cout\r\ntests\\GH_001858_iostream_exception\r\ntests\\GH_001912_random_distribution_operator_const\r\ntests\\GH_001914_cached_position\r\ntests\\GH_001923_filesystem_long_path_support\r\ntests\\GH_002030_asan_annotate_string\r\ntests\\GH_002030_asan_annotate_vector\r\ntests\\GH_002039_byte_is_not_trivially_swappable\r\ntests\\GH_002045_put_time_changes_errno\r\ntests\\GH_002058_debug_iterator_race\r\ntests\\GH_002120_streambuf_seekpos_and_seekoff\r\ntests\\GH_002168_regex_overflow\r\ntests\\GH_002206_unreserved_names\r\ntests\\GH_002299_implicit_sfinae_constraints\r\ntests\\GH_002307_usual_scope_guard\r\ntests\\GH_002334_branchless_clamp\r\ntests\\GH_002431_byte_range_find_with_unreachable_sentinel\r\ntests\\GH_002488_promise_not_default_constructible_types\r\ntests\\GH_002558_format_presetPadding\r\ntests\\GH_002581_common_reference_workaround\r\ntests\\GH_002620_construct_at_workaround\r\ntests\\GH_002655_alternate_name_broke_linker\r\ntests\\GH_002711_Zc_alignedNew-\r\ntests\\GH_002760_syncstream_memory_leak\r\ntests\\GH_002769_handle_deque_block_pointers\r\ntests\\GH_002789_Hash_vec_Tidy\r\ntests\\GH_002885_stable_sort_difference_type\r\ntests\\GH_002989_nothrow_unwrappable\r\ntests\\GH_002992_unwrappable_iter_sent_pairs\r\ntests\\GH_003003_format_decimal_point\r\ntests\\GH_003022_substr_allocator\r\ntests\\GH_003105_piecewise_densities\r\ntests\\GH_003119_error_category_ctor\r\ntests\\GH_003246_cmath_narrowing\r\ntests\\GH_003570_allocate_at_least\r\ntests\\GH_003617_vectorized_meow_element\r\ntests\\GH_003663_cast_contiguous_iterator_difference_type\r\ntests\\GH_003676_format_large_hh_mm_ss_values\r\ntests\\GH_003735_char_traits_signatures\r\ntests\\GH_003840_tellg_when_reading_lf_file_in_text_mode\r\ntests\\GH_003867_output_nan\r\ntests\\GH_004023_mdspan_fwd_prod_overflow\r\ntests\\GH_004040_container_nonmember_functions\r\ntests\\GH_004108_some_ranges_algos_construct_wrong_type\r\ntests\\GH_004109_iter_value_t_direct_initialization\r\ntests\\GH_004129_conversion_in_new_numeric_algorithms\r\ntests\\GH_004201_chrono_formatter\r\ntests\\GH_004275_seeking_fancy_iterators\r\ntests\\GH_004388_unordered_meow_operator_equal\r\ntests\\GH_004477_mdspan_warning_5246\r\ntests\\GH_004597_self_swap\r\ntests\\GH_004609_heterogeneous_cmp_overloads\r\ntests\\GH_004618_mixed_operator_usage_keeps_statistical_properties\r\ntests\\GH_004618_normal_distribution_avoids_resets\r\ntests\\GH_004657_expected_constraints_permissive\r\ntests\\GH_004686_vectorization_on_trivial_assignability\r\ntests\\GH_004845_logical_operator_traits_with_non_bool_constant\r\ntests\\GH_004929_internal_tag_constructors\r\ntests\\GH_004930_char_traits_user_specialization\r\ntests\\GH_005090_stl_hardening\r\ntests\\GH_005090_stl_hardening_cxx20_iterators\r\ntests\\GH_005204_regex_collating_ranges\r\ntests\\GH_005236_collate_facet\r\ntests\\GH_005244_regex_escape_sequences\r\ntests\\GH_005276_system_error_heap_use_after_free\r\ntests\\GH_005315_destructor_tombstones\r\ntests\\GH_005402_string_with_volatile_range\r\ntests\\GH_005421_vector_algorithms_integer_class_type_iterator\r\ntests\\GH_005472_do_not_overlap\r\ntests\\GH_005504_avoid_function_call_wrapping\r\ntests\\GH_005546_containers_size_type_cast\r\ntests\\GH_005553_regex_character_translation\r\ntests\\GH_005768_pow_accuracy\r\ntests\\GH_005780_non_ascii_locales\r\ntests\\GH_005800_stable_sort_large_alignment\r\ntests\\GH_005816_numeric_limits_traps\r\ntests\\GH_005968_headers_provide_begin_end\r\ntests\\LWG2381_num_get_floating_point\r\ntests\\LWG2510_tag_classes\r\ntests\\LWG2597_complex_branch_cut\r\ntests\\LWG3018_shared_ptr_function\r\ntests\\LWG3121_constrained_tuple_forwarding_ctor\r\ntests\\LWG3146_excessive_unwrapping_ref_cref\r\ntests\\LWG3234_math_special_overloads\r\ntests\\LWG3422_seed_seq_ctors\r\ntests\\LWG3480_directory_iterator_range\r\ntests\\LWG3528_make_from_tuple_impl\r\ntests\\LWG3545_pointer_traits_sfinae\r\ntests\\LWG3561_discard_block_engine_counter\r\ntests\\LWG3610_iota_view_size_and_integer_class\r\ntests\\LWG4015_optional_adl_proof_operations\r\ntests\\LWG4084_iostream_uppercase_inf_nan\r\ntests\\LWG4105_ranges_ends_with_and_integer_class\r\ntests\\LWG4172_unique_lock_self_move_assignment\r\ntests\\P0009R18_mdspan_default_accessor\r\ntests\\P0009R18_mdspan_extents\r\ntests\\P0009R18_mdspan_extents_death\r\ntests\\P0009R18_mdspan_layout_left\r\ntests\\P0009R18_mdspan_layout_left_death\r\ntests\\P0009R18_mdspan_layout_right\r\ntests\\P0009R18_mdspan_layout_right_death\r\ntests\\P0009R18_mdspan_layout_stride\r\ntests\\P0009R18_mdspan_layout_stride_death\r\ntests\\P0009R18_mdspan_mdspan\r\ntests\\P0009R18_mdspan_mdspan_death\r\ntests\\P0009R18_mdspan_msabi\r\ntests\\P0019R8_atomic_ref\r\ntests\\P0024R2_parallel_algorithms_adjacent_difference\r\ntests\\P0024R2_parallel_algorithms_adjacent_find\r\ntests\\P0024R2_parallel_algorithms_all_of\r\ntests\\P0024R2_parallel_algorithms_count\r\ntests\\P0024R2_parallel_algorithms_equal\r\ntests\\P0024R2_parallel_algorithms_exclusive_scan\r\ntests\\P0024R2_parallel_algorithms_find\r\ntests\\P0024R2_parallel_algorithms_find_end\r\ntests\\P0024R2_parallel_algorithms_find_first_of\r\ntests\\P0024R2_parallel_algorithms_for_each\r\ntests\\P0024R2_parallel_algorithms_inclusive_scan\r\ntests\\P0024R2_parallel_algorithms_is_heap\r\ntests\\P0024R2_parallel_algorithms_is_partitioned\r\ntests\\P0024R2_parallel_algorithms_is_sorted\r\ntests\\P0024R2_parallel_algorithms_mismatch\r\ntests\\P0024R2_parallel_algorithms_partition\r\ntests\\P0024R2_parallel_algorithms_reduce\r\ntests\\P0024R2_parallel_algorithms_remove\r\ntests\\P0024R2_parallel_algorithms_replace\r\ntests\\P0024R2_parallel_algorithms_search\r\ntests\\P0024R2_parallel_algorithms_search_n\r\ntests\\P0024R2_parallel_algorithms_set_difference\r\ntests\\P0024R2_parallel_algorithms_set_intersection\r\ntests\\P0024R2_parallel_algorithms_sort\r\ntests\\P0024R2_parallel_algorithms_stable_sort\r\ntests\\P0024R2_parallel_algorithms_transform\r\ntests\\P0024R2_parallel_algorithms_transform_exclusive_scan\r\ntests\\P0024R2_parallel_algorithms_transform_inclusive_scan\r\ntests\\P0024R2_parallel_algorithms_transform_reduce\r\ntests\\P0035R4_over_aligned_allocation\r\ntests\\P0040R3_extending_memory_management_tools\r\ntests\\P0040R3_parallel_memory_algorithms\r\ntests\\P0053R7_cpp_synchronized_buffered_ostream\r\ntests\\P0067R5_charconv\r\ntests\\P0083R3_splicing_maps_and_sets\r\ntests\\P0088R3_variant\r\ntests\\P0088R3_variant_msvc\r\ntests\\P0092R1_polishing_chrono\r\ntests\\P0122R7_span\r\ntests\\P0122R7_span_death\r\ntests\\P0137R1_launder\r\ntests\\P0156R2_scoped_lock\r\ntests\\P0202R3_constexpr_algorithm_and_exchange\r\ntests\\P0218R1_filesystem\r\ntests\\P0220R1_any\r\ntests\\P0220R1_optional\r\ntests\\P0220R1_optional_death\r\ntests\\P0220R1_polymorphic_memory_resources\r\ntests\\P0220R1_sample\r\ntests\\P0220R1_searchers\r\ntests\\P0220R1_string_view\r\ntests\\P0226R1_math_special_functions\r\ntests\\P0288R9_move_only_function\r\ntests\\P0295R0_gcd_lcm\r\ntests\\P0323R12_expected\r\ntests\\P0325R4_to_array\r\ntests\\P0339R6_polymorphic_allocator\r\ntests\\P0355R7_calendars_and_time_zones_clocks\r\ntests\\P0355R7_calendars_and_time_zones_dates\r\ntests\\P0355R7_calendars_and_time_zones_dates_literals\r\ntests\\P0355R7_calendars_and_time_zones_formatting\r\ntests\\P0355R7_calendars_and_time_zones_hms\r\ntests\\P0355R7_calendars_and_time_zones_io\r\ntests\\P0355R7_calendars_and_time_zones_time_point_and_durations\r\ntests\\P0355R7_calendars_and_time_zones_time_zones\r\ntests\\P0355R7_calendars_and_time_zones_zoned_time\r\ntests\\P0356R5_bind_front\r\ntests\\P0357R3_supporting_incomplete_types_in_reference_wrapper\r\ntests\\P0401R6_allocate_at_least\r\ntests\\P0408R7_efficient_access_to_stringbuf_buffer\r\ntests\\P0414R2_shared_ptr_for_arrays\r\ntests\\P0415R1_constexpr_complex\r\ntests\\P0426R1_constexpr_char_traits\r\ntests\\P0429R9_flat_map\r\ntests\\P0429R9_flat_map_ms_specific\r\ntests\\P0433R2_deduction_guides\r\ntests\\P0448R4_iosfwd\r\ntests\\P0448R4_spanstream\r\ntests\\P0466R5_layout_compatibility_and_pointer_interconvertibility_traits\r\ntests\\P0475R1_P0591R4_uses_allocator_construction\r\ntests\\P0476R2_bit_cast\r\ntests\\P0487R1_fixing_operator_shl_basic_istream_char_pointer\r\ntests\\P0513R0_poisoning_the_hash\r\ntests\\P0528R3_cmpxchg_pad\r\ntests\\P0553R4_bit_rotating_and_counting_functions\r\ntests\\P0556R3_bit_integral_power_of_two_operations\r\ntests\\P0586R2_integer_comparison\r\ntests\\P0595R2_is_constant_evaluated\r\ntests\\P0607R0_inline_variables\r\ntests\\P0608R3_improved_variant_converting_constructor\r\ntests\\P0616R0_using_move_in_numeric\r\ntests\\P0627R6_unreachable\r\ntests\\P0631R8_numbers_math_constants\r\ntests\\P0645R10_text_formatting_args\r\ntests\\P0645R10_text_formatting_custom_formatting\r\ntests\\P0645R10_text_formatting_death\r\ntests\\P0645R10_text_formatting_formatting\r\ntests\\P0645R10_text_formatting_grapheme_clusterization\r\ntests\\P0645R10_text_formatting_legacy_text_encoding\r\ntests\\P0645R10_text_formatting_parse_contexts\r\ntests\\P0645R10_text_formatting_parsing\r\ntests\\P0645R10_text_formatting_utf8\r\ntests\\P0660R10_jthread_and_cv_any\r\ntests\\P0660R10_stop_token\r\ntests\\P0660R10_stop_token_death\r\ntests\\P0674R1_make_shared_for_arrays\r\ntests\\P0718R2_atomic_smart_ptrs\r\ntests\\P0753R2_manipulators_for_cpp_synchronized_buffered_ostream\r\ntests\\P0758R1_is_nothrow_convertible\r\ntests\\P0768R1_spaceship_cpos\r\ntests\\P0768R1_spaceship_operator\r\ntests\\P0769R2_shift_left_shift_right\r\ntests\\P0784R7_library_machinery\r\ntests\\P0784R7_library_support_for_more_constexpr_containers\r\ntests\\P0798R8_monadic_operations_for_std_optional\r\ntests\\P0811R3_midpoint_lerp\r\ntests\\P0881R7_stacktrace\r\ntests\\P0896R4_and_P1614R2_comparisons\r\ntests\\P0896R4_common_iterator\r\ntests\\P0896R4_common_iterator_death\r\ntests\\P0896R4_counted_iterator\r\ntests\\P0896R4_counted_iterator_death\r\ntests\\P0896R4_istream_view\r\ntests\\P0896R4_istream_view_death\r\ntests\\P0896R4_ranges_alg_adjacent_find\r\ntests\\P0896R4_ranges_alg_all_of\r\ntests\\P0896R4_ranges_alg_any_of\r\ntests\\P0896R4_ranges_alg_binary_search\r\ntests\\P0896R4_ranges_alg_copy\r\ntests\\P0896R4_ranges_alg_copy_backward\r\ntests\\P0896R4_ranges_alg_copy_if\r\ntests\\P0896R4_ranges_alg_copy_n\r\ntests\\P0896R4_ranges_alg_count\r\ntests\\P0896R4_ranges_alg_count_if\r\ntests\\P0896R4_ranges_alg_equal\r\ntests\\P0896R4_ranges_alg_fill\r\ntests\\P0896R4_ranges_alg_fill_n\r\ntests\\P0896R4_ranges_alg_find\r\ntests\\P0896R4_ranges_alg_find_end\r\ntests\\P0896R4_ranges_alg_find_first_of\r\ntests\\P0896R4_ranges_alg_find_if\r\ntests\\P0896R4_ranges_alg_find_if_not\r\ntests\\P0896R4_ranges_alg_for_each\r\ntests\\P0896R4_ranges_alg_for_each_n\r\ntests\\P0896R4_ranges_alg_generate\r\ntests\\P0896R4_ranges_alg_generate_n\r\ntests\\P0896R4_ranges_alg_heap\r\ntests\\P0896R4_ranges_alg_includes\r\ntests\\P0896R4_ranges_alg_inplace_merge\r\ntests\\P0896R4_ranges_alg_is_permutation\r\ntests\\P0896R4_ranges_alg_is_sorted\r\ntests\\P0896R4_ranges_alg_lexicographical_compare\r\ntests\\P0896R4_ranges_alg_merge\r\ntests\\P0896R4_ranges_alg_minmax\r\ntests\\P0896R4_ranges_alg_mismatch\r\ntests\\P0896R4_ranges_alg_move\r\ntests\\P0896R4_ranges_alg_move_backward\r\ntests\\P0896R4_ranges_alg_none_of\r\ntests\\P0896R4_ranges_alg_nth_element\r\ntests\\P0896R4_ranges_alg_partial_sort\r\ntests\\P0896R4_ranges_alg_partial_sort_copy\r\ntests\\P0896R4_ranges_alg_partition\r\ntests\\P0896R4_ranges_alg_partition_copy\r\ntests\\P0896R4_ranges_alg_partition_point\r\ntests\\P0896R4_ranges_alg_permutations\r\ntests\\P0896R4_ranges_alg_remove\r\ntests\\P0896R4_ranges_alg_remove_copy\r\ntests\\P0896R4_ranges_alg_remove_copy_if\r\ntests\\P0896R4_ranges_alg_remove_if\r\ntests\\P0896R4_ranges_alg_replace\r\ntests\\P0896R4_ranges_alg_replace_copy\r\ntests\\P0896R4_ranges_alg_replace_copy_if\r\ntests\\P0896R4_ranges_alg_replace_if\r\ntests\\P0896R4_ranges_alg_reverse\r\ntests\\P0896R4_ranges_alg_reverse_copy\r\ntests\\P0896R4_ranges_alg_rotate\r\ntests\\P0896R4_ranges_alg_rotate_copy\r\ntests\\P0896R4_ranges_alg_sample\r\ntests\\P0896R4_ranges_alg_search\r\ntests\\P0896R4_ranges_alg_search_n\r\ntests\\P0896R4_ranges_alg_set_difference\r\ntests\\P0896R4_ranges_alg_set_intersection\r\ntests\\P0896R4_ranges_alg_set_symmetric_difference\r\ntests\\P0896R4_ranges_alg_set_union\r\ntests\\P0896R4_ranges_alg_shuffle\r\ntests\\P0896R4_ranges_alg_sort\r\ntests\\P0896R4_ranges_alg_stable_partition\r\ntests\\P0896R4_ranges_alg_stable_sort\r\ntests\\P0896R4_ranges_alg_swap_ranges\r\ntests\\P0896R4_ranges_alg_transform_binary\r\ntests\\P0896R4_ranges_alg_transform_unary\r\ntests\\P0896R4_ranges_alg_uninitialized_copy\r\ntests\\P0896R4_ranges_alg_uninitialized_copy_n\r\ntests\\P0896R4_ranges_alg_uninitialized_default_construct\r\ntests\\P0896R4_ranges_alg_uninitialized_default_construct_n\r\ntests\\P0896R4_ranges_alg_uninitialized_fill\r\ntests\\P0896R4_ranges_alg_uninitialized_fill_n\r\ntests\\P0896R4_ranges_alg_uninitialized_move\r\ntests\\P0896R4_ranges_alg_uninitialized_move_n\r\ntests\\P0896R4_ranges_alg_uninitialized_value_construct\r\ntests\\P0896R4_ranges_alg_uninitialized_value_construct_n\r\ntests\\P0896R4_ranges_alg_unique\r\ntests\\P0896R4_ranges_alg_unique_copy\r\ntests\\P0896R4_ranges_algorithm_machinery\r\ntests\\P0896R4_ranges_iterator_machinery\r\ntests\\P0896R4_ranges_range_machinery\r\ntests\\P0896R4_ranges_ref_view\r\ntests\\P0896R4_ranges_subrange\r\ntests\\P0896R4_ranges_test_machinery\r\ntests\\P0896R4_ranges_to_address\r\ntests\\P0896R4_stream_iterators\r\ntests\\P0896R4_views_all\r\ntests\\P0896R4_views_common\r\ntests\\P0896R4_views_counted\r\ntests\\P0896R4_views_counted_death\r\ntests\\P0896R4_views_drop\r\ntests\\P0896R4_views_drop_death\r\ntests\\P0896R4_views_drop_while\r\ntests\\P0896R4_views_drop_while_death\r\ntests\\P0896R4_views_elements\r\ntests\\P0896R4_views_empty\r\ntests\\P0896R4_views_filter\r\ntests\\P0896R4_views_filter_death\r\ntests\\P0896R4_views_filter_iterator\r\ntests\\P0896R4_views_iota\r\ntests\\P0896R4_views_iota_death\r\ntests\\P0896R4_views_join\r\ntests\\P0896R4_views_lazy_split\r\ntests\\P0896R4_views_reverse\r\ntests\\P0896R4_views_single\r\ntests\\P0896R4_views_split\r\ntests\\P0896R4_views_take\r\ntests\\P0896R4_views_take_death\r\ntests\\P0896R4_views_take_while\r\ntests\\P0896R4_views_take_while_death\r\ntests\\P0896R4_views_transform\r\ntests\\P0896R4_views_transform_death\r\ntests\\P0898R3_concepts\r\ntests\\P0898R3_identity\r\ntests\\P0912R5_coroutine\r\ntests\\P0919R3_heterogeneous_unordered_lookup\r\ntests\\P0943R6_stdatomic_h\r\ntests\\P0952R2_new_generate_canonical\r\ntests\\P0966R1_string_reserve_should_not_shrink\r\ntests\\P0980R1_constexpr_strings\r\ntests\\P1004R2_constexpr_vector\r\ntests\\P1004R2_constexpr_vector_bool\r\ntests\\P1007R3_assume_aligned\r\ntests\\P1020R1_smart_pointer_for_overwrite\r\ntests\\P1023R0_constexpr_for_array_comparisons\r\ntests\\P1032R1_miscellaneous_constexpr\r\ntests\\P1132R7_out_ptr\r\ntests\\P1135R6_atomic_flag_test\r\ntests\\P1135R6_atomic_wait\r\ntests\\P1135R6_barrier\r\ntests\\P1135R6_latch\r\ntests\\P1135R6_semaphore\r\ntests\\P1147R1_printing_volatile_pointers\r\ntests\\P1165R1_consistently_propagating_stateful_allocators\r\ntests\\P1169R4_static_call_operator\r\ntests\\P1206R7_deque_append_range\r\ntests\\P1206R7_deque_assign_range\r\ntests\\P1206R7_deque_from_range\r\ntests\\P1206R7_deque_insert_range\r\ntests\\P1206R7_deque_prepend_range\r\ntests\\P1206R7_forward_list_assign_range\r\ntests\\P1206R7_forward_list_from_range\r\ntests\\P1206R7_forward_list_insert_range_after\r\ntests\\P1206R7_forward_list_prepend_range\r\ntests\\P1206R7_from_range\r\ntests\\P1206R7_list_append_range\r\ntests\\P1206R7_list_assign_range\r\ntests\\P1206R7_list_from_range\r\ntests\\P1206R7_list_insert_range\r\ntests\\P1206R7_list_prepend_range\r\ntests\\P1206R7_map_from_range\r\ntests\\P1206R7_map_insert_range\r\ntests\\P1206R7_multimap_from_range\r\ntests\\P1206R7_multimap_insert_range\r\ntests\\P1206R7_multiset_from_range\r\ntests\\P1206R7_multiset_insert_range\r\ntests\\P1206R7_priority_queue_from_range\r\ntests\\P1206R7_priority_queue_push_range\r\ntests\\P1206R7_queue_from_range\r\ntests\\P1206R7_queue_push_range\r\ntests\\P1206R7_ranges_to_mappish\r\ntests\\P1206R7_ranges_to_misc\r\ntests\\P1206R7_ranges_to_sequence\r\ntests\\P1206R7_ranges_to_settish\r\ntests\\P1206R7_set_from_range\r\ntests\\P1206R7_set_insert_range\r\ntests\\P1206R7_stack_from_range\r\ntests\\P1206R7_stack_push_range\r\ntests\\P1206R7_string_append_range\r\ntests\\P1206R7_string_assign_range\r\ntests\\P1206R7_string_from_range\r\ntests\\P1206R7_string_insert_range\r\ntests\\P1206R7_string_replace_with_range\r\ntests\\P1206R7_unordered_map_from_range\r\ntests\\P1206R7_unordered_map_insert_range\r\ntests\\P1206R7_unordered_multimap_from_range\r\ntests\\P1206R7_unordered_multimap_insert_range\r\ntests\\P1206R7_unordered_multiset_from_range\r\ntests\\P1206R7_unordered_multiset_insert_range\r\ntests\\P1206R7_unordered_set_from_range\r\ntests\\P1206R7_unordered_set_insert_range\r\ntests\\P1206R7_vector_append_range\r\ntests\\P1206R7_vector_assign_range\r\ntests\\P1206R7_vector_from_range\r\ntests\\P1206R7_vector_insert_range\r\ntests\\P1208R6_source_location\r\ntests\\P1209R0_erase_if_erase\r\ntests\\P1222R4_flat_set\r\ntests\\P1223R5_ranges_alg_find_last\r\ntests\\P1223R5_ranges_alg_find_last_if\r\ntests\\P1223R5_ranges_alg_find_last_if_not\r\ntests\\P1272R4_byteswap\r\ntests\\P1423R3_char8_t_remediation\r\ntests\\P1425R4_queue_stack_constructors\r\ntests\\P1502R1_standard_library_header_units\r\ntests\\P1518R2_stop_overconstraining_allocators\r\ntests\\P1522R1_difference_type\r\ntests\\P1614R2_spaceship\r\ntests\\P1645R1_constexpr_numeric\r\ntests\\P1659R3_ranges_alg_ends_with\r\ntests\\P1659R3_ranges_alg_starts_with\r\ntests\\P1682R3_to_underlying\r\ntests\\P1899R3_views_stride\r\ntests\\P1899R3_views_stride_death\r\ntests\\P1951R1_default_arguments_pair_forward_ctor\r\ntests\\P2093R14_formatted_output\r\ntests\\P2136R3_invoke_r\r\ntests\\P2162R2_std_visit_for_derived_classes_from_variant\r\ntests\\P2164R9_views_enumerate\r\ntests\\P2165R4_tuple_like_common_reference\r\ntests\\P2165R4_tuple_like_common_type\r\ntests\\P2165R4_tuple_like_operations\r\ntests\\P2165R4_tuple_like_pair\r\ntests\\P2165R4_tuple_like_relational_operators\r\ntests\\P2165R4_tuple_like_tuple_members\r\ntests\\P2231R1_complete_constexpr_optional_variant\r\ntests\\P2255R2_invocation\r\ntests\\P2255R2_reference_constructs_from_temporary\r\ntests\\P2255R2_reference_converts_from_temporary\r\ntests\\P2255R2_tuple_pair_construction\r\ntests\\P2273R3_constexpr_unique_ptr\r\ntests\\P2278R4_basic_const_iterator\r\ntests\\P2278R4_const_span\r\ntests\\P2278R4_ranges_const_iterator_machinery\r\ntests\\P2278R4_ranges_const_range_machinery\r\ntests\\P2278R4_views_as_const\r\ntests\\P2286R8_text_formatting_container_adaptors\r\ntests\\P2286R8_text_formatting_debug_enabled_specializations\r\ntests\\P2286R8_text_formatting_escaping\r\ntests\\P2286R8_text_formatting_escaping_legacy_text_encoding\r\ntests\\P2286R8_text_formatting_escaping_utf8\r\ntests\\P2286R8_text_formatting_formattable\r\ntests\\P2286R8_text_formatting_header_queue\r\ntests\\P2286R8_text_formatting_header_stack\r\ntests\\P2286R8_text_formatting_header_vector\r\ntests\\P2286R8_text_formatting_range_formatter\r\ntests\\P2286R8_text_formatting_range_map\r\ntests\\P2286R8_text_formatting_range_sequence\r\ntests\\P2286R8_text_formatting_range_set\r\ntests\\P2286R8_text_formatting_range_string\r\ntests\\P2286R8_text_formatting_range_string_death\r\ntests\\P2286R8_text_formatting_tuple\r\ntests\\P2286R8_text_formatting_tuple_disambiguation\r\ntests\\P2286R8_text_formatting_vector_bool_reference\r\ntests\\P2302R4_ranges_alg_contains\r\ntests\\P2302R4_ranges_alg_contains_subrange\r\ntests\\P2321R2_proxy_reference\r\ntests\\P2321R2_views_adjacent\r\ntests\\P2321R2_views_adjacent_transform\r\ntests\\P2321R2_views_zip\r\ntests\\P2321R2_views_zip_transform\r\ntests\\P2322R6_ranges_alg_fold\r\ntests\\P2374R4_checked_arithmetic_operations\r\ntests\\P2374R4_views_cartesian_product\r\ntests\\P2374R4_views_cartesian_product_death\r\ntests\\P2374R4_views_cartesian_product_recommended_practices\r\ntests\\P2387R3_bind_back\r\ntests\\P2387R3_pipe_support_for_user_defined_range_adaptors\r\ntests\\P2401R0_conditional_noexcept_for_exchange\r\ntests\\P2404R3_move_only_types_for_comparison_concepts\r\ntests\\P2408R5_ranges_iterators_to_classic_algorithms\r\ntests\\P2415R2_owning_view\r\ntests\\P2417R2_constexpr_bitset\r\ntests\\P2438R2_substr_rvalue\r\ntests\\P2440R1_ranges_alg_shift_left\r\ntests\\P2440R1_ranges_alg_shift_right\r\ntests\\P2440R1_ranges_numeric_iota\r\ntests\\P2441R2_views_join_with\r\ntests\\P2442R1_signed128_div_ceil\r\ntests\\P2442R1_views_chunk\r\ntests\\P2442R1_views_chunk_death\r\ntests\\P2442R1_views_slide\r\ntests\\P2442R1_views_slide_death\r\ntests\\P2443R1_views_chunk_by\r\ntests\\P2443R1_views_chunk_by_death\r\ntests\\P2445R1_forward_like\r\ntests\\P2446R2_views_as_rvalue\r\ntests\\P2465R3_standard_library_modules\r\ntests\\P2467R1_exclusive_mode_fstreams\r\ntests\\P2474R2_views_repeat\r\ntests\\P2474R2_views_repeat_death\r\ntests\\P2494R2_move_only_range_adaptors\r\ntests\\P2502R2_generator\r\ntests\\P2502R2_generator_death\r\ntests\\P2502R2_generator_iterator\r\ntests\\P2502R2_generator_promise\r\ntests\\P2505R5_monadic_functions_for_std_expected\r\ntests\\P2510R3_text_formatting_pointers\r\ntests\\P2517R1_apply_conditional_noexcept\r\ntests\\P2538R1_adl_proof_std_projected\r\ntests\\P2609R3_relaxing_ranges_just_a_smidge\r\ntests\\P2674R1_is_implicit_lifetime\r\ntests\\P2693R1_ostream_and_thread_id\r\ntests\\P2693R1_text_formatting_header_stacktrace\r\ntests\\P2693R1_text_formatting_header_thread\r\ntests\\P2693R1_text_formatting_stacktrace\r\ntests\\P2693R1_text_formatting_thread_id\r\ntests\\P3016R6_inconsistent_begin_end\r\ntests\\P3107R5_enabled_specializations\r\ntests\\P3349R1_contiguous_iterators_to_pointers\r\ntests\\P3503R3_packaged_task_promise_with_allocator\r\ntests\\VSO_0000000_allocator_propagation\r\ntests\\VSO_0000000_any_calling_conventions\r\ntests\\VSO_0000000_c_math_functions\r\ntests\\VSO_0000000_condition_variable_any_exceptions\r\ntests\\VSO_0000000_container_allocator_constructors\r\ntests\\VSO_0000000_exception_ptr_rethrow_seh\r\ntests\\VSO_0000000_fancy_pointers\r\ntests\\VSO_0000000_has_static_rtti\r\ntests\\VSO_0000000_initialize_everything\r\ntests\\VSO_0000000_instantiate_algorithms_16_difference_type_1\r\ntests\\VSO_0000000_instantiate_algorithms_16_difference_type_2\r\ntests\\VSO_0000000_instantiate_algorithms_32_difference_type_1\r\ntests\\VSO_0000000_instantiate_algorithms_32_difference_type_2\r\ntests\\VSO_0000000_instantiate_algorithms_64_difference_type_1\r\ntests\\VSO_0000000_instantiate_algorithms_64_difference_type_2\r\ntests\\VSO_0000000_instantiate_algorithms_int_1\r\ntests\\VSO_0000000_instantiate_algorithms_int_2\r\ntests\\VSO_0000000_instantiate_algorithms_nontrivial_1\r\ntests\\VSO_0000000_instantiate_algorithms_nontrivial_2\r\ntests\\VSO_0000000_instantiate_containers\r\ntests\\VSO_0000000_instantiate_iterators_misc\r\ntests\\VSO_0000000_instantiate_type_traits\r\ntests\\VSO_0000000_list_iterator_debugging\r\ntests\\VSO_0000000_list_unique_self_reference\r\ntests\\VSO_0000000_matching_npos_address\r\ntests\\VSO_0000000_more_pair_tuple_sfinae\r\ntests\\VSO_0000000_nullptr_stream_out\r\ntests\\VSO_0000000_path_stream_parameter\r\ntests\\VSO_0000000_regex_interface\r\ntests\\VSO_0000000_regex_use\r\ntests\\VSO_0000000_string_view_idl\r\ntests\\VSO_0000000_type_traits\r\ntests\\VSO_0000000_vector_algorithms\r\ntests\\VSO_0000000_vector_algorithms_floats\r\ntests\\VSO_0000000_vector_algorithms_mismatch_and_lex_compare\r\ntests\\VSO_0000000_vector_algorithms_search_n\r\ntests\\VSO_0000000_wcfb01_idempotent_container_destructors\r\ntests\\VSO_0000000_wchar_t_filebuf_xsmeown\r\ntests\\VSO_0095468_clr_exception_ptr_bad_alloc\r\ntests\\VSO_0095837_current_exception_dtor\r\ntests\\VSO_0099869_pow_float_overflow\r\ntests\\VSO_0102478_moving_allocators\r\ntests\\VSO_0104705_throwing_copy_in_current_exception\r\ntests\\VSO_0104705_throwing_copy_in_current_exception_seh\r\ntests\\VSO_0105317_expression_sfinae\r\ntests\\VSO_0118461_min_max_noexcept\r\ntests\\VSO_0121275_filesystem_canonical_should_handle_many_double_dots\r\ntests\\VSO_0121440_is_iterator_iterator_traits\r\ntests\\VSO_0131167_associative_emplacement_allocations\r\ntests\\VSO_0135428_custom_char_traits_string\r\ntests\\VSO_0144114_sleep_until\r\ntests\\VSO_0144294_unordered_map_max_bucket_count\r\ntests\\VSO_0149983_system_error_broken_pipe\r\ntests\\VSO_0157762_feature_test_macros\r\ntests\\VSO_0174871_string_replace\r\ntests\\VSO_0180466_algorithm_overhauls\r\ntests\\VSO_0180469_fill_family\r\ntests\\VSO_0191296_allocator_construct\r\ntests\\VSO_0204655_heap_algorithms_integer_overflow\r\ntests\\VSO_0224478_scoped_allocator\r\ntests\\VSO_0226079_mutex\r\ntests\\VSO_0234888_num_get_overflows\r\ntests\\VSO_0397980_codecvt_length\r\ntests\\VSO_0429900_fast_debug_range_based_for\r\ntests\\VSO_0474901_shift_jis_codecvt\r\ntests\\VSO_0493909_is_aggregate\r\ntests\\VSO_0512710_terminate_current_exception_from_noexcept_function\r\ntests\\VSO_0512710_terminate_current_exception_from_noexcept_function_2\r\ntests\\VSO_0512710_terminate_current_exception_from_unwind\r\ntests\\VSO_0527559_pragma_managed\r\ntests\\VSO_0575109_string_ambiguous_overloads\r\ntests\\VSO_0599804_seekg_zero\r\ntests\\VSO_0644691_utf_8_codecvt\r\ntests\\VSO_0663136_string_includes_cctype\r\ntests\\VSO_0664587_lcg_divide_by_zero\r\ntests\\VSO_0677157_flist_merge_edge_cases\r\ntests\\VSO_0735700_fstream_read_over_4k\r\ntests\\VSO_0736657_unordered_assign_rehash\r\ntests\\VSO_0744055_atomic_load_8_bytes_readonly\r\ntests\\VSO_0792651_unordered_set_rehash_invalidates_key\r\ntests\\VSO_0830211_container_debugging_range_checks\r\ntests\\VSO_0849827_multicontainer_emplace_hint_position\r\ntests\\VSO_0938757_attribute_order\r\ntests\\VSO_0961751_hash_range_erase\r\ntests\\VSO_0971246_legacy_await_headers\r\ntests\\VSO_1775715_user_defined_modules\r\ntests\\VSO_1804139_static_analysis_warning_with_single_element_array\r\ntests\\VSO_1925201_iter_traits\r\ntests\\VSO_2252142_wrong_C5046\r\ntests\\VSO_2318081_bogus_const_overloading\r\n"
  },
  {
    "path": "tests/std/tests/Dev08_496675_iostream_int_reading/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev08_496675_iostream_int_reading/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <sstream>\r\n\r\nint main() {\r\n    {\r\n        std::stringstream ss;\r\n        int i = 0;\r\n\r\n        // the C locale should not have any numeric grouping defined,\r\n        // so the comma after 2 should not be confused with a thousand\r\n        // separator.\r\n        ss << \"2,\";\r\n\r\n        // imbuing the \"C\" locale workaround the problem\r\n        // ss.imbue(std::locale(\"C\"));\r\n\r\n        // reading from the stream should not fail\r\n        assert(ss >> i);\r\n    }\r\n\r\n    {\r\n        // test for floats\r\n\r\n        std::stringstream ss;\r\n        float f = 0;\r\n\r\n        // the C locale should not have any numeric grouping defined,\r\n        // so the comma after 2 should not be confused with a thousand\r\n        // separator.\r\n        ss << \"2,\";\r\n\r\n        // reading from the stream should not fail\r\n        assert(ss >> f);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev08_527068_scl_no_exceptions/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/D_HAS_EXCEPTIONS=0\"\r\n*\tPM_CL=\"/D_HAS_EXCEPTIONS=1\"\r\n"
  },
  {
    "path": "tests/std/tests/Dev08_527068_scl_no_exceptions/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n// Bug : VSW527068\r\n// The Standard c++ library fails to compile when\r\n// 1) _HAS_EXCEPTIONS=0\r\n// AND\r\n// 2) \"exception\" is included as one of the header files\r\n\r\n\r\n// Problem :\r\n// When _HAS_EXCEPTIONS=0, the header defines another std::exception class which\r\n// conflicts with the regular (_HAS_EXCEPTIONS=1) std::exception. The fix was\r\n// to move the std::exception class into stdext namespace and use\r\n// \"using stdext::exception;\" to pull it into the std namespace when _HAS_EXCEPTIONS=0.\r\n\r\n\r\n// Test :\r\n// Make sure all the combinations of _HAS_EXCEPTIONS=0|1, /MD[d] /MT[d], and\r\n// _STATIC compiles.\r\n//\r\n// Make sure that std::exception is defined when _HAS_EXCEPTIONS is both 0 and 1.\r\n//\r\n// Make sure that stdext::exception is defined when _HAS_EXCEPTIONS is 1.\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n// compile with: /EHsc\r\n\r\n// VSO-115482 - Include <typeinfo> first to ensure when _HAS_EXCEPTIONS=0, it doesn't emit any errors without including\r\n// <exception> beforehand.\r\n#include <typeinfo>\r\n\r\n// This comment prevents clang-format from reordering <typeinfo> below the other headers.\r\n\r\n#include <exception>\r\n#include <iostream>\r\n\r\n// VSO-115482 - Ensure type_info is in namespace std when _HAS_EXCEPTIONS=0.\r\nusing check_typeinfo = std::type_info;\r\n\r\nvoid MyFunc() {\r\n    _THROW(std::exception(\"this is an exception\"));\r\n}\r\n\r\nvoid __cdecl handler(const std::exception& e) {\r\n    std::cout << \"in handler, exception: \" << e.what() << std::endl;\r\n}\r\n\r\nvoid meow() {\r\n#if !_HAS_EXCEPTIONS\r\n    stdext::exception::_Set_raise_handler(&handler);\r\n#endif\r\n    _TRY_BEGIN\r\n    std::cout << \"In try block, calling MyFunc().\" << std::endl;\r\n    MyFunc();\r\n    _CATCH(std::exception e)\r\n#if _HAS_EXCEPTIONS\r\n    std::cout << \"In catch handler.\" << std::endl;\r\n    std::cout << \"Caught CTest exception type: \";\r\n    std::cout << e.what() << std::endl;\r\n#endif\r\n    _CATCH_END\r\n    std::cout << \"Back in main. Execution resumes here.\" << std::endl;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev08_563686_ostream/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev08_563686_ostream/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n// Bug : VSW563686\r\n//      iostream has memory leaks\r\n\r\n// Problem :\r\n//      istream and ostream virtually inherits from ios_base. Init function\r\n//      was being called from both the derived classes. This resulted in\r\n//      a memory leak since the memory allocated in the first initialization\r\n//      is lost when the Init function is called the second time.\r\n//\r\n// Fix :\r\n//      Modify ostream constructor to take a parameter that specifies whether\r\n//      it should call base class. Modify the constructor to call Init based\r\n//      on the parameter.\r\n\r\n// Test :\r\n//      Use CRT memory tracking functions to detect memory leaks.\r\n//      Create iostream instances and destroy them.\r\n//      Check for any memory leaks.\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n#define CRTDBG_MAP_ALLOC\r\n#include <crtdbg.h>\r\n#include <cstdlib>\r\n#include <sstream>\r\n\r\n#pragma warning(push) // TRANSITION, OS-23694920\r\n#pragma warning(disable : 4668) // 'MEOW' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'\r\n#include <Windows.h>\r\n#pragma warning(pop)\r\n\r\nint main() {\r\n    // Track CRT blocks\r\n    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_CRT_DF);\r\n\r\n    {\r\n        // Allocate long lived objects in the CRT.\r\n        // We don't want these objects to show up as leaks.\r\n        std::iostream s(nullptr);\r\n    }\r\n\r\n    // Get memory state before creating iostream\r\n    _CrtMemState before;\r\n    _CrtMemCheckpoint(&before);\r\n\r\n    // Construct and destroy an iostream, which previously leaked.\r\n    {\r\n        std::iostream s(nullptr);\r\n    }\r\n\r\n    // Get memory state after iostream allocation/deallocation\r\n    _CrtMemState after;\r\n    _CrtMemCheckpoint(&after);\r\n\r\n    // Diff memory state\r\n    _CrtMemState diff;\r\n    // return 1 if there are diffs\r\n    int nRet = _CrtMemDifference(&diff, &before, &after);\r\n    (void) diff;\r\n    (void) before;\r\n    (void) after;\r\n\r\n    // Dump diff stats and the leaks if any.\r\n    _CrtMemDumpStatistics(&diff);\r\n    OutputDebugString(\"Start Memory Dump\\n\");\r\n    _CrtMemDumpAllObjectsSince(&before);\r\n    OutputDebugString(\"End Memory Dump\\n\");\r\n\r\n    return nRet;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev08_563705_std_malloc_free/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev08_563705_std_malloc_free/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n// Bug : VSW563705\r\n// When _CRTDBG_MAP_ALLOC is defined, cpp files that use std::malloc(),\r\n// std::free(), std::calloc(), std::realloc() don't compile.\r\n//\r\n\r\n// Problem :\r\n// When _CRTDBG_MAP_ALLOC is defined, malloc() is defined as _malloc_dbg() etc., but\r\n// _malloc_dbg() isn't defined in std namespace.\r\n\r\n// Test :\r\n// This is a compilation test making sure that std::malloc() etc. can be compiled\r\n// successfully when _CRTDBG_MAP_ALLOC is defined.\r\n\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n#include <crtdbg.h>\r\n#include <cstdlib>\r\n\r\nint main() {\r\n    // this is a test to test whether\r\n    // malloc/free/realloc and its _dbg variant\r\n    // compiles under std namespace\r\n    std::free(std::malloc(1));\r\n    std::free(std::calloc(1, 1));\r\n    std::free(std::realloc(std::malloc(1), 1));\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev08_576265_list_remove/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev08_576265_list_remove/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <list>\r\n\r\nstruct Val {\r\n    int value;\r\n    unsigned int canary;\r\n    Val() : value(0), canary(0xDEADBEEF) {}\r\n    Val(int val) : value(val), canary(0x600DF00D) {}\r\n    Val(const Val&)            = default;\r\n    Val& operator=(const Val&) = default;\r\n    ~Val() {\r\n        canary = 0xDEADBEEF;\r\n    }\r\n};\r\n\r\nbool operator==(const Val& val1, const Val& val2) {\r\n    assert(val1.canary == 0x600DF00D && val2.canary == 0x600DF00D);\r\n    return val1.value == val2.value;\r\n}\r\n\r\nint main() {\r\n    // When passed a reference to an element of the list, std::list::remove\r\n    // will defer destruction of that element's node until it returns.\r\n    std::list<Val> l;\r\n\r\n    l.push_back(Val(1));\r\n    l.push_back(Val(2));\r\n    l.remove(l.front());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev08_584299_search_n/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev08_584299_search_n/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <list>\r\n\r\n// This test makes sure that the search_n algorithm behaves correctly.\r\n// In VS2005, we were incorrectly identifying a shorter sequence as the\r\n// correct result. E.g., in the sequence:\r\n\r\n// 8,7,0,0,1,1,8,0,8,2,1,1,1,0,1,0,2,0,8,0,8,2,37,40\r\n\r\n// search_n identified the first two zeroes as a sequence of 3 zeroes.\r\n\r\nint main() {\r\n    {\r\n        // use random access iterators\r\n        const int asize = 24;\r\n        int a[asize]    = {8, 7, 0, 0, 1, 1, 8, 0, 8, 2, 1, 1, 1, 0, 1, 0, 2, 0, 8, 0, 8, 2, 37, 40};\r\n\r\n        const auto res  = std::search_n(a, a + asize, 3, 0);\r\n        const auto diff = res - a;\r\n        assert(diff == 24);\r\n    }\r\n\r\n    {\r\n        // use bidirectional iterators\r\n        const int asize = 24;\r\n        int a[asize]    = {8, 7, 0, 0, 1, 1, 8, 0, 8, 2, 1, 1, 1, 0, 1, 0, 2, 0, 8, 0, 8, 2, 37, 40};\r\n        std::list<int> l;\r\n\r\n        for (int i = 0; i < asize; ++i) {\r\n            l.push_back(a[i]);\r\n        }\r\n        const auto res  = std::search_n(l.begin(), l.end(), 3, 0);\r\n        const auto diff = std::distance(l.begin(), res);\r\n        assert(diff == 24);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_012361_vector_swap/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_012361_vector_swap/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// DevDiv Bugs.12361 - \"VS2005 Checked STL vector::swap causes incorrect iterator assertion in Release builds\"\r\n\r\n// C++03 23.1/10 requires that \"all container types defined in this clause meet\r\n// the following additional requirements: [...] no swap() function invalidates\r\n// any references, pointers, or iterators referring to the elements of the\r\n// containers being swapped.\"\r\n\r\n// This was broken when _HAS_ITERATOR_DEBUGGING was disabled and _SECURE_SCL\r\n// was enabled (the default in release mode, obtainable in debug mode).\r\n// In this case, every iterator held a pointer to its parent container (in\r\n// addition to the element being referred to) so that it could perform bounds\r\n// checking. However, swapping containers would not update these parent\r\n// pointers, so using iterators into those containers would perform bounds\r\n// checks against the wrong containers. (Vector iterators perform bounds checks\r\n// based on pointers, not indices, so they were broken even when the containers\r\n// were the same size.) Also, one container could be destroyed before the\r\n// other, wreaking havoc even more reliably.\r\n\r\n// This afflicted all Standard containers (vector/deque/list, set/multiset,\r\n// map/multimap, and string). When both _HAS_ITERATOR_DEBUGGING and _SECURE_SCL\r\n// were enabled, swap() worked properly because the iterator debugging\r\n// machinery walked through all iterators to update their parent container\r\n// pointers. When both _HAS_ITERATOR_DEBUGGING and _SECURE_SCL were disabled,\r\n// there were no parent container pointers to get mangled, with one exception:\r\n\r\n// deque was even more broken. Due to its map-of-blocks structure, deque\r\n// iterators maintained parent container pointers even when both\r\n// _HAS_ITERATOR_DEBUGGING and _SECURE_SCL were disabled. These were also\r\n// broken by swap().\r\n\r\n// The fix for both of these problems was to introduce a dynamically allocated\r\n// object, called the aux object, owned by every container when\r\n// _HAS_ITERATOR_DEBUGGING is disabled and _SECURE_SCL is enabled (and\r\n// additionally by deque when both _HAS_ITERATOR_DEBUGGING and _SECURE_SCL are\r\n// disabled). An iterator now holds a pointer to an aux object, which holds a\r\n// pointer to a container. This extra level of indirection solves the swap()\r\n// problem; the containers and the aux objects do not change addresses, but\r\n// the containers swap ownership of their aux objects, and the aux objects are\r\n// made to point to their new owners, allowing iterators to find their parents\r\n// correctly.\r\n\r\n// Note, however, that this fix has NOT been applied to strings, because of the\r\n// complexity of how they are passed between the separately compiled runtime\r\n// and the client code.\r\n\r\n// The aux object is allocated by the container's allocator due to a subtle\r\n// issue. When creating a precompiled header, the compiler snapshots its\r\n// internal data structures to disk. These internal data structures include\r\n// STL containers, which use a special allocator to support this snapshotting.\r\n// If the aux object is simply allocated by \"new\", then it will be missing\r\n// when the PCH is reloaded.\r\n\r\n// This fix has the following effects on container and iterator sizes\r\n// (in 32-bit mode):\r\n// 1. Non-string non-deque containers are 4 bytes larger in release mode with\r\n// _SECURE_SCL enabled (as they must own an aux object now).\r\n// 2. Non-string non-deque containers are the same size in debug mode with\r\n// _HAS_ITERATOR_DEBUGGING disabled. Although they own an aux object now,\r\n// an unnecessary data member was removed, keeping them the same size.\r\n// 3. Non-string non-deque iterators are the same size in release mode with\r\n// _SECURE_SCL enabled (their parent container pointer was replaced with an aux\r\n// object pointer).\r\n// 4. Non-string non-deque iterators are 4 bytes smaller in debug mode with\r\n// _HAS_ITERATOR_DEBUGGING disabled. They gained an aux object pointer, but\r\n// lost two unnecessary data members.\r\n\r\n// 5. Deque iterators are 4 bytes smaller in release mode with _SECURE_SCL\r\n// enabled (a duplicate data member was removed).\r\n// 6. Deque iterators are 8 bytes smaller in debug mode with\r\n// _HAS_ITERATOR_DEBUGGING disabled (three data members were removed, and an\r\n// aux object pointer was added).\r\n\r\n// 7. Deques are 8 bytes larger in release mode (regardless of _SECURE_SCL).\r\n// This is because they must own an aux object now, although I don't know why\r\n// this costs 8 bytes instead of 4. There seems to be padding involved.\r\n\r\n// To summarize object sizes in the order,\r\n// Debug HID/SCL, Debug SCL, Debug None, Release SCL, Release None:\r\n// vector<int>: Previously 20, 20, 20, 16, 16. Now 20, 20, 20, 20, 16.\r\n// vector<int>::iterator: Previously 12, 12, 12, 8, 4. Now 12, 8, 8, 8, 4.\r\n// deque<int>: Previously 28, 28, 28, 20, 20. Now 28, 28, 28, 28, 28.\r\n// deque<int>::iterator: Previously 12, 16, 16, 12, 8. Now 12, 8, 8, 8, 8.\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdio>\r\n#include <cstring>\r\n#include <deque>\r\n#include <iterator>\r\n#include <list>\r\n#include <set>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename C>\r\nvoid test_swap(const char* const name) {\r\n    const size_t N = sizeof(C);\r\n\r\n    unsigned char array[N] = {0};\r\n\r\n    C c;\r\n    c.insert(c.end(), 10);\r\n    c.insert(c.end(), 20);\r\n    c.insert(c.end(), 30);\r\n\r\n    C* const p = new (array) C;\r\n    _Analysis_assume_(p);\r\n    p->insert(p->end(), 11);\r\n    p->insert(p->end(), 22);\r\n    p->insert(p->end(), 33);\r\n    p->insert(p->end(), 44);\r\n    p->insert(p->end(), 55);\r\n\r\n    typename C::const_iterator i = p->begin();\r\n\r\n    advance(i, 3);\r\n\r\n    swap(c, *p);\r\n\r\n    p->~C();\r\n    memset(array, 0xC4, N);\r\n\r\n    assert(*i == 44);\r\n\r\n    printf(\"    * %s test succeeded.\\n\", name);\r\n}\r\n\r\nint main() {\r\n#ifdef _DEBUG\r\n#if _HAS_ITERATOR_DEBUGGING\r\n    puts(\"Running tests for Debug HID/SCL.\");\r\n#elif _SECURE_SCL\r\n    puts(\"Running tests for Debug SCL.\");\r\n#else\r\n    puts(\"Running tests for Debug None.\");\r\n#endif\r\n#else\r\n#if _SECURE_SCL\r\n    puts(\"Running tests for Retail SCL.\");\r\n#else\r\n    puts(\"Running tests for Retail None.\");\r\n#endif\r\n#endif\r\n\r\n    test_swap<vector<int>>(\"vector\");\r\n    test_swap<deque<int>>(\"deque\");\r\n    test_swap<list<int>>(\"list\");\r\n    test_swap<set<int>>(\"set\");\r\n\r\n    puts(\"All tests succeeded.\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_052961_has_iterator_debugging_0/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_052961_has_iterator_debugging_0/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// DevDiv Bugs.52961 - \"VC8 SP1 Regression: Crash With /MDd /D_HAS_ITERATOR_DEBUGGING=0\"\r\n//\r\n// This regression from VC8 RTM to VC8 SP1 affects code compiled in debug mode\r\n// with iterator debugging disabled. Whenever an iterator is set to point into\r\n// a container and then the container is destroyed before the iterator, the code\r\n// will crash.\r\n//\r\n// This was caused by the fix for the VC8 RTM bug VSWhidbey.579198, which also\r\n// affected debug mode with iterator debugging disabled. In that bug, we begin\r\n// with a local std::string, which has iterator debugging disabled. We then call\r\n// std::string::substr(), which runs inside the separately compiled msvcp100d.dll\r\n// with iterator debugging ENABLED and returns a temporary std::string with iterator\r\n// debugging ENABLED. We then call std::string::end() on the temporary, which also\r\n// runs inside the DLL. When this method constructs its return value, the iterator\r\n// is registered in the temporary std::string's iterator list. However, the iterator\r\n// will be destroyed in the user's code, which has iterator debugging disabled.\r\n// Therefore, the temporary std::string's iterator list is left with an entry for\r\n// a dead iterator. When the temporary std::string itself dies, its destructor runs\r\n// in the DLL and detects that it was created with iterator debugging ENABLED, so\r\n// it attempts to orphan all iterators in its iterator list, and tries to write to\r\n// wherever the dead iterator lived.\r\n//\r\n// The fix introduced code into the base of all iterators (not just string iterators)\r\n// which would run in user code compiled in debug mode with iterator debugging disabled\r\n// and detect if the dying iterator was created inside the DLL with iterator debugging\r\n// ENABLED, in which case the iterator would remove itself from the iterator list before\r\n// dying.\r\n//\r\n// Unfortunately, fixing this problem triggered by a std::string outliving its iterator\r\n// introduced a problem triggered by an iterator outliving its container (of any type).\r\n// When the long-lived iterator dies, it attempts to remove itself from its dead parent's\r\n// iterator list.\r\n//\r\n// The fix for the VC8 RTM bug VSWhidbey.583388 (yet another debug mode, iterator debugging\r\n// disabled bug) introduced a separate regression, DevDiv Bugs.36183, which was fixed\r\n// before the final version of VC8 SP1 was released. This last fix is the interesting one.\r\n// Now, the DLL (with iterator debugging ENABLED) is smart. In std::string::substr(), it\r\n// detects that the original string, living in user code, has iterator debugging disabled.\r\n// Accordingly, it disables iterator debugging on the temporary std::string it returns.\r\n// (std::string::substr() is the only method that returns a temporary std::string like this.)\r\n// Now, calling std::string::end() on the temporary doesn't register any iterators in any\r\n// iterator lists.\r\n//\r\n// As the fix for DevDiv Bugs.36183 thoroughly solves the problem that the broken fix\r\n// for VSWhidbey.579198 attempted to solve, we should remove the broken fix. This restores\r\n// correctness to all known cases, and also increases efficiency (as iterator destructors\r\n// in debug mode with iterator debugging disabled now perform no extra work).\r\n\r\n#include <cassert>\r\n#include <cstdio>\r\n#include <cstring>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4582) // 'uninit_vector::storage': constructor is not implicitly called\r\n#pragma warning(disable : 4583) // 'uninit_vector::storage': destructor is not implicitly called\r\nunion uninit_vector {\r\n    unsigned char bytes[sizeof(vector<int>)];\r\n    vector<int> storage;\r\n\r\n    constexpr uninit_vector() : bytes{} {}\r\n    uninit_vector(const uninit_vector&)            = delete;\r\n    uninit_vector& operator=(const uninit_vector&) = delete;\r\n    ~uninit_vector() {}\r\n};\r\n#pragma warning(pop)\r\n\r\nint main() {\r\n    puts(\"Beginning of test for DevDiv Bugs.52961 ...\");\r\n\r\n    {\r\n        uninit_vector storage;\r\n\r\n        puts(\"Constructing vector.\");\r\n\r\n        vector<int>* const p = new (&storage.storage) vector<int>;\r\n\r\n        _Analysis_assume_(p);\r\n\r\n        puts(\"Vector constructed. Pushing back values.\");\r\n\r\n        p->push_back(20);\r\n        p->push_back(30);\r\n\r\n        puts(\"Values pushed back. Constructing iterator.\");\r\n\r\n        const vector<int>::const_iterator i = p->begin();\r\n\r\n        puts(\"Iterator constructed. Using iterator.\");\r\n\r\n        assert(i[0] == 20);\r\n        assert(i[1] == 30);\r\n\r\n        puts(\"Iterator use successful. Destroying container.\");\r\n\r\n        p->~vector<int>();\r\n\r\n        puts(\"Container destroyed. Scribbling over memory.\");\r\n\r\n        memset(&storage.bytes, 0xC4, sizeof(storage.bytes));\r\n\r\n        puts(\"Memory scribbled. Destroying iterator (this should not crash).\");\r\n    }\r\n\r\n    puts(\"Iterator destroyed successfully.\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_056375_locale_cleanup/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_056375_locale_cleanup/custom_format.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\n\r\nfrom stl.test.format import STLTestFormat, TestStep\r\n\r\n\r\nclass CustomTestFormat(STLTestFormat):\r\n    def getBuildSteps(self, test, litConfig, shared):\r\n        exeSource = test.getSourcePath()\r\n        dllSource = os.path.join(os.path.dirname(exeSource), 'TestDll.cpp')\r\n\r\n        outputDir, _ = test.getTempPaths()\r\n        dllOutput = os.path.join(outputDir, 'TestDll.DLL')\r\n\r\n        cmd = [test.cxx, dllSource, *test.flags, *test.compileFlags, '/Fe' + dllOutput,\r\n               '/link', '/DLL', *test.linkFlags]\r\n\r\n        yield TestStep(cmd, shared.execDir, shared.env, False)\r\n\r\n        for step in super().getBuildSteps(test, litConfig, shared):\r\n            yield step\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_056375_locale_cleanup/custombuild.pl",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nuse Run;\r\n\r\nsub CustomBuildHook()\r\n{\r\n    my $cwd = Run::GetCWDName();\r\n    my $machine = $ENV{'TARGET_ARCHITECTURE'};\r\n    Run::ExecuteCL(\"TestDll.cpp /c\");\r\n    Run::ExecuteLink(\"/machine:$machine /out:TestDll.DLL /DLL TestDll.obj\");\r\n    Run::ExecuteCL(\"Test.cpp /c\");\r\n    Run::ExecuteLink(\"/machine:$machine /out:$cwd.exe Test.obj\");\r\n}\r\n1\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_056375_locale_cleanup/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_056375_locale_cleanup/lit.local.cfg",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\nimport site\r\nsite.addsitedir(os.path.dirname(os.path.dirname(__file__)))\r\nimport Dev09_056375_locale_cleanup.custom_format\r\n\r\nconfig.test_format = Dev09_056375_locale_cleanup.custom_format.CustomTestFormat()\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_056375_locale_cleanup/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_CXX20_CODECVT_FACETS_DEPRECATION_WARNING\r\n#define _SILENCE_CXX20_CODECVT_CHAR8_T_FACETS_DEPRECATION_WARNING\r\n\r\n#include <cassert>\r\n#include <cstdio>\r\n#include <cwchar>\r\n#include <locale>\r\n#include <type_traits>\r\n\r\n#pragma warning(push) // TRANSITION, OS-23694920\r\n#pragma warning(disable : 4668) // 'MEOW' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'\r\n#include <Windows.h>\r\n#pragma warning(pop)\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nSTATIC_ASSERT(noexcept(locale{} == locale{})); // strengthened\r\nSTATIC_ASSERT(noexcept(locale{} != locale{})); // strengthened\r\n\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<ctype_base>); // strengthened\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<codecvt_base>); // strengthened\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<time_base>); // strengthened\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<money_base>); // strengthened\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<messages_base>); // strengthened\r\n\r\n// Test that *_base classes are implicitly default constructible.\r\n\r\ntemplate <class T>\r\nvoid parameter_taker(const T&); // not defined\r\n\r\ntemplate <class T, class = void>\r\nconstexpr bool is_implicitly_default_constructible = false;\r\n\r\ntemplate <class T>\r\nconstexpr bool is_implicitly_default_constructible<T, void_t<decltype(parameter_taker<T>({}))>> = true;\r\n\r\nSTATIC_ASSERT(is_implicitly_default_constructible<ctype_base>);\r\nSTATIC_ASSERT(is_implicitly_default_constructible<codecvt_base>);\r\nSTATIC_ASSERT(is_implicitly_default_constructible<time_base>);\r\nSTATIC_ASSERT(is_implicitly_default_constructible<money_base>);\r\nSTATIC_ASSERT(is_implicitly_default_constructible<messages_base>);\r\n\r\nSTATIC_ASSERT(!is_implicitly_default_constructible<locale::facet>);\r\nSTATIC_ASSERT(!is_implicitly_default_constructible<ctype<char>>);\r\nSTATIC_ASSERT(!is_implicitly_default_constructible<ctype<wchar_t>>);\r\n\r\n// Test mandatory locale::id properties and strengthened exception specification.\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<locale::id>); // strengthened\r\nSTATIC_ASSERT(!is_copy_constructible_v<locale::id>);\r\nSTATIC_ASSERT(!is_move_constructible_v<locale::id>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<locale::id>);\r\nSTATIC_ASSERT(!is_move_assignable_v<locale::id>);\r\nSTATIC_ASSERT(is_nothrow_destructible_v<locale::id>);\r\n\r\n// Test that non-Standard locale::id constructor and conversion function are not user-visible.\r\nSTATIC_ASSERT(!is_constructible_v<locale::id, size_t>);\r\nSTATIC_ASSERT(!is_constructible_v<size_t, locale::id>);\r\nSTATIC_ASSERT(!is_constructible_v<size_t, locale::id&>);\r\nSTATIC_ASSERT(!is_convertible_v<size_t, locale::id>);\r\nSTATIC_ASSERT(!is_convertible_v<locale::id, size_t>);\r\nSTATIC_ASSERT(!is_convertible_v<locale::id&, size_t>);\r\n\r\nvoid test_dll() {\r\n    puts(\"Calling dll\");\r\n#ifdef _M_CEE\r\n    using namespace System;\r\n    using namespace System::Reflection;\r\n    {\r\n        AppDomain ^ ad = AppDomain::CreateDomain(\"NewDomain\");\r\n        Assembly ^ as  = ad->Load(\"testdll\");\r\n        as->GetType(\"Test\")->GetMethod(\"DllTest\")->Invoke(nullptr, nullptr);\r\n        AppDomain::Unload(ad);\r\n    }\r\n#else // ^^^ defined(_M_CEE) / !defined(_M_CEE) vvv\r\n    HMODULE hLibrary = LoadLibraryExW(L\"testdll.dll\", nullptr, 0);\r\n    assert(hLibrary != nullptr);\r\n    typedef void (*TheFuncProc)();\r\n    TheFuncProc pFunc = reinterpret_cast<TheFuncProc>(GetProcAddress(hLibrary, \"DllTest\"));\r\n    assert(pFunc != nullptr);\r\n    pFunc();\r\n    FreeLibrary(hLibrary);\r\n#endif // ^^^ !defined(_M_CEE) ^^^\r\n}\r\n\r\nvoid test_exe_part1() {\r\n    assert(isspace(' ', locale()));\r\n    assert(isspace(L' ', locale()));\r\n    assert(!isspace('Z', locale()));\r\n    assert(!isspace(L'Z', locale()));\r\n}\r\n\r\nvoid test_exe_part2() {\r\n    assert(isspace(' ', locale()));\r\n    assert(isspace(L' ', locale()));\r\n    assert(!isspace('Z', locale()));\r\n    assert(!isspace(L'Z', locale()));\r\n}\r\n\r\n#ifndef _M_CEE_PURE\r\nlocale make_unnamed_locale() {\r\n    locale result{locale{\"C\"}, &use_facet<numpunct<char>>(locale{\"C\"})};\r\n    assert(result.name() == \"*\");\r\n    return result;\r\n}\r\n\r\ntemplate <class Facet>\r\nvoid test_locale_name_with_facet_pointer_one() {\r\n    {\r\n        locale result{locale{\"C\"}, static_cast<Facet*>(nullptr)};\r\n        assert(result.name() == \"C\");\r\n    }\r\n    {\r\n        locale result{make_unnamed_locale(), static_cast<Facet*>(nullptr)};\r\n        assert(result.name() == \"*\");\r\n    }\r\n    {\r\n        locale le{\"C\"};\r\n        locale result{le, &use_facet<Facet>(le)};\r\n        assert(result.name() == \"*\");\r\n    }\r\n    {\r\n        locale lunnamed{make_unnamed_locale()};\r\n        locale result{lunnamed, &use_facet<Facet>(lunnamed)};\r\n        assert(result.name() == \"*\");\r\n    }\r\n}\r\n\r\nvoid test_locale_name_with_facet_pointer_all() {\r\n    test_locale_name_with_facet_pointer_one<collate<char>>();\r\n    test_locale_name_with_facet_pointer_one<collate<wchar_t>>();\r\n\r\n    test_locale_name_with_facet_pointer_one<ctype<char>>();\r\n    test_locale_name_with_facet_pointer_one<ctype<wchar_t>>();\r\n    test_locale_name_with_facet_pointer_one<codecvt<char, char, mbstate_t>>();\r\n    test_locale_name_with_facet_pointer_one<codecvt<char16_t, char, mbstate_t>>();\r\n    test_locale_name_with_facet_pointer_one<codecvt<char32_t, char, mbstate_t>>();\r\n#ifdef __cpp_char8_t\r\n    test_locale_name_with_facet_pointer_one<codecvt<char16_t, char8_t, mbstate_t>>();\r\n    test_locale_name_with_facet_pointer_one<codecvt<char32_t, char8_t, mbstate_t>>();\r\n#endif // __cpp_char8_t\r\n    test_locale_name_with_facet_pointer_one<codecvt<wchar_t, char, mbstate_t>>();\r\n\r\n    test_locale_name_with_facet_pointer_one<moneypunct<char>>();\r\n    test_locale_name_with_facet_pointer_one<moneypunct<wchar_t>>();\r\n    test_locale_name_with_facet_pointer_one<moneypunct<char, true>>();\r\n    test_locale_name_with_facet_pointer_one<moneypunct<wchar_t, true>>();\r\n    test_locale_name_with_facet_pointer_one<money_get<char>>();\r\n    test_locale_name_with_facet_pointer_one<money_get<wchar_t>>();\r\n    test_locale_name_with_facet_pointer_one<money_put<char>>();\r\n    test_locale_name_with_facet_pointer_one<money_put<wchar_t>>();\r\n\r\n    test_locale_name_with_facet_pointer_one<numpunct<char>>();\r\n    test_locale_name_with_facet_pointer_one<numpunct<wchar_t>>();\r\n    test_locale_name_with_facet_pointer_one<num_get<char>>();\r\n    test_locale_name_with_facet_pointer_one<num_get<wchar_t>>();\r\n    test_locale_name_with_facet_pointer_one<num_put<char>>();\r\n    test_locale_name_with_facet_pointer_one<num_put<wchar_t>>();\r\n\r\n    test_locale_name_with_facet_pointer_one<time_get<char>>();\r\n    test_locale_name_with_facet_pointer_one<time_get<wchar_t>>();\r\n    test_locale_name_with_facet_pointer_one<time_put<char>>();\r\n    test_locale_name_with_facet_pointer_one<time_put<wchar_t>>();\r\n\r\n    test_locale_name_with_facet_pointer_one<messages<char>>();\r\n    test_locale_name_with_facet_pointer_one<messages<wchar_t>>();\r\n}\r\n\r\nvoid test_locale_name_with_another_locale_and_cats() {\r\n    locale lc{\"C\"};\r\n    locale lunnamed{make_unnamed_locale()};\r\n    {\r\n        locale result{lc, lc, locale::none};\r\n        assert(result.name() != \"*\");\r\n    }\r\n    {\r\n        locale result{lc, lunnamed, locale::none};\r\n        assert(result.name() != \"*\");\r\n    }\r\n    {\r\n        locale result{lunnamed, lc, locale::none};\r\n        assert(result.name() == \"*\");\r\n    }\r\n    {\r\n        locale result{lunnamed, lunnamed, locale::none};\r\n        assert(result.name() == \"*\");\r\n    }\r\n\r\n    constexpr int cats_masks_count = 6; // collate | ctype | monetary | numeric | time | messages\r\n    for (int precats = 1; precats < (1 << cats_masks_count); ++precats) {\r\n        const locale::category cats = ((precats & (1 << 0)) != 0 ? locale::collate : locale::none)\r\n                                    | ((precats & (1 << 1)) != 0 ? locale::ctype : locale::none)\r\n                                    | ((precats & (1 << 2)) != 0 ? locale::monetary : locale::none)\r\n                                    | ((precats & (1 << 3)) != 0 ? locale::numeric : locale::none)\r\n                                    | ((precats & (1 << 4)) != 0 ? locale::time : locale::none)\r\n                                    | ((precats & (1 << 5)) != 0 ? locale::messages : locale::none);\r\n        {\r\n            locale result{lc, lc, cats};\r\n            assert(result.name() != \"*\");\r\n        }\r\n        {\r\n            locale result{lc, lunnamed, cats};\r\n            assert(result.name() == \"*\");\r\n        }\r\n        {\r\n            locale result{lunnamed, lc, cats};\r\n            assert(result.name() == \"*\");\r\n        }\r\n        {\r\n            locale result{lunnamed, lunnamed, cats};\r\n            assert(result.name() == \"*\");\r\n        }\r\n    }\r\n}\r\n#endif // _M_CEE_PURE\r\n\r\nint main() {\r\n    test_exe_part1();\r\n    test_dll();\r\n    test_exe_part2();\r\n\r\n#ifndef _M_CEE_PURE\r\n    // test coverage for LWG-2295\r\n    test_locale_name_with_facet_pointer_all();\r\n    test_locale_name_with_another_locale_and_cats();\r\n#endif // _M_CEE_PURE\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_056375_locale_cleanup/testdll.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <locale>\r\nusing namespace std;\r\n\r\n// Tests for DLL\r\n#ifdef _M_CEE\r\npublic\r\nref struct Test {\r\n    static\r\n#else\r\nextern \"C\" {\r\n__declspec(dllexport)\r\n#endif\r\n\r\n        void\r\n        DllTest() {\r\n        assert(isspace(' ', locale()));\r\n        assert(isspace(L' ', locale()));\r\n        assert(!isspace('Z', locale()));\r\n        assert(!isspace(L'Z', locale()));\r\n    }\r\n};\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_098637_stl_function_typeids/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_098637_stl_function_typeids/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <sstream>\r\n#include <typeinfo>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    ostringstream oss;\r\n\r\n    ostream& r = (oss << 9 * 9 * 9 + 10 * 10 * 10);\r\n\r\n    assert(oss.str() == \"1729\");\r\n\r\n    assert(typeid(r) == typeid(ostringstream));\r\n    assert(typeid(r) != typeid(istringstream));\r\n    assert(typeid(r) != typeid(stringstream));\r\n    assert(typeid(r) != typeid(ostream));\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_119637_throwing_string_with_hid0/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_119637_throwing_string_with_hid0/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <string>\r\n\r\nint main() {\r\n    try {\r\n        throw std::string(\"meow\");\r\n    } catch (...) {\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_119644_compiler_option_gz/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\callconv_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_119644_compiler_option_gz/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <__msvc_all_public_headers.hpp>\r\n\r\n#ifdef _M_CEE_PURE\r\nint main() {\r\n#else\r\nint __cdecl main() {\r\n#endif\r\n    // Test Dev10-465793 \"iostreams: <locale> is incompatible with /Gr and /Gz\".\r\n    std::locale loc(\"english_US\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_126254_persistent_aux_allocators/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_126254_persistent_aux_allocators/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <list>\r\n#include <map>\r\n#include <new>\r\n#include <set>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nmap<size_t, int> g_map;\r\n\r\nsize_t g_next_id = 0;\r\n\r\ntemplate <typename T>\r\nclass MyAllocator {\r\npublic:\r\n    typedef T* pointer;\r\n    typedef const T* const_pointer;\r\n    typedef T& reference;\r\n    typedef const T& const_reference;\r\n    typedef T value_type;\r\n    typedef size_t size_type;\r\n    typedef ptrdiff_t difference_type;\r\n\r\n    template <typename U>\r\n    struct rebind {\r\n        typedef MyAllocator<U> other;\r\n    };\r\n\r\n    T* address(T& r) const {\r\n        return &r;\r\n    }\r\n\r\n    const T* address(const T& s) const {\r\n        return &s;\r\n    }\r\n\r\n    T* allocate(size_t n) const {\r\n        ++g_map[m_id];\r\n\r\n        return static_cast<T*>(::operator new(n * sizeof(T)));\r\n    }\r\n\r\n    template <typename U>\r\n    T* allocate(size_t n, const U*) const {\r\n        return allocate(n);\r\n    }\r\n\r\n    void deallocate(T* p, size_t) const {\r\n        --g_map[m_id];\r\n\r\n        ::operator delete(p);\r\n    }\r\n\r\n    size_t max_size() const {\r\n        return 1000000;\r\n    }\r\n\r\n    bool operator==(const MyAllocator& other) const {\r\n        return m_id == other.m_id;\r\n    }\r\n\r\n    bool operator!=(const MyAllocator& other) const {\r\n        return m_id != other.m_id;\r\n    }\r\n\r\n    MyAllocator() : m_id(g_next_id++) {}\r\n    MyAllocator(const MyAllocator& right) : m_id(right.m_id) {}\r\n    template <typename U>\r\n    MyAllocator(const MyAllocator<U>& right) : m_id(right.m_id) {}\r\n\r\n    void construct(T* p, const T& t) const {\r\n        new (static_cast<void*>(p)) T(t);\r\n    }\r\n\r\n    void destroy(T* p) const {\r\n        p->~T();\r\n    }\r\n\r\n    MyAllocator& operator=(const MyAllocator&);\r\n\r\n    size_t m_id;\r\n};\r\n\r\nvoid dump_map() {\r\n    for (auto&& entry : g_map) {\r\n        printf(\"ID: %zu | allocate - deallocate: %i\\n\", entry.first, entry.second);\r\n    }\r\n}\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4324) // structure was padded due to alignment specifier\r\nstruct alignas(64) OverAlignedInt {\r\n    int x;\r\n};\r\n#pragma warning(pop)\r\n\r\nvoid test_gh_2362() {\r\n    // GH-2362 suggests to add a debug-only nullptr assertion inside std::allocator<T>::deallocate, checking\r\n    // the pointer parameter. And deallocate must handle all return values of allocate, so if allocate(0) can return\r\n    // nullptr, then deallocate(nullptr, 0) must work.\r\n    {\r\n        allocator<int> al;\r\n        int* ptr = al.allocate(0);\r\n        al.deallocate(ptr, 0);\r\n    }\r\n    {\r\n        allocator<OverAlignedInt> al;\r\n        OverAlignedInt* ptr = al.allocate(0);\r\n        al.deallocate(ptr, 0);\r\n    }\r\n}\r\n\r\nint main() {\r\n    {\r\n        vector<double, MyAllocator<double>> v;\r\n        deque<double, MyAllocator<double>> d;\r\n        list<double, MyAllocator<double>> l;\r\n        forward_list<double, MyAllocator<double>> fl;\r\n        set<double, less<double>, MyAllocator<double>> s;\r\n        multiset<double, less<double>, MyAllocator<double>> ms;\r\n        map<float, double, less<float>, MyAllocator<pair<const float, double>>> m;\r\n        multimap<float, double, less<float>, MyAllocator<pair<const float, double>>> mm;\r\n        unordered_set<int, hash<int>, equal_to<int>, MyAllocator<int>> us;\r\n        unordered_multiset<int, hash<int>, equal_to<int>, MyAllocator<int>> ums;\r\n        unordered_map<int, int, hash<int>, equal_to<int>, MyAllocator<pair<const int, int>>> um;\r\n        unordered_multimap<int, int, hash<int>, equal_to<int>, MyAllocator<pair<const int, int>>> umm;\r\n    }\r\n\r\n    for (auto&& entry : g_map) {\r\n        if (entry.second != 0) {\r\n            dump_map();\r\n            abort();\r\n        }\r\n    }\r\n\r\n    test_gh_2362();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_130060_unique_copy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_130060_unique_copy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <iterator>\r\n#include <sstream>\r\n#include <string>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nstring join(const vector<int>& source) {\r\n    string result;\r\n    if (!source.empty()) {\r\n        result.append(to_string(source[0]));\r\n        for (size_t idx = 1; idx < source.size(); ++idx) {\r\n            result.push_back(' ');\r\n            result.append(to_string(source[idx]));\r\n        }\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nvoid test_case_forward_source(const vector<int>& source, const vector<int>& expected) {\r\n    vector<int> actual;\r\n    unique_copy(source.cbegin(), source.cend(), back_inserter(actual));\r\n    assert(actual == expected);\r\n}\r\n\r\nvoid test_case_forward_dest_same_t(const vector<int>& source, const vector<int>& expected) {\r\n    stringstream ss(join(source));\r\n    vector<int> actual(expected.size(), 0);\r\n    assert(unique_copy(istream_iterator<int>(ss), istream_iterator<int>(), actual.begin()) == actual.end());\r\n\r\n    assert(actual == expected);\r\n}\r\n\r\nvoid test_case_forward_dest_different_t(const vector<int>& source, const vector<int>& expected) {\r\n    stringstream ss(join(source));\r\n    vector<long> actual(expected.size(), 0);\r\n    assert(unique_copy(istream_iterator<int>(ss), istream_iterator<int>(), actual.begin()) == actual.end());\r\n\r\n    assert(equal(actual.cbegin(), actual.cend(), expected.cbegin(), expected.cend()));\r\n}\r\n\r\nvoid test_case_no_forwards(const vector<int>& source, const vector<int>& expected) {\r\n    stringstream ss(join(source));\r\n    vector<int> actual;\r\n    unique_copy(istream_iterator<int>(ss), istream_iterator<int>(), back_inserter(actual));\r\n\r\n    assert(actual == expected);\r\n}\r\n\r\nvoid test_case(const vector<int>& source, const vector<int>& expected) {\r\n    test_case_forward_source(source, expected);\r\n    test_case_forward_dest_same_t(source, expected);\r\n    test_case_forward_dest_different_t(source, expected);\r\n    test_case_no_forwards(source, expected);\r\n}\r\n\r\nint main() {\r\n    test_case({}, {});\r\n    test_case({1}, {1});\r\n    test_case({1, 1}, {1});\r\n    test_case({1, 2, 2, 3, 4, 4, 5}, {1, 2, 3, 4, 5});\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_152755_tr1_nested_bind/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_152755_tr1_nested_bind/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cmath>\r\n#include <functional>\r\n#include <vector>\r\n\r\nusing namespace std;\r\nusing namespace std::placeholders;\r\n\r\nclass point {\r\npublic:\r\n    point(double x, double y) : m_x(x), m_y(y) {}\r\n\r\n    double mag() const {\r\n        return sqrt(m_x * m_x + m_y * m_y);\r\n    }\r\n\r\nprivate:\r\n    double m_x;\r\n    double m_y;\r\n};\r\n\r\nint main() {\r\n    vector<point> v;\r\n\r\n    v.push_back(point(3, 4));\r\n    v.push_back(point(5, 12));\r\n    v.push_back(point(8, 15));\r\n\r\n    assert(count_if(v.begin(), v.end(), bind(greater<double>(), bind(&point::mag, _1), 10)) == 2);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_153419_tr1_allocators/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_153419_tr1_allocators/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// This defines a malloc()-based allocator named Mallocator, instrumented\r\n// to count the number of calls to malloc() and free().  It also replaces\r\n// the global allocation and deallocation functions, instrumenting them to\r\n// count the number of calls to new and delete.\r\n//\r\n// Then it exercises shared_ptr and function's new allocator-taking\r\n// interfaces, making sure that the Mallocator is actually used.\r\n//\r\n// Big is 7 * 64 bits to disable the Small Functor Optimization.\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <functional>\r\n#include <memory>\r\n#include <new>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\n\r\nint g_mallocs    = 0;\r\nint g_frees      = 0;\r\nint g_constructs = 0;\r\nint g_destroys   = 0;\r\n\r\ntemplate <typename T>\r\nstruct Mallocator {\r\n    typedef T* pointer;\r\n    typedef const T* const_pointer;\r\n    typedef T& reference;\r\n    typedef const T& const_reference;\r\n    typedef T value_type;\r\n    typedef size_t size_type;\r\n    typedef ptrdiff_t difference_type;\r\n\r\n    template <typename U>\r\n    struct rebind {\r\n        typedef Mallocator<U> other;\r\n    };\r\n\r\n    T* address(T& t) const {\r\n        return &t;\r\n    }\r\n\r\n    const T* address(const T& t) const {\r\n        return &t;\r\n    }\r\n\r\n    T* allocate(const size_t n) const {\r\n        ++g_mallocs;\r\n\r\n        if (n == 0) {\r\n            return nullptr;\r\n        }\r\n\r\n        return static_cast<T*>(malloc(n * sizeof(T)));\r\n    }\r\n\r\n    template <typename U>\r\n    T* allocate(const size_t n, const U*) const {\r\n        return allocate(n);\r\n    }\r\n\r\n    void deallocate(T* const p, size_t) const {\r\n        ++g_frees;\r\n\r\n        free(p);\r\n    }\r\n\r\n    size_t max_size() const {\r\n        return 1000000;\r\n    }\r\n\r\n    bool operator==(const Mallocator&) const {\r\n        return true;\r\n    }\r\n\r\n    bool operator!=(const Mallocator&) const {\r\n        return false;\r\n    }\r\n\r\n    Mallocator() {}\r\n\r\n    template <typename U>\r\n    Mallocator(const Mallocator<U>&) {}\r\n\r\n    template <typename... U>\r\n    void construct(T* const p, const U&... u) const {\r\n        ++g_constructs;\r\n\r\n        new (static_cast<void*>(p)) T(u...);\r\n    }\r\n\r\n    void destroy(T* const p) const {\r\n        ++g_destroys;\r\n\r\n        p->~T();\r\n    }\r\n};\r\n\r\nint g_news    = 0;\r\nint g_deletes = 0;\r\n\r\nvoid* operator new(size_t size) {\r\n    void* const p = ::operator new(size, nothrow);\r\n\r\n    if (p) {\r\n        return p;\r\n    } else {\r\n        throw bad_alloc();\r\n    }\r\n}\r\n\r\nvoid* operator new(size_t size, const nothrow_t&) noexcept {\r\n    ++g_news;\r\n\r\n    void* const result = malloc(size == 0 ? 1 : size);\r\n    if (result) {\r\n        memset(result, 0xDD, size);\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nvoid operator delete(void* ptr) noexcept {\r\n    ::operator delete(ptr, nothrow);\r\n}\r\n\r\nvoid operator delete(void* ptr, const nothrow_t&) noexcept {\r\n    if (ptr) {\r\n        ++g_deletes;\r\n\r\n        free(ptr);\r\n    }\r\n}\r\n\r\nvoid* operator new[](size_t size) {\r\n    return ::operator new(size);\r\n}\r\n\r\nvoid* operator new[](size_t size, const nothrow_t&) noexcept {\r\n    return ::operator new(size, nothrow);\r\n}\r\n\r\nvoid operator delete[](void* ptr) noexcept {\r\n    ::operator delete(ptr);\r\n}\r\n\r\nvoid operator delete[](void* ptr, const nothrow_t&) noexcept {\r\n    ::operator delete(ptr, nothrow);\r\n}\r\n\r\nvoid custom_deleter(int* const p) {\r\n    delete p;\r\n}\r\n\r\nvoid test(const int mallocs, const int frees, const int news, const int deletes, const int line) {\r\n    if (g_mallocs != mallocs) {\r\n        printf(\"FAIL: On line %d, g_mallocs is %d but should be %d.\\n\", line, g_mallocs, mallocs);\r\n        abort();\r\n    }\r\n\r\n    if (g_frees != frees) {\r\n        printf(\"FAIL: On line %d, g_frees is %d but should be %d.\\n\", line, g_frees, frees);\r\n        abort();\r\n    }\r\n\r\n    if (g_news != news) {\r\n        printf(\"FAIL: On line %d, g_news is %d but should be %d.\\n\", line, g_news, news);\r\n        abort();\r\n    }\r\n\r\n    if (g_deletes != deletes) {\r\n        printf(\"FAIL: On line %d, g_deletes is %d but should be %d.\\n\", line, g_deletes, deletes);\r\n        abort();\r\n    }\r\n}\r\n\r\nvoid test_constructors(const int constructs, const int destroys, const int line) {\r\n    if (g_constructs != constructs) {\r\n        printf(\"FAIL: On line %d, g_constructs is %d but should be %d.\\n\", line, g_constructs, constructs);\r\n        abort();\r\n    }\r\n\r\n    if (g_destroys != destroys) {\r\n        printf(\"FAIL: On line %d, g_destroys is %d but should be %d.\\n\", line, g_destroys, destroys);\r\n        abort();\r\n    }\r\n}\r\n\r\n#define TEST(A, B, C, D)        test(A, B, C, D, __LINE__)\r\n#define TEST_CONSTRUCTORS(A, B) test_constructors(A, B, __LINE__)\r\n\r\nvoid reset_counters() {\r\n    g_mallocs = g_frees = g_constructs = g_destroys = g_news = g_deletes = 0;\r\n    TEST(0, 0, 0, 0);\r\n    TEST_CONSTRUCTORS(0, 0);\r\n}\r\n\r\ntypedef unsigned long long ull_t;\r\n\r\nstruct Big {\r\n    Big(const ull_t a, const ull_t b, const ull_t c, const ull_t d)\r\n        : m_a(a), m_b(b), m_c(c), m_d(d), m_e(0), m_f(0), m_g(0) {}\r\n\r\n    ull_t operator()() const {\r\n        return m_a * m_b + m_c * m_d;\r\n    }\r\n\r\n    ull_t m_a;\r\n    ull_t m_b;\r\n    ull_t m_c;\r\n    ull_t m_d;\r\n    ull_t m_e;\r\n    ull_t m_f;\r\n    ull_t m_g;\r\n};\r\n\r\null_t func() {\r\n    return 0x12345678DEADBEEFULL;\r\n}\r\n\r\nint main() {\r\n    // Ignore any allocations that were performed during CRT startup.\r\n    reset_counters();\r\n\r\n    {\r\n        int* const raw = new int(47);\r\n\r\n        TEST(0, 0, 1, 0);\r\n\r\n        shared_ptr<int> sp(raw, custom_deleter, Mallocator<double>());\r\n\r\n        TEST(1, 0, 1, 0);\r\n\r\n        weak_ptr<int> wp(sp);\r\n\r\n        TEST(1, 0, 1, 0);\r\n\r\n        sp.reset();\r\n\r\n        TEST(1, 0, 1, 1);\r\n\r\n        wp.reset();\r\n\r\n        TEST(1, 1, 1, 1);\r\n    }\r\n\r\n    reset_counters();\r\n\r\n    {\r\n        int* const raw = new int(47);\r\n\r\n        TEST(0, 0, 1, 0);\r\n\r\n        shared_ptr<int> sp;\r\n\r\n        TEST(0, 0, 1, 0);\r\n\r\n        sp.reset(raw, custom_deleter, Mallocator<double>());\r\n\r\n        TEST(1, 0, 1, 0);\r\n\r\n        weak_ptr<int> wp(sp);\r\n\r\n        TEST(1, 0, 1, 0);\r\n\r\n        sp.reset();\r\n\r\n        TEST(1, 0, 1, 1);\r\n\r\n        wp.reset();\r\n\r\n        TEST(1, 1, 1, 1);\r\n    }\r\n\r\n    reset_counters();\r\n\r\n    {\r\n        shared_ptr<int> sp;\r\n\r\n        TEST(0, 0, 0, 0);\r\n\r\n        sp = allocate_shared<int>(Mallocator<double>(), 1729);\r\n\r\n        TEST(1, 0, 0, 0);\r\n\r\n        weak_ptr<int> wp(sp);\r\n\r\n        TEST(1, 0, 0, 0);\r\n\r\n        sp.reset();\r\n\r\n        TEST(1, 0, 0, 0);\r\n\r\n        wp.reset();\r\n\r\n        TEST(1, 1, 0, 0);\r\n    }\r\n\r\n    reset_counters();\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n    {\r\n        function<ull_t()> f(allocator_arg, Mallocator<double>(), Big(10, 20, 30, 40));\r\n\r\n        TEST(1, 0, 0, 0);\r\n\r\n        f = nullptr;\r\n\r\n        TEST(1, 1, 0, 0);\r\n    }\r\n\r\n    reset_counters();\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n\r\n    {\r\n        function<ull_t()> f = func;\r\n\r\n        TEST(0, 0, 0, 0);\r\n\r\n        f = nullptr;\r\n\r\n        TEST(0, 0, 0, 0);\r\n\r\n        f = func;\r\n\r\n        TEST(0, 0, 0, 0);\r\n\r\n        f = nullptr;\r\n\r\n        TEST(0, 0, 0, 0);\r\n    }\r\n\r\n    reset_counters();\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n    {\r\n        function<ull_t()> f(allocator_arg, Mallocator<double>(), func);\r\n\r\n        TEST(0, 0, 0, 0);\r\n\r\n        f = nullptr;\r\n\r\n        TEST(0, 0, 0, 0);\r\n    }\r\n\r\n    reset_counters();\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n\r\n    {\r\n        Big b(10, 20, 30, 40);\r\n\r\n        function<ull_t()> f = ref(b);\r\n\r\n        TEST(0, 0, 0, 0);\r\n\r\n        f = nullptr;\r\n\r\n        TEST(0, 0, 0, 0);\r\n\r\n        f = ref(b);\r\n\r\n        TEST(0, 0, 0, 0);\r\n\r\n        f = nullptr;\r\n\r\n        TEST(0, 0, 0, 0);\r\n    }\r\n\r\n    reset_counters();\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n    {\r\n        Big b(10, 20, 30, 40);\r\n\r\n        function<ull_t()> f(allocator_arg, Mallocator<double>(), ref(b));\r\n\r\n        TEST(0, 0, 0, 0);\r\n\r\n        f = nullptr;\r\n\r\n        TEST(0, 0, 0, 0);\r\n    }\r\n\r\n    reset_counters();\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n\r\n    {\r\n        // Test Dev10-531321 \"function: tr1::function memory leak\".\r\n\r\n        Big b(10, 20, 30, 40);\r\n        function<ull_t()> f;\r\n\r\n        TEST(0, 0, 0, 0);\r\n\r\n        f = b;\r\n        TEST(0, 0, 1, 0);\r\n        f = b;\r\n        TEST(0, 0, 2, 1);\r\n        f = nullptr;\r\n        TEST(0, 0, 2, 2);\r\n    }\r\n\r\n    reset_counters();\r\n\r\n    {\r\n        // Test (indirectly) _Uninitialized_fill_n with non-default allocator\r\n        vector<char, Mallocator<char>> vec(3, static_cast<char>(-2));\r\n        TEST_CONSTRUCTORS(3, 0);\r\n        for (char c : vec) {\r\n            assert(c == static_cast<char>(-2));\r\n        }\r\n\r\n        // Test (indirectly) _Uninitialized_copy with non-default allocator\r\n        vector<char, Mallocator<char>> vecCopy(vec);\r\n        TEST_CONSTRUCTORS(6, 0);\r\n\r\n        // Test (indirectly) _Uninitialized_move with non-default allocator\r\n        vec.reserve(100);\r\n        TEST_CONSTRUCTORS(9, 3);\r\n\r\n        // Test (indirectly) _Destroy_range with non-default allocator\r\n        vec.clear();\r\n        TEST_CONSTRUCTORS(9, 6);\r\n    }\r\n\r\n    reset_counters();\r\n\r\n    {\r\n        // Test (indirectly) _Uninitialized_default_fill_n with non-default allocator\r\n        vector<char, Mallocator<char>> vec(3);\r\n        TEST_CONSTRUCTORS(3, 0);\r\n        if (any_of(vec.begin(), vec.end(), [](char x) { return x != '\\0'; })) {\r\n            puts(\"vector didn't clear its contents\");\r\n            abort();\r\n        }\r\n\r\n        vec.clear();\r\n\r\n        TEST_CONSTRUCTORS(3, 3);\r\n    }\r\n\r\n    reset_counters();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_154033_tr1_predicate_search_n/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_154033_tr1_predicate_search_n/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <vector>\r\n\r\nstruct X {\r\n    explicit X(const int n) : m_n(n) {}\r\n\r\n    int m_n;\r\n};\r\n\r\nbool parity(const X& a, const X& b) {\r\n    return a.m_n % 2 == b.m_n % 2;\r\n}\r\n\r\nint main() {\r\n    const int arr[] = {1, 2, 3, 4, 6, 7, 9, 10, 12, 14, 15, 17, 19, 20};\r\n\r\n    std::vector<X> v;\r\n\r\n    for (const auto& e : arr) {\r\n        v.emplace_back(e);\r\n    }\r\n\r\n    const X x(99);\r\n\r\n    const std::vector<X>::const_iterator p = std::search_n(v.begin(), v.end(), 3, x, parity);\r\n\r\n    assert(p != v.end() && p->m_n == 15);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_155328_tr1_vector_of_set/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_155328_tr1_vector_of_set/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <set>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    vector<set<int>> v;\r\n\r\n    v.push_back(set<int>());\r\n\r\n    v[0].insert(55);\r\n\r\n    v.push_back(v[0]);\r\n\r\n    assert(v[1].size() == 1);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_158181_tr1_unordered_meow_swap/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_158181_tr1_unordered_meow_swap/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cmath>\r\n#include <cstdlib>\r\n#include <limits>\r\n#include <stdexcept>\r\n#include <unordered_set>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nconstexpr auto size_max = numeric_limits<size_t>::max();\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nvoid assert_is_pow2(const size_t value) {\r\n    assert(value != 0 && ((value & (value - 1)) == 0));\r\n}\r\n\r\nvoid assert_close(const float f, const float g) {\r\n    assert(abs(f - g) < 0.01f);\r\n}\r\n\r\ntemplate <typename X, typename Fx>\r\nvoid assert_throws(Fx fn) noexcept {\r\n    try {\r\n        fn();\r\n        abort();\r\n    } catch (const X&) {\r\n    }\r\n}\r\n\r\n// Test DDB-158181. unordered_set.swap() was O(N), throwing, and invalidating iterators, which was bad.\r\nvoid test_ddb_158181() {\r\n    unordered_set<int> x;\r\n    x.insert(11);\r\n    x.insert(21);\r\n    x.insert(31);\r\n\r\n    unordered_set<int> y;\r\n    y.insert(42);\r\n    y.insert(52);\r\n    y.insert(62);\r\n\r\n    const auto a = x.cbegin();\r\n    const auto b = y.cbegin();\r\n\r\n    const int a1 = *a;\r\n    const int b1 = *b;\r\n\r\n    x.swap(y);\r\n\r\n    STATIC_ASSERT(noexcept(x.swap(y)));\r\n\r\n    const int a2 = *a;\r\n    const int b2 = *b;\r\n\r\n    assert(a1 == a2 && b1 == b2);\r\n}\r\n\r\n// Also test swapping/assigning max_load_factor(), broken in VS 2015 RTM.\r\nvoid test_max_load_factor() {\r\n    unordered_set<int> x{10, 11, 12, 13, 14};\r\n    unordered_set<int> y{20, 21, 22, 23, 24};\r\n    unordered_set<int> z{30, 31, 32, 33, 34};\r\n\r\n    x.max_load_factor(1.1f);\r\n    y.max_load_factor(2.2f);\r\n    z.max_load_factor(3.3f);\r\n\r\n    assert_close(x.max_load_factor(), 1.1f);\r\n    assert_close(y.max_load_factor(), 2.2f);\r\n    assert_close(z.max_load_factor(), 3.3f);\r\n\r\n    x.swap(y);\r\n\r\n    assert_close(x.max_load_factor(), 2.2f);\r\n    assert_close(y.max_load_factor(), 1.1f);\r\n\r\n    x = y;\r\n\r\n    assert_close(x.max_load_factor(), 1.1f);\r\n    assert_close(y.max_load_factor(), 1.1f);\r\n\r\n    x = move(z);\r\n\r\n    assert_close(x.max_load_factor(), 3.3f);\r\n}\r\n\r\nvoid test_floor_log2() {\r\n    assert(_Floor_of_log_2(0) == 0);\r\n    size_t expected = 0;\r\n    for (size_t test = 2; test != 0; test <<= 1) {\r\n        assert(_Floor_of_log_2(test - 1) == expected);\r\n        ++expected;\r\n        assert(_Floor_of_log_2(test) == expected);\r\n        assert(_Floor_of_log_2(test + 1) == expected);\r\n    }\r\n}\r\n\r\nvoid test_LWG_2156() {\r\n    unordered_set<int> x;\r\n\r\n    x.max_load_factor(5.0f);\r\n    for (int i = 0; i < 100; ++i) {\r\n        x.emplace(i);\r\n        assert_is_pow2(x.bucket_count()); // MSVC-specific invariant\r\n    }\r\n\r\n    const auto afterEmplaceBuckets = x.bucket_count();\r\n    x.max_load_factor(1.0f); // break usual container attempt to maintain bucket_count() >= size() / max_load_factor()\r\n    assert(!(x.load_factor() <= x.max_load_factor())); // assert invariant broken\r\n    assert(afterEmplaceBuckets == x.bucket_count()); // max_load_factor must not rehash the container\r\n    x.rehash(0); // container will have to choose more buckets to restore bucket_count() >= size() / max_load_factor()\r\n    const auto afterRehashBuckets = x.bucket_count();\r\n    assert_is_pow2(afterRehashBuckets);\r\n    assert(afterRehashBuckets >= x.size()); // check postcondition directly\r\n    assert(x.load_factor() <= x.max_load_factor());\r\n    x.erase(0); // keeping the same number of elements must not cause a rehash\r\n    x.emplace(0);\r\n    assert(x.bucket_count() == afterRehashBuckets);\r\n\r\n    assert_throws<length_error>([&] { x.rehash(size_max); });\r\n    assert_throws<length_error>([&] { x.rehash(size_max / 2); });\r\n\r\n#ifndef _WIN64\r\n    // make it so rehash can't meet its postcondition, even when not asking for more buckets\r\n    // skip on 64 bit because creating reasonable container sizes to trigger this problem there\r\n    // consumes too much RAM.\r\n    x.max_load_factor(FLT_EPSILON);\r\n    assert_throws<length_error>([&] { x.rehash(0); });\r\n#endif // !_WIN64\r\n}\r\n\r\nvoid test_bad_rehash_size() {\r\n    unordered_set<size_t> x;\r\n    x.max_load_factor(1.0f);\r\n    const auto initialBuckets = x.bucket_count();\r\n    for (size_t i = 0; i < initialBuckets; ++i) {\r\n        x.emplace(i);\r\n    }\r\n\r\n    assert(x.bucket_count() == initialBuckets); // the above shouldn't have rehashed\r\n    assert(x.load_factor() <= x.max_load_factor());\r\n    x.max_load_factor(1.0f / 64.0f); // force 64 buckets per element, so that multiply by 8 on emplace insufficient\r\n    x.emplace(initialBuckets); // trigger rehash\r\n    assert(x.bucket_count() > initialBuckets);\r\n    assert(x.load_factor() <= x.max_load_factor());\r\n}\r\n\r\nint main() {\r\n    test_ddb_158181();\r\n    test_max_load_factor();\r\n    test_floor_log2();\r\n    test_LWG_2156();\r\n    test_bad_rehash_size();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_158457_tr1_mem_fn_calling_conventions/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\callconv_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_158457_tr1_mem_fn_calling_conventions/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n#include <type_traits>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nusing namespace std;\r\n\r\n#if defined(_M_IX86) && _M_IX86_FP < 2\r\n#error On x86, this test assumes _M_IX86_FP >= 2\r\n#endif\r\n\r\nstruct Cat {\r\n    int a() {\r\n        return 2000000;\r\n    }\r\n\r\n#if !defined(_M_CEE_PURE)\r\n    int __thiscall b() {\r\n        return 200000;\r\n    }\r\n#else\r\n    int b() {\r\n        return 100000;\r\n    }\r\n#endif\r\n\r\n#if defined(_M_IX86) && !defined(_M_CEE_PURE)\r\n    int __cdecl c() {\r\n        return 20000;\r\n    }\r\n    int __stdcall d() {\r\n        return 2000;\r\n    }\r\n#else\r\n    int c() {\r\n        return 10000;\r\n    }\r\n    int d() {\r\n        return 1000;\r\n    }\r\n#endif\r\n\r\n#if defined(_M_IX86) && !defined(_M_CEE)\r\n    int __fastcall e() {\r\n        return 200;\r\n    }\r\n#else\r\n    int e() {\r\n        return 100;\r\n    }\r\n#endif\r\n\r\n#if defined(_M_CEE)\r\n    int __clrcall f() {\r\n        return 20;\r\n    }\r\n#else\r\n    int f() {\r\n        return 10;\r\n    }\r\n#endif\r\n\r\n#if (defined(_M_IX86) || (defined(_M_X64) && !defined(_M_ARM64EC))) && !defined(_M_CEE)\r\n    int __vectorcall g() {\r\n        return 2;\r\n    }\r\n#else\r\n    int g() {\r\n        return 1;\r\n    }\r\n#endif\r\n};\r\n\r\nint u(int i) {\r\n    return -400000 * i;\r\n}\r\n\r\n#if defined(_M_IX86) && !defined(_M_CEE_PURE)\r\nint __cdecl v(int i) {\r\n    return -40000 * i;\r\n}\r\nint __stdcall w(int i) {\r\n    return -4000 * i;\r\n}\r\n#else\r\nint v(int i) {\r\n    return -30000 * i;\r\n}\r\nint w(int i) {\r\n    return -3000 * i;\r\n}\r\n#endif\r\n\r\n#if defined(_M_IX86) && !defined(_M_CEE)\r\nint __fastcall x(int i) {\r\n    return -400 * i;\r\n}\r\n#else\r\nint x(int i) {\r\n    return -300 * i;\r\n}\r\n#endif\r\n\r\n#if defined(_M_CEE)\r\nint __clrcall y(int i) {\r\n    return -40 * i;\r\n}\r\n#else\r\nint y(int i) {\r\n    return -30 * i;\r\n}\r\n#endif\r\n\r\n#if (defined(_M_IX86) || (defined(_M_X64) && !defined(_M_ARM64EC))) && !defined(_M_CEE)\r\nint __vectorcall z(int i) {\r\n    return -4 * i;\r\n}\r\n#else\r\nint z(int i) {\r\n    return -3 * i;\r\n}\r\n#endif\r\n\r\n#if defined(_M_IX86)\r\n#if !defined(_M_CEE)\r\nconst int member_correct = 2222212; // x86 native\r\nconst int free_correct   = 444434; // x86 native\r\n#elif !defined(_M_CEE_PURE)\r\nconst int member_correct = 2222121; // x86 ijw\r\nconst int free_correct   = 444343; // x86 ijw\r\n#else\r\nconst int member_correct = 2111121; // x86 pure\r\nconst int free_correct   = 433343; // x86 pure\r\n#endif\r\n#elif defined(_M_X64) && !defined(_M_ARM64EC)\r\n#if !defined(_M_CEE)\r\nconst int member_correct = 2211112; // x64 native\r\nconst int free_correct   = 433334; // x64 native\r\n#elif !defined(_M_CEE_PURE)\r\nconst int member_correct = 2211121; // x64 ijw\r\nconst int free_correct   = 433343; // x64 ijw\r\n#else\r\nconst int member_correct = 2111121; // x64 pure\r\nconst int free_correct   = 433343; // x64 pure\r\n#endif\r\n#else\r\n#if !defined(_M_CEE)\r\nconst int member_correct = 2211111; // arm64/arm64ec native\r\nconst int free_correct   = 433333; // arm64/arm64ec native\r\n#elif !defined(_M_CEE_PURE)\r\nconst int member_correct = 2211121; // arm64/arm64ec ijw\r\nconst int free_correct   = 433343; // arm64/arm64ec ijw\r\n#else\r\nconst int member_correct = 2111121; // arm64/arm64ec pure\r\nconst int free_correct   = 433343; // arm64/arm64ec pure\r\n#endif\r\n#endif\r\n\r\nSTATIC_ASSERT(is_member_function_pointer_v<decltype(&Cat::a)>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<decltype(&Cat::b)>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<decltype(&Cat::c)>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<decltype(&Cat::d)>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<decltype(&Cat::e)>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<decltype(&Cat::f)>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<decltype(&Cat::g)>);\r\n\r\nSTATIC_ASSERT(is_member_pointer_v<decltype(&Cat::a)>);\r\nSTATIC_ASSERT(is_member_pointer_v<decltype(&Cat::b)>);\r\nSTATIC_ASSERT(is_member_pointer_v<decltype(&Cat::c)>);\r\nSTATIC_ASSERT(is_member_pointer_v<decltype(&Cat::d)>);\r\nSTATIC_ASSERT(is_member_pointer_v<decltype(&Cat::e)>);\r\nSTATIC_ASSERT(is_member_pointer_v<decltype(&Cat::f)>);\r\nSTATIC_ASSERT(is_member_pointer_v<decltype(&Cat::g)>);\r\n\r\nSTATIC_ASSERT(is_function_v<decltype(u)>);\r\nSTATIC_ASSERT(is_function_v<decltype(v)>);\r\nSTATIC_ASSERT(is_function_v<decltype(w)>);\r\nSTATIC_ASSERT(is_function_v<decltype(x)>);\r\nSTATIC_ASSERT(is_function_v<decltype(y)>);\r\nSTATIC_ASSERT(is_function_v<decltype(z)>);\r\n\r\n\r\n// use_mem_fn() works around the fact that we can't always decompose and recompose PMF types. Consider\r\n// x86 /Gd (the default), where non-members default to __cdecl and members default to __thiscall. When\r\n// a member has been marked as __cdecl, like &Cat::c, we can't give it to mem_fn(). We're required to\r\n// provide the signature mem_fn(R T::*). Template argument deduction decomposes the PMF type into an\r\n// ordinary function type, then substitution recomposes the PMF type. This works for default calling\r\n// conventions (__thiscall PMFs become __cdecl non-members and back). It also works for fancy calling\r\n// conventions (e.g. __stdcall PMFs become __stdcall non-members and back). However, it fails when the\r\n// PMF's calling convention is what non-members have by default. A __cdecl PMF becomes a __cdecl\r\n// non-member, then recomposition produces a __thiscall PMF. use_mem_fn() allows us to ignore this\r\n// problem. When recomposition succeeds (as it usually does), both use_mem_fn(R Cat::*) and\r\n// use_mem_fn(PMF) are viable, and use_mem_fn(R Cat::*) is chosen because it's more specialized. When\r\n// recomposition fails, use_mem_fn(R Cat::*) is non-viable, so use_mem_fn(PMF) is chosen. (In Standard\r\n// code, it's entirely possible for template argument deduction to succeed, but for the overload to be\r\n// non-viable.)\r\n\r\ntemplate <typename R>\r\nint use_mem_fn(R Cat::* pmf) {\r\n    Cat cat;\r\n    return mem_fn(pmf)(cat);\r\n}\r\n\r\ntemplate <typename PMF>\r\nint use_mem_fn(PMF pmf) {\r\n    Cat cat;\r\n    return (cat.*pmf)();\r\n}\r\n\r\n#ifdef _M_CEE_PURE\r\nint main() {\r\n#else\r\nint __cdecl main() {\r\n#endif\r\n    Cat cat;\r\n    int n = 0;\r\n\r\n    n = 0;\r\n    n += use_mem_fn(&Cat::a);\r\n    n += use_mem_fn(&Cat::b);\r\n    n += use_mem_fn(&Cat::c);\r\n    n += use_mem_fn(&Cat::d);\r\n    n += use_mem_fn(&Cat::e);\r\n    n += use_mem_fn(&Cat::f);\r\n    n += use_mem_fn(&Cat::g);\r\n    assert(n == member_correct);\r\n\r\n    n = 0;\r\n    n += bind(&Cat::a, cat)();\r\n    n += bind(&Cat::b, cat)();\r\n    n += bind(&Cat::c, cat)();\r\n    n += bind(&Cat::d, cat)();\r\n    n += bind(&Cat::e, cat)();\r\n    n += bind(&Cat::f, cat)();\r\n    n += bind(&Cat::g, cat)();\r\n    assert(n == member_correct);\r\n\r\n    n = 0;\r\n    n += bind(u, -1)();\r\n    n += bind(v, -1)();\r\n    n += bind(w, -1)();\r\n    n += bind(x, -1)();\r\n    n += bind(y, -1)();\r\n    n += bind(z, -1)();\r\n    assert(n == free_correct);\r\n\r\n    n = 0;\r\n    n += bind(&u, -1)();\r\n    n += bind(&v, -1)();\r\n    n += bind(&w, -1)();\r\n    n += bind(&x, -1)();\r\n    n += bind(&y, -1)();\r\n    n += bind(&z, -1)();\r\n    assert(n == free_correct);\r\n\r\n    n = 0;\r\n    n += function<int(Cat&)>(&Cat::a)(cat);\r\n    n += function<int(Cat&)>(&Cat::b)(cat);\r\n    n += function<int(Cat&)>(&Cat::c)(cat);\r\n    n += function<int(Cat&)>(&Cat::d)(cat);\r\n    n += function<int(Cat&)>(&Cat::e)(cat);\r\n    n += function<int(Cat&)>(&Cat::f)(cat);\r\n    n += function<int(Cat&)>(&Cat::g)(cat);\r\n    assert(n == member_correct);\r\n\r\n    n = 0;\r\n    n += function<int(int)>(u)(-1);\r\n    n += function<int(int)>(v)(-1);\r\n    n += function<int(int)>(w)(-1);\r\n    n += function<int(int)>(x)(-1);\r\n    n += function<int(int)>(y)(-1);\r\n    n += function<int(int)>(z)(-1);\r\n    assert(n == free_correct);\r\n\r\n    n = 0;\r\n    n += function<int(int)>(&u)(-1);\r\n    n += function<int(int)>(&v)(-1);\r\n    n += function<int(int)>(&w)(-1);\r\n    n += function<int(int)>(&x)(-1);\r\n    n += function<int(int)>(&y)(-1);\r\n    n += function<int(int)>(&z)(-1);\r\n    assert(n == free_correct);\r\n\r\n    auto pmf_a = &Cat::a;\r\n    auto pmf_b = &Cat::b;\r\n    auto pmf_c = &Cat::c;\r\n    auto pmf_d = &Cat::d;\r\n    auto pmf_e = &Cat::e;\r\n    auto pmf_f = &Cat::f;\r\n    auto pmf_g = &Cat::g;\r\n\r\n    n = 0;\r\n    n += ref(pmf_a)(cat);\r\n    n += ref(pmf_b)(cat);\r\n    n += ref(pmf_c)(cat);\r\n    n += ref(pmf_d)(cat);\r\n    n += ref(pmf_e)(cat);\r\n    n += ref(pmf_f)(cat);\r\n    n += ref(pmf_g)(cat);\r\n    assert(n == member_correct);\r\n\r\n    n = 0;\r\n    n += cref(pmf_a)(cat);\r\n    n += cref(pmf_b)(cat);\r\n    n += cref(pmf_c)(cat);\r\n    n += cref(pmf_d)(cat);\r\n    n += cref(pmf_e)(cat);\r\n    n += cref(pmf_f)(cat);\r\n    n += cref(pmf_g)(cat);\r\n    assert(n == member_correct);\r\n\r\n    n = 0;\r\n    n += ref(u)(-1);\r\n    n += ref(v)(-1);\r\n    n += ref(w)(-1);\r\n    n += ref(x)(-1);\r\n    n += ref(y)(-1);\r\n    n += ref(z)(-1);\r\n    assert(n == free_correct);\r\n\r\n    n = 0;\r\n    n += cref(u)(-1);\r\n    n += cref(v)(-1);\r\n    n += cref(w)(-1);\r\n    n += cref(x)(-1);\r\n    n += cref(y)(-1);\r\n    n += cref(z)(-1);\r\n    assert(n == free_correct);\r\n\r\n    auto pf_u = &u;\r\n    auto pf_v = &v;\r\n    auto pf_w = &w;\r\n    auto pf_x = &x;\r\n    auto pf_y = &y;\r\n    auto pf_z = &z;\r\n\r\n    n = 0;\r\n    n += ref(pf_u)(-1);\r\n    n += ref(pf_v)(-1);\r\n    n += ref(pf_w)(-1);\r\n    n += ref(pf_x)(-1);\r\n    n += ref(pf_y)(-1);\r\n    n += ref(pf_z)(-1);\r\n    assert(n == free_correct);\r\n\r\n    n = 0;\r\n    n += cref(pf_u)(-1);\r\n    n += cref(pf_v)(-1);\r\n    n += cref(pf_w)(-1);\r\n    n += cref(pf_x)(-1);\r\n    n += cref(pf_y)(-1);\r\n    n += cref(pf_z)(-1);\r\n    assert(n == free_correct);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_161106_tr1_bind_templated_fxn_call_operator/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_161106_tr1_bind_templated_fxn_call_operator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n\r\nusing namespace std;\r\nusing namespace std::placeholders;\r\n\r\nstruct Div {\r\n    template <typename T, typename U>\r\n    T operator()(const T& left, const U& right) const {\r\n        return left / right;\r\n    }\r\n};\r\n\r\nint main() {\r\n    const Div div{};\r\n\r\n    const int a = 16;\r\n    const int b = 3;\r\n    const int i = bind(div, a, _1)(b);\r\n\r\n    assert(i == 5);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_165853_tr1_tuple_swap/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_165853_tr1_tuple_swap/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <tuple>\r\n#include <utility>\r\n\r\nint main() {\r\n    using tuple_t = std::tuple<int, std::string>;\r\n\r\n    const tuple_t one(1, \"one\");\r\n    const tuple_t two(2, \"two\");\r\n\r\n    tuple_t x = one;\r\n    tuple_t y = two;\r\n\r\n    assert(x == one && y == two);\r\n\r\n    x.swap(y);\r\n\r\n    assert(y == one && x == two);\r\n\r\n    std::swap(x, y);\r\n\r\n    assert(x == one && y == two);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_171205_tr1_assign_pair_to_tuple/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_171205_tr1_assign_pair_to_tuple/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <tuple>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    int a = 0;\r\n    int b = 0;\r\n\r\n    pair<int, int> p(1, 2);\r\n\r\n    tie(a, b) = p;\r\n\r\n    assert(a == 1 && b == 2);\r\n\r\n    const pair<int, int> q(3, 4);\r\n\r\n    tie(a, b) = q;\r\n\r\n    assert(a == 3 && b == 4);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_172497_tr1_mem_fn_const_correctness/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_172497_tr1_mem_fn_const_correctness/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _HAS_DEPRECATED_ADAPTOR_TYPEDEFS 1\r\n#define _SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING\r\n\r\n#include <functional>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nstruct Cat {\r\n    float meow() {\r\n        return 11.1f;\r\n    }\r\n    float meow_c() const {\r\n        return 11.1f;\r\n    }\r\n    float meow_v() volatile {\r\n        return 11.1f;\r\n    }\r\n    float meow_cv() const volatile {\r\n        return 11.1f;\r\n    }\r\n\r\n    double purr(int) {\r\n        return 22.2;\r\n    }\r\n    double purr_c(int) const {\r\n        return 22.2;\r\n    }\r\n    double purr_v(int) volatile {\r\n        return 22.2;\r\n    }\r\n    double purr_cv(int) const volatile {\r\n        return 22.2;\r\n    }\r\n\r\n    long double hiss(int, int) {\r\n        return 33.3l;\r\n    }\r\n    long double hiss_c(int, int) const {\r\n        return 33.3l;\r\n    }\r\n    long double hiss_v(int, int) volatile {\r\n        return 33.3l;\r\n    }\r\n    long double hiss_cv(int, int) const volatile {\r\n        return 33.3l;\r\n    }\r\n};\r\n\r\n// N4659 [depr.func.adaptor.typedefs]/10: \"The simple call wrapper returned from a call to mem_fn(pm) shall define two\r\n// nested types named argument_type and result_type as synonyms for cv T* and Ret, respectively, when pm is a pointer to\r\n// member function with cv-qualifier cv and taking no arguments, where Ret is pm's return type.\"\r\ntemplate <typename Ptr, typename F>\r\nvoid test_unary(F) {\r\n    STATIC_ASSERT(is_same_v<typename F::argument_type, Ptr>);\r\n    STATIC_ASSERT(is_same_v<typename F::result_type, float>);\r\n}\r\n\r\n// N4659 [depr.func.adaptor.typedefs]/11: \"The simple call wrapper returned from a call to mem_fn(pm) shall define three\r\n// nested types named first_argument_type, second_argument_type, and result_type as synonyms for cv T*, T1, and Ret,\r\n// respectively, when pm is a pointer to member function with cv-qualifier cv and taking one argument\r\n// of type T1, where Ret is pm's return type.\"\r\ntemplate <typename Ptr, typename F>\r\nvoid test_binary(F) {\r\n    STATIC_ASSERT(is_same_v<typename F::first_argument_type, Ptr>);\r\n    STATIC_ASSERT(is_same_v<typename F::second_argument_type, int>);\r\n    STATIC_ASSERT(is_same_v<typename F::result_type, double>);\r\n}\r\n\r\n// N4659 [depr.func.adaptor.typedefs]/9: \"The simple call wrapper returned from a call to mem_fn(pm) shall have a\r\n// nested type result_type that is a synonym for the return type of pm when pm is a pointer to member function.\"\r\ntemplate <typename F>\r\nvoid test_ternary(F) {\r\n    STATIC_ASSERT(is_same_v<typename F::result_type, long double>);\r\n}\r\n\r\nint main() {\r\n    test_unary<Cat*>(mem_fn(&Cat::meow));\r\n    test_unary<const Cat*>(mem_fn(&Cat::meow_c));\r\n    test_unary<volatile Cat*>(mem_fn(&Cat::meow_v));\r\n    test_unary<const volatile Cat*>(mem_fn(&Cat::meow_cv));\r\n\r\n    test_binary<Cat*>(mem_fn(&Cat::purr));\r\n    test_binary<const Cat*>(mem_fn(&Cat::purr_c));\r\n    test_binary<volatile Cat*>(mem_fn(&Cat::purr_v));\r\n    test_binary<const volatile Cat*>(mem_fn(&Cat::purr_cv));\r\n\r\n    test_ternary(mem_fn(&Cat::hiss));\r\n    test_ternary(mem_fn(&Cat::hiss_c));\r\n    test_ternary(mem_fn(&Cat::hiss_v));\r\n    test_ternary(mem_fn(&Cat::hiss_cv));\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_172505_tr1_bind_reference_wrapper/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_172505_tr1_bind_reference_wrapper/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n\r\nusing namespace std;\r\n\r\nstruct Cat {\r\n    int m_n;\r\n\r\n    void square() {\r\n        m_n *= m_n;\r\n    }\r\n};\r\n\r\nint main() {\r\n    Cat c = {4};\r\n\r\n    bind(&Cat::square, ref(c))();\r\n\r\n    assert(c.m_n == 16);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_172666_tr1_tuple_odr/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_172666_tr1_tuple_odr/custom_format.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\n\r\nfrom stl.test.format import STLTestFormat, TestStep\r\nfrom stl.test.tests import TestType\r\n\r\n\r\nclass CustomTestFormat(STLTestFormat):\r\n    def getBuildSteps(self, test, litConfig, shared):\r\n        exeSource = test.getSourcePath()\r\n        test2Source = os.path.join(os.path.dirname(exeSource), 'test2.cpp')\r\n\r\n        _, outputBase = test.getTempPaths()\r\n\r\n        if TestType.COMPILE in test.testType:\r\n            cmd = [test.cxx, '/c', exeSource, test2Source, *test.flags, *test.compileFlags]\r\n        elif TestType.RUN in test.testType:\r\n            shared.execFile = outputBase + '.exe'\r\n            cmd = [test.cxx, exeSource, test2Source, *test.flags, *test.compileFlags, '/Fe' + shared.execFile,\r\n                   '/link', *test.linkFlags]\r\n\r\n        yield TestStep(cmd, shared.execDir, shared.env, False)\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_172666_tr1_tuple_odr/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_172666_tr1_tuple_odr/lit.local.cfg",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\nimport site\r\nsite.addsitedir(os.path.dirname(os.path.dirname(__file__)))\r\nimport Dev09_172666_tr1_tuple_odr.custom_format\r\n\r\nconfig.test_format = Dev09_172666_tr1_tuple_odr.custom_format.CustomTestFormat()\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_172666_tr1_tuple_odr/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING\r\n\r\n#include <__msvc_all_public_headers.hpp>\r\n#include <cassert>\r\n\r\n#include <experimental_filesystem.hpp>\r\n\r\nint meow();\r\n\r\nint main() {\r\n    assert(meow() == 1729);\r\n\r\n    // Test for DevDiv-1004799: <filesystem>: /Zc:wchar_t- fails.\r\n    // Calling file_size should cause the failure to occur if we are wchar_t incorrect.\r\n#if defined(_M_CEE_PURE) && !defined(_NATIVE_WCHAR_T_DEFINED)\r\n    // Test is disabled if compiled with /clr:pure and /Zc:wchar_t-, as it triggers\r\n    // LNK2031: calling convention missing in metadata errors, which are irrelevant here.\r\n#else // ^^^ workaround / no workaround vvv\r\n    {\r\n        namespace fs = std::experimental::filesystem;\r\n        assert(fs::file_size(fs::current_path() / \"Dev09_172666_tr1_tuple_odr.exe\") != 0u);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    assert(std::filesystem::file_size(std::filesystem::current_path() / \"Dev09_172666_tr1_tuple_odr.exe\") != 0u);\r\n#endif // _HAS_CXX17\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_172666_tr1_tuple_odr/test2.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <__msvc_all_public_headers.hpp>\r\n\r\nint meow() {\r\n    return 1729;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_173612_tr1_regex_leak/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_173612_tr1_regex_leak/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <locale>\r\n#include <new>\r\n#include <regex>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\n\r\nconst int N = 1000;\r\n\r\nint g_scalars                 = 0;\r\nint g_arrays                  = 0;\r\nvoid* g_scalar_allocations[N] = {nullptr};\r\nvoid* g_array_allocations[N]  = {nullptr};\r\n\r\nvoid meta_new(void* p, void** allocations, const char* type) {\r\n    for (int i = 0; i < N; ++i) {\r\n        if (allocations[i] == p) {\r\n            printf(\"meta_new(): The %s allocation %p already exists!\\n\", type, p);\r\n            abort();\r\n        }\r\n    }\r\n\r\n    for (int i = 0; i < N; ++i) {\r\n        if (allocations[i] == nullptr) {\r\n            allocations[i] = p;\r\n            return;\r\n        }\r\n    }\r\n\r\n    printf(\"meta_new(): We performed over %d %s allocations!\\n\", N, type);\r\n    abort();\r\n}\r\n\r\nvoid scalar_new(void* p) {\r\n    meta_new(p, g_scalar_allocations, \"scalar\");\r\n    ++g_scalars;\r\n}\r\n\r\nvoid array_new(void* p) {\r\n    meta_new(p, g_array_allocations, \"array\");\r\n    ++g_arrays;\r\n}\r\n\r\nvoid meta_delete(void* p, void** allocations, const char* type) {\r\n    int deallocated = 0;\r\n\r\n    for (int i = 0; i < N; ++i) {\r\n        if (allocations[i] == p) {\r\n            allocations[i] = nullptr;\r\n            ++deallocated;\r\n        }\r\n    }\r\n\r\n    if (deallocated == 0) {\r\n        printf(\"meta_delete(): The %s allocation %p doesn't exist!\\n\", type, p);\r\n        abort();\r\n    }\r\n\r\n    if (deallocated > 1) {\r\n        printf(\"meta_delete(): The %s allocation %p existed more than once!\\n\", type, p);\r\n        abort();\r\n    }\r\n}\r\n\r\nvoid scalar_delete(void* p) {\r\n    if (p) {\r\n        meta_delete(p, g_scalar_allocations, \"scalar\");\r\n        --g_scalars;\r\n    }\r\n}\r\n\r\nvoid array_delete(void* p) {\r\n    if (p) {\r\n        meta_delete(p, g_array_allocations, \"array\");\r\n        --g_arrays;\r\n    }\r\n}\r\n\r\n\r\nvoid* operator new(size_t n) {\r\n    void* p = malloc(n ? n : 1);\r\n\r\n    if (p == nullptr) {\r\n        throw bad_alloc();\r\n    }\r\n\r\n    scalar_new(p);\r\n\r\n    return p;\r\n}\r\n\r\nvoid* operator new(size_t n, const nothrow_t&) noexcept {\r\n    void* p = malloc(n ? n : 1);\r\n\r\n    scalar_new(p);\r\n\r\n    return p;\r\n}\r\n\r\nvoid operator delete(void* p) noexcept {\r\n    scalar_delete(p);\r\n\r\n    free(p);\r\n}\r\n\r\nvoid operator delete(void* p, const nothrow_t&) noexcept {\r\n    scalar_delete(p);\r\n\r\n    free(p);\r\n}\r\n\r\nvoid* operator new[](size_t n) {\r\n    void* p = malloc(n ? n : 1);\r\n\r\n    if (p == nullptr) {\r\n        throw bad_alloc();\r\n    }\r\n\r\n    array_new(p);\r\n\r\n    return p;\r\n}\r\n\r\nvoid* operator new[](size_t n, const nothrow_t&) noexcept {\r\n    void* p = malloc(n ? n : 1);\r\n\r\n    array_new(p);\r\n\r\n    return p;\r\n}\r\n\r\nvoid operator delete[](void* p) noexcept {\r\n    array_delete(p);\r\n\r\n    free(p);\r\n}\r\n\r\nvoid operator delete[](void* p, const nothrow_t&) noexcept {\r\n    array_delete(p);\r\n\r\n    free(p);\r\n}\r\n\r\n\r\nvoid test(const char* s) {\r\n    const int orig_scalars = g_scalars;\r\n    const int orig_arrays  = g_arrays;\r\n\r\n    {\r\n        regex r(s);\r\n    }\r\n\r\n    if (g_scalars != orig_scalars) {\r\n        printf(\"test(): %d scalar allocation leak(s)!\\n\", g_scalars - orig_scalars);\r\n        abort();\r\n    }\r\n\r\n    if (g_arrays != orig_arrays) {\r\n        printf(\"test(): %d array allocation leak(s)!\\n\", g_arrays - orig_arrays);\r\n        abort();\r\n    }\r\n}\r\n\r\n// Also test LWG-3204: sub_match::swap only swaps the base class\r\nvoid test_lwg3204() {\r\n    csub_match sm1{};\r\n    sm1.first   = \"hello\";\r\n    sm1.second  = \"world\";\r\n    sm1.matched = true;\r\n\r\n    csub_match sm2{};\r\n    sm2.first   = \"fluffy\";\r\n    sm2.second  = \"cat\";\r\n    sm2.matched = false;\r\n\r\n    sm1.swap(sm2);\r\n\r\n    assert(strcmp(sm1.first, \"fluffy\") == 0);\r\n    assert(strcmp(sm1.second, \"cat\") == 0);\r\n    assert(!sm1.matched);\r\n\r\n    assert(strcmp(sm2.first, \"hello\") == 0);\r\n    assert(strcmp(sm2.second, \"world\") == 0);\r\n    assert(sm2.matched);\r\n\r\n    STATIC_ASSERT(noexcept(sm1.swap(sm2)));\r\n}\r\n\r\n\r\nint main() {\r\n    // Perform any locale allocations before we begin the tests.\r\n    locale loc;\r\n    use_facet<ctype<char>>(loc);\r\n    use_facet<collate<char>>(loc);\r\n\r\n    test(\"([[:digit:]]{4}[- ]){3}[[:digit:]]{3,4}\");\r\n    test(\"(^[ \"\r\n         \"]*#(?:[^\\\\\\\\\\\\n]|\\\\\\\\[^\\\\n_[:punct:][:alnum:]]*[\\\\n[:punct:][:w:]])*)|(//[^\\\\n]*|/\\\\*.*?\\\\*/\"\r\n         \")|\\\\b([+-]?(?:(?:0x[[:xdigit:]]+)|(?:(?:[[:digit:]]*\\\\.)?[[:digit:]]+(?:[eE][+-]?[[:digit:]]+)?))u?(?:(?:int(\"\r\n         \"?:8|16|32|64))|L)?)\\\\b|('(?:[^\\\\\\\\']|\\\\\\\\.)*'|\\\"(?:[^\\\\\\\\\\\"]|\\\\\\\\.)*\\\")|\\\\b(__asm|__cdecl|__declspec|__\"\r\n         \"export|__far16|__fastcall|__fortran|__import|__pascal|__rtti|__stdcall|_asm|_cdecl|__except|_export|_far16|_\"\r\n         \"fastcall|__finally|_fortran|_import|_pascal|_stdcall|__thread|__try|asm|auto|bool|break|case|catch|cdecl|\"\r\n         \"char|class|const|const_cast|continue|default|delete|do|double|dynamic_cast|else|enum|explicit|extern|false|\"\r\n         \"float|for|friend|goto|if|inline|int|long|mutable|namespace|new|operator|pascal|private|protected|public|\"\r\n         \"register|reinterpret_cast|return|short|signed|sizeof|static|static_cast|struct|switch|template|this|throw|\"\r\n         \"true|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\\\\b\");\r\n    test(\"(Tom|Sawyer|Huckleberry|Finn).{0,30}river|river.{0,30}(Tom|Sawyer|Huckleberry|Finn)\");\r\n    test(\"[[:alpha:]]+ing\");\r\n    test(\"^([0-9]+)(\\\\-| |$)(.*)$\");\r\n    test(\"^([a-zA-Z0-9_\\\\-\\\\.]+)@((\\\\[[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.)|(([a-zA-Z0-9\\\\-]+\\\\.)+))([a-zA-Z]{2,4}|[\"\r\n         \"0-9]{1,3})(\\\\]?)$\");\r\n    test(\"^(template[[:space:]]*<[^;:{]+>[[:space:]]*)?(class|struct)[[:space:]]*(\\\\<\\\\w+\\\\>([ \"\r\n         \"]*\\\\([^)]*\\\\))?[[:space:]]*)*(\\\\<\\\\w*\\\\>)[[:space:]]*(<[^;:{]+>[[:space:]]*)?(\\\\{|:[^;\\\\{()]*\\\\{)\");\r\n    test(\"^[-+]?[[:digit:]]*\\\\.?[[:digit:]]*$\");\r\n    test(\"^[ ]*#[ ]*include[ ]+(\\\"[^\\\"]+\\\"|<[^>]+>)\");\r\n    test(\"^[ ]*#[ ]*include[ ]+(\\\"boost/[^\\\"]+\\\"|<boost/[^>]+>)\");\r\n    test(\"^[[:digit:]]{1,2}/[[:digit:]]{1,2}/[[:digit:]]{4}$\");\r\n    test(\"^[^ ]*?Twain\");\r\n    test(\"^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$\");\r\n    test(\"<a[^>]+href=(\\\"[^\\\"]*\\\"|[^[:space:]]+)[^>]*>\");\r\n    test(\"<font[^>]+face=(\\\"[^\\\"]*\\\"|[^[:space:]]+)[^>]*>.*?</font>\");\r\n    test(\"<h[12345678][^>]*>.*?</h[12345678]>\");\r\n    test(\"<img[^>]+src=(\\\"[^\\\"]*\\\"|[^[:space:]]+)[^>]*>\");\r\n    test(\"<p>.*?</p>\");\r\n    test(\"aa\");\r\n    test(\"abc\");\r\n    test(\"Huck[[:alpha:]]+\");\r\n    test(\"Tom|Sawyer|Huckleberry|Finn\");\r\n    test(\"Twain\");\r\n\r\n    test_lwg3204();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_174589_tr1_function_storing_pmf_called_with_reference_or_pointer/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_174589_tr1_function_storing_pmf_called_with_reference_or_pointer/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <functional>\r\n#include <memory>\r\n\r\nusing namespace std;\r\n\r\nstruct A {\r\n    int f() {\r\n        return 8;\r\n    }\r\n};\r\n\r\nvoid test_orig() {\r\n    A a;\r\n    A& r = a;\r\n\r\n    function<int(A)> f(&A::f);\r\n    function<int(A&)> g(&A::f);\r\n    function<int(A*)> h(&A::f);\r\n\r\n    assert(f(a) == 8);\r\n    assert(g(r) == 8);\r\n    assert(h(&a) == 8);\r\n}\r\n\r\n\r\n// DevDiv-294051 \"<functional>: std::function has lost the ability to invoke PMFs/PMDs on various things\"\r\n\r\n// N4971 [func.require] says that std::function must be able to invoke PMFs/PMDs\r\n// on values, references, raw pointers, smart pointers, and reference_wrappers - all handling base/derived cases.\r\n\r\nstruct B {\r\n    int func(int i) {\r\n        return i + data + 5;\r\n    }\r\n\r\n    int data;\r\n};\r\n\r\nstruct X : public B {};\r\n\r\nvoid test_DevDiv_294051() {\r\n    shared_ptr<B> b(new B);\r\n    shared_ptr<X> x(new X);\r\n\r\n    b->data = 220;\r\n    x->data = 330;\r\n\r\n    function<int(B, int)> f1                     = &B::func;\r\n    function<int(X, int)> f1x                    = &B::func;\r\n    function<int(B&, int)> f2                    = &B::func;\r\n    function<int(X&, int)> f3                    = &B::func;\r\n    function<int(B*, int)> f4                    = &B::func;\r\n    function<int(X*, int)> f5                    = &B::func;\r\n    function<int(shared_ptr<B>, int)> f6         = &B::func;\r\n    function<int(shared_ptr<X>, int)> f7         = &B::func;\r\n    function<int(const shared_ptr<B>&, int)> f8  = &B::func;\r\n    function<int(const shared_ptr<X>&, int)> f9  = &B::func;\r\n    function<int(reference_wrapper<B>, int)> f10 = &B::func;\r\n    function<int(reference_wrapper<X>, int)> f11 = &B::func;\r\n\r\n    assert(f1(*b, 1000) == 1225);\r\n    assert(f1x(*x, 1000) == 1335);\r\n    assert(f2(*b, 2000) == 2225);\r\n    assert(f3(*x, 3000) == 3335);\r\n    assert(f4(b.get(), 4000) == 4225);\r\n    assert(f5(x.get(), 5000) == 5335);\r\n    assert(f6(b, 6000) == 6225);\r\n    assert(f7(x, 7000) == 7335);\r\n    assert(f8(b, 8000) == 8225);\r\n    assert(f9(x, 9000) == 9335);\r\n    assert(f10(ref(*b), 10000) == 10225);\r\n    assert(f11(ref(*x), 11000) == 11335);\r\n\r\n    function<int(B)> g1                     = &B::data;\r\n    function<int(X)> g1x                    = &B::data;\r\n    function<int(B&)> g2                    = &B::data;\r\n    function<int(X&)> g3                    = &B::data;\r\n    function<int(B*)> g4                    = &B::data;\r\n    function<int(X*)> g5                    = &B::data;\r\n    function<int(shared_ptr<B>)> g6         = &B::data;\r\n    function<int(shared_ptr<X>)> g7         = &B::data;\r\n    function<int(const shared_ptr<B>&)> g8  = &B::data;\r\n    function<int(const shared_ptr<X>&)> g9  = &B::data;\r\n    function<int(reference_wrapper<B>)> g10 = &B::data;\r\n    function<int(reference_wrapper<X>)> g11 = &B::data;\r\n\r\n    assert(g1(*b) == 220);\r\n    assert(g1x(*x) == 330);\r\n    assert(g2(*b) == 220);\r\n    assert(g3(*x) == 330);\r\n    assert(g4(b.get()) == 220);\r\n    assert(g5(x.get()) == 330);\r\n    assert(g6(b) == 220);\r\n    assert(g7(x) == 330);\r\n    assert(g8(b) == 220);\r\n    assert(g9(x) == 330);\r\n    assert(g10(ref(*b)) == 220);\r\n    assert(g11(ref(*x)) == 330);\r\n}\r\n\r\n\r\nint main() {\r\n    test_orig();\r\n\r\n    test_DevDiv_294051();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_175314_tr1_reference_wrapper_assignment/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_175314_tr1_reference_wrapper_assignment/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n\r\nusing namespace std;\r\n\r\nint f() {\r\n    return 456;\r\n}\r\n\r\nint g() {\r\n    return 789;\r\n}\r\n\r\nint main() {\r\n    {\r\n        int a = 100;\r\n        int b = 200;\r\n\r\n        int* const pa = &a;\r\n        int* const pb = &b;\r\n\r\n        reference_wrapper<int* const> ra(pa);\r\n        reference_wrapper<int* const> rb(pb);\r\n\r\n        assert(a == 100 && b == 200);\r\n\r\n        *ra += 1;\r\n\r\n        assert(a == 101 && b == 200);\r\n\r\n        ra = rb;\r\n\r\n        *ra += 2;\r\n\r\n        assert(a == 101 && b == 202);\r\n    }\r\n\r\n    {\r\n        int (*const pf)() = f;\r\n        int (*const pg)() = g;\r\n\r\n        reference_wrapper<int (*const)()> rf(pf);\r\n        reference_wrapper<int (*const)()> rg(pg);\r\n\r\n        assert(rf() == 456);\r\n\r\n        rf = rg;\r\n\r\n        assert(rf() == 789);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_175716_tr1_dereferencing_reference_wrapper/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_175716_tr1_dereferencing_reference_wrapper/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    int x  = 100;\r\n    int* p = &x;\r\n\r\n    reference_wrapper<int*> r(p);\r\n\r\n    *r /= 5;\r\n\r\n    assert(x == 20);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_176467_tr1_make_tuple_from_string_literal/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_176467_tr1_make_tuple_from_string_literal/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <tuple>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    tuple<const char*, int> t = make_tuple(\"abc\", 10);\r\n\r\n    const string s(\"abc\");\r\n    const int i = 10;\r\n\r\n    assert(get<0>(t) == s && get<1>(t) == i);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_176498_tr1_binding_functors_with_non_const_fxn_call_ops/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_176498_tr1_binding_functors_with_non_const_fxn_call_ops/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n\r\nusing namespace std;\r\n\r\nstruct functor {\r\n    typedef int result_type;\r\n\r\n    int operator()(int x) { // NON-const\r\n        return x * 2;\r\n    }\r\n};\r\n\r\nstruct nullary {\r\n    typedef int result_type;\r\n\r\n    int operator()() { // NON-const\r\n        return 1729;\r\n    }\r\n};\r\n\r\nint main() {\r\n    functor f; // NON-const\r\n\r\n    int r1 = bind(f, 123)();\r\n\r\n    assert(r1 == 246);\r\n\r\n    nullary g; // NON-const\r\n\r\n    int r2 = bind(g)();\r\n\r\n    assert(r2 == 1729);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_181509_tr1_inf_loop_uniform_int_ull/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_181509_tr1_inf_loop_uniform_int_ull/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <limits>\r\n#include <random>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nconstexpr auto int16_min  = numeric_limits<int16_t>::min();\r\nconstexpr auto int16_max  = numeric_limits<int16_t>::max();\r\nconstexpr auto int32_min  = numeric_limits<int32_t>::min();\r\nconstexpr auto int32_max  = numeric_limits<int32_t>::max();\r\nconstexpr auto int64_min  = numeric_limits<int64_t>::min();\r\nconstexpr auto int64_max  = numeric_limits<int64_t>::max();\r\nconstexpr auto uint16_max = numeric_limits<uint16_t>::max();\r\nconstexpr auto uint32_max = numeric_limits<uint32_t>::max();\r\nconstexpr auto uint64_max = numeric_limits<uint64_t>::max();\r\n\r\nconstexpr uint32_t N = 500'000;\r\n\r\ntemplate <typename URNG, typename T, T A, T B>\r\nvoid microtest() {\r\n    URNG engine;\r\n    uniform_int_distribution<T> dist(A, B);\r\n\r\n    for (uint32_t i = 0; i < N; ++i) {\r\n        const T val = dist(engine);\r\n\r\n        assert(val >= A && val <= B);\r\n    }\r\n}\r\n\r\nusing fp_t = void (*)();\r\ntemplate <typename URNG>\r\nvoid add_tests(vector<fp_t>& tests) {\r\n    // Test DevDiv-83370 \"uniform_int_distribution isn't uniform\".\r\n    tests.insert(\r\n        tests.end(), {\r\n                         microtest<URNG, int16_t, int16_min, int16_max>,\r\n                         microtest<URNG, int16_t, int16_min + 1, int16_max>,\r\n                         microtest<URNG, int16_t, int16_min, int16_max - 1>,\r\n                         microtest<URNG, int16_t, int16_min + 2, int16_max - 3>,\r\n                         microtest<URNG, int16_t, -4, 4>,\r\n                         microtest<URNG, int16_t, 11, 22>,\r\n                         microtest<URNG, int16_t, -44, -33>,\r\n                         microtest<URNG, int16_t, 5, 6>,\r\n                         microtest<URNG, int16_t, -7, -7>,\r\n\r\n                         microtest<URNG, uint16_t, 0, uint16_max>,\r\n                         microtest<URNG, uint16_t, 1, uint16_max>,\r\n                         microtest<URNG, uint16_t, 0, uint16_max - 1>,\r\n                         microtest<URNG, uint16_t, 2, uint16_max - 3>,\r\n                         microtest<URNG, uint16_t, 123, 456>,\r\n                         microtest<URNG, uint16_t, 1000, 1001>,\r\n                         microtest<URNG, uint16_t, 777, 777>,\r\n\r\n                         microtest<URNG, int32_t, int32_min, int32_max>,\r\n                         microtest<URNG, int32_t, int32_min + 2, int32_max - 3>,\r\n                         microtest<URNG, uint32_t, 0, uint32_max>,\r\n                         microtest<URNG, uint32_t, 2, uint32_max - 3>,\r\n                         microtest<URNG, int64_t, int64_min, int64_max>,\r\n                         microtest<URNG, int64_t, int64_min + 2, int64_max - 3>,\r\n                         microtest<URNG, uint64_t, 0, uint64_max>, // Test DDB-181509 (infinite loop in\r\n                                                                   // uniform_int_distribution<unsigned long long>)\r\n                         microtest<URNG, uint64_t, 2, uint64_max - 3>,\r\n\r\n                         microtest<URNG, int32_t, -4, 4>,\r\n                         microtest<URNG, int32_t, 11, 22>,\r\n                         microtest<URNG, int32_t, -44, -33>,\r\n                         microtest<URNG, int32_t, 5, 6>,\r\n                         microtest<URNG, int32_t, -7, -7>,\r\n\r\n                         microtest<URNG, uint32_t, 123, 456>,\r\n                         microtest<URNG, uint32_t, 1000, 1001>,\r\n                         microtest<URNG, uint32_t, 777, 777>,\r\n\r\n                         microtest<URNG, int64_t, -4, 4>,\r\n                         microtest<URNG, int64_t, 11, 22>,\r\n                         microtest<URNG, int64_t, -44, -33>,\r\n                         microtest<URNG, int64_t, 5, 6>,\r\n                         microtest<URNG, int64_t, -7, -7>,\r\n\r\n                         microtest<URNG, uint64_t, 123, 456>,\r\n                         microtest<URNG, uint64_t, 1000, 1001>,\r\n                         microtest<URNG, uint64_t, 777, 777>,\r\n                     });\r\n}\r\n\r\nclass Wacky {\r\npublic:\r\n    Wacky() : mt(1701) {}\r\n\r\n    typedef unsigned long result_type;\r\n\r\n    static constexpr result_type min() {\r\n        return 0;\r\n    }\r\n\r\n    static constexpr result_type max() {\r\n        return 90000;\r\n    }\r\n\r\n    result_type operator()() {\r\n        for (;;) {\r\n            const result_type ret = mt() & 0x1FFFFUL;\r\n\r\n            if (ret >= min() && ret <= max()) {\r\n                return ret;\r\n            }\r\n        }\r\n    }\r\n\r\nprivate:\r\n    mt19937 mt;\r\n};\r\n\r\nint main() {\r\n    vector<fp_t> tests;\r\n\r\n    add_tests<mt19937>(tests);\r\n    add_tests<mt19937_64>(tests);\r\n    add_tests<Wacky>(tests);\r\n\r\n    for (const auto& fn : tests) {\r\n        fn();\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_182017_tr1_search_n/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_182017_tr1_search_n/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <functional>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    {\r\n        vector<int> v;\r\n\r\n        for (int i = 0; i < 6; ++i) {\r\n            v.push_back(i * 5);\r\n        }\r\n\r\n        for (int i = 0; i < 3; ++i) {\r\n            v.push_back(5);\r\n        }\r\n\r\n        for (int i = 0; i < 6; ++i) {\r\n            v.push_back(i * 5);\r\n        }\r\n\r\n        for (int i = 0; i < 3; ++i) {\r\n            v.push_back(5);\r\n        }\r\n\r\n        assert(search_n(v.begin(), v.end(), 5, 7) == v.end() && \"Found 5 occurrences of 7. This is BAD.\");\r\n        assert(search_n(v.begin(), v.end(), 4, 5) == v.end() && \"Found 4 occurrences of 5. This is BAD.\");\r\n        assert(\r\n            search_n(v.begin(), v.end(), 5, 7, equal_to<int>()) == v.end() && \"Found 5 occurrences of 7. This is BAD.\");\r\n        assert(\r\n            search_n(v.begin(), v.end(), 4, 5, equal_to<int>()) == v.end() && \"Found 4 occurrences of 5. This is BAD.\");\r\n    }\r\n\r\n    {\r\n        vector<int> v;\r\n\r\n        v.push_back(11);\r\n        v.push_back(22);\r\n        v.push_back(33);\r\n        v.push_back(44);\r\n        v.push_back(55);\r\n\r\n        assert(search_n(v.rbegin(), v.rend(), 4, 8) == v.rend());\r\n        assert(search_n(v.rbegin(), v.rend(), 4, 8, equal_to<int>()) == v.rend());\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_186118_stoullx_corner_cases/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_186118_stoullx_corner_cases/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <sstream>\r\n\r\nint main() {\r\n    unsigned long long s = 10000000000000000000ULL;\r\n    unsigned long long t = 0;\r\n    unsigned long u      = 1000000000UL;\r\n    unsigned long v      = 0;\r\n    std::stringstream str;\r\n    std::stringstream str2;\r\n\r\n    str << s;\r\n    str >> t;\r\n\r\n    assert(str);\r\n    assert(s == t);\r\n\r\n    str2 << u;\r\n    str2 >> v;\r\n\r\n    assert(str2);\r\n    assert(u == v);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_192736_tr1_prngs_not_copyconstructible/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_192736_tr1_prngs_not_copyconstructible/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <functional>\r\n#include <iterator>\r\n#include <random>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename Gen>\r\nvoid test_generator_can_be_value_direct_initialized() {\r\n    Gen gen;\r\n\r\n    Gen other(gen);\r\n\r\n    assert(other == gen);\r\n}\r\n\r\ntemplate <typename Gen>\r\nvoid test_generator_can_be_const_ref_direct_initialized() {\r\n    Gen gen;\r\n    const Gen& r = gen;\r\n\r\n    Gen other(r);\r\n\r\n    assert(other == gen);\r\n}\r\n\r\ntemplate <typename Gen>\r\nvoid test_generator_can_be_value_copy_initialized() {\r\n    Gen gen;\r\n\r\n    Gen other = gen;\r\n\r\n    assert(other == gen);\r\n}\r\n\r\ntemplate <typename Gen>\r\nvoid test_generator_can_be_const_ref_copy_initialized() {\r\n    Gen gen;\r\n    const Gen& r = gen;\r\n\r\n    Gen other = r;\r\n\r\n    assert(other == gen);\r\n}\r\n\r\ntemplate <typename Gen, typename ReseedFunc>\r\nvoid test_generator_can_be_reseeded(ReseedFunc reseedFunc) {\r\n    const auto iterations = 100u;\r\n    Gen gen;\r\n    reseedFunc(gen);\r\n    vector<typename Gen::result_type> firstPassResults;\r\n    generate_n(back_inserter(firstPassResults), iterations, ref(gen));\r\n    reseedFunc(gen);\r\n    vector<typename Gen::result_type> seededResults;\r\n    generate_n(back_inserter(seededResults), iterations, ref(gen));\r\n    assert(firstPassResults == seededResults);\r\n}\r\n\r\ntemplate <typename Gen>\r\nvoid test_engine() {\r\n    test_generator_can_be_value_direct_initialized<Gen>();\r\n    test_generator_can_be_const_ref_direct_initialized<Gen>();\r\n    test_generator_can_be_value_copy_initialized<Gen>();\r\n    test_generator_can_be_const_ref_copy_initialized<Gen>();\r\n    test_generator_can_be_reseeded<Gen>([](Gen& gen) { gen.seed(); });\r\n    test_generator_can_be_reseeded<Gen>([](Gen& gen) { gen.seed(1729); });\r\n}\r\n\r\ntemplate <typename Dist>\r\nvoid test_distribution_can_be_reset(Dist dist) {\r\n    knuth_b gen;\r\n    const auto iterations = 100u;\r\n    vector<typename Dist::result_type> firstPassResults;\r\n    generate_n(back_inserter(firstPassResults), iterations, [&]() { return dist(gen); });\r\n    dist.reset();\r\n    gen.seed();\r\n    vector<typename Dist::result_type> resetResults;\r\n    generate_n(back_inserter(resetResults), iterations, [&]() { return dist(gen); });\r\n    assert(firstPassResults == resetResults);\r\n}\r\n\r\ntemplate <typename Dist>\r\nvoid test_distribution(Dist dist) {\r\n    test_distribution_can_be_reset(dist);\r\n}\r\n\r\ntemplate <template <typename> class Dist>\r\nvoid test_integral_distribution() {\r\n    test_distribution(Dist<unsigned short>{});\r\n    test_distribution(Dist<unsigned int>{});\r\n    test_distribution(Dist<unsigned long>{});\r\n    test_distribution(Dist<unsigned long long>{});\r\n    test_distribution(Dist<short>{});\r\n    test_distribution(Dist<int>{});\r\n    test_distribution(Dist<long>{});\r\n    test_distribution(Dist<long long>{});\r\n}\r\n\r\ntemplate <template <typename> class Dist>\r\nvoid test_real_distribution() {\r\n    test_distribution(Dist<float>{});\r\n    test_distribution(Dist<double>{});\r\n    test_distribution(Dist<long double>{});\r\n}\r\n\r\nint main() {\r\n    // N4527 26.5.5 [rand.predef], in paragraph order:\r\n    test_engine<minstd_rand0>(); // /1\r\n    test_engine<minstd_rand>();\r\n    test_engine<mt19937>();\r\n    test_engine<mt19937_64>();\r\n    test_engine<ranlux24_base>(); // /5\r\n    test_engine<ranlux48_base>();\r\n    test_engine<ranlux24>();\r\n    test_engine<ranlux48>();\r\n    test_engine<knuth_b>();\r\n    test_engine<default_random_engine>(); // /10\r\n\r\n    // independent_bits_engine is not in any of the [rand.predef] engines, so\r\n    // test it explicitly:\r\n    test_engine<independent_bits_engine<mt19937_64, 5, unsigned int>>();\r\n    // random_device can't be copied or reseeded, so no reason to test it here.\r\n\r\n    test_integral_distribution<uniform_int_distribution>();\r\n    test_real_distribution<uniform_real_distribution>();\r\n    test_distribution(bernoulli_distribution{});\r\n    test_integral_distribution<binomial_distribution>();\r\n    test_integral_distribution<geometric_distribution>();\r\n    test_integral_distribution<negative_binomial_distribution>();\r\n    test_integral_distribution<poisson_distribution>();\r\n    test_real_distribution<exponential_distribution>();\r\n    test_real_distribution<gamma_distribution>();\r\n    test_real_distribution<weibull_distribution>();\r\n    test_real_distribution<extreme_value_distribution>();\r\n    test_real_distribution<normal_distribution>();\r\n    test_real_distribution<lognormal_distribution>();\r\n    test_real_distribution<chi_squared_distribution>();\r\n    test_real_distribution<cauchy_distribution>();\r\n    test_real_distribution<fisher_f_distribution>();\r\n    test_real_distribution<student_t_distribution>();\r\n    test_distribution(discrete_distribution<unsigned short>({1, 2, 3, 4, 5}));\r\n    test_distribution(discrete_distribution<unsigned int>({1, 2, 3, 4, 5}));\r\n    test_distribution(discrete_distribution<unsigned long>({1, 2, 3, 4, 5}));\r\n    test_distribution(discrete_distribution<unsigned long long>({1, 2, 3, 4, 5}));\r\n    test_distribution(discrete_distribution<short>({1, 2, 3, 4, 5}));\r\n    test_distribution(discrete_distribution<int>({1, 2, 3, 4, 5}));\r\n    test_distribution(discrete_distribution<long>({1, 2, 3, 4, 5}));\r\n    test_distribution(discrete_distribution<long long>({1, 2, 3, 4, 5}));\r\n\r\n    vector<float> rangesf{0.0f, 10.0f, 90.0f, 100.0f};\r\n    vector<float> weightsf{1.0f, 0.0f, 0.0f, 1.0f};\r\n    test_distribution(piecewise_constant_distribution<float>(begin(rangesf), end(rangesf), begin(weightsf)));\r\n    test_distribution(piecewise_linear_distribution<float>(begin(rangesf), end(rangesf), begin(weightsf)));\r\n\r\n    vector<double> rangesd{0.0, 10.0, 90.0, 100.0};\r\n    vector<double> weightsd{1.0, 0.0, 0.0, 1.0};\r\n    test_distribution(piecewise_constant_distribution<double>(begin(rangesd), end(rangesd), begin(weightsd)));\r\n    test_distribution(piecewise_linear_distribution<double>(begin(rangesd), end(rangesd), begin(weightsd)));\r\n\r\n    vector<long double> rangesl{0.0l, 10.0l, 90.0l, 100.0l};\r\n    vector<long double> weightsl{1.0l, 0.0l, 0.0l, 1.0l};\r\n    test_distribution(piecewise_constant_distribution<long double>(begin(rangesl), end(rangesl), begin(weightsl)));\r\n    test_distribution(piecewise_linear_distribution<long double>(begin(rangesl), end(rangesl), begin(weightsl)));\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_195561_tr1_function_const_op/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_195561_tr1_function_const_op/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <functional>\r\n\r\nstruct Cat {\r\n    void operator()() {}\r\n};\r\n\r\nint main() {\r\n    std::function<void()> f = Cat();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_196243_tr1_enable_shared_from_this_ops/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_196243_tr1_enable_shared_from_this_ops/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n\r\nusing namespace std;\r\n\r\nstruct X : enable_shared_from_this<X> {\r\n    explicit X(const int n) : m_n(n) {}\r\n    int m_n;\r\n};\r\n\r\nint main() {\r\n    // Test DDB-196243 \"TR1 VC9 SP1: enable_shared_from_this's copy ctor and copy assignment operator do too much work\".\r\n    {\r\n        const shared_ptr<X> sp1(new X(11));\r\n        const shared_ptr<X> sp2(new X(22));\r\n\r\n        X* const raw1 = sp1.get();\r\n        X* const raw2 = sp2.get();\r\n\r\n        assert(raw1->m_n == 11);\r\n        assert(raw2->m_n == 22);\r\n        assert(raw1->shared_from_this() == sp1);\r\n        assert(raw2->shared_from_this() == sp2);\r\n        assert(raw1->shared_from_this() != sp2);\r\n        assert(raw2->shared_from_this() != sp1);\r\n\r\n        *raw1 = *raw2;\r\n\r\n        assert(raw1->m_n == 22);\r\n        assert(raw2->m_n == 22);\r\n        assert(raw1->shared_from_this() == sp1);\r\n        assert(raw2->shared_from_this() == sp2);\r\n        assert(raw1->shared_from_this() != sp2);\r\n        assert(raw2->shared_from_this() != sp1);\r\n    }\r\n\r\n    // Test DDB-197048 \"[VS2008 / TR1] still got problems with shared_ptr<const T>\".\r\n    {\r\n        shared_ptr<const int> sp1(static_cast<const int*>(new int(6)));\r\n        shared_ptr<volatile int> sp2(static_cast<volatile int*>(new int(7)));\r\n        shared_ptr<const volatile int> sp3(static_cast<const volatile int*>(new int(8)));\r\n\r\n        assert(*sp1 == 6);\r\n        assert(*sp2 == 7);\r\n        assert(*sp3 == 8);\r\n    }\r\n\r\n    // Test Dev10-654944 \"shared_ptr: assignment is messed up\".\r\n    {\r\n        shared_ptr<int> p(new int(1729));\r\n        shared_ptr<int> z;\r\n\r\n        assert(!!p);\r\n        assert(*p == 1729);\r\n        assert(!z);\r\n\r\n        p = z;\r\n\r\n        assert(!p);\r\n        assert(!z);\r\n    }\r\n\r\n    // Test DevDiv-1178296 \"<memory>: shared_ptr<volatile X> doesn't work with enable_shared_from_this<X>\".\r\n    {\r\n        const auto sp1 = make_shared<const X>(100);\r\n        const auto sp2 = make_shared<volatile X>(200);\r\n        const auto sp3 = make_shared<const volatile X>(300);\r\n\r\n        const shared_ptr<const X> sp4(static_cast<const X*>(new X(400)));\r\n        const shared_ptr<volatile X> sp5(static_cast<volatile X*>(new X(500)));\r\n        const shared_ptr<const volatile X> sp6(static_cast<const volatile X*>(new X(600)));\r\n\r\n        assert(sp1->m_n == 100);\r\n        assert(sp2->m_n == 200);\r\n        assert(sp3->m_n == 300);\r\n        assert(sp4->m_n == 400);\r\n        assert(sp5->m_n == 500);\r\n        assert(sp6->m_n == 600);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_199123_tr1_mem_fun_abstract_classes/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev09_199123_tr1_mem_fun_abstract_classes/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n\r\nusing namespace std;\r\n\r\nclass Base {\r\npublic:\r\n    Base() {}\r\n\r\n    virtual ~Base() {}\r\n\r\n    void meow() {\r\n        purr();\r\n    }\r\n\r\nprivate:\r\n    Base(const Base&);\r\n    Base& operator=(const Base&);\r\n\r\n    virtual void purr() = 0;\r\n};\r\n\r\nclass Derived : public Base {\r\nprivate:\r\n    void purr() override {}\r\n};\r\n\r\nint main() {\r\n    Derived d;\r\n    mem_fn (&Derived::meow)(d);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_391723_bind_result_type/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_391723_bind_result_type/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _HAS_DEPRECATED_ADAPTOR_TYPEDEFS 1\r\n#define _SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING\r\n\r\n#include <functional>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <typename Correct, typename F>\r\nvoid test(const F&) {\r\n    STATIC_ASSERT(is_same_v<Correct, typename F::result_type>);\r\n}\r\n\r\nint cat(int) {\r\n    return 5;\r\n}\r\n\r\nstruct X {\r\n    int dog() {\r\n        return 6;\r\n    }\r\n};\r\n\r\nstruct Y {\r\n    typedef int result_type;\r\n\r\n    int operator()(int) const {\r\n        return 7;\r\n    }\r\n};\r\n\r\nint main() {\r\n    X x;\r\n\r\n    test<int>(bind(cat, 10));\r\n\r\n    test<int>(bind(&cat, 10));\r\n\r\n    test<int>(bind(&X::dog, x));\r\n\r\n    test<int>(bind(Y(), 20));\r\n\r\n    test<double>(bind<double>(cat, 10));\r\n\r\n    test<double>(bind<double>(&cat, 10));\r\n\r\n    test<double>(bind<double>(&X::dog, x));\r\n\r\n    test<double>(bind<double>(Y(), 20));\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_414242_facet_bug_use_facet_ctype_char/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_414242_facet_bug_use_facet_ctype_char/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <locale>\r\n\r\nusing namespace std;\r\n\r\nstruct Cat {\r\n    Cat() {\r\n        m_p = &use_facet<ctype<char>>(locale());\r\n    }\r\n\r\n    const ctype<char>* m_p;\r\n};\r\n\r\nCat g_cat;\r\n\r\nint main() {\r\n    // runtime tests are in constructors and destructors of variables with static storage duration\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_441756_function_reference_wrapper/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_441756_function_reference_wrapper/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n#include <random>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    mt19937 prng;\r\n\r\n    function<mt19937::result_type()> f;\r\n\r\n    f = ref(prng);\r\n\r\n    const mt19937::result_type x = prng();\r\n    const mt19937::result_type y = f();\r\n\r\n    assert(x != y);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_445289_make_shared/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_445289_make_shared/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <memory>\r\n#include <new>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\n\r\nint g_mallocs = 0;\r\nint g_frees   = 0;\r\n\r\ntemplate <typename T>\r\nclass Mallocator {\r\npublic:\r\n    typedef T* pointer;\r\n    typedef const T* const_pointer;\r\n    typedef T& reference;\r\n    typedef const T& const_reference;\r\n    typedef T value_type;\r\n    typedef size_t size_type;\r\n    typedef ptrdiff_t difference_type;\r\n\r\n    T* address(T& r) const {\r\n        return &r;\r\n    }\r\n\r\n    const T* address(const T& s) const {\r\n        return &s;\r\n    }\r\n\r\n    size_t max_size() const {\r\n        return (static_cast<size_t>(0) - static_cast<size_t>(1)) / sizeof(T);\r\n    }\r\n\r\n    template <typename U>\r\n    struct rebind {\r\n        typedef Mallocator<U> other;\r\n    };\r\n\r\n    bool operator!=(const Mallocator& other) const {\r\n        return !(*this == other);\r\n    }\r\n\r\n    void construct(T* const p, const T& t) const {\r\n        void* const pv = static_cast<void*>(p);\r\n\r\n        new (pv) T(t);\r\n    }\r\n\r\n    void destroy(T* const p) const {\r\n        p->~T();\r\n    }\r\n\r\n    bool operator==(const Mallocator&) const {\r\n        return true;\r\n    }\r\n\r\n    Mallocator() {}\r\n\r\n    Mallocator(const Mallocator&) {}\r\n\r\n    template <typename U>\r\n    Mallocator(const Mallocator<U>&) {}\r\n\r\n    ~Mallocator() {}\r\n\r\n    T* allocate(const size_t n) const {\r\n        if (n == 0) {\r\n            return nullptr;\r\n        }\r\n\r\n        assert(n <= max_size());\r\n        void* const pv = malloc(n * sizeof(T) + 256);\r\n        if (!pv) {\r\n            abort();\r\n        }\r\n\r\n        memset(pv, 0xCC, n * sizeof(T) + 256);\r\n        ++g_mallocs;\r\n        return static_cast<T*>(static_cast<void*>(static_cast<unsigned char*>(pv) + 128));\r\n    }\r\n\r\n    void deallocate(T* const p, size_t) const {\r\n        unsigned char* const x = static_cast<unsigned char*>(static_cast<void*>(p)) - 128;\r\n        const auto equal_to_cc = [](const unsigned char c) { return c == 0xCC; };\r\n        assert(all_of(x, x + 128, equal_to_cc));\r\n        const auto afterT = x + 128 + sizeof(T);\r\n        assert(all_of(afterT, afterT + 128, equal_to_cc));\r\n        ++g_frees;\r\n        free(x);\r\n    }\r\n\r\n    template <typename U>\r\n    T* allocate(const size_t n, const U*) const {\r\n        return allocate(n);\r\n    }\r\n\r\nprivate:\r\n    Mallocator& operator=(const Mallocator&);\r\n};\r\n\r\n\r\nint g_news    = 0;\r\nint g_deletes = 0;\r\n\r\nvoid* operator new(size_t size) {\r\n    void* const p = ::operator new(size, nothrow);\r\n    assert(p != nullptr);\r\n    return p;\r\n}\r\n\r\nvoid* operator new(size_t size, const nothrow_t&) noexcept {\r\n    ++g_news;\r\n\r\n    return malloc(size == 0 ? 1 : size);\r\n}\r\n\r\nvoid operator delete(void* ptr) noexcept {\r\n    ::operator delete(ptr, nothrow);\r\n}\r\n\r\nvoid operator delete(void* ptr, const nothrow_t&) noexcept {\r\n    if (ptr) {\r\n        ++g_deletes;\r\n\r\n        free(ptr);\r\n    }\r\n}\r\n\r\nvoid* operator new[](size_t size) {\r\n    return ::operator new(size);\r\n}\r\n\r\nvoid* operator new[](size_t size, const nothrow_t&) noexcept {\r\n    return ::operator new(size, nothrow);\r\n}\r\n\r\nvoid operator delete[](void* ptr) noexcept {\r\n    ::operator delete(ptr);\r\n}\r\n\r\nvoid operator delete[](void* ptr, const nothrow_t&) noexcept {\r\n    ::operator delete(ptr, nothrow);\r\n}\r\n\r\n\r\nint g_scorches = 0;\r\nint g_burns    = 0;\r\n\r\nvoid scorch(int* p) {\r\n    if (p) {\r\n        ++g_scorches;\r\n        delete p;\r\n    }\r\n}\r\n\r\nstruct Burn {\r\n    void operator()(int* p) const {\r\n        if (p) {\r\n            ++g_burns;\r\n            delete p;\r\n        }\r\n    }\r\n};\r\n\r\nvoid test(int mallocs, int frees, int news, int deletes, int scorches, int burns) {\r\n    assert(g_mallocs == mallocs);\r\n    assert(g_frees == frees);\r\n    assert(g_news == news);\r\n    assert(g_deletes == deletes);\r\n    assert(g_scorches == scorches);\r\n    assert(g_burns == burns);\r\n}\r\n\r\nvoid reset() {\r\n    g_mallocs  = 0;\r\n    g_frees    = 0;\r\n    g_news     = 0;\r\n    g_deletes  = 0;\r\n    g_scorches = 0;\r\n    g_burns    = 0;\r\n}\r\n\r\nvoid test_and_reset(int mallocs, int frees, int news, int deletes, int scorches, int burns) {\r\n    test(mallocs, frees, news, deletes, scorches, burns);\r\n    reset();\r\n}\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n// GH-3100: \"<memory> etc.: ADL should be avoided when calling _Construct_in_place and its friends\"\r\n\r\ntemplate <class T>\r\nstruct adl_proof_allocator_provider {\r\n    struct alloc;\r\n};\r\n\r\n// adl_proof_allocator<T> is equality-comparable even if T is ADL-incompatible.\r\ntemplate <class T>\r\nusing adl_proof_allocator = typename adl_proof_allocator_provider<T>::alloc;\r\n\r\ntemplate <class, class = void>\r\nconstexpr bool is_adl_proof_allocator = false;\r\n\r\ntemplate <class Alloc>\r\nconstexpr bool\r\n    is_adl_proof_allocator<Alloc, void_t<typename adl_proof_allocator_provider<typename Alloc::value_type>::alloc>> =\r\n        is_same_v<typename adl_proof_allocator_provider<typename Alloc::value_type>::alloc, Alloc>;\r\n\r\ntemplate <class T>\r\nstruct adl_proof_allocator_provider<T>::alloc {\r\n    using value_type = T;\r\n\r\n    template <class U>\r\n    struct rebind {\r\n        using other = typename adl_proof_allocator_provider<U>::alloc;\r\n    };\r\n\r\n    alloc() = default;\r\n    template <class OtherAlloc, enable_if_t<is_adl_proof_allocator<OtherAlloc>, int> = 0>\r\n    constexpr alloc(const OtherAlloc&) noexcept {}\r\n\r\n    T* allocate(const size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    allocation_result<T*> allocate_at_least(const size_t n) {\r\n        return allocator<T>{}.allocate_at_least(n);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    void deallocate(T* const p, const size_t n) {\r\n        return allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class OtherAlloc, enable_if_t<is_adl_proof_allocator<OtherAlloc>, int> = 0>\r\n    friend constexpr bool operator==(const alloc&, const OtherAlloc&) noexcept {\r\n        return true;\r\n    }\r\n#if !_HAS_CXX20\r\n    template <class OtherAlloc, enable_if_t<is_adl_proof_allocator<OtherAlloc>, int> = 0>\r\n    friend constexpr bool operator!=(const alloc&, const OtherAlloc&) noexcept {\r\n        return false;\r\n    }\r\n#endif // !_HAS_CXX20\r\n};\r\n\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\n\r\ntemplate <class T>\r\nstruct tagged_nontrivial {\r\n    tagged_nontrivial() noexcept {}\r\n    tagged_nontrivial(const tagged_nontrivial&) {}\r\n    tagged_nontrivial(tagged_nontrivial&&) noexcept {}\r\n    tagged_nontrivial& operator=(const tagged_nontrivial&) {\r\n        return *this;\r\n    }\r\n    tagged_nontrivial& operator=(tagged_nontrivial&&) noexcept {\r\n        return *this;\r\n    }\r\n    ~tagged_nontrivial() noexcept {}\r\n};\r\n\r\ntemplate <class T>\r\nvoid test_adl_proof_shared_ptr_creation_one() { // COMPILE-ONLY\r\n    // Function calls are intentionally qualified.\r\n    (void) shared_ptr<T>{};\r\n    (void) shared_ptr<T>{new T};\r\n    (void) shared_ptr<T>{new T, default_delete<T>{}};\r\n    (void) shared_ptr<T>{new T, default_delete<T>{}, adl_proof_allocator<T>{}};\r\n    (void) shared_ptr<T>{std::make_unique<T>()};\r\n\r\n    (void) std::make_shared<T>();\r\n    (void) std::make_shared<T>(T{});\r\n    (void) std::allocate_shared<T>(adl_proof_allocator<T>{});\r\n    (void) std::allocate_shared<T>(adl_proof_allocator<T>{}, T{});\r\n\r\n#if _HAS_CXX20\r\n    T src[42]{};\r\n    T src2[6][6]{};\r\n\r\n    (void) std::make_shared<T[]>(42);\r\n    (void) std::make_shared<T[]>(42, T{});\r\n    (void) std::make_shared<T[][42]>(42);\r\n    (void) std::make_shared<T[][42]>(42, src);\r\n    (void) std::make_shared<T[42][42]>();\r\n    (void) std::make_shared<T[42][42]>(src);\r\n\r\n    (void) std::make_shared<T[][6][6]>(6, src2);\r\n    (void) std::make_shared<T[6][6][6]>(src2);\r\n\r\n    (void) std::make_shared_for_overwrite<T>();\r\n    (void) std::make_shared_for_overwrite<T[]>(42);\r\n    (void) std::make_shared_for_overwrite<T[42]>();\r\n    (void) std::make_shared_for_overwrite<T[][42]>(42);\r\n    (void) std::make_shared_for_overwrite<T[42][42]>();\r\n\r\n    (void) std::allocate_shared<T[]>(adl_proof_allocator<T>{}, 42);\r\n    (void) std::allocate_shared<T[]>(adl_proof_allocator<T>{}, 42, T{});\r\n    (void) std::allocate_shared<T[][42]>(adl_proof_allocator<T>{}, 42);\r\n    (void) std::allocate_shared<T[][42]>(adl_proof_allocator<T>{}, 42, src);\r\n    (void) std::allocate_shared<T[42]>(adl_proof_allocator<T>{});\r\n    (void) std::allocate_shared<T[42]>(adl_proof_allocator<T>{}, T{});\r\n    (void) std::allocate_shared<T[42][42]>(adl_proof_allocator<T>{});\r\n    (void) std::allocate_shared<T[42][42]>(adl_proof_allocator<T>{}, src);\r\n\r\n    (void) std::allocate_shared<T[][6][6]>(adl_proof_allocator<T>{}, 6, src2);\r\n    (void) std::allocate_shared<T[6][6][6]>(adl_proof_allocator<T>{}, src2);\r\n\r\n    (void) std::allocate_shared_for_overwrite<T>(adl_proof_allocator<T>{});\r\n    (void) std::allocate_shared_for_overwrite<T[]>(adl_proof_allocator<T>{}, 42);\r\n    (void) std::allocate_shared_for_overwrite<T[42]>(adl_proof_allocator<T>{});\r\n    (void) std::allocate_shared_for_overwrite<T[][42]>(adl_proof_allocator<T>{}, 42);\r\n    (void) std::allocate_shared_for_overwrite<T[42][42]>(adl_proof_allocator<T>{});\r\n#endif // _HAS_CXX20\r\n}\r\n\r\nvoid test_adl_proof_shared_ptr_creation() { // COMPILE-ONLY\r\n    using validator             = holder<incomplete>*;\r\n    using validating_nontrivial = tagged_nontrivial<holder<incomplete>>;\r\n\r\n    test_adl_proof_shared_ptr_creation_one<validator>();\r\n    test_adl_proof_shared_ptr_creation_one<validating_nontrivial>();\r\n}\r\n#endif // ^^^ no workaround ^^^\r\n\r\n\r\nint main() {\r\n    reset();\r\n\r\n    shared_ptr<int> p(new int(100));\r\n    test_and_reset(0, 0, 2, 0, 0, 0);\r\n\r\n    shared_ptr<int> pd1(new int(201), scorch);\r\n    test_and_reset(0, 0, 2, 0, 0, 0);\r\n\r\n    shared_ptr<int> pd2(new int(202), Burn());\r\n    test_and_reset(0, 0, 2, 0, 0, 0);\r\n\r\n    shared_ptr<int> pda1(new int(301), scorch, Mallocator<int>());\r\n    test_and_reset(1, 0, 1, 0, 0, 0);\r\n\r\n    shared_ptr<int> pda2(new int(302), Burn(), Mallocator<int>());\r\n    test_and_reset(1, 0, 1, 0, 0, 0);\r\n\r\n    shared_ptr<int> mp = make_shared<int>(401);\r\n    test_and_reset(0, 0, 1, 0, 0, 0);\r\n\r\n    shared_ptr<int> mpa = allocate_shared<int>(Mallocator<int>(), 402);\r\n    test_and_reset(1, 0, 0, 0, 0, 0);\r\n\r\n    assert(*p == 100);\r\n    assert(*pd1 == 201);\r\n    assert(*pd2 == 202);\r\n    assert(*pda1 == 301);\r\n    assert(*pda2 == 302);\r\n    assert(*mp == 401);\r\n    assert(*mpa == 402);\r\n\r\n\r\n    weak_ptr<int> wp(p);\r\n    test_and_reset(0, 0, 0, 0, 0, 0);\r\n\r\n    weak_ptr<int> wpd1(pd1);\r\n    test_and_reset(0, 0, 0, 0, 0, 0);\r\n\r\n    weak_ptr<int> wpd2(pd2);\r\n    test_and_reset(0, 0, 0, 0, 0, 0);\r\n\r\n    weak_ptr<int> wpda1(pda1);\r\n    test_and_reset(0, 0, 0, 0, 0, 0);\r\n\r\n    weak_ptr<int> wpda2(pda2);\r\n    test_and_reset(0, 0, 0, 0, 0, 0);\r\n\r\n    weak_ptr<int> wmp(mp);\r\n    test_and_reset(0, 0, 0, 0, 0, 0);\r\n\r\n    weak_ptr<int> wmpa(mpa);\r\n    test_and_reset(0, 0, 0, 0, 0, 0);\r\n\r\n    assert(*wp.lock() == 100);\r\n    assert(*wpd1.lock() == 201);\r\n    assert(*wpd2.lock() == 202);\r\n    assert(*wpda1.lock() == 301);\r\n    assert(*wpda2.lock() == 302);\r\n    assert(*wmp.lock() == 401);\r\n    assert(*wmpa.lock() == 402);\r\n\r\n\r\n    p.reset();\r\n    test_and_reset(0, 0, 0, 1, 0, 0);\r\n\r\n    pd1.reset();\r\n    test_and_reset(0, 0, 0, 1, 1, 0);\r\n\r\n    pd2.reset();\r\n    test_and_reset(0, 0, 0, 1, 0, 1);\r\n\r\n    pda1.reset();\r\n    test_and_reset(0, 0, 0, 1, 1, 0);\r\n\r\n    pda2.reset();\r\n    test_and_reset(0, 0, 0, 1, 0, 1);\r\n\r\n    mp.reset();\r\n    test_and_reset(0, 0, 0, 0, 0, 0);\r\n\r\n    mpa.reset();\r\n    test_and_reset(0, 0, 0, 0, 0, 0);\r\n\r\n    assert(!p);\r\n    assert(!pd1);\r\n    assert(!pd2);\r\n    assert(!pda1);\r\n    assert(!pda2);\r\n    assert(!mp);\r\n    assert(!mpa);\r\n\r\n    assert(wp.expired());\r\n    assert(wpd1.expired());\r\n    assert(wpd2.expired());\r\n    assert(wpda1.expired());\r\n    assert(wpda2.expired());\r\n    assert(wmp.expired());\r\n    assert(wmpa.expired());\r\n\r\n\r\n    wp.reset();\r\n    test_and_reset(0, 0, 0, 1, 0, 0);\r\n\r\n    wpd1.reset();\r\n    test_and_reset(0, 0, 0, 1, 0, 0);\r\n\r\n    wpd2.reset();\r\n    test_and_reset(0, 0, 0, 1, 0, 0);\r\n\r\n    wpda1.reset();\r\n    test_and_reset(0, 1, 0, 0, 0, 0);\r\n\r\n    wpda2.reset();\r\n    test_and_reset(0, 1, 0, 0, 0, 0);\r\n\r\n    wmp.reset();\r\n    test_and_reset(0, 0, 0, 1, 0, 0);\r\n\r\n    wmpa.reset();\r\n    test_and_reset(0, 1, 0, 0, 0, 0);\r\n\r\n    assert(wp.expired());\r\n    assert(wpd1.expired());\r\n    assert(wpd2.expired());\r\n    assert(wpda1.expired());\r\n    assert(wpda2.expired());\r\n    assert(wmp.expired());\r\n    assert(wmpa.expired());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_470547_facet_bug_stringstream/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_470547_facet_bug_stringstream/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <sstream>\r\n\r\nusing namespace std;\r\n\r\nstruct Cat {\r\n    ~Cat() {\r\n        stringstream s1;\r\n    }\r\n};\r\n\r\nCat g_cat;\r\n\r\nint main() {\r\n    stringstream s2;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_482830_header_only_string/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_482830_header_only_string/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cctype>\r\n#include <sstream>\r\n#include <string>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nchar first(const string& s) {\r\n    return *s.begin();\r\n}\r\n\r\nint main() {\r\n    ostringstream oss;\r\n    oss << \"hello\";\r\n    string str = oss.str();\r\n\r\n    string::const_iterator it = str.begin();\r\n    string str2(it, it + 2);\r\n\r\n    assert(str == \"hello\" && str2 == \"he\");\r\n\r\n    ostringstream oss2(\"kitty\");\r\n    char c = first(oss2.str());\r\n\r\n    assert(c == 'k');\r\n\r\n    string a = \"kittens\";\r\n    string b = \"cute fluffy \" + a;\r\n\r\n    transform(b.begin(), b.end(), b.begin(), [](int c) { return static_cast<char>(toupper(c)); });\r\n\r\n    assert(b == \"CUTE FLUFFY KITTENS\");\r\n\r\n    istringstream iss(\"the quick brown fox jumps over the lazy dog\");\r\n\r\n    vector<string> v;\r\n\r\n    for (string s; getline(iss, s, ' ');) {\r\n        v.push_back(s);\r\n    }\r\n\r\n    assert(v.size() == 9 && v[0] == \"the\" && v[8] == \"dog\");\r\n\r\n    istringstream iss2(\"brown;dog;fox;jumps;lazy;over;quick;the;the\");\r\n\r\n    vector<string> v2;\r\n\r\n    for (string s; getline(iss2, s, ';');) {\r\n        v2.push_back(s);\r\n    }\r\n\r\n    assert(v2.size() == 9 && v2[0] == \"brown\" && v2[8] == \"the\");\r\n\r\n    sort(v.begin(), v.end());\r\n\r\n    assert(v == v2);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_491486_floating_point_hash/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_491486_floating_point_hash/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstring>\r\n#include <functional>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <class Target, class Source>\r\n[[nodiscard]] Target fake_bit_cast(const Source& source) noexcept {\r\n    STATIC_ASSERT(sizeof(Source) == sizeof(Target));\r\n    Target target;\r\n    memcpy(&target, &source, sizeof(Target));\r\n    return target;\r\n}\r\n\r\ntemplate <class Floating>\r\nvoid test_case() {\r\n    using MatchingUInt   = conditional_t<is_same_v<Floating, float>, unsigned int, unsigned long long>;\r\n    const auto topBitSet = ~(~MatchingUInt{} >> 1);\r\n\r\n    const auto pos0d = static_cast<Floating>(0.0);\r\n    assert(fake_bit_cast<MatchingUInt>(pos0d) == 0);\r\n    const auto neg0d = static_cast<Floating>(0.0 * -1.0);\r\n    assert(fake_bit_cast<MatchingUInt>(neg0d) == topBitSet);\r\n#pragma warning(push)\r\n#pragma warning(disable : 6326) // potential comparison of a constant with another constant\r\n    assert(pos0d == neg0d);\r\n#pragma warning(pop)\r\n    assert(hash<Floating>()(pos0d) == hash<Floating>()(neg0d));\r\n\r\n    array<size_t, 15> a{{\r\n        hash<Floating>()(static_cast<Floating>(0.0)),\r\n        hash<Floating>()(static_cast<Floating>(0.1)),\r\n        hash<Floating>()(static_cast<Floating>(0.2)),\r\n        hash<Floating>()(static_cast<Floating>(0.3)),\r\n        hash<Floating>()(static_cast<Floating>(0.4)),\r\n        hash<Floating>()(static_cast<Floating>(0.5)),\r\n        hash<Floating>()(static_cast<Floating>(0.6)),\r\n        hash<Floating>()(static_cast<Floating>(0.7)),\r\n        hash<Floating>()(static_cast<Floating>(0.8)),\r\n        hash<Floating>()(static_cast<Floating>(0.9)),\r\n        hash<Floating>()(static_cast<Floating>(1.0)),\r\n        hash<Floating>()(static_cast<Floating>(1.1)),\r\n        hash<Floating>()(static_cast<Floating>(1.2)),\r\n        hash<Floating>()(static_cast<Floating>(1.3)),\r\n        hash<Floating>()(static_cast<Floating>(1.4)),\r\n    }};\r\n\r\n    sort(a.begin(), a.end());\r\n    assert(unique(a.begin(), a.end()) == a.end());\r\n}\r\n\r\nint main() {\r\n    test_case<float>();\r\n    test_case<double>();\r\n    test_case<long double>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_492345_tr1_function_swap/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_492345_tr1_function_swap/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <new>\r\n#include <tuple>\r\n#include <vector>\r\n\r\nusing namespace std;\r\nusing namespace std::placeholders;\r\n\r\nclass mult {\r\npublic:\r\n    explicit mult(const int n) {\r\n        m_p = new tuple<mult*, int>(this, n);\r\n\r\n        verify();\r\n    }\r\n\r\n    mult(const mult& other) {\r\n        other.verify();\r\n\r\n        m_p = new tuple<mult*, int>(this, get<1>(*other.m_p));\r\n\r\n        verify();\r\n    }\r\n\r\n    mult& operator=(const mult& other) {\r\n        verify();\r\n        other.verify();\r\n\r\n        get<1>(*m_p) = get<1>(*other.m_p);\r\n\r\n        verify();\r\n\r\n        return *this;\r\n    }\r\n\r\n    ~mult() {\r\n        verify();\r\n\r\n        delete m_p;\r\n    }\r\n\r\n    int operator()(const int x, const int y) const {\r\n        verify();\r\n\r\n        return x * y * get<1>(*m_p);\r\n    }\r\n\r\nprivate:\r\n    void verify() const {\r\n        assert(m_p);\r\n        assert(get<0>(*m_p) == this);\r\n    }\r\n\r\n    tuple<mult*, int>* m_p;\r\n};\r\n\r\nint add(int a, int b, int c, int d, int e) {\r\n    return a + b + c + d + e;\r\n}\r\n\r\nvoid inspect(const function<int(int, int)>& f, const int val) {\r\n    if (val != 0) {\r\n        assert(f(3, 4) == val);\r\n    } else {\r\n        assert(!f);\r\n    }\r\n}\r\n\r\ntypedef function<int(int, int)> fxn_t;\r\n\r\nvoid scribble(unsigned char* const p, const bool destroy = true) {\r\n    if (destroy) {\r\n        fxn_t* const f = static_cast<fxn_t*>(static_cast<void*>(p));\r\n\r\n        f->~fxn_t();\r\n    }\r\n\r\n    for (size_t i = 0; i < sizeof(fxn_t); ++i) {\r\n        p[i] = 0xCC;\r\n    }\r\n}\r\n\r\ntemplate <typename F, typename G>\r\nvoid test(const F& f_orig, const G& g_orig, const int f_val, const int g_val) {\r\n    unsigned char* const a = static_cast<unsigned char*>(malloc(sizeof(fxn_t)));\r\n    unsigned char* const b = static_cast<unsigned char*>(malloc(sizeof(fxn_t)));\r\n\r\n    scribble(a, false);\r\n    scribble(b, false);\r\n\r\n    {\r\n        fxn_t* fp = new (static_cast<void*>(a)) fxn_t(f_orig);\r\n        fxn_t* gp = new (static_cast<void*>(b)) fxn_t(g_orig);\r\n\r\n        _Analysis_assume_(fp);\r\n        _Analysis_assume_(gp);\r\n\r\n        fxn_t& f = *fp;\r\n        fxn_t& g = *gp;\r\n\r\n        inspect(f, f_val);\r\n\r\n        f.swap(g);\r\n\r\n        scribble(b);\r\n\r\n        inspect(f, g_val);\r\n\r\n        scribble(a);\r\n    }\r\n\r\n    {\r\n        fxn_t* fp = new (static_cast<void*>(a)) fxn_t(f_orig);\r\n        fxn_t* gp = new (static_cast<void*>(b)) fxn_t(g_orig);\r\n\r\n        _Analysis_assume_(fp);\r\n        _Analysis_assume_(gp);\r\n\r\n        fxn_t& f = *fp;\r\n        fxn_t& g = *gp;\r\n\r\n        inspect(g, g_val);\r\n\r\n        f.swap(g);\r\n\r\n        scribble(a);\r\n\r\n        inspect(g, f_val);\r\n\r\n        scribble(b);\r\n    }\r\n\r\n    free(a);\r\n    free(b);\r\n}\r\n\r\n\r\nint global = 0;\r\n\r\nvoid increment() {\r\n    ++global;\r\n}\r\n\r\nvoid ten() {\r\n    global *= 10;\r\n}\r\n\r\nint main() {\r\n    test(mult(100), mult(200), 1200, 2400);\r\n    test(mult(300), bind(add, _1, _2, 1000, 200, 30), 3600, 1237);\r\n    test(bind(add, _1, _2, 2000, 300, 40), mult(400), 2347, 4800);\r\n    test(bind(add, _1, _2, 3000, 400, 50), bind(add, _1, _2, 4000, 500, 60), 3457, 4567);\r\n    test(mult(500), nullptr, 6000, 0);\r\n    test(nullptr, mult(600), 0, 7200);\r\n    test(bind(add, _1, _2, 5000, 600, 70), nullptr, 5677, 0);\r\n    test(nullptr, bind(add, _1, _2, 6000, 700, 80), 0, 6787);\r\n    test(nullptr, nullptr, 0, 0);\r\n\r\n    assert(global == 0);\r\n\r\n    vector<function<void()>> v;\r\n\r\n    v.push_back(increment);\r\n    v.push_back(increment);\r\n    v.push_back(increment);\r\n    v.push_back(increment);\r\n    v.push_back(ten);\r\n    v.push_back(increment);\r\n    v.push_back(increment);\r\n    v.push_back(increment);\r\n    v.push_back(increment);\r\n    v.push_back(increment);\r\n    v.push_back(increment);\r\n    v.push_back(increment);\r\n\r\n    for (const auto& fn : v) {\r\n        fn();\r\n    }\r\n\r\n    assert(global == 47);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_498944_enable_shared_from_this_auto_ptr/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_498944_enable_shared_from_this_auto_ptr/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _HAS_AUTO_PTR_ETC 1\r\n#include <cassert>\r\n#include <memory>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nclass A : public enable_shared_from_this<A> {\r\npublic:\r\n    explicit A(const int n) : m_n(n) {}\r\n\r\n    int num() const {\r\n        return m_n;\r\n    }\r\n\r\nprivate:\r\n    int m_n;\r\n};\r\n\r\nint main() {\r\n    {\r\n        auto_ptr<A> a(new A(4));\r\n        shared_ptr<A> s(move(a));\r\n        shared_ptr<A> t = s->shared_from_this();\r\n        assert(t->num() == 4);\r\n    }\r\n\r\n    {\r\n        auto_ptr<A> a(new A(7));\r\n        shared_ptr<A> s;\r\n        s               = move(a);\r\n        shared_ptr<A> t = s->shared_from_this();\r\n        assert(t->num() == 7);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_500860_overloaded_address_of/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_500860_overloaded_address_of/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <exception>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <istream>\r\n#include <iterator>\r\n#include <list>\r\n#include <map>\r\n#include <memory>\r\n#include <queue>\r\n#include <set>\r\n#include <stack>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#ifndef _M_CEE_PURE\r\n#include <atomic>\r\n#endif // _M_CEE_PURE\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nnamespace Meow {\r\n    struct Evil {\r\n        int data;\r\n\r\n        constexpr Evil() noexcept : data(1701) {}\r\n\r\n        template <int = 0>\r\n        const Evil& operator=(const Evil&) const {\r\n            // provide an Evil operator= for std::tuple::swap\r\n            return *this;\r\n        }\r\n\r\n        int func() const {\r\n            return 1729;\r\n        }\r\n\r\n        Evil* get() {\r\n            return this;\r\n        }\r\n\r\n        constexpr const Evil* get() const {\r\n            return this;\r\n        }\r\n\r\n        void operator&() const = delete;\r\n\r\n        template <typename T>\r\n        operator T&() const = delete;\r\n\r\n        bool operator<(const Evil&) const {\r\n            return false;\r\n        }\r\n\r\n        bool operator==(const Evil&) const {\r\n            return true;\r\n        }\r\n    };\r\n\r\n    istream& operator>>(istream& is, Evil&) {\r\n        return is;\r\n    }\r\n\r\n    // If it's dragged in via ADL, this op,() will absorb anything.\r\n    template <typename T, typename U>\r\n    void operator,(const T&, const U&) = delete;\r\n\r\n    // VSO-258601 \"std::vector should not rely on operator& in Debug mode\"\r\n    // If it's dragged in via ADL, this op&() will absorb anything.\r\n    template <typename T>\r\n    void operator&(const T&) = delete;\r\n} // namespace Meow\r\n\r\nusing Meow::Evil;\r\n\r\nstruct Hash {\r\n    size_t operator()(const Evil&) const {\r\n        return 0;\r\n    }\r\n};\r\n\r\ntemplate class std::array<Evil, 5>;\r\ntemplate class std::array<Evil, 0>;\r\ntemplate class std::deque<Evil>;\r\ntemplate class std::forward_list<Evil>;\r\ntemplate class std::list<Evil>;\r\ntemplate class std::vector<Evil>;\r\n\r\ntemplate class std::priority_queue<Evil>;\r\ntemplate class std::queue<Evil>;\r\ntemplate class std::stack<Evil>;\r\n\r\ntemplate struct std::pair<Evil, Evil>;\r\ntemplate class std::tuple<Evil, Evil, Evil>;\r\n\r\ntemplate class std::map<Evil, Evil>;\r\ntemplate class std::multimap<Evil, Evil>;\r\ntemplate class std::set<Evil>;\r\ntemplate class std::multiset<Evil>;\r\n\r\ntemplate class std::unordered_map<Evil, Evil, Hash>;\r\ntemplate class std::unordered_multimap<Evil, Evil, Hash>;\r\ntemplate class std::unordered_set<Evil, Hash>;\r\ntemplate class std::unordered_multiset<Evil, Hash>;\r\n\r\n\r\ntemplate class std::_Array_iterator<Evil, 5>;\r\ntemplate class std::_Array_const_iterator<Evil, 5>;\r\n\r\ntemplate class std::_Deque_iterator<_Deque_val<_Deque_simple_types<Evil>>>;\r\ntemplate class std::_Deque_const_iterator<_Deque_val<_Deque_simple_types<Evil>>>;\r\n\r\ntemplate class std::_Flist_iterator<_Flist_val<_Flist_simple_types<Evil>>>;\r\ntemplate class std::_Flist_const_iterator<_Flist_val<_Flist_simple_types<Evil>>>;\r\n\r\ntemplate class std::_List_iterator<_List_val<_List_simple_types<Evil>>>;\r\ntemplate class std::_List_const_iterator<_List_val<_List_simple_types<Evil>>>;\r\n\r\ntemplate class std::_Vector_iterator<_Vector_val<_Simple_types<Evil>>>;\r\ntemplate class std::_Vector_const_iterator<_Vector_val<_Simple_types<Evil>>>;\r\n\r\ntemplate class std::_Tree_iterator<_Tree_val<_Tree_simple_types<pair<const Evil, Evil>>>>;\r\ntemplate class std::_Tree_const_iterator<_Tree_val<_Tree_simple_types<pair<const Evil, Evil>>>>;\r\n\r\ntemplate class std::_Tree_const_iterator<_Tree_val<_Tree_simple_types<Evil>>>;\r\n\r\ntemplate class std::_List_iterator<_List_val<_List_simple_types<pair<const Evil, Evil>>>>;\r\ntemplate class std::_List_const_iterator<_List_val<_List_simple_types<pair<const Evil, Evil>>>>;\r\n\r\n\r\ntemplate class std::_Deque_unchecked_iterator<_Deque_val<_Deque_simple_types<Evil>>>;\r\ntemplate class std::_Deque_unchecked_const_iterator<_Deque_val<_Deque_simple_types<Evil>>>;\r\n\r\ntemplate class std::_Flist_unchecked_iterator<_Flist_val<_Flist_simple_types<Evil>>>;\r\ntemplate class std::_Flist_unchecked_const_iterator<_Flist_val<_Flist_simple_types<Evil>>>;\r\n\r\ntemplate class std::_List_unchecked_iterator<_List_val<_List_simple_types<Evil>>>;\r\ntemplate class std::_List_unchecked_const_iterator<_List_val<_List_simple_types<Evil>>>;\r\n\r\ntemplate class std::_Tree_unchecked_iterator<_Tree_val<_Tree_simple_types<pair<const Evil, Evil>>>>;\r\ntemplate class std::_Tree_unchecked_const_iterator<_Tree_val<_Tree_simple_types<pair<const Evil, Evil>>>>;\r\n\r\ntemplate class std::_Tree_unchecked_const_iterator<_Tree_val<_Tree_simple_types<Evil>>>;\r\n\r\ntemplate class std::_List_unchecked_iterator<_List_val<_List_simple_types<pair<const Evil, Evil>>>>;\r\ntemplate class std::_List_unchecked_const_iterator<_List_val<_List_simple_types<pair<const Evil, Evil>>>>;\r\n\r\n\r\ntemplate class std::reverse_iterator<Evil*>;\r\ntemplate class std::move_iterator<Evil*>;\r\ntemplate class std::istream_iterator<Evil>;\r\n\r\n\r\ntemplate class std::shared_ptr<Evil>;\r\ntemplate class std::weak_ptr<Evil>;\r\ntemplate class std::unique_ptr<Evil>;\r\ntemplate class std::unique_ptr<Evil[]>;\r\n\r\n\r\ntemplate class std::reference_wrapper<Evil>;\r\ntemplate class std::reference_wrapper<const Evil>;\r\n\r\n\r\n#ifndef _M_CEE_PURE\r\n// VSO-198738 \"<atomic>: atomic<T> should support overloaded op&\"\r\ntemplate struct std::atomic<Evil>;\r\n#endif // _M_CEE_PURE\r\n\r\n\r\nvoid test(Evil* p, Evil* correct, int i) {\r\n    assert(p == correct && i == 1);\r\n}\r\n\r\nvoid test(const Evil* p, Evil* correct, int i) {\r\n    assert(p == correct && i == 2);\r\n}\r\n\r\nvoid test(volatile Evil* p, Evil* correct, int i) {\r\n    assert(p == correct && i == 3);\r\n}\r\n\r\nvoid test(const volatile Evil* p, Evil* correct, int i) {\r\n    assert(p == correct && i == 4);\r\n}\r\n\r\nvoid test_LWG_2296();\r\n\r\nint main() {\r\n    Evil e;\r\n\r\n    assert(addressof(e) == e.get());\r\n\r\n    Evil& m                 = e;\r\n    const Evil& c           = e;\r\n    volatile Evil& v        = e;\r\n    const volatile Evil& cv = e;\r\n\r\n    test(addressof(m), e.get(), 1);\r\n    test(addressof(c), e.get(), 2);\r\n    test(addressof(v), e.get(), 3);\r\n    test(addressof(cv), e.get(), 4);\r\n\r\n    (void) ref(e);\r\n    (void) ref(c);\r\n    (void) cref(e);\r\n    (void) cref(c);\r\n\r\n    assert(mem_fn(&Evil::data)(e) == 1701);\r\n    assert(mem_fn(&Evil::func)(e) == 1729);\r\n\r\n    Evil arr[5];\r\n    vector<Evil> vec(begin(arr), end(arr));\r\n\r\n    (void) make_exception_ptr(e);\r\n\r\n    Evil arr2[5];\r\n    swap(arr, arr2);\r\n    swap(arr[0], arr2[0]);\r\n\r\n    test_LWG_2296();\r\n}\r\n\r\n\r\n// LWG-2296 \"std::addressof should be constexpr\"\r\n\r\nconstexpr int g_int = 7;\r\nconstexpr Evil g_evil{};\r\nint func(int x) {\r\n    return x * x;\r\n}\r\nconstexpr int g_array[3] = {11, 22, 33};\r\n\r\nvoid test_LWG_2296() {\r\n    STATIC_ASSERT(addressof(g_int) == &g_int);\r\n    STATIC_ASSERT(addressof(g_evil) == g_evil.get());\r\n    STATIC_ASSERT(addressof(func) == &func);\r\n    STATIC_ASSERT(addressof(g_array) == &g_array);\r\n\r\n    assert(addressof(g_int) == &g_int);\r\n    assert(addressof(g_evil) == g_evil.get());\r\n    assert(addressof(func) == &func);\r\n    assert(addressof(g_array) == &g_array);\r\n\r\n    int i                  = 11;\r\n    const int ci           = 22;\r\n    volatile int vi        = 33;\r\n    const volatile int cvi = 44;\r\n\r\n    assert(addressof(i) == &i);\r\n    assert(addressof(ci) == &ci);\r\n    assert(addressof(vi) == &vi);\r\n    assert(addressof(cvi) == &cvi);\r\n}\r\n\r\n// LWG-2598 \"addressof works on temporaries [and should not]\"\r\n\r\ntemplate <typename, typename = void>\r\nconstexpr bool can_addressof = false;\r\ntemplate <typename T>\r\nconstexpr bool can_addressof<T, void_t<decltype(addressof(declval<T>()))>> = true;\r\n\r\nvoid test_LWG_2598() { // COMPILE-ONLY\r\n    STATIC_ASSERT(can_addressof<int&>);\r\n    STATIC_ASSERT(can_addressof<const int&>);\r\n    STATIC_ASSERT(can_addressof<volatile int&>);\r\n    STATIC_ASSERT(can_addressof<const volatile int&>);\r\n    STATIC_ASSERT(!can_addressof<int>);\r\n    STATIC_ASSERT(!can_addressof<const int>);\r\n    STATIC_ASSERT(!can_addressof<volatile int>);\r\n    STATIC_ASSERT(!can_addressof<const volatile int>);\r\n}\r\n\r\n// Also test DevCom-1134328, in which `deque<S*>::_Unchecked_iterator{} - 1` finds\r\n// operator-(const S&, int) by argument-dependent lookup causing overload resolution\r\n// to fail due to ambiguity when compiling 64-bit.\r\nstruct S {\r\n    S() = default;\r\n\r\n    template <typename T>\r\n    S(T&&);\r\n};\r\n\r\nS operator-(const S&, int);\r\n\r\nvoid test_DevCom_1134328() { // COMPILE-ONLY\r\n    deque<S*> d{nullptr};\r\n    (void) d.back();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_544258_heterogeneous_comparisons/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_544258_heterogeneous_comparisons/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Dev10-544258 \"STL/xutility: Debug validation of predicate classes fail on bound predicates\"\r\n// DevDiv-813065 \"<algorithm>: C++ stdlib comparator debugging breaks compile of custom Comparators in std::equal_range\r\n// family of functions\"\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <iterator>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nstruct Cat {\r\n    int c;\r\n\r\n    explicit Cat(int x) : c(x) {}\r\n};\r\n\r\nstruct Dog {\r\n    int d;\r\n\r\n    explicit Dog(int x) : d(x) {}\r\n};\r\n\r\nstruct AssignableEither {\r\n    AssignableEither& operator=(const Cat&) {\r\n        return *this;\r\n    }\r\n    AssignableEither& operator=(const Dog&) {\r\n        return *this;\r\n    }\r\n};\r\n\r\nstruct CatLessDog {\r\n    bool operator()(const Cat& cat, const Dog& dog) const {\r\n        return cat.c < dog.d;\r\n    }\r\n};\r\n\r\nstruct DogLessCat {\r\n    bool operator()(const Dog& dog, const Cat& cat) const {\r\n        return dog.d < cat.c;\r\n    }\r\n};\r\n\r\nstruct Both {\r\n    bool operator()(const Cat& cat, const Dog& dog) const {\r\n        return cat.c < dog.d;\r\n    }\r\n\r\n    bool operator()(const Dog& dog, const Cat& cat) const {\r\n        return dog.d < cat.c;\r\n    }\r\n};\r\n\r\nint main() {\r\n    const Cat cats[] = {\r\n        Cat(10), Cat(20), Cat(30), Cat(40), Cat(50), Cat(50), Cat(50), Cat(60), Cat(70), Cat(80), Cat(90)};\r\n\r\n    assert(lower_bound(begin(cats), end(cats), Dog(0), CatLessDog()) == begin(cats));\r\n    assert(lower_bound(begin(cats), end(cats), Dog(33), CatLessDog()) == begin(cats) + 3);\r\n    assert(lower_bound(begin(cats), end(cats), Dog(50), CatLessDog()) == begin(cats) + 4);\r\n    assert(lower_bound(begin(cats), end(cats), Dog(77), CatLessDog()) == begin(cats) + 9);\r\n    assert(lower_bound(begin(cats), end(cats), Dog(99), CatLessDog()) == end(cats));\r\n\r\n    assert(upper_bound(begin(cats), end(cats), Dog(0), DogLessCat()) == begin(cats));\r\n    assert(upper_bound(begin(cats), end(cats), Dog(33), DogLessCat()) == begin(cats) + 3);\r\n    assert(upper_bound(begin(cats), end(cats), Dog(50), DogLessCat()) == begin(cats) + 7);\r\n    assert(upper_bound(begin(cats), end(cats), Dog(77), DogLessCat()) == begin(cats) + 9);\r\n    assert(upper_bound(begin(cats), end(cats), Dog(99), DogLessCat()) == end(cats));\r\n\r\n    assert(equal_range(begin(cats), end(cats), Dog(0), Both()) == make_pair(begin(cats), begin(cats)));\r\n    assert(equal_range(begin(cats), end(cats), Dog(33), Both()) == make_pair(begin(cats) + 3, begin(cats) + 3));\r\n    assert(equal_range(begin(cats), end(cats), Dog(50), Both()) == make_pair(begin(cats) + 4, begin(cats) + 7));\r\n    assert(equal_range(begin(cats), end(cats), Dog(77), Both()) == make_pair(begin(cats) + 9, begin(cats) + 9));\r\n    assert(equal_range(begin(cats), end(cats), Dog(99), Both()) == make_pair(end(cats), end(cats)));\r\n\r\n    assert(!binary_search(begin(cats), end(cats), Dog(0), Both()));\r\n    assert(!binary_search(begin(cats), end(cats), Dog(33), Both()));\r\n    assert(binary_search(begin(cats), end(cats), Dog(50), Both()));\r\n    assert(!binary_search(begin(cats), end(cats), Dog(77), Both()));\r\n    assert(binary_search(begin(cats), end(cats), Dog(80), Both()));\r\n    assert(!binary_search(begin(cats), end(cats), Dog(99), Both()));\r\n\r\n    // also test VSO-488479 \"std::includes unable to be compiled with /MDd\"\r\n    const Dog dogs[] = {Dog(1729)};\r\n    AssignableEither results[size(cats) + size(dogs)];\r\n    merge(begin(cats), end(cats), begin(dogs), end(dogs), results, Both());\r\n    (void) includes(begin(cats), end(cats), begin(dogs), end(dogs), Both());\r\n    set_union(begin(cats), end(cats), begin(dogs), end(dogs), results, Both());\r\n    set_intersection(begin(cats), end(cats), begin(dogs), end(dogs), results, Both());\r\n    set_difference(begin(cats), end(cats), begin(dogs), end(dogs), results, Both());\r\n    set_symmetric_difference(begin(cats), end(cats), begin(dogs), end(dogs), results, Both());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_555491_complex_linker_errors/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_555491_complex_linker_errors/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cmath>\r\n#include <complex>\r\n#include <cstdint>\r\n#include <cstring>\r\n#include <limits>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <class T, class U>\r\nT pseudo_bit_cast(const U& source) {\r\n    static_assert(sizeof(T) == sizeof(U), \"\");\r\n    T result;\r\n    memcpy(&result, &source, sizeof(result));\r\n    return result;\r\n}\r\n\r\nconstexpr uint32_t allowedFloatUlp  = 2;\r\nconstexpr uint64_t allowedDoubleUlp = 1;\r\n\r\nbool nearly_equal(const float actual, const float expected) {\r\n    // the subtraction produces [-N ULP == large positive value, 0, +N ULP == N]\r\n    const auto difference = pseudo_bit_cast<uint32_t>(actual) - pseudo_bit_cast<uint32_t>(expected);\r\n    // now [-N ULP == 0, 0 == N, +N ULP == 2N]\r\n    const auto differencePN = difference + allowedFloatUlp;\r\n    return differencePN <= 2 * allowedFloatUlp;\r\n}\r\n\r\nbool nearly_equal(const double actual, const double expected) {\r\n    const auto difference   = pseudo_bit_cast<uint64_t>(actual) - pseudo_bit_cast<uint64_t>(expected);\r\n    const auto differencePN = difference + allowedDoubleUlp;\r\n    return differencePN <= 2 * allowedDoubleUlp;\r\n}\r\n\r\nbool nearly_equal(const long double actual, const long double expected) {\r\n    return nearly_equal(static_cast<double>(actual), static_cast<double>(expected));\r\n}\r\n\r\ntemplate <class T>\r\nbool nearly_equal_partwise(const complex<T> actual, const complex<T> expected) {\r\n    return nearly_equal(actual.real(), expected.real()) && nearly_equal(actual.imag(), expected.imag());\r\n}\r\n\r\n// Also test GH-2728 <complex>: Implementation divergence for division by zero\r\nvoid test_gh_2728() {\r\n    const complex<double> zero{0, 0};\r\n    const complex<double> minus_zero{-0.0, 0.0};\r\n    constexpr double inf = numeric_limits<double>::infinity();\r\n    constexpr double nan = numeric_limits<double>::quiet_NaN();\r\n    {\r\n        const complex<double> test_one_one = complex<double>{1, 1} / zero;\r\n        assert(isinf(test_one_one.real()));\r\n        assert(test_one_one.real() > 0);\r\n        assert(isinf(test_one_one.imag()));\r\n        assert(test_one_one.imag() > 0);\r\n    }\r\n    {\r\n        const complex<double> test_one_one = complex<double>{1, 1} / minus_zero;\r\n        assert(isinf(test_one_one.real()));\r\n        assert(test_one_one.real() < 0);\r\n        assert(isinf(test_one_one.imag()));\r\n        assert(test_one_one.imag() < 0);\r\n    }\r\n    {\r\n        const complex<double> test_one_zero = complex<double>{1, 0} / zero;\r\n        assert(isinf(test_one_zero.real()));\r\n        assert(test_one_zero.real() > 0);\r\n        assert(isnan(test_one_zero.imag()));\r\n    }\r\n    {\r\n        const complex<double> test_one_minus_one = complex<double>{1, -1} / zero;\r\n        assert(isinf(test_one_minus_one.real()));\r\n        assert(test_one_minus_one.real() > 0);\r\n        assert(isinf(test_one_minus_one.imag()));\r\n        assert(test_one_minus_one.imag() < 0);\r\n    }\r\n    {\r\n        const complex<double> test_zero_one = complex<double>{0, 1} / zero;\r\n        assert(isnan(test_zero_one.real()));\r\n        assert(isinf(test_zero_one.imag()));\r\n        assert(test_zero_one.imag() > 0);\r\n    }\r\n    {\r\n        const complex<double> test_zero_zero = complex<double>{0, 0} / zero;\r\n        assert(isnan(test_zero_zero.real()));\r\n        assert(isnan(test_zero_zero.imag()));\r\n    }\r\n    {\r\n        const complex<double> test_zero_zero = complex<double>{0, 0} / minus_zero;\r\n        assert(isnan(test_zero_zero.real()));\r\n        assert(isnan(test_zero_zero.imag()));\r\n    }\r\n    {\r\n        const complex<double> test_zero_minus_one = complex<double>{0, -1} / zero;\r\n        assert(isnan(test_zero_minus_one.real()));\r\n        assert(isinf(test_zero_minus_one.imag()));\r\n        assert(test_zero_minus_one.imag() < 0);\r\n    }\r\n    {\r\n        const complex<double> test_minus_one_one = complex<double>{-1, 1} / zero;\r\n        assert(isinf(test_minus_one_one.real()));\r\n        assert(test_minus_one_one.real() < 0);\r\n        assert(isinf(test_minus_one_one.imag()));\r\n        assert(test_minus_one_one.imag() > 0);\r\n    }\r\n    {\r\n        const complex<double> test_minus_one_zero = complex<double>{-1, 0} / zero;\r\n        assert(isinf(test_minus_one_zero.real()));\r\n        assert(test_minus_one_zero.real() < 0);\r\n        assert(isnan(test_minus_one_zero.imag()));\r\n    }\r\n    {\r\n        const complex<double> test_minus_one_minus_one = complex<double>{-1, -1} / zero;\r\n        assert(isinf(test_minus_one_minus_one.real()));\r\n        assert(test_minus_one_minus_one.real() < 0);\r\n        assert(isinf(test_minus_one_minus_one.imag()));\r\n        assert(test_minus_one_minus_one.imag() < 0);\r\n    }\r\n    {\r\n        const complex<double> test_minus_one_minus_one = complex<double>{-1, -1} / minus_zero;\r\n        assert(isinf(test_minus_one_minus_one.real()));\r\n        assert(test_minus_one_minus_one.real() > 0);\r\n        assert(isinf(test_minus_one_minus_one.imag()));\r\n        assert(test_minus_one_minus_one.imag() > 0);\r\n    }\r\n    {\r\n        const complex<double> test_inf_inf = complex<double>{inf, inf} / zero;\r\n        assert(isinf(test_inf_inf.real()));\r\n        assert(test_inf_inf.real() > 0);\r\n        assert(isinf(test_inf_inf.imag()));\r\n        assert(test_inf_inf.imag() > 0);\r\n    }\r\n    {\r\n        const complex<double> test_inf_inf = complex<double>{inf, inf} / minus_zero;\r\n        assert(isinf(test_inf_inf.real()));\r\n        assert(test_inf_inf.real() < 0);\r\n        assert(isinf(test_inf_inf.imag()));\r\n        assert(test_inf_inf.imag() < 0);\r\n    }\r\n    {\r\n        const complex<double> test_inf_minus_inf = complex<double>{inf, -inf} / zero;\r\n        assert(isinf(test_inf_minus_inf.real()));\r\n        assert(test_inf_minus_inf.real() > 0);\r\n        assert(isinf(test_inf_minus_inf.imag()));\r\n        assert(test_inf_minus_inf.imag() < 0);\r\n    }\r\n    {\r\n        const complex<double> test_minus_inf_minus_inf = complex<double>{-inf, -inf} / zero;\r\n        assert(isinf(test_minus_inf_minus_inf.real()));\r\n        assert(test_minus_inf_minus_inf.real() < 0);\r\n        assert(isinf(test_minus_inf_minus_inf.imag()));\r\n        assert(test_minus_inf_minus_inf.imag() < 0);\r\n    }\r\n    {\r\n        const complex<double> test_minus_inf_minus_inf = complex<double>{-inf, -inf} / minus_zero;\r\n        assert(isinf(test_minus_inf_minus_inf.real()));\r\n        assert(test_minus_inf_minus_inf.real() > 0);\r\n        assert(isinf(test_minus_inf_minus_inf.imag()));\r\n        assert(test_minus_inf_minus_inf.imag() > 0);\r\n    }\r\n    {\r\n        const complex<double> test_one_nan = complex<double>{1, nan} / zero;\r\n        assert(isinf(test_one_nan.real()));\r\n        assert(test_one_nan.real() > 0);\r\n        assert(isnan(test_one_nan.imag()));\r\n    }\r\n    {\r\n        const complex<double> test_nan_one = complex<double>{nan, 1} / zero;\r\n        assert(isnan(test_nan_one.real()));\r\n        assert(isinf(test_nan_one.imag()));\r\n        assert(test_nan_one.imag() > 0);\r\n    }\r\n    {\r\n        const complex<double> test_nan_nan = complex<double>{nan, nan} / zero;\r\n        assert(isnan(test_nan_nan.real()));\r\n        assert(isnan(test_nan_nan.imag()));\r\n    }\r\n    {\r\n        const complex<double> test_nan_nan = complex<double>{nan, nan} / minus_zero;\r\n        assert(isnan(test_nan_nan.real()));\r\n        assert(isnan(test_nan_nan.imag()));\r\n    }\r\n}\r\n\r\ntemplate <class F>\r\nvoid test_strengthened_exception_specification() {\r\n    STATIC_ASSERT(is_nothrow_default_constructible_v<complex<F>>);\r\n\r\n    STATIC_ASSERT(is_nothrow_constructible_v<complex<F>, const F&>);\r\n    STATIC_ASSERT(is_nothrow_constructible_v<complex<F>, F>);\r\n\r\n    STATIC_ASSERT(is_nothrow_constructible_v<complex<F>, const F&, const F&>);\r\n    STATIC_ASSERT(is_nothrow_constructible_v<complex<F>, const F&, F>);\r\n    STATIC_ASSERT(is_nothrow_constructible_v<complex<F>, F, const F&>);\r\n    STATIC_ASSERT(is_nothrow_constructible_v<complex<F>, F, F>);\r\n\r\n    STATIC_ASSERT(is_nothrow_assignable_v<complex<F>&, const F&>);\r\n    STATIC_ASSERT(is_nothrow_assignable_v<complex<F>&, F>);\r\n\r\n    complex<F> c{};\r\n    F f{};\r\n\r\n    STATIC_ASSERT(noexcept(c.real()));\r\n    STATIC_ASSERT(noexcept(c.real(f)));\r\n    STATIC_ASSERT(noexcept(c.imag()));\r\n    STATIC_ASSERT(noexcept(c.imag(f)));\r\n\r\n    STATIC_ASSERT(noexcept(+c));\r\n    STATIC_ASSERT(noexcept(-c));\r\n\r\n    STATIC_ASSERT(noexcept(c + c));\r\n    STATIC_ASSERT(noexcept(c + f));\r\n    STATIC_ASSERT(noexcept(f + c));\r\n    STATIC_ASSERT(noexcept(c += c));\r\n    STATIC_ASSERT(noexcept(c += f));\r\n\r\n    STATIC_ASSERT(noexcept(c - c));\r\n    STATIC_ASSERT(noexcept(c - f));\r\n    STATIC_ASSERT(noexcept(f - c));\r\n    STATIC_ASSERT(noexcept(c -= c));\r\n    STATIC_ASSERT(noexcept(c -= f));\r\n\r\n    STATIC_ASSERT(noexcept(c * c));\r\n    STATIC_ASSERT(noexcept(c * f));\r\n    STATIC_ASSERT(noexcept(f * c));\r\n    STATIC_ASSERT(noexcept(c *= c));\r\n    STATIC_ASSERT(noexcept(c *= f));\r\n\r\n    STATIC_ASSERT(noexcept(c / c));\r\n    STATIC_ASSERT(noexcept(c / f));\r\n    STATIC_ASSERT(noexcept(f / c));\r\n    STATIC_ASSERT(noexcept(c /= c));\r\n    STATIC_ASSERT(noexcept(c /= f));\r\n\r\n    STATIC_ASSERT(noexcept(c == c));\r\n    STATIC_ASSERT(noexcept(c == f));\r\n    STATIC_ASSERT(noexcept(f == c));\r\n\r\n    STATIC_ASSERT(noexcept(c != c));\r\n    STATIC_ASSERT(noexcept(c != f));\r\n    STATIC_ASSERT(noexcept(f != c));\r\n\r\n    STATIC_ASSERT(noexcept(real(c)));\r\n    STATIC_ASSERT(noexcept(imag(c)));\r\n    STATIC_ASSERT(noexcept(abs(c)));\r\n    STATIC_ASSERT(noexcept(arg(c)));\r\n    STATIC_ASSERT(noexcept(norm(c)));\r\n    STATIC_ASSERT(noexcept(conj(c)));\r\n    STATIC_ASSERT(noexcept(proj(c)));\r\n\r\n    STATIC_ASSERT(noexcept(polar(f)));\r\n    STATIC_ASSERT(noexcept(polar(f, f)));\r\n\r\n    STATIC_ASSERT(noexcept(acos(c)));\r\n    STATIC_ASSERT(noexcept(asin(c)));\r\n    STATIC_ASSERT(noexcept(atan(c)));\r\n    STATIC_ASSERT(noexcept(acosh(c)));\r\n    STATIC_ASSERT(noexcept(asinh(c)));\r\n    STATIC_ASSERT(noexcept(atanh(c)));\r\n    STATIC_ASSERT(noexcept(cos(c)));\r\n    STATIC_ASSERT(noexcept(cosh(c)));\r\n    STATIC_ASSERT(noexcept(exp(c)));\r\n    STATIC_ASSERT(noexcept(log(c)));\r\n    STATIC_ASSERT(noexcept(log10(c)));\r\n    STATIC_ASSERT(noexcept(sin(c)));\r\n    STATIC_ASSERT(noexcept(sinh(c)));\r\n    STATIC_ASSERT(noexcept(sqrt(c)));\r\n    STATIC_ASSERT(noexcept(tan(c)));\r\n    STATIC_ASSERT(noexcept(tanh(c)));\r\n\r\n    STATIC_ASSERT(noexcept(pow(c, c)));\r\n    STATIC_ASSERT(noexcept(pow(c, f)));\r\n    STATIC_ASSERT(noexcept(pow(f, c)));\r\n}\r\n\r\ntemplate <class F1, class F2>\r\nvoid test_strengthened_exception_specification_2() {\r\n    STATIC_ASSERT(is_nothrow_constructible_v<complex<F1>, const complex<F2>&>);\r\n    STATIC_ASSERT(is_nothrow_constructible_v<complex<F1>, complex<F2>>);\r\n\r\n    STATIC_ASSERT(is_nothrow_assignable_v<complex<F1>&, const complex<F2>&>);\r\n    STATIC_ASSERT(is_nothrow_assignable_v<complex<F1>&, complex<F2>>);\r\n\r\n    complex<F1> c1{};\r\n    complex<F2> c2{};\r\n\r\n    STATIC_ASSERT(noexcept(c1 += c2));\r\n    STATIC_ASSERT(noexcept(c1 -= c2));\r\n    STATIC_ASSERT(noexcept(c1 *= c2));\r\n    STATIC_ASSERT(noexcept(c1 /= c2));\r\n\r\n    STATIC_ASSERT(noexcept(pow(c1, c2)));\r\n    STATIC_ASSERT(noexcept(pow(F1{}, c2)));\r\n}\r\n\r\n\r\nint main() {\r\n    complex<float> f(1, 2);\r\n\r\n    (void) pow(f, 2);\r\n    (void) log(f);\r\n    (void) sinh(f);\r\n    (void) cosh(f);\r\n    (void) exp(f);\r\n\r\n\r\n    complex<double> d(1, 2);\r\n\r\n    (void) pow(d, 2);\r\n    (void) log(d);\r\n    (void) sinh(d);\r\n    (void) cosh(d);\r\n    (void) exp(d);\r\n\r\n\r\n    complex<long double> l(1, 2);\r\n\r\n    (void) pow(l, 2);\r\n    (void) log(l);\r\n    (void) sinh(l);\r\n    (void) cosh(l);\r\n    (void) exp(l);\r\n\r\n    // Also test GH-379 \"asinh(-1e+307 + 2e+307i) is wrong\"\r\n\r\n    assert(nearly_equal_partwise(acos(-2e+307 + 1e+307i), 2.677945044588987 - 708.3914896859491i));\r\n    assert(nearly_equal_partwise(acos(-4e+37f + 2e+37if), 2.6779451f - 87.386663if));\r\n    assert(nearly_equal_partwise(acos(-2e+307L + 1e+307il), 2.677945044588987L - 708.3914896859491il));\r\n\r\n    assert(nearly_equal_partwise(acos(2e+307 + 1e+307i), 0.4636476090008061 - 708.3914896859491i));\r\n    assert(nearly_equal_partwise(acos(4e+37f + 2e+37if), 0.4636476f - 87.386663if));\r\n    assert(nearly_equal_partwise(acos(2e+307L + 1e+307il), 0.4636476090008061L - 708.3914896859491il));\r\n\r\n    assert(nearly_equal_partwise(acos(2e+307 - 1e+307i), 0.4636476090008061 + 708.3914896859491i));\r\n    assert(nearly_equal_partwise(acos(4e+37f - 2e+37if), 0.4636476f + 87.386663if));\r\n    assert(nearly_equal_partwise(acos(2e+307L - 1e+307il), 0.4636476090008061L + 708.3914896859491il));\r\n\r\n    assert(nearly_equal_partwise(acosh(-1e+307 + 2e+307i), 708.3914896859491 + 2.0344439357957027i));\r\n    assert(nearly_equal_partwise(acosh(-2e+37f + 4e+37if), 87.386663f + 2.0344439if));\r\n    assert(nearly_equal_partwise(acosh(-1e+307L + 2e+307il), 708.3914896859491L + 2.0344439357957027il));\r\n\r\n    assert(nearly_equal_partwise(asinh(-1e+307 + 2e+307i), -708.3914896859491 + 1.1071487177940904i));\r\n    assert(nearly_equal_partwise(asinh(-2e+37f + 4e+37if), -87.386663f + 1.1071488if));\r\n    assert(nearly_equal_partwise(asinh(-1e+307L + 2e+307il), -708.3914896859491L + 1.1071487177940904il));\r\n\r\n    // Also test GH-785 \"<complex>: std::arg does not work for negative real values\"\r\n\r\n    STATIC_ASSERT(is_same_v<decltype(arg(1729)), double>);\r\n    STATIC_ASSERT(is_same_v<decltype(imag(1729)), double>);\r\n    STATIC_ASSERT(is_same_v<decltype(real(1729)), double>);\r\n    STATIC_ASSERT(is_same_v<decltype(norm(1729)), double>);\r\n    STATIC_ASSERT(is_same_v<decltype(conj(1729)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(proj(1729)), complex<double>>);\r\n\r\n    STATIC_ASSERT(is_same_v<decltype(arg(1729.0f)), float>);\r\n    STATIC_ASSERT(is_same_v<decltype(imag(1729.0f)), float>);\r\n    STATIC_ASSERT(is_same_v<decltype(real(1729.0f)), float>);\r\n    STATIC_ASSERT(is_same_v<decltype(norm(1729.0f)), float>);\r\n    STATIC_ASSERT(is_same_v<decltype(conj(1729.0f)), complex<float>>);\r\n    STATIC_ASSERT(is_same_v<decltype(proj(1729.0f)), complex<float>>);\r\n\r\n    STATIC_ASSERT(is_same_v<decltype(arg(1729.0)), double>);\r\n    STATIC_ASSERT(is_same_v<decltype(imag(1729.0)), double>);\r\n    STATIC_ASSERT(is_same_v<decltype(real(1729.0)), double>);\r\n    STATIC_ASSERT(is_same_v<decltype(norm(1729.0)), double>);\r\n    STATIC_ASSERT(is_same_v<decltype(conj(1729.0)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(proj(1729.0)), complex<double>>);\r\n\r\n    STATIC_ASSERT(is_same_v<decltype(arg(1729.0L)), long double>);\r\n    STATIC_ASSERT(is_same_v<decltype(imag(1729.0L)), long double>);\r\n    STATIC_ASSERT(is_same_v<decltype(real(1729.0L)), long double>);\r\n    STATIC_ASSERT(is_same_v<decltype(norm(1729.0L)), long double>);\r\n    STATIC_ASSERT(is_same_v<decltype(conj(1729.0L)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(proj(1729.0L)), complex<long double>>);\r\n\r\n    assert((arg(-1.0) == arg(complex<double>{-1.0, 0.0})));\r\n    assert((arg(-1) == arg(complex<double>{-1.0, 0.0})));\r\n\r\n    assert(imag(1729.0) == 0.0);\r\n    assert(imag(1729) == 0.0);\r\n\r\n    assert(real(1729.0) == 1729.0);\r\n    assert(real(1729) == 1729.0);\r\n\r\n    assert(norm(0x1p63) == 0x1p126);\r\n    assert(norm(0x8000'0000'0000'0000ULL) == 0x1p126);\r\n\r\n    assert((conj(1729.0) == complex<double>{1729.0, -0.0}));\r\n    assert((conj(1729) == complex<double>{1729.0, -0.0}));\r\n    assert(signbit(conj(1729.0).imag()));\r\n    assert(signbit(conj(1729).imag()));\r\n\r\n    assert((proj(1729.0) == complex<double>{1729.0, 0.0}));\r\n    assert((proj(1729) == complex<double>{1729.0, 0.0}));\r\n    constexpr double inf = numeric_limits<double>::infinity();\r\n    assert((proj(inf) == complex<double>{inf, 0.0}));\r\n    assert((proj(-inf) == complex<double>{inf, 0.0}));\r\n\r\n    test_gh_2728();\r\n\r\n    // Also test strengthened exception specifications\r\n    test_strengthened_exception_specification<float>();\r\n    test_strengthened_exception_specification<double>();\r\n    test_strengthened_exception_specification<long double>();\r\n\r\n    STATIC_ASSERT(noexcept(0if)); // strengthened\r\n    STATIC_ASSERT(noexcept(0.0if)); // strengthened\r\n    STATIC_ASSERT(noexcept(0i)); // strengthened\r\n    STATIC_ASSERT(noexcept(0.0i)); // strengthened\r\n    STATIC_ASSERT(noexcept(0il)); // strengthened\r\n    STATIC_ASSERT(noexcept(0.0il)); // strengthened\r\n\r\n    test_strengthened_exception_specification_2<float, double>();\r\n    test_strengthened_exception_specification_2<float, long double>();\r\n    test_strengthened_exception_specification_2<double, float>();\r\n    test_strengthened_exception_specification_2<double, long double>();\r\n    test_strengthened_exception_specification_2<long double, float>();\r\n    test_strengthened_exception_specification_2<long double, double>();\r\n\r\n#if _HAS_CXX20\r\n    STATIC_ASSERT(is_nothrow_convertible_v<complex<float>, complex<double>>); // strengthened\r\n    STATIC_ASSERT(is_nothrow_convertible_v<complex<float>, complex<long double>>); // strengthened\r\n    STATIC_ASSERT(is_nothrow_convertible_v<complex<double>, complex<long double>>); // strengthened\r\n#endif // _HAS_CXX20\r\n\r\n    // Also test N4950 [complex.numbers.general]/2:\r\n    // \"Specializations of complex for cv-unqualified floating-point types are trivially-copyable literal types\"\r\n    STATIC_ASSERT(is_trivially_copyable_v<complex<float>>);\r\n    STATIC_ASSERT(is_trivially_copyable_v<complex<double>>);\r\n    STATIC_ASSERT(is_trivially_copyable_v<complex<long double>>);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_561430_list_and_tree_leaks/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_561430_list_and_tree_leaks/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <list>\r\n#include <map>\r\n#include <memory>\r\n#include <regex>\r\n#include <set>\r\n#include <string>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#ifndef _M_CEE_PURE\r\n#include <future>\r\n#endif // _M_CEE_PURE\r\n\r\nint g_mallocs = 0;\r\n\r\n// Also test DevDiv-483844 and DevDiv-781187, minimal allocator requirements.\r\ntemplate <typename T>\r\nstruct Mallocator {\r\n    typedef T value_type;\r\n\r\n    Mallocator()                  = default;\r\n    Mallocator(const Mallocator&) = default;\r\n\r\n    template <typename U>\r\n    Mallocator(const Mallocator<U>&) {}\r\n\r\n    Mallocator& operator=(const Mallocator&) = delete;\r\n\r\n    bool operator==(const Mallocator&) const {\r\n        return true;\r\n    }\r\n    bool operator!=(const Mallocator&) const {\r\n        return false;\r\n    }\r\n\r\n    T* allocate(const size_t n) const {\r\n        ++g_mallocs;\r\n\r\n        if (n == 0) {\r\n            return nullptr;\r\n        }\r\n\r\n        assert(n <= static_cast<size_t>(-1) / sizeof(T));\r\n\r\n        void* const pv = malloc(n * sizeof(T));\r\n\r\n        assert(pv != nullptr);\r\n\r\n        return static_cast<T*>(pv);\r\n    }\r\n\r\n    void deallocate(T* const p, size_t) const {\r\n        assert(p != nullptr);\r\n\r\n        --g_mallocs;\r\n\r\n        free(p);\r\n    }\r\n};\r\n\r\ntemplate <typename C>\r\nvoid test() {\r\n    assert(g_mallocs == 0);\r\n\r\n    {\r\n        C c1;\r\n        C c2(c1);\r\n\r\n        assert(g_mallocs >= 0);\r\n    }\r\n\r\n    assert(g_mallocs == 0);\r\n}\r\n\r\nvoid test_virtual_allocator();\r\n\r\nint main() {\r\n    using namespace std;\r\n\r\n    test<deque<int, Mallocator<int>>>();\r\n    test<forward_list<int, Mallocator<int>>>();\r\n    test<list<int, Mallocator<int>>>();\r\n    test<vector<int, Mallocator<int>>>();\r\n\r\n    test<vector<bool, Mallocator<bool>>>();\r\n\r\n    test<map<int, int, less<int>, Mallocator<pair<const int, int>>>>();\r\n    test<multimap<int, int, less<int>, Mallocator<pair<const int, int>>>>();\r\n    test<set<int, less<int>, Mallocator<int>>>();\r\n    test<multiset<int, less<int>, Mallocator<int>>>();\r\n\r\n    test<unordered_map<int, int, hash<int>, equal_to<int>, Mallocator<pair<const int, int>>>>();\r\n    test<unordered_multimap<int, int, hash<int>, equal_to<int>, Mallocator<pair<const int, int>>>>();\r\n    test<unordered_set<int, hash<int>, equal_to<int>, Mallocator<int>>>();\r\n    test<unordered_multiset<int, hash<int>, equal_to<int>, Mallocator<int>>>();\r\n\r\n    test<basic_string<char, char_traits<char>, Mallocator<char>>>();\r\n\r\n    test<match_results<const char*, Mallocator<csub_match>>>();\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n    {\r\n        function<int(int)> f1(allocator_arg, Mallocator<int>(), [](int n) { return n * 2; });\r\n        function<int(int)> f2(f1);\r\n    }\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n\r\n    {\r\n        shared_ptr<int> sp(new int(1729), default_delete<int>(), Mallocator<int>());\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> sp = allocate_shared<int>(Mallocator<int>(), 1729);\r\n    }\r\n\r\n#ifndef _M_CEE_PURE\r\n    {\r\n        promise<int> p(allocator_arg, Mallocator<int>());\r\n\r\n        future<int> f = p.get_future();\r\n\r\n        p.set_value(1729);\r\n\r\n        assert(f.get() == 1729);\r\n    }\r\n\r\n    {\r\n        promise<int&> p(allocator_arg, Mallocator<int>());\r\n\r\n        future<int&> f = p.get_future();\r\n\r\n        int n = 4096;\r\n\r\n        p.set_value(n);\r\n\r\n        assert(&f.get() == &n);\r\n    }\r\n\r\n    {\r\n        promise<void> p(allocator_arg, Mallocator<int>());\r\n\r\n        future<void> f = p.get_future();\r\n\r\n        p.set_value();\r\n\r\n        f.get();\r\n    }\r\n\r\n    {\r\n        packaged_task<int()> pt(allocator_arg, Mallocator<int>(), [] { return 1234; });\r\n\r\n        future<int> f = pt.get_future();\r\n\r\n        pt();\r\n\r\n        assert(f.get() == 1234);\r\n    }\r\n\r\n    // Also test GH-321: \"<future>: packaged_task can't be constructed from a move-only lambda\"\r\n    {\r\n        packaged_task<int()> pt(allocator_arg, Mallocator<int>(), [uptr = make_unique<int>(172)] { return *uptr; });\r\n\r\n        future<int> f = pt.get_future();\r\n\r\n        pt();\r\n\r\n        assert(f.get() == 172);\r\n    }\r\n\r\n    {\r\n        int n = 4096;\r\n\r\n        packaged_task<int&()> pt(allocator_arg, Mallocator<int>(), [&n]() -> int& { return n; });\r\n\r\n        future<int&> f = pt.get_future();\r\n\r\n        pt();\r\n\r\n        assert(&f.get() == &n);\r\n    }\r\n\r\n    {\r\n        packaged_task<void()> pt(allocator_arg, Mallocator<int>(), [] {});\r\n\r\n        future<void> f = pt.get_future();\r\n\r\n        pt();\r\n\r\n        f.get();\r\n    }\r\n#endif // _M_CEE_PURE\r\n\r\n    assert(g_mallocs == 0);\r\n\r\n    test_virtual_allocator();\r\n}\r\n\r\n\r\n// Also test DevDiv-819467 \"<memory>: Custom allocator with virtual max_size function causes infinite recursion\".\r\n\r\ntemplate <typename T>\r\nstruct WeirdAllocator {\r\n    typedef T value_type;\r\n\r\n    WeirdAllocator() {}\r\n    template <typename U>\r\n    WeirdAllocator(const WeirdAllocator<U>&) {}\r\n\r\n    virtual bool operator==(const WeirdAllocator&) const {\r\n        return true;\r\n    }\r\n    virtual bool operator!=(const WeirdAllocator&) const {\r\n        return false;\r\n    }\r\n\r\n    virtual T* allocate(size_t n) {\r\n        return std::allocator<T>().allocate(n);\r\n    }\r\n\r\n    virtual void deallocate(T* p, size_t n) {\r\n        std::allocator<T>().deallocate(p, n);\r\n    }\r\n\r\n\r\n    virtual T* allocate(size_t n, const void*) {\r\n        return std::allocator<T>().allocate(n);\r\n    }\r\n\r\n    virtual size_t max_size() const {\r\n        return static_cast<size_t>(-1) / sizeof(T);\r\n    }\r\n\r\n    virtual WeirdAllocator select_on_container_copy_construction() const {\r\n        return *this;\r\n    }\r\n};\r\n\r\nvoid test_virtual_allocator() {\r\n    std::vector<int, WeirdAllocator<int>> v;\r\n\r\n    v.push_back(1729);\r\n\r\n    assert(v[0] == 1729);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_562056_tree_leak/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_562056_tree_leak/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <deque>\r\n#include <list>\r\n#include <map>\r\n#include <set>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nint g_kittens = 0;\r\n\r\nclass Kitten {\r\npublic:\r\n    Kitten() : m_n(0) {\r\n        ++g_kittens;\r\n    }\r\n\r\n    explicit Kitten(const int n) : m_n(n) {\r\n        ++g_kittens;\r\n    }\r\n\r\n    Kitten(const Kitten& other) : m_n(other.m_n) {\r\n        ++g_kittens;\r\n    }\r\n\r\n    Kitten& operator=(const Kitten& other) {\r\n        m_n = other.m_n;\r\n\r\n        return *this;\r\n    }\r\n\r\n    ~Kitten() {\r\n        --g_kittens;\r\n    }\r\n\r\n    bool operator<(const Kitten& other) const {\r\n        return m_n < other.m_n;\r\n    }\r\n\r\nprivate:\r\n    int m_n;\r\n};\r\n\r\nint main() {\r\n    assert(g_kittens == 0);\r\n\r\n    {\r\n        vector<Kitten> v(3);\r\n\r\n        assert(g_kittens == 3);\r\n    }\r\n\r\n    assert(g_kittens == 0);\r\n\r\n    {\r\n        deque<Kitten> d(3);\r\n\r\n        assert(g_kittens == 3);\r\n    }\r\n\r\n    assert(g_kittens == 0);\r\n\r\n    {\r\n        list<Kitten> l(3);\r\n\r\n        assert(g_kittens == 3);\r\n    }\r\n\r\n    assert(g_kittens == 0);\r\n\r\n    {\r\n        set<Kitten> s;\r\n\r\n        s.insert(Kitten(11));\r\n        s.insert(Kitten(22));\r\n        s.insert(Kitten(33));\r\n\r\n        assert(g_kittens == 3);\r\n    }\r\n\r\n    assert(g_kittens == 0);\r\n\r\n    {\r\n        multiset<Kitten> ms;\r\n\r\n        ms.insert(Kitten(11));\r\n        ms.insert(Kitten(22));\r\n        ms.insert(Kitten(33));\r\n\r\n        assert(g_kittens == 3);\r\n    }\r\n\r\n    assert(g_kittens == 0);\r\n\r\n    {\r\n        map<int, Kitten> m;\r\n\r\n        m[1] = Kitten(11);\r\n        m[2] = Kitten(22);\r\n        m[3] = Kitten(33);\r\n\r\n        assert(g_kittens == 3);\r\n    }\r\n\r\n    assert(g_kittens == 0);\r\n\r\n    {\r\n        multimap<int, Kitten> mm;\r\n\r\n        mm.insert(make_pair(1, Kitten(11)));\r\n        mm.insert(make_pair(2, Kitten(22)));\r\n        mm.insert(make_pair(3, Kitten(33)));\r\n\r\n        assert(g_kittens == 3);\r\n    }\r\n\r\n    assert(g_kittens == 0);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_563443_empty_vector_begin_plus_zero/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_563443_empty_vector_begin_plus_zero/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <string>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename C>\r\nvoid test() {\r\n    C c;\r\n\r\n    const typename C::const_iterator i = c.begin();\r\n    const typename C::const_iterator j = c.begin() + 0;\r\n    const typename C::const_iterator k = c.end();\r\n    const typename C::const_iterator l = c.end() + 0;\r\n\r\n    assert(i == j);\r\n    assert(i == k);\r\n    assert(i == l);\r\n}\r\n\r\nint main() {\r\n    test<vector<int>>();\r\n    test<deque<int>>();\r\n    test<string>();\r\n    test<array<int, 0>>();\r\n    test<vector<bool>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_567556_move_from_empty_list/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_567556_move_from_empty_list/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <list>\r\n#include <map>\r\n#include <set>\r\n#include <string>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename Container>\r\nvoid test() {\r\n    Container src;\r\n    assert(src.begin() == src.end());\r\n\r\n    Container dest = move(src);\r\n    assert(src.begin() == src.end());\r\n    assert(dest.begin() == dest.end());\r\n}\r\n\r\nint main() {\r\n    test<vector<int>>();\r\n    test<deque<int>>();\r\n    test<list<int>>();\r\n\r\n    test<set<int>>();\r\n    test<multiset<int>>();\r\n    test<map<int, int>>();\r\n    test<multimap<int, int>>();\r\n\r\n    test<string>();\r\n\r\n    test<vector<bool>>();\r\n\r\n    test<array<int, 0>>();\r\n\r\n    test<unordered_set<int>>();\r\n    test<unordered_multiset<int>>();\r\n    test<unordered_map<int, int>>();\r\n    test<unordered_multimap<int, int>>();\r\n\r\n    test<forward_list<int>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_579381_vector_grow_to/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_579381_vector_grow_to/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <list>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    {\r\n        vector<int> v(1000, 1729);\r\n\r\n        assert(v.size() == 1000);\r\n        assert(v.capacity() == 1000);\r\n\r\n        v.resize(1003);\r\n\r\n        assert(v.size() == 1003);\r\n        assert(v.capacity() == 1500);\r\n    }\r\n\r\n    {\r\n        vector<int> v(1000, 1729);\r\n\r\n        assert(v.size() == 1000);\r\n        assert(v.capacity() == 1000);\r\n\r\n        v.resize(8000);\r\n\r\n        assert(v.size() == 8000);\r\n        assert(v.capacity() == 8000);\r\n    }\r\n\r\n    {\r\n        vector<int> v(1000, 1729);\r\n\r\n        assert(v.size() == 1000);\r\n        assert(v.capacity() == 1000);\r\n\r\n        v.push_back(47);\r\n\r\n        assert(v.size() == 1001);\r\n        assert(v.capacity() == 1500);\r\n    }\r\n\r\n    {\r\n        vector<int> v(1000, 1729);\r\n\r\n        assert(v.size() == 1000);\r\n        assert(v.capacity() == 1000);\r\n\r\n        list<int> l(3, 47);\r\n\r\n        v.insert(v.end(), l.begin(), l.end());\r\n\r\n        assert(v.size() == 1003);\r\n        assert(v.capacity() == 1500);\r\n    }\r\n\r\n    {\r\n        vector<int> v(1000, 1729);\r\n\r\n        assert(v.size() == 1000);\r\n        assert(v.capacity() == 1000);\r\n\r\n        list<int> l(7000, 47);\r\n\r\n        v.insert(v.end(), l.begin(), l.end());\r\n\r\n        assert(v.size() == 8000);\r\n        assert(v.capacity() == 8000);\r\n    }\r\n\r\n    {\r\n        vector<int> v(1000, 1729);\r\n\r\n        assert(v.size() == 1000);\r\n        assert(v.capacity() == 1000);\r\n\r\n        v.insert(v.end(), 3, 47);\r\n\r\n        assert(v.size() == 1003);\r\n        assert(v.capacity() == 1500);\r\n    }\r\n\r\n    {\r\n        vector<int> v(1000, 1729);\r\n\r\n        assert(v.size() == 1000);\r\n        assert(v.capacity() == 1000);\r\n\r\n        v.insert(v.end(), 7000, 47);\r\n\r\n        assert(v.size() == 8000);\r\n        assert(v.capacity() == 8000);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_590599_hash_string/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_590599_hash_string/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\nvoid test_case_hash_string(const string& a, const string& b, const string& c) {\r\n    const auto x = hash<string>()(a);\r\n    const auto y = hash<string>()(b);\r\n    const auto z = hash<string>()(c);\r\n\r\n    assert(x != y && x != z && y != z);\r\n}\r\n\r\nvoid test_hash_string() {\r\n    test_case_hash_string(\"aa\", \"a5\", \"az\");\r\n\r\n    test_case_hash_string(\"cata\", \"cat5\", \"catz\");\r\n\r\n    test_case_hash_string(\"fluffykittens\", \"fluffykitte47\", \"fluffykitte!!\");\r\n}\r\n\r\n// P0272R1 \"Give basic_string a non-const data()\"\r\nvoid test_non_const_data() {\r\n#if _HAS_CXX17\r\n    string s;\r\n    assert(*s.data() == '\\0');\r\n    s.resize(2);\r\n    s.data()[0] = 'a';\r\n    s.data()[1] = 'b';\r\n    assert(s == \"ab\");\r\n#endif // _HAS_CXX17\r\n}\r\n\r\nvoid test_string_find_character_offset() {\r\n    // smoke test for string::find(character, offset)\r\n    string s;\r\n    assert(s.find('h') == string::npos);\r\n    assert(s.find('h', 42) == string::npos);\r\n    s = \"hungry EViL zombies\";\r\n    //   0123456789012345678\r\n    //             111111111\r\n    assert(s.find('L') == 10);\r\n    assert(s.find('A') == string::npos);\r\n    assert(s.find('i') == 9);\r\n    assert(s.find('i', 8) == 9);\r\n    assert(s.find('i', 9) == 9);\r\n    assert(s.find('i', 10) == 16);\r\n    assert(s.find('i', 17) == string::npos);\r\n}\r\n\r\nint main() {\r\n    test_hash_string();\r\n    test_non_const_data();\r\n    test_string_find_character_offset();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_609053_ctype_char_table_size/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_609053_ctype_char_table_size/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <locale>\r\n\r\nstatic_assert(std::ctype<char>::table_size == 256, \"\");\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_617014_tuple_tie/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_617014_tuple_tie/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <tuple>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    tuple<int, string, int> t(1, \"x\", 2);\r\n\r\n    int a    = 4;\r\n    string b = \"y\";\r\n    int c    = 7;\r\n\r\n    assert(get<0>(t) == 1);\r\n    assert(get<1>(t) == \"x\");\r\n    assert(get<2>(t) == 2);\r\n\r\n    assert(a == 4);\r\n    assert(b == \"y\");\r\n    assert(c == 7);\r\n\r\n    tie(a, b, c) = t;\r\n\r\n    assert(get<0>(t) == 1);\r\n    assert(get<1>(t) == \"x\");\r\n    assert(get<2>(t) == 2);\r\n\r\n    assert(a == 1);\r\n    assert(b == \"x\");\r\n    assert(c == 2);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_632876_regex_proxy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_632876_regex_proxy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <new>\r\n#include <regex>\r\n\r\nusing namespace std;\r\n\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\n\r\nvoid* weird_malloc(size_t n) {\r\n    void* p = malloc(n + 128);\r\n\r\n    assert(p != nullptr);\r\n\r\n    unsigned char* q = static_cast<unsigned char*>(p);\r\n\r\n    for (size_t i = 0; i < n + 128; ++i) {\r\n        *q = 0xCC;\r\n    }\r\n\r\n    return q + 128;\r\n}\r\n\r\nvoid weird_free(void* p) {\r\n    if (p) {\r\n        free(static_cast<unsigned char*>(p) - 128);\r\n    }\r\n}\r\n\r\nvoid* operator new(size_t n) {\r\n    return weird_malloc(n);\r\n}\r\n\r\nvoid* operator new(size_t n, const nothrow_t&) noexcept {\r\n    return weird_malloc(n);\r\n}\r\n\r\nvoid* operator new[](size_t n) {\r\n    return weird_malloc(n);\r\n}\r\n\r\nvoid* operator new[](size_t n, const nothrow_t&) noexcept {\r\n    return weird_malloc(n);\r\n}\r\n\r\nvoid operator delete(void* p) noexcept {\r\n    weird_free(p);\r\n}\r\n\r\nvoid operator delete(void* p, const nothrow_t&) noexcept {\r\n    weird_free(p);\r\n}\r\n\r\nvoid operator delete[](void* p) noexcept {\r\n    weird_free(p);\r\n}\r\n\r\nvoid operator delete[](void* p, const nothrow_t&) noexcept {\r\n    weird_free(p);\r\n}\r\n\r\nint main() {\r\n    regex r(\"\\\\w+\");\r\n\r\n    const char* const s = \"cute fluffy kittens\";\r\n\r\n    cregex_token_iterator i(s, s + strlen(s), r);\r\n    cregex_token_iterator end;\r\n\r\n    assert(i != end);\r\n    assert(i->first == s);\r\n    assert(i->second == s + 4);\r\n\r\n    ++i;\r\n\r\n    assert(i != end);\r\n    assert(i->first == s + 5);\r\n    assert(i->second == s + 11);\r\n\r\n    ++i;\r\n\r\n    assert(i != end);\r\n    assert(i->first == s + 12);\r\n    assert(i->second == s + 19);\r\n\r\n    ++i;\r\n\r\n    assert(i == end);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_635436_shared_ptr_reset/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_635436_shared_ptr_reset/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <string>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nvector<pair<string, int>> results;\r\n\r\nclass Cat {\r\npublic:\r\n    explicit Cat(int n);\r\n    void meow();\r\n    void vanish0();\r\n    void vanish1();\r\n    void vanish2();\r\n    void vanish3();\r\n    ~Cat();\r\n\r\nprivate:\r\n    Cat(const Cat&);\r\n    Cat& operator=(const Cat&);\r\n\r\n    int m_n;\r\n    shared_ptr<Cat> m_p;\r\n};\r\n\r\nvoid deleter(Cat* p) {\r\n    delete p;\r\n}\r\n\r\nCat::Cat(const int n) : m_n(n), m_p() {\r\n    results.emplace_back(\"Cat::Cat()\", m_n);\r\n}\r\n\r\nvoid Cat::meow() {\r\n    results.emplace_back(\"Cat::meow()\", m_n);\r\n\r\n    m_p.reset(this);\r\n}\r\n\r\nvoid Cat::vanish0() {\r\n    results.emplace_back(\"Cat::vanish0()\", m_n);\r\n\r\n    m_p.reset();\r\n}\r\n\r\nvoid Cat::vanish1() {\r\n    results.emplace_back(\"Cat::vanish1()\", m_n);\r\n\r\n    m_p.reset(new Cat(11));\r\n}\r\n\r\nvoid Cat::vanish2() {\r\n    results.emplace_back(\"Cat::vanish2()\", m_n);\r\n\r\n    m_p.reset(new Cat(22), deleter);\r\n}\r\n\r\nvoid Cat::vanish3() {\r\n    results.emplace_back(\"Cat::vanish3()\", m_n);\r\n\r\n    m_p.reset(new Cat(33), deleter, allocator<int>());\r\n}\r\n\r\nCat::~Cat() {\r\n    results.emplace_back(\"Cat::~Cat()\", m_n);\r\n\r\n    assert(m_p.get() != this);\r\n}\r\n\r\nclass Kitten {\r\npublic:\r\n    explicit Kitten(int n);\r\n    void meow();\r\n    void vanish0();\r\n    void vanish1();\r\n    ~Kitten();\r\n\r\nprivate:\r\n    Kitten(const Kitten&);\r\n    Kitten& operator=(const Kitten&);\r\n\r\n    int m_n;\r\n    unique_ptr<Kitten> m_p;\r\n};\r\n\r\nKitten::Kitten(const int n) : m_n(n), m_p() {\r\n    results.emplace_back(\"Kitten::Kitten()\", m_n);\r\n}\r\n\r\nvoid Kitten::meow() {\r\n    results.emplace_back(\"Kitten::meow()\", m_n);\r\n\r\n    m_p.reset(this);\r\n}\r\n\r\nvoid Kitten::vanish0() {\r\n    results.emplace_back(\"Kitten::vanish0()\", m_n);\r\n\r\n    m_p.reset();\r\n}\r\n\r\nvoid Kitten::vanish1() {\r\n    results.emplace_back(\"Kitten::vanish1()\", m_n);\r\n\r\n    m_p.reset(new Kitten(1234));\r\n}\r\n\r\nKitten::~Kitten() {\r\n    results.emplace_back(\"Kitten::~Kitten()\", m_n);\r\n\r\n    assert(m_p.get() != this);\r\n}\r\n\r\nint main() {\r\n    // Dev10-635436 \"shared_ptr: reset() must behave as if it is implemented with swap()\"\r\n    results.emplace_back(\"BEGIN\", 0);\r\n\r\n    Cat* p0 = new Cat(1729);\r\n    p0->meow();\r\n    p0->vanish0();\r\n\r\n    results.emplace_back(\"END\", 0);\r\n\r\n    results.emplace_back(\"BEGIN\", 1);\r\n\r\n    Cat* p1 = new Cat(1729);\r\n    p1->meow();\r\n    p1->vanish1();\r\n\r\n    results.emplace_back(\"END\", 1);\r\n\r\n    results.emplace_back(\"BEGIN\", 2);\r\n\r\n    Cat* p2 = new Cat(1729);\r\n    p2->meow();\r\n    p2->vanish2();\r\n\r\n    results.emplace_back(\"END\", 2);\r\n\r\n    results.emplace_back(\"BEGIN\", 3);\r\n\r\n    Cat* p3 = new Cat(1729);\r\n    p3->meow();\r\n    p3->vanish3();\r\n\r\n    results.emplace_back(\"END\", 3);\r\n\r\n\r\n    // DevDiv-523246 \"std::unique_ptr deletes owned object before resetting pointer rather than after.\"\r\n    results.emplace_back(\"BEGIN\", 4);\r\n\r\n    Kitten* p4 = new Kitten(257);\r\n    p4->meow();\r\n    p4->vanish0();\r\n\r\n    results.emplace_back(\"END\", 4);\r\n\r\n    results.emplace_back(\"BEGIN\", 5);\r\n\r\n    Kitten* p5 = new Kitten(65537);\r\n    p5->meow();\r\n    p5->vanish1();\r\n\r\n    results.emplace_back(\"END\", 5);\r\n\r\n\r\n    vector<pair<string, int>> correct;\r\n\r\n    correct.emplace_back(\"BEGIN\", 0);\r\n    correct.emplace_back(\"Cat::Cat()\", 1729);\r\n    correct.emplace_back(\"Cat::meow()\", 1729);\r\n    correct.emplace_back(\"Cat::vanish0()\", 1729);\r\n    correct.emplace_back(\"Cat::~Cat()\", 1729);\r\n    correct.emplace_back(\"END\", 0);\r\n    correct.emplace_back(\"BEGIN\", 1);\r\n    correct.emplace_back(\"Cat::Cat()\", 1729);\r\n    correct.emplace_back(\"Cat::meow()\", 1729);\r\n    correct.emplace_back(\"Cat::vanish1()\", 1729);\r\n    correct.emplace_back(\"Cat::Cat()\", 11);\r\n    correct.emplace_back(\"Cat::~Cat()\", 1729);\r\n    correct.emplace_back(\"Cat::~Cat()\", 11);\r\n    correct.emplace_back(\"END\", 1);\r\n    correct.emplace_back(\"BEGIN\", 2);\r\n    correct.emplace_back(\"Cat::Cat()\", 1729);\r\n    correct.emplace_back(\"Cat::meow()\", 1729);\r\n    correct.emplace_back(\"Cat::vanish2()\", 1729);\r\n    correct.emplace_back(\"Cat::Cat()\", 22);\r\n    correct.emplace_back(\"Cat::~Cat()\", 1729);\r\n    correct.emplace_back(\"Cat::~Cat()\", 22);\r\n    correct.emplace_back(\"END\", 2);\r\n    correct.emplace_back(\"BEGIN\", 3);\r\n    correct.emplace_back(\"Cat::Cat()\", 1729);\r\n    correct.emplace_back(\"Cat::meow()\", 1729);\r\n    correct.emplace_back(\"Cat::vanish3()\", 1729);\r\n    correct.emplace_back(\"Cat::Cat()\", 33);\r\n    correct.emplace_back(\"Cat::~Cat()\", 1729);\r\n    correct.emplace_back(\"Cat::~Cat()\", 33);\r\n    correct.emplace_back(\"END\", 3);\r\n    correct.emplace_back(\"BEGIN\", 4);\r\n    correct.emplace_back(\"Kitten::Kitten()\", 257);\r\n    correct.emplace_back(\"Kitten::meow()\", 257);\r\n    correct.emplace_back(\"Kitten::vanish0()\", 257);\r\n    correct.emplace_back(\"Kitten::~Kitten()\", 257);\r\n    correct.emplace_back(\"END\", 4);\r\n    correct.emplace_back(\"BEGIN\", 5);\r\n    correct.emplace_back(\"Kitten::Kitten()\", 65537);\r\n    correct.emplace_back(\"Kitten::meow()\", 65537);\r\n    correct.emplace_back(\"Kitten::vanish1()\", 65537);\r\n    correct.emplace_back(\"Kitten::Kitten()\", 1234);\r\n    correct.emplace_back(\"Kitten::~Kitten()\", 65537);\r\n    correct.emplace_back(\"Kitten::~Kitten()\", 1234);\r\n    correct.emplace_back(\"END\", 5);\r\n\r\n    assert(results == correct);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_639436_const_map_at/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_639436_const_map_at/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <map>\r\n#include <unordered_map>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename T>\r\nvoid add_map_elements(T& m) {\r\n    m.emplace(5, 25);\r\n    m.emplace(6, 36);\r\n    m.emplace_hint(m.begin(), 7, 49);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid test_non_const_at() {\r\n    T m;\r\n\r\n    add_map_elements(m);\r\n\r\n    const T c = m;\r\n\r\n    assert(m.at(6) == 36);\r\n    assert(c.at(6) == 36);\r\n}\r\n\r\nint main() {\r\n    test_non_const_at<map<int, int>>();\r\n    test_non_const_at<unordered_map<int, int>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_646244_bad_alloc_message/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_646244_bad_alloc_message/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstring>\r\n#include <new>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    assert(strcmp(bad_alloc().what(), \"bad allocation\") == 0);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_646556_construct_tuple_from_const/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_646556_construct_tuple_from_const/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <tuple>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    int a          = 10;\r\n    string b       = \"twenty\";\r\n    const int c    = 30;\r\n    const string d = \"forty\";\r\n\r\n    tuple<int, string, int, string> t(a, b, c, d);\r\n\r\n    pair<int, int> p(a, c);\r\n    pair<string, string> q(b, d);\r\n\r\n    assert(get<0>(t) == 10);\r\n    assert(get<1>(t) == \"twenty\");\r\n    assert(get<2>(t) == 30);\r\n    assert(get<3>(t) == \"forty\");\r\n    assert(p.first == 10);\r\n    assert(p.second == 30);\r\n    assert(q.first == \"twenty\");\r\n    assert(q.second == \"forty\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_654977_655012_shared_ptr_move/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_654977_655012_shared_ptr_move/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <string>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nclass Base {\r\npublic:\r\n    Base() {}\r\n    virtual ~Base() {}\r\n\r\n    virtual string str() const {\r\n        return \"Base\";\r\n    }\r\n\r\nprivate:\r\n    Base(const Base&);\r\n    Base& operator=(const Base&);\r\n};\r\n\r\nclass Derived : public Base {\r\npublic:\r\n    string str() const override {\r\n        return \"Derived\";\r\n    }\r\n};\r\n\r\nint main() {\r\n    {\r\n        // move ctor\r\n\r\n        shared_ptr<int> src(new int(1729));\r\n\r\n        assert(src && *src == 1729);\r\n\r\n        shared_ptr<int> dest(move(src));\r\n\r\n        assert(!src);\r\n\r\n        assert(dest && *dest == 1729);\r\n    }\r\n\r\n    {\r\n        // move assign\r\n\r\n        shared_ptr<int> src(new int(123));\r\n\r\n        shared_ptr<int> dest(new int(888));\r\n\r\n        assert(src && *src == 123);\r\n\r\n        assert(dest && *dest == 888);\r\n\r\n        dest = move(src);\r\n\r\n        assert(!src);\r\n\r\n        assert(dest && *dest == 123);\r\n    }\r\n\r\n    {\r\n        // template move ctor\r\n\r\n        shared_ptr<Derived> src(new Derived);\r\n\r\n        assert(src && src->str() == \"Derived\");\r\n\r\n        shared_ptr<Base> dest(move(src));\r\n\r\n        assert(!src);\r\n\r\n        assert(dest && dest->str() == \"Derived\");\r\n    }\r\n\r\n    {\r\n        // template move assign\r\n\r\n        shared_ptr<Derived> src(new Derived);\r\n\r\n        shared_ptr<Base> dest(new Base);\r\n\r\n        assert(src && src->str() == \"Derived\");\r\n\r\n        assert(dest && dest->str() == \"Base\");\r\n\r\n        dest = move(src);\r\n\r\n        assert(!src);\r\n\r\n        assert(dest && dest->str() == \"Derived\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_661739_tuple_copy_ctors/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_661739_tuple_copy_ctors/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <tuple>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    {\r\n        tuple<> src;\r\n        tuple<> dest(src);\r\n        assert(src == dest);\r\n    }\r\n\r\n    {\r\n        tuple<int> src(1729);\r\n        tuple<int> dest(src);\r\n        assert(src == dest);\r\n    }\r\n\r\n    {\r\n        tuple<int, int> src(17, 29);\r\n        tuple<int, int> dest(src);\r\n        assert(src == dest);\r\n    }\r\n\r\n    {\r\n        tuple<int> src(1729);\r\n        tuple<long> dest(src);\r\n        assert(src == dest);\r\n    }\r\n\r\n    {\r\n        tuple<int, int> src(17, 29);\r\n        tuple<long, long> dest(src);\r\n        assert(src == dest);\r\n    }\r\n\r\n    {\r\n        pair<int, int> src(17, 29);\r\n        tuple<int, int> dest(src);\r\n        assert(src.first == get<0>(dest) && src.second == get<1>(dest));\r\n    }\r\n\r\n    {\r\n        pair<int, int> src(17, 29);\r\n        tuple<long, long> dest(src);\r\n        assert(src.first == get<0>(dest) && src.second == get<1>(dest));\r\n    }\r\n\r\n    {\r\n        tuple<int, int> t(-1, -1);\r\n\r\n        const pair<int, int> p(123, 456);\r\n        t = p;\r\n        assert(get<0>(t) == 123 && get<1>(t) == 456);\r\n\r\n        t = make_pair(70, 80);\r\n        assert(get<0>(t) == 70 && get<1>(t) == 80);\r\n\r\n        t = make_tuple(100, 200);\r\n        assert(get<0>(t) == 100 && get<1>(t) == 200);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_682964_stable_sort_warnings/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_682964_stable_sort_warnings/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <random>\r\n#include <string>\r\n#include <vector>\r\n\r\n#ifdef __cpp_lib_execution\r\n#include <execution>\r\n#endif // __cpp_lib_execution\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    {\r\n        vector<string> v = {\"cute\", \"fluffy\", \"kittens\", \"ugly\", \"stupid\", \"puppies\"};\r\n#ifdef __cpp_lib_execution\r\n        auto p = v;\r\n#endif\r\n\r\n        stable_sort(v.begin(), v.end());\r\n\r\n        const vector<string> correct = {\"cute\", \"fluffy\", \"kittens\", \"puppies\", \"stupid\", \"ugly\"};\r\n\r\n        assert(v == correct);\r\n\r\n#ifdef __cpp_lib_execution\r\n        stable_sort(execution::par, p.begin(), p.end());\r\n\r\n        assert(p == correct);\r\n#endif\r\n    }\r\n\r\n    {\r\n        vector<string> v = {\"cute\", \"fluffy\", \"kittens\", \"ugly\", \"stupid\", \"puppies\"};\r\n#ifdef __cpp_lib_execution\r\n        auto p = v;\r\n#endif\r\n\r\n        const auto cmp = [](const string& l, const string& r) { return l.size() < r.size(); };\r\n        stable_sort(v.begin(), v.end(), cmp);\r\n\r\n        const vector<string> correct = {\"cute\", \"ugly\", \"fluffy\", \"stupid\", \"kittens\", \"puppies\"};\r\n\r\n        assert(v == correct);\r\n\r\n#ifdef __cpp_lib_execution\r\n        stable_sort(execution::par, p.begin(), p.end(), cmp);\r\n\r\n        assert(p == correct);\r\n#endif\r\n    }\r\n\r\n\r\n    {\r\n        // Also test DevDiv-957501 \"<algorithm>: stable_sort calls self-move-assignment operator\".\r\n\r\n        class NoSelfMove {\r\n        public:\r\n            explicit NoSelfMove(unsigned int n) : m_n(n) {}\r\n\r\n            NoSelfMove(const NoSelfMove&) = default;\r\n\r\n            NoSelfMove& operator=(const NoSelfMove&) = default;\r\n\r\n            NoSelfMove(NoSelfMove&& other) : m_n(other.m_n) {}\r\n\r\n            NoSelfMove& operator=(NoSelfMove&& other) {\r\n                assert(this != &other);\r\n                m_n = other.m_n;\r\n                return *this;\r\n            }\r\n\r\n            bool operator<(const NoSelfMove& other) const {\r\n                return m_n < other.m_n;\r\n            }\r\n\r\n        private:\r\n            unsigned int m_n;\r\n        };\r\n\r\n        mt19937 urng(1729);\r\n\r\n        for (int k = 0; k < 2000; ++k) {\r\n            vector<NoSelfMove> v;\r\n            for (int i = 0; i < k; ++i) {\r\n                v.emplace_back(urng());\r\n            }\r\n\r\n#ifdef __cpp_lib_execution\r\n            auto p = v;\r\n#endif\r\n\r\n            stable_sort(v.begin(), v.end());\r\n            assert(is_sorted(v.begin(), v.end()));\r\n\r\n#ifdef __cpp_lib_execution\r\n            stable_sort(execution::par, p.begin(), p.end());\r\n            assert(is_sorted(p.begin(), p.end()));\r\n#endif\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_689595_back_inserter_vector_bool/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_689595_back_inserter_vector_bool/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <iterator>\r\n#include <list>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    vector<int> v;\r\n\r\n    for (int i = 0; i < 10; ++i) {\r\n        v.push_back(i);\r\n    }\r\n\r\n    {\r\n        vector<bool> b;\r\n\r\n        transform(v.begin(), v.end(), back_inserter(b), [](int n) { return n < 5; });\r\n\r\n        insert_iterator<vector<bool>> init(b, b.begin() + 9);\r\n\r\n        *init++ = true;\r\n\r\n        vector<bool> correct{true, true, true, true, true, false, false, false, false, true, false};\r\n\r\n        assert(b == correct);\r\n    }\r\n\r\n    {\r\n        list<int> l;\r\n\r\n        transform(v.begin(), v.end(), back_inserter(l), [](int n) { return n * 10; });\r\n        transform(v.begin(), v.end(), front_inserter(l), [](int n) { return n * 100; });\r\n        transform(v.begin(), v.end(), inserter(l, next(l.begin(), 5)), [](int n) { return n * 1000; });\r\n\r\n        const int c[] = {900, 800, 700, 600, 500, 0, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 400, 300,\r\n            200, 100, 0, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90};\r\n\r\n        const list<int> correct(begin(c), end(c));\r\n\r\n        assert(l == correct);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_709168_marking_iterators_as_checked/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_709168_marking_iterators_as_checked/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <filesystem>\r\n#include <flat_map>\r\n#include <flat_set>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <map>\r\n#include <set>\r\n#include <span>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <vector>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nstruct MeowIterator;\r\n\r\nnamespace std {\r\n    // Previously pseudo-documented way to mark iterators checked should still compile, no longer used by the STL:\r\n    template <>\r\n    struct _Is_checked_helper<MeowIterator> : true_type {};\r\n} // namespace std\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nstruct DerivedFrom : T {};\r\n\r\nconstexpr bool stl_checked  = _ITERATOR_DEBUG_LEVEL != 0;\r\nconstexpr bool stl_checked2 = _ITERATOR_DEBUG_LEVEL == 2;\r\n\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<string::iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<string::const_iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<string::reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<string::const_reverse_iterator>);\r\n\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<array<int, 2>::iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<array<int, 2>::const_iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<array<int, 2>::reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<array<int, 2>::const_reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<deque<int>::iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<deque<int>::const_iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<deque<int>::reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<deque<int>::const_reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<forward_list<int>::iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<forward_list<int>::const_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<list<int>::iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<list<int>::const_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<list<int>::reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<list<int>::const_reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<vector<int>::iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<vector<int>::const_iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<vector<int>::reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<vector<int>::const_reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<vector<bool>::iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<vector<bool>::const_iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<vector<bool>::reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<vector<bool>::const_reverse_iterator>);\r\n\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<map<int, int>::iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<map<int, int>::const_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<map<int, int>::reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<map<int, int>::const_reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<multimap<int, int>::iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<multimap<int, int>::const_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<multimap<int, int>::reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<multimap<int, int>::const_reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<set<int>::iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<set<int>::const_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<set<int>::reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<set<int>::const_reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<multiset<int>::iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<multiset<int>::const_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<multiset<int>::reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<multiset<int>::const_reverse_iterator>);\r\n\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<unordered_map<int, int>::iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<unordered_map<int, int>::const_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<unordered_multimap<int, int>::iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<unordered_multimap<int, int>::const_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<unordered_set<int>::iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<unordered_set<int>::const_iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<unordered_multiset<int>::iterator>);\r\nSTATIC_ASSERT(stl_checked2 == _Range_verifiable_v<unordered_multiset<int>::const_iterator>);\r\n\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<int*>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<move_iterator<int*>>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<reverse_iterator<int*>>);\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<string_view::iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<string_view::const_iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<string_view::reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<string_view::const_reverse_iterator>);\r\n\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<std::filesystem::path::iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<std::filesystem::path::const_iterator>);\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<span<int>::iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<span<int>::reverse_iterator>);\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n// Checks for flat_set should trivially pass since it directly uses the underlying container's iterator\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<flat_set<int>::iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<flat_set<int>::reverse_iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<flat_map<int, int>::iterator>);\r\nSTATIC_ASSERT(stl_checked == _Range_verifiable_v<flat_map<int, int>::reverse_iterator>);\r\n#endif // _HAS_CXX23\r\n\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<string::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<string::const_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<string::reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<string::const_reverse_iterator>>);\r\n\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<array<int, 2>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<array<int, 2>::const_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<array<int, 2>::reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<array<int, 2>::const_reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<deque<int>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<deque<int>::const_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<deque<int>::reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<deque<int>::const_reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<forward_list<int>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<forward_list<int>::const_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<list<int>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<list<int>::const_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<list<int>::reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<list<int>::const_reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<vector<int>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<vector<int>::const_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<vector<int>::reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<vector<int>::const_reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<vector<bool>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<vector<bool>::const_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<vector<bool>::reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<vector<bool>::const_reverse_iterator>>);\r\n\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<map<int, int>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<map<int, int>::const_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<map<int, int>::reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<map<int, int>::const_reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<multimap<int, int>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<multimap<int, int>::const_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<multimap<int, int>::reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<multimap<int, int>::const_reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<set<int>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<set<int>::const_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<set<int>::reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<set<int>::const_reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<multiset<int>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<multiset<int>::const_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<multiset<int>::reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<multiset<int>::const_reverse_iterator>>);\r\n\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<unordered_map<int, int>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<unordered_map<int, int>::const_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<unordered_multimap<int, int>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<unordered_multimap<int, int>::const_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<unordered_set<int>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<unordered_set<int>::const_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<unordered_multiset<int>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<unordered_multiset<int>::const_iterator>>);\r\n\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<move_iterator<int*>>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<reverse_iterator<int*>>>);\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<string_view::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<string_view::const_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<string_view::reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<string_view::const_reverse_iterator>>);\r\n\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<std::filesystem::path::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<std::filesystem::path::const_iterator>>);\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<span<int>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<span<int>::reverse_iterator>>);\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<flat_set<int>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<flat_set<int>::reverse_iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<flat_map<int, int>::iterator>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<flat_map<int, int>::reverse_iterator>>);\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class I, bool Expected>\r\nconstexpr bool test_unwrappable() {\r\n    STATIC_ASSERT(_Unwrappable_v<I&> == Expected);\r\n    STATIC_ASSERT(_Unwrappable_v<const I&> == Expected);\r\n    STATIC_ASSERT(_Unwrappable_v<I> == Expected);\r\n    STATIC_ASSERT(_Unwrappable_v<const I> == Expected);\r\n    return true;\r\n}\r\n\r\ntemplate <class I, bool Expected>\r\nconstexpr bool test_unwrappable_for_unverified() {\r\n    STATIC_ASSERT(_Unwrappable_for_unverified_v<I&> == Expected);\r\n    STATIC_ASSERT(_Unwrappable_for_unverified_v<const I&> == Expected);\r\n    STATIC_ASSERT(_Unwrappable_for_unverified_v<I> == Expected);\r\n    STATIC_ASSERT(_Unwrappable_for_unverified_v<const I> == Expected);\r\n    return true;\r\n}\r\n\r\ntemplate <class I, bool Expected>\r\nconstexpr bool test_unwrappable_for_offset() {\r\n    STATIC_ASSERT(_Unwrappable_for_offset_v<I&> == Expected);\r\n    STATIC_ASSERT(_Unwrappable_for_offset_v<const I&> == Expected);\r\n    STATIC_ASSERT(_Unwrappable_for_offset_v<I> == Expected);\r\n    STATIC_ASSERT(_Unwrappable_for_offset_v<const I> == Expected);\r\n    return true;\r\n}\r\n\r\nstruct SimpleBidIt {\r\n    using iterator_category = bidirectional_iterator_tag;\r\n    using value_type        = int;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = int*;\r\n    using reference         = int&;\r\n\r\n    SimpleBidIt()                              = default;\r\n    SimpleBidIt(const SimpleBidIt&)            = default;\r\n    SimpleBidIt(SimpleBidIt&&)                 = default;\r\n    SimpleBidIt& operator=(const SimpleBidIt&) = default;\r\n    SimpleBidIt& operator=(SimpleBidIt&&)      = default;\r\n    ~SimpleBidIt()                             = default;\r\n\r\n    int& operator*() const {\r\n        static int val{};\r\n        return val;\r\n    }\r\n    int* operator->() const {\r\n        return nullptr;\r\n    }\r\n    SimpleBidIt& operator++() {\r\n        return *this;\r\n    }\r\n    void operator++(int) = delete; // avoid postincrement\r\n    bool operator==(const SimpleBidIt&) const {\r\n        return true;\r\n    }\r\n    bool operator!=(const SimpleBidIt&) const {\r\n        return false;\r\n    }\r\n\r\n    SimpleBidIt& operator--() {\r\n        return *this;\r\n    }\r\n    void operator--(int) = delete; // avoid postdecrement\r\n};\r\n\r\nSTATIC_ASSERT(!_Range_verifiable_v<SimpleBidIt>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<move_iterator<SimpleBidIt>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<reverse_iterator<SimpleBidIt>>);\r\nSTATIC_ASSERT(test_unwrappable<SimpleBidIt, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<SimpleBidIt, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<SimpleBidIt, false>());\r\n\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<SimpleBidIt>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<move_iterator<SimpleBidIt>>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<reverse_iterator<SimpleBidIt>>>);\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<SimpleBidIt>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<SimpleBidIt>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<SimpleBidIt>, false>());\r\n\r\nstruct FancyBidIt {\r\n    using iterator_category = bidirectional_iterator_tag;\r\n    using value_type        = int;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = int*;\r\n    using reference         = int&;\r\n\r\n    FancyBidIt()                             = default;\r\n    FancyBidIt(const FancyBidIt&)            = default;\r\n    FancyBidIt(FancyBidIt&&)                 = default;\r\n    FancyBidIt& operator=(const FancyBidIt&) = default;\r\n    FancyBidIt& operator=(FancyBidIt&&)      = default;\r\n    ~FancyBidIt()                            = default;\r\n\r\n    int& operator*() const {\r\n        static int val{};\r\n        return val;\r\n    }\r\n    int* operator->() const {\r\n        return nullptr;\r\n    }\r\n    FancyBidIt& operator++() {\r\n        return *this;\r\n    }\r\n    void operator++(int) = delete; // avoid postincrement\r\n    bool operator==(const FancyBidIt&) const {\r\n        return true;\r\n    }\r\n    bool operator!=(const FancyBidIt&) const {\r\n        return false;\r\n    }\r\n\r\n    FancyBidIt& operator--() {\r\n        return *this;\r\n    }\r\n    void operator--(int) = delete; // avoid postdecrement\r\n\r\n    friend void _Verify_range(FancyBidIt, FancyBidIt) {}\r\n    void _Verify_offset(difference_type) const {}\r\n    FancyBidIt _Unwrapped() const {\r\n        return {};\r\n    }\r\n    void _Seek_to(FancyBidIt) {}\r\n    static constexpr bool _Unwrap_when_unverified = true;\r\n};\r\n\r\nSTATIC_ASSERT(_Range_verifiable_v<FancyBidIt>);\r\nSTATIC_ASSERT(_Range_verifiable_v<move_iterator<FancyBidIt>>);\r\nSTATIC_ASSERT(_Range_verifiable_v<reverse_iterator<FancyBidIt>>);\r\nSTATIC_ASSERT(test_unwrappable<FancyBidIt, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<FancyBidIt, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<FancyBidIt, true>());\r\n\r\n// User iterator types that want to use derivation can still do so even following resolution of VSO-664880\r\nSTATIC_ASSERT(_Range_verifiable_v<::DerivedFrom<FancyBidIt>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<move_iterator<FancyBidIt>>>);\r\nSTATIC_ASSERT(!_Range_verifiable_v<::DerivedFrom<reverse_iterator<FancyBidIt>>>);\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<FancyBidIt>, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<FancyBidIt>, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<FancyBidIt>, true>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<string::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<string::const_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<string::reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<string::const_reverse_iterator, !stl_checked>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<array<int, 2>::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<array<int, 2>::const_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<array<int, 2>::reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<array<int, 2>::const_reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<deque<int>::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<deque<int>::const_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<deque<int>::reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<deque<int>::const_reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<forward_list<int>::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<forward_list<int>::const_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<list<int>::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<list<int>::const_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<list<int>::reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<list<int>::const_reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<vector<int>::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<vector<int>::const_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<vector<int>::reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<vector<int>::const_reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<vector<bool>::iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<vector<bool>::const_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<vector<bool>::reverse_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<vector<bool>::const_reverse_iterator, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<map<int, int>::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<map<int, int>::const_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<map<int, int>::reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<map<int, int>::const_reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<multimap<int, int>::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<multimap<int, int>::const_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<multimap<int, int>::reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<multimap<int, int>::const_reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<set<int>::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<set<int>::const_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<set<int>::reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<set<int>::const_reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<multiset<int>::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<multiset<int>::const_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<multiset<int>::reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<multiset<int>::const_reverse_iterator, !stl_checked>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<unordered_map<int, int>::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<unordered_map<int, int>::const_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<unordered_multimap<int, int>::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<unordered_multimap<int, int>::const_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<unordered_set<int>::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<unordered_set<int>::const_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<unordered_multiset<int>::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<unordered_multiset<int>::const_iterator, !stl_checked>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<int*, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<move_iterator<int*>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<reverse_iterator<int*>, false>());\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<string_view::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<string_view::const_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<string_view::reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<string_view::const_reverse_iterator, !stl_checked>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<std::filesystem::path::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<std::filesystem::path::const_iterator, !stl_checked>());\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<span<int>::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<span<int>::reverse_iterator, !stl_checked>());\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<flat_set<int>::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<flat_set<int>::reverse_iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<flat_map<int, int>::iterator, !stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<flat_map<int, int>::reverse_iterator, !stl_checked>());\r\n#endif // _HAS_CXX23\r\n\r\nSTATIC_ASSERT(test_unwrappable<string::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<string::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<string::reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<string::const_reverse_iterator, true>());\r\n\r\nSTATIC_ASSERT(test_unwrappable<array<int, 2>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<array<int, 2>::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<array<int, 2>::reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<array<int, 2>::const_reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<deque<int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<deque<int>::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<deque<int>::reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<deque<int>::const_reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<forward_list<int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<forward_list<int>::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<list<int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<list<int>::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<list<int>::reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<list<int>::const_reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<vector<int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<vector<int>::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<vector<int>::reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<vector<int>::const_reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<vector<bool>::iterator, false>()); // :(\r\nSTATIC_ASSERT(test_unwrappable<vector<bool>::const_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable<vector<bool>::reverse_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable<vector<bool>::const_reverse_iterator, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable<map<int, int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<map<int, int>::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<map<int, int>::reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<map<int, int>::const_reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<multimap<int, int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<multimap<int, int>::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<multimap<int, int>::reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<multimap<int, int>::const_reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<set<int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<set<int>::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<set<int>::reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<set<int>::const_reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<multiset<int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<multiset<int>::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<multiset<int>::reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<multiset<int>::const_reverse_iterator, true>());\r\n\r\nSTATIC_ASSERT(test_unwrappable<unordered_map<int, int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<unordered_map<int, int>::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<unordered_multimap<int, int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<unordered_multimap<int, int>::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<unordered_set<int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<unordered_set<int>::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<unordered_multiset<int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<unordered_multiset<int>::const_iterator, true>());\r\n\r\nSTATIC_ASSERT(test_unwrappable<int*, false>());\r\nSTATIC_ASSERT(test_unwrappable<move_iterator<int*>, false>());\r\nSTATIC_ASSERT(test_unwrappable<reverse_iterator<int*>, false>());\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(test_unwrappable<string_view::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<string_view::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<string_view::reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<string_view::const_reverse_iterator, true>());\r\n\r\nSTATIC_ASSERT(test_unwrappable<std::filesystem::path::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<std::filesystem::path::const_iterator, true>());\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(test_unwrappable<span<int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<span<int>::reverse_iterator, true>());\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(test_unwrappable<flat_set<int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<flat_set<int>::reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<flat_map<int, int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable<flat_map<int, int>::reverse_iterator, true>());\r\n#endif // _HAS_CXX23\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_offset<string::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<string::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<string::reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<string::const_reverse_iterator, true>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_offset<array<int, 2>::iterator, stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<array<int, 2>::const_iterator, stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<array<int, 2>::reverse_iterator, stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<array<int, 2>::const_reverse_iterator, stl_checked>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<deque<int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<deque<int>::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<deque<int>::reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<deque<int>::const_reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<forward_list<int>::iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<forward_list<int>::const_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<list<int>::iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<list<int>::const_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<list<int>::reverse_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<list<int>::const_reverse_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<vector<int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<vector<int>::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<vector<int>::reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<vector<int>::const_reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<vector<bool>::iterator, false>()); // :(\r\nSTATIC_ASSERT(test_unwrappable_for_offset<vector<bool>::const_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<vector<bool>::reverse_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<vector<bool>::const_reverse_iterator, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_offset<map<int, int>::iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<map<int, int>::const_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<map<int, int>::reverse_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<map<int, int>::const_reverse_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<multimap<int, int>::iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<multimap<int, int>::const_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<multimap<int, int>::reverse_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<multimap<int, int>::const_reverse_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<set<int>::iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<set<int>::const_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<set<int>::reverse_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<set<int>::const_reverse_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<multiset<int>::iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<multiset<int>::const_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<multiset<int>::reverse_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<multiset<int>::const_reverse_iterator, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_offset<unordered_map<int, int>::iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<unordered_map<int, int>::const_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<unordered_multimap<int, int>::iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<unordered_multimap<int, int>::const_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<unordered_set<int>::iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<unordered_set<int>::const_iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<unordered_multiset<int>::iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<unordered_multiset<int>::const_iterator, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_offset<int*, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<move_iterator<int*>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<reverse_iterator<int*>, false>());\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(test_unwrappable_for_offset<string_view::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<string_view::const_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<string_view::reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<string_view::const_reverse_iterator, true>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_offset<std::filesystem::path::iterator, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<std::filesystem::path::const_iterator, false>());\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(test_unwrappable_for_offset<span<int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<span<int>::reverse_iterator, true>());\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(test_unwrappable_for_offset<flat_set<int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<flat_set<int>::reverse_iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<flat_map<int, int>::iterator, true>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<flat_map<int, int>::reverse_iterator, true>());\r\n#endif // _HAS_CXX23\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<string::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<string::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<string::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<string::const_reverse_iterator>, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<array<int, 2>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<array<int, 2>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<array<int, 2>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<array<int, 2>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<deque<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<deque<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<deque<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<deque<int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<forward_list<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<forward_list<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<list<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<list<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<list<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<list<int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<vector<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<vector<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<vector<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<vector<int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<vector<bool>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<vector<bool>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<vector<bool>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<vector<bool>::const_reverse_iterator>, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<map<int, int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<map<int, int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<map<int, int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<map<int, int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<multimap<int, int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<multimap<int, int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<multimap<int, int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<multimap<int, int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<set<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<set<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<set<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<set<int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<multiset<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<multiset<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<multiset<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<multiset<int>::const_reverse_iterator>, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<unordered_map<int, int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<unordered_map<int, int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<unordered_multimap<int, int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<unordered_multimap<int, int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<unordered_set<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<unordered_set<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<unordered_multiset<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<unordered_multiset<int>::const_iterator>, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<move_iterator<int*>>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<reverse_iterator<int*>>, false>());\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<string_view::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<string_view::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<string_view::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<string_view::const_reverse_iterator>, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<std::filesystem::path::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<std::filesystem::path::const_iterator>, false>());\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<span<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<span<int>::reverse_iterator>, false>());\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<flat_set<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<flat_set<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<flat_map<int, int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_unverified<::DerivedFrom<flat_map<int, int>::reverse_iterator>, false>());\r\n#endif // _HAS_CXX23\r\n\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<string::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<string::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<string::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<string::const_reverse_iterator>, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<array<int, 2>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<array<int, 2>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<array<int, 2>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<array<int, 2>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<deque<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<deque<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<deque<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<deque<int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<forward_list<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<forward_list<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<list<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<list<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<list<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<list<int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<vector<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<vector<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<vector<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<vector<int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<vector<bool>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<vector<bool>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<vector<bool>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<vector<bool>::const_reverse_iterator>, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<map<int, int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<map<int, int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<map<int, int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<map<int, int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<multimap<int, int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<multimap<int, int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<multimap<int, int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<multimap<int, int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<set<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<set<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<set<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<set<int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<multiset<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<multiset<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<multiset<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<multiset<int>::const_reverse_iterator>, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<unordered_map<int, int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<unordered_map<int, int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<unordered_multimap<int, int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<unordered_multimap<int, int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<unordered_set<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<unordered_set<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<unordered_multiset<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<unordered_multiset<int>::const_iterator>, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<move_iterator<int*>>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<reverse_iterator<int*>>, false>());\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<string_view::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<string_view::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<string_view::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<string_view::const_reverse_iterator>, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<std::filesystem::path::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<std::filesystem::path::const_iterator>, false>());\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<span<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<span<int>::reverse_iterator>, false>());\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<flat_set<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<flat_set<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<flat_map<int, int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable<::DerivedFrom<flat_map<int, int>::reverse_iterator>, false>());\r\n#endif // _HAS_CXX23\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<string::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<string::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<string::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<string::const_reverse_iterator>, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<array<int, 2>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<array<int, 2>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<array<int, 2>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<array<int, 2>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<deque<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<deque<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<deque<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<deque<int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<forward_list<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<forward_list<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<list<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<list<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<list<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<list<int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<vector<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<vector<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<vector<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<vector<int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<vector<bool>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<vector<bool>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<vector<bool>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<vector<bool>::const_reverse_iterator>, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<map<int, int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<map<int, int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<map<int, int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<map<int, int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<multimap<int, int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<multimap<int, int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<multimap<int, int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<multimap<int, int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<set<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<set<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<set<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<set<int>::const_reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<multiset<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<multiset<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<multiset<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<multiset<int>::const_reverse_iterator>, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<unordered_map<int, int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<unordered_map<int, int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<unordered_multimap<int, int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<unordered_multimap<int, int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<unordered_set<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<unordered_set<int>::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<unordered_multiset<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<unordered_multiset<int>::const_iterator>, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<move_iterator<int*>>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<reverse_iterator<int*>>, false>());\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<string_view::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<string_view::const_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<string_view::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<string_view::const_reverse_iterator>, false>());\r\n\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<std::filesystem::path::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<std::filesystem::path::const_iterator>, false>());\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<span<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<span<int>::reverse_iterator>, false>());\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<flat_set<int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<flat_set<int>::reverse_iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<flat_map<int, int>::iterator>, false>());\r\nSTATIC_ASSERT(test_unwrappable_for_offset<::DerivedFrom<flat_map<int, int>::reverse_iterator>, false>());\r\n#endif // _HAS_CXX23\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_722102_shared_ptr_nullptr/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_722102_shared_ptr_nullptr/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//  Dev10-722102 \"STL: Get nullptr overloads\"\r\n// DevDiv-520681 \"Faulty implementation of shared_ptr(nullptr_t) constructor\"\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <functional>\r\n#include <memory>\r\n#include <new>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\n\r\nvoid Del(int* p) {\r\n    delete p;\r\n}\r\n\r\nnamespace {\r\n    bool g_throw_on_alloc = false;\r\n}\r\n\r\nvoid* operator new(size_t const size) {\r\n    if (!g_throw_on_alloc) {\r\n        if (void* const vp = malloc(size)) {\r\n            return vp;\r\n        }\r\n    }\r\n\r\n    throw bad_alloc{};\r\n}\r\n\r\nvoid operator delete(void* const vp, size_t) noexcept {\r\n    free(vp);\r\n}\r\n\r\nstruct NullptrDeleter {\r\n    template <class T>\r\n    void operator()(T*) const {\r\n        abort();\r\n    }\r\n\r\n    void operator()(nullptr_t) const {}\r\n};\r\n\r\nstruct ImmobileDeleter {\r\n    ImmobileDeleter()                             = default;\r\n    ImmobileDeleter(ImmobileDeleter&&)            = delete;\r\n    ImmobileDeleter& operator=(ImmobileDeleter&&) = delete;\r\n\r\n    void operator()(void*) const {}\r\n};\r\n\r\nclass NonDeleter {};\r\n\r\nvoid test_deleter() {\r\n    // VSO-387662: deleter should be called with a nullptr_t object,\r\n    // not with (int *)nullptr.\r\n    shared_ptr<int>{nullptr, NullptrDeleter{}};\r\n    shared_ptr<int>{nullptr, NullptrDeleter{}, allocator<int>{}};\r\n}\r\n\r\nvoid test_exception() {\r\n    // VSO-387662: deleter should be called with a nullptr_t object,\r\n    // not with (int *)nullptr.\r\n    g_throw_on_alloc = true;\r\n    try {\r\n        shared_ptr<int>{nullptr, NullptrDeleter{}};\r\n        abort();\r\n    } catch (const bad_alloc&) {\r\n    }\r\n    try {\r\n        shared_ptr<int>{nullptr, NullptrDeleter{}, allocator<int>{}};\r\n        abort();\r\n    } catch (const bad_alloc&) {\r\n    }\r\n    g_throw_on_alloc = false;\r\n}\r\n\r\n\r\nvoid test_sfinae() {\r\n    // per LWG-2875\r\n    using SP = shared_ptr<int>;\r\n    using A  = allocator<int>;\r\n\r\n    // deleter must be move constructible\r\n    STATIC_ASSERT(is_constructible_v<SP, nullptr_t, default_delete<int>>);\r\n    STATIC_ASSERT(!is_constructible_v<SP, nullptr_t, ImmobileDeleter>);\r\n\r\n    STATIC_ASSERT(is_constructible_v<SP, nullptr_t, default_delete<int>, A>);\r\n    STATIC_ASSERT(!is_constructible_v<SP, nullptr_t, ImmobileDeleter, A>);\r\n\r\n    // d(p) must be well-formed\r\n    STATIC_ASSERT(!is_constructible_v<SP, nullptr_t, NonDeleter>);\r\n    STATIC_ASSERT(!is_constructible_v<SP, nullptr_t, NonDeleter, A>);\r\n}\r\n\r\nnamespace pointer {\r\n    struct Base {};\r\n    struct Derived : Base {};\r\n\r\n    void test_sfinae() {\r\n        {\r\n            // per LWG-2874\r\n\r\n            STATIC_ASSERT(is_constructible_v<shared_ptr<int>, int*>);\r\n            STATIC_ASSERT(is_constructible_v<shared_ptr<const int>, int*>);\r\n            STATIC_ASSERT(is_constructible_v<shared_ptr<void>, int*>);\r\n            STATIC_ASSERT(is_constructible_v<shared_ptr<Base>, Derived*>);\r\n            STATIC_ASSERT(!is_constructible_v<shared_ptr<int>, const int*>);\r\n            STATIC_ASSERT(!is_constructible_v<shared_ptr<int>, void*>);\r\n            STATIC_ASSERT(!is_constructible_v<shared_ptr<Derived>, Base*>);\r\n\r\n            STATIC_ASSERT(is_constructible_v<shared_ptr<int[]>, int*>);\r\n            STATIC_ASSERT(is_constructible_v<shared_ptr<int[42]>, int*>);\r\n            STATIC_ASSERT(is_constructible_v<shared_ptr<const int[]>, int*>);\r\n            STATIC_ASSERT(is_constructible_v<shared_ptr<const int[42]>, int*>);\r\n            STATIC_ASSERT(!is_constructible_v<shared_ptr<Base[]>, Derived*>);\r\n            STATIC_ASSERT(!is_constructible_v<shared_ptr<Base[42]>, Derived*>);\r\n            STATIC_ASSERT(!is_constructible_v<shared_ptr<int[]>, const int*>);\r\n            STATIC_ASSERT(!is_constructible_v<shared_ptr<int[42]>, const int*>);\r\n        }\r\n        {\r\n            // per LWG-2875\r\n\r\n            // deleter must be move constructible\r\n            STATIC_ASSERT(is_constructible_v<shared_ptr<int>, int*, default_delete<int>>);\r\n            STATIC_ASSERT(!is_constructible_v<shared_ptr<int>, int*, ImmobileDeleter>);\r\n\r\n            STATIC_ASSERT(is_constructible_v<shared_ptr<int>, int*, default_delete<int>, allocator<int>>);\r\n            STATIC_ASSERT(!is_constructible_v<shared_ptr<int>, int*, ImmobileDeleter, allocator<int>>);\r\n\r\n            // d(p) must be well-formed\r\n            STATIC_ASSERT(!is_constructible_v<shared_ptr<int>, int*, NonDeleter>);\r\n            STATIC_ASSERT(!is_constructible_v<shared_ptr<int>, int*, NonDeleter, allocator<int>>);\r\n\r\n            // Y * must be convertible to T *\r\n            STATIC_ASSERT(is_constructible_v<shared_ptr<Base>, Derived*, default_delete<Derived>>);\r\n            STATIC_ASSERT(!is_constructible_v<shared_ptr<int>, const int*, default_delete<const int>>);\r\n            STATIC_ASSERT(!is_constructible_v<shared_ptr<int>, void*, void (*)(void*)>);\r\n            STATIC_ASSERT(!is_constructible_v<shared_ptr<Derived>, Base*, default_delete<Base>>);\r\n        }\r\n    }\r\n\r\n    void test() {\r\n        test_sfinae();\r\n    }\r\n} // namespace pointer\r\n\r\nnamespace unique_ptr_ {\r\n    struct secret_tag {};\r\n\r\n    template <class T>\r\n    struct fancy_pointer {\r\n        T* ptr_{nullptr};\r\n\r\n        fancy_pointer() = default;\r\n\r\n        explicit fancy_pointer(secret_tag, T* ptr) : ptr_{ptr} {}\r\n\r\n        fancy_pointer(nullptr_t) {}\r\n\r\n        fancy_pointer& operator=(nullptr_t) {\r\n            ptr_ = nullptr;\r\n            return *this;\r\n        }\r\n\r\n        friend bool operator==(const fancy_pointer& left, const fancy_pointer& right) {\r\n            return left.ptr_ == right.ptr_;\r\n        }\r\n\r\n        friend bool operator!=(const fancy_pointer& left, const fancy_pointer& right) {\r\n            return left.ptr_ != right.ptr_;\r\n        }\r\n\r\n        friend bool operator==(const fancy_pointer& left, nullptr_t) {\r\n            return left.ptr_ == nullptr;\r\n        }\r\n\r\n        friend bool operator!=(const fancy_pointer& left, nullptr_t) {\r\n            return left.ptr_ != nullptr;\r\n        }\r\n\r\n        friend bool operator==(nullptr_t, const fancy_pointer& right) {\r\n            return nullptr == right.ptr_;\r\n        }\r\n\r\n        friend bool operator!=(nullptr_t, const fancy_pointer& right) {\r\n            return nullptr != right.ptr_;\r\n        }\r\n\r\n        operator T*() const {\r\n            return ptr_;\r\n        }\r\n    };\r\n\r\n    template <class T>\r\n    struct fancy_deleter {\r\n        using pointer = fancy_pointer<T>;\r\n\r\n        void operator()(pointer ptr) const noexcept {\r\n            assert(ptr.ptr_ != nullptr);\r\n            _Analysis_assume_(ptr.ptr_);\r\n            assert(*ptr.ptr_ == 42);\r\n            *ptr.ptr_ = 13;\r\n        }\r\n\r\n        // Also test LWG-3548 \"shared_ptr construction from unique_ptr should move (not copy) the deleter\".\r\n        fancy_deleter()                = default;\r\n        fancy_deleter(fancy_deleter&&) = default;\r\n\r\n        fancy_deleter(const fancy_deleter&)            = delete;\r\n        fancy_deleter& operator=(fancy_deleter&&)      = delete;\r\n        fancy_deleter& operator=(const fancy_deleter&) = delete;\r\n    };\r\n\r\n    template <class>\r\n    struct Counted {\r\n        static int count;\r\n        Counted() {\r\n            ++count;\r\n        }\r\n        Counted(Counted const&) {\r\n            ++count;\r\n        }\r\n        Counted& operator=(Counted const&) = delete;\r\n        ~Counted() noexcept {\r\n            --count;\r\n        }\r\n    };\r\n    template <class T>\r\n    int Counted<T>::count = 0;\r\n\r\n    struct CountedDeleter : Counted<CountedDeleter> {\r\n        template <class T>\r\n        void operator()(T* ptr) const {\r\n            delete ptr;\r\n        }\r\n    };\r\n\r\n    struct AssertDeleter : Counted<AssertDeleter> {\r\n        void operator()(void*) const {\r\n            abort();\r\n        }\r\n    };\r\n\r\n    void test_fancy() {\r\n        int i = 42;\r\n        unique_ptr<int, fancy_deleter<int>> up{fancy_pointer<int>{secret_tag{}, &i}};\r\n        {\r\n            shared_ptr<int> sp{move(up)};\r\n            assert(sp.get() == &i);\r\n        }\r\n        assert(i == 13);\r\n    }\r\n\r\n    void test_ref_deleter() {\r\n        CountedDeleter cd;\r\n        assert(CountedDeleter::count == 1);\r\n        {\r\n            shared_ptr<int> sp{unique_ptr<int, CountedDeleter&>{new int{42}, cd}};\r\n            assert(CountedDeleter::count == 1);\r\n            assert(get_deleter<reference_wrapper<CountedDeleter>>(sp) != nullptr);\r\n            assert(&get_deleter<reference_wrapper<CountedDeleter>>(sp)->get() == &cd);\r\n        }\r\n        {\r\n            reference_wrapper<CountedDeleter> rw{cd};\r\n            shared_ptr<int> sp{unique_ptr<int, reference_wrapper<CountedDeleter>&>{new int{42}, rw}};\r\n            assert(CountedDeleter::count == 1);\r\n            assert(get_deleter<reference_wrapper<CountedDeleter>>(sp) != nullptr);\r\n            assert(&get_deleter<reference_wrapper<CountedDeleter>>(sp)->get() == &cd);\r\n        }\r\n    }\r\n\r\n    void test_exception() {\r\n        auto up          = make_unique<int>(42);\r\n        auto rawptr      = up.get();\r\n        g_throw_on_alloc = true;\r\n        try {\r\n            shared_ptr<int>{move(up)};\r\n            abort();\r\n        } catch (const bad_alloc&) {\r\n        }\r\n        g_throw_on_alloc = false;\r\n        assert(up.get() == rawptr);\r\n    }\r\n\r\n    void test_lwg_2415() {\r\n        // per LWG-2415: \"Inconsistency between unique_ptr and shared_ptr\"\r\n        assert(AssertDeleter::count == 0);\r\n        unique_ptr<int, AssertDeleter> up{nullptr};\r\n        assert(AssertDeleter::count == 1);\r\n        shared_ptr<int> sp{move(up)};\r\n        assert(AssertDeleter::count == 1);\r\n        assert(sp.use_count() == 0);\r\n        assert(sp.get() == nullptr);\r\n    }\r\n\r\n    void test() {\r\n        test_fancy();\r\n        test_ref_deleter();\r\n        test_exception();\r\n        test_lwg_2415();\r\n    }\r\n} // namespace unique_ptr_\r\n\r\nnamespace weak_ptr_ {\r\n    struct Base {};\r\n    struct Derived : Base {};\r\n\r\n    void test_sfinae() {\r\n        // per LWG-2876\r\n\r\n        STATIC_ASSERT(is_constructible_v<shared_ptr<int>, weak_ptr<int>>);\r\n        STATIC_ASSERT(!is_constructible_v<shared_ptr<int>, weak_ptr<const int>>);\r\n        STATIC_ASSERT(is_constructible_v<shared_ptr<void>, weak_ptr<int>>);\r\n        STATIC_ASSERT(!is_constructible_v<shared_ptr<void>, weak_ptr<const int>>);\r\n        STATIC_ASSERT(is_constructible_v<shared_ptr<const void>, weak_ptr<const int>>);\r\n\r\n        STATIC_ASSERT(is_constructible_v<shared_ptr<int[]>, weak_ptr<int[]>>);\r\n        STATIC_ASSERT(is_constructible_v<shared_ptr<int[]>, weak_ptr<int[42]>>);\r\n        STATIC_ASSERT(!is_constructible_v<shared_ptr<int[42]>, weak_ptr<int[]>>);\r\n        STATIC_ASSERT(is_constructible_v<shared_ptr<int[42]>, weak_ptr<int[42]>>);\r\n\r\n        STATIC_ASSERT(!is_constructible_v<shared_ptr<int[]>, weak_ptr<const int[]>>);\r\n        STATIC_ASSERT(!is_constructible_v<shared_ptr<int[]>, weak_ptr<const int[42]>>);\r\n        STATIC_ASSERT(!is_constructible_v<shared_ptr<int[42]>, weak_ptr<const int[]>>);\r\n        STATIC_ASSERT(!is_constructible_v<shared_ptr<int[42]>, weak_ptr<const int[42]>>);\r\n\r\n        STATIC_ASSERT(is_constructible_v<shared_ptr<const int[]>, weak_ptr<int[]>>);\r\n        STATIC_ASSERT(is_constructible_v<shared_ptr<const int[]>, weak_ptr<int[42]>>);\r\n        STATIC_ASSERT(!is_constructible_v<shared_ptr<const int[42]>, weak_ptr<int[]>>);\r\n        STATIC_ASSERT(is_constructible_v<shared_ptr<const int[42]>, weak_ptr<int[42]>>);\r\n\r\n        STATIC_ASSERT(!is_constructible_v<shared_ptr<Base[]>, weak_ptr<Derived[]>>);\r\n        STATIC_ASSERT(!is_constructible_v<shared_ptr<Base[42]>, weak_ptr<Derived[]>>);\r\n        STATIC_ASSERT(!is_constructible_v<shared_ptr<Base[]>, weak_ptr<Derived[42]>>);\r\n        STATIC_ASSERT(!is_constructible_v<shared_ptr<Base[42]>, weak_ptr<Derived[42]>>);\r\n    }\r\n\r\n    void test() {\r\n        test_sfinae();\r\n    }\r\n} // namespace weak_ptr_\r\n\r\nint main() {\r\n    allocator<int> Alloc;\r\n\r\n    {\r\n        shared_ptr<int> sp1;\r\n        assert(!sp1 && !sp1.get() && sp1.use_count() == 0);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> sp2(nullptr);\r\n        assert(!sp2 && !sp2.get() && sp2.use_count() == 0);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> sp3(static_cast<int*>(nullptr));\r\n        assert(!sp3 && !sp3.get() && sp3.use_count() == 1);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> sp4(static_cast<int*>(nullptr), Del);\r\n        assert(!sp4 && !sp4.get() && sp4.use_count() == 1);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> sp5(static_cast<int*>(nullptr), Del, Alloc);\r\n        assert(!sp5 && !sp5.get() && sp5.use_count() == 1);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> sp6(new int(11));\r\n        assert(sp6 && sp6.get() && sp6.use_count() == 1);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> sp7(new int(22), Del);\r\n        assert(sp7 && sp7.get() && sp7.use_count() == 1);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> sp8(new int(33), Del, Alloc);\r\n        assert(sp8 && sp8.get() && sp8.use_count() == 1);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> sp9(nullptr, Del);\r\n        assert(!sp9 && !sp9.get() && sp9.use_count() == 1);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> sp10(nullptr, Del, Alloc);\r\n        assert(!sp10 && !sp10.get() && sp10.use_count() == 1);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> empty;\r\n        shared_ptr<int> sp11(empty, static_cast<int*>(nullptr));\r\n        assert(!empty && !empty.get() && empty.use_count() == 0);\r\n        assert(!sp11 && !sp11.get() && sp11.use_count() == 0);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> empty;\r\n        int n = 1729;\r\n        shared_ptr<int> sp12(empty, &n);\r\n        assert(!empty && !empty.get() && empty.use_count() == 0);\r\n        assert(sp12 && sp12.get() == &n && sp12.use_count() == 0);\r\n    }\r\n\r\n    {\r\n        shared_ptr<pair<int, int>> full(new pair<int, int>(11, 22));\r\n        shared_ptr<int> sp13(full, static_cast<int*>(nullptr));\r\n        assert(full && full.get() && full.use_count() == 2);\r\n        assert(!sp13 && !sp13.get() && sp13.use_count() == 2);\r\n    }\r\n\r\n    {\r\n        shared_ptr<pair<int, int>> full(new pair<int, int>(11, 22));\r\n        shared_ptr<int> sp14(full, &full->second);\r\n        assert(full && full.get() && full.use_count() == 2);\r\n        assert(sp14 && sp14.get() == &full->second && sp14.use_count() == 2);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> empty;\r\n        shared_ptr<int> sp15(empty);\r\n        assert(!empty && !empty.get() && empty.use_count() == 0);\r\n        assert(!sp15 && !sp15.get() && sp15.use_count() == 0);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> empty;\r\n        shared_ptr<const int> sp16(empty);\r\n        assert(!empty && !empty.get() && empty.use_count() == 0);\r\n        assert(!sp16 && !sp16.get() && sp16.use_count() == 0);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> empty;\r\n        shared_ptr<int> sp17(move(empty));\r\n        assert(!empty && !empty.get() && empty.use_count() == 0);\r\n        assert(!sp17 && !sp17.get() && sp17.use_count() == 0);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> empty;\r\n        shared_ptr<const int> sp18(move(empty));\r\n        assert(!empty && !empty.get() && empty.use_count() == 0);\r\n        assert(!sp18 && !sp18.get() && sp18.use_count() == 0);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> full(new int(1729));\r\n        shared_ptr<int> sp19(full);\r\n        assert(full && full.get() && full.use_count() == 2);\r\n        assert(sp19 && sp19.get() && sp19.use_count() == 2);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> full(new int(1729));\r\n        shared_ptr<const int> sp20(full);\r\n        assert(full && full.get() && full.use_count() == 2);\r\n        assert(sp20 && sp20.get() && sp20.use_count() == 2);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> full(new int(1729));\r\n        shared_ptr<int> sp21(move(full));\r\n        assert(!full && !full.get() && full.use_count() == 0);\r\n        assert(sp21 && sp21.get() && sp21.use_count() == 1);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> full(new int(1729));\r\n        shared_ptr<const int> sp22(move(full));\r\n        assert(!full && !full.get() && full.use_count() == 0);\r\n        assert(sp22 && sp22.get() && sp22.use_count() == 1);\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> orig(new int(1729));\r\n        weak_ptr<int> weak(orig);\r\n        shared_ptr<int> sp23(weak);\r\n        assert(orig && orig.get() && orig.use_count() == 2);\r\n        assert(sp23 && sp23.get() && sp23.use_count() == 2);\r\n    }\r\n\r\n#if _HAS_AUTO_PTR_ETC\r\n    {\r\n        auto_ptr<int> ap;\r\n        shared_ptr<int> sp24(move(ap));\r\n        assert(!ap.get());\r\n        assert(!sp24 && !sp24.get() && sp24.use_count() == 1);\r\n    }\r\n\r\n    {\r\n        auto_ptr<int> ap(new int(1729));\r\n        shared_ptr<int> sp25(move(ap));\r\n        assert(!ap.get());\r\n        assert(sp25 && sp25.get() && sp25.use_count() == 1);\r\n    }\r\n#endif // _HAS_AUTO_PTR_ETC\r\n\r\n    {\r\n        unique_ptr<int> up;\r\n        shared_ptr<int> sp26(move(up));\r\n        assert(!up && !up.get());\r\n        assert(!sp26 && !sp26.get() && sp26.use_count() == 0);\r\n    }\r\n\r\n    {\r\n        unique_ptr<int> up(new int(1729));\r\n        shared_ptr<int> sp27(move(up));\r\n        assert(!up && !up.get());\r\n        assert(sp27 && sp27.get() && sp27.use_count() == 1);\r\n    }\r\n\r\n    test_deleter();\r\n    test_exception();\r\n    test_sfinae();\r\n\r\n    pointer::test();\r\n    unique_ptr_::test();\r\n    weak_ptr_::test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_729003_bind_reference_wrapper/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_729003_bind_reference_wrapper/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\nstruct A {\r\n    string meow(int i) {\r\n        return \"A::meow(\" + to_string(i + 9 * 9 * 9) + \")\";\r\n    }\r\n};\r\n\r\nint main() {\r\n    A a;\r\n\r\n    auto f = bind(&A::meow, ref(a), 1000);\r\n\r\n    assert(f() == \"A::meow(1729)\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_766948_insert_ambiguity/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_766948_insert_ambiguity/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <map>\r\n#include <set>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n// Dev10-766948 \"STL: insert() ambiguity in all associative containers except map and set\"\r\n// LWG-2005 \"unordered_map::insert(T&&) protection should apply to map too\"\r\n// LWG-2354 \"Unnecessary copying when inserting into maps with braced-init syntax\"\r\n\r\ntemplate <typename C>\r\nvoid test_m() {\r\n    C src;\r\n    src[1] = 10;\r\n    src[2] = 20;\r\n    src[3] = 30;\r\n\r\n    C dest;\r\n    dest.insert(src.cbegin(), src.cend());\r\n\r\n    auto first = src.cbegin();\r\n    auto last  = src.cend();\r\n    dest.insert(first, last);\r\n\r\n    const pair<const int, int> p(4, 40);\r\n    assert(dest.insert(p).first->first == 4);\r\n    assert(dest.insert({5, 50}).first->first == 5);\r\n    assert(dest.insert(make_pair(6, 60)).first->first == 6);\r\n    const pair<const int, int> q(7, 70);\r\n    assert(dest.insert(dest.cbegin(), q)->first == 7);\r\n    assert(dest.insert(dest.cbegin(), {8, 80})->first == 8);\r\n    assert(dest.insert(dest.cbegin(), make_pair(9, 90))->first == 9);\r\n    dest.insert({{11, 111}, {22, 222}, {33, 333}});\r\n\r\n    const vector<pair<int, int>> actual(dest.cbegin(), dest.cend());\r\n    const vector<pair<int, int>> correct{{1, 10}, {2, 20}, {3, 30}, {4, 40}, {5, 50}, {6, 60}, {7, 70}, {8, 80},\r\n        {9, 90}, {11, 111}, {22, 222}, {33, 333}};\r\n    assert(is_permutation(actual.begin(), actual.end(), correct.begin(), correct.end()));\r\n}\r\n\r\ntemplate <typename C>\r\nvoid test_s() {\r\n    C src;\r\n    src.insert(1);\r\n    src.insert(2);\r\n    src.insert(3);\r\n\r\n    C dest;\r\n    dest.insert(src.cbegin(), src.cend());\r\n\r\n    auto first = src.cbegin();\r\n    auto last  = src.cend();\r\n    dest.insert(first, last);\r\n\r\n    const int x = 4;\r\n    assert(*dest.insert(x).first == 4);\r\n    assert(*dest.insert(5).first == 5);\r\n    const int y = 6;\r\n    assert(*dest.insert(dest.cbegin(), y) == 6);\r\n    assert(*dest.insert(dest.cbegin(), 7) == 7);\r\n    dest.insert({8, 9, 10});\r\n\r\n    const vector<int> correct{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};\r\n    assert(is_permutation(dest.cbegin(), dest.cend(), correct.begin(), correct.end()));\r\n}\r\n\r\ntemplate <typename C>\r\nvoid test_mm() {\r\n    C src;\r\n    src.insert(make_pair(1, 10));\r\n    src.insert(make_pair(1, -10));\r\n    src.insert(make_pair(2, 20));\r\n    src.insert(make_pair(2, -20));\r\n    src.insert(make_pair(3, 30));\r\n    src.insert(make_pair(3, -30));\r\n\r\n    C dest;\r\n    dest.insert(src.cbegin(), src.cend());\r\n\r\n    auto first = src.cbegin();\r\n    auto last  = src.cend();\r\n    dest.insert(first, last);\r\n\r\n    const pair<const int, int> p(4, 40);\r\n    assert(dest.insert(p)->first == 4);\r\n    assert(dest.insert({5, 50})->first == 5);\r\n    assert(dest.insert(make_pair(6, 60))->first == 6);\r\n    const pair<const int, int> q(7, 70);\r\n    assert(dest.insert(dest.cbegin(), q)->first == 7);\r\n    assert(dest.insert(dest.cbegin(), {8, 80})->first == 8);\r\n    assert(dest.insert(dest.cbegin(), make_pair(9, 90))->first == 9);\r\n    dest.insert({{11, 111}, {22, 222}, {33, 333}});\r\n\r\n    const vector<pair<int, int>> actual(dest.cbegin(), dest.cend());\r\n    const vector<pair<int, int>> correct{{1, 10}, {1, 10}, {1, -10}, {1, -10}, {2, 20}, {2, 20}, {2, -20}, {2, -20},\r\n        {3, 30}, {3, 30}, {3, -30}, {3, -30}, {4, 40}, {5, 50}, {6, 60}, {7, 70}, {8, 80}, {9, 90}, {11, 111},\r\n        {22, 222}, {33, 333}};\r\n    assert(is_permutation(actual.begin(), actual.end(), correct.begin(), correct.end()));\r\n}\r\n\r\ntemplate <typename C>\r\nvoid test_ms() {\r\n    C src;\r\n    src.insert(1);\r\n    src.insert(1);\r\n    src.insert(2);\r\n    src.insert(2);\r\n    src.insert(3);\r\n    src.insert(3);\r\n\r\n    C dest;\r\n    dest.insert(src.cbegin(), src.cend());\r\n\r\n    auto first = src.cbegin();\r\n    auto last  = src.cend();\r\n    dest.insert(first, last);\r\n\r\n    const int x = 4;\r\n    assert(*dest.insert(x) == 4);\r\n    assert(*dest.insert(5) == 5);\r\n    const int y = 6;\r\n    assert(*dest.insert(dest.cbegin(), y) == 6);\r\n    assert(*dest.insert(dest.cbegin(), 7) == 7);\r\n    dest.insert({8, 9, 10});\r\n\r\n    const vector<int> correct{1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 5, 6, 7, 8, 9, 10};\r\n    assert(is_permutation(dest.cbegin(), dest.cend(), correct.begin(), correct.end()));\r\n}\r\n\r\nint main() {\r\n    test_m<map<int, int>>();\r\n    test_s<set<int>>();\r\n    test_mm<multimap<int, int>>();\r\n    test_ms<multiset<int>>();\r\n\r\n    test_m<unordered_map<int, int>>();\r\n    test_s<unordered_set<int>>();\r\n    test_mm<unordered_multimap<int, int>>();\r\n    test_ms<unordered_multiset<int>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_780098_movable_elements/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_780098_movable_elements/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <memory>\r\n#include <set>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nstruct UniqueHash {\r\n    size_t operator()(const unique_ptr<int>& p) const {\r\n        return hash<int*>()(p.get());\r\n    }\r\n};\r\n\r\ntemplate <typename C>\r\nint product(const C& c) {\r\n    int n = 1;\r\n\r\n    for (auto i = c.begin(); i != c.end(); ++i) {\r\n        n *= **i;\r\n    }\r\n\r\n    return n;\r\n}\r\n\r\ntemplate <typename C>\r\nvoid test(C& src) {\r\n    C x = move(src);\r\n\r\n    assert(product(x) == 7986);\r\n\r\n    C y;\r\n\r\n    y = move(x);\r\n\r\n    assert(product(y) == 7986);\r\n\r\n    typedef typename C::allocator_type A;\r\n\r\n    C z(move(y), A());\r\n\r\n    assert(product(z) == 7986);\r\n}\r\n\r\nint main() {\r\n    {\r\n        vector<unique_ptr<int>> v;\r\n        v.push_back(unique_ptr<int>(new int(11)));\r\n        v.push_back(unique_ptr<int>(new int(22)));\r\n        v.push_back(unique_ptr<int>(new int(33)));\r\n        test(v);\r\n\r\n        deque<unique_ptr<int>> d;\r\n        d.push_back(unique_ptr<int>(new int(11)));\r\n        d.push_back(unique_ptr<int>(new int(22)));\r\n        d.push_back(unique_ptr<int>(new int(33)));\r\n        test(d);\r\n\r\n        list<unique_ptr<int>> l;\r\n        l.push_back(unique_ptr<int>(new int(11)));\r\n        l.push_back(unique_ptr<int>(new int(22)));\r\n        l.push_back(unique_ptr<int>(new int(33)));\r\n        test(l);\r\n\r\n        set<unique_ptr<int>> s;\r\n        s.insert(unique_ptr<int>(new int(11)));\r\n        s.insert(unique_ptr<int>(new int(22)));\r\n        s.insert(unique_ptr<int>(new int(33)));\r\n        test(s);\r\n\r\n        unordered_set<unique_ptr<int>, UniqueHash> us;\r\n        us.insert(unique_ptr<int>(new int(11)));\r\n        us.insert(unique_ptr<int>(new int(22)));\r\n        us.insert(unique_ptr<int>(new int(33)));\r\n        test(us);\r\n\r\n        forward_list<unique_ptr<int>> fl;\r\n        fl.push_front(unique_ptr<int>(new int(11)));\r\n        fl.push_front(unique_ptr<int>(new int(22)));\r\n        fl.push_front(unique_ptr<int>(new int(33)));\r\n        test(fl);\r\n    }\r\n\r\n\r\n    {\r\n        vector<unique_ptr<int>> x;\r\n        x.push_back(unique_ptr<int>(new int(11)));\r\n        x.push_back(unique_ptr<int>(new int(22)));\r\n        x.push_back(unique_ptr<int>(new int(33)));\r\n\r\n        vector<unique_ptr<int>> y;\r\n        y.push_back(unique_ptr<int>(new int(44)));\r\n        y.push_back(unique_ptr<int>(new int(55)));\r\n\r\n        x.swap(y);\r\n\r\n        assert(x.size() == 2 && y.size() == 3 && *x.back() == 55 && *y.back() == 33);\r\n    }\r\n\r\n    {\r\n        deque<unique_ptr<int>> x;\r\n        x.push_back(unique_ptr<int>(new int(11)));\r\n        x.push_back(unique_ptr<int>(new int(22)));\r\n        x.push_back(unique_ptr<int>(new int(33)));\r\n\r\n        deque<unique_ptr<int>> y;\r\n        y.push_back(unique_ptr<int>(new int(44)));\r\n        y.push_back(unique_ptr<int>(new int(55)));\r\n\r\n        x.swap(y);\r\n\r\n        assert(x.size() == 2 && y.size() == 3 && *x.back() == 55 && *y.back() == 33);\r\n    }\r\n\r\n    {\r\n        list<unique_ptr<int>> x;\r\n        x.push_back(unique_ptr<int>(new int(11)));\r\n        x.push_back(unique_ptr<int>(new int(22)));\r\n        x.push_back(unique_ptr<int>(new int(33)));\r\n\r\n        list<unique_ptr<int>> y;\r\n        y.push_back(unique_ptr<int>(new int(44)));\r\n        y.push_back(unique_ptr<int>(new int(55)));\r\n\r\n        x.swap(y);\r\n\r\n        assert(x.size() == 2 && y.size() == 3 && *x.back() == 55 && *y.back() == 33);\r\n    }\r\n\r\n    {\r\n        set<unique_ptr<int>> x;\r\n        x.insert(unique_ptr<int>(new int(11)));\r\n        x.insert(unique_ptr<int>(new int(22)));\r\n        x.insert(unique_ptr<int>(new int(33)));\r\n\r\n        set<unique_ptr<int>> y;\r\n        y.insert(unique_ptr<int>(new int(44)));\r\n        y.insert(unique_ptr<int>(new int(55)));\r\n\r\n        x.swap(y);\r\n\r\n        assert(x.size() == 2 && y.size() == 3 && product(x) == 2420 && product(y) == 7986);\r\n    }\r\n\r\n    {\r\n        unordered_set<unique_ptr<int>, UniqueHash> x;\r\n        x.insert(unique_ptr<int>(new int(11)));\r\n        x.insert(unique_ptr<int>(new int(22)));\r\n        x.insert(unique_ptr<int>(new int(33)));\r\n\r\n        unordered_set<unique_ptr<int>, UniqueHash> y;\r\n        y.insert(unique_ptr<int>(new int(44)));\r\n        y.insert(unique_ptr<int>(new int(55)));\r\n\r\n        x.swap(y);\r\n\r\n        assert(x.size() == 2 && y.size() == 3 && product(x) == 2420 && product(y) == 7986);\r\n    }\r\n\r\n    {\r\n        forward_list<unique_ptr<int>> x;\r\n        x.push_front(unique_ptr<int>(new int(11)));\r\n        x.push_front(unique_ptr<int>(new int(22)));\r\n        x.push_front(unique_ptr<int>(new int(33)));\r\n\r\n        forward_list<unique_ptr<int>> y;\r\n        y.push_front(unique_ptr<int>(new int(44)));\r\n        y.push_front(unique_ptr<int>(new int(55)));\r\n\r\n        x.swap(y);\r\n\r\n        assert(distance(x.begin(), x.end()) == 2 && distance(y.begin(), y.end()) == 3 && *x.front() == 55\r\n               && *y.front() == 33);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_783436_rvalue_string_plus/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_783436_rvalue_string_plus/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\nstring meow() {\r\n    return \"MEOWMEOWMEOWMEOWMEOW\";\r\n}\r\n\r\nstring purr() {\r\n    return \"PURRPURRPURRPURRPURR\";\r\n}\r\n\r\nint main() {\r\n    const string s = \"lvalue\";\r\n\r\n    const string& r1 = s + meow();\r\n    const string& r2 = meow() + s;\r\n    const string& r3 = meow() + purr();\r\n    const string& r4 = \"cat\" + meow();\r\n    const string& r5 = 'x' + meow();\r\n    const string& r6 = meow() + \"dog\";\r\n    const string& r7 = meow() + 'y';\r\n\r\n    assert(r1 == \"lvalueMEOWMEOWMEOWMEOWMEOW\");\r\n    assert(r2 == \"MEOWMEOWMEOWMEOWMEOWlvalue\");\r\n    assert(r3 == \"MEOWMEOWMEOWMEOWMEOWPURRPURRPURRPURRPURR\");\r\n    assert(r4 == \"catMEOWMEOWMEOWMEOWMEOW\");\r\n    assert(r5 == \"xMEOWMEOWMEOWMEOWMEOW\");\r\n    assert(r6 == \"MEOWMEOWMEOWMEOWMEOWdog\");\r\n    assert(r7 == \"MEOWMEOWMEOWMEOWMEOWy\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_809142_copy_n_istream_iterator/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_809142_copy_n_istream_iterator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <memory>\r\n#include <sstream>\r\n#include <string>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nvoid assert_same(const vector<int>& v, const array<int, 9>& a) {\r\n    assert(equal(v.begin(), v.end(), a.begin(), a.end()));\r\n}\r\n\r\ntemplate <typename Container>\r\nvoid assert_zeroes(const Container& a) {\r\n    assert(all_of(a.begin(), a.end(), [](const auto& c) { return c == 0; }));\r\n}\r\n\r\n// Compile time test covers:\r\n// VSO-227957 - _Destroy_range fails to compile for iterator types\r\ntemplate <typename Container>\r\nvoid compile_time_test_impl() {\r\n    Container c{};\r\n    uninitialized_copy_n(begin(c), 1, begin(c));\r\n    uninitialized_copy(begin(c), end(c), begin(c));\r\n    uninitialized_fill(begin(c), end(c), typename Container::value_type{});\r\n    uninitialized_fill_n(begin(c), 1, typename Container::value_type{});\r\n}\r\n\r\nvoid compile_time_test() {\r\n    compile_time_test_impl<forward_list<int>>();\r\n    compile_time_test_impl<forward_list<string>>();\r\n    compile_time_test_impl<list<int>>();\r\n    compile_time_test_impl<list<string>>();\r\n    compile_time_test_impl<vector<int>>();\r\n    compile_time_test_impl<vector<string>>();\r\n}\r\n\r\nint main() {\r\n\r\n\r\n    {\r\n        istringstream iss(\"10 20 30 40 50 60 70 80 90\");\r\n\r\n\r\n        vector<int> v(9, 0);\r\n        assert_zeroes(v);\r\n\r\n        istream_iterator<int> isi(iss); // Load a fresh value into isi.\r\n\r\n        // should be no-ops\r\n        assert(copy_n(isi, -1, v.begin()) == v.begin());\r\n        assert(copy_n(isi, 0, v.begin()) == v.begin());\r\n\r\n        assert(copy_n(isi, 3, v.begin()) == v.begin() + 3);\r\n\r\n        {\r\n            const array<int, 9> arr = {{10, 20, 30, 0, 0, 0, 0, 0, 0}};\r\n            assert_same(v, arr);\r\n        }\r\n\r\n\r\n        ++isi; // Load a fresh value into isi.\r\n\r\n        assert(copy_n(isi, 2, v.begin() + 3) == v.begin() + 5);\r\n\r\n        {\r\n            const array<int, 9> arr = {{10, 20, 30, 40, 50, 0, 0, 0, 0}};\r\n            assert_same(v, arr);\r\n        }\r\n\r\n\r\n        ++isi; // Load a fresh value into isi.\r\n\r\n        assert(copy_n(isi, 1, v.begin() + 5) == v.begin() + 6);\r\n\r\n        {\r\n            const array<int, 9> arr = {{10, 20, 30, 40, 50, 60, 0, 0, 0}};\r\n            assert_same(v, arr);\r\n        }\r\n\r\n\r\n        ++isi; // Load a fresh value into isi.\r\n\r\n        assert(copy_n(isi, 0, v.begin() + 6) == v.begin() + 6);\r\n\r\n        {\r\n            const array<int, 9> arr = {{10, 20, 30, 40, 50, 60, 0, 0, 0}};\r\n            assert_same(v, arr);\r\n        }\r\n\r\n\r\n        // A fresh value has already been loaded into isi.\r\n\r\n        assert(copy_n(isi, 3, v.begin() + 6) == v.end());\r\n\r\n        {\r\n            const array<int, 9> arr = {{10, 20, 30, 40, 50, 60, 70, 80, 90}};\r\n            assert_same(v, arr);\r\n        }\r\n    }\r\n\r\n    // Note: uninitialized_copy_n is required to increment the input N times\r\n    // see LWG-2471\r\n    {\r\n        istringstream iss(\"10 20 30 40 50 60 70 80 90 100 110 120\");\r\n\r\n\r\n        vector<int> v(9, 0);\r\n        assert_zeroes(v);\r\n\r\n        istream_iterator<int> isi(iss); // Load a fresh value into isi.\r\n\r\n        // should be no-ops\r\n        assert(uninitialized_copy_n(isi, -1, v.begin()) == v.begin());\r\n        assert(uninitialized_copy_n(isi, 0, v.begin()) == v.begin());\r\n\r\n        assert(uninitialized_copy_n(isi, 3, v.begin()) == v.begin() + 3);\r\n\r\n        {\r\n            const array<int, 9> arr = {{10, 20, 30, 0, 0, 0, 0, 0, 0}};\r\n            assert_same(v, arr);\r\n        }\r\n\r\n\r\n        ++isi; // Load a fresh value into isi.\r\n\r\n        assert(uninitialized_copy_n(isi, 2, v.begin() + 3) == v.begin() + 5);\r\n\r\n        {\r\n            const array<int, 9> arr = {{10, 20, 30, 50, 60, 0, 0, 0, 0}};\r\n            assert_same(v, arr);\r\n        }\r\n\r\n\r\n        ++isi; // Load a fresh value into isi.\r\n\r\n        assert(uninitialized_copy_n(isi, 1, v.begin() + 5) == v.begin() + 6);\r\n\r\n        {\r\n            const array<int, 9> arr = {{10, 20, 30, 50, 60, 80, 0, 0, 0}};\r\n            assert_same(v, arr);\r\n        }\r\n\r\n\r\n        ++isi; // Load a fresh value into isi.\r\n\r\n        assert(uninitialized_copy_n(isi, 0, v.begin() + 6) == v.begin() + 6);\r\n\r\n        {\r\n            const array<int, 9> arr = {{10, 20, 30, 50, 60, 80, 0, 0, 0}};\r\n            assert_same(v, arr);\r\n        }\r\n\r\n\r\n        // A fresh value has already been loaded into isi.\r\n\r\n        assert(uninitialized_copy_n(isi, 3, v.begin() + 6) == v.end());\r\n\r\n        {\r\n            const array<int, 9> arr = {{10, 20, 30, 50, 60, 80, 100, 110, 120}};\r\n            assert_same(v, arr);\r\n        }\r\n    }\r\n\r\n    // Verify that negative counts are handled properly\r\n    {\r\n        // engage memmove case\r\n        const array<int, 9> arr = {{10, 20, 30, 50, 60, 80, 100, 110, 120}};\r\n        array<int, 9> dest{};\r\n\r\n        assert(copy_n(arr.begin(), 0, dest.begin()) == dest.begin());\r\n        assert_zeroes(dest);\r\n        assert(copy_n(arr.begin(), -1, dest.begin()) == dest.begin());\r\n        assert_zeroes(dest);\r\n\r\n        assert(uninitialized_copy_n(arr.begin(), 0, dest.begin()) == dest.begin());\r\n        assert_zeroes(dest);\r\n        assert(uninitialized_copy_n(arr.begin(), -1, dest.begin()) == dest.begin());\r\n        assert_zeroes(dest);\r\n\r\n        // forward iterator case\r\n        forward_list<int> empty_flist;\r\n        // following would trigger iterator debug checks in the bad case\r\n        assert(copy_n(empty_flist.begin(), -1, dest.begin()) == dest.begin());\r\n        assert(copy_n(empty_flist.begin(), 0, dest.begin()) == dest.begin());\r\n        assert(uninitialized_copy_n(empty_flist.begin(), -1, dest.begin()) == dest.begin());\r\n        assert(uninitialized_copy_n(empty_flist.begin(), 0, dest.begin()) == dest.begin());\r\n\r\n\r\n        assert(fill_n(dest.begin(), 0, 42) == dest.begin());\r\n        assert_zeroes(dest);\r\n        assert(fill_n(dest.begin(), -1, 42) == dest.begin());\r\n        assert_zeroes(dest);\r\n\r\n        assert(uninitialized_fill_n(dest.begin(), 0, 42) == dest.begin());\r\n        assert_zeroes(dest);\r\n        assert(uninitialized_fill_n(dest.begin(), -1, 42) == dest.begin());\r\n        assert_zeroes(dest);\r\n\r\n        auto gen = []() -> int { abort(); };\r\n        assert(generate_n(dest.begin(), 0, gen) == dest.begin());\r\n        assert(generate_n(dest.begin(), -1, gen) == dest.begin());\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_814245_regex_character_class_crash/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\fast_no_asan_matrix.lst # TRANSITION, VSO-1886547\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_814245_regex_character_class_crash/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <regex>\r\n#include <string>\r\n\r\n#include <test_regex_support.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::regex_constants;\r\n\r\nregex_fixture g_regexTester;\r\n\r\nstring escape(const char c, const bool first) {\r\n    switch (c) {\r\n    case '^':\r\n        return first ? R\"(\\^)\" : \"^\";\r\n    case '\\\\':\r\n        return R\"(\\\\)\";\r\n    case ']':\r\n        return R\"(\\])\";\r\n    default:\r\n        return string(1, c);\r\n    }\r\n}\r\n\r\nconst size_t characterCount = 256;\r\nstring g_firstCharacters[characterCount];\r\nstring g_secondCharacters[characterCount];\r\nstring g_inputs[characterCount];\r\n\r\nvoid init_character_strings() {\r\n    for (size_t idx = 0; idx < characterCount; ++idx) {\r\n        g_firstCharacters[idx]  = \"[\" + escape(static_cast<char>(idx), true);\r\n        g_secondCharacters[idx] = escape(static_cast<char>(idx), false) + \"]\";\r\n        g_inputs[idx]           = string(1, static_cast<char>(idx));\r\n    }\r\n}\r\n\r\n// Tests a character class pattern.\r\n// `generator` is a functor taking a size_t lower and upper, and generates a\r\n// character class pattern for that range.\r\ntemplate <typename Functor>\r\nvoid test_ranges(const Functor& generator) {\r\n    for (size_t upper = 0; upper < characterCount; ++upper) {\r\n        for (size_t lower = 0; lower <= upper; ++lower) {\r\n            const string pattern(generator(lower, upper));\r\n            const regex r(pattern);\r\n            for (size_t c = 0; c < lower; ++c) {\r\n                g_regexTester.should_not_match(g_inputs[c], pattern, r);\r\n            }\r\n\r\n            for (size_t c = lower; c <= upper; ++c) {\r\n                g_regexTester.should_match(g_inputs[c], pattern, r);\r\n            }\r\n\r\n            for (size_t c = upper + 1; c < characterCount; ++c) {\r\n                g_regexTester.should_not_match(g_inputs[c], pattern, r);\r\n            }\r\n        }\r\n\r\n        for (size_t lower = upper + 1; lower < characterCount; ++lower) {\r\n            g_regexTester.should_throw(generator(lower, upper), error_range);\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_dev10_814245_character_class_should_not_crash() {\r\n    test_ranges([](size_t lower, size_t upper) { return g_firstCharacters[lower] + \"-\" + g_secondCharacters[upper]; });\r\n}\r\n\r\nvoid test_dev10_723057_normal_to_high_bit_ranges_should_not_throw_error_range() {\r\n    test_ranges([](size_t lower, size_t upper) {\r\n        char buf[12] = {};\r\n        sprintf_s(buf, R\"([\\x%02zX-\\x%02zX])\", lower, upper);\r\n        return string(buf);\r\n    });\r\n}\r\n\r\nvoid test_VSO_153556_singular_classes_can_have_high_bit_set() {\r\n    for (size_t cReg = 0; cReg < characterCount; ++cReg) {\r\n        string pattern(g_firstCharacters[cReg]);\r\n        pattern.push_back(']');\r\n        const regex r(pattern);\r\n        for (size_t cInput = 0; cInput < cReg; ++cInput) {\r\n            g_regexTester.should_not_match(g_inputs[cInput], pattern, r);\r\n        }\r\n\r\n        g_regexTester.should_match(g_inputs[cReg], pattern, r);\r\n\r\n        for (size_t cInput = cReg + 1; cInput < characterCount; ++cInput) {\r\n            g_regexTester.should_not_match(g_inputs[cInput], pattern, r);\r\n        }\r\n    }\r\n}\r\n\r\n// Also test VSO-984741 \"Splitting a string with a regex returns seemingly wrong results\"\r\nvoid test_VSO_984741_splitting_a_string_with_a_regex() {\r\n    // We were skipping a non-match character after a zero-length match to avoid repeat matches, resulting in incorrect\r\n    // behavior when tokenizing with a regex to match the delimiters between tokens.\r\n\r\n    const string text = \"cute fluffy\\t zombie-kittens\";\r\n    const regex boundary{R\"(\\s*\\b\\s*)\"};\r\n    static constexpr const char* tokens[] = {\"\", \"cute\", \"\", \"fluffy\", \"\", \"zombie\", \"-\", \"kittens\"};\r\n\r\n    const sregex_token_iterator i{text.begin(), text.end(), boundary, -1};\r\n    assert(equal(i, sregex_token_iterator{}, begin(tokens), end(tokens)));\r\n}\r\n\r\nvoid test_gh_5164_case_insensitive_ranges() {\r\n    using ch_traits = char_traits<char>;\r\n    const regex_traits<char> re_traits;\r\n    for (size_t upper = 0; upper < characterCount; ++upper) {\r\n        for (size_t lower = 0; lower < characterCount; ++lower) {\r\n            const string pattern(g_firstCharacters[lower] + \"-\" + g_secondCharacters[upper]);\r\n            const char left_bound  = re_traits.translate_nocase(g_inputs[lower][0]);\r\n            const char right_bound = re_traits.translate_nocase(g_inputs[upper][0]);\r\n\r\n            if (ch_traits::lt(right_bound, left_bound)) {\r\n                g_regexTester.should_throw(pattern, error_range, icase);\r\n            } else {\r\n                const regex r(pattern, icase);\r\n                for (size_t c = 0; c < characterCount; ++c) {\r\n                    const char input_icase = re_traits.translate_nocase(g_inputs[c][0]);\r\n                    if (ch_traits::lt(input_icase, left_bound) || ch_traits::lt(right_bound, input_icase)) {\r\n                        g_regexTester.should_not_match(g_inputs[c], pattern, r);\r\n                    } else {\r\n                        g_regexTester.should_match(g_inputs[c], pattern, r);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nint main() {\r\n    init_character_strings();\r\n    test_dev10_814245_character_class_should_not_crash();\r\n    test_dev10_723057_normal_to_high_bit_ranges_should_not_throw_error_range();\r\n    test_VSO_153556_singular_classes_can_have_high_bit_set();\r\n    test_VSO_984741_splitting_a_string_with_a_regex();\r\n    test_gh_5164_case_insensitive_ranges();\r\n\r\n    return g_regexTester.result();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_816787_swap_vector_bool_elements/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_816787_swap_vector_bool_elements/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// This test was extended with functionality needed for\r\n// P3612R1: Harmonize Proxy-Reference Operations\r\n\r\n#include <algorithm>\r\n#include <bitset>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nstatic const auto is_true  = [](bool b) { return b; };\r\nstatic const auto is_false = [](bool b) { return !b; };\r\n\r\nvoid check_values_match() {\r\n    vector<bool> x(100, false);\r\n    vector<bool> y(100, true);\r\n\r\n    assert(all_of(x.begin(), x.end(), is_false));\r\n    assert(all_of(y.begin(), y.end(), is_true));\r\n\r\n    swap(x[12], y[34]);\r\n\r\n    assert(all_of(x.begin(), x.begin() + 12, is_false));\r\n    assert(x[12]);\r\n    assert(all_of(x.begin() + 13, x.end(), is_false));\r\n\r\n    assert(all_of(y.begin(), y.begin() + 34, is_true));\r\n    assert(!y[34]);\r\n    assert(all_of(y.begin() + 35, y.end(), is_true));\r\n}\r\n\r\ntemplate <class T>\r\nvoid check_P3612(T& collection) {\r\n    auto ref0       = collection[0];\r\n    const auto ref1 = collection[1];\r\n    auto ref2       = collection[2];\r\n\r\n    // assignments from bool\r\n    ref0 = true;\r\n    ref1 = true;\r\n    assert(collection[0]);\r\n    assert(collection[1]);\r\n\r\n    ref0 = false;\r\n    ref1 = false;\r\n    assert(!collection[0]);\r\n    assert(!collection[1]);\r\n\r\n    // assignments from reference\r\n    ref2 = true;\r\n    ref0 = ref2;\r\n    ref1 = ref2;\r\n    assert(collection[0]);\r\n    assert(collection[1]);\r\n\r\n    ref2 = false;\r\n    ref0 = ref2;\r\n    ref1 = ref2;\r\n    assert(!collection[0]);\r\n    assert(!collection[1]);\r\n\r\n    collection[0] = true;\r\n    collection[1] = false;\r\n\r\n    swap(collection[0], collection[1]); // swap(reference, reference)\r\n    assert(!collection[0]);\r\n    assert(collection[1]);\r\n\r\n    bool b = true;\r\n    swap(collection[0], b); // swap(reference, bool)\r\n    assert(collection[0]);\r\n    assert(!b);\r\n\r\n    swap(b, collection[0]); // swap(bool, reference)\r\n    assert(!collection[0]);\r\n    assert(b);\r\n}\r\n\r\nint main() {\r\n    check_values_match();\r\n\r\n    constexpr size_t N = 10;\r\n    vector<bool> vb(N);\r\n    bitset<N> bs(0);\r\n\r\n    check_P3612(vb);\r\n    check_P3612(bs);\r\n\r\n    static_assert(is_nothrow_copy_constructible_v<vector<bool>::reference>, \"\");\r\n    static_assert(is_nothrow_copy_constructible_v<bitset<N>::reference>, \"\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_847656_shared_ptr_is_convertible/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_847656_shared_ptr_is_convertible/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n\r\nusing namespace std;\r\n\r\nclass Cat {\r\npublic:\r\n    Cat() {}\r\n    virtual int meow() const = 0;\r\n    virtual ~Cat() {}\r\n\r\nprivate:\r\n    Cat(const Cat&);\r\n    Cat& operator=(const Cat&);\r\n};\r\n\r\nstruct Lion : public Cat {\r\n    int meow() const override {\r\n        return 6;\r\n    }\r\n};\r\n\r\nstruct Tiger : public Cat {\r\n    int meow() const override {\r\n        return 7;\r\n    }\r\n};\r\n\r\n\r\nclass Planet {\r\npublic:\r\n    Planet() {}\r\n    virtual int orbit() const = 0;\r\n    virtual ~Planet() {}\r\n\r\nprivate:\r\n    Planet(const Planet&);\r\n    Planet& operator=(const Planet&);\r\n};\r\n\r\nstruct Jupiter : public Planet {\r\n    int orbit() const override {\r\n        return 8;\r\n    }\r\n};\r\n\r\nstruct Saturn : public Planet {\r\n    int orbit() const override {\r\n        return 9;\r\n    }\r\n};\r\n\r\n\r\nint function_taking_shared(const shared_ptr<Cat>& p) {\r\n    return p->meow() * 10 + 1;\r\n}\r\n\r\nint function_taking_shared(const shared_ptr<Planet>& p) {\r\n    return p->orbit() * 10 + 2;\r\n}\r\n\r\n\r\nint function_taking_weak(const weak_ptr<Cat>& p) {\r\n    return p.lock()->meow() * 10 + 3;\r\n}\r\n\r\nint function_taking_weak(const weak_ptr<Planet>& p) {\r\n    return p.lock()->orbit() * 10 + 4;\r\n}\r\n\r\n\r\nint main() {\r\n    shared_ptr<Lion> sp1(new Lion);\r\n    shared_ptr<Tiger> sp2(new Tiger);\r\n    shared_ptr<Jupiter> sp3(new Jupiter);\r\n    shared_ptr<Saturn> sp4(new Saturn);\r\n\r\n    // Test shared_ptr(const shared_ptr<Y>&)\r\n    assert(function_taking_shared(sp1) == 61);\r\n    assert(function_taking_shared(sp2) == 71);\r\n    assert(function_taking_shared(sp3) == 82);\r\n    assert(function_taking_shared(sp4) == 92);\r\n\r\n    // Test shared_ptr(shared_ptr<Y>&&)\r\n    assert(function_taking_shared(make_shared<Lion>()) == 61);\r\n    assert(function_taking_shared(make_shared<Tiger>()) == 71);\r\n    assert(function_taking_shared(make_shared<Jupiter>()) == 82);\r\n    assert(function_taking_shared(make_shared<Saturn>()) == 92);\r\n\r\n    // Test shared_ptr(unique_ptr<Y, D>&&)\r\n    assert(function_taking_shared(make_unique<Lion>()) == 61);\r\n    assert(function_taking_shared(make_unique<Tiger>()) == 71);\r\n    assert(function_taking_shared(make_unique<Jupiter>()) == 82);\r\n    assert(function_taking_shared(make_unique<Saturn>()) == 92);\r\n\r\n    // Test weak_ptr(const shared_ptr<Y>&)\r\n    assert(function_taking_weak(sp1) == 63);\r\n    assert(function_taking_weak(sp2) == 73);\r\n    assert(function_taking_weak(sp3) == 84);\r\n    assert(function_taking_weak(sp4) == 94);\r\n\r\n    weak_ptr<Lion> wp1    = sp1;\r\n    weak_ptr<Tiger> wp2   = sp2;\r\n    weak_ptr<Jupiter> wp3 = sp3;\r\n    weak_ptr<Saturn> wp4  = sp4;\r\n\r\n    // Test weak_ptr(const weak_ptr<Y>&)\r\n    assert(function_taking_weak(wp1) == 63);\r\n    assert(function_taking_weak(wp2) == 73);\r\n    assert(function_taking_weak(wp3) == 84);\r\n    assert(function_taking_weak(wp4) == 94);\r\n\r\n    // Test weak_ptr(weak_ptr<Y>&&)\r\n    assert(function_taking_weak(weak_ptr<Lion>(sp1)) == 63);\r\n    assert(function_taking_weak(weak_ptr<Tiger>(sp2)) == 73);\r\n    assert(function_taking_weak(weak_ptr<Jupiter>(sp3)) == 84);\r\n    assert(function_taking_weak(weak_ptr<Saturn>(sp4)) == 94);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_851347_weak_ptr_virtual_inheritance/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_851347_weak_ptr_virtual_inheritance/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <utility>\r\n\r\n#ifndef _M_CEE_PURE // in /clr:pure we miss runtime coverage of weak_ptr converting constructor\r\n#include <atomic>\r\n#include <thread>\r\n#endif // _M_CEE_PURE\r\n\r\nusing namespace std;\r\n\r\n// Also test GH-1102 \"<memory>: weak_ptr conversions don't preserve control blocks for expired objects\"\r\ntemplate <typename T, typename U>\r\n[[nodiscard]] bool owner_equal(const weak_ptr<T>& t, const weak_ptr<U>& u) {\r\n    return !t.owner_before(u) && !u.owner_before(t);\r\n}\r\n\r\nvoid test_owner_equal() {\r\n    shared_ptr<int> sp_alive1(new int(0));\r\n    shared_ptr<int> sp_alive2(new int(0));\r\n    shared_ptr<int> sp_expiring3(new int(0));\r\n    shared_ptr<int> sp_expiring4(new int(0));\r\n\r\n    weak_ptr<int> wp_empty;\r\n    weak_ptr<int> wp_also_empty;\r\n\r\n    weak_ptr<int> wp_alive(sp_alive1);\r\n    weak_ptr<int> wp_alive_same(sp_alive1);\r\n    weak_ptr<int> wp_alive_different(sp_alive2);\r\n\r\n    weak_ptr<int> wp_expired(sp_expiring3);\r\n    weak_ptr<int> wp_expired_same(sp_expiring3);\r\n    weak_ptr<int> wp_expired_different(sp_expiring4);\r\n\r\n    sp_expiring3.reset();\r\n    sp_expiring4.reset();\r\n\r\n    assert(wp_empty.expired());\r\n    assert(wp_also_empty.expired());\r\n\r\n    assert(!wp_alive.expired());\r\n    assert(!wp_alive_same.expired());\r\n    assert(!wp_alive_different.expired());\r\n\r\n    assert(wp_expired.expired());\r\n    assert(wp_expired_same.expired());\r\n    assert(wp_expired_different.expired());\r\n\r\n    assert(owner_equal(wp_empty, wp_also_empty));\r\n\r\n    assert(!owner_equal(wp_empty, wp_alive));\r\n    assert(!owner_equal(wp_empty, wp_expired));\r\n\r\n    assert(!owner_equal(wp_alive, wp_empty));\r\n    assert(!owner_equal(wp_expired, wp_empty));\r\n\r\n    assert(owner_equal(wp_alive, wp_alive_same));\r\n    assert(owner_equal(wp_expired, wp_expired_same));\r\n\r\n    assert(!owner_equal(wp_alive, wp_alive_different));\r\n    assert(!owner_equal(wp_alive, wp_expired));\r\n    assert(!owner_equal(wp_expired, wp_alive));\r\n    assert(!owner_equal(wp_expired, wp_expired_different));\r\n}\r\n\r\nvoid test_gh_258() {\r\n    // GH-258 <memory>: weak_ptr's converting constructors could sometimes avoid locking\r\n#ifndef _M_CEE_PURE\r\n    struct base1 {\r\n        int i = 0;\r\n    };\r\n\r\n    struct base2 {\r\n        int j = 0;\r\n    };\r\n\r\n    struct base3 {\r\n        int k = 0;\r\n    };\r\n\r\n    struct derived : virtual base1, virtual base2, base3 {};\r\n\r\n    static_assert(weak_ptr<base1>::_Must_avoid_expired_conversions_from<derived>, \"Should avoid expired\");\r\n    static_assert(weak_ptr<base2>::_Must_avoid_expired_conversions_from<derived>, \"Should avoid expired\");\r\n    static_assert(weak_ptr<const base1>::_Must_avoid_expired_conversions_from<derived>, \"Should avoid expired\");\r\n    static_assert(weak_ptr<const base2>::_Must_avoid_expired_conversions_from<derived>, \"Should avoid expired\");\r\n    static_assert(weak_ptr<const base1>::_Must_avoid_expired_conversions_from<const derived>, \"Should avoid expired\");\r\n    static_assert(weak_ptr<const base2>::_Must_avoid_expired_conversions_from<const derived>, \"Should avoid expired\");\r\n\r\n    static_assert(!weak_ptr<base3>::_Must_avoid_expired_conversions_from<derived>, \"Should optimize\");\r\n    static_assert(!weak_ptr<const base3>::_Must_avoid_expired_conversions_from<derived>, \"Should optimize\");\r\n    static_assert(!weak_ptr<const base3>::_Must_avoid_expired_conversions_from<const derived>, \"Should optimize\");\r\n    static_assert(!weak_ptr<derived>::_Must_avoid_expired_conversions_from<derived>, \"Should optimize\");\r\n    static_assert(!weak_ptr<const derived>::_Must_avoid_expired_conversions_from<derived>, \"Should optimize\");\r\n    static_assert(!weak_ptr<const derived>::_Must_avoid_expired_conversions_from<const derived>, \"Should optimize\");\r\n\r\n    static_assert(!weak_ptr<int>::_Must_avoid_expired_conversions_from<int>, \"Should optimize\");\r\n    static_assert(!weak_ptr<const int>::_Must_avoid_expired_conversions_from<int>, \"Should optimize\");\r\n    static_assert(!weak_ptr<const int>::_Must_avoid_expired_conversions_from<const int>, \"Should optimize\");\r\n\r\n    for (int i = 0; i < 10; ++i) {\r\n        // not make_shared -- with make_shared the test would not catch errors\r\n        shared_ptr<derived> d{new derived{}};\r\n        weak_ptr<derived> wd{d};\r\n        atomic<bool> work{true};\r\n        thread thd{[&] {\r\n            d.reset();\r\n            this_thread::yield(); // make crash on incorrect optimization even more likely\r\n            work = false;\r\n        }};\r\n\r\n        if ((i % 2) == 0) {\r\n            while (work) {\r\n                // likely to crash if optimized for a case we shouldn't\r\n                weak_ptr<base1> wb1{wd};\r\n                weak_ptr<base2> wb2{wd};\r\n                weak_ptr<const base3> wb3{wd};\r\n            }\r\n        } else {\r\n            while (work) {\r\n                // likely to crash if optimized for a case we shouldn't\r\n                weak_ptr<base1> wb1{weak_ptr<derived>{wd}};\r\n                weak_ptr<base2> wb2{weak_ptr<derived>{wd}};\r\n                weak_ptr<base3> wb3{weak_ptr<derived>{wd}};\r\n            }\r\n        }\r\n\r\n        thd.join();\r\n    }\r\n#endif // _M_CEE_PURE\r\n}\r\n\r\nstruct A {\r\n    int a{10};\r\n};\r\n\r\nstruct B : virtual A {\r\n    int b{20};\r\n};\r\n\r\nstruct C : virtual A {\r\n    int c{30};\r\n};\r\n\r\nstruct D : B, C {\r\n    int d{40};\r\n};\r\n\r\nint main() {\r\n    test_owner_equal();\r\n    test_gh_258();\r\n\r\n    shared_ptr<D> spd(new D);\r\n\r\n    const weak_ptr<D> wpd_zero(spd);\r\n    weak_ptr<D> wpd_one(spd);\r\n    weak_ptr<D> wpd_two(spd);\r\n\r\n    weak_ptr<A> wpa0(wpd_zero);\r\n    assert(!wpa0.expired());\r\n    assert(owner_equal(wpa0, wpd_zero));\r\n    assert(wpa0.lock()->a == 10);\r\n\r\n    spd.reset();\r\n\r\n    weak_ptr<A> wpa1(wpd_one);\r\n    assert(wpa1.expired());\r\n    assert(owner_equal(wpa1, wpd_zero));\r\n\r\n    weak_ptr<A> wpa2;\r\n    wpa2 = wpd_one;\r\n    assert(wpa2.expired());\r\n    assert(owner_equal(wpa2, wpd_zero));\r\n\r\n    weak_ptr<A> wpa3(move(wpd_one));\r\n    assert(wpa3.expired());\r\n    assert(owner_equal(wpa3, wpd_zero));\r\n\r\n    weak_ptr<A> wpa4;\r\n    wpa4 = move(wpd_two);\r\n    assert(wpa4.expired());\r\n    assert(owner_equal(wpa4, wpd_zero));\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_860410_bitset_ctors/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_860410_bitset_ctors/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <bitset>\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <stdexcept>\r\n#include <string>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n// Also test LWG-4140 \"Useless default constructors for bit reference types\" for bitset<N>::reference.\r\nnamespace lwg_4140 {\r\n    struct default_constructible_type {};\r\n\r\n    void test_default_constructor(default_constructible_type) {}\r\n    void test_default_constructor(bitset<0>::reference) {}\r\n    void test_default_constructor(bitset<1>::reference) {}\r\n    void test_default_constructor(bitset<8>::reference) {}\r\n    void test_default_constructor(bitset<16>::reference) {}\r\n    void test_default_constructor(bitset<32>::reference) {}\r\n    void test_default_constructor(bitset<48>::reference) {}\r\n    void test_default_constructor(bitset<64>::reference) {}\r\n    void test_default_constructor(bitset<96>::reference) {}\r\n\r\n    void test() { // COMPILE-ONLY\r\n        test_default_constructor({});\r\n    }\r\n} // namespace lwg_4140\r\n\r\n// Also test LWG-4294 \"bitset(const CharT*) constructor needs to be constrained\".\r\n\r\ntemplate <size_t Len, class Elem, bool Expected>\r\nvoid test_ntcts_constructibility_single() { // COMPILE-ONLY\r\n    STATIC_ASSERT(is_constructible_v<bitset<Len>, Elem*, size_t, Elem, Elem> == Expected);\r\n    STATIC_ASSERT(is_constructible_v<bitset<Len>, const Elem*, size_t, Elem, Elem> == Expected);\r\n    // the constructor is explicit\r\n    STATIC_ASSERT(!is_convertible_v<Elem*, bitset<Len>>);\r\n    STATIC_ASSERT(!is_convertible_v<const Elem*, bitset<Len>>);\r\n}\r\n\r\ntemplate <class Elem, bool Expected>\r\nvoid test_ntcts_constructibility_for_lengths() { // COMPILE-ONLY\r\n    test_ntcts_constructibility_single<0, Elem, Expected>();\r\n    test_ntcts_constructibility_single<1, Elem, Expected>();\r\n    test_ntcts_constructibility_single<8, Elem, Expected>();\r\n    test_ntcts_constructibility_single<16, Elem, Expected>();\r\n    test_ntcts_constructibility_single<32, Elem, Expected>();\r\n    test_ntcts_constructibility_single<48, Elem, Expected>();\r\n    test_ntcts_constructibility_single<64, Elem, Expected>();\r\n    test_ntcts_constructibility_single<96, Elem, Expected>();\r\n}\r\n\r\nvoid test_ntcts_constructibility() { // COMPILE-ONLY\r\n    // test encoded character types (expected usages)\r\n    test_ntcts_constructibility_for_lengths<char, true>();\r\n#ifdef __cpp_char8_t\r\n    test_ntcts_constructibility_for_lengths<char8_t, true>();\r\n#endif // __cpp_char8_t\r\n    test_ntcts_constructibility_for_lengths<char16_t, true>();\r\n    test_ntcts_constructibility_for_lengths<char32_t, true>();\r\n    test_ntcts_constructibility_for_lengths<wchar_t, true>();\r\n\r\n    enum unscoped_enum {};\r\n    enum class scoped_enum {};\r\n\r\n    struct pod_class {\r\n        int n1;\r\n    };\r\n    struct missing_trivial_default_ctor {\r\n        int n2 = 42;\r\n    };\r\n    struct missing_standard_layout : pod_class {\r\n        int n3;\r\n    };\r\n    struct missing_trivially_copyable {\r\n        missing_trivially_copyable()                                             = default;\r\n        missing_trivially_copyable(const missing_trivially_copyable&)            = default;\r\n        missing_trivially_copyable(missing_trivially_copyable&&)                 = default;\r\n        missing_trivially_copyable& operator=(const missing_trivially_copyable&) = default;\r\n        constexpr missing_trivially_copyable& operator=(missing_trivially_copyable&&) noexcept {\r\n            return *this;\r\n        }\r\n        ~missing_trivially_copyable() = default;\r\n    };\r\n\r\n    // test scalar types\r\n    test_ntcts_constructibility_for_lengths<int, true>();\r\n    test_ntcts_constructibility_for_lengths<char*, true>();\r\n    test_ntcts_constructibility_for_lengths<void (*)(), true>();\r\n    test_ntcts_constructibility_for_lengths<unscoped_enum, true>();\r\n    test_ntcts_constructibility_for_lengths<scoped_enum, true>();\r\n    test_ntcts_constructibility_for_lengths<int missing_trivial_default_ctor::*, true>();\r\n    test_ntcts_constructibility_for_lengths<void (missing_standard_layout::*)() const&, true>();\r\n\r\n    // test POD array types\r\n    test_ntcts_constructibility_for_lengths<char[1], false>();\r\n    test_ntcts_constructibility_for_lengths<char[1][2], false>();\r\n#ifdef __cpp_char8_t\r\n    test_ntcts_constructibility_for_lengths<char8_t[2], false>();\r\n    test_ntcts_constructibility_for_lengths<char8_t[2][4], false>();\r\n#endif // __cpp_char8_t\r\n    test_ntcts_constructibility_for_lengths<char16_t[3], false>();\r\n    test_ntcts_constructibility_for_lengths<char16_t[3][6], false>();\r\n    test_ntcts_constructibility_for_lengths<char32_t[4], false>();\r\n    test_ntcts_constructibility_for_lengths<char32_t[4][8], false>();\r\n    test_ntcts_constructibility_for_lengths<wchar_t[5], false>();\r\n    test_ntcts_constructibility_for_lengths<wchar_t[5][10], false>();\r\n    test_ntcts_constructibility_for_lengths<int[6], false>();\r\n    test_ntcts_constructibility_for_lengths<int[6][12][3], false>();\r\n    test_ntcts_constructibility_for_lengths<char* [7], false>();\r\n    test_ntcts_constructibility_for_lengths<char* [7][1][2][14], false>();\r\n\r\n    // test class types\r\n    test_ntcts_constructibility_for_lengths<pod_class, true>();\r\n    test_ntcts_constructibility_for_lengths<missing_trivial_default_ctor, false>();\r\n    test_ntcts_constructibility_for_lengths<missing_standard_layout, false>();\r\n    test_ntcts_constructibility_for_lengths<missing_trivially_copyable, false>();\r\n\r\n    // test worse class types\r\n    test_ntcts_constructibility_for_lengths<string, false>();\r\n    test_ntcts_constructibility_for_lengths<invalid_argument, false>();\r\n}\r\n\r\nconst char parsedStr[] = \"1000110111110011110111111111111111010111110111100101010100001001\"\r\n                         \"1111111111111111111111111111111111111111111111111111111111111111\"\r\n                         \"0111111111111111111111111111111111111111111111111111111111111111\"\r\n                         \"1111111111111111111111111111111100000000000000000000000000000000\";\r\n\r\nstruct isZero {\r\n    bool operator()(const char c) const noexcept {\r\n        return c == '0';\r\n    }\r\n};\r\n\r\nvoid test_DevDiv917456();\r\nvoid test_DevDiv931383();\r\nvoid test_VSO_742338();\r\nvoid test_Getword();\r\n\r\nint main() {\r\n    {\r\n        bitset<5> b;\r\n\r\n        assert(b.to_string() == \"00000\");\r\n    }\r\n\r\n\r\n    {\r\n        bitset<5> b(23);\r\n\r\n        assert(b.to_string() == \"10111\");\r\n    }\r\n\r\n    {\r\n        bitset<5> b(29UL);\r\n\r\n        assert(b.to_string() == \"11101\");\r\n    }\r\n\r\n    {\r\n        bitset<5> b(25ULL);\r\n\r\n        assert(b.to_string() == \"11001\");\r\n    }\r\n\r\n\r\n    {\r\n        wstring w(L\"10011\");\r\n\r\n        bitset<5> b(w);\r\n\r\n        assert(b.to_string() == \"10011\");\r\n    }\r\n\r\n    {\r\n        wstring w(L\"zzz01000\");\r\n\r\n        bitset<5> b(w, 3);\r\n\r\n        assert(b.to_string() == \"01000\");\r\n    }\r\n\r\n    {\r\n        wstring w(L\"zzz00010zzz\");\r\n\r\n        bitset<5> b(w, 3, 5);\r\n\r\n        assert(b.to_string() == \"00010\");\r\n    }\r\n\r\n    {\r\n        wstring w(L\"zzz.11..zzz\");\r\n\r\n        bitset<5> b(w, 3, 5, L'.');\r\n\r\n        assert(b.to_string() == \"01100\");\r\n    }\r\n\r\n    {\r\n        wstring w(L\"zzz..!!.zzz\");\r\n\r\n        bitset<5> b(w, 3, 5, L'.', L'!');\r\n\r\n        assert(b.to_string() == \"00110\");\r\n    }\r\n\r\n\r\n    {\r\n        bitset<5> b(L\"10011\");\r\n\r\n        assert(b.to_string() == \"10011\");\r\n    }\r\n\r\n    {\r\n        const wchar_t* const ptr = L\"zzz01000\";\r\n\r\n        bitset<5> b(ptr + 3);\r\n\r\n        assert(b.to_string() == \"01000\");\r\n    }\r\n\r\n    {\r\n        const wchar_t* const ptr = L\"zzz00010zzz\";\r\n\r\n        bitset<5> b(ptr + 3, 5);\r\n\r\n        assert(b.to_string() == \"00010\");\r\n    }\r\n\r\n    {\r\n        const wchar_t* const ptr = L\"zzz.11..zzz\";\r\n\r\n        bitset<5> b(ptr + 3, 5, L'.');\r\n\r\n        assert(b.to_string() == \"01100\");\r\n    }\r\n\r\n    {\r\n        const wchar_t* const ptr = L\"zzz..!!.zzz\";\r\n\r\n        bitset<5> b(ptr + 3, 5, L'.', L'!');\r\n\r\n        assert(b.to_string() == \"00110\");\r\n    }\r\n\r\n    test_DevDiv917456();\r\n    test_DevDiv931383();\r\n    test_VSO_742338();\r\n    test_Getword();\r\n}\r\n\r\n// Also test DevDiv-917456 \"<bitset>: none() and any() return incorrect count after call set() function in a\r\n// std::bitset<0> object [libcxx]\".\r\nvoid test_bitset0(const bitset<0>& b) {\r\n    assert(b.to_ulong() == 0);\r\n    assert(b.to_ullong() == 0);\r\n    assert(b.to_string() == \"\");\r\n    assert(b.count() == 0);\r\n    assert(b.all());\r\n    assert(!b.any());\r\n    assert(b.none());\r\n}\r\n\r\nvoid test_DevDiv917456() {\r\n    {\r\n        bitset<0> b;\r\n        test_bitset0(b);\r\n    }\r\n\r\n    {\r\n        bitset<0> b;\r\n        b.set();\r\n        test_bitset0(b);\r\n    }\r\n\r\n    {\r\n        bitset<0> b;\r\n        b.reset();\r\n        test_bitset0(b);\r\n    }\r\n\r\n    {\r\n        bitset<0> b;\r\n        b.flip();\r\n        test_bitset0(b);\r\n    }\r\n\r\n    {\r\n        bitset<0> b(0xFFFFFFFFFFFFFFFFULL);\r\n        test_bitset0(b);\r\n    }\r\n}\r\n\r\n// Also test DevDiv-931383 \"<bitset>: We need to validate all characters and use traits::eq()\".\r\nvoid test(const string& str, const size_t pos, const size_t n, const string& expected) noexcept {\r\n    try {\r\n        bitset<8> b(str, pos, n, 'o', 'i');\r\n        assert(b.to_string() == expected);\r\n    } catch (const invalid_argument&) {\r\n        assert(expected == \"invalid_argument\");\r\n    } catch (const out_of_range&) {\r\n        assert(expected == \"out_of_range\");\r\n    }\r\n}\r\n\r\nvoid test_DevDiv931383() {\r\n    // N3936 20.6.1 [bitset.cons]/4: \"Throws: out_of_range if pos > str.size().\"\r\n    test(\"AAAA\", 5, 0, \"out_of_range\");\r\n\r\n    // /5: \"Effects: Determines the effective length rlen of the initializing string\r\n    // as the smaller of n and str.size() - pos. The function then throws invalid_argument\r\n    // if any of the rlen characters in str beginning at position pos is other than zero or one.\"\r\n    test(\"oiooiiioBBB\", 0, string::npos, \"invalid_argument\");\r\n\r\n    // \"Otherwise, the function constructs an object of class bitset<N>, initializing\r\n    // the first M bit positions to values determined from the corresponding characters\r\n    // in the string str. M is the smaller of N and rlen.\"\r\n    test(\"oiiiiiooiiiiCCC\", 0, 12, \"01111100\");\r\n    test(\"DDDoiooiiioEEE\", 3, 8, \"01001110\");\r\n\r\n    // /6-7: \"Character position pos + M - 1 corresponds to bit position zero.\r\n    // Subsequent decreasing character positions correspond to increasing bit positions.\r\n    // If M < N, remaining bit positions are initialized to zero.\"\r\n    test(\"FFiioiiiGG\", 2, 6, \"00110111\");\r\n}\r\n\r\n// Also test Dev10-479284 \"C6326 when running static analysis with <bitset>\".\r\ntemplate class std::bitset<7>;\r\ntemplate class std::bitset<32>;\r\n\r\ntemplate class std::bitset<47>;\r\ntemplate class std::bitset<64>;\r\n\r\ntemplate class std::bitset<1729>;\r\ntemplate class std::bitset<2048>;\r\n\r\ntemplate <size_t bitsetBits>\r\nvoid test_VSO_742338_case(size_t useLength) {\r\n    // This tests for a case where a bitset which needs multiple words internally reversed the order of those words.\r\n    const bitset<bitsetBits> bits(parsedStr, useLength);\r\n    auto asStr          = bits.to_string();\r\n    const auto division = asStr.begin() + static_cast<ptrdiff_t>(bitsetBits - useLength);\r\n    assert(all_of(asStr.begin(), division, isZero{}));\r\n    assert(equal(division, asStr.end(), parsedStr));\r\n    reverse(asStr.begin(), asStr.end());\r\n    for (size_t idx = 0; idx < useLength; ++idx) {\r\n        assert(bits[idx] == (asStr[idx] == '1'));\r\n    }\r\n    for (size_t idx = useLength; idx < bitsetBits; ++idx) {\r\n        assert(!bits[idx]);\r\n    }\r\n}\r\n\r\nvoid test_VSO_742338() {\r\n    for (size_t idx = 0; idx <= 25; ++idx) {\r\n        test_VSO_742338_case<25>(idx);\r\n    }\r\n\r\n    for (size_t idx = 0; idx <= 256; ++idx) {\r\n        test_VSO_742338_case<256>(idx);\r\n    }\r\n}\r\n\r\nvoid test_Getword() {\r\n    // Tests nonstandard extension _Getword which we provide for performance-sensitive scenarios where DirectX needed\r\n    // access to the array inside the bitset.\r\n    STATIC_ASSERT(is_same_v<unsigned long, decltype(bitset<16>{}._Getword(0))>);\r\n    STATIC_ASSERT(is_same_v<unsigned long, decltype(bitset<32>{}._Getword(0))>);\r\n    STATIC_ASSERT(is_same_v<unsigned long long, decltype(bitset<33>{}._Getword(0))>);\r\n    STATIC_ASSERT(is_same_v<unsigned long long, decltype(bitset<64>{}._Getword(0))>);\r\n    STATIC_ASSERT(is_same_v<unsigned long long, decltype(bitset<65>{}._Getword(0))>);\r\n    const bitset<16> bits16(parsedStr);\r\n    assert(bits16._Getword(0) == 36339ul);\r\n    const bitset<256> bits256(parsedStr);\r\n    assert(bits256._Getword(0) == 18446744069414584320ull);\r\n    assert(bits256._Getword(1) == 9223372036854775807ull);\r\n    assert(bits256._Getword(2) == 18446744073709551615ull);\r\n    assert(bits256._Getword(3) == 10228765468619855113ull);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_860421_deque_push_back_pop_front/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_860421_deque_push_back_pop_front/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <deque>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nvoid test_push_back_pop_front() {\r\n    deque<int> d;\r\n\r\n    for (int n = 0; n < 1000; ++n) {\r\n        d.push_back(n);\r\n\r\n        if (d.size() < 26) {\r\n            continue;\r\n        }\r\n\r\n        vector<deque<int>::iterator> v;\r\n\r\n        for (deque<int>::iterator i = d.begin() + 1; i != d.end(); ++i) {\r\n            v.push_back(i);\r\n        }\r\n\r\n        d.pop_front();\r\n\r\n        for (deque<int>::size_type i = 0; i < d.size(); ++i) {\r\n            assert(d[i] == *v[i]);\r\n        }\r\n    }\r\n}\r\n\r\n// Also test Dev10-391805 \"STL: Prefast error in deque\".\r\n\r\nvoid test_Dev10_391805() {\r\n    deque<int> d;\r\n\r\n    d.push_back(10);\r\n    d.push_back(20);\r\n    d.push_front(30);\r\n    d.push_front(40);\r\n\r\n    assert(d.size() == 4 && d[0] == 40 && d[1] == 30 && d[2] == 10 && d[3] == 20);\r\n}\r\n\r\n// Also test GH-1023 \"<deque>: std::deque::insert performance\"\r\n// - support for single-element insertion of non-swappable type, and\r\n// - exception safety for single-element insertion.\r\n\r\nstruct ThrowingConstructionTag {\r\n    explicit ThrowingConstructionTag() = default;\r\n};\r\n\r\nstruct UniqueError {\r\n    explicit UniqueError() = default;\r\n};\r\n\r\nclass NonswappableMovable {\r\npublic:\r\n    NonswappableMovable() = default;\r\n    NonswappableMovable(NonswappableMovable&& other) noexcept : payload{exchange(other.payload, -1)} {}\r\n    NonswappableMovable(const NonswappableMovable&) = default;\r\n\r\n    explicit NonswappableMovable(int n) noexcept : payload{n} {}\r\n    explicit NonswappableMovable(ThrowingConstructionTag) {\r\n        throw UniqueError{};\r\n    }\r\n\r\n    NonswappableMovable& operator=(NonswappableMovable&& other) noexcept {\r\n        payload = exchange(other.payload, -1);\r\n        return *this;\r\n    }\r\n    NonswappableMovable& operator=(const NonswappableMovable&) = default;\r\n\r\n#if _HAS_CXX20\r\n    friend bool operator==(const NonswappableMovable&, const NonswappableMovable&) = default;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    friend bool operator==(const NonswappableMovable& lhs, const NonswappableMovable& rhs) noexcept {\r\n        return lhs.payload == rhs.payload;\r\n    }\r\n\r\n    friend bool operator!=(const NonswappableMovable& lhs, const NonswappableMovable& rhs) noexcept {\r\n        return lhs.payload != rhs.payload;\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    friend void swap(NonswappableMovable&, NonswappableMovable&) = delete;\r\n\r\nprivate:\r\n    int payload = -1;\r\n};\r\n\r\n#if _HAS_CXX17\r\nstatic_assert(!is_swappable_v<NonswappableMovable>);\r\n#endif // _HAS_CXX17\r\n\r\nvoid test_exception_safety_for_nonswappable_movable() {\r\n    using Diff = deque<NonswappableMovable>::difference_type;\r\n\r\n    deque<NonswappableMovable> d;\r\n    for (int i = 0; i < 10; ++i) {\r\n        d.emplace_back(i);\r\n    }\r\n\r\n    {\r\n        auto it = d.emplace(d.begin(), 33);\r\n        assert(it == d.begin());\r\n        assert(d.front() == NonswappableMovable{33});\r\n    }\r\n    {\r\n        auto it = d.emplace(d.begin() + Diff{3}, 42);\r\n        assert(it == d.begin() + Diff{3});\r\n        assert(d[3] == NonswappableMovable{42});\r\n    }\r\n    {\r\n        auto it = d.emplace(d.end() - Diff{3}, 1729);\r\n        assert(it == d.end() - Diff{4});\r\n        assert(d[d.size() - 4] == NonswappableMovable{1729});\r\n    }\r\n    {\r\n        auto it = d.emplace(d.end(), 2023);\r\n        assert(it == d.end() - Diff{1});\r\n        assert(d.back() == NonswappableMovable{2023});\r\n    }\r\n    {\r\n        static constexpr int correct[] = {33, 0, 1, 42, 2, 3, 4, 5, 6, 1729, 7, 8, 9, 2023};\r\n        auto comp = [](const NonswappableMovable& lhs, const int rhs) { return lhs == NonswappableMovable{rhs}; };\r\n        assert(equal(d.begin(), d.end(), begin(correct), end(correct), comp));\r\n    }\r\n\r\n    const auto d_orig = d;\r\n    try {\r\n        d.emplace_front(ThrowingConstructionTag{});\r\n        assert(false);\r\n    } catch (const UniqueError&) {\r\n    }\r\n    assert(d == d_orig);\r\n\r\n    try {\r\n        d.emplace_back(ThrowingConstructionTag{});\r\n        assert(false);\r\n    } catch (const UniqueError&) {\r\n    }\r\n    assert(d == d_orig);\r\n\r\n    try {\r\n        d.emplace(d.begin(), ThrowingConstructionTag{});\r\n        assert(false);\r\n    } catch (const UniqueError&) {\r\n    }\r\n    assert(d == d_orig);\r\n\r\n    try {\r\n        d.emplace(d.begin() + Diff{2}, ThrowingConstructionTag{});\r\n        assert(false);\r\n    } catch (const UniqueError&) {\r\n    }\r\n    assert(d == d_orig);\r\n\r\n    try {\r\n        d.emplace(d.end() - Diff{2}, ThrowingConstructionTag{});\r\n        assert(false);\r\n    } catch (const UniqueError&) {\r\n    }\r\n    assert(d == d_orig);\r\n\r\n    try {\r\n        d.emplace(d.end(), ThrowingConstructionTag{});\r\n        assert(false);\r\n    } catch (const UniqueError&) {\r\n    }\r\n    assert(d == d_orig);\r\n}\r\n\r\nclass ThrowingMovable {\r\npublic:\r\n    ThrowingMovable() = default;\r\n    ThrowingMovable(ThrowingMovable&&) {\r\n        throw UniqueError{};\r\n    }\r\n    ThrowingMovable(const ThrowingMovable&) = default;\r\n\r\n    explicit ThrowingMovable(int n) noexcept : payload{n} {}\r\n\r\n    ThrowingMovable& operator=(ThrowingMovable&&) {\r\n        throw UniqueError{};\r\n    }\r\n    ThrowingMovable& operator=(const ThrowingMovable&) = default;\r\n\r\n#if _HAS_CXX20\r\n    friend bool operator==(const ThrowingMovable&, const ThrowingMovable&) = default;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    friend bool operator==(const ThrowingMovable& lhs, const ThrowingMovable& rhs) noexcept {\r\n        return lhs.payload == rhs.payload;\r\n    }\r\n\r\n    friend bool operator!=(const ThrowingMovable& lhs, const ThrowingMovable& rhs) noexcept {\r\n        return lhs.payload != rhs.payload;\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\nprivate:\r\n    int payload = -1;\r\n};\r\n\r\nvoid test_exception_safety_for_throwing_movable() {\r\n    using Diff = deque<ThrowingMovable>::difference_type;\r\n\r\n    deque<ThrowingMovable> d;\r\n    for (int i = 0; i < 10; ++i) {\r\n        d.emplace_back(i);\r\n    }\r\n\r\n    const auto d_orig = d;\r\n    try {\r\n        d.emplace_front(ThrowingMovable{});\r\n        assert(false);\r\n    } catch (const UniqueError&) {\r\n    }\r\n    assert(d == d_orig);\r\n\r\n    try {\r\n        d.emplace_back(ThrowingMovable{});\r\n        assert(false);\r\n    } catch (const UniqueError&) {\r\n    }\r\n    assert(d == d_orig);\r\n\r\n    try {\r\n        d.emplace(d.begin(), ThrowingMovable{});\r\n        assert(false);\r\n    } catch (const UniqueError&) {\r\n    }\r\n    assert(d == d_orig);\r\n\r\n    try {\r\n        d.emplace(d.begin() + Diff{2}, ThrowingMovable{});\r\n        assert(false);\r\n    } catch (const UniqueError&) {\r\n    }\r\n    assert(d == d_orig);\r\n\r\n    try {\r\n        d.emplace(d.end() - Diff{2}, ThrowingMovable{});\r\n        assert(false);\r\n    } catch (const UniqueError&) {\r\n    }\r\n    assert(d == d_orig);\r\n\r\n    try {\r\n        d.emplace(d.end(), ThrowingMovable{});\r\n        assert(false);\r\n    } catch (const UniqueError&) {\r\n    }\r\n    assert(d == d_orig);\r\n}\r\n\r\n// Also test GH-4072: <deque>: shrink_to_fit() should follow the Standard\r\nvoid test_gh_4072() {\r\n    {\r\n        constexpr int removed_count = 768;\r\n\r\n        deque<ThrowingMovable> d;\r\n        for (int i = 0; i < 1729; ++i) {\r\n            d.emplace_back(i);\r\n        }\r\n\r\n        for (int i = 0; i < removed_count; ++i) {\r\n            d.pop_front();\r\n            d.pop_back();\r\n        }\r\n\r\n        deque<ThrowingMovable> d2;\r\n        for (int i = removed_count; i < 1729 - removed_count; ++i) {\r\n            d2.emplace_back(i);\r\n        }\r\n\r\n        d.shrink_to_fit(); // ensures that no constructor or assignment operator of the element type is called\r\n        assert(d == d2);\r\n    }\r\n\r\n    // ensure that the circular buffer is correctly handled\r\n    {\r\n        deque<ThrowingMovable> deq(128);\r\n        deq.pop_back();\r\n        deq.emplace_front(0);\r\n        deq.shrink_to_fit();\r\n    }\r\n    {\r\n        deque<ThrowingMovable> deq(128);\r\n        for (int i = 0; i < 120; ++i) {\r\n            deq.pop_back();\r\n        }\r\n        for (int i = 0; i < 5; ++i) {\r\n            deq.emplace_front(0);\r\n        }\r\n        deq.shrink_to_fit();\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_push_back_pop_front();\r\n\r\n    test_Dev10_391805();\r\n\r\n    test_exception_safety_for_nonswappable_movable();\r\n    test_exception_safety_for_throwing_movable();\r\n\r\n    test_gh_4072();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_881629_vector_erase_return_value/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_881629_vector_erase_return_value/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <deque>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n// Also test DevCom-776568 \"vector::erase(a, a) self-move-assigns the whole vector\"\r\nstruct CheckSelfMoveAssign {\r\n    int i;\r\n\r\n    explicit CheckSelfMoveAssign(int i_) : i(i_) {}\r\n\r\n    CheckSelfMoveAssign(CheckSelfMoveAssign&& o) {\r\n        i   = o.i;\r\n        o.i = -1;\r\n    }\r\n\r\n    CheckSelfMoveAssign& operator=(CheckSelfMoveAssign&& o) {\r\n        i   = o.i;\r\n        o.i = -1;\r\n        return *this;\r\n    }\r\n};\r\n\r\ntemplate <template <class...> class Container>\r\nvoid test_case_devcom_776568() {\r\n    Container<CheckSelfMoveAssign> c;\r\n    c.emplace_back(1);\r\n    c.emplace_back(2);\r\n    c.emplace_back(3);\r\n    const auto after = c.begin() + 1;\r\n    auto it          = c.erase(c.begin(), c.begin());\r\n    assert(after->i == 2); // asserts that the iterator was not invalidated by iterator debugging\r\n    assert(it == c.begin());\r\n    // asserts that no elements were self-move-assigned:\r\n    for (int idx = 1; idx <= 3; ++idx) {\r\n        assert(it->i == idx);\r\n        ++it;\r\n    }\r\n\r\n    assert(it == c.end());\r\n}\r\n\r\ntemplate <template <class...> class Container>\r\nvoid test_case_gh_1118() {\r\n    Container<CheckSelfMoveAssign> c;\r\n    c.emplace_back(1);\r\n    c.emplace_back(2);\r\n    c.emplace_back(3);\r\n\r\n    const auto after = c.begin() + 2;\r\n    auto it          = c.erase(c.begin() + 1, c.begin() + 1);\r\n    assert(after->i == 3); // asserts that the iterator was not invalidated by iterator debugging\r\n    assert(it == c.begin() + 1);\r\n\r\n    // asserts that no elements were self-move-assigned:\r\n    it = c.begin();\r\n    for (int idx = 1; idx <= 3; ++idx) {\r\n        assert(it->i == idx);\r\n        ++it;\r\n    }\r\n\r\n    assert(it == c.end());\r\n}\r\n\r\nint main() {\r\n    {\r\n        vector<int> v(1, 1729);\r\n\r\n        const auto it = v.erase(v.begin());\r\n\r\n        assert(it == v.end());\r\n\r\n        assert(v.empty());\r\n    }\r\n\r\n    {\r\n        vector<int> v;\r\n        v.push_back(11);\r\n        v.push_back(22);\r\n        v.push_back(33);\r\n        v.push_back(44);\r\n        v.push_back(55);\r\n\r\n        {\r\n            const auto it = v.erase(v.begin());\r\n\r\n            assert(it == v.begin());\r\n            assert(*it == 22);\r\n\r\n            assert(v.size() == 4 && v[0] == 22 && v[1] == 33 && v[2] == 44 && v[3] == 55);\r\n        }\r\n\r\n        {\r\n            const auto it = v.erase(v.begin() + 1);\r\n\r\n            assert(it == v.begin() + 1);\r\n            assert(*it == 44);\r\n\r\n            assert(v.size() == 3 && v[0] == 22 && v[1] == 44 && v[2] == 55);\r\n        }\r\n\r\n        {\r\n            const auto it = v.erase(v.end() - 1);\r\n\r\n            assert(it == v.end());\r\n\r\n            assert(v.size() == 2 && v[0] == 22 && v[1] == 44);\r\n        }\r\n    }\r\n\r\n\r\n    {\r\n        vector<int> v;\r\n\r\n        const auto it = v.erase(v.begin(), v.end());\r\n\r\n        assert(it == v.end());\r\n\r\n        assert(v.empty());\r\n    }\r\n\r\n    {\r\n        vector<int> v;\r\n        v.push_back(11);\r\n        v.push_back(22);\r\n        v.push_back(33);\r\n        v.push_back(44);\r\n        v.push_back(55);\r\n\r\n        {\r\n            const auto it = v.erase(v.begin(), v.begin());\r\n\r\n            assert(it == v.begin());\r\n            assert(*it == 11);\r\n\r\n            assert(v.size() == 5);\r\n        }\r\n\r\n        {\r\n            const auto it = v.erase(v.begin() + 2, v.begin() + 2);\r\n\r\n            assert(it == v.begin() + 2);\r\n            assert(*it == 33);\r\n\r\n            assert(v.size() == 5);\r\n        }\r\n\r\n        {\r\n            const auto it = v.erase(v.end(), v.end());\r\n\r\n            assert(it == v.end());\r\n\r\n            assert(v.size() == 5);\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<int> v;\r\n        v.push_back(11);\r\n        v.push_back(22);\r\n        v.push_back(33);\r\n        v.push_back(44);\r\n        v.push_back(55);\r\n\r\n        const auto it = v.erase(v.begin() + 1, v.begin() + 3);\r\n\r\n        assert(it == v.begin() + 1);\r\n        assert(*it == 44);\r\n\r\n        assert(v.size() == 3 && v[0] == 11 && v[1] == 44 && v[2] == 55);\r\n    }\r\n\r\n    {\r\n        vector<int> v;\r\n        v.push_back(11);\r\n        v.push_back(22);\r\n        v.push_back(33);\r\n        v.push_back(44);\r\n        v.push_back(55);\r\n\r\n        const auto it = v.erase(v.begin() + 2, v.end());\r\n\r\n        assert(it == v.end());\r\n\r\n        assert(v.size() == 2 && v[0] == 11 && v[1] == 22);\r\n    }\r\n\r\n    {\r\n        vector<int> v;\r\n        v.push_back(11);\r\n        v.push_back(22);\r\n        v.push_back(33);\r\n        v.push_back(44);\r\n        v.push_back(55);\r\n\r\n        const auto it = v.erase(v.begin(), v.begin() + 2);\r\n\r\n        assert(it == v.begin());\r\n        assert(*it == 33);\r\n\r\n        assert(v.size() == 3 && v[0] == 33 && v[1] == 44 && v[2] == 55);\r\n    }\r\n\r\n    {\r\n        vector<int> v;\r\n        v.push_back(11);\r\n        v.push_back(22);\r\n        v.push_back(33);\r\n        v.push_back(44);\r\n        v.push_back(55);\r\n\r\n        const auto it = v.erase(v.begin(), v.end());\r\n\r\n        assert(it == v.end());\r\n\r\n        assert(v.empty());\r\n    }\r\n\r\n    test_case_devcom_776568<vector>();\r\n    test_case_devcom_776568<deque>();\r\n\r\n    test_case_gh_1118<vector>();\r\n    test_case_gh_1118<deque>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_904413_moved_from_function_should_be_empty/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_904413_moved_from_function_should_be_empty/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    function<int()> f = []() { return 1729; };\r\n\r\n    function<int()> g = move(f);\r\n\r\n    assert(!f);\r\n    assert(g);\r\n    assert(g() == 1729);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_905461_is_sorted_until/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_905461_is_sorted_until/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <functional>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    vector<int> v;\r\n\r\n    assert(is_sorted(v.begin(), v.end()));\r\n    assert(is_sorted(v.begin(), v.end(), greater<int>()));\r\n    assert(is_sorted_until(v.begin(), v.end()) == v.end());\r\n    assert(is_sorted_until(v.begin(), v.end(), greater<int>()) == v.end());\r\n\r\n    v.push_back(11);\r\n\r\n    assert(is_sorted(v.begin(), v.end()));\r\n    assert(is_sorted(v.begin(), v.end(), greater<int>()));\r\n    assert(is_sorted_until(v.begin(), v.end()) == v.end());\r\n    assert(is_sorted_until(v.begin(), v.end(), greater<int>()) == v.end());\r\n\r\n    v.push_back(22);\r\n\r\n    assert(is_sorted(v.begin(), v.end()));\r\n    assert(!is_sorted(v.begin(), v.end(), greater<int>()));\r\n    assert(is_sorted_until(v.begin(), v.end()) == v.end());\r\n    assert(is_sorted_until(v.begin(), v.end(), greater<int>()) == v.begin() + 1);\r\n\r\n    v.clear();\r\n\r\n    v.push_back(11);\r\n    v.push_back(22);\r\n    v.push_back(33);\r\n    v.push_back(44);\r\n    v.push_back(55);\r\n\r\n    assert(is_sorted(v.begin(), v.end()));\r\n    assert(is_sorted_until(v.begin(), v.end()) == v.end());\r\n\r\n    v[3] = 0;\r\n\r\n    assert(!is_sorted(v.begin(), v.end()));\r\n    assert(is_sorted_until(v.begin(), v.end()) == v.begin() + 3);\r\n\r\n    v.clear();\r\n\r\n    v.push_back(55);\r\n    v.push_back(44);\r\n    v.push_back(33);\r\n    v.push_back(22);\r\n    v.push_back(11);\r\n\r\n    assert(is_sorted(v.begin(), v.end(), greater<int>()));\r\n    assert(is_sorted_until(v.begin(), v.end(), greater<int>()) == v.end());\r\n\r\n    v[3] = 99;\r\n\r\n    assert(!is_sorted(v.begin(), v.end(), greater<int>()));\r\n    assert(is_sorted_until(v.begin(), v.end(), greater<int>()) == v.begin() + 3);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_908702_string_memory_leak/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_908702_string_memory_leak/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// REQUIRES: debug_CRT\r\n\r\n#include <cassert>\r\n#include <crtdbg.h>\r\n#include <locale>\r\n#include <new>\r\n#include <string>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    {\r\n        vector<string> v;\r\n        v.reserve(3);\r\n        v.push_back(\"1\");\r\n\r\n        v.insert(v.begin(), 2, \"2\");\r\n    }\r\n\r\n    assert(!_CrtDumpMemoryLeaks());\r\n\r\n    {\r\n        string one(\"111\");\r\n        string two(\"222\");\r\n        string three(\"333\");\r\n        one = move(two);\r\n        two = three;\r\n    }\r\n\r\n    assert(!_CrtDumpMemoryLeaks());\r\n\r\n    // Also test DevDiv-846054 \"<locale>: Spurious memory leaks\".\r\n    locale::global(locale(\"\"));\r\n\r\n    assert(!_CrtDumpMemoryLeaks());\r\n}\r\n\r\n// Also test DevDiv-810608 \"<xlocale>: [torino][boost]error C2665:\r\n// 'std::_Crt_new_delete::operator new' : none of the 2 overloads could convert all the argument types\".\r\nvoid meow(void* pv) { // COMPILE-ONLY\r\n    // Saying \"new\" instead of \"::new\" is intentional here.\r\n    new (pv) locale();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_909646_stringstream_vd2/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/vd2\"\r\n"
  },
  {
    "path": "tests/std/tests/Dev10_909646_stringstream_vd2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <sstream>\r\n\r\nusing namespace std;\r\n\r\nstruct Object {\r\n    virtual ~Object() {}\r\n};\r\n\r\nstruct Base : virtual public Object {\r\n    Base() : Object() {\r\n        Object* o = static_cast<Object*>(this);\r\n        Base* b   = dynamic_cast<Base*>(o);\r\n\r\n        assert(this == b);\r\n    }\r\n};\r\n\r\nstruct Derived : public Base {\r\n    int i;\r\n};\r\n\r\nint main() {\r\n    Derived d;\r\n\r\n    stringstream* ss = new stringstream;\r\n\r\n    *ss << \"I have \" << 9 * 9 * 9 + 10 * 10 * 10 << \" cute fluffy kittens.\";\r\n\r\n    assert(ss->str() == \"I have 1729 cute fluffy kittens.\");\r\n\r\n    delete ss;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0000000_dual_range_algorithms/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0000000_dual_range_algorithms/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <string>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nint g_equal = 0;\r\n\r\nstruct Meow {\r\n    bool operator==(const Meow&) const {\r\n        ++g_equal;\r\n        return true;\r\n    }\r\n};\r\n\r\nint g_pred = 0;\r\n\r\nbool MeowPred(const Meow&, const Meow&) {\r\n    ++g_pred;\r\n    return true;\r\n}\r\n\r\nvoid more_tests();\r\n\r\nint main() {\r\n    { // Test exchange().\r\n        string s(\"meow\");\r\n\r\n        assert(exchange(s, \"purr\") == \"meow\");\r\n\r\n        assert(s == \"purr\");\r\n    }\r\n\r\n\r\n    { // Dual-range mismatch()/equal()/is_permutation() shouldn't warn about raw pointers.\r\n        const int x[] = {11, 22, 33};\r\n        const int y[] = {11, 22, 33};\r\n\r\n        assert(mismatch(begin(x), end(x), begin(y), end(y)) == make_pair(end(x), end(y)));\r\n        assert(mismatch(begin(x), end(x), begin(y), end(y), equal_to<int>()) == make_pair(end(x), end(y)));\r\n\r\n        assert(equal(begin(x), end(x), begin(y), end(y)));\r\n        assert(equal(begin(x), end(x), begin(y), end(y), equal_to<int>()));\r\n\r\n        assert(is_permutation(begin(x), end(x), begin(y), end(y)));\r\n        assert(is_permutation(begin(x), end(x), begin(y), end(y), equal_to<int>()));\r\n    }\r\n\r\n\r\n    { // Test dual-range mismatch() with different elements, same lengths.\r\n        vector<int> a = {10, 20, 30, 999, 50};\r\n        vector<int> b = {10, 20, 30, 40, 50};\r\n\r\n        assert(mismatch(a.begin(), a.end(), b.begin(), b.end()) == make_pair(a.begin() + 3, b.begin() + 3));\r\n        assert(mismatch(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>())\r\n               == make_pair(a.begin() + 3, b.begin() + 3));\r\n    }\r\n\r\n    { // Test dual-range mismatch() with different elements, first longer.\r\n        vector<int> a = {10, 20, 30, 999, 50, 60, 70};\r\n        vector<int> b = {10, 20, 30, 40, 50};\r\n\r\n        assert(mismatch(a.begin(), a.end(), b.begin(), b.end()) == make_pair(a.begin() + 3, b.begin() + 3));\r\n        assert(mismatch(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>())\r\n               == make_pair(a.begin() + 3, b.begin() + 3));\r\n    }\r\n\r\n    { // Test dual-range mismatch() with different elements, second longer.\r\n        vector<int> a = {10, 20, 30, 999, 50};\r\n        vector<int> b = {10, 20, 30, 40, 50, 60, 70};\r\n\r\n        assert(mismatch(a.begin(), a.end(), b.begin(), b.end()) == make_pair(a.begin() + 3, b.begin() + 3));\r\n        assert(mismatch(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>())\r\n               == make_pair(a.begin() + 3, b.begin() + 3));\r\n    }\r\n\r\n\r\n    { // Test dual-range mismatch() with same elements, same lengths.\r\n        vector<int> a = {10, 20, 30, 40, 50};\r\n        vector<int> b = {10, 20, 30, 40, 50};\r\n\r\n        assert(mismatch(a.begin(), a.end(), b.begin(), b.end()) == make_pair(a.begin() + 5, b.begin() + 5));\r\n        assert(mismatch(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>())\r\n               == make_pair(a.begin() + 5, b.begin() + 5));\r\n    }\r\n\r\n    { // Test dual-range mismatch() with same elements, first longer.\r\n        vector<int> a = {10, 20, 30, 40, 50, 60, 70};\r\n        vector<int> b = {10, 20, 30, 40, 50};\r\n\r\n        assert(mismatch(a.begin(), a.end(), b.begin(), b.end()) == make_pair(a.begin() + 5, b.begin() + 5));\r\n        assert(mismatch(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>())\r\n               == make_pair(a.begin() + 5, b.begin() + 5));\r\n    }\r\n\r\n    { // Test dual-range mismatch() with same elements, second longer.\r\n        vector<int> a = {10, 20, 30, 40, 50};\r\n        vector<int> b = {10, 20, 30, 40, 50, 60, 70};\r\n\r\n        assert(mismatch(a.begin(), a.end(), b.begin(), b.end()) == make_pair(a.begin() + 5, b.begin() + 5));\r\n        assert(mismatch(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>())\r\n               == make_pair(a.begin() + 5, b.begin() + 5));\r\n    }\r\n\r\n\r\n    { // Test dual-range equal() with random-access sequences of different lengths and counting comparisons.\r\n        array<Meow, 10> a;\r\n        deque<Meow> d(20);\r\n\r\n        assert(!equal(a.begin(), a.end(), d.begin(), d.end()));\r\n        assert(g_equal == 0);\r\n        assert(!equal(a.begin(), a.end(), d.begin(), d.end(), MeowPred));\r\n        assert(g_pred == 0);\r\n\r\n        // Verify that the counting comparisons actually count.\r\n        assert(equal(a.begin(), a.begin() + 5, d.begin(), d.begin() + 5));\r\n        assert(g_equal == 5);\r\n        assert(equal(a.begin(), a.begin() + 7, d.begin(), d.begin() + 7, MeowPred));\r\n        assert(g_pred == 7);\r\n\r\n        g_equal = 0;\r\n        g_pred  = 0;\r\n    }\r\n\r\n    { // Test dual-range equal() with random-access sequences, same lengths, same/different elements.\r\n        vector<int> a = {10, 20, 30, 40, 50};\r\n        vector<int> b = {10, 20, 30, 40, 50};\r\n\r\n        assert(equal(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(equal(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n\r\n        b[2] = 999;\r\n\r\n        assert(!equal(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(!equal(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n    }\r\n\r\n    { // Test dual-range equal() with weaker sequences, same lengths, same/different elements.\r\n        list<int> a   = {10, 20, 30, 40, 50};\r\n        vector<int> b = {10, 20, 30, 40, 50};\r\n\r\n        assert(equal(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(equal(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n\r\n        b[2] = 999;\r\n\r\n        assert(!equal(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(!equal(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n    }\r\n\r\n    { // Test dual-range equal() with weaker sequences, first longer, same/different elements.\r\n        list<int> a   = {10, 20, 30, 40, 50, 60, 70};\r\n        vector<int> b = {10, 20, 30, 40, 50};\r\n\r\n        assert(!equal(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(!equal(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n\r\n        b[2] = 999;\r\n\r\n        assert(!equal(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(!equal(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n    }\r\n\r\n    { // Test dual-range equal() with weaker sequences, second longer, same/different elements.\r\n        list<int> a   = {10, 20, 30, 40, 50};\r\n        vector<int> b = {10, 20, 30, 40, 50, 60, 70};\r\n\r\n        assert(!equal(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(!equal(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n\r\n        b[2] = 999;\r\n\r\n        assert(!equal(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(!equal(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n    }\r\n\r\n\r\n    { // Test memcmp() optimization.\r\n        const char c1[] = {'A', 'B', 'C'};\r\n        const char c2[] = {'A', 'X', 'C'};\r\n\r\n        assert(equal(begin(c1), end(c1), begin(c1), end(c1)));\r\n        assert(equal(begin(c1), end(c1), begin(c1), end(c1), equal_to<>()));\r\n        assert(equal(begin(c1), end(c1), c1));\r\n        assert(equal(begin(c1), end(c1), c1, equal_to<>()));\r\n        assert(!equal(begin(c1), end(c1), begin(c2), end(c2)));\r\n        assert(!equal(begin(c1), end(c1), begin(c2), end(c2), equal_to<>()));\r\n        assert(!equal(begin(c1), end(c1), c2));\r\n        assert(!equal(begin(c1), end(c1), c2, equal_to<>()));\r\n\r\n        const signed char sc1[] = {'D', 'E', 'F'};\r\n        const signed char sc2[] = {'D', 'X', 'F'};\r\n\r\n        assert(equal(begin(sc1), end(sc1), begin(sc1), end(sc1)));\r\n        assert(equal(begin(sc1), end(sc1), begin(sc1), end(sc1), equal_to<>()));\r\n        assert(equal(begin(sc1), end(sc1), sc1));\r\n        assert(equal(begin(sc1), end(sc1), sc1, equal_to<>()));\r\n        assert(!equal(begin(sc1), end(sc1), begin(sc2), end(sc2)));\r\n        assert(!equal(begin(sc1), end(sc1), begin(sc2), end(sc2), equal_to<>()));\r\n        assert(!equal(begin(sc1), end(sc1), sc2));\r\n        assert(!equal(begin(sc1), end(sc1), sc2, equal_to<>()));\r\n\r\n        const unsigned char uc1[] = {'G', 'H', 'I'};\r\n        const unsigned char uc2[] = {'G', 'X', 'I'};\r\n\r\n        assert(equal(begin(uc1), end(uc1), begin(uc1), end(uc1)));\r\n        assert(equal(begin(uc1), end(uc1), begin(uc1), end(uc1), equal_to<>()));\r\n        assert(equal(begin(uc1), end(uc1), uc1));\r\n        assert(equal(begin(uc1), end(uc1), uc1, equal_to<>()));\r\n        assert(!equal(begin(uc1), end(uc1), begin(uc2), end(uc2)));\r\n        assert(!equal(begin(uc1), end(uc1), begin(uc2), end(uc2), equal_to<>()));\r\n        assert(!equal(begin(uc1), end(uc1), uc2));\r\n        assert(!equal(begin(uc1), end(uc1), uc2, equal_to<>()));\r\n    }\r\n\r\n\r\n    { // Test dual-range is_permutation() with random-access sequences of different lengths and counting comparisons.\r\n        array<Meow, 10> a;\r\n        deque<Meow> d(20);\r\n\r\n        assert(!is_permutation(a.begin(), a.end(), d.begin(), d.end()));\r\n        assert(g_equal == 0);\r\n        assert(!is_permutation(a.begin(), a.end(), d.begin(), d.end(), MeowPred));\r\n        assert(g_pred == 0);\r\n\r\n        // N3797 25.2.12 [alg.is_permutation]/4:\r\n        // Complexity: No applications of the corresponding predicate if ForwardIterator1 and ForwardIterator2\r\n        // meet the requirements of random access iterators and last1 - first1 != last2 - first2.\r\n        // Otherwise, exactly distance(first1, last1) applications of the corresponding predicate if\r\n        // equal(first1, last1, first2, last2) would return true if pred was not given in the argument list or\r\n        // equal(first1, last1, first2, last2, pred) would return true if pred was given in the argument list;\r\n        // otherwise, at worst O(N^2), where N has the value distance(first1, last1).\r\n        assert(is_permutation(a.begin(), a.begin() + 5, d.begin(), d.begin() + 5));\r\n        assert(g_equal == 5);\r\n        assert(is_permutation(a.begin(), a.begin() + 7, d.begin(), d.begin() + 7, MeowPred));\r\n        assert(g_pred == 7);\r\n\r\n        g_equal = 0;\r\n        g_pred  = 0;\r\n    }\r\n\r\n    { // Test dual-range is_permutation() with random-access sequences, same lengths, same/different elements.\r\n        vector<int> a = {10, 20, 30, 40, 50};\r\n        vector<int> b = {10, 20, 30, 40, 50};\r\n\r\n        assert(is_permutation(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(is_permutation(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n\r\n        b[2] = 999;\r\n\r\n        assert(!is_permutation(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(!is_permutation(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n    }\r\n\r\n    { // Test dual-range is_permutation() with weaker sequences, same lengths, same/different elements.\r\n        list<int> a   = {10, 20, 30, 40, 50};\r\n        vector<int> b = {10, 20, 30, 40, 50};\r\n\r\n        assert(is_permutation(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(is_permutation(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n\r\n        b[2] = 999;\r\n\r\n        assert(!is_permutation(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(!is_permutation(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n    }\r\n\r\n    { // Test dual-range is_permutation() with weaker sequences, first longer, same/different elements.\r\n        list<int> a   = {10, 20, 30, 40, 50, 60, 70};\r\n        vector<int> b = {10, 20, 30, 40, 50};\r\n\r\n        assert(!is_permutation(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(!is_permutation(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n\r\n        b[2] = 999;\r\n\r\n        assert(!is_permutation(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(!is_permutation(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n    }\r\n\r\n    { // Test dual-range is_permutation() with weaker sequences, second longer, same/different elements.\r\n        list<int> a   = {10, 20, 30, 40, 50};\r\n        vector<int> b = {10, 20, 30, 40, 50, 60, 70};\r\n\r\n        assert(!is_permutation(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(!is_permutation(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n\r\n        b[2] = 999;\r\n\r\n        assert(!is_permutation(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(!is_permutation(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n    }\r\n\r\n    { // Test dual-range is_permutation() with random-access sequences, same lengths, permuted/non-permuted elements.\r\n        vector<int> a = {10, 20, 30, 40, 50};\r\n        vector<int> b = {30, 50, 40, 10, 20};\r\n\r\n        assert(is_permutation(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(is_permutation(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n\r\n        a = {11, 22, 22, 33, 33, 33};\r\n        b = {11, 11, 22, 22, 33, 33};\r\n\r\n        assert(!is_permutation(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(!is_permutation(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n    }\r\n\r\n    { // Test dual-range is_permutation() with weaker sequences, same lengths, permuted/non-permuted elements.\r\n        list<int> a   = {10, 20, 30, 40, 50};\r\n        vector<int> b = {30, 50, 40, 10, 20};\r\n\r\n        assert(is_permutation(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(is_permutation(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n\r\n        a = {11, 22, 22, 33, 33, 33};\r\n        b = {11, 11, 22, 22, 33, 33};\r\n\r\n        assert(!is_permutation(a.begin(), a.end(), b.begin(), b.end()));\r\n        assert(!is_permutation(a.begin(), a.end(), b.begin(), b.end(), equal_to<int>()));\r\n    }\r\n\r\n    {\r\n        int arr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\r\n        int arr2[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};\r\n        assert(is_permutation(begin(arr1), end(arr1), begin(arr2), end(arr2)));\r\n    }\r\n    {\r\n        int arr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\r\n        int arr2[] = {9, 8, 7, 3, 4, 5, 6, 2, 1, 0};\r\n        assert(is_permutation(begin(arr1), end(arr1), begin(arr2), end(arr2)));\r\n    }\r\n    {\r\n        int arr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\r\n        int arr2[] = {9, 1, 7, 3, 5, 4, 6, 2, 8, 0};\r\n        assert(is_permutation(begin(arr1), end(arr1), begin(arr2), end(arr2)));\r\n    }\r\n    {\r\n        int arr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\r\n        int arr2[] = {9, 1, 7, 5, 6, 3, 4, 2, 8, 0};\r\n        assert(is_permutation(begin(arr1), end(arr1), begin(arr2), end(arr2)));\r\n    }\r\n    {\r\n        int arr1[] = {0, 1, 2, 3, 4, 10, 5, 6, 7, 8, 9};\r\n        int arr2[] = {9, 1, 7, 3, 5, 11, 4, 6, 2, 8, 0};\r\n        assert(!is_permutation(begin(arr1), end(arr1), begin(arr2), end(arr2)));\r\n    }\r\n\r\n    { // Test that _ITERATOR_DEBUG_ARRAY_OVERLOADS is not needed anymore\r\n        int arr[8] = {};\r\n        assert(mismatch(arr, arr, arr, arr) == make_pair(begin(arr), begin(arr)));\r\n        assert(mismatch(arr, arr, arr, arr + 0) == make_pair(begin(arr), begin(arr)));\r\n\r\n        assert(equal(arr, arr, arr, arr));\r\n        assert(equal(arr, arr, arr, arr + 0));\r\n\r\n        assert(is_permutation(arr, arr, arr, arr));\r\n        assert(is_permutation(arr, arr, arr, arr + 0));\r\n    }\r\n\r\n    more_tests();\r\n}\r\n\r\ntemplate <typename A, typename B>\r\nvoid test_helper1(const list<int>& one, const list<int>& two, const bool expected) {\r\n    A a(one.begin(), one.end());\r\n    B b(two.begin(), two.end());\r\n\r\n    assert(is_permutation(a.begin(), a.end(), b.begin(), b.end()) == expected);\r\n}\r\n\r\nvoid test_helper2(const list<int>& one, const list<int>& two, const bool expected) {\r\n    typedef forward_list<int> F;\r\n    typedef list<int> L;\r\n    typedef vector<int> V;\r\n\r\n    test_helper1<F, F>(one, two, expected);\r\n    test_helper1<F, L>(one, two, expected);\r\n    test_helper1<F, V>(one, two, expected);\r\n    test_helper1<L, F>(one, two, expected);\r\n    test_helper1<L, L>(one, two, expected);\r\n    test_helper1<L, V>(one, two, expected);\r\n    test_helper1<V, F>(one, two, expected);\r\n    test_helper1<V, L>(one, two, expected);\r\n    test_helper1<V, V>(one, two, expected);\r\n}\r\n\r\nvoid test_helper3(initializer_list<int> il_a, initializer_list<int> il_b, const bool expected,\r\n    initializer_list<int> prefix, initializer_list<int> suffix) {\r\n\r\n    list<int> one(il_a);\r\n    list<int> two(il_b);\r\n\r\n    one.insert(one.begin(), prefix);\r\n    one.insert(one.end(), suffix);\r\n\r\n    two.insert(two.begin(), prefix);\r\n    two.insert(two.end(), suffix);\r\n\r\n    test_helper2(one, two, expected);\r\n}\r\n\r\nvoid test_helper4(initializer_list<int> il_a, initializer_list<int> il_b, const bool expected) {\r\n    test_helper3(il_a, il_b, expected, {}, {});\r\n    test_helper3(il_a, il_b, expected, {70}, {});\r\n    test_helper3(il_a, il_b, expected, {70, 80}, {});\r\n    test_helper3(il_a, il_b, expected, {70, 80, 90}, {});\r\n\r\n    test_helper3(il_a, il_b, expected, {}, {700});\r\n    test_helper3(il_a, il_b, expected, {70}, {700});\r\n    test_helper3(il_a, il_b, expected, {70, 80}, {700});\r\n    test_helper3(il_a, il_b, expected, {70, 80, 90}, {700});\r\n\r\n    test_helper3(il_a, il_b, expected, {}, {700, 800});\r\n    test_helper3(il_a, il_b, expected, {70}, {700, 800});\r\n    test_helper3(il_a, il_b, expected, {70, 80}, {700, 800});\r\n    test_helper3(il_a, il_b, expected, {70, 80, 90}, {700, 800});\r\n\r\n    test_helper3(il_a, il_b, expected, {}, {700, 800, 900});\r\n    test_helper3(il_a, il_b, expected, {70}, {700, 800, 900});\r\n    test_helper3(il_a, il_b, expected, {70, 80}, {700, 800, 900});\r\n    test_helper3(il_a, il_b, expected, {70, 80, 90}, {700, 800, 900});\r\n\r\n    test_helper3(il_a, il_b, expected, {10, 20, 30}, {11, 22, 33});\r\n}\r\n\r\nvoid more_tests() {\r\n    test_helper4({}, {}, true);\r\n    test_helper4({11}, {11}, true);\r\n    test_helper4({11, 22}, {11, 22}, true);\r\n    test_helper4({11, 22, 33}, {11, 22, 33}, true);\r\n\r\n#define SEQ_A 20, 30, 40, 22, 44, 22, 33, 10, 33, 40, 20, 44, 11, 40, 44, 33, 30, 40, 30, 44\r\n#define SEQ_B 40, 44, 44, 11, 40, 20, 20, 40, 33, 30, 22, 22, 40, 10, 33, 33, 44, 30, 44, 30\r\n\r\n    test_helper4({SEQ_A}, {SEQ_B}, true);\r\n\r\n#undef SEQ_A\r\n#undef SEQ_B\r\n\r\n// baseline\r\n#define SEQ_C 22, 44, 22, 10, 40, 11, 30, 30, 40, 33, 30, 33, 33, 20, 44, 44, 40, 40, 20, 44\r\n\r\n// good\r\n#define SEQ_D 40, 11, 44, 33, 30, 30, 22, 44, 33, 22, 10, 44, 44, 40, 40, 20, 33, 40, 20, 30\r\n\r\n// bad, zero 33s (they were replaced by 20s)\r\n#define SEQ_E 40, 11, 44, 20, 30, 30, 22, 44, 20, 22, 10, 44, 44, 40, 40, 20, 20, 40, 20, 30\r\n\r\n// bad, one 33\r\n#define SEQ_F 40, 11, 44, 20, 30, 30, 22, 44, 20, 22, 10, 44, 44, 40, 40, 20, 33, 40, 20, 30\r\n\r\n// bad, two 33s\r\n#define SEQ_G 40, 11, 44, 20, 30, 30, 22, 44, 33, 22, 10, 44, 44, 40, 40, 20, 33, 40, 20, 30\r\n\r\n// bad, four 33s (consumed a 20)\r\n#define SEQ_H 40, 11, 44, 33, 30, 30, 22, 44, 33, 22, 10, 44, 44, 40, 40, 33, 33, 40, 20, 30\r\n\r\n// bad, five 33s (consumed both 20s)\r\n#define SEQ_I 40, 11, 44, 33, 30, 30, 22, 44, 33, 22, 10, 44, 44, 40, 40, 33, 33, 40, 33, 30\r\n\r\n    test_helper4({SEQ_C}, {SEQ_D}, true);\r\n    test_helper4({SEQ_C}, {SEQ_E}, false);\r\n    test_helper4({SEQ_C}, {SEQ_F}, false);\r\n    test_helper4({SEQ_C}, {SEQ_G}, false);\r\n    test_helper4({SEQ_C}, {SEQ_H}, false);\r\n    test_helper4({SEQ_C}, {SEQ_I}, false);\r\n\r\n#undef SEQ_C\r\n#undef SEQ_D\r\n#undef SEQ_E\r\n#undef SEQ_F\r\n#undef SEQ_G\r\n#undef SEQ_H\r\n#undef SEQ_I\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0000000_function_crashes/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0000000_function_crashes/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <functional>\r\n\r\n#ifndef _M_CEE_PURE\r\n#include <future>\r\n#endif\r\n\r\nusing namespace std;\r\n\r\nint global = 0;\r\n\r\nvoid add10() {\r\n    global += 10;\r\n}\r\n\r\nvoid add200() {\r\n    global += 200;\r\n}\r\n\r\nvoid add3000() {\r\n    global += 3000;\r\n}\r\n\r\nstruct Kitten {\r\n    int a;\r\n\r\n    explicit Kitten(int x) : a(x) {}\r\n\r\n    void operator()() const {\r\n        global += a;\r\n    }\r\n};\r\n\r\nint main() {\r\n    {\r\n        function<void()> src  = &add10;\r\n        function<void()> dest = src;\r\n        dest();\r\n    }\r\n\r\n    {\r\n        function<void()> src(&add200);\r\n        function<void()> dest(src);\r\n        src = nullptr;\r\n        dest();\r\n    }\r\n\r\n    {\r\n        function<void()> dest;\r\n\r\n        {\r\n            function<void()> src(&add3000);\r\n            dest = src;\r\n        }\r\n\r\n        dest();\r\n    }\r\n\r\n    {\r\n        function<void()> g;\r\n\r\n        {\r\n            function<void()> f = Kitten(40000);\r\n            f();\r\n            g = f;\r\n        }\r\n\r\n        g();\r\n    }\r\n\r\n#ifndef _M_CEE_PURE\r\n    {\r\n        future<int> f = async([]() { return 500000; });\r\n        global += f.get();\r\n    }\r\n#endif\r\n\r\n#ifdef _M_CEE_PURE\r\n    return global != 83210;\r\n#else\r\n    return global != 583210;\r\n#endif\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0000000_include_each_header_alone/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\include_each_header_alone_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0000000_include_each_header_alone/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define MEOW_ANGLE(X) <X>\r\n\r\n#include MEOW_ANGLE(MEOW_HEADER)\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0000000_null_forward_iterators/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0000000_null_forward_iterators/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <cstring>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <map>\r\n#include <new>\r\n#include <regex>\r\n#include <set>\r\n#include <string>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <vector>\r\n\r\n#if _HAS_CXX17\r\n#include <filesystem>\r\n#include <string_view>\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n#include <span>\r\n#endif // _HAS_CXX20\r\n\r\n#include <experimental_filesystem.hpp>\r\n\r\nusing namespace std;\r\n\r\n// N3797 24.2.5 [forward.iterators]/2:\r\n// \"The domain of == for forward iterators is that of iterators over the same\r\n// underlying sequence. However, value-initialized iterators may be compared and\r\n// shall compare equal to other value-initialized iterators of the same type.\"\r\n\r\n// Note we take the iterators under test by const& to avoid invoking copy constructors\r\n// which may invalidate the \"placement new on top of garbage\" test case.\r\ntemplate <typename FwdIt>\r\nvoid test_iterator_impl(const FwdIt& lhs, const FwdIt& rhs, input_iterator_tag) {\r\n    // while most iterators in this test need to be forward iterators, path::iterator meets most\r\n    // of the forward iterator requirements (including those that we test here), but not all of them,\r\n    // so it's marked with input_iterator_tag\r\n    assert(lhs == rhs);\r\n    assert(!(lhs != rhs));\r\n}\r\n\r\ntemplate <typename RanIt>\r\nvoid test_iterator_impl(const RanIt& lhs, const RanIt& rhs, random_access_iterator_tag) {\r\n\r\n    assert(lhs == rhs);\r\n    assert(!(lhs != rhs));\r\n\r\n    // See N4567 24.2.7 [random.access.iterators]/1 (table 110)\r\n    RanIt lhsCopy(lhs);\r\n    assert(lhsCopy == lhs);\r\n    assert(lhs == lhsCopy);\r\n    // r += n\r\n    lhsCopy += 0;\r\n    assert(lhsCopy == lhs);\r\n    assert(lhs == lhsCopy);\r\n    // n + a\r\n    assert(0 + lhs == lhs);\r\n    // a + n\r\n    assert(lhs + 0 == lhs);\r\n    // r -= n\r\n    lhsCopy -= 0;\r\n    assert(lhsCopy == lhs);\r\n    assert(lhs == lhsCopy);\r\n    // a - n\r\n    assert(lhs - 0 == lhs);\r\n    // b - a\r\n    assert(lhs - rhs == 0);\r\n    // a < b\r\n    assert(!(lhs < rhs));\r\n    // a > b\r\n    assert(!(lhs > rhs));\r\n    // a <= b\r\n    assert(lhs <= rhs);\r\n    // a >= b\r\n    assert(lhs >= rhs);\r\n}\r\n\r\ntemplate <typename FwdIt>\r\nvoid test_iterator() {\r\n    typedef typename iterator_traits<FwdIt>::iterator_category Cat;\r\n\r\n    {\r\n        const FwdIt i1{};\r\n        const FwdIt i2{};\r\n\r\n        test_iterator_impl(i1, i2, Cat{});\r\n    }\r\n\r\n    {\r\n        alignas(FwdIt) unsigned char buf3[sizeof(FwdIt)];\r\n        alignas(FwdIt) unsigned char buf4[sizeof(FwdIt)];\r\n\r\n        memset(buf3, 0xCC, sizeof(FwdIt));\r\n        memset(buf4, 0xDD, sizeof(FwdIt));\r\n\r\n        FwdIt* p3 = reinterpret_cast<FwdIt*>(buf3);\r\n        FwdIt* p4 = reinterpret_cast<FwdIt*>(buf4);\r\n\r\n        new (p3) FwdIt{};\r\n        new (p4) FwdIt{};\r\n\r\n        test_iterator_impl(*p3, *p4, Cat{});\r\n\r\n        p3->~FwdIt();\r\n        p4->~FwdIt();\r\n    }\r\n}\r\n\r\ntemplate <typename Container>\r\nvoid test_container() {\r\n    using Iter      = typename Container::iterator;\r\n    using ConstIter = typename Container::const_iterator;\r\n\r\n    test_iterator<Iter>();\r\n    test_iterator<ConstIter>();\r\n\r\n    // Also test how container destruction orphans iterators.\r\n    // VSO-845592 \"Debug crash when destroying iterator to deque.end()\r\n    // gotten through deque.erase(it) after deque has been destroyed\"\r\n\r\n    Iter i;\r\n    ConstIter ci;\r\n\r\n    {\r\n        Container container;\r\n        i  = container.end();\r\n        ci = container.cend();\r\n    }\r\n\r\n    // i and ci have been orphaned, but can be re-assigned.\r\n\r\n    i  = {};\r\n    ci = {};\r\n\r\n    assert(i == Iter{});\r\n    assert(ci == ConstIter{});\r\n}\r\n\r\nint main() {\r\n    test_container<array<int, 5>>();\r\n    test_container<deque<int>>();\r\n    test_container<forward_list<int>>();\r\n    test_container<list<int>>();\r\n    test_container<vector<int>>();\r\n    test_container<vector<bool>>();\r\n\r\n    test_container<map<int, int>>();\r\n    test_container<multimap<int, int>>();\r\n    test_container<set<int>>();\r\n    test_container<multiset<int>>();\r\n\r\n    test_container<unordered_map<int, int>>();\r\n    test_container<unordered_multimap<int, int>>();\r\n    test_container<unordered_set<int>>();\r\n    test_container<unordered_multiset<int>>();\r\n\r\n    test_container<string>();\r\n#if _HAS_CXX17\r\n    test_iterator<string_view::iterator>();\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n    test_iterator<span<int>::iterator>();\r\n#endif // _HAS_CXX20\r\n\r\n    test_iterator<sregex_iterator>();\r\n    test_iterator<sregex_token_iterator>();\r\n\r\n    // N3797 24.5.1.3.1 [reverse.iter.cons]/1:\r\n    // \"reverse_iterator(); Effects: Value initializes current.\"\r\n    test_iterator<reverse_iterator<int*>>();\r\n\r\n    // N3797 24.5.3.3.1 [move.iter.op.const]/1:\r\n    // \"move_iterator(); Effects: Constructs a move_iterator, value initializing current.\"\r\n    test_iterator<move_iterator<int*>>();\r\n\r\n    test_iterator<std::experimental::filesystem::path::iterator>();\r\n#if _HAS_CXX17\r\n    test_iterator<std::filesystem::path::iterator>();\r\n#endif // _HAS_CXX17\r\n\r\n    {\r\n        // Also test string iterator subtraction.\r\n\r\n        string s(\"cute fluffy kittens\");\r\n\r\n        const string::iterator i = s.begin() + 5;\r\n        const string::iterator j = s.begin() + 12;\r\n\r\n        assert(i - j == -7);\r\n        assert(j - i == 7);\r\n\r\n        const string::const_iterator ci = s.cbegin();\r\n        const string::const_iterator cj = s.cbegin() + 8;\r\n\r\n        assert(ci - cj == -8);\r\n        assert(cj - ci == 8);\r\n\r\n        assert(i - ci == 5);\r\n        assert(ci - i == -5);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0000000_quoted/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0000000_quoted/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <iomanip>\r\n#include <iostream>\r\n#include <sstream>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\nvoid check_state(const char* const input, const ios_base::iostate expected) {\r\n    istringstream iss(input);\r\n\r\n    string s;\r\n\r\n    iss >> quoted(s);\r\n\r\n    assert(iss.rdstate() == expected);\r\n}\r\n\r\nint main() {\r\n    const char* const original_recipe = R\"( one \"two\" three\\four \\\"five \"\\six )\";\r\n    const char* const extra_crispy    = R\"(\" one \\\"two\\\" three\\\\four \\\\\\\"five \\\"\\\\six \")\";\r\n\r\n    {\r\n        ostringstream oss1;\r\n\r\n        oss1 << quoted(original_recipe);\r\n\r\n        const bool b = oss1.str() == extra_crispy;\r\n        assert(b);\r\n    }\r\n\r\n    {\r\n        ostringstream oss2;\r\n\r\n        const string s2(original_recipe);\r\n\r\n        oss2 << quoted(s2);\r\n\r\n        const bool b = oss2.str() == extra_crispy;\r\n        assert(b);\r\n    }\r\n\r\n    {\r\n        ostringstream oss3;\r\n\r\n        string s3(original_recipe);\r\n\r\n        oss3 << quoted(s3);\r\n\r\n        const bool b = oss3.str() == extra_crispy;\r\n        assert(b);\r\n    }\r\n\r\n    {\r\n        istringstream iss4(extra_crispy);\r\n\r\n        string s4(\"GARBAGE\");\r\n\r\n        iss4 >> quoted(s4);\r\n\r\n        assert(s4 == original_recipe);\r\n    }\r\n\r\n    {\r\n        ostringstream oss5;\r\n\r\n        oss5 << setfill('w') << setw(30) << R\"(\"ABC \\\"DEF\\\" \\\\GHI\")\";\r\n\r\n        const bool b = oss5.str() == R\"(wwwwwwwwwww\"ABC \\\"DEF\\\" \\\\GHI\")\";\r\n        assert(b);\r\n    }\r\n\r\n    {\r\n        ostringstream oss6;\r\n\r\n        oss6 << setfill('x') << setw(30) << quoted(R\"(ABC \"DEF\" \\GHI)\");\r\n\r\n        const bool b = oss6.str() == R\"(xxxxxxxxxxx\"ABC \\\"DEF\\\" \\\\GHI\")\";\r\n        assert(b);\r\n    }\r\n\r\n    {\r\n        ostringstream oss7;\r\n\r\n        oss7 << left << setfill('y') << setw(30) << R\"(\"ABC \\\"DEF\\\" \\\\GHI\")\";\r\n\r\n        const bool b = oss7.str() == R\"(\"ABC \\\"DEF\\\" \\\\GHI\"yyyyyyyyyyy)\";\r\n        assert(b);\r\n    }\r\n\r\n    {\r\n        ostringstream oss8;\r\n\r\n        oss8 << left << setfill('z') << setw(30) << quoted(R\"(ABC \"DEF\" \\GHI)\");\r\n\r\n        const bool b = oss8.str() == R\"(\"ABC \\\"DEF\\\" \\\\GHI\"zzzzzzzzzzz)\";\r\n        assert(b);\r\n    }\r\n\r\n    {\r\n        istringstream iss9(\"meow purr\");\r\n\r\n        string s9(\"GARBAGE\");\r\n\r\n        iss9 >> quoted(s9);\r\n\r\n        const bool b = s9 == \"meow\";\r\n        assert(b);\r\n    }\r\n\r\n    {\r\n        istringstream iss10(R\"(  \" ONE \\\"TWO\\\\THREE\\\" FOUR \"  )\");\r\n\r\n        string s10(\"GARBAGE\");\r\n\r\n        iss10 >> quoted(s10);\r\n\r\n        const bool b = s10 == R\"( ONE \"TWO\\THREE\" FOUR )\";\r\n        assert(b);\r\n    }\r\n\r\n    {\r\n        istringstream iss11(\"  cat  dog  \");\r\n\r\n        string s11(\"GARBAGE\");\r\n\r\n        iss11 >> quoted(s11);\r\n\r\n        const bool b = s11 == \"cat\";\r\n        assert(b);\r\n    }\r\n\r\n    {\r\n        istringstream iss12(R\"(\"something\"\"something\")\");\r\n\r\n        string s12(\"GARBAGE\");\r\n\r\n        iss12 >> quoted(s12, '\"', '\"');\r\n\r\n        const bool b = s12 == R\"(something\"something)\";\r\n        assert(b);\r\n    }\r\n\r\n    check_state(R\"()\", ios_base::eofbit | ios_base::failbit);\r\n    check_state(R\"(cat)\", ios_base::eofbit);\r\n    check_state(R\"(  cat)\", ios_base::eofbit);\r\n    check_state(R\"(cat  )\", ios_base::goodbit);\r\n    check_state(R\"(  cat  )\", ios_base::goodbit);\r\n    check_state(R\"(\")\", ios_base::eofbit | ios_base::failbit);\r\n    check_state(R\"(  \")\", ios_base::eofbit | ios_base::failbit);\r\n    check_state(R\"(\"  )\", ios_base::eofbit | ios_base::failbit);\r\n    check_state(R\"(  \"  )\", ios_base::eofbit | ios_base::failbit);\r\n    check_state(R\"(\"stuff)\", ios_base::eofbit | ios_base::failbit);\r\n    check_state(R\"(  \"stuff)\", ios_base::eofbit | ios_base::failbit);\r\n    check_state(R\"(\"stuff  )\", ios_base::eofbit | ios_base::failbit);\r\n    check_state(R\"(  \"stuff  )\", ios_base::eofbit | ios_base::failbit);\r\n    check_state(R\"(\"stuff\\)\", ios_base::eofbit | ios_base::failbit);\r\n    check_state(R\"(  \"stuff\\)\", ios_base::eofbit | ios_base::failbit);\r\n    check_state(R\"(\"stuff\\  )\", ios_base::eofbit | ios_base::failbit);\r\n    check_state(R\"(  \"stuff\\  )\", ios_base::eofbit | ios_base::failbit);\r\n    check_state(R\"(\"dog\")\", ios_base::goodbit);\r\n    check_state(R\"(  \"dog\")\", ios_base::goodbit);\r\n    check_state(R\"(\"dog\"  )\", ios_base::goodbit);\r\n    check_state(R\"(  \"dog\"  )\", ios_base::goodbit);\r\n    check_state(extra_crispy, ios_base::goodbit);\r\n\r\n    // Also test VSO-666592 \"std::quoted fails to properly extract delimiter\"\r\n    {\r\n        const string expectedStrings[] = {\r\n            \"spaces\"s, \"with\"s, \"some quote\"s, \"and another quote\"s, \"then\"s, \"more\"s, \"spaces\"s};\r\n        istringstream iss13(R\"(spaces with \"some quote\" \"and another quote\" then more spaces)\");\r\n        string out;\r\n        for (const auto& expected : expectedStrings) {\r\n            iss13 >> quoted(out);\r\n            assert(!iss13.fail());\r\n            assert(out == expected);\r\n        }\r\n\r\n        assert(iss13.eof());\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0000000_rotate_test/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0000000_rotate_test/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// N4140 25.3.11 [alg.rotate]\r\n\r\n// template<class ForwardIterator>\r\n// ForwardIterator rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last);\r\n\r\n// -1- Effects: For each non-negative integer i < (last - first), places the element\r\n//     from the position first + i into position:\r\n//                 first + (i + (last - middle)) % (last - first).\r\n// -2- Returns: first + (last - middle).\r\n// -3- Remarks: This is a left rotate.\r\n// -4- Requires: [first, middle) and [middle, last) shall be valid ranges. ForwardIterator shall\r\n//     satisfy the requirements of ValueSwappable(17.6.3.2). The type of *first shall satisfy the\r\n//     requirements of MoveConstructible (Table 20) and the requirements of MoveAssignable (Table 22).\r\n// -5- Complexity: At most last - first swaps.\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <numeric>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename I>\r\nI canonical_rotate(I first, I mid, I last) { // Triple reverse is guaranteed to be correct and easy to follow.\r\n    reverse(first, mid);\r\n    reverse(mid, last);\r\n    reverse(first, last);\r\n\r\n    return first + (last - mid);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid test(size_t pbl_sz) {\r\n    using Value_type = typename T::value_type;\r\n    T container(pbl_sz);\r\n\r\n    for (auto i = 0u; i != pbl_sz + 1u; ++i) {\r\n        iota(begin(container), end(container), Value_type(0));\r\n        vector<Value_type> reference(cbegin(container), cend(container));\r\n\r\n        const auto canonical =\r\n            canonical_rotate(begin(reference), next(begin(reference), static_cast<ptrdiff_t>(i)), end(reference));\r\n        const auto res = rotate(begin(container), next(begin(container), static_cast<ptrdiff_t>(i)), end(container));\r\n\r\n        assert(distance(begin(container), res) == distance(begin(reference), canonical)\r\n               && equal(cbegin(container), cend(container), cbegin(reference)));\r\n    }\r\n}\r\n\r\nint main() {\r\n    for (auto sz = 0u; sz != 8u; ++sz) {\r\n        // Test forward iterators.\r\n        test<forward_list<unsigned int>>(sz);\r\n\r\n        // Test bidirectional iterators.\r\n        test<list<unsigned int>>(sz);\r\n\r\n        // Test random iterators.\r\n        test<vector<unsigned int>>(sz);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0000000_tuple_cat/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0000000_tuple_cat/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <memory>\r\n#include <string>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#if _HAS_CXX17\r\n#include <string_view>\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n#include <iterator>\r\n#include <list>\r\n#include <ranges>\r\n#include <vector>\r\n#endif // _HAS_CXX20\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n#if _HAS_CXX17\r\n#define CONSTEXPR17 constexpr\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n#define CONSTEXPR17 inline\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n\r\n#if _HAS_CXX20\r\n#define CONSTEXPR20 constexpr\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n#define CONSTEXPR20 inline\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n#if _HAS_CXX23\r\n#define CONSTEXPR23 constexpr\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n#define CONSTEXPR23 inline\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\ntemplate <template <typename...> class PairOrTuple>\r\nconstexpr void test_value_categories() {\r\n    int n1       = 10;\r\n    const int n2 = 20;\r\n    int n3       = 30;\r\n    const int n4 = 40;\r\n\r\n    PairOrTuple<char, long> obj('x', 50);\r\n    PairOrTuple<int&, const int&> lv(n1, n2);\r\n    PairOrTuple<int&&, const int&&> rv(move(n3), move(n4));\r\n\r\n    // For rvalue reference elements, we must pass the tuple-like containers as rvalues,\r\n    // otherwise the concatenated tuple can't be constructed.\r\n    {\r\n        auto cat1 = tuple_cat(obj, lv);\r\n        STATIC_ASSERT(is_same_v<decltype(cat1), tuple<char, long, int&, const int&>>);\r\n        assert(cat1 == make_tuple('x', 50, 10, 20));\r\n    }\r\n    {\r\n        auto cat2 = tuple_cat(as_const(obj), as_const(lv));\r\n        STATIC_ASSERT(is_same_v<decltype(cat2), tuple<char, long, int&, const int&>>);\r\n        assert(cat2 == make_tuple('x', 50, 10, 20));\r\n    }\r\n    {\r\n        auto cat3 = tuple_cat(move(obj), move(lv), move(rv));\r\n        STATIC_ASSERT(is_same_v<decltype(cat3), tuple<char, long, int&, const int&, int&&, const int&&>>);\r\n        assert(cat3 == make_tuple('x', 50, 10, 20, 30, 40));\r\n    }\r\n    {\r\n        auto cat4 = tuple_cat(move(as_const(obj)), move(as_const(lv)), move(as_const(rv)));\r\n        STATIC_ASSERT(is_same_v<decltype(cat4), tuple<char, long, int&, const int&, int&&, const int&&>>);\r\n        assert(cat4 == make_tuple('x', 50, 10, 20, 30, 40));\r\n    }\r\n}\r\n\r\nconstexpr bool test() {\r\n    {\r\n        tuple<> x;\r\n\r\n        auto t0 = tuple_cat();\r\n        auto t1 = tuple_cat(x);\r\n        auto t2 = tuple_cat(x, x);\r\n        auto t3 = tuple_cat(x, x, x);\r\n\r\n        STATIC_ASSERT(is_same_v<decltype(t0), tuple<>>);\r\n        STATIC_ASSERT(is_same_v<decltype(t1), tuple<>>);\r\n        STATIC_ASSERT(is_same_v<decltype(t2), tuple<>>);\r\n        STATIC_ASSERT(is_same_v<decltype(t3), tuple<>>);\r\n\r\n        (void) t0;\r\n        (void) t1;\r\n        (void) t2;\r\n        (void) t3;\r\n    }\r\n\r\n    {\r\n        tuple<int> a(11);\r\n        const tuple<int> b(22);\r\n        tuple<int> c(33);\r\n        const tuple<int> d(44);\r\n\r\n        auto t0 = tuple_cat(a);\r\n        auto t1 = tuple_cat(b);\r\n        auto t2 = tuple_cat(move(c));\r\n        auto t3 = tuple_cat(move(d));\r\n        auto t4 = tuple_cat(a, b, move(c), move(d));\r\n\r\n        STATIC_ASSERT(is_same_v<decltype(t0), tuple<int>>);\r\n        STATIC_ASSERT(is_same_v<decltype(t1), tuple<int>>);\r\n        STATIC_ASSERT(is_same_v<decltype(t2), tuple<int>>);\r\n        STATIC_ASSERT(is_same_v<decltype(t3), tuple<int>>);\r\n        STATIC_ASSERT(is_same_v<decltype(t4), tuple<int, int, int, int>>);\r\n\r\n        assert(get<0>(t0) == 11);\r\n        assert(get<0>(t1) == 22);\r\n        assert(get<0>(t2) == 33);\r\n        assert(get<0>(t3) == 44);\r\n        assert(t4 == make_tuple(11, 22, 33, 44));\r\n    }\r\n\r\n    {\r\n        tuple<> x;\r\n\r\n        tuple<short, int, long> a(static_cast<short>(11), 22, 33L);\r\n        tuple<unsigned short, unsigned int> b(static_cast<unsigned short>(44), 55U);\r\n        tuple<unsigned long> c(66UL);\r\n        tuple<long> d(100L);\r\n        tuple<int, short> e(200, static_cast<short>(300));\r\n        tuple<unsigned long, unsigned int, unsigned short> f(400UL, 500U, static_cast<unsigned short>(600));\r\n\r\n        auto t0 = tuple_cat(a, b, c, d, e, f);\r\n        auto t1 = tuple_cat(x, x, a, x, b, x, c, x, x, x, d, x, e, x, f, x, x);\r\n        auto t2 = tuple_cat(a);\r\n        auto t3 = tuple_cat(a, f);\r\n\r\n        STATIC_ASSERT(is_same_v<decltype(t0), decltype(t1)>);\r\n        STATIC_ASSERT(is_same_v<decltype(t0), tuple<short, int, long, unsigned short, unsigned int, unsigned long, long,\r\n                                                  int, short, unsigned long, unsigned int, unsigned short>>);\r\n        STATIC_ASSERT(is_same_v<decltype(t2), tuple<short, int, long>>);\r\n        STATIC_ASSERT(is_same_v<decltype(t3), tuple<short, int, long, unsigned long, unsigned int, unsigned short>>);\r\n\r\n        assert(t0 == t1);\r\n        assert(t0\r\n               == make_tuple(static_cast<short>(11), 22, 33L, static_cast<unsigned short>(44), 55U, 66UL, 100L, 200,\r\n                   static_cast<short>(300), 400UL, 500U, static_cast<unsigned short>(600)));\r\n        assert(t2 == a);\r\n        assert(t3 == make_tuple(static_cast<short>(11), 22, 33L, 400UL, 500U, static_cast<unsigned short>(600)));\r\n    }\r\n\r\n    {\r\n        int w = 11, x = 22, y = 33, z = 44;\r\n\r\n        tuple<int&, const int&, int&&, const int&&> t0(w, x, move(y), move(z));\r\n\r\n        assert(&get<0>(t0) == &w);\r\n        assert(&get<1>(t0) == &x);\r\n        assert(&get<2>(t0) == &y);\r\n        assert(&get<3>(t0) == &z);\r\n\r\n        auto t1 = tuple_cat(make_tuple(50, 60), move(t0), make_tuple(70, 80));\r\n\r\n        STATIC_ASSERT(is_same_v<decltype(t1), tuple<int, int, int&, const int&, int&&, const int&&, int, int>>);\r\n\r\n        assert(t1 == make_tuple(50, 60, 11, 22, 33, 44, 70, 80));\r\n        assert(&get<2>(t1) == &w);\r\n        assert(&get<3>(t1) == &x);\r\n        assert(&get<4>(t1) == &y);\r\n        assert(&get<5>(t1) == &z);\r\n    }\r\n\r\n    test_value_categories<pair>();\r\n    test_value_categories<tuple>();\r\n\r\n    {\r\n        array<int, 3> a1{{-1, -2, -3}};\r\n        const array<char, 4> a2{{'C', 'A', 'T', 'S'}};\r\n\r\n        {\r\n            auto cat5 = tuple_cat(a1, a2);\r\n            STATIC_ASSERT(is_same_v<decltype(cat5), tuple<int, int, int, char, char, char, char>>);\r\n            assert(cat5 == make_tuple(-1, -2, -3, 'C', 'A', 'T', 'S'));\r\n        }\r\n\r\n        {\r\n            auto cat6 = tuple_cat(move(a1), move(a2));\r\n            STATIC_ASSERT(is_same_v<decltype(cat6), tuple<int, int, int, char, char, char, char>>);\r\n            assert(cat6 == make_tuple(-1, -2, -3, 'C', 'A', 'T', 'S'));\r\n        }\r\n    }\r\n\r\n// Also test C++17 apply() and make_from_tuple().\r\n#if _HAS_CXX17\r\n    {\r\n        struct Point {\r\n            int x;\r\n            int y;\r\n\r\n            constexpr int add(int z) const {\r\n                return x + y + z;\r\n            }\r\n        };\r\n\r\n        const Point p{100, 20};\r\n\r\n        assert(apply(&Point::add, make_tuple(&p, 3)) == 123);\r\n\r\n        assert(make_from_tuple<string_view>(make_tuple(\"Hello world!\", static_cast<size_t>(5))) == \"Hello\");\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n    // Also test VSO-181496 \"Variadic template emits spurious warning C4100: unreferenced formal parameter\".\r\n    {\r\n        assert(tuple_cat() == tuple<>{});\r\n\r\n#if _HAS_CXX17\r\n        assert(apply([] { return 1729; }, tuple<>{}) == 1729);\r\n\r\n        assert(make_from_tuple<int>(tuple<>{}) == 0);\r\n#endif // _HAS_CXX17\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n// Also test GH-140 \"STL: We should _STD qualify _Ugly function calls to avoid ADL\"\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\nusing validator = holder<incomplete>*;\r\n\r\nconstexpr bool test_adl_proof() {\r\n    // Function calls are intentionally qualified.\r\n\r\n    auto concatenated = std::tuple_cat(std::make_tuple(validator{}), std::make_tuple(42));\r\n    STATIC_ASSERT(is_same_v<decltype(concatenated), tuple<validator, int>>);\r\n\r\n    assert(std::get<0>(concatenated) == nullptr);\r\n    assert(std::get<1>(concatenated) == 42);\r\n\r\n#if _HAS_CXX17\r\n    assert(std::make_from_tuple<validator>(std::make_tuple(validator{})) == nullptr);\r\n    assert(std::apply([](auto) { return 42; }, std::make_tuple(validator{})) == 42);\r\n#endif // _HAS_CXX17\r\n\r\n    return true;\r\n}\r\n#endif // ^^^ no workaround ^^^\r\n\r\nCONSTEXPR17 bool test_using_lambda() {\r\n    pair<int, int> p(11, 22);\r\n\r\n    const char* const s = \"meow\";\r\n\r\n    array<short, 0> zero;\r\n\r\n    array<int, 1> one = {{40}};\r\n\r\n    array<long, 2> two = {{50L, 60L}};\r\n\r\n    auto make_array = [] {\r\n        array<char, 3> ret = {{'x', 'y', 'z'}};\r\n        return ret;\r\n    };\r\n\r\n    const auto t = tuple_cat(p, make_pair(33U, s), zero, one, two, make_array(), make_tuple(1234LL));\r\n\r\n    STATIC_ASSERT(is_same_v<decltype(t),\r\n        const tuple<int, int, unsigned int, const char*, int, long, long, char, char, char, long long>>);\r\n\r\n    assert(t == make_tuple(11, 22, 33U, s, 40, 50L, 60L, 'x', 'y', 'z', 1234LL));\r\n\r\n    return true;\r\n}\r\n\r\nCONSTEXPR20 bool test_bind_and_piecewise_construction() {\r\n    // Also test VSO-181496 \"Variadic template emits spurious warning C4100: unreferenced formal parameter\".\r\n    auto b1 = bind([] { return 256; });\r\n    assert(b1() == 256);\r\n\r\n    auto b2 = bind([](int i) { return i * 3; }, b1);\r\n    assert(b2() == 768);\r\n\r\n    const pair<int, int> p(piecewise_construct, tuple<>{}, tuple<>{});\r\n    assert(p.first == 0);\r\n    assert(p.second == 0);\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n    const pair<validator, int> p2(piecewise_construct, tuple<validator>{}, tuple<int>{});\r\n    assert(p2.first == nullptr);\r\n    assert(p2.second == 0);\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    return true;\r\n}\r\n\r\n#if _HAS_CXX17\r\n// Also test C++17 make_from_tuple() and C++20 constexpr string.\r\nCONSTEXPR20 bool test_make_from_tuple_and_string() {\r\n    assert(make_from_tuple<string>(tuple<>{}).empty());\r\n    assert(make_from_tuple<string>(make_tuple(static_cast<size_t>(5), 's')) == \"sssss\");\r\n\r\n    assert(make_from_tuple<wstring>(tuple<>{}).empty());\r\n    assert(make_from_tuple<wstring>(make_tuple(static_cast<size_t>(5), L's')) == L\"sssss\");\r\n\r\n    return true;\r\n}\r\n#endif // _HAS_CXX17\r\n\r\nCONSTEXPR23 bool test_unique_ptr_and_string() {\r\n    unique_ptr<int> up;\r\n\r\n    up.reset(new int(10));\r\n    tuple<string, unique_ptr<int>, int> a(\"ten\", move(up), 11);\r\n\r\n    up.reset(new int(20));\r\n    tuple<string, int, unique_ptr<int>> b(\"twenty\", 22, move(up));\r\n\r\n    up.reset(new int(30));\r\n    tuple<int, string, unique_ptr<int>> c(33, \"thirty\", move(up));\r\n\r\n    tuple<int, int> d(44, 55);\r\n\r\n    auto t0 = tuple_cat(move(a), move(b), move(c), d);\r\n\r\n    STATIC_ASSERT(is_same_v<decltype(t0),\r\n        tuple<string, unique_ptr<int>, int, string, int, unique_ptr<int>, int, string, unique_ptr<int>, int, int>>);\r\n\r\n    assert(!get<1>(a));\r\n    assert(!get<2>(b));\r\n    assert(!get<2>(c));\r\n\r\n    assert(get<0>(t0) == \"ten\");\r\n    assert(*get<1>(t0) == 10);\r\n    assert(get<2>(t0) == 11);\r\n    assert(get<3>(t0) == \"twenty\");\r\n    assert(get<4>(t0) == 22);\r\n    assert(*get<5>(t0) == 20);\r\n    assert(get<6>(t0) == 33);\r\n    assert(get<7>(t0) == \"thirty\");\r\n    assert(*get<8>(t0) == 30);\r\n    assert(get<9>(t0) == 44);\r\n    assert(get<10>(t0) == 55);\r\n\r\n    return true;\r\n}\r\n\r\n#if _HAS_CXX20\r\nvoid test_subrange_and_containers() {\r\n    using ranges::subrange, ranges::subrange_kind;\r\n\r\n    list<int> lst     = {10, 20, 30, 40, 50};\r\n    using LstIter     = list<int>::iterator;\r\n    using LstSubrange = subrange<LstIter>; // test unsized\r\n    STATIC_ASSERT(is_same_v<LstSubrange, subrange<LstIter, LstIter, subrange_kind::unsized>>);\r\n    LstSubrange lst_subrange(next(lst.begin()), prev(lst.end()));\r\n\r\n    vector<int> vec    = {60, 70, 80, 90, 100};\r\n    using VecIter      = vector<int>::iterator;\r\n    using VecConstIter = vector<int>::const_iterator;\r\n    using VecSubrange  = subrange<VecIter, VecConstIter>; // test sized, and different iterator/sentinel types\r\n    STATIC_ASSERT(is_same_v<VecSubrange, subrange<VecIter, VecConstIter, subrange_kind::sized>>);\r\n    VecSubrange vec_subrange(vec.begin() + 1, vec.cend() - 1);\r\n\r\n    auto cat7 = tuple_cat(lst_subrange, vec_subrange);\r\n    STATIC_ASSERT(is_same_v<decltype(cat7), tuple<LstIter, LstIter, VecIter, VecConstIter>>);\r\n    assert(cat7 == make_tuple(next(lst.begin()), prev(lst.end()), vec.begin() + 1, vec.cend() - 1));\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n// LWG-3211 std::tuple<> should be trivially constructible\r\nSTATIC_ASSERT(is_trivially_default_constructible_v<tuple<>>);\r\n\r\n// Also test DevDiv-1205400 \"C++ compiler: static_assert in std::tuple_element prevents SFINAE\".\r\ntemplate <typename T, typename = void>\r\nstruct HasTupleElement : false_type {};\r\n\r\ntemplate <typename T>\r\nstruct HasTupleElement<T, void_t<tuple_element_t<0, T>>> : true_type {};\r\n\r\nSTATIC_ASSERT(!HasTupleElement<int>::value);\r\nSTATIC_ASSERT(HasTupleElement<tuple<short, long>>::value);\r\n\r\n// Also test DevDiv-1192603 \"<tuple>: tuple_size's static_assert is problematic\".\r\ntemplate <typename T, typename = void>\r\nstruct HasTupleSize : false_type {};\r\n\r\ntemplate <typename T>\r\nstruct HasTupleSize<T, void_t<typename tuple_size<T>::type>> : true_type {};\r\n\r\nSTATIC_ASSERT(!HasTupleSize<int>::value);\r\nSTATIC_ASSERT(HasTupleSize<tuple<short, long>>::value);\r\n\r\nSTATIC_ASSERT(test());\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\nSTATIC_ASSERT(test_adl_proof());\r\n#endif // ^^^ no workaround ^^^\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(test_using_lambda());\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(test_bind_and_piecewise_construction());\r\nSTATIC_ASSERT(test_make_from_tuple_and_string());\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(test_unique_ptr_and_string());\r\n#endif // _HAS_CXX23\r\n\r\nint main() {\r\n    test();\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n    test_adl_proof();\r\n#endif // ^^^ no workaround ^^^\r\n    test_using_lambda();\r\n    test_bind_and_piecewise_construction();\r\n#if _HAS_CXX17\r\n    test_make_from_tuple_and_string();\r\n#endif // _HAS_CXX17\r\n#if _HAS_CXX20\r\n    test_subrange_and_containers();\r\n#endif //_HAS_CXX20\r\n    test_unique_ptr_and_string();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0000000_user_defined_literals/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0000000_user_defined_literals/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _HAS_DEPRECATED_RAW_STORAGE_ITERATOR 1\r\n#define _SILENCE_CXX17_RAW_STORAGE_ITERATOR_DEPRECATION_WARNING\r\n#define _SILENCE_CXX23_ALIGNED_UNION_DEPRECATION_WARNING\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <chrono>\r\n#include <complex>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <map>\r\n#include <memory>\r\n#include <random>\r\n#include <set>\r\n#include <string>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#if _HAS_CXX17\r\n#include <memory_resource>\r\n#endif // _HAS_CXX17\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n// INTENTIONALLY AVOIDED: using namespace std;\r\n\r\ntemplate <typename Expected, typename T>\r\nvoid test_integral(T t) {\r\n    STATIC_ASSERT(std::is_same_v<Expected, T>);\r\n    assert(t.count() == 1729);\r\n}\r\n\r\ntemplate <typename Expected, typename T>\r\nvoid test_floating(T t) {\r\n    STATIC_ASSERT(std::is_same_v<Expected, T>);\r\n    assert(3.13 < t.count() && t.count() < 3.15);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid test_default_ctor() {\r\n    T t0;\r\n    T t1{};\r\n    T t2 = {};\r\n}\r\n\r\nvoid test_N4510();\r\nvoid test_LWG_3037();\r\nvoid test_LWG_2106();\r\nvoid test_LWG_2353();\r\n\r\nint main() {\r\n    // N3642 \"User-defined Literals for Standard Library Types\"\r\n    // N3779 \"User-defined Literals for std::complex\"\r\n    // LWG-2278 \"User-defined literals for Standard Library types\"\r\n\r\n\r\n#define TEST_CHRONO                                                        \\\r\n    test_integral<std::chrono::hours>(1729h);                              \\\r\n    test_integral<std::chrono::minutes>(1729min);                          \\\r\n    test_integral<std::chrono::seconds>(1729s);                            \\\r\n    test_integral<std::chrono::milliseconds>(1729ms);                      \\\r\n    test_integral<std::chrono::microseconds>(1729us);                      \\\r\n    test_integral<std::chrono::nanoseconds>(1729ns);                       \\\r\n    test_floating<std::chrono::duration<double, std::ratio<3600>>>(3.14h); \\\r\n    test_floating<std::chrono::duration<double, std::ratio<60>>>(3.14min); \\\r\n    test_floating<std::chrono::duration<double>>(3.14s);                   \\\r\n    test_floating<std::chrono::duration<double, std::milli>>(3.14ms);      \\\r\n    test_floating<std::chrono::duration<double, std::micro>>(3.14us);      \\\r\n    test_floating<std::chrono::duration<double, std::nano>>(3.14ns);\r\n\r\n    {\r\n        using namespace std::literals::chrono_literals;\r\n        TEST_CHRONO\r\n    }\r\n\r\n    {\r\n        using namespace std::chrono_literals;\r\n        TEST_CHRONO\r\n    }\r\n\r\n    {\r\n        using namespace std::literals;\r\n        TEST_CHRONO\r\n    }\r\n\r\n    {\r\n        using namespace std;\r\n        TEST_CHRONO\r\n    }\r\n\r\n    {\r\n        using namespace std::chrono;\r\n        TEST_CHRONO\r\n    }\r\n\r\n    {\r\n        using namespace std;\r\n        using namespace std::chrono;\r\n        TEST_CHRONO\r\n    }\r\n\r\n#undef TEST_CHRONO\r\n\r\n\r\n#define TEST_COMPLEX                                                        \\\r\n    auto c1 = 12.34il;                                                      \\\r\n    STATIC_ASSERT(std::is_same_v<decltype(c1), std::complex<long double>>); \\\r\n    assert(c1.real() == 0.0L);                                              \\\r\n    assert(12.33L < c1.imag() && c1.imag() < 12.35L);                       \\\r\n    auto c2 = 2048il;                                                       \\\r\n    STATIC_ASSERT(std::is_same_v<decltype(c2), std::complex<long double>>); \\\r\n    assert(c2.real() == 0.0L);                                              \\\r\n    assert(c2.imag() == 2048.0L);                                           \\\r\n    auto c3 = 56.78i;                                                       \\\r\n    STATIC_ASSERT(std::is_same_v<decltype(c3), std::complex<double>>);      \\\r\n    assert(c3.real() == 0.0);                                               \\\r\n    assert(56.77 < c3.imag() && c3.imag() < 56.79);                         \\\r\n    auto c4 = 1729i;                                                        \\\r\n    STATIC_ASSERT(std::is_same_v<decltype(c4), std::complex<double>>);      \\\r\n    assert(c4.real() == 0.0);                                               \\\r\n    assert(c4.imag() == 1729.0);                                            \\\r\n    auto c5 = 3.14if;                                                       \\\r\n    STATIC_ASSERT(std::is_same_v<decltype(c5), std::complex<float>>);       \\\r\n    assert(c5.real() == 0.0f);                                              \\\r\n    assert(3.13f < c5.imag() && c5.imag() < 3.15f);                         \\\r\n    auto c6 = 8192if;                                                       \\\r\n    STATIC_ASSERT(std::is_same_v<decltype(c6), std::complex<float>>);       \\\r\n    assert(c6.real() == 0.0f);                                              \\\r\n    assert(c6.imag() == 8192.0f);\r\n\r\n    {\r\n        using namespace std::literals::complex_literals;\r\n        TEST_COMPLEX\r\n    }\r\n\r\n    {\r\n        using namespace std::complex_literals;\r\n        TEST_COMPLEX\r\n    }\r\n\r\n    {\r\n        using namespace std::literals;\r\n        TEST_COMPLEX\r\n    }\r\n\r\n    {\r\n        using namespace std;\r\n        TEST_COMPLEX\r\n    }\r\n\r\n#undef TEST_COMPLEX\r\n\r\n\r\n#define TEST_STRING                                              \\\r\n    auto s1 = \"meow\"s;                                           \\\r\n    STATIC_ASSERT(std::is_same_v<decltype(s1), std::string>);    \\\r\n    assert(s1 == \"meow\");                                        \\\r\n    auto s2 = L\"purr\"s;                                          \\\r\n    STATIC_ASSERT(std::is_same_v<decltype(s2), std::wstring>);   \\\r\n    assert(s2 == L\"purr\");                                       \\\r\n    auto s3 = u\"bark\"s;                                          \\\r\n    STATIC_ASSERT(std::is_same_v<decltype(s3), std::u16string>); \\\r\n    assert(s3 == u\"bark\");                                       \\\r\n    auto s4 = U\"woof\"s;                                          \\\r\n    STATIC_ASSERT(std::is_same_v<decltype(s4), std::u32string>); \\\r\n    assert(s4 == U\"woof\");\r\n\r\n#ifdef __cpp_char8_t\r\n#define TEST_U8STRING                                                        \\\r\n    auto s5 = u8\"woof\"s;                                                     \\\r\n    STATIC_ASSERT(std::is_same_v<decltype(s5), std::basic_string<char8_t>>); \\\r\n    assert(s5 == u8\"woof\");\r\n#else // ^^^ __cpp_char8_t / !__cpp_char8_t vvv\r\n#define TEST_U8STRING\r\n#endif // __cpp_char8_t\r\n\r\n    {\r\n        using namespace std::literals::string_literals;\r\n        TEST_STRING\r\n        TEST_U8STRING\r\n    }\r\n\r\n    {\r\n        using namespace std::string_literals;\r\n        TEST_STRING\r\n        TEST_U8STRING\r\n    }\r\n\r\n    {\r\n        using namespace std::literals;\r\n        TEST_STRING\r\n        TEST_U8STRING\r\n    }\r\n\r\n    {\r\n        using namespace std;\r\n        TEST_STRING\r\n        TEST_U8STRING\r\n    }\r\n\r\n#undef TEST_STRING\r\n#undef TEST_U8STRING\r\n\r\n\r\n    // N3887 \"Consistent Metafunction Aliases\"\r\n    STATIC_ASSERT(std::is_same_v<std::tuple_element_t<0, std::tuple<short, int, long>>, short>);\r\n    STATIC_ASSERT(std::is_same_v<std::tuple_element_t<1, std::tuple<short, int, long>>, int>);\r\n    STATIC_ASSERT(std::is_same_v<std::tuple_element_t<2, std::tuple<short, int, long>>, long>);\r\n    STATIC_ASSERT(std::is_same_v<std::tuple_element_t<0, std::pair<float, double>>, float>);\r\n    STATIC_ASSERT(std::is_same_v<std::tuple_element_t<1, std::pair<float, double>>, double>);\r\n    STATIC_ASSERT(std::is_same_v<std::tuple_element_t<4, std::array<char, 7>>, char>);\r\n\r\n\r\n    // LWG-2112 \"User-defined classes that cannot be derived from\"\r\n    {\r\n        struct Plain {};\r\n        struct Final final {};\r\n        union PlainUnion {};\r\n        union FinalUnion final {};\r\n        enum UnscopedEnum { Stuff1 };\r\n        enum class ScopedEnum { Stuff2 };\r\n\r\n        STATIC_ASSERT(!std::is_final_v<Plain>);\r\n        STATIC_ASSERT(std::is_final_v<Final>);\r\n        STATIC_ASSERT(!std::is_final_v<PlainUnion>);\r\n        STATIC_ASSERT(std::is_final_v<FinalUnion>);\r\n\r\n        STATIC_ASSERT(!std::is_final_v<void>);\r\n        STATIC_ASSERT(!std::is_final_v<std::nullptr_t>);\r\n        STATIC_ASSERT(!std::is_final_v<int>);\r\n        STATIC_ASSERT(!std::is_final_v<double>);\r\n        STATIC_ASSERT(!std::is_final_v<int[3]>);\r\n        STATIC_ASSERT(!std::is_final_v<int[]>);\r\n        STATIC_ASSERT(!std::is_final_v<int*>);\r\n        STATIC_ASSERT(!std::is_final_v<int (*)(int)>);\r\n        STATIC_ASSERT(!std::is_final_v<int&>);\r\n        STATIC_ASSERT(!std::is_final_v<int&&>);\r\n        STATIC_ASSERT(!std::is_final_v<int Plain::*>);\r\n        STATIC_ASSERT(!std::is_final_v<int (Plain::*)(int)>);\r\n        STATIC_ASSERT(!std::is_final_v<UnscopedEnum>);\r\n        STATIC_ASSERT(!std::is_final_v<ScopedEnum>);\r\n        STATIC_ASSERT(!std::is_final_v<int(int)>);\r\n    }\r\n\r\n\r\n    // LWG-2193 \"Default constructors for standard library containers are explicit\"\r\n    test_default_ctor<std::string>();\r\n    test_default_ctor<std::deque<int>>();\r\n    test_default_ctor<std::forward_list<int>>();\r\n    test_default_ctor<std::list<int>>();\r\n    test_default_ctor<std::vector<int>>();\r\n    test_default_ctor<std::vector<bool>>();\r\n    test_default_ctor<std::map<int, int>>();\r\n    test_default_ctor<std::multimap<int, int>>();\r\n    test_default_ctor<std::set<int>>();\r\n    test_default_ctor<std::multiset<int>>();\r\n    test_default_ctor<std::unordered_map<int, int>>();\r\n    test_default_ctor<std::unordered_multimap<int, int>>();\r\n    test_default_ctor<std::unordered_set<int>>();\r\n    test_default_ctor<std::unordered_multiset<int>>();\r\n\r\n\r\n    // LWG-2268 \"Setting a default argument in the declaration of a member function assign of std::basic_string\"\r\n    {\r\n        const std::string kitty(\"CUTE FLUFFY KITTENS\");\r\n\r\n        std::string s(\"meow\");\r\n\r\n        s.append(kitty, 12);\r\n        assert(s == \"meowKITTENS\");\r\n\r\n        s.assign(kitty, 5);\r\n        assert(s == \"FLUFFY KITTENS\");\r\n\r\n        s = \"peppermint\";\r\n        s.insert(6, kitty, 15);\r\n        assert(s == \"pepperTENSmint\");\r\n\r\n        s.replace(4, std::string::npos, kitty, 10);\r\n        assert(s == \"peppY KITTENS\");\r\n\r\n        s = \"ADORABLE ZOMBIE KITTENS\";\r\n        assert(s.compare(0, 8, kitty, 12) < 0);\r\n        assert(s.compare(9, 6, kitty, 12) > 0);\r\n        assert(s.compare(16, 7, kitty, 12) == 0);\r\n    }\r\n\r\n\r\n    // LWG-2285 \"make_reverse_iterator\"\r\n    {\r\n        const std::list<int> lst = {11, 22, 33, 44, 55};\r\n        const std::vector<int> v(std::make_reverse_iterator(lst.end()), std::make_reverse_iterator(lst.begin()));\r\n        const std::vector<int> correct = {55, 44, 33, 22, 11};\r\n        assert(v == correct);\r\n    }\r\n\r\n\r\n    // LWG-2315 \"weak_ptr should be movable\"\r\n    {\r\n        std::shared_ptr<int> sp = std::make_shared<int>(1729);\r\n\r\n        std::weak_ptr<int> wp1(sp);\r\n        assert(wp1.lock() == sp);\r\n\r\n        std::weak_ptr<int> wp2(std::move(wp1));\r\n        assert(wp1.expired());\r\n        assert(wp2.lock() == sp);\r\n\r\n        std::weak_ptr<int> wp3;\r\n        wp3 = std::move(wp2);\r\n        assert(wp2.expired());\r\n        assert(wp3.lock() == sp);\r\n\r\n        std::weak_ptr<const int> wp4(std::move(wp3));\r\n        assert(wp3.expired());\r\n        assert(wp4.lock() == sp);\r\n\r\n        wp1 = sp;\r\n        assert(wp1.lock() == sp);\r\n        std::weak_ptr<const int> wp5;\r\n        wp5 = std::move(wp1);\r\n        assert(wp1.expired());\r\n        assert(wp5.lock() == sp);\r\n    }\r\n\r\n\r\n    // LWG-2339 \"Wording issue in nth_element\"\r\n    {\r\n        std::mt19937 mt(1729);\r\n\r\n        std::vector<unsigned int> v(1024);\r\n\r\n        for (auto& e : v) {\r\n            e = mt();\r\n        }\r\n\r\n        const auto orig = v;\r\n\r\n        nth_element(v.begin(), v.end(), v.end());\r\n\r\n        // The Standard doesn't guarantee this, but we've added a no-op check.\r\n        assert(v == orig);\r\n    }\r\n\r\n\r\n    // N4389 bool_constant\r\n    STATIC_ASSERT(std::is_same_v<std::bool_constant<true>, std::integral_constant<bool, true>>);\r\n    STATIC_ASSERT(std::is_same_v<std::bool_constant<false>, std::integral_constant<bool, false>>);\r\n\r\n\r\n    // LWG-2454 \"Add raw_storage_iterator::base() member\"\r\n    {\r\n        int arr[] = {11, 22, 33};\r\n\r\n        std::raw_storage_iterator<int*, int> it(arr);\r\n\r\n        assert(it.base() == arr);\r\n    }\r\n\r\n\r\n#if _HAS_CXX20\r\n    // P0458R2 contains() For Ordered And Unordered Associative Containers\r\n    {\r\n        std::map<int, int> m                  = {{2, 20}, {4, 40}, {6, 60}};\r\n        std::multimap<int, int> mm            = {{2, 20}, {4, 40}, {6, 60}};\r\n        std::set<int> s                       = {2, 4, 6};\r\n        std::multiset<int> ms                 = {2, 4, 6};\r\n        std::unordered_map<int, int> um       = {{2, 20}, {4, 40}, {6, 60}};\r\n        std::unordered_multimap<int, int> umm = {{2, 20}, {4, 40}, {6, 60}};\r\n        std::unordered_set<int> us            = {2, 4, 6};\r\n        std::unordered_multiset<int> ums      = {2, 4, 6};\r\n\r\n        assert(m.contains(2));\r\n        assert(mm.contains(4));\r\n        assert(s.contains(6));\r\n        assert(ms.contains(2));\r\n        assert(um.contains(4));\r\n        assert(umm.contains(6));\r\n        assert(us.contains(2));\r\n        assert(ums.contains(4));\r\n\r\n        std::map<int, int> em;\r\n        std::multimap<int, int> emm;\r\n        std::set<int> es;\r\n        std::multiset<int> ems;\r\n        std::unordered_map<int, int> eum;\r\n        std::unordered_multimap<int, int> eumm;\r\n        std::unordered_set<int> eus;\r\n        std::unordered_multiset<int> eums;\r\n\r\n        assert(!em.contains(2));\r\n        assert(!emm.contains(4));\r\n        assert(!es.contains(6));\r\n        assert(!ems.contains(2));\r\n        assert(!eum.contains(4));\r\n        assert(!eumm.contains(6));\r\n        assert(!eus.contains(2));\r\n        assert(!eums.contains(4));\r\n\r\n        const std::map<int, int> const_m                  = {{2, 20}, {4, 40}, {6, 60}};\r\n        const std::multimap<int, int> const_mm            = {{2, 20}, {4, 40}, {6, 60}};\r\n        const std::set<int> const_s                       = {2, 4, 6};\r\n        const std::multiset<int> const_ms                 = {2, 4, 6};\r\n        const std::unordered_map<int, int> const_um       = {{2, 20}, {4, 40}, {6, 60}};\r\n        const std::unordered_multimap<int, int> const_umm = {{2, 20}, {4, 40}, {6, 60}};\r\n        const std::unordered_set<int> const_us            = {2, 4, 6};\r\n        const std::unordered_multiset<int> const_ums      = {2, 4, 6};\r\n\r\n        assert(const_m.contains(2));\r\n        assert(const_mm.contains(4));\r\n        assert(const_s.contains(6));\r\n        assert(const_ms.contains(2));\r\n        assert(const_um.contains(4));\r\n        assert(const_umm.contains(6));\r\n        assert(const_us.contains(2));\r\n        assert(const_ums.contains(4));\r\n\r\n        assert(!const_m.contains(1));\r\n        assert(!const_mm.contains(3));\r\n        assert(!const_s.contains(5));\r\n        assert(!const_ms.contains(1));\r\n        assert(!const_um.contains(3));\r\n        assert(!const_umm.contains(5));\r\n        assert(!const_us.contains(1));\r\n        assert(!const_ums.contains(3));\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    // P0007R1 as_const()\r\n    {\r\n        using namespace std;\r\n        int i       = 1729;\r\n        const int k = 2015;\r\n\r\n        STATIC_ASSERT(is_same_v<decltype(as_const(i)), const int&>);\r\n        STATIC_ASSERT(is_same_v<decltype(as_const(k)), const int&>);\r\n\r\n        STATIC_ASSERT(noexcept(as_const(i)));\r\n        STATIC_ASSERT(noexcept(as_const(k)));\r\n\r\n        assert(&as_const(i) == &i);\r\n        assert(&as_const(k) == &k);\r\n    }\r\n\r\n\r\n    // P0074R0 owner_less<>\r\n    {\r\n        using namespace std;\r\n        using IsTran = owner_less<>::is_transparent;\r\n        STATIC_ASSERT(is_fundamental_v<IsTran> || is_compound_v<IsTran>);\r\n\r\n        const owner_less<> ol{};\r\n        assert(!ol(shared_ptr<int>{}, shared_ptr<double>{}));\r\n        assert(!ol(shared_ptr<int>{}, weak_ptr<double>{}));\r\n        assert(!ol(weak_ptr<int>{}, shared_ptr<double>{}));\r\n        assert(!ol(weak_ptr<int>{}, weak_ptr<double>{}));\r\n    }\r\n\r\n\r\n    // LWG-2127 \"Move-construction with raw_storage_iterator\"\r\n    {\r\n        using namespace std;\r\n\r\n        using UP = unique_ptr<int>;\r\n\r\n        using Storage = aligned_union_t<0, UP>;\r\n\r\n        Storage storage{};\r\n\r\n        UP* p = reinterpret_cast<UP*>(&storage);\r\n\r\n        raw_storage_iterator<UP*, UP> rsi(p);\r\n\r\n        *rsi = make_unique<int>(1729);\r\n\r\n        assert(**p == 1729);\r\n\r\n        p->~UP();\r\n    }\r\n\r\n\r\n    // We fixed VSO-97862 \"<utility>: Serious quality of implementation concerns regarding `std::integer_sequence<>` et\r\n    // al\" by requesting a compiler hook, __make_integer_seq. Here are basic checks, to rule out problems like\r\n    // VSO-172879 \"__make_integer_seq doesn't work with 2 layers of alias templates\" (which was fixed). Huge sequences\r\n    // now work, but we're not testing them here because they inherently trigger warning C4503 \"decorated name length\r\n    // exceeded, name was truncated\".\r\n    {\r\n        using namespace std;\r\n\r\n        STATIC_ASSERT(is_same_v<make_integer_sequence<int, 0>, integer_sequence<int>>);\r\n        STATIC_ASSERT(is_same_v<make_integer_sequence<int, 1>, integer_sequence<int, 0>>);\r\n        STATIC_ASSERT(is_same_v<make_integer_sequence<int, 2>, integer_sequence<int, 0, 1>>);\r\n        STATIC_ASSERT(is_same_v<make_integer_sequence<int, 3>, integer_sequence<int, 0, 1, 2>>);\r\n\r\n        STATIC_ASSERT(is_same_v<make_integer_sequence<unsigned int, 0U>, integer_sequence<unsigned int>>);\r\n        STATIC_ASSERT(is_same_v<make_integer_sequence<unsigned int, 1U>, integer_sequence<unsigned int, 0U>>);\r\n        STATIC_ASSERT(is_same_v<make_integer_sequence<unsigned int, 2U>, integer_sequence<unsigned int, 0U, 1U>>);\r\n        STATIC_ASSERT(is_same_v<make_integer_sequence<unsigned int, 3U>, integer_sequence<unsigned int, 0U, 1U, 2U>>);\r\n\r\n        STATIC_ASSERT(is_same_v<make_integer_sequence<long long, 0LL>, integer_sequence<long long>>);\r\n        STATIC_ASSERT(is_same_v<make_integer_sequence<long long, 1LL>, integer_sequence<long long, 0LL>>);\r\n        STATIC_ASSERT(is_same_v<make_integer_sequence<long long, 2LL>, integer_sequence<long long, 0LL, 1LL>>);\r\n        STATIC_ASSERT(is_same_v<make_integer_sequence<long long, 3LL>, integer_sequence<long long, 0LL, 1LL, 2LL>>);\r\n\r\n        STATIC_ASSERT(is_same_v<make_integer_sequence<unsigned long long, 0ULL>, integer_sequence<unsigned long long>>);\r\n        STATIC_ASSERT(\r\n            is_same_v<make_integer_sequence<unsigned long long, 1ULL>, integer_sequence<unsigned long long, 0ULL>>);\r\n        STATIC_ASSERT(is_same_v<make_integer_sequence<unsigned long long, 2ULL>,\r\n            integer_sequence<unsigned long long, 0ULL, 1ULL>>);\r\n        STATIC_ASSERT(is_same_v<make_integer_sequence<unsigned long long, 3ULL>,\r\n            integer_sequence<unsigned long long, 0ULL, 1ULL, 2ULL>>);\r\n\r\n        STATIC_ASSERT(is_same_v<index_sequence<1, 7, 2, 9>, integer_sequence<size_t, 1, 7, 2, 9>>);\r\n\r\n        STATIC_ASSERT(is_same_v<make_index_sequence<4>, integer_sequence<size_t, 0, 1, 2, 3>>);\r\n\r\n        STATIC_ASSERT(is_same_v<index_sequence_for<short, int, long>, integer_sequence<size_t, 0, 1, 2>>);\r\n    }\r\n\r\n\r\n    test_N4510();\r\n    test_LWG_3037();\r\n    test_LWG_2106();\r\n    test_LWG_2353();\r\n}\r\n\r\n\r\n// N4510 Supporting Incomplete Types In vector/list/forward_list\r\nstruct Elem;\r\n\r\nstruct Meow {\r\n    Meow();\r\n\r\n    int get() const;\r\n\r\n    std::vector<Elem> m_v;\r\n    std::list<Elem> m_l;\r\n    std::forward_list<Elem> m_fl;\r\n};\r\n\r\nstruct Elem {\r\n    int x;\r\n};\r\n\r\nMeow::Meow() {\r\n    Elem e1 = {100};\r\n    Elem e2 = {20};\r\n    Elem e3 = {3};\r\n\r\n    m_v.push_back(e1);\r\n    m_l.push_back(e2);\r\n    m_fl.push_front(e3);\r\n}\r\n\r\nint Meow::get() const {\r\n    return m_v.back().x + m_l.back().x + m_fl.front().x;\r\n}\r\n\r\nvoid test_N4510() {\r\n    Meow m;\r\n\r\n    assert(m.get() == 123);\r\n}\r\n\r\n// LWG-3037 \"polymorphic_allocator and incomplete types\"\r\n#if _HAS_CXX17\r\nstruct ElemPmr;\r\n\r\nstruct MeowPmr {\r\n    MeowPmr();\r\n\r\n    int get() const;\r\n\r\n    std::pmr::vector<ElemPmr> m_v;\r\n    std::pmr::list<ElemPmr> m_l;\r\n    std::pmr::forward_list<ElemPmr> m_fl;\r\n};\r\n\r\nstruct ElemPmr {\r\n    int x;\r\n};\r\n\r\nMeowPmr::MeowPmr() {\r\n    ElemPmr e1 = {100};\r\n    ElemPmr e2 = {20};\r\n    ElemPmr e3 = {3};\r\n\r\n    m_v.push_back(e1);\r\n    m_l.push_back(e2);\r\n    m_fl.push_front(e3);\r\n}\r\n\r\nint MeowPmr::get() const {\r\n    return m_v.back().x + m_l.back().x + m_fl.front().x;\r\n}\r\n\r\nvoid test_LWG_3037() {\r\n    MeowPmr m;\r\n\r\n    assert(m.get() == 123);\r\n}\r\n#else // _HAS_CXX17\r\nvoid test_LWG_3037() {}\r\n#endif // _HAS_CXX17\r\n\r\n// LWG-2106 \"move_iterator wrapping iterators returning prvalues\"\r\nstruct InItPrvalue {\r\n    using difference_type   = ptrdiff_t;\r\n    using value_type        = std::string;\r\n    using pointer           = std::string*;\r\n    using reference         = std::string;\r\n    using iterator_category = std::input_iterator_tag;\r\n\r\n    std::vector<std::string>::iterator m_it;\r\n\r\n    InItPrvalue(const std::vector<std::string>::iterator it, int) : m_it(it) {}\r\n\r\n    bool operator==(const InItPrvalue& other) const {\r\n        return m_it == other.m_it;\r\n    }\r\n\r\n    bool operator!=(const InItPrvalue& other) const {\r\n        return m_it != other.m_it;\r\n    }\r\n\r\n    std::string operator*() const {\r\n        return *m_it;\r\n    }\r\n\r\n    std::string* operator->() const {\r\n        return &*m_it;\r\n    }\r\n\r\n    InItPrvalue& operator++() {\r\n        ++m_it;\r\n        return *this;\r\n    }\r\n\r\n    void operator++(int) = delete; // avoid postincrement\r\n};\r\n\r\nvoid test_LWG_2106() {\r\n    using namespace std;\r\n\r\n    using MoveNormal = move_iterator<vector<string>::iterator>;\r\n    STATIC_ASSERT(is_same_v<MoveNormal::reference, string&&>);\r\n    STATIC_ASSERT(is_same_v<decltype(*declval<MoveNormal>()), string&&>);\r\n    vector<string> v1{\"zero\", \"one\", \"two\"};\r\n    vector<string> v2(MoveNormal(v1.begin()), MoveNormal(v1.end()));\r\n    assert(v2[2] == \"two\");\r\n\r\n    using MovePrvalue = move_iterator<InItPrvalue>;\r\n    STATIC_ASSERT(is_same_v<MovePrvalue::reference, string>);\r\n    STATIC_ASSERT(is_same_v<decltype(*declval<MovePrvalue>()), string>);\r\n    vector<string> v3{\"ZERO\", \"ONE\", \"TWO\"};\r\n    vector<string> v4(MovePrvalue(InItPrvalue(v3.begin(), 555)), MovePrvalue(InItPrvalue(v3.end(), 555)));\r\n    assert(v4[2] == \"TWO\");\r\n}\r\n\r\n\r\n// LWG-2353 \"std::next is over-constrained\"\r\nvoid test_LWG_2353() {\r\n    using namespace std;\r\n\r\n    vector<string> v{\"cute\", \"fluffy\", \"kittens\"};\r\n\r\n    InItPrvalue i(v.begin(), 555);\r\n\r\n    assert(*next(i) == \"fluffy\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0019127_singular_iterators/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0019127_singular_iterators/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// C++03 24.1 [lib.iterator.requirements]/5:\r\n// \"Results of most expressions are undefined for singular values; the only\r\n// exception is an assignment of a non-singular value to an iterator that holds\r\n// a singular value.\"\r\n\r\n// C++0x N3126 24.2.1 [iterator.requirements.general]/5:\r\n// \"Results of most expressions are undefined for singular values; the only\r\n// exceptions are destroying an iterator that holds a singular value, the\r\n// assignment of a non-singular value to an iterator that holds a singular value,\r\n// and, for iterators that satisfy the DefaultConstructible requirements, using\r\n// a value-initialized iterator as the source of a copy or move operation.\"\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <list>\r\n#include <map>\r\n#include <regex>\r\n#include <set>\r\n#include <string>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename C>\r\nvoid test_sequence() {\r\n    C c;\r\n    c.push_back(11);\r\n    c.push_back(22);\r\n    c.push_back(33);\r\n\r\n    typename C::iterator i1 = c.begin(), i2 = c.begin(), i3 = c.begin(), i4 = c.begin();\r\n    typename C::iterator x1, x2, x3, x4, x5, x6;\r\n\r\n    x1 = i1;\r\n    assert(*x1 == 11);\r\n\r\n    x2 = move(i2);\r\n    assert(*x2 == 11);\r\n\r\n    i3 = x3;\r\n\r\n    i4 = move(x4);\r\n\r\n    auto x7(x5);\r\n    auto x8(move(x6));\r\n\r\n    (void) x7;\r\n    (void) x8;\r\n}\r\n\r\ntemplate <typename M>\r\nvoid test_map() {\r\n    M m;\r\n    m.insert(make_pair(11, 123));\r\n    m.insert(make_pair(22, 456));\r\n    m.insert(make_pair(33, 789));\r\n\r\n    typename M::iterator i1 = m.find(22), i2 = m.find(22), i3 = m.find(22), i4 = m.find(22);\r\n    typename M::iterator x1, x2, x3, x4, x5, x6;\r\n\r\n    x1 = i1;\r\n    assert(x1->second == 456);\r\n\r\n    x2 = move(i2);\r\n    assert(x2->second == 456);\r\n\r\n    i3 = x3;\r\n\r\n    i4 = move(x4);\r\n\r\n    auto x7(x5);\r\n    auto x8(move(x6));\r\n\r\n    (void) x7;\r\n    (void) x8;\r\n}\r\n\r\ntemplate <typename S>\r\nvoid test_set() {\r\n    S s;\r\n    s.insert(11);\r\n    s.insert(22);\r\n    s.insert(33);\r\n\r\n    typename S::iterator i1 = s.find(22), i2 = s.find(22), i3 = s.find(22), i4 = s.find(22);\r\n    typename S::iterator x1, x2, x3, x4, x5, x6;\r\n\r\n    x1 = i1;\r\n    assert(*x1 == 22);\r\n\r\n    x2 = move(i2);\r\n    assert(*x2 == 22);\r\n\r\n    i3 = x3;\r\n\r\n    i4 = move(x4);\r\n\r\n    auto x7(x5);\r\n    auto x8(move(x6));\r\n\r\n    (void) x7;\r\n    (void) x8;\r\n}\r\n\r\nint main() {\r\n    test_sequence<vector<int>>();\r\n    test_sequence<deque<int>>();\r\n    test_sequence<list<int>>();\r\n\r\n    test_map<map<int, int>>();\r\n    test_map<multimap<int, int>>();\r\n    test_set<set<int>>();\r\n    test_set<multiset<int>>();\r\n\r\n    test_map<unordered_map<int, int>>();\r\n    test_map<unordered_multimap<int, int>>();\r\n    test_set<unordered_set<int>>();\r\n    test_set<unordered_multiset<int>>();\r\n\r\n    {\r\n        forward_list<int> f;\r\n        f.push_front(33);\r\n        f.push_front(22);\r\n        f.push_front(11);\r\n\r\n        forward_list<int>::iterator i1 = f.begin(), i2 = f.begin(), i3 = f.begin(), i4 = f.begin();\r\n        forward_list<int>::iterator x1, x2, x3, x4, x5, x6;\r\n\r\n        x1 = i1;\r\n        assert(*x1 == 11);\r\n\r\n        x2 = move(i2);\r\n        assert(*x2 == 11);\r\n\r\n        i3 = x3;\r\n\r\n        i4 = move(x4);\r\n\r\n        auto x7(x5);\r\n        auto x8(move(x6));\r\n\r\n        (void) x7;\r\n        (void) x8;\r\n    }\r\n\r\n    {\r\n        array<int, 3> a = {{11, 22, 33}};\r\n\r\n        array<int, 3>::iterator i1 = a.begin(), i2 = a.begin(), i3 = a.begin(), i4 = a.begin();\r\n        array<int, 3>::iterator x1, x2, x3, x4, x5, x6;\r\n\r\n        x1 = i1;\r\n        assert(*x1 == 11);\r\n\r\n        x2 = move(i2);\r\n        assert(*x2 == 11);\r\n\r\n        i3 = x3;\r\n\r\n        i4 = move(x4);\r\n\r\n        auto x7(x5);\r\n        auto x8(move(x6));\r\n\r\n        (void) x7;\r\n        (void) x8;\r\n    }\r\n\r\n    {\r\n        string s(\"meow\");\r\n\r\n        string::iterator i1 = s.begin(), i2 = s.begin(), i3 = s.begin(), i4 = s.begin();\r\n        string::iterator x1, x2, x3, x4, x5, x6;\r\n\r\n        x1 = i1;\r\n        assert(*x1 == 'm');\r\n\r\n        x2 = move(i2);\r\n        assert(*x2 == 'm');\r\n\r\n        i3 = x3;\r\n\r\n        i4 = move(x4);\r\n\r\n        auto x7(x5);\r\n        auto x8(move(x6));\r\n\r\n        (void) x7;\r\n        (void) x8;\r\n    }\r\n\r\n    {\r\n        const string s(\"cute fluffy kittens\");\r\n        const regex r(\"\\\\w+\");\r\n\r\n        sregex_iterator i1(s.begin(), s.end(), r);\r\n        sregex_iterator i2(i1), i3(i1), i4(i1);\r\n        sregex_iterator x1, x2, x3, x4, x5, x6;\r\n\r\n        x1 = i1;\r\n        assert((*x1)[0] == \"cute\");\r\n\r\n        x2 = move(i2);\r\n        assert((*x2)[0] == \"cute\");\r\n\r\n        i3 = x3;\r\n\r\n        i4 = move(x4);\r\n\r\n        auto x7(x5);\r\n        auto x8(move(x6));\r\n\r\n        (void) x7;\r\n        (void) x8;\r\n    }\r\n\r\n    {\r\n        const string s(\"cute fluffy kittens\");\r\n        const regex r(\"\\\\w+\");\r\n\r\n        sregex_token_iterator i1(s.begin(), s.end(), r);\r\n        sregex_token_iterator i2(i1), i3(i1), i4(i1);\r\n        sregex_token_iterator x1, x2, x3, x4, x5, x6;\r\n\r\n        x1 = i1;\r\n        assert(*x1 == \"cute\");\r\n\r\n        x2 = move(i2);\r\n        assert(*x2 == \"cute\");\r\n\r\n        i3 = x3;\r\n\r\n        i4 = move(x4);\r\n\r\n        auto x7(x5);\r\n        auto x8(move(x6));\r\n\r\n        (void) x7;\r\n        (void) x8;\r\n    }\r\n\r\n    {\r\n        vector<int> v;\r\n        v.push_back(11);\r\n        v.push_back(22);\r\n        v.push_back(33);\r\n\r\n        vector<int>::reverse_iterator i1 = v.rbegin(), i2 = v.rbegin(), i3 = v.rbegin(), i4 = v.rbegin();\r\n        vector<int>::reverse_iterator x1, x2, x3, x4, x5, x6;\r\n\r\n        x1 = i1;\r\n        assert(*x1 == 33);\r\n\r\n        x2 = move(i2);\r\n        assert(*x2 == 33);\r\n\r\n        i3 = x3;\r\n\r\n        i4 = move(x4);\r\n\r\n        auto x7(x5);\r\n        auto x8(move(x6));\r\n\r\n        (void) x7;\r\n        (void) x8;\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0091392_string_erase_resize_perf/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0091392_string_erase_resize_perf/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <stdexcept>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\n#define TRYING try {\r\n\r\n#define SHOULD_THROW_OUT_OF_RANGE \\\r\n    abort();                      \\\r\n    }                             \\\r\n    catch (const out_of_range&) { \\\r\n    }\r\n\r\nint main() {\r\n    {\r\n        string s(\"meow\");\r\n        assert(s == \"meow\");\r\n        s.resize(7, 'A');\r\n        assert(s == \"meowAAA\");\r\n        s.resize(7, 'B');\r\n        assert(s == \"meowAAA\");\r\n        s.resize(3, 'C');\r\n        assert(s == \"meo\");\r\n        s.resize(0, 'D');\r\n        assert(s == \"\");\r\n        s.resize(0, 'E');\r\n        assert(s == \"\");\r\n        s.resize(5, 'F');\r\n        assert(s == \"FFFFF\");\r\n        s.resize(25, 'G');\r\n        assert(s == \"FFFFFGGGGGGGGGGGGGGGGGGGG\");\r\n    }\r\n\r\n    assert(string(\"\").erase() == \"\");\r\n    assert(string(\"\").erase(0) == \"\");\r\n    assert(string(\"\").erase(0, 0) == \"\");\r\n    assert(string(\"\").erase(0, 5) == \"\");\r\n    assert(string(\"\").erase(0, string::npos) == \"\");\r\n    TRYING string(\"\").erase(1);\r\n    SHOULD_THROW_OUT_OF_RANGE\r\n    TRYING string(\"\").erase(1, 0);\r\n    SHOULD_THROW_OUT_OF_RANGE\r\n    TRYING string(\"\").erase(1, 5);\r\n    SHOULD_THROW_OUT_OF_RANGE\r\n    TRYING string(\"\").erase(1, string::npos);\r\n    SHOULD_THROW_OUT_OF_RANGE\r\n\r\n    assert(string(\"peppermint\").erase() == \"\");\r\n    assert(string(\"peppermint\").erase(0) == \"\");\r\n    assert(string(\"peppermint\").erase(1) == \"p\");\r\n    assert(string(\"peppermint\").erase(2) == \"pe\");\r\n    assert(string(\"peppermint\").erase(8) == \"peppermi\");\r\n    assert(string(\"peppermint\").erase(9) == \"peppermin\");\r\n    assert(string(\"peppermint\").erase(10) == \"peppermint\");\r\n    TRYING string(\"peppermint\").erase(11);\r\n    SHOULD_THROW_OUT_OF_RANGE\r\n\r\n    assert(string(\"abcdefghij\").erase(0, 0) == \"abcdefghij\");\r\n    assert(string(\"abcdefghij\").erase(0, 1) == \"bcdefghij\");\r\n    assert(string(\"abcdefghij\").erase(0, 2) == \"cdefghij\");\r\n    assert(string(\"abcdefghij\").erase(0, 8) == \"ij\");\r\n    assert(string(\"abcdefghij\").erase(0, 9) == \"j\");\r\n    assert(string(\"abcdefghij\").erase(0, 10) == \"\");\r\n    assert(string(\"abcdefghij\").erase(0, 11) == \"\");\r\n    assert(string(\"abcdefghij\").erase(0, string::npos) == \"\");\r\n\r\n    assert(string(\"abcdefghij\").erase(1, 0) == \"abcdefghij\");\r\n    assert(string(\"abcdefghij\").erase(1, 1) == \"acdefghij\");\r\n    assert(string(\"abcdefghij\").erase(1, 2) == \"adefghij\");\r\n    assert(string(\"abcdefghij\").erase(1, 7) == \"aij\");\r\n    assert(string(\"abcdefghij\").erase(1, 8) == \"aj\");\r\n    assert(string(\"abcdefghij\").erase(1, 9) == \"a\");\r\n    assert(string(\"abcdefghij\").erase(1, 10) == \"a\");\r\n    assert(string(\"abcdefghij\").erase(1, string::npos) == \"a\");\r\n\r\n    assert(string(\"abcdefghij\").erase(5, 0) == \"abcdefghij\");\r\n    assert(string(\"abcdefghij\").erase(5, 1) == \"abcdeghij\");\r\n    assert(string(\"abcdefghij\").erase(5, 2) == \"abcdehij\");\r\n    assert(string(\"abcdefghij\").erase(5, 3) == \"abcdeij\");\r\n    assert(string(\"abcdefghij\").erase(5, 4) == \"abcdej\");\r\n    assert(string(\"abcdefghij\").erase(5, 5) == \"abcde\");\r\n    assert(string(\"abcdefghij\").erase(5, 6) == \"abcde\");\r\n    assert(string(\"abcdefghij\").erase(5, string::npos) == \"abcde\");\r\n\r\n    assert(string(\"abcdefghij\").erase(8, 0) == \"abcdefghij\");\r\n    assert(string(\"abcdefghij\").erase(8, 1) == \"abcdefghj\");\r\n    assert(string(\"abcdefghij\").erase(8, 2) == \"abcdefgh\");\r\n    assert(string(\"abcdefghij\").erase(8, 3) == \"abcdefgh\");\r\n    assert(string(\"abcdefghij\").erase(8, string::npos) == \"abcdefgh\");\r\n\r\n    assert(string(\"abcdefghij\").erase(9, 0) == \"abcdefghij\");\r\n    assert(string(\"abcdefghij\").erase(9, 1) == \"abcdefghi\");\r\n    assert(string(\"abcdefghij\").erase(9, 2) == \"abcdefghi\");\r\n    assert(string(\"abcdefghij\").erase(9, string::npos) == \"abcdefghi\");\r\n\r\n    assert(string(\"abcdefghij\").erase(10, 0) == \"abcdefghij\");\r\n    assert(string(\"abcdefghij\").erase(10, 1) == \"abcdefghij\");\r\n    assert(string(\"abcdefghij\").erase(10, 2) == \"abcdefghij\");\r\n    assert(string(\"abcdefghij\").erase(10, string::npos) == \"abcdefghij\");\r\n\r\n    TRYING string(\"abcdefghij\").erase(11, 0);\r\n    SHOULD_THROW_OUT_OF_RANGE\r\n    TRYING string(\"abcdefghij\").erase(11, 1);\r\n    SHOULD_THROW_OUT_OF_RANGE\r\n    TRYING string(\"abcdefghij\").erase(11, 2);\r\n    SHOULD_THROW_OUT_OF_RANGE\r\n    TRYING string(\"abcdefghij\").erase(11, string::npos);\r\n    SHOULD_THROW_OUT_OF_RANGE\r\n\r\n    { // also test insert / replace aliasing cases\r\n\r\n        // cases in the new (as of 2017-01-11) insert algorithm\r\n        string s;\r\n        s.reserve(100);\r\n        s.assign(\"abcdefghij\");\r\n        s.insert(1, \"inserted\"); // inserted content does not alias\r\n        assert(s == \"ainsertedbcdefghij\");\r\n        s.assign(\"abcdefghij\");\r\n        s.insert(2, s.c_str(), 1); // inserted content does not shift\r\n        assert(s == \"abacdefghij\");\r\n        s.assign(\"abcdefghij\");\r\n        s.insert(2, s.c_str() + 3, 2); // inserted content completely shifts\r\n        assert(s == \"abdecdefghij\");\r\n        s.assign(\"abcdefghij\");\r\n        s.insert(2, s.c_str(), 5); // inserted content partially shifts\r\n        assert(s == \"ababcdecdefghij\");\r\n\r\n        // cases in the new (as of 2017-01-11) replace algorithm\r\n        s.assign(\"abcdefghij\");\r\n        s.replace(1, 1, s.c_str() + 4, 1); // replaced content is the same size\r\n        assert(s == \"aecdefghij\");\r\n        s.assign(\"abcdefghij\");\r\n        s.replace(1, 5, s.c_str() + 7, 1); // replaced content gets smaller\r\n        assert(s == \"ahghij\");\r\n        s.assign(\"abcdefghij\");\r\n        s.replace(1, 1, \"example\"); // growth, does not alias\r\n        assert(s == \"aexamplecdefghij\");\r\n        s.assign(\"abcdefghij\");\r\n        s.replace(6, 1, s.c_str(), 1); // growth, inserted content does not shift\r\n        assert(s == \"abcdefahij\");\r\n        s.assign(\"abcdefghij\");\r\n        s.replace(1, 1, s.c_str() + 2, 2); // growth, inserted content completely shifts\r\n        assert(s == \"acdcdefghij\");\r\n        s.assign(\"abcdefghij\");\r\n        s.replace(2, 4, s.c_str(), 10); // growth, inserted content partially shifts\r\n        assert(s == \"ababcdefghijghij\");\r\n\r\n        // Extra case from the original replace algorithm\r\n        s.assign(\"abcdefghij\");\r\n        s.replace(1, 5, s.c_str() + 3, 6); // hole gets larger, substring begins in hole\r\n        assert(s == \"adefghighij\");\r\n    }\r\n\r\n    { // Also test VSO-437242 std::string::pop_back doesn't write null terminator\r\n        string s(\"abc\");\r\n        s.pop_back();\r\n        assert(strcmp(s.c_str(), \"ab\") == 0);\r\n        assert(s.size() == 2);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0133625_locale0_implib_cpp/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\locale0_implib_cpp_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0133625_locale0_implib_cpp/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <locale>\r\n#include <sstream>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\n// The problem in this bug was that basic_string was getting dragged into locale0_implib.cpp,\r\n// which is injected into the msvcprt.lib and msvcprtd.lib import libraries.\r\n// This triggered ODR violations with non-default _ITERATOR_DEBUG_LEVEL settings\r\n// (and more obscurely, with /J).\r\n// In native code, the usual symptoms were debugger visualization problems.\r\n// In managed code, /clr's metadata merge triggered linker errors.\r\n// This test uses a facet to drag in locale0_implib.cpp, then uses a string.\r\n// It's then compiled with lots of different options.\r\n// This will fail if basic_string sneaks its way into msvcprt[d].lib again.\r\n\r\nint main() {\r\n    use_facet<ctype<char>>(locale::classic());\r\n\r\n    const string s(\"cute fluffy kittens\");\r\n\r\n    ostringstream oss;\r\n\r\n    oss << \"I have \" << 9 * 9 * 9 + 10 * 10 * 10 << \" \" << s << \".\";\r\n\r\n    assert(oss.str() == \"I have 1729 cute fluffy kittens.\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0135139_vector_bool_comparisons/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0135139_vector_bool_comparisons/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <random>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nvector<bool> vb_from_str(const char* str) {\r\n    vector<bool> vb;\r\n\r\n    for (; *str != '\\0'; ++str) {\r\n        assert(*str == '0' || *str == '1');\r\n\r\n        vb.push_back(*str == '1');\r\n    }\r\n\r\n    return vb;\r\n}\r\n\r\nenum class Ordering : int { Less = -1, Equal = 0, Greater = 1 };\r\n\r\nconstexpr Ordering Lt = Ordering::Less;\r\nconstexpr Ordering Eq = Ordering::Equal;\r\nconstexpr Ordering Gt = Ordering::Greater;\r\n\r\nvoid test_comparison(const char* const left_str, const char* const right_str, const Ordering order) {\r\n    const auto left  = vb_from_str(left_str);\r\n    const auto right = vb_from_str(right_str);\r\n\r\n#if _HAS_CXX20\r\n    assert((left <=> right) == (static_cast<int>(order) <=> 0));\r\n    assert((right <=> left) == (0 <=> static_cast<int>(order)));\r\n#endif // _HAS_CXX20\r\n\r\n    switch (order) {\r\n    case Lt:\r\n        assert(!(left == right));\r\n        assert(!(right == left));\r\n        assert(left < right);\r\n        assert(!(right < left));\r\n        break;\r\n    case Eq:\r\n        assert(left == right);\r\n        assert(right == left);\r\n        assert(!(left < right));\r\n        assert(!(right < left));\r\n        break;\r\n    case Gt:\r\n        assert(!(left == right));\r\n        assert(!(right == left));\r\n        assert(!(left < right));\r\n        assert(right < left);\r\n        break;\r\n    default:\r\n        assert(false);\r\n        break;\r\n    }\r\n}\r\n\r\nint main() {\r\n\r\n    {\r\n        mt19937 eng(1729);\r\n\r\n        uniform_int_distribution<int> dist(0, 1);\r\n\r\n        const size_t N = 137;\r\n\r\n        vector<bool> x(N);\r\n        vector<bool> y(N);\r\n\r\n        for (size_t i = 0; i < N; ++i) {\r\n            const bool b = dist(eng) != 0;\r\n\r\n            x[i] = b;\r\n            y[i] = b;\r\n        }\r\n\r\n        assert(x == y);\r\n\r\n        y.push_back(0);\r\n\r\n        assert(x != y);\r\n\r\n        y.pop_back();\r\n\r\n        assert(x == y);\r\n\r\n        y.push_back(1);\r\n\r\n        assert(x != y);\r\n\r\n        y.pop_back();\r\n\r\n        assert(x == y);\r\n\r\n        x.back().flip();\r\n\r\n        assert(x != y);\r\n\r\n        y.back().flip();\r\n\r\n        assert(x == y);\r\n    }\r\n\r\n    {\r\n        // Also test DevDiv-850453 \"<vector>: Missing emplace methods in std::vector<bool> container\".\r\n\r\n        vector<bool> v(47, allocator<bool>());\r\n\r\n        v.emplace_back(make_shared<int>(123));\r\n        v.emplace_back(shared_ptr<int>());\r\n\r\n        v.emplace(v.cbegin(), make_shared<double>(3.14));\r\n        v.emplace(v.cbegin(), make_unique<int>(456));\r\n        v.emplace(v.cbegin(), shared_ptr<double>());\r\n        v.emplace(v.cbegin(), unique_ptr<int>());\r\n        v.emplace(v.cbegin(), unique_ptr<int[]>());\r\n\r\n\r\n        vector<bool> correct;\r\n\r\n        correct.insert(correct.cend(), 3, false);\r\n        correct.insert(correct.cend(), 2, true);\r\n        correct.insert(correct.cend(), 47, false);\r\n        correct.insert(correct.cend(), 1, true);\r\n        correct.insert(correct.cend(), 1, false);\r\n\r\n        assert(v == correct);\r\n    }\r\n\r\n    // Also test GH-1046 optimizing vector<bool> spaceship and less-than comparisons.\r\n    test_comparison(\"\", \"\", Eq); // both empty\r\n    test_comparison(\"\", \"00\", Lt); // empty vs. partial word\r\n    test_comparison(\"\", \"01\", Lt);\r\n    test_comparison(\"\", \"00000000000000000000000000000000\", Lt); // empty vs. full word\r\n    test_comparison(\"\", \"01000000000000000000000000000000\", Lt);\r\n    test_comparison(\"\", \"0000000000000000000000000000000000\", Lt); // empty vs. full and partial words\r\n    test_comparison(\"\", \"0100000000000000000000000000000001\", Lt);\r\n\r\n    test_comparison(\"010111010\", \"010111010\", Eq);\r\n    test_comparison(\"010111010\", \"011110010\", Lt); // test that bits are compared in the correct direction\r\n\r\n    // same test, after an initial matching word\r\n    test_comparison(\"00001111000011110000111100001111010111010\", \"00001111000011110000111100001111010111010\", Eq);\r\n    test_comparison(\"00001111000011110000111100001111010111010\", \"00001111000011110000111100001111011110010\", Lt);\r\n\r\n    test_comparison(\"00001111\", \"00001111\", Eq);\r\n    test_comparison(\"00001111\", \"000011110\", Lt); // matching prefixes, test size comparison\r\n    test_comparison(\"00001111\", \"000011111\", Lt);\r\n    test_comparison(\"00001111\", \"00001111000000000000000000000000\", Lt); // full word\r\n    test_comparison(\"00001111\", \"00001111000000000000000000000001\", Lt);\r\n    test_comparison(\"00001111\", \"0000111100000000000000000000000000\", Lt); // full and partial words\r\n    test_comparison(\"00001111\", \"0000111100000000000000000000000001\", Lt);\r\n\r\n    test_comparison(\"10\", \"01111\", Gt); // shorter but greater\r\n    test_comparison(\"10\", \"01111111111111111111111111111111\", Gt); // full word\r\n    test_comparison(\"10\", \"0111111111111111111111111111111111\", Gt); // full and partial words\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0235721_async_and_packaged_task/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0235721_async_and_packaged_task/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <cstdlib>\r\n#include <functional>\r\n#include <future>\r\n#include <memory>\r\n#include <string>\r\n#include <system_error>\r\n#include <thread>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\nusing namespace std::placeholders;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n// DevDiv-235721 \"<future>: async() and packaged_task don't compile for void and T& return types\"\r\n\r\nvoid test_DevDiv_235721() {\r\n    auto void_lambda = []() {};\r\n\r\n    int i           = 1729;\r\n    auto ref_lambda = [&]() -> int& { return i; };\r\n\r\n    {\r\n        future<void> f = async(launch::deferred, void_lambda);\r\n        f.get();\r\n    }\r\n\r\n    {\r\n        future<int&> f = async(launch::deferred, ref_lambda);\r\n        f.get();\r\n    }\r\n\r\n    {\r\n        packaged_task<void()> pt(void_lambda);\r\n        future<void> f = pt.get_future();\r\n        pt();\r\n        f.get();\r\n    }\r\n\r\n    {\r\n        packaged_task<int&()> pt(ref_lambda);\r\n        future<int&> f = pt.get_future();\r\n        pt();\r\n        f.get();\r\n    }\r\n}\r\n\r\n\r\n// DevDiv-586551 \"<future>: future_errc message() and what() don't work\"\r\n\r\nvoid test_message(const future_errc fe, const string& s) {\r\n    assert(make_error_code(fe).message() == s);\r\n    assert(future_error(make_error_code(fe)).what() == s); // nonstandard\r\n\r\n    // also P0517R0 \"Constructing future_error From future_errc\"\r\n    assert(future_error(fe).what() == s); // C++17\r\n}\r\n\r\nvoid test_DevDiv_586551() {\r\n    test_message(future_errc::broken_promise, \"broken promise\");\r\n    test_message(future_errc::future_already_retrieved, \"future already retrieved\");\r\n    test_message(future_errc::promise_already_satisfied, \"promise already satisfied\");\r\n    test_message(future_errc::no_state, \"no state\");\r\n}\r\n\r\n\r\n// DevDiv-725337 \"<future>: std::packaged_task<T> where T is void or a reference class are not movable\"\r\n\r\nvoid test_DevDiv_725337() {\r\n    auto void_lambda = []() {};\r\n\r\n    int i           = 1729;\r\n    auto ref_lambda = [&]() -> int& { return i; };\r\n\r\n    // GH-321: \"<future>: packaged_task can't be constructed from a move-only lambda\"\r\n    auto move_only_lambda = [uptr = make_unique<int>(42)] { return *uptr; };\r\n\r\n    {\r\n        packaged_task<int()> pt1([] { return 19937; });\r\n        future<int> f = pt1.get_future();\r\n        packaged_task<int()> pt2(move(pt1));\r\n        packaged_task<int()> pt3;\r\n        pt3 = move(pt2);\r\n        assert(f.wait_for(0s) == future_status::timeout);\r\n        pt3();\r\n        assert(f.wait_for(0s) == future_status::ready);\r\n        assert(f.get() == 19937);\r\n    }\r\n\r\n    {\r\n        packaged_task<int()> pt1(move(move_only_lambda));\r\n        future<int> f = pt1.get_future();\r\n        packaged_task<int()> pt2(move(pt1));\r\n        packaged_task<int()> pt3;\r\n        pt3 = move(pt2);\r\n        assert(f.wait_for(0s) == future_status::timeout);\r\n        pt3();\r\n        assert(f.wait_for(0s) == future_status::ready);\r\n        assert(f.get() == 42);\r\n    }\r\n\r\n    {\r\n        packaged_task<int&()> pt1(ref_lambda);\r\n        future<int&> f = pt1.get_future();\r\n        packaged_task<int&()> pt2(move(pt1));\r\n        packaged_task<int&()> pt3;\r\n        pt3 = move(pt2);\r\n        assert(f.wait_for(0s) == future_status::timeout);\r\n        pt3();\r\n        assert(f.wait_for(0s) == future_status::ready);\r\n        assert(&f.get() == &i);\r\n    }\r\n\r\n    {\r\n        packaged_task<void()> pt1(void_lambda);\r\n        future<void> f = pt1.get_future();\r\n        packaged_task<void()> pt2(move(pt1));\r\n        packaged_task<void()> pt3;\r\n        pt3 = move(pt2);\r\n        assert(f.wait_for(0s) == future_status::timeout);\r\n        pt3();\r\n        assert(f.wait_for(0s) == future_status::ready);\r\n        f.get();\r\n    }\r\n}\r\n\r\n\r\n// VSO-152487 \"<future>: Bug in std::promise destructor for void and ref specializations\"\r\ntemplate <typename T>\r\nvoid assert_promise_broken(future<T>& f) noexcept {\r\n    try {\r\n        (void) f.get();\r\n        abort();\r\n    } catch (const future_error& fe) {\r\n        assert(fe.code() == make_error_condition(future_errc::broken_promise));\r\n    }\r\n}\r\n\r\ntemplate <typename T>\r\nvoid test_broken_promise() {\r\n    future<T> f;\r\n\r\n    { // promise destructor\r\n        promise<T> p;\r\n        f = p.get_future();\r\n    }\r\n\r\n    assert_promise_broken(f);\r\n\r\n    { // promise move assignment operator\r\n        promise<T> p;\r\n        f = p.get_future();\r\n        p = promise<T>{};\r\n        assert_promise_broken(f);\r\n    }\r\n}\r\n\r\nvoid test_VSO_152487() {\r\n    test_broken_promise<int>();\r\n    test_broken_promise<int&>();\r\n    test_broken_promise<void>();\r\n}\r\n\r\n// VSO-97632 \"<future>: async signature [libs-conformance]\"\r\nvoid void_function() {}\r\nint int_function(double) {\r\n    return 0;\r\n}\r\nSTATIC_ASSERT(is_same_v<decltype(async(void_function)), future<void>>);\r\nSTATIC_ASSERT(is_same_v<decltype(async(int_function, 3)), future<int>>);\r\n\r\n// VSO-112570 \"<future>: std::async (still?) does not accept move only types\"\r\n// VSO-111640 \"<future>: std::async decaying(losing) rvalue reference [...]\"\r\nstruct move_only_functor_type {\r\n    int operator()(unique_ptr<int>&& ptr) && {\r\n        return *ptr;\r\n    }\r\n\r\n    move_only_functor_type() = delete;\r\n    move_only_functor_type(int, int) {}\r\n    move_only_functor_type(const move_only_functor_type&)            = delete;\r\n    move_only_functor_type(move_only_functor_type&&)                 = default;\r\n    move_only_functor_type& operator=(const move_only_functor_type&) = delete;\r\n    move_only_functor_type& operator=(move_only_functor_type&&)      = delete;\r\n};\r\n\r\nvoid test_VSO_112570() {\r\n    auto defaultPolicy = async(move_only_functor_type{0, 0}, make_unique<int>(42));\r\n    assert(defaultPolicy.get() == 42);\r\n\r\n    auto asyncPolicy = async(launch::async, move_only_functor_type{0, 0}, make_unique<int>(1729));\r\n    assert(asyncPolicy.get() == 1729);\r\n\r\n    auto deferredPolicy = async(launch::deferred, move_only_functor_type{0, 0}, make_unique<int>(0xC0FFEE));\r\n    assert(deferredPolicy.get() == 0xC0FFEE);\r\n}\r\n\r\n// VSO-115515 \"<future>: Compilation errors within std::async when using placeholders as arguments\"\r\nstruct placeholder_detect {\r\n    int lastPlaceholder = 0;\r\n\r\n    void detect_placeholder(decltype(_1)) {\r\n        lastPlaceholder = 1;\r\n    }\r\n\r\n    void detect_placeholder(decltype(_2)) {\r\n        lastPlaceholder = 2;\r\n    }\r\n};\r\n\r\nvoid test_VSO_115515() {\r\n    placeholder_detect pd;\r\n    async([&](auto val) { pd.detect_placeholder(val); }, _1).wait();\r\n    assert(pd.lastPlaceholder == 1);\r\n\r\n    async([&](auto val) { pd.detect_placeholder(val); }, _2).wait();\r\n    assert(pd.lastPlaceholder == 2);\r\n}\r\n\r\n// VSO-272761 \"[Feedback] std::promise + move = incorrect broken_promise (VS2015 Update 2)\"\r\nvoid test_VSO_272761_void() {\r\n    promise<void> p;\r\n    future<void> f = p.get_future();\r\n\r\n    thread t([p = move(p)]() mutable { p.set_value_at_thread_exit(); });\r\n\r\n    f.wait();\r\n    t.join();\r\n}\r\n\r\nvoid test_VSO_272761_int() {\r\n    promise<int> p;\r\n    future<int> f = p.get_future();\r\n\r\n    thread t([p = move(p)]() mutable { p.set_value_at_thread_exit(42); });\r\n\r\n    assert(f.get() == 42);\r\n    t.join();\r\n}\r\n\r\nvoid test_VSO_272761_ref() {\r\n    int a;\r\n    promise<int&> p;\r\n    future<int&> f = p.get_future();\r\n\r\n    thread t([p = move(p), &a]() mutable { p.set_value_at_thread_exit(a); });\r\n\r\n    assert(&f.get() == &a);\r\n    t.join();\r\n}\r\n\r\nvoid test_VSO_272761() {\r\n    test_VSO_272761_void();\r\n    test_VSO_272761_int();\r\n    test_VSO_272761_ref();\r\n}\r\n\r\ntemplate <typename T>\r\nvoid test_future_shared_future_noexcept_impl() {\r\n    STATIC_ASSERT(is_nothrow_default_constructible_v<future<T>>);\r\n    STATIC_ASSERT(is_nothrow_move_constructible_v<future<T>>);\r\n    STATIC_ASSERT(is_nothrow_move_assignable_v<future<T>>);\r\n    STATIC_ASSERT(is_nothrow_destructible_v<future<T>>);\r\n\r\n    STATIC_ASSERT(is_nothrow_default_constructible_v<shared_future<T>>);\r\n    STATIC_ASSERT(is_nothrow_move_constructible_v<shared_future<T>>);\r\n    STATIC_ASSERT(is_nothrow_move_assignable_v<shared_future<T>>);\r\n    STATIC_ASSERT(is_nothrow_destructible_v<shared_future<T>>);\r\n}\r\n\r\n// P0516R0 \"Marking shared_future Copying As noexcept\"\r\ntemplate <typename T>\r\nvoid test_shared_future_noexcept_copy_impl() {\r\n    STATIC_ASSERT(noexcept(declval<future<T>>().share()));\r\n    STATIC_ASSERT(is_nothrow_copy_constructible_v<shared_future<T>>);\r\n    STATIC_ASSERT(is_nothrow_copy_assignable_v<shared_future<T>>);\r\n    shared_future<T> prototype;\r\n    assert(!prototype.valid());\r\n    auto copyCtord = prototype;\r\n    assert(!copyCtord.valid());\r\n    copyCtord = prototype;\r\n    assert(!copyCtord.valid());\r\n}\r\n\r\nvoid test_future_shared_future_noexcept() {\r\n    test_future_shared_future_noexcept_impl<int>();\r\n    test_future_shared_future_noexcept_impl<int&>();\r\n    test_future_shared_future_noexcept_impl<void>();\r\n\r\n    test_shared_future_noexcept_copy_impl<int>();\r\n    test_shared_future_noexcept_copy_impl<int&>();\r\n    test_shared_future_noexcept_copy_impl<void>();\r\n}\r\n\r\n// Also test the exception specifications of move functions of promise and packaged_task\r\ntemplate <typename T>\r\nvoid test_promise_noexcept_impl() {\r\n    STATIC_ASSERT(is_nothrow_move_constructible_v<promise<T>>);\r\n    STATIC_ASSERT(is_nothrow_move_assignable_v<promise<T>>);\r\n    STATIC_ASSERT(is_nothrow_destructible_v<promise<T>>);\r\n}\r\n\r\nvoid test_promise_noexcept() {\r\n    test_promise_noexcept_impl<int>();\r\n    test_promise_noexcept_impl<int&>();\r\n    test_promise_noexcept_impl<void>();\r\n}\r\n\r\ntemplate <typename F>\r\nvoid test_packaged_task_noexcept_impl() {\r\n    STATIC_ASSERT(is_nothrow_default_constructible_v<packaged_task<F>>);\r\n    STATIC_ASSERT(is_nothrow_move_constructible_v<packaged_task<F>>);\r\n    STATIC_ASSERT(is_nothrow_move_assignable_v<packaged_task<F>>);\r\n    STATIC_ASSERT(is_nothrow_destructible_v<packaged_task<F>>);\r\n}\r\n\r\nvoid test_packaged_task_noexcept() {\r\n    test_packaged_task_noexcept_impl<int()>();\r\n    test_packaged_task_noexcept_impl<int&()>();\r\n    test_packaged_task_noexcept_impl<void()>();\r\n\r\n    test_packaged_task_noexcept_impl<int(int)>();\r\n    test_packaged_task_noexcept_impl<int&(int)>();\r\n    test_packaged_task_noexcept_impl<void(int)>();\r\n}\r\n\r\n// Also test the non-constructibility of future from (future, {}) and (shared_future, {})\r\ntemplate <typename Void, typename T, typename... Args>\r\nconstexpr bool is_constructible_with_trailing_empty_brace_impl = false;\r\n\r\ntemplate <typename T, typename... Args>\r\nconstexpr bool\r\n    is_constructible_with_trailing_empty_brace_impl<void_t<decltype(T(declval<Args>()..., {}))>, T, Args...> = true;\r\n\r\ntemplate <typename T, typename... Args>\r\nconstexpr bool is_constructible_with_trailing_empty_brace =\r\n    is_constructible_with_trailing_empty_brace_impl<void, T, Args...>;\r\n\r\nSTATIC_ASSERT(is_constructible_with_trailing_empty_brace<pair<double*, int>, double*>); // verify a true case\r\n\r\ntemplate <typename T>\r\nvoid test_no_implicit_brace_construction_impl() {\r\n    STATIC_ASSERT(!is_constructible_with_trailing_empty_brace<future<T>, future<T>>);\r\n    STATIC_ASSERT(!is_constructible_with_trailing_empty_brace<future<T>, const future<T>&>);\r\n    STATIC_ASSERT(!is_constructible_with_trailing_empty_brace<future<T>, shared_future<T>>);\r\n    STATIC_ASSERT(!is_constructible_with_trailing_empty_brace<future<T>, const shared_future<T>&>);\r\n}\r\n\r\nvoid test_no_implicit_brace_construction() {\r\n    test_no_implicit_brace_construction_impl<int>();\r\n    test_no_implicit_brace_construction_impl<int&>();\r\n    test_no_implicit_brace_construction_impl<void>();\r\n}\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659511\r\nstruct use_async_in_a_global_tester {\r\n    use_async_in_a_global_tester() {\r\n        assert(async([] { return 42; }).get() == 42);\r\n    }\r\n    ~use_async_in_a_global_tester() {\r\n        (void) async([] { return 1729; }).get();\r\n    }\r\n};\r\n\r\nuse_async_in_a_global_tester use_async_in_a_global_instance;\r\n#endif // ^^^ no workaround ^^^\r\n\r\nint main() {\r\n    test_DevDiv_235721();\r\n    test_DevDiv_586551();\r\n    test_DevDiv_725337();\r\n    test_VSO_152487();\r\n    test_VSO_112570();\r\n    test_VSO_115515();\r\n    test_VSO_272761();\r\n    test_future_shared_future_noexcept();\r\n    test_promise_noexcept();\r\n    test_packaged_task_noexcept();\r\n    test_no_implicit_brace_construction();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0253803_debug_pointer/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0253803_debug_pointer/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// DevDiv-253803 \"<algorithm>: merge() asserts when given null src/dest\"\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <initializer_list>\r\n#include <iterator>\r\n#include <memory>\r\n#include <numeric>\r\n#include <random>\r\n\r\n#ifdef __cpp_lib_execution\r\n#include <execution>\r\nusing std::execution::par;\r\n#endif // __cpp_lib_execution\r\n\r\nusing namespace std;\r\n\r\nbool always_true(int) {\r\n    return true;\r\n}\r\n\r\nbool always_false(int) {\r\n    return false;\r\n}\r\n\r\nconst int zero = 0;\r\n\r\nint main() {\r\n    int* nil                = nullptr;\r\n    bool (*pred)(int)       = nullptr;\r\n    bool (*pred2)(int, int) = nullptr;\r\n    bool (*comp)(int, int)  = nullptr;\r\n    int (*gen)()            = nullptr;\r\n#if _HAS_AUTO_PTR_ETC\r\n    ptrdiff_t (*rng)(ptrdiff_t) = nullptr;\r\n#endif // _HAS_AUTO_PTR_ETC\r\n    int (*unop)(int)       = nullptr;\r\n    int (*binop)(int, int) = nullptr;\r\n\r\n    int arr[3] = {55, 55, 55};\r\n    int res[3] = {};\r\n\r\n    (void) all_of(nil, nil, pred);\r\n    (void) any_of(nil, nil, pred);\r\n    (void) none_of(nil, nil, pred);\r\n    for_each(nil, nil, pred);\r\n#if _HAS_CXX17\r\n    for_each_n(nil, zero, pred);\r\n#endif // _HAS_CXX17\r\n    (void) find(nil, nil, 1729);\r\n    (void) find_if(nil, nil, pred);\r\n    (void) find_if_not(nil, nil, pred);\r\n    (void) find_end(nil, nil, nil, nil);\r\n    (void) find_end(nil, nil, nil, nil, pred2);\r\n    (void) find_end(begin(arr), end(arr), nil, nil);\r\n    (void) find_end(begin(arr), end(arr), nil, nil, pred2);\r\n    (void) find_end(nil, nil, begin(arr), end(arr));\r\n    (void) find_end(nil, nil, begin(arr), end(arr), pred2);\r\n    (void) find_first_of(nil, nil, nil, nil);\r\n    (void) find_first_of(nil, nil, nil, nil, pred2);\r\n    (void) find_first_of(begin(arr), end(arr), nil, nil);\r\n    (void) find_first_of(begin(arr), end(arr), nil, nil, pred2);\r\n    (void) find_first_of(nil, nil, begin(arr), end(arr));\r\n    (void) find_first_of(nil, nil, begin(arr), end(arr), pred2);\r\n    (void) adjacent_find(nil, nil);\r\n    (void) adjacent_find(nil, nil, pred2);\r\n    (void) adjacent_find(begin(arr), begin(arr) + 1);\r\n    (void) adjacent_find(begin(arr), begin(arr) + 1, pred2);\r\n    (void) count(nil, nil, 1729);\r\n    (void) count_if(nil, nil, pred);\r\n    (void) mismatch(nil, nil, nil);\r\n    (void) mismatch(nil, nil, nil, pred2);\r\n    (void) mismatch(nil, nil, nil, nil);\r\n    (void) mismatch(nil, nil, nil, nil, pred2);\r\n    (void) mismatch(begin(arr), end(arr), nil, nil);\r\n    (void) mismatch(begin(arr), end(arr), nil, nil, pred2);\r\n    (void) mismatch(nil, nil, begin(arr), end(arr));\r\n    (void) mismatch(nil, nil, begin(arr), end(arr), pred2);\r\n    (void) equal(nil, nil, nil);\r\n    (void) equal(nil, nil, nil, pred2);\r\n    (void) equal(nil, nil, nil, nil);\r\n    (void) equal(nil, nil, nil, nil, pred2);\r\n    (void) equal(begin(arr), end(arr), nil, nil);\r\n    (void) equal(begin(arr), end(arr), nil, nil, pred2);\r\n    (void) equal(nil, nil, begin(arr), end(arr));\r\n    (void) equal(nil, nil, begin(arr), end(arr), pred2);\r\n    (void) is_permutation(nil, nil, nil);\r\n    (void) is_permutation(nil, nil, nil, pred2);\r\n    (void) is_permutation(nil, nil, nil, nil);\r\n    (void) is_permutation(nil, nil, nil, nil, pred2);\r\n    (void) is_permutation(begin(arr), end(arr), nil, nil);\r\n    (void) is_permutation(begin(arr), end(arr), nil, nil, pred2);\r\n    (void) is_permutation(nil, nil, begin(arr), end(arr));\r\n    (void) is_permutation(nil, nil, begin(arr), end(arr), pred2);\r\n    (void) search(nil, nil, nil, nil);\r\n    (void) search(nil, nil, nil, nil, pred2);\r\n    (void) search(begin(arr), end(arr), nil, nil);\r\n    (void) search(begin(arr), end(arr), nil, nil, pred2);\r\n    (void) search(nil, nil, begin(arr), end(arr));\r\n    (void) search(nil, nil, begin(arr), end(arr), pred2);\r\n    (void) search_n(nil, nil, zero, 1729);\r\n    (void) search_n(nil, nil, 5, 1729);\r\n    (void) search_n(nil, nil, zero, 1729, pred2);\r\n    (void) search_n(nil, nil, 5, 1729, pred2);\r\n    copy(nil, nil, nil);\r\n    copy_n(nil, zero, nil);\r\n    copy_if(nil, nil, nil, pred);\r\n    copy_if(begin(arr), end(arr), nil, &always_false);\r\n    copy_backward(nil, nil, nil);\r\n    move(nil, nil, nil);\r\n    move_backward(nil, nil, nil);\r\n    swap_ranges(nil, nil, nil);\r\n    transform(nil, nil, nil, unop);\r\n    transform(nil, nil, nil, nil, binop);\r\n    replace(nil, nil, -1, 1729);\r\n    replace_if(nil, nil, pred, 1729);\r\n    replace_copy(nil, nil, nil, -1, 1729);\r\n    replace_copy_if(nil, nil, nil, pred, 1729);\r\n    fill(nil, nil, 1729);\r\n    fill_n(nil, zero, 1729);\r\n    generate(nil, nil, gen);\r\n    generate_n(nil, zero, gen);\r\n    (void) remove(nil, nil, 1729);\r\n    (void) remove_if(nil, nil, pred);\r\n    remove_copy(nil, nil, nil, 1729);\r\n    remove_copy(begin(arr), end(arr), nil, 55);\r\n    remove_copy_if(nil, nil, nil, pred);\r\n    remove_copy_if(begin(arr), end(arr), nil, &always_true);\r\n    (void) unique(nil, nil);\r\n    (void) unique(nil, nil, pred2);\r\n    (void) unique(begin(arr), begin(arr) + 1);\r\n    (void) unique(begin(arr), begin(arr) + 1, pred2);\r\n    unique_copy(nil, nil, nil);\r\n    unique_copy(nil, nil, nil, pred2);\r\n    reverse(nil, nil);\r\n    reverse_copy(nil, nil, nil);\r\n    rotate(nil, nil, nil);\r\n    rotate_copy(nil, nil, nil, nil);\r\n#if _HAS_AUTO_PTR_ETC\r\n    random_shuffle(nil, nil);\r\n    random_shuffle(nil, nil, rng);\r\n#endif // _HAS_AUTO_PTR_ETC\r\n#if _HAS_CXX17\r\n    sample(nil, nil, nil, zero, mt19937(1729));\r\n#endif // _HAS_CXX17\r\n    shuffle(nil, nil, mt19937(1729));\r\n#if _HAS_CXX20\r\n    shift_left(nil, nil, 1729);\r\n    shift_right(nil, nil, 1729);\r\n#endif // _HAS_CXX20\r\n    (void) is_partitioned(nil, nil, pred);\r\n    partition(nil, nil, pred);\r\n    stable_partition(nil, nil, pred);\r\n    partition_copy(nil, nil, nil, nil, pred);\r\n    partition_copy(begin(arr), end(arr), begin(res), nil, &always_true);\r\n    partition_copy(begin(arr), end(arr), nil, begin(res), &always_false);\r\n    (void) partition_point(nil, nil, pred);\r\n    sort(nil, nil);\r\n    sort(nil, nil, comp);\r\n    sort(begin(arr), begin(arr) + 1);\r\n    sort(begin(arr), begin(arr) + 1, comp);\r\n    stable_sort(nil, nil);\r\n    stable_sort(nil, nil, comp);\r\n    stable_sort(begin(arr), begin(arr) + 1);\r\n    stable_sort(begin(arr), begin(arr) + 1, comp);\r\n    partial_sort(nil, nil, nil);\r\n    partial_sort(nil, nil, nil, comp);\r\n    partial_sort_copy(nil, nil, nil, nil);\r\n    partial_sort_copy(nil, nil, nil, nil, comp);\r\n    (void) is_sorted(nil, nil);\r\n    (void) is_sorted(nil, nil, comp);\r\n    (void) is_sorted(begin(arr), begin(arr) + 1);\r\n    (void) is_sorted(begin(arr), begin(arr) + 1, comp);\r\n    (void) is_sorted_until(nil, nil);\r\n    (void) is_sorted_until(nil, nil, comp);\r\n    (void) is_sorted_until(begin(arr), begin(arr) + 1);\r\n    (void) is_sorted_until(begin(arr), begin(arr) + 1, comp);\r\n    nth_element(nil, nil, nil);\r\n    nth_element(nil, nil, nil, comp);\r\n    (void) lower_bound(nil, nil, 1729);\r\n    (void) lower_bound(nil, nil, 1729, comp);\r\n    (void) upper_bound(nil, nil, 1729);\r\n    (void) upper_bound(nil, nil, 1729, comp);\r\n    (void) equal_range(nil, nil, 1729);\r\n    (void) equal_range(nil, nil, 1729, comp);\r\n    (void) binary_search(nil, nil, 1729);\r\n    (void) binary_search(nil, nil, 1729, comp);\r\n    merge(nil, nil, nil, nil, nil);\r\n    merge(nil, nil, nil, nil, nil, comp);\r\n    inplace_merge(nil, nil, nil);\r\n    inplace_merge(nil, nil, nil, comp);\r\n    (void) includes(nil, nil, nil, nil);\r\n    (void) includes(nil, nil, nil, nil, comp);\r\n    set_union(nil, nil, nil, nil, nil);\r\n    set_union(nil, nil, nil, nil, nil, comp);\r\n    set_intersection(nil, nil, nil, nil, nil);\r\n    set_intersection(nil, nil, nil, nil, nil, comp);\r\n    set_difference(nil, nil, nil, nil, nil);\r\n    set_difference(nil, nil, nil, nil, nil, comp);\r\n    set_symmetric_difference(nil, nil, nil, nil, nil);\r\n    set_symmetric_difference(nil, nil, nil, nil, nil, comp);\r\n    make_heap(nil, nil);\r\n    make_heap(nil, nil, comp);\r\n    sort_heap(nil, nil);\r\n    sort_heap(nil, nil, comp);\r\n    (void) is_heap(nil, nil);\r\n    (void) is_heap(nil, nil, comp);\r\n    (void) is_heap_until(nil, nil);\r\n    (void) is_heap_until(nil, nil, comp);\r\n\r\n    initializer_list<int> il = {11};\r\n    (void) min(il, comp);\r\n    (void) max(il, comp);\r\n    (void) minmax(il, comp);\r\n\r\n    (void) min_element(nil, nil);\r\n    (void) min_element(nil, nil, comp);\r\n    (void) min_element(begin(arr), begin(arr) + 1);\r\n    (void) min_element(begin(arr), begin(arr) + 1, comp);\r\n    (void) max_element(nil, nil);\r\n    (void) max_element(nil, nil, comp);\r\n    (void) max_element(begin(arr), begin(arr) + 1);\r\n    (void) max_element(begin(arr), begin(arr) + 1, comp);\r\n    (void) minmax_element(nil, nil);\r\n    (void) minmax_element(nil, nil, comp);\r\n    (void) minmax_element(begin(arr), begin(arr) + 1);\r\n    (void) minmax_element(begin(arr), begin(arr) + 1, comp);\r\n    (void) lexicographical_compare(nil, nil, nil, nil);\r\n    (void) lexicographical_compare(begin(arr), end(arr), nil, nil);\r\n    (void) lexicographical_compare(nil, nil, begin(arr), end(arr));\r\n    (void) lexicographical_compare(nil, nil, nil, nil, comp);\r\n    (void) lexicographical_compare(begin(arr), end(arr), nil, nil, comp);\r\n    (void) lexicographical_compare(nil, nil, begin(arr), end(arr), comp);\r\n    next_permutation(nil, nil);\r\n    next_permutation(nil, nil, comp);\r\n    prev_permutation(nil, nil);\r\n    prev_permutation(nil, nil, comp);\r\n    (void) accumulate(nil, nil, 1729);\r\n    (void) accumulate(nil, nil, 1729, binop);\r\n#if _HAS_CXX17\r\n    (void) reduce(nil, nil);\r\n    (void) reduce(nil, nil, 1729);\r\n    (void) reduce(nil, nil, 1729, binop);\r\n#endif // _HAS_CXX17\r\n    (void) inner_product(nil, nil, nil, 1729);\r\n    (void) inner_product(nil, nil, nil, 1729, binop, binop);\r\n#if _HAS_CXX17\r\n    (void) transform_reduce(nil, nil, nil, 1729);\r\n    (void) transform_reduce(nil, nil, nil, 1729, binop, binop);\r\n    (void) transform_reduce(nil, nil, 1729, binop, unop);\r\n#endif // _HAS_CXX17\r\n    partial_sum(nil, nil, nil);\r\n    partial_sum(nil, nil, nil, binop);\r\n#if _HAS_CXX17\r\n    exclusive_scan(nil, nil, nil, 1729);\r\n    exclusive_scan(nil, nil, nil, 1729, binop);\r\n    inclusive_scan(nil, nil, nil);\r\n    inclusive_scan(nil, nil, nil, binop);\r\n    inclusive_scan(nil, nil, nil, binop, 1729);\r\n    transform_exclusive_scan(nil, nil, nil, 1729, binop, unop);\r\n    transform_inclusive_scan(nil, nil, nil, binop, unop);\r\n    transform_inclusive_scan(nil, nil, nil, binop, unop, 1729);\r\n#endif // _HAS_CXX17\r\n    adjacent_difference(nil, nil, nil);\r\n    adjacent_difference(nil, nil, nil, binop);\r\n    iota(nil, nil, 1729);\r\n    uninitialized_copy(nil, nil, nil);\r\n    uninitialized_copy_n(nil, zero, nil);\r\n    uninitialized_fill(nil, nil, 1729);\r\n    uninitialized_fill_n(nil, zero, 1729);\r\n\r\n#ifdef __cpp_lib_execution\r\n    (void) all_of(par, nil, nil, pred);\r\n    (void) any_of(par, nil, nil, pred);\r\n    (void) none_of(par, nil, nil, pred);\r\n    for_each(par, nil, nil, pred);\r\n    for_each_n(par, nil, zero, pred);\r\n    (void) find(par, nil, nil, 1729);\r\n    (void) find_if(par, nil, nil, pred);\r\n    (void) find_if_not(par, nil, nil, pred);\r\n    (void) find_end(par, nil, nil, nil, nil);\r\n    (void) find_end(par, nil, nil, nil, nil, comp);\r\n    (void) find_first_of(par, nil, nil, nil, nil);\r\n    (void) find_first_of(par, nil, nil, nil, nil, comp);\r\n    (void) adjacent_find(par, nil, nil);\r\n    (void) adjacent_find(par, nil, nil, pred2);\r\n    (void) count(par, nil, nil, 1729);\r\n    (void) count_if(par, nil, nil, pred);\r\n    (void) mismatch(par, nil, nil, nil);\r\n    (void) mismatch(par, nil, nil, nil, pred2);\r\n    (void) mismatch(par, nil, nil, nil, nil);\r\n    (void) mismatch(par, nil, nil, nil, nil, pred2);\r\n    (void) mismatch(par, begin(arr), end(arr), nil, nil);\r\n    (void) mismatch(par, begin(arr), end(arr), nil, nil, pred2);\r\n    (void) mismatch(par, nil, nil, begin(arr), end(arr));\r\n    (void) mismatch(par, nil, nil, begin(arr), end(arr), pred2);\r\n    (void) equal(par, nil, nil, nil);\r\n    (void) equal(par, nil, nil, nil, pred2);\r\n    (void) equal(par, nil, nil, nil, nil);\r\n    (void) equal(par, nil, nil, nil, nil, pred2);\r\n    (void) equal(par, begin(arr), end(arr), nil, nil);\r\n    (void) equal(par, begin(arr), end(arr), nil, nil, pred2);\r\n    (void) equal(par, nil, nil, begin(arr), end(arr));\r\n    (void) equal(par, nil, nil, begin(arr), end(arr), pred2);\r\n    (void) search(par, nil, nil, nil, nil);\r\n    (void) search(par, nil, nil, nil, nil, pred2);\r\n    (void) search_n(par, nil, nil, zero, 1729);\r\n    (void) search_n(par, nil, nil, 5, 1729);\r\n    (void) search_n(par, nil, nil, zero, 1729, pred2);\r\n    (void) search_n(par, nil, nil, 5, 1729, pred2);\r\n\r\n    copy(par, nil, nil, nil);\r\n    copy_if(par, nil, nil, nil, pred);\r\n    copy_n(par, nil, zero, nil);\r\n    move(par, nil, nil, nil);\r\n    swap_ranges(par, nil, nil, nil);\r\n    transform(par, nil, nil, nil, unop);\r\n    transform(par, nil, nil, nil, nil, binop);\r\n    replace(par, nil, nil, 1, 1);\r\n    replace_if(par, nil, nil, pred, 1);\r\n    replace_copy(par, nil, nil, nil, 1729, 1729);\r\n    replace_copy_if(par, nil, nil, nil, pred, 1729);\r\n    fill(par, nil, nil, 1729);\r\n    fill_n(par, nil, zero, 1729);\r\n    generate(par, nil, nil, gen);\r\n    generate_n(par, nil, zero, gen);\r\n    (void) remove(par, nil, nil, 1729);\r\n    (void) remove_if(par, nil, nil, pred);\r\n    remove_copy(par, nil, nil, nil, 1729);\r\n    remove_copy_if(par, nil, nil, nil, pred);\r\n    (void) unique(par, nil, nil);\r\n    (void) unique(par, nil, nil, comp);\r\n    unique_copy(par, nil, nil, nil);\r\n    unique_copy(par, nil, nil, nil, comp);\r\n    reverse(par, nil, nil);\r\n    reverse_copy(par, nil, nil, nil);\r\n    rotate(par, nil, nil, nil);\r\n    rotate_copy(par, nil, nil, nil, nil);\r\n\r\n    sort(par, begin(arr), begin(arr) + 1);\r\n    sort(par, begin(arr), begin(arr) + 1, comp);\r\n    sort(par, nil, nil);\r\n    sort(par, nil, nil, comp);\r\n    stable_sort(par, nil, nil);\r\n    stable_sort(par, nil, nil, comp);\r\n    stable_sort(par, begin(arr), begin(arr) + 1);\r\n    stable_sort(par, begin(arr), begin(arr) + 1, comp);\r\n    partial_sort(par, nil, nil, nil);\r\n    partial_sort(par, nil, nil, nil, comp);\r\n    partial_sort_copy(par, nil, nil, nil, nil);\r\n    partial_sort_copy(par, nil, nil, nil, nil, comp);\r\n    (void) is_sorted(par, nil, nil);\r\n    (void) is_sorted(par, nil, nil, comp);\r\n    (void) is_sorted_until(par, nil, nil);\r\n    (void) is_sorted_until(par, nil, nil, comp);\r\n\r\n    nth_element(par, nil, nil, nil);\r\n    nth_element(par, nil, nil, nil, comp);\r\n\r\n#if _HAS_CXX20\r\n    shift_left(par, nil, nil, 1729);\r\n    shift_right(par, nil, nil, 1729);\r\n#endif // _HAS_CXX20\r\n\r\n    partition(par, nil, nil, pred);\r\n    partition_copy(par, nil, nil, nil, nil, pred);\r\n    stable_partition(par, nil, nil, pred);\r\n    (void) is_partitioned(par, nil, nil, pred);\r\n\r\n    merge(par, nil, nil, nil, nil, nil);\r\n    merge(par, nil, nil, nil, nil, nil, comp);\r\n    inplace_merge(par, nil, nil, nil);\r\n    inplace_merge(par, nil, nil, nil, comp);\r\n\r\n    (void) includes(par, nil, nil, nil, nil);\r\n    (void) includes(par, nil, nil, nil, nil, comp);\r\n    set_union(par, nil, nil, nil, nil, nil);\r\n    set_union(par, nil, nil, nil, nil, nil, comp);\r\n    set_intersection(par, nil, nil, nil, nil, nil);\r\n    set_intersection(par, nil, nil, nil, nil, nil, comp);\r\n    set_difference(par, nil, nil, nil, nil, nil);\r\n    set_difference(par, nil, nil, nil, nil, nil, comp);\r\n    set_symmetric_difference(par, nil, nil, nil, nil, nil);\r\n    set_symmetric_difference(par, nil, nil, nil, nil, nil, comp);\r\n\r\n    (void) is_heap(par, nil, nil);\r\n    (void) is_heap(par, nil, nil, comp);\r\n    (void) is_heap_until(par, nil, nil);\r\n    (void) is_heap_until(par, nil, nil, comp);\r\n\r\n    (void) min_element(par, nil, nil);\r\n    (void) min_element(par, nil, nil, comp);\r\n    (void) max_element(par, nil, nil);\r\n    (void) max_element(par, nil, nil, comp);\r\n    (void) minmax_element(par, nil, nil);\r\n    (void) minmax_element(par, nil, nil, comp);\r\n\r\n    (void) lexicographical_compare(par, nil, nil, nil, nil);\r\n    (void) lexicographical_compare(par, nil, nil, nil, nil, comp);\r\n\r\n    (void) reduce(par, nil, nil);\r\n    (void) reduce(par, nil, nil, 1729);\r\n    (void) reduce(par, nil, nil, 1729, binop);\r\n\r\n    (void) transform_reduce(par, nil, nil, nil, 1729);\r\n    (void) transform_reduce(par, nil, nil, nil, 1729, binop, binop);\r\n    (void) transform_reduce(par, nil, nil, 1729, binop, unop);\r\n\r\n    exclusive_scan(par, nil, nil, nil, 1729);\r\n    exclusive_scan(par, nil, nil, nil, 1729, binop);\r\n    inclusive_scan(par, nil, nil, nil);\r\n    inclusive_scan(par, nil, nil, nil, binop);\r\n    inclusive_scan(par, nil, nil, nil, binop, 1729);\r\n    transform_exclusive_scan(par, nil, nil, nil, 1729, binop, unop);\r\n    transform_inclusive_scan(par, nil, nil, nil, binop, unop);\r\n    transform_inclusive_scan(par, nil, nil, nil, binop, unop, 1729);\r\n\r\n    adjacent_difference(par, nil, nil, nil);\r\n    adjacent_difference(par, nil, nil, nil, binop);\r\n#endif // __cpp_lib_execution\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0272959_make_signed/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0272959_make_signed/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <string>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nenum e1 : signed char {};\r\nenum e2 : short {};\r\nenum e3 : int {};\r\nenum e4 : long {};\r\nenum e5 : long long {};\r\nenum e6 : unsigned char {};\r\nenum e7 : unsigned short {};\r\nenum e8 : unsigned int {};\r\nenum e9 : unsigned long {};\r\nenum e10 : unsigned long long {};\r\nenum e11 : char {};\r\nenum e12 : wchar_t {};\r\nenum e13 : char16_t {};\r\nenum e14 : char32_t {};\r\nenum e15 : bool {};\r\n#ifdef __cpp_char8_t\r\nenum e16 : char8_t {};\r\n#endif // __cpp_char8_t\r\n\r\ntemplate <typename T, typename S, typename U>\r\nvoid helper() {\r\n    STATIC_ASSERT(is_same_v<make_signed_t<T>, S>);\r\n    STATIC_ASSERT(is_same_v<make_unsigned_t<T>, U>);\r\n}\r\n\r\ntemplate <typename T, typename S, typename U>\r\nvoid test() {\r\n    helper<T, S, U>();\r\n    helper<const T, const S, const U>();\r\n    helper<volatile T, volatile S, volatile U>();\r\n    helper<const volatile T, const volatile S, const volatile U>();\r\n}\r\n\r\nvoid example() {\r\n    test<signed char, signed char, unsigned char>();\r\n    test<short, short, unsigned short>();\r\n    test<int, int, unsigned int>();\r\n    test<long, long, unsigned long>();\r\n    test<long long, long long, unsigned long long>();\r\n\r\n    test<unsigned char, signed char, unsigned char>();\r\n    test<unsigned short, short, unsigned short>();\r\n    test<unsigned int, int, unsigned int>();\r\n    test<unsigned long, long, unsigned long>();\r\n    test<unsigned long long, long long, unsigned long long>();\r\n\r\n    test<char, signed char, unsigned char>();\r\n    test<wchar_t, short, unsigned short>();\r\n    test<char16_t, short, unsigned short>();\r\n    test<char32_t, int, unsigned int>();\r\n#ifdef __cpp_char8_t\r\n    test<char8_t, signed char, unsigned char>();\r\n#endif // __cpp_char8_t\r\n\r\n    test<e1, signed char, unsigned char>();\r\n    test<e2, short, unsigned short>();\r\n    test<e3, int, unsigned int>();\r\n    test<e4, int, unsigned int>();\r\n    test<e5, long long, unsigned long long>();\r\n\r\n    test<e6, signed char, unsigned char>();\r\n    test<e7, short, unsigned short>();\r\n    test<e8, int, unsigned int>();\r\n    test<e9, int, unsigned int>();\r\n    test<e10, long long, unsigned long long>();\r\n\r\n    test<e11, signed char, unsigned char>();\r\n    test<e12, short, unsigned short>();\r\n    test<e13, short, unsigned short>();\r\n    test<e14, int, unsigned int>();\r\n    test<e15, signed char, unsigned char>();\r\n#ifdef __cpp_char8_t\r\n    test<e16, signed char, unsigned char>();\r\n#endif // __cpp_char8_t\r\n\r\n\r\n    // Bonus tests!\r\n\r\n    STATIC_ASSERT(is_same_v<add_lvalue_reference_t<int>, int&>);\r\n    STATIC_ASSERT(is_same_v<add_lvalue_reference_t<int&>, int&>);\r\n    STATIC_ASSERT(is_same_v<add_lvalue_reference_t<int&&>, int&>);\r\n\r\n    STATIC_ASSERT(is_same_v<add_rvalue_reference_t<int>, int&&>);\r\n    STATIC_ASSERT(is_same_v<add_rvalue_reference_t<int&>, int&>);\r\n    STATIC_ASSERT(is_same_v<add_rvalue_reference_t<int&&>, int&&>);\r\n\r\n    struct X {\r\n        X& operator=(int*) {\r\n            return *this;\r\n        }\r\n        X& operator=(void (*)()) {\r\n            return *this;\r\n        }\r\n    };\r\n\r\n    typedef int arr_t[5];\r\n    typedef void(func_t)();\r\n\r\n    STATIC_ASSERT(is_assignable_v<X&, arr_t&>);\r\n    STATIC_ASSERT(is_assignable_v<X&, func_t&>);\r\n    STATIC_ASSERT(is_assignable_v<X&, X&>);\r\n    STATIC_ASSERT(!is_assignable_v<X&, void>);\r\n\r\n    STATIC_ASSERT(is_assignable_v<int*&, arr_t&>);\r\n    STATIC_ASSERT(!is_assignable_v<int*&, func_t&>);\r\n    STATIC_ASSERT(is_assignable_v<void (*&)(), func_t&>);\r\n    STATIC_ASSERT(!is_assignable_v<void (*&)(), arr_t&>);\r\n\r\n    STATIC_ASSERT(!is_assignable_v<arr_t&, arr_t&>);\r\n    STATIC_ASSERT(!is_assignable_v<arr_t&, const arr_t&>);\r\n    STATIC_ASSERT(!is_assignable_v<arr_t&, arr_t&&>);\r\n    STATIC_ASSERT(!is_assignable_v<arr_t&, const arr_t&&>);\r\n    STATIC_ASSERT(!is_assignable_v<func_t&, func_t&>);\r\n    STATIC_ASSERT(!is_assignable_v<func_t&, func_t&&>);\r\n\r\n    STATIC_ASSERT(!is_assignable_v<void, void>);\r\n    STATIC_ASSERT(!is_assignable_v<void, int>);\r\n    STATIC_ASSERT(!is_assignable_v<void, int&>);\r\n    STATIC_ASSERT(!is_assignable_v<void, int&&>);\r\n\r\n    STATIC_ASSERT(!is_convertible_v<int, void>);\r\n    STATIC_ASSERT(!is_convertible_v<void, int>);\r\n\r\n    STATIC_ASSERT(is_convertible_v<void, void>);\r\n    STATIC_ASSERT(is_convertible_v<void, const void>);\r\n    STATIC_ASSERT(is_convertible_v<void, volatile void>);\r\n    STATIC_ASSERT(is_convertible_v<void, const volatile void>);\r\n    STATIC_ASSERT(is_convertible_v<const void, void>);\r\n    STATIC_ASSERT(is_convertible_v<const void, const void>);\r\n    STATIC_ASSERT(is_convertible_v<const void, volatile void>);\r\n    STATIC_ASSERT(is_convertible_v<const void, const volatile void>);\r\n    STATIC_ASSERT(is_convertible_v<volatile void, void>);\r\n    STATIC_ASSERT(is_convertible_v<volatile void, const void>);\r\n    STATIC_ASSERT(is_convertible_v<volatile void, volatile void>);\r\n    STATIC_ASSERT(is_convertible_v<volatile void, const volatile void>);\r\n    STATIC_ASSERT(is_convertible_v<const volatile void, void>);\r\n    STATIC_ASSERT(is_convertible_v<const volatile void, const void>);\r\n    STATIC_ASSERT(is_convertible_v<const volatile void, volatile void>);\r\n    STATIC_ASSERT(is_convertible_v<const volatile void, const volatile void>);\r\n\r\n    STATIC_ASSERT(is_trivial_v<int>);\r\n\r\n    STATIC_ASSERT(!is_trivial_v<int&>);\r\n    STATIC_ASSERT(!is_trivial_v<int&&>);\r\n\r\n\r\n    // DevDiv-517460 \"is_*_constructible type traits are broken for reference types\"\r\n    STATIC_ASSERT(is_copy_constructible_v<int&>);\r\n    STATIC_ASSERT(is_copy_constructible_v<const int&>);\r\n    STATIC_ASSERT(is_move_constructible_v<int&>);\r\n    STATIC_ASSERT(is_move_constructible_v<const int&>);\r\n    STATIC_ASSERT(is_move_constructible_v<int&&>);\r\n    STATIC_ASSERT(is_move_constructible_v<const int&&>);\r\n    STATIC_ASSERT(is_constructible_v<const float&, int>);\r\n\r\n\r\n    // More tests for is_assignable, now that it's powered by a compiler hook.\r\n    STATIC_ASSERT(!is_assignable_v<int, int>);\r\n    STATIC_ASSERT(!is_assignable_v<int, const int>);\r\n    STATIC_ASSERT(!is_assignable_v<int, int&>);\r\n    STATIC_ASSERT(!is_assignable_v<int, const int&>);\r\n    STATIC_ASSERT(!is_assignable_v<int, int&&>);\r\n    STATIC_ASSERT(!is_assignable_v<int, const int&&>);\r\n\r\n    STATIC_ASSERT(!is_assignable_v<const int, int>);\r\n    STATIC_ASSERT(!is_assignable_v<const int, const int>);\r\n    STATIC_ASSERT(!is_assignable_v<const int, int&>);\r\n    STATIC_ASSERT(!is_assignable_v<const int, const int&>);\r\n    STATIC_ASSERT(!is_assignable_v<const int, int&&>);\r\n    STATIC_ASSERT(!is_assignable_v<const int, const int&&>);\r\n\r\n    STATIC_ASSERT(is_assignable_v<int&, int>);\r\n    STATIC_ASSERT(is_assignable_v<int&, const int>);\r\n    STATIC_ASSERT(is_assignable_v<int&, int&>);\r\n    STATIC_ASSERT(is_assignable_v<int&, const int&>);\r\n    STATIC_ASSERT(is_assignable_v<int&, int&&>);\r\n    STATIC_ASSERT(is_assignable_v<int&, const int&&>);\r\n\r\n    STATIC_ASSERT(!is_assignable_v<const int&, int>);\r\n    STATIC_ASSERT(!is_assignable_v<const int&, const int>);\r\n    STATIC_ASSERT(!is_assignable_v<const int&, int&>);\r\n    STATIC_ASSERT(!is_assignable_v<const int&, const int&>);\r\n    STATIC_ASSERT(!is_assignable_v<const int&, int&&>);\r\n    STATIC_ASSERT(!is_assignable_v<const int&, const int&&>);\r\n\r\n    STATIC_ASSERT(!is_assignable_v<int&&, int>);\r\n    STATIC_ASSERT(!is_assignable_v<int&&, const int>);\r\n    STATIC_ASSERT(!is_assignable_v<int&&, int&>);\r\n    STATIC_ASSERT(!is_assignable_v<int&&, const int&>);\r\n    STATIC_ASSERT(!is_assignable_v<int&&, int&&>);\r\n    STATIC_ASSERT(!is_assignable_v<int&&, const int&&>);\r\n\r\n    STATIC_ASSERT(!is_assignable_v<const int&&, int>);\r\n    STATIC_ASSERT(!is_assignable_v<const int&&, const int>);\r\n    STATIC_ASSERT(!is_assignable_v<const int&&, int&>);\r\n    STATIC_ASSERT(!is_assignable_v<const int&&, const int&>);\r\n    STATIC_ASSERT(!is_assignable_v<const int&&, int&&>);\r\n    STATIC_ASSERT(!is_assignable_v<const int&&, const int&&>);\r\n\r\n    STATIC_ASSERT(is_assignable_v<int&, short>);\r\n    STATIC_ASSERT(!is_assignable_v<int&, void*>);\r\n\r\n    STATIC_ASSERT(is_assignable_v<string&, string>);\r\n    STATIC_ASSERT(is_assignable_v<string&, const string>);\r\n    STATIC_ASSERT(is_assignable_v<string&, string&>);\r\n    STATIC_ASSERT(is_assignable_v<string&, const string&>);\r\n    STATIC_ASSERT(is_assignable_v<string&, string&&>);\r\n    STATIC_ASSERT(is_assignable_v<string&, const string&&>);\r\n\r\n    STATIC_ASSERT(is_assignable_v<string&, const char*>);\r\n    STATIC_ASSERT(is_assignable_v<string&, const char (&)[5]>);\r\n    STATIC_ASSERT(!is_assignable_v<string&, double*>);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0289403_partition_point_complexity/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0289403_partition_point_complexity/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename Container, typename Predicate>\r\nvoid test_partition_point(const Container& c, Predicate p, int correct) {\r\n    assert(is_partitioned(c.begin(), c.end(), p));\r\n\r\n    const auto i = partition_point(c.begin(), c.end(), p);\r\n\r\n    assert(distance(c.begin(), i) == correct);\r\n}\r\n\r\nstruct Cat {\r\n    explicit Cat(int n) : m_n(n) {}\r\n\r\n    int m_n;\r\n};\r\n\r\nsize_t g_swaps = 0;\r\nsize_t g_preds = 0;\r\n\r\nvoid swap(Cat& l, Cat& r) {\r\n    ++g_swaps;\r\n    swap(l.m_n, r.m_n);\r\n}\r\n\r\ntemplate <typename Container>\r\nvoid test_partition(const vector<int>& vi, const int x) {\r\n    auto pred = [x](const Cat& cat) -> bool {\r\n        ++g_preds;\r\n        return cat.m_n < x;\r\n    };\r\n\r\n    Container c(vi.begin(), vi.end());\r\n\r\n    g_swaps = 0;\r\n    g_preds = 0;\r\n\r\n    const auto i = partition(c.begin(), c.end(), pred);\r\n\r\n    typedef typename iterator_traits<typename Container::iterator>::iterator_category category_t;\r\n\r\n    if (is_same_v<category_t, forward_iterator_tag>) {\r\n        assert(g_swaps <= vi.size());\r\n    } else {\r\n        assert(g_swaps <= vi.size() / 2);\r\n    }\r\n\r\n    assert(g_preds == vi.size());\r\n\r\n    assert(is_partitioned(c.begin(), c.end(), pred));\r\n\r\n    assert(distance(c.begin(), i) == x);\r\n\r\n    assert(i == partition_point(c.begin(), c.end(), pred));\r\n}\r\n\r\nint main() {\r\n    for (int k = 0; k < 100; ++k) {\r\n        vector<int> v;\r\n\r\n        for (int i = 0; i < k; ++i) {\r\n            v.push_back(i);\r\n        }\r\n\r\n        forward_list<int> fl(v.begin(), v.end());\r\n\r\n        for (int x = 0; x <= k; ++x) {\r\n            test_partition_point(v, [x](int e) { return e < x; }, x);\r\n            test_partition_point(fl, [x](int e) { return e < x; }, x);\r\n        }\r\n    }\r\n\r\n    for (int k = 0; k < 7; ++k) {\r\n        vector<int> vi;\r\n\r\n        for (int i = 0; i < k; ++i) {\r\n            vi.push_back(i);\r\n        }\r\n\r\n        do {\r\n            for (int x = 0; x <= k; ++x) {\r\n                test_partition<vector<Cat>>(vi, x);\r\n                test_partition<list<Cat>>(vi, x);\r\n                test_partition<forward_list<Cat>>(vi, x);\r\n            }\r\n        } while (next_permutation(vi.begin(), vi.end()));\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0299014_exception_ptr_requirements/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0299014_exception_ptr_requirements/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <exception>\r\n#include <new>\r\n\r\nusing namespace std;\r\n\r\nexception_ptr rvalue() {\r\n    return exception_ptr();\r\n}\r\n\r\nvoid observe(const exception_ptr&) {}\r\n\r\nint main() {\r\n    {\r\n        exception_ptr ep1; // DefaultConstructible\r\n        observe(exception_ptr()); // DefaultConstructible\r\n\r\n        exception_ptr ep2 = rvalue(); // MoveConstructible\r\n        observe(exception_ptr(rvalue())); // MoveConstructible\r\n\r\n        exception_ptr ep3 = ep1; // CopyConstructible\r\n        observe(exception_ptr(ep1)); // CopyConstructible\r\n\r\n        ep1 = rvalue(); // MoveAssignable\r\n\r\n        ep1 = ep2; // CopyAssignable\r\n\r\n        swap(ep1, ep2); // Swappable\r\n\r\n        exception_ptr ep4(nullptr); // NullablePointer\r\n        exception_ptr ep5 = nullptr; // NullablePointer\r\n        observe(exception_ptr(nullptr)); // NullablePointer\r\n        ep1 = nullptr; // NullablePointer\r\n        if (ep1 == ep2) { // EqualityComparable\r\n        }\r\n        if (ep1 != ep2) { // NullablePointer\r\n        }\r\n        if (ep1 == nullptr) { // NullablePointer\r\n        }\r\n        if (ep1 != nullptr) { // NullablePointer\r\n        }\r\n        if (nullptr == ep1) { // NullablePointer\r\n        }\r\n        if (nullptr != ep1) { // NullablePointer\r\n        }\r\n        if (ep1) { // NullablePointer\r\n        }\r\n    } // Destructible\r\n\r\n    {\r\n        exception_ptr empty;\r\n\r\n        exception_ptr full = make_exception_ptr(1729);\r\n\r\n        assert(!static_cast<bool>(empty));\r\n        assert(static_cast<bool>(full));\r\n\r\n        assert(empty == empty);\r\n        assert(!(empty != empty));\r\n\r\n        assert(full == full);\r\n        assert(!(full != full));\r\n\r\n        assert(empty == nullptr);\r\n        assert(nullptr == empty);\r\n        assert(!(empty != nullptr));\r\n        assert(!(nullptr != empty));\r\n\r\n        assert(!(full == nullptr));\r\n        assert(!(nullptr == full));\r\n        assert(full != nullptr);\r\n        assert(nullptr != full);\r\n\r\n        assert(!(empty == full));\r\n        assert(!(full == empty));\r\n        assert(empty != full);\r\n        assert(full != empty);\r\n\r\n        exception_ptr empty2 = nullptr;\r\n\r\n        assert(empty == empty2);\r\n        assert(empty2 == empty);\r\n        assert(!(empty != empty2));\r\n        assert(!(empty2 != empty));\r\n\r\n        exception_ptr full2 = full;\r\n\r\n        assert(full == full2);\r\n        assert(full2 == full);\r\n        assert(!(full != full2));\r\n        assert(!(full2 != full));\r\n\r\n        exception_ptr different = make_exception_ptr(1729);\r\n\r\n        assert(!(full == different));\r\n        assert(!(different == full));\r\n        assert(full != different);\r\n        assert(different != full);\r\n\r\n\r\n        full = nullptr;\r\n\r\n        assert(!static_cast<bool>(full));\r\n\r\n        assert(full == empty);\r\n        assert(full != full2);\r\n\r\n\r\n        full = full2;\r\n\r\n        assert(full);\r\n        assert(full != empty);\r\n        assert(full == full2);\r\n\r\n\r\n        exception_ptr full3 = static_cast<exception_ptr&&>(full);\r\n\r\n        assert(full3 != empty);\r\n        assert(full3 == full2);\r\n        assert(full3 != different);\r\n\r\n\r\n        full = static_cast<exception_ptr&&>(full3);\r\n\r\n        assert(full != empty);\r\n        assert(full == full2);\r\n        assert(full != different);\r\n    }\r\n\r\n    {\r\n        exception_ptr a = make_exception_ptr(1729);\r\n        exception_ptr b = make_exception_ptr(\"meow\");\r\n\r\n        exception_ptr AA = a;\r\n        exception_ptr BB = b;\r\n\r\n        assert(a == AA);\r\n        assert(a != BB);\r\n\r\n        assert(b != AA);\r\n        assert(b == BB);\r\n\r\n        swap(a, b);\r\n\r\n        assert(a != AA);\r\n        assert(a == BB);\r\n\r\n        assert(b == AA);\r\n        assert(b != BB);\r\n\r\n        swap(a, b);\r\n\r\n        assert(a == AA);\r\n        assert(a != BB);\r\n\r\n        assert(b != AA);\r\n        assert(b == BB);\r\n\r\n        swap(a, a);\r\n\r\n        assert(a == AA);\r\n        assert(a != BB);\r\n\r\n        assert(b != AA);\r\n        assert(b == BB);\r\n    }\r\n\r\n    {\r\n        // Also test DevDiv-1210471 \"std::rethrow_exception is not [[noreturn]]\".\r\n\r\n        auto lambda = []() -> double { rethrow_exception(make_exception_ptr(1729)); };\r\n\r\n        try {\r\n            const double d = lambda();\r\n            (void) d;\r\n            abort();\r\n        } catch (const int i) {\r\n            assert(i == 1729);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0302476_pair_move/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0302476_pair_move/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstdlib>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\ntemplate <int A>\r\nstruct Cat {\r\n    Cat() {}\r\n\r\n    Cat(const Cat&) {}\r\n    Cat& operator=(const Cat&) {\r\n        return *this;\r\n    }\r\n    template <int B>\r\n    Cat(const Cat<B>&) {}\r\n    template <int B>\r\n    Cat& operator=(const Cat<B>&) {\r\n        return *this;\r\n    }\r\n\r\n    Cat(Cat&&) {\r\n        abort();\r\n    }\r\n\r\n    Cat& operator=(Cat&&) {\r\n        abort();\r\n    }\r\n\r\n    template <int B>\r\n    Cat(Cat<B>&&) {\r\n        abort();\r\n    }\r\n\r\n    template <int B>\r\n    Cat& operator=(Cat<B>&&) {\r\n        abort();\r\n    }\r\n\r\n    ~Cat() {}\r\n};\r\n\r\ntemplate <typename Src, typename Dst>\r\nvoid test() {\r\n    remove_reference_t<tuple_element_t<0, Src>> s0;\r\n    remove_reference_t<tuple_element_t<1, Src>> s1;\r\n\r\n    Src src(s0, s1);\r\n    Dst dst = move(src);\r\n    dst     = move(src);\r\n}\r\n\r\nint main() {\r\n    test<pair<Cat<1>&, Cat<2>&>, pair<Cat<1>&, Cat<2>&>>();\r\n    test<pair<Cat<3>&, Cat<4>&>, pair<Cat<5>, Cat<6>>>();\r\n    test<tuple<Cat<1>&, Cat<2>&>, tuple<Cat<1>&, Cat<2>&>>();\r\n    test<tuple<Cat<3>&, Cat<4>&>, tuple<Cat<5>, Cat<6>>>();\r\n    test<pair<Cat<3>&, Cat<4>&>, tuple<Cat<5>, Cat<6>>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0314451_make_pair_make_tuple/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0314451_make_pair_make_tuple/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n#include <memory>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nint main() {\r\n    {\r\n        unique_ptr<int> u1(new int(11));\r\n        unique_ptr<int> u2(new int(22));\r\n        unique_ptr<int> u3(new int(33));\r\n        unique_ptr<int> u4(new int(44));\r\n\r\n        pair<unique_ptr<int>, unique_ptr<int>> p(move(u1), move(u2));\r\n\r\n        assert(*p.first == 11);\r\n        assert(*p.second == 22);\r\n\r\n        p = make_pair(move(u3), move(u4));\r\n\r\n        assert(*p.first == 33);\r\n        assert(*p.second == 44);\r\n    }\r\n\r\n    {\r\n        unique_ptr<int> u1(new int(110));\r\n        unique_ptr<int> u2(new int(220));\r\n        unique_ptr<int> u3(new int(330));\r\n        unique_ptr<int> u4(new int(440));\r\n\r\n        tuple<unique_ptr<int>, unique_ptr<int>> t(move(u1), move(u2));\r\n\r\n        assert(*get<0>(t) == 110);\r\n        assert(*get<1>(t) == 220);\r\n\r\n        t = make_tuple(move(u3), move(u4));\r\n\r\n        assert(*get<0>(t) == 330);\r\n        assert(*get<1>(t) == 440);\r\n    }\r\n\r\n    {\r\n        int i          = 1729;\r\n        double d       = 3.14;\r\n        const double e = 2.71828;\r\n\r\n        reference_wrapper<int> r1(i);\r\n        const reference_wrapper<int> r2(i);\r\n        reference_wrapper<const int> r3(i);\r\n        const reference_wrapper<const int> r4(i);\r\n\r\n        int x[]       = {100, 200, 300};\r\n        const int y[] = {400, 500, 600};\r\n\r\n        STATIC_ASSERT(is_same_v<decltype(make_pair(r1, d)), pair<int&, double>>);\r\n        STATIC_ASSERT(is_same_v<decltype(make_pair(r2, e)), pair<int&, double>>);\r\n        STATIC_ASSERT(is_same_v<decltype(make_pair(r3, move(d))), pair<const int&, double>>);\r\n        STATIC_ASSERT(is_same_v<decltype(make_pair(r4, move(e))), pair<const int&, double>>);\r\n\r\n        STATIC_ASSERT(is_same_v<decltype(make_pair(move(r1), x)), pair<int&, int*>>);\r\n        STATIC_ASSERT(is_same_v<decltype(make_pair(move(r2), y)), pair<int&, const int*>>);\r\n        STATIC_ASSERT(is_same_v<decltype(make_pair(move(r3), move(x))), pair<const int&, int*>>);\r\n        STATIC_ASSERT(is_same_v<decltype(make_pair(move(r4), move(y))), pair<const int&, const int*>>);\r\n\r\n        STATIC_ASSERT(is_same_v<decltype(make_tuple(r1, d)), tuple<int&, double>>);\r\n        STATIC_ASSERT(is_same_v<decltype(make_tuple(r2, e)), tuple<int&, double>>);\r\n        STATIC_ASSERT(is_same_v<decltype(make_tuple(r3, move(d))), tuple<const int&, double>>);\r\n        STATIC_ASSERT(is_same_v<decltype(make_tuple(r4, move(e))), tuple<const int&, double>>);\r\n\r\n        STATIC_ASSERT(is_same_v<decltype(make_tuple(move(r1), x)), tuple<int&, int*>>);\r\n        STATIC_ASSERT(is_same_v<decltype(make_tuple(move(r2), y)), tuple<int&, const int*>>);\r\n        STATIC_ASSERT(is_same_v<decltype(make_tuple(move(r3), move(x))), tuple<const int&, int*>>);\r\n        STATIC_ASSERT(is_same_v<decltype(make_tuple(move(r4), move(y))), tuple<const int&, const int*>>);\r\n\r\n        (void) d;\r\n        (void) e;\r\n        (void) x;\r\n        (void) y;\r\n        (void) r1;\r\n        (void) r2;\r\n        (void) r3;\r\n        (void) r4;\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0316853_find_memchr_optimization/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"\"\r\n*\tPM_CL=\"/D_USE_STD_VECTOR_ALGORITHMS=0\"\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0316853_find_memchr_optimization/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// DevDiv-316853 \"<algorithm>: find()'s memchr() optimization is incorrect\"\r\n// DevDiv-468500 \"<algorithm>: find()'s memchr() optimization is insufficiently aggressive\"\r\n\r\n#pragma warning(disable : 4244) // '=': conversion from 'const _Ty' to 'unsigned int', possible loss of data\r\n#pragma warning(disable : 4389) // signed/unsigned mismatch\r\n#pragma warning(disable : 4805) // '==': unsafe mix of type '_Ty' and type 'const _Ty' in operation\r\n// This test intentionally triggers that warning when one of the inputs to find is bool\r\n#pragma warning(disable : 4984) // 'if constexpr' is a C++17 language extension\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wc++17-extensions\"\r\n#pragma clang diagnostic ignored \"-Wsign-compare\"\r\n#endif // __clang__\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <iterator>\r\n#include <limits>\r\n#include <list>\r\n#include <string>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nconstexpr auto long_min = numeric_limits<long>::min();\r\nconstexpr auto long_max = numeric_limits<long>::max();\r\nconstexpr auto uint_max = numeric_limits<unsigned int>::max();\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nstruct Cat {\r\n    explicit Cat(int n) : m_n(n) {}\r\n\r\n    int m_n;\r\n};\r\n\r\nbool operator==(int x, const Cat& c) {\r\n    return x == c.m_n * 11;\r\n}\r\n\r\ntemplate <class ElementType, class ValueType>\r\nvoid test_limit_check_elements_impl() {\r\n    if constexpr (is_signed_v<ElementType>) {\r\n        using UElementType              = make_unsigned_t<ElementType>;\r\n        constexpr ElementType min_val   = numeric_limits<ElementType>::min();\r\n        constexpr ElementType max_val   = numeric_limits<ElementType>::max();\r\n        constexpr UElementType umax_val = numeric_limits<UElementType>::max();\r\n\r\n        const ElementType sc[] = {\r\n            min_val, min_val + 1, min_val + 2, -2, -1, -1, 0, 1, 1, 2, max_val - 2, max_val - 1, max_val};\r\n\r\n        if constexpr (is_signed_v<ValueType>) {\r\n            if constexpr (numeric_limits<ValueType>::min() < min_val) {\r\n                assert(find(begin(sc), end(sc), ValueType{ValueType{min_val} - 1}) == end(sc));\r\n#if _HAS_CXX23\r\n                assert(ranges::find_last(sc, ValueType{ValueType{min_val} - 1}).begin() == end(sc));\r\n#endif // _HAS_CXX23\r\n            }\r\n\r\n            if constexpr (sizeof(ElementType) <= sizeof(ValueType)) {\r\n                assert(find(begin(sc), end(sc), ValueType{min_val}) == begin(sc));\r\n#if _HAS_CXX23\r\n                assert(ranges::find_last(sc, ValueType{min_val}).begin() == begin(sc));\r\n#endif // _HAS_CXX23\r\n            }\r\n\r\n            assert(find(begin(sc), end(sc), ValueType{-1}) == begin(sc) + 4);\r\n            assert(count(begin(sc), end(sc), ValueType{-1}) == 2);\r\n#if _HAS_CXX23\r\n            assert(ranges::find_last(sc, ValueType{-1}).begin() == begin(sc) + 5);\r\n#endif // _HAS_CXX23\r\n        } else {\r\n            constexpr auto max_vt = numeric_limits<ValueType>::max();\r\n            if constexpr (ElementType{-1} == max_vt) {\r\n                // ugly conversions :(\r\n                assert(find(begin(sc), end(sc), max_vt) == begin(sc) + 4);\r\n                assert(find(begin(sc), end(sc), max_vt - 1) == begin(sc) + 3);\r\n\r\n                assert(count(begin(sc), end(sc), max_vt) == 2);\r\n                assert(count(begin(sc), end(sc), max_vt - 1) == 1);\r\n\r\n#if _HAS_CXX23\r\n                assert(ranges::find_last(sc, max_vt).begin() == begin(sc) + 5);\r\n                assert(ranges::find_last(sc, max_vt - 1).begin() == begin(sc) + 3);\r\n#endif // _HAS_CXX23\r\n            } else {\r\n                assert(find(begin(sc), end(sc), max_vt) == end(sc));\r\n                assert(find(begin(sc), end(sc), max_vt - 1) == end(sc));\r\n\r\n                assert(count(begin(sc), end(sc), max_vt) == 0);\r\n                assert(count(begin(sc), end(sc), max_vt - 1) == 0);\r\n\r\n#if _HAS_CXX23\r\n                assert(ranges::find_last(sc, max_vt).begin() == end(sc));\r\n                assert(ranges::find_last(sc, max_vt - 1).begin() == end(sc));\r\n#endif // _HAS_CXX23\r\n            }\r\n        }\r\n\r\n        assert(find(begin(sc), end(sc), ValueType{0}) == begin(sc) + 6);\r\n        assert(find(begin(sc), end(sc), ValueType{5}) == end(sc));\r\n\r\n        assert(count(begin(sc), end(sc), ValueType{0}) == 1);\r\n        assert(count(begin(sc), end(sc), ValueType{5}) == 0);\r\n\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(sc, ValueType{0}).begin() == begin(sc) + 6);\r\n        assert(ranges::find_last(sc, ValueType{5}).begin() == end(sc));\r\n#endif // _HAS_CXX23\r\n\r\n        if constexpr (sizeof(ElementType) <= sizeof(ValueType)) {\r\n            assert(find(begin(sc), end(sc), ValueType{max_val}) == begin(sc) + 12);\r\n            assert(count(begin(sc), end(sc), ValueType{max_val}) == 1);\r\n#if _HAS_CXX23\r\n            assert(ranges::find_last(sc, ValueType{max_val}).begin() == begin(sc) + 12);\r\n#endif // _HAS_CXX23\r\n\r\n            if constexpr (sizeof(ElementType) < sizeof(ValueType)) {\r\n                assert(find(begin(sc), end(sc), ValueType{ValueType{max_val} + 1}) == end(sc));\r\n                assert(find(begin(sc), end(sc), ValueType{umax_val}) == end(sc));\r\n\r\n                assert(count(begin(sc), end(sc), ValueType{ValueType{max_val} + 1}) == 0);\r\n                assert(count(begin(sc), end(sc), ValueType{umax_val}) == 0);\r\n\r\n#if _HAS_CXX23\r\n                assert(ranges::find_last(sc, ValueType{ValueType{max_val} + 1}).begin() == end(sc));\r\n                assert(ranges::find_last(sc, ValueType{umax_val}).begin() == end(sc));\r\n#endif // _HAS_CXX23\r\n            }\r\n        }\r\n    } else {\r\n        constexpr ElementType max_val = numeric_limits<ElementType>::max();\r\n        constexpr ValueType max_vt    = numeric_limits<ValueType>::max();\r\n\r\n        const ElementType uc[] = {0, 1, 1, 2, max_val - 2, max_val - 1, max_val};\r\n\r\n        assert(find(begin(uc), end(uc), ValueType{0}) == begin(uc));\r\n        assert(find(begin(uc), end(uc), ValueType{2}) == begin(uc) + 3);\r\n        assert(find(begin(uc), end(uc), ValueType{6}) == end(uc));\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(uc, ValueType{0}).begin() == begin(uc));\r\n        assert(ranges::find_last(uc, ValueType{2}).begin() == begin(uc) + 3);\r\n        assert(ranges::find_last(uc, ValueType{6}).begin() == end(uc));\r\n#endif // _HAS_CXX23\r\n\r\n        if constexpr (is_signed_v<ValueType>) {\r\n            if constexpr (ValueType{-1} == max_val) {\r\n                // ugly conversions :(\r\n                assert(find(begin(uc), end(uc), ValueType{-1}) == begin(uc) + 6);\r\n                assert(find(begin(uc), end(uc), ValueType{-2}) == begin(uc) + 5);\r\n\r\n                assert(count(begin(uc), end(uc), ValueType{-1}) == 1);\r\n                assert(count(begin(uc), end(uc), ValueType{-2}) == 1);\r\n#if _HAS_CXX23\r\n                assert(ranges::find_last(uc, ValueType{-1}).begin() == begin(uc) + 6);\r\n                assert(ranges::find_last(uc, ValueType{-2}).begin() == begin(uc) + 5);\r\n#endif // _HAS_CXX23\r\n            } else {\r\n                assert(find(begin(uc), end(uc), ValueType{-1}) == end(uc));\r\n                assert(find(begin(uc), end(uc), ValueType{-2}) == end(uc));\r\n\r\n                assert(count(begin(uc), end(uc), ValueType{-1}) == 0);\r\n                assert(count(begin(uc), end(uc), ValueType{-2}) == 0);\r\n#if _HAS_CXX23\r\n                assert(ranges::find_last(uc, ValueType{-1}).begin() == end(uc));\r\n                assert(ranges::find_last(uc, ValueType{-2}).begin() == end(uc));\r\n#endif // _HAS_CXX23\r\n            }\r\n        }\r\n\r\n        if constexpr (max_val <= max_vt) {\r\n            assert(find(begin(uc), end(uc), ValueType{max_val - 3}) == end(uc));\r\n            assert(find(begin(uc), end(uc), ValueType{max_val - 2}) == begin(uc) + 4);\r\n            assert(find(begin(uc), end(uc), ValueType{max_val}) == begin(uc) + 6);\r\n\r\n#if _HAS_CXX23\r\n            assert(ranges::find_last(uc, ValueType{max_val - 3}).begin() == end(uc));\r\n            assert(ranges::find_last(uc, ValueType{max_val - 2}).begin() == begin(uc) + 4);\r\n            assert(ranges::find_last(uc, ValueType{max_val}).begin() == begin(uc) + 6);\r\n#endif // _HAS_CXX23\r\n\r\n            if constexpr (max_val < max_vt) {\r\n                assert(find(begin(uc), end(uc), ValueType{ValueType{max_val} + 1}) == end(uc));\r\n#if _HAS_CXX23\r\n                assert(ranges::find_last(uc, ValueType{ValueType{max_val} + 1}).begin() == end(uc));\r\n#endif // _HAS_CXX23\r\n\r\n                if constexpr (sizeof(ElementType) < sizeof(ValueType)) {\r\n                    assert(find(begin(uc), end(uc), max_vt) == end(uc));\r\n#if _HAS_CXX23\r\n                    assert(ranges::find_last(uc, max_vt).begin() == end(uc));\r\n#endif // _HAS_CXX23\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class ElementType>\r\nvoid test_limit_check_elements() {\r\n    test_limit_check_elements_impl<ElementType, signed char>();\r\n    test_limit_check_elements_impl<ElementType, short>();\r\n    test_limit_check_elements_impl<ElementType, int>();\r\n    test_limit_check_elements_impl<ElementType, long>();\r\n    test_limit_check_elements_impl<ElementType, long long>();\r\n\r\n    test_limit_check_elements_impl<ElementType, unsigned char>();\r\n    test_limit_check_elements_impl<ElementType, unsigned short>();\r\n    test_limit_check_elements_impl<ElementType, unsigned int>();\r\n    test_limit_check_elements_impl<ElementType, unsigned long>();\r\n    test_limit_check_elements_impl<ElementType, unsigned long long>();\r\n}\r\n\r\nint main() {\r\n    { // DevDiv-316853 \"<algorithm>: find()'s memchr() optimization is incorrect\"\r\n        vector<signed char> v;\r\n        v.push_back(22);\r\n        v.push_back(33);\r\n        v.push_back(-1);\r\n        v.push_back(44);\r\n        v.push_back(44);\r\n        v.push_back(55);\r\n\r\n#if _HAS_CXX20\r\n        static_assert(_Vector_alg_in_find_is_safe<decltype(v.begin()), decltype(33)>, \"should optimize\");\r\n#endif // _HAS_CXX20\r\n        static_assert(_Could_compare_equal_to_value_type<signed char*>(33), \"should be within limits\");\r\n\r\n        assert(find(v.begin(), v.end(), 33) - v.begin() == 1);\r\n        assert(find(v.begin(), v.end(), -1) - v.begin() == 2);\r\n        assert(find(v.begin(), v.end(), 255) - v.begin() == 6);\r\n\r\n        assert(find(v.cbegin(), v.cend(), 33) - v.cbegin() == 1);\r\n        assert(find(v.cbegin(), v.cend(), -1) - v.cbegin() == 2);\r\n        assert(find(v.cbegin(), v.cend(), 255) - v.cbegin() == 6);\r\n\r\n        assert(count(v.cbegin(), v.cend(), 33) == 1);\r\n        assert(count(v.cbegin(), v.cend(), 44) == 2);\r\n        assert(count(v.cbegin(), v.cend(), 255) == 0);\r\n\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(v, 33).begin() - v.begin() == 1);\r\n        assert(ranges::find_last(v, -1).begin() - v.begin() == 2);\r\n        assert(ranges::find_last(v, 255).begin() - v.begin() == 6);\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n\r\n    { // Optimization inapplicable due to bogus iterator type (although the element type and value type are good)\r\n        list<unsigned char> l;\r\n        l.push_back(11);\r\n        l.push_back(22);\r\n        l.push_back(33);\r\n        l.push_back(44);\r\n        l.push_back(44);\r\n        l.push_back(55);\r\n\r\n        static_assert(!_Vector_alg_in_find_is_safe<decltype(l.begin()), decltype(33)>, \"should not optimize\");\r\n\r\n        assert(find(l.begin(), l.end(), 44) == next(l.begin(), 3));\r\n        assert(find(l.begin(), l.end(), 17) == l.end());\r\n\r\n        assert(count(l.begin(), l.end(), 44) == 2);\r\n        assert(count(l.begin(), l.end(), 17) == 0);\r\n\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(l, 44).begin() == next(l.begin(), 4));\r\n        assert(ranges::find_last(l, 17).begin() == l.end());\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n    { // Optimization inapplicable due to bogus element type and bogus value type\r\n        vector<string> v;\r\n        v.push_back(\"cute\");\r\n        v.push_back(\"cute\");\r\n        v.push_back(\"fluffy\");\r\n        v.push_back(\"kittens\");\r\n\r\n        static_assert(!_Vector_alg_in_find_is_safe<decltype(v.begin()), decltype(\"fluffy\")>, \"should not optimize\");\r\n\r\n        assert(find(v.begin(), v.end(), \"fluffy\") == v.begin() + 2);\r\n        assert(find(v.begin(), v.end(), \"zombies\") == v.end());\r\n\r\n        assert(count(v.begin(), v.end(), \"cute\") == 2);\r\n        assert(count(v.begin(), v.end(), \"zombies\") == 0);\r\n\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(v, \"fluffy\").begin() == v.begin() + 2);\r\n        assert(ranges::find_last(v, \"zombies\").begin() == v.end());\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n    {\r\n        // Optimization with memchr inapplicable due to bogus element type (although the value types are good)\r\n        // Vector optimization still works\r\n\r\n        vector<unsigned long> v;\r\n        v.push_back(0x10203040UL);\r\n        v.push_back(0x11223344UL);\r\n        v.push_back(0xAABBCCDDUL);\r\n\r\n#if _HAS_CXX20\r\n        static_assert(_Vector_alg_in_find_is_safe<decltype(v.begin()), decltype(0x10203040UL)>, \"should optimize\");\r\n#endif // _HAS_CXX20\r\n\r\n        // Make sure we don't look for 0x11 bytes in the range!\r\n\r\n        assert(find(v.begin(), v.end(), 0xAABBCCDDUL) == v.begin() + 2);\r\n        assert(find(v.begin(), v.end(), 0x11UL) == v.end());\r\n\r\n        assert(count(v.begin(), v.end(), 0xAABBCCDDUL) == 1);\r\n        assert(count(v.begin(), v.end(), 0x11UL) == 0);\r\n\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(v, 0xAABBCCDDUL).begin() == v.begin() + 2);\r\n        assert(ranges::find_last(v, 0x11UL).begin() == v.end());\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n    { // Optimization inapplicable due to bogus value type (although the element type is good)\r\n        vector<unsigned char> v;\r\n        v.push_back(11);\r\n        v.push_back(22);\r\n        v.push_back(33);\r\n        v.push_back(33);\r\n        v.push_back(33);\r\n\r\n        static_assert(!_Vector_alg_in_find_is_safe<decltype(v.begin()), decltype(Cat(3))>, \"should not optimize\");\r\n\r\n        assert(find(v.begin(), v.end(), Cat(2)) == v.begin() + 1);\r\n        assert(find(v.begin(), v.end(), Cat(4)) == v.end());\r\n\r\n        assert(count(v.begin(), v.end(), Cat(3)) == 3);\r\n        assert(count(v.begin(), v.end(), Cat(7)) == 0);\r\n    }\r\n\r\n    { // Test optimized element types.\r\n        vector<char> vc;\r\n        vc.push_back('m');\r\n        vc.push_back('e');\r\n        vc.push_back('e');\r\n        vc.push_back('o');\r\n        vc.push_back('o');\r\n        vc.push_back('w');\r\n\r\n#if _HAS_CXX20\r\n        static_assert(_Vector_alg_in_find_is_safe<decltype(vc.begin()), decltype('m')>, \"should optimize\");\r\n#endif // _HAS_CXX20\r\n\r\n        assert(find(vc.begin(), vc.end(), 'o') == vc.begin() + 3);\r\n        assert(find(vc.begin(), vc.end(), 'X') == vc.end());\r\n\r\n        assert(count(vc.begin(), vc.end(), 'o') == 2);\r\n        assert(count(vc.begin(), vc.end(), 'X') == 0);\r\n\r\n        assert(find(vc.cbegin(), vc.cend(), 'o') == vc.cbegin() + 3);\r\n        assert(find(vc.cbegin(), vc.cend(), 'X') == vc.cend());\r\n\r\n        assert(count(vc.cbegin(), vc.cend(), 'o') == 2);\r\n        assert(count(vc.cbegin(), vc.cend(), 'X') == 0);\r\n\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(vc, 'o').begin() == vc.begin() + 4);\r\n        assert(ranges::find_last(vc, 'X').begin() == vc.end());\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n    { // Test optimized element types.\r\n        vector<signed char> vsc;\r\n        vsc.push_back(17);\r\n        vsc.push_back(29);\r\n        vsc.push_back(-1);\r\n        vsc.push_back(-128);\r\n        vsc.push_back(127);\r\n\r\n#if _HAS_CXX20\r\n        static_assert(_Vector_alg_in_find_is_safe<decltype(vsc.begin()), decltype(29)>, \"should optimize\");\r\n#endif // _HAS_CXX20\r\n\r\n        assert(find(vsc.begin(), vsc.end(), 17) == vsc.begin());\r\n        assert(find(vsc.begin(), vsc.end(), 29) == vsc.begin() + 1);\r\n        assert(find(vsc.begin(), vsc.end(), -1) == vsc.begin() + 2);\r\n        assert(find(vsc.begin(), vsc.end(), -128) == vsc.begin() + 3);\r\n        assert(find(vsc.begin(), vsc.end(), 127) == vsc.begin() + 4);\r\n        assert(find(vsc.begin(), vsc.end(), 255) == vsc.end());\r\n\r\n        assert(find(vsc.cbegin(), vsc.cend(), 17) == vsc.cbegin());\r\n        assert(find(vsc.cbegin(), vsc.cend(), 29) == vsc.cbegin() + 1);\r\n        assert(find(vsc.cbegin(), vsc.cend(), -1) == vsc.cbegin() + 2);\r\n        assert(find(vsc.cbegin(), vsc.cend(), -128) == vsc.cbegin() + 3);\r\n        assert(find(vsc.cbegin(), vsc.cend(), 127) == vsc.cbegin() + 4);\r\n        assert(find(vsc.cbegin(), vsc.cend(), 255) == vsc.cend());\r\n\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(vsc, 17).begin() == vsc.begin());\r\n        assert(ranges::find_last(vsc, 29).begin() == vsc.begin() + 1);\r\n        assert(ranges::find_last(vsc, -1).begin() == vsc.begin() + 2);\r\n        assert(ranges::find_last(vsc, -128).begin() == vsc.begin() + 3);\r\n        assert(ranges::find_last(vsc, 127).begin() == vsc.begin() + 4);\r\n        assert(ranges::find_last(vsc, 255).begin() == vsc.end());\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n    { // Test optimized element types.\r\n        vector<unsigned char> vuc;\r\n        vuc.push_back(0);\r\n        vuc.push_back(1);\r\n        vuc.push_back(47);\r\n        vuc.push_back(254);\r\n        vuc.push_back(255);\r\n\r\n#if _HAS_CXX20\r\n        static_assert(_Vector_alg_in_find_is_safe<decltype(vuc.begin()), decltype(47)>, \"should optimize\");\r\n#endif // _HAS_CXX20\r\n\r\n        assert(find(vuc.begin(), vuc.end(), 47) == vuc.begin() + 2);\r\n        assert(find(vuc.begin(), vuc.end(), 255) == vuc.begin() + 4);\r\n        assert(find(vuc.begin(), vuc.end(), -1) == vuc.end());\r\n\r\n        assert(find(vuc.cbegin(), vuc.cend(), 47) == vuc.cbegin() + 2);\r\n        assert(find(vuc.cbegin(), vuc.cend(), 255) == vuc.cbegin() + 4);\r\n        assert(find(vuc.cbegin(), vuc.cend(), -1) == vuc.cend());\r\n\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(vuc, 47).begin() == vuc.begin() + 2);\r\n        assert(ranges::find_last(vuc, 255).begin() == vuc.begin() + 4);\r\n        assert(ranges::find_last(vuc, -1).begin() == vuc.end());\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n\r\n    { // Test optimized value types.\r\n        const unsigned char arr[] = {10, 20, 0, 255, 30, 40};\r\n\r\n        static_assert(_Vector_alg_in_find_is_safe<decltype(begin(arr)), decltype(30)>, \"should optimize\");\r\n\r\n        assert(find(begin(arr), end(arr), static_cast<signed char>(30)) == begin(arr) + 4);\r\n        assert(find(begin(arr), end(arr), static_cast<short>(30)) == begin(arr) + 4);\r\n        assert(find(begin(arr), end(arr), static_cast<int>(30)) == begin(arr) + 4);\r\n        assert(find(begin(arr), end(arr), static_cast<long>(30)) == begin(arr) + 4);\r\n        assert(find(begin(arr), end(arr), static_cast<long long>(30)) == begin(arr) + 4);\r\n\r\n        assert(find(begin(arr), end(arr), static_cast<unsigned char>(30)) == begin(arr) + 4);\r\n        assert(find(begin(arr), end(arr), static_cast<unsigned short>(30)) == begin(arr) + 4);\r\n        assert(find(begin(arr), end(arr), static_cast<unsigned int>(30)) == begin(arr) + 4);\r\n        assert(find(begin(arr), end(arr), static_cast<unsigned long>(30)) == begin(arr) + 4);\r\n        assert(find(begin(arr), end(arr), static_cast<unsigned long long>(30)) == begin(arr) + 4);\r\n\r\n        assert(find(begin(arr), end(arr), static_cast<char>(30)) == begin(arr) + 4);\r\n        assert(find(begin(arr), end(arr), static_cast<wchar_t>(30)) == begin(arr) + 4);\r\n\r\n        assert(find(begin(arr), end(arr), false) == begin(arr) + 2);\r\n        assert(find(begin(arr), end(arr), true) == end(arr));\r\n\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(arr, static_cast<signed char>(30)).begin() == begin(arr) + 4);\r\n        assert(ranges::find_last(arr, static_cast<short>(30)).begin() == begin(arr) + 4);\r\n        assert(ranges::find_last(arr, static_cast<int>(30)).begin() == begin(arr) + 4);\r\n        assert(ranges::find_last(arr, static_cast<long>(30)).begin() == begin(arr) + 4);\r\n        assert(ranges::find_last(arr, static_cast<long long>(30)).begin() == begin(arr) + 4);\r\n\r\n        assert(ranges::find_last(arr, static_cast<unsigned char>(30)).begin() == begin(arr) + 4);\r\n        assert(ranges::find_last(arr, static_cast<unsigned short>(30)).begin() == begin(arr) + 4);\r\n        assert(ranges::find_last(arr, static_cast<unsigned int>(30)).begin() == begin(arr) + 4);\r\n        assert(ranges::find_last(arr, static_cast<unsigned long>(30)).begin() == begin(arr) + 4);\r\n        assert(ranges::find_last(arr, static_cast<unsigned long long>(30)).begin() == begin(arr) + 4);\r\n\r\n        assert(ranges::find_last(arr, static_cast<char>(30)).begin() == begin(arr) + 4);\r\n        assert(ranges::find_last(arr, static_cast<wchar_t>(30)).begin() == begin(arr) + 4);\r\n\r\n        assert(ranges::find_last(arr, false).begin() == begin(arr) + 2);\r\n        assert(ranges::find_last(arr, true).begin() == end(arr));\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n    // Test limit checks.\r\n    test_limit_check_elements<char>();\r\n    test_limit_check_elements<signed char>();\r\n    test_limit_check_elements<short>();\r\n    test_limit_check_elements<int>();\r\n    test_limit_check_elements<long>();\r\n    test_limit_check_elements<long long>();\r\n    test_limit_check_elements<unsigned char>();\r\n    test_limit_check_elements<unsigned short>();\r\n    test_limit_check_elements<unsigned int>();\r\n    test_limit_check_elements<unsigned long>();\r\n    test_limit_check_elements<unsigned long long>();\r\n\r\n    { // Test advanced limit checks. We love integral promotions.\r\n        const signed char sc[] = {-128, -127, -126, -2, -1, 0, 1, 2, 125, 126, 127};\r\n\r\n        STATIC_ASSERT(static_cast<signed char>(-1) != static_cast<unsigned short>(0xFFFF));\r\n        STATIC_ASSERT(static_cast<signed char>(-1) == 0xFFFFFFFFUL);\r\n        STATIC_ASSERT(static_cast<signed char>(-2) == 0xFFFFFFFEUL);\r\n        STATIC_ASSERT(static_cast<signed char>(-127) == 0xFFFFFF81UL);\r\n        STATIC_ASSERT(static_cast<signed char>(-128) == 0xFFFFFF80UL);\r\n\r\n        assert(find(begin(sc), end(sc), static_cast<unsigned short>(0xFFFF)) == end(sc));\r\n\r\n        assert(find(begin(sc), end(sc), 0xFFFFFFFFUL) == begin(sc) + 4);\r\n        assert(find(begin(sc), end(sc), 0xFFFFFFFEUL) == begin(sc) + 3);\r\n        assert(find(begin(sc), end(sc), 0xFFFFFFAAUL) == end(sc));\r\n        assert(find(begin(sc), end(sc), 0xFFFFFF81UL) == begin(sc) + 1);\r\n        assert(find(begin(sc), end(sc), 0xFFFFFF80UL) == begin(sc));\r\n        assert(find(begin(sc), end(sc), 0xFFFFFF7FUL) == end(sc));\r\n        assert(find(begin(sc), end(sc), 0xFFFFFF00UL) == end(sc));\r\n\r\n        assert(find(begin(sc), end(sc), 0xFFFFFFFFFFFFFFFFULL) == begin(sc) + 4);\r\n        assert(find(begin(sc), end(sc), 0xFFFFFFFFFFFFFFFEULL) == begin(sc) + 3);\r\n        assert(find(begin(sc), end(sc), 0xFFFFFFFFFFFFFFAAULL) == end(sc));\r\n        assert(find(begin(sc), end(sc), 0xFFFFFFFFFFFFFF81ULL) == begin(sc) + 1);\r\n        assert(find(begin(sc), end(sc), 0xFFFFFFFFFFFFFF80ULL) == begin(sc));\r\n        assert(find(begin(sc), end(sc), 0xFFFFFFFFFFFFFF7FULL) == end(sc));\r\n        assert(find(begin(sc), end(sc), 0xFFFFFFFFFFFFFF00ULL) == end(sc));\r\n\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(sc, static_cast<unsigned short>(0xFFFF)).begin() == end(sc));\r\n\r\n        assert(ranges::find_last(sc, 0xFFFFFFFFUL).begin() == begin(sc) + 4);\r\n        assert(ranges::find_last(sc, 0xFFFFFFFEUL).begin() == begin(sc) + 3);\r\n        assert(ranges::find_last(sc, 0xFFFFFFAAUL).begin() == end(sc));\r\n        assert(ranges::find_last(sc, 0xFFFFFF81UL).begin() == begin(sc) + 1);\r\n        assert(ranges::find_last(sc, 0xFFFFFF80UL).begin() == begin(sc));\r\n        assert(ranges::find_last(sc, 0xFFFFFF7FUL).begin() == end(sc));\r\n        assert(ranges::find_last(sc, 0xFFFFFF00UL).begin() == end(sc));\r\n\r\n        assert(ranges::find_last(sc, 0xFFFFFFFFFFFFFFFFULL).begin() == begin(sc) + 4);\r\n        assert(ranges::find_last(sc, 0xFFFFFFFFFFFFFFFEULL).begin() == begin(sc) + 3);\r\n        assert(ranges::find_last(sc, 0xFFFFFFFFFFFFFFAAULL).begin() == end(sc));\r\n        assert(ranges::find_last(sc, 0xFFFFFFFFFFFFFF81ULL).begin() == begin(sc) + 1);\r\n        assert(ranges::find_last(sc, 0xFFFFFFFFFFFFFF80ULL).begin() == begin(sc));\r\n        assert(ranges::find_last(sc, 0xFFFFFFFFFFFFFF7FULL).begin() == end(sc));\r\n        assert(ranges::find_last(sc, 0xFFFFFFFFFFFFFF00ULL).begin() == end(sc));\r\n#endif // _HAS_CXX23\r\n\r\n        const short ss[] = {-32768, -32767, -32766, -2, -1, 0, 1, 2, 32765, 32766, 32767};\r\n\r\n        STATIC_ASSERT(static_cast<short>(-1) != static_cast<unsigned short>(0xFFFF));\r\n        STATIC_ASSERT(static_cast<short>(-1) == 0xFFFFFFFFUL);\r\n        STATIC_ASSERT(static_cast<short>(-2) == 0xFFFFFFFEUL);\r\n        STATIC_ASSERT(static_cast<short>(-32767) == 0xFFFF8001UL);\r\n        STATIC_ASSERT(static_cast<short>(-32768) == 0xFFFF8000UL);\r\n\r\n        assert(find(begin(ss), end(ss), static_cast<unsigned short>(0xFFFF)) == end(ss));\r\n\r\n        assert(find(begin(ss), end(ss), 0xFFFFFFFFUL) == begin(ss) + 4);\r\n        assert(find(begin(ss), end(ss), 0xFFFFFFFEUL) == begin(ss) + 3);\r\n        assert(find(begin(ss), end(ss), 0xFFFFAAAAUL) == end(ss));\r\n        assert(find(begin(ss), end(ss), 0xFFFF8001UL) == begin(ss) + 1);\r\n        assert(find(begin(ss), end(ss), 0xFFFF8000UL) == begin(ss));\r\n        assert(find(begin(ss), end(ss), 0xFFFF7FFFUL) == end(ss));\r\n        assert(find(begin(ss), end(ss), 0xFFFF0000UL) == end(ss));\r\n\r\n        assert(find(begin(ss), end(ss), 0xFFFFFFFFFFFFFFFFULL) == begin(ss) + 4);\r\n        assert(find(begin(ss), end(ss), 0xFFFFFFFFFFFFFFFEULL) == begin(ss) + 3);\r\n        assert(find(begin(ss), end(ss), 0xFFFFFFFFFFFFAAAAULL) == end(ss));\r\n        assert(find(begin(ss), end(ss), 0xFFFFFFFFFFFF8001ULL) == begin(ss) + 1);\r\n        assert(find(begin(ss), end(ss), 0xFFFFFFFFFFFF8000ULL) == begin(ss));\r\n        assert(find(begin(ss), end(ss), 0xFFFFFFFFFFFF7FFFULL) == end(ss));\r\n        assert(find(begin(ss), end(ss), 0xFFFFFFFFFFFF0000ULL) == end(ss));\r\n\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(ss, static_cast<unsigned short>(0xFFFF)).begin() == end(ss));\r\n\r\n        assert(ranges::find_last(ss, 0xFFFFFFFFUL).begin() == begin(ss) + 4);\r\n        assert(ranges::find_last(ss, 0xFFFFFFFEUL).begin() == begin(ss) + 3);\r\n        assert(ranges::find_last(ss, 0xFFFFAAAAUL).begin() == end(ss));\r\n        assert(ranges::find_last(ss, 0xFFFF8001UL).begin() == begin(ss) + 1);\r\n        assert(ranges::find_last(ss, 0xFFFF8000UL).begin() == begin(ss));\r\n        assert(ranges::find_last(ss, 0xFFFF7FFFUL).begin() == end(ss));\r\n        assert(ranges::find_last(ss, 0xFFFF0000UL).begin() == end(ss));\r\n\r\n        assert(ranges::find_last(ss, 0xFFFFFFFFFFFFFFFFULL).begin() == begin(ss) + 4);\r\n        assert(ranges::find_last(ss, 0xFFFFFFFFFFFFFFFEULL).begin() == begin(ss) + 3);\r\n        assert(ranges::find_last(ss, 0xFFFFFFFFFFFFAAAAULL).begin() == end(ss));\r\n        assert(ranges::find_last(ss, 0xFFFFFFFFFFFF8001ULL).begin() == begin(ss) + 1);\r\n        assert(ranges::find_last(ss, 0xFFFFFFFFFFFF8000ULL).begin() == begin(ss));\r\n        assert(ranges::find_last(ss, 0xFFFFFFFFFFFF7FFFULL).begin() == end(ss));\r\n        assert(ranges::find_last(ss, 0xFFFFFFFFFFFF0000ULL).begin() == end(ss));\r\n#endif // _HAS_CXX23\r\n\r\n        // No longer integral promotions, still repeat the applicable part once to be sure\r\n\r\n        const long sl[] = {long_min, long_min + 1, long_min + 2, -2, -1, 0, 1, 2, long_max - 2, long_max - 1, long_max};\r\n\r\n        STATIC_ASSERT(static_cast<long>(-1) != static_cast<unsigned short>(0xFFFF));\r\n        STATIC_ASSERT(static_cast<long>(-1) == 0xFFFFFFFFUL);\r\n        STATIC_ASSERT(static_cast<long>(-2) == 0xFFFFFFFEUL);\r\n        STATIC_ASSERT(static_cast<long>(long_min + 1) == 0x80000001UL);\r\n        STATIC_ASSERT(static_cast<long>(long_min) == 0x80000000UL);\r\n\r\n        assert(find(begin(sl), end(sl), static_cast<unsigned short>(0xFFFF)) == end(sl));\r\n\r\n        assert(find(begin(sl), end(sl), 0xFFFFFFFFUL) == begin(sl) + 4);\r\n        assert(find(begin(sl), end(sl), 0xFFFFFFFEUL) == begin(sl) + 3);\r\n        assert(find(begin(sl), end(sl), 0xAAAAAAAAUL) == end(sl));\r\n        assert(find(begin(sl), end(sl), 0x80000001UL) == begin(sl) + 1);\r\n        assert(find(begin(sl), end(sl), 0x80000000UL) == begin(sl));\r\n\r\n        assert(find(begin(sl), end(sl), 0xFFFFFFFFFFFFFFFFULL) == begin(sl) + 4);\r\n        assert(find(begin(sl), end(sl), 0xFFFFFFFFFFFFFFFEULL) == begin(sl) + 3);\r\n        assert(find(begin(sl), end(sl), 0xFFFFFFFFAAAAAAAAULL) == end(sl));\r\n        assert(find(begin(sl), end(sl), 0xFFFFFFFF80000001ULL) == begin(sl) + 1);\r\n        assert(find(begin(sl), end(sl), 0xFFFFFFFF80000000ULL) == begin(sl));\r\n        assert(find(begin(sl), end(sl), 0xFFFFFFFF7FFFFFFFULL) == end(sl));\r\n        assert(find(begin(sl), end(sl), 0xFFFFFFFF00000000ULL) == end(sl));\r\n\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(sl, static_cast<unsigned short>(0xFFFF)).begin() == end(sl));\r\n\r\n        assert(ranges::find_last(sl, 0xFFFFFFFFUL).begin() == begin(sl) + 4);\r\n        assert(ranges::find_last(sl, 0xFFFFFFFEUL).begin() == begin(sl) + 3);\r\n        assert(ranges::find_last(sl, 0xAAAAAAAAUL).begin() == end(sl));\r\n        assert(ranges::find_last(sl, 0x80000001UL).begin() == begin(sl) + 1);\r\n        assert(ranges::find_last(sl, 0x80000000UL).begin() == begin(sl));\r\n\r\n        assert(ranges::find_last(sl, 0xFFFFFFFFFFFFFFFFULL).begin() == begin(sl) + 4);\r\n        assert(ranges::find_last(sl, 0xFFFFFFFFFFFFFFFEULL).begin() == begin(sl) + 3);\r\n        assert(ranges::find_last(sl, 0xFFFFFFFFAAAAAAAAULL).begin() == end(sl));\r\n        assert(ranges::find_last(sl, 0xFFFFFFFF80000001ULL).begin() == begin(sl) + 1);\r\n        assert(ranges::find_last(sl, 0xFFFFFFFF80000000ULL).begin() == begin(sl));\r\n        assert(ranges::find_last(sl, 0xFFFFFFFF7FFFFFFFULL).begin() == end(sl));\r\n        assert(ranges::find_last(sl, 0xFFFFFFFF00000000ULL).begin() == end(sl));\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n    { // unsigned int == int, weird conversions yay! (GH-3244)\r\n        const unsigned int ui[] = {0, 1, 2, uint_max - 2, uint_max - 1, uint_max};\r\n\r\n        assert(find(begin(ui), end(ui), 0) == begin(ui));\r\n        assert(find(begin(ui), end(ui), 2) == begin(ui) + 2);\r\n        assert(find(begin(ui), end(ui), 3) == end(ui));\r\n        assert(find(begin(ui), end(ui), -2) == begin(ui) + 4);\r\n        assert(find(begin(ui), end(ui), -1) == begin(ui) + 5);\r\n\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(ui, 0).begin() == begin(ui));\r\n        assert(ranges::find_last(ui, 2).begin() == begin(ui) + 2);\r\n        assert(ranges::find_last(ui, 3).begin() == end(ui));\r\n        assert(ranges::find_last(ui, -2).begin() == begin(ui) + 4);\r\n        assert(ranges::find_last(ui, -1).begin() == begin(ui) + 5);\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n    { // Test bools\r\n        const bool arr[]{true, true, true, false, true, false};\r\n\r\n        static_assert(_Vector_alg_in_find_is_safe<decltype(begin(arr)), decltype(true)>, \"should optimize\");\r\n\r\n        assert(find(begin(arr), end(arr), false) == begin(arr) + 3);\r\n        assert(find(begin(arr), end(arr), true) == begin(arr));\r\n        assert(find(begin(arr), end(arr), 2) == end(arr));\r\n\r\n        assert(count(begin(arr), end(arr), false) == 2);\r\n        assert(count(begin(arr), end(arr), true) == 4);\r\n        assert(count(begin(arr), end(arr), 2) == 0);\r\n\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(arr, false).begin() == begin(arr) + 5);\r\n        assert(ranges::find_last(arr, true).begin() == begin(arr) + 4);\r\n        assert(ranges::find_last(arr, 2).begin() == end(arr));\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n    { // Test pointers\r\n        const char* s = \"xxxyyy\";\r\n        const char* arr[]{s, s + 1, s + 1, s + 5, s, s + 4, nullptr};\r\n        const void* arr_void[]{s, s + 1, s + 1, s + 5, s, s + 4, nullptr};\r\n\r\n        static_assert(_Vector_alg_in_find_is_safe<decltype(begin(arr)), decltype(s + 1)>, \"should optimize\");\r\n        static_assert(_Vector_alg_in_find_is_safe<decltype(begin(arr)), char*>, \"should optimize\");\r\n        static_assert(_Vector_alg_in_find_is_safe<decltype(begin(arr)), void*>, \"should optimize\");\r\n        static_assert(_Vector_alg_in_find_is_safe<decltype(begin(arr)), const volatile void*>, \"should optimize\");\r\n        static_assert(_Vector_alg_in_find_is_safe<decltype(begin(arr)), nullptr_t>, \"should optimize\");\r\n        static_assert(_Vector_alg_in_find_is_safe<decltype(begin(arr_void)), char*>, \"should optimize\");\r\n        static_assert(_Vector_alg_in_find_is_safe<decltype(begin(arr_void)), const char*>, \"should optimize\");\r\n        static_assert(_Vector_alg_in_find_is_safe<decltype(begin(arr_void)), void*>, \"should optimize\");\r\n        static_assert(_Vector_alg_in_find_is_safe<decltype(begin(arr_void)), const void*>, \"should optimize\");\r\n\r\n        // const char pointer range\r\n        assert(find(begin(arr), end(arr), s) == begin(arr));\r\n        assert(find(begin(arr), end(arr), const_cast<char*>(s)) == begin(arr));\r\n        assert(find(begin(arr), end(arr), const_cast<volatile char*>(s)) == begin(arr));\r\n\r\n        assert(find(begin(arr), end(arr), s + 1) == begin(arr) + 1);\r\n        assert(find(begin(arr), end(arr), static_cast<const void*>(s + 1)) == begin(arr) + 1);\r\n\r\n        assert(find(begin(arr), end(arr), s + 3) == end(arr));\r\n        assert(find(begin(arr), end(arr), static_cast<const void*>(s + 3)) == end(arr));\r\n\r\n        assert(find(begin(arr), end(arr), static_cast<const char*>(nullptr)) == begin(arr) + 6);\r\n        assert(find(begin(arr), end(arr), static_cast<const void*>(nullptr)) == begin(arr) + 6);\r\n        assert(find(begin(arr), end(arr), nullptr) == begin(arr) + 6);\r\n\r\n        assert(count(begin(arr), end(arr), s + 1) == 2);\r\n        assert(count(begin(arr), end(arr), s + 5) == 1);\r\n        assert(count(begin(arr), end(arr), s + 3) == 0);\r\n        assert(count(begin(arr), end(arr), static_cast<const char*>(nullptr)) == 1);\r\n        assert(count(begin(arr), end(arr), nullptr) == 1);\r\n\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(arr, s).begin() == begin(arr) + 4);\r\n        assert(ranges::find_last(arr, const_cast<char*>(s)).begin() == begin(arr) + 4);\r\n        assert(ranges::find_last(arr, const_cast<volatile char*>(s)).begin() == begin(arr) + 4);\r\n\r\n        assert(ranges::find_last(arr, s + 1).begin() == begin(arr) + 2);\r\n        assert(ranges::find_last(arr, static_cast<const void*>(s + 1)).begin() == begin(arr) + 2);\r\n\r\n        assert(ranges::find_last(arr, s + 3).begin() == end(arr));\r\n        assert(ranges::find_last(arr, static_cast<const void*>(s + 3)).begin() == end(arr));\r\n\r\n        assert(ranges::find_last(arr, static_cast<const char*>(nullptr)).begin() == begin(arr) + 6);\r\n        assert(ranges::find_last(arr, static_cast<const void*>(nullptr)).begin() == begin(arr) + 6);\r\n        assert(ranges::find_last(arr, nullptr).begin() == begin(arr) + 6);\r\n#endif // _HAS_CXX23\r\n\r\n        // const void pointer range\r\n        assert(find(begin(arr_void), end(arr_void), s) == begin(arr_void));\r\n        assert(find(begin(arr_void), end(arr_void), const_cast<char*>(s)) == begin(arr_void));\r\n        assert(find(begin(arr_void), end(arr_void), const_cast<volatile char*>(s)) == begin(arr_void));\r\n\r\n        assert(find(begin(arr_void), end(arr_void), s + 1) == begin(arr_void) + 1);\r\n        assert(find(begin(arr_void), end(arr_void), static_cast<const void*>(s + 1)) == begin(arr_void) + 1);\r\n\r\n        assert(find(begin(arr_void), end(arr_void), s + 3) == end(arr_void));\r\n        assert(find(begin(arr_void), end(arr_void), static_cast<const void*>(s + 3)) == end(arr_void));\r\n\r\n        assert(find(begin(arr_void), end(arr_void), static_cast<const char*>(nullptr)) == begin(arr_void) + 6);\r\n        assert(find(begin(arr_void), end(arr_void), static_cast<const void*>(nullptr)) == begin(arr_void) + 6);\r\n        assert(find(begin(arr_void), end(arr_void), nullptr) == begin(arr_void) + 6);\r\n\r\n        assert(count(begin(arr_void), end(arr_void), s + 1) == 2);\r\n        assert(count(begin(arr_void), end(arr_void), s + 5) == 1);\r\n        assert(count(begin(arr_void), end(arr_void), s + 3) == 0);\r\n        assert(count(begin(arr_void), end(arr_void), static_cast<const char*>(nullptr)) == 1);\r\n        assert(count(begin(arr_void), end(arr_void), nullptr) == 1);\r\n\r\n#if _HAS_CXX23\r\n        assert(ranges::find_last(arr_void, s).begin() == begin(arr_void) + 4);\r\n        assert(ranges::find_last(arr_void, const_cast<char*>(s)).begin() == begin(arr_void) + 4);\r\n        assert(ranges::find_last(arr_void, const_cast<volatile char*>(s)).begin() == begin(arr_void) + 4);\r\n\r\n        assert(ranges::find_last(arr_void, s + 1).begin() == begin(arr_void) + 2);\r\n        assert(ranges::find_last(arr_void, static_cast<const void*>(s + 1)).begin() == begin(arr_void) + 2);\r\n\r\n        assert(ranges::find_last(arr_void, s + 3).begin() == end(arr_void));\r\n        assert(ranges::find_last(arr_void, static_cast<const void*>(s + 3)).begin() == end(arr_void));\r\n\r\n        assert(ranges::find_last(arr_void, static_cast<const char*>(nullptr)).begin() == begin(arr_void) + 6);\r\n        assert(ranges::find_last(arr_void, static_cast<const void*>(nullptr)).begin() == begin(arr_void) + 6);\r\n        assert(ranges::find_last(arr_void, nullptr).begin() == begin(arr_void) + 6);\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n    { // random other checks for _Vector_alg_in_find_is_safe\r\n        static_assert(!_Vector_alg_in_find_is_safe<void (**)(), void*>, \"should not optimize\");\r\n        static_assert(!_Vector_alg_in_find_is_safe<void**, void (*)()>, \"should not optimize\");\r\n        static_assert(_Vector_alg_in_find_is_safe<void (**)(), void (*)()>, \"should optimize\");\r\n        static_assert(_Vector_alg_in_find_is_safe<int (**)(int), int (*)(int)>, \"should optimize\");\r\n        static_assert(!_Vector_alg_in_find_is_safe<void (**)(int), int (*)(int)>, \"should not optimize\");\r\n        static_assert(!_Vector_alg_in_find_is_safe<int (**)(), int (*)(int)>, \"should not optimize\");\r\n    }\r\n\r\n    { // quick checks to exercise more codepaths with _Could_compare_equal_to_value_type()\r\n        const vector<uint32_t> v{200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 205, 205, 205, 214, 215};\r\n        const uint32_t u32{205};\r\n        const uint64_t u64{0x1234'5678'0000'00CDull};\r\n\r\n        assert(u32 != u64); // u64 is out-of-range for uint32_t, so it can never compare equal...\r\n        assert(u32 == static_cast<uint32_t>(u64)); // ... unless an algorithm performs an improper cast\r\n\r\n        assert(count(v.begin(), v.end(), u32) == 4);\r\n        assert(count(v.begin(), v.end(), u64) == 0);\r\n\r\n#if _HAS_CXX20\r\n        assert(ranges::count(v, u32) == 4);\r\n        assert(ranges::count(v, u64) == 0);\r\n#endif // _HAS_CXX20\r\n\r\n        assert(find(v.begin(), v.end(), u32) == v.begin() + 5);\r\n        assert(find(v.begin(), v.end(), u64) == v.end());\r\n\r\n#if _HAS_CXX20\r\n        assert(ranges::find(v, u32) == v.begin() + 5);\r\n        assert(ranges::find(v, u64) == v.end());\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n        {\r\n            const auto result = ranges::find_last(v, u32);\r\n            assert(result.begin() == v.end() - 3);\r\n            assert(result.end() == v.end());\r\n        }\r\n        {\r\n            const auto result = ranges::find_last(v, u64);\r\n            assert(result.begin() == v.end());\r\n            assert(result.end() == v.end());\r\n        }\r\n#endif // _HAS_CXX23\r\n\r\n        assert(search_n(v.begin(), v.end(), 2, u32) == v.end() - 5);\r\n        assert(search_n(v.begin(), v.end(), 2, u64) == v.end());\r\n\r\n#if _HAS_CXX20\r\n        {\r\n            const auto result = ranges::search_n(v, 2, u32);\r\n            assert(begin(result) == v.end() - 5);\r\n            assert(end(result) == v.end() - 3);\r\n        }\r\n        {\r\n            const auto result = ranges::search_n(v, 2, u64);\r\n            assert(begin(result) == v.end());\r\n            assert(end(result) == v.end());\r\n        }\r\n#endif // _HAS_CXX20\r\n\r\n        {\r\n            const vector<uint32_t> rem{200, 201, 202, 203, 204, 206, 207, 208, 209, 210, 214, 215, 0, 0, 0, 0};\r\n\r\n            vector<uint32_t> dst(v.size(), 0);\r\n            assert(remove_copy(v.begin(), v.end(), dst.begin(), u32) == dst.end() - 4);\r\n            assert(dst == rem);\r\n\r\n            dst.assign(v.size(), 0);\r\n            assert(remove_copy(v.begin(), v.end(), dst.begin(), u64) == dst.end());\r\n            assert(dst == v);\r\n\r\n#if _HAS_CXX20\r\n            {\r\n                dst.assign(v.size(), 0);\r\n                const auto result = ranges::remove_copy(v, dst.begin(), u32);\r\n                assert(result.in == v.end());\r\n                assert(result.out == dst.end() - 4);\r\n                assert(dst == rem);\r\n            }\r\n            {\r\n                dst.assign(v.size(), 0);\r\n                const auto result = ranges::remove_copy(v, dst.begin(), u64);\r\n                assert(result.in == v.end());\r\n                assert(result.out == dst.end());\r\n                assert(dst == v);\r\n            }\r\n#endif // _HAS_CXX20\r\n        }\r\n\r\n        {\r\n            const vector<uint32_t> rep{200, 201, 202, 203, 204, 333, 206, 207, 208, 209, 210, 333, 333, 333, 214, 215};\r\n            const uint32_t val{333};\r\n\r\n            vector<uint32_t> dst = v;\r\n            replace(dst.begin(), dst.end(), u32, val);\r\n            assert(dst == rep);\r\n\r\n            dst = v;\r\n            replace(dst.begin(), dst.end(), u64, uint64_t{val});\r\n            assert(dst == v);\r\n\r\n#if _HAS_CXX20\r\n            dst = v;\r\n            assert(ranges::replace(dst, u32, val) == dst.end());\r\n            assert(dst == rep);\r\n\r\n            dst = v;\r\n            assert(ranges::replace(dst, u64, val) == dst.end());\r\n            assert(dst == v);\r\n#endif // _HAS_CXX20\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0343056_pair_tuple_ctor_sfinae/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0343056_pair_tuple_ctor_sfinae/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <memory>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#if _HAS_CXX20\r\n#define CONSTEXPR20 constexpr\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n#define CONSTEXPR20 inline\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\nusing namespace std;\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wzero-as-null-pointer-constant\" // This test intentionally uses 0 as null.\r\n#endif // __clang__\r\n\r\nstruct A {};\r\nstruct B : public A {};\r\n\r\nstruct X {};\r\nstruct Y : public X {};\r\n\r\nvoid cat(pair<A*, A*>) {}\r\nvoid cat(pair<A*, X*>) {}\r\nvoid cat(pair<X*, A*>) {}\r\nvoid cat(pair<X*, X*>) {}\r\n\r\nvoid dog(tuple<A*, A*>) {}\r\nvoid dog(tuple<A*, X*>) {}\r\nvoid dog(tuple<X*, A*>) {}\r\nvoid dog(tuple<X*, X*>) {}\r\n\r\n\r\nstruct Quark {};\r\n\r\nstruct Proton {\r\n    Proton(Quark&) {}\r\n};\r\n\r\nstruct Neutron {\r\n    Neutron(const Quark&) {}\r\n};\r\n\r\nvoid takes_pair(pair<Proton, Proton>) {}\r\nvoid takes_pair(pair<Proton, Neutron>) {}\r\nvoid takes_pair(pair<Neutron, Proton>) {}\r\nvoid takes_pair(pair<Neutron, Neutron>) {}\r\n\r\nvoid takes_tuple(tuple<Proton, Proton>) {}\r\nvoid takes_tuple(tuple<Proton, Neutron>) {}\r\nvoid takes_tuple(tuple<Neutron, Proton>) {}\r\nvoid takes_tuple(tuple<Neutron, Neutron>) {}\r\n\r\nvoid test_alloc();\r\n\r\ntemplate <class T>\r\nclass payloaded_allocator {\r\nprivate:\r\n    int payload = 0;\r\n\r\npublic:\r\n    payloaded_allocator() = default;\r\n\r\n    constexpr explicit payloaded_allocator(int n) noexcept : payload{n} {}\r\n\r\n    template <class U>\r\n    constexpr explicit payloaded_allocator(payloaded_allocator<U> a) noexcept : payload{a.get_payload()} {}\r\n\r\n    template <class U>\r\n    friend constexpr bool operator==(payloaded_allocator x, payloaded_allocator<U> y) noexcept {\r\n        return x.payload == y.payload;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    template <class U>\r\n    friend constexpr bool operator!=(payloaded_allocator x, payloaded_allocator<U> y) noexcept {\r\n        return !(x == y);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    using value_type = T;\r\n\r\n    CONSTEXPR20 T* allocate(size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    CONSTEXPR20 void deallocate(T* p, size_t n) {\r\n        return allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    constexpr int get_payload() const noexcept {\r\n        return payload;\r\n    }\r\n};\r\n\r\ntemplate <class T, class A>\r\nclass vector_holder {\r\npublic:\r\n    vector_holder() = default;\r\n    template <class... Args>\r\n    CONSTEXPR20 explicit vector_holder(Args&&... args, const A& alloc) : vec_(args..., alloc) {}\r\n\r\n    CONSTEXPR20 A get_allocator() const noexcept {\r\n        return vec_.get_allocator();\r\n    }\r\n\r\nprivate:\r\n    vector<T, A> vec_;\r\n};\r\n\r\ntemplate <class T, class A>\r\nstruct std::uses_allocator<vector_holder<T, A>, A> : true_type {};\r\n\r\nclass payload_taker {\r\npublic:\r\n    payload_taker() = default;\r\n\r\n    template <class T>\r\n    constexpr explicit payload_taker(const payloaded_allocator<T>& alloc) noexcept : payload{alloc.get_payload()} {}\r\n\r\n    constexpr int get_payload() const noexcept {\r\n        return payload;\r\n    }\r\n    int get_payload() const volatile noexcept {\r\n        return payload;\r\n    }\r\n\r\nprivate:\r\n    int payload = 0;\r\n};\r\n\r\ntemplate <class T>\r\nstruct std::uses_allocator<payload_taker, payloaded_allocator<T>> : true_type {};\r\n\r\n// LWG-3677 \"Is a cv-qualified pair specially handled in uses-allocator construction?\"\r\nCONSTEXPR20 bool test_lwg3677() {\r\n    using my_allocator = payloaded_allocator<int>;\r\n\r\n    tuple<payload_taker> t1{allocator_arg, my_allocator{42}};\r\n    assert(get<0>(t1).get_payload() == 42);\r\n    tuple<const payload_taker> t2{allocator_arg, my_allocator{84}};\r\n    assert(get<0>(t2).get_payload() == 84);\r\n\r\n    tuple<vector_holder<int, my_allocator>> t3{allocator_arg, my_allocator{126}};\r\n    assert(get<0>(t3).get_allocator().get_payload() == 126);\r\n    tuple<const vector_holder<int, my_allocator>> t4{allocator_arg, my_allocator{168}};\r\n    assert(get<0>(t4).get_allocator().get_payload() == 168);\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_lwg3677_volatile() {\r\n    using my_allocator = payloaded_allocator<int>;\r\n\r\n    tuple<volatile payload_taker> t5{allocator_arg, my_allocator{210}};\r\n    assert(get<0>(t5).get_payload() == 210);\r\n    tuple<const volatile payload_taker> t6{allocator_arg, my_allocator{252}};\r\n    assert(get<0>(t6).get_payload() == 252);\r\n}\r\n\r\n// LWG-3187 \"P0591R4 reverted DR 2586 fixes to scoped_allocator_adaptor::construct()\"\r\n// LWG-4312 \"Const and value category mismatch for allocator_arg_t/allocator_arg in the description of uses-allocator\r\n// construction\"\r\n\r\nstruct allocator_arg_and_ator_cvref_requirer {\r\n    allocator_arg_and_ator_cvref_requirer() = default;\r\n\r\n    template <class A>\r\n    constexpr allocator_arg_and_ator_cvref_requirer(allocator_arg_t&&, const A&) {}\r\n    template <class A>\r\n    constexpr allocator_arg_and_ator_cvref_requirer(\r\n        allocator_arg_t&&, const A&, const allocator_arg_and_ator_cvref_requirer&) {}\r\n    template <class A>\r\n    constexpr allocator_arg_and_ator_cvref_requirer(\r\n        allocator_arg_t&&, const A&, allocator_arg_and_ator_cvref_requirer&&) {}\r\n\r\n    template <class T>\r\n    allocator_arg_and_ator_cvref_requirer(allocator_arg_t&&, T&&) = delete;\r\n    template <class T>\r\n    allocator_arg_and_ator_cvref_requirer(\r\n        allocator_arg_t&&, T&&, const allocator_arg_and_ator_cvref_requirer&) = delete;\r\n    template <class T>\r\n    allocator_arg_and_ator_cvref_requirer(allocator_arg_t&&, T&&, allocator_arg_and_ator_cvref_requirer&&) = delete;\r\n\r\n    template <class A>\r\n    allocator_arg_and_ator_cvref_requirer(allocator_arg_t&, const A&) = delete;\r\n    template <class A>\r\n    allocator_arg_and_ator_cvref_requirer(\r\n        allocator_arg_t&, const A&, const allocator_arg_and_ator_cvref_requirer&) = delete;\r\n    template <class A>\r\n    allocator_arg_and_ator_cvref_requirer(allocator_arg_t&, const A&, allocator_arg_and_ator_cvref_requirer&&) = delete;\r\n\r\n    template <class A>\r\n    allocator_arg_and_ator_cvref_requirer(const allocator_arg_t&, const A&) = delete;\r\n    template <class A>\r\n    allocator_arg_and_ator_cvref_requirer(\r\n        const allocator_arg_t&, const A&, const allocator_arg_and_ator_cvref_requirer&) = delete;\r\n    template <class A>\r\n    allocator_arg_and_ator_cvref_requirer(\r\n        const allocator_arg_t&, const A&, allocator_arg_and_ator_cvref_requirer&&) = delete;\r\n};\r\n\r\ntemplate <class A>\r\nstruct std::uses_allocator<allocator_arg_and_ator_cvref_requirer, A> : true_type {};\r\n\r\nCONSTEXPR20 bool test_lwg4312() { // also test LWG-3187\r\n    using tuple_type = tuple<allocator_arg_and_ator_cvref_requirer>;\r\n\r\n    tuple_type t1{allocator_arg, allocator<int>{}};\r\n    tuple_type t2{allocator_arg, allocator<int>{}, get<0>(t1)};\r\n    tuple_type t3{allocator_arg, allocator<int>{}, allocator_arg_and_ator_cvref_requirer{}};\r\n\r\n    (void) t1;\r\n    (void) t2;\r\n    (void) t3;\r\n\r\n    tuple_type t4{allocator_arg, payloaded_allocator<int>{42}};\r\n    tuple_type t5{allocator_arg, payloaded_allocator<int>{84}, get<0>(t4)};\r\n    tuple_type t6{allocator_arg, payloaded_allocator<int>{168}, allocator_arg_and_ator_cvref_requirer{}};\r\n\r\n    (void) t4;\r\n    (void) t5;\r\n    (void) t6;\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    B* b = nullptr;\r\n    Y* y = nullptr;\r\n\r\n    pair<B*, B*> pbb(b, b);\r\n    pair<B*, Y*> pby(b, y);\r\n    pair<Y*, B*> pyb(y, b);\r\n    pair<Y*, Y*> pyy(y, y);\r\n\r\n    tuple<B*, B*> tbb(b, b);\r\n    tuple<B*, Y*> tby(b, y);\r\n    tuple<Y*, B*> tyb(y, b);\r\n    tuple<Y*, Y*> tyy(y, y);\r\n\r\n    // template <class U, class V> pair(U&& x, V&& y);\r\n    pair<A*, X*> p1(b, y);\r\n    pair<A*, X*> p2(b, 0);\r\n    pair<A*, X*> p3(0, y);\r\n    pair<A*, X*> p4(0, 0);\r\n    (void) p4;\r\n\r\n    // template <class... UTypes> explicit tuple(UTypes&&... u);\r\n    tuple<A*, X*> t1(b, y);\r\n    tuple<A*, X*> t2(b, 0);\r\n    tuple<A*, X*> t3(0, y);\r\n    tuple<A*, X*> t4(0, 0);\r\n    (void) t4;\r\n\r\n    // template <class U, class V> pair(const pair<U, V>& p);\r\n    cat(pbb);\r\n    cat(pby);\r\n    cat(pyb);\r\n    cat(pyy);\r\n\r\n    // template <class U, class V> pair(pair<U, V>&& p);\r\n    cat(move(pbb));\r\n    cat(move(pby));\r\n    cat(move(pyb));\r\n    cat(move(pyy));\r\n\r\n    // template <class U1, class U2> tuple(const pair<U1, U2>& u);\r\n    dog(pbb);\r\n    dog(pby);\r\n    dog(pyb);\r\n    dog(pyy);\r\n\r\n    // template <class U1, class U2> tuple(pair<U1, U2>&& u);\r\n    dog(move(pbb));\r\n    dog(move(pby));\r\n    dog(move(pyb));\r\n    dog(move(pyy));\r\n\r\n    // template <class... UTypes> tuple(const tuple<UTypes...>& u);\r\n    dog(tbb);\r\n    dog(tby);\r\n    dog(tyb);\r\n    dog(tyy);\r\n\r\n    // template <class... UTypes> tuple(tuple<UTypes...>&& u);\r\n    dog(move(tbb));\r\n    dog(move(tby));\r\n    dog(move(tyb));\r\n    dog(move(tyy));\r\n\r\n\r\n    const pair<Quark, Quark> meow;\r\n    const tuple<Quark, Quark> purr;\r\n\r\n    // template <class U, class V> pair(const pair<U, V>& p);\r\n    takes_pair(meow);\r\n\r\n    // template <class U1, class U2> tuple(const pair<U1, U2>& u);\r\n    takes_tuple(meow);\r\n\r\n    // template <class... UTypes> tuple(const tuple<UTypes...>& u);\r\n    takes_tuple(purr);\r\n\r\n\r\n    test_alloc();\r\n\r\n    test_lwg3677();\r\n#if _HAS_CXX20\r\n    static_assert(test_lwg3677());\r\n#endif // _HAS_CXX20\r\n    test_lwg3677_volatile();\r\n\r\n    test_lwg4312();\r\n#if _HAS_CXX20\r\n    static_assert(test_lwg4312());\r\n#endif // _HAS_CXX20\r\n}\r\n\r\nstruct Meow {\r\n    Meow(const tuple<int>&) {}\r\n    Meow(const pair<int, int>&) {}\r\n};\r\n\r\nvoid test_alloc() {\r\n    {\r\n        allocator<int> al;\r\n\r\n        // template <class Alloc> tuple(allocator_arg_t, const Alloc& a);\r\n        tuple<A*> t1(allocator_arg, al);\r\n        (void) t1;\r\n\r\n        // template <class Alloc> tuple(allocator_arg_t, const Alloc& a, const Types&...);\r\n        tuple<A*> t2(allocator_arg, al, 0);\r\n\r\n        // template <class Alloc, class... UTypes> tuple(allocator_arg_t, const Alloc& a, const UTypes&&...);\r\n        tuple<A*> t3(allocator_arg, al, nullptr);\r\n        (void) t3;\r\n\r\n        // template <class Alloc> tuple(allocator_arg_t, const Alloc& a, const tuple&);\r\n        tuple<A*> t4(allocator_arg, al, t2);\r\n\r\n        // template <class Alloc> tuple(allocator_arg_t, const Alloc& a, tuple&&);\r\n        tuple<A*> t5(allocator_arg, al, move(t2));\r\n\r\n        tuple<B*> b(nullptr);\r\n\r\n        // template <class Alloc, class... UTypes> tuple(allocator_arg_t, const Alloc& a, const tuple<UTypes...>&);\r\n        tuple<A*> t6(allocator_arg, al, b);\r\n\r\n        // template <class Alloc, class... UTypes> tuple(allocator_arg_t, const Alloc& a, tuple<UTypes...>&&);\r\n        tuple<A*> t7(allocator_arg, al, move(b));\r\n\r\n        pair<B*, Y*> by(nullptr, nullptr);\r\n\r\n        // template <class Alloc, class U1, class U2> tuple(allocator_arg_t, const Alloc& a, const pair<U1, U2>&);\r\n        tuple<A*, X*> t8(allocator_arg, al, by);\r\n\r\n        // template <class Alloc, class U1, class U2> tuple(allocator_arg_t, const Alloc& a, pair<U1, U2>&&);\r\n        tuple<A*, X*> t9(allocator_arg, al, move(by));\r\n\r\n        // const UTypes&&...\r\n        tuple<int> ti(0);\r\n        tuple<Meow> t10(allocator_arg, al, ti);\r\n        tuple<Meow> t11(allocator_arg, al, move(ti));\r\n\r\n        pair<int, int> pii(0, 0);\r\n        tuple<Meow> t12(allocator_arg, al, pii);\r\n        tuple<Meow> t13(allocator_arg, al, move(pii));\r\n    }\r\n\r\n    {\r\n        tuple<A*> t1;\r\n        (void) t1;\r\n\r\n        tuple<A*> t2(0);\r\n\r\n        tuple<A*> t3(nullptr);\r\n        (void) t3;\r\n\r\n        tuple<A*> t4(t2);\r\n        (void) t4;\r\n\r\n        tuple<A*> t5(move(t2));\r\n        (void) t5;\r\n\r\n        tuple<B*> b(nullptr);\r\n\r\n        tuple<A*> t6(b);\r\n\r\n        tuple<A*> t7(move(b));\r\n\r\n        pair<B*, Y*> by(nullptr, nullptr);\r\n\r\n        tuple<A*, X*> t8(by);\r\n\r\n        tuple<A*, X*> t9(move(by));\r\n\r\n        tuple<int> ti(0);\r\n        tuple<Meow> t10(ti);\r\n        tuple<Meow> t11(move(ti));\r\n\r\n        pair<int, int> pii(0, 0);\r\n        tuple<Meow> t12(pii);\r\n        tuple<Meow> t13(move(pii));\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0376122_grand_theft_bind/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0376122_grand_theft_bind/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// N3485 20.8.9.1.3 [func.bind.bind]/10:\r\n// The values of the bound arguments v1, v2, ..., vN and their corresponding types\r\n// V1, V2, ..., VN depend on the types TiD derived from the call to bind and the\r\n// cv-qualifiers cv of the call wrapper g as follows:\r\n// [...]\r\n// - otherwise, the value is tid and its type Vi is TiD cv &.\r\n\r\n#include <cassert>\r\n#include <functional>\r\n#include <memory>\r\n\r\nusing namespace std;\r\n\r\nvoid test1(const shared_ptr<int>& sp) {\r\n    assert(sp && *sp == 1729);\r\n}\r\n\r\nvoid test2(shared_ptr<int> sp) {\r\n    assert(sp && *sp == 19937);\r\n}\r\n\r\nint main() {\r\n    auto sp1 = make_shared<int>(1729);\r\n    test1(sp1);\r\n    test1(sp1);\r\n    auto b1 = bind(&test1, sp1);\r\n    sp1.reset();\r\n    b1();\r\n    b1();\r\n\r\n    auto sp2 = make_shared<int>(19937);\r\n    test2(sp2);\r\n    test2(sp2);\r\n    auto b2 = bind(&test2, sp2);\r\n    sp2.reset();\r\n    b2();\r\n    b2();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0377755_thread_ctor_move_only_types/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0377755_thread_ctor_move_only_types/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n#include <future>\r\n#include <memory>\r\n#include <thread>\r\n#include <utility>\r\n#include <vector>\r\n\r\nclass A {\r\n    std::thread::id parent_id;\r\n    unsigned int copy_cnt = 0u;\r\n    unsigned int move_cnt = 0u;\r\n\r\npublic:\r\n    explicit A(int ii) : parent_id(std::this_thread::get_id()), i(ii) {}\r\n    A(const A& a) : parent_id(a.parent_id), copy_cnt(a.copy_cnt + 1u), move_cnt(a.move_cnt), i(a.i) {\r\n        assert(std::this_thread::get_id() == a.parent_id);\r\n    }\r\n    A(A&& a) : parent_id(a.parent_id), copy_cnt(a.copy_cnt), move_cnt(a.move_cnt + 1u), i(a.i) {\r\n        assert(std::this_thread::get_id() == a.parent_id);\r\n    }\r\n\r\n    bool is_copy_move_correct() const {\r\n        return copy_cnt + move_cnt <= 1u;\r\n    }\r\n\r\n    int i;\r\n};\r\n\r\nint main() { // DevDiv-377755 \"<thread>: thread's ctor doesn't compile with movable-only arguments\"\r\n    std::vector<std::thread> t;\r\n    std::unique_ptr<int> p = std::make_unique<int>(-1);\r\n    // Check if std::thread ctor accepts move-only arguments.\r\n    t.emplace_back([](std::unique_ptr<int> p) { assert(*p == -1); }, std::move(p));\r\n\r\n    // Check if std::async works with function that returns move-only type\r\n    auto f = std::async([]() { return std::make_unique<int>(42); });\r\n    p      = f.get();\r\n    assert(*p == 42);\r\n\r\n    // Check if std::promise works with move-only types.\r\n    std::promise<std::unique_ptr<int>> prom;\r\n    t.emplace_back([&]() { prom.set_value(std::make_unique<int>(43)); });\r\n    p = prom.get_future().get();\r\n    assert(*p == 43);\r\n\r\n    // Check if reference unwrapping occurs (it should not).\r\n    int i = -1;\r\n    t.emplace_back([](std::reference_wrapper<int> ri) { assert(ri == -1); }, std::ref(i));\r\n\r\n    // Check if the copy occurs on the parent thread, as required by the Standard.\r\n    A a(-1);\r\n    t.emplace_back([](const A& an_a) { assert(an_a.i == -1); }, a);\r\n\r\n    // Check if the move occurs on the parent thread, as required by the Standard.\r\n    t.emplace_back([](const A& an_a) { assert(an_a.i == -1); }, std::move(a));\r\n\r\n    // Check if we are doing the correct number of copies.\r\n    A b(-1);\r\n    t.emplace_back([](const A& an_a) { assert(an_a.is_copy_move_correct() && an_a.i == -1); }, b);\r\n\r\n    // Check if we are doing the correct number of moves.\r\n    t.emplace_back([](const A& an_a) { assert(an_a.is_copy_move_correct() && an_a.i == -1); }, std::move(b));\r\n\r\n    for (auto&& th : t) {\r\n        th.join();\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0387701_container_equality/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0387701_container_equality/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <list>\r\n#include <map>\r\n#include <random>\r\n#include <set>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nstruct Meow {\r\n    int m_x;\r\n\r\n    Meow() : m_x(0) {}\r\n\r\n    bool operator==(const Meow& other) const {\r\n        return m_x == other.m_x;\r\n    }\r\n\r\n    bool operator<(const Meow& other) const {\r\n        return m_x < other.m_x;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct std::hash<Meow> {\r\n    typedef size_t result_type;\r\n    typedef Meow argument_type;\r\n\r\n    size_t operator()(const Meow& m) const {\r\n        return hash<int>()(m.m_x);\r\n    }\r\n};\r\n\r\ntemplate <typename C>\r\nvoid assert_equal(const C& c1, const C& c2) {\r\n    assert(c1 == c2);\r\n    assert(!(c1 != c2));\r\n}\r\n\r\ntemplate <typename C>\r\nvoid assert_different(const C& c1, const C& c2) {\r\n    assert(!(c1 == c2));\r\n    assert(c1 != c2);\r\n}\r\n\r\ntemplate <typename C>\r\nvoid test() {\r\n    assert_equal(C(), C());\r\n}\r\n\r\nint main() {\r\n    test<array<Meow, 1>>();\r\n    test<deque<Meow>>();\r\n    test<forward_list<Meow>>();\r\n    test<list<Meow>>();\r\n    test<vector<Meow>>();\r\n    test<map<Meow, Meow>>();\r\n    test<multimap<Meow, Meow>>();\r\n    test<set<Meow>>();\r\n    test<multiset<Meow>>();\r\n    test<unordered_map<Meow, Meow>>();\r\n    test<unordered_multimap<Meow, Meow>>();\r\n    test<unordered_set<Meow>>();\r\n    test<unordered_multiset<Meow>>();\r\n\r\n    mt19937 prng(1729);\r\n    uniform_int_distribution<unsigned int> dist100(0, 99);\r\n    uniform_int_distribution<unsigned int> dist500(10000, 10499);\r\n\r\n    {\r\n        set<unsigned int> s;\r\n\r\n        while (s.size() < 1000) {\r\n            s.insert(prng());\r\n        }\r\n\r\n        vector<unsigned int> v(s.begin(), s.end());\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_set<unsigned int> us1(v.begin(), v.end());\r\n\r\n        // same sizes, same elements, same orders => should be equal\r\n        assert_equal(us1, us1);\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_set<unsigned int> us2(v.begin(), v.end());\r\n\r\n        // same sizes, same elements, different orders => should be equal\r\n        assert_equal(us1, us2);\r\n    }\r\n\r\n    {\r\n        set<unsigned int> s;\r\n\r\n        while (s.size() < 1000) {\r\n            const unsigned int n = prng();\r\n\r\n            if (n != 0) {\r\n                s.insert(n);\r\n            }\r\n        }\r\n\r\n        vector<unsigned int> v(s.begin(), s.end());\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_set<unsigned int> us1(v.begin(), v.end());\r\n\r\n        v[0] = 0;\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_set<unsigned int> us2(v.begin(), v.end());\r\n\r\n        // same sizes, different elements => should be non-equal\r\n        assert_different(us1, us2);\r\n    }\r\n\r\n    {\r\n        set<unsigned int> s;\r\n\r\n        while (s.size() < 1000) {\r\n            s.insert(prng());\r\n        }\r\n\r\n        vector<unsigned int> v(s.begin(), s.end());\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_set<unsigned int> us1(v.begin(), v.end());\r\n\r\n        while (s.size() < 1001) {\r\n            s.insert(prng());\r\n        }\r\n\r\n        v.assign(s.begin(), s.end());\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_set<unsigned int> us2(v.begin(), v.end());\r\n\r\n        // different sizes => should be non-equal\r\n        assert_different(us1, us2);\r\n    }\r\n\r\n\r\n    {\r\n        vector<unsigned int> v;\r\n\r\n        for (int i = 0; i < 1000; ++i) {\r\n            v.push_back(dist100(prng));\r\n            v.push_back(dist500(prng));\r\n            v.push_back(prng());\r\n        }\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_multiset<unsigned int> ums1(v.begin(), v.end());\r\n\r\n        // same sizes, same elements, same orders => should be equal\r\n        assert_equal(ums1, ums1);\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_multiset<unsigned int> ums2(v.begin(), v.end());\r\n\r\n        // same sizes, same elements, different orders => should be equal\r\n        assert_equal(ums1, ums2);\r\n    }\r\n\r\n    {\r\n        vector<unsigned int> v;\r\n\r\n        for (int i = 0; i < 1000; ++i) {\r\n            v.push_back(dist100(prng));\r\n            v.push_back(dist500(prng));\r\n            v.push_back(prng());\r\n        }\r\n\r\n        vector<unsigned int> v1 = v;\r\n        v1.push_back(11);\r\n        v1.push_back(11);\r\n        v1.push_back(11);\r\n        v1.push_back(22);\r\n        v1.push_back(22);\r\n\r\n        vector<unsigned int> v2 = v;\r\n        v2.push_back(11);\r\n        v2.push_back(11);\r\n        v2.push_back(22);\r\n        v2.push_back(22);\r\n        v2.push_back(22);\r\n\r\n        shuffle(v1.begin(), v1.end(), prng);\r\n        unordered_multiset<unsigned int> ums1(v1.begin(), v1.end());\r\n\r\n        shuffle(v2.begin(), v2.end(), prng);\r\n        unordered_multiset<unsigned int> ums2(v2.begin(), v2.end());\r\n\r\n        // same sizes, different element counts => should be non-equal\r\n        assert_different(ums1, ums2);\r\n    }\r\n\r\n    {\r\n        vector<unsigned int> v;\r\n\r\n        for (int i = 0; i < 1000; ++i) {\r\n            v.push_back(dist100(prng));\r\n            v.push_back(dist500(prng));\r\n            v.push_back(prng());\r\n        }\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_multiset<unsigned int> ums1(v.begin(), v.end());\r\n\r\n        ++v[0];\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_multiset<unsigned int> ums2(v.begin(), v.end());\r\n\r\n        // same sizes, different elements => should be non-equal\r\n        assert_different(ums1, ums2);\r\n    }\r\n\r\n    {\r\n        vector<unsigned int> v;\r\n\r\n        for (int i = 0; i < 1000; ++i) {\r\n            v.push_back(dist100(prng));\r\n            v.push_back(dist500(prng));\r\n            v.push_back(prng());\r\n        }\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_multiset<unsigned int> ums1(v.begin(), v.end());\r\n\r\n        v.push_back(prng());\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_multiset<unsigned int> ums2(v.begin(), v.end());\r\n\r\n        // different sizes => should be non-equal\r\n        assert_different(ums1, ums2);\r\n    }\r\n\r\n\r\n    {\r\n        map<unsigned int, unsigned int> m;\r\n\r\n        while (m.size() < 1000) {\r\n            m[prng()] = prng();\r\n        }\r\n\r\n        vector<pair<unsigned int, unsigned int>> v(m.begin(), m.end());\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_map<unsigned int, unsigned int> um1(v.begin(), v.end());\r\n\r\n        // same sizes, same elements, same orders => should be equal\r\n        assert_equal(um1, um1);\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_map<unsigned int, unsigned int> um2(v.begin(), v.end());\r\n\r\n        // same sizes, same elements, different orders => should be equal\r\n        assert_equal(um1, um2);\r\n    }\r\n\r\n    {\r\n        map<unsigned int, unsigned int> m;\r\n\r\n        while (m.size() < 1000) {\r\n            const unsigned int key = prng();\r\n            const unsigned int val = prng();\r\n\r\n            if (key != 0 && val != 0) {\r\n                m[key] = val;\r\n            }\r\n        }\r\n\r\n        vector<pair<unsigned int, unsigned int>> v(m.begin(), m.end());\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_map<unsigned int, unsigned int> um1(v.begin(), v.end());\r\n\r\n        v[0].second = 0;\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_map<unsigned int, unsigned int> um2(v.begin(), v.end());\r\n\r\n        // same sizes, same keys, different values => should be non-equal\r\n        assert_different(um1, um2);\r\n\r\n        v[0].first = 0;\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_map<unsigned int, unsigned int> um3(v.begin(), v.end());\r\n\r\n        // same sizes, different keys, same values => should be non-equal\r\n        assert_different(um2, um3);\r\n    }\r\n\r\n    {\r\n        map<unsigned int, unsigned int> m;\r\n\r\n        while (m.size() < 1001) {\r\n            m[prng()] = prng();\r\n        }\r\n\r\n        vector<pair<unsigned int, unsigned int>> v(m.begin(), m.end());\r\n        v.pop_back();\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_map<unsigned int, unsigned int> um1(v.begin(), v.end());\r\n\r\n        v.assign(m.begin(), m.end());\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_map<unsigned int, unsigned int> um2(v.begin(), v.end());\r\n\r\n        // different sizes => should be non-equal\r\n        assert_different(um1, um2);\r\n    }\r\n\r\n\r\n    {\r\n        vector<pair<unsigned int, unsigned int>> v;\r\n\r\n        for (int i = 0; i < 1000; ++i) {\r\n            v.push_back(make_pair(dist100(prng), dist100(prng)));\r\n            v.push_back(make_pair(dist500(prng), dist500(prng)));\r\n            v.push_back(make_pair(prng(), prng()));\r\n        }\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_multimap<unsigned int, unsigned int> umm1(v.begin(), v.end());\r\n\r\n        // same sizes, same elements, same orders => should be equal\r\n        assert_equal(umm1, umm1);\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_multimap<unsigned int, unsigned int> umm2(v.begin(), v.end());\r\n\r\n        // same sizes, same elements, different orders => should be equal\r\n        assert_equal(umm1, umm2);\r\n    }\r\n\r\n    {\r\n        vector<pair<unsigned int, unsigned int>> v;\r\n\r\n        for (int i = 0; i < 1000; ++i) {\r\n            v.push_back(make_pair(dist100(prng), dist100(prng)));\r\n            v.push_back(make_pair(dist500(prng), dist500(prng)));\r\n            v.push_back(make_pair(prng(), prng()));\r\n        }\r\n\r\n        vector<pair<unsigned int, unsigned int>> v1 = v;\r\n        v1.push_back(make_pair(11u, 33u));\r\n        v1.push_back(make_pair(11u, 33u));\r\n        v1.push_back(make_pair(11u, 33u));\r\n        v1.push_back(make_pair(22u, 44u));\r\n        v1.push_back(make_pair(22u, 44u));\r\n\r\n        vector<pair<unsigned int, unsigned int>> v2 = v;\r\n        v2.push_back(make_pair(11u, 33u));\r\n        v2.push_back(make_pair(11u, 33u));\r\n        v2.push_back(make_pair(22u, 44u));\r\n        v2.push_back(make_pair(22u, 44u));\r\n        v2.push_back(make_pair(22u, 44u));\r\n\r\n        shuffle(v1.begin(), v1.end(), prng);\r\n        unordered_multimap<unsigned int, unsigned int> umm1(v1.begin(), v1.end());\r\n\r\n        shuffle(v2.begin(), v2.end(), prng);\r\n        unordered_multimap<unsigned int, unsigned int> umm2(v2.begin(), v2.end());\r\n\r\n        // same sizes, different element counts => should be non-equal\r\n        assert_different(umm1, umm2);\r\n    }\r\n\r\n    {\r\n        vector<pair<unsigned int, unsigned int>> v;\r\n\r\n        for (int i = 0; i < 1000; ++i) {\r\n            v.push_back(make_pair(dist100(prng), dist100(prng)));\r\n            v.push_back(make_pair(dist500(prng), dist500(prng)));\r\n            v.push_back(make_pair(prng(), prng()));\r\n        }\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_multimap<unsigned int, unsigned int> umm1(v.begin(), v.end());\r\n\r\n        ++v[0].second;\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_multimap<unsigned int, unsigned int> umm2(v.begin(), v.end());\r\n\r\n        // same sizes, same keys, different values => should be non-equal\r\n        assert_different(umm1, umm2);\r\n\r\n        ++v[0].first;\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_multimap<unsigned int, unsigned int> umm3(v.begin(), v.end());\r\n\r\n        // same sizes, different keys, same values => should be non-equal\r\n        assert_different(umm2, umm3);\r\n    }\r\n\r\n    {\r\n        vector<pair<unsigned int, unsigned int>> v;\r\n\r\n        for (int i = 0; i < 1000; ++i) {\r\n            v.push_back(make_pair(dist100(prng), dist100(prng)));\r\n            v.push_back(make_pair(dist500(prng), dist500(prng)));\r\n            v.push_back(make_pair(prng(), prng()));\r\n        }\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_multimap<unsigned int, unsigned int> umm1(v.begin(), v.end());\r\n\r\n        v.push_back(make_pair(dist100(prng), dist100(prng)));\r\n\r\n        shuffle(v.begin(), v.end(), prng);\r\n        unordered_multimap<unsigned int, unsigned int> umm2(v.begin(), v.end());\r\n\r\n        // different sizes => should be non-equal\r\n        assert_different(umm1, umm2);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0417110_nullptr_t_is_scalar/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0417110_nullptr_t_is_scalar/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <type_traits>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n// Regression test for:\r\n// DevDiv-417110:  is_scalar<nullptr_t> should be true\r\n\r\nint main() {\r\n\r\n    // N3376 20.9.4.1[meta.unary.cat]:  primary type categories:\r\n    STATIC_ASSERT(!std::is_void_v<std::nullptr_t>);\r\n    STATIC_ASSERT(!std::is_integral_v<std::nullptr_t>);\r\n    STATIC_ASSERT(!std::is_floating_point_v<std::nullptr_t>);\r\n    STATIC_ASSERT(!std::is_array_v<std::nullptr_t>);\r\n    STATIC_ASSERT(!std::is_pointer_v<std::nullptr_t>);\r\n    STATIC_ASSERT(!std::is_lvalue_reference_v<std::nullptr_t>);\r\n    STATIC_ASSERT(!std::is_rvalue_reference_v<std::nullptr_t>);\r\n    STATIC_ASSERT(!std::is_member_object_pointer_v<std::nullptr_t>);\r\n    STATIC_ASSERT(!std::is_member_function_pointer_v<std::nullptr_t>);\r\n    STATIC_ASSERT(!std::is_enum_v<std::nullptr_t>);\r\n    STATIC_ASSERT(!std::is_union_v<std::nullptr_t>);\r\n    STATIC_ASSERT(!std::is_class_v<std::nullptr_t>);\r\n    STATIC_ASSERT(!std::is_function_v<std::nullptr_t>);\r\n\r\n    STATIC_ASSERT(std::is_null_pointer_v<std::nullptr_t>);\r\n    STATIC_ASSERT(std::is_null_pointer_v<std::nullptr_t const>);\r\n    STATIC_ASSERT(std::is_null_pointer_v<std::nullptr_t volatile>);\r\n    STATIC_ASSERT(std::is_null_pointer_v<std::nullptr_t const volatile>);\r\n\r\n    struct C {};\r\n    enum class E { enumerator };\r\n    union U {\r\n        int i;\r\n        float f;\r\n    };\r\n\r\n    STATIC_ASSERT(!std::is_null_pointer_v<void>);\r\n    STATIC_ASSERT(!std::is_null_pointer_v<int>);\r\n    STATIC_ASSERT(!std::is_null_pointer_v<float>);\r\n    STATIC_ASSERT(!std::is_null_pointer_v<C[1]>);\r\n    STATIC_ASSERT(!std::is_null_pointer_v<C*>);\r\n    STATIC_ASSERT(!std::is_null_pointer_v<C&>);\r\n    STATIC_ASSERT(!std::is_null_pointer_v<C&&>);\r\n    STATIC_ASSERT(!std::is_null_pointer_v<int C::*>);\r\n    STATIC_ASSERT(!std::is_null_pointer_v<void (C::*)()>);\r\n    STATIC_ASSERT(!std::is_null_pointer_v<E>);\r\n    STATIC_ASSERT(!std::is_null_pointer_v<U>);\r\n    STATIC_ASSERT(!std::is_null_pointer_v<C>);\r\n    STATIC_ASSERT(!std::is_null_pointer_v<void()>);\r\n\r\n    // N3376 20.9.4.2[meta.unary.comp]:  composite type categories:\r\n    STATIC_ASSERT(!std::is_reference_v<std::nullptr_t>);\r\n    STATIC_ASSERT(!std::is_arithmetic_v<std::nullptr_t>);\r\n    STATIC_ASSERT(std::is_fundamental_v<std::nullptr_t>);\r\n    STATIC_ASSERT(std::is_object_v<std::nullptr_t>);\r\n    STATIC_ASSERT(std::is_scalar_v<std::nullptr_t>);\r\n    STATIC_ASSERT(!std::is_compound_v<std::nullptr_t>);\r\n    STATIC_ASSERT(!std::is_member_pointer_v<std::nullptr_t>);\r\n\r\n#if _HAS_CXX20\r\n    // [meta.unary.prop]: Type properties\r\n    STATIC_ASSERT(!std::is_bounded_array_v<std::nullptr_t>);\r\n    STATIC_ASSERT(!std::is_unbounded_array_v<std::nullptr_t>);\r\n#endif // _HAS_CXX20\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0435439_call_once_deadlock/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0435439_call_once_deadlock/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <atomic>\r\n#include <thread>\r\n\r\nusing namespace std;\r\n\r\natomic<bool> Atom(true);\r\n\r\nvoid Spin() {\r\n    while (Atom) {\r\n    }\r\n}\r\n\r\nstruct Global {\r\n    thread m_t;\r\n    Global() : m_t(Spin) {}\r\n    ~Global() {\r\n        Atom = false;\r\n        m_t.join();\r\n    }\r\n};\r\n\r\nGlobal g;\r\n\r\nint main() {\r\n    // runtime tests are in constructors and destructors of variables with static storage duration\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0437519_container_behavior/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0437519_container_behavior/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nvoid assert_forward_list_resize_empty() {\r\n    forward_list<int> e;\r\n    e.resize(0);\r\n    assert(e.empty());\r\n}\r\n\r\n// This verifies that we can use list<T>::remove to remove elements from a list, even if the\r\n// argument is a reference to an element in the list that will be removed.\r\n\r\nstruct A {\r\n    A(unsigned int value) : _value(value) {}\r\n    A(const A&)            = default;\r\n    A& operator=(const A&) = default;\r\n    ~A() {\r\n        _value = 0;\r\n    }\r\n\r\n    friend bool operator==(A const& lhs, A const& rhs) {\r\n        assert(lhs._value != 0 && rhs._value != 0);\r\n        return lhs._value == rhs._value;\r\n    }\r\n\r\nprivate:\r\n    unsigned int _value;\r\n};\r\n\r\nvoid assert_list_remove_element_in_sequence() {\r\n    list<A> x;\r\n    x.push_back(1);\r\n    x.push_back(2);\r\n    x.push_back(1);\r\n    x.push_back(3);\r\n    x.push_back(1);\r\n\r\n    x.remove(*next(x.begin(), 2));\r\n\r\n    assert(x.size() == 2);\r\n    assert(*x.begin() == A(2));\r\n    assert(*next(x.begin()) == A(3));\r\n\r\n// P0646R1 list/forward_list remove()/remove_if()/unique() Return size_type\r\n#if _HAS_CXX20\r\n    list<A> y{1, 2, 2};\r\n\r\n    assert(y.remove(*y.begin()) == 1);\r\n    assert(y.remove(*y.begin()) == 2);\r\n\r\n    y = {1, 2, 2};\r\n\r\n    assert(y.remove(42) == 0);\r\n    assert(y.remove(1) == 1);\r\n    assert(y.remove(2) == 2);\r\n\r\n    y = {2, 3, 3};\r\n\r\n    auto pr1 = [](A) { return false; };\r\n    auto pr2 = [](A value) { return value == 2; };\r\n    auto pr3 = [](A value) { return value == 3; };\r\n\r\n    assert(y.remove_if(pr1) == 0);\r\n    assert(y.remove_if(pr2) == 1);\r\n    assert(y.remove_if(pr3) == 2);\r\n\r\n    y = {4, 4, 5, 5, 5};\r\n\r\n    auto pr4 = [](A, A) { return false; };\r\n    auto pr5 = [](A value1, A value2) { return value1 == 4 && value2 == 4; };\r\n    auto pr6 = [](A value1, A value2) { return value1 == 5 && value2 == 5; };\r\n\r\n    assert(y.unique(pr4) == 0);\r\n    assert(y.unique(pr5) == 1);\r\n    assert(y.unique(pr6) == 2);\r\n\r\n    y = {1, 2, 3};\r\n\r\n    assert(y.unique() == 0);\r\n\r\n    y.push_back(3);\r\n\r\n    assert(y.unique() == 1);\r\n\r\n    y.push_back(3);\r\n    y.push_back(3);\r\n\r\n    assert(y.unique() == 2);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\nvoid assert_forward_list_remove_element_in_sequence() {\r\n    forward_list<A> x;\r\n    x.push_front(1);\r\n    x.push_front(2);\r\n    x.push_front(1);\r\n    x.push_front(3);\r\n    x.push_front(1);\r\n\r\n    x.remove(*next(x.begin(), 2));\r\n\r\n    assert(distance(x.begin(), x.end()) == 2);\r\n    assert(*x.begin() == A(3));\r\n    assert(*next(x.begin()) == A(2));\r\n\r\n// P0646R1 list/forward_list remove()/remove_if()/unique() Return size_type\r\n#if _HAS_CXX20\r\n    forward_list<A> y{1, 2, 2};\r\n\r\n    assert(y.remove(*y.begin()) == 1);\r\n    assert(y.remove(*y.begin()) == 2);\r\n\r\n    y = {1, 2, 2};\r\n\r\n    assert(y.remove(42) == 0);\r\n    assert(y.remove(1) == 1);\r\n    assert(y.remove(2) == 2);\r\n\r\n    y = {2, 3, 3};\r\n\r\n    auto pr1 = [](A) { return false; };\r\n    auto pr2 = [](A value) { return value == 2; };\r\n    auto pr3 = [](A value) { return value == 3; };\r\n\r\n    assert(y.remove_if(pr1) == 0);\r\n    assert(y.remove_if(pr2) == 1);\r\n    assert(y.remove_if(pr3) == 2);\r\n\r\n    y = {4, 4, 5, 5, 5};\r\n\r\n    auto pr4 = [](A, A) { return false; };\r\n    auto pr5 = [](A value1, A value2) { return value1 == 4 && value2 == 4; };\r\n    auto pr6 = [](A value1, A value2) { return value1 == 5 && value2 == 5; };\r\n\r\n    assert(y.unique(pr4) == 0);\r\n    assert(y.unique(pr5) == 1);\r\n    assert(y.unique(pr6) == 2);\r\n\r\n    y = {1, 2, 3};\r\n\r\n    assert(y.unique() == 0);\r\n\r\n    y.push_front(1);\r\n\r\n    assert(y.unique() == 1);\r\n\r\n    y.push_front(1);\r\n    y.push_front(1);\r\n\r\n    assert(y.unique() == 2);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\n// This verifies that the new list assignment logic correctly destroys all nodes\r\n// when an exception is thrown during construction.\r\n\r\nstruct ListAllocatorException {};\r\n\r\nstruct B {};\r\n\r\nstruct C {\r\n    C() {}\r\n    C(B const&) {\r\n        throw ListAllocatorException();\r\n    }\r\n};\r\n\r\nstruct ListAllocatorContext {\r\n    int allocations;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct ListAllocator {\r\n    typedef T value_type;\r\n\r\n    explicit ListAllocator(ListAllocatorContext* context) : _context(context) {}\r\n\r\n    template <typename U>\r\n    ListAllocator(ListAllocator<U> const& other) : _context(other._context) {}\r\n\r\n    template <typename U>\r\n    struct rebind {\r\n        typedef ListAllocator<U> other;\r\n    };\r\n\r\n    value_type* allocate(size_t n) {\r\n        value_type* p = (value_type*) operator new(n * sizeof(T));\r\n        ++_context->allocations;\r\n        return p;\r\n    }\r\n\r\n    void deallocate(value_type* p, size_t) {\r\n        --_context->allocations;\r\n        operator delete(p);\r\n    }\r\n\r\n    friend bool operator==(ListAllocator const&, ListAllocator const&) {\r\n        return true;\r\n    }\r\n    friend bool operator!=(ListAllocator const&, ListAllocator const&) {\r\n        return false;\r\n    }\r\n\r\n    ListAllocatorContext* _context;\r\n};\r\n\r\nvoid assert_list_node_reuse_exception_handling() {\r\n    ListAllocatorContext context = {0};\r\n\r\n    {\r\n        list<C, ListAllocator<C>> x((ListAllocator<C>(&context)));\r\n        int const start_allocations(context.allocations);\r\n        x.push_back(C());\r\n        x.push_back(C());\r\n        x.push_back(C());\r\n        int const after_push_allocations(context.allocations);\r\n\r\n        try {\r\n            B b;\r\n            x.assign(&b, &b + 1);\r\n        } catch (ListAllocatorException const&) {\r\n        }\r\n\r\n        assert(start_allocations == context.allocations || after_push_allocations == context.allocations);\r\n    }\r\n\r\n    assert(context.allocations == 0);\r\n}\r\n\r\n\r\n// This verifies that resize(n) and resize(n, t) work, especially when t is an element in the sequence.\r\n\r\ntemplate <typename C>\r\nvoid test_resize() {\r\n    {\r\n        C c(4);\r\n        assert(c.size() == 4);\r\n        assert(c[0] == 0);\r\n        assert(c[1] == 0);\r\n        assert(c[2] == 0);\r\n        assert(c[3] == 0);\r\n    }\r\n\r\n    const array<int, 5> arr = {{11, 22, 33, 44, 55}};\r\n\r\n    const C orig(arr.begin(), arr.end());\r\n    assert(orig.size() == 5);\r\n    assert(orig[0] == 11);\r\n    assert(orig[1] == 22);\r\n    assert(orig[2] == 33);\r\n    assert(orig[3] == 44);\r\n    assert(orig[4] == 55);\r\n\r\n    {\r\n        C cEmpty;\r\n        cEmpty.resize(0);\r\n        assert(cEmpty.empty());\r\n    }\r\n\r\n    {\r\n        auto c1(orig);\r\n        c1.resize(3);\r\n        assert(c1.size() == 3);\r\n        assert(c1[0] == 11);\r\n        assert(c1[1] == 22);\r\n        assert(c1[2] == 33);\r\n    }\r\n\r\n    {\r\n        auto c2(orig);\r\n        c2.resize(7);\r\n        assert(c2.size() == 7);\r\n        assert(c2[0] == 11);\r\n        assert(c2[1] == 22);\r\n        assert(c2[2] == 33);\r\n        assert(c2[3] == 44);\r\n        assert(c2[4] == 55);\r\n        assert(c2[5] == 0);\r\n        assert(c2[6] == 0);\r\n    }\r\n\r\n    {\r\n        auto c3(orig);\r\n        c3.resize(2, c3[2]);\r\n        assert(c3.size() == 2);\r\n        assert(c3[0] == 11);\r\n        assert(c3[1] == 22);\r\n    }\r\n\r\n    {\r\n        auto c4(orig);\r\n        c4.resize(8, c4[2]);\r\n        assert(c4.size() == 8);\r\n        assert(c4[0] == 11);\r\n        assert(c4[1] == 22);\r\n        assert(c4[2] == 33);\r\n        assert(c4[3] == 44);\r\n        assert(c4[4] == 55);\r\n        assert(c4[5] == 33);\r\n        assert(c4[6] == 33);\r\n        assert(c4[7] == 33);\r\n    }\r\n}\r\n\r\nint main() {\r\n    assert_forward_list_resize_empty();\r\n    assert_list_remove_element_in_sequence();\r\n    assert_forward_list_remove_element_in_sequence();\r\n    assert_list_node_reuse_exception_handling();\r\n\r\n    test_resize<deque<int>>();\r\n    test_resize<vector<int>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0437519_container_requirements/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0437519_container_requirements/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n// This test program verifies all of the container requirements for the Standard Library containers,\r\n// including the four non-array sequence containers (deque, forward_list, list, vector), the four\r\n// associative containers (map, multimap, multiset, and set), and the four unordered associative\r\n// containers (unordered_map, unordered_multimap, unordered_multiset, and unordered_set).\r\n//\r\n// n3485 is the reference document for all language standard citations (unless otherwise noted).\r\n//\r\n// A brief overview of the contents of this file:\r\n//\r\n// The first 650 lines or so of this file (everything up to the first use of DEFINE_TEST) are test\r\n// utilities:  stub allocators, comparators, and other kinds of types with which we can instantiate\r\n// containers; test types that define a restricted set of operations; and a set of container traits\r\n// classes that unify the interfaces for the containers so we can use a common set of tests for\r\n// them (these traits also define a few useful properties for each container so we know what to\r\n// test for each of them).\r\n//\r\n//\r\n// For each operation (or collection of related operations) specified in the Container Requirements,\r\n// we define a test using the DEFINE_TEST macro.  These tests can be instantiated for any container.\r\n// The DEFINE_TEST generates a set of typedefs (named c_{value_type}, where {value_type} is the type\r\n// of object stored in that container) that can be used within the test, for brevity.  In the test,\r\n// we simply attempt to perform the operation being tested using a container instantiated with a\r\n// value_type that provides only the capabilities required by the specification.\r\n//\r\n// If the requirements are different for some individual containers (e.g. vector::push_back requires\r\n// more than the push_back member of other containers), a specialized test is written for those\r\n// containers using the DEFINE_TEST_SPECIALIZATION macro.\r\n//\r\n// If a particular operation is not supported for a container (e.g., forward_list has no push_back),\r\n// that test is disabled for that container using the NOT_SUPPORTED_SPECIALIZATION macro.\r\n//\r\n// All test names start with \"test_\"\r\n//\r\n// For each group of related tests (generally divided by category as they are in the specification,\r\n// e.g., General Container Requirements, Allocator-Aware Container Requirements, Sequence Container\r\n// Requirements, etc.), we define a class template that instantiates all of the tests in that group.\r\n// The names of these classes start with \"check_\".  These classes will only instantiate tests for\r\n// supported classes of containers.  For example, check_all_sequence_requirements only instantiates\r\n// the sequence container requirements tests for sequence containers.\r\n//\r\n// At the very bottom of the file there is a function template named assert_container that\r\n// instantiates all of the check_ class templates for an individual container.  This function\r\n// template is instantiated once for each of the twelve containers being tested, by the assert_all\r\n// function.\r\n\r\n#include <cstddef>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <map>\r\n#include <memory>\r\n#include <new>\r\n#include <set>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\n\r\n//\r\n//\r\n// GENERAL UTILITIES\r\n//\r\n//\r\n\r\nstruct key {};\r\n\r\ntemplate <typename T>\r\nstruct faux_predicate {\r\n    bool operator()(T const&) const noexcept {\r\n        return false;\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nstruct faux_compare {\r\n    bool operator()(T const&, T const&) const noexcept {\r\n        return false;\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nstruct default_constructible_compare {\r\n    default_constructible_compare()                                                = default;\r\n    default_constructible_compare(default_constructible_compare const&)            = default;\r\n    default_constructible_compare& operator=(default_constructible_compare const&) = delete;\r\n\r\n    bool operator()(T const&, T const&) const noexcept {\r\n        return false;\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nstruct copy_constructible_compare {\r\n    copy_constructible_compare() = delete;\r\n    copy_constructible_compare(key) {}\r\n    copy_constructible_compare(copy_constructible_compare const&)            = default;\r\n    copy_constructible_compare& operator=(copy_constructible_compare const&) = delete;\r\n\r\n    bool operator()(T const&, T const&) const noexcept {\r\n        return false;\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nstruct faux_hash {\r\n    std::size_t operator()(T const&) const noexcept {\r\n        return 0;\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nstruct default_constructible_hash {\r\n    default_constructible_hash()                                             = default;\r\n    default_constructible_hash(default_constructible_hash const&)            = default;\r\n    default_constructible_hash& operator=(default_constructible_hash const&) = delete;\r\n\r\n    bool operator()(T const&, T const&) const noexcept {\r\n        return false;\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nstruct copy_constructible_hash {\r\n    copy_constructible_hash() = delete;\r\n    copy_constructible_hash(key) {}\r\n    copy_constructible_hash(copy_constructible_hash const&)            = default;\r\n    copy_constructible_hash& operator=(copy_constructible_hash const&) = delete;\r\n\r\n    std::size_t operator()(T const&) const noexcept {\r\n        return 0;\r\n    }\r\n};\r\n\r\n\r\n//\r\n//\r\n// ITERATORS FOR TESTING RANGE MEMBERS\r\n//\r\n//\r\n\r\n// Several functions have different requirements depending on the category of the iterator with\r\n// which the function is called.\r\n\r\ntemplate <typename I, typename T>\r\nstruct input_iterator_base {\r\n    typedef T value_type;\r\n    typedef T* pointer;\r\n    typedef T& reference;\r\n    typedef std::input_iterator_tag iterator_category;\r\n    typedef std::ptrdiff_t difference_type;\r\n\r\n    input_iterator_base()                                      = default;\r\n    input_iterator_base(input_iterator_base const&)            = default;\r\n    input_iterator_base& operator=(input_iterator_base const&) = default;\r\n\r\n    I& operator++() {\r\n        return static_cast<I&>(*this);\r\n    }\r\n    void operator++(int) = delete; // avoid postincrement\r\n\r\n    friend bool operator==(I const&, I const&) {\r\n        return true;\r\n    }\r\n    friend bool operator!=(I const&, I const&) {\r\n        return false;\r\n    }\r\n\r\n    T& operator*() const {\r\n        throw 0;\r\n    }\r\n    T* operator->() const {\r\n        throw 0;\r\n    }\r\n};\r\n\r\ntemplate <typename I, typename T>\r\nstruct forward_iterator_base : input_iterator_base<I, T> {\r\n    typedef std::forward_iterator_tag iterator_category;\r\n};\r\n\r\ntemplate <typename I, typename T>\r\nstruct bidirectional_iterator_base : forward_iterator_base<I, T> {\r\n    typedef std::bidirectional_iterator_tag iterator_category;\r\n\r\n    I& operator--() {\r\n        return *this;\r\n    }\r\n    void operator--(int) = delete; // avoid postdecrement\r\n};\r\n\r\ntemplate <typename I, typename T>\r\nstruct random_access_iterator_base : bidirectional_iterator_base<I, T> {\r\n    typedef std::random_access_iterator_tag iterator_category;\r\n\r\n    friend I operator+(I const&, std::ptrdiff_t) {\r\n        return I();\r\n    }\r\n    friend I operator+(std::ptrdiff_t, I const&) {\r\n        return I();\r\n    }\r\n    friend I operator-(I const&, std::ptrdiff_t) {\r\n        return I();\r\n    }\r\n    friend std::ptrdiff_t operator-(I const&, I const&) {\r\n        return 0;\r\n    }\r\n\r\n    friend I& operator+=(I& x, std::ptrdiff_t) {\r\n        return x;\r\n    }\r\n    friend I& operator-=(I& x, std::ptrdiff_t) {\r\n        return x;\r\n    }\r\n\r\n    T& operator[](std::ptrdiff_t) const = delete; // avoid subscript, N4849 [algorithms.requirements]/8\r\n\r\n    friend bool operator<(I const&, I const&) {\r\n        return false;\r\n    }\r\n    friend bool operator>(I const&, I const&) {\r\n        return false;\r\n    }\r\n    friend bool operator<=(I const&, I const&) {\r\n        return true;\r\n    }\r\n    friend bool operator>=(I const&, I const&) {\r\n        return true;\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nstruct input_iterator : input_iterator_base<input_iterator<T>, T> {};\r\ntemplate <typename T>\r\nstruct forward_iterator : forward_iterator_base<forward_iterator<T>, T> {};\r\ntemplate <typename T>\r\nstruct bidirectional_iterator : bidirectional_iterator_base<bidirectional_iterator<T>, T> {};\r\ntemplate <typename T>\r\nstruct random_access_iterator : random_access_iterator_base<random_access_iterator<T>, T> {};\r\n\r\n\r\n//\r\n//\r\n// ALLOCATORS FOR TESTING ALLOCATOR CONCEPTS\r\n//\r\n//\r\n\r\n// To verify the allocator-aware container requirements, we need two allocators--one that has\r\n// propagate_on_container_move_assignment set to true; the other with it set to false.  For all\r\n// other tests, we simply use std::allocator.\r\n\r\ntemplate <typename T>\r\nstruct pocma_allocator {\r\n    typedef T value_type;\r\n\r\n    pocma_allocator() = default;\r\n\r\n    template <typename U>\r\n    pocma_allocator(pocma_allocator<U> const&) {}\r\n\r\n    value_type* allocate(std::size_t) {\r\n        throw std::bad_alloc();\r\n    }\r\n    void deallocate(value_type*, std::size_t) {}\r\n\r\n    typedef std::true_type propagate_on_container_move_assignment;\r\n\r\n    friend bool operator==(pocma_allocator const&, pocma_allocator const&) {\r\n        return true;\r\n    }\r\n    friend bool operator!=(pocma_allocator const&, pocma_allocator const&) {\r\n        return false;\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nstruct non_pocma_allocator {\r\n    typedef T value_type;\r\n\r\n    non_pocma_allocator() = default;\r\n\r\n    template <typename U>\r\n    non_pocma_allocator(non_pocma_allocator<U> const&) {}\r\n\r\n    value_type* allocate(std::size_t) {\r\n        throw std::bad_alloc();\r\n    }\r\n    void deallocate(value_type*, std::size_t) {}\r\n\r\n    typedef std::false_type propagate_on_container_move_assignment;\r\n\r\n    friend bool operator==(non_pocma_allocator const&, non_pocma_allocator const&) {\r\n        return true;\r\n    }\r\n    friend bool operator!=(non_pocma_allocator const&, non_pocma_allocator const&) {\r\n        return false;\r\n    }\r\n};\r\n\r\n\r\n//\r\n//\r\n// CONCEPT TEST TYPES\r\n//\r\n//\r\n\r\n// These are test types that provide limited functionality and with which we can instantiate the\r\n// Standard Library containers.  The types that only model a single concept have their full name\r\n// spelled out; types that model several concepts are abbreviated (e.g. DefaultConstructible +\r\n// MoveInsertable is abbreviated as dc_mi).\r\n\r\nstruct emplace_argument {\r\n    emplace_argument() = default;\r\n    emplace_argument(key) {}\r\n};\r\n\r\n// clang-format off: make macros readable\r\n\r\n#define DEFINE_TYPE(name, dtor, def_ctor, copy_ctor, move_ctor, emp_ctor, copy_assign, move_assign, emp_assign) \\\r\n    class name {                                                                                                \\\r\n    public:              name(key) { }                                                                          \\\r\n    private: dtor        ~name() { }                                                                            \\\r\n    private: def_ctor    name() { }                                                                             \\\r\n    private: copy_ctor   name(name const&) { }                                                                  \\\r\n    private: move_ctor   name(name&&) { }                                                                       \\\r\n    private: emp_ctor    name(emplace_argument&&) { }                                                           \\\r\n    private: emp_ctor    name(emplace_argument&&, emplace_argument&&) { }                                       \\\r\n    private: emp_ctor    name(emplace_argument&&, emplace_argument&&, emplace_argument&&) { }                   \\\r\n    private: copy_assign name& operator=(name const&) { return *this; }                                         \\\r\n    private: move_assign name& operator=(name&&) noexcept { return *this; }                                     \\\r\n    private: emp_assign  name& operator=(emplace_argument&&) { return *this; }                                  \\\r\n    }\r\n\r\n#define YES public:\r\n\r\n//                                        default   copy   move   emplace    copy     move    emplace\r\n//                                 dtor    ctor     ctor   ctor    ctor     assign   assign   assign\r\nDEFINE_TYPE(erasable             , YES  ,         ,      ,      ,         ,        ,        ,         );\r\nDEFINE_TYPE(default_constructible, YES  , YES     ,      ,      ,         ,        ,        ,         );\r\nDEFINE_TYPE(copy_insertable      , YES  ,         , YES  , YES  ,         ,        ,        ,         );\r\nDEFINE_TYPE(move_insertable      , YES  ,         ,      , YES  ,         ,        ,        ,         );\r\nDEFINE_TYPE(emplace_constructible, YES  ,         ,      ,      , YES     ,        ,        ,         );\r\nDEFINE_TYPE(copy_assignable      , YES  ,         ,      ,      ,         , YES    , YES    ,         );\r\nDEFINE_TYPE(move_assignable      , YES  ,         ,      ,      ,         ,        , YES    ,         );\r\nDEFINE_TYPE(equality_comparable  , YES  ,         ,      ,      ,         ,        ,        ,         );\r\nDEFINE_TYPE(less_comparable      , YES  ,         ,      ,      ,         ,        ,        ,         );\r\n\r\nDEFINE_TYPE(ca_ci                , YES  ,         , YES  , YES  ,         , YES    , YES    ,         );\r\nDEFINE_TYPE(ci_ma                , YES  ,         , YES  , YES  ,         ,        , YES    ,         );\r\nDEFINE_TYPE(dc_mi                , YES  , YES     ,      , YES  ,         ,        ,        ,         );\r\nDEFINE_TYPE(ec_ma_mi             , YES  ,         ,      , YES  , YES     ,        , YES    ,         );\r\nDEFINE_TYPE(ec_mi                , YES  ,         ,      , YES  , YES     ,        ,        ,         );\r\nDEFINE_TYPE(ma_mi                , YES  ,         ,      , YES  ,         ,        , YES    ,         );\r\nDEFINE_TYPE(ec_ea                , YES  ,         ,      ,      , YES     ,        ,        , YES     );\r\nDEFINE_TYPE(ec_ea_mi             , YES  ,         ,      , YES  , YES     ,        ,        , YES     );\r\n\r\n#undef YES\r\n\r\n// clang-format on\r\n\r\nbool operator==(equality_comparable const&, equality_comparable const&) {\r\n    return true;\r\n}\r\nbool operator<(less_comparable const&, less_comparable const&) {\r\n    return false;\r\n}\r\n\r\n\r\n//\r\n//\r\n// CONTAINER TRAITS\r\n//\r\n//\r\n\r\nenum container_tag {\r\n    tag_deque        = (1 << 0),\r\n    tag_forward_list = (1 << 1),\r\n    tag_list         = (1 << 2),\r\n    tag_vector       = (1 << 3),\r\n\r\n    tag_map      = (1 << 4),\r\n    tag_multimap = (1 << 5),\r\n    tag_set      = (1 << 6),\r\n    tag_multiset = (1 << 7),\r\n\r\n    tag_unordered_map      = (1 << 8),\r\n    tag_unordered_multimap = (1 << 9),\r\n    tag_unordered_set      = (1 << 10),\r\n    tag_unordered_multiset = (1 << 11)\r\n};\r\n\r\nenum classification {\r\n    c_is_reversible            = (1 << 0),\r\n    c_is_optional              = (1 << 1),\r\n    c_is_sequence              = (1 << 2),\r\n    c_is_ordered_associative   = (1 << 3),\r\n    c_is_unordered_associative = (1 << 4),\r\n    c_is_unique_associative    = (1 << 5),\r\n\r\n    c_is_ordinary_sequence = (c_is_reversible | c_is_optional | c_is_sequence),\r\n    c_is_ordinary_unique_ordered_associative =\r\n        (c_is_reversible | c_is_optional | c_is_ordered_associative | c_is_unique_associative),\r\n    c_is_ordinary_nonunique_ordered_associative   = (c_is_reversible | c_is_optional | c_is_ordered_associative),\r\n    c_is_ordinary_unique_unordered_associative    = (c_is_unordered_associative | c_is_unique_associative),\r\n    c_is_ordinary_nonunique_unordered_associative = (c_is_unordered_associative),\r\n    c_is_forward_list                             = (c_is_optional | c_is_sequence)\r\n};\r\n\r\nstruct identity_bind_value {\r\n    template <typename V>\r\n    struct bind_value {\r\n        typedef V type;\r\n    };\r\n\r\n    typedef emplace_argument emplace_argument_type;\r\n\r\n    template <typename V>\r\n    static V construct_value() {\r\n        return V(key());\r\n    }\r\n};\r\n\r\nstruct map_associative_bind_value {\r\n    template <typename V>\r\n    struct bind_value {\r\n        typedef std::pair<V const, V> type;\r\n    };\r\n\r\n    typedef std::pair<emplace_argument, emplace_argument> emplace_argument_type;\r\n\r\n    template <typename V>\r\n    static std::pair<V, V> construct_value() {\r\n        return std::pair<V, V>(key(), key());\r\n    }\r\n};\r\n\r\ntemplate <template <typename, typename> class C>\r\nstruct sequence_bind_container : identity_bind_value {\r\n    template <typename V, typename A = std::allocator<V>>\r\n    struct bind_container {\r\n        typedef C<V, A> type;\r\n    };\r\n};\r\n\r\ntemplate <template <typename, typename, typename, typename> class C>\r\nstruct ordered_map_associative_bind_container : map_associative_bind_value {\r\n    template <typename V, typename A = std::allocator<V>, typename P = faux_compare<V>>\r\n    struct bind_container {\r\n        typedef typename bind_value<V>::type value_type;\r\n        typedef typename std::allocator_traits<A>::template rebind_alloc<value_type> alloc_type;\r\n\r\n        typedef C<V, V, P, alloc_type> type;\r\n    };\r\n};\r\n\r\ntemplate <template <typename, typename, typename> class C>\r\nstruct ordered_set_associative_bind_container : identity_bind_value {\r\n    template <typename V, typename A = std::allocator<V>, typename P = faux_compare<V>>\r\n    struct bind_container {\r\n        typedef C<V, P, A> type;\r\n    };\r\n};\r\n\r\ntemplate <template <typename, typename, typename, typename, typename> class C>\r\nstruct unordered_map_associative_bind_container : map_associative_bind_value {\r\n    template <typename V, typename A = std::allocator<V>, typename H = faux_hash<V>, typename P = faux_compare<V>>\r\n    struct bind_container {\r\n        typedef typename bind_value<V>::type value_type;\r\n        typedef typename std::allocator_traits<A>::template rebind_alloc<value_type> alloc_type;\r\n\r\n        typedef C<V, V, H, P, alloc_type> type;\r\n    };\r\n};\r\n\r\ntemplate <template <typename, typename, typename, typename> class C>\r\nstruct unordered_set_associative_bind_container : identity_bind_value {\r\n    template <typename V, typename A = std::allocator<V>, typename H = faux_hash<V>, typename P = faux_compare<V>>\r\n    struct bind_container {\r\n        typedef C<V, H, P, A> type;\r\n    };\r\n};\r\n\r\ntemplate <container_tag Tag, classification Features>\r\nstruct container_traits_base {\r\n    static container_tag const tag       = Tag;\r\n    static classification const features = Features;\r\n};\r\n\r\ntemplate <container_tag Tag, classification Features, template <typename, typename> class C>\r\nstruct sequence_traits_base : container_traits_base<Tag, Features>, sequence_bind_container<C> {};\r\n\r\ntemplate <container_tag Tag, classification Features, template <typename, typename, typename, typename> class C>\r\nstruct ordered_map_associative_container_base : container_traits_base<Tag, Features>,\r\n                                                ordered_map_associative_bind_container<C> {};\r\n\r\ntemplate <container_tag Tag, classification Features, template <typename, typename, typename> class C>\r\nstruct ordered_set_associative_container_base : container_traits_base<Tag, Features>,\r\n                                                ordered_set_associative_bind_container<C> {};\r\n\r\ntemplate <container_tag Tag, classification Features,\r\n    template <typename, typename, typename, typename, typename> class C>\r\nstruct unordered_map_associative_container_base : container_traits_base<Tag, Features>,\r\n                                                  unordered_map_associative_bind_container<C> {};\r\n\r\ntemplate <container_tag Tag, classification Features, template <typename, typename, typename, typename> class C>\r\nstruct unordered_set_associative_container_base : container_traits_base<Tag, Features>,\r\n                                                  unordered_set_associative_bind_container<C> {};\r\n\r\ntemplate <container_tag>\r\nstruct container_traits;\r\n\r\ntemplate <>\r\nstruct container_traits<tag_deque> : sequence_traits_base<tag_deque, c_is_ordinary_sequence, std::deque> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_forward_list>\r\n    : sequence_traits_base<tag_forward_list, c_is_forward_list, std::forward_list> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_list> : sequence_traits_base<tag_list, c_is_ordinary_sequence, std::list> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_vector> : sequence_traits_base<tag_vector, c_is_ordinary_sequence, std::vector> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_map>\r\n    : ordered_map_associative_container_base<tag_map, c_is_ordinary_unique_ordered_associative, std::map> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_multimap>\r\n    : ordered_map_associative_container_base<tag_multimap, c_is_ordinary_nonunique_ordered_associative, std::multimap> {\r\n};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_multiset>\r\n    : ordered_set_associative_container_base<tag_multiset, c_is_ordinary_nonunique_ordered_associative, std::multiset> {\r\n};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_set>\r\n    : ordered_set_associative_container_base<tag_set, c_is_ordinary_unique_ordered_associative, std::set> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_unordered_map> : unordered_map_associative_container_base<tag_unordered_map,\r\n                                                 c_is_ordinary_unique_unordered_associative, std::unordered_map> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_unordered_multimap>\r\n    : unordered_map_associative_container_base<tag_unordered_multimap, c_is_ordinary_nonunique_unordered_associative,\r\n          std::unordered_multimap> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_unordered_multiset>\r\n    : unordered_set_associative_container_base<tag_unordered_multiset, c_is_ordinary_nonunique_unordered_associative,\r\n          std::unordered_multiset> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_unordered_set> : unordered_set_associative_container_base<tag_unordered_set,\r\n                                                 c_is_ordinary_unique_unordered_associative, std::unordered_set> {};\r\n\r\n\r\n//\r\n//\r\n// TEST GENERATORS\r\n//\r\n//\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wunused-local-typedef\"\r\n#endif // __clang__\r\n\r\n#define GENERATE_CONTAINER_TYPEDEFS(opt_typename, name)                           \\\r\n    typedef opt_typename Traits::template bind_container<name>::type c_of_##name; \\\r\n    typedef opt_typename Traits::template bind_value<name>::type v_of_##name;\r\n\r\n#define GENERATE_ALL_CONTAINER_TYPEDEFS(unused, opt_typename)        \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, erasable)              \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, default_constructible) \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, copy_insertable)       \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, move_insertable)       \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, emplace_constructible) \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, copy_assignable)       \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, move_assignable)       \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, equality_comparable)   \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, less_comparable)       \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, ca_ci)                 \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, ci_ma)                 \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, dc_mi)                 \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, ec_ma_mi)              \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, ec_mi)                 \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, ma_mi)                 \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, ec_ea)                 \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, ec_ea_mi)\r\n\r\n#define DEFINE_TEST_IMPL(name, opt_typename, template_parameters, specialization, preface_text, ...) \\\r\n    template <template_parameters>                                                                   \\\r\n    struct name specialization {                                                                     \\\r\n        preface_text;                                                                                \\\r\n        typedef container_traits<Tag> Traits;                                                        \\\r\n                                                                                                     \\\r\n        name() {                                                                                     \\\r\n            GENERATE_ALL_CONTAINER_TYPEDEFS(unused, opt_typename);                                   \\\r\n            __VA_ARGS__                                                                              \\\r\n        }                                                                                            \\\r\n    }\r\n\r\n#define DEFINE_TEST(name, ...) \\\r\n    DEFINE_TEST_IMPL(name, typename, container_tag Tag, /* empty */, /* empty */, __VA_ARGS__)\r\n\r\n#define DEFINE_TEST_SPECIALIZATION(name, my_tag, ...) \\\r\n    DEFINE_TEST_IMPL(name, /* empty */, /* empty */, <my_tag>, static container_tag const Tag = my_tag;, __VA_ARGS__)\r\n\r\n// These macros prevent the test named 'name' from being run for the container specified by the\r\n// 'specialized_tag'.  The NOT_SUPPORTED_SPECIALIZATION macro should be used for tests that do not\r\n// pass because the container is specified as not supporting the operation being tested.\r\n\r\n#define NOT_SUPPORTED_SPECIALIZATION(name, specialized_tag) DEFINE_TEST_SPECIALIZATION(name, specialized_tag, {})\r\n\r\n\r\n//\r\n//\r\n// CONTAINER REQUIREMENTS (23.2.1[container.requirements.general]/Table 96)\r\n//\r\n//\r\n\r\nDEFINE_TEST(test_container_typedefs,\r\n{\r\n    // X::value_type, X::reference, X::const_reference\r\n    {\r\n        STATIC_ASSERT(std::is_same_v<v_of_erasable       , typename c_of_erasable::value_type     >);\r\n        STATIC_ASSERT(std::is_same_v<v_of_erasable&      , typename c_of_erasable::reference      >);\r\n        STATIC_ASSERT(std::is_same_v<v_of_erasable const&, typename c_of_erasable::const_reference>);\r\n}\r\n\r\n// X::iterator\r\n{\r\n    STATIC_ASSERT(\r\n        std::is_same_v<v_of_erasable, typename std::iterator_traits<typename c_of_erasable::iterator>::value_type>);\r\n\r\n    STATIC_ASSERT(std::is_base_of_v<std::forward_iterator_tag,\r\n        typename std::iterator_traits<typename c_of_erasable::iterator>::iterator_category>);\r\n\r\n    STATIC_ASSERT(std::is_convertible_v<typename c_of_erasable::iterator, typename c_of_erasable::const_iterator>);\r\n}\r\n\r\n// X::const_iterator\r\n{\r\n    STATIC_ASSERT(\r\n        std::is_same_v<v_of_erasable, typename std::iterator_traits<typename c_of_erasable::iterator>::value_type>);\r\n\r\n    STATIC_ASSERT(std::is_base_of_v<std::forward_iterator_tag,\r\n        typename std::iterator_traits<typename c_of_erasable::const_iterator>::iterator_category>);\r\n}\r\n\r\n// X::difference_type\r\n{\r\n    STATIC_ASSERT(std::is_signed_v<typename c_of_erasable::difference_type>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<typename c_of_erasable::difference_type,\r\n        typename std::iterator_traits<typename c_of_erasable::iterator>::difference_type>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<typename c_of_erasable::difference_type,\r\n        typename std::iterator_traits<typename c_of_erasable::const_iterator>::difference_type>);\r\n}\r\n\r\n// X::size_type\r\n{\r\n    STATIC_ASSERT(std::is_unsigned_v<typename c_of_erasable::size_type>);\r\n\r\n    // Note:  This check is overly strict:\r\n    STATIC_ASSERT(std::is_same_v<typename c_of_erasable::size_type,\r\n        std::make_unsigned_t<typename c_of_erasable::difference_type>>);\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(test_container_default_constructor, {\r\n    // X u; and X()\r\n    // [No Requires clause]\r\n    c_of_erasable a;\r\n    (c_of_erasable());\r\n});\r\n\r\n\r\nDEFINE_TEST(test_container_copy_constructor, {\r\n    // X(a), X u(a), and X u = a\r\n    // Requires:  T is CopyInsertable into X\r\n    c_of_copy_insertable a;\r\n    (c_of_copy_insertable(a));\r\n    c_of_copy_insertable u0(a);\r\n    c_of_copy_insertable u1 = a;\r\n});\r\n\r\n\r\nDEFINE_TEST(test_container_move_constructor, {\r\n    // X u(rv) and X u = rv\r\n    // [No Requires clause]\r\n    c_of_erasable rv;\r\n    c_of_erasable u0(std::move(rv));\r\n    c_of_erasable u1 = std::move(u0);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_container_begin_end, {\r\n    // a.begin(), a.end(), a.cbegin(), a.cend()\r\n    // [No Requires clause]\r\n    c_of_erasable a;\r\n    c_of_erasable const b;\r\n    typename c_of_erasable::iterator it0(a.begin());\r\n    typename c_of_erasable::iterator it1(a.end());\r\n\r\n    typename c_of_erasable::const_iterator it2(a.cbegin());\r\n    typename c_of_erasable::const_iterator it3(a.cend());\r\n\r\n    typename c_of_erasable::const_iterator it4(b.begin());\r\n    typename c_of_erasable::const_iterator it5(b.end());\r\n\r\n    typename c_of_erasable::const_iterator it6(b.cbegin());\r\n    typename c_of_erasable::const_iterator it7(b.cend());\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.begin()), typename c_of_erasable::iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.end()), typename c_of_erasable::iterator>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.cbegin()), typename c_of_erasable::const_iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.cend()), typename c_of_erasable::const_iterator>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.begin()), typename c_of_erasable::const_iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.end()), typename c_of_erasable::const_iterator>);\r\n\r\n    (void) it0;\r\n    (void) it1;\r\n    (void) it2;\r\n    (void) it3;\r\n    (void) it4;\r\n    (void) it5;\r\n    (void) it6;\r\n    (void) it7;\r\n});\r\n\r\n\r\nDEFINE_TEST(test_container_equality_comparison, {\r\n    // a == b and a != b\r\n    // Requires:  T is EqualityComparable\r\n    c_of_equality_comparable const a;\r\n    c_of_equality_comparable const b;\r\n    (void) (a == b);\r\n    (void) (a != b);\r\n\r\n    STATIC_ASSERT(std::is_convertible_v<decltype(a == b), bool>);\r\n    STATIC_ASSERT(std::is_convertible_v<decltype(a != b), bool>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_container_swap, {\r\n    // a.swap(b) and swap(a, b)\r\n    // [No Requires clause]\r\n    c_of_erasable a;\r\n    c_of_erasable b;\r\n    a.swap(b);\r\n    STATIC_ASSERT(noexcept(a.swap(b))); // strengthened\r\n    swap(a, b);\r\n    STATIC_ASSERT(noexcept(swap(a, b))); // strengthened\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.swap(b)), void>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(swap(a, b)), void>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_container_size, {\r\n    // a.size(), a.max_size(), and a.empty()\r\n    c_of_erasable const a;\r\n    (void) a.size();\r\n    STATIC_ASSERT(noexcept(a.size())); // strengthened\r\n    (void) a.max_size();\r\n    (void) a.empty();\r\n    STATIC_ASSERT(noexcept(a.empty())); // strengthened\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.size()), typename c_of_erasable::size_type>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.max_size()), typename c_of_erasable::size_type>);\r\n    STATIC_ASSERT(std::is_convertible_v<decltype(a.empty()), bool>);\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(test_container_size, tag_forward_list, {\r\n    // a.max_size(), and a.empty()  [forward_list has no size() member]\r\n    c_of_erasable const a;\r\n    (void) a.max_size();\r\n    (void) a.empty();\r\n    STATIC_ASSERT(noexcept(a.empty())); // strengthened\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.max_size()), typename c_of_erasable::size_type>);\r\n    STATIC_ASSERT(std::is_convertible_v<decltype(a.empty()), bool>);\r\n});\r\n\r\n\r\ntemplate <container_tag Tag>\r\nvoid check_all_container_requirements() {\r\n    test_container_typedefs<Tag>();\r\n    test_container_default_constructor<Tag>();\r\n    test_container_copy_constructor<Tag>();\r\n    test_container_move_constructor<Tag>();\r\n    // Move Assignment is verified in the Allocator-Aware Container Requirements\r\n    test_container_begin_end<Tag>();\r\n    test_container_equality_comparison<Tag>();\r\n    test_container_swap<Tag>();\r\n    // Copy Assignment is verified in the Allocator-Aware Container Requirements\r\n    test_container_size<Tag>();\r\n}\r\n\r\n\r\n//\r\n//\r\n// REVERSIBLE CONTAINER REQUIREMENTS (23.2.1[container.requirements.general]/Table 97)\r\n//\r\n//\r\n\r\nDEFINE_TEST(test_reversible_typedefs,\r\n{\r\n    // X::reverse_iterator\r\n    {\r\n        STATIC_ASSERT(std::is_same_v<\r\n            typename std::iterator_traits<typename c_of_erasable::reverse_iterator>::value_type,\r\n            typename c_of_erasable::value_type\r\n        >);\r\n\r\n        STATIC_ASSERT(std::is_same_v<\r\n            typename c_of_erasable::reverse_iterator,\r\n            std::reverse_iterator<typename c_of_erasable::iterator>\r\n        >);\r\n}\r\n\r\n// X::const_reverse_iterator\r\n{\r\n    STATIC_ASSERT(\r\n        std::is_same_v<typename std::iterator_traits<typename c_of_erasable::const_reverse_iterator>::value_type,\r\n            typename c_of_erasable::value_type>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<typename c_of_erasable::const_reverse_iterator,\r\n        std::reverse_iterator<typename c_of_erasable::const_iterator>>);\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(test_reversible_rbegin_rend, {\r\n    // a.rbegin(), a.rend(), a.crbegin(), a.crend()\r\n    c_of_erasable a;\r\n    c_of_erasable const b;\r\n    typename c_of_erasable::reverse_iterator it0(a.rbegin());\r\n    typename c_of_erasable::reverse_iterator it1(a.rend());\r\n\r\n    typename c_of_erasable::const_reverse_iterator it2(a.crbegin());\r\n    typename c_of_erasable::const_reverse_iterator it3(a.crend());\r\n\r\n    typename c_of_erasable::const_reverse_iterator it4(b.rbegin());\r\n    typename c_of_erasable::const_reverse_iterator it5(b.rend());\r\n\r\n    typename c_of_erasable::const_reverse_iterator it6(b.crbegin());\r\n    typename c_of_erasable::const_reverse_iterator it7(b.crend());\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.rbegin()), typename c_of_erasable::reverse_iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.rend()), typename c_of_erasable::reverse_iterator>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.crbegin()), typename c_of_erasable::const_reverse_iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.crend()), typename c_of_erasable::const_reverse_iterator>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.rbegin()), typename c_of_erasable::const_reverse_iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.rend()), typename c_of_erasable::const_reverse_iterator>);\r\n\r\n    (void) it0;\r\n    (void) it1;\r\n    (void) it2;\r\n    (void) it3;\r\n    (void) it4;\r\n    (void) it5;\r\n    (void) it6;\r\n    (void) it7;\r\n});\r\n\r\n\r\ntemplate <container_tag Tag, bool = (container_traits<Tag>::features & c_is_reversible) != 0>\r\nstruct check_all_reversible_requirements {\r\n    check_all_reversible_requirements() {\r\n        test_reversible_typedefs<Tag>();\r\n        test_reversible_rbegin_rend<Tag>();\r\n    }\r\n};\r\n\r\ntemplate <container_tag Tag>\r\nstruct check_all_reversible_requirements<Tag, false> {};\r\n\r\n\r\n//\r\n//\r\n// OPTIONAL CONTAINER OPERATIONS (23.2.1[container.requirements.general]/Table 98)\r\n//\r\n//\r\n\r\nDEFINE_TEST(test_optional_relational_comparison, {\r\n    // a < b; a > b; a <= b; a >= b\r\n    // Requires:  < is defined for values of T. < is a total ordering relationship.\r\n    //\r\n    // SPEC:  This is listed as a precondition; it should probably be a Requires.\r\n    c_of_less_comparable const a;\r\n    c_of_less_comparable const b;\r\n\r\n    (void) (a < b);\r\n    (void) (a > b);\r\n    (void) (a <= b);\r\n    (void) (a >= b);\r\n\r\n    STATIC_ASSERT(std::is_convertible_v<decltype(a < b), bool>);\r\n    STATIC_ASSERT(std::is_convertible_v<decltype(a > b), bool>);\r\n    STATIC_ASSERT(std::is_convertible_v<decltype(a <= b), bool>);\r\n    STATIC_ASSERT(std::is_convertible_v<decltype(a >= b), bool>);\r\n});\r\n\r\n\r\ntemplate <container_tag Tag, bool = (container_traits<Tag>::features & c_is_optional) != 0>\r\nstruct check_all_optional_container_requirements {\r\n    check_all_optional_container_requirements() {\r\n        test_optional_relational_comparison<Tag>();\r\n    }\r\n};\r\n\r\ntemplate <container_tag Tag>\r\nstruct check_all_optional_container_requirements<Tag, false> {};\r\n\r\n\r\n//\r\n//\r\n// ALLOCATOR-AWARE CONTAINER REQUIREMENTS (23.2.1[container.requirements.general]/Table 99)\r\n//\r\n//\r\n\r\nDEFINE_TEST(test_allocator_aware_typedefs, {\r\n    // allocator_type\r\n    // Requires:  allocator_type::value_type is the same as X::value_type\r\n    STATIC_ASSERT(\r\n        std::is_same_v<typename c_of_erasable::allocator_type::value_type, typename c_of_erasable::value_type>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_allocator_aware_get_allocator, {\r\n    // a.get_allocator()\r\n    // [No Requires clause]\r\n    //\r\n    // SPEC:  'Expression' is missing the 'a.' (it just says 'get_allocator()')\r\n    c_of_erasable const a;\r\n    STATIC_ASSERT(noexcept(a.get_allocator()));\r\n    (void) a.get_allocator();\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.get_allocator()), typename c_of_erasable::allocator_type>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_allocator_aware_allocator_constructor_default, {\r\n    // X(m) and X u(m)\r\n    // [No Requires clause]\r\n    typename c_of_erasable::allocator_type m;\r\n    (c_of_erasable(m));\r\n    c_of_erasable u(m);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_allocator_aware_allocator_constructor_copy, {\r\n    // X(t, m) and X u(t, m)\r\n    // Requires:  T is CopyInsertable into X\r\n    typename c_of_copy_insertable::allocator_type m;\r\n    c_of_copy_insertable t;\r\n    (c_of_copy_insertable(t, m));\r\n    c_of_copy_insertable u(t, m);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_allocator_aware_allocator_constructor_move, {\r\n    // X(rv, m) and X u(rv, m)\r\n    // Requires:  T is MoveInsertable\r\n    typename c_of_move_insertable::allocator_type m;\r\n    (c_of_move_insertable(c_of_move_insertable(), m));\r\n    c_of_move_insertable u(c_of_move_insertable(), m);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_allocator_aware_assignment_from_rvalue_non_pocma, {\r\n    typedef typename Traits::template bind_container<ma_mi, non_pocma_allocator<ma_mi>>::type container_type;\r\n\r\n    // a = rv\r\n    // Requires:  If allocator_traits<allocator_type>::propagate_on_container_move_assignment::value\r\n    // is false, T is MoveInsertable into X and MoveAssignable.\r\n    {\r\n        container_type a;\r\n        a = container_type();\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a = container_type()), container_type&>);\r\n    }\r\n});\r\n\r\n\r\nDEFINE_TEST(test_allocator_aware_assignment_from_rvalue_pocma, {\r\n    typedef typename Traits::template bind_container<erasable, pocma_allocator<erasable>>::type container_type;\r\n\r\n    // a = rv\r\n    // [No Requires clause]\r\n    //\r\n    // (If the allocator _does_ propagate on move assignment, there are no additional requirements,\r\n    // so T needs only be Erasable.)\r\n    {\r\n        container_type a;\r\n        a = container_type();\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a = container_type()), container_type&>);\r\n    }\r\n});\r\n\r\n\r\nDEFINE_TEST(test_allocator_aware_assignment_from_lvalue, {\r\n    // a = t\r\n    // Requires:  T is CopyInsertable into X and CopyAssignable\r\n    c_of_ca_ci a;\r\n    c_of_ca_ci const b;\r\n    a = b;\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a = a), c_of_ca_ci&>);\r\n});\r\n\r\n\r\ntemplate <container_tag Tag>\r\nvoid check_all_allocator_aware_requirements() {\r\n    test_allocator_aware_typedefs<Tag>();\r\n    test_allocator_aware_get_allocator<Tag>();\r\n    // X() and X u; are verified in the General Container Requirements\r\n    test_allocator_aware_allocator_constructor_default<Tag>();\r\n    test_allocator_aware_allocator_constructor_copy<Tag>();\r\n    // X(rv) and X u(rv) are verified in the General Container Requirements\r\n    test_allocator_aware_allocator_constructor_move<Tag>();\r\n    test_allocator_aware_assignment_from_lvalue<Tag>();\r\n    test_allocator_aware_assignment_from_rvalue_non_pocma<Tag>();\r\n    test_allocator_aware_assignment_from_rvalue_pocma<Tag>();\r\n    // a.swap(b) is verified in the General Container Requirements\r\n}\r\n\r\n\r\n//\r\n//\r\n// SEQUENCE CONTAINER REQUIREMENTS (23.2.3[sequence.reqmts]/Table 100)\r\n//\r\n//\r\n\r\nDEFINE_TEST(test_sequence_count_constructor_copy, {\r\n    // X(n, t) and X a(n, t)\r\n    // Requires:  T shall be CopyInsertable into X\r\n    c_of_copy_insertable(1, copy_insertable(key()));\r\n    c_of_copy_insertable a(1, copy_insertable(key()));\r\n});\r\n\r\n\r\nDEFINE_TEST(test_sequence_range_constructor, {\r\n    // X(i, j) and X a(i, j)\r\n    // Requires:  T shall be EmplaceConstructible into X from *i\r\n    std::move_iterator<input_iterator<emplace_argument>> const i;\r\n    c_of_emplace_constructible(i, i);\r\n    c_of_emplace_constructible a(i, i);\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_range_constructor, tag_vector,\r\n{\r\n    // X(i, j) and X a(i, j)\r\n    // Requires:  T shall be EmplaceConstructible into X from *i.  For vector, if the iterator does\r\n    // not meet the forward iterator requirements, T shall also be MoveInsertable into X.\r\n    {\r\n         std::move_iterator<forward_iterator<emplace_argument>> i;\r\n         c_of_emplace_constructible(i, i);\r\n         c_of_emplace_constructible a(i, i);\r\n}\r\n{\r\n    std::move_iterator<input_iterator<emplace_argument>> i;\r\n    c_of_ec_mi(i, i);\r\n    c_of_ec_mi a(i, i);\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(test_sequence_initializer_list_constructor, {\r\n    // X(il);\r\n    // Equivalent to X(il.begin(), il.end())\r\n    copy_insertable t = key();\r\n    c_of_copy_insertable({t, t, t});\r\n    c_of_copy_insertable a({t, t, t});\r\n});\r\n\r\n\r\nDEFINE_TEST(test_sequence_initializer_list_assignment, {\r\n    // a = il;\r\n    // X&\r\n    // Requires: T is CopyInsertable into X and CopyAssignable.\r\n    // Assigns the range [il.begin(), il.end()) into a.\r\n    // All existing elements of a are either assigned to or destroyed.\r\n    // Returns: *this.\r\n    ca_ci t = key();\r\n    c_of_ca_ci a;\r\n    a = {t, t, t};\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a = {t, t, t}), c_of_ca_ci&>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_sequence_emplace, {\r\n    // a.emplace(p, args)\r\n    // Requires: T is EmplaceConstructible into X from args.\r\n    c_of_emplace_constructible a;\r\n    a.emplace(a.begin(), emplace_argument());\r\n    a.emplace(a.begin(), emplace_argument(), emplace_argument());\r\n    a.emplace(a.begin(), emplace_argument(), emplace_argument(), emplace_argument());\r\n\r\n    // Return type:  iterator\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.emplace(a.begin(), emplace_argument())),\r\n        typename c_of_emplace_constructible::iterator>);\r\n});\r\n\r\nDEFINE_TEST(test_sequence_emplace_deque_vector, {\r\n    // a.emplace(p, args)\r\n    // Requires: T is EmplaceConstructible into X from args. For vector and deque, T is also\r\n    // MoveInsertable into X and MoveAssignable.\r\n    c_of_ec_ma_mi a;\r\n    a.emplace(a.begin(), emplace_argument());\r\n    a.emplace(a.begin(), emplace_argument(), emplace_argument());\r\n    a.emplace(a.begin(), emplace_argument(), emplace_argument(), emplace_argument());\r\n\r\n    // Return type:  iterator\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.emplace(a.begin(), emplace_argument())), typename c_of_ec_ma_mi::iterator>);\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_emplace, tag_deque, { test_sequence_emplace_deque_vector<Tag>(); });\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_emplace, tag_vector, { test_sequence_emplace_deque_vector<Tag>(); });\r\nNOT_SUPPORTED_SPECIALIZATION(test_sequence_emplace, tag_forward_list);\r\n\r\n\r\nDEFINE_TEST(test_sequence_copy_insert_one, {\r\n    // a.insert(p, t)\r\n    // Requires:  T shall be CopyInsertable into X.\r\n    c_of_copy_insertable a;\r\n    copy_insertable const t((key()));\r\n    a.insert(a.begin(), t);\r\n\r\n    // Return type:  iterator\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.insert(a.begin(), t)), typename c_of_copy_insertable::iterator>);\r\n});\r\n\r\nDEFINE_TEST(test_sequence_copy_insert_one_deque_vector, {\r\n    // a.insert(p, t)\r\n    // Requires:  T shall be CopyInsertable into X.  For vector and deque, T shall also be\r\n    // MoveAssignable.\r\n    c_of_ca_ci a;\r\n    ca_ci const t((key()));\r\n    a.insert(a.begin(), t);\r\n\r\n    // Return type:  iterator\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.insert(a.begin(), t)), typename c_of_ca_ci::iterator>);\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_copy_insert_one, tag_deque, { test_sequence_emplace_deque_vector<Tag>(); });\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_copy_insert_one, tag_vector, { test_sequence_emplace_deque_vector<Tag>(); });\r\nNOT_SUPPORTED_SPECIALIZATION(test_sequence_copy_insert_one, tag_forward_list);\r\n\r\n\r\nDEFINE_TEST(test_sequence_move_insert_one, {\r\n    // a.insert(p, rv)\r\n    // Requires:  T shall be MoveInsertable into X.\r\n    c_of_move_insertable a;\r\n    a.insert(a.begin(), move_insertable(key()));\r\n\r\n    // Return type:  iterator\r\n    STATIC_ASSERT(\r\n        std::is_same_v<decltype(a.insert(a.begin(), move_insertable(key()))), typename c_of_move_insertable::iterator>);\r\n});\r\n\r\nDEFINE_TEST(test_sequence_move_insert_one_deque_vector, {\r\n    // a.insert(p, rv)\r\n    // Requires:  T shall be MoveInsertable into X.  For vector and deque, T shall also be\r\n    // MoveAssignable.\r\n    c_of_ma_mi a;\r\n    a.insert(a.begin(), ma_mi(key()));\r\n\r\n    // Return type:  iterator\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.insert(a.begin(), ma_mi(key()))), typename c_of_ma_mi::iterator>);\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(\r\n    test_sequence_move_insert_one, tag_deque, { test_sequence_move_insert_one_deque_vector<Tag>(); });\r\nDEFINE_TEST_SPECIALIZATION(\r\n    test_sequence_move_insert_one, tag_vector, { test_sequence_move_insert_one_deque_vector<Tag>(); });\r\nNOT_SUPPORTED_SPECIALIZATION(test_sequence_move_insert_one, tag_forward_list);\r\n\r\n\r\nDEFINE_TEST(test_sequence_copy_insert_n, {\r\n    // a.insert(p, n, t)\r\n    // Requires:  T shall be CopyInsertable into X and CopyAssignable.\r\n    c_of_ca_ci a;\r\n    ca_ci const t((key()));\r\n    a.insert(a.begin(), 1, t);\r\n\r\n    // Return type:  iterator\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.insert(a.begin(), 1, t)), typename c_of_ca_ci::iterator>);\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_sequence_copy_insert_n, tag_forward_list);\r\n\r\n\r\nDEFINE_TEST(test_sequence_range_insert, {\r\n    // a.insert(p, i, j)\r\n    // Requires:  T shall be EmplaceConstructible into X from *i.\r\n    c_of_emplace_constructible a;\r\n    std::move_iterator<input_iterator<emplace_argument>> const i;\r\n    a.insert(a.begin(), i, i);\r\n\r\n    // Return type:  iterator\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.insert(a.begin(), i, i)), typename c_of_emplace_constructible::iterator>);\r\n});\r\n\r\nDEFINE_TEST(test_sequence_range_insert_deque_vector,\r\n{\r\n    // a.insert(p, i, j)\r\n    // Requires:  T shall be EmplaceConstructible into X from *i.  For vector, if the iterator does\r\n    // not meet the forward iterator requirements, T shall also be MoveInsertable into X and\r\n    // MoveAssignable.\r\n\r\n    // SPEC:  There is no way to meet the specification here.  Inserting elements into the middle of\r\n    // a vector may require move construction and move assignment of elements after the insertion\r\n    // point.  The same is true for deque.  The specification should be altered to read as follows:\r\n    //\r\n    //     For deque and vector, T shall also be MoveInsertable into X and MoveAssignable.\r\n    //\r\n    // The test here verifies this behavior.\r\n    {\r\n        c_of_ec_ma_mi a;\r\n        std::move_iterator<input_iterator<emplace_argument>> const i;\r\n        a.insert(a.begin(), i, i);\r\n\r\n        // Return type:  iterator\r\n        STATIC_ASSERT(std::is_same_v<\r\n            decltype(a.insert(a.begin(), i, i)),\r\n            typename c_of_ec_ma_mi::iterator>);\r\n}\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_range_insert, tag_deque, { test_sequence_range_insert_deque_vector<Tag>(); });\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_range_insert, tag_vector, { test_sequence_range_insert_deque_vector<Tag>(); });\r\nNOT_SUPPORTED_SPECIALIZATION(test_sequence_range_insert, tag_forward_list);\r\n\r\n\r\nDEFINE_TEST(test_sequence_initializer_list_insert, {\r\n    // a.insert(p, il);\r\n    // iterator\r\n    // a.insert(p, il.begin(), il.end()).\r\n    copy_insertable t = key();\r\n    c_of_copy_insertable a;\r\n    a.insert(a.begin(), {t, t, t});\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.insert(a.begin(), {t, t, t})), typename c_of_copy_insertable::iterator>);\r\n});\r\n\r\nDEFINE_TEST(test_sequence_initializer_list_insert_deque_vector, {\r\n    // a.insert(p, il);\r\n    // iterator\r\n    // a.insert(p, il.begin(), il.end()).\r\n    ci_ma t = key();\r\n    c_of_ci_ma a;\r\n    a.insert(a.begin(), {t, t, t});\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.insert(a.begin(), {t, t, t})), typename c_of_ci_ma::iterator>);\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(\r\n    test_sequence_initializer_list_insert, tag_deque, { test_sequence_initializer_list_insert_deque_vector<Tag>(); });\r\nDEFINE_TEST_SPECIALIZATION(\r\n    test_sequence_initializer_list_insert, tag_vector, { test_sequence_initializer_list_insert_deque_vector<Tag>(); });\r\nNOT_SUPPORTED_SPECIALIZATION(test_sequence_initializer_list_insert, tag_forward_list);\r\n\r\n\r\nDEFINE_TEST(test_sequence_erase, {\r\n    // a.erase(q), a.erase(q1, q2)\r\n    // [No Requires clause]\r\n    c_of_erasable a;\r\n    a.erase(a.begin());\r\n    STATIC_ASSERT(noexcept(a.erase(a.begin()))); // strengthened\r\n    a.erase(a.begin(), a.end());\r\n    STATIC_ASSERT(noexcept(a.erase(a.begin(), a.end()))); // strengthened\r\n\r\n    // Return type:  iterator\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.erase(a.begin())), typename c_of_erasable::iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.erase(a.begin(), a.end())), typename c_of_erasable::iterator>);\r\n});\r\n\r\nDEFINE_TEST(test_sequence_erase_deque_vector, {\r\n    // a.erase(q), a.erase(q1, q2)\r\n    // For vector and deque, T shall be MoveAssignable\r\n    c_of_move_assignable a;\r\n    a.erase(a.begin());\r\n    STATIC_ASSERT(noexcept(a.erase(a.begin()))); // strengthened\r\n    a.erase(a.begin(), a.end());\r\n    STATIC_ASSERT(noexcept(a.erase(a.begin(), a.end()))); // strengthened\r\n\r\n    // Return type:  iterator\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.erase(a.begin())), typename c_of_move_assignable::iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.erase(a.begin(), a.end())), typename c_of_move_assignable::iterator>);\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_erase, tag_deque, { test_sequence_erase_deque_vector<Tag>(); });\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_erase, tag_vector, { test_sequence_erase_deque_vector<Tag>(); });\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_sequence_erase, tag_forward_list);\r\n\r\n\r\nDEFINE_TEST(test_sequence_clear, {\r\n    // a.clear()\r\n    // [No Requires clause]\r\n    c_of_erasable a;\r\n    a.clear();\r\n    STATIC_ASSERT(noexcept(a.clear()));\r\n\r\n    // Return type:  void\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.clear()), void>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_sequence_range_assign, {\r\n    // [N4606]\r\n    // a.assign(i, j)\r\n    // Requires:  T shall be EmplaceConstructible into X from *i and assignable from *i.\r\n\r\n    c_of_ec_ea a;\r\n    std::move_iterator<input_iterator<emplace_argument>> const i;\r\n    a.assign(i, i);\r\n\r\n    // Return type:  void\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.assign(i, i)), void>);\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_range_assign, tag_vector,\r\n{\r\n    // [N4606]\r\n    // a.assign(i, j)\r\n    // Requires:  T shall be EmplaceConstructible into X from *i and assignable from *i.\r\n    // For vector, if the iterator does not meet the forward iterator requirements (24.2.5),\r\n    // T shall also be MoveInsertable into X.\r\n\r\n    {\r\n        c_of_ec_ea a;\r\n        std::move_iterator<forward_iterator<emplace_argument>> i;\r\n        a.assign(i, i);\r\n\r\n        // Return type:  void\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.assign(i, i)), void>);\r\n}\r\n\r\n{\r\n    c_of_ec_ea_mi a;\r\n    std::move_iterator<input_iterator<emplace_argument>> i;\r\n    a.assign(i, i);\r\n\r\n    // Return type:  void\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.assign(i, i)), void>);\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(test_sequence_initializer_list_assign, {\r\n    // a.assign(il)\r\n    // void\r\n    // a.assign(il.begin(), il.end()).\r\n    ca_ci t = key();\r\n    c_of_ca_ci a;\r\n    a.assign({t, t, t});\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.assign({t, t, t})), void>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_sequence_assign_n, {\r\n    // a.assign(n, t)\r\n    // Requires:  T shall be CopyInsertable into X and CopyAssignable.\r\n    c_of_ca_ci a;\r\n    ca_ci const t((key()));\r\n    a.assign(1, t);\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.assign(1, t)), void>);\r\n});\r\n\r\n\r\ntemplate <container_tag Tag, bool = (container_traits<Tag>::features & c_is_sequence) != 0>\r\nstruct check_all_sequence_requirements {\r\n    check_all_sequence_requirements() {\r\n        test_sequence_count_constructor_copy<Tag>();\r\n        test_sequence_range_constructor<Tag>();\r\n\r\n        test_sequence_initializer_list_constructor<Tag>();\r\n        test_sequence_initializer_list_assignment<Tag>();\r\n\r\n        test_sequence_emplace<Tag>();\r\n        test_sequence_copy_insert_one<Tag>();\r\n        test_sequence_move_insert_one<Tag>();\r\n        test_sequence_copy_insert_n<Tag>();\r\n        test_sequence_range_insert<Tag>();\r\n        test_sequence_initializer_list_insert<Tag>();\r\n\r\n        test_sequence_erase<Tag>();\r\n        test_sequence_clear<Tag>();\r\n\r\n        test_sequence_range_assign<Tag>();\r\n        test_sequence_initializer_list_assign<Tag>();\r\n        test_sequence_assign_n<Tag>();\r\n    }\r\n};\r\n\r\ntemplate <container_tag Tag>\r\nstruct check_all_sequence_requirements<Tag, false> {};\r\n\r\n\r\n//\r\n//\r\n// OPTIONAL SEQUENCE CONTAINER REQUIREMENTS (23.2.3[sequence.reqmts]/Table 101)\r\n//\r\n//\r\n\r\nDEFINE_TEST(test_optional_sequence_front, {\r\n    // a.front()\r\n    // [No Requires clause]\r\n    c_of_erasable a;\r\n    c_of_erasable const b;\r\n\r\n    (void) a.front();\r\n    STATIC_ASSERT(noexcept(a.front())); // strengthened\r\n    (void) b.front();\r\n    STATIC_ASSERT(noexcept(b.front())); // strengthened\r\n\r\n    // Returns:  reference; const_reference for constant a\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.front()), typename c_of_erasable::reference>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.front()), typename c_of_erasable::const_reference>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_optional_sequence_back, {\r\n    // a.back()\r\n    // [No Requires clause]\r\n    c_of_erasable a;\r\n    c_of_erasable const b;\r\n\r\n    (void) a.back();\r\n    STATIC_ASSERT(noexcept(a.back())); // strengthened\r\n    (void) b.back();\r\n    STATIC_ASSERT(noexcept(b.back())); // strengthened\r\n\r\n    // Returns:  reference; const_reference for constant a\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.back()), typename c_of_erasable::reference>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.back()), typename c_of_erasable::const_reference>);\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_optional_sequence_back, tag_forward_list);\r\n\r\n\r\n#if _HAS_CXX17\r\n#define IF17_ELSE14(ARG17, ARG14) ARG17\r\n#else // _HAS_CXX17\r\n#define IF17_ELSE14(ARG17, ARG14) ARG14\r\n#endif // _HAS_CXX17\r\n\r\n\r\nDEFINE_TEST(test_optional_sequence_emplace_front, {\r\n    // a.emplace_front(args)\r\n    // Requires:  T shall be EmplaceConstructible into X from args\r\n    c_of_emplace_constructible a;\r\n    a.emplace_front(emplace_argument());\r\n    a.emplace_front(emplace_argument(), emplace_argument());\r\n    a.emplace_front(emplace_argument(), emplace_argument(), emplace_argument());\r\n\r\n    // (C++17) Returns:  reference\r\n    // (C++14) Returns:  void\r\n    using ret_type = IF17_ELSE14(typename c_of_emplace_constructible::reference, void);\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.emplace_front(emplace_argument())), ret_type>);\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_optional_sequence_emplace_front, tag_vector);\r\n\r\n\r\nDEFINE_TEST(test_optional_sequence_emplace_back, {\r\n    // a.emplace_back(args)\r\n    // Requires:  T shall be EmplaceConstructible into X from args\r\n    c_of_emplace_constructible a;\r\n    a.emplace_back(emplace_argument());\r\n    a.emplace_back(emplace_argument(), emplace_argument());\r\n    a.emplace_back(emplace_argument(), emplace_argument(), emplace_argument());\r\n\r\n    // (C++17) Returns:  reference\r\n    // (C++14) Returns:  void\r\n    using ret_type = IF17_ELSE14(typename c_of_emplace_constructible::reference, void);\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.emplace_back(emplace_argument())), ret_type>);\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(test_optional_sequence_emplace_back, tag_vector, {\r\n    // a.emplace_back(args)\r\n    // Requires:  T shall be EmplaceConstructible into X from args.  For vector, T shall be\r\n    // MoveInsertable into X.\r\n    c_of_ec_mi a;\r\n    a.emplace_back(emplace_argument());\r\n    a.emplace_back(emplace_argument(), emplace_argument());\r\n    a.emplace_back(emplace_argument(), emplace_argument(), emplace_argument());\r\n\r\n    // (C++17) Returns:  reference\r\n    // (C++14) Returns:  void\r\n    using ret_type = IF17_ELSE14(typename c_of_ec_mi::reference, void);\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.emplace_back(emplace_argument())), ret_type>);\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_optional_sequence_emplace_back, tag_forward_list);\r\n\r\n\r\nDEFINE_TEST(test_optional_sequence_push_front,\r\n{\r\n    {\r\n        // a.push_front(t)\r\n        // Requires:  T shall be CopyInsertable into X\r\n        c_of_copy_insertable a;\r\n        copy_insertable const t((key()));\r\n        a.push_front(t);\r\n\r\n        // Returns:  void\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.push_front(t)), void>);\r\n}\r\n\r\n{\r\n    // a.push_front(rv)\r\n    // Requires:  T shall be MoveInsertable into X\r\n    c_of_move_insertable a;\r\n    a.push_front(move_insertable(key()));\r\n\r\n    // Returns:  void\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.push_front(move_insertable(key()))), void>);\r\n}\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_optional_sequence_push_front, tag_vector);\r\n\r\n\r\nDEFINE_TEST(test_optional_sequence_push_back,\r\n{\r\n    {\r\n        // a.push_back(t)\r\n        // Requires:  T shall be CopyInsertable into X\r\n        c_of_copy_insertable a;\r\n        copy_insertable const t((key()));\r\n        a.push_back(t);\r\n\r\n        // Returns:  void\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.push_back(t)), void>);\r\n}\r\n\r\n{\r\n    // a.push_back(rv)\r\n    // Requires:  T shall be MoveInsertable into X\r\n    c_of_move_insertable a;\r\n    a.push_back(move_insertable(key()));\r\n\r\n    // Returns:  void\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.push_back(move_insertable(key()))), void>);\r\n}\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_optional_sequence_push_back, tag_forward_list);\r\n\r\n\r\nDEFINE_TEST(test_optional_sequence_pop_front, {\r\n    // a.pop_back()\r\n    // [No Requires clause]\r\n    c_of_erasable a;\r\n    a.pop_front();\r\n    STATIC_ASSERT(noexcept(a.pop_front())); // strengthened\r\n\r\n    // Returns:  void\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.pop_front()), void>);\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_optional_sequence_pop_front, tag_vector);\r\n\r\n\r\nDEFINE_TEST(test_optional_sequence_pop_back, {\r\n    // a.pop_back()\r\n    // [No Requires clause]\r\n    c_of_erasable a;\r\n    a.pop_back();\r\n    STATIC_ASSERT(noexcept(a.pop_back())); // strengthened\r\n\r\n    // Returns:  void\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.pop_back()), void>);\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_optional_sequence_pop_back, tag_forward_list);\r\n\r\n\r\nDEFINE_TEST(test_optional_sequence_subscript, {\r\n    // a[n] and a.at(n)\r\n    // [No Requires clause]\r\n    c_of_erasable a;\r\n    c_of_erasable const b;\r\n\r\n    (void) a[0];\r\n    STATIC_ASSERT(noexcept(a[0])); // strengthened\r\n    (void) b[0];\r\n    STATIC_ASSERT(noexcept(b[0])); // strengthened\r\n\r\n    (void) a.at(0);\r\n    (void) b.at(0);\r\n\r\n    // Returns:  reference; const_reference for constant a\r\n    STATIC_ASSERT(std::is_same_v<decltype(a[0]), typename c_of_erasable::reference>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b[0]), typename c_of_erasable::const_reference>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.at(0)), typename c_of_erasable::reference>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.at(0)), typename c_of_erasable::const_reference>);\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_optional_sequence_subscript, tag_forward_list);\r\nNOT_SUPPORTED_SPECIALIZATION(test_optional_sequence_subscript, tag_list);\r\n\r\n\r\ntemplate <container_tag Tag, bool = (container_traits<Tag>::features & c_is_sequence) != 0>\r\nstruct check_all_optional_sequence_requirements {\r\n    check_all_optional_sequence_requirements() {\r\n        test_optional_sequence_front<Tag>();\r\n        test_optional_sequence_back<Tag>();\r\n        test_optional_sequence_emplace_front<Tag>();\r\n        test_optional_sequence_emplace_back<Tag>();\r\n        test_optional_sequence_push_front<Tag>();\r\n        test_optional_sequence_push_back<Tag>();\r\n        test_optional_sequence_pop_front<Tag>();\r\n        test_optional_sequence_pop_back<Tag>();\r\n        test_optional_sequence_subscript<Tag>();\r\n    }\r\n};\r\n\r\ntemplate <container_tag Tag>\r\nstruct check_all_optional_sequence_requirements<Tag, false> {};\r\n\r\n\r\n//\r\n//\r\n// ORDERED ASSOCIATIVE CONTAINER REQUIREMENTS (23.2.4[associative.reqmts]/Table 102)\r\n//\r\n//\r\n\r\nDEFINE_TEST(test_ordered_associative_typedefs, {\r\n    // X::key_type is Key\r\n    STATIC_ASSERT(std::is_same_v<typename c_of_erasable::key_type, erasable>);\r\n\r\n    // X::key_compare is Compare\r\n    STATIC_ASSERT(std::is_same_v<typename c_of_erasable::key_compare, faux_compare<erasable>>);\r\n\r\n    // X::value_compare is \"a binary predicate type;\" let's just be sure it's defined:\r\n    STATIC_ASSERT(!std::is_same_v<typename c_of_erasable::value_compare, void>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_ordered_associative_typedefs_for_maps, {\r\n    // X::mapped_type is T\r\n    STATIC_ASSERT(std::is_same_v<typename c_of_erasable::mapped_type, erasable>);\r\n\r\n    // X::value_type is pair<const Key, T>\r\n    STATIC_ASSERT(std::is_same_v<typename c_of_erasable::value_type, std::pair<erasable const, erasable>>);\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_ordered_associative_typedefs_for_maps, tag_multiset);\r\nNOT_SUPPORTED_SPECIALIZATION(test_ordered_associative_typedefs_for_maps, tag_set);\r\n\r\n\r\nDEFINE_TEST(test_ordered_associative_default_constructor_with_comparator,\r\n{\r\n    // X(c) and X a(c);\r\n    // Requires:  key_compare is CopyConstructible\r\n    {\r\n        typedef typename Traits::template bind_container<\r\n            erasable,\r\n            std::allocator<erasable>,\r\n            copy_constructible_compare<erasable>\r\n        >::type container_type;\r\n\r\n        copy_constructible_compare<erasable> const c((key()));\r\n        (container_type(c));\r\n        container_type a(c);\r\n\r\n        // GH-1037 containers should be move constructible with a non-assignable comparator\r\n        container_type b{std::move(a)};\r\n        container_type d = std::move(b);\r\n}\r\n\r\n// X() and X a;\r\n// Requires:  key_compare is DefaultConstructible\r\n{\r\n    typedef typename Traits::template bind_container<erasable, std::allocator<erasable>,\r\n        default_constructible_compare<erasable>>::type container_type;\r\n\r\n    (container_type());\r\n    container_type a;\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(test_ordered_associative_range_constructor_with_comparator, {\r\n    // SPEC:  These are the only two operations for which traits are specified for key_compare, but\r\n    // there are many other operations for which key_compare must meet other requirements (e.g. a\r\n    // call to a.key_comp() necessitates that the key_comp type is move constructible.\r\n    //\r\n    // In the rest of the tests, I have assumed std::less for the comparator, which meets any possible\r\n    // requirements, but it should be considered whether the comparator requirements should be more\r\n    // thoroughly specified.\r\n\r\n    std::move_iterator<input_iterator<typename Traits::emplace_argument_type>> i;\r\n    typename c_of_emplace_constructible::key_compare c;\r\n    c_of_emplace_constructible(i, i);\r\n    c_of_emplace_constructible a1(i, i);\r\n    c_of_emplace_constructible(i, i, c);\r\n    c_of_emplace_constructible a2(i, i, c);\r\n\r\n    typename c_of_copy_insertable::value_type t = Traits::template construct_value<copy_insertable>();\r\n    c_of_copy_insertable({t, t, t});\r\n    c_of_copy_insertable a3({t, t, t});\r\n});\r\n\r\n\r\nDEFINE_TEST(test_ordered_associative_initializer_list_assign, {\r\n    // a = il\r\n    // X&\r\n    // Requires: value_type is CopyInsertable into X and CopyAssignable.\r\n    // Effects: Assigns the range [il.begin(), il.end()) into a.\r\n    // All existing elements of a are either assigned to or destroyed.\r\n    typename c_of_ca_ci::value_type t = Traits::template construct_value<ca_ci>();\r\n    c_of_ca_ci a;\r\n    a = {t, t, t};\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a = {t, t, t}), c_of_ca_ci&>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_ordered_associative_comparators, {\r\n    // a.key_comp()\r\n    // [No Requires clause]\r\n    c_of_erasable const a;\r\n    (void) a.key_comp();\r\n    (void) a.value_comp();\r\n\r\n    // Returns:  X::key_compare, X::value_compare\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.key_comp()), typename c_of_erasable::key_compare>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.value_comp()), typename c_of_erasable::value_compare>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_ordered_associative_emplace, {\r\n    // a_uniq.emplace(args), a_eq.emplace(args)\r\n    // Requires:  value_type shall be EmplaceConstructible into X from args\r\n    c_of_emplace_constructible a;\r\n    a.emplace(emplace_argument(), emplace_argument());\r\n\r\n    // Returns:  pair<iterator, bool> for a_uniq; iterator for a_eq\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.emplace(emplace_argument(), emplace_argument())),\r\n        std::conditional_t<(Traits::features & c_is_unique_associative) != 0,\r\n            std::pair<typename c_of_emplace_constructible::iterator, bool>,\r\n            typename c_of_emplace_constructible::iterator>>);\r\n\r\n    // a.emplace_hint(p, args)\r\n    // Requires:  equivalent to a.emplace(args)\r\n    a.emplace_hint(a.begin(), emplace_argument(), emplace_argument());\r\n\r\n    // Returns:  iterator\r\n    typedef decltype(a.emplace_hint(a.begin(), emplace_argument(), emplace_argument())) result_type;\r\n\r\n    STATIC_ASSERT(std::is_same_v<result_type, typename c_of_emplace_constructible::iterator>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_ordered_associative_insert, {\r\n    // a_uniq.insert(t) and a_eq.insert(t)\r\n    // Requires:  If t is a non-const rvalue expression, value_type shall be MoveInsertable into X;\r\n    // otherwise, value_type shall be CopyInsertable into X.\r\n    c_of_move_insertable am;\r\n    am.insert(Traits::template construct_value<move_insertable>());\r\n\r\n    c_of_copy_insertable ac;\r\n    typename c_of_copy_insertable::value_type value(Traits::template construct_value<copy_insertable>());\r\n    ac.insert(value);\r\n\r\n    // Returns:  pair<iterator, bool> for a_uniq; iterator for a_eq\r\n    STATIC_ASSERT(std::is_same_v<decltype(am.insert(Traits::template construct_value<move_insertable>())),\r\n        std::conditional_t<(Traits::features & c_is_unique_associative) != 0,\r\n            std::pair<typename c_of_move_insertable::iterator, bool>, typename c_of_move_insertable::iterator>>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(ac.insert(value)),\r\n        std::conditional_t<(Traits::features & c_is_unique_associative) != 0,\r\n            std::pair<typename c_of_copy_insertable::iterator, bool>, typename c_of_copy_insertable::iterator>>);\r\n\r\n    // a.insert(p, t)\r\n    // Requires:  If t is a non-const rvalue expression, value_type shall be MoveInsertable into X;\r\n    // otherwise, value_type shall be CopyInsertable into X.\r\n    am.insert(am.begin(), Traits::template construct_value<move_insertable>());\r\n    ac.insert(ac.begin(), value);\r\n\r\n    // Returns:  iterator\r\n    STATIC_ASSERT(std::is_same_v<decltype(am.insert(am.begin(), Traits::template construct_value<move_insertable>())),\r\n        typename c_of_move_insertable::iterator>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(ac.insert(ac.begin(), value)), typename c_of_copy_insertable::iterator>);\r\n\r\n    // a.insert(i, j)\r\n    // Requires:  value_type shall be EmplaceConstructible into X from *i\r\n    c_of_emplace_constructible ea;\r\n    std::move_iterator<input_iterator<typename Traits::emplace_argument_type>> i;\r\n    ea.insert(i, i);\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(ea.insert(i, i)), void>);\r\n\r\n    // a.insert(il)\r\n    // void\r\n    // Equivalent to a.insert(il.begin(), il.end()).\r\n    ac.insert({value, value, value});\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(ac.insert({value, value, value})), void>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_ordered_associative_erase,\r\n{\r\n    // a.erase(k)\r\n    // [No Requires clause]\r\n    // Returns:  size_type\r\n    {\r\n        c_of_erasable a;\r\n        a.erase(erasable(key()));\r\n        STATIC_ASSERT(noexcept(a.erase(std::declval<erasable>()))); // strengthened\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.erase(erasable(key()))), typename c_of_erasable::size_type>);\r\n}\r\n\r\n// a.erase(q)\r\n// [No Requires clause]\r\n{\r\n    c_of_erasable a;\r\n    a.erase(a.begin());\r\n    STATIC_ASSERT(noexcept(a.erase(a.begin()))); // strengthened\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.erase(a.begin())), typename c_of_erasable::iterator>);\r\n}\r\n\r\n// a.erase(q1, q2)\r\n// [No Requires clause]\r\n{\r\n    c_of_erasable a;\r\n    a.erase(a.end(), a.end());\r\n    STATIC_ASSERT(noexcept(a.erase(a.end(), a.end()))); // strengthened\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.erase(a.end(), a.end())), typename c_of_erasable::iterator>);\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(test_ordered_associative_clear, {\r\n    // a.clear()\r\n    // [No Requires clause]\r\n    // Returns:  void\r\n    c_of_erasable a;\r\n    a.clear();\r\n    STATIC_ASSERT(noexcept(a.clear()));\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.clear()), void>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_ordered_associative_find, {\r\n    // a.find(k), a.count(k), a.lower_bound(k), a.upper_bound(k), a.equal_range(k)\r\n    // [No Requires clause]\r\n    c_of_erasable a;\r\n    c_of_erasable const b;\r\n\r\n    (void) a.find(erasable(key()));\r\n    (void) b.find(erasable(key()));\r\n\r\n    (void) a.count(erasable(key()));\r\n    (void) b.count(erasable(key()));\r\n\r\n    (void) a.lower_bound(erasable(key()));\r\n    (void) b.lower_bound(erasable(key()));\r\n\r\n    (void) a.upper_bound(erasable(key()));\r\n    (void) b.upper_bound(erasable(key()));\r\n\r\n    (void) a.equal_range(erasable(key()));\r\n    (void) b.equal_range(erasable(key()));\r\n\r\n    // a.find(k):  Returns:  iterator; const_iterator for constant a\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.find(erasable(key()))), typename c_of_erasable::iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.find(erasable(key()))), typename c_of_erasable::const_iterator>);\r\n\r\n    // a.count(k):  Returns:  size_type\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.count(erasable(key()))), typename c_of_erasable::size_type>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.count(erasable(key()))), typename c_of_erasable::size_type>);\r\n\r\n    // a.lower_bound(k):  Returns:  iterator; const_iterator for constant a\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.lower_bound(erasable(key()))), typename c_of_erasable::iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.lower_bound(erasable(key()))), typename c_of_erasable::const_iterator>);\r\n\r\n    // a.upper_bound(k):  Returns:  iterator; const_iterator for constant a\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.upper_bound(erasable(key()))), typename c_of_erasable::iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.upper_bound(erasable(key()))), typename c_of_erasable::const_iterator>);\r\n\r\n    // a.equal_range(k):  Returns pair<iterator, iterator>; pair<const_iterator, const_iterator>\r\n    // for constant a\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.equal_range(erasable(key()))),\r\n        std::pair<typename c_of_erasable::iterator, typename c_of_erasable::iterator>>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.equal_range(erasable(key()))),\r\n        std::pair<typename c_of_erasable::const_iterator, typename c_of_erasable::const_iterator>>);\r\n});\r\n\r\n\r\ntemplate <container_tag Tag, bool = (container_traits<Tag>::features & c_is_ordered_associative) != 0>\r\nstruct check_all_ordered_associative_requirements {\r\n    check_all_ordered_associative_requirements() {\r\n        test_ordered_associative_typedefs<Tag>();\r\n        test_ordered_associative_typedefs_for_maps<Tag>();\r\n        test_ordered_associative_default_constructor_with_comparator<Tag>();\r\n        test_ordered_associative_range_constructor_with_comparator<Tag>();\r\n        test_ordered_associative_initializer_list_assign<Tag>();\r\n        test_ordered_associative_comparators<Tag>();\r\n        test_ordered_associative_emplace<Tag>();\r\n        test_ordered_associative_insert<Tag>();\r\n        test_ordered_associative_erase<Tag>();\r\n        test_ordered_associative_clear<Tag>();\r\n        test_ordered_associative_find<Tag>();\r\n    }\r\n};\r\n\r\ntemplate <container_tag Tag>\r\nstruct check_all_ordered_associative_requirements<Tag, false> {};\r\n\r\n\r\n//\r\n//\r\n// UNORDERED ASSOCIATIVE CONTAINER REQUIREMENTS (23.2.5[unord.req]/Table 103)\r\n//\r\n//\r\n\r\nDEFINE_TEST(test_unordered_associative_typedefs, {\r\n    // X::key_type is Key\r\n    STATIC_ASSERT(std::is_same_v<typename c_of_erasable::key_type, erasable>);\r\n\r\n    // X::hasher is Hash\r\n    STATIC_ASSERT(std::is_same_v<typename c_of_erasable::hasher, faux_hash<erasable>>);\r\n\r\n    // X::key_equal is Pred\r\n    STATIC_ASSERT(std::is_same_v<typename c_of_erasable::key_equal, faux_compare<erasable>>);\r\n\r\n    // X::local_iterator is \"an iterator type whose category, value type, difference type, and\r\n    // pointer and reference types are the same as X::iterator's.\"\r\n    STATIC_ASSERT(std::is_same_v<typename std::iterator_traits<typename c_of_erasable::iterator>::iterator_category,\r\n        typename std::iterator_traits<typename c_of_erasable::local_iterator>::iterator_category>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<typename std::iterator_traits<typename c_of_erasable::iterator>::value_type,\r\n        typename std::iterator_traits<typename c_of_erasable::local_iterator>::value_type>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<typename std::iterator_traits<typename c_of_erasable::iterator>::difference_type,\r\n        typename std::iterator_traits<typename c_of_erasable::local_iterator>::difference_type>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<typename std::iterator_traits<typename c_of_erasable::iterator>::pointer,\r\n        typename std::iterator_traits<typename c_of_erasable::local_iterator>::pointer>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<typename std::iterator_traits<typename c_of_erasable::iterator>::reference,\r\n        typename std::iterator_traits<typename c_of_erasable::local_iterator>::reference>);\r\n\r\n    // X::const_local_iterator is \"an iterator type whose category, value type, difference type, and\r\n    // pointer and reference types are the same as X::const_iterator's.\"\r\n    STATIC_ASSERT(\r\n        std::is_same_v<typename std::iterator_traits<typename c_of_erasable::const_iterator>::iterator_category,\r\n            typename std::iterator_traits<typename c_of_erasable::const_local_iterator>::iterator_category>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<typename std::iterator_traits<typename c_of_erasable::const_iterator>::value_type,\r\n        typename std::iterator_traits<typename c_of_erasable::const_local_iterator>::value_type>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<typename std::iterator_traits<typename c_of_erasable::const_iterator>::difference_type,\r\n        typename std::iterator_traits<typename c_of_erasable::const_local_iterator>::difference_type>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<typename std::iterator_traits<typename c_of_erasable::const_iterator>::pointer,\r\n        typename std::iterator_traits<typename c_of_erasable::const_local_iterator>::pointer>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<typename std::iterator_traits<typename c_of_erasable::const_iterator>::reference,\r\n        typename std::iterator_traits<typename c_of_erasable::const_local_iterator>::reference>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_unordered_associative_typedefs_for_maps, {\r\n    // X::mapped_type is T\r\n    STATIC_ASSERT(std::is_same_v<typename c_of_erasable::mapped_type, erasable>);\r\n\r\n    // X::value_type is pair<const Key, T>\r\n    STATIC_ASSERT(std::is_same_v<typename c_of_erasable::value_type, std::pair<erasable const, erasable>>);\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_unordered_associative_typedefs_for_maps, tag_unordered_multiset);\r\nNOT_SUPPORTED_SPECIALIZATION(test_unordered_associative_typedefs_for_maps, tag_unordered_set);\r\n\r\n\r\nDEFINE_TEST(test_unordered_associative_default_constructors,\r\n{\r\n    // X(n, hf, eq) and X a(n, hf, eq)\r\n    // Requires:  hasher and key_equal are CopyConstructible.\r\n    {\r\n        typedef typename Traits::template bind_container<\r\n            erasable,\r\n            std::allocator<erasable>,\r\n            copy_constructible_hash<erasable>,\r\n            copy_constructible_compare<erasable>\r\n        >::type container_type;\r\n\r\n        copy_constructible_hash<erasable> const hf((key()));\r\n        copy_constructible_compare<erasable> const eq((key()));\r\n        (container_type(0, hf, eq));\r\n        container_type a(0, hf, eq);\r\n}\r\n\r\n// X(n, hf) and X a(n, hf)\r\n// Requires:  hasher is CopyConstructible and key_equal is DefaultConstructible\r\n{\r\n    typedef typename Traits::template bind_container<erasable, std::allocator<erasable>,\r\n        copy_constructible_hash<erasable>, default_constructible_compare<erasable>>::type container_type;\r\n\r\n    copy_constructible_hash<erasable> const hf((key()));\r\n    (container_type(0, hf));\r\n    container_type a(0, hf);\r\n}\r\n\r\n// X(n) and X a(n)\r\n// Requires:  hasher and key_equal are DefaultConstructible\r\n{\r\n    (c_of_erasable(0));\r\n    c_of_erasable a(0);\r\n}\r\n\r\n// X() and X a\r\n// Requires:  hasher and key_equal are DefaultConstructible\r\n{\r\n    (c_of_erasable());\r\n    c_of_erasable a;\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(test_unordered_associative_range_constructors, {\r\n    std::move_iterator<input_iterator<typename Traits::emplace_argument_type>> i;\r\n\r\n    // X(i, j, n, hf, eq) and X a(i, j, n, hf, eq)\r\n    // Requires:  hasher and key_equal are CopyConstructible.  value_type is EmplaceConstructible\r\n    // into X from *i.\r\n    {\r\n        typedef typename Traits::template bind_container<emplace_constructible, std::allocator<emplace_constructible>,\r\n            copy_constructible_hash<emplace_constructible>, copy_constructible_compare<emplace_constructible>>::type\r\n            container_type;\r\n\r\n        copy_constructible_hash<emplace_constructible> const hf((key()));\r\n        copy_constructible_compare<emplace_constructible> const eq((key()));\r\n        (container_type(i, i, 0, hf, eq));\r\n        container_type a(i, i, 0, hf, eq);\r\n    }\r\n\r\n    // X(i, j, n, hf) and X a(i, j, n, hf)\r\n    // Requires:  hasher is CopyConstructible and key_equal is DefaultConstructible.  value_type is\r\n    // EmplaceConstructible into X from *i.\r\n    {\r\n        typedef typename Traits::template bind_container<emplace_constructible, std::allocator<emplace_constructible>,\r\n            copy_constructible_hash<emplace_constructible>, default_constructible_compare<emplace_constructible>>::type\r\n            container_type;\r\n\r\n        copy_constructible_hash<emplace_constructible> const hf((key()));\r\n        (container_type(i, i, 0, hf));\r\n        container_type a(i, i, 0, hf);\r\n    }\r\n\r\n    // X(i, j, n) and X a(i, j, n)\r\n    // Requires:  hasher and key_equal are DefaultConstructible.  value_type is EmplaceConstructible\r\n    // into X from *i.\r\n    {\r\n        (c_of_emplace_constructible(i, i, 0));\r\n        c_of_emplace_constructible a(i, i, 0);\r\n    }\r\n\r\n    // X(i, j) and X a(i, j)\r\n    // Requires:  hasher and key_equal are DefaultConstructible.  value_type is EmplaceConstructible\r\n    // into X from *i.\r\n    {\r\n        (c_of_emplace_constructible(i, i));\r\n        c_of_emplace_constructible a(i, i);\r\n    }\r\n\r\n    // X(il)\r\n    // Equivalent to X(il.begin(), il.end()).\r\n    {\r\n        typename c_of_copy_insertable::value_type t = Traits::template construct_value<copy_insertable>();\r\n        c_of_copy_insertable({t, t, t});\r\n        c_of_copy_insertable a2({t, t, t});\r\n    }\r\n});\r\n\r\n\r\nDEFINE_TEST(test_unordered_associative_copy_constructor,\r\n    {\r\n        // X(b) and X a(b)\r\n        // [Implicitly requires that the hash function and predicate are CopyConstructible.]\r\n    });\r\n\r\n\r\nDEFINE_TEST(test_unordered_associative_find, {\r\n    // a.find(k), a.count(k), a.equal_range(k)\r\n    // [No Requires clause]\r\n    c_of_erasable a;\r\n    c_of_erasable const b;\r\n\r\n    (void) a.find(erasable(key()));\r\n    (void) b.find(erasable(key()));\r\n\r\n    (void) a.count(erasable(key()));\r\n    (void) b.count(erasable(key()));\r\n\r\n    (void) a.equal_range(erasable(key()));\r\n    (void) b.equal_range(erasable(key()));\r\n\r\n    // a.find(k):  Returns:  iterator; const_iterator for constant a\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.find(erasable(key()))), typename c_of_erasable::iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.find(erasable(key()))), typename c_of_erasable::const_iterator>);\r\n\r\n    // a.count(k):  Returns:  size_type\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.count(erasable(key()))), typename c_of_erasable::size_type>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.count(erasable(key()))), typename c_of_erasable::size_type>);\r\n\r\n    // a.equal_range(k):  Returns pair<iterator, iterator>; pair<const_iterator, const_iterator>\r\n    // for constant a\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.equal_range(erasable(key()))),\r\n        std::pair<typename c_of_erasable::iterator, typename c_of_erasable::iterator>>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.equal_range(erasable(key()))),\r\n        std::pair<typename c_of_erasable::const_iterator, typename c_of_erasable::const_iterator>>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_unordered_associative_buckets, {\r\n    c_of_erasable const b;\r\n\r\n    // b.bucket_count()\r\n    // [No Requires clause]\r\n    // Returns:  size_type\r\n    (void) b.bucket_count();\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.bucket_count()), typename c_of_erasable::size_type>);\r\n\r\n    // b.max_bucket_count()\r\n    // [No Requires clause]\r\n    // Returns:  size_type\r\n    (void) b.max_bucket_count();\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.max_bucket_count()), typename c_of_erasable::size_type>);\r\n\r\n    // b.bucket(k)\r\n    // [No Requires clause]\r\n    // Returns:  size_type\r\n    (void) b.bucket(erasable(key()));\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.bucket(erasable(key()))), typename c_of_erasable::size_type>);\r\n\r\n    // b.bucket_size(n)\r\n    // [No Requires clause]\r\n    // Returns:  size_type\r\n    (void) b.bucket_size(0);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.bucket_size(0)), typename c_of_erasable::size_type>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_unordered_associative_bucket_begin_end, {\r\n    // b.begin(n), b.end(n), b.cbegin(n), b.cend(n)\r\n    // [No Requires clause]\r\n    c_of_erasable a;\r\n    (void) a.begin(0);\r\n    (void) a.end(0);\r\n    (void) a.cbegin(0);\r\n    (void) a.cend(0);\r\n\r\n    c_of_erasable const b;\r\n    (void) b.begin(0);\r\n    (void) b.end(0);\r\n    (void) b.cbegin(0);\r\n    (void) b.cend(0);\r\n\r\n    // Returns:  local_iterator; const_local_iterator for const b and c{begin,end}()\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.begin()), typename c_of_erasable::local_iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.end()), typename c_of_erasable::local_iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.cbegin()), typename c_of_erasable::const_local_iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.cend()), typename c_of_erasable::const_local_iterator>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.begin()), typename c_of_erasable::const_local_iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.end()), typename c_of_erasable::const_local_iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.cbegin()), typename c_of_erasable::const_local_iterator>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.cend()), typename c_of_erasable::const_local_iterator>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_unordered_associative_load_factor, {\r\n    c_of_erasable a;\r\n    c_of_erasable const b;\r\n\r\n    // b.load_factor()\r\n    // [No Requires clause]\r\n    (void) b.load_factor();\r\n\r\n    // Returns:  float\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.load_factor()), float>);\r\n\r\n    // b.max_load_factor()\r\n    // [No Requires clause]\r\n    (void) b.max_load_factor();\r\n\r\n    // Returns:  float\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.max_load_factor()), float>);\r\n\r\n    // a.max_load_factor(z)\r\n    // [No Requires clause]\r\n    a.max_load_factor(1.0);\r\n\r\n    // Returns:  void\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.max_load_factor(1.0)), void>);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_unordered_associative_rehash, {\r\n    c_of_erasable a;\r\n\r\n    // a.rehash(n)\r\n    // [No Requires clause]\r\n    a.rehash(0);\r\n\r\n    // Returns:  void\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.rehash(0)), void>);\r\n\r\n    // a.reserve(n)\r\n    // [No Requires clause]\r\n    a.reserve(0);\r\n\r\n    // Returns:  void\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.reserve(0)), void>);\r\n});\r\n\r\n\r\ntemplate <container_tag Tag, bool = (container_traits<Tag>::features & c_is_unordered_associative) != 0>\r\nstruct check_all_unordered_associative_requirements {\r\n    check_all_unordered_associative_requirements() {\r\n        test_unordered_associative_typedefs<Tag>();\r\n        test_unordered_associative_typedefs_for_maps<Tag>();\r\n        test_unordered_associative_default_constructors<Tag>();\r\n        test_unordered_associative_range_constructors<Tag>();\r\n        test_unordered_associative_copy_constructor<Tag>();\r\n\r\n        // These operations are the same as their ordered counterparts\r\n        test_ordered_associative_initializer_list_assign<Tag>();\r\n        test_ordered_associative_emplace<Tag>();\r\n        test_ordered_associative_insert<Tag>();\r\n        test_ordered_associative_erase<Tag>();\r\n        test_ordered_associative_clear<Tag>();\r\n\r\n        test_unordered_associative_find<Tag>();\r\n        test_unordered_associative_buckets<Tag>();\r\n        test_unordered_associative_bucket_begin_end<Tag>();\r\n        test_unordered_associative_load_factor<Tag>();\r\n        test_unordered_associative_rehash<Tag>();\r\n    }\r\n};\r\n\r\ntemplate <container_tag Tag>\r\nstruct check_all_unordered_associative_requirements<Tag, false> {};\r\n\r\n\r\n//\r\n//\r\n// CONTAINER-SPECIFIC REQUIREMENTS (23.3[sequences], 23.4[associative], 23.5[unord]\r\n//\r\n// Whereas the tests above all verify container requirements specified in the Container Requirements\r\n// section of the specification (clause 23.2), the tests below verify container requirements\r\n// specified in the individual container specifications (in clauses 23.3, 23.4, and 23.5).  Tests\r\n// are only provided for operations for which the Requires clause is different or for operations\r\n// that are specific to the individual container (and are thus not tested in the above tests).\r\n//\r\n//\r\n\r\nDEFINE_TEST(test_specific_sequence_allocator_constructor, {\r\n    // explicit X(const Allocator& = Allocator());\r\n    // [No Requires clause]\r\n    //\r\n    // Applies to:  deque, forward_list, list, vector\r\n    c_of_erasable a((std::allocator<erasable>()));\r\n});\r\n\r\n\r\nDEFINE_TEST(test_specific_sequence_count_constructor_default, {\r\n    // explicit X(size_type n);\r\n    // Requires:  T shall be DefaultInsertable into X\r\n    //\r\n    // Applies to:  deque, forward_list, list, vector\r\n    c_of_default_constructible(1);\r\n    c_of_default_constructible a(1);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_specific_sequence_count_constructor_copy, {\r\n    // X(size_type n, const T& value, const Allocator& = Allocator())\r\n    // Requires:  T shall be CopyInsertable into X\r\n    //\r\n    // Applies to:  deque, forward_list, list, vector\r\n    c_of_copy_insertable a(1, copy_insertable(key()), std::allocator<copy_insertable>());\r\n});\r\n\r\n\r\nDEFINE_TEST(test_specific_sequence_range_constructor, {\r\n    // X(InputIterator first, InputIterator last, const Allocator& = Allocator());\r\n    // [No Requires clause]\r\n    //\r\n    // Applies to:  deque, forward_list, list, vector\r\n    //\r\n    // SPEC:  This has no Requires clause in any of the four Sequence container specifications.  It\r\n    // should have the same requirements as the Sequence Container range constructor that does not\r\n    // accept an allocator (the constructor of the form 'X(i, j)').\r\n    //\r\n    // That Requires clause states:  \"T shall be EmplaceConstructible into X from *i.  For vector,\r\n    // if the iterator does not meet the forward iterator requirements, T shall also be\r\n    // MoveInsertable into X.\"\r\n    std::move_iterator<input_iterator<emplace_argument>> const i;\r\n    c_of_emplace_constructible a(i, i, std::allocator<emplace_constructible>());\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(test_specific_sequence_range_constructor, tag_vector,\r\n{\r\n    // X(InputIterator first, InputIterator last, const Allocator& = Allocator());\r\n    // [See the primary test for comments.]\r\n    //\r\n    // Requires:  T shall be EmplaceConstructible into X from *i.  For vector, if the iterator does\r\n    // not meet the forward iterator requirements, T shall also be MoveInsertable into X.\r\n    {\r\n         std::move_iterator<forward_iterator<emplace_argument>> i;\r\n         c_of_emplace_constructible(i, i, std::allocator<emplace_constructible>());\r\n         c_of_emplace_constructible a(i, i, std::allocator<emplace_constructible>());\r\n}\r\n{\r\n    std::move_iterator<input_iterator<emplace_argument>> i;\r\n    c_of_ec_mi(i, i, std::allocator<ec_mi>());\r\n    c_of_ec_mi a(i, i, std::allocator<ec_mi>());\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(test_specific_common_list_operations,\r\n{\r\n    // void remove(const T& value);\r\n    // void remove_if(Predicate pred);\r\n    // [No Requires clause]\r\n    {\r\n        c_of_equality_comparable a;\r\n        c_of_erasable b;\r\n\r\n        a.remove(equality_comparable(key()));\r\n        b.remove_if(faux_predicate<erasable>());\r\n\r\n        // (C++20) Returns:  size_type\r\n        // (C++17) Returns:  void\r\n        using ret_type_a = std::conditional_t<_HAS_CXX20, typename c_of_equality_comparable::size_type, void>;\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.remove(equality_comparable(key()))), ret_type_a>);\r\n\r\n        // (C++20) Returns:  size_type\r\n        // (C++17) Returns:  void\r\n        using ret_type_b = std::conditional_t<_HAS_CXX20, typename c_of_erasable::size_type, void>;\r\n        STATIC_ASSERT(std::is_same_v<decltype(b.remove_if(faux_predicate<erasable>())), ret_type_b>);\r\n}\r\n\r\n// void unique();\r\n// void unique(BinaryPredicate pred);\r\n// [No Requires clause]\r\n//\r\n{\r\n    c_of_equality_comparable a;\r\n    c_of_erasable b;\r\n\r\n    a.unique();\r\n    b.unique(faux_compare<erasable>());\r\n\r\n    // (C++20) Returns:  size_type\r\n    // (C++17) Returns:  void\r\n    using ret_type_a = std::conditional_t<_HAS_CXX20, typename c_of_equality_comparable::size_type, void>;\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.unique()), ret_type_a>);\r\n\r\n    // (C++20) Returns:  size_type\r\n    // (C++17) Returns:  void\r\n    using ret_type_b = std::conditional_t<_HAS_CXX20, typename c_of_erasable::size_type, void>;\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.unique(faux_compare<erasable>())), ret_type_b>);\r\n}\r\n\r\n// void merge(forward_list& x);\r\n// void merge(forward_list&& x);\r\n// void merge(forward_list& x, Compare comp);\r\n// void merge(forward_list&& x, Compare comp);\r\n// [No relevant Requires clause]\r\n{\r\n    c_of_less_comparable a;\r\n    c_of_erasable b;\r\n\r\n    a.merge(a);\r\n    a.merge(c_of_less_comparable());\r\n\r\n    b.merge(b, faux_compare<erasable>());\r\n    b.merge(c_of_erasable(), faux_compare<erasable>());\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.merge(a)), void>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.merge(c_of_less_comparable())), void>);\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.merge(b, faux_compare<erasable>())), void>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.merge(c_of_erasable(), faux_compare<erasable>())), void>);\r\n}\r\n\r\n// void sort();\r\n// void sort(Compare comp);\r\n// [No relevant Requires clause]\r\n{\r\n    c_of_less_comparable a;\r\n    c_of_erasable b;\r\n    a.sort();\r\n    b.sort(faux_compare<erasable>());\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.sort()), void>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(b.sort(faux_compare<erasable>())), void>);\r\n}\r\n\r\n// void reverse();\r\n// [No Requires clause]\r\n{\r\n    c_of_erasable a;\r\n    a.reverse();\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(a.reverse()), void>);\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(test_specific_ordered_associative_constructors,\r\n{\r\n    // X(c, allocator)\r\n    // [No Requires clause]\r\n    //\r\n    // SPEC:  The Requires clause should be the same as the Requires clause for the equivalent\r\n    // constructor in the Associative requirements (sans-allocator).  That states:  \"Requires:\r\n    // key_compare is CopyConstructible.\"\r\n    {\r\n        typedef typename Traits::template bind_container<\r\n            erasable,\r\n            std::allocator<erasable>,\r\n            copy_constructible_compare<erasable>\r\n        >::type container_type;\r\n\r\n        copy_constructible_compare<erasable> const c((key()));\r\n        container_type a(c, std::allocator<typename Traits::template bind_value<erasable>::type>());\r\n}\r\n\r\n// X(i, j, c) and X a(i, j, c);\r\n// [No Requires clause]\r\n//\r\n// SPEC:  The Requires clause should be the same as the Requires clause for the equivalent\r\n// constructor in the Associative requirements (sans-allocator).  That states:  \"Requires:\r\n// key_compare is CopyConstructible.  value_type is EmplaceConstructible into X from *i.\"\r\n\r\n{\r\n    typedef typename Traits::template bind_container<emplace_constructible, std::allocator<emplace_constructible>,\r\n        copy_constructible_compare<emplace_constructible>>::type container_type;\r\n\r\n    copy_constructible_compare<emplace_constructible> const c((key()));\r\n    std::move_iterator<input_iterator<typename Traits::emplace_argument_type>> i;\r\n    (container_type(i, i, c));\r\n    container_type a(i, i, c);\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(test_specific_unordered_associative_constructors,\r\n{\r\n    // X(n, hf, eq, allocator)\r\n    // [No Requires clause]\r\n    //\r\n    // SPEC:  The Requires clause should be the same as the Requires clause for the equivalent\r\n    // constructor in the Unordered Associative requirements (sans-allocator).  That states:\r\n    // \"Requires:  hasher and key_equal are CopyConstructible.\"\r\n    {\r\n        typedef typename Traits::template bind_container<\r\n            erasable,\r\n            std::allocator<erasable>,\r\n            copy_constructible_hash<erasable>,\r\n            copy_constructible_compare<erasable>\r\n        >::type container_type;\r\n\r\n        copy_constructible_hash<erasable> const hf((key()));\r\n        copy_constructible_compare<erasable> const eq((key()));\r\n        (container_type(0, hf, eq, std::allocator<typename Traits::template bind_value<erasable>::type>()));\r\n        container_type a(0, hf, eq, std::allocator<typename Traits::template bind_value<erasable>::type>());\r\n}\r\n\r\n// X(i, j, n, hf, eq, allocator)\r\n//\r\n// SPEC:  The Requires clause should be the same as the Requires clause for the equivalent\r\n// constructor in the Unordered Associative requirements (sans-allocator).  That states:\r\n// \"Requires:  hasher and key_equal are CopyConstructible.  value_type is EmplaceConstructible\r\n// into X from *i.\"\r\n{\r\n    typedef typename Traits::template bind_container<emplace_constructible, std::allocator<emplace_constructible>,\r\n        copy_constructible_hash<emplace_constructible>, copy_constructible_compare<emplace_constructible>>::type\r\n        container_type;\r\n    std::move_iterator<input_iterator<typename Traits::emplace_argument_type>> i;\r\n\r\n    copy_constructible_hash<emplace_constructible> const hf((key()));\r\n    copy_constructible_compare<emplace_constructible> const eq((key()));\r\n    (container_type(\r\n        i, i, 0, hf, eq, std::allocator<typename Traits::template bind_value<emplace_constructible>::type>()));\r\n    container_type a(\r\n        i, i, 0, hf, eq, std::allocator<typename Traits::template bind_value<emplace_constructible>::type>());\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(check_all_specific_requirements, {});\r\n\r\nDEFINE_TEST_SPECIALIZATION(check_all_specific_requirements, tag_deque, {\r\n    test_specific_sequence_count_constructor_default<Tag>();\r\n    test_specific_sequence_count_constructor_copy<Tag>();\r\n    test_specific_sequence_range_constructor<Tag>();\r\n    test_specific_sequence_range_constructor<Tag>();\r\n\r\n    // assign() is verified in the Sequence Container requirements\r\n\r\n    // void resize(size_type sz);\r\n    // Requires:  T shall be MoveInsertable and DefaultInsertable into *this\r\n    {\r\n        c_of_dc_mi a;\r\n        a.resize(1);\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.resize(1)), void>);\r\n    }\r\n\r\n    // void resize(size_type sz, const T& c);\r\n    // Requires:  T shall be MoveInsertable and CopyInsertable into *this\r\n    {\r\n        c_of_copy_insertable a;\r\n        a.resize(1, copy_insertable(key()));\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.resize(1, copy_insertable(key()))), void>);\r\n    }\r\n\r\n    // void shrink_to_fit();\r\n    // Requires:  T shall be MoveInsertable into *this\r\n    {\r\n        c_of_move_insertable a;\r\n        a.shrink_to_fit();\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.shrink_to_fit()), void>);\r\n    }\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(check_all_specific_requirements, tag_forward_list, {\r\n    test_specific_sequence_count_constructor_default<Tag>();\r\n    test_specific_sequence_count_constructor_copy<Tag>();\r\n    test_specific_sequence_range_constructor<Tag>();\r\n    test_specific_sequence_range_constructor<Tag>();\r\n\r\n    // iterator before_begin();\r\n    // const_iterator before_begin() const;\r\n    // const_iterator cbefore_begin() const;\r\n    // [No Requires clause]\r\n    {\r\n        c_of_erasable a;\r\n        c_of_erasable const b;\r\n\r\n        (void) a.before_begin();\r\n        (void) b.before_begin();\r\n\r\n        (void) a.cbefore_begin();\r\n        (void) b.cbefore_begin();\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.before_begin()), typename c_of_erasable::iterator>);\r\n        STATIC_ASSERT(std::is_same_v<decltype(b.before_begin()), typename c_of_erasable::const_iterator>);\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.cbefore_begin()), typename c_of_erasable::const_iterator>);\r\n        STATIC_ASSERT(std::is_same_v<decltype(b.cbefore_begin()), typename c_of_erasable::const_iterator>);\r\n    }\r\n\r\n    // iterator insert_after(const_iterator position, const T& x);\r\n    // iterator insert_after(const_iterator position, T&& x);\r\n    // [No relevant Requires clause]\r\n    //\r\n    // SPEC: Should require T:CopyInsertable for lvalue, T:MoveInsertable for rvalue\r\n    {\r\n        c_of_copy_insertable a;\r\n        a.insert_after(a.cbefore_begin(), copy_insertable(key()));\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.insert_after(a.cbefore_begin(), copy_insertable(key()))),\r\n            typename c_of_copy_insertable::iterator>);\r\n\r\n        c_of_move_insertable b;\r\n        b.insert_after(b.cbefore_begin(), move_insertable(key()));\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(b.insert_after(b.cbefore_begin(), move_insertable(key()))),\r\n            typename c_of_move_insertable::iterator>);\r\n    }\r\n\r\n    // iterator insert_after(const_iterator position, size_type n, const T& x);\r\n    // [No relevant Requires clause]\r\n    //\r\n    // SPEC:  Should require T:CopyInsertable\r\n    {\r\n        c_of_copy_insertable a;\r\n        a.insert_after(a.cbefore_begin(), 1, copy_insertable(key()));\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.insert_after(a.cbefore_begin(), 1, copy_insertable(key()))),\r\n            typename c_of_copy_insertable::iterator>);\r\n    }\r\n\r\n    // iterator insert_after(const_iterator position, InputIterator first, InputIterator last);\r\n    // [No relevant Requires clause]\r\n    //\r\n    // SPEC:  Should require T:EmplaceConstructible into *this from *first.\r\n    {\r\n        std::move_iterator<input_iterator<emplace_argument>> i;\r\n        c_of_emplace_constructible a;\r\n        a.insert_after(a.cbefore_begin(), i, i);\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.insert_after(a.cbefore_begin(), i, i)),\r\n            typename c_of_emplace_constructible::iterator>);\r\n    }\r\n\r\n    // iterator insert_after(const_iterator position, initializer_list<T> il);\r\n    // [No relevant Requires clause]\r\n    //\r\n    // SPEC:  Should require T:CopyInsertable\r\n    {\r\n        copy_insertable t = key();\r\n        c_of_copy_insertable a;\r\n        a.insert_after(a.cbefore_begin(), {t, t, t});\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.insert_after(a.cbefore_begin(), {t, t, t})),\r\n            typename c_of_copy_insertable::iterator>);\r\n    }\r\n\r\n    // iterator emplace_after(const_iterator position, Args&&... args);\r\n    // [No relevant Requires clause]\r\n    //\r\n    // SPEC:  Should require T:EmplaceConstructible from args\r\n    {\r\n        c_of_emplace_constructible a;\r\n        a.emplace_after(a.cbefore_begin(), emplace_argument());\r\n        a.emplace_after(a.cbefore_begin(), emplace_argument(), emplace_argument());\r\n        a.emplace_after(a.cbefore_begin(), emplace_argument(), emplace_argument(), emplace_argument());\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.emplace_after(a.cbefore_begin(), emplace_argument())),\r\n            typename c_of_emplace_constructible::iterator>);\r\n    }\r\n\r\n    // iterator erase_after(const_iterator position);\r\n    // [No relevant Requires clause]\r\n    {\r\n        c_of_erasable a;\r\n        a.erase_after(a.cbefore_begin());\r\n        STATIC_ASSERT(noexcept(a.erase_after(a.cbefore_begin()))); // strengthened\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.erase_after(a.cbefore_begin())), typename c_of_erasable::iterator>);\r\n    }\r\n\r\n    // iterator erase_after(const_iterator position, const_iterator last);\r\n    // [No relevant Requires clause]\r\n    {\r\n        c_of_erasable a;\r\n        a.erase_after(a.cbefore_begin(), a.cbefore_begin());\r\n        STATIC_ASSERT(noexcept(a.erase_after(a.cbefore_begin(), a.cbefore_begin()))); // strengthened\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.erase_after(a.cbefore_begin(), a.cbefore_begin())),\r\n            typename c_of_erasable::iterator>);\r\n    }\r\n\r\n    // void resize(size_type sz);\r\n    // Requires:  T shall be DefaultInsertable into *this\r\n    {\r\n        c_of_default_constructible a;\r\n        a.resize(1);\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.resize(1)), void>);\r\n    }\r\n\r\n    // void resize(size_type sz, const value_type& c);\r\n    // Requires:  T shall be CopyInsertable into *this\r\n    {\r\n        c_of_copy_insertable a;\r\n        a.resize(1, copy_insertable(key()));\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.resize(1, copy_insertable(key()))), void>);\r\n    }\r\n\r\n    // void clear()\r\n    // [No Requires clause]\r\n    {\r\n        c_of_erasable a;\r\n        a.clear();\r\n        STATIC_ASSERT(noexcept(a.clear()));\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.clear()), void>);\r\n    }\r\n\r\n    // void splice_after(const_iterator position, forward_list& x);\r\n    // void splice_after(const_iterator position, forward_list&& x);\r\n    // [No Requires clause]\r\n    {\r\n        c_of_erasable a;\r\n        a.splice_after(a.cbefore_begin(), a);\r\n        STATIC_ASSERT(noexcept(a.splice_after(a.cbefore_begin(), a))); // strengthened\r\n        a.splice_after(a.cbefore_begin(), std::move(a));\r\n        STATIC_ASSERT(noexcept(a.splice_after(a.cbefore_begin(), std::move(a)))); // strengthened\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.splice_after(a.cbefore_begin(), a)), void>);\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.splice_after(a.cbefore_begin(), std::move(a))), void>);\r\n    }\r\n\r\n    // void splice_after(const_iterator position, forward_list& x, const_iterator i);\r\n    // void splice_after(const_iterator position, forward_list&& x, const_iterator i);\r\n    // [No relevant Requires clause]\r\n    {\r\n        c_of_erasable a;\r\n        a.splice_after(a.cbefore_begin(), a, a.cbefore_begin());\r\n        STATIC_ASSERT(noexcept(a.splice_after(a.cbefore_begin(), a, a.cbefore_begin()))); // strengthened\r\n        a.splice_after(a.cbefore_begin(), std::move(a), a.cbefore_begin());\r\n        STATIC_ASSERT(noexcept(a.splice_after(a.cbefore_begin(), std::move(a), a.cbefore_begin()))); // strengthened\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.splice_after(a.cbefore_begin(), a, a.cbefore_begin())), void>);\r\n\r\n        STATIC_ASSERT(\r\n            std::is_same_v<decltype(a.splice_after(a.cbefore_begin(), std::move(a), a.cbefore_begin())), void>);\r\n    }\r\n\r\n    // void splice_after(const_iterator position, forward_list& x, const_iterator first, const_iterator last);\r\n    // void splice_after(const_iterator position, forward_list&& x, const_iterator first, const_iterator last);\r\n    // [No relevant Requires clause]\r\n    {\r\n        c_of_erasable a;\r\n        a.splice_after(a.cbefore_begin(), a, a.cbefore_begin(), a.cbefore_begin());\r\n        STATIC_ASSERT(\r\n            noexcept(a.splice_after(a.cbefore_begin(), a, a.cbefore_begin(), a.cbefore_begin()))); // strengthened\r\n        a.splice_after(a.cbefore_begin(), std::move(a), a.cbefore_begin(), a.cbefore_begin());\r\n        STATIC_ASSERT(noexcept(\r\n            a.splice_after(a.cbefore_begin(), std::move(a), a.cbefore_begin(), a.cbefore_begin()))); // strengthened\r\n\r\n        STATIC_ASSERT(\r\n            std::is_same_v<decltype(a.splice_after(a.cbefore_begin(), a, a.cbefore_begin(), a.cbefore_begin())), void>);\r\n\r\n        STATIC_ASSERT(std::is_same_v<\r\n            decltype(a.splice_after(a.cbefore_begin(), std::move(a), a.cbefore_begin(), a.cbefore_begin())), void>);\r\n    }\r\n\r\n    test_specific_common_list_operations<Tag>();\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(check_all_specific_requirements, tag_list, {\r\n    test_specific_sequence_count_constructor_default<Tag>();\r\n    test_specific_sequence_count_constructor_copy<Tag>();\r\n    test_specific_sequence_range_constructor<Tag>();\r\n    test_specific_sequence_range_constructor<Tag>();\r\n\r\n    // assign() is verified in the Sequence Container requirements\r\n\r\n    // void resize(size_type sz);\r\n    // Requires:  T shall be DefaultInsertable into *this\r\n\r\n    // void resize(size_type sz, const T& c);\r\n    // Requires:  T shall be CopyInsertable into *this\r\n\r\n    // void splice(const_iterator position, list& x);\r\n    // void splice(const_iterator position, list&& x);\r\n    // [No Requires clause]\r\n    {\r\n        c_of_erasable a;\r\n        a.splice(a.begin(), a);\r\n        STATIC_ASSERT(!noexcept(a.splice(a.begin(), a))); // throws length_error\r\n        a.splice(a.begin(), std::move(a));\r\n        STATIC_ASSERT(!noexcept(a.splice(a.begin(), std::move(a)))); // throws length_error\r\n    }\r\n\r\n    // void splice(const_iterator position, list& x, const_iterator i);\r\n    // void splice(const_iterator position, list&& x, const_iterator i);\r\n    // [No relevant Requires clause]\r\n    {\r\n        c_of_erasable a;\r\n        a.splice(a.begin(), a, a.begin());\r\n        STATIC_ASSERT(!noexcept(a.splice(a.begin(), a, a.begin()))); // throws length_error\r\n        a.splice(a.begin(), std::move(a), a.begin());\r\n        STATIC_ASSERT(!noexcept(a.splice(a.begin(), std::move(a), a.begin()))); // throws length_error\r\n    }\r\n\r\n    // void splice(const_iterator position, list& x, const_iterator first, const_iterator last);\r\n    // void splice(const_iterator position, list&& x, const_iterator first, const_iterator last);\r\n    // [No relevant Requires clause]\r\n    {\r\n        c_of_erasable a;\r\n        a.splice(a.begin(), a, a.begin(), a.begin());\r\n        STATIC_ASSERT(!noexcept(a.splice(a.begin(), a, a.begin(), a.begin()))); // throws length_error\r\n        a.splice(a.begin(), std::move(a), a.begin(), a.begin());\r\n        STATIC_ASSERT(!noexcept(a.splice(a.begin(), std::move(a), a.begin(), a.begin()))); // throws length_error\r\n    }\r\n\r\n    test_specific_common_list_operations<Tag>();\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(check_all_specific_requirements, tag_vector, {\r\n    test_specific_sequence_count_constructor_default<Tag>();\r\n    test_specific_sequence_count_constructor_copy<Tag>();\r\n    test_specific_sequence_range_constructor<Tag>();\r\n    test_specific_sequence_range_constructor<Tag>();\r\n\r\n    // assign() is verified in the Sequence Container requirements\r\n\r\n    // size_type capacity() const;\r\n    // [No Requires clause]\r\n    {\r\n        c_of_erasable const a;\r\n        (void) a.capacity();\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.capacity()), typename c_of_erasable::size_type>);\r\n    }\r\n\r\n    // void reserve(size_type n); and void shrink_to_fit();\r\n    // Requires:  T shall be MoveInsertable into *this\r\n    {\r\n        c_of_move_insertable a;\r\n        a.reserve(1);\r\n        a.shrink_to_fit();\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.reserve(1)), void>);\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.shrink_to_fit()), void>);\r\n    }\r\n\r\n    // void resize(size_type sz);\r\n    // Requires:  T shall be MoveInsertable and DefaultInsertable into *this\r\n    {\r\n        c_of_dc_mi a;\r\n        a.resize(1);\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.resize(1)), void>);\r\n    }\r\n\r\n    // void resize(size_type sz, const T& c);\r\n    // Requires:  T shall be MoveInsertable into *this and CopyInsertable into *this\r\n    {\r\n        c_of_copy_insertable a;\r\n        a.resize(1, copy_insertable(key()));\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.resize(1, copy_insertable(key()))), void>);\r\n    }\r\n\r\n    // T* data(); and const T* data() const;\r\n    // [No Requires clause]\r\n    {\r\n        c_of_erasable a;\r\n        c_of_erasable const b;\r\n\r\n        (void) a.data();\r\n        (void) b.data();\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.data()), erasable*>);\r\n        STATIC_ASSERT(std::is_same_v<decltype(b.data()), erasable const*>);\r\n    }\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(check_all_specific_requirements, tag_map, {\r\n    test_specific_ordered_associative_constructors<Tag>();\r\n\r\n    // T& operator[](const key_type& x);\r\n    // Requires:  key_type shall be CopyInsertable and mapped_type shall be DefaultInsertable into\r\n    // *this\r\n    {\r\n        std::map<copy_insertable, default_constructible, faux_compare<copy_insertable>> a;\r\n\r\n        copy_insertable k((key()));\r\n        a[k];\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a[k]), default_constructible&>);\r\n    }\r\n\r\n    // T& operator[](key_type& x);\r\n    // Requires:  mapped_type shall be DefaultInsertable into *this\r\n    //\r\n    // SPEC:  Presumably this should also say \"key_type shall be MoveInsertable into *this,\" given\r\n    // the Effects clause.\r\n    {\r\n        std::map<move_insertable, default_constructible, faux_compare<move_insertable>> a;\r\n\r\n        a[move_insertable(key())];\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a[move_insertable(key())]), default_constructible&>);\r\n    }\r\n\r\n    // T& at(const key_type& x);\r\n    // const T& at(const key_type& x) const;\r\n    // [No Requires clause]\r\n    {\r\n        c_of_erasable a;\r\n        c_of_erasable const b;\r\n\r\n        (void) a.at(erasable(key()));\r\n        (void) b.at(erasable(key()));\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.at(erasable(key()))), erasable&>);\r\n        STATIC_ASSERT(std::is_same_v<decltype(b.at(erasable(key()))), erasable const&>);\r\n    }\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(\r\n    check_all_specific_requirements, tag_multimap, { test_specific_ordered_associative_constructors<Tag>(); });\r\n\r\nDEFINE_TEST_SPECIALIZATION(\r\n    check_all_specific_requirements, tag_multiset, { test_specific_ordered_associative_constructors<Tag>(); });\r\n\r\nDEFINE_TEST_SPECIALIZATION(\r\n    check_all_specific_requirements, tag_set, { test_specific_ordered_associative_constructors<Tag>(); });\r\n\r\nDEFINE_TEST_SPECIALIZATION(check_all_specific_requirements, tag_unordered_map, {\r\n    test_specific_unordered_associative_constructors<Tag>();\r\n\r\n    // mapped_type& operator[](const key_type& k);\r\n    // mapped_type& operator[](key_type&& k);\r\n    // Requires:  mapped_type shall be DefaultInsertable into *this.  For the first operator,\r\n    // key_type shall be CopyInsertable into *this.  For the second operator, key_type shall be\r\n    // MoveConstructible.\r\n    {\r\n        std::unordered_map<copy_insertable, default_constructible, faux_hash<copy_insertable>,\r\n            faux_compare<copy_insertable>>\r\n            a;\r\n\r\n        copy_insertable k((key()));\r\n        a[k];\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a[k]), default_constructible&>);\r\n\r\n        std::unordered_map<move_insertable, default_constructible, faux_hash<move_insertable>,\r\n            faux_compare<move_insertable>>\r\n            b;\r\n\r\n        b[move_insertable(key())];\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(b[move_insertable(key())]), default_constructible&>);\r\n    }\r\n\r\n    // mapped_type& at(const key_type& k);\r\n    // const mapped_type& at(const key_type& k) const;\r\n    // [No Requires clause]\r\n    {\r\n        c_of_erasable a;\r\n        c_of_erasable const b;\r\n\r\n        (void) a.at(erasable(key()));\r\n        (void) b.at(erasable(key()));\r\n\r\n        STATIC_ASSERT(std::is_same_v<decltype(a.at(erasable(key()))), erasable&>);\r\n        STATIC_ASSERT(std::is_same_v<decltype(b.at(erasable(key()))), erasable const&>);\r\n    }\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(check_all_specific_requirements, tag_unordered_multimap,\r\n    { test_specific_unordered_associative_constructors<Tag>(); });\r\n\r\nDEFINE_TEST_SPECIALIZATION(check_all_specific_requirements, tag_unordered_multiset,\r\n    { test_specific_unordered_associative_constructors<Tag>(); });\r\n\r\nDEFINE_TEST_SPECIALIZATION(\r\n    check_all_specific_requirements, tag_unordered_set, { test_specific_unordered_associative_constructors<Tag>(); });\r\n\r\n\r\n//\r\n//\r\n// TEST DRIVER\r\n//\r\n//\r\n\r\n// Ad hoc tests for exception specifications of std::vector<bool, Alloc> (LWG-3778)\r\ntemplate <class Alloc>\r\nvoid assert_vector_bool_noexcept_impl() {\r\n    using vec_bool = std::vector<bool, Alloc>;\r\n\r\n    constexpr bool nothrow_on_pocma = std::allocator_traits<Alloc>::propagate_on_container_move_assignment::value\r\n                                   || std::allocator_traits<Alloc>::is_always_equal::value;\r\n\r\n    STATIC_ASSERT(std::is_nothrow_default_constructible_v<vec_bool> == std::is_nothrow_default_constructible_v<Alloc>);\r\n    STATIC_ASSERT(std::is_nothrow_constructible_v<vec_bool, const Alloc&>);\r\n    STATIC_ASSERT(std::is_nothrow_move_constructible_v<vec_bool>);\r\n    STATIC_ASSERT(std::is_nothrow_move_assignable_v<vec_bool> == nothrow_on_pocma);\r\n    STATIC_ASSERT(std::is_nothrow_destructible_v<vec_bool>);\r\n\r\n    STATIC_ASSERT(noexcept(std::declval<vec_bool&>().swap(std::declval<vec_bool&>()))); // strengthened\r\n    STATIC_ASSERT(noexcept(std::swap(std::declval<vec_bool&>(), std::declval<vec_bool&>()))); // strengthened\r\n#if _HAS_CXX17\r\n    STATIC_ASSERT(std::is_nothrow_swappable_v<vec_bool>); // strengthened\r\n#endif // _HAS_CXX17\r\n}\r\n\r\nvoid assert_vector_bool_noexcept() {\r\n    assert_vector_bool_noexcept_impl<std::allocator<bool>>();\r\n    assert_vector_bool_noexcept_impl<pocma_allocator<bool>>();\r\n    assert_vector_bool_noexcept_impl<non_pocma_allocator<bool>>();\r\n}\r\n\r\n// Also test LWG-4140 \"Useless default constructors for bit reference types\" for vector<bool, Alloc>::reference.\r\nnamespace lwg_4140 {\r\n    struct default_constructible_type {};\r\n\r\n    void test_default_constructor(default_constructible_type) {}\r\n    void test_default_constructor(std::vector<bool>::reference) {}\r\n    void test_default_constructor(std::vector<bool, pocma_allocator<bool>>::reference) {}\r\n    void test_default_constructor(std::vector<bool, non_pocma_allocator<bool>>::reference) {}\r\n#if _HAS_CXX17\r\n    void test_default_constructor(std::pmr::vector<bool>::reference) {}\r\n#endif // _HAS_CXX17\r\n\r\n    void test() {\r\n        test_default_constructor({});\r\n    }\r\n} // namespace lwg_4140\r\n\r\ntemplate <container_tag Tag>\r\nvoid assert_container() {\r\n    check_all_container_requirements<Tag>();\r\n    check_all_reversible_requirements<Tag>();\r\n    check_all_optional_container_requirements<Tag>();\r\n    check_all_allocator_aware_requirements<Tag>();\r\n\r\n    check_all_sequence_requirements<Tag>();\r\n    check_all_optional_sequence_requirements<Tag>();\r\n\r\n    check_all_ordered_associative_requirements<Tag>();\r\n\r\n    check_all_unordered_associative_requirements<Tag>();\r\n\r\n    check_all_specific_requirements<Tag>();\r\n}\r\n\r\n// MapLike<K, V&> is squirrelly, but appears to be permitted.\r\ntemplate <template <class...> class MapLike>\r\nvoid check_reference_as_mapped_type() {\r\n    double dbl = 3.14;\r\n\r\n    MapLike<int, double&> ml;\r\n    ml.emplace(10, dbl);\r\n\r\n    STATIC_ASSERT(std::is_same_v<decltype(ml.find(10)->second), double&>);\r\n}\r\n\r\nvoid assert_all() {\r\n    assert_container<tag_deque>();\r\n    assert_container<tag_forward_list>();\r\n    assert_container<tag_list>();\r\n    assert_container<tag_vector>();\r\n\r\n    assert_container<tag_map>();\r\n    assert_container<tag_multimap>();\r\n    assert_container<tag_multiset>();\r\n    assert_container<tag_set>();\r\n\r\n    assert_container<tag_unordered_map>();\r\n    assert_container<tag_unordered_multimap>();\r\n    assert_container<tag_unordered_multiset>();\r\n    assert_container<tag_unordered_set>();\r\n\r\n    check_reference_as_mapped_type<std::map>();\r\n    check_reference_as_mapped_type<std::multimap>();\r\n    check_reference_as_mapped_type<std::unordered_map>();\r\n    check_reference_as_mapped_type<std::unordered_multimap>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0447546_facet_allocation/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0447546_facet_allocation/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING\r\n\r\n#include <cassert>\r\n#include <codecvt>\r\n#include <locale>\r\n#include <new>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\n\r\nvoid* weird_malloc(size_t n) {\r\n    void* p = malloc(n + 128);\r\n\r\n    assert(p);\r\n\r\n    unsigned char* q = static_cast<unsigned char*>(p);\r\n\r\n    for (size_t i = 0; i < n + 128; ++i) {\r\n        *q = 0xCC;\r\n    }\r\n\r\n    return q + 128;\r\n}\r\n\r\nvoid weird_free(void* p) {\r\n    if (p) {\r\n        free(static_cast<unsigned char*>(p) - 128);\r\n    }\r\n}\r\n\r\nvoid* operator new(size_t n) {\r\n    return weird_malloc(n);\r\n}\r\n\r\nvoid* operator new(size_t n, const nothrow_t&) noexcept {\r\n    return weird_malloc(n);\r\n}\r\n\r\nvoid* operator new[](size_t n) {\r\n    return weird_malloc(n);\r\n}\r\n\r\nvoid* operator new[](size_t n, const nothrow_t&) noexcept {\r\n    return weird_malloc(n);\r\n}\r\n\r\nvoid operator delete(void* p) noexcept {\r\n    weird_free(p);\r\n}\r\n\r\nvoid operator delete(void* p, const nothrow_t&) noexcept {\r\n    weird_free(p);\r\n}\r\n\r\nvoid operator delete[](void* p) noexcept {\r\n    weird_free(p);\r\n}\r\n\r\nvoid operator delete[](void* p, const nothrow_t&) noexcept {\r\n    weird_free(p);\r\n}\r\n\r\nint main() {\r\n    wstring_convert<codecvt_utf8_utf16<wchar_t>> conv;\r\n\r\n    const wstring utf16(L\"\\xD835\\xDF0D\");\r\n    const string utf8(\"\\xF0\\x9D\\x9C\\x8D\");\r\n\r\n    assert(conv.to_bytes(utf16) == utf8);\r\n    assert(conv.from_bytes(utf8) == utf16);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0483851_vector_debug_allocator_use/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0483851_vector_debug_allocator_use/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <list>\r\n#include <map>\r\n#include <set>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <vector>\r\n\r\n// Regression test for DevDiv-483851 : [C++11] STL containers must use std::allocator_traits in debug mode\r\n\r\ntemplate <typename T, typename Base>\r\nstruct simple_allocator : Base {\r\n    typedef T value_type;\r\n\r\n    simple_allocator() {}\r\n\r\n    template <typename U, typename UB>\r\n    simple_allocator(simple_allocator<U, UB> const&) {}\r\n\r\n    value_type* allocate(std::size_t n) {\r\n        return static_cast<value_type*>(malloc(n * sizeof(value_type)));\r\n    }\r\n\r\n    void deallocate(value_type* p, std::size_t) {\r\n        free(p);\r\n    }\r\n};\r\n\r\ntemplate <typename T, typename TB, typename U, typename UB>\r\nbool operator==(simple_allocator<T, TB> const&, simple_allocator<U, UB> const&) {\r\n    return true;\r\n}\r\n\r\ntemplate <typename T, typename TB, typename U, typename UB>\r\nbool operator!=(simple_allocator<T, TB> const&, simple_allocator<U, UB> const&) {\r\n    return false;\r\n}\r\n\r\nstruct empty_base {};\r\nstruct nonempty_base {\r\n    int x;\r\n};\r\n\r\n// Ensure that we can instantiate all of the containers with this minimal allocator:\r\nnamespace std {\r\n    // deque\r\n    template class deque<int, simple_allocator<int, empty_base>>;\r\n    template class deque<int, simple_allocator<int, nonempty_base>>;\r\n\r\n    // forward_list\r\n    template class forward_list<int, simple_allocator<int, empty_base>>;\r\n    template class forward_list<int, simple_allocator<int, nonempty_base>>;\r\n\r\n    // list\r\n    template class list<int, simple_allocator<int, empty_base>>;\r\n    template class list<int, simple_allocator<int, nonempty_base>>;\r\n\r\n    // map\r\n    template class map<int, int, less<int>, simple_allocator<pair<int const, int>, empty_base>>;\r\n    template class map<int, int, less<int>, simple_allocator<pair<int const, int>, nonempty_base>>;\r\n\r\n    // multimap\r\n    template class multimap<int, int, less<int>, simple_allocator<pair<int const, int>, empty_base>>;\r\n    template class multimap<int, int, less<int>, simple_allocator<pair<int const, int>, nonempty_base>>;\r\n\r\n    // multiset\r\n    template class multiset<int, less<int>, simple_allocator<int, empty_base>>;\r\n    template class multiset<int, less<int>, simple_allocator<int, nonempty_base>>;\r\n\r\n    // set\r\n    template class set<int, less<int>, simple_allocator<int, empty_base>>;\r\n    template class set<int, less<int>, simple_allocator<int, nonempty_base>>;\r\n\r\n    // unordered_map\r\n    template class unordered_map<int, int, hash<int>, equal_to<int>,\r\n        simple_allocator<pair<int const, int>, empty_base>>;\r\n    template class unordered_map<int, int, hash<int>, equal_to<int>,\r\n        simple_allocator<pair<int const, int>, nonempty_base>>;\r\n\r\n    // unordered_multimap\r\n    template class unordered_multimap<int, int, hash<int>, equal_to<int>,\r\n        simple_allocator<pair<int const, int>, empty_base>>;\r\n    template class unordered_multimap<int, int, hash<int>, equal_to<int>,\r\n        simple_allocator<pair<int const, int>, nonempty_base>>;\r\n\r\n    // unordered_multiset\r\n    template class unordered_multiset<int, hash<int>, equal_to<int>, simple_allocator<int, empty_base>>;\r\n    template class unordered_multiset<int, hash<int>, equal_to<int>, simple_allocator<int, nonempty_base>>;\r\n\r\n    // unordered_set\r\n    template class unordered_set<int, hash<int>, equal_to<int>, simple_allocator<int, empty_base>>;\r\n    template class unordered_set<int, hash<int>, equal_to<int>, simple_allocator<int, nonempty_base>>;\r\n\r\n    // vector\r\n    template class vector<int, simple_allocator<int, empty_base>>;\r\n    template class vector<int, simple_allocator<int, nonempty_base>>;\r\n\r\n    // vector<bool>\r\n    template class vector<bool, simple_allocator<bool, empty_base>>;\r\n    template class vector<bool, simple_allocator<bool, nonempty_base>>;\r\n} // namespace std\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0485243_condition_variable_crash/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0485243_condition_variable_crash/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <chrono>\r\n#include <condition_variable>\r\n#include <crtdbg.h>\r\n#include <cstdlib>\r\n#include <functional>\r\n#include <list>\r\n#include <mutex>\r\n#include <thread>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nvoid assert_no_leaks() {\r\n#ifdef _DEBUG\r\n    if (_CrtDumpMemoryLeaks()) {\r\n        abort();\r\n    }\r\n#endif\r\n}\r\n\r\nvoid test_DevDiv_484720();\r\n\r\nint main() {\r\n    // DevDiv-452211 \"<thread>: init_at_thread_exit_mutex() creates a spurious memory leak\"\r\n    assert_no_leaks();\r\n\r\n    {\r\n        thread t([]() {});\r\n        t.join();\r\n    }\r\n\r\n    assert_no_leaks();\r\n\r\n    {\r\n        thread t1([]() {});\r\n        thread t2([]() {});\r\n        t1.join();\r\n        t2.join();\r\n    }\r\n\r\n    assert_no_leaks();\r\n\r\n    {\r\n        once_flag flag;\r\n        call_once(flag, []() {});\r\n    }\r\n\r\n    assert_no_leaks();\r\n\r\n    {\r\n        // DevDiv-485243 \"Crash in runtime library (msvcr110.dll)\"\r\n        condition_variable cv;\r\n        mutex m;\r\n\r\n        for (int k = 0; k < 100; ++k) {\r\n            vector<thread> v;\r\n\r\n            for (int i = 0; i < 16; ++i) {\r\n                v.emplace_back([&cv, &m]() {\r\n                    unique_lock<mutex> l(m);\r\n\r\n                    for (int c = 0; c < 100; ++c) {\r\n                        (void) cv.wait_for(l, chrono::milliseconds(1));\r\n                        cv.notify_one();\r\n                    }\r\n                });\r\n            }\r\n\r\n            for (auto& t : v) {\r\n                t.join();\r\n            }\r\n        }\r\n    }\r\n\r\n    assert_no_leaks();\r\n\r\n    test_DevDiv_484720();\r\n\r\n    assert_no_leaks();\r\n\r\n    {\r\n        // DevDiv-861298 \"std::thread not fully initialized due to _Thr_set_null only setting id (not handle)\"\r\n\r\n        // native_handle()'s behavior is unspecified, but CreateThread() and _beginthreadex()\r\n        // return null for failure, so this seems like a reasonable default.\r\n\r\n        thread t;\r\n\r\n        assert(t.native_handle() == nullptr);\r\n    }\r\n\r\n    assert_no_leaks();\r\n}\r\n\r\n\r\n// DevDiv-484720 \"<condition_variable>: [c++std-lib-32966] Public service announcement concerning\r\n// ~condition_variable_any()\"\r\n\r\ntemplate <typename T>\r\nclass locked_list {\r\nprivate:\r\n    mutex mut_;\r\n    list<T> list_;\r\n\r\npublic:\r\n    typedef typename list<T>::iterator iterator;\r\n    typedef typename T::key key;\r\n\r\n    template <typename... Args>\r\n    void emplace_back(Args&&... args) {\r\n        list_.emplace_back(forward<Args>(args)...);\r\n    }\r\n\r\n    iterator find(const key& k) {\r\n        unique_lock<mutex> lk(mut_);\r\n\r\n        for (;;) {\r\n            iterator ep = std::find(list_.begin(), list_.end(), k);\r\n\r\n            if (ep == list_.end()) {\r\n                return ep;\r\n            }\r\n\r\n            if (!ep->busy()) {\r\n                ep->set_busy();\r\n                return ep;\r\n            }\r\n\r\n            ep->wait(lk);\r\n        }\r\n    }\r\n\r\n    void erase(iterator i) {\r\n        lock_guard<mutex> _(mut_);\r\n        assert(i->busy());\r\n        i->notify_all();\r\n        list_.erase(i);\r\n    }\r\n\r\n    iterator end() {\r\n        return list_.end();\r\n    }\r\n};\r\n\r\ntemplate <typename Key>\r\nclass elt {\r\nprivate:\r\n    Key key_;\r\n    condition_variable_any notbusy_;\r\n    bool busy_;\r\n\r\npublic:\r\n    typedef Key key;\r\n\r\n    explicit elt(const Key& k) : key_(k), busy_(false) {}\r\n\r\n    bool busy() const {\r\n        return busy_;\r\n    }\r\n    void set_busy() {\r\n        busy_ = true;\r\n    }\r\n    template <typename Lock>\r\n    void wait(Lock& lk) {\r\n        notbusy_.wait(lk);\r\n    }\r\n    void notify_all() {\r\n        notbusy_.notify_all();\r\n    }\r\n    bool operator==(const Key& k) const {\r\n        return key_ == k;\r\n    }\r\n};\r\n\r\nvoid f2(locked_list<elt<int>>& lst) {\r\n    auto i = lst.find(1);\r\n    assert(i == lst.end());\r\n}\r\n\r\nvoid test_DevDiv_484720() {\r\n    locked_list<elt<int>> lst;\r\n    lst.emplace_back(1);\r\n\r\n    auto i = lst.find(1);\r\n    assert(i != lst.end());\r\n\r\n    thread t2(f2, ref(lst));\r\n    this_thread::sleep_for(chrono::milliseconds(500));\r\n\r\n    lst.erase(i);\r\n\r\n    t2.join();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0493504_error_category_lifetime/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/D_STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS=0\"\r\n*\tPM_CL=\"/D_STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS=1\"\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0493504_error_category_lifetime/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Intentionally declare variables of these names before the inclusion of standard headers. See LWG-3629.\r\nstruct InvalidFunctor {\r\n    template <class T>\r\n    void operator()(T&&) const = delete;\r\n};\r\n\r\nInvalidFunctor make_error_code{};\r\nInvalidFunctor make_error_condition{};\r\n\r\n#include <cassert>\r\n#include <cctype>\r\n#include <ios>\r\n#include <system_error>\r\n#include <type_traits>\r\n\r\n#ifndef _M_CEE_PURE\r\n#include <future>\r\n#endif // _M_CEE_PURE\r\n\r\n#pragma warning(push) // TRANSITION, OS-23694920\r\n#pragma warning(disable : 4668) // 'MEOW' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'\r\n#include <Windows.h>\r\n#pragma warning(pop)\r\n\r\nusing namespace std;\r\n\r\nstruct Global {\r\n    ~Global() {\r\n        (void) generic_category().name();\r\n        (void) iostream_category().name();\r\n        (void) system_category().name();\r\n\r\n#ifndef _M_CEE_PURE\r\n        (void) future_category().name();\r\n#endif // _M_CEE_PURE\r\n    }\r\n};\r\n\r\nGlobal global;\r\n\r\n// Also test LWG-3598: system_category().default_error_condition(0) has a generic category.\r\nvoid test_lwg_3598() {\r\n    error_condition cond = system_category().default_error_condition(0);\r\n\r\n    assert(cond.category() == generic_category());\r\n    assert(cond.message() == \"success\");\r\n    assert(cond.value() == 0);\r\n\r\n    assert(error_code() == error_condition());\r\n}\r\n\r\n// Also test GH-2572: WAIT_TIMEOUT is not matched against by std::errc::timed_out\r\nvoid test_gh_2572() {\r\n    using std::make_error_code;\r\n    using std::make_error_condition;\r\n\r\n    assert((errc::timed_out == error_code{WAIT_TIMEOUT, system_category()}));\r\n    assert((make_error_condition(errc::timed_out) == error_code{WAIT_TIMEOUT, system_category()}));\r\n\r\n    assert((errc::timed_out == error_code{ERROR_TIMEOUT, system_category()}));\r\n    assert((make_error_condition(errc::timed_out) == error_code{ERROR_TIMEOUT, system_category()}));\r\n\r\n    assert((errc::timed_out == error_code{ERROR_SEM_TIMEOUT, system_category()}));\r\n    assert((make_error_condition(errc::timed_out) == error_code{ERROR_SEM_TIMEOUT, system_category()}));\r\n}\r\n\r\n// Also test GH-2893 <system_error>: Several Windows system errors are not mapped\r\nvoid test_gh_2893() {\r\n    using std::make_error_code;\r\n    using std::make_error_condition;\r\n\r\n    assert((errc::filename_too_long == error_code{ERROR_FILENAME_EXCED_RANGE, system_category()}));\r\n    assert(\r\n        (make_error_condition(errc::filename_too_long) == error_code{ERROR_FILENAME_EXCED_RANGE, system_category()}));\r\n\r\n    assert((errc::no_such_file_or_directory == error_code{ERROR_BAD_NET_NAME, system_category()}));\r\n    assert(\r\n        (make_error_condition(errc::no_such_file_or_directory) == error_code{ERROR_BAD_NET_NAME, system_category()}));\r\n}\r\n\r\n// Also test LWG-3629 make_error_code and make_error_condition are customization points\r\nnamespace test_ns {\r\n    struct friendly_error {\r\n        friend error_code make_error_code(friendly_error) {\r\n            return error_code{};\r\n        }\r\n\r\n        friend error_condition make_error_condition(friendly_error) {\r\n            return error_condition{};\r\n        }\r\n    };\r\n\r\n    struct converted_errc : enable_if<false> { // std is an associated namespace of this type\r\n        operator errc() const {\r\n            return errc{};\r\n        }\r\n    };\r\n\r\n    struct converted_io_errc : enable_if<false> { // std is an associated namespace of this type\r\n        operator io_errc() const {\r\n            return io_errc{};\r\n        }\r\n    };\r\n} // namespace test_ns\r\n\r\ntemplate <>\r\nstruct is_error_code_enum<test_ns::friendly_error> : true_type {};\r\n\r\ntemplate <>\r\nstruct is_error_code_enum<test_ns::converted_io_errc> : true_type {};\r\n\r\ntemplate <>\r\nstruct is_error_condition_enum<test_ns::friendly_error> : true_type {};\r\n\r\ntemplate <>\r\nstruct is_error_condition_enum<test_ns::converted_errc> : true_type {};\r\n\r\nvoid test_lwg_3629() {\r\n#ifndef _M_CEE_PURE\r\n    error_code err_future{future_errc{}};\r\n    (void) err_future;\r\n#endif // _M_CEE_PURE\r\n    error_code err_io{io_errc{}};\r\n    (void) err_io;\r\n    error_condition errcond{errc{}};\r\n    (void) errcond;\r\n\r\n    error_code ec_friendly{test_ns::friendly_error{}};\r\n    (void) ec_friendly;\r\n    error_code ec_converted_io{test_ns::converted_io_errc{}};\r\n    (void) ec_converted_io;\r\n    error_condition econd_friendly{test_ns::friendly_error{}};\r\n    (void) econd_friendly;\r\n    error_condition econd_converted{test_ns::converted_errc{}};\r\n    (void) econd_converted;\r\n}\r\n\r\nint main() {\r\n    using std::make_error_code;\r\n    using std::make_error_condition;\r\n\r\n    // Also test DevDiv-781294 \"<system_error>: Visual C++ 2013 RC system_category().equivalent function does not work\".\r\n    const error_code code(ERROR_NOT_ENOUGH_MEMORY, system_category());\r\n\r\n    const error_condition cond = make_error_condition(errc::not_enough_memory);\r\n\r\n    assert(code == cond);\r\n\r\n    assert(system_category().equivalent(ERROR_NOT_ENOUGH_MEMORY, cond));\r\n\r\n    assert(system_category().default_error_condition(ERROR_DIR_NOT_EMPTY)\r\n           == make_error_condition(errc::directory_not_empty));\r\n\r\n    // Also test VSO-649432 <system_error> system_category().message() ends with extra newlines\r\n    const auto msg = code.message();\r\n    assert(!msg.empty() && msg.back() != '\\0' && !isspace(static_cast<unsigned char>(msg.back())));\r\n\r\n    test_lwg_3598();\r\n    test_lwg_3629();\r\n\r\n    test_gh_2572();\r\n    test_gh_2893();\r\n}\r\n\r\n\r\n// Also test DevDiv-833886 \"<system_error>: comparisons should be free functions\".\r\nbool test_code(const io_errc l, const error_code& r) {\r\n    return l == r && l != r && l < r;\r\n}\r\n\r\nbool test_condition(const errc l, const error_condition& r) {\r\n    return l == r && l != r && l < r;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0494593_time_put_wchar_t/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0494593_time_put_wchar_t/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <ctime>\r\n#include <iterator>\r\n#include <locale>\r\n#include <sstream>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    const tm t = []() -> tm {\r\n        tm ret = {};\r\n\r\n        ret.tm_sec   = 57;\r\n        ret.tm_min   = 42;\r\n        ret.tm_hour  = 20;\r\n        ret.tm_mday  = 28;\r\n        ret.tm_mon   = 3;\r\n        ret.tm_year  = 108;\r\n        ret.tm_wday  = 1;\r\n        ret.tm_yday  = 118;\r\n        ret.tm_isdst = 0;\r\n\r\n        return ret;\r\n    }();\r\n\r\n    {\r\n        const locale l;\r\n\r\n        basic_string<char> s(15, 'x');\r\n\r\n        basic_stringstream<char> ss;\r\n\r\n        const char fill = ' ';\r\n\r\n        const char pattern[] = \"%Y.%m.%d\";\r\n\r\n        const basic_string<char>::iterator ret = use_facet<time_put<char, basic_string<char>::iterator>>(l).put(\r\n            s.begin(), ss, fill, &t, begin(pattern), end(pattern));\r\n\r\n        assert(ret == s.begin() + 11);\r\n\r\n        const basic_string<char> correct(\"2008.04.28\\0xxxx\", 15);\r\n\r\n        assert(s == correct);\r\n    }\r\n\r\n    {\r\n        const locale l;\r\n\r\n        basic_string<wchar_t> s(15, L'x');\r\n\r\n        basic_stringstream<wchar_t> ss;\r\n\r\n        const wchar_t fill = L' ';\r\n\r\n        const wchar_t pattern[] = L\"%Y.%m.%d\";\r\n\r\n        const basic_string<wchar_t>::iterator ret =\r\n            use_facet<time_put<wchar_t, basic_string<wchar_t>::iterator>>(l).put(\r\n                s.begin(), ss, fill, &t, begin(pattern), end(pattern));\r\n\r\n        assert(ret == s.begin() + 11);\r\n\r\n        const basic_string<wchar_t> correct(L\"2008.04.28\\0xxxx\", 15);\r\n\r\n        assert(s == correct);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0496153_locale_ctor/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0496153_locale_ctor/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <clocale>\r\n#include <cstdio>\r\n#include <exception>\r\n#include <locale>\r\n#include <sstream>\r\n\r\nusing namespace std;\r\n\r\n// Because std::string crosses the DLL boundary via overridden virtual functions,\r\n// we can test custom facets only when:\r\n// * linking statically, or\r\n// * linking dynamically with IDL set to its default value (so the user code and the DLL match).\r\n#ifdef _DEBUG\r\n#define DEFAULT_IDL 2\r\n#else\r\n#define DEFAULT_IDL 0\r\n#endif\r\n\r\n#if !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL\r\n#define TEST_CUSTOM_FACET 1\r\n#else\r\n#define TEST_CUSTOM_FACET 0\r\n#endif\r\n\r\n#if TEST_CUSTOM_FACET\r\nvoid test_Dev11_496153_locale_ctor_should_not_throw() noexcept {\r\n    const locale loc(setlocale(LC_ALL, nullptr));\r\n\r\n    (void) loc;\r\n}\r\n\r\nstruct comma_separator : numpunct<char> {\r\n    char do_decimal_point() const override {\r\n        return ',';\r\n    }\r\n};\r\n\r\nvoid test_VSO_159700_locale_should_support_user_defined_facets() {\r\n    stringstream str;\r\n    locale loc(str.getloc(), new comma_separator);\r\n    str.imbue(loc);\r\n    str << 1.5f;\r\n    assert(\"locale didn't support user-defined facets\" && str.str() == \"1,5\");\r\n}\r\n#endif // TEST_CUSTOM_FACET\r\n\r\nint main() {\r\n#if TEST_CUSTOM_FACET\r\n    test_Dev11_496153_locale_ctor_should_not_throw();\r\n    test_VSO_159700_locale_should_support_user_defined_facets();\r\n#endif // TEST_CUSTOM_FACET\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0532622_minmax_element/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0532622_minmax_element/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// N3485 25.4.7 [alg.min.max]\r\n\r\n// /21, min_element \"Returns: The first iterator i in the range [first,last) such that for any iterator j\r\n// in the range [first,last) the following corresponding conditions hold: !(*j < *i) or comp(*j, *i) == false.\r\n// Returns last if first == last.\"\r\n\r\n// /23, max_element \"Returns: The first iterator i in the range [first,last) such that for any iterator j\r\n// in the range [first,last) the following corresponding conditions hold: !(*i < *j) or comp(*i, *j) == false.\r\n// Returns last if first == last.\"\r\n\r\n// /25, minmax_element \"Returns: make_pair(first, first) if [first,last) is empty, otherwise make_pair(m, M),\r\n// where m is the first iterator in [first,last) such that no iterator in the range refers to a smaller element, and\r\n// where M is the last iterator in [first,last) such that no iterator in the range refers to a larger element.\"\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <iterator>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nvoid test_all_permutations(vector<int>& v) {\r\n    assert(is_sorted(v.begin(), v.end()));\r\n\r\n    do {\r\n        const auto first_smallest = find(v.begin(), v.end(), 11);\r\n        const auto first_largest  = find(v.begin(), v.end(), 33);\r\n        const auto last_largest   = find(v.rbegin(), v.rend(), 33).base() - 1;\r\n\r\n        assert(min_element(v.begin(), v.end()) == first_smallest);\r\n        assert(max_element(v.begin(), v.end()) == first_largest);\r\n        assert(minmax_element(v.begin(), v.end()) == make_pair(first_smallest, last_largest));\r\n    } while (next_permutation(v.begin(), v.end()));\r\n}\r\n\r\nint main() {\r\n    vector<int> v;\r\n\r\n    // Test 0 elements.\r\n    assert(min_element(v.begin(), v.end()) == v.begin());\r\n    assert(max_element(v.begin(), v.end()) == v.begin());\r\n    assert(minmax_element(v.begin(), v.end()) == make_pair(v.begin(), v.begin()));\r\n\r\n    // Test 1 element.\r\n    v.assign(1, 1729);\r\n    assert(min_element(v.begin(), v.end()) == v.begin());\r\n    assert(max_element(v.begin(), v.end()) == v.begin());\r\n    assert(minmax_element(v.begin(), v.end()) == make_pair(v.begin(), v.begin()));\r\n\r\n    // Test 2 elements: 11, 11\r\n    v.assign(2, 11);\r\n    assert(min_element(v.begin(), v.end()) == v.begin());\r\n    assert(max_element(v.begin(), v.end()) == v.begin());\r\n    assert(minmax_element(v.begin(), v.end()) == make_pair(v.begin(), v.begin() + 1));\r\n\r\n    // Test 2 elements: 22, 33\r\n    v[0] = 22;\r\n    v[1] = 33;\r\n    assert(min_element(v.begin(), v.end()) == v.begin());\r\n    assert(max_element(v.begin(), v.end()) == v.begin() + 1);\r\n    assert(minmax_element(v.begin(), v.end()) == make_pair(v.begin(), v.begin() + 1));\r\n\r\n    // Test 2 elements: 55, 44\r\n    v[0] = 55;\r\n    v[1] = 44;\r\n    assert(min_element(v.begin(), v.end()) == v.begin() + 1);\r\n    assert(max_element(v.begin(), v.end()) == v.begin());\r\n    assert(minmax_element(v.begin(), v.end()) == make_pair(v.begin() + 1, v.begin()));\r\n\r\n    // Test 9 elements.\r\n    v.clear();\r\n    v.insert(v.end(), 3, 11);\r\n    v.insert(v.end(), 3, 22);\r\n    v.insert(v.end(), 3, 33);\r\n    test_all_permutations(v);\r\n\r\n    // Test 10 elements.\r\n    v.clear();\r\n    v.insert(v.end(), 3, 11);\r\n    v.insert(v.end(), 4, 22);\r\n    v.insert(v.end(), 3, 33);\r\n    test_all_permutations(v);\r\n\r\n    { // Original repro.\r\n        const int data[] = {1, 2, 3, 9, 3, 3, 3, 4, 5, 0, 0, 6, 7, 8, 9, 9, 9};\r\n\r\n        assert(min_element(begin(data), end(data)) == begin(data) + 9);\r\n        assert(max_element(begin(data), end(data)) == begin(data) + 3);\r\n        assert(minmax_element(begin(data), end(data)) == make_pair(begin(data) + 9, begin(data) + 16));\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0535636_functional_overhaul/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0535636_functional_overhaul/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _HAS_DEPRECATED_ADAPTOR_TYPEDEFS 1\r\n#define _HAS_DEPRECATED_RESULT_OF        1\r\n#define _SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING\r\n#define _SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING\r\n\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <functional>\r\n#include <memory>\r\n#include <string>\r\n#include <type_traits>\r\n#include <typeinfo>\r\n#include <utility>\r\n\r\n#if _HAS_CXX17\r\n#include <string_view>\r\nusing string_or_view = std::string_view;\r\n#else\r\nusing string_or_view = std::string;\r\n#endif\r\n\r\nusing namespace std;\r\nusing namespace std::placeholders;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n// N3936 20.10.7.5 [meta.trans.ptr]:\r\n// Template:\r\n// template <class T> struct remove_pointer;\r\n\r\n// Comments:\r\n// If T has type \"(possibly cv-qualified) pointer to T1\"\r\n// then the member typedef type shall name T1;\r\n// otherwise, it shall name T.\r\n\r\n// Test remove_pointer with objects and functions.\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<int>, int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<const int>, const int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<volatile int>, volatile int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<const volatile int>, const volatile int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<int*>, int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<const int*>, const int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<volatile int*>, volatile int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<const volatile int*>, const volatile int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<int* const>, int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<const int* const>, const int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<volatile int* const>, volatile int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<const volatile int* const>, const volatile int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<int* volatile>, int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<const int* volatile>, const int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<volatile int* volatile>, volatile int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<const volatile int* volatile>, const volatile int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<int* const volatile>, int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<const int* const volatile>, const int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<volatile int* const volatile>, volatile int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<const volatile int* const volatile>, const volatile int>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<short(long)>, short(long)>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<short (*)(long)>, short(long)>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<short (*const)(long)>, short(long)>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<short (*volatile)(long)>, short(long)>);\r\nSTATIC_ASSERT(is_same_v<remove_pointer_t<short (*const volatile)(long)>, short(long)>);\r\n\r\n\r\nstruct X {};\r\n\r\n// Test is_member_function_pointer with all combinations of:\r\n// * 0, 1, and 2 parameters\r\n// * cv-qualifiers\r\n// * ref-qualifiers\r\n// * non-variadic and variadic parameters\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)()>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int)>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int)>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)() const>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int) const>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int) const>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)() volatile>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int) volatile>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int) volatile>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)() const volatile>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int) const volatile>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int) const volatile>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)() &>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int) &>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int) &>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)() const&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int) const&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int) const&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)() volatile&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int) volatile&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int) volatile&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)() const volatile&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int) const volatile&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int) const volatile&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)() &&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int) &&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int) &&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)() const&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int) const&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int) const&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)() volatile&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int) volatile&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int) volatile&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)() const volatile&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int) const volatile&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int) const volatile&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(...)>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, ...)>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int, ...)>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(...) const>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, ...) const>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int, ...) const>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(...) volatile>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, ...) volatile>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int, ...) volatile>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(...) const volatile>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, ...) const volatile>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int, ...) const volatile>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(...) &>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, ...) &>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int, ...) &>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(...) const&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, ...) const&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int, ...) const&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(...) volatile&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, ...) volatile&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int, ...) volatile&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(...) const volatile&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, ...) const volatile&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int, ...) const volatile&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(...) &&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, ...) &&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int, ...) &&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(...) const&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, ...) const&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int, ...) const&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(...) volatile&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, ...) volatile&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int, ...) volatile&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(...) const volatile&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, ...) const volatile&&>);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int (X::*)(int, int, ...) const volatile&&>);\r\n\r\n// Test is_member_object_pointer.\r\nSTATIC_ASSERT(is_member_object_pointer_v<int X::*>);\r\n\r\n// Verify that PMFs aren't detected as PMDs and vice versa.\r\nSTATIC_ASSERT(!is_member_function_pointer_v<int X::*>);\r\nSTATIC_ASSERT(!is_member_object_pointer_v<int (X::*)(int, int)>);\r\n\r\n// Verify that the machinery for LWG-3617 \"function/packaged_task deduction guides and deducing this\"\r\n// doesn't cause such function pointers to be detected as PMFs.\r\nSTATIC_ASSERT(!is_member_function_pointer_v<int (*)(X, int)>);\r\n\r\n\r\n// N4594 20.13.7.6 [meta.trans.other]:\r\n// Template:\r\n// template <class Fn, class... ArgTypes> struct result_of<Fn(ArgTypes...)>;\r\n\r\n// Condition:\r\n// Fn and all types in the parameter pack ArgTypes shall be complete types,\r\n// (possibly cv-qualified) void, or arrays of unknown bound.\r\n\r\n// Comments:\r\n// If the expression INVOKE(declval<Fn>(), declval<ArgTypes>()...) is well formed\r\n// when treated as an unevaluated operand (Clause 5), the member typedef type\r\n// shall name the type decltype(INVOKE(declval<Fn>(), declval<ArgTypes>()...));\r\n// otherwise, there shall be no member type. Access checking is performed as if in\r\n// a context unrelated to Fn and ArgTypes. Only the validity of the immediate\r\n// context of the expression is considered. [ Note: The compilation of the\r\n// expression can result in side effects such as the instantiation of class\r\n// template specializations and function template specializations, the generation\r\n// of implicitly-defined functions, and so on. Such side effects are not in the\r\n// \"immediate context\" and can result in the program being ill-formed. -end note ]\r\n\r\n// N4594 20.12.2 [func.require]/1:\r\n// Define INVOKE(f, t1, t2, ..., tN) as follows:\r\n// - (t1.*f)(t2, ..., tN) when f is a pointer to a member function of a class T\r\n//     and is_base_of<T, decay_t<decltype(t1)>>::value is true;\r\n// - (t1.get().*f)(t2, ..., tN) when f is a pointer to a member function of a class T\r\n//     and decay_t<decltype(t1)> is a specialization of reference_wrapper;\r\n// - ((*t1).*f)(t2, ..., tN) when f is a pointer to a member function of a class T\r\n//     and t1 does not satisfy the previous two items;\r\n// - t1.*f when N == 1 and f is a pointer to data member of a class T\r\n//     and is_base_of<T, decay_t<decltype(t1)>>::value is true;\r\n// - t1.get().*f when N == 1 and f is a pointer to data member of a class T\r\n//     and decay_t<decltype(t1)> is a specialization of reference_wrapper;\r\n// - (*t1).*f when N == 1 and f is a pointer to data member of a class T\r\n//     and t1 does not satisfy the previous two items;\r\n// - f(t1, t2, ..., tN) in all other cases.\r\n\r\n// Test modifiable/const prvalue/lvalue/xvalue return types.\r\nusing PmfModifiablePrvalue = string (X::*)();\r\nusing PmfConstPrvalue      = const string (X::*)();\r\nusing PmfModifiableLvalue  = string& (X::*) ();\r\nusing PmfConstLvalue       = const string& (X::*) ();\r\nusing PmfModifiableXvalue  = string && (X::*) ();\r\nusing PmfConstXvalue       = const string && (X::*) ();\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfModifiablePrvalue(X&)>, string>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfConstPrvalue(X&)>, const string>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfModifiableLvalue(X&)>, string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfConstLvalue(X&)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfModifiableXvalue(X&)>, string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfConstXvalue(X&)>, const string&&>);\r\n\r\n// Test void return types.\r\nusing PmfVoid = void (X::*)();\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfVoid(X&)>, void>);\r\n\r\n// Test 0, 1, and 2 parameters, also with implicit conversions.\r\nusing PmfNullary = float (X::*)();\r\nusing PmfUnary   = float* (X::*) (int);\r\nusing PmfBinary  = float** (X::*) (int, int);\r\nusing PmfString  = double (X::*)(const string&);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfNullary(X&)>, float>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfUnary(X&, int)>, float*>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfUnary(X&, short)>, float*>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfBinary(X&, int, int)>, float**>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfBinary(X&, int, short)>, float**>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfBinary(X&, short, int)>, float**>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfBinary(X&, short, short)>, float**>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfString(X&, string)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfString(X&, const string)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfString(X&, string&)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfString(X&, const string&)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfString(X&, string&&)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfString(X&, const string&&)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfString(X&, const char*)>, double>);\r\n\r\n// Test cv-qualifiers.\r\nusing PmfPlain         = char (X::*)();\r\nusing PmfConst         = short (X::*)() const;\r\nusing PmfVolatile      = int (X::*)() volatile;\r\nusing PmfConstVolatile = long (X::*)() const volatile;\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfPlain(X&)>, char>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfConst(X&)>, short>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfConst(const X&)>, short>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfVolatile(X&)>, int>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfVolatile(volatile X&)>, int>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfConstVolatile(X&)>, long>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfConstVolatile(const X&)>, long>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfConstVolatile(volatile X&)>, long>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfConstVolatile(const volatile X&)>, long>);\r\n\r\n// Test ref-qualifiers.\r\nusing PmfNoRef = short (X::*)();\r\nusing PmfLRef  = int (X::*)() &;\r\nusing PmfRRef  = long (X::*)() &&;\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfNoRef(X&)>, short>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfNoRef(X&&)>, short>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfLRef(X&)>, int>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfRRef(X&&)>, long>);\r\n\r\n// Test varargs.\r\nusing PmfEllipsis = double (X::*)(int, ...);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfEllipsis(X&, int)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfEllipsis(X&, int, int)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfEllipsis(X&, int, int, int)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfEllipsis(X&, int, const char*)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfEllipsis(X&, int, const char*, const char*)>, double>);\r\n\r\n// Test base/derived with references, reference_wrappers, raw pointers, and smart pointers.\r\nstruct Base {};\r\nstruct Derived : Base {};\r\nusing PmfBase = bool (Base::*)();\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfBase(Base&)>, bool>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfBase(Derived&)>, bool>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfBase(reference_wrapper<Base>)>, bool>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfBase(reference_wrapper<Derived>)>, bool>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfBase(Base*)>, bool>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfBase(Derived*)>, bool>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfBase(shared_ptr<Base>)>, bool>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfBase(shared_ptr<Derived>)>, bool>);\r\n\r\n// Test lvalue/rvalue PMFs.\r\nusing PmfWhatever = int (X::*)();\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfWhatever(X&)>, int>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfWhatever&(X&)>, int>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfWhatever && (X&)>, int>);\r\n// const PmfWhatever(X&) triggers Clang -Wignored-qualifiers, and is unnecessary to test.\r\nSTATIC_ASSERT(is_same_v<result_of_t<const PmfWhatever&(X&)>, int>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<const PmfWhatever && (X&)>, int>);\r\n\r\n\r\n// N3936 5.5 [expr.mptr.oper]/6:\r\n// The result of a .* expression whose second operand is a pointer to a data member\r\n// is an lvalue if the first operand is an lvalue and an xvalue otherwise.\r\n\r\n// N3936 5.5 [expr.mptr.oper]/5:\r\n// The restrictions on cv-qualification, and the manner in which the cv-qualifiers\r\n// of the operands are combined to produce the cv-qualifiers of the result,\r\n// are the same as the rules for E1.E2 given in 5.2.5.\r\n\r\n// N3936 5.2.5 [expr.ref]/4:\r\n// If E2 is a non-static data member and the type of E1 is \"cq1 vq1 X\", and the\r\n// type of E2 is \"cq2 vq2 T\", the expression designates the named member of the\r\n// object designated by the first expression. If E1 is an lvalue, then E1.E2 is\r\n// an lvalue; otherwise E1.E2 is an xvalue. Let the notation vq12 stand for the\r\n// \"union\" of vq1 and vq2; that is, if vq1 or vq2 is volatile, then vq12 is\r\n// volatile. Similarly, let the notation cq12 stand for the \"union\" of cq1 and cq2;\r\n// that is, if cq1 or cq2 is const, then cq12 is const. If E2 is declared to be\r\n// a mutable member, then the type of E1.E2 is \"vq12 T\". If E2 is not declared to be\r\n// a mutable member, then the type of E1.E2 is \"cq12 vq12 T\".\r\n\r\n// Test PMDs with all combinations of:\r\n// * cv-qualified members\r\n// * lvalue references, rvalue references, reference_wrappers, raw pointers, and smart pointers to objects\r\n// * cv-qualified objects\r\n// * base/derived objects\r\nusing PmdPlain         = string Base::*;\r\nusing PmdConst         = const string Base::*;\r\nusing PmdVolatile      = volatile string Base::*;\r\nusing PmdConstVolatile = const volatile string Base::*;\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(Base&)>, string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(Base&&)>, string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(reference_wrapper<Base>)>, string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(Base*)>, string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(shared_ptr<Base>)>, string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(const Base&)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(const Base&&)>, const string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(reference_wrapper<const Base>)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(const Base*)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(shared_ptr<const Base>)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(volatile Base&)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(volatile Base&&)>, volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(reference_wrapper<volatile Base>)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(volatile Base*)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(shared_ptr<volatile Base>)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(const volatile Base&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(const volatile Base&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(reference_wrapper<const volatile Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(const volatile Base*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(shared_ptr<const volatile Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(Base&)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(Base&&)>, const string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(reference_wrapper<Base>)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(Base*)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(shared_ptr<Base>)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(const Base&)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(const Base&&)>, const string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(reference_wrapper<const Base>)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(const Base*)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(shared_ptr<const Base>)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(volatile Base&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(volatile Base&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(reference_wrapper<volatile Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(volatile Base*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(shared_ptr<volatile Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(const volatile Base&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(const volatile Base&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(reference_wrapper<const volatile Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(const volatile Base*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(shared_ptr<const volatile Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(Base&)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(Base&&)>, volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(reference_wrapper<Base>)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(Base*)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(shared_ptr<Base>)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(const Base&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(const Base&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(reference_wrapper<const Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(const Base*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(shared_ptr<const Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(volatile Base&)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(volatile Base&&)>, volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(reference_wrapper<volatile Base>)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(volatile Base*)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(shared_ptr<volatile Base>)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(const volatile Base&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(const volatile Base&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(reference_wrapper<const volatile Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(const volatile Base*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(shared_ptr<const volatile Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(Base&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(Base&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(reference_wrapper<Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(Base*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(shared_ptr<Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(const Base&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(const Base&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(reference_wrapper<const Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(const Base*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(shared_ptr<const Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(volatile Base&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(volatile Base&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(reference_wrapper<volatile Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(volatile Base*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(shared_ptr<volatile Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(const volatile Base&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(const volatile Base&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(reference_wrapper<const volatile Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(const volatile Base*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(shared_ptr<const volatile Base>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(Derived&)>, string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(Derived&&)>, string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(reference_wrapper<Derived>)>, string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(Derived*)>, string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(shared_ptr<Derived>)>, string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(const Derived&)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(const Derived&&)>, const string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(reference_wrapper<const Derived>)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(const Derived*)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(shared_ptr<const Derived>)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(volatile Derived&)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(volatile Derived&&)>, volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(reference_wrapper<volatile Derived>)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(volatile Derived*)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(shared_ptr<volatile Derived>)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(const volatile Derived&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(const volatile Derived&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(reference_wrapper<const volatile Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(const volatile Derived*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(shared_ptr<const volatile Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(Derived&)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(Derived&&)>, const string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(reference_wrapper<Derived>)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(Derived*)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(shared_ptr<Derived>)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(const Derived&)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(const Derived&&)>, const string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(reference_wrapper<const Derived>)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(const Derived*)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(shared_ptr<const Derived>)>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(volatile Derived&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(volatile Derived&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(reference_wrapper<volatile Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(volatile Derived*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(shared_ptr<volatile Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(const volatile Derived&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(const volatile Derived&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(reference_wrapper<const volatile Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(const volatile Derived*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConst(shared_ptr<const volatile Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(Derived&)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(Derived&&)>, volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(reference_wrapper<Derived>)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(Derived*)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(shared_ptr<Derived>)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(const Derived&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(const Derived&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(reference_wrapper<const Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(const Derived*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(shared_ptr<const Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(volatile Derived&)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(volatile Derived&&)>, volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(reference_wrapper<volatile Derived>)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(volatile Derived*)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(shared_ptr<volatile Derived>)>, volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(const volatile Derived&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(const volatile Derived&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(reference_wrapper<const volatile Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(const volatile Derived*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdVolatile(shared_ptr<const volatile Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(Derived&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(Derived&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(reference_wrapper<Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(Derived*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(shared_ptr<Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(const Derived&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(const Derived&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(reference_wrapper<const Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(const Derived*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(shared_ptr<const Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(volatile Derived&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(volatile Derived&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(reference_wrapper<volatile Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(volatile Derived*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(shared_ptr<volatile Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(const volatile Derived&)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(const volatile Derived&&)>, const volatile string&&>);\r\nSTATIC_ASSERT(\r\n    is_same_v<result_of_t<PmdConstVolatile(reference_wrapper<const volatile Derived>)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(const volatile Derived*)>, const volatile string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdConstVolatile(shared_ptr<const volatile Derived>)>, const volatile string&>);\r\n\r\n// Test lvalue/rvalue PMDs.\r\nusing PmdWhatever = int X::*;\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdWhatever(X&)>, int&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdWhatever&(X&)>, int&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdWhatever && (X&)>, int&>);\r\n// const PmdWhatever(X&) triggers Clang -Wignored-qualifiers, and is unnecessary to test.\r\nSTATIC_ASSERT(is_same_v<result_of_t<const PmdWhatever&(X&)>, int&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<const PmdWhatever && (X&)>, int&>);\r\n\r\n\r\n// Also test that reference_wrappers are detected after decaying.\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfBase(const reference_wrapper<Base>&)>, bool>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmfBase(const reference_wrapper<Derived>&)>, bool>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(const reference_wrapper<Base>&)>, string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<PmdPlain(const reference_wrapper<Derived>&)>, string&>);\r\n\r\n\r\n// Test different kinds of function objects:\r\n// * Function pointers\r\n// * Classes with function call operators:\r\n//     ** Handwritten plain\r\n//     ** Handwritten overloaded\r\n//     ** Handwritten templated\r\n//     ** Handwritten templated and overloaded\r\n//     ** Stateless lambdas\r\n//     ** Stateful lambdas\r\n//     ** Generic lambdas\r\n// * Classes with conversion operators to function pointers\r\nusing FpOrdinary = bool (*)(int, int);\r\n\r\nstruct ClassOrdinary {\r\n    char operator()(int, int);\r\n};\r\n\r\nstruct ClassOverloaded {\r\n    float operator()(long);\r\n    double operator()(void*);\r\n};\r\n\r\nstruct ClassTemplated {\r\n    template <typename T>\r\n    T* operator()(T);\r\n};\r\n\r\nstruct ClassTemplatedAndOverloaded {\r\n    template <typename T>\r\n    unique_ptr<T> operator()(T);\r\n    template <typename T>\r\n    shared_ptr<T> operator()(T*);\r\n};\r\n\r\nstruct ClassConversion {\r\n    using FxnPtr = unsigned long (*)(int, int);\r\n    operator FxnPtr();\r\n};\r\n\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpOrdinary(int, int)>, bool>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<ClassOrdinary(int, int)>, char>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<ClassOverloaded(long)>, float>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<ClassOverloaded(int)>, float>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<ClassOverloaded(void*)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<ClassOverloaded(int*)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<ClassTemplated(int)>, int*>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<ClassTemplated(long)>, long*>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<ClassTemplatedAndOverloaded(char)>, unique_ptr<char>>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<ClassTemplatedAndOverloaded(short)>, unique_ptr<short>>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<ClassTemplatedAndOverloaded(int*)>, shared_ptr<int>>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<ClassTemplatedAndOverloaded(long*)>, shared_ptr<long>>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<ClassConversion(int, int)>, unsigned long>);\r\n\r\nvoid test_lambdas() {\r\n    int i = 1729;\r\n\r\n    auto lambda_stateless = [](int x) { return x < 5; };\r\n    using LambdaStateless = decltype(lambda_stateless);\r\n    STATIC_ASSERT(is_same_v<result_of_t<LambdaStateless(int)>, bool>);\r\n\r\n    auto lambda_ordinary = [&i](int x) { return i + x; };\r\n    using LambdaOrdinary = decltype(lambda_ordinary);\r\n    STATIC_ASSERT(is_same_v<result_of_t<LambdaOrdinary(int)>, int>);\r\n\r\n    auto lambda_generic = [&i](auto t) { return i + t; };\r\n    using LambdaGeneric = decltype(lambda_generic);\r\n    STATIC_ASSERT(is_same_v<result_of_t<LambdaGeneric(short)>, int>);\r\n    STATIC_ASSERT(is_same_v<result_of_t<LambdaGeneric(int)>, int>);\r\n    STATIC_ASSERT(is_same_v<result_of_t<LambdaGeneric(long)>, long>);\r\n    STATIC_ASSERT(is_same_v<result_of_t<LambdaGeneric(double)>, double>);\r\n}\r\n\r\n// Test modifiable/const prvalue/lvalue/xvalue return types.\r\nusing FpModifiablePrvalue = string (*)();\r\nusing FpConstPrvalue      = const string (*)();\r\nusing FpModifiableLvalue  = string& (*) ();\r\nusing FpConstLvalue       = const string& (*) ();\r\nusing FpModifiableXvalue  = string && (*) ();\r\nusing FpConstXvalue       = const string && (*) ();\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpModifiablePrvalue()>, string>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpConstPrvalue()>, const string>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpModifiableLvalue()>, string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpConstLvalue()>, const string&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpModifiableXvalue()>, string&&>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpConstXvalue()>, const string&&>);\r\n\r\n// Test void return types.\r\nusing FpVoid = void (*)();\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpVoid()>, void>);\r\n\r\n// Test 0, 1, and 2 parameters, also with implicit conversions.\r\nusing FpNullary = float (*)();\r\nusing FpUnary   = float* (*) (int);\r\nusing FpBinary  = float** (*) (int, int);\r\nusing FpString  = double (*)(const string&);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpNullary()>, float>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpUnary(int)>, float*>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpUnary(short)>, float*>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpBinary(int, int)>, float**>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpBinary(int, short)>, float**>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpBinary(short, int)>, float**>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpBinary(short, short)>, float**>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpString(string)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpString(const string)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpString(string&)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpString(const string&)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpString(string&&)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpString(const string&&)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpString(const char*)>, double>);\r\n\r\n// Test varargs.\r\nusing FpEllipsis = double (*)(int, ...);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpEllipsis(int)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpEllipsis(int, int)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpEllipsis(int, int, int)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpEllipsis(int, const char*)>, double>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FpEllipsis(int, const char*, const char*)>, double>);\r\n\r\n// Test cv-qualifiers.\r\nstruct MeowPlain {\r\n    char operator()();\r\n};\r\n\r\nstruct MeowConst {\r\n    short operator()() const;\r\n};\r\n\r\nstruct MeowVolatile {\r\n    int operator()() volatile;\r\n};\r\n\r\nstruct MeowConstVolatile {\r\n    long operator()() const volatile;\r\n};\r\n\r\nstruct MeowOverloaded {\r\n    int operator()();\r\n    int* operator()() const;\r\n    int** operator()() volatile;\r\n    int*** operator()() const volatile;\r\n};\r\n\r\nSTATIC_ASSERT(is_same_v<result_of_t<MeowPlain&()>, char>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<MeowConst&()>, short>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<const MeowConst&()>, short>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<MeowVolatile&()>, int>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<volatile MeowVolatile&()>, int>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<MeowConstVolatile&()>, long>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<const MeowConstVolatile&()>, long>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<volatile MeowConstVolatile&()>, long>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<const volatile MeowConstVolatile&()>, long>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<MeowOverloaded&()>, int>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<const MeowOverloaded&()>, int*>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<volatile MeowOverloaded&()>, int**>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<const volatile MeowOverloaded&()>, int***>);\r\n\r\n// Test ref-qualifiers.\r\nstruct KittyNoRef {\r\n    short operator()();\r\n};\r\n\r\nstruct KittyLRef {\r\n    int operator()() &;\r\n};\r\n\r\nstruct KittyRRef {\r\n    long operator()() &&;\r\n};\r\n\r\nstruct KittyOverloaded {\r\n    float operator()() &;\r\n    double operator()() &&;\r\n};\r\n\r\nSTATIC_ASSERT(is_same_v<result_of_t<KittyNoRef&()>, short>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<KittyNoRef && ()>, short>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<KittyLRef&()>, int>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<KittyRRef && ()>, long>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<KittyOverloaded&()>, float>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<KittyOverloaded && ()>, double>);\r\n\r\n// Test overloaded cv-qualifiers/ref-qualifiers simultaneously.\r\nstruct Purr {\r\n    char operator()() &;\r\n    short operator()() const&;\r\n    int operator()() &&;\r\n    long operator()() const&&;\r\n};\r\n\r\nSTATIC_ASSERT(is_same_v<result_of_t<Purr()>, int>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<Purr&()>, char>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<Purr && ()>, int>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<const Purr()>, long>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<const Purr&()>, short>);\r\nSTATIC_ASSERT(is_same_v<result_of_t<const Purr && ()>, long>);\r\n\r\n// Also test references to functions, DDB-198033.\r\nusing FuncRef = int (&)(float, double);\r\nSTATIC_ASSERT(is_same_v<result_of_t<FuncRef(float, double)>, int>);\r\n\r\n\r\nconstexpr int triple(int n) {\r\n    return n * 3;\r\n}\r\n\r\nconstexpr int quadruple(int n) {\r\n    return n * 4;\r\n}\r\n\r\nconstexpr int square(int n) {\r\n    return n * n;\r\n}\r\n\r\nint square_noexcept(int n) noexcept {\r\n    return n * n;\r\n}\r\n\r\nconstexpr int cube(int n) {\r\n    return n * n * n;\r\n}\r\n\r\nint cube_noexcept(int n) noexcept {\r\n    return n * n * n;\r\n}\r\n\r\n\r\n// Test DevDiv-391117 \"<functional> reference_wrapper: reference_wrapper doesn't compile with pure virtual function call\r\n// operators\".\r\nstruct BaseMeow {\r\n    BaseMeow() {}\r\n    virtual ~BaseMeow() {}\r\n\r\n    BaseMeow(const BaseMeow&)            = delete;\r\n    BaseMeow& operator=(const BaseMeow&) = delete;\r\n\r\n    virtual int operator()(int, int) = 0;\r\n};\r\n\r\nstruct DerivedMeow : BaseMeow {\r\n    int operator()(int x, int y) override {\r\n        return x * x * x + y * y * y;\r\n    }\r\n};\r\n\r\nvoid test_dev11_391117() {\r\n    unique_ptr<BaseMeow> upb(new DerivedMeow);\r\n\r\n    reference_wrapper<BaseMeow> rwb(*upb);\r\n\r\n    assert(rwb(9, 10) == 1729);\r\n}\r\n\r\n\r\n// Test DevDiv-535636 \"<functional> reference_wrapper: reference_wrapper<int (int)>::get() doesn't compile\".\r\nvoid test_dev11_535636() {\r\n    reference_wrapper<int(int)> rw(triple);\r\n\r\n    assert(rw(123) == 369);\r\n\r\n    int (&rf)(int) = rw.get();\r\n    assert(rf(1729) == 5187);\r\n    assert(&rf == &triple);\r\n\r\n    int (&rf2)(int) = rw;\r\n    assert(rf2(64) == 192);\r\n    assert(&rf2 == &triple);\r\n}\r\n\r\n\r\n// Test DevDiv-794227 \"<functional> reference_wrapper: ambiguous access of result_type - functional, xrefwrap\".\r\ntemplate <typename Arg, typename Result>\r\nstruct UnaryFunction {\r\n    typedef Arg argument_type;\r\n    typedef Result result_type;\r\n};\r\n\r\ntemplate <typename Arg1, typename Arg2, typename Result>\r\nstruct BinaryFunction {\r\n    typedef Arg1 first_argument_type;\r\n    typedef Arg2 second_argument_type;\r\n    typedef Result result_type;\r\n};\r\n\r\nvoid test_dev11_794227() {\r\n    struct Functor : BinaryFunction<const string&, size_t, bool> {\r\n        result_type operator()(first_argument_type s, second_argument_type n) const {\r\n            return s.size() == n;\r\n        }\r\n    };\r\n\r\n#if !_HAS_CXX20\r\n    STATIC_ASSERT(is_same_v<reference_wrapper<Functor>::first_argument_type, const string&>);\r\n    STATIC_ASSERT(is_same_v<reference_wrapper<Functor>::second_argument_type, size_t>);\r\n    STATIC_ASSERT(is_same_v<reference_wrapper<Functor>::result_type, bool>);\r\n#endif // !_HAS_CXX20\r\n\r\n    Functor f;\r\n    reference_wrapper<Functor> rw(f);\r\n    const string s(\"cat\");\r\n\r\n    assert(rw(s, static_cast<size_t>(3)));\r\n    assert(!rw(s, static_cast<size_t>(4)));\r\n\r\n    assert(rw(\"kitty\", static_cast<size_t>(5)));\r\n    assert(!rw(\"kitty\", static_cast<size_t>(6)));\r\n}\r\n\r\n\r\n// Test DevDiv-868374 \"<functional> reference_wrapper: Cannot assign a std::reference_wrapper object to another\r\n// std::reference_wrapper object [libcxx]\".\r\nvoid test_dev11_868374() {\r\n    reference_wrapper<int(int)> rw(triple);\r\n    assert(&rw.get() == &triple);\r\n    assert(rw(11) == 33);\r\n\r\n    reference_wrapper<int(int)> other(quadruple);\r\n    rw = other;\r\n    assert(&rw.get() == &quadruple);\r\n    assert(rw(111) == 444);\r\n\r\n    rw = ref(square);\r\n    assert(&rw.get() == &square);\r\n    assert(rw(16) == 256);\r\n\r\n    rw = cube;\r\n    assert(&rw.get() == &cube);\r\n    assert(rw(7) == 343);\r\n\r\n    reference_wrapper<int(int)> rw2(rw);\r\n    assert(&rw2.get() == &cube);\r\n    assert(rw2(9) == 729);\r\n\r\n    auto rw3 = ref(rw2);\r\n    STATIC_ASSERT(is_same_v<decltype(rw3), reference_wrapper<int(int)>>);\r\n    assert(&rw3.get() == &cube);\r\n    assert(rw3(12) == 1728);\r\n\r\n    // N4140 8.3.5 [dcl.fct]/6:\r\n    // The effect of a cv-qualifier-seq in a function declarator is not the same as adding\r\n    // cv-qualification on top of the function type. In the latter case, the cv-qualifiers are ignored.\r\n    auto rw4 = cref(quadruple);\r\n    STATIC_ASSERT(is_same_v<decltype(rw4), reference_wrapper<int(int)>>);\r\n    assert(&rw4.get() == &quadruple);\r\n    assert(rw4(5) == 20);\r\n\r\n    auto rw5 = cref(rw4);\r\n    STATIC_ASSERT(is_same_v<decltype(rw5), reference_wrapper<int(int)>>);\r\n    assert(&rw5.get() == &quadruple);\r\n    assert(rw5(6) == 24);\r\n}\r\n\r\n\r\n// More reference_wrapper tests.\r\n_CONSTEXPR20 bool test_more_reference_wrapper() {\r\n    STATIC_ASSERT(is_trivially_copyable_v<reference_wrapper<int>>);\r\n    STATIC_ASSERT(is_trivially_copyable_v<reference_wrapper<string>>);\r\n    STATIC_ASSERT(is_trivially_copyable_v<reference_wrapper<int(int, int)>>);\r\n    STATIC_ASSERT(is_trivially_copyable_v<reference_wrapper<string(string, string)>>);\r\n\r\n    STATIC_ASSERT(is_same_v<reference_wrapper<int>::type, int>);\r\n    STATIC_ASSERT(is_same_v<reference_wrapper<int(int, int)>::type, int(int, int)>);\r\n\r\n    int x = 100;\r\n    reference_wrapper<int> rw(x);\r\n    assert(&rw.get() == &x);\r\n    int& r = rw;\r\n    assert(&r == &x);\r\n    reference_wrapper<int> rw2(rw);\r\n    assert(&rw2.get() == &x);\r\n    int y = 999;\r\n    rw    = ref(y);\r\n    assert(&rw.get() == &y);\r\n    auto rw3 = ref(rw);\r\n    STATIC_ASSERT(is_same_v<decltype(rw3), reference_wrapper<int>>);\r\n    assert(&rw3.get() == &y);\r\n    auto crw = cref(x);\r\n    STATIC_ASSERT(is_same_v<decltype(crw), reference_wrapper<const int>>);\r\n    assert(&crw.get() == &x);\r\n    auto crw2 = cref(rw);\r\n    STATIC_ASSERT(is_same_v<decltype(crw2), reference_wrapper<const int>>);\r\n    assert(&crw2.get() == &y);\r\n    auto crw3 = cref(crw);\r\n    STATIC_ASSERT(is_same_v<decltype(crw3), reference_wrapper<const int>>);\r\n    assert(&crw3.get() == &x);\r\n\r\n    struct Cat {};\r\n    struct Dog {\r\n        Cat cat;\r\n        constexpr operator Cat&() {\r\n            return cat;\r\n        }\r\n    };\r\n\r\n    Dog dog;\r\n    reference_wrapper<Cat> catref(dog);\r\n    assert(&catref.get() == &dog.cat);\r\n\r\n    return true;\r\n}\r\n\r\n\r\n// Test reference_wrapper's function call operator.\r\nshared_ptr<int> sharer(unique_ptr<int>&& up) {\r\n    return shared_ptr<int>(move(up));\r\n}\r\n\r\nunique_ptr<int> uniquer(int a, int b) {\r\n    return make_unique<int>(a * 10 + b);\r\n}\r\n\r\nstruct Thing {\r\n    int m_x = 1000;\r\n    int m_y = 20;\r\n\r\n    constexpr int sum(int z) const {\r\n        return m_x + m_y + z;\r\n    }\r\n\r\n    constexpr int sum_noexcept(int z) const noexcept {\r\n        return m_x + m_y + z;\r\n    }\r\n\r\n    constexpr int product(int z) const {\r\n        return m_x * m_y * z;\r\n    }\r\n};\r\n\r\nclass UnaryBinary {\r\npublic:\r\n    // Originally for testing Dev10-539137\r\n    // \"reference_wrapper: Doesn't handle classes that derive from both unary_function and binary_function\".\r\n    // The typedefs are tested elsewhere here (see SameResults and DifferentResults).\r\n\r\n    constexpr UnaryBinary() : m_i(0) {}\r\n\r\n    constexpr int val() const {\r\n        return m_i;\r\n    }\r\n\r\n    constexpr int operator()(const int n) {\r\n        m_i += 7;\r\n        return n * 10;\r\n    }\r\n\r\n    constexpr int operator()(const int x, const int y) {\r\n        m_i += 40;\r\n        return x + y;\r\n    }\r\n\r\nprivate:\r\n    int m_i;\r\n};\r\n\r\nvoid test_reference_wrapper_invocation() {\r\n    int i = 10;\r\n\r\n    auto lambda = [i](int& r) mutable {\r\n        ++i;\r\n        ++r;\r\n        return i * r;\r\n    };\r\n\r\n    int x = 5;\r\n\r\n    assert(lambda(x) == 66 && x == 6);\r\n    assert(lambda(x) == 84 && x == 7);\r\n    assert(lambda(x) == 104 && x == 8);\r\n\r\n    auto rw_lambda = ref(lambda);\r\n\r\n    STATIC_ASSERT(!noexcept(rw_lambda(x)));\r\n\r\n    assert(rw_lambda(x) == 126 && x == 9);\r\n    assert(rw_lambda(x) == 150 && x == 10);\r\n    assert(rw_lambda(x) == 176 && x == 11);\r\n\r\n    assert(lambda(x) == 204 && x == 12);\r\n    assert(lambda(x) == 234 && x == 13);\r\n    assert(lambda(x) == 266 && x == 14);\r\n\r\n    assert(i == 10);\r\n\r\n    const auto noexcept_lambda     = []() noexcept {};\r\n    const auto noexcept_lambda_ref = ref(noexcept_lambda);\r\n    STATIC_ASSERT(noexcept(noexcept_lambda_ref())); // strengthened\r\n\r\n    reference_wrapper<int(int)> rw_fxn(quadruple);\r\n    assert(rw_fxn(9) == 36);\r\n\r\n\r\n    int (*fp)(int) = &triple;\r\n    reference_wrapper<int (*)(int)> rw_fp(fp);\r\n    assert(rw_fp(10) == 30);\r\n    fp = &square;\r\n    assert(rw_fp(10) == 100);\r\n\r\n\r\n    const reference_wrapper<int(int)> rw_fxn2(triple);\r\n    assert(rw_fxn2(5) == 15);\r\n    const reference_wrapper<int (*)(int)> rw_fp2(fp);\r\n    assert(rw_fp2(5) == 25);\r\n    fp = &cube;\r\n    assert(rw_fp2(5) == 125);\r\n\r\n\r\n    auto sp = make_shared<Thing>();\r\n\r\n    int (Thing::*pmf)(int) const = &Thing::sum;\r\n    reference_wrapper<int (Thing::*)(int) const> rw_pmf(pmf);\r\n    assert(rw_pmf(*sp, 709) == 1729);\r\n    assert(rw_pmf(sp.get(), 304) == 1324);\r\n    assert(rw_pmf(sp, 506) == 1526);\r\n    pmf = &Thing::product;\r\n    assert(rw_pmf(sp, 3) == 60000);\r\n\r\n    int Thing::* pmd = &Thing::m_x;\r\n    reference_wrapper<int Thing::*> rw_pmd(pmd);\r\n    assert(rw_pmd(*sp) == 1000);\r\n    assert(rw_pmd(sp.get()) == 1000);\r\n    assert(rw_pmd(sp) == 1000);\r\n    rw_pmd(sp) += 5;\r\n    assert(sp->m_x == 1005);\r\n    pmd = &Thing::m_y;\r\n    assert(rw_pmd(sp) == 20);\r\n\r\n\r\n    auto rw_sharer = ref(sharer);\r\n    auto up5       = make_unique<int>(5);\r\n    auto sp5       = rw_sharer(move(up5));\r\n    assert(!up5);\r\n    STATIC_ASSERT(is_same_v<decltype(sp5), shared_ptr<int>>);\r\n    assert(sp5 && *sp5 == 5);\r\n\r\n    auto rw_uniquer = ref(uniquer);\r\n    auto up47       = rw_uniquer(4, 7);\r\n    STATIC_ASSERT(is_same_v<decltype(up47), unique_ptr<int>>);\r\n    assert(up47 && *up47 == 47);\r\n\r\n\r\n    UnaryBinary ub;\r\n    reference_wrapper<UnaryBinary> rw_ub(ub);\r\n    assert(rw_ub(1729) == 17290);\r\n    assert(rw_ub(3, 5) == 8);\r\n    assert(ub.val() == 47);\r\n}\r\n\r\n\r\n// Test invoke().\r\nconstexpr bool test_invoke_constexpr() {\r\n    // MSVC implements LWG-2894 unconditionally\r\n    Thing thing;\r\n    auto p = &thing;\r\n\r\n    assert(&invoke(&Thing::m_x, *p) == &p->m_x);\r\n#if _HAS_CXX20\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, DevCom-1419425 \"constexpr PMD emits bogus error C2131\"\r\n    assert(&invoke(&Thing::m_x, ref(*p)) == &p->m_x);\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX20\r\n    assert(&invoke(&Thing::m_x, p) == &p->m_x);\r\n\r\n    assert(invoke(&Thing::sum, *p, 3) == 1023);\r\n#if _HAS_CXX20\r\n    assert(invoke(&Thing::sum, ref(*p), 4) == 1024);\r\n#endif // _HAS_CXX20\r\n    assert(invoke(&Thing::sum, p, 5) == 1025);\r\n\r\n    assert(invoke(square, 6) == 36);\r\n    assert(invoke(&cube, 7) == 343);\r\n    return true;\r\n}\r\n\r\nvoid test_invoke() {\r\n    assert(test_invoke_constexpr());\r\n    STATIC_ASSERT(test_invoke_constexpr());\r\n\r\n    auto sp = make_shared<Thing>();\r\n\r\n    assert(&invoke(&Thing::m_x, *sp) == &sp->m_x);\r\n    STATIC_ASSERT(noexcept(&invoke(&Thing::m_x, *sp) == &sp->m_x));\r\n    assert(&invoke(&Thing::m_x, ref(*sp)) == &sp->m_x);\r\n    STATIC_ASSERT(noexcept(&invoke(&Thing::m_x, ref(*sp)) == &sp->m_x));\r\n    assert(&invoke(&Thing::m_x, sp.get()) == &sp->m_x);\r\n    STATIC_ASSERT(noexcept(&invoke(&Thing::m_x, sp.get()) == &sp->m_x));\r\n    assert(&invoke(&Thing::m_x, sp) == &sp->m_x);\r\n    STATIC_ASSERT(noexcept(&invoke(&Thing::m_x, sp) == &sp->m_x));\r\n\r\n    assert(invoke(&Thing::sum, *sp, 3) == 1023);\r\n    STATIC_ASSERT(!noexcept(invoke(&Thing::sum, *sp, 3) == 1023));\r\n    assert(invoke(&Thing::sum, ref(*sp), 4) == 1024);\r\n    STATIC_ASSERT(!noexcept(invoke(&Thing::sum, ref(*sp), 4) == 1024));\r\n    assert(invoke(&Thing::sum, sp.get(), 5) == 1025);\r\n    STATIC_ASSERT(!noexcept(invoke(&Thing::sum, sp.get(), 5) == 1025));\r\n    assert(invoke(&Thing::sum, sp, 6) == 1026);\r\n    STATIC_ASSERT(!noexcept(invoke(&Thing::sum, sp, 6) == 1026));\r\n\r\n    constexpr bool noexcept_is_in_the_type_system =\r\n#ifdef __cpp_noexcept_function_type\r\n        true\r\n#else\r\n        false\r\n#endif // __cpp_noexcept_function_type\r\n        ;\r\n\r\n    assert(invoke(&Thing::sum_noexcept, *sp, 3) == 1023);\r\n    STATIC_ASSERT(noexcept(invoke(&Thing::sum_noexcept, *sp, 3) == 1023) == noexcept_is_in_the_type_system);\r\n    assert(invoke(&Thing::sum_noexcept, ref(*sp), 4) == 1024);\r\n    STATIC_ASSERT(noexcept(invoke(&Thing::sum_noexcept, ref(*sp), 4) == 1024) == noexcept_is_in_the_type_system);\r\n    assert(invoke(&Thing::sum_noexcept, sp.get(), 5) == 1025);\r\n    STATIC_ASSERT(noexcept(invoke(&Thing::sum_noexcept, sp.get(), 5) == 1025) == noexcept_is_in_the_type_system);\r\n    assert(invoke(&Thing::sum_noexcept, sp, 6) == 1026);\r\n    STATIC_ASSERT(noexcept(invoke(&Thing::sum_noexcept, sp, 6) == 1026) == noexcept_is_in_the_type_system);\r\n\r\n    assert(invoke(square, 6) == 36);\r\n    STATIC_ASSERT(!noexcept(invoke(square, 6) == 36));\r\n    assert(invoke(&cube, 7) == 343);\r\n    STATIC_ASSERT(!noexcept(invoke(&cube, 7) == 343));\r\n\r\n    assert(invoke(square_noexcept, 6) == 36);\r\n    STATIC_ASSERT(noexcept(invoke(square_noexcept, 6) == 36) == noexcept_is_in_the_type_system);\r\n    assert(invoke(&cube_noexcept, 7) == 343);\r\n    STATIC_ASSERT(noexcept(invoke(&cube_noexcept, 7) == 343) == noexcept_is_in_the_type_system);\r\n}\r\n\r\n\r\n// More tests for reference_wrapper's nested types.\r\nstruct None {};\r\n\r\ntemplate <typename T, typename = void>\r\nstruct GetResultType {\r\n    typedef None type;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct GetResultType<T, void_t<typename T::result_type>> {\r\n    typedef typename T::result_type type;\r\n};\r\n\r\ntemplate <typename T, typename = void>\r\nstruct GetArgType {\r\n    typedef None type;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct GetArgType<T, void_t<typename T::argument_type>> {\r\n    typedef typename T::argument_type type;\r\n};\r\n\r\ntemplate <typename T, typename = void>\r\nstruct GetFirstType {\r\n    typedef None type;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct GetFirstType<T, void_t<typename T::first_argument_type>> {\r\n    typedef typename T::first_argument_type type;\r\n};\r\n\r\ntemplate <typename T, typename = void>\r\nstruct GetSecondType {\r\n    typedef None type;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct GetSecondType<T, void_t<typename T::second_argument_type>> {\r\n    typedef typename T::second_argument_type type;\r\n};\r\n\r\ntemplate <typename T, typename Res, typename Arg, typename First, typename Second>\r\nstruct TestTypes\r\n    : conjunction<is_same<typename GetResultType<T>::type, Res>, is_same<typename GetArgType<T>::type, Arg>,\r\n          is_same<typename GetFirstType<T>::type, First>, is_same<typename GetSecondType<T>::type, Second>>::type {};\r\n\r\ntemplate <typename T, typename Res, typename Arg, typename First, typename Second>\r\nstruct TestRWTypes : conjunction<TestTypes<reference_wrapper<T>, Res, Arg, First, Second>,\r\n                         TestTypes<reference_wrapper<const T>, Res, Arg, First, Second>>::type {};\r\n\r\nusing Fxn0 = char();\r\nusing Fxn1 = short(short*);\r\nusing Fxn2 = int(int*, int**);\r\nusing Fxn3 = long(long*, long**, long***);\r\n\r\n// Avoid triggering a warning when adding constness to function types.\r\nusing Pmf0 = float (X::*)();\r\nusing Pmf1 = double (X::*)(double*);\r\nusing Pmf2 = long double (X::*)(long double*, long double**);\r\n\r\nusing Pmf0c = unsigned char (X::*)() const;\r\nusing Pmf1c = unsigned short (X::*)(unsigned short*) const;\r\nusing Pmf2c = unsigned int (X::*)(unsigned int*, unsigned int**) const;\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(TestTypes<reference_wrapper<Fxn0>, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestTypes<reference_wrapper<Fxn1>, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestTypes<reference_wrapper<Fxn2>, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestTypes<reference_wrapper<Fxn3>, None, None, None, None>::value);\r\n\r\nSTATIC_ASSERT(TestRWTypes<Fxn0*, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<Fxn1*, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<Fxn2*, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<Fxn3*, None, None, None, None>::value);\r\n\r\nSTATIC_ASSERT(TestRWTypes<Pmf0, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<Pmf1, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<Pmf2, None, None, None, None>::value);\r\n\r\nSTATIC_ASSERT(TestRWTypes<Pmf0c, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<Pmf1c, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<Pmf2c, None, None, None, None>::value);\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\nSTATIC_ASSERT(TestTypes<reference_wrapper<Fxn0>, char, None, None, None>::value);\r\nSTATIC_ASSERT(TestTypes<reference_wrapper<Fxn1>, short, short*, None, None>::value);\r\nSTATIC_ASSERT(TestTypes<reference_wrapper<Fxn2>, int, None, int*, int**>::value);\r\nSTATIC_ASSERT(TestTypes<reference_wrapper<Fxn3>, long, None, None, None>::value);\r\n\r\nSTATIC_ASSERT(TestRWTypes<Fxn0*, char, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<Fxn1*, short, short*, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<Fxn2*, int, None, int*, int**>::value);\r\nSTATIC_ASSERT(TestRWTypes<Fxn3*, long, None, None, None>::value);\r\n\r\nSTATIC_ASSERT(TestRWTypes<Pmf0, float, X*, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<Pmf1, double, None, X*, double*>::value);\r\nSTATIC_ASSERT(TestRWTypes<Pmf2, long double, None, None, None>::value);\r\n\r\nSTATIC_ASSERT(TestRWTypes<Pmf0c, unsigned char, const X*, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<Pmf1c, unsigned short, None, const X*, unsigned short*>::value);\r\nSTATIC_ASSERT(TestRWTypes<Pmf2c, unsigned int, None, None, None>::value);\r\n#endif // _HAS_CXX20\r\n\r\nstruct OnlyRes {\r\n    typedef bool result_type;\r\n};\r\n\r\nstruct OnlyArg {\r\n    typedef bool* argument_type;\r\n};\r\n\r\nstruct OnlyFirst {\r\n    typedef bool** first_argument_type;\r\n};\r\n\r\nstruct OnlySecond {\r\n    typedef bool*** second_argument_type;\r\n};\r\n\r\nstruct BothFirstSecond {\r\n    typedef short first_argument_type;\r\n    typedef long second_argument_type;\r\n};\r\n\r\nstruct NormalOne {\r\n    typedef void* result_type;\r\n    typedef void** argument_type;\r\n};\r\n\r\nstruct NormalTwo {\r\n    typedef double result_type;\r\n    typedef double* first_argument_type;\r\n    typedef double** second_argument_type;\r\n\r\n    result_type operator()(first_argument_type, second_argument_type) const {\r\n        return 3.14;\r\n    }\r\n};\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(TestRWTypes<OnlyRes, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<OnlyArg, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<OnlyFirst, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<OnlySecond, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<BothFirstSecond, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<NormalOne, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<NormalTwo, None, None, None, None>::value);\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\nSTATIC_ASSERT(TestRWTypes<OnlyRes, bool, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<OnlyArg, None, bool*, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<OnlyFirst, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<OnlySecond, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<BothFirstSecond, None, None, short, long>::value);\r\nSTATIC_ASSERT(TestRWTypes<NormalOne, void*, void**, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<NormalTwo, double, None, double*, double**>::value);\r\n#endif // _HAS_CXX20\r\n\r\nstruct Empty {};\r\n\r\nSTATIC_ASSERT(TestRWTypes<Empty, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<int, None, None, None, None>::value);\r\nSTATIC_ASSERT(TestRWTypes<int X::*, None, None, None, None>::value);\r\n\r\n// Test DevDiv-864867 \"<functional> reference_wrapper: reference_wrapper should handle functors that are both unary and\r\n// binary [libs-conformance]\".\r\nstruct SameResults : UnaryFunction<int, bool>, BinaryFunction<short, long, bool> {\r\n\r\n    typedef bool result_type;\r\n};\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(TestRWTypes<SameResults, None, None, None, None>::value);\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\nSTATIC_ASSERT(TestRWTypes<SameResults, bool, int, short, long>::value);\r\n#endif // _HAS_CXX20\r\n\r\nstruct DifferentResults : UnaryFunction<unsigned int, float>, BinaryFunction<unsigned short, unsigned long, double> {};\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(TestRWTypes<DifferentResults, None, None, None, None>::value);\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\nSTATIC_ASSERT(TestRWTypes<DifferentResults, None, unsigned int, unsigned short, unsigned long>::value);\r\n#endif // _HAS_CXX20\r\n\r\n// Test mem_fn().\r\n_CONSTEXPR20 bool test_mem_fn() {\r\n    struct Widget {\r\n        int m_i = 100;\r\n\r\n        constexpr int nullary() {\r\n            return ++m_i;\r\n        }\r\n        constexpr int unary(int x) {\r\n            return m_i += x;\r\n        }\r\n        constexpr int binary(int x, int y) {\r\n            return m_i += x * y;\r\n        }\r\n        constexpr int nullary_c() const {\r\n            return m_i * 2;\r\n        }\r\n        constexpr int unary_c(int x) const {\r\n            return m_i * x;\r\n        }\r\n        constexpr int unary_lv(int x) & {\r\n            return m_i += x * x;\r\n        }\r\n        constexpr int unary_rv(int x) && {\r\n            return m_i += x * x * x;\r\n        }\r\n    };\r\n\r\n    typedef Widget* Star;\r\n    typedef const Widget* CStar;\r\n    STATIC_ASSERT(TestTypes<decltype(mem_fn(&Widget::m_i)), None, None, None, None>::value);\r\n    STATIC_ASSERT(TestTypes<decltype(mem_fn(&Widget::nullary)), int, Star, None, None>::value);\r\n    STATIC_ASSERT(TestTypes<decltype(mem_fn(&Widget::unary)), int, None, Star, int>::value);\r\n    STATIC_ASSERT(TestTypes<decltype(mem_fn(&Widget::binary)), int, None, None, None>::value);\r\n    STATIC_ASSERT(TestTypes<decltype(mem_fn(&Widget::nullary_c)), int, CStar, None, None>::value);\r\n    STATIC_ASSERT(TestTypes<decltype(mem_fn(&Widget::unary_c)), int, None, CStar, int>::value);\r\n    STATIC_ASSERT(TestTypes<decltype(mem_fn(&Widget::unary_lv)), int, None, Star, int>::value);\r\n    STATIC_ASSERT(TestTypes<decltype(mem_fn(&Widget::unary_rv)), int, None, Star, int>::value);\r\n\r\n    Widget w;\r\n    const Widget cw{};\r\n\r\n    // Verify that the function call operator is const.\r\n    const auto mf_pmd = mem_fn(&Widget::m_i);\r\n\r\n    mf_pmd(w) += 20;\r\n    mf_pmd(&w) += 3;\r\n    assert(w.m_i == 123);\r\n\r\n    assert(&mf_pmd(cw) == &cw.m_i);\r\n    assert(&mf_pmd(&cw) == &cw.m_i);\r\n\r\n    int&& r1 = mf_pmd(move(w));\r\n    assert(&r1 == &w.m_i);\r\n\r\n    const int&& r2 = mf_pmd(move(cw));\r\n    assert(&r2 == &cw.m_i);\r\n\r\n    w.m_i = 1000;\r\n\r\n    assert(mem_fn(&Widget::nullary)(w) == 1001);\r\n    assert(mem_fn(&Widget::nullary)(&w) == 1002);\r\n\r\n    assert(mem_fn(&Widget::unary)(w, 10) == 1012);\r\n    assert(mem_fn(&Widget::unary)(&w, 20) == 1032);\r\n\r\n    assert(mem_fn(&Widget::binary)(w, 100, 4) == 1432);\r\n    assert(mem_fn(&Widget::binary)(&w, 100, 5) == 1932);\r\n\r\n    w.m_i = 1000;\r\n\r\n    assert(mem_fn(&Widget::nullary_c)(w) == 2000);\r\n    assert(mem_fn(&Widget::nullary_c)(&w) == 2000);\r\n\r\n    assert(mem_fn(&Widget::unary_c)(w, 3) == 3000);\r\n    assert(mem_fn(&Widget::unary_c)(&w, 4) == 4000);\r\n\r\n    assert(mem_fn(&Widget::unary_lv)(w, 5) == 1025);\r\n    assert(mem_fn(&Widget::unary_lv)(&w, 6) == 1061);\r\n\r\n    assert(mem_fn(&Widget::unary_rv)(move(w), 7) == 1404);\r\n\r\n    return true;\r\n}\r\n\r\n\r\n// Test std::function.\r\ntemplate <int N, bool NothrowCopyMove = true>\r\nstruct CopyMoveCounter {\r\n    int m_copies;\r\n    int m_moves;\r\n    int m_arr[N];\r\n\r\n    CopyMoveCounter() noexcept : m_copies(0), m_moves(0) {}\r\n\r\n    CopyMoveCounter(const CopyMoveCounter& other) noexcept(NothrowCopyMove)\r\n        : m_copies(other.m_copies + 1), m_moves(other.m_moves) {}\r\n\r\n    CopyMoveCounter(CopyMoveCounter&& other) noexcept(NothrowCopyMove)\r\n        : m_copies(other.m_copies), m_moves(other.m_moves + 1) {}\r\n\r\n    CopyMoveCounter& operator=(const CopyMoveCounter&) = delete;\r\n\r\n    pair<int, int> operator()() const noexcept {\r\n        return make_pair(m_copies, m_moves);\r\n    }\r\n};\r\n\r\nshort short_long(long n) {\r\n    return n < 100 ? 17 : 29;\r\n}\r\n\r\nvoid test_function() {\r\n    STATIC_ASSERT(TestTypes<function<bool()>, bool, None, None, None>::value);\r\n    STATIC_ASSERT(TestTypes<function<char(short)>, char, short, None, None>::value);\r\n    STATIC_ASSERT(TestTypes<function<long(float, double)>, long, None, float, double>::value);\r\n    STATIC_ASSERT(TestTypes<function<void(int, int, int)>, void, None, None, None>::value);\r\n\r\n\r\n    {\r\n        function<int(int)> f1;\r\n        function<int(int)> f2 = nullptr;\r\n        function<int(int)> f5 = [](int x) { return x; };\r\n\r\n        assert(!f1);\r\n        assert(!f2);\r\n        assert(!!f5);\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n        function<int(int)> f3(allocator_arg, allocator<short>());\r\n        function<int(int)> f4(allocator_arg, allocator<short>(), nullptr);\r\n\r\n        assert(!f3);\r\n        assert(!f4);\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n\r\n        assert(f1 == nullptr);\r\n        assert(nullptr == f1);\r\n        assert(!(f1 != nullptr));\r\n        assert(!(nullptr != f1));\r\n\r\n        assert(!(f5 == nullptr));\r\n        assert(!(nullptr == f5));\r\n        assert(f5 != nullptr);\r\n        assert(nullptr != f5);\r\n\r\n        f1 = nullptr;\r\n        f5 = nullptr;\r\n\r\n        assert(!f1);\r\n        assert(!f5);\r\n    }\r\n\r\n\r\n    // Dev11_617384_empty_std_function covers testing for null function pointers, null member pointers, and empty\r\n    // std::functions.\r\n\r\n\r\n    // Test DevDiv-759096 \"<functional> function: std::function construction copies its target instead of moving\".\r\n    {\r\n        CopyMoveCounter<1> cmc0;\r\n        CopyMoveCounter<1> cmc1(cmc0);\r\n        CopyMoveCounter<1> cmc2(cmc1);\r\n        CopyMoveCounter<1> cmc3(move(cmc2));\r\n        CopyMoveCounter<1> cmc4(move(cmc3));\r\n        assert(cmc0() == make_pair(0, 0));\r\n        assert(cmc1() == make_pair(1, 0));\r\n        assert(cmc2() == make_pair(2, 0));\r\n        assert(cmc3() == make_pair(2, 1));\r\n        assert(cmc4() == make_pair(2, 2));\r\n\r\n        // The exact number of moves isn't technically guaranteed,\r\n        // but we can rely on copy/move elision here, even without optimizations.\r\n        function<pair<int, int>()> f1 = CopyMoveCounter<1>{};\r\n        function<pair<int, int>()> f2 = CopyMoveCounter<100>{};\r\n        assert(f1() == make_pair(0, 1));\r\n        assert(f2() == make_pair(0, 1));\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n        function<pair<int, int>()> f3(allocator_arg, allocator<short>(), CopyMoveCounter<1>{});\r\n        function<pair<int, int>()> f4(allocator_arg, allocator<short>(), CopyMoveCounter<100>{});\r\n        assert(f3() == make_pair(0, 1));\r\n        assert(f4() == make_pair(0, 1));\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n\r\n        // The following tests are sensitive to our Small Functor Optimization and swap() implementation.\r\n        function<pair<int, int>()> x1 = CopyMoveCounter<1>{};\r\n        function<pair<int, int>()> y1 = CopyMoveCounter<1>{};\r\n        assert(x1() == make_pair(0, 1));\r\n        assert(y1() == make_pair(0, 1));\r\n        x1.swap(y1); // Small functors are swapped with three moves.\r\n        assert(x1() == make_pair(0, 2));\r\n        assert(y1() == make_pair(0, 3));\r\n\r\n        function<pair<int, int>()> x2 = CopyMoveCounter<100>{};\r\n        function<pair<int, int>()> y2 = CopyMoveCounter<100>{};\r\n        assert(x2() == make_pair(0, 1));\r\n        assert(y2() == make_pair(0, 1));\r\n        x2.swap(y2); // Large functors are stored remotely, so they're swapped without moves.\r\n        assert(x2() == make_pair(0, 1));\r\n        assert(y2() == make_pair(0, 1));\r\n\r\n        function<pair<int, int>()> x3 = CopyMoveCounter<1, false>{};\r\n        function<pair<int, int>()> y3 = CopyMoveCounter<1, false>{};\r\n        assert(x3() == make_pair(0, 1));\r\n        assert(y3() == make_pair(0, 1));\r\n        x3.swap(y3); // Functors with throwing moves are stored remotely, so they're swapped without moves.\r\n        assert(x3() == make_pair(0, 1));\r\n        assert(y3() == make_pair(0, 1));\r\n\r\n\r\n        function<pair<int, int>()> a1 = CopyMoveCounter<1>{};\r\n        function<pair<int, int>()> b1 = CopyMoveCounter<1>{};\r\n        assert(a1() == make_pair(0, 1));\r\n        assert(b1() == make_pair(0, 1));\r\n\r\n        function<pair<int, int>()> c1 = a1;\r\n        function<pair<int, int>()> m1 = move(a1);\r\n        assert(c1() == make_pair(1, 1));\r\n        assert(m1() == make_pair(0, 2));\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n        function<pair<int, int>()> d1(allocator_arg, allocator<short>(), b1);\r\n        function<pair<int, int>()> n1(allocator_arg, allocator<short>(), move(b1));\r\n        assert(d1() == make_pair(1, 1));\r\n        assert(n1() == make_pair(0, 2));\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n\r\n        function<pair<int, int>()> a2 = CopyMoveCounter<100>{};\r\n        function<pair<int, int>()> b2 = CopyMoveCounter<100>{};\r\n        assert(a2() == make_pair(0, 1));\r\n        assert(b2() == make_pair(0, 1));\r\n\r\n        function<pair<int, int>()> c2 = a2;\r\n        function<pair<int, int>()> m2 = move(a2);\r\n        assert(c2() == make_pair(1, 1));\r\n        assert(m2() == make_pair(0, 1));\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n        function<pair<int, int>()> d2(allocator_arg, allocator<short>(), b2);\r\n        function<pair<int, int>()> n2(allocator_arg, allocator<short>(), move(b2));\r\n        assert(d2() == make_pair(1, 1));\r\n        assert(n2() == make_pair(0, 1));\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n    }\r\n\r\n\r\n    {\r\n        function<int(int)> f = [](int x) { return x * 2; };\r\n        function<int(int)> g = [](int x) { return x * 3; };\r\n        function<int(int)> h = [](int x) { return x * 4; };\r\n\r\n        assert(f(11) == 22);\r\n\r\n        f = g;\r\n        assert(f(11) == 33);\r\n\r\n        f = move(h);\r\n        assert(f(11) == 44);\r\n\r\n        f = [](int x) { return x * 5; };\r\n        assert(f(11) == 55);\r\n\r\n        auto lambda = [](int x) { return x * 6; };\r\n        auto r      = ref(lambda);\r\n        f           = r;\r\n        assert(f(11) == 66);\r\n\r\n        assert(f(100) == 600);\r\n        assert(g(100) == 300);\r\n        f.swap(g);\r\n        assert(f(100) == 300);\r\n        assert(g(100) == 600);\r\n        swap(f, g);\r\n        assert(f(100) == 600);\r\n        assert(g(100) == 300);\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n        f.assign([](int x) { return x * 7; }, allocator<short>());\r\n        assert(f(11) == 77);\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n    }\r\n\r\n\r\n    {\r\n        function<int(int)> f;\r\n        const auto& c = f;\r\n        assert(!f);\r\n        assert(f.target_type() == typeid(void));\r\n        assert(f.target<int (*)(int)>() == nullptr);\r\n        assert(c.target<int (*)(int)>() == nullptr);\r\n        assert(f.target<short (*)(long)>() == nullptr);\r\n        assert(c.target<short (*)(long)>() == nullptr);\r\n\r\n        assert(f.target<int(int)>() == nullptr);\r\n        assert(c.target<int(int)>() == nullptr);\r\n        assert(f.target<short(long)>() == nullptr);\r\n        assert(c.target<short(long)>() == nullptr);\r\n\r\n        f = triple;\r\n        assert(f(1000) == 3000);\r\n        assert(f.target_type() == typeid(int (*)(int)));\r\n        assert(*f.target<int (*)(int)>() == &triple);\r\n        assert(*c.target<int (*)(int)>() == &triple);\r\n        assert(f.target<short (*)(long)>() == nullptr);\r\n        assert(c.target<short (*)(long)>() == nullptr);\r\n\r\n        assert(f.target<int(int)>() == nullptr);\r\n        assert(c.target<int(int)>() == nullptr);\r\n        assert(f.target<short(long)>() == nullptr);\r\n        assert(c.target<short(long)>() == nullptr);\r\n\r\n        f = short_long;\r\n        assert(f(1000) == 29);\r\n        assert(f.target_type() == typeid(short (*)(long)));\r\n        assert(f.target<int (*)(int)>() == nullptr);\r\n        assert(c.target<int (*)(int)>() == nullptr);\r\n        assert(*f.target<short (*)(long)>() == &short_long);\r\n        assert(*c.target<short (*)(long)>() == &short_long);\r\n\r\n        assert(f.target<int(int)>() == nullptr);\r\n        assert(c.target<int(int)>() == nullptr);\r\n        assert(f.target<short(long)>() == nullptr);\r\n        assert(c.target<short(long)>() == nullptr);\r\n    }\r\n\r\n\r\n    {\r\n        function<void()> f;\r\n\r\n        try {\r\n            f();\r\n            abort();\r\n        } catch (const bad_function_call&) {\r\n        }\r\n\r\n        f = [] { throw string(\"kitty\"); };\r\n\r\n        try {\r\n            f();\r\n            abort();\r\n        } catch (const string& s) {\r\n            assert(s == \"kitty\");\r\n        }\r\n    }\r\n\r\n\r\n    {\r\n        function<void(string&, unique_ptr<string>&&, unique_ptr<int>)> f = [](string& lv, unique_ptr<string>&& xv,\r\n                                                                               unique_ptr<int> prv) {\r\n            lv += *xv + to_string(*prv - 1);\r\n            xv = make_unique<string>(\"woof\");\r\n        };\r\n        string s(\"Cute\");\r\n        auto up = make_unique<string>(\"Kittens\");\r\n        f(s, move(up), make_unique<int>(1730));\r\n        assert(s == \"CuteKittens1729\");\r\n        assert(*up == \"woof\");\r\n\r\n        function<string&()> lv_ret = [&]() -> string& { return s; };\r\n        assert(&lv_ret() == &s);\r\n\r\n        function<string && ()> xv_ret = [&]() -> string&& { return move(s); };\r\n        string&& r                    = xv_ret();\r\n        assert(&r == &s);\r\n\r\n        function<string()> prv_ret = [&] { return s + \"Meow\"; };\r\n        assert(prv_ret() == \"CuteKittens1729Meow\");\r\n    }\r\n\r\n\r\n    // Test DevDiv-1010027 \"<functional> function: std::function with return type void does not ignore return type on\r\n    // assignment\".\r\n    {\r\n        string s(\"ChooseAMovieTitle\");\r\n\r\n        auto lambda = [&](int x) {\r\n            s += to_string(x);\r\n            return s.c_str();\r\n        };\r\n\r\n        function<const char*(int)> f1 = lambda;\r\n        const char* const p           = f1(2013);\r\n        assert(p == s.c_str());\r\n        assert(s == \"ChooseAMovieTitle2013\");\r\n\r\n        s                        = \"Orwell\";\r\n        function<string(int)> f2 = lambda;\r\n        assert(f2(1984).size() == 10);\r\n        assert(s == \"Orwell1984\");\r\n\r\n        s                      = \"AScienceFictionFilm\";\r\n        function<void(int)> f3 = lambda;\r\n        f3(2015);\r\n        assert(s == \"AScienceFictionFilm2015\");\r\n\r\n        function<void(int)> f4 = [&](int x) { s = to_string(x * x); };\r\n        f4(16);\r\n        assert(s == \"256\");\r\n\r\n#if 0 // TRANSITION, VSO-243564 \"Kitty<const void (int)> emits bogus error LNK1179\"\r\n      // Also test LWG-2420 \"function<void(ArgTypes...)> does not discard the return value of the target object\".\r\n        s = \"Pentagon\";\r\n        function<const void (int)> f5 = lambda;\r\n        f5(-5);\r\n        assert(s == \"Pentagon-5\");\r\n\r\n        s = \"Hexagon\";\r\n        function<volatile void (int)> f6 = lambda;\r\n        f6(-6);\r\n        assert(s == \"Hexagon-6\");\r\n\r\n        s = \"Septagon\";\r\n        function<const volatile void (int)> f7 = lambda;\r\n        f7(-7);\r\n        assert(s == \"Septagon-7\");\r\n#endif\r\n    }\r\n\r\n\r\n    // Test DevDiv-294051 \"<functional> function: std::function has lost the ability to invoke PMFs/PMDs on various\r\n    // things\". Test DevDiv-789899 \"<functional> function: std::function does not work for member functions\".\r\n    {\r\n        struct Y {\r\n            int m_n;\r\n\r\n            int func1(int x) {\r\n                return x + m_n + 1;\r\n            }\r\n\r\n            int func2(int x) const {\r\n                return x + m_n + 2;\r\n            }\r\n        };\r\n\r\n        Y y{30};\r\n        const Y c{40};\r\n\r\n        function<int(Y&, int)> f       = &Y::func1;\r\n        function<int(const Y&, int)> g = &Y::func2;\r\n        function<int(Y&, int)> h       = &Y::func2;\r\n\r\n        assert(f(y, 500) == 531);\r\n\r\n        assert(g(y, 600) == 632);\r\n        assert(g(c, 700) == 742);\r\n\r\n        assert(h(y, 800) == 832);\r\n    }\r\n\r\n\r\n    {\r\n        // The function call operator must be const.\r\n        const function<int(int)> cf = quadruple;\r\n        assert(cf(10) == 40);\r\n\r\n        // swap() must be noexcept.\r\n        struct Puppy {\r\n            int m_i;\r\n            const bool* m_p;\r\n\r\n            Puppy(int i, const bool* p) noexcept : m_i(i), m_p(p) {}\r\n\r\n            Puppy(const Puppy& other) noexcept(false) : m_i(other.m_i), m_p(other.m_p) {\r\n                if (*m_p) {\r\n                    throw string(\"BARK\");\r\n                }\r\n            }\r\n\r\n            Puppy& operator=(const Puppy&) = delete;\r\n\r\n            int operator()() const noexcept {\r\n                return m_i;\r\n            }\r\n        };\r\n\r\n        bool bark          = false;\r\n        function<int()> f1 = Puppy(300, &bark);\r\n        function<int()> f2 = Puppy(9999, &bark);\r\n        bark               = true;\r\n        assert(f1() == 300);\r\n        assert(f2() == 9999);\r\n        f1.swap(f2);\r\n        assert(f1() == 9999);\r\n        assert(f2() == 300);\r\n        swap(f1, f2);\r\n        assert(f1() == 300);\r\n        assert(f2() == 9999);\r\n\r\n        // Self-copy-assign must be a no-op.\r\n        struct SmallFunctor {\r\n            int m_n;\r\n\r\n            int operator()() const {\r\n                return m_n * m_n;\r\n            }\r\n        };\r\n\r\n        struct LargeFunctor {\r\n            int m_n;\r\n            int m_arr[100];\r\n\r\n            explicit LargeFunctor(int n) : m_n(n), m_arr() {}\r\n\r\n            int operator()() const {\r\n                return m_n * m_n * m_n;\r\n            }\r\n        };\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wself-assign-overloaded\"\r\n#endif // __clang__\r\n\r\n        function<int()> s2 = SmallFunctor{2};\r\n        assert(s2() == 4);\r\n        s2 = s2;\r\n        assert(s2() == 4);\r\n\r\n        function<int()> l3 = LargeFunctor{3};\r\n        assert(l3() == 27);\r\n        l3 = l3;\r\n        assert(l3() == 27);\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // __clang__\r\n\r\n        // Self-swap must be a no-op.\r\n        function<int()> s4 = SmallFunctor{4};\r\n        assert(s4() == 16);\r\n        s4.swap(s4);\r\n        assert(s4() == 16);\r\n\r\n        function<int()> l5 = LargeFunctor{5};\r\n        assert(l5() == 125);\r\n        l5.swap(l5);\r\n        assert(l5() == 125);\r\n\r\n        // Test small-small, small-large, large-small, and large-large swaps.\r\n        function<int()> s6 = SmallFunctor{6};\r\n        function<int()> l7 = LargeFunctor{7};\r\n\r\n        assert(s4() == 16);\r\n        assert(s6() == 36);\r\n        s4.swap(s6);\r\n        assert(s4() == 36);\r\n        assert(s6() == 16);\r\n\r\n        assert(s4() == 36);\r\n        assert(l5() == 125);\r\n        s4.swap(l5);\r\n        assert(s4() == 125);\r\n        assert(l5() == 36);\r\n        l5.swap(s4);\r\n        assert(s4() == 36);\r\n        assert(l5() == 125);\r\n\r\n        assert(l5() == 125);\r\n        assert(l7() == 343);\r\n        l5.swap(l7);\r\n        assert(l5() == 343);\r\n        assert(l7() == 125);\r\n    }\r\n}\r\n\r\n\r\n// Test bind(), user-reported bugs.\r\nvoid test_bind() {\r\n    // Test DDB-176058 \"TR1: result_of doesn't accept result_type typedefs for references\" (title is now bogus).\r\n    {\r\n        struct PassThru {\r\n            int& operator()(int& obj) const {\r\n                return obj;\r\n            }\r\n        };\r\n\r\n        STATIC_ASSERT(is_same_v<result_of_t<PassThru(int&)>, int&>);\r\n\r\n        int x = 5;\r\n\r\n        bind(PassThru(), ref(x))() += 1;\r\n\r\n        assert(x == 6);\r\n    }\r\n\r\n\r\n    // Test DevDiv-343411 \"<functional> bind: bind() and std::function don't work with rvalue references\".\r\n    // Test DevDiv-410033 \"<functional>: bind() doesn't work with rvalue reference signatures\".\r\n    // Test DevDiv-862588 \"<functional> bind: std::bind doesn't forward unbound arguments\".\r\n    {\r\n#ifndef _M_CEE_PURE\r\n\r\n        {\r\n            auto lambda = [](int x, int y, int&& z) { return x * 100 + y * 10 + z; };\r\n\r\n            auto b = bind(lambda, 7, _1, _2);\r\n\r\n            function<int(int, int&&)> f(b);\r\n\r\n            assert(f(8, 9) == 789);\r\n        }\r\n\r\n        {\r\n            struct Thingy {\r\n                int mf(int&& n) {\r\n                    return n * 5;\r\n                }\r\n            };\r\n\r\n            Thingy t;\r\n\r\n            auto b = bind(&Thingy::mf, t, _1);\r\n\r\n            assert(b(7) == 35);\r\n        }\r\n\r\n        {\r\n            auto consume_up = [](unique_ptr<int>&& up, int n) { return *up / n; };\r\n\r\n            auto b = bind(consume_up, _1, 3);\r\n\r\n            assert(b(make_unique<int>(1000)) == 333);\r\n        }\r\n\r\n#endif // _M_CEE_PURE\r\n    }\r\n\r\n\r\n    // Test DevDiv-487679 \"<functional> bind: MSVS 2012 C++ std::bind illegal indirection compiler error\".\r\n    // Test DevDiv-617421 \"<functional> bind: Bind failing to compile with a vector of functions\".\r\n    {\r\n        struct BaseFunctor {\r\n            int operator()(int n) const {\r\n                return n + 5;\r\n            }\r\n        };\r\n\r\n        struct DerivedFunctor : BaseFunctor {};\r\n\r\n        auto b = bind(&DerivedFunctor::operator(), _1, 200);\r\n\r\n        DerivedFunctor df;\r\n\r\n        assert(b(df) == 205);\r\n    }\r\n\r\n\r\n    // Test DevDiv-505570 \"<functional> bind: Can't bind a pointer to a data member using a pointer, smart pointer or\r\n    // iterator to the object\".\r\n    {\r\n        struct Object {\r\n            int member = 1000;\r\n        };\r\n\r\n        auto pmd = &Object::member;\r\n        auto sp  = make_shared<Object>();\r\n\r\n        auto b1 = bind(pmd, ref(*sp));\r\n        auto b2 = bind(pmd, sp.get());\r\n        auto b3 = bind(pmd, sp);\r\n\r\n        assert(sp->member == 1000);\r\n        ++b1();\r\n        assert(sp->member == 1001);\r\n        ++b2();\r\n        assert(sp->member == 1002);\r\n        ++b3();\r\n        assert(sp->member == 1003);\r\n    }\r\n\r\n\r\n    // Test DevDiv-535246 \"<functional> bind: Cannot call const forwarding call wrapper result of std::bind\".\r\n    {\r\n        const auto cb = bind(&quadruple, 11);\r\n\r\n        assert(cb() == 44);\r\n    }\r\n}\r\n\r\n\r\n// Unit tests for bind().\r\nstruct UserTwo {};\r\n\r\nnamespace std {\r\n    template <>\r\n    struct is_placeholder<UserTwo> : integral_constant<int, 2> {};\r\n} // namespace std\r\n\r\nstruct UserBind {\r\n    template <typename T>\r\n    constexpr T operator()(const T& a, const T& b) const {\r\n        return a + b + b;\r\n    }\r\n};\r\n\r\nnamespace std {\r\n    template <>\r\n    struct is_bind_expression<UserBind> : true_type {};\r\n} // namespace std\r\n\r\ntemplate <typename... Types>\r\nstruct Pack {};\r\n\r\nstruct Typewriter {\r\n    template <typename... Types>\r\n    constexpr Pack<Typewriter&, Types&&...> operator()(Types&&...) {\r\n        return Pack<Typewriter&, Types&&...>();\r\n    }\r\n\r\n    template <typename... Types>\r\n    constexpr Pack<const Typewriter&, Types&&...> operator()(Types&&...) const {\r\n        return Pack<const Typewriter&, Types&&...>();\r\n    }\r\n};\r\n\r\n_CONSTEXPR20 bool test_more_bind() {\r\n    STATIC_ASSERT(is_placeholder_v<int> == 0);\r\n\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_1)> == 1);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_2)> == 2);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_3)> == 3);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_4)> == 4);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_5)> == 5);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_6)> == 6);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_7)> == 7);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_8)> == 8);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_9)> == 9);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_10)> == 10);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_11)> == 11);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_12)> == 12);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_13)> == 13);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_14)> == 14);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_15)> == 15);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_16)> == 16);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_17)> == 17);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_18)> == 18);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_19)> == 19);\r\n    STATIC_ASSERT(is_placeholder_v<decltype(_20)> == 20);\r\n\r\n    STATIC_ASSERT(is_placeholder_v<UserTwo> == 2);\r\n\r\n    STATIC_ASSERT(is_nothrow_default_constructible_v<remove_const_t<decltype(_1)>>);\r\n    STATIC_ASSERT(is_nothrow_copy_constructible_v<remove_const_t<decltype(_1)>>);\r\n    STATIC_ASSERT(is_nothrow_move_constructible_v<remove_const_t<decltype(_1)>>);\r\n\r\n\r\n    STATIC_ASSERT(!is_bind_expression_v<int>);\r\n    STATIC_ASSERT(is_bind_expression_v<decltype(bind(&triple, 11))>);\r\n    STATIC_ASSERT(is_bind_expression_v<UserBind>);\r\n\r\n\r\n    STATIC_ASSERT(TestTypes<decltype(bind(square, 5)), int, None, None, None>::value);\r\n    STATIC_ASSERT(TestTypes<decltype(bind(&square, 6)), int, None, None, None>::value);\r\n    STATIC_ASSERT(TestTypes<decltype(bind(declval<PmfString>(), _1, \"meow\")), double, None, None, None>::value);\r\n    STATIC_ASSERT(TestTypes<decltype(bind(declval<NormalTwo>(), _1, _2)), double, None, None, None>::value);\r\n    STATIC_ASSERT(TestTypes<decltype(bind(declval<ClassOrdinary>(), 10, 20)), None, None, None, None>::value);\r\n\r\n    STATIC_ASSERT(TestTypes<decltype(bind<void>(square, 5)), void, None, None, None>::value);\r\n    STATIC_ASSERT(TestTypes<decltype(bind<void>(&square, 6)), void, None, None, None>::value);\r\n    STATIC_ASSERT(TestTypes<decltype(bind<void>(declval<PmfString>(), _1, \"meow\")), void, None, None, None>::value);\r\n    STATIC_ASSERT(TestTypes<decltype(bind<void>(declval<NormalTwo>(), _1, _2)), void, None, None, None>::value);\r\n    STATIC_ASSERT(TestTypes<decltype(bind<void>(declval<ClassOrdinary>(), 10, 20)), void, None, None, None>::value);\r\n\r\n\r\n    // Verify that bound arguments are passed as lvalues, so bound functors can be repeatedly invoked.\r\n    auto b1 = bind([](int& r) { return ++r; }, 100);\r\n    assert(b1() == 101);\r\n    assert(b1() == 102);\r\n    assert(b1() == 103);\r\n\r\n\r\n    // Test placeholders.\r\n    auto lambda = [](int a, int b, int c, int d) { return a * 1000 + b * 100 + c * 10 + d; };\r\n\r\n    assert(bind(lambda, _1, _2, _3, _4)(5, 6, 7, 8) == 5678); // All placeholders.\r\n    assert(bind(lambda, _1, _2, 5, 6)(7, 8) == 7856); // Some placeholders at beginning.\r\n    assert(bind(lambda, 5, 6, _1, _2)(7, 8) == 5678); // Some placeholders at end.\r\n    assert(bind(lambda, 6, 7, 8, 9)() == 6789); // No placeholders.\r\n    assert(bind(lambda, _4, _3, _2, _1)(5, 6, 7, 8) == 8765); // Reorder arguments.\r\n    assert(bind(lambda, _1, _2, _2, _1)(5, 6) == 5665); // Replicate arguments.\r\n    assert(bind(lambda, 9, _2, _3, _4)(5, 6, 7, 8) == 9678); // Drop arguments at beginning.\r\n    assert(bind(lambda, _1, 9, _3, _4)(5, 6, 7, 8) == 5978); // Drop arguments at middle.\r\n    assert(bind(lambda, _1, _2, _3, 9)(5, 6, 7, 8) == 5679); // Drop arguments at end.\r\n    assert(bind(lambda, UserTwo(), _1, _2, _3)(5, 6, 7) == 6567); // User placeholder.\r\n\r\n\r\n    // Test reference_wrapper.\r\n    int n         = 7;\r\n    auto b2       = bind([](int& r) { r *= 2; }, ref(n));\r\n    const auto b3 = b2;\r\n\r\n    b2();\r\n    assert(n == 14);\r\n    b3();\r\n    assert(n == 28);\r\n\r\n\r\n    // Test nested bind.\r\n    auto b4 = bind(plus<>(), bind(plus<>(), bind(multiplies<>(), _1, 100), bind(multiplies<>(), _2, 10)), _3);\r\n    assert(b4(4, 5, 6) == 456);\r\n\r\n    auto b5 = bind(multiplies<>(), 10, UserBind());\r\n    assert(b5(30, 4) == 380);\r\n\r\n\r\n    // Verify that bind()'s function call operator is const-overloaded.\r\n    struct ConstOverloaded {\r\n        constexpr int operator()(int x, int y) {\r\n            return x * x * y;\r\n        }\r\n\r\n        constexpr int operator()(int x, int y) const {\r\n            return x * x * x * y;\r\n        }\r\n    };\r\n\r\n    auto b6        = bind(ConstOverloaded(), _1, 10);\r\n    const auto& b7 = b6;\r\n\r\n    assert(b6(4) == 160);\r\n    assert(b7(4) == 640);\r\n\r\n\r\n    // Test bind<R>().\r\n    int calls = 0;\r\n\r\n    auto lambda2 = [&calls](const char* p, int i) {\r\n        ++calls;\r\n        return p + i;\r\n    };\r\n\r\n    const string_or_view s(\"cute fluffy kittens\");\r\n\r\n    assert(bind<const char*>(lambda2, s.data(), _1)(2) == s.data() + 2);\r\n    assert(calls == 1);\r\n\r\n    assert(bind<string_or_view>(lambda2, s.data(), _1)(3).size() == 16);\r\n    assert(calls == 2);\r\n\r\n    bind<void>(lambda2, s.data(), _1)(4);\r\n    assert(calls == 3);\r\n\r\n\r\n    // Test types carefully.\r\n    struct Z {};\r\n    Z z;\r\n    const Z cz{};\r\n\r\n    auto b8 = bind(Typewriter(), X(), ref(n), _1, _2, _3, _4);\r\n    auto p8 = b8(z, cz, move(z), move(cz));\r\n    STATIC_ASSERT(is_same_v<decltype(p8), Pack<Typewriter&, X&, int&, Z&, const Z&, Z&&, const Z&&>>);\r\n\r\n    const auto b9 = b8;\r\n    auto p9       = b9(z, cz, move(z), move(cz));\r\n    STATIC_ASSERT(is_same_v<decltype(p9), Pack<const Typewriter&, const X&, int&, Z&, const Z&, Z&&, const Z&&>>);\r\n\r\n    auto b10 = bind(Typewriter(), true, bind(Typewriter(), _1, _2, _3, _4), _1, 3.14);\r\n    auto p10 = b10(z, cz, move(z), move(cz));\r\n    STATIC_ASSERT(is_same_v<decltype(p10),\r\n        Pack<Typewriter&, bool&, Pack<Typewriter&, Z&, const Z&, Z&&, const Z&&>&&, Z&, double&>>);\r\n\r\n    const auto b11 = b10;\r\n    auto p11       = b11(z, cz, move(z), move(cz));\r\n    STATIC_ASSERT(\r\n        is_same_v<decltype(p11), Pack<const Typewriter&, const bool&,\r\n                                     Pack<const Typewriter&, Z&, const Z&, Z&&, const Z&&>&&, Z&, const double&>>);\r\n\r\n#if _HAS_CXX17\r\n    struct NothrowInvocable {\r\n        int operator()(int i) noexcept {\r\n            return i;\r\n        }\r\n    };\r\n    struct NotNothrowInvocable {\r\n        int operator()(int i) {\r\n            return i;\r\n        }\r\n    };\r\n    struct PossiblyThrowingInt {\r\n        int i;\r\n        PossiblyThrowingInt() = default;\r\n        constexpr PossiblyThrowingInt(int j) : i(j) {}\r\n        operator int() {\r\n            return i;\r\n        }\r\n    };\r\n    PossiblyThrowingInt possibly_throwing_int{1729};\r\n\r\n    static_assert(is_nothrow_invocable_v<decltype(bind(NothrowInvocable{}, 0))>);\r\n    static_assert(is_nothrow_invocable_v<decltype(bind(NothrowInvocable{}, ref(n)))>);\r\n    static_assert(is_nothrow_invocable_v<decltype(bind(NothrowInvocable{}, _1)), int>);\r\n    static_assert(is_nothrow_invocable_v<decltype(bind<long>(NothrowInvocable{}, 0))>);\r\n    static_assert(is_nothrow_invocable_v<decltype(bind<long>(NothrowInvocable{}, ref(n)))>);\r\n    static_assert(is_nothrow_invocable_v<decltype(bind<long>(NothrowInvocable{}, _1)), int>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind<PossiblyThrowingInt>(NothrowInvocable{}, 0))>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind<PossiblyThrowingInt>(NothrowInvocable{}, ref(n)))>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind<PossiblyThrowingInt>(NothrowInvocable{}, _1)), int>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind(NothrowInvocable{}, PossiblyThrowingInt{}))>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind(NothrowInvocable{}, ref(possibly_throwing_int)))>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind(NothrowInvocable{}, _1)), PossiblyThrowingInt>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind<long>(NothrowInvocable{}, PossiblyThrowingInt{}))>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind<long>(NothrowInvocable{}, ref(possibly_throwing_int)))>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind<long>(NothrowInvocable{}, _1)), PossiblyThrowingInt>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind(NotNothrowInvocable{}, 0))>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind(NotNothrowInvocable{}, ref(n)))>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind(NotNothrowInvocable{}, _1)), int>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind<long>(NotNothrowInvocable{}, 0))>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind<long>(NotNothrowInvocable{}, ref(n)))>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind<long>(NotNothrowInvocable{}, _1)), int>);\r\n\r\n    static_assert(is_nothrow_invocable_v<decltype(bind(NothrowInvocable{}, bind(NothrowInvocable{}, _1))), int>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind(NothrowInvocable{}, bind(NotNothrowInvocable{}, _1))), int>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind(NotNothrowInvocable{}, bind(NothrowInvocable{}, _1))), int>);\r\n    static_assert(!is_nothrow_invocable_v<decltype(bind(NotNothrowInvocable{}, bind(NotNothrowInvocable{}, _1))), int>);\r\n#endif // _HAS_CXX17\r\n\r\n    return true;\r\n}\r\n\r\n\r\n// Test DevDiv-1160769 \"<functional>: bind()'s cv-overloaded function call operators are triggering Expression SFINAE\r\n// problems\".\r\nstruct Test1160769 {\r\n    void method(const int&) {}\r\n};\r\n\r\nvoid test_dev11_1160769() {\r\n    Test1160769 t;\r\n    bind(mem_fn(&Test1160769::method), _1, 1729)(t);\r\n    bind(mem_fn(&Test1160769::method), t, 1729)();\r\n    bind(&Test1160769::method, _1, 1729)(t);\r\n    bind(&Test1160769::method, t, 1729)();\r\n}\r\n\r\n\r\n// P0005R4 not_fn()\r\nstruct BoolWrapper {\r\n    bool wrapped;\r\n};\r\n\r\nstruct TestNotFn {\r\n    int m_x;\r\n\r\n    constexpr explicit TestNotFn(const int x) : m_x(x) {}\r\n\r\n    TestNotFn(const TestNotFn&)            = delete;\r\n    TestNotFn(TestNotFn&&)                 = default;\r\n    TestNotFn& operator=(const TestNotFn&) = delete;\r\n    TestNotFn& operator=(TestNotFn&&)      = delete;\r\n\r\n    constexpr bool operator()(const int i) & {\r\n        return i < m_x + 100;\r\n    }\r\n\r\n    constexpr bool operator()(const int i) const& {\r\n        return i < m_x + 200;\r\n    }\r\n\r\n    constexpr bool operator()(const int i) && {\r\n        return i < m_x + 300;\r\n    }\r\n\r\n    constexpr bool operator()(const int i) const&& {\r\n        return i < m_x + 400;\r\n    }\r\n};\r\n\r\nstruct EmptyTestNotFn {\r\n    constexpr explicit EmptyTestNotFn(int) {}\r\n\r\n    EmptyTestNotFn(const EmptyTestNotFn&)            = delete;\r\n    constexpr EmptyTestNotFn(EmptyTestNotFn&&)       = default;\r\n    EmptyTestNotFn& operator=(const EmptyTestNotFn&) = delete;\r\n    EmptyTestNotFn& operator=(EmptyTestNotFn&&)      = delete;\r\n\r\n    constexpr bool operator()(const int i) & {\r\n        return i < 1500;\r\n    }\r\n\r\n    constexpr bool operator()(const int i) const& {\r\n        return i < 2500;\r\n    }\r\n\r\n    constexpr bool operator()(const int i) && {\r\n        return i < 3500;\r\n    }\r\n\r\n    constexpr bool operator()(const int i) const&& {\r\n        return i < 4500;\r\n    }\r\n};\r\n\r\n_CONSTEXPR20 bool test_not_fn() {\r\n#if _HAS_CXX17\r\n    {\r\n        BoolWrapper bw_true{true};\r\n        BoolWrapper bw_false{false};\r\n\r\n        auto nf = not_fn(&BoolWrapper::wrapped);\r\n\r\n        assert(!nf(bw_true));\r\n        assert(nf(bw_false));\r\n    }\r\n\r\n    {\r\n        auto f         = not_fn(TestNotFn{60});\r\n        const auto& cf = f;\r\n\r\n        assert(!f(155));\r\n        assert(f(177));\r\n        assert(!cf(255));\r\n        assert(cf(277));\r\n        assert(!move(f)(355));\r\n        assert(move(f)(377));\r\n        assert(!move(cf)(455));\r\n        assert(move(cf)(477));\r\n    }\r\n\r\n    {\r\n        auto g         = not_fn(EmptyTestNotFn{-1});\r\n        const auto& cg = g;\r\n\r\n        assert(!g(1400));\r\n        assert(g(1600));\r\n        assert(!cg(2400));\r\n        assert(cg(2600));\r\n        assert(!move(g)(3400));\r\n        assert(move(g)(3600));\r\n        assert(!move(cg)(4400));\r\n        assert(move(cg)(4600));\r\n    }\r\n#endif // _HAS_CXX17\r\n    return true;\r\n}\r\n\r\n// Also test the invocability of the return type of std::not_fn before and after the changes in P0356R5.\r\n#if _HAS_CXX17\r\nstruct ConstOnlyFunctor {\r\n    bool operator()() = delete;\r\n    bool operator()() const {\r\n        return true;\r\n    }\r\n};\r\n\r\nstruct ConstOnlyBooleanTester {\r\n    void operator()() {}\r\n    bool operator()() const {\r\n        return true;\r\n    }\r\n};\r\n\r\nstruct GetPinnedNegatable {\r\n    struct PinnedNegatable {\r\n        PinnedNegatable() = default;\r\n\r\n        PinnedNegatable(const PinnedNegatable&)            = delete;\r\n        PinnedNegatable& operator=(const PinnedNegatable&) = delete;\r\n\r\n        friend bool operator!(PinnedNegatable) {\r\n            return false;\r\n        }\r\n    };\r\n\r\n    PinnedNegatable operator()() const {\r\n        return {};\r\n    }\r\n};\r\n\r\nusing NegatedConstOnlyFunctor       = decltype(not_fn(ConstOnlyFunctor{}));\r\nusing NegatedConstOnlyBooleanTester = decltype(not_fn(ConstOnlyBooleanTester{}));\r\nusing NegatedGetPinnedNegatable     = decltype(not_fn(GetPinnedNegatable{}));\r\n\r\n#if _HAS_CXX20\r\nconstexpr bool not_fn_is_perfect_forwarding = true;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\nconstexpr bool not_fn_is_perfect_forwarding = false;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\nstatic_assert(is_invocable_v<const NegatedConstOnlyFunctor>);\r\nstatic_assert(is_invocable_v<const NegatedConstOnlyFunctor&>);\r\nstatic_assert(is_invocable_v<const NegatedConstOnlyBooleanTester>);\r\nstatic_assert(is_invocable_v<const NegatedConstOnlyBooleanTester&>);\r\n\r\nstatic_assert(is_invocable_v<NegatedConstOnlyFunctor> == !not_fn_is_perfect_forwarding);\r\nstatic_assert(is_invocable_v<NegatedConstOnlyFunctor&> == !not_fn_is_perfect_forwarding);\r\nstatic_assert(is_invocable_v<NegatedConstOnlyBooleanTester> == !not_fn_is_perfect_forwarding);\r\nstatic_assert(is_invocable_v<NegatedConstOnlyBooleanTester&> == !not_fn_is_perfect_forwarding);\r\n\r\nstatic_assert(is_invocable_v<NegatedGetPinnedNegatable> == not_fn_is_perfect_forwarding);\r\n#endif // _HAS_CXX17\r\n\r\nint main() {\r\n    // Test addressof() with functions.\r\n    assert(addressof(triple) == &triple);\r\n\r\n    test_dev11_391117();\r\n    test_dev11_535636();\r\n    test_dev11_794227();\r\n    test_dev11_868374();\r\n    test_more_reference_wrapper();\r\n    test_reference_wrapper_invocation();\r\n    test_invoke();\r\n    test_mem_fn();\r\n    test_function();\r\n    test_bind();\r\n    test_more_bind();\r\n    test_dev11_1160769();\r\n    test_not_fn();\r\n\r\n#if _HAS_CXX20\r\n    static_assert(test_more_reference_wrapper());\r\n    static_assert(test_mem_fn());\r\n    static_assert(test_more_bind());\r\n    static_assert(test_not_fn());\r\n#endif // _HAS_CXX20\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0555154_system_clock_to_time_t/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0555154_system_clock_to_time_t/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// N3485 20.11.7.1 [time.clock.system]/3:\r\n// \"static time_t to_time_t(const time_point& t) noexcept;\r\n// Returns: A time_t object that represents the same point in time as t when both values are\r\n// restricted to the coarser of the precisions of time_t and time_point. It is\r\n// implementation defined whether values are rounded or truncated to the required precision.\"\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <cstdint>\r\n#include <limits>\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\n\r\nconstexpr auto int64_min = numeric_limits<int64_t>::min();\r\nconstexpr auto int64_max = numeric_limits<int64_t>::max();\r\n\r\nvoid test(const system_clock::time_point& tp, const long long t1, const long long t2) {\r\n    assert(tp.time_since_epoch().count() == t1);\r\n    assert(system_clock::to_time_t(tp) == t2);\r\n}\r\n\r\nint main() {\r\n    test(system_clock::time_point(system_clock::duration(13595108447931998LL)), 13595108447931998LL, 1359510844LL);\r\n\r\n    test(system_clock::time_point(system_clock::duration(13595108501597374LL)), 13595108501597374LL, 1359510850LL);\r\n\r\n    test(system_clock::time_point::min(),\r\n        /* -9223372036854775808LL */ int64_min, -922337203685LL);\r\n\r\n    test(system_clock::time_point::max(),\r\n        /* 9223372036854775807LL */ int64_max, 922337203685LL);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0577418_random_seed_0/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0577418_random_seed_0/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <random>\r\n#include <type_traits>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename Engine>\r\ntypename Engine::result_type run_10k(Engine engine) {\r\n    engine.discard(9999);\r\n    return engine();\r\n}\r\n\r\nint main() {\r\n    assert(run_10k(minstd_rand0()) == 1043618065UL); // N4964 [rand.predef]/1\r\n    assert(run_10k(mt19937()) == 4123659995UL); // N4964 [rand.predef]/3\r\n    assert(run_10k(ranlux24_base()) == 7937952UL); // N4964 [rand.predef]/5\r\n\r\n    // Also test VSO-214595 \"subtract_with_carry_engine::seed should accept result_type\"\r\n    subtract_with_carry_engine<unsigned long long, 64, 10, 24> ull_swc;\r\n    ull_swc.seed(0x12341234'00000000ULL);\r\n    assert(run_10k(ull_swc) == 0x01316AEA'3646F686ULL); // libstdc++ 14.2 and libc++ 19.1 agree, Boost 1.86.0 disagrees\r\n\r\n    assert(minstd_rand0(0) == minstd_rand0()); // N4964 [rand.eng.lcong]/5\r\n    assert(mt19937(0) != mt19937()); // N4964 [rand.eng.mers]/6\r\n    assert(ranlux24_base(0) == ranlux24_base()); // N4964 [rand.eng.sub]/7\r\n\r\n    assert(run_10k(minstd_rand0(0)) == 1043618065UL); // QED\r\n    assert(run_10k(mt19937(0)) == 1543171712UL); // Boost 1.86.0 agrees\r\n    assert(run_10k(ranlux24_base(0)) == 7937952UL); // QED\r\n\r\n    // Also test LWG-3809 Is std::subtract_with_carry_engine<uint16_t> supposed to work?\r\n    STATIC_ASSERT(is_same_v<decltype(subtract_with_carry_engine<unsigned short, 16, 10, 24>::default_seed),\r\n        const uint_least32_t>);\r\n    STATIC_ASSERT(\r\n        is_same_v<decltype(subtract_with_carry_engine<unsigned int, 32, 10, 24>::default_seed), const uint_least32_t>);\r\n    STATIC_ASSERT(\r\n        is_same_v<decltype(subtract_with_carry_engine<unsigned long, 32, 10, 24>::default_seed), const uint_least32_t>);\r\n    STATIC_ASSERT(is_same_v<decltype(subtract_with_carry_engine<unsigned long long, 64, 10, 24>::default_seed),\r\n        const uint_least32_t>);\r\n    assert(run_10k(subtract_with_carry_engine<unsigned long long, 64, 10, 24>{}) == 6793538734622947770ULL);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0579795_inplace_merge_out_of_memory/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0579795_inplace_merge_out_of_memory/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <cstdlib>\r\n#include <limits>\r\n#include <new>\r\n\r\n#ifdef __cpp_lib_execution\r\n#include <execution>\r\n#endif // __cpp_lib_execution\r\n\r\nusing namespace std;\r\n\r\nconstexpr auto size_max = numeric_limits<size_t>::max();\r\n\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\n\r\nconstexpr size_t prohibit_attempts_to_allocate = size_max; // extension provided by our STL\r\nconstexpr size_t max_allocate                  = size_max - 1;\r\nsize_t g_max_memory                            = max_allocate;\r\n\r\nvoid* operator new(size_t size) {\r\n    void* const p = ::operator new(size, nothrow);\r\n\r\n    if (p) {\r\n        return p;\r\n    }\r\n\r\n    abort();\r\n}\r\n\r\nvoid* operator new(size_t size, const nothrow_t&) noexcept {\r\n    assert(size != prohibit_attempts_to_allocate);\r\n    if (size >= g_max_memory) {\r\n        return nullptr;\r\n    } else {\r\n        return malloc(size == 0 ? 1 : size);\r\n    }\r\n}\r\n\r\nvoid operator delete(void* ptr) noexcept {\r\n    ::operator delete(ptr, nothrow);\r\n}\r\n\r\nvoid operator delete(void* ptr, const nothrow_t&) noexcept {\r\n    free(ptr);\r\n}\r\n\r\nvoid* operator new[](size_t size) {\r\n    return ::operator new(size);\r\n}\r\n\r\nvoid* operator new[](size_t size, const nothrow_t&) noexcept {\r\n    return ::operator new(size, nothrow);\r\n}\r\n\r\nvoid operator delete[](void* ptr) noexcept {\r\n    ::operator delete(ptr);\r\n}\r\n\r\nvoid operator delete[](void* ptr, const nothrow_t&) noexcept {\r\n    ::operator delete(ptr, nothrow);\r\n}\r\n\r\nvoid test() {\r\n    array<int, 9> a = {{2, 4, 6, 8, 10, 6, -100, -200, -300}};\r\n\r\n    inplace_merge(a.begin(), a.begin() + 5, a.begin() + 6);\r\n\r\n    const array<int, 9> correct = {{2, 4, 6, 6, 8, 10, -100, -200, -300}};\r\n\r\n    assert(a == correct);\r\n}\r\n\r\nvoid do_one_test(const array<int, 9>& orig, const size_t i, const size_t k) {\r\n    array<int, 9> a = orig;\r\n\r\n    inplace_merge(a.begin(), a.begin() + static_cast<ptrdiff_t>(i), a.begin() + static_cast<ptrdiff_t>(i + k));\r\n\r\n    assert(is_permutation(a.begin(), a.begin() + static_cast<ptrdiff_t>(i + k), orig.begin()));\r\n    assert(is_sorted(a.begin(), a.begin() + static_cast<ptrdiff_t>(i + k)));\r\n    assert(equal(a.begin() + static_cast<ptrdiff_t>(i + k), a.end(), orig.begin() + static_cast<ptrdiff_t>(i + k)));\r\n}\r\n\r\nvoid test_every_permutation_with_available_memory_of(size_t mem) {\r\n    g_max_memory    = mem * sizeof(int);\r\n    array<int, 9> a = {{10, 20, 20, 30, 30, 30, 40, 40, 50}};\r\n\r\n    do {\r\n        for (size_t i = 0; i <= a.size(); ++i) {\r\n            for (size_t k = 0; k <= a.size() - i; ++k) {\r\n                if (is_sorted(a.begin(), a.begin() + static_cast<ptrdiff_t>(i))\r\n                    && is_sorted(a.begin() + static_cast<ptrdiff_t>(i), a.begin() + static_cast<ptrdiff_t>(i + k))) {\r\n                    do_one_test(a, i, k);\r\n                }\r\n            }\r\n        }\r\n    } while (next_permutation(a.begin(), a.end()));\r\n}\r\n\r\nvoid test_more() {\r\n    for (size_t mem = 0; mem < 9; ++mem) {\r\n        test_every_permutation_with_available_memory_of(mem);\r\n    }\r\n}\r\n\r\nstruct int_ish {\r\n    /* implicit */ int_ish(int init) : value(init) {}\r\n    int_ish(const int_ish&)            = delete;\r\n    int_ish(int_ish&&)                 = default;\r\n    int_ish& operator=(const int_ish&) = delete;\r\n\r\n    int_ish& operator=(int_ish&& rhs) {\r\n        assert(this != &rhs); // tests VSO-254106\r\n        value = rhs.value;\r\n        return *this;\r\n    }\r\n\r\n    bool operator==(const int_ish& rhs) const {\r\n        return value == rhs.value;\r\n    }\r\n\r\n    int value;\r\n};\r\n\r\nvoid test_stability() {\r\n    auto comp = [](int x, int y) { return x / 10 < y / 10; };\r\n\r\n    {\r\n        array<int, 100> a = {{20, 13, 58, 85, 29, 91, 28, 99, 64, 17, 60, 44, 48, 86, 26, 89, 47, 43, 20, 51, 96, 66,\r\n            75, 19, 35, 65, 99, 42, 39, 80, 66, 18, 87, 64, 76, 33, 96, 55, 26, 98, 63, 95, 40, 65, 79, 16, 63, 68, 55,\r\n            27, 99, 55, 77, 59, 77, 11, 77, 92, 77, 16, 28, 83, 74, 77, 21, 55, 50, 73, 65, 81, 53, 68, 82, 72, 92, 64,\r\n            30, 94, 80, 86, 21, 37, 20, 90, 56, 71, 41, 15, 42, 70, 50, 90, 26, 72, 47, 41, 46, 41, 58, 94}};\r\n#ifdef __cpp_lib_execution\r\n        auto b = a;\r\n#endif\r\n\r\n        stable_sort(a.begin(), a.end(), comp);\r\n\r\n        const array<int, 100> correct = {\r\n            {13, 17, 19, 18, 16, 11, 16, 15, 20, 29, 28, 26, 20, 26, 27, 28, 21, 21, 20, 26, 35, 39, 33, 30, 37, 44, 48,\r\n                47, 43, 42, 40, 41, 42, 47, 41, 46, 41, 58, 51, 55, 55, 55, 59, 55, 50, 53, 56, 50, 58, 64, 60, 66, 65,\r\n                66, 64, 63, 65, 63, 68, 65, 68, 64, 75, 76, 79, 77, 77, 77, 77, 74, 77, 73, 72, 71, 70, 72, 85, 86, 89,\r\n                80, 87, 83, 81, 82, 80, 86, 91, 99, 96, 99, 96, 98, 95, 99, 92, 92, 94, 90, 90, 94}};\r\n\r\n        assert(a == correct);\r\n\r\n#ifdef __cpp_lib_execution\r\n        stable_sort(execution::par, b.begin(), b.end(), comp);\r\n\r\n        assert(b == correct);\r\n#endif\r\n    }\r\n\r\n    {\r\n        array<int, 100> a = {{13, 17, 19, 18, 16, 20, 29, 28, 26, 20, 26, 27, 35, 39, 33, 44, 48, 47, 43, 42, 40, 58,\r\n            51, 55, 55, 64, 60, 66, 65, 66, 64, 63, 65, 63, 68, 75, 76, 79, 85, 86, 89, 80, 87, 91, 99, 96, 99, 96, 98,\r\n            95, 11, 16, 15, 28, 21, 21, 20, 26, 30, 37, 41, 42, 47, 41, 46, 41, 55, 59, 55, 50, 53, 56, 50, 58, 65, 68,\r\n            64, 77, 77, 77, 77, 74, 77, 73, 72, 71, 70, 72, 83, 81, 82, 80, 86, 99, 92, 92, 94, 90, 90, 94}};\r\n\r\n        inplace_merge(a.begin(), a.begin() + 50, a.end(), comp);\r\n\r\n        const array<int, 100> correct = {\r\n            {13, 17, 19, 18, 16, 11, 16, 15, 20, 29, 28, 26, 20, 26, 27, 28, 21, 21, 20, 26, 35, 39, 33, 30, 37, 44, 48,\r\n                47, 43, 42, 40, 41, 42, 47, 41, 46, 41, 58, 51, 55, 55, 55, 59, 55, 50, 53, 56, 50, 58, 64, 60, 66, 65,\r\n                66, 64, 63, 65, 63, 68, 65, 68, 64, 75, 76, 79, 77, 77, 77, 77, 74, 77, 73, 72, 71, 70, 72, 85, 86, 89,\r\n                80, 87, 83, 81, 82, 80, 86, 91, 99, 96, 99, 96, 98, 95, 99, 92, 92, 94, 90, 90, 94}};\r\n\r\n        assert(a == correct);\r\n    }\r\n\r\n    {\r\n        array<int_ish, 100> a = {{20, 13, 58, 85, 29, 91, 28, 99, 64, 17, 60, 44, 48, 86, 26, 89, 47, 43, 20, 51, 96,\r\n            66, 75, 19, 35, 65, 99, 42, 39, 80, 66, 18, 87, 64, 76, 33, 96, 55, 26, 98, 63, 95, 40, 65, 79, 16, 63, 68,\r\n            55, 27, 99, 55, 77, 59, 77, 11, 77, 92, 77, 16, 28, 83, 74, 77, 21, 55, 50, 73, 65, 81, 53, 68, 82, 72, 92,\r\n            64, 30, 94, 80, 86, 21, 37, 20, 90, 56, 71, 41, 15, 42, 70, 50, 90, 26, 72, 47, 41, 46, 41, 58, 94}};\r\n\r\n        size_t predCalls{};\r\n        const auto partitionPoint         = stable_partition(a.begin(), a.end(), [&](const int_ish& x) {\r\n            ++predCalls;\r\n            return x.value < 50;\r\n        });\r\n        const array<int_ish, 100> correct = {\r\n            {20, 13, 29, 28, 17, 44, 48, 26, 47, 43, 20, 19, 35, 42, 39, 18, 33, 26, 40, 16, 27, 11, 16, 28, 21, 30, 21,\r\n                37, 20, 41, 15, 42, 26, 47, 41, 46, 41, 58, 85, 91, 99, 64, 60, 86, 89, 51, 96, 66, 75, 65, 99, 80, 66,\r\n                87, 64, 76, 96, 55, 98, 63, 95, 65, 79, 63, 68, 55, 99, 55, 77, 59, 77, 77, 92, 77, 83, 74, 77, 55, 50,\r\n                73, 65, 81, 53, 68, 82, 72, 92, 64, 94, 80, 86, 90, 56, 71, 70, 50, 90, 72, 58, 94}};\r\n\r\n        assert(predCalls == 100);\r\n        assert(partitionPoint == a.begin() + 37);\r\n        assert(a == correct);\r\n    }\r\n}\r\n\r\nvoid test_after_skipping_in_position_overhaul() {\r\n    g_max_memory = prohibit_attempts_to_allocate;\r\n    { // check that 1 element trivial cases don't fail\r\n        array<int, 1> a = {{5}};\r\n        inplace_merge(a.begin(), a.begin(), a.begin()); // empty degenerate case\r\n        inplace_merge(a.begin(), a.begin(), a.end()); // first partition eliminates everything degenerate case\r\n        inplace_merge(a.begin(), a.end(), a.end()); // second partition eliminates everything degenerate case\r\n    }\r\n\r\n    // already sorted case\r\n    do_one_test({{0, 1, 2, 3, 4, 5, 6, 7, 8}}, 4, 5);\r\n    // move 1 element from left partition to right partition case\r\n    do_one_test({{9, 1, 2, 3, 4, 5, 6, 7, 8}}, 1, 8);\r\n    // move 1 element from right partition to left partition case\r\n    do_one_test({{1, 2, 3, 4, 5, 6, 7, 8, 0}}, 8, 1);\r\n\r\n    g_max_memory = max_allocate;\r\n    // buffer left and merge left case\r\n    do_one_test({{7, 8, 0, 1, 2, 3, 4, 5, 6}}, 2, 7);\r\n    // buffer right and merge right case\r\n    do_one_test({{2, 3, 4, 5, 6, 7, 8, 0, 1}}, 7, 2);\r\n\r\n    // (divide and conquer cases tested in test_more)\r\n}\r\n\r\nint main() {\r\n    test();\r\n    test_stability();\r\n\r\n    g_max_memory = 0;\r\n\r\n    test();\r\n    test_stability();\r\n\r\n    test_after_skipping_in_position_overhaul();\r\n    test_more();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0607540_pair_tuple_rvalue_references/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0607540_pair_tuple_rvalue_references/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// N3797 12.8 [class.copy]/11:\r\n// \"A defaulted copy/move constructor for a class X is defined as deleted (8.4.3) if X has:\r\n// [...]\r\n// - for the copy constructor, a non-static data member of rvalue reference type.\"\r\n\r\n// 12.8 [class.copy]/15:\r\n// \"The implicitly-defined copy/move constructor for a non-union class X performs\r\n// a memberwise copy/move of its bases and members.\r\n// [...]\r\n// Each base or non-static data member is copied/moved in the manner appropriate to its type:\r\n// [...]\r\n// - if a member m has rvalue reference type T&&, it is direct-initialized with static_cast<T&&>(x.m);\"\r\n\r\n// 20.3.2 [pairs.pair]:\r\n// pair(const pair&) = default;\r\n// pair(pair&&) = default;\r\n\r\n// 20.4.2 [tuple.tuple]:\r\n// tuple(const tuple&) = default;\r\n// tuple(tuple&&) = default;\r\n\r\n#include <cassert>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nstruct X {\r\n    int&& rv;\r\n\r\n    explicit X(int&& i) : rv(move(i)) {}\r\n};\r\n\r\nint main() {\r\n    {\r\n        int k = 1701;\r\n        int n = 1729;\r\n\r\n        X x1(move(n));\r\n        X x3(move(x1));\r\n\r\n        assert(&x1.rv == &n);\r\n        assert(&x3.rv == &n);\r\n\r\n        pair<int&&, int&&> p1(move(k), move(n));\r\n        pair<int&&, int&&> p3(move(p1));\r\n\r\n        assert(&p1.first == &k);\r\n        assert(&p1.second == &n);\r\n        assert(&p3.first == &k);\r\n        assert(&p3.second == &n);\r\n\r\n        tuple<int&&, int&&> t1(move(k), move(n));\r\n        tuple<int&&, int&&> t3(move(t1));\r\n\r\n        assert(&get<0>(t1) == &k);\r\n        assert(&get<1>(t1) == &n);\r\n        assert(&get<0>(t3) == &k);\r\n        assert(&get<1>(t3) == &n);\r\n\r\n        auto&& f1(forward_as_tuple(move(k), move(n)));\r\n        auto f3(move(f1));\r\n\r\n        assert(&get<0>(f1) == &k);\r\n        assert(&get<1>(f1) == &n);\r\n        assert(&get<0>(f3) == &k);\r\n        assert(&get<1>(f3) == &n);\r\n    }\r\n\r\n\r\n    // Also test get<I> and get<T> on pairs of objects, lvalue references, and rvalue references.\r\n\r\n    {\r\n        pair<int, const char*> p(1729, \"meow\");\r\n        const pair<int, const char*> c(1701, \"NCC\");\r\n        pair<int, const char*> m(1024, \"kilo\");\r\n\r\n        STATIC_ASSERT(is_same_v<decltype(get<0>(p)), int&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<1>(p)), const char*&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<0>(c)), const int&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<1>(c)), const char* const&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<0>(move(m))), int&&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<1>(move(m))), const char*&&>);\r\n\r\n        STATIC_ASSERT(is_same_v<decltype(get<int>(p)), int&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<const char*>(p)), const char*&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<int>(c)), const int&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<const char*>(c)), const char* const&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<int>(move(m))), int&&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<const char*>(move(m))), const char*&&>);\r\n\r\n        assert(&get<0>(p) == &p.first);\r\n        assert(&get<1>(p) == &p.second);\r\n        assert(&get<0>(c) == &c.first);\r\n        assert(&get<1>(c) == &c.second);\r\n        assert(get<0>(move(m)) == m.first);\r\n        assert(get<1>(move(m)) == m.second);\r\n\r\n        assert(&get<int>(p) == &p.first);\r\n        assert(&get<const char*>(p) == &p.second);\r\n        assert(&get<int>(c) == &c.first);\r\n        assert(&get<const char*>(c) == &c.second);\r\n        assert(get<int>(move(m)) == m.first);\r\n        assert(get<const char*>(move(m)) == m.second);\r\n    }\r\n\r\n    {\r\n        int x  = 11;\r\n        char y = 'a';\r\n\r\n        pair<int&, char&> p(x, y);\r\n        const pair<int&, char&> c(x, y);\r\n\r\n        STATIC_ASSERT(is_same_v<decltype(get<0>(p)), int&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<1>(p)), char&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<0>(c)), int&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<1>(c)), char&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<0>(move(p))), int&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<1>(move(p))), char&>);\r\n\r\n        STATIC_ASSERT(is_same_v<decltype(get<int&>(p)), int&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<char&>(p)), char&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<int&>(c)), int&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<char&>(c)), char&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<int&>(move(p))), int&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<char&>(move(p))), char&>);\r\n\r\n        assert(&get<0>(p) == &x);\r\n        assert(&get<1>(p) == &y);\r\n        assert(&get<0>(c) == &x);\r\n        assert(&get<1>(c) == &y);\r\n        assert(&get<0>(move(p)) == &x);\r\n        assert(&get<1>(move(p)) == &y);\r\n\r\n        assert(&get<int&>(p) == &x);\r\n        assert(&get<char&>(p) == &y);\r\n        assert(&get<int&>(c) == &x);\r\n        assert(&get<char&>(c) == &y);\r\n        assert(&get<int&>(move(p)) == &x);\r\n        assert(&get<char&>(move(p)) == &y);\r\n    }\r\n\r\n    {\r\n        int x  = 11;\r\n        char y = 'a';\r\n\r\n        pair<int&&, char&&> p(move(x), move(y));\r\n        const pair<int&&, char&&> c(move(x), move(y));\r\n\r\n        STATIC_ASSERT(is_same_v<decltype(get<0>(p)), int&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<1>(p)), char&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<0>(c)), int&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<1>(c)), char&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<0>(move(p))), int&&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<1>(move(p))), char&&>);\r\n\r\n        STATIC_ASSERT(is_same_v<decltype(get<int&&>(p)), int&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<char&&>(p)), char&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<int&&>(c)), int&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<char&&>(c)), char&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<int&&>(move(p))), int&&>);\r\n        STATIC_ASSERT(is_same_v<decltype(get<char&&>(move(p))), char&&>);\r\n\r\n        assert(&get<0>(p) == &x);\r\n        assert(&get<1>(p) == &y);\r\n        assert(&get<0>(c) == &x);\r\n        assert(&get<1>(c) == &y);\r\n        assert(get<0>(move(p)) == x);\r\n        assert(get<1>(move(p)) == y);\r\n\r\n        assert(&get<int&&>(p) == &x);\r\n        assert(&get<char&&>(p) == &y);\r\n        assert(&get<int&&>(c) == &x);\r\n        assert(&get<char&&>(c) == &y);\r\n        assert(get<int&&>(move(p)) == x);\r\n        assert(get<char&&>(move(p)) == y);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0617384_empty_std_function/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0617384_empty_std_function/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n#include <memory>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nstruct X {};\r\n\r\nint main() {\r\n    function<int(int)> same;\r\n    short (*fp)(long long) = nullptr;\r\n    function<short(long long)> other;\r\n\r\n    assert(!function<int(int)>());\r\n    assert(!function<int(int)>(nullptr));\r\n    assert(!function<int(int)>(same));\r\n    assert(!function<int(int)>(move(same)));\r\n    same = nullptr;\r\n    assert(!function<int(int)>(fp));\r\n    assert(!function<int(int)>(other));\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n    allocator<int> al;\r\n    assert(!function<int(int)>(allocator_arg, al));\r\n    assert(!function<int(int)>(allocator_arg, al, nullptr));\r\n    assert(!function<int(int)>(allocator_arg, al, same));\r\n    assert(!function<int(int)>(allocator_arg, al, move(same)));\r\n    same = nullptr;\r\n    assert(!function<int(int)>(allocator_arg, al, fp));\r\n    assert(!function<int(int)>(allocator_arg, al, other));\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n\r\n    int (X::*pmf)(int) = nullptr;\r\n    int X::* pmd       = nullptr;\r\n\r\n    assert(!function<int(X, int)>(pmf));\r\n    assert(!function<int(X)>(pmd));\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n    assert(!function<int(X, int)>(allocator_arg, al, pmf));\r\n    assert(!function<int(X)>(allocator_arg, al, pmd));\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0653897_codecvt_partial/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0653897_codecvt_partial/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <locale>\r\n#include <sstream>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\ntypedef codecvt<wchar_t, char, mbstate_t> Facet;\r\n\r\nvoid convert(ostringstream& oss, const wchar_t* first, const wchar_t* last, string& output, const Facet& fac) {\r\n    char out_buf[10]{};\r\n\r\n    Facet::state_type state{};\r\n\r\n    for (;;) {\r\n        oss << \"input left: \" << last - first << \" chars\" << endl;\r\n\r\n        char* dest     = begin(out_buf);\r\n        char* dest_end = end(out_buf);\r\n\r\n        codecvt_base::result res = fac.out(state, first, last, first, dest, dest_end, dest);\r\n\r\n        switch (res) {\r\n        case codecvt_base::ok:\r\n            oss << \"conversion returned ok, \" << last - first << \" chars left, \" << dest - out_buf\r\n                << \" output chars received\" << endl;\r\n            output.append(out_buf, dest);\r\n            return;\r\n\r\n        case codecvt_base::partial:\r\n            oss << \"conversion returned partial, \" << last - first << \" chars left, \" << dest - out_buf\r\n                << \" output chars received\" << endl;\r\n\r\n            if (dest == out_buf) {\r\n                return;\r\n            }\r\n\r\n            output.append(out_buf, dest);\r\n            break;\r\n\r\n        case codecvt_base::noconv:\r\n            oss << \"conversion returned noconv\" << endl;\r\n            return;\r\n\r\n        case codecvt_base::error:\r\n            oss << \"conversion returned error\" << endl;\r\n            return;\r\n\r\n        default:\r\n            oss << \"uh oh\" << endl;\r\n            return;\r\n        }\r\n    }\r\n}\r\n\r\nint main() {\r\n    wstring input(15, L'x');\r\n    string output;\r\n    locale loc;\r\n    ostringstream oss;\r\n\r\n    convert(oss, input.c_str(), input.c_str() + input.size(), output, use_facet<Facet>(loc));\r\n\r\n    oss << \"output size: \" << output.size() << \": \" << output << endl;\r\n\r\n    assert(oss.str()\r\n           == \"input left: 15 chars\\n\"\r\n              \"conversion returned partial, 5 chars left, 10 output chars received\\n\"\r\n              \"input left: 5 chars\\n\"\r\n              \"conversion returned ok, 0 chars left, 5 output chars received\\n\"\r\n              \"output size: 15: xxxxxxxxxxxxxxx\\n\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0671816_list_splice/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0671816_list_splice/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n#if _ITERATOR_DEBUG_LEVEL != 1\r\n    {\r\n        list<int> l = {100, 200, 300, 400, 500};\r\n\r\n        auto a0 = l.begin();\r\n        auto a1 = next(l.begin(), 1);\r\n        auto a2 = next(l.begin(), 2);\r\n        auto a3 = next(l.begin(), 3);\r\n        auto a4 = next(l.begin(), 4);\r\n        auto a5 = l.end();\r\n\r\n        list<int> other = {11, 22, 33, 44, 55};\r\n\r\n        auto b0 = other.begin();\r\n        auto b1 = next(other.begin(), 1);\r\n        auto b2 = next(other.begin(), 2);\r\n        auto b3 = next(other.begin(), 3);\r\n        auto b4 = next(other.begin(), 4);\r\n        auto b5 = other.end();\r\n\r\n        l.splice(next(l.begin(), 3), other);\r\n\r\n        assert(*a0 == 100);\r\n        assert(*a1 == 200);\r\n        assert(*a2 == 300);\r\n        assert(*a3 == 400);\r\n        assert(*a4 == 500);\r\n        assert(a5 == l.end());\r\n\r\n        assert(*b0 == 11);\r\n        assert(*b1 == 22);\r\n        assert(*b2 == 33);\r\n        assert(*b3 == 44);\r\n        assert(*b4 == 55);\r\n        assert(b5 == other.end());\r\n\r\n        assert(l.begin() == a0);\r\n        assert(next(l.begin(), 1) == a1);\r\n        assert(next(l.begin(), 2) == a2);\r\n        assert(next(l.begin(), 3) == b0);\r\n        assert(next(l.begin(), 4) == b1);\r\n        assert(next(l.begin(), 5) == b2);\r\n        assert(next(l.begin(), 6) == b3);\r\n        assert(next(l.begin(), 7) == b4);\r\n        assert(next(l.begin(), 8) == a3);\r\n        assert(next(l.begin(), 9) == a4);\r\n        assert(next(l.begin(), 10) == a5);\r\n\r\n        assert(++b4 == a3);\r\n    }\r\n\r\n    {\r\n        list<int> l = {100, 200, 300, 400, 500};\r\n\r\n        auto a0 = l.begin();\r\n        auto a1 = next(l.begin(), 1);\r\n        auto a2 = next(l.begin(), 2);\r\n        auto a3 = next(l.begin(), 3);\r\n        auto a4 = next(l.begin(), 4);\r\n        auto a5 = l.end();\r\n\r\n        list<int> other = {11, 22, 33, 44, 55};\r\n\r\n        auto b0  = other.begin();\r\n        auto b1  = next(other.begin(), 1);\r\n        auto b2  = next(other.begin(), 2);\r\n        auto b3x = next(other.begin(), 3);\r\n        auto b4  = next(other.begin(), 4);\r\n        auto b3y = next(other.begin(), 3);\r\n        auto b5  = other.end();\r\n        auto b3z = next(other.begin(), 3);\r\n\r\n        l.splice(next(l.begin(), 2), other, next(other.begin(), 3));\r\n\r\n        assert(*a0 == 100);\r\n        assert(*a1 == 200);\r\n        assert(*a2 == 300);\r\n        assert(*a3 == 400);\r\n        assert(*a4 == 500);\r\n        assert(a5 == l.end());\r\n\r\n        assert(*b0 == 11);\r\n        assert(*b1 == 22);\r\n        assert(*b2 == 33);\r\n        assert(*b3x == 44);\r\n        assert(*b4 == 55);\r\n        assert(*b3y == 44);\r\n        assert(b5 == other.end());\r\n        assert(*b3z == 44);\r\n\r\n        assert(l.begin() == a0);\r\n        assert(next(l.begin(), 1) == a1);\r\n        assert(next(l.begin(), 2) == b3x);\r\n        assert(next(l.begin(), 2) == b3y);\r\n        assert(next(l.begin(), 2) == b3z);\r\n        assert(next(l.begin(), 3) == a2);\r\n        assert(next(l.begin(), 4) == a3);\r\n        assert(next(l.begin(), 5) == a4);\r\n        assert(next(l.begin(), 6) == a5);\r\n\r\n        assert(++b3z == a2);\r\n    }\r\n\r\n    {\r\n        list<int> l = {100, 200, 300, 400, 500};\r\n\r\n        auto a0  = l.begin();\r\n        auto a1  = next(l.begin(), 1);\r\n        auto a2  = next(l.begin(), 2);\r\n        auto a3x = next(l.begin(), 3);\r\n        auto a4  = next(l.begin(), 4);\r\n        auto a3y = next(l.begin(), 3);\r\n        auto a5  = l.end();\r\n        auto a3z = next(l.begin(), 3);\r\n\r\n        l.splice(next(l.begin(), 1), l, next(l.begin(), 3));\r\n\r\n        assert(*a0 == 100);\r\n        assert(*a1 == 200);\r\n        assert(*a2 == 300);\r\n        assert(*a3x == 400);\r\n        assert(*a4 == 500);\r\n        assert(*a3y == 400);\r\n        assert(a5 == l.end());\r\n        assert(*a3z == 400);\r\n\r\n        assert(l.begin() == a0);\r\n        assert(next(l.begin(), 1) == a3x);\r\n        assert(next(l.begin(), 1) == a3y);\r\n        assert(next(l.begin(), 1) == a3z);\r\n        assert(next(l.begin(), 2) == a1);\r\n        assert(next(l.begin(), 3) == a2);\r\n        assert(next(l.begin(), 4) == a4);\r\n        assert(next(l.begin(), 5) == a5);\r\n\r\n        assert(++a3z == a1);\r\n    }\r\n\r\n    {\r\n        list<int> l = {100, 200, 300, 400, 500};\r\n\r\n        auto a0  = l.begin();\r\n        auto a1  = next(l.begin(), 1);\r\n        auto a2  = next(l.begin(), 2);\r\n        auto a3x = next(l.begin(), 3);\r\n        auto a4  = next(l.begin(), 4);\r\n        auto a3y = next(l.begin(), 3);\r\n        auto a5  = l.end();\r\n        auto a3z = next(l.begin(), 3);\r\n\r\n        l.splice(next(l.begin(), 3), l, next(l.begin(), 3));\r\n\r\n        assert(*a0 == 100);\r\n        assert(*a1 == 200);\r\n        assert(*a2 == 300);\r\n        assert(*a3x == 400);\r\n        assert(*a4 == 500);\r\n        assert(*a3y == 400);\r\n        assert(a5 == l.end());\r\n        assert(*a3z == 400);\r\n\r\n        assert(l.begin() == a0);\r\n        assert(next(l.begin(), 1) == a1);\r\n        assert(next(l.begin(), 2) == a2);\r\n        assert(next(l.begin(), 3) == a3x);\r\n        assert(next(l.begin(), 3) == a3y);\r\n        assert(next(l.begin(), 3) == a3z);\r\n        assert(next(l.begin(), 4) == a4);\r\n        assert(next(l.begin(), 5) == a5);\r\n\r\n        assert(++a3z == a4);\r\n    }\r\n\r\n    {\r\n        list<int> l = {100, 200, 300, 400, 500};\r\n\r\n        auto a0  = l.begin();\r\n        auto a1  = next(l.begin(), 1);\r\n        auto a2  = next(l.begin(), 2);\r\n        auto a3x = next(l.begin(), 3);\r\n        auto a4  = next(l.begin(), 4);\r\n        auto a3y = next(l.begin(), 3);\r\n        auto a5  = l.end();\r\n        auto a3z = next(l.begin(), 3);\r\n\r\n        l.splice(next(l.begin(), 4), l, next(l.begin(), 3));\r\n\r\n        assert(*a0 == 100);\r\n        assert(*a1 == 200);\r\n        assert(*a2 == 300);\r\n        assert(*a3x == 400);\r\n        assert(*a4 == 500);\r\n        assert(*a3y == 400);\r\n        assert(a5 == l.end());\r\n        assert(*a3z == 400);\r\n\r\n        assert(l.begin() == a0);\r\n        assert(next(l.begin(), 1) == a1);\r\n        assert(next(l.begin(), 2) == a2);\r\n        assert(next(l.begin(), 3) == a3x);\r\n        assert(next(l.begin(), 3) == a3y);\r\n        assert(next(l.begin(), 3) == a3z);\r\n        assert(next(l.begin(), 4) == a4);\r\n        assert(next(l.begin(), 5) == a5);\r\n\r\n        assert(++a3z == a4);\r\n    }\r\n\r\n    {\r\n        list<int> l = {100, 200, 300, 400, 500};\r\n\r\n        auto a0 = l.begin();\r\n        auto a1 = next(l.begin(), 1);\r\n        auto a2 = next(l.begin(), 2);\r\n        auto a3 = next(l.begin(), 3);\r\n        auto a4 = next(l.begin(), 4);\r\n        auto a5 = l.end();\r\n\r\n        list<int> other = {11, 22, 33, 44, 55};\r\n\r\n        auto b0 = other.begin();\r\n        auto b1 = next(other.begin(), 1);\r\n        auto b2 = next(other.begin(), 2);\r\n        auto b3 = next(other.begin(), 3);\r\n        auto b4 = next(other.begin(), 4);\r\n        auto b5 = other.end();\r\n\r\n        auto c0 = b0;\r\n        auto c1 = b1;\r\n        auto c2 = b2;\r\n        auto c3 = b3;\r\n        auto c4 = b4;\r\n        auto c5 = b5;\r\n\r\n        l.splice(next(l.begin(), 3), other, next(other.begin(), 1), next(other.begin(), 4));\r\n\r\n        assert(*a0 == 100);\r\n        assert(*a1 == 200);\r\n        assert(*a2 == 300);\r\n        assert(*a3 == 400);\r\n        assert(*a4 == 500);\r\n        assert(a5 == l.end());\r\n\r\n        assert(*b0 == 11);\r\n        assert(*b1 == 22);\r\n        assert(*b2 == 33);\r\n        assert(*b3 == 44);\r\n        assert(*b4 == 55);\r\n        assert(b5 == other.end());\r\n\r\n        assert(*c0 == 11);\r\n        assert(*c1 == 22);\r\n        assert(*c2 == 33);\r\n        assert(*c3 == 44);\r\n        assert(*c4 == 55);\r\n        assert(c5 == other.end());\r\n\r\n        assert(l.begin() == a0);\r\n        assert(next(l.begin(), 1) == a1);\r\n        assert(next(l.begin(), 2) == a2);\r\n        assert(next(l.begin(), 3) == b1);\r\n        assert(next(l.begin(), 3) == c1);\r\n        assert(next(l.begin(), 4) == b2);\r\n        assert(next(l.begin(), 4) == c2);\r\n        assert(next(l.begin(), 5) == b3);\r\n        assert(next(l.begin(), 5) == c3);\r\n        assert(next(l.begin(), 6) == a3);\r\n        assert(next(l.begin(), 7) == a4);\r\n        assert(next(l.begin(), 8) == a5);\r\n\r\n        assert(other.begin() == b0);\r\n        assert(other.begin() == c0);\r\n        assert(next(other.begin(), 1) == b4);\r\n        assert(next(other.begin(), 1) == c4);\r\n        assert(next(other.begin(), 2) == b5);\r\n        assert(next(other.begin(), 2) == c5);\r\n\r\n        assert(l.end() == a5);\r\n        assert(prev(l.end(), 1) == a4);\r\n        assert(prev(l.end(), 2) == a3);\r\n        assert(prev(l.end(), 3) == b3);\r\n        assert(prev(l.end(), 3) == c3);\r\n        assert(prev(l.end(), 4) == b2);\r\n        assert(prev(l.end(), 4) == c2);\r\n        assert(prev(l.end(), 5) == b1);\r\n        assert(prev(l.end(), 5) == c1);\r\n        assert(prev(l.end(), 6) == a2);\r\n        assert(prev(l.end(), 7) == a1);\r\n        assert(prev(l.end(), 8) == a0);\r\n\r\n        assert(other.end() == b5);\r\n        assert(other.end() == c5);\r\n        assert(prev(other.end(), 1) == b4);\r\n        assert(prev(other.end(), 1) == c4);\r\n        assert(prev(other.end(), 2) == b0);\r\n        assert(prev(other.end(), 2) == c0);\r\n\r\n        assert(++c3 == a3);\r\n        assert(--b1 == a2);\r\n    }\r\n\r\n    {\r\n        list<int> l = {100, 200, 300, 400, 500};\r\n\r\n        auto a0 = l.begin();\r\n        auto a1 = next(l.begin(), 1);\r\n        auto a2 = next(l.begin(), 2);\r\n        auto a3 = next(l.begin(), 3);\r\n        auto a4 = next(l.begin(), 4);\r\n        auto a5 = l.end();\r\n\r\n        l.splice(l.begin(), l, next(l.begin(), 2), next(l.begin(), 4));\r\n\r\n        assert(*a0 == 100);\r\n        assert(*a1 == 200);\r\n        assert(*a2 == 300);\r\n        assert(*a3 == 400);\r\n        assert(*a4 == 500);\r\n        assert(a5 == l.end());\r\n\r\n        assert(l.begin() == a2);\r\n        assert(next(l.begin(), 1) == a3);\r\n        assert(next(l.begin(), 2) == a0);\r\n        assert(next(l.begin(), 3) == a1);\r\n        assert(next(l.begin(), 4) == a4);\r\n        assert(next(l.begin(), 5) == a5);\r\n\r\n        assert(++a3 == a0);\r\n    }\r\n\r\n    {\r\n        list<int> l = {100, 200, 300, 400, 500};\r\n\r\n        auto a0 = l.begin();\r\n        auto a1 = next(l.begin(), 1);\r\n        auto a2 = next(l.begin(), 2);\r\n        auto a3 = next(l.begin(), 3);\r\n        auto a4 = next(l.begin(), 4);\r\n        auto a5 = l.end();\r\n\r\n        l.splice(next(l.begin(), 4), l, next(l.begin(), 2), next(l.begin(), 4));\r\n\r\n        assert(*a0 == 100);\r\n        assert(*a1 == 200);\r\n        assert(*a2 == 300);\r\n        assert(*a3 == 400);\r\n        assert(*a4 == 500);\r\n        assert(a5 == l.end());\r\n\r\n        assert(l.begin() == a0);\r\n        assert(next(l.begin(), 1) == a1);\r\n        assert(next(l.begin(), 2) == a2);\r\n        assert(next(l.begin(), 3) == a3);\r\n        assert(next(l.begin(), 4) == a4);\r\n        assert(next(l.begin(), 5) == a5);\r\n    }\r\n\r\n    {\r\n        forward_list<int> l = {1, 2, 3};\r\n        auto it             = l.begin();\r\n        forward_list<int> other;\r\n        other.splice_after(other.before_begin(), l);\r\n        for (int idx = 1; idx <= 3; ++idx) {\r\n            assert(*it == idx);\r\n            ++it;\r\n        }\r\n\r\n        assert(it == other.end());\r\n    }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 1\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0696045_future_wait_for/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0696045_future_wait_for/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <future>\r\n\r\nusing namespace std;\r\n\r\nint func() {\r\n    return 1729;\r\n}\r\n\r\nint main() {\r\n    { // DevDiv-482796 \"C++11 unexpected behavior for std::future::wait_for and std::packaged_task\"\r\n        packaged_task<int()> pt(func);\r\n\r\n        future<int> f = pt.get_future();\r\n\r\n        assert(f.wait_for(chrono::seconds(0)) == future_status::timeout);\r\n\r\n        pt();\r\n\r\n        assert(f.wait_for(chrono::seconds(0)) == future_status::ready);\r\n\r\n        assert(f.get() == 1729);\r\n    }\r\n\r\n    { // DevDiv-696045 \"<future>: The function wait_for() wait until timeout.\"\r\n        future<int> f = async(launch::deferred, func);\r\n\r\n        const auto dur = chrono::minutes(5);\r\n\r\n        const auto start = chrono::steady_clock::now();\r\n\r\n        assert(f.wait_for(dur) == future_status::deferred);\r\n\r\n        const auto finish = chrono::steady_clock::now();\r\n\r\n        // Technically, this is an improper timing assumption.\r\n        // In practice, there's no way wait_for()'s immediate return will take 5 minutes.\r\n        assert(finish < start + dur);\r\n\r\n\r\n        assert(f.wait_for(chrono::seconds(0)) == future_status::deferred);\r\n\r\n        f.wait();\r\n\r\n        assert(f.wait_for(chrono::seconds(0)) == future_status::ready);\r\n\r\n        assert(f.get() == 1729);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0704582_ratio/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0704582_ratio/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <ratio>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nSTATIC_ASSERT(is_same_v<ratio_add<ratio<30, 8>, ratio<42, 27>>, ratio<191, 36>>);\r\nSTATIC_ASSERT(is_same_v<ratio_subtract<ratio<30, 8>, ratio<42, 27>>, ratio<79, 36>>);\r\nSTATIC_ASSERT(is_same_v<ratio_multiply<ratio<30, 8>, ratio<42, 27>>, ratio<35, 6>>);\r\nSTATIC_ASSERT(is_same_v<ratio_divide<ratio<30, 8>, ratio<27, 42>>, ratio<35, 6>>);\r\n\r\nSTATIC_ASSERT(ratio_equal_v<ratio<6, 10>, ratio<3, 5>>);\r\nSTATIC_ASSERT(!ratio_not_equal_v<ratio<6, 10>, ratio<3, 5>>);\r\n\r\nconst long long Two30 = 1LL << 30;\r\nconst long long Two32 = 1LL << 32;\r\ntypedef ratio<Two30, Two32> Quarter;\r\ntypedef ratio<Two32, Two30> Four;\r\n\r\nSTATIC_ASSERT(ratio_less_v<Quarter, Four>);\r\nSTATIC_ASSERT(ratio_less_equal_v<Quarter, Four>);\r\nSTATIC_ASSERT(ratio_greater_v<Four, Quarter>);\r\nSTATIC_ASSERT(ratio_greater_equal_v<Four, Quarter>);\r\n\r\nSTATIC_ASSERT(is_same_v<ratio_add<ratio<0, 5>, ratio<0, 5>>, ratio<0, 1>>);\r\nSTATIC_ASSERT(is_same_v<ratio_subtract<ratio<0, 5>, ratio<0, 5>>, ratio<0, 1>>);\r\nSTATIC_ASSERT(is_same_v<ratio_multiply<ratio<0, 5>, ratio<0, 5>>, ratio<0, 1>>);\r\nSTATIC_ASSERT(is_same_v<ratio_divide<ratio<0, 5>, ratio<7, 7>>, ratio<0, 1>>);\r\nSTATIC_ASSERT(ratio_equal_v<ratio<0, 5>, ratio<0, 5>>);\r\nSTATIC_ASSERT(!ratio_not_equal_v<ratio<0, 5>, ratio<0, 5>>);\r\nSTATIC_ASSERT(!ratio_less_v<ratio<0, 5>, ratio<0, 5>>);\r\nSTATIC_ASSERT(ratio_less_equal_v<ratio<0, 5>, ratio<0, 5>>);\r\nSTATIC_ASSERT(!ratio_greater_v<ratio<0, 5>, ratio<0, 5>>);\r\nSTATIC_ASSERT(ratio_greater_equal_v<ratio<0, 5>, ratio<0, 5>>);\r\n\r\n// ratio_add must use typename ratio<>::type internally.\r\n// This is forbidden from returning ratio<68, 30>.\r\nSTATIC_ASSERT(is_same_v<ratio_add<ratio<7, 6>, ratio<11, 10>>, ratio<34, 15>>);\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0732166_unordered_strong_guarantee/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0732166_unordered_strong_guarantee/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <map>\r\n#include <new>\r\n#include <set>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\n\r\nint g_allocations_remaining = 1000000;\r\n\r\nvoid* operator new(size_t size, const nothrow_t&) noexcept {\r\n    if (g_allocations_remaining == 0) {\r\n        return nullptr;\r\n    }\r\n\r\n    --g_allocations_remaining;\r\n\r\n    return malloc(size == 0 ? 1 : size);\r\n}\r\n\r\nvoid* operator new(size_t size) {\r\n    void* const p = ::operator new(size, nothrow);\r\n\r\n    if (p) {\r\n        return p;\r\n    } else {\r\n        throw bad_alloc();\r\n    }\r\n}\r\n\r\nvoid operator delete(void* ptr, const nothrow_t&) noexcept {\r\n    free(ptr);\r\n}\r\n\r\nvoid operator delete(void* ptr) noexcept {\r\n    ::operator delete(ptr, nothrow);\r\n}\r\n\r\nvoid* operator new[](size_t size, const nothrow_t&) noexcept {\r\n    return ::operator new(size, nothrow);\r\n}\r\n\r\nvoid* operator new[](size_t size) {\r\n    return ::operator new(size);\r\n}\r\n\r\nvoid operator delete[](void* ptr, const nothrow_t&) noexcept {\r\n    ::operator delete(ptr, nothrow);\r\n}\r\n\r\nvoid operator delete[](void* ptr) noexcept {\r\n    ::operator delete(ptr);\r\n}\r\n\r\nint main() {\r\n    {\r\n        // Basic tests.\r\n        const vector<int> v = {10, 32, 20, 22, 11, 32, 21, 31, 20, 32, 31, 30, 12, 31, 30, 21, 22, 30};\r\n\r\n        const vector<pair<int, int>> vp = {{10, -40}, {32, -41}, {20, -42}, {22, -43}, {11, -44}, {32, -45}, {21, -46},\r\n            {31, -47}, {20, -48}, {32, -49}, {31, -50}, {30, -51}, {12, -52}, {31, -53}, {30, -54}, {21, -55},\r\n            {22, -56}, {30, -57}};\r\n\r\n        const set<int> s(v.begin(), v.end());\r\n        const multiset<int> ms(v.begin(), v.end());\r\n        const map<int, int> m(vp.begin(), vp.end());\r\n        const multimap<int, int> mm(vp.begin(), vp.end());\r\n\r\n        const unordered_set<int> us(v.begin(), v.end());\r\n        const unordered_multiset<int> ums(v.begin(), v.end());\r\n        const unordered_map<int, int> um(vp.begin(), vp.end());\r\n        const unordered_multimap<int, int> umm(vp.begin(), vp.end());\r\n\r\n        assert(is_permutation(s.begin(), s.end(), us.begin(), us.end()));\r\n        assert(is_permutation(ms.begin(), ms.end(), ums.begin(), ums.end()));\r\n        assert(is_permutation(m.begin(), m.end(), um.begin(), um.end()));\r\n        assert(is_permutation(mm.begin(), mm.end(), umm.begin(), umm.end()));\r\n    }\r\n\r\n    // N3936 23.2.5.1 [unord.req.except]/2:\r\n    // For unordered associative containers, if an exception is thrown by any\r\n    // operation other than the container's hash function from within an insert\r\n    // or emplace function inserting a single element, the insertion has no effect.\r\n\r\n    // /4:\r\n    // For unordered associative containers, if an exception is thrown from\r\n    // within a rehash() function other than by the container's hash function\r\n    // or comparison function, the rehash() function has no effect.\r\n\r\n    for (int k = 0; k < 5; ++k) {\r\n        g_allocations_remaining = 1000000;\r\n\r\n        unordered_set<int> us = {10, 20, 30, 40, 50, 60, 70, 80};\r\n\r\n        const vector<int> v(us.begin(), us.end());\r\n\r\n        try {\r\n            switch (k) {\r\n            case 0:\r\n                g_allocations_remaining = 0;\r\n                us.insert(90);\r\n                break;\r\n            case 1:\r\n                g_allocations_remaining = 0;\r\n                us.insert(1729);\r\n                break;\r\n            case 2:\r\n                g_allocations_remaining = 1;\r\n                us.insert(90);\r\n                break;\r\n            case 3:\r\n                g_allocations_remaining = 1;\r\n                us.insert(1729);\r\n                break;\r\n            case 4:\r\n                g_allocations_remaining = 0;\r\n                us.rehash(1024);\r\n                break;\r\n            default:\r\n                break;\r\n            }\r\n\r\n            abort();\r\n        } catch (const bad_alloc&) {\r\n            // Good.\r\n        }\r\n\r\n        assert(equal(us.begin(), us.end(), v.begin(), v.end()));\r\n\r\n        for (int n = 10; n <= 80; n += 10) {\r\n            const auto i = us.find(n);\r\n\r\n            assert(i != us.end() && *i == n);\r\n        }\r\n\r\n        assert(us.find(90) == us.end());\r\n        assert(us.find(1729) == us.end());\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0748972_function_crash_out_of_memory/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0748972_function_crash_out_of_memory/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// REQUIRES: debug_CRT\r\n\r\n#define _SILENCE_CXX23_ALIGNED_UNION_DEPRECATION_WARNING\r\n\r\n#include <cassert>\r\n#include <crtdbg.h>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <functional>\r\n#include <new>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\n\r\nint g_allocations_remaining = 1000000;\r\n\r\nvoid* operator new(size_t size, const nothrow_t&) noexcept {\r\n    if (g_allocations_remaining == 0) {\r\n        return nullptr;\r\n    }\r\n\r\n    --g_allocations_remaining;\r\n\r\n    return malloc(size == 0 ? 1 : size);\r\n}\r\n\r\nvoid* operator new(size_t size) {\r\n    void* const p = ::operator new(size, nothrow);\r\n\r\n    if (p) {\r\n        return p;\r\n    } else {\r\n        throw bad_alloc();\r\n    }\r\n}\r\n\r\nvoid operator delete(void* ptr, const nothrow_t&) noexcept {\r\n    free(ptr);\r\n}\r\n\r\nvoid operator delete(void* ptr) noexcept {\r\n    ::operator delete(ptr, nothrow);\r\n}\r\n\r\nvoid* operator new[](size_t size, const nothrow_t&) noexcept {\r\n    return ::operator new(size, nothrow);\r\n}\r\n\r\nvoid* operator new[](size_t size) {\r\n    return ::operator new(size);\r\n}\r\n\r\nvoid operator delete[](void* ptr, const nothrow_t&) noexcept {\r\n    ::operator delete(ptr, nothrow);\r\n}\r\n\r\nvoid operator delete[](void* ptr) noexcept {\r\n    ::operator delete(ptr);\r\n}\r\n\r\n\r\nvoid test(const int num) {\r\n    bool reached_switch = false;\r\n\r\n    try {\r\n        aligned_union_t<1, function<void()>> bits;\r\n        STATIC_ASSERT(sizeof(bits) >= sizeof(function<void()>));\r\n        void* pv = &bits;\r\n        memset(pv, 0xCC, sizeof(bits));\r\n\r\n        vector<int> v(10, 1729);\r\n        long long a = 0, b = 0, c = 0, d = 0, e = 0;\r\n        auto big_lambda = [v, a, b, c, d, e] {\r\n            (void) v;\r\n            (void) a;\r\n            (void) b;\r\n            (void) c;\r\n            (void) d;\r\n            (void) e;\r\n        };\r\n\r\n        function<void()> src_function(big_lambda);\r\n\r\n        reached_switch = true;\r\n\r\n        switch (num) {\r\n        case 0:\r\n            // Verify that std::function construction doesn't crash when it can't allocate memory.\r\n            g_allocations_remaining = 0;\r\n            ::new (pv) function<void()>(big_lambda);\r\n            break;\r\n\r\n        case 1:\r\n            // Verify that std::function construction doesn't leak when it can allocate memory, but the target functor's\r\n            // copy ctor throws.\r\n            g_allocations_remaining = 1;\r\n            ::new (pv) function<void()>(big_lambda);\r\n            break;\r\n\r\n        case 2:\r\n            // Verify that std::function copy construction doesn't crash when it can't allocate memory.\r\n            g_allocations_remaining = 0;\r\n            ::new (pv) function<void()>(src_function);\r\n            break;\r\n\r\n        case 3:\r\n            // Verify that std::function copy construction doesn't leak when it can allocate memory, but the target\r\n            // functor's copy ctor throws.\r\n            g_allocations_remaining = 1;\r\n            ::new (pv) function<void()>(src_function);\r\n            break;\r\n\r\n        default:\r\n            abort();\r\n        }\r\n    } catch (const bad_alloc&) {\r\n        if (!reached_switch) {\r\n            abort();\r\n        }\r\n\r\n        g_allocations_remaining = 1000000;\r\n\r\n        if (_CrtDumpMemoryLeaks()) {\r\n            abort();\r\n        }\r\n\r\n        return;\r\n    }\r\n\r\n    abort();\r\n}\r\n\r\nint main() {\r\n    for (int num = 0; num < 4; ++num) {\r\n        test(num);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0823534_transparent_lookup/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0823534_transparent_lookup/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <iterator>\r\n#include <map>\r\n#include <set>\r\n#include <string>\r\n#include <tuple>\r\n\r\nusing namespace std;\r\n\r\nbool size_less(const string& l, const string& r) {\r\n    return make_tuple(l.size(), ref(l)) < make_tuple(r.size(), ref(r));\r\n}\r\n\r\nstruct Kl {\r\n    typedef void is_transparent;\r\n    bool operator()(const string& l, const string& r) const {\r\n        return size_less(l, r);\r\n    }\r\n    bool operator()(const string& l, const int n) const {\r\n        return l.size() < static_cast<size_t>(n);\r\n    }\r\n};\r\n\r\nstruct Ku {\r\n    typedef void is_transparent;\r\n    bool operator()(const string& l, const string& r) const {\r\n        return size_less(l, r);\r\n    }\r\n    bool operator()(const int n, const string& r) const {\r\n        return static_cast<size_t>(n) < r.size();\r\n    }\r\n};\r\n\r\nstruct Ke {\r\n    typedef void is_transparent;\r\n    bool operator()(const string& l, const string& r) const {\r\n        return size_less(l, r);\r\n    }\r\n    bool operator()(const string& l, const int n) const {\r\n        return l.size() < static_cast<size_t>(n);\r\n    }\r\n    bool operator()(const int n, const string& r) const {\r\n        return static_cast<size_t>(n) < r.size();\r\n    }\r\n};\r\n\r\ntemplate class std::multiset<string>;\r\ntemplate class std::multiset<string, Kl>;\r\ntemplate class std::multiset<string, Ku>;\r\ntemplate class std::multiset<string, Ke>;\r\ntemplate class std::multiset<string, less<>>;\r\ntemplate class std::set<string, Ke>;\r\ntemplate class std::multimap<string, int, Ke>;\r\ntemplate class std::map<string, int, Ke>;\r\n\r\nint main() {\r\n    static const char* const arr[] = {\r\n        \"ape\", // 0\r\n        \"bat\", // 1\r\n        \"cat\", // 2\r\n        \"bear\", // 3\r\n        \"wolf\", // 4\r\n        \"raven\", // 5\r\n        \"giraffe\", // 6\r\n        \"panther\", // 7\r\n        \"unicorn\", // 8\r\n        \"direwolf\", // 9\r\n        \"elephant\" // 10\r\n    };\r\n\r\n    {\r\n        multiset<string, Kl> l(begin(arr), end(arr));\r\n\r\n        assert(end(arr) - begin(arr) == distance(l.begin(), l.end()));\r\n        assert(equal(begin(arr), end(arr), l.begin()));\r\n\r\n        assert(l.lower_bound(2) == next(l.begin(), 0));\r\n        assert(l.lower_bound(3) == next(l.begin(), 0));\r\n        assert(l.lower_bound(4) == next(l.begin(), 3));\r\n        assert(l.lower_bound(5) == next(l.begin(), 5));\r\n        assert(l.lower_bound(6) == next(l.begin(), 6));\r\n        assert(l.lower_bound(7) == next(l.begin(), 6));\r\n        assert(l.lower_bound(8) == next(l.begin(), 9));\r\n        assert(l.lower_bound(9) == next(l.begin(), 11));\r\n\r\n        const auto& cl = l;\r\n\r\n        assert(cl.lower_bound(2) == next(cl.begin(), 0));\r\n        assert(cl.lower_bound(3) == next(cl.begin(), 0));\r\n        assert(cl.lower_bound(4) == next(cl.begin(), 3));\r\n        assert(cl.lower_bound(5) == next(cl.begin(), 5));\r\n        assert(cl.lower_bound(6) == next(cl.begin(), 6));\r\n        assert(cl.lower_bound(7) == next(cl.begin(), 6));\r\n        assert(cl.lower_bound(8) == next(cl.begin(), 9));\r\n        assert(cl.lower_bound(9) == next(cl.begin(), 11));\r\n    }\r\n\r\n    {\r\n        multiset<string, Ku> u(begin(arr), end(arr));\r\n\r\n        assert(end(arr) - begin(arr) == distance(u.begin(), u.end()));\r\n        assert(equal(begin(arr), end(arr), u.begin()));\r\n\r\n        assert(u.upper_bound(2) == next(u.begin(), 0));\r\n        assert(u.upper_bound(3) == next(u.begin(), 3));\r\n        assert(u.upper_bound(4) == next(u.begin(), 5));\r\n        assert(u.upper_bound(5) == next(u.begin(), 6));\r\n        assert(u.upper_bound(6) == next(u.begin(), 6));\r\n        assert(u.upper_bound(7) == next(u.begin(), 9));\r\n        assert(u.upper_bound(8) == next(u.begin(), 11));\r\n        assert(u.upper_bound(9) == next(u.begin(), 11));\r\n\r\n        const auto& cu = u;\r\n\r\n        assert(cu.upper_bound(2) == next(cu.begin(), 0));\r\n        assert(cu.upper_bound(3) == next(cu.begin(), 3));\r\n        assert(cu.upper_bound(4) == next(cu.begin(), 5));\r\n        assert(cu.upper_bound(5) == next(cu.begin(), 6));\r\n        assert(cu.upper_bound(6) == next(cu.begin(), 6));\r\n        assert(cu.upper_bound(7) == next(cu.begin(), 9));\r\n        assert(cu.upper_bound(8) == next(cu.begin(), 11));\r\n        assert(cu.upper_bound(9) == next(cu.begin(), 11));\r\n    }\r\n\r\n    {\r\n        multiset<string, Ke> e(begin(arr), end(arr));\r\n        set<string, Ke> f(begin(arr), end(arr));\r\n        multimap<string, int, Ke> g{{\"ape\", 0}, {\"bat\", 1}, {\"cat\", 2}, {\"bear\", 3}, {\"wolf\", 4}, {\"raven\", 5},\r\n            {\"giraffe\", 6}, {\"panther\", 7}, {\"unicorn\", 8}, {\"direwolf\", 9}, {\"elephant\", 10}};\r\n        map<string, int, Ke> h{{\"ape\", 0}, {\"bat\", 1}, {\"cat\", 2}, {\"bear\", 3}, {\"wolf\", 4}, {\"raven\", 5},\r\n            {\"giraffe\", 6}, {\"panther\", 7}, {\"unicorn\", 8}, {\"direwolf\", 9}, {\"elephant\", 10}};\r\n\r\n        assert(end(arr) - begin(arr) == distance(e.begin(), e.end()));\r\n        assert(equal(begin(arr), end(arr), e.begin()));\r\n\r\n        assert(e.find(2) == e.end());\r\n        assert(e.find(3)->size() == 3);\r\n        assert(e.find(4)->size() == 4);\r\n        assert(e.find(5) == next(e.begin(), 5));\r\n        assert(e.find(6) == e.end());\r\n        assert(e.find(7)->size() == 7);\r\n        assert(e.find(8)->size() == 8);\r\n        assert(e.find(9) == e.end());\r\n\r\n#if _HAS_CXX20\r\n        assert(!e.contains(2));\r\n        assert(e.contains(3));\r\n        assert(e.contains(4));\r\n        assert(e.contains(5));\r\n        assert(!e.contains(6));\r\n        assert(e.contains(7));\r\n        assert(e.contains(8));\r\n        assert(!e.contains(9));\r\n        assert(!f.contains(2));\r\n        assert(f.contains(3));\r\n        assert(f.contains(4));\r\n        assert(f.contains(5));\r\n        assert(!f.contains(6));\r\n        assert(f.contains(7));\r\n        assert(f.contains(8));\r\n        assert(!f.contains(9));\r\n        assert(!g.contains(2));\r\n        assert(g.contains(3));\r\n        assert(g.contains(4));\r\n        assert(g.contains(5));\r\n        assert(!g.contains(6));\r\n        assert(g.contains(7));\r\n        assert(g.contains(8));\r\n        assert(!g.contains(9));\r\n        assert(!h.contains(2));\r\n        assert(h.contains(3));\r\n        assert(h.contains(4));\r\n        assert(h.contains(5));\r\n        assert(!h.contains(6));\r\n        assert(h.contains(7));\r\n        assert(h.contains(8));\r\n        assert(!h.contains(9));\r\n#endif // _HAS_CXX20\r\n\r\n        assert(e.count(2) == 0);\r\n        assert(e.count(3) == 3);\r\n        assert(e.count(4) == 2);\r\n        assert(e.count(5) == 1);\r\n        assert(e.count(6) == 0);\r\n        assert(e.count(7) == 3);\r\n        assert(e.count(8) == 2);\r\n        assert(e.count(9) == 0);\r\n\r\n        assert(e.equal_range(2) == make_pair(next(e.begin(), 0), next(e.begin(), 0)));\r\n        assert(e.equal_range(3) == make_pair(next(e.begin(), 0), next(e.begin(), 3)));\r\n        assert(e.equal_range(4) == make_pair(next(e.begin(), 3), next(e.begin(), 5)));\r\n        assert(e.equal_range(5) == make_pair(next(e.begin(), 5), next(e.begin(), 6)));\r\n        assert(e.equal_range(6) == make_pair(next(e.begin(), 6), next(e.begin(), 6)));\r\n        assert(e.equal_range(7) == make_pair(next(e.begin(), 6), next(e.begin(), 9)));\r\n        assert(e.equal_range(8) == make_pair(next(e.begin(), 9), next(e.begin(), 11)));\r\n        assert(e.equal_range(9) == make_pair(next(e.begin(), 11), next(e.begin(), 11)));\r\n\r\n        const auto& ce = e;\r\n\r\n        assert(ce.find(2) == ce.end());\r\n        assert(ce.find(3)->size() == 3);\r\n        assert(ce.find(4)->size() == 4);\r\n        assert(ce.find(5) == next(ce.begin(), 5));\r\n        assert(ce.find(6) == ce.end());\r\n        assert(ce.find(7)->size() == 7);\r\n        assert(ce.find(8)->size() == 8);\r\n        assert(ce.find(9) == ce.end());\r\n\r\n#if _HAS_CXX20\r\n        const auto& cf = f;\r\n        const auto& cg = g;\r\n        const auto& ch = h;\r\n\r\n        assert(!ce.contains(2));\r\n        assert(ce.contains(3));\r\n        assert(ce.contains(4));\r\n        assert(ce.contains(5));\r\n        assert(!ce.contains(6));\r\n        assert(ce.contains(7));\r\n        assert(ce.contains(8));\r\n        assert(!ce.contains(9));\r\n        assert(!cf.contains(2));\r\n        assert(cf.contains(3));\r\n        assert(cf.contains(4));\r\n        assert(cf.contains(5));\r\n        assert(!cf.contains(6));\r\n        assert(cf.contains(7));\r\n        assert(cf.contains(8));\r\n        assert(!cf.contains(9));\r\n        assert(!cg.contains(2));\r\n        assert(cg.contains(3));\r\n        assert(cg.contains(4));\r\n        assert(cg.contains(5));\r\n        assert(!cg.contains(6));\r\n        assert(cg.contains(7));\r\n        assert(cg.contains(8));\r\n        assert(!cg.contains(9));\r\n        assert(!ch.contains(2));\r\n        assert(ch.contains(3));\r\n        assert(ch.contains(4));\r\n        assert(ch.contains(5));\r\n        assert(!ch.contains(6));\r\n        assert(ch.contains(7));\r\n        assert(ch.contains(8));\r\n        assert(!ch.contains(9));\r\n#endif // _HAS_CXX20\r\n\r\n        assert(ce.count(2) == 0);\r\n        assert(ce.count(3) == 3);\r\n        assert(ce.count(4) == 2);\r\n        assert(ce.count(5) == 1);\r\n        assert(ce.count(6) == 0);\r\n        assert(ce.count(7) == 3);\r\n        assert(ce.count(8) == 2);\r\n        assert(ce.count(9) == 0);\r\n\r\n        assert(ce.equal_range(2) == make_pair(next(ce.begin(), 0), next(ce.begin(), 0)));\r\n        assert(ce.equal_range(3) == make_pair(next(ce.begin(), 0), next(ce.begin(), 3)));\r\n        assert(ce.equal_range(4) == make_pair(next(ce.begin(), 3), next(ce.begin(), 5)));\r\n        assert(ce.equal_range(5) == make_pair(next(ce.begin(), 5), next(ce.begin(), 6)));\r\n        assert(ce.equal_range(6) == make_pair(next(ce.begin(), 6), next(ce.begin(), 6)));\r\n        assert(ce.equal_range(7) == make_pair(next(ce.begin(), 6), next(ce.begin(), 9)));\r\n        assert(ce.equal_range(8) == make_pair(next(ce.begin(), 9), next(ce.begin(), 11)));\r\n        assert(ce.equal_range(9) == make_pair(next(ce.begin(), 11), next(ce.begin(), 11)));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    {\r\n        multiset<string, Ke> e(begin(arr), end(arr));\r\n        set<string, Ke> f(begin(arr), end(arr));\r\n        multimap<string, int, Ke> g{{\"ape\", 0}, {\"bat\", 1}, {\"cat\", 2}, {\"bear\", 3}, {\"wolf\", 4}, {\"raven\", 5},\r\n            {\"giraffe\", 6}, {\"panther\", 7}, {\"unicorn\", 8}, {\"direwolf\", 9}, {\"elephant\", 10}};\r\n        map<string, int, Ke> h{{\"ape\", 0}, {\"bat\", 1}, {\"cat\", 2}, {\"bear\", 3}, {\"wolf\", 4}, {\"raven\", 5},\r\n            {\"giraffe\", 6}, {\"panther\", 7}, {\"unicorn\", 8}, {\"direwolf\", 9}, {\"elephant\", 10}};\r\n\r\n        assert(e.erase(2) == 0);\r\n        assert(e.erase(3) == 3);\r\n        assert(e.erase(4) == 2);\r\n        assert(e.erase(5) == 1);\r\n        assert(e.erase(6) == 0);\r\n        assert(e.erase(7) == 3);\r\n        assert(e.erase(8) == 2);\r\n        assert(e.erase(9) == 0);\r\n        assert(e.empty());\r\n\r\n        assert(f.erase(2) == 0);\r\n        assert(f.erase(3) == 3);\r\n        assert(f.erase(4) == 2);\r\n        assert(f.erase(5) == 1);\r\n        assert(f.erase(6) == 0);\r\n        assert(f.erase(7) == 3);\r\n        assert(f.erase(8) == 2);\r\n        assert(f.erase(9) == 0);\r\n        assert(f.empty());\r\n\r\n        assert(g.erase(2) == 0);\r\n        assert(g.erase(3) == 3);\r\n        assert(g.erase(4) == 2);\r\n        assert(g.erase(5) == 1);\r\n        assert(g.erase(6) == 0);\r\n        assert(g.erase(7) == 3);\r\n        assert(g.erase(8) == 2);\r\n        assert(g.erase(9) == 0);\r\n        assert(g.empty());\r\n\r\n        assert(h.erase(2) == 0);\r\n        assert(h.erase(3) == 3);\r\n        assert(h.erase(4) == 2);\r\n        assert(h.erase(5) == 1);\r\n        assert(h.erase(6) == 0);\r\n        assert(h.erase(7) == 3);\r\n        assert(h.erase(8) == 2);\r\n        assert(h.erase(9) == 0);\r\n        assert(h.empty());\r\n    }\r\n\r\n    {\r\n        multiset<string, Ke> i(begin(arr), end(arr));\r\n        set<string, Ke> j(begin(arr), end(arr));\r\n        multimap<string, int, Ke> k{{\"ape\", 0}, {\"bat\", 1}, {\"cat\", 2}, {\"bear\", 3}, {\"wolf\", 4}, {\"raven\", 5},\r\n            {\"giraffe\", 6}, {\"panther\", 7}, {\"unicorn\", 8}, {\"direwolf\", 9}, {\"elephant\", 10}};\r\n        map<string, int, Ke> l{{\"ape\", 0}, {\"bat\", 1}, {\"cat\", 2}, {\"bear\", 3}, {\"wolf\", 4}, {\"raven\", 5},\r\n            {\"giraffe\", 6}, {\"panther\", 7}, {\"unicorn\", 8}, {\"direwolf\", 9}, {\"elephant\", 10}};\r\n\r\n        auto test_extract = []<typename C>(C& c) {\r\n            auto n2 = c.extract(2);\r\n            auto n3 = c.extract(3);\r\n            auto n4 = c.extract(4);\r\n            auto n5 = c.extract(5);\r\n            auto n6 = c.extract(6);\r\n            auto n7 = c.extract(7);\r\n            auto n8 = c.extract(8);\r\n            auto n9 = c.extract(9);\r\n\r\n            assert(!n2);\r\n            assert(n3);\r\n            assert(n4);\r\n            assert(n5);\r\n            assert(!n6);\r\n            assert(n7);\r\n            assert(n8);\r\n            assert(!n9);\r\n\r\n            C d;\r\n\r\n            d.insert(move(n2));\r\n            d.insert(move(n3));\r\n            d.insert(move(n4));\r\n            d.insert(move(n5));\r\n            d.insert(move(n6));\r\n            d.insert(move(n7));\r\n            d.insert(move(n8));\r\n            d.insert(move(n9));\r\n\r\n            assert(c.size() == 6);\r\n            assert(d.size() == 5);\r\n        };\r\n        test_extract(i);\r\n        test_extract(j);\r\n        test_extract(k);\r\n        test_extract(l);\r\n    }\r\n#endif // _HAS_CXX23\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0835323_to_string/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0835323_to_string/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cmath>\r\n#include <cstdlib>\r\n#include <limits>\r\n#include <stdexcept>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename F>\r\nvoid assert_out_of_range(F f) noexcept {\r\n    try {\r\n        f();\r\n        abort();\r\n    } catch (const out_of_range&) {\r\n        // Good.\r\n    }\r\n}\r\n\r\n// DevDiv-96290 \"[Product Issue] to_string doesn't work with the param LDBL_MAX\"\r\n// DevDiv-730419 \"<string>: std::to_string documentation & code disparity\"\r\n// DevDiv-835323 \"<string>: Bad to_string() result for infinity\"\r\n\r\nint main() {\r\n    assert(to_string(numeric_limits<int>::min()) == \"-2147483648\");\r\n    assert(to_string(-1729) == \"-1729\");\r\n    assert(to_string(0) == \"0\");\r\n    assert(to_string(1729) == \"1729\");\r\n    assert(to_string(numeric_limits<int>::max()) == \"2147483647\");\r\n\r\n    assert(to_string(numeric_limits<unsigned int>::min()) == \"0\");\r\n    assert(to_string(1729U) == \"1729\");\r\n    assert(to_string(3000000000U) == \"3000000000\");\r\n    assert(to_string(numeric_limits<unsigned int>::max()) == \"4294967295\");\r\n\r\n    assert(to_string(numeric_limits<long>::min()) == \"-2147483648\");\r\n    assert(to_string(-12345L) == \"-12345\");\r\n    assert(to_string(0L) == \"0\");\r\n    assert(to_string(12345L) == \"12345\");\r\n    assert(to_string(numeric_limits<long>::max()) == \"2147483647\");\r\n\r\n    assert(to_string(numeric_limits<unsigned long>::min()) == \"0\");\r\n    assert(to_string(1729UL) == \"1729\");\r\n    assert(to_string(4123456789UL) == \"4123456789\");\r\n    assert(to_string(numeric_limits<unsigned long>::max()) == \"4294967295\");\r\n\r\n    assert(to_string(numeric_limits<long long>::min()) == \"-9223372036854775808\");\r\n    assert(to_string(-999999999999999999LL) == \"-999999999999999999\");\r\n    assert(to_string(-2147483648LL) == \"-2147483648\");\r\n    assert(to_string(0LL) == \"0\");\r\n    assert(to_string(1729LL) == \"1729\");\r\n    assert(to_string(2147483648LL) == \"2147483648\");\r\n    assert(to_string(numeric_limits<long long>::max()) == \"9223372036854775807\");\r\n\r\n    assert(to_string(numeric_limits<unsigned long long>::min()) == \"0\");\r\n    assert(to_string(0x0FFFFFFFFULL) == \"4294967295\");\r\n    assert(to_string(0x100000000ULL) == \"4294967296\");\r\n    assert(to_string(36028797018963968ULL) == \"36028797018963968\");\r\n    assert(to_string(numeric_limits<unsigned long long>::max()) == \"18446744073709551615\");\r\n\r\n    assert(to_string(numeric_limits<float>::min()) == \"0.000000\");\r\n    assert(to_string(1729.75f) == \"1729.750000\");\r\n    assert(to_string(numeric_limits<float>::max()) == \"340282346638528859811704183484516925440.000000\");\r\n    assert(to_string(numeric_limits<float>::infinity()) == \"inf\");\r\n\r\n    assert(to_string(numeric_limits<double>::min()) == \"0.000000\");\r\n    assert(to_string(47.734375) == \"47.734375\");\r\n    assert(\r\n        to_string(numeric_limits<double>::max())\r\n        == \"17976931348623157081452742373170435679807056752584499659891747680315726078002853876058955863276687817154045\"\r\n           \"89535143824642343213268894641827684675467035375169860499105765512820762454900903893289440758685084551339423\"\r\n           \"04583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000\");\r\n    assert(to_string(numeric_limits<double>::infinity()) == \"inf\");\r\n\r\n    assert(to_string(numeric_limits<long double>::min()) == \"0.000000\");\r\n    assert(to_string(1983.54296875L) == \"1983.542969\");\r\n    assert(\r\n        to_string(numeric_limits<long double>::max())\r\n        == \"17976931348623157081452742373170435679807056752584499659891747680315726078002853876058955863276687817154045\"\r\n           \"89535143824642343213268894641827684675467035375169860499105765512820762454900903893289440758685084551339423\"\r\n           \"04583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000\");\r\n    assert(to_string(numeric_limits<long double>::infinity()) == \"inf\");\r\n\r\n\r\n    assert(to_wstring(numeric_limits<int>::min()) == L\"-2147483648\");\r\n    assert(to_wstring(-1729) == L\"-1729\");\r\n    assert(to_wstring(0) == L\"0\");\r\n    assert(to_wstring(1729) == L\"1729\");\r\n    assert(to_wstring(numeric_limits<int>::max()) == L\"2147483647\");\r\n\r\n    assert(to_wstring(numeric_limits<unsigned int>::min()) == L\"0\");\r\n    assert(to_wstring(1729U) == L\"1729\");\r\n    assert(to_wstring(3000000000U) == L\"3000000000\");\r\n    assert(to_wstring(numeric_limits<unsigned int>::max()) == L\"4294967295\");\r\n\r\n    assert(to_wstring(numeric_limits<long>::min()) == L\"-2147483648\");\r\n    assert(to_wstring(-12345L) == L\"-12345\");\r\n    assert(to_wstring(0L) == L\"0\");\r\n    assert(to_wstring(12345L) == L\"12345\");\r\n    assert(to_wstring(numeric_limits<long>::max()) == L\"2147483647\");\r\n\r\n    assert(to_wstring(numeric_limits<unsigned long>::min()) == L\"0\");\r\n    assert(to_wstring(1729UL) == L\"1729\");\r\n    assert(to_wstring(4123456789UL) == L\"4123456789\");\r\n    assert(to_wstring(numeric_limits<unsigned long>::max()) == L\"4294967295\");\r\n\r\n    assert(to_wstring(numeric_limits<long long>::min()) == L\"-9223372036854775808\");\r\n    assert(to_wstring(-999999999999999999LL) == L\"-999999999999999999\");\r\n    assert(to_wstring(-2147483648LL) == L\"-2147483648\");\r\n    assert(to_wstring(0LL) == L\"0\");\r\n    assert(to_wstring(1729LL) == L\"1729\");\r\n    assert(to_wstring(2147483648LL) == L\"2147483648\");\r\n    assert(to_wstring(numeric_limits<long long>::max()) == L\"9223372036854775807\");\r\n\r\n    assert(to_wstring(numeric_limits<unsigned long long>::min()) == L\"0\");\r\n    assert(to_wstring(0x0FFFFFFFFULL) == L\"4294967295\");\r\n    assert(to_wstring(0x100000000ULL) == L\"4294967296\");\r\n    assert(to_wstring(36028797018963968ULL) == L\"36028797018963968\");\r\n    assert(to_wstring(numeric_limits<unsigned long long>::max()) == L\"18446744073709551615\");\r\n\r\n    assert(to_wstring(numeric_limits<float>::min()) == L\"0.000000\");\r\n    assert(to_wstring(1729.75f) == L\"1729.750000\");\r\n    assert(to_wstring(numeric_limits<float>::max()) == L\"340282346638528859811704183484516925440.000000\");\r\n    assert(to_wstring(numeric_limits<float>::infinity()) == L\"inf\");\r\n\r\n    assert(to_wstring(numeric_limits<double>::min()) == L\"0.000000\");\r\n    assert(to_wstring(47.734375) == L\"47.734375\");\r\n    assert(\r\n        to_wstring(numeric_limits<double>::max())\r\n        == L\"1797693134862315708145274237317043567980705675258449965989174768031572607800285387605895586327668781715404\"\r\n           L\"5895351438246423432132688946418276846754670353751698604991057655128207624549009038932894407586850845513394\"\r\n           L\"2304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000\");\r\n    assert(to_wstring(numeric_limits<double>::infinity()) == L\"inf\");\r\n\r\n    assert(to_wstring(numeric_limits<long double>::min()) == L\"0.000000\");\r\n    assert(to_wstring(1983.54296875L) == L\"1983.542969\");\r\n    assert(\r\n        to_wstring(numeric_limits<long double>::max())\r\n        == L\"1797693134862315708145274237317043567980705675258449965989174768031572607800285387605895586327668781715404\"\r\n           L\"5895351438246423432132688946418276846754670353751698604991057655128207624549009038932894407586850845513394\"\r\n           L\"2304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000\");\r\n    assert(to_wstring(numeric_limits<long double>::infinity()) == L\"inf\");\r\n\r\n    // Exercise the logic for printing digit pairs, and the optimization for printing 64-bit values on 32-bit targets.\r\n    assert(to_string(0ULL) == \"0\");\r\n    assert(to_string(1ULL) == \"1\");\r\n    assert(to_string(12ULL) == \"12\");\r\n    assert(to_string(123ULL) == \"123\");\r\n    assert(to_string(1234ULL) == \"1234\");\r\n    assert(to_string(12345ULL) == \"12345\");\r\n    assert(to_string(123456ULL) == \"123456\");\r\n    assert(to_string(1234567ULL) == \"1234567\");\r\n    assert(to_string(12345678ULL) == \"12345678\");\r\n    assert(to_string(123456789ULL) == \"123456789\");\r\n    assert(to_string(1234567890ULL) == \"1234567890\");\r\n    assert(to_string(4294967295ULL) == \"4294967295\"); // 2^32-1\r\n    assert(to_string(4294967296ULL) == \"4294967296\");\r\n    assert(to_string(12345678901ULL) == \"12345678901\");\r\n    assert(to_string(123456789012ULL) == \"123456789012\");\r\n    assert(to_string(1234567890123ULL) == \"1234567890123\");\r\n    assert(to_string(12345678901234ULL) == \"12345678901234\");\r\n    assert(to_string(123456789012345ULL) == \"123456789012345\");\r\n    assert(to_string(1234567890123456ULL) == \"1234567890123456\");\r\n    assert(to_string(12345678901234567ULL) == \"12345678901234567\");\r\n    assert(to_string(123456789012345678ULL) == \"123456789012345678\");\r\n    assert(to_string(429496729599999999ULL) == \"429496729599999999\"); // 2^32-1 followed by 8 digits\r\n    assert(to_string(429496729600000000ULL) == \"429496729600000000\");\r\n    assert(to_string(1234567890123456789ULL) == \"1234567890123456789\");\r\n    assert(to_string(4294967295999999999ULL) == \"4294967295999999999\"); // 2^32-1 followed by 9 digits\r\n    assert(to_string(4294967296000000000ULL) == \"4294967296000000000\");\r\n    assert(to_string(12345678901234567890ULL) == \"12345678901234567890\");\r\n\r\n    // Also test DevDiv-875295 \"<string>: std::stof returns 1.#INF instead of throwing out_of_range [libcxx]\".\r\n\r\n    assert_out_of_range([] { (void) stof(\"1.2e60\"); });\r\n\r\n    {\r\n        const float f = stof(\"3.14\");\r\n        assert(3.13f < f && f < 3.15f);\r\n    }\r\n\r\n    assert_out_of_range([] { (void) stof(\"-1.3e61\"); });\r\n\r\n    assert_out_of_range([] { (void) stof(L\"1.4e62\"); });\r\n\r\n    {\r\n        const float f = stof(L\"17.29\");\r\n        assert(17.28f < f && f < 17.30f);\r\n    }\r\n\r\n    assert_out_of_range([] { (void) stof(L\"-1.5e63\"); });\r\n\r\n\r\n    // Also test DevDiv-1113936 \"std::stod incorrectly throws exception on some inputs, violating STL specification\".\r\n\r\n    for (const char* const p : {\"inf\", \"Inf\", \"INF\", \"infinity\", \"Infinity\", \"INFINITY\"}) {\r\n        assert(isinf(stof(p)));\r\n        assert(isinf(stod(p)));\r\n        assert(isinf(stold(p)));\r\n    }\r\n\r\n    for (const char* const p : {\"nan\", \"Nan\", \"NaN\", \"NAN\"}) {\r\n        assert(isnan(stof(p)));\r\n        assert(isnan(stod(p)));\r\n        assert(isnan(stold(p)));\r\n    }\r\n\r\n    for (const wchar_t* const p : {L\"inf\", L\"Inf\", L\"INF\", L\"infinity\", L\"Infinity\", L\"INFINITY\"}) {\r\n        assert(isinf(stof(p)));\r\n        assert(isinf(stod(p)));\r\n        assert(isinf(stold(p)));\r\n    }\r\n\r\n    for (const wchar_t* const p : {L\"nan\", L\"Nan\", L\"NaN\", L\"NAN\"}) {\r\n        assert(isnan(stof(p)));\r\n        assert(isnan(stod(p)));\r\n        assert(isnan(stold(p)));\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0836436_get_time/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0836436_get_time/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <ctime>\r\n#include <iomanip>\r\n#include <ios>\r\n#include <locale>\r\n#include <sstream>\r\n#include <streambuf>\r\n#include <string>\r\n#include <tuple>\r\n\r\nusing namespace std;\r\n\r\n// DevDiv-821672 \"<locale>: visual studio.net 2013 time libraries buggy (%x %X) - time_get\"\r\n// DevDiv-836436 \"<iomanip>: get_time()'s AM/PM parsing is broken\"\r\n// DevDiv-872926 \"<locale>: time_get::get parsing format string gets tm::tm_hour wrong [libcxx]\"\r\n// VSO-1259138/GH-2618 \"<xloctime>: get_time does not return correct year in tm.tm_year if year is 1\"\r\n\r\ntm helper(const char* const s, const char* const fmt) {\r\n    tm t{};\r\n\r\n    istringstream iss(s);\r\n\r\n    iss >> get_time(&t, fmt);\r\n\r\n    assert(static_cast<bool>(iss));\r\n\r\n    return t;\r\n}\r\n\r\ntm helper_locale(const wchar_t* const s, const wchar_t* const fmt, const char* _loc) {\r\n    tm t{};\r\n\r\n    wstringstream wss(s);\r\n    wss.imbue(locale(_loc));\r\n    wss >> get_time(&t, fmt);\r\n\r\n    assert(static_cast<bool>(wss));\r\n\r\n    return t;\r\n}\r\n\r\nint read_hour(const char* const s) {\r\n    const auto t = helper(s, \"%I %p\");\r\n\r\n    // %I The hour (12-hour clock) [01,12]; leading zeros are permitted but not required.\r\n    // %p The locale's equivalent of a.m or p.m.\r\n\r\n    // int tm_hour; // hours since midnight - [0, 23]\r\n\r\n    return t.tm_hour;\r\n}\r\n\r\ntuple<int, int, int> read_date(const char* const s) {\r\n    const auto t = helper(s, \"%x\");\r\n\r\n    // %x The date, using the locale's date format.\r\n    // \"%d / %m / %y\"\r\n    // %d The day of the month [01,31]; leading zeros are permitted but not required.\r\n    // %m The month number [01,12]; leading zeros are permitted but not required.\r\n    // %y The year within century. When a century is not otherwise specified,\r\n    //    values in the range [69,99] shall refer to years 1969 to 1999 inclusive, and\r\n    //    values in the range [00,68] shall refer to years 2000 to 2068 inclusive;\r\n    //    leading zeros shall be permitted but shall not be required.\r\n\r\n    // int tm_mday; // day of the month - [1, 31]\r\n    // int tm_mon;  // months since January - [0, 11]\r\n    // int tm_year; // years since 1900\r\n\r\n    return make_tuple(t.tm_mday, t.tm_mon, t.tm_year);\r\n}\r\n\r\ntuple<int, int, int> read_date_locale(const wchar_t* const s, const char* _loc) {\r\n    const auto t = helper_locale(s, L\"%Y-%b-%d\", _loc);\r\n\r\n    // int tm_mday; // day of the month - [1, 31]\r\n    // int tm_mon;  // months since January - [0, 11]\r\n    // int tm_year; // years since 1900\r\n\r\n    return make_tuple(t.tm_mday, t.tm_mon, t.tm_year);\r\n}\r\n\r\n\r\ntuple<int, int, int> read_time(const char* const s) {\r\n    const auto t = helper(s, \"%X\");\r\n\r\n    // %X The time, using the locale's time format.\r\n    // \"%H : %M : %S\"\r\n    // %H The hour (24-hour clock) [00,23]; leading zeros are permitted but not required.\r\n    // %M The minute [00,59]; leading zeros are permitted but not required.\r\n    // %S The seconds [00,60]; leading zeros are permitted but not required.\r\n\r\n    // int tm_hour; // hours since midnight - [0, 23]\r\n    // int tm_min;  // minutes after the hour - [0, 59]\r\n    // int tm_sec;  // seconds after the minute - [0, 60]\r\n\r\n    return make_tuple(t.tm_hour, t.tm_min, t.tm_sec);\r\n}\r\n\r\nvoid test_DevDiv_640278();\r\nvoid test_DevDiv_990695();\r\nvoid test_locale_russian();\r\nvoid test_locale_german();\r\nvoid test_locale_chinese();\r\nvoid test_buffer_resizing();\r\nvoid test_gh_2618();\r\nvoid test_gh_2848();\r\nvoid test_gh_4820();\r\nvoid test_gh_4882();\r\n\r\nint main() {\r\n    assert(read_hour(\"12 AM\") == 0);\r\n    assert(read_hour(\"12 am\") == 0);\r\n\r\n    assert(read_hour(\"1 AM\") == 1);\r\n    assert(read_hour(\"1 am\") == 1);\r\n    assert(read_hour(\"1 aM\") == 1);\r\n    assert(read_hour(\"1 Am\") == 1);\r\n\r\n    assert(read_hour(\"2 AM\") == 2);\r\n    assert(read_hour(\"2 am\") == 2);\r\n\r\n    assert(read_hour(\"11 AM\") == 11);\r\n    assert(read_hour(\"11 am\") == 11);\r\n\r\n    assert(read_hour(\"12 PM\") == 12);\r\n    assert(read_hour(\"12 pm\") == 12);\r\n\r\n    assert(read_hour(\"1 PM\") == 13);\r\n    assert(read_hour(\"1 pm\") == 13);\r\n    assert(read_hour(\"1 Pm\") == 13);\r\n    assert(read_hour(\"1 pM\") == 13);\r\n\r\n    assert(read_hour(\"2 PM\") == 14);\r\n    assert(read_hour(\"2 pm\") == 14);\r\n\r\n    assert(read_hour(\"11 PM\") == 23);\r\n    assert(read_hour(\"11 pm\") == 23);\r\n\r\n    assert(read_date(\"22 / 4 / 77\") == make_tuple(22, /*NOTE DIFFERENCE:*/ 3, 77));\r\n\r\n    assert(read_date(\"22 / 4 / 11\") == make_tuple(22, /*NOTE DIFFERENCE:*/ 3, /*NOTE DIFFERENCE:*/ 111));\r\n\r\n    assert(read_time(\"15 : 47 : 58\") == make_tuple(15, 47, 58));\r\n\r\n    assert(read_time(\"15 : 47 : 60\") == make_tuple(15, 47, 60));\r\n\r\n    test_DevDiv_640278();\r\n    test_DevDiv_990695();\r\n    test_locale_russian();\r\n    test_locale_german();\r\n    test_locale_chinese();\r\n    test_buffer_resizing();\r\n    test_gh_2618();\r\n    test_gh_2848();\r\n    test_gh_4820();\r\n    test_gh_4882();\r\n}\r\n\r\ntypedef istreambuf_iterator<char> Iter;\r\n\r\n// DevDiv-640278 \"<locale>: time_get::do_get_year() thinks the world will end in 2035\"\r\nvoid test_year(const string& str, const ios_base::iostate expected_err, const int expected_tm_year) {\r\n    istringstream iss(str);\r\n    ios_base::iostate err = ios_base::goodbit;\r\n    tm t{};\r\n    use_facet<time_get<char>>(iss.getloc()).get_year(Iter(iss.rdbuf()), Iter(), iss, err, &t);\r\n    assert(err == expected_err);\r\n    assert(t.tm_year == expected_tm_year);\r\n}\r\n\r\nvoid test_DevDiv_640278() {\r\n    test_year(\"\", ios_base::eofbit | ios_base::failbit, 0);\r\n\r\n    test_year(\"xyz\", ios_base::failbit, 0);\r\n\r\n    test_year(\"00\", ios_base::eofbit, 100);\r\n    test_year(\"01\", ios_base::eofbit, 101);\r\n    test_year(\"47\", ios_base::eofbit, 147);\r\n    test_year(\"68\", ios_base::eofbit, 168);\r\n    test_year(\"69\", ios_base::eofbit, 69);\r\n    test_year(\"83\", ios_base::eofbit, 83);\r\n    test_year(\"98\", ios_base::eofbit, 98);\r\n    test_year(\"99\", ios_base::eofbit, 99);\r\n    test_year(\"1776\", ios_base::eofbit, -124);\r\n    test_year(\"1899\", ios_base::eofbit, -1);\r\n    test_year(\"1900\", ios_base::eofbit, 0);\r\n    test_year(\"1901\", ios_base::eofbit, 1);\r\n    test_year(\"1955\", ios_base::eofbit, 55);\r\n    test_year(\"1985\", ios_base::eofbit, 85);\r\n    test_year(\"2014\", ios_base::eofbit, 114);\r\n    test_year(\"2161\", ios_base::eofbit, 261);\r\n\r\n    test_year(\"2013 frozen\", ios_base::goodbit, 113);\r\n}\r\n\r\n// DevDiv-990695 \"<locale>: time_get should ignore ios_base::iostate's initial value\"\r\nvoid test_DevDiv_990695() {\r\n    for (int k = 0; k < 2; ++k) {\r\n        const auto Bit = k == 0 ? ios_base::goodbit : ios_base::failbit;\r\n\r\n        {\r\n            istringstream iss(\"1983\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            use_facet<time_get<char>>(iss.getloc()).get_year(Iter(iss.rdbuf()), Iter(), iss, err, &t);\r\n            assert(t.tm_year == 83);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"20\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            use_facet<time_get<char>>(iss.getloc()).get(Iter(iss.rdbuf()), Iter(), iss, err, &t, 'C', '\\0');\r\n            assert(t.tm_year == 100);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"7\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            use_facet<time_get<char>>(iss.getloc()).get(Iter(iss.rdbuf()), Iter(), iss, err, &t, 'I', '\\0');\r\n            assert(t.tm_hour == 7);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"4\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            use_facet<time_get<char>>(iss.getloc()).get(Iter(iss.rdbuf()), Iter(), iss, err, &t, 'm', '\\0');\r\n            assert(t.tm_mon == 3);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"14\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            use_facet<time_get<char>>(iss.getloc()).get(Iter(iss.rdbuf()), Iter(), iss, err, &t, 'y', '\\0');\r\n            assert(t.tm_year == 114);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"10 31 2014\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            const string fmt(\"%m %d %Y\");\r\n            use_facet<time_get<char>>(iss.getloc())\r\n                .get(Iter(iss.rdbuf()), Iter(), iss, err, &t, fmt.c_str(), fmt.c_str() + fmt.size());\r\n            assert(t.tm_mon == 9);\r\n            assert(t.tm_mday == 31);\r\n            assert(t.tm_year == 114);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"20200609\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            const string fmt(\"%Y%m%d\");\r\n            use_facet<time_get<char>>(iss.getloc())\r\n                .get(Iter(iss.rdbuf()), Iter(), iss, err, &t, fmt.c_str(), fmt.c_str() + fmt.size());\r\n            assert(t.tm_mon == 5);\r\n            assert(t.tm_mday == 9);\r\n            assert(t.tm_year == 120);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"20201213\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            const string fmt(\"%Y%m%d\");\r\n            use_facet<time_get<char>>(iss.getloc())\r\n                .get(Iter(iss.rdbuf()), Iter(), iss, err, &t, fmt.c_str(), fmt.c_str() + fmt.size());\r\n            assert(t.tm_mon == 11);\r\n            assert(t.tm_mday == 13);\r\n            assert(t.tm_year == 120);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"2020112\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            const string fmt(\"%Y%m%d\");\r\n            use_facet<time_get<char>>(iss.getloc())\r\n                .get(Iter(iss.rdbuf()), Iter(), iss, err, &t, fmt.c_str(), fmt.c_str() + fmt.size());\r\n            assert(t.tm_mon == 10);\r\n            assert(t.tm_mday == 2);\r\n            assert(t.tm_year == 120);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"2020061125\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            const string fmt(\"%Y%m%d\");\r\n            use_facet<time_get<char>>(iss.getloc())\r\n                .get(Iter(iss.rdbuf()), Iter(), iss, err, &t, fmt.c_str(), fmt.c_str() + fmt.size());\r\n            assert(t.tm_mon == 5);\r\n            assert(t.tm_mday == 11);\r\n            assert(t.tm_year == 120);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"2020120625119\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            const string fmt(\"%Y12%m25%d\");\r\n            use_facet<time_get<char>>(iss.getloc())\r\n                .get(Iter(iss.rdbuf()), Iter(), iss, err, &t, fmt.c_str(), fmt.c_str() + fmt.size());\r\n            assert(t.tm_mon == 5);\r\n            assert(t.tm_mday == 11);\r\n            assert(t.tm_year == 120);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"2020092Text\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            const string fmt(\"%Y%m%d\");\r\n            use_facet<time_get<char>>(iss.getloc())\r\n                .get(Iter(iss.rdbuf()), Iter(), iss, err, &t, fmt.c_str(), fmt.c_str() + fmt.size());\r\n            assert(t.tm_mon == 8);\r\n            assert(t.tm_mday == 2);\r\n            assert(t.tm_year == 120);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"sep 31 2014\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            const string fmt(\"%b %d %Y\");\r\n            use_facet<time_get<char>>(iss.getloc())\r\n                .get(Iter(iss.rdbuf()), Iter(), iss, err, &t, fmt.c_str(), fmt.c_str() + fmt.size());\r\n            assert(t.tm_mon == 8);\r\n            assert(t.tm_mday == 31);\r\n            assert(t.tm_year == 114);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"aUG 14 2020\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            const string fmt(\"%b %d %Y\");\r\n            use_facet<time_get<char>>(iss.getloc())\r\n                .get(Iter(iss.rdbuf()), Iter(), iss, err, &t, fmt.c_str(), fmt.c_str() + fmt.size());\r\n            assert(t.tm_mon == 7);\r\n            assert(t.tm_mday == 14);\r\n            assert(t.tm_year == 120);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"feBRuArY 02 1991\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            const string fmt(\"%b %d %Y\");\r\n            use_facet<time_get<char>>(iss.getloc())\r\n                .get(Iter(iss.rdbuf()), Iter(), iss, err, &t, fmt.c_str(), fmt.c_str() + fmt.size());\r\n            assert(t.tm_mon == 1);\r\n            assert(t.tm_mday == 2);\r\n            assert(t.tm_year == 91);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"19 SKIP_THIS sEpTemBER SKIP_THIS 2005\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            const string fmt(\"%d SKIP_THIS %b SKIP_THIS %Y\");\r\n            use_facet<time_get<char>>(iss.getloc())\r\n                .get(Iter(iss.rdbuf()), Iter(), iss, err, &t, fmt.c_str(), fmt.c_str() + fmt.size());\r\n            assert(t.tm_mon == 8);\r\n            assert(t.tm_mday == 19);\r\n            assert(t.tm_year == 105);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"20200609\");\r\n            tm t = {};\r\n            const string fmt(\"%Y%m%d\");\r\n            iss >> get_time(&t, fmt.c_str());\r\n            assert(!iss.fail());\r\n            assert(t.tm_mon == 5);\r\n            assert(t.tm_mday == 9);\r\n            assert(t.tm_year == 120);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"2020112\");\r\n            tm t = {};\r\n            const string fmt(\"%Y%m%d\");\r\n            iss >> get_time(&t, fmt.c_str());\r\n            assert(!iss.fail());\r\n            assert(t.tm_mon == 10);\r\n            assert(t.tm_mday == 2);\r\n            assert(t.tm_year == 120);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"2020061125\");\r\n            tm t = {};\r\n            const string fmt(\"%Y%m%d\");\r\n            iss >> get_time(&t, fmt.c_str());\r\n            assert(!iss.fail());\r\n            assert(t.tm_mon == 5);\r\n            assert(t.tm_mday == 11);\r\n            assert(t.tm_year == 120);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"2020124\");\r\n            tm t = {};\r\n            const string fmt(\"%Y%d%m\");\r\n            iss >> get_time(&t, fmt.c_str());\r\n            assert(!iss.fail());\r\n            assert(t.tm_mon == 3);\r\n            assert(t.tm_mday == 12);\r\n            assert(t.tm_year == 120);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"2020104Text\");\r\n            tm t = {};\r\n            const string fmt(\"%Y%d%m\");\r\n            iss >> get_time(&t, fmt.c_str());\r\n            assert(!iss.fail());\r\n            assert(t.tm_mon == 3);\r\n            assert(t.tm_mday == 10);\r\n            assert(t.tm_year == 120);\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"202000000000000923\");\r\n            tm t = {};\r\n            const string fmt(\"%Y%m%d\");\r\n            iss >> get_time(&t, fmt.c_str());\r\n            assert(iss.fail());\r\n        }\r\n\r\n        {\r\n            istringstream iss(\"202000000000000923\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            const string fmt(\"%Y%m%d\");\r\n            use_facet<time_get<char>>(iss.getloc())\r\n                .get(Iter(iss.rdbuf()), Iter(), iss, err, &t, fmt.c_str(), fmt.c_str() + fmt.size());\r\n            assert(err == ios_base::failbit);\r\n        }\r\n\r\n        {\r\n            // This case should fail\r\n            istringstream iss(\"2011-D-18\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            const string fmt(\"%Y-%b-%d\");\r\n            use_facet<time_get<char>>(iss.getloc())\r\n                .get(Iter(iss.rdbuf()), Iter(), iss, err, &t, fmt.c_str(), fmt.c_str() + fmt.size());\r\n            assert(err == ios_base::failbit);\r\n        }\r\n\r\n        {\r\n            // This case should fail\r\n            istringstream iss(\"2018-M-18\");\r\n            tm t = {};\r\n            const string fmt(\"%Y-%b-%d\");\r\n            iss >> get_time(&t, fmt.c_str());\r\n            assert(iss.fail());\r\n        }\r\n\r\n        {\r\n            // GH-1071 should not fail when format is longer than the stream\r\n            istringstream iss(\"2020\");\r\n            ios_base::iostate err = Bit;\r\n            tm t{};\r\n            const string fmt(\"%Y%m%d\");\r\n            use_facet<time_get<char>>(iss.getloc())\r\n                .get(Iter(iss.rdbuf()), Iter(), iss, err, &t, fmt.c_str(), fmt.c_str() + fmt.size());\r\n            assert(err == ios_base::eofbit);\r\n            assert(t.tm_mon == 0);\r\n            assert(t.tm_mday == 0);\r\n            assert(t.tm_year == 120);\r\n        }\r\n\r\n        {\r\n            // GH-1071 should not fail when format is longer than the stream\r\n            istringstream iss(\"2020-sep\");\r\n            tm t = {};\r\n            const string fmt(\"%Y-%b-%d\");\r\n            iss >> get_time(&t, fmt.c_str());\r\n            assert(!iss.fail());\r\n            assert(iss.eof());\r\n            assert(t.tm_mon == 8);\r\n            assert(t.tm_mday == 0);\r\n            assert(t.tm_year == 120);\r\n        }\r\n\r\n        {\r\n            // GH-1071 should not fail when format is longer than the stream\r\n            istringstream iss(\"Current time is 3:8\");\r\n            tm t = {};\r\n            const string fmt(\"Current time is %H:%M:%S\");\r\n            iss >> get_time(&t, fmt.c_str());\r\n            assert(!iss.fail());\r\n            assert(iss.eof());\r\n            assert(t.tm_hour == 3);\r\n            assert(t.tm_min == 8);\r\n            assert(t.tm_sec == 0);\r\n        }\r\n\r\n        {\r\n            // Should fail if EOF while not parsing specifier (N4878 [locale.time.get.members]/8.3).\r\n            tm t{};\r\n            istringstream iss(\"4\");\r\n            iss >> get_time(&t, \"42\");\r\n            assert(iss.rdstate() == (ios_base::eofbit | ios_base::failbit));\r\n        }\r\n\r\n        {\r\n            // Trailing % should not be treated as a literal (N4878 [locale.time.get.members]/8.4).\r\n            tm t{};\r\n            istringstream iss(\"%\");\r\n            iss >> get_time(&t, \"%\");\r\n            assert(iss.fail());\r\n        }\r\n\r\n        {\r\n            // % with modifier but no specifier is also incomplete.\r\n            tm t{};\r\n            istringstream iss(\"%E\");\r\n            iss >> get_time(&t, \"%E\");\r\n            assert(iss.fail());\r\n        }\r\n\r\n        {\r\n            // Literal match is case-insensitive (N4878 [locale.time.get.members]/8.6).\r\n            tm t{};\r\n            istringstream iss(\"aBc\");\r\n            iss >> get_time(&t, \"AbC\");\r\n            assert(iss);\r\n        }\r\n\r\n        {\r\n            // GH-1606: reads too many leading zeros\r\n            istringstream iss(\"19700405T000006\");\r\n            tm t{};\r\n            iss >> get_time(&t, \"%Y%m%dT%H%M%S\");\r\n            assert(iss);\r\n\r\n            printf(\"Expected hour 0, min 0, sec 6\\n\");\r\n            printf(\"     Got hour %d, min %d, sec %d\\n\", t.tm_hour, t.tm_min, t.tm_sec);\r\n\r\n            assert(t.tm_year == 70);\r\n            assert(t.tm_mon == 3);\r\n            assert(t.tm_mday == 5);\r\n            assert(t.tm_hour == 0);\r\n            assert(t.tm_min == 0);\r\n            assert(t.tm_sec == 6);\r\n        }\r\n\r\n        {\r\n            // strptime specification: \"leading zeros are permitted but not required\"\r\n            tm t{};\r\n            istringstream{\" 7 4\"} >> get_time(&t, \"%m%d\");\r\n            assert(t.tm_mon == 6);\r\n            assert(t.tm_mday == 4);\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_locale_russian() {\r\n    // Russian January in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x042f\\x043d\\x0432\\x0430\\x0440\\x044c-05\", \"ru-RU\") == make_tuple(5, 0, 120));\r\n    assert(read_date_locale(L\"2020-\\x044f\\x043d\\x0432-05\", \"ru-RU\") == make_tuple(5, 0, 120));\r\n    assert(read_date_locale(L\"2020-\\x044f\\x043d\\x0412\\x0410\\x0440\\x042c-05\", \"ru-RU\") == make_tuple(5, 0, 120));\r\n    assert(read_date_locale(L\"2020-\\x042f\\x041d\\x0412-05\", \"ru-RU\") == make_tuple(5, 0, 120));\r\n\r\n    // Russian February in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x0424\\x0435\\x0432\\x0440\\x0430\\x043b\\x044c-15\", \"ru-RU\") == make_tuple(15, 1, 120));\r\n    assert(read_date_locale(L\"2020-\\x0444\\x0435\\x0432-15\", \"ru-RU\") == make_tuple(15, 1, 120));\r\n    assert(read_date_locale(L\"2020-\\x0444\\x0435\\x0412\\x0440\\x0410\\x043b\\x044c-15\", \"ru-RU\") == make_tuple(15, 1, 120));\r\n    assert(read_date_locale(L\"2020-\\x0424\\x0435\\x0412-15\", \"ru-RU\") == make_tuple(15, 1, 120));\r\n\r\n    // Russian March in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x041c\\x0430\\x0440\\x0442-25\", \"ru-RU\") == make_tuple(25, 2, 120));\r\n    assert(read_date_locale(L\"2020-\\x043c\\x0430\\x0440-25\", \"ru-RU\") == make_tuple(25, 2, 120));\r\n    assert(read_date_locale(L\"2020-\\x041c\\x0430\\x0420\\x0442-25\", \"ru-RU\") == make_tuple(25, 2, 120));\r\n    assert(read_date_locale(L\"2020-\\x041c\\x0430\\x0420-25\", \"ru-RU\") == make_tuple(25, 2, 120));\r\n\r\n    // Russian April in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x0410\\x043f\\x0440\\x0435\\x043b\\x044c-05\", \"ru-RU\") == make_tuple(5, 3, 120));\r\n    assert(read_date_locale(L\"2020-\\x0430\\x043f\\x0440-05\", \"ru-RU\") == make_tuple(5, 3, 120));\r\n    assert(read_date_locale(L\"2020-\\x0410\\x043f\\x0420\\x0415\\x043b\\x044c-05\", \"ru-RU\") == make_tuple(5, 3, 120));\r\n    assert(read_date_locale(L\"2020-\\x0430\\x041f\\x0420-05\", \"ru-RU\") == make_tuple(5, 3, 120));\r\n\r\n    // Russian May in different cases (expanded, mixed cases)\r\n    // Expanded and abbreviated versions are identical\r\n    assert(read_date_locale(L\"2020-\\x041c\\x0430\\x0439-15\", \"ru-RU\") == make_tuple(15, 4, 120));\r\n    assert(read_date_locale(L\"2020-\\x043c\\x0410\\x0419-15\", \"ru-RU\") == make_tuple(15, 4, 120));\r\n\r\n    // Russian June in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x0418\\x044e\\x043d\\x044c-25\", \"ru-RU\") == make_tuple(25, 5, 120));\r\n    assert(read_date_locale(L\"2020-\\x0438\\x044e\\x043d-25\", \"ru-RU\") == make_tuple(25, 5, 120));\r\n    assert(read_date_locale(L\"2020-\\x0418\\x044e\\x041d\\x042c-25\", \"ru-RU\") == make_tuple(25, 5, 120));\r\n    assert(read_date_locale(L\"2020-\\x0438\\x042e\\x041d-25\", \"ru-RU\") == make_tuple(25, 5, 120));\r\n\r\n    // Russian July in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x0418\\x044e\\x043b\\x044c-12\", \"ru-RU\") == make_tuple(12, 6, 120));\r\n    assert(read_date_locale(L\"2020-\\x0438\\x044e\\x043b-12\", \"ru-RU\") == make_tuple(12, 6, 120));\r\n    assert(read_date_locale(L\"2020-\\x0418\\x044e\\x041b\\x044c-12\", \"ru-RU\") == make_tuple(12, 6, 120));\r\n    assert(read_date_locale(L\"2020-\\x0418\\x044e\\x041b-12\", \"ru-RU\") == make_tuple(12, 6, 120));\r\n\r\n    // Russian August in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x0410\\x0432\\x0433\\x0443\\x0441\\x0442-02\", \"ru-RU\") == make_tuple(2, 7, 120));\r\n    assert(read_date_locale(L\"2020-\\x0430\\x0432\\x0433-02\", \"ru-RU\") == make_tuple(2, 7, 120));\r\n    assert(read_date_locale(L\"2020-\\x0410\\x0432\\x0433\\x0423\\x0421\\x0442-02\", \"ru-RU\") == make_tuple(2, 7, 120));\r\n    assert(read_date_locale(L\"2020-\\x0430\\x0412\\x0413-02\", \"ru-RU\") == make_tuple(2, 7, 120));\r\n\r\n    // Russian September in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x0421\\x0435\\x043d\\x0442\\x044f\\x0431\\x0440\\x044c-21\", \"ru-RU\")\r\n           == make_tuple(21, 8, 120));\r\n    assert(read_date_locale(L\"2020-\\x0441\\x0435\\x043d-21\", \"ru-RU\") == make_tuple(21, 8, 120));\r\n    assert(read_date_locale(L\"2020-\\x0421\\x0435\\x043d\\x0442\\x044f\\x0411\\x0440\\x044c-21\", \"ru-RU\")\r\n           == make_tuple(21, 8, 120));\r\n    assert(read_date_locale(L\"2020-\\x0441\\x0415\\x041d-21\", \"ru-RU\") == make_tuple(21, 8, 120));\r\n\r\n    // Russian October in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x041e\\x043a\\x0442\\x044f\\x0431\\x0440\\x044c-01\", \"ru-RU\") == make_tuple(1, 9, 120));\r\n    assert(read_date_locale(L\"2020-\\x043e\\x043a\\x0442-01\", \"ru-RU\") == make_tuple(1, 9, 120));\r\n    assert(read_date_locale(L\"2020-\\x041e\\x043a\\x0442\\x044f\\x0411\\x0440\\x044c-01\", \"ru-RU\") == make_tuple(1, 9, 120));\r\n    assert(read_date_locale(L\"2020-\\x043e\\x041a\\x0442-01\", \"ru-RU\") == make_tuple(1, 9, 120));\r\n\r\n    // Russian November in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x041d\\x043e\\x044f\\x0431\\x0440\\x044c-09\", \"ru-RU\") == make_tuple(9, 10, 120));\r\n    assert(read_date_locale(L\"2020-\\x043d\\x043e\\x044f-09\", \"ru-RU\") == make_tuple(9, 10, 120));\r\n    assert(read_date_locale(L\"2020-\\x041d\\x043e\\x044f\\x0411\\x0440\\x044c-09\", \"ru-RU\") == make_tuple(9, 10, 120));\r\n    assert(read_date_locale(L\"2020-\\x043d\\x041e\\x042f-09\", \"ru-RU\") == make_tuple(9, 10, 120));\r\n\r\n    // Russian December in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x0414\\x0435\\x043a\\x0430\\x0431\\x0440\\x044c-31\", \"ru-RU\") == make_tuple(31, 11, 120));\r\n    assert(read_date_locale(L\"2020-\\x0434\\x0435\\x043a-31\", \"ru-RU\") == make_tuple(31, 11, 120));\r\n    assert(read_date_locale(L\"2020-\\x0414\\x0435\\x043a\\x0430\\x0411\\x0440\\x044c-31\", \"ru-RU\") == make_tuple(31, 11, 120));\r\n    assert(read_date_locale(L\"2020-\\x0434\\x0415\\x043a-31\", \"ru-RU\") == make_tuple(31, 11, 120));\r\n}\r\n\r\nvoid test_locale_german() {\r\n    // German January in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x004a\\x0061\\x006e\\x0075\\x0061\\x0072-05\", \"de-DE\") == make_tuple(5, 0, 120));\r\n    assert(read_date_locale(L\"2020-\\x004a\\x0061\\x006e-05\", \"de-DE\") == make_tuple(5, 0, 120));\r\n    assert(read_date_locale(L\"2020-\\x004a\\x0061\\x006e\\x0055\\x0041\\x0072-05\", \"de-DE\") == make_tuple(5, 0, 120));\r\n    assert(read_date_locale(L\"2020-\\x006a\\x0041\\x004e-05\", \"de-DE\") == make_tuple(5, 0, 120));\r\n\r\n    // German February in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x0046\\x0065\\x0062\\x0072\\x0075\\x0061\\x0072-15\", \"de-DE\") == make_tuple(15, 1, 120));\r\n    assert(read_date_locale(L\"2020-\\x0046\\x0065\\x0062-15\", \"de-DE\") == make_tuple(15, 1, 120));\r\n    assert(read_date_locale(L\"2020-\\x0046\\x0065\\x0062\\x0072\\x0055\\x0061\\x0072-15\", \"de-DE\") == make_tuple(15, 1, 120));\r\n    assert(read_date_locale(L\"2020-\\x0066\\x0045\\x0062-15\", \"de-DE\") == make_tuple(15, 1, 120));\r\n\r\n    // German March in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x004d\\x00e4\\x0072\\x007a-25\", \"de-DE\") == make_tuple(25, 2, 120));\r\n    assert(read_date_locale(L\"2020-\\x004d\\x0072\\x007a-25\", \"de-DE\") == make_tuple(25, 2, 120));\r\n    assert(read_date_locale(L\"2020-\\x006d\\x00e4\\x0052\\x005a-25\", \"de-DE\") == make_tuple(25, 2, 120));\r\n    assert(read_date_locale(L\"2020-\\x006d\\x0052\\x005a-25\", \"de-DE\") == make_tuple(25, 2, 120));\r\n\r\n    // German April in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x0041\\x0070\\x0072\\x0069\\x006c-05\", \"de-DE\") == make_tuple(5, 3, 120));\r\n    assert(read_date_locale(L\"2020-\\x0041\\x0070\\x0072-05\", \"de-DE\") == make_tuple(5, 3, 120));\r\n    assert(read_date_locale(L\"2020-\\x0061\\x0070\\x0052\\x0069\\x004c-05\", \"de-DE\") == make_tuple(5, 3, 120));\r\n    assert(read_date_locale(L\"2020-\\x0061\\x0050\\x0052-05\", \"de-DE\") == make_tuple(5, 3, 120));\r\n\r\n    // German May in different cases (expanded, mixed cases)\r\n    // Expanded and abbreviated versions are identical\r\n    assert(read_date_locale(L\"2020-\\x004d\\x0061\\x0069-15\", \"de-DE\") == make_tuple(15, 4, 120));\r\n    assert(read_date_locale(L\"2020-\\x006d\\x0041\\x0069-15\", \"de-DE\") == make_tuple(15, 4, 120));\r\n\r\n    // German June in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x004a\\x0075\\x006e\\x0069-25\", \"de-DE\") == make_tuple(25, 5, 120));\r\n    assert(read_date_locale(L\"2020-\\x004a\\x0075\\x006e-25\", \"de-DE\") == make_tuple(25, 5, 120));\r\n    assert(read_date_locale(L\"2020-\\x006a\\x0055\\x004e\\x0069-25\", \"de-DE\") == make_tuple(25, 5, 120));\r\n    assert(read_date_locale(L\"2020-\\x006a\\x0055\\x004e-25\", \"de-DE\") == make_tuple(25, 5, 120));\r\n\r\n    // German July in different cases (expanded, mixed cases)\r\n    // Expanded and abbreviated are identical\r\n    assert(read_date_locale(L\"2020-\\x004a\\x0075\\x006c\\x0069-12\", \"de-DE\") == make_tuple(12, 6, 120));\r\n    assert(read_date_locale(L\"2020-\\x004a\\x0075\\x004c\\x0069-12\", \"de-DE\") == make_tuple(12, 6, 120));\r\n\r\n    // German August in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x0041\\x0075\\x0067\\x0075\\x0073\\x0074-02\", \"de-DE\") == make_tuple(2, 7, 120));\r\n    assert(read_date_locale(L\"2020-\\x0041\\x0075\\x0067-02\", \"de-DE\") == make_tuple(2, 7, 120));\r\n    assert(read_date_locale(L\"2020-\\x0061\\x0075\\x0047\\x0075\\x0053\\x0074-02\", \"de-DE\") == make_tuple(2, 7, 120));\r\n    assert(read_date_locale(L\"2020-\\x0061\\x0055\\x0047-02\", \"de-DE\") == make_tuple(2, 7, 120));\r\n\r\n    // German September in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x0053\\x0065\\x0070\\x0074\\x0065\\x006d\\x0062\\x0065\\x0072-21\", \"de-DE\")\r\n           == make_tuple(21, 8, 120));\r\n    assert(read_date_locale(L\"2020-\\x0053\\x0065\\x0070-21\", \"de-DE\") == make_tuple(21, 8, 120));\r\n    assert(read_date_locale(L\"2020-\\x0073\\x0045\\x0070\\x0054\\x0065\\x004d\\x0062\\x0065\\x0072-21\", \"de-DE\")\r\n           == make_tuple(21, 8, 120));\r\n    assert(read_date_locale(L\"2020-\\x0053\\x0065\\x0070-21\", \"de-DE\") == make_tuple(21, 8, 120));\r\n    assert(read_date_locale(L\"2020-\\x0073\\x0045\\x0050-21\", \"de-DE\") == make_tuple(21, 8, 120));\r\n\r\n    // German October in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x004f\\x006b\\x0074\\x006f\\x0062\\x0065\\x0072-01\", \"de-DE\") == make_tuple(1, 9, 120));\r\n    assert(read_date_locale(L\"2020-\\x004f\\x006b\\x0074-01\", \"de-DE\") == make_tuple(1, 9, 120));\r\n    assert(read_date_locale(L\"2020-\\x006f\\x004b\\x0074\\x006f\\x0042\\x0065\\x0052-01\", \"de-DE\") == make_tuple(1, 9, 120));\r\n    assert(read_date_locale(L\"2020-\\x006f\\x004b\\x0074-01\", \"de-DE\") == make_tuple(1, 9, 120));\r\n\r\n    // German November in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x004e\\x006f\\x0076\\x0065\\x006d\\x0062\\x0065\\x0072-09\", \"de-DE\")\r\n           == make_tuple(9, 10, 120));\r\n    assert(read_date_locale(L\"2020-\\x004e\\x006f\\x0076-09\", \"de-DE\") == make_tuple(9, 10, 120));\r\n    assert(read_date_locale(L\"2020-\\x006e\\x006f\\x0056\\x0065\\x006d\\x0042\\x0065\\x0052-09\", \"de-DE\")\r\n           == make_tuple(9, 10, 120));\r\n    assert(read_date_locale(L\"2020-\\x006e\\x004f\\x0056-09\", \"de-DE\") == make_tuple(9, 10, 120));\r\n\r\n    // German December in different cases (expanded, abbreviated, mixed cases)\r\n    assert(read_date_locale(L\"2020-\\x0044\\x0065\\x007a\\x0065\\x006d\\x0062\\x0065\\x0072-31\", \"de-DE\")\r\n           == make_tuple(31, 11, 120));\r\n    assert(read_date_locale(L\"2020-\\x0044\\x0065\\x007a-31\", \"de-DE\") == make_tuple(31, 11, 120));\r\n    assert(read_date_locale(L\"2020-\\x0064\\x0065\\x005a\\x0065\\x004d\\x0062\\x0045\\x0072-31\", \"de-DE\")\r\n           == make_tuple(31, 11, 120));\r\n    assert(read_date_locale(L\"2020-\\x0064\\x0045\\x005a-31\", \"de-DE\") == make_tuple(31, 11, 120));\r\n}\r\n\r\nvoid test_locale_chinese() {\r\n    // Chinese letters don't have distinct upper and lower cases\r\n\r\n    // January in Chinese (expanded and abbreviated)\r\n    assert(read_date_locale(L\"2020-\\x4e00\\x6708-05\", \"zh-CN\") == make_tuple(5, 0, 120));\r\n    assert(read_date_locale(L\"2020-\\x0031\\x6708-05\", \"zh-CN\") == make_tuple(5, 0, 120));\r\n\r\n    // February in Chinese (expanded and abbreviated)\r\n    assert(read_date_locale(L\"2020-\\x4e8c\\x6708-15\", \"zh-CN\") == make_tuple(15, 1, 120));\r\n    assert(read_date_locale(L\"2020-\\x0032\\x6708-15\", \"zh-CN\") == make_tuple(15, 1, 120));\r\n\r\n    // March in Chinese (expanded and abbreviated)\r\n    assert(read_date_locale(L\"2020-\\x4e09\\x6708-25\", \"zh-CN\") == make_tuple(25, 2, 120));\r\n    assert(read_date_locale(L\"2020-\\x0033\\x6708-25\", \"zh-CN\") == make_tuple(25, 2, 120));\r\n\r\n    // April in Chinese (expanded and abbreviated)\r\n    assert(read_date_locale(L\"2020-\\x56db\\x6708-05\", \"zh-CN\") == make_tuple(5, 3, 120));\r\n    assert(read_date_locale(L\"2020-\\x0034\\x6708-05\", \"zh-CN\") == make_tuple(5, 3, 120));\r\n\r\n    // May in Chinese (expanded and abbreviated)\r\n    assert(read_date_locale(L\"2020-\\x4e94\\x6708-15\", \"zh-CN\") == make_tuple(15, 4, 120));\r\n    assert(read_date_locale(L\"2020-\\x0035\\x6708-15\", \"zh-CN\") == make_tuple(15, 4, 120));\r\n\r\n    // June in Chinese (expanded and abbreviated)\r\n    assert(read_date_locale(L\"2020-\\x516d\\x6708-25\", \"zh-CN\") == make_tuple(25, 5, 120));\r\n    assert(read_date_locale(L\"2020-\\x0036\\x6708-25\", \"zh-CN\") == make_tuple(25, 5, 120));\r\n\r\n    // July in Chinese (expanded and abbreviated)\r\n    assert(read_date_locale(L\"2020-\\x4e03\\x6708-12\", \"zh-CN\") == make_tuple(12, 6, 120));\r\n    assert(read_date_locale(L\"2020-\\x0037\\x6708-12\", \"zh-CN\") == make_tuple(12, 6, 120));\r\n\r\n    // August in Chinese (expanded and abbreviated)\r\n    assert(read_date_locale(L\"2020-\\x516b\\x6708-02\", \"zh-CN\") == make_tuple(2, 7, 120));\r\n    assert(read_date_locale(L\"2020-\\x0038\\x6708-02\", \"zh-CN\") == make_tuple(2, 7, 120));\r\n\r\n    // September in Chinese (expanded and abbreviated)\r\n    assert(read_date_locale(L\"2020-\\x4e5d\\x6708-21\", \"zh-CN\") == make_tuple(21, 8, 120));\r\n    assert(read_date_locale(L\"2020-\\x0039\\x6708-21\", \"zh-CN\") == make_tuple(21, 8, 120));\r\n\r\n    // October in Chinese (expanded and abbreviated)\r\n    assert(read_date_locale(L\"2020-\\x5341\\x6708-01\", \"zh-CN\") == make_tuple(1, 9, 120));\r\n    assert(read_date_locale(L\"2020-\\x0031\\x0030\\x6708-01\", \"zh-CN\") == make_tuple(1, 9, 120));\r\n\r\n    // November in Chinese (expanded and abbreviated)\r\n    assert(read_date_locale(L\"2020-\\x5341\\x4e00\\x6708-09\", \"zh-CN\") == make_tuple(9, 10, 120));\r\n    assert(read_date_locale(L\"2020-\\x0031\\x0031\\x6708-09\", \"zh-CN\") == make_tuple(9, 10, 120));\r\n\r\n    // December in Chinese (expanded and abbreviated)\r\n    assert(read_date_locale(L\"2020-\\x5341\\x4e8c\\x6708-31\", \"zh-CN\") == make_tuple(31, 11, 120));\r\n    assert(read_date_locale(L\"2020-\\x0031\\x0032\\x6708-31\", \"zh-CN\") == make_tuple(31, 11, 120));\r\n}\r\n\r\nvoid test_buffer_resizing() {\r\n    time_t t = time(nullptr);\r\n    tm currentTime;\r\n    localtime_s(&currentTime, &t);\r\n\r\n    {\r\n        wstringstream wss;\r\n        wss.imbue(locale(\"ja-JP\"));\r\n        wss << put_time(&currentTime, L\"%c\");\r\n        assert(wss.rdstate() == ios_base::goodbit);\r\n    }\r\n\r\n    {\r\n        stringstream ss;\r\n        ss.imbue(locale(\"ja-JP\"));\r\n        ss << put_time(&currentTime, \"%c\");\r\n        assert(ss.rdstate() == ios_base::goodbit);\r\n    }\r\n}\r\n\r\nvoid test_gh_2618() {\r\n    // GH-2618 <xloctime>: get_time does not return correct year in tm.tm_year if year is 1\r\n    auto TestTimeGetYear = [](const char* input, const int expected_y, const int expected_Y,\r\n                               const int expected_get_year) {\r\n        {\r\n            tm time{};\r\n            istringstream iss{input};\r\n            iss >> get_time(&time, \"%y\");\r\n            assert(time.tm_year + 1900 == expected_y);\r\n        }\r\n\r\n        {\r\n            tm time{};\r\n            istringstream iss{input};\r\n            iss >> get_time(&time, \"%Y\");\r\n            assert(time.tm_year + 1900 == expected_Y);\r\n        }\r\n\r\n        {\r\n            tm time{};\r\n            ios_base::iostate state{};\r\n            istringstream iss{input};\r\n            use_facet<time_get<char>>(iss.getloc()).get_year({iss}, {}, iss, state, &time);\r\n            assert(time.tm_year + 1900 == expected_get_year);\r\n        }\r\n    };\r\n\r\n    // 4-digit strings: 'y' should only read the first two digits, 'Y' and `get_year` should agree\r\n    TestTimeGetYear(\"0001\", 2000, 1, 1);\r\n    TestTimeGetYear(\"0080\", 2000, 80, 80);\r\n    TestTimeGetYear(\"1995\", 2019, 1995, 1995);\r\n    TestTimeGetYear(\"2022\", 2020, 2022, 2022);\r\n    TestTimeGetYear(\"8522\", 1985, 8522, 8522);\r\n\r\n    // 3-digit strings: same as 4-digit\r\n    TestTimeGetYear(\"001\", 2000, 1, 1);\r\n    TestTimeGetYear(\"080\", 2008, 80, 80);\r\n    TestTimeGetYear(\"995\", 1999, 995, 995);\r\n\r\n    // 2-digit strings: 'Y' should parse literally, `get_year` should behave as 'y'\r\n    TestTimeGetYear(\"01\", 2001, 1, 2001);\r\n    TestTimeGetYear(\"80\", 1980, 80, 1980);\r\n    TestTimeGetYear(\"95\", 1995, 95, 1995);\r\n    TestTimeGetYear(\"22\", 2022, 22, 2022);\r\n\r\n    // 1-digit strings: same as 2-digit\r\n    TestTimeGetYear(\"1\", 2001, 1, 2001);\r\n}\r\n\r\nvoid test_gh_2848() {\r\n    // GH-2848 <xloctime>: time_get::get can still assert 'istreambuf_iterator is not dereferenceable' when\r\n    // the format is longer than the stream\r\n    {\r\n        const locale loc{locale::classic()};\r\n        const auto& tmget{use_facet<time_get<char>>(loc)};\r\n        ios_base::iostate err{ios_base::goodbit};\r\n        tm when{};\r\n        const string fmt{\"%X\"};\r\n        istringstream iss{\"3:04\"};\r\n        istreambuf_iterator<char> first{iss};\r\n        const istreambuf_iterator<char> last{};\r\n        tmget.get(first, last, iss, err, &when, fmt.data(), fmt.data() + fmt.size());\r\n        assert(err == (ios_base::eofbit | ios_base::failbit));\r\n    }\r\n\r\n    {\r\n        const locale loc{locale::classic()};\r\n        const auto& tmget{use_facet<time_get<wchar_t>>(loc)};\r\n        ios_base::iostate err{ios_base::goodbit};\r\n        tm when{};\r\n        const wstring fmt{L\"%X\"};\r\n        wistringstream iss{L\"3:04\"};\r\n        istreambuf_iterator<wchar_t> first{iss};\r\n        const istreambuf_iterator<wchar_t> last{};\r\n        tmget.get(first, last, iss, err, &when, fmt.data(), fmt.data() + fmt.size());\r\n        assert(err == (ios_base::eofbit | ios_base::failbit));\r\n    }\r\n}\r\n\r\nvoid test_gh_4820() {\r\n    // GH-4820 <iomanip>: std::put_time should copy unknown conversion specifiers instead of crash\r\n    time_t t = time(nullptr);\r\n    tm currentTime;\r\n    localtime_s(&currentTime, &t);\r\n\r\n    // Case 1: Test various unknown conversion specifiers.\r\n    // Case 2: \"%%\" is a known escape sequence with a dedicated fast path.\r\n    // Case 3: \"% \" is percent followed by space, which is an unknown conversion specifier.\r\n    // Case 4: \"%E%Z\" is parsed as \"%E%\" followed by \"Z\", so it should be copied unchanged,\r\n    //         even though \"%Z\" by itself would be a known conversion specifier (time zone name).\r\n    //         (In case 1, \"%E%J\" is parsed the same way; the difference is that \"%J\" would be unknown.)\r\n    {\r\n        wstringstream wss;\r\n        wss << put_time(&currentTime, L\"1:%Ei%!%E%J%P 2:%% 3:% 4:%E%Z\");\r\n        assert(wss.rdstate() == ios_base::goodbit);\r\n        assert(wss.str() == L\"1:%Ei%!%E%J%P 2:% 3:% 4:%E%Z\");\r\n    }\r\n\r\n    {\r\n        stringstream ss;\r\n        ss << put_time(&currentTime, \"1:%Ei%!%E%J%P 2:%% 3:% 4:%E%Z\");\r\n        assert(ss.rdstate() == ios_base::goodbit);\r\n        assert(ss.str() == \"1:%Ei%!%E%J%P 2:% 3:% 4:%E%Z\");\r\n    }\r\n\r\n    // Also verify that wide characters aren't truncated.\r\n    // This tests a character appearing by itself, two as specifiers, and two as modified specifiers.\r\n    {\r\n        wstringstream wss;\r\n        wss << put_time(&currentTime, L\"\\x043a%\\x043e%\\x0448%E\\x043a%O\\x0430\");\r\n        assert(wss.rdstate() == ios_base::goodbit);\r\n        assert(wss.str() == L\"\\x043a%\\x043e%\\x0448%E\\x043a%O\\x0430\");\r\n    }\r\n}\r\n\r\nvoid test_gh_4882() {\r\n    // GH-4882 <iomanip>: std::put_time should not crash on invalid/out-of-range tm struct values\r\n    const auto fieldValidation = [](int tm::* const field, const int value, const string& fmt) {\r\n        time_t t = time(nullptr);\r\n        tm currentTime;\r\n        localtime_s(&currentTime, &t);\r\n\r\n        currentTime.*field = value;\r\n\r\n        stringstream ss;\r\n        ss << put_time(&currentTime, fmt.c_str());\r\n        assert(ss.rdstate() == ios_base::goodbit);\r\n        const auto result = ss.str();\r\n        assert(result.size() == fmt.size() / 2);\r\n        assert(all_of(result.cbegin(), result.cend(), [](const char c) { return c == '?'; }));\r\n\r\n        // Narrow conversion is good enough for our ASCII only format strings\r\n        wstring wfmt(fmt.size(), L' ');\r\n        transform(fmt.cbegin(), fmt.cend(), wfmt.begin(), [](const char c) { return static_cast<wchar_t>(c); });\r\n\r\n        wstringstream wss;\r\n        wss << put_time(&currentTime, wfmt.c_str());\r\n        assert(wss.rdstate() == ios_base::goodbit);\r\n        const auto wresult = wss.str();\r\n        assert(wresult.size() == fmt.size() / 2);\r\n        assert(all_of(wresult.cbegin(), wresult.cend(), [](const wchar_t c) { return c == L'?'; }));\r\n    };\r\n\r\n    struct FormatTestData {\r\n        int tm::* field;\r\n        int lo;\r\n        int hi;\r\n        string fmt;\r\n    };\r\n\r\n    const FormatTestData testDataList[] = {\r\n        {&tm::tm_sec, -1, 61, \"%S%r%X%T%c\"},\r\n        {&tm::tm_min, -1, 60, \"%M%R%r%X%T%c\"},\r\n        {&tm::tm_hour, -1, 24, \"%H%I%p%R%r%X%T%c\"},\r\n        {&tm::tm_mday, 0, 32, \"%d%e%D%x%F%c\"},\r\n        {&tm::tm_mon, -1, 12, \"%b%B%m%h%D%x%F%c\"},\r\n        {&tm::tm_year, -1901, 8100, \"%C%y%Y%D%x%F%g%G%c\"},\r\n        {&tm::tm_wday, -1, 7, \"%a%A%u%w%U%W%g%G%c\"},\r\n        {&tm::tm_yday, -1, 366, \"%j%U%W%g%G\"},\r\n    };\r\n\r\n    for (const auto& testData : testDataList) {\r\n        fieldValidation(testData.field, testData.lo, testData.fmt);\r\n        fieldValidation(testData.field, testData.hi, testData.fmt);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0845312_comprehensive_floating_point/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0845312_comprehensive_floating_point/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Derived from: qa/VC/LibsWin/devcrt/tests/C/Dev14_845312_accurate_fp_parsing\r\n\r\n// Basic regression test for DevDiv-845312: Floating point conversion accuracy\r\n// improvements. This test verifies scanf-printf round-tripping of a set of\r\n// diverse floating point values (both single and double precision).\r\n\r\n#include <cassert>\r\n#include <cmath>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <iomanip>\r\n#include <ios>\r\n#include <limits>\r\n#include <sstream>\r\n\r\n#include <floating_point_test_cases.hpp>\r\n\r\nconstexpr auto int64_max  = std::numeric_limits<std::int64_t>::max();\r\nconstexpr auto uint64_max = std::numeric_limits<std::uint64_t>::max();\r\n\r\nconstexpr auto flt_min_exp = std::numeric_limits<float>::min_exponent;\r\nconstexpr auto flt_max_exp = std::numeric_limits<float>::max_exponent;\r\nconstexpr auto dbl_min_exp = std::numeric_limits<double>::min_exponent;\r\nconstexpr auto dbl_max_exp = std::numeric_limits<double>::max_exponent;\r\n\r\nconstexpr auto flt_min_10_exp = std::numeric_limits<float>::min_exponent10;\r\nconstexpr auto flt_max_10_exp = std::numeric_limits<float>::max_exponent10;\r\nconstexpr auto dbl_min_10_exp = std::numeric_limits<double>::min_exponent10;\r\nconstexpr auto dbl_max_10_exp = std::numeric_limits<double>::max_exponent10;\r\n\r\ntemplate <typename FloatingType>\r\nstatic FloatingType parse_as(char const*);\r\n\r\ntemplate <>\r\nfloat parse_as(char const* const string) {\r\n    float f = 0.0f;\r\n    std::istringstream iss(string);\r\n    iss >> f;\r\n    return f;\r\n}\r\n\r\ntemplate <>\r\ndouble parse_as(char const* const string) {\r\n    double d = 0.0;\r\n    std::istringstream iss(string);\r\n    iss >> d;\r\n    return d;\r\n}\r\n\r\ntemplate <typename FloatingType>\r\nstatic FloatingType parse_as_hex(char const*);\r\n\r\ntemplate <>\r\nfloat parse_as_hex(char const* const string) {\r\n    float f = 0.0f;\r\n    std::istringstream iss(string);\r\n    iss >> std::hexfloat >> f;\r\n    return f;\r\n}\r\n\r\ntemplate <>\r\ndouble parse_as_hex(char const* const string) {\r\n    double d = 0.0;\r\n    std::istringstream iss(string);\r\n    iss >> std::hexfloat >> d;\r\n    return d;\r\n}\r\n\r\nstatic uint32_t as_bits(float const value) {\r\n    return reinterpret_cast<uint32_t const&>(value);\r\n}\r\n\r\nstatic uint64_t as_bits(double const value) {\r\n    return reinterpret_cast<uint64_t const&>(value);\r\n}\r\n\r\nstatic float from_bits(uint32_t const bits) {\r\n    return reinterpret_cast<float const&>(bits);\r\n}\r\n\r\nstatic double from_bits(uint64_t const bits) {\r\n    return reinterpret_cast<double const&>(bits);\r\n}\r\n\r\nint g_failed = 0;\r\n\r\nstatic void assert_equal(uint64_t const actual, uint64_t const expected) {\r\n    if (actual != expected) {\r\n        ++g_failed;\r\n    }\r\n}\r\n\r\ntemplate <typename FloatingType>\r\nstatic void parse_and_verify_exact_bits(char const* const string, uint64_t const expected_bits) {\r\n    FloatingType const parsed_value = parse_as<FloatingType>(string);\r\n    uint64_t const actual_bits      = as_bits(parsed_value);\r\n\r\n    assert_equal(actual_bits, expected_bits);\r\n}\r\n\r\ntemplate <typename FloatingType>\r\nstatic void parse_and_verify_exact_bits_hex(char const* const string, uint64_t const expected_bits) {\r\n    FloatingType const parsed_value = parse_as_hex<FloatingType>(string);\r\n    uint64_t const actual_bits      = as_bits(parsed_value);\r\n\r\n    assert_equal(actual_bits, expected_bits);\r\n}\r\n\r\ntemplate <typename FloatingType>\r\nstatic void verify_round_trip_decimal(FloatingType const original_value) {\r\n    std::ostringstream oss;\r\n    oss << std::setprecision(1024) << std::fixed << original_value;\r\n\r\n    FloatingType const round_tripped_value = parse_as<FloatingType>(oss.str().c_str());\r\n\r\n    uint64_t const original_value_bits      = as_bits(original_value);\r\n    uint64_t const round_tripped_value_bits = as_bits(round_tripped_value);\r\n\r\n    assert_equal(round_tripped_value_bits, original_value_bits);\r\n}\r\n\r\ntemplate <typename FloatingType>\r\nstatic void verify_round_trip_hex(FloatingType const original_value) {\r\n    std::ostringstream oss;\r\n    oss << std::setprecision(32) << std::hexfloat << original_value;\r\n\r\n    FloatingType const round_tripped_value = parse_as_hex<FloatingType>(oss.str().c_str());\r\n\r\n    uint64_t const original_value_bits      = as_bits(original_value);\r\n    uint64_t const round_tripped_value_bits = as_bits(round_tripped_value);\r\n\r\n    assert_equal(round_tripped_value_bits, original_value_bits);\r\n}\r\n\r\ntemplate <typename FloatingType>\r\nstatic void verify_round_trip(FloatingType const original_value) {\r\n    // Round-trip the value using both decimal and hexadecimal formatting:\r\n    verify_round_trip_decimal(original_value);\r\n    verify_round_trip_hex(original_value);\r\n}\r\n\r\nint main() {\r\n    // Verify zeroes:\r\n    parse_and_verify_exact_bits<float>(\" 0.0\", 0x00000000);\r\n    parse_and_verify_exact_bits<float>(\"+0.0\", 0x00000000);\r\n    parse_and_verify_exact_bits<float>(\"-0.0\", 0x80000000);\r\n\r\n    parse_and_verify_exact_bits<double>(\" 0.0\", 0x0000000000000000);\r\n    parse_and_verify_exact_bits<double>(\"+0.0\", 0x0000000000000000);\r\n    parse_and_verify_exact_bits<double>(\"-0.0\", 0x8000000000000000);\r\n\r\n    // Verify the smallest denormals:\r\n    for (uint32_t i = 0x00000001; i != 0x00000100; ++i) {\r\n        verify_round_trip(from_bits(i));\r\n    }\r\n\r\n    for (uint64_t i = 0x0000000000000001; i != 0x0000000000000100; ++i) {\r\n        verify_round_trip(from_bits(i));\r\n    }\r\n\r\n    // Verify the largest denormals and the smallest normals:\r\n    for (uint32_t i = 0x007fff00; i != 0x00800100; ++i) {\r\n        verify_round_trip(from_bits(i));\r\n    }\r\n\r\n    for (uint64_t i = 0x000fffffffffff00; i != 0x0010000000000100; ++i) {\r\n        verify_round_trip(from_bits(i));\r\n    }\r\n\r\n    // Verify the largest normals:\r\n    for (uint32_t i = 0x7f7fff00; i != 0x7f800000; ++i) {\r\n        verify_round_trip(from_bits(i));\r\n    }\r\n\r\n    for (uint64_t i = 0x7fefffffffffff00; i != 0x7ff0000000000000; ++i) {\r\n        verify_round_trip(from_bits(i));\r\n    }\r\n\r\n    // Verify all representable powers of two and nearby values:\r\n    for (int32_t i = flt_min_exp; i != flt_max_exp; ++i) {\r\n        auto const f = powf(2.0f, static_cast<float>(i));\r\n        verify_round_trip(from_bits(as_bits(f) - 1));\r\n        verify_round_trip(f);\r\n        verify_round_trip(from_bits(as_bits(f) + 1));\r\n    }\r\n\r\n    for (int32_t i = dbl_min_exp; i != dbl_max_exp; ++i) {\r\n        auto const f = pow(2.0, static_cast<double>(i));\r\n        verify_round_trip(from_bits(as_bits(f) - 1));\r\n        verify_round_trip(f);\r\n        verify_round_trip(from_bits(as_bits(f) + 1));\r\n    }\r\n\r\n    // Verify all representable powers of ten and nearby values:\r\n    for (int32_t i = flt_min_10_exp; i <= flt_max_10_exp; ++i) {\r\n        auto const f = powf(10.0f, static_cast<float>(i));\r\n        verify_round_trip(from_bits(as_bits(f) - 1));\r\n        verify_round_trip(f);\r\n        verify_round_trip(from_bits(as_bits(f) + 1));\r\n    }\r\n\r\n    for (int32_t i = dbl_min_10_exp; i <= dbl_max_10_exp; ++i) {\r\n        auto const f = pow(10.0, static_cast<double>(i));\r\n        verify_round_trip(from_bits(as_bits(f) - 1));\r\n        verify_round_trip(f);\r\n        verify_round_trip(from_bits(as_bits(f) + 1));\r\n    }\r\n\r\n    // Verify a few large integer values:\r\n    verify_round_trip(static_cast<float>(int64_max));\r\n    verify_round_trip(static_cast<float>(uint64_max));\r\n\r\n    verify_round_trip(static_cast<double>(int64_max));\r\n    verify_round_trip(static_cast<double>(uint64_max));\r\n\r\n    // https://www.exploringbinary.com/nondeterministic-floating-point-conversions-in-java/\r\n    parse_and_verify_exact_bits_hex<double>(\"0x0.0000008p-1022\", 0x0000000008000000ULL);\r\n\r\n    // See floating_point_test_cases.hpp.\r\n    for (const auto& p : floating_point_test_cases_double) {\r\n        parse_and_verify_exact_bits<double>(p.first, p.second);\r\n    }\r\n\r\n    for (const auto& p : floating_point_test_cases_float) {\r\n        parse_and_verify_exact_bits<float>(p.first, p.second);\r\n    }\r\n\r\n    printf(\"%d failed.\\n\", g_failed);\r\n\r\n    assert(g_failed == 0);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0863628_atomic_compare_exchange/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0863628_atomic_compare_exchange/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//\r\n// A more or less identical version of this test is in the compiler optimizer team's test harness for arm64 coverage at:\r\n// Regress\\intrin\\atomic.cpp\r\n//\r\n\r\n#include <atomic>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <functional>\r\n#include <limits>\r\n#include <new>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n// N4981 [atomics.types.operations]/23:\r\n// bool compare_exchange_weak(T& expected, T desired,\r\n//                            memory_order order = memory_order::seq_cst) volatile noexcept;\r\n// bool compare_exchange_weak(T& expected, T desired,\r\n//                            memory_order order = memory_order::seq_cst) noexcept;\r\n// bool compare_exchange_strong(T& expected, T desired,\r\n//                              memory_order order = memory_order::seq_cst) volatile noexcept;\r\n// bool compare_exchange_strong(T& expected, T desired,\r\n//                              memory_order order = memory_order::seq_cst) noexcept;\r\n// When only one memory_order argument is supplied, the value of success is order, and the value of failure is order\r\n// except that a value of memory_order::acq_rel shall be replaced by the value memory_order::acquire and a value of\r\n// memory_order::release shall be replaced by the value memory_order::relaxed.\r\n\r\ntemplate <typename T>\r\nvoid test(T t) {\r\n    atomic<T> a(t);\r\n\r\n    a.compare_exchange_weak(t, t, memory_order_acq_rel);\r\n    a.compare_exchange_weak(t, t, memory_order_release);\r\n    a.compare_exchange_strong(t, t, memory_order_acq_rel);\r\n    a.compare_exchange_strong(t, t, memory_order_release);\r\n\r\n    volatile atomic<T> v(t);\r\n\r\n    v.compare_exchange_weak(t, t, memory_order_acq_rel);\r\n    v.compare_exchange_weak(t, t, memory_order_release);\r\n    v.compare_exchange_strong(t, t, memory_order_acq_rel);\r\n    v.compare_exchange_strong(t, t, memory_order_release);\r\n}\r\n\r\nstruct X {\r\n    int n;\r\n};\r\n\r\nstruct Y {\r\n    int n;\r\n\r\n    Y() {}\r\n};\r\n\r\n// Also test:\r\n// VSO-197633 atomic<T>::operator= should not return the old value\r\nvoid test_operator_assign() {\r\n    atomic<int> a(1);\r\n    const int b(a = 2);\r\n    assert(a.load() == 2 && b == 2);\r\n\r\n    atomic<X> aX({1});\r\n    const X bX(aX = {2});\r\n    assert(aX.load().n == 2 && bX.n == 2);\r\n}\r\n\r\n// Also test:\r\n// VSO-257598: atomic<T*> == nullptr is ambiguous\r\nvoid test_nullptr_compares() {\r\n    assert(atomic<int*>{} == nullptr);\r\n    assert(nullptr == atomic<int*>{});\r\n    assert(!(atomic<int*>{} != nullptr));\r\n    assert(!(nullptr != atomic<int*>{}));\r\n\r\n    assert(atomic<void*>{} == nullptr);\r\n    assert(nullptr == atomic<void*>{});\r\n    assert(!(atomic<void*>{} != nullptr));\r\n    assert(!(nullptr != atomic<void*>{}));\r\n}\r\n\r\n// Also test:\r\n// DevDiv-826403 \"<atomic>: passing volatile atomic<T> to store won't compile  [libs-conformance]\"\r\n// DevDiv-829873 \"<atomic>: Error when using atomic pointer to const\"\r\n// DevDiv-846428 \"<atomic>: std::atomic<T>::store with volatile specifier does not work for non-integral type\"\r\n// DevDiv-879700 \"<atomic>: atomic<T *> constructor missing cast?\"\r\n// DevDiv-1181758 \"<atomic>: MSVC 2015 std::atomic is implemented using non-conforming C++\"\r\n// This is compile-only.\r\n\r\ntemplate <typename T>\r\nstruct is_object_pointer : false_type {};\r\ntemplate <typename T>\r\nstruct is_object_pointer<T*> : is_object<T>::type {};\r\n\r\ntemplate <typename Obj, typename Atom>\r\nvoid helper4_integral(Obj& obj, Atom& atom, true_type) {\r\n    obj = atom.fetch_and(42);\r\n    obj = atom.fetch_and(42, memory_order_seq_cst);\r\n\r\n    obj = atom.fetch_or(42);\r\n    obj = atom.fetch_or(42, memory_order_seq_cst);\r\n\r\n    obj = atom.fetch_xor(42);\r\n    obj = atom.fetch_xor(42, memory_order_seq_cst);\r\n\r\n    obj = (atom &= 42);\r\n    obj = (atom |= 42);\r\n    obj = (atom ^= 42);\r\n}\r\n\r\ntemplate <typename Obj, typename Atom>\r\nvoid helper4_integral(Obj&, Atom&, false_type) {}\r\n\r\ntemplate <typename Obj, typename Atom>\r\nvoid helper3_integral_object_pointer(Obj& obj, Atom& atom, true_type) {\r\n\r\n    obj = ++atom;\r\n    obj = --atom;\r\n    obj = atom++;\r\n    obj = atom--;\r\n}\r\n\r\ntemplate <typename Obj, typename Atom>\r\nvoid helper3_integral_object_pointer(Obj&, Atom&, false_type) {}\r\n\r\ntemplate <typename Obj, typename Atom>\r\nvoid helper5_arithmetic_object_pointer(Obj& obj, Atom& atom, true_type) {\r\n    obj = atom.fetch_add(42);\r\n    obj = atom.fetch_add(42, memory_order_seq_cst);\r\n\r\n    obj = atom.fetch_sub(42);\r\n    obj = atom.fetch_sub(42, memory_order_seq_cst);\r\n\r\n    obj = (atom += 42);\r\n    obj = (atom -= 42);\r\n}\r\n\r\ntemplate <typename Obj, typename Atom>\r\nvoid helper5_arithmetic_object_pointer(Obj&, Atom&, false_type) {}\r\n\r\ntemplate <typename Obj, typename Atom>\r\nvoid helper2() {\r\n    Obj obj{};\r\n\r\n    Atom atom;\r\n\r\n    const Atom const_atom(obj);\r\n\r\n    bool b = const_atom.is_lock_free();\r\n    (void) b;\r\n\r\n    atom.store(obj);\r\n    atom.store(obj, memory_order_seq_cst);\r\n\r\n    obj = const_atom.load();\r\n    obj = const_atom.load(memory_order_seq_cst);\r\n\r\n    obj = const_atom;\r\n\r\n    obj = atom.exchange(obj);\r\n    obj = atom.exchange(obj, memory_order_seq_cst);\r\n\r\n    b = atom.compare_exchange_weak(obj, obj);\r\n    b = atom.compare_exchange_weak(obj, obj, memory_order_seq_cst);\r\n    b = atom.compare_exchange_weak(obj, obj, memory_order_seq_cst, memory_order_seq_cst);\r\n\r\n    b = atom.compare_exchange_strong(obj, obj);\r\n    b = atom.compare_exchange_strong(obj, obj, memory_order_seq_cst);\r\n    b = atom.compare_exchange_strong(obj, obj, memory_order_seq_cst, memory_order_seq_cst);\r\n\r\n    obj = (atom = obj);\r\n\r\n    helper3_integral_object_pointer(obj, atom, disjunction<is_integral<Obj>, is_object_pointer<Obj>>());\r\n\r\n    helper4_integral(obj, atom, is_integral<Obj>());\r\n\r\n#if _HAS_CXX20\r\n    helper5_arithmetic_object_pointer(obj, atom, disjunction<is_arithmetic<Obj>, is_object_pointer<Obj>>());\r\n#else\r\n    helper5_arithmetic_object_pointer(obj, atom, disjunction<is_integral<Obj>, is_object_pointer<Obj>>());\r\n#endif // _HAS_CXX20\r\n}\r\n\r\ntemplate <typename Obj>\r\nvoid helper1() {\r\n    helper2<Obj, atomic<Obj>>();\r\n\r\n#if _HAS_CXX20\r\n    if constexpr (atomic<Obj>::is_always_lock_free) {\r\n#endif // _HAS_CXX20\r\n        helper2<Obj, volatile atomic<Obj>>();\r\n#if _HAS_CXX20\r\n    }\r\n#endif // _HAS_CXX20\r\n}\r\n\r\ntemplate <int N>\r\nstruct Bytes {\r\n    unsigned char bytes[N];\r\n};\r\n\r\nvoid test_types() {\r\n    helper1<int8_t>();\r\n    helper1<int16_t>();\r\n    helper1<int32_t>();\r\n    helper1<int64_t>();\r\n    helper1<uint8_t>();\r\n    helper1<uint16_t>();\r\n    helper1<uint32_t>();\r\n    helper1<uint64_t>();\r\n\r\n    helper1<float>();\r\n    helper1<double>();\r\n    helper1<long double>();\r\n\r\n    helper1<int*>();\r\n    helper1<const int*>();\r\n    helper1<volatile int*>();\r\n    helper1<const volatile int*>();\r\n\r\n    helper1<void*>();\r\n    helper1<const void*>();\r\n    helper1<volatile void*>();\r\n    helper1<const volatile void*>();\r\n\r\n    helper1<int (*)(int)>();\r\n\r\n    helper1<Bytes<1>>();\r\n    helper1<Bytes<2>>();\r\n    helper1<Bytes<4>>();\r\n    helper1<Bytes<8>>();\r\n    helper1<Bytes<16>>();\r\n    helper1<Bytes<17>>();\r\n}\r\n\r\n\r\n// Also test:\r\n// VSO-152725 \"<atomic>: Code generated by MSVC doesn't operate atomically\r\n// on std::atomic<T> object when sizeof(T)==n && alignof(T)!=n, (n=2,4,8)\"\r\n// VSO-212461 \"<atomic>: atomic<unsigned long long> isn't 8-aligned\"\r\n\r\n// These values aren't guaranteed by the Standard, but this needs to be true for our implementation.\r\n\r\nSTATIC_ASSERT(sizeof(atomic<Bytes<1>>) == 1);\r\nSTATIC_ASSERT(sizeof(atomic<Bytes<2>>) == 2);\r\nSTATIC_ASSERT(sizeof(atomic<Bytes<4>>) == 4);\r\nSTATIC_ASSERT(sizeof(atomic<Bytes<8>>) == 8);\r\n\r\nSTATIC_ASSERT(alignof(atomic<Bytes<1>>) == 1);\r\nSTATIC_ASSERT(alignof(atomic<Bytes<2>>) == 2);\r\nSTATIC_ASSERT(alignof(atomic<Bytes<4>>) == 4);\r\nSTATIC_ASSERT(alignof(atomic<Bytes<8>>) == 8);\r\n\r\nSTATIC_ASSERT(sizeof(atomic<int8_t>) == 1);\r\nSTATIC_ASSERT(sizeof(atomic<int16_t>) == 2);\r\nSTATIC_ASSERT(sizeof(atomic<int32_t>) == 4);\r\nSTATIC_ASSERT(sizeof(atomic<int64_t>) == 8);\r\n\r\nSTATIC_ASSERT(alignof(atomic<int8_t>) == 1);\r\nSTATIC_ASSERT(alignof(atomic<int16_t>) == 2);\r\nSTATIC_ASSERT(alignof(atomic<int32_t>) == 4);\r\nSTATIC_ASSERT(alignof(atomic<int64_t>) == 8);\r\n\r\nvoid test_alignment() {\r\n    atomic<Bytes<2>> ab2{};\r\n    atomic<Bytes<4>> ab4{};\r\n    atomic<Bytes<8>> ab8{};\r\n\r\n    assert(reinterpret_cast<uintptr_t>(&ab2) % 2 == 0);\r\n    assert(reinterpret_cast<uintptr_t>(&ab4) % 4 == 0);\r\n    assert(reinterpret_cast<uintptr_t>(&ab8) % 8 == 0);\r\n\r\n    atomic<int16_t> ai16{};\r\n    atomic<int32_t> ai32{};\r\n    atomic<int64_t> ai64{};\r\n\r\n    assert(reinterpret_cast<uintptr_t>(&ai16) % 2 == 0);\r\n    assert(reinterpret_cast<uintptr_t>(&ai32) % 4 == 0);\r\n    assert(reinterpret_cast<uintptr_t>(&ai64) % 8 == 0);\r\n}\r\n\r\nSTATIC_ASSERT(noexcept(atomic<X>()));\r\nSTATIC_ASSERT(!noexcept(atomic<Y>()));\r\nSTATIC_ASSERT(noexcept(atomic<int>()));\r\nSTATIC_ASSERT(noexcept(atomic<void*>()));\r\nSTATIC_ASSERT(noexcept(atomic<Bytes<1>>()));\r\nSTATIC_ASSERT(noexcept(atomic<Bytes<2>>()));\r\nSTATIC_ASSERT(noexcept(atomic<Bytes<4>>()));\r\nSTATIC_ASSERT(noexcept(atomic<Bytes<8>>()));\r\nSTATIC_ASSERT(noexcept(atomic<Bytes<17>>()));\r\n\r\n// verify that atomic default constructors are constexpr\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wunused-const-variable\"\r\n#endif // __clang__\r\n\r\nconstexpr atomic<int> i_constexpr;\r\nconstexpr atomic<float> f_constexpr;\r\nconstexpr atomic<void*> ptr_constexpr;\r\nconstexpr atomic<X> x_constexpr;\r\nconstexpr atomic<Bytes<1>> b1_constexpr;\r\nconstexpr atomic<Bytes<2>> b2_constexpr;\r\nconstexpr atomic<Bytes<4>> b4_constexpr;\r\nconstexpr atomic<Bytes<8>> b8_constexpr;\r\nconstexpr atomic<Bytes<17>> b17_constexpr;\r\n\r\nconstexpr atomic<int> i_constexpr_v(42);\r\nconstexpr atomic<float> f_constexpr_v(0.2f);\r\nconstexpr atomic<void*> ptr_constexpr_v(nullptr);\r\nconstexpr atomic<X> x_constexpr_v(X{42});\r\nconstexpr atomic<Bytes<1>> b1_constexpr_v(Bytes<1>{});\r\nconstexpr atomic<Bytes<2>> b2_constexpr_v(Bytes<2>{});\r\nconstexpr atomic<Bytes<4>> b4_constexpr_v(Bytes<4>{});\r\nconstexpr atomic<Bytes<8>> b8_constexpr_v(Bytes<8>{});\r\nconstexpr atomic<Bytes<17>> b17_constexpr_v(Bytes<17>{});\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // __clang__\r\n\r\n// Also test trivial destructors\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<Bytes<1>>>); // these struct cases\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<Bytes<2>>>); // aren't technically required to work\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<Bytes<3>>>); // in the spec, but we think they should\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<Bytes<4>>>); // on any reasonable implementation\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<Bytes<5>>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<Bytes<6>>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<Bytes<7>>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<Bytes<8>>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<Bytes<9>>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<bool>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<char>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<signed char>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<unsigned char>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<wchar_t>>);\r\n#ifdef __cpp_char8_t\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<char8_t>>);\r\n#endif // __cpp_char8_t\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<char16_t>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<char32_t>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<short>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<unsigned short>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<int>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<unsigned int>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<float>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<long>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<unsigned long>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<long long>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<unsigned long long>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<double>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<long double>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<Bytes<1>*>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<void*>>);\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic<int (*)(int)>>);\r\n\r\nSTATIC_ASSERT(is_trivially_destructible_v<atomic_flag>);\r\n\r\n// Also test standard layout for lock free atomics\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<Bytes<1>>>); // the struct cases (but not bool) aren't required\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<Bytes<2>>>);\r\nSTATIC_ASSERT(!is_standard_layout_v<atomic<Bytes<3>>>); // TRANSITION, ABI, should already be fixed in vNext\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<Bytes<4>>>);\r\nSTATIC_ASSERT(!is_standard_layout_v<atomic<Bytes<5>>>);\r\nSTATIC_ASSERT(!is_standard_layout_v<atomic<Bytes<6>>>);\r\nSTATIC_ASSERT(!is_standard_layout_v<atomic<Bytes<7>>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<Bytes<8>>>);\r\nSTATIC_ASSERT(!is_standard_layout_v<atomic<Bytes<9>>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<bool>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<char>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<signed char>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<unsigned char>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<wchar_t>>);\r\n#ifdef __cpp_char8_t\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<char8_t>>);\r\n#endif // __cpp_char8_t\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<char16_t>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<char32_t>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<short>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<unsigned short>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<int>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<unsigned int>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<float>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<long>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<unsigned long>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<long long>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<unsigned long long>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<double>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<long double>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<Bytes<1>*>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<void*>>);\r\nSTATIC_ASSERT(is_standard_layout_v<atomic<int (*)(int)>>);\r\n\r\nSTATIC_ASSERT(is_standard_layout_v<atomic_flag>);\r\n\r\n// Also test P0152R1 atomic::is_always_lock_free\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(atomic<Bytes<1>>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<Bytes<2>>::is_always_lock_free);\r\nSTATIC_ASSERT(!atomic<Bytes<3>>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<Bytes<4>>::is_always_lock_free);\r\nSTATIC_ASSERT(!atomic<Bytes<5>>::is_always_lock_free);\r\nSTATIC_ASSERT(!atomic<Bytes<6>>::is_always_lock_free);\r\nSTATIC_ASSERT(!atomic<Bytes<7>>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<Bytes<8>>::is_always_lock_free);\r\nSTATIC_ASSERT(!atomic<Bytes<9>>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<bool>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<char>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<signed char>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<unsigned char>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<wchar_t>::is_always_lock_free);\r\n#ifdef __cpp_char8_t\r\nSTATIC_ASSERT(atomic<char8_t>::is_always_lock_free);\r\n#endif // __cpp_char8_t\r\nSTATIC_ASSERT(atomic<char16_t>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<char32_t>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<short>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<unsigned short>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<int>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<unsigned int>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<float>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<long>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<unsigned long>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<long long>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<unsigned long long>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<double>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<long double>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<Bytes<1>*>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<void*>::is_always_lock_free);\r\nSTATIC_ASSERT(atomic<int (*)(int)>::is_always_lock_free);\r\n#endif // _HAS_CXX17\r\n\r\n// Also test LWG-4169 std::atomic<T>'s default constructor should be constrained\r\n// (backported to C++14/17 modes as we backported P0883R2)\r\nSTATIC_ASSERT(is_default_constructible_v<atomic<int>>);\r\nSTATIC_ASSERT(is_default_constructible_v<atomic<bool>>);\r\nSTATIC_ASSERT(is_default_constructible_v<atomic<void*>>);\r\nSTATIC_ASSERT(is_default_constructible_v<atomic<X>>);\r\nSTATIC_ASSERT(is_default_constructible_v<atomic<Y>>);\r\nSTATIC_ASSERT(!is_default_constructible_v<atomic<reference_wrapper<int>>>);\r\nSTATIC_ASSERT(!is_default_constructible_v<atomic<reference_wrapper<const int>>>);\r\nSTATIC_ASSERT(!is_default_constructible_v<atomic<reference_wrapper<int()>>>);\r\n\r\n\r\n// Also test P0418R2 atomic compare_exchange memory_order Requirements\r\nvoid test_compare_exchange_relaxed_memory_orders() {\r\n    // assert that none of the following go to terminate\r\n    Bytes<1> b1{};\r\n    atomic<Bytes<1>>{}.compare_exchange_strong(b1, b1, memory_order_relaxed, memory_order_acquire);\r\n    Bytes<2> b2{};\r\n    atomic<Bytes<2>>{}.compare_exchange_strong(b2, b2, memory_order_relaxed, memory_order_acquire);\r\n    Bytes<4> b4{};\r\n    atomic<Bytes<4>>{}.compare_exchange_strong(b4, b4, memory_order_relaxed, memory_order_acquire);\r\n    Bytes<8> b8{};\r\n    atomic<Bytes<8>>{}.compare_exchange_strong(b8, b8, memory_order_relaxed, memory_order_acquire);\r\n}\r\n\r\n// Also test VSO-453574 \"<atomic> std::atomic load does not work with non-default constructible types\"\r\nstruct non_default_ctor_able {\r\n    non_default_ctor_able() = delete;\r\n    explicit non_default_ctor_able(int) {}\r\n    non_default_ctor_able(const non_default_ctor_able&)            = default;\r\n    non_default_ctor_able& operator=(const non_default_ctor_able&) = default;\r\n    ~non_default_ctor_able()                                       = default;\r\n};\r\n\r\nvoid test_atomic_load_non_default_constructible() {\r\n    atomic<non_default_ctor_able> atm{non_default_ctor_able{123}};\r\n    (void) atm.load();\r\n    volatile atomic<non_default_ctor_able> atmV{non_default_ctor_able{123}};\r\n    (void) atmV.load();\r\n}\r\n\r\nvoid test_p0883_atomic_value_init() {\r\n    {\r\n        alignas(atomic<int>) unsigned char buf[sizeof(atomic<int>)];\r\n        buf[0]   = 42;\r\n        buf[1]   = 43;\r\n        auto ptr = new (&buf[0]) atomic<int>;\r\n        assert(ptr->load() == 0);\r\n    }\r\n\r\n    {\r\n        alignas(atomic<void*>) unsigned char buf[sizeof(atomic<void*>)];\r\n        buf[0]   = 42;\r\n        buf[1]   = 43;\r\n        auto ptr = new (&buf[0]) atomic<void*>;\r\n        assert(ptr->load() == nullptr);\r\n    }\r\n\r\n    {\r\n        alignas(atomic<X>) unsigned char buf[sizeof(atomic<X>)];\r\n        buf[0]   = 42;\r\n        buf[1]   = 43;\r\n        auto ptr = new (&buf[0]) atomic<X>;\r\n        assert(ptr->load().n == 0);\r\n    }\r\n}\r\n\r\nvoid test_layout_paranoia() {\r\n    // Verify that we haven't broken ABI\r\n    // NB: This is in NO WAY testing standard behavior.\r\n    static_assert(sizeof(atomic_flag) == sizeof(long), \"ABI BREAK\");\r\n\r\n    atomic<Bytes<3>> a{{1, 2, 3}};\r\n    static_assert(alignof(atomic<Bytes<3>>) == alignof(long), \"ABI BREAK\");\r\n    static_assert(sizeof(atomic<Bytes<3>>) == 2 * sizeof(long), \"ABI BREAK\");\r\n    assert(reinterpret_cast<long&>(a) == 0); // first the spinlock\r\n    const auto b = reinterpret_cast<const char*>(&a) + sizeof(long);\r\n    assert(b[0] == 1); // then the data\r\n    assert(b[1] == 2);\r\n    assert(b[2] == 3);\r\n}\r\n\r\nvoid assert_bitwise_identical(const char* const msg, const double lhs, const double rhs) {\r\n    if (memcmp(&lhs, &rhs, sizeof(lhs)) != 0) {\r\n        printf(\"counterexample found in %s: %a and %a\\n\", msg, lhs, rhs);\r\n        abort();\r\n    }\r\n}\r\n\r\nvoid test_double_identical_results() {\r\n#if _HAS_CXX20\r\n    static constexpr double cases[][2] = {\r\n        {0.0, 0.0},\r\n        {numeric_limits<double>::infinity(), 0.0},\r\n        {0.0, numeric_limits<double>::infinity()},\r\n        {numeric_limits<double>::quiet_NaN(), 1.0},\r\n        {1.0, numeric_limits<double>::quiet_NaN()},\r\n        {-numeric_limits<double>::infinity(), 0.0},\r\n        {0.0, -numeric_limits<double>::infinity()},\r\n        {-numeric_limits<double>::quiet_NaN(), 1.0},\r\n        {1.0, -numeric_limits<double>::quiet_NaN()},\r\n        {numeric_limits<double>::lowest(), 0.0},\r\n        {numeric_limits<double>::min(), 0.0},\r\n        {numeric_limits<double>::min(), 1.0},\r\n        {1.0, numeric_limits<double>::min()},\r\n        {numeric_limits<double>::denorm_min(), 0.0},\r\n        {numeric_limits<double>::denorm_min(), 1.0},\r\n        {1.0, numeric_limits<double>::denorm_min()},\r\n        {numeric_limits<double>::epsilon(), 1.0},\r\n    };\r\n\r\n    for (const auto& [x, y] : cases) {\r\n        atomic add{x};\r\n        assert_bitwise_identical(\"add before\", add.fetch_add(y), x);\r\n        assert_bitwise_identical(\"add after\", add.load(), x + y);\r\n\r\n        atomic sub{x};\r\n        assert_bitwise_identical(\"sub before\", sub.fetch_sub(y), x);\r\n        assert_bitwise_identical(\"sub after\", sub.load(), x - y);\r\n\r\n        atomic addOp{x};\r\n        auto addOpControl = x;\r\n        assert_bitwise_identical(\"opAdd\", addOp += y, addOpControl += y);\r\n\r\n        atomic subOp{x};\r\n        auto subOpControl = x;\r\n        assert_bitwise_identical(\"opSub\", subOp -= y, subOpControl -= y);\r\n    }\r\n#endif // _HAS_CXX20\r\n}\r\n\r\n// Also test GH-4688 \"<atomic>: atomic_ref<void*> and atomic<void*> lack difference_type\"\r\ntemplate <class, class = void>\r\nconstexpr bool atomic_has_member_difference_type = false;\r\ntemplate <class T>\r\nconstexpr bool atomic_has_member_difference_type<T, void_t<typename atomic<T>::difference_type>> = true;\r\n\r\nSTATIC_ASSERT(is_same_v<atomic<signed char>::difference_type, signed char>);\r\nSTATIC_ASSERT(is_same_v<atomic<short>::difference_type, short>);\r\nSTATIC_ASSERT(is_same_v<atomic<int>::difference_type, int>);\r\nSTATIC_ASSERT(is_same_v<atomic<long>::difference_type, long>);\r\nSTATIC_ASSERT(is_same_v<atomic<long long>::difference_type, long long>);\r\nSTATIC_ASSERT(is_same_v<atomic<unsigned char>::difference_type, unsigned char>);\r\nSTATIC_ASSERT(is_same_v<atomic<unsigned short>::difference_type, unsigned short>);\r\nSTATIC_ASSERT(is_same_v<atomic<unsigned int>::difference_type, unsigned int>);\r\nSTATIC_ASSERT(is_same_v<atomic<unsigned long>::difference_type, unsigned long>);\r\nSTATIC_ASSERT(is_same_v<atomic<unsigned long long>::difference_type, unsigned long long>);\r\nSTATIC_ASSERT(is_same_v<atomic<char>::difference_type, char>);\r\n#ifdef __cpp_char8_t\r\nSTATIC_ASSERT(is_same_v<atomic<char8_t>::difference_type, char8_t>);\r\n#endif // defined(__cpp_char8_t)\r\nSTATIC_ASSERT(is_same_v<atomic<char16_t>::difference_type, char16_t>);\r\nSTATIC_ASSERT(is_same_v<atomic<char32_t>::difference_type, char32_t>);\r\nSTATIC_ASSERT(is_same_v<atomic<wchar_t>::difference_type, wchar_t>);\r\n\r\n#if _HAS_CXX20 // P0020R6 Floating Point Atomic\r\nSTATIC_ASSERT(is_same_v<atomic<float>::difference_type, float>);\r\nSTATIC_ASSERT(is_same_v<atomic<double>::difference_type, double>);\r\nSTATIC_ASSERT(is_same_v<atomic<long double>::difference_type, long double>);\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\nSTATIC_ASSERT(!atomic_has_member_difference_type<float>);\r\nSTATIC_ASSERT(!atomic_has_member_difference_type<double>);\r\nSTATIC_ASSERT(!atomic_has_member_difference_type<long double>);\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\nSTATIC_ASSERT(is_same_v<atomic<int*>::difference_type, ptrdiff_t>);\r\nSTATIC_ASSERT(is_same_v<atomic<bool*>::difference_type, ptrdiff_t>);\r\nSTATIC_ASSERT(is_same_v<atomic<const int*>::difference_type, ptrdiff_t>);\r\nSTATIC_ASSERT(is_same_v<atomic<volatile bool*>::difference_type, ptrdiff_t>);\r\n\r\nSTATIC_ASSERT(is_same_v<atomic<void*>::difference_type, ptrdiff_t>);\r\nSTATIC_ASSERT(is_same_v<atomic<const void*>::difference_type, ptrdiff_t>);\r\nSTATIC_ASSERT(is_same_v<atomic<volatile void*>::difference_type, ptrdiff_t>);\r\nSTATIC_ASSERT(is_same_v<atomic<const volatile void*>::difference_type, ptrdiff_t>);\r\nSTATIC_ASSERT(is_same_v<atomic<void (*)()>::difference_type, ptrdiff_t>);\r\n\r\nSTATIC_ASSERT(!atomic_has_member_difference_type<bool>);\r\nSTATIC_ASSERT(!atomic_has_member_difference_type<nullptr_t>);\r\nSTATIC_ASSERT(!atomic_has_member_difference_type<Bytes<4>>);\r\nSTATIC_ASSERT(!atomic_has_member_difference_type<Bytes<8>>);\r\nSTATIC_ASSERT(!atomic_has_member_difference_type<Bytes<12>>);\r\n\r\nint main() {\r\n    X x = {1729};\r\n    test(x);\r\n\r\n    int i = 1729;\r\n    test(i);\r\n\r\n    int* p = nullptr;\r\n    test(p);\r\n\r\n    test_operator_assign();\r\n\r\n    test_alignment();\r\n\r\n    test_nullptr_compares();\r\n\r\n    test_compare_exchange_relaxed_memory_orders();\r\n\r\n    test_atomic_load_non_default_constructible();\r\n\r\n    test_p0883_atomic_value_init();\r\n\r\n    test_layout_paranoia();\r\n\r\n    test_double_identical_results();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0920385_list_sort_allocator/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_0920385_list_sort_allocator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Test DevDiv-920385 \"<list>: list::sort shouldn't default-construct allocators\".\r\n\r\n#define _HAS_DEPRECATED_ALLOCATOR_MEMBERS 1\r\n#define _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <list>\r\n#include <map>\r\n#include <memory>\r\n#include <new>\r\n#include <numeric>\r\n#include <random>\r\n#include <regex>\r\n#include <set>\r\n#include <string>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#ifndef _M_CEE_PURE\r\n#include <future>\r\n#endif // _M_CEE_PURE\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <typename T>\r\nstruct MyAlloc {\r\n    size_t m_offset;\r\n\r\n    typedef T value_type;\r\n\r\n    explicit MyAlloc(const size_t offset) : m_offset(offset) {}\r\n\r\n    template <typename U>\r\n    MyAlloc(const MyAlloc<U>& other) : m_offset(other.m_offset) {}\r\n\r\n    template <typename U>\r\n    bool operator==(const MyAlloc<U>& other) const {\r\n        return m_offset == other.m_offset;\r\n    }\r\n\r\n    template <typename U>\r\n    bool operator!=(const MyAlloc<U>& other) const {\r\n        return m_offset != other.m_offset;\r\n    }\r\n\r\n    T* allocate(const size_t n) {\r\n        if (n == 0) {\r\n            return nullptr;\r\n        }\r\n\r\n        // Production code should check for integer overflow.\r\n        void* const pv = malloc((n + m_offset) * sizeof(T));\r\n\r\n        if (!pv) {\r\n            throw bad_alloc();\r\n        }\r\n\r\n        memset(pv, 0xAB, (n + m_offset) * sizeof(T));\r\n\r\n        return static_cast<T*>(pv) + m_offset;\r\n    }\r\n\r\n    void deallocate(T* const p, size_t) {\r\n        if (p) {\r\n            free(p - m_offset);\r\n        }\r\n    }\r\n};\r\n\r\nvoid test_DevDiv_1119194();\r\nvoid test_DevDiv_1184701();\r\nvoid test_LWG_2455();\r\nvoid test_allocator_construct_const();\r\n\r\nint main() {\r\n    MyAlloc<int> alloc(7);\r\n\r\n    // LWG-2466 \"allocator_traits::max_size default behavior is incorrect\"\r\n#ifdef _WIN64\r\n    assert(allocator_traits<MyAlloc<int>>::max_size(alloc) == 0x3FFFFFFFFFFFFFFFULL);\r\n#else\r\n    assert(allocator_traits<MyAlloc<int>>::max_size(alloc) == 0x3FFFFFFFUL);\r\n#endif\r\n\r\n    for (size_t k = 0; k < 8; ++k) {\r\n        vector<int> v(k);\r\n        iota(v.begin(), v.end(), 0);\r\n\r\n        do {\r\n            list<int, MyAlloc<int>> l(v.begin(), v.end(), alloc);\r\n            l.sort();\r\n            assert(is_sorted(l.begin(), l.end()));\r\n\r\n            forward_list<int, MyAlloc<int>> fl(v.begin(), v.end(), alloc);\r\n            fl.sort();\r\n            assert(is_sorted(fl.begin(), fl.end()));\r\n        } while (next_permutation(v.begin(), v.end()));\r\n    }\r\n\r\n    {\r\n        mt19937 urng(1729);\r\n\r\n        vector<int> v;\r\n\r\n        for (int i = 0; i < 11213; ++i) {\r\n            v.push_back(static_cast<int>(urng() & 0xFF));\r\n        }\r\n\r\n        for (int k = 0; k < 250; ++k) {\r\n            list<int, MyAlloc<int>> l(v.begin(), v.begin() + k, alloc);\r\n            l.sort();\r\n            assert(is_sorted(l.begin(), l.end()));\r\n\r\n            forward_list<int, MyAlloc<int>> fl(v.begin(), v.begin() + k, alloc);\r\n            fl.sort();\r\n            assert(is_sorted(fl.begin(), fl.end()));\r\n        }\r\n\r\n        list<int, MyAlloc<int>> l(v.begin(), v.end(), alloc);\r\n        l.sort();\r\n        assert(is_sorted(l.begin(), l.end()));\r\n\r\n        forward_list<int, MyAlloc<int>> fl(v.begin(), v.end(), alloc);\r\n        fl.sort();\r\n        assert(is_sorted(fl.begin(), fl.end()));\r\n    }\r\n\r\n    // Also test that sort is stable (which also stresses merge for list)\r\n    {\r\n        const auto cmp_first = [](const pair<unsigned int, int>& lhs, const pair<unsigned int, int>& rhs) {\r\n            return lhs.first < rhs.first;\r\n        };\r\n\r\n        mt19937 urng(1729);\r\n        list<pair<unsigned int, int>> l;\r\n        for (int i = 0; i < 1000; ++i) {\r\n            l.emplace_back(urng(), 0);\r\n        }\r\n\r\n        auto it = l.begin();\r\n        for (int i = 0; i < 1000; ++i, ++it) {\r\n            l.emplace_back(it->first, 1);\r\n        }\r\n\r\n        forward_list<pair<unsigned int, int>> fl(l.begin(), l.end());\r\n\r\n        l.sort(cmp_first);\r\n        assert(is_sorted(l.begin(), l.end()));\r\n\r\n        fl.sort(cmp_first);\r\n        assert(is_sorted(fl.begin(), fl.end()));\r\n    }\r\n\r\n    // Also test for iterator stability bug introduced touching merge; we must not change end() in a merge\r\n    {\r\n        list<int> l{1, 2, 3, 4};\r\n        list<int> target;\r\n        auto i = target.end();\r\n        target.merge(l);\r\n        --i;\r\n        assert(*i == 4);\r\n    }\r\n\r\n    {\r\n        typedef MyAlloc<int> IntAlloc;\r\n        typedef MyAlloc<pair<const int, int>> PairAlloc;\r\n\r\n        typedef less<> Lt;\r\n        typedef hash<int> Hf;\r\n        typedef equal_to<int> Eq;\r\n        Lt lt;\r\n        Hf hf;\r\n        Eq eq;\r\n\r\n        initializer_list<int> il                   = {11, 22, 33};\r\n        initializer_list<pair<const int, int>> ilp = {{10, 11}, {20, 22}, {30, 33}};\r\n\r\n        deque<int, IntAlloc> d(10, 1729, alloc);\r\n        forward_list<int, IntAlloc> fl(10, 1729, alloc);\r\n        list<int, IntAlloc> l(10, 1729, alloc);\r\n        vector<int, IntAlloc> v(10, 1729, alloc);\r\n\r\n        vector<bool, MyAlloc<bool>> vb(10, true, alloc);\r\n\r\n        map<int, int, Lt, PairAlloc> m(ilp, lt, alloc);\r\n        multimap<int, int, Lt, PairAlloc> mm(ilp, lt, alloc);\r\n        set<int, Lt, IntAlloc> s(il, lt, alloc);\r\n        multiset<int, Lt, IntAlloc> ms(il, lt, alloc);\r\n\r\n        unordered_map<int, int, Hf, Eq, PairAlloc> um(ilp, 100, hf, eq, alloc);\r\n        unordered_multimap<int, int, Hf, Eq, PairAlloc> umm(ilp, 100, hf, eq, alloc);\r\n        unordered_set<int, Hf, Eq, IntAlloc> us(il, 100, hf, eq, alloc);\r\n        unordered_multiset<int, Hf, Eq, IntAlloc> ums(il, 100, hf, eq, alloc);\r\n\r\n        basic_string<char, char_traits<char>, MyAlloc<char>> str(\"meow\", alloc);\r\n        // also test VSO-274112 \"basic_string mishandles allocators / requires defaultconstructible\"\r\n        forward_list<char> strInput{'h', 'i', '!'};\r\n        str.assign(strInput.begin(), strInput.end());\r\n        str.append(strInput.begin(), strInput.end());\r\n        str.insert(str.begin() + 1, strInput.begin(), strInput.end());\r\n        str.replace(str.begin() + 1, str.begin() + 2, strInput.begin(), strInput.end());\r\n\r\n        match_results<const char*, MyAlloc<csub_match>> mat(alloc);\r\n        assert(regex_match(\"meow\", mat, regex(\"m..w\")));\r\n    }\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n    {\r\n        function<int(int)> f1(allocator_arg, alloc, [](int n) { return n * 2; });\r\n        function<int(int)> f2(f1);\r\n    }\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n\r\n    {\r\n        shared_ptr<int> sp1(new int(1729), default_delete<int>(), alloc);\r\n        shared_ptr<int> sp2 = allocate_shared<int>(alloc, 1729);\r\n    }\r\n\r\n#ifndef _M_CEE_PURE\r\n    {\r\n        promise<int> p(allocator_arg, alloc);\r\n        future<int> f = p.get_future();\r\n        p.set_value(1729);\r\n        assert(f.get() == 1729);\r\n    }\r\n\r\n    {\r\n        promise<int&> p(allocator_arg, alloc);\r\n        future<int&> f = p.get_future();\r\n        int n          = 4096;\r\n        p.set_value(n);\r\n        assert(&f.get() == &n);\r\n    }\r\n\r\n    {\r\n        promise<void> p(allocator_arg, alloc);\r\n        future<void> f = p.get_future();\r\n        p.set_value();\r\n        f.get();\r\n    }\r\n\r\n    {\r\n        packaged_task<int()> pt(allocator_arg, alloc, [] { return 1234; });\r\n        future<int> f = pt.get_future();\r\n        pt();\r\n        assert(f.get() == 1234);\r\n    }\r\n\r\n    {\r\n        int n = 4096;\r\n        packaged_task<int&()> pt(allocator_arg, alloc, [&n]() -> int& { return n; });\r\n        future<int&> f = pt.get_future();\r\n        pt();\r\n        assert(&f.get() == &n);\r\n    }\r\n\r\n    {\r\n        packaged_task<void()> pt(allocator_arg, alloc, [] {});\r\n        future<void> f = pt.get_future();\r\n        pt();\r\n        f.get();\r\n    }\r\n#endif // _M_CEE_PURE\r\n\r\n    test_DevDiv_1119194();\r\n    test_DevDiv_1184701();\r\n    test_LWG_2455();\r\n#if !_HAS_CXX20 // support removed in C++20 by P0619R4\r\n    test_allocator_construct_const();\r\n#endif // !_HAS_CXX20\r\n}\r\n\r\n// Also test DevDiv-1119194 \"The STL should handle allocators that aren't assignable\".\r\n\r\ntemplate <typename T>\r\nstruct NoProp {\r\n    typedef T value_type;\r\n\r\n    NoProp() noexcept {}\r\n    NoProp(const NoProp&) noexcept {}\r\n    template <typename U>\r\n    NoProp(const NoProp<U>&) noexcept {}\r\n\r\n    NoProp& operator=(const NoProp&) = delete; // Important!\r\n\r\n    template <typename U>\r\n    bool operator==(const NoProp<U>&) const noexcept {\r\n        return true;\r\n    }\r\n    template <typename U>\r\n    bool operator!=(const NoProp<U>&) const noexcept {\r\n        return false;\r\n    }\r\n\r\n    T* allocate(const size_t n) const {\r\n        return allocator<T>().allocate(n);\r\n    }\r\n\r\n    void deallocate(T* const p, const size_t n) const noexcept {\r\n        allocator<T>().deallocate(p, n);\r\n    }\r\n};\r\n\r\ntemplate <typename Container>\r\nvoid test_swap_copy_move() {\r\n    Container a;\r\n    Container b;\r\n\r\n    a.swap(b);\r\n    a = b;\r\n    a = move(b);\r\n}\r\n\r\nvoid test_DevDiv_1119194() {\r\n    using AB = NoProp<bool>;\r\n    using AC = NoProp<char>;\r\n    using AI = NoProp<int>;\r\n    using AP = NoProp<pair<const int, int>>;\r\n    using L  = less<int>;\r\n    using H  = hash<int>;\r\n    using E  = equal_to<int>;\r\n\r\n    test_swap_copy_move<deque<int, AI>>();\r\n    test_swap_copy_move<forward_list<int, AI>>();\r\n    test_swap_copy_move<list<int, AI>>();\r\n    test_swap_copy_move<vector<int, AI>>();\r\n    test_swap_copy_move<vector<bool, AB>>();\r\n\r\n    test_swap_copy_move<map<int, int, L, AP>>();\r\n    test_swap_copy_move<multimap<int, int, L, AP>>();\r\n    test_swap_copy_move<set<int, L, AI>>();\r\n    test_swap_copy_move<multiset<int, L, AI>>();\r\n\r\n    test_swap_copy_move<unordered_map<int, int, H, E, AP>>();\r\n    test_swap_copy_move<unordered_multimap<int, int, H, E, AP>>();\r\n    test_swap_copy_move<unordered_set<int, H, E, AI>>();\r\n    test_swap_copy_move<unordered_multiset<int, H, E, AI>>();\r\n\r\n    test_swap_copy_move<basic_string<char, char_traits<char>, AC>>();\r\n}\r\n\r\n// Test DevDiv-1184701 \"<memory>: We should handle construct/destroy returning non-void\".\r\n\r\ntemplate <typename T>\r\nstruct NonVoid {\r\n    typedef T value_type;\r\n    NonVoid() noexcept {}\r\n    template <typename U>\r\n    NonVoid(const NonVoid<U>&) noexcept {}\r\n    template <typename U>\r\n    bool operator==(const NonVoid<U>&) const noexcept {\r\n        return true;\r\n    }\r\n    template <typename U>\r\n    bool operator!=(const NonVoid<U>&) const noexcept {\r\n        return false;\r\n    }\r\n\r\n    T* allocate(const size_t n) const {\r\n        return allocator<T>().allocate(n);\r\n    }\r\n\r\n    int deallocate(T* const p, const size_t n) const noexcept {\r\n        allocator<T>().deallocate(p, n);\r\n        return -9;\r\n    }\r\n\r\n    template <typename U, typename... Args>\r\n    int construct(U* const p, Args&&... args) const {\r\n        ::new (static_cast<void*>(p)) U(forward<Args>(args)...);\r\n        return -99;\r\n    }\r\n\r\n    template <typename U>\r\n    int destroy(U* const p) const noexcept {\r\n        p->~U();\r\n        return -999;\r\n    }\r\n};\r\n\r\nvoid test_DevDiv_1184701() {\r\n    const vector<int, NonVoid<int>> v = {11, 22, 33};\r\n\r\n    assert(v[1] == 22);\r\n}\r\n\r\n\r\n// LWG-2455 \"Allocator default construction should be allowed to throw\"\r\nbool g_true = true; // Silence warnings.\r\n\r\ntemplate <typename T>\r\nstruct ThrowingDefaultCtor {\r\n    typedef T value_type;\r\n\r\n    ThrowingDefaultCtor() {\r\n        if (g_true) {\r\n            throw 2015;\r\n        }\r\n    }\r\n\r\n    ThrowingDefaultCtor(const ThrowingDefaultCtor&) noexcept {}\r\n    template <typename U>\r\n    ThrowingDefaultCtor(const ThrowingDefaultCtor<U>&) noexcept {}\r\n\r\n    template <typename U>\r\n    bool operator==(const ThrowingDefaultCtor<U>&) const noexcept {\r\n        return true;\r\n    }\r\n    template <typename U>\r\n    bool operator!=(const ThrowingDefaultCtor<U>&) const noexcept {\r\n        return false;\r\n    }\r\n\r\n    T* allocate(const size_t n) const {\r\n        return allocator<T>().allocate(n);\r\n    }\r\n\r\n    void deallocate(T* const p, const size_t n) const noexcept {\r\n        allocator<T>().deallocate(p, n);\r\n    }\r\n};\r\n\r\nvoid test_LWG_2455() {\r\n    STATIC_ASSERT(is_nothrow_default_constructible_v<allocator<int>>);\r\n    STATIC_ASSERT(is_nothrow_default_constructible_v<string>);\r\n    STATIC_ASSERT(is_nothrow_default_constructible_v<vector<int>>);\r\n\r\n    using ThrowingString = basic_string<char, char_traits<char>, ThrowingDefaultCtor<char>>;\r\n    using ThrowingVector = vector<int, ThrowingDefaultCtor<int>>;\r\n\r\n    STATIC_ASSERT(is_default_constructible_v<ThrowingDefaultCtor<int>>);\r\n    STATIC_ASSERT(!is_nothrow_default_constructible_v<ThrowingDefaultCtor<int>>);\r\n    STATIC_ASSERT(is_default_constructible_v<ThrowingString>);\r\n    STATIC_ASSERT(!is_nothrow_default_constructible_v<ThrowingString>);\r\n    STATIC_ASSERT(is_default_constructible_v<ThrowingVector>);\r\n    STATIC_ASSERT(!is_nothrow_default_constructible_v<ThrowingVector>);\r\n\r\n    try {\r\n        ThrowingString str;\r\n        abort();\r\n    } catch (const int e) {\r\n        assert(e == 2015);\r\n    }\r\n\r\n    try {\r\n        ThrowingVector vec;\r\n        abort();\r\n    } catch (const int e) {\r\n        assert(e == 2015);\r\n    }\r\n}\r\n\r\n#if !_HAS_CXX20 // support removed in C++20 by P0619R4\r\nvoid test_allocator_construct_const() {\r\n    // Annex D actually requires the default allocator to const_cast here\r\n    // See N4659 D.9 [depr.default.allocator]/6\r\n    int example                  = 0;\r\n    const int* const exampleCptr = &example;\r\n    allocator<int> alloc;\r\n    alloc.construct(&example, 42);\r\n    assert(example == 42);\r\n    allocator_traits<allocator<int>>::construct(alloc, exampleCptr, 1729);\r\n    assert(example == 1729);\r\n}\r\n#endif // !_HAS_CXX20\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1003120_search_test/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1003120_search_test/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename C1, typename C2>\r\nvoid test(const char* s1, const char* s2, int expected) {\r\n    C1 c1(s1, s1 + strlen(s1));\r\n    C2 c2(s2, s2 + strlen(s2));\r\n\r\n    auto iter = search(c1.begin(), c1.end(), c2.begin(), c2.end(), [](char ch1, char ch2) {\r\n        // This is almost redundant but it will help ensure we don't dereference an invalid iterator:\r\n        assert(ch1 >= 'a' && ch1 <= 'f');\r\n        assert(ch2 >= 'a' && ch2 <= 'f');\r\n        return ch1 == ch2;\r\n    });\r\n\r\n    if (iter == c1.end()) {\r\n        assert(-1 == expected);\r\n    } else {\r\n        assert(distance(c1.begin(), iter) == expected);\r\n    }\r\n}\r\n\r\ntemplate <typename C1, typename C2>\r\nvoid test_type() {\r\n    // s1 is longer than s2\r\n    // positive tests\r\n    test<C1, C2>(\"abc\", \"ab\", 0);\r\n    test<C1, C2>(\"cabc\", \"ab\", 1);\r\n    test<C1, C2>(\"cab\", \"ab\", 1);\r\n    test<C1, C2>(\"abc\", \"c\", 2);\r\n    test<C1, C2>(\"ccab\", \"abc\", -1);\r\n    test<C1, C2>(\"a\", \"\", 0);\r\n    // negative tests\r\n    test<C1, C2>(\"ab\", \"c\", -1);\r\n    test<C1, C2>(\"abc\", \"de\", -1);\r\n    test<C1, C2>(\"abc\", \"ad\", -1);\r\n    test<C1, C2>(\"abcd\", \"bce\", -1);\r\n    test<C1, C2>(\"abcd\", \"cde\", -1);\r\n\r\n    // s1 is the same length as s2\r\n    // positive tests\r\n    test<C1, C2>(\"ab\", \"ab\", 0);\r\n    test<C1, C2>(\"a\", \"a\", 0);\r\n    // negative tests\r\n    test<C1, C2>(\"\", \"\", -1);\r\n    test<C1, C2>(\"a\", \"b\", -1);\r\n    test<C1, C2>(\"ab\", \"cd\", -1);\r\n    test<C1, C2>(\"ab\", \"ac\", -1);\r\n\r\n    // s1 is shorter than s2\r\n    // positive tests - none\r\n    // negative tests\r\n    test<C1, C2>(\"ab\", \"cde\", -1);\r\n    test<C1, C2>(\"a\", \"ab\", -1);\r\n    test<C1, C2>(\"ab\", \"abc\", -1);\r\n    test<C1, C2>(\"\", \"a\", -1);\r\n}\r\n\r\nint main() {\r\n\r\n    test_type<vector<char>, vector<char>>();\r\n    test_type<vector<char>, list<char>>();\r\n    test_type<vector<char>, forward_list<char>>();\r\n\r\n    test_type<list<char>, vector<char>>();\r\n    test_type<list<char>, list<char>>();\r\n    test_type<list<char>, forward_list<char>>();\r\n\r\n    test_type<forward_list<char>, vector<char>>();\r\n    test_type<forward_list<char>, list<char>>();\r\n    test_type<forward_list<char>, forward_list<char>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1066589_shared_ptr_atomic_deadlock/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1066589_shared_ptr_atomic_deadlock/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_CXX20_OLD_SHARED_PTR_ATOMIC_SUPPORT_DEPRECATION_WARNING\r\n\r\n#include <cstdlib>\r\n#include <memory>\r\n\r\n#ifndef _M_CEE_PURE\r\n#include <atomic>\r\n#endif // _M_CEE_PURE\r\n\r\nusing namespace std;\r\n\r\nshared_ptr<int> g_sp;\r\n\r\nstruct Noisy {\r\n    Noisy() = default;\r\n\r\n    ~Noisy() {\r\n        (void) atomic_load(&g_sp);\r\n    }\r\n\r\n    Noisy(const Noisy&)            = delete;\r\n    Noisy& operator=(const Noisy&) = delete;\r\n};\r\n\r\nint main() {\r\n    {\r\n        shared_ptr<Noisy> dest;\r\n        shared_ptr<Noisy> src;\r\n        atomic_store(&dest, src);\r\n    }\r\n\r\n    {\r\n        shared_ptr<Noisy> dest;\r\n        shared_ptr<Noisy> src = make_shared<Noisy>();\r\n        atomic_store(&dest, src);\r\n    }\r\n\r\n    {\r\n        shared_ptr<Noisy> dest = make_shared<Noisy>();\r\n        shared_ptr<Noisy> src;\r\n        atomic_store(&dest, src);\r\n    }\r\n\r\n    {\r\n        shared_ptr<Noisy> dest = make_shared<Noisy>();\r\n        shared_ptr<Noisy> src  = dest;\r\n        atomic_store(&dest, src);\r\n    }\r\n\r\n    {\r\n        shared_ptr<Noisy> dest = make_shared<Noisy>();\r\n        shared_ptr<Noisy> src  = make_shared<Noisy>();\r\n        atomic_store(&dest, src);\r\n    }\r\n\r\n    // **********\r\n\r\n    {\r\n        shared_ptr<Noisy> dest;\r\n        shared_ptr<Noisy> src;\r\n        atomic_exchange(&dest, src);\r\n    }\r\n\r\n    {\r\n        shared_ptr<Noisy> dest;\r\n        shared_ptr<Noisy> src = make_shared<Noisy>();\r\n        atomic_exchange(&dest, src);\r\n    }\r\n\r\n    {\r\n        shared_ptr<Noisy> dest = make_shared<Noisy>();\r\n        shared_ptr<Noisy> src;\r\n        atomic_exchange(&dest, src);\r\n    }\r\n\r\n    {\r\n        shared_ptr<Noisy> dest = make_shared<Noisy>();\r\n        shared_ptr<Noisy> src  = dest;\r\n        atomic_exchange(&dest, src);\r\n    }\r\n\r\n    {\r\n        shared_ptr<Noisy> dest = make_shared<Noisy>();\r\n        shared_ptr<Noisy> src  = make_shared<Noisy>();\r\n        atomic_exchange(&dest, src);\r\n    }\r\n\r\n    // **********\r\n\r\n    {\r\n        shared_ptr<Noisy> object;\r\n        shared_ptr<Noisy> expected = make_shared<Noisy>();\r\n        shared_ptr<Noisy> desired;\r\n        atomic_compare_exchange_weak(&object, &expected, desired);\r\n    }\r\n\r\n    {\r\n        // Nothing forbids aliasing here.\r\n        shared_ptr<Noisy> object = make_shared<Noisy>();\r\n        shared_ptr<Noisy> desired;\r\n        atomic_compare_exchange_weak(&object, &object, desired);\r\n    }\r\n\r\n    // **********\r\n\r\n    {\r\n        shared_ptr<Noisy> object;\r\n        shared_ptr<Noisy> expected = make_shared<Noisy>();\r\n        shared_ptr<Noisy> desired;\r\n        atomic_compare_exchange_strong(&object, &expected, desired);\r\n    }\r\n\r\n    {\r\n        // Nothing forbids aliasing here.\r\n        shared_ptr<Noisy> object = make_shared<Noisy>();\r\n        shared_ptr<Noisy> desired;\r\n        atomic_compare_exchange_strong(&object, &object, desired);\r\n    }\r\n\r\n    // Also test VSO-911206 \"Error specifying explicit template argument of abstract type for atomic non-member\r\n    // functions\"\r\n    {\r\n        struct Base {\r\n            virtual ~Base()     = default;\r\n            virtual void test() = 0;\r\n        };\r\n\r\n        struct Derived final : Base {\r\n            void test() override {}\r\n        };\r\n\r\n        shared_ptr<Base> object;\r\n\r\n        atomic_store<Base>(&object, make_shared<Derived>());\r\n        atomic_store_explicit<Base>(&object, make_shared<Derived>(), memory_order_seq_cst);\r\n\r\n        atomic_exchange<Base>(&object, make_shared<Derived>());\r\n        atomic_exchange_explicit<Base>(&object, make_shared<Derived>(), memory_order_seq_cst);\r\n\r\n        atomic_compare_exchange_weak<Base>(&object, &object, make_shared<Derived>());\r\n        atomic_compare_exchange_weak_explicit<Base>(\r\n            &object, &object, make_shared<Derived>(), memory_order_seq_cst, memory_order_seq_cst);\r\n\r\n        atomic_compare_exchange_strong<Base>(&object, &object, make_shared<Derived>());\r\n        atomic_compare_exchange_strong_explicit<Base>(\r\n            &object, &object, make_shared<Derived>(), memory_order_seq_cst, memory_order_seq_cst);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1066931_filesystem_rename_noop/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1066931_filesystem_rename_noop/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <fstream>\r\n#include <string>\r\n#include <system_error>\r\n\r\n#if _HAS_CXX17\r\n#include <filesystem>\r\n#endif // _HAS_CXX17\r\n\r\n#include <experimental_filesystem.hpp>\r\n#include <test_filesystem_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nvoid assert_success(const error_code& ec) {\r\n    assert(!ec);\r\n}\r\n\r\nvoid assert_failure(const error_code& ec) {\r\n    assert(!!ec);\r\n}\r\n\r\nstring ReadFile(const char* const filename) {\r\n    printf(R\"(reading contents of \"%s\"... )\", filename);\r\n    ifstream f(filename);\r\n    if (f.good()) {\r\n        string s;\r\n        assert(getline(f, s).good());\r\n        puts(\"success\");\r\n        return s;\r\n    } else {\r\n        puts(\"nonexistent\");\r\n        return \"NONEXISTENT\";\r\n    }\r\n}\r\n\r\nvoid WriteToFile(const char* const s, const char* const filename) {\r\n    printf(R\"(writing \"%s\" to \"%s\"... )\", s, filename);\r\n    ofstream f(filename);\r\n    f << s << endl;\r\n    assert(f.good());\r\n    puts(\"success\");\r\n}\r\n\r\nvoid TouchFile(const char* const filename) {\r\n    WriteToFile(\"\", filename);\r\n}\r\n\r\ntemplate <class PathIsh>\r\nPathIsh Get_child_dir_name(const PathIsh& p) {\r\n    auto filenameStr = p.filename().native();\r\n    filenameStr.push_back(L'c');\r\n    return p / filenameStr;\r\n}\r\n\r\nnamespace test_experimental {\r\n    namespace fs = experimental::filesystem;\r\n\r\n    void Cleanup() {\r\n        printf(\"cleaning up... \");\r\n        error_code ec;\r\n        fs::remove(\"missing.txt\", ec);\r\n        assert_success(ec);\r\n        fs::remove(\"missing2.txt\", ec);\r\n        assert_success(ec);\r\n        fs::remove(\"innocent.txt\", ec);\r\n        assert_success(ec);\r\n        fs::remove(\"meow_old.txt\", ec);\r\n        assert_success(ec);\r\n        fs::remove(\"meow_new.txt\", ec);\r\n        assert_success(ec);\r\n        fs::remove(\"same.txt\", ec);\r\n        assert_success(ec);\r\n        fs::remove(\"cats.txt\", ec);\r\n        assert_success(ec);\r\n        fs::remove(\"dogs.txt\", ec);\r\n        assert_success(ec);\r\n        fs::remove_all(\"subdir\", ec);\r\n        assert_success(ec);\r\n        fs::remove_all(\"subdir_copied\", ec);\r\n        assert_success(ec);\r\n        puts(\"done.\");\r\n    }\r\n\r\n    error_code TestRename(const char* const old_p, const char* const new_p) {\r\n        printf(\"attempting to rename \\\"%s\\\" to \\\"%s\\\"...\\n\", old_p, new_p);\r\n        error_code ec;\r\n        fs::rename(old_p, new_p, ec);\r\n        return ec;\r\n    }\r\n\r\n    void Test_Dev11_1066931_filesystem_rename_noop() {\r\n        WriteToFile(\"innocent\", \"innocent.txt\");\r\n        WriteToFile(\"meow\", \"meow_old.txt\");\r\n        WriteToFile(\"same\", \"same.txt\");\r\n        WriteToFile(\"cats\", \"cats.txt\");\r\n        WriteToFile(\"dogs\", \"dogs.txt\");\r\n\r\n        assert(ReadFile(\"missing.txt\") == \"NONEXISTENT\");\r\n        assert_failure(TestRename(\"missing.txt\", \"missing.txt\"));\r\n        assert(ReadFile(\"missing.txt\") == \"NONEXISTENT\");\r\n\r\n        assert(ReadFile(\"missing.txt\") == \"NONEXISTENT\");\r\n        assert(ReadFile(\"missing2.txt\") == \"NONEXISTENT\");\r\n        assert_failure(TestRename(\"missing.txt\", \"missing2.txt\"));\r\n        assert(ReadFile(\"missing.txt\") == \"NONEXISTENT\");\r\n        assert(ReadFile(\"missing2.txt\") == \"NONEXISTENT\");\r\n\r\n        assert(ReadFile(\"missing.txt\") == \"NONEXISTENT\");\r\n        assert(ReadFile(\"innocent.txt\") == \"innocent\");\r\n        assert_failure(TestRename(\"missing.txt\", \"innocent.txt\"));\r\n        assert(ReadFile(\"missing.txt\") == \"NONEXISTENT\");\r\n        assert(ReadFile(\"innocent.txt\") == \"innocent\");\r\n\r\n        assert(ReadFile(\"meow_old.txt\") == \"meow\");\r\n        assert(ReadFile(\"meow_new.txt\") == \"NONEXISTENT\");\r\n        assert_success(TestRename(\"meow_old.txt\", \"meow_new.txt\"));\r\n        assert(ReadFile(\"meow_old.txt\") == \"NONEXISTENT\");\r\n        assert(ReadFile(\"meow_new.txt\") == \"meow\");\r\n\r\n        assert(ReadFile(\"same.txt\") == \"same\");\r\n        assert_success(TestRename(\"same.txt\", \"same.txt\"));\r\n        assert(ReadFile(\"same.txt\") == \"same\");\r\n\r\n        assert(ReadFile(\"cats.txt\") == \"cats\");\r\n        assert(ReadFile(\"dogs.txt\") == \"dogs\");\r\n        assert_success(TestRename(\"cats.txt\", \"dogs.txt\"));\r\n        assert(ReadFile(\"cats.txt\") == \"NONEXISTENT\");\r\n        assert(ReadFile(\"dogs.txt\") == \"cats\");\r\n    }\r\n\r\n    void Test_VSO_121387_filesystem_equivalent_should_accept_directories() {\r\n        error_code ec;\r\n        fs::create_directory(\"subdir\", ec);\r\n        assert_success(ec);\r\n        fs::create_directory(\"subdir/dir1\", ec);\r\n        assert_success(ec);\r\n        fs::create_directory(\"subdir/dir2\", ec);\r\n        assert_success(ec);\r\n        TouchFile(\"subdir/file.txt\");\r\n        fs::create_hard_link(\"subdir/file.txt\", \"subdir/file_link.txt\", ec);\r\n        assert_success(ec);\r\n\r\n        assert(fs::equivalent(\"subdir/dir2\", \"subdir/dir2\", ec));\r\n        assert_success(ec);\r\n        assert(fs::equivalent(\"subdir/file.txt\", \"subdir/file.txt\", ec));\r\n        assert_success(ec);\r\n\r\n        assert(!fs::equivalent(\"subdir/dir1\", \"subdir\", ec));\r\n        assert_success(ec);\r\n        assert(!fs::equivalent(\"subdir/dir1\", \"subdir/dir2\", ec));\r\n        assert_success(ec);\r\n        assert(!fs::equivalent(\"subdir/dir1\", \"subdir/file.txt\", ec));\r\n        assert_success(ec);\r\n        assert(!fs::equivalent(\"subdir/file.txt\", \"subdir/dir1\", ec));\r\n        assert_success(ec);\r\n\r\n        assert(fs::equivalent(\"subdir/file.txt\", \"subdir/.././subdir/file.txt\", ec));\r\n        assert_success(ec);\r\n        assert(fs::equivalent(\"subdir/dir1\", \"subdir/.././subdir/dir1\", ec));\r\n        assert_success(ec);\r\n\r\n        assert(fs::equivalent(\"subdir/file.txt\", \"subdir/file_link.txt\", ec));\r\n        assert_success(ec);\r\n    }\r\n\r\n    void Test_VSO_121387_filesystem_hard_link_count_should_accept_directories() {\r\n        error_code ec;\r\n        fs::create_directory(\"subdir\", ec);\r\n        assert_success(ec);\r\n        fs::create_directory(\"subdir/dir1\", ec);\r\n        assert_success(ec);\r\n        TouchFile(\"meow_old.txt\");\r\n        fs::create_hard_link(\"meow_old.txt\", \"meow_new.txt\", ec);\r\n        assert_success(ec);\r\n\r\n        fs::create_hard_link(\"subdir/dir1\", \"subdir/dir2\", ec);\r\n        assert_failure(ec); // hard links aren't supported for directories on Windows\r\n\r\n        assert(fs::hard_link_count(\"subdir\", ec) == 1u);\r\n        assert_success(ec);\r\n        assert(fs::hard_link_count(\"meow_old.txt\", ec) == 2u);\r\n        assert_success(ec);\r\n        assert(fs::hard_link_count(\"meow_new.txt\", ec) == 2u);\r\n        assert_success(ec);\r\n\r\n        assert(fs::hard_link_count(\"missing.txt\", ec) == static_cast<uintmax_t>(-1));\r\n        assert_failure(ec);\r\n    }\r\n\r\n    void Test_VSO_121387_filesystem_set_write_time_should_accept_directories() {\r\n        error_code ec;\r\n        fs::create_directory(\"subdir\", ec);\r\n        assert_success(ec);\r\n\r\n        // Technically speaking the underlying file system may not have a high\r\n        // enough resolution for the equality tests here; but in practice our\r\n        // target is going to be NTFS or ReFS which have 100ns increment resolution,\r\n        // and is >= that which the file clock offers.\r\n        auto const expectedTime = fs::file_time_type::clock::now() - 48h;\r\n        fs::last_write_time(\"subdir\", expectedTime, ec);\r\n        assert_success(ec);\r\n        assert(fs::last_write_time(\"subdir\", ec) == expectedTime);\r\n        assert_success(ec);\r\n\r\n        TouchFile(\"meow_old.txt\");\r\n        fs::last_write_time(\"meow_old.txt\", expectedTime, ec);\r\n        assert_success(ec);\r\n        assert(fs::last_write_time(\"meow_old.txt\", ec) == expectedTime);\r\n        assert_success(ec);\r\n\r\n        fs::last_write_time(\"missing.txt\", expectedTime, ec);\r\n        assert_failure(ec);\r\n        assert(fs::last_write_time(\"missing.txt\", ec) == fs::file_time_type::time_point::min());\r\n        assert_failure(ec);\r\n    }\r\n\r\n    void Create_copy_source() {\r\n        error_code ec;\r\n        fs::create_directory(\"subdir\", ec);\r\n        assert_success(ec);\r\n        TouchFile(\"subdir/cats.txt\");\r\n        TouchFile(\"subdir/dogs.txt\");\r\n        fs::create_directory(\"subdir/subsubdir\", ec);\r\n        assert_success(ec);\r\n        TouchFile(\"subdir/subsubdir/meow.txt\");\r\n    }\r\n\r\n    void Test_VSO_153113_copy_filename() {\r\n        Create_copy_source();\r\n        error_code ec;\r\n        fs::create_directory(\"subdir_copied\", ec);\r\n        assert_success(ec);\r\n        fs::copy(\"subdir/cats.txt\", \"subdir_copied\", ec);\r\n        assert_success(ec);\r\n        assert(fs::exists(\"subdir_copied/cats.txt\", ec));\r\n        assert_success(ec);\r\n    }\r\n\r\n    void Test_VSO_153113_copy_examples() {\r\n        // This example is taken directly from N4100 15.3 [fs.ops.copy]/32\r\n        // (This tests copy_options::_Unspecified_recursion_prevention_tag)\r\n        Create_copy_source();\r\n        error_code ec;\r\n        fs::copy(\"subdir\", \"subdir_copied\", ec);\r\n        assert_success(ec);\r\n        assert(fs::exists(\"subdir_copied/cats.txt\", ec));\r\n        assert_success(ec);\r\n        assert(fs::exists(\"subdir_copied/dogs.txt\", ec));\r\n        assert_success(ec);\r\n        assert(!fs::exists(\"subdir_copied/subsubdir\", ec));\r\n        assert_success(ec);\r\n\r\n        // N4100 15.3 [fs.ops.copy]/34\r\n        fs::remove_all(\"subdir_copied\", ec);\r\n        assert_success(ec);\r\n        fs::copy(\"subdir\", \"subdir_copied\", fs::copy_options::recursive, ec);\r\n        assert_success(ec);\r\n        assert(fs::exists(\"subdir_copied/cats.txt\", ec));\r\n        assert_success(ec);\r\n        assert(fs::exists(\"subdir_copied/dogs.txt\", ec));\r\n        assert_success(ec);\r\n        assert(fs::exists(\"subdir_copied/subsubdir/meow.txt\", ec));\r\n        assert_success(ec);\r\n    }\r\n\r\n    void Test_VSO_171729_disable_recursion_pending_should_not_be_permanent() {\r\n        error_code ec;\r\n        fs::create_directories(\"subdir/subdir1/subdir1c\", ec);\r\n        assert_success(ec);\r\n        fs::create_directories(\"subdir/subdir2/subdir2c\", ec);\r\n        assert_success(ec);\r\n        fs::create_directories(\"subdir/subdir3/subdir3c\", ec);\r\n        assert_success(ec);\r\n\r\n        {\r\n            fs::recursive_directory_iterator iter(\"subdir\");\r\n            fs::recursive_directory_iterator end;\r\n\r\n            assert(\"recursive_directory_iterator had no entries\" && iter != end);\r\n            fs::path badDirName1 = Get_child_dir_name(iter->path());\r\n            iter.disable_recursion_pending();\r\n\r\n            ++iter;\r\n            assert(\"recursive_directory_iterator had only 1 entry\" && iter != end);\r\n            assert(\"disable_recursion_pending didn't work\" && iter->path() != badDirName1);\r\n            fs::path goodDirName2 = Get_child_dir_name(iter->path());\r\n\r\n            ++iter;\r\n            assert(\"recursive_directory_iterator had only 2 entries\" && iter != end);\r\n            assert(\"disable_recursion_pending was permanent\" && iter->path() == goodDirName2);\r\n\r\n            iter.disable_recursion_pending();\r\n            ++iter;\r\n\r\n            assert(\"recursive_directory_iterator increment didn't reset recursion_pending\" && iter.recursion_pending());\r\n            assert(\"recursive_directory_iterator didn't have enough entries\" && iter != end);\r\n\r\n            iter.disable_recursion_pending();\r\n            ++iter;\r\n\r\n            assert(\"recursive_directory_iterator had too many entries\" && iter == end);\r\n        }\r\n    }\r\n\r\n    void run_tests() {\r\n        error_code ec;\r\n        const auto previousCd = fs::current_path(ec);\r\n        assert_success(ec);\r\n        const auto testDir = fs::temp_directory_path() / get_test_directory_subname(\"filesystem_rename_noop\");\r\n        printf(\"changing directory to \\\"%ls\\\"\\n\", testDir.native().c_str());\r\n        fs::create_directory(testDir, ec);\r\n        assert_success(ec);\r\n        fs::current_path(testDir, ec);\r\n        assert_success(ec);\r\n\r\n        puts(\"running test Test_Dev11_1066931_filesystem_rename_noop\");\r\n        Test_Dev11_1066931_filesystem_rename_noop();\r\n        Cleanup();\r\n        puts(\"running test Test_VSO_121387_filesystem_equivalent_should_accept_directories\");\r\n        Test_VSO_121387_filesystem_equivalent_should_accept_directories();\r\n        Cleanup();\r\n        puts(\"running test Test_VSO_121387_filesystem_hard_link_count_should_accept_directories\");\r\n        Test_VSO_121387_filesystem_hard_link_count_should_accept_directories();\r\n        Cleanup();\r\n        puts(\"running test Test_VSO_121387_filesystem_set_write_time_should_accept_directories\");\r\n        Test_VSO_121387_filesystem_set_write_time_should_accept_directories();\r\n        Cleanup();\r\n        puts(\"running test Test_VSO_153113_copy_filename\");\r\n        Test_VSO_153113_copy_filename();\r\n        Cleanup();\r\n        puts(\"running test Test_VSO_153113_copy_examples\");\r\n        Test_VSO_153113_copy_examples();\r\n        Cleanup();\r\n        puts(\"running test Test_VSO_171729_disable_recursion_pending_should_not_be_permanent\");\r\n        Test_VSO_171729_disable_recursion_pending_should_not_be_permanent();\r\n        Cleanup();\r\n\r\n        fs::current_path(previousCd, ec);\r\n        assert_success(ec);\r\n        fs::remove_all(testDir, ec);\r\n        assert_success(ec);\r\n    }\r\n} // namespace test_experimental\r\n\r\n#if _HAS_CXX17\r\nnamespace test_standard {\r\n    void Cleanup() {\r\n        printf(\"cleaning up... \");\r\n        error_code ec;\r\n        filesystem::remove(\"missing.txt\", ec);\r\n        assert_success(ec);\r\n        filesystem::remove(\"missing2.txt\", ec);\r\n        assert_success(ec);\r\n        filesystem::remove(\"innocent.txt\", ec);\r\n        assert_success(ec);\r\n        filesystem::remove(\"meow_old.txt\", ec);\r\n        assert_success(ec);\r\n        filesystem::remove(\"meow_new.txt\", ec);\r\n        assert_success(ec);\r\n        filesystem::remove(\"same.txt\", ec);\r\n        assert_success(ec);\r\n        filesystem::remove(\"cats.txt\", ec);\r\n        assert_success(ec);\r\n        filesystem::remove(\"dogs.txt\", ec);\r\n        assert_success(ec);\r\n        filesystem::remove_all(\"subdir\", ec);\r\n        assert_success(ec);\r\n        filesystem::remove_all(\"subdir_copied\", ec);\r\n        assert_success(ec);\r\n        puts(\"done.\");\r\n    }\r\n\r\n    error_code TestRename(const char* const old_p, const char* const new_p) {\r\n        printf(\"attempting to rename \\\"%s\\\" to \\\"%s\\\"...\\n\", old_p, new_p);\r\n        error_code ec;\r\n        filesystem::rename(old_p, new_p, ec);\r\n        return ec;\r\n    }\r\n\r\n    void Test_Dev11_1066931_filesystem_rename_noop() {\r\n        WriteToFile(\"innocent\", \"innocent.txt\");\r\n        WriteToFile(\"meow\", \"meow_old.txt\");\r\n        WriteToFile(\"same\", \"same.txt\");\r\n        WriteToFile(\"cats\", \"cats.txt\");\r\n        WriteToFile(\"dogs\", \"dogs.txt\");\r\n\r\n        assert(ReadFile(\"missing.txt\") == \"NONEXISTENT\");\r\n        assert_failure(TestRename(\"missing.txt\", \"missing.txt\"));\r\n        assert(ReadFile(\"missing.txt\") == \"NONEXISTENT\");\r\n\r\n        assert(ReadFile(\"missing.txt\") == \"NONEXISTENT\");\r\n        assert(ReadFile(\"missing2.txt\") == \"NONEXISTENT\");\r\n        assert_failure(TestRename(\"missing.txt\", \"missing2.txt\"));\r\n        assert(ReadFile(\"missing.txt\") == \"NONEXISTENT\");\r\n        assert(ReadFile(\"missing2.txt\") == \"NONEXISTENT\");\r\n\r\n        assert(ReadFile(\"missing.txt\") == \"NONEXISTENT\");\r\n        assert(ReadFile(\"innocent.txt\") == \"innocent\");\r\n        assert_failure(TestRename(\"missing.txt\", \"innocent.txt\"));\r\n        assert(ReadFile(\"missing.txt\") == \"NONEXISTENT\");\r\n        assert(ReadFile(\"innocent.txt\") == \"innocent\");\r\n\r\n        assert(ReadFile(\"meow_old.txt\") == \"meow\");\r\n        assert(ReadFile(\"meow_new.txt\") == \"NONEXISTENT\");\r\n        assert_success(TestRename(\"meow_old.txt\", \"meow_new.txt\"));\r\n        assert(ReadFile(\"meow_old.txt\") == \"NONEXISTENT\");\r\n        assert(ReadFile(\"meow_new.txt\") == \"meow\");\r\n\r\n        assert(ReadFile(\"same.txt\") == \"same\");\r\n        assert_success(TestRename(\"same.txt\", \"same.txt\"));\r\n        assert(ReadFile(\"same.txt\") == \"same\");\r\n\r\n        assert(ReadFile(\"cats.txt\") == \"cats\");\r\n        assert(ReadFile(\"dogs.txt\") == \"dogs\");\r\n        assert_success(TestRename(\"cats.txt\", \"dogs.txt\"));\r\n        assert(ReadFile(\"cats.txt\") == \"NONEXISTENT\");\r\n        assert(ReadFile(\"dogs.txt\") == \"cats\");\r\n    }\r\n\r\n    void Test_VSO_121387_filesystem_equivalent_should_accept_directories() {\r\n        error_code ec;\r\n        filesystem::create_directory(\"subdir\", ec);\r\n        assert_success(ec);\r\n        filesystem::create_directory(\"subdir/dir1\", ec);\r\n        assert_success(ec);\r\n        filesystem::create_directory(\"subdir/dir2\", ec);\r\n        assert_success(ec);\r\n        TouchFile(\"subdir/file.txt\");\r\n        filesystem::create_hard_link(\"subdir/file.txt\", \"subdir/file_link.txt\", ec);\r\n        assert_success(ec);\r\n\r\n        assert(filesystem::equivalent(\"subdir/dir2\", \"subdir/dir2\", ec));\r\n        assert_success(ec);\r\n        assert(filesystem::equivalent(\"subdir/file.txt\", \"subdir/file.txt\", ec));\r\n        assert_success(ec);\r\n\r\n        assert(!filesystem::equivalent(\"subdir/dir1\", \"subdir\", ec));\r\n        assert_success(ec);\r\n        assert(!filesystem::equivalent(\"subdir/dir1\", \"subdir/dir2\", ec));\r\n        assert_success(ec);\r\n        assert(!filesystem::equivalent(\"subdir/dir1\", \"subdir/file.txt\", ec));\r\n        assert_success(ec);\r\n        assert(!filesystem::equivalent(\"subdir/file.txt\", \"subdir/dir1\", ec));\r\n        assert_success(ec);\r\n\r\n        assert(filesystem::equivalent(\"subdir/file.txt\", \"subdir/.././subdir/file.txt\", ec));\r\n        assert_success(ec);\r\n        assert(filesystem::equivalent(\"subdir/dir1\", \"subdir/.././subdir/dir1\", ec));\r\n        assert_success(ec);\r\n\r\n        assert(filesystem::equivalent(\"subdir/file.txt\", \"subdir/file_link.txt\", ec));\r\n        assert_success(ec);\r\n    }\r\n\r\n    void Test_VSO_121387_filesystem_hard_link_count_should_accept_directories() {\r\n        error_code ec;\r\n        filesystem::create_directory(\"subdir\", ec);\r\n        assert_success(ec);\r\n        filesystem::create_directory(\"subdir/dir1\", ec);\r\n        assert_success(ec);\r\n        TouchFile(\"meow_old.txt\");\r\n        filesystem::create_hard_link(\"meow_old.txt\", \"meow_new.txt\", ec);\r\n        assert_success(ec);\r\n\r\n        filesystem::create_hard_link(\"subdir/dir1\", \"subdir/dir2\", ec);\r\n        assert_failure(ec); // hard links aren't supported for directories on Windows\r\n\r\n        assert(filesystem::hard_link_count(\"subdir\", ec) == 1u);\r\n        assert_success(ec);\r\n        assert(filesystem::hard_link_count(\"meow_old.txt\", ec) == 2u);\r\n        assert_success(ec);\r\n        assert(filesystem::hard_link_count(\"meow_new.txt\", ec) == 2u);\r\n        assert_success(ec);\r\n\r\n        assert(filesystem::hard_link_count(\"missing.txt\", ec) == static_cast<uintmax_t>(-1));\r\n        assert_failure(ec);\r\n    }\r\n\r\n    void Test_VSO_121387_filesystem_set_write_time_should_accept_directories() {\r\n        error_code ec;\r\n        filesystem::create_directory(\"subdir\", ec);\r\n        assert_success(ec);\r\n\r\n        // Technically speaking the underlying file system may not have a high\r\n        // enough resolution for the equality tests here; but in practice our\r\n        // target is going to be NTFS or ReFS which have 100ns increment resolution,\r\n        // and is >= that which the file clock offers.\r\n        auto const expectedTime = filesystem::file_time_type::clock::now() - 48h;\r\n        filesystem::last_write_time(\"subdir\", expectedTime, ec);\r\n        assert_success(ec);\r\n        assert(filesystem::last_write_time(\"subdir\", ec) == expectedTime);\r\n        assert_success(ec);\r\n\r\n        TouchFile(\"meow_old.txt\");\r\n        filesystem::last_write_time(\"meow_old.txt\", expectedTime, ec);\r\n        assert_success(ec);\r\n        assert(filesystem::last_write_time(\"meow_old.txt\", ec) == expectedTime);\r\n        assert_success(ec);\r\n\r\n        filesystem::last_write_time(\"missing.txt\", expectedTime, ec);\r\n        assert_failure(ec);\r\n        assert(filesystem::last_write_time(\"missing.txt\", ec) == filesystem::file_time_type::time_point::min());\r\n        assert_failure(ec);\r\n    }\r\n\r\n    void Create_copy_source() {\r\n        error_code ec;\r\n        filesystem::create_directory(\"subdir\", ec);\r\n        assert_success(ec);\r\n        TouchFile(\"subdir/cats.txt\");\r\n        TouchFile(\"subdir/dogs.txt\");\r\n        filesystem::create_directory(\"subdir/subsubdir\", ec);\r\n        assert_success(ec);\r\n        TouchFile(\"subdir/subsubdir/meow.txt\");\r\n    }\r\n\r\n    void Test_VSO_153113_copy_filename() {\r\n        Create_copy_source();\r\n        error_code ec;\r\n        filesystem::create_directory(\"subdir_copied\", ec);\r\n        assert_success(ec);\r\n        filesystem::copy(\"subdir/cats.txt\", \"subdir_copied\", ec);\r\n        assert_success(ec);\r\n        assert(filesystem::exists(\"subdir_copied/cats.txt\", ec));\r\n        assert_success(ec);\r\n    }\r\n\r\n    void Test_VSO_153113_copy_examples() {\r\n        // This example is taken directly from N5014 [fs.op.copy]/7:\r\n        Create_copy_source();\r\n        error_code ec;\r\n        filesystem::copy(\"subdir\", \"subdir_copied\", ec);\r\n        assert_success(ec);\r\n        assert(filesystem::exists(\"subdir_copied/cats.txt\", ec));\r\n        assert_success(ec);\r\n        assert(filesystem::exists(\"subdir_copied/dogs.txt\", ec));\r\n        assert_success(ec);\r\n        assert(!filesystem::exists(\"subdir_copied/subsubdir\", ec));\r\n        assert_success(ec);\r\n\r\n        // Also from N5014 [fs.op.copy]/7:\r\n        filesystem::remove_all(\"subdir_copied\", ec);\r\n        assert_success(ec);\r\n        filesystem::copy(\"subdir\", \"subdir_copied\", filesystem::copy_options::recursive, ec);\r\n        assert_success(ec);\r\n        assert(filesystem::exists(\"subdir_copied/cats.txt\", ec));\r\n        assert_success(ec);\r\n        assert(filesystem::exists(\"subdir_copied/dogs.txt\", ec));\r\n        assert_success(ec);\r\n        assert(filesystem::exists(\"subdir_copied/subsubdir/meow.txt\", ec));\r\n        assert_success(ec);\r\n    }\r\n\r\n    void Test_VSO_171729_disable_recursion_pending_should_not_be_permanent() {\r\n        error_code ec;\r\n        filesystem::create_directories(\"subdir/subdir1/subdir1c\", ec);\r\n        assert_success(ec);\r\n        filesystem::create_directories(\"subdir/subdir2/subdir2c\", ec);\r\n        assert_success(ec);\r\n        filesystem::create_directories(\"subdir/subdir3/subdir3c\", ec);\r\n        assert_success(ec);\r\n\r\n        {\r\n            filesystem::recursive_directory_iterator iter(\"subdir\");\r\n            filesystem::recursive_directory_iterator end;\r\n\r\n            assert(\"std recursive_directory_iterator had no entries\" && iter != end);\r\n            filesystem::path badDirName1 = Get_child_dir_name(iter->path());\r\n            iter.disable_recursion_pending();\r\n\r\n            ++iter;\r\n            assert(\"std recursive_directory_iterator had only 1 entry\" && iter != end);\r\n            assert(\"disable_recursion_pending didn't work\" && iter->path() != badDirName1);\r\n            filesystem::path goodDirName2 = Get_child_dir_name(iter->path());\r\n\r\n            ++iter;\r\n            assert(\"std recursive_directory_iterator had only 2 entries\" && iter != end);\r\n            assert(\"disable_recursion_pending was permanent\" && iter->path() == goodDirName2);\r\n\r\n            iter.disable_recursion_pending();\r\n            iter.pop();\r\n\r\n            assert(\"std recursive_directory_iterator pop didn't reset recursion_pending\" && iter.recursion_pending());\r\n            assert(\"std recursive_directory_iterator at end after pop\" && iter != end);\r\n            filesystem::path goodDirName3 = Get_child_dir_name(iter->path());\r\n\r\n            ++iter;\r\n            assert(\"std recursive_directory_iterator at end in pop subdirectory\" && iter != end);\r\n            assert(\"disable_recursion_pending was permanent\" && iter->path() == goodDirName3);\r\n\r\n            ++iter;\r\n            assert(\"std recursive_directory_iterator had too many entries\" && iter == end);\r\n        }\r\n    }\r\n\r\n    void run_tests() {\r\n        error_code ec;\r\n        const auto previousCd = filesystem::current_path(ec);\r\n        assert_success(ec);\r\n        const auto testDir = filesystem::temp_directory_path() / get_test_directory_subname(\"filesystem_rename_noop\");\r\n        printf(\"changing directory to \\\"%ls\\\"\\n\", testDir.native().c_str());\r\n        filesystem::create_directory(testDir, ec);\r\n        assert_success(ec);\r\n        filesystem::current_path(testDir, ec);\r\n        assert_success(ec);\r\n\r\n        puts(\"running test Test_Dev11_1066931_filesystem_rename_noop\");\r\n        Test_Dev11_1066931_filesystem_rename_noop();\r\n        Cleanup();\r\n        puts(\"running test Test_VSO_121387_filesystem_equivalent_should_accept_directories\");\r\n        Test_VSO_121387_filesystem_equivalent_should_accept_directories();\r\n        Cleanup();\r\n        puts(\"running test Test_VSO_121387_filesystem_hard_link_count_should_accept_directories\");\r\n        Test_VSO_121387_filesystem_hard_link_count_should_accept_directories();\r\n        Cleanup();\r\n        puts(\"running test Test_VSO_121387_filesystem_set_write_time_should_accept_directories\");\r\n        Test_VSO_121387_filesystem_set_write_time_should_accept_directories();\r\n        Cleanup();\r\n        puts(\"running test Test_VSO_153113_copy_filename\");\r\n        Test_VSO_153113_copy_filename();\r\n        Cleanup();\r\n        puts(\"running test Test_VSO_153113_copy_examples\");\r\n        Test_VSO_153113_copy_examples();\r\n        Cleanup();\r\n        puts(\"running test Test_VSO_171729_disable_recursion_pending_should_not_be_permanent\");\r\n        Test_VSO_171729_disable_recursion_pending_should_not_be_permanent();\r\n        Cleanup();\r\n\r\n        filesystem::current_path(previousCd, ec);\r\n        assert_success(ec);\r\n        filesystem::remove_all(testDir, ec);\r\n        assert_success(ec);\r\n    }\r\n} // namespace test_standard\r\n#endif // _HAS_CXX17\r\n\r\nint main() {\r\n    test_experimental::run_tests();\r\n\r\n#if _HAS_CXX17\r\n    test_standard::run_tests();\r\n#endif // _HAS_CXX17\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1074023_constexpr/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1074023_constexpr/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _HAS_DEPRECATED_IS_LITERAL_TYPE 1\r\n#define _HAS_DEPRECATED_NEGATORS        1\r\n#define _SILENCE_CXX17_IS_LITERAL_TYPE_DEPRECATION_WARNING\r\n#define _SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING\r\n#define _SILENCE_CXX20_IS_POD_DEPRECATION_WARNING\r\n#define _SILENCE_CXX23_DENORM_DEPRECATION_WARNING\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <bitset>\r\n#include <cassert>\r\n#include <chrono>\r\n#include <complex>\r\n#include <cstdint>\r\n#include <functional>\r\n#include <initializer_list>\r\n#include <ios>\r\n#include <iterator>\r\n#include <limits>\r\n#include <locale>\r\n#include <memory>\r\n#include <new>\r\n#include <numeric>\r\n#include <random>\r\n#include <ratio>\r\n#include <regex>\r\n#include <string>\r\n#include <system_error>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#ifndef _M_CEE_PURE\r\n#include <atomic>\r\n#include <future>\r\n#include <mutex>\r\n#endif // _M_CEE_PURE\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\nnamespace RC = std::regex_constants;\r\n\r\nconstexpr auto int32_min = numeric_limits<int32_t>::min();\r\nconstexpr auto int32_max = numeric_limits<int32_t>::max();\r\nconstexpr auto int64_min = numeric_limits<int64_t>::min();\r\nconstexpr auto int64_max = numeric_limits<int64_t>::max();\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nconstexpr initializer_list<int> il;\r\nSTATIC_ASSERT(il.size() == 0);\r\nSTATIC_ASSERT(il.begin() == il.end());\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(begin(il) == end(il));\r\n#endif // _HAS_CXX17\r\n\r\n// TRANSITION, ABI\r\n// constexpr error_category() noexcept;\r\n\r\nconstexpr int i = 1729;\r\nSTATIC_ASSERT(forward<const int&>(i) == 1729);\r\nSTATIC_ASSERT(forward<const int>(static_cast<const int&&>(i)) == 1729);\r\nSTATIC_ASSERT(move(i) == 1729);\r\nSTATIC_ASSERT(move_if_noexcept(i) == 1729);\r\n\r\nSTATIC_ASSERT(as_const(i) == 1729);\r\n\r\nconstexpr pair<int, int> p1;\r\nSTATIC_ASSERT(p1.first == 0 && p1.second == 0);\r\nconstexpr pair<int, int> p2(p1);\r\nSTATIC_ASSERT(p2.first == 0 && p2.second == 0);\r\nconstexpr pair<int, int> p3(move(const_cast<pair<int, int>&>(p1)));\r\nSTATIC_ASSERT(p3.first == 0 && p3.second == 0);\r\nconstexpr int k = 19937;\r\nconstexpr pair<int, int> p4(i, k);\r\nSTATIC_ASSERT(p4.first == 1729 && p4.second == 19937);\r\nconstexpr short sh1 = 123;\r\nconstexpr short sh2 = 456;\r\nconstexpr pair<int, int> p5(sh1, sh2);\r\nSTATIC_ASSERT(p5.first == 123 && p5.second == 456);\r\nconstexpr pair<long, long> p6(p4);\r\nSTATIC_ASSERT(p6.first == 1729 && p6.second == 19937);\r\nconstexpr pair<long, long> p7(move(const_cast<pair<int, int>&>(p4)));\r\nSTATIC_ASSERT(p7.first == 1729 && p7.second == 19937);\r\n\r\nSTATIC_ASSERT(!(p1 == p4));\r\nSTATIC_ASSERT(p1 < p4);\r\nSTATIC_ASSERT(p1 != p4);\r\nSTATIC_ASSERT(!(p1 > p4));\r\nSTATIC_ASSERT(!(p1 >= p4));\r\nSTATIC_ASSERT(p1 <= p4);\r\n\r\nSTATIC_ASSERT(make_pair(i, k) == p4);\r\n\r\nconstexpr pair<short, int> p8(sh2, i);\r\nSTATIC_ASSERT(get<0>(p8) == 456);\r\nSTATIC_ASSERT(get<1>(p8) == 1729);\r\nSTATIC_ASSERT(get<short>(p8) == 456);\r\nSTATIC_ASSERT(get<int>(p8) == 1729);\r\nSTATIC_ASSERT(get<0>(const_cast<pair<short, int>&>(p8)) == 456);\r\nSTATIC_ASSERT(get<1>(const_cast<pair<short, int>&>(p8)) == 1729);\r\nSTATIC_ASSERT(get<short>(const_cast<pair<short, int>&>(p8)) == 456);\r\nSTATIC_ASSERT(get<int>(const_cast<pair<short, int>&>(p8)) == 1729);\r\nSTATIC_ASSERT(get<0>(move(const_cast<pair<short, int>&>(p8))) == 456);\r\nSTATIC_ASSERT(get<1>(move(const_cast<pair<short, int>&>(p8))) == 1729);\r\nSTATIC_ASSERT(get<short>(move(const_cast<pair<short, int>&>(p8))) == 456);\r\nSTATIC_ASSERT(get<int>(move(const_cast<pair<short, int>&>(p8))) == 1729);\r\n\r\nconstexpr piecewise_construct_t piecewise_construct2 = piecewise_construct;\r\n\r\nconstexpr tuple<int, int, int> t1;\r\nSTATIC_ASSERT(get<0>(t1) == 0 && get<1>(t1) == 0 && get<2>(t1) == 0);\r\nconstexpr tuple<int, int, int> t2(t1);\r\nSTATIC_ASSERT(get<0>(t2) == 0 && get<1>(t2) == 0 && get<2>(t2) == 0);\r\nconstexpr tuple<int, int, int> t3(move(const_cast<tuple<int, int, int>&>(t1)));\r\nSTATIC_ASSERT(get<0>(t3) == 0 && get<1>(t3) == 0 && get<2>(t3) == 0);\r\nconstexpr int x = 15;\r\nconstexpr int y = 25;\r\nconstexpr int z = 35;\r\nconstexpr tuple<int, int, int> t4(x, y, z);\r\nSTATIC_ASSERT(get<0>(t4) == 15 && get<1>(t4) == 25 && get<2>(t4) == 35);\r\nconstexpr short sh3 = 45;\r\nconstexpr short sh4 = 55;\r\nconstexpr short sh5 = 65;\r\nconstexpr tuple<int, int, int> t5(sh3, sh4, sh5);\r\nSTATIC_ASSERT(get<0>(t5) == 45 && get<1>(t5) == 55 && get<2>(t5) == 65);\r\nconstexpr tuple<long, long, long> t6(t4);\r\nSTATIC_ASSERT(get<0>(t6) == 15 && get<1>(t6) == 25 && get<2>(t6) == 35);\r\nconstexpr tuple<long, long, long> t7(move(const_cast<tuple<int, int, int>&>(t4)));\r\nSTATIC_ASSERT(get<0>(t7) == 15 && get<1>(t7) == 25 && get<2>(t7) == 35);\r\nconstexpr tuple<int, int> t8(p4);\r\nSTATIC_ASSERT(get<0>(t8) == 1729 && get<1>(t8) == 19937);\r\nconstexpr tuple<int, int> t9(move(const_cast<pair<int, int>&>(p4)));\r\nSTATIC_ASSERT(get<0>(t9) == 1729 && get<1>(t9) == 19937);\r\n\r\nconstexpr tuple<> tx1;\r\nconstexpr tuple<> tx2(tx1);\r\nconstexpr tuple<> tx3(move(const_cast<tuple<>&>(tx1)));\r\n\r\nSTATIC_ASSERT(!(t1 == t4));\r\nSTATIC_ASSERT(t1 < t4);\r\nSTATIC_ASSERT(t1 != t4);\r\nSTATIC_ASSERT(!(t1 > t4));\r\nSTATIC_ASSERT(t1 <= t4);\r\nSTATIC_ASSERT(!(t1 >= t4));\r\n\r\nconstexpr tuple<int, int, short> t10(x, y, sh4);\r\nSTATIC_ASSERT(get<2>(t10) == 55);\r\nSTATIC_ASSERT(get<2>(const_cast<tuple<int, int, short>&>(t10)) == 55);\r\nSTATIC_ASSERT(get<2>(move(const_cast<tuple<int, int, short>&>(t10))) == 55);\r\nSTATIC_ASSERT(get<short>(t10) == 55);\r\nSTATIC_ASSERT(get<short>(const_cast<tuple<int, int, short>&>(t10)) == 55);\r\nSTATIC_ASSERT(get<short>(move(const_cast<tuple<int, int, short>&>(t10))) == 55);\r\n\r\nSTATIC_ASSERT(make_tuple(x, y, z) == t4);\r\nSTATIC_ASSERT(forward_as_tuple(x, y, z) == t4);\r\nSTATIC_ASSERT(tie(x, y, z) == t4);\r\nSTATIC_ASSERT(tuple_cat(t4, t8, t10) == make_tuple(15, 25, 35, 1729, 19937, 15, 25, 55));\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(apply(plus<>{}, p5) == 579);\r\n\r\nstruct Point {\r\n    int m_a;\r\n    int m_b;\r\n    int m_c;\r\n\r\n    constexpr Point(int a, int b, int c) : m_a(a + 1), m_b(b + 2), m_c(c + 3) {}\r\n};\r\n\r\nSTATIC_ASSERT(make_from_tuple<Point>(t4).m_b == 27);\r\n#endif // _HAS_CXX17\r\n\r\nstruct Im {};\r\nstruct Ex {};\r\n\r\nstruct Obj {\r\n    constexpr Obj(Im) {}\r\n    constexpr explicit Obj(Ex) {}\r\n};\r\n\r\nconstexpr Im im{};\r\nconstexpr Ex ex{};\r\nconstexpr Obj obj(im);\r\nconstexpr pair<Im, Im> pim(im, im);\r\nconstexpr pair<Ex, Ex> pex(ex, ex);\r\nconstexpr tuple<Im, Im> tim(im, im);\r\nconstexpr tuple<Ex, Ex> tex(ex, ex);\r\n\r\nconstexpr pair<Obj, Obj> p9(obj, obj);\r\nconstexpr pair<Obj, Obj> p10(im, im);\r\nconstexpr pair<Obj, Obj> p11(ex, ex);\r\nconstexpr pair<Obj, Obj> p12(pim);\r\nconstexpr pair<Obj, Obj> p13(pex);\r\n\r\nconstexpr tuple<Obj, Obj> t11(obj, obj);\r\nconstexpr tuple<Obj, Obj> t12(im, im);\r\nconstexpr tuple<Obj, Obj> t13(ex, ex);\r\nconstexpr tuple<Obj, Obj> t14(tim);\r\nconstexpr tuple<Obj, Obj> t15(tex);\r\nconstexpr tuple<Obj, Obj> t16(pim);\r\nconstexpr tuple<Obj, Obj> t17(pex);\r\n\r\nSTATIC_ASSERT(integer_sequence<int, 11, 22, 33, 44>::size() == 4);\r\n\r\nconstexpr bitset<5> bits{};\r\nSTATIC_ASSERT(bits[2] == false);\r\nSTATIC_ASSERT(bits.size() == 5);\r\n\r\nconstexpr bitset<15> bits15(0xFEDCBA9876543210ULL);\r\nSTATIC_ASSERT(bits15[4] == true);\r\nSTATIC_ASSERT(bits15[5] == false);\r\nconstexpr bitset<75> bits75(0xFEDCBA9876543210ULL);\r\nSTATIC_ASSERT(bits75[60] == true);\r\nSTATIC_ASSERT(bits75[70] == false);\r\n\r\nconstexpr allocator_arg_t allocator_arg2 = allocator_arg;\r\n\r\nSTATIC_ASSERT(addressof(i) == &i);\r\n\r\nconstexpr default_delete<int> dd1{};\r\nconstexpr default_delete<int[]> dd2{};\r\n\r\nenum class Animal : uint32_t { Ape, Bat, Cat, Dog };\r\n\r\nstruct TestConstexprCtors {\r\n    unique_ptr<int> up1 = {};\r\n    unique_ptr<int> up2{nullptr};\r\n    unique_ptr<int[]> up3 = {};\r\n    unique_ptr<int[]> up4{nullptr};\r\n\r\n    shared_ptr<int> sp1 = {};\r\n    shared_ptr<int> sp2{nullptr};\r\n\r\n    weak_ptr<int> wp = {};\r\n\r\n#ifndef _M_CEE_PURE\r\n    atomic<Animal> atom1{Animal::Cat};\r\n    atomic<uint64_t> atom2{1729ULL};\r\n    atomic<double*> atom3{nullptr};\r\n\r\n    mutex mut{};\r\n#endif // _M_CEE_PURE\r\n\r\n    constexpr TestConstexprCtors() {}\r\n};\r\n\r\nstruct Esft : enable_shared_from_this<Esft> {\r\n    using Base = enable_shared_from_this<Esft>;\r\n\r\n    constexpr Esft() : Base() {}\r\n};\r\n\r\nSTATIC_ASSERT(plus<int>()(1700, 29) == 1729);\r\nSTATIC_ASSERT(minus<int>()(1700, 29) == 1671);\r\nSTATIC_ASSERT(multiplies<int>()(1700, 29) == 49300);\r\nSTATIC_ASSERT(divides<int>()(1700, 29) == 58);\r\nSTATIC_ASSERT(modulus<int>()(1700, 29) == 18);\r\nSTATIC_ASSERT(negate<int>()(123) == -123);\r\nSTATIC_ASSERT(equal_to<int>()(11, 22) == false);\r\nSTATIC_ASSERT(not_equal_to<int>()(11, 22) == true);\r\nSTATIC_ASSERT(greater<int>()(11, 22) == false);\r\nSTATIC_ASSERT(less<int>()(11, 22) == true);\r\nSTATIC_ASSERT(greater_equal<int>()(11, 22) == false);\r\nSTATIC_ASSERT(less_equal<int>()(11, 22) == true);\r\nSTATIC_ASSERT(logical_and<bool>()(true, false) == false);\r\nSTATIC_ASSERT(logical_or<bool>()(true, false) == true);\r\nSTATIC_ASSERT(logical_not<bool>()(true) == false);\r\nSTATIC_ASSERT(bit_and<unsigned int>()(0x53F8133EU, 0xD90D581EU) == 0x5108101EU);\r\nSTATIC_ASSERT(bit_or<unsigned int>()(0x53F8133EU, 0xD90D581EU) == 0xDBFD5B3EU);\r\nSTATIC_ASSERT(bit_xor<unsigned int>()(0x53F8133EU, 0xD90D581EU) == 0x8AF54B20U);\r\nSTATIC_ASSERT(bit_not<unsigned int>()(0x53F8133EU) == 0xAC07ECC1U);\r\n\r\nSTATIC_ASSERT(plus<>()(1700, 29) == 1729);\r\nSTATIC_ASSERT(minus<>()(1700, 29) == 1671);\r\nSTATIC_ASSERT(multiplies<>()(1700, 29) == 49300);\r\nSTATIC_ASSERT(divides<>()(1700, 29) == 58);\r\nSTATIC_ASSERT(modulus<>()(1700, 29) == 18);\r\nSTATIC_ASSERT(negate<>()(123) == -123);\r\nSTATIC_ASSERT(equal_to<>()(11, 22) == false);\r\nSTATIC_ASSERT(not_equal_to<>()(11, 22) == true);\r\nSTATIC_ASSERT(greater<>()(11, 22) == false);\r\nSTATIC_ASSERT(less<>()(11, 22) == true);\r\nSTATIC_ASSERT(greater_equal<>()(11, 22) == false);\r\nSTATIC_ASSERT(less_equal<>()(11, 22) == true);\r\nSTATIC_ASSERT(logical_and<>()(true, false) == false);\r\nSTATIC_ASSERT(logical_or<>()(true, false) == true);\r\nSTATIC_ASSERT(logical_not<>()(true) == false);\r\nSTATIC_ASSERT(bit_and<>()(0x53F8133EU, 0xD90D581EU) == 0x5108101EU);\r\nSTATIC_ASSERT(bit_or<>()(0x53F8133EU, 0xD90D581EU) == 0xDBFD5B3EU);\r\nSTATIC_ASSERT(bit_xor<>()(0x53F8133EU, 0xD90D581EU) == 0x8AF54B20U);\r\nSTATIC_ASSERT(bit_not<>()(0x53F8133EU) == 0xAC07ECC1U);\r\n\r\nstruct Unary {\r\n    using argument_type = int;\r\n\r\n    constexpr Unary() {}\r\n\r\n    constexpr Unary(const Unary&) {}\r\n\r\n    constexpr bool operator()(const int n) const {\r\n        return n % 2 == 0;\r\n    }\r\n};\r\n\r\nconstexpr Unary unary{};\r\nSTATIC_ASSERT(unary(64) == true);\r\nSTATIC_ASSERT(unary(65) == false);\r\nSTATIC_ASSERT(not1(unary)(64) == false);\r\nSTATIC_ASSERT(not1(unary)(65) == true);\r\n\r\nstruct Binary {\r\n    using first_argument_type  = int;\r\n    using second_argument_type = int;\r\n\r\n    constexpr Binary() {}\r\n\r\n    constexpr Binary(const Binary&) {}\r\n\r\n    constexpr bool operator()(const int lhs, const int rhs) const {\r\n        return lhs / 10 == rhs / 10;\r\n    }\r\n};\r\n\r\nconstexpr Binary binary{};\r\nSTATIC_ASSERT(binary(64, 65) == true);\r\nSTATIC_ASSERT(binary(64, 77) == false);\r\nSTATIC_ASSERT(not2(binary)(64, 65) == false);\r\nSTATIC_ASSERT(not2(binary)(64, 77) == true);\r\n\r\nSTATIC_ASSERT(integral_constant<int, 1729>::value == 1729);\r\nconstexpr integral_constant<int, 1701> enterprise{};\r\nSTATIC_ASSERT(static_cast<int>(enterprise) == 1701);\r\nSTATIC_ASSERT(enterprise() == 1701);\r\n\r\n\r\n// P0006R0 Variable Templates For Type Traits\r\nSTATIC_ASSERT(is_void_v<int> == false);\r\nSTATIC_ASSERT(is_null_pointer_v<int> == false);\r\nSTATIC_ASSERT(is_integral_v<int> == true);\r\nSTATIC_ASSERT(is_floating_point_v<int> == false);\r\nSTATIC_ASSERT(is_array_v<int> == false);\r\nSTATIC_ASSERT(is_pointer_v<int> == false);\r\nSTATIC_ASSERT(is_lvalue_reference_v<int> == false);\r\nSTATIC_ASSERT(is_rvalue_reference_v<int> == false);\r\nSTATIC_ASSERT(is_member_object_pointer_v<int> == false);\r\nSTATIC_ASSERT(is_member_function_pointer_v<int> == false);\r\nSTATIC_ASSERT(is_enum_v<int> == false);\r\nSTATIC_ASSERT(is_union_v<int> == false);\r\nSTATIC_ASSERT(is_class_v<int> == false);\r\nSTATIC_ASSERT(is_function_v<int> == false);\r\nSTATIC_ASSERT(is_reference_v<int> == false);\r\nSTATIC_ASSERT(is_arithmetic_v<int> == true);\r\nSTATIC_ASSERT(is_fundamental_v<int> == true);\r\nSTATIC_ASSERT(is_object_v<int> == true);\r\nSTATIC_ASSERT(is_scalar_v<int> == true);\r\nSTATIC_ASSERT(is_compound_v<int> == false);\r\nSTATIC_ASSERT(is_member_pointer_v<int> == false);\r\nSTATIC_ASSERT(is_const_v<int> == false);\r\nSTATIC_ASSERT(is_volatile_v<int> == false);\r\nSTATIC_ASSERT(is_trivial_v<int> == true);\r\nSTATIC_ASSERT(is_trivially_copyable_v<int> == true);\r\nSTATIC_ASSERT(is_standard_layout_v<int> == true);\r\nSTATIC_ASSERT(is_pod_v<int> == true);\r\nSTATIC_ASSERT(is_literal_type_v<int> == true);\r\nSTATIC_ASSERT(is_empty_v<int> == false);\r\nSTATIC_ASSERT(is_polymorphic_v<int> == false);\r\nSTATIC_ASSERT(is_abstract_v<int> == false);\r\nSTATIC_ASSERT(is_final_v<int> == false);\r\nSTATIC_ASSERT(is_signed_v<int> == true);\r\nSTATIC_ASSERT(is_unsigned_v<int> == false);\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(is_bounded_array_v<int> == false);\r\nSTATIC_ASSERT(is_unbounded_array_v<int> == false);\r\n#endif // _HAS_CXX20\r\nSTATIC_ASSERT(is_constructible_v<int, int> == true);\r\nSTATIC_ASSERT(is_default_constructible_v<int> == true);\r\nSTATIC_ASSERT(is_copy_constructible_v<int> == true);\r\nSTATIC_ASSERT(is_move_constructible_v<int> == true);\r\nSTATIC_ASSERT(is_assignable_v<int&, int> == true);\r\nSTATIC_ASSERT(is_copy_assignable_v<int> == true);\r\nSTATIC_ASSERT(is_move_assignable_v<int> == true);\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(is_swappable_with_v<int&, int&> == true);\r\nSTATIC_ASSERT(is_swappable_v<int> == true);\r\n#endif // _HAS_CXX17\r\nSTATIC_ASSERT(is_destructible_v<int> == true);\r\nSTATIC_ASSERT(is_trivially_constructible_v<int, int> == true);\r\nSTATIC_ASSERT(is_trivially_default_constructible_v<int> == true);\r\nSTATIC_ASSERT(is_trivially_copy_constructible_v<int> == true);\r\nSTATIC_ASSERT(is_trivially_move_constructible_v<int> == true);\r\nSTATIC_ASSERT(is_trivially_assignable_v<int&, int> == true);\r\nSTATIC_ASSERT(is_trivially_copy_assignable_v<int> == true);\r\nSTATIC_ASSERT(is_trivially_move_assignable_v<int> == true);\r\nSTATIC_ASSERT(is_trivially_destructible_v<int> == true);\r\nSTATIC_ASSERT(is_nothrow_constructible_v<int, int> == true);\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<int> == true);\r\nSTATIC_ASSERT(is_nothrow_copy_constructible_v<int> == true);\r\nSTATIC_ASSERT(is_nothrow_move_constructible_v<int> == true);\r\nSTATIC_ASSERT(is_nothrow_assignable_v<int&, int> == true);\r\nSTATIC_ASSERT(is_nothrow_copy_assignable_v<int> == true);\r\nSTATIC_ASSERT(is_nothrow_move_assignable_v<int> == true);\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(is_nothrow_swappable_with_v<int&, int&> == true);\r\nSTATIC_ASSERT(is_nothrow_swappable_v<int> == true);\r\n#endif // _HAS_CXX17\r\nSTATIC_ASSERT(is_nothrow_destructible_v<int> == true);\r\nSTATIC_ASSERT(has_virtual_destructor_v<int> == false);\r\nSTATIC_ASSERT(alignment_of_v<char> == 1);\r\nSTATIC_ASSERT(rank_v<int[11][22][33]> == 3);\r\nSTATIC_ASSERT(extent_v<int[11][22][33]> == 11);\r\nSTATIC_ASSERT(extent_v<int[11][22][33], 1> == 22);\r\nSTATIC_ASSERT(is_same_v<int, int> == true);\r\nSTATIC_ASSERT(is_base_of_v<int, double> == false);\r\nSTATIC_ASSERT(is_convertible_v<short, int> == true);\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(is_invocable_v<plus<>, int, int> == true);\r\nSTATIC_ASSERT(is_invocable_r_v<string, plus<>, int, int> == false);\r\nSTATIC_ASSERT(is_nothrow_invocable_v<plus<>, string, string> == false);\r\nSTATIC_ASSERT(is_nothrow_invocable_r_v<int, plus<>, string, string> == false);\r\n#endif // _HAS_CXX17\r\nSTATIC_ASSERT(conjunction_v<true_type, true_type> == true);\r\nSTATIC_ASSERT(disjunction_v<false_type, false_type> == false);\r\nSTATIC_ASSERT(negation_v<true_type> == false);\r\n\r\nSTATIC_ASSERT(tuple_size_v<tuple<int, int, int>> == 3);\r\n\r\nSTATIC_ASSERT(ratio_equal_v<mega, mega> == true);\r\nSTATIC_ASSERT(ratio_not_equal_v<mega, mega> == false);\r\nSTATIC_ASSERT(ratio_less_v<mega, mega> == false);\r\nSTATIC_ASSERT(ratio_less_equal_v<mega, mega> == true);\r\nSTATIC_ASSERT(ratio_greater_v<mega, mega> == false);\r\nSTATIC_ASSERT(ratio_greater_equal_v<mega, mega> == true);\r\n\r\nSTATIC_ASSERT(is_error_code_enum_v<io_errc> == true);\r\nSTATIC_ASSERT(is_error_condition_enum_v<errc> == true);\r\n\r\nSTATIC_ASSERT(uses_allocator_v<tuple<int, int>, allocator<int>> == true);\r\n\r\nusing Bound = decltype(bind(declval<int (*)(int)>(), 1729));\r\nSTATIC_ASSERT(is_bind_expression_v<Bound> == true);\r\nusing Place = decltype(placeholders::_5);\r\nSTATIC_ASSERT(is_placeholder_v<Place> == 5);\r\n\r\nSTATIC_ASSERT(treat_as_floating_point_v<double> == true);\r\n\r\n\r\nSTATIC_ASSERT(ratio<252, 105>::num == 12);\r\nSTATIC_ASSERT(ratio<252, 105>::den == 5);\r\n\r\nSTATIC_ASSERT(duration_values<int32_t>::zero() == 0);\r\nSTATIC_ASSERT(duration_values<int32_t>::min() == int32_min);\r\nSTATIC_ASSERT(duration_values<int32_t>::max() == int32_max);\r\n\r\nconstexpr seconds d1{};\r\nSTATIC_ASSERT(d1.count() == 0);\r\n\r\nconstexpr seconds d2(1729);\r\nSTATIC_ASSERT(d2.count() == 1729);\r\nSTATIC_ASSERT((+d2).count() == 1729);\r\nSTATIC_ASSERT((-d2).count() == -1729);\r\n\r\nconstexpr seconds d3(d2);\r\nSTATIC_ASSERT(d3.count() == 1729);\r\n\r\nconstexpr seconds d4(47);\r\nconstexpr milliseconds d5(d4);\r\nSTATIC_ASSERT(d5.count() == 47000);\r\n\r\nSTATIC_ASSERT(duration<int64_t>::zero().count() == 0);\r\nSTATIC_ASSERT(duration<int64_t>::min().count() == int64_min);\r\nSTATIC_ASSERT(duration<int64_t>::max().count() == int64_max);\r\n\r\nconstexpr seconds d6(1700);\r\nconstexpr seconds d7(29);\r\nSTATIC_ASSERT((d6 + d7).count() == 1729);\r\nSTATIC_ASSERT((d6 - d7).count() == 1671);\r\nSTATIC_ASSERT((d6 * 11).count() == 18700);\r\nSTATIC_ASSERT((12 * d7).count() == 348);\r\nSTATIC_ASSERT((d6 / 13).count() == 130);\r\nSTATIC_ASSERT(d6 / d7 == 58);\r\nSTATIC_ASSERT((d6 % 14).count() == 6);\r\nSTATIC_ASSERT((d6 % d7).count() == 18);\r\nSTATIC_ASSERT((d6 == d7) == false);\r\nSTATIC_ASSERT((d6 != d7) == true);\r\nSTATIC_ASSERT((d6 < d7) == false);\r\nSTATIC_ASSERT((d6 <= d7) == false);\r\nSTATIC_ASSERT((d6 > d7) == true);\r\nSTATIC_ASSERT((d6 >= d7) == true);\r\n\r\nconstexpr milliseconds d8(-262144);\r\nSTATIC_ASSERT(duration_cast<seconds>(d8).count() == -262);\r\nSTATIC_ASSERT(floor<seconds>(d8).count() == -263);\r\nSTATIC_ASSERT(ceil<seconds>(d8).count() == -262);\r\nSTATIC_ASSERT(round<seconds>(d8).count() == -262);\r\nSTATIC_ASSERT(abs(d8).count() == 262144);\r\n\r\nSTATIC_ASSERT((123h).count() == 123);\r\nSTATIC_ASSERT((123min).count() == 123);\r\nSTATIC_ASSERT((123s).count() == 123);\r\nSTATIC_ASSERT((123ms).count() == 123);\r\nSTATIC_ASSERT((123us).count() == 123);\r\nSTATIC_ASSERT((123ns).count() == 123);\r\nSTATIC_ASSERT((3.14h).count() > 3.0);\r\nSTATIC_ASSERT((3.14min).count() > 3.0);\r\nSTATIC_ASSERT((3.14s).count() > 3.0);\r\nSTATIC_ASSERT((3.14ms).count() > 3.0);\r\nSTATIC_ASSERT((3.14us).count() > 3.0);\r\nSTATIC_ASSERT((3.14ns).count() > 3.0);\r\n\r\n#if _HAS_CXX17\r\nconstexpr bool test_chrono_constexpr_again() {\r\n    milliseconds durEx{8888};\r\n    assert((++durEx).count() == 8889);\r\n    assert(durEx++.count() == 8889);\r\n    assert(durEx.count() == 8890);\r\n\r\n    assert((--durEx).count() == 8889);\r\n    assert(durEx--.count() == 8889);\r\n    assert(durEx.count() == 8888);\r\n    assert((durEx += 10ms).count() == 8898);\r\n    assert((durEx -= 10ms).count() == 8888);\r\n    assert((durEx *= 6).count() == 53328);\r\n    assert((durEx /= 10).count() == 5332);\r\n    assert((durEx %= 1000).count() == 332);\r\n    assert((durEx %= 100ms).count() == 32);\r\n\r\n    time_point<system_clock, milliseconds> tpEx{1729ms};\r\n    assert((tpEx += 45ms).time_since_epoch().count() == 1774);\r\n    assert((tpEx -= 1004ms).time_since_epoch().count() == 770);\r\n\r\n    return true;\r\n}\r\n\r\nSTATIC_ASSERT(test_chrono_constexpr_again());\r\n#endif // _HAS_CXX17\r\n\r\nconstexpr time_point<system_clock, seconds> tp1{};\r\nSTATIC_ASSERT(tp1.time_since_epoch().count() == 0);\r\n\r\nconstexpr time_point<system_clock, seconds> tp2(16s);\r\nSTATIC_ASSERT(tp2.time_since_epoch().count() == 16);\r\nconstexpr time_point<system_clock, milliseconds> tp3(tp2);\r\nSTATIC_ASSERT(tp3.time_since_epoch().count() == 16000);\r\nSTATIC_ASSERT(time_point<system_clock, duration<int32_t>>::min().time_since_epoch().count() == int32_min);\r\nSTATIC_ASSERT(time_point<system_clock, duration<int32_t>>::max().time_since_epoch().count() == int32_max);\r\n\r\nconstexpr time_point<system_clock, seconds> tp4(1000s);\r\nconstexpr time_point<system_clock, seconds> tp5(729s);\r\nSTATIC_ASSERT((tp4 + 24s).time_since_epoch().count() == 1024);\r\nSTATIC_ASSERT((1s + tp5).time_since_epoch().count() == 730);\r\nSTATIC_ASSERT((tp4 - 8s).time_since_epoch().count() == 992);\r\nSTATIC_ASSERT((tp4 - tp5).count() == 271);\r\nSTATIC_ASSERT((tp4 == tp5) == false);\r\nSTATIC_ASSERT((tp4 != tp5) == true);\r\nSTATIC_ASSERT((tp4 < tp5) == false);\r\nSTATIC_ASSERT((tp4 <= tp5) == false);\r\nSTATIC_ASSERT((tp4 > tp5) == true);\r\nSTATIC_ASSERT((tp4 >= tp5) == true);\r\nSTATIC_ASSERT(time_point_cast<minutes>(tp5).time_since_epoch().count() == 12);\r\nSTATIC_ASSERT(floor<minutes>(tp5).time_since_epoch().count() == 12);\r\nSTATIC_ASSERT(ceil<minutes>(tp5).time_since_epoch().count() == 13);\r\nSTATIC_ASSERT(round<minutes>(tp5).time_since_epoch().count() == 12);\r\n\r\nSTATIC_ASSERT(system_clock::is_steady == false); // for VC\r\nSTATIC_ASSERT(steady_clock::is_steady == true);\r\nSTATIC_ASSERT(high_resolution_clock::is_steady == true); // for VC\r\n\r\nSTATIC_ASSERT(char_traits<char>::eq('x', 'x') == true);\r\nSTATIC_ASSERT(char_traits<char>::lt('a', 'b') == true);\r\nSTATIC_ASSERT(char_traits<char>::not_eof('c') == 'c');\r\nSTATIC_ASSERT(char_traits<char>::to_char_type('d') == 'd');\r\nSTATIC_ASSERT(char_traits<char>::to_int_type('e') == 'e');\r\nSTATIC_ASSERT(char_traits<char>::eq_int_type('y', 'y') == true);\r\nSTATIC_ASSERT(char_traits<char>::eq_int_type(char_traits<char>::eof(), 'z') == false);\r\n\r\nSTATIC_ASSERT(char_traits<wchar_t>::eq(L'x', L'x') == true);\r\nSTATIC_ASSERT(char_traits<wchar_t>::lt(L'a', L'b') == true);\r\nSTATIC_ASSERT(char_traits<wchar_t>::not_eof(L'c') == L'c');\r\nSTATIC_ASSERT(char_traits<wchar_t>::to_char_type(L'd') == L'd');\r\nSTATIC_ASSERT(char_traits<wchar_t>::to_int_type(L'e') == L'e');\r\nSTATIC_ASSERT(char_traits<wchar_t>::eq_int_type(L'y', L'y') == true);\r\nSTATIC_ASSERT(char_traits<wchar_t>::eq_int_type(char_traits<wchar_t>::eof(), L'z') == false);\r\n\r\n#ifdef __cpp_char8_t\r\nSTATIC_ASSERT(char_traits<char8_t>::eq(u8'x', u8'x') == true);\r\nSTATIC_ASSERT(char_traits<char8_t>::lt(u8'a', u8'b') == true);\r\nSTATIC_ASSERT(char_traits<char8_t>::not_eof(u8'c') == u8'c');\r\nSTATIC_ASSERT(char_traits<char8_t>::to_char_type(u8'd') == u8'd');\r\nSTATIC_ASSERT(char_traits<char8_t>::to_int_type(u8'e') == u8'e');\r\nSTATIC_ASSERT(char_traits<char8_t>::eq_int_type(u8'y', u8'y') == true);\r\nSTATIC_ASSERT(char_traits<char8_t>::eq_int_type(char_traits<char8_t>::eof(), u8'z') == false);\r\n#endif // __cpp_char8_t\r\n\r\nSTATIC_ASSERT(char_traits<char16_t>::eq(u'x', u'x') == true);\r\nSTATIC_ASSERT(char_traits<char16_t>::lt(u'a', u'b') == true);\r\nSTATIC_ASSERT(char_traits<char16_t>::not_eof(u'c') == u'c');\r\nSTATIC_ASSERT(char_traits<char16_t>::to_char_type(u'd') == u'd');\r\nSTATIC_ASSERT(char_traits<char16_t>::to_int_type(u'e') == u'e');\r\nSTATIC_ASSERT(char_traits<char16_t>::eq_int_type(u'y', u'y') == true);\r\nSTATIC_ASSERT(char_traits<char16_t>::eq_int_type(char_traits<char16_t>::eof(), u'z') == false);\r\n\r\nSTATIC_ASSERT(char_traits<char32_t>::eq(U'x', U'x') == true);\r\nSTATIC_ASSERT(char_traits<char32_t>::lt(U'a', U'b') == true);\r\nSTATIC_ASSERT(char_traits<char32_t>::not_eof(U'c') == U'c');\r\nSTATIC_ASSERT(char_traits<char32_t>::to_char_type(U'd') == U'd');\r\nSTATIC_ASSERT(char_traits<char32_t>::to_int_type(U'e') == U'e');\r\nSTATIC_ASSERT(char_traits<char32_t>::eq_int_type(U'y', U'y') == true);\r\nSTATIC_ASSERT(char_traits<char32_t>::eq_int_type(char_traits<char32_t>::eof(), U'z') == false);\r\n\r\nconstexpr array<int, 4> arr = {{11, 22, 33, 44}};\r\nSTATIC_ASSERT(arr.size() == 4);\r\nSTATIC_ASSERT(arr.max_size() > 3);\r\nSTATIC_ASSERT(arr.empty() == false);\r\n\r\nSTATIC_ASSERT(arr[1] == 22);\r\nSTATIC_ASSERT(arr.at(2) == 33);\r\nSTATIC_ASSERT(arr.front() == 11);\r\nSTATIC_ASSERT(arr.back() == 44);\r\nSTATIC_ASSERT(get<1>(arr) == 22);\r\nSTATIC_ASSERT(get<2>(const_cast<array<int, 4>&>(arr)) == 33);\r\nSTATIC_ASSERT(get<3>(move(const_cast<array<int, 4>&>(arr))) == 44);\r\n\r\nconstexpr array<int, 0> arr0 = {{}};\r\nSTATIC_ASSERT(arr0.size() == 0);\r\nSTATIC_ASSERT(arr0.max_size() != 5);\r\nSTATIC_ASSERT(arr0.empty() == true);\r\n\r\n// Also test DevCom-10299275, in which array<int, 0> was not a valid constant expression\r\n// since we didn't initialize the single element.\r\nconstexpr array<int, 0> empty_array;\r\nSTATIC_ASSERT(empty_array.size() == 0);\r\n\r\nconstexpr istream_iterator<int> istream_it{};\r\n\r\nconstexpr istreambuf_iterator<char> istreambuf_it{};\r\n\r\nconstexpr int raw[] = {10, 20, 30, 40, 50};\r\nSTATIC_ASSERT(begin(raw) == raw);\r\nSTATIC_ASSERT(end(raw) == raw + 5);\r\nSTATIC_ASSERT(cbegin(raw) == raw);\r\nSTATIC_ASSERT(cend(raw) == raw + 5);\r\nSTATIC_ASSERT(data(raw) == raw);\r\nSTATIC_ASSERT(size(raw) == 5);\r\nSTATIC_ASSERT(empty(raw) == false);\r\n\r\nSTATIC_ASSERT(size(arr) == 4);\r\nSTATIC_ASSERT(empty(arr) == false);\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(ssize(raw) == 5);\r\nSTATIC_ASSERT(ssize(arr) == 4);\r\n#endif // _HAS_CXX20\r\n\r\nstruct MyContainer {\r\n    constexpr const int* data() const {\r\n        return nullptr;\r\n    }\r\n};\r\nconstexpr MyContainer mycontainer{};\r\nSTATIC_ASSERT(data(mycontainer) == nullptr);\r\nSTATIC_ASSERT(data(const_cast<MyContainer&>(mycontainer)) == nullptr);\r\n\r\nSTATIC_ASSERT(empty(il) == true);\r\nSTATIC_ASSERT(data(il) == il.begin());\r\n\r\nSTATIC_ASSERT(min(101, 202) == 101);\r\nSTATIC_ASSERT(min(303, 404, greater<>()) == 404);\r\nSTATIC_ASSERT(max(505, 606) == 606);\r\nSTATIC_ASSERT(max(707, 808, greater<>()) == 707);\r\nSTATIC_ASSERT(minmax(1729, 64).first == 64);\r\nSTATIC_ASSERT(minmax(27, 81, greater<>()).first == 81);\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(clamp(-1, 0, 100) == 0);\r\nSTATIC_ASSERT(clamp(200, 0, 100) == 100);\r\nSTATIC_ASSERT(clamp(50, 0, 100) == 50);\r\nSTATIC_ASSERT(clamp(-1, 100, 0, greater<>()) == 0);\r\nSTATIC_ASSERT(clamp(200, 100, 0, greater<>()) == 100);\r\nSTATIC_ASSERT(clamp(50, 100, 0, greater<>()) == 50);\r\n#endif // _HAS_CXX17\r\n\r\nSTATIC_ASSERT(min({36, 25, 64, 49}) == 25);\r\nSTATIC_ASSERT(min({36, 25, 64, 49}, greater<>()) == 64);\r\nSTATIC_ASSERT(max({36, 25, 64, 49}) == 64);\r\nSTATIC_ASSERT(max({36, 25, 64, 49}, greater<>()) == 25);\r\nSTATIC_ASSERT(minmax({36, 25, 64, 49}) == make_pair(25, 64));\r\nSTATIC_ASSERT(minmax({36, 25, 64, 49}, greater<>()) == make_pair(64, 25));\r\n\r\nconstexpr int squares[] = {36, 25, 64, 49};\r\n\r\nSTATIC_ASSERT(min_element(squares, squares + 4) == squares + 1);\r\nSTATIC_ASSERT(min_element(squares, squares + 4, greater<>()) == squares + 2);\r\nSTATIC_ASSERT(max_element(squares, squares + 4) == squares + 2);\r\nSTATIC_ASSERT(max_element(squares, squares + 4, greater<>()) == squares + 1);\r\nSTATIC_ASSERT(minmax_element(squares, squares + 4) == make_pair(squares + 1, squares + 2));\r\nSTATIC_ASSERT(minmax_element(squares, squares + 4, greater<>()) == make_pair(squares + 2, squares + 1));\r\n\r\nconstexpr complex<float> cf1(12.0f, 34.0f);\r\nSTATIC_ASSERT(cf1.real() == 12.0f);\r\nSTATIC_ASSERT(cf1.imag() == 34.0f);\r\nconstexpr complex<double> cd1(56.0, 78.0);\r\nSTATIC_ASSERT(cd1.real() == 56.0);\r\nSTATIC_ASSERT(cd1.imag() == 78.0);\r\nconstexpr complex<long double> cl1(91.0L, 92.0L);\r\nSTATIC_ASSERT(cl1.real() == 91.0L);\r\nSTATIC_ASSERT(cl1.imag() == 92.0L);\r\nconstexpr complex<float> cf2(cd1);\r\nSTATIC_ASSERT(cf2.real() == 56.0f);\r\nSTATIC_ASSERT(cf2.imag() == 78.0f);\r\nconstexpr complex<float> cf3(cl1);\r\nSTATIC_ASSERT(cf3.real() == 91.0f);\r\nSTATIC_ASSERT(cf3.imag() == 92.0f);\r\nconstexpr complex<double> cd2(cf1);\r\nSTATIC_ASSERT(cd2.real() == 12.0);\r\nSTATIC_ASSERT(cd2.imag() == 34.0);\r\nconstexpr complex<double> cd3(cl1);\r\nSTATIC_ASSERT(cd3.real() == 91.0);\r\nSTATIC_ASSERT(cd3.imag() == 92.0);\r\nconstexpr complex<long double> cl2(cf1);\r\nSTATIC_ASSERT(cl2.real() == 12.0L);\r\nSTATIC_ASSERT(cl2.imag() == 34.0L);\r\nconstexpr complex<long double> cl3(cd1);\r\nSTATIC_ASSERT(cl3.real() == 56.0L);\r\nSTATIC_ASSERT(cl3.imag() == 78.0L);\r\nSTATIC_ASSERT((cd1 == cd2) == false);\r\nSTATIC_ASSERT((cd1 == 9.0) == false);\r\nSTATIC_ASSERT((9.0 == cd2) == false);\r\nSTATIC_ASSERT((cd1 != cd2) == true);\r\nSTATIC_ASSERT((cd1 != 9.0) == true);\r\nSTATIC_ASSERT((9.0 != cd2) == true);\r\nSTATIC_ASSERT(real(cd1) == 56.0);\r\nSTATIC_ASSERT(imag(cd1) == 78.0);\r\n\r\nSTATIC_ASSERT((10if).imag() == 10.0f);\r\nSTATIC_ASSERT((20.0if).imag() == 20.0f);\r\nSTATIC_ASSERT((30i).imag() == 30.0);\r\nSTATIC_ASSERT((40.0i).imag() == 40.0);\r\nSTATIC_ASSERT((50il).imag() == 50.0L);\r\nSTATIC_ASSERT((60.0il).imag() == 60.0L);\r\n\r\nSTATIC_ASSERT(minstd_rand0::multiplier == 16807);\r\nSTATIC_ASSERT(minstd_rand0::increment == 0);\r\nSTATIC_ASSERT(minstd_rand0::modulus == 2147483647);\r\nSTATIC_ASSERT(minstd_rand0::min() == 1);\r\nSTATIC_ASSERT(minstd_rand0::max() == 2147483646);\r\nSTATIC_ASSERT(minstd_rand0::default_seed == 1);\r\n\r\nSTATIC_ASSERT(mt19937::word_size == 32);\r\nSTATIC_ASSERT(mt19937::state_size == 624);\r\nSTATIC_ASSERT(mt19937::shift_size == 397);\r\nSTATIC_ASSERT(mt19937::mask_bits == 31);\r\nSTATIC_ASSERT(mt19937::xor_mask == 0x9908B0DFU);\r\nSTATIC_ASSERT(mt19937::tempering_u == 11);\r\nSTATIC_ASSERT(mt19937::tempering_d == 0xFFFFFFFFU);\r\nSTATIC_ASSERT(mt19937::tempering_s == 7);\r\nSTATIC_ASSERT(mt19937::tempering_b == 0x9D2C5680U);\r\nSTATIC_ASSERT(mt19937::tempering_t == 15);\r\nSTATIC_ASSERT(mt19937::tempering_c == 0xEFC60000U);\r\nSTATIC_ASSERT(mt19937::tempering_l == 18);\r\nSTATIC_ASSERT(mt19937::initialization_multiplier == 1812433253);\r\nSTATIC_ASSERT(mt19937::min() == 0);\r\nSTATIC_ASSERT(mt19937::max() == 0xFFFFFFFFU);\r\nSTATIC_ASSERT(mt19937::default_seed == 5489);\r\n\r\nSTATIC_ASSERT(ranlux24_base::word_size == 24);\r\nSTATIC_ASSERT(ranlux24_base::short_lag == 10);\r\nSTATIC_ASSERT(ranlux24_base::long_lag == 24);\r\nSTATIC_ASSERT(ranlux24_base::min() == 0);\r\nSTATIC_ASSERT(ranlux24_base::max() == 16777215);\r\nSTATIC_ASSERT(ranlux24_base::default_seed == 19780503);\r\n\r\nSTATIC_ASSERT(ranlux24::block_size == 223);\r\nSTATIC_ASSERT(ranlux24::used_block == 23);\r\nSTATIC_ASSERT(ranlux24::min() == 0);\r\nSTATIC_ASSERT(ranlux24::max() == 16777215);\r\n\r\nSTATIC_ASSERT(independent_bits_engine<mt19937, 47, uint64_t>::min() == 0);\r\nSTATIC_ASSERT(independent_bits_engine<mt19937, 47, uint64_t>::max() == 0x7FFFFFFFFFFFULL);\r\n\r\nSTATIC_ASSERT(knuth_b::table_size == 256);\r\nSTATIC_ASSERT(knuth_b::min() == 1);\r\nSTATIC_ASSERT(knuth_b::max() == 2147483646);\r\n\r\nSTATIC_ASSERT(random_device::min() == numeric_limits<random_device::result_type>::min());\r\nSTATIC_ASSERT(random_device::max() == numeric_limits<random_device::result_type>::max());\r\n\r\ntemplate <typename T, T... Values>\r\nvoid test_constants() {}\r\n\r\nvoid test_all_constants() {\r\n    test_constants<ios_base::fmtflags, ios_base::boolalpha, ios_base::dec, ios_base::fixed, ios_base::hex,\r\n        ios_base::internal, ios_base::left, ios_base::oct, ios_base::right, ios_base::scientific, ios_base::showbase,\r\n        ios_base::showpoint, ios_base::showpos, ios_base::skipws, ios_base::unitbuf, ios_base::uppercase,\r\n        ios_base::adjustfield, ios_base::basefield, ios_base::floatfield>();\r\n\r\n    test_constants<ios_base::iostate, ios_base::badbit, ios_base::eofbit, ios_base::failbit, ios_base::goodbit>();\r\n\r\n    test_constants<ios_base::openmode, ios_base::app, ios_base::ate, ios_base::binary, ios_base::in, ios_base::out,\r\n        ios_base::trunc>();\r\n\r\n    test_constants<ios_base::seekdir, ios_base::beg, ios_base::cur, ios_base::end>();\r\n\r\n    // LWG-4037 \"Static data members of ctype_base are not yet required to be usable in constant expressions\"\r\n    // The following furtherly requires ctype_base::mask to be usable as a type of a constant template parameter.\r\n    test_constants<ctype_base::mask, ctype_base::alnum, ctype_base::alpha, ctype_base::cntrl, ctype_base::digit,\r\n        ctype_base::graph, ctype_base::lower, ctype_base::print, ctype_base::punct, ctype_base::space,\r\n        ctype_base::upper, ctype_base::xdigit, ctype_base::blank>();\r\n\r\n    test_constants<RC::syntax_option_type, RC::icase, RC::nosubs, RC::optimize, RC::collate, RC::ECMAScript, RC::basic,\r\n        RC::extended, RC::awk, RC::grep, RC::egrep, regex::icase, regex::nosubs, regex::optimize, regex::collate,\r\n        regex::ECMAScript, regex::basic, regex::extended, regex::awk, regex::grep, regex::egrep>();\r\n\r\n    test_constants<RC::match_flag_type, RC::match_default, RC::match_not_bol, RC::match_not_eol, RC::match_not_bow,\r\n        RC::match_not_eow, RC::match_any, RC::match_not_null, RC::match_continuous, RC::match_prev_avail,\r\n        RC::format_default, RC::format_sed, RC::format_no_copy, RC::format_first_only>();\r\n\r\n    test_constants<RC::error_type, RC::error_collate, RC::error_ctype, RC::error_escape, RC::error_backref,\r\n        RC::error_brack, RC::error_paren, RC::error_brace, RC::error_badbrace, RC::error_range, RC::error_space,\r\n        RC::error_badrepeat, RC::error_complexity, RC::error_stack>();\r\n}\r\n\r\n// Ensure that these members of ctype_base are actually implemented as static const members of the correct type.\r\n\r\nSTATIC_ASSERT(is_same_v<decltype(ctype_base::alnum), const ctype_base::mask>);\r\nSTATIC_ASSERT(is_same_v<decltype(ctype_base::alpha), const ctype_base::mask>);\r\nSTATIC_ASSERT(is_same_v<decltype(ctype_base::cntrl), const ctype_base::mask>);\r\nSTATIC_ASSERT(is_same_v<decltype(ctype_base::digit), const ctype_base::mask>);\r\nSTATIC_ASSERT(is_same_v<decltype(ctype_base::graph), const ctype_base::mask>);\r\nSTATIC_ASSERT(is_same_v<decltype(ctype_base::lower), const ctype_base::mask>);\r\nSTATIC_ASSERT(is_same_v<decltype(ctype_base::print), const ctype_base::mask>);\r\nSTATIC_ASSERT(is_same_v<decltype(ctype_base::punct), const ctype_base::mask>);\r\nSTATIC_ASSERT(is_same_v<decltype(ctype_base::space), const ctype_base::mask>);\r\nSTATIC_ASSERT(is_same_v<decltype(ctype_base::upper), const ctype_base::mask>);\r\nSTATIC_ASSERT(is_same_v<decltype(ctype_base::xdigit), const ctype_base::mask>);\r\nSTATIC_ASSERT(is_same_v<decltype(ctype_base::blank), const ctype_base::mask>);\r\n\r\nSTATIC_ASSERT(is_same_v<decltype((ctype_base::alnum)), const ctype_base::mask&>);\r\nSTATIC_ASSERT(is_same_v<decltype((ctype_base::alpha)), const ctype_base::mask&>);\r\nSTATIC_ASSERT(is_same_v<decltype((ctype_base::cntrl)), const ctype_base::mask&>);\r\nSTATIC_ASSERT(is_same_v<decltype((ctype_base::digit)), const ctype_base::mask&>);\r\nSTATIC_ASSERT(is_same_v<decltype((ctype_base::graph)), const ctype_base::mask&>);\r\nSTATIC_ASSERT(is_same_v<decltype((ctype_base::lower)), const ctype_base::mask&>);\r\nSTATIC_ASSERT(is_same_v<decltype((ctype_base::print)), const ctype_base::mask&>);\r\nSTATIC_ASSERT(is_same_v<decltype((ctype_base::punct)), const ctype_base::mask&>);\r\nSTATIC_ASSERT(is_same_v<decltype((ctype_base::space)), const ctype_base::mask&>);\r\nSTATIC_ASSERT(is_same_v<decltype((ctype_base::upper)), const ctype_base::mask&>);\r\nSTATIC_ASSERT(is_same_v<decltype((ctype_base::xdigit)), const ctype_base::mask&>);\r\nSTATIC_ASSERT(is_same_v<decltype((ctype_base::blank)), const ctype_base::mask&>);\r\n\r\nconstexpr csub_match sm{};\r\nSTATIC_ASSERT(sm.first == nullptr);\r\nSTATIC_ASSERT(sm.second == nullptr);\r\nSTATIC_ASSERT(sm.matched == false);\r\n\r\n#ifndef _M_CEE_PURE\r\n\r\nconstexpr defer_lock_t defer_lock2   = defer_lock;\r\nconstexpr try_to_lock_t try_to_lock2 = try_to_lock;\r\nconstexpr adopt_lock_t adopt_lock2   = adopt_lock;\r\n\r\nconstexpr once_flag once{};\r\n\r\n#endif // _M_CEE_PURE\r\n\r\n// reverse_iterator and string_view constexpr are tested in P0220R1_string_view\r\n\r\ntemplate <typename Bitmask, Bitmask X, Bitmask Y>\r\nvoid test_bitmask() {\r\n    constexpr Bitmask b1 = X & Y;\r\n    constexpr Bitmask b2 = X | Y;\r\n    constexpr Bitmask b3 = X ^ Y;\r\n    constexpr Bitmask b4 = ~X;\r\n\r\n    (void) b1;\r\n    (void) b2;\r\n    (void) b3;\r\n    (void) b4;\r\n}\r\n\r\nvoid test_all_bitmasks() {\r\n    test_bitmask<ctype_base::mask, ctype_base::alpha, ctype_base::digit>();\r\n    test_bitmask<ios_base::fmtflags, ios_base::hex, ios_base::uppercase>();\r\n    test_bitmask<ios_base::iostate, ios_base::eofbit, ios_base::failbit>();\r\n    test_bitmask<ios_base::openmode, ios_base::binary, ios_base::out>();\r\n    test_bitmask<RC::syntax_option_type, RC::icase, RC::nosubs>();\r\n    test_bitmask<RC::match_flag_type, RC::match_not_bol, RC::match_not_eol>();\r\n#ifndef _M_CEE_PURE\r\n    test_bitmask<launch, launch::async, launch::deferred>();\r\n#endif // _M_CEE_PURE\r\n}\r\n\r\ntemplate <typename T>\r\nvoid test_limits() {\r\n    using NL = numeric_limits<T>;\r\n\r\n    constexpr auto nl1  = NL::is_specialized;\r\n    constexpr auto nl2  = NL::min();\r\n    constexpr auto nl3  = NL::max();\r\n    constexpr auto nl4  = NL::lowest();\r\n    constexpr auto nl5  = NL::digits;\r\n    constexpr auto nl6  = NL::digits10;\r\n    constexpr auto nl7  = NL::max_digits10;\r\n    constexpr auto nl8  = NL::is_signed;\r\n    constexpr auto nl9  = NL::is_integer;\r\n    constexpr auto nl10 = NL::is_exact;\r\n    constexpr auto nl11 = NL::radix;\r\n    constexpr auto nl12 = NL::epsilon();\r\n    constexpr auto nl13 = NL::round_error();\r\n    constexpr auto nl14 = NL::min_exponent;\r\n    constexpr auto nl15 = NL::min_exponent10;\r\n    constexpr auto nl16 = NL::max_exponent;\r\n    constexpr auto nl17 = NL::max_exponent10;\r\n    constexpr auto nl18 = NL::has_infinity;\r\n    constexpr auto nl19 = NL::has_quiet_NaN;\r\n    constexpr auto nl20 = NL::has_signaling_NaN;\r\n    constexpr auto nl21 = NL::has_denorm;\r\n    constexpr auto nl22 = NL::has_denorm_loss;\r\n    constexpr auto nl23 = NL::infinity();\r\n    constexpr auto nl24 = NL::quiet_NaN();\r\n    constexpr auto nl25 = NL::signaling_NaN();\r\n    constexpr auto nl26 = NL::denorm_min();\r\n    constexpr auto nl27 = NL::is_iec559;\r\n    constexpr auto nl28 = NL::is_bounded;\r\n    constexpr auto nl29 = NL::is_modulo;\r\n    constexpr auto nl30 = NL::traps;\r\n    constexpr auto nl31 = NL::tinyness_before;\r\n    constexpr auto nl32 = NL::round_style;\r\n\r\n    (void) nl1;\r\n    (void) nl2;\r\n    (void) nl3;\r\n    (void) nl4;\r\n    (void) nl5;\r\n    (void) nl6;\r\n    (void) nl7;\r\n    (void) nl8;\r\n    (void) nl9;\r\n    (void) nl10;\r\n    (void) nl11;\r\n    (void) nl12;\r\n    (void) nl13;\r\n    (void) nl14;\r\n    (void) nl15;\r\n    (void) nl16;\r\n    (void) nl17;\r\n    (void) nl18;\r\n    (void) nl19;\r\n    (void) nl20;\r\n    (void) nl21;\r\n    (void) nl22;\r\n    (void) nl23;\r\n    (void) nl24;\r\n    (void) nl25;\r\n    (void) nl26;\r\n    (void) nl27;\r\n    (void) nl28;\r\n    (void) nl29;\r\n    (void) nl30;\r\n    (void) nl31;\r\n    (void) nl32;\r\n}\r\n\r\nenum class Color : uint32_t { Red, Green, Blue };\r\n\r\nvoid test_all_limits() {\r\n    test_limits<Color>();\r\n    test_limits<bool>();\r\n    test_limits<char>();\r\n    test_limits<signed char>();\r\n    test_limits<unsigned char>();\r\n#ifdef __cpp_char8_t\r\n    test_limits<char8_t>();\r\n#endif // __cpp_char8_t\r\n    test_limits<char16_t>();\r\n    test_limits<char32_t>();\r\n    test_limits<wchar_t>();\r\n    test_limits<short>();\r\n    test_limits<int>();\r\n    test_limits<long>();\r\n    test_limits<long long>();\r\n    test_limits<unsigned short>();\r\n    test_limits<unsigned int>();\r\n    test_limits<unsigned long>();\r\n    test_limits<unsigned long long>();\r\n    test_limits<float>();\r\n    test_limits<double>();\r\n    test_limits<long double>();\r\n}\r\n\r\ntemplate <typename Floating, typename Integral>\r\nvoid assert_bits(const Floating fval, const Integral ival) {\r\n    assert(reinterpret_cast<const Integral&>(fval) == ival);\r\n}\r\n\r\n#if _HAS_CXX17\r\nstatic_assert(hardware_constructive_interference_size == 64);\r\nstatic_assert(hardware_destructive_interference_size == 64);\r\n#endif // _HAS_CXX17\r\n\r\n// P0295R0 gcd(), lcm()\r\nconstexpr bool test_gcd_lcm() {\r\n#if _HAS_CXX17\r\n    assert(gcd(0, 0) == 0);\r\n    assert(gcd(3125, 2401) == 1);\r\n    assert(gcd(3840, 2160) == 240);\r\n    assert(gcd(4096, 8192) == 4096);\r\n    assert(gcd(19937, 19937) == 19937);\r\n\r\n    assert(lcm(0, 0) == 0);\r\n    assert(lcm(0, 1729) == 0);\r\n    assert(lcm(1729, 0) == 0);\r\n    assert(lcm(1729, 1729) == 1729);\r\n    assert(lcm(4096, 8192) == 8192);\r\n    assert(lcm(1920, 1200) == 9600);\r\n    assert(lcm(25, 49) == 1225);\r\n#endif // _HAS_CXX17\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test_all_constants();\r\n    test_all_bitmasks();\r\n    test_all_limits();\r\n\r\n    (void) piecewise_construct2;\r\n    (void) allocator_arg2;\r\n\r\n    (void) tx1;\r\n    (void) tx2;\r\n    (void) tx3;\r\n\r\n    (void) p9;\r\n    (void) p10;\r\n    (void) p11;\r\n    (void) p12;\r\n    (void) p13;\r\n\r\n    (void) t11;\r\n    (void) t12;\r\n    (void) t13;\r\n    (void) t14;\r\n    (void) t15;\r\n    (void) t16;\r\n    (void) t17;\r\n\r\n    (void) dd1;\r\n    (void) dd2;\r\n\r\n    (void) istream_it;\r\n    (void) istreambuf_it;\r\n\r\n#ifndef _M_CEE_PURE\r\n    (void) defer_lock2;\r\n    (void) try_to_lock2;\r\n    (void) adopt_lock2;\r\n    (void) once;\r\n#endif // _M_CEE_PURE\r\n\r\n    // Compare against VC 2013's values.\r\n    assert_bits(numeric_limits<float>::denorm_min(), 0x00000001UL);\r\n    assert_bits(numeric_limits<double>::denorm_min(), 0x0000000000000001ULL);\r\n    assert_bits(numeric_limits<long double>::denorm_min(), 0x0000000000000001ULL);\r\n    assert_bits(numeric_limits<float>::infinity(), 0x7F800000UL);\r\n    assert_bits(numeric_limits<double>::infinity(), 0x7FF0000000000000ULL);\r\n    assert_bits(numeric_limits<long double>::infinity(), 0x7FF0000000000000ULL);\r\n    assert_bits(numeric_limits<float>::quiet_NaN(), 0x7FC00000UL);\r\n    assert_bits(numeric_limits<double>::quiet_NaN(), 0x7FF8000000000000ULL);\r\n    assert_bits(numeric_limits<long double>::quiet_NaN(), 0x7FF8000000000000ULL);\r\n    // signaling_NaN() should be 0x7F800001UL and 0x7FF0000000000001ULL,\r\n    // but compiler limitations are interfering (VSO-128935).\r\n\r\n    assert(bitset<0>(0x0ULL).to_string() == \"\");\r\n    assert(bitset<0>(0xFEDCBA9876543210ULL).to_string() == \"\");\r\n    assert(bitset<15>(0x6789ULL).to_string() == \"110011110001001\");\r\n    assert(bitset<15>(0xFEDCBA9876543210ULL).to_string() == \"011001000010000\");\r\n    assert(bitset<32>(0xABCD1234ULL).to_string() == \"10101011110011010001001000110100\");\r\n    assert(bitset<32>(0xFEDCBA9876543210ULL).to_string() == \"01110110010101000011001000010000\");\r\n    assert(bitset<45>(0x1701D1729FFFULL).to_string() == \"101110000000111010001011100101001111111111111\");\r\n    assert(bitset<45>(0xFEDCBA9876543210ULL).to_string() == \"110101001100001110110010101000011001000010000\");\r\n    assert(bitset<64>(0xFEDCBA9876543210ULL).to_string()\r\n           == \"1111111011011100101110101001100001110110010101000011001000010000\");\r\n    assert(bitset<75>(0xFEDCBA9876543210ULL).to_string()\r\n           == \"000000000001111111011011100101110101001100001110110010101000011001000010000\");\r\n\r\n    // P0295R0 gcd(), lcm()\r\n    test_gcd_lcm();\r\n    STATIC_ASSERT(test_gcd_lcm());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1086953_call_once_overhaul/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1086953_call_once_overhaul/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <chrono>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <exception>\r\n#include <functional>\r\n#include <intrin.h>\r\n#include <mutex>\r\n#include <stdexcept>\r\n#include <string>\r\n#include <thread>\r\n#include <vector>\r\n\r\n\r\nusing namespace std;\r\nusing namespace std::placeholders;\r\n\r\nlong g_last_successful_line(0);\r\n\r\nvoid verify(const bool b, const long line) {\r\n    if (b) {\r\n        _InterlockedExchange(&g_last_successful_line, line);\r\n    } else {\r\n        printf(\"Last successful line was %ld.\\n\", _InterlockedCompareExchange(&g_last_successful_line, 0, 0));\r\n        printf(\"Failed on line %ld.\\n\", line);\r\n        abort();\r\n    }\r\n}\r\n\r\n#define VERIFY(B) verify(B, __LINE__)\r\n\r\nstruct WritePlaceholder {\r\n    template <typename T>\r\n    void operator()(const T&, int* const p) const {\r\n        *p = is_placeholder_v<T>;\r\n    }\r\n};\r\n\r\nvoid ThrowingFunc(int* const p) {\r\n    ++*p;\r\n\r\n    switch (*p) {\r\n    case 1:\r\n        throw overflow_error(\"one\");\r\n    case 2:\r\n        throw underflow_error(\"two\");\r\n    default:\r\n        break;\r\n    }\r\n}\r\n\r\nvoid run_tests() {\r\n    // Basic check.\r\n    {\r\n        once_flag flag;\r\n        auto inc = [](int* const p) { ++*p; };\r\n        int i    = 0;\r\n\r\n        VERIFY(i == 0);\r\n        call_once(flag, inc, &i);\r\n        VERIFY(i == 1);\r\n        call_once(flag, inc, &i);\r\n        VERIFY(i == 1);\r\n    }\r\n\r\n    // call_once() should use INVOKE().\r\n    {\r\n        struct Meow {\r\n            int x;\r\n            int y;\r\n\r\n            void write_sum(int* const p) const {\r\n                *p = x + y;\r\n            }\r\n        };\r\n\r\n        once_flag flag;\r\n        Meow m = {1700, 29};\r\n        int i  = 0;\r\n\r\n        call_once(flag, &Meow::write_sum, &m, &i);\r\n        VERIFY(i == 1729);\r\n    }\r\n\r\n    // call_once() should NOT use bind().\r\n    {\r\n        once_flag flag1;\r\n        int i1 = -1;\r\n\r\n        call_once(flag1, WritePlaceholder(), 3.14, &i1);\r\n        VERIFY(i1 == 0);\r\n\r\n\r\n        once_flag flag2;\r\n        int i2 = -1;\r\n\r\n        call_once(flag2, WritePlaceholder(), _5, &i2);\r\n        VERIFY(i2 == 5);\r\n    }\r\n\r\n    // Test DevDiv-1086953 \"Throwing exception from std::call_once does not allow other threads to enter\".\r\n    // EH, single-threaded.\r\n    {\r\n        once_flag flag;\r\n\r\n        int i = 0;\r\n\r\n        try {\r\n            call_once(flag, ThrowingFunc, &i);\r\n            VERIFY(false);\r\n        } catch (const overflow_error& e) {\r\n            VERIFY(i == 1);\r\n            VERIFY(e.what() == \"one\"s);\r\n        } catch (...) {\r\n            VERIFY(false);\r\n        }\r\n\r\n        try {\r\n            call_once(flag, ThrowingFunc, &i);\r\n            VERIFY(false);\r\n        } catch (const underflow_error& e) {\r\n            VERIFY(i == 2);\r\n            VERIFY(e.what() == \"two\"s);\r\n        } catch (...) {\r\n            VERIFY(false);\r\n        }\r\n\r\n        try {\r\n            call_once(flag, ThrowingFunc, &i);\r\n            VERIFY(i == 3);\r\n\r\n            call_once(flag, ThrowingFunc, &i);\r\n            VERIFY(i == 3);\r\n        } catch (...) {\r\n            VERIFY(false);\r\n        }\r\n    }\r\n\r\n    // Test DevDiv-1086953 \"Throwing exception from std::call_once does not allow other threads to enter\".\r\n    // EH, multi-threaded.\r\n    {\r\n        long ready = 0;\r\n        once_flag flag;\r\n        int i = 0;\r\n\r\n        auto lambda = [&ready, &flag, &i] {\r\n            while (!_InterlockedCompareExchange(&ready, 0, 0)) {\r\n            }\r\n\r\n            try {\r\n                call_once(flag, ThrowingFunc, &i);\r\n                VERIFY(i == 3);\r\n            } catch (const overflow_error& e) {\r\n                VERIFY(e.what() == \"one\"s);\r\n            } catch (const underflow_error& e) {\r\n                VERIFY(e.what() == \"two\"s);\r\n            } catch (...) {\r\n                VERIFY(false);\r\n            }\r\n        };\r\n\r\n        vector<thread> v;\r\n\r\n        // Want 5 threads: 2 exceptional, 1 returning, 2 passive.\r\n        for (int n = 0; n < 5; ++n) {\r\n            v.emplace_back(lambda);\r\n        }\r\n\r\n        _InterlockedExchange(&ready, 1);\r\n\r\n        for (auto& t : v) {\r\n            t.join();\r\n        }\r\n\r\n        VERIFY(i == 3);\r\n    }\r\n\r\n    // Test DevDiv-1092852 \"concurrent std::call_once calls seem to be blocking somewhere on a shared variable\".\r\n    // Also test stateful callable objects.\r\n    {\r\n        long atom = 0;\r\n\r\n        thread t1([&atom] {\r\n            once_flag flag1;\r\n\r\n            auto lambda1 = [&atom] {\r\n                _InterlockedExchange(&atom, 100);\r\n                while (_InterlockedCompareExchange(&atom, 111, 200) != 200) {\r\n                }\r\n            };\r\n\r\n            call_once(flag1, lambda1);\r\n        });\r\n\r\n        thread t2([&atom] {\r\n            once_flag flag2;\r\n\r\n            auto lambda2 = [&atom] {\r\n                while (_InterlockedCompareExchange(&atom, 200, 100) != 100) {\r\n                }\r\n                while (_InterlockedCompareExchange(&atom, 222, 111) != 111) {\r\n                }\r\n            };\r\n\r\n            call_once(flag2, lambda2);\r\n        });\r\n\r\n        t1.join();\r\n        t2.join();\r\n\r\n        VERIFY(atom == 222);\r\n    }\r\n\r\n    // Verify that active executions don't occur simultaneously.\r\n    {\r\n        once_flag flag;\r\n        long atom = 0;\r\n\r\n        auto thread_lambda = [&flag, &atom] {\r\n            try {\r\n                call_once(flag, [&atom] {\r\n                    VERIFY(_InterlockedIncrement(&atom) == 1);\r\n                    this_thread::sleep_for(50ms);\r\n                    VERIFY(_InterlockedDecrement(&atom) == 0);\r\n                    throw runtime_error(\"woof\");\r\n                });\r\n                VERIFY(false);\r\n            } catch (const runtime_error& e) {\r\n                VERIFY(e.what() == \"woof\"s);\r\n            } catch (...) {\r\n                VERIFY(false);\r\n            }\r\n        };\r\n\r\n        vector<thread> v;\r\n\r\n        for (int n = 0; n < 5; ++n) {\r\n            v.emplace_back(thread_lambda);\r\n        }\r\n\r\n        for (auto& t : v) {\r\n            t.join();\r\n        }\r\n    }\r\n\r\n    // Test LWG-2442 \"call_once() shouldn't DECAY_COPY()\".\r\n    {\r\n        once_flag flag;\r\n        int n       = 0;\r\n        auto lambda = [](int& r) { r = 1729; };\r\n\r\n        VERIFY(n == 0);\r\n        call_once(flag, lambda, n);\r\n        VERIFY(n == 1729);\r\n    }\r\n}\r\n\r\nint main() {\r\n    try {\r\n        run_tests();\r\n    } catch (const exception& e) {\r\n        puts(e.what());\r\n        VERIFY(false);\r\n    }\r\n\r\n    puts(\"Passed.\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1114006_condition_variable_pred/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1114006_condition_variable_pred/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Test DevDiv-1114006 \"[+ VS2015] conditional_variable with predicate does not behave according to the standard\".\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <condition_variable>\r\n#include <cstdlib>\r\n#include <mutex>\r\n#include <thread>\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\n\r\nstruct Pred {\r\n    unsigned int& counter_;\r\n    explicit Pred(unsigned int& counter) : counter_(counter) {}\r\n\r\n    // Note that the standard actually requires these to be copyable. As a \"nonstandard extension\" we want\r\n    // to ensure we don't copy them, because copying some functors (e.g. std::function) is comparatively\r\n    // expensive, and even for relatively cheap to copy function objects we care (somewhat) about debug\r\n    // mode perf.\r\n    Pred(const Pred&)            = delete;\r\n    Pred(Pred&& o)               = default;\r\n    Pred& operator=(const Pred&) = delete;\r\n    Pred& operator=(Pred&&)      = delete;\r\n\r\n    bool operator()() {\r\n        switch (counter_) {\r\n        case 0:\r\n            return false;\r\n\r\n        case 1:\r\n            counter_ = 2;\r\n            return true;\r\n\r\n        default:\r\n            abort();\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <typename CV>\r\nvoid test(const int waiter, const int sleeper) {\r\n    const auto Timeout = 10s; // Timing assumption: This will be plenty of time.\r\n    const auto Snooze  = 100ms;\r\n\r\n    unsigned int counter = 0;\r\n    CV cv;\r\n    mutex mut;\r\n\r\n    thread t0([&] {\r\n        if (sleeper == 0) {\r\n            this_thread::sleep_for(Snooze);\r\n        }\r\n\r\n        {\r\n            unique_lock<mutex> ul(mut);\r\n\r\n            switch (waiter) {\r\n            case 0:\r\n                assert(cv.wait_for(ul, Timeout, Pred{counter}));\r\n                break;\r\n\r\n            case 1:\r\n                assert(cv.wait_until(ul, steady_clock::now() + Timeout, Pred{counter}));\r\n                break;\r\n\r\n            case 2:\r\n                cv.wait(ul, Pred{counter});\r\n                break;\r\n\r\n            default:\r\n                abort();\r\n            }\r\n\r\n            assert(counter == 2);\r\n        }\r\n    });\r\n\r\n    thread t1([&] {\r\n        if (sleeper == 1) {\r\n            this_thread::sleep_for(Snooze);\r\n        }\r\n\r\n        {\r\n            lock_guard<mutex> g(mut);\r\n            assert(counter == 0);\r\n            counter = 1;\r\n        }\r\n\r\n        cv.notify_one();\r\n    });\r\n\r\n    t0.join();\r\n    t1.join();\r\n}\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n// GH-140: \"STL: We should _STD qualify _Ugly function calls to avoid ADL\"\r\ntemplate <class T>\r\nstruct tagged_pred {\r\n    bool operator()() const noexcept {\r\n        return true;\r\n    }\r\n};\r\n\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\n\r\ntemplate <class CV>\r\nvoid test_adl_proof_waiting() { // COMPILE-ONLY\r\n    using validating_pred = tagged_pred<holder<incomplete>>;\r\n\r\n    mutex mut;\r\n    {\r\n        CV cv;\r\n        unique_lock<mutex> guard(mut);\r\n        (void) cv.wait(guard, validating_pred{});\r\n    }\r\n    {\r\n        CV cv;\r\n        unique_lock<mutex> guard(mut);\r\n        (void) cv.wait_for(guard, 1ms, validating_pred{});\r\n    }\r\n    {\r\n        CV cv;\r\n        unique_lock<mutex> guard(mut);\r\n        (void) cv.wait_until(guard, steady_clock::now() + 1ms, validating_pred{});\r\n    }\r\n}\r\n\r\nvoid test_adl_proof_waiting_all() { // COMPILE-ONLY\r\n    test_adl_proof_waiting<condition_variable>();\r\n    test_adl_proof_waiting<condition_variable_any>();\r\n}\r\n#endif // ^^^ no workaround ^^^\r\n\r\nint main() {\r\n    for (int waiter = 0; waiter < 3; ++waiter) {\r\n        for (int sleeper = 0; sleeper < 3; ++sleeper) { // Intentionally test a case without sleeping.\r\n            test<condition_variable>(waiter, sleeper);\r\n            test<condition_variable_any>(waiter, sleeper);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1127004_future_has_exceptions_0/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/D_HAS_EXCEPTIONS=0\"\r\n*\tPM_CL=\"/D_HAS_EXCEPTIONS=1\"\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1127004_future_has_exceptions_0/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <future>\r\n\r\nint main() {\r\n#ifndef _M_CEE // TRANSITION, VSO-2359637, avoid sporadic failures under /clr\r\n    std::async([] {}).wait();\r\n#endif\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1131212_uncaught_exceptions/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1131212_uncaught_exceptions/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// DevDiv-1131212:  std::uncaught_exceptions is not implemented\r\n//\r\n// This test validates the implementation of std::uncaught_exceptions by recursively\r\n// throwing exceptions from a destructor.\r\n\r\n#include <cassert>\r\n#include <exception>\r\n\r\nclass awesome_exception {};\r\n\r\nclass check_uncaught_exceptions_count {\r\npublic:\r\n    explicit check_uncaught_exceptions_count(int const remaining, int const processing = 0)\r\n        : _remaining(remaining), _processing(processing) {}\r\n\r\n    ~check_uncaught_exceptions_count() {\r\n        if (_remaining != 0) {\r\n            try {\r\n                check_uncaught_exceptions_count const test(_remaining - 1, _processing + 1);\r\n                throw awesome_exception();\r\n            } catch (awesome_exception const&) {\r\n            }\r\n        }\r\n\r\n        assert(_processing == std::uncaught_exceptions());\r\n    }\r\n\r\nprivate:\r\n    check_uncaught_exceptions_count(check_uncaught_exceptions_count const&)            = delete;\r\n    check_uncaught_exceptions_count& operator=(check_uncaught_exceptions_count const&) = delete;\r\n\r\n    int _remaining;\r\n    int _processing;\r\n};\r\n\r\nint main() {\r\n    // Verify the return value of std::uncaught_exceptions() when between 0 and\r\n    // 100 exceptions are being unwound:\r\n    check_uncaught_exceptions_count(10);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1137366_nested_exception/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1137366_nested_exception/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <exception>\r\n#include <stdexcept>\r\n#include <string>\r\n#include <type_traits>\r\n#include <typeinfo>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nSTATIC_ASSERT(is_polymorphic_v<nested_exception>);\r\nSTATIC_ASSERT(has_virtual_destructor_v<nested_exception>);\r\nSTATIC_ASSERT(!is_final_v<nested_exception>);\r\n\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<nested_exception>);\r\nSTATIC_ASSERT(is_nothrow_copy_constructible_v<nested_exception>);\r\nSTATIC_ASSERT(is_nothrow_move_constructible_v<nested_exception>);\r\nSTATIC_ASSERT(is_nothrow_copy_assignable_v<nested_exception>);\r\nSTATIC_ASSERT(is_nothrow_move_assignable_v<nested_exception>);\r\nSTATIC_ASSERT(is_nothrow_destructible_v<nested_exception>);\r\n\r\nSTATIC_ASSERT(noexcept(nested_exception().nested_ptr()));\r\n\r\ntemplate <typename Exception, typename Func, typename Checker>\r\nvoid assert_thrown(Func func, Checker checker) {\r\n\r\n    try {\r\n        func();\r\n        abort();\r\n    } catch (const Exception& e) {\r\n        checker(e);\r\n    }\r\n}\r\n\r\nstruct Final final {};\r\n\r\nSTATIC_ASSERT(is_final_v<Final>);\r\n\r\nstruct AlreadyNested : nested_exception {};\r\n\r\nstruct PolymorphicInt {\r\n    explicit PolymorphicInt(const int n) : m_n(n) {}\r\n\r\n    PolymorphicInt(const PolymorphicInt&)            = default;\r\n    PolymorphicInt& operator=(const PolymorphicInt&) = default;\r\n    virtual ~PolymorphicInt()                        = default;\r\n\r\n    int m_n;\r\n};\r\n\r\nint cube(const int n) {\r\n    return n * n * n;\r\n}\r\n\r\nstruct Nonpolymorphic {};\r\n\r\nclass PrivateNested : private nested_exception {};\r\n\r\nstruct AmbiguousNested1 : nested_exception {};\r\nstruct AmbiguousNested2 : nested_exception {};\r\nstruct AmbiguousNested : AmbiguousNested1, AmbiguousNested2 {};\r\n\r\nstruct Icky : PolymorphicInt, PrivateNested {\r\n    Icky() : PolymorphicInt(-1), PrivateNested() {}\r\n};\r\n\r\nstruct Yucky : PolymorphicInt, AmbiguousNested {\r\n    Yucky() : PolymorphicInt(-2), AmbiguousNested() {}\r\n};\r\n\r\nstruct GoodNested : PolymorphicInt, nested_exception {\r\n    GoodNested() : PolymorphicInt(343), nested_exception() {}\r\n};\r\n\r\nint main() {\r\n    {\r\n        nested_exception outer;\r\n\r\n        assert(!outer.nested_ptr());\r\n\r\n        try {\r\n            throw runtime_error(\"WOOF\");\r\n        } catch (...) {\r\n            nested_exception inner;\r\n            outer = inner;\r\n        }\r\n\r\n        assert(!!outer.nested_ptr());\r\n\r\n        auto woof_checker = [](const runtime_error& e) { assert(e.what() == \"WOOF\"s); };\r\n\r\n        assert_thrown<runtime_error>([&] { rethrow_exception(outer.nested_ptr()); }, woof_checker);\r\n\r\n        assert_thrown<runtime_error>([&] { outer.rethrow_nested(); }, woof_checker);\r\n\r\n        nested_exception dupe(outer);\r\n        assert(dupe.nested_ptr() == outer.nested_ptr());\r\n    }\r\n\r\n    {\r\n        assert_thrown<int>([] { throw_with_nested(1729); }, [](const int e) { assert(e == 1729); });\r\n\r\n        assert_thrown<Final>([] { throw_with_nested(Final()); }, [](const Final&) { assert(true); });\r\n\r\n        assert_thrown<AlreadyNested>([] { throw_with_nested(AlreadyNested()); },\r\n            [](const AlreadyNested& e) { assert(typeid(e) == typeid(AlreadyNested)); });\r\n\r\n        assert_thrown<nested_exception>([] { throw_with_nested(nested_exception()); },\r\n            [](const nested_exception& e) { assert(typeid(e) == typeid(nested_exception)); });\r\n\r\n        assert_thrown<PolymorphicInt>([] { throw_with_nested(PolymorphicInt(123)); },\r\n            [](const PolymorphicInt& e) {\r\n                assert(e.m_n == 123);\r\n                assert(typeid(e) != typeid(PolymorphicInt));\r\n                const auto p = dynamic_cast<const nested_exception*>(&e);\r\n                assert(p != nullptr);\r\n            });\r\n\r\n        // LWG-2855 \"std::throw_with_nested(\"string_literal\")\"\r\n        assert_thrown<const char*>(\r\n            [] { throw_with_nested(\"meow\"); }, [](const char* const p) { assert(p == \"meow\"s); });\r\n\r\n        using FP = int (*)(int);\r\n\r\n        assert_thrown<FP>([] { throw_with_nested(cube); }, [](const FP fp) { assert(fp(7) == 343); });\r\n    }\r\n\r\n    {\r\n        // NON-POLYMORPHIC INPUTS:\r\n\r\n        // Non-classes can't possibly derive from nested_exception.\r\n        rethrow_if_nested(19937);\r\n\r\n        // Classes might derive from nested_exception, but if we're given\r\n        // a non-polymorphic input, we can't possibly sense nested_exception.\r\n        rethrow_if_nested(Nonpolymorphic());\r\n\r\n\r\n        // POLYMORPHIC INPUTS:\r\n\r\n        Icky icky;\r\n        PolymorphicInt& icky_pi_base = icky;\r\n\r\n        Yucky yucky;\r\n        PolymorphicInt& yucky_pi_base = yucky;\r\n\r\n\r\n        GoodNested good;\r\n        PolymorphicInt& good_pi_base   = good;\r\n        nested_exception& good_ne_base = good;\r\n\r\n        try {\r\n            throw runtime_error(\"HISS\");\r\n        } catch (...) {\r\n            nested_exception inner;\r\n            good_ne_base = inner;\r\n        }\r\n\r\n        auto hiss_checker = [](const runtime_error& e) { assert(e.what() == \"HISS\"s); };\r\n\r\n\r\n        nested_exception ne = good_ne_base;\r\n\r\n\r\n        // 1a. Statically unrelated, dynamically unrelated:\r\n        rethrow_if_nested(PolymorphicInt(256));\r\n\r\n        // 1b. Statically unrelated, dynamically derives badly (inaccessible or ambiguous):\r\n        rethrow_if_nested(icky_pi_base);\r\n        rethrow_if_nested(yucky_pi_base);\r\n\r\n        // 1c. Statically unrelated, dynamically derives well (public and unambiguous):\r\n        assert_thrown<runtime_error>([&] { rethrow_if_nested(good_pi_base); }, hiss_checker);\r\n\r\n        // 2. Statically derives badly:\r\n        rethrow_if_nested(PrivateNested());\r\n        rethrow_if_nested(AmbiguousNested());\r\n\r\n        // 3a. Statically derives well, dynamically derives badly:\r\n        // Can't detect this case.\r\n\r\n        // 3b. Statically derives well, dynamically derives well:\r\n        assert_thrown<runtime_error>([&] { rethrow_if_nested(good); }, hiss_checker);\r\n\r\n        // 4a. Statically nested_exception itself, dynamically derives badly:\r\n        // Can't detect this case.\r\n\r\n        // 4b. Statically nested_exception itself, dynamically derives well:\r\n        assert_thrown<runtime_error>([&] { rethrow_if_nested(good_ne_base); }, hiss_checker);\r\n\r\n        // 4c. Statically nested_exception itself, dynamically nested_exception itself:\r\n        assert_thrown<runtime_error>([&] { rethrow_if_nested(ne); }, hiss_checker);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1140665_unique_ptr_array_conversions/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1140665_unique_ptr_array_conversions/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nint g_objects = 0;\r\n\r\nstruct X {\r\n    X() {\r\n        ++g_objects;\r\n    }\r\n    ~X() noexcept {\r\n        --g_objects;\r\n    }\r\n\r\n    X(const X&)            = delete;\r\n    X& operator=(const X&) = delete;\r\n};\r\n\r\nint overloaded_dd(default_delete<X const[][4]>) {\r\n    return 100;\r\n}\r\nint overloaded_dd(default_delete<int const[][7]>) {\r\n    return 200;\r\n}\r\n\r\nint overloaded_up(unique_ptr<X const>) {\r\n    return 300;\r\n}\r\nint overloaded_up(unique_ptr<int const>) {\r\n    return 400;\r\n}\r\nint overloaded_up(unique_ptr<X const[][4]>) {\r\n    return 500;\r\n}\r\nint overloaded_up(unique_ptr<int const[][7]>) {\r\n    return 600;\r\n}\r\n\r\n\r\n// LWG-2801 \"Default-constructibility of unique_ptr\"\r\n\r\nnamespace lwg_2801 {\r\n    STATIC_ASSERT(is_default_constructible_v<unique_ptr<int>>);\r\n    STATIC_ASSERT(is_default_constructible_v<unique_ptr<int[]>>);\r\n    STATIC_ASSERT(is_constructible_v<unique_ptr<int>, int*>);\r\n    STATIC_ASSERT(is_constructible_v<unique_ptr<int[]>, int*>);\r\n\r\n    // unique_ptrs with pointer deleter\r\n    using vpfvp = void (*)(void*);\r\n    STATIC_ASSERT(!is_default_constructible_v<unique_ptr<int, vpfvp>>);\r\n    STATIC_ASSERT(!is_default_constructible_v<unique_ptr<int[], vpfvp>>);\r\n    STATIC_ASSERT(!is_constructible_v<unique_ptr<int, vpfvp>, nullptr_t>);\r\n    STATIC_ASSERT(!is_constructible_v<unique_ptr<int[], vpfvp>, nullptr_t>);\r\n    STATIC_ASSERT(!is_constructible_v<unique_ptr<int, vpfvp>, int*>);\r\n    STATIC_ASSERT(!is_constructible_v<unique_ptr<int[], vpfvp>, int*>);\r\n\r\n    // unique_ptrs with non-default-constructible deleter:\r\n    struct NonDefaultConstructibleDeleter {\r\n        NonDefaultConstructibleDeleter(int);\r\n        void operator()(void*);\r\n    };\r\n    STATIC_ASSERT(!is_default_constructible_v<unique_ptr<int, NonDefaultConstructibleDeleter>>);\r\n    STATIC_ASSERT(!is_default_constructible_v<unique_ptr<int[], NonDefaultConstructibleDeleter>>);\r\n    STATIC_ASSERT(!is_constructible_v<unique_ptr<int, NonDefaultConstructibleDeleter>, nullptr_t>);\r\n    STATIC_ASSERT(!is_constructible_v<unique_ptr<int[], NonDefaultConstructibleDeleter>, nullptr_t>);\r\n    STATIC_ASSERT(!is_constructible_v<unique_ptr<int, NonDefaultConstructibleDeleter>, int*>);\r\n    STATIC_ASSERT(!is_constructible_v<unique_ptr<int[], NonDefaultConstructibleDeleter>, int*>);\r\n\r\n    // Other tests for the template pointer constructor of unique_ptr<T[]>\r\n    STATIC_ASSERT(is_constructible_v<unique_ptr<const int[]>, int*>);\r\n    STATIC_ASSERT(!is_constructible_v<unique_ptr<int[]>, void*>);\r\n    STATIC_ASSERT(!is_constructible_v<unique_ptr<int[]>, void (*)()>);\r\n} // namespace lwg_2801\r\n\r\n\r\n// LWG-2905 \"is_constructible_v<unique_ptr<P, D>, P, D const &> should be false when D is not copy constructible\"\r\n\r\nnamespace lwg_2905 {\r\n    void test_nothrow() {\r\n        // per LWG-2905\r\n        using T       = int;\r\n        using pointer = int*;\r\n        {\r\n            using A = default_delete<int>;\r\n            using D = A;\r\n            STATIC_ASSERT(is_nothrow_constructible_v<unique_ptr<T, D>, pointer, const A&>);\r\n            STATIC_ASSERT(is_nothrow_constructible_v<unique_ptr<T[], D>, pointer, const A&>);\r\n            STATIC_ASSERT(is_nothrow_constructible_v<unique_ptr<T, D>, pointer, A>);\r\n            STATIC_ASSERT(is_nothrow_constructible_v<unique_ptr<T[], D>, pointer, A>);\r\n        }\r\n        {\r\n            using A = default_delete<int>;\r\n            using D = A&;\r\n            STATIC_ASSERT(is_nothrow_constructible_v<unique_ptr<T, D>, pointer, A&>);\r\n            STATIC_ASSERT(is_nothrow_constructible_v<unique_ptr<T[], D>, pointer, A&>);\r\n            STATIC_ASSERT(!is_constructible_v<unique_ptr<T, D>, pointer, A>);\r\n            STATIC_ASSERT(!is_constructible_v<unique_ptr<T[], D>, pointer, A>);\r\n        }\r\n        {\r\n            using A = default_delete<int>;\r\n            using D = const A&;\r\n            STATIC_ASSERT(is_nothrow_constructible_v<unique_ptr<T, D>, pointer, const A&>);\r\n            STATIC_ASSERT(is_nothrow_constructible_v<unique_ptr<T[], D>, pointer, const A&>);\r\n            STATIC_ASSERT(!is_constructible_v<unique_ptr<T, D>, pointer, const A>);\r\n            STATIC_ASSERT(!is_constructible_v<unique_ptr<T[], D>, pointer, const A>);\r\n        }\r\n    }\r\n\r\n    void test_sfinae() {\r\n        // per LWG-2905\r\n        // also test LWG-2899 \"is_(nothrow_)move_constructible and tuple, optional and unique_ptr\"\r\n        using T       = int;\r\n        using pointer = int*;\r\n        struct Immobile {\r\n            Immobile()                           = default;\r\n            Immobile(Immobile const&)            = delete;\r\n            Immobile& operator=(Immobile const&) = delete;\r\n\r\n            void operator()(int*) const {}\r\n        };\r\n        {\r\n            using A = Immobile;\r\n            using D = A;\r\n            STATIC_ASSERT(!is_constructible_v<unique_ptr<T, D>, pointer, const A&>);\r\n            STATIC_ASSERT(!is_constructible_v<unique_ptr<T[], D>, pointer, const A&>);\r\n            STATIC_ASSERT(!is_constructible_v<unique_ptr<T, D>, pointer, A>);\r\n            STATIC_ASSERT(!is_constructible_v<unique_ptr<T[], D>, pointer, A>);\r\n\r\n            // per LWG-2899\r\n            STATIC_ASSERT(!is_move_constructible_v<unique_ptr<T, D>>);\r\n            STATIC_ASSERT(!is_move_constructible_v<unique_ptr<T[], D>>);\r\n            STATIC_ASSERT(!is_move_assignable_v<unique_ptr<T, D>>);\r\n            STATIC_ASSERT(!is_move_assignable_v<unique_ptr<T[], D>>);\r\n        }\r\n        {\r\n            using A = Immobile;\r\n            using D = A&;\r\n            STATIC_ASSERT(is_nothrow_constructible_v<unique_ptr<T, D>, pointer, A&>);\r\n            STATIC_ASSERT(is_nothrow_constructible_v<unique_ptr<T[], D>, pointer, A&>);\r\n            STATIC_ASSERT(!is_constructible_v<unique_ptr<T, D>, pointer, A>);\r\n            STATIC_ASSERT(!is_constructible_v<unique_ptr<T[], D>, pointer, A>);\r\n\r\n            // per LWG-2899\r\n            STATIC_ASSERT(is_nothrow_move_constructible_v<unique_ptr<T, D>>);\r\n            STATIC_ASSERT(is_nothrow_move_constructible_v<unique_ptr<T[], D>>);\r\n            STATIC_ASSERT(!is_move_assignable_v<unique_ptr<T, D>>);\r\n            STATIC_ASSERT(!is_move_assignable_v<unique_ptr<T[], D>>);\r\n        }\r\n        {\r\n            using A = Immobile;\r\n            using D = const A&;\r\n            STATIC_ASSERT(is_nothrow_constructible_v<unique_ptr<T, D>, pointer, const A&>);\r\n            STATIC_ASSERT(is_nothrow_constructible_v<unique_ptr<T[], D>, pointer, const A&>);\r\n            STATIC_ASSERT(!is_constructible_v<unique_ptr<T, D>, pointer, const A>);\r\n            STATIC_ASSERT(!is_constructible_v<unique_ptr<T[], D>, pointer, const A>);\r\n\r\n            // per LWG-2899\r\n            STATIC_ASSERT(is_nothrow_move_constructible_v<unique_ptr<T, D>>);\r\n            STATIC_ASSERT(is_nothrow_move_constructible_v<unique_ptr<T[], D>>);\r\n            STATIC_ASSERT(!is_move_assignable_v<unique_ptr<T, D>>);\r\n            STATIC_ASSERT(!is_move_assignable_v<unique_ptr<T[], D>>);\r\n        }\r\n    }\r\n\r\n    void test() {\r\n        test_nothrow();\r\n        test_sfinae();\r\n    }\r\n} // namespace lwg_2905\r\n\r\n// also test DevCom-754487 \"std::swap of unique_ptr to incomplete type fails to compile\"\r\nstruct incomplete;\r\nvoid my_swap(unique_ptr<incomplete>& lhs, unique_ptr<incomplete>& rhs) {\r\n    STATIC_ASSERT(noexcept(swap(lhs, rhs)));\r\n    swap(lhs, rhs);\r\n}\r\n\r\n// also test LWG-3865 Sorting a range of pairs\r\nconstexpr bool test_lwg3865() {\r\n    const pair<int, int> a{1, 2};\r\n    const pair<long, long> b{1, 2};\r\n    const pair<long, long> c{2, 2};\r\n    assert(a == b);\r\n    assert(a != c);\r\n    assert(c >= a);\r\n    assert(b >= a);\r\n    assert(c > a);\r\n    assert(!(b > a));\r\n    assert(a < c);\r\n    assert(!(a < b));\r\n    assert(a <= c);\r\n    assert(a <= b);\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    {\r\n        assert(g_objects == 0);\r\n        X(*p)[4] = new X[3][4];\r\n        assert(g_objects == 12);\r\n        X const(*p2)[4] = p;\r\n        delete[] p2;\r\n        assert(g_objects == 0);\r\n    }\r\n\r\n    {\r\n        assert(g_objects == 0);\r\n        X(*p)[4] = new X[3][4];\r\n        assert(g_objects == 12);\r\n        default_delete<X const[][4]> del;\r\n        del(p);\r\n        assert(g_objects == 0);\r\n    }\r\n\r\n    assert(overloaded_dd(default_delete<X[][4]>{}) == 100);\r\n    assert(overloaded_dd(default_delete<int[][7]>{}) == 200);\r\n\r\n    STATIC_ASSERT(is_same_v<unique_ptr<float>::pointer, float*>);\r\n    STATIC_ASSERT(is_same_v<unique_ptr<double[]>::pointer, double*>);\r\n\r\n    {\r\n        assert(g_objects == 0);\r\n        unique_ptr<X const[][4]> up(new X[3][4]);\r\n        assert(g_objects == 12);\r\n        up.reset();\r\n        assert(g_objects == 0);\r\n        up.reset(new X[11][4]);\r\n        assert(g_objects == 44);\r\n        up.reset(nullptr);\r\n        assert(g_objects == 0);\r\n    }\r\n\r\n    {\r\n        assert(g_objects == 0);\r\n        default_delete<X const[][4]> del;\r\n        unique_ptr<X const[][4]> up(new X[3][4], del);\r\n        assert(g_objects == 12);\r\n        up.reset();\r\n        assert(g_objects == 0);\r\n    }\r\n\r\n    {\r\n        assert(g_objects == 0);\r\n        default_delete<X const[][4]> del;\r\n        unique_ptr<X const[][4]> up(new X[3][4], move(del));\r\n        assert(g_objects == 12);\r\n        up.reset();\r\n        assert(g_objects == 0);\r\n    }\r\n\r\n    assert(overloaded_up(unique_ptr<X>{}) == 300);\r\n    assert(overloaded_up(unique_ptr<int>{}) == 400);\r\n    assert(overloaded_up(unique_ptr<X[][4]>{}) == 500);\r\n    assert(overloaded_up(unique_ptr<int[][7]>{}) == 600);\r\n\r\n    {\r\n        assert(g_objects == 0);\r\n        unique_ptr<X[][4]> src(new X[3][4]);\r\n        assert(g_objects == 12);\r\n        unique_ptr<X const[][4]> dest = move(src);\r\n        assert(!src);\r\n        assert(g_objects == 12);\r\n        dest.reset();\r\n        assert(g_objects == 0);\r\n        src.reset(new X[5][4]);\r\n        assert(g_objects == 20);\r\n        dest = move(src);\r\n        assert(!src);\r\n        assert(g_objects == 20);\r\n        dest.reset();\r\n        assert(g_objects == 0);\r\n    }\r\n\r\n    lwg_2905::test();\r\n\r\n    {\r\n        // Guard against regression of VSO-542636\r\n        struct S {\r\n            virtual ~S()     = default;\r\n            virtual void f() = 0;\r\n        };\r\n        (void) make_unique<unique_ptr<S>[]>(42);\r\n    }\r\n\r\n    test_lwg3865();\r\n    STATIC_ASSERT(test_lwg3865());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1150223_shared_mutex/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1150223_shared_mutex/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <atomic>\r\n#include <cassert>\r\n#include <chrono>\r\n#include <condition_variable>\r\n#include <mutex>\r\n#include <shared_mutex>\r\n#include <thread>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nusing namespace std;\r\n\r\nSTATIC_ASSERT(is_standard_layout_v<mutex>); // N4928 [thread.mutex.class]/3\r\nSTATIC_ASSERT(is_standard_layout_v<recursive_mutex>); // N4928 [thread.mutex.recursive]/2\r\nSTATIC_ASSERT(is_standard_layout_v<timed_mutex>); // N4928 [thread.timedmutex.class]/2\r\nSTATIC_ASSERT(is_standard_layout_v<recursive_timed_mutex>); // N4928 [thread.timedmutex.recursive]/2\r\nSTATIC_ASSERT(is_standard_layout_v<shared_mutex>); // N4928 [thread.sharedmutex.class]/2\r\nSTATIC_ASSERT(is_standard_layout_v<shared_timed_mutex>); // N4928 [thread.sharedtimedmutex.class]/2\r\nSTATIC_ASSERT(is_standard_layout_v<condition_variable>); // N4928 [thread.condition.condvar]/1\r\n\r\n// nothrow-destructibility required by N4928 [res.on.exception.handling]/3\r\nSTATIC_ASSERT(is_nothrow_destructible_v<mutex>);\r\nSTATIC_ASSERT(is_nothrow_destructible_v<recursive_mutex>);\r\nSTATIC_ASSERT(is_nothrow_destructible_v<timed_mutex>);\r\nSTATIC_ASSERT(is_nothrow_destructible_v<recursive_timed_mutex>);\r\nSTATIC_ASSERT(is_nothrow_destructible_v<shared_mutex>);\r\nSTATIC_ASSERT(is_nothrow_destructible_v<shared_timed_mutex>);\r\nSTATIC_ASSERT(is_nothrow_destructible_v<shared_lock<shared_mutex>>);\r\nSTATIC_ASSERT(is_nothrow_destructible_v<shared_lock<shared_timed_mutex>>);\r\nSTATIC_ASSERT(is_nothrow_destructible_v<condition_variable>);\r\n\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<mutex>); // N4928 [thread.mutex.class]\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<recursive_mutex>); // strengthened\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<timed_mutex>); // strengthened\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<recursive_timed_mutex>); // strengthened\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<shared_mutex>); // strengthened\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<shared_timed_mutex>); // strengthened\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<shared_lock<shared_mutex>>); // N4928 [thread.lock.shared.cons]/1\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<shared_lock<shared_timed_mutex>>); // N4928 [thread.lock.shared.cons]/1\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<condition_variable>); // strengthened\r\n\r\nSTATIC_ASSERT(is_nothrow_constructible_v<shared_lock<shared_mutex>, shared_mutex&, adopt_lock_t>); // strengthened\r\nSTATIC_ASSERT(\r\n    is_nothrow_constructible_v<shared_lock<shared_mutex>, shared_mutex&, const adopt_lock_t&>); // strengthened\r\nSTATIC_ASSERT(\r\n    is_nothrow_constructible_v<shared_lock<shared_timed_mutex>, shared_timed_mutex&, adopt_lock_t>); // strengthened\r\nSTATIC_ASSERT(is_nothrow_constructible_v<shared_lock<shared_timed_mutex>, shared_timed_mutex&,\r\n    const adopt_lock_t&>); // strengthened\r\n\r\n// Also test strengthened exception specification for native_handle().\r\nSTATIC_ASSERT(noexcept(declval<thread&>().native_handle()));\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(noexcept(declval<jthread&>().native_handle()));\r\n#endif // _HAS_CXX20\r\nSTATIC_ASSERT(noexcept(declval<shared_mutex&>().native_handle()));\r\n\r\n// Also test mandatory and strengthened exception specification for try_lock().\r\nSTATIC_ASSERT(noexcept(declval<mutex&>().try_lock())); // strengthened\r\nSTATIC_ASSERT(noexcept(declval<recursive_mutex&>().try_lock())); // N4928 [thread.mutex.recursive]\r\nSTATIC_ASSERT(noexcept(declval<timed_mutex&>().try_lock())); // strengthened\r\nSTATIC_ASSERT(noexcept(declval<recursive_timed_mutex&>().try_lock())); // N4928 [thread.timedmutex.recursive]\r\nSTATIC_ASSERT(noexcept(declval<shared_mutex&>().try_lock())); // strengthened\r\n\r\nvoid join_and_clear(vector<thread>& threads) {\r\n    for (auto& t : threads) {\r\n        t.join();\r\n    }\r\n\r\n    threads.clear();\r\n}\r\n\r\ntemplate <typename Mutex>\r\nvoid test_one_writer() {\r\n    // One simultaneous writer.\r\n    atomic<int> atom(-1);\r\n    Mutex mut;\r\n    vector<thread> threads;\r\n\r\n    for (int i = 0; i < 4; ++i) {\r\n        threads.emplace_back([&atom, &mut] {\r\n            while (atom == -1) {\r\n            }\r\n            lock_guard<Mutex> ExclusiveLock(mut);\r\n            const int val = ++atom;\r\n            this_thread::sleep_for(25ms); // Not a timing assumption.\r\n            assert(atom == val);\r\n        });\r\n    }\r\n\r\n    assert(atom.exchange(0) == -1);\r\n    join_and_clear(threads);\r\n    assert(atom == 4);\r\n}\r\n\r\ntemplate <typename Mutex>\r\nvoid test_multiple_readers() {\r\n    // Many simultaneous readers.\r\n    atomic<int> atom(-1);\r\n    Mutex mut;\r\n    vector<thread> threads;\r\n\r\n    for (int i = 0; i < 4; ++i) {\r\n        threads.emplace_back([&atom, &mut] {\r\n            while (atom == -1) {\r\n            }\r\n            shared_lock<Mutex> SharedLock(mut);\r\n            ++atom;\r\n            while (atom < 4) {\r\n            }\r\n        });\r\n    }\r\n\r\n    assert(atom.exchange(0) == -1);\r\n    join_and_clear(threads);\r\n    assert(atom == 4);\r\n}\r\n\r\ntemplate <typename Mutex>\r\nvoid test_writer_blocking_readers() {\r\n    // One writer blocking many readers.\r\n    atomic<int> atom(-4);\r\n    Mutex mut;\r\n    vector<thread> threads;\r\n\r\n    threads.emplace_back([&atom, &mut] {\r\n        while (atom < 0) {\r\n        }\r\n        lock_guard<Mutex> ExclusiveLock(mut);\r\n        assert(atom.exchange(1000) == 0);\r\n        this_thread::sleep_for(50ms); // Not a timing assumption.\r\n        assert(atom.exchange(1729) == 1000);\r\n    });\r\n\r\n    for (int i = 0; i < 4; ++i) {\r\n        threads.emplace_back([&atom, &mut] {\r\n            ++atom;\r\n            while (atom < 1000) {\r\n            }\r\n            shared_lock<Mutex> SharedLock(mut);\r\n            assert(atom == 1729);\r\n        });\r\n    }\r\n\r\n    join_and_clear(threads);\r\n    assert(atom == 1729);\r\n}\r\n\r\ntemplate <typename Mutex>\r\nvoid test_readers_blocking_writer() {\r\n    // Many readers blocking one writer.\r\n    atomic<int> atom(-5);\r\n    Mutex mut;\r\n    vector<thread> threads;\r\n\r\n    for (int i = 0; i < 4; ++i) {\r\n        threads.emplace_back([&atom, &mut] {\r\n            shared_lock<Mutex> SharedLock(mut);\r\n            ++atom;\r\n            while (atom < 0) {\r\n            }\r\n            this_thread::sleep_for(50ms); // Not a timing assumption.\r\n            atom += 10;\r\n        });\r\n    }\r\n\r\n    threads.emplace_back([&atom, &mut] {\r\n        ++atom;\r\n        while (atom < 0) {\r\n        }\r\n        lock_guard<Mutex> ExclusiveLock(mut);\r\n        assert(atom == 40);\r\n    });\r\n\r\n    join_and_clear(threads);\r\n    assert(atom == 40);\r\n}\r\n\r\ntemplate <typename Mutex>\r\nvoid test_try_lock_and_try_lock_shared() {\r\n    // Test try_lock() and try_lock_shared().\r\n    Mutex mut;\r\n\r\n    {\r\n        unique_lock<Mutex> MainExclusive(mut, try_to_lock);\r\n        assert(MainExclusive.owns_lock());\r\n\r\n        thread t([&mut] {\r\n            {\r\n                unique_lock<Mutex> ExclusiveLock(mut, try_to_lock);\r\n                assert(!ExclusiveLock.owns_lock());\r\n            }\r\n\r\n            {\r\n                shared_lock<Mutex> SharedLock(mut, try_to_lock);\r\n                assert(!SharedLock.owns_lock());\r\n            }\r\n        });\r\n\r\n        t.join();\r\n    }\r\n\r\n    {\r\n        shared_lock<Mutex> MainShared(mut, try_to_lock);\r\n        assert(MainShared.owns_lock());\r\n\r\n        thread t([&mut] {\r\n            {\r\n                unique_lock<Mutex> ExclusiveLock(mut, try_to_lock);\r\n                assert(!ExclusiveLock.owns_lock());\r\n            }\r\n\r\n            {\r\n                shared_lock<Mutex> SharedLock(mut, try_to_lock);\r\n                assert(SharedLock.owns_lock());\r\n            }\r\n        });\r\n\r\n        t.join();\r\n    }\r\n}\r\n\r\nvoid test_timed_behavior() {\r\n    { // Test try_lock_for() and try_lock_shared_for(). No timing assumptions.\r\n        shared_timed_mutex stm;\r\n\r\n        {\r\n            unique_lock<shared_timed_mutex> MainExclusive(stm, 25ms);\r\n            assert(MainExclusive.owns_lock());\r\n\r\n            thread t([&stm] {\r\n                {\r\n                    unique_lock<shared_timed_mutex> ExclusiveLock(stm, 25ms);\r\n                    assert(!ExclusiveLock.owns_lock());\r\n                }\r\n\r\n                {\r\n                    shared_lock<shared_timed_mutex> SharedLock(stm, 25ms);\r\n                    assert(!SharedLock.owns_lock());\r\n                }\r\n            });\r\n\r\n            t.join();\r\n        }\r\n\r\n        {\r\n            shared_lock<shared_timed_mutex> MainShared(stm, 25ms);\r\n            assert(MainShared.owns_lock());\r\n\r\n            thread t([&stm] {\r\n                {\r\n                    unique_lock<shared_timed_mutex> ExclusiveLock(stm, 25ms);\r\n                    assert(!ExclusiveLock.owns_lock());\r\n                }\r\n\r\n                {\r\n                    shared_lock<shared_timed_mutex> SharedLock(stm, 25ms);\r\n                    assert(SharedLock.owns_lock());\r\n                }\r\n            });\r\n\r\n            t.join();\r\n        }\r\n    }\r\n\r\n    { // Test delayed try_lock_for() success. GENEROUS timing assumptions.\r\n        atomic<int> atom(-5);\r\n        shared_timed_mutex stm;\r\n        vector<thread> threads;\r\n\r\n        shared_lock<shared_timed_mutex> MainShared(stm);\r\n\r\n        for (int i = 0; i < 4; ++i) {\r\n            threads.emplace_back([&atom, &stm] {\r\n                ++atom;\r\n                while (atom < 0) {\r\n                }\r\n                unique_lock<shared_timed_mutex> ExclusiveLock(stm, 1min);\r\n                assert(ExclusiveLock.owns_lock());\r\n                const int val = (atom += 100);\r\n                this_thread::sleep_for(25ms);\r\n                assert(atom == val);\r\n            });\r\n        }\r\n\r\n        ++atom;\r\n        while (atom < 0) {\r\n        }\r\n        this_thread::sleep_for(50ms);\r\n        MainShared.unlock();\r\n        join_and_clear(threads);\r\n        assert(atom == 400);\r\n    }\r\n\r\n    { // Test delayed try_lock_shared_for() success. GENEROUS timing assumptions.\r\n        atomic<int> atom(-5);\r\n        shared_timed_mutex stm;\r\n        vector<thread> threads;\r\n\r\n        unique_lock<shared_timed_mutex> MainExclusive(stm);\r\n\r\n        for (int i = 0; i < 4; ++i) {\r\n            threads.emplace_back([&atom, &stm] {\r\n                ++atom;\r\n                while (atom < 0) {\r\n                }\r\n                shared_lock<shared_timed_mutex> SharedLock(stm, 1min);\r\n                assert(SharedLock.owns_lock());\r\n                atom += 11;\r\n                while (atom < 44) {\r\n                }\r\n            });\r\n        }\r\n\r\n        ++atom;\r\n        while (atom < 0) {\r\n        }\r\n        this_thread::sleep_for(50ms);\r\n        MainExclusive.unlock();\r\n        join_and_clear(threads);\r\n        assert(atom == 44);\r\n    }\r\n\r\n    { // THE GRAND FINALE: If try_lock_for() gives up due to stubborn readers,\r\n      // it needs to deliver notifications. No timing assumptions.\r\n        atomic<bool> launch_readers(false);\r\n        shared_timed_mutex stm;\r\n        vector<thread> threads;\r\n\r\n        shared_lock<shared_timed_mutex> MainShared(stm);\r\n\r\n        threads.emplace_back([&launch_readers, &stm] {\r\n            unique_lock<shared_timed_mutex> ExclusiveLock(stm, 100ms);\r\n            assert(!ExclusiveLock.owns_lock());\r\n            launch_readers = true;\r\n        });\r\n\r\n        threads.emplace_back([&launch_readers, &stm] {\r\n            while (!launch_readers) {\r\n                shared_lock<shared_timed_mutex> SharedLock(stm, try_to_lock);\r\n\r\n                if (!SharedLock.owns_lock()) {\r\n                    launch_readers = true;\r\n                }\r\n            }\r\n        });\r\n\r\n        while (!launch_readers) {\r\n        }\r\n\r\n        atomic<int> readers(0);\r\n\r\n        for (int i = 0; i < 4; ++i) {\r\n            threads.emplace_back([&stm, &readers] {\r\n                shared_lock<shared_timed_mutex> SharedLock(stm);\r\n                ++readers;\r\n                while (readers < 4) {\r\n                }\r\n            });\r\n        }\r\n\r\n        join_and_clear(threads);\r\n        assert(readers == 4);\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_one_writer<shared_mutex>();\r\n    test_multiple_readers<shared_mutex>();\r\n    test_writer_blocking_readers<shared_mutex>();\r\n    test_readers_blocking_writer<shared_mutex>();\r\n    test_try_lock_and_try_lock_shared<shared_mutex>();\r\n\r\n    test_one_writer<shared_timed_mutex>();\r\n    test_multiple_readers<shared_timed_mutex>();\r\n    test_writer_blocking_readers<shared_timed_mutex>();\r\n    test_readers_blocking_writer<shared_timed_mutex>();\r\n    test_try_lock_and_try_lock_shared<shared_timed_mutex>();\r\n\r\n    test_timed_behavior();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1158803_regex_thread_safety/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\fast_no_asan_matrix.lst # TRANSITION, VSO-1886547\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1158803_regex_thread_safety/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <atomic>\r\n#include <cassert>\r\n#include <regex>\r\n#include <thread>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nconst int REPEATS = 50; // Repeat the whole test this many times.\r\nconst int N       = 4; // Spin up N matching threads and N copying threads.\r\nconst int COPIES  = 500000; // Each copying thread performs this many copies.\r\n\r\nint main() {\r\n    atomic<bool> atom_success(true);\r\n\r\n    for (int repeat = 0; repeat < REPEATS; ++repeat) {\r\n        vector<thread> threads;\r\n        atomic<int> atom_copiers(N);\r\n        const regex r(\"a+b+c+\");\r\n\r\n        for (int i = 0; i < N; ++i) {\r\n            threads.emplace_back([&atom_copiers, &r, &atom_success] {\r\n                while (atom_copiers > 0) {\r\n                    const regex dupe(r);\r\n\r\n                    if (!regex_match(\"aaabbbccc\", dupe)) {\r\n                        atom_success = false;\r\n                    }\r\n                }\r\n            });\r\n        }\r\n\r\n        for (int i = 0; i < N; ++i) {\r\n            threads.emplace_back([&atom_copiers, &r] {\r\n                for (int k = 0; k < COPIES; ++k) {\r\n                    const regex dupe(r);\r\n                }\r\n\r\n                --atom_copiers;\r\n            });\r\n        }\r\n\r\n        for (auto& t : threads) {\r\n            t.join();\r\n        }\r\n    }\r\n\r\n    assert(atom_success);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1180290_filesystem_error_code/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/Dev11_1180290_filesystem_error_code/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <fstream>\r\n#include <iostream>\r\n#include <system_error>\r\n\r\n#if _HAS_CXX17\r\n#include <filesystem>\r\n#endif // _HAS_CXX17\r\n\r\n#include <experimental_filesystem.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\n\r\nvoid assert_success(const error_code& ec) {\r\n    assert(!ec);\r\n}\r\n\r\nvoid assert_failure(const error_code& ec) {\r\n    assert(!!ec);\r\n}\r\n\r\nnamespace test_experimental {\r\n    namespace fs = std::experimental::filesystem;\r\n\r\n    void create_file_containing(const char* const filename, const char* const contents) {\r\n        assert(!fs::exists(filename));\r\n\r\n        ofstream f(filename);\r\n        f << contents << endl;\r\n        f.close();\r\n\r\n        assert(fs::is_regular_file(filename));\r\n    }\r\n\r\n    void run_tests() {\r\n        (void) fs::remove_all(\"DELME_dir\");\r\n        assert(!fs::exists(\"DELME_dir\"));\r\n        assert(fs::create_directory(\"DELME_dir\"));\r\n        assert(fs::is_directory(\"DELME_dir\"));\r\n\r\n        create_file_containing(\"DELME_dir/DELME_file.txt\", \"meow\");\r\n        create_file_containing(\"DELME_dir/DELME_old.txt\", \"disco\");\r\n        create_file_containing(\"DELME_dir/DELME_new.txt\", \"DoYouWantToBuildASnowman\");\r\n\r\n        {\r\n            const auto now = fs::file_time_type::clock::now();\r\n            fs::last_write_time(\"DELME_dir/DELME_old.txt\", now - 1h);\r\n            fs::last_write_time(\"DELME_dir/DELME_new.txt\", now);\r\n            assert(fs::last_write_time(\"DELME_dir/DELME_old.txt\") < fs::last_write_time(\"DELME_dir/DELME_new.txt\"));\r\n        }\r\n\r\n        error_code ec;\r\n\r\n        fs::copy(\"DELME_dir\", \"NONEXISTENT_dir1/NONEXISTENT_dir2\", fs::copy_options::recursive, ec);\r\n        assert_failure(ec);\r\n        assert(!fs::exists(\"NONEXISTENT_dir1\"));\r\n\r\n        assert(!fs::copy_file(\r\n            \"DELME_dir/DELME_file.txt\", \"DELME_dir/DELME_file.txt\", fs::copy_options::skip_existing, ec));\r\n        assert_failure(ec);\r\n        assert(fs::is_regular_file(\"DELME_dir/DELME_file.txt\"));\r\n\r\n        assert(!fs::copy_file(\r\n            \"DELME_dir/DELME_old.txt\", \"DELME_dir/DELME_new.txt\", fs::copy_options::update_existing, ec));\r\n        assert_success(ec);\r\n        assert(fs::file_size(\"DELME_dir/DELME_old.txt\") != fs::file_size(\"DELME_dir/DELME_new.txt\"));\r\n\r\n        assert(\r\n            fs::copy_file(\"DELME_dir/DELME_new.txt\", \"DELME_dir/DELME_old.txt\", fs::copy_options::update_existing, ec));\r\n        assert_success(ec);\r\n        assert(fs::file_size(\"DELME_dir/DELME_old.txt\") == fs::file_size(\"DELME_dir/DELME_new.txt\"));\r\n\r\n        assert(!fs::create_directories(\"DELME_dir/DELME_file.txt/blah/blah/blah\", ec));\r\n        assert_failure(ec);\r\n        assert(fs::is_regular_file(\"DELME_dir/DELME_file.txt\"));\r\n\r\n        assert(!fs::is_empty(\"NONEXISTENT_file.txt\", ec));\r\n        assert_failure(ec);\r\n        assert(!fs::exists(\"NONEXISTENT_file.txt\"));\r\n\r\n        assert(fs::last_write_time(\"NONEXISTENT_file.txt\", ec) == fs::file_time_type::min());\r\n        assert_failure(ec);\r\n        assert(!fs::exists(\"NONEXISTENT_file.txt\"));\r\n\r\n        assert(_putenv_s(\"TMP\", \"NONEXISTENT_dir1\") == 0);\r\n        assert(fs::temp_directory_path(ec) == fs::path());\r\n        assert_failure(ec);\r\n        assert(!fs::exists(\"NONEXISTENT_dir1\"));\r\n\r\n        assert(fs::remove_all(\"DELME_dir\", ec) == 3);\r\n        assert_success(ec);\r\n        assert(!fs::exists(\"DELME_dir\"));\r\n    }\r\n} // namespace test_experimental\r\n\r\n#if _HAS_CXX17\r\nnamespace test_standard {\r\n    void create_file_containing(const char* const filename, const char* const contents) {\r\n        assert(!filesystem::exists(filename));\r\n\r\n        ofstream f(filename);\r\n        f << contents << endl;\r\n        f.close();\r\n\r\n        assert(filesystem::is_regular_file(filename));\r\n    }\r\n\r\n    void run_tests() {\r\n        (void) filesystem::remove_all(\"DELME_dir\");\r\n        assert(!filesystem::exists(\"DELME_dir\"));\r\n        assert(filesystem::create_directory(\"DELME_dir\"));\r\n        assert(filesystem::is_directory(\"DELME_dir\"));\r\n\r\n        create_file_containing(\"DELME_dir/DELME_file.txt\", \"meow\");\r\n        create_file_containing(\"DELME_dir/DELME_old.txt\", \"disco\");\r\n        create_file_containing(\"DELME_dir/DELME_new.txt\", \"DoYouWantToBuildASnowman\");\r\n\r\n        {\r\n            const auto now = filesystem::file_time_type::clock::now();\r\n            filesystem::last_write_time(\"DELME_dir/DELME_old.txt\", now - 1h);\r\n            filesystem::last_write_time(\"DELME_dir/DELME_new.txt\", now);\r\n            assert(filesystem::last_write_time(\"DELME_dir/DELME_old.txt\")\r\n                   < filesystem::last_write_time(\"DELME_dir/DELME_new.txt\"));\r\n        }\r\n\r\n        error_code ec;\r\n\r\n        filesystem::copy(\"DELME_dir\", \"NONEXISTENT_dir1/NONEXISTENT_dir2\", filesystem::copy_options::recursive, ec);\r\n        assert_failure(ec);\r\n        assert(!filesystem::exists(\"NONEXISTENT_dir1\"));\r\n\r\n        assert(!filesystem::copy_file(\r\n            \"DELME_dir/DELME_file.txt\", \"DELME_dir/DELME_file.txt\", filesystem::copy_options::skip_existing, ec));\r\n        assert_failure(ec);\r\n        assert(filesystem::is_regular_file(\"DELME_dir/DELME_file.txt\"));\r\n\r\n        assert(!filesystem::copy_file(\r\n            \"DELME_dir/DELME_old.txt\", \"DELME_dir/DELME_new.txt\", filesystem::copy_options::update_existing, ec));\r\n        assert_success(ec);\r\n        assert(filesystem::file_size(\"DELME_dir/DELME_old.txt\") != filesystem::file_size(\"DELME_dir/DELME_new.txt\"));\r\n\r\n        assert(filesystem::copy_file(\r\n            \"DELME_dir/DELME_new.txt\", \"DELME_dir/DELME_old.txt\", filesystem::copy_options::update_existing, ec));\r\n        assert_success(ec);\r\n        assert(filesystem::file_size(\"DELME_dir/DELME_old.txt\") == filesystem::file_size(\"DELME_dir/DELME_new.txt\"));\r\n\r\n        assert(!filesystem::create_directories(\"DELME_dir/DELME_file.txt/blah/blah/blah\", ec));\r\n        assert_failure(ec);\r\n        assert(filesystem::is_regular_file(\"DELME_dir/DELME_file.txt\"));\r\n\r\n        assert(!filesystem::is_empty(\"NONEXISTENT_file.txt\", ec));\r\n        assert_failure(ec);\r\n        assert(!filesystem::exists(\"NONEXISTENT_file.txt\"));\r\n\r\n        assert(filesystem::last_write_time(\"NONEXISTENT_file.txt\", ec) == filesystem::file_time_type::min());\r\n        assert_failure(ec);\r\n        assert(!filesystem::exists(\"NONEXISTENT_file.txt\"));\r\n\r\n        assert(_putenv_s(\"TMP\", \"NONEXISTENT_dir1\") == 0);\r\n        assert(filesystem::temp_directory_path(ec) == filesystem::path());\r\n        assert_failure(ec);\r\n        assert(!filesystem::exists(\"NONEXISTENT_dir1\"));\r\n\r\n        assert(filesystem::remove_all(\"DELME_dir\", ec) == 4);\r\n        assert_success(ec);\r\n        assert(!filesystem::exists(\"DELME_dir\"));\r\n    }\r\n} // namespace test_standard\r\n#endif // _HAS_CXX17\r\n\r\nint main() {\r\n    test_experimental::run_tests();\r\n\r\n#if _HAS_CXX17\r\n    test_standard::run_tests();\r\n#endif // _HAS_CXX17\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000073_regex_multiline_escape_hatch/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000073_regex_multiline_escape_hatch/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _REGEX_LEGACY_MULTILINE_MODE 1\r\n\r\n#include <cstddef>\r\n#include <cstdio>\r\n#include <regex>\r\n#include <string>\r\n\r\n#include <test_regex_support.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::regex_constants;\r\n\r\nregex_fixture g_regexTester;\r\n\r\nvoid test_VSO_225160_match_bol_flag() {\r\n    // Old tests for caret anchor in default multiline mode\r\n    for (syntax_option_type syntax : {syntax_option_type{}, ECMAScript, basic, grep, extended, egrep, awk}) {\r\n        const test_regex emptyAnchor(&g_regexTester, R\"(^)\", syntax);\r\n        emptyAnchor.should_search_match(\"\", \"\");\r\n        emptyAnchor.should_search_fail(\"\", match_not_bol);\r\n        emptyAnchor.should_search_match(\"\\n\", \"\");\r\n        emptyAnchor.should_search_match(\"\\n\", \"\", match_not_bol);\r\n\r\n        const test_regex beginCd(&g_regexTester, R\"(^cd)\", syntax);\r\n        beginCd.should_search_match(\"ab\\ncdefg\", \"cd\");\r\n        beginCd.should_search_match(\"ab\\ncdefg\", \"cd\", match_not_bol);\r\n\r\n        beginCd.should_search_match(\"cdefg\", \"cd\");\r\n        beginCd.should_search_fail(\"cdefg\", match_not_bol);\r\n        beginCd.should_search_match(\"\\ncdefg\", \"cd\");\r\n        beginCd.should_search_match(\"\\ncdefg\", \"cd\", match_not_bol);\r\n\r\n        beginCd.should_search_fail(\"ab\\nxcdefg\");\r\n        beginCd.should_search_fail(\"ab\\nxcdefg\", match_not_bol);\r\n    }\r\n}\r\n\r\nvoid test_VSO_225160_match_eol_flag() {\r\n    // Old tests for dollar anchor in default multiline mode\r\n    for (syntax_option_type syntax : {syntax_option_type{}, ECMAScript, basic, grep, extended, egrep, awk}) {\r\n        const test_regex emptyAnchor(&g_regexTester, R\"($)\", syntax);\r\n        emptyAnchor.should_search_match(\"\", \"\");\r\n        emptyAnchor.should_search_fail(\"\", match_not_eol);\r\n        emptyAnchor.should_search_match(\"\\n\", \"\");\r\n        emptyAnchor.should_search_match(\"\\n\", \"\", match_not_eol);\r\n\r\n        const test_regex cdEnd(&g_regexTester, R\"(cd$)\", syntax);\r\n        cdEnd.should_search_match(\"abcd\\nefg\", \"cd\");\r\n        cdEnd.should_search_match(\"abcd\\nefg\", \"cd\", match_not_eol);\r\n\r\n        cdEnd.should_search_match(\"abcd\", \"cd\");\r\n        cdEnd.should_search_fail(\"abcd\", match_not_eol);\r\n        cdEnd.should_search_match(\"abcd\\n\", \"cd\");\r\n        cdEnd.should_search_match(\"abcd\\n\", \"cd\", match_not_eol);\r\n\r\n        cdEnd.should_search_fail(\"abcdx\\nefg\");\r\n        cdEnd.should_search_fail(\"abcdx\\nefg\", match_not_eol);\r\n    }\r\n}\r\n\r\nvoid test_gh_73() {\r\n    for (syntax_option_type syntax : {syntax_option_type{}, ECMAScript, basic, grep, extended, egrep, awk}) {\r\n        {\r\n            test_regex a_anchored_on_both_sides(&g_regexTester, \"^a$\", syntax);\r\n            a_anchored_on_both_sides.should_search_match(\"a\", \"a\");\r\n            a_anchored_on_both_sides.should_search_match(\"b\\na\", \"a\");\r\n            a_anchored_on_both_sides.should_search_match(\"a\\nb\", \"a\");\r\n            a_anchored_on_both_sides.should_search_fail(\"a\\nb\", match_not_bol);\r\n            a_anchored_on_both_sides.should_search_fail(\"b\\na\", match_not_eol);\r\n        }\r\n\r\n        {\r\n            test_regex a_anchored_front(&g_regexTester, \"^a\", syntax);\r\n            a_anchored_front.should_search_match(\"a\", \"a\");\r\n            a_anchored_front.should_search_match(\"a\\n\", \"a\");\r\n            a_anchored_front.should_search_match(\"a\\nb\", \"a\");\r\n            a_anchored_front.should_search_match(\"b\\na\", \"a\");\r\n            a_anchored_front.should_search_match(\"\\na\", \"a\");\r\n            a_anchored_front.should_search_fail(\"a\", match_not_bol);\r\n            a_anchored_front.should_search_match(\"\\na\", \"a\", match_not_bol);\r\n            a_anchored_front.should_search_match(\"b\\na\", \"a\", match_not_bol);\r\n        }\r\n\r\n        {\r\n            test_regex a_anchored_back(&g_regexTester, \"a$\", syntax);\r\n            a_anchored_back.should_search_match(\"a\", \"a\");\r\n            a_anchored_back.should_search_match(\"\\na\", \"a\");\r\n            a_anchored_back.should_search_match(\"b\\na\", \"a\");\r\n            a_anchored_back.should_search_match(\"a\\nb\", \"a\");\r\n            a_anchored_back.should_search_match(\"a\\n\", \"a\");\r\n            a_anchored_back.should_search_fail(\"a\", match_not_eol);\r\n            a_anchored_back.should_search_match(\"a\\n\", \"a\", match_not_eol);\r\n            a_anchored_back.should_search_match(\"a\\nb\", \"a\", match_not_eol);\r\n        }\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_VSO_225160_match_bol_flag();\r\n    test_VSO_225160_match_eol_flag();\r\n    test_gh_73();\r\n\r\n    return g_regexTester.result();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000140_adl_proof_comparison/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000140_adl_proof_comparison/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n#include <cstddef>\r\n#include <functional>\r\n#include <iterator>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#if _HAS_CXX17\r\n#include <optional>\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n#include <ranges>\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n#include <expected>\r\n#endif // _HAS_CXX23\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nstruct tagged_bool_like {\r\n    bool val_;\r\n    constexpr operator bool() const noexcept {\r\n        return val_;\r\n    }\r\n};\r\n\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\n\r\nusing validating_bool_like = tagged_bool_like<holder<incomplete>>;\r\n\r\nconstexpr holder<incomplete>* placeholder             = nullptr;\r\nconstexpr holder<incomplete>* const* placeholder_addr = &placeholder;\r\n\r\nstruct test_comparable {\r\n    friend constexpr validating_bool_like operator==(const test_comparable&, const test_comparable&) noexcept {\r\n        return {true};\r\n    }\r\n    friend constexpr validating_bool_like operator!=(const test_comparable&, const test_comparable&) noexcept {\r\n        return {false};\r\n    }\r\n    friend constexpr validating_bool_like operator<(const test_comparable&, const test_comparable&) noexcept {\r\n        return {false};\r\n    }\r\n    friend constexpr validating_bool_like operator>(const test_comparable&, const test_comparable&) noexcept {\r\n        return {false};\r\n    }\r\n    friend constexpr validating_bool_like operator<=(const test_comparable&, const test_comparable&) noexcept {\r\n        return {true};\r\n    }\r\n    friend constexpr validating_bool_like operator>=(const test_comparable&, const test_comparable&) noexcept {\r\n        return {true};\r\n    }\r\n};\r\n\r\ntemplate <class T>\r\nstruct validating_iterator_provider {\r\n    struct iterator;\r\n};\r\n\r\ntemplate <class, class = void>\r\nconstexpr bool is_validating_iterator = false;\r\ntemplate <class I>\r\nconstexpr bool is_validating_iterator<I, void_t<typename I::reference>> =\r\n    is_same_v<I, typename validating_iterator_provider<remove_reference_t<typename I::reference>>::iterator>;\r\n\r\ntemplate <class T>\r\nstruct validating_iterator_provider<T>::iterator {\r\n    using value_type        = remove_cv_t<T>;\r\n    using pointer           = T*;\r\n    using reference         = T&;\r\n    using difference_type   = ptrdiff_t;\r\n    using iterator_category = random_access_iterator_tag;\r\n#if _HAS_CXX20\r\n    using iterator_concept = contiguous_iterator_tag;\r\n#endif // _HAS_CXX20\r\n\r\n    constexpr T& operator*() const noexcept {\r\n        return *ptr_;\r\n    }\r\n\r\n    constexpr T* operator->() const noexcept {\r\n        return ptr_;\r\n    }\r\n\r\n    constexpr T& operator[](const ptrdiff_t n) const noexcept {\r\n        return ptr_[n];\r\n    }\r\n\r\n    constexpr iterator& operator++() noexcept {\r\n        ++ptr_;\r\n        return *this;\r\n    }\r\n    constexpr iterator operator++(int) noexcept {\r\n        auto old = *this;\r\n        ++*this;\r\n        return old;\r\n    }\r\n\r\n    constexpr iterator& operator--() noexcept {\r\n        --ptr_;\r\n        return *this;\r\n    }\r\n    constexpr iterator operator--(int) noexcept {\r\n        auto old = *this;\r\n        --*this;\r\n        return old;\r\n    }\r\n\r\n    constexpr iterator& operator+=(const ptrdiff_t n) noexcept {\r\n        ptr_ += n;\r\n        return *this;\r\n    }\r\n\r\n    constexpr iterator& operator-=(const ptrdiff_t n) noexcept {\r\n        ptr_ -= n;\r\n        return *this;\r\n    }\r\n\r\n    friend constexpr iterator operator+(const iterator i, const ptrdiff_t n) noexcept {\r\n        return {i.ptr_ + n};\r\n    }\r\n    friend constexpr iterator operator+(const ptrdiff_t n, const iterator i) noexcept {\r\n        return {i.ptr_ + n};\r\n    }\r\n\r\n    friend constexpr ptrdiff_t operator-(const iterator i, const iterator j) noexcept {\r\n        return i.ptr_ - j.ptr_;\r\n    }\r\n    friend constexpr iterator operator-(const iterator i, const ptrdiff_t n) noexcept {\r\n        return iterator{i.ptr_ - n};\r\n    }\r\n\r\n    template <class OtherIter, enable_if_t<is_validating_iterator<OtherIter>, int> = 0>\r\n    friend constexpr auto operator==(iterator i, OtherIter j) noexcept //\r\n        -> decltype(pointer{} == typename OtherIter::pointer{} ? placeholder_addr : nullptr) {\r\n        return i.operator->() == j.operator->() ? placeholder_addr : nullptr;\r\n    }\r\n    template <class OtherIter, enable_if_t<is_validating_iterator<OtherIter>, int> = 0>\r\n    friend constexpr auto operator!=(iterator i, OtherIter j) noexcept //\r\n        -> decltype(pointer{} != typename OtherIter::pointer{} ? placeholder_addr : nullptr) {\r\n        return i.operator->() != j.operator->() ? placeholder_addr : nullptr;\r\n    }\r\n\r\n    template <class OtherIter, enable_if_t<is_validating_iterator<OtherIter>, int> = 0>\r\n    friend constexpr auto operator<(iterator i, OtherIter j) noexcept //\r\n        -> decltype(pointer{} < typename OtherIter::pointer{} ? placeholder_addr : nullptr) {\r\n        return i.operator->() < j.operator->() ? placeholder_addr : nullptr;\r\n    }\r\n    template <class OtherIter, enable_if_t<is_validating_iterator<OtherIter>, int> = 0>\r\n    friend constexpr auto operator>(iterator i, OtherIter j) noexcept //\r\n        -> decltype(pointer{} > typename OtherIter::pointer{} ? placeholder_addr : nullptr) {\r\n        return i.operator->() > j.operator->() ? placeholder_addr : nullptr;\r\n    }\r\n    template <class OtherIter, enable_if_t<is_validating_iterator<OtherIter>, int> = 0>\r\n    friend constexpr auto operator<=(iterator i, OtherIter j) noexcept //\r\n        -> decltype(pointer{} <= typename OtherIter::pointer{} ? placeholder_addr : nullptr) {\r\n        return i.operator->() <= j.operator->() ? placeholder_addr : nullptr;\r\n    }\r\n    template <class OtherIter, enable_if_t<is_validating_iterator<OtherIter>, int> = 0>\r\n    friend constexpr auto operator>=(iterator i, OtherIter j) noexcept //\r\n        -> decltype(pointer{} >= typename OtherIter::pointer{} ? placeholder_addr : nullptr) {\r\n        return i.operator->() >= j.operator->() ? placeholder_addr : nullptr;\r\n    }\r\n\r\n    template <class OtherIter, enable_if_t<!is_same_v<OtherIter, iterator> //\r\n                                               && is_validating_iterator<OtherIter> //\r\n                                               && is_convertible_v<T*, typename OtherIter::pointer>,\r\n                                   int> = 0>\r\n    constexpr operator OtherIter() const noexcept {\r\n        return {ptr_};\r\n    }\r\n\r\n    T* ptr_;\r\n};\r\n\r\nvoid test_adl_proof_legacy_comparison_functors() {\r\n    (void) equal_to<test_comparable>{}(test_comparable{}, test_comparable{});\r\n    (void) not_equal_to<test_comparable>{}(test_comparable{}, test_comparable{});\r\n    (void) less<test_comparable>{}(test_comparable{}, test_comparable{});\r\n    (void) greater<test_comparable>{}(test_comparable{}, test_comparable{});\r\n    (void) less_equal<test_comparable>{}(test_comparable{}, test_comparable{});\r\n    (void) greater_equal<test_comparable>{}(test_comparable{}, test_comparable{});\r\n}\r\n\r\ntemplate <class L, class R>\r\nvoid test_adl_proof_comparison() {\r\n    L l{};\r\n    R r{};\r\n\r\n    (void) (l == r);\r\n    (void) (l != r);\r\n    (void) (l < r);\r\n    (void) (l > r);\r\n    (void) (l <= r);\r\n    (void) (l >= r);\r\n}\r\n\r\nvoid test_adl_proof_reverse_iterator_comparison() {\r\n    using validating_iter = validating_iterator_provider<holder<incomplete>*>::iterator;\r\n    holder<incomplete>* p{};\r\n\r\n    reverse_iterator<validating_iter> rit{validating_iter{&p + 1}};\r\n    (void) rit.operator->();\r\n    (void) rit[0];\r\n\r\n    using I = reverse_iterator<validating_iterator_provider<int>::iterator>;\r\n    using J = reverse_iterator<validating_iterator_provider<const int>::iterator>;\r\n\r\n    test_adl_proof_comparison<I, J>();\r\n    test_adl_proof_comparison<J, I>();\r\n}\r\n\r\nvoid test_adl_proof_move_iterator_comparison() {\r\n    using I = move_iterator<validating_iterator_provider<int>::iterator>;\r\n    using J = move_iterator<validating_iterator_provider<const int>::iterator>;\r\n\r\n    test_adl_proof_comparison<I, J>();\r\n    test_adl_proof_comparison<J, I>();\r\n\r\n#if _HAS_CXX20\r\n    I i{};\r\n    move_sentinel<validating_iterator_provider<int>::iterator> s{};\r\n\r\n    (void) (i == s);\r\n    (void) (i != s);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\n#if _HAS_CXX17\r\nvoid test_adl_proof_optional_comparison() {\r\n    using V = test_comparable;\r\n    using O = optional<test_comparable>;\r\n\r\n    test_adl_proof_comparison<O, O>();\r\n    test_adl_proof_comparison<O, V>();\r\n    test_adl_proof_comparison<V, O>();\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\nvoid test_adl_proof_expected_comparison() {\r\n    expected<test_comparable, test_comparable> ex;\r\n    (void) (ex == ex);\r\n    (void) (ex != ex);\r\n\r\n    expected<void, test_comparable> vex;\r\n    (void) (vex == vex);\r\n    (void) (vex != vex);\r\n\r\n    unexpected<test_comparable> unex{test_comparable{}};\r\n    (void) (unex == unex);\r\n    (void) (unex != unex);\r\n}\r\n\r\nvoid test_adl_proof_basic_const_iterator_comparison() {\r\n    using I = validating_iterator_provider<int>::iterator;\r\n    using J = validating_iterator_provider<const int>::iterator;\r\n\r\n    using CI = basic_const_iterator<validating_iterator_provider<int>::iterator>;\r\n    using CJ = basic_const_iterator<validating_iterator_provider<const int>::iterator>;\r\n\r\n    test_adl_proof_comparison<CI, I>();\r\n    test_adl_proof_comparison<CI, J>();\r\n    test_adl_proof_comparison<CI, CI>();\r\n    test_adl_proof_comparison<CI, CJ>();\r\n\r\n    test_adl_proof_comparison<CJ, I>();\r\n    test_adl_proof_comparison<CJ, J>();\r\n    test_adl_proof_comparison<CJ, CI>();\r\n    test_adl_proof_comparison<CJ, CJ>();\r\n\r\n    test_adl_proof_comparison<I, CI>();\r\n    test_adl_proof_comparison<J, CI>();\r\n\r\n    test_adl_proof_comparison<I, CJ>();\r\n    test_adl_proof_comparison<J, CJ>();\r\n}\r\n#endif // _HAS_CXX23\r\n\r\n#endif // ^^^ no workaround ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_000140_adl_proof_construction/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000140_adl_proof_construction/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n#include <functional>\r\n#include <future>\r\n#include <memory>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <valarray>\r\n\r\n#if _HAS_CXX17\r\n#include <optional>\r\n#endif // _HAS_CXX17\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nstruct adl_proof_allocator_provider {\r\n    struct alloc;\r\n};\r\n\r\n// adl_proof_allocator<T> is equality-comparable even if T is ADL-incompatible.\r\ntemplate <class T>\r\nusing adl_proof_allocator = typename adl_proof_allocator_provider<T>::alloc;\r\n\r\ntemplate <class, class = void>\r\nconstexpr bool is_adl_proof_allocator = false;\r\n\r\ntemplate <class Alloc>\r\nconstexpr bool\r\n    is_adl_proof_allocator<Alloc, void_t<typename adl_proof_allocator_provider<typename Alloc::value_type>::alloc>> =\r\n        is_same_v<typename adl_proof_allocator_provider<typename Alloc::value_type>::alloc, Alloc>;\r\n\r\ntemplate <class T>\r\nstruct adl_proof_allocator_provider<T>::alloc {\r\n    using value_type = T;\r\n\r\n    template <class U>\r\n    struct rebind {\r\n        using other = typename adl_proof_allocator_provider<U>::alloc;\r\n    };\r\n\r\n    alloc() = default;\r\n    template <class OtherAlloc, enable_if_t<is_adl_proof_allocator<OtherAlloc>, int> = 0>\r\n    constexpr alloc(const OtherAlloc&) noexcept {}\r\n\r\n    T* allocate(const size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    allocation_result<T*> allocate_at_least(const size_t n) {\r\n        return allocator<T>{}.allocate_at_least(n);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    void deallocate(T* const p, const size_t n) {\r\n        return allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class OtherAlloc, enable_if_t<is_adl_proof_allocator<OtherAlloc>, int> = 0>\r\n    friend constexpr bool operator==(const alloc&, const OtherAlloc&) noexcept {\r\n        return true;\r\n    }\r\n#if !_HAS_CXX20\r\n    template <class OtherAlloc, enable_if_t<is_adl_proof_allocator<OtherAlloc>, int> = 0>\r\n    friend constexpr bool operator!=(const alloc&, const OtherAlloc&) noexcept {\r\n        return false;\r\n    }\r\n#endif // !_HAS_CXX20\r\n};\r\n\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\n\r\ntemplate <class Tag>\r\nstruct tagged_identity {\r\n    template <class U>\r\n    constexpr U&& operator()(U&& u) const noexcept {\r\n        return std::forward<U>(u);\r\n    }\r\n};\r\n\r\ntemplate <class Tag>\r\nstruct tagged_large_identity {\r\n    template <class U>\r\n    constexpr U&& operator()(U&& u) const noexcept {\r\n        return std::forward<U>(u);\r\n    }\r\n\r\n    alignas(64) unsigned char unused[64]{};\r\n};\r\n\r\nusing validator                 = holder<incomplete>*;\r\nusing validating_identity       = tagged_identity<holder<incomplete>>;\r\nusing validating_large_identity = tagged_large_identity<holder<incomplete>>;\r\n\r\nusing simple_identity       = tagged_identity<void>;\r\nusing simple_large_identity = tagged_large_identity<void>;\r\n\r\nvoid test_function() {\r\n    function<void(validator)>{};\r\n    function<void(validator)>{nullptr};\r\n    function<void(validator)>{simple_identity{}};\r\n    function<void(validator)>{simple_large_identity{}};\r\n\r\n    function<void(int)>{validating_identity{}};\r\n    function<void(int)>{validating_large_identity{}};\r\n\r\n#if !_HAS_CXX17\r\n    function<void(validator)>{allocator_arg, adl_proof_allocator<unsigned char>{}};\r\n    function<void(validator)>{allocator_arg, adl_proof_allocator<unsigned char>{}, nullptr};\r\n    function<void(validator)>{allocator_arg, adl_proof_allocator<unsigned char>{}, simple_identity{}};\r\n    function<void(validator)>{allocator_arg, adl_proof_allocator<unsigned char>{}, simple_large_identity{}};\r\n\r\n    function<void(int)>{allocator_arg, adl_proof_allocator<unsigned char>{}, validating_identity{}};\r\n    function<void(int)>{allocator_arg, adl_proof_allocator<unsigned char>{}, validating_large_identity{}};\r\n#endif // !_HAS_CXX17\r\n}\r\n\r\nvoid test_packaged_task() {\r\n    packaged_task<void(validator)>{};\r\n    packaged_task<void(validator)>{simple_identity{}};\r\n    packaged_task<void(validator)>{simple_large_identity{}};\r\n\r\n    packaged_task<void(int)>{validating_identity{}};\r\n    packaged_task<void(int)>{validating_large_identity{}};\r\n\r\n    packaged_task<void(validator)>{allocator_arg, adl_proof_allocator<unsigned char>{}, simple_identity{}};\r\n    packaged_task<void(validator)>{allocator_arg, adl_proof_allocator<unsigned char>{}, simple_large_identity{}};\r\n\r\n    packaged_task<void(int)>{allocator_arg, adl_proof_allocator<unsigned char>{}, validating_identity{}};\r\n    packaged_task<void(int)>{allocator_arg, adl_proof_allocator<unsigned char>{}, validating_large_identity{}};\r\n}\r\n\r\nvoid test_promise() {\r\n    promise<validator>{};\r\n    promise<validator>{allocator_arg, adl_proof_allocator<unsigned char>{}};\r\n\r\n    promise<validator&>{};\r\n    promise<validator&>{allocator_arg, adl_proof_allocator<unsigned char>{}};\r\n}\r\n\r\nvoid test_valarray() {\r\n    using validator_class = holder<validator>;\r\n\r\n    valarray<validator_class> valarr1(42);\r\n\r\n    validator_class a[1]{};\r\n    valarray<validator_class> valarr2(a, 1);\r\n    valarr2.resize(172, a[0]);\r\n\r\n    valarray<validator_class> valarr3(a[0], 1);\r\n    valarr3 = valarr2[slice{0, 1, 1}];\r\n\r\n    auto valarr4 = valarr1;\r\n    valarr4      = valarr1;\r\n\r\n    auto valarr5 = std::move(valarr2);\r\n    valarr5      = std::move(valarr3);\r\n}\r\n\r\n#if _HAS_CXX17\r\nvoid test_optional() {\r\n    optional<validator> o{};\r\n    o.emplace();\r\n    o = optional<validator>{};\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\nvoid test_move_only_function() {\r\n    move_only_function<void(validator) const>{simple_identity{}};\r\n    move_only_function<void(validator) const>{simple_large_identity{}};\r\n    move_only_function<void(int) const>{validating_identity{}};\r\n    move_only_function<void(int) const>{validating_large_identity{}};\r\n}\r\n#endif // _HAS_CXX23\r\n#endif // ^^^ no workaround ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_000140_adl_proof_views/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000140_adl_proof_views/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n#include <cstddef>\r\n#include <functional>\r\n#include <memory>\r\n#include <ranges>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\n\r\nconstexpr holder<incomplete>* placeholder             = nullptr;\r\nconstexpr holder<incomplete>* const* placeholder_addr = &placeholder;\r\n\r\ntemplate <class T>\r\nstruct validating_iterator_provider {\r\n    struct iterator;\r\n};\r\n\r\ntemplate <class I>\r\nconcept validating_iterator_specialization = requires {\r\n    typename I::reference;\r\n} && same_as<I, typename validating_iterator_provider<remove_reference_t<typename I::reference>>::iterator>;\r\n\r\ntemplate <class T>\r\nstruct validating_iterator_provider<T>::iterator {\r\n    using value_type        = remove_cv_t<T>;\r\n    using pointer           = T*;\r\n    using reference         = T&;\r\n    using difference_type   = ptrdiff_t;\r\n    using iterator_category = random_access_iterator_tag;\r\n    using iterator_concept  = contiguous_iterator_tag;\r\n\r\n    constexpr T& operator*() const noexcept {\r\n        return *ptr_;\r\n    }\r\n\r\n    constexpr T* operator->() const noexcept {\r\n        return ptr_;\r\n    }\r\n\r\n    constexpr T& operator[](const ptrdiff_t n) const noexcept {\r\n        return ptr_[n];\r\n    }\r\n\r\n    constexpr iterator& operator++() noexcept {\r\n        ++ptr_;\r\n        return *this;\r\n    }\r\n    constexpr iterator operator++(int) noexcept {\r\n        auto old = *this;\r\n        ++*this;\r\n        return old;\r\n    }\r\n\r\n    constexpr iterator& operator--() noexcept {\r\n        --ptr_;\r\n        return *this;\r\n    }\r\n    constexpr iterator operator--(int) noexcept {\r\n        auto old = *this;\r\n        --*this;\r\n        return old;\r\n    }\r\n\r\n    constexpr iterator& operator+=(const ptrdiff_t n) noexcept {\r\n        ptr_ += n;\r\n        return *this;\r\n    }\r\n\r\n    constexpr iterator& operator-=(const ptrdiff_t n) noexcept {\r\n        ptr_ -= n;\r\n        return *this;\r\n    }\r\n\r\n    friend constexpr iterator operator+(const iterator i, const ptrdiff_t n) noexcept {\r\n        return {i.ptr_ + n};\r\n    }\r\n    friend constexpr iterator operator+(const ptrdiff_t n, const iterator i) noexcept {\r\n        return {i.ptr_ + n};\r\n    }\r\n\r\n    friend constexpr ptrdiff_t operator-(const iterator i, const iterator j) noexcept {\r\n        return i.ptr_ - j.ptr_;\r\n    }\r\n    friend constexpr iterator operator-(const iterator i, const ptrdiff_t n) noexcept {\r\n        return iterator{i.ptr_ - n};\r\n    }\r\n\r\n    template <validating_iterator_specialization OtherIter>\r\n    friend constexpr decltype(auto) operator==(iterator i, OtherIter j) noexcept\r\n        requires requires { pointer{} == typename OtherIter::pointer{} ? placeholder_addr : nullptr; }\r\n    {\r\n        return i.operator->() == j.operator->() ? placeholder_addr : nullptr;\r\n    }\r\n    template <validating_iterator_specialization OtherIter>\r\n    friend constexpr decltype(auto) operator!=(iterator i, OtherIter j) noexcept\r\n        requires requires { pointer{} != typename OtherIter::pointer{} ? placeholder_addr : nullptr; }\r\n    {\r\n        return i.operator->() != j.operator->() ? placeholder_addr : nullptr;\r\n    }\r\n\r\n    template <validating_iterator_specialization OtherIter>\r\n    friend constexpr decltype(auto) operator<(iterator i, OtherIter j) noexcept\r\n        requires requires { pointer{} < typename OtherIter::pointer{} ? placeholder_addr : nullptr; }\r\n    {\r\n        return i.operator->() < j.operator->() ? placeholder_addr : nullptr;\r\n    }\r\n    template <validating_iterator_specialization OtherIter>\r\n    friend constexpr decltype(auto) operator>(iterator i, OtherIter j) noexcept\r\n        requires requires { pointer{} > typename OtherIter::pointer{} ? placeholder_addr : nullptr; }\r\n    {\r\n        return i.operator->() > j.operator->() ? placeholder_addr : nullptr;\r\n    }\r\n    template <validating_iterator_specialization OtherIter>\r\n    friend constexpr decltype(auto) operator<=(iterator i, OtherIter j)\r\n        requires requires { pointer{} <= typename OtherIter::pointer{} ? placeholder_addr : nullptr; }\r\n    {\r\n        return i.operator->() <= j.operator->() ? placeholder_addr : nullptr;\r\n    }\r\n    template <validating_iterator_specialization OtherIter>\r\n    friend constexpr decltype(auto) operator>=(iterator i, OtherIter j) noexcept\r\n        requires requires { pointer{} >= typename OtherIter::pointer{} ? placeholder_addr : nullptr; }\r\n    {\r\n        return i.operator->() >= j.operator->() ? placeholder_addr : nullptr;\r\n    }\r\n\r\n    template <validating_iterator_specialization OtherIter>\r\n        requires (!is_same_v<OtherIter, iterator>) && convertible_to<T*, typename OtherIter::pointer>\r\n    constexpr operator OtherIter() const noexcept {\r\n        return {ptr_};\r\n    }\r\n\r\n    T* ptr_;\r\n};\r\n\r\nstruct validating_view_for_verification {\r\n    constexpr holder<incomplete>** begin() const noexcept {\r\n        return begin_;\r\n    }\r\n\r\n    constexpr holder<incomplete>** end() const noexcept {\r\n        return end_;\r\n    }\r\n\r\n    holder<incomplete>** begin_;\r\n    holder<incomplete>** end_;\r\n};\r\n\r\ntemplate <>\r\ninline constexpr bool ranges::enable_view<validating_view_for_verification> = true;\r\n\r\ntemplate <>\r\ninline constexpr bool ranges::enable_borrowed_range<validating_view_for_verification> = true;\r\n\r\ntemplate <class Tag>\r\nstruct tagged_ints_view {\r\n    constexpr int* begin() const noexcept {\r\n        return begin_;\r\n    }\r\n\r\n    constexpr int* end() const noexcept {\r\n        return end_;\r\n    }\r\n\r\n    int* begin_;\r\n    int* end_;\r\n};\r\n\r\ntemplate <class Tag>\r\nconstexpr bool ranges::enable_view<tagged_ints_view<Tag>> = true;\r\n\r\ntemplate <class Tag>\r\nconstexpr bool ranges::enable_borrowed_range<tagged_ints_view<Tag>> = true;\r\n\r\nstruct validating_view_to_join_for_verification {\r\n    constexpr const tagged_ints_view<holder<incomplete>>* begin() const noexcept {\r\n        return begin_;\r\n    }\r\n\r\n    constexpr const tagged_ints_view<holder<incomplete>>* end() const noexcept {\r\n        return end_;\r\n    }\r\n\r\n    const tagged_ints_view<holder<incomplete>>* begin_;\r\n    const tagged_ints_view<holder<incomplete>>* end_;\r\n};\r\n\r\ntemplate <>\r\ninline constexpr bool ranges::enable_view<validating_view_to_join_for_verification> = true;\r\n\r\ntemplate <>\r\ninline constexpr bool ranges::enable_borrowed_range<validating_view_to_join_for_verification> = true;\r\n\r\nvoid test_views_verification() {\r\n    constexpr auto simple_truth = [](const auto&) { return true; };\r\n\r\n    holder<incomplete>* varr[1]{};\r\n    const validating_view_for_verification validating_view_val{varr, varr + 1};\r\n\r\n    for (auto&& _ [[maybe_unused]] : validating_view_val | views::filter(simple_truth)) {\r\n    }\r\n\r\n    for (auto&& _ [[maybe_unused]] : validating_view_val | views::transform(simple_truth)) {\r\n    }\r\n\r\n    int iarr[1]{};\r\n    const tagged_ints_view<holder<incomplete>> inner_arr[1]{{iarr, iarr + 1}};\r\n    const validating_view_to_join_for_verification view_to_join{inner_arr, inner_arr + 1};\r\n\r\n    for (auto&& _ [[maybe_unused]] : view_to_join | views::join) {\r\n    }\r\n\r\n    for (auto&& _ [[maybe_unused]] : view_to_join | views::join | views::reverse) {\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    const tagged_ints_view<void> simple_pattern{iarr, iarr + 1};\r\n\r\n    for (auto&& _ [[maybe_unused]] : view_to_join | views::join_with(simple_pattern)) {\r\n    }\r\n#endif // _HAS_CXX23\r\n}\r\n\r\nstruct validating_common_view {\r\n    using iterator = validating_iterator_provider<int>::iterator;\r\n\r\n    constexpr iterator begin() const noexcept {\r\n        return {begin_};\r\n    }\r\n\r\n    constexpr iterator end() const noexcept {\r\n        return {end_};\r\n    }\r\n\r\n    int* begin_;\r\n    int* end_;\r\n};\r\n\r\ntemplate <>\r\ninline constexpr bool ranges::enable_view<validating_common_view> = true;\r\n\r\ntemplate <>\r\ninline constexpr bool ranges::enable_borrowed_range<validating_common_view> = true;\r\n\r\ntemplate <class I>\r\nstruct noncommon_sentinel_for {\r\n    using pointer = iterator_traits<I>::pointer;\r\n\r\n    pointer p_end_;\r\n\r\n    friend constexpr holder<incomplete>* const* operator==(const I i, const noncommon_sentinel_for s) noexcept {\r\n        return to_address(i) == s.p_end_ ? placeholder_addr : nullptr;\r\n    }\r\n    friend constexpr holder<incomplete>* const* operator==(const noncommon_sentinel_for s, const I i) noexcept {\r\n        return to_address(i) == s.p_end_ ? placeholder_addr : nullptr;\r\n    }\r\n    friend constexpr holder<incomplete>* const* operator!=(const I i, const noncommon_sentinel_for s) noexcept {\r\n        return to_address(i) == s.p_end_ ? nullptr : placeholder_addr;\r\n    }\r\n    friend constexpr holder<incomplete>* const* operator!=(const noncommon_sentinel_for s, const I i) noexcept {\r\n        return to_address(i) == s.p_end_ ? nullptr : placeholder_addr;\r\n    }\r\n};\r\n\r\nstruct validating_noncommon_view {\r\n    using iterator = validating_iterator_provider<int>::iterator;\r\n\r\n    constexpr iterator begin() const noexcept {\r\n        return {begin_};\r\n    }\r\n\r\n    constexpr noncommon_sentinel_for<iterator> end() const noexcept {\r\n        return {end_};\r\n    }\r\n\r\n    int* begin_;\r\n    int* end_;\r\n};\r\n\r\ntemplate <>\r\ninline constexpr bool ranges::enable_view<validating_noncommon_view> = true;\r\n\r\ntemplate <>\r\ninline constexpr bool ranges::enable_borrowed_range<validating_noncommon_view> = true;\r\n\r\n\r\nstruct validating_noncommon_to_join_view {\r\n    using iterator = const validating_noncommon_view*;\r\n\r\n    constexpr iterator begin() const noexcept {\r\n        return begin_;\r\n    }\r\n\r\n    constexpr noncommon_sentinel_for<iterator> end() const noexcept {\r\n        return {end_};\r\n    }\r\n\r\n    const validating_noncommon_view* begin_;\r\n    const validating_noncommon_view* end_;\r\n};\r\n\r\ntemplate <>\r\ninline constexpr bool ranges::enable_view<validating_noncommon_to_join_view> = true;\r\n\r\ntemplate <>\r\ninline constexpr bool ranges::enable_borrowed_range<validating_noncommon_to_join_view> = true;\r\n\r\nstruct negation_validating_iterator {\r\n    struct boolean_testable_result {\r\n        constexpr operator bool() const noexcept {\r\n            return val_;\r\n        }\r\n\r\n        constexpr holder<incomplete>* const* operator!() const noexcept {\r\n            return val_ ? placeholder_addr : nullptr;\r\n        }\r\n        bool val_;\r\n    };\r\n\r\n    using value_type        = int;\r\n    using reference         = int&;\r\n    using pointer           = int*;\r\n    using difference_type   = ptrdiff_t;\r\n    using iterator_category = random_access_iterator_tag;\r\n    using iterator_concept  = contiguous_iterator_tag;\r\n\r\n    constexpr int& operator*() const noexcept {\r\n        return *ptr_;\r\n    }\r\n\r\n    constexpr int* operator->() const noexcept {\r\n        return ptr_;\r\n    }\r\n\r\n    constexpr negation_validating_iterator& operator++() noexcept {\r\n        ++ptr_;\r\n        return *this;\r\n    }\r\n    constexpr negation_validating_iterator operator++(int) noexcept {\r\n        auto old = *this;\r\n        ++ptr_;\r\n        return old;\r\n    }\r\n\r\n    constexpr negation_validating_iterator& operator--() noexcept {\r\n        --ptr_;\r\n        return *this;\r\n    }\r\n    constexpr negation_validating_iterator operator--(int) noexcept {\r\n        auto old = *this;\r\n        --ptr_;\r\n        return old;\r\n    }\r\n\r\n    constexpr negation_validating_iterator& operator+=(const ptrdiff_t n) noexcept {\r\n        ptr_ += n;\r\n        return *this;\r\n    }\r\n\r\n    constexpr negation_validating_iterator& operator-=(const ptrdiff_t n) noexcept {\r\n        ptr_ -= n;\r\n        return *this;\r\n    }\r\n\r\n    constexpr int& operator[](const ptrdiff_t n) const noexcept {\r\n        return ptr_[n];\r\n    }\r\n\r\n    friend constexpr negation_validating_iterator operator+(\r\n        const negation_validating_iterator i, const ptrdiff_t n) noexcept {\r\n        return {i.ptr_ + n};\r\n    }\r\n    friend constexpr negation_validating_iterator operator+(\r\n        const ptrdiff_t n, const negation_validating_iterator i) noexcept {\r\n        return {i.ptr_ + n};\r\n    }\r\n    friend constexpr negation_validating_iterator operator-(\r\n        const negation_validating_iterator i, const ptrdiff_t n) noexcept {\r\n        return {i.ptr_ - n};\r\n    }\r\n    friend constexpr ptrdiff_t operator-(\r\n        const negation_validating_iterator i, const negation_validating_iterator j) noexcept {\r\n        return i.ptr_ - j.ptr_;\r\n    }\r\n\r\n    friend constexpr boolean_testable_result operator==(\r\n        const negation_validating_iterator i, const negation_validating_iterator j) noexcept {\r\n        return {i.ptr_ == j.ptr_};\r\n    }\r\n\r\n    friend constexpr boolean_testable_result operator!=(\r\n        const negation_validating_iterator i, const negation_validating_iterator j) noexcept {\r\n        return {i.ptr_ != j.ptr_};\r\n    }\r\n\r\n    friend constexpr boolean_testable_result operator<(\r\n        const negation_validating_iterator i, const negation_validating_iterator j) noexcept {\r\n        return {i.ptr_ < j.ptr_};\r\n    }\r\n\r\n    friend constexpr boolean_testable_result operator>(\r\n        const negation_validating_iterator i, const negation_validating_iterator j) noexcept {\r\n        return {i.ptr_ > j.ptr_};\r\n    }\r\n\r\n    friend constexpr boolean_testable_result operator<=(\r\n        const negation_validating_iterator i, const negation_validating_iterator j) noexcept {\r\n        return {i.ptr_ <= j.ptr_};\r\n    }\r\n\r\n    friend constexpr boolean_testable_result operator>=(\r\n        const negation_validating_iterator i, const negation_validating_iterator j) noexcept {\r\n        return {i.ptr_ >= j.ptr_};\r\n    }\r\n\r\n    int* ptr_;\r\n};\r\n\r\nstruct validating_negation_view {\r\n    constexpr negation_validating_iterator begin() const noexcept {\r\n        return {begin_};\r\n    }\r\n\r\n    constexpr negation_validating_iterator end() const noexcept {\r\n        return {end_};\r\n    }\r\n\r\n    int* begin_;\r\n    int* end_;\r\n};\r\n\r\ntemplate <>\r\ninline constexpr bool ranges::enable_view<validating_negation_view> = true;\r\n\r\ntemplate <>\r\ninline constexpr bool ranges::enable_borrowed_range<validating_negation_view> = true;\r\n\r\ntemplate <class V>\r\nvoid test_adl_proof_random_access_views_comparison(V&& v) {\r\n    auto i = v.begin();\r\n    auto j = v.end();\r\n\r\n    (void) (i == j);\r\n    (void) (i != j);\r\n    (void) (i < j);\r\n    (void) (i > j);\r\n    (void) (i <= j);\r\n    (void) (i >= j);\r\n}\r\n\r\ntemplate <class V>\r\nvoid test_adl_proof_basic_views_comparison(V&& v) {\r\n    auto it = v.begin();\r\n    auto se = v.end();\r\n\r\n    (void) (it == se);\r\n    (void) (it != se);\r\n}\r\n\r\nvoid test_adl_proof_views_comparison() {\r\n    constexpr auto simple_truth = [](const auto&) { return true; };\r\n\r\n    int iarr[1]{};\r\n    const validating_common_view validating_common_view_val{iarr, iarr + 1};\r\n    const validating_noncommon_view validating_noncommon_view_val{iarr, iarr + 1};\r\n    const validating_negation_view validating_negation_view_val{iarr, iarr + 1};\r\n    const validating_noncommon_to_join_view validating_view_to_join{\r\n        &validating_noncommon_view_val, &validating_noncommon_view_val + 1};\r\n\r\n    test_adl_proof_basic_views_comparison(validating_common_view_val | views::filter(simple_truth));\r\n    test_adl_proof_basic_views_comparison(validating_negation_view_val | views::filter(simple_truth));\r\n    test_adl_proof_basic_views_comparison(validating_noncommon_view_val | views::filter(simple_truth));\r\n\r\n    test_adl_proof_basic_views_comparison(validating_view_to_join | views::join);\r\n\r\n    test_adl_proof_basic_views_comparison(validating_common_view_val | views::split(validating_common_view_val));\r\n    test_adl_proof_basic_views_comparison(validating_negation_view_val | views::split(validating_negation_view_val));\r\n    test_adl_proof_basic_views_comparison(validating_noncommon_view_val | views::split(validating_noncommon_view_val));\r\n\r\n    test_adl_proof_basic_views_comparison(validating_common_view_val | views::lazy_split(validating_common_view_val));\r\n    test_adl_proof_basic_views_comparison(\r\n        validating_negation_view_val | views::lazy_split(validating_negation_view_val));\r\n    test_adl_proof_basic_views_comparison(\r\n        validating_noncommon_view_val | views::lazy_split(validating_noncommon_view_val));\r\n\r\n#if _HAS_CXX23\r\n    test_adl_proof_basic_views_comparison(validating_view_to_join | views::join_with(validating_noncommon_view_val));\r\n\r\n    test_adl_proof_random_access_views_comparison(validating_common_view_val | views::enumerate);\r\n    test_adl_proof_random_access_views_comparison(validating_negation_view_val | views::enumerate);\r\n    test_adl_proof_basic_views_comparison(validating_noncommon_view_val | views::enumerate);\r\n\r\n    test_adl_proof_random_access_views_comparison(validating_common_view_val | views::chunk(1));\r\n    test_adl_proof_random_access_views_comparison(validating_negation_view_val | views::chunk(1));\r\n    test_adl_proof_basic_views_comparison(validating_noncommon_view_val | views::chunk(1));\r\n\r\n    test_adl_proof_random_access_views_comparison(validating_common_view_val | views::slide(1));\r\n    test_adl_proof_random_access_views_comparison(validating_negation_view_val | views::slide(1));\r\n    test_adl_proof_basic_views_comparison(validating_noncommon_view_val | views::slide(1));\r\n\r\n    test_adl_proof_basic_views_comparison(validating_common_view_val | views::chunk_by(ranges::equal_to{}));\r\n    test_adl_proof_basic_views_comparison(validating_negation_view_val | views::chunk_by(ranges::equal_to{}));\r\n    test_adl_proof_basic_views_comparison(validating_noncommon_view_val | views::chunk_by(ranges::equal_to{}));\r\n\r\n    test_adl_proof_random_access_views_comparison(validating_common_view_val | views::stride(1));\r\n    test_adl_proof_random_access_views_comparison(validating_negation_view_val | views::stride(1));\r\n    test_adl_proof_basic_views_comparison(validating_noncommon_view_val | views::stride(1));\r\n\r\n    test_adl_proof_random_access_views_comparison(validating_common_view_val | views::adjacent<1>);\r\n    test_adl_proof_random_access_views_comparison(validating_negation_view_val | views::adjacent<1>);\r\n    test_adl_proof_basic_views_comparison(validating_noncommon_view_val | views::adjacent<1>);\r\n#endif // _HAS_CXX23\r\n}\r\n#endif // ^^^ no workaround ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_000177_forbidden_aliasing/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000177_forbidden_aliasing/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <vector>\r\n\r\n#include <test_death.hpp>\r\nusing namespace std;\r\n\r\nvoid test_case_swap_ranges_overlap_1() {\r\n    int arr[8] = {10, 20, 30, 40, 50, 60, 70, 80};\r\n    swap_ranges(arr + 1, arr + 4, arr + 3);\r\n}\r\n\r\nvoid test_case_swap_ranges_overlap_2() {\r\n    int arr[8] = {10, 20, 30, 40, 50, 60, 70, 80};\r\n    swap_ranges(arr + 4, arr + 7, arr + 2);\r\n}\r\n\r\nvoid test_case_vector_assign_front() {\r\n    vector<int> vec{11, 22, 33};\r\n    vec.assign(5, vec.front());\r\n}\r\n\r\nvoid test_case_vector_assign_mid() {\r\n    vector<int> vec{11, 22, 33};\r\n    vec.assign(5, vec[1]);\r\n}\r\n\r\nvoid test_case_vector_assign_back() {\r\n    vector<int> vec{11, 22, 33};\r\n    vec.assign(5, vec.back());\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    exec.add_death_tests({\r\n        test_case_swap_ranges_overlap_1,\r\n        test_case_swap_ranges_overlap_2,\r\n        test_case_vector_assign_front,\r\n        test_case_vector_assign_mid,\r\n        test_case_vector_assign_back,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000178_uniform_int/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000178_uniform_int/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <random>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Generator>\r\nbool basic_test() {\r\n    constexpr auto maximum     = 1ull << 60;\r\n    constexpr auto num_bins    = 20ull; // Don't change this without looking up a new threshold below.\r\n    constexpr auto bin_width   = maximum / num_bins; // except possibly the last bin\r\n    constexpr auto bin_freq    = static_cast<double>(bin_width) / maximum;\r\n    constexpr auto freq_rem    = static_cast<double>(maximum % bin_width) / maximum;\r\n    constexpr double threshold = 31.410; // chi-squared critical value for d.f. = 20 and p = 0.05\r\n\r\n    Generator gen;\r\n    uniform_int_distribution<uint64_t> dist(0, maximum - 1u);\r\n\r\n\r\n    const int N             = 20'000;\r\n    int frequency[num_bins] = {};\r\n    for (int i = 0; i < N; ++i) {\r\n        ++frequency[min(dist(gen) / bin_width, num_bins - 1u)];\r\n    }\r\n\r\n    double chi_squared = 0.0;\r\n    for (unsigned int i = 0; i < num_bins; ++i) {\r\n        const auto expected = (bin_freq + (i == num_bins - 1u ? freq_rem : 0.0)) * N;\r\n        const auto delta    = static_cast<double>(frequency[i] - expected);\r\n        chi_squared += delta * delta / expected;\r\n    }\r\n\r\n    return chi_squared <= threshold;\r\n}\r\n\r\nbool test_modulus_bias() {\r\n    // This test is designed to detect modulus bias. When generating random intergers in [0,s) with a URBG having range\r\n    // [0,R), then R mod s values must be rejected to ensure uniformity. By making (R mod s)/R large, we can introduce a\r\n    // large bias if the rejection is incorrect.\r\n\r\n    constexpr int maximum      = 5; // Don't change this without looking up a new threshold below.\r\n    constexpr double threshold = 11.07; // chi-squared critical value for d.f. = 5 and p = 0.05\r\n    uniform_int_distribution<> rng(0, maximum - 1);\r\n    independent_bits_engine<mt19937, 3, uint32_t> gen;\r\n\r\n    const int N            = 1'000;\r\n    int frequency[maximum] = {};\r\n    for (int i = 0; i < N; ++i) {\r\n        ++frequency[rng(gen)];\r\n    }\r\n\r\n    double chi_squared = 0.0;\r\n    for (int i = 0; i < maximum; ++i) {\r\n        const double expected = static_cast<double>(N) / maximum;\r\n        const double delta    = frequency[i] - expected;\r\n        chi_squared += delta * delta / expected;\r\n    }\r\n\r\n    return chi_squared <= threshold;\r\n}\r\n\r\nint main() {\r\n    // Four cases tested below:\r\n    // (1) URBG provides enough bits to completely fill the underlying type\r\n    // (2) URBG provides enough bits for our upper bound, but not enough to fill the type\r\n    // (3) URBG is called multiple times, but doesn't fill the type\r\n    // (4) URBG is called multiple times and overflows the number of bits in the type\r\n    assert(basic_test<mt19937_64>());\r\n    assert((basic_test<independent_bits_engine<mt19937_64, 61, uint64_t>>()));\r\n    assert((basic_test<independent_bits_engine<mt19937, 31, uint32_t>>()));\r\n    assert((basic_test<independent_bits_engine<mt19937, 25, uint32_t>>()));\r\n\r\n    assert(test_modulus_bias());\r\n\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000342_filebuf_close/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000342_filebuf_close/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <fstream>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    {\r\n        ofstream prepareTestFile(\"test.txt\");\r\n        prepareTestFile << \"ab\";\r\n    }\r\n    fstream f(\"test.txt\");\r\n    f.seekg(1);\r\n    const int res = f.get();\r\n    assert(res == 'b');\r\n    f.putback('b');\r\n    f.putback('a');\r\n    f.close();\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000431_copy_move_family/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000431_copy_move_family/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <iterator>\r\n#include <list>\r\n#include <memory>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#if _HAS_CXX17\r\n#include <string_view>\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#include <span>\r\n#endif // _HAS_CXX20\r\n\r\n#pragma warning(disable : 4242) // conversion from 'X' to 'Y', possible loss of data\r\n#pragma warning(disable : 4244) // conversion from 'X' to 'Y', possible loss of data (Yes, duplicated message.)\r\n#pragma warning(disable : 4365) // conversion from 'X' to 'Y', signed/unsigned mismatch\r\n#pragma warning(disable : 4984) // 'if constexpr' is a C++17 language extension\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nstruct TrivialStruct {\r\n    int i;\r\n\r\n    bool operator==(const TrivialStruct& right) const {\r\n        return i == right.i;\r\n    }\r\n};\r\nSTATIC_ASSERT(is_trivially_copyable_v<TrivialStruct>);\r\nSTATIC_ASSERT(is_trivially_default_constructible_v<TrivialStruct>);\r\n\r\nstruct TriviallyCopyableStruct {\r\n    int i;\r\n    TriviallyCopyableStruct() {}\r\n    TriviallyCopyableStruct(int j) : i(j) {}\r\n\r\n    bool operator==(const TriviallyCopyableStruct& right) const {\r\n        return i == right.i;\r\n    }\r\n};\r\nSTATIC_ASSERT(is_trivially_copyable_v<TriviallyCopyableStruct>);\r\nSTATIC_ASSERT(!is_trivially_default_constructible_v<TriviallyCopyableStruct>);\r\n\r\nstruct TriviallyMovableStruct {\r\n    int i;\r\n    TriviallyMovableStruct() {}\r\n    TriviallyMovableStruct(int j) : i(j) {}\r\n    TriviallyMovableStruct(const TriviallyMovableStruct&)            = delete;\r\n    TriviallyMovableStruct(TriviallyMovableStruct&&)                 = default;\r\n    TriviallyMovableStruct& operator=(const TriviallyMovableStruct&) = delete;\r\n    TriviallyMovableStruct& operator=(TriviallyMovableStruct&&)      = default;\r\n\r\n    bool operator==(const TriviallyMovableStruct& right) const {\r\n        return i == right.i;\r\n    }\r\n};\r\nSTATIC_ASSERT(is_trivially_copyable_v<TriviallyMovableStruct>);\r\nSTATIC_ASSERT(!is_trivially_default_constructible_v<TriviallyMovableStruct>);\r\n\r\nenum int_enum : int {};\r\nenum char_enum : char {};\r\nenum bool_enum : bool { false_e = false, true_e = true };\r\n\r\nconstexpr int_enum operator\"\"_e(unsigned long long value) noexcept {\r\n    return static_cast<int_enum>(value);\r\n}\r\n\r\nconstexpr char_enum operator\"\"_ce(unsigned long long value) noexcept {\r\n    return static_cast<char_enum>(value);\r\n}\r\n\r\nstruct EmptyBase {};\r\n\r\nstruct EmptyDerived : EmptyBase {};\r\n\r\nstruct StatefulBase {\r\n    int i;\r\n\r\n    int get_i() {\r\n        return i;\r\n    }\r\n\r\n    int get_i2() {\r\n        return i * 2;\r\n    }\r\n};\r\n\r\nstruct StatefulDerived : StatefulBase, EmptyBase {\r\n    int get_i3() {\r\n        return i * 3;\r\n    }\r\n};\r\n\r\nstruct StatefulDerived2 : EmptyBase, StatefulBase {};\r\n\r\n#ifdef __cpp_lib_is_pointer_interconvertible\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<EmptyBase, EmptyDerived>);\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<StatefulBase, StatefulDerived>);\r\n#ifndef __EDG__ // TRANSITION, VSO-1849453\r\nSTATIC_ASSERT(!is_pointer_interconvertible_base_of_v<EmptyBase, StatefulDerived>);\r\n#endif // ^^^ no workaround ^^^\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<StatefulBase, StatefulDerived2>);\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<EmptyBase, StatefulDerived2>);\r\n#endif // __cpp_lib_is_pointer_interconvertible\r\n\r\n\r\ntemplate <class CopyFn>\r\nvoid test_algorithms(CopyFn copy_fn) {\r\n\r\n    { // Test ints\r\n        int src[10]      = {5, 7, 3, 4, 6, 4, 7, 1, 9, 5};\r\n        int expected[10] = {5, 7, 3, 4, 6, 4, 7, 1, 9, 5};\r\n        int dst[10]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test int => long\r\n        int src[10]       = {5, 7, 3, 4, 6, 4, 7, 1, 9, 5};\r\n        long expected[10] = {5, 7, 3, 4, 6, 4, 7, 1, 9, 5};\r\n        long dst[10]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test long => unsigned int\r\n        long src[10]              = {5, 7, 3, 4, 6, 4, 7, 1, 9, 5};\r\n        unsigned int expected[10] = {5, 7, 3, 4, 6, 4, 7, 1, 9, 5};\r\n        unsigned int dst[10]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test bool => char\r\n        bool src[7]      = {true, true, true, false, true, false, false};\r\n        char expected[7] = {1, 1, 1, 0, 1, 0, 0};\r\n        char dst[7]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test char => bool\r\n        char src[7]      = {5, 2, 1, 0, static_cast<char>(-1), 0, 0};\r\n        bool expected[7] = {true, true, true, false, true, false, false};\r\n        bool dst[7]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test int => bool\r\n        int src[7]       = {5, 2, 1, 0, -1, 0, 0};\r\n        bool expected[7] = {true, true, true, false, true, false, false};\r\n        bool dst[7]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test int => short\r\n        int src[7]        = {5, 2, 1, 0, -1, 0, 0};\r\n        short expected[7] = {5, 2, 1, 0, -1, 0, 0};\r\n        short dst[7]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test int => unsigned int\r\n        int src[7]               = {5, 2, 1, 0, -1, 0, 0};\r\n        unsigned int expected[7] = {5, 2, 1, 0, static_cast<unsigned int>(-1), 0, 0};\r\n        unsigned int dst[7]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test int_enum => int\r\n        int_enum src[7] = {5_e, 2_e, 1_e, 0_e, 7_e, 0_e, 0_e};\r\n        int expected[7] = {5, 2, 1, 0, 7, 0, 0};\r\n        int dst[7]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test int_enum => unsigned long\r\n        int_enum src[7]           = {5_e, 2_e, 1_e, 0_e, 7_e, 0_e, 0_e};\r\n        unsigned long expected[7] = {5, 2, 1, 0, 7, 0, 0};\r\n        unsigned long dst[7]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test bool_enum => bool\r\n        bool_enum src[7] = {true_e, true_e, true_e, false_e, true_e, false_e, false_e};\r\n        bool expected[7] = {true, true, true, false, true, false, false};\r\n        bool dst[7]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test bool_enum => char\r\n        bool_enum src[7] = {true_e, true_e, true_e, false_e, true_e, false_e, false_e};\r\n        char expected[7] = {1, 1, 1, 0, 1, 0, 0};\r\n        char dst[7]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test char_enum => bool\r\n        char_enum src[7] = {5_ce, 2_ce, 1_ce, 0_ce, 255_ce, 0_ce, 0_ce};\r\n        bool expected[7] = {true, true, true, false, true, false, false};\r\n        bool dst[7]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test floats\r\n        float src[7]      = {5.0f, 2.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f};\r\n        float expected[7] = {5.0f, 2.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f};\r\n        float dst[7]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test float => int\r\n        float src[7]    = {5.0f, 2.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f};\r\n        int expected[7] = {5, 2, 1, 0, -1, 0, 0};\r\n        int dst[7]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test int => float\r\n        int src[7]        = {5, 2, 1, 0, -1, 0, 0};\r\n        float expected[7] = {5.0f, 2.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f};\r\n        float dst[7]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test double => long double\r\n        double src[7]           = {5.0, 2.0, 1.0, 0.0, -1.0, 0.0, 0.0};\r\n        long double expected[7] = {5.0L, 2.0L, 1.0L, 0.0L, -1.0L, 0.0L, 0.0L};\r\n        long double dst[7]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test long double => double\r\n        long double src[7] = {5.0L, 2.0L, 1.0L, 0.0L, -1.0L, 0.0L, 0.0L};\r\n        double expected[7] = {5.0, 2.0, 1.0, 0.0, -1.0, 0.0, 0.0};\r\n        double dst[7]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test int*\r\n        int arr[5]{};\r\n        int* src[5]      = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        int* expected[5] = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        int* dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test void*\r\n        int arr[5]{};\r\n        void* src[5]      = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        void* expected[5] = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        void* dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test int* => void*\r\n        int arr[5]{};\r\n        int* src[5]       = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        void* expected[5] = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        void* dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test int* => const int*\r\n        int arr[5]{};\r\n        int* src[5]            = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        const int* expected[5] = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        const int* dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test EmptyBase*\r\n        EmptyBase arr[5]{};\r\n        EmptyBase* src[5]      = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        EmptyBase* expected[5] = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        EmptyBase* dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test EmptyDerived*\r\n        EmptyDerived arr[5]{};\r\n        EmptyDerived* src[5]      = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        EmptyDerived* expected[5] = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        EmptyDerived* dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test EmptyDerived* => EmptyBase*\r\n        EmptyDerived arr[5]{};\r\n        EmptyDerived* src[5]   = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        EmptyBase* expected[5] = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        EmptyBase* dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test StatefulDerived* => StatefulBase*\r\n        StatefulDerived arr[5]{};\r\n        StatefulDerived* src[5]   = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        StatefulBase* expected[5] = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        StatefulBase* dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test StatefulDerived* => EmptyBase*\r\n        StatefulDerived arr[5]{};\r\n        StatefulDerived* src[5] = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        EmptyBase* expected[5]  = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        EmptyBase* dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test StatefulDerived2* => StatefulBase*\r\n        StatefulDerived2 arr[5]{};\r\n        StatefulDerived2* src[5]  = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        StatefulBase* expected[5] = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        StatefulBase* dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test StatefulDerived2* => EmptyBase*\r\n        StatefulDerived2 arr[5]{};\r\n        StatefulDerived2* src[5] = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        EmptyBase* expected[5]   = {&arr[0], &arr[1], nullptr, &arr[3], &arr[4]};\r\n        EmptyBase* dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test void (*)(int)\r\n        using fn_ptr       = void (*)(int);\r\n        auto lambda1       = [](int) { abort(); };\r\n        auto lambda2       = [](int) { exit(0); };\r\n        fn_ptr src[5]      = {lambda1, lambda2, nullptr, lambda1, nullptr};\r\n        fn_ptr expected[5] = {lambda1, lambda2, nullptr, lambda1, nullptr};\r\n        fn_ptr dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n#ifndef __clang__\r\n    if constexpr (is_convertible_v<void (*)(int), void*>) { // Test void (*)(int) => void* (non-standard extension)\r\n        using fn_ptr      = void (*)(int);\r\n        fn_ptr lambda1    = [](int) { abort(); };\r\n        fn_ptr lambda2    = [](int) { exit(0); };\r\n        fn_ptr src[5]     = {lambda1, lambda2, nullptr, lambda1, nullptr};\r\n        void* expected[5] = {lambda1, lambda2, nullptr, lambda1, nullptr};\r\n        void* dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n#endif // __clang__\r\n\r\n    { // Test int StatefulBase::*\r\n        using m_ptr       = int StatefulBase::*;\r\n        m_ptr src[5]      = {&StatefulBase::i, &StatefulBase::i, nullptr, &StatefulBase::i, nullptr};\r\n        m_ptr expected[5] = {&StatefulBase::i, &StatefulBase::i, nullptr, &StatefulBase::i, nullptr};\r\n        m_ptr dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test int StatefulDerived::*\r\n        using m_ptr       = int StatefulDerived::*;\r\n        m_ptr src[5]      = {&StatefulDerived::i, &StatefulBase::i, nullptr, &StatefulDerived::i, nullptr};\r\n        m_ptr expected[5] = {&StatefulDerived::i, &StatefulBase::i, nullptr, &StatefulDerived::i, nullptr};\r\n        m_ptr dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test int (StatefulBase::*)()\r\n        using mfn_ptr       = int (StatefulBase::*)();\r\n        mfn_ptr src[5]      = {&StatefulBase::get_i, &StatefulBase::get_i2, nullptr, &StatefulBase::get_i, nullptr};\r\n        mfn_ptr expected[5] = {&StatefulBase::get_i, &StatefulBase::get_i2, nullptr, &StatefulBase::get_i, nullptr};\r\n        mfn_ptr dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test int (StatefulDerived::*)()\r\n        using mfn_ptr  = int (StatefulDerived::*)();\r\n        mfn_ptr src[5] = {&StatefulDerived::get_i, &StatefulBase::get_i2, nullptr, &StatefulDerived::get_i3, nullptr};\r\n        mfn_ptr expected[5] = {\r\n            &StatefulDerived::get_i, &StatefulBase::get_i2, nullptr, &StatefulDerived::get_i3, nullptr};\r\n        mfn_ptr dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    { // Test string_view\r\n        string_view src[5]      = {\"meow\"sv, \"purr\"sv, \"\"sv, {}, \"peppermint\"sv};\r\n        string_view expected[5] = {\"meow\"sv, \"purr\"sv, \"\"sv, {}, \"peppermint\"sv};\r\n        string_view dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n    { // Test span<int>\r\n        int arr1[3]           = {1, 2, 3};\r\n        int arr2[5]           = {4, 5, 6, 7, 8};\r\n        int arr3[1]           = {9};\r\n        span<int> src[5]      = {arr1, arr3, arr2, {}, arr1};\r\n        span<int> expected[5] = {arr1, arr3, arr2, {}, arr1};\r\n        span<int> dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst), [](const auto& left, const auto& right) {\r\n            return left.data() == right.data() && left.size() == right.size();\r\n        }));\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    { // Test TrivialStruct\r\n        TrivialStruct src[5]      = {{8}, {3}, {6}, {2}, {1}};\r\n        TrivialStruct expected[5] = {{8}, {3}, {6}, {2}, {1}};\r\n        TrivialStruct dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test TriviallyCopyableStruct\r\n        TriviallyCopyableStruct src[5]      = {{8}, {3}, {6}, {2}, {1}};\r\n        TriviallyCopyableStruct expected[5] = {{8}, {3}, {6}, {2}, {1}};\r\n        TriviallyCopyableStruct dst[5]{};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test TriviallyMovableStruct\r\n        TriviallyMovableStruct src[5]      = {{8}, {3}, {6}, {2}, {1}};\r\n        TriviallyMovableStruct expected[5] = {{8}, {3}, {6}, {2}, {1}};\r\n        TriviallyMovableStruct dst[5]{};\r\n\r\n        copy_fn(make_move_iterator(begin(src)), make_move_iterator(end(src)), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test vector\r\n        vector<int> src      = {3, 6, 4, 7, 3};\r\n        vector<int> expected = {3, 6, 4, 7, 3};\r\n        vector<int> dst      = {0, 0, 0, 0, 0};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test array\r\n        array<int, 5> src      = {3, 6, 4, 7, 3};\r\n        array<int, 5> expected = {3, 6, 4, 7, 3};\r\n        array<int, 5> dst      = {0, 0, 0, 0, 0};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test copying from vector to array\r\n        vector<int> src        = {3, 6, 4, 7, 3};\r\n        array<int, 5> expected = {3, 6, 4, 7, 3};\r\n        array<int, 5> dst      = {0, 0, 0, 0, 0};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test copying from array to vector\r\n        array<int, 5> src    = {3, 6, 4, 7, 3};\r\n        vector<int> expected = {3, 6, 4, 7, 3};\r\n        vector<int> dst      = {0, 0, 0, 0, 0};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test list\r\n        list<int> src      = {3, 6, 4, 7, 3};\r\n        list<int> expected = {3, 6, 4, 7, 3};\r\n        list<int> dst      = {0, 0, 0, 0, 0};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test copying from vector to list\r\n        vector<int> src    = {3, 6, 4, 7, 3};\r\n        list<int> expected = {3, 6, 4, 7, 3};\r\n        list<int> dst      = {0, 0, 0, 0, 0};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test copying from list to vector\r\n        list<int> src        = {3, 6, 4, 7, 3};\r\n        vector<int> expected = {3, 6, 4, 7, 3};\r\n        vector<int> dst      = {0, 0, 0, 0, 0};\r\n\r\n        copy_fn(begin(src), end(src), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test move_iterator\r\n        int src[5]      = {3, 6, 4, 7, 3};\r\n        int expected[5] = {3, 6, 4, 7, 3};\r\n        int dst[5]{};\r\n\r\n        copy_fn(make_move_iterator(begin(src)), make_move_iterator(end(src)), begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n\r\n    { // Test double move_iterator\r\n        int src[5]      = {3, 6, 4, 7, 3};\r\n        int expected[5] = {3, 6, 4, 7, 3};\r\n        int dst[5]{};\r\n\r\n        copy_fn(make_move_iterator(make_move_iterator(begin(src))), make_move_iterator(make_move_iterator(end(src))),\r\n            begin(dst));\r\n\r\n        assert(equal(begin(expected), end(expected), begin(dst), end(dst)));\r\n    }\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class T = int>\r\nstruct MyIterator { // A contiguous iterator with a weirdly narrow difference type\r\n    using iterator_concept = contiguous_iterator_tag;\r\n    using value_type       = T;\r\n    using difference_type  = short;\r\n\r\n    value_type* ptr = nullptr;\r\n\r\n    MyIterator() = default;\r\n    explicit MyIterator(value_type* p) : ptr{p} {}\r\n\r\n    value_type& operator*() const {\r\n        return *ptr;\r\n    }\r\n    value_type* operator->() const {\r\n        return ptr;\r\n    }\r\n\r\n    MyIterator& operator++() {\r\n        ++ptr;\r\n        return *this;\r\n    }\r\n    MyIterator operator++(int) {\r\n        auto tmp = *this;\r\n        ++ptr;\r\n        return tmp;\r\n    }\r\n\r\n    MyIterator& operator--() {\r\n        --ptr;\r\n        return *this;\r\n    }\r\n    MyIterator operator--(int) {\r\n        auto tmp = *this;\r\n        --ptr;\r\n        return tmp;\r\n    }\r\n\r\n    auto operator<=>(const MyIterator&) const = default;\r\n\r\n    value_type& operator[](difference_type n) const {\r\n        return ptr[n];\r\n    }\r\n\r\n    MyIterator& operator+=(difference_type n) {\r\n        ptr += n;\r\n        return *this;\r\n    }\r\n    MyIterator& operator-=(difference_type n) {\r\n        ptr -= n;\r\n        return *this;\r\n    }\r\n    difference_type operator-(const MyIterator& that) const {\r\n        return ptr - that.ptr;\r\n    }\r\n    MyIterator operator+(difference_type n) const {\r\n        return MyIterator{ptr + n};\r\n    }\r\n    MyIterator operator-(difference_type n) const {\r\n        return MyIterator{ptr - n};\r\n    }\r\n    friend MyIterator operator+(difference_type n, const MyIterator& i) {\r\n        return i + n;\r\n    }\r\n};\r\nstatic_assert(contiguous_iterator<MyIterator<int>>);\r\n\r\nvoid test_copy_n_regressions() {\r\n    const int src = 1729;\r\n    int x         = 100;\r\n\r\n    // _Copy_memmove_n was adding a size_t to an iterator without converting to its difference_type:\r\n    //  warning C4267: 'argument': conversion from 'size_t' to 'MyIterator::difference_type', possible loss of data\r\n    copy_n(MyIterator{}, -42, MyIterator{});\r\n    copy_n(MyIterator{}, 0, MyIterator{});\r\n    copy_n(MyIterator{&src}, 1, MyIterator{&x});\r\n    assert(x == 1729);\r\n    x = 100;\r\n\r\n    copy_n(&src, -42, &x);\r\n    assert(x == 100);\r\n    copy_n(&src, 0, &x);\r\n    assert(x == 100);\r\n    copy_n(&src, 1, &x);\r\n    assert(x == 1729);\r\n    x = 100;\r\n\r\n    // ranges::copy_n wasn't guarding against negative n when calling the memmove optimization\r\n    ranges::copy_n(MyIterator{}, -42, MyIterator{});\r\n    ranges::copy_n(MyIterator{}, 0, MyIterator{});\r\n    ranges::copy_n(MyIterator{&src}, 1, MyIterator{&x});\r\n    assert(x == 1729);\r\n    x = 100;\r\n\r\n    ranges::copy_n(&src, -42, &x);\r\n    assert(x == 100);\r\n    ranges::copy_n(&src, 0, &x);\r\n    assert(x == 100);\r\n    ranges::copy_n(&src, 1, &x);\r\n    assert(x == 1729);\r\n    x = 100;\r\n}\r\n#endif // _HAS_CXX20\r\n\r\nint main() {\r\n    test_algorithms([](auto begin, auto end, auto out) { copy(begin, end, out); });\r\n    test_algorithms([](auto begin, auto end, auto out) { copy_n(begin, distance(begin, end), out); });\r\n    test_algorithms([](auto begin, auto end, auto out) { copy_backward(begin, end, next(out, distance(begin, end))); });\r\n\r\n    test_algorithms([](auto begin, auto end, auto out) { move(begin, end, out); });\r\n    test_algorithms([](auto begin, auto end, auto out) { move_backward(begin, end, next(out, distance(begin, end))); });\r\n\r\n    test_algorithms([](auto begin, auto end, auto out) { uninitialized_copy(begin, end, out); });\r\n    test_algorithms([](auto begin, auto end, auto out) { uninitialized_copy_n(begin, distance(begin, end), out); });\r\n\r\n#if _HAS_CXX17\r\n    test_algorithms([](auto begin, auto end, auto out) { uninitialized_move(begin, end, out); });\r\n    test_algorithms([](auto begin, auto end, auto out) { uninitialized_move_n(begin, distance(begin, end), out); });\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n    test_algorithms([](auto begin, auto end, auto out) { ranges::copy(begin, end, out); });\r\n    test_algorithms([](auto begin, auto end, auto out) { ranges::copy_n(begin, distance(begin, end), out); });\r\n    test_algorithms([](auto begin, auto end, auto out) {\r\n        // Unfortunately move_iterator is not a bidirectional_iterator, so fallback to unconstrained version\r\n        if constexpr (bidirectional_iterator<decltype(begin)>) {\r\n            ranges::copy_backward(begin, end, next(out, distance(begin, end)));\r\n        } else {\r\n            copy_backward(begin, end, next(out, distance(begin, end)));\r\n        }\r\n    });\r\n\r\n    test_algorithms([](auto begin, auto end, auto out) { ranges::move(begin, end, out); });\r\n    test_algorithms([](auto begin, auto end, auto out) {\r\n        // Unfortunately move_iterator is not a bidirectional_iterator, so fallback to unconstrained version\r\n        if constexpr (bidirectional_iterator<decltype(begin)>) {\r\n            ranges::move_backward(begin, end, next(out, distance(begin, end)));\r\n        } else {\r\n            move_backward(begin, end, next(out, distance(begin, end)));\r\n        }\r\n    });\r\n\r\n    test_algorithms([](auto begin, auto end, auto out) {\r\n        ranges::uninitialized_copy(begin, end, out, next(out, distance(begin, end)));\r\n    });\r\n    test_algorithms(\r\n        [](auto begin, auto end, auto out) { ranges::uninitialized_copy(begin, end, out, unreachable_sentinel); });\r\n    test_algorithms([](auto begin, auto end, auto out) {\r\n        ranges::uninitialized_copy(begin, unreachable_sentinel, out, next(out, distance(begin, end)));\r\n    });\r\n\r\n    test_algorithms([](auto begin, auto end, auto out) {\r\n        ranges::uninitialized_copy_n(begin, distance(begin, end), out, next(out, distance(begin, end)));\r\n    });\r\n    test_algorithms([](auto begin, auto end, auto out) {\r\n        ranges::uninitialized_copy_n(begin, distance(begin, end), out, unreachable_sentinel);\r\n    });\r\n\r\n    test_algorithms([](auto begin, auto end, auto out) {\r\n        ranges::uninitialized_move(begin, end, out, next(out, distance(begin, end)));\r\n    });\r\n    test_algorithms(\r\n        [](auto begin, auto end, auto out) { ranges::uninitialized_move(begin, end, out, unreachable_sentinel); });\r\n    test_algorithms([](auto begin, auto end, auto out) {\r\n        ranges::uninitialized_move(begin, unreachable_sentinel, out, next(out, distance(begin, end)));\r\n    });\r\n\r\n    test_algorithms([](auto begin, auto end, auto out) {\r\n        ranges::uninitialized_move_n(begin, distance(begin, end), out, next(out, distance(begin, end)));\r\n    });\r\n    test_algorithms([](auto begin, auto end, auto out) {\r\n        ranges::uninitialized_move_n(begin, distance(begin, end), out, unreachable_sentinel);\r\n    });\r\n\r\n    test_copy_n_regressions();\r\n#endif // _HAS_CXX20\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000431_equal_family/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000431_equal_family/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wsign-compare\" // comparison of integers of different signs: 'X' and 'Y'\r\n#pragma clang diagnostic ignored \"-Wenum-compare\" // comparison of different enumeration types ('X' and 'Y')\r\n#pragma clang diagnostic ignored \\\r\n    \"-Wdeprecated-enum-compare\" // comparison of different enumeration types ('X' and 'Y') is deprecated\r\n#pragma clang diagnostic ignored \"-Wc++17-extensions\" // constexpr if is a C++17 extension\r\n#endif // __clang__\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#pragma warning(disable : 4242) // conversion from 'X' to 'Y', possible loss of data\r\n#pragma warning(disable : 4244) // conversion from 'X' to 'Y', possible loss of data (Yes, duplicated message.)\r\n#pragma warning(disable : 4365) // conversion from 'X' to 'Y', signed/unsigned mismatch\r\n#pragma warning(disable : 4389) // '==': signed/unsigned mismatch\r\n#pragma warning(disable : 4805) // '==': unsafe mix of type 'X' and type 'Y' in operation\r\n#pragma warning(disable : 4984) // 'if constexpr' is a C++17 language extension\r\n#pragma warning(disable : 5054) // operator '==': deprecated between enumerations of different types\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nenum int_enum : int {};\r\nenum short_enum : short {};\r\nenum char_enum : char {};\r\nenum bool_enum : bool { false_e = false, true_e = true };\r\n\r\nconstexpr int_enum operator\"\"_e(unsigned long long value) noexcept {\r\n    return static_cast<int_enum>(value);\r\n}\r\n\r\nconstexpr short_enum operator\"\"_se(unsigned long long value) noexcept {\r\n    return static_cast<short_enum>(value);\r\n}\r\n\r\nconstexpr char_enum operator\"\"_ce(unsigned long long value) noexcept {\r\n    return static_cast<char_enum>(value);\r\n}\r\n\r\nenum bad_int_enum : int {};\r\nenum bad_short_enum : short {};\r\nenum bad_char_enum : char {};\r\nenum bad_bool_enum : bool { false_bad = false, true_bad = true };\r\n\r\nbool operator==(bad_int_enum, bad_int_enum) {\r\n    return false;\r\n}\r\nbool operator==(int, bad_int_enum) {\r\n    return false;\r\n}\r\nbool operator==(bad_int_enum, int) {\r\n    return false;\r\n}\r\n\r\nbool operator==(bad_short_enum, bad_short_enum) {\r\n    return false;\r\n}\r\nbool operator==(short, bad_short_enum) {\r\n    return false;\r\n}\r\nbool operator==(bad_short_enum, short) {\r\n    return false;\r\n}\r\n\r\nbool operator==(bad_char_enum, bad_char_enum) {\r\n    return false;\r\n}\r\nbool operator==(char, bad_char_enum) {\r\n    return false;\r\n}\r\nbool operator==(bad_char_enum, char) {\r\n    return false;\r\n}\r\n\r\nbool operator==(bad_bool_enum, bad_bool_enum) {\r\n    return false;\r\n}\r\nbool operator==(bool, bad_bool_enum) {\r\n    return false;\r\n}\r\nbool operator==(bad_bool_enum, bool) {\r\n    return false;\r\n}\r\n\r\nconstexpr bad_int_enum operator\"\"_be(unsigned long long value) noexcept {\r\n    return static_cast<bad_int_enum>(value);\r\n}\r\n\r\nconstexpr bad_short_enum operator\"\"_bse(unsigned long long value) noexcept {\r\n    return static_cast<bad_short_enum>(value);\r\n}\r\n\r\nconstexpr bad_char_enum operator\"\"_bce(unsigned long long value) noexcept {\r\n    return static_cast<bad_char_enum>(value);\r\n}\r\n\r\nstruct EmptyBase {};\r\n\r\nstruct EmptyDerived : EmptyBase {};\r\n\r\nstruct StatefulBase {\r\n    int i;\r\n\r\n    int get_i() {\r\n        return i;\r\n    }\r\n\r\n    int get_i2() {\r\n        return i * 2;\r\n    }\r\n};\r\n\r\nstruct StatefulDerived : StatefulBase, EmptyBase {\r\n    int get_i3() {\r\n        return i * 3;\r\n    }\r\n};\r\n\r\nstruct StatefulDerived2 : EmptyBase, StatefulBase {};\r\n\r\n#ifdef __cpp_lib_is_pointer_interconvertible\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<EmptyBase, EmptyDerived>);\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<StatefulBase, StatefulDerived>);\r\n#ifndef __EDG__ // TRANSITION, VSO-1849453\r\nSTATIC_ASSERT(!is_pointer_interconvertible_base_of_v<EmptyBase, StatefulDerived>);\r\n#endif // ^^^ no workaround ^^^\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<StatefulBase, StatefulDerived2>);\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<EmptyBase, StatefulDerived2>);\r\n#endif // __cpp_lib_is_pointer_interconvertible\r\n\r\ntemplate <class EqualFn>\r\nvoid test_algorithms(EqualFn equal_fn) {\r\n\r\n    { // Test ints\r\n        int arr1[10]          = {5, 7, 3, 4, 6, 4, 7, 1, 9, 5};\r\n        int arr2[10]          = {5, 7, 3, 4, 6, 4, 7, 1, 9, 5};\r\n        int arr3[10]          = {5, 7, 2, 4, 6, 4, 7, 1, 9, 5};\r\n        int_enum arr4[10]     = {5_e, 7_e, 3_e, 4_e, 6_e, 4_e, 7_e, 1_e, 9_e, 5_e};\r\n        int_enum arr5[10]     = {5_e, 7_e, 2_e, 4_e, 6_e, 4_e, 7_e, 1_e, 9_e, 5_e};\r\n        bad_int_enum arr6[10] = {5_be, 7_be, 3_be, 4_be, 6_be, 4_be, 7_be, 1_be, 9_be, 5_be};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<int>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<unsigned int>{}));\r\n\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<int>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<unsigned int>{}));\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<int>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<unsigned int>{}));\r\n\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<int>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<unsigned int>{}));\r\n\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<int>{}));\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<unsigned int>{}));\r\n\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr5), end(arr5), equal_to<int>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr5), end(arr5), equal_to<unsigned int>{}));\r\n\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), equal_to<int>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), equal_to<unsigned int>{}));\r\n    }\r\n\r\n    { // Test int == long\r\n        int arr1[10]  = {5, 7, 3, 4, 6, 4, 7, 1, 9, 5};\r\n        long arr2[10] = {5, 7, 3, 4, 6, 4, 7, 1, 9, 5};\r\n        long arr3[10] = {5, 7, 3, 4, 6, 4, 7, 1, 8, 5};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<int>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<long>{}));\r\n\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<int>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<long>{}));\r\n    }\r\n\r\n    { // Test int == unsigned int\r\n        int arr1[10]          = {5, 7, 3, 4, 6, -4, 7, 1, 9, 5};\r\n        unsigned int arr2[10] = {5, 7, 3, 4, 6, static_cast<unsigned int>(-4), 7, 1, 9, 5};\r\n        unsigned int arr3[10] = {4, 7, 3, 4, 6, static_cast<unsigned int>(-4), 7, 1, 9, 5};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<int>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<unsigned int>{}));\r\n\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<int>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<unsigned int>{}));\r\n    }\r\n\r\n    { // Test long == unsigned int\r\n        long arr1[10]         = {5, 7, 3, 4, 6, -4, 7, 1, 9, 5};\r\n        unsigned int arr2[10] = {5, 7, 3, 4, 6, static_cast<unsigned int>(-4), 7, 1, 9, 5};\r\n        unsigned int arr3[10] = {4, 7, 3, 4, 6, static_cast<unsigned int>(-4), 7, 1, 9, 5};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<int>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<unsigned int>{}));\r\n\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<int>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<unsigned int>{}));\r\n    }\r\n\r\n    { // Test short == int\r\n        short arr1[10]      = {5, 7, 3, 4, 6, -4, 7, 1, 9, 5};\r\n        int arr2[10]        = {5, 7, 3, 4, 6, -4, 7, 1, 9, 5};\r\n        short_enum arr3[10] = {5_se, 7_se, 3_se, 4_se, 6_se, static_cast<short_enum>(-4), 7_se, 1_se, 9_se, 5_se};\r\n        int_enum arr4[10]   = {5_e, 7_e, 3_e, 4_e, 6_e, static_cast<int_enum>(-4), 7_e, 1_e, 9_e, 5_e};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<short>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<int>{}));\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<short>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<int>{}));\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<short>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<int>{}));\r\n\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr3), end(arr3), equal_to<>{}));\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr3), end(arr3), equal_to<short>{}));\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr3), end(arr3), equal_to<int>{}));\r\n\r\n#if !_HAS_CXX23\r\n        // The return type of equal_to<void>::operator()(T, U) SFINAEs\r\n        // when T and U are different enumeration types.\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<>{}));\r\n#endif // !_HAS_CXX23\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<short>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<int>{}));\r\n    }\r\n\r\n    { // Test short == unsigned short\r\n        short arr1[10]          = {5, 7, 3, 4, 6, -4, 7, 1, 9, 5};\r\n        unsigned short arr2[10] = {5, 7, 3, 4, 6, static_cast<unsigned short>(-4), 7, 1, 9, 5};\r\n        short_enum arr3[10]     = {5_se, 7_se, 3_se, 4_se, 6_se, static_cast<short_enum>(-4), 7_se, 1_se, 9_se, 5_se};\r\n        bad_short_enum arr4[10] = {\r\n            5_bse, 7_bse, 3_bse, 4_bse, 6_bse, static_cast<bad_short_enum>(-4), 7_bse, 1_bse, 9_bse, 5_bse};\r\n\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<short>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<unsigned short>{}));\r\n\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr2), end(arr2), equal_to<short>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr2), end(arr2), equal_to<unsigned short>{}));\r\n\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr1), end(arr1), equal_to<>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr1), end(arr1), equal_to<short>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr1), end(arr1), equal_to<unsigned short>{}));\r\n\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<short>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<unsigned short>{}));\r\n\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<short>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<unsigned short>{}));\r\n    }\r\n\r\n    { // Test bool\r\n        bool arr1[7]          = {true, true, true, false, true, false, false};\r\n        bool arr2[7]          = {true, true, true, false, true, false, false};\r\n        bool arr3[7]          = {true, true, true, false, true, false, true};\r\n        bool_enum arr4[7]     = {true_e, true_e, true_e, false_e, true_e, false_e, false_e};\r\n        bad_bool_enum arr5[7] = {true_bad, true_bad, true_bad, false_bad, true_bad, false_bad, false_bad};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<bool>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<char>{}));\r\n\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<bool>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<char>{}));\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<bool>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<char>{}));\r\n\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<bool>{}));\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<char>{}));\r\n\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<bool>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<char>{}));\r\n\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<bool>{}));\r\n        assert(equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<char>{}));\r\n    }\r\n\r\n    { // Test bool == char\r\n        bool arr1[7]      = {true, true, true, false, true, false, false};\r\n        char arr2[7]      = {1, 1, 1, 0, 1, 0, 0};\r\n        char arr3[7]      = {5, 2, 1, 0, -1, 0, 0};\r\n        bool_enum arr4[7] = {true_e, true_e, true_e, false_e, true_e, false_e, false_e};\r\n        char_enum arr5[7] = {1_ce, 1_ce, 1_ce, 0_ce, 1_ce, 0_ce, 0_ce};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<char>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<bool>{}));\r\n\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<char>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<bool>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<const bool>{}));\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<char>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<bool>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<const bool>{}));\r\n\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr4), end(arr4), equal_to<char>{}));\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr4), end(arr4), equal_to<bool>{}));\r\n\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<char>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<bool>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<const bool>{}));\r\n    }\r\n\r\n    { // Test floating points\r\n        int arr1[10]    = {5, 7, 3, 4, 0, 4, 7, 1, 9, 5};\r\n        float arr2[10]  = {5.0f, 7.0f, 3.0f, 4.0f, 0.0f, 4.0f, 7.0f, 1.0f, 9.0f, 5.0f};\r\n        float arr3[10]  = {5.0f, 7.0f, 3.0f, 4.0f, -0.0f, 4.0f, 7.0f, 1.0f, 9.0f, 5.0f};\r\n        double arr4[10] = {5.0, 7.0, 3.0, 4.0, 0.0, 4.0, 7.0, 1.0, 9.0, 5.0};\r\n        double arr5[10] = {5.0, 7.0, 3.0, 4.0, -0.0, 4.0, 7.0, 1.0, 9.0, 5.0};\r\n        float arr6[10]  = {5.0f, 3.0f, 3.0f, 4.0f, -0.0f, 4.0f, 7.0f, 1.0f, 9.0f, 5.0f};\r\n        double arr7[10] = {5.0, 3.0, 3.0, 4.0, -0.0, 4.0, 7.0, 1.0, 9.0, 5.0};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), equal_to<>{}));\r\n\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr3), end(arr3), equal_to<>{}));\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr2), end(arr2), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr2), end(arr2), begin(arr7), end(arr7), equal_to<>{}));\r\n\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr7), end(arr7), equal_to<>{}));\r\n\r\n        assert(equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr7), end(arr7), equal_to<>{}));\r\n\r\n        assert(!equal_fn(begin(arr5), end(arr5), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr5), end(arr5), begin(arr7), end(arr7), equal_to<>{}));\r\n\r\n        assert(equal_fn(begin(arr6), end(arr6), begin(arr7), end(arr7), equal_to<>{}));\r\n    }\r\n\r\n    { // Test pointers\r\n        int objs[5]{};\r\n        int* arr1[5]        = {&objs[0], &objs[1], nullptr, &objs[3], &objs[4]};\r\n        int* arr2[5]        = {&objs[0], &objs[1], nullptr, &objs[3], &objs[4]};\r\n        const int* arr3[5]  = {&objs[0], &objs[1], nullptr, &objs[3], &objs[4]};\r\n        void* arr4[5]       = {&objs[0], &objs[1], nullptr, &objs[3], &objs[4]};\r\n        void* arr5[5]       = {&objs[0], &objs[1], nullptr, &objs[3], &objs[4]};\r\n        const void* arr6[5] = {&objs[0], &objs[1], nullptr, &objs[3], &objs[4]};\r\n        int* arr7[5]        = {&objs[0], &objs[2], nullptr, &objs[3], &objs[4]};\r\n        void* arr8[5]       = {&objs[0], &objs[2], nullptr, &objs[3], &objs[4]};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<int*>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<const int*>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<void*>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<const void*>{}));\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<const int*>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<const void*>{}));\r\n\r\n        assert(equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<void*>{}));\r\n        assert(equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<const void*>{}));\r\n\r\n        assert(equal_fn(begin(arr4), end(arr4), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(equal_fn(begin(arr4), end(arr4), begin(arr6), end(arr6), equal_to<const void*>{}));\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<void*>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<const void*>{}));\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), equal_to<const void*>{}));\r\n\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr5), end(arr5), equal_to<void*>{}));\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr5), end(arr5), equal_to<const void*>{}));\r\n\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr6), end(arr6), equal_to<const void*>{}));\r\n\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<const void*>{}));\r\n\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr6), end(arr6), equal_to<const void*>{}));\r\n\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), equal_to<int*>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), equal_to<const int*>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), equal_to<void*>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), equal_to<const void*>{}));\r\n\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr7), end(arr7), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr7), end(arr7), equal_to<const int*>{}));\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr7), end(arr7), equal_to<const void*>{}));\r\n\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr8), end(arr8), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr8), end(arr8), equal_to<void*>{}));\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr8), end(arr8), equal_to<const void*>{}));\r\n\r\n        assert(!equal_fn(begin(arr6), end(arr6), begin(arr8), end(arr8), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr6), end(arr6), begin(arr8), end(arr8), equal_to<const void*>{}));\r\n\r\n        assert(equal_fn(begin(arr7), end(arr7), begin(arr8), end(arr8), equal_to<>{}));\r\n        assert(equal_fn(begin(arr7), end(arr7), begin(arr8), end(arr8), equal_to<void*>{}));\r\n        assert(equal_fn(begin(arr7), end(arr7), begin(arr8), end(arr8), equal_to<const void*>{}));\r\n    }\r\n\r\n    { // Test pointers to derived classes\r\n        EmptyDerived objs[5]{};\r\n\r\n        EmptyBase* arr1[5]    = {&objs[0], nullptr, &objs[2], &objs[3], &objs[4]};\r\n        EmptyBase* arr2[5]    = {&objs[0], nullptr, &objs[2], &objs[3], &objs[4]};\r\n        EmptyBase* arr3[5]    = {&objs[0], nullptr, &objs[1], &objs[3], &objs[4]};\r\n        EmptyDerived* arr4[5] = {&objs[0], nullptr, &objs[2], &objs[3], &objs[4]};\r\n        EmptyDerived* arr5[5] = {&objs[0], nullptr, &objs[1], &objs[3], &objs[4]};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<EmptyBase*>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<void*>{}));\r\n\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<EmptyBase*>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<void*>{}));\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<EmptyBase*>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<void*>{}));\r\n\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<EmptyBase*>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<void*>{}));\r\n\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr5), end(arr5), equal_to<EmptyBase*>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr5), end(arr5), equal_to<void*>{}));\r\n\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<EmptyBase*>{}));\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<void*>{}));\r\n    }\r\n\r\n    { // Test pointers to derived classes more\r\n        StatefulDerived objs[5]{};\r\n\r\n        EmptyBase* arr1[5]       = {&objs[0], nullptr, &objs[2], &objs[3], &objs[4]};\r\n        EmptyBase* arr2[5]       = {&objs[0], nullptr, &objs[1], &objs[3], &objs[4]};\r\n        StatefulBase* arr3[5]    = {&objs[0], nullptr, &objs[2], &objs[3], &objs[4]};\r\n        StatefulBase* arr4[5]    = {&objs[0], nullptr, &objs[1], &objs[3], &objs[4]};\r\n        StatefulDerived* arr5[5] = {&objs[0], nullptr, &objs[2], &objs[3], &objs[4]};\r\n        StatefulDerived* arr6[5] = {&objs[0], nullptr, &objs[1], &objs[3], &objs[4]};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<EmptyBase*>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<void*>{}));\r\n\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), equal_to<EmptyBase*>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), equal_to<void*>{}));\r\n\r\n        assert(!equal_fn(begin(arr2), end(arr2), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr2), end(arr2), begin(arr5), end(arr5), equal_to<EmptyBase*>{}));\r\n        assert(!equal_fn(begin(arr2), end(arr2), begin(arr5), end(arr5), equal_to<void*>{}));\r\n\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr6), end(arr6), equal_to<EmptyBase*>{}));\r\n        assert(!equal_fn(begin(arr2), end(arr2), begin(arr6), end(arr6), equal_to<void*>{}));\r\n\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr5), end(arr5), equal_to<StatefulBase*>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr5), end(arr5), equal_to<void*>{}));\r\n\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr6), end(arr6), equal_to<StatefulBase*>{}));\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr6), end(arr6), equal_to<void*>{}));\r\n\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<StatefulBase*>{}));\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<void*>{}));\r\n\r\n        assert(equal_fn(begin(arr4), end(arr4), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(equal_fn(begin(arr4), end(arr4), begin(arr6), end(arr6), equal_to<StatefulBase*>{}));\r\n        assert(equal_fn(begin(arr4), end(arr4), begin(arr6), end(arr6), equal_to<void*>{}));\r\n    }\r\n\r\n    { // Test pointers to derived classes even more\r\n        StatefulDerived2 objs[5]{};\r\n\r\n        EmptyBase* arr1[5]        = {&objs[0], nullptr, &objs[2], &objs[3], &objs[4]};\r\n        EmptyBase* arr2[5]        = {&objs[0], nullptr, &objs[1], &objs[3], &objs[4]};\r\n        StatefulBase* arr3[5]     = {&objs[0], nullptr, &objs[2], &objs[3], &objs[4]};\r\n        StatefulBase* arr4[5]     = {&objs[0], nullptr, &objs[1], &objs[3], &objs[4]};\r\n        StatefulDerived2* arr5[5] = {&objs[0], nullptr, &objs[2], &objs[3], &objs[4]};\r\n        StatefulDerived2* arr6[5] = {&objs[0], nullptr, &objs[1], &objs[3], &objs[4]};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<EmptyBase*>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<void*>{}));\r\n\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), equal_to<EmptyBase*>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), equal_to<void*>{}));\r\n\r\n        assert(!equal_fn(begin(arr2), end(arr2), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr2), end(arr2), begin(arr5), end(arr5), equal_to<EmptyBase*>{}));\r\n        assert(!equal_fn(begin(arr2), end(arr2), begin(arr5), end(arr5), equal_to<void*>{}));\r\n\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr6), end(arr6), equal_to<EmptyBase*>{}));\r\n        assert(equal_fn(begin(arr2), end(arr2), begin(arr6), end(arr6), equal_to<void*>{}));\r\n\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr5), end(arr5), equal_to<StatefulBase*>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr5), end(arr5), equal_to<void*>{}));\r\n\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr6), end(arr6), equal_to<StatefulBase*>{}));\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr6), end(arr6), equal_to<void*>{}));\r\n\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<StatefulBase*>{}));\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<void*>{}));\r\n\r\n        assert(equal_fn(begin(arr4), end(arr4), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(equal_fn(begin(arr4), end(arr4), begin(arr6), end(arr6), equal_to<StatefulBase*>{}));\r\n        assert(equal_fn(begin(arr4), end(arr4), begin(arr6), end(arr6), equal_to<void*>{}));\r\n    }\r\n\r\n    { // Test function pointers\r\n        using fn_ptr   = void (*)(int);\r\n        fn_ptr lambda1 = [](int) { abort(); };\r\n        fn_ptr lambda2 = [](int) { exit(0); };\r\n        fn_ptr arr1[5] = {lambda1, lambda2, nullptr, lambda1, nullptr};\r\n        fn_ptr arr2[5] = {lambda1, lambda2, nullptr, lambda1, nullptr};\r\n        fn_ptr arr3[5] = {lambda1, lambda1, nullptr, lambda1, nullptr};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n\r\n#ifndef __clang__\r\n        if constexpr (is_convertible_v<void (*)(int), void*>) { // Test void (*)(int) == void* (non-standard extension)\r\n            void* arr4[5] = {lambda1, lambda2, nullptr, lambda1, nullptr};\r\n            void* arr5[5] = {lambda1, lambda1, nullptr, lambda1, nullptr};\r\n\r\n            assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<void*>{}));\r\n            assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<void*>{}));\r\n\r\n            assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<>{}));\r\n            assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<void*>{}));\r\n            assert(!equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<>{}));\r\n            assert(!equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<void*>{}));\r\n            assert(equal_fn(begin(arr3), end(arr3), begin(arr5), end(arr5), equal_to<>{}));\r\n            assert(equal_fn(begin(arr3), end(arr3), begin(arr5), end(arr5), equal_to<void*>{}));\r\n        }\r\n#endif // __clang__\r\n    }\r\n\r\n    { // Test member object pointers\r\n        using m_ptr    = int StatefulBase::*;\r\n        using m_ptr2   = int StatefulDerived::*;\r\n        m_ptr arr1[5]  = {&StatefulBase::i, &StatefulBase::i, nullptr, &StatefulBase::i, nullptr};\r\n        m_ptr arr2[5]  = {&StatefulBase::i, &StatefulBase::i, nullptr, &StatefulBase::i, nullptr};\r\n        m_ptr arr3[5]  = {nullptr, &StatefulBase::i, nullptr, &StatefulBase::i, nullptr};\r\n        m_ptr2 arr4[5] = {&StatefulDerived::i, &StatefulBase::i, nullptr, &StatefulDerived::i, nullptr};\r\n        m_ptr2 arr5[5] = {nullptr, &StatefulBase::i, nullptr, &StatefulDerived::i, nullptr};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr5), end(arr5), equal_to<>{}));\r\n    }\r\n\r\n#ifndef _M_CEE_PURE // TRANSITION, VSO-1409786\r\n    { // Test member function pointers\r\n        using mfn_ptr    = int (StatefulBase::*)();\r\n        using mfn_ptr2   = int (StatefulDerived::*)();\r\n        mfn_ptr arr1[5]  = {&StatefulBase::get_i, &StatefulBase::get_i2, nullptr, &StatefulBase::get_i2, nullptr};\r\n        mfn_ptr arr2[5]  = {&StatefulBase::get_i, &StatefulBase::get_i2, nullptr, &StatefulBase::get_i2, nullptr};\r\n        mfn_ptr arr3[5]  = {&StatefulBase::get_i, &StatefulBase::get_i, nullptr, &StatefulBase::get_i2, nullptr};\r\n        mfn_ptr2 arr4[5] = {&StatefulDerived::get_i, &StatefulBase::get_i2, nullptr, &StatefulDerived::get_i2, nullptr};\r\n        mfn_ptr2 arr5[5] = {&StatefulDerived::get_i, &StatefulBase::get_i2, nullptr, &StatefulDerived::get_i2, nullptr};\r\n        mfn_ptr2 arr6[5] = {&StatefulDerived::get_i, &StatefulBase::get_i2, nullptr, &StatefulDerived::get_i3, nullptr};\r\n        mfn_ptr2 arr7[5] = {&StatefulDerived::get_i, &StatefulBase::get_i, nullptr, &StatefulDerived::get_i3, nullptr};\r\n\r\n#if _HAS_CXX20 && !defined(__clang__) && !defined(__EDG__) // TRANSITION, DevCom-1535084\r\n#define assert2(x)\r\n#else // ^^^ ICE / no ICE vvv\r\n#define assert2 assert\r\n#endif // ^^^ no ICE ^^^\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<mfn_ptr>{}));\r\n        assert2(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<mfn_ptr2>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<mfn_ptr>{}));\r\n        assert2(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<mfn_ptr2>{}));\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert2(equal_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), equal_to<mfn_ptr2>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert2(!equal_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), equal_to<mfn_ptr2>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), equal_to<>{}));\r\n        assert2(!equal_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), equal_to<mfn_ptr2>{}));\r\n\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert2(!equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<mfn_ptr2>{}));\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert2(!equal_fn(begin(arr3), end(arr3), begin(arr6), end(arr6), equal_to<mfn_ptr2>{}));\r\n        assert(!equal_fn(begin(arr3), end(arr3), begin(arr7), end(arr7), equal_to<>{}));\r\n        assert2(!equal_fn(begin(arr3), end(arr3), begin(arr7), end(arr7), equal_to<mfn_ptr2>{}));\r\n\r\n        assert(equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<>{}));\r\n        assert(equal_fn(begin(arr4), end(arr4), begin(arr5), end(arr5), equal_to<mfn_ptr2>{}));\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr6), end(arr6), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr6), end(arr6), equal_to<mfn_ptr2>{}));\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr7), end(arr7), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr4), end(arr4), begin(arr7), end(arr7), equal_to<mfn_ptr2>{}));\r\n\r\n        assert(!equal_fn(begin(arr6), end(arr6), begin(arr7), end(arr7), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr6), end(arr6), begin(arr7), end(arr7), equal_to<mfn_ptr2>{}));\r\n    }\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    { // Test vector\r\n        vector<int> arr1 = {3, 6, 4, 7, 3};\r\n        vector<int> arr2 = {3, 6, 4, 7, 3};\r\n        vector<int> arr3 = {3, 6, 3, 7, 3};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n    }\r\n\r\n    { // Test array\r\n        array<int, 5> arr1 = {3, 6, 4, 7, 3};\r\n        array<int, 5> arr2 = {3, 6, 4, 7, 3};\r\n        array<int, 5> arr3 = {3, 6, 3, 7, 3};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n    }\r\n\r\n    { // Test comparing array and vector\r\n        vector<int> arr1   = {3, 6, 4, 7, 3};\r\n        array<int, 5> arr2 = {3, 6, 4, 7, 3};\r\n        array<int, 5> arr3 = {3, 6, 3, 7, 3};\r\n        vector<int> arr4   = {3, 6, 3, 7, 3};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr2), end(arr2), begin(arr4), end(arr4), equal_to<>{}));\r\n    }\r\n\r\n    { // Test list\r\n        list<int> arr1 = {3, 6, 4, 7, 3};\r\n        list<int> arr2 = {3, 6, 4, 7, 3};\r\n        list<int> arr3 = {3, 6, 3, 7, 3};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n    }\r\n\r\n    { // Test comparing list and vector\r\n        vector<int> arr1 = {3, 6, 4, 7, 3};\r\n        list<int> arr2   = {3, 6, 4, 7, 3};\r\n        list<int> arr3   = {3, 6, 3, 7, 3};\r\n        vector<int> arr4 = {3, 6, 3, 7, 3};\r\n\r\n        assert(equal_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), equal_to<>{}));\r\n        assert(equal_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), equal_to<>{}));\r\n        assert(!equal_fn(begin(arr2), end(arr2), begin(arr4), end(arr4), equal_to<>{}));\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_algorithms([](auto begin1, auto end1, auto begin2, auto end2, auto pred) {\r\n        return equal(begin1, end1, begin2, end2, pred);\r\n    });\r\n\r\n#if _HAS_CXX20\r\n    test_algorithms([](auto begin1, auto end1, auto begin2, auto end2, auto pred) {\r\n        return ranges::equal(begin1, end1, begin2, end2, pred);\r\n    });\r\n#endif // _HAS_CXX20\r\n}\r\n\r\n#if _HAS_CXX20\r\n// Also test GH-1523, in which std::equal didn't properly convert non-pointer contiguous iterators to pointers.\r\nstruct gh1523_iter {\r\n    // a contiguous_iterator that doesn't unwrap into a pointer\r\n    using iterator_concept  = contiguous_iterator_tag;\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = int;\r\n\r\n    int* ptr = nullptr;\r\n\r\n    int& operator*() const {\r\n        return *ptr;\r\n    }\r\n    gh1523_iter& operator++() {\r\n        return *this;\r\n    }\r\n    gh1523_iter operator++(int) {\r\n        return {};\r\n    }\r\n    gh1523_iter& operator--() {\r\n        return *this;\r\n    }\r\n    gh1523_iter operator--(int) {\r\n        return {};\r\n    }\r\n    ptrdiff_t operator-(const gh1523_iter&) const {\r\n        return 0;\r\n    }\r\n    auto operator<=>(const gh1523_iter&) const = default;\r\n    gh1523_iter& operator-=(ptrdiff_t) {\r\n        return *this;\r\n    }\r\n    gh1523_iter operator-(ptrdiff_t) const {\r\n        return {};\r\n    }\r\n    gh1523_iter& operator+=(ptrdiff_t) {\r\n        return *this;\r\n    }\r\n    gh1523_iter operator+(ptrdiff_t) const {\r\n        return {};\r\n    }\r\n    friend gh1523_iter operator+(ptrdiff_t, const gh1523_iter&) {\r\n        return {};\r\n    }\r\n    int& operator[](ptrdiff_t) const {\r\n        return *ptr;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct pointer_traits<gh1523_iter> {\r\n    using pointer         = gh1523_iter;\r\n    using element_type    = int;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    static int* to_address(const pointer&) noexcept {\r\n        return nullptr;\r\n    }\r\n};\r\nstatic_assert(contiguous_iterator<gh1523_iter>);\r\n\r\nvoid test_gh_1523() { // COMPILE-ONLY\r\n    // GH-1523 Some StdLib algorithms fail /std:c++latest compilation with custom contiguous iterators\r\n    (void) equal(gh1523_iter{}, gh1523_iter{}, gh1523_iter{}, gh1523_iter{});\r\n}\r\n#endif // _HAS_CXX20\r\n"
  },
  {
    "path": "tests/std/tests/GH_000431_equal_memcmp_is_safe/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# /clr:pure compilation doesn't finish in a reasonable amount of time.\r\nRUNALL_INCLUDE ..\\char8_t_impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000431_equal_memcmp_is_safe/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <regex>\r\n#include <string>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#ifdef __clang__\r\nconstexpr bool magic = true;\r\n#else\r\nconstexpr bool magic = false;\r\n#endif\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <bool Expected, class It1, class It2, class Pred = equal_to<>>\r\n[[nodiscard]] constexpr bool assert_equal_memcmp_is_safe() {\r\n    // Top level const should not change the answer\r\n    STATIC_ASSERT(_Equal_memcmp_is_safe<It1, It2, Pred> == Expected);\r\n    STATIC_ASSERT(_Equal_memcmp_is_safe<const It1, It2, Pred> == Expected);\r\n    STATIC_ASSERT(_Equal_memcmp_is_safe<It1, const It2, Pred> == Expected);\r\n    STATIC_ASSERT(_Equal_memcmp_is_safe<const It1, const It2, Pred> == Expected);\r\n    return true;\r\n}\r\n\r\ntemplate <bool Expected, class It1, class ConstIt1, class It2, class ConstIt2, class Pred>\r\n[[nodiscard]] constexpr bool test_equal_memcmp_is_safe_for_iterators() {\r\n    // Const iterators should not change the answer\r\n    STATIC_ASSERT(assert_equal_memcmp_is_safe<Expected, It1, It2, Pred>());\r\n    STATIC_ASSERT(assert_equal_memcmp_is_safe<Expected, ConstIt1, It2, Pred>());\r\n    STATIC_ASSERT(assert_equal_memcmp_is_safe<Expected, It1, ConstIt2, Pred>());\r\n    STATIC_ASSERT(assert_equal_memcmp_is_safe<Expected, ConstIt1, ConstIt2, Pred>());\r\n    return true;\r\n}\r\n\r\ntemplate <bool Expected, class Type1, class Type2, class Pred>\r\n[[nodiscard]] constexpr bool test_equal_memcmp_is_safe_for_pred_helper() {\r\n    STATIC_ASSERT(\r\n        test_equal_memcmp_is_safe_for_iterators<Expected, Type1*, const Type1*, Type2*, const Type2*, Pred>());\r\n    return true;\r\n}\r\n\r\ntemplate <bool Expected, class Type1, class Type2, class Pred>\r\n[[nodiscard]] constexpr bool test_equal_memcmp_is_safe_for_pred() {\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_pred_helper<Expected, Type1, Type2, Pred>());\r\n\r\n    // No volatile\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_pred_helper<false, volatile Type1, Type2, Pred>());\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_pred_helper<false, Type1, volatile Type2, Pred>());\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_pred_helper<false, volatile Type1, volatile Type2, Pred>());\r\n    return true;\r\n}\r\n\r\ntemplate <bool Expected, class Type1, class Type2>\r\n[[nodiscard]] constexpr bool test_equal_memcmp_is_safe_for_types() {\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<Expected, Type1, Type2, equal_to<>>());\r\n\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, Type1, Type2, equal_to<list<int>>>());\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, Type1, Type2, equal_to<volatile Type1>>());\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, Type1, Type2, equal_to<const volatile Type1>>());\r\n\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, Type1, Type2, not_equal_to<>>());\r\n\r\n#if _HAS_CXX20\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<Expected, Type1, Type2, ranges::equal_to>());\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, Type1, Type2, ranges::not_equal_to>());\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX17\r\n    auto lambda = [](auto&&, auto&&) { return false; };\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, Type1, Type2, decltype(lambda)>());\r\n#endif // _HAS_CXX17\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <bool Expected, class Type1, class Type2>\r\n[[nodiscard]] constexpr bool test_equal_memcmp_is_safe_for_pointers() {\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_types<Expected, Type1*, Type2*>());\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_types<Expected, const Type1*, Type2*>());\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_types<Expected, Type1*, const Type2*>());\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_types<Expected, const Type1*, const Type2*>());\r\n    return true;\r\n}\r\n\r\ntemplate <bool Expected, class Type1, class Type2>\r\n[[nodiscard]] constexpr bool test_equal_memcmp_is_safe_for_pointers_with_volatile() {\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<Expected, Type1, Type2>());\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<Expected, volatile Type1, Type2>());\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<Expected, Type1, volatile Type2>());\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<Expected, volatile Type1, volatile Type2>());\r\n    return true;\r\n}\r\n\r\ntemplate <bool Expected, class Container1, class Container2, class Pred = equal_to<>>\r\n[[nodiscard]] constexpr bool test_equal_memcmp_is_safe_for_containers() {\r\n    using It1      = typename Container1::iterator;\r\n    using ConstIt1 = typename Container1::const_iterator;\r\n    using It2      = typename Container2::iterator;\r\n    using ConstIt2 = typename Container2::const_iterator;\r\n    STATIC_ASSERT(test_equal_memcmp_is_safe_for_iterators<Expected, It1, ConstIt1, It2, ConstIt2, Pred>());\r\n    return true;\r\n}\r\n\r\nenum int_enum : int {};\r\nenum short_enum : short {};\r\nenum char_enum : char {};\r\nenum bool_enum : bool {};\r\n\r\nenum class int_enum_class : int {};\r\nenum class short_enum_class : short {};\r\nenum class char_enum_class : char {};\r\nenum class bool_enum_class : bool {};\r\n\r\nstruct EmptyBase {};\r\n\r\nstruct EmptyDerived : EmptyBase {};\r\n\r\nstruct EmptyPrivatelyDerived : private EmptyBase {};\r\n\r\nstruct StatefulBase {\r\n    int i;\r\n\r\n    bool operator==(const StatefulBase& right) const noexcept {\r\n        return i == right.i;\r\n    }\r\n};\r\n\r\nstruct StatefulDerived : StatefulBase, EmptyBase {};\r\n\r\nstruct StatefulPrivatelyDerived : private StatefulBase, private EmptyBase {};\r\n\r\nstruct StatefulDerived2 : EmptyBase, StatefulBase {};\r\n\r\nstruct StatefulPrivatelyDerived2 : private EmptyBase, private StatefulBase {};\r\n\r\n#if _HAS_CXX20\r\nstruct DefaultComparison {\r\n    int i;\r\n\r\n    bool operator==(const DefaultComparison&) const noexcept = default;\r\n};\r\n\r\nstruct DefaultComparisonOddSize {\r\n    int i;\r\n    int j;\r\n    int k;\r\n\r\n    bool operator==(const DefaultComparisonOddSize&) const noexcept = default;\r\n};\r\n#endif // _HAS_CXX20\r\n\r\n#ifdef __cpp_lib_is_pointer_interconvertible\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<EmptyBase, EmptyDerived>);\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<EmptyBase, EmptyPrivatelyDerived>);\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<StatefulBase, StatefulDerived>);\r\n#ifndef __EDG__ // TRANSITION, VSO-1849453\r\nSTATIC_ASSERT(!is_pointer_interconvertible_base_of_v<EmptyBase, StatefulDerived>);\r\n#endif // ^^^ no workaround ^^^\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<StatefulBase, StatefulPrivatelyDerived>);\r\n#ifndef __EDG__ // TRANSITION, VSO-1849453\r\nSTATIC_ASSERT(!is_pointer_interconvertible_base_of_v<EmptyBase, StatefulPrivatelyDerived>);\r\n#endif // ^^^ no workaround ^^^\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<StatefulBase, StatefulDerived2>);\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<EmptyBase, StatefulDerived2>);\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<StatefulBase, StatefulPrivatelyDerived2>);\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<EmptyBase, StatefulPrivatelyDerived2>);\r\n#endif // __cpp_lib_is_pointer_interconvertible\r\n\r\n// Test identical integrals\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, bool, bool>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, signed char, signed char>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, unsigned char, unsigned char>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, short, short>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, unsigned short, unsigned short>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, int, int>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, unsigned int, unsigned int>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, long, long>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, unsigned long, unsigned long>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, long long, long long>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, unsigned long long, unsigned long long>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, char, char>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, wchar_t, wchar_t>());\r\n#ifdef __cpp_lib_char8_t\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, char8_t, char8_t>());\r\n#endif // __cpp_lib_char8_t\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, char16_t, char16_t>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, char32_t, char32_t>());\r\n\r\n// Don't allow different size integrals\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, short, int>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, long long, int>());\r\n\r\n// Signedness must be the same if usual arithmetic conversions are not bits-preserving\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<is_signed_v<char>, char, signed char>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<is_signed_v<char>, signed char, char>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<is_unsigned_v<char>, char, unsigned char>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<is_unsigned_v<char>, unsigned char, char>());\r\n#ifdef __cpp_lib_char8_t\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<is_unsigned_v<char>, char, char8_t>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<is_unsigned_v<char>, char8_t, char>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, char8_t, signed char>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, signed char, char8_t>());\r\n#endif // __cpp_lib_char8_t\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, signed char, unsigned char>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, unsigned char, signed char>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, short, unsigned short>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, unsigned short, short>());\r\n\r\n// But if UACs don't change bits the signedness can differ\r\n#ifdef __cpp_lib_char8_t\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, unsigned char, char8_t>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, char8_t, unsigned char>());\r\n#endif // __cpp_lib_char8_t\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, int, unsigned int>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, unsigned int, int>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, long, unsigned long>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, unsigned long, long>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<sizeof(int) == sizeof(long), int, long>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<sizeof(int) == sizeof(long), long, int>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<sizeof(int) == sizeof(long), unsigned int, long>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<sizeof(int) == sizeof(long), unsigned long, int>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<sizeof(int) == sizeof(long), int, unsigned long>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<sizeof(int) == sizeof(long), long, unsigned int>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<sizeof(int) == sizeof(long), unsigned int, unsigned long>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<sizeof(int) == sizeof(long), unsigned long, unsigned int>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, long long, unsigned long long>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, unsigned long long, long long>());\r\n\r\n// It can also differ if we explicitly convert them\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, char, signed char, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, signed char, char, equal_to<unsigned char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, char, unsigned char, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, unsigned char, char, equal_to<signed char>>());\r\n#ifdef __cpp_lib_char8_t\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, char, char8_t, equal_to<unsigned char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, char8_t, char, equal_to<signed char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, char8_t, signed char, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, signed char, char8_t, equal_to<char8_t>>());\r\n#endif // __cpp_lib_char8_t\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, signed char, unsigned char, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, unsigned char, signed char, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, short, unsigned short, equal_to<short>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, unsigned short, short, equal_to<unsigned short>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<sizeof(int) == sizeof(long), int, int, equal_to<unsigned long>>());\r\nSTATIC_ASSERT(\r\n    test_equal_memcmp_is_safe_for_pred<sizeof(int) == sizeof(long), unsigned int, int, equal_to<unsigned long>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<sizeof(int) == sizeof(long), int, unsigned int, equal_to<long>>());\r\nSTATIC_ASSERT(\r\n    test_equal_memcmp_is_safe_for_pred<sizeof(int) == sizeof(long), unsigned int, unsigned int, equal_to<long>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<sizeof(int) == sizeof(long), long, long, equal_to<unsigned int>>());\r\nSTATIC_ASSERT(\r\n    test_equal_memcmp_is_safe_for_pred<sizeof(int) == sizeof(long), unsigned long, long, equal_to<unsigned int>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<sizeof(int) == sizeof(long), long, unsigned long, equal_to<int>>());\r\nSTATIC_ASSERT(\r\n    test_equal_memcmp_is_safe_for_pred<sizeof(int) == sizeof(long), unsigned long, unsigned long, equal_to<int>>());\r\n\r\n// It is safe to use memcmp between bool and other integral types with the same size because we don't care about\r\n// representations other than 0 and 1\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, bool, char>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, char, bool>());\r\n\r\n// Need to be careful when pred is equal_to<bool> or equal_to<const bool>\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, bool, bool, equal_to<bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, char, bool, equal_to<bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, bool, char, equal_to<bool>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, bool, bool, equal_to<const bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, char, bool, equal_to<const bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, bool, char, equal_to<const bool>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, char, char, equal_to<bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, signed char, signed char, equal_to<bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, unsigned char, unsigned char, equal_to<bool>>());\r\n\r\n// Don't allow enums and enum classes\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, int_enum, int_enum>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, short_enum, short_enum>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, char_enum, char_enum>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, bool_enum, bool_enum>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, int_enum, int>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, int, int_enum>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, short_enum, short>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, short, short_enum>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, char_enum, char>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, char, char_enum>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, bool_enum, bool>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, bool, bool_enum>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, int_enum_class, int_enum_class>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, short_enum_class, short_enum_class>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, char_enum_class, char_enum_class>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, bool_enum_class, bool_enum_class>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, int_enum_class, int>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, int, int_enum_class>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, short_enum_class, short>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, short, short_enum_class>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, char_enum_class, char>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, char, char_enum_class>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, bool_enum_class, bool>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, bool, bool_enum_class>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, bool_enum, char_enum>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, char_enum, bool_enum>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, bool_enum, char>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, char, bool_enum>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, char_enum, bool>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, bool, char_enum>());\r\n\r\n// But allow enums if we explicitly convert them\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, int_enum, int_enum, equal_to<int>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, short_enum, short_enum, equal_to<short>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, char_enum, char_enum, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, bool_enum, bool_enum, equal_to<bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, int_enum, int, equal_to<int>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, int, int_enum, equal_to<int>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, short_enum, short, equal_to<short>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, short, short_enum, equal_to<short>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, char_enum, char, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, char, char_enum, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, bool_enum, bool, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, bool, bool_enum, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, bool_enum, bool, equal_to<bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, bool, bool_enum, equal_to<bool>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, bool_enum, char_enum, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, char_enum, bool_enum, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, bool_enum, char, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, char, bool_enum, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, char_enum, bool, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, bool, char_enum, equal_to<char>>());\r\n\r\n// Again need to be careful with equal_to<bool> and equal_to<const bool>\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, bool_enum, char_enum, equal_to<bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, char_enum, bool_enum, equal_to<bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, bool_enum, char, equal_to<bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, char, bool_enum, equal_to<bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, char_enum, bool, equal_to<bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, bool, char_enum, equal_to<bool>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, bool_enum, char_enum, equal_to<const bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, char_enum, bool_enum, equal_to<const bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, bool_enum, char, equal_to<const bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, char, bool_enum, equal_to<const bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, char_enum, bool, equal_to<const bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, bool, char_enum, equal_to<const bool>>());\r\n\r\n// Enum classes are not convertible\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, int_enum_class, int_enum_class, equal_to<int>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, short_enum_class, short_enum_class, equal_to<short>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, char_enum_class, char_enum_class, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, bool_enum_class, bool_enum_class, equal_to<bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, int_enum_class, int, equal_to<int>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, int, int_enum_class, equal_to<int>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, short_enum_class, short, equal_to<short>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, short, short_enum_class, equal_to<short>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, char_enum_class, char, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, char, char_enum_class, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, bool_enum_class, bool, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, bool, bool_enum_class, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, bool_enum_class, bool, equal_to<bool>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, bool, bool_enum_class, equal_to<bool>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, bool_enum_class, char_enum_class, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, char_enum_class, bool_enum_class, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, bool_enum_class, char, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, char, bool_enum_class, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, char_enum_class, bool, equal_to<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, bool, char_enum_class, equal_to<char>>());\r\n\r\n#ifdef __cpp_lib_byte\r\n// Test std::byte\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, byte, byte>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, byte, unsigned char>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, unsigned char, byte>());\r\n#endif // __cpp_lib_byte\r\n\r\n// Don't allow floating point\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, float, float>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, double, double>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, double, long double>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, long double, double>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, float, int>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, int, float>());\r\n\r\n// Test pointers\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers_with_volatile<true, int, int>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers_with_volatile<true, void, void>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers_with_volatile<true, int, void>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers_with_volatile<true, void, int>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<false, int, long>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<false, unsigned int, int>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, int*, int*, equal_to<int*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, int*, int*, equal_to<const int*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, int*, int*, equal_to<volatile int*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, int*, int*, equal_to<const volatile int*>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, const int*, int*, equal_to<int*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, const int*, int*, equal_to<const int*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, const int*, int*, equal_to<volatile int*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, const int*, int*, equal_to<const volatile int*>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, volatile int*, int*, equal_to<int*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, volatile int*, int*, equal_to<const int*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, volatile int*, int*, equal_to<volatile int*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, volatile int*, int*, equal_to<const volatile int*>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, int*, int*, equal_to<void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, int*, int*, equal_to<const void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, int*, int*, equal_to<volatile void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, int*, int*, equal_to<const volatile void*>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, const int*, int*, equal_to<void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, const int*, int*, equal_to<const void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, const int*, int*, equal_to<volatile void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, const int*, int*, equal_to<const volatile void*>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, volatile int*, int*, equal_to<void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, volatile int*, int*, equal_to<const void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, volatile int*, int*, equal_to<volatile void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, volatile int*, int*, equal_to<const volatile void*>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, int*, void*, equal_to<void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, int*, void*, equal_to<const void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, int*, void*, equal_to<volatile void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, int*, void*, equal_to<const volatile void*>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, const int*, void*, equal_to<void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, const int*, void*, equal_to<const void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, const int*, void*, equal_to<volatile void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, const int*, void*, equal_to<const volatile void*>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, volatile int*, void*, equal_to<void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, volatile int*, void*, equal_to<const void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, volatile int*, void*, equal_to<volatile void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, volatile int*, void*, equal_to<const volatile void*>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, void*, void*, equal_to<void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, void*, void*, equal_to<const void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, void*, void*, equal_to<volatile void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, void*, void*, equal_to<const volatile void*>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, const void*, void*, equal_to<void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, const void*, void*, equal_to<const void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, const void*, void*, equal_to<volatile void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, const void*, void*, equal_to<const volatile void*>>());\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, volatile void*, void*, equal_to<void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<false, volatile void*, void*, equal_to<const void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, volatile void*, void*, equal_to<volatile void*>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, volatile void*, void*, equal_to<const volatile void*>>());\r\n\r\n// Test pointers to derived classes\r\nconstexpr bool enable_derived_to_base =\r\n#ifdef __cpp_lib_is_pointer_interconvertible\r\n    true\r\n#else // ^^^ __cpp_lib_is_pointer_interconvertible / !__cpp_lib_is_pointer_interconvertible vvv\r\n    false\r\n#endif // ^^^ !__cpp_lib_is_pointer_interconvertible ^^^\r\n    ;\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<true, EmptyBase, EmptyBase>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<true, EmptyDerived, EmptyDerived>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<enable_derived_to_base, EmptyDerived, EmptyBase>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<enable_derived_to_base, EmptyBase, EmptyDerived>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<enable_derived_to_base, StatefulDerived, StatefulBase>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<enable_derived_to_base, StatefulBase, StatefulDerived>());\r\n#ifndef __EDG__ // TRANSITION, VSO-1849453\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<false, StatefulDerived, EmptyBase>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<false, EmptyBase, StatefulDerived>());\r\n#endif // ^^^ no workaround ^^^\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<enable_derived_to_base, StatefulDerived2, StatefulBase>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<enable_derived_to_base, StatefulBase, StatefulDerived2>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<enable_derived_to_base, StatefulDerived2, EmptyBase>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<enable_derived_to_base, EmptyBase, StatefulDerived2>());\r\n\r\n// Don't allow privately derived\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<false, EmptyPrivatelyDerived, EmptyBase>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<false, EmptyBase, EmptyPrivatelyDerived>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<false, StatefulPrivatelyDerived, StatefulBase>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<false, StatefulBase, StatefulPrivatelyDerived>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<false, StatefulPrivatelyDerived2, StatefulBase>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<false, StatefulBase, StatefulPrivatelyDerived2>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<false, StatefulPrivatelyDerived2, EmptyBase>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pointers<false, EmptyBase, StatefulPrivatelyDerived2>());\r\n\r\n// Test function pointers\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<true, void (*)(int), void (*)(int)>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, void (*)(int), void (*)()>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, void (*)(), void (*)(int)>());\r\n\r\n// Converting from function pointers to void pointers is a non-standard extension\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<is_convertible_v<void (*)(int), void*>, void (*)(int), void*>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<is_convertible_v<void (*)(int), void*>, void*, void (*)(int)>());\r\n\r\n// Don't allow member object pointers, unless magic happens\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<magic, int EmptyBase::*, int EmptyBase::*>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<magic, int EmptyDerived::*, int EmptyDerived::*>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, int EmptyBase::*, int EmptyDerived::*>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, int EmptyDerived::*, int EmptyBase::*>());\r\n\r\n// Don't allow member function pointers, unless magic happens\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<magic, int (EmptyBase::*)(), int (EmptyBase::*)()>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<magic, int (EmptyDerived::*)(), int (EmptyDerived::*)()>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, int (EmptyBase::*)(), int (EmptyDerived::*)()>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, int (EmptyDerived::*)(), int (EmptyBase::*)()>());\r\n\r\n// Don't allow user-defined types\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<false, StatefulBase, StatefulBase>());\r\n\r\n#if _HAS_CXX20\r\n// Don't allow user-defined types with default comparison, unless magic happens\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<magic, DefaultComparison, DefaultComparison>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_types<magic, DefaultComparisonOddSize, DefaultComparisonOddSize>());\r\n// The only difference between _Equal_memcmp_is_safe and _Vector_alg_in_search_is_safe is how the magic works\r\nSTATIC_ASSERT(_Equal_memcmp_is_safe<DefaultComparison*, DefaultComparison*, equal_to<>> == magic);\r\nSTATIC_ASSERT(_Equal_memcmp_is_safe<DefaultComparisonOddSize*, DefaultComparisonOddSize*, equal_to<>> == magic);\r\n#if _VECTORIZED_SEARCH || _VECTORIZED_ADJACENT_FIND || _VECTORIZED_FIND_END || _VECTORIZED_FIND_FIRST_OF \\\r\n    || _VECTORIZED_UNIQUE || _VECTORIZED_UNIQUE_COPY\r\nSTATIC_ASSERT(_Vector_alg_in_search_is_safe<DefaultComparison*, DefaultComparison*, equal_to<>> == magic);\r\nSTATIC_ASSERT(!_Vector_alg_in_search_is_safe<DefaultComparisonOddSize*, DefaultComparisonOddSize*, equal_to<>>);\r\n#endif // ^^^ _Vector_alg_in_search_is_safe is available ^^^\r\n#endif // _HAS_CXX20\r\n\r\n// Test _Std_char_traits_eq\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, char, char, _Std_char_traits_eq<char>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, wchar_t, wchar_t, _Std_char_traits_eq<wchar_t>>());\r\n#ifdef __cpp_lib_char8_t\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, char8_t, char8_t, _Std_char_traits_eq<char8_t>>());\r\n#endif // __cpp_lib_char8_t\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, char16_t, char16_t, _Std_char_traits_eq<char16_t>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_pred<true, char32_t, char32_t, _Std_char_traits_eq<char32_t>>());\r\n\r\n// Test different containers\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_containers<true, vector<int>, vector<int>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_containers<true, array<int, 8>, array<int, 8>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_containers<true, vector<int>, array<int, 8>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_containers<true, array<int, 8>, vector<int>>());\r\n#endif // _HAS_CXX20\r\n\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_containers<false, list<int>, list<int>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_containers<false, vector<int>, list<int>>());\r\nSTATIC_ASSERT(test_equal_memcmp_is_safe_for_containers<false, list<int>, vector<int>>());\r\n\r\n#if _HAS_CXX20\r\n// Test counted_iterator\r\nSTATIC_ASSERT(assert_equal_memcmp_is_safe<true, counted_iterator<int*>, int*>());\r\nSTATIC_ASSERT(assert_equal_memcmp_is_safe<true, int*, counted_iterator<int*>>());\r\nSTATIC_ASSERT(assert_equal_memcmp_is_safe<true, counted_iterator<int*>, counted_iterator<int*>>());\r\n#endif // _HAS_CXX20\r\n"
  },
  {
    "path": "tests/std/tests/GH_000431_iter_copy_move_cat/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000431_iter_copy_move_cat/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cstddef>\r\n#include <iterator>\r\n#include <list>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#if _HAS_CXX17\r\n#include <string_view>\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n#include <span>\r\n#endif // _HAS_CXX20\r\n\r\n#pragma warning(disable : 4984) // 'if constexpr' is a C++17 language extension\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wc++17-extensions\" // constexpr if is a C++17 extension\r\n#endif // __clang__\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <bool ExpectedConstructible, bool ExpectedAssignable, class IterCat>\r\nvoid assert_iter_cat() {\r\n    STATIC_ASSERT(IterCat::_Bitcopy_constructible == ExpectedConstructible);\r\n    STATIC_ASSERT(IterCat::_Bitcopy_assignable == ExpectedAssignable);\r\n}\r\n\r\ntemplate <bool ExpectedCopyConstructible, bool ExpectedMoveConstructible, bool ExpectedCopyAssignable,\r\n    bool ExpectedMoveAssignable, class SourceIt, class DestIt>\r\nvoid test_iter_cat() {\r\n    assert_iter_cat<ExpectedCopyConstructible, ExpectedCopyAssignable, _Iter_copy_cat<SourceIt, DestIt>>();\r\n    assert_iter_cat<ExpectedMoveConstructible, ExpectedMoveAssignable,\r\n        _Iter_copy_cat<move_iterator<SourceIt>, DestIt>>();\r\n    assert_iter_cat<ExpectedMoveConstructible, ExpectedMoveAssignable, _Iter_move_cat<SourceIt, DestIt>>();\r\n    assert_iter_cat<ExpectedMoveConstructible, ExpectedMoveAssignable,\r\n        _Iter_move_cat<move_iterator<SourceIt>, DestIt>>();\r\n}\r\n\r\ntemplate <bool ExpectedCopyConstructible, bool ExpectedMoveConstructible, bool ExpectedCopyAssignable,\r\n    bool ExpectedMoveAssignable, class SourceIt, class ConstSourceIt, class DestIt, class ConstDestIt>\r\nvoid test_iter_cat_for_iterators() {\r\n    test_iter_cat<ExpectedCopyConstructible, ExpectedMoveConstructible, ExpectedCopyAssignable, ExpectedMoveAssignable,\r\n        SourceIt, DestIt>();\r\n    test_iter_cat<ExpectedCopyConstructible, ExpectedCopyConstructible, ExpectedCopyAssignable, ExpectedCopyAssignable,\r\n        ConstSourceIt, DestIt>();\r\n\r\n    // Assigning to ConstDestIt doesn't make any sense but constructing is fine\r\n    test_iter_cat<ExpectedCopyConstructible, ExpectedMoveConstructible, false, false, SourceIt, ConstDestIt>();\r\n    test_iter_cat<ExpectedCopyConstructible, ExpectedCopyConstructible, false, false, ConstSourceIt, ConstDestIt>();\r\n}\r\n\r\ntemplate <bool ExpectedCopyConstructible, bool ExpectedMoveConstructible, bool ExpectedCopyAssignable,\r\n    bool ExpectedMoveAssignable, class Source, class Dest = Source>\r\nvoid test_iter_cat_for_types() {\r\n    test_iter_cat_for_iterators<ExpectedCopyConstructible, ExpectedMoveConstructible, ExpectedCopyAssignable,\r\n        ExpectedMoveAssignable, Source*, const Source*, Dest*, const Dest*>();\r\n}\r\n\r\ntemplate <bool Expected, class Source, class Dest>\r\nvoid test_iter_cat_for_trivially_copyable_types() {\r\n    test_iter_cat_for_types<Expected, Expected, Expected, Expected, Source, Dest>();\r\n}\r\n\r\ntemplate <bool Expected, class Int1, class Int2>\r\nvoid test_iter_cat_for_integrals_helper() {\r\n    enum Enum1 : Int1 {};\r\n    enum Enum2 : Int2 {};\r\n    enum class EnumClass1 : Int1 {};\r\n    enum class EnumClass2 : Int2 {};\r\n\r\n    test_iter_cat_for_trivially_copyable_types<Expected, Int1, Int2>();\r\n\r\n    test_iter_cat_for_trivially_copyable_types<Expected, Enum1, Int2>();\r\n\r\n    if constexpr (is_same_v<Int1, Int2>) {\r\n        // Allow enum and enum class\r\n        test_iter_cat_for_trivially_copyable_types<true, Enum1, Enum1>();\r\n        test_iter_cat_for_trivially_copyable_types<true, EnumClass1, EnumClass1>();\r\n    }\r\n\r\n    // Don't allow conversion from int to enum (since that requires a cast):\r\n    test_iter_cat_for_trivially_copyable_types<false, Int1, Enum2>();\r\n\r\n    // Similarly, don't allow enum class types to be implicitly converted to/from integral types\r\n    test_iter_cat_for_trivially_copyable_types<false, Int1, EnumClass2>();\r\n    test_iter_cat_for_trivially_copyable_types<false, EnumClass1, Int2>();\r\n\r\n    // Don't allow conversions between enums\r\n    test_iter_cat_for_trivially_copyable_types<false, Enum1, Enum2>();\r\n    test_iter_cat_for_trivially_copyable_types<false, EnumClass1, EnumClass2>();\r\n    test_iter_cat_for_trivially_copyable_types<false, Enum1, EnumClass2>();\r\n    test_iter_cat_for_trivially_copyable_types<false, EnumClass1, Enum2>();\r\n}\r\n\r\ntemplate <bool Expected, class Int1, class Int2>\r\nvoid test_iter_cat_for_integrals() {\r\n    test_iter_cat_for_integrals_helper<Expected, Int1, Int2>();\r\n\r\n    if constexpr (!is_same_v<Int1, bool>) {\r\n        using UInt1 = make_unsigned_t<Int1>;\r\n\r\n        // Signedness shouldn't change answer\r\n        test_iter_cat_for_integrals_helper<Expected, UInt1, Int2>();\r\n    }\r\n\r\n    if constexpr (!is_same_v<Int2, bool>) {\r\n        using UInt2 = make_unsigned_t<Int2>;\r\n\r\n        // Signedness shouldn't change answer\r\n        test_iter_cat_for_integrals_helper<Expected, Int1, UInt2>();\r\n    }\r\n\r\n    if constexpr (!is_same_v<Int1, bool> && !is_same_v<Int2, bool>) {\r\n        using UInt1 = make_unsigned_t<Int1>;\r\n        using UInt2 = make_unsigned_t<Int2>;\r\n\r\n        // Signedness shouldn't change answer\r\n        test_iter_cat_for_integrals_helper<Expected, UInt1, UInt2>();\r\n    }\r\n}\r\n\r\ntemplate <bool Expected, class Char1, class Char2>\r\nvoid test_iter_cat_for_char_types() {\r\n    using SInt1 = make_signed_t<Char1>;\r\n    using UInt1 = make_unsigned_t<Char1>;\r\n    using SInt2 = make_signed_t<Char2>;\r\n    using UInt2 = make_unsigned_t<Char2>;\r\n\r\n    test_iter_cat_for_integrals_helper<Expected, Char1, Char2>();\r\n    test_iter_cat_for_integrals_helper<Expected, SInt1, Char2>();\r\n    test_iter_cat_for_integrals_helper<Expected, UInt1, Char2>();\r\n    test_iter_cat_for_integrals_helper<Expected, Char1, SInt2>();\r\n    test_iter_cat_for_integrals_helper<Expected, Char1, UInt2>();\r\n}\r\n\r\ntemplate <bool Expected, class Elem1, class Elem2>\r\nvoid test_iter_cat_for_pointers() {\r\n    test_iter_cat_for_trivially_copyable_types<Expected, Elem1*, Elem2*>();\r\n    test_iter_cat_for_trivially_copyable_types<Expected, Elem1*, const Elem2*>();\r\n    test_iter_cat_for_trivially_copyable_types<Expected, const Elem1*, const Elem2*>();\r\n\r\n    test_iter_cat_for_trivially_copyable_types<false, const Elem1*, Elem2*>();\r\n}\r\n\r\ntemplate <bool Expected, class Elem1, class Elem2>\r\nvoid test_iter_cat_for_pointers_with_volatile() {\r\n    test_iter_cat_for_pointers<Expected, Elem1, Elem2>();\r\n    test_iter_cat_for_pointers<Expected, Elem1, volatile Elem2>();\r\n    test_iter_cat_for_pointers<Expected, volatile Elem1, volatile Elem2>();\r\n\r\n    test_iter_cat_for_pointers<false, volatile Elem1, Elem2>();\r\n}\r\n\r\ntemplate <bool Expected, class SourceContainer, class DestContainer>\r\nvoid test_iter_cat_for_containers() {\r\n    using SourceIt      = typename SourceContainer::iterator;\r\n    using ConstSourceIt = typename SourceContainer::const_iterator;\r\n    using DestIt        = typename DestContainer::iterator;\r\n    using ConstDestIt   = typename DestContainer::const_iterator;\r\n    test_iter_cat_for_iterators<Expected, Expected, Expected, Expected, SourceIt, ConstSourceIt, DestIt, ConstDestIt>();\r\n}\r\n\r\nstruct TrivialStruct {\r\n    int i;\r\n};\r\nSTATIC_ASSERT(is_trivially_copyable_v<TrivialStruct>);\r\nSTATIC_ASSERT(is_trivially_default_constructible_v<TrivialStruct>);\r\n\r\nstruct TriviallyCopyableStruct {\r\n    int i;\r\n    TriviallyCopyableStruct();\r\n};\r\nSTATIC_ASSERT(is_trivially_copyable_v<TriviallyCopyableStruct>);\r\nSTATIC_ASSERT(!is_trivially_default_constructible_v<TriviallyCopyableStruct>);\r\n\r\nstruct TriviallyMovableStruct {\r\n    int i;\r\n    TriviallyMovableStruct();\r\n    TriviallyMovableStruct(const TriviallyMovableStruct&)            = delete;\r\n    TriviallyMovableStruct(TriviallyMovableStruct&&)                 = default;\r\n    TriviallyMovableStruct& operator=(const TriviallyMovableStruct&) = delete;\r\n    TriviallyMovableStruct& operator=(TriviallyMovableStruct&&)      = default;\r\n};\r\nSTATIC_ASSERT(is_trivially_copyable_v<TriviallyMovableStruct>);\r\nSTATIC_ASSERT(!is_trivially_default_constructible_v<TriviallyMovableStruct>);\r\n\r\nstruct TriviallyConstructibleStruct {\r\n    int i;\r\n    TriviallyConstructibleStruct();\r\n    TriviallyConstructibleStruct(const TriviallyConstructibleStruct&) = default;\r\n    TriviallyConstructibleStruct(TriviallyConstructibleStruct&&)      = default;\r\n\r\n    TriviallyConstructibleStruct& operator=(const TriviallyConstructibleStruct&);\r\n    TriviallyConstructibleStruct& operator=(TriviallyConstructibleStruct&&);\r\n};\r\nSTATIC_ASSERT(is_trivially_copy_constructible_v<TriviallyConstructibleStruct>);\r\nSTATIC_ASSERT(is_trivially_move_constructible_v<TriviallyConstructibleStruct>);\r\nSTATIC_ASSERT(!is_trivially_copy_assignable_v<TriviallyConstructibleStruct>);\r\nSTATIC_ASSERT(!is_trivially_move_assignable_v<TriviallyConstructibleStruct>);\r\nSTATIC_ASSERT(!is_trivially_copyable_v<TriviallyConstructibleStruct>);\r\nSTATIC_ASSERT(!is_trivially_default_constructible_v<TriviallyConstructibleStruct>);\r\n\r\nstruct TriviallyAssignableStruct {\r\n    int i;\r\n    TriviallyAssignableStruct();\r\n    TriviallyAssignableStruct(const TriviallyAssignableStruct&);\r\n    TriviallyAssignableStruct(TriviallyAssignableStruct&&);\r\n\r\n    TriviallyAssignableStruct& operator=(const TriviallyAssignableStruct&) = default;\r\n    TriviallyAssignableStruct& operator=(TriviallyAssignableStruct&&)      = default;\r\n};\r\nSTATIC_ASSERT(!is_trivially_copy_constructible_v<TriviallyAssignableStruct>);\r\nSTATIC_ASSERT(!is_trivially_move_constructible_v<TriviallyAssignableStruct>);\r\nSTATIC_ASSERT(is_trivially_copy_assignable_v<TriviallyAssignableStruct>);\r\nSTATIC_ASSERT(is_trivially_move_assignable_v<TriviallyAssignableStruct>);\r\nSTATIC_ASSERT(!is_trivially_copyable_v<TriviallyAssignableStruct>);\r\nSTATIC_ASSERT(!is_trivially_default_constructible_v<TriviallyAssignableStruct>);\r\n\r\nstruct TriviallyCopyConstructibleStruct {\r\n    int i;\r\n    TriviallyCopyConstructibleStruct();\r\n    TriviallyCopyConstructibleStruct(const TriviallyCopyConstructibleStruct&) = default;\r\n    TriviallyCopyConstructibleStruct(TriviallyCopyConstructibleStruct&&);\r\n\r\n    TriviallyCopyConstructibleStruct& operator=(const TriviallyCopyConstructibleStruct&);\r\n    TriviallyCopyConstructibleStruct& operator=(TriviallyCopyConstructibleStruct&&);\r\n};\r\nSTATIC_ASSERT(is_trivially_copy_constructible_v<TriviallyCopyConstructibleStruct>);\r\nSTATIC_ASSERT(!is_trivially_move_constructible_v<TriviallyCopyConstructibleStruct>);\r\nSTATIC_ASSERT(!is_trivially_copy_assignable_v<TriviallyCopyConstructibleStruct>);\r\nSTATIC_ASSERT(!is_trivially_move_assignable_v<TriviallyCopyConstructibleStruct>);\r\nSTATIC_ASSERT(!is_trivially_copyable_v<TriviallyCopyConstructibleStruct>);\r\nSTATIC_ASSERT(!is_trivially_default_constructible_v<TriviallyCopyConstructibleStruct>);\r\n\r\nstruct TriviallyCopyAssignableStruct {\r\n    int i;\r\n    TriviallyCopyAssignableStruct();\r\n    TriviallyCopyAssignableStruct(const TriviallyCopyAssignableStruct&);\r\n    TriviallyCopyAssignableStruct(TriviallyCopyAssignableStruct&&);\r\n\r\n    TriviallyCopyAssignableStruct& operator=(const TriviallyCopyAssignableStruct&) = default;\r\n\r\n    TriviallyCopyAssignableStruct& operator=(TriviallyCopyAssignableStruct&&);\r\n};\r\nSTATIC_ASSERT(!is_trivially_copy_constructible_v<TriviallyCopyAssignableStruct>);\r\nSTATIC_ASSERT(!is_trivially_move_constructible_v<TriviallyCopyAssignableStruct>);\r\nSTATIC_ASSERT(is_trivially_copy_assignable_v<TriviallyCopyAssignableStruct>);\r\nSTATIC_ASSERT(!is_trivially_move_assignable_v<TriviallyCopyAssignableStruct>);\r\nSTATIC_ASSERT(!is_trivially_copyable_v<TriviallyCopyAssignableStruct>);\r\nSTATIC_ASSERT(!is_trivially_default_constructible_v<TriviallyCopyAssignableStruct>);\r\n\r\nstruct TriviallyMoveConstructibleStruct {\r\n    int i;\r\n    TriviallyMoveConstructibleStruct();\r\n    TriviallyMoveConstructibleStruct(const TriviallyMoveConstructibleStruct&);\r\n    TriviallyMoveConstructibleStruct(TriviallyMoveConstructibleStruct&&) = default;\r\n\r\n    TriviallyMoveConstructibleStruct& operator=(const TriviallyMoveConstructibleStruct&);\r\n    TriviallyMoveConstructibleStruct& operator=(TriviallyMoveConstructibleStruct&&);\r\n};\r\nSTATIC_ASSERT(!is_trivially_copy_constructible_v<TriviallyMoveConstructibleStruct>);\r\nSTATIC_ASSERT(is_trivially_move_constructible_v<TriviallyMoveConstructibleStruct>);\r\nSTATIC_ASSERT(!is_trivially_copy_assignable_v<TriviallyMoveConstructibleStruct>);\r\nSTATIC_ASSERT(!is_trivially_move_assignable_v<TriviallyMoveConstructibleStruct>);\r\nSTATIC_ASSERT(!is_trivially_copyable_v<TriviallyMoveConstructibleStruct>);\r\nSTATIC_ASSERT(!is_trivially_default_constructible_v<TriviallyMoveConstructibleStruct>);\r\n\r\nstruct TriviallyMoveAssignableStruct {\r\n    int i;\r\n    TriviallyMoveAssignableStruct();\r\n    TriviallyMoveAssignableStruct(const TriviallyMoveAssignableStruct&);\r\n    TriviallyMoveAssignableStruct(TriviallyMoveAssignableStruct&&);\r\n\r\n    TriviallyMoveAssignableStruct& operator=(const TriviallyMoveAssignableStruct&);\r\n    TriviallyMoveAssignableStruct& operator=(TriviallyMoveAssignableStruct&&) = default;\r\n};\r\nSTATIC_ASSERT(!is_trivially_copy_constructible_v<TriviallyMoveAssignableStruct>);\r\nSTATIC_ASSERT(!is_trivially_move_constructible_v<TriviallyMoveAssignableStruct>);\r\nSTATIC_ASSERT(!is_trivially_copy_assignable_v<TriviallyMoveAssignableStruct>);\r\nSTATIC_ASSERT(is_trivially_move_assignable_v<TriviallyMoveAssignableStruct>);\r\nSTATIC_ASSERT(!is_trivially_copyable_v<TriviallyMoveAssignableStruct>);\r\nSTATIC_ASSERT(!is_trivially_default_constructible_v<TriviallyMoveAssignableStruct>);\r\n\r\nstruct EmptyBase {};\r\n\r\nstruct EmptyDerived : EmptyBase {};\r\n\r\nstruct EmptyPrivatelyDerived : private EmptyBase {};\r\n\r\nstruct StatefulBase {\r\n    int i;\r\n};\r\n\r\nstruct StatefulDerived : StatefulBase, EmptyBase {};\r\n\r\nstruct StatefulPrivatelyDerived : private StatefulBase, private EmptyBase {};\r\n\r\nstruct StatefulDerived2 : EmptyBase, StatefulBase {};\r\n\r\nstruct StatefulPrivatelyDerived2 : private EmptyBase, private StatefulBase {};\r\n\r\n#ifdef __cpp_lib_is_pointer_interconvertible\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<EmptyBase, EmptyDerived>);\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<EmptyBase, EmptyPrivatelyDerived>);\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<StatefulBase, StatefulDerived>);\r\n#ifndef __EDG__ // TRANSITION, VSO-1849453\r\nSTATIC_ASSERT(!is_pointer_interconvertible_base_of_v<EmptyBase, StatefulDerived>);\r\n#endif // ^^^ no workaround ^^^\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<StatefulBase, StatefulPrivatelyDerived>);\r\n#ifndef __EDG__ // TRANSITION, VSO-1849453\r\nSTATIC_ASSERT(!is_pointer_interconvertible_base_of_v<EmptyBase, StatefulPrivatelyDerived>);\r\n#endif // ^^^ no workaround ^^^\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<StatefulBase, StatefulDerived2>);\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<EmptyBase, StatefulDerived2>);\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<StatefulBase, StatefulPrivatelyDerived2>);\r\nSTATIC_ASSERT(is_pointer_interconvertible_base_of_v<EmptyBase, StatefulPrivatelyDerived2>);\r\n#endif // __cpp_lib_is_pointer_interconvertible\r\n\r\n\r\nvoid iter_cat_test_cases() {\r\n\r\n    // Test compatible integral types\r\n    test_iter_cat_for_integrals<true, bool, bool>();\r\n    test_iter_cat_for_integrals<true, signed char, signed char>();\r\n    test_iter_cat_for_integrals<true, short, short>();\r\n    test_iter_cat_for_integrals<true, int, int>();\r\n    test_iter_cat_for_integrals<true, long, long>();\r\n    test_iter_cat_for_integrals<true, long long, long long>();\r\n\r\n    test_iter_cat_for_integrals<sizeof(int) == sizeof(long), int, long>();\r\n    test_iter_cat_for_integrals<sizeof(int) == sizeof(long), long, int>();\r\n\r\n    test_iter_cat_for_char_types<true, char, char>();\r\n    test_iter_cat_for_char_types<true, wchar_t, wchar_t>();\r\n#ifdef __cpp_lib_char8_t\r\n    test_iter_cat_for_char_types<true, char8_t, char8_t>();\r\n#endif // __cpp_lib_char8_t\r\n    test_iter_cat_for_char_types<true, char16_t, char16_t>();\r\n    test_iter_cat_for_char_types<true, char32_t, char32_t>();\r\n\r\n    // Test bool conversions\r\n    test_iter_cat_for_integrals<true, bool, char>();\r\n    test_iter_cat_for_integrals<false, char, bool>();\r\n    test_iter_cat_for_integrals<false, bool, int>();\r\n    test_iter_cat_for_integrals<false, int, bool>();\r\n\r\n    // Don't allow conversions if sizes differ\r\n    test_iter_cat_for_integrals<false, short, int>();\r\n    test_iter_cat_for_integrals<false, int, short>();\r\n    test_iter_cat_for_integrals<false, long, long long>();\r\n    test_iter_cat_for_integrals<false, long long, long>();\r\n\r\n#ifdef __cpp_lib_byte\r\n    // Test std::byte\r\n    test_iter_cat_for_trivially_copyable_types<true, byte, byte>();\r\n#endif // __cpp_lib_byte\r\n\r\n    // Test floating point\r\n    test_iter_cat_for_trivially_copyable_types<true, float, float>();\r\n    test_iter_cat_for_trivially_copyable_types<true, double, double>();\r\n    test_iter_cat_for_trivially_copyable_types<false, float, double>();\r\n    test_iter_cat_for_trivially_copyable_types<false, double, float>();\r\n\r\n    test_iter_cat_for_trivially_copyable_types<sizeof(double) == sizeof(long double), double, long double>();\r\n    test_iter_cat_for_trivially_copyable_types<sizeof(double) == sizeof(long double), long double, double>();\r\n\r\n    test_iter_cat_for_trivially_copyable_types<false, int, float>();\r\n    test_iter_cat_for_trivially_copyable_types<false, float, int>();\r\n    test_iter_cat_for_trivially_copyable_types<false, long long, double>();\r\n    test_iter_cat_for_trivially_copyable_types<false, double, long long>();\r\n    test_iter_cat_for_trivially_copyable_types<false, long long, long double>();\r\n    test_iter_cat_for_trivially_copyable_types<false, long double, long long>();\r\n\r\n    // Test pointers\r\n    test_iter_cat_for_pointers_with_volatile<true, int, int>();\r\n    test_iter_cat_for_pointers<false, int, long>();\r\n    test_iter_cat_for_pointers<false, unsigned int, int>();\r\n\r\n    // Test void conversions\r\n    test_iter_cat_for_pointers_with_volatile<true, void, void>();\r\n    test_iter_cat_for_pointers_with_volatile<true, int, void>();\r\n    test_iter_cat_for_pointers<false, void, int>();\r\n\r\n    // Test pointers to derived classes\r\n    constexpr bool enable_derived_to_base =\r\n#ifdef __cpp_lib_is_pointer_interconvertible\r\n        true\r\n#else // ^^^ __cpp_lib_is_pointer_interconvertible / !__cpp_lib_is_pointer_interconvertible vvv\r\n        false\r\n#endif // ^^^ !__cpp_lib_is_pointer_interconvertible ^^^\r\n        ;\r\n\r\n    test_iter_cat_for_pointers<true, EmptyBase, EmptyBase>();\r\n    test_iter_cat_for_pointers<true, EmptyDerived, EmptyDerived>();\r\n    test_iter_cat_for_pointers<enable_derived_to_base, EmptyDerived, EmptyBase>();\r\n    test_iter_cat_for_pointers<false, EmptyBase, EmptyDerived>();\r\n    test_iter_cat_for_pointers<enable_derived_to_base, StatefulDerived, StatefulBase>();\r\n    test_iter_cat_for_pointers<false, StatefulDerived, EmptyBase>();\r\n    test_iter_cat_for_pointers<enable_derived_to_base, StatefulDerived2, StatefulBase>();\r\n    test_iter_cat_for_pointers<enable_derived_to_base, StatefulDerived2, EmptyBase>();\r\n\r\n    // Don't allow privately derived\r\n    test_iter_cat_for_pointers<false, EmptyPrivatelyDerived, EmptyBase>();\r\n    test_iter_cat_for_pointers<false, StatefulPrivatelyDerived, StatefulBase>();\r\n    test_iter_cat_for_pointers<false, StatefulPrivatelyDerived2, StatefulBase>();\r\n    test_iter_cat_for_pointers<false, StatefulPrivatelyDerived2, EmptyBase>();\r\n\r\n    // Test function pointers\r\n    test_iter_cat_for_trivially_copyable_types<true, void (*)(int), void (*)(int)>();\r\n    test_iter_cat_for_trivially_copyable_types<false, void (*)(int), void (*)()>();\r\n\r\n    // Converting from function pointers to void pointers is a non-standard extension\r\n    test_iter_cat_for_trivially_copyable_types<is_convertible_v<void (*)(int), void*>, void (*)(int), void*>();\r\n    test_iter_cat_for_trivially_copyable_types<false, void*, void (*)(int)>();\r\n\r\n    // Test member object pointers\r\n    test_iter_cat_for_trivially_copyable_types<true, int EmptyBase::*, int EmptyBase::*>();\r\n    test_iter_cat_for_trivially_copyable_types<true, int EmptyDerived::*, int EmptyDerived::*>();\r\n    test_iter_cat_for_trivially_copyable_types<false, int EmptyBase::*, int EmptyDerived::*>();\r\n    test_iter_cat_for_trivially_copyable_types<false, int EmptyDerived::*, int EmptyBase::*>();\r\n\r\n    // Test member function pointers\r\n    test_iter_cat_for_trivially_copyable_types<true, int (EmptyBase::*)(), int (EmptyBase::*)()>();\r\n    test_iter_cat_for_trivially_copyable_types<true, int (EmptyDerived::*)(), int (EmptyDerived::*)()>();\r\n    test_iter_cat_for_trivially_copyable_types<false, int (EmptyBase::*)(), int (EmptyDerived::*)()>();\r\n    test_iter_cat_for_trivially_copyable_types<false, int (EmptyDerived::*)(), int (EmptyBase::*)()>();\r\n\r\n#if _HAS_CXX17\r\n    test_iter_cat_for_trivially_copyable_types<true, string_view, string_view>();\r\n    test_iter_cat_for_trivially_copyable_types<false, string_view, wstring_view>();\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n    test_iter_cat_for_trivially_copyable_types<true, span<int>, span<int>>();\r\n    test_iter_cat_for_trivially_copyable_types<true, span<int, 7>, span<int, 7>>();\r\n    test_iter_cat_for_trivially_copyable_types<false, span<int>, span<int, 7>>();\r\n    test_iter_cat_for_trivially_copyable_types<false, span<int, 7>, span<int>>();\r\n    test_iter_cat_for_trivially_copyable_types<false, span<int>, span<long>>();\r\n    test_iter_cat_for_trivially_copyable_types<false, span<int, 7>, span<long, 7>>();\r\n#endif // _HAS_CXX20\r\n\r\n    test_iter_cat_for_types<true, true, true, true, TrivialStruct>();\r\n    test_iter_cat_for_types<true, true, true, true, TriviallyCopyableStruct>();\r\n    test_iter_cat_for_types<false, true, false, true, TriviallyMovableStruct>();\r\n    test_iter_cat_for_types<true, true, false, false, TriviallyConstructibleStruct>();\r\n    test_iter_cat_for_types<false, false, true, true, TriviallyAssignableStruct>();\r\n    test_iter_cat_for_types<true, false, false, false, TriviallyCopyConstructibleStruct>();\r\n    test_iter_cat_for_types<false, false, true, false, TriviallyCopyAssignableStruct>();\r\n    test_iter_cat_for_types<false, true, false, false, TriviallyMoveConstructibleStruct>();\r\n    test_iter_cat_for_types<false, false, false, true, TriviallyMoveAssignableStruct>();\r\n\r\n    // Test different containers\r\n#if _HAS_CXX20\r\n    test_iter_cat_for_containers<true, vector<int>, vector<int>>();\r\n    test_iter_cat_for_containers<true, array<int, 8>, array<int, 8>>();\r\n    test_iter_cat_for_containers<true, vector<int>, array<int, 8>>();\r\n    test_iter_cat_for_containers<true, array<int, 8>, vector<int>>();\r\n#endif // _HAS_CXX20\r\n\r\n    test_iter_cat_for_containers<false, list<int>, list<int>>();\r\n    test_iter_cat_for_containers<false, vector<int>, list<int>>();\r\n    test_iter_cat_for_containers<false, list<int>, vector<int>>();\r\n\r\n    // Test double move_iterator\r\n    test_iter_cat<true, true, true, true, move_iterator<int*>, int*>();\r\n\r\n#if _HAS_CXX20\r\n    // Test counted_iterator\r\n    test_iter_cat<true, true, true, true, counted_iterator<int*>, int*>();\r\n    test_iter_cat<true, true, true, true, int*, counted_iterator<int*>>();\r\n    test_iter_cat<true, true, true, true, counted_iterator<int*>, counted_iterator<int*>>();\r\n#endif // _HAS_CXX20\r\n\r\n    // No volatile\r\n    test_iter_cat_for_trivially_copyable_types<false, volatile int, int>();\r\n    test_iter_cat_for_trivially_copyable_types<false, int, volatile int>();\r\n    test_iter_cat_for_trivially_copyable_types<false, volatile int, volatile int>();\r\n\r\n    test_iter_cat_for_containers<false, array<volatile int, 8>, array<int, 8>>();\r\n    test_iter_cat_for_containers<false, array<int, 8>, array<volatile int, 8>>();\r\n    test_iter_cat_for_containers<false, array<volatile int, 8>, array<volatile int, 8>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000431_lex_compare_family/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000431_lex_compare_family/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wsign-compare\" // comparison of integers of different signs: 'X' and 'Y'\r\n#endif // __clang__\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <functional>\r\n#include <iterator>\r\n#include <type_traits>\r\n\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#endif // _HAS_CXX20\r\n\r\n#pragma warning(disable : 4018) // '<': signed/unsigned mismatch\r\n#pragma warning(disable : 4365) // conversion from 'X' to 'Y', signed/unsigned mismatch\r\n#pragma warning(disable : 4804) // '<': unsafe use of type 'bool' in operation\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <class Int1, class Int2, class PredType, class LexCompareFn>\r\nvoid test_algorithms_for_integrals(LexCompareFn lex_compare_fn) {\r\n    Int1 arr1[10] = {5, 7, 3, 4, 6, 4, 7, 1, 9, 5};\r\n    Int2 arr2[10] = {5, 7, 3, 4, 6, 4, 7, 1, 9, 5};\r\n    Int2 arr3[10] = {5, 7, 3, 4, 6, 4, 7, 1, 10, 5};\r\n    Int2 arr4[10] = {5, 7, 2, 4, 6, 4, 7, 1, 9, 5};\r\n    Int2 arr5[11] = {5, 7, 3, 4, 6, 4, 7, 1, 9, 5, 4};\r\n    Int2 arr6[11] = {5, 7, 3, 4, 6, 4, 7, 1, 10, 5, 4};\r\n    Int2 arr7[11] = {5, 7, 2, 4, 6, 4, 7, 1, 9, 5, 4};\r\n    Int2 arr8[9]  = {5, 7, 3, 4, 6, 4, 7, 1, 9};\r\n    Int2 arr9[9]  = {5, 7, 3, 4, 6, 4, 7, 1, 10};\r\n    Int2 arr10[9] = {5, 7, 2, 4, 6, 4, 7, 1, 9};\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), less<PredType>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), greater<PredType>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), less<PredType>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), greater<PredType>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), less<PredType>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), greater<PredType>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), less<PredType>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), greater<PredType>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), less<PredType>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), greater<PredType>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), less<PredType>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), greater<PredType>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr8), end(arr8), less<PredType>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr8), end(arr8), greater<PredType>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr9), end(arr9), less<PredType>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr9), end(arr9), greater<PredType>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr10), end(arr10), less<PredType>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr10), end(arr10), greater<PredType>{}));\r\n}\r\n\r\ntemplate <class Int1, class Int2, class LexCompareFn>\r\nvoid test_algorithms_for_1byte_integrals(LexCompareFn lex_compare_fn) {\r\n    test_algorithms_for_integrals<Int1, Int2, void>(lex_compare_fn);\r\n    test_algorithms_for_integrals<Int1, Int2, char>(lex_compare_fn);\r\n    test_algorithms_for_integrals<Int1, Int2, signed char>(lex_compare_fn);\r\n    test_algorithms_for_integrals<Int1, Int2, unsigned char>(lex_compare_fn);\r\n#ifdef __cpp_lib_char8_t\r\n    test_algorithms_for_integrals<Int1, Int2, char8_t>(lex_compare_fn);\r\n#endif // __cpp_lib_char8_t\r\n}\r\n\r\ntemplate <class Int, class LexCompareFn>\r\nvoid test_algorithms_for_signed_integrals(LexCompareFn lex_compare_fn) {\r\n    using UInt = make_unsigned_t<Int>;\r\n\r\n    Int arr1[10]  = {5, 7, -3, 4, 6, 4, 7, 1, 9, 5};\r\n    Int arr2[10]  = {5, 7, +3, 4, 6, 4, 7, 1, 9, 5};\r\n    UInt arr3[10] = {5, 7, static_cast<UInt>(-3), 4, 6, 4, 7, 1, 9, 5};\r\n    UInt arr4[10] = {5, 7, static_cast<UInt>(+3), 4, 6, 4, 7, 1, 9, 5};\r\n\r\n    // Test signed\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), less<>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), greater<>{}));\r\n    assert(!lex_compare_fn(begin(arr2), end(arr2), begin(arr1), end(arr1), less<>{}));\r\n    assert(lex_compare_fn(begin(arr2), end(arr2), begin(arr1), end(arr1), greater<>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), less<Int>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), greater<Int>{}));\r\n    assert(!lex_compare_fn(begin(arr2), end(arr2), begin(arr1), end(arr1), less<Int>{}));\r\n    assert(lex_compare_fn(begin(arr2), end(arr2), begin(arr1), end(arr1), greater<Int>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), less<Int>{}));\r\n    assert(!lex_compare_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), greater<Int>{}));\r\n    assert(!lex_compare_fn(begin(arr4), end(arr4), begin(arr3), end(arr3), less<Int>{}));\r\n    assert(lex_compare_fn(begin(arr4), end(arr4), begin(arr3), end(arr3), greater<Int>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), less<Int>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), greater<Int>{}));\r\n    assert(!lex_compare_fn(begin(arr3), end(arr3), begin(arr1), end(arr1), less<Int>{}));\r\n    assert(!lex_compare_fn(begin(arr3), end(arr3), begin(arr1), end(arr1), greater<Int>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), less<Int>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), greater<Int>{}));\r\n    assert(!lex_compare_fn(begin(arr4), end(arr4), begin(arr1), end(arr1), less<Int>{}));\r\n    assert(lex_compare_fn(begin(arr4), end(arr4), begin(arr1), end(arr1), greater<Int>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr2), end(arr2), begin(arr3), end(arr3), less<Int>{}));\r\n    assert(lex_compare_fn(begin(arr2), end(arr2), begin(arr3), end(arr3), greater<Int>{}));\r\n    assert(lex_compare_fn(begin(arr3), end(arr3), begin(arr2), end(arr2), less<Int>{}));\r\n    assert(!lex_compare_fn(begin(arr3), end(arr3), begin(arr2), end(arr2), greater<Int>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr2), end(arr2), begin(arr4), end(arr4), less<Int>{}));\r\n    assert(!lex_compare_fn(begin(arr2), end(arr2), begin(arr4), end(arr4), greater<Int>{}));\r\n    assert(!lex_compare_fn(begin(arr4), end(arr4), begin(arr2), end(arr2), less<Int>{}));\r\n    assert(!lex_compare_fn(begin(arr4), end(arr4), begin(arr2), end(arr2), greater<Int>{}));\r\n\r\n    // Test unsigned\r\n    assert(!lex_compare_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), less<>{}));\r\n    assert(lex_compare_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), greater<>{}));\r\n    assert(lex_compare_fn(begin(arr4), end(arr4), begin(arr3), end(arr3), less<>{}));\r\n    assert(!lex_compare_fn(begin(arr4), end(arr4), begin(arr3), end(arr3), greater<>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), less<UInt>{}));\r\n    assert(lex_compare_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), greater<UInt>{}));\r\n    assert(lex_compare_fn(begin(arr4), end(arr4), begin(arr3), end(arr3), less<UInt>{}));\r\n    assert(!lex_compare_fn(begin(arr4), end(arr4), begin(arr3), end(arr3), greater<UInt>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), less<UInt>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), greater<UInt>{}));\r\n    assert(lex_compare_fn(begin(arr2), end(arr2), begin(arr1), end(arr1), less<UInt>{}));\r\n    assert(!lex_compare_fn(begin(arr2), end(arr2), begin(arr1), end(arr1), greater<UInt>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), less<UInt>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), greater<UInt>{}));\r\n    assert(!lex_compare_fn(begin(arr3), end(arr3), begin(arr1), end(arr1), less<UInt>{}));\r\n    assert(!lex_compare_fn(begin(arr3), end(arr3), begin(arr1), end(arr1), greater<UInt>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), less<UInt>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), greater<UInt>{}));\r\n    assert(lex_compare_fn(begin(arr4), end(arr4), begin(arr1), end(arr1), less<UInt>{}));\r\n    assert(!lex_compare_fn(begin(arr4), end(arr4), begin(arr1), end(arr1), greater<UInt>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr2), end(arr2), begin(arr3), end(arr3), less<UInt>{}));\r\n    assert(!lex_compare_fn(begin(arr2), end(arr2), begin(arr3), end(arr3), greater<UInt>{}));\r\n    assert(!lex_compare_fn(begin(arr3), end(arr3), begin(arr2), end(arr2), less<UInt>{}));\r\n    assert(lex_compare_fn(begin(arr3), end(arr3), begin(arr2), end(arr2), greater<UInt>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr2), end(arr2), begin(arr4), end(arr4), less<UInt>{}));\r\n    assert(!lex_compare_fn(begin(arr2), end(arr2), begin(arr4), end(arr4), greater<UInt>{}));\r\n    assert(!lex_compare_fn(begin(arr4), end(arr4), begin(arr2), end(arr2), less<UInt>{}));\r\n    assert(!lex_compare_fn(begin(arr4), end(arr4), begin(arr2), end(arr2), greater<UInt>{}));\r\n\r\n    // Test comparing signed and unsigned\r\n    constexpr bool promoted = sizeof(Int) < sizeof(int);\r\n\r\n    assert(promoted == lex_compare_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), less<>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), greater<>{}));\r\n    assert(!lex_compare_fn(begin(arr3), end(arr3), begin(arr1), end(arr1), less<>{}));\r\n    assert(promoted == lex_compare_fn(begin(arr3), end(arr3), begin(arr1), end(arr1), greater<>{}));\r\n\r\n    assert(promoted == lex_compare_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), less<>{}));\r\n    assert(promoted == !lex_compare_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), greater<>{}));\r\n    assert(promoted == !lex_compare_fn(begin(arr4), end(arr4), begin(arr1), end(arr1), less<>{}));\r\n    assert(promoted == lex_compare_fn(begin(arr4), end(arr4), begin(arr1), end(arr1), greater<>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr2), end(arr2), begin(arr3), end(arr3), less<>{}));\r\n    assert(!lex_compare_fn(begin(arr2), end(arr2), begin(arr3), end(arr3), greater<>{}));\r\n    assert(!lex_compare_fn(begin(arr3), end(arr3), begin(arr2), end(arr2), less<>{}));\r\n    assert(lex_compare_fn(begin(arr3), end(arr3), begin(arr2), end(arr2), greater<>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr2), end(arr2), begin(arr4), end(arr4), less<>{}));\r\n    assert(!lex_compare_fn(begin(arr2), end(arr2), begin(arr4), end(arr4), greater<>{}));\r\n    assert(!lex_compare_fn(begin(arr4), end(arr4), begin(arr2), end(arr2), less<>{}));\r\n    assert(!lex_compare_fn(begin(arr4), end(arr4), begin(arr2), end(arr2), greater<>{}));\r\n}\r\n\r\ntemplate <class Bool1, class Bool2, class PredType, class LexCompareFn>\r\nvoid test_algorithms_for_bools_helper(LexCompareFn lex_compare_fn) {\r\n    Bool1 arr1[5]  = {true, true, false, false, true};\r\n    Bool2 arr2[5]  = {true, true, false, false, true};\r\n    Bool2 arr3[5]  = {true, true, true, false, true};\r\n    Bool2 arr4[5]  = {true, false, false, false, true};\r\n    Bool2 arr5[6]  = {true, true, false, false, true, false};\r\n    Bool2 arr6[6]  = {true, true, true, false, true, false};\r\n    Bool2 arr7[6]  = {true, false, false, false, true, false};\r\n    Bool2 arr8[4]  = {true, true, false, false};\r\n    Bool2 arr9[4]  = {true, true, true, false};\r\n    Bool2 arr10[4] = {true, false, false, false};\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), less<PredType>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), greater<PredType>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), less<PredType>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), greater<PredType>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), less<PredType>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), greater<PredType>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), less<PredType>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), greater<PredType>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), less<PredType>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), greater<PredType>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), less<PredType>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), greater<PredType>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr8), end(arr8), less<PredType>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr8), end(arr8), greater<PredType>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr9), end(arr9), less<PredType>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr9), end(arr9), greater<PredType>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr10), end(arr10), less<PredType>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr10), end(arr10), greater<PredType>{}));\r\n}\r\n\r\ntemplate <class Bool1, class Bool2, class LexCompareFn>\r\nvoid test_algorithms_for_bools(LexCompareFn lex_compare_fn) {\r\n    test_algorithms_for_bools_helper<Bool1, Bool2, void>(lex_compare_fn);\r\n    test_algorithms_for_bools_helper<Bool1, Bool2, bool>(lex_compare_fn);\r\n    test_algorithms_for_bools_helper<Bool1, Bool2, char>(lex_compare_fn);\r\n    test_algorithms_for_bools_helper<Bool1, Bool2, unsigned char>(lex_compare_fn);\r\n    test_algorithms_for_bools_helper<Bool1, Bool2, signed char>(lex_compare_fn);\r\n    test_algorithms_for_bools_helper<Bool1, Bool2, int>(lex_compare_fn);\r\n}\r\n\r\ntemplate <class Char, class LexCompareFn>\r\nvoid test_algorithms_for_bool_and_chars(LexCompareFn lex_compare_fn) {\r\n    bool arr1[5]  = {true, true, false, false, true};\r\n    Char arr2[5]  = {2, 1, 0, 0, 1};\r\n    Char arr3[5]  = {2, 1, 1, 0, 1};\r\n    Char arr4[5]  = {2, 0, 0, 0, 1};\r\n    Char arr5[6]  = {2, 1, 0, 0, 1, 0};\r\n    Char arr6[6]  = {2, 1, 1, 0, 1, 0};\r\n    Char arr7[6]  = {2, 0, 0, 0, 1, 0};\r\n    Char arr8[4]  = {2, 1, 0, 0};\r\n    Char arr9[4]  = {2, 1, 1, 0};\r\n    Char arr10[4] = {2, 0, 0, 0};\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), less<bool>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), greater<bool>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), less<bool>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), greater<bool>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), less<bool>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), greater<bool>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), less<bool>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), greater<bool>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), less<bool>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), greater<bool>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), less<bool>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), greater<bool>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr8), end(arr8), less<bool>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr8), end(arr8), greater<bool>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr9), end(arr9), less<bool>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr9), end(arr9), greater<bool>{}));\r\n\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr10), end(arr10), less<bool>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr10), end(arr10), greater<bool>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), less<Char>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), greater<Char>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), less<Char>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), greater<Char>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), less<Char>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), greater<Char>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), less<Char>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), greater<Char>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), less<Char>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), greater<Char>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), less<Char>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), greater<Char>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr8), end(arr8), less<Char>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr8), end(arr8), greater<Char>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr9), end(arr9), less<Char>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr9), end(arr9), greater<Char>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr10), end(arr10), less<Char>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr10), end(arr10), greater<Char>{}));\r\n\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), less<>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), greater<>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), less<>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), greater<>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), less<>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), greater<>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), less<>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), greater<>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), less<>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), greater<>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), less<>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), greater<>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr8), end(arr8), less<>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr8), end(arr8), greater<>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr9), end(arr9), less<>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr9), end(arr9), greater<>{}));\r\n    assert(lex_compare_fn(begin(arr1), end(arr1), begin(arr10), end(arr10), less<>{}));\r\n    assert(!lex_compare_fn(begin(arr1), end(arr1), begin(arr10), end(arr10), greater<>{}));\r\n}\r\n\r\ntemplate <class LexCompareFn>\r\nvoid test_algorithms(LexCompareFn lex_compare_fn) {\r\n    { // Test ints\r\n        test_algorithms_for_integrals<int, int, void>(lex_compare_fn);\r\n        test_algorithms_for_integrals<unsigned int, unsigned int, void>(lex_compare_fn);\r\n        test_algorithms_for_integrals<int, unsigned int, void>(lex_compare_fn);\r\n        test_algorithms_for_integrals<unsigned int, int, void>(lex_compare_fn);\r\n\r\n        test_algorithms_for_integrals<int, int, int>(lex_compare_fn);\r\n        test_algorithms_for_integrals<unsigned int, unsigned int, int>(lex_compare_fn);\r\n        test_algorithms_for_integrals<int, unsigned int, int>(lex_compare_fn);\r\n        test_algorithms_for_integrals<unsigned int, int, int>(lex_compare_fn);\r\n\r\n        test_algorithms_for_integrals<int, int, unsigned int>(lex_compare_fn);\r\n        test_algorithms_for_integrals<unsigned int, unsigned int, unsigned int>(lex_compare_fn);\r\n        test_algorithms_for_integrals<int, unsigned int, unsigned int>(lex_compare_fn);\r\n        test_algorithms_for_integrals<unsigned int, int, unsigned int>(lex_compare_fn);\r\n    }\r\n\r\n    { // Test chars\r\n        test_algorithms_for_1byte_integrals<char, char>(lex_compare_fn);\r\n        test_algorithms_for_1byte_integrals<signed char, signed char>(lex_compare_fn);\r\n        test_algorithms_for_1byte_integrals<char, signed char>(lex_compare_fn);\r\n        test_algorithms_for_1byte_integrals<signed char, char>(lex_compare_fn);\r\n        test_algorithms_for_1byte_integrals<unsigned char, unsigned char>(lex_compare_fn);\r\n        test_algorithms_for_1byte_integrals<unsigned char, char>(lex_compare_fn);\r\n        test_algorithms_for_1byte_integrals<char, unsigned char>(lex_compare_fn);\r\n        test_algorithms_for_1byte_integrals<unsigned char, signed char>(lex_compare_fn);\r\n        test_algorithms_for_1byte_integrals<signed char, unsigned char>(lex_compare_fn);\r\n#ifdef __cpp_lib_char8_t\r\n        test_algorithms_for_1byte_integrals<char8_t, char8_t>(lex_compare_fn);\r\n        test_algorithms_for_1byte_integrals<char, char8_t>(lex_compare_fn);\r\n        test_algorithms_for_1byte_integrals<char8_t, char>(lex_compare_fn);\r\n        test_algorithms_for_1byte_integrals<signed char, char8_t>(lex_compare_fn);\r\n        test_algorithms_for_1byte_integrals<char8_t, signed char>(lex_compare_fn);\r\n        test_algorithms_for_1byte_integrals<unsigned char, char8_t>(lex_compare_fn);\r\n        test_algorithms_for_1byte_integrals<char8_t, unsigned char>(lex_compare_fn);\r\n#endif // __cpp_lib_char8_t\r\n    }\r\n\r\n    { // Test signedness\r\n        test_algorithms_for_signed_integrals<int>(lex_compare_fn);\r\n        test_algorithms_for_signed_integrals<signed char>(lex_compare_fn);\r\n    }\r\n\r\n    { // Test bool\r\n        test_algorithms_for_bools<bool, bool>(lex_compare_fn);\r\n        test_algorithms_for_bools<char, char>(lex_compare_fn);\r\n        test_algorithms_for_bools<unsigned char, unsigned char>(lex_compare_fn);\r\n        test_algorithms_for_bools<signed char, signed char>(lex_compare_fn);\r\n        test_algorithms_for_bools<char, bool>(lex_compare_fn);\r\n        test_algorithms_for_bools<bool, char>(lex_compare_fn);\r\n        test_algorithms_for_bools<unsigned char, bool>(lex_compare_fn);\r\n        test_algorithms_for_bools<bool, unsigned char>(lex_compare_fn);\r\n        test_algorithms_for_bools<signed char, bool>(lex_compare_fn);\r\n        test_algorithms_for_bools<bool, signed char>(lex_compare_fn);\r\n    }\r\n\r\n    { // Test comparing bool and char\r\n        test_algorithms_for_bool_and_chars<char>(lex_compare_fn);\r\n        test_algorithms_for_bool_and_chars<unsigned char>(lex_compare_fn);\r\n        test_algorithms_for_bool_and_chars<signed char>(lex_compare_fn);\r\n    }\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class Int1, class Int2, class LexCompareThreeWayFn, class Comp = compare_three_way>\r\nvoid test_three_way_algorithms_for_integrals(\r\n    LexCompareThreeWayFn lex_compare_three_way_fn, Comp comp = compare_three_way{}) {\r\n    Int1 arr1[10] = {5, 7, 3, 4, 6, 4, 7, 1, 9, 5};\r\n    Int2 arr2[10] = {5, 7, 3, 4, 6, 4, 7, 1, 9, 5};\r\n    Int2 arr3[10] = {5, 7, 3, 4, 6, 4, 7, 1, 10, 5};\r\n    Int2 arr4[10] = {5, 7, 2, 4, 6, 4, 7, 1, 9, 5};\r\n    Int2 arr5[11] = {5, 7, 3, 4, 6, 4, 7, 1, 9, 5, 4};\r\n    Int2 arr6[11] = {5, 7, 3, 4, 6, 4, 7, 1, 10, 5, 4};\r\n    Int2 arr7[11] = {5, 7, 2, 4, 6, 4, 7, 1, 9, 5, 4};\r\n    Int2 arr8[9]  = {5, 7, 3, 4, 6, 4, 7, 1, 9};\r\n    Int2 arr9[9]  = {5, 7, 3, 4, 6, 4, 7, 1, 10};\r\n    Int2 arr10[9] = {5, 7, 2, 4, 6, 4, 7, 1, 9};\r\n\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), comp) == 0);\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), comp) < 0);\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), comp) > 0);\r\n\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), comp) < 0);\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), comp) < 0);\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), comp) > 0);\r\n\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr8), end(arr8), comp) > 0);\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr9), end(arr9), comp) < 0);\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr10), end(arr10), comp) > 0);\r\n}\r\n\r\ntemplate <class Int, class LexCompareThreeWayFn>\r\nvoid test_three_way_algorithms_for_signed_integrals(LexCompareThreeWayFn lex_compare_three_way_fn) {\r\n    using UInt = make_unsigned_t<Int>;\r\n\r\n    Int arr1[10]  = {5, 7, -3, 4, 6, 4, 7, 1, 9, 5};\r\n    Int arr2[10]  = {5, 7, +3, 4, 6, 4, 7, 1, 9, 5};\r\n    UInt arr3[10] = {5, 7, static_cast<UInt>(-3), 4, 6, 4, 7, 1, 9, 5};\r\n    UInt arr4[10] = {5, 7, static_cast<UInt>(+3), 4, 6, 4, 7, 1, 9, 5};\r\n\r\n    // Test signed\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), compare_three_way{}) < 0);\r\n    assert(lex_compare_three_way_fn(begin(arr2), end(arr2), begin(arr1), end(arr1), compare_three_way{}) > 0);\r\n\r\n    // Test unsigned\r\n    assert(lex_compare_three_way_fn(begin(arr3), end(arr3), begin(arr4), end(arr4), compare_three_way{}) > 0);\r\n    assert(lex_compare_three_way_fn(begin(arr4), end(arr4), begin(arr3), end(arr3), compare_three_way{}) < 0);\r\n\r\n    // Test comparing signed and unsigned\r\n\r\n    // N4892 [expr.spaceship]/4, /4.1:\r\n    // \"If both operands have arithmetic types, or one operand has integral type and the other operand has unscoped\r\n    // enumeration type, the usual arithmetic conversions (7.4) are applied to the operands. Then:\r\n    // - If a narrowing conversion (9.4.5) is required, other than from an integral type to a floating-point type,\r\n    // the program is ill-formed.\"\r\n\r\n    constexpr bool promoted = sizeof(Int) < sizeof(int);\r\n\r\n    if constexpr (promoted) {\r\n        assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), compare_three_way{})\r\n               == (promoted ? strong_ordering::less : strong_ordering::equal));\r\n        assert(lex_compare_three_way_fn(begin(arr3), end(arr3), begin(arr1), end(arr1), compare_three_way{})\r\n               == (promoted ? strong_ordering::greater : strong_ordering::equal));\r\n\r\n        assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), compare_three_way{})\r\n               == (promoted ? strong_ordering::less : strong_ordering::greater));\r\n        assert(lex_compare_three_way_fn(begin(arr4), end(arr4), begin(arr1), end(arr1), compare_three_way{})\r\n               == (promoted ? strong_ordering::greater : strong_ordering::less));\r\n\r\n        assert(lex_compare_three_way_fn(begin(arr2), end(arr2), begin(arr3), end(arr3), compare_three_way{}) < 0);\r\n        assert(lex_compare_three_way_fn(begin(arr3), end(arr3), begin(arr2), end(arr2), compare_three_way{}) > 0);\r\n\r\n        assert(lex_compare_three_way_fn(begin(arr2), end(arr2), begin(arr4), end(arr4), compare_three_way{}) == 0);\r\n        assert(lex_compare_three_way_fn(begin(arr4), end(arr4), begin(arr2), end(arr2), compare_three_way{}) == 0);\r\n    }\r\n}\r\n\r\ntemplate <class LexCompareThreeWayFn>\r\nvoid test_three_way_algorithms_for_bools(LexCompareThreeWayFn lex_compare_three_way_fn) {\r\n    bool arr1[5]  = {true, true, false, false, true};\r\n    bool arr2[5]  = {true, true, false, false, true};\r\n    bool arr3[5]  = {true, true, true, false, true};\r\n    bool arr4[5]  = {true, false, false, false, true};\r\n    bool arr5[6]  = {true, true, false, false, true, false};\r\n    bool arr6[6]  = {true, true, true, false, true, false};\r\n    bool arr7[6]  = {true, false, false, false, true, false};\r\n    bool arr8[4]  = {true, true, false, false};\r\n    bool arr9[4]  = {true, true, true, false};\r\n    bool arr10[4] = {true, false, false, false};\r\n\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr2), end(arr2), compare_three_way{}) == 0);\r\n    assert(lex_compare_three_way_fn(begin(arr2), end(arr2), begin(arr1), end(arr1), compare_three_way{}) == 0);\r\n\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr3), end(arr3), compare_three_way{}) < 0);\r\n    assert(lex_compare_three_way_fn(begin(arr3), end(arr3), begin(arr1), end(arr1), compare_three_way{}) > 0);\r\n\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr4), end(arr4), compare_three_way{}) > 0);\r\n    assert(lex_compare_three_way_fn(begin(arr4), end(arr4), begin(arr1), end(arr1), compare_three_way{}) < 0);\r\n\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr5), end(arr5), compare_three_way{}) < 0);\r\n    assert(lex_compare_three_way_fn(begin(arr5), end(arr5), begin(arr1), end(arr1), compare_three_way{}) > 0);\r\n\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr6), end(arr6), compare_three_way{}) < 0);\r\n    assert(lex_compare_three_way_fn(begin(arr6), end(arr6), begin(arr1), end(arr1), compare_three_way{}) > 0);\r\n\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr7), end(arr7), compare_three_way{}) > 0);\r\n    assert(lex_compare_three_way_fn(begin(arr7), end(arr7), begin(arr1), end(arr1), compare_three_way{}) < 0);\r\n\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr8), end(arr8), compare_three_way{}) > 0);\r\n    assert(lex_compare_three_way_fn(begin(arr8), end(arr8), begin(arr1), end(arr1), compare_three_way{}) < 0);\r\n\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr9), end(arr9), compare_three_way{}) < 0);\r\n    assert(lex_compare_three_way_fn(begin(arr9), end(arr9), begin(arr1), end(arr1), compare_three_way{}) > 0);\r\n\r\n    assert(lex_compare_three_way_fn(begin(arr1), end(arr1), begin(arr10), end(arr10), compare_three_way{}) > 0);\r\n    assert(lex_compare_three_way_fn(begin(arr10), end(arr10), begin(arr1), end(arr1), compare_three_way{}) < 0);\r\n}\r\n\r\ntemplate <class LexCompareThreeWayFn>\r\nvoid test_three_way_algorithms(LexCompareThreeWayFn lex_compare_three_way_fn) {\r\n    { // Test ints\r\n        test_three_way_algorithms_for_integrals<int, int>(lex_compare_three_way_fn, compare_three_way{});\r\n        test_three_way_algorithms_for_integrals<int, int>(lex_compare_three_way_fn, strong_order);\r\n        test_three_way_algorithms_for_integrals<int, int>(lex_compare_three_way_fn, weak_order);\r\n        test_three_way_algorithms_for_integrals<int, int>(lex_compare_three_way_fn, partial_order);\r\n        test_three_way_algorithms_for_integrals<int, int>(lex_compare_three_way_fn, compare_strong_order_fallback);\r\n        test_three_way_algorithms_for_integrals<int, int>(lex_compare_three_way_fn, compare_weak_order_fallback);\r\n        test_three_way_algorithms_for_integrals<int, int>(lex_compare_three_way_fn, compare_partial_order_fallback);\r\n    }\r\n\r\n    { // Test chars\r\n        test_three_way_algorithms_for_integrals<char, char>(lex_compare_three_way_fn);\r\n        test_three_way_algorithms_for_integrals<signed char, signed char>(lex_compare_three_way_fn);\r\n        test_three_way_algorithms_for_integrals<char, signed char>(lex_compare_three_way_fn);\r\n        test_three_way_algorithms_for_integrals<signed char, char>(lex_compare_three_way_fn);\r\n        test_three_way_algorithms_for_integrals<unsigned char, unsigned char>(lex_compare_three_way_fn);\r\n        test_three_way_algorithms_for_integrals<unsigned char, char>(lex_compare_three_way_fn);\r\n        test_three_way_algorithms_for_integrals<char, unsigned char>(lex_compare_three_way_fn);\r\n        test_three_way_algorithms_for_integrals<unsigned char, signed char>(lex_compare_three_way_fn);\r\n        test_three_way_algorithms_for_integrals<signed char, unsigned char>(lex_compare_three_way_fn);\r\n#ifdef __cpp_lib_char8_t\r\n        test_three_way_algorithms_for_integrals<char8_t, char8_t>(lex_compare_three_way_fn);\r\n        test_three_way_algorithms_for_integrals<char, char8_t>(lex_compare_three_way_fn);\r\n        test_three_way_algorithms_for_integrals<char8_t, char>(lex_compare_three_way_fn);\r\n        test_three_way_algorithms_for_integrals<signed char, char8_t>(lex_compare_three_way_fn);\r\n        test_three_way_algorithms_for_integrals<char8_t, signed char>(lex_compare_three_way_fn);\r\n        test_three_way_algorithms_for_integrals<unsigned char, char8_t>(lex_compare_three_way_fn);\r\n        test_three_way_algorithms_for_integrals<char8_t, unsigned char>(lex_compare_three_way_fn);\r\n#endif // __cpp_lib_char8_t\r\n    }\r\n\r\n    { // Test signedness\r\n        test_three_way_algorithms_for_signed_integrals<int>(lex_compare_three_way_fn);\r\n        test_three_way_algorithms_for_signed_integrals<signed char>(lex_compare_three_way_fn);\r\n    }\r\n\r\n    { // Test bool\r\n        test_three_way_algorithms_for_bools(lex_compare_three_way_fn);\r\n    }\r\n}\r\n#endif // _HAS_CXX20\r\n\r\nint main() {\r\n    test_algorithms([](auto begin1, auto end1, auto begin2, auto end2, auto pred) {\r\n        return lexicographical_compare(begin1, end1, begin2, end2, pred);\r\n    });\r\n\r\n#if _HAS_CXX20\r\n    test_algorithms([](auto begin1, auto end1, auto begin2, auto end2, auto pred) {\r\n        return ranges::lexicographical_compare(begin1, end1, begin2, end2, pred);\r\n    });\r\n\r\n    test_algorithms([](auto begin1, auto end1, auto begin2, auto end2, auto pred) {\r\n        return lexicographical_compare_three_way(begin1, end1, begin2, end2, [&](const auto& left, const auto& right) {\r\n            return pred(left, right) ? strong_ordering::less\r\n                 : pred(right, left) ? strong_ordering::greater\r\n                                     : strong_ordering::equal;\r\n        }) < 0;\r\n    });\r\n\r\n    test_three_way_algorithms([](auto begin1, auto end1, auto begin2, auto end2, auto comp) {\r\n        return lexicographical_compare_three_way(begin1, end1, begin2, end2, comp);\r\n    });\r\n#endif // _HAS_CXX20\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000431_lex_compare_memcmp_classify/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_matrix.lst\r\nRUNALL_CROSSLIST\r\n# Test manual vectorization:\r\n*\tPM_CL=\"\"\r\n# Test memcmp optimization:\r\n*\tPM_CL=\"/D_USE_STD_VECTOR_ALGORITHMS=0\"\r\n"
  },
  {
    "path": "tests/std/tests/GH_000431_lex_compare_memcmp_classify/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <regex>\r\n#include <string>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#endif // _HAS_CXX20\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <class Expected, class It1, class It2, class Pred>\r\nvoid assert_lex_compare_memcmp_classify() {\r\n    STATIC_ASSERT(is_same_v<_Lex_compare_memcmp_classify<It1, It2, Pred>, Expected>);\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class Expected, class It1, class It2, class Comp>\r\nvoid assert_lex_compare_three_way_memcmp_classify() {\r\n    STATIC_ASSERT(is_same_v<_Lex_compare_three_way_memcmp_classify<It1, It2, Comp>, Expected>);\r\n}\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class Expected, class It1, class ConstIt1, class It2, class ConstIt2, class Pred>\r\nvoid test_lex_compare_memcmp_classify_for_iterators() {\r\n    assert_lex_compare_memcmp_classify<Expected, It1, It2, Pred>();\r\n    assert_lex_compare_memcmp_classify<Expected, ConstIt1, It2, Pred>();\r\n    assert_lex_compare_memcmp_classify<Expected, It1, ConstIt2, Pred>();\r\n    assert_lex_compare_memcmp_classify<Expected, ConstIt1, ConstIt2, Pred>();\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class Expected, class It1, class ConstIt1, class It2, class ConstIt2, class Comp>\r\nvoid test_lex_compare_three_way_memcmp_classify_for_iterators() {\r\n    assert_lex_compare_three_way_memcmp_classify<Expected, It1, It2, Comp>();\r\n    assert_lex_compare_three_way_memcmp_classify<Expected, ConstIt1, It2, Comp>();\r\n    assert_lex_compare_three_way_memcmp_classify<Expected, It1, ConstIt2, Comp>();\r\n    assert_lex_compare_three_way_memcmp_classify<Expected, ConstIt1, ConstIt2, Comp>();\r\n}\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class Expected, class Type1, class Type2, class Pred>\r\nvoid test_lex_compare_memcmp_classify_for_pred_helper() {\r\n    test_lex_compare_memcmp_classify_for_iterators<Expected, Type1*, const Type1*, Type2*, const Type2*, Pred>();\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class Expected, class Type1, class Type2, class Comp>\r\nvoid test_lex_compare_three_way_memcmp_classify_for_comp_helper() {\r\n    test_lex_compare_three_way_memcmp_classify_for_iterators<Expected, Type1*, const Type1*, Type2*, const Type2*,\r\n        Comp>();\r\n}\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class Expected, class Type1, class Type2, class Pred>\r\nvoid test_lex_compare_memcmp_classify_for_pred() {\r\n    test_lex_compare_memcmp_classify_for_pred_helper<Expected, Type1, Type2, Pred>();\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class Expected, class Type1, class Type2, class Comp>\r\nvoid test_lex_compare_three_way_memcmp_classify_for_comp() {\r\n    test_lex_compare_three_way_memcmp_classify_for_comp_helper<Expected, Type1, Type2, Comp>();\r\n\r\n    // No volatile\r\n    test_lex_compare_three_way_memcmp_classify_for_comp_helper<void, volatile Type1, Type2, Comp>();\r\n    test_lex_compare_three_way_memcmp_classify_for_comp_helper<void, Type1, volatile Type2, Comp>();\r\n    test_lex_compare_three_way_memcmp_classify_for_comp_helper<void, volatile Type1, volatile Type2, Comp>();\r\n}\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <bool Expected, class Type1, class Type2, class PredType>\r\nvoid test_lex_compare_memcmp_classify_for_opaque_preds_helper() {\r\n    using expected_less    = conditional_t<Expected, less<int>, void>;\r\n    using expected_greater = conditional_t<Expected, greater<int>, void>;\r\n\r\n    test_lex_compare_memcmp_classify_for_pred<expected_less, Type1, Type2, less<PredType>>();\r\n    test_lex_compare_memcmp_classify_for_pred<expected_greater, Type1, Type2, greater<PredType>>();\r\n}\r\n\r\ntemplate <bool Expected, class Type1, class Type2, class PredType>\r\nvoid test_lex_compare_memcmp_classify_for_opaque_preds() {\r\n    enum Enum1 : Type1 {};\r\n    enum Enum2 : Type2 {};\r\n    enum class EnumClass1 : Type1 {};\r\n    enum class EnumClass2 : Type2 {};\r\n\r\n    enum EnumPred : PredType {};\r\n    enum class EnumClassPred : PredType {};\r\n\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<Expected, Type1, Type2, PredType>();\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<Expected, Enum1, Type2, PredType>();\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<Expected, Type1, Enum2, PredType>();\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<Expected, Enum1, Enum2, PredType>();\r\n\r\n    // Enum classes are not convertible\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<false, EnumClass1, Type2, PredType>();\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<false, Type1, EnumClass2, PredType>();\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<false, EnumClass1, Enum2, PredType>();\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<false, Enum1, EnumClass2, PredType>();\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<false, EnumClass1, EnumClass2, PredType>();\r\n\r\n    // Don't allow converting to and between enums\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<false, Type1, Type2, EnumPred>();\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<false, Enum1, Type2, EnumPred>();\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<false, Type1, Enum2, EnumPred>();\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<false, Enum1, Enum2, EnumPred>();\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<false, Type1, Type2, EnumClassPred>();\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<false, Enum1, Type2, EnumClassPred>();\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<false, Type1, Enum2, EnumClassPred>();\r\n    test_lex_compare_memcmp_classify_for_opaque_preds_helper<false, Enum1, Enum2, EnumClassPred>();\r\n}\r\n\r\ntemplate <bool Expected, class Type1, class Type2>\r\nvoid test_lex_compare_memcmp_classify_for_types() {\r\n    using expected_less    = conditional_t<Expected, less<int>, void>;\r\n    using expected_greater = conditional_t<Expected, greater<int>, void>;\r\n\r\n    test_lex_compare_memcmp_classify_for_pred<expected_less, Type1, Type2, less<>>();\r\n    test_lex_compare_memcmp_classify_for_pred<expected_greater, Type1, Type2, greater<>>();\r\n\r\n    using bigger_type = conditional_t<sizeof(Type1) == sizeof(int), long long, int>;\r\n\r\n    test_lex_compare_memcmp_classify_for_pred<void, Type1, Type2, less<bigger_type>>();\r\n    test_lex_compare_memcmp_classify_for_pred<void, Type1, Type2, greater<bigger_type>>();\r\n\r\n    test_lex_compare_memcmp_classify_for_pred<void, Type1, Type2, less<volatile Type1>>();\r\n    test_lex_compare_memcmp_classify_for_pred<void, Type1, Type2, greater<volatile Type1>>();\r\n    test_lex_compare_memcmp_classify_for_pred<void, Type1, Type2, less<const volatile Type1>>();\r\n    test_lex_compare_memcmp_classify_for_pred<void, Type1, Type2, greater<const volatile Type1>>();\r\n\r\n    test_lex_compare_memcmp_classify_for_pred<void, Type1, Type2, equal_to<>>();\r\n    test_lex_compare_memcmp_classify_for_pred<void, Type1, Type2, less_equal<>>();\r\n    test_lex_compare_memcmp_classify_for_pred<void, Type1, Type2, greater_equal<>>();\r\n\r\n    auto lambda = [](auto&&, auto&&) { return false; };\r\n    test_lex_compare_memcmp_classify_for_pred<void, Type1, Type2, decltype(lambda)>();\r\n\r\n#if _HAS_CXX20\r\n    test_lex_compare_memcmp_classify_for_pred<expected_less, Type1, Type2, ranges::less>();\r\n    test_lex_compare_memcmp_classify_for_pred<expected_greater, Type1, Type2, ranges::greater>();\r\n\r\n    test_lex_compare_memcmp_classify_for_pred<void, Type1, Type2, ranges::equal_to>();\r\n    test_lex_compare_memcmp_classify_for_pred<void, Type1, Type2, ranges::less_equal>();\r\n    test_lex_compare_memcmp_classify_for_pred<void, Type1, Type2, ranges::greater_equal>();\r\n\r\n    // Test three way version\r\n    using strong_order_t  = remove_const_t<decltype(strong_order)>;\r\n    using weak_order_t    = remove_const_t<decltype(weak_order)>;\r\n    using partial_order_t = remove_const_t<decltype(partial_order)>;\r\n    using expected_compare_three_way =\r\n        conditional_t<Expected && is_same_v<Type1, bool> == is_same_v<Type2, bool>, compare_three_way, void>;\r\n    using expected_strong_order =\r\n        conditional_t<Expected && is_same_v<decay_t<Type1>, decay_t<Type2>>, strong_order_t, void>;\r\n    using expected_weak_order =\r\n        conditional_t<Expected && is_same_v<decay_t<Type1>, decay_t<Type2>>, weak_order_t, void>;\r\n    using expected_partial_order =\r\n        conditional_t<Expected && is_same_v<decay_t<Type1>, decay_t<Type2>>, partial_order_t, void>;\r\n\r\n    test_lex_compare_three_way_memcmp_classify_for_comp<expected_compare_three_way, Type1, Type2, compare_three_way>();\r\n    test_lex_compare_three_way_memcmp_classify_for_comp<expected_strong_order, Type1, Type2, strong_order_t>();\r\n    test_lex_compare_three_way_memcmp_classify_for_comp<expected_weak_order, Type1, Type2, weak_order_t>();\r\n    test_lex_compare_three_way_memcmp_classify_for_comp<expected_partial_order, Type1, Type2, partial_order_t>();\r\n\r\n    auto three_way_lambda = [](auto&&, auto&&) { return strong_ordering::equal; };\r\n    test_lex_compare_memcmp_classify_for_pred<void, Type1, Type2, decltype(three_way_lambda)>();\r\n#endif // _HAS_CXX20\r\n}\r\n\r\nconstexpr bool vec_alg = _VECTORIZED_MISMATCH;\r\n\r\ntemplate <bool Expected, class Type1, class Type2>\r\nvoid test_lex_compare_memcmp_classify_for_1byte_integrals() {\r\n    test_lex_compare_memcmp_classify_for_types<Expected, Type1, Type2>();\r\n\r\n    test_lex_compare_memcmp_classify_for_opaque_preds<is_unsigned_v<char> || vec_alg, Type1, Type2, char>();\r\n    test_lex_compare_memcmp_classify_for_opaque_preds<true, Type1, Type2, unsigned char>();\r\n    test_lex_compare_memcmp_classify_for_opaque_preds<vec_alg, Type1, Type2, signed char>();\r\n#ifdef __cpp_lib_char8_t\r\n    test_lex_compare_memcmp_classify_for_opaque_preds<true, Type1, Type2, char8_t>();\r\n#endif // __cpp_lib_char8_t\r\n    test_lex_compare_memcmp_classify_for_opaque_preds<is_same_v<Type1, bool> && is_same_v<Type2, bool>, Type1, Type2,\r\n        bool>();\r\n}\r\n\r\ntemplate <bool Expected, class Container1, class Container2>\r\nvoid test_lex_compare_memcmp_classify_for_containers() {\r\n    using expected_less    = conditional_t<Expected, less<int>, void>;\r\n    using expected_greater = conditional_t<Expected, greater<int>, void>;\r\n\r\n    using It1      = typename Container1::iterator;\r\n    using ConstIt1 = typename Container1::const_iterator;\r\n    using It2      = typename Container2::iterator;\r\n    using ConstIt2 = typename Container2::const_iterator;\r\n    test_lex_compare_memcmp_classify_for_iterators<expected_less, It1, ConstIt1, It2, ConstIt2, less<>>();\r\n    test_lex_compare_memcmp_classify_for_iterators<expected_greater, It1, ConstIt1, It2, ConstIt2, greater<>>();\r\n}\r\n\r\nenum char_enum : char {};\r\nenum schar_enum : signed char {};\r\nenum uchar_enum : unsigned char {};\r\n#ifdef __cpp_lib_char8_t\r\nenum char8_t_enum : char8_t {};\r\n#endif // __cpp_lib_char8_t\r\n\r\nenum class char_enum_class : char {};\r\nenum class schar_enum_class : signed char {};\r\nenum class uchar_enum_class : unsigned char {};\r\n#ifdef __cpp_lib_char8_t\r\nenum class char8_t_enum_class : char8_t {};\r\n#endif // __cpp_lib_char8_t\r\n\r\nstruct user_struct {};\r\n\r\nbool operator<(const user_struct&, const user_struct&) {\r\n    return false;\r\n}\r\n\r\nvoid lex_compare_memcmp_classify_test_cases() {\r\n    // Test 1 byte integrals\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<is_unsigned_v<char> || vec_alg, char, char>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<is_unsigned_v<char>, unsigned char, char>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<is_unsigned_v<char>, char, unsigned char>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<true, unsigned char, unsigned char>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<vec_alg, signed char, signed char>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<vec_alg && is_signed_v<char>, char, signed char>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<vec_alg && is_signed_v<char>, signed char, char>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<false, unsigned char, signed char>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<false, signed char, unsigned char>();\r\n#ifdef __cpp_lib_char8_t\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<true, char8_t, char8_t>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<true, unsigned char, char8_t>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<true, char8_t, unsigned char>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<is_unsigned_v<char>, char8_t, char>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<is_unsigned_v<char>, char, char8_t>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<false, char8_t, signed char>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<false, signed char, char8_t>();\r\n#endif // __cpp_lib_char8_t\r\n\r\n    // Test bool\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<true, bool, bool>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<true, unsigned char, bool>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<true, bool, unsigned char>();\r\n#ifdef __cpp_lib_char8_t\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<true, bool, char8_t>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<true, char8_t, bool>();\r\n#endif // __cpp_lib_char8_t\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<vec_alg && is_unsigned_v<char>, char, bool>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<vec_alg && is_unsigned_v<char>, bool, char>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<false, signed char, bool>();\r\n    test_lex_compare_memcmp_classify_for_1byte_integrals<false, bool, signed char>();\r\n\r\n    // Don't allow enums\r\n    test_lex_compare_memcmp_classify_for_types<false, char_enum, char_enum>();\r\n    test_lex_compare_memcmp_classify_for_types<false, schar_enum, schar_enum>();\r\n    test_lex_compare_memcmp_classify_for_types<false, uchar_enum, uchar_enum>();\r\n#ifdef __cpp_lib_char8_t\r\n    test_lex_compare_memcmp_classify_for_types<false, char8_t_enum, char8_t_enum>();\r\n#endif // __cpp_lib_char8_t\r\n\r\n    // Don't allow enum classes\r\n    test_lex_compare_memcmp_classify_for_types<false, char_enum_class, char_enum_class>();\r\n    test_lex_compare_memcmp_classify_for_types<false, schar_enum_class, schar_enum_class>();\r\n    test_lex_compare_memcmp_classify_for_types<false, uchar_enum_class, uchar_enum_class>();\r\n#ifdef __cpp_lib_char8_t\r\n    test_lex_compare_memcmp_classify_for_types<false, char8_t_enum_class, char8_t_enum_class>();\r\n#endif // __cpp_lib_char8_t\r\n\r\n#ifdef __cpp_lib_byte\r\n    // Test std::byte\r\n    test_lex_compare_memcmp_classify_for_types<true, byte, byte>();\r\n#endif // __cpp_lib_byte\r\n\r\n    // Test bigger integrals\r\n    test_lex_compare_memcmp_classify_for_types<false, unsigned char, int>();\r\n    test_lex_compare_memcmp_classify_for_types<false, int, unsigned char>();\r\n    test_lex_compare_memcmp_classify_for_types<vec_alg, int, int>();\r\n    test_lex_compare_memcmp_classify_for_types<vec_alg, unsigned int, unsigned int>();\r\n    test_lex_compare_memcmp_classify_for_types<vec_alg, short, short>();\r\n    test_lex_compare_memcmp_classify_for_types<vec_alg, unsigned short, unsigned short>();\r\n\r\n    // Don't allow pointers\r\n    test_lex_compare_memcmp_classify_for_types<false, int*, int*>();\r\n\r\n    // Don't allow user-defined types\r\n    test_lex_compare_memcmp_classify_for_types<false, user_struct, user_struct>();\r\n\r\n    // Test _Std_char_traits_lt\r\n    test_lex_compare_memcmp_classify_for_pred<less<int>, char, char, _Std_char_traits_lt<char>>();\r\n#ifdef __cpp_lib_char8_t\r\n    test_lex_compare_memcmp_classify_for_pred<less<int>, char8_t, char8_t, _Std_char_traits_lt<char8_t>>();\r\n#endif // __cpp_lib_char8_t\r\n\r\n    using vless = conditional_t<vec_alg, less<int>, void>;\r\n\r\n    test_lex_compare_memcmp_classify_for_pred<vless, wchar_t, wchar_t, _Std_char_traits_lt<wchar_t>>();\r\n    test_lex_compare_memcmp_classify_for_pred<vless, char16_t, char16_t, _Std_char_traits_lt<char16_t>>();\r\n    test_lex_compare_memcmp_classify_for_pred<vless, char32_t, char32_t, _Std_char_traits_lt<char32_t>>();\r\n\r\n    // Test different containers\r\n#if _HAS_CXX20\r\n    test_lex_compare_memcmp_classify_for_containers<true, vector<unsigned char>, vector<unsigned char>>();\r\n    test_lex_compare_memcmp_classify_for_containers<true, array<unsigned char, 8>, array<unsigned char, 8>>();\r\n    test_lex_compare_memcmp_classify_for_containers<true, vector<unsigned char>, array<unsigned char, 8>>();\r\n    test_lex_compare_memcmp_classify_for_containers<true, vector<unsigned char>, array<unsigned char, 8>>();\r\n#endif // _HAS_CXX20\r\n\r\n    test_lex_compare_memcmp_classify_for_containers<false, list<unsigned char>, list<unsigned char>>();\r\n    test_lex_compare_memcmp_classify_for_containers<false, vector<unsigned char>, list<unsigned char>>();\r\n    test_lex_compare_memcmp_classify_for_containers<false, list<unsigned char>, vector<unsigned char>>();\r\n\r\n#if _HAS_CXX20\r\n    // Test counted_iterator\r\n    assert_lex_compare_memcmp_classify<less<int>, counted_iterator<unsigned char*>, unsigned char*, less<>>();\r\n    assert_lex_compare_memcmp_classify<less<int>, unsigned char*, counted_iterator<unsigned char*>, less<>>();\r\n    assert_lex_compare_memcmp_classify<less<int>, counted_iterator<unsigned char*>, counted_iterator<unsigned char*>,\r\n        less<>>();\r\n#endif // _HAS_CXX20\r\n\r\n    // No volatile\r\n    test_lex_compare_memcmp_classify_for_pred_helper<void, volatile unsigned char, unsigned char, less<>>();\r\n    test_lex_compare_memcmp_classify_for_pred_helper<void, unsigned char, volatile unsigned char, less<>>();\r\n    test_lex_compare_memcmp_classify_for_pred_helper<void, volatile unsigned char, volatile unsigned char, less<>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000442_random_subtract_with_carry_engine_io/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000442_random_subtract_with_carry_engine_io/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <ios>\r\n#include <random>\r\n#include <sstream>\r\n#include <string>\r\nusing namespace std;\r\n\r\nvoid check_state(const string& state_str) {\r\n    // Check word-by-word in case of whitespace differences.\r\n    static constexpr const char* state_ref[] = {\r\n        \"10880375256626\",\r\n        \"126660097854724\",\r\n        \"33643165434010\",\r\n        \"78293780235492\",\r\n        \"179418984296008\",\r\n        \"96783156950859\",\r\n        \"238199764491708\",\r\n        \"34339434557790\",\r\n        \"155299155394531\",\r\n        \"29014415493780\",\r\n        \"209265474179052\",\r\n        \"263777435457028\",\r\n        \"0\",\r\n    };\r\n    constexpr auto state_size = size(state_ref);\r\n    stringstream sstr(state_str);\r\n\r\n    size_t idx = 0;\r\n    string word;\r\n    while (sstr && idx < state_size) {\r\n        sstr >> word;\r\n        assert(word == state_ref[idx]);\r\n        ++idx;\r\n    }\r\n\r\n    assert(sstr.rdstate() == ios_base::eofbit);\r\n    assert(idx == state_size);\r\n}\r\n\r\nvoid check(stringstream& sstr) {\r\n    // N4892 [tab:rand.req.eng]: \"Postconditions: The os.fmtflags and fill character are unchanged.\"\r\n    // and \"Postconditions: The is.fmtflags are unchanged.\"\r\n    const auto old_flags = sstr.flags();\r\n    const auto old_fill  = sstr.fill();\r\n    ranlux48_base eng1;\r\n    ranlux48_base eng2;\r\n    sstr << eng1;\r\n    check_state(sstr.str());\r\n    sstr >> eng2;\r\n    assert(eng1 == eng2);\r\n    assert(sstr.flags() == old_flags);\r\n    assert(sstr.fill() == old_fill);\r\n}\r\n\r\nint main() {\r\n    {\r\n        stringstream sstr;\r\n        sstr << hex;\r\n        check(sstr);\r\n    }\r\n\r\n    {\r\n        stringstream sstr;\r\n        sstr.unsetf(ios_base::skipws);\r\n        check(sstr);\r\n    }\r\n\r\n    {\r\n        stringstream sstr;\r\n        sstr.fill('.');\r\n        sstr.width(40);\r\n        check(sstr);\r\n    }\r\n\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000457_system_error_message/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000457_system_error_message/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <yvals.h>\r\n\r\n#include <__msvc_system_error_abi.hpp>\r\n#include <cassert>\r\n\r\nint main() {\r\n    char example[] = \"test string \\r\\n\\t\\0 test test\";\r\n    //                000000000011 1 1 1 11111222222\r\n    //                012345678901 2 3 4 56789012345\r\n    assert(__std_get_string_size_without_trailing_whitespace(example, 0) == 0);\r\n    assert(__std_get_string_size_without_trailing_whitespace(example, 4) == 4);\r\n    assert(__std_get_string_size_without_trailing_whitespace(example, 5) == 4);\r\n    assert(__std_get_string_size_without_trailing_whitespace(example, 16) == 11);\r\n    assert(__std_get_string_size_without_trailing_whitespace(example, 17) == 11);\r\n    assert(__std_get_string_size_without_trailing_whitespace(example, 18) == 18);\r\n    assert(__std_get_string_size_without_trailing_whitespace(example, sizeof(example)) == 26);\r\n\r\n    char allWhitespace[] = \"\\r\\n\\t\\0 \";\r\n    assert(__std_get_string_size_without_trailing_whitespace(allWhitespace, sizeof(allWhitespace)) == 0);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000519_cmath_overloads/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000519_cmath_overloads/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cmath>\r\n#include <limits>\r\n#include <math.h>\r\n#include <type_traits>\r\n\r\n// Also test the partial implementation of P0533R9 \"constexpr For <cmath> And <cstdlib>\"\r\n#if _HAS_CXX23\r\n#define CONSTEXPR23 constexpr\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n#define CONSTEXPR23 inline\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\nCONSTEXPR23 void test_bool_overloads() {\r\n    // test overloads in std\r\n\r\n    assert(std::fpclassify(false) == FP_ZERO);\r\n    assert(std::fpclassify(true) == FP_NORMAL);\r\n\r\n    assert(std::isfinite(false));\r\n    assert(std::isfinite(true));\r\n\r\n    assert(!std::isinf(false));\r\n    assert(!std::isinf(true));\r\n\r\n    assert(!std::isnan(false));\r\n    assert(!std::isnan(true));\r\n\r\n    assert(!std::isnormal(false));\r\n    assert(std::isnormal(true));\r\n\r\n    assert(!std::signbit(false));\r\n    assert(!std::signbit(true));\r\n\r\n#if _HAS_CXX23 // TRANSITION, UCRT should implement P0533R9 \"constexpr For <cmath> And <cstdlib>\"\r\n    if (!std::is_constant_evaluated())\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n    {\r\n        assert(!std::isgreater(false, true));\r\n        assert(!std::isgreaterequal(false, true));\r\n        assert(std::isless(false, true));\r\n        assert(std::islessequal(false, true));\r\n        assert(std::islessgreater(false, true));\r\n        assert(!std::isunordered(false, true));\r\n    }\r\n\r\n    // test overloads in the global namespace\r\n\r\n    assert(::fpclassify(false) == FP_ZERO);\r\n    assert(::fpclassify(true) == FP_NORMAL);\r\n\r\n    assert(::isfinite(false));\r\n    assert(::isfinite(true));\r\n\r\n    assert(!::isinf(false));\r\n    assert(!::isinf(true));\r\n\r\n    assert(!::isnan(false));\r\n    assert(!::isnan(true));\r\n\r\n    assert(!::isnormal(false));\r\n    assert(::isnormal(true));\r\n\r\n    assert(!::signbit(false));\r\n    assert(!::signbit(true));\r\n\r\n#if _HAS_CXX23 // TRANSITION, UCRT should implement P0533R9 \"constexpr For <cmath> And <cstdlib>\"\r\n    if (!std::is_constant_evaluated())\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n    {\r\n        assert(!::isgreater(false, true));\r\n        assert(!::isgreaterequal(false, true));\r\n        assert(::isless(false, true));\r\n        assert(::islessequal(false, true));\r\n        assert(::islessgreater(false, true));\r\n        assert(!::isunordered(false, true));\r\n    }\r\n}\r\n\r\ntemplate <class I>\r\nCONSTEXPR23 void test_other_integral_overloads() {\r\n    constexpr I imax                    = std::numeric_limits<I>::max();\r\n    constexpr I imaxm1                  = static_cast<I>(imax - 1);\r\n    constexpr bool narrower_than_double = std::numeric_limits<I>::digits < std::numeric_limits<double>::digits;\r\n\r\n    // test overloads in std\r\n\r\n    assert(std::fpclassify(I{}) == FP_ZERO);\r\n    assert(std::fpclassify(static_cast<I>(42)) == FP_NORMAL);\r\n    assert(std::fpclassify(static_cast<I>(-42)) == FP_NORMAL);\r\n\r\n    assert(std::isfinite(I{}));\r\n    assert(std::isfinite(static_cast<I>(42)));\r\n    assert(std::isfinite(static_cast<I>(-42)));\r\n\r\n    assert(!std::isinf(I{}));\r\n    assert(!std::isinf(static_cast<I>(42)));\r\n    assert(!std::isinf(static_cast<I>(-42)));\r\n\r\n    assert(!std::isnan(I{}));\r\n    assert(!std::isnan(static_cast<I>(42)));\r\n    assert(!std::isnan(static_cast<I>(-42)));\r\n\r\n    assert(!std::isnormal(I{}));\r\n    assert(std::isnormal(static_cast<I>(42)));\r\n    assert(std::isnormal(static_cast<I>(-42)));\r\n\r\n    assert(!std::signbit(I{}));\r\n    assert(!std::signbit(static_cast<I>(42)));\r\n    assert(std::signbit(static_cast<I>(-42)) == std::is_signed_v<I>);\r\n\r\n#if _HAS_CXX23 // TRANSITION, UCRT should implement P0533R9 \"constexpr For <cmath> And <cstdlib>\"\r\n    if (!std::is_constant_evaluated())\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n    {\r\n        assert(!std::isgreater(static_cast<I>(17), static_cast<I>(29)));\r\n        assert(!std::isgreaterequal(static_cast<I>(17), static_cast<I>(29)));\r\n        assert(std::isless(static_cast<I>(17), static_cast<I>(29)));\r\n        assert(std::islessequal(static_cast<I>(17), static_cast<I>(29)));\r\n        assert(std::islessgreater(static_cast<I>(17), static_cast<I>(29)));\r\n        assert(!std::isunordered(static_cast<I>(17), static_cast<I>(29)));\r\n\r\n        // test that integers are converted to double\r\n        assert(std::isgreater(imax, imaxm1) == narrower_than_double);\r\n        assert(std::isgreaterequal(imaxm1, imax) == !narrower_than_double);\r\n        assert(std::isless(imaxm1, imax) == narrower_than_double);\r\n        assert(std::islessequal(imax, imaxm1) == !narrower_than_double);\r\n        assert(std::islessgreater(imax, imaxm1) == narrower_than_double);\r\n        assert(!std::isunordered(imax, imaxm1));\r\n    }\r\n\r\n    // test overloads in the global namespace\r\n\r\n    assert(::fpclassify(I{}) == FP_ZERO);\r\n    assert(::fpclassify(static_cast<I>(42)) == FP_NORMAL);\r\n    assert(::fpclassify(static_cast<I>(-42)) == FP_NORMAL);\r\n\r\n    assert(::isfinite(I{}));\r\n    assert(::isfinite(static_cast<I>(42)));\r\n    assert(::isfinite(static_cast<I>(-42)));\r\n\r\n    assert(!::isinf(I{}));\r\n    assert(!::isinf(static_cast<I>(42)));\r\n    assert(!::isinf(static_cast<I>(-42)));\r\n\r\n    assert(!::isnan(I{}));\r\n    assert(!::isnan(static_cast<I>(42)));\r\n    assert(!::isnan(static_cast<I>(-42)));\r\n\r\n    assert(!::isnormal(I{}));\r\n    assert(::isnormal(static_cast<I>(42)));\r\n    assert(::isnormal(static_cast<I>(-42)));\r\n\r\n    assert(!::signbit(I{}));\r\n    assert(!::signbit(static_cast<I>(42)));\r\n    assert(::signbit(static_cast<I>(-42)) == std::is_signed_v<I>);\r\n\r\n#if _HAS_CXX23 // TRANSITION, UCRT should implement P0533R9 \"constexpr For <cmath> And <cstdlib>\"\r\n    if (!std::is_constant_evaluated())\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n    {\r\n        assert(!::isgreater(static_cast<I>(17), static_cast<I>(29)));\r\n        assert(!::isgreaterequal(static_cast<I>(17), static_cast<I>(29)));\r\n        assert(::isless(static_cast<I>(17), static_cast<I>(29)));\r\n        assert(::islessequal(static_cast<I>(17), static_cast<I>(29)));\r\n        assert(::islessgreater(static_cast<I>(17), static_cast<I>(29)));\r\n        assert(!::isunordered(static_cast<I>(17), static_cast<I>(29)));\r\n\r\n        // test that integers are converted to double\r\n        assert(::isgreater(imax, imaxm1) == narrower_than_double);\r\n        assert(::isgreaterequal(imaxm1, imax) == !narrower_than_double);\r\n        assert(::isless(imaxm1, imax) == narrower_than_double);\r\n        assert(::islessequal(imax, imaxm1) == !narrower_than_double);\r\n        assert(::islessgreater(imax, imaxm1) == narrower_than_double);\r\n        assert(!::isunordered(imax, imaxm1));\r\n    }\r\n}\r\n\r\ntemplate <class F>\r\nCONSTEXPR23 void test_floating_overloads() {\r\n    constexpr F zero = 0;\r\n    constexpr F inf  = std::numeric_limits<F>::infinity();\r\n    constexpr F nan  = std::numeric_limits<F>::quiet_NaN();\r\n    constexpr F lhs  = static_cast<F>(3.14);\r\n    constexpr F rhs  = static_cast<F>(17.29);\r\n\r\n    // test overloads in std\r\n\r\n#if _HAS_CXX23 && !defined(__clang__) // TRANSITION, UCRT should implement P0533R9 \"constexpr For <cmath> And <cstdlib>\"\r\n    if (!std::is_constant_evaluated())\r\n#endif // ^^^ _HAS_CXX23 && !defined(__clang__) ^^^\r\n    {\r\n        assert(std::isfinite(zero));\r\n        assert(!std::isfinite(inf));\r\n        assert(!std::isfinite(nan));\r\n        assert(std::isfinite(lhs));\r\n\r\n        assert(!std::isinf(zero));\r\n        assert(std::isinf(inf));\r\n        assert(!std::isinf(nan));\r\n        assert(!std::isinf(lhs));\r\n\r\n        assert(!std::isnan(zero));\r\n        assert(!std::isnan(inf));\r\n        assert(std::isnan(nan));\r\n        assert(!std::isnan(lhs));\r\n\r\n        assert(!std::isnormal(zero));\r\n        assert(!std::isnormal(inf));\r\n        assert(!std::isnormal(nan));\r\n        assert(std::isnormal(lhs));\r\n    }\r\n\r\n#if _HAS_CXX23 // TRANSITION, UCRT should implement P0533R9 \"constexpr For <cmath> And <cstdlib>\"\r\n    if (!std::is_constant_evaluated())\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n    {\r\n        assert(!std::isgreater(lhs, rhs));\r\n        assert(!std::isgreaterequal(lhs, rhs));\r\n        assert(std::isless(lhs, rhs));\r\n        assert(std::islessequal(lhs, rhs));\r\n        assert(std::islessgreater(lhs, rhs));\r\n        assert(!std::isunordered(lhs, rhs));\r\n    }\r\n\r\n    // test overloads in the global namespace\r\n\r\n#if _HAS_CXX23 && !defined(__clang__) // TRANSITION, UCRT should implement P0533R9 \"constexpr For <cmath> And <cstdlib>\"\r\n    if (!std::is_constant_evaluated())\r\n#endif // ^^^ _HAS_CXX23 && !defined(__clang__) ^^^\r\n    {\r\n        assert(::isfinite(zero));\r\n        assert(!::isfinite(inf));\r\n        assert(!::isfinite(nan));\r\n        assert(::isfinite(lhs));\r\n\r\n        assert(!::isinf(zero));\r\n        assert(::isinf(inf));\r\n        assert(!::isinf(nan));\r\n        assert(!::isinf(lhs));\r\n\r\n        assert(!::isnan(zero));\r\n        assert(!::isnan(inf));\r\n        assert(::isnan(nan));\r\n        assert(!::isnan(lhs));\r\n\r\n        assert(!::isnormal(zero));\r\n        assert(!::isnormal(inf));\r\n        assert(!::isnormal(nan));\r\n        assert(::isnormal(lhs));\r\n    }\r\n\r\n#if _HAS_CXX23 // TRANSITION, UCRT should implement P0533R9 \"constexpr For <cmath> And <cstdlib>\"\r\n    if (!std::is_constant_evaluated())\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n    {\r\n        assert(!::isgreater(lhs, rhs));\r\n        assert(!::isgreaterequal(lhs, rhs));\r\n        assert(::isless(lhs, rhs));\r\n        assert(::islessequal(lhs, rhs));\r\n        assert(::islessgreater(lhs, rhs));\r\n        assert(!::isunordered(lhs, rhs));\r\n    }\r\n}\r\n\r\nCONSTEXPR23 bool test_all_overloads() {\r\n    test_bool_overloads();\r\n    test_other_integral_overloads<signed char>();\r\n    test_other_integral_overloads<unsigned char>();\r\n    test_other_integral_overloads<short>();\r\n    test_other_integral_overloads<unsigned short>();\r\n    test_other_integral_overloads<int>();\r\n    test_other_integral_overloads<unsigned int>();\r\n    test_other_integral_overloads<long>();\r\n    test_other_integral_overloads<unsigned long>();\r\n    test_other_integral_overloads<long long>();\r\n    test_other_integral_overloads<unsigned long long>();\r\n    test_other_integral_overloads<char>();\r\n#ifdef __cpp_char8_t\r\n    test_other_integral_overloads<char8_t>();\r\n#endif // defined(__cpp_char8_t)\r\n    test_other_integral_overloads<char16_t>();\r\n    test_other_integral_overloads<char32_t>();\r\n    test_other_integral_overloads<wchar_t>();\r\n\r\n    test_floating_overloads<float>();\r\n    test_floating_overloads<double>();\r\n    test_floating_overloads<long double>();\r\n\r\n    return true;\r\n}\r\n\r\n#if _HAS_CXX23\r\nstatic_assert(test_all_overloads());\r\n#endif // _HAS_CXX23\r\n\r\nint main() {\r\n    test_all_overloads();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000527_remove_allocator_void/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000527_remove_allocator_void/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_CXX20_IS_ALWAYS_EQUAL_DEPRECATION_WARNING\r\n\r\n#include <memory>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T, class = void>\r\nconstexpr bool has_member_size_type = false;\r\n\r\ntemplate <class T>\r\nconstexpr bool has_member_size_type<T, void_t<typename T::size_type>> = true;\r\n\r\ntemplate <class T, class = void>\r\nconstexpr bool has_member_difference_type = false;\r\n\r\ntemplate <class T>\r\nconstexpr bool has_member_difference_type<T, void_t<typename T::difference_type>> = true;\r\n\r\ntemplate <class T, class = void>\r\nconstexpr bool has_member_pocma = false;\r\n\r\ntemplate <class T>\r\nconstexpr bool has_member_pocma<T, void_t<typename T::propagate_on_container_move_assignment>> = true;\r\n\r\ntemplate <class T, class = void>\r\nconstexpr bool has_member_is_always_equal = false;\r\n\r\ntemplate <class T>\r\nconstexpr bool has_member_is_always_equal<T, void_t<typename T::is_always_equal>> = true;\r\n\r\ntemplate <class T, class = void>\r\nconstexpr bool can_allocate = false;\r\n\r\ntemplate <class T>\r\nconstexpr bool can_allocate<T, void_t<decltype(declval<T&>().allocate(size_t{}))>> = true;\r\n\r\nSTATIC_ASSERT(has_member_size_type<allocator<int>>);\r\nSTATIC_ASSERT(has_member_difference_type<allocator<int>>);\r\nSTATIC_ASSERT(has_member_pocma<allocator<int>>);\r\nSTATIC_ASSERT(has_member_is_always_equal<allocator<int>>);\r\nSTATIC_ASSERT(can_allocate<allocator<int>>);\r\nSTATIC_ASSERT(is_convertible_v<allocator<void>, allocator<int>>);\r\n\r\n#if _HAS_CXX20\r\nconstexpr bool has_cxx20 = true;\r\n#else\r\nconstexpr bool has_cxx20 = false;\r\n#endif\r\n\r\nSTATIC_ASSERT(has_cxx20 == has_member_size_type<allocator<void>>);\r\nSTATIC_ASSERT(has_cxx20 == has_member_difference_type<allocator<void>>);\r\nSTATIC_ASSERT(has_cxx20 == has_member_pocma<allocator<void>>);\r\nSTATIC_ASSERT(has_cxx20 == has_member_is_always_equal<allocator<void>>);\r\nSTATIC_ASSERT(has_cxx20 == can_allocate<allocator<void>>);\r\nSTATIC_ASSERT(has_cxx20 == is_convertible_v<allocator<int>, allocator<void>>);\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/custom_format.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\n\r\nfrom stl.test.format import STLTestFormat, TestStep\r\nfrom stl.test.tests import TestType\r\n\r\n\r\nclass CustomTestFormat(STLTestFormat):\r\n    def getBuildSteps(self, test, litConfig, shared):\r\n        exeSourceDir = os.path.dirname(test.getSourcePath())\r\n        _, outputBase = test.getTempPaths()\r\n\r\n        sourceFiles = []\r\n        for filename in os.listdir(exeSourceDir):\r\n            if filename.endswith('.cpp'):\r\n                sourceFiles.append(os.path.join(exeSourceDir, filename))\r\n\r\n        if TestType.COMPILE in test.testType:\r\n            cmd = [test.cxx, '/c', *sourceFiles, *test.flags, *test.compileFlags]\r\n        elif TestType.RUN in test.testType:\r\n            shared.execFile = outputBase + '.exe'\r\n            cmd = [test.cxx, *sourceFiles, *test.flags, *test.compileFlags, '/Fe' + shared.execFile,\r\n                   '/link', *test.linkFlags]\r\n\r\n        yield TestStep(cmd, shared.execDir, shared.env, False)\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/lit.local.cfg",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\nimport site\r\nsite.addsitedir(os.path.dirname(os.path.dirname(__file__)))\r\nimport GH_000545_include_compare.custom_format\r\n\r\nconfig.test_format = GH_000545_include_compare.custom_format.CustomTestFormat()\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nvoid test_array();\r\nvoid test_chrono();\r\nvoid test_coroutine();\r\nvoid test_deque();\r\nvoid test_filesystem();\r\nvoid test_flat_map();\r\nvoid test_flat_set();\r\nvoid test_forward_list();\r\nvoid test_iterator();\r\nvoid test_list();\r\nvoid test_map();\r\nvoid test_memory();\r\nvoid test_optional();\r\nvoid test_queue();\r\nvoid test_ranges();\r\nvoid test_regex();\r\nvoid test_set();\r\nvoid test_stack();\r\nvoid test_stacktrace();\r\nvoid test_string();\r\nvoid test_string_view();\r\nvoid test_system_error();\r\nvoid test_thread();\r\nvoid test_tuple();\r\nvoid test_typeindex();\r\nvoid test_unordered_map();\r\nvoid test_unordered_set();\r\nvoid test_utility();\r\nvoid test_variant();\r\nvoid test_vector();\r\n\r\nint main() {\r\n    test_array();\r\n    test_chrono();\r\n    test_coroutine();\r\n    test_deque();\r\n    test_filesystem();\r\n    test_flat_map();\r\n    test_flat_set();\r\n    test_forward_list();\r\n    test_iterator();\r\n    test_list();\r\n    test_map();\r\n    test_memory();\r\n    test_optional();\r\n    test_queue();\r\n    test_ranges();\r\n    test_regex();\r\n    test_set();\r\n    test_stack();\r\n    test_stacktrace();\r\n    test_string();\r\n    test_string_view();\r\n    test_system_error();\r\n    test_thread();\r\n    test_tuple();\r\n    test_typeindex();\r\n    test_unordered_map();\r\n    test_unordered_set();\r\n    test_utility();\r\n    test_variant();\r\n    test_vector();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_array.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_array() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_chrono.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <chrono>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_chrono() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_coroutine.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <coroutine>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_coroutine() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_deque.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <deque>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_deque() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_filesystem.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <filesystem>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_filesystem() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_flat_map.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <version>\r\n#if _HAS_CXX23\r\n\r\n#include <flat_map>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\n#endif // _HAS_CXX23\r\n\r\nvoid test_flat_map() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_flat_set.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <version>\r\n#if _HAS_CXX23\r\n\r\n#include <flat_set>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\n#endif // _HAS_CXX23\r\n\r\nvoid test_flat_set() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_forward_list.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <forward_list>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_forward_list() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_iterator.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <iterator>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_iterator() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_list.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <list>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_list() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_map.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <map>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_map() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_memory.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <memory>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_memory() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_optional.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <optional>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_optional() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_queue.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <queue>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_queue() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_ranges.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <ranges>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_ranges() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_regex.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <regex>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_regex() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_set.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <set>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_set() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_stack.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <stack>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_stack() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_stacktrace.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <version>\r\n#if _HAS_CXX23\r\n\r\n#include <stacktrace>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\n#endif // _HAS_CXX23\r\n\r\nvoid test_stacktrace() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_string.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <string>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_string() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_string_view.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <string_view>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_string_view() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_system_error.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <system_error>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_system_error() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_thread.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <thread>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_thread() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_tuple.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <tuple>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_tuple() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_typeindex.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <typeindex>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_typeindex() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_unordered_map.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <unordered_map>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_unordered_map() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_unordered_set.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <unordered_set>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_unordered_set() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_utility.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <utility>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_utility() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_variant.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <variant>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_variant() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000545_include_compare/test_vector.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <vector>\r\n\r\n// Testing LWG-3330 \"Include <compare> from most library headers\" by intentionally NOT including <compare>\r\n\r\nstatic_assert(std::is_eq(std::partial_ordering::equivalent));\r\n\r\nvoid test_vector() {}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000625_vector_bool_optimization/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"\"\r\n*\tPM_CL=\"/J\"\r\n"
  },
  {
    "path": "tests/std/tests/GH_000625_vector_bool_optimization/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <functional>\r\n#include <memory>\r\n#include <random>\r\n#include <vector>\r\n\r\n#if _HAS_CXX20\r\n#define CONSTEXPR20 constexpr\r\n#else\r\n#define CONSTEXPR20 inline\r\n#endif\r\n\r\nusing namespace std;\r\n\r\nconstexpr int blockSize = 32;\r\nstatic_assert(blockSize == _VBITS, \"Invalid block size\");\r\n\r\n// This test data is not random, but irregular enough to ensure confidence in the tests\r\nconstexpr bool source_raw[] = { //\r\n    true, false, true, false, true, true, true, false, //\r\n    true, false, true, false, true, true, true, false, //\r\n    true, false, true, false, true, true, true, false, //\r\n    true, false, true, false, true, true, true, false, //\r\n    true, false, true, false, true, true, true, false, //\r\n    true, false, true, false, true, true, true, false, //\r\n    true, false, true, false, true, true, true, false, //\r\n    true, false, true, false, true, true, true, false, //\r\n    true, false, true, false, true, true, true, false, //\r\n    true, false, true, false, true, true, true, false, //\r\n    true, false, true, false, true, true, true, false, //\r\n    true, false, true, false, true, true, true, false, //\r\n    true, false, true, false, true, true, true, false, //\r\n    true, false, true, false, true, true, true, false, //\r\n    true, false, true, false, true, true, true, false, //\r\n    true, false, true, false, true, true, true, false, //\r\n    true, false, true, false, true, true, true, false};\r\n\r\nCONSTEXPR20 void test_transform_helper(const size_t length) {\r\n    // Only no offset case\r\n\r\n    // This test data is not random, but irregular enough to ensure confidence in the tests\r\n    constexpr bool source2_raw[] = {//\r\n        true, true, false, false, false, false, true, true, //\r\n        true, true, false, false, false, false, true, true, //\r\n        true, true, false, false, false, false, true, true, //\r\n        true, true, false, false, false, false, true, true, //\r\n        true, true, false, false, false, false, true, true, //\r\n        true, true, false, false, false, false, true, true, //\r\n        true, true, false, false, false, false, true, true, //\r\n        true, true, false, false, false, false, true, true, //\r\n        true, true, false, false, false, false, true, true, //\r\n        true, true, false, false, false, false, true, true, //\r\n        true, true, false, false, false, false, true, true, //\r\n        true, true, false, false, false, false, true, true, //\r\n        true, true, false, false, false, false, true, true, //\r\n        true, true, false, false, false, false, true, true, //\r\n        true, true, false, false, false, false, true, true, //\r\n        true, true, false, false, false, false, true, true, //\r\n        true, true, false, false, false, false, true, true};\r\n\r\n#if _HAS_CXX17\r\n    static_assert(size(source_raw) == size(source2_raw));\r\n#endif // _HAS_CXX17\r\n\r\n    bool and_expected_raw[size(source_raw)];\r\n    bool or_expected_raw[size(source_raw)];\r\n    bool xor_expected_raw[size(source_raw)];\r\n    bool xnor_expected_raw[size(source_raw)];\r\n    bool l_expected_raw[size(source_raw)];\r\n    bool le_expected_raw[size(source_raw)];\r\n    bool g_expected_raw[size(source_raw)];\r\n    bool ge_expected_raw[size(source_raw)];\r\n    bool not_expected_raw[size(source_raw)];\r\n\r\n    transform(begin(source_raw), end(source_raw), begin(source2_raw), begin(and_expected_raw), logical_and<>{});\r\n    transform(begin(source_raw), end(source_raw), begin(source2_raw), begin(or_expected_raw), logical_or<>{});\r\n    transform(begin(source_raw), end(source_raw), begin(source2_raw), begin(xor_expected_raw), not_equal_to<>{});\r\n    transform(begin(source_raw), end(source_raw), begin(source2_raw), begin(xnor_expected_raw), equal_to<>{});\r\n    transform(begin(source_raw), end(source_raw), begin(source2_raw), begin(l_expected_raw), less<>{});\r\n    transform(begin(source_raw), end(source_raw), begin(source2_raw), begin(le_expected_raw), less_equal<>{});\r\n    transform(begin(source_raw), end(source_raw), begin(source2_raw), begin(g_expected_raw), greater<>{});\r\n    transform(begin(source_raw), end(source_raw), begin(source2_raw), begin(ge_expected_raw), greater_equal<>{});\r\n    transform(begin(source_raw), end(source_raw), begin(not_expected_raw), logical_not<>{});\r\n\r\n    const vector<bool> source1(source_raw, source_raw + static_cast<ptrdiff_t>(length));\r\n    const vector<bool> source2(source2_raw, source2_raw + static_cast<ptrdiff_t>(length));\r\n\r\n    vector<bool> and_expected(and_expected_raw, and_expected_raw + static_cast<ptrdiff_t>(length));\r\n    vector<bool> or_expected(or_expected_raw, or_expected_raw + static_cast<ptrdiff_t>(length));\r\n    vector<bool> xor_expected(xor_expected_raw, xor_expected_raw + static_cast<ptrdiff_t>(length));\r\n    vector<bool> xnor_expected(xnor_expected_raw, xnor_expected_raw + static_cast<ptrdiff_t>(length));\r\n    vector<bool> less_expected(l_expected_raw, l_expected_raw + static_cast<ptrdiff_t>(length));\r\n    vector<bool> less_equal_expected(le_expected_raw, le_expected_raw + static_cast<ptrdiff_t>(length));\r\n    vector<bool> greater_expected(g_expected_raw, g_expected_raw + static_cast<ptrdiff_t>(length));\r\n    vector<bool> greater_equal_expected(ge_expected_raw, ge_expected_raw + static_cast<ptrdiff_t>(length));\r\n    vector<bool> not_expected(not_expected_raw, not_expected_raw + static_cast<ptrdiff_t>(length));\r\n\r\n    and_expected.resize(length + 3, false);\r\n    or_expected.resize(length + 3, false);\r\n    xor_expected.resize(length + 3, false);\r\n    xnor_expected.resize(length + 3, false);\r\n    less_expected.resize(length + 3, false);\r\n    less_equal_expected.resize(length + 3, false);\r\n    greater_expected.resize(length + 3, false);\r\n    greater_equal_expected.resize(length + 3, false);\r\n    not_expected.resize(length + 3, false);\r\n\r\n    vector<bool> and_actual(length + 3);\r\n    vector<bool> or_actual(length + 3);\r\n    vector<bool> xor_actual(length + 3);\r\n    vector<bool> xnor_actual(length + 3);\r\n    vector<bool> less_actual(length + 3);\r\n    vector<bool> less_equal_actual(length + 3);\r\n    vector<bool> greater_actual(length + 3);\r\n    vector<bool> greater_equal_actual(length + 3);\r\n    vector<bool> not_actual(length + 3);\r\n\r\n    // Also test combinations of vector<bool>::iterator and vector<bool>::const_iterator for the inputs.\r\n    const auto first1  = source1.begin();\r\n    const auto cfirst1 = source1.cbegin();\r\n    const auto first2  = source2.begin();\r\n    const auto cfirst2 = source2.cbegin();\r\n    const auto last1   = first1 + static_cast<ptrdiff_t>(length);\r\n    const auto clast1  = cfirst1 + static_cast<ptrdiff_t>(length);\r\n\r\n    {\r\n        auto and_ret = transform(first1, last1, first2, and_actual.begin(), logical_and<>{});\r\n        assert(and_actual == and_expected);\r\n        assert(and_ret == and_actual.begin() + static_cast<ptrdiff_t>(length));\r\n\r\n        and_actual.assign(and_actual.size(), false);\r\n\r\n        and_ret = transform(first1, last1, first2, and_actual.begin(), bit_and<>{});\r\n        assert(and_actual == and_expected);\r\n        assert(and_ret == and_actual.begin() + static_cast<ptrdiff_t>(length));\r\n    }\r\n\r\n    {\r\n        auto or_ret = transform(first1, last1, cfirst2, or_actual.begin(), logical_or<>{});\r\n        assert(or_actual == or_expected);\r\n        assert(or_ret == or_actual.begin() + static_cast<ptrdiff_t>(length));\r\n\r\n        or_actual.assign(or_actual.size(), false);\r\n\r\n        or_ret = transform(first1, last1, cfirst2, or_actual.begin(), bit_or<>{});\r\n        assert(or_actual == or_expected);\r\n        assert(or_ret == or_actual.begin() + static_cast<ptrdiff_t>(length));\r\n    }\r\n\r\n    {\r\n        auto xor_ret = transform(cfirst1, clast1, first2, xor_actual.begin(), not_equal_to<>{});\r\n        assert(xor_actual == xor_expected);\r\n        assert(xor_ret == xor_actual.begin() + static_cast<ptrdiff_t>(length));\r\n\r\n        xor_actual.assign(xor_actual.size(), false);\r\n\r\n        xor_ret = transform(cfirst1, clast1, first2, xor_actual.begin(), bit_xor<>{});\r\n        assert(xor_actual == xor_expected);\r\n        assert(xor_ret == xor_actual.begin() + static_cast<ptrdiff_t>(length));\r\n    }\r\n\r\n    {\r\n        const auto xnor_ret = transform(cfirst1, clast1, cfirst2, xnor_actual.begin(), equal_to<>{});\r\n        assert(xnor_actual == xnor_expected);\r\n        assert(xnor_ret == xnor_actual.begin() + static_cast<ptrdiff_t>(length));\r\n\r\n        // bit_xnor doesn't exist in the Standard\r\n    }\r\n\r\n    {\r\n        const auto less_ret = transform(cfirst1, clast1, cfirst2, less_actual.begin(), less<>{});\r\n        assert(less_actual == less_expected);\r\n        assert(less_ret == less_actual.begin() + static_cast<ptrdiff_t>(length));\r\n    }\r\n\r\n    {\r\n        const auto less_equal_ret = transform(cfirst1, clast1, cfirst2, less_equal_actual.begin(), less_equal<>{});\r\n        assert(less_equal_actual == less_equal_expected);\r\n        assert(less_equal_ret == less_equal_actual.begin() + static_cast<ptrdiff_t>(length));\r\n    }\r\n\r\n    {\r\n        const auto greater_ret = transform(cfirst1, clast1, cfirst2, greater_actual.begin(), greater<>{});\r\n        assert(greater_actual == greater_expected);\r\n        assert(greater_ret == greater_actual.begin() + static_cast<ptrdiff_t>(length));\r\n    }\r\n\r\n    {\r\n        const auto greater_equal_ret =\r\n            transform(cfirst1, clast1, cfirst2, greater_equal_actual.begin(), greater_equal<>{});\r\n        assert(greater_equal_actual == greater_equal_expected);\r\n        assert(greater_equal_ret == greater_equal_actual.begin() + static_cast<ptrdiff_t>(length));\r\n    }\r\n\r\n    {\r\n        auto not_ret = transform(first1, last1, not_actual.begin(), logical_not<>{});\r\n        assert(not_actual == not_expected);\r\n        assert(not_ret == not_actual.begin() + static_cast<ptrdiff_t>(length));\r\n\r\n        not_actual.assign(not_actual.size(), false);\r\n\r\n        // bit_not emits MSVC and Clang warnings, so it isn't optimized.\r\n        // Continue using logical_not to test vector<bool>::const_iterator:\r\n        not_ret = transform(cfirst1, clast1, not_actual.begin(), logical_not<>{});\r\n        assert(not_actual == not_expected);\r\n        assert(not_ret == not_actual.begin() + static_cast<ptrdiff_t>(length));\r\n    }\r\n}\r\n\r\nCONSTEXPR20 bool test_transform() {\r\n    // Empty range\r\n    test_transform_helper(0);\r\n\r\n    // One block, ends within block\r\n    test_transform_helper(15);\r\n\r\n    // One block, ends at block boundary\r\n    test_transform_helper(blockSize);\r\n\r\n    // Multiple blocks, within block\r\n    test_transform_helper(3 * blockSize + 5);\r\n\r\n    // Multiple blocks, ends at block boundary\r\n    test_transform_helper(4 * blockSize);\r\n    return true;\r\n}\r\n\r\nCONSTEXPR20 bool test_meow_of_helper(const size_t length_before, const size_t length, const size_t length_after) {\r\n    const size_t total_length = length_before + length + length_after;\r\n\r\n    vector<bool> zeros(total_length);\r\n    vector<bool> ones(total_length);\r\n    vector<bool> mix(total_length);\r\n\r\n    const auto first_0 = zeros.begin() + static_cast<ptrdiff_t>(length_before);\r\n    const auto last_0  = zeros.end() - static_cast<ptrdiff_t>(length_after);\r\n    const auto first_1 = ones.begin() + static_cast<ptrdiff_t>(length_before);\r\n    const auto last_1  = ones.end() - static_cast<ptrdiff_t>(length_after);\r\n    const auto first_m = mix.begin() + static_cast<ptrdiff_t>(length_before);\r\n    const auto last_m  = mix.end() - static_cast<ptrdiff_t>(length_after);\r\n\r\n    fill(zeros.begin(), first_0, true);\r\n    fill(last_0, zeros.end(), true);\r\n    fill(first_1, last_1, true);\r\n    fill(mix.begin(), first_m, true);\r\n    fill(first_m + static_cast<ptrdiff_t>(length / 2), last_m, true);\r\n\r\n    if (length == 0) {\r\n#if _HAS_CXX20\r\n        assert(all_of(first_0, last_0, identity{}) == true);\r\n        assert(all_of(first_1, last_1, identity{}) == true);\r\n        assert(all_of(first_m, last_m, identity{}) == true);\r\n\r\n        assert(any_of(first_0, last_0, identity{}) == false);\r\n        assert(any_of(first_1, last_1, identity{}) == false);\r\n        assert(any_of(first_m, last_m, identity{}) == false);\r\n\r\n        assert(none_of(first_0, last_0, identity{}) == true);\r\n        assert(none_of(first_1, last_1, identity{}) == true);\r\n        assert(none_of(first_m, last_m, identity{}) == true);\r\n#endif // _HAS_CXX20\r\n\r\n        assert(all_of(first_0, last_0, logical_not<>{}) == true);\r\n        assert(all_of(first_1, last_1, logical_not<>{}) == true);\r\n        assert(all_of(first_m, last_m, logical_not<>{}) == true);\r\n\r\n        assert(any_of(first_0, last_0, logical_not<>{}) == false);\r\n        assert(any_of(first_1, last_1, logical_not<>{}) == false);\r\n        assert(any_of(first_m, last_m, logical_not<>{}) == false);\r\n\r\n        assert(none_of(first_0, last_0, logical_not<>{}) == true);\r\n        assert(none_of(first_1, last_1, logical_not<>{}) == true);\r\n        assert(none_of(first_m, last_m, logical_not<>{}) == true);\r\n    } else {\r\n        assert(length != 1); // [first_m, last_m) needs to contain both true and false\r\n\r\n#if _HAS_CXX20\r\n        assert(all_of(first_0, last_0, identity{}) == false);\r\n        assert(all_of(first_1, last_1, identity{}) == true);\r\n        assert(all_of(first_m, last_m, identity{}) == false);\r\n\r\n        assert(any_of(first_0, last_0, identity{}) == false);\r\n        assert(any_of(first_1, last_1, identity{}) == true);\r\n        assert(any_of(first_m, last_m, identity{}) == true);\r\n\r\n        assert(none_of(first_0, last_0, identity{}) == true);\r\n        assert(none_of(first_1, last_1, identity{}) == false);\r\n        assert(none_of(first_m, last_m, identity{}) == false);\r\n#endif // _HAS_CXX20\r\n\r\n        assert(all_of(first_0, last_0, logical_not<>{}) == true);\r\n        assert(all_of(first_1, last_1, logical_not<>{}) == false);\r\n        assert(all_of(first_m, last_m, logical_not<>{}) == false);\r\n\r\n        assert(any_of(first_0, last_0, logical_not<>{}) == true);\r\n        assert(any_of(first_1, last_1, logical_not<>{}) == false);\r\n        assert(any_of(first_m, last_m, logical_not<>{}) == true);\r\n\r\n        assert(none_of(first_0, last_0, logical_not<>{}) == false);\r\n        assert(none_of(first_1, last_1, logical_not<>{}) == true);\r\n        assert(none_of(first_m, last_m, logical_not<>{}) == false);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nCONSTEXPR20 bool test_meow_of() {\r\n    { // Super empty range\r\n        const vector<bool>::const_iterator it{}; // value-initialized, compares equal to itself\r\n\r\n#if _HAS_CXX20\r\n        assert(all_of(it, it, identity{}) == true);\r\n        assert(any_of(it, it, identity{}) == false);\r\n        assert(none_of(it, it, identity{}) == true);\r\n#endif // _HAS_CXX20\r\n\r\n        assert(all_of(it, it, logical_not<>{}) == true);\r\n        assert(any_of(it, it, logical_not<>{}) == false);\r\n        assert(none_of(it, it, logical_not<>{}) == true);\r\n    }\r\n\r\n    // Empty range\r\n    test_meow_of_helper(0, 0, 3);\r\n    test_meow_of_helper(3, 0, 3);\r\n\r\n    // One block, ends within block\r\n    test_meow_of_helper(0, 10, 3);\r\n    test_meow_of_helper(3, 10, 3);\r\n\r\n    // One block, exactly\r\n    test_meow_of_helper(0, blockSize, 0);\r\n\r\n    // Multiple blocks, spanning\r\n    test_meow_of_helper(3, blockSize - 2, 3);\r\n    test_meow_of_helper(3, blockSize + 2, 3);\r\n\r\n    // Many blocks, exactly\r\n    test_meow_of_helper(blockSize, 4 * blockSize, blockSize);\r\n\r\n    return true;\r\n}\r\n\r\nCONSTEXPR20 void test_fill_helper(const size_t length) {\r\n    // No offset\r\n    {\r\n        vector<bool> result_true(length, true);\r\n        result_true.resize(length + 3, false);\r\n        vector<bool> dest_true(length + 3, false);\r\n        fill(dest_true.begin(), prev(dest_true.end(), 3), true);\r\n        assert(dest_true == result_true);\r\n\r\n        vector<bool> result_false(length, false);\r\n        result_false.resize(length + 3, true);\r\n        vector<bool> dest_false(length + 3, true);\r\n        fill(dest_false.begin(), prev(dest_false.end(), 3), false);\r\n        assert(dest_false == result_false);\r\n\r\n        vector<bool> result_true_n(length, true);\r\n        result_true_n.resize(length + 3, false);\r\n        vector<bool> dest_true_n(length + 3, false);\r\n        const auto res_fill_n = fill_n(dest_true_n.begin(), length, true);\r\n        assert(dest_true_n == result_true_n);\r\n        assert(res_fill_n == prev(dest_true_n.end(), 3));\r\n\r\n        vector<bool> result_false_n(length, false);\r\n        result_false_n.resize(length + 3, true);\r\n        vector<bool> dest_false_n(length + 3, true);\r\n        fill_n(dest_false_n.begin(), length, false);\r\n        assert(dest_false_n == result_false_n);\r\n    }\r\n\r\n    // With offset\r\n    {\r\n        vector<bool> result_true(length, true);\r\n        result_true.resize(length + 3, false);\r\n        result_true.insert(result_true.begin(), false);\r\n        vector<bool> dest_true(length + 4, false);\r\n        fill(next(dest_true.begin()), prev(dest_true.end(), 3), true);\r\n        assert(dest_true == result_true);\r\n\r\n        vector<bool> result_false(length, false);\r\n        result_false.resize(length + 3, true);\r\n        result_false.insert(result_false.begin(), true);\r\n        vector<bool> dest_false(length + 4, true);\r\n        fill(next(dest_false.begin()), prev(dest_false.end(), 3), false);\r\n        assert(dest_false == result_false);\r\n\r\n        vector<bool> result_true_n(length, true);\r\n        result_true_n.resize(length + 3, false);\r\n        result_true_n.insert(result_true_n.begin(), false);\r\n        vector<bool> dest_true_n(length + 4, false);\r\n        const auto res_fill_n = fill_n(next(dest_true_n.begin()), length, true);\r\n        assert(dest_true_n == result_true_n);\r\n        assert(res_fill_n == prev(dest_true_n.end(), 3));\r\n\r\n        vector<bool> result_false_n(length, false);\r\n        result_false_n.resize(length + 3, true);\r\n        result_false_n.insert(result_false_n.begin(), true);\r\n        vector<bool> dest_false_n(length + 4, true);\r\n        fill_n(next(dest_false_n.begin()), length, false);\r\n        assert(dest_false_n == result_false_n);\r\n    }\r\n}\r\n\r\nCONSTEXPR20 bool test_fill() {\r\n    // Empty\r\n    test_fill_helper(0);\r\n\r\n    // One block, ends within block\r\n    test_fill_helper(15);\r\n\r\n    // One block, ends at block boundary\r\n    test_fill_helper(blockSize);\r\n\r\n    // Multiple blocks, no memset, within block\r\n    test_fill_helper(blockSize + 11);\r\n\r\n    // Multiple blocks, no memset, ends at block boundary\r\n    test_fill_helper(2 * blockSize);\r\n\r\n    // Multiple blocks, with memset, within block\r\n    test_fill_helper(3 * blockSize + 5);\r\n\r\n    // Multiple blocks, with memset, ends at block boundary\r\n    test_fill_helper(4 * blockSize);\r\n    return true;\r\n}\r\n\r\nCONSTEXPR20 void test_find_helper(const size_t length) {\r\n    // No offset\r\n    {\r\n        vector<bool> input_true(length + 3, false);\r\n        input_true.resize(length + 6, true);\r\n        input_true[length + 1].flip();\r\n        const auto result_true = find(input_true.cbegin(), prev(input_true.cend(), 3), true);\r\n        assert(result_true == next(input_true.cbegin(), static_cast<ptrdiff_t>(length + 1)));\r\n\r\n        vector<bool> input_false(length + 3, true);\r\n        input_false.resize(length + 6, false);\r\n        input_false[length + 1].flip();\r\n        const auto result_false = find(input_false.cbegin(), prev(input_false.cend(), 3), false);\r\n        assert(result_false == next(input_false.cbegin(), static_cast<ptrdiff_t>(length + 1)));\r\n    }\r\n\r\n    // With offset\r\n    {\r\n        vector<bool> input_true(length + 3, false);\r\n        input_true.resize(length + 6, true);\r\n        input_true[length + 1].flip();\r\n        input_true[0].flip();\r\n        const auto result_true = find(next(input_true.cbegin()), prev(input_true.cend(), 3), true);\r\n        assert(result_true == next(input_true.cbegin(), static_cast<ptrdiff_t>(length + 1)));\r\n\r\n        vector<bool> input_false(length + 3, true);\r\n        input_false.resize(length + 6, false);\r\n        input_false[length + 1].flip();\r\n        input_false[0].flip();\r\n        const auto result_false = find(next(input_false.cbegin()), prev(input_false.cend(), 3), false);\r\n        assert(result_false == next(input_false.cbegin(), static_cast<ptrdiff_t>(length + 1)));\r\n    }\r\n}\r\n\r\nCONSTEXPR20 bool test_find() {\r\n    // Empty range\r\n    test_find_helper(0);\r\n\r\n    // One block, ends within block\r\n    test_find_helper(15);\r\n\r\n    // One block, ends at block boundary\r\n    test_find_helper(blockSize);\r\n\r\n    // Multiple blocks, within block\r\n    test_find_helper(3 * blockSize + 5);\r\n\r\n    // Multiple blocks, ends at block boundary\r\n    test_find_helper(4 * blockSize);\r\n    return true;\r\n}\r\n\r\nCONSTEXPR20 void test_count_helper(const ptrdiff_t length) {\r\n    const vector<bool> source(begin(source_raw), end(source_raw));\r\n    const int counts_true[]  = {0, 1, 1, 2, 2, 3, 4, 5};\r\n    const int counts_false[] = {0, 0, 1, 1, 2, 2, 2, 2};\r\n    const div_t expected     = {static_cast<int>(length) / 8, static_cast<int>(length) % 8};\r\n    // No offset\r\n    {\r\n        const auto result_true = static_cast<int>(count(source.cbegin(), next(source.cbegin(), length), true));\r\n        assert(result_true == expected.quot * 5 + counts_true[expected.rem]);\r\n\r\n        const auto result_false = static_cast<int>(count(source.cbegin(), next(source.cbegin(), length), false));\r\n        assert(result_false == expected.quot * 3 + counts_false[expected.rem]);\r\n    }\r\n\r\n    // With offset\r\n    {\r\n        const auto result_true =\r\n            static_cast<int>(count(next(source.cbegin(), 2), next(source.cbegin(), length + 2), true));\r\n        assert(result_true == expected.quot * 5 + counts_true[expected.rem]);\r\n\r\n        const auto result_false =\r\n            static_cast<int>(count(next(source.cbegin(), 2), next(source.cbegin(), length + 2), false));\r\n        assert(result_false == expected.quot * 3 + counts_false[expected.rem]);\r\n    }\r\n}\r\n\r\nCONSTEXPR20 bool test_count() {\r\n    // Empty range\r\n    test_count_helper(0);\r\n\r\n    // One block, ends within block\r\n    test_count_helper(15);\r\n\r\n    // One block, ends at block boundary\r\n    test_count_helper(blockSize);\r\n\r\n    // Multiple blocks, within block\r\n    test_count_helper(3 * blockSize + 8);\r\n\r\n    // Multiple blocks, ends at block boundary\r\n    test_count_helper(4 * blockSize);\r\n    return true;\r\n}\r\n\r\n// Also test the behavior of a huge vector<bool, A> whose size is greater than SIZE_MAX,\r\n// which is practical on 32-bit platforms.\r\ntemplate <class T>\r\nstruct huge_allocator {\r\n    huge_allocator() = default;\r\n    template <class U>\r\n    constexpr huge_allocator(const huge_allocator<U>&) noexcept {}\r\n\r\n    using value_type      = T;\r\n    using size_type       = uint64_t;\r\n    using difference_type = int64_t;\r\n\r\n    T* allocate(uint64_t n) {\r\n        return allocator<T>{}.allocate(static_cast<size_t>(n));\r\n    }\r\n\r\n    void deallocate(T* p, uint64_t n) {\r\n        allocator<T>{}.deallocate(p, static_cast<size_t>(n));\r\n    }\r\n};\r\n\r\nvoid test_huge_vector_bool() {\r\n    constexpr uint64_t small_bit_length = 0x7000'4321ULL;\r\n    constexpr uint64_t large_bit_length = 0x1'2000'4321ULL; // overflows uint32_t\r\n    constexpr auto large_bit_diff       = static_cast<int64_t>(large_bit_length);\r\n\r\n    vector<bool, huge_allocator<bool>> v(small_bit_length);\r\n    v.resize(large_bit_length);\r\n    assert(v.end() - v.begin() == large_bit_diff);\r\n\r\n    v.back() = true;\r\n    assert(find(v.begin(), v.end(), true) - v.begin() == large_bit_diff - 1);\r\n\r\n    v[small_bit_length]                    = true;\r\n    v[large_bit_length - small_bit_length] = true;\r\n    assert(count(v.begin(), v.end(), false) == large_bit_diff - 3);\r\n}\r\n\r\nCONSTEXPR20 void test_copy_no_offset(const size_t length) {\r\n    vector<bool> result;\r\n    switch (length) {\r\n    case 3:\r\n        result = {true, false, true};\r\n        break;\r\n    case 8:\r\n        result = {true, false, true, false, true, true, true, false};\r\n        break;\r\n    case 22:\r\n        result = {//\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true};\r\n        break;\r\n    case 31:\r\n        result = {//\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true};\r\n        break;\r\n    case 32:\r\n        result = {//\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false};\r\n        break;\r\n    case 67:\r\n        result = {//\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true};\r\n        break;\r\n    default:\r\n        assert(false);\r\n    }\r\n\r\n    const vector<bool> source(begin(source_raw), end(source_raw));\r\n\r\n    {\r\n        vector<bool> dest(length, false);\r\n        const auto res_copy = copy(source.begin(), source.begin() + static_cast<ptrdiff_t>(length), dest.begin());\r\n        assert(dest == result);\r\n        assert(res_copy == dest.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_n(length, false);\r\n        const auto res_copy_n = copy_n(source.begin(), static_cast<ptrdiff_t>(length), dest_n.begin());\r\n        assert(dest_n == result);\r\n        assert(res_copy_n == dest_n.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_backward(length, false);\r\n        const auto res_copy_backward =\r\n            copy_backward(source.begin(), source.begin() + static_cast<ptrdiff_t>(length), dest_backward.end());\r\n        assert(dest_backward == result);\r\n        assert(res_copy_backward == dest_backward.begin());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_move(length, false);\r\n        const auto res_move = move(source.begin(), source.begin() + static_cast<ptrdiff_t>(length), dest_move.begin());\r\n        assert(dest_move == result);\r\n        assert(res_move == dest_move.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_move_backward(length, false);\r\n        const auto res_move_backward =\r\n            move_backward(source.begin(), source.begin() + static_cast<ptrdiff_t>(length), dest_move_backward.end());\r\n        assert(dest_move_backward == result);\r\n        assert(res_move_backward == dest_move_backward.begin());\r\n    }\r\n}\r\n\r\nCONSTEXPR20 void test_copy_offset_source(const size_t length) {\r\n    vector<bool> result;\r\n    switch (length) {\r\n    case 3:\r\n        result = {/***/ false, true, false};\r\n        break;\r\n    case 8:\r\n        result = {//\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true};\r\n        break;\r\n    case 22:\r\n        result = {//\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true};\r\n        break;\r\n    case 31:\r\n        result = {//\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false};\r\n        break;\r\n    case 32:\r\n        result = {//\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true};\r\n        break;\r\n    case 67:\r\n        result = {//\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false};\r\n        break;\r\n    default:\r\n        assert(false);\r\n    }\r\n\r\n    const vector<bool> source(begin(source_raw), end(source_raw));\r\n\r\n    {\r\n        vector<bool> dest(length, false);\r\n        const auto res_copy =\r\n            copy(next(source.begin()), source.begin() + static_cast<ptrdiff_t>(length) + 1, dest.begin());\r\n        assert(dest == result);\r\n        assert(res_copy == dest.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_n(length, false);\r\n        const auto res_copy_n = copy_n(next(source.begin()), static_cast<ptrdiff_t>(length), dest_n.begin());\r\n        assert(dest_n == result);\r\n        assert(res_copy_n == dest_n.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_backward(length, false);\r\n        const auto res_copy_backward = copy_backward(\r\n            next(source.begin()), source.begin() + static_cast<ptrdiff_t>(length) + 1, dest_backward.end());\r\n        assert(dest_backward == result);\r\n        assert(res_copy_backward == dest_backward.begin());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_move(length, false);\r\n        const auto res_move =\r\n            move(next(source.begin()), source.begin() + static_cast<ptrdiff_t>(length) + 1, dest_move.begin());\r\n        assert(dest_move == result);\r\n        assert(res_move == dest_move.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_move_backward(length, false);\r\n        const auto res_move_backward = move_backward(\r\n            next(source.begin()), source.begin() + static_cast<ptrdiff_t>(length) + 1, dest_move_backward.end());\r\n        assert(dest_move_backward == result);\r\n        assert(res_move_backward == dest_move_backward.begin());\r\n    }\r\n}\r\n\r\nCONSTEXPR20 void test_copy_offset_dest(const size_t length) {\r\n    vector<bool> result;\r\n    switch (length) {\r\n    case 3:\r\n        result = {//\r\n            false, //\r\n            true, false, true};\r\n        break;\r\n    case 8:\r\n        result = {//\r\n            false, //\r\n            true, false, true, false, true, true, true, false};\r\n        break;\r\n    case 22:\r\n        result = {//\r\n            false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true};\r\n        break;\r\n    case 31:\r\n        result = {//\r\n            false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true};\r\n        break;\r\n    case 32:\r\n        result = {//\r\n            false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false};\r\n        break;\r\n    case 67:\r\n        result = {//\r\n            false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true};\r\n        break;\r\n    default:\r\n        assert(false);\r\n    }\r\n\r\n    const vector<bool> source(begin(source_raw), end(source_raw));\r\n\r\n    {\r\n        vector<bool> dest(length + 1, false);\r\n        const auto res_copy = copy(source.begin(), source.begin() + static_cast<ptrdiff_t>(length), next(dest.begin()));\r\n        assert(dest == result);\r\n        assert(res_copy == dest.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_n(length + 1, false);\r\n        const auto res_copy_n = copy_n(source.begin(), static_cast<ptrdiff_t>(length), next(dest_n.begin()));\r\n        assert(dest_n == result);\r\n        assert(res_copy_n == dest_n.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_backward(length + 1, false);\r\n        const auto res_copy_backward =\r\n            copy_backward(source.begin(), source.begin() + static_cast<ptrdiff_t>(length), dest_backward.end());\r\n        assert(dest_backward == result);\r\n        assert(res_copy_backward == next(dest_backward.begin()));\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_move(length + 1, false);\r\n        const auto res_move =\r\n            move(source.begin(), source.begin() + static_cast<ptrdiff_t>(length), next(dest_move.begin()));\r\n        assert(dest_move == result);\r\n        assert(res_move == dest_move.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_move_backward(length + 1, false);\r\n        const auto res_move_backward =\r\n            move_backward(source.begin(), source.begin() + static_cast<ptrdiff_t>(length), dest_move_backward.end());\r\n        assert(dest_move_backward == result);\r\n        assert(res_move_backward == next(dest_move_backward.begin()));\r\n    }\r\n}\r\n\r\nCONSTEXPR20 void test_copy_offset_match(const size_t length) {\r\n    vector<bool> result;\r\n    switch (length) {\r\n    case 3:\r\n        result = {//\r\n            false, //\r\n            /***/ false, true};\r\n        break;\r\n    case 8:\r\n        result = {//\r\n            false, //\r\n            /***/ false, true, false, true, true, true, false};\r\n        break;\r\n    case 22:\r\n        result = {//\r\n            false, //\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true};\r\n        break;\r\n    case 31:\r\n        result = {//\r\n            false, //\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true};\r\n        break;\r\n    case 32:\r\n        result = {//\r\n            false, //\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false};\r\n        break;\r\n    case 67:\r\n        result = {//\r\n            false, //\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true};\r\n        break;\r\n    default:\r\n        assert(false);\r\n    }\r\n\r\n    const vector<bool> source(begin(source_raw), end(source_raw));\r\n\r\n    {\r\n        vector<bool> dest(length, false);\r\n        const auto res_copy =\r\n            copy(next(source.begin()), source.begin() + static_cast<ptrdiff_t>(length), next(dest.begin()));\r\n        assert(dest == result);\r\n        assert(res_copy == dest.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_n(length, false);\r\n        const auto res_copy_n = copy_n(next(source.begin()), static_cast<ptrdiff_t>(length) - 1, next(dest_n.begin()));\r\n        assert(dest_n == result);\r\n        assert(res_copy_n == dest_n.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_backward(length, false);\r\n        const auto res_copy_backward =\r\n            copy_backward(next(source.begin()), source.begin() + static_cast<ptrdiff_t>(length), dest_backward.end());\r\n        assert(dest_backward == result);\r\n        assert(res_copy_backward == next(dest_backward.begin()));\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_move(length, false);\r\n        const auto res_move =\r\n            move(next(source.begin()), source.begin() + static_cast<ptrdiff_t>(length), next(dest_move.begin()));\r\n        assert(dest_move == result);\r\n        assert(res_move == dest_move.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_move_backward(length, false);\r\n        const auto res_move_backward = move_backward(\r\n            next(source.begin()), source.begin() + static_cast<ptrdiff_t>(length), dest_move_backward.end());\r\n        assert(dest_move_backward == result);\r\n        assert(res_move_backward == next(dest_move_backward.begin()));\r\n    }\r\n}\r\n\r\nCONSTEXPR20 void test_copy_offset_mismatch_leftshift(const size_t length) {\r\n    vector<bool> result;\r\n    switch (length) {\r\n    case 3:\r\n        result = {//\r\n            false, false, //\r\n            /***/ false, true};\r\n        break;\r\n    case 8:\r\n        result = {//\r\n            false, false, //\r\n            /***/ false, true, false, true, true, true, false};\r\n        break;\r\n    case 22:\r\n        result = {//\r\n            false, false, //\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true};\r\n        break;\r\n    case 31:\r\n        result = {//\r\n            false, false, //\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true};\r\n        break;\r\n    case 32:\r\n        result = {//\r\n            false, false, //\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false};\r\n        break;\r\n    case 67:\r\n        result = {//\r\n            false, false, //\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true};\r\n        break;\r\n    default:\r\n        assert(false);\r\n    }\r\n\r\n    const vector<bool> source(begin(source_raw), end(source_raw));\r\n\r\n    {\r\n        vector<bool> dest(length + 1, false);\r\n        const auto res_copy =\r\n            copy(next(source.begin()), source.begin() + static_cast<ptrdiff_t>(length), next(dest.begin(), 2));\r\n        assert(dest == result);\r\n        assert(res_copy == dest.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_n(length + 1, false);\r\n        const auto res_copy_n =\r\n            copy_n(next(source.begin()), static_cast<ptrdiff_t>(length) - 1, next(dest_n.begin(), 2));\r\n        assert(dest_n == result);\r\n        assert(res_copy_n == dest_n.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_backward(length + 1, false);\r\n        const auto res_copy_backward =\r\n            copy_backward(next(source.begin()), source.begin() + static_cast<ptrdiff_t>(length), dest_backward.end());\r\n        assert(dest_backward == result);\r\n        assert(res_copy_backward == next(dest_backward.begin(), 2));\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_move(length + 1, false);\r\n        const auto res_move =\r\n            move(next(source.begin()), source.begin() + static_cast<ptrdiff_t>(length), next(dest_move.begin(), 2));\r\n        assert(dest_move == result);\r\n        assert(res_move == dest_move.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_move_backward(length + 1, false);\r\n        const auto res_move_backward = move_backward(\r\n            next(source.begin()), source.begin() + static_cast<ptrdiff_t>(length), dest_move_backward.end());\r\n        assert(dest_move_backward == result);\r\n        assert(res_move_backward == next(dest_move_backward.begin(), 2));\r\n    }\r\n}\r\n\r\nCONSTEXPR20 void test_copy_offset_mismatch_rightshift(const size_t length) {\r\n    vector<bool> result;\r\n    switch (length) {\r\n    case 3:\r\n        result = {//\r\n            false, //\r\n            /**********/ true, false};\r\n        break;\r\n    case 8:\r\n        result = {//\r\n            false, //\r\n            /**********/ true, false, true, true, true, false, //\r\n            true};\r\n        break;\r\n    case 22:\r\n        result = {//\r\n            false, //\r\n            /**********/ true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true};\r\n        break;\r\n    case 31:\r\n        result = {//\r\n            false, //\r\n            /**********/ true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false};\r\n        break;\r\n    case 32:\r\n        result = {//\r\n            false, //\r\n            /**********/ true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true};\r\n        break;\r\n    case 67:\r\n        result = {//\r\n            false, //\r\n            /**********/ true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false};\r\n        break;\r\n    default:\r\n        assert(false);\r\n    }\r\n\r\n    const vector<bool> source(begin(source_raw), end(source_raw));\r\n\r\n    {\r\n        vector<bool> dest(length, false);\r\n        const auto res_copy =\r\n            copy(next(source.begin(), 2), source.begin() + static_cast<ptrdiff_t>(length) + 1, next(dest.begin()));\r\n        assert(dest == result);\r\n        assert(res_copy == dest.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_n(length, false);\r\n        const auto res_copy_n =\r\n            copy_n(next(source.begin(), 2), static_cast<ptrdiff_t>(length) - 1, next(dest_n.begin()));\r\n        assert(dest_n == result);\r\n        assert(res_copy_n == dest_n.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_backward(length, false);\r\n        const auto res_copy_backward = copy_backward(\r\n            next(source.begin(), 2), source.begin() + static_cast<ptrdiff_t>(length) + 1, dest_backward.end());\r\n        assert(dest_backward == result);\r\n        assert(res_copy_backward == next(dest_backward.begin()));\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_move(length, false);\r\n        const auto res_move =\r\n            move(next(source.begin(), 2), source.begin() + static_cast<ptrdiff_t>(length) + 1, next(dest_move.begin()));\r\n        assert(dest_move == result);\r\n        assert(res_move == dest_move.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_move_backward(length, false);\r\n        const auto res_move_backward = move_backward(\r\n            next(source.begin(), 2), source.begin() + static_cast<ptrdiff_t>(length) + 1, dest_move_backward.end());\r\n        assert(dest_move_backward == result);\r\n        assert(res_move_backward == next(dest_move_backward.begin()));\r\n    }\r\n}\r\n\r\nCONSTEXPR20 void test_copy_offset_aligned(const size_t length) {\r\n    vector<bool> result;\r\n    switch (length) {\r\n    case 3:\r\n        result = {//\r\n            false, //\r\n            /***/ false, true};\r\n        break;\r\n    case 8:\r\n        result = {//\r\n            false, //\r\n            /***/ false, true, false, true, true, true, false};\r\n        break;\r\n    case 22:\r\n        result = {//\r\n            false, //\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true};\r\n        break;\r\n    case 31:\r\n        result = {//\r\n            false, //\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true};\r\n        break;\r\n    case 32:\r\n        result = {//\r\n            false, //\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false};\r\n        break;\r\n    case 67:\r\n        result = {//\r\n            false, //\r\n            /***/ false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true, false, true, true, true, false, //\r\n            true, false, true};\r\n        break;\r\n    default:\r\n        assert(false);\r\n    }\r\n\r\n    const vector<bool> source(begin(source_raw), end(source_raw));\r\n\r\n    {\r\n        vector<bool> dest(length, false);\r\n        const auto res_copy =\r\n            copy(next(source.begin(), 9), source.begin() + static_cast<ptrdiff_t>(length) + 8, next(dest.begin()));\r\n        assert(dest == result);\r\n        assert(res_copy == dest.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_n(length, false);\r\n        const auto res_copy_n =\r\n            copy_n(next(source.begin(), 9), static_cast<ptrdiff_t>(length) - 1, next(dest_n.begin()));\r\n        assert(dest_n == result);\r\n        assert(res_copy_n == dest_n.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_backward(length, false);\r\n        const auto res_copy_backward = copy_backward(\r\n            next(source.begin(), 9), source.begin() + static_cast<ptrdiff_t>(length) + 8, dest_backward.end());\r\n        assert(dest_backward == result);\r\n        assert(res_copy_backward == next(dest_backward.begin()));\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_move(length, false);\r\n        const auto res_move =\r\n            move(next(source.begin(), 9), source.begin() + static_cast<ptrdiff_t>(length) + 8, next(dest_move.begin()));\r\n        assert(dest_move == result);\r\n        assert(res_move == dest_move.end());\r\n    }\r\n\r\n    {\r\n        vector<bool> dest_move_backward(length, false);\r\n        const auto res_move_backward = move_backward(\r\n            next(source.begin(), 9), source.begin() + static_cast<ptrdiff_t>(length) + 8, dest_move_backward.end());\r\n        assert(dest_move_backward == result);\r\n        assert(res_move_backward == next(dest_move_backward.begin()));\r\n    }\r\n}\r\n\r\nCONSTEXPR20 void test_copy_sub_char() {\r\n    const vector<bool> source(begin(source_raw), end(source_raw));\r\n\r\n    { // sub char copy unaligned\r\n        const vector<bool> result = {false, false, true, false, true, false, false, false};\r\n\r\n        {\r\n            vector<bool> dest(8, false);\r\n            const auto res_copy = copy(source.begin(), next(source.begin(), 3), next(dest.begin(), 2));\r\n            assert(dest == result);\r\n            assert(res_copy == next(dest.begin(), 5));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_n(8, false);\r\n            const auto res_copy_n = copy_n(source.begin(), 3, next(dest_n.begin(), 2));\r\n            assert(dest_n == result);\r\n            assert(res_copy_n == next(dest_n.begin(), 5));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_backward(8, false);\r\n            const auto res_copy_backward =\r\n                copy_backward(source.begin(), next(source.begin(), 3), next(dest_backward.begin(), 5));\r\n            assert(dest_backward == result);\r\n            assert(res_copy_backward == next(dest_backward.begin(), 2));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_move(8, false);\r\n            const auto res_move = move(source.begin(), next(source.begin(), 3), next(dest_move.begin(), 2));\r\n            assert(dest_move == result);\r\n            assert(res_move == next(dest_move.begin(), 5));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_move_backward(8, false);\r\n            const auto res_move_backward =\r\n                move_backward(source.begin(), next(source.begin(), 3), next(dest_move_backward.begin(), 5));\r\n            assert(dest_move_backward == result);\r\n            assert(res_move_backward == next(dest_move_backward.begin(), 2));\r\n        }\r\n    }\r\n\r\n    { // sub char copy until char alignment source\r\n        const vector<bool> result = {false, false, true, true, false, false, false, false};\r\n\r\n        {\r\n            vector<bool> dest(8, false);\r\n            const auto res_copy = copy(next(source.begin(), 5), next(source.begin(), 8), next(dest.begin(), 2));\r\n            assert(dest == result);\r\n            assert(res_copy == next(dest.begin(), 5));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_n(8, false);\r\n            const auto res_copy_n = copy_n(next(source.begin(), 5), 3, next(dest_n.begin(), 2));\r\n            assert(dest_n == result);\r\n            assert(res_copy_n == next(dest_n.begin(), 5));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_backward(8, false);\r\n            const auto res_copy_backward =\r\n                copy_backward(next(source.begin(), 5), next(source.begin(), 8), next(dest_backward.begin(), 5));\r\n            assert(dest_backward == result);\r\n            assert(res_copy_backward == next(dest_backward.begin(), 2));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_move(8, false);\r\n            const auto res_move = move(next(source.begin(), 5), next(source.begin(), 8), next(dest_move.begin(), 2));\r\n            assert(dest_move == result);\r\n            assert(res_move == next(dest_move.begin(), 5));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_move_backward(8, false);\r\n            const auto res_move_backward =\r\n                move_backward(next(source.begin(), 5), next(source.begin(), 8), next(dest_move_backward.begin(), 5));\r\n            assert(dest_move_backward == result);\r\n            assert(res_move_backward == next(dest_move_backward.begin(), 2));\r\n        }\r\n    }\r\n\r\n    { // sub char copy until char alignment dest\r\n        const vector<bool> result = {false, false, false, false, false, true, false, true, false, false, false, false,\r\n            false, false, false, false};\r\n\r\n        {\r\n            vector<bool> dest(16, false);\r\n            const auto res_copy = copy(source.begin(), next(source.begin(), 3), next(dest.begin(), 5));\r\n            assert(dest == result);\r\n            assert(res_copy == next(dest.begin(), 8));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_n(16, false);\r\n            const auto res_copy_n = copy_n(source.begin(), 3, next(dest_n.begin(), 5));\r\n            assert(dest_n == result);\r\n            assert(res_copy_n == next(dest_n.begin(), 8));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_backward(16, false);\r\n            const auto res_copy_backward =\r\n                copy_backward(source.begin(), next(source.begin(), 3), next(dest_backward.begin(), 8));\r\n            assert(dest_backward == result);\r\n            assert(res_copy_backward == next(dest_backward.begin(), 5));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_move(16, false);\r\n            const auto res_move = move(source.begin(), next(source.begin(), 3), next(dest_move.begin(), 5));\r\n            assert(dest_move == result);\r\n            assert(res_move == next(dest_move.begin(), 8));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_move_backward(16, false);\r\n            const auto res_move_backward =\r\n                move_backward(source.begin(), next(source.begin(), 3), next(dest_move_backward.begin(), 8));\r\n            assert(dest_move_backward == result);\r\n            assert(res_move_backward == next(dest_move_backward.begin(), 5));\r\n        }\r\n    }\r\n\r\n    { // sub char copy over char alignment source\r\n        const vector<bool> result = {false, false, false, true, false, false, false, false};\r\n\r\n        {\r\n            vector<bool> dest(8, false);\r\n            const auto res_copy = copy(next(source.begin(), 7), next(source.begin(), 10), next(dest.begin(), 2));\r\n            assert(dest == result);\r\n            assert(res_copy == next(dest.begin(), 5));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_n(8, false);\r\n            const auto res_copy_n = copy_n(next(source.begin(), 7), 3, next(dest_n.begin(), 2));\r\n            assert(dest_n == result);\r\n            assert(res_copy_n == next(dest_n.begin(), 5));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_backward(8, false);\r\n            const auto res_copy_backward =\r\n                copy_backward(next(source.begin(), 7), next(source.begin(), 10), next(dest_backward.begin(), 5));\r\n            assert(dest_backward == result);\r\n            assert(res_copy_backward == next(dest_backward.begin(), 2));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_move(8, false);\r\n            const auto res_move = move(next(source.begin(), 7), next(source.begin(), 10), next(dest_move.begin(), 2));\r\n            assert(dest_move == result);\r\n            assert(res_move == next(dest_move.begin(), 5));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_move_backward(8, false);\r\n            const auto res_move_backward =\r\n                move_backward(next(source.begin(), 7), next(source.begin(), 10), next(dest_move_backward.begin(), 5));\r\n            assert(dest_move_backward == result);\r\n            assert(res_move_backward == next(dest_move_backward.begin(), 2));\r\n        }\r\n    }\r\n\r\n    { // sub char copy over char alignment dest\r\n        const vector<bool> result = {false, false, false, false, false, false, false, true, false, true, false, false,\r\n            false, false, false, false};\r\n\r\n        {\r\n            vector<bool> dest(16, false);\r\n            const auto res_copy = copy(source.begin(), next(source.begin(), 3), next(dest.begin(), 7));\r\n            assert(dest == result);\r\n            assert(res_copy == next(dest.begin(), 10));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_n(16, false);\r\n            const auto res_copy_n = copy_n(source.begin(), 3, next(dest_n.begin(), 7));\r\n            assert(dest_n == result);\r\n            assert(res_copy_n == next(dest_n.begin(), 10));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_backward(16, false);\r\n            const auto res_copy_backward =\r\n                copy_backward(source.begin(), next(source.begin(), 3), next(dest_backward.begin(), 10));\r\n            assert(dest_backward == result);\r\n            assert(res_copy_backward == next(dest_backward.begin(), 7));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_move(16, false);\r\n            const auto res_move = move(source.begin(), next(source.begin(), 3), next(dest_move.begin(), 7));\r\n            assert(dest_move == result);\r\n            assert(res_move == next(dest_move.begin(), 10));\r\n        }\r\n\r\n        {\r\n            vector<bool> dest_move_backward(16, false);\r\n            const auto res_move_backward =\r\n                move_backward(source.begin(), next(source.begin(), 3), next(dest_move_backward.begin(), 10));\r\n            assert(dest_move_backward == result);\r\n            assert(res_move_backward == next(dest_move_backward.begin(), 7));\r\n        }\r\n    }\r\n}\r\n\r\nCONSTEXPR20 void test_copy_regression() {\r\n    // This specific case was found by the randomized coverage below.\r\n    const vector<bool> src = {0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0,\r\n        1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0,\r\n        1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0};\r\n\r\n    vector<bool> dst = {0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0,\r\n        0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1,\r\n        0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1};\r\n\r\n    const int src_prefix = 24;\r\n    const int dst_prefix = 7;\r\n    const int copy_len   = 48;\r\n\r\n    copy(src.begin() + src_prefix, src.begin() + src_prefix + copy_len, dst.begin() + dst_prefix);\r\n\r\n    const vector<bool> correct = {0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0,\r\n        0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0,\r\n        0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1};\r\n\r\n    assert(dst == correct);\r\n}\r\n\r\n// Test copy() in multiple parts to stay within constexpr step limits.\r\nCONSTEXPR20 bool test_copy_part_1() {\r\n    test_copy_no_offset(3);\r\n    test_copy_no_offset(8);\r\n    test_copy_no_offset(22);\r\n    test_copy_no_offset(31);\r\n    test_copy_no_offset(32);\r\n    test_copy_no_offset(67);\r\n\r\n    test_copy_offset_source(3);\r\n    test_copy_offset_source(8);\r\n    test_copy_offset_source(22);\r\n    test_copy_offset_source(31);\r\n    test_copy_offset_source(32);\r\n    test_copy_offset_source(67);\r\n\r\n    test_copy_offset_dest(3);\r\n    test_copy_offset_dest(8);\r\n    test_copy_offset_dest(22);\r\n    test_copy_offset_dest(31);\r\n    test_copy_offset_dest(32);\r\n    test_copy_offset_dest(67);\r\n\r\n    test_copy_offset_match(3);\r\n    test_copy_offset_match(8);\r\n    test_copy_offset_match(22);\r\n    test_copy_offset_match(31);\r\n    test_copy_offset_match(32);\r\n    test_copy_offset_match(67);\r\n\r\n    return true;\r\n}\r\n\r\nCONSTEXPR20 bool test_copy_part_2() {\r\n    test_copy_offset_mismatch_leftshift(3);\r\n    test_copy_offset_mismatch_leftshift(8);\r\n    test_copy_offset_mismatch_leftshift(22);\r\n    test_copy_offset_mismatch_leftshift(31);\r\n    test_copy_offset_mismatch_leftshift(32);\r\n    test_copy_offset_mismatch_leftshift(67);\r\n\r\n    test_copy_offset_mismatch_rightshift(3);\r\n    test_copy_offset_mismatch_rightshift(8);\r\n    test_copy_offset_mismatch_rightshift(22);\r\n    test_copy_offset_mismatch_rightshift(31);\r\n    test_copy_offset_mismatch_rightshift(32);\r\n    test_copy_offset_mismatch_rightshift(67);\r\n\r\n    test_copy_offset_aligned(3);\r\n    test_copy_offset_aligned(8);\r\n    test_copy_offset_aligned(22);\r\n    test_copy_offset_aligned(31);\r\n    test_copy_offset_aligned(32);\r\n    test_copy_offset_aligned(67);\r\n\r\n    test_copy_sub_char();\r\n\r\n    test_copy_regression();\r\n\r\n    return true;\r\n}\r\n\r\nvoid initialize_randomness(mt19937_64& gen) {\r\n    constexpr size_t n = mt19937_64::state_size;\r\n    constexpr size_t w = mt19937_64::word_size;\r\n    static_assert(w % 32 == 0, \"w should be evenly divisible by 32\");\r\n    constexpr size_t k = w / 32;\r\n\r\n    vector<uint32_t> vec(n * k);\r\n\r\n    random_device rd;\r\n    generate(vec.begin(), vec.end(), ref(rd));\r\n\r\n    printf(\"This is a randomized test.\\n\");\r\n    printf(\"DO NOT IGNORE/RERUN ANY FAILURES.\\n\");\r\n    printf(\"You must report them to the STL maintainers.\\n\\n\");\r\n\r\n    seed_seq seq(vec.cbegin(), vec.cend());\r\n    gen.seed(seq);\r\n}\r\n\r\ntemplate <class T>\r\nvoid print_vec(const char* const name, const vector<T>& v) {\r\n    printf(\"%s: \", name);\r\n    for (const auto& e : v) {\r\n        printf(\"%d\", static_cast<int>(e));\r\n    }\r\n    printf(\"\\n\");\r\n}\r\n\r\nvoid randomized_test_copy(mt19937_64& gen) {\r\n    uniform_int_distribution<int> affix_dist{0, 2 * blockSize - 1}; // from nothing to a partial then whole block\r\n    uniform_int_distribution<int> copy_len_dist{1, 3 * blockSize}; // from 1 bit to leading/middle/trailing blocks\r\n    auto bool_dist = [&gen] { return static_cast<bool>(gen() & 1); };\r\n\r\n    constexpr int repetitions = 10'000; // tune the number of tests to balance coverage vs. execution time\r\n\r\n    for (int k = 0; k < repetitions; ++k) {\r\n        const int src_prefix = affix_dist(gen);\r\n        const int dst_prefix = affix_dist(gen);\r\n        const int copy_len   = copy_len_dist(gen);\r\n        const int src_suffix = affix_dist(gen);\r\n        const int dst_suffix = affix_dist(gen);\r\n\r\n        // src vector: <src_prefix> <copy_len> <src_suffix>\r\n        // dst vector: <dst_prefix> <copy_len> <dst_suffix>\r\n\r\n        vector<bool> vb_src(static_cast<size_t>(src_prefix + copy_len + src_suffix));\r\n        vector<bool> vb_dst(static_cast<size_t>(dst_prefix + copy_len + dst_suffix));\r\n\r\n        generate(vb_src.begin(), vb_src.end(), bool_dist);\r\n        generate(vb_dst.begin(), vb_dst.end(), bool_dist);\r\n\r\n        const vector<uint8_t> v8_src(vb_src.cbegin(), vb_src.cend());\r\n        vector<uint8_t> v8_dst(vb_dst.cbegin(), vb_dst.cend());\r\n\r\n        const vector<uint8_t> orig_v8_dst = v8_dst;\r\n\r\n        copy(vb_src.cbegin() + src_prefix, vb_src.cbegin() + src_prefix + copy_len, vb_dst.begin() + dst_prefix);\r\n        copy(v8_src.cbegin() + src_prefix, v8_src.cbegin() + src_prefix + copy_len, v8_dst.begin() + dst_prefix);\r\n\r\n        if (!equal(vb_dst.cbegin(), vb_dst.cend(), v8_dst.cbegin(), v8_dst.cend(), equal_to<uint8_t>{})) {\r\n            printf(\"src_prefix: %d\\n\", src_prefix);\r\n            printf(\"dst_prefix: %d\\n\", dst_prefix);\r\n            printf(\"  copy_len: %d\\n\", copy_len);\r\n            printf(\"src_suffix: %d\\n\", src_suffix);\r\n            printf(\"dst_suffix: %d\\n\", dst_suffix);\r\n\r\n            print_vec(\"     Src\", v8_src);\r\n            print_vec(\"Original\", orig_v8_dst);\r\n            print_vec(\"     Got\", vb_dst);\r\n            print_vec(\"Expected\", v8_dst);\r\n\r\n            assert(false);\r\n        }\r\n    }\r\n\r\n    // Overlapping is permitted when the dst range starts before the src range.\r\n    for (int k = 0; k < repetitions; ++k) {\r\n        const int prefix   = affix_dist(gen);\r\n        const int copy_len = copy_len_dist(gen);\r\n        const int overhang = uniform_int_distribution<int>{1, copy_len + 30}(gen);\r\n        const int suffix   = affix_dist(gen);\r\n\r\n        // An overhang of 1 results in the maximum possible overlap.\r\n        // An overhang of copy_len results in non-overlapping but adjacent ranges.\r\n        // An overhang of copy_len + 30 is the maximum value where the dst and src ranges could share a block.\r\n\r\n        // Vector diagram:\r\n        // <prefix> <overhang> <src is copy_len> <suffix>\r\n        //          ^\r\n        //          <dst is copy_len>\r\n\r\n        vector<bool> vb(static_cast<size_t>(prefix + overhang + copy_len + suffix));\r\n\r\n        generate(vb.begin(), vb.end(), bool_dist);\r\n\r\n        vector<uint8_t> v8(vb.cbegin(), vb.cend());\r\n\r\n        const vector<uint8_t> orig_v8 = v8;\r\n\r\n        copy(vb.cbegin() + prefix + overhang, vb.cbegin() + prefix + overhang + copy_len, vb.begin() + prefix);\r\n        copy(v8.cbegin() + prefix + overhang, v8.cbegin() + prefix + overhang + copy_len, v8.begin() + prefix);\r\n\r\n        if (!equal(vb.cbegin(), vb.cend(), v8.cbegin(), v8.cend(), equal_to<uint8_t>{})) {\r\n            printf(\"  prefix: %d\\n\", prefix);\r\n            printf(\"copy_len: %d\\n\", copy_len);\r\n            printf(\"overhang: %d\\n\", overhang);\r\n            printf(\"  suffix: %d\\n\", suffix);\r\n\r\n            print_vec(\"Original\", orig_v8);\r\n            print_vec(\"Got\", vb);\r\n            print_vec(\"Expected\", v8);\r\n\r\n            assert(false);\r\n        }\r\n    }\r\n\r\n    uniform_int_distribution<int> gap_dist{0, 30}; // 0 gap is adjacent; 30 is the max gap between 2 bits in a block\r\n\r\n    // One more interesting case: when the src range is before the dst range,\r\n    // and they're non-overlapping but close enough that they could share a block.\r\n    for (int k = 0; k < repetitions; ++k) {\r\n        const int prefix   = affix_dist(gen);\r\n        const int copy_len = copy_len_dist(gen);\r\n        const int gap      = gap_dist(gen);\r\n        const int suffix   = affix_dist(gen);\r\n\r\n        // Vector diagram:\r\n        // <prefix> <src is copy_len> <gap> <dst is copy_len> <suffix>\r\n\r\n        vector<bool> vb(static_cast<size_t>(prefix + copy_len + gap + copy_len + suffix));\r\n\r\n        generate(vb.begin(), vb.end(), bool_dist);\r\n\r\n        vector<uint8_t> v8(vb.cbegin(), vb.cend());\r\n\r\n        const vector<uint8_t> orig_v8 = v8;\r\n\r\n        copy(vb.cbegin() + prefix, vb.cbegin() + prefix + copy_len, vb.begin() + prefix + copy_len + gap);\r\n        copy(v8.cbegin() + prefix, v8.cbegin() + prefix + copy_len, v8.begin() + prefix + copy_len + gap);\r\n\r\n        if (!equal(vb.cbegin(), vb.cend(), v8.cbegin(), v8.cend(), equal_to<uint8_t>{})) {\r\n            printf(\"  prefix: %d\\n\", prefix);\r\n            printf(\"copy_len: %d\\n\", copy_len);\r\n            printf(\"     gap: %d\\n\", gap);\r\n            printf(\"  suffix: %d\\n\", suffix);\r\n\r\n            print_vec(\"Original\", orig_v8);\r\n            print_vec(\"Got\", vb);\r\n            print_vec(\"Expected\", v8);\r\n\r\n            assert(false);\r\n        }\r\n    }\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <size_t N, size_t Offset = 0>\r\nconstexpr bool test_gh_5345() {\r\n    // GH-5345 <vector>: _Copy_vbool() mishandles vector<bool>s of size 32 and 64, revealed by constexpr Clang\r\n    vector<bool> src(N, true);\r\n\r\n    for (size_t i = 2; i != N; ++i) {\r\n        for (size_t j = i * 2; j < N; j += i) {\r\n            src[j] = false;\r\n        }\r\n    }\r\n\r\n    vector<bool> dst(N, false);\r\n    copy(src.begin() + Offset, src.end(), dst.begin() + Offset);\r\n    return equal(src.begin() + Offset, src.end(), dst.begin() + Offset, dst.end());\r\n}\r\n\r\nstatic_assert(test_gh_5345<17>());\r\nstatic_assert(test_gh_5345<17, 1>());\r\nstatic_assert(test_gh_5345<32>());\r\nstatic_assert(test_gh_5345<32, 5>());\r\nstatic_assert(test_gh_5345<43>());\r\nstatic_assert(test_gh_5345<43, 10>());\r\nstatic_assert(test_gh_5345<64>());\r\nstatic_assert(test_gh_5345<64, 16>());\r\nstatic_assert(test_gh_5345<120>());\r\nstatic_assert(test_gh_5345<120, 31>());\r\n\r\nstatic_assert(test_fill());\r\nstatic_assert(test_find());\r\nstatic_assert(test_count());\r\nstatic_assert(test_transform());\r\nstatic_assert(test_meow_of());\r\n\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-2574489\r\nstatic_assert(test_copy_part_1());\r\nstatic_assert(test_copy_part_2());\r\n#endif // ^^^ no workaround ^^^\r\n#endif // _HAS_CXX20\r\n\r\nint main() {\r\n    test_fill();\r\n    test_find();\r\n    test_count();\r\n    test_transform();\r\n    test_meow_of();\r\n    test_copy_part_1();\r\n    test_copy_part_2();\r\n\r\n    test_huge_vector_bool();\r\n\r\n    mt19937_64 gen;\r\n    initialize_randomness(gen);\r\n    randomized_test_copy(gen);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000639_nvcc_include_all/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nPM_COMPILER=\"nvcc\" PM_CL=\"--x cu -Xcompiler -Od,-EHsc,-nologo,-W4,-WX,-openmp\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"-Xcompiler -MT\"\r\nPM_CL=\"--debug -Xcompiler -MTd\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"-std=c++14\"\r\nPM_CL=\"-std=c++17 -D_SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING\"\r\nPM_CL=\"-std=c++20\"\r\n"
  },
  {
    "path": "tests/std/tests/GH_000639_nvcc_include_all/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _MSVC_TESTING_NVCC\r\n\r\n#include <__msvc_all_public_headers.hpp>\r\n\r\nusing namespace std;\r\n\r\n#if _HAS_CXX20\r\n// Test VSO-2411436 \"[Feedback] CUDA (12.8) host code compilation fails with std::format and VS2022\"\r\nvoid test_VSO_2411436() {\r\n    (void) format(\"{}\", 1729);\r\n}\r\n#endif // _HAS_CXX20\r\n\r\nvoid test_removed_workaround_for_iterator_traits() {\r\n    using Cat = iterator_traits<vector<int>::iterator>::iterator_category;\r\n    static_assert(is_same_v<Cat, random_access_iterator_tag>, \"Expected vector::iterator to be random-access\");\r\n}\r\n\r\nvoid test_removed_workaround_for_static_call_operators() {\r\n    (void) hash<double>{}(3.14);\r\n}\r\n\r\nvoid test_removed_workaround_for_intrinsics() {\r\n    (void) ceil(3.14f);\r\n\r\n#if _HAS_CXX20\r\n    (void) countl_zero(1729u);\r\n    (void) countr_zero(1729u);\r\n    (void) popcount(1729u);\r\n\r\n    const auto vw   = views::iota(0ll, 10ll);\r\n    const auto dist = vw.end() - vw.begin();\r\n    (void) (dist / dist);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\nvoid test_removed_workaround_for_nocheck_type_traits() {\r\n    const pair<int, int> src{11, 22};\r\n    pair<int, int> dst{33, 44};\r\n    dst = src;\r\n}\r\n\r\n#if _HAS_CXX20\r\nvoid test_removed_workaround_for_tzdb_list() {\r\n    (void) chrono::get_tzdb_list();\r\n}\r\n#endif // _HAS_CXX20\r\n"
  },
  {
    "path": "tests/std/tests/GH_000685_condition_variable_any/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000685_condition_variable_any/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Test GH-685 \"wait_for in condition_variable_any should unlock and lock\"\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <condition_variable>\r\n#include <mutex>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\n\r\nnamespace {\r\n    class my_mutex { // user-defined mutex type\r\n    public:\r\n        void lock() {\r\n            mtx.lock();\r\n            ++num_lock;\r\n        }\r\n\r\n        void unlock() {\r\n            mtx.unlock();\r\n        }\r\n\r\n        int num_locks() const {\r\n            return num_lock;\r\n        }\r\n\r\n    private:\r\n        mutex mtx;\r\n        int num_lock = 0;\r\n    };\r\n\r\n    const nanoseconds interval{20};\r\n    const nanoseconds zero_dur{0};\r\n\r\n    void test_condition_variable_any() { // test wait functions of condition variables\r\n        condition_variable_any cnd;\r\n        {\r\n            my_mutex mtx;\r\n            unique_lock<my_mutex> guard{mtx};\r\n\r\n            cnd.wait_for(mtx, zero_dur);\r\n            assert(mtx.num_locks() == 2);\r\n\r\n            cnd.wait_for(mtx, interval);\r\n            assert(mtx.num_locks() == 3);\r\n\r\n            cnd.wait_until(mtx, steady_clock::now());\r\n            assert(mtx.num_locks() == 4);\r\n\r\n            cnd.wait_until(mtx, steady_clock::now() + interval);\r\n            assert(mtx.num_locks() == 5);\r\n        }\r\n    }\r\n\r\n    void test_condition_variable_any_already_timed_out() {\r\n        using unsigned_duration = duration<make_unsigned_t<system_clock::rep>, system_clock::period>;\r\n        const auto right_now    = time_point_cast<unsigned_duration>(system_clock::now());\r\n        const auto yesterday    = right_now - hours{24};\r\n        assert(yesterday - right_now > system_clock::duration::zero()); // unsigned overflow\r\n\r\n        my_mutex m;\r\n        condition_variable_any cond;\r\n        unique_lock<my_mutex> guard(m);\r\n\r\n        const auto status = cond.wait_until(m, yesterday);\r\n        assert(status == cv_status::timeout);\r\n        assert(m.num_locks() == 2);\r\n\r\n        assert(cond.wait_until(m, yesterday, []() { return false; }) == false);\r\n        assert(m.num_locks() == 3);\r\n\r\n#if _HAS_CXX20\r\n        stop_token token;\r\n        assert(cond.wait_until(m, token, yesterday, []() { return false; }) == false);\r\n        assert(m.num_locks() == 4);\r\n#endif // _HAS_CXX20\r\n    }\r\n} // unnamed namespace\r\n\r\nint main() {\r\n    test_condition_variable_any();\r\n    test_condition_variable_any_already_timed_out();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000690_overaligned_function/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000690_overaligned_function/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <functional>\r\n\r\n#pragma warning(disable : 4324) // structure was padded due to alignment specifier\r\n\r\n// SFO (Small Functor Optimization) should not happen\r\nstruct alignas(2 * alignof(std::max_align_t)) overaligned_t {\r\n    char non_empty;\r\n\r\n    void operator()(const void* const storage, const std::size_t storage_size) const {\r\n        const auto storage_ptr_value = reinterpret_cast<std::uintptr_t>(storage);\r\n        const auto this_ptr_value    = reinterpret_cast<std::uintptr_t>(this);\r\n\r\n        // Platform-specific behavior not covered by Standard C++, but fine for this test\r\n        assert(this_ptr_value < storage_ptr_value || this_ptr_value >= storage_ptr_value + storage_size);\r\n\r\n        // Before C++17, alignas isn't helpful for aligning allocations via \"new\"\r\n#ifdef __cpp_aligned_new\r\n        assert(this_ptr_value % alignof(overaligned_t) == 0);\r\n#endif\r\n    }\r\n};\r\n\r\n// SFO should happen\r\nstruct not_overaligned_t {\r\n    char data[sizeof(overaligned_t)];\r\n\r\n    void operator()(const void* const storage, const std::size_t storage_size) const {\r\n        const auto storage_ptr_value = reinterpret_cast<std::uintptr_t>(storage);\r\n        const auto this_ptr_value    = reinterpret_cast<std::uintptr_t>(this);\r\n\r\n        // Platform-specific behavior not covered by Standard C++, but fine for this test\r\n        assert(this_ptr_value >= storage_ptr_value && this_ptr_value < storage_ptr_value + storage_size);\r\n    }\r\n};\r\n\r\nstatic_assert(alignof(overaligned_t) > alignof(std::max_align_t), \"overaligned_t is not overaligned\");\r\n\r\ntemplate <class function_t>\r\nvoid test() {\r\n    struct functions_t {\r\n        function_t first{overaligned_t{}};\r\n        char smallest_pad;\r\n        function_t second{overaligned_t{}};\r\n        function_t third{overaligned_t{}};\r\n    };\r\n\r\n    functions_t functions;\r\n    functions.first(&functions.first, sizeof(functions.first));\r\n    functions.second(&functions.second, sizeof(functions.second));\r\n    functions.third(&functions.third, sizeof(functions.third));\r\n\r\n    function_t sfo{not_overaligned_t{}};\r\n    sfo(&sfo, sizeof(sfo));\r\n}\r\n\r\n\r\nint main() {\r\n    test<std::function<void(const void* storage, std::size_t storage_size)>>();\r\n#if _HAS_CXX23\r\n    test<std::move_only_function<void(const void* storage, std::size_t storage_size)>>();\r\n#endif\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000732_hash_reserve/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000732_hash_reserve/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <unordered_set>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    unordered_set<int> a;\r\n    a.max_load_factor(24.0f / 64.25f);\r\n    a.reserve(24);\r\n    assert(a.bucket_count() > 64);\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000856_nth_element_linear/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000856_nth_element_linear/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nconstexpr int tukey_ninther_adversary1[] = {0, 6, 12, 18, 22, 28, 34, 38, 44, 50, 54, 60, 66, 70, 76, 82, 86, 92, 98,\r\n    102, 108, 114, 118, 124, 130, 134, 140, 146, 150, 156, 162, 166, 172, 178, 182, 188, 194, 198, 204, 210, 214, 220,\r\n    226, 230, 236, 242, 246, 252, 258, 262, 268, 274, 278, 284, 290, 294, 300, 306, 310, 316, 322, 326, 332, 338, 342,\r\n    348, 354, 358, 364, 370, 374, 380, 386, 390, 396, 402, 406, 412, 418, 422, 428, 434, 438, 444, 450, 454, 460, 466,\r\n    470, 476, 482, 486, 492, 498, 502, 508, 514, 518, 524, 530, 534, 540, 546, 550, 556, 562, 566, 572, 578, 582, 588,\r\n    594, 598, 604, 610, 614, 620, 626, 630, 636, 642, 646, 652, 658, 662, 668, 674, 678, 1, 7, 13, 684, 19, 23, 29, 690,\r\n    35, 39, 45, 694, 51, 55, 61, 700, 67, 71, 77, 706, 83, 87, 93, 710, 99, 103, 109, 716, 115, 119, 125, 722, 131, 135,\r\n    141, 726, 147, 151, 157, 732, 163, 167, 173, 738, 179, 183, 189, 742, 195, 199, 205, 748, 211, 215, 221, 754, 227,\r\n    231, 237, 758, 243, 247, 253, 764, 259, 263, 269, 770, 275, 279, 285, 774, 291, 295, 301, 780, 307, 311, 317, 786,\r\n    323, 327, 333, 790, 339, 343, 349, 796, 355, 359, 365, 802, 371, 375, 381, 806, 387, 391, 397, 812, 403, 407, 413,\r\n    818, 419, 423, 429, 822, 435, 439, 445, 828, 451, 455, 461, 834, 467, 471, 477, 838, 483, 487, 493, 844, 499, 503,\r\n    509, 850, 515, 519, 525, 854, 531, 535, 541, 860, 547, 551, 557, 866, 563, 567, 573, 870, 579, 583, 589, 876, 595,\r\n    599, 605, 882, 611, 615, 621, 886, 627, 631, 637, 892, 643, 647, 653, 898, 659, 663, 669, 902, 675, 679, 685, 908,\r\n    691, 695, 701, 914, 707, 711, 717, 918, 723, 727, 733, 924, 739, 743, 749, 930, 755, 759, 765, 934, 771, 775, 781,\r\n    940, 787, 791, 797, 946, 803, 807, 813, 950, 819, 823, 829, 956, 835, 839, 845, 962, 851, 855, 861, 966, 867, 871,\r\n    877, 972, 883, 887, 893, 978, 899, 903, 909, 982, 915, 919, 925, 988, 931, 935, 941, 990, 947, 951, 957, 992, 963,\r\n    967, 973, 1024, 979, 983, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 2, 20, 8, 14, 24, 36, 30, 40, 52, 46,\r\n    56, 68, 62, 72, 84, 78, 88, 100, 94, 104, 116, 110, 120, 132, 126, 136, 148, 142, 152, 164, 158, 168, 180, 174, 184,\r\n    196, 190, 200, 212, 206, 216, 228, 222, 232, 244, 238, 248, 260, 254, 264, 276, 270, 280, 292, 286, 296, 308, 302,\r\n    312, 324, 318, 328, 340, 334, 344, 356, 350, 360, 372, 366, 376, 388, 382, 392, 404, 398, 408, 420, 414, 424, 436,\r\n    430, 440, 452, 446, 456, 468, 462, 472, 484, 478, 488, 500, 494, 504, 516, 510, 520, 532, 526, 536, 548, 542, 552,\r\n    564, 558, 568, 580, 574, 584, 596, 590, 600, 612, 606, 616, 628, 622, 632, 644, 638, 648, 660, 654, 664, 676, 670,\r\n    512, 3, 991, 9, 773, 768, 15, 680, 901, 21, 522, 25, 777, 527, 31, 692, 965, 37, 528, 41, 960, 778, 47, 686, 905,\r\n    53, 538, 57, 936, 543, 63, 696, 1007, 69, 544, 73, 789, 784, 79, 708, 1014, 85, 554, 89, 793, 559, 95, 702, 969,\r\n    101, 560, 105, 911, 794, 111, 712, 974, 117, 570, 121, 948, 575, 127, 724, 1015, 133, 576, 137, 805, 800, 143, 718,\r\n    917, 149, 586, 153, 809, 591, 159, 728, 1008, 165, 592, 169, 970, 810, 175, 740, 921, 181, 602, 185, 942, 607, 191,\r\n    734, 1009, 197, 608, 201, 821, 816, 207, 744, 975, 213, 618, 217, 825, 623, 223, 756, 1005, 229, 624, 233, 927, 826,\r\n    239, 750, 984, 245, 634, 249, 952, 639, 255, 760, 1010, 261, 640, 265, 837, 832, 271, 772, 933, 277, 650, 281, 841,\r\n    655, 287, 766, 981, 293, 656, 297, 976, 842, 303, 776, 937, 309, 666, 313, 964, 671, 319, 788, 1011, 325, 672, 329,\r\n    853, 848, 335, 782, 1016, 341, 682, 345, 857, 687, 351, 792, 985, 357, 688, 361, 943, 858, 367, 804, 1003, 373, 698,\r\n    377, 958, 703, 383, 798, 1017, 389, 704, 393, 869, 864, 399, 808, 949, 405, 714, 409, 873, 719, 415, 820, 1012, 421,\r\n    720, 425, 986, 874, 431, 814, 953, 437, 730, 441, 968, 735, 447, 824, 1013, 453, 736, 457, 885, 880, 463, 836, 989,\r\n    469, 746, 473, 889, 751, 479, 830, 1006, 485, 752, 489, 959, 890, 495, 840, 1004, 501, 762, 505, 980, 767, 511, 852,\r\n    4, 517, 10, 521, 16, 896, 26, 846, 32, 533, 42, 537, 48, 783, 58, 856, 64, 549, 74, 553, 80, 906, 90, 868, 96, 565,\r\n    106, 569, 112, 799, 122, 862, 128, 581, 138, 585, 144, 912, 154, 72, 160, 597, 170, 601, 176, 815, 186, 884, 192,\r\n    613, 202, 617, 208, 922, 218, 878, 224, 629, 234, 633, 240, 831, 250, 888, 256, 645, 266, 649, 272, 928, 282, 900,\r\n    288, 661, 298, 665, 304, 847, 314, 894, 320, 677, 330, 681, 336, 938, 346, 904, 352, 693, 362, 697, 368, 863, 378,\r\n    916, 384, 709, 394, 713, 400, 944, 410, 910, 416, 725, 426, 729, 432, 879, 442, 920, 448, 741, 458, 745, 464, 954,\r\n    474, 932, 480, 757, 490, 761, 496, 895, 506, 926, 5, 11, 17, 27, 33, 43, 49, 59, 65, 75, 81, 91, 97, 107, 113, 123,\r\n    129, 139, 145, 155, 161, 71, 177, 187, 193, 203, 209, 219, 225, 235, 241, 251, 257, 267, 273, 283, 289, 299, 305,\r\n    315, 321, 331, 337, 347, 353, 363, 369, 379, 385, 395, 401, 411, 417, 427, 433, 443, 449, 459, 465, 475, 481, 491,\r\n    497, 507, 513, 523, 529, 539, 545, 555, 561, 571, 577, 587, 593, 603, 609, 619, 625, 635, 641, 651, 657, 667, 673,\r\n    683, 689, 699, 705, 715, 721, 731, 737, 747, 753, 763, 769, 779, 785, 795, 801, 811, 817, 827, 833, 843, 849, 859,\r\n    865, 875, 881, 891, 897, 907, 913, 923, 929, 939, 945, 955, 961, 971, 977, 987, 1018, 1019, 1020, 1021, 1022};\r\n\r\nconstexpr int tukey_ninther_adversary2[] = {1024, 31, 30, 29, 28, 36, 46, 51, 61, 67, 77, 82, 92, 98, 108, 118, 123,\r\n    133, 139, 149, 154, 164, 170, 180, 190, 195, 205, 211, 221, 226, 236, 242, 252, 262, 267, 277, 283, 293, 298, 308,\r\n    314, 324, 334, 339, 349, 355, 365, 370, 380, 386, 396, 406, 411, 421, 427, 437, 442, 452, 458, 468, 478, 483, 493,\r\n    499, 509, 514, 524, 530, 540, 550, 555, 565, 571, 581, 586, 596, 602, 612, 622, 627, 637, 643, 653, 658, 668, 674,\r\n    684, 694, 699, 709, 715, 725, 730, 740, 746, 756, 766, 771, 781, 787, 797, 802, 812, 818, 828, 838, 843, 853, 859,\r\n    869, 874, 884, 890, 900, 910, 915, 925, 931, 941, 946, 956, 962, 972, 982, 987, 997, 1003, 1013, 1018, 343, 523,\r\n    127, 529, 86, 539, 358, 549, 178, 554, 107, 564, 374, 570, 183, 580, 384, 585, 389, 595, 394, 601, 399, 611, 404,\r\n    621, 409, 626, 18, 636, 419, 642, 425, 652, 318, 657, 435, 667, 440, 673, 169, 683, 450, 693, 224, 698, 256, 708,\r\n    179, 714, 66, 724, 234, 729, 487, 739, 189, 745, 34, 755, 502, 765, 71, 770, 188, 780, 518, 786, 76, 796, 528, 801,\r\n    533, 811, 538, 817, 543, 827, 548, 837, 553, 842, 163, 852, 563, 858, 569, 868, 286, 873, 579, 883, 584, 889, 70,\r\n    899, 594, 909, 219, 914, 97, 924, 235, 930, 91, 940, 462, 945, 631, 955, 173, 961, 241, 971, 646, 981, 322, 986,\r\n    272, 996, 662, 1002, 327, 1012, 672, 1017, 677, 1023, 682, 184, 687, 44, 692, 80, 697, 703, 390, 347, 707, 193, 713,\r\n    718, 534, 276, 723, 26, 728, 734, 32, 200, 738, 744, 368, 749, 137, 754, 15, 759, 25, 764, 378, 769, 775, 575, 90,\r\n    779, 148, 785, 790, 297, 215, 795, 225, 800, 806, 447, 56, 810, 816, 27, 821, 153, 826, 616, 831, 152, 836, 59, 841,\r\n    847, 472, 632, 851, 116, 857, 862, 430, 214, 867, 647, 872, 878, 106, 251, 882, 888, 21, 893, 332, 898, 87, 903,\r\n    132, 908, 678, 913, 919, 456, 168, 923, 230, 929, 934, 519, 466, 939, 19, 944, 950, 353, 471, 954, 960, 364, 965,\r\n    719, 970, 271, 975, 544, 980, 369, 985, 991, 210, 491, 995, 282, 1001, 1006, 750, 250, 1011, 121, 1016, 1022, 385,\r\n    292, 507, 65, 512, 255, 102, 776, 395, 45, 159, 287, 522, 260, 591, 791, 405, 117, 204, 307, 49, 265, 302, 807, 606,\r\n    400, 22, 111, 16, 344, 822, 420, 313, 303, 415, 832, 275, 203, 559, 23, 416, 426, 323, 848, 281, 231, 209, 317, 574,\r\n    436, 17, 863, 142, 333, 220, 488, 431, 441, 81, 879, 75, 590, 451, 663, 328, 446, 894, 296, 375, 600, 261, 904, 457,\r\n    348, 605, 337, 610, 60, 688, 920, 467, 96, 615, 461, 620, 306, 354, 935, 477, 704, 625, 24, 312, 128, 143, 951, 476,\r\n    635, 174, 131, 641, 240, 966, 492, 481, 138, 359, 976, 40, 363, 651, 735, 656, 498, 379, 992, 20, 497, 39, 560, 666,\r\n    508, 112, 1007, 246, 158, 162, 760, 503, 513, 482, 291, 410, 245, 338, 199, 266, 147, 194, 101, 122, 55, 50, 14, 13,\r\n    43, 48, 58, 64, 74, 79, 95, 105, 115, 120, 130, 136, 146, 151, 167, 177, 187, 192, 202, 208, 218, 223, 239, 249,\r\n    259, 264, 274, 280, 290, 295, 311, 321, 331, 336, 346, 352, 362, 367, 383, 393, 403, 408, 418, 424, 434, 439, 455,\r\n    465, 475, 480, 490, 496, 506, 511, 527, 537, 547, 552, 562, 568, 578, 583, 599, 609, 619, 624, 634, 640, 650, 655,\r\n    671, 681, 691, 696, 706, 712, 722, 727, 743, 753, 763, 768, 778, 784, 794, 799, 815, 825, 835, 840, 850, 856, 866,\r\n    871, 887, 897, 907, 912, 922, 928, 938, 943, 959, 969, 979, 984, 994, 1000, 1010, 1015, 1021, 1005, 990, 953, 974,\r\n    964, 949, 933, 918, 881, 902, 892, 877, 861, 846, 809, 830, 820, 805, 789, 774, 737, 758, 748, 733, 717, 702, 665,\r\n    686, 676, 661, 645, 630, 593, 614, 604, 589, 573, 558, 521, 542, 532, 517, 501, 486, 449, 470, 460, 445, 429, 414,\r\n    377, 398, 388, 373, 357, 342, 305, 326, 316, 301, 285, 270, 233, 254, 244, 229, 213, 198, 161, 182, 172, 157, 141,\r\n    126, 89, 110, 100, 85, 69, 54, 12, 38, 11, 10, 9, 8, 53, 84, 99, 125, 156, 171, 197, 228, 243, 269, 300, 315, 341,\r\n    372, 387, 413, 444, 459, 485, 516, 531, 557, 588, 603, 629, 660, 675, 701, 732, 747, 773, 804, 819, 845, 876, 891,\r\n    917, 948, 963, 989, 1020, 1014, 63, 253, 258, 263, 279, 273, 284, 289, 294, 310, 304, 320, 73, 325, 330, 335, 351,\r\n    345, 356, 361, 366, 382, 376, 392, 88, 397, 402, 407, 423, 417, 428, 433, 438, 454, 448, 464, 109, 469, 474, 479,\r\n    495, 489, 500, 505, 510, 526, 520, 536, 135, 541, 546, 551, 567, 561, 572, 577, 582, 598, 592, 608, 145, 613, 618,\r\n    623, 639, 633, 644, 649, 654, 670, 664, 680, 160, 685, 690, 695, 711, 705, 716, 721, 726, 742, 736, 752, 181, 757,\r\n    762, 767, 783, 777, 788, 793, 798, 814, 808, 824, 207, 829, 834, 839, 855, 849, 860, 865, 870, 886, 880, 896, 217,\r\n    901, 906, 911, 927, 921, 932, 937, 942, 958, 952, 968, 232, 973, 978, 983, 999, 993, 1004, 1009, 248, 238, 222, 212,\r\n    201, 191, 186, 37, 176, 166, 150, 140, 129, 119, 114, 3, 104, 94, 78, 68, 57, 47, 42, 6, 7, 4, 5, 2, -1, 33, 35, 41,\r\n    52, 62, 72, 83, 93, 103, 113, 124, 134, 144, 155, 165, 175, 185, 196, 206, 216, 227, 237, 247, 257, 268, 278, 288,\r\n    299, 309, 319, 329, 340, 350, 360, 371, 381, 391, 401, 412, 422, 432, 443, 453, 463, 473, 484, 494, 504, 515, 525,\r\n    535, 545, 556, 566, 576, 587, 597, 607, 617, 628, 638, 648, 659, 669, 679, 689, 700, 710, 720, 731, 741, 751, 761,\r\n    772, 782, 792, 803, 813, 823, 833, 844, 854, 864, 875, 885, 895, 905, 916, 926, 936, 947, 957, 967, 977, 988, 998,\r\n    1008, 1019};\r\n\r\ntemplate <class Diff>\r\nvoid check_result(const vector<int>& expected, const vector<int>& computed, const Diff nth) {\r\n    assert(is_permutation(computed.begin(), computed.end(), expected.begin(), expected.end()));\r\n    const auto mid    = computed.begin() + nth;\r\n    const int val_nth = *mid;\r\n    assert(*(expected.begin() + nth) == val_nth);\r\n    for (auto it = computed.begin(); it < mid; ++it) {\r\n        assert(*it <= val_nth);\r\n    }\r\n    for (auto it = mid; it < computed.end(); ++it) {\r\n        assert(*it >= val_nth);\r\n    }\r\n}\r\n\r\ntemplate <class Algorithm, class Src>\r\nvoid test_nth_element(Algorithm alg, const Src& src) {\r\n    const auto src_ssize = end(src) - begin(src);\r\n\r\n    vector<int> sorted(begin(src), end(src));\r\n    sort(sorted.begin(), sorted.end());\r\n    vector<int> v;\r\n\r\n    for (vector<int>::difference_type nth{}; nth < src_ssize; nth += 15) {\r\n        v.assign(begin(src), end(src));\r\n        alg(v, nth);\r\n        check_result(sorted, v, nth);\r\n    }\r\n    v.assign(begin(src), end(src));\r\n    alg(v, src_ssize - 1);\r\n    check_result(sorted, v, src_ssize - 1);\r\n}\r\n\r\ntemplate <class Algorithm>\r\nvoid test_nth_element_tukey_adversary(Algorithm alg) {\r\n    test_nth_element(alg, tukey_ninther_adversary1);\r\n    test_nth_element(alg, tukey_ninther_adversary2);\r\n}\r\n\r\nint main() {\r\n    test_nth_element_tukey_adversary([](vector<int>& v, const vector<int>::difference_type nth) {\r\n        nth_element(v.begin(), v.begin() + nth, v.end());\r\n    });\r\n\r\n#if _HAS_CXX20\r\n    test_nth_element_tukey_adversary([](vector<int>& v, const vector<int>::difference_type nth) {\r\n        ranges::nth_element(v.begin(), v.begin() + nth, v.end());\r\n    });\r\n#endif\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000890_pow_template/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000890_pow_template/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cmath>\r\n#include <type_traits>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nconstexpr long double ld = 10.0l;\r\nconstexpr double d       = 10.0;\r\nconstexpr float f        = 10.0f;\r\nconstexpr long long ll   = 2;\r\nconstexpr int i          = 2;\r\nconstexpr short s        = 2;\r\n\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(ld, ld)), long double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(ld, d)), long double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(ld, f)), long double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(ld, ll)), long double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(ld, i)), long double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(ld, s)), long double>);\r\n\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(d, ld)), long double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(d, d)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(d, f)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(d, ll)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(d, i)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(d, s)), double>);\r\n\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(f, ld)), long double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(f, d)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(f, f)), float>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(f, ll)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(f, i)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(f, s)), double>);\r\n\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(ll, ld)), long double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(ll, d)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(ll, f)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(ll, ll)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(ll, i)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(ll, s)), double>);\r\n\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(i, ld)), long double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(i, d)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(i, f)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(i, ll)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(i, i)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(i, s)), double>);\r\n\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(s, ld)), long double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(s, d)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(s, f)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(s, ll)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(s, i)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::pow(s, s)), double>);\r\n"
  },
  {
    "path": "tests/std/tests/GH_000935_complex_numerical_accuracy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\floating_point_model_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000935_complex_numerical_accuracy/floating_point_utils.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <cassert>\r\n#include <cfenv>\r\n#include <cfloat>\r\n#include <cmath>\r\n#include <type_traits>\r\n#include <xutility>\r\n\r\nnamespace fputil {\r\n    template <typename T>\r\n    using float_bits_t = typename _STD _Floating_type_traits<T>::_Uint_type;\r\n\r\n    template <typename T>\r\n    constexpr float_bits_t<T> sign_mask_v = _STD _Floating_type_traits<T>::_Shifted_sign_mask;\r\n\r\n    template <typename T>\r\n    constexpr float_bits_t<T> magnitude_mask_v = ~sign_mask_v<T>;\r\n\r\n    template <typename T>\r\n    constexpr float_bits_t<T> exponent_mask_v = _STD _Floating_type_traits<T>::_Shifted_exponent_mask;\r\n\r\n    template <typename T>\r\n    constexpr float_bits_t<T> significand_mask_v = magnitude_mask_v<T> & ~exponent_mask_v<T>;\r\n\r\n    template <typename T>\r\n    constexpr float_bits_t<T> norm_min_bits_v = significand_mask_v<T> + 1U;\r\n\r\n    template <typename T>\r\n    constexpr float_bits_t<T> norm_max_bits_v = exponent_mask_v<T> - 1U;\r\n\r\n    template <typename T>\r\n    constexpr float_bits_t<T> infinity_bits_v = exponent_mask_v<T>;\r\n\r\n    // not affected by abrupt underflow\r\n    template <typename T, std::enable_if_t<std::is_floating_point_v<T>, int> = 0>\r\n    constexpr bool iszero(const T& x) {\r\n        return _STD _Float_abs_bits(x) == 0;\r\n    }\r\n\r\n    // not affected by /fp:fast\r\n    template <typename T, std::enable_if_t<std::is_floating_point_v<T>, int> = 0>\r\n    constexpr bool signbit(const T& x) {\r\n        const auto bits = std::_Bit_cast<float_bits_t<T>>(x);\r\n        return (bits & sign_mask_v<T>) != 0;\r\n    }\r\n\r\n    enum class rounding_mode {\r\n        to_nearest_ties_even = FE_TONEAREST,\r\n        toward_zero          = FE_TOWARDZERO,\r\n        toward_positive      = FE_UPWARD,\r\n        toward_negative      = FE_DOWNWARD,\r\n    };\r\n\r\n    bool is_directed_rounding_mode(const rounding_mode mode) {\r\n        switch (mode) {\r\n        case rounding_mode::to_nearest_ties_even:\r\n            return false;\r\n\r\n        case rounding_mode::toward_zero:\r\n        case rounding_mode::toward_positive:\r\n        case rounding_mode::toward_negative:\r\n            return true;\r\n\r\n        default:\r\n            assert(false);\r\n            return false;\r\n        }\r\n    }\r\n\r\n#if TEST_FP_ROUNDING\r\n\r\n#ifdef __clang__\r\n// TRANSITION, should be #pragma STDC FENV_ACCESS ON\r\n#else // ^^^ clang / MSVC vvv\r\n    // TRANSITION, VSO-923474 -- should be #pragma STDC FENV_ACCESS ON\r\n#pragma fenv_access(on)\r\n#endif // ^^^ MSVC ^^^\r\n\r\n    constexpr rounding_mode all_rounding_modes[] = {\r\n        rounding_mode::to_nearest_ties_even,\r\n        rounding_mode::toward_zero,\r\n        rounding_mode::toward_positive,\r\n        rounding_mode::toward_negative,\r\n    };\r\n\r\n    class rounding_guard {\r\n    public:\r\n        explicit rounding_guard(const rounding_mode mode) : old_mode{static_cast<rounding_mode>(std::fegetround())} {\r\n            const int result = std::fesetround(static_cast<int>(mode));\r\n            assert(result == 0);\r\n        }\r\n\r\n        ~rounding_guard() {\r\n            const int result = std::fesetround(static_cast<int>(old_mode));\r\n            assert(result == 0);\r\n        }\r\n\r\n        rounding_guard(const rounding_guard&)            = delete;\r\n        rounding_guard& operator=(const rounding_guard&) = delete;\r\n\r\n    private:\r\n        rounding_mode old_mode;\r\n    };\r\n\r\n#else // ^^^ alternative rounding modes / default rounding mode only vvv\r\n\r\n    constexpr rounding_mode all_rounding_modes[] = {rounding_mode::to_nearest_ties_even};\r\n\r\n    class rounding_guard {\r\n    public:\r\n        explicit rounding_guard(const rounding_mode mode) {\r\n            static_cast<void>(mode);\r\n        }\r\n\r\n        ~rounding_guard() = default;\r\n\r\n        rounding_guard(const rounding_guard&)            = delete;\r\n        rounding_guard& operator=(const rounding_guard&) = delete;\r\n    };\r\n\r\n#endif // ^^^ default rounding mode only ^^^\r\n\r\n    // compares whether two floating point values are equal\r\n    // all NaNs are equal, +0.0 and -0.0 are not equal\r\n    template <typename T, std::enable_if_t<std::is_floating_point_v<T>, int> = 0>\r\n    bool precise_equal(const T& actual, const T& expected) {\r\n        if (_STD _Is_nan(actual) || _STD _Is_nan(expected)) {\r\n            return _STD _Is_nan(actual) == _STD _Is_nan(expected);\r\n        } else {\r\n            return actual == expected && fputil::signbit(actual) == fputil::signbit(expected);\r\n        }\r\n    }\r\n\r\n    namespace detail {\r\n        // 0x80...00 = zero, 0x80...01 = numeric_limits<T>::denorm_min(), 0x7f...ff = -numeric_limits<T>::denorm_min()\r\n        template <typename T, std::enable_if_t<std::is_floating_point_v<T>, int> = 0>\r\n        float_bits_t<T> offset_representation(const T& x) {\r\n            const float_bits_t<T> abs_bits = _STD _Float_abs_bits(x);\r\n            return fputil::signbit(x) ? sign_mask_v<T> - abs_bits : sign_mask_v<T> + abs_bits;\r\n        }\r\n\r\n        template <typename T, std::enable_if_t<std::is_floating_point_v<T>, int> = 0>\r\n        float_bits_t<T> is_offset_value_subnormal_or_zero(const float_bits_t<T> offset_value) {\r\n            constexpr float_bits_t<T> positive_norm_min_offset = sign_mask_v<T> + norm_min_bits_v<T>;\r\n            constexpr float_bits_t<T> negative_norm_min_offset = sign_mask_v<T> - norm_min_bits_v<T>;\r\n\r\n            return negative_norm_min_offset < offset_value && offset_value < positive_norm_min_offset;\r\n        }\r\n\r\n        // number of ulps above zero, if we count [0, numeric_limits<T>::min()) as 1 ulp\r\n        template <typename T, std::enable_if_t<std::is_floating_point_v<T>, int> = 0>\r\n        double abrupt_underflow_ulp(const float_bits_t<T> offset_value) {\r\n            using bits_type = float_bits_t<T>;\r\n\r\n            constexpr bits_type offset_positive_norm_min = sign_mask_v<T> + norm_min_bits_v<T>;\r\n            constexpr bits_type offset_negative_norm_min = sign_mask_v<T> - norm_min_bits_v<T>;\r\n\r\n            if (offset_value >= offset_positive_norm_min) {\r\n                return 1.0 + (offset_value - offset_positive_norm_min);\r\n            } else if (offset_value <= offset_negative_norm_min) {\r\n                return -1.0 - (offset_negative_norm_min - offset_value);\r\n            } else if (offset_value >= sign_mask_v<T>) {\r\n                return static_cast<double>(offset_value - sign_mask_v<T>) / norm_min_bits_v<T>;\r\n            } else {\r\n                return -static_cast<double>(sign_mask_v<T> - offset_value) / norm_min_bits_v<T>;\r\n            }\r\n        }\r\n\r\n        template <typename T, std::enable_if_t<std::is_floating_point_v<T>, int> = 0>\r\n        bool is_within_ulp_tolerance(const T& actual, const T& expected, const int ulp_tolerance) {\r\n            if (_STD _Is_nan(actual) || _STD _Is_nan(expected)) {\r\n                return _STD _Is_nan(actual) == _STD _Is_nan(expected);\r\n            }\r\n\r\n            if (_STD _Is_inf(expected)) {\r\n                return actual == expected;\r\n            }\r\n\r\n            if (fputil::signbit(actual) != fputil::signbit(expected)) {\r\n                return false;\r\n            }\r\n\r\n            using bits_type = float_bits_t<T>;\r\n\r\n            // compute ulp difference\r\n            const bits_type actual_offset   = detail::offset_representation(actual);\r\n            const bits_type expected_offset = detail::offset_representation(expected);\r\n            const bits_type ulp_diff =\r\n                actual_offset < expected_offset ? expected_offset - actual_offset : actual_offset - expected_offset;\r\n\r\n            if (ulp_diff <= static_cast<unsigned int>(ulp_tolerance) && ulp_tolerance >= 0) {\r\n                return true;\r\n            }\r\n\r\n#if WITH_FP_ABRUPT_UNDERFLOW\r\n            // handle abrupt underflow\r\n            if (detail::is_offset_value_subnormal_or_zero<T>(expected_offset)\r\n                || detail::is_offset_value_subnormal_or_zero<T>(actual_offset)) {\r\n                const double adjusted_actual_ulp   = detail::abrupt_underflow_ulp<T>(actual_offset);\r\n                const double adjusted_expected_ulp = detail::abrupt_underflow_ulp<T>(expected_offset);\r\n                const double adjusted_ulp_diff     = std::abs(adjusted_actual_ulp - adjusted_expected_ulp);\r\n\r\n                if (adjusted_ulp_diff <= ulp_tolerance) {\r\n                    return true;\r\n                }\r\n            }\r\n#endif // WITH_FP_ABRUPT_UNDERFLOW\r\n\r\n            return false;\r\n        }\r\n\r\n        template <typename T, std::enable_if_t<std::is_floating_point_v<T>, int> = 0>\r\n        bool is_within_absolute_tolerance(const T& actual, const T& expected, const double absolute_tolerance) {\r\n            return _STD _Is_finite(actual) && _STD _Is_finite(expected)\r\n                && std::abs(actual - expected) <= absolute_tolerance;\r\n        }\r\n    } // namespace detail\r\n\r\n    // returns whether floating point result is nearly equal to the expected value\r\n    template <typename T, std::enable_if_t<std::is_floating_point_v<T>, int> = 0>\r\n    bool near_equal(\r\n        const T& actual, const T& expected, const int ulp_tolerance = 1, const double absolute_tolerance = 0) {\r\n        if (precise_equal(actual, expected)) {\r\n            return true;\r\n        }\r\n\r\n        if (ulp_tolerance > 0 && detail::is_within_ulp_tolerance(actual, expected, ulp_tolerance)) {\r\n            return true;\r\n        }\r\n\r\n        if (absolute_tolerance > 0 && detail::is_within_absolute_tolerance(actual, expected, absolute_tolerance)) {\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n} // namespace fputil\r\n"
  },
  {
    "path": "tests/std/tests/GH_000935_complex_numerical_accuracy/log_test_cases.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <complex>\r\n\r\n#include \"floating_point_utils.hpp\"\r\n#include \"test.hpp\"\r\n\r\ntemplate <typename T>\r\nconstexpr T pi_over_4_v = T{0.7853981633974483};\r\ntemplate <typename T>\r\nconstexpr T pi_over_2_v = T{1.5707963267948966};\r\ntemplate <typename T>\r\nconstexpr T pi_3_over_4_v = T{2.356194490192345};\r\ntemplate <typename T>\r\nconstexpr T pi_v = T{3.141592653589793};\r\n\r\nconstexpr complex_unary_test_case<double> log_double_cases[] = {\r\n    // normal cases\r\n    {{+0x1.8p+0, +0x1p+1}, {+0x1.d5240f0e0e078p-1, +0x1.dac670561bb4fp-1}},\r\n    {{+0x1.8p+0, -0x1p+1}, {+0x1.d5240f0e0e078p-1, -0x1.dac670561bb4fp-1}},\r\n    {{-0x1.8p+0, +0x1p+1}, {+0x1.d5240f0e0e078p-1, +0x1.1b6e192ebbe44p+1}},\r\n    {{-0x1.8p+0, -0x1p+1}, {+0x1.d5240f0e0e078p-1, -0x1.1b6e192ebbe44p+1}},\r\n    {{+0x1.8p-1, +0x1p+0}, {+0x1.c8ff7c79a9a22p-3, +0x1.dac670561bb4fp-1}},\r\n    {{+0x1.8p-1, -0x1p+0}, {+0x1.c8ff7c79a9a22p-3, -0x1.dac670561bb4fp-1}},\r\n    {{-0x1.8p-1, +0x1p+0}, {+0x1.c8ff7c79a9a22p-3, +0x1.1b6e192ebbe44p+1}},\r\n    {{-0x1.8p-1, -0x1p+0}, {+0x1.c8ff7c79a9a22p-3, -0x1.1b6e192ebbe44p+1}},\r\n    {{+0x1.8p-2, +0x1p-1}, {-0x1.e148a1a2726cep-2, +0x1.dac670561bb4fp-1}},\r\n    {{+0x1.8p-2, -0x1p-1}, {-0x1.e148a1a2726cep-2, -0x1.dac670561bb4fp-1}},\r\n    {{-0x1.8p-2, +0x1p-1}, {-0x1.e148a1a2726cep-2, +0x1.1b6e192ebbe44p+1}},\r\n    {{-0x1.8p-2, -0x1p-1}, {-0x1.e148a1a2726cep-2, -0x1.1b6e192ebbe44p+1}},\r\n\r\n    // DevCom-10088405: Incorrect result for std::complex operations on ARM64 platform\r\n    {{0.1, 1.2}, {0.18578177821624148, 1.4876550949064553}},\r\n    {{-1.1698230349239351, 0.46519593659281616}, {0.23025850929940467, 2.763102111592855}},\r\n\r\n    // special cases\r\n    {{+1.0, +0.0}, {0.0, +0.0}, {true, true}},\r\n    {{+1.0, -0.0}, {0.0, -0.0}, {true, true}},\r\n    {{+0.0, +1.0}, {0.0, +pi_over_2_v<double>}, {true, false}},\r\n    {{+0.0, -1.0}, {0.0, -pi_over_2_v<double>}, {true, false}},\r\n    {{-0.0, +1.0}, {0.0, +pi_over_2_v<double>}, {true, false}},\r\n    {{-0.0, -1.0}, {0.0, -pi_over_2_v<double>}, {true, false}},\r\n    {{-1.0, +0.0}, {0.0, +pi_v<double>}, {true, false}},\r\n    {{-1.0, -0.0}, {0.0, -pi_v<double>}, {true, false}},\r\n\r\n#if !FP_PRESET_FAST\r\n    {{+0.0, +0.0}, {-double_inf, +0.0}, {true, true}},\r\n    {{+0.0, -0.0}, {-double_inf, -0.0}, {true, true}},\r\n    {{-0.0, +0.0}, {-double_inf, +pi_v<double>}, {true, false}},\r\n    {{-0.0, -0.0}, {-double_inf, -pi_v<double>}, {true, false}},\r\n    {{+double_inf, +0.0}, {+double_inf, +0.0}, {true, true}},\r\n    {{+double_inf, -0.0}, {+double_inf, -0.0}, {true, true}},\r\n    {{+double_inf, +1.0}, {+double_inf, +0.0}, {true, true}},\r\n    {{+double_inf, -1.0}, {+double_inf, -0.0}, {true, true}},\r\n    {{+double_inf, +double_inf}, {+double_inf, +pi_over_4_v<double>}, {true, false}},\r\n    {{+double_inf, -double_inf}, {+double_inf, -pi_over_4_v<double>}, {true, false}},\r\n    {{+1.0, +double_inf}, {+double_inf, +pi_over_2_v<double>}, {true, false}},\r\n    {{+1.0, -double_inf}, {+double_inf, -pi_over_2_v<double>}, {true, false}},\r\n    {{+0.0, +double_inf}, {+double_inf, +pi_over_2_v<double>}, {true, false}},\r\n    {{+0.0, -double_inf}, {+double_inf, -pi_over_2_v<double>}, {true, false}},\r\n    {{-0.0, +double_inf}, {+double_inf, +pi_over_2_v<double>}, {true, false}},\r\n    {{-0.0, -double_inf}, {+double_inf, -pi_over_2_v<double>}, {true, false}},\r\n    {{-1.0, +double_inf}, {+double_inf, +pi_over_2_v<double>}, {true, false}},\r\n    {{-1.0, -double_inf}, {+double_inf, -pi_over_2_v<double>}, {true, false}},\r\n    {{-double_inf, +double_inf}, {+double_inf, +pi_3_over_4_v<double>}, {true, false}},\r\n    {{-double_inf, -double_inf}, {+double_inf, -pi_3_over_4_v<double>}, {true, false}},\r\n    {{-double_inf, +1.0}, {+double_inf, +pi_v<double>}, {true, false}},\r\n    {{-double_inf, -1.0}, {+double_inf, -pi_v<double>}, {true, false}},\r\n    {{-double_inf, +0.0}, {+double_inf, +pi_v<double>}, {true, false}},\r\n    {{-double_inf, -0.0}, {+double_inf, -pi_v<double>}, {true, false}},\r\n    {{+double_inf, double_nan}, {+double_inf, double_nan}, {true, true}},\r\n    {{-double_inf, double_nan}, {+double_inf, double_nan}, {true, true}},\r\n    {{double_nan, +double_inf}, {+double_inf, double_nan}, {true, true}},\r\n    {{double_nan, -double_inf}, {+double_inf, double_nan}, {true, true}},\r\n    {{double_nan, +0.0}, {double_nan, double_nan}, {true, true}},\r\n    {{+0.0, double_nan}, {double_nan, double_nan}, {true, true}},\r\n    {{double_nan, double_nan}, {double_nan, double_nan}, {true, true}},\r\n#endif // !FP_PRESET_FAST\r\n\r\n    // abs(z) overflows\r\n    {{+0x1.fffffffffffffp+1023, +0x1.fffffffffffffp+1023}, {+0x1.63108c75a1936p+9, +0x1.921fb54442d18p-1}},\r\n    {{-0x1.bb67ae8584caap+1023, +0x1.0000000000000p+1023}, {+0x1.62e42fefa39efp+9, +0x1.4f1a6c638d03fp+1}},\r\n    {{+0x1.fffffffffffffp+1023, -0x0.0000000000001p-1022}, {+0x1.62e42fefa39efp+9, -0x0.0000000000000p-1022}},\r\n\r\n    // norm(z) overflows\r\n    {{-0x1.4e718d7d7625ap+664, -0x1.4e718d7d7625ap+665}, {+0x1.cd525d6474bb8p+8, -0x1.0468a8ace4df6p+1}},\r\n    {{+0x1.ca3d8e6d80cbbp+511, -0x1.57ae2ad22098cp+511}, {+0x1.6300e9ed15a44p+8, -0x1.4978fa3269ee1p-1}},\r\n\r\n#if !WITH_FP_ABRUPT_UNDERFLOW\r\n    // abs(z) underflows\r\n    {{-0x0.0000000000001p-1022, +0x0.0000000000001p-1022}, {-0x1.740bf7c0d927cp+9, +0x1.2d97c7f3321d2p+1}},\r\n    {{+0x0.0000000000001p-1022, +0x0.8000000000000p-1022}, {-0x1.628b76e3a7b61p+9, +0x1.921fb54442d16p+0}},\r\n#endif // !WITH_FP_ABRUPT_UNDERFLOW\r\n\r\n    // abs(z) close to underflow\r\n    {{+0x1.4p-1022, +0x1p-1022}, {-0x1.61f684c577299p+9, +0x1.5977a5103ea92p-1}},\r\n\r\n    // norm(z) underflows\r\n    {{+0x1.87e92154ef7acp-664, -0x1.87e92154ef7acp-665}, {-0x1.cbb65944f5e2bp+8, -0x1.dac670561bb4fp-2}},\r\n    {{-0x1.9be34ac46b18fp-513, -0x1.1297872d9cbb5p-512}, {-0x1.62991d5d62a5ep+8, -0x1.1b6e192ebbe44p+1}},\r\n\r\n    // z close to 1\r\n    {{+0x1.0000000000001p+0, -0.0}, {+0x1.fffffffffffffp-53, -0.0}, {false, true}},\r\n    {{+0x1.fffffffffffffp-1, +0.0}, {-0x1.0000000000000p-53, +0.0}, {false, true}},\r\n#if !WITH_FP_ABRUPT_UNDERFLOW\r\n    {{+0x1.0000000000001p+0, -0x0.0000000000001p-1022}, {+0x1.fffffffffffffp-53, -0x0.0000000000001p-1022}},\r\n    {{+0x1.0000000000000p+0, +0x0.0000000000001p-1022}, {+0x0.0000000000000p-1022, +0x0.0000000000001p-1022}},\r\n    {{+0x1.fffffffffffffp-1, -0x0.0000000000001p-1022}, {-0x1.0000000000000p-53, -0x0.0000000000001p-1022}},\r\n#endif // !WITH_FP_ABRUPT_UNDERFLOW\r\n    {{+0x1.0000000000001p+0, +0x1p-1022}, {+0x1.fffffffffffffp-53, +0x0.fffffffffffffp-1022}},\r\n    {{+0x1.0000000000000p+0, -0x1p-1022}, {+0x0.0000000000000p-1022, -0x1.0000000000000p-1022}},\r\n    {{+0x1.fffffffffffffp-1, +0x1p-1022}, {-0x1.0000000000000p-53, +0x1.0000000000001p-1022}},\r\n    {{+0x1.0000000000001p+0, -0x1p-52}, {+0x1.0000000000000p-52, -0x1.ffffffffffffep-53}},\r\n    {{+0x1.0000000000000p+0, +0x1p-52}, {+0x1.0000000000000p-105, +0x1.0000000000000p-52}},\r\n    {{+0x1.fffffffffffffp-1, -0x1p-52}, {-0x1.ffffffffffffep-54, -0x1.0000000000000p-52}},\r\n    {{+0x1.fffffffffffffp-1, +0x1p-26}, {+0x1.0000000000000p-107, +0x1.0000000000000p-26}},\r\n\r\n    // z close to -1, i, or -i\r\n    {{-0x1.0000000000001p+0, -0x1p-52}, {+0x1.0000000000000p-52, -0x1.921fb54442d18p+1}},\r\n    {{-0x1.0000000000000p+0, +0x1p-52}, {+0x1.0000000000000p-105, +0x1.921fb54442d18p+1}},\r\n    {{-0x1.fffffffffffffp-1, -0x1p-52}, {-0x1.ffffffffffffep-54, -0x1.921fb54442d18p+1}},\r\n    {{+0x1p-52, +0x1.0000000000001p+0}, {+0x1.0000000000000p-52, +0x1.921fb54442d17p+0}},\r\n    {{-0x1p-52, +0x1.0000000000000p+0}, {+0x1.0000000000000p-105, +0x1.921fb54442d19p+0}},\r\n    {{+0x1p-52, +0x1.fffffffffffffp-1}, {-0x1.ffffffffffffep-54, +0x1.921fb54442d17p+0}},\r\n    {{-0x1p-52, -0x1.0000000000001p+0}, {+0x1.0000000000000p-52, -0x1.921fb54442d19p+0}},\r\n    {{+0x1p-52, -0x1.0000000000000p+0}, {+0x1.0000000000000p-105, -0x1.921fb54442d17p+0}},\r\n    {{-0x1p-52, -0x1.fffffffffffffp-1}, {-0x1.ffffffffffffep-54, -0x1.921fb54442d19p+0}},\r\n\r\n    // abs(z) close to 1\r\n    {{+0x1.6a09e667f3bccp-1, +0x1.6a09e667f3bccp-1}, {-0x1.98d4d0da05571p-54, +0x1.921fb54442d18p-1}},\r\n    {{+0x1.6a09e667f3bcdp-1, -0x1.6a09e667f3bcdp-1}, {+0x1.3b3efbf5e2229p-54, -0x1.921fb54442d18p-1}},\r\n    {{-0x1.3333333333333p-1, -0x1.999999999999ap-1}, {+0x1.999999999999ap-56, -0x1.1b6e192ebbe44p+1}},\r\n    {{-0x1.3333333333333p-1, +0x1.9999999999999p-1}, {-0x1.3333333333333p-54, +0x1.1b6e192ebbe44p+1}},\r\n    {{+0x1.69fbe76c8b439p-1, +0x1.69fbe76c8b439p-1}, {-0x1.3cb7c059d6699p-13, +0x1.921fb54442d18p-1}},\r\n    {{-0x1.d89d89d89d89ep-1, +0x1.89d89d89d89d6p-2}, {-0x1.3b13b13b13b0cp-57, +0x1.5f97315254857p+1}},\r\n\r\n    // control flow edge cases\r\n    {{+0x1p-1, +0x1.fffffffffffffp-2}, {-0x1.62e42fefa39f0p-2, +0x1.921fb54442d18p-1}},\r\n    {{+0x1p-1, +0x1.0000000000000p-1}, {-0x1.62e42fefa39efp-2, +0x1.921fb54442d18p-1}},\r\n    {{+0x1p-1, +0x1.0000000000001p-1}, {-0x1.62e42fefa39edp-2, +0x1.921fb54442d19p-1}},\r\n    {{+0x1p-1, +0x1.a887293fd6f33p+0}, {+0x1.193ea7aad0309p-1, +0x1.4727f6d4d118cp+0}},\r\n    {{+0x1p-1, +0x1.a887293fd6f34p+0}, {+0x1.193ea7aad030ap-1, +0x1.4727f6d4d118dp+0}},\r\n    {{+0x1p-1, +0x1.a887293fd6f35p+0}, {+0x1.193ea7aad030cp-1, +0x1.4727f6d4d118dp+0}},\r\n    {{+6.703903964971297e+153, +6e+153}, {+0x1.627e0d1e7a85dp+8, +0x1.75c8a07421461p-1}},\r\n    {{+6.703903964971298e+153, +6e+153}, {+0x1.627e0d1e7a85dp+8, +0x1.75c8a07421461p-1}},\r\n    {{+1e-154, +1.4156865331029228e-146}, {-0x1.4fd46e5c84953p+8, +0x1.921fb525ec2fcp+0}},\r\n    {{+1e-154, +1.415686533102923e-146}, {-0x1.4fd46e5c84953p+8, +0x1.921fb525ec2fcp+0}},\r\n};\r\n\r\nconstexpr complex_unary_test_case<float> log_float_cases[] = {\r\n    // normal cases\r\n    {{+0x1.8p+0F, +0x1p+1F}, {+0x1.d52410p-1F, +0x1.dac670p-1F}},\r\n    {{+0x1.8p+0F, -0x1p+1F}, {+0x1.d52410p-1F, -0x1.dac670p-1F}},\r\n    {{-0x1.8p+0F, +0x1p+1F}, {+0x1.d52410p-1F, +0x1.1b6e1ap+1F}},\r\n    {{-0x1.8p+0F, -0x1p+1F}, {+0x1.d52410p-1F, -0x1.1b6e1ap+1F}},\r\n    {{+0x1.8p-1F, +0x1p+0F}, {+0x1.c8ff7cp-3F, +0x1.dac670p-1F}},\r\n    {{+0x1.8p-1F, -0x1p+0F}, {+0x1.c8ff7cp-3F, -0x1.dac670p-1F}},\r\n    {{-0x1.8p-1F, +0x1p+0F}, {+0x1.c8ff7cp-3F, +0x1.1b6e1ap+1F}},\r\n    {{-0x1.8p-1F, -0x1p+0F}, {+0x1.c8ff7cp-3F, -0x1.1b6e1ap+1F}},\r\n    {{+0x1.8p-2F, +0x1p-1F}, {-0x1.e148a2p-2F, +0x1.dac670p-1F}},\r\n    {{+0x1.8p-2F, -0x1p-1F}, {-0x1.e148a2p-2F, -0x1.dac670p-1F}},\r\n    {{-0x1.8p-2F, +0x1p-1F}, {-0x1.e148a2p-2F, +0x1.1b6e1ap+1F}},\r\n    {{-0x1.8p-2F, -0x1p-1F}, {-0x1.e148a2p-2F, -0x1.1b6e1ap+1F}},\r\n\r\n    // special cases\r\n    {{+1.0F, +0.0F}, {0.0F, +0.0F}, {true, true}},\r\n    {{+1.0F, -0.0F}, {0.0F, -0.0F}, {true, true}},\r\n    {{+0.0F, +1.0F}, {0.0F, +pi_over_2_v<float>}, {true, false}},\r\n    {{+0.0F, -1.0F}, {0.0F, -pi_over_2_v<float>}, {true, false}},\r\n    {{-0.0F, +1.0F}, {0.0F, +pi_over_2_v<float>}, {true, false}},\r\n    {{-0.0F, -1.0F}, {0.0F, -pi_over_2_v<float>}, {true, false}},\r\n    {{-1.0F, +0.0F}, {0.0F, +pi_v<float>}, {true, false}},\r\n    {{-1.0F, -0.0F}, {0.0F, -pi_v<float>}, {true, false}},\r\n\r\n#if !FP_PRESET_FAST\r\n    {{+0.0F, +0.0F}, {-float_inf, +0.0F}, {true, true}},\r\n    {{+0.0F, -0.0F}, {-float_inf, -0.0F}, {true, true}},\r\n    {{-0.0F, +0.0F}, {-float_inf, +pi_v<float>}, {true, false}},\r\n    {{-0.0F, -0.0F}, {-float_inf, -pi_v<float>}, {true, false}},\r\n    {{+float_inf, +0.0F}, {+float_inf, +0.0F}, {true, true}},\r\n    {{+float_inf, -0.0F}, {+float_inf, -0.0F}, {true, true}},\r\n    {{+float_inf, +1.0F}, {+float_inf, +0.0F}, {true, true}},\r\n    {{+float_inf, -1.0F}, {+float_inf, -0.0F}, {true, true}},\r\n    {{+float_inf, +float_inf}, {+float_inf, +pi_over_4_v<float>}, {true, false}},\r\n    {{+float_inf, -float_inf}, {+float_inf, -pi_over_4_v<float>}, {true, false}},\r\n    {{+1.0F, +float_inf}, {+float_inf, +pi_over_2_v<float>}, {true, false}},\r\n    {{+1.0F, -float_inf}, {+float_inf, -pi_over_2_v<float>}, {true, false}},\r\n    {{+0.0F, +float_inf}, {+float_inf, +pi_over_2_v<float>}, {true, false}},\r\n    {{+0.0F, -float_inf}, {+float_inf, -pi_over_2_v<float>}, {true, false}},\r\n    {{-0.0F, +float_inf}, {+float_inf, +pi_over_2_v<float>}, {true, false}},\r\n    {{-0.0F, -float_inf}, {+float_inf, -pi_over_2_v<float>}, {true, false}},\r\n    {{-1.0F, +float_inf}, {+float_inf, +pi_over_2_v<float>}, {true, false}},\r\n    {{-1.0F, -float_inf}, {+float_inf, -pi_over_2_v<float>}, {true, false}},\r\n    {{-float_inf, +float_inf}, {+float_inf, +pi_3_over_4_v<float>}, {true, false}},\r\n    {{-float_inf, -float_inf}, {+float_inf, -pi_3_over_4_v<float>}, {true, false}},\r\n    {{-float_inf, +1.0F}, {+float_inf, +pi_v<float>}, {true, false}},\r\n    {{-float_inf, -1.0F}, {+float_inf, -pi_v<float>}, {true, false}},\r\n    {{-float_inf, +0.0F}, {+float_inf, +pi_v<float>}, {true, false}},\r\n    {{-float_inf, -0.0F}, {+float_inf, -pi_v<float>}, {true, false}},\r\n    {{+float_inf, float_nan}, {+float_inf, float_nan}, {true, true}},\r\n    {{-float_inf, float_nan}, {+float_inf, float_nan}, {true, true}},\r\n    {{float_nan, +float_inf}, {+float_inf, float_nan}, {true, true}},\r\n    {{float_nan, -float_inf}, {+float_inf, float_nan}, {true, true}},\r\n    {{float_nan, +0.0F}, {float_nan, float_nan}, {true, true}},\r\n    {{+0.0F, float_nan}, {float_nan, float_nan}, {true, true}},\r\n    {{float_nan, float_nan}, {float_nan, float_nan}, {true, true}},\r\n#endif // !FP_PRESET_FAST\r\n\r\n    // abs(z) overflows\r\n    {{+0x1.fffffep+127F, +0x1.fffffep+127F}, {+0x1.644714p+6F, +0x1.921fb6p-1F}},\r\n    {{-0x1.bb67aep+127F, +0x1.000000p+127F}, {+0x1.62e430p+6F, +0x1.4f1a6cp+1F}},\r\n    {{+0x1.fffffep+127F, -0x0.000002p-126F}, {+0x1.62e430p+6F, -0x0.000000p-126F}},\r\n\r\n    // norm(z) overflows\r\n    {{-0x1.08b2a2p+83F, -0x1.08b2a2p+84F}, {+0x1.d2f46cp+5F, -0x1.0468a8p+1F}},\r\n    {{+0x1.bc16d6p+63F, -0x1.4d1120p+63F}, {+0x1.6389c2p+5F, -0x1.4978fap-1F}},\r\n\r\n#if !WITH_FP_ABRUPT_UNDERFLOW\r\n    // abs(z) underflows\r\n    {{-0x0.000002p-126F, +0x0.000002p-126F}, {-0x1.9bbabcp+6F, +0x1.2d97c8p+1F}},\r\n    {{+0x0.000002p-126F, +0x0.800000p-126F}, {-0x1.601e68p+6F, +0x1.921fb2p+0F}},\r\n#endif // !WITH_FP_ABRUPT_UNDERFLOW\r\n\r\n    // abs(z) close to underflow\r\n    {{+0x1.4p-126F, +0x1p-126F}, {-0x1.5b76d6p+6F, +0x1.5977a6p-1F}},\r\n\r\n    // norm(z) underflows\r\n    {{+0x1.ef2d10p-83F, -0x1.ef2d10p-84F}, {-0x1.c6144ap+5F, -0x1.dac670p-2F}},\r\n    {{-0x1.622d70p-61F, -0x1.d83c94p-61F}, {-0x1.4b9280p+5F, -0x1.1b6e1ap+1F}},\r\n\r\n    // z close to 1\r\n    {{+0x1.000002p+0F, -0.0F}, {+0x1.fffffep-24F, -0.0F}, {false, true}},\r\n    {{+0x1.fffffep-1F, +0.0F}, {-0x1.000000p-24F, +0.0F}, {false, true}},\r\n#if !WITH_FP_ABRUPT_UNDERFLOW\r\n    {{+0x1.000002p+0F, -0x0.000002p-126F}, {+0x1.fffffep-24F, -0x0.000002p-126F}},\r\n    {{+0x1.000000p+0F, +0x0.000002p-126F}, {+0x0.000000p-126F, +0x0.000002p-126F}},\r\n    {{+0x1.fffffep-1F, -0x0.000002p-126F}, {-0x1.000000p-24F, -0x0.000002p-126F}},\r\n#endif // !WITH_FP_ABRUPT_UNDERFLOW\r\n    {{+0x1.000002p+0F, +0x1.000000p-126F}, {+0x1.fffffep-24F, +0x0.fffffep-126F}},\r\n    {{+0x1.000000p+0F, -0x1.000000p-126F}, {+0x0.000000p+0F, -0x1.000000p-126F}},\r\n    {{+0x1.fffffep-1F, +0x1.000000p-126F}, {-0x1.000000p-24F, +0x1.000002p-126F}},\r\n    {{+0x1.000002p+0F, -0x1.000000p-23F}, {+0x1.000000p-23F, -0x1.fffffcp-24F}},\r\n    {{+0x1.000000p+0F, +0x1.000000p-23F}, {+0x1.000000p-47F, +0x1.000000p-23F}},\r\n    {{+0x1.fffffep-1F, -0x1.000000p-23F}, {-0x1.fffffcp-25F, -0x1.000000p-23F}},\r\n    {{+0x1.fffffep-1F, +0x1.6a09e6p-12F}, {-0x1.302ae0p-52F, +0x1.6a09e6p-12F}},\r\n\r\n    // z close to -1, i, or -i\r\n    {{-0x1.000002p+0F, -0x1.000000p-23F}, {+0x1.000000p-23F, -0x1.921fb4p+1F}},\r\n    {{-0x1.000000p+0F, +0x1.000000p-23F}, {+0x1.000000p-47F, +0x1.921fb4p+1F}},\r\n    {{-0x1.fffffep-1F, -0x1.000000p-23F}, {-0x1.fffffcp-25F, -0x1.921fb4p+1F}},\r\n    {{+0x1.000000p-23F, +0x1.000002p+0F}, {+0x1.000000p-23F, +0x1.921fb4p+0F}},\r\n    {{-0x1.000000p-23F, +0x1.000000p+0F}, {+0x1.000000p-47F, +0x1.921fb8p+0F}},\r\n    {{+0x1.000000p-23F, +0x1.fffffep-1F}, {-0x1.fffffcp-25F, +0x1.921fb4p+0F}},\r\n    {{-0x1.000000p-23F, -0x1.000002p+0F}, {+0x1.000000p-23F, -0x1.921fb8p+0F}},\r\n    {{+0x1.000000p-23F, -0x1.000000p+0F}, {+0x1.000000p-47F, -0x1.921fb4p+0F}},\r\n    {{-0x1.000000p-23F, -0x1.fffffep-1F}, {-0x1.fffffcp-25F, -0x1.921fb8p+0F}},\r\n\r\n    // abs(z) close to 1\r\n    {{+0x1.6a09e6p-1F, +0x1.6a09e6p-1F}, {-0x1.26055cp-26F, +0x1.921fb6p-1F}},\r\n    {{+0x1.6a09e8p-1F, -0x1.6a09e8p-1F}, {+0x1.20888ep-24F, -0x1.921fb6p-1F}},\r\n    {{-0x1.333334p-1F, -0x1.99999ap-1F}, {+0x1.99999ap-26F, -0x1.1b6e1ap+1F}},\r\n    {{-0x1.333332p-1F, +0x1.99999ap-1F}, {-0x1.999998p-27F, +0x1.1b6e18p+1F}},\r\n    {{+0x1.69fbe8p-1F, +0x1.69fbe8p-1F}, {-0x1.3caab8p-13F, +0x1.921fb6p-1F}},\r\n    {{-0x1.d89d8ap-1F, +0x1.89d89ep-2F}, {+0x1.d89d8ap-28F, +0x1.5f9732p+1F}},\r\n\r\n    // control flow edge cases\r\n    {{+0x1p-1F, +0x1.fffffep-2F}, {-0x1.62e432p-2F, +0x1.921fb4p-1F}},\r\n    {{+0x1p-1F, +0x1.000000p-1F}, {-0x1.62e430p-2F, +0x1.921fb6p-1F}},\r\n    {{+0x1p-1F, +0x1.000002p-1F}, {-0x1.62e42cp-2F, +0x1.921fb8p-1F}},\r\n    {{+0x1p-1F, +0x1.a88728p+0F}, {+0x1.193ea6p-1F, +0x1.4727f6p+0F}},\r\n    {{+0x1p-1F, +0x1.a8872ap+0F}, {+0x1.193ea8p-1F, +0x1.4727f6p+0F}},\r\n    {{+0x1p-1F, +0x1.a8872cp+0F}, {+0x1.193eaap-1F, +0x1.4727f8p+0F}},\r\n    {{+9.223371e+18F, +9e+18F}, {+0x1.60059cp+5F, +0x1.8bd930p-1F}},\r\n    {{+9.2233715e+18F, +9e+18F}, {+0x1.60059cp+5F, +0x1.8bd930p-1F}},\r\n    {{+7e-20F, +4.440892e-16F}, {-0x1.1acdd6p+5F, +0x1.921560p+0F}},\r\n    {{+7e-20F, +4.4408926e-16F}, {-0x1.1acdd6p+5F, +0x1.921560p+0F}},\r\n};\r\n"
  },
  {
    "path": "tests/std/tests/GH_000935_complex_numerical_accuracy/sqrt_test_cases.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <complex>\r\n\r\n#include \"floating_point_utils.hpp\"\r\n#include \"test.hpp\"\r\n\r\nconstexpr complex_unary_test_case<double> sqrt_double_cases[] = {\r\n    // normal cases\r\n    {{+0x3p-0, +0x4p-0}, {+0x2p-0, +0x1p-0}},\r\n    {{+0x3p-0, -0x4p-0}, {+0x2p-0, -0x1p-0}},\r\n    {{-0x3p-0, +0x4p-0}, {+0x1p-0, +0x2p-0}},\r\n    {{-0x3p-0, -0x4p-0}, {+0x1p-0, -0x2p-0}},\r\n    {{+0x3p-2, +0x4p-2}, {+0x2p-1, +0x1p-1}},\r\n    {{+0x3p-2, -0x4p-2}, {+0x2p-1, -0x1p-1}},\r\n    {{-0x3p-2, +0x4p-2}, {+0x1p-1, +0x2p-1}},\r\n    {{-0x3p-2, -0x4p-2}, {+0x1p-1, -0x2p-1}},\r\n    {{+0x3p-4, +0x4p-4}, {+0x2p-2, +0x1p-2}},\r\n    {{+0x3p-4, -0x4p-4}, {+0x2p-2, -0x1p-2}},\r\n    {{-0x3p-4, +0x4p-4}, {+0x1p-2, +0x2p-2}},\r\n    {{-0x3p-4, -0x4p-4}, {+0x1p-2, -0x2p-2}},\r\n\r\n    // special cases\r\n    {{+0.0, +0.0}, {+0.0, +0.0}, {true, true}},\r\n    {{+0.0, -0.0}, {+0.0, -0.0}, {true, true}},\r\n    {{-0.0, +0.0}, {+0.0, +0.0}, {true, true}},\r\n    {{-0.0, -0.0}, {+0.0, -0.0}, {true, true}},\r\n    {{+1.0, +0.0}, {+1.0, +0.0}, {false, true}},\r\n    {{+1.0, -0.0}, {+1.0, -0.0}, {false, true}},\r\n    {{-1.0, +0.0}, {+0.0, +1.0}, {true, false}},\r\n    {{-1.0, -0.0}, {+0.0, -1.0}, {true, false}},\r\n    {{+0.0, +1.0}, {+0x1.6a09e667f3bcdp-1, +0x1.6a09e667f3bcdp-1}},\r\n    {{+0.0, -1.0}, {+0x1.6a09e667f3bcdp-1, -0x1.6a09e667f3bcdp-1}},\r\n    {{-0.0, +1.0}, {+0x1.6a09e667f3bcdp-1, +0x1.6a09e667f3bcdp-1}},\r\n    {{-0.0, -1.0}, {+0x1.6a09e667f3bcdp-1, -0x1.6a09e667f3bcdp-1}},\r\n\r\n#if !FP_PRESET_FAST\r\n    {{+double_inf, +0.0}, {+double_inf, +0.0}, {true, true}},\r\n    {{+double_inf, -0.0}, {+double_inf, -0.0}, {true, true}},\r\n    {{-double_inf, +0.0}, {+0.0, +double_inf}, {true, true}},\r\n    {{-double_inf, -0.0}, {+0.0, -double_inf}, {true, true}},\r\n    {{+double_inf, +1.0}, {+double_inf, +0.0}, {true, true}},\r\n    {{+double_inf, -1.0}, {+double_inf, -0.0}, {true, true}},\r\n    {{-double_inf, +1.0}, {+0.0, +double_inf}, {true, true}},\r\n    {{-double_inf, -1.0}, {+0.0, -double_inf}, {true, true}},\r\n    {{+double_inf, +double_inf}, {+double_inf, +double_inf}, {true, true}},\r\n    {{+double_inf, -double_inf}, {+double_inf, -double_inf}, {true, true}},\r\n    {{-double_inf, +double_inf}, {+double_inf, +double_inf}, {true, true}},\r\n    {{-double_inf, -double_inf}, {+double_inf, -double_inf}, {true, true}},\r\n    {{+1.0, +double_inf}, {+double_inf, +double_inf}, {true, true}},\r\n    {{+1.0, -double_inf}, {+double_inf, -double_inf}, {true, true}},\r\n    {{-1.0, +double_inf}, {+double_inf, +double_inf}, {true, true}},\r\n    {{-1.0, -double_inf}, {+double_inf, -double_inf}, {true, true}},\r\n    {{+0.0, +double_inf}, {+double_inf, +double_inf}, {true, true}},\r\n    {{+0.0, -double_inf}, {+double_inf, -double_inf}, {true, true}},\r\n    {{-0.0, +double_inf}, {+double_inf, +double_inf}, {true, true}},\r\n    {{-0.0, -double_inf}, {+double_inf, -double_inf}, {true, true}},\r\n    {{+double_inf, +double_nan}, {+double_inf, +double_nan}, {true, true}},\r\n    {{+double_inf, -double_nan}, {+double_inf, -double_nan}, {true, true}},\r\n    {{-double_inf, +double_nan}, {+double_nan, +double_inf}, {true, true}},\r\n    {{-double_inf, -double_nan}, {+double_nan, -double_inf}, {true, true}},\r\n    {{+double_nan, +double_inf}, {+double_inf, +double_inf}, {true, true}},\r\n    {{+double_nan, -double_inf}, {+double_inf, -double_inf}, {true, true}},\r\n    {{+double_nan, +0.0}, {+double_nan, +double_nan}, {true, true}},\r\n    {{+double_nan, -0.0}, {+double_nan, -double_nan}, {true, true}},\r\n    {{+0.0, +double_nan}, {+double_nan, +double_nan}, {true, true}},\r\n    {{+0.0, -double_nan}, {+double_nan, -double_nan}, {true, true}},\r\n    {{+double_nan, +double_nan}, {+double_nan, +double_nan}, {true, true}},\r\n    {{+double_nan, -double_nan}, {+double_nan, -double_nan}, {true, true}},\r\n#endif // !FP_PRESET_FAST\r\n\r\n    // abs(z) overflows\r\n    {{+0x1.fffffffffffffp+1023, +0x1.fffffffffffffp+1023}, {+0x1.19435caffa9f8p+512, +0x1.d203138f6c828p+510}},\r\n    {{-0x1.bb67ae8584caap+1023, +0x1.0000000000000p+1023}, {+0x1.0907dc1930691p+510, +0x1.ee8dd4748bf15p+511}},\r\n    {{+0x1.fffffffffffffp+1023, -0x0.0000000000001p-1022}, {+0x1.fffffffffffffp+511, -0x0.0000000000000p-1022}},\r\n\r\n    // norm(z) overflows\r\n    {{-0x1.4e718d7d7625ap+664, -0x1.4e718d7d7625ap+665}, {+0x1.cc1033be914a7p+331, -0x1.7432f2f528ea0p+332}},\r\n    {{+0x1.ca3d8e6d80cbbp+511, -0x1.57ae2ad22098cp+511}, {+0x1.00e0ed3ec75c3p+256, -0x1.56813c53b47afp+254}},\r\n\r\n#if !WITH_FP_ABRUPT_UNDERFLOW\r\n    // abs(z) underflows\r\n    {{-0x0.0000000000001p-1022, +0x0.0000000000001p-1022}, {+0x1.d203138f6c828p-539, +0x1.19435caffa9f9p-537}},\r\n    {{+0x0.0000000000001p-1022, +0x0.8000000000000p-1022}, {+0x1.0000000000001p-512, +0x1.ffffffffffffep-513}},\r\n#endif // !WITH_FP_ABRUPT_UNDERFLOW\r\n\r\n    // abs(z) close to underflow\r\n    {{+0x1.4p-1022, +0x1p-1022}, {+0x1.31a33f3eb2fd9p-511, +0x1.acd8ff10ebe7ep-513}},\r\n\r\n    // norm(z) underflows\r\n    {{+0x1.87e92154ef7acp-664, -0x1.87e92154ef7acp-665}, {+0x1.45f5e3f782563p-332, -0x1.33cb9c4327c54p-334}},\r\n    {{-0x1.9be34ac46b18fp-513, -0x1.1297872d9cbb5p-512}, {+0x1.09220ecd9c241p-257, -0x1.09220ecd9c241p-256}},\r\n\r\n    // control flow edge cases\r\n    {{+0x1p-2, +0x1.fffffffffffffp-1}, {+0x1.99b96593b936dp-1, +0x1.3fe72a921c6f4p-1}},\r\n    {{+0x1p-2, +0x1.0000000000000p+0}, {+0x1.99b96593b936ep-1, +0x1.3fe72a921c6f4p-1}},\r\n    {{+0x1p-2, +0x1.0000000000001p+0}, {+0x1.99b96593b936ep-1, +0x1.3fe72a921c6f5p-1}},\r\n    {{+0x1p+0, +0x1p-54}, {+0x1.0000000000000p+0, +0x1.0000000000000p-55}},\r\n    {{+0x1p+0, +0x1p-53}, {+0x1.0000000000000p+0, +0x1.0000000000000p-54}},\r\n    {{+0x1p+0, +0x1p-52}, {+0x1.0000000000000p+0, +0x1.0000000000000p-53}},\r\n    {{+0x1p+0, +0x1.ffffffffffffep-2}, {+0x1.077225f1da572p+0, +0x1.f18773c56f720p-3}},\r\n    {{+0x1p+0, +0x1.fffffffffffffp-2}, {+0x1.077225f1da572p+0, +0x1.f18773c56f721p-3}},\r\n    {{+0x1p+0, +0x1.0000000000000p-1}, {+0x1.077225f1da572p+0, +0x1.f18773c56f721p-3}},\r\n    {{+0x1p+0, +0x1.0000000000001p-1}, {+0x1.077225f1da572p+0, +0x1.f18773c56f723p-3}},\r\n    {{+0x1.ffffffffffffep-970, +0x1.fffffffffffffp-970}, {+0x1.8dc42193d5c02p-485, +0x1.49852f983efddp-486}},\r\n    {{+0x1.fffffffffffffp-970, +0x1.0000000000000p-969}, {+0x1.8dc42193d5c02p-485, +0x1.49852f983efdep-486}},\r\n    {{+0x1.0000000000000p-969, +0x1.0000000000001p-969}, {+0x1.8dc42193d5c03p-485, +0x1.49852f983efdep-486}},\r\n    {{+0x1.ffffffffffffep-971, +0x1.fffffffffffffp-970}, {+0x1.45a3146a88455p-485, +0x1.92826ef258d1bp-486}},\r\n    {{+0x1.fffffffffffffp-971, +0x1.0000000000000p-969}, {+0x1.45a3146a88456p-485, +0x1.92826ef258d1bp-486}},\r\n    {{+0x1.0000000000000p-970, +0x1.0000000000001p-969}, {+0x1.45a3146a88456p-485, +0x1.92826ef258d1cp-486}},\r\n    {{+0x1.fffffffffffffp-971, +0x1.fffffffffffffp-970}, {+0x1.45a3146a88456p-485, +0x1.92826ef258d1bp-486}},\r\n    {{+0x1.0000000000000p-970, +0x1.0000000000000p-969}, {+0x1.45a3146a88456p-485, +0x1.92826ef258d1bp-486}},\r\n    {{+0x1.0000000000001p-970, +0x1.0000000000001p-969}, {+0x1.45a3146a88457p-485, +0x1.92826ef258d1cp-486}},\r\n    {{+0x1.0000000000000p-970, +0x1.fffffffffffffp-970}, {+0x1.45a3146a88456p-485, +0x1.92826ef258d1bp-486}},\r\n    {{+0x1.0000000000001p-970, +0x1.0000000000000p-969}, {+0x1.45a3146a88456p-485, +0x1.92826ef258d1bp-486}},\r\n    {{+0x1.0000000000002p-970, +0x1.0000000000001p-969}, {+0x1.45a3146a88457p-485, +0x1.92826ef258d1cp-486}},\r\n    {{+0x1p-1022, +0x1.fffffffffffffp-970}, {+0x1.0000000000000p-485, +0x1.fffffffffffffp-486}},\r\n    {{+0x1p-1022, +0x1.0000000000000p-969}, {+0x1.0000000000000p-485, +0x1.0000000000000p-485}},\r\n    {{+0x1p-1022, +0x1.0000000000001p-969}, {+0x1.0000000000001p-485, +0x1.0000000000000p-485}},\r\n\r\n#if !WITH_FP_ABRUPT_UNDERFLOW\r\n    {{+0x0.0000000000001p-1022, +0x1.fffffffffffffp-970}, {+0x1.0000000000000p-485, +0x1.fffffffffffffp-486}},\r\n    {{+0x0.0000000000001p-1022, +0x1.0000000000000p-969}, {+0x1.0000000000000p-485, +0x1.0000000000000p-485}},\r\n    {{+0x0.0000000000001p-1022, +0x1.0000000000001p-969}, {+0x1.0000000000001p-485, +0x1.0000000000000p-485}},\r\n#endif // !WITH_FP_ABRUPT_UNDERFLOW\r\n};\r\n\r\nconstexpr complex_unary_test_case<float> sqrt_float_cases[] = {\r\n    // normal cases\r\n    {{+0x3p-0F, +0x4p-0F}, {+0x2p-0F, +0x1p-0F}},\r\n    {{+0x3p-0F, -0x4p-0F}, {+0x2p-0F, -0x1p-0F}},\r\n    {{-0x3p-0F, +0x4p-0F}, {+0x1p-0F, +0x2p-0F}},\r\n    {{-0x3p-0F, -0x4p-0F}, {+0x1p-0F, -0x2p-0F}},\r\n    {{+0x3p-2F, +0x4p-2F}, {+0x2p-1F, +0x1p-1F}},\r\n    {{+0x3p-2F, -0x4p-2F}, {+0x2p-1F, -0x1p-1F}},\r\n    {{-0x3p-2F, +0x4p-2F}, {+0x1p-1F, +0x2p-1F}},\r\n    {{-0x3p-2F, -0x4p-2F}, {+0x1p-1F, -0x2p-1F}},\r\n    {{+0x3p-4F, +0x4p-4F}, {+0x2p-2F, +0x1p-2F}},\r\n    {{+0x3p-4F, -0x4p-4F}, {+0x2p-2F, -0x1p-2F}},\r\n    {{-0x3p-4F, +0x4p-4F}, {+0x1p-2F, +0x2p-2F}},\r\n    {{-0x3p-4F, -0x4p-4F}, {+0x1p-2F, -0x2p-2F}},\r\n\r\n    // special cases\r\n    {{+0.0F, +0.0F}, {+0.0F, +0.0F}, {true, true}},\r\n    {{+0.0F, -0.0F}, {+0.0F, -0.0F}, {true, true}},\r\n    {{-0.0F, +0.0F}, {+0.0F, +0.0F}, {true, true}},\r\n    {{-0.0F, -0.0F}, {+0.0F, -0.0F}, {true, true}},\r\n    {{+1.0F, +0.0F}, {+1.0F, +0.0F}, {false, true}},\r\n    {{+1.0F, -0.0F}, {+1.0F, -0.0F}, {false, true}},\r\n    {{-1.0F, +0.0F}, {+0.0F, +1.0F}, {true, false}},\r\n    {{-1.0F, -0.0F}, {+0.0F, -1.0F}, {true, false}},\r\n    {{+0.0F, +1.0F}, {+0x1.6a09e6p-1F, +0x1.6a09e6p-1F}},\r\n    {{+0.0F, -1.0F}, {+0x1.6a09e6p-1F, -0x1.6a09e6p-1F}},\r\n    {{-0.0F, +1.0F}, {+0x1.6a09e6p-1F, +0x1.6a09e6p-1F}},\r\n    {{-0.0F, -1.0F}, {+0x1.6a09e6p-1F, -0x1.6a09e6p-1F}},\r\n\r\n#if !FP_PRESET_FAST\r\n    {{+float_inf, +0.0F}, {+float_inf, +0.0F}, {true, true}},\r\n    {{+float_inf, -0.0F}, {+float_inf, -0.0F}, {true, true}},\r\n    {{-float_inf, +0.0F}, {+0.0F, +float_inf}, {true, true}},\r\n    {{-float_inf, -0.0F}, {+0.0F, -float_inf}, {true, true}},\r\n    {{+float_inf, +1.0F}, {+float_inf, +0.0F}, {true, true}},\r\n    {{+float_inf, -1.0F}, {+float_inf, -0.0F}, {true, true}},\r\n    {{-float_inf, +1.0F}, {+0.0F, +float_inf}, {true, true}},\r\n    {{-float_inf, -1.0F}, {+0.0F, -float_inf}, {true, true}},\r\n    {{+float_inf, +float_inf}, {+float_inf, +float_inf}, {true, true}},\r\n    {{+float_inf, -float_inf}, {+float_inf, -float_inf}, {true, true}},\r\n    {{-float_inf, +float_inf}, {+float_inf, +float_inf}, {true, true}},\r\n    {{-float_inf, -float_inf}, {+float_inf, -float_inf}, {true, true}},\r\n    {{+1.0F, +float_inf}, {+float_inf, +float_inf}, {true, true}},\r\n    {{+1.0F, -float_inf}, {+float_inf, -float_inf}, {true, true}},\r\n    {{-1.0F, +float_inf}, {+float_inf, +float_inf}, {true, true}},\r\n    {{-1.0F, -float_inf}, {+float_inf, -float_inf}, {true, true}},\r\n    {{+0.0F, +float_inf}, {+float_inf, +float_inf}, {true, true}},\r\n    {{+0.0F, -float_inf}, {+float_inf, -float_inf}, {true, true}},\r\n    {{-0.0F, +float_inf}, {+float_inf, +float_inf}, {true, true}},\r\n    {{-0.0F, -float_inf}, {+float_inf, -float_inf}, {true, true}},\r\n    {{+float_inf, +float_nan}, {+float_inf, +float_nan}, {true, true}},\r\n    {{+float_inf, -float_nan}, {+float_inf, -float_nan}, {true, true}},\r\n    {{-float_inf, +float_nan}, {+float_nan, +float_inf}, {true, true}},\r\n    {{-float_inf, -float_nan}, {+float_nan, -float_inf}, {true, true}},\r\n    {{+float_nan, +float_inf}, {+float_inf, +float_inf}, {true, true}},\r\n    {{+float_nan, -float_inf}, {+float_inf, -float_inf}, {true, true}},\r\n    {{+float_nan, +0.0}, {+float_nan, +float_nan}, {true, true}},\r\n    {{+float_nan, -0.0}, {+float_nan, -float_nan}, {true, true}},\r\n    {{+0.0, +float_nan}, {+float_nan, +float_nan}, {true, true}},\r\n    {{+0.0, -float_nan}, {+float_nan, -float_nan}, {true, true}},\r\n    {{+float_nan, +float_nan}, {+float_nan, +float_nan}, {true, true}},\r\n    {{+float_nan, -float_nan}, {+float_nan, -float_nan}, {true, true}},\r\n#endif // !FP_PRESET_FAST\r\n\r\n    // abs(z) overflows\r\n    {{+0x1.fffffep+127F, +0x1.fffffep+127F}, {+0x1.19435cp+64F, +0x1.d20312p+62F}},\r\n    {{-0x1.bb67aep+127F, +0x1.000000p+127F}, {+0x1.0907dcp+62F, +0x1.ee8dd4p+63F}},\r\n    {{+0x1.fffffep+127F, -0x0.000002p-126F}, {+0x1.fffffep+63F, -0x0.000000p-126F}},\r\n\r\n    // norm(z) overflows\r\n    {{-0x1.08b2a2p+83F, -0x1.08b2a2p+84F}, {+0x1.216970p+41F, -0x1.d4473ap+41F}},\r\n    {{+0x1.bc16d6p+63F, -0x1.4d1120p+63F}, {+0x1.f9c31ep+31F, -0x1.512cbep+30F}},\r\n\r\n#if !WITH_FP_ABRUPT_UNDERFLOW\r\n    // abs(z) underflows\r\n    {{-0x0.000002p-126F, +0x0.000002p-126F}, {+0x1.498530p-76F, +0x1.8dc422p-75F}},\r\n    {{+0x0.000002p-126F, +0x0.800000p-126F}, {+0x1.000002p-64F, +0x1.fffffcp-65F}},\r\n#endif // !WITH_FP_ABRUPT_UNDERFLOW\r\n\r\n    // abs(z) close to underflow\r\n    {{+0x1.4p-126F, +0x1p-126F}, {+0x1.31a340p-63F, +0x1.acd900p-65F}},\r\n\r\n    // norm(z) underflows\r\n    {{+0x1.ef2d1p-83F, -0x1.ef2d10p-84F}, {+0x1.0314d8p-41F, -0x1.e9495ep-44F}},\r\n    {{-0x1.622d7p-61F, -0x1.d83c94p-61F}, {+0x1.ebb76ep-32F, -0x1.ebb770p-31F}},\r\n\r\n    // control flow edge cases\r\n    {{+0x1p-2F, +0x1.fffffep-1F}, {+0x1.99b964p-1F, +0x1.3fe72ap-1F}},\r\n    {{+0x1p-2F, +0x1.000000p+0F}, {+0x1.99b966p-1F, +0x1.3fe72ap-1F}},\r\n    {{+0x1p-2F, +0x1.000002p+0F}, {+0x1.99b966p-1F, +0x1.3fe72cp-1F}},\r\n    {{+0x1p+0F, +0x1p-25F}, {+0x1.000000p+0F, +0x1.000000p-26F}},\r\n    {{+0x1p+0F, +0x1p-24F}, {+0x1.000000p+0F, +0x1.000000p-25F}},\r\n    {{+0x1p+0F, +0x1p-23F}, {+0x1.000000p+0F, +0x1.000000p-24F}},\r\n    {{+0x1p+0F, +0x1.fffffcp-2F}, {+0x1.077226p+0F, +0x1.f18770p-3F}},\r\n    {{+0x1p+0F, +0x1.fffffep-2F}, {+0x1.077226p+0F, +0x1.f18772p-3F}},\r\n    {{+0x1p+0F, +0x1.000000p-1F}, {+0x1.077226p+0F, +0x1.f18774p-3F}},\r\n    {{+0x1p+0F, +0x1.000002p-1F}, {+0x1.077226p+0F, +0x1.f18778p-3F}},\r\n    {{+0x1.fffffcp-103F, +0x1.fffffep-103F}, {+0x1.19435cp-51F, +0x1.d20314p-53F}},\r\n    {{+0x1.fffffep-103F, +0x1.000000p-102F}, {+0x1.19435cp-51F, +0x1.d20314p-53F}},\r\n    {{+0x1.000000p-102F, +0x1.000002p-102F}, {+0x1.19435ep-51F, +0x1.d20316p-53F}},\r\n    {{+0x1.fffffcp-104F, +0x1.fffffep-103F}, {+0x1.cc8532p-52F, +0x1.1c9e00p-52F}},\r\n    {{+0x1.fffffep-104F, +0x1.000000p-102F}, {+0x1.cc8532p-52F, +0x1.1c9e02p-52F}},\r\n    {{+0x1.000000p-103F, +0x1.000002p-102F}, {+0x1.cc8534p-52F, +0x1.1c9e02p-52F}},\r\n    {{+0x1.fffffep-104F, +0x1.fffffep-103F}, {+0x1.cc8532p-52F, +0x1.1c9e00p-52F}},\r\n    {{+0x1.000000p-103F, +0x1.000000p-102F}, {+0x1.cc8532p-52F, +0x1.1c9e00p-52F}},\r\n    {{+0x1.000002p-103F, +0x1.000002p-102F}, {+0x1.cc8534p-52F, +0x1.1c9e02p-52F}},\r\n    {{+0x1.000000p-103F, +0x1.fffffep-103F}, {+0x1.cc8532p-52F, +0x1.1c9e00p-52F}},\r\n    {{+0x1.000002p-103F, +0x1.000000p-102F}, {+0x1.cc8534p-52F, +0x1.1c9e00p-52F}},\r\n    {{+0x1.000004p-103F, +0x1.000002p-102F}, {+0x1.cc8536p-52F, +0x1.1c9e02p-52F}},\r\n    {{+0x1.000000p-126F, +0x1.fffffep-103F}, {+0x1.6a09e6p-52F, +0x1.6a09e4p-52F}},\r\n    {{+0x1.000000p-126F, +0x1.000000p-102F}, {+0x1.6a09e8p-52F, +0x1.6a09e6p-52F}},\r\n    {{+0x1.000000p-126F, +0x1.000002p-102F}, {+0x1.6a09e8p-52F, +0x1.6a09e8p-52F}},\r\n\r\n#if !WITH_FP_ABRUPT_UNDERFLOW\r\n    {{+0x0.000002p-126F, +0x1.fffffep-103F}, {+0x1.6a09e6p-52F, +0x1.6a09e6p-52F}},\r\n    {{+0x0.000002p-126F, +0x1.000000p-102F}, {+0x1.6a09e6p-52F, +0x1.6a09e6p-52F}},\r\n    {{+0x0.000002p-126F, +0x1.000002p-102F}, {+0x1.6a09e8p-52F, +0x1.6a09e8p-52F}},\r\n#endif // !WITH_FP_ABRUPT_UNDERFLOW\r\n};\r\n"
  },
  {
    "path": "tests/std/tests/GH_000935_complex_numerical_accuracy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wnan-infinity-disabled\"\r\n#endif // __clang__\r\n\r\n#include <cassert>\r\n#include <complex>\r\n#include <limits>\r\n\r\n#include \"floating_point_utils.hpp\"\r\n#include \"log_test_cases.hpp\"\r\n#include \"sqrt_test_cases.hpp\"\r\n\r\nusing namespace std;\r\nusing namespace fputil;\r\n\r\nvoid test_sqrt(const rounding_mode mode) {\r\n#if FP_PRESET_FAST\r\n    constexpr int ulp_tolerance = 4;\r\n#else // ^^^ fp:fast / not fp:fast vvv\r\n    const int ulp_tolerance = is_directed_rounding_mode(mode) ? 3 : 2;\r\n#endif // ^^^ not fp:fast ^^^\r\n\r\n    const auto check_result = [&](const auto& result, const auto& test_case) {\r\n        const int case_real_ulp_tolerance = test_case.result_exactness.real ? 0 : ulp_tolerance;\r\n        const int case_imag_ulp_tolerance = test_case.result_exactness.imag ? 0 : ulp_tolerance;\r\n        return near_equal(result.real(), test_case.expected_result.real(), case_real_ulp_tolerance)\r\n            && near_equal(result.imag(), test_case.expected_result.imag(), case_imag_ulp_tolerance);\r\n    };\r\n\r\n    for (const auto& c : sqrt_double_cases) {\r\n        const auto result = [&] {\r\n            rounding_guard guard(mode);\r\n            return sqrt(c.input);\r\n        }();\r\n\r\n        assert(check_result(result, c));\r\n    }\r\n\r\n    for (const auto& c : sqrt_float_cases) {\r\n        const auto result = [&] {\r\n            rounding_guard guard(mode);\r\n            return sqrt(c.input);\r\n        }();\r\n\r\n        assert(check_result(result, c));\r\n    }\r\n\r\n    for (const auto& c : sqrt_double_cases) {\r\n        const auto result = [&] {\r\n            rounding_guard guard(mode);\r\n            return sqrt(static_cast<complex<long double>>(c.input));\r\n        }();\r\n\r\n        assert(check_result(static_cast<complex<double>>(result), c));\r\n    }\r\n}\r\n\r\nvoid test_log(const rounding_mode mode) {\r\n#if FP_PRESET_FAST\r\n    constexpr int ulp_tolerance = 4;\r\n    // under /fp:fast, allow inaccurate real(log(z)) when |z| is close to 1\r\n    constexpr double real_absolute_epsilon_tolerance = 4;\r\n#else // ^^^ fp:fast / not fp:fast vvv\r\n    const int ulp_tolerance                          = is_directed_rounding_mode(mode) ? 3 : 2;\r\n    constexpr double real_absolute_epsilon_tolerance = 0;\r\n#endif // ^^^ not fp:fast ^^^\r\n\r\n    const auto check_result = [&](const auto& result, const auto& test_case) {\r\n        using Float = decltype(result.real());\r\n\r\n        constexpr auto epsilon            = static_cast<double>(numeric_limits<Float>::epsilon());\r\n        const int case_real_ulp_tolerance = test_case.result_exactness.real ? 0 : ulp_tolerance;\r\n        const int case_imag_ulp_tolerance = test_case.result_exactness.imag ? 0 : ulp_tolerance;\r\n        const double case_real_absolute_tolerance =\r\n            test_case.result_exactness.real ? 0.0 : real_absolute_epsilon_tolerance * epsilon;\r\n\r\n        // TRANSITION: under rounding toward negative mode, log(1.0) returns +0.0 on x86, -0.0 on x64\r\n        const auto is_mod_exactly_one = [](const auto& z) {\r\n            // no other complex<binary_floating_point> has mod of exactly 1\r\n            return (abs(real(z)) == 1 && imag(z) == 0) || (real(z) == 0 && abs(imag(z)) == 1);\r\n        };\r\n\r\n        if (mode == rounding_mode::toward_negative && is_mod_exactly_one(test_case.input)) {\r\n            return abs(result.real()) <= case_real_absolute_tolerance\r\n                && near_equal(result.imag(), test_case.expected_result.imag(), case_imag_ulp_tolerance);\r\n        }\r\n\r\n        return near_equal(result.real(), test_case.expected_result.real(), case_real_ulp_tolerance,\r\n                   case_real_absolute_tolerance)\r\n            && near_equal(result.imag(), test_case.expected_result.imag(), case_imag_ulp_tolerance);\r\n    };\r\n\r\n    for (const auto& c : log_double_cases) {\r\n        const auto result = [&] {\r\n            rounding_guard guard(mode);\r\n            return log(c.input);\r\n        }();\r\n\r\n        assert(check_result(result, c));\r\n    }\r\n\r\n    for (const auto& c : log_float_cases) {\r\n        const auto result = [&] {\r\n            rounding_guard guard(mode);\r\n            return log(c.input);\r\n        }();\r\n\r\n        assert(check_result(result, c));\r\n    }\r\n\r\n    for (const auto& c : log_double_cases) {\r\n        const auto result = [&] {\r\n            rounding_guard guard(mode);\r\n            return log(static_cast<complex<long double>>(c.input));\r\n        }();\r\n\r\n        assert(check_result(static_cast<complex<double>>(result), c));\r\n    }\r\n}\r\n\r\nint main() {\r\n    for (const auto& mode : all_rounding_modes) {\r\n        test_sqrt(mode);\r\n        test_log(mode);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000935_complex_numerical_accuracy/test.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <complex>\r\n#include <limits>\r\n\r\n#include \"floating_point_utils.hpp\"\r\n\r\nconstexpr double double_inf = std::numeric_limits<double>::infinity();\r\nconstexpr double double_nan = std::numeric_limits<double>::quiet_NaN();\r\n\r\nconstexpr float float_inf = std::numeric_limits<float>::infinity();\r\nconstexpr float float_nan = std::numeric_limits<float>::quiet_NaN();\r\n\r\nstruct complex_result_exactness {\r\n    bool real = false;\r\n    bool imag = false;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct complex_unary_test_case {\r\n    std::complex<T> input;\r\n    std::complex<T> expected_result;\r\n    complex_result_exactness result_exactness{};\r\n};\r\n"
  },
  {
    "path": "tests/std/tests/GH_000940_missing_valarray_copy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000940_missing_valarray_copy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <iostream>\r\n#include <type_traits>\r\n#include <valarray>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <class T>\r\nbool eq(const std::valarray<T>& v, std::initializer_list<T> il) {\r\n    return std::equal(begin(v), end(v), il.begin(), il.end());\r\n}\r\n\r\nvoid test_slice() {\r\n    std::valarray<int> v{0, 1, 2, 3, 4};\r\n\r\n    std::slice_array<int> slice_array      = v[std::slice(2, 2, 2)];\r\n    std::slice_array<int> slice_array_copy = slice_array;\r\n    (void) slice_array_copy;\r\n\r\n    assert(eq(v, {0, 1, 2, 3, 4}));\r\n\r\n    std::slice_array<int> other_slice_array = v[std::slice(0, 2, 1)];\r\n    other_slice_array                       = slice_array;\r\n\r\n    assert(eq(v, {2, 4, 2, 3, 4}));\r\n}\r\n\r\nvoid test_gslice() {\r\n    std::valarray<int> v{0, 1, 2, 3, 4};\r\n\r\n    std::gslice gslice(2, std::valarray<std::size_t>{2}, std::valarray<std::size_t>{2});\r\n    std::gslice_array<int> gslice_array      = v[gslice];\r\n    std::gslice_array<int> gslice_array_copy = gslice_array;\r\n    (void) gslice_array_copy;\r\n\r\n    assert(eq(v, {0, 1, 2, 3, 4}));\r\n\r\n    std::gslice other_gslice(0, std::valarray<std::size_t>{2}, std::valarray<std::size_t>{1});\r\n    std::gslice_array<int> other_gslice_array = v[other_gslice];\r\n    other_gslice_array                        = gslice_array;\r\n\r\n    assert(eq(v, {2, 4, 2, 3, 4}));\r\n}\r\n\r\nvoid test_mask() {\r\n    std::valarray<int> v{0, 1, 2, 3, 4};\r\n\r\n    std::valarray<bool> mask{true, false, false, false, true};\r\n    std::mask_array<int> mask_array      = v[mask];\r\n    std::mask_array<int> mask_array_copy = mask_array;\r\n    (void) mask_array_copy;\r\n\r\n    assert(eq(v, {0, 1, 2, 3, 4}));\r\n\r\n    std::valarray<bool> other_mask{false, true, true, false, false};\r\n    std::mask_array<int> other_mask_array = v[other_mask];\r\n    other_mask_array                      = mask_array;\r\n\r\n    assert(eq(v, {0, 0, 4, 3, 4}));\r\n}\r\n\r\nvoid test_indirect() {\r\n    std::valarray<int> v{0, 1, 2, 3, 4};\r\n\r\n    std::valarray<std::size_t> indices{2, 3};\r\n    std::indirect_array<int> indirect_array      = v[indices];\r\n    std::indirect_array<int> indirect_array_copy = indirect_array;\r\n    (void) indirect_array_copy;\r\n\r\n    assert(eq(v, {0, 1, 2, 3, 4}));\r\n\r\n    std::valarray<std::size_t> other_indices{4, 0};\r\n    std::indirect_array<int> other_indirect_array = v[other_indices];\r\n    other_indirect_array                          = indirect_array;\r\n\r\n    assert(eq(v, {3, 1, 2, 3, 2}));\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_strengthened_exception_specification() {\r\n    STATIC_ASSERT(std::is_nothrow_default_constructible_v<std::valarray<T>>);\r\n\r\n    std::valarray<T> va{};\r\n    const auto& cva = va;\r\n    STATIC_ASSERT(noexcept(std::begin(va)));\r\n    STATIC_ASSERT(noexcept(std::end(va)));\r\n    STATIC_ASSERT(noexcept(std::begin(cva)));\r\n    STATIC_ASSERT(noexcept(std::end(cva)));\r\n\r\n    STATIC_ASSERT(std::is_nothrow_assignable_v<const std::slice_array<T>, const std::slice_array<T>&>);\r\n    STATIC_ASSERT(std::is_nothrow_assignable_v<const std::slice_array<T>, std::slice_array<T>>);\r\n\r\n    STATIC_ASSERT(std::is_nothrow_assignable_v<const std::mask_array<T>, const std::mask_array<T>&>);\r\n    STATIC_ASSERT(std::is_nothrow_assignable_v<const std::mask_array<T>, std::mask_array<T>>);\r\n\r\n    STATIC_ASSERT(std::is_nothrow_assignable_v<const std::indirect_array<T>, const std::indirect_array<T>&>);\r\n    STATIC_ASSERT(std::is_nothrow_assignable_v<const std::indirect_array<T>, std::indirect_array<T>>);\r\n}\r\n\r\nint main() {\r\n    test_slice();\r\n    test_gslice();\r\n    test_mask();\r\n    test_indirect();\r\n\r\n    // Also test strengthened exception specifications\r\n    test_strengthened_exception_specification<bool>();\r\n    test_strengthened_exception_specification<std::size_t>();\r\n    test_strengthened_exception_specification<double>();\r\n\r\n    STATIC_ASSERT(std::is_nothrow_default_constructible_v<std::gslice>); // strengthened\r\n    std::gslice gs{};\r\n    STATIC_ASSERT(noexcept(gs.start())); // strengthened\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000952_bind_constraints/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000952_bind_constraints/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n// some portions of this file are derived from libc++'s test files:\r\n// * std/utilities/function.objects/func.bind_front/bind_front.pass.cpp\r\n\r\n#include <functional>\r\n#include <type_traits>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nusing namespace std;\r\n\r\nvoid test() {\r\n    {\r\n        auto lambda = [](int) {};\r\n        auto f      = bind(lambda, placeholders::_1);\r\n        STATIC_ASSERT(!is_convertible_v<decltype(f), function<void()>>);\r\n        STATIC_ASSERT(!is_convertible_v<decltype(f), function<void*(int)>>);\r\n        STATIC_ASSERT(is_convertible_v<decltype(f), function<void(int)>>);\r\n        STATIC_ASSERT(!is_convertible_v<decltype(f), function<char(int)>>);\r\n    }\r\n    {\r\n        auto lambda = [](int) { return 42; };\r\n        auto f      = bind<void>(lambda, placeholders::_1);\r\n        STATIC_ASSERT(!is_convertible_v<decltype(f), function<void()>>);\r\n        STATIC_ASSERT(!is_convertible_v<decltype(f), function<void*(int)>>);\r\n        STATIC_ASSERT(is_convertible_v<decltype(f), function<void(int)>>);\r\n        STATIC_ASSERT(!is_convertible_v<decltype(f), function<char(int)>>);\r\n    }\r\n    {\r\n        auto lambda = [](int) { return 42; };\r\n        auto f      = bind<long>(lambda, placeholders::_1);\r\n        STATIC_ASSERT(!is_convertible_v<decltype(f), function<void()>>);\r\n        STATIC_ASSERT(!is_convertible_v<decltype(f), function<void*(int)>>);\r\n        STATIC_ASSERT(is_convertible_v<decltype(f), function<void(int)>>);\r\n        STATIC_ASSERT(is_convertible_v<decltype(f), function<char(int)>>);\r\n    }\r\n    {\r\n        auto lambda0 = [](int, int) { return true; };\r\n        auto lambda1 = [](const char*) { return 0; };\r\n        auto f       = bind(lambda0, placeholders::_1, bind(lambda1, placeholders::_2));\r\n        STATIC_ASSERT(!is_convertible_v<decltype(f), function<void()>>);\r\n        STATIC_ASSERT(!is_convertible_v<decltype(f), function<void*(int, const char*)>>);\r\n        STATIC_ASSERT(is_convertible_v<decltype(f), function<void(int, const char*)>>);\r\n        STATIC_ASSERT(is_convertible_v<decltype(f), function<bool(int, const char*)>>);\r\n    }\r\n}\r\n\r\n// Also test expression-equivalence for the invocation on the return types of bind, bind_front, and bind_back\r\n\r\n#if _HAS_CXX17\r\nstruct WeirdIdentity {\r\n    template <class T>\r\n    void operator()(T&&) = delete;\r\n\r\n    template <class T>\r\n    constexpr T&& operator()(T&& t) const noexcept {\r\n        return static_cast<T&&>(t);\r\n    }\r\n};\r\n\r\nstatic_assert(\r\n    is_invocable_v<WeirdIdentity&, int> == is_invocable_v<decltype(bind(WeirdIdentity{}, placeholders::_1))&, int>);\r\nstatic_assert(\r\n    is_invocable_v<WeirdIdentity&, int> == is_invocable_v<decltype(bind(WeirdIdentity{}, placeholders::_1)), int>);\r\nstatic_assert(is_invocable_v<const WeirdIdentity&, int>\r\n              == is_invocable_v<const decltype(bind(WeirdIdentity{}, placeholders::_1))&, int>);\r\nstatic_assert(is_invocable_v<const WeirdIdentity&, int>\r\n              == is_invocable_v<const decltype(bind(WeirdIdentity{}, placeholders::_1)), int>);\r\n\r\nstatic_assert(is_invocable_r_v<void, WeirdIdentity&, int>\r\n              == is_invocable_v<decltype(bind<void>(WeirdIdentity{}, placeholders::_1))&, int>);\r\nstatic_assert(is_invocable_r_v<void, WeirdIdentity&, int>\r\n              == is_invocable_v<decltype(bind<void>(WeirdIdentity{}, placeholders::_1)), int>);\r\nstatic_assert(is_invocable_r_v<void, const WeirdIdentity&, int>\r\n              == is_invocable_v<const decltype(bind<void>(WeirdIdentity{}, placeholders::_1))&, int>);\r\nstatic_assert(is_invocable_r_v<void, const WeirdIdentity&, int>\r\n              == is_invocable_v<const decltype(bind<void>(WeirdIdentity{}, placeholders::_1)), int>);\r\n\r\nstatic_assert(is_invocable_r_v<int, WeirdIdentity&, int>\r\n              == is_invocable_v<decltype(bind<int>(WeirdIdentity{}, placeholders::_1))&, int>);\r\nstatic_assert(is_invocable_r_v<int, WeirdIdentity&, int>\r\n              == is_invocable_v<decltype(bind<int>(WeirdIdentity{}, placeholders::_1)), int>);\r\nstatic_assert(is_invocable_r_v<int, const WeirdIdentity&, int>\r\n              == is_invocable_v<const decltype(bind<int>(WeirdIdentity{}, placeholders::_1))&, int>);\r\nstatic_assert(is_invocable_r_v<int, const WeirdIdentity&, int>\r\n              == is_invocable_v<const decltype(bind<int>(WeirdIdentity{}, placeholders::_1)), int>);\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nstruct WeirdDual {\r\n    template <class T, class U>\r\n    void operator()(T&&, U&&) & = delete;\r\n\r\n    template <class T, class U>\r\n    constexpr void operator()(T&&, U&&) const& noexcept {}\r\n\r\n    template <class T, class U>\r\n    constexpr void operator()(T&&, U&&) && noexcept {}\r\n\r\n    template <class T, class U>\r\n    constexpr void operator()(T&&, U&&) const&& = delete;\r\n};\r\n\r\nstatic_assert(is_invocable_v<WeirdDual&, int, long> == is_invocable_v<decltype(bind_front(WeirdDual{}, 0))&, long>);\r\nstatic_assert(\r\n    is_invocable_v<const WeirdDual&, int, long> == is_invocable_v<const decltype(bind_front(WeirdDual{}, 0))&, long>);\r\nstatic_assert(is_invocable_v<WeirdDual, int, long> == is_invocable_v<decltype(bind_front(WeirdDual{}, 0)), long>);\r\nstatic_assert(\r\n    is_invocable_v<const WeirdDual, int, long> == is_invocable_v<const decltype(bind_front(WeirdDual{}, 0)), long>);\r\n\r\n// derived from libc++'s test file\r\nvoid test_bind_front_deletion() {\r\n    // Make sure the bind_front unspecified-type is NOT invocable when the call would select a differently-qualified\r\n    // operator().\r\n    //\r\n    // For example, if the call to `operator()() &` is ill-formed, the call to the unspecified-type\r\n    // should be ill-formed and not fall back to the `operator()() const&` overload.\r\n    {\r\n        // Make sure we delete the & overload when the underlying call isn't valid\r\n        struct F {\r\n            void operator()() & = delete;\r\n            void operator()() const& {}\r\n            void operator()() && {}\r\n            void operator()() const&& {}\r\n        };\r\n        using X = decltype(bind_front(F{}));\r\n        static_assert(!is_invocable_v<X&>);\r\n        static_assert(is_invocable_v<X const&>);\r\n        static_assert(is_invocable_v<X>);\r\n        static_assert(is_invocable_v<X const>);\r\n    }\r\n\r\n    // There's no way to make sure we delete the const& overload when the underlying call isn't valid,\r\n    // so we can't check this one.\r\n\r\n    // Make sure we delete the && overload when the underlying call isn't valid\r\n    {\r\n        struct F {\r\n            void operator()() & {}\r\n            void operator()() const& {}\r\n            void operator()() && = delete;\r\n            void operator()() const&& {}\r\n        };\r\n        using X = decltype(bind_front(F{}));\r\n        static_assert(is_invocable_v<X&>);\r\n        static_assert(is_invocable_v<X const&>);\r\n        static_assert(!is_invocable_v<X>);\r\n        static_assert(is_invocable_v<X const>);\r\n    }\r\n\r\n    // Make sure we delete the const&& overload when the underlying call isn't valid\r\n    {\r\n        struct F {\r\n            void operator()() & {}\r\n            void operator()() const& {}\r\n            void operator()() && {}\r\n            void operator()() const&& = delete;\r\n        };\r\n        using X = decltype(bind_front(F{}));\r\n        static_assert(is_invocable_v<X&>);\r\n        static_assert(is_invocable_v<X const&>);\r\n        static_assert(is_invocable_v<X>);\r\n        static_assert(!is_invocable_v<X const>);\r\n    }\r\n\r\n    // Some examples by Tim Song\r\n    {\r\n        struct T {};\r\n        struct F {\r\n            void operator()(T&&) const& {}\r\n            void operator()(T&&) && = delete;\r\n        };\r\n        using X = decltype(bind_front(F{}));\r\n        static_assert(!is_invocable_v<X, T>);\r\n    }\r\n\r\n    {\r\n        struct T {};\r\n        struct F {\r\n            void operator()(T const&) const {}\r\n            void operator()(T&&) const = delete;\r\n        };\r\n        using X = decltype(bind_front(F{}, T{}));\r\n        static_assert(!is_invocable_v<X>);\r\n    }\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\nstatic_assert(is_invocable_v<WeirdDual&, int, long> == is_invocable_v<decltype(bind_back(WeirdDual{}, 0L))&, int>);\r\nstatic_assert(\r\n    is_invocable_v<const WeirdDual&, int, long> == is_invocable_v<const decltype(bind_back(WeirdDual{}, 0L))&, int>);\r\nstatic_assert(is_invocable_v<WeirdDual, int, long> == is_invocable_v<decltype(bind_back(WeirdDual{}, 0L)), int>);\r\nstatic_assert(\r\n    is_invocable_v<const WeirdDual, int, long> == is_invocable_v<const decltype(bind_back(WeirdDual{}, 0L)), int>);\r\n\r\n// derived from libc++'s test file\r\nvoid test_bind_back_deletion() {\r\n    // Make sure the bind_back unspecified-type is NOT invocable when the call would select a differently-qualified\r\n    // operator().\r\n    //\r\n    // For example, if the call to `operator()() &` is ill-formed, the call to the unspecified-type\r\n    // should be ill-formed and not fall back to the `operator()() const&` overload.\r\n    {\r\n        // Make sure we delete the & overload when the underlying call isn't valid\r\n        struct F {\r\n            void operator()() & = delete;\r\n            void operator()() const& {}\r\n            void operator()() && {}\r\n            void operator()() const&& {}\r\n        };\r\n        using X = decltype(bind_back(F{}));\r\n        static_assert(!is_invocable_v<X&>);\r\n        static_assert(is_invocable_v<X const&>);\r\n        static_assert(is_invocable_v<X>);\r\n        static_assert(is_invocable_v<X const>);\r\n    }\r\n\r\n    // There's no way to make sure we delete the const& overload when the underlying call isn't valid,\r\n    // so we can't check this one.\r\n\r\n    // Make sure we delete the && overload when the underlying call isn't valid\r\n    {\r\n        struct F {\r\n            void operator()() & {}\r\n            void operator()() const& {}\r\n            void operator()() && = delete;\r\n            void operator()() const&& {}\r\n        };\r\n        using X = decltype(bind_back(F{}));\r\n        static_assert(is_invocable_v<X&>);\r\n        static_assert(is_invocable_v<X const&>);\r\n        static_assert(!is_invocable_v<X>);\r\n        static_assert(is_invocable_v<X const>);\r\n    }\r\n\r\n    // Make sure we delete the const&& overload when the underlying call isn't valid\r\n    {\r\n        struct F {\r\n            void operator()() & {}\r\n            void operator()() const& {}\r\n            void operator()() && {}\r\n            void operator()() const&& = delete;\r\n        };\r\n        using X = decltype(bind_back(F{}));\r\n        static_assert(is_invocable_v<X&>);\r\n        static_assert(is_invocable_v<X const&>);\r\n        static_assert(is_invocable_v<X>);\r\n        static_assert(!is_invocable_v<X const>);\r\n    }\r\n\r\n    // Some examples by Tim Song\r\n    {\r\n        struct T {};\r\n        struct F {\r\n            void operator()(T&&) const& {}\r\n            void operator()(T&&) && = delete;\r\n        };\r\n        using X = decltype(bind_back(F{}));\r\n        static_assert(!is_invocable_v<X, T>);\r\n    }\r\n\r\n    {\r\n        struct T {};\r\n        struct F {\r\n            void operator()(T const&) const {}\r\n            void operator()(T&&) const = delete;\r\n        };\r\n        using X = decltype(bind_back(F{}, T{}));\r\n        static_assert(!is_invocable_v<X>);\r\n    }\r\n}\r\n#endif // _HAS_CXX23\r\n"
  },
  {
    "path": "tests/std/tests/GH_000990_any_link_without_exceptions/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/D_HAS_EXCEPTIONS=0\"\r\n*\tPM_CL=\"/D_HAS_EXCEPTIONS=1\"\r\n"
  },
  {
    "path": "tests/std/tests/GH_000990_any_link_without_exceptions/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <any>\r\n#include <cassert>\r\nusing namespace std;\r\n\r\nint main() {\r\n    // GH-990 <any>: std::any doesn't link when exceptions are disabled\r\n    assert(any_cast<int>(any{1729}) == 1729);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_000995_regex_custom_char_types/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_000995_regex_custom_char_types/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cwchar>\r\n#include <ios>\r\n#include <iterator>\r\n#include <regex>\r\n#include <string>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nnamespace signed_wchar_ns {\r\n    enum class signed_wchar_enum : short {};\r\n\r\n    bool operator==(const signed_wchar_enum swe, const char ch) {\r\n        return static_cast<unsigned short>(swe) == static_cast<unsigned char>(ch);\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    bool operator!=(const signed_wchar_enum swe, const char ch) {\r\n        return !(swe == ch);\r\n    }\r\n\r\n    bool operator==(const char ch, const signed_wchar_enum swe) {\r\n        return swe == ch;\r\n    }\r\n\r\n    bool operator!=(const char ch, const signed_wchar_enum swe) {\r\n        return !(swe == ch);\r\n    }\r\n#endif // !_HAS_CXX20\r\n} // namespace signed_wchar_ns\r\n\r\nusing signed_wchar_ns::signed_wchar_enum;\r\n\r\nnamespace ullong_ns {\r\n    enum class ullong_enum : unsigned long long {};\r\n\r\n    bool operator==(const ullong_enum ull, const char ch) {\r\n        return static_cast<unsigned long long>(ull) == static_cast<unsigned char>(ch);\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    bool operator!=(const ullong_enum ull, const char ch) {\r\n        return !(ull == ch);\r\n    }\r\n\r\n    bool operator==(const char ch, const ullong_enum ull) {\r\n        return ull == ch;\r\n    }\r\n\r\n    bool operator!=(const char ch, const ullong_enum ull) {\r\n        return !(ull == ch);\r\n    }\r\n#endif // !_HAS_CXX20\r\n} // namespace ullong_ns\r\n\r\nusing ullong_ns::ullong_enum;\r\n\r\ntemplate <class T>\r\nT convert_to(const signed_wchar_enum& char_enum) {\r\n    return static_cast<T>(char_enum);\r\n}\r\n\r\ntemplate <class T>\r\nT convert_to(const ullong_enum& char_enum) {\r\n    return static_cast<T>(char_enum);\r\n}\r\n\r\ntemplate <class Elem>\r\nclass wrapped_character {\r\npublic:\r\n    wrapped_character() = default;\r\n    explicit wrapped_character(char ch) : character(static_cast<wchar_t>(ch)) {}\r\n    explicit wrapped_character(unsigned char ch) : character(ch) {}\r\n    explicit wrapped_character(Elem w) : character(w) {}\r\n    template <class T = wchar_t, enable_if_t<!is_same_v<T, Elem>, int> = 0>\r\n    explicit wrapped_character(wchar_t w) : character(w) {}\r\n    explicit wrapped_character(int w) = delete;\r\n    explicit wrapped_character(unsigned int w) : character(static_cast<wchar_t>(w)) {}\r\n\r\n    operator unsigned char() const {\r\n        return static_cast<unsigned char>(character);\r\n    }\r\n\r\n    operator unsigned int() const {\r\n        return static_cast<unsigned int>(character);\r\n    }\r\n\r\n    operator char() const               = delete;\r\n    operator wchar_t() const            = delete;\r\n    operator int() const                = delete;\r\n    operator unsigned long long() const = delete;\r\n\r\n    friend bool operator==(const wrapped_character& lhs, const wrapped_character& rhs) {\r\n        return lhs.character == rhs.character;\r\n    }\r\n\r\n    friend bool operator==(const wrapped_character& wc, const char ch) {\r\n        return wc.character == static_cast<Elem>(ch);\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    friend bool operator!=(const wrapped_character& lhs, const wrapped_character& rhs) {\r\n        return !(lhs == rhs);\r\n    }\r\n\r\n    friend bool operator!=(const wrapped_character& wc, const char ch) {\r\n        return !(wc == ch);\r\n    }\r\n\r\n    friend bool operator==(const char ch, const wrapped_character& wc) {\r\n        return wc == ch;\r\n    }\r\n\r\n    friend bool operator!=(const char ch, const wrapped_character& wc) {\r\n        return !(wc == ch);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    template <class T>\r\n    friend T convert_to(const wrapped_character<Elem>& wrapped_char) {\r\n        return static_cast<T>(wrapped_char.character);\r\n    }\r\n\r\nprivate:\r\n    Elem character;\r\n};\r\n\r\ntemplate <class T, class Elem>\r\nT convert_to(const wrapped_character<Elem>& wrapped_char);\r\n\r\nusing wrapped_wchar  = wrapped_character<wchar_t>;\r\nusing wrapped_ullong = wrapped_character<unsigned long long>;\r\n\r\ntemplate <class UnderlyingChar, class FwdIt>\r\nbasic_string<UnderlyingChar> convert_to_underlying_string(FwdIt first, FwdIt last) {\r\n    basic_string<UnderlyingChar> str;\r\n    for (; first != last; ++first) {\r\n        str.push_back(convert_to<UnderlyingChar>(*first));\r\n    }\r\n    return str;\r\n}\r\n\r\ntemplate <class StringType, class UnderlyingChar>\r\nStringType convert_from_underlying_string(const basic_string<UnderlyingChar>& str) {\r\n    StringType result;\r\n    for (const auto& ch : str) {\r\n        result.push_back(static_cast<typename StringType::value_type>(ch));\r\n    }\r\n    return result;\r\n}\r\n\r\ntemplate <class SourceChar, class UnderlyingChar>\r\nclass test_regex_traits {\r\nprivate:\r\n    using rx_traits = regex_traits<UnderlyingChar>;\r\n\r\npublic:\r\n    using char_type       = SourceChar;\r\n    using string_type     = basic_string<SourceChar>;\r\n    using locale_type     = typename rx_traits::locale_type;\r\n    using char_class_type = typename rx_traits::char_class_type;\r\n\r\n    test_regex_traits() = default;\r\n\r\n    static size_t length(const SourceChar* p) {\r\n        return string_type::char_traits::length(p);\r\n    }\r\n\r\n    SourceChar translate(const SourceChar c) const {\r\n        return c;\r\n    }\r\n\r\n    SourceChar translate_nocase(const SourceChar c) const {\r\n        return static_cast<SourceChar>(inner.translate_nocase(convert_to<UnderlyingChar>(c)));\r\n    }\r\n\r\n    template <class FwdIt>\r\n    string_type transform(FwdIt first, FwdIt last) const {\r\n        auto str = convert_to_underlying_string<UnderlyingChar>(first, last);\r\n        return convert_from_underlying_string<string_type>(inner.transform(str.begin(), str.end()));\r\n    }\r\n\r\n    template <class FwdIt>\r\n    string_type transform_primary(FwdIt first, FwdIt last) const {\r\n        if (distance(first, last) == 1) {\r\n            return string_type{first, last};\r\n        }\r\n        return string_type{};\r\n    }\r\n\r\n    template <class FwdIt>\r\n    string_type lookup_collatename(FwdIt first, FwdIt last) const {\r\n        auto str = convert_to_underlying_string<UnderlyingChar>(first, last);\r\n        return convert_from_underlying_string<string_type>(inner.lookup_collatename(str.begin(), str.end()));\r\n    }\r\n\r\n    template <class FwdIt>\r\n    char_class_type lookup_classname(FwdIt first, FwdIt last, bool icase = false) const {\r\n        auto str = convert_to_underlying_string<UnderlyingChar>(first, last);\r\n        return inner.lookup_classname(str.begin(), str.end(), icase);\r\n    }\r\n\r\n    bool isctype(SourceChar c, char_class_type f) const {\r\n        return inner.isctype(convert_to<UnderlyingChar>(c), f);\r\n    }\r\n\r\n    int value(SourceChar ch, int radix) const {\r\n        return inner.value(convert_to<UnderlyingChar>(ch), radix);\r\n    }\r\n\r\n    locale_type imbue(locale_type l) {\r\n        return inner.imbue(l);\r\n    }\r\n\r\n    locale_type getloc() const {\r\n        return inner.getloc();\r\n    }\r\n\r\nprivate:\r\n    rx_traits inner;\r\n};\r\n\r\ntemplate <class Elem, class Uelem>\r\nstruct custom_char_traits {\r\n    using char_type  = Elem;\r\n    using int_type   = conditional_t<sizeof(Elem) <= 4, int, unsigned long long>;\r\n    using pos_type   = streampos;\r\n    using off_type   = streamoff;\r\n    using state_type = mbstate_t;\r\n\r\n    static Elem* copy(Elem* const first1, const Elem* const first2, const size_t count) noexcept {\r\n        copy_n(first2, count, first1);\r\n        return first1;\r\n    }\r\n\r\n    static Elem* move(Elem* const result, const Elem* const first2, const size_t count) noexcept /* strengthened */ {\r\n        if (result == first2) {\r\n            // nothing to do\r\n        } else if (first2 <= result && result < first2 + count) {\r\n            copy_backward(first2, first2 + count, result + count);\r\n        } else {\r\n            copy_n(first2, count, result);\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    static int compare(const Elem* first1, const Elem* first2, size_t count) noexcept {\r\n        for (; 0 < count; --count, ++first1, ++first2) {\r\n            if (*first1 != *first2) {\r\n                return custom_char_traits::lt(*first1, *first2) ? -1 : +1;\r\n            }\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    static size_t length(const Elem* first) {\r\n        size_t count = 0;\r\n        while (*first != Elem{}) {\r\n            ++count;\r\n            ++first;\r\n        }\r\n\r\n        return count;\r\n    }\r\n\r\n    static const Elem* find(const Elem* first, size_t count, const Elem& ch) noexcept /* strengthened */ {\r\n        // look for ch in [first, first + count)\r\n        for (; 0 < count; --count, ++first) {\r\n            if (*first == ch) {\r\n                return first;\r\n            }\r\n        }\r\n\r\n        return nullptr;\r\n    }\r\n\r\n    static Elem* assign(const Elem* const first, size_t count, const Elem ch) {\r\n        for (Elem* next = first; count > 0; --count, ++next) {\r\n            *next = ch;\r\n        }\r\n\r\n        return first;\r\n    }\r\n\r\n    static void assign(Elem& left, const Elem& right) noexcept {\r\n        left = right;\r\n    }\r\n\r\n    static bool eq(const Elem left, const Elem right) noexcept {\r\n        return left == right;\r\n    }\r\n\r\n    static bool lt(const Elem left, const Elem right) noexcept {\r\n        return convert_to<Uelem>(left) < convert_to<Uelem>(right);\r\n    }\r\n\r\n    static Elem to_char_type(const int_type meta) noexcept {\r\n        return static_cast<Elem>(meta);\r\n    }\r\n\r\n    static int_type to_int_type(const Elem ch) noexcept {\r\n        return static_cast<int_type>(static_cast<wchar_t>(ch));\r\n    }\r\n\r\n    static bool eq_int_type(const int_type left, const int_type right) noexcept {\r\n        return left == right;\r\n    }\r\n\r\n    static int_type not_eof(const int_type meta) noexcept {\r\n        return meta != eof() ? meta : !eof();\r\n    }\r\n\r\n    static int_type eof() noexcept {\r\n        return static_cast<int_type>(-1);\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct char_traits<signed_wchar_enum> : custom_char_traits<signed_wchar_enum, wchar_t> {};\r\n\r\ntemplate <>\r\nstruct char_traits<ullong_enum> : custom_char_traits<ullong_enum, unsigned long long> {};\r\n\r\ntemplate <>\r\nstruct char_traits<wrapped_wchar> : custom_char_traits<wrapped_wchar, wchar_t> {};\r\n\r\ntemplate <>\r\nstruct char_traits<wrapped_ullong> : custom_char_traits<wrapped_ullong, unsigned long long> {};\r\n\r\n\r\nvoid test_gh_5592() {\r\n    // GH-5592: Remove non-standard _Uelem from parser\r\n    // This test checks that the parser compiles and doesn't crash\r\n    // when user-defined character types are used.\r\n\r\n    // This regex is only intended to exert many different paths in the parser,\r\n    // but it is not designed to be meaningful.\r\n    wstring test_regex = L\"^a*[\\u00fe-\\\\u0101][\\u0123-\\u0146](?:abc|def){0,3}(=.gwer)\"\r\n                         LR\"(\\b.{6}\\B(\\.\\d\\f)\\g\\1\\0\\x34(?!gef)[-f[.a.][=b=]c-e-]$)\";\r\n    {\r\n        auto str = convert_from_underlying_string<basic_string<signed_wchar_enum>>(test_regex);\r\n        basic_regex<signed_wchar_enum, test_regex_traits<signed_wchar_enum, wchar_t>> re{str};\r\n    }\r\n\r\n    {\r\n        auto str = convert_from_underlying_string<basic_string<wrapped_wchar>>(test_regex);\r\n        basic_regex<wrapped_wchar, test_regex_traits<wrapped_wchar, wchar_t>> re{str};\r\n    }\r\n}\r\n\r\ntemplate <class Elem, class RxTraits>\r\nvoid test_regex_for_custom_char(const wstring& pattern, const wstring& input, bool should_match) {\r\n    auto converted_pattern = convert_from_underlying_string<basic_string<Elem>>(pattern);\r\n    auto converted_input   = convert_from_underlying_string<basic_string<Elem>>(input);\r\n    basic_regex<Elem, RxTraits> re{converted_pattern};\r\n    assert(regex_match(converted_input, re) == should_match);\r\n}\r\n\r\nvoid test_regex_on_custom_wchars(const wstring& pattern, const wstring& input, bool should_match) {\r\n    test_regex_for_custom_char<signed_wchar_enum, test_regex_traits<signed_wchar_enum, wchar_t>>(\r\n        pattern, input, should_match);\r\n    test_regex_for_custom_char<wrapped_wchar, test_regex_traits<wrapped_wchar, wchar_t>>(pattern, input, should_match);\r\n}\r\n\r\ntemplate <class Elem, class RxTraits, class UnderlyingChar>\r\nvoid test_regex_for_custom_char(const UnderlyingChar* pat_first, const UnderlyingChar* pat_last,\r\n    const UnderlyingChar* input_first, const UnderlyingChar* input_last, bool should_match) {\r\n    basic_string<Elem> converted_pattern;\r\n    basic_string<Elem> converted_input;\r\n    transform(pat_first, pat_last, back_inserter(converted_pattern),\r\n        [](UnderlyingChar val) { return static_cast<Elem>(val); });\r\n    transform(input_first, input_last, back_inserter(converted_input),\r\n        [](UnderlyingChar val) { return static_cast<Elem>(val); });\r\n    basic_regex<Elem, RxTraits> re{converted_pattern};\r\n    assert(regex_match(converted_input, re) == should_match);\r\n}\r\n\r\nvoid test_regex_on_custom_ullongs(const unsigned long long* pat_first, const unsigned long long* pat_last,\r\n    const unsigned long long* input_first, const unsigned long long* input_last, bool should_match) {\r\n    test_regex_for_custom_char<ullong_enum, test_regex_traits<ullong_enum, wchar_t>>(\r\n        pat_first, pat_last, input_first, input_last, should_match);\r\n    test_regex_for_custom_char<wrapped_ullong, test_regex_traits<wrapped_ullong, wchar_t>>(\r\n        pat_first, pat_last, input_first, input_last, should_match);\r\n}\r\n\r\nvoid test_gh_5671_single_character_patterns() {\r\n    // test patterns matching single characters\r\n    // simple smoke test\r\n    test_regex_on_custom_wchars(L\"a\", L\"a\", true);\r\n    test_regex_on_custom_wchars(L\"a\", L\"b\", false);\r\n\r\n    // no truncation issues at 0x100\r\n    test_regex_on_custom_wchars(L\"\\u0100\", L\"\\u0100\", true); // U+0100 LATIN CAPITAL LETTER A WITH MACRON\r\n    test_regex_on_custom_wchars(wstring(1, L'\\0'), L\"\\u0100\", false); // U+0100 LATIN CAPITAL LETTER A WITH MACRON\r\n    test_regex_on_custom_wchars(L\"\\u0100\", wstring(1, L'\\0'), false); // U+0100 LATIN CAPITAL LETTER A WITH MACRON\r\n\r\n    // no issues with signed character values\r\n    test_regex_on_custom_wchars(\r\n        L\"\\uf000\", L\"\\uf000\", true); // U+F000 in private use area (signed for signed_wchar_enum)\r\n\r\n    // matching for very large values\r\n    {\r\n        const unsigned long long pattern = 0xabababababULL;\r\n\r\n        test_regex_on_custom_ullongs(&pattern, &pattern + 1, &pattern, &pattern + 1, true);\r\n\r\n        for (const unsigned long long unmatched : {0xabULL, 0xababULL, 0xababababULL, 0xababababaaULL, 0xababababacULL,\r\n                 0x9bababababULL, 0xbbababababULL, 0xffffffababababULL}) {\r\n            test_regex_on_custom_ullongs(&pattern, &pattern + 1, &unmatched, &unmatched + 1, false);\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_gh_5671_line_terminators() {\r\n    // test line terminator handling for dot\r\n    test_regex_on_custom_wchars(L\".\", L\"a\", true);\r\n    test_regex_on_custom_wchars(L\".\", L\"\\r\", false);\r\n    test_regex_on_custom_wchars(L\".\", L\"\\n\", false);\r\n    test_regex_on_custom_wchars(L\".\", L\"\\u2028\", false); // U+2028 LINE SEPARATOR\r\n    test_regex_on_custom_wchars(L\".\", L\"\\u2029\", false); // U+2029 PARAGRAPH SEPARATOR\r\n    test_regex_on_custom_wchars(L\".\", L\"\\u2c60\", true); // U+2C60 LATIN CAPITAL LETTER L WITH DOUBLE BAR\r\n\r\n    {\r\n        const unsigned long long dot = L'.';\r\n\r\n        for (const unsigned long long line_terminator : {L'\\r', L'\\n', L'\\u2028', L'\\u2029'}) {\r\n            test_regex_on_custom_ullongs(&dot, &dot + 1, &line_terminator, &line_terminator + 1, false);\r\n\r\n            const unsigned long long shifted_line_terminator = 0x100000000ULL + line_terminator;\r\n            test_regex_on_custom_ullongs(&dot, &dot + 1, &shifted_line_terminator, &shifted_line_terminator + 1, true);\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_gh_5671_word_boundaries() {\r\n    // test word boundaries\r\n    test_regex_on_custom_wchars(LR\"(a\\b.)\", L\"a\\u0141\", true); // U+0141 LATIN CAPITAL LETTER L WITH STROKE\r\n    test_regex_on_custom_wchars(LR\"(a\\B.)\", L\"a\\u0141\", false); // U+0141 LATIN CAPITAL LETTER L WITH STROKE\r\n}\r\n\r\nvoid test_gh_5671_character_ranges() {\r\n    // test simple ranges\r\n    test_regex_on_custom_wchars(LR\"([b-\\u0141])\", L\"a\", false); // U+0141 LATIN CAPITAL LETTER L WITH STROKE\r\n    test_regex_on_custom_wchars(LR\"([b-\\u0141])\", L\"b\", true);\r\n    test_regex_on_custom_wchars(LR\"([b-\\u0141])\", L\"\\u0141\", true);\r\n    test_regex_on_custom_wchars(LR\"([b-\\u0141])\", L\"\\u0142\", false); // U+0142 LATIN SMALL LETTER L WITH STROKE\r\n\r\n    // test that GH-5437 fix for small ranges near U+0100 remains in place for custom types\r\n    test_regex_on_custom_wchars(LR\"([\\u00ff-\\u0100])\", L\"\\u00FE\", false); // U+00FE LATIN SMALL LETTER THORN\r\n    test_regex_on_custom_wchars(LR\"([\\u00ff-\\u0100])\", L\"\\u00FF\", true); // U+00FF LATIN SMALL LETTER Y WITH DIAERESIS\r\n    test_regex_on_custom_wchars(LR\"([\\u00ff-\\u0100])\", L\"\\u0100\", true); // U+0100 LATIN CAPITAL LETTER A WITH MACRON\r\n    test_regex_on_custom_wchars(LR\"([\\u00ff-\\u0100])\", L\"\\u0101\", false); // U+0101 LATIN SMALL LETTER A WITH MACRON\r\n\r\n    // test ranges with negative upper boundary when signed\r\n    test_regex_on_custom_wchars(\r\n        LR\"([\\u7fed-\\u8123])\", L\"\\u7fed\", true); // U+7FED CJK UNIFIED IDEOGRAPH-7FED, U+8123 CJK UNIFIED IDEOGRAPH-8123\r\n    test_regex_on_custom_wchars(LR\"([\\u7fed-\\u8123])\", L\"\\u8123\", true);\r\n    test_regex_on_custom_wchars(LR\"([\\u7fed-\\u8123])\", L\"\\u8001\", true); // U+8001 CJK UNIFIED IDEOGRAPH-8001\r\n    test_regex_on_custom_wchars(LR\"([\\u7fed-\\u8123])\", L\"\\u7fec\", false); // U+7FEC CJK UNIFIED IDEOGRAPH-7FEC\r\n    test_regex_on_custom_wchars(LR\"([\\u7fed-\\u8123])\", L\"\\u8124\", false); // U+8124 CJK UNIFIED IDEOGRAPH-8124\r\n\r\n    // test ranges with boundaries exceeding UINT_MAX for small and large ranges\r\n    for (unsigned long long upper_bound : {0x100000006ULL, 0x100000036ULL}) {\r\n        const unsigned long long pattern[] = {L'[', 0x100000004ULL, L'-', upper_bound, L']'};\r\n        for (unsigned long long matched = 0x100000004ULL; matched <= upper_bound; ++matched) {\r\n            test_regex_on_custom_ullongs(begin(pattern), end(pattern), &matched, &matched + 1, true);\r\n        }\r\n\r\n        for (const unsigned long long unmatched :\r\n            {0x00000004ULL, upper_bound & 0xffffffffULL, 0x100000003ULL, upper_bound + 1ULL}) {\r\n            test_regex_on_custom_ullongs(begin(pattern), end(pattern), &unmatched, &unmatched + 1, false);\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_gh_5671() {\r\n    // GH-5671: Remove non-standard _Uelem from matcher\r\n    //\r\n    // The following tests check that internal narrowing conversions to integers in parser and matcher\r\n    // as well as signedness of the character type are handled appropriately\r\n    // even when using (weird) custom character types.\r\n    test_gh_5671_single_character_patterns();\r\n    test_gh_5671_line_terminators();\r\n    test_gh_5671_word_boundaries();\r\n    test_gh_5671_character_ranges();\r\n}\r\n\r\nint main() {\r\n    test_gh_5592();\r\n    test_gh_5671();\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001001_random_rejection_rounding/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001001_random_rejection_rounding/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cmath>\r\n#include <cstdint>\r\n#include <map>\r\n#include <random>\r\n\r\nvoid test_gh_1001() {\r\n    // GH-1001 <random>: binomial_distribution is broken\r\n    constexpr int N{1000};\r\n    constexpr double p{.001238};\r\n    constexpr int seed{12345};\r\n    constexpr int iters{1'000'000};\r\n    std::map<int, int> frequency;\r\n\r\n    std::mt19937 mt_rand(seed);\r\n\r\n    std::binomial_distribution<int> distribution(N, p);\r\n\r\n    for (int i = 0; i < iters; ++i) {\r\n        ++frequency[distribution(mt_rand)];\r\n    }\r\n\r\n    double mean_x{0.0};\r\n    for (const auto& valueCountPair : frequency) {\r\n        mean_x += valueCountPair.first * static_cast<double>(valueCountPair.second) / iters;\r\n    }\r\n    const double p0_x{static_cast<double>(frequency[0]) / iters};\r\n    const double p1_x{static_cast<double>(frequency[1]) / iters};\r\n\r\n    const double p0{std::pow(1.0 - p, static_cast<double>(N))};\r\n    const double p1{1000.0 * p * std::pow(1.0 - p, static_cast<double>(N - 1))};\r\n    const double mean{p * N};\r\n\r\n    assert(std::abs(mean_x / mean - 1.0) < 0.01);\r\n    assert(std::abs(p0_x / p0 - 1.0) < 0.01);\r\n    assert(std::abs(p1_x / p1 - 1.0) < 0.01);\r\n}\r\n\r\nint main() {\r\n    test_gh_1001();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001010_filesystem_error_encoding/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001010_filesystem_error_encoding/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <exception>\r\n#include <filesystem>\r\n#include <string_view>\r\n#include <system_error>\r\n\r\nusing namespace std;\r\nnamespace fs = std::filesystem;\r\n\r\nvoid test_filesystem_error_with_bad_codepage_characters() {\r\n    fs::path problem_path{L\"problematic\\xD83Dtestpath\"}; // path containing lone high surrogate\r\n\r\n    // Make sure the path is not encodable in our current locale, otherwise the test tests nothing\r\n    bool exception_caught = false;\r\n    try {\r\n        (void) problem_path.string();\r\n    } catch (const exception&) {\r\n        exception_caught = true;\r\n    }\r\n    assert(exception_caught);\r\n\r\n    // filesystem_error should handle the non-encodable character gracefully when building its message\r\n    fs::filesystem_error err{\"testexception\", problem_path, error_code{}};\r\n    assert(string_view{err.what()}.find(\"problematic\") != string_view::npos);\r\n    assert(string_view{err.what()}.find(\"testpath\") != string_view::npos);\r\n}\r\n\r\nint main() {\r\n    test_filesystem_error_with_bad_codepage_characters();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001017_discrete_distribution_out_of_range/bad_random_engine.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <iterator>\r\n#include <limits>\r\n#include <type_traits>\r\n\r\nnamespace detail {\r\n    struct bad_rng_pattern_sentinel {};\r\n\r\n    template <typename UInt, int Width = std::numeric_limits<UInt>::digits>\r\n    class bad_rng_pattern_generator { // generates bit patterns for bad_random_engine\r\n    public:\r\n        using difference_type   = std::ptrdiff_t;\r\n        using value_type        = UInt;\r\n        using pointer           = const UInt*;\r\n        using reference         = const UInt&;\r\n        using iterator_category = std::input_iterator_tag;\r\n        using my_iter           = bad_rng_pattern_generator;\r\n        using my_sentinel       = bad_rng_pattern_sentinel;\r\n\r\n        static constexpr value_type top_bit    = value_type{1} << (Width - 1);\r\n        static constexpr value_type lower_bits = top_bit - 1;\r\n        static constexpr value_type mask_bits  = top_bit | lower_bits;\r\n        static constexpr int final_bit_count   = (Width - 1) / 2 + 1;\r\n\r\n        constexpr reference operator*() const noexcept { // gets the current pattern\r\n            return current_value_;\r\n        }\r\n\r\n        constexpr pointer operator->() const noexcept {\r\n            return &current_value_;\r\n        }\r\n\r\n        constexpr my_iter& operator++() noexcept { // generates the next pattern\r\n            current_value_ = (current_value_ & lower_bits) << 1 | (current_value_ & top_bit) >> (Width - 1);\r\n\r\n            if (current_shift_ < Width - 1 && current_bit_count_ != 0 && current_bit_count_ != Width) {\r\n                ++current_shift_;\r\n                return *this;\r\n            }\r\n\r\n            current_shift_ = 0;\r\n\r\n            if (current_bit_count_ < final_bit_count) { // n 1's -> n 0's\r\n                current_bit_count_ = Width - current_bit_count_;\r\n                current_value_ ^= mask_bits;\r\n            } else if (current_bit_count_ > final_bit_count) { // n 0's -> (n+1) 1's\r\n                current_bit_count_ = Width - current_bit_count_ + 1;\r\n                current_value_     = (current_value_ ^ mask_bits) << 1 | value_type{1};\r\n            } else { // all bit patterns have been generated, back to all 0's\r\n                current_bit_count_ = 0;\r\n                current_value_     = value_type{0};\r\n            }\r\n\r\n            return *this;\r\n        }\r\n\r\n        constexpr my_iter operator++(int) noexcept {\r\n            const my_iter old = *this;\r\n            ++*this;\r\n            return old;\r\n        }\r\n\r\n        friend constexpr bool operator==(const my_iter& a, const my_iter& b) noexcept {\r\n            return *a == *b;\r\n        }\r\n\r\n        friend constexpr bool operator!=(const my_iter& a, const my_iter& b) noexcept {\r\n            return !(a == b);\r\n        }\r\n\r\n        friend constexpr bool operator==(const my_iter& iter, my_sentinel) noexcept {\r\n            return *iter == 0;\r\n        }\r\n\r\n        friend constexpr bool operator!=(const my_iter& iter, const my_sentinel sentinel) noexcept {\r\n            return !(iter == sentinel);\r\n        }\r\n\r\n        friend constexpr bool operator==(const my_sentinel sentinel, const my_iter& iter) noexcept {\r\n            return iter == sentinel;\r\n        }\r\n\r\n        friend constexpr bool operator!=(const my_sentinel sentinel, const my_iter& iter) noexcept {\r\n            return !(iter == sentinel);\r\n        }\r\n\r\n    private:\r\n        value_type current_value_ = 0;\r\n        int current_bit_count_    = 0;\r\n        int current_shift_        = 0;\r\n    };\r\n} // namespace detail\r\n\r\ntemplate <typename UInt, int Width = std::numeric_limits<UInt>::digits, int Dimension = 1>\r\nclass bad_random_engine {\r\n    // Generates bit patterns with at most two transitions between 0's and 1's.\r\n    // (e.g. 00000000, 11111111, 00001111, 11110000, 00011000, 11100111)\r\n    // When its output is grouped into subsequences of length Dimension, it cycles through all possible subsequences\r\n    // containing only such bit patterns. Bit patterns with few 1's or few 0's are generated first, starting from all\r\n    // 0's and all 1's.\r\n\r\n    static_assert(std::is_integral_v<UInt>, \"bad_random_engine: UInt should be unsigned integral type\");\r\n    static_assert(std::is_unsigned_v<UInt>, \"bad_random_engine: UInt should be unsigned integral type\");\r\n    static_assert(Width > 0, \"bad_random_engine: invalid value for Width\");\r\n    static_assert(Width <= std::numeric_limits<UInt>::digits, \"bad_random_engine: invalid value for Width\");\r\n    static_assert(Dimension > 0, \"bad_random_engine: invalid value for Dimension\");\r\n\r\npublic:\r\n    using result_type = UInt;\r\n\r\n    static constexpr result_type(min)() noexcept {\r\n        return result_type{0};\r\n    }\r\n    static constexpr result_type(max)() noexcept {\r\n        return generator::mask_bits;\r\n    }\r\n\r\n    constexpr result_type operator()() noexcept {\r\n        const result_type result = *generators_[current_dimension_];\r\n\r\n        if (current_dimension_ < Dimension - 1) {\r\n            ++current_dimension_;\r\n        } else {\r\n            current_dimension_ = 0;\r\n\r\n            if (!generate_next()) {\r\n                has_cycled_through_ = true;\r\n            }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    constexpr bool has_cycled_through() const noexcept { // have we finished a full cycle?\r\n        return has_cycled_through_;\r\n    }\r\n\r\nprivate:\r\n    using generator = detail::bad_rng_pattern_generator<UInt, Width>;\r\n    using sentinel  = detail::bad_rng_pattern_sentinel;\r\n\r\n    constexpr bool generate_next() noexcept { // generates the next subsequence, returns false if back to all 0's\r\n        if (limit_value_ != sentinel{}) {\r\n            for (int i = 0; i < limit_dimension_; ++i) {\r\n                if (generators_[i] != limit_value_) {\r\n                    ++generators_[i];\r\n                    return true;\r\n                } else {\r\n                    generators_[i] = generator{};\r\n                }\r\n            }\r\n\r\n            for (int i = limit_dimension_ + 1; i < Dimension; ++i) {\r\n                ++generators_[i];\r\n                if (generators_[i] != limit_value_) {\r\n                    return true;\r\n                } else {\r\n                    generators_[i] = generator{};\r\n                }\r\n            }\r\n\r\n            _Analysis_assume_(limit_dimension_ < Dimension);\r\n            generators_[limit_dimension_] = generator{};\r\n\r\n            if (limit_dimension_ < Dimension - 1) {\r\n                ++limit_dimension_;\r\n                generators_[limit_dimension_] = limit_value_;\r\n                return true;\r\n            }\r\n        }\r\n\r\n        limit_dimension_ = 0;\r\n        generators_[0]   = ++limit_value_;\r\n        return limit_value_ != sentinel{};\r\n    }\r\n\r\n    generator generators_[Dimension] = {};\r\n    generator limit_value_{};\r\n    int limit_dimension_     = 0;\r\n    int current_dimension_   = 0;\r\n    bool has_cycled_through_ = false;\r\n};\r\n\r\n// the cycle length of bad_random_generator is 32 546 312\r\nusing bad_random_generator = bad_random_engine<std::uint64_t, 64, 2>;\r\n"
  },
  {
    "path": "tests/std/tests/GH_001017_discrete_distribution_out_of_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# Skip /clr:pure configurations; they pass but take an extremely long time to run, risking test timeouts.\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001017_discrete_distribution_out_of_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <random>\r\n\r\n#include \"bad_random_engine.hpp\"\r\n\r\ntemplate <class Distribution>\r\nvoid Test_for_NaN_Inf(Distribution&& distribution) {\r\n    for (bad_random_generator rng; !rng.has_cycled_through();) {\r\n        const auto rand_value = distribution(rng);\r\n        assert(!isnan(rand_value) && !isinf(rand_value));\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid Test_distributions() {\r\n    // Additionally test GH-1174 \"<random>: Some random number distributions could return NaN\"\r\n    Test_for_NaN_Inf(std::normal_distribution<T>{});\r\n    Test_for_NaN_Inf(std::lognormal_distribution<T>{});\r\n    Test_for_NaN_Inf(std::fisher_f_distribution<T>{});\r\n    Test_for_NaN_Inf(std::student_t_distribution<T>{});\r\n}\r\n\r\nint main() {\r\n    std::discrete_distribution<int> dist{1, 1, 1, 1, 1, 1};\r\n    bad_random_generator rng;\r\n\r\n    while (!rng.has_cycled_through()) {\r\n        const auto rand_value = dist(rng);\r\n        assert(0 <= rand_value && rand_value < 6);\r\n    }\r\n\r\n    Test_distributions<float>();\r\n    Test_distributions<double>();\r\n    Test_distributions<long double>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001059_hyperbolic_truncation/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001059_hyperbolic_truncation/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// GH-1059: \"Incorrect const float values in xvalues.cpp files\"\r\n// The _Xbig constants, used to determine when the exp(-x) terms in\r\n// cosh and sinh can be ignored, have off-by-one and integer\r\n// truncation errors.\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <cmath>\r\n#include <complex>\r\n#include <iostream>\r\n#include <limits>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nvoid Test(T x) {\r\n    const complex<T> z{x};\r\n    const T exp_over_2 = T{0.5} * real(exp(z));\r\n\r\n    const T cosh_expected = exp_over_2 + T{0.25} / exp_over_2;\r\n    const T cosh_calc     = real(cosh(z));\r\n    if (cosh_expected != cosh_calc) {\r\n        cout.precision(numeric_limits<T>::digits10 + 2);\r\n        cout << \"x = \" << x << '\\n'\r\n             << \"cosh (expected)   = \" << cosh_expected << '\\n'\r\n             << \"cosh (calculated) = \" << cosh_calc << endl;\r\n        assert(cosh_expected == cosh_calc);\r\n    }\r\n\r\n    const T sinh_expected = exp_over_2 - T{0.25} / exp_over_2;\r\n    const T sinh_calc     = real(sinh(z));\r\n    if (sinh_expected != sinh_calc) {\r\n        cout.precision(numeric_limits<T>::digits10 + 2);\r\n        cout << \"x = \" << x << '\\n'\r\n             << \"sinh (expected)   = \" << sinh_expected << '\\n'\r\n             << \"sinh (calculated) = \" << sinh_calc << endl;\r\n        assert(sinh_expected == sinh_calc);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nconstexpr array<T, 3> GenerateValues() {\r\n    // {old crossover, difference ~ 1 ulp, difference ~ ulp/2}\r\n    constexpr int DIG = numeric_limits<T>::digits;\r\n    return {DIG * 347L / 1000L, DIG * static_cast<T>(0.347), (DIG + 1) * static_cast<T>(0.347)};\r\n}\r\n\r\nint main() {\r\n    constexpr auto fValues{GenerateValues<float>()};\r\n    for (const auto& x : fValues) {\r\n        Test<float>(x);\r\n    }\r\n\r\n    constexpr auto dValues{GenerateValues<double>()};\r\n    for (const auto& x : dValues) {\r\n        Test<double>(x);\r\n    }\r\n\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001086_partial_sort_copy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001086_partial_sort_copy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// GH-1086: \"std::partial_sort_copy performs an unconstrained operation\"\r\n// partial_sort_copy was constructing an object of the source range's value type\r\n// from the result of dereferencing an iterator, which is not allowed by the\r\n// specification of the algorithm.\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <iterator>\r\n\r\nusing namespace std;\r\n\r\nstruct wrapper {\r\n    wrapper() = default;\r\n    constexpr explicit wrapper(int i) : x{i} {}\r\n\r\n    bool operator<(const wrapper& that) const {\r\n        return x < that.x;\r\n    }\r\n\r\n    int x;\r\n};\r\n\r\nstruct source : wrapper {\r\n    source() = default;\r\n\r\n    using wrapper::wrapper;\r\n\r\n    source(const source&)            = delete;\r\n    source& operator=(const source&) = delete;\r\n};\r\n\r\nstruct target : wrapper {\r\n    target() = default;\r\n\r\n    using wrapper::wrapper;\r\n\r\n    target(target&&)            = default;\r\n    target& operator=(target&&) = default;\r\n\r\n    target& operator=(const source& w) {\r\n        x = w.x;\r\n        return *this;\r\n    }\r\n};\r\n\r\nint main() {\r\n    constexpr int src_size = 4;\r\n    source src[src_size];\r\n    constexpr int dst_size = 2;\r\n    target dst[dst_size];\r\n\r\n    for (int i = 0; i < src_size; ++i) {\r\n        src[i].x = src_size - 1 - i;\r\n    }\r\n\r\n    partial_sort_copy(begin(src), end(src), begin(dst), end(dst));\r\n\r\n    for (int i = 0; i < dst_size; ++i) {\r\n        assert(dst[i].x == i);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001103_countl_zero_correctness/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001103_countl_zero_correctness/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <bit>\r\n#include <cassert>\r\n#include <limits>\r\n\r\n// Indirectly test countl_zero/countr_zero on old x86/x64 processors by testing a private helper,\r\n// which is different from the usual branch.\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    // This test is applicable only to x86 and x64 platforms\r\n#if (defined(_M_IX86) && !defined(_M_HYBRID_X86_ARM64)) || (defined(_M_X64) && !defined(_M_ARM64EC))\r\n    assert(_Countl_zero_bsr(static_cast<unsigned char>(0x00)) == 8);\r\n    assert(_Countl_zero_bsr(static_cast<unsigned char>(0x13)) == 3);\r\n    assert(_Countl_zero_bsr(static_cast<unsigned char>(0x83)) == 0);\r\n    assert(_Countl_zero_bsr(static_cast<unsigned char>(0xF8)) == 0);\r\n\r\n    assert(_Countl_zero_bsr(static_cast<unsigned short>(0x0000)) == 16);\r\n    assert(_Countl_zero_bsr(static_cast<unsigned short>(0x0013)) == 11);\r\n    assert(_Countl_zero_bsr(static_cast<unsigned short>(0x8003)) == 0);\r\n    assert(_Countl_zero_bsr(static_cast<unsigned short>(0xF008)) == 0);\r\n\r\n    assert(_Countl_zero_bsr(static_cast<unsigned int>(0x0000'0000)) == 32);\r\n    assert(_Countl_zero_bsr(static_cast<unsigned int>(0x0000'0013)) == 27);\r\n    assert(_Countl_zero_bsr(static_cast<unsigned int>(0x8000'0003)) == 0);\r\n    assert(_Countl_zero_bsr(static_cast<unsigned int>(0xF000'0008)) == 0);\r\n\r\n    assert(_Countl_zero_bsr(static_cast<unsigned long>(0x0000'0000)) == 32);\r\n    assert(_Countl_zero_bsr(static_cast<unsigned long>(0x0000'0013)) == 27);\r\n    assert(_Countl_zero_bsr(static_cast<unsigned long>(0x8000'0003)) == 0);\r\n    assert(_Countl_zero_bsr(static_cast<unsigned long>(0xF000'0008)) == 0);\r\n\r\n    assert(_Countl_zero_bsr(static_cast<unsigned long long>(0x0000'0000'0000'0000)) == 64);\r\n    assert(_Countl_zero_bsr(static_cast<unsigned long long>(0x0000'0000'0000'0013)) == 59);\r\n    assert(_Countl_zero_bsr(static_cast<unsigned long long>(0x8000'0000'0000'0003)) == 0);\r\n    assert(_Countl_zero_bsr(static_cast<unsigned long long>(0xF000'0000'0000'0008)) == 0);\r\n\r\n    assert(_Countr_zero_bsf(static_cast<unsigned char>(0x00)) == 8);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned char>(0x13)) == 0);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned char>(0x82)) == 1);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned char>(0x80)) == 7);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned char>(0xF8)) == 3);\r\n\r\n    assert(_Countr_zero_bsf(static_cast<unsigned short>(0x0000)) == 16);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned short>(0x0013)) == 0);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned short>(0x8002)) == 1);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned short>(0x8000)) == 15);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned short>(0xF008)) == 3);\r\n\r\n    assert(_Countr_zero_bsf(static_cast<unsigned int>(0x0000'0000)) == 32);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned int>(0x0000'0013)) == 0);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned int>(0x8000'0002)) == 1);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned int>(0x8000'0000)) == 31);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned int>(0xF000'0008)) == 3);\r\n\r\n    assert(_Countr_zero_bsf(static_cast<unsigned long>(0x0000'0000)) == 32);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned long>(0x0000'0013)) == 0);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned long>(0x8000'0002)) == 1);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned long>(0x8000'0000)) == 31);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned long>(0xF000'0008)) == 3);\r\n\r\n    assert(_Countr_zero_bsf(static_cast<unsigned long long>(0x0000'0000'0000'0000)) == 64);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned long long>(0x0000'0000'0000'0013)) == 0);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned long long>(0x8000'0000'0000'0002)) == 1);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned long long>(0x8000'0000'0000'0000)) == 63);\r\n    assert(_Countr_zero_bsf(static_cast<unsigned long long>(0xF000'0000'0000'0008)) == 3);\r\n#endif // ^^^ (defined(_M_IX86) && !defined(_M_HYBRID_X86_ARM64)) || (defined(_M_X64) && !defined(_M_ARM64EC)) ^^^\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001105_custom_streambuf_throws/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001105_custom_streambuf_throws/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <istream>\r\n#include <stdexcept>\r\n\r\nstruct bad_buf : std::streambuf {\r\n    bad_buf() {\r\n        throw std::runtime_error(\"throw in constructor!\");\r\n    }\r\n};\r\n\r\nstruct custom_stream : std::istream {\r\n    custom_stream() : std::istream(new bad_buf{}) {}\r\n};\r\n\r\nint main() {\r\n\r\n    {\r\n        // GH-1105 std::istream destructor should not crash if custom streambuf implementation throws.\r\n        try {\r\n            custom_stream f{};\r\n        } catch (const std::runtime_error&) {\r\n            assert(true);\r\n        }\r\n    }\r\n\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001123_random_cast_out_of_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001123_random_cast_out_of_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cmath>\r\n#include <cstdint>\r\n#include <limits>\r\n#include <random>\r\n\r\n#pragma warning(disable : 4984) // if constexpr is a C++17 language extension\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wc++17-extensions\"\r\n#endif // __clang__\r\n\r\ntemplate <class T>\r\nusing lim = std::numeric_limits<T>;\r\n\r\ntemplate <class IntType, class FltType>\r\nvoid CheckUpperBound(IntType i, FltType fmax) {\r\n    const auto x{std::_Float_upper_bound<FltType>(i)};\r\n    const auto y{std::nextafter(x, FltType{0})}; // lower bound, <= i\r\n\r\n    assert(y < fmax);\r\n    assert(static_cast<IntType>(y) <= i);\r\n    assert(x <= fmax);\r\n    if (x < fmax) {\r\n        assert(static_cast<IntType>(x) > i);\r\n    }\r\n}\r\n\r\ntemplate <class IntType, class FltType>\r\nvoid TestUpperBoundExhaustive() {\r\n    const auto fmax{exp2(static_cast<FltType>(lim<IntType>::digits))};\r\n    IntType i{0};\r\n    do {\r\n        CheckUpperBound(i, fmax);\r\n    } while (++i != IntType{0});\r\n}\r\n\r\ntemplate <class T>\r\nconstexpr T FillLsb(int n) {\r\n    if (n <= 0) {\r\n        return 0;\r\n    }\r\n    T x{T{1} << (n - 1)};\r\n    return (x - 1) ^ x;\r\n}\r\n\r\ntemplate <class IntType, class FltType>\r\nvoid TestUpperBoundSelective() {\r\n    const auto fmax{exp2(static_cast<FltType>(lim<IntType>::digits))};\r\n    CheckUpperBound(IntType{0}, fmax);\r\n    CheckUpperBound(IntType{1}, fmax);\r\n    CheckUpperBound(lim<IntType>::max(), fmax);\r\n\r\n    constexpr int diff{lim<IntType>::digits - lim<FltType>::digits};\r\n    if constexpr (diff > 0) {\r\n        // crossover from ulp < 1 to ulp = 1\r\n        constexpr auto a{FillLsb<IntType>(lim<FltType>::digits - 1)};\r\n        CheckUpperBound(a - 1, fmax);\r\n        CheckUpperBound(a, fmax);\r\n\r\n        // crossover from ulp = 1 to ulp > 1\r\n        constexpr auto b{FillLsb<IntType>(lim<FltType>::digits)};\r\n        CheckUpperBound(b, fmax);\r\n        CheckUpperBound(b + 1, fmax);\r\n        CheckUpperBound(b + 2, fmax);\r\n\r\n        // saturation at the largest representable IntType\r\n        constexpr auto c{FillLsb<IntType>(lim<FltType>::digits) << diff};\r\n        CheckUpperBound(c - 1, fmax);\r\n        CheckUpperBound(c, fmax);\r\n        CheckUpperBound(c + 1, fmax);\r\n    }\r\n}\r\n\r\nint main() {\r\n    TestUpperBoundExhaustive<std::uint8_t, float>();\r\n    TestUpperBoundExhaustive<std::uint16_t, float>();\r\n    TestUpperBoundSelective<std::uint32_t, float>();\r\n\r\n    TestUpperBoundExhaustive<unsigned short, double>();\r\n    TestUpperBoundSelective<unsigned int, double>();\r\n    TestUpperBoundSelective<unsigned long, double>();\r\n    TestUpperBoundSelective<unsigned long long, double>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001277_num_get_bad_grouping/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001277_num_get_bad_grouping/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <ios>\r\n#include <locale>\r\n#include <string>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nclass my_facet : public num_get<char, const char*> {\r\npublic:\r\n    explicit my_facet(size_t refs = 0) : num_get<char, const char*>(refs) {}\r\n};\r\n\r\nclass special_numpunct : public numpunct<char> {\r\npublic:\r\n    special_numpunct() : numpunct<char>() {}\r\n\r\nprotected:\r\n    string do_grouping() const override {\r\n        return \"\\1\\2\\1\"s;\r\n    }\r\n};\r\n\r\n// Test good and bad grouping for integers\r\ntemplate <class Integer, enable_if_t<is_integral_v<Integer>, int> = 0>\r\nvoid test_good_and_bad_grouping() {\r\n    const my_facet f(1);\r\n    ios instr(nullptr);\r\n    instr.imbue(locale(locale(), new special_numpunct));\r\n\r\n    instr.setf(ios_base::fmtflags{}, ios_base::basefield);\r\n\r\n    Integer v = 0;\r\n    {\r\n        v                     = static_cast<Integer>(-1);\r\n        const char sep_str[]  = \"0,17,7\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == static_cast<Integer>(0177));\r\n    }\r\n    {\r\n        v                     = static_cast<Integer>(-1);\r\n        const char sep_str[]  = \"01,77\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v == static_cast<Integer>(0177));\r\n    }\r\n    {\r\n        v                     = static_cast<Integer>(-1);\r\n        const char sep_str[]  = \"1,72,9\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == static_cast<Integer>(1729));\r\n    }\r\n    {\r\n        v                     = static_cast<Integer>(-1);\r\n        const char sep_str[]  = \"172,9\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v == static_cast<Integer>(1729));\r\n    }\r\n    {\r\n        v                     = static_cast<Integer>(-1);\r\n        const char sep_str[]  = \"0x1,72,9\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == static_cast<Integer>(0x1729));\r\n    }\r\n    {\r\n        v                     = static_cast<Integer>(-1);\r\n        const char sep_str[]  = \"0x1,729\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v == static_cast<Integer>(0x1729));\r\n    }\r\n}\r\n\r\n// Test good and bad grouping for floating-point numbers\r\ntemplate <class Flt, enable_if_t<is_floating_point_v<Flt>, int> = 0>\r\nvoid test_good_and_bad_grouping() {\r\n    const my_facet f(1);\r\n    ios instr(nullptr);\r\n    instr.imbue(locale(locale(), new special_numpunct));\r\n\r\n    Flt v = 0;\r\n    {\r\n        v                     = static_cast<Flt>(-1);\r\n        const char sep_str[]  = \"1,72,9\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == static_cast<Flt>(1729.0));\r\n    }\r\n    {\r\n        v                     = static_cast<Flt>(-1);\r\n        const char sep_str[]  = \"1,72,9.0\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == static_cast<Flt>(1729.0));\r\n    }\r\n    {\r\n        v                     = static_cast<Flt>(-1);\r\n        const char sep_str[]  = \"1,72,9.125\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == static_cast<Flt>(1729.125));\r\n    }\r\n    {\r\n        v                     = static_cast<Flt>(-1);\r\n        const char sep_str[]  = \"0x1,72,9\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == static_cast<Flt>(0x1729.0p0));\r\n    }\r\n    {\r\n        v                     = static_cast<Flt>(-1);\r\n        const char sep_str[]  = \"0x1,72,9.0\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == static_cast<Flt>(0x1729.0p0));\r\n    }\r\n    {\r\n        v                     = static_cast<Flt>(-1);\r\n        const char sep_str[]  = \"0x1,72,9.3\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == static_cast<Flt>(0x1729.3p0));\r\n    }\r\n    {\r\n        v                     = static_cast<Flt>(-1);\r\n        const char sep_str[]  = \"1,729\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v == static_cast<Flt>(1729.0));\r\n    }\r\n    {\r\n        v                     = static_cast<Flt>(-1);\r\n        const char sep_str[]  = \"1,729.0\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v == static_cast<Flt>(1729.0));\r\n    }\r\n    {\r\n        v                     = static_cast<Flt>(-1);\r\n        const char sep_str[]  = \"1,729.125\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v == static_cast<Flt>(1729.125));\r\n    }\r\n    {\r\n        v                     = static_cast<Flt>(-1);\r\n        const char sep_str[]  = \"0x172,9\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v == static_cast<Flt>(0x1729.0p0));\r\n    }\r\n    {\r\n        v                     = static_cast<Flt>(-1);\r\n        const char sep_str[]  = \"0x172,9.0\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v == static_cast<Flt>(0x1729.0p0));\r\n    }\r\n    {\r\n        v                     = static_cast<Flt>(-1);\r\n        const char sep_str[]  = \"0x172,9.3\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v == static_cast<Flt>(0x1729.3p0));\r\n    }\r\n\r\n    // separators at unexpected places\r\n    {\r\n        v                     = static_cast<Flt>(-1);\r\n        const char sep_str[]  = \",1,72,9\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v == static_cast<Flt>(1729.0));\r\n    }\r\n    {\r\n        v                     = static_cast<Flt>(-1);\r\n        const char sep_str[]  = \"1,72,9,,\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v == static_cast<Flt>(1729.0));\r\n    }\r\n    {\r\n        v                     = static_cast<Flt>(-1);\r\n        const char sep_str[]  = \",+1,72,9\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v == static_cast<Flt>(1729.0));\r\n    }\r\n    {\r\n        v                     = static_cast<Flt>(-1);\r\n        const char sep_str[]  = \"-,172,9,,.0e0\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v == static_cast<Flt>(-1729.0));\r\n    }\r\n}\r\n\r\nclass my_numput : public num_put<char, char*> {\r\npublic:\r\n    explicit my_numput(size_t refs = 0) : num_put<char, char*>(refs) {}\r\n};\r\n\r\nclass another_numpunct : public numpunct<char> {\r\npublic:\r\n    another_numpunct() : numpunct<char>() {}\r\n\r\nprotected:\r\n    string do_grouping() const override {\r\n        return \"\\2\\3\\4\"s;\r\n    }\r\n};\r\n\r\n// Test good and bad grouping for void*\r\nvoid test_good_and_bad_grouping_pointer() {\r\n    const void* ptr = reinterpret_cast<const void*>(static_cast<uintptr_t>(0xdeadbeef));\r\n    const my_facet f(1);\r\n    const my_numput of(1);\r\n    ios instr(nullptr);\r\n    instr.imbue(locale(locale(), new special_numpunct));\r\n\r\n    {\r\n        ios ostr(nullptr);\r\n        ostr.imbue(locale(locale(), new special_numpunct));\r\n\r\n        char buf[32];\r\n        const auto written_end = of.put(buf, ostr, '\\0', ptr);\r\n        *written_end           = '\\0';\r\n\r\n        void* p               = nullptr;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const auto read_end   = f.get(buf, buf + sizeof(buf), instr, err, p);\r\n        assert(read_end == written_end);\r\n        assert(err == instr.goodbit);\r\n        assert(p == ptr);\r\n    }\r\n    {\r\n        ios ostr(nullptr);\r\n        ostr.imbue(locale(locale(), new another_numpunct));\r\n\r\n        char buf[32];\r\n        const auto written_end = of.put(buf, ostr, '\\0', ptr);\r\n        *written_end           = '\\0';\r\n\r\n        void* p               = nullptr;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const auto read_end   = f.get(buf, buf + sizeof(buf), instr, err, p);\r\n        assert(read_end == written_end);\r\n        assert(err == instr.failbit);\r\n        assert(p == ptr);\r\n    }\r\n}\r\n\r\n// Also test GH-5470 \"<xlocnum>: num_get::do_get for bool stores true in the result when the input has bad grouping,\r\n// even if the input is zero\"\r\nvoid test_good_and_bad_grouping_bool() {\r\n    const my_facet f(1);\r\n    ios instr(nullptr);\r\n    instr.imbue(locale(locale(), new special_numpunct));\r\n\r\n    instr.setf(ios_base::fmtflags{}, ios_base::basefield);\r\n\r\n    {\r\n        bool v                = true;\r\n        const char sep_str[]  = \"0\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(!v);\r\n    }\r\n    {\r\n        bool v                = true;\r\n        const char sep_str[]  = \"-0\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(!v);\r\n    }\r\n    {\r\n        bool v                = true;\r\n        const char sep_str[]  = \"1\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v);\r\n    }\r\n    {\r\n        bool v                = true;\r\n        const char sep_str[]  = \"1,72,9\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v);\r\n    }\r\n    {\r\n        bool v                = true;\r\n        const char sep_str[]  = \"0,17,7\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v);\r\n    }\r\n    {\r\n        bool v                = true;\r\n        const char sep_str[]  = \"0,00,1\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v);\r\n    }\r\n    {\r\n        bool v                = true;\r\n        const char sep_str[]  = \"0,00,0\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(!v);\r\n    }\r\n    {\r\n        bool v                = true;\r\n        const char sep_str[]  = \"01,77\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v);\r\n    }\r\n    {\r\n        bool v                = true;\r\n        const char sep_str[]  = \"00,01\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v);\r\n    }\r\n    {\r\n        bool v                = true;\r\n        const char sep_str[]  = \"00,00\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(!v);\r\n    }\r\n    {\r\n        bool v                = true;\r\n        const char sep_str[]  = \"0x1,72,9\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v);\r\n    }\r\n    {\r\n        bool v                = true;\r\n        const char sep_str[]  = \"0x0,00,1\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v);\r\n    }\r\n    {\r\n        bool v                = true;\r\n        const char sep_str[]  = \"0x0,00,0\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(!v);\r\n    }\r\n    {\r\n        bool v                = true;\r\n        const char sep_str[]  = \"0x1,729\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v);\r\n    }\r\n    {\r\n        bool v                = true;\r\n        const char sep_str[]  = \"0x0,001\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v);\r\n    }\r\n    {\r\n        bool v                = true;\r\n        const char sep_str[]  = \"0x0,000\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(!v);\r\n    }\r\n}\r\n\r\nclass mid_zero_numpunct : public numpunct<char> {\r\npublic:\r\n    mid_zero_numpunct() : numpunct<char>() {}\r\n\r\nprotected:\r\n    string do_grouping() const override {\r\n        return \"\\1\\0\\2\"s;\r\n    }\r\n};\r\n\r\n// Also test non-ending unlimited grouping for integers\r\ntemplate <class Integer, enable_if_t<is_integral_v<Integer>, int> = 0>\r\nvoid test_nonending_unlimited_grouping() {\r\n    const my_facet f(1);\r\n    ios instr(nullptr);\r\n    instr.imbue(locale(locale(), new mid_zero_numpunct));\r\n\r\n    Integer v = 0;\r\n    {\r\n        v                     = static_cast<Integer>(-1);\r\n        const char sep_str[]  = \"17,2,9\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == static_cast<Integer>(1729));\r\n    }\r\n    {\r\n        v                     = static_cast<Integer>(-1);\r\n        const char sep_str[]  = \"17,222,9\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == static_cast<Integer>(172229));\r\n    }\r\n    {\r\n        v                     = static_cast<Integer>(-1);\r\n        const char sep_str[]  = \"0x17,2,9\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n\r\n        instr.flags(ios_base::fmtflags{});\r\n        const char* iter = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == static_cast<Integer>(0x1729));\r\n    }\r\n    {\r\n        v                     = static_cast<Integer>(-1);\r\n        const char sep_str[]  = \"0x17,222,9\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n\r\n        instr.flags(ios_base::fmtflags{});\r\n        const char* iter = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == static_cast<Integer>(0x172229));\r\n    }\r\n}\r\n\r\n// Also test non-ending unlimited grouping for FP numbers\r\ntemplate <class Flt, enable_if_t<is_floating_point_v<Flt>, int> = 0>\r\nvoid test_nonending_unlimited_grouping() {\r\n    const my_facet f(1);\r\n    ios instr(nullptr);\r\n    instr.imbue(locale(locale(), new mid_zero_numpunct));\r\n    Flt v = 0;\r\n    {\r\n        v                     = -1;\r\n        const char sep_str[]  = \"17,2,9.0\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == 1729.0);\r\n    }\r\n    {\r\n        v                     = -1;\r\n        const char sep_str[]  = \"17,222,9.0\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == 172229.0);\r\n    }\r\n    {\r\n        v                     = -1;\r\n        const char sep_str[]  = \"0x17,2,9.0\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == 0x1729.0p0);\r\n    }\r\n    {\r\n        v                     = -1;\r\n        const char sep_str[]  = \"0x17,222,9.0\";\r\n        const size_t len      = sizeof(sep_str) - 1;\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == 0x172229.0p0);\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_good_and_bad_grouping<unsigned short>();\r\n    test_good_and_bad_grouping<unsigned int>();\r\n    test_good_and_bad_grouping<long>();\r\n    test_good_and_bad_grouping<unsigned long>();\r\n    test_good_and_bad_grouping<long long>();\r\n    test_good_and_bad_grouping<unsigned long long>();\r\n    test_good_and_bad_grouping<float>();\r\n    test_good_and_bad_grouping<double>();\r\n    test_good_and_bad_grouping<long double>();\r\n    test_good_and_bad_grouping_pointer();\r\n    test_good_and_bad_grouping_bool();\r\n\r\n    test_nonending_unlimited_grouping<unsigned int>();\r\n    test_nonending_unlimited_grouping<long>();\r\n    test_nonending_unlimited_grouping<unsigned long>();\r\n    test_nonending_unlimited_grouping<long long>();\r\n    test_nonending_unlimited_grouping<unsigned long long>();\r\n    test_nonending_unlimited_grouping<float>();\r\n    test_nonending_unlimited_grouping<double>();\r\n    test_nonending_unlimited_grouping<long double>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001394_msvc_no_unique_address_23/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001394_msvc_no_unique_address_23/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Tests MSVC STL specific behavior on ABI.\r\n\r\n#include <algorithm>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <memory>\r\n#include <memory_resource>\r\n#include <ranges>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nstatic_assert(sizeof(ranges::in_value_result<ranges::dangling, int>) == sizeof(int));\r\nstatic_assert(sizeof(ranges::in_value_result<int, ranges::dangling>) == sizeof(int));\r\n#ifndef __EDG__ // TRANSITION, DevCom-10747012\r\nstatic_assert(is_empty_v<ranges::in_value_result<ranges::dangling, ranges::dangling>>);\r\n#endif // ^^^ no workaround ^^^\r\n\r\nstatic_assert(sizeof(ranges::out_value_result<ranges::dangling, int>) == sizeof(int));\r\nstatic_assert(sizeof(ranges::out_value_result<int, ranges::dangling>) == sizeof(int));\r\n#ifndef __EDG__ // TRANSITION, DevCom-10747012\r\nstatic_assert(is_empty_v<ranges::out_value_result<ranges::dangling, ranges::dangling>>);\r\n#endif // ^^^ no workaround ^^^\r\n\r\nstruct stateless_input_it {\r\n    using value_type      = int;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    int operator*() const noexcept {\r\n        return 42;\r\n    }\r\n\r\n    stateless_input_it& operator++() noexcept {\r\n        return *this;\r\n    }\r\n\r\n    stateless_input_it operator++(int) noexcept {\r\n        return {};\r\n    }\r\n};\r\n\r\nstruct stateless_forward_it {\r\n    using value_type      = int;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    int operator*() const noexcept {\r\n        return 42;\r\n    }\r\n\r\n    stateless_forward_it& operator++() noexcept {\r\n        return *this;\r\n    }\r\n\r\n    stateless_forward_it operator++(int) noexcept {\r\n        return {};\r\n    }\r\n\r\n    friend bool operator==(stateless_forward_it, stateless_forward_it) = default;\r\n};\r\n\r\nstatic_assert(input_iterator<stateless_input_it>);\r\nstatic_assert(forward_iterator<stateless_forward_it>);\r\n\r\nusing test_range                 = ranges::subrange<int*, unreachable_sentinel_t>;\r\nusing test_outer_range           = ranges::subrange<const test_range*, unreachable_sentinel_t>;\r\nusing stateless_input_range      = ranges::subrange<stateless_input_it, unreachable_sentinel_t>;\r\nusing stateless_fwd_range        = ranges::subrange<stateless_forward_it, unreachable_sentinel_t>;\r\nusing stateless_fwd_common_range = ranges::subrange<stateless_forward_it, stateless_forward_it>;\r\n\r\n#ifndef __EDG__ // TRANSITION, DevCom-10747012\r\nstatic_assert(is_empty_v<decltype((test_outer_range{} | views::join_with(test_range{})).end())>);\r\n#endif // ^^^ no workaround ^^^\r\n\r\nstatic_assert(sizeof((stateless_input_range{} | views::enumerate).begin()) == sizeof(ptrdiff_t));\r\n#ifndef __EDG__ // TRANSITION, DevCom-10747012\r\nstatic_assert(is_empty_v<decltype((stateless_input_range{} | views::enumerate).end())>);\r\n#endif // ^^^ no workaround ^^^\r\n\r\nstatic_assert(sizeof((stateless_fwd_range{} | views::chunk(42)).begin()) == sizeof(ptrdiff_t) * 2);\r\n#ifndef __EDG__ // TRANSITION, DevCom-10747012\r\nstatic_assert(sizeof((stateless_fwd_common_range{} | views::chunk(42)).begin()) == sizeof(ptrdiff_t) * 2);\r\n#endif // ^^^ no workaround ^^^\r\n\r\nstatic_assert(sizeof((stateless_fwd_range{} | views::chunk_by(ranges::less{})).begin()) == sizeof(void*) * 2);\r\nstatic_assert(sizeof((stateless_fwd_common_range{} | views::chunk_by(ranges::less{})).begin()) == sizeof(void*) * 2);\r\n\r\n#ifndef __EDG__ // TRANSITION, DevCom-10747012\r\nstatic_assert(is_empty_v<decltype((test_range{} | views::slide(42)).end())>);\r\n#endif // ^^^ no workaround ^^^\r\n\r\nstatic_assert(sizeof(ranges::elements_of<int[1], allocator<int>>) == sizeof(int[1]));\r\nstatic_assert(sizeof(ranges::elements_of<int (&)[1], allocator<int>>) == sizeof(int (*)[1]));\r\nstatic_assert(sizeof(ranges::elements_of<ranges::empty_view<int>, pmr::polymorphic_allocator<int>>)\r\n              == sizeof(pmr::polymorphic_allocator<int>));\r\nstatic_assert(sizeof(ranges::elements_of<ranges::empty_view<int>, allocator<int>>) == 1);\r\n\r\n#ifndef __EDG__ // TRANSITION, DevCom-10747012\r\nstatic_assert(is_empty_v<ranges::elements_of<ranges::empty_view<int>, allocator<int>>>);\r\n#endif // ^^^ no workaround ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_001411_core_headers/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001411_core_headers/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _CORE_HEADERS_ONLY\r\n#define _ENFORCE_ONLY_CORE_HEADERS // Also test GH-311 \"Make it easy to limit the STL to core features\"\r\n\r\n#include <__msvc_all_public_headers.hpp>\r\n\r\n// Also test GH-3103 \"<xatomic.h>: Investigate making this a core header\" and other internal core headers\r\n#include <__msvc_int128.hpp>\r\n#include <__msvc_system_error_abi.hpp>\r\n#include <__msvc_threads_core.hpp>\r\n#include <__msvc_xlocinfo_types.hpp>\r\n#include <xatomic.h>\r\n#include <xbit_ops.h>\r\n#include <xerrc.h>\r\n\r\n#if _HAS_CXX17\r\n#include <xcharconv_tables.h>\r\n#include <xfilesystem_abi.h>\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n#include <__msvc_print.hpp>\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n\r\n// <__msvc_bit_utils.hpp> is included by <bit> and <limits>\r\n// <__msvc_iter_core.hpp> is included by <tuple>\r\n// <xkeycheck.h> should not be included outside of <yvals_core.h>\r\n// <xtr1common> is included by <cstddef>\r\n// <yvals_core.h> is included by every public core header\r\n\r\n// Also test GH-3692 \"Including <isa_availability.h> emits a non-reserved name\"\r\n#include <isa_availability.h>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nSTATIC_ASSERT(std::_Stl_isa_available_sse42 == __ISA_AVAILABLE_SSE42);\r\nSTATIC_ASSERT(std::_Stl_isa_available_avx2 == __ISA_AVAILABLE_AVX2);\r\n\r\n#ifdef _YVALS\r\n#error Core headers should not include <yvals.h>.\r\n#endif\r\n\r\nvoid test_gh_2699() {\r\n    // GH-2699 Vectorized swap emits error LNK2019:\r\n    // unresolved external symbol ___std_swap_ranges_trivially_swappable_noalias\r\n    int cats[]{10, 20, 30};\r\n    int dogs[]{40, 50, 60};\r\n\r\n    std::swap(cats, dogs);\r\n    assert(cats[1] == 50);\r\n    assert(dogs[1] == 20);\r\n\r\n#if _HAS_CXX20\r\n    std::ranges::swap(cats, dogs);\r\n    assert(cats[1] == 20);\r\n    assert(dogs[1] == 50);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\nint main() {\r\n    test_gh_2699();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001530_binomial_accuracy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001530_binomial_accuracy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cmath>\r\n#include <cstddef>\r\n#include <random>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Generator>\r\nvoid test_binomial(const int n, const double mean, Generator& gen) {\r\n    const double p       = mean / n;\r\n    const double var     = n * p * (1.0 - p);\r\n    constexpr double tol = 0.01;\r\n    constexpr double x   = 4.0; // Standard deviation of sample variance should be less than tol / x.\r\n    const size_t it_max  = 2 * static_cast<size_t>(pow(var / (tol / x), 2.0));\r\n    binomial_distribution<> dist(n, p);\r\n\r\n    vector<size_t> counts(static_cast<size_t>(n) + 1);\r\n    for (size_t i = 0; i < it_max; ++i) {\r\n        ++counts[static_cast<size_t>(dist(gen))];\r\n    }\r\n\r\n    double sample_mean = 0.0;\r\n    for (size_t i = 1; i < counts.size(); ++i) {\r\n        sample_mean += static_cast<double>(i) * counts[i];\r\n    }\r\n    sample_mean /= it_max;\r\n\r\n    double sample_var = 0.0;\r\n    for (size_t i = 0; i < counts.size(); ++i) {\r\n        sample_var += counts[i] * pow(i - sample_mean, 2);\r\n    }\r\n    sample_var /= it_max - 1;\r\n\r\n    assert(abs(sample_mean / mean - 1.0) < tol);\r\n    assert(abs(sample_var / var - 1.0) < tol);\r\n}\r\n\r\nint main() {\r\n    mt19937 gen;\r\n    constexpr int n = 25;\r\n    test_binomial(n, 0.99, gen);\r\n    test_binomial(n, n - 0.99, gen);\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001541_case_sensitive_boolalpha/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001541_case_sensitive_boolalpha/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <ios>\r\n#include <sstream>\r\nusing namespace std;\r\n\r\nenum class Parse { Success, Failure };\r\n\r\nstruct TestCase {\r\n    const char* str;\r\n    ios_base::fmtflags flags;\r\n    Parse expected;\r\n    bool result;\r\n};\r\n\r\nconstexpr TestCase test_cases[] = {\r\n    {\"0\", ios_base::fmtflags{}, Parse::Success, false}, //\r\n    {\"1\", ios_base::fmtflags{}, Parse::Success, true}, //\r\n    {\"2\", ios_base::fmtflags{}, Parse::Failure, true}, // N4868 [facet.num.get.virtuals]/6\r\n    {\"WOOF\", ios_base::fmtflags{}, Parse::Failure, false}, // N4868 [facet.num.get.virtuals]/3.6\r\n    {\"false\", ios_base::boolalpha, Parse::Success, false}, //\r\n    {\"true\", ios_base::boolalpha, Parse::Success, true}, //\r\n    {\"WOOF\", ios_base::boolalpha, Parse::Failure, false}, // N4868 [facet.num.get.virtuals]/7\r\n    {\"FALSE\", ios_base::boolalpha, Parse::Failure, false}, // GH-1541\r\n    {\"TRUE\", ios_base::boolalpha, Parse::Failure, false}, // GH-1541\r\n};\r\n\r\nint main() {\r\n    for (const auto& test : test_cases) {\r\n        bool val = !test.result;\r\n        istringstream iss(test.str);\r\n        iss.setf(test.flags);\r\n        iss >> val;\r\n        assert(iss.fail() == (test.expected == Parse::Failure));\r\n        assert(val == test.result);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001596_adl_proof_algorithms/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001596_adl_proof_algorithms/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n#include <algorithm>\r\n#include <cstddef>\r\n#include <memory>\r\n#include <new>\r\n#include <numeric>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#if _HAS_CXX17\r\n#include <execution>\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class Tag>\r\nstruct tagged_truth {\r\n    template <class T>\r\n    constexpr bool operator()(T&&) const noexcept {\r\n        return true;\r\n    }\r\n};\r\n\r\ntemplate <class Tag>\r\nstruct tagged_equal {\r\n    template <class T, class U>\r\n    constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) == std::forward<U>(u)) {\r\n        return std::forward<T>(t) == std::forward<U>(u);\r\n    }\r\n};\r\n\r\ntemplate <class Tag>\r\nstruct tagged_less {\r\n    template <class T, class U>\r\n    constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) < std::forward<U>(u)) {\r\n        return std::forward<T>(t) < std::forward<U>(u);\r\n    }\r\n};\r\n\r\ntemplate <class Tag>\r\nstruct tagged_zero_equality {\r\n    template <class T>\r\n    constexpr auto operator()(T&& t) const //\r\n        -> decltype(std::forward<T>(t) == std::remove_cv_t<std::remove_reference_t<T>>{}) {\r\n        return std::forward<T>(t) == std::remove_cv_t<std::remove_reference_t<T>>{};\r\n    }\r\n};\r\n\r\n#if _HAS_CXX20\r\ntemplate <class Tag>\r\nstruct tagged_compare_three_way {\r\n    template <class T, class U>\r\n    constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) <=> std::forward<U>(u)) {\r\n        return std::forward<T>(t) <=> std::forward<U>(u);\r\n    }\r\n};\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class Tag>\r\nstruct tagged_identity {\r\n    template <class T>\r\n    constexpr T&& operator()(T&& t) const noexcept {\r\n        return std::forward<T>(t);\r\n    }\r\n};\r\n\r\ntemplate <class Tag>\r\nstruct tagged_urng {\r\n    using result_type = unsigned int;\r\n\r\n    static constexpr result_type max() noexcept {\r\n        return static_cast<result_type>(-1);\r\n    }\r\n\r\n    static constexpr result_type min() noexcept {\r\n        return 0;\r\n    }\r\n\r\n    result_type operator()() noexcept {\r\n        return value_++;\r\n    }\r\n\r\n    result_type value_{};\r\n};\r\n\r\ntemplate <class T>\r\nstruct tagged_nontrivial {\r\n    tagged_nontrivial() noexcept {}\r\n    tagged_nontrivial(const tagged_nontrivial&) noexcept {}\r\n    tagged_nontrivial(tagged_nontrivial&&) noexcept {}\r\n\r\n    tagged_nontrivial& operator=(const tagged_nontrivial&) noexcept {\r\n        return *this;\r\n    }\r\n    tagged_nontrivial& operator=(tagged_nontrivial&&) noexcept {\r\n        return *this;\r\n    }\r\n\r\n    ~tagged_nontrivial() noexcept {}\r\n};\r\n\r\ntemplate <class Tag>\r\nstruct tagged_left_selector {\r\n    template <class T>\r\n    constexpr T operator()(T lhs, T) const noexcept {\r\n        return lhs;\r\n    }\r\n};\r\n\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\n\r\nusing simple_truth         = tagged_truth<void>;\r\nusing simple_identity      = tagged_identity<void>;\r\nusing simple_left_selector = tagged_left_selector<void>;\r\nusing simple_zero_equality = tagged_zero_equality<void>;\r\nusing simple_urng          = tagged_urng<void>;\r\n\r\nusing validator                = holder<incomplete>*;\r\nusing validating_truth         = tagged_truth<holder<incomplete>>;\r\nusing validating_equal         = tagged_equal<holder<incomplete>>;\r\nusing validating_less          = tagged_less<holder<incomplete>>;\r\nusing validating_identity      = tagged_identity<holder<incomplete>>;\r\nusing validating_left_selector = tagged_left_selector<holder<incomplete>>;\r\nusing validating_zero_equality = tagged_zero_equality<holder<incomplete>>;\r\nusing validating_urng          = tagged_urng<holder<incomplete>>;\r\nusing validating_nontrivial    = tagged_nontrivial<holder<incomplete>>;\r\n\r\n#if _HAS_CXX20\r\nusing validating_compare_three_way = tagged_compare_three_way<holder<incomplete>>;\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class T>\r\nstruct value_generator {\r\n    T operator()() const {\r\n        return T{};\r\n    }\r\n};\r\n\r\nvoid test_algorithms() {\r\n    int iarr[1]{};\r\n    validator varr[1]{};\r\n\r\n    (void) std::all_of(varr, varr, simple_truth{});\r\n    (void) std::all_of(iarr, iarr, validating_truth{});\r\n\r\n    (void) std::any_of(varr, varr, simple_truth{});\r\n    (void) std::any_of(iarr, iarr, validating_truth{});\r\n\r\n    (void) std::none_of(varr, varr, simple_truth{});\r\n    (void) std::none_of(iarr, iarr, validating_truth{});\r\n\r\n    (void) std::for_each(varr, varr, simple_truth{});\r\n    (void) std::for_each(varr, varr, validating_truth{});\r\n    (void) std::for_each(iarr, iarr, validating_truth{});\r\n\r\n#if _HAS_CXX17\r\n    (void) std::for_each_n(varr, 0, simple_truth{});\r\n    (void) std::for_each_n(varr, 0, validating_truth{});\r\n    (void) std::for_each_n(iarr, 0, validating_truth{});\r\n#endif // _HAS_CXX17\r\n\r\n    (void) std::find(varr, varr, validator{});\r\n\r\n    (void) std::find_if(varr, varr, simple_truth{});\r\n    (void) std::find_if(iarr, iarr, validating_truth{});\r\n\r\n    (void) std::find_if_not(varr, varr, simple_truth{});\r\n    (void) std::find_if_not(iarr, iarr, validating_truth{});\r\n\r\n    (void) std::find_end(varr, varr, varr, varr);\r\n    (void) std::find_end(varr, varr, varr, varr, validating_equal{});\r\n    (void) std::find_end(iarr, iarr, iarr, iarr, validating_equal{});\r\n\r\n    (void) std::find_first_of(varr, varr, varr, varr);\r\n    (void) std::find_first_of(varr, varr, varr, varr, validating_equal{});\r\n    (void) std::find_first_of(iarr, iarr, iarr, iarr, validating_equal{});\r\n\r\n    (void) std::adjacent_find(varr, varr);\r\n    (void) std::adjacent_find(iarr, iarr, validating_equal{});\r\n\r\n    (void) std::count(varr, varr, validator{});\r\n\r\n    (void) std::count_if(varr, varr, simple_truth{});\r\n    (void) std::count_if(iarr, iarr, validating_truth{});\r\n\r\n    (void) std::mismatch(varr, varr, varr);\r\n    (void) std::mismatch(varr, varr, varr, varr);\r\n    (void) std::mismatch(iarr, iarr, iarr, validating_equal{});\r\n    (void) std::mismatch(iarr, iarr, iarr, iarr, validating_equal{});\r\n\r\n    (void) std::equal(varr, varr, varr);\r\n    (void) std::equal(varr, varr, varr, varr);\r\n    (void) std::equal(iarr, iarr, iarr, validating_equal{});\r\n    (void) std::equal(iarr, iarr, iarr, iarr, validating_equal{});\r\n\r\n    (void) std::is_permutation(varr, varr, varr);\r\n    (void) std::is_permutation(varr, varr, varr, validating_equal{});\r\n    (void) std::is_permutation(varr, varr, varr, varr);\r\n    (void) std::is_permutation(varr, varr, varr, varr, validating_equal{});\r\n    (void) std::is_permutation(iarr, iarr, iarr, validating_equal{});\r\n    (void) std::is_permutation(iarr, iarr, iarr, iarr, validating_equal{});\r\n\r\n    (void) std::search(varr, varr, varr, varr);\r\n    (void) std::search(iarr, iarr, iarr, iarr, validating_equal{});\r\n\r\n    (void) std::search_n(varr, varr, 0, validator{});\r\n    (void) std::search_n(iarr, iarr, 0, 0, validating_equal{});\r\n\r\n    int iarr2[1]{};\r\n    validator varr2[1]{};\r\n\r\n    (void) std::copy(varr, varr + 1, varr2);\r\n\r\n    (void) std::copy_n(varr, 1, varr2);\r\n\r\n    (void) std::copy_if(varr, varr + 1, varr2, simple_truth{});\r\n    (void) std::copy_if(iarr, iarr + 1, iarr2, validating_truth{});\r\n\r\n    (void) std::copy_backward(varr, varr + 1, varr2 + 1);\r\n\r\n    (void) std::move(varr, varr + 1, varr2);\r\n\r\n    (void) std::move_backward(varr, varr + 1, varr2 + 1);\r\n\r\n    // (void) std::swap_ranges(varr, varr, varr2); // requires Cpp17ValueSwappable\r\n\r\n    // std::iter_swap(varr, varr2); // requires Cpp17ValueSwappable\r\n\r\n    (void) std::transform(varr, varr, varr2, simple_identity{});\r\n    (void) std::transform(varr, varr, varr, varr2, simple_left_selector{});\r\n    (void) std::transform(iarr, iarr, iarr2, validating_identity{});\r\n    (void) std::transform(iarr, iarr, iarr, iarr2, validating_left_selector{});\r\n\r\n    std::replace(varr, varr, validator{}, validator{});\r\n\r\n    std::replace_if(varr, varr, simple_truth{}, validator{});\r\n    std::replace_if(iarr, iarr, validating_truth{}, 0);\r\n\r\n    (void) std::replace_copy(varr, varr, varr2, validator{}, validator{});\r\n\r\n    (void) std::replace_copy_if(varr, varr, varr2, simple_truth{}, validator{});\r\n    (void) std::replace_copy_if(iarr, iarr, iarr2, validating_truth{}, 0);\r\n\r\n    std::fill(varr, varr, validator{});\r\n\r\n    (void) std::fill_n(varr, 0, validator{});\r\n\r\n    std::generate(varr, varr, value_generator<validator>{});\r\n\r\n    (void) std::generate_n(varr, 0, value_generator<validator>{});\r\n\r\n    (void) std::remove(varr, varr, validator{});\r\n\r\n    (void) std::remove_if(varr, varr, simple_truth{});\r\n    (void) std::remove_if(iarr, iarr, validating_truth{});\r\n\r\n    (void) std::remove_copy(varr, varr, varr2, validator{});\r\n\r\n    (void) std::remove_copy_if(varr, varr, varr2, simple_truth{});\r\n    (void) std::remove_copy_if(iarr, iarr, iarr2, validating_truth{});\r\n\r\n    (void) std::unique(varr, varr);\r\n    (void) std::unique(iarr, iarr, validating_equal{});\r\n\r\n    (void) std::unique_copy(varr, varr, varr2);\r\n    (void) std::unique_copy(iarr, iarr, iarr2, validating_equal{});\r\n\r\n    // (void) std::reverse(varr, varr); // requires Cpp17ValueSwappable\r\n\r\n    (void) std::reverse_copy(varr, varr, varr2);\r\n\r\n    // (void) std::rotate(varr, varr, varr); // requires Cpp17ValueSwappable\r\n\r\n    (void) std::rotate_copy(varr, varr, varr, varr2);\r\n\r\n#if _HAS_CXX17\r\n    (void) std::sample(varr, varr, varr2, 0, simple_urng{});\r\n    (void) std::sample(iarr, iarr, iarr2, 0, validating_urng{});\r\n#endif // _HAS_CXX17\r\n\r\n    // std::shuffle(varr, varr, simple_urng{}); // requires Cpp17ValueSwappable\r\n    std::shuffle(iarr, iarr, validating_urng{});\r\n\r\n    // std::random_shuffle (removed in C++17) also requires Cpp17ValueSwappable\r\n\r\n#if _HAS_CXX20\r\n    (void) std::shift_left(varr, varr, 0);\r\n\r\n    // (void) std::shift_right(varr, varr, 0); // requires Cpp17ValueSwappable\r\n#endif // _HAS_CXX20\r\n\r\n    // std::sort(varr, varr); // requires Cpp17ValueSwappable\r\n    std::sort(iarr, iarr, validating_less{});\r\n\r\n    // std::stable_sort(varr, varr); // requires Cpp17ValueSwappable\r\n    std::stable_sort(iarr, iarr, validating_less{});\r\n\r\n    std::partial_sort(varr, varr, varr); // requires Cpp17ValueSwappable\r\n    std::partial_sort(iarr, iarr, iarr, validating_less{});\r\n\r\n    void* vparr[1]{};\r\n\r\n    (void) std::partial_sort_copy(varr, varr, varr2, varr2); // requires Cpp17ValueSwappable\r\n    (void) std::partial_sort_copy(varr, varr, vparr, vparr);\r\n    (void) std::partial_sort_copy(iarr, iarr, iarr2, iarr2, validating_less{});\r\n\r\n    (void) std::is_sorted(varr, varr);\r\n    (void) std::is_sorted(iarr, iarr, validating_less{});\r\n\r\n    (void) std::is_sorted_until(varr, varr);\r\n    (void) std::is_sorted_until(iarr, iarr, validating_less{});\r\n\r\n    // std::nth_element(varr, varr, varr); // requires Cpp17ValueSwappable\r\n    std::nth_element(iarr, iarr, iarr, validating_less{});\r\n\r\n    (void) std::lower_bound(varr, varr, validator{});\r\n    (void) std::lower_bound(iarr, iarr, 0, validating_less{});\r\n\r\n    (void) std::upper_bound(varr, varr, validator{});\r\n    (void) std::upper_bound(iarr, iarr, 0, validating_less{});\r\n\r\n    (void) std::equal_range(varr, varr, validator{});\r\n    (void) std::equal_range(iarr, iarr, 0, validating_less{});\r\n\r\n    (void) std::binary_search(varr, varr, validator{});\r\n    (void) std::binary_search(iarr, iarr, 0, validating_less{});\r\n\r\n    (void) std::is_partitioned(varr, varr, simple_zero_equality{});\r\n    (void) std::is_partitioned(iarr, iarr, validating_zero_equality{});\r\n\r\n    // (void) std::partition(varr, varr, simple_zero_equality{}); // requires Cpp17ValueSwappable\r\n    (void) std::partition(iarr, iarr, validating_zero_equality{});\r\n\r\n    // (void) std::stable_partition(varr, varr, simple_zero_equality{}); // requires Cpp17ValueSwappable\r\n    (void) std::stable_partition(iarr, iarr, validating_zero_equality{});\r\n\r\n    int iarr3[1]{};\r\n    validator varr3[1]{};\r\n\r\n    (void) std::partition_copy(varr, varr, varr2, varr3, simple_zero_equality{});\r\n    (void) std::partition_copy(iarr, iarr, iarr2, iarr3, validating_zero_equality{});\r\n\r\n    (void) std::partition_point(varr, varr, simple_zero_equality{});\r\n    (void) std::partition_point(iarr, iarr, validating_zero_equality{});\r\n\r\n    (void) std::merge(varr, varr, varr2, varr2, varr3);\r\n    (void) std::merge(iarr, iarr, iarr2, iarr2, iarr3, validating_less{});\r\n\r\n    // std::inplace_merge(varr, varr, varr); // requires Cpp17ValueSwappable\r\n    std::inplace_merge(iarr, iarr, iarr, validating_less{});\r\n\r\n    (void) std::includes(varr, varr, varr, varr);\r\n    (void) std::includes(iarr, iarr, iarr, iarr, validating_less{});\r\n\r\n    (void) std::set_union(varr, varr, varr, varr, varr3);\r\n    (void) std::set_union(iarr, iarr, iarr, iarr, iarr3, validating_less{});\r\n\r\n    (void) std::set_intersection(varr, varr, varr, varr, varr3);\r\n    (void) std::set_intersection(iarr, iarr, iarr, iarr, iarr3, validating_less{});\r\n\r\n    (void) std::set_difference(varr, varr, varr, varr, varr3);\r\n    (void) std::set_difference(iarr, iarr, iarr, iarr, iarr3, validating_less{});\r\n\r\n    (void) std::set_symmetric_difference(varr, varr, varr, varr, varr3);\r\n    (void) std::set_symmetric_difference(iarr, iarr, iarr, iarr, iarr3, validating_less{});\r\n\r\n    std::push_heap(varr3, varr3 + 1); // requires Cpp17ValueSwappable\r\n    std::push_heap(iarr3, iarr3 + 1, validating_less{});\r\n\r\n    std::pop_heap(varr3, varr3 + 1); // requires Cpp17ValueSwappable\r\n    std::pop_heap(iarr3, iarr3 + 1, validating_less{});\r\n\r\n    std::make_heap(varr3, varr3 + 1); // requires Cpp17ValueSwappable\r\n    std::make_heap(iarr3, iarr3 + 1, validating_less{});\r\n\r\n    std::sort_heap(varr3, varr3 + 1); // requires Cpp17ValueSwappable\r\n    std::sort_heap(iarr3, iarr3 + 1, validating_less{});\r\n\r\n    (void) std::is_heap(varr3, varr3 + 1);\r\n    (void) std::is_heap(iarr3, iarr3 + 1, validating_less{});\r\n\r\n    (void) std::is_heap_until(varr3, varr3 + 1);\r\n    (void) std::is_heap_until(iarr3, iarr3 + 1, validating_less{});\r\n\r\n    (void) std::min(+varr, +varr);\r\n    (void) std::min(+iarr, +iarr, validating_less{});\r\n    (void) std::min({+varr, +varr});\r\n    (void) std::min({+iarr, +iarr}, validating_less{});\r\n\r\n    (void) std::max(+varr, +varr);\r\n    (void) std::max(+iarr, +iarr, validating_less{});\r\n    (void) std::max({+varr, +varr});\r\n    (void) std::max({+iarr, +iarr}, validating_less{});\r\n\r\n    (void) std::minmax(+varr, +varr);\r\n    (void) std::minmax(+iarr, +iarr, validating_less{});\r\n    (void) std::minmax({+varr, +varr});\r\n    (void) std::minmax({+iarr, +iarr}, validating_less{});\r\n\r\n    (void) std::min_element(varr, varr + 1);\r\n    (void) std::min_element(iarr, iarr + 1, validating_less{});\r\n\r\n    (void) std::max_element(varr, varr + 1);\r\n    (void) std::max_element(iarr, iarr + 1, validating_less{});\r\n\r\n    (void) std::minmax_element(varr, varr + 1);\r\n    (void) std::minmax_element(iarr, iarr + 1, validating_less{});\r\n\r\n#if _HAS_CXX17\r\n    (void) std::clamp(+varr, +varr, +varr);\r\n    (void) std::clamp(+iarr, +iarr, +iarr, validating_less{});\r\n#endif // _HAS_CXX17\r\n\r\n    (void) std::lexicographical_compare(varr, varr, varr, varr);\r\n    (void) std::lexicographical_compare(iarr, iarr, iarr, iarr, validating_less{});\r\n\r\n#if _HAS_CXX20\r\n    (void) std::lexicographical_compare_three_way(varr, varr, varr, varr);\r\n    (void) std::lexicographical_compare_three_way(iarr, iarr, iarr, iarr, validating_compare_three_way{});\r\n#endif // _HAS_CXX20\r\n\r\n    // (void) std::next_permutation(varr, varr); // requires Cpp17ValueSwappable\r\n    (void) std::next_permutation(iarr, iarr, validating_less{});\r\n\r\n    // (void) std::prev_permutation(varr, varr); // requires Cpp17ValueSwappable\r\n    (void) std::prev_permutation(iarr, iarr, validating_less{});\r\n\r\n    (void) std::accumulate(varr, varr, validator{}, simple_left_selector{});\r\n    (void) std::accumulate(iarr, iarr, 0, validating_left_selector{});\r\n\r\n#if _HAS_CXX17\r\n    (void) std::reduce(varr, varr, validator{}, simple_left_selector{});\r\n    (void) std::reduce(iarr, iarr, 0, validating_left_selector{});\r\n#endif // _HAS_CXX17\r\n\r\n    (void) std::inner_product(varr, varr, varr, validator{}, simple_left_selector{}, simple_left_selector{});\r\n    (void) std::inner_product(iarr, iarr, iarr, 0, validating_left_selector{}, validating_left_selector{});\r\n\r\n#if _HAS_CXX17\r\n    (void) std::transform_reduce(varr, varr, varr, validator{}, simple_left_selector{}, simple_left_selector{});\r\n    (void) std::transform_reduce(iarr, iarr, iarr, 0, validating_left_selector{}, validating_left_selector{});\r\n    (void) std::transform_reduce(varr, varr, validator{}, simple_left_selector{}, simple_identity{});\r\n    (void) std::transform_reduce(iarr, iarr, 0, validating_left_selector{}, simple_identity{});\r\n#endif // _HAS_CXX17\r\n\r\n    (void) std::partial_sum(varr, varr, varr2, simple_left_selector{});\r\n    (void) std::partial_sum(iarr, iarr, iarr2, validating_left_selector{});\r\n\r\n#if _HAS_CXX17\r\n    (void) std::exclusive_scan(varr, varr, varr2, validator{}, simple_left_selector{});\r\n    (void) std::exclusive_scan(iarr, iarr, iarr2, 0, validating_left_selector{});\r\n\r\n    (void) std::inclusive_scan(varr, varr, varr2, simple_left_selector{});\r\n    (void) std::inclusive_scan(iarr, iarr, iarr2, validating_left_selector{});\r\n    (void) std::inclusive_scan(varr, varr, varr2, simple_left_selector{}, validator{});\r\n    (void) std::inclusive_scan(iarr, iarr, iarr2, validating_left_selector{}, 0);\r\n\r\n    (void) std::transform_exclusive_scan(varr, varr, varr2, validator{}, simple_left_selector{}, simple_identity{});\r\n    (void) std::transform_exclusive_scan(iarr, iarr, iarr2, 0, validating_left_selector{}, validating_identity{});\r\n\r\n    (void) std::transform_inclusive_scan(varr, varr, varr2, simple_left_selector{}, simple_identity{});\r\n    (void) std::transform_inclusive_scan(iarr, iarr, iarr2, validating_left_selector{}, validating_identity{});\r\n    (void) std::transform_inclusive_scan(varr, varr, varr2, simple_left_selector{}, simple_identity{}, validator{});\r\n    (void) std::transform_inclusive_scan(iarr, iarr, iarr2, validating_left_selector{}, validating_identity{}, 0);\r\n#endif // _HAS_CXX17\r\n\r\n    (void) std::adjacent_difference(varr, varr, varr2, simple_left_selector{});\r\n    (void) std::adjacent_difference(iarr, iarr, iarr2, validating_left_selector{});\r\n\r\n    validator* pvarr[1]{};\r\n    std::iota(pvarr, pvarr, +varr);\r\n\r\n#if _HAS_CXX20\r\n    (void) std::midpoint(+varr, +varr);\r\n#endif // _HAS_CXX20\r\n\r\n    validating_nontrivial narr[1]{};\r\n    validating_nontrivial narr2[1]{};\r\n\r\n#if _HAS_CXX17\r\n    std::uninitialized_default_construct(varr, varr);\r\n    std::uninitialized_default_construct(narr, narr);\r\n\r\n    (void) std::uninitialized_default_construct_n(varr, 0);\r\n    (void) std::uninitialized_default_construct_n(narr, 0);\r\n\r\n    std::uninitialized_value_construct(varr, varr);\r\n    std::uninitialized_value_construct(narr, narr);\r\n\r\n    (void) std::uninitialized_value_construct_n(varr, 0);\r\n    (void) std::uninitialized_value_construct_n(narr, 0);\r\n#endif // _HAS_CXX17\r\n\r\n    (void) std::uninitialized_copy(varr, varr, varr2);\r\n    (void) std::uninitialized_copy(narr, narr, narr2);\r\n\r\n    (void) std::uninitialized_copy_n(varr, 0, varr2);\r\n    (void) std::uninitialized_copy_n(narr, 0, narr2);\r\n\r\n#if _HAS_CXX17\r\n    (void) std::uninitialized_move(varr, varr, varr2);\r\n    (void) std::uninitialized_move(narr, narr, narr2);\r\n\r\n    (void) std::uninitialized_move_n(varr, 0, varr2);\r\n    (void) std::uninitialized_move_n(narr, 0, narr2);\r\n#endif // _HAS_CXX17\r\n\r\n    std::uninitialized_fill(varr, varr, validator{});\r\n    std::uninitialized_fill(narr, narr, validating_nontrivial{});\r\n\r\n    (void) std::uninitialized_fill_n(varr, 0, validator{});\r\n    (void) std::uninitialized_fill_n(narr, 0, validating_nontrivial{});\r\n\r\n#if _HAS_CXX20\r\n    {\r\n        validator vx{};\r\n        validating_nontrivial nx{};\r\n\r\n        std::construct_at(&vx);\r\n        std::construct_at(std::addressof(nx));\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX17\r\n    alignas(validator) alignas(\r\n        validating_nontrivial) unsigned char buffer[std::max(sizeof(validator), sizeof(validating_nontrivial))]{};\r\n\r\n    std::destroy_at(new (buffer) validator{});\r\n    std::destroy_at(new (buffer) validating_nontrivial{});\r\n\r\n#if _HAS_CXX20\r\n    {\r\n        alignas(validator[1]) unsigned char buf[sizeof(validator[1])];\r\n        ::new (static_cast<void*>(buf)) validator[1]{};\r\n        const auto p_arr = std::launder(reinterpret_cast<validator(*)[1]>(buf));\r\n\r\n        std::destroy(p_arr, p_arr);\r\n\r\n        (void) std::destroy_n(p_arr, 0);\r\n\r\n        std::destroy_at(p_arr);\r\n    }\r\n    {\r\n        alignas(validating_nontrivial[1]) unsigned char buf[sizeof(validating_nontrivial[1])];\r\n        ::new (static_cast<void*>(buf)) validating_nontrivial[1]{};\r\n        const auto p_arr = std::launder(reinterpret_cast<validating_nontrivial(*)[1]>(buf));\r\n\r\n        std::destroy(p_arr, p_arr);\r\n\r\n        (void) std::destroy_n(p_arr, 0);\r\n\r\n        std::destroy_at(p_arr);\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    std::destroy(varr, varr);\r\n    std::destroy(narr, narr);\r\n\r\n    (void) std::destroy_n(varr, 0);\r\n    (void) std::destroy_n(narr, 0);\r\n#endif // _HAS_CXX17\r\n}\r\n\r\n#if _HAS_CXX17\r\ntemplate <auto& ExecutionPolicy>\r\nvoid test_per_execution_policy() {\r\n    int iarr[1]{};\r\n    validator varr[1]{};\r\n\r\n    (void) std::all_of(ExecutionPolicy, varr, varr, simple_truth{});\r\n    (void) std::all_of(ExecutionPolicy, iarr, iarr, validating_truth{});\r\n\r\n    (void) std::any_of(ExecutionPolicy, varr, varr, simple_truth{});\r\n    (void) std::any_of(ExecutionPolicy, iarr, iarr, validating_truth{});\r\n\r\n    (void) std::none_of(ExecutionPolicy, varr, varr, simple_truth{});\r\n    (void) std::none_of(ExecutionPolicy, iarr, iarr, validating_truth{});\r\n\r\n    std::for_each(ExecutionPolicy, varr, varr, simple_truth{});\r\n    std::for_each(ExecutionPolicy, varr, varr, validating_truth{});\r\n    std::for_each(ExecutionPolicy, iarr, iarr, validating_truth{});\r\n\r\n    (void) std::for_each_n(ExecutionPolicy, varr, 0, simple_truth{});\r\n    (void) std::for_each_n(ExecutionPolicy, varr, 0, validating_truth{});\r\n    (void) std::for_each_n(ExecutionPolicy, iarr, 0, validating_truth{});\r\n\r\n    (void) std::find(ExecutionPolicy, varr, varr, validator{});\r\n\r\n    (void) std::find_if(ExecutionPolicy, varr, varr, simple_truth{});\r\n    (void) std::find_if(ExecutionPolicy, iarr, iarr, validating_truth{});\r\n\r\n    (void) std::find_if_not(ExecutionPolicy, varr, varr, simple_truth{});\r\n    (void) std::find_if_not(ExecutionPolicy, iarr, iarr, validating_truth{});\r\n\r\n    (void) std::find_end(ExecutionPolicy, varr, varr, varr, varr);\r\n    (void) std::find_end(ExecutionPolicy, varr, varr, varr, varr, validating_equal{});\r\n    (void) std::find_end(ExecutionPolicy, iarr, iarr, iarr, iarr, validating_equal{});\r\n\r\n    (void) std::find_first_of(ExecutionPolicy, varr, varr, varr, varr);\r\n    (void) std::find_first_of(ExecutionPolicy, varr, varr, varr, varr, validating_equal{});\r\n    (void) std::find_first_of(ExecutionPolicy, iarr, iarr, iarr, iarr, validating_equal{});\r\n\r\n    (void) std::adjacent_find(ExecutionPolicy, varr, varr);\r\n    (void) std::adjacent_find(ExecutionPolicy, iarr, iarr, validating_equal{});\r\n\r\n    (void) std::count(ExecutionPolicy, varr, varr, validator{});\r\n\r\n    (void) std::count_if(ExecutionPolicy, varr, varr, simple_truth{});\r\n    (void) std::count_if(ExecutionPolicy, iarr, iarr, validating_truth{});\r\n\r\n    (void) std::mismatch(ExecutionPolicy, varr, varr, varr);\r\n    (void) std::mismatch(ExecutionPolicy, varr, varr, varr, varr);\r\n    (void) std::mismatch(ExecutionPolicy, iarr, iarr, iarr, validating_equal{});\r\n    (void) std::mismatch(ExecutionPolicy, iarr, iarr, iarr, iarr, validating_equal{});\r\n\r\n    (void) std::equal(ExecutionPolicy, varr, varr, varr);\r\n    (void) std::equal(ExecutionPolicy, varr, varr, varr, varr);\r\n    (void) std::equal(ExecutionPolicy, iarr, iarr, iarr, validating_equal{});\r\n    (void) std::equal(ExecutionPolicy, iarr, iarr, iarr, iarr, validating_equal{});\r\n\r\n    (void) std::search(ExecutionPolicy, varr, varr, varr, varr);\r\n    (void) std::search(ExecutionPolicy, iarr, iarr, iarr, iarr, validating_equal{});\r\n\r\n    (void) std::search_n(ExecutionPolicy, varr, varr, 0, validator{});\r\n    (void) std::search_n(ExecutionPolicy, iarr, iarr, 0, 0, validating_equal{});\r\n\r\n    int iarr2[1]{};\r\n    validator varr2[1]{};\r\n\r\n    (void) std::copy(ExecutionPolicy, varr, varr + 1, varr2);\r\n\r\n    (void) std::copy_n(ExecutionPolicy, varr, 1, varr2);\r\n\r\n    (void) std::copy_if(ExecutionPolicy, varr, varr + 1, varr2, simple_truth{});\r\n    (void) std::copy_if(ExecutionPolicy, iarr, iarr + 1, iarr2, validating_truth{});\r\n\r\n    (void) std::move(ExecutionPolicy, varr, varr + 1, varr2);\r\n\r\n    // (void) std::swap_ranges(ExecutionPolicy, varr, varr, varr2);  // requires Cpp17ValueSwappable\r\n\r\n    (void) std::transform(ExecutionPolicy, varr, varr, varr2, simple_identity{});\r\n    (void) std::transform(ExecutionPolicy, varr, varr, varr, varr2, simple_left_selector{});\r\n    (void) std::transform(ExecutionPolicy, iarr, iarr, iarr2, validating_identity{});\r\n    (void) std::transform(ExecutionPolicy, iarr, iarr, iarr, iarr2, validating_left_selector{});\r\n\r\n    std::replace(ExecutionPolicy, varr, varr, validator{}, validator{});\r\n\r\n    std::replace_if(ExecutionPolicy, varr, varr, simple_truth{}, validator{});\r\n    std::replace_if(ExecutionPolicy, iarr, iarr, validating_truth{}, 0);\r\n\r\n    (void) std::replace_copy(ExecutionPolicy, varr, varr, varr2, validator{}, validator{});\r\n\r\n    (void) std::replace_copy_if(ExecutionPolicy, varr, varr, varr2, simple_truth{}, validator{});\r\n    (void) std::replace_copy_if(ExecutionPolicy, iarr, iarr, iarr2, validating_truth{}, 0);\r\n\r\n    std::fill(ExecutionPolicy, varr, varr, validator{});\r\n\r\n    (void) std::fill_n(ExecutionPolicy, varr, 0, validator{});\r\n\r\n    std::generate(ExecutionPolicy, varr, varr, value_generator<validator>{});\r\n\r\n    (void) std::generate_n(ExecutionPolicy, varr, 0, value_generator<validator>{});\r\n\r\n    (void) std::remove(ExecutionPolicy, varr, varr, validator{});\r\n\r\n    (void) std::remove_if(ExecutionPolicy, varr, varr, simple_truth{});\r\n    (void) std::remove_if(ExecutionPolicy, iarr, iarr, validating_truth{});\r\n\r\n    (void) std::remove_copy(ExecutionPolicy, varr, varr, varr2, validator{});\r\n\r\n    (void) std::remove_copy_if(ExecutionPolicy, varr, varr, varr2, simple_truth{});\r\n    (void) std::remove_copy_if(ExecutionPolicy, iarr, iarr, iarr2, validating_truth{});\r\n\r\n    (void) std::unique(ExecutionPolicy, varr, varr);\r\n    (void) std::unique(ExecutionPolicy, iarr, iarr, validating_equal{});\r\n\r\n    (void) std::unique_copy(ExecutionPolicy, varr, varr, varr2);\r\n    (void) std::unique_copy(ExecutionPolicy, iarr, iarr, iarr2, validating_equal{});\r\n\r\n    // std::reverse(ExecutionPolicy, varr, varr); // requires Cpp17ValueSwappable\r\n\r\n    (void) std::reverse_copy(ExecutionPolicy, varr, varr, varr2);\r\n\r\n    // (void) std::rotate(ExecutionPolicy, varr, varr, varr); // requires Cpp17ValueSwappable\r\n\r\n    (void) std::rotate_copy(ExecutionPolicy, varr, varr, varr, varr2);\r\n\r\n#if _HAS_CXX20\r\n    (void) std::shift_left(ExecutionPolicy, varr, varr, 0);\r\n\r\n    // (void) std::shift_right(ExecutionPolicy, varr, varr, 0); // requires Cpp17ValueSwappable\r\n#endif // _HAS_CXX20\r\n\r\n    // std::sort(ExecutionPolicy, varr, varr); // requires Cpp17ValueSwappable\r\n    std::sort(ExecutionPolicy, iarr, iarr, validating_less{});\r\n\r\n    // std::stable_sort(ExecutionPolicy, varr, varr); // requires Cpp17ValueSwappable\r\n    std::stable_sort(ExecutionPolicy, iarr, iarr, validating_less{});\r\n\r\n    std::partial_sort(ExecutionPolicy, varr, varr, varr); // requires Cpp17ValueSwappable\r\n    std::partial_sort(ExecutionPolicy, iarr, iarr, iarr, validating_less{});\r\n\r\n    void* vparr[1]{};\r\n\r\n    (void) std::partial_sort_copy(ExecutionPolicy, varr, varr, varr2, varr2); // requires Cpp17ValueSwappable\r\n    (void) std::partial_sort_copy(ExecutionPolicy, varr, varr, vparr, vparr);\r\n    (void) std::partial_sort_copy(ExecutionPolicy, iarr, iarr, iarr2, iarr2, validating_less{});\r\n\r\n    (void) std::is_sorted(ExecutionPolicy, varr, varr);\r\n    (void) std::is_sorted(ExecutionPolicy, iarr, iarr, validating_less{});\r\n\r\n    (void) std::is_sorted_until(ExecutionPolicy, varr, varr);\r\n    (void) std::is_sorted_until(ExecutionPolicy, iarr, iarr, validating_less{});\r\n\r\n    // std::nth_element(ExecutionPolicy, varr, varr, varr); // requires Cpp17ValueSwappable\r\n    std::nth_element(ExecutionPolicy, iarr, iarr, iarr, validating_less{});\r\n\r\n    (void) std::is_partitioned(ExecutionPolicy, varr, varr, simple_zero_equality{});\r\n    (void) std::is_partitioned(ExecutionPolicy, iarr, iarr, validating_zero_equality{});\r\n\r\n    // (void) std::partition(ExecutionPolicy, varr, varr, simple_zero_equality{}); // requires Cpp17ValueSwappable\r\n    (void) std::partition(ExecutionPolicy, iarr, iarr, validating_zero_equality{});\r\n\r\n    // (void) std::stable_partition(\r\n    //     ExecutionPolicy, varr, varr, simple_zero_equality{}); // requires Cpp17ValueSwappable\r\n    (void) std::stable_partition(ExecutionPolicy, iarr, iarr, validating_zero_equality{});\r\n\r\n    int iarr3[2]{};\r\n    validator varr3[2]{};\r\n\r\n    (void) std::partition_copy(ExecutionPolicy, varr, varr, varr2, varr3, simple_zero_equality{});\r\n    (void) std::partition_copy(ExecutionPolicy, iarr, iarr, iarr2, iarr3, validating_zero_equality{});\r\n\r\n    (void) std::merge(ExecutionPolicy, varr, varr, varr2, varr2, varr3);\r\n    (void) std::merge(ExecutionPolicy, iarr, iarr, iarr2, iarr2, iarr3, validating_less{});\r\n\r\n    // std::inplace_merge(ExecutionPolicy, varr, varr, varr); // requires Cpp17ValueSwappable\r\n    std::inplace_merge(ExecutionPolicy, iarr, iarr, iarr, validating_less{});\r\n\r\n    (void) std::includes(ExecutionPolicy, varr, varr, varr, varr);\r\n    (void) std::includes(ExecutionPolicy, iarr, iarr, iarr, iarr, validating_less{});\r\n\r\n    (void) std::set_union(ExecutionPolicy, varr, varr, varr, varr, varr3);\r\n    (void) std::set_union(ExecutionPolicy, iarr, iarr, iarr, iarr, iarr3, validating_less{});\r\n\r\n    (void) std::set_intersection(ExecutionPolicy, varr, varr, varr, varr, varr3);\r\n    (void) std::set_intersection(ExecutionPolicy, iarr, iarr, iarr, iarr, iarr3, validating_less{});\r\n\r\n    (void) std::set_difference(ExecutionPolicy, varr, varr, varr, varr, varr3);\r\n    (void) std::set_difference(ExecutionPolicy, iarr, iarr, iarr, iarr, iarr3, validating_less{});\r\n\r\n    (void) std::set_symmetric_difference(ExecutionPolicy, varr, varr, varr, varr, varr3);\r\n    (void) std::set_symmetric_difference(ExecutionPolicy, iarr, iarr, iarr, iarr, iarr3, validating_less{});\r\n\r\n    (void) std::is_heap(ExecutionPolicy, varr3, varr3 + 1);\r\n    (void) std::is_heap(ExecutionPolicy, iarr3, iarr3 + 1, validating_less{});\r\n\r\n    (void) std::is_heap_until(ExecutionPolicy, varr3, varr3 + 1);\r\n    (void) std::is_heap_until(ExecutionPolicy, iarr3, iarr3 + 1, validating_less{});\r\n\r\n    (void) std::min_element(ExecutionPolicy, varr, varr + 1);\r\n    (void) std::min_element(ExecutionPolicy, iarr, iarr + 1, validating_less{});\r\n\r\n    (void) std::max_element(ExecutionPolicy, varr, varr + 1);\r\n    (void) std::max_element(ExecutionPolicy, iarr, iarr + 1, validating_less{});\r\n\r\n    (void) std::minmax_element(ExecutionPolicy, varr, varr + 1);\r\n    (void) std::minmax_element(ExecutionPolicy, iarr, iarr + 1, validating_less{});\r\n\r\n    (void) std::lexicographical_compare(ExecutionPolicy, varr, varr, varr, varr);\r\n    (void) std::lexicographical_compare(ExecutionPolicy, iarr, iarr, iarr, iarr, validating_less{});\r\n\r\n    (void) std::reduce(ExecutionPolicy, varr, varr, validator{}, simple_left_selector{});\r\n    (void) std::reduce(ExecutionPolicy, iarr, iarr, 0, simple_left_selector{});\r\n\r\n    (void) std::transform_reduce(\r\n        ExecutionPolicy, varr, varr, varr, validator{}, simple_left_selector{}, simple_left_selector{});\r\n    (void) std::transform_reduce(\r\n        ExecutionPolicy, iarr, iarr, iarr, 0, validating_left_selector{}, validating_left_selector{});\r\n    (void) std::transform_reduce(ExecutionPolicy, varr, varr, validator{}, simple_left_selector{}, simple_identity{});\r\n    (void) std::transform_reduce(ExecutionPolicy, iarr, iarr, 0, validating_left_selector{}, simple_identity{});\r\n\r\n    (void) std::exclusive_scan(ExecutionPolicy, varr, varr, varr2, validator{}, simple_left_selector{});\r\n    (void) std::exclusive_scan(ExecutionPolicy, iarr, iarr, iarr2, 0, validating_left_selector{});\r\n\r\n    (void) std::inclusive_scan(ExecutionPolicy, varr, varr, varr2, simple_left_selector{});\r\n    (void) std::inclusive_scan(ExecutionPolicy, iarr, iarr, iarr2, validating_left_selector{});\r\n    (void) std::inclusive_scan(ExecutionPolicy, varr, varr, varr2, simple_left_selector{}, validator{});\r\n    (void) std::inclusive_scan(ExecutionPolicy, iarr, iarr, iarr2, validating_left_selector{}, 0);\r\n\r\n    (void) std::transform_exclusive_scan(\r\n        ExecutionPolicy, varr, varr, varr2, validator{}, simple_left_selector{}, simple_identity{});\r\n    (void) std::transform_exclusive_scan(\r\n        ExecutionPolicy, iarr, iarr, iarr2, 0, validating_left_selector{}, validating_identity{});\r\n\r\n    (void) std::transform_inclusive_scan(ExecutionPolicy, varr, varr, varr2, simple_left_selector{}, simple_identity{});\r\n    (void) std::transform_inclusive_scan(\r\n        ExecutionPolicy, iarr, iarr, iarr2, validating_left_selector{}, validating_identity{});\r\n    (void) std::transform_inclusive_scan(\r\n        ExecutionPolicy, varr, varr, varr2, simple_left_selector{}, simple_identity{}, validator{});\r\n    (void) std::transform_inclusive_scan(\r\n        ExecutionPolicy, iarr, iarr, iarr2, validating_left_selector{}, validating_identity{}, 0);\r\n\r\n    (void) std::adjacent_difference(ExecutionPolicy, varr, varr, varr2, simple_left_selector{});\r\n    (void) std::adjacent_difference(ExecutionPolicy, iarr, iarr, iarr2, validating_left_selector{});\r\n\r\n    validating_nontrivial narr[1]{};\r\n    validating_nontrivial narr2[1]{};\r\n\r\n    std::uninitialized_default_construct(ExecutionPolicy, varr, varr);\r\n    std::uninitialized_default_construct(ExecutionPolicy, narr, narr);\r\n\r\n    (void) std::uninitialized_default_construct_n(ExecutionPolicy, varr, 0);\r\n    (void) std::uninitialized_default_construct_n(ExecutionPolicy, narr, 0);\r\n\r\n    std::uninitialized_value_construct(ExecutionPolicy, varr, varr);\r\n    std::uninitialized_value_construct(ExecutionPolicy, narr, narr);\r\n\r\n    (void) std::uninitialized_value_construct_n(ExecutionPolicy, varr, 0);\r\n    (void) std::uninitialized_value_construct_n(ExecutionPolicy, narr, 0);\r\n\r\n    (void) std::uninitialized_copy(ExecutionPolicy, varr, varr, varr2);\r\n    (void) std::uninitialized_copy(ExecutionPolicy, narr, narr, narr2);\r\n\r\n    (void) std::uninitialized_copy_n(ExecutionPolicy, varr, 0, varr2);\r\n    (void) std::uninitialized_copy_n(ExecutionPolicy, narr, 0, narr2);\r\n\r\n    (void) std::uninitialized_move(ExecutionPolicy, varr, varr, varr2);\r\n    (void) std::uninitialized_move(ExecutionPolicy, narr, narr, narr2);\r\n\r\n    (void) std::uninitialized_move_n(ExecutionPolicy, varr, 0, varr2);\r\n    (void) std::uninitialized_move_n(ExecutionPolicy, narr, 0, narr2);\r\n\r\n    std::uninitialized_fill(ExecutionPolicy, varr, varr, validator{});\r\n    std::uninitialized_fill(ExecutionPolicy, narr, narr, validating_nontrivial{});\r\n\r\n    (void) std::uninitialized_fill_n(ExecutionPolicy, varr, 0, validator{});\r\n    (void) std::uninitialized_fill_n(ExecutionPolicy, narr, 0, validating_nontrivial{});\r\n\r\n    std::destroy(ExecutionPolicy, varr, varr);\r\n    std::destroy(ExecutionPolicy, narr, narr);\r\n\r\n    (void) std::destroy_n(ExecutionPolicy, varr, 0);\r\n    (void) std::destroy_n(ExecutionPolicy, narr, 0);\r\n\r\n#if _HAS_CXX20\r\n    validator varr_2d[1][1]{};\r\n    validating_nontrivial narr_2d[1][1]{};\r\n\r\n    std::destroy(ExecutionPolicy, varr_2d, varr_2d);\r\n    std::destroy(ExecutionPolicy, narr_2d, narr_2d);\r\n\r\n    (void) std::destroy_n(ExecutionPolicy, varr_2d, 0);\r\n    (void) std::destroy_n(ExecutionPolicy, narr_2d, 0);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\nvoid test_parallel_algorithms() {\r\n    test_per_execution_policy<std::execution::seq>();\r\n    test_per_execution_policy<std::execution::par>();\r\n    test_per_execution_policy<std::execution::par_unseq>();\r\n#if _HAS_CXX20\r\n    test_per_execution_policy<std::execution::unseq>();\r\n#endif // _HAS_CXX20\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nvoid test_ranges_non_projected_algorithms() {\r\n    using namespace std::ranges;\r\n\r\n    int iarr[1]{};\r\n    validator varr[1]{};\r\n\r\n#if _HAS_CXX23\r\n    (void) fold_left(varr, varr, validator{}, simple_left_selector{});\r\n    (void) fold_left(varr, validator{}, simple_left_selector{});\r\n    (void) fold_left(iarr, iarr, 0, validating_left_selector{});\r\n    (void) fold_left(iarr, 0, validating_left_selector{});\r\n\r\n    (void) fold_left_first(varr, varr + 1, simple_left_selector{});\r\n    (void) fold_left_first(varr, simple_left_selector{});\r\n    (void) fold_left_first(iarr, iarr + 1, validating_left_selector{});\r\n    (void) fold_left_first(iarr, validating_left_selector{});\r\n\r\n    (void) fold_right(varr, varr, validator{}, simple_left_selector{});\r\n    (void) fold_right(varr, validator{}, simple_left_selector{});\r\n    (void) fold_right(iarr, iarr, 0, validating_left_selector{});\r\n    (void) fold_right(iarr, 0, validating_left_selector{});\r\n\r\n    (void) fold_right_last(varr, varr + 1, simple_left_selector{});\r\n    (void) fold_right_last(varr, simple_left_selector{});\r\n    (void) fold_right_last(iarr, iarr + 1, validating_left_selector{});\r\n    (void) fold_right_last(iarr, validating_left_selector{});\r\n\r\n    (void) fold_left_with_iter(varr, varr, validator{}, simple_left_selector{});\r\n    (void) fold_left_with_iter(varr, validator{}, simple_left_selector{});\r\n    (void) fold_left_with_iter(iarr, iarr, 0, validating_left_selector{});\r\n    (void) fold_left_with_iter(iarr, 0, validating_left_selector{});\r\n\r\n    (void) fold_left_first_with_iter(varr, varr, simple_left_selector{});\r\n    (void) fold_left_first_with_iter(varr, simple_left_selector{});\r\n    (void) fold_left_first_with_iter(iarr, iarr, validating_left_selector{});\r\n    (void) fold_left_first_with_iter(iarr, validating_left_selector{});\r\n#endif // _HAS_CXX23\r\n\r\n    int iarr2[1]{};\r\n    validator varr2[1]{};\r\n\r\n    (void) copy(varr, varr + 1, varr2);\r\n    (void) copy(varr, varr2);\r\n\r\n    (void) copy_n(varr, 1, varr2);\r\n\r\n    (void) copy_backward(varr, varr + 1, varr2 + 1);\r\n    (void) copy_backward(varr, varr2 + 1);\r\n\r\n    (void) move(varr, varr + 1, varr2);\r\n    (void) move(varr, varr2);\r\n\r\n    (void) move_backward(varr, varr + 1, varr2 + 1);\r\n    (void) move_backward(varr, varr2 + 1);\r\n\r\n    (void) swap_ranges(varr, varr, varr2, varr2);\r\n    (void) swap_ranges(varr, varr2);\r\n\r\n    (void) fill(varr, varr, validator{});\r\n    (void) fill(varr, validator{});\r\n\r\n    (void) fill_n(varr, 0, validator{});\r\n\r\n    (void) generate(varr, varr, value_generator<validator>{});\r\n    (void) generate(varr, value_generator<validator>{});\r\n\r\n    (void) generate_n(varr, 0, value_generator<validator>{});\r\n\r\n    (void) reverse(varr, varr);\r\n    (void) reverse(varr);\r\n\r\n    (void) reverse_copy(varr, varr, varr2);\r\n    (void) reverse_copy(varr, varr2);\r\n\r\n    (void) rotate(varr, varr, varr);\r\n    (void) rotate(varr, varr);\r\n\r\n    (void) rotate_copy(varr, varr, varr, varr2);\r\n    (void) rotate_copy(varr, varr, varr2);\r\n\r\n    (void) sample(varr, varr, varr2, 0, simple_urng{});\r\n    (void) sample(varr, varr2, 0, simple_urng{});\r\n    (void) sample(iarr, iarr, iarr2, 0, validating_urng{});\r\n    (void) sample(iarr, iarr2, 0, validating_urng{});\r\n\r\n    (void) shuffle(varr, varr, simple_urng{});\r\n    (void) shuffle(varr, simple_urng{});\r\n    (void) shuffle(iarr, iarr, validating_urng{});\r\n    (void) shuffle(iarr, validating_urng{});\r\n\r\n#if _HAS_CXX23\r\n    (void) shift_left(varr, varr, 0);\r\n    (void) shift_left(varr, 0);\r\n\r\n    (void) shift_right(varr, varr, 0);\r\n    (void) shift_right(varr, 0);\r\n\r\n    validator* pvarr[1]{};\r\n    (void) iota(pvarr, pvarr, +varr);\r\n    (void) iota(pvarr, +varr);\r\n#endif // _HAS_CXX23\r\n\r\n    validating_nontrivial narr[1]{};\r\n    validating_nontrivial narr2[1]{};\r\n\r\n    (void) uninitialized_default_construct(varr, varr);\r\n    (void) uninitialized_default_construct(varr);\r\n    (void) uninitialized_default_construct(narr, narr);\r\n    (void) uninitialized_default_construct(narr);\r\n\r\n    (void) uninitialized_default_construct_n(varr, 0);\r\n    (void) uninitialized_default_construct_n(narr, 0);\r\n\r\n    (void) uninitialized_value_construct(varr, varr);\r\n    (void) uninitialized_value_construct(varr);\r\n    (void) uninitialized_value_construct(narr, narr);\r\n    (void) uninitialized_value_construct(narr);\r\n\r\n    (void) uninitialized_value_construct_n(varr, 0);\r\n    (void) uninitialized_value_construct_n(narr, 0);\r\n\r\n    (void) uninitialized_copy(varr, varr, varr2, varr2);\r\n    (void) uninitialized_copy(narr, narr, narr2, narr2);\r\n    (void) uninitialized_copy(varr, varr2);\r\n    (void) uninitialized_copy(narr, narr2);\r\n\r\n    (void) uninitialized_copy_n(varr, 0, varr2, varr2);\r\n    (void) uninitialized_copy_n(narr, 0, narr2, narr2);\r\n\r\n    (void) uninitialized_move(varr, varr, varr2, varr2);\r\n    (void) uninitialized_move(narr, narr, narr2, narr2);\r\n    (void) uninitialized_move(varr, varr2);\r\n    (void) uninitialized_move(narr, narr2);\r\n\r\n    (void) uninitialized_move_n(varr, 0, varr2, varr2);\r\n    (void) uninitialized_move_n(narr, 0, narr2, narr2);\r\n\r\n    (void) uninitialized_fill(varr, varr, validator{});\r\n    (void) uninitialized_fill(varr, validator{});\r\n    (void) uninitialized_fill(narr, narr, validating_nontrivial{});\r\n    (void) uninitialized_fill(narr, validating_nontrivial{});\r\n\r\n    (void) uninitialized_fill_n(varr, 0, validator{});\r\n    (void) uninitialized_fill_n(narr, 0, validating_nontrivial{});\r\n\r\n    {\r\n        alignas(validator) unsigned char buf[sizeof(validator)];\r\n        const auto pv = construct_at(reinterpret_cast<validator*>(buf));\r\n        destroy_at(pv);\r\n    }\r\n    {\r\n        alignas(validating_nontrivial) unsigned char buf[sizeof(validating_nontrivial)];\r\n        const auto pn = construct_at(reinterpret_cast<validating_nontrivial*>(buf));\r\n        destroy_at(pn);\r\n    }\r\n    {\r\n        alignas(validator[1]) unsigned char buf[sizeof(validator[1])];\r\n        ::new (static_cast<void*>(buf)) validator[1]{};\r\n        destroy_at(std::launder(reinterpret_cast<validator(*)[1]>(buf)));\r\n    }\r\n    {\r\n        alignas(validating_nontrivial[1]) unsigned char buf[sizeof(validating_nontrivial[1])];\r\n        ::new (static_cast<void*>(buf)) validating_nontrivial[1]{};\r\n        destroy_at(std::launder(reinterpret_cast<validating_nontrivial(*)[1]>(buf)));\r\n    }\r\n\r\n    {\r\n        alignas(validator[1]) unsigned char buf[sizeof(validator[1])];\r\n        ::new (buf) validator[1];\r\n        auto& arr = *std::launder(reinterpret_cast<validator(*)[1]>(buf));\r\n        destroy(arr, arr);\r\n        destroy(arr);\r\n    }\r\n    {\r\n        alignas(validating_nontrivial[1]) unsigned char buf[sizeof(validating_nontrivial[1])];\r\n        ::new (buf) validating_nontrivial[1];\r\n        auto& arr = *std::launder(reinterpret_cast<validating_nontrivial(*)[1]>(buf));\r\n        destroy(arr, arr);\r\n        destroy(arr);\r\n    }\r\n\r\n    (void) destroy_n(varr, 0);\r\n    (void) destroy_n(narr, 0);\r\n}\r\n#endif // _HAS_CXX20\r\n#endif // ^^^ no workaround ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_001600_random_inheritance/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001600_random_inheritance/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstddef>\r\n#include <random>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nusing namespace std;\r\n\r\n// GH-1600 \"<random>: piecewise_linear_distribution<T>::param_type should not inherit from\r\n// discrete_distribution<size_t>::param_type\"\r\n// Note that inheritance between distribution types should also be removed.\r\ntemplate <class F>\r\nvoid test_gh_1600_inheritance() {\r\n    using Con = piecewise_constant_distribution<F>;\r\n    using Lin = piecewise_linear_distribution<F>;\r\n    using Dis = discrete_distribution<size_t>;\r\n\r\n    using ConParam = typename Con::param_type;\r\n    using LinParam = typename Lin::param_type;\r\n    using DisParam = Dis::param_type;\r\n\r\n    STATIC_ASSERT(!is_base_of_v<Dis, Con>);\r\n    STATIC_ASSERT(!is_base_of_v<DisParam, ConParam>);\r\n\r\n    STATIC_ASSERT(!is_base_of_v<Dis, Lin>);\r\n    STATIC_ASSERT(!is_base_of_v<DisParam, LinParam>);\r\n}\r\n\r\n// Until 2026-01, piecewise_constant_distribution<FP> and piecewise_linear_distribution<FP>\r\n//   were both derived from discrete_distribution<size_t>. Same for their param_type structs.\r\n// Now the discrete_distribution<size_t> objects are changed from base class subobjects to leading member subobjects.\r\n//   Same for piecewise_constant_distribution::param_type.\r\n//   For piecewise_linear_distribution::param_type, the original discrete_distribution<size_t>::param_type subobject is\r\n//   decomposed into vectors to avoid imposing invariants.\r\n// In vNext, we should probably remove unused members, so the sizes will be reduced.\r\ntemplate <class F>\r\nvoid test_gh_1600_abi() {\r\n    // piecewise_constant_distribution, piecewise_linear_distribution, and their param_type structs\r\n    // don't introduce padding bytes under MSVC ABI. So it's OK to just add the sizes.\r\n\r\n    // The sizes will probably be reduced in vNext.\r\n\r\n    using Con = piecewise_constant_distribution<F>;\r\n    using Lin = piecewise_linear_distribution<F>;\r\n    using Dis = discrete_distribution<size_t>;\r\n\r\n    using ConParam = typename Con::param_type;\r\n    using LinParam = typename Lin::param_type;\r\n    using DisParam = Dis::param_type;\r\n\r\n    STATIC_ASSERT(sizeof(Con) == sizeof(Dis) + sizeof(ConParam));\r\n    STATIC_ASSERT(sizeof(ConParam) == sizeof(DisParam) + sizeof(vector<F>));\r\n\r\n    STATIC_ASSERT(sizeof(Lin) == sizeof(Dis) + sizeof(LinParam));\r\n    STATIC_ASSERT(sizeof(LinParam) == sizeof(DisParam) + sizeof(vector<F>));\r\n\r\n    // The alignments are likely to be unchanged in vNext.\r\n\r\n    STATIC_ASSERT(alignof(Con) == alignof(void*));\r\n    STATIC_ASSERT(alignof(ConParam) == alignof(void*));\r\n\r\n    STATIC_ASSERT(alignof(Lin) == alignof(void*));\r\n    STATIC_ASSERT(alignof(LinParam) == alignof(void*));\r\n}\r\n\r\nvoid test() {\r\n    test_gh_1600_inheritance<float>();\r\n    test_gh_1600_inheritance<double>();\r\n    test_gh_1600_inheritance<long double>();\r\n\r\n    test_gh_1600_abi<float>();\r\n    test_gh_1600_abi<double>();\r\n    test_gh_1600_abi<long double>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001638_dllexport_derived_classes/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001638_dllexport_derived_classes/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <list>\r\n#include <map>\r\n#include <queue>\r\n#include <set>\r\n#include <stack>\r\n#include <tuple>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#if _HAS_CXX20\r\n#include <span>\r\n#endif // _HAS_CXX20\r\n\r\nusing namespace std;\r\n\r\n#pragma warning(disable : 4251) // class 'A' needs to have dll-interface to be used by clients of class 'B'\r\n#pragma warning(disable : 4275) // non dll-interface struct 'A' used as base for dll-interface class 'B'\r\n\r\nstruct __declspec(dllexport) ExportedArray : array<int, 3> {};\r\nstruct __declspec(dllexport) ExportedArrayZero : array<int, 0> {};\r\nstruct __declspec(dllexport) ExportedDeque : deque<int> {};\r\nstruct __declspec(dllexport) ExportedForwardList : forward_list<int> {};\r\nstruct __declspec(dllexport) ExportedList : list<int> {};\r\nstruct __declspec(dllexport) ExportedVector : vector<int> {};\r\nstruct __declspec(dllexport) ExportedVectorBool : vector<bool> {};\r\n\r\nstruct __declspec(dllexport) ExportedMap : map<int, int> {};\r\nstruct __declspec(dllexport) ExportedMultimap : multimap<int, int> {};\r\nstruct __declspec(dllexport) ExportedSet : set<int> {};\r\nstruct __declspec(dllexport) ExportedMultiset : multiset<int> {};\r\n\r\nstruct __declspec(dllexport) ExportedUnorderedMap : unordered_map<int, int> {};\r\nstruct __declspec(dllexport) ExportedUnorderedMultimap : unordered_multimap<int, int> {};\r\nstruct __declspec(dllexport) ExportedUnorderedSet : unordered_set<int> {};\r\nstruct __declspec(dllexport) ExportedUnorderedMultiset : unordered_multiset<int> {};\r\n\r\nstruct __declspec(dllexport) ExportedQueue : queue<int> {};\r\nstruct __declspec(dllexport) ExportedPriorityQueue : priority_queue<int> {};\r\nstruct __declspec(dllexport) ExportedStack : stack<int> {};\r\n\r\n#if _HAS_CXX20\r\nstruct __declspec(dllexport) ExportedSpan : span<int> {};\r\nstruct __declspec(dllexport) ExportedSpanThree : span<int, 3> {};\r\n#endif // _HAS_CXX20\r\n\r\n// Test GH-3013 \"<utility>: pair::swap(const pair&) interacts badly with __declspec(dllexport)\"\r\nstruct __declspec(dllexport) ExportedPair : pair<int, int> {};\r\nstruct __declspec(dllexport) ExportedTuple : tuple<int, int, int> {};\r\n"
  },
  {
    "path": "tests/std/tests/GH_001850_clog_tied_to_cout/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001850_clog_tied_to_cout/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <iostream>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    assert(clog.tie() == nullptr);\r\n    assert(wclog.tie() == nullptr);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001858_iostream_exception/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001858_iostream_exception/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_CXX17_STRSTREAM_DEPRECATION_WARNING\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <fstream>\r\n#include <ios>\r\n#include <iostream>\r\n#include <istream>\r\n#include <ostream>\r\n#include <sstream>\r\n#include <streambuf>\r\n#include <string>\r\n#include <strstream>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#if _HAS_CXX17\r\n#include <memory_resource>\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n#include <syncstream>\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n#include <spanstream>\r\n#endif // _HAS_CXX23\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nusing namespace std;\r\n\r\nstruct test_exception {};\r\n\r\ntemplate <class CharT>\r\nclass throwing_buffer : public basic_streambuf<CharT> {\r\npublic:\r\n    using typename basic_streambuf<CharT>::int_type;\r\n\r\n    streampos seekoff(streamoff, ios_base::seekdir, ios_base::openmode = ios_base::in | ios_base::out) override {\r\n        throw test_exception{};\r\n    }\r\n\r\n    streampos seekpos(streampos, ios_base::openmode = ios_base::in | ios_base::out) override {\r\n        throw test_exception{};\r\n    }\r\n\r\n    int sync() override {\r\n        throw test_exception{};\r\n    }\r\n\r\n    int_type underflow() override {\r\n        throw test_exception{};\r\n    }\r\n\r\n    basic_streambuf<CharT>* to_buf() {\r\n        return this;\r\n    }\r\n};\r\n\r\ntemplate <class CharT>\r\nvoid test_istream_exceptions() {\r\n    throwing_buffer<CharT> buffer;\r\n\r\n    { // sync\r\n        basic_istream<CharT> is(buffer.to_buf());\r\n        assert(!is.bad());\r\n        assert(is.sync() == -1);\r\n        assert(is.bad());\r\n    }\r\n\r\n    { // sync with exceptions\r\n        basic_istream<CharT> is(buffer.to_buf());\r\n        is.exceptions(ios_base::badbit);\r\n\r\n        try {\r\n            is.sync();\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            assert(false);\r\n        } catch (const test_exception&) {\r\n            // Expected case\r\n        }\r\n    }\r\n\r\n    { // seekg\r\n        basic_istream<CharT> is(buffer.to_buf());\r\n        assert(!is.bad());\r\n        is.seekg(0);\r\n        assert(is.bad());\r\n    }\r\n\r\n    { // seekg with exceptions\r\n        basic_istream<CharT> is(buffer.to_buf());\r\n        is.exceptions(ios_base::badbit);\r\n\r\n        try {\r\n            is.seekg(0);\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            assert(false);\r\n        } catch (const test_exception&) {\r\n            // Expected case\r\n        }\r\n    }\r\n\r\n    { // seekg\r\n        basic_istream<CharT> is(buffer.to_buf());\r\n        assert(!is.bad());\r\n        is.seekg(0, ios_base::beg);\r\n        assert(is.bad());\r\n    }\r\n\r\n    { // seekg with exceptions\r\n        basic_istream<CharT> is(buffer.to_buf());\r\n        is.exceptions(ios_base::badbit);\r\n\r\n        try {\r\n            is.seekg(0, ios_base::beg);\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            assert(false);\r\n        } catch (const test_exception&) {\r\n            // Expected case\r\n        }\r\n    }\r\n\r\n    { // tellg\r\n        basic_istream<CharT> is(buffer.to_buf());\r\n        assert(!is.bad());\r\n        assert(is.tellg() == -1);\r\n        assert(is.bad());\r\n    }\r\n\r\n    { // tellg with exceptions\r\n        basic_istream<CharT> is(buffer.to_buf());\r\n        is.exceptions(ios_base::badbit);\r\n\r\n        try {\r\n            is.tellg();\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            assert(false);\r\n        } catch (const test_exception&) {\r\n            // Expected case\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class CharT>\r\nCharT meow_array;\r\ntemplate <>\r\nconstexpr array<char, 5> meow_array<char> = {\"meow\"};\r\ntemplate <>\r\nconstexpr array<wchar_t, 5> meow_array<wchar_t> = {L\"meow\"};\r\n\r\n// testing GH-5070: basic_istream::get[line](char_type* s, std::streamsize n, char_type delim)\r\n// do not null-terminate the output buffer correctly\r\ntemplate <class CharT>\r\nvoid test_gh5070_istream_get_null_termination_under_exceptions() {\r\n    throwing_buffer<CharT> buffer;\r\n    const basic_string<CharT> stream_content(1U, meow_array<CharT>[2]);\r\n\r\n    { // get, exception during input extraction, no exception rethrow\r\n        basic_istream<CharT> is(buffer.to_buf());\r\n        auto buf = meow_array<CharT>;\r\n        assert(!is.bad());\r\n        is.get(buf.data(), static_cast<streamsize>(buf.size()));\r\n        assert(is.bad());\r\n        assert(buf[0] == CharT());\r\n    }\r\n\r\n    { // get, exception during input extraction, exception rethrow enabled\r\n        basic_istream<CharT> is(buffer.to_buf());\r\n        auto buf = meow_array<CharT>;\r\n        is.exceptions(ios_base::badbit);\r\n        assert(!is.bad());\r\n        try {\r\n            is.get(buf.data(), static_cast<streamsize>(buf.size()));\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            assert(false);\r\n        } catch (const test_exception&) {\r\n            // Expected case\r\n        }\r\n        assert(is.bad());\r\n        assert(buf[0] == CharT());\r\n    }\r\n\r\n    { // get, empty output buffer, no exception raised\r\n        basic_istream<CharT> is(buffer.to_buf());\r\n        auto buf = meow_array<CharT>;\r\n        assert(!is.bad());\r\n        is.get(buf.data(), 0);\r\n        assert(is.fail());\r\n        assert(buf[0] == meow_array<CharT>[0]);\r\n    }\r\n\r\n    { // get, empty output buffer, exception raised on failbit\r\n        basic_istream<CharT> is(buffer.to_buf());\r\n        auto buf = meow_array<CharT>;\r\n        is.exceptions(ios_base::failbit);\r\n        assert(!is.bad());\r\n        try {\r\n            is.get(buf.data(), 0);\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            // Expected case\r\n        }\r\n        assert(is.fail());\r\n        assert(buf[0] == meow_array<CharT>[0]);\r\n    }\r\n\r\n    { // get, sentry construction fails, no exception raised\r\n        basic_stringbuf<CharT> strbuf{stream_content};\r\n        basic_istream<CharT> is(&strbuf);\r\n        assert(!is.bad());\r\n\r\n        // tests null termination on eof and\r\n        // sets eofbit, preparing sentry failure\r\n        auto buf1 = meow_array<CharT>;\r\n        is.get(buf1.data(), static_cast<streamsize>(buf1.size()));\r\n        assert(is.eof());\r\n        assert(!is.fail());\r\n        assert(buf1[0] == meow_array<CharT>[2]);\r\n        assert(buf1[1] == CharT());\r\n\r\n        // actually tests sentry construction failure\r\n        auto buf2 = meow_array<CharT>;\r\n        is.get(buf2.data(), static_cast<streamsize>(buf2.size()));\r\n        assert(is.fail());\r\n        assert(buf2[0] == CharT());\r\n    }\r\n\r\n    { // get, sentry construction fails, exception raised on failbit\r\n        basic_stringbuf<CharT> strbuf{stream_content};\r\n        basic_istream<CharT> is(&strbuf);\r\n        is.exceptions(ios_base::failbit);\r\n        assert(!is.bad());\r\n\r\n        // tests null termination on eof and\r\n        // sets eofbit, preparing sentry failure\r\n        auto buf1 = meow_array<CharT>;\r\n        is.get(buf1.data(), static_cast<streamsize>(buf1.size()));\r\n        assert(is.eof());\r\n        assert(!is.fail());\r\n        assert(buf1[0] == meow_array<CharT>[2]);\r\n        assert(buf1[1] == CharT());\r\n\r\n        // actually tests sentry construction failure\r\n        auto buf2 = meow_array<CharT>;\r\n        try {\r\n            is.get(buf2.data(), static_cast<streamsize>(buf2.size()));\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            // Expected case\r\n        }\r\n        assert(is.fail());\r\n        assert(buf2[0] == CharT());\r\n    }\r\n\r\n    { // get, exception raised on eofbit\r\n        basic_stringbuf<CharT> strbuf{stream_content};\r\n        basic_istream<CharT> is(&strbuf);\r\n        is.exceptions(ios_base::eofbit);\r\n        assert(!is.bad());\r\n\r\n        auto buf = meow_array<CharT>;\r\n        try {\r\n            is.get(buf.data(), static_cast<streamsize>(buf.size()));\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            // Expected case\r\n        }\r\n        assert(is.eof());\r\n        assert(!is.fail());\r\n        assert(buf[0] == meow_array<CharT>[2]);\r\n        assert(buf[1] == CharT());\r\n    }\r\n\r\n    { // getline, exception during input extraction, no exception rethrow\r\n        basic_istream<CharT> is(buffer.to_buf());\r\n        auto buf = meow_array<CharT>;\r\n        assert(!is.bad());\r\n        is.getline(buf.data(), static_cast<streamsize>(buf.size()));\r\n        assert(is.bad());\r\n        assert(buf[0] == CharT());\r\n    }\r\n\r\n    { // getline, exception during input extraction, exception rethrow enabled\r\n        basic_istream<CharT> is(buffer.to_buf());\r\n        auto buf = meow_array<CharT>;\r\n        is.exceptions(ios_base::badbit);\r\n        assert(!is.bad());\r\n        try {\r\n            is.getline(buf.data(), static_cast<streamsize>(buf.size()));\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            assert(false);\r\n        } catch (const test_exception&) {\r\n            // Expected case\r\n        }\r\n        assert(is.bad());\r\n        assert(buf[0] == CharT());\r\n    }\r\n\r\n    { // getline, empty output buffer, no exception raised\r\n        basic_istream<CharT> is(buffer.to_buf());\r\n        auto buf = meow_array<CharT>;\r\n        assert(!is.bad());\r\n        is.getline(buf.data(), 0);\r\n        assert(is.fail());\r\n        assert(buf[0] == meow_array<CharT>[0]);\r\n    }\r\n\r\n    { // getline, empty output buffer, exception raised on failbit\r\n        basic_istream<CharT> is(buffer.to_buf());\r\n        auto buf = meow_array<CharT>;\r\n        is.exceptions(ios_base::failbit);\r\n        assert(!is.bad());\r\n        try {\r\n            is.getline(buf.data(), 0);\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            // Expected case\r\n        }\r\n        assert(is.fail());\r\n        assert(buf[0] == meow_array<CharT>[0]);\r\n    }\r\n\r\n    { // getline, sentry construction fails, no exception raised\r\n        basic_stringbuf<CharT> strbuf{stream_content};\r\n        basic_istream<CharT> is(&strbuf);\r\n        assert(!is.bad());\r\n\r\n        // tests null termination on eof and\r\n        // sets eofbit, preparing sentry failure\r\n        auto buf1 = meow_array<CharT>;\r\n        is.getline(buf1.data(), static_cast<streamsize>(buf1.size()));\r\n        assert(is.eof());\r\n        assert(!is.fail());\r\n        assert(buf1[0] == meow_array<CharT>[2]);\r\n        assert(buf1[1] == CharT());\r\n\r\n        // actually tests sentry construction failure\r\n        auto buf2 = meow_array<CharT>;\r\n        is.getline(buf2.data(), static_cast<streamsize>(buf2.size()));\r\n        assert(is.fail());\r\n        assert(buf2[0] == CharT());\r\n    }\r\n\r\n    { // getline, sentry construction fails, exception raised on failbit\r\n        basic_stringbuf<CharT> strbuf{stream_content};\r\n        basic_istream<CharT> is(&strbuf);\r\n        is.exceptions(ios_base::failbit);\r\n        assert(!is.bad());\r\n\r\n        // tests null termination on eof and\r\n        // sets eofbit, preparing sentry failure\r\n        auto buf1 = meow_array<CharT>;\r\n        is.getline(buf1.data(), static_cast<streamsize>(buf1.size()));\r\n        assert(is.eof());\r\n        assert(!is.fail());\r\n        assert(buf1[0] == meow_array<CharT>[2]);\r\n        assert(buf1[1] == CharT());\r\n\r\n        // actually tests sentry construction failure\r\n        auto buf2 = meow_array<CharT>;\r\n        try {\r\n            is.getline(buf2.data(), static_cast<streamsize>(buf2.size()));\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            // Expected case\r\n        }\r\n        assert(is.fail());\r\n        assert(buf2[0] == CharT());\r\n    }\r\n\r\n    { // getline, exception raised on eofbit\r\n        basic_stringbuf<CharT> strbuf{stream_content};\r\n        basic_istream<CharT> is(&strbuf);\r\n        is.exceptions(ios_base::eofbit);\r\n        assert(!is.bad());\r\n\r\n        auto buf = meow_array<CharT>;\r\n        try {\r\n            is.getline(buf.data(), static_cast<streamsize>(buf.size()));\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            // Expected case\r\n        }\r\n        assert(is.eof());\r\n        assert(!is.fail());\r\n        assert(buf[0] == meow_array<CharT>[2]);\r\n        assert(buf[1] == CharT());\r\n    }\r\n}\r\n\r\ntemplate <class CharT>\r\nvoid test_ostream_exceptions() {\r\n    throwing_buffer<CharT> buffer;\r\n\r\n    { // flush\r\n        basic_ostream<CharT> os(buffer.to_buf());\r\n        assert(!os.bad());\r\n        os.flush();\r\n        assert(os.bad());\r\n    }\r\n\r\n    { // flush with exceptions\r\n        basic_ostream<CharT> os(buffer.to_buf());\r\n        os.exceptions(ios_base::badbit);\r\n\r\n        try {\r\n            os.flush();\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            assert(false);\r\n        } catch (const test_exception&) {\r\n            // Expected case\r\n        }\r\n    }\r\n\r\n    { // seekp\r\n        basic_ostream<CharT> os(buffer.to_buf());\r\n        assert(!os.bad());\r\n        os.seekp(0);\r\n        assert(os.bad());\r\n    }\r\n\r\n    { // seekp with exceptions\r\n        basic_ostream<CharT> os(buffer.to_buf());\r\n        os.exceptions(ios_base::badbit);\r\n\r\n        try {\r\n            os.seekp(0);\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            assert(false);\r\n        } catch (const test_exception&) {\r\n            // Expected case\r\n        }\r\n    }\r\n\r\n    { // seekp\r\n        basic_ostream<CharT> os(buffer.to_buf());\r\n        assert(!os.bad());\r\n        os.seekp(0, ios_base::beg);\r\n        assert(os.bad());\r\n    }\r\n\r\n    { // seekp with exceptions\r\n        basic_ostream<CharT> os(buffer.to_buf());\r\n        os.exceptions(ios_base::badbit);\r\n\r\n        try {\r\n            os.seekp(0, ios_base::beg);\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            assert(false);\r\n        } catch (const test_exception&) {\r\n            // Expected case\r\n        }\r\n    }\r\n\r\n    { // tellp\r\n        basic_ostream<CharT> os(buffer.to_buf());\r\n        assert(!os.bad());\r\n        assert(os.tellp() == -1);\r\n        assert(os.bad());\r\n    }\r\n\r\n    { // tellp with exceptions\r\n        basic_ostream<CharT> os(buffer.to_buf());\r\n        os.exceptions(ios_base::badbit);\r\n\r\n        try {\r\n            os.tellp();\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            assert(false);\r\n        } catch (const test_exception&) {\r\n            // Expected case\r\n        }\r\n    }\r\n\r\n    { // operator<< (testing GH-4322 \"<ostream>: Exception from streambuf should be caught and not rethrown\")\r\n        basic_ostream<CharT> os(buffer.to_buf());\r\n\r\n        try {\r\n            os << &buffer;\r\n        } catch (const ios_base::failure&) {\r\n            assert(false);\r\n        } catch (const test_exception&) {\r\n            assert(false);\r\n        }\r\n    }\r\n\r\n    { // operator<< rethrows the caught exception if failbit is set in exceptions()\r\n        basic_ostream<CharT> os(buffer.to_buf());\r\n        os.exceptions(ios_base::failbit);\r\n\r\n        try {\r\n            os << &buffer;\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            assert(false);\r\n        } catch (const test_exception&) {\r\n            // Expected case\r\n        }\r\n    }\r\n}\r\n\r\n// Also test strengthened and mandatory exception specifications.\r\ntemplate <class, class = void>\r\nconstexpr bool has_nothrow_rdbuf = false;\r\n\r\ntemplate <class T>\r\nconstexpr bool has_nothrow_rdbuf<T, void_t<decltype(declval<const T&>().rdbuf())>> =\r\n    noexcept(declval<const T&>().rdbuf());\r\n\r\ntemplate <class, class = void>\r\nconstexpr bool has_nothrow_is_open = false;\r\n\r\ntemplate <class T>\r\nconstexpr bool has_nothrow_is_open<T, void_t<decltype(declval<const T&>().is_open())>> =\r\n    noexcept(declval<const T&>().is_open());\r\n\r\ntemplate <class, class = void>\r\nconstexpr bool is_nothrow_std_swappable = false;\r\n\r\ntemplate <class T>\r\nconstexpr bool is_nothrow_std_swappable<T, void_t<decltype(std::swap(declval<T&>(), declval<T&>()))>> =\r\n    noexcept(std::swap(declval<T&>(), declval<T&>()));\r\n\r\nSTATIC_ASSERT(noexcept(static_cast<bool>(cin)));\r\nSTATIC_ASSERT(noexcept(!cin));\r\n\r\nSTATIC_ASSERT(noexcept(cin.rdstate()));\r\nSTATIC_ASSERT(noexcept(cin.good()));\r\nSTATIC_ASSERT(noexcept(cin.eof()));\r\nSTATIC_ASSERT(noexcept(cin.fail()));\r\nSTATIC_ASSERT(noexcept(cin.bad()));\r\nSTATIC_ASSERT(noexcept(cin.exceptions()));\r\nSTATIC_ASSERT(noexcept(cin.flags()));\r\nSTATIC_ASSERT(noexcept(cin.flags(ios_base::fmtflags{})));\r\nSTATIC_ASSERT(noexcept(cin.setf(ios_base::fmtflags{})));\r\nSTATIC_ASSERT(noexcept(cin.setf(ios_base::fmtflags{}, ios_base::fmtflags{})));\r\nSTATIC_ASSERT(noexcept(cin.unsetf(ios_base::fmtflags{})));\r\nSTATIC_ASSERT(noexcept(cin.precision()));\r\nSTATIC_ASSERT(noexcept(cin.precision(0)));\r\nSTATIC_ASSERT(noexcept(cin.width()));\r\nSTATIC_ASSERT(noexcept(cin.width(0)));\r\nSTATIC_ASSERT(noexcept(cin.getloc()));\r\n\r\nSTATIC_ASSERT(noexcept(cin.tie()));\r\nSTATIC_ASSERT(noexcept(cin.tie(nullptr)));\r\n\r\nSTATIC_ASSERT(noexcept(cin.fill()));\r\nSTATIC_ASSERT(noexcept(cin.fill('*')));\r\n\r\nSTATIC_ASSERT(noexcept(cin.gcount()));\r\n\r\nSTATIC_ASSERT(!has_nothrow_rdbuf<ios_base>);\r\nSTATIC_ASSERT(!has_nothrow_is_open<ios_base>);\r\n\r\nSTATIC_ASSERT(!is_nothrow_std_swappable<ios_base>);\r\n\r\nSTATIC_ASSERT(!is_nothrow_std_swappable<streambuf>);\r\nSTATIC_ASSERT(!is_nothrow_std_swappable<wstreambuf>);\r\n\r\nSTATIC_ASSERT(has_nothrow_rdbuf<ios>);\r\nSTATIC_ASSERT(has_nothrow_rdbuf<wios>);\r\n\r\nSTATIC_ASSERT(has_nothrow_rdbuf<ifstream>);\r\nSTATIC_ASSERT(has_nothrow_rdbuf<wifstream>);\r\nSTATIC_ASSERT(has_nothrow_rdbuf<ofstream>);\r\nSTATIC_ASSERT(has_nothrow_rdbuf<wofstream>);\r\nSTATIC_ASSERT(has_nothrow_rdbuf<fstream>);\r\nSTATIC_ASSERT(has_nothrow_rdbuf<wfstream>);\r\n\r\nSTATIC_ASSERT(is_nothrow_std_swappable<filebuf>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<wfilebuf>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<ifstream>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<wifstream>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<ofstream>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<wofstream>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<fstream>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<wfstream>);\r\n\r\nSTATIC_ASSERT(has_nothrow_is_open<filebuf>);\r\nSTATIC_ASSERT(has_nothrow_is_open<wfilebuf>);\r\nSTATIC_ASSERT(has_nothrow_is_open<ifstream>);\r\nSTATIC_ASSERT(has_nothrow_is_open<wifstream>);\r\nSTATIC_ASSERT(has_nothrow_is_open<ofstream>);\r\nSTATIC_ASSERT(has_nothrow_is_open<wofstream>);\r\nSTATIC_ASSERT(has_nothrow_is_open<fstream>);\r\nSTATIC_ASSERT(has_nothrow_is_open<wfstream>);\r\n\r\nSTATIC_ASSERT(is_nothrow_move_assignable_v<stringbuf>);\r\nSTATIC_ASSERT(is_nothrow_move_assignable_v<wstringbuf>);\r\nSTATIC_ASSERT(is_nothrow_move_assignable_v<istringstream>);\r\nSTATIC_ASSERT(is_nothrow_move_assignable_v<wistringstream>);\r\nSTATIC_ASSERT(is_nothrow_move_assignable_v<ostringstream>);\r\nSTATIC_ASSERT(is_nothrow_move_assignable_v<wostringstream>);\r\nSTATIC_ASSERT(is_nothrow_move_assignable_v<stringstream>);\r\nSTATIC_ASSERT(is_nothrow_move_assignable_v<wstringstream>);\r\n\r\n// GH-4232: <sstream>: basic_stringbuf shouldn't implement moving with swapping\r\n// These operations need to be able to throw exceptions when the source and target allocators are unequal.\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(\r\n    !is_nothrow_move_assignable_v<basic_stringbuf<char, char_traits<char>, pmr::polymorphic_allocator<char>>>);\r\nSTATIC_ASSERT(\r\n    !is_nothrow_move_assignable_v<basic_stringbuf<wchar_t, char_traits<wchar_t>, pmr::polymorphic_allocator<wchar_t>>>);\r\nSTATIC_ASSERT(\r\n    !is_nothrow_move_assignable_v<basic_istringstream<char, char_traits<char>, pmr::polymorphic_allocator<char>>>);\r\nSTATIC_ASSERT(!is_nothrow_move_assignable_v<\r\n    basic_istringstream<wchar_t, char_traits<wchar_t>, pmr::polymorphic_allocator<wchar_t>>>);\r\nSTATIC_ASSERT(\r\n    !is_nothrow_move_assignable_v<basic_ostringstream<char, char_traits<char>, pmr::polymorphic_allocator<char>>>);\r\nSTATIC_ASSERT(!is_nothrow_move_assignable_v<\r\n    basic_ostringstream<wchar_t, char_traits<wchar_t>, pmr::polymorphic_allocator<wchar_t>>>);\r\nSTATIC_ASSERT(\r\n    !is_nothrow_move_assignable_v<basic_stringstream<char, char_traits<char>, pmr::polymorphic_allocator<char>>>);\r\nSTATIC_ASSERT(!is_nothrow_move_assignable_v<\r\n    basic_stringstream<wchar_t, char_traits<wchar_t>, pmr::polymorphic_allocator<wchar_t>>>);\r\n#endif // _HAS_CXX17\r\n\r\nSTATIC_ASSERT(is_nothrow_std_swappable<stringbuf>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<wstringbuf>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<istringstream>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<wistringstream>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<ostringstream>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<wostringstream>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<stringstream>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<wstringstream>);\r\n\r\nSTATIC_ASSERT(has_nothrow_rdbuf<istringstream>);\r\nSTATIC_ASSERT(has_nothrow_rdbuf<wistringstream>);\r\nSTATIC_ASSERT(has_nothrow_rdbuf<ostringstream>);\r\nSTATIC_ASSERT(has_nothrow_rdbuf<wostringstream>);\r\nSTATIC_ASSERT(has_nothrow_rdbuf<stringstream>);\r\nSTATIC_ASSERT(has_nothrow_rdbuf<wstringstream>);\r\n\r\nSTATIC_ASSERT(is_nothrow_move_assignable_v<strstreambuf>);\r\nSTATIC_ASSERT(is_nothrow_move_assignable_v<istrstream>);\r\nSTATIC_ASSERT(is_nothrow_move_assignable_v<ostrstream>);\r\nSTATIC_ASSERT(is_nothrow_move_assignable_v<strstream>);\r\n\r\nSTATIC_ASSERT(noexcept(declval<strstreambuf&>().clear()));\r\n\r\nSTATIC_ASSERT(noexcept(declval<strstreambuf&>().freeze()));\r\nSTATIC_ASSERT(noexcept(declval<ostrstream&>().freeze()));\r\nSTATIC_ASSERT(noexcept(declval<strstream&>().freeze()));\r\n\r\nSTATIC_ASSERT(noexcept(declval<strstreambuf&>().str()));\r\nSTATIC_ASSERT(noexcept(declval<istrstream&>().str()));\r\nSTATIC_ASSERT(noexcept(declval<ostrstream&>().str()));\r\nSTATIC_ASSERT(noexcept(declval<strstream&>().str()));\r\n\r\nSTATIC_ASSERT(noexcept(declval<strstreambuf&>().pcount()));\r\nSTATIC_ASSERT(noexcept(declval<ostrstream&>().pcount()));\r\nSTATIC_ASSERT(noexcept(declval<strstream&>().pcount()));\r\n\r\n#if !_HAS_CXX23 // non-Standard overloads\r\nSTATIC_ASSERT(is_nothrow_std_swappable<strstreambuf>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<istrstream>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<ostrstream>);\r\nSTATIC_ASSERT(is_nothrow_std_swappable<strstream>);\r\n#endif // !_HAS_CXX23\r\n\r\n#if _HAS_CXX17\r\nstatic_assert(is_nothrow_swappable_v<filebuf>);\r\nstatic_assert(is_nothrow_swappable_v<wfilebuf>);\r\nstatic_assert(is_nothrow_swappable_v<ifstream>);\r\nstatic_assert(is_nothrow_swappable_v<wifstream>);\r\nstatic_assert(is_nothrow_swappable_v<ofstream>);\r\nstatic_assert(is_nothrow_swappable_v<wofstream>);\r\nstatic_assert(is_nothrow_swappable_v<fstream>);\r\nstatic_assert(is_nothrow_swappable_v<wfstream>);\r\n\r\nstatic_assert(is_nothrow_swappable_v<stringbuf>);\r\nstatic_assert(is_nothrow_swappable_v<wstringbuf>);\r\nstatic_assert(is_nothrow_swappable_v<istringstream>);\r\nstatic_assert(is_nothrow_swappable_v<wistringstream>);\r\nstatic_assert(is_nothrow_swappable_v<ostringstream>);\r\nstatic_assert(is_nothrow_swappable_v<wostringstream>);\r\nstatic_assert(is_nothrow_swappable_v<stringstream>);\r\nstatic_assert(is_nothrow_swappable_v<wstringstream>);\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\nstatic_assert(is_nothrow_swappable_v<syncbuf>);\r\nstatic_assert(is_nothrow_swappable_v<wsyncbuf>);\r\n\r\nstatic_assert(has_nothrow_rdbuf<osyncstream>); // mandatory\r\nstatic_assert(has_nothrow_rdbuf<wosyncstream>); // mandatory\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\nstatic_assert(is_nothrow_swappable_v<spanbuf>);\r\nstatic_assert(is_nothrow_swappable_v<wspanbuf>);\r\nstatic_assert(is_nothrow_swappable_v<ispanstream>);\r\nstatic_assert(is_nothrow_swappable_v<wispanstream>);\r\nstatic_assert(is_nothrow_swappable_v<ospanstream>);\r\nstatic_assert(is_nothrow_swappable_v<wospanstream>);\r\nstatic_assert(is_nothrow_swappable_v<spanstream>);\r\nstatic_assert(is_nothrow_swappable_v<wspanstream>);\r\n\r\nstatic_assert(is_nothrow_move_assignable_v<spanbuf>);\r\nstatic_assert(is_nothrow_move_assignable_v<wspanbuf>);\r\nstatic_assert(is_nothrow_move_assignable_v<ispanstream>);\r\nstatic_assert(is_nothrow_move_assignable_v<wispanstream>);\r\nstatic_assert(is_nothrow_move_assignable_v<ospanstream>);\r\nstatic_assert(is_nothrow_move_assignable_v<wospanstream>);\r\nstatic_assert(is_nothrow_move_assignable_v<spanstream>);\r\nstatic_assert(is_nothrow_move_assignable_v<wspanstream>);\r\n\r\nstatic_assert(has_nothrow_rdbuf<ispanstream>); // mandatory\r\nstatic_assert(has_nothrow_rdbuf<wispanstream>); // mandatory\r\nstatic_assert(has_nothrow_rdbuf<ospanstream>); // mandatory\r\nstatic_assert(has_nothrow_rdbuf<wospanstream>); // mandatory\r\nstatic_assert(has_nothrow_rdbuf<spanstream>); // mandatory\r\nstatic_assert(has_nothrow_rdbuf<wspanstream>); // mandatory\r\n#endif // _HAS_CXX23\r\n\r\nint main() {\r\n    test_istream_exceptions<char>();\r\n    test_istream_exceptions<wchar_t>();\r\n\r\n    test_gh5070_istream_get_null_termination_under_exceptions<char>();\r\n    test_gh5070_istream_get_null_termination_under_exceptions<wchar_t>();\r\n\r\n    test_ostream_exceptions<char>();\r\n    test_ostream_exceptions<wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001912_random_distribution_operator_const/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001912_random_distribution_operator_const/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _ALLOW_RANDOM_DISTRIBUTION_CONST_OPERATOR\r\n\r\n#include <random>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename Dist>\r\nvoid test() {\r\n    default_random_engine random;\r\n    const Dist dist;\r\n    (void) dist(random);\r\n    (void) dist(random, {});\r\n}\r\n\r\n// GH-1912 <random>: distribution::operator() is erroneously const\r\n// we test that escape hatch macro works.\r\nvoid test_every_distribution() {\r\n    test<uniform_int_distribution<int>>();\r\n    test<uniform_real_distribution<double>>();\r\n    test<bernoulli_distribution>();\r\n    test<binomial_distribution<int>>();\r\n    test<geometric_distribution<int>>();\r\n    test<negative_binomial_distribution<int>>();\r\n    test<poisson_distribution<int>>();\r\n    test<exponential_distribution<double>>();\r\n    test<gamma_distribution<double>>();\r\n    test<weibull_distribution<double>>();\r\n    test<extreme_value_distribution<double>>();\r\n    // normal_distribution never has const operator()\r\n    test<lognormal_distribution<double>>();\r\n    test<chi_squared_distribution<double>>();\r\n    test<cauchy_distribution<double>>();\r\n    test<fisher_f_distribution<double>>();\r\n    test<student_t_distribution<double>>();\r\n    test<discrete_distribution<int>>();\r\n    test<piecewise_constant_distribution<double>>();\r\n    test<piecewise_linear_distribution<double>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001914_cached_position/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001914_cached_position/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\ntemplate <class View>\r\nclass test_cache : public ranges::_Cached_position<View, test_cache<View>> {\r\npublic:\r\n    constexpr test_cache(View view) : _view(move(view)) {}\r\n\r\n    constexpr void set_cache() {\r\n        this->_Set_cache(_view, _view.begin());\r\n    }\r\n\r\n    [[nodiscard]] constexpr bool has_cache() const noexcept {\r\n        return this->_Has_cache();\r\n    }\r\n\r\nprivate:\r\n    View _view;\r\n};\r\n\r\ntemplate <ranges::forward_range R>\r\nconstexpr bool test_one() {\r\n    constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n    { // Propagate cache of random access range after copy\r\n        test_cache cache{R{some_ints}};\r\n        cache.set_cache();\r\n\r\n        test_cache new_cache = cache;\r\n        assert(cache.has_cache());\r\n        assert(new_cache.has_cache() == ranges::random_access_range<R>);\r\n    }\r\n\r\n    { // Propagate cache of random access range after move\r\n        test_cache cache{R{some_ints}};\r\n        cache.set_cache();\r\n\r\n        test_cache new_cache = move(cache);\r\n        assert(!cache.has_cache());\r\n        assert(new_cache.has_cache() == ranges::random_access_range<R>);\r\n    }\r\n    return true;\r\n}\r\n\r\ntemplate <class Category>\r\nusing test_range = test::range<Category, const int, test::Sized::no,\r\n    test::CanDifference{derived_from<Category, random_access_iterator_tag>}, test::Common::yes, test::CanCompare::yes,\r\n    test::ProxyRef::no, test::CanView::yes, test::Copyability::copyable>;\r\n\r\nint main() {\r\n    test_one<test_range<forward_iterator_tag>>();\r\n    static_assert(test_one<test_range<forward_iterator_tag>>());\r\n\r\n    test_one<test_range<random_access_iterator_tag>>();\r\n    static_assert(test_one<test_range<random_access_iterator_tag>>());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_001923_filesystem_long_path_support/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n"
  },
  {
    "path": "tests/std/tests/GH_001923_filesystem_long_path_support/custom_format.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\n\r\nfrom stl.test.format import STLTestFormat, TestStep\r\nfrom stl.test.tests import TestType\r\n\r\nclass CustomTestFormat(STLTestFormat):\r\n    def getBuildSteps(self, test, litConfig, shared):\r\n        exeSource = test.getSourcePath()\r\n        manifestFile = os.path.join(os.path.dirname(exeSource), 'long_path_aware.manifest')\r\n\r\n        _, outputBase = test.getTempPaths()\r\n\r\n        if TestType.COMPILE in test.testType:\r\n            cmd = [test.cxx, '/c', exeSource, *test.flags, *test.compileFlags]\r\n        elif TestType.RUN in test.testType:\r\n            shared.execFile = outputBase + '.exe'\r\n            cmd = [test.cxx, exeSource, *test.flags, *test.compileFlags, '/Fe' + shared.execFile,\r\n                   '/link', *test.linkFlags, f'/MANIFESTINPUT:{manifestFile}']\r\n\r\n        yield TestStep(cmd, shared.execDir, shared.env, False)\r\n"
  },
  {
    "path": "tests/std/tests/GH_001923_filesystem_long_path_support/custombuild.pl",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nuse strict;\r\nuse warnings;\r\n\r\nuse Run;\r\n\r\nsub CustomBuildHook()\r\n{\r\n    my $cwd = Run::GetCWDName();\r\n\r\n    Run::ExecuteCL(\"/c test.cpp\");\r\n    Run::ExecuteLink(\"/MANIFESTINPUT:long_path_aware.manifest /OUT:$cwd.exe test.obj\");\r\n}\r\n1\r\n"
  },
  {
    "path": "tests/std/tests/GH_001923_filesystem_long_path_support/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_001923_filesystem_long_path_support/lit.local.cfg",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\nimport site\r\nsite.addsitedir(os.path.dirname(os.path.dirname(__file__)))\r\nimport GH_001923_filesystem_long_path_support.custom_format\r\n\r\nconfig.test_format = GH_001923_filesystem_long_path_support.custom_format.CustomTestFormat()\r\n"
  },
  {
    "path": "tests/std/tests/GH_001923_filesystem_long_path_support/long_path_aware.manifest",
    "content": "<!--\r\nCopyright (c) Microsoft Corporation.\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n-->\r\n\r\n<!-- https://learn.microsoft.com/windows/win32/sbscs/application-manifests#longPathAware -->\r\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\" xmlns:asmv3=\"urn:schemas-microsoft-com:asm.v3\">\r\n  <asmv3:application>\r\n    <asmv3:windowsSettings xmlns:ws2=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">\r\n      <ws2:longPathAware>true</ws2:longPathAware>\r\n    </asmv3:windowsSettings>\r\n  </asmv3:application>\r\n</assembly>\r\n"
  },
  {
    "path": "tests/std/tests/GH_001923_filesystem_long_path_support/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <filesystem>\r\n#include <iostream>\r\n#include <system_error>\r\n\r\n#pragma warning(push) // TRANSITION, OS-23694920\r\n#pragma warning(disable : 4668) // 'MEOW' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'\r\n#include <Windows.h>\r\n#pragma warning(pop)\r\n\r\n#include <test_filesystem_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n#pragma comment(lib, \"Advapi32\") // for RegGetValueW()\r\n\r\nbool are_long_paths_enabled() {\r\n    // https://learn.microsoft.com/windows/win32/fileio/maximum-file-path-limitation\r\n    // https://learn.microsoft.com/windows/win32/api/winreg/nf-winreg-reggetvaluew\r\n    DWORD registry_value = 0;\r\n    DWORD buffer_size    = sizeof(registry_value);\r\n    const LSTATUS status = RegGetValueW(HKEY_LOCAL_MACHINE, LR\"(SYSTEM\\CurrentControlSet\\Control\\FileSystem)\",\r\n        L\"LongPathsEnabled\", RRF_RT_REG_DWORD, nullptr, &registry_value, &buffer_size);\r\n\r\n    switch (status) {\r\n    case ERROR_SUCCESS:\r\n        assert(buffer_size == sizeof(registry_value));\r\n        return registry_value != 0;\r\n    case ERROR_FILE_NOT_FOUND:\r\n        return false; // The registry value doesn't exist, so long paths aren't enabled.\r\n    case ERROR_MORE_DATA:\r\n        cout << \"RegGetValueW() returned ERROR_MORE_DATA; this should not be possible.\" << endl;\r\n        break;\r\n    case ERROR_UNSUPPORTED_TYPE:\r\n        cout << \"RegGetValueW() returned ERROR_UNSUPPORTED_TYPE; the value exists but has a weird type.\" << endl;\r\n        break;\r\n    default:\r\n        cout << \"RegGetValueW() returned \" << status << \".\" << endl;\r\n        break;\r\n    }\r\n\r\n    assert(status == ERROR_SUCCESS || status == ERROR_FILE_NOT_FOUND); // Equivalent to assert(false), but clearer.\r\n    return false;\r\n}\r\n\r\nint main() {\r\n    if (!are_long_paths_enabled()) {\r\n        cout << \"Skipping test because long paths aren't enabled on this machine.\" << endl;\r\n        return 0;\r\n    }\r\n\r\n    const test_temp_directory tempDir(\"filesystem_long_path_support\");\r\n\r\n    const filesystem::path long_path =\r\n        tempDir.directoryPath / \"JulietteAndromedaMeow\" / \"ThisDirectoryNameIsFiftyCharactersLongBlahBlahBlah\"\r\n        / \"ThisDirectoryNameIsFiftyCharactersLongBlahBlahBlah\" / \"ThisDirectoryNameIsFiftyCharactersLongBlahBlahBlah\"\r\n        / \"ThisDirectoryNameIsFiftyCharactersLongBlahBlahBlah\" / \"ThisDirectoryNameIsFiftyCharactersLongBlahBlahBlah\"\r\n        / \"ThisDirectoryNameIsFiftyCharactersLongBlahBlahBlah\" / \"ClarissaMelpomeneMeow\"; // well over 300 characters\r\n\r\n    error_code ec{};\r\n    const bool created = filesystem::create_directories(long_path, ec);\r\n    assert(!ec);\r\n    assert(created);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_002030_asan_annotate_string/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This test matrix is the usual test matrix, with all currently unsupported options removed, with\r\n# some additional /Zc:char8_t coverage, crossed with the ASan flags.\r\n\r\n# TRANSITION, google/sanitizers#328: clang-cl does not support /MDd or /MTd with ASan\r\nRUNALL_INCLUDE ..\\prefix.lst\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/Zi /wd4611 /w14640 /Zc:threadSafeInit-\" PM_LINK=\"/debug\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"-fsanitize=address /BE /c /EHsc /MD /std:c++14\"\r\nPM_CL=\"-fsanitize=address /BE /c /EHsc /MDd /std:c++17 /permissive-\"\r\nPM_CL=\"-fsanitize=address /BE /c /EHsc /MT /std:c++20 /permissive-\"\r\nPM_CL=\"-fsanitize=address /BE /c /EHsc /MTd /std:c++latest /permissive-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MD /std:c++14\"\r\nPM_CL=\"-fsanitize=address /EHsc /MD /std:c++17\"\r\nPM_CL=\"-fsanitize=address /EHsc /MD /std:c++20\"\r\nPM_CL=\"-fsanitize=address /EHsc /MD /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor\"\r\nPM_CL=\"-fsanitize=address /EHsc /MD /std:c++latest /permissive- /Zc:noexceptTypes-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MDd /std:c++14 /fp:except /Zc:preprocessor\"\r\nPM_CL=\"-fsanitize=address /EHsc /MDd /std:c++17 /permissive-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MDd /std:c++20 /permissive-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MDd /std:c++latest /permissive- /Zc:wchar_t-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MDd /std:c++latest /permissive-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MT /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MT /std:c++latest /permissive-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MTd /std:c++latest /permissive\"\r\nPM_CL=\"-fsanitize=address /EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MTd /std:c++latest /permissive- /fp:strict\"\r\nPM_CL=\"-fsanitize=address /EHsc /MTd /std:c++latest /permissive-\"\r\nPM_CL=\"/D_ANNOTATE_STRING /BE /c /EHsc /MD /std:c++14\"\r\nPM_CL=\"/D_ANNOTATE_STRING /BE /c /EHsc /MDd /std:c++17 /permissive-\"\r\nPM_CL=\"/D_ANNOTATE_STRING /BE /c /EHsc /MT /std:c++20 /permissive-\"\r\nPM_CL=\"/D_ANNOTATE_STRING /BE /c /EHsc /MTd /std:c++latest /permissive-\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MD /std:c++14\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MD /std:c++14 /Zc:char8_t\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MD /std:c++17\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MD /std:c++17 /Zc:char8_t\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MD /std:c++20\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MD /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MD /std:c++latest /permissive- /Zc:noexceptTypes-\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MDd /std:c++14 /fp:except /Zc:preprocessor\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MDd /std:c++17 /permissive-\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MDd /std:c++20 /permissive-\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MDd /std:c++latest /permissive- /Zc:wchar_t-\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MDd /std:c++latest /permissive-\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MT /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MT /std:c++latest /permissive-\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MTd /std:c++latest /permissive\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MTd /std:c++latest /permissive- /fp:strict\"\r\nPM_CL=\"/D_ANNOTATE_STRING /EHsc /MTd /std:c++latest /permissive-\"\r\n# TRANSITION, we don't use /ALTERNATENAME for Clang (see GH-5224) so we cannot test /D_ANNOTATE_STRING without -fsanitize=address\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fsanitize=address -fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MD /std:c++14\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fsanitize=address -fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MD /std:c++17\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fsanitize=address -fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++20 /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fsanitize=address -fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++latest /permissive- /fp:strict\"\r\n"
  },
  {
    "path": "tests/std/tests/GH_002030_asan_annotate_string/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// REQUIRES: x64 || x86 || arm64\r\n\r\n#if defined(__clang__) && defined(_M_ARM64) // TRANSITION, LLVM-184902, fixed in Clang 23\r\n#pragma comment(linker, \"/INFERASANLIBS\")\r\nint main() {}\r\n#else // ^^^ workaround / no workaround vvv\r\n\r\n#pragma warning(disable : 4984) // 'if constexpr' is a C++17 language extension\r\n#pragma warning(disable : 4324) // '%s': structure was padded due to alignment specifier\r\n#pragma warning(disable : 4365) // '%s': conversion from '%s' to '%s', signed/unsigned mismatch\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wc++17-extensions\" // constexpr if is a C++17 extension\r\n#endif // __clang__\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstring>\r\n#include <iterator>\r\n#include <memory>\r\n#include <new>\r\n#include <sstream>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#if _HAS_CXX17\r\n#include <string_view>\r\n#endif // _HAS_CXX17\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n#ifdef __SANITIZE_ADDRESS__\r\nextern \"C\" int __sanitizer_verify_contiguous_container(const void* beg, const void* mid, const void* end) noexcept;\r\n#endif // ASan instrumentation enabled\r\n\r\nconstexpr auto literal_input = \"Hello fluffy kittens\";\r\n#ifdef __cpp_char8_t\r\nconstexpr auto literal_input_u8 = u8\"Hello fluffy kittens\";\r\n#endif // __cpp_char8_t\r\nconstexpr auto literal_input_u16 = u\"Hello fluffy kittens\";\r\nconstexpr auto literal_input_u32 = U\"Hello fluffy kittens\";\r\nconstexpr auto literal_input_w   = L\"Hello fluffy kittens\";\r\n\r\ntemplate <class CharType>\r\nconstexpr auto get_large_input() {\r\n    if constexpr (is_same_v<CharType, char>) {\r\n        return literal_input;\r\n#ifdef __cpp_char8_t\r\n    } else if constexpr (is_same_v<CharType, char8_t>) {\r\n        return literal_input_u8;\r\n#endif // __cpp_char8_t\r\n    } else if constexpr (is_same_v<CharType, char16_t>) {\r\n        return literal_input_u16;\r\n    } else if constexpr (is_same_v<CharType, char32_t>) {\r\n        return literal_input_u32;\r\n    } else {\r\n        return literal_input_w;\r\n    }\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr auto get_sso_input() {\r\n    if constexpr (is_same_v<CharType, char>) {\r\n        return \"cat\";\r\n#ifdef __cpp_char8_t\r\n    } else if constexpr (is_same_v<CharType, char8_t>) {\r\n        return u8\"cat\";\r\n#endif // __cpp_char8_t\r\n    } else if constexpr (is_same_v<CharType, char16_t>) {\r\n        return u\"cat\";\r\n    } else if constexpr (is_same_v<CharType, char32_t>) {\r\n        return U\"cat\";\r\n    } else {\r\n        return L\"cat\";\r\n    }\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr size_t max_sso_size = (16 / sizeof(CharType) < 1 ? 1 : 16 / sizeof(CharType)) - 1;\r\n\r\n#if _HAS_CXX17\r\ntemplate <class CharType>\r\nconstexpr auto get_large_input_view() {\r\n    return basic_string_view<CharType>{get_large_input<CharType>()};\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr auto get_sso_input_view() {\r\n    return basic_string_view<CharType>{get_sso_input<CharType>()};\r\n}\r\n\r\ntemplate <class CharType>\r\nstruct string_view_convertible {\r\n    constexpr operator basic_string_view<CharType>() const noexcept {\r\n        return get_large_input_view<CharType>();\r\n    }\r\n};\r\n\r\ntemplate <class CharType>\r\nstruct string_view_convertible_sso {\r\n    constexpr operator basic_string_view<CharType>() const noexcept {\r\n        return get_sso_input_view<CharType>();\r\n    }\r\n};\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class CharType>\r\nstruct throw_on_conversion {\r\n    throw_on_conversion() = default;\r\n    throw_on_conversion(CharType) {}\r\n    operator CharType() const {\r\n        throw 42;\r\n    }\r\n};\r\n\r\ntemplate <class CharType, int N>\r\nclass input_iterator_tester {\r\nprivate:\r\n    CharType data[N] = {};\r\n\r\npublic:\r\n    input_iterator_tester() noexcept {\r\n        fill(data, data + N, CharType{'b'});\r\n    }\r\n\r\n    class iterator {\r\n    private:\r\n        CharType* curr;\r\n\r\n    public:\r\n        using iterator_category = input_iterator_tag;\r\n        using value_type        = CharType;\r\n        using difference_type   = ptrdiff_t;\r\n        using pointer           = void;\r\n        using reference         = CharType&;\r\n\r\n        explicit iterator(CharType* start) : curr(start) {}\r\n\r\n        reference operator*() const {\r\n            return *curr;\r\n        }\r\n\r\n        iterator& operator++() {\r\n            ++curr;\r\n            return *this;\r\n        }\r\n\r\n        iterator operator++(int) {\r\n            auto tmp = *this;\r\n            ++curr;\r\n            return tmp;\r\n        }\r\n\r\n        bool operator==(const iterator& that) const {\r\n            return curr == that.curr;\r\n        }\r\n\r\n        bool operator!=(const iterator& that) const {\r\n            return !(*this == that);\r\n        }\r\n    };\r\n\r\n    iterator begin() {\r\n        return iterator(data);\r\n    }\r\n\r\n    iterator end() {\r\n        return iterator(data + N);\r\n    }\r\n};\r\n\r\ntemplate <class CharType, class Alloc>\r\nbool verify_string(const basic_string<CharType, char_traits<CharType>, Alloc>& str) {\r\n#ifdef __SANITIZE_ADDRESS__\r\n    if (str.capacity() == max_sso_size<CharType>) {\r\n        return true;\r\n    }\r\n\r\n    const void* const buffer  = str.data();\r\n    const void* const buf_end = str.data() + str.capacity() + 1;\r\n\r\n    constexpr bool _Large_string_always_aligned =\r\n        (_Container_allocation_minimum_asan_alignment<decay_t<decltype(str)>>) >= 8;\r\n\r\n    _Asan_aligned_pointers aligned;\r\n    if constexpr (_Large_string_always_aligned) {\r\n        aligned = {buffer, _Get_asan_aligned_after(buf_end)};\r\n    } else {\r\n        aligned = _Get_asan_aligned_first_end(buffer, buf_end);\r\n    }\r\n    assert(aligned._First != aligned._End);\r\n\r\n    const void* const mid       = str.data() + str.size() + 1;\r\n    const void* const fixed_mid = aligned._Clamp_to_end(mid);\r\n\r\n    return __sanitizer_verify_contiguous_container(aligned._First, fixed_mid, aligned._End) != 0;\r\n#else // ^^^ ASan instrumentation enabled / ASan instrumentation disabled vvv\r\n    (void) str;\r\n    return true;\r\n#endif // ASan instrumentation disabled\r\n}\r\n\r\n// Note: This class does not satisfy all the allocator requirements but is sufficient for this test.\r\ntemplate <class CharType, class Pocma, class Stateless>\r\nstruct custom_test_allocator {\r\n    using value_type                             = CharType;\r\n    using propagate_on_container_move_assignment = Pocma;\r\n    using is_always_equal                        = Stateless;\r\n};\r\n\r\ntemplate <class T1, class T2, class Pocma, class Stateless>\r\nconstexpr bool operator==(\r\n    const custom_test_allocator<T1, Pocma, Stateless>&, const custom_test_allocator<T2, Pocma, Stateless>&) noexcept {\r\n    return Stateless::value;\r\n}\r\n\r\ntemplate <class T1, class T2, class Pocma, class Stateless>\r\nconstexpr bool operator!=(\r\n    const custom_test_allocator<T1, Pocma, Stateless>&, const custom_test_allocator<T2, Pocma, Stateless>&) noexcept {\r\n    return !Stateless::value;\r\n}\r\n\r\ntemplate <class CharType, class Pocma = true_type, class Stateless = true_type>\r\nstruct aligned_allocator : public custom_test_allocator<CharType, Pocma, Stateless> {\r\n    static constexpr size_t _Minimum_asan_allocation_alignment = 8;\r\n\r\n    aligned_allocator() = default;\r\n    template <class U>\r\n    constexpr aligned_allocator(const aligned_allocator<U, Pocma, Stateless>&) noexcept {}\r\n\r\n    CharType* allocate(size_t n) {\r\n        return new CharType[n];\r\n    }\r\n\r\n    void deallocate(CharType* p, size_t) noexcept {\r\n        delete[] p;\r\n    }\r\n};\r\nSTATIC_ASSERT(\r\n    _Container_allocation_minimum_asan_alignment<basic_string<char, char_traits<char>, aligned_allocator<char>>> == 8);\r\nSTATIC_ASSERT(_Container_allocation_minimum_asan_alignment<\r\n                  basic_string<wchar_t, char_traits<wchar_t>, aligned_allocator<wchar_t>>>\r\n              == 8);\r\n\r\ntemplate <class CharType, class Pocma = true_type, class Stateless = true_type>\r\nstruct explicit_allocator : public custom_test_allocator<CharType, Pocma, Stateless> {\r\n    static constexpr size_t _Minimum_asan_allocation_alignment = alignof(CharType);\r\n\r\n    explicit_allocator() = default;\r\n    template <class U>\r\n    constexpr explicit_allocator(const explicit_allocator<U, Pocma, Stateless>&) noexcept {}\r\n\r\n    CharType* allocate(size_t n) {\r\n        CharType* mem = new CharType[n + 1];\r\n        return mem + 1;\r\n    }\r\n\r\n    void deallocate(CharType* p, size_t) noexcept {\r\n        delete[] (p - 1);\r\n    }\r\n};\r\nSTATIC_ASSERT(\r\n    _Container_allocation_minimum_asan_alignment<basic_string<char, char_traits<char>, explicit_allocator<char>>> == 1);\r\nSTATIC_ASSERT(_Container_allocation_minimum_asan_alignment<\r\n                  basic_string<wchar_t, char_traits<wchar_t>, explicit_allocator<wchar_t>>>\r\n              == 2);\r\n\r\ntemplate <class CharType, class Pocma = true_type, class Stateless = true_type>\r\nstruct implicit_allocator : public custom_test_allocator<CharType, Pocma, Stateless> {\r\n    implicit_allocator() = default;\r\n    template <class U>\r\n    constexpr implicit_allocator(const implicit_allocator<U, Pocma, Stateless>&) noexcept {}\r\n\r\n    CharType* allocate(size_t n) {\r\n        CharType* mem = new CharType[n + 1];\r\n        return mem + 1;\r\n    }\r\n\r\n    void deallocate(CharType* p, size_t) noexcept {\r\n        delete[] (p - 1);\r\n    }\r\n};\r\nSTATIC_ASSERT(\r\n    _Container_allocation_minimum_asan_alignment<basic_string<char, char_traits<char>, implicit_allocator<char>>> == 1);\r\nSTATIC_ASSERT(_Container_allocation_minimum_asan_alignment<\r\n                  basic_string<wchar_t, char_traits<wchar_t>, implicit_allocator<wchar_t>>>\r\n              == 2);\r\n\r\n// Simple allocator that opts out of ASan annotations (via `_Disable_ASan_container_annotations_for_allocator`)\r\ntemplate <class T, class Pocma = true_type, class Stateless = true_type>\r\nstruct implicit_allocator_no_asan_annotations : implicit_allocator<T, Pocma, Stateless> {\r\n    implicit_allocator_no_asan_annotations() = default;\r\n    template <class U>\r\n    constexpr implicit_allocator_no_asan_annotations(\r\n        const implicit_allocator_no_asan_annotations<U, Pocma, Stateless>&) noexcept {}\r\n\r\n    T* allocate(size_t n) {\r\n        T* mem = new T[n + 1];\r\n        return mem + 1;\r\n    }\r\n\r\n    void deallocate(T* p, size_t) noexcept {\r\n        delete[] (p - 1);\r\n    }\r\n};\r\n\r\ntemplate <class T, class Pocma, class Stateless>\r\nconstexpr bool\r\n    _Disable_ASan_container_annotations_for_allocator<implicit_allocator_no_asan_annotations<T, Pocma, Stateless>> =\r\n        true;\r\n\r\ntemplate <class Alloc>\r\nvoid test_construction() {\r\n    using CharType = typename Alloc::value_type;\r\n    using str      = basic_string<CharType, char_traits<CharType>, Alloc>;\r\n    { // constructors\r\n        // range constructors\r\n        str literal_constructed_sso{get_sso_input<CharType>()};\r\n        assert(verify_string(literal_constructed_sso));\r\n\r\n        str literal_constructed{get_large_input<CharType>()};\r\n        assert(verify_string(literal_constructed));\r\n\r\n        str initializer_list_constructed({CharType{'H'}, CharType{'e'}, CharType{'l'}, CharType{'l'}, CharType{'o'},\r\n            CharType{' '}, //\r\n            CharType{'f'}, CharType{'l'}, CharType{'u'}, CharType{'f'}, CharType{'f'}, CharType{'y'}, CharType{' '},\r\n            CharType{'k'}, CharType{'i'}, CharType{'t'}, CharType{'t'}, CharType{'e'}, CharType{'n'}, CharType{'s'}});\r\n        assert(verify_string(initializer_list_constructed));\r\n\r\n        str initializer_list_constructed_sso({CharType{'c'}, CharType{'a'}, CharType{'t'}});\r\n        assert(verify_string(initializer_list_constructed_sso));\r\n\r\n        // special member functions\r\n        str default_constructed;\r\n        assert(verify_string(default_constructed));\r\n\r\n        str copy_constructed(literal_constructed);\r\n        assert(verify_string(copy_constructed));\r\n\r\n        str copy_constructed_sso(literal_constructed_sso);\r\n        assert(verify_string(copy_constructed_sso));\r\n\r\n        str move_constructed(move(copy_constructed));\r\n        assert(verify_string(copy_constructed));\r\n        assert(verify_string(move_constructed));\r\n\r\n        str move_constructed_sso(move(copy_constructed_sso));\r\n        assert(verify_string(copy_constructed_sso));\r\n        assert(verify_string(move_constructed_sso));\r\n\r\n        str copy_assigned_sso_to_sso(get_sso_input<CharType>());\r\n        copy_assigned_sso_to_sso = literal_constructed_sso;\r\n        assert(verify_string(literal_constructed_sso));\r\n        assert(verify_string(copy_assigned_sso_to_sso));\r\n\r\n        str copy_assigned_large_to_sso(get_sso_input<CharType>());\r\n        copy_assigned_large_to_sso = literal_constructed;\r\n        assert(verify_string(literal_constructed));\r\n        assert(verify_string(copy_assigned_large_to_sso));\r\n\r\n        str copy_assigned_sso_to_large(get_large_input<CharType>());\r\n        copy_assigned_sso_to_large = literal_constructed_sso;\r\n        assert(verify_string(literal_constructed_sso));\r\n        assert(verify_string(copy_assigned_sso_to_large));\r\n\r\n        str copy_assigned_large_to_large(get_large_input<CharType>());\r\n        copy_assigned_large_to_large = literal_constructed;\r\n        assert(verify_string(literal_constructed));\r\n        assert(verify_string(copy_assigned_large_to_large));\r\n\r\n        str move_assigned_sso_to_sso(get_sso_input<CharType>());\r\n        move_assigned_sso_to_sso = move(copy_assigned_sso_to_sso);\r\n        assert(verify_string(copy_assigned_sso_to_sso));\r\n        assert(verify_string(move_assigned_sso_to_sso));\r\n\r\n        str move_assigned_large_to_sso(get_sso_input<CharType>());\r\n        move_assigned_large_to_sso = move(copy_assigned_large_to_sso);\r\n        assert(verify_string(copy_assigned_large_to_sso));\r\n        assert(verify_string(move_assigned_large_to_sso));\r\n\r\n        str move_assigned_sso_to_large(get_large_input<CharType>());\r\n        move_assigned_sso_to_large = move(copy_assigned_sso_to_large);\r\n        assert(verify_string(copy_assigned_sso_to_large));\r\n        assert(verify_string(move_assigned_sso_to_large));\r\n\r\n        str move_assigned_large_to_large(get_large_input<CharType>());\r\n        move_assigned_large_to_large = move(copy_assigned_large_to_large);\r\n        assert(verify_string(copy_assigned_large_to_large));\r\n        assert(verify_string(move_assigned_large_to_large));\r\n\r\n        // Other constructors\r\n        str size_value_constructed(20, CharType{'a'});\r\n        assert(verify_string(size_value_constructed));\r\n\r\n        str size_value_constructed_sso(2, CharType{'a'});\r\n        assert(verify_string(size_value_constructed_sso));\r\n\r\n        str ptr_size_constructed(get_large_input<CharType>(), 20);\r\n        assert(verify_string(ptr_size_constructed));\r\n\r\n        str ptr_size_constructed_sso(get_large_input<CharType>(), 2);\r\n        assert(verify_string(ptr_size_constructed_sso));\r\n\r\n        str iterator_constructed(literal_constructed.begin(), literal_constructed.end());\r\n        assert(verify_string(iterator_constructed));\r\n        assert(verify_string(literal_constructed));\r\n\r\n        str iterator_constructed_sso(literal_constructed_sso.begin(), literal_constructed_sso.end());\r\n        assert(verify_string(iterator_constructed_sso));\r\n        assert(verify_string(literal_constructed_sso));\r\n\r\n        input_iterator_tester<CharType, 20> input_iter_data;\r\n        str input_iterator_constructed(input_iter_data.begin(), input_iter_data.end());\r\n        assert(verify_string(input_iterator_constructed));\r\n\r\n        input_iterator_tester<CharType, 3> input_iter_data_sso;\r\n        str input_iterator_constructed_sso(input_iter_data_sso.begin(), input_iter_data_sso.end());\r\n        assert(verify_string(input_iterator_constructed_sso));\r\n\r\n#if _HAS_CXX17\r\n        str copy_start_constructed_large_to_large(literal_constructed, 2);\r\n        assert(verify_string(copy_start_constructed_large_to_large));\r\n        assert(verify_string(literal_constructed));\r\n\r\n        str copy_start_constructed_large_to_sso(literal_constructed, 20);\r\n        assert(verify_string(copy_start_constructed_large_to_sso));\r\n        assert(verify_string(literal_constructed));\r\n\r\n        str copy_start_constructed_sso_to_sso(literal_constructed_sso, 1);\r\n        assert(verify_string(copy_start_constructed_sso_to_sso));\r\n        assert(verify_string(literal_constructed_sso));\r\n\r\n        str copy_start_length_constructed_large_to_large(literal_constructed, 2, 18);\r\n        assert(verify_string(copy_start_length_constructed_large_to_large));\r\n        assert(verify_string(literal_constructed));\r\n\r\n        str copy_start_length_constructed_large_to_sso(literal_constructed, 20, 2);\r\n        assert(verify_string(copy_start_length_constructed_large_to_sso));\r\n        assert(verify_string(literal_constructed));\r\n\r\n        str copy_start_length_constructed_sso_to_sso(literal_constructed_sso, 1, 2);\r\n        assert(verify_string(copy_start_length_constructed_sso_to_sso));\r\n        assert(verify_string(literal_constructed_sso));\r\n\r\n        str view_constructed(get_large_input_view<CharType>());\r\n        assert(verify_string(view_constructed));\r\n\r\n        str view_constructed_sso(get_sso_input_view<CharType>());\r\n        assert(verify_string(view_constructed_sso));\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        str conversion_constructed(convertible);\r\n        assert(verify_string(conversion_constructed));\r\n\r\n        str conversion_start_length_constructed(convertible, 2, 18);\r\n        assert(verify_string(conversion_start_length_constructed));\r\n\r\n        str conversion_start_length_constructed_sso(convertible, 18, 2);\r\n        assert(verify_string(conversion_start_length_constructed));\r\n\r\n        const string_view_convertible_sso<CharType> convertible_sso;\r\n        str conversion_constructed_sso(convertible_sso);\r\n        assert(verify_string(conversion_constructed_sso));\r\n\r\n        str conversion_start_length_constructed_sso_to_sso(convertible_sso, 1, 2);\r\n        assert(verify_string(conversion_start_length_constructed_sso_to_sso));\r\n#endif // _HAS_CXX17\r\n    }\r\n\r\n    { // allocator constructors\r\n        Alloc alloc;\r\n\r\n        // range constructors\r\n        str literal_constructed{get_large_input<CharType>(), alloc};\r\n        assert(verify_string(literal_constructed));\r\n\r\n        str literal_constructed_sso{get_sso_input<CharType>(), alloc};\r\n        assert(verify_string(literal_constructed_sso));\r\n\r\n        str initializer_list_constructed(\r\n            {CharType{'H'}, CharType{'e'}, CharType{'l'}, CharType{'l'}, CharType{'o'}, CharType{' '}, //\r\n                CharType{'f'}, CharType{'l'}, CharType{'u'}, CharType{'f'}, CharType{'f'}, CharType{'y'}, CharType{' '},\r\n                CharType{'k'}, CharType{'i'}, CharType{'t'}, CharType{'t'}, CharType{'e'}, CharType{'n'},\r\n                CharType{'s'}},\r\n            alloc);\r\n        assert(verify_string(initializer_list_constructed));\r\n\r\n        str initializer_list_constructed_sso({CharType{'c'}, CharType{'a'}, CharType{'t'}}, alloc);\r\n        assert(verify_string(initializer_list_constructed_sso));\r\n\r\n        // special member functions\r\n        str default_constructed;\r\n        assert(verify_string(default_constructed));\r\n\r\n        str copy_constructed(literal_constructed);\r\n        assert(verify_string(copy_constructed));\r\n\r\n        str copy_constructed_sso(literal_constructed_sso);\r\n        assert(verify_string(copy_constructed_sso));\r\n\r\n        str move_constructed(move(copy_constructed));\r\n        assert(verify_string(copy_constructed));\r\n        assert(verify_string(move_constructed));\r\n\r\n        str move_constructed_sso(move(copy_constructed_sso));\r\n        assert(verify_string(copy_constructed_sso));\r\n        assert(verify_string(move_constructed_sso));\r\n\r\n        // Other constructors\r\n        str size_value_constructed(20, CharType{'a'}, alloc);\r\n        assert(verify_string(size_value_constructed));\r\n\r\n        str size_value_constructed_sso(2, CharType{'a'}, alloc);\r\n        assert(verify_string(size_value_constructed_sso));\r\n\r\n        str ptr_size_constructed(get_large_input<CharType>(), 20, alloc);\r\n        assert(verify_string(ptr_size_constructed));\r\n\r\n        str ptr_size_constructed_sso(get_large_input<CharType>(), 2, alloc);\r\n        assert(verify_string(ptr_size_constructed_sso));\r\n\r\n        str iterator_constructed(literal_constructed.begin(), literal_constructed.end(), alloc);\r\n        assert(verify_string(iterator_constructed));\r\n        assert(verify_string(literal_constructed));\r\n\r\n        str iterator_constructed_sso(literal_constructed_sso.begin(), literal_constructed_sso.end(), alloc);\r\n        assert(verify_string(iterator_constructed_sso));\r\n        assert(verify_string(literal_constructed_sso));\r\n\r\n        input_iterator_tester<CharType, 20> input_iter_data;\r\n        str input_iterator_constructed(input_iter_data.begin(), input_iter_data.end(), alloc);\r\n        assert(verify_string(input_iterator_constructed));\r\n\r\n        input_iterator_tester<CharType, 3> input_iter_data_sso;\r\n        str input_iterator_constructed_sso(input_iter_data_sso.begin(), input_iter_data_sso.end(), alloc);\r\n        assert(verify_string(input_iterator_constructed_sso));\r\n\r\n#if _HAS_CXX17\r\n        str view_constructed(get_large_input_view<CharType>(), alloc);\r\n        assert(verify_string(view_constructed));\r\n\r\n        str view_constructed_sso(get_sso_input_view<CharType>(), alloc);\r\n        assert(verify_string(view_constructed_sso));\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        const string_view_convertible_sso<CharType> convertible_sso;\r\n        str conversion_constructed(convertible, alloc);\r\n        assert(verify_string(conversion_constructed));\r\n\r\n        str conversion_constructed_sso(convertible_sso, alloc);\r\n        assert(verify_string(conversion_constructed_sso));\r\n\r\n        str conversion_start_length_constructed(convertible, 2, 18, alloc);\r\n        assert(verify_string(conversion_start_length_constructed));\r\n\r\n        str conversion_start_length_constructed_sso(convertible, 18, 2, alloc);\r\n        assert(verify_string(conversion_start_length_constructed));\r\n\r\n        str conversion_start_length_constructed_sso_to_sso(convertible_sso, 1, 2, alloc);\r\n        assert(verify_string(conversion_start_length_constructed_sso_to_sso));\r\n#endif // _HAS_CXX17\r\n    }\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_append() {\r\n    using CharType = typename Alloc::value_type;\r\n    using str      = basic_string<CharType, char_traits<CharType>, Alloc>;\r\n\r\n    constexpr size_t large_size = 20;\r\n    constexpr size_t sso_size   = 1;\r\n\r\n    const str input(large_size, CharType{'b'});\r\n    const str input_sso(sso_size, CharType{'b'});\r\n    const str input_sso_growing(max_sso_size<CharType>, CharType{'b'});\r\n\r\n    { // push_back\r\n        str push_back{input};\r\n        push_back.push_back(CharType{'y'});\r\n        assert(verify_string(push_back));\r\n\r\n        str push_back_sso{input_sso};\r\n        push_back_sso.push_back(CharType{'y'});\r\n        assert(verify_string(push_back_sso));\r\n\r\n        str push_back_growing{input_sso_growing};\r\n        push_back_growing.push_back(CharType{'y'});\r\n        assert(verify_string(push_back_growing));\r\n    }\r\n\r\n    { // append\r\n        str append_size_char{input};\r\n        append_size_char.append(5, CharType{'a'});\r\n        assert(verify_string(append_size_char));\r\n\r\n        str append_size_char_sso{input_sso};\r\n        append_size_char_sso.append(2, CharType{'a'});\r\n        assert(verify_string(append_size_char_sso));\r\n\r\n        str append_size_char_growing{input_sso_growing};\r\n        append_size_char_growing.append(2, CharType{'a'});\r\n        assert(verify_string(append_size_char_growing));\r\n\r\n        str append_str{input};\r\n        append_str.append(input_sso);\r\n        assert(verify_string(append_str));\r\n\r\n        str append_str_sso{input_sso};\r\n        append_str_sso.append(input_sso);\r\n        assert(verify_string(append_str_sso));\r\n\r\n        str append_str_growing{input_sso_growing};\r\n        append_str_growing.append(input_sso);\r\n        assert(verify_string(append_str_growing));\r\n\r\n        str append_str_pos{input};\r\n        append_str_pos.append(input_sso, 1);\r\n        assert(verify_string(append_str_pos));\r\n\r\n        str append_str_pos_sso{input_sso};\r\n        append_str_pos_sso.append(input_sso, 1);\r\n        assert(verify_string(append_str_pos_sso));\r\n\r\n        str append_str_pos_growing{input_sso_growing};\r\n        append_str_pos_growing.append(input_sso, 1);\r\n        assert(verify_string(append_str_pos_growing));\r\n\r\n        str append_str_pos_len{input};\r\n        append_str_pos_len.append(input_sso, 1, 2);\r\n        assert(verify_string(append_str_pos_len));\r\n\r\n        str append_str_pos_len_sso{input_sso};\r\n        append_str_pos_len_sso.append(input_sso, 1, 2);\r\n        assert(verify_string(append_str_pos_len_sso));\r\n\r\n        str append_str_pos_len_growing{input_sso_growing};\r\n        append_str_pos_len_growing.append(input_sso, 1, 2);\r\n        assert(verify_string(append_str_pos_len_growing));\r\n\r\n        str append_literal{input};\r\n        append_literal.append(get_sso_input<CharType>());\r\n        assert(verify_string(append_literal));\r\n\r\n        str append_literal_sso{input_sso};\r\n        append_literal_sso.append(get_sso_input<CharType>());\r\n        assert(verify_string(append_literal_sso));\r\n\r\n        str append_literal_growing{input_sso_growing};\r\n        append_literal_growing.append(get_sso_input<CharType>());\r\n        assert(verify_string(append_literal_growing));\r\n\r\n        str append_literal_size{input};\r\n        append_literal_size.append(get_sso_input<CharType>(), 2);\r\n        assert(verify_string(append_literal_size));\r\n\r\n        str append_literal_size_sso{input_sso};\r\n        append_literal_size_sso.append(get_sso_input<CharType>(), 2);\r\n        assert(verify_string(append_literal_size_sso));\r\n\r\n        str append_literal_size_growing{input_sso_growing};\r\n        append_literal_size_growing.append(get_sso_input<CharType>(), 2);\r\n        assert(verify_string(append_literal_size_growing));\r\n\r\n        str append_iterator{input};\r\n        append_iterator.append(input_sso.begin(), input_sso.end());\r\n        assert(verify_string(append_iterator));\r\n\r\n        str append_iterator_sso{input_sso};\r\n        append_iterator_sso.append(input_sso.begin(), input_sso.end());\r\n        assert(verify_string(append_iterator_sso));\r\n\r\n        str append_iterator_growing{input_sso_growing};\r\n        append_iterator_growing.append(input_sso.begin(), input_sso.end());\r\n        assert(verify_string(append_iterator_growing));\r\n\r\n        input_iterator_tester<CharType, 3> input_iter_data;\r\n        str append_input_iterator{input};\r\n        append_input_iterator.append(input_iter_data.begin(), input_iter_data.end());\r\n        assert(verify_string(append_input_iterator));\r\n\r\n        str append_input_iterator_sso{input_sso};\r\n        append_input_iterator_sso.append(input_iter_data.begin(), input_iter_data.end());\r\n        assert(verify_string(append_input_iterator_sso));\r\n\r\n        str append_input_iterator_growing{input_sso_growing};\r\n        append_input_iterator_growing.append(input_iter_data.begin(), input_iter_data.end());\r\n        assert(verify_string(append_input_iterator_growing));\r\n\r\n        str append_initializer_list{input};\r\n        append_initializer_list.append({CharType{'b'}, CharType{'b'}});\r\n        assert(verify_string(append_initializer_list));\r\n\r\n        str append_initializer_list_sso{input_sso};\r\n        append_initializer_list_sso.append({CharType{'b'}, CharType{'b'}});\r\n        assert(verify_string(append_initializer_list_sso));\r\n\r\n        str append_initializer_list_growing{input_sso_growing};\r\n        append_initializer_list_growing.append({CharType{'b'}, CharType{'b'}});\r\n        assert(verify_string(append_initializer_list_growing));\r\n\r\n#if _HAS_CXX17\r\n        const string_view_convertible_sso<CharType> convertible;\r\n        str append_conversion{input};\r\n        append_conversion.append(convertible);\r\n        assert(verify_string(append_conversion));\r\n\r\n        str append_conversion_sso{input_sso};\r\n        append_conversion_sso.append(convertible);\r\n        assert(verify_string(append_conversion_sso));\r\n\r\n        str append_conversion_growing{input_sso_growing};\r\n        append_conversion_growing.append(convertible);\r\n        assert(verify_string(append_conversion_growing));\r\n\r\n        str append_conversion_start_length{input};\r\n        append_conversion_start_length.append(convertible, 1, 2);\r\n        assert(verify_string(append_conversion_start_length));\r\n\r\n        str append_conversion_start_length_sso{input_sso};\r\n        append_conversion_start_length_sso.append(convertible, 1, 2);\r\n        assert(verify_string(append_conversion_start_length_sso));\r\n\r\n        str append_conversion_start_length_growing{input_sso_growing};\r\n        append_conversion_start_length_growing.append(convertible, 1, 2);\r\n        assert(verify_string(append_conversion_start_length_growing));\r\n#endif // _HAS_CXX17\r\n    }\r\n\r\n    { // operator+=\r\n        str plus_string{input};\r\n        plus_string += input_sso;\r\n        assert(verify_string(plus_string));\r\n\r\n        str plus_string_sso{input_sso};\r\n        plus_string_sso += input_sso;\r\n        assert(verify_string(plus_string_sso));\r\n\r\n        str plus_string_growing{input_sso_growing};\r\n        plus_string_growing += input_sso;\r\n        assert(verify_string(plus_string_growing));\r\n\r\n        str plus_character{input};\r\n        plus_character += CharType{'a'};\r\n        assert(verify_string(plus_character));\r\n\r\n        str plus_character_sso{input_sso};\r\n        plus_character_sso += CharType{'a'};\r\n        assert(verify_string(plus_character_sso));\r\n\r\n        str plus_character_growing{input_sso_growing};\r\n        plus_character_growing += CharType{'a'};\r\n        assert(verify_string(plus_character_growing));\r\n\r\n        str plus_literal{input};\r\n        plus_literal += get_sso_input<CharType>();\r\n        assert(verify_string(plus_literal));\r\n\r\n        str plus_literal_sso{input_sso};\r\n        plus_literal_sso += get_sso_input<CharType>();\r\n        assert(verify_string(plus_literal_sso));\r\n\r\n        str plus_literal_growing{input_sso_growing};\r\n        plus_literal_growing += get_sso_input<CharType>();\r\n        assert(verify_string(plus_literal_growing));\r\n\r\n        str plus_initializer_list{input};\r\n        plus_initializer_list += {CharType{'c'}, CharType{'a'}, CharType{'t'}};\r\n        assert(verify_string(plus_initializer_list));\r\n\r\n        str plus_initializer_list_sso{input_sso};\r\n        plus_initializer_list_sso += {CharType{'c'}, CharType{'a'}, CharType{'t'}};\r\n        assert(verify_string(plus_initializer_list_sso));\r\n\r\n        str plus_initializer_list_growing{input_sso_growing};\r\n        plus_initializer_list_growing += {CharType{'c'}, CharType{'a'}, CharType{'t'}};\r\n        assert(verify_string(plus_initializer_list_growing));\r\n\r\n#if _HAS_CXX17\r\n        const string_view_convertible_sso<CharType> convertible;\r\n        str plus_conversion{input};\r\n        plus_conversion += convertible;\r\n        assert(verify_string(plus_conversion));\r\n\r\n        str plus_conversion_sso{input_sso};\r\n        plus_conversion_sso += convertible;\r\n        assert(verify_string(plus_conversion_sso));\r\n\r\n        str plus_conversion_growing{input_sso_growing};\r\n        plus_conversion_growing += convertible;\r\n        assert(verify_string(plus_conversion_growing));\r\n#endif // _HAS_CXX17\r\n    }\r\n\r\n    { // operator+\r\n        str op_str_str_large_large = input + input;\r\n        assert(verify_string(op_str_str_large_large));\r\n\r\n        str op_str_str_large_sso = input + input_sso;\r\n        assert(verify_string(op_str_str_large_sso));\r\n\r\n        str op_str_str_sso_large = input_sso + input;\r\n        assert(verify_string(op_str_str_sso_large));\r\n\r\n        str op_str_str_sso_sso = input_sso + input_sso;\r\n        assert(verify_string(op_str_str_sso_sso));\r\n\r\n        str op_str_literal_large_large = input + get_large_input<CharType>();\r\n        assert(verify_string(op_str_literal_large_large));\r\n\r\n        str op_str_literal_large_sso = input + get_sso_input<CharType>();\r\n        assert(verify_string(op_str_literal_large_sso));\r\n\r\n        str op_str_literal_sso_large = input_sso + get_large_input<CharType>();\r\n        assert(verify_string(op_str_literal_sso_large));\r\n\r\n        str op_str_literal_sso_sso = input_sso + get_sso_input<CharType>();\r\n        assert(verify_string(op_str_literal_sso_sso));\r\n\r\n        str op_literal_str_large_large = get_large_input<CharType>() + input;\r\n        assert(verify_string(op_literal_str_large_large));\r\n\r\n        str op_literal_str_large_sso = get_large_input<CharType>() + input;\r\n        assert(verify_string(op_literal_str_large_sso));\r\n\r\n        str op_literal_str_sso_large = get_sso_input<CharType>() + input_sso;\r\n        assert(verify_string(op_literal_str_sso_large));\r\n\r\n        str op_literal_str_sso_sso = get_sso_input<CharType>() + input_sso;\r\n        assert(verify_string(op_literal_str_sso_sso));\r\n\r\n        str op_str_char_large = input + CharType{'!'};\r\n        assert(verify_string(op_str_char_large));\r\n\r\n        str op_str_char_sso = input_sso + CharType{'!'};\r\n        assert(verify_string(op_str_char_sso));\r\n\r\n        str op_str_char_sso_growing = input_sso_growing + CharType{'!'};\r\n        assert(verify_string(op_str_char_sso_growing));\r\n\r\n        str op_char_str_large = CharType{'!'} + input;\r\n        assert(verify_string(op_char_str_large));\r\n\r\n        str op_char_str_sso = CharType{'!'} + input_sso;\r\n        assert(verify_string(op_char_str_sso));\r\n\r\n        str op_char_str_sso_growing = CharType{'!'} + input_sso_growing;\r\n        assert(verify_string(op_char_str_sso_growing));\r\n\r\n        // With rvalue input\r\n        str op_rstr_rstr_large_large = str(large_size, CharType{'b'}) + str(large_size, CharType{'b'});\r\n        assert(verify_string(op_rstr_rstr_large_large));\r\n\r\n        str op_rstr_rstr_large_sso = str(large_size, CharType{'b'}) + str(sso_size, CharType{'b'});\r\n        assert(verify_string(op_rstr_rstr_large_sso));\r\n\r\n        str op_rstr_rstr_sso_large = str(sso_size, CharType{'b'}) + str(large_size, CharType{'b'});\r\n        assert(verify_string(op_rstr_rstr_sso_large));\r\n\r\n        str op_rstr_rstr_sso_sso = str(sso_size, CharType{'b'}) + str(sso_size, CharType{'b'});\r\n        assert(verify_string(op_rstr_rstr_sso_sso));\r\n\r\n        str op_rstr_literal_large_large = str(large_size, CharType{'b'}) + get_large_input<CharType>();\r\n        assert(verify_string(op_rstr_literal_large_large));\r\n\r\n        str op_rstr_literal_large_sso = str(large_size, CharType{'b'}) + get_sso_input<CharType>();\r\n        assert(verify_string(op_rstr_literal_large_sso));\r\n\r\n        str op_rstr_literal_sso_large = str(sso_size, CharType{'b'}) + get_large_input<CharType>();\r\n        assert(verify_string(op_rstr_literal_sso_large));\r\n\r\n        str op_rstr_literal_sso_sso = str(sso_size, CharType{'b'}) + get_sso_input<CharType>();\r\n        assert(verify_string(op_rstr_literal_sso_sso));\r\n\r\n        str op_literal_rstr_large_large = get_large_input<CharType>() + str(large_size, CharType{'b'});\r\n        assert(verify_string(op_literal_rstr_large_large));\r\n\r\n        str op_literal_rstr_large_sso = get_large_input<CharType>() + str(large_size, CharType{'b'});\r\n        assert(verify_string(op_literal_rstr_large_sso));\r\n\r\n        str op_literal_rstr_sso_large = get_sso_input<CharType>() + str(sso_size, CharType{'b'});\r\n        assert(verify_string(op_literal_rstr_sso_large));\r\n\r\n        str op_literal_rstr_sso_sso = get_sso_input<CharType>() + str(sso_size, CharType{'b'});\r\n        assert(verify_string(op_literal_rstr_sso_sso));\r\n\r\n        str op_rstr_char_large = str(large_size, CharType{'b'}) + CharType{'!'};\r\n        assert(verify_string(op_rstr_char_large));\r\n\r\n        str op_rstr_char_sso = str(sso_size, CharType{'b'}) + CharType{'!'};\r\n        assert(verify_string(op_rstr_char_sso));\r\n\r\n        str op_rstr_char_sso_growing = str(max_sso_size<CharType>, CharType{'b'}) + CharType{'!'};\r\n        assert(verify_string(op_rstr_char_sso_growing));\r\n\r\n        str op_char_rstr_large = CharType{'!'} + str(large_size, CharType{'b'});\r\n        assert(verify_string(op_char_rstr_large));\r\n\r\n        str op_char_rstr_sso = CharType{'!'} + str(sso_size, CharType{'b'});\r\n        assert(verify_string(op_char_rstr_sso));\r\n\r\n        str op_char_rstr_sso_growing = CharType{'!'} + str(max_sso_size<CharType>, CharType{'b'});\r\n        assert(verify_string(op_char_rstr_sso_growing));\r\n    }\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_assign() {\r\n    using CharType = typename Alloc::value_type;\r\n    using str      = basic_string<CharType, char_traits<CharType>, Alloc>;\r\n\r\n    constexpr size_t large_size = 20;\r\n    constexpr size_t sso_size   = 2;\r\n\r\n    const str start(large_size - 1, CharType{'a'});\r\n    const str start_sso(sso_size + 1, CharType{'a'});\r\n\r\n    const str input(large_size, CharType{'b'});\r\n    const str input_sso(sso_size, CharType{'b'});\r\n\r\n    input_iterator_tester<CharType, 20> input_iter_data;\r\n    input_iterator_tester<CharType, 3> input_iter_data_sso;\r\n\r\n    { // assignment operator\r\n        str copy_assigned_large_large{start};\r\n        copy_assigned_large_large = input;\r\n        assert(verify_string(copy_assigned_large_large));\r\n\r\n        str copy_assigned_large_sso{start};\r\n        copy_assigned_large_sso = input_sso;\r\n        assert(verify_string(copy_assigned_large_sso));\r\n\r\n        str copy_assigned_sso_large{start_sso};\r\n        copy_assigned_sso_large = input;\r\n        assert(verify_string(copy_assigned_sso_large));\r\n\r\n        str copy_assigned_sso_sso{start_sso};\r\n        copy_assigned_sso_sso = input_sso;\r\n        assert(verify_string(copy_assigned_sso_sso));\r\n\r\n        str move_assigned_large_large{start};\r\n        move_assigned_large_large = move(copy_assigned_large_large);\r\n        assert(verify_string(copy_assigned_large_large));\r\n        assert(verify_string(move_assigned_large_large));\r\n\r\n        str move_assigned_large_sso{start};\r\n        move_assigned_large_sso = move(copy_assigned_large_sso);\r\n        assert(verify_string(copy_assigned_large_sso));\r\n        assert(verify_string(move_assigned_large_sso));\r\n\r\n        str move_assigned_sso_large{start_sso};\r\n        move_assigned_sso_large = move(move_assigned_large_large);\r\n        assert(verify_string(move_assigned_large_large));\r\n        assert(verify_string(move_assigned_sso_large));\r\n\r\n        str move_assigned_sso_sso{start_sso};\r\n        move_assigned_sso_sso = move(move_assigned_large_sso);\r\n        assert(verify_string(move_assigned_large_sso));\r\n        assert(verify_string(move_assigned_sso_sso));\r\n\r\n        str literal_assigned_large_large{start};\r\n        literal_assigned_large_large = get_large_input<CharType>();\r\n        assert(verify_string(literal_assigned_large_large));\r\n\r\n        str literal_assigned_large_sso{start};\r\n        literal_assigned_large_sso = get_sso_input<CharType>();\r\n        assert(verify_string(literal_assigned_large_sso));\r\n\r\n        str literal_assigned_sso_large{start_sso};\r\n        literal_assigned_sso_large = get_large_input<CharType>();\r\n        assert(verify_string(literal_assigned_sso_large));\r\n\r\n        str literal_assigned_sso_sso{start_sso};\r\n        literal_assigned_sso_sso = get_sso_input<CharType>();\r\n        assert(verify_string(literal_assigned_sso_sso));\r\n\r\n        str char_assigned_large{start};\r\n        char_assigned_large = CharType{'!'};\r\n        assert(verify_string(char_assigned_large));\r\n\r\n        str char_assigned_sso{start_sso};\r\n        char_assigned_sso = CharType{'!'};\r\n        assert(verify_string(char_assigned_sso));\r\n\r\n        str initializer_list_assigned_large_large{start};\r\n        initializer_list_assigned_large_large = {CharType{'H'}, CharType{'e'}, CharType{'l'}, CharType{'l'},\r\n            CharType{'o'}, CharType{' '}, //\r\n            CharType{'f'}, CharType{'l'}, CharType{'u'}, CharType{'f'}, CharType{'f'}, CharType{'y'}, CharType{' '},\r\n            CharType{'k'}, CharType{'i'}, CharType{'t'}, CharType{'t'}, CharType{'e'}, CharType{'n'}, CharType{'s'}};\r\n        assert(verify_string(initializer_list_assigned_large_large));\r\n\r\n        str initializer_list_assigned_large_sso{start};\r\n        initializer_list_assigned_large_sso = {CharType{'c'}, CharType{'a'}, CharType{'t'}};\r\n        assert(verify_string(initializer_list_assigned_large_sso));\r\n\r\n        str initializer_list_assigned_sso_large{start_sso};\r\n        initializer_list_assigned_sso_large = {CharType{'H'}, CharType{'e'}, CharType{'l'}, CharType{'l'},\r\n            CharType{'o'}, CharType{' '}, //\r\n            CharType{'f'}, CharType{'l'}, CharType{'u'}, CharType{'f'}, CharType{'f'}, CharType{'y'}, CharType{' '},\r\n            CharType{'k'}, CharType{'i'}, CharType{'t'}, CharType{'t'}, CharType{'e'}, CharType{'n'}, CharType{'s'}};\r\n        assert(verify_string(initializer_list_assigned_sso_large));\r\n\r\n        str initializer_list_assigned_sso_sso{start_sso};\r\n        initializer_list_assigned_sso_sso = {CharType{'c'}, CharType{'a'}, CharType{'t'}};\r\n        assert(verify_string(initializer_list_assigned_sso_sso));\r\n\r\n#if _HAS_CXX17\r\n        const string_view_convertible<CharType> convertible;\r\n        const string_view_convertible_sso<CharType> convertible_sso;\r\n        str conversion_assigned_large_large{start};\r\n        conversion_assigned_large_large = convertible;\r\n        assert(verify_string(conversion_assigned_large_large));\r\n\r\n        str conversion_assigned_large_sso{start};\r\n        conversion_assigned_large_sso = convertible_sso;\r\n        assert(verify_string(conversion_assigned_large_sso));\r\n\r\n        str conversion_assigned_sso_large{start_sso};\r\n        conversion_assigned_sso_large = convertible;\r\n        assert(verify_string(conversion_assigned_sso_large));\r\n\r\n        str conversion_assigned_sso_sso{start_sso};\r\n        conversion_assigned_sso_sso = convertible_sso;\r\n        assert(verify_string(conversion_assigned_sso_sso));\r\n#endif // _HAS_CXX17\r\n    }\r\n\r\n    { // assign\r\n        str assign_str_large_large{start};\r\n        assign_str_large_large.assign(input);\r\n        assert(verify_string(assign_str_large_large));\r\n\r\n        str assign_str_large_sso{start};\r\n        assign_str_large_sso.assign(input_sso);\r\n        assert(verify_string(assign_str_large_sso));\r\n\r\n        str assign_str_sso_large{start_sso};\r\n        assign_str_sso_large.assign(input);\r\n        assert(verify_string(assign_str_sso_large));\r\n\r\n        str assign_str_sso_sso{start_sso};\r\n        assign_str_sso_sso.assign(input_sso);\r\n        assert(verify_string(assign_str_sso_sso));\r\n\r\n        str assign_str_size_large_large{start};\r\n        assign_str_size_large_large.assign(input, 1);\r\n        assert(verify_string(assign_str_size_large_large));\r\n\r\n        str assign_str_size_large_sso{start};\r\n        assign_str_size_large_sso.assign(input_sso, 1);\r\n        assert(verify_string(assign_str_size_large_sso));\r\n\r\n        str assign_str_size_sso_large{start_sso};\r\n        assign_str_size_sso_large.assign(input, 1);\r\n        assert(verify_string(assign_str_size_sso_large));\r\n\r\n        str assign_str_size_sso_sso{start_sso};\r\n        assign_str_size_sso_sso.assign(input_sso, 1);\r\n        assert(verify_string(assign_str_size_sso_sso));\r\n\r\n        str assign_str_len_size_large_large{start};\r\n        assign_str_len_size_large_large.assign(input, 1, large_size - 1);\r\n        assert(verify_string(assign_str_len_size_large_large));\r\n\r\n        str assign_str_size_len_large_sso{start};\r\n        assign_str_size_len_large_sso.assign(input_sso, 1, sso_size - 1);\r\n        assert(verify_string(assign_str_size_len_large_sso));\r\n\r\n        str assign_str_size_len_sso_large{start_sso};\r\n        assign_str_size_len_sso_large.assign(input, 1, large_size - 1);\r\n        assert(verify_string(assign_str_size_len_sso_large));\r\n\r\n        str assign_str_size_len_sso_sso{start_sso};\r\n        assign_str_size_len_sso_sso.assign(input_sso, 1, sso_size - 1);\r\n        assert(verify_string(assign_str_size_len_sso_sso));\r\n\r\n        str assign_rstr_large_large{start};\r\n        assign_rstr_large_large.assign(move(assign_str_large_large));\r\n        assert(verify_string(assign_str_large_large));\r\n        assert(verify_string(assign_rstr_large_large));\r\n\r\n        str assign_rstr_large_sso{start};\r\n        assign_rstr_large_sso.assign(move(assign_str_large_sso));\r\n        assert(verify_string(assign_str_large_sso));\r\n        assert(verify_string(assign_rstr_large_sso));\r\n\r\n        str assign_rstr_sso_large{start_sso};\r\n        assign_rstr_sso_large.assign(move(assign_str_sso_large));\r\n        assert(verify_string(assign_str_sso_large));\r\n        assert(verify_string(assign_rstr_sso_large));\r\n\r\n        str assign_rstr_sso_sso{start_sso};\r\n        assign_rstr_sso_sso.assign(move(assign_str_sso_sso));\r\n        assert(verify_string(assign_str_sso_sso));\r\n        assert(verify_string(assign_rstr_sso_sso));\r\n\r\n        str assign_literal_large_large{start};\r\n        assign_literal_large_large.assign(get_large_input<CharType>());\r\n        assert(verify_string(assign_literal_large_large));\r\n\r\n        str assign_literal_large_sso{start};\r\n        assign_literal_large_sso.assign(get_sso_input<CharType>());\r\n        assert(verify_string(assign_literal_large_sso));\r\n\r\n        str assign_literal_sso_large{start_sso};\r\n        assign_literal_sso_large.assign(get_large_input<CharType>());\r\n        assert(verify_string(assign_literal_sso_large));\r\n\r\n        str assign_literal_sso_sso{start_sso};\r\n        assign_literal_sso_sso.assign(get_sso_input<CharType>());\r\n        assert(verify_string(assign_literal_sso_sso));\r\n\r\n        str assign_literal_count_large_large{start};\r\n        assign_literal_count_large_large.assign(get_large_input<CharType>(), 18);\r\n        assert(verify_string(assign_literal_count_large_large));\r\n\r\n        str assign_literal_count_large_sso{start};\r\n        assign_literal_count_large_sso.assign(get_sso_input<CharType>(), 3);\r\n        assert(verify_string(assign_literal_count_large_sso));\r\n\r\n        str assign_literal_count_sso_large{start_sso};\r\n        assign_literal_count_sso_large.assign(get_large_input<CharType>(), 18);\r\n        assert(verify_string(assign_literal_count_sso_large));\r\n\r\n        str assign_literal_count_sso_sso{start_sso};\r\n        assign_literal_count_sso_sso.assign(get_sso_input<CharType>(), 3);\r\n        assert(verify_string(assign_literal_count_sso_sso));\r\n\r\n        str assign_char_count_large_large{start};\r\n        assign_char_count_large_large.assign(18, CharType{'c'});\r\n        assert(verify_string(assign_char_count_large_large));\r\n\r\n        str assign_char_count_large_sso{start};\r\n        assign_char_count_large_sso.assign(3, CharType{'c'});\r\n        assert(verify_string(assign_char_count_large_sso));\r\n\r\n        str assign_char_count_sso_large{start_sso};\r\n        assign_char_count_sso_large.assign(18, CharType{'c'});\r\n        assert(verify_string(assign_char_count_sso_large));\r\n\r\n        str assign_char_count_sso_sso{start_sso};\r\n        assign_char_count_sso_sso.assign(3, CharType{'c'});\r\n        assert(verify_string(assign_char_count_sso_sso));\r\n\r\n        str assign_iterator_large_large{start};\r\n        assign_iterator_large_large.assign(input.begin(), input.end());\r\n        assert(verify_string(assign_iterator_large_large));\r\n\r\n        str assign_iterator_large_sso{start};\r\n        assign_iterator_large_sso.assign(input_sso.begin(), input_sso.end());\r\n        assert(verify_string(assign_iterator_large_sso));\r\n\r\n        str assign_iterator_sso_large{start_sso};\r\n        assign_iterator_sso_large.assign(input.begin(), input.end());\r\n        assert(verify_string(assign_iterator_sso_large));\r\n\r\n        str assign_iterator_sso_sso{start_sso};\r\n        assign_iterator_sso_sso.assign(input_sso.begin(), input_sso.end());\r\n        assert(verify_string(assign_iterator_sso_sso));\r\n\r\n        str assign_input_iterator_large_large{start};\r\n        assign_input_iterator_large_large.assign(input_iter_data.begin(), input_iter_data.end());\r\n        assert(verify_string(assign_input_iterator_large_large));\r\n\r\n        str assign_input_iterator_large_sso{start};\r\n        assign_input_iterator_large_sso.assign(input_iter_data_sso.begin(), input_iter_data_sso.end());\r\n        assert(verify_string(assign_input_iterator_large_sso));\r\n\r\n        str assign_input_iterator_sso_large{start_sso};\r\n        assign_input_iterator_sso_large.assign(input_iter_data.begin(), input_iter_data.end());\r\n        assert(verify_string(assign_input_iterator_sso_large));\r\n\r\n        str assign_input_iterator_sso_sso{start_sso};\r\n        assign_input_iterator_sso_sso.assign(input_iter_data_sso.begin(), input_iter_data_sso.end());\r\n        assert(verify_string(assign_input_iterator_sso_sso));\r\n\r\n        str assign_initializer_list_large_large{start};\r\n        assign_initializer_list_large_large.assign({CharType{'H'}, CharType{'e'}, CharType{'l'}, CharType{'l'},\r\n            CharType{'o'}, CharType{' '}, //\r\n            CharType{'f'}, CharType{'l'}, CharType{'u'}, CharType{'f'}, CharType{'f'}, CharType{'y'}, CharType{' '},\r\n            CharType{'k'}, CharType{'i'}, CharType{'t'}, CharType{'t'}, CharType{'e'}, CharType{'n'}, CharType{'s'}});\r\n        assert(verify_string(assign_initializer_list_large_large));\r\n\r\n        str assign_initializer_list_large_sso{start};\r\n        assign_initializer_list_large_sso.assign({CharType{'c'}, CharType{'a'}, CharType{'t'}});\r\n        assert(verify_string(assign_initializer_list_large_large));\r\n\r\n        str assign_initializer_list_sso_large{start_sso};\r\n        assign_initializer_list_sso_large.assign({CharType{'H'}, CharType{'e'}, CharType{'l'}, CharType{'l'},\r\n            CharType{'o'}, CharType{' '}, //\r\n            CharType{'f'}, CharType{'l'}, CharType{'u'}, CharType{'f'}, CharType{'f'}, CharType{'y'}, CharType{' '},\r\n            CharType{'k'}, CharType{'i'}, CharType{'t'}, CharType{'t'}, CharType{'e'}, CharType{'n'}, CharType{'s'}});\r\n        assert(verify_string(assign_initializer_list_sso_large));\r\n\r\n        str assign_initializer_list_sso_sso{start_sso};\r\n        assign_initializer_list_sso_sso.assign({CharType{'c'}, CharType{'a'}, CharType{'t'}});\r\n        assert(verify_string(assign_initializer_list_sso_sso));\r\n\r\n#if _HAS_CXX17\r\n        const string_view_convertible<CharType> convertible;\r\n        const string_view_convertible_sso<CharType> convertible_sso;\r\n\r\n        str assign_conversion_large_large{start};\r\n        assign_conversion_large_large.assign(convertible);\r\n        assert(verify_string(assign_conversion_large_large));\r\n\r\n        str assign_conversion_large_sso{start};\r\n        assign_conversion_large_sso.assign(convertible_sso);\r\n        assert(verify_string(assign_conversion_large_sso));\r\n\r\n        str assign_conversion_sso_large{start_sso};\r\n        assign_conversion_sso_large.assign(convertible);\r\n        assert(verify_string(assign_conversion_sso_large));\r\n\r\n        str assign_conversion_sso_sso{start_sso};\r\n        assign_conversion_sso_sso.assign(convertible_sso);\r\n        assert(verify_string(assign_conversion_sso_sso));\r\n\r\n        str assign_conversion_start_length_large_large{start};\r\n        assign_conversion_start_length_large_large.assign(convertible, 2, 18);\r\n        assert(verify_string(assign_conversion_start_length_large_large));\r\n\r\n        str assign_conversion_start_length_large_sso{start};\r\n        assign_conversion_start_length_large_sso.assign(convertible_sso, 1, 2);\r\n        assert(verify_string(assign_conversion_start_length_large_sso));\r\n\r\n        str assign_conversion_start_length_sso_large{start_sso};\r\n        assign_conversion_start_length_sso_large.assign(convertible, 2, 18);\r\n        assert(verify_string(assign_conversion_start_length_sso_large));\r\n\r\n        str assign_conversion_start_length_sso_sso{start_sso};\r\n        assign_conversion_start_length_sso_sso.assign(convertible_sso, 1, 2);\r\n        assert(verify_string(assign_conversion_start_length_sso_sso));\r\n#endif // _HAS_CXX17\r\n    }\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_insertion() {\r\n    using CharType = typename Alloc::value_type;\r\n    using str      = basic_string<CharType, char_traits<CharType>, Alloc>;\r\n\r\n    constexpr size_t large_size = 20;\r\n    constexpr size_t sso_size   = 1;\r\n\r\n    const str input(large_size, CharType{'b'});\r\n    const str input_sso(sso_size, CharType{'b'});\r\n    const str input_sso_growing(max_sso_size<CharType>, CharType{'b'});\r\n\r\n    input_iterator_tester<CharType, 3> input_iter_data_sso;\r\n\r\n    { // insert\r\n        const CharType to_be_inserted = CharType{','};\r\n        str insert_char{input};\r\n        insert_char.insert(insert_char.begin(), to_be_inserted);\r\n        assert(verify_string(insert_char));\r\n\r\n        str insert_char_sso{input_sso};\r\n        insert_char_sso.insert(insert_char_sso.begin(), to_be_inserted);\r\n        assert(verify_string(insert_char_sso));\r\n\r\n        str insert_char_growing{input_sso_growing};\r\n        insert_char_growing.insert(insert_char_growing.begin(), to_be_inserted);\r\n        assert(verify_string(insert_char_growing));\r\n\r\n        str insert_char_rvalue{input};\r\n        insert_char_rvalue.insert(insert_char_rvalue.begin(), CharType{'a'});\r\n        assert(verify_string(insert_char_rvalue));\r\n\r\n        str insert_char_rvalue_sso{input_sso};\r\n        insert_char_rvalue_sso.insert(insert_char_rvalue_sso.begin(), CharType{'a'});\r\n        assert(verify_string(insert_char_rvalue_sso));\r\n\r\n        str insert_char_rvalue_growing{input_sso_growing};\r\n        insert_char_rvalue_growing.insert(insert_char_rvalue_growing.begin(), CharType{'a'});\r\n        assert(verify_string(insert_char_rvalue_growing));\r\n\r\n        str insert_iter_count_char{input};\r\n        insert_iter_count_char.insert(insert_iter_count_char.begin(), 2, CharType{'a'});\r\n        assert(verify_string(insert_iter_count_char));\r\n\r\n        str insert_iter_count_char_sso{input_sso};\r\n        insert_iter_count_char_sso.insert(insert_iter_count_char_sso.begin(), 2, CharType{'a'});\r\n        assert(verify_string(insert_iter_count_char_sso));\r\n\r\n        str insert_iter_count_char_growing{input_sso_growing};\r\n        insert_iter_count_char_growing.insert(insert_iter_count_char_growing.begin(), 2, CharType{'a'});\r\n        assert(verify_string(insert_iter_count_char_growing));\r\n\r\n        str insert_iter{input};\r\n        insert_iter.insert(insert_iter.begin(), input_sso.begin(), input_sso.end());\r\n        assert(verify_string(insert_iter));\r\n\r\n        str insert_iter_sso{input_sso};\r\n        insert_iter_sso.insert(insert_iter_sso.begin(), input_sso.begin(), input_sso.end());\r\n        assert(verify_string(insert_iter_sso));\r\n\r\n        str insert_iter_growing{input_sso_growing};\r\n        insert_iter_growing.insert(insert_iter_growing.begin(), input_sso.begin(), input_sso.end());\r\n        assert(verify_string(insert_iter_growing));\r\n\r\n        str insert_input_iter{input};\r\n        insert_input_iter.insert(insert_input_iter.begin(), input_iter_data_sso.begin(), input_iter_data_sso.end());\r\n        assert(verify_string(insert_input_iter));\r\n\r\n        str insert_input_iter_sso{input_sso};\r\n        insert_input_iter_sso.insert(\r\n            insert_input_iter_sso.begin(), input_iter_data_sso.begin(), input_iter_data_sso.end());\r\n        assert(verify_string(insert_input_iter_sso));\r\n\r\n        str insert_input_iter_growing{input_sso_growing};\r\n        insert_input_iter_growing.insert(\r\n            insert_input_iter_growing.begin(), input_iter_data_sso.begin(), input_iter_data_sso.end());\r\n        assert(verify_string(insert_input_iter_growing));\r\n\r\n        str insert_initializer_list{input};\r\n        insert_initializer_list.insert(insert_initializer_list.begin(), {CharType{'c'}, CharType{'a'}, CharType{'t'}});\r\n        assert(verify_string(insert_initializer_list));\r\n\r\n        str insert_initializer_list_sso{input_sso};\r\n        insert_initializer_list_sso.insert(\r\n            insert_initializer_list_sso.begin(), {CharType{'c'}, CharType{'a'}, CharType{'t'}});\r\n        assert(verify_string(insert_initializer_list_sso));\r\n\r\n        str insert_initializer_list_growing{input_sso_growing};\r\n        insert_initializer_list_growing.insert(\r\n            insert_initializer_list_growing.begin(), {CharType{'c'}, CharType{'a'}, CharType{'t'}});\r\n        assert(verify_string(insert_initializer_list_growing));\r\n\r\n        str insert_pos_str{input};\r\n        insert_pos_str.insert(0, input_sso);\r\n        assert(verify_string(insert_pos_str));\r\n\r\n        str insert_pos_str_sso{input_sso};\r\n        insert_pos_str_sso.insert(0, input_sso);\r\n        assert(verify_string(insert_pos_str_sso));\r\n\r\n        str insert_pos_str_growing{input_sso_growing};\r\n        insert_pos_str_growing.insert(0, input_sso);\r\n        assert(verify_string(insert_pos_str_growing));\r\n\r\n        str insert_pos_substr{input};\r\n        insert_pos_substr.insert(0, input_sso, 1, 2);\r\n        assert(verify_string(insert_pos_substr));\r\n\r\n        str insert_pos_substr_sso{input_sso};\r\n        insert_pos_substr_sso.insert(0, input_sso, 1, 2);\r\n        assert(verify_string(insert_pos_substr_sso));\r\n\r\n        str insert_pos_substr_growing{input_sso_growing};\r\n        insert_pos_substr_growing.insert(0, input_sso, 1, 2);\r\n        assert(verify_string(insert_pos_substr_growing));\r\n\r\n#if _HAS_CXX17\r\n        const string_view_convertible_sso<CharType> convertible;\r\n        str insert_pos_conversion{input};\r\n        insert_pos_conversion.insert(0, convertible);\r\n        assert(verify_string(insert_pos_conversion));\r\n\r\n        str insert_pos_conversion_sso{input_sso};\r\n        insert_pos_conversion_sso.insert(0, convertible);\r\n        assert(verify_string(insert_pos_conversion_sso));\r\n\r\n        str insert_pos_conversion_growing{input_sso_growing};\r\n        insert_pos_conversion_growing.insert(0, convertible);\r\n        assert(verify_string(insert_pos_conversion_growing));\r\n\r\n        str insert_pos_conversion_substr{input};\r\n        insert_pos_conversion.insert(0, convertible, 1, 2);\r\n        assert(verify_string(insert_pos_conversion));\r\n\r\n        str insert_pos_conversion_substr_sso{input_sso};\r\n        insert_pos_conversion_sso.insert(0, convertible, 1, 2);\r\n        assert(verify_string(insert_pos_conversion_sso));\r\n\r\n        str insert_pos_conversion_substr_growing{input_sso_growing};\r\n        insert_pos_conversion_growing.insert(0, convertible, 1, 2);\r\n        assert(verify_string(insert_pos_conversion_growing));\r\n#endif // _HAS_CXX17\r\n\r\n        str insert_pos_literal{input};\r\n        insert_pos_literal.insert(0, get_sso_input<CharType>());\r\n        assert(verify_string(insert_pos_literal));\r\n\r\n        str insert_pos_literal_sso{input_sso};\r\n        insert_pos_literal_sso.insert(0, get_sso_input<CharType>());\r\n        assert(verify_string(insert_pos_literal_sso));\r\n\r\n        str insert_pos_literal_growing{input_sso_growing};\r\n        insert_pos_literal_growing.insert(0, get_sso_input<CharType>());\r\n        assert(verify_string(insert_pos_literal_growing));\r\n\r\n        str insert_pos_literal_substr{input};\r\n        insert_pos_literal_substr.insert(0, get_sso_input<CharType>(), 1);\r\n        assert(verify_string(insert_pos_literal_substr));\r\n\r\n        str insert_pos_literal_substr_sso{input_sso};\r\n        insert_pos_literal_substr_sso.insert(0, get_sso_input<CharType>(), 1);\r\n        assert(verify_string(insert_pos_literal_substr_sso));\r\n\r\n        str insert_pos_literal_substr_growing{input_sso_growing};\r\n        insert_pos_literal_substr_growing.insert(0, get_sso_input<CharType>(), 1);\r\n        assert(verify_string(insert_pos_literal_substr_growing));\r\n\r\n        str insert_pos_count_char{input};\r\n        insert_pos_count_char.insert(0, 2, CharType{'a'});\r\n        assert(verify_string(insert_pos_count_char));\r\n\r\n        str insert_pos_count_char_sso{input_sso};\r\n        insert_pos_count_char_sso.insert(0, 2, CharType{'a'});\r\n        assert(verify_string(insert_pos_count_char_sso));\r\n\r\n        str insert_pos_count_char_growing{input_sso_growing};\r\n        insert_pos_count_char_growing.insert(0, 2, CharType{'a'});\r\n        assert(verify_string(insert_pos_count_char_growing));\r\n    }\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_removal() {\r\n    using CharType = typename Alloc::value_type;\r\n    using str      = basic_string<CharType, char_traits<CharType>, Alloc>;\r\n\r\n    constexpr size_t large_size     = 20;\r\n    constexpr size_t sso_size       = 2;\r\n    constexpr size_t min_large_size = (16 / sizeof(CharType) < 1 ? 1 : 16 / sizeof(CharType));\r\n\r\n    const str input(large_size, CharType{'b'});\r\n    const str input_sso(sso_size, CharType{'b'});\r\n    const str input_min_large(min_large_size, CharType{'b'});\r\n\r\n    { // clear\r\n        str cleared{input};\r\n        cleared.clear();\r\n        assert(verify_string(cleared));\r\n\r\n        str cleared_sso{input_sso};\r\n        cleared_sso.clear();\r\n        assert(verify_string(cleared_sso));\r\n    }\r\n\r\n    { // erase\r\n        str erase_pos_count{input};\r\n        erase_pos_count.erase(0, 2);\r\n        assert(verify_string(erase_pos_count));\r\n\r\n        str erase_pos_count_sso{input_sso};\r\n        erase_pos_count_sso.erase(0, 2);\r\n        assert(verify_string(erase_pos_count_sso));\r\n\r\n        str erase_pos_count_shrinking{input_min_large};\r\n        erase_pos_count_shrinking.erase(0, 2);\r\n        assert(verify_string(erase_pos_count_shrinking));\r\n\r\n        str erase_iter{input};\r\n        erase_iter.erase(erase_iter.begin());\r\n        assert(verify_string(erase_iter));\r\n\r\n        str erase_iter_sso{input_sso};\r\n        erase_iter_sso.erase(erase_iter_sso.begin());\r\n        assert(verify_string(erase_iter_sso));\r\n\r\n        str erase_iter_shrinking{input_min_large};\r\n        erase_iter_shrinking.erase(erase_iter_shrinking.begin());\r\n        assert(verify_string(erase_iter_shrinking));\r\n\r\n        str erase_const_iter{input};\r\n        erase_const_iter.erase(erase_const_iter.cbegin());\r\n        assert(verify_string(erase_const_iter));\r\n\r\n        str erase_const_iter_sso{input_sso};\r\n        erase_const_iter_sso.erase(erase_const_iter_sso.cbegin());\r\n        assert(verify_string(erase_const_iter_sso));\r\n\r\n        str erase_const_iter_shrinking{input_min_large};\r\n        erase_const_iter_shrinking.erase(erase_const_iter_shrinking.cbegin());\r\n        assert(verify_string(erase_const_iter_shrinking));\r\n\r\n        str erase_iter_iter{input};\r\n        erase_iter_iter.erase(erase_iter_iter.begin(), erase_iter_iter.begin() + 1);\r\n        assert(verify_string(erase_iter_iter));\r\n\r\n        str erase_iter_iter_sso{input_sso};\r\n        erase_iter_iter_sso.erase(erase_iter_iter_sso.begin(), erase_iter_iter_sso.begin() + 1);\r\n        assert(verify_string(erase_iter_iter_sso));\r\n\r\n        str erase_iter_iter_shrinking{input_min_large};\r\n        erase_iter_iter_shrinking.erase(erase_iter_iter_shrinking.begin(), erase_iter_iter_shrinking.begin() + 1);\r\n        assert(verify_string(erase_iter_iter_shrinking));\r\n\r\n        str erase_const_iter_iter{input};\r\n        erase_const_iter_iter.erase(erase_const_iter_iter.begin(), erase_const_iter_iter.begin() + 1);\r\n        assert(verify_string(erase_const_iter_iter));\r\n\r\n        str erase_const_iter_iter_sso{input_sso};\r\n        erase_const_iter_iter_sso.erase(erase_const_iter_iter_sso.begin(), erase_const_iter_iter_sso.begin() + 1);\r\n        assert(verify_string(erase_const_iter_iter_sso));\r\n\r\n        str erase_const_iter_iter_shrinking{input_min_large};\r\n        erase_const_iter_iter_shrinking.erase(\r\n            erase_const_iter_iter_shrinking.begin(), erase_const_iter_iter_shrinking.begin() + 1);\r\n        assert(verify_string(erase_const_iter_iter_shrinking));\r\n\r\n#if _HAS_CXX20\r\n        str erased_free{get_large_input<CharType>()};\r\n        erase(erased_free, CharType{'l'});\r\n        assert(verify_string(erased_free));\r\n\r\n        str erased_free_sso{get_sso_input<CharType>()};\r\n        erase(erased_free_sso, CharType{'l'});\r\n        assert(verify_string(erased_free_sso));\r\n\r\n        str erased_free_if{get_large_input<CharType>()};\r\n        erase_if(erased_free_if, [](const CharType val) { return val == CharType{'t'}; });\r\n        assert(verify_string(erased_free_if));\r\n\r\n        str erased_free_if_sso{get_sso_input<CharType>()};\r\n        erase_if(erased_free_if_sso, [](const CharType val) { return val == CharType{'t'}; });\r\n        assert(verify_string(erased_free_if_sso));\r\n#endif // _HAS_CXX20\r\n    }\r\n\r\n    { //  pop_back\r\n        str pop_back{input};\r\n        pop_back.pop_back();\r\n        assert(verify_string(pop_back));\r\n\r\n        str pop_back_sso{input_sso};\r\n        pop_back_sso.pop_back();\r\n        assert(verify_string(pop_back_sso));\r\n\r\n        str pop_back_shrinking{input_min_large};\r\n        pop_back_shrinking.pop_back();\r\n        assert(verify_string(pop_back_shrinking));\r\n    }\r\n\r\n    { //  shrink_to_fit\r\n        str shrink_to_fit(32, CharType{'a'});\r\n        shrink_to_fit.resize(min_large_size);\r\n        shrink_to_fit.shrink_to_fit();\r\n        assert(verify_string(shrink_to_fit));\r\n\r\n        str shrink_to_fit_sso{input_sso};\r\n        shrink_to_fit_sso.pop_back();\r\n        shrink_to_fit_sso.shrink_to_fit();\r\n        assert(verify_string(shrink_to_fit_sso));\r\n\r\n        str shrink_to_fit_shrinking{input_min_large};\r\n        shrink_to_fit_shrinking.pop_back();\r\n        shrink_to_fit_shrinking.shrink_to_fit();\r\n        assert(verify_string(shrink_to_fit_shrinking));\r\n    }\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_misc() {\r\n    using CharType = typename Alloc::value_type;\r\n    using str      = basic_string<CharType, char_traits<CharType>, Alloc>;\r\n\r\n    constexpr size_t large_size     = 20;\r\n    constexpr size_t sso_size       = 2;\r\n    constexpr size_t min_large_size = (16 / sizeof(CharType) < 1 ? 1 : 16 / sizeof(CharType));\r\n\r\n    const str input(large_size, CharType{'b'});\r\n    const str input_sso(sso_size, CharType{'b'});\r\n    const str input_min_large(min_large_size, CharType{'b'});\r\n\r\n    { // substr\r\n        str substr_large_to_large = input.substr(2);\r\n        assert(verify_string(substr_large_to_large));\r\n\r\n        str substr_large_to_sso = input.substr(18);\r\n        assert(verify_string(substr_large_to_sso));\r\n\r\n        str substr_sso = input_sso.substr(1);\r\n        assert(verify_string(substr_sso));\r\n\r\n        str substr_count_large_to_large = input.substr(2, 18);\r\n        assert(verify_string(substr_count_large_to_large));\r\n\r\n        str substr_count_large_to_sso = input.substr(2, 2);\r\n        assert(verify_string(substr_large_to_sso));\r\n\r\n        str substr_count_sso = input_sso.substr(1, 2);\r\n        assert(verify_string(substr_sso));\r\n    }\r\n\r\n    { // resize\r\n        str resize_large_to_large{input};\r\n        resize_large_to_large.resize(35);\r\n        assert(verify_string(resize_large_to_large));\r\n\r\n        str resize_large_to_sso{input};\r\n        resize_large_to_sso.resize(3);\r\n        assert(verify_string(resize_large_to_sso));\r\n\r\n        str resize_sso_to_large{input_sso};\r\n        resize_sso_to_large.resize(35);\r\n        assert(verify_string(resize_sso_to_large));\r\n\r\n        str resize_sso_to_sso{input_sso};\r\n        resize_sso_to_sso.resize(3);\r\n        assert(verify_string(resize_sso_to_sso));\r\n\r\n        str resize_char_large_to_large{input};\r\n        resize_char_large_to_large.resize(35, CharType{'c'});\r\n        assert(verify_string(resize_char_large_to_large));\r\n\r\n        str resize_char_large_to_sso{input};\r\n        resize_char_large_to_sso.resize(3, CharType{'c'});\r\n        assert(verify_string(resize_char_large_to_sso));\r\n\r\n        str resize_char_sso_to_large{input_sso};\r\n        resize_char_sso_to_large.resize(35, CharType{'c'});\r\n        assert(verify_string(resize_char_sso_to_large));\r\n\r\n        str resize_char_sso_to_sso{input_sso};\r\n        resize_char_sso_to_sso.resize(3, CharType{'c'});\r\n        assert(verify_string(resize_char_sso_to_sso));\r\n    }\r\n\r\n    { // replace\r\n        const CharType mrow[] = {'m', 'r', 'o', 'w', '\\0'};\r\n\r\n        str replace_front_bigger{input};\r\n        replace_front_bigger.replace(0, 2, mrow);\r\n        assert(verify_string(replace_front_bigger));\r\n        str replace_front_same{input};\r\n        replace_front_same.replace(0, 4, mrow);\r\n        assert(verify_string(replace_front_same));\r\n        str replace_front_smaller{input};\r\n        replace_front_smaller.replace(0, 6, mrow);\r\n        assert(verify_string(replace_front_smaller));\r\n\r\n        str replace_mid_bigger{input};\r\n        replace_mid_bigger.replace(2, 2, mrow);\r\n        assert(verify_string(replace_mid_bigger));\r\n        str replace_mid_same{input};\r\n        replace_mid_same.replace(2, 4, mrow);\r\n        assert(verify_string(replace_mid_same));\r\n        str replace_mid_smaller{input};\r\n        replace_mid_smaller.replace(2, 6, mrow);\r\n        assert(verify_string(replace_mid_smaller));\r\n\r\n        str replace_back_bigger{input};\r\n        replace_back_bigger.replace(replace_back_bigger.size() - 2, 2, mrow);\r\n        assert(verify_string(replace_back_bigger));\r\n        str replace_back_same{input};\r\n        replace_back_same.replace(replace_back_same.size() - 4, 4, mrow);\r\n        assert(verify_string(replace_back_same));\r\n        str replace_back_smaller{input};\r\n        replace_back_smaller.replace(replace_back_smaller.size() - 6, 6, mrow);\r\n        assert(verify_string(replace_back_smaller));\r\n\r\n        const CharType hi[] = {'h', 'i', '\\0'};\r\n        str replace_large_to_sso{input};\r\n        replace_large_to_sso.replace(0, replace_large_to_sso.size() - 1, hi);\r\n        assert(verify_string(replace_large_to_sso));\r\n\r\n        str replace_sso_to_large{input_sso};\r\n        replace_sso_to_large.replace(0, 1, input);\r\n        assert(verify_string(replace_sso_to_large));\r\n    }\r\n\r\n    if constexpr (allocator_traits<Alloc>::propagate_on_container_swap::value) { // swap\r\n        str first_large{input};\r\n        str second_large = input + str{CharType{'c'}, CharType{'a'}, CharType{'t'}};\r\n\r\n        str first_sso{input_sso};\r\n        str second_sso = input_sso + CharType{'s'};\r\n\r\n        first_large.swap(second_large);\r\n        assert(verify_string(first_large));\r\n        assert(verify_string(second_large));\r\n\r\n        first_sso.swap(second_sso);\r\n        assert(verify_string(first_sso));\r\n        assert(verify_string(second_sso));\r\n\r\n        first_large.swap(first_sso);\r\n        assert(verify_string(first_large));\r\n        assert(verify_string(first_sso));\r\n\r\n        second_sso.swap(second_large);\r\n        assert(verify_string(second_sso));\r\n        assert(verify_string(second_large));\r\n    }\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_sstream() {\r\n    using CharType = typename Alloc::value_type;\r\n    using str      = basic_string<CharType, char_traits<CharType>, Alloc>;\r\n    using stream   = basic_stringbuf<CharType, char_traits<CharType>, Alloc>;\r\n\r\n    constexpr size_t large_size = 20;\r\n    constexpr size_t sso_size   = 2;\r\n\r\n    const str input(large_size, CharType{'b'});\r\n    const str input_sso(sso_size, CharType{'b'});\r\n\r\n    { // RValue construction\r\n        stream constructed_from_empty{str{}};\r\n        str buffered_empty = move(constructed_from_empty).str();\r\n        assert(verify_string(buffered_empty));\r\n        assert(buffered_empty.empty());\r\n\r\n        str to_be_moved = input;\r\n        stream constructed_from_large{move(to_be_moved)};\r\n        str buffered = move(constructed_from_large).str();\r\n        assert(verify_string(to_be_moved));\r\n        assert(verify_string(buffered));\r\n\r\n        str to_be_moved_sso = input_sso;\r\n        stream constructed_from_sso{move(to_be_moved_sso)};\r\n        str buffered_sso = move(constructed_from_sso).str();\r\n        assert(verify_string(to_be_moved_sso));\r\n        assert(verify_string(buffered_sso));\r\n    }\r\n\r\n    { // RValue str\r\n        str to_be_moved = input;\r\n        stream str_large;\r\n        str_large.str(move(to_be_moved));\r\n        str buffered = move(str_large).str();\r\n        assert(verify_string(to_be_moved));\r\n        assert(verify_string(buffered));\r\n\r\n        str to_be_moved_sso = input_sso;\r\n        stream str_sso;\r\n        str_sso.str(move(to_be_moved_sso));\r\n        str buffered_sso = move(str_sso).str();\r\n        assert(verify_string(to_be_moved_sso));\r\n        assert(verify_string(buffered_sso));\r\n    }\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_exceptions() {\r\n    using CharType = typename Alloc::value_type;\r\n    using str      = basic_string<CharType, char_traits<CharType>, Alloc>;\r\n\r\n    constexpr size_t large_size = 20;\r\n    constexpr size_t sso_size   = 2;\r\n\r\n    const str input(large_size, CharType{'b'});\r\n    const str input_sso(sso_size, CharType{'b'});\r\n\r\n    throw_on_conversion<CharType> iter_data[1] = {CharType{'b'}};\r\n    input_iterator_tester<throw_on_conversion<CharType>, 1> input_iter_data;\r\n\r\n    { // append\r\n        str append_iterator{input};\r\n        try {\r\n            assert(verify_string(append_iterator));\r\n            append_iterator.append(begin(iter_data), end(iter_data));\r\n            assert(false);\r\n        } catch (...) {\r\n            assert(verify_string(append_iterator));\r\n        }\r\n\r\n        str append_iterator_sso{input_sso};\r\n        try {\r\n            assert(verify_string(append_iterator_sso));\r\n            append_iterator_sso.append(begin(iter_data), end(iter_data));\r\n            assert(false);\r\n        } catch (...) {\r\n            assert(verify_string(append_iterator_sso));\r\n        }\r\n\r\n        str append_input_iterator{input};\r\n        try {\r\n            assert(verify_string(append_input_iterator));\r\n            append_input_iterator.append(input_iter_data.begin(), input_iter_data.end());\r\n            assert(false);\r\n        } catch (...) {\r\n            assert(verify_string(append_input_iterator));\r\n        }\r\n\r\n        str append_input_iterator_sso{input_sso};\r\n        try {\r\n            append_input_iterator_sso.append(input_iter_data.begin(), input_iter_data.end());\r\n        } catch (...) {\r\n            assert(verify_string(append_input_iterator_sso));\r\n        }\r\n    }\r\n\r\n    { // assign\r\n        str assign_iterator{input};\r\n        try {\r\n            assert(verify_string(assign_iterator));\r\n            assign_iterator.assign(begin(iter_data), end(iter_data));\r\n            assert(false);\r\n        } catch (...) {\r\n            assert(verify_string(assign_iterator));\r\n        }\r\n\r\n        str assign_iterator_sso{input_sso};\r\n        try {\r\n            assert(verify_string(assign_iterator_sso));\r\n            assign_iterator_sso.assign(begin(iter_data), end(iter_data));\r\n        } catch (...) {\r\n            assert(verify_string(assign_iterator_sso));\r\n        }\r\n\r\n        str assign_input_iterator{input};\r\n        try {\r\n            assert(verify_string(assign_input_iterator));\r\n            assign_input_iterator.assign(input_iter_data.begin(), input_iter_data.end());\r\n            assert(false);\r\n        } catch (...) {\r\n            assert(verify_string(assign_input_iterator));\r\n        }\r\n\r\n        str assign_input_iterator_sso{input_sso};\r\n        try {\r\n            assert(verify_string(assign_input_iterator_sso));\r\n            assign_input_iterator_sso.assign(input_iter_data.begin(), input_iter_data.end());\r\n            assert(false);\r\n        } catch (...) {\r\n            assert(verify_string(assign_input_iterator_sso));\r\n        }\r\n    }\r\n\r\n    { // insert\r\n        str insert_iterator{input};\r\n        try {\r\n            assert(verify_string(insert_iterator));\r\n            insert_iterator.insert(insert_iterator.begin(), begin(iter_data), end(iter_data));\r\n            assert(false);\r\n        } catch (...) {\r\n            assert(verify_string(insert_iterator));\r\n        }\r\n\r\n        str insert_iterator_sso{input_sso};\r\n        try {\r\n            assert(verify_string(insert_iterator_sso));\r\n            insert_iterator_sso.insert(insert_iterator_sso.begin(), begin(iter_data), end(iter_data));\r\n            assert(false);\r\n        } catch (...) {\r\n            assert(verify_string(insert_iterator_sso));\r\n        }\r\n\r\n        str insert_input_iterator{input};\r\n        try {\r\n            assert(verify_string(insert_input_iterator));\r\n            insert_input_iterator.insert(insert_input_iterator.begin(), input_iter_data.begin(), input_iter_data.end());\r\n            assert(false);\r\n        } catch (...) {\r\n            assert(verify_string(insert_input_iterator));\r\n        }\r\n\r\n        str insert_input_iterator_sso{input_sso};\r\n        try {\r\n            assert(verify_string(insert_input_iterator_sso));\r\n            insert_input_iterator_sso.insert(\r\n                insert_input_iterator_sso.begin(), input_iter_data.begin(), input_iter_data.end());\r\n            assert(false);\r\n        } catch (...) {\r\n            assert(verify_string(insert_input_iterator_sso));\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid run_tests() {\r\n    test_construction<Alloc>();\r\n    test_append<Alloc>();\r\n    test_assign<Alloc>();\r\n    test_insertion<Alloc>();\r\n    test_removal<Alloc>();\r\n    test_misc<Alloc>();\r\n    test_sstream<Alloc>();\r\n#if !(defined(__clang__) && defined(_M_IX86)) // TRANSITION, LLVM-54804\r\n    test_exceptions<Alloc>();\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n\r\n// Test that writing to uninitialized memory in a string triggers an ASan container-overflow error. (See GH-5251.)\r\ntemplate <class CharType, class Alloc = allocator<CharType>>\r\nvoid run_asan_container_overflow_death_test() {\r\n\r\n    // We'll give the string capacity 100 (all uninitialized memory, except for the null terminator).\r\n    basic_string<CharType, char_traits<CharType>, Alloc> myString;\r\n    myString.reserve(100);\r\n\r\n    // Write to the element at index 50 to trigger an ASan container-overflow check.\r\n    CharType* myData = &myString[0];\r\n    myData[50]       = CharType{'A'};\r\n}\r\n\r\n// Test that ASan `container-overflow` checks can be disabled for a custom allocator.\r\ntemplate <class CharType>\r\nvoid run_asan_annotations_disablement_test() {\r\n\r\n    // ASan annotations are disabled for the `implicit_allocator_no_asan_annotations` allocator,\r\n    // which should make the container-overflow 'death test' pass.\r\n    run_asan_container_overflow_death_test<CharType, implicit_allocator_no_asan_annotations<CharType>>();\r\n}\r\n\r\ntemplate <class CharType, template <class, class, class> class Alloc>\r\nvoid run_custom_allocator_matrix() {\r\n    run_tests<Alloc<CharType, true_type, true_type>>();\r\n    run_tests<Alloc<CharType, true_type, false_type>>();\r\n    run_tests<Alloc<CharType, false_type, true_type>>();\r\n    run_tests<Alloc<CharType, false_type, false_type>>();\r\n}\r\n\r\ntemplate <class CharType>\r\nvoid run_allocator_matrix() {\r\n    run_tests<allocator<CharType>>();\r\n    run_custom_allocator_matrix<CharType, aligned_allocator>();\r\n    run_custom_allocator_matrix<CharType, explicit_allocator>();\r\n    run_custom_allocator_matrix<CharType, implicit_allocator>();\r\n\r\n    // To test ASan annotation disablement, we use an ad-hoc allocator type to avoid disrupting other\r\n    // tests that depend on annotations being enabled. Therefore, unlike the prior tests,\r\n    // this test is not parameterized by the allocator type.\r\n    run_asan_annotations_disablement_test<CharType>();\r\n}\r\n\r\nvoid test_DevCom_10116361() {\r\n    // We failed to null-terminate copies of SSO strings with ASAN annotations active.\r\n#ifdef _WIN64\r\n    constexpr const char* text = \"testtest\";\r\n    constexpr size_t n         = 8;\r\n#else\r\n    constexpr const char* text = \"test\";\r\n    constexpr size_t n         = 4;\r\n#endif\r\n\r\n    string s0{text};\r\n    assert(s0.c_str()[n] == '\\0');\r\n\r\n    alignas(string) unsigned char space[sizeof(string)];\r\n    memset(space, 0xff, sizeof(space));\r\n\r\n    string& s1 = *::new (&space) string{s0};\r\n    assert(s1.c_str()[n] == '\\0');\r\n\r\n    s1.~string();\r\n}\r\n\r\nvoid test_DevCom_10109507() {\r\n    // replace failed to correctly munge asan annotations while working\r\n    string s(\"abcd\");\r\n    s.replace(0, 1, \"ef\", 2);\r\n    s.replace(0, 0, \"xy\", 2);\r\n    assert(s == \"xyefbcd\");\r\n}\r\n\r\nvoid test_gh_3883() {\r\n    // GH-3883 <string>: basic_string::replace fails under ASan when pos + count > size, and count2 < count\r\n    string t = \"0123456789ABCDEF\"; // large string\r\n    t.replace(0, 30, 7, 'A');\r\n    assert(t == \"AAAAAAA\");\r\n}\r\n\r\nvoid test_gh_3955() {\r\n    // GH-3955 <xstring>: ASAN report container-overflow in a legal case\r\n    string s(19, '0');\r\n    s = &s[3];\r\n    assert(s == string(16, '0'));\r\n\r\n    string t(19, '0');\r\n    s = &t[0];\r\n    assert(s == t);\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec([] {\r\n        run_allocator_matrix<char>();\r\n#ifdef __cpp_char8_t\r\n        run_allocator_matrix<char8_t>();\r\n#endif // __cpp_char8_t\r\n        run_allocator_matrix<char16_t>();\r\n        run_allocator_matrix<char32_t>();\r\n        run_allocator_matrix<wchar_t>();\r\n\r\n        test_DevCom_10116361();\r\n        test_DevCom_10109507();\r\n        test_gh_3883();\r\n        test_gh_3955();\r\n    });\r\n#ifdef __SANITIZE_ADDRESS__\r\n    exec.add_death_tests({\r\n        run_asan_container_overflow_death_test<char>,\r\n#ifdef __cpp_char8_t\r\n        run_asan_container_overflow_death_test<char8_t>,\r\n#endif // __cpp_char8_t\r\n        run_asan_container_overflow_death_test<char16_t>,\r\n        run_asan_container_overflow_death_test<char32_t>,\r\n        run_asan_container_overflow_death_test<wchar_t>,\r\n    });\r\n#endif // ASan instrumentation enabled\r\n    return exec.run(argc, argv);\r\n}\r\n\r\n#endif // ^^^ no workaround ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_002030_asan_annotate_vector/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This test matrix is the usual test matrix, with all currently unsupported options removed, crossed with the ASan flags.\r\n\r\n# TRANSITION, google/sanitizers#328: clang-cl does not support /MDd or /MTd with ASan\r\nRUNALL_INCLUDE ..\\prefix.lst\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/Zi /wd4611 /w14640 /Zc:threadSafeInit-\" PM_LINK=\"/debug\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"-fsanitize=address /BE /c /EHsc /MD /std:c++14\"\r\nPM_CL=\"-fsanitize=address /BE /c /EHsc /MDd /std:c++17 /permissive-\"\r\nPM_CL=\"-fsanitize=address /BE /c /EHsc /MT /std:c++20 /permissive-\"\r\nPM_CL=\"-fsanitize=address /BE /c /EHsc /MTd /std:c++latest /permissive-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MD /std:c++14\"\r\nPM_CL=\"-fsanitize=address /EHsc /MD /std:c++17\"\r\nPM_CL=\"-fsanitize=address /EHsc /MD /std:c++20\"\r\nPM_CL=\"-fsanitize=address /EHsc /MD /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor\"\r\nPM_CL=\"-fsanitize=address /EHsc /MD /std:c++latest /permissive- /Zc:noexceptTypes-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MDd /std:c++14 /fp:except /Zc:preprocessor\"\r\nPM_CL=\"-fsanitize=address /EHsc /MDd /std:c++17 /permissive-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MDd /std:c++20 /permissive-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MDd /std:c++latest /permissive- /Zc:wchar_t-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MDd /std:c++latest /permissive-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MT /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MT /std:c++latest /permissive-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MTd /std:c++latest /permissive\"\r\nPM_CL=\"-fsanitize=address /EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nPM_CL=\"-fsanitize=address /EHsc /MTd /std:c++latest /permissive- /fp:strict\"\r\nPM_CL=\"-fsanitize=address /EHsc /MTd /std:c++latest /permissive-\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /BE /c /EHsc /MD /std:c++14\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /BE /c /EHsc /MDd /std:c++17 /permissive-\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /BE /c /EHsc /MT /std:c++20 /permissive-\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /BE /c /EHsc /MTd /std:c++latest /permissive-\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /EHsc /MD /std:c++14\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /EHsc /MD /std:c++17\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /EHsc /MD /std:c++20\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /EHsc /MD /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /EHsc /MD /std:c++latest /permissive- /Zc:noexceptTypes-\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /EHsc /MDd /std:c++14 /fp:except /Zc:preprocessor\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /EHsc /MDd /std:c++17 /permissive-\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /EHsc /MDd /std:c++20 /permissive-\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /EHsc /MDd /std:c++latest /permissive- /Zc:wchar_t-\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /EHsc /MDd /std:c++latest /permissive-\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /EHsc /MT /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /EHsc /MT /std:c++latest /permissive-\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /EHsc /MTd /std:c++latest /permissive\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /EHsc /MTd /std:c++latest /permissive- /fp:strict\"\r\nPM_CL=\"/D_ANNOTATE_VECTOR /EHsc /MTd /std:c++latest /permissive-\"\r\n# TRANSITION, we don't use /ALTERNATENAME for Clang (see GH-5224) so we cannot test /D_ANNOTATE_VECTOR without -fsanitize=address\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fsanitize=address -fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MD /std:c++14\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fsanitize=address -fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MD /std:c++17\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fsanitize=address -fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++20 /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fsanitize=address -fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++latest /permissive- /fp:strict\"\r\n"
  },
  {
    "path": "tests/std/tests/GH_002030_asan_annotate_vector/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// REQUIRES: x64 || x86 || arm64\r\n\r\n#if defined(__clang__) && defined(_M_ARM64) // TRANSITION, LLVM-184902, fixed in Clang 23\r\n#pragma comment(linker, \"/INFERASANLIBS\")\r\nint main() {}\r\n#else // ^^^ workaround / no workaround vvv\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <iostream>\r\n#include <iterator>\r\n#include <memory>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <test_death.hpp>\r\n\r\n#pragma warning(disable : 4984) // 'if constexpr' is a C++17 language extension\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wc++17-extensions\" // constexpr if is a C++17 extension\r\n#endif // __clang__\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n#ifndef __SANITIZE_ADDRESS__\r\n#if defined(__clang__) && defined(__has_feature)\r\n#if __has_feature(address_sanitizer)\r\n#define __SANITIZE_ADDRESS__\r\n#endif\r\n#endif\r\n#endif\r\n\r\n#ifdef __SANITIZE_ADDRESS__\r\nextern \"C\" {\r\nvoid* __sanitizer_contiguous_container_find_bad_address(const void* beg, const void* mid, const void* end) noexcept;\r\nvoid __asan_describe_address(void*) noexcept;\r\n}\r\n#endif // ASan instrumentation enabled\r\n\r\nstruct non_trivial_can_throw {\r\n    non_trivial_can_throw() {\r\n        ++i;\r\n        if (i == 0) {\r\n            throw i;\r\n        }\r\n    }\r\n\r\n    non_trivial_can_throw(const non_trivial_can_throw&) {\r\n        ++i;\r\n        if (i == 0) {\r\n            throw i;\r\n        }\r\n    }\r\n\r\n    non_trivial_can_throw& operator=(const non_trivial_can_throw&) {\r\n        ++i;\r\n        if (i == 0) {\r\n            throw i;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    unsigned int i = 0;\r\n};\r\n\r\nstruct non_trivial_cannot_throw {\r\n    non_trivial_cannot_throw() noexcept {\r\n        ++i;\r\n    }\r\n\r\n    unsigned int i = 0;\r\n};\r\n\r\nstruct throw_on_construction {\r\n    throw_on_construction() {\r\n        throw 0;\r\n    }\r\n\r\n    explicit throw_on_construction(bool should_throw) {\r\n        if (should_throw) {\r\n            throw 0;\r\n        }\r\n    }\r\n\r\n    throw_on_construction(const throw_on_construction&) {\r\n        throw 0;\r\n    }\r\n\r\n    [[noreturn]] throw_on_construction& operator=(const throw_on_construction&) {\r\n        throw 0;\r\n    }\r\n};\r\n\r\nstruct throw_on_copy {\r\n    throw_on_copy() = default;\r\n\r\n    throw_on_copy(const throw_on_copy&) {\r\n        throw 0;\r\n    }\r\n\r\n    throw_on_copy(throw_on_copy&&) {}\r\n\r\n    [[noreturn]] throw_on_copy& operator=(const throw_on_copy&) {\r\n        throw 0;\r\n    }\r\n};\r\n\r\ntemplate <class T, int N>\r\nclass input_iterator_tester {\r\nprivate:\r\n    T data[N] = {};\r\n\r\npublic:\r\n    class iterator {\r\n    private:\r\n        T* curr;\r\n\r\n    public:\r\n        using iterator_category = input_iterator_tag;\r\n        using value_type        = T;\r\n        using difference_type   = ptrdiff_t;\r\n        using pointer           = void;\r\n        using reference         = T&;\r\n\r\n        explicit iterator(T* start) : curr(start) {}\r\n\r\n        reference operator*() const {\r\n            return *curr;\r\n        }\r\n\r\n        iterator& operator++() {\r\n            ++curr;\r\n            return *this;\r\n        }\r\n\r\n        iterator operator++(int) {\r\n            auto tmp = *this;\r\n            ++curr;\r\n            return tmp;\r\n        }\r\n\r\n        bool operator==(const iterator& that) const {\r\n            return curr == that.curr;\r\n        }\r\n\r\n        bool operator!=(const iterator& that) const {\r\n            return !(*this == that);\r\n        }\r\n    };\r\n\r\n    iterator begin() {\r\n        return iterator(data);\r\n    }\r\n\r\n    iterator end() {\r\n        return iterator(data + N);\r\n    }\r\n};\r\n\r\ntemplate <class T, class Alloc>\r\nbool verify_vector(vector<T, Alloc>& vec) {\r\n#ifdef __SANITIZE_ADDRESS__\r\n    const void* buffer  = vec.data();\r\n    const void* buf_end = vec.data() + vec.capacity();\r\n    _Asan_aligned_pointers aligned;\r\n\r\n    if constexpr ((_Container_allocation_minimum_asan_alignment<vector<T, Alloc>>) >= 8) {\r\n        aligned = {buffer, buf_end};\r\n    } else {\r\n        aligned = _Get_asan_aligned_first_end(buffer, buf_end);\r\n        if (aligned._First == aligned._End) {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    const void* const mid       = vec.data() + vec.size();\r\n    const void* const fixed_mid = aligned._Clamp_to_end(mid);\r\n\r\n    void* bad_address = __sanitizer_contiguous_container_find_bad_address(aligned._First, fixed_mid, aligned._End);\r\n    if (bad_address == nullptr) {\r\n        return true;\r\n    }\r\n\r\n    if (bad_address < mid) {\r\n        cout << bad_address << \" was marked as poisoned when it should not be.\" << endl;\r\n    } else {\r\n        cout << bad_address << \" was not marked as poisoned when it should be.\" << endl;\r\n    }\r\n    cout << \"Vector State:\" << endl;\r\n    cout << \"  begin:         \" << buffer << endl;\r\n    cout << \"  aligned begin: \" << aligned._First << endl;\r\n    cout << \"  last:          \" << mid << endl;\r\n    cout << \"  aligned_last:  \" << fixed_mid << endl;\r\n    cout << \"  end:           \" << buf_end << endl;\r\n    cout << \"  aligned_end:   \" << aligned._End << endl;\r\n    __asan_describe_address(bad_address);\r\n\r\n    return false;\r\n#else // ^^^ ASan instrumentation enabled / ASan instrumentation disabled vvv\r\n    (void) vec;\r\n    return true;\r\n#endif // Asan instrumentation disabled\r\n}\r\n\r\n// Note: This class does not satisfy all the allocator requirements but is sufficient for this test.\r\ntemplate <class T, class Pocma, class Stateless>\r\nstruct custom_test_allocator {\r\n    using value_type                             = T;\r\n    using propagate_on_container_move_assignment = Pocma;\r\n    using is_always_equal                        = Stateless;\r\n};\r\n\r\ntemplate <class T1, class T2, class Pocma, class Stateless>\r\nconstexpr bool operator==(\r\n    const custom_test_allocator<T1, Pocma, Stateless>&, const custom_test_allocator<T2, Pocma, Stateless>&) noexcept {\r\n    return Stateless::value;\r\n}\r\n\r\ntemplate <class T1, class T2, class Pocma, class Stateless>\r\nconstexpr bool operator!=(\r\n    const custom_test_allocator<T1, Pocma, Stateless>&, const custom_test_allocator<T2, Pocma, Stateless>&) noexcept {\r\n    return !Stateless::value;\r\n}\r\n\r\ntemplate <class T, class Pocma = true_type, class Stateless = true_type>\r\nstruct aligned_allocator : custom_test_allocator<T, Pocma, Stateless> {\r\n    static constexpr size_t _Minimum_asan_allocation_alignment = 8;\r\n\r\n    aligned_allocator() = default;\r\n    template <class U>\r\n    constexpr aligned_allocator(const aligned_allocator<U, Pocma, Stateless>&) noexcept {}\r\n\r\n    T* allocate(size_t n) {\r\n        return new T[n];\r\n    }\r\n\r\n    void deallocate(T* p, size_t) noexcept {\r\n        delete[] p;\r\n    }\r\n};\r\nSTATIC_ASSERT(_Container_allocation_minimum_asan_alignment<vector<char, aligned_allocator<char>>> == 8);\r\n\r\ntemplate <class T, class Pocma = true_type, class Stateless = true_type>\r\nstruct explicit_allocator : custom_test_allocator<T, Pocma, Stateless> {\r\n    static constexpr size_t _Minimum_asan_allocation_alignment = alignof(T);\r\n\r\n    explicit_allocator() = default;\r\n    template <class U>\r\n    constexpr explicit_allocator(const explicit_allocator<U, Pocma, Stateless>&) noexcept {}\r\n\r\n    T* allocate(size_t n) {\r\n        T* mem = new T[n + 1];\r\n        return mem + 1;\r\n    }\r\n\r\n    void deallocate(T* p, size_t) noexcept {\r\n        delete[] (p - 1);\r\n    }\r\n};\r\nSTATIC_ASSERT(_Container_allocation_minimum_asan_alignment<vector<char, explicit_allocator<char>>> == 1);\r\nSTATIC_ASSERT(_Container_allocation_minimum_asan_alignment<vector<wchar_t, explicit_allocator<wchar_t>>> == 2);\r\n\r\ntemplate <class T, class Pocma = true_type, class Stateless = true_type>\r\nstruct implicit_allocator : custom_test_allocator<T, Pocma, Stateless> {\r\n    implicit_allocator() = default;\r\n    template <class U>\r\n    constexpr implicit_allocator(const implicit_allocator<U, Pocma, Stateless>&) noexcept {}\r\n\r\n    T* allocate(size_t n) {\r\n        T* mem = new T[n + 1];\r\n        return mem + 1;\r\n    }\r\n\r\n    void deallocate(T* p, size_t) noexcept {\r\n        delete[] (p - 1);\r\n    }\r\n};\r\nSTATIC_ASSERT(_Container_allocation_minimum_asan_alignment<vector<char, implicit_allocator<char>>> == 1);\r\nSTATIC_ASSERT(_Container_allocation_minimum_asan_alignment<vector<wchar_t, implicit_allocator<wchar_t>>> == 2);\r\n\r\n// Simple allocator that opts out of ASan annotations (via `_Disable_ASan_container_annotations_for_allocator`)\r\ntemplate <class T, class Pocma = true_type, class Stateless = true_type>\r\nstruct implicit_allocator_no_asan_annotations : implicit_allocator<T, Pocma, Stateless> {\r\n    implicit_allocator_no_asan_annotations() = default;\r\n    template <class U>\r\n    constexpr implicit_allocator_no_asan_annotations(\r\n        const implicit_allocator_no_asan_annotations<U, Pocma, Stateless>&) noexcept {}\r\n\r\n    T* allocate(size_t n) {\r\n        T* mem = new T[n + 1];\r\n        return mem + 1;\r\n    }\r\n\r\n    void deallocate(T* p, size_t) noexcept {\r\n        delete[] (p - 1);\r\n    }\r\n};\r\n\r\ntemplate <class T, class Pocma, class Stateless>\r\nconstexpr bool\r\n    _Disable_ASan_container_annotations_for_allocator<implicit_allocator_no_asan_annotations<T, Pocma, Stateless>> =\r\n        true;\r\n\r\ntemplate <class Alloc>\r\nvoid test_push_pop() {\r\n    using T = typename Alloc::value_type;\r\n\r\n    vector<T, Alloc> v;\r\n    assert(verify_vector(v));\r\n\r\n    v.push_back(T());\r\n    assert(verify_vector(v));\r\n\r\n    v.pop_back();\r\n    assert(verify_vector(v));\r\n}\r\n\r\ntemplate <class Alloc, int Size = 1024, int Stride = 128>\r\nvoid test_reserve_shrink() {\r\n    using T = typename Alloc::value_type;\r\n\r\n    vector<T, Alloc> v;\r\n    assert(verify_vector(v));\r\n\r\n    v.reserve(Size);\r\n    assert(verify_vector(v));\r\n\r\n    for (int i = 0; i < Size; i += Stride) {\r\n        for (int j = 0; j < Stride && j + i < Size; ++j) {\r\n            v.push_back(T());\r\n        }\r\n\r\n        assert(verify_vector(v));\r\n    }\r\n\r\n    v.push_back(T());\r\n    assert(verify_vector(v));\r\n\r\n    for (int i = 0; i < Size; i += Stride) {\r\n        for (int j = 0; j < Stride && j + i < Size; ++j) {\r\n            v.pop_back();\r\n        }\r\n\r\n        v.shrink_to_fit();\r\n        assert(verify_vector(v));\r\n    }\r\n\r\n    v.pop_back();\r\n    assert(verify_vector(v));\r\n    v.shrink_to_fit();\r\n    assert(verify_vector(v));\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_emplace_pop() {\r\n    using T = typename Alloc::value_type;\r\n\r\n    vector<T, Alloc> v;\r\n    assert(verify_vector(v));\r\n\r\n    v.emplace_back(T());\r\n    assert(verify_vector(v));\r\n\r\n    v.emplace(v.begin(), T());\r\n    assert(verify_vector(v));\r\n\r\n    v.emplace(v.end(), T());\r\n    assert(verify_vector(v));\r\n\r\n    v.pop_back();\r\n    assert(verify_vector(v));\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_move_assign() {\r\n    using T = typename Alloc::value_type;\r\n\r\n    vector<T, Alloc> v1;\r\n    vector<T, Alloc> v2;\r\n    assert(verify_vector(v1));\r\n    assert(verify_vector(v2));\r\n\r\n    v1.push_back(T());\r\n    assert(verify_vector(v1));\r\n\r\n    v2 = move(v1);\r\n    assert(verify_vector(v1));\r\n    assert(verify_vector(v2));\r\n\r\n    vector<T, Alloc> v3;\r\n    vector<T, Alloc> v4;\r\n    assert(verify_vector(v3));\r\n    assert(verify_vector(v4));\r\n\r\n    v3.reserve(v3.capacity() + 1);\r\n    assert(verify_vector(v3));\r\n    v3.resize(v3.capacity() + 1, T());\r\n    assert(verify_vector(v3));\r\n    v3.reserve(v3.capacity() + 1);\r\n    assert(verify_vector(v3));\r\n    v4.resize(v3.capacity(), T());\r\n    assert(verify_vector(v4));\r\n    v3 = move(v4);\r\n    assert(verify_vector(v3));\r\n    assert(verify_vector(v4));\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_copy_assign() {\r\n    using T = typename Alloc::value_type;\r\n\r\n    vector<T, Alloc> v1;\r\n    vector<T, Alloc> v2;\r\n    assert(verify_vector(v1));\r\n    assert(verify_vector(v2));\r\n\r\n    v1.push_back(T());\r\n    assert(verify_vector(v1));\r\n\r\n    v2 = v1;\r\n    assert(verify_vector(v1));\r\n    assert(verify_vector(v2));\r\n}\r\n\r\ntemplate <class Alloc, int N = 128>\r\nvoid test_constructors() {\r\n    using T  = typename Alloc::value_type;\r\n    Alloc al = Alloc();\r\n\r\n    vector<T, Alloc> v1;\r\n    vector<T, Alloc> v2(al);\r\n    vector<T, Alloc> v3(N, T());\r\n    vector<T, Alloc> v4(N);\r\n    assert(verify_vector(v1));\r\n    assert(verify_vector(v2));\r\n    assert(verify_vector(v3));\r\n    assert(verify_vector(v4));\r\n\r\n    vector<T, Alloc> v5(v3.begin(), v3.end());\r\n    vector<T, Alloc> v6(v3);\r\n    vector<T, Alloc> v7(v3, al);\r\n    assert(verify_vector(v5));\r\n    assert(verify_vector(v6));\r\n    assert(verify_vector(v7));\r\n\r\n    vector<T, Alloc> v8(move(v3));\r\n    vector<T, Alloc> v9(move(v4), al);\r\n    assert(verify_vector(v8));\r\n    assert(verify_vector(v9));\r\n\r\n    vector<T, Alloc> v10({T(), T()});\r\n    assert(verify_vector(v10));\r\n}\r\n\r\ntemplate <class Alloc, int N = 128>\r\nvoid test_insert_n() {\r\n    using T = typename Alloc::value_type;\r\n\r\n    vector<T, Alloc> v(1);\r\n\r\n    v.insert(v.begin(), N, T());\r\n    assert(verify_vector(v));\r\n    v.insert(v.end(), N, T());\r\n    assert(verify_vector(v));\r\n    v.insert(v.begin() + N, N, T());\r\n    assert(verify_vector(v));\r\n}\r\n\r\ntemplate <class Alloc, int N = 128>\r\nvoid test_insert_range() {\r\n    using T = typename Alloc::value_type;\r\n\r\n    vector<T, Alloc> v1(1);\r\n    vector<T, Alloc> v2(N);\r\n    input_iterator_tester<T, N> t;\r\n\r\n    v1.insert(v1.begin(), v2.begin(), v2.end());\r\n    assert(verify_vector(v1));\r\n    v1.insert(v1.end(), v2.begin(), v2.end());\r\n    assert(verify_vector(v1));\r\n    v1.insert(v1.begin() + N, v2.begin(), v2.end());\r\n    assert(verify_vector(v1));\r\n\r\n    v1.insert(v1.begin(), t.begin(), t.end());\r\n    assert(verify_vector(v1));\r\n    v1.insert(v1.end(), t.begin(), t.end());\r\n    assert(verify_vector(v1));\r\n    v1.insert(v1.begin() + N, t.begin(), t.end());\r\n    assert(verify_vector(v1));\r\n}\r\n\r\ntemplate <class Alloc, int N = 128>\r\nvoid test_assign() {\r\n    using T = typename Alloc::value_type;\r\n\r\n    vector<T, Alloc> v1(1);\r\n    vector<T, Alloc> v2(N + 1);\r\n    vector<T, Alloc> v3(N + 2);\r\n    input_iterator_tester<T, N + 2> t1;\r\n    input_iterator_tester<T, N + 3> t2;\r\n\r\n    v1.assign(N, T());\r\n    assert(verify_vector(v1));\r\n    v1.assign(v2.begin(), v2.end());\r\n    assert(verify_vector(v1));\r\n    v1.assign(v3.begin(), v3.end());\r\n    assert(verify_vector(v1));\r\n    v1.reserve(v1.size() + 1);\r\n    assert(verify_vector(v1));\r\n    vector<T, Alloc> larger(v1.capacity());\r\n    v1.assign(larger.begin(), larger.end());\r\n    assert(verify_vector(v1));\r\n\r\n    v1.assign(t1.begin(), t1.end());\r\n    assert(verify_vector(v1));\r\n    v1.assign(t2.begin(), t2.end());\r\n    assert(verify_vector(v1));\r\n    v1.assign(t1.begin(), t1.end());\r\n    assert(verify_vector(v1));\r\n\r\n    v1.assign(v3.begin(), v3.end());\r\n    assert(verify_vector(v1));\r\n    v1.assign(v2.begin(), v2.end());\r\n    assert(verify_vector(v1));\r\n\r\n    v1.assign(N, T());\r\n    assert(verify_vector(v1));\r\n    v1.reserve(v1.size() + 1);\r\n    assert(verify_vector(v1));\r\n    v1.assign(v1.capacity(), T());\r\n    assert(verify_vector(v1));\r\n\r\n    vector<T, Alloc> v4;\r\n    v4.assign({T()});\r\n    assert(verify_vector(v4));\r\n    v4.assign({T(), T()});\r\n    assert(verify_vector(v4));\r\n    v4.assign({T()});\r\n    assert(verify_vector(v4));\r\n}\r\n\r\ntemplate <class Alloc, int N = 128>\r\nvoid test_resize() {\r\n    using T = typename Alloc::value_type;\r\n\r\n    vector<T, Alloc> v;\r\n    v.resize(N, T());\r\n    assert(verify_vector(v));\r\n    v.resize(1, T());\r\n    assert(verify_vector(v));\r\n    v.resize(v.capacity(), T());\r\n    assert(verify_vector(v));\r\n    v.resize(v.size() - 1, T());\r\n    assert(verify_vector(v));\r\n    v.resize(v.capacity() + N, T());\r\n    assert(verify_vector(v));\r\n}\r\n\r\nvoid test_push_back_throw() {\r\n    {\r\n        vector<throw_on_construction> v;\r\n        v.reserve(1);\r\n\r\n        throw_on_construction t(false);\r\n        try {\r\n            v.push_back(t);\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        throw_on_construction t(false);\r\n        try {\r\n            v.push_back(t);\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n    {\r\n        vector<throw_on_construction> v;\r\n        v.reserve(1);\r\n\r\n        try {\r\n            v.push_back(throw_on_construction(false));\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        try {\r\n            v.push_back(throw_on_construction(false));\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_emplace_back_throw() {\r\n    {\r\n        vector<throw_on_construction> v;\r\n        v.reserve(1);\r\n\r\n        try {\r\n            v.emplace_back(true);\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        try {\r\n            v.emplace_back(true);\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_insert_range_throw() {\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        v.reserve(4);\r\n        v.emplace_back(false);\r\n        v.emplace_back(false);\r\n\r\n        try {\r\n            v.insert(v.begin(), {throw_on_construction(false), throw_on_construction(false)});\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        v.reserve(2);\r\n        v.emplace_back(false);\r\n        v.emplace_back(false);\r\n\r\n        try {\r\n            v.insert(v.begin(), {throw_on_construction(false), throw_on_construction(false)});\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        v.reserve(2);\r\n\r\n        try {\r\n            v.insert(v.end(), {throw_on_construction(false), throw_on_construction(false)});\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        try {\r\n            v.insert(v.end(), {throw_on_construction(false), throw_on_construction(false)});\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_insert_throw() {\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        v.reserve(3);\r\n        v.emplace_back(false);\r\n        v.emplace_back(false);\r\n\r\n        try {\r\n            v.insert(v.begin(), throw_on_construction(false));\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        v.reserve(2);\r\n        v.emplace_back(false);\r\n        v.emplace_back(false);\r\n\r\n        try {\r\n            v.insert(v.begin(), throw_on_construction(false));\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        v.reserve(1);\r\n\r\n        try {\r\n            v.insert(v.end(), throw_on_construction(false));\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        try {\r\n            v.insert(v.end(), throw_on_construction(false));\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_emplace_throw() {\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        v.reserve(3);\r\n        v.emplace_back(false);\r\n        v.emplace_back(false);\r\n\r\n        try {\r\n            v.emplace(v.begin(), false);\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        v.reserve(2);\r\n        v.emplace_back(false);\r\n        v.emplace_back(false);\r\n\r\n        try {\r\n            v.emplace(v.begin(), true);\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        v.reserve(1);\r\n\r\n        try {\r\n            v.emplace(v.end(), true);\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        try {\r\n            v.emplace(v.end(), true);\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_resize_throw() {\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        v.reserve(2);\r\n        v.emplace_back(false);\r\n\r\n        try {\r\n            v.resize(2);\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        v.reserve(1);\r\n        v.emplace_back(false);\r\n\r\n        try {\r\n            v.resize(2);\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_copy> v;\r\n\r\n        v.reserve(2);\r\n        v.push_back(throw_on_copy());\r\n\r\n        try {\r\n            v.resize(2, throw_on_copy());\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_copy> v;\r\n\r\n        v.reserve(1);\r\n        v.push_back(throw_on_copy());\r\n\r\n        try {\r\n            v.resize(2, throw_on_copy());\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_insert_n_throw() {\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        v.reserve(2);\r\n        v.emplace_back(false);\r\n\r\n        try {\r\n            v.insert(v.begin(), 2, throw_on_construction(false));\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        v.reserve(2);\r\n        v.emplace_back(false);\r\n\r\n        try {\r\n            v.insert(v.end(), 2, throw_on_construction(false));\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        v.reserve(1);\r\n        v.emplace_back(false);\r\n\r\n        try {\r\n            v.insert(v.begin(), 2, throw_on_construction(false));\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_construction> v;\r\n\r\n        v.reserve(1);\r\n        v.emplace_back(false);\r\n\r\n        try {\r\n            v.insert(v.end(), 2, throw_on_construction(false));\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_copy> v;\r\n\r\n        v.reserve(2);\r\n        v.push_back(throw_on_copy());\r\n\r\n        try {\r\n            v.insert(v.begin(), 2, throw_on_copy());\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_copy> v;\r\n\r\n        v.reserve(2);\r\n        v.push_back(throw_on_copy());\r\n\r\n        try {\r\n            v.insert(v.end(), 2, throw_on_copy());\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_copy> v;\r\n\r\n        v.reserve(1);\r\n        v.push_back(throw_on_copy());\r\n\r\n        try {\r\n            v.insert(v.begin(), 2, throw_on_copy());\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n\r\n    {\r\n        vector<throw_on_copy> v;\r\n\r\n        v.reserve(1);\r\n        v.push_back(throw_on_copy());\r\n\r\n        try {\r\n            v.insert(v.end(), 2, throw_on_copy());\r\n            assert(false);\r\n        } catch (int) {\r\n            assert(verify_vector(v));\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_clear() {\r\n    using T = typename Alloc::value_type;\r\n\r\n    vector<T, Alloc> v;\r\n    v.push_back(T());\r\n    v.assign(v.capacity() + 1, T());\r\n    assert(verify_vector(v));\r\n    v.clear();\r\n    assert(verify_vector(v));\r\n    v.clear();\r\n    assert(verify_vector(v));\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_empty() {\r\n    using T = typename Alloc::value_type;\r\n\r\n    vector<T, Alloc> v1;\r\n    v1.clear();\r\n    v1.resize(0);\r\n    v1.shrink_to_fit();\r\n    v1.assign(0, T());\r\n    v1.assign({});\r\n    v1 = {};\r\n\r\n    vector<T, Alloc> v2;\r\n    v1.assign(v2.begin(), v2.end());\r\n\r\n    input_iterator_tester<T, 11> in;\r\n    auto e = in.end();\r\n    v1.assign(e, e); // empty range of input iterators\r\n\r\n    vector<T, Alloc> v3;\r\n    v1 = v3;\r\n    v3 = move(v1);\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid run_tests() {\r\n    test_push_pop<Alloc>();\r\n    test_reserve_shrink<Alloc>();\r\n    test_emplace_pop<Alloc>();\r\n    test_move_assign<Alloc>();\r\n    test_copy_assign<Alloc>();\r\n    test_constructors<Alloc>();\r\n    test_insert_n<Alloc>();\r\n    test_insert_range<Alloc>();\r\n    test_assign<Alloc>();\r\n    test_resize<Alloc>();\r\n    test_clear<Alloc>();\r\n    test_empty<Alloc>();\r\n}\r\n\r\ntemplate <class T, template <class, class, class> class AllocT>\r\nvoid run_custom_allocator_matrix() {\r\n    run_tests<AllocT<T, true_type, true_type>>();\r\n    run_tests<AllocT<T, true_type, false_type>>();\r\n    run_tests<AllocT<T, false_type, true_type>>();\r\n    run_tests<AllocT<T, false_type, false_type>>();\r\n}\r\n\r\n// Test that writing to uninitialized memory in a vector triggers an ASan container-overflow error.\r\ntemplate <class T, class Alloc = allocator<T>>\r\nvoid run_asan_container_overflow_death_test() {\r\n    // We'll give the vector capacity 100 (all uninitialized memory).\r\n    vector<T, Alloc> v;\r\n    v.reserve(100);\r\n\r\n    // Write to the element at index 50 to trigger an ASan container-overflow check.\r\n    v.data()[50] = T{};\r\n}\r\n\r\n// Test that ASan `container-overflow` checks can be disabled for a custom allocator.\r\ntemplate <class T>\r\nvoid run_asan_annotations_disablement_test() {\r\n\r\n    // ASan annotations are disabled for the `implicit_allocator_no_asan_annotations` allocator,\r\n    // which should make the container-overflow 'death test' pass.\r\n    run_asan_container_overflow_death_test<T, implicit_allocator_no_asan_annotations<T>>();\r\n}\r\n\r\ntemplate <class T>\r\nvoid run_allocator_matrix() {\r\n    run_tests<allocator<T>>();\r\n    run_custom_allocator_matrix<T, aligned_allocator>();\r\n    run_custom_allocator_matrix<T, explicit_allocator>();\r\n    run_custom_allocator_matrix<T, implicit_allocator>();\r\n\r\n    // To test ASan annotation disablement, we use an ad-hoc allocator type to avoid disrupting other\r\n    // tests that depend on annotations being enabled. Therefore, unlike the prior tests,\r\n    // this test is not parameterized by the allocator type.\r\n    run_asan_annotations_disablement_test<T>();\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec([] {\r\n        // Do some work even when we aren't instrumented\r\n        run_allocator_matrix<char>();\r\n#ifdef __SANITIZE_ADDRESS__\r\n        run_allocator_matrix<int>();\r\n        run_allocator_matrix<double>();\r\n        run_allocator_matrix<non_trivial_can_throw>();\r\n        run_allocator_matrix<non_trivial_cannot_throw>();\r\n\r\n#ifndef __clang__ // TRANSITION, LLVM-35365\r\n        test_push_back_throw();\r\n        test_emplace_back_throw();\r\n        test_insert_range_throw();\r\n        test_insert_throw();\r\n        test_emplace_throw();\r\n        test_resize_throw();\r\n        test_insert_n_throw();\r\n#endif // ^^^ no workaround ^^^\r\n#endif // ASan instrumentation enabled\r\n    });\r\n\r\n#ifdef __SANITIZE_ADDRESS__\r\n    exec.add_death_tests({\r\n        run_asan_container_overflow_death_test<int>,\r\n        run_asan_container_overflow_death_test<double>,\r\n        run_asan_container_overflow_death_test<non_trivial_can_throw>,\r\n        run_asan_container_overflow_death_test<non_trivial_cannot_throw>,\r\n    });\r\n#endif // ASan instrumentation enabled\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n\r\n#endif // ^^^ no workaround ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_002039_byte_is_not_trivially_swappable/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002039_byte_is_not_trivially_swappable/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <chrono>\r\n#include <cstddef>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n#ifdef __cpp_lib_byte\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<byte>);\r\n#endif // __cpp_lib_byte\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<unsigned char>);\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<unsigned short>);\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<unsigned int>);\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<unsigned long>);\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<unsigned long long>);\r\n\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<signed char>);\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<short>);\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<int>);\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<long>);\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<long long>);\r\n\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<char>);\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<wchar_t>);\r\n\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<float>);\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<double>);\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<long double>);\r\n\r\nenum class byte2 : unsigned char {};\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<byte2>);\r\n\r\nenum class byte3 : unsigned char {};\r\nvoid swap(byte3& a, byte3& b);\r\nSTATIC_ASSERT(!_Is_trivially_swappable_v<byte3>);\r\n\r\nstruct good {\r\n    int val;\r\n};\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<good>);\r\n\r\nstruct not_trivial_destructor {\r\n    int val;\r\n    ~not_trivial_destructor();\r\n};\r\nSTATIC_ASSERT(!_Is_trivially_swappable_v<not_trivial_destructor>);\r\n\r\nstruct not_trivial_move_constructor {\r\n    int val;\r\n    not_trivial_move_constructor(not_trivial_move_constructor&&);\r\n};\r\nSTATIC_ASSERT(!_Is_trivially_swappable_v<not_trivial_move_constructor>);\r\n\r\nstruct not_trivial_move_assign {\r\n    int val;\r\n    not_trivial_move_assign& operator=(not_trivial_move_assign&&);\r\n};\r\nSTATIC_ASSERT(!_Is_trivially_swappable_v<not_trivial_move_assign>);\r\n\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<chrono::duration<int>>);\r\nSTATIC_ASSERT(_Is_trivially_swappable_v<chrono::time_point<chrono::system_clock>>);\r\n"
  },
  {
    "path": "tests/std/tests/GH_002045_put_time_changes_errno/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002045_put_time_changes_errno/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cerrno>\r\n#include <chrono>\r\n#include <ctime>\r\n#include <iomanip>\r\n#include <sstream>\r\n\r\nusing namespace std;\r\nusing namespace chrono;\r\n\r\ntm tm_now() {\r\n    const time_t t(system_clock::to_time_t(system_clock::now()));\r\n\r\n    tm tm_val;\r\n\r\n    const errno_t err = localtime_s(&tm_val, &t);\r\n    assert(err == 0);\r\n\r\n    return tm_val;\r\n}\r\n\r\nint main() {\r\n    const tm tm_val = tm_now();\r\n\r\n    {\r\n        ostringstream os;\r\n\r\n        assert(errno == 0);\r\n\r\n        os << put_time(&tm_val, \"%Y-%m-%d %H:%M:%S %Z\");\r\n\r\n        assert(os);\r\n        assert(errno == 0);\r\n    }\r\n    {\r\n        wostringstream os;\r\n\r\n        assert(errno == 0);\r\n\r\n        os << put_time(&tm_val, L\"%Y-%m-%d %H:%M:%S %Z\");\r\n\r\n        assert(os);\r\n        assert(errno == 0);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_002058_debug_iterator_race/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002058_debug_iterator_race/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <future>\r\n#include <list>\r\n#include <set>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n// Concurrently destroy and invalidate iterators\r\ntemplate <class Container>\r\nvoid test_concurrent_destruction() {\r\n    Container c;\r\n    c.insert(c.begin(), 0);\r\n\r\n    vector<typename Container::iterator> iters(1000, c.begin());\r\n    {\r\n        auto destroyIters = async(launch::async, [&]() { iters.clear(); });\r\n\r\n        auto invalidateIters = async(launch::async, [&]() { c.clear(); });\r\n    }\r\n}\r\n\r\n// Concurrently create and invalidate iterators\r\ntemplate <class Container>\r\nvoid test_concurrent_creation() {\r\n    Container c;\r\n    c.insert(c.begin(), 0);\r\n\r\n    vector<typename Container::iterator> iters;\r\n    iters.reserve(1000);\r\n\r\n    const auto iter = c.begin();\r\n    {\r\n        auto copyIters = async(launch::async, [&]() {\r\n            for (int i = 0; i < 1000; ++i) {\r\n                iters.push_back(iter);\r\n            };\r\n        });\r\n\r\n        auto invalidateIters = async(launch::async, [&]() { c.clear(); });\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_concurrent_destruction<list<int>>();\r\n    test_concurrent_destruction<set<int>>();\r\n    test_concurrent_destruction<vector<int>>();\r\n\r\n    test_concurrent_creation<list<int>>();\r\n    test_concurrent_creation<set<int>>();\r\n    test_concurrent_creation<vector<int>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_002094_cpp_core_guidelines/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\prefix.lst\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /w14640 /Zc:threadSafeInit-\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /analyze:only /analyze:autolog- /analyze:plugin EspXEngine.dll /analyze:ruleset stl.ruleset\"\r\nPM_CL=\"/MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive- /analyze:only /analyze:autolog- /analyze:plugin EspXEngine.dll /analyze:ruleset stl.ruleset\"\r\nPM_CL=\"/MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++20 /permissive- /analyze:only /analyze:autolog- /analyze:plugin EspXEngine.dll /analyze:ruleset stl.ruleset\"\r\nPM_CL=\"/MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /analyze:only /analyze:autolog- /analyze:plugin EspXEngine.dll /analyze:ruleset stl.ruleset\"\r\nPM_CL=\"/MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze:only /analyze:autolog- /analyze:plugin EspXEngine.dll /analyze:ruleset stl.ruleset\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /MD /std:c++14\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /MDd /std:c++17\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /MT /std:c++20 /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /MTd /std:c++latest /permissive-\"\r\n"
  },
  {
    "path": "tests/std/tests/GH_002094_cpp_core_guidelines/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <__msvc_all_public_headers.hpp>\r\n\r\nusing namespace std;\r\n\r\nvoid instantiate_regex_machinery() {\r\n    const regex r{R\"(.+meow.+)\"};\r\n    assert(regex_match(\"homeowner\", r));\r\n}\r\n\r\n#if _HAS_CXX20\r\nvoid instantiate_chrono_parse_machinery() {\r\n    istringstream iss{\"10:02:07\"};\r\n    chrono::seconds s{};\r\n    iss >> chrono::parse(\"%H:%M:%S\", s);\r\n    assert(s == 36127s);\r\n}\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n\r\n#if _HAS_CXX23\r\ntemplate <class T>\r\nstruct WrappedVector : vector<T> {\r\n    using vector<T>::vector;\r\n};\r\n\r\ntemplate <class T>\r\nstruct std::formatter<WrappedVector<T>, char> {\r\npublic:\r\n    template <class ParseContext>\r\n    constexpr auto parse(ParseContext& ctx) {\r\n        return underlying.parse(ctx);\r\n    }\r\n\r\n    template <class FormatContext>\r\n    auto format(const WrappedVector<T>& rng, FormatContext& ctx) const {\r\n        return underlying.format(rng, ctx);\r\n    }\r\n\r\nprivate:\r\n    range_formatter<T, char> underlying;\r\n};\r\n\r\nvoid instantiate_range_formatter_machinery() {\r\n    const WrappedVector<int> v{11, 22, 33, 44};\r\n    assert(format(\"{}\", v) == \"[11, 22, 33, 44]\");\r\n    assert(format(\"{:}\", v) == \"[11, 22, 33, 44]\");\r\n    assert(format(\"{:n}\", v) == \"11, 22, 33, 44\");\r\n}\r\n#endif // ^^^ _HAS_CXX23 ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_002120_streambuf_seekpos_and_seekoff/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002120_streambuf_seekpos_and_seekoff/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <streambuf>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\nstruct State {};\r\n\r\nstruct CharTraits : char_traits<char> {\r\n    using state_type = State;\r\n    using pos_type   = fpos<State>;\r\n};\r\n\r\nstruct Streambuf : basic_streambuf<char, CharTraits> {};\r\n"
  },
  {
    "path": "tests/std/tests/GH_002168_regex_overflow/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002168_regex_overflow/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <regex>\r\n\r\nusing namespace std;\r\n\r\n// GH-2168 <regex>: integer overflow on large backreference value\r\nint main() {\r\n    try {\r\n        // 4294967297 = 1 mod 2^32, so this will succeed if we don't check for overflow.\r\n        regex testRegex{R\"((a)\\4294967297)\", regex_constants::ECMAScript};\r\n        assert(false);\r\n    } catch (const regex_error& e) {\r\n        assert(e.code() == regex_constants::error_backref);\r\n    }\r\n\r\n    try {\r\n        regex testRegex{\"a{100000000000000000}\", regex_constants::ECMAScript};\r\n        assert(false);\r\n    } catch (const regex_error& e) {\r\n        assert(e.code() == regex_constants::error_badbrace);\r\n    }\r\n\r\n    try {\r\n        regex testRegex{\"a{100,10000000000000000}\", regex_constants::ECMAScript};\r\n        assert(false);\r\n    } catch (const regex_error& e) {\r\n        assert(e.code() == regex_constants::error_badbrace);\r\n    }\r\n\r\n    try {\r\n        // 4294967296 = 0 mod 2^32, so this will succeed if we don't check for overflow.\r\n        regex testRegex{R\"([\\4294967296-1])\", regex_constants::ECMAScript};\r\n        assert(false);\r\n    } catch (const regex_error& e) {\r\n        assert(e.code() == regex_constants::error_escape);\r\n    }\r\n\r\n    // Also test 2147483648 = 2^31, the first value that overflows for int:\r\n\r\n    try {\r\n        regex testRegex{R\"((a)\\2147483648)\", regex_constants::ECMAScript};\r\n        assert(false);\r\n    } catch (const regex_error& e) {\r\n        assert(e.code() == regex_constants::error_backref);\r\n    }\r\n\r\n    try {\r\n        regex testRegex{\"a{2147483648}\", regex_constants::ECMAScript};\r\n        assert(false);\r\n    } catch (const regex_error& e) {\r\n        assert(e.code() == regex_constants::error_badbrace);\r\n    }\r\n\r\n    try {\r\n        regex testRegex{\"a{100,2147483648}\", regex_constants::ECMAScript};\r\n        assert(false);\r\n    } catch (const regex_error& e) {\r\n        assert(e.code() == regex_constants::error_badbrace);\r\n    }\r\n\r\n    try {\r\n        regex testRegex{R\"([\\2147483648-1])\", regex_constants::ECMAScript};\r\n        assert(false);\r\n    } catch (const regex_error& e) {\r\n        assert(e.code() == regex_constants::error_escape);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_002206_unreserved_names/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002206_unreserved_names/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define ISA_AVAILABILITY delete\r\n#define error_parse      delete\r\n#define error_syntax     delete\r\n#define nsec             delete\r\n#define sec              delete\r\n#define xtime            delete\r\n#define xtime_get        delete\r\n\r\n#define discard_block       delete\r\n#define linear_congruential delete\r\n#define mersenne_twister    delete\r\n#define subtract_with_carry delete\r\n#define uniform_int         delete\r\n#define uniform_real        delete\r\n\r\n#define checked_array_iterator        delete\r\n#define make_checked_array_iterator   delete\r\n#define make_unchecked_array_iterator delete\r\n#define unchecked_array_iterator      delete\r\n\r\n#define ipfx delete\r\n#define isfx delete\r\n#define opfx delete\r\n#define osfx delete\r\n\r\n// Test workaround for extensions of non-reserved names that can't be removed at this moment.\r\n#define raw_name 1001\r\n\r\n// Also test GH-2645: <yvals_core.h>: Conformance issue on [[msvc::known_semantics]]\r\n#define msvc               1\r\n#define known_semantics    2\r\n#define intrinsic          3\r\n#define lifetimebound      4\r\n#define noop_dtor          5\r\n#define empty_bases        6\r\n#define no_specializations 7\r\n\r\n#include <__msvc_all_public_headers.hpp>\r\n\r\n#if msvc != 1\r\n#error bad macro expansion\r\n#endif // msvc != 1\r\n\r\n#if known_semantics != 2\r\n#error bad macro expansion\r\n#endif // known_semantics != 2\r\n\r\n#if intrinsic != 3\r\n#error bad macro expansion\r\n#endif // intrinsic != 3\r\n\r\n#if lifetimebound != 4\r\n#error bad macro expansion\r\n#endif // lifetimebound != 4\r\n\r\n#if noop_dtor != 5\r\n#error bad macro expansion\r\n#endif // noop_dtor != 5\r\n\r\n#if empty_bases != 6\r\n#error bad macro expansion\r\n#endif // empty_bases != 6\r\n\r\n#if no_specializations != 7\r\n#error bad macro expansion\r\n#endif // no_specializations != 7\r\n\r\n#if raw_name != 1001\r\n#error bad macro expansion\r\n#endif // raw_name != 1001\r\n"
  },
  {
    "path": "tests/std/tests/GH_002299_implicit_sfinae_constraints/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002299_implicit_sfinae_constraints/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <memory>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#if _HAS_CXX17\r\n#include <any>\r\n#include <initializer_list>\r\n#include <optional>\r\n#endif // _HAS_CXX17\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nusing namespace std;\r\n\r\n// tests for shared_ptr<T>::operator=\r\ntemplate <class T, class U, class = void>\r\nconstexpr bool can_shared_ptr_assign = false;\r\n\r\ntemplate <class T, class U>\r\nconstexpr bool can_shared_ptr_assign<T, U, void_t<decltype(declval<shared_ptr<T>&>() = declval<U>())>> = true;\r\n\r\nSTATIC_ASSERT(can_shared_ptr_assign<int, shared_ptr<int>>);\r\nSTATIC_ASSERT(!can_shared_ptr_assign<int, shared_ptr<long>>);\r\nSTATIC_ASSERT(!can_shared_ptr_assign<int, const shared_ptr<long>&>);\r\nSTATIC_ASSERT(!can_shared_ptr_assign<int, unique_ptr<long>>);\r\n#if _HAS_AUTO_PTR_ETC\r\nSTATIC_ASSERT(!can_shared_ptr_assign<int, auto_ptr<long>>);\r\n#endif\r\n\r\n// tests for shared_ptr<T>::reset\r\ntemplate <class Void, class T, class... Us>\r\nconstexpr bool can_shared_ptr_reset_impl = false;\r\n\r\ntemplate <class T, class... Us>\r\nconstexpr bool\r\n    can_shared_ptr_reset_impl<void_t<decltype(declval<shared_ptr<T>&>().reset(declval<Us>()...))>, T, Us...> = true;\r\n\r\ntemplate <class T, class... Us>\r\nconstexpr bool can_shared_ptr_reset = can_shared_ptr_reset_impl<void, T, Us...>;\r\n\r\nSTATIC_ASSERT(can_shared_ptr_reset<int, int*>);\r\nSTATIC_ASSERT(!can_shared_ptr_reset<int, long*>);\r\nSTATIC_ASSERT(!can_shared_ptr_reset<int, long*, default_delete<long>>);\r\nSTATIC_ASSERT(!can_shared_ptr_reset<int, long*, default_delete<long>, allocator<long>>);\r\n\r\n// tests for weak_ptr<T>::operator=\r\ntemplate <class T, class U, class = void>\r\nconstexpr bool can_weak_ptr_assign = false;\r\n\r\ntemplate <class T, class U>\r\nconstexpr bool can_weak_ptr_assign<T, U, void_t<decltype(declval<weak_ptr<T>&>() = declval<U>())>> = true;\r\n\r\nSTATIC_ASSERT(can_weak_ptr_assign<int, weak_ptr<int>>);\r\nSTATIC_ASSERT(!can_weak_ptr_assign<int, weak_ptr<long>>);\r\nSTATIC_ASSERT(!can_weak_ptr_assign<int, const weak_ptr<long>&>);\r\nSTATIC_ASSERT(!can_weak_ptr_assign<int, const shared_ptr<long>&>);\r\n\r\n#if _HAS_CXX17\r\n// tests for make_optional\r\ntemplate <class T, class = void>\r\nconstexpr bool can_make_optional_decay = false;\r\n\r\ntemplate <class T>\r\nconstexpr bool can_make_optional_decay<T, void_t<decltype(make_optional(declval<T>()))>> = true;\r\n\r\ntemplate <class Void, class T, class... Us>\r\nconstexpr bool can_make_optional_impl = false;\r\n\r\ntemplate <class T, class... Us>\r\nconstexpr bool can_make_optional_impl<void_t<decltype(make_optional<T>(declval<Us>()...))>, T, Us...> = true;\r\n\r\ntemplate <class T, class... Us>\r\nconstexpr bool can_make_optional_usual = can_make_optional_impl<void, T, Us...>;\r\n\r\nSTATIC_ASSERT(can_make_optional_decay<unique_ptr<int>>);\r\nSTATIC_ASSERT(!can_make_optional_decay<const unique_ptr<int>&>); // LWG-3627\r\nSTATIC_ASSERT(can_make_optional_usual<int, int>);\r\nSTATIC_ASSERT(!can_make_optional_usual<int, int, int>);\r\nSTATIC_ASSERT(!can_make_optional_usual<int, initializer_list<int>&>);\r\n\r\n// tests for make_any\r\ntemplate <class Void, class T, class... Us>\r\nconstexpr bool can_make_any_impl = false;\r\n\r\ntemplate <class T, class... Us>\r\nconstexpr bool can_make_any_impl<void_t<decltype(make_any<T>(declval<Us>()...))>, T, Us...> = true;\r\n\r\ntemplate <class T, class... Us>\r\nconstexpr bool can_make_any = can_make_any_impl<void, T, Us...>;\r\n\r\nSTATIC_ASSERT(can_make_any<int, int>);\r\nSTATIC_ASSERT(!can_make_any<unique_ptr<int>, const unique_ptr<int>&>);\r\nSTATIC_ASSERT(!can_make_any<int, int, int>);\r\nSTATIC_ASSERT(!can_make_any<int, initializer_list<int>&>);\r\n#endif // _HAS_CXX17\r\n"
  },
  {
    "path": "tests/std/tests/GH_002307_usual_scope_guard/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002307_usual_scope_guard/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstring>\r\n#include <deque>\r\n#include <stdexcept>\r\n\r\nusing namespace std;\r\n\r\nstruct countdown {\r\n    int val;\r\n\r\n    static int count;\r\n\r\n    void tick() {\r\n        if (count == 0) {\r\n            throw runtime_error{\"GO\"};\r\n        } else {\r\n            --count;\r\n        }\r\n    }\r\n\r\n    explicit countdown(const int init) : val(init) {\r\n        tick();\r\n    }\r\n\r\n    countdown(const countdown& other) : val(other.val) {\r\n        tick();\r\n    }\r\n\r\n    countdown& operator=(const countdown& other) {\r\n        tick();\r\n        val = other.val;\r\n        return *this;\r\n    }\r\n\r\n    bool operator==(int other) const {\r\n        return val == other;\r\n    }\r\n};\r\n\r\nint countdown::count = 0;\r\n\r\nconstexpr int init_data[] = {1, 2, 3, 4, 5, 6, 7};\r\nconstexpr int more_data[] = {10, 11, 12, 13, 14};\r\n\r\ntemplate <class Container>\r\nvoid check(const Container& c) {\r\n    assert(equal(c.begin(), c.end(), begin(init_data), end(init_data)));\r\n}\r\n\r\nvoid check_exception(const runtime_error& ex) {\r\n    assert(strcmp(ex.what(), \"GO\") == 0);\r\n}\r\n\r\nvoid test_deque() {\r\n    countdown::count = 8;\r\n\r\n    deque<countdown> dq(begin(init_data), end(init_data));\r\n\r\n    try {\r\n        countdown::count = 3;\r\n        dq.insert(dq.end() - 2, begin(more_data), end(more_data));\r\n        assert(false); // Should have thrown an exception\r\n    } catch (const runtime_error& ex) {\r\n        check_exception(ex);\r\n        check(dq);\r\n    }\r\n\r\n    try {\r\n        countdown::count = 3;\r\n        dq.insert(dq.begin() + 2, begin(more_data), end(more_data));\r\n        assert(false); // Should have thrown an exception\r\n    } catch (const runtime_error& ex) {\r\n        check_exception(ex);\r\n        check(dq);\r\n    }\r\n\r\n    try {\r\n        countdown::count = 3;\r\n        dq.insert(dq.end() - 2, 6, countdown{10});\r\n        assert(false); // Should have thrown an exception\r\n    } catch (const runtime_error& ex) {\r\n        check_exception(ex);\r\n        check(dq);\r\n    }\r\n\r\n    try {\r\n        countdown::count = 3;\r\n        dq.insert(dq.begin() + 2, 6, countdown{11});\r\n        assert(false); // Should have thrown an exception\r\n    } catch (const runtime_error& ex) {\r\n        check_exception(ex);\r\n        check(dq);\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_deque();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_002334_branchless_clamp/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002334_branchless_clamp/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <functional>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    // Optimized cases\r\n    assert(clamp(2, 4, 7) == 4);\r\n    assert(clamp(6, 4, 7) == 6);\r\n    assert(clamp(8, 4, 7) == 7);\r\n\r\n    assert(clamp(2, 4, 7, less{}) == 4);\r\n    assert(clamp(6, 4, 7, less{}) == 6);\r\n    assert(clamp(8, 4, 7, less{}) == 7);\r\n\r\n    assert(clamp(2, 4, 7, less<int>{}) == 4);\r\n    assert(clamp(6, 4, 7, less<int>{}) == 6);\r\n    assert(clamp(8, 4, 7, less<int>{}) == 7);\r\n\r\n    const int data[100] = {};\r\n    assert(clamp(data + 22, data + 30, data + 70) == data + 30);\r\n    assert(clamp(data + 44, data + 30, data + 70) == data + 44);\r\n    assert(clamp(data + 88, data + 30, data + 70) == data + 70);\r\n\r\n    // Generic cases\r\n    assert(clamp(2, 4, 7, less<long long>{}) == 4);\r\n    assert(clamp(6, 4, 7, less<long long>{}) == 6);\r\n    assert(clamp(8, 4, 7, less<long long>{}) == 7);\r\n\r\n    assert(clamp(\"apple\"s, \"banana\"s, \"coconut\"s) == \"banana\"s);\r\n    assert(clamp(\"blueberry\"s, \"banana\"s, \"coconut\"s) == \"blueberry\"s);\r\n    assert(clamp(\"cucumber\"s, \"banana\"s, \"coconut\"s) == \"coconut\"s);\r\n\r\n#if _ITERATOR_DEBUG_LEVEL < 2\r\n    // Make sure we keep the early return for generic cases:\r\n    // Either less than min or greater than max input should produce only one comparison.\r\n    // For _ITERATOR_DEBUG_LEVEL == 2 we validate the predicate, so there are extra comparisons.\r\n\r\n    int comparisons        = 0;\r\n    const auto counted_cmp = [&comparisons](auto a, auto b) {\r\n        ++comparisons;\r\n        return a < b;\r\n    };\r\n\r\n    assert(clamp(2, 4, 7, counted_cmp) == 4);\r\n    assert(clamp(6, 4, 7, counted_cmp) == 6);\r\n    assert(clamp(8, 4, 7, counted_cmp) == 7);\r\n    assert(comparisons == 5);\r\n\r\n    comparisons = 0;\r\n    assert(clamp(\"apple\"s, \"banana\"s, \"coconut\"s, counted_cmp) == \"banana\"s);\r\n    assert(clamp(\"blueberry\"s, \"banana\"s, \"coconut\"s, counted_cmp) == \"blueberry\"s);\r\n    assert(clamp(\"cucumber\"s, \"banana\"s, \"coconut\"s, counted_cmp) == \"coconut\"s);\r\n    assert(comparisons == 5);\r\n#endif // _ITERATOR_DEBUG_LEVEL < 2\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_002431_byte_range_find_with_unreachable_sentinel/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"\"\r\n*\tPM_CL=\"/D_USE_STD_VECTOR_ALGORITHMS=0\"\r\n"
  },
  {
    "path": "tests/std/tests/GH_002431_byte_range_find_with_unreachable_sentinel/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <ranges>\r\n\r\n#pragma warning(push) // TRANSITION, OS-23694920\r\n#pragma warning(disable : 4668) // 'MEOW' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'\r\n#include <Windows.h>\r\n#pragma warning(pop)\r\n\r\n#include <test_vector_algorithms_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nvoid test_impl(void* sv, void* ev) {\r\n    const auto s = reinterpret_cast<T*>(sv);\r\n    const auto e = reinterpret_cast<T*>(ev);\r\n    ranges::fill(s, e, '0');\r\n    const auto m = e - 3;\r\n    m[0]         = '1';\r\n    m[1]         = '2';\r\n    m[2]         = '3';\r\n\r\n    for (int start = -66; start <= 0; ++start) {\r\n        assert(ranges::find(m + start, unreachable_sentinel, '1') == m);\r\n        assert(ranges::find(m + start, unreachable_sentinel, '2') == m + 1);\r\n        assert(ranges::find(m + start, unreachable_sentinel, '3') == m + 2);\r\n    }\r\n}\r\n\r\nvoid test_all_element_sizes(void* p, size_t page) {\r\n    test_impl<char>(p, reinterpret_cast<char*>(p) + page);\r\n    test_impl<short>(p, reinterpret_cast<char*>(p) + page);\r\n    test_impl<long>(p, reinterpret_cast<char*>(p) + page);\r\n    test_impl<long long>(p, reinterpret_cast<char*>(p) + page);\r\n}\r\n\r\nint main() {\r\n    SYSTEM_INFO si = {};\r\n    GetSystemInfo(&si);\r\n\r\n    const size_t page  = si.dwPageSize;\r\n    const size_t alloc = (max) (page * 2, size_t{si.dwAllocationGranularity});\r\n\r\n    void* p = VirtualAlloc(nullptr, alloc, MEM_RESERVE, PAGE_NOACCESS);\r\n    assert(p != nullptr);\r\n    void* p2 = VirtualAlloc(p, page, MEM_COMMIT, PAGE_READWRITE);\r\n    assert(p2 != nullptr);\r\n\r\n    run_tests_with_different_isa_levels([&] { test_all_element_sizes(p, page); });\r\n\r\n    VirtualFree(p, 0, MEM_RELEASE);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_002488_promise_not_default_constructible_types/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002488_promise_not_default_constructible_types/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <atomic>\r\n#include <cassert>\r\n#include <exception>\r\n#include <future>\r\n#include <system_error>\r\n#include <thread>\r\n\r\nstatic std::atomic<int> has_default_objects{0};\r\nstatic std::atomic<int> no_default_objects{0};\r\nstatic std::atomic<int> no_default_or_assign_objects{0};\r\n\r\nstruct has_default {\r\n    has_default() : x(0xbad) {\r\n        ++has_default_objects;\r\n    }\r\n    explicit has_default(int n) : x(n) {\r\n        ++has_default_objects;\r\n    }\r\n    has_default(const has_default& v) : x(v.x) {\r\n        ++has_default_objects;\r\n    }\r\n    has_default& operator=(const has_default&) = default;\r\n\r\n    ~has_default() {\r\n        --has_default_objects;\r\n    }\r\n\r\n    int x;\r\n};\r\n\r\nstruct no_default {\r\n    no_default() = delete;\r\n    explicit no_default(int n) : x(n) {\r\n        ++no_default_objects;\r\n    }\r\n    no_default(const no_default& v) : x(v.x) {\r\n        ++no_default_objects;\r\n    }\r\n    no_default& operator=(const no_default&) = default;\r\n\r\n    ~no_default() {\r\n        --no_default_objects;\r\n    }\r\n\r\n    int x;\r\n};\r\n\r\nstruct no_default_or_assign {\r\n    no_default_or_assign() = delete;\r\n    explicit no_default_or_assign(int n) : x(n) {\r\n        ++no_default_or_assign_objects;\r\n    }\r\n    no_default_or_assign(const no_default_or_assign& v) : x(v.x) {\r\n        ++no_default_or_assign_objects;\r\n    }\r\n\r\n    void operator=(const no_default_or_assign&) = delete;\r\n\r\n    ~no_default_or_assign() {\r\n        --no_default_or_assign_objects;\r\n    }\r\n\r\n    int x;\r\n};\r\n\r\ntemplate <class F>\r\nvoid assert_throws_future_error(F f, std::error_code expected_code) {\r\n    try {\r\n        f();\r\n    } catch (const std::future_error& e) {\r\n        assert(e.code() == expected_code);\r\n        return;\r\n    } catch (...) {\r\n    }\r\n    assert(false);\r\n}\r\n\r\ntemplate <class T>\r\nstruct MoveOnlyFunctor {\r\n    MoveOnlyFunctor()                             = default;\r\n    MoveOnlyFunctor(MoveOnlyFunctor&&)            = default;\r\n    MoveOnlyFunctor& operator=(MoveOnlyFunctor&&) = default;\r\n\r\n    T operator()() const {\r\n        return T{172};\r\n    }\r\n};\r\n\r\ntemplate <class T>\r\nvoid run_tests() {\r\n    using Promise = std::promise<T>;\r\n    using Future  = std::future<T>;\r\n\r\n    {\r\n        Promise p;\r\n        p.set_value(T(4));\r\n        assert(p.get_future().get().x == 4);\r\n    }\r\n\r\n    {\r\n        Promise p;\r\n        Future f = p.get_future();\r\n        T v(10);\r\n        p.set_value(v);\r\n        assert(f.get().x == 10);\r\n        assert_throws_future_error([&] { p.set_value(v); }, std::future_errc::promise_already_satisfied);\r\n        assert_throws_future_error([&] { f.get(); }, std::future_errc::no_state);\r\n        assert_throws_future_error([&] { p.get_future().get(); }, std::future_errc::future_already_retrieved);\r\n    }\r\n\r\n    {\r\n        Promise p;\r\n        Future f = p.get_future();\r\n        p.set_exception(std::make_exception_ptr(5));\r\n        try {\r\n            f.get();\r\n            assert(false);\r\n        } catch (int i) {\r\n            assert(i == 5);\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n    }\r\n\r\n    {\r\n        Promise p;\r\n        Future f = p.get_future();\r\n        p.set_exception(std::make_exception_ptr(3));\r\n        assert_throws_future_error([&] { p.set_value(T(2)); }, std::future_errc::promise_already_satisfied);\r\n        try {\r\n            f.get();\r\n            assert(false);\r\n        } catch (int i) {\r\n            assert(i == 3);\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n    }\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659383\r\n    {\r\n        Promise p;\r\n        Future f = p.get_future();\r\n        std::atomic<int> failures{0};\r\n        int succeeded    = -1;\r\n        auto make_thread = [&](int n) {\r\n            return std::thread([&, n] {\r\n                try {\r\n                    p.set_value(T(n));\r\n                } catch (std::future_error) {\r\n                    ++failures;\r\n                    return;\r\n                }\r\n                succeeded = n;\r\n            });\r\n        };\r\n        std::thread threads[]{make_thread(0), make_thread(1), make_thread(2), make_thread(3), make_thread(4),\r\n            make_thread(5), make_thread(6), make_thread(7)};\r\n\r\n        for (auto& t : threads) {\r\n            t.join();\r\n        }\r\n\r\n        assert(failures == 7);\r\n        assert(succeeded != -1 && f.get().x == succeeded);\r\n    }\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    {\r\n        (void) std::async(std::launch::async, [] { return T(16); });\r\n        (void) std::async(std::launch::async, [] {\r\n            const T x(40);\r\n            return x;\r\n        });\r\n\r\n        Future f = std::async(std::launch::async, [] { return T(23); });\r\n        assert(f.get().x == 23);\r\n    }\r\n\r\n    {\r\n        std::packaged_task<T()> pt([] { return T(7); });\r\n        Future f = pt.get_future();\r\n        pt();\r\n\r\n        assert(f.get().x == 7);\r\n    }\r\n\r\n    // Also test GH-321: \"<future>: packaged_task can't be constructed from a move-only lambda\"\r\n    {\r\n        std::packaged_task<T()> pt(MoveOnlyFunctor<T>{});\r\n        Future f = pt.get_future();\r\n        pt();\r\n\r\n        assert(f.get().x == 172);\r\n    }\r\n}\r\n\r\nint main() {\r\n    run_tests<has_default>();\r\n    run_tests<no_default>();\r\n    run_tests<no_default_or_assign>();\r\n    assert(has_default_objects == 0);\r\n    assert(no_default_objects == 0);\r\n    assert(no_default_or_assign_objects == 0);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_002558_format_presetPadding/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This is usual_20_matrix.lst + /presetPadding with clang configs disabled (clang-cl doesn't support /presetPadding)\r\nRUNALL_INCLUDE ..\\prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w14640 /Zc:threadSafeInit- /presetPadding\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++20 /permissive- /Zc:noexceptTypes-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++20 /permissive- /Zc:noexceptTypes- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:wchar_t-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- /Zc:wchar_t- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++20 /permissive- /fp:except /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++20 /permissive- /fp:except /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /fp:strict\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /fp:strict -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/clr /MD /std:c++20\"\r\nPM_CL=\"/clr /MDd /std:c++20\"\r\nPM_CL=\"/std:c++20 /permissive- /BE /c /EHsc /MD\"\r\nPM_CL=\"/std:c++latest /permissive- /BE /c /EHsc /MTd\"\r\n# PM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++20 /permissive- /MD\"\r\n# PM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++latest /permissive- /MTd /fp:strict\"\r\n"
  },
  {
    "path": "tests/std/tests/GH_002558_format_presetPadding/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <format>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\n// GH-2558 <format>: Bogus compiler errors with /presetPadding\r\nstring test_gh_2558() {\r\n    return format(\"I have {} cute {} kittens.\\n\", 1729, \"fluffy\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_002581_common_reference_workaround/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002581_common_reference_workaround/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstddef>\r\n#include <iterator>\r\n\r\nusing namespace std;\r\n\r\nstruct Test {};\r\nenum Unscoped {};\r\nenum class Scoped {};\r\n\r\n// Tests for raw pointers\r\nstatic_assert(contiguous_iterator<volatile int*>);\r\nstatic_assert(contiguous_iterator<const volatile int*>);\r\nstatic_assert(contiguous_iterator<volatile double*>);\r\nstatic_assert(contiguous_iterator<const volatile double*>);\r\nstatic_assert(contiguous_iterator<volatile nullptr_t*>);\r\nstatic_assert(contiguous_iterator<const volatile nullptr_t*>);\r\nstatic_assert(contiguous_iterator<volatile Unscoped*>);\r\nstatic_assert(contiguous_iterator<const volatile Unscoped*>);\r\nstatic_assert(contiguous_iterator<volatile Scoped*>);\r\nstatic_assert(contiguous_iterator<const volatile Scoped*>);\r\nstatic_assert(contiguous_iterator<Test* volatile*>);\r\nstatic_assert(contiguous_iterator<Test* const volatile*>);\r\nstatic_assert(contiguous_iterator<int Test::* volatile*>);\r\nstatic_assert(contiguous_iterator<int Test::* const volatile*>);\r\n\r\n// Tests for move_iterator specializations\r\nstatic_assert(random_access_iterator<move_iterator<volatile int*>>);\r\nstatic_assert(random_access_iterator<move_iterator<const volatile int*>>);\r\nstatic_assert(random_access_iterator<move_iterator<volatile double*>>);\r\nstatic_assert(random_access_iterator<move_iterator<const volatile double*>>);\r\nstatic_assert(random_access_iterator<move_iterator<volatile nullptr_t*>>);\r\nstatic_assert(random_access_iterator<move_iterator<const volatile nullptr_t*>>);\r\nstatic_assert(random_access_iterator<move_iterator<volatile Unscoped*>>);\r\nstatic_assert(random_access_iterator<move_iterator<const volatile Unscoped*>>);\r\nstatic_assert(random_access_iterator<move_iterator<volatile Scoped*>>);\r\nstatic_assert(random_access_iterator<move_iterator<const volatile Scoped*>>);\r\nstatic_assert(random_access_iterator<move_iterator<Test* volatile*>>);\r\nstatic_assert(random_access_iterator<move_iterator<Test* const volatile*>>);\r\nstatic_assert(random_access_iterator<move_iterator<int Test::* volatile*>>);\r\nstatic_assert(random_access_iterator<move_iterator<int Test::* const volatile*>>);\r\n"
  },
  {
    "path": "tests/std/tests/GH_002620_construct_at_workaround/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002620_construct_at_workaround/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <memory>\r\n\r\nusing namespace std;\r\n\r\nstruct S {\r\n    int v;\r\n    explicit S(int v_) : v(v_) {}\r\n    S(const S&) = delete;\r\n};\r\n\r\nunion U {\r\n    char c;\r\n    S s;\r\n    U() : c{} {}\r\n    ~U() noexcept {}\r\n};\r\n\r\nstruct copy_elider {\r\n    operator S() const {\r\n        return S{42};\r\n    }\r\n};\r\n\r\nint main() {\r\n    U u;\r\n    // GH-2620: <xutility>: SFINAE constraint on construct_at prevents emplacing immovable objects with copy elision\r\n#ifndef __EDG__ // TRANSITION, DevCom-10000388\r\n    construct_at(&u.s, copy_elider{});\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_002655_alternate_name_broke_linker/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\prefix.lst\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/MD\"\r\nPM_CL=\"/MDd\"\r\nPM_CL=\"/MT\"\r\nPM_CL=\"/MTd\"\r\n"
  },
  {
    "path": "tests/std/tests/GH_002655_alternate_name_broke_linker/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// REQUIRES: x64 || x86\r\n\r\n#include <yvals.h>\r\n\r\n#if defined(_M_IX86) || defined(_M_X64)\r\nextern \"C\" int __declspec(dllimport) __stdcall __std_init_once_begin_initialize(void**, unsigned long, int*, void**);\r\nextern \"C\" int __declspec(dllimport) __stdcall __std_init_once_complete(void**, unsigned long, void*);\r\n#endif // defined(_M_IX86) || defined(_M_X64)\r\n\r\nint main() {\r\n#if defined(_M_IX86) || defined(_M_X64)\r\n    void* once  = nullptr;\r\n    int pending = 0;\r\n    __std_init_once_begin_initialize(&once, 0, &pending, nullptr);\r\n    __std_init_once_complete(&once, 0, nullptr);\r\n#endif // defined(_M_IX86) || defined(_M_X64)\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_002711_Zc_alignedNew-/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/Zc:alignedNew-\"\r\n*\tPM_CL=\"/J\"\r\n"
  },
  {
    "path": "tests/std/tests/GH_002711_Zc_alignedNew-/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// GH-2711 <functional>: incompatible with /std:c++latest and /Zc:alignedNew-\r\n// GH-3294 <chrono>: building with -J emits C4365\r\n#include <__msvc_all_public_headers.hpp>\r\n"
  },
  {
    "path": "tests/std/tests/GH_002760_syncstream_memory_leak/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002760_syncstream_memory_leak/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// REQUIRES: debug_CRT\r\n\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <sstream>\r\n#include <syncstream>\r\nusing namespace std;\r\n\r\n// GH-2760, <syncstream>: std::osyncstream memory leak\r\nint main() {\r\n    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);\r\n    [[maybe_unused]] _CrtMemState start;\r\n    [[maybe_unused]] _CrtMemState end;\r\n    [[maybe_unused]] _CrtMemState diff;\r\n    _CrtMemCheckpoint(&start);\r\n    {\r\n        stringstream s;\r\n        osyncstream bout(s);\r\n        bout << \"Hello, this line is long, which previously leaked memory\" << '\\n';\r\n    }\r\n    _CrtMemCheckpoint(&end);\r\n    assert(_CrtMemDifference(&diff, &start, &end) == 0);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_002769_handle_deque_block_pointers/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002769_handle_deque_block_pointers/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <deque>\r\n#include <iterator>\r\n#include <memory>\r\n#include <random>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nsize_t counter = 0;\r\n\r\ntemplate <class T, class Diff = ptrdiff_t>\r\nclass counting_ptr {\r\nprivate:\r\n    T* p_;\r\n\r\n    explicit counting_ptr(T* raw_ptr) noexcept : p_(raw_ptr) {\r\n        ++counter;\r\n    }\r\n\r\n    template <class U>\r\n    friend struct ptr_counting_allocator;\r\n\r\n    template <class U>\r\n    friend struct inconsistent_difference_allocator;\r\n\r\npublic:\r\n#if _HAS_CXX20\r\n    using iterator_concept = contiguous_iterator_tag;\r\n#endif // _HAS_CXX20\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = T;\r\n    using difference_type   = Diff;\r\n    using pointer           = T*;\r\n    using reference         = add_lvalue_reference_t<T>;\r\n\r\n    counting_ptr(nullptr_t) noexcept : counting_ptr{static_cast<T*>(nullptr)} {}\r\n\r\n    counting_ptr() noexcept : counting_ptr{nullptr} {}\r\n\r\n    counting_ptr(const counting_ptr& other) noexcept : counting_ptr{other.p_} {}\r\n\r\n    counting_ptr& operator=(const counting_ptr&) = default;\r\n\r\n    counting_ptr& operator=(nullptr_t) noexcept {\r\n        p_ = nullptr;\r\n        return *this;\r\n    }\r\n\r\n    ~counting_ptr() {\r\n        assert(counter != 0);\r\n        --counter;\r\n    }\r\n\r\n    explicit operator bool() const noexcept {\r\n        return p_ != nullptr;\r\n    }\r\n\r\n    static counting_ptr pointer_to(T& obj) noexcept {\r\n        return counting_ptr{addressof(obj)};\r\n    }\r\n\r\n    T& operator*() const noexcept {\r\n        return *p_;\r\n    }\r\n\r\n    T* operator->() const noexcept {\r\n        return p_;\r\n    }\r\n\r\n    counting_ptr& operator++() noexcept {\r\n        ++p_;\r\n        return *this;\r\n    }\r\n\r\n    counting_ptr operator++(int) noexcept {\r\n        auto tmp = *this;\r\n        ++p_;\r\n        return tmp;\r\n    }\r\n\r\n    counting_ptr& operator--() noexcept {\r\n        --p_;\r\n        return *this;\r\n    }\r\n\r\n    counting_ptr operator--(int) noexcept {\r\n        auto tmp = *this;\r\n        --p_;\r\n        return tmp;\r\n    }\r\n\r\n    template <class I = Diff, enable_if_t<is_same_v<I, Diff>, int> = 0>\r\n    T& operator[](I n) const noexcept {\r\n        return p_[n];\r\n    }\r\n\r\n    template <class I = Diff, enable_if_t<is_same_v<I, Diff>, int> = 0>\r\n    counting_ptr& operator+=(I n) noexcept {\r\n        p_ += n;\r\n        return *this;\r\n    }\r\n\r\n    template <class I = Diff, enable_if_t<is_same_v<I, Diff>, int> = 0>\r\n    counting_ptr& operator-=(I n) noexcept {\r\n        p_ -= n;\r\n        return *this;\r\n    }\r\n\r\n    template <class I = Diff, enable_if_t<is_same_v<I, Diff>, int> = 0>\r\n    friend counting_ptr operator+(const counting_ptr& p, I n) noexcept {\r\n        auto tmp = p;\r\n        tmp += n;\r\n        return tmp;\r\n    }\r\n\r\n    template <class I = Diff, enable_if_t<is_same_v<I, Diff>, int> = 0>\r\n    friend counting_ptr operator+(I n, const counting_ptr& p) noexcept {\r\n        auto tmp = p;\r\n        tmp += n;\r\n        return tmp;\r\n    }\r\n\r\n    template <class I = Diff, enable_if_t<is_same_v<I, Diff>, int> = 0>\r\n    friend counting_ptr operator-(const counting_ptr& p, I n) noexcept {\r\n        auto tmp = p;\r\n        tmp -= n;\r\n        return tmp;\r\n    }\r\n\r\n    friend Diff operator-(const counting_ptr& lhs, const counting_ptr& rhs) noexcept {\r\n        return static_cast<Diff>(lhs.p_ - rhs.p_);\r\n    }\r\n\r\n    friend bool operator==(const counting_ptr& p, nullptr_t) noexcept {\r\n        return p.p_ == nullptr;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    friend bool operator==(const counting_ptr& lhs, const counting_ptr& rhs) = default;\r\n\r\n    friend auto operator<=>(const counting_ptr& lhs, const counting_ptr& rhs) = default;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    friend bool operator==(nullptr_t, const counting_ptr& p) noexcept {\r\n        return p.p_ == nullptr;\r\n    }\r\n\r\n    friend bool operator!=(const counting_ptr& p, nullptr_t) noexcept {\r\n        return !(p == nullptr);\r\n    }\r\n\r\n    friend bool operator!=(nullptr_t, const counting_ptr& p) noexcept {\r\n        return !(p == nullptr);\r\n    }\r\n\r\n    friend bool operator==(const counting_ptr& lhs, const counting_ptr& rhs) noexcept {\r\n        return lhs.p_ == rhs.p_;\r\n    }\r\n\r\n    friend bool operator!=(const counting_ptr& lhs, const counting_ptr& rhs) noexcept {\r\n        return !(lhs == rhs);\r\n    }\r\n\r\n    friend bool operator<(const counting_ptr& lhs, const counting_ptr& rhs) noexcept {\r\n        return lhs.p_ < rhs.p_;\r\n    }\r\n\r\n    friend bool operator>(const counting_ptr& lhs, const counting_ptr& rhs) noexcept {\r\n        return rhs < lhs;\r\n    }\r\n\r\n    friend bool operator<=(const counting_ptr& lhs, const counting_ptr& rhs) noexcept {\r\n        return !(rhs < lhs);\r\n    }\r\n\r\n    friend bool operator>=(const counting_ptr& lhs, const counting_ptr& rhs) noexcept {\r\n        return !(lhs < rhs);\r\n    }\r\n#endif // !_HAS_CXX20\r\n};\r\n\r\ntemplate <class T>\r\nstruct ptr_counting_allocator {\r\n    using value_type      = T;\r\n    using pointer         = counting_ptr<T>;\r\n    using size_type       = size_t;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    ptr_counting_allocator() = default;\r\n\r\n    template <class U>\r\n    constexpr ptr_counting_allocator(ptr_counting_allocator<U>) noexcept {}\r\n\r\n    pointer allocate(size_type n) {\r\n        return pointer{allocator<T>{}.allocate(n)};\r\n    }\r\n\r\n    void deallocate(pointer p, size_type n) {\r\n        allocator<T>{}.deallocate(p.operator->(), n);\r\n    }\r\n\r\n    template <class U>\r\n    friend constexpr bool operator==(ptr_counting_allocator, ptr_counting_allocator<U>) noexcept {\r\n        return true;\r\n    }\r\n#if !_HAS_CXX20\r\n    template <class U>\r\n    friend constexpr bool operator!=(ptr_counting_allocator, ptr_counting_allocator<U>) noexcept {\r\n        return false;\r\n    }\r\n#endif // !_HAS_CXX20\r\n};\r\n\r\n// GH-2769 <deque>: For allocators where allocator_traits<T>::pointer is an object, destructors aren't always called\r\nvoid test_gh_2769() {\r\n    {\r\n        deque<int, ptr_counting_allocator<int>> dq{3, 1, 4, 1, 5, 9};\r\n        dq.insert(dq.end(), {2, 6, 5, 3, 5, 8});\r\n    }\r\n    assert(counter == 0);\r\n\r\n    {\r\n        deque<int, ptr_counting_allocator<int>> dq(979, 323);\r\n        dq.insert(dq.begin(), 84, 62);\r\n        dq.erase(dq.begin() + 64, dq.begin() + 338);\r\n    }\r\n    assert(counter == 0);\r\n}\r\n\r\nsize_t count_limit = 0;\r\n\r\nstruct live_counter {\r\n    live_counter() {\r\n        add();\r\n    }\r\n    live_counter(const live_counter&) {\r\n        add();\r\n    }\r\n    live_counter& operator=(const live_counter&) = default;\r\n    ~live_counter() {\r\n        remove();\r\n    }\r\n\r\n    static void add() {\r\n        assert(counter <= count_limit);\r\n        if (counter == count_limit) {\r\n            throw 42;\r\n        }\r\n        ++counter;\r\n    }\r\n    static void remove() {\r\n        assert(counter <= count_limit);\r\n        assert(counter > 0);\r\n        --counter;\r\n    }\r\n};\r\n\r\nvoid test_gh_3717() {\r\n    // Also test GH-3717: deque(count) would leak elements if a constructor threw during resize(count)\r\n\r\n    // make sure the counter/limit machinery works properly\r\n    assert(counter == 0);\r\n    count_limit = 8;\r\n    {\r\n        deque<live_counter> d{8};\r\n        assert(counter == 8);\r\n    }\r\n    assert(counter == 0);\r\n\r\n    // verify that deque(n) cleans up live objects on construction failure\r\n    try {\r\n        deque<live_counter>{16};\r\n        assert(false);\r\n    } catch (const int i) {\r\n        assert(i == 42);\r\n        assert(counter == 0);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nstruct inconsistent_difference_allocator {\r\n    using value_type      = T;\r\n    using size_type       = size_t;\r\n    using difference_type = conditional_t<is_arithmetic_v<T>, int64_t, int32_t>;\r\n    using pointer         = counting_ptr<T, difference_type>;\r\n\r\n    inconsistent_difference_allocator() = default;\r\n\r\n    template <class U>\r\n    constexpr inconsistent_difference_allocator(inconsistent_difference_allocator<U>) noexcept {}\r\n\r\n    pointer allocate(size_type n) {\r\n        return pointer{allocator<T>{}.allocate(n)};\r\n    }\r\n\r\n    void deallocate(pointer p, size_type n) {\r\n        allocator<T>{}.deallocate(p.operator->(), n);\r\n    }\r\n\r\n    template <class U>\r\n    friend constexpr bool operator==(inconsistent_difference_allocator, inconsistent_difference_allocator<U>) noexcept {\r\n        return true;\r\n    }\r\n#if !_HAS_CXX20\r\n    template <class U>\r\n    friend constexpr bool operator!=(inconsistent_difference_allocator, inconsistent_difference_allocator<U>) noexcept {\r\n        return false;\r\n    }\r\n#endif // !_HAS_CXX20\r\n};\r\n\r\nvoid test_inconsistent_difference_types() {\r\n    {\r\n        deque<int, inconsistent_difference_allocator<int>> dq{3, 1, 4, 1, 5, 9};\r\n        dq.insert(dq.end(), {2, 6, 5, 3, 5, 8});\r\n    }\r\n    assert(counter == 0);\r\n\r\n    {\r\n        deque<int, inconsistent_difference_allocator<int>> dq(979, 323);\r\n        dq.insert(dq.begin(), 84, 62);\r\n        dq.erase(dq.begin() + 64, dq.begin() + 338);\r\n    }\r\n    assert(counter == 0);\r\n}\r\n\r\n// Also test GH-4954: Endless loop in deque::shrink_to_fit()\r\nvoid test_gh_4954() {\r\n    deque<int> qu;\r\n    mt19937_64 mteng;\r\n\r\n    for (int i = 0; i < 256; ++i) {\r\n        const auto push_count = static_cast<size_t>((mteng() & 32767U) + 1);\r\n        for (size_t j = 0; j < push_count; ++j) {\r\n            qu.push_back(0);\r\n        }\r\n\r\n        auto pop_count = static_cast<size_t>((mteng() & 32767U) + 1);\r\n        if (i % 100 == 0 || pop_count > qu.size()) {\r\n            pop_count = qu.size();\r\n        }\r\n        for (size_t j = 0; j < pop_count; ++j) {\r\n            qu.pop_front();\r\n        }\r\n        qu.shrink_to_fit();\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_gh_2769();\r\n    test_gh_3717();\r\n    test_gh_4954();\r\n    test_inconsistent_difference_types();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_002789_Hash_vec_Tidy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002789_Hash_vec_Tidy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <memory>\r\n#include <new>\r\n#include <unordered_set>\r\n\r\nusing namespace std;\r\n\r\n// Defend against regression of GH-2789, which bug resulted in deallocating\r\n// a nullptr when unordered_meow creation fails due to OOM on the first call\r\n// to `_Hash_vec::_Assign_grow`. (This test relies on counting the number of\r\n// allocations to inject a failure in the right spot, so it's inherently\r\n// fragile.)\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\nstatic size_t alloc_count = 3;\r\n#else\r\nstatic size_t alloc_count = 1;\r\n#endif\r\n\r\ntemplate <class T>\r\nstruct countdown_alloc {\r\n    using value_type = T;\r\n\r\n    countdown_alloc() = default;\r\n    template <class U>\r\n    countdown_alloc(const countdown_alloc<U>&) {}\r\n\r\n    T* allocate(const size_t n) {\r\n        if (n == 0) { // allocate never returns nullptr...\r\n            return allocator<T>{}.allocate(1);\r\n        } else if (alloc_count > 0) {\r\n            --alloc_count;\r\n            return allocator<T>{}.allocate(n);\r\n        }\r\n\r\n        throw bad_alloc{};\r\n    }\r\n\r\n    void deallocate(T* const p, const size_t n) {\r\n        assert(p != nullptr); // ... so deallocate need not tolerate nullptr.\r\n        if (n == 0) {\r\n            allocator<T>{}.deallocate(p, 1);\r\n        } else {\r\n            allocator<T>{}.deallocate(p, n);\r\n        }\r\n    }\r\n\r\n    template <class B>\r\n    friend bool operator==(const countdown_alloc&, const countdown_alloc<B>&) noexcept {\r\n        return true;\r\n    }\r\n    template <class B>\r\n    friend bool operator!=(const countdown_alloc&, const countdown_alloc<B>&) noexcept {\r\n        return false;\r\n    }\r\n};\r\n\r\nint main() {\r\n    try {\r\n        (void) unordered_set<int, hash<int>, equal_to<int>, countdown_alloc<int>>{};\r\n        assert(false);\r\n    } catch (const bad_alloc&) {\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_002885_stable_sort_difference_type/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002885_stable_sort_difference_type/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <ranges>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nconstexpr auto pred = [](int i) { return i <= 42; };\r\n\r\ntemplate <class I>\r\nvoid test_iota_transform() {\r\n    constexpr int orig[]{42, 1729};\r\n    int a[]{42, 1729};\r\n    auto vw = views::iota(I{}, static_cast<I>(ranges::size(a)))\r\n            | views::transform([&a](I i) -> auto& { return a[static_cast<size_t>(i)]; });\r\n\r\n    static_assert(three_way_comparable<ranges::iterator_t<ranges::iota_view<I>>>); // TRANSITION, /permissive\r\n\r\n    ranges::stable_sort(vw);\r\n    assert(ranges::equal(a, orig));\r\n\r\n    ranges::stable_sort(vw.begin(), vw.end());\r\n    assert(ranges::equal(a, orig));\r\n\r\n    ranges::inplace_merge(vw, ranges::next(vw.begin()));\r\n    assert(ranges::equal(a, orig));\r\n    ranges::inplace_merge(vw.begin(), ranges::next(vw.begin()), vw.end());\r\n    assert(ranges::equal(a, orig));\r\n\r\n    ranges::stable_partition(vw, pred);\r\n    assert(ranges::equal(a, orig));\r\n    ranges::stable_partition(vw.begin(), vw.end(), pred);\r\n    assert(ranges::equal(a, orig));\r\n}\r\n\r\nvoid test_iota_transform_all() {\r\n    test_iota_transform<signed char>();\r\n    test_iota_transform<short>();\r\n    test_iota_transform<int>();\r\n    test_iota_transform<long>();\r\n    test_iota_transform<long long>();\r\n\r\n    test_iota_transform<unsigned char>();\r\n    test_iota_transform<unsigned short>();\r\n    test_iota_transform<unsigned int>();\r\n    test_iota_transform<unsigned long>();\r\n    test_iota_transform<unsigned long long>();\r\n\r\n    test_iota_transform<char>();\r\n#ifdef __cpp_char8_t\r\n    test_iota_transform<char8_t>();\r\n#endif // defined(__cpp_char8_t)\r\n    test_iota_transform<char16_t>();\r\n    test_iota_transform<char32_t>();\r\n    test_iota_transform<wchar_t>();\r\n}\r\n\r\ntemplate <class I>\r\nvoid test_redifference() {\r\n    constexpr int orig[]{42, 1729};\r\n    int a[]{42, 1729};\r\n    auto vw = test::make_redifference_subrange<I>(a);\r\n\r\n    ranges::stable_sort(vw);\r\n    assert(ranges::equal(a, orig));\r\n\r\n    ranges::stable_sort(vw.begin(), vw.end());\r\n    assert(ranges::equal(a, orig));\r\n\r\n    ranges::inplace_merge(vw, ranges::next(vw.begin()));\r\n    assert(ranges::equal(a, orig));\r\n    ranges::inplace_merge(vw.begin(), ranges::next(vw.begin()), vw.end());\r\n    assert(ranges::equal(a, orig));\r\n\r\n    ranges::stable_partition(vw, pred);\r\n    assert(ranges::equal(a, orig));\r\n    ranges::stable_partition(vw.begin(), vw.end(), pred);\r\n    assert(ranges::equal(a, orig));\r\n}\r\n\r\nvoid test_redifference_all() {\r\n    test_redifference<signed char>();\r\n    test_redifference<short>();\r\n    test_redifference<int>();\r\n    test_redifference<long>();\r\n    test_redifference<long long>();\r\n    test_redifference<_Signed128>();\r\n}\r\n\r\nint main() {\r\n    test_iota_transform_all();\r\n    test_redifference_all();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_002989_nothrow_unwrappable/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002989_nothrow_unwrappable/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <list>\r\n#include <type_traits>\r\n#include <vector>\r\n#include <xutility>\r\n\r\n#if _HAS_CXX17\r\n#include <filesystem>\r\n#endif\r\n\r\n#if _HAS_CXX20\r\n#include <ranges>\r\n#endif\r\n\r\nusing namespace std;\r\n\r\n#if _HAS_CXX17\r\nusing filesystem::path;\r\n#endif\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nstruct Predicate {\r\n    template <class T>\r\n    bool operator()(const T&) const {\r\n        return true;\r\n    }\r\n};\r\n\r\ntemplate <class It, bool CopyUnwrapNothrow = true>\r\nvoid do_single_test() {\r\n    STATIC_ASSERT(_Unwrappable_v<It> == _Has_nothrow_unwrapped<It>);\r\n    STATIC_ASSERT(_Unwrappable_v<It> == _Has_nothrow_unwrapped<It&&>);\r\n    STATIC_ASSERT(noexcept(_Get_unwrapped(declval<It>())));\r\n\r\n    // !a || b is equivalent to a => b (a implies b)\r\n    // This is written this way to avoid `if constexpr` in C++14 mode.\r\n    STATIC_ASSERT(!_Unwrappable_v<It> || _Has_nothrow_unwrapped<const It&> == CopyUnwrapNothrow);\r\n    STATIC_ASSERT(!_Unwrappable_v<It> || _Has_nothrow_unwrapped<const It&&> == CopyUnwrapNothrow);\r\n    STATIC_ASSERT(noexcept(_Get_unwrapped(declval<const It&>())) == CopyUnwrapNothrow);\r\n    STATIC_ASSERT(noexcept(_Get_unwrapped(declval<const It&&>())) == CopyUnwrapNothrow);\r\n}\r\n\r\ntemplate <class It, bool CopyUnwrapNothrow = true>\r\nvoid do_full_test() {\r\n    do_single_test<It, CopyUnwrapNothrow>();\r\n    do_single_test<reverse_iterator<It>, CopyUnwrapNothrow>();\r\n    do_single_test<move_iterator<It>, CopyUnwrapNothrow>();\r\n\r\n#if _HAS_CXX20\r\n    using R = ranges::subrange<It, It>;\r\n\r\n    // TRANSITION, GH-2997\r\n    do_single_test<ranges::iterator_t<ranges::filter_view<R, Predicate>>, true>();\r\n    // TRANSITION, GH-2997\r\n    do_single_test<ranges::iterator_t<ranges::transform_view<R, Predicate>>, true>();\r\n    if constexpr (bidirectional_iterator<It>) {\r\n        do_single_test<ranges::iterator_t<ranges::reverse_view<R>>, CopyUnwrapNothrow>();\r\n    }\r\n#endif // _HAS_CXX20\r\n}\r\n\r\nstruct BidiIterUnwrapThrowing : vector<int>::iterator {\r\n    using Base = vector<int>::iterator;\r\n\r\n    using Base::Base;\r\n\r\n    using iterator_concept  = bidirectional_iterator_tag;\r\n    using iterator_category = bidirectional_iterator_tag;\r\n\r\n    BidiIterUnwrapThrowing& operator++() {\r\n        Base::operator++();\r\n        return *this;\r\n    }\r\n    BidiIterUnwrapThrowing operator++(int) {\r\n        auto res = *this;\r\n        Base::operator++();\r\n        return res;\r\n    }\r\n    BidiIterUnwrapThrowing& operator--() {\r\n        Base::operator--();\r\n        return *this;\r\n    }\r\n    BidiIterUnwrapThrowing operator--(int) {\r\n        auto res = *this;\r\n        Base::operator--();\r\n        return res;\r\n    }\r\n\r\n    using _Prevent_inheriting_unwrap = BidiIterUnwrapThrowing;\r\n\r\n    int* _Unwrapped() const& noexcept(false) {\r\n        return Base::_Unwrapped();\r\n    }\r\n    int* _Unwrapped() && noexcept {\r\n        return move(*this).Base::_Unwrapped();\r\n    }\r\n\r\n    void _Seek_to(int* p) & noexcept {\r\n        Base::_Seek_to(p);\r\n    }\r\n};\r\n\r\nint main() {\r\n    do_single_test<int>();\r\n    do_full_test<int*>();\r\n    do_single_test<int[]>();\r\n\r\n    do_full_test<vector<int>::iterator>();\r\n    do_full_test<vector<int>::const_iterator>();\r\n    do_full_test<list<int>::iterator>();\r\n    do_full_test<list<int>::const_iterator>();\r\n\r\n    do_full_test<BidiIterUnwrapThrowing, false>();\r\n#if _HAS_CXX17\r\n    do_full_test<path::iterator, false>();\r\n#endif\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_002992_unwrappable_iter_sent_pairs/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_002992_unwrappable_iter_sent_pairs/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <deque>\r\n#include <filesystem>\r\n#include <forward_list>\r\n#include <list>\r\n#include <map>\r\n#include <set>\r\n#include <string>\r\n#include <string_view>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <vector>\r\n#include <xutility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Rng>\r\nvoid test_algorithms(Rng& rng) {\r\n    auto dist = ranges::distance(rng);\r\n    vector<ranges::range_value_t<Rng>> other(static_cast<size_t>(dist));\r\n\r\n    (void) ranges::mismatch(rng.begin(), rng.end(), other.begin(), other.end());\r\n    (void) ranges::mismatch(other.begin(), other.end(), rng.begin(), rng.end());\r\n    (void) ranges::mismatch(rng, other);\r\n    (void) ranges::mismatch(other, rng);\r\n\r\n    using range_ref_t   = ranges::range_reference_t<Rng>;\r\n    using range_deref_t = remove_reference_t<range_ref_t>;\r\n    if constexpr (is_lvalue_reference_v<range_ref_t> && !is_const_v<range_deref_t> && !is_volatile_v<range_deref_t>\r\n                  && ranges::forward_range<Rng>) {\r\n        (void) ranges::uninitialized_copy(rng.begin(), rng.end(), other.begin(), other.end());\r\n        (void) ranges::uninitialized_copy(other.begin(), other.end(), rng.begin(), rng.end());\r\n        (void) ranges::uninitialized_copy(rng, other);\r\n        (void) ranges::uninitialized_copy(other, rng);\r\n\r\n        (void) ranges::uninitialized_copy_n(rng.begin(), dist, other.begin(), other.end());\r\n        (void) ranges::uninitialized_copy_n(other.begin(), dist, rng.begin(), rng.end());\r\n    }\r\n}\r\n\r\ntemplate <class Rng>\r\nvoid test_unwrappable_range() {\r\n    using It = ranges::iterator_t<Rng>;\r\n    using Se = ranges::sentinel_t<Rng>;\r\n\r\n    constexpr bool is_const_unwrappable = requires(const It& ci) { ci._Unwrapped(); };\r\n\r\n    if constexpr (is_const_unwrappable) {\r\n        static_assert(same_as<decltype(declval<It>()._Unwrapped()), decltype(declval<const It&>()._Unwrapped())>);\r\n    }\r\n\r\n    static_assert(ranges::_Unwrappable_sentinel_for<Se, It>);\r\n\r\n    static_assert(same_as<ranges::_Unwrap_iter_t<It, Se>, decltype(declval<It>()._Unwrapped())>);\r\n    if constexpr (is_const_unwrappable) {\r\n        static_assert(same_as<ranges::_Unwrap_iter_t<const It&, Se>, decltype(declval<It>()._Unwrapped())>);\r\n    }\r\n\r\n    static_assert(same_as<ranges::_Unwrap_sent_t<Se, It>, decltype(declval<Se>()._Unwrapped())>);\r\n    static_assert(same_as<ranges::_Unwrap_sent_t<const Se&, It>, decltype(declval<Se>()._Unwrapped())>);\r\n\r\n    static_assert(noexcept(ranges::_Unwrap_iter<Se>(declval<It>())) == noexcept(declval<It>()._Unwrapped()));\r\n    if constexpr (is_const_unwrappable) {\r\n        static_assert(\r\n            noexcept(ranges::_Unwrap_iter<Se>(declval<const It&>())) == noexcept(declval<const It&>()._Unwrapped()));\r\n    }\r\n\r\n    static_assert(noexcept(ranges::_Unwrap_sent<It>(declval<Se>())) == noexcept(declval<Se>()._Unwrapped()));\r\n    static_assert(\r\n        noexcept(ranges::_Unwrap_sent<It>(declval<const Se&>())) == noexcept(declval<const Se&>()._Unwrapped()));\r\n\r\n    // instantiate without calling\r\n    void (*p)(Rng&) = test_algorithms<Rng>;\r\n    (void) p;\r\n}\r\n\r\ntemplate <class Rng>\r\nvoid test_not_unwrappable_range() {\r\n    using It = ranges::iterator_t<Rng>;\r\n    using Se = ranges::sentinel_t<Rng>;\r\n\r\n    static_assert(!ranges::_Unwrappable_sentinel_for<Se, It>);\r\n    static_assert(same_as<ranges::_Unwrap_iter_t<It, Se>, It>);\r\n    static_assert(same_as<ranges::_Unwrap_iter_t<const It&, Se>, It>);\r\n\r\n    static_assert(same_as<ranges::_Unwrap_sent_t<Se, It>, Se>);\r\n    static_assert(same_as<ranges::_Unwrap_sent_t<const Se&, It>, Se>);\r\n\r\n    static_assert(noexcept(ranges::_Unwrap_iter<Se>(declval<It>())));\r\n    static_assert(noexcept(ranges::_Unwrap_iter<Se>(declval<const It&>())));\r\n\r\n    static_assert(noexcept(ranges::_Unwrap_sent<It>(declval<Se>())));\r\n    static_assert(noexcept(ranges::_Unwrap_sent<It>(declval<const Se&>())));\r\n\r\n    // instantiate without calling\r\n    void (*p)(Rng&) = test_algorithms<Rng>;\r\n    (void) p;\r\n}\r\n\r\ntemplate <class Rng>\r\nvoid test_classic_range() {\r\n    test_unwrappable_range<Rng>();\r\n    test_unwrappable_range<const Rng>();\r\n}\r\nvoid test_classic_ranges() {\r\n    test_classic_range<string>();\r\n    test_classic_range<wstring>();\r\n\r\n    test_classic_range<array<int, 32>>();\r\n    test_classic_range<deque<int>>();\r\n    test_classic_range<forward_list<int>>();\r\n    test_classic_range<list<int>>();\r\n    test_classic_range<set<int>>();\r\n    test_classic_range<map<int, int>>();\r\n    test_classic_range<unordered_set<int>>();\r\n    test_classic_range<unordered_map<int, int>>();\r\n    test_classic_range<vector<int>>();\r\n    test_classic_range<filesystem::path>();\r\n\r\n#if _HAS_CXX23\r\n    test_classic_range<ranges::as_rvalue_view<string_view>>();\r\n#endif\r\n}\r\n\r\nstruct Nontrivial {\r\n    Nontrivial() {}\r\n    Nontrivial(const Nontrivial&) {}\r\n    Nontrivial(Nontrivial&&) noexcept {}\r\n    Nontrivial& operator=(const Nontrivial&) {\r\n        return *this;\r\n    }\r\n    Nontrivial& operator=(Nontrivial&&) noexcept {\r\n        return *this;\r\n    }\r\n    ~Nontrivial() {}\r\n\r\n    bool operator==(const Nontrivial&) const noexcept = default;\r\n};\r\n\r\ntemplate <class Iter, class Sent>\r\nvoid test_unwrappable_views() {\r\n    using R = ranges::subrange<Iter, Sent>;\r\n\r\n    test_unwrappable_range<R>();\r\n\r\n#if _HAS_CXX23\r\n    test_unwrappable_range<ranges::as_rvalue_view<R>>();\r\n#endif\r\n}\r\n\r\ntemplate <class Iter, class Sent>\r\nvoid test_not_unwrappable_views() {\r\n    using R = ranges::subrange<Iter, Sent>;\r\n\r\n    test_not_unwrappable_range<R>();\r\n\r\n#if _HAS_CXX23\r\n    test_not_unwrappable_range<ranges::as_rvalue_view<R>>();\r\n#endif\r\n}\r\n\r\nvoid test_both_unwrappable() {\r\n    using test::contiguous, test::random, test::bidi, test::fwd, test::input;\r\n\r\n    using sent_int = test::sentinel<int>;\r\n    using sent_nt  = test::sentinel<Nontrivial>;\r\n\r\n    test_unwrappable_views<test::iterator<contiguous, int>, sent_int>();\r\n    test_unwrappable_views<test::iterator<random, int>, sent_int>();\r\n    test_unwrappable_views<test::iterator<bidi, int>, sent_int>();\r\n    test_unwrappable_views<test::iterator<fwd, int>, sent_int>();\r\n    test_unwrappable_views<test::iterator<input, int>, sent_int>();\r\n\r\n    test_unwrappable_views<test::iterator<contiguous, Nontrivial>, sent_nt>();\r\n    test_unwrappable_views<test::iterator<random, Nontrivial>, sent_nt>();\r\n    test_unwrappable_views<test::iterator<bidi, Nontrivial>, sent_nt>();\r\n    test_unwrappable_views<test::iterator<fwd, Nontrivial>, sent_nt>();\r\n    test_unwrappable_views<test::iterator<input, Nontrivial>, sent_nt>();\r\n}\r\n\r\nvoid test_iter_unwrappable() {\r\n    using test::contiguous, test::random, test::bidi, test::fwd, test::input;\r\n\r\n    using sent_int = test::sentinel<int, test::WrappedState::ignorant>;\r\n    using sent_nt  = test::sentinel<Nontrivial, test::WrappedState::ignorant>;\r\n\r\n    test_not_unwrappable_views<test::iterator<contiguous, int>, sent_int>();\r\n    test_not_unwrappable_views<test::iterator<random, int>, sent_int>();\r\n    test_not_unwrappable_views<test::iterator<bidi, int>, sent_int>();\r\n    test_not_unwrappable_views<test::iterator<fwd, int>, sent_int>();\r\n    test_not_unwrappable_views<test::iterator<input, int>, sent_int>();\r\n\r\n    test_not_unwrappable_views<test::iterator<contiguous, Nontrivial>, sent_nt>();\r\n    test_not_unwrappable_views<test::iterator<random, Nontrivial>, sent_nt>();\r\n    test_not_unwrappable_views<test::iterator<bidi, Nontrivial>, sent_nt>();\r\n    test_not_unwrappable_views<test::iterator<fwd, Nontrivial>, sent_nt>();\r\n    test_not_unwrappable_views<test::iterator<input, Nontrivial>, sent_nt>();\r\n}\r\n\r\nvoid test_sent_unwrappable() {\r\n    using test::contiguous, test::random, test::bidi, test::fwd, test::input;\r\n\r\n    using sent_int = test::sentinel<int>;\r\n    using sent_nt  = test::sentinel<Nontrivial>;\r\n\r\n    test_not_unwrappable_views<test::iterator<contiguous, int>::unwrapping_ignorant, sent_int>();\r\n    test_not_unwrappable_views<test::iterator<random, int>::unwrapping_ignorant, sent_int>();\r\n    test_not_unwrappable_views<test::iterator<bidi, int>::unwrapping_ignorant, sent_int>();\r\n    test_not_unwrappable_views<test::iterator<fwd, int>::unwrapping_ignorant, sent_int>();\r\n    test_not_unwrappable_views<test::iterator<input, int>::unwrapping_ignorant, sent_int>();\r\n\r\n    test_not_unwrappable_views<test::iterator<contiguous, Nontrivial>::unwrapping_ignorant, sent_nt>();\r\n    test_not_unwrappable_views<test::iterator<random, Nontrivial>::unwrapping_ignorant, sent_nt>();\r\n    test_not_unwrappable_views<test::iterator<bidi, Nontrivial>::unwrapping_ignorant, sent_nt>();\r\n    test_not_unwrappable_views<test::iterator<fwd, Nontrivial>::unwrapping_ignorant, sent_nt>();\r\n    test_not_unwrappable_views<test::iterator<input, Nontrivial>::unwrapping_ignorant, sent_nt>();\r\n}\r\n\r\nvoid test_neither_unwrappable() {\r\n    using test::contiguous, test::random, test::bidi, test::fwd, test::input;\r\n\r\n    using sent_int = test::sentinel<int, test::WrappedState::ignorant>;\r\n    using sent_nt  = test::sentinel<Nontrivial, test::WrappedState::ignorant>;\r\n\r\n    test_not_unwrappable_views<test::iterator<contiguous, int>::unwrapping_ignorant, sent_int>();\r\n    test_not_unwrappable_views<test::iterator<random, int>::unwrapping_ignorant, sent_int>();\r\n    test_not_unwrappable_views<test::iterator<bidi, int>::unwrapping_ignorant, sent_int>();\r\n    test_not_unwrappable_views<test::iterator<fwd, int>::unwrapping_ignorant, sent_int>();\r\n    test_not_unwrappable_views<test::iterator<input, int>::unwrapping_ignorant, sent_int>();\r\n\r\n    test_not_unwrappable_views<test::iterator<contiguous, Nontrivial>::unwrapping_ignorant, sent_nt>();\r\n    test_not_unwrappable_views<test::iterator<random, Nontrivial>::unwrapping_ignorant, sent_nt>();\r\n    test_not_unwrappable_views<test::iterator<bidi, Nontrivial>::unwrapping_ignorant, sent_nt>();\r\n    test_not_unwrappable_views<test::iterator<fwd, Nontrivial>::unwrapping_ignorant, sent_nt>();\r\n    test_not_unwrappable_views<test::iterator<input, Nontrivial>::unwrapping_ignorant, sent_nt>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_003003_format_decimal_point/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_003003_format_decimal_point/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <format>\r\n\r\nint main() {\r\n    assert(std::format(\"{:#.0}\", 0.0) == \"0.\");\r\n    assert(std::format(\"{:#.1}\", 0.0) == \"0.\");\r\n    assert(std::format(\"{:#.2}\", 0.0) == \"0.\");\r\n\r\n    assert(std::format(\"{:#.0}\", 1200.0) == \"1.e+03\");\r\n    assert(std::format(\"{:#.1}\", 1200.0) == \"1.e+03\");\r\n    assert(std::format(\"{:#.2}\", 1200.0) == \"1.2e+03\");\r\n    assert(std::format(\"{:#.3}\", 1200.0) == \"1.2e+03\");\r\n    assert(std::format(\"{:#.4}\", 1200.0) == \"1200.\");\r\n    assert(std::format(\"{:#.5}\", 1200.0) == \"1200.\");\r\n    assert(std::format(\"{:#.6}\", 1200.0) == \"1200.\");\r\n\r\n    assert(std::format(\"{:#.0}\", 0.123) == \"0.1\");\r\n    assert(std::format(\"{:#.1}\", 0.123) == \"0.1\");\r\n    assert(std::format(\"{:#.2}\", 0.123) == \"0.12\");\r\n    assert(std::format(\"{:#.3}\", 0.123) == \"0.123\");\r\n    assert(std::format(\"{:#.4}\", 0.123) == \"0.123\");\r\n    assert(std::format(\"{:#.5}\", 0.123) == \"0.123\");\r\n\r\n    assert(std::format(\"{:#.0}\", 10.1) == \"1.e+01\");\r\n    assert(std::format(\"{:#.1}\", 10.1) == \"1.e+01\");\r\n    assert(std::format(\"{:#.2}\", 10.1) == \"10.\");\r\n    assert(std::format(\"{:#.3}\", 10.1) == \"10.1\");\r\n    assert(std::format(\"{:#.4}\", 10.1) == \"10.1\");\r\n    assert(std::format(\"{:#.5}\", 10.1) == \"10.1\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_003022_substr_allocator/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_003022_substr_allocator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <memory>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\n#if _HAS_CXX20\r\n#define CONSTEXPR20 constexpr\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n#define CONSTEXPR20 inline\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n#define TEST_ASSERT(...) assert((__VA_ARGS__))\r\n\r\n#ifdef __cpp_char8_t\r\nusing char8_type = char8_t;\r\n#else // ^^^ defined(__cpp_char8_t) / !defined(__cpp_char8_t) vvv\r\nusing char8_type = unsigned char;\r\n#endif // ^^^ !defined(__cpp_char8_t) ^^^\r\n\r\ntemplate <class CharT, enable_if_t<is_same_v<CharT, char>, int> = 0>\r\nconstexpr auto statically_widen_impl(\r\n    const char* s, const char8_type*, const char16_t*, const char32_t*, const wchar_t*) noexcept {\r\n    return s;\r\n}\r\n\r\ntemplate <class CharT, enable_if_t<is_same_v<CharT, char8_type>, int> = 0>\r\nconstexpr auto statically_widen_impl(\r\n    const char*, const char8_type* s8, const char16_t*, const char32_t*, const wchar_t*) noexcept {\r\n    return s8;\r\n}\r\n\r\ntemplate <class CharT, enable_if_t<is_same_v<CharT, char16_t>, int> = 0>\r\nconstexpr auto statically_widen_impl(\r\n    const char*, const char8_type*, const char16_t* s16, const char32_t*, const wchar_t*) noexcept {\r\n    return s16;\r\n}\r\n\r\ntemplate <class CharT, enable_if_t<is_same_v<CharT, char32_t>, int> = 0>\r\nconstexpr auto statically_widen_impl(\r\n    const char*, const char8_type*, const char16_t*, const char32_t* s32, const wchar_t*) noexcept {\r\n    return s32;\r\n}\r\n\r\ntemplate <class CharT, enable_if_t<is_same_v<CharT, wchar_t>, int> = 0>\r\nconstexpr auto statically_widen_impl(\r\n    const char*, const char8_type*, const char16_t*, const char32_t*, const wchar_t* sw) noexcept {\r\n    return sw;\r\n}\r\n\r\n#ifdef __cpp_char8_t\r\n#define STATICALLY_WIDEN(CT, S) (statically_widen_impl<CT>(S, u8##S, u##S, U##S, L##S))\r\n#else // ^^^ defined(__cpp_char8_t) / !defined(__cpp_char8_t) vvv\r\n#define STATICALLY_WIDEN(CT, S) (statically_widen_impl<CT>(S, nullptr, u##S, U##S, L##S))\r\n#endif // ^^^ !defined(__cpp_char8_t) ^^^\r\n\r\ntemplate <class T>\r\nclass payloaded_allocator {\r\nprivate:\r\n    int payload_ = 0;\r\n\r\npublic:\r\n    using value_type                             = T;\r\n    using size_type                              = size_t;\r\n    using difference_type                        = ptrdiff_t;\r\n    using propagate_on_container_move_assignment = true_type;\r\n    using propagate_on_container_swap            = true_type;\r\n\r\n    payloaded_allocator() = default;\r\n    constexpr explicit payloaded_allocator(int payload) noexcept : payload_{payload} {}\r\n\r\n    template <class U>\r\n    constexpr payloaded_allocator(const payloaded_allocator<U>& other) noexcept : payload_{other.get_payload()} {}\r\n\r\n    template <class U>\r\n    friend constexpr bool operator==(const payloaded_allocator& lhs, const payloaded_allocator<U>& rhs) noexcept {\r\n        return lhs.get_payload() == rhs.get_payload();\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    template <class U>\r\n    friend constexpr bool operator!=(const payloaded_allocator& lhs, const payloaded_allocator<U>& rhs) noexcept {\r\n        return !(lhs == rhs);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\n    CONSTEXPR20 T* allocate(const size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    CONSTEXPR20 void deallocate(T* const p, const size_t n) {\r\n        return allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    constexpr int get_payload() const noexcept {\r\n        return payload_;\r\n    }\r\n};\r\n\r\ntemplate <class CharT>\r\nCONSTEXPR20 bool test_substr_allocator() {\r\n    struct str_test_case {\r\n        const CharT* ntcts;\r\n        size_t offset;\r\n        size_t count;\r\n    };\r\n\r\n    constexpr str_test_case substring_test_cases[]{\r\n        {STATICALLY_WIDEN(CharT, \"nul\"), 1, 0},\r\n        {STATICALLY_WIDEN(CharT, \"str\"), 1, 2},\r\n        {STATICALLY_WIDEN(CharT, \"ful\"), 0, 3},\r\n        {STATICALLY_WIDEN(CharT, \"Empty\"), 4, 0},\r\n        {STATICALLY_WIDEN(CharT, \"Shorter\"), 5, 2},\r\n        {STATICALLY_WIDEN(CharT, \"Longer\"), 1, 5},\r\n        {STATICALLY_WIDEN(CharT, \"FullStr\"), 0, 7},\r\n        {STATICALLY_WIDEN(CharT, \"Empty substring\"), 12, 0},\r\n        {STATICALLY_WIDEN(CharT, \"Short substring\"), 9, 3},\r\n        {STATICALLY_WIDEN(CharT, \"Mid substring\"), 7, 5},\r\n        {STATICALLY_WIDEN(CharT, \"Longer string\"), 3, 9},\r\n        {STATICALLY_WIDEN(CharT, \"Maximal SSO len\"), 0, 15},\r\n        {STATICALLY_WIDEN(CharT, \"Take an empty substring from a long string\"), 35, 0},\r\n        {STATICALLY_WIDEN(CharT, \"Take a short substring from a long string\"), 21, 2},\r\n        {STATICALLY_WIDEN(CharT, \"Take some substring from a long string\"), 15, 6},\r\n        {STATICALLY_WIDEN(CharT, \"Take a longer substring from a long string\"), 20, 13},\r\n        {STATICALLY_WIDEN(CharT, \"Take a quite longer substring...\"), 10, 20},\r\n        {STATICALLY_WIDEN(CharT, \"Take the whole long string as a substring\"), 0, 41},\r\n    };\r\n\r\n    using string_type = basic_string<CharT, char_traits<CharT>, payloaded_allocator<CharT>>;\r\n\r\n    payloaded_allocator<CharT> myator{42};\r\n\r\n    for (const auto& test_case : substring_test_cases) {\r\n        string_type full_str{test_case.ntcts, myator};\r\n\r\n        const auto offset = test_case.offset;\r\n        const auto count  = test_case.count;\r\n\r\n        // Test const lvalue overloads\r\n        TEST_ASSERT(string_type{full_str, offset, count}.get_allocator().get_payload() == 0);\r\n        TEST_ASSERT(string_type{full_str, offset}.get_allocator().get_payload() == 0);\r\n\r\n        TEST_ASSERT(full_str.substr(offset, count).get_allocator().get_payload() == 0);\r\n\r\n        TEST_ASSERT(string_type{full_str, offset, count, myator}.get_allocator().get_payload() == 42);\r\n        TEST_ASSERT(string_type{full_str, offset, myator}.get_allocator().get_payload() == 42);\r\n\r\n        // Test non-const rvalue overloads\r\n        TEST_ASSERT(string_type{string_type{full_str}, offset, count}.get_allocator().get_payload() == 0);\r\n        TEST_ASSERT(string_type{string_type{full_str}, offset}.get_allocator().get_payload() == 0);\r\n\r\n        TEST_ASSERT(string_type{full_str}.substr(offset, count).get_allocator().get_payload() == 0);\r\n\r\n        TEST_ASSERT(string_type{string_type{full_str}, offset, count, myator}.get_allocator().get_payload() == 42);\r\n        TEST_ASSERT(string_type{string_type{full_str}, offset, myator}.get_allocator().get_payload() == 42);\r\n    }\r\n\r\n    // Also test well-formedness change before/after P2438R2\r\n    struct ambiguator {\r\n        string_type str;\r\n\r\n        operator const string_type&() {\r\n            return str;\r\n        }\r\n\r\n        operator string_type&&() {\r\n            return move(str);\r\n        }\r\n    };\r\n\r\n#if _HAS_CXX23\r\n#ifndef __EDG__ // TRANSITION, VSO-1601179\r\n    static_assert(!is_constructible_v<string_type, ambiguator&, size_t, size_t>, \"This should be ambiguous\");\r\n#endif // ^^^ no workaround ^^^\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n    static_assert(is_constructible_v<string_type, ambiguator&, size_t, size_t>, \"This should be unambiguous\");\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\n    return true;\r\n}\r\n\r\n#if _HAS_CXX20\r\nstatic_assert(test_substr_allocator<char>());\r\n#ifdef __cpp_char8_t\r\nstatic_assert(test_substr_allocator<char8_t>());\r\n#endif // __cpp_char8_t\r\nstatic_assert(test_substr_allocator<char16_t>());\r\nstatic_assert(test_substr_allocator<char32_t>());\r\nstatic_assert(test_substr_allocator<wchar_t>());\r\n#endif // _HAS_CXX20\r\n\r\nint main() {\r\n    (void) test_substr_allocator<char>();\r\n#ifdef __cpp_char8_t\r\n    (void) test_substr_allocator<char8_t>();\r\n#endif // __cpp_char8_t\r\n    (void) test_substr_allocator<char16_t>();\r\n    (void) test_substr_allocator<char32_t>();\r\n    (void) test_substr_allocator<wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_003105_piecewise_densities/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_003105_piecewise_densities/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <random>\r\n\r\nvoid test() {\r\n    // GH-3105 \"<random>: std::piecewise_constant_distribution<float>::densities() gives warning C4244\"\r\n    (void) std::piecewise_constant_distribution<float>{}.densities();\r\n\r\n    // Also affected:\r\n    (void) std::piecewise_linear_distribution<float>{}.densities();\r\n\r\n    // Not affected, but tested just in case:\r\n    (void) std::piecewise_constant_distribution<float>{}.intervals();\r\n    (void) std::piecewise_linear_distribution<float>{}.intervals();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_003119_error_category_ctor/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_003119_error_category_ctor/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <string>\r\n#include <system_error>\r\n\r\nusing namespace std;\r\n\r\nstruct meow_category : error_category {\r\n    constexpr meow_category() = default;\r\n\r\n    const char* name() const noexcept override {\r\n        return \"meow\";\r\n    }\r\n\r\n    string message(int) const override {\r\n        return \"meow\";\r\n    }\r\n\r\n    // TRANSITION: As of Boost 1.80.0, boost::system::detail::std_category assigns to _Addr.\r\n    void test_workaround_for_non_standard_code(const unsigned int val) noexcept {\r\n        _Addr = val;\r\n    }\r\n};\r\n\r\n#if _HAS_CXX20\r\n[[maybe_unused]] constexpr meow_category meowing_cat;\r\n#endif // _HAS_CXX20\r\n"
  },
  {
    "path": "tests/std/tests/GH_003246_cmath_narrowing/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_003246_cmath_narrowing/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cmath>\r\n\r\n// Ensure the compiler doesn't warn about narrowing long double to double in <cmath> GENERIC_MATH2 templates\r\n#define TEST(meow)                           \\\r\n    long double test_##meow(long double x) { \\\r\n        return std::meow(x, 1);              \\\r\n    }\r\n\r\nTEST(atan2)\r\nTEST(hypot)\r\nTEST(pow)\r\nTEST(fmod)\r\nTEST(remainder)\r\nTEST(copysign)\r\nTEST(nextafter)\r\nTEST(fdim)\r\nTEST(fmax)\r\nTEST(fmin)\r\n"
  },
  {
    "path": "tests/std/tests/GH_003570_allocate_at_least/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_003570_allocate_at_least/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <functional>\r\n#include <memory>\r\n#include <new>\r\n#include <numeric>\r\n#include <sstream>\r\n#include <string>\r\n#include <syncstream>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nstruct signaller {\r\n    [[nodiscard]] bool consume() {\r\n        return exchange(is_set, false);\r\n    }\r\n\r\n    void set() {\r\n        is_set = true;\r\n    }\r\n\r\nprivate:\r\n    bool is_set = false;\r\n};\r\n\r\nsignaller allocate_at_least_signal;\r\n\r\ntemplate <class T>\r\nstruct signalling_allocator {\r\n    using value_type = T;\r\n\r\n    signalling_allocator() = default;\r\n\r\n    template <typename U>\r\n    signalling_allocator(const signalling_allocator<U>&) {}\r\n\r\n    T* allocate(size_t count) {\r\n        T* const ptr = static_cast<T*>(malloc(count * sizeof(T)));\r\n        if (ptr) {\r\n            return ptr;\r\n        }\r\n\r\n        throw bad_alloc();\r\n    }\r\n\r\n    allocation_result<T*> allocate_at_least(size_t count) {\r\n        allocate_at_least_signal.set();\r\n        return {allocate(count * 2 + 1), count * 2 + 1};\r\n    }\r\n\r\n    void deallocate(T* ptr, size_t) noexcept {\r\n        free(ptr);\r\n    }\r\n\r\n    friend bool operator==(const signalling_allocator&, const signalling_allocator&) = default;\r\n};\r\n\r\ntemplate <typename T>\r\nvoid test_container() {\r\n    T container;\r\n    const size_t reserve_count = container.capacity() + 100;\r\n    container.reserve(reserve_count);\r\n    assert(allocate_at_least_signal.consume());\r\n    assert(container.capacity() >= reserve_count * 2);\r\n    assert(container.size() == 0);\r\n}\r\n\r\nvoid test_deque() {\r\n    deque<size_t, signalling_allocator<size_t>> d;\r\n    for (size_t i = 0; i < 100; ++i) {\r\n        d.push_back(i);\r\n    }\r\n    assert(allocate_at_least_signal.consume());\r\n    assert(d.size() == 100);\r\n    for (size_t i = 0; i < 100; ++i) {\r\n        assert(d[i] == i);\r\n    }\r\n}\r\n\r\nvoid test_stream_overflow(auto& stream) {\r\n    stream << \"my very long string that is indeed very long in order to make sure \"\r\n           << \"that overflow is called, hopefully calling allocate_at_least in return\";\r\n    assert(allocate_at_least_signal.consume());\r\n}\r\n\r\nvoid test_sstream() {\r\n    basic_stringstream<char, char_traits<char>, signalling_allocator<char>> ss;\r\n    ss.str(\"my_cool_string\");\r\n    assert(allocate_at_least_signal.consume());\r\n    test_stream_overflow(ss);\r\n}\r\n\r\nvoid test_syncstream() {\r\n    basic_syncbuf<char, char_traits<char>, signalling_allocator<char>> buf;\r\n    basic_osyncstream<char, char_traits<char>, signalling_allocator<char>> ss(&buf);\r\n    test_stream_overflow(ss);\r\n}\r\n\r\ntemplate <class T>\r\nstruct icky_allocator : allocator<T> {\r\n    template <class U>\r\n    struct rebind {\r\n        using other = icky_allocator<U>;\r\n    };\r\n\r\n    allocation_result<T*, size_t> allocate_at_least(size_t) {\r\n        // The initial implementation of this feature had a problem with (icky) allocators that\r\n        // publicly derive from std::allocator and implement allocate/deallocate. The STL would\r\n        // call allocate_at_least in the std::allocator base (which would then call std::allocator::allocate),\r\n        // and would then call deallocate in the derived class (hiding the base implementation), a terrible mismatch.\r\n        // We now detect public derivation from std::allocator and avoid using allocate_at_least in that case.\r\n        static_assert(false);\r\n    }\r\n};\r\n\r\nvoid test_inheriting_allocator() {\r\n    vector<int, icky_allocator<int>> vec{2, 1, 4, 7, 5, 6, 3, 8};\r\n    assert(accumulate(vec.begin(), vec.end(), 0, plus<>{}) == 36);\r\n}\r\n\r\n// Also test GH-3890, in which we incorrectly tried to use allocate_at_least from an inaccessible std::allocator\r\n// base due to an MSVC bug.\r\ntemplate <class T>\r\nstruct less_icky_allocator : private allocator<T> {\r\n    using value_type = T;\r\n\r\n    less_icky_allocator() = default;\r\n    template <class U>\r\n    less_icky_allocator(const less_icky_allocator<U>&) {}\r\n\r\n    T* allocate(size_t n) {\r\n        return allocator<T>::allocate(n);\r\n    }\r\n\r\n    void deallocate(T* ptr, size_t n) {\r\n        return allocator<T>::deallocate(ptr, n);\r\n    }\r\n\r\n    template <class U>\r\n    bool operator==(const less_icky_allocator<U>&) const {\r\n        return true;\r\n    }\r\n};\r\nstatic_assert(!std::_Should_allocate_at_least<less_icky_allocator<int>>);\r\n\r\nint main() {\r\n    test_deque();\r\n    test_container<basic_string<char, char_traits<char>, signalling_allocator<char>>>();\r\n    test_container<vector<int, signalling_allocator<int>>>();\r\n    test_sstream();\r\n    test_syncstream();\r\n    test_inheriting_allocator();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_003617_vectorized_meow_element/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\fast_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_003617_vectorized_meow_element/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// REQUIRES: x64\r\n\r\n#ifdef _M_X64\r\n\r\n#include <cstddef>\r\n#include <vector>\r\n\r\n#include <test_min_max_element_support.hpp>\r\n#include <test_vector_algorithms_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nvoid test_gh_3617() {\r\n    // Test GH-3617 \"<algorithm>: Silent bad codegen for vectorized meow_element() above 4 GB\".\r\n    constexpr size_t n = 0x4000'0010;\r\n\r\n    vector<int> v(n, 25);\r\n    v[n - 2] = 24;\r\n    v[n - 1] = 26;\r\n\r\n    test_case_min_max_element(v);\r\n}\r\n\r\nint main() {\r\n    run_tests_with_different_isa_levels([] { test_gh_3617(); });\r\n}\r\n#else // ^^^ x64 / other architectures vvv\r\nint main() {}\r\n#endif // ^^^ other architectures ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_003663_cast_contiguous_iterator_difference_type/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_003663_cast_contiguous_iterator_difference_type/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <iterator>\r\n\r\nclass ContiguousIterator {\r\npublic:\r\n    using value_type        = int;\r\n    using difference_type   = int;\r\n    using iterator_category = std::contiguous_iterator_tag;\r\n\r\n    value_type* operator->() const;\r\n    value_type& operator*() const;\r\n    value_type& operator[](difference_type) const;\r\n    ContiguousIterator& operator++();\r\n    ContiguousIterator operator++(int);\r\n    ContiguousIterator& operator--();\r\n    ContiguousIterator operator--(int);\r\n    ContiguousIterator& operator+=(difference_type);\r\n    ContiguousIterator& operator-=(difference_type);\r\n    friend auto operator<=>(ContiguousIterator, ContiguousIterator) = default;\r\n    friend difference_type operator-(ContiguousIterator, ContiguousIterator);\r\n    friend ContiguousIterator operator+(ContiguousIterator, difference_type);\r\n    friend ContiguousIterator operator-(ContiguousIterator, difference_type);\r\n    friend ContiguousIterator operator+(difference_type, ContiguousIterator);\r\n};\r\n\r\nstatic_assert(std::contiguous_iterator<ContiguousIterator>);\r\n\r\n// GH-3663 <algorithm>/<iterator>: contiguous iterators with non-ptrdiff_t difference types\r\nvoid test() {\r\n    int* p = nullptr;\r\n    std::copy(p, p, ContiguousIterator{});\r\n    std::sort(ContiguousIterator{}, ContiguousIterator{});\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_003676_format_large_hh_mm_ss_values/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_003676_format_large_hh_mm_ss_values/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <format>\r\n#include <iostream>\r\n#include <sstream>\r\n#include <string>\r\n\r\nusing namespace std;\r\nusing namespace chrono;\r\n\r\nvoid assert_equal(const auto& expected, const auto& value) {\r\n    if (expected == value) {\r\n        return;\r\n    }\r\n\r\n    cout << \"Expected: \" << expected << endl;\r\n    cout << \"Got:      \" << value << endl;\r\n    assert(false);\r\n}\r\n\r\ntemplate <typename R, typename P>\r\nvoid assert_duration_format_equal(const duration<R, P>& dur, const string& str) {\r\n    ostringstream oss;\r\n    oss << hh_mm_ss{dur};\r\n    assert_equal(str, oss.str());\r\n    assert_equal(str, format(\"{:%T}\", dur));\r\n}\r\n\r\ntemplate <typename R, typename P>\r\nvoid assert_duration_format_equal_positive(const duration<R, P>& dur, const string& str) {\r\n    assert_duration_format_equal(dur, str);\r\n    assert_duration_format_equal(-dur, '-' + str);\r\n}\r\n\r\nint main() {\r\n    assert_duration_format_equal(0ns, \"00:00:00.000000000\");\r\n    assert_duration_format_equal(-0h, \"00:00:00\");\r\n    assert_duration_format_equal(years{0}, \"00:00:00\");\r\n\r\n    assert_duration_format_equal_positive(3h, \"03:00:00\");\r\n    assert_duration_format_equal_positive(10h + 20min + 30s, \"10:20:30\");\r\n    assert_duration_format_equal_positive(days{3}, \"72:00:00\");\r\n    assert_duration_format_equal_positive(years{1}, \"8765:49:12\");\r\n    assert_duration_format_equal_positive(duration<float, days::period>{1.55f}, \"37:11:59\");\r\n    assert_duration_format_equal_positive(2ms, \"00:00:00.002\");\r\n    assert_duration_format_equal_positive(60min, \"01:00:00\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_003735_char_traits_signatures/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_003735_char_traits_signatures/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <cwchar>\r\n#include <string>\r\n#include <type_traits>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nusing namespace std;\r\n\r\n// Also ensure that the member type int_type is correct for standard specializations.\r\nSTATIC_ASSERT(is_same_v<char_traits<char>::int_type, int>);\r\n#ifdef __cpp_char8_t\r\nSTATIC_ASSERT(is_same_v<char_traits<char8_t>::int_type, unsigned int>);\r\n#endif // __cpp_char8_t\r\nSTATIC_ASSERT(is_same_v<char_traits<char16_t>::int_type, uint_least16_t>);\r\nSTATIC_ASSERT(is_same_v<char_traits<char32_t>::int_type, uint_least32_t>);\r\nSTATIC_ASSERT(is_same_v<char_traits<wchar_t>::int_type, wint_t>);\r\n\r\ntemplate <class CharT>\r\nvoid test_n2349_char_traits_signatures() {\r\n    using IntT = typename char_traits<CharT>::int_type;\r\n\r\n    volatile CharT c{};\r\n    volatile IntT i{};\r\n\r\n    (void) char_traits<CharT>::eq(c, c);\r\n    (void) char_traits<CharT>::lt(c, c);\r\n    (void) char_traits<CharT>::not_eof(i);\r\n    (void) char_traits<CharT>::to_char_type(i);\r\n    (void) char_traits<CharT>::to_int_type(c);\r\n    (void) char_traits<CharT>::eq_int_type(i, i);\r\n}\r\n\r\nvoid test_n2349_char_traits_signatures_all() {\r\n    test_n2349_char_traits_signatures<char>();\r\n#ifdef __cpp_char8_t\r\n    test_n2349_char_traits_signatures<char8_t>();\r\n#endif // __cpp_char8_t\r\n    test_n2349_char_traits_signatures<char16_t>();\r\n    test_n2349_char_traits_signatures<char32_t>();\r\n    test_n2349_char_traits_signatures<wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_003840_tellg_when_reading_lf_file_in_text_mode/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_003840_tellg_when_reading_lf_file_in_text_mode/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <filesystem>\r\n#include <fstream>\r\n#include <ios>\r\n#include <string>\r\n\r\n#include <temp_file_name.hpp>\r\n\r\nusing namespace std;\r\n\r\nvoid test(const string& temp_file_name_str, const ios_base::openmode mode) {\r\n    filesystem::remove(temp_file_name_str);\r\n\r\n    {\r\n        ofstream out{temp_file_name_str, mode};\r\n        out << \"Line A\\n\";\r\n        out << \"Line B\\n\";\r\n        out << \"Line C\\n\";\r\n    }\r\n\r\n    {\r\n        ifstream in{temp_file_name_str};\r\n        string line;\r\n\r\n        assert(getline(in, line));\r\n        assert(line == \"Line A\");\r\n        (void) in.tellg();\r\n\r\n        assert(getline(in, line));\r\n        assert(line == \"Line B\");\r\n        (void) in.tellg();\r\n\r\n        assert(getline(in, line));\r\n        assert(line == \"Line C\");\r\n        (void) in.tellg();\r\n\r\n        assert(!getline(in, line));\r\n    }\r\n\r\n    filesystem::remove(temp_file_name_str);\r\n}\r\n\r\nint main() {\r\n    const string temp_file_name_str = temp_file_name();\r\n\r\n    test(temp_file_name_str, ios_base::out);\r\n    test(temp_file_name_str, ios_base::binary);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_003867_output_nan/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_003867_output_nan/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <iomanip>\r\n#include <limits>\r\n#include <locale>\r\n#include <sstream>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\n// Because std::string crosses the DLL boundary via overridden virtual functions,\r\n// we can test custom facets only when:\r\n// * linking statically, or\r\n// * linking dynamically with IDL set to its default value (so the user code and the DLL match).\r\n#ifdef _DEBUG\r\n#define DEFAULT_IDL 2\r\n#else\r\n#define DEFAULT_IDL 0\r\n#endif\r\n\r\n#if !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL\r\n#define TEST_CUSTOM_FACET 1\r\n#else\r\n#define TEST_CUSTOM_FACET 0\r\n#endif\r\n\r\n#if TEST_CUSTOM_FACET\r\nstruct groups_of_1 : numpunct<char> {\r\n    // The standard char specialization of std::numpunct::do_thousands_sep returns ','\r\n    string do_grouping() const override {\r\n        return \"\\1\";\r\n    } // groups of 1 digit\r\n};\r\n#endif // TEST_CUSTOM_FACET\r\n\r\ntemplate <typename T>\r\nvoid test_gh_3867() {\r\n    // GH-3867 Writing NaN to the output stream with a set locale results in a weird output\r\n    {\r\n        ostringstream s;\r\n        s.imbue(locale(\"en-US\"));\r\n        s << -numeric_limits<T>::quiet_NaN();\r\n        assert(s.str() == \"-nan(ind)\");\r\n    }\r\n\r\n#if TEST_CUSTOM_FACET\r\n    {\r\n        ostringstream s;\r\n        s.imbue(locale(s.getloc(), new groups_of_1));\r\n        s << -numeric_limits<T>::infinity();\r\n        assert(s.str() == \"-inf\");\r\n    }\r\n#endif // TEST_CUSTOM_FACET\r\n}\r\n\r\n// Also test GH-4210: With setprecision(0) showpoint fixed, a bogus '.' is emitted for infinity and NaN\r\n\r\ntemplate <class FloatingPoint>\r\nvoid test_output_nonfinite_value(const FloatingPoint x) {\r\n    const auto s1 = [x] {\r\n        ostringstream os;\r\n        os << setprecision(0) << showpoint << fixed;\r\n        os << x;\r\n        return os.str();\r\n    }();\r\n    const auto s2 = [x] {\r\n        ostringstream os;\r\n        os << setprecision(0) << noshowpoint << fixed;\r\n        os << x;\r\n        return os.str();\r\n    }();\r\n    assert(s1 == s2);\r\n\r\n    const auto s3 = [x] {\r\n        ostringstream os;\r\n        os << setprecision(0) << showpoint << fixed << showpos;\r\n        os << x;\r\n        return os.str();\r\n    }();\r\n    const auto s4 = [x] {\r\n        ostringstream os;\r\n        os << setprecision(0) << noshowpoint << fixed << showpos;\r\n        os << x;\r\n        return os.str();\r\n    }();\r\n    assert(s3 == s4);\r\n}\r\n\r\ntemplate <class FloatingPoint>\r\nvoid test_gh_4210() {\r\n    constexpr auto inf_val = numeric_limits<FloatingPoint>::infinity();\r\n    constexpr auto nan_val = numeric_limits<FloatingPoint>::quiet_NaN();\r\n\r\n    test_output_nonfinite_value(inf_val);\r\n    test_output_nonfinite_value(-inf_val);\r\n    test_output_nonfinite_value(nan_val);\r\n    test_output_nonfinite_value(-nan_val);\r\n}\r\n\r\nint main() {\r\n    test_gh_3867<float>();\r\n    test_gh_3867<double>();\r\n    test_gh_3867<long double>();\r\n\r\n    test_gh_4210<float>();\r\n    test_gh_4210<double>();\r\n    test_gh_4210<long double>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004023_mdspan_fwd_prod_overflow/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004023_mdspan_fwd_prod_overflow/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <mdspan>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nstruct layout_packed_upper { // LAPACK packed storage, VERY INCOMPLETE\r\n    template <class Extents>\r\n    class mapping {\r\n    public:\r\n        using extents_type = Extents;\r\n        using index_type   = extents_type::index_type;\r\n        using size_type    = extents_type::size_type;\r\n        using rank_type    = extents_type::rank_type;\r\n        using layout_type  = layout_packed_upper;\r\n\r\n        constexpr mapping() noexcept = default;\r\n        constexpr mapping(const extents_type& ex_) : ex{ex_} {}\r\n\r\n        constexpr const extents_type& extents() const {\r\n            return ex;\r\n        }\r\n\r\n        constexpr index_type required_span_size() const {\r\n            if (dim % 2 == 0) {\r\n                return (dim / 2) * (dim + 1);\r\n            } else {\r\n                return ((dim + 1) / 2) * dim;\r\n            }\r\n        }\r\n\r\n    private:\r\n        extents_type ex = extents_type();\r\n        index_type dim  = ex.extent(0);\r\n    };\r\n};\r\n\r\nvoid test() {\r\n    constexpr int32_t dim        = 47'000; // sqrt(2^32) > dim > sqrt(2^31), dim assumed even below\r\n    constexpr auto expected_size = [] {\r\n        int32_t unused;\r\n        bool overflow = _Mul_overflow(dim, dim, unused);\r\n        assert(overflow);\r\n\r\n        using UType     = remove_cv_t<make_unsigned_t<decltype(dim)>>;\r\n        const auto udim = static_cast<UType>(dim);\r\n        UType result{};\r\n        overflow = _Mul_overflow(udim, udim, result);\r\n        assert(!overflow);\r\n        return result;\r\n    }();\r\n\r\n    constexpr auto expected_req_size = [] {\r\n        int32_t result{};\r\n        const bool overflow = _Mul_overflow(dim / 2, dim + 1, result);\r\n        assert(!overflow);\r\n        return result;\r\n    }();\r\n\r\n    {\r\n        using E = extents<int32_t, dim, dim>;\r\n        constexpr mdspan<double, E, layout_packed_upper> m(nullptr);\r\n        static_assert(m.size() == expected_size);\r\n        static_assert(m.mapping().required_span_size() == expected_req_size);\r\n    }\r\n\r\n    {\r\n        using E = dextents<int32_t, 2>;\r\n        constexpr mdspan<double, E, layout_packed_upper> m(nullptr, dim, dim);\r\n        static_assert(m.size() == expected_size);\r\n        static_assert(m.mapping().required_span_size() == expected_req_size);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004040_container_nonmember_functions/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004040_container_nonmember_functions/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <iterator>\r\n#include <stdexcept>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n#if _HAS_CXX20\r\n#define CONSTEXPR20 constexpr\r\n#define CONSTEXPR17 constexpr\r\n#define NODISCARD20 [[nodiscard]]\r\n#elif _HAS_CXX17 // ^^^ _HAS_CXX20 / !_HAS_CXX20 && _HAS_CXX17 vvv\r\n#define CONSTEXPR20 inline\r\n#define CONSTEXPR17 constexpr\r\n#define NODISCARD20\r\n#else // ^^^ !_HAS_CXX20 && _HAS_CXX17 / !_HAS_CXX17 vvv\r\n#define CONSTEXPR20 inline\r\n#define CONSTEXPR17 inline\r\n#define NODISCARD20\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n\r\nusing namespace std;\r\n\r\nstruct Meow {\r\n#if _HAS_CXX20\r\n    friend constexpr auto operator<=>(Meow, Meow) = default;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    friend constexpr bool operator==(Meow, Meow) noexcept {\r\n        return true;\r\n    }\r\n\r\n    friend constexpr bool operator!=(Meow, Meow) noexcept {\r\n        return false;\r\n    }\r\n\r\n    friend constexpr bool operator<(Meow, Meow) noexcept {\r\n        return false;\r\n    }\r\n\r\n    friend constexpr bool operator>(Meow, Meow) noexcept {\r\n        return false;\r\n    }\r\n\r\n    friend constexpr bool operator<=(Meow, Meow) noexcept {\r\n        return true;\r\n    }\r\n\r\n    friend constexpr bool operator>=(Meow, Meow) noexcept {\r\n        return true;\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n};\r\n\r\ntemplate <size_t N>\r\nstruct std::array<Meow, N> {\r\n    using value_type             = Meow;\r\n    using pointer                = Meow*;\r\n    using const_pointer          = const Meow*;\r\n    using reference              = Meow&;\r\n    using const_reference        = const Meow&;\r\n    using size_type              = size_t;\r\n    using difference_type        = ptrdiff_t;\r\n    using iterator               = Meow*;\r\n    using const_iterator         = const Meow*;\r\n    using reverse_iterator       = std::reverse_iterator<Meow*>;\r\n    using const_reverse_iterator = std::reverse_iterator<const Meow*>;\r\n\r\n    CONSTEXPR20 void fill(const Meow&) {} // Meow is no-op assignable.\r\n    CONSTEXPR20 void swap(array&) noexcept {} // Meow is no-op swappable.\r\n\r\n    CONSTEXPR17 iterator begin() noexcept {\r\n        return elems_;\r\n    }\r\n    CONSTEXPR17 const_iterator begin() const noexcept {\r\n        return elems_;\r\n    }\r\n    CONSTEXPR17 iterator end() noexcept {\r\n        return elems_ + N;\r\n    }\r\n    CONSTEXPR17 const_iterator end() const noexcept {\r\n        return elems_ + N;\r\n    }\r\n\r\n    CONSTEXPR17 reverse_iterator rbegin() noexcept {\r\n        return reverse_iterator{elems_ + N};\r\n    }\r\n    CONSTEXPR17 const_reverse_iterator rbegin() const noexcept {\r\n        return const_reverse_iterator{elems_ + N};\r\n    }\r\n    CONSTEXPR17 reverse_iterator rend() noexcept {\r\n        return reverse_iterator{elems_};\r\n    }\r\n    CONSTEXPR17 const_reverse_iterator rend() const noexcept {\r\n        return const_reverse_iterator{elems_};\r\n    }\r\n\r\n    CONSTEXPR17 const_iterator cbegin() const noexcept {\r\n        return elems_;\r\n    }\r\n    CONSTEXPR17 const_iterator cend() const noexcept {\r\n        return elems_ + N;\r\n    }\r\n    CONSTEXPR17 const_reverse_iterator crbegin() const noexcept {\r\n        return const_reverse_iterator{elems_ + N};\r\n    }\r\n    CONSTEXPR17 const_reverse_iterator crend() const noexcept {\r\n        return const_reverse_iterator{elems_};\r\n    }\r\n\r\n    NODISCARD20 constexpr bool empty() const noexcept {\r\n        return false;\r\n    }\r\n    constexpr size_type size() const noexcept {\r\n        return N;\r\n    }\r\n    constexpr size_type max_size() const noexcept {\r\n        return N;\r\n    }\r\n\r\n    CONSTEXPR17 reference operator[](size_type n) {\r\n        return elems_[n];\r\n    }\r\n    constexpr const_reference operator[](size_type n) const {\r\n        return elems_[n];\r\n    }\r\n    CONSTEXPR17 reference at(size_type n) {\r\n        return n < N ? elems_[n] : throw out_of_range{\"bad array<Meow> access\"};\r\n    }\r\n    constexpr const_reference at(size_type n) const {\r\n        return n < N ? elems_[n] : throw out_of_range{\"bad array<Meow> access\"};\r\n    }\r\n    CONSTEXPR17 reference front() {\r\n        return elems_[0];\r\n    }\r\n    constexpr const_reference front() const {\r\n        return elems_[0];\r\n    }\r\n    CONSTEXPR17 reference back() {\r\n        return elems_[N - 1];\r\n    }\r\n    constexpr const_reference back() const {\r\n        return elems_[N - 1];\r\n    }\r\n\r\n    CONSTEXPR17 pointer data() noexcept {\r\n        return elems_;\r\n    }\r\n    CONSTEXPR17 const_pointer data() const noexcept {\r\n        return elems_;\r\n    }\r\n\r\n    Meow elems_[N];\r\n};\r\n\r\ntemplate <>\r\nstruct std::array<Meow, 0> {\r\n    using value_type             = Meow;\r\n    using pointer                = Meow*;\r\n    using const_pointer          = const Meow*;\r\n    using reference              = Meow&;\r\n    using const_reference        = const Meow&;\r\n    using size_type              = size_t;\r\n    using difference_type        = ptrdiff_t;\r\n    using iterator               = Meow*;\r\n    using const_iterator         = const Meow*;\r\n    using reverse_iterator       = std::reverse_iterator<Meow*>;\r\n    using const_reverse_iterator = std::reverse_iterator<const Meow*>;\r\n\r\n    CONSTEXPR20 void fill(const Meow&) {} // Meow is no-op assignable.\r\n    CONSTEXPR20 void swap(array&) noexcept {} // Meow is no-op swappable.\r\n\r\n    CONSTEXPR17 iterator begin() noexcept {\r\n        return nullptr;\r\n    }\r\n    CONSTEXPR17 const_iterator begin() const noexcept {\r\n        return nullptr;\r\n    }\r\n    CONSTEXPR17 iterator end() noexcept {\r\n        return nullptr;\r\n    }\r\n    CONSTEXPR17 const_iterator end() const noexcept {\r\n        return nullptr;\r\n    }\r\n\r\n    CONSTEXPR17 reverse_iterator rbegin() noexcept {\r\n        return reverse_iterator{end()};\r\n    }\r\n    CONSTEXPR17 const_reverse_iterator rbegin() const noexcept {\r\n        return const_reverse_iterator{end()};\r\n    }\r\n    CONSTEXPR17 reverse_iterator rend() noexcept {\r\n        return reverse_iterator{begin()};\r\n    }\r\n    CONSTEXPR17 const_reverse_iterator rend() const noexcept {\r\n        return const_reverse_iterator{begin()};\r\n    }\r\n\r\n    CONSTEXPR17 const_iterator cbegin() const noexcept {\r\n        return nullptr;\r\n    }\r\n    CONSTEXPR17 const_iterator cend() const noexcept {\r\n        return nullptr;\r\n    }\r\n    CONSTEXPR17 const_reverse_iterator crbegin() const noexcept {\r\n        return const_reverse_iterator{end()};\r\n    }\r\n    CONSTEXPR17 const_reverse_iterator crend() const noexcept {\r\n        return const_reverse_iterator{begin()};\r\n    }\r\n\r\n    NODISCARD20 constexpr bool empty() const noexcept {\r\n        return true;\r\n    }\r\n    constexpr size_type size() const noexcept {\r\n        return 0;\r\n    }\r\n    constexpr size_type max_size() const noexcept {\r\n        return 0;\r\n    }\r\n\r\n    // Perhaps these functions of array<T, 0> shouldn't be constexpr as an invocation is always throwing or UB.\r\n    reference operator[](size_type) {\r\n        abort(); // UB\r\n    }\r\n    const_reference operator[](size_type) const {\r\n        abort(); // UB\r\n    }\r\n    reference at(size_type) {\r\n        throw out_of_range{\"bad array<Meow, 0> access\"};\r\n    }\r\n    const_reference at(size_type) const {\r\n        throw out_of_range{\"bad array<Meow, 0> access\"};\r\n    }\r\n    reference front() {\r\n        abort(); // UB\r\n    }\r\n    const_reference front() const {\r\n        abort(); // UB\r\n    }\r\n    reference back() {\r\n        abort(); // UB\r\n    }\r\n    const_reference back() const {\r\n        abort(); // UB\r\n    }\r\n\r\n    CONSTEXPR17 pointer data() noexcept {\r\n        return nullptr;\r\n    }\r\n    CONSTEXPR17 const_pointer data() const noexcept {\r\n        return nullptr;\r\n    }\r\n\r\n    unsigned char dummy_[1];\r\n};\r\n\r\nconstexpr bool test_array_get() {\r\n    array<Meow, 1> a{};\r\n    const auto& c = a;\r\n\r\n    STATIC_ASSERT(is_same_v<decltype(get<0>(a)), Meow&>);\r\n    STATIC_ASSERT(is_same_v<decltype(get<0>(c)), const Meow&>);\r\n    STATIC_ASSERT(is_same_v<decltype(get<0>(move(a))), Meow&&>);\r\n    STATIC_ASSERT(is_same_v<decltype(get<0>(move(c))), const Meow&&>);\r\n\r\n    assert(get<0>(a) == Meow{});\r\n    assert(get<0>(c) == Meow{});\r\n    assert(get<0>(move(a)) == Meow{});\r\n    assert(get<0>(move(c)) == Meow{});\r\n\r\n    return true;\r\n}\r\n\r\nCONSTEXPR20 bool test_array_comparison() {\r\n    using A0 = array<Meow, 0>;\r\n    assert(A0{} == A0{});\r\n    assert(!(A0{} != A0{}));\r\n    assert(!(A0{} < A0{}));\r\n    assert(!(A0{} > A0{}));\r\n    assert(A0{} <= A0{});\r\n    assert(A0{} >= A0{});\r\n#if _HAS_CXX20\r\n    assert(A0{} <=> A0{} == strong_ordering::equal);\r\n#endif // _HAS_CXX20\r\n\r\n    using A1 = array<Meow, 1>;\r\n    assert(A1{} == A1{});\r\n    assert(!(A1{} != A1{}));\r\n    assert(!(A1{} < A1{}));\r\n    assert(!(A1{} > A1{}));\r\n    assert(A1{} <= A1{});\r\n    assert(A1{} >= A1{});\r\n#if _HAS_CXX20\r\n    assert(A1{} <=> A1{} == strong_ordering::equal);\r\n#endif // _HAS_CXX20\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test_array_get();\r\n    STATIC_ASSERT(test_array_get());\r\n    test_array_comparison();\r\n#if _HAS_CXX20\r\n    static_assert(test_array_comparison());\r\n#endif // _HAS_CXX20\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004108_some_ranges_algos_construct_wrong_type/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004108_some_ranges_algos_construct_wrong_type/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cstddef>\r\n#include <ranges>\r\n\r\nusing namespace std;\r\n\r\nnamespace gh4108 {\r\n    struct RRef {\r\n        RRef(RRef&&) = delete;\r\n    };\r\n\r\n    struct Val {\r\n        Val(const RRef&);\r\n        auto operator<=>(const Val&) const = default;\r\n    };\r\n\r\n    struct I {\r\n        using value_type      = Val;\r\n        using difference_type = ptrdiff_t;\r\n        Val& operator*() const;\r\n        I& operator++();\r\n        I operator++(int);\r\n        I& operator--();\r\n        I operator--(int);\r\n        bool operator==(const I&) const;\r\n        friend RRef&& iter_move(const I&);\r\n    };\r\n\r\n    // GH-4108 <algorithm>: ranges::inplace_merge accidentally constructed remove_cvref_t<iter_rvalue_reference_t<I>>\r\n    void test_gh_4108() {\r\n        ranges::inplace_merge(I{}, I{}, I{});\r\n    }\r\n} // namespace gh4108\r\n\r\nnamespace gh4102 {\r\n    struct Ref {\r\n        Ref(const Ref&)                    = delete;\r\n        auto operator<=>(const Ref&) const = default;\r\n    };\r\n\r\n    struct Val {\r\n        Val() = default;\r\n        Val(const Ref&);\r\n        auto operator<=>(const Val&) const = default;\r\n    };\r\n\r\n    struct I {\r\n        using value_type      = Val;\r\n        using difference_type = ptrdiff_t;\r\n        const Ref& operator*() const;\r\n        I& operator++();\r\n        void operator++(int);\r\n        bool operator==(const I&) const;\r\n    };\r\n\r\n    // GH-4102 <algorithm>: ranges::minmax accidentally constructed remove_cvref_t<iter_reference_t<I>>\r\n    void test_gh_4102() {\r\n        [[maybe_unused]] auto result = ranges::minmax(ranges::subrange<I, I>{});\r\n    }\r\n} // namespace gh4102\r\n"
  },
  {
    "path": "tests/std/tests/GH_004109_iter_value_t_direct_initialization/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004109_iter_value_t_direct_initialization/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <iterator>\r\n#include <memory>\r\n#include <numeric>\r\n#include <random>\r\n\r\n#ifdef __cpp_lib_execution\r\n#include <execution>\r\nusing std::execution::par;\r\n#endif // __cpp_lib_execution\r\n\r\nusing namespace std;\r\n\r\nstruct Val;\r\n\r\nstruct RRef {\r\n    RRef(const Val&);\r\n};\r\n\r\nstruct Val {\r\n    using difference_type = int;\r\n    explicit Val(const RRef&);\r\n    Val& operator=(const RRef&);\r\n    bool operator==(const Val&) const;\r\n#if _HAS_CXX20\r\n    strong_ordering operator<=>(const Val&) const;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    bool operator!=(const Val&) const;\r\n    bool operator<(const Val&) const;\r\n    bool operator<=(const Val&) const;\r\n    bool operator>(const Val&) const;\r\n    bool operator>=(const Val&) const;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n    Val& operator++();\r\n    Val operator++(int);\r\n};\r\n\r\nstruct I {\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = Val;\r\n    using difference_type   = int;\r\n    using pointer           = void;\r\n    using reference         = Val&;\r\n    reference operator*() const;\r\n    reference operator[](int) const;\r\n    I& operator++();\r\n    I operator++(int);\r\n    I& operator--();\r\n    I operator--(int);\r\n    I& operator+=(int);\r\n    I& operator-=(int);\r\n    friend bool operator==(const I&, const I&);\r\n    friend bool operator!=(const I&, const I&);\r\n    friend bool operator<(const I&, const I&);\r\n    friend bool operator<=(const I&, const I&);\r\n    friend bool operator>(const I&, const I&);\r\n    friend bool operator>=(const I&, const I&);\r\n    friend difference_type operator-(I, I);\r\n    friend I operator+(I, difference_type);\r\n    friend I operator-(I, difference_type);\r\n    friend I operator+(difference_type, I);\r\n    friend RRef iter_move(const I&);\r\n\r\n#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, VSO-1941943\r\n    int dummy{0};\r\n#endif // ^^^ workaround ^^^\r\n};\r\n\r\n#if _HAS_CXX20\r\nstatic_assert(random_access_iterator<I>);\r\nstatic_assert(sortable<I>);\r\n#endif // _HAS_CXX20\r\n\r\nextern Val val;\r\nextern mt19937 urbg; // UniformRandomBitGenerator\r\nconst int zero = 0;\r\n// GH-4109: <algorithm>: iter_value_t<I> should always use direct-initialization\r\nvoid test_gh_4109() {\r\n    I nil{};\r\n\r\n    bool (*pred)(Val)       = nullptr;\r\n    bool (*pred2)(Val, Val) = nullptr;\r\n    bool (*comp)(Val, Val)  = nullptr;\r\n    Val (*gen)()            = nullptr;\r\n#if _HAS_AUTO_PTR_ETC\r\n    int (*rng)(int) = nullptr;\r\n#endif // _HAS_AUTO_PTR_ETC\r\n    Val (*unop)(Val)       = nullptr;\r\n    Val (*binop)(Val, Val) = nullptr;\r\n#if _HAS_CXX20\r\n    strong_ordering (*comp_three_way)(Val, Val) = nullptr;\r\n#endif // _HAS_CXX20\r\n\r\n    (void) all_of(nil, nil, pred);\r\n    (void) any_of(nil, nil, pred);\r\n    (void) none_of(nil, nil, pred);\r\n    for_each(nil, nil, pred);\r\n#if _HAS_CXX17\r\n    for_each_n(nil, zero, pred);\r\n#endif // _HAS_CXX17\r\n    (void) find(nil, nil, val);\r\n    (void) find_if(nil, nil, pred);\r\n    (void) find_if_not(nil, nil, pred);\r\n    (void) find_end(nil, nil, nil, nil);\r\n    (void) find_end(nil, nil, nil, nil, pred2);\r\n    (void) find_first_of(nil, nil, nil, nil);\r\n    (void) find_first_of(nil, nil, nil, nil, pred2);\r\n    (void) adjacent_find(nil, nil);\r\n    (void) adjacent_find(nil, nil, pred2);\r\n    (void) count(nil, nil, val);\r\n    (void) count_if(nil, nil, pred);\r\n    (void) mismatch(nil, nil, nil);\r\n    (void) mismatch(nil, nil, nil, pred2);\r\n    (void) mismatch(nil, nil, nil, nil);\r\n    (void) mismatch(nil, nil, nil, nil, pred2);\r\n    (void) equal(nil, nil, nil);\r\n    (void) equal(nil, nil, nil, pred2);\r\n    (void) equal(nil, nil, nil, nil);\r\n    (void) equal(nil, nil, nil, nil, pred2);\r\n    (void) is_permutation(nil, nil, nil);\r\n    (void) is_permutation(nil, nil, nil, pred2);\r\n    (void) is_permutation(nil, nil, nil, nil);\r\n    (void) is_permutation(nil, nil, nil, nil, pred2);\r\n    (void) search(nil, nil, nil, nil);\r\n    (void) search(nil, nil, nil, nil, pred2);\r\n    (void) search_n(nil, nil, zero, val);\r\n    (void) search_n(nil, nil, zero, val, pred2);\r\n    copy(nil, nil, nil);\r\n    copy_n(nil, zero, nil);\r\n    copy_if(nil, nil, nil, pred);\r\n    copy_backward(nil, nil, nil);\r\n    move(nil, nil, nil);\r\n    move_backward(nil, nil, nil);\r\n    swap_ranges(nil, nil, nil);\r\n    transform(nil, nil, nil, unop);\r\n    transform(nil, nil, nil, nil, binop);\r\n    replace(nil, nil, val, val);\r\n    replace_if(nil, nil, pred, val);\r\n    replace_copy(nil, nil, nil, val, val);\r\n    replace_copy_if(nil, nil, nil, pred, val);\r\n    fill(nil, nil, val);\r\n    fill_n(nil, zero, val);\r\n    generate(nil, nil, gen);\r\n    generate_n(nil, zero, gen);\r\n    (void) remove(nil, nil, val);\r\n    (void) remove_if(nil, nil, pred);\r\n    remove_copy(nil, nil, nil, val);\r\n    remove_copy_if(nil, nil, nil, pred);\r\n    (void) unique(nil, nil);\r\n    (void) unique(nil, nil, pred2);\r\n    unique_copy(nil, nil, nil);\r\n    unique_copy(nil, nil, nil, pred2);\r\n    reverse(nil, nil);\r\n    reverse_copy(nil, nil, nil);\r\n    rotate(nil, nil, nil);\r\n    rotate_copy(nil, nil, nil, nil);\r\n#if _HAS_AUTO_PTR_ETC\r\n    random_shuffle(nil, nil);\r\n    random_shuffle(nil, nil, rng);\r\n#endif // _HAS_AUTO_PTR_ETC\r\n#if _HAS_CXX17\r\n    sample(nil, nil, nil, zero, urbg);\r\n#endif // _HAS_CXX17\r\n    shuffle(nil, nil, urbg);\r\n#if _HAS_CXX20\r\n    shift_left(nil, nil, 1729);\r\n    shift_right(nil, nil, 1729);\r\n#endif // _HAS_CXX20\r\n    sort(nil, nil);\r\n    sort(nil, nil, comp);\r\n    stable_sort(nil, nil);\r\n    stable_sort(nil, nil, comp);\r\n    partial_sort(nil, nil, nil);\r\n    partial_sort(nil, nil, nil, comp);\r\n    partial_sort_copy(nil, nil, nil, nil);\r\n    partial_sort_copy(nil, nil, nil, nil, comp);\r\n    (void) is_sorted(nil, nil);\r\n    (void) is_sorted(nil, nil, comp);\r\n    (void) is_sorted_until(nil, nil);\r\n    (void) is_sorted_until(nil, nil, comp);\r\n    nth_element(nil, nil, nil);\r\n    nth_element(nil, nil, nil, comp);\r\n    (void) lower_bound(nil, nil, val);\r\n    (void) lower_bound(nil, nil, val, comp);\r\n    (void) upper_bound(nil, nil, val);\r\n    (void) upper_bound(nil, nil, val, comp);\r\n    (void) equal_range(nil, nil, val);\r\n    (void) equal_range(nil, nil, val, comp);\r\n    (void) binary_search(nil, nil, val);\r\n    (void) binary_search(nil, nil, val, comp);\r\n    (void) is_partitioned(nil, nil, pred);\r\n    partition(nil, nil, pred);\r\n    stable_partition(nil, nil, pred);\r\n    partition_copy(nil, nil, nil, nil, pred);\r\n    (void) partition_point(nil, nil, pred);\r\n    merge(nil, nil, nil, nil, nil);\r\n    merge(nil, nil, nil, nil, nil, comp);\r\n    inplace_merge(nil, nil, nil);\r\n    inplace_merge(nil, nil, nil, comp);\r\n    (void) includes(nil, nil, nil, nil);\r\n    (void) includes(nil, nil, nil, nil, comp);\r\n    set_union(nil, nil, nil, nil, nil);\r\n    set_union(nil, nil, nil, nil, nil, comp);\r\n    set_intersection(nil, nil, nil, nil, nil);\r\n    set_intersection(nil, nil, nil, nil, nil, comp);\r\n    set_difference(nil, nil, nil, nil, nil);\r\n    set_difference(nil, nil, nil, nil, nil, comp);\r\n    set_symmetric_difference(nil, nil, nil, nil, nil);\r\n    set_symmetric_difference(nil, nil, nil, nil, nil, comp);\r\n    push_heap(nil, nil);\r\n    push_heap(nil, nil, comp);\r\n    pop_heap(nil, nil);\r\n    pop_heap(nil, nil, comp);\r\n    make_heap(nil, nil);\r\n    make_heap(nil, nil, comp);\r\n    sort_heap(nil, nil);\r\n    sort_heap(nil, nil, comp);\r\n    (void) is_heap(nil, nil);\r\n    (void) is_heap(nil, nil, comp);\r\n    (void) is_heap_until(nil, nil);\r\n    (void) is_heap_until(nil, nil, comp);\r\n    (void) min_element(nil, nil);\r\n    (void) min_element(nil, nil, comp);\r\n    (void) max_element(nil, nil);\r\n    (void) max_element(nil, nil, comp);\r\n    (void) minmax_element(nil, nil);\r\n    (void) minmax_element(nil, nil, comp);\r\n    (void) lexicographical_compare(nil, nil, nil, nil);\r\n    (void) lexicographical_compare(nil, nil, nil, nil, comp);\r\n#if _HAS_CXX20\r\n    (void) lexicographical_compare_three_way(nil, nil, nil, nil);\r\n    (void) lexicographical_compare_three_way(nil, nil, nil, nil, comp_three_way);\r\n#endif // _HAS_CXX20\r\n    next_permutation(nil, nil);\r\n    next_permutation(nil, nil, comp);\r\n    prev_permutation(nil, nil);\r\n    prev_permutation(nil, nil, comp);\r\n\r\n    (void) accumulate(nil, nil, val, binop);\r\n#if _HAS_CXX17\r\n    (void) reduce(nil, nil, val, binop);\r\n#endif // _HAS_CXX17\r\n    (void) inner_product(nil, nil, nil, val, binop, binop);\r\n#if _HAS_CXX17\r\n    (void) transform_reduce(nil, nil, nil, val, binop, binop);\r\n    (void) transform_reduce(nil, nil, val, binop, unop);\r\n#endif // _HAS_CXX17\r\n    partial_sum(nil, nil, nil, binop);\r\n#if _HAS_CXX17\r\n    exclusive_scan(nil, nil, nil, val, binop);\r\n    inclusive_scan(nil, nil, nil, binop);\r\n    inclusive_scan(nil, nil, nil, binop, val);\r\n    transform_exclusive_scan(nil, nil, nil, val, binop, unop);\r\n    transform_inclusive_scan(nil, nil, nil, binop, unop);\r\n    transform_inclusive_scan(nil, nil, nil, binop, unop, val);\r\n#endif // _HAS_CXX17\r\n    adjacent_difference(nil, nil, nil, binop);\r\n    iota(nil, nil, val);\r\n\r\n    uninitialized_copy(nil, nil, nil);\r\n    uninitialized_copy_n(nil, zero, nil);\r\n#if _HAS_CXX17\r\n    uninitialized_move(nil, nil, nil);\r\n    uninitialized_move_n(nil, zero, nil);\r\n#endif // _HAS_CXX17\r\n    uninitialized_fill(nil, nil, val);\r\n    uninitialized_fill_n(nil, zero, val);\r\n\r\n#ifdef __cpp_lib_execution\r\n    (void) all_of(par, nil, nil, pred);\r\n    (void) any_of(par, nil, nil, pred);\r\n    (void) none_of(par, nil, nil, pred);\r\n    for_each(par, nil, nil, pred);\r\n    for_each_n(par, nil, zero, pred);\r\n    (void) find(par, nil, nil, val);\r\n    (void) find_if(par, nil, nil, pred);\r\n    (void) find_if_not(par, nil, nil, pred);\r\n#ifndef _M_CEE // TRANSITION, VSO-1946395\r\n    (void) find_end(par, nil, nil, nil, nil);\r\n    (void) find_end(par, nil, nil, nil, nil, pred2);\r\n#endif // ^^^ no workaround ^^^\r\n    (void) find_first_of(par, nil, nil, nil, nil);\r\n    (void) find_first_of(par, nil, nil, nil, nil, pred2);\r\n    (void) adjacent_find(par, nil, nil);\r\n    (void) adjacent_find(par, nil, nil, pred2);\r\n    (void) count(par, nil, nil, val);\r\n    (void) count_if(par, nil, nil, pred);\r\n    (void) mismatch(par, nil, nil, nil);\r\n    (void) mismatch(par, nil, nil, nil, pred2);\r\n    (void) mismatch(par, nil, nil, nil, nil);\r\n    (void) mismatch(par, nil, nil, nil, nil, pred2);\r\n    (void) equal(par, nil, nil, nil);\r\n    (void) equal(par, nil, nil, nil, pred2);\r\n    (void) equal(par, nil, nil, nil, nil);\r\n    (void) equal(par, nil, nil, nil, nil, pred2);\r\n    (void) search(par, nil, nil, nil, nil);\r\n    (void) search(par, nil, nil, nil, nil, pred2);\r\n    (void) search_n(par, nil, nil, zero, val);\r\n    (void) search_n(par, nil, nil, zero, val, pred2);\r\n    copy(par, nil, nil, nil);\r\n    copy_n(par, nil, zero, nil);\r\n    copy_if(par, nil, nil, nil, pred);\r\n    move(par, nil, nil, nil);\r\n    swap_ranges(par, nil, nil, nil);\r\n    transform(par, nil, nil, nil, unop);\r\n    transform(par, nil, nil, nil, nil, binop);\r\n    replace(par, nil, nil, val, val);\r\n    replace_if(par, nil, nil, pred, val);\r\n    replace_copy(par, nil, nil, nil, val, val);\r\n    replace_copy_if(par, nil, nil, nil, pred, val);\r\n    fill(par, nil, nil, val);\r\n    fill_n(par, nil, zero, val);\r\n    generate(par, nil, nil, gen);\r\n    generate_n(par, nil, zero, gen);\r\n    (void) remove(par, nil, nil, val);\r\n    (void) remove_if(par, nil, nil, pred);\r\n    remove_copy(par, nil, nil, nil, val);\r\n    remove_copy_if(par, nil, nil, nil, pred);\r\n    (void) unique(par, nil, nil);\r\n    (void) unique(par, nil, nil, pred2);\r\n    unique_copy(par, nil, nil, nil);\r\n    unique_copy(par, nil, nil, nil, pred2);\r\n    reverse(par, nil, nil);\r\n    reverse_copy(par, nil, nil, nil);\r\n    rotate(par, nil, nil, nil);\r\n    rotate_copy(par, nil, nil, nil, nil);\r\n#if _HAS_CXX20\r\n    shift_left(par, nil, nil, 1729);\r\n    shift_right(par, nil, nil, 1729);\r\n#endif // _HAS_CXX20\r\n    sort(par, nil, nil);\r\n    sort(par, nil, nil, comp);\r\n    stable_sort(par, nil, nil);\r\n    stable_sort(par, nil, nil, comp);\r\n    partial_sort(par, nil, nil, nil);\r\n    partial_sort(par, nil, nil, nil, comp);\r\n    partial_sort_copy(par, nil, nil, nil, nil);\r\n    partial_sort_copy(par, nil, nil, nil, nil, comp);\r\n    (void) is_sorted(par, nil, nil);\r\n    (void) is_sorted(par, nil, nil, comp);\r\n    (void) is_sorted_until(par, nil, nil);\r\n    (void) is_sorted_until(par, nil, nil, comp);\r\n    nth_element(par, nil, nil, nil);\r\n    nth_element(par, nil, nil, nil, comp);\r\n    (void) is_partitioned(par, nil, nil, pred);\r\n    partition(par, nil, nil, pred);\r\n    stable_partition(par, nil, nil, pred);\r\n    partition_copy(par, nil, nil, nil, nil, pred);\r\n    merge(par, nil, nil, nil, nil, nil);\r\n    merge(par, nil, nil, nil, nil, nil, comp);\r\n    inplace_merge(par, nil, nil, nil);\r\n    inplace_merge(par, nil, nil, nil, comp);\r\n    (void) includes(par, nil, nil, nil, nil);\r\n    (void) includes(par, nil, nil, nil, nil, comp);\r\n    set_union(par, nil, nil, nil, nil, nil);\r\n    set_union(par, nil, nil, nil, nil, nil, comp);\r\n    set_intersection(par, nil, nil, nil, nil, nil);\r\n    set_intersection(par, nil, nil, nil, nil, nil, comp);\r\n    set_difference(par, nil, nil, nil, nil, nil);\r\n    set_difference(par, nil, nil, nil, nil, nil, comp);\r\n    set_symmetric_difference(par, nil, nil, nil, nil, nil);\r\n    set_symmetric_difference(par, nil, nil, nil, nil, nil, comp);\r\n    (void) is_heap(par, nil, nil);\r\n    (void) is_heap(par, nil, nil, comp);\r\n    (void) is_heap_until(par, nil, nil);\r\n    (void) is_heap_until(par, nil, nil, comp);\r\n    (void) min_element(par, nil, nil);\r\n    (void) min_element(par, nil, nil, comp);\r\n    (void) max_element(par, nil, nil);\r\n    (void) max_element(par, nil, nil, comp);\r\n    (void) minmax_element(par, nil, nil);\r\n    (void) minmax_element(par, nil, nil, comp);\r\n    (void) lexicographical_compare(par, nil, nil, nil, nil);\r\n    (void) lexicographical_compare(par, nil, nil, nil, nil, comp);\r\n\r\n    (void) reduce(par, nil, nil, val, binop);\r\n    (void) transform_reduce(par, nil, nil, nil, val, binop, binop);\r\n    (void) transform_reduce(par, nil, nil, val, binop, unop);\r\n    exclusive_scan(par, nil, nil, nil, val, binop);\r\n    inclusive_scan(par, nil, nil, nil, binop);\r\n    inclusive_scan(par, nil, nil, nil, binop, val);\r\n    transform_exclusive_scan(par, nil, nil, nil, val, binop, unop);\r\n    transform_inclusive_scan(par, nil, nil, nil, binop, unop);\r\n    transform_inclusive_scan(par, nil, nil, nil, binop, unop, val);\r\n    adjacent_difference(par, nil, nil, nil, binop);\r\n\r\n    uninitialized_copy(par, nil, nil, nil);\r\n    uninitialized_copy_n(par, nil, zero, nil);\r\n    uninitialized_move(par, nil, nil, nil);\r\n    uninitialized_move_n(par, nil, zero, nil);\r\n    uninitialized_fill(par, nil, nil, val);\r\n    uninitialized_fill_n(par, nil, zero, val);\r\n#endif // __cpp_lib_execution\r\n\r\n#if _HAS_CXX20\r\n    // Non-modifying sequence operations\r\n    (void) ranges::all_of(nil, nil, pred);\r\n    (void) ranges::any_of(nil, nil, pred);\r\n    (void) ranges::none_of(nil, nil, pred);\r\n#if _HAS_CXX23\r\n    (void) ranges::contains(nil, nil, val);\r\n    (void) ranges::contains_subrange(nil, nil, nil, nil);\r\n#endif // _HAS_CXX23\r\n    ranges::for_each(nil, nil, pred);\r\n    ranges::for_each_n(nil, zero, pred);\r\n    (void) ranges::find(nil, nil, val);\r\n    (void) ranges::find_if(nil, nil, pred);\r\n    (void) ranges::find_if_not(nil, nil, pred);\r\n#if _HAS_CXX23\r\n    (void) ranges::find_last(nil, nil, val);\r\n    (void) ranges::find_last_if(nil, nil, pred);\r\n    (void) ranges::find_last_if_not(nil, nil, pred);\r\n#endif // _HAS_CXX23\r\n    (void) ranges::find_end(nil, nil, nil, nil);\r\n    (void) ranges::find_end(nil, nil, nil, nil, pred2);\r\n    (void) ranges::find_first_of(nil, nil, nil, nil);\r\n    (void) ranges::find_first_of(nil, nil, nil, nil, pred2);\r\n    (void) ranges::adjacent_find(nil, nil);\r\n    (void) ranges::adjacent_find(nil, nil, pred2);\r\n    (void) ranges::count(nil, nil, val);\r\n    (void) ranges::count_if(nil, nil, pred);\r\n    (void) ranges::mismatch(nil, nil, nil, nil);\r\n    (void) ranges::mismatch(nil, nil, nil, nil, pred2);\r\n    (void) ranges::equal(nil, nil, nil, nil);\r\n    (void) ranges::equal(nil, nil, nil, nil, pred2);\r\n    (void) ranges::is_permutation(nil, nil, nil, nil);\r\n    (void) ranges::is_permutation(nil, nil, nil, nil, pred2);\r\n    (void) ranges::search(nil, nil, nil, nil);\r\n    (void) ranges::search(nil, nil, nil, nil, pred2);\r\n    (void) ranges::search_n(nil, nil, zero, val);\r\n    (void) ranges::search_n(nil, nil, zero, val, pred2);\r\n#if _HAS_CXX23\r\n    (void) ranges::starts_with(nil, nil, nil, nil);\r\n    (void) ranges::starts_with(nil, nil, nil, nil, pred2);\r\n    (void) ranges::ends_with(nil, nil, nil, nil);\r\n    (void) ranges::ends_with(nil, nil, nil, nil, pred2);\r\n    (void) ranges::fold_left(nil, nil, val, binop);\r\n    (void) ranges::fold_left_first(nil, nil, binop);\r\n    (void) ranges::fold_right(nil, nil, val, binop);\r\n    (void) ranges::fold_right_last(nil, nil, binop);\r\n    (void) ranges::fold_left_with_iter(nil, nil, val, binop);\r\n    (void) ranges::fold_left_first_with_iter(nil, nil, binop);\r\n#endif // _HAS_CXX23\r\n    ranges::copy(nil, nil, nil);\r\n    ranges::copy_n(nil, zero, nil);\r\n    ranges::copy_if(nil, nil, nil, pred);\r\n    ranges::copy_backward(nil, nil, nil);\r\n    ranges::move(nil, nil, nil);\r\n    ranges::move_backward(nil, nil, nil);\r\n    ranges::swap_ranges(nil, nil, nil, nil);\r\n    ranges::transform(nil, nil, nil, unop);\r\n    ranges::transform(nil, nil, nil, nil, nil, binop);\r\n    ranges::replace(nil, nil, val, val);\r\n    ranges::replace_if(nil, nil, pred, val);\r\n    ranges::replace_copy(nil, nil, nil, val, val);\r\n    ranges::replace_copy_if(nil, nil, nil, pred, val);\r\n    ranges::fill(nil, nil, val);\r\n    ranges::fill_n(nil, zero, val);\r\n    ranges::generate(nil, nil, gen);\r\n    ranges::generate_n(nil, zero, gen);\r\n    (void) ranges::remove(nil, nil, val);\r\n    (void) ranges::remove_if(nil, nil, pred);\r\n    ranges::remove_copy(nil, nil, nil, val);\r\n    ranges::remove_copy_if(nil, nil, nil, pred);\r\n    (void) ranges::unique(nil, nil);\r\n    (void) ranges::unique(nil, nil, pred2);\r\n    ranges::unique_copy(nil, nil, nil);\r\n    ranges::unique_copy(nil, nil, nil, pred2);\r\n    ranges::reverse(nil, nil);\r\n    ranges::reverse_copy(nil, nil, nil);\r\n    ranges::rotate(nil, nil, nil);\r\n    ranges::rotate_copy(nil, nil, nil, nil);\r\n    ranges::sample(nil, nil, nil, zero, urbg);\r\n    ranges::shuffle(nil, nil, urbg);\r\n#if _HAS_CXX23\r\n    ranges::shift_left(nil, nil, 1729);\r\n    ranges::shift_right(nil, nil, 1729);\r\n#endif // _HAS_CXX23\r\n    ranges::sort(nil, nil);\r\n    ranges::sort(nil, nil, comp);\r\n    ranges::stable_sort(nil, nil);\r\n    ranges::stable_sort(nil, nil, comp);\r\n    ranges::partial_sort(nil, nil, nil);\r\n    ranges::partial_sort(nil, nil, nil, comp);\r\n    ranges::partial_sort_copy(nil, nil, nil, nil);\r\n    ranges::partial_sort_copy(nil, nil, nil, nil, comp);\r\n    (void) ranges::is_sorted(nil, nil);\r\n    (void) ranges::is_sorted(nil, nil, comp);\r\n    (void) ranges::is_sorted_until(nil, nil);\r\n    (void) ranges::is_sorted_until(nil, nil, comp);\r\n    ranges::nth_element(nil, nil, nil);\r\n    ranges::nth_element(nil, nil, nil, comp);\r\n    (void) ranges::lower_bound(nil, nil, val);\r\n    (void) ranges::lower_bound(nil, nil, val, comp);\r\n    (void) ranges::upper_bound(nil, nil, val);\r\n    (void) ranges::upper_bound(nil, nil, val, comp);\r\n    (void) ranges::equal_range(nil, nil, val);\r\n    (void) ranges::equal_range(nil, nil, val, comp);\r\n    (void) ranges::binary_search(nil, nil, val);\r\n    (void) ranges::binary_search(nil, nil, val, comp);\r\n    (void) ranges::is_partitioned(nil, nil, pred);\r\n    ranges::partition(nil, nil, pred);\r\n    ranges::stable_partition(nil, nil, pred);\r\n    ranges::partition_copy(nil, nil, nil, nil, pred);\r\n    (void) ranges::partition_point(nil, nil, pred);\r\n    ranges::merge(nil, nil, nil, nil, nil);\r\n    ranges::merge(nil, nil, nil, nil, nil, comp);\r\n    ranges::inplace_merge(nil, nil, nil);\r\n    ranges::inplace_merge(nil, nil, nil, comp);\r\n    (void) ranges::includes(nil, nil, nil, nil);\r\n    (void) ranges::includes(nil, nil, nil, nil, comp);\r\n    ranges::set_union(nil, nil, nil, nil, nil);\r\n    ranges::set_union(nil, nil, nil, nil, nil, comp);\r\n    ranges::set_intersection(nil, nil, nil, nil, nil);\r\n    ranges::set_intersection(nil, nil, nil, nil, nil, comp);\r\n    ranges::set_difference(nil, nil, nil, nil, nil);\r\n    ranges::set_difference(nil, nil, nil, nil, nil, comp);\r\n    ranges::set_symmetric_difference(nil, nil, nil, nil, nil);\r\n    ranges::set_symmetric_difference(nil, nil, nil, nil, nil, comp);\r\n    ranges::push_heap(nil, nil);\r\n    ranges::push_heap(nil, nil, comp);\r\n    ranges::pop_heap(nil, nil);\r\n    ranges::pop_heap(nil, nil, comp);\r\n    ranges::make_heap(nil, nil);\r\n    ranges::make_heap(nil, nil, comp);\r\n    ranges::sort_heap(nil, nil);\r\n    ranges::sort_heap(nil, nil, comp);\r\n    (void) ranges::is_heap(nil, nil);\r\n    (void) ranges::is_heap(nil, nil, comp);\r\n    (void) ranges::is_heap_until(nil, nil);\r\n    (void) ranges::is_heap_until(nil, nil, comp);\r\n    (void) ranges::min_element(nil, nil);\r\n    (void) ranges::min_element(nil, nil, comp);\r\n    (void) ranges::max_element(nil, nil);\r\n    (void) ranges::max_element(nil, nil, comp);\r\n    (void) ranges::minmax_element(nil, nil);\r\n    (void) ranges::minmax_element(nil, nil, comp);\r\n    (void) ranges::lexicographical_compare(nil, nil, nil, nil);\r\n    (void) ranges::lexicographical_compare(nil, nil, nil, nil, comp);\r\n    ranges::next_permutation(nil, nil);\r\n    ranges::next_permutation(nil, nil, comp);\r\n    ranges::prev_permutation(nil, nil);\r\n    ranges::prev_permutation(nil, nil, comp);\r\n\r\n    // Constrained numeric operations\r\n#if _HAS_CXX23\r\n    ranges::iota(nil, nil, val);\r\n#endif // _HAS_CXX23\r\n\r\n    // Constrained uninitialized memory algorithms\r\n    ranges::uninitialized_copy(nil, nil, nil, nil);\r\n    ranges::uninitialized_copy_n(nil, zero, nil, nil);\r\n    ranges::uninitialized_move(nil, nil, nil, nil);\r\n    ranges::uninitialized_move_n(nil, zero, nil, nil);\r\n    ranges::uninitialized_fill(nil, nil, val);\r\n    ranges::uninitialized_fill_n(nil, zero, val);\r\n#endif // _HAS_CXX20\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004129_conversion_in_new_numeric_algorithms/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004129_conversion_in_new_numeric_algorithms/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// intentionally test narrowing conversion from int64_t to int32_t\r\n#pragma warning(disable : 4244)\r\n\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <execution>\r\n#include <numeric>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nstruct implicitly_convertible_to_i32_only {\r\n    int32_t n;\r\n\r\n    template <class = void>\r\n    explicit operator int32_t() const = delete;\r\n\r\n    operator int64_t() const noexcept {\r\n        return n;\r\n    }\r\n};\r\n\r\nstatic_assert(!is_constructible_v<int32_t, implicitly_convertible_to_i32_only>);\r\nstatic_assert(is_convertible_v<implicitly_convertible_to_i32_only, int32_t>);\r\n\r\nstruct implicitly_validating_converter {\r\n    implicitly_convertible_to_i32_only operator()(int n) const noexcept {\r\n        return {n};\r\n    }\r\n};\r\n\r\nstruct explicitly_convertible_to_i32_only {\r\n    int32_t n;\r\n\r\n    explicit operator int32_t() const noexcept {\r\n        return n;\r\n    }\r\n};\r\n\r\nstatic_assert(is_constructible_v<int32_t, explicitly_convertible_to_i32_only>);\r\nstatic_assert(!is_convertible_v<explicitly_convertible_to_i32_only, int32_t>);\r\n\r\nstruct transformation_validating_converter {\r\n    explicitly_convertible_to_i32_only operator()(int n) const noexcept {\r\n        return {n};\r\n    }\r\n};\r\n\r\nstruct implicitly_validating_plus {\r\n    implicitly_convertible_to_i32_only operator()(\r\n        implicitly_convertible_to_i32_only l, implicitly_convertible_to_i32_only r) const noexcept {\r\n        return implicitly_convertible_to_i32_only{l.n + r.n};\r\n    }\r\n\r\n    implicitly_convertible_to_i32_only operator()(int32_t l, implicitly_convertible_to_i32_only r) const noexcept {\r\n        return implicitly_convertible_to_i32_only{l + r.n};\r\n    }\r\n\r\n    implicitly_convertible_to_i32_only operator()(implicitly_convertible_to_i32_only l, int32_t r) const noexcept {\r\n        return implicitly_convertible_to_i32_only{l.n + r};\r\n    }\r\n\r\n    implicitly_convertible_to_i32_only operator()(int32_t l, int32_t r) const noexcept {\r\n        return implicitly_convertible_to_i32_only{l + r};\r\n    }\r\n};\r\n\r\nstruct implicitly_validating_plus_for_transformation {\r\n    implicitly_convertible_to_i32_only operator()(\r\n        explicitly_convertible_to_i32_only l, explicitly_convertible_to_i32_only r) const noexcept {\r\n        return implicitly_convertible_to_i32_only{l.n + r.n};\r\n    }\r\n\r\n    implicitly_convertible_to_i32_only operator()(int32_t l, explicitly_convertible_to_i32_only r) const noexcept {\r\n        return implicitly_convertible_to_i32_only{l + r.n};\r\n    }\r\n\r\n    implicitly_convertible_to_i32_only operator()(explicitly_convertible_to_i32_only l, int32_t r) const noexcept {\r\n        return implicitly_convertible_to_i32_only{l.n + r};\r\n    }\r\n\r\n    implicitly_convertible_to_i32_only operator()(int32_t l, int32_t r) const noexcept {\r\n        return implicitly_convertible_to_i32_only{l + r};\r\n    }\r\n};\r\n\r\nstruct implicitly_validating_multiplies {\r\n    implicitly_convertible_to_i32_only operator()(\r\n        implicitly_convertible_to_i32_only l, implicitly_convertible_to_i32_only r) const noexcept {\r\n        return implicitly_convertible_to_i32_only{l.n * r.n};\r\n    }\r\n\r\n    implicitly_convertible_to_i32_only operator()(int32_t l, implicitly_convertible_to_i32_only r) const noexcept {\r\n        return implicitly_convertible_to_i32_only{l * r.n};\r\n    }\r\n\r\n    implicitly_convertible_to_i32_only operator()(implicitly_convertible_to_i32_only l, int32_t r) const noexcept {\r\n        return implicitly_convertible_to_i32_only{l.n * r};\r\n    }\r\n\r\n    implicitly_convertible_to_i32_only operator()(int32_t l, int32_t r) const noexcept {\r\n        return implicitly_convertible_to_i32_only{l * r};\r\n    }\r\n};\r\n\r\nvoid test_copy_initialization_for_numeric_algorithms() {\r\n    int arr[1]{};\r\n    implicitly_convertible_to_i32_only brr[1]{};\r\n\r\n    assert(reduce(arr, arr, int32_t{}, implicitly_validating_plus{}) == 0);\r\n    assert(reduce(brr, brr, int32_t{}, implicitly_validating_plus{}) == 0);\r\n\r\n    assert(transform_reduce(arr, arr, arr, int32_t{}, implicitly_validating_plus{}, implicitly_validating_multiplies{})\r\n           == 0);\r\n    assert(transform_reduce(arr, arr, brr, int32_t{}, implicitly_validating_plus{}, implicitly_validating_multiplies{})\r\n           == 0);\r\n\r\n    assert(transform_reduce(arr, arr, int32_t{}, implicitly_validating_plus{}, implicitly_validating_converter{}) == 0);\r\n    assert(transform_reduce(brr, brr, int32_t{}, implicitly_validating_plus{}, implicitly_validating_converter{}) == 0);\r\n\r\n    assert(exclusive_scan(arr, arr, arr, int32_t{}, implicitly_validating_plus{}) == arr);\r\n\r\n    assert(inclusive_scan(arr, arr, arr, implicitly_validating_plus{}) == arr);\r\n    assert(inclusive_scan(arr, arr, arr, implicitly_validating_plus{}, int32_t{}) == arr);\r\n\r\n    assert(transform_exclusive_scan(arr, arr, arr, int32_t{}, implicitly_validating_plus_for_transformation{},\r\n               transformation_validating_converter{})\r\n           == arr);\r\n\r\n    assert(transform_inclusive_scan(brr, brr, brr, implicitly_validating_plus{}, implicitly_validating_converter{})\r\n           == brr);\r\n    assert(transform_inclusive_scan(arr, arr, arr, implicitly_validating_plus_for_transformation{},\r\n               transformation_validating_converter{}, int32_t{})\r\n           == arr);\r\n}\r\n\r\ntemplate <const auto& ExPo>\r\nvoid test_copy_initialization_for_parallel_numeric_algorithms() {\r\n    int arr[1]{};\r\n    implicitly_convertible_to_i32_only brr[1]{};\r\n\r\n    assert(reduce(ExPo, arr, arr, int32_t{}, implicitly_validating_plus{}) == 0);\r\n    assert(reduce(ExPo, brr, brr, int32_t{}, implicitly_validating_plus{}) == 0);\r\n\r\n    assert(transform_reduce(\r\n               ExPo, arr, arr, arr, int32_t{}, implicitly_validating_plus{}, implicitly_validating_multiplies{})\r\n           == 0);\r\n    assert(transform_reduce(\r\n               ExPo, arr, arr, brr, int32_t{}, implicitly_validating_plus{}, implicitly_validating_multiplies{})\r\n           == 0);\r\n\r\n    assert(transform_reduce(ExPo, arr, arr, int32_t{}, implicitly_validating_plus{}, implicitly_validating_converter{})\r\n           == 0);\r\n    assert(transform_reduce(ExPo, brr, brr, int32_t{}, implicitly_validating_plus{}, implicitly_validating_converter{})\r\n           == 0);\r\n\r\n    assert(exclusive_scan(ExPo, arr, arr, arr, int32_t{}, implicitly_validating_plus{}) == arr);\r\n\r\n    assert(inclusive_scan(ExPo, arr, arr, arr, implicitly_validating_plus{}) == arr);\r\n    assert(inclusive_scan(ExPo, arr, arr, arr, implicitly_validating_plus{}, int32_t{}) == arr);\r\n\r\n    assert(transform_exclusive_scan(ExPo, arr, arr, arr, int32_t{}, implicitly_validating_plus_for_transformation{},\r\n               transformation_validating_converter{})\r\n           == arr);\r\n\r\n    assert(\r\n        transform_inclusive_scan(ExPo, brr, brr, brr, implicitly_validating_plus{}, implicitly_validating_converter{})\r\n        == brr);\r\n    assert(transform_inclusive_scan(ExPo, arr, arr, arr, implicitly_validating_plus_for_transformation{},\r\n               transformation_validating_converter{}, int32_t{})\r\n           == arr);\r\n}\r\n\r\nint main() {\r\n    test_copy_initialization_for_numeric_algorithms();\r\n    test_copy_initialization_for_parallel_numeric_algorithms<seq>();\r\n    test_copy_initialization_for_parallel_numeric_algorithms<par>();\r\n    test_copy_initialization_for_parallel_numeric_algorithms<par_unseq>();\r\n#if _HAS_CXX20\r\n    test_copy_initialization_for_parallel_numeric_algorithms<unseq>();\r\n#endif // _HAS_CXX20\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004201_chrono_formatter/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004201_chrono_formatter/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <format>\r\n#include <string>\r\n\r\nusing namespace std::literals::chrono_literals;\r\n\r\nint main() {\r\n    assert(std::format(\"[{:20%T}]\", 314159s) == \"[87:15:59            ]\");\r\n\r\n    // std::formatter specializations for <chrono> types used to ignore dynamically provided width\r\n    assert(std::format(\"[{:{}%T}]\", 314159s, 20) == \"[87:15:59            ]\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004275_seeking_fancy_iterators/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004275_seeking_fancy_iterators/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n// some portions of this file are derived from libc++'s test files:\r\n// * support/min_allocator.h\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <iterator>\r\n#include <memory>\r\n#include <string>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T, class = enable_if<false>>\r\nclass min_pointer;\r\ntemplate <class T, class ID>\r\nclass min_pointer<const T, ID>;\r\ntemplate <class ID>\r\nclass min_pointer<void, ID>;\r\ntemplate <class ID>\r\nclass min_pointer<const void, ID>;\r\ntemplate <class T>\r\nclass min_allocator;\r\n\r\ntemplate <class ID>\r\nclass min_pointer<const void, ID> {\r\n    const void* ptr_;\r\n\r\npublic:\r\n    min_pointer() = default;\r\n    min_pointer(nullptr_t) noexcept : ptr_(nullptr) {}\r\n    template <class T>\r\n    min_pointer(min_pointer<T, ID> p) noexcept : ptr_(p.ptr_) {}\r\n\r\n    explicit operator bool() const {\r\n        return ptr_ != nullptr;\r\n    }\r\n\r\n    friend bool operator==(min_pointer x, min_pointer y) {\r\n        return x.ptr_ == y.ptr_;\r\n    }\r\n    friend bool operator!=(min_pointer x, min_pointer y) {\r\n        return !(x == y);\r\n    }\r\n    template <class U, class XID>\r\n    friend class min_pointer;\r\n};\r\n\r\ntemplate <class ID>\r\nclass min_pointer<void, ID> {\r\n    void* ptr_;\r\n\r\npublic:\r\n    min_pointer() = default;\r\n    constexpr min_pointer(nullptr_t) noexcept : ptr_(nullptr) {}\r\n    template <class T, class = enable_if_t<!is_const_v<T>>>\r\n    constexpr min_pointer(min_pointer<T, ID> p) noexcept : ptr_(p.ptr_) {}\r\n\r\n    constexpr explicit operator bool() const {\r\n        return ptr_ != nullptr;\r\n    }\r\n\r\n    friend constexpr bool operator==(min_pointer x, min_pointer y) {\r\n        return x.ptr_ == y.ptr_;\r\n    }\r\n    friend constexpr bool operator!=(min_pointer x, min_pointer y) {\r\n        return !(x == y);\r\n    }\r\n    template <class U, class XID>\r\n    friend class min_pointer;\r\n};\r\n\r\ntemplate <class T, class ID>\r\nclass min_pointer {\r\n    T* ptr_;\r\n\r\n    constexpr explicit min_pointer(T* p) noexcept : ptr_(p) {}\r\n\r\npublic:\r\n    min_pointer() = default;\r\n    constexpr min_pointer(nullptr_t) noexcept : ptr_(nullptr) {}\r\n    constexpr explicit min_pointer(min_pointer<void, ID> p) noexcept : ptr_(static_cast<T*>(p.ptr_)) {}\r\n\r\n    constexpr explicit operator bool() const {\r\n        return ptr_ != nullptr;\r\n    }\r\n\r\n    using difference_type   = ptrdiff_t;\r\n    using reference         = T&;\r\n    using pointer           = T*;\r\n    using value_type        = T;\r\n    using iterator_category = random_access_iterator_tag;\r\n\r\n    constexpr reference operator*() const {\r\n        if (ptr_ == nullptr) {\r\n            abort();\r\n        }\r\n        return *ptr_;\r\n    }\r\n    constexpr pointer operator->() const {\r\n        return ptr_;\r\n    }\r\n\r\n    constexpr min_pointer& operator++() {\r\n        ++ptr_;\r\n        return *this;\r\n    }\r\n    constexpr min_pointer operator++(int) {\r\n        min_pointer tmp(*this);\r\n        ++ptr_;\r\n        return tmp;\r\n    }\r\n\r\n    constexpr min_pointer& operator--() {\r\n        --ptr_;\r\n        return *this;\r\n    }\r\n    constexpr min_pointer operator--(int) {\r\n        min_pointer tmp(*this);\r\n        --ptr_;\r\n        return tmp;\r\n    }\r\n\r\n    constexpr min_pointer& operator+=(difference_type n) {\r\n        ptr_ += n;\r\n        return *this;\r\n    }\r\n    constexpr min_pointer& operator-=(difference_type n) {\r\n        ptr_ -= n;\r\n        return *this;\r\n    }\r\n\r\n    constexpr min_pointer operator+(difference_type n) const {\r\n        min_pointer tmp(*this);\r\n        tmp += n;\r\n        return tmp;\r\n    }\r\n\r\n    friend constexpr min_pointer operator+(difference_type n, min_pointer x) {\r\n        return x + n;\r\n    }\r\n\r\n    constexpr min_pointer operator-(difference_type n) const {\r\n        min_pointer tmp(*this);\r\n        tmp -= n;\r\n        return tmp;\r\n    }\r\n\r\n    friend constexpr difference_type operator-(min_pointer x, min_pointer y) {\r\n        return x.ptr_ - y.ptr_;\r\n    }\r\n\r\n    constexpr reference operator[](difference_type n) const {\r\n        return ptr_[n];\r\n    }\r\n\r\n    friend constexpr bool operator<(min_pointer x, min_pointer y) {\r\n        return x.ptr_ < y.ptr_;\r\n    }\r\n    friend constexpr bool operator>(min_pointer x, min_pointer y) {\r\n        return y < x;\r\n    }\r\n    friend constexpr bool operator<=(min_pointer x, min_pointer y) {\r\n        return !(y < x);\r\n    }\r\n    friend constexpr bool operator>=(min_pointer x, min_pointer y) {\r\n        return !(x < y);\r\n    }\r\n\r\n    static constexpr min_pointer pointer_to(T& t) {\r\n        return min_pointer(addressof(t));\r\n    }\r\n\r\n    friend constexpr bool operator==(min_pointer x, min_pointer y) {\r\n        return x.ptr_ == y.ptr_;\r\n    }\r\n    friend constexpr bool operator!=(min_pointer x, min_pointer y) {\r\n        return !(x == y);\r\n    }\r\n    template <class U, class XID>\r\n    friend class min_pointer;\r\n    template <class U>\r\n    friend class min_allocator;\r\n};\r\n\r\ntemplate <class T, class ID>\r\nclass min_pointer<const T, ID> {\r\n    const T* ptr_;\r\n\r\n    constexpr explicit min_pointer(const T* p) : ptr_(p) {}\r\n\r\npublic:\r\n    min_pointer() = default;\r\n    constexpr min_pointer(nullptr_t) : ptr_(nullptr) {}\r\n    constexpr min_pointer(min_pointer<T, ID> p) : ptr_(p.ptr_) {}\r\n    constexpr explicit min_pointer(min_pointer<const void, ID> p) : ptr_(static_cast<const T*>(p.ptr_)) {}\r\n\r\n    constexpr explicit operator bool() const {\r\n        return ptr_ != nullptr;\r\n    }\r\n\r\n    using difference_type   = ptrdiff_t;\r\n    using reference         = const T&;\r\n    using pointer           = const T*;\r\n    using value_type        = T;\r\n    using iterator_category = random_access_iterator_tag;\r\n\r\n    constexpr reference operator*() const {\r\n        if (ptr_ == nullptr) {\r\n            abort();\r\n        }\r\n        return *ptr_;\r\n    }\r\n    constexpr pointer operator->() const {\r\n        return ptr_;\r\n    }\r\n\r\n    constexpr min_pointer& operator++() {\r\n        ++ptr_;\r\n        return *this;\r\n    }\r\n    constexpr min_pointer operator++(int) {\r\n        min_pointer tmp(*this);\r\n        ++ptr_;\r\n        return tmp;\r\n    }\r\n\r\n    constexpr min_pointer& operator--() {\r\n        --ptr_;\r\n        return *this;\r\n    }\r\n    constexpr min_pointer operator--(int) {\r\n        min_pointer tmp(*this);\r\n        --ptr_;\r\n        return tmp;\r\n    }\r\n\r\n    constexpr min_pointer& operator+=(difference_type n) {\r\n        ptr_ += n;\r\n        return *this;\r\n    }\r\n    constexpr min_pointer& operator-=(difference_type n) {\r\n        ptr_ -= n;\r\n        return *this;\r\n    }\r\n\r\n    constexpr min_pointer operator+(difference_type n) const {\r\n        min_pointer tmp(*this);\r\n        tmp += n;\r\n        return tmp;\r\n    }\r\n\r\n    friend constexpr min_pointer operator+(difference_type n, min_pointer x) {\r\n        return x + n;\r\n    }\r\n\r\n    constexpr min_pointer operator-(difference_type n) const {\r\n        min_pointer tmp(*this);\r\n        tmp -= n;\r\n        return tmp;\r\n    }\r\n\r\n    friend constexpr difference_type operator-(min_pointer x, min_pointer y) {\r\n        return x.ptr_ - y.ptr_;\r\n    }\r\n\r\n    constexpr reference operator[](difference_type n) const {\r\n        return ptr_[n];\r\n    }\r\n\r\n    friend constexpr bool operator<(min_pointer x, min_pointer y) {\r\n        return x.ptr_ < y.ptr_;\r\n    }\r\n    friend constexpr bool operator>(min_pointer x, min_pointer y) {\r\n        return y < x;\r\n    }\r\n    friend constexpr bool operator<=(min_pointer x, min_pointer y) {\r\n        return !(y < x);\r\n    }\r\n    friend constexpr bool operator>=(min_pointer x, min_pointer y) {\r\n        return !(x < y);\r\n    }\r\n\r\n    static constexpr min_pointer pointer_to(const T& t) {\r\n        return min_pointer(addressof(t));\r\n    }\r\n\r\n    friend constexpr bool operator==(min_pointer x, min_pointer y) {\r\n        return x.ptr_ == y.ptr_;\r\n    }\r\n    friend constexpr bool operator!=(min_pointer x, min_pointer y) {\r\n        return x.ptr_ != y.ptr_;\r\n    }\r\n    friend constexpr bool operator==(min_pointer x, nullptr_t) {\r\n        return x.ptr_ == nullptr;\r\n    }\r\n    friend constexpr bool operator!=(min_pointer x, nullptr_t) {\r\n        return x.ptr_ != nullptr;\r\n    }\r\n    friend constexpr bool operator==(nullptr_t, min_pointer x) {\r\n        return x.ptr_ == nullptr;\r\n    }\r\n    friend constexpr bool operator!=(nullptr_t, min_pointer x) {\r\n        return x.ptr_ != nullptr;\r\n    }\r\n    template <class U, class XID>\r\n    friend class min_pointer;\r\n};\r\n\r\n#if _HAS_CXX20\r\n#define CONSTEXPR20 constexpr\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n#define CONSTEXPR20 inline\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\ntemplate <class T>\r\nclass min_allocator {\r\npublic:\r\n    using value_type = T;\r\n    using pointer    = min_pointer<T>;\r\n\r\n    min_allocator() = default;\r\n    template <class U>\r\n    constexpr min_allocator(min_allocator<U>) noexcept {}\r\n\r\n    CONSTEXPR20 pointer allocate(ptrdiff_t n) {\r\n        return pointer(allocator<T>().allocate(n));\r\n    }\r\n\r\n    CONSTEXPR20 void deallocate(pointer p, ptrdiff_t n) {\r\n        allocator<T>().deallocate(p.ptr_, n);\r\n    }\r\n\r\n    friend constexpr bool operator==(min_allocator, min_allocator) {\r\n        return true;\r\n    }\r\n    friend constexpr bool operator!=(min_allocator x, min_allocator y) {\r\n        return !(x == y);\r\n    }\r\n};\r\n\r\nCONSTEXPR20 bool test_seeking_vector_iterators() {\r\n    using VIt = vector<int, min_allocator<int>>::iterator;\r\n    assert(find(VIt{}, VIt{}, 0) == VIt{});\r\n\r\n    using VCIt = vector<int, min_allocator<int>>::const_iterator;\r\n    assert(find(VCIt{}, VCIt{}, 0) == VCIt{});\r\n\r\n    return true;\r\n}\r\n\r\nCONSTEXPR20 bool test_seeking_string_iterators() {\r\n    using SIt = basic_string<char, char_traits<char>, min_allocator<char>>::iterator;\r\n    assert(find(SIt{}, SIt{}, '\\0') == SIt{});\r\n\r\n    using SCIt = basic_string<char, char_traits<char>, min_allocator<char>>::const_iterator;\r\n    assert(find(SCIt{}, SCIt{}, '\\0') == SCIt{});\r\n\r\n    return true;\r\n}\r\n\r\nCONSTEXPR20 bool test_vector_iterators_ordering() {\r\n    using VIt  = vector<int, min_allocator<int>>::iterator;\r\n    using VCIt = vector<int, min_allocator<int>>::const_iterator;\r\n\r\n    assert(!(VIt{} < VIt{}));\r\n    assert(!(VIt{} > VIt{}));\r\n    assert(VIt{} <= VIt{});\r\n    assert(VIt{} >= VIt{});\r\n\r\n    assert(!(VCIt{} < VCIt{}));\r\n    assert(!(VCIt{} > VCIt{}));\r\n    assert(VCIt{} <= VCIt{});\r\n    assert(VCIt{} >= VCIt{});\r\n\r\n    assert(!(VIt{} < VCIt{}));\r\n    assert(!(VIt{} > VCIt{}));\r\n    assert(VIt{} <= VCIt{});\r\n    assert(VIt{} >= VCIt{});\r\n\r\n    assert(!(VCIt{} < VIt{}));\r\n    assert(!(VCIt{} > VIt{}));\r\n    assert(VCIt{} <= VIt{});\r\n    assert(VCIt{} >= VIt{});\r\n\r\n#if _HAS_CXX20\r\n    assert(VIt{} <=> VIt{} == strong_ordering::equal);\r\n    assert(VCIt{} <=> VCIt{} == strong_ordering::equal);\r\n    assert(VIt{} <=> VCIt{} == strong_ordering::equal);\r\n    assert(VCIt{} <=> VIt{} == strong_ordering::equal);\r\n#endif // _HAS_CXX20\r\n\r\n    return true;\r\n}\r\n\r\nCONSTEXPR20 bool test_string_iterators_ordering() {\r\n    using SIt  = basic_string<char, char_traits<char>, min_allocator<char>>::iterator;\r\n    using SCIt = basic_string<char, char_traits<char>, min_allocator<char>>::const_iterator;\r\n\r\n    assert(!(SIt{} < SIt{}));\r\n    assert(!(SIt{} > SIt{}));\r\n    assert(SIt{} <= SIt{});\r\n    assert(SIt{} >= SIt{});\r\n\r\n    assert(!(SCIt{} < SCIt{}));\r\n    assert(!(SCIt{} > SCIt{}));\r\n    assert(SCIt{} <= SCIt{});\r\n    assert(SCIt{} >= SCIt{});\r\n\r\n    assert(!(SIt{} < SCIt{}));\r\n    assert(!(SIt{} > SCIt{}));\r\n    assert(SIt{} <= SCIt{});\r\n    assert(SIt{} >= SCIt{});\r\n\r\n    assert(!(SCIt{} < SIt{}));\r\n    assert(!(SCIt{} > SIt{}));\r\n    assert(SCIt{} <= SIt{});\r\n    assert(SCIt{} >= SIt{});\r\n\r\n#if _HAS_CXX20\r\n    assert(SIt{} <=> SIt{} == strong_ordering::equal);\r\n    assert(SCIt{} <=> SCIt{} == strong_ordering::equal);\r\n    assert(SIt{} <=> SCIt{} == strong_ordering::equal);\r\n    assert(SCIt{} <=> SIt{} == strong_ordering::equal);\r\n#endif // _HAS_CXX20\r\n\r\n    return true;\r\n}\r\n\r\n#if _HAS_CXX20\r\nstatic_assert(test_seeking_vector_iterators());\r\nstatic_assert(test_seeking_string_iterators());\r\nstatic_assert(test_vector_iterators_ordering());\r\nstatic_assert(test_string_iterators_ordering());\r\n#endif // _HAS_CXX20\r\n\r\nint main() {\r\n    test_seeking_vector_iterators();\r\n    test_seeking_string_iterators();\r\n    test_vector_iterators_ordering();\r\n    test_string_iterators_ordering();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004388_unordered_meow_operator_equal/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004388_unordered_meow_operator_equal/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <map>\r\n#include <set>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\n// Functors for comparison and hashing\r\n// based on modular arithmetic equivalence classes\r\ntemplate <int N>\r\nstruct ModLess {\r\n    bool operator()(int lhs, int rhs) const {\r\n        return (lhs % N) < (rhs % N);\r\n    }\r\n};\r\n\r\ntemplate <int N>\r\nstruct ModEqual {\r\n    bool operator()(int lhs, int rhs) const {\r\n        return (lhs % N) == (rhs % N);\r\n    }\r\n};\r\n\r\ntemplate <int N>\r\nstruct ModHash {\r\n    size_t operator()(int value) const {\r\n        return static_cast<size_t>(value % N);\r\n    }\r\n};\r\n\r\n// Overloaded function to get a key from a set / map's value_type\r\nconst int& get_key(const int& value) {\r\n    return value;\r\n}\r\nconst int& get_key(const pair<const int, int>& p) {\r\n    return p.first;\r\n}\r\n\r\n// Equality comparison for unordered sets and maps as per the C++ standard\r\n// It also gives the correct result for associative containers (though is sub-optimal)\r\ntemplate <typename Container>\r\nbool std_equal(const Container& lhs, const Container& rhs) {\r\n    if (lhs.size() != rhs.size()) {\r\n        return false;\r\n    }\r\n\r\n    for (auto it = lhs.cbegin(); it != lhs.cend();) {\r\n        const auto& key    = get_key(*it);\r\n        const auto l_range = lhs.equal_range(key);\r\n        const auto r_range = rhs.equal_range(key);\r\n\r\n        if (!is_permutation(l_range.first, l_range.second, r_range.first, r_range.second)) {\r\n            return false;\r\n        }\r\n        it = l_range.second;\r\n    }\r\n    return true;\r\n}\r\n\r\ntemplate <typename Map>\r\nvoid test_maps() {\r\n    // These maps should compare not equal, even though their elements are equivalent\r\n    Map map1 = {{1, 1}, {2, 2}};\r\n    Map map2 = {{21, 1}, {12, 2}};\r\n\r\n    assert(map1 != map2);\r\n    assert(!std_equal(map1, map2));\r\n\r\n    // Test a case that should compare equal\r\n    Map map3 = {{12, 2}, {21, 1}};\r\n    assert(map2 == map3);\r\n    assert(std_equal(map2, map3));\r\n}\r\n\r\ntemplate <typename Set>\r\nvoid test_sets() {\r\n    // These sets should compare not equal, even though their elements are equivalent\r\n    Set set1 = {1, 2};\r\n    Set set2 = {21, 12};\r\n\r\n    assert(set1 != set2);\r\n    assert(!std_equal(set1, set2));\r\n\r\n    // Test a case that should compare equal\r\n    Set set3 = {12, 21};\r\n    assert(set2 == set3);\r\n    assert(std_equal(set2, set3));\r\n}\r\n\r\n// GH-4388: <unordered_set>, <unordered_map>: operator== is incorrect with custom equivalence functor\r\nvoid test_gh_4388() {\r\n    using Set               = set<int, ModLess<10>>;\r\n    using MultiSet          = multiset<int, ModLess<10>>;\r\n    using UnorderedSet      = unordered_set<int, ModHash<10>, ModEqual<10>>;\r\n    using UnorderedMultiSet = unordered_multiset<int, ModHash<10>, ModEqual<10>>;\r\n\r\n    test_sets<Set>();\r\n    test_sets<MultiSet>();\r\n    test_sets<UnorderedSet>();\r\n    test_sets<UnorderedMultiSet>();\r\n\r\n    using Map               = map<int, int, ModLess<10>>;\r\n    using MultiMap          = multimap<int, int, ModLess<10>>;\r\n    using UnorderedMap      = unordered_map<int, int, ModHash<10>, ModEqual<10>>;\r\n    using UnorderedMultiMap = unordered_multimap<int, int, ModHash<10>, ModEqual<10>>;\r\n\r\n    test_maps<Map>();\r\n    test_maps<MultiMap>();\r\n    test_maps<UnorderedMap>();\r\n    test_maps<UnorderedMultiMap>();\r\n}\r\n\r\nint main() {\r\n    test_gh_4388();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004477_mdspan_warning_5246/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w15246\"\r\n"
  },
  {
    "path": "tests/std/tests/GH_004477_mdspan_warning_5246/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cstddef>\r\n#include <mdspan>\r\n\r\nusing namespace std;\r\n\r\n// Test GH-4477 \"Using std::mdspan results in multiple warnings (C5246)\"\r\nvoid test_gh_4477() {\r\n    array test_data{0, 1, 2, 3, 4, 5};\r\n    mdspan<int, dextents<size_t, 2>> test_span(test_data.data(), 2, 3);\r\n    (void) test_span;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004597_self_swap/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004597_self_swap/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <utility>\r\n\r\nstruct swap_counter {\r\n    unsigned int* pcnt_ = nullptr;\r\n\r\n    friend _CONSTEXPR20 void swap(swap_counter& lhs, swap_counter& rhs) noexcept {\r\n        assert(lhs.pcnt_ != nullptr);\r\n        assert(rhs.pcnt_ != nullptr);\r\n        std::swap(lhs.pcnt_, rhs.pcnt_);\r\n        ++*lhs.pcnt_;\r\n        ++*rhs.pcnt_;\r\n    }\r\n\r\n    _CONSTEXPR20 bool operator==(unsigned int x) const {\r\n        assert(pcnt_ != nullptr);\r\n        return *pcnt_ == x;\r\n    }\r\n};\r\n\r\n\r\n// Test GH-4597 \"<utility>: Side effects in self-swaps of pair are skipped\"\r\n_CONSTEXPR20 bool test_gh_4597() {\r\n    {\r\n        unsigned int cnt{};\r\n        std::pair<swap_counter, int> pr{swap_counter{&cnt}, 10};\r\n        pr.swap(pr);\r\n        assert(cnt == 2u);\r\n        assert(pr.first == 2u);\r\n        assert(pr.second == 10);\r\n    }\r\n\r\n    {\r\n        unsigned int cnt{};\r\n        std::pair<swap_counter, int> p1{swap_counter{&cnt}, 10};\r\n        std::pair<swap_counter, int> p2{swap_counter{&cnt}, 11};\r\n        p1.swap(p2);\r\n        assert(cnt == 2u);\r\n        assert(p1.first == 2u);\r\n        assert(p1.second == 11);\r\n        assert(p2.first == 2u);\r\n        assert(p2.second == 10);\r\n    }\r\n\r\n    {\r\n        unsigned int c1{};\r\n        unsigned int c2{2};\r\n        std::pair<swap_counter, int> p1{swap_counter{&c1}, 11};\r\n        std::pair<swap_counter, int> p2{swap_counter{&c2}, 13};\r\n        p1.swap(p2);\r\n        assert(c1 == 1u);\r\n        assert(c2 == 3u);\r\n        assert(p1.first == 3u);\r\n        assert(p1.second == 13);\r\n        assert(p2.first == 1u);\r\n        assert(p2.second == 11);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    {\r\n        unsigned int c1{};\r\n        unsigned int c2{2};\r\n        int i1 = 11;\r\n        int i2 = 13;\r\n        swap_counter s1{&c1};\r\n        swap_counter s2{&c2};\r\n        const std::pair<swap_counter&, int&> p1{s1, i1};\r\n        const std::pair<swap_counter&, int&> p2{s2, i2};\r\n        p1.swap(p2);\r\n        assert(c1 == 1u);\r\n        assert(c2 == 3u);\r\n        assert(p1.first == 3u);\r\n        assert(p1.second == 13);\r\n        assert(p2.first == 1u);\r\n        assert(p2.second == 11);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n#if _HAS_CXX20\r\n    static_assert(test_gh_4597());\r\n#endif // _HAS_CXX20\r\n    assert(test_gh_4597());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004609_heterogeneous_cmp_overloads/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004609_heterogeneous_cmp_overloads/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cmath>\r\n#include <limits>\r\n#include <math.h>\r\n#include <type_traits>\r\n\r\ntemplate <class F1, class F2>\r\nvoid test_heterogeneous_floating_overloads() {\r\n    constexpr F1 lhs   = static_cast<F1>(3.14);\r\n    constexpr F1 lhseq = static_cast<F1>(23.5);\r\n    constexpr F1 linf  = std::numeric_limits<F1>::infinity();\r\n    constexpr F1 lnan  = std::numeric_limits<F1>::quiet_NaN();\r\n\r\n    constexpr F2 rhs   = static_cast<F2>(17.29);\r\n    constexpr F2 rhseq = static_cast<F2>(23.5);\r\n    constexpr F2 rinf  = std::numeric_limits<F2>::infinity();\r\n    constexpr F2 rnan  = std::numeric_limits<F2>::quiet_NaN();\r\n\r\n    // test overloads in std\r\n\r\n    assert(!std::isgreater(lhs, rhs));\r\n    assert(!std::isgreater(lhs, rinf));\r\n    assert(std::isgreater(lhs, -rinf));\r\n    assert(std::isgreater(rhs, lhs));\r\n    assert(!std::isgreater(rhs, linf));\r\n    assert(std::isgreater(rhs, -linf));\r\n    assert(!std::isgreater(lhseq, rhseq));\r\n    assert(!std::isgreater(rhseq, lhseq));\r\n    assert(!std::isgreater(linf, rinf));\r\n    assert(!std::isgreater(rinf, linf));\r\n    assert(!std::isgreater(lnan, rhs));\r\n    assert(!std::isgreater(lnan, rinf));\r\n    assert(!std::isgreater(lnan, -rinf));\r\n    assert(!std::isgreater(lnan, rnan));\r\n    assert(!std::isgreater(rnan, lhs));\r\n    assert(!std::isgreater(rnan, linf));\r\n    assert(!std::isgreater(rnan, -linf));\r\n    assert(!std::isgreater(rnan, lnan));\r\n\r\n    assert(!std::isgreaterequal(lhs, rhs));\r\n    assert(!std::isgreaterequal(lhs, rinf));\r\n    assert(std::isgreaterequal(lhs, -rinf));\r\n    assert(std::isgreaterequal(rhs, lhs));\r\n    assert(!std::isgreaterequal(rhs, linf));\r\n    assert(std::isgreaterequal(rhs, -linf));\r\n    assert(std::isgreaterequal(lhseq, rhseq));\r\n    assert(std::isgreaterequal(rhseq, lhseq));\r\n    assert(std::isgreaterequal(linf, rinf));\r\n    assert(std::isgreaterequal(rinf, linf));\r\n    assert(!std::isgreaterequal(lnan, rhs));\r\n    assert(!std::isgreaterequal(lnan, rinf));\r\n    assert(!std::isgreaterequal(lnan, -rinf));\r\n    assert(!std::isgreaterequal(lnan, rnan));\r\n    assert(!std::isgreaterequal(rnan, lhs));\r\n    assert(!std::isgreaterequal(rnan, linf));\r\n    assert(!std::isgreaterequal(rnan, -linf));\r\n    assert(!std::isgreaterequal(rnan, lnan));\r\n\r\n    assert(std::isless(lhs, rhs));\r\n    assert(std::isless(lhs, rinf));\r\n    assert(!std::isless(lhs, -rinf));\r\n    assert(!std::isless(rhs, lhs));\r\n    assert(std::isless(rhs, linf));\r\n    assert(!std::isless(rhs, -linf));\r\n    assert(!std::isless(lhseq, rhseq));\r\n    assert(!std::isless(rhseq, lhseq));\r\n    assert(!std::isless(linf, rinf));\r\n    assert(!std::isless(rinf, linf));\r\n    assert(!std::isless(lnan, rhs));\r\n    assert(!std::isless(lnan, rinf));\r\n    assert(!std::isless(lnan, -rinf));\r\n    assert(!std::isless(lnan, rnan));\r\n    assert(!std::isless(rnan, lhs));\r\n    assert(!std::isless(rnan, linf));\r\n    assert(!std::isless(rnan, -linf));\r\n    assert(!std::isless(rnan, lnan));\r\n\r\n    assert(std::islessequal(lhs, rhs));\r\n    assert(std::islessequal(lhs, rinf));\r\n    assert(!std::islessequal(lhs, -rinf));\r\n    assert(!std::islessequal(rhs, lhs));\r\n    assert(std::islessequal(rhs, linf));\r\n    assert(!std::islessequal(rhs, -linf));\r\n    assert(std::islessequal(lhseq, rhseq));\r\n    assert(std::islessequal(rhseq, lhseq));\r\n    assert(std::islessequal(linf, rinf));\r\n    assert(std::islessequal(rinf, linf));\r\n    assert(!std::islessequal(lnan, rhs));\r\n    assert(!std::islessequal(lnan, rinf));\r\n    assert(!std::islessequal(lnan, -rinf));\r\n    assert(!std::islessequal(lnan, rnan));\r\n    assert(!std::islessequal(rnan, lhs));\r\n    assert(!std::islessequal(rnan, linf));\r\n    assert(!std::islessequal(rnan, -linf));\r\n    assert(!std::islessequal(rnan, lnan));\r\n\r\n    assert(std::islessgreater(lhs, rhs));\r\n    assert(std::islessgreater(lhs, rinf));\r\n    assert(std::islessgreater(lhs, -rinf));\r\n    assert(std::islessgreater(rhs, lhs));\r\n    assert(std::islessgreater(rhs, linf));\r\n    assert(std::islessgreater(rhs, -linf));\r\n    assert(!std::islessgreater(lhseq, rhseq));\r\n    assert(!std::islessgreater(rhseq, lhseq));\r\n    assert(!std::islessgreater(linf, rinf));\r\n    assert(!std::islessgreater(rinf, linf));\r\n    assert(!std::islessgreater(lnan, rhs));\r\n    assert(!std::islessgreater(lnan, rinf));\r\n    assert(!std::islessgreater(lnan, -rinf));\r\n    assert(!std::islessgreater(lnan, rnan));\r\n    assert(!std::islessgreater(rnan, lhs));\r\n    assert(!std::islessgreater(rnan, linf));\r\n    assert(!std::islessgreater(rnan, -linf));\r\n    assert(!std::islessgreater(rnan, lnan));\r\n\r\n    assert(!std::isunordered(lhs, rhs));\r\n    assert(!std::isunordered(lhs, rinf));\r\n    assert(!std::isunordered(lhs, -rinf));\r\n    assert(!std::isunordered(rhs, lhs));\r\n    assert(!std::isunordered(rhs, linf));\r\n    assert(!std::isunordered(rhs, -linf));\r\n    assert(!std::isunordered(lhseq, rhseq));\r\n    assert(!std::isunordered(rhseq, lhseq));\r\n    assert(!std::isunordered(linf, rinf));\r\n    assert(!std::isunordered(rinf, linf));\r\n    assert(std::isunordered(lnan, rhs));\r\n    assert(std::isunordered(lnan, rinf));\r\n    assert(std::isunordered(lnan, -rinf));\r\n    assert(std::isunordered(lnan, rnan));\r\n    assert(std::isunordered(rnan, lhs));\r\n    assert(std::isunordered(rnan, linf));\r\n    assert(std::isunordered(rnan, -linf));\r\n    assert(std::isunordered(rnan, lnan));\r\n\r\n    // test overloads in the global namespace\r\n\r\n    assert(!::isgreater(lhs, rhs));\r\n    assert(!::isgreater(lhs, rinf));\r\n    assert(::isgreater(lhs, -rinf));\r\n    assert(::isgreater(rhs, lhs));\r\n    assert(!::isgreater(rhs, linf));\r\n    assert(::isgreater(rhs, -linf));\r\n    assert(!::isgreater(lhseq, rhseq));\r\n    assert(!::isgreater(rhseq, lhseq));\r\n    assert(!::isgreater(linf, rinf));\r\n    assert(!::isgreater(rinf, linf));\r\n    assert(!::isgreater(lnan, rhs));\r\n    assert(!::isgreater(lnan, rinf));\r\n    assert(!::isgreater(lnan, -rinf));\r\n    assert(!::isgreater(lnan, rnan));\r\n    assert(!::isgreater(rnan, lhs));\r\n    assert(!::isgreater(rnan, linf));\r\n    assert(!::isgreater(rnan, -linf));\r\n    assert(!::isgreater(rnan, lnan));\r\n\r\n    assert(!::isgreaterequal(lhs, rhs));\r\n    assert(!::isgreaterequal(lhs, rinf));\r\n    assert(::isgreaterequal(lhs, -rinf));\r\n    assert(::isgreaterequal(rhs, lhs));\r\n    assert(!::isgreaterequal(rhs, linf));\r\n    assert(::isgreaterequal(rhs, -linf));\r\n    assert(::isgreaterequal(lhseq, rhseq));\r\n    assert(::isgreaterequal(rhseq, lhseq));\r\n    assert(::isgreaterequal(linf, rinf));\r\n    assert(::isgreaterequal(rinf, linf));\r\n    assert(!::isgreaterequal(lnan, rhs));\r\n    assert(!::isgreaterequal(lnan, rinf));\r\n    assert(!::isgreaterequal(lnan, -rinf));\r\n    assert(!::isgreaterequal(lnan, rnan));\r\n    assert(!::isgreaterequal(rnan, lhs));\r\n    assert(!::isgreaterequal(rnan, linf));\r\n    assert(!::isgreaterequal(rnan, -linf));\r\n    assert(!::isgreaterequal(rnan, lnan));\r\n\r\n    assert(::isless(lhs, rhs));\r\n    assert(::isless(lhs, rinf));\r\n    assert(!::isless(lhs, -rinf));\r\n    assert(!::isless(rhs, lhs));\r\n    assert(::isless(rhs, linf));\r\n    assert(!::isless(rhs, -linf));\r\n    assert(!::isless(lhseq, rhseq));\r\n    assert(!::isless(rhseq, lhseq));\r\n    assert(!::isless(linf, rinf));\r\n    assert(!::isless(rinf, linf));\r\n    assert(!::isless(lnan, rhs));\r\n    assert(!::isless(lnan, rinf));\r\n    assert(!::isless(lnan, -rinf));\r\n    assert(!::isless(lnan, rnan));\r\n    assert(!::isless(rnan, lhs));\r\n    assert(!::isless(rnan, linf));\r\n    assert(!::isless(rnan, -linf));\r\n    assert(!::isless(rnan, lnan));\r\n\r\n    assert(::islessequal(lhs, rhs));\r\n    assert(::islessequal(lhs, rinf));\r\n    assert(!::islessequal(lhs, -rinf));\r\n    assert(!::islessequal(rhs, lhs));\r\n    assert(::islessequal(rhs, linf));\r\n    assert(!::islessequal(rhs, -linf));\r\n    assert(::islessequal(lhseq, rhseq));\r\n    assert(::islessequal(rhseq, lhseq));\r\n    assert(::islessequal(linf, rinf));\r\n    assert(::islessequal(rinf, linf));\r\n    assert(!::islessequal(lnan, rhs));\r\n    assert(!::islessequal(lnan, rinf));\r\n    assert(!::islessequal(lnan, -rinf));\r\n    assert(!::islessequal(lnan, rnan));\r\n    assert(!::islessequal(rnan, lhs));\r\n    assert(!::islessequal(rnan, linf));\r\n    assert(!::islessequal(rnan, -linf));\r\n    assert(!::islessequal(rnan, lnan));\r\n\r\n    assert(::islessgreater(lhs, rhs));\r\n    assert(::islessgreater(lhs, rinf));\r\n    assert(::islessgreater(lhs, -rinf));\r\n    assert(::islessgreater(rhs, lhs));\r\n    assert(::islessgreater(rhs, linf));\r\n    assert(::islessgreater(rhs, -linf));\r\n    assert(!::islessgreater(lhseq, rhseq));\r\n    assert(!::islessgreater(rhseq, lhseq));\r\n    assert(!::islessgreater(linf, rinf));\r\n    assert(!::islessgreater(rinf, linf));\r\n    assert(!::islessgreater(lnan, rhs));\r\n    assert(!::islessgreater(lnan, rinf));\r\n    assert(!::islessgreater(lnan, -rinf));\r\n    assert(!::islessgreater(lnan, rnan));\r\n    assert(!::islessgreater(rnan, lhs));\r\n    assert(!::islessgreater(rnan, linf));\r\n    assert(!::islessgreater(rnan, -linf));\r\n    assert(!::islessgreater(rnan, lnan));\r\n\r\n    assert(!::isunordered(lhs, rhs));\r\n    assert(!::isunordered(lhs, rinf));\r\n    assert(!::isunordered(lhs, -rinf));\r\n    assert(!::isunordered(rhs, lhs));\r\n    assert(!::isunordered(rhs, linf));\r\n    assert(!::isunordered(rhs, -linf));\r\n    assert(!::isunordered(lhseq, rhseq));\r\n    assert(!::isunordered(rhseq, lhseq));\r\n    assert(!::isunordered(linf, rinf));\r\n    assert(!::isunordered(rinf, linf));\r\n    assert(::isunordered(lnan, rhs));\r\n    assert(::isunordered(lnan, rinf));\r\n    assert(::isunordered(lnan, -rinf));\r\n    assert(::isunordered(lnan, rnan));\r\n    assert(::isunordered(rnan, lhs));\r\n    assert(::isunordered(rnan, linf));\r\n    assert(::isunordered(rnan, -linf));\r\n    assert(::isunordered(rnan, lnan));\r\n}\r\n\r\ntemplate <class F, class I>\r\nvoid test_heterogeneous_mixed_overloads_per_integer_type() {\r\n    constexpr F lhs  = static_cast<F>(42.0);\r\n    constexpr F linf = std::numeric_limits<F>::infinity();\r\n    constexpr F lnan = std::numeric_limits<F>::quiet_NaN();\r\n\r\n    constexpr I rhslt{41};\r\n    constexpr I rhseq{42};\r\n    constexpr I rhsgt{43};\r\n\r\n    // test overloads in std\r\n\r\n    assert(std::isgreater(lhs, rhslt));\r\n    assert(!std::isgreater(lhs, rhseq));\r\n    assert(!std::isgreater(lhs, rhsgt));\r\n    assert(std::isgreater(linf, rhseq));\r\n    assert(!std::isgreater(-linf, rhseq));\r\n    assert(!std::isgreater(rhslt, lhs));\r\n    assert(!std::isgreater(rhseq, lhs));\r\n    assert(std::isgreater(rhsgt, lhs));\r\n    assert(!std::isgreater(rhseq, linf));\r\n    assert(std::isgreater(rhseq, -linf));\r\n    assert(!std::isgreater(lnan, rhseq));\r\n    assert(!std::isgreater(rhseq, lnan));\r\n\r\n    assert(std::isgreaterequal(lhs, rhslt));\r\n    assert(std::isgreaterequal(lhs, rhseq));\r\n    assert(!std::isgreaterequal(lhs, rhsgt));\r\n    assert(std::isgreaterequal(linf, rhseq));\r\n    assert(!std::isgreaterequal(-linf, rhseq));\r\n    assert(!std::isgreaterequal(rhslt, lhs));\r\n    assert(std::isgreaterequal(rhseq, lhs));\r\n    assert(std::isgreaterequal(rhsgt, lhs));\r\n    assert(!std::isgreaterequal(rhseq, linf));\r\n    assert(std::isgreaterequal(rhseq, -linf));\r\n    assert(!std::isgreaterequal(lnan, rhseq));\r\n    assert(!std::isgreaterequal(rhseq, lnan));\r\n\r\n    assert(!std::isless(lhs, rhslt));\r\n    assert(!std::isless(lhs, rhseq));\r\n    assert(std::isless(lhs, rhsgt));\r\n    assert(!std::isless(linf, rhseq));\r\n    assert(std::isless(-linf, rhseq));\r\n    assert(std::isless(rhslt, lhs));\r\n    assert(!std::isless(rhseq, lhs));\r\n    assert(!std::isless(rhsgt, lhs));\r\n    assert(std::isless(rhseq, linf));\r\n    assert(!std::isless(rhseq, -linf));\r\n    assert(!std::isless(lnan, rhseq));\r\n    assert(!std::isless(rhseq, lnan));\r\n\r\n    assert(!std::islessequal(lhs, rhslt));\r\n    assert(std::islessequal(lhs, rhseq));\r\n    assert(std::islessequal(lhs, rhsgt));\r\n    assert(!std::islessequal(linf, rhseq));\r\n    assert(std::islessequal(-linf, rhseq));\r\n    assert(std::islessequal(rhslt, lhs));\r\n    assert(std::islessequal(rhseq, lhs));\r\n    assert(!std::islessequal(rhsgt, lhs));\r\n    assert(std::islessequal(rhseq, linf));\r\n    assert(!std::islessequal(rhseq, -linf));\r\n    assert(!std::islessequal(lnan, rhseq));\r\n    assert(!std::islessequal(rhseq, lnan));\r\n\r\n    assert(std::islessgreater(lhs, rhslt));\r\n    assert(!std::islessgreater(lhs, rhseq));\r\n    assert(std::islessgreater(lhs, rhsgt));\r\n    assert(std::islessgreater(linf, rhseq));\r\n    assert(std::islessgreater(-linf, rhseq));\r\n    assert(std::islessgreater(rhslt, lhs));\r\n    assert(!std::islessgreater(rhseq, lhs));\r\n    assert(std::islessgreater(rhsgt, lhs));\r\n    assert(std::islessgreater(rhseq, linf));\r\n    assert(std::islessgreater(rhseq, -linf));\r\n    assert(!std::islessgreater(lnan, rhseq));\r\n    assert(!std::islessgreater(rhseq, lnan));\r\n\r\n    assert(!std::isunordered(lhs, rhslt));\r\n    assert(!std::isunordered(lhs, rhseq));\r\n    assert(!std::isunordered(lhs, rhsgt));\r\n    assert(!std::isunordered(linf, rhseq));\r\n    assert(!std::isunordered(-linf, rhseq));\r\n    assert(!std::isunordered(rhslt, lhs));\r\n    assert(!std::isunordered(rhseq, lhs));\r\n    assert(!std::isunordered(rhsgt, lhs));\r\n    assert(!std::isunordered(rhseq, linf));\r\n    assert(!std::isunordered(rhseq, -linf));\r\n    assert(std::isunordered(lnan, rhseq));\r\n    assert(std::isunordered(rhseq, lnan));\r\n\r\n    // test overloads in the global namespace\r\n\r\n    assert(::isgreater(lhs, rhslt));\r\n    assert(!::isgreater(lhs, rhseq));\r\n    assert(!::isgreater(lhs, rhsgt));\r\n    assert(::isgreater(linf, rhseq));\r\n    assert(!::isgreater(-linf, rhseq));\r\n    assert(!::isgreater(rhslt, lhs));\r\n    assert(!::isgreater(rhseq, lhs));\r\n    assert(::isgreater(rhsgt, lhs));\r\n    assert(!::isgreater(rhseq, linf));\r\n    assert(::isgreater(rhseq, -linf));\r\n    assert(!::isgreater(lnan, rhseq));\r\n    assert(!::isgreater(rhseq, lnan));\r\n\r\n    assert(::isgreaterequal(lhs, rhslt));\r\n    assert(::isgreaterequal(lhs, rhseq));\r\n    assert(!::isgreaterequal(lhs, rhsgt));\r\n    assert(::isgreaterequal(linf, rhseq));\r\n    assert(!::isgreaterequal(-linf, rhseq));\r\n    assert(!::isgreaterequal(rhslt, lhs));\r\n    assert(::isgreaterequal(rhseq, lhs));\r\n    assert(::isgreaterequal(rhsgt, lhs));\r\n    assert(!::isgreaterequal(rhseq, linf));\r\n    assert(::isgreaterequal(rhseq, -linf));\r\n    assert(!::isgreaterequal(lnan, rhseq));\r\n    assert(!::isgreaterequal(rhseq, lnan));\r\n\r\n    assert(!::isless(lhs, rhslt));\r\n    assert(!::isless(lhs, rhseq));\r\n    assert(::isless(lhs, rhsgt));\r\n    assert(!::isless(linf, rhseq));\r\n    assert(::isless(-linf, rhseq));\r\n    assert(::isless(rhslt, lhs));\r\n    assert(!::isless(rhseq, lhs));\r\n    assert(!::isless(rhsgt, lhs));\r\n    assert(::isless(rhseq, linf));\r\n    assert(!::isless(rhseq, -linf));\r\n    assert(!::isless(lnan, rhseq));\r\n    assert(!::isless(rhseq, lnan));\r\n\r\n    assert(!::islessequal(lhs, rhslt));\r\n    assert(::islessequal(lhs, rhseq));\r\n    assert(::islessequal(lhs, rhsgt));\r\n    assert(!::islessequal(linf, rhseq));\r\n    assert(::islessequal(-linf, rhseq));\r\n    assert(::islessequal(rhslt, lhs));\r\n    assert(::islessequal(rhseq, lhs));\r\n    assert(!::islessequal(rhsgt, lhs));\r\n    assert(::islessequal(rhseq, linf));\r\n    assert(!::islessequal(rhseq, -linf));\r\n    assert(!::islessequal(lnan, rhseq));\r\n    assert(!::islessequal(rhseq, lnan));\r\n\r\n    assert(::islessgreater(lhs, rhslt));\r\n    assert(!::islessgreater(lhs, rhseq));\r\n    assert(::islessgreater(lhs, rhsgt));\r\n    assert(::islessgreater(linf, rhseq));\r\n    assert(::islessgreater(-linf, rhseq));\r\n    assert(::islessgreater(rhslt, lhs));\r\n    assert(!::islessgreater(rhseq, lhs));\r\n    assert(::islessgreater(rhsgt, lhs));\r\n    assert(::islessgreater(rhseq, linf));\r\n    assert(::islessgreater(rhseq, -linf));\r\n    assert(!::islessgreater(lnan, rhseq));\r\n    assert(!::islessgreater(rhseq, lnan));\r\n\r\n    assert(!::isunordered(lhs, rhslt));\r\n    assert(!::isunordered(lhs, rhseq));\r\n    assert(!::isunordered(lhs, rhsgt));\r\n    assert(!::isunordered(linf, rhseq));\r\n    assert(!::isunordered(-linf, rhseq));\r\n    assert(!::isunordered(rhslt, lhs));\r\n    assert(!::isunordered(rhseq, lhs));\r\n    assert(!::isunordered(rhsgt, lhs));\r\n    assert(!::isunordered(rhseq, linf));\r\n    assert(!::isunordered(rhseq, -linf));\r\n    assert(::isunordered(lnan, rhseq));\r\n    assert(::isunordered(rhseq, lnan));\r\n}\r\n\r\ntemplate <class F>\r\nvoid test_heterogeneous_mixed_overloads_per_fp_type() {\r\n    test_heterogeneous_mixed_overloads_per_integer_type<F, signed char>();\r\n    test_heterogeneous_mixed_overloads_per_integer_type<F, short>();\r\n    test_heterogeneous_mixed_overloads_per_integer_type<F, int>();\r\n    test_heterogeneous_mixed_overloads_per_integer_type<F, long>();\r\n    test_heterogeneous_mixed_overloads_per_integer_type<F, long long>();\r\n    test_heterogeneous_mixed_overloads_per_integer_type<F, unsigned char>();\r\n    test_heterogeneous_mixed_overloads_per_integer_type<F, unsigned short>();\r\n    test_heterogeneous_mixed_overloads_per_integer_type<F, unsigned int>();\r\n    test_heterogeneous_mixed_overloads_per_integer_type<F, unsigned long>();\r\n    test_heterogeneous_mixed_overloads_per_integer_type<F, unsigned long long>();\r\n    test_heterogeneous_mixed_overloads_per_integer_type<F, char>();\r\n#ifdef __cpp_char8_t\r\n    test_heterogeneous_mixed_overloads_per_integer_type<F, char8_t>();\r\n#endif // defined(__cpp_char8_t)\r\n    test_heterogeneous_mixed_overloads_per_integer_type<F, char16_t>();\r\n    test_heterogeneous_mixed_overloads_per_integer_type<F, char32_t>();\r\n    test_heterogeneous_mixed_overloads_per_integer_type<F, wchar_t>();\r\n}\r\n\r\ntemplate <class F>\r\nvoid test_heterogeneous_mixed_overloads_with_bool() {\r\n    constexpr F f0{};\r\n    constexpr F f1   = static_cast<F>(1.0);\r\n    constexpr F fmid = static_cast<F>(0.5);\r\n    constexpr F finf = std::numeric_limits<F>::infinity();\r\n    constexpr F fnan = std::numeric_limits<F>::quiet_NaN();\r\n\r\n    // test overloads in std\r\n\r\n    assert(!std::isgreater(f0, false));\r\n    assert(!std::isgreater(f1, true));\r\n    assert(std::isgreater(fmid, false));\r\n    assert(!std::isgreater(fmid, true));\r\n    assert(std::isgreater(finf, false));\r\n    assert(std::isgreater(finf, true));\r\n    assert(!std::isgreater(-finf, false));\r\n    assert(!std::isgreater(-finf, true));\r\n    assert(!std::isgreater(false, f0));\r\n    assert(!std::isgreater(true, f1));\r\n    assert(!std::isgreater(false, fmid));\r\n    assert(std::isgreater(true, fmid));\r\n    assert(!std::isgreater(false, finf));\r\n    assert(!std::isgreater(true, finf));\r\n    assert(std::isgreater(false, -finf));\r\n    assert(std::isgreater(true, -finf));\r\n    assert(!std::isgreater(fnan, false));\r\n    assert(!std::isgreater(fnan, true));\r\n    assert(!std::isgreater(false, fnan));\r\n    assert(!std::isgreater(true, fnan));\r\n\r\n    assert(std::isgreaterequal(f0, false));\r\n    assert(std::isgreaterequal(f1, true));\r\n    assert(std::isgreaterequal(fmid, false));\r\n    assert(!std::isgreaterequal(fmid, true));\r\n    assert(std::isgreaterequal(finf, false));\r\n    assert(std::isgreaterequal(finf, true));\r\n    assert(!std::isgreaterequal(-finf, false));\r\n    assert(!std::isgreaterequal(-finf, true));\r\n    assert(std::isgreaterequal(false, f0));\r\n    assert(std::isgreaterequal(true, f1));\r\n    assert(!std::isgreaterequal(false, fmid));\r\n    assert(std::isgreaterequal(true, fmid));\r\n    assert(!std::isgreaterequal(false, finf));\r\n    assert(!std::isgreaterequal(true, finf));\r\n    assert(std::isgreaterequal(false, -finf));\r\n    assert(std::isgreaterequal(true, -finf));\r\n    assert(!std::isgreaterequal(fnan, false));\r\n    assert(!std::isgreaterequal(fnan, true));\r\n    assert(!std::isgreaterequal(false, fnan));\r\n    assert(!std::isgreaterequal(true, fnan));\r\n\r\n    assert(!std::isless(f0, false));\r\n    assert(!std::isless(f1, true));\r\n    assert(!std::isless(fmid, false));\r\n    assert(std::isless(fmid, true));\r\n    assert(!std::isless(finf, false));\r\n    assert(!std::isless(finf, true));\r\n    assert(std::isless(-finf, false));\r\n    assert(std::isless(-finf, true));\r\n    assert(!std::isless(false, f0));\r\n    assert(!std::isless(true, f1));\r\n    assert(std::isless(false, fmid));\r\n    assert(!std::isless(true, fmid));\r\n    assert(std::isless(false, finf));\r\n    assert(std::isless(true, finf));\r\n    assert(!std::isless(false, -finf));\r\n    assert(!std::isless(true, -finf));\r\n    assert(!std::isless(fnan, false));\r\n    assert(!std::isless(fnan, true));\r\n    assert(!std::isless(false, fnan));\r\n    assert(!std::isless(true, fnan));\r\n\r\n    assert(std::islessequal(f0, false));\r\n    assert(std::islessequal(f1, true));\r\n    assert(!std::islessequal(fmid, false));\r\n    assert(std::islessequal(fmid, true));\r\n    assert(!std::islessequal(finf, false));\r\n    assert(!std::islessequal(finf, true));\r\n    assert(std::islessequal(-finf, false));\r\n    assert(std::islessequal(-finf, true));\r\n    assert(std::islessequal(false, f0));\r\n    assert(std::islessequal(true, f1));\r\n    assert(std::islessequal(false, fmid));\r\n    assert(!std::islessequal(true, fmid));\r\n    assert(std::islessequal(false, finf));\r\n    assert(std::islessequal(true, finf));\r\n    assert(!std::islessequal(false, -finf));\r\n    assert(!std::islessequal(true, -finf));\r\n    assert(!std::islessequal(fnan, false));\r\n    assert(!std::islessequal(fnan, true));\r\n    assert(!std::islessequal(false, fnan));\r\n    assert(!std::islessequal(true, fnan));\r\n\r\n    assert(!std::islessgreater(f0, false));\r\n    assert(!std::islessgreater(f1, true));\r\n    assert(std::islessgreater(fmid, false));\r\n    assert(std::islessgreater(fmid, true));\r\n    assert(std::islessgreater(finf, false));\r\n    assert(std::islessgreater(finf, true));\r\n    assert(std::islessgreater(-finf, false));\r\n    assert(std::islessgreater(-finf, true));\r\n    assert(!std::islessgreater(false, f0));\r\n    assert(!std::islessgreater(true, f1));\r\n    assert(std::islessgreater(false, fmid));\r\n    assert(std::islessgreater(true, fmid));\r\n    assert(std::islessgreater(false, finf));\r\n    assert(std::islessgreater(true, finf));\r\n    assert(std::islessgreater(false, -finf));\r\n    assert(std::islessgreater(true, -finf));\r\n    assert(!std::islessgreater(fnan, false));\r\n    assert(!std::islessgreater(fnan, true));\r\n    assert(!std::islessgreater(false, fnan));\r\n    assert(!std::islessgreater(true, fnan));\r\n\r\n    assert(!std::isunordered(f0, false));\r\n    assert(!std::isunordered(f1, true));\r\n    assert(!std::isunordered(fmid, false));\r\n    assert(!std::isunordered(fmid, true));\r\n    assert(!std::isunordered(finf, false));\r\n    assert(!std::isunordered(finf, true));\r\n    assert(!std::isunordered(-finf, false));\r\n    assert(!std::isunordered(-finf, true));\r\n    assert(!std::isunordered(false, f0));\r\n    assert(!std::isunordered(true, f1));\r\n    assert(!std::isunordered(false, fmid));\r\n    assert(!std::isunordered(true, fmid));\r\n    assert(!std::isunordered(false, finf));\r\n    assert(!std::isunordered(true, finf));\r\n    assert(!std::isunordered(false, -finf));\r\n    assert(!std::isunordered(true, -finf));\r\n    assert(std::isunordered(fnan, false));\r\n    assert(std::isunordered(fnan, true));\r\n    assert(std::isunordered(false, fnan));\r\n    assert(std::isunordered(true, fnan));\r\n\r\n    // test overloads in the global namespace\r\n\r\n    assert(!::isgreater(f0, false));\r\n    assert(!::isgreater(f1, true));\r\n    assert(::isgreater(fmid, false));\r\n    assert(!::isgreater(fmid, true));\r\n    assert(::isgreater(finf, false));\r\n    assert(::isgreater(finf, true));\r\n    assert(!::isgreater(-finf, false));\r\n    assert(!::isgreater(-finf, true));\r\n    assert(!::isgreater(false, f0));\r\n    assert(!::isgreater(true, f1));\r\n    assert(!::isgreater(false, fmid));\r\n    assert(::isgreater(true, fmid));\r\n    assert(!::isgreater(false, finf));\r\n    assert(!::isgreater(true, finf));\r\n    assert(::isgreater(false, -finf));\r\n    assert(::isgreater(true, -finf));\r\n    assert(!::isgreater(fnan, false));\r\n    assert(!::isgreater(fnan, true));\r\n    assert(!::isgreater(false, fnan));\r\n    assert(!::isgreater(true, fnan));\r\n\r\n    assert(::isgreaterequal(f0, false));\r\n    assert(::isgreaterequal(f1, true));\r\n    assert(::isgreaterequal(fmid, false));\r\n    assert(!::isgreaterequal(fmid, true));\r\n    assert(::isgreaterequal(finf, false));\r\n    assert(::isgreaterequal(finf, true));\r\n    assert(!::isgreaterequal(-finf, false));\r\n    assert(!::isgreaterequal(-finf, true));\r\n    assert(::isgreaterequal(false, f0));\r\n    assert(::isgreaterequal(true, f1));\r\n    assert(!::isgreaterequal(false, fmid));\r\n    assert(::isgreaterequal(true, fmid));\r\n    assert(!::isgreaterequal(false, finf));\r\n    assert(!::isgreaterequal(true, finf));\r\n    assert(::isgreaterequal(false, -finf));\r\n    assert(::isgreaterequal(true, -finf));\r\n    assert(!::isgreaterequal(fnan, false));\r\n    assert(!::isgreaterequal(fnan, true));\r\n    assert(!::isgreaterequal(false, fnan));\r\n    assert(!::isgreaterequal(true, fnan));\r\n\r\n    assert(!::isless(f0, false));\r\n    assert(!::isless(f1, true));\r\n    assert(!::isless(fmid, false));\r\n    assert(::isless(fmid, true));\r\n    assert(!::isless(finf, false));\r\n    assert(!::isless(finf, true));\r\n    assert(::isless(-finf, false));\r\n    assert(::isless(-finf, true));\r\n    assert(!::isless(false, f0));\r\n    assert(!::isless(true, f1));\r\n    assert(::isless(false, fmid));\r\n    assert(!::isless(true, fmid));\r\n    assert(::isless(false, finf));\r\n    assert(::isless(true, finf));\r\n    assert(!::isless(false, -finf));\r\n    assert(!::isless(true, -finf));\r\n    assert(!::isless(fnan, false));\r\n    assert(!::isless(fnan, true));\r\n    assert(!::isless(false, fnan));\r\n    assert(!::isless(true, fnan));\r\n\r\n    assert(::islessequal(f0, false));\r\n    assert(::islessequal(f1, true));\r\n    assert(!::islessequal(fmid, false));\r\n    assert(::islessequal(fmid, true));\r\n    assert(!::islessequal(finf, false));\r\n    assert(!::islessequal(finf, true));\r\n    assert(::islessequal(-finf, false));\r\n    assert(::islessequal(-finf, true));\r\n    assert(::islessequal(false, f0));\r\n    assert(::islessequal(true, f1));\r\n    assert(::islessequal(false, fmid));\r\n    assert(!::islessequal(true, fmid));\r\n    assert(::islessequal(false, finf));\r\n    assert(::islessequal(true, finf));\r\n    assert(!::islessequal(false, -finf));\r\n    assert(!::islessequal(true, -finf));\r\n    assert(!::islessequal(fnan, false));\r\n    assert(!::islessequal(fnan, true));\r\n    assert(!::islessequal(false, fnan));\r\n    assert(!::islessequal(true, fnan));\r\n\r\n    assert(!::islessgreater(f0, false));\r\n    assert(!::islessgreater(f1, true));\r\n    assert(::islessgreater(fmid, false));\r\n    assert(::islessgreater(fmid, true));\r\n    assert(::islessgreater(finf, false));\r\n    assert(::islessgreater(finf, true));\r\n    assert(::islessgreater(-finf, false));\r\n    assert(::islessgreater(-finf, true));\r\n    assert(!::islessgreater(false, f0));\r\n    assert(!::islessgreater(true, f1));\r\n    assert(::islessgreater(false, fmid));\r\n    assert(::islessgreater(true, fmid));\r\n    assert(::islessgreater(false, finf));\r\n    assert(::islessgreater(true, finf));\r\n    assert(::islessgreater(false, -finf));\r\n    assert(::islessgreater(true, -finf));\r\n    assert(!::islessgreater(fnan, false));\r\n    assert(!::islessgreater(fnan, true));\r\n    assert(!::islessgreater(false, fnan));\r\n    assert(!::islessgreater(true, fnan));\r\n\r\n    assert(!::isunordered(f0, false));\r\n    assert(!::isunordered(f1, true));\r\n    assert(!::isunordered(fmid, false));\r\n    assert(!::isunordered(fmid, true));\r\n    assert(!::isunordered(finf, false));\r\n    assert(!::isunordered(finf, true));\r\n    assert(!::isunordered(-finf, false));\r\n    assert(!::isunordered(-finf, true));\r\n    assert(!::isunordered(false, f0));\r\n    assert(!::isunordered(true, f1));\r\n    assert(!::isunordered(false, fmid));\r\n    assert(!::isunordered(true, fmid));\r\n    assert(!::isunordered(false, finf));\r\n    assert(!::isunordered(true, finf));\r\n    assert(!::isunordered(false, -finf));\r\n    assert(!::isunordered(true, -finf));\r\n    assert(::isunordered(fnan, false));\r\n    assert(::isunordered(fnan, true));\r\n    assert(::isunordered(false, fnan));\r\n    assert(::isunordered(true, fnan));\r\n}\r\n\r\nvoid test_all_heterogeneous_floating_overloads() {\r\n    test_heterogeneous_floating_overloads<float, double>();\r\n    test_heterogeneous_floating_overloads<float, long double>();\r\n    test_heterogeneous_floating_overloads<double, float>();\r\n    test_heterogeneous_floating_overloads<double, long double>();\r\n    test_heterogeneous_floating_overloads<long double, float>();\r\n    test_heterogeneous_floating_overloads<long double, double>();\r\n\r\n    test_heterogeneous_mixed_overloads_per_fp_type<float>();\r\n    test_heterogeneous_mixed_overloads_per_fp_type<double>();\r\n    test_heterogeneous_mixed_overloads_per_fp_type<long double>();\r\n\r\n    test_heterogeneous_mixed_overloads_with_bool<float>();\r\n    test_heterogeneous_mixed_overloads_with_bool<double>();\r\n    test_heterogeneous_mixed_overloads_with_bool<long double>();\r\n}\r\n\r\ntemplate <class I1, class I2, std::enable_if_t<std::is_same_v<I1, I2>, int> = 0>\r\nvoid test_heterogeneous_integer_overloads_per_rhs_type() {}\r\n\r\ntemplate <class I1, class I2, std::enable_if_t<!std::is_same_v<I1, I2>, int> = 0>\r\nvoid test_heterogeneous_integer_overloads_per_rhs_type() {\r\n    constexpr I1 l0{};\r\n    constexpr I1 l1{1};\r\n\r\n    constexpr I2 r0{};\r\n    constexpr I2 r1{1};\r\n\r\n    // test overloads in std\r\n\r\n    assert(!std::isgreater(l0, r0));\r\n    assert(std::isgreater(l1, r0));\r\n    assert(!std::isgreater(l0, r1));\r\n    assert(!std::isgreater(l1, r1));\r\n\r\n    assert(std::isgreaterequal(l0, r0));\r\n    assert(std::isgreaterequal(l1, r0));\r\n    assert(!std::isgreater(l0, r1));\r\n    assert(std::isgreaterequal(l1, r1));\r\n\r\n    assert(!std::isless(l0, r0));\r\n    assert(!std::isless(l1, r0));\r\n    assert(std::isless(l0, r1));\r\n    assert(!std::isless(l1, r1));\r\n\r\n    assert(std::islessequal(l0, r0));\r\n    assert(!std::islessequal(l1, r0));\r\n    assert(std::islessequal(l0, r1));\r\n    assert(std::islessequal(l1, r1));\r\n\r\n    assert(!std::islessgreater(l0, r0));\r\n    assert(std::islessgreater(l1, r0));\r\n    assert(std::islessgreater(l0, r1));\r\n    assert(!std::islessgreater(l1, r1));\r\n\r\n    assert(!std::isunordered(l0, r0));\r\n    assert(!std::isunordered(l1, r0));\r\n    assert(!std::isunordered(l0, r1));\r\n    assert(!std::isunordered(l1, r1));\r\n\r\n    // test overloads in the global namespace\r\n\r\n    assert(!::isgreater(l0, r0));\r\n    assert(::isgreater(l1, r0));\r\n    assert(!::isgreater(l0, r1));\r\n    assert(!::isgreater(l1, r1));\r\n\r\n    assert(::isgreaterequal(l0, r0));\r\n    assert(::isgreaterequal(l1, r0));\r\n    assert(!::isgreater(l0, r1));\r\n    assert(::isgreaterequal(l1, r1));\r\n\r\n    assert(!::isless(l0, r0));\r\n    assert(!::isless(l1, r0));\r\n    assert(::isless(l0, r1));\r\n    assert(!::isless(l1, r1));\r\n\r\n    assert(::islessequal(l0, r0));\r\n    assert(!::islessequal(l1, r0));\r\n    assert(::islessequal(l0, r1));\r\n    assert(::islessequal(l1, r1));\r\n\r\n    assert(!::islessgreater(l0, r0));\r\n    assert(::islessgreater(l1, r0));\r\n    assert(::islessgreater(l0, r1));\r\n    assert(!::islessgreater(l1, r1));\r\n\r\n    assert(!::isunordered(l0, r0));\r\n    assert(!::isunordered(l1, r0));\r\n    assert(!::isunordered(l0, r1));\r\n    assert(!::isunordered(l1, r1));\r\n}\r\n\r\ntemplate <class I>\r\nvoid test_heterogeneous_integer_overloads_with_bool() {\r\n    constexpr I lm1{static_cast<I>(-1)};\r\n    constexpr I l0{};\r\n    constexpr I l1{1};\r\n    constexpr I l2{2};\r\n\r\n    // test overloads in std\r\n\r\n    assert(std::isgreater(lm1, false) == std::is_unsigned_v<I>);\r\n    assert(std::isgreater(lm1, true) == std::is_unsigned_v<I>);\r\n    assert(!std::isgreater(l0, false));\r\n    assert(!std::isgreater(l0, true));\r\n    assert(std::isgreater(l1, false));\r\n    assert(!std::isgreater(l1, true));\r\n    assert(std::isgreater(l2, false));\r\n    assert(std::isgreater(l2, true));\r\n    assert(std::isgreater(false, lm1) == std::is_signed_v<I>);\r\n    assert(std::isgreater(true, lm1) == std::is_signed_v<I>);\r\n    assert(!std::isgreater(false, l0));\r\n    assert(std::isgreater(true, l0));\r\n    assert(!std::isgreater(false, l1));\r\n    assert(!std::isgreater(true, l1));\r\n    assert(!std::isgreater(false, l2));\r\n    assert(!std::isgreater(true, l2));\r\n\r\n    assert(std::isgreaterequal(lm1, false) == std::is_unsigned_v<I>);\r\n    assert(std::isgreaterequal(lm1, true) == std::is_unsigned_v<I>);\r\n    assert(std::isgreaterequal(l0, false));\r\n    assert(!std::isgreaterequal(l0, true));\r\n    assert(std::isgreaterequal(l1, false));\r\n    assert(std::isgreaterequal(l1, true));\r\n    assert(std::isgreaterequal(l2, false));\r\n    assert(std::isgreaterequal(l2, true));\r\n    assert(std::isgreaterequal(false, lm1) == std::is_signed_v<I>);\r\n    assert(std::isgreaterequal(true, lm1) == std::is_signed_v<I>);\r\n    assert(std::isgreaterequal(false, l0));\r\n    assert(std::isgreaterequal(true, l0));\r\n    assert(!std::isgreaterequal(false, l1));\r\n    assert(std::isgreaterequal(true, l1));\r\n    assert(!std::isgreaterequal(false, l2));\r\n    assert(!std::isgreaterequal(true, l2));\r\n\r\n    assert(std::isless(lm1, false) == std::is_signed_v<I>);\r\n    assert(std::isless(lm1, true) == std::is_signed_v<I>);\r\n    assert(!std::isless(l0, false));\r\n    assert(std::isless(l0, true));\r\n    assert(!std::isless(l1, false));\r\n    assert(!std::isless(l1, true));\r\n    assert(!std::isless(l2, false));\r\n    assert(!std::isless(l2, true));\r\n    assert(std::isless(false, lm1) == std::is_unsigned_v<I>);\r\n    assert(std::isless(true, lm1) == std::is_unsigned_v<I>);\r\n    assert(!std::isless(false, l0));\r\n    assert(!std::isless(true, l0));\r\n    assert(std::isless(false, l1));\r\n    assert(!std::isless(true, l1));\r\n    assert(std::isless(false, l2));\r\n    assert(std::isless(true, l2));\r\n\r\n    assert(std::islessequal(lm1, false) == std::is_signed_v<I>);\r\n    assert(std::islessequal(lm1, true) == std::is_signed_v<I>);\r\n    assert(std::islessequal(l0, false));\r\n    assert(std::islessequal(l0, true));\r\n    assert(!std::islessequal(l1, false));\r\n    assert(std::islessequal(l1, true));\r\n    assert(!std::islessequal(l2, false));\r\n    assert(!std::islessequal(l2, true));\r\n    assert(std::islessequal(false, lm1) == std::is_unsigned_v<I>);\r\n    assert(std::islessequal(true, lm1) == std::is_unsigned_v<I>);\r\n    assert(std::islessequal(false, l0));\r\n    assert(!std::islessequal(true, l0));\r\n    assert(std::islessequal(false, l1));\r\n    assert(std::islessequal(true, l1));\r\n    assert(std::islessequal(false, l2));\r\n    assert(std::islessequal(true, l2));\r\n\r\n    assert(std::islessgreater(lm1, false));\r\n    assert(std::islessgreater(lm1, true));\r\n    assert(!std::islessgreater(l0, false));\r\n    assert(std::islessgreater(l0, true));\r\n    assert(std::islessgreater(l1, false));\r\n    assert(!std::islessgreater(l1, true));\r\n    assert(std::islessgreater(l2, false));\r\n    assert(std::islessgreater(l2, true));\r\n    assert(std::islessgreater(false, lm1));\r\n    assert(std::islessgreater(true, lm1));\r\n    assert(!std::islessgreater(false, l0));\r\n    assert(std::islessgreater(true, l0));\r\n    assert(std::islessgreater(false, l1));\r\n    assert(!std::islessgreater(true, l1));\r\n    assert(std::islessgreater(false, l2));\r\n    assert(std::islessgreater(true, l2));\r\n\r\n    assert(!std::isunordered(lm1, false));\r\n    assert(!std::isunordered(lm1, true));\r\n    assert(!std::isunordered(l0, false));\r\n    assert(!std::isunordered(l0, true));\r\n    assert(!std::isunordered(l1, false));\r\n    assert(!std::isunordered(l1, true));\r\n    assert(!std::isunordered(l2, false));\r\n    assert(!std::isunordered(l2, true));\r\n    assert(!std::isunordered(false, lm1));\r\n    assert(!std::isunordered(true, lm1));\r\n    assert(!std::isunordered(false, l0));\r\n    assert(!std::isunordered(true, l0));\r\n    assert(!std::isunordered(false, l1));\r\n    assert(!std::isunordered(true, l1));\r\n    assert(!std::isunordered(false, l2));\r\n    assert(!std::isunordered(true, l2));\r\n\r\n    // test overloads in the global namespace\r\n\r\n    assert(::isgreater(lm1, false) == std::is_unsigned_v<I>);\r\n    assert(::isgreater(lm1, true) == std::is_unsigned_v<I>);\r\n    assert(!::isgreater(l0, false));\r\n    assert(!::isgreater(l0, true));\r\n    assert(::isgreater(l1, false));\r\n    assert(!::isgreater(l1, true));\r\n    assert(::isgreater(l2, false));\r\n    assert(::isgreater(l2, true));\r\n    assert(::isgreater(false, lm1) == std::is_signed_v<I>);\r\n    assert(::isgreater(true, lm1) == std::is_signed_v<I>);\r\n    assert(!::isgreater(false, l0));\r\n    assert(::isgreater(true, l0));\r\n    assert(!::isgreater(false, l1));\r\n    assert(!::isgreater(true, l1));\r\n    assert(!::isgreater(false, l2));\r\n    assert(!::isgreater(true, l2));\r\n\r\n    assert(::isgreaterequal(lm1, false) == std::is_unsigned_v<I>);\r\n    assert(::isgreaterequal(lm1, true) == std::is_unsigned_v<I>);\r\n    assert(::isgreaterequal(l0, false));\r\n    assert(!::isgreaterequal(l0, true));\r\n    assert(::isgreaterequal(l1, false));\r\n    assert(::isgreaterequal(l1, true));\r\n    assert(::isgreaterequal(l2, false));\r\n    assert(::isgreaterequal(l2, true));\r\n    assert(::isgreaterequal(false, lm1) == std::is_signed_v<I>);\r\n    assert(::isgreaterequal(true, lm1) == std::is_signed_v<I>);\r\n    assert(::isgreaterequal(false, l0));\r\n    assert(::isgreaterequal(true, l0));\r\n    assert(!::isgreaterequal(false, l1));\r\n    assert(::isgreaterequal(true, l1));\r\n    assert(!::isgreaterequal(false, l2));\r\n    assert(!::isgreaterequal(true, l2));\r\n\r\n    assert(::isless(lm1, false) == std::is_signed_v<I>);\r\n    assert(::isless(lm1, true) == std::is_signed_v<I>);\r\n    assert(!::isless(l0, false));\r\n    assert(::isless(l0, true));\r\n    assert(!::isless(l1, false));\r\n    assert(!::isless(l1, true));\r\n    assert(!::isless(l2, false));\r\n    assert(!::isless(l2, true));\r\n    assert(::isless(false, lm1) == std::is_unsigned_v<I>);\r\n    assert(::isless(true, lm1) == std::is_unsigned_v<I>);\r\n    assert(!::isless(false, l0));\r\n    assert(!::isless(true, l0));\r\n    assert(::isless(false, l1));\r\n    assert(!::isless(true, l1));\r\n    assert(::isless(false, l2));\r\n    assert(::isless(true, l2));\r\n\r\n    assert(::islessequal(lm1, false) == std::is_signed_v<I>);\r\n    assert(::islessequal(lm1, true) == std::is_signed_v<I>);\r\n    assert(::islessequal(l0, false));\r\n    assert(::islessequal(l0, true));\r\n    assert(!::islessequal(l1, false));\r\n    assert(::islessequal(l1, true));\r\n    assert(!::islessequal(l2, false));\r\n    assert(!::islessequal(l2, true));\r\n    assert(::islessequal(false, lm1) == std::is_unsigned_v<I>);\r\n    assert(::islessequal(true, lm1) == std::is_unsigned_v<I>);\r\n    assert(::islessequal(false, l0));\r\n    assert(!::islessequal(true, l0));\r\n    assert(::islessequal(false, l1));\r\n    assert(::islessequal(true, l1));\r\n    assert(::islessequal(false, l2));\r\n    assert(::islessequal(true, l2));\r\n\r\n    assert(::islessgreater(lm1, false));\r\n    assert(::islessgreater(lm1, true));\r\n    assert(!::islessgreater(l0, false));\r\n    assert(::islessgreater(l0, true));\r\n    assert(::islessgreater(l1, false));\r\n    assert(!::islessgreater(l1, true));\r\n    assert(::islessgreater(l2, false));\r\n    assert(::islessgreater(l2, true));\r\n    assert(::islessgreater(false, lm1));\r\n    assert(::islessgreater(true, lm1));\r\n    assert(!::islessgreater(false, l0));\r\n    assert(::islessgreater(true, l0));\r\n    assert(::islessgreater(false, l1));\r\n    assert(!::islessgreater(true, l1));\r\n    assert(::islessgreater(false, l2));\r\n    assert(::islessgreater(true, l2));\r\n\r\n    assert(!::isunordered(lm1, false));\r\n    assert(!::isunordered(lm1, true));\r\n    assert(!::isunordered(l0, false));\r\n    assert(!::isunordered(l0, true));\r\n    assert(!::isunordered(l1, false));\r\n    assert(!::isunordered(l1, true));\r\n    assert(!::isunordered(l2, false));\r\n    assert(!::isunordered(l2, true));\r\n    assert(!::isunordered(false, lm1));\r\n    assert(!::isunordered(true, lm1));\r\n    assert(!::isunordered(false, l0));\r\n    assert(!::isunordered(true, l0));\r\n    assert(!::isunordered(false, l1));\r\n    assert(!::isunordered(true, l1));\r\n    assert(!::isunordered(false, l2));\r\n    assert(!::isunordered(true, l2));\r\n}\r\n\r\ntemplate <class I1>\r\nvoid test_heterogeneous_integer_overloads_per_integer_type() {\r\n    test_heterogeneous_integer_overloads_per_rhs_type<I1, signed char>();\r\n    test_heterogeneous_integer_overloads_per_rhs_type<I1, short>();\r\n    test_heterogeneous_integer_overloads_per_rhs_type<I1, int>();\r\n    test_heterogeneous_integer_overloads_per_rhs_type<I1, long>();\r\n    test_heterogeneous_integer_overloads_per_rhs_type<I1, long long>();\r\n    test_heterogeneous_integer_overloads_per_rhs_type<I1, unsigned char>();\r\n    test_heterogeneous_integer_overloads_per_rhs_type<I1, unsigned short>();\r\n    test_heterogeneous_integer_overloads_per_rhs_type<I1, unsigned int>();\r\n    test_heterogeneous_integer_overloads_per_rhs_type<I1, unsigned long>();\r\n    test_heterogeneous_integer_overloads_per_rhs_type<I1, unsigned long long>();\r\n    test_heterogeneous_integer_overloads_per_rhs_type<I1, char>();\r\n#ifdef __cpp_char8_t\r\n    test_heterogeneous_integer_overloads_per_rhs_type<I1, char8_t>();\r\n#endif // defined(__cpp_char8_t)\r\n    test_heterogeneous_integer_overloads_per_rhs_type<I1, char16_t>();\r\n    test_heterogeneous_integer_overloads_per_rhs_type<I1, char32_t>();\r\n    test_heterogeneous_integer_overloads_per_rhs_type<I1, wchar_t>();\r\n\r\n    test_heterogeneous_integer_overloads_with_bool<I1>();\r\n}\r\n\r\nvoid test_all_heterogeneous_integer_overloads() {\r\n    test_heterogeneous_integer_overloads_per_integer_type<signed char>();\r\n    test_heterogeneous_integer_overloads_per_integer_type<short>();\r\n    test_heterogeneous_integer_overloads_per_integer_type<int>();\r\n    test_heterogeneous_integer_overloads_per_integer_type<long>();\r\n    test_heterogeneous_integer_overloads_per_integer_type<long long>();\r\n    test_heterogeneous_integer_overloads_per_integer_type<unsigned char>();\r\n    test_heterogeneous_integer_overloads_per_integer_type<unsigned short>();\r\n    test_heterogeneous_integer_overloads_per_integer_type<unsigned int>();\r\n    test_heterogeneous_integer_overloads_per_integer_type<unsigned long>();\r\n    test_heterogeneous_integer_overloads_per_integer_type<unsigned long long>();\r\n    test_heterogeneous_integer_overloads_per_integer_type<char>();\r\n#ifdef __cpp_char8_t\r\n    test_heterogeneous_integer_overloads_per_integer_type<char8_t>();\r\n#endif // defined(__cpp_char8_t)\r\n    test_heterogeneous_integer_overloads_per_integer_type<char16_t>();\r\n    test_heterogeneous_integer_overloads_per_integer_type<char32_t>();\r\n    test_heterogeneous_integer_overloads_per_integer_type<wchar_t>();\r\n}\r\n\r\nint main() {\r\n    test_all_heterogeneous_floating_overloads();\r\n    test_all_heterogeneous_integer_overloads();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004618_mixed_operator_usage_keeps_statistical_properties/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004618_mixed_operator_usage_keeps_statistical_properties/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cmath>\r\n#include <cstddef>\r\n#include <numeric>\r\n#include <random>\r\n#include <vector>\r\n\r\nconstexpr std::size_t N = 1000000;\r\n\r\nvoid check_results(const std::vector<double>& generated, const double expected_mean, const double expected_variance) {\r\n    const double actual_mean = std::accumulate(generated.begin(), generated.end(), 0.0) / generated.size();\r\n    assert(std::abs((actual_mean - expected_mean) / expected_mean) < 0.01);\r\n\r\n    double actual_variance = 0;\r\n    double actual_skew     = 0;\r\n    for (const auto& value : generated) {\r\n        const auto deviation = value - actual_mean;\r\n        actual_variance += deviation * deviation;\r\n        actual_skew += deviation * deviation * deviation;\r\n    }\r\n    actual_variance /= generated.size();\r\n    assert(std::abs((actual_variance - expected_variance) / expected_variance) < 0.01);\r\n\r\n    actual_skew /= generated.size() * actual_variance * std::sqrt(actual_variance);\r\n    assert(std::abs(actual_skew) < 0.01);\r\n}\r\n\r\nint main() {\r\n    // The basic idea is to generate values from two different distributions,\r\n    // one defined through the type's constructor, one through the params\r\n    // overload of operator(). The generated values are then checked for\r\n    // their expected statistical properties.\r\n    std::mt19937 rng;\r\n    std::normal_distribution<> dist(5.0, 4.0);\r\n    using dist_params = std::normal_distribution<>::param_type;\r\n    const dist_params params(50.0, 0.5);\r\n    std::vector<double> dist_results;\r\n    dist_results.reserve(N);\r\n    std::vector<double> param_results;\r\n    param_results.reserve(N);\r\n\r\n    // Make sure that we get some first and some second values for both\r\n    // generated distributions\r\n    for (std::size_t i = 0; i < N; i += 2) {\r\n        dist_results.push_back(dist(rng));\r\n        param_results.push_back(dist(rng, params));\r\n        param_results.push_back(dist(rng, params));\r\n        dist_results.push_back(dist(rng));\r\n    }\r\n\r\n    check_results(dist_results, dist.mean(), dist.stddev() * dist.stddev());\r\n    check_results(param_results, params.mean(), params.stddev() * params.stddev());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004618_normal_distribution_avoids_resets/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004618_normal_distribution_avoids_resets/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <random>\r\n\r\nclass FakeGenerator {\r\nprivate:\r\n    std::mt19937 m_underlying_gen;\r\n    std::size_t m_operator_calls = 0;\r\n\r\npublic:\r\n    using GenType     = std::mt19937;\r\n    using result_type = GenType::result_type;\r\n\r\n    static constexpr result_type min() {\r\n        return GenType::min();\r\n    }\r\n    static constexpr result_type max() {\r\n        return GenType::max();\r\n    }\r\n\r\n    result_type operator()() {\r\n        ++m_operator_calls;\r\n        return m_underlying_gen();\r\n    }\r\n\r\n    std::size_t calls() const {\r\n        return m_operator_calls;\r\n    }\r\n};\r\n\r\nint main() {\r\n    FakeGenerator rng;\r\n    std::normal_distribution<> dist(0.0, 1.0);\r\n    using dist_params = std::normal_distribution<>::param_type;\r\n    dist_params params(50.0, 0.5);\r\n    (void) dist(rng);\r\n    const auto calls_before = rng.calls();\r\n    (void) dist(rng);\r\n    const auto calls_after = rng.calls();\r\n    assert(calls_before == calls_after);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004657_expected_constraints_permissive/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004657_expected_constraints_permissive/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <expected>\r\n// <locale> provides several explicit template instantiation definitions that might break constraints checking\r\n// and hence cause errors in /permissive modes.\r\n#include <locale>\r\n#include <string>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nexpected<int, string> test_expected_int_constraints() {\r\n    return 42;\r\n}\r\n\r\nexpected<pair<int, int>, string> test_expected_pair_constraints() {\r\n    return pair<int, int>{42, 1729};\r\n}\r\n\r\nexpected<void, string> test_expected_void_constraints() {\r\n    return {};\r\n}\r\n\r\nunexpected<string> test_unexpected_constraints() {\r\n    return unexpected<string>{string{}};\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004686_vectorization_on_trivial_assignability/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004686_vectorization_on_trivial_assignability/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <iterator>\r\n#include <utility>\r\n\r\n#if _HAS_CXX20\r\n#define CONSTEXPR20 constexpr\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n#define CONSTEXPR20 inline\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\nusing namespace std;\r\n\r\nstruct Cat {};\r\nstruct Leopard : Cat {\r\n    int spots_;\r\n\r\n    Leopard()                       = default;\r\n    Leopard(const Leopard&)         = default;\r\n    Leopard(Leopard&&)              = default;\r\n    Leopard& operator=(Leopard&) && = delete;\r\n    using Cat::operator=;\r\n};\r\n\r\nconstexpr pair<int, int> expected_results[]{{5, 6}, {3, 4}, {1, 2}};\r\n\r\nCONSTEXPR20 void test_reverse_copy() {\r\n    {\r\n        pair<int, int> src[]      = {{1, 2}, {3, 4}, {5, 6}};\r\n        pair<int, int> dst[]      = {{3, 1}, {4, 1}, {5, 9}};\r\n        pair<int&, int&> srcref[] = {\r\n            {src[0].first, src[0].second}, {src[1].first, src[1].second}, {src[2].first, src[2].second}};\r\n        pair<int&, int&> dstref[] = {\r\n            {dst[0].first, dst[0].second}, {dst[1].first, dst[1].second}, {dst[2].first, dst[2].second}};\r\n\r\n        reverse_copy(begin(srcref), end(srcref), dstref);\r\n        assert(equal(begin(dst), end(dst), begin(expected_results), end(expected_results)));\r\n    }\r\n#if _HAS_CXX20\r\n    {\r\n        pair<int, int> src[]      = {{1, 2}, {3, 4}, {5, 6}};\r\n        pair<int, int> dst[]      = {{3, 1}, {4, 1}, {5, 9}};\r\n        pair<int&, int&> srcref[] = {\r\n            {src[0].first, src[0].second}, {src[1].first, src[1].second}, {src[2].first, src[2].second}};\r\n        pair<int&, int&> dstref[] = {\r\n            {dst[0].first, dst[0].second}, {dst[1].first, dst[1].second}, {dst[2].first, dst[2].second}};\r\n\r\n        ranges::reverse_copy(srcref, dstref);\r\n        assert(ranges::equal(dst, expected_results));\r\n    }\r\n#endif // _HAS_CXX20\r\n#if _HAS_CXX23\r\n    {\r\n        pair<int, int> src[]      = {{1, 2}, {3, 4}, {5, 6}};\r\n        pair<int, int> dst[]      = {{3, 1}, {4, 1}, {5, 9}};\r\n        pair<int&, int&> srcref[] = {src[0], src[1], src[2]};\r\n        pair<int&, int&> dstref[] = {dst[0], dst[1], dst[2]};\r\n\r\n        reverse_copy(begin(srcref), end(srcref), dstref);\r\n        assert(equal(begin(dst), end(dst), begin(expected_results), end(expected_results)));\r\n    }\r\n    {\r\n        pair<int, int> src[]      = {{1, 2}, {3, 4}, {5, 6}};\r\n        pair<int, int> dst[]      = {{3, 1}, {4, 1}, {5, 9}};\r\n        pair<int&, int&> srcref[] = {src[0], src[1], src[2]};\r\n        pair<int&, int&> dstref[] = {dst[0], dst[1], dst[2]};\r\n\r\n        ranges::reverse_copy(srcref, dstref);\r\n        assert(ranges::equal(dst, expected_results));\r\n    }\r\n#endif // _HAS_CXX23\r\n}\r\n\r\nconstexpr Leopard make_leopard(const int n) noexcept {\r\n    Leopard result{};\r\n    result.spots_ = n;\r\n    return result;\r\n}\r\n\r\nCONSTEXPR20 void test_copy_move_leopards() {\r\n    constexpr Leopard expected_leopards[]{\r\n        make_leopard(3), make_leopard(1), make_leopard(4), make_leopard(1), make_leopard(5), make_leopard(9)};\r\n    constexpr Leopard zero_leopards[6]{};\r\n    auto equal_leopard = [](const Leopard& lhs, const Leopard& rhs) { return lhs.spots_ == rhs.spots_; };\r\n    {\r\n        Leopard dst[]{\r\n            make_leopard(3), make_leopard(1), make_leopard(4), make_leopard(1), make_leopard(5), make_leopard(9)};\r\n        copy(begin(zero_leopards), end(zero_leopards), begin(dst));\r\n        assert(equal(begin(dst), end(dst), begin(expected_leopards), end(expected_leopards), equal_leopard));\r\n    }\r\n    {\r\n        Leopard dst[]{\r\n            make_leopard(3), make_leopard(1), make_leopard(4), make_leopard(1), make_leopard(5), make_leopard(9)};\r\n        copy_n(begin(zero_leopards), size(zero_leopards), begin(dst));\r\n        assert(equal(begin(dst), end(dst), begin(expected_leopards), end(expected_leopards), equal_leopard));\r\n    }\r\n    {\r\n        Leopard dst[]{\r\n            make_leopard(3), make_leopard(1), make_leopard(4), make_leopard(1), make_leopard(5), make_leopard(9)};\r\n        copy_backward(begin(zero_leopards), end(zero_leopards), end(dst));\r\n        assert(equal(begin(dst), end(dst), begin(expected_leopards), end(expected_leopards), equal_leopard));\r\n    }\r\n    {\r\n        Leopard dst[]{\r\n            make_leopard(3), make_leopard(1), make_leopard(4), make_leopard(1), make_leopard(5), make_leopard(9)};\r\n        move(begin(zero_leopards), end(zero_leopards), begin(dst));\r\n        assert(equal(begin(dst), end(dst), begin(expected_leopards), end(expected_leopards), equal_leopard));\r\n    }\r\n    {\r\n        Leopard dst[]{\r\n            make_leopard(3), make_leopard(1), make_leopard(4), make_leopard(1), make_leopard(5), make_leopard(9)};\r\n        move_backward(begin(zero_leopards), end(zero_leopards), end(dst));\r\n        assert(equal(begin(dst), end(dst), begin(expected_leopards), end(expected_leopards), equal_leopard));\r\n    }\r\n#if _HAS_CXX20\r\n    {\r\n        Leopard dst[]{\r\n            make_leopard(3), make_leopard(1), make_leopard(4), make_leopard(1), make_leopard(5), make_leopard(9)};\r\n        ranges::copy(zero_leopards, dst);\r\n        assert(ranges::equal(dst, expected_leopards, equal_leopard));\r\n    }\r\n    {\r\n        Leopard dst[]{\r\n            make_leopard(3), make_leopard(1), make_leopard(4), make_leopard(1), make_leopard(5), make_leopard(9)};\r\n        ranges::copy_n(ranges::begin(zero_leopards), ranges::distance(zero_leopards), dst);\r\n        assert(ranges::equal(dst, expected_leopards, equal_leopard));\r\n    }\r\n    {\r\n        Leopard dst[]{\r\n            make_leopard(3), make_leopard(1), make_leopard(4), make_leopard(1), make_leopard(5), make_leopard(9)};\r\n        ranges::copy_backward(zero_leopards, ranges::end(dst));\r\n        assert(ranges::equal(dst, expected_leopards, equal_leopard));\r\n    }\r\n    {\r\n        Leopard dst[]{\r\n            make_leopard(3), make_leopard(1), make_leopard(4), make_leopard(1), make_leopard(5), make_leopard(9)};\r\n        ranges::move(zero_leopards, dst);\r\n        assert(ranges::equal(dst, expected_leopards, equal_leopard));\r\n    }\r\n    {\r\n        Leopard dst[]{\r\n            make_leopard(3), make_leopard(1), make_leopard(4), make_leopard(1), make_leopard(5), make_leopard(9)};\r\n        ranges::move_backward(zero_leopards, ranges::end(dst));\r\n        assert(ranges::equal(dst, expected_leopards, equal_leopard));\r\n    }\r\n#endif // _HAS_CXX20\r\n}\r\n\r\n// Pedantically, all of MSVC, Clang, and EDG are currently wrong on this, see LLVM-37038.\r\n// However, if compilers get corrected, the assignment operators of `DerivedLeopard` and `LeopardHouse` will be trivial\r\n// but no-op, and the library side can't correctly conclude that assignments for them shouldn't be vectorized.\r\n// As a result, we keep this as a regression test.\r\nCONSTEXPR20 void test_llvm_37038() {\r\n    struct DerivedLeopard : Leopard {};\r\n    static_assert(is_trivially_move_assignable_v<DerivedLeopard>, \"\");\r\n\r\n    auto make_derived_leopard = [](int n) {\r\n        DerivedLeopard ret{};\r\n        ret.spots_ = n;\r\n        return ret;\r\n    };\r\n\r\n    auto equal_derived = [](const DerivedLeopard& lhs, const DerivedLeopard& rhs) { return lhs.spots_ == rhs.spots_; };\r\n\r\n    {\r\n        DerivedLeopard src[]{\r\n            make_derived_leopard(1), make_derived_leopard(7), make_derived_leopard(2), make_derived_leopard(9)};\r\n        DerivedLeopard dst[4]{};\r\n        move(begin(src), end(src), dst);\r\n        assert(equal(begin(dst), end(dst), begin(src), end(src), equal_derived));\r\n    }\r\n    {\r\n        DerivedLeopard src[]{\r\n            make_derived_leopard(1), make_derived_leopard(7), make_derived_leopard(2), make_derived_leopard(9)};\r\n        DerivedLeopard dst[4]{};\r\n        move_backward(begin(src), end(src), end(dst));\r\n        assert(equal(begin(dst), end(dst), begin(src), end(src), equal_derived));\r\n    }\r\n#if _HAS_CXX20\r\n    {\r\n        DerivedLeopard src[]{\r\n            make_derived_leopard(1), make_derived_leopard(7), make_derived_leopard(2), make_derived_leopard(9)};\r\n        DerivedLeopard dst[4]{};\r\n        ranges::move(src, dst);\r\n        assert(ranges::equal(src, dst, equal_derived));\r\n    }\r\n    {\r\n        DerivedLeopard src[]{\r\n            make_derived_leopard(1), make_derived_leopard(7), make_derived_leopard(2), make_derived_leopard(9)};\r\n        DerivedLeopard dst[4]{};\r\n        ranges::move_backward(src, ranges::end(dst));\r\n        assert(ranges::equal(src, dst, equal_derived));\r\n    }\r\n#endif // _HAS_CXX20\r\n\r\n    struct LeopardHouse {\r\n        Leopard bigcat_;\r\n    };\r\n    static_assert(is_trivially_move_assignable_v<LeopardHouse>, \"\");\r\n\r\n    auto make_leopard_house = [](int n) {\r\n        LeopardHouse ret{};\r\n        ret.bigcat_.spots_ = n;\r\n        return ret;\r\n    };\r\n\r\n    auto equal_house = [](const LeopardHouse& lhs, const LeopardHouse& rhs) {\r\n        return lhs.bigcat_.spots_ == rhs.bigcat_.spots_;\r\n    };\r\n\r\n    {\r\n        LeopardHouse src[]{make_leopard_house(1), make_leopard_house(7), make_leopard_house(2), make_leopard_house(9)};\r\n        LeopardHouse dst[4]{};\r\n        move(begin(src), end(src), dst);\r\n        assert(equal(begin(dst), end(dst), begin(src), end(src), equal_house));\r\n    }\r\n    {\r\n        LeopardHouse src[]{make_leopard_house(1), make_leopard_house(7), make_leopard_house(2), make_leopard_house(9)};\r\n        LeopardHouse dst[4]{};\r\n        move_backward(begin(src), end(src), end(dst));\r\n        assert(equal(begin(dst), end(dst), begin(src), end(src), equal_house));\r\n    }\r\n#if _HAS_CXX20\r\n    {\r\n        LeopardHouse src[]{make_leopard_house(1), make_leopard_house(7), make_leopard_house(2), make_leopard_house(9)};\r\n        LeopardHouse dst[4]{};\r\n        ranges::move(src, dst);\r\n        assert(ranges::equal(src, dst, equal_house));\r\n    }\r\n    {\r\n        LeopardHouse src[]{make_leopard_house(1), make_leopard_house(7), make_leopard_house(2), make_leopard_house(9)};\r\n        LeopardHouse dst[4]{};\r\n        ranges::move_backward(src, ranges::end(dst));\r\n        assert(ranges::equal(src, dst, equal_house));\r\n    }\r\n#endif // _HAS_CXX20\r\n}\r\n\r\nCONSTEXPR20 bool test() {\r\n    test_reverse_copy();\r\n    test_copy_move_leopards();\r\n    test_llvm_37038();\r\n\r\n    return true;\r\n}\r\n\r\n#if _HAS_CXX20\r\nstatic_assert(test());\r\n#endif // _HAS_CXX20\r\n\r\nint main() {\r\n    test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004845_logical_operator_traits_with_non_bool_constant/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004845_logical_operator_traits_with_non_bool_constant/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// GH-4845 <type_traits>: Logical operator traits with non-bool_constant arguments emit truncation warnings\r\n\r\n#include <type_traits>\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <class Base, class Derived>\r\nvoid test_base_derived() {\r\n    STATIC_ASSERT(is_base_of_v<Base, Derived>);\r\n    using ValueType = typename Base::value_type;\r\n    STATIC_ASSERT(is_same_v<const ValueType, decltype(Derived::type::value)>);\r\n    STATIC_ASSERT(Base::value == Derived::type::value);\r\n    STATIC_ASSERT(is_same_v<const ValueType, decltype(Derived::value)>);\r\n    STATIC_ASSERT(Base::value == Derived::value);\r\n}\r\n\r\ntemplate <short N>\r\nusing SC = integral_constant<short, N>;\r\ntemplate <long N>\r\nusing LC = integral_constant<long, N>;\r\n\r\n// This test is verifying the absence of truncation warnings, so it uses integral values of 2 or greater for \"true\"\r\n// values, skipping 1. It also tests these values in both the \"first\" and \"next\" positions, as they were both affected.\r\n\r\nvoid test_conjunction() {\r\n    // N4986 [meta.logical]/5:\r\n    // The specialization conjunction<B1, ..., BN> has a public and unambiguous base that is either\r\n    // - the first type Bi in the list true_type, B1, ..., BN for which bool(Bi::value) is false, or\r\n    // - if there is no such Bi, the last type in the list.\r\n    test_base_derived<LC<3>, conjunction<SC<2>, LC<3>>>();\r\n    test_base_derived<LC<0>, conjunction<SC<4>, LC<0>>>();\r\n    test_base_derived<SC<0>, conjunction<SC<0>, LC<5>>>();\r\n    test_base_derived<SC<0>, conjunction<SC<0>, LC<0>>>();\r\n}\r\n\r\nvoid test_disjunction() {\r\n    // N4986 [meta.logical]/10:\r\n    // The specialization disjunction<B1, ..., BN> has a public and unambiguous base that is either\r\n    // - the first type Bi in the list false_type, B1, ..., BN for which bool(Bi::value) is true, or\r\n    // - if there is no such Bi, the last type in the list.\r\n    test_base_derived<SC<6>, disjunction<SC<6>, LC<7>>>();\r\n    test_base_derived<SC<8>, disjunction<SC<8>, LC<0>>>();\r\n    test_base_derived<LC<9>, disjunction<SC<0>, LC<9>>>();\r\n    test_base_derived<LC<0>, disjunction<SC<0>, LC<0>>>();\r\n}\r\n\r\nvoid test_negation() {\r\n    // N4986 [meta.logical]/12:\r\n    // The class template negation forms the logical negation of its template type argument.\r\n    // The type negation<B> is a Cpp17UnaryTypeTrait with a base characteristic of bool_constant<!bool(B::value)>.\r\n    test_base_derived<false_type, negation<SC<1729>>>();\r\n    test_base_derived<true_type, negation<SC<0>>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004929_internal_tag_constructors/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004929_internal_tag_constructors/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <list>\r\n#include <memory>\r\n#include <string>\r\n#include <type_traits>\r\n\r\n#if _HAS_CXX17\r\n#include <string_view>\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n#define CONSTEXPR20 constexpr\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n#define CONSTEXPR20 inline\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\nusing namespace std;\r\n\r\ntemplate <class>\r\nconstexpr bool is_initializer_list = false;\r\ntemplate <class T>\r\nconstexpr bool is_initializer_list<initializer_list<T>> = true;\r\n\r\ntemplate <class T>\r\nconstexpr initializer_list<T> ilist42 = {T{'4'}, T{'2'}};\r\n\r\ntemplate <class>\r\nconstexpr bool is_basic_string_or_cstr_or_view = false;\r\ntemplate <class C, class T, class A>\r\nconstexpr bool is_basic_string_or_cstr_or_view<basic_string<C, T, A>> = true;\r\ntemplate <class C>\r\nconstexpr bool is_basic_string_or_cstr_or_view<const C*> = true;\r\n#if _HAS_CXX17\r\ntemplate <class C, class T>\r\nconstexpr bool is_basic_string_or_cstr_or_view<basic_string_view<C, T>> = true;\r\n#endif // _HAS_CXX17\r\n\r\nstruct nasty_string_source {\r\n    template <class IList, enable_if_t<is_initializer_list<IList>, int> = 0>\r\n    constexpr operator IList() const {\r\n        return ilist42<typename IList::value_type>;\r\n    }\r\n\r\n    template <class T, enable_if_t<!is_initializer_list<T> && !is_basic_string_or_cstr_or_view<T>, int> = 0>\r\n    constexpr operator T() const {\r\n        return T{};\r\n    }\r\n};\r\n\r\nCONSTEXPR20 bool test_nasty_conversion_to_basic_string() {\r\n    assert(string(nasty_string_source{}, allocator<char>{}) == \"42\"s);\r\n#ifdef __cpp_char8_t\r\n    assert(u8string(nasty_string_source{}, allocator<char8_t>{}) == u8\"42\"s);\r\n#endif // defined(__cpp_char8_t)\r\n    assert(u16string(nasty_string_source{}, allocator<char16_t>{}) == u\"42\"s);\r\n    assert(u32string(nasty_string_source{}, allocator<char32_t>{}) == U\"42\"s);\r\n    assert(wstring(nasty_string_source{}, allocator<wchar_t>{}) == L\"42\"s);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class>\r\nconstexpr bool is_list = false;\r\ntemplate <class T, class A>\r\nconstexpr bool is_list<list<T, A>> = true;\r\n\r\nstruct nasty_list_source {\r\n    template <class IList, enable_if_t<is_initializer_list<IList>, int> = 0>\r\n    constexpr operator IList() const {\r\n        return ilist42<typename IList::value_type>;\r\n    }\r\n\r\n    template <class T, enable_if_t<!is_initializer_list<T> && !is_list<T> && !is_integral_v<T>, int> = 0>\r\n    constexpr operator T() const {\r\n        return T{};\r\n    }\r\n};\r\n\r\nvoid test_nasty_conversion_to_list() {\r\n    allocator<int> ator{};\r\n    assert((list<int>{nasty_list_source{}, ator} == list<int>{int{'4'}, int{'2'}}));\r\n}\r\n\r\n#if _HAS_CXX20\r\nstatic_assert(test_nasty_conversion_to_basic_string());\r\n#endif // _HAS_CXX20\r\n\r\nint main() {\r\n    test_nasty_conversion_to_basic_string();\r\n    test_nasty_conversion_to_list();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_004930_char_traits_user_specialization/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_004930_char_traits_user_specialization/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <bitset>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstring>\r\n#include <cwchar>\r\n#include <ios>\r\n#include <iosfwd>\r\n#include <sstream>\r\n#include <string>\r\n#include <type_traits>\r\n\r\n#if _HAS_CXX17\r\n#include <string_view>\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n#define CONSTEXPR20 constexpr\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n#define CONSTEXPR20 inline\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nclass odd_char_traits {\r\nprivate:\r\n    static constexpr unsigned char odd_mask = 0xF;\r\n\r\npublic:\r\n    using char_type  = T;\r\n    using int_type   = int;\r\n    using off_type   = streamoff;\r\n    using pos_type   = streampos;\r\n    using state_type = mbstate_t;\r\n\r\n    static constexpr bool eq(const char_type c, const char_type d) noexcept {\r\n        return ((static_cast<unsigned char>(c) ^ static_cast<unsigned char>(d)) & odd_mask) == 0;\r\n    }\r\n\r\n    static constexpr bool lt(const char_type c, const char_type d) noexcept {\r\n        return (static_cast<unsigned char>(c) & odd_mask) < (static_cast<unsigned char>(d) & odd_mask);\r\n    }\r\n\r\n    static constexpr int compare(const char_type* const c, const char_type* const d, const size_t n) noexcept {\r\n        for (size_t i = 0; i != n; ++i) {\r\n            int ci = static_cast<unsigned char>(c[i]) & odd_mask;\r\n            int di = static_cast<unsigned char>(d[i]) & odd_mask;\r\n            int r  = ci - di;\r\n            if (r != 0) {\r\n                return r;\r\n            }\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    static constexpr size_t length(const char_type* const p) noexcept {\r\n        const char_type* c = p;\r\n        while ((static_cast<unsigned char>(*c) & odd_mask) != 0) {\r\n            ++c;\r\n        }\r\n\r\n        return static_cast<size_t>(c - p);\r\n    }\r\n\r\n    static constexpr const char_type* find(const char_type* const p, const size_t n, const char_type c) noexcept {\r\n        for (size_t i = 0; i != n; ++i) {\r\n            if (eq(p[i], c)) {\r\n                return p + i;\r\n            }\r\n        }\r\n\r\n        return nullptr;\r\n    }\r\n\r\n    static CONSTEXPR20 char_type* move(char_type* const s, const char_type* const p, const size_t n) noexcept {\r\n#if _HAS_CXX20\r\n        if (is_constant_evaluated()) {\r\n            bool is_dst_in_src_range = false;\r\n            for (size_t i = 0; i != n; ++i) {\r\n                if (p + i == s) {\r\n                    is_dst_in_src_range = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (is_dst_in_src_range) {\r\n                for (size_t i = n; i != 0;) {\r\n                    --i;\r\n                    s[i] = p[i];\r\n                }\r\n            } else {\r\n                for (size_t i = 0; i != n; ++i) {\r\n                    s[i] = p[i];\r\n                }\r\n            }\r\n        } else\r\n#endif // _HAS_CXX20\r\n        {\r\n            memmove(s, p, n);\r\n        }\r\n        return s;\r\n    }\r\n\r\n    static CONSTEXPR20 char_type* copy(char_type* const s, const char_type* const p, const size_t n) noexcept {\r\n#if _HAS_CXX20\r\n        if (is_constant_evaluated()) {\r\n            for (size_t i = 0; i != n; ++i) {\r\n                s[i] = p[i];\r\n            }\r\n        } else\r\n#endif // _HAS_CXX20\r\n        {\r\n            memmove(s, p, n);\r\n        }\r\n        return s;\r\n    }\r\n\r\n    static constexpr void assign(char_type& r, const char_type& d) noexcept {\r\n        r = d;\r\n    }\r\n    static CONSTEXPR20 char_type* assign(char_type* const s, const size_t n, const char_type c) noexcept {\r\n#if _HAS_CXX20\r\n        if (is_constant_evaluated()) {\r\n            for (size_t i = 0; i != n; ++i) {\r\n                s[i] = c;\r\n            }\r\n        } else\r\n#endif // _HAS_CXX20\r\n        {\r\n            memset(s, static_cast<unsigned char>(c), n);\r\n        }\r\n        return s;\r\n    }\r\n\r\n    static constexpr bool not_eof(const int_type i) noexcept {\r\n        return i != -1;\r\n    }\r\n\r\n    static constexpr char_type to_char_type(const int_type i) noexcept {\r\n        return static_cast<char_type>(static_cast<unsigned char>(i));\r\n    }\r\n\r\n    static constexpr int_type to_int_type(const char_type i) noexcept {\r\n        return static_cast<unsigned char>(i);\r\n    }\r\n\r\n    static constexpr bool eq_int_type(const int_type c, const int_type d) noexcept {\r\n        if (c == -1) {\r\n            return d == -1;\r\n        } else {\r\n            return ((c ^ d) & odd_mask) == 0;\r\n        }\r\n    }\r\n\r\n    static constexpr int_type eof() noexcept {\r\n        return -1;\r\n    }\r\n};\r\n\r\nenum odd_char : unsigned char {};\r\n\r\ntemplate <>\r\nclass char_traits<odd_char> : public odd_char_traits<odd_char> {};\r\n\r\n// GH-4930 \"<string>: basic_string<unicorn>::find_meow_of family\r\n// with std::char_traits<unicorn> specialization are not supported\"\r\nCONSTEXPR20 bool test_gh_4930() {\r\n    constexpr odd_char s_init[]{static_cast<odd_char>(0x55), static_cast<odd_char>(0x44), static_cast<odd_char>(0x33),\r\n        static_cast<odd_char>(0x22), static_cast<odd_char>(0x11), static_cast<odd_char>(0)};\r\n    constexpr odd_char s2_init[]{static_cast<odd_char>(0x83), static_cast<odd_char>(0x12), static_cast<odd_char>(0)};\r\n\r\n#if _HAS_CXX17\r\n    using odd_string_view = basic_string_view<odd_char>;\r\n\r\n    odd_string_view sv(s_init);\r\n\r\n    assert(sv.length() == 5);\r\n\r\n    assert(sv.find(static_cast<odd_char>(0x54)) == 1);\r\n    assert(sv.find(static_cast<odd_char>(0x26)) == sv.npos);\r\n\r\n    assert(sv.rfind(static_cast<odd_char>(0x54)) == 1);\r\n    assert(sv.rfind(static_cast<odd_char>(0x26)) == sv.npos);\r\n\r\n    odd_string_view sv2(s2_init);\r\n\r\n    assert(sv.compare(sv2) > 0);\r\n#if _HAS_CXX20\r\n    assert(!sv.starts_with(sv2));\r\n    assert(!sv.ends_with(sv2));\r\n#if _HAS_CXX23\r\n    assert(sv.contains(sv2));\r\n#endif // _HAS_CXX23\r\n#endif // _HAS_CXX20\r\n\r\n    assert(sv.find(sv2) == 2);\r\n\r\n    assert(sv.rfind(sv2) == 2);\r\n\r\n    assert(sv.find_first_of(sv2) == 2);\r\n    assert(sv2.find_first_of(sv) == 0);\r\n\r\n    assert(sv.find_last_of(sv2) == 3);\r\n    assert(sv2.find_last_of(sv) == 1);\r\n\r\n    assert(sv.find_first_not_of(sv2) == 0);\r\n    assert(sv2.find_first_not_of(sv) == sv2.npos);\r\n\r\n    assert(sv.find_last_not_of(sv2) == 4);\r\n    assert(sv2.find_last_not_of(sv) == sv2.npos);\r\n#endif // _HAS_CXX17\r\n\r\n    using odd_string = basic_string<odd_char>;\r\n\r\n    odd_string s(s_init);\r\n\r\n    assert(s.length() == 5);\r\n\r\n    assert(s.find(static_cast<odd_char>(0x54)) == 1);\r\n    assert(s.find(static_cast<odd_char>(0x26)) == s.npos);\r\n\r\n    assert(s.rfind(static_cast<odd_char>(0x54)) == 1);\r\n    assert(s.rfind(static_cast<odd_char>(0x26)) == s.npos);\r\n\r\n    odd_string s2(s2_init);\r\n\r\n    assert(s.compare(s2) > 0);\r\n#if _HAS_CXX20\r\n    assert(!s.starts_with(s2));\r\n    assert(!s.ends_with(s2));\r\n#if _HAS_CXX23\r\n    assert(s.contains(s2));\r\n#endif // _HAS_CXX23\r\n#endif // _HAS_CXX20\r\n\r\n    assert(s.find(s2) == 2);\r\n\r\n    assert(s.rfind(s2) == 2);\r\n\r\n    assert(s.find_first_of(s2) == 2);\r\n    assert(s2.find_first_of(s) == 0);\r\n\r\n    assert(s.find_last_of(s2) == 3);\r\n    assert(s2.find_last_of(s) == 1);\r\n\r\n    assert(s.find_first_not_of(s2) == 0);\r\n    assert(s2.find_first_not_of(s) == s2.npos);\r\n\r\n    assert(s.find_last_not_of(s2) == 4);\r\n    assert(s2.find_last_not_of(s) == s2.npos);\r\n\r\n#if _HAS_CXX17\r\n    assert(s.compare(sv2) > 0);\r\n#if _HAS_CXX20\r\n    assert(!s.starts_with(sv2));\r\n    assert(!s.ends_with(sv2));\r\n#if _HAS_CXX23\r\n    assert(s.contains(sv2));\r\n#endif // _HAS_CXX23\r\n#endif // _HAS_CXX20\r\n\r\n    assert(s.find(sv2) == 2);\r\n\r\n    assert(s.rfind(sv2) == 2);\r\n\r\n    assert(s.find_first_of(sv2) == 2);\r\n    assert(s2.find_first_of(sv) == 0);\r\n\r\n    assert(s.find_last_of(sv2) == 3);\r\n    assert(s2.find_last_of(sv) == 1);\r\n\r\n    assert(s.find_first_not_of(sv2) == 0);\r\n    assert(s2.find_first_not_of(sv) == s2.npos);\r\n\r\n    assert(s.find_last_not_of(sv2) == 4);\r\n    assert(s2.find_last_not_of(sv) == s2.npos);\r\n#endif // _HAS_CXX17\r\n\r\n    return true;\r\n}\r\n\r\n#if _HAS_CXX20\r\nstatic_assert(test_gh_4930());\r\n#endif // _HAS_CXX20\r\n\r\n// GH-4956 \"<bitset>: streaming operator >> does not use character traits\"\r\nvoid test_gh_4956() {\r\n    // bitset's stream extraction operator was using `!=` to compare characters instead of `traits::eq`\r\n    basic_string<char, odd_char_traits<char>> s(\"QQPPQ\", 5);\r\n    basic_istringstream<char, odd_char_traits<char>> iss(s);\r\n\r\n    bitset<7> bs;\r\n    iss >> bs;\r\n\r\n    assert(bs.to_ulong() == 0b11001);\r\n}\r\n\r\nint main() {\r\n    assert(test_gh_4930());\r\n    test_gh_4956();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005090_stl_hardening/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/D_MSVC_STL_HARDENING=1\"\r\n"
  },
  {
    "path": "tests/std/tests/GH_005090_stl_hardening/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// env.lst defines _MSVC_STL_HARDENING to 1.\r\n\r\n#include <array>\r\n#include <bitset>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <list>\r\n#include <memory>\r\n#include <string>\r\n#include <utility>\r\n#include <valarray>\r\n#include <vector>\r\n\r\n#if _HAS_CXX17\r\n#include <optional>\r\n#include <string_view>\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n#include <ranges>\r\n#include <span>\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n#include <expected>\r\n#include <mdspan>\r\n#include <stacktrace>\r\n#endif // _HAS_CXX23\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\n// <array>\r\nvoid test_array_subscript() {\r\n    array<int, 3> a{};\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // /analyze correctly warns: The expression '_Param_(1)<3' is not true at this call.\r\n    (void) a[3];\r\n#pragma warning(pop)\r\n}\r\n\r\nvoid test_array_subscript_const() {\r\n    const array<int, 3> a{};\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // /analyze correctly warns: The expression '_Param_(1)<3' is not true at this call.\r\n    (void) a[3];\r\n#pragma warning(pop)\r\n}\r\n\r\nvoid test_array_zero_subscript() {\r\n    array<int, 0> az{};\r\n    (void) az[0];\r\n}\r\n\r\nvoid test_array_zero_subscript_const() {\r\n    const array<int, 0> az{};\r\n    (void) az[0];\r\n}\r\n\r\nvoid test_array_zero_front() {\r\n    array<int, 0> az{};\r\n    (void) az.front();\r\n}\r\n\r\nvoid test_array_zero_front_const() {\r\n    const array<int, 0> az{};\r\n    (void) az.front();\r\n}\r\n\r\nvoid test_array_zero_back() {\r\n    array<int, 0> az{};\r\n    (void) az.back();\r\n}\r\n\r\nvoid test_array_zero_back_const() {\r\n    const array<int, 0> az{};\r\n    (void) az.back();\r\n}\r\n\r\n// <bitset>\r\nvoid test_bitset_subscript() {\r\n    bitset<100> b{};\r\n    (void) b[100];\r\n}\r\n\r\nvoid test_bitset_subscript_const() {\r\n    const bitset<100> b{};\r\n    (void) b[100];\r\n}\r\n\r\n// <deque>\r\nvoid test_deque_subscript() {\r\n    deque<int> d(3);\r\n    (void) d[3];\r\n}\r\n\r\nvoid test_deque_subscript_const() {\r\n    const deque<int> d(3);\r\n    (void) d[3];\r\n}\r\n\r\nvoid test_deque_front() {\r\n    deque<int> d{};\r\n    (void) d.front();\r\n}\r\n\r\nvoid test_deque_front_const() {\r\n    const deque<int> d{};\r\n    (void) d.front();\r\n}\r\n\r\nvoid test_deque_back() {\r\n    deque<int> d{};\r\n    (void) d.back();\r\n}\r\n\r\nvoid test_deque_back_const() {\r\n    const deque<int> d{};\r\n    (void) d.back();\r\n}\r\n\r\nvoid test_deque_pop_front() {\r\n    deque<int> d{};\r\n    d.pop_front();\r\n}\r\n\r\nvoid test_deque_pop_back() {\r\n    deque<int> d{};\r\n    d.pop_back();\r\n}\r\n\r\n// <forward_list>\r\nvoid test_forward_list_front() {\r\n    forward_list<int> fl{};\r\n    (void) fl.front();\r\n}\r\n\r\nvoid test_forward_list_front_const() {\r\n    const forward_list<int> fl{};\r\n    (void) fl.front();\r\n}\r\n\r\nvoid test_forward_list_pop_front() {\r\n    forward_list<int> fl{};\r\n    fl.pop_front();\r\n}\r\n\r\n// <list>\r\nvoid test_list_front() {\r\n    list<int> l{};\r\n    (void) l.front();\r\n}\r\n\r\nvoid test_list_front_const() {\r\n    const list<int> l{};\r\n    (void) l.front();\r\n}\r\n\r\nvoid test_list_back() {\r\n    list<int> l{};\r\n    (void) l.back();\r\n}\r\n\r\nvoid test_list_back_const() {\r\n    const list<int> l{};\r\n    (void) l.back();\r\n}\r\n\r\nvoid test_list_pop_front() {\r\n    list<int> l{};\r\n    l.pop_front();\r\n}\r\n\r\nvoid test_list_pop_back() {\r\n    list<int> l{};\r\n    l.pop_back();\r\n}\r\n\r\n// <memory>\r\nvoid test_shared_ptr_bounded_array_subscript_underflow() {\r\n    shared_ptr<int[42]> sp{new int[42]{}};\r\n    (void) sp[-1];\r\n}\r\n\r\nvoid test_shared_ptr_bounded_array_subscript_overflow() {\r\n    shared_ptr<int[42]> sp{new int[42]{}};\r\n    (void) sp[84];\r\n}\r\n\r\nvoid test_shared_ptr_unbounded_array_subscript_underflow() {\r\n    shared_ptr<int[]> sp{new int[42]{}};\r\n    (void) sp[-1];\r\n}\r\n\r\n// <string>\r\nvoid test_string_subscript() {\r\n    string s(3, '*');\r\n    (void) s[4]; // beyond null terminator\r\n}\r\n\r\nvoid test_string_subscript_const() {\r\n    const string s(3, '*');\r\n    (void) s[4]; // beyond null terminator\r\n}\r\n\r\nvoid test_string_front() {\r\n    string s{};\r\n    (void) s.front();\r\n}\r\n\r\nvoid test_string_front_const() {\r\n    const string s{};\r\n    (void) s.front();\r\n}\r\n\r\nvoid test_string_back() {\r\n    string s{};\r\n    (void) s.back();\r\n}\r\n\r\nvoid test_string_back_const() {\r\n    const string s{};\r\n    (void) s.back();\r\n}\r\n\r\nvoid test_string_pop_back() {\r\n    string s{};\r\n    s.pop_back();\r\n}\r\n\r\n// <valarray>\r\nvoid test_valarray_subscript() {\r\n    valarray<int> va(3);\r\n    (void) va[3];\r\n}\r\n\r\nvoid test_valarray_subscript_const() {\r\n    const valarray<int> va(3);\r\n    (void) va[3];\r\n}\r\n\r\n// <vector>\r\nvoid test_vector_subscript() {\r\n    vector<int> v(3);\r\n    (void) v[3];\r\n}\r\n\r\nvoid test_vector_subscript_const() {\r\n    const vector<int> v(3);\r\n    (void) v[3];\r\n}\r\n\r\nvoid test_vector_front() {\r\n    vector<int> v{};\r\n    (void) v.front();\r\n}\r\n\r\nvoid test_vector_front_const() {\r\n    const vector<int> v{};\r\n    (void) v.front();\r\n}\r\n\r\nvoid test_vector_back() {\r\n    vector<int> v{};\r\n    (void) v.back();\r\n}\r\n\r\nvoid test_vector_back_const() {\r\n    const vector<int> v{};\r\n    (void) v.back();\r\n}\r\n\r\nvoid test_vector_pop_back() {\r\n    vector<int> v{};\r\n    v.pop_back();\r\n}\r\n\r\nvoid test_vector_bool_subscript() {\r\n    vector<bool> vb(3);\r\n    (void) vb[3];\r\n}\r\n\r\nvoid test_vector_bool_subscript_const() {\r\n    const vector<bool> vb(3);\r\n    (void) vb[3];\r\n}\r\n\r\nvoid test_vector_bool_front() {\r\n    vector<bool> vb{};\r\n    (void) vb.front();\r\n}\r\n\r\nvoid test_vector_bool_front_const() {\r\n    const vector<bool> vb{};\r\n    (void) vb.front();\r\n}\r\n\r\nvoid test_vector_bool_back() {\r\n    vector<bool> vb{};\r\n    (void) vb.back();\r\n}\r\n\r\nvoid test_vector_bool_back_const() {\r\n    const vector<bool> vb{};\r\n    (void) vb.back();\r\n}\r\n\r\nvoid test_vector_bool_pop_back() {\r\n    vector<bool> vb{};\r\n    vb.pop_back();\r\n}\r\n\r\n#if _HAS_CXX17\r\n// <optional>\r\nvoid test_optional_deref_lvalue() {\r\n    optional<int> o{};\r\n    (void) *o;\r\n}\r\n\r\nvoid test_optional_deref_lvalue_const() {\r\n    const optional<int> o{};\r\n    (void) *o;\r\n}\r\n\r\nvoid test_optional_deref_rvalue() {\r\n    optional<int> o{};\r\n    (void) *move(o);\r\n}\r\n\r\nvoid test_optional_deref_rvalue_const() {\r\n    const optional<int> o{};\r\n    (void) *move(o);\r\n}\r\n\r\nvoid test_optional_arrow() {\r\n    optional<int> o{};\r\n    (void) o.operator->();\r\n}\r\n\r\nvoid test_optional_arrow_const() {\r\n    const optional<int> o{};\r\n    (void) o.operator->();\r\n}\r\n\r\n// <string_view>\r\nvoid test_string_view_subscript() {\r\n    const string_view sv{\"Toki\"};\r\n    (void) sv[4];\r\n}\r\n\r\nvoid test_string_view_front() {\r\n    const string_view sv{};\r\n    (void) sv.front();\r\n}\r\n\r\nvoid test_string_view_back() {\r\n    const string_view sv{};\r\n    (void) sv.back();\r\n}\r\n\r\nvoid test_string_view_remove_prefix() {\r\n    string_view sv{\"Cosmos\"};\r\n    sv.remove_prefix(7);\r\n}\r\n\r\nvoid test_string_view_remove_suffix() {\r\n    string_view sv{\"Meadow\"};\r\n    sv.remove_suffix(7);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n// <ranges>\r\n// ranges::subrange derives from ranges::view_interface, which is hardened.\r\nvoid test_ranges_view_interface_subscript() {\r\n    int arr[10]{};\r\n    ranges::subrange<int*> sr{arr + 5, arr + 8};\r\n    (void) sr[3];\r\n}\r\n\r\nvoid test_ranges_view_interface_subscript_const() {\r\n    int arr[10]{};\r\n    const ranges::subrange<int*> sr{arr + 5, arr + 8};\r\n    (void) sr[3];\r\n}\r\n\r\nvoid test_ranges_view_interface_front() {\r\n    int arr[10]{};\r\n    ranges::subrange<int*> sr{arr + 5, arr + 5};\r\n    (void) sr.front();\r\n}\r\n\r\nvoid test_ranges_view_interface_front_const() {\r\n    int arr[10]{};\r\n    const ranges::subrange<int*> sr{arr + 5, arr + 5};\r\n    (void) sr.front();\r\n}\r\n\r\nvoid test_ranges_view_interface_back() {\r\n    int arr[10]{};\r\n    ranges::subrange<int*> sr{arr + 5, arr + 5};\r\n    (void) sr.back();\r\n}\r\n\r\nvoid test_ranges_view_interface_back_const() {\r\n    int arr[10]{};\r\n    const ranges::subrange<int*> sr{arr + 5, arr + 5};\r\n    (void) sr.back();\r\n}\r\n\r\n// <span>\r\nvoid test_span_ctor_first_count() {\r\n    int arr[10]{};\r\n    span<int, 3> sp_static{arr, 10};\r\n}\r\n\r\nvoid test_span_ctor_first_last() {\r\n    int arr[10]{};\r\n    span<int, 3> sp_static{arr, arr + 10};\r\n}\r\n\r\nvoid test_span_ctor_range() {\r\n    vector<int> v(10);\r\n    span<int, 3> sp_static{v};\r\n}\r\n\r\nvoid test_span_ctor_other() {\r\n    int arr[10]{};\r\n    span<int> other{arr};\r\n    span<int, 3> sp_static{other};\r\n}\r\n\r\nvoid test_span_first_compiletime() {\r\n    int arr[10]{};\r\n    const span<int> sp{arr};\r\n    (void) sp.first<11>();\r\n}\r\n\r\nvoid test_span_first_runtime() {\r\n    int arr[10]{};\r\n    const span<int> sp{arr};\r\n    (void) sp.first(11);\r\n}\r\n\r\nvoid test_span_last_compiletime() {\r\n    int arr[10]{};\r\n    const span<int> sp{arr};\r\n    (void) sp.last<11>();\r\n}\r\n\r\nvoid test_span_last_runtime() {\r\n    int arr[10]{};\r\n    const span<int> sp{arr};\r\n    (void) sp.last(11);\r\n}\r\n\r\nvoid test_span_subspan_compiletime_bad_offset() {\r\n    int arr[10]{};\r\n    const span<int> sp{arr};\r\n    (void) sp.subspan<11>();\r\n}\r\n\r\nvoid test_span_subspan_compiletime_bad_count() {\r\n    int arr[10]{};\r\n    const span<int> sp{arr};\r\n    (void) sp.subspan<3, 8>();\r\n}\r\n\r\nvoid test_span_subspan_runtime_bad_offset() {\r\n    int arr[10]{};\r\n    const span<int> sp{arr};\r\n    (void) sp.subspan(11);\r\n}\r\n\r\nvoid test_span_subspan_runtime_bad_count() {\r\n    int arr[10]{};\r\n    const span<int> sp{arr};\r\n    (void) sp.subspan(3, 8);\r\n}\r\n\r\nvoid test_span_subscript() {\r\n    int arr[10]{};\r\n    const span<int> sp{arr};\r\n    (void) sp[10];\r\n}\r\n\r\nvoid test_span_front() {\r\n    const span<int> sp{};\r\n    (void) sp.front();\r\n}\r\n\r\nvoid test_span_back() {\r\n    const span<int> sp{};\r\n    (void) sp.back();\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n// <expected>\r\nvoid test_expected_arrow() {\r\n    expected<int, string> e{unexpect, \"woof\"};\r\n    (void) e.operator->();\r\n}\r\n\r\nvoid test_expected_arrow_const() {\r\n    const expected<int, string> e{unexpect, \"woof\"};\r\n    (void) e.operator->();\r\n}\r\n\r\nvoid test_expected_deref_lvalue() {\r\n    expected<int, string> e{unexpect, \"woof\"};\r\n    (void) *e;\r\n}\r\n\r\nvoid test_expected_deref_lvalue_const() {\r\n    const expected<int, string> e{unexpect, \"woof\"};\r\n    (void) *e;\r\n}\r\n\r\nvoid test_expected_deref_rvalue() {\r\n    expected<int, string> e{unexpect, \"woof\"};\r\n    (void) *move(e);\r\n}\r\n\r\nvoid test_expected_deref_rvalue_const() {\r\n    const expected<int, string> e{unexpect, \"woof\"};\r\n    (void) *move(e);\r\n}\r\n\r\nvoid test_expected_error_lvalue() {\r\n    expected<int, string> e{1729};\r\n    (void) e.error();\r\n}\r\n\r\nvoid test_expected_error_lvalue_const() {\r\n    const expected<int, string> e{1729};\r\n    (void) e.error();\r\n}\r\n\r\nvoid test_expected_error_rvalue() {\r\n    expected<int, string> e{1729};\r\n    (void) move(e).error();\r\n}\r\n\r\nvoid test_expected_error_rvalue_const() {\r\n    const expected<int, string> e{1729};\r\n    (void) move(e).error();\r\n}\r\n\r\nvoid test_expected_void_deref() {\r\n    const expected<void, string> ev{unexpect, \"woof\"};\r\n    (void) *ev;\r\n}\r\n\r\nvoid test_expected_void_error_lvalue() {\r\n    expected<void, string> ev{};\r\n    (void) ev.error();\r\n}\r\n\r\nvoid test_expected_void_error_lvalue_const() {\r\n    const expected<void, string> ev{};\r\n    (void) ev.error();\r\n}\r\n\r\nvoid test_expected_void_error_rvalue() {\r\n    expected<void, string> ev{};\r\n    (void) move(ev).error();\r\n}\r\n\r\nvoid test_expected_void_error_rvalue_const() {\r\n    const expected<void, string> ev{};\r\n    (void) move(ev).error();\r\n}\r\n\r\n// <mdspan>\r\nvoid test_mdspan_ctor_other() {\r\n    char arr[12]{};\r\n    mdspan<char, dextents<int, 2>> other{arr, 4, 3};\r\n    mdspan<const char, extents<int, 3, 4>> md{other};\r\n}\r\n\r\nvoid test_mdspan_subscript_multidim() {\r\n    const auto str{\"HissMeowPurr\"};\r\n    const mdspan<const char, extents<int, 3, 4>> md{str, 3, 4};\r\n    (void) md[1, 4];\r\n}\r\n\r\nvoid test_mdspan_subscript_array() {\r\n    const auto str{\"HissMeowPurr\"};\r\n    const mdspan<const char, extents<int, 3, 4>> md{str, 3, 4};\r\n    const array<int, 2> a_idx{1, 4};\r\n    (void) md[a_idx];\r\n}\r\n\r\nvoid test_mdspan_subscript_span() {\r\n    const auto str{\"HissMeowPurr\"};\r\n    const mdspan<const char, extents<int, 3, 4>> md{str, 3, 4};\r\n    const array<int, 2> a_idx{1, 4};\r\n    const span<const int, 2> sp_idx{a_idx};\r\n    (void) md[sp_idx];\r\n}\r\n\r\n// <stacktrace>\r\nvoid test_stacktrace_current() {\r\n    constexpr auto MaxSize = static_cast<stacktrace::size_type>(-1);\r\n    static_assert(MaxSize > 10);\r\n    (void) stacktrace::current(20, MaxSize - 10);\r\n}\r\n\r\nvoid test_stacktrace_subscript() {\r\n    const auto st = stacktrace::current();\r\n    (void) st[st.size()];\r\n}\r\n#endif // _HAS_CXX23\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n    exec.add_death_tests({\r\n        test_array_subscript,\r\n        test_array_subscript_const,\r\n        test_array_zero_subscript,\r\n        test_array_zero_subscript_const,\r\n        test_array_zero_front,\r\n        test_array_zero_front_const,\r\n        test_array_zero_back,\r\n        test_array_zero_back_const,\r\n        test_bitset_subscript,\r\n        test_bitset_subscript_const,\r\n        test_deque_subscript,\r\n        test_deque_subscript_const,\r\n        test_deque_front,\r\n        test_deque_front_const,\r\n        test_deque_back,\r\n        test_deque_back_const,\r\n        test_deque_pop_front,\r\n        test_deque_pop_back,\r\n        test_forward_list_front,\r\n        test_forward_list_front_const,\r\n        test_forward_list_pop_front,\r\n        test_list_front,\r\n        test_list_front_const,\r\n        test_list_back,\r\n        test_list_back_const,\r\n        test_list_pop_front,\r\n        test_list_pop_back,\r\n        test_shared_ptr_bounded_array_subscript_underflow,\r\n        test_shared_ptr_bounded_array_subscript_overflow,\r\n        test_shared_ptr_unbounded_array_subscript_underflow,\r\n        test_string_subscript,\r\n        test_string_subscript_const,\r\n        test_string_front,\r\n        test_string_front_const,\r\n        test_string_back,\r\n        test_string_back_const,\r\n        test_string_pop_back,\r\n        test_valarray_subscript,\r\n        test_valarray_subscript_const,\r\n        test_vector_subscript,\r\n        test_vector_subscript_const,\r\n        test_vector_front,\r\n        test_vector_front_const,\r\n        test_vector_back,\r\n        test_vector_back_const,\r\n        test_vector_pop_back,\r\n        test_vector_bool_subscript,\r\n        test_vector_bool_subscript_const,\r\n        test_vector_bool_front,\r\n        test_vector_bool_front_const,\r\n        test_vector_bool_back,\r\n        test_vector_bool_back_const,\r\n        test_vector_bool_pop_back,\r\n\r\n#if _HAS_CXX17\r\n        test_optional_deref_lvalue,\r\n        test_optional_deref_lvalue_const,\r\n        test_optional_deref_rvalue,\r\n        test_optional_deref_rvalue_const,\r\n        test_optional_arrow,\r\n        test_optional_arrow_const,\r\n        test_string_view_subscript,\r\n        test_string_view_front,\r\n        test_string_view_back,\r\n        test_string_view_remove_prefix,\r\n        test_string_view_remove_suffix,\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n        test_ranges_view_interface_subscript,\r\n        test_ranges_view_interface_subscript_const,\r\n        test_ranges_view_interface_front,\r\n        test_ranges_view_interface_front_const,\r\n        test_ranges_view_interface_back,\r\n        test_ranges_view_interface_back_const,\r\n        test_span_ctor_first_count,\r\n        test_span_ctor_first_last,\r\n        test_span_ctor_range,\r\n        test_span_ctor_other,\r\n        test_span_first_compiletime,\r\n        test_span_first_runtime,\r\n        test_span_last_compiletime,\r\n        test_span_last_runtime,\r\n        test_span_subspan_compiletime_bad_offset,\r\n        test_span_subspan_compiletime_bad_count,\r\n        test_span_subspan_runtime_bad_offset,\r\n        test_span_subspan_runtime_bad_count,\r\n        test_span_subscript,\r\n        test_span_front,\r\n        test_span_back,\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n        test_expected_arrow,\r\n        test_expected_arrow_const,\r\n        test_expected_deref_lvalue,\r\n        test_expected_deref_lvalue_const,\r\n        test_expected_deref_rvalue,\r\n        test_expected_deref_rvalue_const,\r\n        test_expected_error_lvalue,\r\n        test_expected_error_lvalue_const,\r\n        test_expected_error_rvalue,\r\n        test_expected_error_rvalue_const,\r\n        test_expected_void_deref,\r\n        test_expected_void_error_lvalue,\r\n        test_expected_void_error_lvalue_const,\r\n        test_expected_void_error_rvalue,\r\n        test_expected_void_error_rvalue_const,\r\n        test_mdspan_ctor_other,\r\n        test_mdspan_subscript_multidim,\r\n        test_mdspan_subscript_array,\r\n        test_mdspan_subscript_span,\r\n        test_stacktrace_current,\r\n        test_stacktrace_subscript,\r\n#endif // _HAS_CXX23\r\n    });\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005090_stl_hardening_cxx20_iterators/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_20_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/D_MSVC_STL_HARDENING=1\"\r\n"
  },
  {
    "path": "tests/std/tests/GH_005090_stl_hardening_cxx20_iterators/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// env.lst defines _MSVC_STL_HARDENING to 1.\r\n\r\n#include <cstddef>\r\n#include <istream>\r\n#include <iterator>\r\n#include <utility>\r\n#include <variant>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\n// helper types for common_iterator\r\n\r\nstruct int_writer {\r\n    using difference_type = ptrdiff_t;\r\n\r\n    int n_{};\r\n\r\n    int& operator*() { // non-const\r\n        return n_;\r\n    }\r\n\r\n    int_writer& operator++() {\r\n        return *this;\r\n    }\r\n    int_writer operator++(int) {\r\n        return *this;\r\n    }\r\n\r\n    friend bool operator==(const int_writer&, default_sentinel_t) {\r\n        return false;\r\n    }\r\n};\r\n\r\nclass lowered_iterator {\r\npublic:\r\n    using value_type      = int;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    lowered_iterator() = default;\r\n    explicit lowered_iterator(int* p) : ptr_{p} {}\r\n\r\n    int& operator*() const {\r\n        return *ptr_;\r\n    }\r\n\r\n    int* operator->() const {\r\n        return ptr_;\r\n    }\r\n\r\n    lowered_iterator& operator++() {\r\n        ++ptr_;\r\n        return *this;\r\n    }\r\n\r\n    lowered_iterator operator++(int) {\r\n        auto old = *this;\r\n        ++*this;\r\n        return old;\r\n    }\r\n\r\n    friend bool operator==(const lowered_iterator&, const lowered_iterator&) = default;\r\n\r\n    friend bool operator==(const lowered_iterator& i, int* const se) {\r\n        return i.ptr_ == se;\r\n    }\r\n\r\nprivate:\r\n    int* ptr_ = nullptr;\r\n};\r\n\r\nclass exceptional_iterator {\r\npublic:\r\n    using value_type      = int;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    exceptional_iterator() = default;\r\n    explicit exceptional_iterator(int* p) : ptr_{p} {}\r\n    exceptional_iterator(const exceptional_iterator& other) : ptr_{other.ptr_} {\r\n        check_throwing();\r\n    }\r\n\r\n    exceptional_iterator& operator=(const exceptional_iterator& other) {\r\n        ptr_ = other.ptr_;\r\n        check_throwing();\r\n        return *this;\r\n    }\r\n\r\n    operator lowered_iterator() const {\r\n        return lowered_iterator{ptr_};\r\n    }\r\n\r\n    int& operator*() const {\r\n        return *ptr_;\r\n    }\r\n\r\n    int& operator[](const ptrdiff_t n) const {\r\n        return ptr_[n];\r\n    }\r\n\r\n    int* operator->() const {\r\n        return ptr_;\r\n    }\r\n\r\n    exceptional_iterator& operator++() {\r\n        ++ptr_;\r\n        return *this;\r\n    }\r\n\r\n    exceptional_iterator operator++(int) {\r\n        auto old = *this;\r\n        ++*this;\r\n        return old;\r\n    }\r\n\r\n    exceptional_iterator& operator--() {\r\n        --ptr_;\r\n        return *this;\r\n    }\r\n\r\n    exceptional_iterator operator--(int) {\r\n        auto old = *this;\r\n        --*this;\r\n        return old;\r\n    }\r\n\r\n    exceptional_iterator& operator+=(const ptrdiff_t n) {\r\n        ptr_ += n;\r\n        return *this;\r\n    }\r\n\r\n    exceptional_iterator& operator-=(const ptrdiff_t n) {\r\n        ptr_ -= n;\r\n        return *this;\r\n    }\r\n\r\n    friend bool operator==(const exceptional_iterator& i, const exceptional_iterator& j) {\r\n        return i.ptr_ == j.ptr_;\r\n    }\r\n\r\n    friend strong_ordering operator<=>(const exceptional_iterator& i, const exceptional_iterator& j) {\r\n        return i.ptr_ <=> j.ptr_;\r\n    }\r\n\r\n    friend exceptional_iterator operator+(const exceptional_iterator& i, const ptrdiff_t n) {\r\n        return exceptional_iterator{i.ptr_ + n};\r\n    }\r\n    friend exceptional_iterator operator+(const ptrdiff_t n, const exceptional_iterator& i) {\r\n        return exceptional_iterator{i.ptr_ + n};\r\n    }\r\n\r\n    friend exceptional_iterator operator-(const exceptional_iterator& i, const ptrdiff_t n) {\r\n        return exceptional_iterator{i.ptr_ - n};\r\n    }\r\n    friend ptrdiff_t operator-(const exceptional_iterator& i, const exceptional_iterator& j) {\r\n        return i.ptr_ - j.ptr_;\r\n    }\r\n\r\n    friend bool operator==(const exceptional_iterator& i, int* const se) {\r\n        return i.ptr_ == se;\r\n    }\r\n\r\n    friend ptrdiff_t operator-(const exceptional_iterator& i, int* const se) {\r\n        return i.ptr_ - se;\r\n    }\r\n    friend ptrdiff_t operator-(int* const se, const exceptional_iterator& i) {\r\n        return se - i.ptr_;\r\n    }\r\n\r\n    static void reset_throwing() noexcept {\r\n        throwing_ = false;\r\n    }\r\n\r\nprivate:\r\n    static void check_throwing() {\r\n        if (throwing_) {\r\n            throw bad_variant_access{};\r\n        }\r\n        throwing_ = true;\r\n    }\r\n\r\n    int* ptr_ = nullptr;\r\n\r\n    static inline bool throwing_ = false;\r\n};\r\n\r\ncommon_iterator<exceptional_iterator, int*> make_valueless_common_iterator() {\r\n    using CI = common_iterator<exceptional_iterator, int*>;\r\n    exceptional_iterator::reset_throwing();\r\n\r\n    CI ret{static_cast<int*>(nullptr)};\r\n    CI src{exceptional_iterator{}};\r\n    try {\r\n        ret = move(src);\r\n    } catch (...) {\r\n    }\r\n    exceptional_iterator::reset_throwing();\r\n    return ret;\r\n}\r\n\r\n// <iterator>\r\nvoid test_counted_iterator_deref() {\r\n    int arr[1]{};\r\n    auto it = counted_iterator<int*>{arr, 1} + 1;\r\n    (void) *it;\r\n}\r\n\r\nvoid test_counted_iterator_deref_const() {\r\n    int arr[1]{};\r\n    const auto it = counted_iterator<int*>{arr, 1} + 1;\r\n    (void) *it;\r\n}\r\n\r\nvoid test_counted_iterator_subscript() {\r\n    int arr[1]{};\r\n    counted_iterator<int*> it{arr, 1};\r\n    (void) it[1];\r\n}\r\n\r\nvoid test_counted_iterator_iter_move() {\r\n    int arr[1]{};\r\n    auto it = counted_iterator<int*>{arr, 1} + 1;\r\n    (void) ranges::iter_move(it);\r\n}\r\n\r\nvoid test_counted_iterator_iter_swap() {\r\n    int arr[1]{};\r\n    counted_iterator<int*> it{arr, 1};\r\n    auto jt = it + 1;\r\n    (void) ranges::iter_swap(it, jt);\r\n}\r\n\r\nvoid test_counted_iterator_construction() {\r\n    int arr[1]{};\r\n    [[maybe_unused]] counted_iterator<int*> it{arr, -1};\r\n}\r\n\r\nvoid test_counted_iterator_pre_inc() {\r\n    int arr[1]{};\r\n    auto it = counted_iterator<int*>{arr, 1} + 1;\r\n    ++it;\r\n}\r\n\r\nvoid test_counted_iterator_post_inc_input() {\r\n    counted_iterator<istream_iterator<int>> it{istream_iterator<int>{}, 0};\r\n    it++;\r\n}\r\n\r\nvoid test_counted_iterator_post_inc_forward() {\r\n    int arr[1]{};\r\n    auto it = counted_iterator<int*>{arr, 1} + 1;\r\n    it++;\r\n}\r\n\r\nvoid test_counted_iterator_advance() {\r\n    int arr[1]{};\r\n    counted_iterator<int*> it{arr, 1};\r\n    it += 2;\r\n}\r\n\r\nvoid test_counted_iterator_retreat() {\r\n    int arr[1]{};\r\n    counted_iterator<int*> it{arr, 1};\r\n    it -= -2;\r\n}\r\n\r\nvoid test_common_iterator_construct() {\r\n    auto it = make_valueless_common_iterator();\r\n    [[maybe_unused]] common_iterator<lowered_iterator, int*> jt{it};\r\n}\r\n\r\nvoid test_common_iterator_assign() {\r\n    auto it = make_valueless_common_iterator();\r\n    common_iterator<lowered_iterator, int*> jt{static_cast<int*>(nullptr)};\r\n    jt = it;\r\n}\r\n\r\nvoid test_common_iterator_deref() {\r\n    common_iterator<int_writer, default_sentinel_t> it{default_sentinel};\r\n    (void) *it;\r\n}\r\n\r\nvoid test_common_iterator_deref_const() {\r\n    const common_iterator<counted_iterator<int*>, default_sentinel_t> it{default_sentinel};\r\n    (void) *it;\r\n}\r\n\r\nvoid test_common_iterator_arrow() {\r\n    struct S {\r\n        int n;\r\n    };\r\n    common_iterator<counted_iterator<S*>, default_sentinel_t> it{default_sentinel};\r\n    (void) it->n;\r\n}\r\n\r\nvoid test_common_iterator_pre_inc() {\r\n    common_iterator<counted_iterator<int*>, default_sentinel_t> it{default_sentinel};\r\n    (void) ++it;\r\n}\r\n\r\nvoid test_common_iterator_post_inc() {\r\n    common_iterator<counted_iterator<int*>, default_sentinel_t> it{default_sentinel};\r\n    (void) it++;\r\n}\r\n\r\nvoid test_common_iterator_equality() {\r\n    auto it = make_valueless_common_iterator();\r\n    common_iterator<exceptional_iterator, int*> jt{static_cast<int*>(nullptr)};\r\n    (void) (it == jt);\r\n}\r\n\r\nvoid test_common_iterator_difference() {\r\n    auto it = make_valueless_common_iterator();\r\n    common_iterator<exceptional_iterator, int*> jt{static_cast<int*>(nullptr)};\r\n    (void) (it - jt);\r\n}\r\n\r\nvoid test_common_iterator_iter_move() {\r\n    common_iterator<counted_iterator<int*>, default_sentinel_t> it{default_sentinel};\r\n    (void) ranges::iter_move(it);\r\n}\r\n\r\nvoid test_common_iterator_iter_swap() {\r\n    using CI = counted_iterator<int*>;\r\n\r\n    int arr[1]{};\r\n    common_iterator<CI, default_sentinel_t> it{default_sentinel};\r\n    common_iterator<CI, default_sentinel_t> jt{CI{arr, 1}};\r\n    (void) ranges::iter_swap(it, jt);\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n    exec.add_death_tests({\r\n        test_counted_iterator_deref,\r\n        test_counted_iterator_deref_const,\r\n        test_counted_iterator_subscript,\r\n        test_counted_iterator_iter_move,\r\n        test_counted_iterator_iter_swap,\r\n        test_counted_iterator_construction,\r\n        test_counted_iterator_pre_inc,\r\n        test_counted_iterator_post_inc_input,\r\n        test_counted_iterator_post_inc_forward,\r\n        test_counted_iterator_advance,\r\n        test_counted_iterator_retreat,\r\n        test_common_iterator_construct,\r\n        test_common_iterator_assign,\r\n        test_common_iterator_deref,\r\n        test_common_iterator_deref_const,\r\n        test_common_iterator_arrow,\r\n        test_common_iterator_pre_inc,\r\n        test_common_iterator_post_inc,\r\n        test_common_iterator_equality,\r\n        test_common_iterator_difference,\r\n        test_common_iterator_iter_move,\r\n        test_common_iterator_iter_swap,\r\n    });\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005204_regex_collating_ranges/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_005204_regex_collating_ranges/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <locale>\r\n#include <regex>\r\n#include <string>\r\n\r\n#include <test_regex_support.hpp>\r\n\r\n// skip collation tests when linking to the DLL in case of\r\n// _ITERATOR_DEBUG_LEVEL mismatch between code and linked DLL\r\n#ifdef _DEBUG\r\n#define DEFAULT_IDL_SETTING 2\r\n#else\r\n#define DEFAULT_IDL_SETTING 0\r\n#endif\r\n\r\n#if defined(_DLL) && _ITERATOR_DEBUG_LEVEL != DEFAULT_IDL_SETTING\r\n#define SKIP_COLLATE_TESTS\r\n#endif // defined(_DLL) && _ITERATOR_DEBUG_LEVEL != DEFAULT_IDL_SETTING\r\n\r\nusing namespace std;\r\nusing namespace std::regex_constants;\r\n\r\nclass test_wregex_locale {\r\nprivate:\r\n    regex_fixture* const fixture;\r\n    const wstring pattern;\r\n    const string locname;\r\n    const syntax_option_type syntax;\r\n    wregex r;\r\n\r\npublic:\r\n    test_wregex_locale(regex_fixture* const fixture_, const wstring& pattern_, const string& locname_,\r\n        const syntax_option_type syntax_ = ECMAScript)\r\n        : fixture(fixture_), pattern(pattern_), locname(locname_), syntax(syntax_), r() {\r\n        r.imbue(locale{locname});\r\n        r.assign(pattern, syntax);\r\n    }\r\n\r\n    test_wregex_locale(const test_wregex_locale&)            = delete;\r\n    test_wregex_locale& operator=(const test_wregex_locale&) = delete;\r\n\r\n    void should_search_match(\r\n        const wstring& subject, const wstring& expected, const match_flag_type match_flags = match_default) const {\r\n        wsmatch mr;\r\n        try {\r\n            const bool search_result = regex_search(subject, mr, r, match_flags);\r\n            if (!search_result || mr[0] != expected) {\r\n                wprintf(LR\"(Expected regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X) to find \"%s\" for locale \"%hs\", )\",\r\n                    subject.c_str(), pattern.c_str(), static_cast<unsigned int>(syntax),\r\n                    static_cast<unsigned int>(match_flags), expected.c_str(), locname.c_str());\r\n                if (search_result) {\r\n                    wprintf(LR\"(but it matched \"%s\")\"\r\n                            \"\\n\",\r\n                        mr.str().c_str());\r\n                } else {\r\n                    puts(\"but it failed to match\");\r\n                }\r\n\r\n                fixture->fail_regex();\r\n            }\r\n        } catch (const regex_error& e) {\r\n            wprintf(LR\"(Failed to regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X))\", subject.c_str(), pattern.c_str(),\r\n                static_cast<unsigned int>(syntax), static_cast<unsigned int>(match_flags));\r\n            printf(R\"( for locale \"%s\": regex_error: \"%s\")\"\r\n                   \"\\n\",\r\n                locname.c_str(), e.what());\r\n            fixture->fail_regex();\r\n        }\r\n    }\r\n\r\n    void should_search_fail(const wstring& subject, const match_flag_type match_flags = match_default) const {\r\n        wsmatch mr;\r\n        try {\r\n            if (regex_search(subject, mr, r, match_flags)) {\r\n                wprintf(LR\"(Expected regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X) to not match )\"\r\n                        LR\"(for locale \"%hs\", but it found \"%s\")\"\r\n                        \"\\n\",\r\n                    subject.c_str(), pattern.c_str(), static_cast<unsigned int>(syntax),\r\n                    static_cast<unsigned int>(match_flags), locname.c_str(), mr.str().c_str());\r\n                fixture->fail_regex();\r\n            }\r\n        } catch (const regex_error& e) {\r\n            wprintf(LR\"(Failed to regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X))\", subject.c_str(), pattern.c_str(),\r\n                static_cast<unsigned int>(syntax), static_cast<unsigned int>(match_flags));\r\n            printf(R\"( for locale \"%s\": regex_error: \"%s\")\"\r\n                   \"\\n\",\r\n                locname.c_str(), e.what());\r\n            fixture->fail_regex();\r\n        }\r\n    }\r\n};\r\n\r\nregex_fixture g_regexTester;\r\n\r\nvoid regex_with_locale_should_throw(const wstring& pattern, const string& locname, const error_type expected,\r\n    const syntax_option_type syntax = regex_constants::collate) {\r\n    wregex r;\r\n    r.imbue(locale{locname});\r\n    try {\r\n        r.assign(pattern, syntax);\r\n        wprintf(LR\"(regex r(\"%s\", 0x%X) succeeded for locale \"%hs\" (which is bad).)\"\r\n                L\"\\n\",\r\n            pattern.c_str(), static_cast<unsigned int>(syntax), locname.c_str());\r\n        g_regexTester.fail_regex();\r\n    } catch (const regex_error& e) {\r\n        if (e.code() != expected) {\r\n            wprintf(LR\"(regex r(\"%s\", 0x%X) with locale \"%hs\" threw 0x%X; expected 0x%X)\"\r\n                    L\"\\n\",\r\n                pattern.c_str(), static_cast<unsigned int>(syntax), locname.c_str(),\r\n                static_cast<unsigned int>(e.code()), static_cast<unsigned int>(expected));\r\n            g_regexTester.fail_regex();\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_collating_ranges_german() {\r\n\r\n    // special characters in German (umlauts and sharp s)\r\n    static constexpr const wchar_t* special_characters[] = {\r\n        L\"\\u00E4\", // U+00E4 LATIN SMALL LETTER A WITH DIARESIS\r\n        L\"\\u00C4\", // U+00C4 LATIN CAPITAL LETTER A WITH DIARESIS\r\n        L\"\\u00DF\", // U+00DF LATIN SMALL LETTER SHARP S\r\n        L\"\\u1E9E\", // U+1E9E LATIN CAPITAL LETTER SHARP S\r\n        L\"\\u00F6\", // U+00F6 LATIN SMALL LETTER U WITH DIARESIS\r\n        L\"\\u00D6\", // U+00D6 LATIN CAPITAL LETTER U WITH DIARESIS\r\n        L\"\\u00FC\", // U+00FC LATIN SMALL LETTER O WITH DIARESIS\r\n        L\"\\u00DC\" // U+00DC LATIN CAPITAL LETTER O WITH DIARESIS\r\n    };\r\n\r\n    // sanity checks: collation not enabled, with or without imbued locale\r\n    {\r\n        // [a-z], [A-Z] and [A-z] should not match special German characters\r\n        for (const wstring& pattern : {L\"[a-z]\", L\"[A-Z]\", L\"[A-z]\"}) {\r\n            {\r\n                test_wregex nocollate_nolocale(&g_regexTester, pattern);\r\n                for (const auto& s : special_characters) {\r\n                    nocollate_nolocale.should_search_fail(s);\r\n                }\r\n            }\r\n\r\n            {\r\n                test_wregex_locale nocollate_locale(&g_regexTester, pattern, \"de-DE\");\r\n                for (const auto& s : special_characters) {\r\n                    nocollate_locale.should_search_fail(s);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n#ifndef SKIP_COLLATE_TESTS\r\n    // de-DE collation order sorts as follows:\r\n    // a, A,\r\n    // U+00E4 LATIN SMALL LETTER A WITH DIARESIS,\r\n    // U+00C4 LATIN CAPITAL LETTER A WITH DIARESIS,\r\n    // b, B, ..., o, O,\r\n    // U+00F6 LATIN SMALL LETTER O WITH DIARESIS,\r\n    // U+00D6 LATIN CAPITAL LETTER O WITH DIARESIS,\r\n    // p, P, ..., s, S,\r\n    // U+00DF LATIN SMALL LETTER SHARP S\r\n    // U+1E9E LATIN CAPITAL LETTER SHARP S,\r\n    // t, T, u, U,\r\n    // U+00FC LATIN SMALL LETTER U WITH DIARESIS,\r\n    // U+00DC LATIN CAPITAL LETTER U WITH DIARESIS,\r\n    // v, V, ..., z, Z\r\n\r\n    static constexpr const wchar_t* special_characters_without_ae[] = {\r\n        L\"\\u00DF\", // U+00DF LATIN SMALL LETTER SHARP S\r\n        L\"\\u1E9E\", // U+1E9E LATIN CAPITAL LETTER SHARP S\r\n        L\"\\u00F6\", // U+00F6 LATIN SMALL LETTER U WITH DIARESIS\r\n        L\"\\u00D6\", // U+00D6 LATIN CAPITAL LETTER U WITH DIARESIS\r\n        L\"\\u00FC\", // U+00FC LATIN SMALL LETTER O WITH DIARESIS\r\n        L\"\\u00DC\" // U+00DC LATIN CAPITAL LETTER O WITH DIARESIS\r\n    };\r\n\r\n    {\r\n        test_wregex_locale collate_a_to_a_regex(&g_regexTester, L\"[a-a]\", \"de-DE\", regex_constants::collate);\r\n        collate_a_to_a_regex.should_search_match(L\"a\", L\"a\");\r\n        collate_a_to_a_regex.should_search_fail(L\"A\");\r\n        collate_a_to_a_regex.should_search_fail(L\"\\u00E4\"); // U+00E4 LATIN SMALL LETTER A WITH DIARESIS\r\n        collate_a_to_a_regex.should_search_fail(L\"\\u00C4\"); // U+00C4 LATIN CAPITAL LETTER A WITH DIARESIS\r\n        collate_a_to_a_regex.should_search_fail(L\"b\");\r\n        for (const auto& s : special_characters_without_ae) {\r\n            collate_a_to_a_regex.should_search_fail(s);\r\n        }\r\n    }\r\n\r\n    {\r\n        test_wregex_locale collate_a_to_A_regex(&g_regexTester, L\"[a-A]\", \"de-DE\", regex_constants::collate);\r\n        collate_a_to_A_regex.should_search_match(L\"a\", L\"a\");\r\n        collate_a_to_A_regex.should_search_match(L\"A\", L\"A\");\r\n        collate_a_to_A_regex.should_search_fail(L\"\\u00E4\"); // U+00E4 LATIN SMALL LETTER A WITH DIARESIS\r\n        collate_a_to_A_regex.should_search_fail(L\"\\u00C4\"); // U+00C4 LATIN CAPITAL LETTER A WITH DIARESIS\r\n        collate_a_to_A_regex.should_search_fail(L\"b\");\r\n        for (const auto& s : special_characters_without_ae) {\r\n            collate_a_to_A_regex.should_search_fail(s);\r\n        }\r\n    }\r\n\r\n    {\r\n        test_wregex_locale collate_a_to_ae_regex(&g_regexTester,\r\n            L\"[a-\\u00E4]\", // U+00E4 LATIN SMALL LETTER A WITH DIARESIS\r\n            \"de-DE\", regex_constants::collate);\r\n        collate_a_to_ae_regex.should_search_match(L\"a\", L\"a\");\r\n        collate_a_to_ae_regex.should_search_match(L\"A\", L\"A\");\r\n        collate_a_to_ae_regex.should_search_match(L\"\\u00E4\", L\"\\u00E4\"); // U+00E4 LATIN SMALL LETTER A WITH DIARESIS\r\n        collate_a_to_ae_regex.should_search_fail(L\"\\u00C4\"); // U+00C4 LATIN CAPITAL LETTER A WITH DIARESIS\r\n        collate_a_to_ae_regex.should_search_fail(L\"b\");\r\n        for (const auto& s : special_characters_without_ae) {\r\n            collate_a_to_ae_regex.should_search_fail(s);\r\n        }\r\n    }\r\n\r\n    {\r\n        test_wregex_locale collate_a_to_Ae_regex(&g_regexTester,\r\n            L\"[a-\\u00C4]\", // U+00C4 LATIN CAPITAL LETTER A WITH DIARESIS\r\n            \"de-DE\", regex_constants::collate);\r\n        collate_a_to_Ae_regex.should_search_match(L\"a\", L\"a\");\r\n        collate_a_to_Ae_regex.should_search_match(L\"A\", L\"A\");\r\n        collate_a_to_Ae_regex.should_search_match(L\"\\u00E4\", L\"\\u00E4\"); // U+00E4 LATIN SMALL LETTER A WITH DIARESIS\r\n        collate_a_to_Ae_regex.should_search_match(L\"\\u00C4\", L\"\\u00C4\"); // U+00C4 LATIN CAPITAL LETTER A WITH DIARESIS\r\n        collate_a_to_Ae_regex.should_search_fail(L\"b\");\r\n        for (const auto& s : special_characters_without_ae) {\r\n            collate_a_to_Ae_regex.should_search_fail(s);\r\n        }\r\n    }\r\n\r\n    {\r\n        test_wregex_locale collate_a_to_b_regex(&g_regexTester, L\"[a-b]\", \"de-DE\", regex_constants::collate);\r\n        collate_a_to_b_regex.should_search_match(L\"a\", L\"a\");\r\n        collate_a_to_b_regex.should_search_match(L\"A\", L\"A\");\r\n        collate_a_to_b_regex.should_search_match(L\"\\u00E4\", L\"\\u00E4\"); // U+00E4 LATIN SMALL LETTER A WITH DIARESIS\r\n        collate_a_to_b_regex.should_search_match(L\"\\u00C4\", L\"\\u00C4\"); // U+00C4 LATIN CAPITAL LETTER A WITH DIARESIS\r\n        collate_a_to_b_regex.should_search_match(L\"b\", L\"b\");\r\n        for (const auto& s : special_characters_without_ae) {\r\n            collate_a_to_b_regex.should_search_fail(s);\r\n        }\r\n    }\r\n\r\n    static constexpr const wchar_t* special_characters_without_sharp_s[] = {\r\n        L\"\\u00E4\", // U+00E4 LATIN SMALL LETTER A WITH DIARESIS\r\n        L\"\\u00C4\", // U+00C4 LATIN CAPITAL LETTER A WITH DIARESIS\r\n        L\"\\u00F6\", // U+00F6 LATIN SMALL LETTER U WITH DIARESIS\r\n        L\"\\u00D6\", // U+00D6 LATIN CAPITAL LETTER U WITH DIARESIS\r\n        L\"\\u00FC\", // U+00FC LATIN SMALL LETTER O WITH DIARESIS\r\n        L\"\\u00DC\" // U+00DC LATIN CAPITAL LETTER O WITH DIARESIS\r\n    };\r\n\r\n    {\r\n        test_wregex_locale collate_s_to_S_regex(&g_regexTester, L\"[s-S]\", \"de-DE\", regex_constants::collate);\r\n        collate_s_to_S_regex.should_search_fail(L\"r\");\r\n        collate_s_to_S_regex.should_search_match(L\"s\", L\"s\");\r\n        collate_s_to_S_regex.should_search_match(L\"S\", L\"S\");\r\n        collate_s_to_S_regex.should_search_fail(L\"\\u00DF\"); // U+00DF LATIN SMALL LETTER SHARP S\r\n        collate_s_to_S_regex.should_search_fail(L\"\\u1E9E\"); // U+1E9E LATIN CAPITAL LETTER SHARP S\r\n        collate_s_to_S_regex.should_search_fail(L\"t\");\r\n        collate_s_to_S_regex.should_search_fail(L\"u\");\r\n        for (const auto& s : special_characters_without_sharp_s) {\r\n            collate_s_to_S_regex.should_search_fail(s);\r\n        }\r\n    }\r\n\r\n    {\r\n        test_wregex_locale collate_s_to_sharp_s_regex(&g_regexTester,\r\n            L\"[s-\\u00DF]\", // U+00DF LATIN SMALL LETTER SHARP S\r\n            \"de-DE\", regex_constants::collate);\r\n        collate_s_to_sharp_s_regex.should_search_fail(L\"r\");\r\n        collate_s_to_sharp_s_regex.should_search_match(L\"s\", L\"s\");\r\n        collate_s_to_sharp_s_regex.should_search_match(L\"S\", L\"S\");\r\n        collate_s_to_sharp_s_regex.should_search_match(L\"\\u00DF\", L\"\\u00DF\"); // U+00DF LATIN SMALL LETTER SHARP S\r\n        collate_s_to_sharp_s_regex.should_search_fail(L\"\\u1E9E\"); // U+1E9E LATIN CAPITAL LETTER SHARP S\r\n        collate_s_to_sharp_s_regex.should_search_fail(L\"t\");\r\n        collate_s_to_sharp_s_regex.should_search_fail(L\"u\");\r\n        for (const auto& s : special_characters_without_sharp_s) {\r\n            collate_s_to_sharp_s_regex.should_search_fail(s);\r\n        }\r\n    }\r\n\r\n    {\r\n        test_wregex_locale collate_s_to_Sharp_S_regex(&g_regexTester, L\"[s-\\u1E9E]\", // LATIN CAPITAL LETTER SHARP S\r\n            \"de-DE\", regex_constants::collate);\r\n        collate_s_to_Sharp_S_regex.should_search_fail(L\"r\");\r\n        collate_s_to_Sharp_S_regex.should_search_match(L\"s\", L\"s\");\r\n        collate_s_to_Sharp_S_regex.should_search_match(L\"S\", L\"S\");\r\n        collate_s_to_Sharp_S_regex.should_search_match(L\"\\u00DF\", L\"\\u00DF\"); // U+00DF LATIN SMALL LETTER SHARP S\r\n        collate_s_to_Sharp_S_regex.should_search_match(L\"\\u1E9E\", L\"\\u1E9E\"); // U+1E9E LATIN CAPITAL LETTER SHARP S\r\n        collate_s_to_Sharp_S_regex.should_search_fail(L\"t\");\r\n        collate_s_to_Sharp_S_regex.should_search_fail(L\"u\");\r\n        for (const auto& s : special_characters_without_sharp_s) {\r\n            collate_s_to_Sharp_S_regex.should_search_fail(s);\r\n        }\r\n    }\r\n\r\n    {\r\n        test_wregex_locale collate_s_to_t_regex(&g_regexTester, L\"[s-t]\", \"de-DE\", regex_constants::collate);\r\n        collate_s_to_t_regex.should_search_fail(L\"r\");\r\n        collate_s_to_t_regex.should_search_match(L\"s\", L\"s\");\r\n        collate_s_to_t_regex.should_search_match(L\"S\", L\"S\");\r\n        collate_s_to_t_regex.should_search_match(L\"\\u00DF\", L\"\\u00DF\"); // U+00DF LATIN SMALL LETTER SHARP S\r\n        collate_s_to_t_regex.should_search_match(L\"\\u1E9E\", L\"\\u1E9E\"); // U+1E9E LATIN CAPITAL LETTER SHARP S\r\n        collate_s_to_t_regex.should_search_match(L\"t\", L\"t\");\r\n        collate_s_to_t_regex.should_search_fail(L\"u\");\r\n        for (const auto& s : special_characters_without_sharp_s) {\r\n            collate_s_to_t_regex.should_search_fail(s);\r\n        }\r\n    }\r\n\r\n    {\r\n        test_wregex_locale collate_A_to_z_regex(&g_regexTester, L\"[A-z]\", \"de-DE\", regex_constants::collate);\r\n        collate_A_to_z_regex.should_search_fail(L\"a\");\r\n        for (wchar_t ascii_upper = L'A'; ascii_upper < L'Z'; ++ascii_upper) {\r\n            collate_A_to_z_regex.should_search_match(wstring(1, ascii_upper), wstring(1, ascii_upper));\r\n        }\r\n        for (wchar_t ascii_lower = L'b'; ascii_lower <= L'z'; ++ascii_lower) {\r\n            collate_A_to_z_regex.should_search_match(wstring(1, ascii_lower), wstring(1, ascii_lower));\r\n        }\r\n        for (const auto& s : special_characters) {\r\n            collate_A_to_z_regex.should_search_match(s, s);\r\n        }\r\n        collate_A_to_z_regex.should_search_fail(L\"Z\");\r\n    }\r\n\r\n    regex_with_locale_should_throw(L\"[A-a]\", \"de-DE\", error_range);\r\n    regex_with_locale_should_throw(L\"[\\u00DF-S]\", // U+00DF LATIN SMALL LETTER SHARP S\r\n        \"de-DE\", error_range);\r\n    regex_with_locale_should_throw(\r\n        L\"[\\u1E9E-\\u00DF]\", // U+1E9E LATIN CAPITAL LETTER SHARP S, U+00DF LATIN SMALL LETTER SHARP S\r\n        \"de-DE\", error_range);\r\n#endif // !defined(SKIP_COLLATE_TESTS)\r\n}\r\n\r\nclass gh_994_regex_traits : public regex_traits<char> {\r\npublic:\r\n    template <class FwdIt>\r\n    string_type lookup_collatename(FwdIt first, FwdIt last) const {\r\n        // from Hungarian\r\n        const string_type collating_symbols[] = {\"cs\", \"Cs\", \"dzs\"};\r\n        const string_type hyphen_name         = \"hyphen\";\r\n\r\n        for (const string_type& coll_symbol : collating_symbols) {\r\n            if (equal(first, last, begin(coll_symbol), end(coll_symbol))) {\r\n                return coll_symbol;\r\n            }\r\n        }\r\n\r\n        if (equal(first, last, begin(hyphen_name), end(hyphen_name))) {\r\n            return \"-\";\r\n        }\r\n\r\n        return regex_traits::lookup_collatename(first, last);\r\n    }\r\n};\r\n\r\nusing gh_994_regex = basic_regex<char, gh_994_regex_traits>;\r\n\r\nvoid gh_994_verify_match(\r\n    const string& subject, const string& pattern, const bool correct, const syntax_option_type syntax = ECMAScript) {\r\n\r\n    gh_994_regex r;\r\n    try {\r\n        r.assign(pattern, syntax);\r\n    } catch (const regex_error& e) {\r\n        printf(R\"(Failed to construct regex(\"%s\", 0x%X) for traits gh_994_regex_traits: \"%s\")\"\r\n               \"\\n\",\r\n            pattern.c_str(), static_cast<unsigned int>(syntax), e.what());\r\n        g_regexTester.fail_regex();\r\n        return;\r\n    }\r\n\r\n    try {\r\n        if (regex_match(subject, r) != correct) {\r\n            printf(R\"(Expected regex_match(\"%s\", regex(\"%s\", 0x%X)) to be %s for traits gh_994_regex_traits.)\"\r\n                   \"\\n\",\r\n                subject.c_str(), pattern.c_str(), static_cast<unsigned int>(syntax), correct ? \"true\" : \"false\");\r\n            g_regexTester.fail_regex();\r\n        }\r\n    } catch (const regex_error& e) {\r\n        printf(R\"(Failed to regex_match(\"%s\", regex(\"%s\", 0x%X)) for traits gh_994_regex_traits: regex_error: \"%s\")\"\r\n               \"\\n\",\r\n            subject.c_str(), pattern.c_str(), static_cast<unsigned int>(syntax), e.what());\r\n        g_regexTester.fail_regex();\r\n    }\r\n}\r\n\r\nvoid gh_994_should_throw(\r\n    const string& pattern, const error_type expected_code, const syntax_option_type syntax = ECMAScript) {\r\n\r\n    try {\r\n        gh_994_regex r(pattern, syntax);\r\n\r\n        printf(R\"(regex r(\"%s\", 0x%X) succeeded for traits gh_994_regex_traits (which is bad).)\"\r\n               \"\\n\",\r\n            pattern.c_str(), static_cast<unsigned int>(syntax));\r\n        g_regexTester.fail_regex();\r\n    } catch (const regex_error& e) {\r\n        if (e.code() != expected_code) {\r\n            printf(R\"(regex r(\"%s\", 0x%X) threw 0x%X for traits gh_994_regex_traits; expected 0x%X)\"\r\n                   \"\\n\",\r\n                pattern.c_str(), static_cast<unsigned int>(syntax), static_cast<unsigned int>(e.code()),\r\n                static_cast<unsigned int>(expected_code));\r\n            g_regexTester.fail_regex();\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_gh_994() {\r\n    // GH-994: Regex with collating symbol erroneously returns a match\r\n    // PR fixed parsing and matching of collating symbols and equivalences in character classes\r\n\r\n    g_regexTester.should_not_match(\"v\", \"[[.(.]a[a]\");\r\n\r\n    g_regexTester.should_not_match(\"(((v\", \"[[.(.]]*\");\r\n    g_regexTester.should_not_match(\"v\", \"[[.(.]]*\");\r\n    g_regexTester.should_not_match(\"vv\", \"[[.(.]]*\");\r\n\r\n    g_regexTester.should_match(\"xxx\", \"[[.(.]x]*\");\r\n    g_regexTester.should_match(\"x((x(\", \"[[.(.]x]*\");\r\n    g_regexTester.should_not_match(\"xxxv\", \"[[.(.]x]*\");\r\n    g_regexTester.should_not_match(\"xxxvv\", \"[[.(.]x]*\");\r\n    g_regexTester.should_not_match(\"x(xv\", \"[[.(.]x]*\");\r\n    g_regexTester.should_not_match(\"v\", \"[[.(.]x]*\");\r\n    g_regexTester.should_not_match(\"vv\", \"[[.(.]x]*\");\r\n    g_regexTester.should_not_match(\"xxxv\", \"[[.(.]x]*\");\r\n\r\n    g_regexTester.should_throw(\"[[.whatisthis.]]\", error_collate);\r\n\r\n    gh_994_verify_match(\"a\", \"[[.cs.]a]\", true);\r\n    gh_994_verify_match(\"c\", \"[[.cs.]a]\", false);\r\n    gh_994_verify_match(\"ca\", \"[[.cs.]a]\", false);\r\n    gh_994_verify_match(\"ct\", \"[[.cs.]a]\", false);\r\n    gh_994_verify_match(\"cs\", \"[[.cs.]a]\", true);\r\n    gh_994_verify_match(\"Cs\", \"[[.cs.]a]\", false);\r\n    gh_994_verify_match(\"dsz\", \"[[.cs.]a]\", false);\r\n    gh_994_should_throw(\"[[.CS.]]\", error_collate);\r\n\r\n    gh_994_verify_match(\"cs\", \"[[.cs.][.dzs.]]\", true);\r\n    gh_994_verify_match(\"dzs\", \"[[.cs.][.dzs.]]\", true);\r\n    gh_994_verify_match(\"dz\", \"[[.cs.][.dzs.]]\", false);\r\n    gh_994_verify_match(\"Cs\", \"[[.cs.][.dzs.]]\", false);\r\n    gh_994_verify_match(\"cdzs\", \"[[.cs.][.dzs.]]\", false);\r\n    gh_994_verify_match(\"csdzs\", \"[[.cs.][.dzs.]]\", false);\r\n    gh_994_verify_match(\"a\", \"[[.cs.][.dzs.]]\", false);\r\n    gh_994_verify_match(\"dzt\", \"[[.cs.][.dzs.]]\", false);\r\n\r\n    gh_994_verify_match(\"csa\", \"[[.cs.][.dzs.]]a\", true);\r\n    gh_994_verify_match(\"csb\", \"[[.cs.][.dzs.]]a\", false);\r\n    gh_994_verify_match(\"Csa\", \"[[.cs.][.dzs.]]a\", false);\r\n    gh_994_verify_match(\"dzsa\", \"[[.cs.][.dzs.]]a\", true);\r\n    gh_994_verify_match(\"dzsb\", \"[[.cs.][.dzs.]]a\", false);\r\n    gh_994_verify_match(\"dza\", \"[[.cs.][.dzs.]]a\", false);\r\n    gh_994_verify_match(\"cdzsa\", \"[[.cs.][.dzs.]]a\", false);\r\n    gh_994_verify_match(\"csdzsa\", \"[[.cs.][.dzs.]]a\", false);\r\n    gh_994_verify_match(\"a\", \"[[.cs.][.dzs.]]a\", false);\r\n    gh_994_verify_match(\"aa\", \"[[.cs.][.dzs.]]a\", false);\r\n    gh_994_verify_match(\"dzta\", \"[[.cs.][.dzs.]]a\", false);\r\n\r\n    gh_994_verify_match(\"dzscs\", \"[[.cs.][.dzs.]a]*\", true);\r\n    gh_994_verify_match(\"dzsacs\", \"[[.cs.][.dzs.]a]*\", true);\r\n    gh_994_verify_match(\"dzsbcsa\", \"[[.cs.][.dzs.]a]*\", false);\r\n    gh_994_verify_match(\"dzscsb\", \"[[.cs.][.dzs.]a]*\", false);\r\n    gh_994_verify_match(\"dzscsb\", \"[[.cs.][.dzs.]a]*b\", true);\r\n    gh_994_verify_match(\"dzsCsb\", \"[[.cs.][.dzs.]a]*b\", false);\r\n    gh_994_verify_match(\"bdzscs\", \"[[.cs.][.dzs.]a]*\", false);\r\n    gh_994_verify_match(\"bdzscs\", \"b[[.cs.][.dzs.]a]*\", true);\r\n\r\n    gh_994_verify_match(\"-\", \"[[.hyphen.]]\", true);\r\n    gh_994_verify_match(\"hyphen\", \"[[.hyphen.]]\", false);\r\n    gh_994_verify_match(\"h\", \"[[.hyphen.]]\", false);\r\n    gh_994_verify_match(\"y\", \"[[.hyphen.]]\", false);\r\n    gh_994_verify_match(\"n\", \"[[.hyphen.]]\", false);\r\n\r\n    gh_994_verify_match(\"cs\", \"[[.cs.]]\", true, icase);\r\n    gh_994_verify_match(\"Cs\", \"[[.cs.]]\", true, icase);\r\n    gh_994_verify_match(\"CS\", \"[[.cs.]]\", true, icase);\r\n    gh_994_verify_match(\"cs\", \"[[.Cs.]]\", true, icase);\r\n    gh_994_verify_match(\"Cs\", \"[[.Cs.]]\", true, icase);\r\n    gh_994_verify_match(\"CS\", \"[[.Cs.]]\", true, icase);\r\n    gh_994_should_throw(\"[[.CS.]]\", error_collate, icase);\r\n    gh_994_verify_match(\"dzscsb\", \"[[.Cs.][.dzs.]a]*\", false, icase);\r\n    gh_994_verify_match(\"dzscsb\", \"[[.cs.][.dzs.]a]*b\", true, icase);\r\n    gh_994_verify_match(\"dzsCsb\", \"[[.cs.][.dzs.]a]*b\", true, icase);\r\n    gh_994_verify_match(\"DzsCsb\", \"[[.cs.][.dzs.]a]*b\", true, icase);\r\n\r\n    gh_994_verify_match(\"cs\", \"[[.cs.]]\", true, regex_constants::collate);\r\n    gh_994_verify_match(\"Cs\", \"[[.cs.]]\", false, regex_constants::collate);\r\n    gh_994_verify_match(\"CS\", \"[[.cs.]]\", false, regex_constants::collate);\r\n    gh_994_verify_match(\"cs\", \"[[.Cs.]]\", false, regex_constants::collate);\r\n    gh_994_verify_match(\"Cs\", \"[[.Cs.]]\", true, regex_constants::collate);\r\n    gh_994_verify_match(\"CS\", \"[[.Cs.]]\", false, regex_constants::collate);\r\n    gh_994_should_throw(\"[[.CS.]]\", error_collate, regex_constants::collate);\r\n    gh_994_verify_match(\"dzscsb\", \"[[.cs.][.dzs.]a]*\", false, regex_constants::collate);\r\n    gh_994_verify_match(\"dzscsb\", \"[[.cs.][.dzs.]a]*b\", true, regex_constants::collate);\r\n    gh_994_verify_match(\"dzsCsb\", \"[[.cs.][.dzs.]a]*b\", false, regex_constants::collate);\r\n    gh_994_verify_match(\"DzsCsb\", \"[[.cs.][.dzs.]a]*b\", false, regex_constants::collate);\r\n\r\n    g_regexTester.should_match(\"b\", \"[[.b.]-f]\");\r\n    g_regexTester.should_match(\"f\", \"[[.b.]-f]\");\r\n    g_regexTester.should_not_match(\"a\", \"[[.b.]-f]\");\r\n    g_regexTester.should_not_match(\"g\", \"[[.b.]-f]\");\r\n    g_regexTester.should_match(\"b\", \"[b-[.f.]]\");\r\n    g_regexTester.should_match(\"f\", \"[b-[.f.]]\");\r\n    g_regexTester.should_not_match(\"a\", \"[b-[.f.]]\");\r\n    g_regexTester.should_not_match(\"g\", \"[b-[.f.]]\");\r\n    g_regexTester.should_match(\"b\", \"[[.b.]-[.f.]]\");\r\n    g_regexTester.should_match(\"f\", \"[[.b.]-[.f.]]\");\r\n    g_regexTester.should_not_match(\"a\", \"[[.b.]-[.f.]]\");\r\n    g_regexTester.should_not_match(\"g\", \"[[.b.]-[.f.]]\");\r\n\r\n    g_regexTester.should_match(\"bi\", \"[[.b.]-f]i\");\r\n    g_regexTester.should_match(\"fi\", \"[[.b.]-f]i\");\r\n    g_regexTester.should_not_match(\"ai\", \"[[.b.]-f]i\");\r\n    g_regexTester.should_not_match(\"gi\", \"[[.b.]-f]i\");\r\n    g_regexTester.should_not_match(\"i\", \"[[.b.]-f]i\");\r\n    g_regexTester.should_match(\"bi\", \"[b-[.f.]]i\");\r\n    g_regexTester.should_match(\"fi\", \"[b-[.f.]]i\");\r\n    g_regexTester.should_not_match(\"ai\", \"[b-[.f.]]i\");\r\n    g_regexTester.should_not_match(\"gi\", \"[b-[.f.]]i\");\r\n    g_regexTester.should_not_match(\"i\", \"[b-[.f.]]i\");\r\n    g_regexTester.should_match(\"bi\", \"[[.b.]-[.f.]]i\");\r\n    g_regexTester.should_match(\"fi\", \"[[.b.]-[.f.]]i\");\r\n    g_regexTester.should_not_match(\"ai\", \"[[.b.]-[.f.]]i\");\r\n    g_regexTester.should_not_match(\"gi\", \"[[.b.]-[.f.]]i\");\r\n    g_regexTester.should_not_match(\"i\", \"[[.b.]-[.f.]]i\");\r\n\r\n    g_regexTester.should_match(\"becdfi\", \"[[.b.]-[.f.]]*i\");\r\n    g_regexTester.should_not_match(\"becdfb\", \"[[.b.]-[.f.]]*i\");\r\n    g_regexTester.should_not_match(\"becdfj\", \"[[.b.]-[.f.]]*i\");\r\n\r\n    // TRANSITION, GH-5391\r\n    gh_994_should_throw(\"[[.cs.]-f]\", error_range);\r\n    gh_994_should_throw(\"[a-[.cs.]]\", error_range);\r\n    gh_994_should_throw(\"[[.cs.]-[.dzs.]]\", error_range);\r\n\r\n#ifndef _M_CEE_PURE\r\n    g_regexTester.should_throw(\"[[=a=]-c]\", error_range);\r\n    g_regexTester.should_throw(\"[c-[=z=]]\", error_range);\r\n    g_regexTester.should_throw(\"[[=a=]-[=z=]]\", error_range);\r\n\r\n    g_regexTester.should_match(\"a\", \"[[=a=]]\");\r\n    g_regexTester.should_not_match(\"A\", \"[[=a=]]\");\r\n    g_regexTester.should_not_match(\"b\", \"[[=a=]]\");\r\n    g_regexTester.should_not_match(\"B\", \"[[=a=]]\");\r\n    g_regexTester.should_not_match(\"z\", \"[[=Z=]]\");\r\n    g_regexTester.should_match(\"Z\", \"[[=Z=]]\");\r\n    g_regexTester.should_not_match(\"b\", \"[[=Z=]]\");\r\n    g_regexTester.should_not_match(\"B\", \"[[=Z=]]\");\r\n\r\n    g_regexTester.should_match(\"a\", \"[[=a=]]\", icase);\r\n    g_regexTester.should_match(\"A\", \"[[=a=]]\", icase);\r\n    g_regexTester.should_not_match(\"b\", \"[[=a=]]\", icase);\r\n    g_regexTester.should_not_match(\"B\", \"[[=a=]]\", icase);\r\n    g_regexTester.should_match(\"z\", \"[[=Z=]]\", icase);\r\n    g_regexTester.should_match(\"Z\", \"[[=Z=]]\", icase);\r\n    g_regexTester.should_not_match(\"b\", \"[[=Z=]]\", icase);\r\n    g_regexTester.should_not_match(\"B\", \"[[=Z=]]\", icase);\r\n\r\n    g_regexTester.should_match(\"ab\", \"[[=a=]]b\");\r\n    g_regexTester.should_not_match(\"Ab\", \"[[=a=]]b\");\r\n    g_regexTester.should_not_match(\"Ab\", \"[[=a=]]B\");\r\n    g_regexTester.should_not_match(\"b\", \"[[=a=]]b\");\r\n    g_regexTester.should_not_match(\"aab\", \"[[=a=]]b\");\r\n    g_regexTester.should_not_match(\"B\", \"[[=a=]]b\");\r\n    g_regexTester.should_not_match(\"ab\", \"[[=A=]]b\");\r\n    g_regexTester.should_match(\"Ab\", \"[[=A=]]b\");\r\n    g_regexTester.should_not_match(\"Ab\", \"[[=A=]]B\");\r\n    g_regexTester.should_not_match(\"b\", \"[[=A=]]b\");\r\n    g_regexTester.should_not_match(\"AAb\", \"[[=A=]]b\");\r\n    g_regexTester.should_not_match(\"B\", \"[[=A=]]b\");\r\n\r\n    g_regexTester.should_match(\"ab\", \"[[=a=]]b\", icase);\r\n    g_regexTester.should_match(\"Ab\", \"[[=a=]]b\", icase);\r\n    g_regexTester.should_match(\"Ab\", \"[[=a=]]B\", icase);\r\n    g_regexTester.should_not_match(\"b\", \"[[=a=]]b\", icase);\r\n    g_regexTester.should_not_match(\"aab\", \"[[=a=]]b\", icase);\r\n    g_regexTester.should_not_match(\"B\", \"[[=a=]]b\", icase);\r\n    g_regexTester.should_match(\"ab\", \"[[=A=]]b\", icase);\r\n    g_regexTester.should_match(\"Ab\", \"[[=A=]]b\", icase);\r\n    g_regexTester.should_match(\"Ab\", \"[[=A=]]B\", icase);\r\n    g_regexTester.should_not_match(\"b\", \"[[=A=]]b\", icase);\r\n    g_regexTester.should_not_match(\"AAb\", \"[[=A=]]b\", icase);\r\n    g_regexTester.should_not_match(\"B\", \"[[=A=]]b\", icase);\r\n\r\n    g_regexTester.should_not_match(\"AaAaaAaab\", \"[[=a=]]*b\");\r\n    g_regexTester.should_not_match(\"AaAaaAaab\", \"[[=a=]]*c\");\r\n    g_regexTester.should_not_match(\"AaAabcaAaad\", \"[[=a=]bc]*d\");\r\n    g_regexTester.should_match(\"AaAaaAaab\", \"[[=a=]]*b\", icase);\r\n    g_regexTester.should_not_match(\"AaAaaAaab\", \"[[=a=]]*c\", icase);\r\n    g_regexTester.should_match(\"AaAabcaAaad\", \"[[=a=]bc]*d\", icase);\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n}\r\n\r\nvoid test_gh_5435() {\r\n    // GH-5435: <regex>: Equivalence classes have unexpected behavior with std::wregex\r\n#ifndef _M_CEE_PURE\r\n    {\r\n        test_wregex_locale eq_a_regex(&g_regexTester, L\"^[[=a=]]*b$\", \"en-US\");\r\n        eq_a_regex.should_search_match(L\"A\\u00c0ab\", L\"A\\u00c0ab\"); // U+00C0 LATIN CAPITAL LETTER A WITH GRAVE\r\n        eq_a_regex.should_search_fail(L\"Ab\\u00c0ab\"); // U+00C0 LATIN CAPITAL LETTER A WITH GRAVE\r\n        eq_a_regex.should_search_match(L\"A\\u00e0ab\", L\"A\\u00e0ab\"); // U+00E0 LATIN SMALL LETTER A WITH GRAVE\r\n        eq_a_regex.should_search_match(L\"A\\u00c1ab\", L\"A\\u00c1ab\"); // U+00C1 LATIN CAPITAL LETTER A WITH ACUTE\r\n        eq_a_regex.should_search_match(L\"A\\u00e1ab\", L\"A\\u00e1ab\"); // U+00E1 LATIN SMALL LETTER A WITH ACUTE\r\n        eq_a_regex.should_search_match(L\"A\\u00c2ab\", L\"A\\u00c2ab\"); // U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX\r\n        eq_a_regex.should_search_match(L\"A\\u00e2ab\", L\"A\\u00e2ab\"); // U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX\r\n        eq_a_regex.should_search_match(L\"A\\u00c3ab\", L\"A\\u00c3ab\"); // U+00C3 LATIN CAPITAL LETTER A WITH TILDE\r\n        eq_a_regex.should_search_match(L\"A\\u00e3ab\", L\"A\\u00e3ab\"); // U+00E3 LATIN SMALL LETTER A WITH TILDE\r\n        eq_a_regex.should_search_match(L\"A\\u00c4ab\", L\"A\\u00c4ab\"); // U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS\r\n        eq_a_regex.should_search_match(L\"A\\u00e4ab\", L\"A\\u00e4ab\"); // U+00E4 LATIN SMALL LETTER A WITH DIAERESIS\r\n        eq_a_regex.should_search_match(L\"A\\u00c5ab\", L\"A\\u00c5ab\"); // U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE\r\n        eq_a_regex.should_search_match(L\"A\\u00e5ab\", L\"A\\u00e5ab\"); // U+00E5 LATIN SMALL LETTER A WITH RING ABOVE\r\n    }\r\n    {\r\n        test_wregex_locale eq_e_regex(&g_regexTester, L\"^[[=e=]]*b$\", \"en-US\");\r\n        eq_e_regex.should_search_match(L\"e\\u00c8Eb\", L\"e\\u00c8Eb\"); // U+00C8 LATIN CAPITAL LETTER E WITH GRAVE\r\n        eq_e_regex.should_search_fail(L\"eb\\u00c8Eb\"); // U+00C8 LATIN CAPITAL LETTER E WITH GRAVE\r\n        eq_e_regex.should_search_match(L\"e\\u00e8Eb\", L\"e\\u00e8Eb\"); // U+00E8 LATIN SMALL LETTER E WITH GRAVE\r\n        eq_e_regex.should_search_match(L\"e\\u00c9Eb\", L\"e\\u00c9Eb\"); // U+00C9 LATIN CAPITAL LETTER E WITH ACUTE\r\n        eq_e_regex.should_search_match(L\"e\\u00e9Eb\", L\"e\\u00e9Eb\"); // U+00E9 LATIN SMALL LETTER E WITH ACUTE\r\n        eq_e_regex.should_search_match(L\"e\\u00caEb\", L\"e\\u00caEb\"); // U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX\r\n        eq_e_regex.should_search_match(L\"e\\u00eaEb\", L\"e\\u00eaEb\"); // U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX\r\n        eq_e_regex.should_search_match(L\"e\\u00cbEb\", L\"e\\u00cbEb\"); // U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS\r\n        eq_e_regex.should_search_match(L\"e\\u00ebEb\", L\"e\\u00ebEb\"); // U+00EB LATIN SMALL LETTER E WITH DIAERESIS\r\n        eq_e_regex.should_search_fail(L\"e\\u00ccEb\"); // U+00CC LATIN CAPITAL LETTER I WITH GRAVE\r\n        eq_e_regex.should_search_fail(L\"e\\u00ecEb\"); // U+00EC LATIN SMALL LETTER I WITH GRAVE\r\n    }\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n}\r\n\r\nvoid test_gh_5437_ECMAScript_or_collate(syntax_option_type ECMAScript_or_collate) {\r\n    {\r\n        test_wregex char_range(&g_regexTester, L\"^[\\u0001-\\u0200]$\", ECMAScript_or_collate);\r\n        for (wchar_t ch = L'\\u0001'; ch <= L'\\u0200'; ++ch) {\r\n            char_range.should_search_match(wstring(1, ch), wstring(1, ch));\r\n        }\r\n        char_range.should_search_fail(wstring(1, L'\\u0000'));\r\n        char_range.should_search_fail(wstring(1, L'\\u0201'));\r\n    }\r\n    {\r\n        test_wregex char_range(&g_regexTester, L\"^[\\u00FE-\\u0100]$\", ECMAScript_or_collate);\r\n        for (wchar_t ch = L'\\u00FE'; ch <= L'\\u0100'; ++ch) {\r\n            char_range.should_search_match(wstring(1, ch), wstring(1, ch));\r\n        }\r\n        char_range.should_search_fail(wstring(1, L'\\u00FD'));\r\n        char_range.should_search_fail(wstring(1, L'\\u0101'));\r\n    }\r\n}\r\n\r\nvoid test_gh_5437() {\r\n    // GH-5437: make `wregex` handle small character ranges containing U+00FF and U+0100 correctly\r\n    test_gh_5437_ECMAScript_or_collate(ECMAScript);\r\n#ifndef SKIP_COLLATE_TESTS\r\n    test_gh_5437_ECMAScript_or_collate(regex_constants::collate);\r\n#endif // !defined(SKIP_COLLATE_TESTS)\r\n}\r\n\r\nint main() {\r\n    test_collating_ranges_german();\r\n    test_gh_994();\r\n    test_gh_5435();\r\n    test_gh_5437();\r\n\r\n    return g_regexTester.result();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005236_collate_facet/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_005236_collate_facet/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <locale>\r\n#include <string>\r\n\r\n// skip collate::transform() tests when linking to the DLL in case of\r\n// _ITERATOR_DEBUG_LEVEL mismatch between code and linked DLL\r\n#ifdef _DEBUG\r\n#define DEFAULT_IDL_SETTING 2\r\n#else\r\n#define DEFAULT_IDL_SETTING 0\r\n#endif\r\n\r\n#if defined(_DLL) && _ITERATOR_DEBUG_LEVEL != DEFAULT_IDL_SETTING\r\n#define SKIP_COLLATE_TRANSFORM_TESTS\r\n#endif // defined(_DLL) && _ITERATOR_DEBUG_LEVEL != DEFAULT_IDL_SETTING\r\n\r\nusing namespace std;\r\n\r\n// GH-5210 \"std::collate<_Elem>::do_transform() should behave appropriately when _LStrxfrm() fails\"\r\nvoid test_gh_5210() {\r\n#ifndef SKIP_COLLATE_TRANSFORM_TESTS\r\n    {\r\n        locale utf8_locale(\"en-US.UTF-8\");\r\n        const auto& coll = use_facet<collate<char>>(utf8_locale);\r\n\r\n        const string test = \"this i\\xA0s a very brok\\x80n utf-8\\xC8string\";\r\n        assert(coll.transform(test.data(), test.data() + test.size()) == string{});\r\n    }\r\n\r\n    {\r\n        locale en_us_locale(\"en-US\");\r\n        const auto& coll = use_facet<collate<char>>(en_us_locale);\r\n\r\n        {\r\n            const string test1 = \"fluffy kittens\";\r\n            const string test2 = \"fluffy Kittens\";\r\n            assert(coll.transform(test1.data(), test1.data() + test1.size())\r\n                   < coll.transform(test2.data(), test2.data() + test2.size()));\r\n        }\r\n        {\r\n            const string test1 = \"Riddle\";\r\n            const string test2 = \"middle\";\r\n            assert(coll.transform(test1.data(), test1.data() + test1.size())\r\n                   > coll.transform(test2.data(), test2.data() + test2.size()));\r\n        }\r\n    }\r\n\r\n    {\r\n        locale en_us_locale(\"en-US\");\r\n        const auto& coll = use_facet<collate<wchar_t>>(en_us_locale);\r\n\r\n        {\r\n            const wstring test1 = L\"fluffy kittens\";\r\n            const wstring test2 = L\"fluffy Kittens\";\r\n            assert(coll.transform(test1.data(), test1.data() + test1.size())\r\n                   < coll.transform(test2.data(), test2.data() + test2.size()));\r\n        }\r\n        {\r\n            const wstring test1 = L\"Riddle\";\r\n            const wstring test2 = L\"middle\";\r\n            assert(coll.transform(test1.data(), test1.data() + test1.size())\r\n                   > coll.transform(test2.data(), test2.data() + test2.size()));\r\n        }\r\n    }\r\n\r\n    {\r\n        locale de_DE_phone_locale(\"de-DE_phoneb\");\r\n        const auto& coll = use_facet<collate<wchar_t>>(de_DE_phone_locale);\r\n\r\n        {\r\n            const wstring test1 = L\"Strasse\";\r\n            const wstring test2 = L\"Stra\\u00DFe\"; // U+00DF LATIN SMALL LETTER SHARP S\r\n\r\n            // sharp s collates like \"ss\"\r\n            assert(coll.transform(test1.data(), test1.data() + test1.size())\r\n                   == coll.transform(test2.data(), test2.data() + test2.size()));\r\n        }\r\n        {\r\n            const wstring test1 = L\"Kachel\";\r\n            const wstring test2 = L\"Kaetzchen\";\r\n            const wstring test3 = L\"K\\u00E4tzchen\"; // U+00E4 LATIN SMALL LETTER A WITH DIAERESIS\r\n            const wstring test4 = L\"Kater\";\r\n\r\n            // umlaut a collates like \"ae\"\r\n            assert(coll.transform(test1.data(), test1.data() + test1.size())\r\n                   < coll.transform(test2.data(), test2.data() + test2.size()));\r\n            assert(coll.transform(test2.data(), test2.data() + test2.size())\r\n                   == coll.transform(test3.data(), test3.data() + test3.size()));\r\n            assert(coll.transform(test3.data(), test3.data() + test3.size())\r\n                   < coll.transform(test4.data(), test4.data() + test4.size()));\r\n        }\r\n    }\r\n#endif // !defined(SKIP_COLLATE_TRANSFORM_TESTS)\r\n}\r\n\r\nvoid test_gh_5212_compare_hash(const collate<wchar_t>& coll, const wstring& string1, const wstring& string2) {\r\n    assert(coll.hash(string1.data(), string1.data() + string1.size())\r\n           == coll.hash(string2.data(), string2.data() + string2.size()));\r\n}\r\n\r\n// GH-5212: std::collate_byname<_Elem>::hash() yields different hashes for strings that collate the same\r\nvoid test_gh_5212() {\r\n    const locale loc(\"de-DE_phoneb\");\r\n    const auto& coll = use_facet<collate<wchar_t>>(loc);\r\n\r\n    // sharp s collates like \"ss\"\r\n    test_gh_5212_compare_hash(coll, L\"Strasse\", L\"Stra\\u00DFe\"); // U+00DF LATIN SMALL LETTER SHARP S\r\n    // umlaut a collates like \"ae\"\r\n    test_gh_5212_compare_hash(coll, L\"Kaetzchen\", L\"K\\u00E4tzchen\"); // U+00E4 LATIN SMALL LETTER A WITH DIAERESIS\r\n    // umlaut A collates like \"AE\"\r\n    test_gh_5212_compare_hash(coll, L\"AErmel\", L\"\\u00C4rmel\"); // U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS\r\n}\r\n\r\n// GH-5236 \"std::collate<wchar_t> does not respect collation order when compiled with /MD(d) /Zc:wchar_t-\"\r\nvoid test_gh_5236() {\r\n    const wchar_t Ue = L'\\u00DC'; // U+00DC LATIN CAPITAL LETTER U WITH DIARESIS\r\n    const wchar_t U  = L'U';\r\n    const wchar_t V  = L'V';\r\n\r\n    // German phonebook order: \"U+00DC\" is sorted between U and V in collation order\r\n    const locale loc(\"de-DE_phoneb\");\r\n    const auto& coll = use_facet<collate<wchar_t>>(loc);\r\n\r\n    assert(coll.compare(&U, &U + 1, &Ue, &Ue + 1) < 0);\r\n    assert(coll.compare(&V, &V + 1, &Ue, &Ue + 1) > 0);\r\n\r\n#ifndef SKIP_COLLATE_TRANSFORM_TESTS\r\n    assert(coll.transform(&U, &U + 1) < coll.transform(&Ue, &Ue + 1));\r\n    assert(coll.transform(&V, &V + 1) > coll.transform(&Ue, &Ue + 1));\r\n#endif // !defined(SKIP_COLLATE_TRANSFORM_TESTS)\r\n}\r\n\r\nint main() {\r\n    test_gh_5210();\r\n    test_gh_5212();\r\n    test_gh_5236();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005244_regex_escape_sequences/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_005244_regex_escape_sequences/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstddef>\r\n#include <cstdio>\r\n#include <regex>\r\n#include <string>\r\n\r\n#include <test_regex_support.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::regex_constants;\r\n\r\nregex_fixture g_regexTester;\r\n\r\ntemplate <class charT>\r\nclass test_regex_traits {\r\nprivate:\r\n    using rx_traits = regex_traits<charT>;\r\n\r\npublic:\r\n    using char_type       = typename rx_traits::char_type;\r\n    using string_type     = typename rx_traits::string_type;\r\n    using locale_type     = typename rx_traits::locale_type;\r\n    using char_class_type = typename rx_traits::char_class_type;\r\n\r\n    test_regex_traits() = default;\r\n\r\n    static size_t length(const charT* p) {\r\n        return rx_traits::length(p);\r\n    }\r\n\r\n    charT translate(const charT c) const {\r\n        return inner.translate(c);\r\n    }\r\n\r\n    charT translate_nocase(const charT c) const {\r\n        return inner.translate_nocase(c);\r\n    }\r\n\r\n    template <class FwdIt>\r\n    string_type transform(FwdIt first, FwdIt last) const {\r\n        return inner.transform(first, last);\r\n    }\r\n\r\n    template <class FwdIt>\r\n    string_type transform_primary(FwdIt first, FwdIt last) const {\r\n        return inner.transform_primary(first, last);\r\n    }\r\n\r\n    template <class FwdIt>\r\n    string_type lookup_collatename(FwdIt first, FwdIt last) const {\r\n        return inner.lookup_collatename(first, last);\r\n    }\r\n\r\n    template <class FwdIt>\r\n    char_class_type lookup_classname(FwdIt first, FwdIt last, bool icase = false) const {\r\n        FwdIt next = first;\r\n        ++next;\r\n        if (next == last && (*first == 'z' || *first == 'Z')) {\r\n            const charT space_class = 's';\r\n            return inner.lookup_classname(&space_class, &space_class + 1, icase);\r\n        }\r\n        return inner.lookup_classname(first, last, icase);\r\n    }\r\n\r\n    bool isctype(charT c, char_class_type f) const {\r\n        return inner.isctype(c, f);\r\n    }\r\n\r\n    int value(charT ch, int radix) const {\r\n        return inner.value(ch, radix);\r\n    }\r\n\r\n    locale_type imbue(locale_type l) {\r\n        return inner.imbue(l);\r\n    }\r\n\r\n    locale_type getloc() const {\r\n        return inner.getloc();\r\n    }\r\n\r\nprivate:\r\n    regex_traits<charT> inner;\r\n};\r\n\r\ntemplate <class Rx>\r\nvoid check_match(const string& subject, const string& pattern, const Rx& re, match_flag_type flags, bool matches) {\r\n    if (regex_match(subject, re, flags) != matches) {\r\n        printf(R\"(Expected regex_match(\"%s\", regex(\"%s\", 0x%X)) to be %s.)\", subject.c_str(), pattern.c_str(),\r\n            re.flags(), matches ? \"true\" : \"false\");\r\n        g_regexTester.fail_regex();\r\n    }\r\n}\r\n\r\ntemplate <class Rx>\r\nvoid check_match(const string& subject, const string& pattern, const Rx& re, match_flag_type flags = match_default) {\r\n    check_match(subject, pattern, re, flags, true);\r\n}\r\n\r\ntemplate <class Rx>\r\nvoid check_no_match(const string& subject, const string& pattern, const Rx& re, match_flag_type flags = match_default) {\r\n    check_match(subject, pattern, re, flags, false);\r\n}\r\n\r\nvoid check_atomescape_controlescape(const string& expected, const string& c, syntax_option_type option) {\r\n    string pattern = \"\\\\\" + c;\r\n    g_regexTester.should_match(expected, pattern, option);\r\n    g_regexTester.should_not_match(\"g\", pattern, option);\r\n    g_regexTester.should_not_match(c, pattern, option);\r\n    g_regexTester.should_not_match(\"\\\\\", pattern, option);\r\n    g_regexTester.should_not_match(pattern, pattern, option);\r\n}\r\n\r\nvoid check_classescape_controlescape(const string& expected, const string& c, syntax_option_type option) {\r\n    string pattern = \"[\\\\\" + c + \"]\";\r\n    g_regexTester.should_match(expected, pattern, option);\r\n    g_regexTester.should_not_match(\"g\", pattern, option);\r\n    g_regexTester.should_not_match(c, pattern, option);\r\n    g_regexTester.should_not_match(\"\\\\\", pattern, option);\r\n}\r\n\r\nvoid check_atomescape_identityescape(const string& c, syntax_option_type option) {\r\n    string pattern = \"\\\\\" + c;\r\n    g_regexTester.should_match(c, pattern, option);\r\n    g_regexTester.should_not_match(\"g\", pattern, option);\r\n    g_regexTester.should_not_match(\"\\\\\", pattern, option);\r\n    g_regexTester.should_not_match(pattern, pattern, option);\r\n}\r\n\r\nvoid check_classescape_identityescape(const string& c, syntax_option_type option) {\r\n    string pattern = \"[\\\\\" + c + \"]\";\r\n    g_regexTester.should_match(c, pattern, option);\r\n    g_regexTester.should_not_match(\"g\", pattern, option);\r\n    g_regexTester.should_not_match(\"\\\\\", pattern, option);\r\n}\r\n\r\nvoid check_classescape_noescape(const string& c, syntax_option_type option) {\r\n    string pattern = \"[\\\\\" + c + \"]\";\r\n    g_regexTester.should_match(c, pattern, option);\r\n    g_regexTester.should_match(\"\\\\\", pattern, option);\r\n    g_regexTester.should_not_match(\"g\", pattern, option);\r\n    g_regexTester.should_not_match(\"\\\\\" + c, pattern, option);\r\n}\r\n\r\nvoid test_gh_5244_atomescape_ecmascript() {\r\n\r\n    // AtomEscape :: DecimalEscape\r\n    // ECMAScript standard says:\r\n    // \\ followed by decimal whose first digit is not zero is a backreference.\r\n    // It is an error if a backreference does not refer to a capture group.\r\n    // \\0 refers to literal NUL and must not be followed by another digit.\r\n\r\n    // literal NUL tests\r\n    g_regexTester.should_match(\"\\0\"s, R\"(\\0)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"0\", R\"(\\0)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\", R\"(\\0)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"(\\0)\", ECMAScript);\r\n    g_regexTester.should_throw(R\"(\\00)\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"(\\01)\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"((a)\\01)\", error_escape, ECMAScript);\r\n\r\n    // backreference tests\r\n    g_regexTester.should_throw(R\"(\\1)\", error_backref, ECMAScript);\r\n    g_regexTester.should_throw(R\"((a)\\10)\", error_backref, ECMAScript);\r\n    g_regexTester.should_match(\"aa\", R\"((a)\\1)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"aa\\\\1\", R\"((a)\\1)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"aa\\\\\", R\"((a)\\1)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"aa1\", R\"((a)\\1)\", ECMAScript);\r\n    g_regexTester.should_match(\"aaaaaaaaabb\", R\"((.)(.)(.)(.)(.)(.)(.)(.)(.)(b)\\10)\");\r\n    g_regexTester.should_not_match(\"aaaaaaaaaba\", R\"((.)(.)(.)(.)(.)(.)(.)(.)(.)(.)\\10)\");\r\n    g_regexTester.should_not_match(\"aaaaaaaaaba0\", R\"((.)(.)(.)(.)(.)(.)(.)(.)(.)(.)\\10)\");\r\n\r\n    // AtomEscape :: CharacterEscape :: ControlEscape\r\n    check_atomescape_controlescape(\"\\f\", \"f\", ECMAScript);\r\n    check_atomescape_controlescape(\"\\n\", \"n\", ECMAScript);\r\n    check_atomescape_controlescape(\"\\r\", \"r\", ECMAScript);\r\n    check_atomescape_controlescape(\"\\t\", \"t\", ECMAScript);\r\n    check_atomescape_controlescape(\"\\v\", \"v\", ECMAScript);\r\n\r\n    // AtomEscape :: CharacterEscape :: 'c' ControlLetter\r\n    g_regexTester.should_match(\"\\x1\", R\"(\\cA)\", ECMAScript);\r\n    g_regexTester.should_match(\"\\x1a\", R\"(\\cZ)\", ECMAScript);\r\n    g_regexTester.should_match(\"\\x1\", R\"(\\ca)\", ECMAScript);\r\n    g_regexTester.should_match(\"\\x1a\", R\"(\\cz)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"(\\ca)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"c\", R\"(\\ca)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"ca\", R\"(\\ca)\", ECMAScript);\r\n    g_regexTester.should_throw(R\"(\\c0)\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"(\\c)\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"(\\c@)\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"(\\c[)\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"(\\c`)\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"(\\c{)\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(L\"\\\\c\\u00C0\", error_escape, ECMAScript); // U+00C0 LATIN CAPITAL LETTER A WITH GRAVE\r\n\r\n    // AtomEscape :: CharacterEscape :: HexEscapeSequence\r\n    g_regexTester.should_match(\"\\x00\"s, R\"(\\x00)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\x00\", R\"(\\x00)\", ECMAScript);\r\n    g_regexTester.should_match(\"\\x00\"s + \"0\", R\"(\\x000)\", ECMAScript);\r\n    g_regexTester.should_match(\"A\", R\"(\\x41)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"(\\x41)\", ECMAScript);\r\n    g_regexTester.should_match(\"\\xff\", R\"(\\xff)\", ECMAScript);\r\n    g_regexTester.should_throw(R\"(\\x)\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"(\\x0)\", error_escape, ECMAScript);\r\n\r\n    // AtomEscape :: CharacterEscape :: UnicodeEscapeSequence\r\n    g_regexTester.should_match(\"\\u0000\"s, R\"(\\u0000)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\u0000\", R\"(\\u0000)\", ECMAScript);\r\n    g_regexTester.should_match(\"\\u0000\"s + \"0\", R\"(\\u00000)\", ECMAScript);\r\n    g_regexTester.should_match(\"A\", R\"(\\u0041)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"(\\u0041)\", ECMAScript);\r\n    g_regexTester.should_throw(R\"(\\uffff)\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"(\\u2600)\", error_escape, ECMAScript); // U+2600 BLACK SUN WITH RAYS\r\n    g_regexTester.should_throw(R\"(\\u)\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"(\\u0)\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"(\\u00)\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"(\\u000)\", error_escape, ECMAScript);\r\n\r\n    // AtomEscape :: CharacterClassEscape\r\n    g_regexTester.should_match(\"0\", R\"(\\d)\", ECMAScript);\r\n    g_regexTester.should_match(\"5\", R\"(\\d)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"a\", R\"(\\d)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"_\", R\"(\\d)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"-\", R\"(\\d)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\1\", R\"(\\d)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"(\\d)\", ECMAScript);\r\n    g_regexTester.should_not_match(\" \", R\"(\\d)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"0\", R\"(\\D)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"5\", R\"(\\D)\", ECMAScript);\r\n    g_regexTester.should_match(\"a\", R\"(\\D)\", ECMAScript);\r\n    g_regexTester.should_match(\"_\", R\"(\\D)\", ECMAScript);\r\n    g_regexTester.should_match(\"-\", R\"(\\D)\", ECMAScript);\r\n    g_regexTester.should_match(\"\\1\", R\"(\\D)\", ECMAScript);\r\n    g_regexTester.should_match(\"\\\\\", R\"(\\D)\", ECMAScript);\r\n    g_regexTester.should_match(\" \", R\"(\\D)\", ECMAScript);\r\n\r\n    g_regexTester.should_match(\"a\", R\"(\\w)\", ECMAScript);\r\n    g_regexTester.should_match(\"A\", R\"(\\w)\", ECMAScript);\r\n    g_regexTester.should_match(\"0\", R\"(\\w)\", ECMAScript);\r\n    g_regexTester.should_match(\"_\", R\"(\\w)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"-\", R\"(\\w)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\1\", R\"(\\w)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"(\\w)\", ECMAScript);\r\n    g_regexTester.should_not_match(\" \", R\"(\\w)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"a\", R\"(\\W)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"A\", R\"(\\W)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"0\", R\"(\\W)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"_\", R\"(\\W)\", ECMAScript);\r\n    g_regexTester.should_match(\"-\", R\"(\\W)\", ECMAScript);\r\n    g_regexTester.should_match(\"\\1\", R\"(\\W)\", ECMAScript);\r\n    g_regexTester.should_match(\"\\\\\", R\"(\\W)\", ECMAScript);\r\n    g_regexTester.should_match(\" \", R\"(\\W)\", ECMAScript);\r\n\r\n    g_regexTester.should_match(\" \", R\"(\\s)\", ECMAScript);\r\n    g_regexTester.should_match(\"\\t\", R\"(\\s)\", ECMAScript);\r\n    g_regexTester.should_match(\"\\n\", R\"(\\s)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"a\", R\"(\\s)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"0\", R\"(\\s)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"_\", R\"(\\s)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"-\", R\"(\\s)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\1\", R\"(\\s)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"(\\s)\", ECMAScript);\r\n    g_regexTester.should_not_match(\" \", R\"(\\S)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\t\", R\"(\\S)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\n\", R\"(\\S)\", ECMAScript);\r\n    g_regexTester.should_match(\"a\", R\"(\\S)\", ECMAScript);\r\n    g_regexTester.should_match(\"0\", R\"(\\S)\", ECMAScript);\r\n    g_regexTester.should_match(\"_\", R\"(\\S)\", ECMAScript);\r\n    g_regexTester.should_match(\"-\", R\"(\\S)\", ECMAScript);\r\n    g_regexTester.should_match(\"\\1\", R\"(\\S)\", ECMAScript);\r\n    g_regexTester.should_match(\"\\\\\", R\"(\\S)\", ECMAScript);\r\n\r\n    // AtomEscape :: CharacterEscape :: IdentityEscape\r\n    g_regexTester.should_match(\"\\\\\", R\"(\\\\)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"g\", R\"(\\\\)\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\\\\\\", R\"(\\\\)\", ECMAScript);\r\n    check_atomescape_identityescape(\"a\", ECMAScript);\r\n    check_atomescape_identityescape(\"-\", ECMAScript);\r\n    check_atomescape_identityescape(\" \", ECMAScript);\r\n    check_atomescape_identityescape(\"(\", ECMAScript);\r\n    check_atomescape_identityescape(\")\", ECMAScript);\r\n    check_atomescape_identityescape(\"[\", ECMAScript);\r\n    check_atomescape_identityescape(\"]\", ECMAScript);\r\n    check_atomescape_identityescape(\"{\", ECMAScript);\r\n    check_atomescape_identityescape(\"}\", ECMAScript);\r\n    check_atomescape_identityescape(\"*\", ECMAScript);\r\n    check_atomescape_identityescape(\"?\", ECMAScript);\r\n    check_atomescape_identityescape(\"+\", ECMAScript);\r\n    check_atomescape_identityescape(\"^\", ECMAScript);\r\n    check_atomescape_identityescape(\"$\", ECMAScript);\r\n    check_atomescape_identityescape(\".\", ECMAScript);\r\n\r\n    {\r\n        string pattern = R\"(\\z)\";\r\n        basic_regex<char, test_regex_traits<char>> custom_charclass_regex{pattern, ECMAScript};\r\n        check_match(\"z\", pattern, custom_charclass_regex);\r\n        check_no_match(\"\\\\\", pattern, custom_charclass_regex);\r\n        check_no_match(\" \", pattern, custom_charclass_regex);\r\n    }\r\n    {\r\n        string pattern = R\"(\\Z)\";\r\n        basic_regex<char, test_regex_traits<char>> custom_charclass_regex{pattern, ECMAScript};\r\n        check_match(\"Z\", pattern, custom_charclass_regex);\r\n        check_no_match(\"\\\\\", pattern, custom_charclass_regex);\r\n        check_no_match(\"A\", pattern, custom_charclass_regex);\r\n        check_no_match(\" \", pattern, custom_charclass_regex);\r\n    }\r\n}\r\n\r\nvoid test_gh_5244_classescape_ecmascript() {\r\n\r\n    // ClassEscape :: DecimalEscape\r\n    // only accepts literal NUL (\\0), all other decimal escapes result in error\r\n    g_regexTester.should_match(\"\\0\"s, R\"([\\0])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"0\", R\"([\\0])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\", R\"([\\0])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\0])\", ECMAScript);\r\n    g_regexTester.should_throw(R\"([\\00])\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"([\\01])\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"([\\1])\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"((a)[\\10])\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"((a)[\\1])\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"((a)[\\01])\", error_escape, ECMAScript);\r\n\r\n    // ClassEscape :: 'b'\r\n    check_classescape_controlescape(\"\\b\", \"b\", ECMAScript);\r\n\r\n    // ClassEscape :: CharacterEscape :: ControlEscape\r\n    check_classescape_controlescape(\"\\f\", \"f\", ECMAScript);\r\n    check_classescape_controlescape(\"\\n\", \"n\", ECMAScript);\r\n    check_classescape_controlescape(\"\\r\", \"r\", ECMAScript);\r\n    check_classescape_controlescape(\"\\t\", \"t\", ECMAScript);\r\n    check_classescape_controlescape(\"\\v\", \"v\", ECMAScript);\r\n\r\n    // ClassEscape :: CharacterEscape :: 'c' ControlLetter\r\n    g_regexTester.should_match(\"\\x1\", R\"([\\cA])\", ECMAScript);\r\n    g_regexTester.should_match(\"\\x1a\", R\"([\\cZ])\", ECMAScript);\r\n    g_regexTester.should_match(\"\\x1\", R\"([\\ca])\", ECMAScript);\r\n    g_regexTester.should_match(\"\\x1a\", R\"([\\cz])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\ca])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"c\", R\"([\\ca])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"ca\", R\"([\\ca])\", ECMAScript);\r\n    g_regexTester.should_throw(R\"([\\c0])\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"([\\c])\", error_escape, ECMAScript);\r\n\r\n    // ClassEscape :: CharacterEscape :: HexEscapeSequence\r\n    g_regexTester.should_match(\"\\x00\"s, R\"([\\x00])\", ECMAScript);\r\n    g_regexTester.should_match(\"\\x00\"s, R\"([\\x000])\", ECMAScript);\r\n    g_regexTester.should_match(\"0\", R\"([\\x000])\", ECMAScript);\r\n    g_regexTester.should_match(\"A\", R\"([\\x41])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\x41])\", ECMAScript);\r\n    g_regexTester.should_match(\"\\xff\", R\"([\\xff])\", ECMAScript);\r\n    g_regexTester.should_throw(R\"([\\x])\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"([\\x0])\", error_escape, ECMAScript);\r\n\r\n    // ClassEscape :: CharacterEscape :: UnicodeEscapeSequence\r\n    g_regexTester.should_match(\"\\u0000\"s, R\"([\\u0000])\", ECMAScript);\r\n    g_regexTester.should_match(\"\\u0000\"s, R\"([\\u00000])\", ECMAScript);\r\n    g_regexTester.should_match(\"0\", R\"([\\u00000])\", ECMAScript);\r\n    g_regexTester.should_match(\"A\", R\"([\\u0041])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\u0041])\", ECMAScript);\r\n    g_regexTester.should_throw(R\"([\\uffff])\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"([\\u2600])\", error_escape, ECMAScript); // U+2600 BLACK SUN WITH RAYS\r\n    g_regexTester.should_throw(R\"([\\u])\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"([\\u0])\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"([\\u00])\", error_escape, ECMAScript);\r\n    g_regexTester.should_throw(R\"([\\u000])\", error_escape, ECMAScript);\r\n\r\n    // ClassEscape :: CharacterClassEscape\r\n    g_regexTester.should_match(\"0\", R\"([\\d])\", ECMAScript);\r\n    g_regexTester.should_match(\"5\", R\"([\\d])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"a\", R\"([\\d])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"_\", R\"([\\d])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"-\", R\"([\\d])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\1\", R\"([\\d])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\d])\", ECMAScript);\r\n    g_regexTester.should_not_match(\" \", R\"([\\d])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"0\", R\"([\\D])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"5\", R\"([\\D])\", ECMAScript);\r\n    g_regexTester.should_match(\"a\", R\"([\\D])\", ECMAScript);\r\n    g_regexTester.should_match(\"_\", R\"([\\D])\", ECMAScript);\r\n    g_regexTester.should_match(\"-\", R\"([\\D])\", ECMAScript);\r\n    g_regexTester.should_match(\"\\1\", R\"([\\D])\", ECMAScript);\r\n    g_regexTester.should_match(\"\\\\\", R\"([\\D])\", ECMAScript);\r\n    g_regexTester.should_match(\" \", R\"([\\D])\", ECMAScript);\r\n\r\n    g_regexTester.should_match(\"a\", R\"([\\w])\", ECMAScript);\r\n    g_regexTester.should_match(\"A\", R\"([\\w])\", ECMAScript);\r\n    g_regexTester.should_match(\"0\", R\"([\\w])\", ECMAScript);\r\n    g_regexTester.should_match(\"_\", R\"([\\w])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"-\", R\"([\\w])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\1\", R\"([\\w])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\w])\", ECMAScript);\r\n    g_regexTester.should_not_match(\" \", R\"([\\w])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"a\", R\"([\\W])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"A\", R\"([\\W])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"0\", R\"([\\W])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"_\", R\"([\\W])\", ECMAScript);\r\n    g_regexTester.should_match(\"-\", R\"([\\W])\", ECMAScript);\r\n    g_regexTester.should_match(\"\\1\", R\"([\\W])\", ECMAScript);\r\n    g_regexTester.should_match(\"\\\\\", R\"([\\W])\", ECMAScript);\r\n    g_regexTester.should_match(\" \", R\"([\\W])\", ECMAScript);\r\n\r\n    g_regexTester.should_match(\" \", R\"([\\s])\", ECMAScript);\r\n    g_regexTester.should_match(\"\\t\", R\"([\\s])\", ECMAScript);\r\n    g_regexTester.should_match(\"\\n\", R\"([\\s])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"a\", R\"([\\s])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"0\", R\"([\\s])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"_\", R\"([\\s])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"-\", R\"([\\s])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\1\", R\"([\\s])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\s])\", ECMAScript);\r\n    g_regexTester.should_not_match(\" \", R\"([\\S])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\t\", R\"([\\S])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"\\n\", R\"([\\S])\", ECMAScript);\r\n    g_regexTester.should_match(\"a\", R\"([\\S])\", ECMAScript);\r\n    g_regexTester.should_match(\"0\", R\"([\\S])\", ECMAScript);\r\n    g_regexTester.should_match(\"_\", R\"([\\S])\", ECMAScript);\r\n    g_regexTester.should_match(\"-\", R\"([\\S])\", ECMAScript);\r\n    g_regexTester.should_match(\"\\1\", R\"([\\S])\", ECMAScript);\r\n    g_regexTester.should_match(\"\\\\\", R\"([\\S])\", ECMAScript);\r\n\r\n    // ClassEscape :: CharacterEscape :: IdentityEscape\r\n    g_regexTester.should_match(\"\\\\\", R\"([\\\\])\", ECMAScript);\r\n    g_regexTester.should_not_match(\"b\", R\"([\\\\])\", ECMAScript);\r\n    check_classescape_identityescape(\"a\", ECMAScript);\r\n    check_classescape_identityescape(\"-\", ECMAScript);\r\n    check_classescape_identityescape(\" \", ECMAScript);\r\n    check_classescape_identityescape(\"(\", ECMAScript);\r\n    check_classescape_identityescape(\")\", ECMAScript);\r\n    check_classescape_identityescape(\"[\", ECMAScript);\r\n    check_classescape_identityescape(\"]\", ECMAScript);\r\n    check_classescape_identityescape(\"{\", ECMAScript);\r\n    check_classescape_identityescape(\"}\", ECMAScript);\r\n    check_classescape_identityescape(\"*\", ECMAScript);\r\n    check_classescape_identityescape(\"?\", ECMAScript);\r\n    check_classescape_identityescape(\"+\", ECMAScript);\r\n    check_classescape_identityescape(\"^\", ECMAScript);\r\n    check_classescape_identityescape(\"$\", ECMAScript);\r\n    check_classescape_identityescape(\".\", ECMAScript);\r\n    check_classescape_identityescape(\"B\", ECMAScript);\r\n\r\n    {\r\n        string pattern = R\"([\\z])\";\r\n        basic_regex<char, test_regex_traits<char>> custom_charclass_regex{pattern, ECMAScript};\r\n        check_match(\"z\", pattern, custom_charclass_regex);\r\n        check_no_match(\"\\\\\", pattern, custom_charclass_regex);\r\n        check_no_match(\" \", pattern, custom_charclass_regex);\r\n    }\r\n    {\r\n        string pattern = R\"([\\Z])\";\r\n        basic_regex<char, test_regex_traits<char>> custom_charclass_regex{pattern, ECMAScript};\r\n        check_match(\"Z\", pattern, custom_charclass_regex);\r\n        check_no_match(\"\\\\\", pattern, custom_charclass_regex);\r\n        check_no_match(\"A\", pattern, custom_charclass_regex);\r\n        check_no_match(\" \", pattern, custom_charclass_regex);\r\n    }\r\n}\r\n\r\nvoid test_gh_5244_atomescape_posix_common(syntax_option_type option) {\r\n    // Sections on \"BRE Special Characters\" and \"ERE Special Characters\":\r\n    // When special character is preceded by backslash, the special character matches itself\r\n    g_regexTester.should_match(\"\\\\\", R\"(\\\\)\", option);\r\n    g_regexTester.should_not_match(\"b\", R\"(\\\\)\", option);\r\n    g_regexTester.should_not_match(\"\\\\\\\\\", R\"(\\\\)\", option);\r\n    check_atomescape_identityescape(\".\", option);\r\n    check_atomescape_identityescape(\"[\", option);\r\n    check_atomescape_identityescape(\"*\", option);\r\n    check_atomescape_identityescape(\"^\", option);\r\n    check_atomescape_identityescape(\"$\", option);\r\n\r\n    // Even though [ is special, ] is not,\r\n    // so the interpretation of the escape sequence \\] is undefined\r\n    // according to the POSIX standard referenced in the C++ standard.\r\n    // But we treat \\] as an identity escape in line with\r\n    // more recent versions of the POSIX standard.\r\n    check_atomescape_identityescape(\"]\", option);\r\n\r\n    // Sections on \"BRE Special Characters\" and \"ERE Special Characters\":\r\n    // escaping ordinary characters is undefined -> reject\r\n    g_regexTester.should_throw(R\"(\\B)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\c)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\ca)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\x000)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\u0000)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\d)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\D)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\w)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\W)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\s)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\S)\", error_escape, option);\r\n}\r\n\r\nvoid test_gh_5244_atomescape_posix_not_awk(syntax_option_type option) {\r\n    test_gh_5244_atomescape_posix_common(option);\r\n\r\n    // reject awk-only escapes\r\n    g_regexTester.should_throw(R\"(\\a)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\b)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\f)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\n)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\r)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\t)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\v)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\\")\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\/)\", error_escape, option);\r\n}\r\n\r\nvoid test_gh_5244_atomescape_basic_or_grep(syntax_option_type option) {\r\n    test_gh_5244_atomescape_posix_not_awk(option);\r\n\r\n    // Section on \"BREs Matching Multiple Characters\":\r\n    // \\ plus digit is backreference to previously completed subexpression\r\n    g_regexTester.should_throw(R\"(\\0)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\1)\", error_backref, option);\r\n    g_regexTester.should_match(\"aa\", R\"(\\(a\\)\\1)\", option);\r\n    g_regexTester.should_throw(R\"(\\(a\\)\\0)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\1\\(a\\))\", error_backref, option);\r\n\r\n    // check that the parser rejects escaped characters\r\n    // that are only special in extended regexes or awk\r\n    g_regexTester.should_throw(R\"(\\+)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\?)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\|)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\\")\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\/)\", error_escape, option);\r\n}\r\n\r\nvoid test_gh_5244_atomescape_extended_egrep_awk(syntax_option_type option) {\r\n    // check that the parser accepts escaped characters\r\n    // that are only special in extended regexes\r\n    check_atomescape_identityescape(\"+\", option);\r\n    check_atomescape_identityescape(\"?\", option);\r\n    check_atomescape_identityescape(\"|\", option);\r\n    check_atomescape_identityescape(\"(\", option);\r\n    check_atomescape_identityescape(\")\", option);\r\n    check_atomescape_identityescape(\"{\", option);\r\n\r\n    // Even though { is special, } is not,\r\n    // so the interpretation of the escape sequence \\} is undefined\r\n    // according to the POSIX standard referenced in the C++ standard.\r\n    // But we treat \\} as an identity escape in line with\r\n    // more recent versions of the POSIX standard.\r\n    check_atomescape_identityescape(\"}\", option);\r\n}\r\n\r\nvoid test_gh_5244_atomescape_extended_or_egrep(syntax_option_type option) {\r\n    test_gh_5244_atomescape_extended_egrep_awk(option);\r\n    test_gh_5244_atomescape_posix_not_awk(option);\r\n\r\n    // there are no backreferences in extended regexes\r\n    g_regexTester.should_throw(R\"(\\0)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\1)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"((a)\\1)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"((a)\\0)\", error_escape, option);\r\n    g_regexTester.should_throw(R\"(\\1(a))\", error_escape, option);\r\n}\r\n\r\nvoid test_gh_5244_atomescape_awk() {\r\n    test_gh_5244_atomescape_extended_egrep_awk(awk);\r\n    test_gh_5244_atomescape_posix_common(awk);\r\n\r\n    // awk-only escapes\r\n    check_atomescape_controlescape(\"\\a\", \"a\", awk);\r\n    check_atomescape_controlescape(\"\\b\", \"b\", awk);\r\n    check_atomescape_controlescape(\"\\f\", \"f\", awk);\r\n    check_atomescape_controlescape(\"\\n\", \"n\", awk);\r\n    check_atomescape_controlescape(\"\\r\", \"r\", awk);\r\n    check_atomescape_controlescape(\"\\t\", \"t\", awk);\r\n    check_atomescape_controlescape(\"\\v\", \"v\", awk);\r\n    check_atomescape_identityescape(\"\\\"\", awk);\r\n    check_atomescape_identityescape(\"/\", awk);\r\n\r\n    // awk supports octal sequences\r\n    g_regexTester.should_match(\"\\1\", R\"(\\1)\", awk);\r\n    g_regexTester.should_not_match(\"1\", R\"(\\1)\", awk);\r\n    g_regexTester.should_not_match(\"\\\\1\", R\"(\\1)\", awk);\r\n    g_regexTester.should_match(\"\\11\", R\"(\\11)\", awk);\r\n    g_regexTester.should_not_match(\"1\", R\"(\\11)\", awk);\r\n    g_regexTester.should_not_match(\"11\", R\"(\\11)\", awk);\r\n    g_regexTester.should_not_match(\"\\\\11\", R\"(\\11)\", awk);\r\n    g_regexTester.should_match(\"\\111\", R\"(\\111)\", awk);\r\n    g_regexTester.should_not_match(\"1\", R\"(\\111)\", awk);\r\n    g_regexTester.should_not_match(\"11\", R\"(\\111)\", awk);\r\n    g_regexTester.should_not_match(\"111\", R\"(\\111)\", awk);\r\n    g_regexTester.should_not_match(\"\\\\111\", R\"(\\111)\", awk);\r\n    g_regexTester.should_match(\"\\111\"s + \"1\", R\"(\\1111)\", awk);\r\n    g_regexTester.should_not_match(\"\\111\", R\"(\\1111)\", awk);\r\n    g_regexTester.should_not_match(\"1\", R\"(\\1111)\", awk);\r\n    g_regexTester.should_not_match(\"11\", R\"(\\1111)\", awk);\r\n    g_regexTester.should_not_match(\"111\", R\"(\\1111)\", awk);\r\n    g_regexTester.should_not_match(\"1111\", R\"(\\1111)\", awk);\r\n    g_regexTester.should_not_match(\"\\\\1111\", R\"(\\1111)\", awk);\r\n    g_regexTester.should_match(\"A\", R\"(\\101)\", awk);\r\n    g_regexTester.should_match(\"Aa\", R\"(\\101a)\", awk);\r\n    g_regexTester.should_match(\"\\33\", R\"(\\033)\", awk);\r\n    g_regexTester.should_match(\"\\33a\", R\"(\\033a)\", awk);\r\n    g_regexTester.should_match(\"\\33\", R\"(\\33)\", awk);\r\n    g_regexTester.should_match(\"\\33a\", R\"(\\33a)\", awk);\r\n    g_regexTester.should_match(\"\\1\", R\"(\\001)\", awk);\r\n    g_regexTester.should_match(\"\\1a\", R\"(\\001a)\", awk);\r\n    g_regexTester.should_match(\"\\1\", R\"(\\01)\", awk);\r\n    g_regexTester.should_match(\"\\1a\", R\"(\\01a)\", awk);\r\n    g_regexTester.should_match(\"\\1\", R\"(\\1)\", awk);\r\n    g_regexTester.should_match(\"\\1a\", R\"(\\1a)\", awk);\r\n    g_regexTester.should_throw(R\"(\\8)\", error_escape, awk);\r\n    g_regexTester.should_match(\"\\1\"s + \"8\", R\"(\\18)\", awk);\r\n    g_regexTester.should_match(\"\\12\"s + \"9\", R\"(\\129)\", awk);\r\n\r\n    // octal sequences evaluating to 0 are considered undefined by the standard\r\n    g_regexTester.should_throw(R\"(\\0)\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"(\\00)\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"(\\000)\", error_escape, awk);\r\n}\r\n\r\nvoid test_gh_5244_classescape_posix_not_awk(syntax_option_type option) {\r\n    // Sections \"BRE Bracket Expressions\" and \"ERE Bracket Expressions\":\r\n    // Backslash shall lose its special meaning, so \\c should always match \\ + c\r\n\r\n    // common special characters outside character classes\r\n    check_classescape_noescape(\".\", option);\r\n    check_classescape_noescape(\"[\", option);\r\n    check_classescape_noescape(\"*\", option);\r\n    check_classescape_noescape(\"^\", option);\r\n    check_classescape_noescape(\"$\", option);\r\n    check_classescape_noescape(\"B\", option);\r\n    check_classescape_noescape(\"c\", option);\r\n\r\n    // special characters outside character classes in extended regexes\r\n    check_classescape_noescape(\"+\", option);\r\n    check_classescape_noescape(\"?\", option);\r\n    check_classescape_noescape(\"|\", option);\r\n\r\n    check_classescape_noescape(\"(\", option);\r\n    check_classescape_noescape(\")\", option);\r\n    check_classescape_noescape(\"{\", option);\r\n\r\n    // closing characters that are not considered special\r\n    g_regexTester.should_match(\"\\\\]\", R\"([\\]])\", option);\r\n    g_regexTester.should_not_match(\"]\", R\"([\\]])\", option);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\]])\", option);\r\n    check_classescape_noescape(\"}\", option);\r\n\r\n    // awk escape sequences\r\n    check_classescape_noescape(\"a\", option);\r\n    check_classescape_noescape(\"b\", option);\r\n    check_classescape_noescape(\"f\", option);\r\n    check_classescape_noescape(\"n\", option);\r\n    check_classescape_noescape(\"r\", option);\r\n    check_classescape_noescape(\"t\", option);\r\n    check_classescape_noescape(\"v\", option);\r\n    check_classescape_noescape(\"\\\"\", option);\r\n    check_classescape_noescape(\"/\", option);\r\n\r\n    // awk octal sequences\r\n    check_classescape_noescape(\"0\", option);\r\n    check_classescape_noescape(\"1\", option);\r\n    g_regexTester.should_match(\"1\", R\"([\\101])\", option);\r\n    g_regexTester.should_match(\"0\", R\"([\\101])\", option);\r\n    g_regexTester.should_match(\"\\\\\", R\"([\\101])\", option);\r\n    g_regexTester.should_match(\"1\", R\"([\\101a])\", option);\r\n    g_regexTester.should_match(\"0\", R\"([\\101a])\", option);\r\n    g_regexTester.should_match(\"\\\\\", R\"([\\101a])\", option);\r\n    g_regexTester.should_match(\"a\", R\"([\\101a])\", option);\r\n    g_regexTester.should_match(\"3\", R\"([\\033a])\", option);\r\n    g_regexTester.should_match(\"0\", R\"([\\033a])\", option);\r\n    g_regexTester.should_match(\"\\\\\", R\"([\\033a])\", option);\r\n    g_regexTester.should_match(\"a\", R\"([\\033a])\", option);\r\n    g_regexTester.should_match(\"3\", R\"([\\33a])\", option);\r\n    g_regexTester.should_match(\"\\\\\", R\"([\\33a])\", option);\r\n    g_regexTester.should_match(\"a\", R\"([\\33a])\", option);\r\n    g_regexTester.should_match(\"1\", R\"([\\001a])\", option);\r\n    g_regexTester.should_match(\"0\", R\"([\\001a])\", option);\r\n    g_regexTester.should_match(\"\\\\\", R\"([\\001a])\", option);\r\n    g_regexTester.should_match(\"a\", R\"([\\001a])\", option);\r\n\r\n    // ECMAScript escape sequences\r\n    g_regexTester.should_match(\"c\", R\"([\\ca])\", option);\r\n    g_regexTester.should_match(\"a\", R\"([\\ca])\", option);\r\n    g_regexTester.should_match(\"\\\\\", R\"([\\ca])\", option);\r\n    g_regexTester.should_match(\"x\", R\"([\\x000])\", option);\r\n    g_regexTester.should_match(\"0\", R\"([\\x000])\", option);\r\n    g_regexTester.should_match(\"\\\\\", R\"([\\x000])\", option);\r\n    g_regexTester.should_match(\"u\", R\"([\\u0000])\", option);\r\n    g_regexTester.should_match(\"0\", R\"([\\u0000])\", option);\r\n    g_regexTester.should_match(\"\\\\\", R\"([\\u0000])\", option);\r\n    check_classescape_noescape(\"d\", option);\r\n    check_classescape_noescape(\"D\", option);\r\n    check_classescape_noescape(\"w\", option);\r\n    check_classescape_noescape(\"W\", option);\r\n    check_classescape_noescape(\"s\", option);\r\n    check_classescape_noescape(\"S\", option);\r\n}\r\n\r\nvoid test_gh_5244_classescape_basic_or_grep(syntax_option_type option) {\r\n    test_gh_5244_classescape_posix_not_awk(option);\r\n\r\n    // check no backreference handling\r\n    g_regexTester.should_match(\"a1\", R\"(\\(a\\)[\\1])\", option);\r\n    g_regexTester.should_match(\"a\\\\\", R\"(\\(a\\)[\\1])\", option);\r\n    g_regexTester.should_not_match(\"aa\", R\"(\\(a\\)[\\1])\", option);\r\n    g_regexTester.should_match(\"a0\", R\"(\\(a\\)[\\0])\", option);\r\n    g_regexTester.should_match(\"a\\\\\", R\"(\\(a\\)[\\0])\", option);\r\n    g_regexTester.should_match(\"1a\", R\"([\\1]\\(a\\))\", option);\r\n    g_regexTester.should_match(\"\\\\a\", R\"([\\1]\\(a\\))\", option);\r\n    g_regexTester.should_not_match(\"aa\", R\"([\\1]\\(a\\))\", option);\r\n}\r\n\r\nvoid test_gh_5244_classescape_extended_or_egrep(syntax_option_type option) {\r\n    test_gh_5244_classescape_posix_not_awk(option);\r\n\r\n    // check no backreference handling\r\n    g_regexTester.should_match(\"a1\", R\"((a)[\\1])\", option);\r\n    g_regexTester.should_match(\"a\\\\\", R\"((a)[\\1])\", option);\r\n    g_regexTester.should_not_match(\"aa\", R\"((a)[\\1])\", option);\r\n    g_regexTester.should_match(\"a0\", R\"((a)[\\0])\", option);\r\n    g_regexTester.should_match(\"a\\\\\", R\"((a)[\\0])\", option);\r\n    g_regexTester.should_match(\"1a\", R\"([\\1](a))\", option);\r\n    g_regexTester.should_match(\"\\\\a\", R\"([\\1](a))\", option);\r\n    g_regexTester.should_not_match(\"aa\", R\"([\\1](a))\", option);\r\n}\r\n\r\nvoid test_gh_5244_classescape_awk() {\r\n    // awk-only sequences and backslash\r\n    g_regexTester.should_match(\"\\\\\", \"[\\\\\\\\]\", awk);\r\n    g_regexTester.should_not_match(\"g\", \"[\\\\\\\\]\", awk);\r\n    check_classescape_controlescape(\"\\a\", \"a\", awk);\r\n    check_classescape_controlescape(\"\\b\", \"b\", awk);\r\n    check_classescape_controlescape(\"\\f\", \"f\", awk);\r\n    check_classescape_controlescape(\"\\n\", \"n\", awk);\r\n    check_classescape_controlescape(\"\\r\", \"r\", awk);\r\n    check_classescape_controlescape(\"\\t\", \"t\", awk);\r\n    check_classescape_controlescape(\"\\v\", \"v\", awk);\r\n    check_classescape_identityescape(\"\\\"\", awk);\r\n    check_classescape_identityescape(\"/\", awk);\r\n\r\n    // awk supports octal sequences\r\n    g_regexTester.should_match(\"\\1\", R\"([\\1])\", awk);\r\n    g_regexTester.should_not_match(\"1\", R\"([\\1])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\1])\", awk);\r\n    g_regexTester.should_match(\"\\11\", R\"([\\11])\", awk);\r\n    g_regexTester.should_not_match(\"1\", R\"([\\11])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\11])\", awk);\r\n    g_regexTester.should_match(\"\\111\", R\"([\\111])\", awk);\r\n    g_regexTester.should_not_match(\"0\", R\"([\\111])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\111])\", awk);\r\n    g_regexTester.should_match(\"\\111\", R\"([\\1111])\", awk);\r\n    g_regexTester.should_match(\"1\", R\"([\\1111])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\1111])\", awk);\r\n    g_regexTester.should_match(\"A\", R\"([\\101])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\101])\", awk);\r\n    g_regexTester.should_not_match(\"1\", R\"([\\101])\", awk);\r\n    g_regexTester.should_not_match(\"0\", R\"([\\101])\", awk);\r\n    g_regexTester.should_not_match(\"\\1\", R\"([\\101])\", awk);\r\n    g_regexTester.should_not_match(\"\\0\"s, R\"([\\101])\", awk);\r\n    g_regexTester.should_match(\"A\", R\"([\\101a])\", awk);\r\n    g_regexTester.should_match(\"a\", R\"([\\101a])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\101a])\", awk);\r\n    g_regexTester.should_not_match(\"1\", R\"([\\101a])\", awk);\r\n    g_regexTester.should_not_match(\"0\", R\"([\\101a])\", awk);\r\n    g_regexTester.should_not_match(\"\\1\", R\"([\\101a])\", awk);\r\n    g_regexTester.should_not_match(\"\\0\"s, R\"([\\101a])\", awk);\r\n    g_regexTester.should_match(\"\\33\", R\"([\\033])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\033])\", awk);\r\n    g_regexTester.should_not_match(\"3\", R\"([\\033])\", awk);\r\n    g_regexTester.should_not_match(\"0\", R\"([\\033])\", awk);\r\n    g_regexTester.should_not_match(\"\\3\", R\"([\\033])\", awk);\r\n    g_regexTester.should_not_match(\"\\0\"s, R\"([\\033])\", awk);\r\n    g_regexTester.should_match(\"\\33\", R\"([\\033a])\", awk);\r\n    g_regexTester.should_match(\"a\", R\"([\\033a])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\033a])\", awk);\r\n    g_regexTester.should_not_match(\"3\", R\"([\\033a])\", awk);\r\n    g_regexTester.should_not_match(\"0\", R\"([\\033a])\", awk);\r\n    g_regexTester.should_not_match(\"\\3\", R\"([\\033a])\", awk);\r\n    g_regexTester.should_not_match(\"\\0\"s, R\"([\\033a])\", awk);\r\n    g_regexTester.should_match(\"\\33\", R\"([\\33])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\33])\", awk);\r\n    g_regexTester.should_not_match(\"3\", R\"([\\33])\", awk);\r\n    g_regexTester.should_not_match(\"\\3\", R\"([\\33])\", awk);\r\n    g_regexTester.should_match(\"\\33\", R\"([\\33a])\", awk);\r\n    g_regexTester.should_match(\"a\", R\"([\\33a])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\33a])\", awk);\r\n    g_regexTester.should_not_match(\"3\", R\"([\\33a])\", awk);\r\n    g_regexTester.should_not_match(\"\\3\", R\"([\\33a])\", awk);\r\n    g_regexTester.should_match(\"\\1\", R\"([\\001])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\001])\", awk);\r\n    g_regexTester.should_not_match(\"1\", R\"([\\001])\", awk);\r\n    g_regexTester.should_not_match(\"0\", R\"([\\001])\", awk);\r\n    g_regexTester.should_not_match(\"\\0\"s, R\"([\\001])\", awk);\r\n    g_regexTester.should_match(\"\\1\", R\"([\\001a])\", awk);\r\n    g_regexTester.should_match(\"a\", R\"([\\001a])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\001a])\", awk);\r\n    g_regexTester.should_not_match(\"1\", R\"([\\001a])\", awk);\r\n    g_regexTester.should_not_match(\"0\", R\"([\\001a])\", awk);\r\n    g_regexTester.should_not_match(\"\\0\"s, R\"([\\001a])\", awk);\r\n    g_regexTester.should_match(\"\\1\", R\"([\\01])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\01])\", awk);\r\n    g_regexTester.should_not_match(\"1\", R\"([\\01])\", awk);\r\n    g_regexTester.should_not_match(\"0\", R\"([\\01])\", awk);\r\n    g_regexTester.should_not_match(\"\\0\"s, R\"([\\01])\", awk);\r\n    g_regexTester.should_match(\"\\1\", R\"([\\01a])\", awk);\r\n    g_regexTester.should_match(\"a\", R\"([\\01a])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\01a])\", awk);\r\n    g_regexTester.should_not_match(\"1\", R\"([\\01a])\", awk);\r\n    g_regexTester.should_not_match(\"0\", R\"([\\01a])\", awk);\r\n    g_regexTester.should_not_match(\"\\0\"s, R\"([\\01a])\", awk);\r\n    g_regexTester.should_match(\"\\1\", R\"([\\1])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\1])\", awk);\r\n    g_regexTester.should_not_match(\"1\", R\"([\\1])\", awk);\r\n    g_regexTester.should_match(\"\\1\", R\"([\\1a])\", awk);\r\n    g_regexTester.should_match(\"a\", R\"([\\1a])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\1a])\", awk);\r\n    g_regexTester.should_not_match(\"1\", R\"([\\1a])\", awk);\r\n    g_regexTester.should_throw(R\"([\\8])\", error_escape, awk);\r\n    g_regexTester.should_match(\"\\1\", R\"([\\18])\", awk);\r\n    g_regexTester.should_match(\"8\", R\"([\\18])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\18])\", awk);\r\n    g_regexTester.should_not_match(\"1\", R\"([\\18])\", awk);\r\n    g_regexTester.should_match(\"\\12\", R\"([\\129])\", awk);\r\n    g_regexTester.should_match(\"9\", R\"([\\129])\", awk);\r\n    g_regexTester.should_not_match(\"\\\\\", R\"([\\129])\", awk);\r\n    g_regexTester.should_not_match(\"1\", R\"([\\129])\", awk);\r\n    g_regexTester.should_not_match(\"2\", R\"([\\129])\", awk);\r\n    g_regexTester.should_not_match(\"\\131\", R\"([\\129])\", awk);\r\n\r\n    // octal sequences evaluating to 0 are considered undefined by the standard\r\n    g_regexTester.should_throw(R\"([\\0])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\00])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\000])\", error_escape, awk);\r\n\r\n    // all other escapes (including the atom escapes of basic and extended regexes) are undefined\r\n    g_regexTester.should_throw(R\"([\\.])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\[])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\*])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\^])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\$])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\]])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\+])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\?])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\|])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\(])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\)])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\{])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\}])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\B])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\c])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\ca])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\x000])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\u0000])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\d])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\D])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\w])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\W])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\s])\", error_escape, awk);\r\n    g_regexTester.should_throw(R\"([\\S])\", error_escape, awk);\r\n}\r\n\r\nvoid test_gh_5244() {\r\n    // GH-5244: <regex>: Some escape sequences are mishandled\r\n    test_gh_5244_atomescape_ecmascript();\r\n    test_gh_5244_classescape_ecmascript();\r\n\r\n    for (syntax_option_type basic_or_grep : {basic, grep}) {\r\n        test_gh_5244_atomescape_basic_or_grep(basic_or_grep);\r\n        test_gh_5244_classescape_basic_or_grep(basic_or_grep);\r\n    }\r\n\r\n    for (syntax_option_type extended_or_egrep : {extended, egrep}) {\r\n        test_gh_5244_atomescape_extended_or_egrep(extended_or_egrep);\r\n        test_gh_5244_classescape_extended_or_egrep(extended_or_egrep);\r\n    }\r\n\r\n    test_gh_5244_atomescape_awk();\r\n    test_gh_5244_classescape_awk();\r\n}\r\n\r\nvoid test_gh_5379() {\r\n    // GH-5379: Backslashes in character classes are sometimes not matched in basic regular expressions\r\n\r\n    // Correct handling of these backslashes at the beginning of a character class is already covered by GH-5244 tests.\r\n    // The following tests check that backslashes are handled correctly immediately after a bracketed character class.\r\n    for (syntax_option_type syntax : {basic, grep}) {\r\n        g_regexTester.should_throw(R\"([a]\\b)\", error_escape, syntax);\r\n        g_regexTester.should_match(\"a[b]\", R\"([a]\\[b])\", syntax);\r\n        g_regexTester.should_match(\"a\", R\"(\\([a]\\))\", syntax);\r\n        g_regexTester.should_match(\"ab\", R\"([a]\\(b\\))\", syntax);\r\n        g_regexTester.should_match(\"a\", R\"([a]\\{1\\})\", syntax);\r\n        g_regexTester.should_throw(R\"([a]\\})\", error_brace, syntax);\r\n\r\n        // also check handling of identity escape \"\\]\",\r\n        // which is supported as an extension following more recent POSIX standards\r\n        g_regexTester.should_match(\"a]\", R\"([a]\\])\", syntax);\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_gh_5244();\r\n    test_gh_5379();\r\n\r\n    return g_regexTester.result();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005276_system_error_heap_use_after_free/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/D_HAS_EXCEPTIONS=0\"\r\n"
  },
  {
    "path": "tests/std/tests/GH_005276_system_error_heap_use_after_free/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <string>\r\n#include <string_view>\r\n#include <system_error>\r\nusing namespace std;\r\nusing namespace chrono;\r\n\r\n// GH-5276 <system_error>: heap-use-after-free for _HAS_EXCEPTIONS=0\r\nint main() {\r\n    const string str{\"abc\"};\r\n    const error_code ec{2, system_category()};\r\n    {\r\n        system_error syserr1{ec};\r\n        assert(syserr1.what() == \"system error\"sv);\r\n    }\r\n    {\r\n        system_error syserr2{ec, str};\r\n        assert(syserr2.what() == \"system error\"sv);\r\n    }\r\n    {\r\n        system_error syserr3{ec, \"meow\"};\r\n        assert(syserr3.what() == \"system error\"sv);\r\n    }\r\n    {\r\n        system_error syserr4{2, system_category()};\r\n        assert(syserr4.what() == \"system error\"sv);\r\n    }\r\n    {\r\n        system_error syserr5{2, system_category(), str};\r\n        assert(syserr5.what() == \"system error\"sv);\r\n    }\r\n    {\r\n        system_error syserr6{2, system_category(), \"meow\"};\r\n        assert(syserr6.what() == \"system error\"sv);\r\n    }\r\n\r\n    {\r\n        ambiguous_local_time alt{local_seconds{}, local_info{}};\r\n        assert(alt.what() == \"ambiguous local time\"sv);\r\n    }\r\n    {\r\n        nonexistent_local_time nlt{local_seconds{}, local_info{}};\r\n        assert(nlt.what() == \"nonexistent local time\"sv);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005315_destructor_tombstones/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/D_MSVC_STL_DESTRUCTOR_TOMBSTONES=1\"\r\n"
  },
  {
    "path": "tests/std/tests/GH_005315_destructor_tombstones/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// env.lst defines _MSVC_STL_DESTRUCTOR_TOMBSTONES to 1.\r\n\r\n#ifdef _M_CEE // work around a sporadic hang in /clr configurations\r\nint main() {}\r\n#else // ^^^ workaround / no workaround vvv\r\n\r\n#include <array>\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <exception>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <memory>\r\n#include <new>\r\n#include <regex>\r\n#include <set>\r\n#include <string>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <valarray>\r\n#include <vector>\r\n\r\n#if _HAS_CXX17\r\n#include <any>\r\n#include <memory_resource>\r\n#include <optional>\r\n#include <variant>\r\n#endif\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\n// A good test is one that consistently gets away with UB when destructor tombstones are disabled,\r\n// but reliably terminates when destructor tombstones are enabled.\r\n// A great test is when not even ASan can detect the UB when destructor tombstones are disabled.\r\n// (Note that it may not always be possible to write a great test. For example, when\r\n// dynamically allocated sentinel nodes are involved, ASan is extremely good at detecting UB.)\r\n\r\ntemplate <class T, class Func, class... Args>\r\nvoid call_on_destroyed_object(Func func, Args&&... args) {\r\n    alignas(T) unsigned char storage[sizeof(T)]{};\r\n    T& t = *::new (static_cast<void*>(storage)) T(forward<Args>(args)...);\r\n    t.~T();\r\n    func(t); // obviously undefined behavior\r\n}\r\n\r\nvoid test_vector() {\r\n    call_on_destroyed_object<vector<double>>([](auto& v) { v.push_back(17.29); });\r\n}\r\nvoid test_vector_bool() {\r\n    call_on_destroyed_object<vector<bool>>([](auto& vb) { vb.push_back(true); });\r\n}\r\nvoid test_deque() {\r\n    call_on_destroyed_object<deque<double>>([](auto& d) { d.shrink_to_fit(); });\r\n}\r\nvoid test_list() {\r\n    call_on_destroyed_object<list<double>>([](auto& l) { (void) (l.begin() == l.end()); });\r\n}\r\nvoid test_forward_list() {\r\n    call_on_destroyed_object<forward_list<double>>([](auto& fl) { (void) distance(fl.begin(), fl.end()); });\r\n}\r\nvoid test_set() {\r\n    call_on_destroyed_object<set<double>>([](auto& s) { (void) (s.begin() == s.end()); });\r\n}\r\nvoid test_unordered_set() {\r\n    call_on_destroyed_object<unordered_set<double>>([](auto& us) { (void) (us.begin() == us.end()); });\r\n}\r\nvoid test_string() {\r\n    call_on_destroyed_object<string>([](auto& str) { str[0] = '\\0'; }); // 1-byte characters\r\n}\r\nvoid test_wstring() {\r\n    call_on_destroyed_object<wstring>([](auto& wstr) { wstr[0] = L'\\0'; }); // 2-byte characters\r\n}\r\nvoid test_u32string() {\r\n    call_on_destroyed_object<u32string>([](auto& u32str) { u32str[0] = U'\\0'; }); // 4-byte characters\r\n}\r\nvoid test_unique_ptr() {\r\n    call_on_destroyed_object<unique_ptr<double>>([](auto& up) { up.reset(); });\r\n}\r\nvoid test_unique_ptr_array() {\r\n    call_on_destroyed_object<unique_ptr<double[]>>([](auto& upa) { upa.reset(); });\r\n}\r\nvoid test_shared_ptr() {\r\n    call_on_destroyed_object<shared_ptr<double>>([](auto& sp) { sp.reset(); });\r\n}\r\nvoid test_weak_ptr() {\r\n    call_on_destroyed_object<weak_ptr<double>>([](auto& wp) { (void) wp.expired(); });\r\n}\r\nvoid test_exception_ptr() {\r\n    call_on_destroyed_object<exception_ptr>([](auto& ep) { ep = nullptr; });\r\n}\r\nvoid test_function() {\r\n    call_on_destroyed_object<function<int(int, int)>>([](auto& f) { f = nullptr; });\r\n}\r\nvoid test_regex() {\r\n    call_on_destroyed_object<regex>([](auto& r) { (void) r.mark_count(); });\r\n}\r\nvoid test_valarray() {\r\n    call_on_destroyed_object<valarray<double>>([](auto& va) { va.resize(10); });\r\n}\r\n\r\n#if _HAS_CXX17\r\nvoid test_any() {\r\n    call_on_destroyed_object<any>([](auto& a) { any other{move(a)}; });\r\n}\r\nvoid test_optional() {\r\n    call_on_destroyed_object<optional<string>>([](auto& o) { o.value() = \"woof\"; }, \"meow\");\r\n}\r\nvoid test_variant() {\r\n    call_on_destroyed_object<variant<double, string>>([](auto& var) { get<string>(var) = \"woof\"; }, \"meow\");\r\n}\r\nvoid test_polymorphic_allocator() {\r\n    call_on_destroyed_object<pmr::polymorphic_allocator<double>>([](auto& pa) { (void) pa.allocate(1); });\r\n}\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\nvoid test_move_only_function() {\r\n    call_on_destroyed_object<move_only_function<int(int, int)>>([](auto& mof) { mof = nullptr; });\r\n}\r\n#endif // _HAS_CXX23\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n    exec.add_death_tests({\r\n        test_vector,\r\n        test_vector_bool,\r\n        test_deque,\r\n        test_list,\r\n        test_forward_list,\r\n        test_set,\r\n        test_unordered_set,\r\n        test_string,\r\n        test_wstring,\r\n        test_u32string,\r\n        test_unique_ptr,\r\n        test_unique_ptr_array,\r\n        test_shared_ptr,\r\n        test_weak_ptr,\r\n        test_exception_ptr,\r\n        test_function,\r\n        test_regex,\r\n        test_valarray,\r\n\r\n#if _HAS_CXX17\r\n        test_any,\r\n        test_optional,\r\n        test_variant,\r\n        test_polymorphic_allocator,\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\n        test_move_only_function,\r\n#endif // _HAS_CXX23\r\n    });\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n\r\n#if _HAS_CXX20\r\n// Verify that destructor tombstones don't interfere with constexpr.\r\nconstexpr bool test_constexpr() { // COMPILE-ONLY\r\n    vector<double> v(10, 3.14);\r\n    vector<bool> vb(10, true);\r\n    string str{\"cats\"};\r\n    wstring wstr{L\"meow\"};\r\n    u32string u32str{U\"purr\"};\r\n    optional<string> o{\"hiss\"};\r\n\r\n#if _HAS_CXX23\r\n    unique_ptr<double> up{new double{3.14}};\r\n    unique_ptr<double[]> upa{new double[10]{}};\r\n#endif // _HAS_CXX23\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(test_constexpr());\r\n#endif // _HAS_CXX20\r\n\r\n#endif // ^^^ no workaround ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_005402_string_with_volatile_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_005402_string_with_volatile_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <string>\r\n\r\n#if _HAS_CXX23\r\n#include <ranges>\r\n#endif // _HAS_CXX23\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Str>\r\nvoid test() {\r\n    using CharT = typename Str::value_type;\r\n    {\r\n        volatile CharT arr[1]{CharT{'*'}};\r\n\r\n        Str s(begin(arr), end(arr));\r\n        assert(s.size() == 1);\r\n        assert(s[0] == CharT{'*'});\r\n\r\n        s.append(begin(arr), end(arr));\r\n        assert(s.size() == 2);\r\n        assert(s[0] == CharT{'*'});\r\n        assert(s[1] == CharT{'*'});\r\n\r\n        s.assign(begin(arr), end(arr));\r\n        assert(s.size() == 1);\r\n        assert(s[0] == CharT{'*'});\r\n\r\n        s.insert(s.begin(), begin(arr), end(arr));\r\n        assert(s.size() == 2);\r\n        assert(s[0] == CharT{'*'});\r\n        assert(s[1] == CharT{'*'});\r\n\r\n        s.replace(s.begin(), s.end(), begin(arr), end(arr));\r\n        assert(s.size() == 1);\r\n        assert(s[0] == CharT{'*'});\r\n    }\r\n    {\r\n        const volatile CharT arr[1]{CharT{'*'}};\r\n\r\n        Str s(begin(arr), end(arr));\r\n        assert(s.size() == 1);\r\n        assert(s[0] == CharT{'*'});\r\n\r\n        s.append(begin(arr), end(arr));\r\n        assert(s.size() == 2);\r\n        assert(s[0] == CharT{'*'});\r\n        assert(s[1] == CharT{'*'});\r\n\r\n        s.assign(begin(arr), end(arr));\r\n        assert(s.size() == 1);\r\n        assert(s[0] == CharT{'*'});\r\n\r\n        s.insert(s.begin(), begin(arr), end(arr));\r\n        assert(s.size() == 2);\r\n        assert(s[0] == CharT{'*'});\r\n        assert(s[1] == CharT{'*'});\r\n\r\n        s.replace(s.begin(), s.end(), begin(arr), end(arr));\r\n        assert(s.size() == 1);\r\n        assert(s[0] == CharT{'*'});\r\n    }\r\n#if _HAS_CXX23\r\n    {\r\n        volatile CharT arr[1]{CharT{'*'}};\r\n\r\n        Str s = {from_range, arr};\r\n        assert(s.size() == 1);\r\n        assert(s[0] == CharT{'*'});\r\n\r\n        s.append_range(arr);\r\n        assert(s.size() == 2);\r\n        assert(s[0] == CharT{'*'});\r\n        assert(s[1] == CharT{'*'});\r\n\r\n        s.assign_range(arr);\r\n        assert(s.size() == 1);\r\n        assert(s[0] == CharT{'*'});\r\n\r\n        s.insert_range(s.begin(), arr);\r\n        assert(s.size() == 2);\r\n        assert(s[0] == CharT{'*'});\r\n        assert(s[1] == CharT{'*'});\r\n\r\n        s.replace_with_range(s.begin(), s.end(), arr);\r\n        assert(s.size() == 1);\r\n        assert(s[0] == CharT{'*'});\r\n    }\r\n    {\r\n        const volatile CharT arr[1]{CharT{'*'}};\r\n\r\n        Str s = {from_range, arr};\r\n        assert(s.size() == 1);\r\n        assert(s[0] == CharT{'*'});\r\n\r\n        s.append_range(arr);\r\n        assert(s.size() == 2);\r\n        assert(s[0] == CharT{'*'});\r\n        assert(s[1] == CharT{'*'});\r\n\r\n        s.assign_range(arr);\r\n        assert(s.size() == 1);\r\n        assert(s[0] == CharT{'*'});\r\n\r\n        s.insert_range(s.begin(), arr);\r\n        assert(s.size() == 2);\r\n        assert(s[0] == CharT{'*'});\r\n        assert(s[1] == CharT{'*'});\r\n\r\n        s.replace_with_range(s.begin(), s.end(), arr);\r\n        assert(s.size() == 1);\r\n        assert(s[0] == CharT{'*'});\r\n    }\r\n#endif // _HAS_CXX23\r\n}\r\n\r\nint main() {\r\n    test<string>();\r\n#ifdef __cpp_char8_t\r\n    test<u8string>();\r\n#endif // defined(__cpp_char8_t)\r\n    test<u16string>();\r\n    test<u32string>();\r\n    test<wstring>();\r\n\r\n#if _HAS_CXX17\r\n    test<pmr::string>();\r\n#ifdef __cpp_char8_t\r\n    test<pmr::u8string>();\r\n#endif // defined(__cpp_char8_t)\r\n    test<pmr::u16string>();\r\n    test<pmr::u32string>();\r\n    test<pmr::wstring>();\r\n#endif // _HAS_CXX17\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005421_vector_algorithms_integer_class_type_iterator/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_005421_vector_algorithms_integer_class_type_iterator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <__msvc_int128.hpp>\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <compare>\r\n#include <iterator>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nusing picky_contiguous_iterator = test::redifference_iterator<_Signed128, T*>;\r\n\r\nstatic_assert(contiguous_iterator<picky_contiguous_iterator<int>>);\r\n\r\nint main() {\r\n    const int arr[] = {\r\n        200, 210, 220, 250, 240, 250, 250, 270, 280, 290, 300, 310, 320, 250, 340, 250, 250, 370, 380, 390};\r\n    constexpr auto arr_size = size(arr);\r\n\r\n    picky_contiguous_iterator arr_begin(begin(arr));\r\n    picky_contiguous_iterator arr_end(end(arr));\r\n\r\n    assert(find(arr_begin, arr_end, 250) == arr_begin + _Signed128{3});\r\n    assert(ranges::find(arr_begin, arr_end, 250) == arr_begin + _Signed128{3});\r\n#if _HAS_CXX23\r\n    assert(begin(ranges::find_last(arr_begin, arr_end, 250)) == arr_begin + _Signed128{16});\r\n#endif\r\n    assert(search_n(arr_begin, arr_end, 2, 250) == arr_begin + _Signed128{5});\r\n    assert(begin(ranges::search_n(arr_begin, arr_end, 2, 250)) == arr_begin + _Signed128{5});\r\n\r\n    {\r\n        const int needle[] = {100, 300, 500, 700, 900};\r\n        picky_contiguous_iterator needle_begin(begin(needle));\r\n        picky_contiguous_iterator needle_end(end(needle));\r\n\r\n        assert(find_first_of(arr_begin, arr_end, needle_begin, needle_end) == arr_begin + _Signed128{10});\r\n        assert(ranges::find_first_of(arr_begin, arr_end, needle_begin, needle_end) == arr_begin + _Signed128{10});\r\n    }\r\n\r\n    assert(adjacent_find(arr_begin, arr_end) == arr_begin + _Signed128{5});\r\n    assert(ranges::adjacent_find(arr_begin, arr_end) == arr_begin + _Signed128{5});\r\n\r\n    {\r\n        const int needle[] = {300, 310, 320};\r\n\r\n        picky_contiguous_iterator needle_begin(begin(needle));\r\n        picky_contiguous_iterator needle_end(end(needle));\r\n\r\n        assert(search(arr_begin, arr_end, needle_begin, needle_end) == arr_begin + _Signed128{10});\r\n        assert(begin(ranges::search(arr_begin, arr_end, needle_begin, needle_end)) == arr_begin + _Signed128{10});\r\n\r\n        assert(find_end(arr_begin, arr_end, needle_begin, needle_end) == arr_begin + _Signed128{10});\r\n        assert(begin(ranges::find_end(arr_begin, arr_end, needle_begin, needle_end)) == arr_begin + _Signed128{10});\r\n    }\r\n\r\n    assert(count(arr_begin, arr_end, 250) == 6);\r\n    assert(ranges::count(arr_begin, arr_end, 250) == 6);\r\n\r\n    {\r\n        const int arr_cmp[] = {200, 210, 220, 230, 240, 250};\r\n\r\n        picky_contiguous_iterator arr_cmp_begin(begin(arr_cmp));\r\n        picky_contiguous_iterator arr_cmp_end(end(arr_cmp));\r\n\r\n        assert(!equal(arr_cmp_begin, arr_cmp_end, arr_begin));\r\n        assert(!equal(arr_cmp_begin, arr_cmp_end, arr_begin, arr_end));\r\n        assert(!ranges::equal(arr_cmp_begin, arr_cmp_end, arr_begin, arr_end));\r\n        assert(mismatch(arr_cmp_begin, arr_cmp_end, arr_begin).first == arr_cmp_begin + _Signed128{3});\r\n        assert(mismatch(arr_cmp_begin, arr_cmp_end, arr_begin, arr_end).first == arr_cmp_begin + _Signed128{3});\r\n        assert(ranges::mismatch(arr_cmp_begin, arr_cmp_end, arr_begin, arr_end).in1 == arr_cmp_begin + _Signed128{3});\r\n\r\n        assert(lexicographical_compare(arr_cmp_begin, arr_cmp_end, arr_begin, arr_end));\r\n        assert(ranges::lexicographical_compare(arr_cmp_begin, arr_cmp_end, arr_begin, arr_end));\r\n        assert(\r\n            lexicographical_compare_three_way(arr_cmp_begin, arr_cmp_end, arr_begin, arr_end) == strong_ordering::less);\r\n    }\r\n\r\n    assert(min_element(arr_begin, arr_end) == arr_begin);\r\n    assert(max_element(arr_begin, arr_end) == arr_end - _Signed128{1});\r\n    assert(minmax_element(arr_begin, arr_end) == pair(arr_begin, arr_end - _Signed128{1}));\r\n\r\n    assert(ranges::min_element(arr_begin, arr_end) == arr_begin);\r\n    assert(ranges::max_element(arr_begin, arr_end) == arr_end - _Signed128{1});\r\n    assert(ranges::minmax_element(arr_begin, arr_end).max == arr_end - _Signed128{1});\r\n\r\n    assert(ranges::min(ranges::subrange(arr_begin, arr_end)) == 200);\r\n    assert(ranges::max(ranges::subrange(arr_begin, arr_end)) == 390);\r\n    assert(ranges::minmax(ranges::subrange(arr_begin, arr_end)).max == 390);\r\n\r\n    {\r\n        // floating minmax is distinct codepath unless /fp:fast\r\n        float float_arr[arr_size];\r\n        picky_contiguous_iterator float_arr_begin(begin(float_arr));\r\n        picky_contiguous_iterator float_arr_end(end(float_arr));\r\n\r\n        transform(arr_begin, arr_end, float_arr_begin, [](const int v) { return static_cast<float>(v); });\r\n\r\n        assert(ranges::min(ranges::subrange(float_arr_begin, float_arr_end)) == 200.0);\r\n        assert(ranges::max(ranges::subrange(float_arr_begin, float_arr_end)) == 390.0);\r\n        assert(ranges::minmax(ranges::subrange(float_arr_begin, float_arr_end)).max == 390.0);\r\n    }\r\n\r\n    assert(is_sorted_until(arr_begin, arr_end) == arr_begin + _Signed128{4});\r\n    assert(ranges::is_sorted_until(arr_begin, arr_end) == arr_begin + _Signed128{4});\r\n\r\n    {\r\n        int arr_copy[arr_size];\r\n        picky_contiguous_iterator arr_copy_begin(begin(arr_copy));\r\n        picky_contiguous_iterator arr_copy_end(end(arr_copy));\r\n\r\n        copy(arr_begin, arr_end, arr_copy_begin);\r\n        assert(equal(arr_begin, arr_end, arr_copy_begin, arr_copy_end));\r\n        fill(arr_copy_begin, arr_copy_end, 0);\r\n        assert(count(arr_copy_begin, arr_copy_end, 0) == arr_size);\r\n\r\n        ranges::copy(arr_begin, arr_end, arr_copy_begin);\r\n        assert(ranges::equal(arr_begin, arr_end, arr_copy_begin, arr_copy_end));\r\n        ranges::fill(arr_copy_begin, arr_copy_end, 0);\r\n        assert(ranges::count(arr_copy_begin, arr_copy_end, 0) == arr_size);\r\n\r\n        copy_n(arr_begin, arr_size, arr_copy_begin);\r\n        assert(equal(arr_begin, arr_end, arr_copy_begin, arr_copy_end));\r\n        fill_n(arr_copy_begin, arr_size, 0);\r\n        assert(count(arr_copy_begin, arr_copy_end, 0) == arr_size);\r\n\r\n        ranges::copy_n(arr_begin, arr_size, arr_copy_begin);\r\n        assert(ranges::equal(arr_begin, arr_end, arr_copy_begin, arr_copy_end));\r\n        ranges::fill_n(arr_copy_begin, arr_size, 0);\r\n        assert(ranges::count(arr_copy_begin, arr_copy_end, 0) == arr_size);\r\n    }\r\n\r\n    {\r\n        int temp[arr_size];\r\n        picky_contiguous_iterator temp_begin(begin(temp));\r\n        picky_contiguous_iterator temp_end(end(temp));\r\n\r\n        {\r\n            const int remove_expected[] = {200, 210, 220, 240, 270, 280, 290, 300, 310, 320, 340, 370, 380, 390};\r\n\r\n            fill(temp_begin, temp_end, 0);\r\n            auto rem_copy_it = remove_copy(arr_begin, arr_end, temp_begin, 250);\r\n            assert(equal(temp_begin, rem_copy_it, begin(remove_expected), end(remove_expected)));\r\n\r\n            copy(arr_begin, arr_end, temp_begin);\r\n            auto rem_it = remove(temp_begin, temp_end, 250);\r\n            assert(equal(temp_begin, rem_it, begin(remove_expected), end(remove_expected)));\r\n\r\n            ranges::fill(temp_begin, temp_end, 0);\r\n            auto r_rem_copy_it = ranges::remove_copy(arr_begin, arr_end, temp_begin, 250);\r\n            assert(ranges::equal(temp_begin, r_rem_copy_it.out, begin(remove_expected), end(remove_expected)));\r\n\r\n            ranges::copy(arr_begin, arr_end, temp_begin);\r\n            auto r_rem_it = ranges::remove(temp_begin, temp_end, 250);\r\n            assert(ranges::equal(temp_begin, begin(r_rem_it), begin(remove_expected), end(remove_expected)));\r\n        }\r\n        {\r\n            const int unique_expected[] = {\r\n                200, 210, 220, 250, 240, 250, 270, 280, 290, 300, 310, 320, 250, 340, 250, 370, 380, 390};\r\n\r\n            fill(temp_begin, temp_end, 0);\r\n            auto un_copy_it = unique_copy(arr_begin, arr_end, temp_begin);\r\n            assert(equal(temp_begin, un_copy_it, begin(unique_expected), end(unique_expected)));\r\n\r\n            copy(arr_begin, arr_end, temp_begin);\r\n            auto un_it = unique(temp_begin, temp_end);\r\n            assert(equal(temp_begin, un_it, begin(unique_expected), end(unique_expected)));\r\n\r\n            ranges::fill(temp_begin, temp_end, 0);\r\n            auto r_un_copy_it = ranges::unique_copy(arr_begin, arr_end, temp_begin);\r\n            assert(ranges::equal(temp_begin, r_un_copy_it.out, begin(unique_expected), end(unique_expected)));\r\n\r\n            ranges::copy(arr_begin, arr_end, temp_begin);\r\n            auto r_un_it = ranges::unique(temp_begin, temp_end);\r\n            assert(ranges::equal(temp_begin, begin(r_un_it), begin(unique_expected), end(unique_expected)));\r\n        }\r\n        {\r\n            const int reverse_expected[] = {\r\n                390, 380, 370, 250, 250, 340, 250, 320, 310, 300, 290, 280, 270, 250, 250, 240, 250, 220, 210, 200};\r\n\r\n            reverse_copy(arr_begin, arr_end, temp_begin);\r\n            assert(equal(temp_begin, temp_end, begin(reverse_expected), end(reverse_expected)));\r\n\r\n            copy(arr_begin, arr_end, temp_begin);\r\n            reverse(temp_begin, temp_end);\r\n            assert(equal(temp_begin, temp_end, begin(reverse_expected), end(reverse_expected)));\r\n\r\n            ranges::reverse_copy(arr_begin, arr_end, temp_begin);\r\n            assert(ranges::equal(temp_begin, temp_end, begin(reverse_expected), end(reverse_expected)));\r\n\r\n            ranges::copy(arr_begin, arr_end, temp_begin);\r\n            ranges::reverse(temp_begin, temp_end);\r\n            assert(ranges::equal(temp_begin, temp_end, begin(reverse_expected), end(reverse_expected)));\r\n        }\r\n        {\r\n            const int rotate_expected[] = {\r\n                250, 270, 280, 290, 300, 310, 320, 250, 340, 250, 250, 370, 380, 390, 200, 210, 220, 250, 240, 250};\r\n\r\n            const _Signed128 rotate_pos = 6;\r\n\r\n            auto rot_copy_it = rotate_copy(arr_begin, arr_begin + rotate_pos, arr_end, temp_begin);\r\n            assert(equal(temp_begin, temp_end, begin(rotate_expected), end(rotate_expected)));\r\n            assert(rot_copy_it == temp_end);\r\n\r\n            copy(arr_begin, arr_end, temp_begin);\r\n            auto rot_it = rotate(temp_begin, temp_begin + rotate_pos, temp_end);\r\n            assert(equal(temp_begin, temp_end, begin(rotate_expected), end(rotate_expected)));\r\n            assert(rot_it == temp_end - rotate_pos);\r\n\r\n            auto r_rot_copy_it = ranges::rotate_copy(arr_begin, arr_begin + rotate_pos, arr_end, temp_begin).out;\r\n            assert(ranges::equal(temp_begin, temp_end, begin(rotate_expected), end(rotate_expected)));\r\n            assert(r_rot_copy_it == temp_end);\r\n\r\n            ranges::copy(arr_begin, arr_end, temp_begin);\r\n            auto r_rot_it = begin(ranges::rotate(temp_begin, temp_begin + rotate_pos, temp_end));\r\n            assert(ranges::equal(temp_begin, temp_end, begin(rotate_expected), end(rotate_expected)));\r\n            assert(r_rot_it == temp_end - rotate_pos);\r\n        }\r\n        {\r\n            const int replace_expected[] = {\r\n                200, 210, 220, 333, 240, 333, 333, 270, 280, 290, 300, 310, 320, 333, 340, 333, 333, 370, 380, 390};\r\n\r\n            auto repl_copy_it = replace_copy(arr_begin, arr_end, temp_begin, 250, 333);\r\n            assert(equal(temp_begin, temp_end, begin(replace_expected), end(replace_expected)));\r\n            assert(repl_copy_it == temp_end);\r\n\r\n            auto r_repl_copy_it = ranges::replace_copy(arr_begin, arr_end, temp_begin, 250, 333).out;\r\n            assert(ranges::equal(temp_begin, temp_end, begin(replace_expected), end(replace_expected)));\r\n            assert(r_repl_copy_it == temp_end);\r\n\r\n            copy(arr_begin, arr_end, temp_begin);\r\n            replace(temp_begin, temp_end, 250, 333);\r\n            assert(equal(temp_begin, temp_end, begin(replace_expected), end(replace_expected)));\r\n\r\n            ranges::copy(arr_begin, arr_end, temp_begin);\r\n            ranges::replace(temp_begin, temp_end, 250, 333);\r\n            assert(ranges::equal(temp_begin, temp_end, begin(replace_expected), end(replace_expected)));\r\n        }\r\n        {\r\n            const int swap_ranges_expected[] = {\r\n                300, 310, 320, 250, 340, 250, 250, 370, 380, 390, 200, 210, 220, 250, 240, 250, 250, 270, 280, 290};\r\n\r\n            const auto temp_mid = temp_begin + _Signed128{10};\r\n\r\n            copy(arr_begin, arr_end, temp_begin);\r\n            swap_ranges(temp_begin, temp_mid, temp_mid);\r\n            assert(equal(temp_begin, temp_end, begin(swap_ranges_expected), end(swap_ranges_expected)));\r\n\r\n            ranges::copy(arr_begin, arr_end, temp_begin);\r\n            ranges::swap_ranges(temp_begin, temp_mid, temp_mid, temp_end);\r\n            assert(ranges::equal(temp_begin, temp_end, begin(swap_ranges_expected), end(swap_ranges_expected)));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005472_do_not_overlap/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_005472_do_not_overlap/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <ranges>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\nint arr[3] = {};\r\n\r\nint main(int argc, char* argv[]) {\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    std_testing::death_test_executive exec;\r\n\r\n    exec.add_death_tests({\r\n        +[] { swap_ranges(arr, arr + 2, arr + 1); },\r\n        +[] { reverse_copy(arr, arr + 2, arr + 1); },\r\n        +[] { replace_copy(arr, arr + 2, arr + 1, 1, 2); },\r\n        +[] { replace_copy_if(arr, arr + 2, arr + 1, [](int) { return false; }, 2); },\r\n        +[] { rotate_copy(arr, arr + 1, arr + 2, arr + 1); },\r\n#if _HAS_CXX20\r\n        +[] { ranges::reverse_copy(arr, arr + 2, arr + 1); },\r\n        +[] { ranges::reverse_copy(ranges::subrange(arr, arr + 2), arr + 1); },\r\n        +[] { ranges::replace_copy(arr, arr + 2, arr + 1, 1, 2); },\r\n        +[] { ranges::replace_copy(ranges::subrange(arr, arr + 2), arr + 1, 1, 2); },\r\n        +[] { ranges::replace_copy_if(arr, arr + 2, arr + 1, [](int) { return false; }, 2); },\r\n        +[] { ranges::replace_copy_if(ranges::subrange(arr, arr + 2), arr + 1, [](int) { return false; }, 2); },\r\n        +[] { ranges::rotate_copy(arr, arr + 1, arr + 2, arr + 1); },\r\n        +[] { ranges::rotate_copy(ranges::subrange(arr, arr + 2), arr + 1, arr + 1); },\r\n#endif // _HAS_CXX20\r\n    });\r\n\r\n    return exec.run(argc, argv);\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 2 / _ITERATOR_DEBUG_LEVEL != 2 vvv\r\n    (void) argc;\r\n    (void) argv;\r\n    return 0; // This test is only for iterator debug mode\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL != 2 ^^^\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005504_avoid_function_call_wrapping/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_005504_avoid_function_call_wrapping/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstdlib>\r\n#include <functional>\r\n#include <new>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\n#pragma warning(disable : 4324) // 'large_callable': structure was padded due to alignment specifier\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\n\r\nint alloc_count   = 0;\r\nint dealloc_count = 0;\r\n\r\nsize_t adjust_alloc_size(const size_t size) {\r\n    return size != 0 ? size : 1;\r\n}\r\n\r\nvoid* check_alloc(void* const result) {\r\n    if (!result) {\r\n        throw bad_alloc{};\r\n    }\r\n    return result;\r\n}\r\n\r\nvoid* operator new(const size_t size) {\r\n    ++alloc_count;\r\n    return check_alloc(malloc(adjust_alloc_size(size)));\r\n}\r\n\r\nvoid operator delete(void* const mem) noexcept {\r\n    ++dealloc_count;\r\n    free(mem);\r\n}\r\n\r\n#ifdef __cpp_aligned_new\r\nvoid* operator new(const size_t size, const align_val_t al) {\r\n    ++alloc_count;\r\n    return check_alloc(_aligned_malloc(adjust_alloc_size(size), static_cast<size_t>(al)));\r\n}\r\n\r\nvoid operator delete(void* const mem, align_val_t) noexcept {\r\n    ++dealloc_count;\r\n    _aligned_free(mem);\r\n}\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n\r\nstruct alloc_checker {\r\n    explicit alloc_checker(const int expected_delta_) : expected_delta(expected_delta_) {}\r\n    alloc_checker(const alloc_checker&)            = delete;\r\n    alloc_checker& operator=(const alloc_checker&) = delete;\r\n\r\n    ~alloc_checker() {\r\n        assert(alloc_count - before == expected_delta);\r\n        assert(alloc_count == dealloc_count);\r\n    }\r\n\r\n    const int expected_delta;\r\n    const int before = alloc_count;\r\n};\r\n\r\nstruct copy_counter {\r\n    copy_counter() = default;\r\n    copy_counter(const copy_counter& other) : count(other.count + 1) {}\r\n\r\n    int count = 0;\r\n};\r\n\r\nusing fn_type   = int(copy_counter);\r\nusing fn_type_r = int(copy_counter) &;\r\nusing fn_type_c = int(copy_counter) const;\r\n\r\n#ifdef __cpp_noexcept_function_type\r\nusing fn_type_nx = int(copy_counter) noexcept;\r\n#endif // defined(__cpp_noexcept_function_type)\r\n\r\nstruct small_callable {\r\n    const int context = 42;\r\n\r\n    int operator()(const copy_counter& counter) const noexcept {\r\n        assert(context == 42);\r\n        return counter.count;\r\n    }\r\n};\r\n\r\nstruct alignas(128) large_callable {\r\n    const int context = 1729;\r\n\r\n    int operator()(const copy_counter& counter) const noexcept {\r\n#ifdef __cpp_aligned_new\r\n        assert((reinterpret_cast<uintptr_t>(this) & 0x7f) == 0);\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n        assert(context == 1729);\r\n        return counter.count;\r\n    }\r\n};\r\n\r\ntemplate <class Wrapper, class Callable>\r\nvoid test_plain_call(const int expected_copies) {\r\n    Wrapper fn{Callable{}};\r\n    assert(fn(copy_counter{}) == expected_copies);\r\n}\r\n\r\ntemplate <class OuterWrapper, class InnerWrapper, class Callable>\r\nvoid test_wrapped_move_call(const int expected_copies) {\r\n    InnerWrapper inner{Callable{}};\r\n    OuterWrapper outer{move(inner)};\r\n    assert(!inner);\r\n    assert(outer(copy_counter{}) == expected_copies);\r\n}\r\n\r\ntemplate <class OuterWrapper, class MiddleWrapper, class InnerWrapper, class Callable>\r\nvoid test_wrapped_move_move_call(const int expected_copies) {\r\n    InnerWrapper inner{Callable{}};\r\n    MiddleWrapper middle{move(inner)};\r\n    OuterWrapper outer{move(middle)};\r\n    assert(!inner);\r\n    assert(!middle);\r\n    assert(outer(copy_counter{}) == expected_copies);\r\n}\r\n\r\ntemplate <class OuterWrapper, class InnerWrapper, class Callable>\r\nvoid test_wrapped_copy_call(const int expected_copies) {\r\n    InnerWrapper inner{Callable{}};\r\n    OuterWrapper outer{inner};\r\n    assert(inner);\r\n    assert(outer(copy_counter{}) == expected_copies);\r\n}\r\n\r\ntemplate <class Wrapper>\r\nvoid check_call_null(Wrapper& wrapper, const bool throws) {\r\n    if (throws) {\r\n        try {\r\n            wrapper(copy_counter{});\r\n            assert(false); // should not reach\r\n        } catch (const bad_function_call&) {\r\n        }\r\n    } else {\r\n        // UB that in our implementation tries to call doom function; we do not test that\r\n    }\r\n}\r\n\r\ntemplate <class Wrapper>\r\nvoid test_plain_null(const bool throws) {\r\n    Wrapper fn{};\r\n    assert(!fn);\r\n    check_call_null(fn, throws);\r\n}\r\n\r\ntemplate <class OuterWrapper, class InnerWrapper>\r\nvoid test_wrapped_null(const bool outer_is_null, const bool outer_throws) {\r\n    InnerWrapper inner{};\r\n    OuterWrapper outer{move(inner)};\r\n    assert(!inner);\r\n    assert(!outer == outer_is_null);\r\n    check_call_null(outer, outer_throws);\r\n}\r\n\r\nint main() {\r\n    // Plain calls\r\n    alloc_checker{0}, test_plain_call<function<fn_type>, small_callable>(0);\r\n    alloc_checker{1}, test_plain_call<function<fn_type>, large_callable>(0);\r\n    alloc_checker{0}, test_plain_call<move_only_function<fn_type>, small_callable>(0);\r\n    alloc_checker{1}, test_plain_call<move_only_function<fn_type>, large_callable>(0);\r\n\r\n    // Moves to the same\r\n    alloc_checker{0}, test_wrapped_move_call<function<fn_type>, function<fn_type>, small_callable>(0);\r\n    alloc_checker{1}, test_wrapped_move_call<function<fn_type>, function<fn_type>, large_callable>(0);\r\n    alloc_checker{0}, test_wrapped_copy_call<function<fn_type>, function<fn_type>, small_callable>(0);\r\n    alloc_checker{2}, test_wrapped_copy_call<function<fn_type>, function<fn_type>, large_callable>(0);\r\n    alloc_checker{0},\r\n        test_wrapped_move_call<move_only_function<fn_type>, move_only_function<fn_type>, small_callable>(0);\r\n    alloc_checker{1},\r\n        test_wrapped_move_call<move_only_function<fn_type>, move_only_function<fn_type>, large_callable>(0);\r\n\r\n    // Abominables and noexcept specifier\r\n    alloc_checker{0},\r\n        test_wrapped_move_call<move_only_function<fn_type_r>, move_only_function<fn_type>, small_callable>(0);\r\n    alloc_checker{1},\r\n        test_wrapped_move_call<move_only_function<fn_type_r>, move_only_function<fn_type>, large_callable>(0);\r\n    alloc_checker{0},\r\n        test_wrapped_move_call<move_only_function<fn_type>, move_only_function<fn_type_c>, small_callable>(0);\r\n    alloc_checker{1},\r\n        test_wrapped_move_call<move_only_function<fn_type>, move_only_function<fn_type_c>, large_callable>(0);\r\n\r\n    static_assert(!is_constructible_v<move_only_function<fn_type>, move_only_function<fn_type_r>>);\r\n    static_assert(!is_constructible_v<move_only_function<fn_type_c>, move_only_function<fn_type>>);\r\n\r\n#ifdef __cpp_noexcept_function_type\r\n    alloc_checker{0},\r\n        test_wrapped_move_call<move_only_function<fn_type>, move_only_function<fn_type_nx>, small_callable>(0);\r\n    alloc_checker{1},\r\n        test_wrapped_move_call<move_only_function<fn_type>, move_only_function<fn_type_nx>, large_callable>(0);\r\n\r\n    static_assert(!is_constructible_v<move_only_function<fn_type_nx>, move_only_function<fn_type>>);\r\n#endif // defined(__cpp_noexcept_function_type)\r\n\r\n    constexpr bool is_64_bit = sizeof(void*) > 4;\r\n\r\n    // Moves from function to move_only_function\r\n    alloc_checker{is_64_bit ? 0 : 1},\r\n        test_wrapped_move_call<move_only_function<fn_type>, function<fn_type>, small_callable>(0);\r\n    alloc_checker{1}, test_wrapped_move_call<move_only_function<fn_type>, function<fn_type>, large_callable>(0);\r\n\r\n    alloc_checker{is_64_bit ? 0 : 1}, test_wrapped_move_move_call<move_only_function<fn_type>,\r\n                                          move_only_function<fn_type>, function<fn_type>, small_callable>(0);\r\n    alloc_checker{1}, test_wrapped_move_move_call<move_only_function<fn_type>, move_only_function<fn_type>,\r\n                          function<fn_type>, large_callable>(0);\r\n\r\n    // Moves from function to abominable move_only_function\r\n    alloc_checker{is_64_bit ? 0 : 1},\r\n        test_wrapped_move_call<move_only_function<fn_type_r>, function<fn_type>, small_callable>(0);\r\n    alloc_checker{1}, test_wrapped_move_call<move_only_function<fn_type_r>, function<fn_type>, large_callable>(0);\r\n    alloc_checker{is_64_bit ? 0 : 1},\r\n        test_wrapped_move_call<move_only_function<fn_type_c>, function<fn_type>, small_callable>(0);\r\n    alloc_checker{1}, test_wrapped_move_call<move_only_function<fn_type_c>, function<fn_type>, large_callable>(0);\r\n\r\n#ifdef __cpp_noexcept_function_type\r\n    static_assert(!is_constructible_v<move_only_function<fn_type_nx>, function<fn_type>>);\r\n#endif // defined(__cpp_noexcept_function_type)\r\n\r\n    alloc_checker{is_64_bit ? 0 : 1},\r\n        test_wrapped_copy_call<move_only_function<fn_type>, function<fn_type>, small_callable>(0);\r\n    alloc_checker{2}, test_wrapped_copy_call<move_only_function<fn_type>, function<fn_type>, large_callable>(0);\r\n\r\n    // nulls\r\n    alloc_checker{0}, test_plain_null<function<fn_type>>(true);\r\n    alloc_checker{0}, test_plain_null<move_only_function<fn_type>>(false);\r\n\r\n    // wrapped nulls\r\n    alloc_checker{0}, test_wrapped_null<function<fn_type>, function<fn_type>>(true, true);\r\n    alloc_checker{0}, test_wrapped_null<move_only_function<fn_type>, move_only_function<fn_type>>(true, false);\r\n    alloc_checker{0}, test_wrapped_null<move_only_function<fn_type>, function<fn_type>>(false, true);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005546_containers_size_type_cast/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_005546_containers_size_type_cast/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <memory>\r\n#include <new>\r\n#include <sstream>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#if _HAS_CXX17\r\n#include <string_view>\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\n#include <ranges>\r\n#endif // _HAS_CXX23\r\n\r\n#if _HAS_CXX20\r\n#define CONSTEXPR20 constexpr\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n#define CONSTEXPR20 inline\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\nusing namespace std;\r\n\r\ntemplate <class UInt, enable_if_t<(sizeof(UInt) > sizeof(size_t)), int> = 0>\r\nCONSTEXPR20 void check_alloc_in_range_of_size_t(const UInt n) {\r\n    static_assert(is_integral_v<UInt> && is_unsigned_v<UInt>, \"must use unsigned integer type\");\r\n    if (n > static_cast<size_t>(-1)) {\r\n        throw bad_alloc{};\r\n    }\r\n}\r\n\r\ntemplate <class UInt, enable_if_t<(sizeof(UInt) <= sizeof(size_t)), int> = 0>\r\nCONSTEXPR20 void check_alloc_in_range_of_size_t(UInt) noexcept {\r\n    static_assert(is_integral_v<UInt> && is_unsigned_v<UInt>, \"must use unsigned integer type\");\r\n}\r\n\r\n\r\ntemplate <class T, class Diff>\r\nstruct redifference_allocator {\r\n    static_assert(is_integral_v<Diff> && is_signed_v<Diff> && !is_same_v<Diff, char>,\r\n        \"must use a signed integer type as the difference type\");\r\n\r\n    using value_type      = T;\r\n    using difference_type = Diff;\r\n    using size_type       = make_unsigned_t<Diff>;\r\n\r\n    redifference_allocator() = default;\r\n    template <class U>\r\n    constexpr redifference_allocator(const redifference_allocator<U, Diff>&) noexcept {}\r\n\r\n    CONSTEXPR20 T* allocate(const size_type n) {\r\n        check_alloc_in_range_of_size_t(n);\r\n        return allocator<T>{}.allocate(static_cast<size_t>(n));\r\n    }\r\n\r\n    CONSTEXPR20 void deallocate(T* p, const size_type n) {\r\n        allocator<T>{}.deallocate(p, static_cast<size_t>(n));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    constexpr allocation_result<T*, size_type> allocate_at_least(const size_type n) {\r\n        check_alloc_in_range_of_size_t(n);\r\n        const auto [ptr, cnt] = allocator<T>{}.allocate_at_least(static_cast<size_t>(n));\r\n        return {ptr, static_cast<size_type>(cnt)};\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    template <class U>\r\n    friend constexpr bool operator==(const redifference_allocator&, const redifference_allocator<U, Diff>&) noexcept {\r\n        return true;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    template <class U>\r\n    friend constexpr bool operator!=(const redifference_allocator&, const redifference_allocator<U, Diff>&) noexcept {\r\n        return false;\r\n    }\r\n#endif // !_HAS_CXX20\r\n};\r\n\r\ntemplate <class Diff>\r\nvoid test_basic_string_getline() {\r\n    using tested_allocator = redifference_allocator<char, Diff>;\r\n    using tested_string    = basic_string<char, char_traits<char>, tested_allocator>;\r\n\r\n    tested_string s1 = \"abc\";\r\n\r\n    {\r\n        istringstream is{\"abc\\ndef\"};\r\n        getline(is, s1);\r\n        assert(s1 == \"abc\");\r\n    }\r\n    {\r\n        getline(istringstream{\"abc\\ndef\"}, s1);\r\n        assert(s1 == \"abc\");\r\n    }\r\n    {\r\n        istringstream is{\"abc&def\"};\r\n        getline(is, s1, '&');\r\n        assert(s1 == \"abc\");\r\n    }\r\n    {\r\n        getline(istringstream{\"abc&def\"}, s1, '&');\r\n        assert(s1 == \"abc\");\r\n    }\r\n}\r\n\r\ntemplate <class Diff>\r\nCONSTEXPR20 void test_basic_string() {\r\n    using UDiff            = make_unsigned_t<Diff>;\r\n    using tested_allocator = redifference_allocator<char, Diff>;\r\n    using tested_string    = basic_string<char, char_traits<char>, tested_allocator>;\r\n\r\n    tested_string s1;\r\n    assert(s1.empty());\r\n    tested_string s2(tested_allocator{});\r\n    assert(s2.empty());\r\n    tested_string s3 = s1;\r\n    assert(s3.empty());\r\n    tested_string s4 = move(s1);\r\n    assert(s4.empty());\r\n    tested_string s5 = {s2, 0, tested_allocator{}};\r\n    assert(s5.empty());\r\n    tested_string s6 = {s2, 0, 0, tested_allocator{}};\r\n    assert(s6.empty());\r\n    tested_string s7 = {move(s2), 0, tested_allocator{}};\r\n    assert(s7.empty());\r\n    tested_string s8 = {move(s3), 0, 0, tested_allocator{}};\r\n    assert(s8.empty());\r\n    tested_string s9 = {\"ab\", 0};\r\n    assert(s9.empty());\r\n    tested_string s10 = \"cd\";\r\n    assert(s10 == \"cd\");\r\n    tested_string s11(make_unsigned_t<Diff>{1}, '*');\r\n    assert(s11 == \"*\");\r\n    tested_string s12 = {s11.begin(), s11.end(), tested_allocator{}};\r\n    assert(s12 == s11);\r\n    tested_string s13 = {'e', 'f'};\r\n    assert(s13 == \"ef\");\r\n    tested_string s14 = {s4, tested_allocator{}};\r\n    assert(s14.empty());\r\n    tested_string s15 = {move(s4), tested_allocator{}};\r\n    assert(s15.empty());\r\n#if _HAS_CXX17\r\n    tested_string s16 = {string_view{}, 0, 0, tested_allocator{}};\r\n    assert(s16.empty());\r\n    tested_string s17(string_view{}, tested_allocator{});\r\n    assert(s17.empty());\r\n#endif // _HAS_CXX17\r\n#if _HAS_CXX23\r\n    tested_string s18 = {from_range, string_view{}};\r\n    assert(s18.empty());\r\n#endif // _HAS_CXX23\r\n\r\n    s1 = s5;\r\n    assert(s1.empty());\r\n    s2 = move(s1);\r\n    assert(s2.empty());\r\n#if _HAS_CXX17\r\n    s16 = string_view{};\r\n    assert(s16.empty());\r\n#endif // _HAS_CXX17\r\n\r\n    assert(s2.begin() == s2.end());\r\n    assert(as_const(s2).begin() == as_const(s2).end());\r\n    assert(s2.cbegin() == s2.cend());\r\n    assert(s2.rbegin() == s2.rend());\r\n    assert(as_const(s2).rbegin() == as_const(s2).rend());\r\n    assert(s2.crbegin() == s2.crend());\r\n    assert(s2.size() == 0);\r\n    assert(s2.length() == 0);\r\n    assert(s2.max_size() != 0);\r\n    assert(s2.capacity() >= s2.size());\r\n\r\n    s2.resize(UDiff{1}, '*');\r\n    assert(s2 == \"*\");\r\n    s2.resize(UDiff{1});\r\n    assert(s2 == \"*\");\r\n    s2.reserve(UDiff{sizeof(s2)});\r\n    assert(s2 == \"*\");\r\n    assert(s2.capacity() >= sizeof(s2));\r\n    s2.shrink_to_fit();\r\n    s2.clear();\r\n    assert(s2.empty());\r\n#if _HAS_CXX23\r\n    s2.resize_and_overwrite(UDiff{1}, [](char* p, UDiff) {\r\n        p[0] = '*';\r\n        return UDiff{1};\r\n    });\r\n    assert(s2 == \"*\");\r\n    s2.clear();\r\n#endif // _HAS_CXX23\r\n\r\n    assert(s11.front() == '*');\r\n    assert(as_const(s11).front() == '*');\r\n    assert(s11.back() == '*');\r\n    assert(as_const(s11).back() == '*');\r\n    assert(s11[0] == '*');\r\n    assert(s11[1] == '\\0');\r\n    assert(as_const(s11)[0] == '*');\r\n    assert(as_const(s11)[1] == '\\0');\r\n    assert(s11.at(0) == '*');\r\n    assert(as_const(s11).at(0) == '*');\r\n\r\n    s2 += s2;\r\n    assert(s2.empty());\r\n    s2 += \"\";\r\n    assert(s2.empty());\r\n#if _HAS_CXX17\r\n    s2 += string_view{};\r\n    assert(s2.empty());\r\n#endif // _HAS_CXX17\r\n    s2 += '*';\r\n    assert(s2 == \"*\");\r\n    s2 += {'g', 'h'};\r\n    assert(s2 == \"*gh\");\r\n\r\n    s2.append(s5);\r\n    assert(s2 == \"*gh\");\r\n    s2.append(s5, UDiff{0}, UDiff{0});\r\n    assert(s2 == \"*gh\");\r\n#if _HAS_CXX17\r\n    s2.append(string_view{});\r\n    assert(s2 == \"*gh\");\r\n    s2.append(string_view{}, UDiff{0}, UDiff{0});\r\n    assert(s2 == \"*gh\");\r\n#endif // _HAS_CXX17\r\n    s2.append(\"\", UDiff{0});\r\n    assert(s2 == \"*gh\");\r\n    s2.append(\"\");\r\n    assert(s2 == \"*gh\");\r\n    s2.append(UDiff{1}, '*');\r\n    assert(s2 == \"*gh*\");\r\n    s2.append(s5.begin(), s5.end());\r\n    assert(s2 == \"*gh*\");\r\n#if _HAS_CXX23\r\n    s2.append_range(s5);\r\n    assert(s2 == \"*gh*\");\r\n#endif // _HAS_CXX23\r\n    s2.append({'i', 'j'});\r\n    assert(s2 == \"*gh*ij\");\r\n    s2.push_back('k');\r\n    assert(s2 == \"*gh*ijk\");\r\n\r\n    s1.assign(s5);\r\n    assert(s1.empty());\r\n    s2.assign(move(s1));\r\n    assert(s2.empty());\r\n    s2.assign(s5, UDiff{0}, UDiff{0});\r\n    assert(s2.empty());\r\n#if _HAS_CXX17\r\n    s2.assign(string_view{});\r\n    assert(s2.empty());\r\n    s2.assign(string_view{}, UDiff{0}, UDiff{0});\r\n    assert(s2.empty());\r\n#endif // _HAS_CXX17\r\n    s2.assign(\"kl\", UDiff{2});\r\n    assert(s2 == \"kl\");\r\n    s2.assign(\"mn\");\r\n    assert(s2 == \"mn\");\r\n    s2.assign({'o', 'p'});\r\n    assert(s2 == \"op\");\r\n    s2.assign(s5.begin(), s5.end());\r\n    assert(s2.empty());\r\n#if _HAS_CXX23\r\n    s2.assign_range(s5);\r\n    assert(s2.empty());\r\n#endif // _HAS_CXX23\r\n\r\n    s2.insert(UDiff{0}, s5);\r\n    assert(s2.empty());\r\n    s2.insert(UDiff{0}, s5, UDiff{0}, UDiff{0});\r\n    assert(s2.empty());\r\n#if _HAS_CXX17\r\n    s2.insert(UDiff{0}, string_view{});\r\n    assert(s2.empty());\r\n    s2.insert(UDiff{0}, string_view{}, UDiff{0}, UDiff{0});\r\n    assert(s2.empty());\r\n#endif // _HAS_CXX17\r\n    s2.insert(UDiff{0}, \"qr\", UDiff{2});\r\n    assert(s2 == \"qr\");\r\n    s2.insert(UDiff{0}, \"st\");\r\n    assert(s2 == \"stqr\");\r\n    s2.insert(UDiff{2}, UDiff{2}, '*');\r\n    assert(s2 == \"st**qr\");\r\n    s2.insert(s2.begin(), '*');\r\n    assert(s2 == \"*st**qr\");\r\n    s2.insert(s2.begin(), UDiff{1}, '*');\r\n    assert(s2 == \"**st**qr\");\r\n#if _HAS_CXX23\r\n    s2.insert_range(s2.begin(), s5);\r\n    assert(s2 == \"**st**qr\");\r\n#endif // _HAS_CXX23\r\n    s2.insert(s2.begin(), {'u', 'v'});\r\n    assert(s2 == \"uv**st**qr\");\r\n\r\n    s2.erase(UDiff{3}, tested_string::npos);\r\n    assert(s2 == \"uv*\");\r\n    s2.erase(next(s2.begin()));\r\n    assert(s2 == \"u*\");\r\n    s2.erase(next(s2.begin()), s2.end());\r\n    assert(s2 == \"u\");\r\n    s2.pop_back();\r\n    assert(s2.empty());\r\n\r\n    s2.replace(UDiff{0}, UDiff{0}, s5);\r\n    assert(s2.empty());\r\n    s2.replace(UDiff{0}, UDiff{0}, s5, UDiff{0}, UDiff{0});\r\n    assert(s2.empty());\r\n#if _HAS_CXX17\r\n    s2.replace(UDiff{0}, UDiff{0}, string_view{});\r\n    assert(s2.empty());\r\n    s2.replace(UDiff{0}, UDiff{0}, string_view{}, UDiff{0}, UDiff{0});\r\n    assert(s2.empty());\r\n#endif // _HAS_CXX17\r\n    s2.replace(UDiff{0}, UDiff{0}, \"wx\", 2);\r\n    assert(s2 == \"wx\");\r\n    s2.replace(UDiff{0}, UDiff{0}, \"yz\");\r\n    assert(s2 == \"yzwx\");\r\n    s2.replace(UDiff{0}, UDiff{4}, UDiff{1}, '*');\r\n    assert(s2 == \"*\");\r\n    s2.replace(s2.begin(), s2.end(), s5);\r\n    assert(s2.empty());\r\n#if _HAS_CXX17\r\n    s2.replace(s2.begin(), s2.end(), string_view{});\r\n    assert(s2.empty());\r\n#endif // _HAS_CXX17\r\n    s2.replace(s2.begin(), s2.end(), \"AB\", UDiff{2});\r\n    assert(s2 == \"AB\");\r\n    s2.replace(s2.begin(), s2.end(), \"CD\");\r\n    assert(s2 == \"CD\");\r\n    s2.replace(s2.begin(), s2.end(), UDiff{1}, '*');\r\n    assert(s2 == \"*\");\r\n    s2.replace(s2.begin(), s2.end(), s5.begin(), s5.end());\r\n    assert(s2.empty());\r\n#if _HAS_CXX23\r\n    s2.replace_with_range(s2.begin(), s2.end(), s5);\r\n    assert(s2.empty());\r\n#endif // _HAS_CXX23\r\n    s2.replace(s2.begin(), s2.end(), {'E', 'F'});\r\n    assert(s2 == \"EF\");\r\n\r\n    s5.copy(&s2[0], UDiff{0}, UDiff{0});\r\n    assert(s2 == \"EF\");\r\n\r\n    s2.swap(s5);\r\n    assert(s2.empty());\r\n    assert(s5 == \"EF\");\r\n    swap(s2, s5);\r\n    assert(s2 == \"EF\");\r\n    assert(s5.empty());\r\n\r\n    assert(s2.data()[0] == 'E');\r\n    assert(as_const(s2).data()[0] == 'E');\r\n    assert(s2.c_str()[0] == 'E');\r\n    assert(s2.data() == as_const(s2).data());\r\n    assert(s2.data() == s2.c_str());\r\n#if _HAS_CXX17\r\n    {\r\n        string_view sv = s2;\r\n        assert(sv == \"EF\");\r\n    }\r\n#endif // _HAS_CXX17\r\n    assert(s2.get_allocator() == tested_allocator{});\r\n\r\n#if _HAS_CXX17\r\n    assert(s2.find(string_view{s2}, UDiff{0}) == 0);\r\n#endif // _HAS_CXX17\r\n    assert(s2.find(s2, UDiff{0}) == 0);\r\n    assert(s2.find(\"EF\", UDiff{0}, UDiff{2}) == 0);\r\n    assert(s2.find(\"EF\", UDiff{0}) == 0);\r\n    assert(s2.find('E', UDiff{0}) == 0);\r\n\r\n#if _HAS_CXX17\r\n    assert(s2.rfind(string_view{s2}, UDiff{0}) == 0);\r\n#endif // _HAS_CXX17\r\n    assert(s2.rfind(s2, UDiff{0}) == 0);\r\n    assert(s2.rfind(\"EF\", UDiff{0}, UDiff{2}) == 0);\r\n    assert(s2.rfind(\"EF\", UDiff{0}) == 0);\r\n    assert(s2.rfind('E', UDiff{0}) == 0);\r\n\r\n#if _HAS_CXX17\r\n    assert(s2.find_first_of(string_view{s2}, UDiff{0}) == 0);\r\n#endif // _HAS_CXX17\r\n    assert(s2.find_first_of(s2, UDiff{0}) == 0);\r\n    assert(s2.find_first_of(\"EF\", UDiff{0}, UDiff{2}) == 0);\r\n    assert(s2.find_first_of(\"EF\", UDiff{0}) == 0);\r\n    assert(s2.find_first_of('E', UDiff{0}) == 0);\r\n\r\n#if _HAS_CXX17\r\n    assert(s2.find_last_of(string_view{s2}, UDiff{0}) == 0);\r\n#endif // _HAS_CXX17\r\n    assert(s2.find_last_of(s2, UDiff{0}) == 0);\r\n    assert(s2.find_last_of(\"EF\", UDiff{0}, UDiff{2}) == 0);\r\n    assert(s2.find_last_of(\"EF\", UDiff{0}) == 0);\r\n    assert(s2.find_last_of('E', UDiff{0}) == 0);\r\n\r\n#if _HAS_CXX17\r\n    assert(s2.find_first_not_of(string_view{\"AB\"}, UDiff{0}) == 0);\r\n#endif // _HAS_CXX17\r\n    assert(s2.find_first_not_of(tested_string{\"AB\"}, UDiff{0}) == 0);\r\n    assert(s2.find_first_not_of(\"AB\", UDiff{0}, UDiff{2}) == 0);\r\n    assert(s2.find_first_not_of(\"AB\", UDiff{0}) == 0);\r\n    assert(s2.find_first_not_of('A', UDiff{0}) == 0);\r\n\r\n#if _HAS_CXX17\r\n    assert(s2.find_last_not_of(string_view{\"AB\"}, UDiff{0}) == 0);\r\n#endif // _HAS_CXX17\r\n    assert(s2.find_last_not_of(tested_string{\"AB\"}, UDiff{0}) == 0);\r\n    assert(s2.find_last_not_of(\"AB\", UDiff{0}, UDiff{2}) == 0);\r\n    assert(s2.find_last_not_of(\"AB\", UDiff{0}) == 0);\r\n    assert(s2.find_last_not_of('A', UDiff{0}) == 0);\r\n\r\n    assert(s2.substr(UDiff{0}, UDiff{0}).empty());\r\n    assert(tested_string{s2}.substr(UDiff{0}, UDiff{0}).empty());\r\n\r\n#if _HAS_CXX17\r\n    assert(s2.compare(string_view{\"EF\"}) == 0);\r\n    assert(s2.compare(UDiff{0}, UDiff{0}, string_view{}) == 0);\r\n    assert(s2.compare(UDiff{0}, UDiff{0}, string_view{}, UDiff{0}, UDiff{0}) == 0);\r\n#endif // _HAS_CXX17\r\n    assert(s2.compare(s2) == 0);\r\n    assert(s2.compare(UDiff{0}, UDiff{0}, tested_string{}) == 0);\r\n    assert(s2.compare(UDiff{0}, UDiff{0}, tested_string{}, UDiff{0}, UDiff{0}) == 0);\r\n    assert(s2.compare(\"EF\") == 0);\r\n    assert(s2.compare(UDiff{0}, UDiff{0}, \"\") == 0);\r\n    assert(s2.compare(UDiff{0}, UDiff{2}, \"EF\", UDiff{2}) == 0);\r\n\r\n#if _HAS_CXX20\r\n    assert(s2.starts_with(string_view{\"E\"}));\r\n    assert(s2.starts_with(\"E\"));\r\n    assert(s2.starts_with('E'));\r\n\r\n    assert(s2.ends_with(string_view{\"F\"}));\r\n    assert(s2.ends_with(\"F\"));\r\n    assert(s2.ends_with('F'));\r\n#endif // _HAS_CXX20\r\n#if _HAS_CXX23\r\n    assert(s2.contains(string_view{\"EF\"}));\r\n    assert(s2.contains(\"EF\"));\r\n    assert(s2.contains('E'));\r\n#endif // _HAS_CXX23\r\n\r\n    assert(s2 + s2 == tested_string{\"EFEF\"});\r\n    assert(s2 + tested_string{} == tested_string{\"EF\"});\r\n    assert(tested_string{} + s2 == tested_string{\"EF\"});\r\n    assert(tested_string{} + tested_string{} == tested_string{});\r\n\r\n    assert(s2 + \"\" == tested_string{\"EF\"});\r\n    assert(\"\" + s2 == tested_string{\"EF\"});\r\n    assert(tested_string{} + \"\" == tested_string{});\r\n    assert(\"\" + tested_string{} == tested_string{});\r\n\r\n    assert(s2 + '*' == tested_string{\"EF*\"});\r\n    assert('*' + s2 == tested_string{\"*EF\"});\r\n    assert(tested_string{} + '*' == tested_string{\"*\"});\r\n    assert('*' + tested_string{} == tested_string{\"*\"});\r\n\r\n    assert(s2 == s2);\r\n    assert(!(s2 != s2));\r\n    assert(!(s2 < s2));\r\n    assert(!(s2 > s2));\r\n    assert(s2 <= s2);\r\n    assert(s2 >= s2);\r\n\r\n    assert(s2 == \"EF\");\r\n    assert(!(s2 != \"EF\"));\r\n    assert(!(s2 < \"EF\"));\r\n    assert(!(s2 > \"EF\"));\r\n    assert(s2 <= \"EF\");\r\n    assert(s2 >= \"EF\");\r\n\r\n    assert(\"EF\" == s2);\r\n    assert(!(\"EF\" != s2));\r\n    assert(!(\"EF\" < s2));\r\n    assert(!(\"EF\" > s2));\r\n    assert(\"EF\" <= s2);\r\n    assert(\"EF\" >= s2);\r\n#if _HAS_CXX20\r\n    assert(s2 <=> s2 == strong_ordering::equal);\r\n    assert(s2 <=> \"EF\" == strong_ordering::equal);\r\n\r\n    erase(s2, 'E');\r\n    assert(s2 == \"F\");\r\n    erase_if(s2, [](char) { return true; });\r\n    assert(s2.empty());\r\n\r\n    if (!is_constant_evaluated())\r\n#endif // _HAS_CXX20\r\n    {\r\n        test_basic_string_getline<Diff>();\r\n\r\n        tested_string s19 = \"Hello world!\";\r\n        assert(hash<tested_string>{}(s19) == hash<string>{}(string{\"Hello world!\"}));\r\n#if _HAS_CXX17\r\n        assert(hash<tested_string>{}(s19) == hash<string_view>{}(string_view{\"Hello world!\"}));\r\n#endif // _HAS_CXX17\r\n    }\r\n}\r\n\r\ntemplate <class Diff>\r\nCONSTEXPR20 void test_single() {\r\n    test_basic_string<Diff>();\r\n}\r\n\r\nCONSTEXPR20 bool test() {\r\n    test_single<signed char>();\r\n    test_single<short>();\r\n    test_single<int>();\r\n    test_single<long>();\r\n    test_single<long long>();\r\n    return true;\r\n}\r\n\r\n#if _HAS_CXX20\r\nstatic_assert(test());\r\n#endif // _HAS_CXX20\r\n\r\nint main() {\r\n    test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005553_regex_character_translation/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_005553_regex_character_translation/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstddef>\r\n#include <cstdio>\r\n#include <regex>\r\n#include <string>\r\n#include <type_traits>\r\n\r\n#include <test_regex_support.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::regex_constants;\r\n\r\nregex_fixture g_regexTester;\r\n\r\ntemplate <class charT>\r\nclass nonidempotent_translate_regex_traits : private regex_traits<charT> {\r\nprivate:\r\n    using rx_traits = regex_traits<charT>;\r\n\r\npublic:\r\n    using char_type       = typename rx_traits::char_type;\r\n    using string_type     = typename rx_traits::string_type;\r\n    using locale_type     = typename rx_traits::locale_type;\r\n    using char_class_type = typename rx_traits::char_class_type;\r\n    using uchar_type      = make_unsigned_t<charT>;\r\n\r\n    nonidempotent_translate_regex_traits() = default;\r\n\r\n    using rx_traits::length;\r\n\r\n    charT translate(const charT c) const {\r\n        return static_cast<charT>(static_cast<uchar_type>(rx_traits::translate(c)) / 2U);\r\n    }\r\n\r\n\r\n    charT translate_nocase(const charT c) const {\r\n        return static_cast<charT>(static_cast<uchar_type>(rx_traits::translate_nocase(c)) / 2U);\r\n    }\r\n\r\n    using rx_traits::getloc;\r\n    using rx_traits::imbue;\r\n    using rx_traits::isctype;\r\n    using rx_traits::lookup_classname;\r\n    using rx_traits::lookup_collatename;\r\n    using rx_traits::transform;\r\n    using rx_traits::transform_primary;\r\n    using rx_traits::value;\r\n};\r\n\r\ntemplate <class Rx>\r\nvoid check_match(const wstring& subject, const wstring& pattern, const Rx& re, match_flag_type flags = match_default,\r\n    bool matches = true) {\r\n    if (regex_match(subject, re, flags) != matches) {\r\n        wprintf(LR\"(Expected regex_match(\"%s\", regex(\"%s\", 0x%X)) to be %s.)\", subject.c_str(), pattern.c_str(),\r\n            static_cast<unsigned int>(re.flags()), matches ? L\"true\" : L\"false\");\r\n        g_regexTester.fail_regex();\r\n    }\r\n}\r\n\r\ntemplate <class Rx>\r\nvoid check_no_match(\r\n    const wstring& subject, const wstring& pattern, const Rx& re, match_flag_type flags = match_default) {\r\n    check_match(subject, pattern, re, flags, false);\r\n}\r\n\r\ntemplate <class Rx>\r\nvoid check_search_match(const wstring& subject, const wstring& expected, const wstring& pattern, const Rx& re,\r\n    match_flag_type flags = match_default) {\r\n    wsmatch match;\r\n    const bool search_result = regex_search(subject, match, re, flags);\r\n    if (!search_result || match[0] != expected) {\r\n        wprintf(LR\"(Expected regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X) to find \"%s\", )\", subject.c_str(),\r\n            pattern.c_str(), static_cast<unsigned int>(re.flags()), static_cast<unsigned int>(flags), expected.c_str());\r\n        if (search_result) {\r\n            wprintf(LR\"(but it matched \"%s\")\"\r\n                    L\"\\n\",\r\n                match.str().c_str());\r\n        } else {\r\n            puts(\"but it failed to match\");\r\n        }\r\n        g_regexTester.fail_regex();\r\n    }\r\n}\r\n\r\ntemplate <class Rx>\r\nvoid check_search_fail(\r\n    const wstring& subject, const wstring& pattern, const Rx& re, match_flag_type flags = match_default) {\r\n    wsmatch match;\r\n    const bool search_result = regex_search(subject, match, re, flags);\r\n    if (search_result) {\r\n        wprintf(LR\"(Expected regex_search(\"%s\", regex(\"%s\", 0x%X), 0x%X) to not match, but it found \"%s\")\"\r\n                L\"\\n\",\r\n            subject.c_str(), pattern.c_str(), static_cast<unsigned int>(re.flags()), static_cast<unsigned int>(flags),\r\n            match.str().c_str());\r\n        g_regexTester.fail_regex();\r\n    }\r\n}\r\n\r\nvoid test_gh_5553() {\r\n    // GH-5553 `<regex>`: Correct character translation in `icase` and `collate` mode\r\n    {\r\n        wstring pattern = L\"g\";\r\n        basic_regex<wchar_t, nonidempotent_translate_regex_traits<wchar_t>> charcompare_icase_pattern{pattern, icase};\r\n        check_match(L\"f\", pattern, charcompare_icase_pattern);\r\n        check_match(L\"F\", pattern, charcompare_icase_pattern);\r\n        check_match(L\"g\", pattern, charcompare_icase_pattern);\r\n        check_match(L\"G\", pattern, charcompare_icase_pattern);\r\n        check_no_match(L\"e\", pattern, charcompare_icase_pattern);\r\n        check_no_match(L\"E\", pattern, charcompare_icase_pattern);\r\n        check_no_match(L\"h\", pattern, charcompare_icase_pattern);\r\n        check_no_match(L\"H\", pattern, charcompare_icase_pattern);\r\n\r\n        check_search_match(L\"abcdefghijklmnopqrstuvwxyz\", L\"f\", pattern, charcompare_icase_pattern);\r\n        check_search_match(L\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\", L\"F\", pattern, charcompare_icase_pattern);\r\n        check_search_match(L\"zyxwvutsrqponmlkjihgfedcba\", L\"g\", pattern, charcompare_icase_pattern);\r\n        check_search_match(L\"ZYXWVUTSRQPONMLKJIHGFEDCBA\", L\"G\", pattern, charcompare_icase_pattern);\r\n        check_search_fail(L\"zyxwvutsrqponmlkjihedcba\", pattern, charcompare_icase_pattern);\r\n        check_search_fail(L\"ABCDEHIJKLMNOPQRSTUVWXYZ\", pattern, charcompare_icase_pattern);\r\n    }\r\n\r\n    {\r\n        wstring pattern = L\"g\";\r\n        basic_regex<wchar_t, nonidempotent_translate_regex_traits<wchar_t>> charcompare_collate_pattern{\r\n            pattern, regex_constants::collate};\r\n        check_match(L\"f\", pattern, charcompare_collate_pattern);\r\n        check_no_match(L\"F\", pattern, charcompare_collate_pattern);\r\n        check_match(L\"g\", pattern, charcompare_collate_pattern);\r\n        check_no_match(L\"G\", pattern, charcompare_collate_pattern);\r\n        check_no_match(L\"e\", pattern, charcompare_collate_pattern);\r\n        check_no_match(L\"E\", pattern, charcompare_collate_pattern);\r\n        check_no_match(L\"h\", pattern, charcompare_collate_pattern);\r\n        check_no_match(L\"H\", pattern, charcompare_collate_pattern);\r\n\r\n        check_search_match(L\"abcdefghijklmnopqrstuvwxyz\", L\"f\", pattern, charcompare_collate_pattern);\r\n        check_search_fail(L\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\", pattern, charcompare_collate_pattern);\r\n        check_search_match(L\"zyxwvutsrqponmlkjihgfedcba\", L\"g\", pattern, charcompare_collate_pattern);\r\n        check_search_fail(L\"ZYXWVUTSRQPONMLKJIHGFEDCBA\", pattern, charcompare_collate_pattern);\r\n        check_search_fail(L\"zyxwvutsrqponmlkjihedcba\", pattern, charcompare_collate_pattern);\r\n    }\r\n\r\n    {\r\n        wstring pattern = L\"[g]\";\r\n        basic_regex<wchar_t, nonidempotent_translate_regex_traits<wchar_t>> charclasscompare_icase_pattern{\r\n            pattern, icase};\r\n        check_match(L\"f\", pattern, charclasscompare_icase_pattern);\r\n        check_match(L\"F\", pattern, charclasscompare_icase_pattern);\r\n        check_match(L\"g\", pattern, charclasscompare_icase_pattern);\r\n        check_match(L\"G\", pattern, charclasscompare_icase_pattern);\r\n        check_no_match(L\"e\", pattern, charclasscompare_icase_pattern);\r\n        check_no_match(L\"E\", pattern, charclasscompare_icase_pattern);\r\n        check_no_match(L\"h\", pattern, charclasscompare_icase_pattern);\r\n        check_no_match(L\"H\", pattern, charclasscompare_icase_pattern);\r\n    }\r\n\r\n    {\r\n        wstring pattern = L\"[g]\";\r\n        basic_regex<wchar_t, nonidempotent_translate_regex_traits<wchar_t>> charclasscompare_collate_pattern{\r\n            pattern, regex_constants::collate};\r\n        check_match(L\"f\", pattern, charclasscompare_collate_pattern);\r\n        check_no_match(L\"F\", pattern, charclasscompare_collate_pattern);\r\n        check_match(L\"g\", pattern, charclasscompare_collate_pattern);\r\n        check_no_match(L\"G\", pattern, charclasscompare_collate_pattern);\r\n        check_no_match(L\"e\", pattern, charclasscompare_collate_pattern);\r\n        check_no_match(L\"E\", pattern, charclasscompare_collate_pattern);\r\n        check_no_match(L\"h\", pattern, charclasscompare_collate_pattern);\r\n        check_no_match(L\"H\", pattern, charclasscompare_collate_pattern);\r\n    }\r\n\r\n    {\r\n        wstring pattern = L\"[g-i]\";\r\n        basic_regex<wchar_t, nonidempotent_translate_regex_traits<wchar_t>> charrangecompare_icase_pattern{\r\n            pattern, icase};\r\n        check_match(L\"f\", pattern, charrangecompare_icase_pattern);\r\n        check_match(L\"F\", pattern, charrangecompare_icase_pattern);\r\n        check_match(L\"g\", pattern, charrangecompare_icase_pattern);\r\n        check_match(L\"G\", pattern, charrangecompare_icase_pattern);\r\n        check_match(L\"i\", pattern, charrangecompare_icase_pattern);\r\n        check_match(L\"I\", pattern, charrangecompare_icase_pattern);\r\n        check_no_match(L\"e\", pattern, charrangecompare_icase_pattern);\r\n        check_no_match(L\"E\", pattern, charrangecompare_icase_pattern);\r\n        check_no_match(L\"j\", pattern, charrangecompare_icase_pattern);\r\n        check_no_match(L\"J\", pattern, charrangecompare_icase_pattern);\r\n    }\r\n\r\n    {\r\n        wstring pattern = L\"[g-i]\";\r\n        basic_regex<wchar_t, nonidempotent_translate_regex_traits<wchar_t>> charrangecompare_collate_pattern{\r\n            pattern, regex_constants::collate};\r\n        check_match(L\"f\", pattern, charrangecompare_collate_pattern);\r\n        check_no_match(L\"F\", pattern, charrangecompare_collate_pattern);\r\n        check_match(L\"g\", pattern, charrangecompare_collate_pattern);\r\n        check_no_match(L\"G\", pattern, charrangecompare_collate_pattern);\r\n        check_match(L\"i\", pattern, charrangecompare_collate_pattern);\r\n        check_no_match(L\"I\", pattern, charrangecompare_collate_pattern);\r\n        check_no_match(L\"e\", pattern, charrangecompare_collate_pattern);\r\n        check_no_match(L\"E\", pattern, charrangecompare_collate_pattern);\r\n        check_no_match(L\"j\", pattern, charrangecompare_collate_pattern);\r\n        check_no_match(L\"J\", pattern, charrangecompare_collate_pattern);\r\n    }\r\n\r\n    {\r\n        wstring pattern = L\"[\\u022d-\\u022f]\"; // U+022D LATIN SMALL LETTER O WITH TILDE AND MACRON\r\n                                              // U+022F LATIN SMALL LETTER O WITH DOT ABOVE\r\n\r\n        basic_regex<wchar_t, nonidempotent_translate_regex_traits<wchar_t>> small_unicode_charrange_pattern{\r\n            pattern, regex_constants::icase};\r\n        // U+022C LATIN CAPITAL LETTER O WITH TILDE AND MACRON\r\n        check_match(L\"\\u022c\", pattern, small_unicode_charrange_pattern);\r\n        // U+022D LATIN SMALL LETTER O WITH TILDE AND MACRON\r\n        check_match(L\"\\u022d\", pattern, small_unicode_charrange_pattern);\r\n        // U+022E LATIN CAPITAL LETTER O WITH DOT ABOVE\r\n        check_match(L\"\\u022e\", pattern, small_unicode_charrange_pattern);\r\n        // U+022F LATIN SMALL LETTER O WITH DOT ABOVE\r\n        check_match(L\"\\u022f\", pattern, small_unicode_charrange_pattern);\r\n        // U+022B LATIN SMALL LETTER O WITH DIAERESIS AND MACRON\r\n        check_no_match(L\"\\u022b\", pattern, small_unicode_charrange_pattern);\r\n        // U+0230 LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON\r\n        check_no_match(L\"\\u0230\", pattern, small_unicode_charrange_pattern);\r\n    }\r\n\r\n    {\r\n        wstring pattern = L\"[\\u022b-\\u0230]\"; // U+022B LATIN SMALL LETTER O WITH DIAERESIS AND MACRON\r\n                                              // U+0230 LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON\r\n\r\n        basic_regex<wchar_t, nonidempotent_translate_regex_traits<wchar_t>> big_unicode_charrange_pattern{\r\n            pattern, regex_constants::icase};\r\n        // U+022A LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON\r\n        check_match(L\"\\u022a\", pattern, big_unicode_charrange_pattern);\r\n        // U+022B LATIN SMALL LETTER O WITH DIAERESIS AND MACRON\r\n        check_match(L\"\\u022b\", pattern, big_unicode_charrange_pattern);\r\n        // U+0230 LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON\r\n        check_match(L\"\\u0230\", pattern, big_unicode_charrange_pattern);\r\n        // U+0231 LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON\r\n        check_match(L\"\\u0231\", pattern, big_unicode_charrange_pattern);\r\n        // U+0229 LATIN SMALL LETTER E WITH CEDILLA\r\n        check_no_match(L\"\\u0229\", pattern, big_unicode_charrange_pattern);\r\n        // U+0232 LATIN CAPITAL LETTER Y WITH MACRON\r\n        check_no_match(L\"\\u0232\", pattern, big_unicode_charrange_pattern);\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_gh_5553();\r\n\r\n    return g_regexTester.result();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005768_pow_accuracy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_005768_pow_accuracy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cmath>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <functional>\r\n#include <random>\r\n#include <vector>\r\n\r\n// INTENTIONALLY AVOIDED: using namespace std;\r\n\r\nvoid initialize_randomness(std::mt19937_64& gen) {\r\n    constexpr std::size_t n = std::mt19937_64::state_size;\r\n    constexpr std::size_t w = std::mt19937_64::word_size;\r\n    static_assert(w % 32 == 0, \"w should be evenly divisible by 32\");\r\n    constexpr std::size_t k = w / 32;\r\n\r\n    std::vector<std::uint32_t> vec(n * k);\r\n\r\n    std::random_device rd;\r\n    std::generate(vec.begin(), vec.end(), std::ref(rd));\r\n\r\n    std::printf(\"This is a randomized test.\\n\");\r\n    std::printf(\"DO NOT IGNORE/RERUN ANY FAILURES.\\n\");\r\n    std::printf(\"You must report them to the STL maintainers.\\n\\n\");\r\n\r\n    std::seed_seq seq(vec.cbegin(), vec.cend());\r\n    gen.seed(seq);\r\n}\r\n\r\nvoid check_equal(const float val, const float actual, const float squared) {\r\n    if (actual != squared) {\r\n        std::printf(\"val: %.6a; actual: %.6a; squared: %.6a\\n\", val, actual, squared);\r\n    }\r\n    assert(actual == squared);\r\n}\r\n\r\nvoid check_equal(const double val, const double actual, const double squared) {\r\n    if (actual != squared) {\r\n        std::printf(\"val: %a; actual: %a; squared: %a\\n\", val, actual, squared);\r\n    }\r\n    assert(actual == squared);\r\n}\r\n\r\nvoid check_equal(const long double val, const long double actual, const long double squared) {\r\n    if (actual != squared) {\r\n        std::printf(\"val: %La; actual: %La; squared: %La\\n\", val, actual, squared);\r\n    }\r\n    assert(actual == squared);\r\n}\r\n\r\nvoid test_square_flt(const float val, const float squared) {\r\n    // float * float is float, N5014 [expr.arith.conv]/1.4.1.\r\n    check_equal(val, val * val, squared);\r\n\r\n    // For std::pow(float, int), the arguments are effectively cast to double, N5014 [cmath.syn]/3.\r\n    const double as_dbl = static_cast<double>(val);\r\n    check_equal(as_dbl, std::pow(val, 2), as_dbl * as_dbl);\r\n}\r\n\r\nvoid test_square_dbl(const double val, const double squared) {\r\n    check_equal(val, val * val, squared);\r\n    check_equal(val, std::pow(val, 2), squared);\r\n}\r\n\r\nvoid test_square_ldbl(const long double val, const long double squared) {\r\n    check_equal(val, val * val, squared);\r\n    check_equal(val, std::pow(val, 2), squared);\r\n}\r\n\r\n// GH-5768 <cmath>: Calling UCRT ::pow(x, 2) is less accurate than x * x\r\nvoid test_gh_5768_manually_verified() {\r\n    // Manually verified to be correctly rounded:\r\n    test_square_flt(0x1.bffff4p-1f, 0x1.87ffecp-1f);\r\n    test_square_flt(0x1.bc0040p-2f, 0x1.810870p-3f);\r\n    test_square_flt(0x1.2b7bc2p-1f, 0x1.5e5a52p-2f);\r\n\r\n    test_square_dbl(0x1.ec9a50154a6f9p-1, 0x1.d9f0c06b2463ep-1);\r\n    test_square_dbl(0x1.12814d2dd432cp-1, 0x1.26590a84f9b12p-2);\r\n    test_square_dbl(0x1.33994b0b751ccp-3, 0x1.719905c84494ap-6);\r\n\r\n    test_square_ldbl(0x1.ec9a50154a6f9p-1L, 0x1.d9f0c06b2463ep-1L);\r\n    test_square_ldbl(0x1.12814d2dd432cp-1L, 0x1.26590a84f9b12p-2L);\r\n    test_square_ldbl(0x1.33994b0b751ccp-3L, 0x1.719905c84494ap-6L);\r\n}\r\n\r\nvoid test_gh_5768_randomized(std::mt19937_64& gen) {\r\n    const int Trials = 1'000'000;\r\n\r\n    {\r\n        std::uniform_real_distribution<float> dist{-10.0f, 10.0f};\r\n        for (int i = 0; i < Trials; ++i) {\r\n            const auto val = dist(gen);\r\n            test_square_flt(val, val * val);\r\n        }\r\n    }\r\n\r\n    {\r\n        std::uniform_real_distribution<double> dist{-10.0, 10.0};\r\n        for (int i = 0; i < Trials; ++i) {\r\n            const auto val = dist(gen);\r\n            test_square_dbl(val, val * val);\r\n        }\r\n    }\r\n\r\n    {\r\n        std::uniform_real_distribution<long double> dist{-10.0L, 10.0L};\r\n        for (int i = 0; i < Trials; ++i) {\r\n            const auto val = dist(gen);\r\n            test_square_ldbl(val, val * val);\r\n        }\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_gh_5768_manually_verified();\r\n\r\n    std::mt19937_64 gen;\r\n    initialize_randomness(gen);\r\n    test_gh_5768_randomized(gen);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005780_non_ascii_locales/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_005780_non_ascii_locales/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <clocale>\r\n#include <iomanip>\r\n#include <iostream>\r\n#include <locale>\r\n#include <string>\r\nusing namespace std;\r\n\r\nstring set_locale(const string& locale_name) {\r\n    const char* const ret = setlocale(LC_ALL, locale_name.c_str());\r\n    assert(ret != nullptr);\r\n    return ret;\r\n}\r\n\r\nstring query_locale() {\r\n    const char* const ret = setlocale(LC_ALL, nullptr);\r\n    assert(ret != nullptr);\r\n    return ret;\r\n}\r\n\r\nvoid assert_string_non_ascii(const string& str) {\r\n    const auto char_not_ascii = [](const char c) { return (c & 0x80) != 0; };\r\n    assert(any_of(str.begin(), str.end(), char_not_ascii));\r\n}\r\n\r\n// GH-5780 <iostream>: Printing with std::cout changes the global locale permanently\r\nvoid test_gh_5780() {\r\n    // https://learn.microsoft.com/cpp/c-runtime-library/language-strings#supported-language-strings\r\n    const string locale_name = set_locale(\"norwegian-bokmal.437\");\r\n    assert_string_non_ascii(locale_name);\r\n\r\n    cerr.imbue(locale::classic());\r\n    cerr << setprecision(2) << 0.1 << endl;\r\n\r\n    assert(query_locale() == locale_name);\r\n}\r\n\r\nint main() {\r\n    test_gh_5780();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005800_stable_sort_large_alignment/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_005800_stable_sort_large_alignment/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma warning(disable : 6262) // Function uses '16388' bytes of stack.\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <iterator>\r\n\r\n#if _HAS_CXX17\r\n#include <execution>\r\n#endif // _HAS_CXX17\r\n\r\nusing namespace std;\r\n\r\ntemplate <size_t N>\r\nstruct alignas(N) large_element {\r\n    array<unsigned char, N> elems;\r\n\r\n#if _HAS_CXX20\r\n    friend auto operator<=>(const large_element&, const large_element&) = default;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    friend bool operator==(const large_element& lhs, const large_element& rhs) {\r\n        return lhs.elems == rhs.elems;\r\n    }\r\n\r\n    friend bool operator!=(const large_element& lhs, const large_element& rhs) {\r\n        return lhs.elems != rhs.elems;\r\n    }\r\n\r\n    friend bool operator<(const large_element& lhs, const large_element& rhs) {\r\n        return lhs.elems < rhs.elems;\r\n    }\r\n\r\n    friend bool operator>(const large_element& lhs, const large_element& rhs) {\r\n        return lhs.elems > rhs.elems;\r\n    }\r\n\r\n    friend bool operator<=(const large_element& lhs, const large_element& rhs) {\r\n        return lhs.elems <= rhs.elems;\r\n    }\r\n\r\n    friend bool operator>=(const large_element& lhs, const large_element& rhs) {\r\n        return lhs.elems >= rhs.elems;\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n};\r\n\r\nstruct alignment_verifying_less {\r\n    template <class T, class U>\r\n    bool operator()(const T& t, const U& u) const {\r\n        assert(reinterpret_cast<uintptr_t>(&t) % alignof(T) == 0);\r\n        assert(reinterpret_cast<uintptr_t>(&u) % alignof(U) == 0);\r\n        return t < u;\r\n    }\r\n};\r\n\r\nstruct alignment_verifying_truth {\r\n    template <class T>\r\n    bool operator()(const T& t) const {\r\n        assert(reinterpret_cast<uintptr_t>(&t) % alignof(T) == 0);\r\n        return true;\r\n    }\r\n};\r\n\r\ntemplate <size_t N>\r\nvoid test() {\r\n    {\r\n        large_element<N> arr[2]{};\r\n\r\n        stable_sort(begin(arr), end(arr), alignment_verifying_less{});\r\n        stable_partition(begin(arr), end(arr), alignment_verifying_truth{});\r\n        inplace_merge(begin(arr), begin(arr), end(arr), alignment_verifying_less{});\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    auto test_execution = [](const auto& execpol) {\r\n        large_element<N> arr[2]{};\r\n\r\n        stable_sort(execpol, begin(arr), end(arr), alignment_verifying_less{});\r\n        stable_partition(execpol, begin(arr), end(arr), alignment_verifying_truth{});\r\n        inplace_merge(execpol, begin(arr), begin(arr), end(arr), alignment_verifying_less{});\r\n    };\r\n    test_execution(execution::seq);\r\n    test_execution(execution::par);\r\n    test_execution(execution::par_unseq);\r\n#if _HAS_CXX20\r\n    test_execution(execution::unseq);\r\n#endif // _HAS_CXX20\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n    {\r\n        large_element<N> arr[2]{};\r\n\r\n        ranges::stable_sort(arr, alignment_verifying_less{});\r\n        ranges::stable_partition(arr, alignment_verifying_truth{});\r\n        ranges::inplace_merge(arr, ranges::begin(arr), alignment_verifying_less{});\r\n    }\r\n#endif // _HAS_CXX20\r\n}\r\n\r\nint main() {\r\n    test<1>();\r\n    test<2>();\r\n    test<4>();\r\n    test<8>();\r\n    test<16>();\r\n    test<32>();\r\n    test<64>();\r\n    test<128>();\r\n    test<256>();\r\n    test<512>();\r\n    test<1024>();\r\n    test<2048>();\r\n    test<4096>();\r\n    test<8192>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005816_numeric_limits_traps/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_005816_numeric_limits_traps/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <limits>\r\n#include <type_traits>\r\n\r\ntemplate <class T>\r\nconstexpr bool traps_ = std::numeric_limits<T>::traps;\r\n\r\n#if defined(_M_IX86) || (defined(_M_X64) && !defined(_M_ARM64EC))\r\nstatic_assert(traps_<int>,\r\n    \"The #ED hardware exception always happens for zero division and for division overflow INT_MIN/-1. \"\r\n    \"These are translated to STATUS_INTEGER_DIVIDE_BY_ZERO and STATUS_INTEGER_OVERFLOW SEH exceptions\");\r\n#elif defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64)\r\n#ifdef __clang__\r\nstatic_assert(!traps_<int>, \"The hardware does not trap. Clang compiles code as is, so there's no trap\");\r\n#else // ^^^ defined(__clang__) / !defined(__clang__) vvv\r\nstatic_assert(traps_<int>, \"The hardware does not trap. MSVC inserts a check for zero to trap zero division. \"\r\n                           \"It does not insert checks for INT_MIN/-1 division overflow though\");\r\n#endif // ^^^ !defined(__clang__) ^^^\r\n#else // ^^^ defined(_M_ARM64) || defined(_M_ARM64EC) || defined(_M_HYBRID_X86_ARM64) ^^^\r\n#error Unsupported hardware\r\n#endif\r\n\r\ntemplate <class T>\r\nconstexpr bool non_promoted_and_traps_if_int_does = std::is_same_v<decltype(~T{}), T> && traps_<T> == traps_<int>;\r\n\r\nstatic_assert(non_promoted_and_traps_if_int_does<unsigned int> //\r\n                  && non_promoted_and_traps_if_int_does<long> //\r\n                  && non_promoted_and_traps_if_int_does<unsigned long> //\r\n                  && non_promoted_and_traps_if_int_does<long long> //\r\n                  && non_promoted_and_traps_if_int_does<unsigned long long>,\r\n    \"all non-promoted integers should trap or not trap equally\");\r\n\r\ntemplate <class T>\r\nconstexpr bool promoted_and_does_not_trap = !std::is_same_v<decltype(~T{}), T> && !traps_<T>;\r\n\r\nstatic_assert(!traps_<bool>, \"bool does not trap for a moot reason; see LWG-554 resolution\");\r\n\r\nstatic_assert(promoted_and_does_not_trap<char> //\r\n                  && promoted_and_does_not_trap<signed char> //\r\n                  && promoted_and_does_not_trap<unsigned char> //\r\n                  && promoted_and_does_not_trap<short> //\r\n                  && promoted_and_does_not_trap<unsigned short> //\r\n                  && promoted_and_does_not_trap<wchar_t> //\r\n                  && promoted_and_does_not_trap<char16_t> //\r\n                  && promoted_and_does_not_trap<char32_t>,\r\n    \"promoted integers do not trap for a moot reason; see LWG-554 resolution\");\r\n\r\n#ifdef __cpp_char8_t\r\nstatic_assert(\r\n    promoted_and_does_not_trap<char8_t>, \"promoted integers do not trap for a moot reason; see LWG-554 resolution\");\r\n#endif\r\n\r\nstatic_assert(!traps_<float> && !traps_<double> && !traps_<long double>,\r\n    \"floats don't trap because even if '/fp:except' is passed, it should be enabled at runtime\");\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/custom_format.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\n\r\nfrom stl.test.format import STLTestFormat, TestStep\r\nfrom stl.test.tests import TestType\r\n\r\n\r\nclass CustomTestFormat(STLTestFormat):\r\n    def getBuildSteps(self, test, litConfig, shared):\r\n        exeSourceDir = os.path.dirname(test.getSourcePath())\r\n        _, outputBase = test.getTempPaths()\r\n\r\n        sourceFiles = []\r\n        for filename in os.listdir(exeSourceDir):\r\n            if filename.endswith('.cpp'):\r\n                sourceFiles.append(os.path.join(exeSourceDir, filename))\r\n\r\n        if TestType.COMPILE in test.testType:\r\n            cmd = [test.cxx, '/c', *sourceFiles, *test.flags, *test.compileFlags]\r\n        elif TestType.RUN in test.testType:\r\n            shared.execFile = outputBase + '.exe'\r\n            cmd = [test.cxx, *sourceFiles, *test.flags, *test.compileFlags, '/Fe' + shared.execFile,\r\n                   '/link', *test.linkFlags]\r\n\r\n        yield TestStep(cmd, shared.execDir, shared.env, False)\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/lit.local.cfg",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\nimport site\r\nsite.addsitedir(os.path.dirname(os.path.dirname(__file__)))\r\nimport GH_005968_headers_provide_begin_end.custom_format\r\n\r\nconfig.test_format = GH_005968_headers_provide_begin_end.custom_format.CustomTestFormat()\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/shared_test.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n// Intentionally avoid including anything. Order assumption: shared_test.hpp assumes\r\n// that the relevant Standard headers have already been included by the .cpp files.\r\n\r\n// Test requirements of N5032 [iterator.range]/1.\r\n\r\nnamespace detail {\r\n\r\n    // file test_iterator.cpp uses a non-std container and thus we can't rely on ADL to find begin/end etc.\r\n    using namespace std;\r\n\r\n    // Define minimal metaprogramming tools, avoid including anything\r\n\r\n#define DEFINE_CONDITIONAL_CALLER_OF_FREE_MEMBER(free_name, member_name)                                     \\\r\n    template <class T, class = void>                                                                         \\\r\n    struct conditional_caller_of_##free_name {                                                               \\\r\n        constexpr void operator()(T&) {}                                                                     \\\r\n    };                                                                                                       \\\r\n                                                                                                             \\\r\n    template <class T>                                                                                       \\\r\n    struct conditional_caller_of_##free_name<T&, decltype((void) static_cast<T*>(nullptr)->member_name())> { \\\r\n        constexpr auto operator()(T& t) {                                                                    \\\r\n            return free_name(t);                                                                             \\\r\n        }                                                                                                    \\\r\n    };\r\n\r\n#define DEFINE_CONDITIONAL_CALLER_OF(name) DEFINE_CONDITIONAL_CALLER_OF_FREE_MEMBER(name, name)\r\n\r\n#define CONDITIONALLY_CALL(c, name) conditional_caller_of_##name<decltype(c)>{}(c)\r\n\r\n    DEFINE_CONDITIONAL_CALLER_OF(rbegin);\r\n    DEFINE_CONDITIONAL_CALLER_OF(rend);\r\n    DEFINE_CONDITIONAL_CALLER_OF(crbegin);\r\n    DEFINE_CONDITIONAL_CALLER_OF(crend);\r\n    DEFINE_CONDITIONAL_CALLER_OF(size);\r\n#if _HAS_CXX20\r\n    DEFINE_CONDITIONAL_CALLER_OF_FREE_MEMBER(ssize, size); // N5032 [iterator.range]/18\r\n#endif\r\n    DEFINE_CONDITIONAL_CALLER_OF(empty);\r\n    DEFINE_CONDITIONAL_CALLER_OF(data);\r\n\r\n    template <class C>\r\n    void test_free_container_functions(C& c) {\r\n        (void) begin(c);\r\n        (void) end(c);\r\n        (void) cbegin(c);\r\n        (void) cend(c);\r\n        CONDITIONALLY_CALL(c, rbegin); // missing e.g. for forward_list\r\n        CONDITIONALLY_CALL(c, rend); // missing e.g. for forward_list\r\n        CONDITIONALLY_CALL(c, crbegin); // missing e.g. for forward_list\r\n        CONDITIONALLY_CALL(c, crend); // missing e.g. for forward_list\r\n        CONDITIONALLY_CALL(c, size); // missing e.g. for optional\r\n#if _HAS_CXX20\r\n        CONDITIONALLY_CALL(c, ssize); // missing e.g. for optional\r\n#endif\r\n        CONDITIONALLY_CALL(c, empty); // missing e.g. for valarray\r\n        CONDITIONALLY_CALL(c, data); // missing e.g. for valarray\r\n    }\r\n\r\n    inline void test_free_array_functions() {\r\n        int a[]{1, 2, 3};\r\n\r\n        (void) begin(a);\r\n        (void) end(a);\r\n        (void) cbegin(a);\r\n        (void) cend(a);\r\n        (void) rbegin(a);\r\n        (void) rend(a);\r\n        (void) crbegin(a);\r\n        (void) crend(a);\r\n        (void) size(a);\r\n#if _HAS_CXX20\r\n        (void) ssize(a);\r\n#endif\r\n        (void) empty(a);\r\n        (void) data(a);\r\n    }\r\n} // namespace detail\r\n\r\ntemplate <class C>\r\nvoid shared_test(C& c) {\r\n    detail::test_free_container_functions(c);\r\n    // as_const from <utility> not required to be available\r\n    detail::test_free_container_functions(const_cast<const C&>(c));\r\n\r\n    detail::test_free_array_functions();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nvoid test_array();\r\nvoid test_deque();\r\nvoid test_flat_map();\r\nvoid test_flat_set();\r\nvoid test_forward_list();\r\nvoid test_hive();\r\nvoid test_inplace_vector();\r\nvoid test_iterator();\r\nvoid test_list();\r\nvoid test_map();\r\nvoid test_optional();\r\nvoid test_regex();\r\nvoid test_set();\r\nvoid test_span();\r\nvoid test_stacktrace();\r\nvoid test_string();\r\nvoid test_string_view();\r\nvoid test_unordered_map();\r\nvoid test_unordered_set();\r\nvoid test_valarray();\r\nvoid test_vector();\r\n\r\nint main() {\r\n    test_array();\r\n    test_deque();\r\n    test_flat_map();\r\n    test_flat_set();\r\n    test_forward_list();\r\n    test_hive();\r\n    test_inplace_vector();\r\n    test_iterator();\r\n    test_list();\r\n    test_map();\r\n    test_optional();\r\n    test_regex();\r\n    test_set();\r\n    test_span();\r\n    test_stacktrace();\r\n    test_string();\r\n    test_string_view();\r\n    test_unordered_map();\r\n    test_unordered_set();\r\n    test_valarray();\r\n    test_vector();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_array.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_array() {\r\n    std::array<int, 3> container{1, 2, 3};\r\n    shared_test(container);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_deque.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <deque>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_deque() {\r\n    std::deque<int> container{1, 2, 3};\r\n    shared_test(container);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_flat_map.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <version>\r\n#if _HAS_CXX23\r\n\r\n#include <flat_map>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_flat_map() {\r\n    {\r\n        std::flat_map<int, int> container{\r\n            {1, 5},\r\n            {3, 7},\r\n        };\r\n        shared_test(container);\r\n    }\r\n\r\n    {\r\n        std::flat_multimap<int, int> container2{\r\n            {1, 5},\r\n            {3, 7},\r\n        };\r\n        shared_test(container2);\r\n    }\r\n}\r\n\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n\r\nvoid test_flat_map() {}\r\n\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_flat_set.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <version>\r\n#if _HAS_CXX23\r\n\r\n#include <flat_set>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_flat_set() {\r\n    {\r\n        std::flat_set<int> container{1, 2, 3};\r\n        shared_test(container);\r\n    }\r\n\r\n    {\r\n        std::flat_multiset<int> container2{1, 2, 3};\r\n        shared_test(container2);\r\n    }\r\n}\r\n\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n\r\nvoid test_flat_set() {}\r\n\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_forward_list.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <forward_list>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_forward_list() {\r\n    std::forward_list<int> container{1, 2, 3};\r\n    shared_test(container);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_hive.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <version>\r\n#if defined(__cpp_lib_hive)\r\nstatic_assert(false, \"When this feature is implemented, update this to a Standard mode check.\");\r\n\r\n#include <hive>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_hive() {\r\n    std::hive<int> container{1, 2, 3};\r\n    shared_test(container);\r\n}\r\n\r\n#else // ^^^ defined(__cpp_lib_hive) / !defined(__cpp_lib_hive) vvv\r\n\r\nvoid test_hive() {}\r\n\r\n#endif // ^^^ !defined(__cpp_lib_hive) ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_inplace_vector.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <version>\r\n#if defined(__cpp_lib_inplace_vector)\r\nstatic_assert(false, \"When this feature is implemented, update this to a Standard mode check.\");\r\n\r\n#include <inplace_vector>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_inplace_vector() {\r\n    std::inplace_vector<int, 3> container{1, 2, 3};\r\n    shared_test(container);\r\n}\r\n\r\n#else // ^^^ defined(__cpp_lib_inplace_vector) / !defined(__cpp_lib_inplace_vector) vvv\r\n\r\nvoid test_inplace_vector() {}\r\n\r\n#endif // ^^^ !defined(__cpp_lib_inplace_vector) ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_iterator.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <iterator>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nstruct minimal_container {\r\n    static constexpr size_t magic_value = 3376942;\r\n\r\n    constexpr void begin() const {}\r\n    constexpr void end() const {}\r\n    constexpr void cbegin() const {}\r\n    constexpr void cend() const {}\r\n    constexpr void rbegin() const {}\r\n    constexpr void rend() const {}\r\n    constexpr void crbegin() const {}\r\n    constexpr void crend() const {}\r\n    constexpr size_t size() const {\r\n        return magic_value;\r\n    }\r\n    constexpr void empty() const {}\r\n    constexpr void data() const {}\r\n};\r\n\r\n\r\n// Self-test the template machinery to check it properly detects member functions\r\nnamespace detail {\r\n    template <class C>\r\n    constexpr bool minimal_container_test(C& c) {\r\n        // when the CONDITIONALLY_CALL expression fails to detect the member, it has type void, i.e. clearly\r\n        // incompatible with operator==. If the detection mechanism did not work properly, this would fail to compile.\r\n        return CONDITIONALLY_CALL(c, size) == minimal_container::magic_value;\r\n    }\r\n\r\n    constexpr minimal_container min_cont;\r\n    static_assert(minimal_container_test(min_cont), \"The member detection utility is broken\");\r\n} // namespace detail\r\n\r\nvoid test_iterator() {\r\n    minimal_container container;\r\n\r\n    shared_test(container);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_list.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <list>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_list() {\r\n    std::list<int> container{1, 2, 3};\r\n    shared_test(container);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_map.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <map>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_map() {\r\n    {\r\n        std::map<int, int> container{{1, 2}, {3, 4}};\r\n        shared_test(container);\r\n    }\r\n\r\n    {\r\n        std::multimap<int, int> container2{{5, 2}, {6, 4}};\r\n        shared_test(container2);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_optional.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <version>\r\n#if defined(__cpp_lib_optional_range_support)\r\nstatic_assert(false, \"When this feature is implemented, update this to a Standard mode check.\");\r\n\r\n#include <optional>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_optional() {\r\n    std::optional<int> container{1};\r\n    shared_test(container);\r\n}\r\n\r\n#else // ^^^ defined(__cpp_lib_optional_range_support) / !defined(__cpp_lib_optional_range_support) vvv\r\n\r\nvoid test_optional() {}\r\n\r\n#endif // ^^^ !defined(__cpp_lib_optional_range_support) ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_regex.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <regex>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_regex() {\r\n    std::smatch container;\r\n    shared_test(container);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_set.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <set>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_set() {\r\n    {\r\n        std::set<int> container{1, 2, 3};\r\n        shared_test(container);\r\n    }\r\n\r\n    {\r\n        std::multiset<int> container2{1, 2, 3};\r\n        shared_test(container2);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_span.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <version>\r\n#if _HAS_CXX20\r\n\r\n#include <span>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_span() {\r\n    int arr[]{1, 2, 3};\r\n    std::span<int> container(arr);\r\n    shared_test(container);\r\n}\r\n\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n\r\nvoid test_span() {}\r\n\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_stacktrace.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <version>\r\n#if _HAS_CXX23\r\n\r\n#include <stacktrace>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_stacktrace() {\r\n    std::stacktrace container;\r\n    shared_test(container);\r\n}\r\n\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\n\r\nvoid test_stacktrace() {}\r\n\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_string.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <string>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_string() {\r\n    std::string container = \"hello\";\r\n    shared_test(container);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_string_view.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <version>\r\n#if _HAS_CXX17\r\n\r\n#include <string_view>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_string_view() {\r\n    std::string_view container = \"hello\";\r\n    shared_test(container);\r\n}\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n\r\nvoid test_string_view() {}\r\n\r\n#endif // ^^^ !_HAS_CXX17 ^^^\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_unordered_map.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <unordered_map>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_unordered_map() {\r\n    {\r\n        std::unordered_map<int, int> container{{1, 2}, {3, 4}};\r\n        shared_test(container);\r\n    }\r\n\r\n    {\r\n        std::unordered_multimap<int, int> container2{{5, 2}, {6, 4}};\r\n        shared_test(container2);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_unordered_set.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <unordered_set>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_unordered_set() {\r\n    {\r\n        std::unordered_set<int> container{1, 2, 3};\r\n        shared_test(container);\r\n    }\r\n\r\n    {\r\n        std::unordered_multiset<int> container2{4, 5, 6};\r\n        shared_test(container2);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_valarray.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <valarray>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_valarray() {\r\n    std::valarray<int> container{1, 2, 3};\r\n    shared_test(container);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/GH_005968_headers_provide_begin_end/test_vector.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <vector>\r\n\r\n#include \"shared_test.hpp\"\r\n\r\nvoid test_vector() {\r\n    std::vector<int> container{1, 2, 3};\r\n    shared_test(container);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/LWG2381_num_get_floating_point/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG2381_num_get_floating_point/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n// derived from libc++'s test files:\r\n// * std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_float.pass.cpp\r\n// * std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_double.pass.cpp\r\n\r\n#include <cassert>\r\n#include <cmath>\r\n#include <cstddef>\r\n#include <cstring>\r\n#include <ios>\r\n#include <locale>\r\n#include <sstream>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#if _HAS_CXX17\r\n#include <charconv>\r\n\r\n#include \"../P0067R5_charconv/test.hpp\"\r\n// ^^^ needs to be included first ^^^\r\n#include \"../P0067R5_charconv/double_from_chars_test_cases.hpp\"\r\n#include \"../P0067R5_charconv/float_from_chars_test_cases.hpp\"\r\n#endif // _HAS_CXX17\r\n\r\nusing namespace std;\r\n\r\nclass my_facet : public num_get<char, const char*> {\r\npublic:\r\n    explicit my_facet(size_t refs = 0) : num_get<char, const char*>(refs) {}\r\n};\r\n\r\nclass my_numpunct : public numpunct<char> {\r\npublic:\r\n    my_numpunct() : numpunct<char>() {}\r\n\r\nprotected:\r\n    char_type do_decimal_point() const override {\r\n        return ';';\r\n    }\r\n    char_type do_thousands_sep() const override {\r\n        return '_';\r\n    }\r\n    string do_grouping() const override {\r\n        return \"\\1\\2\\3\"s;\r\n    }\r\n};\r\n\r\ntemplate <class Flt>\r\nvoid test() {\r\n    const my_facet f(1);\r\n    ios instr(nullptr);\r\n    Flt v = 0;\r\n    {\r\n        const char str[] = \"123\";\r\n        assert((instr.flags() & instr.basefield) == instr.dec);\r\n        assert(instr.getloc().name() == \"C\");\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(str, str + sizeof(str), instr, err, v);\r\n        assert(iter == str + sizeof(str) - 1);\r\n        assert(err == instr.goodbit);\r\n        assert(v == 123);\r\n    }\r\n    {\r\n        const char str[]      = \"-123\";\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(str, str + sizeof(str), instr, err, v);\r\n        assert(iter == str + sizeof(str) - 1);\r\n        assert(err == instr.goodbit);\r\n        assert(v == -123);\r\n    }\r\n    {\r\n        const char str[]      = \"123.5\";\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(str, str + sizeof(str), instr, err, v);\r\n        assert(iter == str + sizeof(str) - 1);\r\n        assert(err == instr.goodbit);\r\n        assert(v == 123.5);\r\n    }\r\n    {\r\n        const char str[] = \"125e-1\";\r\n        hex(instr);\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(str, str + sizeof(str), instr, err, v);\r\n        assert(iter == str + sizeof(str) - 1);\r\n        assert(err == instr.goodbit);\r\n        assert(v == 125e-1);\r\n    }\r\n    {\r\n        const char str[] = \"0x125p-1\";\r\n        hex(instr);\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(str, str + sizeof(str), instr, err, v);\r\n        assert(iter == str + sizeof(str) - 1);\r\n        assert(err == instr.goodbit);\r\n        assert(v == static_cast<double>(0x125) * 0.5);\r\n    }\r\n    {\r\n        v                     = -1;\r\n        const char str[]      = \"123_456_78_9;125\";\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(str, str + sizeof(str), instr, err, v);\r\n        assert(iter == str + 3);\r\n        assert(err == instr.goodbit);\r\n        assert(v == 123);\r\n    }\r\n    {\r\n        v                     = -1;\r\n        const char str[]      = \"2-\";\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(str, str + sizeof(str), instr, err, v);\r\n        assert(iter == str + 1);\r\n        assert(err == instr.goodbit);\r\n        assert(v == 2);\r\n    }\r\n    {\r\n        v                     = -1;\r\n        const char* inf_str   = is_same_v<Flt, float> ? \"3.40283e+39\" : \"1.7979e+309\"; // unrepresentable\r\n        const size_t len      = strlen(inf_str);\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(inf_str, inf_str + len + 1, instr, err, v);\r\n        assert(iter == inf_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v == HUGE_VAL);\r\n    }\r\n    {\r\n        v                     = -1;\r\n        const char* inf_str   = is_same_v<Flt, float> ? \"-3.40283e+39\" : \"-1.7979e+309\"; // unrepresentable\r\n        const size_t len      = strlen(inf_str);\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(inf_str, inf_str + len + 1, instr, err, v);\r\n        assert(iter == inf_str + len);\r\n        assert(err == instr.failbit);\r\n        assert(v == -HUGE_VAL);\r\n    }\r\n\r\n    instr.imbue(locale(locale(), new my_numpunct));\r\n    {\r\n        v                     = -1;\r\n        const char* sep_str   = is_same_v<Flt, float> ? \"456_78_9;5\" : \"123_456_78_9;125\";\r\n        const size_t len      = strlen(sep_str);\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(sep_str, sep_str + len + 1, instr, err, v);\r\n        assert(iter == sep_str + len);\r\n        assert(err == instr.goodbit);\r\n        assert(v == (is_same_v<Flt, float> ? 456789.5 : 123456789.125));\r\n    }\r\n    {\r\n        v                     = -1;\r\n        const char str[]      = \"1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_\"\r\n                                \"1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_\"\r\n                                \"1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_\"\r\n                                \"1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_\"\r\n                                \"1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_\"\r\n                                \"1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_\"\r\n                                \"1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_\"\r\n                                \"1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_\"\r\n                                \"1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_\"\r\n                                \"1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_\"\r\n                                \"1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_\";\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(str, str + sizeof(str), instr, err, v);\r\n        assert(iter == str + sizeof(str) - 1);\r\n        assert(err == instr.failbit);\r\n    }\r\n    {\r\n        v                     = -1;\r\n        const char str[]      = \"3;\"\r\n                                \"14159265358979323846264338327950288419716939937510582097494459230781640628620899862803\"\r\n                                \"482534211706798214808651e+10\";\r\n        ios_base::iostate err = instr.goodbit;\r\n        const char* iter      = f.get(str, str + sizeof(str), instr, err, v);\r\n        assert(iter == str + sizeof(str) - 1);\r\n        assert(err == instr.goodbit);\r\n        assert(abs(v - 3.14159265358979e+10) / 3.14159265358979e+10 < 1.e-8);\r\n    }\r\n    {\r\n        v                = -1;\r\n        const char str[] = \"0x125p-1 \";\r\n        istringstream str_instr(str);\r\n        str_instr >> v;\r\n        assert(v == 0x125p-1);\r\n        assert(str_instr.good());\r\n    }\r\n\r\n    // \"0\\n\" and its friends\r\n    {\r\n        v                = -1;\r\n        const char str[] = \"0 \";\r\n        istringstream str_instr(str);\r\n        str_instr >> v;\r\n        assert(v == 0);\r\n        assert(str_instr.good());\r\n    }\r\n    {\r\n        v                = -1;\r\n        const char str[] = \"+0 \";\r\n        istringstream str_instr(str);\r\n        str_instr >> v;\r\n        assert(v == 0);\r\n        assert(str_instr.good());\r\n    }\r\n    {\r\n        v                = -1;\r\n        const char str[] = \"-0 \";\r\n        istringstream str_instr(str);\r\n        str_instr >> v;\r\n        assert(v == 0);\r\n        assert(str_instr.good());\r\n    }\r\n    {\r\n        v                = -1;\r\n        const char str[] = \"0\\n\";\r\n        istringstream str_instr(str);\r\n        str_instr >> v;\r\n        assert(v == 0);\r\n        assert(str_instr.good());\r\n    }\r\n    {\r\n        v                = -1;\r\n        const char str[] = \"+0\\n\";\r\n        istringstream str_instr(str);\r\n        str_instr >> v;\r\n        assert(v == 0);\r\n        assert(str_instr.good());\r\n    }\r\n    {\r\n        v                = -1;\r\n        const char str[] = \"-0\\n\";\r\n        istringstream str_instr(str);\r\n        str_instr >> v;\r\n        assert(v == 0);\r\n        assert(str_instr.good());\r\n    }\r\n}\r\n\r\n// Also test GH-1582 <xlocnum>: \"multiply by power of 10\" logic is imprecise\r\ntemplate <class Flt>\r\nvoid test_gh_1582() {\r\n    constexpr size_t digit_counts[]{200, 400, 800, 1600, 3200, 6400, 12800};\r\n    for (const size_t n : digit_counts) {\r\n        {\r\n            istringstream iss{\"1\" + string(n, '0') + \"e-\" + to_string(n)};\r\n            Flt x{};\r\n            assert(iss >> x);\r\n            assert(x == 1.0);\r\n        }\r\n        {\r\n            istringstream iss{\"0.\" + string(n, '0') + \"1e+\" + to_string(n + 1)};\r\n            Flt x{};\r\n            assert(iss >> x);\r\n            assert(x == 1.0);\r\n        }\r\n        {\r\n            istringstream iss{\"0.\" + string(n, '0') + \"1e\" + to_string(n + 1)};\r\n            Flt x{};\r\n            assert(iss >> x);\r\n            assert(x == 1.0);\r\n        }\r\n        {\r\n            istringstream iss{\"2\" + string(n, '0') + \"e-\" + to_string(n)};\r\n            Flt x{};\r\n            assert(iss >> x);\r\n            assert(x == 2.0);\r\n        }\r\n        {\r\n            istringstream iss{\"0.\" + string(n, '0') + \"2e+\" + to_string(n + 1)};\r\n            Flt x{};\r\n            assert(iss >> x);\r\n            assert(x == 2.0);\r\n        }\r\n        {\r\n            istringstream iss{\"0.\" + string(n, '0') + \"2e\" + to_string(n + 1)};\r\n            Flt x{};\r\n            assert(iss >> x);\r\n            assert(x == 2.0);\r\n        }\r\n        {\r\n            istringstream iss{\"0x1\" + string(n, '0') + \"p-\" + to_string(n * 4)};\r\n            Flt x{};\r\n            assert(iss >> x);\r\n            assert(x == 0x1.0p0);\r\n        }\r\n        {\r\n            istringstream iss{\"0x0.\" + string(n, '0') + \"1p+\" + to_string(n * 4 + 4)};\r\n            Flt x{};\r\n            assert(iss >> x);\r\n            assert(x == 0x1.0p0);\r\n        }\r\n        {\r\n            istringstream iss{\"0x0.\" + string(n, '0') + \"1p\" + to_string(n * 4 + 4)};\r\n            Flt x{};\r\n            assert(iss >> x);\r\n            assert(x == 0x1.0p0);\r\n        }\r\n        {\r\n            istringstream iss{\"0xA\" + string(n, '0') + \"p-\" + to_string(n * 4)};\r\n            Flt x{};\r\n            assert(iss >> x);\r\n            assert(x == 0xA.0p0);\r\n        }\r\n        {\r\n            istringstream iss{\"0x0.\" + string(n, '0') + \"Ap+\" + to_string(n * 4 + 4)};\r\n            Flt x{};\r\n            assert(iss >> x);\r\n            assert(x == 0xA.0p0);\r\n        }\r\n        {\r\n            istringstream iss{\"0x0.\" + string(n, '0') + \"Ap\" + to_string(n * 4 + 4)};\r\n            Flt x{};\r\n            assert(iss >> x);\r\n            assert(x == 0xA.0p0);\r\n        }\r\n    }\r\n}\r\n\r\n// Also test GH-3375 <xlocnum>: Incorrect rounding when parsing long hexadecimal floating point numbers just above\r\n// midpoints\r\ntemplate <class Flt>\r\nvoid test_gh_3375() {\r\n    // Ensure long hexadecimal FP representations just above midpoints are correctly parsed.\r\n    if (is_same_v<Flt, float>) {\r\n        {\r\n            istringstream stream(\"0x1.000001\" + string(800, '0') + \"1p+0\");\r\n            Flt x = 0.0;\r\n\r\n            stream >> x;\r\n            assert(static_cast<bool>(stream));\r\n            assert((ostringstream{} << hexfloat << x).str() == \"0x1.0000020000000p+0\");\r\n        }\r\n        {\r\n            istringstream stream(\"-0x1.000001\" + string(800, '0') + \"1p+0\");\r\n            Flt x = 0.0;\r\n\r\n            stream >> x;\r\n            assert(static_cast<bool>(stream));\r\n            assert((ostringstream{} << hexfloat << x).str() == \"-0x1.0000020000000p+0\");\r\n        }\r\n    } else {\r\n        {\r\n            istringstream stream(\"0x1.00000000000008\" + string(800, '0') + \"1p+0\");\r\n            Flt x = 0.0;\r\n\r\n            stream >> x;\r\n            assert(static_cast<bool>(stream));\r\n            assert((ostringstream{} << hexfloat << x).str() == \"0x1.0000000000001p+0\");\r\n        }\r\n        {\r\n            istringstream stream(\"-0x1.00000000000008\" + string(800, '0') + \"1p+0\");\r\n            Flt x = 0.0;\r\n\r\n            stream >> x;\r\n            assert(static_cast<bool>(stream));\r\n            assert((ostringstream{} << hexfloat << x).str() == \"-0x1.0000000000001p+0\");\r\n        }\r\n    }\r\n}\r\n\r\n// Also test GH-3376 <xlocnum>: Incorrect result when parsing 9.999999...\r\ntemplate <class Flt>\r\nvoid test_gh_3376() {\r\n\r\n    // Ensure that \"0.0999....999\" is still correctly parsed.\r\n    {\r\n        istringstream stream(\"0.09\" + string(800, '9'));\r\n        Flt x = 0.0;\r\n\r\n        stream >> x;\r\n        assert(static_cast<bool>(stream));\r\n        assert((ostringstream{} << x).str() == \"0.1\");\r\n    }\r\n    {\r\n        istringstream stream(\"-0.09\" + string(800, '9'));\r\n        Flt x = 0.0;\r\n\r\n        stream >> x;\r\n        assert(static_cast<bool>(stream));\r\n        assert((ostringstream{} << x).str() == \"-0.1\");\r\n    }\r\n\r\n    // Ensure that \"8.999....999\" is still correctly parsed.\r\n    {\r\n        istringstream stream(\"8.\" + string(800, '9'));\r\n        Flt x = 0.0;\r\n\r\n        stream >> x;\r\n        assert(static_cast<bool>(stream));\r\n        assert((ostringstream{} << x).str() == \"9\");\r\n    }\r\n    {\r\n        istringstream stream(\"-8.\" + string(800, '9'));\r\n        Flt x = 0.0;\r\n\r\n        stream >> x;\r\n        assert(static_cast<bool>(stream));\r\n        assert((ostringstream{} << x).str() == \"-9\");\r\n    }\r\n\r\n    // Ensure that \"0.999...999\" and its friends are correctly parsed.\r\n    {\r\n        istringstream stream(\"0.\" + string(800, '9'));\r\n        Flt x = 0.0;\r\n\r\n        stream >> x;\r\n        assert(static_cast<bool>(stream));\r\n        assert((ostringstream{} << x).str() == \"1\");\r\n    }\r\n    {\r\n        istringstream stream(\"-0.\" + string(800, '9'));\r\n        Flt x = 0.0;\r\n\r\n        stream >> x;\r\n        assert(static_cast<bool>(stream));\r\n        assert((ostringstream{} << x).str() == \"-1\");\r\n    }\r\n    {\r\n        istringstream stream(\"9.\" + string(800, '9'));\r\n        Flt x = 0.0;\r\n\r\n        stream >> x;\r\n        assert(static_cast<bool>(stream));\r\n        assert((ostringstream{} << x).str() == \"10\");\r\n    }\r\n    {\r\n        istringstream stream(\"-9.\" + string(800, '9'));\r\n        Flt x = 0.0;\r\n\r\n        stream >> x;\r\n        assert(static_cast<bool>(stream));\r\n        assert((ostringstream{} << x).str() == \"-10\");\r\n    }\r\n\r\n    // Ensure that huge \"999...999.999...999\" representations are correctly parsed.\r\n    {\r\n        istringstream stream(string(38, '9') + \".\" + string(800, '9'));\r\n        Flt x = 0.0;\r\n\r\n        stream >> x;\r\n        assert(static_cast<bool>(stream));\r\n        assert((ostringstream{} << x).str() == \"1e+38\");\r\n    }\r\n    {\r\n        istringstream stream(\"-\" + string(38, '9') + \".\" + string(800, '9'));\r\n        Flt x = 0.0;\r\n\r\n        stream >> x;\r\n        assert(static_cast<bool>(stream));\r\n        assert((ostringstream{} << x).str() == \"-1e+38\");\r\n    }\r\n    {\r\n        istringstream stream(string(308, '9') + \".\" + string(800, '9'));\r\n        Flt x = 0.0;\r\n\r\n        stream >> x;\r\n        if (is_same_v<Flt, float>) {\r\n            assert(!stream);\r\n            assert(x == HUGE_VALF);\r\n        } else {\r\n            assert(static_cast<bool>(stream));\r\n            assert((ostringstream{} << x).str() == \"1e+308\");\r\n        }\r\n    }\r\n    {\r\n        istringstream stream(\"-\" + string(308, '9') + \".\" + string(800, '9'));\r\n        Flt x = 0.0;\r\n\r\n        stream >> x;\r\n        if (is_same_v<Flt, float>) {\r\n            assert(!stream);\r\n            assert(x == -HUGE_VALF);\r\n        } else {\r\n            assert(static_cast<bool>(stream));\r\n            assert((ostringstream{} << x).str() == \"-1e+308\");\r\n        }\r\n    }\r\n}\r\n\r\n// Also test GH-3378: <xlocnum>: Incorrect rounding when parsing long floating point numbers just below midpoints\r\ntemplate <class Flt>\r\nvoid test_gh_3378() {\r\n    {\r\n        // just below 2^-1022 + 2^-1074 + 2^-1075\r\n        istringstream stream(\r\n            \"2.\"\r\n            \"2250738585072021241887014792022203290724052827943903781430313383743510731924419468675440643256388185138218\"\r\n            \"8218502438069999947733013005649884107791928741341929297200970481951993067993290969042784064731682041565926\"\r\n            \"7286329336304746701233168529834221527445172608358596545663192828352447877877998943107797838336991592885945\"\r\n            \"5521371418112845825114558431922307989750439508685941245723089173894616936837232119137365897797772328669884\"\r\n            \"0356390251044443035457396733706583981055420456693824658413747607155981176573877626747665912387199931904006\"\r\n            \"3173347090030127901881752034471902500280612777779167983910905785840064647159438105114891542827750411746821\"\r\n            \"9413395246668250343130618158782937900420539237507208336669324158000275839111885418864151316847843631308023\"\r\n            \"75962957739830017089843749e-308\");\r\n\r\n        ostringstream os;\r\n        os.precision(17);\r\n\r\n        Flt x = 0.0;\r\n        stream >> x;\r\n        assert(static_cast<bool>(stream));\r\n        assert((move(os) << x).str() == \"2.2250738585072019e-308\");\r\n    }\r\n    {\r\n        // negative case\r\n        istringstream stream(\r\n            \"-2.\"\r\n            \"2250738585072021241887014792022203290724052827943903781430313383743510731924419468675440643256388185138218\"\r\n            \"8218502438069999947733013005649884107791928741341929297200970481951993067993290969042784064731682041565926\"\r\n            \"7286329336304746701233168529834221527445172608358596545663192828352447877877998943107797838336991592885945\"\r\n            \"5521371418112845825114558431922307989750439508685941245723089173894616936837232119137365897797772328669884\"\r\n            \"0356390251044443035457396733706583981055420456693824658413747607155981176573877626747665912387199931904006\"\r\n            \"3173347090030127901881752034471902500280612777779167983910905785840064647159438105114891542827750411746821\"\r\n            \"9413395246668250343130618158782937900420539237507208336669324158000275839111885418864151316847843631308023\"\r\n            \"75962957739830017089843749e-308\");\r\n\r\n        ostringstream os;\r\n        os.precision(17);\r\n\r\n        Flt x = 0.0;\r\n        stream >> x;\r\n        assert(static_cast<bool>(stream));\r\n        assert((move(os) << x).str() == \"-2.2250738585072019e-308\");\r\n    }\r\n}\r\n\r\n// Also test GH-3980 <iostream>: Wrong reading of float values\r\ntemplate <class Flt>\r\nvoid test_gh_3980() {\r\n    auto test_case = [](const char* str, double expected) {\r\n        Flt val = 0;\r\n        istringstream{str} >> val;\r\n        assert((ostringstream{} << val).str() == (ostringstream{} << expected).str());\r\n    };\r\n\r\n    test_case(\"0x1p+07\", 0x1p+07);\r\n    test_case(\"1e+07\", 1e+07);\r\n    test_case(\"1e+0\", 1);\r\n    test_case(\"1e-0\", 1);\r\n    test_case(\"1e-07\", 1e-07);\r\n    test_case(\"0x1p-07\", 0x1p-07);\r\n}\r\n\r\n#if _HAS_CXX17\r\nvoid test_float_from_char_cases() {\r\n    for (const auto& test_case : float_from_chars_test_cases) {\r\n        auto repstr = test_case.fmt == chars_format::hex ? \"0x\" + string(test_case.input) : string(test_case.input);\r\n        istringstream is(repstr);\r\n        float x = 0.0f;\r\n\r\n        const bool expected_no_err = test_case.correct_ec == errc{};\r\n        const bool tested_no_err   = static_cast<bool>(is >> x);\r\n        assert(expected_no_err == tested_no_err);\r\n        // TRANSITION, DevCom-10293606\r\n        if (x != test_case.correct_value) {\r\n            char* endptr = nullptr;\r\n            assert(x == strtof(repstr.c_str(), &endptr));\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class Flt>\r\nvoid test_double_from_char_cases() {\r\n    for (const auto& test_case : double_from_chars_test_cases) {\r\n        auto repstr = test_case.fmt == chars_format::hex ? \"0x\" + string(test_case.input) : string(test_case.input);\r\n        istringstream is(repstr);\r\n        Flt x = 0.0;\r\n\r\n        const bool expected_no_err = test_case.correct_ec == errc{};\r\n        const bool tested_no_err   = static_cast<bool>(is >> x);\r\n        assert(expected_no_err == tested_no_err);\r\n        // TRANSITION, DevCom-10293606\r\n        if (x != test_case.correct_value) {\r\n            char* endptr = nullptr;\r\n            assert(x == strtod(repstr.c_str(), &endptr));\r\n        }\r\n    }\r\n}\r\n#endif // _HAS_CXX17\r\n\r\nint main() {\r\n    test<float>();\r\n    test<double>();\r\n    test<long double>();\r\n\r\n    test_gh_1582<float>();\r\n    test_gh_1582<double>();\r\n    test_gh_1582<long double>();\r\n\r\n    test_gh_3375<float>();\r\n    test_gh_3375<double>();\r\n    test_gh_3375<long double>();\r\n\r\n    test_gh_3376<float>();\r\n    test_gh_3376<double>();\r\n    test_gh_3376<long double>();\r\n\r\n    test_gh_3378<double>();\r\n    test_gh_3378<long double>();\r\n\r\n    test_gh_3980<float>();\r\n    test_gh_3980<double>();\r\n    test_gh_3980<long double>();\r\n\r\n#if _HAS_CXX17\r\n    test_float_from_char_cases();\r\n    test_double_from_char_cases<double>();\r\n    test_double_from_char_cases<long double>();\r\n#endif // _HAS_CXX17\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/LWG2510_tag_classes/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG2510_tag_classes/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstddef>\r\n#include <functional>\r\n#include <list>\r\n#include <memory>\r\n#include <new>\r\n#include <scoped_allocator>\r\n#include <string>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#ifndef _M_CEE_PURE\r\n#include <future>\r\n#include <mutex>\r\n#endif // _M_CEE_PURE\r\n\r\n#if _HAS_CXX17\r\n#include <execution>\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n#include <chrono>\r\n#include <format>\r\n#include <iterator>\r\n#include <ranges>\r\n#include <stop_token>\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n#include <expected>\r\n#include <generator>\r\n#include <mdspan>\r\n#include <optional>\r\n#endif // _HAS_CXX23\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nusing namespace std;\r\n\r\n// LWG-2510 \"Tag types should not be DefaultConstructible\"\r\n\r\ntemplate <class T>\r\nvoid check_implicit_default_construction(const T&); // not defined\r\n\r\ntemplate <class T, class = void>\r\nconstexpr bool implicitly_default_constructible = false;\r\ntemplate <class T>\r\nconstexpr bool implicitly_default_constructible<T, void_t<decltype(check_implicit_default_construction<T>({}))>> = true;\r\n\r\nSTATIC_ASSERT(implicitly_default_constructible<int>);\r\nSTATIC_ASSERT(implicitly_default_constructible<void*>);\r\n\r\nSTATIC_ASSERT(!implicitly_default_constructible<void>);\r\nSTATIC_ASSERT(!implicitly_default_constructible<int&>);\r\nSTATIC_ASSERT(!implicitly_default_constructible<void()>);\r\n\r\ntemplate <class T>\r\nvoid check_tag_class() {\r\n    STATIC_ASSERT(is_default_constructible_v<T>);\r\n    STATIC_ASSERT(!implicitly_default_constructible<T>);\r\n\r\n    STATIC_ASSERT(is_copy_constructible_v<T>);\r\n    STATIC_ASSERT(is_move_constructible_v<T>);\r\n    STATIC_ASSERT(is_constructible_v<T, T&>);\r\n    STATIC_ASSERT(is_constructible_v<T, const T>);\r\n    STATIC_ASSERT(is_convertible_v<T&, T>);\r\n    STATIC_ASSERT(is_convertible_v<const T&, T>);\r\n    STATIC_ASSERT(is_convertible_v<T, T>);\r\n    STATIC_ASSERT(is_convertible_v<const T, T>);\r\n    STATIC_ASSERT(is_copy_assignable_v<T>);\r\n    STATIC_ASSERT(is_move_assignable_v<T>);\r\n    STATIC_ASSERT(is_assignable_v<T&, T&>);\r\n    STATIC_ASSERT(is_assignable_v<T&, const T>);\r\n\r\n    STATIC_ASSERT(is_nothrow_destructible_v<T>);\r\n\r\n    STATIC_ASSERT(!is_polymorphic_v<T>);\r\n\r\n    constexpr T constant_argument;\r\n    (void) constant_argument;\r\n\r\n    // desired properties not yet guaranteed by the Standard\r\n    STATIC_ASSERT(is_nothrow_default_constructible_v<T>);\r\n    STATIC_ASSERT(is_nothrow_copy_constructible_v<T>);\r\n    STATIC_ASSERT(is_nothrow_move_constructible_v<T>);\r\n    STATIC_ASSERT(is_nothrow_constructible_v<T, T&>);\r\n    STATIC_ASSERT(is_nothrow_constructible_v<T, const T>);\r\n#if _HAS_CXX20\r\n    STATIC_ASSERT(is_nothrow_convertible_v<T&, T>);\r\n    STATIC_ASSERT(is_nothrow_convertible_v<const T&, T>);\r\n    STATIC_ASSERT(is_nothrow_convertible_v<T, T>);\r\n    STATIC_ASSERT(is_nothrow_convertible_v<const T, T>);\r\n#endif // _HAS_CXX20\r\n    STATIC_ASSERT(is_nothrow_copy_assignable_v<T>);\r\n    STATIC_ASSERT(is_nothrow_move_assignable_v<T>);\r\n    STATIC_ASSERT(is_nothrow_assignable_v<T&, T&>);\r\n    STATIC_ASSERT(is_nothrow_assignable_v<T&, const T>);\r\n\r\n    STATIC_ASSERT(is_trivially_default_constructible_v<T>);\r\n    STATIC_ASSERT(is_trivially_copy_constructible_v<T>);\r\n    STATIC_ASSERT(is_trivially_move_constructible_v<T>);\r\n    STATIC_ASSERT(is_trivially_constructible_v<T, T&>);\r\n    STATIC_ASSERT(is_trivially_constructible_v<T, const T>);\r\n    STATIC_ASSERT(is_trivially_copy_assignable_v<T>);\r\n    STATIC_ASSERT(is_trivially_move_assignable_v<T>);\r\n    STATIC_ASSERT(is_trivially_assignable_v<T&, T&>);\r\n    STATIC_ASSERT(is_trivially_assignable_v<T&, const T>);\r\n    STATIC_ASSERT(is_trivially_destructible_v<T>);\r\n    STATIC_ASSERT(is_trivially_copyable_v<T>);\r\n\r\n    STATIC_ASSERT(is_standard_layout_v<T>);\r\n    STATIC_ASSERT(is_empty_v<T>); // only guaranteed for allocator_arg_t and piecewise_construct_t\r\n\r\n    // ABI-specific, seemingly agreed among mainstream implementations\r\n    STATIC_ASSERT(sizeof(T) == 1);\r\n}\r\n\r\nvoid check_standard_tags() {\r\n    check_tag_class<nothrow_t>();\r\n    check_tag_class<allocator_arg_t>();\r\n    check_tag_class<piecewise_construct_t>();\r\n#ifndef _M_CEE_PURE\r\n    check_tag_class<adopt_lock_t>();\r\n    check_tag_class<defer_lock_t>();\r\n    check_tag_class<try_to_lock_t>();\r\n#endif // _M_CEE_PURE\r\n\r\n#if _HAS_CXX17\r\n    check_tag_class<in_place_t>();\r\n    check_tag_class<in_place_index_t<0>>();\r\n    check_tag_class<in_place_index_t<42>>();\r\n    check_tag_class<in_place_index_t<static_cast<size_t>(-1)>>();\r\n    check_tag_class<in_place_type_t<int>>();\r\n    check_tag_class<in_place_type_t<in_place_type_t<int>>>();\r\n    check_tag_class<in_place_type_t<void>>();\r\n    check_tag_class<in_place_type_t<void()>>();\r\n\r\n    // LWG-4273 \"Standard execution policy types should be conventional tag class types\"\r\n    check_tag_class<execution::sequenced_policy>();\r\n    check_tag_class<execution::parallel_policy>();\r\n    check_tag_class<execution::parallel_unsequenced_policy>();\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n    check_tag_class<destroying_delete_t>();\r\n    check_tag_class<nostopstate_t>();\r\n    check_tag_class<chrono::last_spec>();\r\n\r\n    // LWG-4273 \"Standard execution policy types should be conventional tag class types\"\r\n    check_tag_class<execution::unsequenced_policy>();\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n    check_tag_class<from_range_t>();\r\n    check_tag_class<unexpect_t>();\r\n    // TODO: Cover sorted_equivalent_t and sorted_unique_t once flat_meow are implemented.\r\n#endif // _HAS_CXX23\r\n\r\n    // TODO: Update to cover newly introduced tag class types.\r\n}\r\n\r\n// We intentionally implement internal disambiguation tag types like standard ones.\r\nvoid check_implementation_details() {\r\n    // TODO: Synchronize the check list with actual implementation details.\r\n    check_tag_class<_Alloc_exact_args_t>();\r\n    check_tag_class<_Alloc_unpack_tuple_t>();\r\n    check_tag_class<_Exact_args_t>();\r\n    check_tag_class<_Leave_proxy_unbound>();\r\n    check_tag_class<_Move_allocator_tag>();\r\n    check_tag_class<_One_then_variadic_args_t>();\r\n    check_tag_class<_String_constructor_concat_tag>();\r\n    check_tag_class<_Secret_copyability_ignoring_tag>();\r\n    check_tag_class<_Secret_scoped_allocator_construct_tag>();\r\n    check_tag_class<_Unforced>();\r\n    check_tag_class<_Unpack_tuple_t>();\r\n    check_tag_class<_Value_init_tag>();\r\n    check_tag_class<_Zero_then_variadic_args_t>();\r\n#ifndef _M_CEE_PURE\r\n    check_tag_class<_From_raw_state_tag>();\r\n#endif // _M_CEE_PURE\r\n\r\n#if _HAS_CXX17\r\n    check_tag_class<_No_init_tag>();\r\n    check_tag_class<_Not_fn_tag>();\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n    check_tag_class<_Auto_id_tag>();\r\n    check_tag_class<_For_overwrite_tag>();\r\n    check_tag_class<_Variantish_empty_tag>();\r\n    check_tag_class<chrono::_Secret_time_zone_construct_tag>();\r\n    check_tag_class<chrono::_Secret_time_zone_link_construct_tag>();\r\n    check_tag_class<chrono::_Secret_tzdb_list_construct_tag>();\r\n    check_tag_class<ranges::_Construct_tag>();\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n    check_tag_class<_Construct_expected_from_invoke_result_tag>();\r\n    check_tag_class<_Construct_from_invoke_result_tag>();\r\n    check_tag_class<_Extents_from_tuple>();\r\n    check_tag_class<_Gen_detail::_Secret_tag>();\r\n#endif // _HAS_CXX23\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/LWG2597_complex_branch_cut/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG2597_complex_branch_cut/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cmath>\r\n#include <complex>\r\n#include <limits>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename T>\r\nvoid check(const T x, const T y) {\r\n    constexpr T tolerance = 2 * numeric_limits<T>::epsilon();\r\n\r\n    if (isfinite(x) && isfinite(y)) {\r\n        assert(signbit(x) == signbit(y));\r\n        assert(abs(x - y) <= tolerance * fmax(abs(x), abs(y)));\r\n    } else if (isnan(x) || isnan(y)) {\r\n        assert(isnan(x) == isnan(y));\r\n    } else {\r\n        assert(x == y);\r\n    }\r\n}\r\n\r\ntemplate <typename T>\r\nvoid check_part(const complex<T>& x, const complex<T>& y) {\r\n    check(x.real(), y.real());\r\n    check(x.imag(), y.imag());\r\n}\r\n\r\ntemplate <typename T>\r\nvoid check_norm(const complex<T>& x, const complex<T>& y) {\r\n    constexpr T tolerance = 4 * numeric_limits<T>::epsilon();\r\n\r\n    const bool x_is_finite = isfinite(x.real()) && isfinite(x.imag());\r\n    const bool y_is_finite = isfinite(y.real()) && isfinite(y.imag());\r\n    assert(x_is_finite == y_is_finite);\r\n\r\n    if (x_is_finite) {\r\n        assert(abs(x - y) <= tolerance * fmax(abs(x), abs(y)));\r\n    } else {\r\n        const bool x_is_inf = isinf(x.real()) || isinf(x.imag());\r\n        const bool y_is_inf = isinf(y.real()) || isinf(y.imag());\r\n        assert(x_is_inf == y_is_inf);\r\n    }\r\n}\r\n\r\ntemplate <typename T>\r\nvoid test() {\r\n    using CT = complex<T>;\r\n\r\n    constexpr T zero     = T{0};\r\n    constexpr T tiny     = numeric_limits<T>::denorm_min();\r\n    constexpr T log10_e  = T{0.4342944819032518};\r\n    constexpr T half     = T{0.5};\r\n    constexpr T one_down = T{1} - numeric_limits<T>::epsilon() / T{numeric_limits<T>::radix};\r\n    constexpr T one      = T{1};\r\n    constexpr T one_up   = T{1} + numeric_limits<T>::epsilon();\r\n    constexpr T pi_2     = T{1.5707963267948966};\r\n    constexpr T two      = T{2};\r\n    constexpr T pi       = T{3.141592653589793};\r\n    constexpr T huge     = (numeric_limits<T>::max)();\r\n    constexpr T inf      = numeric_limits<T>::infinity();\r\n\r\n    // arg\r\n    for (const T x : {zero, tiny, half, one, two, huge, inf}) {\r\n        check(arg(CT{-x, +zero}), +pi);\r\n        check(arg(CT{-x, -zero}), -pi);\r\n    }\r\n\r\n    // log\r\n    for (const T x : {zero, tiny, half, one, two, huge, inf}) {\r\n        check_part(log(CT{-x, +zero}), CT{log(x), +pi});\r\n        check_part(log(CT{-x, -zero}), CT{log(x), -pi});\r\n    }\r\n\r\n    // log10\r\n    for (const T x : {zero, tiny, half, one, two, huge, inf}) {\r\n        check_part(log10(CT{-x, +zero}), CT{log10(x), +pi * log10_e});\r\n        check_part(log10(CT{-x, -zero}), CT{log10(x), -pi * log10_e});\r\n    }\r\n\r\n    // sqrt\r\n    for (const T x : {zero, tiny, half, one, two, huge, inf}) {\r\n        check_part(sqrt(CT{-x, +zero}), CT{zero, +sqrt(x)});\r\n        check_part(sqrt(CT{-x, -zero}), CT{zero, -sqrt(x)});\r\n    }\r\n\r\n    // pow\r\n    for (const T x : {half, one, two}) {\r\n        for (const T yr : {zero, half, one, two}) {\r\n            for (const T yi : {zero, half, one, two}) {\r\n                check_norm(pow(CT{-x, +zero}, CT{+yr, +yi}), exp(CT{log(x), +pi} * CT{+yr, +yi}));\r\n                check_norm(pow(CT{-x, -zero}, CT{+yr, +yi}), exp(CT{log(x), -pi} * CT{+yr, +yi}));\r\n\r\n                check_norm(pow(CT{-x, +zero}, CT{+yr, -yi}), exp(CT{log(x), +pi} * CT{+yr, -yi}));\r\n                check_norm(pow(CT{-x, -zero}, CT{+yr, -yi}), exp(CT{log(x), -pi} * CT{+yr, -yi}));\r\n\r\n                check_norm(pow(CT{-x, +zero}, CT{-yr, +yi}), exp(CT{log(x), +pi} * CT{-yr, +yi}));\r\n                check_norm(pow(CT{-x, -zero}, CT{-yr, +yi}), exp(CT{log(x), -pi} * CT{-yr, +yi}));\r\n\r\n                check_norm(pow(CT{-x, +zero}, CT{-yr, -yi}), exp(CT{log(x), +pi} * CT{-yr, -yi}));\r\n                check_norm(pow(CT{-x, -zero}, CT{-yr, -yi}), exp(CT{log(x), -pi} * CT{-yr, -yi}));\r\n            }\r\n        }\r\n    }\r\n\r\n    // acos\r\n    for (const T x : {one, one_up, two, huge, inf}) {\r\n        check_part(acos(CT{+x, +zero}), CT{zero, -acosh(x)});\r\n        check_part(acos(CT{+x, -zero}), CT{zero, +acosh(x)});\r\n\r\n        check_part(acos(CT{-x, +zero}), CT{pi, -acosh(x)});\r\n        check_part(acos(CT{-x, -zero}), CT{pi, +acosh(x)});\r\n    }\r\n\r\n    // asin\r\n    for (const T x : {one, one_up, two, huge, inf}) {\r\n        check_part(asin(CT{+x, +zero}), CT{+pi_2, +acosh(x)});\r\n        check_part(asin(CT{+x, -zero}), CT{+pi_2, -acosh(x)});\r\n\r\n        check_part(asin(CT{-x, +zero}), CT{-pi_2, +acosh(x)});\r\n        check_part(asin(CT{-x, -zero}), CT{-pi_2, -acosh(x)});\r\n    }\r\n\r\n    // atan\r\n    for (const T x : {one_up, two, huge, inf}) {\r\n        check_part(atan(CT{+zero, +x}), CT{+pi_2, atanh(one / +x)});\r\n        check_part(atan(CT{-zero, +x}), CT{-pi_2, atanh(one / +x)});\r\n\r\n        check_part(atan(CT{+zero, -x}), CT{+pi_2, atanh(one / -x)});\r\n        check_part(atan(CT{-zero, -x}), CT{-pi_2, atanh(one / -x)});\r\n    }\r\n\r\n    // acosh\r\n    for (const T x : {one, one_down, half, tiny, zero}) {\r\n        check_part(acosh(CT{+x, +zero}), CT{zero, +acos(+x)});\r\n        check_part(acosh(CT{+x, -zero}), CT{zero, -acos(+x)});\r\n\r\n        check_part(acosh(CT{-x, +zero}), CT{zero, +acos(-x)});\r\n        check_part(acosh(CT{-x, -zero}), CT{zero, -acos(-x)});\r\n    }\r\n\r\n    for (const T x : {one, one_up, two, huge, inf}) {\r\n        check_part(acosh(CT{-x, +zero}), CT{acosh(x), +pi});\r\n        check_part(acosh(CT{-x, -zero}), CT{acosh(x), -pi});\r\n    }\r\n\r\n    // asinh\r\n    for (const T x : {one, one_up, two, huge, inf}) {\r\n        check_part(asinh(CT{+zero, +x}), CT{+acosh(x), +pi_2});\r\n        check_part(asinh(CT{-zero, +x}), CT{-acosh(x), +pi_2});\r\n\r\n        check_part(asinh(CT{+zero, -x}), CT{+acosh(x), -pi_2});\r\n        check_part(asinh(CT{-zero, -x}), CT{-acosh(x), -pi_2});\r\n    }\r\n\r\n    // atanh\r\n    for (const T x : {one_up, two, huge, inf}) {\r\n        check_part(atanh(CT{+x, +zero}), CT{atanh(one / +x), +pi_2});\r\n        check_part(atanh(CT{+x, -zero}), CT{atanh(one / +x), -pi_2});\r\n\r\n        check_part(atanh(CT{-x, +zero}), CT{atanh(one / -x), +pi_2});\r\n        check_part(atanh(CT{-x, -zero}), CT{atanh(one / -x), -pi_2});\r\n    }\r\n}\r\n\r\nint main() {\r\n    test<double>();\r\n    test<float>();\r\n    test<long double>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/LWG3018_shared_ptr_function/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG3018_shared_ptr_function/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nint val = 0;\r\n\r\nstruct decrement_val {\r\n    void operator()(void (*)(int)) const {\r\n        --val;\r\n    }\r\n};\r\n\r\nvoid add(const int i) {\r\n    val += i;\r\n}\r\n\r\nvoid add_noexcept(const int i) noexcept {\r\n    val += i;\r\n}\r\n\r\nint add_return(const int i) {\r\n    return val += i;\r\n}\r\n\r\nvoid subtract(const int i) {\r\n    val -= i;\r\n}\r\n\r\nint main() {\r\n    static_assert(!is_constructible_v<shared_ptr<void(int)>, void (*)(int)>,\r\n        \"shared_ptr of function type should not be constructible without deleter\");\r\n    {\r\n        shared_ptr<void(int)> s1(add, decrement_val{});\r\n        assert(s1.use_count() == 1);\r\n        assert(s1.get() == add);\r\n\r\n        s1.get()(2);\r\n        assert(val == 2);\r\n\r\n        shared_ptr<void(int)> s2 = s1;\r\n        assert(s1.use_count() == 2);\r\n        assert(s2.use_count() == 2);\r\n        assert(s2.get() == add);\r\n\r\n        s2.reset(subtract, decrement_val{});\r\n        assert(s1.use_count() == 1);\r\n        assert(s2.use_count() == 1);\r\n        assert(s2.get() == subtract);\r\n\r\n        (*s2)(1);\r\n        assert(val == 1);\r\n\r\n        s2.reset();\r\n        assert(s2 == nullptr);\r\n        assert(val == 0);\r\n\r\n        s2.swap(s1);\r\n        assert(s1 == nullptr);\r\n        assert(s2.get() == add);\r\n\r\n        shared_ptr<int(int)> s3(s2, add_return);\r\n        assert((*s3)(1) == 1);\r\n\r\n        weak_ptr<void(int)> w1 = s2;\r\n        (*w1.lock())(2);\r\n        assert(val == 3);\r\n\r\n#ifdef __cpp_noexcept_function_type\r\n        shared_ptr<void(int)> s4(add_noexcept, decrement_val{});\r\n        assert(s4.get() == add_noexcept);\r\n        (*s4)(1);\r\n        assert(val == 4);\r\n\r\n        shared_ptr<void(int) noexcept> s5(add_noexcept, decrement_val{});\r\n        assert(s5.get() == add_noexcept);\r\n        (*s5)(1);\r\n        assert(val == 5);\r\n\r\n        s4 = s5;\r\n        assert(s4.get() == add_noexcept);\r\n\r\n        static_assert(!is_constructible_v<shared_ptr<void(int) noexcept>, void (*)(int), decrement_val>,\r\n            \"shared_ptr of noexcept function type should not be constructible from non-noexcept function pointer\");\r\n        static_assert(!is_convertible_v<shared_ptr<void(int)>, shared_ptr<void(int) noexcept>>,\r\n            \"shared_ptr of non-noexcept function type should not be convertible to shared_ptr of noexcept function \"\r\n            \"type\");\r\n#endif // __cpp_noexcept_function_type\r\n    }\r\n    assert(val == 2);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/LWG3121_constrained_tuple_forwarding_ctor/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG3121_constrained_tuple_forwarding_ctor/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <tuple>\r\n#include <type_traits>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n#if _HAS_CXX20\r\n#define CONSTEXPR_VAR_20 constexpr\r\n#else\r\n#define CONSTEXPR_VAR_20 const\r\n#endif\r\n\r\nusing namespace std;\r\n\r\nclass pseudo_any {\r\nprivate:\r\n    bool has_value_ = false;\r\n\r\npublic:\r\n    pseudo_any() = default;\r\n    template <class ValT,\r\n        enable_if_t<conjunction_v<negation<is_same<decay_t<ValT>, pseudo_any>>, is_copy_constructible<decay_t<ValT>>>,\r\n            int> = 0>\r\n    constexpr pseudo_any(ValT&&) noexcept : has_value_{true} {}\r\n\r\n    constexpr bool has_value() const noexcept {\r\n        return has_value_;\r\n    }\r\n};\r\n\r\nSTATIC_ASSERT(is_copy_constructible_v<tuple<pseudo_any>>);\r\n\r\nusing TA2 = tuple<pseudo_any, pseudo_any>;\r\nusing TA3 = tuple<pseudo_any, pseudo_any, pseudo_any>;\r\n\r\nCONSTEXPR_VAR_20 TA2 t2{allocator_arg, allocator<int>{}};\r\nCONSTEXPR_VAR_20 TA3 t3{allocator_arg, allocator<int>{}, tuple<pseudo_any, pseudo_any, int>{}};\r\n\r\n#if _HAS_CXX20\r\nstatic_assert(!get<0>(t2).has_value());\r\nstatic_assert(!get<1>(t2).has_value());\r\nstatic_assert(!get<0>(t3).has_value());\r\nstatic_assert(!get<1>(t3).has_value());\r\nstatic_assert(get<2>(t3).has_value());\r\n#endif // _HAS_CXX20\r\n\r\nint main() {\r\n    assert(!get<0>(t2).has_value());\r\n    assert(!get<1>(t2).has_value());\r\n    assert(!get<0>(t3).has_value());\r\n    assert(!get<1>(t3).has_value());\r\n    assert(get<2>(t3).has_value());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/LWG3146_excessive_unwrapping_ref_cref/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG3146_excessive_unwrapping_ref_cref/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <functional>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nvoid test_LWG_3146() {\r\n    int i = 0;\r\n    reference_wrapper<int> ri(i);\r\n    reference_wrapper<reference_wrapper<int>> rri(ri);\r\n\r\n    auto reference       = ref(rri);\r\n    auto const_reference = cref(rri);\r\n\r\n    static_assert(\r\n        is_same_v<decltype(reference), reference_wrapper<reference_wrapper<int>>>, \"LWG-3146 is not implemented\");\r\n    static_assert(is_same_v<decltype(const_reference), reference_wrapper<const reference_wrapper<int>>>,\r\n        \"LWG-3146 is not implemented\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/LWG3234_math_special_overloads/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG3234_math_special_overloads/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cmath>\r\n#include <limits>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nstruct Ambiguous : true_type {\r\n    operator float() const {\r\n        return 0.0f;\r\n    }\r\n\r\n    operator double() const {\r\n        return 0.0;\r\n    }\r\n};\r\n\r\nAmbiguous assoc_laguerre(unsigned int, unsigned int, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous assoc_legendre(unsigned int, unsigned int, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous beta(Ambiguous, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous comp_ellint_1(Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous comp_ellint_2(Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous comp_ellint_3(Ambiguous, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous cyl_bessel_i(Ambiguous, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous cyl_bessel_j(Ambiguous, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous cyl_bessel_k(Ambiguous, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous cyl_neumann(Ambiguous, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous ellint_1(Ambiguous, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous ellint_2(Ambiguous, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous ellint_3(Ambiguous, Ambiguous, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous expint(Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous hermite(unsigned int, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous legendre(unsigned int, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous laguerre(unsigned int, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous riemann_zeta(Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous sph_bessel(unsigned int, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous sph_legendre(unsigned int, unsigned int, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\nAmbiguous sph_neumann(unsigned int, Ambiguous) {\r\n    return Ambiguous{};\r\n}\r\n\r\ntemplate <class Float>\r\nbool isclose(Float f, Float g, const int ulps = 1) {\r\n    if (f == g) {\r\n        return true;\r\n    }\r\n\r\n    if (f > g) {\r\n        swap(f, g);\r\n    }\r\n    // f < g\r\n    for (int i = 0; i < ulps; ++i) {\r\n        f = nextafter(f, numeric_limits<Float>::infinity());\r\n        if (f == g) {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\nvoid test_assoc_laguerre() {\r\n    static_assert(is_same_v<decltype(assoc_laguerre(0u, 0u, 0.0f)), float>);\r\n    static_assert(is_same_v<decltype(assoc_laguerre(0u, 0u, false)), double>);\r\n    static_assert(is_same_v<decltype(assoc_laguerre(0u, 0u, static_cast<unsigned short>(0))), double>);\r\n    static_assert(is_same_v<decltype(assoc_laguerre(0u, 0u, 0)), double>);\r\n    static_assert(is_same_v<decltype(assoc_laguerre(0u, 0u, 0u)), double>);\r\n    static_assert(is_same_v<decltype(assoc_laguerre(0u, 0u, 0l)), double>);\r\n    static_assert(is_same_v<decltype(assoc_laguerre(0u, 0u, 0ul)), double>);\r\n    static_assert(is_same_v<decltype(assoc_laguerre(0u, 0u, 0ll)), double>);\r\n    static_assert(is_same_v<decltype(assoc_laguerre(0u, 0u, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(assoc_laguerre(0u, 0u, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(assoc_laguerre(0u, 0u, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(assoc_laguerref(0u, 0u, 0)), float>);\r\n    static_assert(is_same_v<decltype(assoc_laguerrel(0u, 0u, 0)), long double>);\r\n    static_assert(is_same_v<decltype(assoc_laguerre(0u, 0u, Ambiguous{})), Ambiguous>);\r\n    assert(assoc_laguerre(1u, 2u, 4) == -1.0);\r\n}\r\n\r\nvoid test_assoc_legendre() {\r\n    static_assert(is_same_v<decltype(assoc_legendre(0u, 0u, 0.0f)), float>);\r\n    static_assert(is_same_v<decltype(assoc_legendre(0u, 0u, false)), double>);\r\n    static_assert(is_same_v<decltype(assoc_legendre(0u, 0u, static_cast<unsigned short>(0))), double>);\r\n    static_assert(is_same_v<decltype(assoc_legendre(0u, 0u, 0)), double>);\r\n    static_assert(is_same_v<decltype(assoc_legendre(0u, 0u, 0u)), double>);\r\n    static_assert(is_same_v<decltype(assoc_legendre(0u, 0u, 0l)), double>);\r\n    static_assert(is_same_v<decltype(assoc_legendre(0u, 0u, 0ul)), double>);\r\n    static_assert(is_same_v<decltype(assoc_legendre(0u, 0u, 0ll)), double>);\r\n    static_assert(is_same_v<decltype(assoc_legendre(0u, 0u, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(assoc_legendre(0u, 0u, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(assoc_legendre(0u, 0u, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(assoc_legendref(0u, 0u, 0)), float>);\r\n    static_assert(is_same_v<decltype(assoc_legendrel(0u, 0u, 0)), long double>);\r\n    static_assert(is_same_v<decltype(assoc_legendre(0u, 0u, Ambiguous{})), Ambiguous>);\r\n    assert(assoc_legendre(2u, 0u, 1) == 1.0);\r\n}\r\n\r\nvoid test_beta() {\r\n    static_assert(is_same_v<decltype(beta(0.0f, 0.0f)), float>);\r\n    static_assert(is_same_v<decltype(beta(false, 0.0f)), double>);\r\n    static_assert(is_same_v<decltype(beta(static_cast<unsigned short>(0), 0.0)), double>);\r\n    static_assert(is_same_v<decltype(beta(0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(beta(0.0f, 0u)), double>);\r\n    static_assert(is_same_v<decltype(beta(0.0, 0l)), double>);\r\n    static_assert(is_same_v<decltype(beta(0.0l, 0ul)), long double>);\r\n    static_assert(is_same_v<decltype(beta(0, 0ll)), double>);\r\n    static_assert(is_same_v<decltype(beta(0, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(beta(0.0, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(beta(0.0l, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(beta(0.0f, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(beta(0.0f, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(beta(0.0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(betaf(0, 0)), float>);\r\n    static_assert(is_same_v<decltype(betal(0, 0)), long double>);\r\n    static_assert(is_same_v<decltype(beta(0, 0)), double>);\r\n    static_assert(is_same_v<decltype(beta(Ambiguous{}, Ambiguous{})), Ambiguous>);\r\n    assert(beta(1, 2) == 0.5);\r\n}\r\n\r\nvoid test_comp_ellint_1() {\r\n    static_assert(is_same_v<decltype(comp_ellint_1(0.0f)), float>);\r\n    static_assert(is_same_v<decltype(comp_ellint_1(false)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_1(static_cast<unsigned short>(0))), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_1(0)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_1(0u)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_1(0l)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_1(0ul)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_1(0ll)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_1(0ull)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_1(0.0)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_1(0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_1f(0)), float>);\r\n    static_assert(is_same_v<decltype(comp_ellint_1l(0)), long double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_1(Ambiguous{})), Ambiguous>);\r\n    assert(comp_ellint_1(0) == acos(-1.0) / 2);\r\n}\r\n\r\nvoid test_comp_ellint_2() {\r\n    static_assert(is_same_v<decltype(comp_ellint_2(0.0f)), float>);\r\n    static_assert(is_same_v<decltype(comp_ellint_2(false)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_2(static_cast<unsigned short>(0))), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_2(0)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_2(0u)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_2(0l)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_2(0ul)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_2(0ll)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_2(0ull)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_2(0.0)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_2(0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_2f(0)), float>);\r\n    static_assert(is_same_v<decltype(comp_ellint_2l(0)), long double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_2(Ambiguous{})), Ambiguous>);\r\n    assert(isclose(comp_ellint_2(0), acos(-1.0) / 2));\r\n}\r\n\r\nvoid test_comp_ellint_3() {\r\n    static_assert(is_same_v<decltype(comp_ellint_3(0.0f, 0.0f)), float>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3(false, 0.0f)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3(static_cast<unsigned short>(0), 0.0)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3(0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3(0.0f, 0u)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3(0.0, 0l)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3(0.0l, 0ul)), long double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3(0, 0ll)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3(0, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3(0.0, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3(0.0l, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3(0.0f, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3(0.0f, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3(0.0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3f(0, 0)), float>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3l(0, 0)), long double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3(0, 0)), double>);\r\n    static_assert(is_same_v<decltype(comp_ellint_3(Ambiguous{}, Ambiguous{})), Ambiguous>);\r\n    assert(comp_ellint_3(0, 0) == acos(-1.0) / 2);\r\n}\r\n\r\nvoid test_cyl_bessel_i() {\r\n    static_assert(is_same_v<decltype(cyl_bessel_i(0.0f, 0.0f)), float>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_i(false, 0.0f)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_i(static_cast<unsigned short>(0), 0.0)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_i(0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_i(0.0f, 0u)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_i(0.0, 0l)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_i(0.0l, 0ul)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_i(0, 0ll)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_i(0, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_i(0.0, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_i(0.0l, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_i(0.0f, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_i(0.0f, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_i(0.0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_if(0, 0)), float>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_il(0, 0)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_i(0, 0)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_i(Ambiguous{}, Ambiguous{})), Ambiguous>);\r\n    assert(cyl_bessel_i(0, 0) == 1.0);\r\n}\r\n\r\nvoid test_cyl_bessel_j() {\r\n    static_assert(is_same_v<decltype(cyl_bessel_j(0.0f, 0.0f)), float>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_j(false, 0.0f)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_j(static_cast<unsigned short>(0), 0.0)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_j(0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_j(0.0f, 0u)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_j(0.0, 0l)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_j(0.0l, 0ul)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_j(0, 0ll)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_j(0, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_j(0.0, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_j(0.0l, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_j(0.0f, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_j(0.0f, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_j(0.0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_jf(0, 0)), float>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_jl(0, 0)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_j(0, 0)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_j(Ambiguous{}, Ambiguous{})), Ambiguous>);\r\n    assert(cyl_bessel_j(0, 0) == 1.0);\r\n}\r\n\r\nvoid test_cyl_bessel_k() {\r\n    static_assert(is_same_v<decltype(cyl_bessel_k(0.0f, 0.0f)), float>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_k(false, 0.0f)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_k(static_cast<unsigned short>(0), 0.0)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_k(0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_k(0.0f, 0u)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_k(0.0, 0l)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_k(0.0l, 0ul)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_k(0, 0ll)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_k(0, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_k(0.0, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_k(0.0l, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_k(0.0f, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_k(0.0f, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_k(0.0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_kf(0, 0)), float>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_kl(0, 0)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_k(0, 0)), double>);\r\n    static_assert(is_same_v<decltype(cyl_bessel_k(Ambiguous{}, Ambiguous{})), Ambiguous>);\r\n    assert(isclose(cyl_bessel_k(0.5, 1), acos(-1.0) / 2 * (cyl_bessel_i(-0.5, 1) - cyl_bessel_i(0.5, 1)), 15));\r\n}\r\n\r\nvoid test_cyl_neumann() {\r\n    static_assert(is_same_v<decltype(cyl_neumann(0.0f, 0.0f)), float>);\r\n    static_assert(is_same_v<decltype(cyl_neumann(false, 0.0f)), double>);\r\n    static_assert(is_same_v<decltype(cyl_neumann(static_cast<unsigned short>(0), 0.0)), double>);\r\n    static_assert(is_same_v<decltype(cyl_neumann(0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_neumann(0.0f, 0u)), double>);\r\n    static_assert(is_same_v<decltype(cyl_neumann(0.0, 0l)), double>);\r\n    static_assert(is_same_v<decltype(cyl_neumann(0.0l, 0ul)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_neumann(0, 0ll)), double>);\r\n    static_assert(is_same_v<decltype(cyl_neumann(0, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(cyl_neumann(0.0, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(cyl_neumann(0.0l, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_neumann(0.0f, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(cyl_neumann(0.0f, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_neumann(0.0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_neumannf(0, 0)), float>);\r\n    static_assert(is_same_v<decltype(cyl_neumannl(0, 0)), long double>);\r\n    static_assert(is_same_v<decltype(cyl_neumann(0, 0)), double>);\r\n    static_assert(is_same_v<decltype(cyl_neumann(Ambiguous{}, Ambiguous{})), Ambiguous>);\r\n    assert(cyl_neumann(0.5, 1) == -cyl_bessel_j(-0.5, 1));\r\n}\r\n\r\nvoid test_ellint_1() {\r\n    static_assert(is_same_v<decltype(ellint_1(0.0f, 0.0f)), float>);\r\n    static_assert(is_same_v<decltype(ellint_1(false, 0.0f)), double>);\r\n    static_assert(is_same_v<decltype(ellint_1(static_cast<unsigned short>(0), 0.0)), double>);\r\n    static_assert(is_same_v<decltype(ellint_1(0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_1(0.0f, 0u)), double>);\r\n    static_assert(is_same_v<decltype(ellint_1(0.0, 0l)), double>);\r\n    static_assert(is_same_v<decltype(ellint_1(0.0l, 0ul)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_1(0, 0ll)), double>);\r\n    static_assert(is_same_v<decltype(ellint_1(0, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(ellint_1(0.0, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(ellint_1(0.0l, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_1(0.0f, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(ellint_1(0.0f, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_1(0.0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_1f(0, 0)), float>);\r\n    static_assert(is_same_v<decltype(ellint_1l(0, 0)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_1(0, 0)), double>);\r\n    static_assert(is_same_v<decltype(ellint_1(Ambiguous{}, Ambiguous{})), Ambiguous>);\r\n\r\n    const double half_pi = acos(-1.0) / 2.0;\r\n    assert(ellint_1(0, half_pi) == half_pi);\r\n    assert(ellint_1(0, -half_pi) == -half_pi);\r\n    assert(ellint_1(0, 0) == 0);\r\n}\r\n\r\nvoid test_ellint_2() {\r\n    static_assert(is_same_v<decltype(ellint_2(0.0f, 0.0f)), float>);\r\n    static_assert(is_same_v<decltype(ellint_2(false, 0.0f)), double>);\r\n    static_assert(is_same_v<decltype(ellint_2(static_cast<unsigned short>(0), 0.0)), double>);\r\n    static_assert(is_same_v<decltype(ellint_2(0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_2(0.0f, 0u)), double>);\r\n    static_assert(is_same_v<decltype(ellint_2(0.0, 0l)), double>);\r\n    static_assert(is_same_v<decltype(ellint_2(0.0l, 0ul)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_2(0, 0ll)), double>);\r\n    static_assert(is_same_v<decltype(ellint_2(0, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(ellint_2(0.0, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(ellint_2(0.0l, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_2(0.0f, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(ellint_2(0.0f, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_2(0.0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_2f(0, 0)), float>);\r\n    static_assert(is_same_v<decltype(ellint_2l(0, 0)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_2(0, 0)), double>);\r\n    static_assert(is_same_v<decltype(ellint_2(Ambiguous{}, Ambiguous{})), Ambiguous>);\r\n\r\n    const double half_pi = acos(-1.0) / 2.0;\r\n    assert(ellint_2(0, half_pi) == half_pi);\r\n    assert(ellint_2(0, -half_pi) == -half_pi);\r\n    assert(ellint_2(0, 0) == 0.0);\r\n    assert(ellint_2(1, half_pi) == 1.0);\r\n}\r\n\r\nvoid test_ellint_3() {\r\n    static_assert(is_same_v<decltype(ellint_3(false, 0.0f, 0.0f)), double>);\r\n    static_assert(is_same_v<decltype(ellint_3('\\0', 0.0f, 0.0f)), double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0u, 0.0f, 0.0f)), double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0f, 0, 0.0f)), double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0f, 0l, 0.0f)), double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0f, 0.0f, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0f, 0.0f, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0f, 0.0f, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0f, 0.0f, 0.0f)), float>);\r\n\r\n    static_assert(is_same_v<decltype(ellint_3(false, 0.0, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(ellint_3('\\0', 0.0, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0u, 0.0, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0, 0, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0, 0l, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0, 0.0, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0, 0.0, 0.0f)), double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0, 0.0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0, 0.0, 0.0)), double>);\r\n\r\n    static_assert(is_same_v<decltype(ellint_3(false, 0.0l, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_3('\\0', 0.0l, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0u, 0.0l, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0l, 0, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0l, 0l, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0l, 0.0l, 0ull)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0l, 0.0l, 0.0f)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0, 0.0l, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_3(0.0l, 0.0l, 0.0l)), long double>);\r\n\r\n    static_assert(is_same_v<decltype(ellint_3f(0, 0, 0)), float>);\r\n    static_assert(is_same_v<decltype(ellint_3l(0, 0, 0)), long double>);\r\n    static_assert(is_same_v<decltype(ellint_3(Ambiguous{}, Ambiguous{}, Ambiguous{})), Ambiguous>);\r\n\r\n    const double half_pi = acos(-1.0) / 2.0;\r\n    assert(ellint_3(0, 0, half_pi) == half_pi);\r\n}\r\n\r\nvoid test_expint() {\r\n    static_assert(is_same_v<decltype(expint(0.0f)), float>);\r\n    static_assert(is_same_v<decltype(expint(false)), double>);\r\n    static_assert(is_same_v<decltype(expint(static_cast<unsigned short>(0))), double>);\r\n    static_assert(is_same_v<decltype(expint(0)), double>);\r\n    static_assert(is_same_v<decltype(expint(0u)), double>);\r\n    static_assert(is_same_v<decltype(expint(0l)), double>);\r\n    static_assert(is_same_v<decltype(expint(0ul)), double>);\r\n    static_assert(is_same_v<decltype(expint(0ll)), double>);\r\n    static_assert(is_same_v<decltype(expint(0ull)), double>);\r\n    static_assert(is_same_v<decltype(expint(0.0)), double>);\r\n    static_assert(is_same_v<decltype(expint(0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(expintf(0)), float>);\r\n    static_assert(is_same_v<decltype(expintl(0)), long double>);\r\n    static_assert(is_same_v<decltype(expint(Ambiguous{})), Ambiguous>);\r\n    assert(expint(0) == -numeric_limits<double>::infinity());\r\n}\r\n\r\nvoid test_hermite() {\r\n    static_assert(is_same_v<decltype(hermite(0u, 0.0f)), float>);\r\n    static_assert(is_same_v<decltype(hermite(0u, false)), double>);\r\n    static_assert(is_same_v<decltype(hermite(0u, static_cast<unsigned short>(0))), double>);\r\n    static_assert(is_same_v<decltype(hermite(0u, 0)), double>);\r\n    static_assert(is_same_v<decltype(hermite(0u, 0u)), double>);\r\n    static_assert(is_same_v<decltype(hermite(0u, 0l)), double>);\r\n    static_assert(is_same_v<decltype(hermite(0u, 0ul)), double>);\r\n    static_assert(is_same_v<decltype(hermite(0u, 0ll)), double>);\r\n    static_assert(is_same_v<decltype(hermite(0u, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(hermite(0u, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(hermite(0u, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(hermitef(0u, 0)), float>);\r\n    static_assert(is_same_v<decltype(hermitel(0u, 0)), long double>);\r\n    static_assert(is_same_v<decltype(hermite(0u, Ambiguous{})), Ambiguous>);\r\n    assert(hermite(2, 3) == 34.0);\r\n}\r\n\r\nvoid test_laguerre() {\r\n    static_assert(is_same_v<decltype(laguerre(0u, 0.0f)), float>);\r\n    static_assert(is_same_v<decltype(laguerre(0u, false)), double>);\r\n    static_assert(is_same_v<decltype(laguerre(0u, static_cast<unsigned short>(0))), double>);\r\n    static_assert(is_same_v<decltype(laguerre(0u, 0)), double>);\r\n    static_assert(is_same_v<decltype(laguerre(0u, 0u)), double>);\r\n    static_assert(is_same_v<decltype(laguerre(0u, 0l)), double>);\r\n    static_assert(is_same_v<decltype(laguerre(0u, 0ul)), double>);\r\n    static_assert(is_same_v<decltype(laguerre(0u, 0ll)), double>);\r\n    static_assert(is_same_v<decltype(laguerre(0u, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(laguerre(0u, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(laguerre(0u, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(laguerref(0u, 0)), float>);\r\n    static_assert(is_same_v<decltype(laguerrel(0u, 0)), long double>);\r\n    static_assert(is_same_v<decltype(laguerre(0u, Ambiguous{})), Ambiguous>);\r\n    assert(laguerre(2, 3) == -0.5);\r\n}\r\n\r\nvoid test_legendre() {\r\n    static_assert(is_same_v<decltype(legendre(0u, 0.0f)), float>);\r\n    static_assert(is_same_v<decltype(legendre(0u, false)), double>);\r\n    static_assert(is_same_v<decltype(legendre(0u, static_cast<unsigned short>(0))), double>);\r\n    static_assert(is_same_v<decltype(legendre(0u, 0)), double>);\r\n    static_assert(is_same_v<decltype(legendre(0u, 0u)), double>);\r\n    static_assert(is_same_v<decltype(legendre(0u, 0l)), double>);\r\n    static_assert(is_same_v<decltype(legendre(0u, 0ul)), double>);\r\n    static_assert(is_same_v<decltype(legendre(0u, 0ll)), double>);\r\n    static_assert(is_same_v<decltype(legendre(0u, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(legendre(0u, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(legendre(0u, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(legendref(0u, 0)), float>);\r\n    static_assert(is_same_v<decltype(legendrel(0u, 0)), long double>);\r\n    static_assert(is_same_v<decltype(legendre(0u, Ambiguous{})), Ambiguous>);\r\n    assert(legendre(2, -1) == 1.0);\r\n}\r\n\r\nvoid test_riemann_zeta() {\r\n    static_assert(is_same_v<decltype(riemann_zeta(0.0f)), float>);\r\n    static_assert(is_same_v<decltype(riemann_zeta(false)), double>);\r\n    static_assert(is_same_v<decltype(riemann_zeta(static_cast<unsigned short>(0))), double>);\r\n    static_assert(is_same_v<decltype(riemann_zeta(0)), double>);\r\n    static_assert(is_same_v<decltype(riemann_zeta(0u)), double>);\r\n    static_assert(is_same_v<decltype(riemann_zeta(0l)), double>);\r\n    static_assert(is_same_v<decltype(riemann_zeta(0ul)), double>);\r\n    static_assert(is_same_v<decltype(riemann_zeta(0ll)), double>);\r\n    static_assert(is_same_v<decltype(riemann_zeta(0ull)), double>);\r\n    static_assert(is_same_v<decltype(riemann_zeta(0.0)), double>);\r\n    static_assert(is_same_v<decltype(riemann_zeta(0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(riemann_zetaf(0)), float>);\r\n    static_assert(is_same_v<decltype(riemann_zetal(0)), long double>);\r\n    static_assert(is_same_v<decltype(riemann_zeta(Ambiguous{})), Ambiguous>);\r\n    assert(riemann_zeta(0) == -0.5);\r\n}\r\n\r\nvoid test_sph_bessel() {\r\n    static_assert(is_same_v<decltype(sph_bessel(0u, 0.0f)), float>);\r\n    static_assert(is_same_v<decltype(sph_bessel(0u, false)), double>);\r\n    static_assert(is_same_v<decltype(sph_bessel(0u, static_cast<unsigned short>(0))), double>);\r\n    static_assert(is_same_v<decltype(sph_bessel(0u, 0)), double>);\r\n    static_assert(is_same_v<decltype(sph_bessel(0u, 0u)), double>);\r\n    static_assert(is_same_v<decltype(sph_bessel(0u, 0l)), double>);\r\n    static_assert(is_same_v<decltype(sph_bessel(0u, 0ul)), double>);\r\n    static_assert(is_same_v<decltype(sph_bessel(0u, 0ll)), double>);\r\n    static_assert(is_same_v<decltype(sph_bessel(0u, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(sph_bessel(0u, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(sph_bessel(0u, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(sph_besself(0u, 0)), float>);\r\n    static_assert(is_same_v<decltype(sph_bessell(0u, 0)), long double>);\r\n    static_assert(is_same_v<decltype(sph_bessel(0u, Ambiguous{})), Ambiguous>);\r\n    assert(isclose(sph_bessel(1, 2), sin(2) / (2.0 * 2) - cos(2) / 2, 2));\r\n}\r\n\r\nvoid test_sph_legendre() {\r\n    static_assert(is_same_v<decltype(sph_legendre(0u, 0u, 0.0f)), float>);\r\n    static_assert(is_same_v<decltype(sph_legendre(0u, 0u, false)), double>);\r\n    static_assert(is_same_v<decltype(sph_legendre(0u, 0u, static_cast<unsigned short>(0))), double>);\r\n    static_assert(is_same_v<decltype(sph_legendre(0u, 0u, 0)), double>);\r\n    static_assert(is_same_v<decltype(sph_legendre(0u, 0u, 0u)), double>);\r\n    static_assert(is_same_v<decltype(sph_legendre(0u, 0u, 0l)), double>);\r\n    static_assert(is_same_v<decltype(sph_legendre(0u, 0u, 0ul)), double>);\r\n    static_assert(is_same_v<decltype(sph_legendre(0u, 0u, 0ll)), double>);\r\n    static_assert(is_same_v<decltype(sph_legendre(0u, 0u, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(sph_legendre(0u, 0u, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(sph_legendre(0u, 0u, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(sph_legendref(0u, 0u, 0)), float>);\r\n    static_assert(is_same_v<decltype(sph_legendrel(0u, 0u, 0)), long double>);\r\n    static_assert(is_same_v<decltype(sph_legendre(0u, 0u, Ambiguous{})), Ambiguous>);\r\n\r\n    const double pi = acos(-1.0);\r\n    assert(isclose(sph_legendre(3, 0, 1), 0.25 * sqrt(7 / pi) * (5 * pow(cos(1), 3) - 3 * cos(1))));\r\n}\r\n\r\nvoid test_sph_neumann() {\r\n    static_assert(is_same_v<decltype(sph_neumann(0u, 0.0f)), float>);\r\n    static_assert(is_same_v<decltype(sph_neumann(0u, false)), double>);\r\n    static_assert(is_same_v<decltype(sph_neumann(0u, static_cast<unsigned short>(0))), double>);\r\n    static_assert(is_same_v<decltype(sph_neumann(0u, 0)), double>);\r\n    static_assert(is_same_v<decltype(sph_neumann(0u, 0u)), double>);\r\n    static_assert(is_same_v<decltype(sph_neumann(0u, 0l)), double>);\r\n    static_assert(is_same_v<decltype(sph_neumann(0u, 0ul)), double>);\r\n    static_assert(is_same_v<decltype(sph_neumann(0u, 0ll)), double>);\r\n    static_assert(is_same_v<decltype(sph_neumann(0u, 0ull)), double>);\r\n    static_assert(is_same_v<decltype(sph_neumann(0u, 0.0)), double>);\r\n    static_assert(is_same_v<decltype(sph_neumann(0u, 0.0l)), long double>);\r\n    static_assert(is_same_v<decltype(sph_neumannf(0u, 0)), float>);\r\n    static_assert(is_same_v<decltype(sph_neumannl(0u, 0)), long double>);\r\n    static_assert(is_same_v<decltype(sph_neumann(0u, Ambiguous{})), Ambiguous>);\r\n    assert(isclose(sph_neumann(1, 1), -cos(1) - sin(1), 2));\r\n}\r\n\r\nint main() {\r\n    test_assoc_laguerre();\r\n    test_assoc_legendre();\r\n    test_beta();\r\n    test_comp_ellint_1();\r\n    test_comp_ellint_2();\r\n    test_comp_ellint_3();\r\n    test_cyl_bessel_i();\r\n    test_cyl_bessel_j();\r\n    test_cyl_bessel_k();\r\n    test_cyl_neumann();\r\n    test_ellint_1();\r\n    test_ellint_2();\r\n    test_ellint_3();\r\n    test_expint();\r\n    test_hermite();\r\n    test_laguerre();\r\n    test_legendre();\r\n    test_riemann_zeta();\r\n    test_sph_bessel();\r\n    test_sph_legendre();\r\n    test_sph_neumann();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/LWG3422_seed_seq_ctors/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG3422_seed_seq_ctors/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <random>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nstatic_assert(is_nothrow_default_constructible_v<seed_seq>, \"\");\r\nstatic_assert(!is_constructible_v<seed_seq, initializer_list<vector<int>::iterator>>, \"\");\r\nstatic_assert(is_constructible_v<seed_seq, initializer_list<int>>, \"\");\r\n"
  },
  {
    "path": "tests/std/tests/LWG3480_directory_iterator_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG3480_directory_iterator_range/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <filesystem>\r\n#include <ranges>\r\n\r\nusing namespace std::filesystem;\r\nusing namespace std::ranges;\r\n\r\nbool is_tiff(const directory_entry& entry) {\r\n    return entry.is_regular_file() && entry.path().extension().native() == L\"tiff\";\r\n}\r\n\r\nvoid test(directory_iterator dir) {\r\n    [[maybe_unused]] auto tif_files     = dir | views::filter(is_tiff);\r\n    [[maybe_unused]] auto first_5_files = dir | views::take(5);\r\n    static_assert(borrowed_range<directory_iterator>);\r\n}\r\n\r\nvoid test_recursive(recursive_directory_iterator dir) {\r\n    [[maybe_unused]] auto tif_files     = dir | views::filter(is_tiff);\r\n    [[maybe_unused]] auto first_5_files = dir | views::take(5);\r\n    static_assert(borrowed_range<recursive_directory_iterator>);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/LWG3528_make_from_tuple_impl/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG3528_make_from_tuple_impl/test.compile.pass.cpp",
    "content": "//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//===----------------------------------------------------------------------===//\r\n\r\n// derived from libc++'s test files:\r\n// * std/utilities/tuple/tuple.tuple/tuple.apply/make_from_tuple.pass.cpp\r\n\r\n#include <array>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nstruct A {\r\n    int a;\r\n};\r\n\r\nenum class D {\r\n    one,\r\n    two,\r\n};\r\n\r\ntemplate <class T, class Tuple, class = void>\r\nconstexpr bool has_make_from_tuple = false;\r\n\r\ntemplate <class T, class Tuple>\r\nconstexpr bool has_make_from_tuple<T, Tuple, std::void_t<decltype(std::make_from_tuple<T>(std::declval<Tuple>()))>> =\r\n    true;\r\n\r\n// Test std::make_from_tuple.\r\n\r\n// reinterpret_cast, std::tuple<T>\r\nstatic_assert(!has_make_from_tuple<int*, std::tuple<A*>>);\r\nstatic_assert(has_make_from_tuple<A*, std::tuple<A*>>);\r\n\r\n// reinterpret_cast, std::array<T, 1>\r\nstatic_assert(!has_make_from_tuple<int*, std::array<A*, 1>>);\r\nstatic_assert(has_make_from_tuple<A*, std::array<A*, 1>>);\r\n\r\n// const_cast, std::tuple<T>\r\nstatic_assert(!has_make_from_tuple<char*, std::tuple<const char*>>);\r\nstatic_assert(!has_make_from_tuple<volatile char*, std::tuple<const volatile char*>>);\r\nstatic_assert(has_make_from_tuple<volatile char*, std::tuple<volatile char*>>);\r\nstatic_assert(has_make_from_tuple<char*, std::tuple<char*>>);\r\nstatic_assert(has_make_from_tuple<const char*, std::tuple<char*>>);\r\nstatic_assert(has_make_from_tuple<const volatile char*, std::tuple<volatile char*>>);\r\n\r\n// const_cast, std::array<T, 1>\r\nstatic_assert(!has_make_from_tuple<char*, std::array<const char*, 1>>);\r\nstatic_assert(!has_make_from_tuple<volatile char*, std::array<const volatile char*, 1>>);\r\nstatic_assert(has_make_from_tuple<volatile char*, std::array<volatile char*, 1>>);\r\nstatic_assert(has_make_from_tuple<char*, std::array<char*, 1>>);\r\nstatic_assert(has_make_from_tuple<const char*, std::array<char*, 1>>);\r\nstatic_assert(has_make_from_tuple<const volatile char*, std::array<volatile char*, 1>>);\r\n\r\n// static_cast, std::tuple<T>\r\nstatic_assert(!has_make_from_tuple<int, std::tuple<D>>);\r\nstatic_assert(!has_make_from_tuple<D, std::tuple<int>>);\r\nstatic_assert(has_make_from_tuple<long, std::tuple<int>>);\r\nstatic_assert(has_make_from_tuple<double, std::tuple<float>>);\r\nstatic_assert(has_make_from_tuple<float, std::tuple<double>>);\r\n\r\n// static_cast, std::array<T, 1>\r\nstatic_assert(!has_make_from_tuple<int, std::array<D, 1>>);\r\nstatic_assert(!has_make_from_tuple<D, std::array<int, 1>>);\r\nstatic_assert(has_make_from_tuple<long, std::array<int, 1>>);\r\nstatic_assert(has_make_from_tuple<double, std::array<float, 1>>);\r\nstatic_assert(has_make_from_tuple<float, std::array<double, 1>>);\r\n"
  },
  {
    "path": "tests/std/tests/LWG3545_pointer_traits_sfinae/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG3545_pointer_traits_sfinae/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstddef>\r\n#include <memory>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__);\r\n\r\ntemplate <class, class = void>\r\nconstexpr bool has_memtype_element_type = false;\r\n\r\ntemplate <class T>\r\nconstexpr bool has_memtype_element_type<T, void_t<typename T::element_type>> = true;\r\n\r\ntemplate <class, class = void>\r\nconstexpr bool has_memtype_pointer = false;\r\n\r\ntemplate <class T>\r\nconstexpr bool has_memtype_pointer<T, void_t<typename T::pointer>> = true;\r\n\r\ntemplate <class, class = void>\r\nconstexpr bool has_memtype_difference_type = false;\r\n\r\ntemplate <class T>\r\nconstexpr bool has_memtype_difference_type<T, void_t<typename T::difference_type>> = true;\r\n\r\nSTATIC_ASSERT(!has_memtype_element_type<pointer_traits<int>>);\r\nSTATIC_ASSERT(!has_memtype_pointer<pointer_traits<int>>);\r\nSTATIC_ASSERT(!has_memtype_difference_type<pointer_traits<int>>);\r\n\r\nstruct LackElementType {\r\n    using pointer         = int;\r\n    using difference_type = int;\r\n    template <class>\r\n    using rebind = int;\r\n};\r\n\r\nSTATIC_ASSERT(!has_memtype_element_type<pointer_traits<LackElementType>>);\r\nSTATIC_ASSERT(!has_memtype_pointer<pointer_traits<LackElementType>>);\r\nSTATIC_ASSERT(!has_memtype_difference_type<pointer_traits<LackElementType>>);\r\n\r\nstruct OnlyElementType {\r\n    using element_type = void;\r\n};\r\n\r\nSTATIC_ASSERT(has_memtype_element_type<pointer_traits<OnlyElementType>>);\r\nSTATIC_ASSERT(has_memtype_pointer<pointer_traits<OnlyElementType>>);\r\nSTATIC_ASSERT(has_memtype_difference_type<pointer_traits<OnlyElementType>>);\r\n\r\nSTATIC_ASSERT(is_same_v<pointer_traits<OnlyElementType>::element_type, void>);\r\nSTATIC_ASSERT(is_same_v<pointer_traits<OnlyElementType>::pointer, OnlyElementType>);\r\nSTATIC_ASSERT(is_same_v<pointer_traits<OnlyElementType>::difference_type, ptrdiff_t>);\r\n\r\ntemplate <class I>\r\nstruct Templated {\r\n    using difference_type = I;\r\n};\r\n\r\nSTATIC_ASSERT(has_memtype_element_type<pointer_traits<Templated<char>>>);\r\nSTATIC_ASSERT(has_memtype_pointer<pointer_traits<Templated<char>>>);\r\nSTATIC_ASSERT(has_memtype_difference_type<pointer_traits<Templated<char>>>);\r\n\r\nSTATIC_ASSERT(is_same_v<pointer_traits<Templated<char>>::element_type, char>);\r\nSTATIC_ASSERT(is_same_v<pointer_traits<Templated<char>>::pointer, Templated<char>>);\r\nSTATIC_ASSERT(is_same_v<pointer_traits<Templated<char>>::difference_type, char>);\r\n\r\ntemplate <class I, size_t N = sizeof(I)>\r\nstruct BadTemplated {\r\n    using difference_type = I;\r\n};\r\n\r\nSTATIC_ASSERT(!has_memtype_element_type<pointer_traits<BadTemplated<int>>>);\r\nSTATIC_ASSERT(!has_memtype_pointer<pointer_traits<BadTemplated<int>>>);\r\nSTATIC_ASSERT(!has_memtype_difference_type<pointer_traits<BadTemplated<int>>>);\r\n\r\ntemplate <class T>\r\nstruct CheckPriority {\r\n    using element_type = T[42];\r\n};\r\n\r\nSTATIC_ASSERT(has_memtype_element_type<pointer_traits<CheckPriority<char>>>);\r\nSTATIC_ASSERT(has_memtype_pointer<pointer_traits<CheckPriority<char>>>);\r\nSTATIC_ASSERT(has_memtype_difference_type<pointer_traits<CheckPriority<char>>>);\r\n\r\nSTATIC_ASSERT(is_same_v<pointer_traits<CheckPriority<char>>::element_type, char[42]>);\r\nSTATIC_ASSERT(is_same_v<pointer_traits<CheckPriority<char>>::pointer, CheckPriority<char>>);\r\nSTATIC_ASSERT(is_same_v<pointer_traits<CheckPriority<char>>::difference_type, ptrdiff_t>);\r\n"
  },
  {
    "path": "tests/std/tests/LWG3561_discard_block_engine_counter/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG3561_discard_block_engine_counter/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <climits>\r\n#include <cstddef>\r\n#include <iosfwd>\r\n#include <random>\r\n#include <sstream>\r\n#include <string>\r\n#include <type_traits>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nusing namespace std;\r\n\r\nconstexpr size_t large_block_size = UINT_MAX - 16;\r\nconstexpr size_t large_used_block = UINT_MAX - 20;\r\n\r\nstruct trivial_engine {\r\n    using result_type = size_t;\r\n\r\n    static constexpr size_t min() {\r\n        return 0;\r\n    }\r\n    static constexpr size_t max() {\r\n        return SIZE_MAX;\r\n    }\r\n\r\n    size_t operator()() noexcept {\r\n        return counter_++;\r\n    }\r\n\r\n#if _HAS_CXX20\r\n    friend bool operator==(const trivial_engine&, const trivial_engine&) = default;\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    friend bool operator==(const trivial_engine& lhs, const trivial_engine& rhs) noexcept {\r\n        return lhs.counter_ == rhs.counter_;\r\n    }\r\n    friend bool operator!=(const trivial_engine& lhs, const trivial_engine& rhs) noexcept {\r\n        return lhs.counter_ != rhs.counter_;\r\n    }\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n    template <class CharT, class Traits>\r\n    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is, trivial_engine& eng) {\r\n        return is >> eng.counter_;\r\n    }\r\n\r\n    template <class CharT, class Traits>\r\n    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os, const trivial_engine& eng) {\r\n        return os << eng.counter_;\r\n    }\r\n\r\n    size_t counter_ = 0;\r\n};\r\n\r\nusing trivial_discard_block = discard_block_engine<trivial_engine, large_block_size, large_used_block>;\r\n\r\nvoid test_lwg_3561() {\r\n    trivial_discard_block e{};\r\n    e.discard(168);\r\n    auto rep = (ostringstream{} << e).str();\r\n\r\n    assert(e == e);\r\n    assert(!(e != e));\r\n    assert(rep == \"168 168\"); // relies on the implementation-specific details of operator<<\r\n}\r\n\r\n// Also tests the type correctness of discard_block_engine::block_size/used_block\r\n\r\nSTATIC_ASSERT(is_same_v<const size_t, decltype(trivial_discard_block::block_size)>);\r\nSTATIC_ASSERT(is_same_v<const size_t, decltype(trivial_discard_block::used_block)>);\r\n\r\nSTATIC_ASSERT(is_same_v<const size_t, decltype(ranlux24::block_size)>);\r\nSTATIC_ASSERT(is_same_v<const size_t, decltype(ranlux24::used_block)>);\r\n\r\nSTATIC_ASSERT(is_same_v<const size_t, decltype(ranlux48::block_size)>);\r\nSTATIC_ASSERT(is_same_v<const size_t, decltype(ranlux48::used_block)>);\r\n\r\nint main() {\r\n    test_lwg_3561();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/LWG3610_iota_view_size_and_integer_class/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG3610_iota_view_size_and_integer_class/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <ranges>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class R>\r\nconcept CanSize = requires(R& r) { ranges::size(r); };\r\n\r\n// Validate standard signed integer types\r\nstatic_assert(CanSize<ranges::iota_view<signed char, _Signed128>>);\r\nstatic_assert(CanSize<ranges::iota_view<signed char, _Unsigned128>>);\r\nstatic_assert(CanSize<ranges::iota_view<short, _Signed128>>);\r\nstatic_assert(CanSize<ranges::iota_view<short, _Unsigned128>>);\r\nstatic_assert(CanSize<ranges::iota_view<int, _Signed128>>);\r\nstatic_assert(CanSize<ranges::iota_view<int, _Unsigned128>>);\r\nstatic_assert(CanSize<ranges::iota_view<long, _Signed128>>);\r\nstatic_assert(CanSize<ranges::iota_view<long, _Unsigned128>>);\r\nstatic_assert(CanSize<ranges::iota_view<long long, _Signed128>>);\r\nstatic_assert(CanSize<ranges::iota_view<long long, _Unsigned128>>);\r\n\r\n// Validate standard unsigned integer types\r\nstatic_assert(CanSize<ranges::iota_view<unsigned char, _Signed128>>);\r\nstatic_assert(CanSize<ranges::iota_view<unsigned char, _Unsigned128>>);\r\nstatic_assert(CanSize<ranges::iota_view<unsigned short, _Signed128>>);\r\nstatic_assert(CanSize<ranges::iota_view<unsigned short, _Unsigned128>>);\r\nstatic_assert(CanSize<ranges::iota_view<unsigned int, _Signed128>>);\r\nstatic_assert(CanSize<ranges::iota_view<unsigned int, _Unsigned128>>);\r\nstatic_assert(CanSize<ranges::iota_view<unsigned long, _Signed128>>);\r\nstatic_assert(CanSize<ranges::iota_view<unsigned long, _Unsigned128>>);\r\nstatic_assert(CanSize<ranges::iota_view<unsigned long long, _Signed128>>);\r\nstatic_assert(CanSize<ranges::iota_view<unsigned long long, _Unsigned128>>);\r\n\r\n// Validate other integer types (other than bool)\r\nstatic_assert(CanSize<ranges::iota_view<char, _Signed128>>);\r\nstatic_assert(CanSize<ranges::iota_view<char, _Unsigned128>>);\r\nstatic_assert(CanSize<ranges::iota_view<wchar_t, _Signed128>>);\r\nstatic_assert(CanSize<ranges::iota_view<wchar_t, _Unsigned128>>);\r\n#ifdef __cpp_char8_t\r\nstatic_assert(CanSize<ranges::iota_view<char8_t, _Signed128>>);\r\nstatic_assert(CanSize<ranges::iota_view<char8_t, _Unsigned128>>);\r\n#endif // __cpp_char8_t\r\nstatic_assert(CanSize<ranges::iota_view<char16_t, _Signed128>>);\r\nstatic_assert(CanSize<ranges::iota_view<char16_t, _Unsigned128>>);\r\nstatic_assert(CanSize<ranges::iota_view<char32_t, _Signed128>>);\r\nstatic_assert(CanSize<ranges::iota_view<char32_t, _Unsigned128>>);\r\n"
  },
  {
    "path": "tests/std/tests/LWG4015_optional_adl_proof_operations/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG4015_optional_adl_proof_operations/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// LWG-4015: \"LWG-3973 broke const overloads of std::optional monadic operations\"\r\n// This test verifies that optional's operations\r\n// don't use unqualified operator* which would be vulnerable to ADL hijacking.\r\n\r\n#include <cstddef>\r\n#include <functional>\r\n#include <optional>\r\n#include <utility>\r\n\r\nnamespace bad {\r\n    struct S {\r\n        int val;\r\n        operator int() const {\r\n            return val;\r\n        }\r\n    };\r\n\r\n    void operator*(std::optional<S>&)        = delete;\r\n    void operator*(std::optional<S>&&)       = delete;\r\n    void operator*(const std::optional<S>&)  = delete;\r\n    void operator*(const std::optional<S>&&) = delete;\r\n} // namespace bad\r\n\r\nnamespace std {\r\n    template <>\r\n    struct hash<bad::S> {\r\n        [[nodiscard]] std::size_t operator()(const bad::S& obj) const noexcept {\r\n            return std::hash<int>{}(obj);\r\n        }\r\n    };\r\n} // namespace std\r\n\r\nvoid test_converting_construction() {\r\n    const std::optional<bad::S> src_copy{bad::S{42}};\r\n    std::optional<int> d1{src_copy};\r\n    (void) d1;\r\n\r\n    std::optional<bad::S> src_move{bad::S{42}};\r\n    std::optional<int> d2{std::move(src_move)};\r\n    (void) d2;\r\n}\r\n\r\nvoid test_converting_assignment() {\r\n    std::optional<int> d;\r\n\r\n    const std::optional<bad::S> src_copy{bad::S{42}};\r\n    d = src_copy;\r\n\r\n    std::optional<bad::S> src_move{bad::S{42}};\r\n    d = std::move(src_move);\r\n}\r\n\r\nvoid test_swap() {\r\n    std::optional<bad::S> left{bad::S{17}};\r\n    std::optional<bad::S> right{bad::S{29}};\r\n    left.swap(right);\r\n}\r\n\r\nvoid test_compare_optional_with_optional() {\r\n    const std::optional<bad::S> left{bad::S{17}};\r\n    const std::optional<bad::S> right{bad::S{29}};\r\n\r\n    (void) (left == right);\r\n    (void) (left != right);\r\n    (void) (left < right);\r\n    (void) (left > right);\r\n    (void) (left <= right);\r\n    (void) (left >= right);\r\n\r\n#if _HAS_CXX20\r\n    (void) (left <=> right);\r\n#endif\r\n}\r\n\r\nvoid test_compare_optional_with_value() {\r\n    const std::optional<bad::S> left{bad::S{17}};\r\n\r\n    (void) (left == 29);\r\n    (void) (left != 29);\r\n    (void) (left < 29);\r\n    (void) (left > 29);\r\n    (void) (left <= 29);\r\n    (void) (left >= 29);\r\n\r\n#if _HAS_CXX20\r\n    (void) (left <=> 29);\r\n#endif\r\n}\r\n\r\nvoid test_hash() {\r\n    const std::optional<bad::S> opt{bad::S{1729}};\r\n    std::hash<std::optional<bad::S>> hasher;\r\n    (void) hasher(opt);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/LWG4084_iostream_uppercase_inf_nan/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG4084_iostream_uppercase_inf_nan/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <limits>\r\n#include <sstream>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class CharT, size_t N, enable_if_t<is_same_v<CharT, char>, int> = 0>\r\nconstexpr const auto& choose_literal(const char (&s)[N], const wchar_t (&)[N]) noexcept {\r\n    return s;\r\n}\r\ntemplate <class CharT, size_t N, enable_if_t<is_same_v<CharT, wchar_t>, int> = 0>\r\nconstexpr const auto& choose_literal(const char (&)[N], const wchar_t (&ws)[N]) noexcept {\r\n    return ws;\r\n}\r\n\r\n#define STATICALLY_WIDEN(CharT, S) ::choose_literal<CharT>(S, L##S)\r\n\r\ntemplate <class CharT, class F>\r\nvoid test() {\r\n    // LWG-4084 \"std::fixed ignores std::uppercase\"\r\n    {\r\n        auto s = (basic_ostringstream<CharT>{} << fixed << uppercase << numeric_limits<F>::infinity()).str();\r\n        assert(s == STATICALLY_WIDEN(CharT, \"INF\"));\r\n    }\r\n    {\r\n        auto s = (basic_ostringstream<CharT>{} << fixed << uppercase << numeric_limits<F>::quiet_NaN()).str();\r\n        assert(s == STATICALLY_WIDEN(CharT, \"NAN\"));\r\n    }\r\n    // also test other combinations\r\n    {\r\n        auto s = (basic_ostringstream<CharT>{} << fixed << numeric_limits<F>::infinity()).str();\r\n        assert(s == STATICALLY_WIDEN(CharT, \"inf\"));\r\n    }\r\n    {\r\n        auto s = (basic_ostringstream<CharT>{} << fixed << numeric_limits<F>::quiet_NaN()).str();\r\n        assert(s == STATICALLY_WIDEN(CharT, \"nan\"));\r\n    }\r\n\r\n    {\r\n        auto s = (basic_ostringstream<CharT>{} << uppercase << numeric_limits<F>::infinity()).str();\r\n        assert(s == STATICALLY_WIDEN(CharT, \"INF\"));\r\n    }\r\n    {\r\n        auto s = (basic_ostringstream<CharT>{} << uppercase << numeric_limits<F>::quiet_NaN()).str();\r\n        assert(s == STATICALLY_WIDEN(CharT, \"NAN\"));\r\n    }\r\n    {\r\n        auto s = (basic_ostringstream<CharT>{} << numeric_limits<F>::infinity()).str();\r\n        assert(s == STATICALLY_WIDEN(CharT, \"inf\"));\r\n    }\r\n    {\r\n        auto s = (basic_ostringstream<CharT>{} << numeric_limits<F>::quiet_NaN()).str();\r\n        assert(s == STATICALLY_WIDEN(CharT, \"nan\"));\r\n    }\r\n\r\n    {\r\n        auto s = (basic_ostringstream<CharT>{} << scientific << uppercase << numeric_limits<F>::infinity()).str();\r\n        assert(s == STATICALLY_WIDEN(CharT, \"INF\"));\r\n    }\r\n    {\r\n        auto s = (basic_ostringstream<CharT>{} << scientific << uppercase << numeric_limits<F>::quiet_NaN()).str();\r\n        assert(s == STATICALLY_WIDEN(CharT, \"NAN\"));\r\n    }\r\n    {\r\n        auto s = (basic_ostringstream<CharT>{} << scientific << numeric_limits<F>::infinity()).str();\r\n        assert(s == STATICALLY_WIDEN(CharT, \"inf\"));\r\n    }\r\n    {\r\n        auto s = (basic_ostringstream<CharT>{} << scientific << numeric_limits<F>::quiet_NaN()).str();\r\n        assert(s == STATICALLY_WIDEN(CharT, \"nan\"));\r\n    }\r\n\r\n    {\r\n        auto s = (basic_ostringstream<CharT>{} << hexfloat << uppercase << numeric_limits<F>::infinity()).str();\r\n        assert(s == STATICALLY_WIDEN(CharT, \"INF\"));\r\n    }\r\n    {\r\n        auto s = (basic_ostringstream<CharT>{} << hexfloat << uppercase << numeric_limits<F>::quiet_NaN()).str();\r\n        assert(s == STATICALLY_WIDEN(CharT, \"NAN\"));\r\n    }\r\n    {\r\n        auto s = (basic_ostringstream<CharT>{} << hexfloat << numeric_limits<F>::infinity()).str();\r\n        assert(s == STATICALLY_WIDEN(CharT, \"inf\"));\r\n    }\r\n    {\r\n        auto s = (basic_ostringstream<CharT>{} << hexfloat << numeric_limits<F>::quiet_NaN()).str();\r\n        assert(s == STATICALLY_WIDEN(CharT, \"nan\"));\r\n    }\r\n}\r\n\r\nint main() {\r\n    test<char, float>();\r\n    test<char, double>();\r\n    test<char, long double>();\r\n\r\n    test<wchar_t, float>();\r\n    test<wchar_t, double>();\r\n    test<wchar_t, long double>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/LWG4105_ranges_ends_with_and_integer_class/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG4105_ranges_ends_with_and_integer_class/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <functional>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nconcept testable_range = ranges::input_range<T> && (ranges::forward_range<T> || ranges::sized_range<T>);\r\n\r\ntemplate <class T>\r\nconcept testable_sentinel =\r\n    ranges::input_range<T>\r\n    && (ranges::forward_range<T> || sized_sentinel_for<ranges::sentinel_t<T>, ranges::iterator_t<T>>);\r\n\r\nstruct instantiator {\r\n    static constexpr pair<int, int> haystack[]       = {{0, 42}, {1, 42}, {2, 42}, {4, 42}};\r\n    static constexpr pair<int, int> short_haystack[] = {{4, 42}};\r\n    static constexpr pair<long, long> long_needle[]  = {{13, 1}, {13, 2}, {13, 4}};\r\n    static constexpr pair<long, long> short_needle[] = {{13, 2}, {13, 4}};\r\n    static constexpr pair<long, long> wrong_needle[] = {{13, 2}, {13, 3}};\r\n\r\n    template <std::_Signed_integer_like Diff1, testable_range In1, std::_Signed_integer_like Diff2, testable_range In2>\r\n    static constexpr void test_range_rediff() {\r\n        using ranges::ends_with, ranges::equal_to;\r\n\r\n        {\r\n            In1 r1{haystack};\r\n            In2 r2{long_needle};\r\n            const same_as<bool> auto match = ends_with(test::make_redifference_subrange<Diff1>(r1),\r\n                test::make_redifference_subrange<Diff2>(r2), equal_to{}, get_first, get_second);\r\n            assert(match);\r\n        }\r\n        {\r\n            In1 r1{haystack};\r\n            In2 r2{short_needle};\r\n            const same_as<bool> auto match = ends_with(test::make_redifference_subrange<Diff1>(r1),\r\n                test::make_redifference_subrange<Diff2>(r2), equal_to{}, get_first, get_second);\r\n            assert(match);\r\n        }\r\n        {\r\n            In1 r1{haystack};\r\n            In2 r2{wrong_needle};\r\n            const same_as<bool> auto match = ends_with(test::make_redifference_subrange<Diff1>(r1),\r\n                test::make_redifference_subrange<Diff2>(r2), equal_to{}, get_first, get_second);\r\n            assert(!match);\r\n        }\r\n        {\r\n            In1 r1{short_haystack};\r\n            In2 r2{short_needle};\r\n            const same_as<bool> auto match = ends_with(test::make_redifference_subrange<Diff1>(r1),\r\n                test::make_redifference_subrange<Diff2>(r2), equal_to{}, get_first, get_second);\r\n            assert(!match);\r\n        }\r\n        {\r\n            In1 r1{haystack};\r\n            In2 r2{span<pair<long, long>, 0>{}};\r\n            const same_as<bool> auto match = ends_with(test::make_redifference_subrange<Diff1>(r1),\r\n                test::make_redifference_subrange<Diff2>(r2), equal_to{}, get_first, get_second);\r\n            assert(match);\r\n        }\r\n    }\r\n\r\n    template <ranges::input_range In1, ranges::input_range In2>\r\n    static void call() {\r\n        if constexpr (testable_range<In1> && testable_range<In2>) {\r\n            using int_class = ranges::range_difference_t<ranges::iota_view<long long>>;\r\n\r\n            test_range_rediff<int_class, In1, short, In2>();\r\n            static_assert((test_range_rediff<int_class, In1, short, In2>(), true));\r\n\r\n            test_range_rediff<short, In1, int_class, In2>();\r\n            static_assert((test_range_rediff<short, In1, int_class, In2>(), true));\r\n        }\r\n    }\r\n};\r\n\r\n#ifdef TEST_EVERYTHING\r\nint main() {\r\n#if !defined(_PREFAST_) && !defined(__EDG__) // TRANSITION, GH-1030 and GH-3567\r\n    test_in_in<instantiator, const pair<int, int>, const pair<long, long>>();\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n#else // ^^^ test all permutations of range properties / test only interesting permutations vvv\r\ntemplate <class R>\r\nvoid run_tests_inner() {\r\n    instantiator::call<R, test::range<test::input, const pair<long, long>, test::Sized::yes>>();\r\n    instantiator::call<R, test::range<test::fwd, const pair<long, long>, test::Sized::no>>();\r\n    instantiator::call<R, test::range<test::fwd, const pair<long, long>, test::Sized::yes>>();\r\n    instantiator::call<R, test::range<test::bidi, const pair<long, long>, test::Sized::no>>();\r\n    instantiator::call<R, test::range<test::bidi, const pair<long, long>, test::Sized::yes>>();\r\n    instantiator::call<R, test::range<test::random, const pair<long, long>, test::Sized::no>>();\r\n    instantiator::call<R, test::range<test::random, const pair<long, long>, test::Sized::yes>>();\r\n    instantiator::call<R, test::range<test::contiguous, const pair<long, long>, test::Sized::no>>();\r\n    instantiator::call<R, test::range<test::contiguous, const pair<long, long>, test::Sized::yes>>();\r\n}\r\n\r\nvoid run_tests() {\r\n    run_tests_inner<test::range<test::input, const pair<int, int>, test::Sized::yes>>();\r\n    run_tests_inner<test::range<test::fwd, const pair<int, int>, test::Sized::no>>();\r\n    run_tests_inner<test::range<test::fwd, const pair<int, int>, test::Sized::yes>>();\r\n    run_tests_inner<test::range<test::bidi, const pair<int, int>, test::Sized::no>>();\r\n    run_tests_inner<test::range<test::bidi, const pair<int, int>, test::Sized::yes>>();\r\n    run_tests_inner<test::range<test::random, const pair<int, int>, test::Sized::no>>();\r\n    run_tests_inner<test::range<test::random, const pair<int, int>, test::Sized::yes>>();\r\n    run_tests_inner<test::range<test::contiguous, const pair<int, int>, test::Sized::no>>();\r\n    run_tests_inner<test::range<test::contiguous, const pair<int, int>, test::Sized::yes>>();\r\n}\r\n\r\nint main() {\r\n    run_tests();\r\n}\r\n#endif // TEST_EVERYTHING\r\n"
  },
  {
    "path": "tests/std/tests/LWG4172_unique_lock_self_move_assignment/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/LWG4172_unique_lock_self_move_assignment/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <mutex>\r\n#include <shared_mutex>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nstruct lockable_with_counters {\r\n    void lock() {\r\n        ++lock_count;\r\n    }\r\n\r\n    void unlock() {\r\n        ++unlock_count;\r\n    }\r\n\r\n    void lock_shared() {\r\n        ++shared_lock_count;\r\n    }\r\n\r\n    void unlock_shared() {\r\n        ++shared_unlock_count;\r\n    }\r\n\r\n    int lock_count          = 0;\r\n    int unlock_count        = 0;\r\n    int shared_lock_count   = 0;\r\n    int shared_unlock_count = 0;\r\n};\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wself-move\"\r\n#endif // __clang__\r\n#pragma warning(push)\r\n#pragma warning(disable : 26800) // use a moved-from object\r\nint main() {\r\n    lockable_with_counters lockable1;\r\n    lockable_with_counters lockable2;\r\n\r\n    {\r\n        unique_lock<lockable_with_counters> lock_a(lockable1);\r\n        assert(lockable1.lock_count == 1);\r\n        assert(lockable1.unlock_count == 0);\r\n\r\n        lock_a = move(lock_a);\r\n        assert(lockable1.lock_count == 1);\r\n        assert(lockable1.unlock_count == 0);\r\n        {\r\n            unique_lock<lockable_with_counters> lock_b(lockable2);\r\n            assert(lockable2.lock_count == 1);\r\n            assert(lockable2.unlock_count == 0);\r\n\r\n            lock_a = move(lock_b);\r\n\r\n            assert(lockable1.lock_count == 1);\r\n            assert(lockable1.unlock_count == 1);\r\n            assert(lockable2.lock_count == 1);\r\n            assert(lockable2.unlock_count == 0);\r\n        }\r\n\r\n        assert(lockable1.lock_count == 1);\r\n        assert(lockable1.unlock_count == 1);\r\n        assert(lockable2.lock_count == 1);\r\n        assert(lockable2.unlock_count == 0);\r\n    }\r\n\r\n    assert(lockable1.lock_count == 1);\r\n    assert(lockable1.unlock_count == 1);\r\n    assert(lockable2.lock_count == 1);\r\n    assert(lockable2.unlock_count == 1);\r\n\r\n    {\r\n        shared_lock<lockable_with_counters> lock_a(lockable1);\r\n        assert(lockable1.shared_lock_count == 1);\r\n        assert(lockable1.shared_unlock_count == 0);\r\n\r\n        lock_a = move(lock_a);\r\n        assert(lockable1.shared_lock_count == 1);\r\n        assert(lockable1.shared_unlock_count == 0);\r\n        {\r\n            shared_lock<lockable_with_counters> lock_b(lockable2);\r\n            assert(lockable2.shared_lock_count == 1);\r\n            assert(lockable2.shared_unlock_count == 0);\r\n\r\n            lock_a = move(lock_b);\r\n\r\n            assert(lockable1.shared_lock_count == 1);\r\n            assert(lockable1.shared_unlock_count == 1);\r\n            assert(lockable2.shared_lock_count == 1);\r\n            assert(lockable2.shared_unlock_count == 0);\r\n        }\r\n\r\n        assert(lockable1.shared_lock_count == 1);\r\n        assert(lockable1.shared_unlock_count == 1);\r\n        assert(lockable2.shared_lock_count == 1);\r\n        assert(lockable2.shared_unlock_count == 0);\r\n    }\r\n\r\n    assert(lockable1.shared_lock_count == 1);\r\n    assert(lockable1.shared_unlock_count == 1);\r\n    assert(lockable2.shared_lock_count == 1);\r\n    assert(lockable2.shared_unlock_count == 1);\r\n}\r\n#pragma warning(pop)\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // __clang__\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_default_accessor/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_default_accessor/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstdint>\r\n#include <mdspan>\r\n#include <string>\r\n#include <type_traits>\r\n\r\n#include <test_mdspan_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class ElementType>\r\nconstexpr void test_one(array<ElementType, 3> elems) {\r\n    using Accessor = default_accessor<ElementType>;\r\n\r\n    // default_accessor meets the accessor policy requirements\r\n    static_assert(check_accessor_policy_requirements<Accessor>());\r\n\r\n    // Check modeled concepts\r\n    static_assert(is_nothrow_move_constructible_v<Accessor>);\r\n    static_assert(is_nothrow_move_assignable_v<Accessor>);\r\n    static_assert(is_nothrow_swappable_v<Accessor>);\r\n    static_assert(is_trivially_copyable_v<Accessor>);\r\n    static_assert(semiregular<Accessor>);\r\n\r\n    // Check if default_accessor is empty\r\n    static_assert(is_empty_v<Accessor>);\r\n\r\n    // Check nested types\r\n    static_assert(same_as<typename Accessor::offset_policy, Accessor>);\r\n    static_assert(same_as<typename Accessor::element_type, ElementType>);\r\n    static_assert(same_as<typename Accessor::reference, ElementType&>);\r\n    static_assert(same_as<typename Accessor::data_handle_type, ElementType*>);\r\n\r\n    // Check default constructor\r\n    Accessor accessor;\r\n    static_assert(is_nothrow_default_constructible_v<Accessor>);\r\n\r\n    { // Check converting constructor from other accessor\r\n        [[maybe_unused]] default_accessor<const ElementType> const_accessor = accessor;\r\n        static_assert(is_nothrow_constructible_v<default_accessor<const ElementType>, Accessor>);\r\n        static_assert(!is_constructible_v<Accessor, default_accessor<const ElementType>>);\r\n    }\r\n\r\n    { // Check 'access' member function\r\n        same_as<ElementType&> decltype(auto) accessed_elem = accessor.access(elems.data(), 1);\r\n        assert(accessed_elem == elems[1]);\r\n        static_assert(noexcept(accessor.access(elems.data(), 0)));\r\n    }\r\n\r\n    { // Check 'offset' member function\r\n        same_as<ElementType*> auto ptr = accessor.offset(elems.data(), 1);\r\n        assert(ptr == elems.data() + 1);\r\n        static_assert(noexcept(accessor.offset(elems.data(), 0)));\r\n    }\r\n}\r\n\r\nconstexpr bool test() {\r\n    test_one<char>({'a', 'b', 'c'});\r\n    test_one<long>({1, 2, 3});\r\n    test_one<double>({1.1, 2.2, 3.3});\r\n    test_one<wstring>({L\"1\", L\"2\", L\"3\"});\r\n    test_one<intmax_t>({3, 2, 1});\r\n    return true;\r\n}\r\n\r\nint main() {\r\n#if !(defined(_DEBUG) && defined(__EDG__)) // TRANSITION, VSO-1898962\r\n    static_assert(test());\r\n#endif // ^^^ no workaround ^^^\r\n    test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_extents/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_extents/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <mdspan>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <test_mdspan_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class IndexType, size_t... Extents, size_t... Indices>\r\nconstexpr void check_members(index_sequence<Indices...>) {\r\n    using Ext = extents<IndexType, Extents...>;\r\n\r\n    // Each specialization of extents models regular and is trivially copyable\r\n    static_assert(regular<Ext>);\r\n    static_assert(is_trivially_copyable_v<Ext>);\r\n\r\n    // Check implicit properties\r\n    static_assert(is_nothrow_copy_constructible_v<Ext>);\r\n    static_assert(is_nothrow_move_constructible_v<Ext>);\r\n    static_assert(is_nothrow_copy_assignable_v<Ext>);\r\n    static_assert(is_nothrow_move_assignable_v<Ext>);\r\n    static_assert(is_nothrow_swappable_v<Ext>);\r\n\r\n    // Check member types\r\n    static_assert(same_as<typename Ext::index_type, IndexType>);\r\n    static_assert(same_as<typename Ext::size_type, make_unsigned_t<IndexType>>);\r\n    static_assert(same_as<typename Ext::rank_type, size_t>);\r\n\r\n    // Check static observers\r\n    static_assert(Ext::rank() == sizeof...(Extents));\r\n    static_assert(Ext::rank_dynamic() == (size_t{Extents == dynamic_extent} + ... + 0));\r\n    static_assert(((Ext::static_extent(Indices) == Extents) && ...));\r\n\r\n    // Check noexceptness of static observers\r\n    static_assert(noexcept(Ext::rank()));\r\n    static_assert(noexcept(Ext::rank_dynamic()));\r\n    static_assert(noexcept(Ext::static_extent(0)));\r\n\r\n    // Check default constructor\r\n    Ext ext;\r\n    static_assert(is_nothrow_default_constructible_v<Ext>);\r\n\r\n    // Check 'extent' observer\r\n    assert(\r\n        (((cmp_equal(ext.extent(Indices), Extents) && Extents != dynamic_extent) || ext.extent(Indices) == 0) && ...));\r\n\r\n    using OtherIndexType = conditional_t<is_signed_v<IndexType>, long long, unsigned long long>;\r\n    using Ext2           = extents<OtherIndexType, Extents...>;\r\n\r\n    { // Check construction from other extents\r\n        Ext2 ext2{ext};\r\n        assert(((ext.extent(Indices) == ext2.extent(Indices)) && ...));\r\n        assert(ext == ext2);\r\n        static_assert(is_nothrow_constructible_v<Ext2, Ext>);\r\n        // Other tests are defined in 'check_construction_from_other_extents' function\r\n    }\r\n\r\n    { // Check construction from extents pack\r\n        Ext2 ext2{ext.extent(Indices)...};\r\n        assert(((ext.extent(Indices) == ext2.extent(Indices)) && ...));\r\n        assert(ext == ext2);\r\n        static_assert(is_nothrow_constructible_v<Ext2, decltype(ext.extent(Indices))...>);\r\n        // Other tests are defined in 'check_construction_from_extents_pack' function\r\n    }\r\n\r\n    { // Check construction from array and span\r\n        array<IndexType, Ext::rank()> arr = {ext.extent(Indices)...};\r\n        Ext2 ext2a{arr};\r\n        assert(((ext.extent(Indices) == ext2a.extent(Indices)) && ...));\r\n        assert(ext == ext2a);\r\n        static_assert(is_nothrow_constructible_v<Ext2, decltype(arr)>);\r\n\r\n        span s{arr};\r\n        Ext2 ext2b{s};\r\n        assert(((ext.extent(Indices) == ext2b.extent(Indices)) && ...));\r\n        assert(ext == ext2b);\r\n        static_assert(is_nothrow_constructible_v<Ext2, decltype(s)>);\r\n        // Other tests are defined in 'check_construction_from_array_and_span' function\r\n    }\r\n}\r\n\r\nconstexpr void check_defaulted_default_constructor() {\r\n    { // All extents are static\r\n        using Ext = extents<short, 3, 5, 7>;\r\n        static_assert(is_nothrow_default_constructible_v<Ext>);\r\n\r\n        Ext ext;\r\n        assert(ext.extent(0) == 3);\r\n        assert(ext.extent(1) == 5);\r\n        assert(ext.extent(2) == 7);\r\n    }\r\n\r\n    { // Some extents are static, some dynamic\r\n        using Ext = extents<signed char, dynamic_extent, dynamic_extent, 4>;\r\n        static_assert(is_nothrow_default_constructible_v<Ext>);\r\n\r\n        Ext ext;\r\n        assert(ext.extent(0) == 0);\r\n        assert(ext.extent(1) == 0);\r\n        assert(ext.extent(2) == 4);\r\n    }\r\n\r\n    { // All extents are dynamic\r\n        using Ext = dextents<unsigned long, 3>;\r\n        static_assert(is_nothrow_default_constructible_v<Ext>);\r\n\r\n        Ext ext;\r\n        assert(ext.extent(0) == 0);\r\n        assert(ext.extent(1) == 0);\r\n        assert(ext.extent(2) == 0);\r\n    }\r\n}\r\n\r\nconstexpr void check_construction_from_other_extents() {\r\n    { // Check construction from too big or too small other extents\r\n        using Ext = extents<int, 3, 3>;\r\n        static_assert(!is_constructible_v<Ext, extents<int, 3>>);\r\n        static_assert(!is_constructible_v<Ext, extents<int, 3, 3, 3>>);\r\n    }\r\n\r\n    { // Check construction with different values\r\n        static_assert(is_nothrow_constructible_v<extents<int, 3, 3>, extents<int, 3, 3>>);\r\n        static_assert(is_nothrow_constructible_v<extents<int, 3, 3>, extents<int, 3, dynamic_extent>>);\r\n        static_assert(is_nothrow_constructible_v<extents<int, 3, dynamic_extent>, extents<int, 3, 3>>);\r\n        static_assert(is_nothrow_constructible_v<extents<int, 3, dynamic_extent>, extents<int, 3, dynamic_extent>>);\r\n        static_assert(!is_constructible_v<extents<int, 3, 3>, extents<int, 3, 2>>);\r\n    }\r\n\r\n    { // Check postconditions: static extents from static extents\r\n        extents<signed char, 3, 4> ext;\r\n        extents<short, 3, 4> ext2 = ext;\r\n        assert(ext2.extent(0) == 3);\r\n        assert(ext2.extent(1) == 4);\r\n        assert(ext == ext2);\r\n    }\r\n\r\n    { // Check postconditions: dynamic extents from static extents\r\n        extents<unsigned char, 2, 3> ext;\r\n        dextents<short, 2> ext2 = ext;\r\n        assert(ext2.extent(0) == 2);\r\n        assert(ext2.extent(1) == 3);\r\n        assert(ext == ext2);\r\n    }\r\n\r\n    { // Check postconditions: dynamic extents from dynamic extents\r\n        dextents<unsigned char, 2> ext{5, 10};\r\n        dextents<unsigned short, 2> ext2 = ext;\r\n        assert(ext2.extent(0) == 5);\r\n        assert(ext2.extent(1) == 10);\r\n        assert(ext == ext2);\r\n    }\r\n\r\n    { // Check postconditions: static extents from dynamic extents\r\n        dextents<signed char, 2> ext{9, 6};\r\n        extents<unsigned short, 9, 6> ext2{ext}; // NB: explicit constructor\r\n        assert(ext2.extent(0) == 9);\r\n        assert(ext2.extent(1) == 6);\r\n        assert(ext == ext2);\r\n    }\r\n\r\n    { // Check postconditions: wider index type to narrower index type\r\n        dextents<short, 2> ext{3, 5};\r\n        dextents<signed char, 2> ext2{ext}; // NB: explicit constructor\r\n        assert(ext2.extent(0) == 3);\r\n        assert(ext2.extent(1) == 5);\r\n        assert(ext == ext2);\r\n    }\r\n\r\n    { // Check implicit conversions\r\n        static_assert(!NotImplicitlyConstructibleFrom<extents<int, 3>, extents<int, 3>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<extents<int, 3>, extents<long long, 3>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<extents<int, 3, 3>, extents<int, dynamic_extent, 3>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<extents<int, 3, 3>, extents<int, dynamic_extent, dynamic_extent>>);\r\n    }\r\n}\r\n\r\nconstexpr void check_construction_from_extents_pack() {\r\n    { // Check construction from various types\r\n        using Ext = extents<signed char, 3, 3, dynamic_extent, dynamic_extent>;\r\n        static_assert(is_nothrow_constructible_v<Ext, int, int>);\r\n        static_assert(!is_constructible_v<Ext, int, int, int>);\r\n        static_assert(is_nothrow_constructible_v<Ext, int, int, int, int>);\r\n    }\r\n\r\n    { // Check construction from types (not) convertible to index_type\r\n        using Ext = extents<long, 2, dynamic_extent>;\r\n        static_assert(is_nothrow_constructible_v<Ext, ConvertibleToInt<int>>);\r\n        static_assert(!is_nothrow_constructible_v<Ext, ConvertibleToInt<int, IsNothrow::yes, IsExplicit::yes>>);\r\n        static_assert(!is_constructible_v<Ext, NonConvertibleToAnything>);\r\n        static_assert(is_nothrow_constructible_v<Ext, int, ConvertibleToInt<int>>);\r\n        static_assert(!is_nothrow_constructible_v<Ext, int, ConvertibleToInt<int, IsNothrow::yes, IsExplicit::yes>>);\r\n        static_assert(!is_constructible_v<Ext, int, NonConvertibleToAnything>);\r\n    }\r\n\r\n    { // Check construction from types that may throw during conversion to index_type\r\n        using Ext = extents<long long, 4, dynamic_extent>;\r\n        static_assert(!is_constructible_v<Ext, ConvertibleToInt<int, IsNothrow::no>>);\r\n        static_assert(!is_constructible_v<Ext, int, ConvertibleToInt<int, IsNothrow::no>>);\r\n    }\r\n\r\n    { // Check postconditions when 'sizeof...(pack) == rank()'\r\n        using Ext = extents<int, dynamic_extent, dynamic_extent, 4>;\r\n        Ext ext{4, ConvertibleToInt<int>{.val = 4}, 4};\r\n        assert(ext.extent(0) == 4);\r\n        assert(ext.extent(1) == 4);\r\n        assert(ext.extent(2) == 4);\r\n        Ext ext2{4, 4, 4};\r\n        assert(ext == ext2);\r\n    }\r\n\r\n    { // Check postconditions when 'sizeof...(pack) == rank_dynamic()'\r\n        using Ext = extents<long long, dynamic_extent, dynamic_extent, 5>;\r\n        Ext ext{3, ConvertibleToInt<int>{.val = 3}};\r\n        assert(ext.extent(0) == 3);\r\n        assert(ext.extent(1) == 3);\r\n        assert(ext.extent(2) == 5);\r\n        Ext ext2{3, 3};\r\n        assert(ext == ext2);\r\n    }\r\n\r\n    { // Check that elements from pack are passed through 'move'\r\n        using Ext = dextents<signed char, 3>;\r\n        struct FancyIndex {\r\n            constexpr operator integral auto() const& noexcept {\r\n                return 3;\r\n            }\r\n\r\n            constexpr operator integral auto() const&& noexcept {\r\n                return 3;\r\n            }\r\n\r\n            constexpr operator Ext::index_type() && noexcept {\r\n                return 4;\r\n            }\r\n        };\r\n\r\n        FancyIndex i;\r\n        Ext ext{FancyIndex{}, i, as_const(i)};\r\n        assert(ext.extent(0) == 4);\r\n        assert(ext.extent(1) == 4);\r\n        assert(ext.extent(2) == 4);\r\n    }\r\n\r\n    { // Check construction from integers with mismatched signs\r\n        using Ext = extents<long long, dynamic_extent>;\r\n        (void) Ext{4ull};\r\n    }\r\n\r\n    { // Check narrowing conversions\r\n        using Ext = extents<short, dynamic_extent>;\r\n        (void) Ext{4ll};\r\n    }\r\n\r\n    { // Check implicit conversions\r\n        static_assert(NotImplicitlyConstructibleFrom<extents<int, 3>, unsigned long long>);\r\n        static_assert(NotImplicitlyConstructibleFrom<extents<int, 3, 3>, long, long>);\r\n        static_assert(NotImplicitlyConstructibleFrom<extents<int, 3, 3, 3>, char, signed char, unsigned char>);\r\n    }\r\n}\r\n\r\nconstexpr void check_construction_from_array_and_span() {\r\n    { // Check construction from array/span where 'size()' is equal to 'rank()' and OtherIndexType models 'integral'\r\n        using Ext           = extents<short, 1, dynamic_extent>;\r\n        array<short, 2> arr = {1, 5};\r\n        Ext ext{arr};\r\n        assert(ext.extent(0) == 1);\r\n        assert(ext.extent(1) == 5);\r\n\r\n        Ext ext2{span{arr}};\r\n        assert(ext == ext2);\r\n\r\n        static_assert(is_nothrow_constructible_v<Ext, decltype(arr)>);\r\n        static_assert(is_nothrow_constructible_v<Ext, span<int, 2>>);\r\n    }\r\n\r\n    { // Check construction from array/span where 'size()' is equal to 'rank()' and OtherIndexType is class type\r\n        using Ext = extents<signed char, 3, dynamic_extent>;\r\n        array<ConvertibleToInt<int>, 2> arr{{{.val = 3}, {.val = 5}}};\r\n        Ext ext{arr};\r\n        assert(ext.extent(0) == 3);\r\n        assert(ext.extent(1) == 5);\r\n\r\n        const span s{arr};\r\n        Ext ext2{s};\r\n        assert(ext == ext2);\r\n\r\n        static_assert(is_nothrow_constructible_v<Ext, decltype(arr)>);\r\n        static_assert(is_nothrow_constructible_v<Ext, decltype(s)>);\r\n    }\r\n\r\n    { // Check construction from array/span where 'size()' is equal to 'rank()' and OtherIndexType is \"special\"\r\n        using Ext = extents<unsigned int, dynamic_extent, 5>;\r\n        struct SpecialIndex {\r\n            constexpr operator integral auto() noexcept {\r\n                return 3;\r\n            }\r\n\r\n            constexpr operator integral auto() const noexcept {\r\n                return 5;\r\n            }\r\n        };\r\n\r\n        // Elements of 'arr' and 's' should be passed through 'as_const'\r\n        array<SpecialIndex, 2> arr;\r\n        Ext ext{arr};\r\n        assert(ext.extent(0) == 5);\r\n        assert(ext.extent(1) == 5);\r\n\r\n        span s{arr};\r\n        Ext ext2{s};\r\n        assert(ext == ext2);\r\n    }\r\n\r\n    { // Check invalid construction from array/span where 'size()' is equal to 'rank()'\r\n        using Ext = extents<long long, 3, dynamic_extent>;\r\n        static_assert(!is_constructible_v<Ext, array<ConvertibleToInt<int, IsNothrow::yes, IsExplicit::yes>, 2>>);\r\n        static_assert(!is_constructible_v<Ext, span<ConvertibleToInt<int, IsNothrow::yes, IsExplicit::yes>, 2>>);\r\n        static_assert(!is_constructible_v<Ext, array<ConvertibleToInt<int, IsNothrow::no>, 2>>);\r\n        static_assert(!is_constructible_v<Ext, span<ConvertibleToInt<int, IsNothrow::no>, 2>>);\r\n        static_assert(!is_constructible_v<Ext, array<NonConstConvertibleToInt<int>, 2>>);\r\n        static_assert(!is_constructible_v<Ext, span<NonConstConvertibleToInt<int>, 2>>);\r\n        static_assert(!is_constructible_v<Ext, array<NonConvertibleToAnything, 2>>);\r\n        static_assert(!is_constructible_v<Ext, span<NonConvertibleToAnything, 2>>);\r\n    }\r\n\r\n    { // Check construction from array/span where 'size()' is equal to 'rank_dynamic()' and OtherIndexType models\r\n      // 'integral'\r\n        using Ext         = extents<unsigned char, 3, dynamic_extent, 3, dynamic_extent>;\r\n        array<int, 2> arr = {4, 4};\r\n        Ext ext{arr};\r\n        assert(ext.extent(0) == 3);\r\n        assert(ext.extent(1) == 4);\r\n        assert(ext.extent(2) == 3);\r\n        assert(ext.extent(3) == 4);\r\n\r\n        Ext ext2{span{arr}};\r\n        assert(ext == ext2);\r\n\r\n        static_assert(is_nothrow_constructible_v<Ext, decltype(arr)>);\r\n        static_assert(is_nothrow_constructible_v<Ext, span<int, 2>>);\r\n    }\r\n\r\n    { // Check construction from array/span where 'size()' is equal to 'rank_dynamic()' and OtherIndexType is class type\r\n        using Ext = extents<unsigned short, 3, dynamic_extent, 3, dynamic_extent>;\r\n        array<ConvertibleToInt<unsigned short>, 2> arr{{{.val = 2}, {.val = 2}}};\r\n        Ext ext{arr};\r\n        assert(ext.extent(0) == 3);\r\n        assert(ext.extent(1) == 2);\r\n        assert(ext.extent(2) == 3);\r\n        assert(ext.extent(3) == 2);\r\n\r\n        span s{arr};\r\n        Ext ext2{s};\r\n        assert(ext == ext2);\r\n\r\n        static_assert(is_nothrow_constructible_v<Ext, decltype(arr)>);\r\n        static_assert(is_nothrow_constructible_v<Ext, decltype(s)>);\r\n    }\r\n\r\n    { // Check construction from array/span where 'size()' is equal to 'rank_dynamic()' and OtherIndexType is \"special\"\r\n        using Ext = extents<unsigned int, dynamic_extent, dynamic_extent, 3>;\r\n        struct SpecialIndex {\r\n            constexpr operator integral auto() noexcept {\r\n                return 5;\r\n            }\r\n\r\n            constexpr operator integral auto() const noexcept {\r\n                return 3;\r\n            }\r\n        };\r\n\r\n        // Elements of 'arr' and 's' should be passed through 'as_const'\r\n        array<SpecialIndex, 2> arr;\r\n        Ext ext{arr};\r\n        assert(ext.extent(0) == 3);\r\n        assert(ext.extent(1) == 3);\r\n        assert(ext.extent(2) == 3);\r\n\r\n        span s{arr};\r\n        Ext ext2{s};\r\n        assert(ext == ext2);\r\n    }\r\n\r\n    { // Check invalid construction from array/span where 'size()' is equal to 'rank_dynamic()'\r\n        using Ext = extents<unsigned char, dynamic_extent, 5, dynamic_extent, 5>;\r\n        static_assert(!is_constructible_v<Ext, array<ConvertibleToInt<int, IsNothrow::yes, IsExplicit::yes>, 2>>);\r\n        static_assert(!is_constructible_v<Ext, span<ConvertibleToInt<int, IsNothrow::yes, IsExplicit::yes>, 2>>);\r\n        static_assert(!is_constructible_v<Ext, array<ConvertibleToInt<int, IsNothrow::no>, 2>>);\r\n        static_assert(!is_constructible_v<Ext, span<ConvertibleToInt<int, IsNothrow::no>, 2>>);\r\n        static_assert(!is_constructible_v<Ext, array<NonConstConvertibleToInt<int>, 2>>);\r\n        static_assert(!is_constructible_v<Ext, span<NonConstConvertibleToInt<int>, 2>>);\r\n        static_assert(!is_constructible_v<Ext, array<NonConvertibleToAnything, 2>>);\r\n        static_assert(!is_constructible_v<Ext, span<NonConvertibleToAnything, 2>>);\r\n    }\r\n\r\n    { // Check construction with integers with mismatched signs\r\n        using Ext = extents<long long, dynamic_extent>;\r\n\r\n        array arr = {4ull};\r\n        (void) Ext{arr};\r\n\r\n        span s{arr};\r\n        (void) Ext{s};\r\n    }\r\n\r\n    { // Check narrowing conversions\r\n        using Ext = extents<short, dynamic_extent>;\r\n\r\n        array arr = {4ll};\r\n        (void) Ext{arr};\r\n        (void) Ext{span{arr}};\r\n    }\r\n\r\n    { // Check construction from arrays/spans with invalid size\r\n        using Ext = extents<short, 5, 5>;\r\n        static_assert(!is_constructible_v<Ext, array<int, 1>>);\r\n        static_assert(!is_constructible_v<Ext, array<int, 3>>);\r\n        static_assert(!is_constructible_v<Ext, span<int, 1>>);\r\n        static_assert(!is_constructible_v<Ext, span<int, 3>>);\r\n        static_assert(!is_constructible_v<Ext, span<int>>);\r\n    }\r\n\r\n    { // Check implicit conversions\r\n        static_assert(!NotImplicitlyConstructibleFrom<extents<signed char, 3, dynamic_extent>, array<int, 1>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<extents<signed char, 3, dynamic_extent>, array<int, 2>>);\r\n        static_assert(!NotImplicitlyConstructibleFrom<extents<signed char, 3, dynamic_extent>, span<int, 1>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<extents<signed char, 3, dynamic_extent>, span<int, 2>>);\r\n    }\r\n}\r\n\r\nconstexpr void check_equality_operator() {\r\n    { // All extents are static\r\n        extents<int, 3, 3> e1;\r\n        extents<long, 2, 3> e2;\r\n        extents<size_t, 3, 3> e3;\r\n\r\n        same_as<bool> decltype(auto) cond = e1 != e2;\r\n        assert(cond);\r\n        assert(e2 != e3);\r\n        assert(e1 == e3);\r\n\r\n        static_assert(noexcept(e1 != e2));\r\n        static_assert(noexcept(e1 == e3));\r\n    }\r\n\r\n    { // Some extents are static, some dynamic\r\n        extents<int, 3, dynamic_extent> e1{1};\r\n        extents<long, dynamic_extent, 3> e2{2};\r\n        extents<size_t, 2, dynamic_extent> e3{3};\r\n\r\n        same_as<bool> decltype(auto) cond = e1 != e2;\r\n        assert(cond);\r\n        assert(e2 == e3);\r\n        assert(e1 != e2);\r\n\r\n        static_assert(noexcept(e1 != e2));\r\n        static_assert(noexcept(e2 == e3));\r\n    }\r\n\r\n    { // All extents are dynamic\r\n        dextents<int, 2> e1{1, 2};\r\n        dextents<long, 2> e2{1, 2};\r\n        dextents<size_t, 2> e3{1, 3};\r\n\r\n        same_as<bool> decltype(auto) cond = e1 == e2;\r\n        assert(cond);\r\n        assert(e2 != e3);\r\n        assert(e1 != e3);\r\n\r\n        static_assert(noexcept(e1 == e2));\r\n        static_assert(noexcept(e2 != e3));\r\n    }\r\n\r\n    { // Different ranks\r\n        static_assert(extents<int, 2, 3>{} != extents<short, 2>{});\r\n        static_assert(extents<int, 2, 2>{} != extents<long, 2, 3, 5>{});\r\n        static_assert(noexcept(extents<int, 2, 3>{} != extents<short, 2>{}));\r\n        static_assert(noexcept(extents<int, 2, 2>{} != extents<long, 2, 3, 5>{}));\r\n    }\r\n}\r\n\r\ntemplate <class... Args>\r\nconcept CanDeduceExtents = requires(Args&&... args) { extents{forward<Args>(args)...}; };\r\n\r\ntemplate <class T, size_t ExpectedRank>\r\nconstexpr bool all_extents_dynamic = false;\r\n\r\ntemplate <class IndexType, size_t... Extents, size_t ExpectedRank>\r\nconstexpr bool all_extents_dynamic<extents<IndexType, Extents...>, ExpectedRank> =\r\n    ((Extents == dynamic_extent) && ...) && (sizeof...(Extents) == ExpectedRank);\r\n\r\nconstexpr void check_deduction_guide() {\r\n    { // Check 'CanDeduceExtents' concept\r\n        static_assert(CanDeduceExtents<signed char, short, int, long, long long>);\r\n        static_assert(CanDeduceExtents<unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long>);\r\n        static_assert(CanDeduceExtents<int, ConvertibleToInt<int>, int>);\r\n        static_assert(!CanDeduceExtents<int, ConvertibleToInt<int, IsNothrow::no>, int>);\r\n        static_assert(!CanDeduceExtents<int, NonConvertibleToAnything, int>);\r\n    }\r\n\r\n    { // Check correctness\r\n        extents ext{'1', 2, 3u, 4ll, ConvertibleToInt<size_t>{.val = 5}};\r\n        assert(ext.extent(0) == '1');\r\n        assert(ext.extent(1) == 2);\r\n        assert(ext.extent(2) == 3);\r\n        assert(ext.extent(3) == 4);\r\n        assert(ext.extent(4) == 5);\r\n\r\n        static_assert(all_extents_dynamic<decltype(ext), 5>);\r\n        static_assert(same_as<decltype(ext)::index_type, size_t>);\r\n    }\r\n}\r\n\r\nconstexpr bool test() {\r\n    check_members_with_various_extents([]<class IndexType, size_t... Extents>(const extents<IndexType, Extents...>&) {\r\n        check_members<IndexType, Extents...>(make_index_sequence<sizeof...(Extents)>{});\r\n    });\r\n    check_defaulted_default_constructor();\r\n    check_construction_from_other_extents();\r\n    check_construction_from_extents_pack();\r\n    check_construction_from_array_and_span();\r\n    check_equality_operator();\r\n    check_deduction_guide();\r\n\r\n    return true;\r\n}\r\n\r\n// Check dextents\r\nstatic_assert(all_extents_dynamic<dextents<signed char, 0>, 0>);\r\nstatic_assert(all_extents_dynamic<dextents<short, 1>, 1>);\r\nstatic_assert(all_extents_dynamic<dextents<int, 2>, 2>);\r\nstatic_assert(all_extents_dynamic<dextents<long, 3>, 3>);\r\nstatic_assert(all_extents_dynamic<dextents<long long, 4>, 4>);\r\nstatic_assert(all_extents_dynamic<dextents<unsigned char, 5>, 5>);\r\nstatic_assert(all_extents_dynamic<dextents<unsigned short, 6>, 6>);\r\nstatic_assert(all_extents_dynamic<dextents<unsigned int, 7>, 7>);\r\nstatic_assert(all_extents_dynamic<dextents<unsigned long, 8>, 8>);\r\nstatic_assert(all_extents_dynamic<dextents<unsigned long long, 9>, 9>);\r\n\r\nint main() {\r\n    static_assert(test());\r\n    test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_extents_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_extents_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cstddef>\r\n#include <mdspan>\r\n#include <span>\r\n\r\n#include <test_death.hpp>\r\n#include <test_mdspan_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nvoid test_static_extent_function_with_invalid_index() {\r\n    using E = extents<int, 3>;\r\n    // Index must be less than rank()\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // yay, /analyze catches this mistake at compile time!\r\n    (void) E::static_extent(1);\r\n#pragma warning(pop)\r\n}\r\n\r\nvoid test_extent_function_with_invalid_index() {\r\n    extents<int, 3> e;\r\n    // Index must be less than rank()\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // yay, /analyze catches this mistake at compile time!\r\n    (void) e.extent(1);\r\n#pragma warning(pop)\r\n}\r\n\r\nvoid test_construction_from_other_extents_with_invalid_values() {\r\n    extents<int, dynamic_extent, dynamic_extent> e1{1, 2};\r\n    // Value of other.extent(r) must be equal to extent(r) for each r for which extent(r) is a static extent\r\n    [[maybe_unused]] extents<int, 1, 1> e2{e1};\r\n}\r\n\r\nvoid test_construction_from_other_extents_with_unrepresentable_as_index_type_values() {\r\n    extents<int, dynamic_extent> e1{256};\r\n    // Value of other.extent(r) must be representable as a value of type index_type for every rank index r\r\n    [[maybe_unused]] extents<unsigned char, dynamic_extent> e2{e1};\r\n}\r\n\r\nvoid test_construction_from_pack_with_invalid_values() {\r\n    // Value of exts_arr[r] must be equal to extent(r) for each r for which extent(r) is a static extent\r\n    [[maybe_unused]] extents<int, 1, 2> e{1, 1};\r\n}\r\n\r\nvoid test_construction_from_pack_with_unrepresentable_as_index_type_values_1() {\r\n    // Either sizeof...(exts) must be equal to 0 or each element of exts must be nonnegative and must be representable\r\n    // as value of type index_type\r\n    [[maybe_unused]] extents<unsigned char, 1, dynamic_extent> e{1, 256};\r\n}\r\n\r\nvoid test_construction_from_pack_with_unrepresentable_as_index_type_values_2() {\r\n    // Either sizeof...(exts) must be equal to 0 or each element of exts must be nonnegative and must be representable\r\n    // as value of type index_type\r\n    [[maybe_unused]] extents<unsigned char, 1, dynamic_extent> e{ConvertibleToInt<unsigned char>{.val = 1}, 256};\r\n}\r\n\r\nvoid test_construction_from_pack_with_unrepresentable_as_index_type_values_3() {\r\n    static_assert(signed_integral<char>, \"This test assumes that it isn't being compiled with /J\");\r\n    // Either sizeof...(exts) must be equal to 0 or each element of exts must be nonnegative and must be representable\r\n    // as value of type index_type\r\n    [[maybe_unused]] extents<signed char, 1, dynamic_extent> e{static_cast<char>(-1)};\r\n}\r\n\r\nvoid test_construction_from_span_with_invalid_values() {\r\n    int vals[] = {1, 2};\r\n    span s{vals};\r\n    // Value of exts[r] must be equal to extent(r) for each r for which extent(r) is a static extent\r\n    [[maybe_unused]] extents<int, 1, 1> e{s};\r\n}\r\n\r\nvoid test_construction_from_span_with_unrepresentable_as_index_type_values() {\r\n    int vals[] = {256};\r\n    span s{vals};\r\n    // Either N must be zero or exts[r] must be nonnegative and must be representable as value of type index_type for\r\n    // every rank index r\r\n    [[maybe_unused]] extents<unsigned char, dynamic_extent> e{s};\r\n}\r\n\r\nvoid test_construction_from_array_with_invalid_values() {\r\n    array a = {1, 2};\r\n    // Value of exts[r] must be equal to extent(r) for each r for which extent(r) is a static extent\r\n    [[maybe_unused]] extents<int, 1, 1> e{a};\r\n}\r\n\r\nvoid test_construction_from_array_with_unrepresentable_as_index_type_values() {\r\n    array a = {256};\r\n    // Either N must be zero or exts[r] must be nonnegative and must be representable as value of type index_type for\r\n    // every rank index r\r\n    [[maybe_unused]] extents<unsigned char, dynamic_extent> e{a};\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_static_extent_function_with_invalid_index,\r\n        test_extent_function_with_invalid_index,\r\n        test_construction_from_other_extents_with_invalid_values,\r\n        test_construction_from_other_extents_with_unrepresentable_as_index_type_values,\r\n        test_construction_from_pack_with_invalid_values,\r\n        test_construction_from_pack_with_unrepresentable_as_index_type_values_1,\r\n        test_construction_from_pack_with_unrepresentable_as_index_type_values_2,\r\n        test_construction_from_pack_with_unrepresentable_as_index_type_values_3,\r\n        test_construction_from_span_with_invalid_values,\r\n        test_construction_from_span_with_unrepresentable_as_index_type_values,\r\n        test_construction_from_array_with_invalid_values,\r\n        test_construction_from_array_with_unrepresentable_as_index_type_values,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_layout_left/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_layout_left/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <mdspan>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <test_mdspan_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class IndexType, size_t... Extents, size_t... Indices>\r\nconstexpr void check_members(const extents<IndexType, Extents...>& ext, index_sequence<Indices...>) {\r\n    using Ext     = extents<IndexType, Extents...>;\r\n    using Mapping = layout_left::mapping<Ext>;\r\n\r\n    // layout_left meets the requirements of N5001 [mdspan.layout.policy.overview]/1\r\n    static_assert(check_layout_mapping_policy_requirements<layout_left, Ext>());\r\n    static_assert(is_trivially_copyable_v<layout_left>);\r\n    static_assert(is_trivially_default_constructible_v<layout_left>);\r\n\r\n    // layout_left::mapping<Ext> is a trivially copyable type that models regular for each Ext\r\n    static_assert(is_trivially_copyable_v<Mapping>);\r\n    static_assert(regular<Mapping>);\r\n\r\n    // Check member types\r\n    static_assert(same_as<typename Mapping::extents_type, Ext>);\r\n    static_assert(same_as<typename Mapping::index_type, typename Ext::index_type>);\r\n    static_assert(same_as<typename Mapping::size_type, typename Ext::size_type>);\r\n    static_assert(same_as<typename Mapping::rank_type, typename Ext::rank_type>);\r\n    static_assert(same_as<typename Mapping::layout_type, layout_left>);\r\n\r\n    { // Check default and copy constructor\r\n        const Mapping m;\r\n        Mapping cpy = m;\r\n        assert(cpy == m);\r\n        static_assert(is_nothrow_default_constructible_v<Mapping>);\r\n        static_assert(is_nothrow_copy_constructible_v<Mapping>);\r\n    }\r\n\r\n    { // Check copy assignment operator\r\n        const Mapping m;\r\n        Mapping cpy;\r\n        cpy = m;\r\n        assert(cpy == m);\r\n        static_assert(is_nothrow_copy_assignable_v<Mapping>);\r\n    }\r\n\r\n    { // Check construction from extents_type\r\n        Mapping m{ext};\r\n        assert(m.extents() == ext);\r\n        static_assert(is_nothrow_constructible_v<Mapping, Ext>);\r\n        // Other tests are defined in 'check_construction_from_extents' function\r\n    }\r\n\r\n    using OtherIndexType = long long;\r\n    using Ext2           = extents<OtherIndexType, Extents...>;\r\n    using Mapping2       = layout_left::mapping<Ext2>;\r\n\r\n    { // Check construction from other layout_left::mapping\r\n        Mapping m1{ext};\r\n        Mapping2 m2{m1};\r\n        assert(m1 == m2);\r\n        static_assert(is_nothrow_constructible_v<Mapping2, Mapping>);\r\n        // Other tests are defined in 'check_construction_from_other_left_mapping' function\r\n    }\r\n\r\n    { // Check construction from layout_right::mapping\r\n        using RightMapping = layout_right::mapping<Ext>;\r\n        if constexpr (Ext::rank() <= 1) {\r\n            RightMapping right_mapping{ext};\r\n            [[maybe_unused]] Mapping m1{right_mapping};\r\n            [[maybe_unused]] Mapping2 m2{right_mapping};\r\n            assert(m1 == m2);\r\n            static_assert(is_nothrow_constructible_v<Mapping, RightMapping>);\r\n            static_assert(is_nothrow_constructible_v<Mapping2, RightMapping>);\r\n        } else {\r\n            static_assert(!is_constructible_v<Mapping, RightMapping>);\r\n            static_assert(!is_constructible_v<Mapping2, RightMapping>);\r\n        }\r\n        // Other tests are defined in 'check_construction_from_other_right_mapping' function\r\n    }\r\n\r\n    { // Check construction from layout_stride::mapping\r\n        array<IndexType, Ext::rank()> strides{};\r\n        if constexpr (Ext::rank() > 0) {\r\n            strides.front() = 1;\r\n            for (size_t i = 1; i < Ext::rank(); ++i) {\r\n                strides[i] = static_cast<IndexType>(strides[i - 1] * ext.extent(i - 1));\r\n            }\r\n        }\r\n\r\n        layout_stride::mapping<Ext> m1{ext, strides};\r\n        Mapping m2{m1};\r\n        assert(m1.extents() == m2.extents());\r\n        // Other tests are defined in 'check_construction_from_other_stride_mapping' function\r\n    }\r\n\r\n    Mapping m{ext}; // For later use\r\n\r\n    { // Check 'extents' function\r\n        assert(m.extents() == ext);\r\n        static_assert(noexcept(m.extents()));\r\n    }\r\n\r\n    { // Check 'required_span_size' function\r\n        same_as<IndexType> decltype(auto) rss = m.required_span_size();\r\n        assert(rss == static_cast<IndexType>((ext.extent(Indices) * ... * 1)));\r\n        static_assert(noexcept(m.required_span_size()));\r\n        // Other tests are defined in 'check_mapping_properties'\r\n    }\r\n\r\n    { // Check operator()\r\n        assert(m(((void) Indices, 0)...) == 0);\r\n        assert(m((ext.extent(Indices) - 1)...) == static_cast<IndexType>((ext.extent(Indices) * ... * 1)) - 1);\r\n        static_assert(noexcept(m(((void) Indices, 0)...)));\r\n        static_assert(noexcept(m((ext.extent(Indices) - 1)...)));\r\n        // Other tests are defined in 'check_call_operator' function\r\n    }\r\n\r\n    { // Check 'is_always_[unique/exhaustive/strided]' functions\r\n        static_assert(Mapping::is_always_unique());\r\n        static_assert(Mapping::is_always_exhaustive());\r\n        static_assert(Mapping::is_always_strided());\r\n    }\r\n\r\n    { // Check 'is_[unique/exhaustive/strided]' functions\r\n        static_assert(Mapping::is_unique());\r\n        static_assert(Mapping::is_exhaustive());\r\n        static_assert(Mapping::is_strided());\r\n        // Other tests are defined in 'check_mapping_properties'\r\n    }\r\n\r\n    if constexpr (Ext::rank() > 0) { // Check 'stride' function\r\n        const IndexType expected_value =\r\n            static_cast<IndexType>((ext.extent(Indices) * ... * 1) / ext.extent(Ext::rank() - 1));\r\n        assert(m.stride(Ext::rank() - 1) == expected_value);\r\n        assert(m.stride(0) == 1);\r\n        static_assert(noexcept(m.stride(Ext::rank() - 1)));\r\n        static_assert(noexcept(m.stride(0)));\r\n        // Other tests are defined in 'check_stride_function'\r\n    } else {\r\n        static_assert(!CheckStrideMemberFunction<Mapping>);\r\n    }\r\n\r\n    { // Check comparisons\r\n        assert(m == m);\r\n        assert(!(m != m));\r\n        static_assert(noexcept(m == m));\r\n        static_assert(noexcept(m != m));\r\n        // Other tests are defined in 'check_comparisons' function\r\n    }\r\n}\r\n\r\nvoid check_mapping_properties() {\r\n    if constexpr (!is_permissive) {\r\n        auto check = [](const auto& mapping) {\r\n            const auto props = get_mapping_properties(mapping);\r\n            assert(props.req_span_size == mapping.required_span_size());\r\n            assert(props.uniqueness);\r\n            assert(props.exhaustiveness);\r\n            assert(props.strideness);\r\n        };\r\n\r\n        using M1 = layout_left::mapping<extents<int, 2, 3, 5>>;\r\n        check(M1{});\r\n\r\n        using M2 = layout_left::mapping<extents<unsigned long, 8, dynamic_extent, 5>>;\r\n        check(M2{M2::extents_type{6}});\r\n\r\n        using M3 = layout_left::mapping<dextents<signed char, 4>>;\r\n        check(M3{M3::extents_type{3, 5, 4, 2}});\r\n    }\r\n}\r\n\r\nconstexpr void check_construction_from_extents() {\r\n    using Ext = extents<int, 2, 4, 6>;\r\n    Ext ext;\r\n\r\n    { // Check construction from 'extents_type'\r\n        layout_left::mapping<Ext> mp(ext);\r\n        assert(mp.extents() == ext);\r\n        static_assert(is_nothrow_constructible_v<decltype(mp), Ext>);\r\n    }\r\n\r\n    { // Check construction from other extents\r\n        layout_left::mapping<extents<long, dynamic_extent, 4, dynamic_extent>> mp(ext);\r\n        assert(mp.extents() == ext);\r\n        static_assert(is_nothrow_constructible_v<decltype(mp), Ext>);\r\n    }\r\n}\r\n\r\nconstexpr void check_construction_from_other_left_mapping() {\r\n    { // Check invalid construction\r\n        using Mapping = layout_left::mapping<extents<int, 3, 3>>;\r\n        static_assert(!is_constructible_v<Mapping, layout_left::mapping<extents<int, 3>>>);\r\n        static_assert(!is_constructible_v<Mapping, layout_left::mapping<extents<int, 3, 3, 3>>>);\r\n    }\r\n\r\n    { // Check implicit conversions\r\n        static_assert(!NotImplicitlyConstructibleFrom<layout_left::mapping<extents<int, 3>>,\r\n            layout_left::mapping<extents<int, 3>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<layout_left::mapping<extents<int, 3>>,\r\n            layout_left::mapping<extents<long long, 3>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<layout_left::mapping<extents<int, 3, 3>>,\r\n            layout_left::mapping<extents<int, dynamic_extent, 3>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<layout_left::mapping<extents<int, 3, 3>>,\r\n            layout_left::mapping<extents<int, dynamic_extent, dynamic_extent>>>);\r\n    }\r\n\r\n    { // Check effects\r\n        layout_left::mapping<extents<int, 5, 3, 5>> m1;\r\n        layout_left::mapping<dextents<short, 3>> m2{m1};\r\n        assert(m2.extents().extent(0) == 5);\r\n        assert(m2.extents().extent(1) == 3);\r\n        assert(m2.extents().extent(2) == 5);\r\n        assert(m1.extents() == m2.extents());\r\n    }\r\n}\r\n\r\nconstexpr void check_construction_from_other_right_mapping() {\r\n    { // Check construction from layout_right::mapping<E> with various values of E::rank()\r\n        static_assert(is_nothrow_constructible_v<layout_left::mapping<dextents<int, 0>>,\r\n            layout_right::mapping<dextents<int, 0>>>);\r\n        static_assert(is_nothrow_constructible_v<layout_left::mapping<dextents<int, 1>>,\r\n            layout_right::mapping<dextents<int, 1>>>);\r\n        static_assert(\r\n            !is_constructible_v<layout_left::mapping<dextents<int, 2>>, layout_right::mapping<dextents<int, 2>>>);\r\n        static_assert(\r\n            !is_constructible_v<layout_left::mapping<dextents<int, 3>>, layout_right::mapping<dextents<int, 3>>>);\r\n    }\r\n\r\n    { // Check construction from layout_right::mapping<E> when E is invalid\r\n        using Mapping = layout_left::mapping<extents<int, 3>>;\r\n        static_assert(!is_constructible_v<Mapping, layout_right::mapping<extents<int, 1>>>);\r\n        static_assert(!is_constructible_v<Mapping, layout_right::mapping<extents<int, 2>>>);\r\n    }\r\n\r\n    { // Check implicit conversions\r\n        using Mapping = layout_left::mapping<extents<int, 3>>;\r\n        static_assert(!NotImplicitlyConstructibleFrom<Mapping, layout_right::mapping<extents<int, 3>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<Mapping, layout_right::mapping<extents<long long, 3>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<Mapping, layout_right::mapping<extents<int, dynamic_extent>>>);\r\n    }\r\n\r\n    { // Check effects\r\n        layout_right::mapping<extents<int, 8>> m1;\r\n        layout_left::mapping<dextents<signed char, 1>> m2{m1};\r\n        assert(m2.extents().extent(0) == 8);\r\n    }\r\n}\r\n\r\nconstexpr void check_construction_from_other_stride_mapping() {\r\n    { // Check construction from layout_stride::mapping<E> with various values of E::rank()\r\n        static_assert(is_nothrow_constructible_v<layout_left::mapping<dextents<int, 0>>,\r\n            layout_stride::mapping<dextents<int, 0>>>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<layout_left::mapping<dextents<int, 1>>,\r\n            layout_stride::mapping<dextents<int, 1>>>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<layout_left::mapping<dextents<int, 2>>,\r\n            layout_stride::mapping<dextents<int, 2>>>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<layout_left::mapping<dextents<int, 3>>,\r\n            layout_stride::mapping<dextents<int, 3>>>); // strengthened\r\n    }\r\n\r\n    { // Check construction from layout_stride::mapping<E> when E is invalid\r\n        using Mapping = layout_left::mapping<extents<int, 3>>;\r\n        static_assert(!is_constructible_v<Mapping, layout_stride::mapping<extents<int, 1>>>);\r\n        static_assert(!is_constructible_v<Mapping, layout_stride::mapping<extents<int, 2>>>);\r\n    }\r\n\r\n    { // Check correctness\r\n        using Ext = extents<int, 4, 3, 2, 3, 4>;\r\n        layout_stride::mapping<Ext> m1{Ext{}, array{1, 4, 12, 24, 72}};\r\n        layout_left::mapping<Ext> m2{m1};\r\n        assert(m2.extents().extent(0) == 4);\r\n        assert(m2.extents().extent(1) == 3);\r\n        assert(m2.stride(2) == 12);\r\n        assert(m2.stride(3) == 24);\r\n        assert(m2.extents() == m1.extents());\r\n    }\r\n\r\n    { // Check implicit conversions\r\n        static_assert(\r\n            !NotImplicitlyConstructibleFrom<layout_left::mapping<extents<int>>, layout_stride::mapping<extents<int>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<layout_left::mapping<extents<int, 3>>,\r\n            layout_stride::mapping<extents<int, 3>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<layout_left::mapping<extents<int, 3>>,\r\n            layout_stride::mapping<extents<long long, 3>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<layout_left::mapping<extents<int, 3>>,\r\n            layout_stride::mapping<extents<int, dynamic_extent>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<layout_left::mapping<extents<int>>,\r\n            layout_stride::mapping<extents<long long>>>);\r\n    }\r\n}\r\n\r\nconstexpr void check_call_operator() {\r\n    { // Check call with invalid amount of indices\r\n        using Mapping = layout_left::mapping<dextents<int, 3>>;\r\n        static_assert(!CheckCallOperatorOfLayoutMapping<Mapping, int>);\r\n        static_assert(!CheckCallOperatorOfLayoutMapping<Mapping, int, int>);\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, int, int, int>);\r\n        static_assert(!CheckCallOperatorOfLayoutMapping<Mapping, int, int, int, int>);\r\n    }\r\n\r\n    { // Check call with invalid types\r\n        using Mapping = layout_left::mapping<dextents<long, 2>>;\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, long, long>);\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, long, short>);\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, long, ConvertibleToInt<long>>);\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, long, ConvertibleToInt<short>>);\r\n        static_assert(!CheckCallOperatorOfLayoutMapping<Mapping, long, NonConvertibleToAnything>);\r\n    }\r\n\r\n    { // Check call with types that might throw during conversion\r\n        using Mapping = layout_left::mapping<dextents<long long, 1>>;\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, ConvertibleToInt<long long, IsNothrow::yes>>);\r\n        static_assert(!CheckCallOperatorOfLayoutMapping<Mapping, ConvertibleToInt<long long, IsNothrow::no>>);\r\n    }\r\n\r\n    { // Check various mappings\r\n        layout_left::mapping<extents<short>> m1;\r\n        assert(m1() == 0);\r\n\r\n        layout_left::mapping<extents<int, 3>> m2;\r\n        assert(m2(0) == 0);\r\n        assert(m2(1) == 1);\r\n        assert(m2(2) == 2);\r\n\r\n        layout_left::mapping<dextents<long, 2>> m3{dextents<int, 2>{5, 6}};\r\n        assert(m3(0, 0) == 0);\r\n        assert(m3(1, 0) == 1);\r\n        assert(m3(0, 1) == 5);\r\n        assert(m3(1, 1) == 6);\r\n        assert(m3(2, 1) == 7);\r\n        assert(m3(1, 2) == 11);\r\n        assert(m3(4, 5) == 29);\r\n    }\r\n}\r\n\r\nconstexpr void check_stride_function() {\r\n    layout_left::mapping<extents<unsigned short, 2, 3, 5, 7, 11>> prime_mapping;\r\n\r\n    { // Check return type\r\n        same_as<unsigned short> decltype(auto) s = prime_mapping.stride(0);\r\n        assert(s == 1);\r\n    }\r\n\r\n    { // Check that argument is 'rank_type'\r\n        struct ConvertibleToRankType {\r\n            constexpr operator integral auto() const {\r\n                return 0;\r\n            }\r\n\r\n            constexpr operator size_t() const { // NB: 'rank_type' is always 'size_t'\r\n                return 1;\r\n            }\r\n        };\r\n\r\n        assert(prime_mapping.stride(ConvertibleToRankType{}) == 2); // 1 * 2\r\n    }\r\n\r\n    { // Check other strides\r\n        assert(prime_mapping.stride(2) == 6);\r\n        assert(prime_mapping.stride(3) == 30);\r\n        assert(prime_mapping.stride(4) == 210);\r\n    }\r\n}\r\n\r\nconstexpr void check_comparisons() {\r\n    using StaticMapping  = layout_left::mapping<extents<int, 3>>;\r\n    using DynamicMapping = layout_left::mapping<dextents<int, 1>>;\r\n\r\n    { // Check equality_comparable_with concept\r\n        static_assert(equality_comparable_with<StaticMapping, DynamicMapping>);\r\n        static_assert(!equality_comparable_with<StaticMapping, layout_left::mapping<extents<int, 3, 3>>>);\r\n        static_assert(!equality_comparable_with<DynamicMapping, layout_left::mapping<dextents<int, 2>>>);\r\n    }\r\n\r\n    { // Check correctness\r\n        StaticMapping m1;\r\n        DynamicMapping m2{dextents<int, 1>{3}};\r\n        DynamicMapping m3{dextents<int, 1>{2}};\r\n        assert(m1 == m2);\r\n        assert(m2 != m3);\r\n        assert(m1 != m3);\r\n    }\r\n}\r\n\r\nconstexpr void check_ctad() {\r\n    using Ext = extents<long, 3, 3>;\r\n    layout_left::mapping m{Ext{}};\r\n    static_assert(same_as<decltype(m), layout_left::mapping<Ext>>);\r\n    assert(m.extents().extent(0) == 3);\r\n    assert(m.stride(1) == 3);\r\n}\r\n\r\nconstexpr void check_correctness() {\r\n    { // empty extents\r\n        const array<int, 0> values{};\r\n        mdspan<const int, extents<int>, layout_left> nothing{values.data()};\r\n        assert(nothing.size() == 1);\r\n    }\r\n\r\n    { // regular vector\r\n        const array values{0, 1, 2};\r\n        mdspan<const int, extents<int, 3>, layout_left> vec{values.data()};\r\n\r\n        assert(vec[0] == 0);\r\n        assert(vec[1] == 1);\r\n        assert(vec[2] == 2);\r\n    }\r\n\r\n    { // 3x2 matrix with column-major order\r\n        const array values{0, 1, 2, 3, 4, 5};\r\n        mdspan<const int, extents<int, 3, 2>, layout_left> matrix{values.data()};\r\n\r\n        assert((matrix[0, 0] == 0));\r\n        assert((matrix[1, 0] == 1));\r\n        assert((matrix[2, 0] == 2));\r\n        assert((matrix[0, 1] == 3));\r\n        assert((matrix[1, 1] == 4));\r\n        assert((matrix[2, 1] == 5));\r\n    }\r\n\r\n    { // 3x2x4 tensor\r\n        const array values{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};\r\n        mdspan<const int, dextents<size_t, 3>, layout_left> tensor{values.data(), 3, 2, 4};\r\n\r\n        assert((tensor[0, 0, 0] == 0));\r\n        assert((tensor[2, 0, 0] == 2));\r\n        assert((tensor[1, 1, 1] == 10));\r\n        assert((tensor[0, 0, 3] == 18));\r\n        assert((tensor[2, 1, 2] == 17));\r\n        assert((tensor[2, 1, 3] == 23));\r\n    }\r\n\r\n    { // 2x3x2x3 tensor\r\n        const array values{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,\r\n            26, 27, 28, 29, 30, 31, 32, 33, 34, 35};\r\n        mdspan<const int, extents<long, 2, 3, dynamic_extent, dynamic_extent>, layout_left> tensor{values.data(), 2, 3};\r\n\r\n        assert((tensor[0, 0, 0, 0] == 0));\r\n        assert((tensor[1, 0, 0, 0] == 1));\r\n        assert((tensor[0, 1, 1, 0] == 8));\r\n        assert((tensor[0, 0, 0, 1] == 12));\r\n        assert((tensor[0, 0, 0, 2] == 24));\r\n        assert((tensor[0, 2, 0, 2] == 28));\r\n        assert((tensor[1, 2, 1, 2] == 35));\r\n    }\r\n}\r\n\r\nconstexpr bool test() {\r\n    check_members_with_various_extents([]<class E>(const E& e) { check_members(e, make_index_sequence<E::rank()>{}); });\r\n    if (!is_constant_evaluated()) { // too heavy for compile time\r\n        check_mapping_properties();\r\n    }\r\n    check_construction_from_extents();\r\n    check_construction_from_other_left_mapping();\r\n    check_construction_from_other_right_mapping();\r\n    check_construction_from_other_stride_mapping();\r\n    check_call_operator();\r\n    check_stride_function();\r\n    check_comparisons();\r\n    check_ctad();\r\n    check_correctness();\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(test());\r\n    test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_layout_left_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_layout_left_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cstddef>\r\n#include <mdspan>\r\n#include <span>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\nvoid test_construction_from_extents_type_with_signed_index_type() {\r\n    using Ext = dextents<signed char, 3>;\r\n    // The size of the multidimensional index space e must be representable as a value of type index_type\r\n    [[maybe_unused]] layout_left::mapping<Ext> m{Ext{5, 4, 7}};\r\n}\r\n\r\nvoid test_construction_from_extents_type_with_unsigned_index_type() {\r\n    using Ext = dextents<unsigned char, 3>;\r\n    // The size of the multidimensional index space e must be representable as a value of type index_type\r\n    [[maybe_unused]] layout_left::mapping<Ext> m{Ext{5, 10, 6}};\r\n}\r\n\r\nvoid test_construction_from_other_left_mapping() {\r\n    layout_left::mapping<dextents<int, 1>> m1{dextents<int, 1>{256}};\r\n    // Value of other.required_span_size() must be representable as a value of type index_type\r\n    layout_left::mapping<dextents<unsigned char, 1>> m2{m1};\r\n}\r\n\r\nvoid test_construction_from_other_right_mapping() {\r\n    layout_right::mapping<dextents<int, 1>> m1{dextents<int, 1>{256}};\r\n    // Value of other.required_span_size() must be representable as a value of type index_type\r\n    layout_left::mapping<dextents<unsigned char, 1>> m2{m1};\r\n}\r\n\r\nvoid test_construction_from_other_stride_mapping_1() {\r\n    using Ext = extents<int, 2, 4>;\r\n    layout_stride::mapping<Ext> m1{Ext{}, array{4, 1}};\r\n    // For all r in the range [0, extents_type::rank()), other.stride(r) must be equal to\r\n    // extents().fwd-prod-of-extents(r)\r\n    [[maybe_unused]] layout_left::mapping<Ext> m2{m1};\r\n}\r\n\r\nvoid test_construction_from_other_stride_mapping_2() {\r\n    layout_stride::mapping<dextents<int, 1>> m1{dextents<int, 1>{256}, array{1}};\r\n    // Value of other.required_span_size() must be representable as a value of type index_type\r\n    layout_left::mapping<dextents<unsigned char, 1>> m2{m1};\r\n}\r\n\r\nvoid test_call_operator() {\r\n    layout_left::mapping<extents<int, 3, 4, 5>> m;\r\n    // Value of extents_type::index-cast(i) must be a multidimensional index in extents_\r\n    (void) m(2, 3, 5);\r\n}\r\n\r\nvoid test_stride_function() {\r\n    layout_left::mapping<extents<int, 3>> m;\r\n    // Value of i must be less than extents_type::rank()\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // yay, /analyze catches this mistake at compile time!\r\n    (void) m.stride(1);\r\n#pragma warning(pop)\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_construction_from_extents_type_with_signed_index_type,\r\n        test_construction_from_extents_type_with_unsigned_index_type,\r\n        test_construction_from_other_left_mapping,\r\n        test_construction_from_other_right_mapping,\r\n        test_construction_from_other_stride_mapping_1,\r\n        test_construction_from_other_stride_mapping_2,\r\n        test_call_operator,\r\n        test_stride_function,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_layout_right/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_layout_right/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <mdspan>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <test_mdspan_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class IndexType, size_t... Extents, size_t... Indices>\r\nconstexpr void check_members(const extents<IndexType, Extents...>& ext, index_sequence<Indices...>) {\r\n    using Ext     = extents<IndexType, Extents...>;\r\n    using Mapping = layout_right::mapping<Ext>;\r\n\r\n    // layout_right meets the requirements of N5001 [mdspan.layout.policy.overview]/1\r\n    static_assert(check_layout_mapping_policy_requirements<layout_right, Ext>());\r\n    static_assert(is_trivially_copyable_v<layout_right>);\r\n    static_assert(is_trivially_default_constructible_v<layout_right>);\r\n\r\n    // layout_right::mapping<Ext> is a trivially copyable type that models regular for each Ext\r\n    static_assert(is_trivially_copyable_v<Mapping>);\r\n    static_assert(regular<Mapping>);\r\n\r\n    // Check member types\r\n    static_assert(same_as<typename Mapping::extents_type, Ext>);\r\n    static_assert(same_as<typename Mapping::index_type, typename Ext::index_type>);\r\n    static_assert(same_as<typename Mapping::size_type, typename Ext::size_type>);\r\n    static_assert(same_as<typename Mapping::rank_type, typename Ext::rank_type>);\r\n    static_assert(same_as<typename Mapping::layout_type, layout_right>);\r\n\r\n    { // Check default and copy constructor\r\n        const Mapping m;\r\n        Mapping cpy = m;\r\n        assert(cpy == m);\r\n        static_assert(is_nothrow_default_constructible_v<Mapping>);\r\n        static_assert(is_nothrow_copy_constructible_v<Mapping>);\r\n    }\r\n\r\n    { // Check copy assignment operator\r\n        const Mapping m;\r\n        Mapping cpy;\r\n        cpy = m;\r\n        assert(cpy == m);\r\n        static_assert(is_nothrow_copy_assignable_v<Mapping>);\r\n    }\r\n\r\n    { // Check construction from extents_type\r\n        Mapping m{ext};\r\n        assert(m.extents() == ext);\r\n        static_assert(is_nothrow_constructible_v<Mapping, Ext>);\r\n        // Other tests are defined in 'check_construction_from_extents' function\r\n    }\r\n\r\n    using OtherIndexType = long long;\r\n    using Ext2           = extents<OtherIndexType, Extents...>;\r\n    using Mapping2       = layout_right::mapping<Ext2>;\r\n\r\n    { // Check construction from other layout_right::mapping\r\n        Mapping m1{ext};\r\n        Mapping2 m2{m1};\r\n        assert(m1 == m2);\r\n        static_assert(is_nothrow_constructible_v<Mapping2, Mapping>);\r\n        // Other tests are defined in 'check_construction_from_other_right_mapping' function\r\n    }\r\n\r\n    { // Check construction from layout_left::mapping\r\n        using LeftMapping = layout_left::mapping<Ext>;\r\n        if constexpr (Ext::rank() <= 1) {\r\n            LeftMapping left_mapping{ext};\r\n            [[maybe_unused]] Mapping m1{left_mapping};\r\n            [[maybe_unused]] Mapping2 m2{left_mapping};\r\n            assert(m1 == m2);\r\n            static_assert(is_nothrow_constructible_v<Mapping, LeftMapping>);\r\n            static_assert(is_nothrow_constructible_v<Mapping2, LeftMapping>);\r\n        } else {\r\n            static_assert(!is_constructible_v<Mapping, LeftMapping>);\r\n            static_assert(!is_constructible_v<Mapping2, LeftMapping>);\r\n        }\r\n        // Other tests are defined in 'check_construction_from_other_left_mapping' function\r\n    }\r\n\r\n    { // Check construction from layout_stride::mapping\r\n        array<IndexType, Ext::rank()> strides{};\r\n        if constexpr (Ext::rank() > 0) {\r\n            strides.back() = 1;\r\n            for (size_t i = Ext::rank() - 1; i-- > 0;) {\r\n                strides[i] = static_cast<IndexType>(strides[i + 1] * ext.extent(i + 1));\r\n            }\r\n        }\r\n\r\n        layout_stride::mapping<Ext> m1{ext, strides};\r\n        Mapping m2{m1};\r\n        assert(m1.extents() == m2.extents());\r\n        // Other tests are defined in 'check_construction_from_other_stride_mapping' function\r\n    }\r\n\r\n    Mapping m{ext}; // For later use\r\n\r\n    { // Check 'extents' function\r\n        assert(m.extents() == ext);\r\n        static_assert(noexcept(m.extents()));\r\n    }\r\n\r\n    { // Check 'required_span_size' function\r\n        same_as<IndexType> decltype(auto) rss = m.required_span_size();\r\n        assert(rss == static_cast<IndexType>((ext.extent(Indices) * ... * 1)));\r\n        static_assert(noexcept(m.required_span_size()));\r\n        // Other tests are defined in 'check_mapping_properties'\r\n    }\r\n\r\n    { // Check operator()\r\n        assert(m(((void) Indices, 0)...) == 0);\r\n        assert(m((ext.extent(Indices) - 1)...) == static_cast<IndexType>((ext.extent(Indices) * ... * 1)) - 1);\r\n        static_assert(noexcept(m(((void) Indices, 0)...)));\r\n        static_assert(noexcept(m((ext.extent(Indices) - 1)...)));\r\n        // Other tests are defined in 'check_call_operator' function\r\n    }\r\n\r\n    { // Check 'is_always_[unique/exhaustive/strided]' functions\r\n        static_assert(Mapping::is_always_unique());\r\n        static_assert(Mapping::is_always_exhaustive());\r\n        static_assert(Mapping::is_always_strided());\r\n    }\r\n\r\n    { // Check 'is_[unique/exhaustive/strided]' functions\r\n        static_assert(Mapping::is_unique());\r\n        static_assert(Mapping::is_exhaustive());\r\n        static_assert(Mapping::is_strided());\r\n        // Other tests are defined in 'check_mapping_properties'\r\n    }\r\n\r\n    if constexpr (Ext::rank() > 0) { // Check 'stride' function\r\n        const IndexType expected_stride0 = static_cast<IndexType>((ext.extent(Indices) * ... * 1) / ext.extent(0));\r\n        assert(m.stride(0) == expected_stride0);\r\n        assert(m.stride(Ext::rank() - 1) == 1);\r\n        static_assert(noexcept(m.stride(Ext::rank() - 1)));\r\n        static_assert(noexcept(m.stride(0)));\r\n        // Other tests are defined in 'check_stride_function'\r\n    } else {\r\n        static_assert(!CheckStrideMemberFunction<Mapping>);\r\n    }\r\n\r\n    { // Check comparisons\r\n        assert(m == m);\r\n        assert(!(m != m));\r\n        static_assert(noexcept(m == m));\r\n        static_assert(noexcept(m != m));\r\n        // Other tests are defined in 'check_comparisons' function\r\n    }\r\n}\r\n\r\nvoid check_mapping_properties() {\r\n    if constexpr (!is_permissive) {\r\n        auto check = [](const auto& mapping) {\r\n            const auto props = get_mapping_properties(mapping);\r\n            assert(props.req_span_size == mapping.required_span_size());\r\n            assert(props.uniqueness);\r\n            assert(props.exhaustiveness);\r\n            assert(props.strideness);\r\n        };\r\n\r\n        using M1 = layout_right::mapping<extents<int, 7, 11, 13>>;\r\n        check(M1{});\r\n\r\n        using M2 = layout_right::mapping<extents<unsigned long, dynamic_extent, 4, dynamic_extent>>;\r\n        check(M2{M2::extents_type{2, 6}});\r\n\r\n        using M3 = layout_right::mapping<dextents<unsigned char, 4>>;\r\n        check(M3{M3::extents_type{4, 3, 5, 4}});\r\n    }\r\n}\r\n\r\nconstexpr void check_construction_from_extents() {\r\n    using Ext = extents<int, 6, 4, 2>;\r\n    Ext ext;\r\n\r\n    { // Check construction from 'extents_type'\r\n        layout_right::mapping<Ext> mp(ext);\r\n        assert(mp.extents() == ext);\r\n        static_assert(is_nothrow_constructible_v<decltype(mp), Ext>);\r\n    }\r\n\r\n    { // Check construction from other extents\r\n        layout_right::mapping<extents<long, dynamic_extent, 4, dynamic_extent>> mp(ext);\r\n        assert(mp.extents() == ext);\r\n        static_assert(is_nothrow_constructible_v<decltype(mp), Ext>);\r\n    }\r\n}\r\n\r\nconstexpr void check_construction_from_other_right_mapping() {\r\n    { // Check invalid construction\r\n        using Mapping = layout_right::mapping<extents<int, 3, 3>>;\r\n        static_assert(!is_constructible_v<Mapping, layout_right::mapping<extents<int, 3>>>);\r\n        static_assert(!is_constructible_v<Mapping, layout_right::mapping<extents<int, 3, 3, 3>>>);\r\n    }\r\n\r\n    { // Check implicit conversions\r\n        static_assert(!NotImplicitlyConstructibleFrom<layout_right::mapping<extents<int, 3>>,\r\n            layout_right::mapping<extents<int, 3>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<layout_right::mapping<extents<int, 3>>,\r\n            layout_right::mapping<extents<long long, 3>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<layout_right::mapping<extents<int, 3, 3>>,\r\n            layout_right::mapping<extents<int, dynamic_extent, 3>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<layout_right::mapping<extents<int, 3, 3>>,\r\n            layout_right::mapping<extents<int, dynamic_extent, dynamic_extent>>>);\r\n    }\r\n\r\n    { // Check effects\r\n        layout_right::mapping<extents<unsigned int, 6, 2, 6>> m1;\r\n        layout_right::mapping<dextents<unsigned short, 3>> m2{m1};\r\n        assert(m2.extents().extent(0) == 6);\r\n        assert(m2.extents().extent(1) == 2);\r\n        assert(m2.extents().extent(2) == 6);\r\n        assert(m1.extents() == m2.extents());\r\n    }\r\n}\r\n\r\nconstexpr void check_construction_from_other_left_mapping() {\r\n    { // Check construction from layout_left::mapping<E> with various values of E::rank()\r\n        static_assert(is_nothrow_constructible_v<layout_right::mapping<dextents<int, 0>>,\r\n            layout_left::mapping<dextents<int, 0>>>);\r\n        static_assert(is_nothrow_constructible_v<layout_right::mapping<dextents<int, 1>>,\r\n            layout_left::mapping<dextents<int, 1>>>);\r\n        static_assert(\r\n            !is_constructible_v<layout_right::mapping<dextents<int, 2>>, layout_left::mapping<dextents<int, 2>>>);\r\n        static_assert(\r\n            !is_constructible_v<layout_right::mapping<dextents<int, 3>>, layout_left::mapping<dextents<int, 3>>>);\r\n    }\r\n\r\n    { // Check construction from layout_left::mapping<E> when E is invalid\r\n        using Mapping = layout_right::mapping<extents<int, 3>>;\r\n        static_assert(!is_constructible_v<Mapping, layout_left::mapping<extents<int, 1>>>);\r\n        static_assert(!is_constructible_v<Mapping, layout_left::mapping<extents<int, 2>>>);\r\n    }\r\n\r\n    { // Check implicit conversions\r\n        using Mapping = layout_right::mapping<extents<int, 4>>;\r\n        static_assert(!NotImplicitlyConstructibleFrom<Mapping, layout_left::mapping<extents<int, 4>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<Mapping, layout_left::mapping<extents<long long, 4>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<Mapping, layout_left::mapping<extents<int, dynamic_extent>>>);\r\n    }\r\n\r\n    { // Check effects\r\n        layout_left::mapping<extents<int, 8>> m1;\r\n        layout_right::mapping<dextents<signed char, 1>> m2{m1};\r\n        assert(m2.extents().extent(0) == 8);\r\n    }\r\n}\r\n\r\nconstexpr void check_construction_from_other_stride_mapping() {\r\n    { // Check construction from layout_stride::mapping<E> with various values of E::rank()\r\n        static_assert(is_nothrow_constructible_v<layout_right::mapping<dextents<int, 0>>,\r\n            layout_stride::mapping<dextents<int, 0>>>);\r\n        static_assert(is_nothrow_constructible_v<layout_right::mapping<dextents<int, 1>>,\r\n            layout_stride::mapping<dextents<int, 1>>>);\r\n        static_assert(is_nothrow_constructible_v<layout_right::mapping<dextents<int, 2>>,\r\n            layout_stride::mapping<dextents<int, 2>>>);\r\n        static_assert(is_nothrow_constructible_v<layout_right::mapping<dextents<int, 3>>,\r\n            layout_stride::mapping<dextents<int, 3>>>);\r\n    }\r\n\r\n    { // Check construction from layout_stride::mapping<E> when E is invalid\r\n        using Mapping = layout_right::mapping<extents<int, 3>>;\r\n        static_assert(!is_constructible_v<Mapping, layout_stride::mapping<extents<int, 1>>>);\r\n        static_assert(!is_constructible_v<Mapping, layout_stride::mapping<extents<int, 2>>>);\r\n    }\r\n\r\n    { // Check correctness\r\n        using Ext = extents<int, 4, 3, 2, 3, 4>;\r\n        layout_stride::mapping<Ext> m1{Ext{}, array{72, 24, 12, 4, 1}};\r\n        layout_right::mapping<Ext> m2{m1};\r\n        assert(m2.extents().extent(0) == 4);\r\n        assert(m2.extents().extent(1) == 3);\r\n        assert(m2.stride(2) == 12);\r\n        assert(m2.stride(3) == 4);\r\n        assert(m2.extents() == m1.extents());\r\n    }\r\n\r\n    { // Check implicit conversions\r\n        static_assert(\r\n            !NotImplicitlyConstructibleFrom<layout_right::mapping<extents<int>>, layout_stride::mapping<extents<int>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<layout_right::mapping<extents<int, 3>>,\r\n            layout_stride::mapping<extents<int, 3>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<layout_right::mapping<extents<int, 3>>,\r\n            layout_stride::mapping<extents<long long, 3>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<layout_right::mapping<extents<int, 3>>,\r\n            layout_stride::mapping<extents<int, dynamic_extent>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<layout_right::mapping<extents<int>>,\r\n            layout_stride::mapping<extents<long long>>>);\r\n    }\r\n}\r\n\r\nconstexpr void check_call_operator() {\r\n    { // Check call with invalid amount of indices\r\n        using Mapping = layout_right::mapping<dextents<int, 3>>;\r\n        static_assert(!CheckCallOperatorOfLayoutMapping<Mapping, int>);\r\n        static_assert(!CheckCallOperatorOfLayoutMapping<Mapping, int, int>);\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, int, int, int>);\r\n        static_assert(!CheckCallOperatorOfLayoutMapping<Mapping, int, int, int, int>);\r\n    }\r\n\r\n    { // Check call with invalid types\r\n        using Mapping = layout_right::mapping<dextents<long, 2>>;\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, long, long>);\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, long, short>);\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, long, ConvertibleToInt<long>>);\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, long, ConvertibleToInt<short>>);\r\n        static_assert(!CheckCallOperatorOfLayoutMapping<Mapping, long, NonConvertibleToAnything>);\r\n    }\r\n\r\n    { // Check call with types that might throw during conversion\r\n        using Mapping = layout_right::mapping<dextents<long long, 1>>;\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, ConvertibleToInt<long long, IsNothrow::yes>>);\r\n        static_assert(!CheckCallOperatorOfLayoutMapping<Mapping, ConvertibleToInt<long long, IsNothrow::no>>);\r\n    }\r\n\r\n    { // Check various mappings\r\n        layout_right::mapping<extents<short>> m1;\r\n        assert(m1() == 0);\r\n\r\n        layout_right::mapping<dextents<int, 1>> m2{dextents<int, 1>{4}};\r\n        assert(m2(0) == 0);\r\n        assert(m2(1) == 1);\r\n        assert(m2(2) == 2);\r\n        assert(m2(3) == 3);\r\n\r\n        layout_right::mapping<extents<long, 4, 5>> m3;\r\n        assert(m3(0, 0) == 0);\r\n        assert(m3(0, 1) == 1);\r\n        assert(m3(1, 0) == 5);\r\n        assert(m3(1, 1) == 6);\r\n        assert(m3(1, 2) == 7);\r\n        assert(m3(2, 1) == 11);\r\n        assert(m3(2, 2) == 12);\r\n        assert(m3(3, 4) == 19);\r\n    }\r\n}\r\n\r\nconstexpr void check_stride_function() {\r\n    layout_right::mapping<extents<unsigned short, 2, 3, 5, 7, 11>> prime_mapping;\r\n\r\n    { // Check return type\r\n        same_as<unsigned short> decltype(auto) s = prime_mapping.stride(0);\r\n        assert(s == 1155); // 11 * 7 * 5 * 3\r\n    }\r\n\r\n    { // Check that argument is 'rank_type'\r\n        struct ConvertibleToRankType {\r\n            constexpr operator integral auto() const {\r\n                return 0;\r\n            }\r\n\r\n            constexpr operator size_t() const { // NB: 'rank_type' is always 'size_t'\r\n                return 1;\r\n            }\r\n        };\r\n\r\n        assert(prime_mapping.stride(ConvertibleToRankType{}) == 385); // 11 * 7 * 5\r\n    }\r\n\r\n    { // Check other strides\r\n        assert(prime_mapping.stride(2) == 77);\r\n        assert(prime_mapping.stride(3) == 11);\r\n        assert(prime_mapping.stride(4) == 1);\r\n    }\r\n}\r\n\r\nconstexpr void check_comparisons() {\r\n    using StaticMapping  = layout_right::mapping<extents<int, 4, 4>>;\r\n    using DynamicMapping = layout_right::mapping<dextents<int, 2>>;\r\n\r\n    { // Check equality_comparable_with concept\r\n        static_assert(equality_comparable_with<StaticMapping, DynamicMapping>);\r\n        static_assert(!equality_comparable_with<StaticMapping, layout_right::mapping<extents<int, 3>>>);\r\n        static_assert(!equality_comparable_with<DynamicMapping, layout_right::mapping<dextents<int, 1>>>);\r\n    }\r\n\r\n    { // Check correctness\r\n        StaticMapping m1;\r\n        DynamicMapping m2{dextents<int, 2>{4, 4}};\r\n        DynamicMapping m3{dextents<int, 2>{2, 2}};\r\n        assert(m1 == m2);\r\n        assert(m2 != m3);\r\n        assert(m1 != m3);\r\n    }\r\n}\r\n\r\nconstexpr void check_ctad() {\r\n    using Ext = extents<long, 5, 5>;\r\n    layout_right::mapping m{Ext{}};\r\n    static_assert(same_as<decltype(m), layout_right::mapping<Ext>>);\r\n    assert(m.extents().extent(0) == 5);\r\n    assert(m.stride(1) == 1);\r\n}\r\n\r\nconstexpr void check_correctness() {\r\n    { // empty extents\r\n        const array<int, 0> vals{};\r\n        mdspan<const int, extents<int>, layout_right> nothing{vals.data()};\r\n        assert(nothing.size() == 1);\r\n    }\r\n\r\n    { // regular vector\r\n        const array vals{2, 1, 0};\r\n        mdspan<const int, extents<int, 3>, layout_right> vec{vals.data()};\r\n\r\n        assert(vec[0] == 2);\r\n        assert(vec[1] == 1);\r\n        assert(vec[2] == 0);\r\n    }\r\n\r\n    { // 4x3 matrix with row-major order\r\n        const array vals{11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};\r\n        mdspan<const int, extents<int, 4, 3>, layout_right> matrix{vals.data()};\r\n\r\n        assert((matrix[0, 0] == 11));\r\n        assert((matrix[0, 2] == 9));\r\n        assert((matrix[1, 1] == 7));\r\n        assert((matrix[2, 0] == 5));\r\n        assert((matrix[2, 2] == 3));\r\n        assert((matrix[3, 1] == 1));\r\n    }\r\n\r\n    { // 4x3x2 tensor\r\n        const array vals{23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};\r\n        mdspan<const int, dextents<size_t, 3>, layout_right> tensor{vals.data(), 4, 3, 2};\r\n\r\n        assert((tensor[0, 0, 0] == 23));\r\n        assert((tensor[0, 0, 1] == 22));\r\n        assert((tensor[0, 1, 0] == 21));\r\n        assert((tensor[0, 1, 1] == 20));\r\n        assert((tensor[1, 0, 0] == 17));\r\n        assert((tensor[1, 0, 1] == 16));\r\n        assert((tensor[1, 1, 0] == 15));\r\n        assert((tensor[1, 1, 1] == 14));\r\n        assert((tensor[2, 2, 1] == 6));\r\n        assert((tensor[3, 2, 1] == 0));\r\n    }\r\n\r\n    { // 3x2x3x2 tensor\r\n        const array vals{35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12,\r\n            11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};\r\n        mdspan<const int, extents<long, 3, dynamic_extent, 3, dynamic_extent>, layout_right> tensor{vals.data(), 2, 2};\r\n\r\n        assert((tensor[0, 0, 0, 0] == 35));\r\n        assert((tensor[0, 0, 0, 1] == 34));\r\n        assert((tensor[0, 0, 1, 0] == 33));\r\n        assert((tensor[0, 0, 1, 1] == 32));\r\n        assert((tensor[0, 1, 0, 0] == 29));\r\n        assert((tensor[0, 1, 0, 1] == 28));\r\n        assert((tensor[0, 1, 1, 0] == 27));\r\n        assert((tensor[0, 1, 1, 1] == 26));\r\n        assert((tensor[1, 0, 0, 0] == 23));\r\n        assert((tensor[1, 0, 0, 1] == 22));\r\n        assert((tensor[1, 0, 1, 0] == 21));\r\n        assert((tensor[1, 0, 1, 1] == 20));\r\n        assert((tensor[1, 1, 0, 0] == 17));\r\n        assert((tensor[1, 1, 0, 1] == 16));\r\n        assert((tensor[1, 1, 1, 0] == 15));\r\n        assert((tensor[1, 1, 1, 1] == 14));\r\n        assert((tensor[2, 0, 2, 0] == 7));\r\n        assert((tensor[2, 1, 2, 1] == 0));\r\n    }\r\n}\r\n\r\nconstexpr bool test() {\r\n    check_members_with_various_extents([]<class E>(const E& e) { check_members(e, make_index_sequence<E::rank()>{}); });\r\n    if (!is_constant_evaluated()) { // too heavy for compile time\r\n        check_mapping_properties();\r\n    }\r\n    check_construction_from_extents();\r\n    check_construction_from_other_right_mapping();\r\n    check_construction_from_other_left_mapping();\r\n    check_construction_from_other_stride_mapping();\r\n    check_call_operator();\r\n    check_stride_function();\r\n    check_comparisons();\r\n    check_ctad();\r\n    check_correctness();\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(test());\r\n    test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_layout_right_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_layout_right_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cstddef>\r\n#include <mdspan>\r\n#include <span>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\nvoid test_construction_from_extents_type_with_signed_index_type() {\r\n    using Ext = dextents<signed char, 3>;\r\n    // The size of the multidimensional index space e must be representable as a value of type index_type\r\n    [[maybe_unused]] layout_right::mapping<Ext> m{Ext{5, 4, 7}};\r\n}\r\n\r\nvoid test_construction_from_extents_type_with_unsigned_index_type() {\r\n    using Ext = dextents<unsigned char, 3>;\r\n    // The size of the multidimensional index space e must be representable as a value of type index_type\r\n    [[maybe_unused]] layout_right::mapping<Ext> m{Ext{5, 10, 6}};\r\n}\r\n\r\nvoid test_construction_from_other_right_mapping() {\r\n    layout_right::mapping<dextents<int, 1>> m1{dextents<int, 1>{256}};\r\n    // Value of other.required_span_size() must be representable as a value of type index_type\r\n    layout_right::mapping<dextents<unsigned char, 1>> m2{m1};\r\n}\r\n\r\nvoid test_construction_from_other_left_mapping() {\r\n    layout_left::mapping<dextents<int, 1>> m1{dextents<int, 1>{256}};\r\n    // Value of other.required_span_size() must be representable as a value of type index_type\r\n    layout_right::mapping<dextents<unsigned char, 1>> m2{m1};\r\n}\r\n\r\nvoid test_construction_from_other_stride_mapping_1() {\r\n    using Ext = extents<int, 2, 4>;\r\n    layout_stride::mapping<Ext> m1{Ext{}, array{1, 2}};\r\n    // For all r in the range [0, extents_type::rank()), other.stride(r) must be equal to\r\n    // extents().rev-prod-of-extents(r)\r\n    [[maybe_unused]] layout_right::mapping<Ext> m2{m1};\r\n}\r\n\r\nvoid test_construction_from_other_stride_mapping_2() {\r\n    layout_stride::mapping<dextents<int, 1>> m1{dextents<int, 1>{256}, array{1}};\r\n    // Value of other.required_span_size() must be representable as a value of type index_type\r\n    layout_right::mapping<dextents<unsigned char, 1>> m2{m1};\r\n}\r\n\r\nvoid test_call_operator() {\r\n    layout_right::mapping<extents<int, 5, 4, 3>> m;\r\n    // Value of extents_type::index-cast(i) must be a multidimensional index in extents_\r\n    (void) m(4, 3, 3);\r\n}\r\n\r\nvoid test_stride_function() {\r\n    layout_right::mapping<extents<int, 3>> m;\r\n    // Value of i must be less than extents_type::rank()\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // yay, /analyze catches this mistake at compile time!\r\n    (void) m.stride(1);\r\n#pragma warning(pop)\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_construction_from_extents_type_with_signed_index_type,\r\n        test_construction_from_extents_type_with_unsigned_index_type,\r\n        test_construction_from_other_right_mapping,\r\n        test_construction_from_other_left_mapping,\r\n        test_construction_from_other_stride_mapping_1,\r\n        test_construction_from_other_stride_mapping_2,\r\n        test_call_operator,\r\n        test_stride_function,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_layout_stride/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_layout_stride/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <mdspan>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <test_mdspan_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct CmpEqual {\r\n    template <class T, class U>\r\n    [[nodiscard]] constexpr bool operator()(T t, U u) const noexcept {\r\n        return cmp_equal(t, u);\r\n    }\r\n};\r\n\r\nstruct NotLayoutMappingAlikeAtAll {\r\n    template <class Extents>\r\n    class mapping : public layout_right::mapping<Extents> {\r\n    public:\r\n        using layout_type = NotLayoutMappingAlikeAtAll;\r\n\r\n    private:\r\n        using layout_right::mapping<Extents>::is_always_exhaustive;\r\n    };\r\n};\r\n\r\nstatic_assert(!_Layout_mapping_alike<NotLayoutMappingAlikeAtAll::mapping<extents<int, 4, 4>>>);\r\n\r\nenum class AlwaysUnique : bool { no, yes };\r\nenum class AlwaysStrided : bool { no, yes };\r\n\r\ntemplate <AlwaysUnique Unique, AlwaysStrided Strided>\r\nstruct LyingLayout {\r\n    template <class Extents>\r\n    class mapping : public layout_left::mapping<Extents> {\r\n    public:\r\n        using layout_type = LyingLayout;\r\n\r\n        constexpr bool is_unique() const {\r\n            return is_unique();\r\n        }\r\n\r\n        constexpr bool is_exhaustive() const {\r\n            return is_exhaustive();\r\n        }\r\n\r\n        constexpr bool is_strided() const {\r\n            return is_strided();\r\n        }\r\n\r\n        static constexpr bool is_always_unique() {\r\n            // might be a lie, allowed by the standard (N4950 [mdspan.layout.reqmts]/23 Note 5)\r\n            return to_underlying(Unique);\r\n        }\r\n\r\n        static constexpr bool is_always_exhaustive() {\r\n            return layout_left::mapping<Extents>::is_always_exhaustive();\r\n        }\r\n\r\n        static constexpr bool is_always_strided() {\r\n            // might be a lie, allowed by the standard (N4950 [mdspan.layout.reqmts]/27 Note 7)\r\n            return to_underlying(Strided);\r\n        }\r\n    };\r\n};\r\n\r\nstatic_assert(\r\n    check_layout_mapping_policy_requirements<LyingLayout<AlwaysUnique::no, AlwaysStrided::no>, extents<int, 3, 4>>());\r\nstatic_assert(\r\n    check_layout_mapping_policy_requirements<LyingLayout<AlwaysUnique::yes, AlwaysStrided::yes>, dextents<int, 3>>());\r\n\r\nstruct HollowLayout {\r\n    template <class Extents>\r\n        requires (Extents::rank() == 0)\r\n    class mapping : public layout_right::mapping<Extents> {\r\n    public:\r\n        using index_type  = Extents::index_type;\r\n        using layout_type = HollowLayout;\r\n\r\n        constexpr index_type operator()() const noexcept {\r\n            return 1; // NB: used by 'check_comparisons' (OFFSET(*this) != 0)\r\n        }\r\n\r\n        constexpr index_type required_span_size() const noexcept {\r\n            return 2;\r\n        }\r\n    };\r\n};\r\n\r\nstatic_assert(check_layout_mapping_policy_requirements<HollowLayout, extents<short>>());\r\n\r\ntemplate <size_t... Extents, class IndexType, class StridesIndexType, size_t... Indices>\r\nconstexpr void do_check_members(const extents<IndexType, Extents...>& ext,\r\n    const array<StridesIndexType, sizeof...(Extents)>& strs, index_sequence<Indices...>) {\r\n    using Ext     = extents<IndexType, Extents...>;\r\n    using Strides = array<IndexType, sizeof...(Extents)>;\r\n    using Mapping = layout_stride::mapping<Ext>;\r\n\r\n    // layout_stride meets the requirements of N5001 [mdspan.layout.policy.overview]/1\r\n    static_assert(check_layout_mapping_policy_requirements<layout_stride, Ext>());\r\n    static_assert(is_trivially_copyable_v<layout_stride>);\r\n    static_assert(is_trivially_default_constructible_v<layout_stride>);\r\n\r\n    // layout_stride::mapping<Ext> is a trivially copyable type that models regular for each Ext\r\n    static_assert(is_trivially_copyable_v<Mapping>);\r\n    static_assert(regular<Mapping>);\r\n\r\n    // Check member types\r\n    static_assert(same_as<typename Mapping::extents_type, Ext>);\r\n    static_assert(same_as<typename Mapping::index_type, typename Ext::index_type>);\r\n    static_assert(same_as<typename Mapping::size_type, typename Ext::size_type>);\r\n    static_assert(same_as<typename Mapping::rank_type, typename Ext::rank_type>);\r\n    static_assert(same_as<typename Mapping::layout_type, layout_stride>);\r\n\r\n    { // Check default and copy constructor\r\n        const Mapping m;\r\n        const Mapping cpy = m;\r\n        const layout_right::mapping<Ext> right_mapping;\r\n        assert(m == right_mapping);\r\n        assert(cpy == m);\r\n        static_assert(is_nothrow_default_constructible_v<Mapping>);\r\n        static_assert(is_nothrow_copy_constructible_v<Mapping>);\r\n    }\r\n\r\n    { // Check copy assignment operator\r\n        const Mapping m;\r\n        Mapping cpy;\r\n        cpy = m;\r\n        assert(cpy == m);\r\n        static_assert(is_nothrow_copy_assignable_v<Mapping>);\r\n    }\r\n\r\n    { // Check construction from extents_type and array\r\n        Mapping m{ext, strs};\r\n        assert(m.extents() == ext);\r\n        assert(ranges::equal(m.strides(), strs, CmpEqual{}));\r\n        static_assert(is_nothrow_constructible_v<Mapping, Ext, Strides>);\r\n        // Other tests are defined in 'check_construction_from_extents_and_array_or_span' function\r\n    }\r\n\r\n    { // Check construction from extents_type and span\r\n        using Span = span<const StridesIndexType, sizeof...(Extents)>;\r\n        Mapping m{ext, Span{strs}};\r\n        assert(m.extents() == ext);\r\n        assert(ranges::equal(m.strides(), strs, CmpEqual{}));\r\n        static_assert(is_nothrow_constructible_v<Mapping, Ext, Span>);\r\n        // Other tests are defined in 'check_construction_from_extents_and_array_or_span' function\r\n    }\r\n\r\n    using OtherIndexType = long long;\r\n    using Ext2           = extents<OtherIndexType, Extents...>;\r\n    using Mapping2       = layout_stride::mapping<Ext2>;\r\n\r\n    { // Check construction from other mappings\r\n        Mapping m1{ext, strs};\r\n        Mapping2 m2{m1};\r\n        assert(m1 == m2);\r\n        static_assert(is_nothrow_constructible_v<Mapping2, Mapping>);\r\n        // Other tests are defined in 'check_construction_from_other_mappings' function\r\n    }\r\n\r\n    Mapping m{ext, strs}; // For later use\r\n\r\n    { // Check 'extents' function\r\n        same_as<const Ext&> decltype(auto) ext2 = m.extents();\r\n        assert(ext2 == ext);\r\n        static_assert(noexcept(m.extents()));\r\n    }\r\n\r\n    { // Check 'strides' function\r\n        same_as<Strides> decltype(auto) strs2 = m.strides();\r\n        assert(ranges::equal(strs2, strs, CmpEqual{}));\r\n        static_assert(noexcept(m.strides()));\r\n        // Other tests are defined in 'check_stride_function'\r\n    }\r\n\r\n    { // Check 'required_span_size' function\r\n        if (((ext.extent(Indices) == 0) || ...)) {\r\n            assert(m.required_span_size() == 0);\r\n        } else {\r\n            const IndexType expected_value =\r\n                static_cast<IndexType>((((ext.extent(Indices) - 1) * strs[Indices]) + ... + 1));\r\n            assert(m.required_span_size() == expected_value);\r\n        }\r\n        static_assert(noexcept(m.required_span_size()));\r\n        // Other tests are defined in 'check_required_span_size' and 'check_mapping_properties' functions\r\n    }\r\n\r\n    // Call operator() is tested in 'check_call_operator' function\r\n\r\n    { // Check 'is_always_[unique/exhaustive/strided]' functions\r\n        static_assert(Mapping::is_always_unique());\r\n        static_assert(Mapping::is_always_exhaustive() == (Ext::rank() == 0 || ((Extents == 0) || ...)));\r\n        static_assert(Mapping::is_always_strided());\r\n    }\r\n\r\n    { // Check 'is_[unique/strided]' functions\r\n        static_assert(Mapping::is_unique());\r\n        static_assert(Mapping::is_strided());\r\n        // Tests of 'is_exhaustive' are defined in 'check_is_exhaustive' function\r\n        // Other tests are defined in 'check_mapping_properties'\r\n    }\r\n\r\n    { // Check 'stride' function\r\n        for (size_t i = 0; i < Ext::rank(); ++i) {\r\n            same_as<IndexType> decltype(auto) s = m.stride(i);\r\n            assert(cmp_equal(strs[i], s));\r\n        }\r\n    }\r\n\r\n    { // Check comparisons\r\n        assert(m == m);\r\n        assert(!(m != m));\r\n        static_assert(noexcept(m == m));\r\n        static_assert(noexcept(m != m));\r\n        // Other tests are defined in 'check_comparisons' function\r\n    }\r\n}\r\n\r\ntemplate <class StridesIndexType, class IndexType, size_t... Extents>\r\nconstexpr void check_members_with_different_strides_index_type(\r\n    extents<IndexType, Extents...> ext, const array<int, sizeof...(Extents)>& strides) {\r\n    array<StridesIndexType, sizeof...(Extents)> test_strides;\r\n    ranges::transform(strides, test_strides.begin(), [](auto i) { return static_cast<StridesIndexType>(i); });\r\n    do_check_members<Extents...>(ext, test_strides, make_index_sequence<sizeof...(Extents)>{});\r\n}\r\n\r\ntemplate <class IndexType, size_t... Extents>\r\nconstexpr void check_members(extents<IndexType, Extents...> ext, const array<int, sizeof...(Extents)>& strides) {\r\n    // Check signed strides\r\n    check_members_with_different_strides_index_type<signed char>(ext, strides);\r\n    check_members_with_different_strides_index_type<short>(ext, strides);\r\n    check_members_with_different_strides_index_type<int>(ext, strides);\r\n    check_members_with_different_strides_index_type<long>(ext, strides);\r\n    check_members_with_different_strides_index_type<long long>(ext, strides);\r\n\r\n    // Check unsigned strides\r\n    check_members_with_different_strides_index_type<unsigned char>(ext, strides);\r\n    check_members_with_different_strides_index_type<unsigned short>(ext, strides);\r\n    check_members_with_different_strides_index_type<unsigned int>(ext, strides);\r\n    check_members_with_different_strides_index_type<unsigned long>(ext, strides);\r\n    check_members_with_different_strides_index_type<unsigned long long>(ext, strides);\r\n}\r\n\r\nvoid check_mapping_properties() {\r\n    if constexpr (!is_permissive) {\r\n        auto check = [](const auto& mapping, const bool expected_exhaustiveness) {\r\n            const auto props = get_mapping_properties(mapping);\r\n            assert(props.req_span_size == mapping.required_span_size());\r\n            assert(props.uniqueness);\r\n            assert(props.exhaustiveness == expected_exhaustiveness);\r\n            assert(props.exhaustiveness == mapping.is_exhaustive());\r\n            assert(props.strideness);\r\n        };\r\n\r\n        { // Check exhaustive mappings\r\n            using M1 = layout_stride::mapping<extents<unsigned int, 4, 2, 3>>;\r\n            check(M1{M1::extents_type{}, array{6, 1, 2}}, true);\r\n\r\n            using M2 = layout_stride::mapping<extents<unsigned long long, dynamic_extent, dynamic_extent, 8>>;\r\n            check(M2{M2::extents_type{6, 7}, array{1, 48, 6}}, true);\r\n\r\n            using M3 = layout_stride::mapping<dextents<short, 4>>;\r\n            check(M3{M3::extents_type{3, 5, 2, 4}, array{20, 1, 60, 5}}, true);\r\n        }\r\n\r\n        { // Check non-exhaustive mappings\r\n            using M1 = layout_stride::mapping<extents<int, 2, 4, 3>>;\r\n            check(M1{M1::extents_type{}, array{9, 18, 1}}, false);\r\n\r\n            using M2 = layout_stride::mapping<extents<long long, 3, dynamic_extent, dynamic_extent>>;\r\n            check(M2{M2::extents_type{4, 3}, array{12, 36, 1}}, false);\r\n\r\n            using M3 = layout_stride::mapping<dextents<unsigned short, 3>>;\r\n            check(M3{M3::extents_type{4, 3, 2}, array{8, 32, 2}}, false);\r\n        }\r\n    }\r\n}\r\n\r\nconstexpr void check_construction_from_extents_and_array_or_span() {\r\n    { // Check invalid construction\r\n        using Mapping = layout_stride::mapping<extents<int, 3, 3>>;\r\n        static_assert(!is_constructible_v<Mapping, extents<int, 2, 3>, array<int, 2>>);\r\n        static_assert(!is_constructible_v<Mapping, extents<int, 2, 3>, span<int, 2>>);\r\n        static_assert(!is_constructible_v<Mapping, extents<int, 3, 3>, array<int, 3>>);\r\n        static_assert(!is_constructible_v<Mapping, extents<int, 3, 3>, span<int, 3>>);\r\n        static_assert(!is_constructible_v<Mapping, dextents<int, 2>, array<int, 2>>);\r\n        static_assert(!is_constructible_v<Mapping, dextents<int, 2>, span<int, 2>>);\r\n        static_assert(!is_constructible_v<Mapping, dextents<int, 2>, array<int, 3>>);\r\n        static_assert(!is_constructible_v<Mapping, dextents<int, 2>, span<int, 3>>);\r\n        static_assert(!is_constructible_v<Mapping, extents<int, 3, 3>, array<NonConvertibleToAnything, 2>>);\r\n        static_assert(!is_constructible_v<Mapping, extents<int, 3, 3>, span<NonConvertibleToAnything, 2>>);\r\n        static_assert(!is_constructible_v<Mapping, extents<int, 3, 3>, array<ConvertibleToInt<int, IsNothrow::no>, 2>>);\r\n        static_assert(!is_constructible_v<Mapping, extents<int, 3, 3>, span<ConvertibleToInt<int, IsNothrow::no>, 2>>);\r\n    }\r\n\r\n    using Ext = extents<int, 2, 4, 6>;\r\n    Ext ext;\r\n\r\n    { // Check construction from 'extents_type'\r\n        array strs{24, 1, 4};\r\n        layout_stride::mapping<Ext> m1(ext, strs);\r\n        assert(m1.extents() == ext);\r\n        static_assert(is_nothrow_constructible_v<decltype(m1), Ext, decltype(strs)>);\r\n\r\n        span s{strs};\r\n        layout_stride::mapping<Ext> m2(ext, s);\r\n        assert(m2.extents() == ext);\r\n        static_assert(is_nothrow_constructible_v<decltype(m2), Ext, decltype(s)>);\r\n    }\r\n\r\n    { // Check construction from other extents\r\n        using Ext2 = extents<long, dynamic_extent, 4, dynamic_extent>;\r\n\r\n        const array strs{1, 12, 2};\r\n        layout_stride::mapping<Ext2> m1(ext, strs);\r\n        assert(m1.extents() == ext);\r\n        static_assert(is_nothrow_constructible_v<decltype(m1), Ext, decltype(strs)>);\r\n\r\n        const span s{strs};\r\n        layout_stride::mapping<Ext2> m2(ext, s);\r\n        static_assert(is_nothrow_constructible_v<decltype(m2), Ext, decltype(s)>);\r\n    }\r\n}\r\n\r\nconstexpr void check_construction_from_other_mappings() {\r\n    { // Check valid construction\r\n        using Mapping = layout_stride::mapping<extents<int, 4, 4>>;\r\n        static_assert(is_nothrow_constructible_v<Mapping, layout_left::mapping<extents<int, 4, 4>>>);\r\n        static_assert(is_nothrow_constructible_v<Mapping, layout_right::mapping<extents<int, 4, 4>>>);\r\n        static_assert(is_nothrow_constructible_v<Mapping, layout_left::mapping<extents<long, 4, 4>>>);\r\n        static_assert(is_nothrow_constructible_v<Mapping, layout_right::mapping<extents<long, 4, 4>>>);\r\n        static_assert(is_nothrow_constructible_v<Mapping, layout_stride::mapping<extents<long, 4, 4>>>);\r\n        static_assert(is_nothrow_constructible_v<Mapping,\r\n            LyingLayout<AlwaysUnique::yes, AlwaysStrided::yes>::mapping<extents<long, 4, 4>>>);\r\n    }\r\n\r\n    { // Check invalid construction\r\n        using Mapping = layout_stride::mapping<extents<unsigned int, 4, 4>>;\r\n        static_assert(!is_constructible_v<Mapping, NotLayoutMappingAlikeAtAll::mapping<extents<int, 4, 4>>>);\r\n        static_assert(!is_constructible_v<Mapping, layout_left::mapping<extents<int, 4, 3>>>);\r\n        static_assert(!is_constructible_v<Mapping, layout_right::mapping<extents<int, 3, 4>>>);\r\n        static_assert(!is_constructible_v<Mapping, layout_left::mapping<extents<long, 4, 4, 4>>>);\r\n        static_assert(!is_constructible_v<Mapping, layout_right::mapping<extents<long, 3, 3>>>);\r\n        static_assert(!is_constructible_v<Mapping, layout_stride::mapping<extents<int, 4, 4, 3>>>);\r\n        static_assert(!is_constructible_v<Mapping,\r\n            LyingLayout<AlwaysUnique::no, AlwaysStrided::yes>::mapping<extents<long, 4, 4>>>);\r\n        static_assert(!is_constructible_v<Mapping,\r\n            LyingLayout<AlwaysUnique::yes, AlwaysStrided::no>::mapping<extents<long, 4, 4>>>);\r\n        static_assert(!is_constructible_v<Mapping,\r\n            LyingLayout<AlwaysUnique::no, AlwaysStrided::no>::mapping<extents<long, 4, 4>>>);\r\n    }\r\n\r\n    { // Check construction from layout_left::mapping\r\n        layout_left::mapping<dextents<int, 3>> left_mapping{dextents<int, 3>{4, 3, 2}};\r\n        layout_stride::mapping<dextents<int, 3>> strided_mapping{left_mapping};\r\n        assert(ranges::equal(strided_mapping.strides(), array{1, 4, 12}, CmpEqual{}));\r\n    }\r\n\r\n    { // Check construction from layout_right::mapping\r\n        layout_right::mapping<dextents<int, 3>> right_mapping{dextents<int, 3>{4, 3, 2}};\r\n        layout_stride::mapping<dextents<int, 3>> strided_mapping{right_mapping};\r\n        assert(ranges::equal(strided_mapping.strides(), array{6, 2, 1}, CmpEqual{}));\r\n    }\r\n}\r\n\r\nconstexpr void check_required_span_size() {\r\n    { // Check N4950 [mdspan.layout.stride.expo]/1.1: Ext::rank() == 0\r\n        using M1 = layout_stride::mapping<extents<int>>;\r\n        static_assert(M1{}.required_span_size() == 1);\r\n\r\n        M1 m1;\r\n        assert(m1.required_span_size() == 1);\r\n    }\r\n\r\n    { // Check N4950 [mdspan.layout.stride.expo]/1.2: size of the multidimensional index space e is 0\r\n        using M1 = layout_stride::mapping<extents<int, 3, 3, 0, 3>>;\r\n        static_assert(M1{}.required_span_size() == 0);\r\n\r\n        layout_stride::mapping<dextents<int, 4>> m2{dextents<int, 4>{3, 0, 3, 3}, array{1, 3, 1, 3}};\r\n        assert(m2.required_span_size() == 0);\r\n    }\r\n\r\n    { // Check N4950 [mdspan.layout.stride.expo]/1.3: final case\r\n        using M1 = layout_stride::mapping<extents<int, 3, 4, 3>>;\r\n        static_assert(M1{}.required_span_size() == 36);\r\n\r\n        layout_stride::mapping<dextents<int, 3>> m2{dextents<int, 3>{4, 3, 4}, array{1, 4, 12}};\r\n        assert(m2.required_span_size() == 48);\r\n    }\r\n}\r\n\r\nconstexpr void check_is_exhaustive() {\r\n    auto check = [](const auto& exts, const auto& strides, bool expected) {\r\n        layout_stride::mapping m{exts, strides};\r\n        assert(m.is_exhaustive() == expected);\r\n    };\r\n\r\n    // rank() is equal to 0\r\n    check(extents<int>{}, array<int, 0>{}, true);\r\n\r\n    // rank() is equal to 1\r\n    check(extents<int, 0>{}, array{1}, true);\r\n    check(dextents<int, 1>{0}, array{2}, true);\r\n    check(extents<int, 1>{}, array{3}, false);\r\n    check(dextents<int, 1>{2}, array{2}, false);\r\n    check(extents<int, 3>{}, array{1}, true);\r\n    check(dextents<int, 1>{4}, array{1}, true);\r\n\r\n    // rank() is equal to 2\r\n    check(extents<int, 3, 3>{}, array{1, 3}, true);\r\n    check(extents<int, dynamic_extent, 3>{3}, array{3, 1}, true);\r\n    check(extents<int, 3, dynamic_extent>{3}, array{4, 1}, false);\r\n    check(dextents<int, 2>{3, 3}, array{3, 1}, true);\r\n    check(extents<int, 4, 5>{}, array{5, 1}, true);\r\n    check(extents<int, 6, dynamic_extent>{5}, array{1, 6}, true);\r\n    check(extents<int, dynamic_extent, 7>{5}, array{1, 8}, false);\r\n    check(dextents<int, 2>{6, 5}, array{1, 10}, false);\r\n    check(extents<int, 0, 3>{}, array{3, 1}, true);\r\n    check(extents<int, 0, 3>{}, array{6, 2}, true);\r\n    check(extents<int, dynamic_extent, 3>{0}, array{6, 1}, true);\r\n    check(extents<int, 0, dynamic_extent>{3}, array{6, 2}, true);\r\n    check(dextents<int, 2>{0, 3}, array{7, 2}, true);\r\n    check(extents<int, 0, 0>{}, array{1, 1}, true);\r\n    check(extents<int, 0, dynamic_extent>{0, 0}, array{1, 1}, true);\r\n    check(dextents<int, 2>{0, 0}, array{1, 2}, true);\r\n    check(extents<int, 1, dynamic_extent>{0}, array{1, 2}, true);\r\n\r\n    // rank() is greater than 2\r\n    check(extents<int, 2, 3, 5>{}, array{1, 2, 6}, true);\r\n    check(extents<int, dynamic_extent, 3, 5>{2}, array{1, 10, 2}, true);\r\n    check(extents<int, 2, 3, dynamic_extent>{5}, array{3, 1, 6}, true);\r\n    check(extents<int, dynamic_extent, dynamic_extent, 5>{2, 3}, array{15, 1, 3}, true);\r\n    check(extents<int, 2, dynamic_extent, dynamic_extent>{3, 5}, array{5, 10, 1}, true);\r\n    check(dextents<int, 3>{2, 3, 5}, array{15, 5, 1}, true);\r\n    check(extents<int, 2, 5, 8>{}, array{1, 2, 12}, false);\r\n    check(extents<int, 2, dynamic_extent, 8>{5}, array{8, 18, 1}, false);\r\n    check(dextents<int, 3>{2, 5, 8}, array{5, 1, 12}, false);\r\n\r\n    // rank() is greater than 2 and some extents are equal to 0\r\n    check(extents<int, 2, 0, 7>{}, array{7, 14, 1}, true);\r\n    check(extents<int, dynamic_extent, 0, 7>{2}, array{1, 14, 2}, true);\r\n    check(extents<int, 2, dynamic_extent, 7>{0}, array{14, 28, 1}, true);\r\n    check(extents<int, 2, dynamic_extent, dynamic_extent>{0, 7}, array{1, 2, 2}, true);\r\n    check(dextents<int, 3>{2, 0, 7}, array{2, 28, 4}, true);\r\n    check(extents<int, 5, 0, 0>{}, array{3, 1, 1}, true);\r\n    check(extents<int, 5, dynamic_extent, 0>{0}, array{1, 5, 1}, true);\r\n    check(dextents<int, 3>{5, 0, 0}, array{2, 1, 10}, true);\r\n    check(extents<int, 0, 0, 0>{}, array{1, 1, 1}, true);\r\n    check(extents<int, 0, 1, 1>{}, array{1, 1, 1}, true);\r\n\r\n    // rank() is greater than 2 - one extent is equal to 0 while others are equal to each other\r\n    check(extents<int, 3, 0, 3>{}, array{1, 9, 3}, true);\r\n    check(extents<int, dynamic_extent, 0, 3>{3}, array{3, 9, 1}, true);\r\n    check(extents<int, 3, dynamic_extent, dynamic_extent>{0, 3}, array{1, 3, 3}, true);\r\n    check(dextents<int, 3>{3, 0, 3}, array{1, 4, 8}, true);\r\n    check(dextents<int, 3>{0, 1, 1}, array{1, 1, 1}, true);\r\n\r\n    // required_span_size() is equal to 1\r\n    check(extents<int, 1>{}, array{1}, true);\r\n    check(dextents<int, 1>{1}, array{3}, false);\r\n    check(extents<int, 1, dynamic_extent>{1}, array{1, 1}, true);\r\n    check(extents<int, 1, 1, 1>{}, array{1, 2, 1}, false);\r\n\r\n    // Mapping is exhaustive, but is_exhaustive() should return false because of the way standard defined this function\r\n    check(extents<int, 3, 1>{}, array{1, 4}, false);\r\n    check(dextents<int, 3>{5, 1, 2}, array{2, 11, 1}, false);\r\n    check(dextents<int, 3>{2, 3, 1}, array{3, 1, 8}, false);\r\n    check(extents<int, 1, dynamic_extent, 7>{6}, array{50, 7, 1}, false);\r\n    check(dextents<int, 2>{1, 2}, array{5, 1}, false);\r\n    check(extents<int, 6, 1>{}, array{1, 10}, false);\r\n    check(dextents<int, 3>{2, 1, 2}, array{3, 3, 1}, false);\r\n}\r\n\r\nconstexpr void check_call_operator() {\r\n    { // Check call with invalid amount of indices\r\n        using Mapping = layout_stride::mapping<dextents<int, 3>>;\r\n        static_assert(!CheckCallOperatorOfLayoutMapping<Mapping, int>);\r\n        static_assert(!CheckCallOperatorOfLayoutMapping<Mapping, int, int>);\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, int, int, int>);\r\n        static_assert(!CheckCallOperatorOfLayoutMapping<Mapping, int, int, int, int>);\r\n    }\r\n\r\n    { // Check call with invalid types\r\n        using Mapping = layout_stride::mapping<dextents<long, 2>>;\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, long, long>);\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, long, short>);\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, long, ConvertibleToInt<long>>);\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, long, ConvertibleToInt<short>>);\r\n        static_assert(!CheckCallOperatorOfLayoutMapping<Mapping, long, NonConvertibleToAnything>);\r\n    }\r\n\r\n    { // Check call with types that might throw during conversion\r\n        using Mapping = layout_stride::mapping<dextents<long long, 1>>;\r\n        static_assert(CheckCallOperatorOfLayoutMapping<Mapping, ConvertibleToInt<long long, IsNothrow::yes>>);\r\n        static_assert(!CheckCallOperatorOfLayoutMapping<Mapping, ConvertibleToInt<long long, IsNothrow::no>>);\r\n    }\r\n\r\n    { // Check various mappings\r\n        layout_stride::mapping<extents<short>> m1;\r\n        assert(m1() == 0);\r\n\r\n        layout_stride::mapping<dextents<int, 1>> m2{dextents<int, 1>{4}, array{1}};\r\n        assert(m2(0) == 0);\r\n        assert(m2(1) == 1);\r\n        assert(m2(2) == 2);\r\n        assert(m2(3) == 3);\r\n\r\n        layout_stride::mapping<extents<long, 4, 5>> m3{{}, array{1, 5}}; // non-exhaustive mapping\r\n        assert(!m3.is_exhaustive());\r\n        assert(m3(0, 0) == 0);\r\n        assert(m3(0, 1) == 5);\r\n        assert(m3(0, 2) == 10);\r\n        assert(m3(0, 3) == 15);\r\n        assert(m3(0, 4) == 20);\r\n        assert(m3(1, 0) == 1);\r\n        assert(m3(1, 1) == 6);\r\n        assert(m3(1, 2) == 11);\r\n        assert(m3(1, 3) == 16);\r\n        assert(m3(1, 4) == 21);\r\n        assert(m3(2, 0) == 2);\r\n        assert(m3(2, 1) == 7);\r\n        assert(m3(2, 2) == 12);\r\n        assert(m3(2, 3) == 17);\r\n        assert(m3(3, 0) == 3);\r\n        assert(m3(3, 1) == 8);\r\n        assert(m3(3, 2) == 13);\r\n        assert(m3(3, 4) == 23);\r\n\r\n        layout_stride::mapping<extents<unsigned char, 2, 3, 5>> m4{{}, array{15, 1, 3}}; // exhaustive mapping\r\n        assert(m4.is_exhaustive());\r\n        assert(m4(0, 0, 0) == 0);\r\n        assert(m4(0, 0, 1) == 3);\r\n        assert(m4(0, 1, 0) == 1);\r\n        assert(m4(0, 1, 1) == 4);\r\n        assert(m4(1, 0, 0) == 15);\r\n        assert(m4(1, 0, 1) == 18);\r\n        assert(m4(1, 1, 0) == 16);\r\n        assert(m4(1, 1, 1) == 19);\r\n        assert(m4(1, 2, 4) == 29);\r\n    }\r\n}\r\n\r\nconstexpr void check_stride_function() {\r\n    using Ext = extents<unsigned int, 2, 4, 6, 8, 10>;\r\n    layout_stride::mapping<Ext> even_mapping{Ext{}, array{80, 160, 640, 1, 8}};\r\n\r\n    { // Check return type\r\n        same_as<unsigned int> decltype(auto) s = even_mapping.stride(0);\r\n        assert(s == 80);\r\n    }\r\n\r\n    { // Check that argument is 'rank_type'\r\n        struct ConvertibleToRankType {\r\n            constexpr operator integral auto() const {\r\n                return 0;\r\n            }\r\n\r\n            constexpr operator size_t() const { // NB: 'rank_type' is always 'size_t'\r\n                return 1;\r\n            }\r\n        };\r\n\r\n        assert(even_mapping.stride(ConvertibleToRankType{}) == 160);\r\n    }\r\n\r\n    { // Check other strides\r\n        assert(even_mapping.stride(2) == 640);\r\n        assert(even_mapping.stride(3) == 1);\r\n        assert(even_mapping.stride(4) == 8);\r\n    }\r\n}\r\n\r\nconstexpr void check_comparisons() {\r\n    using E                    = extents<int, 2, 3>;\r\n    using StaticStrideMapping  = layout_stride::mapping<E>;\r\n    using DynamicStrideMapping = layout_stride::mapping<dextents<int, 2>>;\r\n    using RightMapping         = layout_right::mapping<E>;\r\n    using LeftMapping          = layout_left::mapping<E>;\r\n\r\n    { // Check equality_comparable_with concept (correct comparisons)\r\n        static_assert(equality_comparable_with<StaticStrideMapping, DynamicStrideMapping>);\r\n        static_assert(equality_comparable_with<StaticStrideMapping, RightMapping>);\r\n        static_assert(equality_comparable_with<StaticStrideMapping, LeftMapping>);\r\n        static_assert(equality_comparable_with<DynamicStrideMapping, RightMapping>);\r\n        static_assert(equality_comparable_with<DynamicStrideMapping, LeftMapping>);\r\n    }\r\n\r\n    { // Check equality_comparable_with concept (incorrect comparisons)\r\n        static_assert(\r\n            !equality_comparable_with<StaticStrideMapping, NotLayoutMappingAlikeAtAll::mapping<extents<int, 2, 3>>>);\r\n        static_assert(!equality_comparable_with<DynamicStrideMapping, layout_stride::mapping<extents<int, 2, 3, 4>>>);\r\n        static_assert(!equality_comparable_with<StaticStrideMapping, layout_stride::mapping<dextents<int, 3>>>);\r\n        static_assert(!equality_comparable_with<DynamicStrideMapping, layout_right::mapping<extents<int, 2>>>);\r\n        static_assert(!equality_comparable_with<StaticStrideMapping, layout_left::mapping<dextents<int, 1>>>);\r\n        static_assert(!equality_comparable_with<DynamicStrideMapping,\r\n            LyingLayout<AlwaysUnique::yes, AlwaysStrided::no>::mapping<dextents<int, 2>>>);\r\n        static_assert(!equality_comparable_with<StaticStrideMapping,\r\n            LyingLayout<AlwaysUnique::yes, AlwaysStrided::no>::mapping<extents<int, 2, 3>>>);\r\n        static_assert(!equality_comparable_with<DynamicStrideMapping,\r\n            LyingLayout<AlwaysUnique::no, AlwaysStrided::no>::mapping<dextents<int, 2>>>);\r\n        static_assert(!equality_comparable_with<StaticStrideMapping,\r\n            LyingLayout<AlwaysUnique::no, AlwaysStrided::no>::mapping<extents<int, 2, 3>>>);\r\n    }\r\n\r\n    { // Check correctness: layout_stride::mapping with layout_stride::mapping\r\n        StaticStrideMapping m1{E{}, array{3, 1}};\r\n        DynamicStrideMapping m2{dextents<int, 2>{2, 3}, array{3, 1}};\r\n        same_as<bool> decltype(auto) cond = m1 == m2;\r\n        assert(cond); // extents are equal, OFFSET(rhs) == 0, strides are equal\r\n\r\n        DynamicStrideMapping m3{dextents<int, 2>{2, 3}, array{1, 2}};\r\n        assert(m1 != m3); // extents are equal, OFFSET(rhs) == 0, strides are not equal\r\n        assert(m2 != m3); // ditto\r\n\r\n        DynamicStrideMapping m4{dextents<int, 2>{1, 3}, array{3, 1}};\r\n        assert(m1 != m4); // extents are not equal, OFFSET(rhs) == 0, strides are equal\r\n        assert(m2 != m4); // ditto\r\n        assert(m3 != m4); // extents are not equal, OFFSET(rhs) == 0, strides are not equal\r\n\r\n        // NB: OFFSET(layout_stride::mapping) is always equal to 0\r\n\r\n        static_assert(noexcept(m1 == m2));\r\n        static_assert(noexcept(m1 != m3));\r\n    }\r\n\r\n    { // Check correctness: layout_stride::mapping with layout_left::mapping\r\n        LeftMapping m1;\r\n        StaticStrideMapping m2{E{}, array{1, 2}};\r\n        same_as<bool> decltype(auto) cond = m1 == m2;\r\n        assert(cond); // extents are equal, OFFSET(rhs) == 0, strides are equal\r\n\r\n        DynamicStrideMapping m3{dextents<int, 2>{2, 3}, array{3, 1}};\r\n        assert(m1 != m3); // extents are equal, OFFSET(rhs) == 0, strides are not equal\r\n        assert(m2 != m3); // ditto\r\n\r\n        DynamicStrideMapping m4{dextents<int, 2>{2, 1}, array{1, 2}};\r\n        assert(m1 != m4); // extents are not equal, OFFSET(rhs) == 0, strides are equal\r\n        assert(m2 != m4); // ditto\r\n        assert(m3 != m4); // extents are not equal, OFFSET(rhs) == 0, strides are not equal\r\n\r\n        // NB: OFFSET(layout_left::mapping) is always equal to 0\r\n\r\n        static_assert(noexcept(m1 == m2));\r\n        static_assert(noexcept(m1 != m3));\r\n    }\r\n\r\n    { // Check correctness: layout_stride::mapping with layout_right::mapping\r\n        RightMapping m1;\r\n        StaticStrideMapping m2{E{}, array{3, 1}};\r\n        same_as<bool> decltype(auto) cond = m1 == m2;\r\n        assert(cond); // extents are equal, OFFSET(rhs) == 0, strides are equal\r\n\r\n        DynamicStrideMapping m3{dextents<int, 2>{2, 3}, array{1, 2}};\r\n        assert(m1 != m3); // extents are equal, OFFSET(rhs) == 0, strides are not equal\r\n        assert(m2 != m3); // ditto\r\n\r\n        DynamicStrideMapping m4{dextents<int, 2>{1, 3}, array{3, 1}};\r\n        assert(m1 != m4); // extents are not equal, OFFSET(rhs) == 0, strides are equal\r\n        assert(m2 != m4); // ditto\r\n        assert(m3 != m4); // extents are not equal, OFFSET(rhs) == 0, strides are not equal\r\n\r\n        // NB: OFFSET(layout_right::mapping) is always equal to 0\r\n\r\n        static_assert(noexcept(m1 == m2));\r\n        static_assert(noexcept(m1 != m3));\r\n    }\r\n\r\n    { // Check correctness: layout_stride::mapping with LyingLayout<AlwaysUnique::no, AlwaysStrided::yes>::mapping\r\n        using CustomMapping = LyingLayout<AlwaysUnique::no, AlwaysStrided::yes>::mapping<E>;\r\n        CustomMapping m1;\r\n        StaticStrideMapping m2{E{}, array{1, 2}};\r\n        same_as<bool> decltype(auto) cond = m1 == m2;\r\n        assert(cond); // extents are equal, OFFSET(rhs) == 0, strides are equal\r\n\r\n        DynamicStrideMapping m3{dextents<int, 2>{2, 3}, array{3, 1}};\r\n        assert(m1 != m3); // extents are equal, OFFSET(rhs) == 0, strides are not equal\r\n        assert(m2 != m3); // ditto\r\n\r\n        DynamicStrideMapping m4{dextents<int, 2>{1, 3}, array{1, 2}};\r\n        assert(m1 != m4); // extents are not equal, OFFSET(rhs) == 0, strides are equal\r\n        assert(m2 != m4); // ditto\r\n        assert(m3 != m4); // extents are not equal, OFFSET(rhs) == 0, strides are not equal\r\n\r\n        // NB: OFFSET(CustomMapping) is always equal to 0\r\n\r\n        static_assert(noexcept(m1 == m2));\r\n        static_assert(noexcept(m1 != m3));\r\n    }\r\n\r\n    { // Check correctness: layout_stride::mapping with HollowLayout::mapping\r\n        HollowLayout::mapping<extents<short>> m1;\r\n        if constexpr (!is_permissive) {\r\n            if (!is_constant_evaluated()) { // too heavy for compile time\r\n                const auto props = get_mapping_properties(m1);\r\n                assert(props.req_span_size == m1.required_span_size());\r\n                assert(props.uniqueness);\r\n                assert(props.exhaustiveness);\r\n                assert(props.strideness);\r\n            }\r\n        }\r\n\r\n        layout_stride::mapping<extents<unsigned short>> m2;\r\n        same_as<bool> decltype(auto) cond = m1 == m2;\r\n        assert(!cond); // extents are equal, OFFSET(rhs) != 0, strides are equal\r\n\r\n        static_assert(noexcept(m1 == m2));\r\n        static_assert(noexcept(m1 != m2));\r\n    }\r\n}\r\n\r\nconstexpr void check_ctad() {\r\n    using E = extents<size_t, 2, 3>;\r\n    E e;\r\n\r\n    { // E::index_type and array::value_type are the same\r\n        array<size_t, 2> a{1, 2};\r\n        layout_stride::mapping m1{e, a};\r\n        static_assert(same_as<decltype(m1), layout_stride::mapping<E>>);\r\n        assert(m1.extents() == e);\r\n        assert(m1.strides() == a);\r\n\r\n        span s{a};\r\n        layout_stride::mapping m2{e, s};\r\n        static_assert(same_as<decltype(m2), layout_stride::mapping<E>>);\r\n        assert(m2.extents() == e);\r\n        assert(m2.strides() == a);\r\n    }\r\n\r\n    { // E::index_type and array::value_type are different\r\n        array<int, 2> a{1, 2};\r\n        layout_stride::mapping m1{e, a};\r\n        static_assert(same_as<decltype(m1), layout_stride::mapping<E>>);\r\n        assert(m1.extents() == e);\r\n        assert(ranges::equal(m1.strides(), a, CmpEqual{}));\r\n\r\n        span s{a};\r\n        layout_stride::mapping m2{e, s};\r\n        static_assert(same_as<decltype(m2), layout_stride::mapping<E>>);\r\n        assert(m2.extents() == e);\r\n        assert(ranges::equal(m2.strides(), a, CmpEqual{}));\r\n    }\r\n}\r\n\r\nconstexpr void check_correctness() {\r\n    { // empty extents\r\n        const array<int, 0> vals{};\r\n        mdspan<const int, extents<int>, layout_stride> nothing{vals.data(), {}};\r\n        assert(nothing.size() == 1);\r\n    }\r\n\r\n    { // regular vector\r\n        using E = extents<int, 3>;\r\n        const array vals{1, 2, 3};\r\n        layout_stride::mapping<E> m{E{}, array{1}};\r\n        mdspan<const int, extents<int, 3>, layout_stride> vec{vals.data(), m};\r\n\r\n        assert((vec[0] == 1));\r\n        assert((vec[1] == 2));\r\n        assert((vec[2] == 3));\r\n    }\r\n\r\n    { // 2x3 matrix with row-major order\r\n        using E = extents<int, 2, 3>;\r\n        const array vals{1, 2, 3, 4, 5, 6};\r\n        layout_stride::mapping<E> m{E{}, array{3, 1}};\r\n        mdspan<const int, E, layout_stride> matrix{vals.data(), m};\r\n\r\n        assert((matrix[0, 0] == 1));\r\n        assert((matrix[0, 1] == 2));\r\n        assert((matrix[0, 2] == 3));\r\n        assert((matrix[1, 0] == 4));\r\n        assert((matrix[1, 1] == 5));\r\n        assert((matrix[1, 2] == 6));\r\n    }\r\n\r\n    { // 3x2x2 tensor\r\n        using E = extents<int, 3, 2, 2>;\r\n        const array vals{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18};\r\n        layout_stride::mapping<E> m{E{}, array{7, 1, 3}}; // non-exhaustive mapping\r\n        assert(!m.is_exhaustive());\r\n        mdspan<const int, E, layout_stride> tensor{vals.data(), m};\r\n\r\n        assert((tensor[0, 0, 0] == 0));\r\n        assert((tensor[0, 0, 1] == 3));\r\n        assert((tensor[0, 1, 0] == 1));\r\n        assert((tensor[0, 1, 1] == 4));\r\n        assert((tensor[1, 0, 0] == 7));\r\n        assert((tensor[1, 0, 1] == 10));\r\n        assert((tensor[1, 1, 0] == 8));\r\n        assert((tensor[1, 1, 1] == 11));\r\n        assert((tensor[2, 0, 0] == 14));\r\n        assert((tensor[2, 0, 1] == 17));\r\n        assert((tensor[2, 1, 0] == 15));\r\n        assert((tensor[2, 1, 1] == 18));\r\n    }\r\n\r\n    { // 2x3x3x2 tensor\r\n        using E = extents<int, 2, 3, 3, 2>;\r\n        const array vals{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,\r\n            26, 27, 28, 29, 30, 31, 32, 33, 34, 35};\r\n        layout_stride::mapping<E> m{E{}, array{18, 1, 3, 9}}; // exhaustive mapping\r\n        assert(m.is_exhaustive());\r\n        mdspan<const int, E, layout_stride> tensor{vals.data(), m};\r\n\r\n        assert((tensor[0, 0, 0, 0] == 0));\r\n        assert((tensor[0, 0, 0, 1] == 9));\r\n        assert((tensor[0, 0, 1, 0] == 3));\r\n        assert((tensor[0, 0, 1, 1] == 12));\r\n        assert((tensor[0, 1, 0, 0] == 1));\r\n        assert((tensor[0, 1, 0, 1] == 10));\r\n        assert((tensor[0, 1, 1, 0] == 4));\r\n        assert((tensor[0, 1, 1, 1] == 13));\r\n        assert((tensor[1, 0, 0, 0] == 18));\r\n        assert((tensor[1, 0, 0, 1] == 27));\r\n        assert((tensor[1, 0, 1, 0] == 21));\r\n        assert((tensor[1, 0, 1, 1] == 30));\r\n        assert((tensor[1, 1, 0, 0] == 19));\r\n        assert((tensor[1, 1, 0, 1] == 28));\r\n        assert((tensor[1, 1, 1, 0] == 22));\r\n        assert((tensor[1, 1, 1, 1] == 31));\r\n        assert((tensor[0, 2, 2, 0] == 8));\r\n        assert((tensor[1, 2, 2, 1] == 35));\r\n    }\r\n}\r\n\r\nconstexpr bool test() {\r\n    // Check signed integers\r\n    check_members(extents<signed char, 5>{5}, array{1});\r\n    check_members(extents<short, 6, 7>{}, array{1, 6});\r\n    check_members(extents<int, 3, dynamic_extent>{3}, array{1, 3});\r\n    check_members(extents<long, 4>{}, array{1});\r\n    check_members(extents<long long, 3, 2, dynamic_extent>{3}, array{1, 3, 6});\r\n\r\n    // Check unsigned integers\r\n    check_members(extents<unsigned char, 5>{5}, array{1});\r\n    check_members(extents<unsigned short, 6, 7>{}, array{1, 6});\r\n    check_members(extents<unsigned int, 3, dynamic_extent>{3}, array{1, 3});\r\n    check_members(extents<unsigned long, 4>{}, array{1});\r\n    check_members(extents<unsigned long long, 3, 2, dynamic_extent>{3}, array{1, 3, 6});\r\n\r\n    // Check degenerate extents\r\n    check_members(extents<long>{}, array<int, 0>{});\r\n    check_members(extents<unsigned char>{}, array<int, 0>{});\r\n\r\n    if (!is_constant_evaluated()) { // too heavy for compile time\r\n        check_mapping_properties();\r\n    }\r\n    check_construction_from_extents_and_array_or_span();\r\n    check_construction_from_other_mappings();\r\n    check_required_span_size();\r\n    check_is_exhaustive();\r\n    check_call_operator();\r\n    check_stride_function();\r\n    check_comparisons();\r\n    check_ctad();\r\n    check_correctness();\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(test());\r\n    test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_layout_stride_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_layout_stride_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cstddef>\r\n#include <mdspan>\r\n#include <span>\r\n\r\n#include <test_death.hpp>\r\n#include <test_mdspan_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nvoid test_default_construction() {\r\n    using Ext = extents<signed char, dynamic_extent, 4, 5, 7>;\r\n    // Value of layout_stride::mapping<extents_type>().required_span_size() must be\r\n    // representable as a value of type index_type\r\n    [[maybe_unused]] layout_stride::mapping<Ext> m{}; // NB: strides are [140, 35, 7, 1]\r\n}\r\n\r\nvoid test_construction_from_extents_and_array_1() {\r\n    // Value of s[i] must be greater than 0 for all i in the range [0, rank_)\r\n    [[maybe_unused]] layout_stride::mapping<dextents<int, 1>> m1{extents<int, 1>{}, array<int, 1>{-1}};\r\n}\r\n\r\nvoid test_construction_from_extents_and_array_2() {\r\n    using Ext = extents<signed char, 120>;\r\n    // REQUIRED-SPAN-SIZE(e, s) must be representable as a value of type index_type\r\n    [[maybe_unused]] layout_stride::mapping<Ext> m{Ext{}, array<int, 1>{2}};\r\n}\r\n\r\nvoid test_construction_from_extents_and_array_3() {\r\n    using Ext = extents<short, 2, 3, 5>;\r\n    const array<short, 3> a{29, 2, 6};\r\n    // Incorrect strides\r\n    [[maybe_unused]] layout_stride::mapping<Ext> m{Ext{}, a};\r\n}\r\n\r\nvoid test_construction_from_extents_and_span_1() {\r\n    array<int, 1> a{-1};\r\n    // Value of s[i] must be greater than 0 for all i in the range [0, rank_)\r\n    [[maybe_unused]] layout_stride::mapping<dextents<int, 1>> m{extents<int, 1>{}, span{a}};\r\n}\r\n\r\nvoid test_construction_from_extents_and_span_2() {\r\n    using Ext = extents<unsigned char, 130>;\r\n    array<ConvertibleToInt<int>, 1> a{{{.val = 2}}};\r\n    const span s{a};\r\n    // REQUIRED-SPAN-SIZE(e, s) must be representable as a value of type index_type\r\n    [[maybe_unused]] layout_stride::mapping<Ext> m{Ext{}, s};\r\n}\r\n\r\nvoid test_construction_from_extents_and_span_3() {\r\n    using Ext = extents<unsigned char, 3, 3, 1, 1>;\r\n    array<long long, 4> a{3, 1, 8, 3};\r\n    const span s{a};\r\n    // Incorrect strides\r\n    [[maybe_unused]] layout_stride::mapping<Ext> m{Ext{}, s};\r\n}\r\n\r\nvoid test_construction_from_strided_layout_mapping() {\r\n    layout_right::mapping<extents<int, 256>> m1;\r\n    // Value of other.required_span_size() must be representable as a value of type index_type\r\n    [[maybe_unused]] layout_stride::mapping<dextents<unsigned char, 1>> m2{m1};\r\n}\r\n\r\nvoid test_call_operator() {\r\n    layout_stride::mapping<extents<unsigned int, 5, 3, 4>> m;\r\n    // Value of extents_type::index-cast(i) must be a multidimensional index in extents_\r\n    (void) m(4, 3, 3);\r\n}\r\n\r\nvoid test_stride_with_empty_extents() {\r\n    layout_stride::mapping<extents<int>> m;\r\n    // The argument to stride must be nonnegative and less than extents_type::rank()\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // yay, /analyze catches this mistake at compile time!\r\n    (void) m.stride(0);\r\n#pragma warning(pop)\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_default_construction,\r\n        test_construction_from_extents_and_array_1,\r\n        test_construction_from_extents_and_array_2,\r\n        test_construction_from_extents_and_array_3,\r\n        test_construction_from_extents_and_span_1,\r\n        test_construction_from_extents_and_span_2,\r\n        test_construction_from_extents_and_span_3,\r\n        test_construction_from_strided_layout_mapping,\r\n        test_call_operator,\r\n        test_stride_with_empty_extents,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_mdspan/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_mdspan/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <initializer_list>\r\n#include <mdspan>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <test_mdspan_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nclass ActionTracker {\r\npublic:\r\n    constexpr explicit ActionTracker(int id_) noexcept : id{id_} {}\r\n\r\n    constexpr ActionTracker(const ActionTracker& other) noexcept : id{other.id}, copy_constructed{true} {}\r\n\r\n    constexpr ActionTracker(ActionTracker&& other) noexcept : id{exchange(other.id, -1)}, move_constructed{true} {}\r\n\r\n    constexpr ActionTracker& operator=(const ActionTracker& other) noexcept {\r\n        id            = other.id;\r\n        copy_assigned = true;\r\n        return *this;\r\n    }\r\n\r\n    constexpr ActionTracker& operator=(ActionTracker&& other) noexcept {\r\n        id            = exchange(other.id, -1);\r\n        move_assigned = true;\r\n        return *this;\r\n    }\r\n\r\n    [[nodiscard]] constexpr int get_id() const noexcept {\r\n        return id;\r\n    }\r\n\r\n    [[nodiscard]] constexpr bool is_copy_constructed() const noexcept {\r\n        return copy_constructed;\r\n    }\r\n\r\n    [[nodiscard]] constexpr bool is_move_constructed() const noexcept {\r\n        return move_constructed;\r\n    }\r\n\r\n    [[nodiscard]] constexpr bool is_copy_assigned() const noexcept {\r\n        return copy_assigned;\r\n    }\r\n\r\n    [[nodiscard]] constexpr bool is_move_assigned() const noexcept {\r\n        return move_assigned;\r\n    }\r\n\r\n    [[nodiscard]] constexpr bool is_swapped() const noexcept {\r\n        return swapped;\r\n    }\r\n\r\n    friend constexpr void swap(ActionTracker& left, ActionTracker& right) noexcept {\r\n        left.swapped  = true;\r\n        right.swapped = true;\r\n        swap(left.id, right.id);\r\n        // leave the other members alone\r\n    }\r\n\r\nprivate:\r\n    int id;\r\n    bool copy_constructed = false;\r\n    bool move_constructed = false;\r\n    bool copy_assigned    = false;\r\n    bool move_assigned    = false;\r\n    bool swapped          = false;\r\n};\r\n\r\nenum class RequireId : bool { no, yes };\r\n\r\ntemplate <class MpPolicy = layout_right, RequireId ReqId = RequireId::yes>\r\nstruct TrackingLayout {\r\n    template <class Extents>\r\n        requires constructible_from<typename MpPolicy::template mapping<Extents>, Extents>\r\n              && (check_layout_mapping_policy_requirements<MpPolicy, Extents>())\r\n    class mapping : public ActionTracker {\r\n    public:\r\n        using extents_type       = Extents;\r\n        using index_type         = extents_type::index_type;\r\n        using rank_type          = extents_type::rank_type;\r\n        using layout_type        = TrackingLayout<MpPolicy>;\r\n        using underlying_mapping = MpPolicy::template mapping<extents_type>;\r\n\r\n        constexpr explicit mapping(int id)\r\n            requires default_initializable<underlying_mapping>\r\n            : ActionTracker(id), mp() {}\r\n\r\n        constexpr mapping(const extents_type& e, int id) : ActionTracker(id), mp(e) {}\r\n\r\n        constexpr mapping(const extents_type& e)\r\n            requires (!to_underlying(ReqId))\r\n            : ActionTracker(-1), constructed_with_extents_only{true}, mp(e) {}\r\n\r\n        template <class T>\r\n        mapping(initializer_list<T>) = delete; // we should never use list-initialization in <mdspan>\r\n\r\n        constexpr mapping(const mapping& other) : ActionTracker(other), mp(other.mp) {}\r\n\r\n        constexpr mapping(mapping&& other) noexcept : ActionTracker(move(other)), mp(move(other.mp)) {}\r\n\r\n        // NB: special constructor for check_construction_from_other_mdspan's effects test\r\n        template <class OtherExtents>\r\n            requires is_constructible_v<extents_type, OtherExtents>\r\n        constexpr mapping(const mapping<OtherExtents>& other) : ActionTracker(other), mp(other.get_underlying()) {}\r\n\r\n        constexpr mapping& operator=(const mapping&) = default;\r\n        constexpr mapping& operator=(mapping&&)      = default;\r\n\r\n        constexpr const extents_type& extents() const {\r\n            return mp.extents();\r\n        }\r\n\r\n        template <class... IndexTypes>\r\n        constexpr index_type operator()(IndexTypes... indices) const noexcept(noexcept(mp(indices...))) {\r\n            return mp(indices...);\r\n        }\r\n\r\n        constexpr index_type required_span_size() const {\r\n            return mp.required_span_size();\r\n        }\r\n\r\n        constexpr bool is_unique() const {\r\n            return mp.is_unique();\r\n        }\r\n\r\n        constexpr bool is_exhaustive() const {\r\n            return mp.is_exhaustive();\r\n        }\r\n\r\n        constexpr bool is_strided() const {\r\n            return mp.is_strided();\r\n        }\r\n\r\n        constexpr index_type stride() const {\r\n            return mp.stride();\r\n        }\r\n\r\n        static constexpr bool is_always_unique() {\r\n            return underlying_mapping::is_always_unique();\r\n        }\r\n\r\n        static constexpr bool is_always_exhaustive() {\r\n            return underlying_mapping::is_always_exhaustive();\r\n        }\r\n\r\n        static constexpr bool is_always_strided() {\r\n            return underlying_mapping::is_always_strided();\r\n        }\r\n\r\n        constexpr bool operator==(const mapping& other) const {\r\n            return mp == other.mp;\r\n        }\r\n\r\n        constexpr bool is_constructed_with_extents_only() const noexcept\r\n            requires (!to_underlying(ReqId))\r\n        {\r\n            return constructed_with_extents_only;\r\n        }\r\n\r\n        constexpr const underlying_mapping& get_underlying() const noexcept {\r\n            return mp;\r\n        }\r\n\r\n        friend constexpr void swap(mapping& left, mapping& right) noexcept {\r\n            swap(static_cast<ActionTracker&>(left), static_cast<ActionTracker&>(right));\r\n            swap(left.mp, right.mp);\r\n        }\r\n\r\n    private:\r\n        bool constructed_with_extents_only = false;\r\n        underlying_mapping mp;\r\n    };\r\n};\r\n\r\nstatic_assert(check_layout_mapping_policy_requirements<TrackingLayout<layout_right>, dextents<int, 3>>());\r\nstatic_assert(check_layout_mapping_policy_requirements<TrackingLayout<layout_left>, dextents<int, 8>>());\r\n\r\nstruct VectorBoolAccessor {\r\n    using offset_policy    = VectorBoolAccessor;\r\n    using element_type     = bool;\r\n    using reference        = vector<bool>::reference;\r\n    using data_handle_type = vector<bool>::iterator;\r\n\r\n    constexpr reference access(data_handle_type handle, size_t off) const noexcept {\r\n        return handle[static_cast<ptrdiff_t>(off)];\r\n    }\r\n\r\n    constexpr data_handle_type offset(data_handle_type handle, size_t off) const {\r\n        return handle + static_cast<ptrdiff_t>(off);\r\n    }\r\n};\r\n\r\nstatic_assert(check_accessor_policy_requirements<VectorBoolAccessor>());\r\n\r\ntemplate <class ElementType>\r\nclass TrackingDataHandle : public ActionTracker {\r\npublic:\r\n    using data_handle_type = ElementType*;\r\n\r\n    constexpr explicit TrackingDataHandle(int id, data_handle_type ptr_) noexcept : ActionTracker(id), ptr{ptr_} {}\r\n\r\n    // NB: special constructor for check_construction_from_other_mdspan's effects test\r\n    template <class OtherElementType>\r\n        requires is_convertible_v<OtherElementType*, data_handle_type>\r\n    constexpr TrackingDataHandle(const TrackingDataHandle<OtherElementType>& other) : ActionTracker(other) {}\r\n\r\n    template <class T>\r\n    TrackingDataHandle(initializer_list<T>) = delete; // we should never use list-initialization in <mdspan>\r\n\r\n    constexpr TrackingDataHandle(const TrackingDataHandle& other) noexcept : ActionTracker(other), ptr{other.ptr} {}\r\n\r\n    constexpr TrackingDataHandle(TrackingDataHandle&& other) noexcept\r\n        : ActionTracker(move(other)), ptr{exchange(other.ptr, nullptr)} {}\r\n\r\n    constexpr TrackingDataHandle& operator=(const TrackingDataHandle&) noexcept = default;\r\n    constexpr TrackingDataHandle& operator=(TrackingDataHandle&&) noexcept      = default;\r\n\r\n    constexpr data_handle_type get_ptr() const noexcept {\r\n        return ptr;\r\n    }\r\n\r\n    friend constexpr void swap(TrackingDataHandle& left, TrackingDataHandle& right) noexcept {\r\n        swap(static_cast<ActionTracker&>(left), static_cast<ActionTracker&>(right));\r\n        swap(left.ptr, right.ptr);\r\n    }\r\n\r\nprivate:\r\n    data_handle_type ptr;\r\n};\r\n\r\ntemplate <class ElementType>\r\nclass AccessorWithTrackingDataHandle {\r\npublic:\r\n    using offset_policy    = AccessorWithTrackingDataHandle;\r\n    using element_type     = ElementType;\r\n    using reference        = ElementType&;\r\n    using data_handle_type = TrackingDataHandle<ElementType>;\r\n\r\n    constexpr reference access(data_handle_type handle, size_t off) const {\r\n        return handle.get_ptr()[off];\r\n    }\r\n\r\n    constexpr data_handle_type offset(data_handle_type handle, size_t off) const {\r\n        return TrackingDataHandle{handle.get_id(), handle.get_ptr() + off};\r\n    }\r\n};\r\n\r\ntemplate <class ElementType>\r\nclass TrackingAccessor : public ActionTracker {\r\npublic:\r\n    using offset_policy    = TrackingAccessor;\r\n    using element_type     = ElementType;\r\n    using reference        = ElementType&;\r\n    using data_handle_type = TrackingDataHandle<ElementType>;\r\n\r\n    constexpr explicit TrackingAccessor(int id) noexcept : ActionTracker(id) {}\r\n\r\n    // NB: special constructor for check_construction_from_other_mdspan's effects test\r\n    template <class OtherElementType>\r\n        requires is_convertible_v<OtherElementType (*)[], element_type (*)[]>\r\n    constexpr TrackingAccessor(const TrackingAccessor<OtherElementType>& other) : ActionTracker(other) {}\r\n\r\n    constexpr reference access(data_handle_type handle, size_t off) const {\r\n        return handle.get_ptr()[off];\r\n    }\r\n\r\n    constexpr data_handle_type offset(data_handle_type handle, size_t off) const {\r\n        return data_handle_type{handle.get_id(), handle.get_ptr() + off};\r\n    }\r\n\r\n    friend constexpr void swap(TrackingAccessor& left, TrackingAccessor& right) noexcept {\r\n        swap(static_cast<ActionTracker&>(left), static_cast<ActionTracker&>(right));\r\n    }\r\n};\r\n\r\nstatic_assert(check_accessor_policy_requirements<TrackingAccessor<int>>());\r\n\r\ntemplate <class ElementType>\r\nstruct AccessorWithCustomOffsetPolicy {\r\n    using offset_policy    = default_accessor<ElementType>;\r\n    using element_type     = offset_policy::element_type;\r\n    using reference        = offset_policy::reference;\r\n    using data_handle_type = offset_policy::data_handle_type;\r\n\r\n    AccessorWithCustomOffsetPolicy() = default;\r\n\r\n    // NB: special constructor for check_construction_from_other_mdspan's explicitness test\r\n    template <class OtherElementType>\r\n        requires is_convertible_v<OtherElementType (*)[], element_type (*)[]>\r\n    constexpr explicit AccessorWithCustomOffsetPolicy(AccessorWithCustomOffsetPolicy<OtherElementType>) noexcept {}\r\n\r\n    constexpr operator const offset_policy&() const {\r\n        return offpol;\r\n    }\r\n\r\n    constexpr reference access(data_handle_type handle, size_t off) const {\r\n        return offpol(handle, off);\r\n    }\r\n\r\n    constexpr data_handle_type offset(data_handle_type handle, size_t off) const {\r\n        return offpol.offset(handle, off);\r\n    }\r\n\r\nprivate:\r\n    offset_policy offpol;\r\n};\r\n\r\nstatic_assert(check_accessor_policy_requirements<AccessorWithCustomOffsetPolicy<int>>());\r\n\r\ntemplate <class Ext, class Layout, template <class> class AccessorTemplate>\r\nconstexpr void check_modeled_concepts_and_member_types() {\r\n    using Accessor = AccessorTemplate<float>;\r\n    using Mds      = mdspan<float, Ext, Layout, Accessor>;\r\n\r\n    // Check modeled concepts\r\n    static_assert(copyable<Mds>);\r\n    static_assert(is_nothrow_move_constructible_v<Mds>);\r\n    static_assert(is_nothrow_move_assignable_v<Mds>);\r\n    static_assert(is_nothrow_swappable_v<Mds>);\r\n    static_assert(\r\n        is_trivially_copyable_v<Mds>\r\n        == (is_trivially_copyable_v<typename Mds::accessor_type> && is_trivially_copyable_v<typename Mds::mapping_type>\r\n            && is_trivially_copyable_v<typename Mds::data_handle_type>) );\r\n\r\n    // Check member types\r\n    static_assert(same_as<typename Mds::extents_type, Ext>);\r\n    static_assert(same_as<typename Mds::layout_type, Layout>);\r\n    static_assert(same_as<typename Mds::accessor_type, Accessor>);\r\n    static_assert(same_as<typename Mds::mapping_type, typename Layout::template mapping<Ext>>);\r\n    static_assert(same_as<typename Mds::element_type, float>);\r\n    static_assert(same_as<typename Mds::value_type, float>);\r\n    static_assert(same_as<typename Mds::index_type, typename Ext::index_type>);\r\n    static_assert(same_as<typename Mds::size_type, typename Ext::size_type>);\r\n    static_assert(same_as<typename Mds::rank_type, typename Ext::rank_type>);\r\n    static_assert(same_as<typename Mds::data_handle_type, typename Accessor::data_handle_type>);\r\n    static_assert(same_as<typename Mds::reference, typename Accessor::reference>);\r\n}\r\n\r\nconstexpr void check_observers() {\r\n    using Ext = extents<int, 4, dynamic_extent, 3, dynamic_extent, 5>;\r\n    using Mds = mdspan<int, Ext, layout_stride, TrackingAccessor<int>>;\r\n\r\n    { // Check results\r\n        static_assert(Mds::rank() == Ext::rank());\r\n        static_assert(Mds::rank_dynamic() == Ext::rank_dynamic());\r\n        static_assert(Mds::static_extent(0) == Ext::static_extent(0));\r\n        static_assert(Mds::static_extent(1) == Ext::static_extent(1));\r\n        static_assert(Mds::static_extent(2) == Ext::static_extent(2));\r\n        static_assert(Mds::static_extent(3) == Ext::static_extent(3));\r\n        static_assert(Mds::static_extent(4) == Ext::static_extent(4));\r\n    }\r\n\r\n    { // Check return types\r\n        static_assert(same_as<decltype(Mds::rank()), size_t>);\r\n        static_assert(same_as<decltype(Mds::rank_dynamic()), size_t>);\r\n        static_assert(same_as<decltype(Mds::static_extent(0)), size_t>);\r\n    }\r\n\r\n    { // Check noexceptness\r\n        static_assert(noexcept(Mds::rank()));\r\n        static_assert(noexcept(Mds::rank_dynamic()));\r\n        static_assert(noexcept(Mds::static_extent(0)));\r\n    }\r\n}\r\n\r\nconstexpr void check_default_constructor() {\r\n    { // Check constraint: 'rank_dynamic() > 0'\r\n        static_assert(is_nothrow_default_constructible_v<mdspan<const int, dextents<int, 1>>>); // strengthened\r\n        static_assert(!is_default_constructible_v<mdspan<const int, extents<int, 3>>>);\r\n        static_assert(!is_default_constructible_v<mdspan<const int, extents<int>>>);\r\n    }\r\n\r\n    { // Check constraints: 'is_default_constructible_v<data_handle_type>'\r\n        static_assert(is_nothrow_default_constructible_v<\r\n            mdspan<bool, dextents<int, 2>, layout_right, VectorBoolAccessor>>); // strengthened\r\n        static_assert(\r\n            !is_default_constructible_v<mdspan<bool, dextents<int, 2>, layout_right, TrackingAccessor<bool>>>);\r\n    }\r\n\r\n    { // Check constraint: 'is_default_constructible_v<mapping_type>'\r\n        static_assert(!is_default_constructible_v<mdspan<int, extents<short, 4, 4>, layout_stride>>);\r\n        static_assert(!is_default_constructible_v<mdspan<long, extents<long, 4, 4>, TrackingLayout<>>>);\r\n    }\r\n\r\n    { // Check constraint: 'is_default_constructible_v<accessor_type>'\r\n        static_assert(is_nothrow_default_constructible_v<\r\n            mdspan<float, dextents<int, 2>, layout_right, AccessorWithCustomOffsetPolicy<float>>>); // strengthened\r\n        static_assert(\r\n            !is_default_constructible_v<mdspan<float, dextents<int, 2>, layout_right, TrackingAccessor<float>>>);\r\n    }\r\n\r\n    { // Check effects\r\n        mdspan<double, dextents<int, 3>, layout_stride, TrivialAccessor<double>> mds{};\r\n        assert(mds.data_handle() == nullptr);\r\n        assert((mds.mapping().strides() == array{0, 0, 1}));\r\n        assert(mds.accessor().member == 0);\r\n    }\r\n}\r\n\r\nconstexpr void check_defaulted_copy_and_move_constructors() {\r\n    using Ext           = extents<int, 2, 2, 2>;\r\n    using Mds           = mdspan<short, Ext, TrackingLayout<>, TrackingAccessor<short>>;\r\n    short bits_of_218[] = {1, 1, 0, 1, 1, 0, 1, 0};\r\n\r\n    { // Check defaulted copy constructor\r\n        Mds mds1{\r\n            TrackingDataHandle<short>{2, bits_of_218}, TrackingLayout<>::mapping<Ext>(4), TrackingAccessor<short>{8}};\r\n        Mds mds2{mds1};\r\n        assert(mds2.data_handle().is_copy_constructed());\r\n        assert(mds2.mapping().is_copy_constructed());\r\n        assert(mds2.accessor().is_copy_constructed());\r\n    }\r\n\r\n    { // Check defaulted move constructor\r\n        Mds mds1{\r\n            TrackingDataHandle<short>{2, bits_of_218}, TrackingLayout<>::mapping<Ext>(4), TrackingAccessor<short>{8}};\r\n        Mds mds2{move(mds1)};\r\n        assert(mds2.data_handle().is_move_constructed());\r\n        assert(mds2.mapping().is_move_constructed());\r\n        assert(mds2.accessor().is_move_constructed());\r\n    }\r\n}\r\n\r\nconstexpr void check_data_handle_and_indices_pack_constructor() {\r\n    { // Check constraint: '(is_convertible_v<OtherIndexTypes, index_type> && ...)'\r\n        using Mds = mdspan<const int, dextents<long long, 3>>;\r\n        static_assert(is_nothrow_constructible_v<Mds, int*, signed char, short, int>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<Mds, int*, long, long long, unsigned char>); // strengthened\r\n        static_assert(\r\n            is_nothrow_constructible_v<Mds, const int*, unsigned short, unsigned int, unsigned long>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<Mds, const int*, unsigned long long, int,\r\n            ConvertibleToInt<int>>); // strengthened\r\n        static_assert(!is_constructible_v<Mds, const int*, unsigned long long, int, NonConvertibleToAnything>);\r\n    }\r\n\r\n    { // Check constraint: '(is_nothrow_constructible<index_type, OtherIndexTypes> && ...)'\r\n        using Mds = mdspan<double, dextents<int, 2>>;\r\n        static_assert(is_nothrow_constructible_v<Mds, double*, size_t,\r\n            ConvertibleToInt<ptrdiff_t, IsNothrow::yes>>); // strengthened\r\n        static_assert(!is_constructible_v<Mds, double*, size_t, ConvertibleToInt<ptrdiff_t, IsNothrow::no>>);\r\n    }\r\n\r\n    { // Check constraint: 'N == rank() || N == rank_dynamic()'\r\n        using Mds = mdspan<int*, extents<short, 2, 3, dynamic_extent, dynamic_extent>>;\r\n        static_assert(!is_constructible_v<Mds, int**, int>);\r\n        static_assert(is_nothrow_constructible_v<Mds, int**, int, int>); // strengthened\r\n        static_assert(!is_constructible_v<Mds, int** const, int, int, int>);\r\n        static_assert(is_nothrow_constructible_v<Mds, int** const, int, int, int, int>); // strengthened\r\n    }\r\n\r\n    { // Check constraint: 'is_constructible_v<mapping_type, extents_type>'\r\n        static_assert(is_nothrow_constructible_v<mdspan<const int, dextents<int, 2>, layout_left>, int* const, int,\r\n            int>); // strengthened\r\n        static_assert(!is_constructible_v<mdspan<int, dextents<int, 2>, layout_stride>, int*, int, int>);\r\n        static_assert(!is_constructible_v<mdspan<int, extents<int, 4, 4>, TrackingLayout<>>, int*, int, int>);\r\n    }\r\n\r\n    { // Check constraint: 'is_default_constructible_v<accessor_type>'\r\n        static_assert(is_nothrow_constructible_v<mdspan<bool, dextents<int, 2>, layout_right, VectorBoolAccessor>,\r\n            vector<bool>::iterator, int, int>); // strengthened\r\n        static_assert(\r\n            !is_constructible_v<mdspan<int, dextents<int, 2>, layout_right, TrackingAccessor<int>>, int*, int, int>);\r\n    }\r\n\r\n    { // Check explicitness\r\n        using Mds = mdspan<bool, dextents<long long, 4>>;\r\n        static_assert(NotImplicitlyConstructibleFrom<Mds, bool*, int, int, int, int>);\r\n        static_assert(NotImplicitlyConstructibleFrom<Mds, bool*, signed char, short, long, long long>);\r\n        static_assert(!NotImplicitlyConstructibleFrom<Mds, bool*, signed char, short, long>);\r\n    }\r\n\r\n    { // Check effects: 'direct-non-list-initializes ptr_ with std::move(p)'\r\n        int ints[4] = {1, 2, 3, 4};\r\n        mdspan<int, extents<int, 2, 2>, layout_right, AccessorWithTrackingDataHandle<int>> mds{\r\n            TrackingDataHandle<int>{1, ints}, 2, 2};\r\n        assert(mds.data_handle().is_move_constructed());\r\n    }\r\n\r\n    { // Check effects: 'direct-non-list-initializes map_ with\r\n        // extents_type(static_cast<index_type>(std::move(exts))...)'\r\n        using Ext = dextents<signed char, 2>;\r\n        struct FunnyIndex {\r\n            constexpr operator Ext::index_type() const& noexcept {\r\n                return 1;\r\n            }\r\n\r\n            constexpr operator integral auto() && noexcept {\r\n                return 1;\r\n            }\r\n\r\n            constexpr operator Ext::index_type() && noexcept {\r\n                return 3;\r\n            }\r\n        };\r\n\r\n        char digits[9] = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};\r\n        FunnyIndex i;\r\n        mdspan<char, Ext> mds{digits, i, i};\r\n        assert(mds.extent(0) == 3);\r\n        assert(mds.extent(1) == 3);\r\n    }\r\n\r\n    { // Check effects: 'value-initializes acc_'\r\n        int ints[4] = {2, 4, 8, 16};\r\n        mdspan<int, extents<int, 2, 2>, layout_left, TrivialAccessor<int>> mds{ints, 2, 2};\r\n        assert(mds.accessor().member == 0);\r\n    }\r\n}\r\n\r\nconstexpr void check_data_handle_and_span_array_constructors() {\r\n    { // Check constraint: 'is_convertible_v<const OtherIndexType&, index_type>'\r\n        using Mds = mdspan<const int, dextents<long long, 3>>;\r\n        static_assert(is_nothrow_constructible_v<Mds, int*, span<int, 3>>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<Mds, int*, array<int, 3>>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<Mds, const int*, span<ConvertibleToInt<short>, 3>>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<Mds, const int*, array<ConvertibleToInt<short>, 3>>); // strengthened\r\n        static_assert(!is_constructible_v<Mds, const int*, span<NonConvertibleToAnything, 3>>);\r\n        static_assert(!is_constructible_v<Mds, const int*, array<NonConvertibleToAnything, 3>>);\r\n    }\r\n\r\n    { // Check constraint: 'is_nothrow_constructible<index_type, OtherIndexTypes>'\r\n        using Mds = mdspan<double, dextents<int, 2>>;\r\n        static_assert(is_nothrow_constructible_v<Mds, double*,\r\n            span<ConvertibleToInt<ptrdiff_t, IsNothrow::yes>, 2>>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<Mds, double*,\r\n            array<ConvertibleToInt<ptrdiff_t, IsNothrow::yes>, 2>>); // strengthened\r\n        static_assert(!is_constructible_v<Mds, double*, span<ConvertibleToInt<ptrdiff_t, IsNothrow::no>, 2>>);\r\n        static_assert(!is_constructible_v<Mds, double*, array<ConvertibleToInt<ptrdiff_t, IsNothrow::no>, 2>>);\r\n    }\r\n\r\n    { // Check constraint: 'N == rank() || N == rank_dynamic()'\r\n        using Mds = mdspan<int*, extents<short, 2, 3, dynamic_extent, dynamic_extent>>;\r\n        static_assert(!is_constructible_v<Mds, int**, span<int, 1>>);\r\n        static_assert(!is_constructible_v<Mds, int**, array<int, 1>>);\r\n        static_assert(is_nothrow_constructible_v<Mds, int**, span<int, 2>>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<Mds, int**, array<int, 2>>); // strengthened\r\n        static_assert(!is_constructible_v<Mds, int**, span<int, 3>>);\r\n        static_assert(!is_constructible_v<Mds, int**, array<int, 3>>);\r\n        static_assert(is_nothrow_constructible_v<Mds, int**, span<int, 4>>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<Mds, int**, array<int, 4>>); // strengthened\r\n    }\r\n\r\n    { // Check constraint: 'is_constructible_v<mapping_type, extents_type>'\r\n        static_assert(is_nothrow_constructible_v<mdspan<const int, dextents<int, 2>, layout_left>, int* const,\r\n            span<int, 2>>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<mdspan<const int, dextents<int, 2>, layout_left>, int* const,\r\n            array<int, 2>>); // strengthened\r\n        static_assert(\r\n            is_constructible_v<mdspan<const int, dextents<int, 2>, TrackingLayout<layout_left, RequireId::no>>,\r\n                int* const, span<int, 2>>);\r\n        static_assert(\r\n            !is_nothrow_constructible_v<mdspan<const int, dextents<int, 2>, TrackingLayout<layout_left, RequireId::no>>,\r\n                int* const, span<int, 2>>); // strengthened\r\n        static_assert(\r\n            is_constructible_v<mdspan<const int, dextents<int, 2>, TrackingLayout<layout_left, RequireId::no>>,\r\n                int* const, array<int, 2>>);\r\n        static_assert(\r\n            !is_nothrow_constructible_v<mdspan<const int, dextents<int, 2>, TrackingLayout<layout_left, RequireId::no>>,\r\n                int* const, array<int, 2>>); // strengthened\r\n        static_assert(!is_constructible_v<mdspan<int, dextents<int, 2>, layout_stride>, int*, span<int, 2>>);\r\n        static_assert(!is_constructible_v<mdspan<int, dextents<int, 2>, layout_stride>, int*, array<int, 2>>);\r\n        static_assert(!is_constructible_v<mdspan<int, dextents<int, 2>, TrackingLayout<>>, int*, span<int, 2>>);\r\n        static_assert(!is_constructible_v<mdspan<int, dextents<int, 2>, TrackingLayout<>>, int*, array<int, 2>>);\r\n    }\r\n\r\n    { // Check constraint: 'is_default_constructible_v<accessor_type>'\r\n        static_assert(is_nothrow_constructible_v<mdspan<bool, dextents<int, 2>, layout_right, VectorBoolAccessor>,\r\n            vector<bool>::iterator, span<short, 2>>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<mdspan<bool, dextents<int, 2>, layout_right, VectorBoolAccessor>,\r\n            vector<bool>::iterator, array<short, 2>>); // strengthened\r\n        static_assert(!is_constructible_v<mdspan<int, dextents<int, 2>, layout_right, TrackingAccessor<int>>, int*,\r\n            span<int, 2>>);\r\n        static_assert(!is_constructible_v<mdspan<int, dextents<int, 2>, layout_right, TrackingAccessor<int>>, int*,\r\n            array<int, 2>>);\r\n    }\r\n\r\n    { // Check explicitness\r\n        using Mds = mdspan<const float, extents<int, 4, 4, dynamic_extent>>;\r\n        static_assert(NotImplicitlyConstructibleFrom<Mds, float*, span<int, 3>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<Mds, float*, array<int, 3>>);\r\n        static_assert(!NotImplicitlyConstructibleFrom<Mds, float*, span<int, 1>>);\r\n        static_assert(!NotImplicitlyConstructibleFrom<Mds, float*, array<int, 1>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<Mds, const float*, span<ConvertibleToInt<short>, 3>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<Mds, const float*, array<ConvertibleToInt<short>, 3>>);\r\n        static_assert(!NotImplicitlyConstructibleFrom<Mds, const float*, span<ConvertibleToInt<short>, 1>>);\r\n        static_assert(!NotImplicitlyConstructibleFrom<Mds, const float*, array<ConvertibleToInt<short>, 1>>);\r\n    }\r\n\r\n    { // Check effects: 'direct-non-list-initializes ptr_ with std::move(p)'\r\n        int ints[4] = {1, 2, 3, 4};\r\n        array<int, 2> indices{2, 2};\r\n        mdspan<int, extents<int, 2, 2>, layout_right, AccessorWithTrackingDataHandle<int>> mds1{\r\n            TrackingDataHandle<int>{1, ints}, indices};\r\n        assert(mds1.data_handle().is_move_constructed());\r\n        span s{indices};\r\n        mdspan<int, extents<int, 2, 2>, layout_right, AccessorWithTrackingDataHandle<int>> mds2{\r\n            TrackingDataHandle<int>{1, ints}, s};\r\n        assert(mds2.data_handle().is_move_constructed());\r\n    }\r\n\r\n    { // Check effects: 'direct-non-list-initializes map_ with extents_type(exts)'\r\n        using Ext = dextents<signed char, 2>;\r\n        struct FunnyIndex {\r\n            constexpr operator integral auto() & noexcept {\r\n                return 1;\r\n            }\r\n\r\n            constexpr operator integral auto() const& noexcept {\r\n                return 1;\r\n            }\r\n\r\n            constexpr operator Ext::index_type() const& noexcept {\r\n                return 3;\r\n            }\r\n\r\n            constexpr operator integral auto() && noexcept {\r\n                return 1;\r\n            }\r\n        };\r\n\r\n        char digits[9] = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};\r\n        array<FunnyIndex, 2> indices;\r\n        mdspan<char, Ext, TrackingLayout<layout_right, RequireId::no>> mds1{digits, indices};\r\n        assert(mds1.extent(0) == 3);\r\n        span s{indices};\r\n        mdspan<char, Ext> mds2{digits, s};\r\n        assert(mds2.extent(0) == 3);\r\n        assert(mds2.extent(1) == 3);\r\n    }\r\n\r\n    { // Check effects: 'value-initializes acc_'\r\n        int ints[4] = {1, 3, 7, 15};\r\n        array<short, 2> indices{2, 2};\r\n        mdspan<int, extents<int, 2, 2>, layout_left, TrivialAccessor<int>> mds1{ints, indices};\r\n        assert(mds1.accessor().member == 0);\r\n        span s{indices};\r\n        mdspan<int, extents<int, 2, 2>, layout_left, TrivialAccessor<int>> mds2{ints, s};\r\n        assert(mds2.accessor().member == 0);\r\n    }\r\n}\r\n\r\nconstexpr void check_data_handle_and_extents_constructor() {\r\n    { // Check constraint: 'is_constructible_v<mapping_type, const extents_type&>'\r\n        static_assert(\r\n            is_nothrow_constructible_v<mdspan<int, dextents<int, 3>>, int*, dextents<int, 3>>); // strengthened\r\n        static_assert(\r\n            is_nothrow_constructible_v<mdspan<int, dextents<int, 3>>, int*, dextents<long, 3>>); // strengthened\r\n        static_assert(!is_constructible_v<mdspan<int, dextents<int, 3>, layout_stride>, int*, dextents<int, 3>>);\r\n        static_assert(!is_constructible_v<mdspan<int, dextents<int, 3>>, int*, dextents<int, 2>>);\r\n        static_assert(!is_constructible_v<mdspan<int, extents<int, 3, 3>>, int*, extents<long, 3, 2>>);\r\n    }\r\n\r\n    { // Check constraint: is_default_constructible_v<accessor_type>\r\n        static_assert(is_nothrow_constructible_v<mdspan<bool, dextents<int, 2>, layout_right, VectorBoolAccessor>,\r\n            vector<bool>::iterator, dextents<short, 2>>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<mdspan<bool, dextents<int, 2>, layout_right, VectorBoolAccessor>,\r\n            vector<bool>::iterator, extents<long, 3, 3>>); // strengthened\r\n        static_assert(!is_constructible_v<mdspan<int, dextents<int, 2>, layout_right, TrackingAccessor<int>>, int*,\r\n            dextents<signed char, 2>>);\r\n        static_assert(!is_constructible_v<mdspan<int, dextents<int, 2>, layout_right, TrackingAccessor<int>>, int*,\r\n            extents<unsigned char, 4, 4>>);\r\n    }\r\n\r\n    { // Check effects: 'direct-non-list-initializes ptr_ with std::move(p)'\r\n        char physics[4] = {'s', 't', 'v', 'a'};\r\n        mdspan<char, extents<int, 2, 2>, layout_right, AccessorWithTrackingDataHandle<char>> mds{\r\n            TrackingDataHandle<char>{1, physics}, extents<short, 2, 2>{}};\r\n        assert(mds.data_handle().is_move_constructed());\r\n    }\r\n\r\n    { // Check effects: \"direct-non-list-initializes map_ with ext\"\r\n        short lucky_numbers[6] = {2, 15, 17, 31, 34, 35};\r\n        mdspan<short, extents<short, 2, 3>, TrackingLayout<layout_left, RequireId::no>> mds{\r\n            lucky_numbers, extents<signed char, 2, 3>{}};\r\n        assert(mds.mapping().is_constructed_with_extents_only());\r\n    }\r\n\r\n    { // Check effects: 'value-initializes acc_'\r\n        int ints[4] = {1, 22, 333, 4444};\r\n        mdspan<int, dextents<int, 2>, layout_left, TrivialAccessor<int>> mds{ints, extents<long, 2, 2>{}};\r\n        assert(mds.accessor().member == 0);\r\n    }\r\n}\r\n\r\nconstexpr void check_data_handle_and_mapping_constructor() {\r\n    { // Check constraint: 'is_default_constructible_v<accessor_type>'\r\n        static_assert(is_nothrow_constructible_v<mdspan<bool, dextents<int, 4>, layout_left, VectorBoolAccessor>,\r\n            vector<bool>::iterator, layout_left::mapping<dextents<short, 4>>>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<mdspan<int, extents<short, 2, 2>, layout_left>, int* const,\r\n            layout_left::mapping<extents<short, 2, 2>>>); // strengthened\r\n        static_assert(!is_constructible_v<\r\n            mdspan<vector<int>, extents<long, 5, 5>, TrackingLayout<>, TrackingAccessor<vector<int>>>, vector<int>*,\r\n            TrackingLayout<>::mapping<extents<long, 5, 5>>>);\r\n        static_assert(!is_constructible_v<\r\n            mdspan<deque<int>, extents<signed char, 5, 5, 5>, TrackingLayout<>, TrackingAccessor<deque<int>>>,\r\n            deque<int>* const, TrackingLayout<>::mapping<extents<signed char, 5, 5, 5>>>);\r\n    }\r\n\r\n    { // Check effect: 'direct-non-list-initializes ptr_ with std::move(p)'\r\n        using Ext      = extents<int, 2, 1, 3>;\r\n        char banana[6] = {'b', 'a', 'n', 'a', 'n', 'a'};\r\n        mdspan<char, Ext, layout_stride, AccessorWithTrackingDataHandle<char>> mds{\r\n            TrackingDataHandle<char>{1, banana}, layout_stride::mapping<Ext>{Ext{}, array{3, 6, 1}}};\r\n        assert(mds.data_handle().is_move_constructed());\r\n    }\r\n\r\n    { // Check effect: 'direct-non-list-initializes map_ with m'\r\n        using Ext = extents<signed char, 3, 3>;\r\n        char x[9] = {'\\\\', ' ', '/', ' ', 'X', ' ', '/', ' ', '\\\\'};\r\n        mdspan<char, Ext, TrackingLayout<>> mds{x, TrackingLayout<>::mapping<Ext>{Ext{}, 23}};\r\n        assert(mds.mapping().is_copy_constructed());\r\n    }\r\n\r\n    { // Check effect: 'value-initializes acc_'\r\n        using Ext    = extents<short, 2, 2, 3>;\r\n        int twelve[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};\r\n        mdspan<int, Ext, layout_stride, TrivialAccessor<int>> mds{\r\n            twelve, layout_stride::mapping<Ext>{Ext{}, array{2, 1, 4}}};\r\n        assert(mds.accessor().member == 0);\r\n    }\r\n}\r\n\r\nconstexpr void check_data_handle_and_mapping_and_accessor_constructor() {\r\n    { // Check effects\r\n        using Ext = extents<signed char, 4, 4>;\r\n        using Mds = mdspan<unsigned int, Ext, TrackingLayout<>, TrackingAccessor<unsigned int>>;\r\n\r\n        unsigned int identity_matrix[] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1};\r\n        Mds mds{TrackingDataHandle<unsigned int>{16, identity_matrix}, TrackingLayout<>::mapping<Ext>(17),\r\n            TrackingAccessor<unsigned int>{18}};\r\n\r\n        // Effects:\r\n        // - Direct-non-list-initializes ptr_ with std::move(p),\r\n        // - direct-non-list-initializes map_ with m, and\r\n        // - direct-non-list-initializes acc_ with a.\r\n        assert(mds.data_handle().is_move_constructed());\r\n        assert(mds.data_handle().get_id() == 16);\r\n        assert(mds.mapping().is_copy_constructed());\r\n        assert(mds.mapping().get_id() == 17);\r\n        assert(mds.accessor().is_copy_constructed());\r\n        assert(mds.accessor().get_id() == 18);\r\n    }\r\n\r\n    { // Check noexceptness (strengthened)\r\n        using Mds1 = mdspan<short, extents<int, 3, 3, 3>>;\r\n        static_assert(is_nothrow_constructible_v<Mds1, Mds1::data_handle_type, const Mds1::mapping_type&,\r\n            const Mds1::accessor_type&>);\r\n\r\n        using Mds2 = mdspan<short, extents<int, 3, 3, 3>, TrackingLayout<>>;\r\n        static_assert(!is_nothrow_constructible_v<Mds2, Mds2::data_handle_type, const Mds2::mapping_type&,\r\n            const Mds2::accessor_type&>);\r\n    }\r\n}\r\n\r\nconstexpr void check_construction_from_other_mdspan() {\r\n    { // Check constraint: 'is_constructible_v<mapping_type, const OtherLayoutPolicy::template\r\n      // mapping<OtherExtents>&>'\r\n        static_assert(is_nothrow_constructible_v<mdspan<int, extents<int, 4, 4, 4>, layout_stride>,\r\n            mdspan<int, dextents<long, 3>, layout_right>>); // strengthened\r\n        static_assert(!is_constructible_v<mdspan<float, dextents<long long, 2>, layout_left>,\r\n            mdspan<float, extents<signed char, 3, 3>, layout_right>>);\r\n        static_assert(!is_constructible_v<mdspan<double, dextents<unsigned int, 2>, layout_left>,\r\n            mdspan<double, extents<unsigned short, 5, 5, 5>, layout_left>>);\r\n    }\r\n\r\n    { // Check constraint: 'is_constructible_v<accessor_type, const OtherAccessor&>'\r\n        using Ext = extents<long, 8, 8, 8>;\r\n        static_assert(\r\n            is_nothrow_constructible_v<mdspan<const double, Ext, layout_right, default_accessor<const double>>,\r\n                mdspan<double, Ext, layout_right, default_accessor<double>>>); // strengthened\r\n        static_assert(!is_constructible_v<mdspan<const double, Ext, layout_right, TrivialAccessor<const double>>,\r\n            mdspan<double, Ext, layout_right, TrivialAccessor<double>>>);\r\n    }\r\n\r\n    { // Check explicitness\r\n        static_assert(NotImplicitlyConstructibleFrom<mdspan<int, extents<int, 4, 4>>, mdspan<int, dextents<long, 2>>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<mdspan<int, extents<int, 4, 4>, layout_left>,\r\n            mdspan<int, dextents<long, 2>, layout_stride>>);\r\n        static_assert(!NotImplicitlyConstructibleFrom<mdspan<int, dextents<long, 2>, layout_stride>,\r\n            mdspan<int, extents<int, 4, 4>, layout_left>>);\r\n        static_assert(NotImplicitlyConstructibleFrom<\r\n            mdspan<const int, extents<int, 4, 4>, layout_left, AccessorWithCustomOffsetPolicy<const int>>,\r\n            mdspan<int, extents<long, 4, 4>, layout_left, AccessorWithCustomOffsetPolicy<int>>>);\r\n        static_assert(!NotImplicitlyConstructibleFrom<\r\n            mdspan<const int, extents<int, 4, 4>, layout_left, default_accessor<const int>>,\r\n            mdspan<int, extents<long, 4, 4>, layout_left, default_accessor<int>>>);\r\n    }\r\n\r\n    { // Check effects\r\n        int data[] = {\r\n            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27};\r\n\r\n        using Ext = dextents<int, 3>;\r\n        mdspan<int, Ext, TrackingLayout<>, TrackingAccessor<int>> mds1{TrackingDataHandle<int>{4, data},\r\n            TrackingLayout<>::mapping<Ext>{Ext{3, 3, 3}, 4}, TrackingAccessor<int>{4}};\r\n        mdspan<const int, extents<int, 3, 3, 3>, TrackingLayout<>, TrackingAccessor<const int>> mds2{mds1};\r\n        assert(mds2.data_handle().is_copy_constructed());\r\n        assert(mds2.mapping().is_copy_constructed());\r\n        assert(mds2.accessor().is_copy_constructed());\r\n    }\r\n}\r\n\r\nconstexpr void check_defaulted_copy_and_move_assignment_operators() {\r\n    using Ext           = extents<int, 2, 2, 2>;\r\n    using Mds           = mdspan<short, Ext, TrackingLayout<>, TrackingAccessor<short>>;\r\n    short bits_of_218[] = {1, 1, 0, 1, 1, 0, 1, 0};\r\n    short bits_of_248[] = {1, 1, 1, 1, 1, 0, 0, 0};\r\n\r\n    { // Check defaulted copy assignment operator\r\n        Mds mds1{\r\n            TrackingDataHandle<short>{2, bits_of_218}, TrackingLayout<>::mapping<Ext>(4), TrackingAccessor<short>{8}};\r\n        Mds mds2{\r\n            TrackingDataHandle<short>{3, bits_of_248}, TrackingLayout<>::mapping<Ext>(5), TrackingAccessor<short>{9}};\r\n        mds1 = mds2;\r\n        assert(mds1.data_handle().is_copy_assigned());\r\n        assert(mds1.mapping().is_copy_assigned());\r\n        assert(mds1.accessor().is_copy_assigned());\r\n    }\r\n\r\n    { // Check defaulted move assignment operator\r\n        Mds mds1{\r\n            TrackingDataHandle<short>{2, bits_of_218}, TrackingLayout<>::mapping<Ext>(4), TrackingAccessor<short>{8}};\r\n        Mds mds2{\r\n            TrackingDataHandle<short>{3, bits_of_248}, TrackingLayout<>::mapping<Ext>(5), TrackingAccessor<short>{9}};\r\n        mds1 = move(mds2);\r\n        assert(mds1.data_handle().is_move_assigned());\r\n        assert(mds1.mapping().is_move_assigned());\r\n        assert(mds1.accessor().is_move_assigned());\r\n    }\r\n}\r\n\r\ntemplate <class Mds, class... IndexTypes>\r\nconcept CanCallMultidimSubscriptOp = requires(const Mds& mds, IndexTypes... indices) {\r\n    { mds[indices...] } -> same_as<typename Mds::reference>;\r\n};\r\n\r\nconstexpr void check_multidimensional_subscript_operator() {\r\n    { // Check constraint: '(is_convertible_v<OtherIndexTypes, index_type> && ...)'\r\n        using Mds = mdspan<int, dextents<int, 5>>;\r\n        static_assert(CanCallMultidimSubscriptOp<Mds, int, int, int, int, int>);\r\n        static_assert(CanCallMultidimSubscriptOp<Mds, signed char, short, int, long, long long>);\r\n        static_assert(CanCallMultidimSubscriptOp<Mds, unsigned char, unsigned short, unsigned int, unsigned long,\r\n            unsigned long long>);\r\n        static_assert(CanCallMultidimSubscriptOp<Mds, unsigned char, short, unsigned int, long, unsigned long long>);\r\n        static_assert(CanCallMultidimSubscriptOp<Mds, ConvertibleToInt<int>, int, int, int, int>);\r\n        static_assert(!CanCallMultidimSubscriptOp<Mds, int, int, int, int, NonConvertibleToAnything>);\r\n    }\r\n\r\n    { // Check constraint: '(is_nothrow_constructible_v<index_type, OtherIndexTypes> && ...)'\r\n        using Mds = mdspan<char, dextents<signed char, 2>>;\r\n        static_assert(CanCallMultidimSubscriptOp<Mds, ConvertibleToInt<int, IsNothrow::yes>, int>);\r\n        static_assert(!CanCallMultidimSubscriptOp<Mds, ConvertibleToInt<int, IsNothrow::no>, int>);\r\n    }\r\n\r\n    { // Check constraint: 'sizeof...(OtherIndexTypes) == rank()'\r\n        using Mds = mdspan<float, dextents<unsigned short, 3>>;\r\n        static_assert(CanCallMultidimSubscriptOp<Mds, int, int, int>);\r\n        static_assert(!CanCallMultidimSubscriptOp<Mds, int, int>);\r\n        static_assert(!CanCallMultidimSubscriptOp<Mds, int, int, int, int>);\r\n    }\r\n\r\n    { // Check correctness\r\n        using Ext = extents<unsigned char, 2, 2>;\r\n        vector<bool> bools{true, false, false, true};\r\n        mdspan<bool, Ext, TrackingLayout<layout_left>, VectorBoolAccessor> mds{\r\n            bools.begin(), TrackingLayout<layout_left>::mapping<Ext>(5)};\r\n        same_as<vector<bool>::reference> decltype(auto) r1 = mds[1, 1];\r\n        assert(r1);\r\n        same_as<vector<bool>::reference> decltype(auto) r2 = as_const(mds)[0, 1];\r\n        assert(!r2);\r\n\r\n        static_assert(noexcept(mds[1, 1])); // strengthened\r\n        static_assert(noexcept(as_const(mds)[0, 1])); // strengthened\r\n    }\r\n\r\n    { // Check that indices are moved and then casted to 'index_type'\r\n        using Ext = dextents<short, 2>;\r\n        struct FunnyIndex {\r\n            constexpr operator integral auto() const& noexcept {\r\n                return 0;\r\n            }\r\n\r\n            constexpr operator integral auto() && noexcept {\r\n                return 0;\r\n            }\r\n\r\n            constexpr operator Ext::index_type() && noexcept {\r\n                return 1;\r\n            }\r\n        };\r\n\r\n        int mat2x2[4] = {0, 0, 0, 1};\r\n        mdspan<int, Ext> mds{mat2x2, 2, 2};\r\n        FunnyIndex i;\r\n        assert((mds[i, i] == 1));\r\n    }\r\n\r\n    { // Check that indices are passed by value\r\n        struct WeirdIndex {\r\n            WeirdIndex() = default;\r\n            constexpr WeirdIndex(const WeirdIndex&) : val{1} {}\r\n            constexpr WeirdIndex(WeirdIndex&&) : val{2} {}\r\n\r\n            constexpr operator int() const noexcept {\r\n                return val;\r\n            }\r\n\r\n            int val = 0;\r\n        };\r\n\r\n        int ten2x2x3[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};\r\n        mdspan<int, extents<unsigned char, 2, 2, 3>> mds{ten2x2x3};\r\n        WeirdIndex i;\r\n        assert((mds[i, i, move(i)] == 1));\r\n    }\r\n}\r\n\r\ntemplate <class Mds, class IndexType, size_t Rank = Mds::rank()>\r\nconcept CanCallSubscriptOp = requires(const Mds& mds, span<IndexType, Rank> s, const array<IndexType, Rank>& a) {\r\n    { mds[s] } -> same_as<typename Mds::reference>;\r\n    { mds[a] } -> same_as<typename Mds::reference>;\r\n};\r\n\r\nconstexpr void check_span_array_subscript_operator() {\r\n    { // Check constraint: 'is_convertible_v<const OtherIndexType&, index_type>\r\n        using Mds = mdspan<int, dextents<unsigned char, 3>>;\r\n        static_assert(CanCallSubscriptOp<Mds, signed char>);\r\n        static_assert(CanCallSubscriptOp<Mds, short>);\r\n        static_assert(CanCallSubscriptOp<Mds, int>);\r\n        static_assert(CanCallSubscriptOp<Mds, long>);\r\n        static_assert(CanCallSubscriptOp<Mds, long long>);\r\n        static_assert(CanCallSubscriptOp<Mds, unsigned char>);\r\n        static_assert(CanCallSubscriptOp<Mds, unsigned short>);\r\n        static_assert(CanCallSubscriptOp<Mds, unsigned int>);\r\n        static_assert(CanCallSubscriptOp<Mds, unsigned long>);\r\n        static_assert(CanCallSubscriptOp<Mds, unsigned long long>);\r\n        static_assert(CanCallSubscriptOp<Mds, ConvertibleToInt<int>>);\r\n        static_assert(!CanCallSubscriptOp<Mds, NonConvertibleToAnything>);\r\n    }\r\n\r\n    { // Check constraint: 'is_nothrow_constructible_v<index_type, const OtherIndexType&>'\r\n        using Mds = mdspan<float, dextents<short, 3>>;\r\n        static_assert(CanCallSubscriptOp<Mds, ConvertibleToInt<unsigned long long, IsNothrow::yes>>);\r\n        static_assert(!CanCallSubscriptOp<Mds, ConvertibleToInt<unsigned short, IsNothrow::no>>);\r\n    }\r\n\r\n    { // Check function argument: '(span|array)::size() == rank()'\r\n        using Mds = mdspan<float, extents<long, 2, 3, 5>>;\r\n        static_assert(!CanCallSubscriptOp<Mds, int, 2>);\r\n        static_assert(!CanCallSubscriptOp<Mds, int, 4>);\r\n    }\r\n\r\n    { // Check correctness\r\n        using Ext = extents<unsigned short, 3, 3>;\r\n        vector<bool> bools{true, true, true, true, false, true, true, true, true};\r\n        mdspan<bool, Ext, TrackingLayout<>, VectorBoolAccessor> mds{bools.begin(), TrackingLayout<>::mapping<Ext>(99)};\r\n\r\n        array<signed char, 2> a1{1, 1};\r\n        same_as<vector<bool>::reference> decltype(auto) ar1 = mds[a1];\r\n        assert(!ar1);\r\n        span s1{a1};\r\n        same_as<vector<bool>::reference> decltype(auto) sr1 = mds[s1];\r\n        assert(!sr1);\r\n\r\n        array<unsigned long long, 2> a2{2, 2};\r\n        same_as<vector<bool>::reference> decltype(auto) ar2 = as_const(mds)[a2];\r\n        assert(ar2);\r\n        span s2{a2};\r\n        same_as<vector<bool>::reference> decltype(auto) sr2 = as_const(mds)[s2];\r\n        assert(sr2);\r\n    }\r\n\r\n    { // Check that indices are expanded in as_const function and passed to multidimensional subscript operator\r\n        using Ext = dextents<unsigned int, 2>;\r\n        struct FunkyIndex {\r\n            FunkyIndex()                  = default;\r\n            FunkyIndex(const FunkyIndex&) = delete;\r\n\r\n            constexpr operator integral auto() const& noexcept {\r\n                return 0;\r\n            }\r\n\r\n            constexpr operator integral auto() && noexcept {\r\n                return 0;\r\n            }\r\n\r\n            constexpr operator Ext::index_type() const& noexcept {\r\n                return 1;\r\n            }\r\n        };\r\n\r\n        char alpha[4] = {'a', 'b', 'c', 'd'};\r\n        mdspan<char, Ext> mds{alpha, 2, 2};\r\n        array<FunkyIndex, 2> a;\r\n        assert(mds[a] == 'd');\r\n        span s{a};\r\n        assert(mds[s] == 'd');\r\n    }\r\n}\r\n\r\nconstexpr void check_size() {\r\n    const int some_data[60] = {};\r\n\r\n    { // Not empty mdspan\r\n        mdspan mds1{some_data, extents<int, 3, 4, 5>{}};\r\n        assert(mds1.size() == 60);\r\n        mdspan mds2{some_data, extents<int, dynamic_extent, 5>{12}};\r\n        assert(mds2.size() == 60);\r\n        mdspan mds3{some_data, dextents<int, 3>{2, 3, 5}};\r\n        assert(mds3.size() == 30);\r\n    }\r\n\r\n    { // Empty mdspan\r\n        mdspan mds1{some_data, extents<int, 12, 5, 0>{}};\r\n        assert(mds1.size() == 0);\r\n        mdspan mds2{some_data, extents<int, 3, dynamic_extent, 4>{0}};\r\n        assert(mds2.size() == 0);\r\n        mdspan mds3{some_data, extents<int, dynamic_extent, 3, 4>{0}};\r\n        assert(mds3.size() == 0);\r\n    }\r\n\r\n    { // mdspan with 'rank() == 0'\r\n        mdspan mds{some_data, extents<signed char>{}};\r\n        assert(mds.size() == 1);\r\n    }\r\n\r\n    { // mdspan whose index space size would not be representable as index_type if 0 wasn't there\r\n        mdspan mds1{some_data, extents<signed char, 127, 2, 0>{}};\r\n        assert(mds1.size() == 0);\r\n        mdspan mds2{some_data, dextents<short, 3>{32767, 3, 0}};\r\n        assert(mds2.size() == 0);\r\n    }\r\n\r\n    { // Other properties\r\n        mdspan mds{some_data, extents<short, 2, 2, 3, 5>{}};\r\n        same_as<unsigned short> decltype(auto) s1 = mds.size();\r\n        assert(s1 == 60);\r\n        static_assert(noexcept(mds.size()));\r\n        same_as<unsigned short> decltype(auto) s2 = as_const(mds).size();\r\n        assert(s2 == 60);\r\n        static_assert(noexcept(as_const(mds).size()));\r\n    }\r\n}\r\n\r\nconstexpr void check_empty() {\r\n    const int some_data[24] = {};\r\n\r\n    { // Not empty mdspan\r\n        mdspan mds1{some_data, extents<int, 3, 3, 4>{}};\r\n        assert(!mds1.empty());\r\n        mdspan mds2{some_data, extents<int, 3, dynamic_extent, 4>{3}};\r\n        assert(!mds2.empty());\r\n        mdspan mds3{some_data, dextents<int, 3>{3, 3, 4}};\r\n        assert(!mds3.empty());\r\n    }\r\n\r\n    { // Empty mdspan\r\n        mdspan mds1{some_data, extents<int, 3, 3, 0>{}};\r\n        assert(mds1.empty());\r\n        mdspan mds2{some_data, extents<int, 3, dynamic_extent, 4>{0}};\r\n        assert(mds2.empty());\r\n        mdspan mds3{some_data, extents<int, dynamic_extent, 3, 4>{0}};\r\n        assert(mds3.empty());\r\n    }\r\n\r\n    { // mdspan with 'rank() == 0'\r\n        mdspan mds{some_data, extents<signed char>{}};\r\n        assert(!mds.empty());\r\n    }\r\n\r\n    { // mdspan whose index space size would not be representable as index_type if 0 wasn't there\r\n        mdspan mds1{some_data, extents<signed char, 127, 2, 0>{}};\r\n        assert(mds1.empty());\r\n        mdspan mds2{some_data, dextents<short, 3>{32767, 3, 0}};\r\n        assert(mds2.empty());\r\n    }\r\n\r\n    { // Other properties\r\n        mdspan mds{some_data, extents<int, 2, 3, 0>{}};\r\n        same_as<bool> decltype(auto) b1 = mds.empty();\r\n        assert(b1);\r\n        static_assert(noexcept(mds.empty()));\r\n        same_as<bool> decltype(auto) b2 = as_const(mds).empty();\r\n        assert(b2);\r\n        static_assert(noexcept(as_const(mds).empty()));\r\n    }\r\n}\r\n\r\nconstexpr void check_swap() {\r\n    { // Check swapping with tracking types\r\n        using E   = extents<int, 3, 3>;\r\n        using Mds = mdspan<int, E, TrackingLayout<>, TrackingAccessor<int>>;\r\n        static_assert(is_nothrow_swappable_v<Mds>);\r\n        static_assert(!is_swappable_v<const Mds>);\r\n\r\n        int a1[9] = {1, 0, 0, 0, 1, 0, 0, 0, 1};\r\n        Mds mds1{TrackingDataHandle<int>{1, a1}, TrackingLayout<>::mapping<E>(1), TrackingAccessor<int>{1}};\r\n        int a2[9] = {3, 0, 0, 0, 3, 0, 0, 0, 3};\r\n        Mds mds2{TrackingDataHandle<int>{3, a2}, TrackingLayout<>::mapping<E>(3), TrackingAccessor<int>{3}};\r\n        swap(mds1, mds2);\r\n        static_assert(is_void_v<decltype(swap(mds1, mds2))>);\r\n\r\n        assert(mds1.data_handle().get_id() == 3);\r\n        assert(mds1.data_handle().is_swapped());\r\n        assert(mds1.mapping().get_id() == 3);\r\n        assert(mds1.mapping().is_swapped());\r\n        assert(mds1.accessor().get_id() == 3);\r\n        assert(mds1.accessor().is_swapped());\r\n        assert((mds1[array{1, 1}] == 3));\r\n        assert((mds1[array{0, 1}] == 0));\r\n\r\n        assert(mds2.data_handle().get_id() == 1);\r\n        assert(mds2.data_handle().is_swapped());\r\n        assert(mds2.mapping().get_id() == 1);\r\n        assert(mds2.mapping().is_swapped());\r\n        assert(mds2.accessor().get_id() == 1);\r\n        assert(mds2.accessor().is_swapped());\r\n        assert((mds2[array{1, 1}] == 1));\r\n        assert((mds2[array{0, 1}] == 0));\r\n    }\r\n\r\n    { // Check swapping with standard layout and accessor\r\n        using Mds = mdspan<int, extents<int, 2, 2>>;\r\n        static_assert(is_nothrow_swappable_v<Mds>);\r\n        static_assert(!is_swappable_v<const Mds>);\r\n\r\n        int diag[] = {1, 0, 0, 1};\r\n        Mds mds1{diag};\r\n        int revdiag[] = {0, 1, 1, 0};\r\n        Mds mds2{revdiag};\r\n\r\n        swap(mds1, mds2);\r\n        assert(mds1.data_handle() == revdiag);\r\n        assert(mds2.data_handle() == diag);\r\n    }\r\n}\r\n\r\nconstexpr void check_getters() {\r\n    int data[6] = {1, 2, 3, 4, 5, 6};\r\n    auto mds    = mdspan(data, 2, 3);\r\n\r\n    { // Check 'extents()'\r\n        same_as<const dextents<size_t, 2>&> decltype(auto) e = mds.extents();\r\n        assert((e == dextents<int, 2>{2, 3}));\r\n        assert(&e == &mds.mapping().extents());\r\n        static_assert(noexcept(mds.extents()));\r\n        same_as<const dextents<size_t, 2>&> decltype(auto) ce = as_const(mds).extents();\r\n        assert(&ce == &e);\r\n        static_assert(noexcept(as_const(mds).extents()));\r\n    }\r\n\r\n    { // Check 'data_handle()'\r\n        same_as<int* const&> decltype(auto) dh = mds.data_handle();\r\n        assert(dh == data);\r\n        static_assert(noexcept(mds.data_handle()));\r\n        same_as<int* const&> decltype(auto) cdh = as_const(mds).data_handle();\r\n        assert(&cdh == &dh);\r\n        static_assert(noexcept(as_const(mds).data_handle()));\r\n    }\r\n\r\n    { // Check 'mapping()'\r\n        using E = dextents<size_t, 2>;\r\n\r\n        same_as<const layout_right::mapping<E>&> decltype(auto) mp = mds.mapping();\r\n        assert((mp == layout_stride::mapping<E>{E{2, 3}, array{3, 1}}));\r\n        static_assert(noexcept(mds.mapping()));\r\n        same_as<const layout_right::mapping<E>&> decltype(auto) cmp = as_const(mds).mapping();\r\n        assert(&cmp == &mp);\r\n        static_assert(noexcept(as_const(mds).mapping()));\r\n    }\r\n\r\n    { // Check 'accessor()'\r\n        same_as<const default_accessor<int>&> decltype(auto) acc = mds.accessor();\r\n        static_assert(noexcept(mds.accessor()));\r\n        same_as<const default_accessor<int>&> decltype(auto) cacc = as_const(mds).accessor();\r\n        assert(&cacc == &acc);\r\n        static_assert(noexcept(as_const(mds).accessor()));\r\n    }\r\n}\r\n\r\nconstexpr void check_is_always_functions() {\r\n    using Mds = mdspan<double, extents<long long, 4, 5, dynamic_extent>, layout_stride, TrivialAccessor<double>>;\r\n\r\n    { // Check results\r\n        static_assert(Mds::is_always_unique() == Mds::mapping_type::is_always_unique());\r\n        static_assert(Mds::is_always_exhaustive() == Mds::mapping_type::is_always_exhaustive());\r\n        static_assert(Mds::is_always_strided() == Mds::mapping_type::is_always_strided());\r\n    }\r\n\r\n    { // Check types\r\n        static_assert(same_as<decltype(Mds::is_always_unique()), bool>);\r\n        static_assert(same_as<decltype(Mds::is_always_exhaustive()), bool>);\r\n        static_assert(same_as<decltype(Mds::is_always_strided()), bool>);\r\n    }\r\n\r\n    { // Check noexceptness (strengthened)\r\n        static_assert(noexcept(Mds::is_always_unique()) == noexcept(Mds::mapping_type::is_always_unique()));\r\n        static_assert(noexcept(Mds::is_always_exhaustive()) == noexcept(Mds::mapping_type::is_always_exhaustive()));\r\n        static_assert(noexcept(Mds::is_always_strided()) == noexcept(Mds::mapping_type::is_always_strided()));\r\n    }\r\n}\r\n\r\nconstexpr void check_is_functions() {\r\n    using E            = extents<int, 2, 2, 3>;\r\n    vector<bool> bools = {true, false, true, true, true, true, true, false, true, false, false, false};\r\n    mdspan<bool, E, layout_stride, VectorBoolAccessor> mds{\r\n        bools.begin(), layout_stride::mapping<E>{E{}, array{6, 1, 2}}};\r\n\r\n    { // Check results\r\n        assert(mds.is_unique() == mds.mapping().is_unique());\r\n        assert(mds.is_exhaustive() == mds.mapping().is_exhaustive());\r\n        assert(mds.is_strided() == mds.mapping().is_strided());\r\n    }\r\n\r\n    { // Check types\r\n        static_assert(same_as<decltype(mds.is_unique()), bool>);\r\n        static_assert(same_as<decltype(mds.is_exhaustive()), bool>);\r\n        static_assert(same_as<decltype(mds.is_strided()), bool>);\r\n    }\r\n\r\n    { // Check noexceptness (strengthened)\r\n        static_assert(noexcept(mds.is_unique()) == noexcept(mds.mapping().is_unique()));\r\n        static_assert(noexcept(mds.is_exhaustive()) == noexcept(mds.mapping().is_exhaustive()));\r\n        static_assert(noexcept(mds.is_strided()) == noexcept(mds.mapping().is_strided()));\r\n    }\r\n}\r\n\r\nconstexpr void check_stride_function() {\r\n    using E   = extents<signed char, 2, 3, 5>;\r\n    using Mds = mdspan<int, E, layout_stride>;\r\n\r\n    int data[] = {\r\n        1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30};\r\n    Mds mds{data, layout_stride::mapping<E>{E{}, array{15, 1, 3}}};\r\n    same_as<Mds::index_type> decltype(auto) s1 = mds.stride(0);\r\n    assert(s1 == 15);\r\n    same_as<Mds::index_type> decltype(auto) s2 = as_const(mds).stride(1);\r\n    assert(s2 == 1);\r\n\r\n    struct ConvertibleToRankType {\r\n        constexpr operator integral auto() const {\r\n            return 1;\r\n        }\r\n\r\n        constexpr operator Mds::rank_type() const {\r\n            return 2;\r\n        }\r\n    };\r\n\r\n    same_as<Mds::index_type> decltype(auto) s3 = as_const(mds).stride(ConvertibleToRankType{});\r\n    assert(s3 == 3);\r\n}\r\n\r\nconstexpr void check_deduction_guides() {\r\n    { // CArray\r\n        int carray[10]{};\r\n        mdspan mds{carray};\r\n        static_assert(same_as<decltype(mds), mdspan<int, extents<size_t, 10>>>);\r\n    }\r\n\r\n    { // Pointer&&\r\n        float carray[20]{};\r\n        float* ptr = carray;\r\n        mdspan mds{ptr};\r\n        static_assert(same_as<decltype(mds), mdspan<float, extents<size_t>>>);\r\n    }\r\n\r\n    { // ElementType*, Integrals...\r\n        byte carray[30]{};\r\n        byte* ptr = carray;\r\n        mdspan mds1{ptr, 6, 5};\r\n        static_assert(same_as<decltype(mds1), mdspan<byte, dextents<size_t, 2>>>);\r\n        mdspan mds2{ptr, 2, 3, 5};\r\n        static_assert(same_as<decltype(mds2), mdspan<byte, dextents<size_t, 3>>>);\r\n    }\r\n\r\n    { // ElementType*, span<OtherIndexType, N>\r\n        const int carray[40]{};\r\n        const int* ptr    = carray;\r\n        const int exts1[] = {2, 4, 5};\r\n        span s1{exts1};\r\n        mdspan mds1{ptr, s1};\r\n        static_assert(same_as<decltype(mds1), mdspan<const int, dextents<size_t, 3>>>);\r\n        const long exts2[] = {2, 2, 5, 2};\r\n        span s2{exts2};\r\n        mdspan mds2{ptr, s2};\r\n        static_assert(same_as<decltype(mds2), mdspan<const int, dextents<size_t, 4>>>);\r\n    }\r\n\r\n    { // ElementType*, const array<OtherIndexType, N>&\r\n        const char carray[50]{};\r\n        const char* ptr = carray;\r\n        array a1{5, 10};\r\n        mdspan mds1{ptr, a1};\r\n        static_assert(same_as<decltype(mds1), mdspan<const char, dextents<size_t, 2>>>);\r\n        array a2{2, 5, 5};\r\n        mdspan mds2{ptr, a2};\r\n        static_assert(same_as<decltype(mds2), mdspan<const char, dextents<size_t, 3>>>);\r\n    }\r\n\r\n    { // ElementType*, const extents<IndexType, ExtentsPack...>&\r\n        const double carray[60]{};\r\n        const double* ptr = carray;\r\n        extents<size_t, 6, 10> exts1;\r\n        mdspan mds1{ptr, exts1};\r\n        static_assert(same_as<decltype(mds1), mdspan<const double, extents<size_t, 6, 10>>>);\r\n        extents<unsigned char, 4, dynamic_extent> exts2{4};\r\n        mdspan mds2{ptr, exts2};\r\n        static_assert(same_as<decltype(mds2), mdspan<const double, extents<unsigned char, 4, dynamic_extent>>>);\r\n    }\r\n\r\n    { // ElementType*, const MappingType&\r\n        const long carray[70]{};\r\n        const long* ptr = carray;\r\n        mdspan mds1{ptr, layout_left::mapping<extents<int, 4, 4>>{}};\r\n        static_assert(same_as<decltype(mds1), mdspan<const long, extents<int, 4, 4>, layout_left>>);\r\n        mdspan mds2{ptr, layout_stride::mapping<dextents<int, 3>>{dextents<int, 3>{2, 3, 5}, array{3, 1, 6}}};\r\n        static_assert(same_as<decltype(mds2), mdspan<const long, dextents<int, 3>, layout_stride>>);\r\n    }\r\n\r\n    { // const typename AccessorType::data_handle_type&, const MappingType&, const AccessorType&\r\n        vector<bool> bools = {true, false, true, false};\r\n        mdspan mds{bools.begin(), TrackingLayout<>::mapping<extents<int, 2, 2>>(1), VectorBoolAccessor{}};\r\n        static_assert(same_as<decltype(mds), mdspan<bool, extents<int, 2, 2>, TrackingLayout<>, VectorBoolAccessor>>);\r\n    }\r\n}\r\n\r\nconstexpr bool test() {\r\n    check_modeled_concepts_and_member_types<dextents<unsigned long long, 3>, layout_left, default_accessor>();\r\n    check_modeled_concepts_and_member_types<dextents<unsigned long long, 3>, layout_right, default_accessor>();\r\n    check_modeled_concepts_and_member_types<dextents<unsigned long long, 3>, layout_stride, default_accessor>();\r\n    check_modeled_concepts_and_member_types<dextents<unsigned long long, 3>, layout_left, TrackingAccessor>();\r\n    check_modeled_concepts_and_member_types<extents<signed char, 2, 3, 5>, layout_stride, TrivialAccessor>();\r\n    check_modeled_concepts_and_member_types<extents<unsigned short, 2, 4, dynamic_extent>, TrackingLayout<>,\r\n        AccessorWithTrackingDataHandle>();\r\n    check_observers();\r\n    check_default_constructor();\r\n    check_defaulted_copy_and_move_constructors();\r\n    check_data_handle_and_indices_pack_constructor();\r\n    check_data_handle_and_span_array_constructors();\r\n    check_data_handle_and_extents_constructor();\r\n    check_data_handle_and_mapping_constructor();\r\n    check_data_handle_and_mapping_and_accessor_constructor();\r\n    check_construction_from_other_mdspan();\r\n    check_defaulted_copy_and_move_assignment_operators();\r\n    check_multidimensional_subscript_operator();\r\n    check_span_array_subscript_operator();\r\n    check_size();\r\n    check_empty();\r\n    check_swap();\r\n    check_getters();\r\n    check_is_always_functions();\r\n    check_is_functions();\r\n    check_stride_function();\r\n    check_deduction_guides();\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(test());\r\n    test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_mdspan_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_mdspan_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <mdspan>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\nconstexpr array<int, 256> some_ints{};\r\n\r\nvoid test_construction_from_other_mdspan() {\r\n    mdspan mds1{some_ints.data(), 8, 2, 8};\r\n    // For each rank index r of extents_type, static_extent(r) == dynamic_extent || static_extent(r) == other.extent(r)\r\n    // must be true\r\n    [[maybe_unused]] mdspan<const int, extents<int, 8, 8, 2>> mds2{mds1};\r\n}\r\n\r\nvoid test_access_with_invalid_multidimensional_index_1() {\r\n    mdspan mds{some_ints.data(), 4, 4};\r\n    // I must be a multidimensional index in extents()\r\n    (void) mds[3, 4];\r\n}\r\n\r\nvoid test_access_with_nonrepresentable_index_1() {\r\n    mdspan mds{some_ints.data(), dextents<unsigned char, 2>{2, 3}};\r\n    (void) mds[256u, -255];\r\n}\r\n\r\nvoid test_access_with_invalid_multidimensional_index_2() {\r\n    mdspan mds{some_ints.data(), 5, 5};\r\n    // I must be a multidimensional index in extents()\r\n    (void) mds[array{4, 5}];\r\n}\r\n\r\nvoid test_access_with_nonrepresentable_index_2() {\r\n    mdspan mds{some_ints.data(), dextents<unsigned char, 2>{2, 3}};\r\n    (void) mds[array{256, -255}];\r\n}\r\n\r\nvoid test_size_when_index_type_is_signed() {\r\n    mdspan mds{some_ints.data(), dextents<signed char, 3>{8, 8, 4}};\r\n    // The size of the multidimensional index space extents() must be representable as a value of type size_type\r\n    (void) mds.size();\r\n}\r\n\r\nvoid test_size_when_index_type_is_unsigned() {\r\n    mdspan mds{some_ints.data(), dextents<unsigned char, 3>{8, 8, 4}};\r\n    // The size of the multidimensional index space extents() must be representable as a value of type size_type\r\n    (void) mds.size();\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_construction_from_other_mdspan,\r\n        test_access_with_invalid_multidimensional_index_1,\r\n        test_access_with_nonrepresentable_index_1,\r\n        test_access_with_invalid_multidimensional_index_2,\r\n        test_access_with_nonrepresentable_index_2,\r\n        test_size_when_index_type_is_signed,\r\n        test_size_when_index_type_is_unsigned,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_msabi/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0009R18_mdspan_msabi/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Tests MSVC STL specific behavior on ABI.\r\n\r\n#include <mdspan>\r\n#include <type_traits>\r\n\r\n#include <test_mdspan_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// When 'E::rank_dynamic()' is equal to 0 then 'is_empty_v<E>' should be true\r\nstatic_assert(!is_empty_v<dextents<int, 2>>);\r\nstatic_assert(!is_empty_v<extents<int, 3, dynamic_extent>>);\r\nstatic_assert(is_empty_v<extents<int, 3, 3>>);\r\nstatic_assert(is_empty_v<extents<int>>);\r\n\r\n// When 'M::extents_type::rank_dynamic()' is equal to 0 then 'is_empty_v<M>' should be true\r\nstatic_assert(!is_empty_v<layout_left::mapping<dextents<long long, 2>>>);\r\nstatic_assert(!is_empty_v<layout_left::mapping<extents<long long, 3, dynamic_extent>>>);\r\nstatic_assert(is_empty_v<layout_left::mapping<extents<long long, 3, 3>>>);\r\nstatic_assert(is_empty_v<layout_left::mapping<extents<long long>>>);\r\n\r\n// When 'M::extents_type::rank_dynamic()' is equal to 0 then 'is_empty_v<M>' should be true\r\nstatic_assert(!is_empty_v<layout_right::mapping<dextents<long, 2>>>);\r\nstatic_assert(!is_empty_v<layout_right::mapping<extents<long, 3, dynamic_extent>>>);\r\nstatic_assert(is_empty_v<layout_right::mapping<extents<long, 3, 3>>>);\r\nstatic_assert(is_empty_v<layout_right::mapping<extents<long>>>);\r\n\r\n// When 'M::extents_type::rank()' is equal to 0 then 'is_empty_v<M>' should be true\r\nstatic_assert(!is_empty_v<layout_stride::mapping<dextents<long long, 2>>>);\r\nstatic_assert(!is_empty_v<layout_stride::mapping<extents<long long, 3, dynamic_extent>>>);\r\nstatic_assert(!is_empty_v<layout_stride::mapping<extents<long long, 3, 3>>>);\r\nstatic_assert(is_empty_v<layout_stride::mapping<extents<long long>>>);\r\n\r\n// When\r\n// * 'Mds::accessor_type' is a specialization of 'default_accessor', and\r\n// * 'Mds::layout_type' is\r\n//   * 'layout_left' or 'layout_right' and 'Mds::extents_type::rank_dynamic() == 0', or\r\n//   * 'layout_stride' and 'Mds::extents_type::rank() == 0'\r\n// then 'sizeof(Mds) == sizeof(void*)'.\r\nstatic_assert(sizeof(mdspan<int, extents<int, 3, 3, 3>, layout_left>) == sizeof(void*));\r\nstatic_assert(sizeof(mdspan<int, dextents<int, 3>, layout_left>) > sizeof(void*));\r\nstatic_assert(sizeof(mdspan<int, extents<int, 3, 3, 3>, layout_left, TrivialAccessor<int>>) > sizeof(void*));\r\n\r\nstatic_assert(sizeof(mdspan<long, extents<long, 2, 2, 2>, layout_right>) == sizeof(void*));\r\nstatic_assert(sizeof(mdspan<long, dextents<long, 2>, layout_right>) > sizeof(void*));\r\nstatic_assert(sizeof(mdspan<long, extents<long, 2, 2, 2>, layout_right, TrivialAccessor<long>>) > sizeof(void*));\r\n\r\nstatic_assert(sizeof(mdspan<short, extents<short>, layout_stride>) == sizeof(void*));\r\nstatic_assert(sizeof(mdspan<short, extents<short, 4, 4, 4>, layout_stride>) > sizeof(void*));\r\nstatic_assert(sizeof(mdspan<short, dextents<short, 4>, layout_stride>) > sizeof(void*));\r\nstatic_assert(sizeof(mdspan<short, extents<short, 4, 4, 4>, layout_stride, TrivialAccessor<short>>) > sizeof(void*));\r\n"
  },
  {
    "path": "tests/std/tests/P0019R8_atomic_ref/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0019R8_atomic_ref/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <atomic>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <execution>\r\n#include <functional>\r\n#include <memory>\r\n#include <numeric>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nstruct bigint {\r\n    int value;\r\n    int more_value[10];\r\n\r\n    bigint(int value_ = 0) : value(value_) {}\r\n\r\n    operator int() const {\r\n        return value;\r\n    }\r\n};\r\n\r\nstruct int128 {\r\n    long long value;\r\n    long long more_value;\r\n\r\n    int128(int value_ = 0) : value(value_), more_value(0) {}\r\n\r\n    operator int() const {\r\n        return static_cast<int>(value);\r\n    }\r\n};\r\n\r\n// Also test constraints and conditional existence of difference_type specified by\r\n// P3323R1 \"Forbid atomic<cv T>, Specify atomic_ref<cv T>\",\r\n// and convertibility specified by\r\n// P3860R1 \"Make atomic_ref<T> Convertible To atomic_ref<const T>\".\r\n\r\ntemplate <class T, class U>\r\nvoid test_atomic_ref_not_convertible_to() { // COMPILE-ONLY\r\n    static_assert(!std::is_convertible_v<std::atomic_ref<T>, std::atomic_ref<U>>);\r\n    static_assert(!std::is_convertible_v<const std::atomic_ref<T>, std::atomic_ref<U>>);\r\n    static_assert(!std::is_convertible_v<std::atomic_ref<T>&, std::atomic_ref<U>>);\r\n    static_assert(!std::is_convertible_v<const std::atomic_ref<T>&, std::atomic_ref<U>>);\r\n\r\n    static_assert(!std::is_constructible_v<std::atomic_ref<U>, std::atomic_ref<T>>);\r\n    static_assert(!std::is_constructible_v<std::atomic_ref<U>, const std::atomic_ref<T>>);\r\n    static_assert(!std::is_constructible_v<std::atomic_ref<U>, std::atomic_ref<T>&>);\r\n    static_assert(!std::is_constructible_v<std::atomic_ref<U>, const std::atomic_ref<T>&>);\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_atomic_ref_constraints_single() { // COMPILE-ONLY\r\n    using TD = std::remove_cv_t<T>;\r\n    using AR = std::atomic_ref<T>;\r\n\r\n    static_assert(std::is_same_v<typename AR::value_type, TD>);\r\n    static_assert(requires(const AR& r, TD v, std::memory_order ord) {\r\n        r.operator TD();\r\n        { r.load() } -> std::same_as<TD>;\r\n        { r.load(ord) } -> std::same_as<TD>;\r\n        { r.wait(v) } -> std::same_as<void>;\r\n        { r.wait(v, ord) } -> std::same_as<void>;\r\n    });\r\n    {\r\n        [[maybe_unused]] auto instantiator = [](const AR& r, TD v, std::memory_order ord) {\r\n            (void) r.operator TD();\r\n            (void) r.load();\r\n            (void) r.load(ord);\r\n            r.wait(v);\r\n            r.wait(v, ord);\r\n        };\r\n    }\r\n\r\n    if constexpr (!std::is_const_v<T>) {\r\n        static_assert(requires(const AR& r, TD v, TD& vx, std::memory_order ord1, std::memory_order ord2) {\r\n            { r.store(v) } -> std::same_as<void>;\r\n            { r.store(v, ord1) } -> std::same_as<void>;\r\n            { r = v } -> std::same_as<TD>;\r\n            { r.exchange(v) } -> std::same_as<TD>;\r\n            { r.exchange(v, ord1) } -> std::same_as<TD>;\r\n            { r.compare_exchange_weak(vx, v) } -> std::same_as<bool>;\r\n            { r.compare_exchange_weak(vx, v, ord1) } -> std::same_as<bool>;\r\n            { r.compare_exchange_weak(vx, v, ord1, ord2) } -> std::same_as<bool>;\r\n            { r.compare_exchange_strong(vx, v) } -> std::same_as<bool>;\r\n            { r.compare_exchange_strong(vx, v, ord1) } -> std::same_as<bool>;\r\n            { r.compare_exchange_strong(vx, v, ord1, ord2) } -> std::same_as<bool>;\r\n            { r.notify_one() } -> std::same_as<void>;\r\n            { r.notify_all() } -> std::same_as<void>;\r\n        });\r\n\r\n        [[maybe_unused]] auto instantiator = [](const AR& r, TD v, TD& vx, std::memory_order ord1,\r\n                                                 std::memory_order ord2) {\r\n            r.store(v);\r\n            r.store(v, ord1);\r\n            (void) (r = v);\r\n            (void) r.exchange(v);\r\n            (void) r.exchange(v, ord1);\r\n            (void) r.compare_exchange_weak(vx, v);\r\n            (void) r.compare_exchange_weak(vx, v, ord1);\r\n            (void) r.compare_exchange_weak(vx, v, ord1, ord2);\r\n            (void) r.compare_exchange_strong(vx, v);\r\n            (void) r.compare_exchange_strong(vx, v, ord1);\r\n            (void) r.compare_exchange_strong(vx, v, ord1, ord2);\r\n            r.notify_one();\r\n            r.notify_all();\r\n        };\r\n    } else {\r\n        static_assert(!requires(const AR& r, TD v) { r.store(v); });\r\n        static_assert(!requires(const AR& r, TD v, std::memory_order ord) { r.store(v, ord); });\r\n        static_assert(!requires(const AR& r, TD v) { r = v; });\r\n        static_assert(!requires(const AR& r, TD v) { r.exchange(v); });\r\n        static_assert(!requires(const AR& r, TD v, std::memory_order ord) { r.exchange(v, ord); });\r\n        static_assert(!requires(const AR& r, TD& v1, TD v2) { r.compare_exchange_weak(v1, v2); });\r\n        static_assert(\r\n            !requires(const AR& r, TD& v1, TD v2, std::memory_order ord) { r.compare_exchange_weak(v1, v2, ord); });\r\n        static_assert(!requires(const AR& r, TD& v1, TD v2, std::memory_order ord1, std::memory_order ord2) {\r\n            r.compare_exchange_weak(v1, v2, ord1, ord2);\r\n        });\r\n        static_assert(!requires(const AR& r, TD& v1, TD v2) { r.compare_exchange_strong(v1, v2); });\r\n        static_assert(\r\n            !requires(const AR& r, TD& v1, TD v2, std::memory_order ord) { r.compare_exchange_strong(v1, v2, ord); });\r\n        static_assert(!requires(const AR& r, TD& v1, TD v2, std::memory_order ord1, std::memory_order ord2) {\r\n            r.compare_exchange_strong(v1, v2, ord1, ord2);\r\n        });\r\n        static_assert(!requires(const AR& r) { r.notify_one(); });\r\n        static_assert(!requires(const AR& r) { r.notify_all(); });\r\n    }\r\n\r\n    constexpr bool has_difference_type = (std::is_arithmetic_v<TD> && !std::is_same_v<TD, bool>)\r\n                                      || (std::is_pointer_v<TD> && std::is_object_v<std::remove_pointer_t<TD>>);\r\n\r\n    if constexpr (has_difference_type) {\r\n        if constexpr (std::is_arithmetic_v<TD>) {\r\n            static_assert(std::is_same_v<typename AR::difference_type, TD>);\r\n        } else {\r\n            static_assert(std::is_same_v<typename AR::difference_type, std::ptrdiff_t>);\r\n        }\r\n    } else {\r\n        static_assert(!requires { typename AR::difference_type; });\r\n    }\r\n\r\n    if constexpr (has_difference_type && !std::is_const_v<T>) {\r\n        static_assert(requires(const AR& r, AR::difference_type d, std::memory_order ord) {\r\n            { r.fetch_add(d) } -> std::same_as<TD>;\r\n            { r.fetch_add(d, ord) } -> std::same_as<TD>;\r\n            { r.fetch_sub(d) } -> std::same_as<TD>;\r\n            { r.fetch_sub(d, ord) } -> std::same_as<TD>;\r\n            { r += d } -> std::same_as<TD>;\r\n            { r -= d } -> std::same_as<TD>;\r\n        });\r\n\r\n        [[maybe_unused]] auto instantiator = [](const AR& r, AR::difference_type d, std::memory_order ord) {\r\n            (void) r.fetch_add(d);\r\n            (void) r.fetch_add(d, ord);\r\n            (void) r.fetch_sub(d);\r\n            (void) r.fetch_sub(d, ord);\r\n            (void) (r += d);\r\n            (void) (r -= d);\r\n        };\r\n    } else {\r\n        static_assert(!requires(const AR& r, AR::difference_type d) { r.fetch_add(d); });\r\n        static_assert(!requires(const AR& r, AR::difference_type d, std::memory_order ord) { r.fetch_add(d, ord); });\r\n        static_assert(!requires(const AR& r, AR::difference_type d) { r.fetch_sub(d); });\r\n        static_assert(!requires(const AR& r, AR::difference_type d, std::memory_order ord) { r.fetch_sub(d, ord); });\r\n        static_assert(!requires(const AR& r, AR::difference_type d) { r += d; });\r\n        static_assert(!requires(const AR& r, AR::difference_type d) { r -= d; });\r\n    }\r\n\r\n    if constexpr (has_difference_type && !std::is_floating_point_v<TD> && !std::is_const_v<T>) {\r\n        static_assert(requires(const AR& r) {\r\n            { ++r } -> std::same_as<TD>;\r\n            { r++ } -> std::same_as<TD>;\r\n            { --r } -> std::same_as<TD>;\r\n            { r-- } -> std::same_as<TD>;\r\n        });\r\n\r\n        [[maybe_unused]] auto instantiator = [](const AR& r) {\r\n            (void) ++r;\r\n            (void) r++;\r\n            (void) --r;\r\n            (void) r--;\r\n        };\r\n    } else {\r\n        static_assert(!requires(const AR& r) { ++r; });\r\n        static_assert(!requires(const AR& r) { r++; });\r\n        static_assert(!requires(const AR& r) { --r; });\r\n        static_assert(!requires(const AR& r) { r--; });\r\n    }\r\n\r\n    if constexpr (std::is_integral_v<TD> && !std::is_same_v<TD, bool> && !std::is_const_v<T>) {\r\n        static_assert(requires(const AR& r, TD v, std::memory_order ord) {\r\n            { r.fetch_and(v) } -> std::same_as<TD>;\r\n            { r.fetch_and(v, ord) } -> std::same_as<TD>;\r\n            { r.fetch_or(v) } -> std::same_as<TD>;\r\n            { r.fetch_or(v, ord) } -> std::same_as<TD>;\r\n            { r.fetch_xor(v) } -> std::same_as<TD>;\r\n            { r.fetch_xor(v, ord) } -> std::same_as<TD>;\r\n            { r &= v } -> std::same_as<TD>;\r\n            { r |= v } -> std::same_as<TD>;\r\n            { r ^= v } -> std::same_as<TD>;\r\n        });\r\n\r\n        [[maybe_unused]] auto instantiator = [](const AR& r, TD v, std::memory_order ord) {\r\n            (void) r.fetch_and(v);\r\n            (void) r.fetch_and(v, ord);\r\n            (void) r.fetch_or(v);\r\n            (void) r.fetch_or(v, ord);\r\n            (void) r.fetch_xor(v);\r\n            (void) r.fetch_xor(v, ord);\r\n            (void) (r &= v);\r\n            (void) (r |= v);\r\n            (void) (r ^= v);\r\n        };\r\n    } else {\r\n        static_assert(!requires(const AR& r, TD v) { r.fetch_and(v); });\r\n        static_assert(!requires(const AR& r, TD v, std::memory_order ord) { r.fetch_and(v, ord); });\r\n        static_assert(!requires(const AR& r, TD v) { r.fetch_or(v); });\r\n        static_assert(!requires(const AR& r, TD v, std::memory_order ord) { r.fetch_or(v, ord); });\r\n        static_assert(!requires(const AR& r, TD v) { r.fetch_xor(v); });\r\n        static_assert(!requires(const AR& r, TD v, std::memory_order ord) { r.fetch_xor(v, ord); });\r\n        static_assert(!requires(const AR& r, TD v) { r &= v; });\r\n        static_assert(!requires(const AR& r, TD v) { r |= v; });\r\n        static_assert(!requires(const AR& r, TD v) { r ^= v; });\r\n    }\r\n}\r\n\r\ntemplate <class T, class MoreCv>\r\nvoid test_atomic_ref_cv_convertibility() { // COMPILE-ONLY\r\n    static_assert(std::is_nothrow_convertible_v<std::atomic_ref<T>, std::atomic_ref<MoreCv>>);\r\n    static_assert(std::is_nothrow_convertible_v<const std::atomic_ref<T>, std::atomic_ref<MoreCv>>);\r\n    static_assert(std::is_nothrow_convertible_v<std::atomic_ref<T>&, std::atomic_ref<MoreCv>>);\r\n    static_assert(std::is_nothrow_convertible_v<const std::atomic_ref<T>&, std::atomic_ref<MoreCv>>);\r\n\r\n    static_assert(std::is_nothrow_constructible_v<std::atomic_ref<MoreCv>, std::atomic_ref<T>>);\r\n    static_assert(std::is_nothrow_constructible_v<std::atomic_ref<MoreCv>, const std::atomic_ref<T>>);\r\n    static_assert(std::is_nothrow_constructible_v<std::atomic_ref<MoreCv>, std::atomic_ref<T>&>);\r\n    static_assert(std::is_nothrow_constructible_v<std::atomic_ref<MoreCv>, const std::atomic_ref<T>&>);\r\n\r\n    [[maybe_unused]] auto instantiator = [](std::atomic_ref<T>& ar) {\r\n        [[maybe_unused]] std::atomic_ref<MoreCv> ref_cv1 = ar;\r\n        [[maybe_unused]] std::atomic_ref<MoreCv> ref_cv2{ar};\r\n        [[maybe_unused]] std::atomic_ref<MoreCv> ref_cv3 = std::as_const(ar);\r\n        [[maybe_unused]] std::atomic_ref<MoreCv> ref_cv4{std::as_const(ar)};\r\n        [[maybe_unused]] std::atomic_ref<MoreCv> ref_cv5 = std::move(ar);\r\n        [[maybe_unused]] std::atomic_ref<MoreCv> ref_cv6{std::move(ar)};\r\n        [[maybe_unused]] std::atomic_ref<MoreCv> ref_cv7 = std::move(std::as_const(ar));\r\n        [[maybe_unused]] std::atomic_ref<MoreCv> ref_cv8{std::move(std::as_const(ar))};\r\n    };\r\n\r\n    test_atomic_ref_not_convertible_to<MoreCv, T>();\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_atomic_ref_constraints_cv() { // COMPILE-ONLY\r\n    static_assert(!std::is_const_v<T> && !std::is_volatile_v<T>);\r\n    test_atomic_ref_constraints_single<T>();\r\n    test_atomic_ref_constraints_single<const T>();\r\n    test_atomic_ref_cv_convertibility<T, const T>();\r\n    if constexpr (std::atomic_ref<T>::is_always_lock_free) {\r\n        test_atomic_ref_constraints_single<volatile T>();\r\n        test_atomic_ref_constraints_single<const volatile T>();\r\n        test_atomic_ref_cv_convertibility<T, volatile T>();\r\n        test_atomic_ref_cv_convertibility<T, const volatile T>();\r\n        test_atomic_ref_cv_convertibility<const T, const volatile T>();\r\n        test_atomic_ref_cv_convertibility<volatile T, const volatile T>();\r\n    }\r\n\r\n    test_atomic_ref_cv_convertibility<T*, const T* const>();\r\n    test_atomic_ref_cv_convertibility<T*, volatile T* const>();\r\n    test_atomic_ref_cv_convertibility<T(*)[42], const T(*const)[42]>();\r\n\r\n    test_atomic_ref_not_convertible_to<T*, const T*>();\r\n    test_atomic_ref_not_convertible_to<T*, volatile T*>();\r\n\r\n    struct Base {\r\n        T t;\r\n    };\r\n    struct Derived : Base {};\r\n\r\n    test_atomic_ref_not_convertible_to<T, Base>();\r\n    test_atomic_ref_not_convertible_to<Base, T>();\r\n    test_atomic_ref_not_convertible_to<Base, Derived>();\r\n    test_atomic_ref_not_convertible_to<Derived, Base>();\r\n}\r\n\r\nvoid test_atomic_ref_constraints() { // COMPILE-ONLY\r\n    test_atomic_ref_constraints_cv<signed char>();\r\n    test_atomic_ref_constraints_cv<short>();\r\n    test_atomic_ref_constraints_cv<int>();\r\n    test_atomic_ref_constraints_cv<long>();\r\n    test_atomic_ref_constraints_cv<long long>();\r\n    test_atomic_ref_constraints_cv<unsigned char>();\r\n    test_atomic_ref_constraints_cv<unsigned short>();\r\n    test_atomic_ref_constraints_cv<unsigned int>();\r\n    test_atomic_ref_constraints_cv<unsigned long>();\r\n    test_atomic_ref_constraints_cv<unsigned long long>();\r\n    test_atomic_ref_constraints_cv<bool>();\r\n    test_atomic_ref_constraints_cv<char>();\r\n    test_atomic_ref_constraints_cv<wchar_t>();\r\n#ifdef __cpp_char8_t\r\n    test_atomic_ref_constraints_cv<char8_t>();\r\n#endif // defined(__cpp_char8_t)\r\n    test_atomic_ref_constraints_cv<char16_t>();\r\n    test_atomic_ref_constraints_cv<char32_t>();\r\n    test_atomic_ref_constraints_cv<float>();\r\n    test_atomic_ref_constraints_cv<double>();\r\n    test_atomic_ref_constraints_cv<long double>();\r\n\r\n    test_atomic_ref_constraints_cv<void*>();\r\n    test_atomic_ref_constraints_cv<const void*>();\r\n    test_atomic_ref_constraints_cv<volatile void*>();\r\n    test_atomic_ref_constraints_cv<const volatile void*>();\r\n\r\n    test_atomic_ref_constraints_cv<char*>();\r\n    test_atomic_ref_constraints_cv<const char*>();\r\n    test_atomic_ref_constraints_cv<volatile char*>();\r\n    test_atomic_ref_constraints_cv<const volatile char*>();\r\n\r\n    test_atomic_ref_constraints_cv<int*>();\r\n    test_atomic_ref_constraints_cv<const int*>();\r\n    test_atomic_ref_constraints_cv<volatile int*>();\r\n    test_atomic_ref_constraints_cv<const volatile int*>();\r\n\r\n    test_atomic_ref_constraints_cv<int128*>();\r\n    test_atomic_ref_constraints_cv<const int128*>();\r\n    test_atomic_ref_constraints_cv<volatile int128*>();\r\n    test_atomic_ref_constraints_cv<const volatile int128*>();\r\n\r\n    test_atomic_ref_constraints_cv<bigint*>();\r\n    test_atomic_ref_constraints_cv<const bigint*>();\r\n    test_atomic_ref_constraints_cv<volatile bigint*>();\r\n    test_atomic_ref_constraints_cv<const volatile bigint*>();\r\n\r\n    test_atomic_ref_constraints_cv<int (*)()>();\r\n    test_atomic_ref_constraints_cv<bigint (*)(int128)>();\r\n\r\n    test_atomic_ref_constraints_cv<std::nullptr_t>();\r\n\r\n    test_atomic_ref_constraints_cv<bigint>();\r\n    test_atomic_ref_constraints_cv<int128>();\r\n}\r\n\r\n\r\n// code reuse of ../P1135R6_atomic_flag_test/test.cpp\r\n\r\ntemplate <bool AddViaCas, typename ValueType>\r\nvoid test_ops() {\r\n    constexpr std::size_t unique      = 80; // small to avoid overflow even for char\r\n    constexpr std::size_t repetitions = 8000;\r\n    constexpr std::size_t total       = unique * repetitions;\r\n    constexpr std::size_t range       = 10;\r\n\r\n    struct alignas(std::atomic_ref<ValueType>::required_alignment) Padded {\r\n        ValueType vals[unique] = {};\r\n    };\r\n    Padded padded;\r\n\r\n    auto& vals = padded.vals;\r\n\r\n    std::vector<std::atomic_ref<ValueType>> refs;\r\n    refs.reserve(total);\r\n    for (std::size_t i = 0; i != repetitions; ++i) {\r\n        for (auto& val : vals) {\r\n            refs.emplace_back(val);\r\n        }\r\n    }\r\n\r\n    using std::execution::par;\r\n\r\n    auto load  = [](const std::atomic_ref<ValueType>& ar) { return static_cast<int>(ar.load()); };\r\n    auto xchg0 = [](std::atomic_ref<ValueType>& ar) { return static_cast<int>(ar.exchange(0)); };\r\n    auto inc   = [](std::atomic_ref<ValueType>& ar) {\r\n        if constexpr (AddViaCas) {\r\n            for (;;) {\r\n                ValueType e = ar.load();\r\n                ValueType d = static_cast<ValueType>(static_cast<int>(e) + 1);\r\n                if (ar.compare_exchange_weak(e, d)) {\r\n                    return static_cast<int>(e);\r\n                }\r\n            }\r\n        } else {\r\n            return static_cast<int>(ar.fetch_add(1));\r\n        }\r\n    };\r\n\r\n    assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, load) == 0);\r\n    assert(std::transform_reduce(par, refs.begin(), refs.begin() + range, 0, std::plus{}, inc) == 0);\r\n    assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, load) == range * repetitions);\r\n    assert(std::transform_reduce(par, refs.begin(), refs.begin() + range, 0, std::plus{}, inc) == range);\r\n    assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, load) == range * repetitions * 2);\r\n    assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, xchg0) == range * 2);\r\n    assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, load) == 0);\r\n\r\n    auto load_const = [](std::atomic_ref<const ValueType> ar) { return static_cast<int>(ar.load()); };\r\n\r\n    assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, load_const) == 0);\r\n    assert(std::transform_reduce(par, refs.begin(), refs.begin() + range, 0, std::plus{}, inc) == 0);\r\n    assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, load_const) == range * repetitions);\r\n    assert(std::transform_reduce(par, refs.begin(), refs.begin() + range, 0, std::plus{}, inc) == range);\r\n    assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, load_const) == range * repetitions * 2);\r\n    assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, xchg0) == range * 2);\r\n    assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, load_const) == 0);\r\n\r\n    if constexpr (std::atomic_ref<ValueType>::is_always_lock_free) {\r\n        auto load_volatile  = [](std::atomic_ref<volatile ValueType> ar) { return static_cast<int>(ar.load()); };\r\n        auto xchg0_volatile = [](std::atomic_ref<volatile ValueType> ar) { return static_cast<int>(ar.exchange(0)); };\r\n        auto inc_volatile   = [](std::atomic_ref<volatile ValueType> ar) {\r\n            if constexpr (AddViaCas) {\r\n                for (;;) {\r\n                    ValueType e = ar.load();\r\n                    ValueType d = static_cast<ValueType>(static_cast<int>(e) + 1);\r\n                    if (ar.compare_exchange_weak(e, d)) {\r\n                        return static_cast<int>(e);\r\n                    }\r\n                }\r\n            } else {\r\n                return static_cast<int>(ar.fetch_add(1));\r\n            }\r\n        };\r\n\r\n        assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, load_volatile) == 0);\r\n        assert(std::transform_reduce(par, refs.begin(), refs.begin() + range, 0, std::plus{}, inc_volatile) == 0);\r\n        assert(\r\n            std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, load_volatile) == range * repetitions);\r\n        assert(std::transform_reduce(par, refs.begin(), refs.begin() + range, 0, std::plus{}, inc_volatile) == range);\r\n        assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, load_volatile)\r\n               == range * repetitions * 2);\r\n        assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, xchg0_volatile) == range * 2);\r\n        assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, load_volatile) == 0);\r\n\r\n        auto load_const_volatile = [](std::atomic_ref<const volatile ValueType> ar) {\r\n            return static_cast<int>(ar.load());\r\n        };\r\n\r\n        assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, load_const_volatile) == 0);\r\n        assert(std::transform_reduce(par, refs.begin(), refs.begin() + range, 0, std::plus{}, inc_volatile) == 0);\r\n        assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, load_const_volatile)\r\n               == range * repetitions);\r\n        assert(std::transform_reduce(par, refs.begin(), refs.begin() + range, 0, std::plus{}, inc_volatile) == range);\r\n        assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, load_const_volatile)\r\n               == range * repetitions * 2);\r\n        assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, xchg0_volatile) == range * 2);\r\n        assert(std::transform_reduce(par, refs.begin(), refs.end(), 0, std::plus{}, load_const_volatile) == 0);\r\n    }\r\n}\r\n\r\ntemplate <class Integer, bool AddVolatile>\r\nvoid test_int_ops_add_volatile_if() {\r\n    using Referenced = std::conditional_t<AddVolatile, Integer, volatile Integer>;\r\n\r\n    Integer v = 0x40;\r\n\r\n    std::atomic vx(v);\r\n    std::atomic vy(v);\r\n    const std::atomic_ref<Referenced> rx        = std::atomic_ref(v);\r\n    const std::atomic_ref<Referenced> ry        = std::atomic_ref(v);\r\n    const std::atomic_ref<const Referenced> rxc = rx;\r\n    const std::atomic_ref<const Referenced> ryc = ry;\r\n\r\n    assert(vx.fetch_add(0x10) == 0x40);\r\n    assert(rx.fetch_add(0x10) == 0x40);\r\n\r\n    assert(vx.load() == 0x50);\r\n    assert(vy.load() == 0x40);\r\n    assert(rx.load() == 0x50);\r\n    assert(ry.load() == 0x50);\r\n    assert(rxc.load() == 0x50);\r\n    assert(ryc.load() == 0x50);\r\n\r\n    assert(vx.fetch_sub(0x8) == 0x50);\r\n    assert(rx.fetch_sub(0x8) == 0x50);\r\n\r\n    assert(vx.load() == 0x48);\r\n    assert(vy.load() == 0x40);\r\n    assert(rx.load() == 0x48);\r\n    assert(ry.load() == 0x48);\r\n    assert(rxc.load() == 0x48);\r\n    assert(ryc.load() == 0x48);\r\n\r\n    assert(vx.fetch_or(0xF) == 0x48);\r\n    assert(rx.fetch_or(0xF) == 0x48);\r\n\r\n    assert(vx.load() == 0x4F);\r\n    assert(vy.load() == 0x40);\r\n    assert(rx.load() == 0x4F);\r\n    assert(ry.load() == 0x4F);\r\n    assert(rxc.load() == 0x4F);\r\n    assert(ryc.load() == 0x4F);\r\n\r\n    assert(vx.fetch_and(0x3C) == 0x4F);\r\n    assert(rx.fetch_and(0x3C) == 0x4F);\r\n\r\n    assert(vx.load() == 0xC);\r\n    assert(vy.load() == 0x40);\r\n    assert(rx.load() == 0xC);\r\n    assert(ry.load() == 0xC);\r\n    assert(rxc.load() == 0xC);\r\n    assert(ryc.load() == 0xC);\r\n\r\n    assert(vx.fetch_xor(0x3F) == 0xC);\r\n    assert(rx.fetch_xor(0x3F) == 0xC);\r\n\r\n    assert(vx.load() == 0x33);\r\n    assert(vy.load() == 0x40);\r\n    assert(rx.load() == 0x33);\r\n    assert(ry.load() == 0x33);\r\n    assert(rxc.load() == 0x33);\r\n    assert(ryc.load() == 0x33);\r\n\r\n    assert(vx-- == 0x33);\r\n    assert(rx-- == 0x33);\r\n\r\n    assert(vx.load() == 0x32);\r\n    assert(vy.load() == 0x40);\r\n    assert(rx.load() == 0x32);\r\n    assert(ry.load() == 0x32);\r\n    assert(rxc.load() == 0x32);\r\n    assert(ryc.load() == 0x32);\r\n\r\n    assert(--vx == 0x31);\r\n    assert(--rx == 0x31);\r\n\r\n    assert(vx.load() == 0x31);\r\n    assert(vy.load() == 0x40);\r\n    assert(rx.load() == 0x31);\r\n    assert(ry.load() == 0x31);\r\n    assert(rxc.load() == 0x31);\r\n    assert(ryc.load() == 0x31);\r\n\r\n    assert(vx++ == 0x31);\r\n    assert(rx++ == 0x31);\r\n\r\n    assert(vx.load() == 0x32);\r\n    assert(vy.load() == 0x40);\r\n    assert(rx.load() == 0x32);\r\n    assert(ry.load() == 0x32);\r\n    assert(rxc.load() == 0x32);\r\n    assert(ryc.load() == 0x32);\r\n\r\n    assert(++vx == 0x33);\r\n    assert(++rx == 0x33);\r\n\r\n    assert(vx.load() == 0x33);\r\n    assert(vy.load() == 0x40);\r\n    assert(rx.load() == 0x33);\r\n    assert(ry.load() == 0x33);\r\n    assert(rxc.load() == 0x33);\r\n    assert(ryc.load() == 0x33);\r\n}\r\n\r\ntemplate <class Integer>\r\nvoid test_int_ops() {\r\n    test_int_ops_add_volatile_if<Integer, false>();\r\n    if constexpr (std::atomic_ref<Integer>::is_always_lock_free) {\r\n        test_int_ops_add_volatile_if<Integer, true>();\r\n    }\r\n}\r\n\r\n\r\ntemplate <class Float, bool AddVolatile>\r\nvoid test_float_ops_add_volatile_if() {\r\n    using Referenced = std::conditional_t<AddVolatile, Float, volatile Float>;\r\n\r\n    Float v = 0x40;\r\n\r\n    std::atomic vx(v);\r\n    std::atomic vy(v);\r\n    const std::atomic_ref<Referenced> rx        = std::atomic_ref(v);\r\n    const std::atomic_ref<Referenced> ry        = std::atomic_ref(v);\r\n    const std::atomic_ref<const Referenced> rxc = rx;\r\n    const std::atomic_ref<const Referenced> ryc = ry;\r\n\r\n    assert(vx.fetch_add(0x10) == 0x40);\r\n    assert(rx.fetch_add(0x10) == 0x40);\r\n\r\n    assert(vx.load() == 0x50);\r\n    assert(vy.load() == 0x40);\r\n    assert(rx.load() == 0x50);\r\n    assert(ry.load() == 0x50);\r\n    assert(rxc.load() == 0x50);\r\n    assert(ryc.load() == 0x50);\r\n\r\n    assert(vx.fetch_sub(0x8) == 0x50);\r\n    assert(rx.fetch_sub(0x8) == 0x50);\r\n\r\n    assert(vx.load() == 0x48);\r\n    assert(vy.load() == 0x40);\r\n    assert(rx.load() == 0x48);\r\n    assert(ry.load() == 0x48);\r\n    assert(rxc.load() == 0x48);\r\n    assert(ryc.load() == 0x48);\r\n\r\n    vx.store(0x10);\r\n    rx.store(0x10);\r\n\r\n    assert(vx.load() == 0x10);\r\n    assert(vy.load() == 0x40);\r\n    assert(rx.load() == 0x10);\r\n    assert(ry.load() == 0x10);\r\n    assert(rxc.load() == 0x10);\r\n    assert(ryc.load() == 0x10);\r\n}\r\n\r\ntemplate <class Float>\r\nvoid test_float_ops() {\r\n    test_float_ops_add_volatile_if<Float, false>();\r\n    if constexpr (std::atomic_ref<Float>::is_always_lock_free) {\r\n        test_float_ops_add_volatile_if<Float, true>();\r\n    }\r\n}\r\n\r\ntemplate <class Ptr, bool AddVolatile>\r\nvoid test_ptr_ops_add_volatile_if() {\r\n    using Referenced = std::conditional_t<AddVolatile, Ptr, volatile Ptr>;\r\n\r\n    std::remove_pointer_t<Ptr> a[0x100];\r\n    Ptr v = a;\r\n\r\n    std::atomic vx(v);\r\n    std::atomic vy(v);\r\n    const std::atomic_ref<Referenced> rx        = std::atomic_ref(v);\r\n    const std::atomic_ref<Referenced> ry        = std::atomic_ref(v);\r\n    const std::atomic_ref<const Referenced> rxc = rx;\r\n    const std::atomic_ref<const Referenced> ryc = ry;\r\n\r\n    assert(vx.fetch_add(0x10) == a);\r\n    assert(rx.fetch_add(0x10) == a);\r\n\r\n    assert(vx.load() == a + 0x10);\r\n    assert(vy.load() == a);\r\n    assert(rx.load() == a + 0x10);\r\n    assert(ry.load() == a + 0x10);\r\n    assert(rxc.load() == a + 0x10);\r\n    assert(ryc.load() == a + 0x10);\r\n\r\n    assert(vx.fetch_sub(0x8) == a + 0x10);\r\n    assert(rx.fetch_sub(0x8) == a + 0x10);\r\n\r\n    assert(vx.load() == a + 0x8);\r\n    assert(vy.load() == a);\r\n    assert(rx.load() == a + 0x8);\r\n    assert(ry.load() == a + 0x8);\r\n    assert(rxc.load() == a + 0x8);\r\n    assert(ryc.load() == a + 0x8);\r\n\r\n    vx.store(a + 0x10);\r\n    rx.store(a + 0x10);\r\n\r\n    assert(vx.load() == a + 0x10);\r\n    assert(vy.load() == a);\r\n    assert(rx.load() == a + 0x10);\r\n    assert(ry.load() == a + 0x10);\r\n    assert(rxc.load() == a + 0x10);\r\n    assert(ryc.load() == a + 0x10);\r\n\r\n    assert(vx-- == a + 0x10);\r\n    assert(rx-- == a + 0x10);\r\n\r\n    assert(vx.load() == a + 0xF);\r\n    assert(vy.load() == a);\r\n    assert(rx.load() == a + 0xF);\r\n    assert(ry.load() == a + 0xF);\r\n    assert(rxc.load() == a + 0xF);\r\n    assert(ryc.load() == a + 0xF);\r\n\r\n    assert(--vx == a + 0xE);\r\n    assert(--rx == a + 0xE);\r\n\r\n    assert(vx.load() == a + 0xE);\r\n    assert(vy.load() == a);\r\n    assert(rx.load() == a + 0xE);\r\n    assert(ry.load() == a + 0xE);\r\n    assert(rxc.load() == a + 0xE);\r\n    assert(ryc.load() == a + 0xE);\r\n\r\n    assert(vx++ == a + 0xE);\r\n    assert(rx++ == a + 0xE);\r\n\r\n    assert(vx.load() == a + 0xF);\r\n    assert(vy.load() == a);\r\n    assert(rx.load() == a + 0xF);\r\n    assert(ry.load() == a + 0xF);\r\n    assert(rxc.load() == a + 0xF);\r\n    assert(ryc.load() == a + 0xF);\r\n\r\n    assert(++vx == a + 0x10);\r\n    assert(++rx == a + 0x10);\r\n\r\n    assert(vx.load() == a + 0x10);\r\n    assert(vy.load() == a);\r\n    assert(rx.load() == a + 0x10);\r\n    assert(ry.load() == a + 0x10);\r\n    assert(rxc.load() == a + 0x10);\r\n    assert(ryc.load() == a + 0x10);\r\n}\r\n\r\ntemplate <class Ptr>\r\nvoid test_ptr_ops() {\r\n    test_ptr_ops_add_volatile_if<Ptr, false>();\r\n    if constexpr (std::atomic_ref<Ptr>::is_always_lock_free) {\r\n        test_ptr_ops_add_volatile_if<Ptr, true>();\r\n    }\r\n}\r\n\r\n// GH-1497 <atomic>: atomic_ref<const T> fails to compile\r\nvoid test_gh_1497() {\r\n    {\r\n        static constexpr int ci{1729}; // static storage duration, so this is stored in read-only memory\r\n        const std::atomic_ref atom{ci};\r\n        assert(atom.load() == 1729);\r\n    }\r\n\r\n    {\r\n        int i{11};\r\n        const std::atomic_ref<int> atom_modify{i};\r\n        const std::atomic_ref<const int> atom_observe{i};\r\n        assert(atom_modify.load() == 11);\r\n        assert(atom_observe.load() == 11);\r\n        atom_modify.store(22);\r\n        assert(atom_modify.load() == 22);\r\n        assert(atom_observe.load() == 22);\r\n    }\r\n}\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n// GH-140: STL: We should _STD qualify _Ugly function calls to avoid ADL\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\n\r\ntemplate <class T, class Tag>\r\nstruct tagged_trivial {\r\n    T t;\r\n};\r\n\r\ntemplate <class T>\r\nvoid test_incomplete_associated_class() { // COMPILE-ONLY\r\n    T o{};\r\n    std::atomic_ref<T> a{o};\r\n\r\n    a = o;\r\n\r\n    (void) a.is_lock_free();\r\n    (void) a.load();\r\n    (void) a.load(std::memory_order_relaxed);\r\n    a.store(T{});\r\n    a.store(T{}, std::memory_order_relaxed);\r\n    (void) a.exchange(T{});\r\n    (void) a.exchange(T{}, std::memory_order_relaxed);\r\n    (void) a.compare_exchange_weak(o, T{});\r\n    (void) a.compare_exchange_weak(o, T{}, std::memory_order_relaxed);\r\n    (void) a.compare_exchange_weak(o, T{}, std::memory_order_relaxed, std::memory_order_relaxed);\r\n    (void) a.compare_exchange_strong(o, T{});\r\n    (void) a.compare_exchange_strong(o, T{}, std::memory_order_relaxed);\r\n    (void) a.compare_exchange_strong(o, T{}, std::memory_order_relaxed, std::memory_order_relaxed);\r\n    a.wait(T{});\r\n    a.wait(T{}, std::memory_order_relaxed);\r\n    a.notify_one();\r\n    a.notify_all();\r\n\r\n    if constexpr (std::is_pointer_v<T>) {\r\n        std::remove_pointer_t<T> pointee{};\r\n        a = std::addressof(pointee);\r\n\r\n        (void) a.operator+=(0); // a += 0 triggers ADL\r\n        (void) a.operator-=(0); // a -= 0 triggers ADL\r\n        (void) a.operator++(); // ++a triggers ADL\r\n        (void) a.operator--(); // --a triggers ADL\r\n        (void) a.operator++(0); // a++ triggers ADL\r\n        (void) a.operator--(0); // a-- triggers ADL\r\n        (void) a.fetch_add(0);\r\n        (void) a.fetch_add(0, std::memory_order_relaxed);\r\n        (void) a.fetch_sub(0);\r\n        (void) a.fetch_sub(0, std::memory_order_relaxed);\r\n    }\r\n}\r\n\r\nvoid test_incomplete_associated_class_all() { // COMPILE-ONLY\r\n    test_incomplete_associated_class<tagged_trivial<uint8_t, holder<incomplete>>>();\r\n    test_incomplete_associated_class<tagged_trivial<uint16_t, holder<incomplete>>>();\r\n    test_incomplete_associated_class<tagged_trivial<uint32_t, holder<incomplete>>>();\r\n    test_incomplete_associated_class<tagged_trivial<uint64_t, holder<incomplete>>>();\r\n    test_incomplete_associated_class<tagged_trivial<uint64_t[2], holder<incomplete>>>();\r\n\r\n    test_incomplete_associated_class<tagged_trivial<uint8_t[3], holder<incomplete>>>();\r\n    test_incomplete_associated_class<tagged_trivial<uint16_t[3], holder<incomplete>>>();\r\n    test_incomplete_associated_class<tagged_trivial<uint32_t[3], holder<incomplete>>>();\r\n    test_incomplete_associated_class<tagged_trivial<uint64_t[3], holder<incomplete>>>();\r\n\r\n    test_incomplete_associated_class<tagged_trivial<uint8_t, holder<incomplete>>*>();\r\n    test_incomplete_associated_class<tagged_trivial<uint16_t, holder<incomplete>>*>();\r\n    test_incomplete_associated_class<tagged_trivial<uint32_t, holder<incomplete>>*>();\r\n    test_incomplete_associated_class<tagged_trivial<uint64_t, holder<incomplete>>*>();\r\n    test_incomplete_associated_class<tagged_trivial<uint64_t[2], holder<incomplete>>*>();\r\n\r\n    test_incomplete_associated_class<tagged_trivial<uint8_t[3], holder<incomplete>>*>();\r\n    test_incomplete_associated_class<tagged_trivial<uint16_t[3], holder<incomplete>>*>();\r\n    test_incomplete_associated_class<tagged_trivial<uint32_t[3], holder<incomplete>>*>();\r\n    test_incomplete_associated_class<tagged_trivial<uint64_t[3], holder<incomplete>>*>();\r\n}\r\n#endif // ^^^ no workaround ^^^\r\n\r\n// GH-4472 \"<atomic>: With _STD_ATOMIC_ALWAYS_USE_CMPXCHG16B defined to 1,\r\n// atomic_ref<16 bytes> does not report is_lock_free and is_always_lock_free correctly\"\r\nvoid test_gh_4472() {\r\n    struct two_pointers_t {\r\n        void* left;\r\n        void* right;\r\n    };\r\n\r\n    alignas(std::atomic_ref<two_pointers_t>::required_alignment) two_pointers_t two_pointers;\r\n\r\n    static_assert(std::atomic_ref<two_pointers_t>::required_alignment == sizeof(two_pointers_t));\r\n\r\n    static_assert(std::atomic_ref<two_pointers_t>::is_always_lock_free);\r\n\r\n    std::atomic_ref<two_pointers_t> ar{two_pointers};\r\n    assert(ar.is_lock_free());\r\n}\r\n\r\n// GH-4728 \"<atomic>: On x64, atomic_ref::is_lock_free() incorrectly returns true when it shouldn't\"\r\nvoid test_gh_4728() {\r\n    struct Large {\r\n        char str[100]{};\r\n    };\r\n\r\n    alignas(std::atomic_ref<Large>::required_alignment) Large lg{};\r\n\r\n    static_assert(std::atomic_ref<Large>::required_alignment == alignof(Large));\r\n\r\n    static_assert(!std::atomic_ref<Large>::is_always_lock_free);\r\n\r\n    std::atomic_ref<Large> ar{lg};\r\n    assert(!ar.is_lock_free());\r\n}\r\n\r\nint main() {\r\n    test_ops<false, char>();\r\n    test_ops<false, signed char>();\r\n    test_ops<false, unsigned char>();\r\n    test_ops<false, short>();\r\n    test_ops<false, unsigned short>();\r\n    test_ops<false, int>();\r\n    test_ops<false, unsigned int>();\r\n    test_ops<false, long>();\r\n    test_ops<false, unsigned long>();\r\n    test_ops<false, long long>();\r\n    test_ops<false, unsigned long long>();\r\n    test_ops<false, float>();\r\n    test_ops<false, double>();\r\n    test_ops<false, long double>();\r\n\r\n    test_ops<true, char>();\r\n    test_ops<true, signed char>();\r\n    test_ops<true, unsigned char>();\r\n    test_ops<true, short>();\r\n    test_ops<true, unsigned short>();\r\n    test_ops<true, int>();\r\n    test_ops<true, unsigned int>();\r\n    test_ops<true, long>();\r\n    test_ops<true, unsigned long>();\r\n    test_ops<true, long long>();\r\n    test_ops<true, unsigned long long>();\r\n    test_ops<true, float>();\r\n    test_ops<true, double>();\r\n    test_ops<true, long double>();\r\n    test_ops<true, bigint>();\r\n    test_ops<true, int128>();\r\n\r\n    test_int_ops<signed char>();\r\n    test_int_ops<unsigned char>();\r\n    test_int_ops<short>();\r\n    test_int_ops<unsigned short>();\r\n    test_int_ops<int>();\r\n    test_int_ops<unsigned int>();\r\n    test_int_ops<long>();\r\n    test_int_ops<unsigned long>();\r\n    test_int_ops<long long>();\r\n    test_int_ops<unsigned long long>();\r\n\r\n    test_float_ops<float>();\r\n    test_float_ops<double>();\r\n    test_float_ops<long double>();\r\n\r\n    test_ptr_ops<char*>();\r\n    test_ptr_ops<long*>();\r\n\r\n    test_gh_1497();\r\n    test_gh_4472();\r\n    test_gh_4728();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_adjacent_difference/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_adjacent_difference/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <functional>\r\n#include <numeric>\r\n#include <random>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nvoid test_case_random(const size_t testSize, mt19937& gen) {\r\n    vector<unsigned int> s(testSize);\r\n    generate(s.begin(), s.end(), ref(gen));\r\n    vector<unsigned int> expected(testSize);\r\n    adjacent_difference(s.begin(), s.end(), expected.begin()); // prepare expected values with serial algorithm\r\n    {\r\n        // also test seq because algorithm is different\r\n        vector<unsigned int> actual(testSize);\r\n        assert(adjacent_difference(seq, s.begin(), s.end(), actual.begin()) == actual.end());\r\n        assert(expected == actual);\r\n    }\r\n    {\r\n        vector<unsigned int> actual(testSize);\r\n        assert(adjacent_difference(par, s.begin(), s.end(), actual.begin()) == actual.end());\r\n        assert(expected == actual);\r\n    }\r\n}\r\n\r\nvoid test_case_iota(const size_t testSize) {\r\n    vector<unsigned int> s(testSize);\r\n    iota(s.begin(), s.end(), 1U); // note start at 1 so that all the actual values are 1\r\n    {\r\n        vector<unsigned int> actual(testSize);\r\n        assert(adjacent_difference(seq, s.begin(), s.end(), actual.begin()) == actual.end());\r\n        assert(count(actual.begin(), actual.end(), 1U) == static_cast<ptrdiff_t>(testSize));\r\n    }\r\n\r\n    {\r\n        vector<unsigned int> actual(testSize);\r\n        assert(adjacent_difference(par, s.begin(), s.end(), actual.begin()) == actual.end());\r\n        assert(count(actual.begin(), actual.end(), 1U) == static_cast<ptrdiff_t>(testSize));\r\n    }\r\n}\r\n\r\nvoid test_case_plus(const size_t testSize) {\r\n    vector<unsigned int> s(testSize);\r\n    iota(s.begin(), s.end(), 0U);\r\n    vector<unsigned int> expected(testSize);\r\n    for (unsigned int result = 1; result < testSize; ++result) {\r\n        expected[result] = result * 2 - 1;\r\n    }\r\n\r\n    {\r\n        vector<unsigned int> actual(testSize);\r\n        assert(adjacent_difference(seq, s.begin(), s.end(), actual.begin(), plus<>{}) == actual.end());\r\n        assert(expected == actual);\r\n    }\r\n\r\n    {\r\n        vector<unsigned int> actual(testSize);\r\n        assert(adjacent_difference(par, s.begin(), s.end(), actual.begin(), plus<>{}) == actual.end());\r\n        assert(expected == actual);\r\n    }\r\n}\r\n\r\nint main() {\r\n    mt19937 gen(1729);\r\n\r\n    parallel_test_case(test_case_random, gen);\r\n    parallel_test_case(test_case_iota);\r\n    parallel_test_case(test_case_plus);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_adjacent_find/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_adjacent_find/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <numeric>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\ntemplate <template <class...> class Container>\r\nvoid test_case_adjacent_find_parallel(const size_t testSize) {\r\n    Container<int> tmp(testSize);\r\n    iota(tmp.begin(), tmp.end(), 0);\r\n\r\n    assert(adjacent_find(par, tmp.begin(), tmp.end()) == tmp.end());\r\n    const auto less_result = adjacent_find(par, tmp.begin(), tmp.end(), less<>{});\r\n    const auto ne_result   = adjacent_find(par, tmp.begin(), tmp.end(), not_equal_to<>{});\r\n    if (testSize < 2) {\r\n        assert(less_result == tmp.end());\r\n        assert(ne_result == tmp.end());\r\n        return;\r\n    }\r\n\r\n    assert(less_result == tmp.begin());\r\n    assert(ne_result == tmp.begin());\r\n\r\n    auto remaining_attempts = quadratic_complexity_case_limit;\r\n    auto target             = tmp.begin();\r\n    for (auto next = target; ++next != tmp.end(); target = next) {\r\n        auto old = *target;\r\n        *target  = *next;\r\n        assert(adjacent_find(par, tmp.begin(), tmp.end()) == target);\r\n        *target = old;\r\n        if (--remaining_attempts == 0) {\r\n            return;\r\n        }\r\n    }\r\n}\r\n\r\nint main() {\r\n    parallel_test_case(test_case_adjacent_find_parallel<forward_list>);\r\n    parallel_test_case(test_case_adjacent_find_parallel<list>);\r\n    parallel_test_case(test_case_adjacent_find_parallel<vector>);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_all_of/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_all_of/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nconst auto read_char_as_bool = [](char c) { return c != 0; };\r\n\r\nvoid test_case_all_of_parallel(const size_t testSize) {\r\n    vector<char> c(testSize, true);\r\n    assert(all_of(par, c.begin(), c.end(), read_char_as_bool));\r\n    // testing every possible combo takes too long\r\n#ifdef EXHAUSTIVE\r\n    for (char& b : c) {\r\n        b = false;\r\n        assert(!all_of(par, c.begin(), c.end(), read_char_as_bool));\r\n        b = true;\r\n    }\r\n#else // ^^^ EXHAUSTIVE / !EXHAUSTIVE vvv\r\n    if (testSize != 0) {\r\n        c[testSize / 2] = false;\r\n        assert(!all_of(par, c.begin(), c.end(), read_char_as_bool));\r\n    }\r\n#endif // EXHAUSTIVE\r\n}\r\n\r\nvoid test_case_any_of_parallel(const size_t testSize) {\r\n    vector<char> c(testSize, false);\r\n    assert(!any_of(par, c.begin(), c.end(), read_char_as_bool));\r\n    // less exhaustive testing here under the assumption similar machinery to\r\n    // all_of is used\r\n    if (testSize != 0) {\r\n        c[testSize / 2] = true;\r\n        assert(any_of(par, c.begin(), c.end(), read_char_as_bool));\r\n    }\r\n}\r\n\r\nvoid test_case_none_of_parallel(const size_t testSize) {\r\n    vector<char> c(testSize, false);\r\n    assert(none_of(par, c.begin(), c.end(), read_char_as_bool));\r\n    // less exhaustive testing here under the assumption similar machinery to\r\n    // all_of is used\r\n    if (testSize != 0) {\r\n        c[testSize / 2] = true;\r\n        assert(!none_of(par, c.begin(), c.end(), read_char_as_bool));\r\n    }\r\n}\r\n\r\nint main() {\r\n    parallel_test_case(test_case_all_of_parallel);\r\n    parallel_test_case(test_case_any_of_parallel);\r\n    parallel_test_case(test_case_none_of_parallel);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_count/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_count/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <forward_list>\r\n#include <list>\r\n#include <numeric>\r\n#include <random>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nconst auto is_zero = [](char x) { return x == '\\x00'; };\r\nconst auto is_one  = [](char x) { return x == '\\x01'; };\r\n\r\ntemplate <template <class...> class Container>\r\nvoid test_case_count_parallel(const size_t testSize, mt19937& gen) {\r\n    Container<char> c(testSize, '\\x01');\r\n    assert(count(par, c.begin(), c.end(), '\\x00') == 0);\r\n    assert(count(par, c.begin(), c.end(), '\\x01') == static_cast<ptrdiff_t>(testSize));\r\n    assert(count_if(par, c.begin(), c.end(), is_zero) == 0);\r\n    assert(count_if(par, c.begin(), c.end(), is_one) == static_cast<ptrdiff_t>(testSize));\r\n\r\n    vector<typename Container<char>::iterator> iterators(testSize);\r\n    iota(iterators.begin(), iterators.end(), c.begin());\r\n    shuffle(iterators.begin(), iterators.end(), gen);\r\n\r\n    auto remainingAttempts = quadratic_complexity_case_limit;\r\n    ptrdiff_t consumed{};\r\n    for (const auto& iter : iterators) {\r\n        *iter = '\\x00';\r\n        ++consumed;\r\n        assert(count(par, c.begin(), c.end(), '\\x00') == consumed);\r\n        assert(count(par, c.begin(), c.end(), '\\x01') == static_cast<ptrdiff_t>(testSize) - consumed);\r\n        assert(count_if(par, c.begin(), c.end(), is_zero) == consumed);\r\n        assert(count_if(par, c.begin(), c.end(), is_one) == static_cast<ptrdiff_t>(testSize) - consumed);\r\n        if (--remainingAttempts == 0) {\r\n            return;\r\n        }\r\n    }\r\n}\r\n\r\nint main() {\r\n    mt19937 gen(random_device{}());\r\n    parallel_test_case(test_case_count_parallel<forward_list>, gen);\r\n    parallel_test_case(test_case_count_parallel<list>, gen);\r\n    parallel_test_case(test_case_count_parallel<vector>, gen);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_equal/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_equal/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nconstexpr char one_char    = static_cast<char>(1);\r\nconst auto my_not_equal_to = [](auto a, auto b) { return a != b; };\r\n\r\ntemplate <class T>\r\nvoid add_example(forward_list<T>& f, T x) {\r\n    f.push_front(x);\r\n}\r\n\r\ntemplate <class T>\r\nvoid add_example(list<T>& l, T x) {\r\n    l.push_back(x);\r\n}\r\n\r\ntemplate <class T>\r\nvoid add_example(vector<T>& v, T x) {\r\n    v.push_back(x);\r\n}\r\n\r\ntemplate <template <class...> class Container>\r\nvoid test_case_equal_parallel(const size_t testSize) {\r\n    Container<char> defaults(testSize);\r\n\r\n    // test each signature:\r\n    {\r\n        Container<char> ones(testSize, one_char);\r\n        assert(equal(par, defaults.begin(), defaults.end(), defaults.begin()));\r\n        assert((testSize == 0) == equal(par, defaults.begin(), defaults.end(), ones.begin()));\r\n\r\n        assert(equal(par, defaults.begin(), defaults.end(), ones.begin(), my_not_equal_to));\r\n        assert((testSize == 0) == equal(par, defaults.begin(), defaults.end(), defaults.begin(), my_not_equal_to));\r\n\r\n        assert(equal(par, defaults.begin(), defaults.end(), defaults.begin(), defaults.end()));\r\n        assert((testSize == 0) == equal(par, defaults.begin(), defaults.end(), ones.begin(), ones.end()));\r\n\r\n        assert(equal(par, defaults.begin(), defaults.end(), ones.begin(), ones.end(), my_not_equal_to));\r\n        assert((testSize == 0)\r\n               == equal(par, defaults.begin(), defaults.end(), defaults.begin(), defaults.end(), my_not_equal_to));\r\n\r\n        // test mismatched lengths\r\n        add_example(ones, one_char);\r\n        assert(!equal(par, defaults.begin(), defaults.end(), ones.begin(), ones.end(), my_not_equal_to));\r\n        assert(!equal(par, ones.begin(), ones.end(), defaults.begin(), defaults.end(), my_not_equal_to));\r\n    }\r\n\r\n    // test counterexample positions:\r\n    {\r\n        Container<char> tmp(testSize);\r\n        // testing every possible combo takes too long\r\n#ifdef EXHAUSTIVE\r\n        for (char& b : tmp) {\r\n            b = one_char;\r\n            assert(!equal(par, defaults.begin(), defaults.end(), tmp.begin(), tmp.end()));\r\n            b = {};\r\n        }\r\n#else // ^^^ EXHAUSTIVE / !EXHAUSTIVE vvv\r\n        if (testSize != 0) {\r\n            auto middle = tmp.begin();\r\n            advance(middle, static_cast<ptrdiff_t>(testSize / 2));\r\n            *middle = one_char;\r\n            assert(!equal(par, defaults.begin(), defaults.end(), tmp.begin(), tmp.end()));\r\n        }\r\n#endif // EXHAUSTIVE\r\n    }\r\n}\r\n\r\nint main() {\r\n    parallel_test_case(test_case_equal_parallel<forward_list>);\r\n    parallel_test_case(test_case_equal_parallel<list>);\r\n    parallel_test_case(test_case_equal_parallel<vector>);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_exclusive_scan/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_exclusive_scan/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <functional>\r\n#include <iterator>\r\n#include <numeric>\r\n#include <random>\r\n#include <string>\r\n#include <string_view>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nbool starts_with(const string_view target, const string_view test) {\r\n    return target.substr(0, test.size()) == test;\r\n}\r\n\r\nconstexpr auto alphaNum = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\"sv;\r\nvector<string> prepare_alpha_strings(const size_t testSize) {\r\n    vector<string> result(testSize);\r\n    auto letterPicker = alphaNum.begin();\r\n    for (string& testEntry : result) {\r\n        testEntry.push_back(*letterPicker);\r\n        ++letterPicker;\r\n        if (letterPicker == alphaNum.end()) {\r\n            letterPicker = alphaNum.begin();\r\n        }\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nconst auto maxAlphaStrings = prepare_alpha_strings(max_parallel_test_case_n);\r\n\r\nbool is_alpha_string(string_view target, const string_view prefix) {\r\n    if (!starts_with(target, prefix)) {\r\n        return false;\r\n    }\r\n\r\n    target.remove_prefix(prefix.size());\r\n    while (starts_with(target, alphaNum)) {\r\n        target.remove_prefix(alphaNum.size());\r\n    }\r\n\r\n    return starts_with(alphaNum, target);\r\n}\r\n\r\nvoid assert_is_alpha_string_prefix_sum(const vector<string>& actualResults, const string_view prefix) {\r\n    size_t expectedSize = prefix.size();\r\n    for (auto&& actual : actualResults) {\r\n        assert(actual.size() == expectedSize);\r\n        assert(is_alpha_string(actual, prefix));\r\n        ++expectedSize;\r\n    }\r\n}\r\n\r\nvoid test_case_exclusive_scan_parallel(const size_t testSize, mt19937& gen) {\r\n    vector<unsigned int> s(testSize);\r\n    generate(s.begin(), s.end(), ref(gen));\r\n    vector<unsigned int> d(testSize);\r\n    assert(d.end() == exclusive_scan(par, s.cbegin(), s.cend(), d.begin(), 10U));\r\n    exclusive_scan(s.cbegin(), s.cend(), s.begin(), 10U); // prepare expected values using serial algorithm\r\n    assert(s == d);\r\n}\r\n\r\nvoid test_case_exclusive_scan_parallel_associative(const size_t testSize) {\r\n    // string concat is associative but not commutative\r\n    vector<string> results(testSize);\r\n    exclusive_scan(par, maxAlphaStrings.begin(), maxAlphaStrings.begin() + static_cast<ptrdiff_t>(testSize),\r\n        results.begin(), \"frobinate\"s);\r\n    assert_is_alpha_string_prefix_sum(results, \"frobinate\");\r\n}\r\n\r\nvoid test_case_exclusive_scan_parallel_associative_in_place(const size_t testSize) {\r\n    // also test where dest == first\r\n    vector<string> results(maxAlphaStrings.begin(), maxAlphaStrings.begin() + static_cast<ptrdiff_t>(testSize));\r\n    exclusive_scan(par, results.begin(), results.end(), results.begin(), \"frobinate\"s);\r\n    assert_is_alpha_string_prefix_sum(results, \"frobinate\");\r\n}\r\n\r\nvoid test_case_exclusive_scan_bop_parallel(const size_t testSize, mt19937& gen) {\r\n    vector<unsigned int> s(testSize);\r\n    generate(s.begin(), s.end(), ref(gen));\r\n    vector<unsigned int> d(testSize);\r\n    assert(d.end() == exclusive_scan(par, s.cbegin(), s.cend(), d.begin(), 1U, multiplies<>{}));\r\n    exclusive_scan(s.cbegin(), s.cend(), s.begin(), 1U, multiplies<>{});\r\n    assert(s == d);\r\n}\r\n\r\nvoid test_case_exclusive_scan_bop_parallel_associative(const size_t testSize) {\r\n    // string concat is associative but not commutative\r\n    vector<string> results(testSize);\r\n    exclusive_scan(par, maxAlphaStrings.begin(), maxAlphaStrings.begin() + static_cast<ptrdiff_t>(testSize),\r\n        results.begin(), \"frobinate\"s, plus<>{});\r\n    assert_is_alpha_string_prefix_sum(results, \"frobinate\");\r\n}\r\n\r\nvoid test_case_exclusive_scan_bop_parallel_associative_in_place(const size_t testSize) {\r\n    // also test where dest == first\r\n    vector<string> results(maxAlphaStrings.begin(), maxAlphaStrings.begin() + static_cast<ptrdiff_t>(testSize));\r\n    exclusive_scan(par, results.begin(), results.end(), results.begin(), \"frobinate\"s, plus<>{});\r\n    assert_is_alpha_string_prefix_sum(results, \"frobinate\");\r\n}\r\n\r\nstruct inputType {\r\n    inputType() = delete;\r\n    /* implicit */ inputType(int) {} // so that the test can make an array\r\n    inputType(const inputType&)            = delete;\r\n    inputType& operator=(const inputType&) = delete;\r\n};\r\n\r\nstruct bopResult {\r\n    bopResult() = delete;\r\n    /* implicit */ bopResult(int) {}\r\n    bopResult(const bopResult&)            = delete;\r\n    bopResult& operator=(const bopResult&) = delete;\r\n};\r\n\r\nstruct intermediateType {\r\n    intermediateType() = delete;\r\n    explicit intermediateType(int) {} // so that the test can make one of these\r\n    explicit intermediateType(inputType&) {} // Intermediate tmp(*first)\r\n    // Intermediate tmp = binary_op((one of tmp, move(tmp), *first), *first);\r\n    /* implicit */ intermediateType(bopResult&&) {}\r\n    intermediateType(const intermediateType&)            = delete;\r\n    intermediateType(intermediateType&&)                 = default; // tmp = move(tmp)\r\n    intermediateType& operator=(const intermediateType&) = delete;\r\n    intermediateType& operator=(intermediateType&&)      = default; // for the exclusive versions only\r\n    // tmp = binary_op((one of tmp, move(tmp), *first), *first)\r\n    intermediateType& operator=(bopResult&&) {\r\n        return *this;\r\n    }\r\n};\r\n\r\nstruct outputType {\r\n    outputType() = delete;\r\n    /* implicit */ outputType(int) {} // so that the test can make an array\r\n    outputType(const outputType&)            = delete;\r\n    outputType& operator=(const outputType&) = delete;\r\n    outputType& operator=(outputType&&)      = delete;\r\n\r\n    // in the first pass\r\n    outputType& operator=(intermediateType&) {\r\n        return *this;\r\n    }\r\n    outputType& operator=(intermediateType&&) {\r\n        return *this;\r\n    }\r\n\r\n    // in the second pass\r\n    outputType& operator=(bopResult&&) {\r\n        return *this;\r\n    }\r\n};\r\n\r\nstruct typesBop {\r\n    // tmp = binary_op( (one of tmp, move(tmp), *first), *first)\r\n    bopResult operator()(intermediateType&, inputType&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(intermediateType&&, inputType&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(inputType&, inputType&) {\r\n        return 0;\r\n    }\r\n\r\n    // tmp = binary_op( (one of tmp, move(tmp)), (one of tmp, move(tmp)) )\r\n    bopResult operator()(intermediateType&, intermediateType&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(intermediateType&, intermediateType&&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(intermediateType&&, intermediateType&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(intermediateType&&, intermediateType&&) {\r\n        return 0;\r\n    }\r\n};\r\n\r\nvoid test_case_exclusive_scan_init_writes_intermediate_type() {\r\n    inputType input[2]{0, 0};\r\n    outputType output[2]{0, 0};\r\n    exclusive_scan(begin(input), end(input), output, intermediateType{0}, typesBop{});\r\n    exclusive_scan(par, begin(input), end(input), output, intermediateType{0}, typesBop{});\r\n}\r\n\r\nint main() {\r\n    mt19937 gen(1729);\r\n\r\n    parallel_test_case(test_case_exclusive_scan_parallel, gen);\r\n    parallel_test_case(test_case_exclusive_scan_parallel_associative);\r\n    parallel_test_case(test_case_exclusive_scan_parallel_associative_in_place);\r\n    parallel_test_case(test_case_exclusive_scan_bop_parallel, gen);\r\n    parallel_test_case(test_case_exclusive_scan_bop_parallel_associative);\r\n    parallel_test_case(test_case_exclusive_scan_bop_parallel_associative_in_place);\r\n    test_case_exclusive_scan_init_writes_intermediate_type();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_find/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_find/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <numeric>\r\n#include <string>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nconst char zero{};\r\nconst char one     = '\\x01';\r\nconst auto is_zero = [](char c) { return c == zero; };\r\nconst auto is_one  = [](char c) { return c == one; };\r\n\r\ntemplate <template <class...> class Container>\r\nvoid test_case_find_parallel(const size_t testSize) {\r\n    Container<char> tmp(testSize);\r\n\r\n    assert(find(par, tmp.begin(), tmp.end(), zero) == tmp.begin());\r\n    assert(find_if(par, tmp.begin(), tmp.end(), is_zero) == tmp.begin());\r\n    assert(find_if_not(par, tmp.begin(), tmp.end(), is_one) == tmp.begin());\r\n    assert(find(par, tmp.begin(), tmp.end(), one) == tmp.end());\r\n    assert(find_if(par, tmp.begin(), tmp.end(), is_one) == tmp.end());\r\n    assert(find_if_not(par, tmp.begin(), tmp.end(), is_zero) == tmp.end());\r\n\r\n    {\r\n        // testing every possible combo takes too long\r\n#ifdef EXHAUSTIVE\r\n        for (auto target = tmp.begin(); target != tmp.end(); ++target) {\r\n            *target = one;\r\n            assert(find(par, tmp.begin(), tmp.end(), one) == target);\r\n            assert(find_if(par, tmp.begin(), tmp.end(), is_one) == target);\r\n            assert(find_if_not(par, tmp.begin(), tmp.end(), is_zero) == target);\r\n            *target = zero;\r\n        }\r\n#else // ^^^ EXHAUSTIVE / !EXHAUSTIVE vvv\r\n        if (testSize != 0) {\r\n            auto middle = tmp.begin();\r\n            advance(middle, static_cast<ptrdiff_t>(testSize / 2));\r\n            *middle = one;\r\n            assert(find(par, tmp.begin(), tmp.end(), one) == middle);\r\n            assert(find_if(par, tmp.begin(), tmp.end(), is_one) == middle);\r\n            assert(find_if_not(par, tmp.begin(), tmp.end(), is_zero) == middle);\r\n        }\r\n#endif // EXHAUSTIVE\r\n    }\r\n}\r\n\r\nvoid test_case_find_with_many_counterexamples_picks_first() {\r\n    vector<unsigned int> target(1729);\r\n    target[450]  = 8u;\r\n    target[1000] = 8u;\r\n    target[500]  = 8u;\r\n    assert(find(par, target.begin(), target.end(), 8u) == target.begin() + 450);\r\n}\r\n\r\nint main() {\r\n    parallel_test_case(test_case_find_parallel<forward_list>);\r\n    parallel_test_case(test_case_find_parallel<list>);\r\n    parallel_test_case(test_case_find_parallel<vector>);\r\n\r\n    test_case_find_with_many_counterexamples_picks_first();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_find_end/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_find_end/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <execution>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <numeric>\r\n#include <random>\r\n#include <string_view>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nconst auto my_equal_to = [](auto a, auto b) { return a == b; };\r\n\r\ntemplate <template <class...> class HaystackContainer, template <class...> class NeedleContainer>\r\nvoid test_case_find_end_parallel(const size_t testSize, mt19937& gen) {\r\n    HaystackContainer<int> haystack(testSize);\r\n    if (testSize == 0) {\r\n        NeedleContainer<double> needle(6);\r\n        iota(needle.begin(), needle.end(), 0);\r\n        assert(haystack.end() == find_end(par, haystack.begin(), haystack.end(), needle.begin(), needle.end()));\r\n        assert(haystack.end()\r\n               == find_end(par, haystack.begin(), haystack.end(), needle.begin(), needle.end(), my_equal_to));\r\n        return;\r\n    }\r\n\r\n    uniform_int_distribution<size_t> startDist(0, testSize - 1);\r\n    size_t startAt = startDist(gen);\r\n    uniform_int_distribution<size_t> sizeDist(1, testSize - startAt);\r\n    size_t expectedSize = sizeDist(gen);\r\n    auto expected       = next(haystack.begin(), static_cast<ptrdiff_t>(startAt));\r\n    auto expectedEnd    = next(expected, static_cast<ptrdiff_t>(expectedSize));\r\n    iota(expected, expectedEnd, 1);\r\n    NeedleContainer<double> needle(expectedSize);\r\n    iota(needle.begin(), needle.end(), 1);\r\n    assert(expected == find_end(par, haystack.begin(), haystack.end(), needle.begin(), needle.end()));\r\n    assert(expected == find_end(par, haystack.begin(), haystack.end(), needle.begin(), needle.end(), my_equal_to));\r\n}\r\n\r\ntemplate <template <class...> class HaystackContainer, template <class...> class NeedleContainer>\r\nvoid test_case_prefixes_find_end_parallel(const int prefixCount) {\r\n    // fill needle with the pattern 4 3 2 1 0\r\n    NeedleContainer<double> needle(static_cast<size_t>(prefixCount));\r\n    auto needleBegin = needle.begin();\r\n    for (int idx = 0; idx < prefixCount; ++idx) {\r\n        *needleBegin = prefixCount - idx - 1;\r\n        ++needleBegin;\r\n    }\r\n\r\n    int totalLength = (prefixCount * (prefixCount + 1)) / 2;\r\n    HaystackContainer<int> haystack(static_cast<size_t>(totalLength));\r\n    vector<typename HaystackContainer<int>::iterator> expectedResults;\r\n\r\n    // fill haystack with the pattern [...] 4 3 2 1 0 3 2 1 0 2 1 0 1 0\r\n    // and expected results:                ^         ^       ^     ^ ^\r\n    auto b = haystack.begin();\r\n    for (int range = 0; range < prefixCount; ++range) {\r\n        expectedResults.push_back(b);\r\n        for (int val = prefixCount - range; val--;) {\r\n            *b = val;\r\n            ++b;\r\n        }\r\n    }\r\n\r\n    expectedResults.push_back(b);\r\n\r\n    // check that each of the repeating sub-patterns returns the right result\r\n    for (int idx = 0; idx <= prefixCount; ++idx) {\r\n        auto expected = expectedResults[static_cast<size_t>(prefixCount - idx)];\r\n        auto actual =\r\n            find_end(par, haystack.begin(), haystack.end(), next(needle.begin(), prefixCount - idx), needle.end());\r\n        assert(expected == actual);\r\n    }\r\n}\r\n\r\nint main() {\r\n    { // test that an empty candidate set results in no match\r\n        auto haystack = \"cute fluffy kittens\"sv;\r\n        auto needle   = \"\"sv;\r\n        assert(haystack.end() == find_end(par, haystack.begin(), haystack.end(), needle.begin(), needle.end()));\r\n        assert(haystack.end()\r\n               == find_end(par, haystack.begin(), haystack.end(), needle.begin(), needle.end(),\r\n                   [](auto, auto) -> bool { abort(); }));\r\n    }\r\n\r\n    { // test that the last match is found\r\n        auto haystack = \"see cute cuddly cats\"sv;\r\n        auto needle   = \"c\"sv;\r\n        assert(haystack.begin() + 16 == find_end(par, haystack.begin(), haystack.end(), needle.begin(), needle.end()));\r\n        assert(haystack.begin() + 16\r\n               == find_end(par, haystack.begin(), haystack.end(), needle.begin(), needle.end(), my_equal_to));\r\n    }\r\n\r\n    { // test that the whole haystack is used\r\n        auto haystack = \"see cute cuddly cats\"sv;\r\n        auto needle   = \"cu\"sv;\r\n        assert(haystack.begin() + 9 == find_end(par, haystack.begin(), haystack.end(), needle.begin(), needle.end()));\r\n        assert(haystack.begin() + 9\r\n               == find_end(par, haystack.begin(), haystack.end(), needle.begin(), needle.end(), my_equal_to));\r\n    }\r\n\r\n    { // test whole input match\r\n        auto haystack = \"the cats are cute and cuddly\"sv;\r\n        assert(haystack.begin() == find_end(par, haystack.begin(), haystack.end(), haystack.begin(), haystack.end()));\r\n        assert(haystack.begin()\r\n               == find_end(par, haystack.begin(), haystack.end(), haystack.begin(), haystack.end(), my_equal_to));\r\n    }\r\n\r\n    mt19937 gen(1729);\r\n\r\n    parallel_test_case(test_case_find_end_parallel<forward_list, forward_list>, gen);\r\n    parallel_test_case(test_case_find_end_parallel<list, list>, gen);\r\n    parallel_test_case(test_case_find_end_parallel<list, vector>, gen);\r\n    parallel_test_case(test_case_find_end_parallel<vector, forward_list>, gen);\r\n    parallel_test_case(test_case_find_end_parallel<vector, vector>, gen);\r\n\r\n    test_case_prefixes_find_end_parallel<forward_list, forward_list>(50);\r\n    test_case_prefixes_find_end_parallel<list, list>(50);\r\n    test_case_prefixes_find_end_parallel<list, vector>(50);\r\n    test_case_prefixes_find_end_parallel<vector, forward_list>(50);\r\n    test_case_prefixes_find_end_parallel<vector, vector>(50);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_find_first_of/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_find_first_of/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <execution>\r\n#include <forward_list>\r\n#include <list>\r\n#include <numeric>\r\n#include <string_view>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nconst auto my_equal_to = [](auto a, auto b) { return a == b; };\r\n\r\ntemplate <template <class...> class NeedleContainer, template <class...> class CandidateContainer>\r\nvoid test_case_find_first_of_parallel(const size_t testSize) {\r\n    NeedleContainer<int> tmp(testSize);\r\n    iota(tmp.begin(), tmp.end(), 0);\r\n    CandidateContainer<double> candidates(testSize);\r\n    iota(candidates.begin(), candidates.end(), 0);\r\n    auto expected        = tmp.begin();\r\n    auto candidatesBegin = candidates.begin();\r\n    const auto limit     = min(testSize, quadratic_complexity_case_limit);\r\n    for (size_t idx = 0; idx < limit; ++idx) {\r\n        assert(expected == find_first_of(par, tmp.begin(), tmp.end(), candidatesBegin, candidates.end()));\r\n        ++candidatesBegin;\r\n        ++expected;\r\n    }\r\n}\r\n\r\nint main() {\r\n    { // test that an empty candidate set results in no match\r\n        auto needle  = \"cute fluffy kittens\"sv;\r\n        auto targets = \"\"sv;\r\n        assert(needle.end() == find_first_of(par, needle.begin(), needle.end(), targets.begin(), targets.end()));\r\n        assert(needle.end()\r\n               == find_first_of(par, needle.begin(), needle.end(), targets.begin(), targets.end(),\r\n                   [](auto, auto) -> bool { abort(); }));\r\n    }\r\n\r\n    { // test that the first match is found\r\n        auto needle  = \"see cute cuddly cats\"sv;\r\n        auto targets = \"c\"sv;\r\n        assert(needle.begin() + 4 == find_first_of(par, needle.begin(), needle.end(), targets.begin(), targets.end()));\r\n        assert(needle.begin() + 4\r\n               == find_first_of(par, needle.begin(), needle.end(), targets.begin(), targets.end(), my_equal_to));\r\n    }\r\n\r\n    { // test that the first target is found\r\n        auto needle  = \"see cute cuddly cats\"sv;\r\n        auto targets = \"ce\"sv;\r\n        assert(needle.begin() + 1 == find_first_of(par, needle.begin(), needle.end(), targets.begin(), targets.end()));\r\n        assert(needle.begin() + 1\r\n               == find_first_of(par, needle.begin(), needle.end(), targets.begin(), targets.end(), my_equal_to));\r\n    }\r\n\r\n    parallel_test_case(test_case_find_first_of_parallel<forward_list, forward_list>);\r\n    parallel_test_case(test_case_find_first_of_parallel<list, list>);\r\n    parallel_test_case(test_case_find_first_of_parallel<list, vector>);\r\n    parallel_test_case(test_case_find_first_of_parallel<vector, forward_list>);\r\n    parallel_test_case(test_case_find_first_of_parallel<vector, vector>);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_for_each/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_for_each/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <atomic>\r\n#include <cassert>\r\n#include <execution>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nint g_forEachNCalls = 0;\r\nstruct for_each_n_tester {\r\n    int calledCount = 0;\r\n\r\n    for_each_n_tester()                                    = default;\r\n    for_each_n_tester(const for_each_n_tester&)            = delete;\r\n    for_each_n_tester(for_each_n_tester&&)                 = default;\r\n    for_each_n_tester& operator=(const for_each_n_tester&) = delete;\r\n    for_each_n_tester& operator=(for_each_n_tester&&)      = delete;\r\n\r\n    void operator()(const int x) {\r\n        assert(calledCount == g_forEachNCalls);\r\n        assert(x == calledCount + 10);\r\n        ++calledCount;\r\n        ++g_forEachNCalls;\r\n    }\r\n};\r\n\r\nvoid test_case_for_each_n() {\r\n    const int arr[]      = {10, 11, 12, 13, 14, 15};\r\n    const int* const ptr = arr;\r\n    assert(for_each_n(arr, 0, for_each_n_tester{}) == ptr);\r\n    assert(for_each_n(arr, size(arr), for_each_n_tester{}) == end(arr));\r\n    g_forEachNCalls = 0;\r\n    assert(for_each_n(ptr, 0, for_each_n_tester{}) == ptr);\r\n    assert(for_each_n(ptr, size(arr), for_each_n_tester{}) == end(arr));\r\n}\r\n\r\nconst auto call_only_once = [](atomic<bool>& b) { assert(!b.exchange(true)); };\r\n\r\nconst auto atomic_identity = [](atomic<bool>& b) { return b.load(); };\r\n\r\ntemplate <template <class...> class Container>\r\nstruct test_case_for_each_parallel {\r\n    template <typename ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        Container<atomic<bool>> c(testSize);\r\n        for_each(exec, c.begin(), c.end(), call_only_once);\r\n        assert(all_of(c.begin(), c.end(), atomic_identity));\r\n    }\r\n};\r\n\r\ntemplate <template <class...> class Container>\r\nstruct test_case_for_each_n_parallel {\r\n    template <typename ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        Container<atomic<bool>> c(testSize);\r\n        auto result = for_each_n(exec, c.begin(), testSize, call_only_once);\r\n        assert(result == c.end());\r\n        assert(all_of(c.begin(), c.end(), atomic_identity));\r\n    }\r\n};\r\n\r\nint main() {\r\n    test_case_for_each_n();\r\n    parallel_test_case(test_case_for_each_parallel<forward_list>{}, par);\r\n    parallel_test_case(test_case_for_each_parallel<list>{}, par);\r\n    parallel_test_case(test_case_for_each_parallel<vector>{}, par);\r\n    parallel_test_case(test_case_for_each_n_parallel<forward_list>{}, par);\r\n    parallel_test_case(test_case_for_each_n_parallel<list>{}, par);\r\n    parallel_test_case(test_case_for_each_n_parallel<vector>{}, par);\r\n#if _HAS_CXX20\r\n    parallel_test_case(test_case_for_each_parallel<forward_list>{}, unseq);\r\n    parallel_test_case(test_case_for_each_parallel<list>{}, unseq);\r\n    parallel_test_case(test_case_for_each_parallel<vector>{}, unseq);\r\n    parallel_test_case(test_case_for_each_n_parallel<forward_list>{}, unseq);\r\n    parallel_test_case(test_case_for_each_n_parallel<list>{}, unseq);\r\n    parallel_test_case(test_case_for_each_n_parallel<vector>{}, unseq);\r\n#endif // _HAS_CXX20\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_inclusive_scan/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_inclusive_scan/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <functional>\r\n#include <iterator>\r\n#include <numeric>\r\n#include <random>\r\n#include <string>\r\n#include <string_view>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nbool starts_with(const string_view target, const string_view test) {\r\n    return target.substr(0, test.size()) == test;\r\n}\r\n\r\nconstexpr auto alphaNum = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\"sv;\r\nvector<string> prepare_alpha_strings(const size_t testSize) {\r\n    vector<string> result(testSize);\r\n    auto letterPicker = alphaNum.begin();\r\n    for (string& testEntry : result) {\r\n        testEntry.push_back(*letterPicker);\r\n        ++letterPicker;\r\n        if (letterPicker == alphaNum.end()) {\r\n            letterPicker = alphaNum.begin();\r\n        }\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nconst auto maxAlphaStrings = prepare_alpha_strings(max_parallel_test_case_n);\r\n\r\nbool is_alpha_string(string_view target, const string_view prefix) {\r\n    if (!starts_with(target, prefix)) {\r\n        return false;\r\n    }\r\n\r\n    target.remove_prefix(prefix.size());\r\n    while (starts_with(target, alphaNum)) {\r\n        target.remove_prefix(alphaNum.size());\r\n    }\r\n\r\n    return starts_with(alphaNum, target);\r\n}\r\n\r\nvoid assert_is_alpha_string_prefix_sum(const vector<string>& actualResults, const string_view prefix = {}) {\r\n    size_t expectedSize = prefix.size() + 1;\r\n    for (auto&& actual : actualResults) {\r\n        assert(actual.size() == expectedSize);\r\n        assert(is_alpha_string(actual, prefix));\r\n        ++expectedSize;\r\n    }\r\n}\r\n\r\nvoid test_case_inclusive_scan_parallel(const size_t testSize, mt19937& gen) {\r\n    vector<unsigned int> s(testSize);\r\n    generate(s.begin(), s.end(), ref(gen));\r\n    vector<unsigned int> d(testSize);\r\n    assert(d.end() == inclusive_scan(par, s.cbegin(), s.cend(), d.begin()));\r\n    inclusive_scan(s.cbegin(), s.cend(), s.begin()); // prepare expected values using serial algorithm\r\n    assert(s == d);\r\n}\r\n\r\nvoid test_case_inclusive_scan_parallel_associative(const size_t testSize) {\r\n    // string concat is associative but not commutative\r\n    vector<string> results(testSize);\r\n    inclusive_scan(\r\n        par, maxAlphaStrings.begin(), maxAlphaStrings.begin() + static_cast<ptrdiff_t>(testSize), results.begin());\r\n    assert_is_alpha_string_prefix_sum(results);\r\n}\r\n\r\nvoid test_case_inclusive_scan_parallel_associative_in_place(const size_t testSize) {\r\n    // also test where dest == first\r\n    vector<string> results(maxAlphaStrings.begin(), maxAlphaStrings.begin() + static_cast<ptrdiff_t>(testSize));\r\n    inclusive_scan(par, results.begin(), results.end(), results.begin());\r\n    assert_is_alpha_string_prefix_sum(results);\r\n}\r\n\r\nvoid test_case_inclusive_scan_bop_parallel(const size_t testSize, mt19937& gen) {\r\n    vector<unsigned int> s(testSize);\r\n    generate(s.begin(), s.end(), ref(gen));\r\n    vector<unsigned int> d(testSize);\r\n    assert(d.end() == inclusive_scan(par, s.cbegin(), s.cend(), d.begin(), multiplies<>{}));\r\n    inclusive_scan(s.cbegin(), s.cend(), s.begin(), multiplies<>{});\r\n    assert(s == d);\r\n}\r\n\r\nvoid test_case_inclusive_scan_bop_init_parallel(const size_t testSize, mt19937& gen) {\r\n    vector<unsigned int> s(testSize);\r\n    generate(s.begin(), s.end(), ref(gen));\r\n    vector<unsigned int> d(testSize);\r\n    assert(d.end() == inclusive_scan(par, s.cbegin(), s.cend(), d.begin(), multiplies<>{}, 1729u));\r\n    inclusive_scan(s.cbegin(), s.cend(), s.begin(), multiplies<>{}, 1729u);\r\n    assert(equal(s.begin(), s.end(), d.begin(), d.end()));\r\n}\r\n\r\nvoid test_case_inclusive_scan_bop_init_parallel_associative(const size_t testSize) {\r\n    // string concat is associative but not commutative\r\n    vector<string> results(testSize);\r\n    inclusive_scan(par, maxAlphaStrings.begin(), maxAlphaStrings.begin() + static_cast<ptrdiff_t>(testSize),\r\n        results.begin(), plus<>{}, \"frobinate\"s);\r\n    assert_is_alpha_string_prefix_sum(results, \"frobinate\");\r\n}\r\n\r\nvoid test_case_inclusive_scan_bop_init_parallel_associative_in_place(const size_t testSize) {\r\n    // also test where dest == first\r\n    vector<string> results(maxAlphaStrings.begin(), maxAlphaStrings.begin() + static_cast<ptrdiff_t>(testSize));\r\n    inclusive_scan(par, results.begin(), results.end(), results.begin(), plus<>{}, \"frobinate\"s);\r\n    assert_is_alpha_string_prefix_sum(results, \"frobinate\");\r\n}\r\n\r\nstruct inputType {\r\n    inputType() = delete;\r\n    /* implicit */ inputType(int) {} // so that the test can make an array\r\n    inputType(const inputType&)            = delete;\r\n    inputType& operator=(const inputType&) = delete;\r\n};\r\n\r\nstruct bopResult {\r\n    bopResult() = delete;\r\n    /* implicit */ bopResult(int) {}\r\n    bopResult(const bopResult&)            = delete;\r\n    bopResult& operator=(const bopResult&) = delete;\r\n};\r\n\r\nstruct intermediateType {\r\n    intermediateType() = delete;\r\n    explicit intermediateType(int) {} // so that the test can make one of these\r\n    explicit intermediateType(inputType&) {} // Intermediate tmp(*first)\r\n    // Intermediate tmp = binary_op((one of tmp, move(tmp), *first), *first);\r\n    /* implicit */ intermediateType(bopResult&&) {}\r\n    intermediateType(const intermediateType&)            = delete;\r\n    intermediateType(intermediateType&&)                 = default; // tmp = move(tmp)\r\n    intermediateType& operator=(const intermediateType&) = delete;\r\n    intermediateType& operator=(intermediateType&&)      = delete;\r\n    // tmp = binary_op((one of tmp, move(tmp), *first), *first)\r\n    intermediateType& operator=(bopResult&&) {\r\n        return *this;\r\n    }\r\n};\r\n\r\nstruct outputType {\r\n    outputType() = delete;\r\n    /* implicit */ outputType(int) {} // so that the test can make an array\r\n    outputType(const outputType&)            = delete;\r\n    outputType& operator=(const outputType&) = delete;\r\n    outputType& operator=(outputType&&)      = delete;\r\n\r\n    // in the first pass\r\n    outputType& operator=(intermediateType&) {\r\n        return *this;\r\n    }\r\n    outputType& operator=(intermediateType&&) {\r\n        return *this;\r\n    }\r\n\r\n    // in the second pass\r\n    outputType& operator=(bopResult&&) {\r\n        return *this;\r\n    }\r\n};\r\n\r\nstruct typesBop {\r\n    // tmp = binary_op( (one of tmp, move(tmp), *first), *first)\r\n    bopResult operator()(intermediateType&, inputType&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(intermediateType&&, inputType&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(inputType&, inputType&) {\r\n        return 0;\r\n    }\r\n\r\n    // tmp = binary_op( (one of tmp, move(tmp)), (one of tmp, move(tmp)) )\r\n    bopResult operator()(intermediateType&, intermediateType&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(intermediateType&, intermediateType&&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(intermediateType&&, intermediateType&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(intermediateType&&, intermediateType&&) {\r\n        return 0;\r\n    }\r\n};\r\n\r\nvoid test_case_inclusive_scan_init_writes_intermediate_type() {\r\n    inputType input[2]{0, 0};\r\n    outputType output[2]{0, 0};\r\n    inclusive_scan(begin(input), end(input), output, typesBop{}, intermediateType{0});\r\n    inclusive_scan(par, begin(input), end(input), output, typesBop{}, intermediateType{0});\r\n}\r\n\r\nint main() {\r\n    mt19937 gen(1729);\r\n\r\n    parallel_test_case(test_case_inclusive_scan_parallel, gen);\r\n    parallel_test_case(test_case_inclusive_scan_parallel_associative);\r\n    parallel_test_case(test_case_inclusive_scan_parallel_associative_in_place);\r\n    parallel_test_case(test_case_inclusive_scan_bop_parallel, gen);\r\n    parallel_test_case(test_case_inclusive_scan_bop_init_parallel, gen);\r\n    parallel_test_case(test_case_inclusive_scan_bop_init_parallel_associative);\r\n    parallel_test_case(test_case_inclusive_scan_bop_init_parallel_associative_in_place);\r\n    test_case_inclusive_scan_init_writes_intermediate_type();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_is_heap/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_is_heap/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <functional>\r\n#include <numeric>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nvoid test_case_is_heap_parallel(const size_t testSize) {\r\n    vector<size_t> v(testSize, 0UL);\r\n\r\n    assert(is_heap(par, v.begin(), v.end()));\r\n    assert(is_heap(par, v.begin(), v.end(), greater()));\r\n    assert(is_heap_until(par, v.begin(), v.end()) == v.end());\r\n    assert(is_heap_until(par, v.begin(), v.end(), greater()) == v.end());\r\n\r\n    if (testSize < 2) {\r\n        return;\r\n    }\r\n\r\n    // [0,...,0,1,0,...,0], with the 1 placed at each index\r\n    // index = 0\r\n    v[0] = 1;\r\n    assert(is_heap(par, v.begin(), v.end()));\r\n    assert(!is_heap(par, v.begin(), v.end(), greater()));\r\n    assert(is_heap_until(par, v.begin(), v.end()) == v.end());\r\n    assert(is_heap_until(par, v.begin(), v.end(), greater()) == v.begin() + 1);\r\n    v[0] = 0;\r\n\r\n    // (0, testSize - 1]\r\n    const auto limit = min(testSize, quadratic_complexity_case_limit);\r\n    for (auto i = 1U; i < limit; ++i) {\r\n        v[i] = 1;\r\n        assert(!is_heap(par, v.begin(), v.end()));\r\n        assert(is_heap_until(par, v.begin(), v.end()) == v.begin() + static_cast<int>(i));\r\n        if (i < testSize / 2) {\r\n            assert(!is_heap(par, v.begin(), v.end(), greater()));\r\n            assert(is_heap_until(par, v.begin(), v.end(), greater()) == v.begin() + (static_cast<int>(i) * 2) + 1);\r\n        } else {\r\n            assert(is_heap(par, v.begin(), v.end(), greater()));\r\n            assert(is_heap_until(par, v.begin(), v.end(), greater()) == v.end());\r\n        }\r\n        v[i] = 0;\r\n    }\r\n\r\n    // all test cases exhausted for testSize == 2 at this point\r\n    if (testSize == 2) {\r\n        return;\r\n    }\r\n\r\n    // increasing list starting at 1\r\n    iota(v.begin(), v.end(), 1UL);\r\n    assert(!is_heap(par, v.begin(), v.end()));\r\n    assert(is_heap_until(par, v.begin(), v.end()) == v.begin() + 1);\r\n    assert(is_heap(par, v.begin(), v.end(), greater()));\r\n    assert(is_heap_until(par, v.begin(), v.end(), greater()) == v.end());\r\n\r\n    // place 0 at each index\r\n    // index = 0\r\n    const auto secondElement = v.begin() + 1;\r\n    v[0]                     = 0;\r\n    assert(!is_heap(par, v.begin(), v.end()));\r\n    assert(is_heap_until(par, v.begin(), v.end()) == secondElement);\r\n    assert(is_heap(par, v.begin(), v.end(), greater()));\r\n    assert(is_heap_until(par, v.begin(), v.end(), greater()) == v.end());\r\n    v[0] = 1;\r\n\r\n    // index = 1\r\n    v[1] = 0;\r\n    assert(!is_heap(par, v.begin(), v.end()));\r\n    assert(is_heap_until(par, v.begin(), v.end()) == secondElement + 1);\r\n    assert(!is_heap(par, v.begin(), v.end(), greater()));\r\n    assert(is_heap_until(par, v.begin(), v.end(), greater()) == secondElement);\r\n    v[1] = 2;\r\n\r\n    for (auto i = 2U; i < limit; ++i) {\r\n        const auto old = v[i];\r\n        v[i]           = 0;\r\n        assert(!is_heap(par, v.begin(), v.end()));\r\n        assert(is_heap_until(par, v.begin(), v.end()) == secondElement);\r\n        assert(!is_heap(par, v.begin(), v.end(), greater()));\r\n        assert(is_heap_until(par, v.begin(), v.end(), greater()) == v.begin() + static_cast<int>(i));\r\n        v[i] = old;\r\n    }\r\n\r\n    // decreasing list starting at testSize\r\n    iota(v.rbegin(), v.rend(), 1U);\r\n    assert(is_heap(par, v.begin(), v.end()));\r\n    assert(is_heap_until(par, v.begin(), v.end()) == v.end());\r\n    assert(!is_heap(par, v.begin(), v.end(), greater()));\r\n    assert(is_heap_until(par, v.begin(), v.end(), greater()) == secondElement);\r\n\r\n    // place 0 at each index\r\n    // index = 0\r\n    v[0] = 0;\r\n    assert(!is_heap(par, v.begin(), v.end()));\r\n    assert(is_heap_until(par, v.begin(), v.end()) == secondElement);\r\n    assert(!is_heap(par, v.begin(), v.end(), greater()));\r\n    assert(is_heap_until(par, v.begin(), v.end(), greater()) == v.begin() + 3);\r\n    v[0] = testSize;\r\n\r\n    for (auto i = 1U; i < limit; ++i) {\r\n        const auto old = v[i];\r\n        v[i]           = 0;\r\n        if (i < testSize / 2) {\r\n            assert(!is_heap(par, v.begin(), v.end()));\r\n            assert(is_heap_until(par, v.begin(), v.end()) == v.begin() + (static_cast<int>(i) * 2) + 1);\r\n        } else {\r\n            assert(is_heap(par, v.begin(), v.end()));\r\n            assert(is_heap_until(par, v.begin(), v.end()) == v.end());\r\n        }\r\n        assert(!is_heap(par, v.begin(), v.end(), greater()));\r\n        assert(is_heap_until(par, v.begin(), v.end(), greater()) == secondElement);\r\n        v[i] = old;\r\n    }\r\n}\r\n\r\nint main() {\r\n    parallel_test_case(test_case_is_heap_parallel);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_is_partitioned/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_is_partitioned/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <execution>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nconst auto read_char_as_bool = [](char c) { return c != 0; };\r\n\r\ntemplate <template <class...> class Container>\r\nvoid test_case_is_partitioned_parallel(const size_t testSize) {\r\n    Container<char> c(testSize, true);\r\n\r\n    assert(is_partitioned(par, c.begin(), c.end(), read_char_as_bool));\r\n\r\n    if (testSize == 0) {\r\n        return;\r\n    }\r\n\r\n    // T ... T F T ... T with F positioned at each index\r\n    auto remainingAttempts = quadratic_complexity_case_limit;\r\n    auto first             = c.begin();\r\n    for (size_t i = 0; i < testSize - 1; ++i, ++first) {\r\n        *first = false;\r\n        assert(!is_partitioned(par, c.begin(), c.end(), read_char_as_bool));\r\n        *first = true;\r\n        if (--remainingAttempts == 0) {\r\n            advance(first, static_cast<ptrdiff_t>(testSize - 1 - i));\r\n            break;\r\n        }\r\n    }\r\n\r\n    *first = false;\r\n    assert(is_partitioned(par, c.begin(), c.end(), read_char_as_bool));\r\n    *first = true;\r\n\r\n    // front to back change T to F, end up with all F\r\n    remainingAttempts = quadratic_complexity_case_limit;\r\n    first             = c.begin();\r\n    for (size_t i = 0; i < testSize - 1; ++i, ++first) {\r\n        *first = false;\r\n        assert(!is_partitioned(par, c.begin(), c.end(), read_char_as_bool));\r\n        if (--remainingAttempts == 0) {\r\n            first = fill_n(first, static_cast<ptrdiff_t>(testSize - 1 - i), '\\0');\r\n            break;\r\n        }\r\n    }\r\n    *first = false;\r\n\r\n    // contains all F\r\n    assert(is_partitioned(par, c.begin(), c.end(), read_char_as_bool));\r\n\r\n    // test cases for sizes 0, 1, and 2 are exhausted at this point\r\n    if (testSize < 3) {\r\n        return;\r\n    }\r\n\r\n    // F ... F T F ... F with T positioned at each index\r\n    first  = c.begin();\r\n    *first = true;\r\n    assert(is_partitioned(par, c.begin(), c.end(), read_char_as_bool));\r\n    *first = false;\r\n    ++first;\r\n\r\n    remainingAttempts = quadratic_complexity_case_limit;\r\n    for (size_t i = 1; i < testSize; ++i, ++first) {\r\n        *first = true;\r\n        assert(!is_partitioned(par, c.begin(), c.end(), read_char_as_bool));\r\n        *first = false;\r\n        if (--remainingAttempts == 0) {\r\n            break;\r\n        }\r\n    }\r\n\r\n    // front to back change F to T, end up with all T\r\n    remainingAttempts = quadratic_complexity_case_limit;\r\n    first             = c.begin();\r\n    *first            = true;\r\n    while (++first != c.end()) {\r\n        *first = true;\r\n        assert(is_partitioned(par, c.begin(), c.end(), read_char_as_bool));\r\n        if (--remainingAttempts == 0) {\r\n            fill(first, c.end(), '\\x01');\r\n            break;\r\n        }\r\n    }\r\n\r\n    if (testSize >= 4) {\r\n        // testing with 2 partition points (T F T ... T F T ... T), where the F at index 1 is fixed and the second F is\r\n        // tried at each index\r\n        remainingAttempts = quadratic_complexity_case_limit;\r\n        first             = next(c.begin());\r\n        *first            = false;\r\n        while (++first != c.end()) {\r\n            *first = false;\r\n            assert(!is_partitioned(par, c.begin(), c.end(), read_char_as_bool));\r\n            *first = true;\r\n            if (--remainingAttempts == 0) {\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    fill(c.begin(), c.end(), false);\r\n\r\n    // testing with 2 partition adjacent points (T...T F T F...F) where the adjacent partition points are tried at each\r\n    // index\r\n    remainingAttempts = quadratic_complexity_case_limit;\r\n    first             = c.begin();\r\n    auto second       = next(first, 2);\r\n    for (; second != c.end(); ++first, ++second) {\r\n        *first  = true;\r\n        *second = true;\r\n        assert(!is_partitioned(par, c.begin(), c.end(), read_char_as_bool));\r\n        *second = false;\r\n        if (--remainingAttempts == 0) {\r\n            break;\r\n        }\r\n    }\r\n}\r\n\r\nint main() {\r\n    parallel_test_case(test_case_is_partitioned_parallel<vector>);\r\n    parallel_test_case(test_case_is_partitioned_parallel<forward_list>);\r\n    parallel_test_case(test_case_is_partitioned_parallel<list>);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_is_sorted/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_is_sorted/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <execution>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <numeric>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\ntemplate <template <class...> class Container>\r\nvoid test_case_is_sorted_parallel(const size_t testSize) {\r\n    Container<size_t> c(testSize, 0UL);\r\n\r\n    assert(is_sorted(par, c.begin(), c.end()));\r\n    assert(is_sorted(par, c.begin(), c.end(), greater()));\r\n    assert(is_sorted_until(par, c.begin(), c.end()) == c.end());\r\n    assert(is_sorted_until(par, c.begin(), c.end(), greater()) == c.end());\r\n\r\n    if (testSize < 2) {\r\n        return;\r\n    }\r\n\r\n    // [0,...,0,1,0,...,0], with the 1 placed at each index\r\n    auto next       = c.begin();\r\n    const auto last = c.end();\r\n\r\n    // first index:\r\n    *next = 1;\r\n    assert(!is_sorted(par, c.begin(), c.end()));\r\n    assert(is_sorted(par, c.begin(), c.end(), greater()));\r\n    assert(is_sorted_until(par, c.begin(), c.end()) == std::next(c.begin()));\r\n    assert(is_sorted_until(par, c.begin(), c.end(), greater()) == c.end());\r\n    *next = 0;\r\n\r\n    // (first index, last index)\r\n    auto remainingAttempts = quadratic_complexity_case_limit;\r\n    ++next;\r\n    {\r\n        size_t i = 0;\r\n        for (; i < testSize - 2 && remainingAttempts != 0; ++i, --remainingAttempts) {\r\n            *next = 1;\r\n            assert(!is_sorted(par, c.begin(), c.end()));\r\n            assert(!is_sorted(par, c.begin(), c.end(), greater()));\r\n            assert(is_sorted_until(par, c.begin(), c.end()) == std::next(next));\r\n            assert(is_sorted_until(par, c.begin(), c.end(), greater()) == next);\r\n            *next = 0;\r\n            ++next;\r\n        }\r\n\r\n        std::advance(next, static_cast<ptrdiff_t>(testSize - 2 - i));\r\n    }\r\n\r\n    // last index:\r\n    *next = 1;\r\n    assert(is_sorted(par, c.begin(), c.end()));\r\n    assert(!is_sorted(par, c.begin(), c.end(), greater()));\r\n    assert(is_sorted_until(par, c.begin(), c.end()) == c.end());\r\n    assert(is_sorted_until(par, c.begin(), c.end(), greater()) == next);\r\n\r\n    // all test cases covered for this size above:\r\n    // * first < second\r\n    // * first == second\r\n    // * first > second\r\n    if (testSize == 2) {\r\n        return;\r\n    }\r\n\r\n    // increasing list starting at 1\r\n    iota(c.begin(), c.end(), 1UL);\r\n    assert(is_sorted(par, c.begin(), c.end()));\r\n    assert(!is_sorted(par, c.begin(), c.end(), greater()));\r\n    assert(is_sorted_until(par, c.begin(), c.end()) == c.end());\r\n    assert(is_sorted_until(par, c.begin(), c.end(), greater()) == std::next(c.begin()));\r\n\r\n    // breaking the increasing list at each index [1, 2, ..., 0, ..., testSize-1, testSize]\r\n    // Note that we skip the first case since [0, 2, ..., testSize-1, testSize] is still sorted\r\n    remainingAttempts        = quadratic_complexity_case_limit;\r\n    int i                    = 1;\r\n    const auto secondElement = std::next(c.begin());\r\n    const auto thirdElement  = std::next(secondElement);\r\n    for (auto first = secondElement; first != last; ++first) {\r\n        const auto old = *first;\r\n        *first         = 0;\r\n        assert(!is_sorted(par, c.begin(), c.end()));\r\n        assert(!is_sorted(par, c.begin(), c.end(), greater()));\r\n        assert(is_sorted_until(par, c.begin(), c.end()) == first);\r\n        if (i == 1) { // [1,0,3,...]\r\n            assert(is_sorted_until(par, c.begin(), c.end(), greater()) == thirdElement);\r\n        } else { // [1,2,...,0,...]\r\n            assert(is_sorted_until(par, c.begin(), c.end(), greater()) == secondElement);\r\n        }\r\n        *first = old;\r\n        ++i;\r\n        if (--remainingAttempts == 0) {\r\n            break;\r\n        }\r\n    }\r\n\r\n    // increasing list except for first element\r\n    if (remainingAttempts != 0) {\r\n        *c.begin() = testSize;\r\n        assert(!is_sorted(par, c.begin(), c.end()));\r\n        assert(!is_sorted(par, c.begin(), c.end(), greater()));\r\n        assert(is_sorted_until(par, c.begin(), c.end()) == std::next(c.begin()));\r\n        assert(is_sorted_until(par, c.begin(), c.end(), greater()) == std::next(c.begin(), 2));\r\n    }\r\n\r\n    // decreasing list\r\n    size_t val = testSize;\r\n    for (auto& elem : c) {\r\n        elem = val--;\r\n    }\r\n    assert(!is_sorted(par, c.begin(), c.end()));\r\n    assert(is_sorted(par, c.begin(), c.end(), greater()));\r\n    assert(is_sorted_until(par, c.begin(), c.end()) == std::next(c.begin()));\r\n    assert(is_sorted_until(par, c.begin(), c.end(), greater()) == c.end());\r\n}\r\n\r\nint main() {\r\n    parallel_test_case(test_case_is_sorted_parallel<vector>);\r\n    parallel_test_case(test_case_is_sorted_parallel<forward_list>);\r\n    parallel_test_case(test_case_is_sorted_parallel<list>);\r\n    parallel_test_case(test_case_is_sorted_parallel<deque>);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_mismatch/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_mismatch/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nconstexpr char one_char    = static_cast<char>(1);\r\nconst auto my_not_equal_to = [](auto a, auto b) { return a != b; };\r\n\r\ntemplate <template <class...> class Container>\r\nvoid test_case_mismatch_signatures(const size_t testSize) {\r\n    Container<char> defaults(testSize);\r\n    Container<char> ones(testSize, one_char);\r\n\r\n    using ExpectedType = pair<typename Container<char>::iterator, typename Container<char>::iterator>;\r\n\r\n    assert((mismatch(par, defaults.begin(), defaults.end(), defaults.begin())\r\n            == ExpectedType{defaults.end(), defaults.end()}));\r\n    assert((\r\n        mismatch(par, defaults.begin(), defaults.end(), ones.begin()) == ExpectedType{defaults.begin(), ones.begin()}));\r\n\r\n    assert((mismatch(par, defaults.begin(), defaults.end(), defaults.begin(), defaults.end())\r\n            == ExpectedType{defaults.end(), defaults.end()}));\r\n    assert((mismatch(par, defaults.begin(), defaults.end(), ones.begin(), ones.end())\r\n            == ExpectedType{defaults.begin(), ones.begin()}));\r\n\r\n    assert((mismatch(par, defaults.begin(), defaults.end(), defaults.begin(), my_not_equal_to)\r\n            == ExpectedType{defaults.begin(), defaults.begin()}));\r\n    assert((mismatch(par, defaults.begin(), defaults.end(), ones.begin(), my_not_equal_to)\r\n            == ExpectedType{defaults.end(), ones.end()}));\r\n\r\n    assert((mismatch(par, defaults.begin(), defaults.end(), defaults.begin(), defaults.end(), my_not_equal_to)\r\n            == ExpectedType{defaults.begin(), defaults.begin()}));\r\n    assert((mismatch(par, defaults.begin(), defaults.end(), ones.begin(), ones.end(), my_not_equal_to)\r\n            == ExpectedType{defaults.end(), ones.end()}));\r\n\r\n    // Also test each counterexample position:\r\n    auto defaultAnswer = defaults.begin();\r\n    auto onesAnswer    = ones.begin();\r\n    for (auto remainingAttempts = quadratic_complexity_case_limit; remainingAttempts != 0; --remainingAttempts) {\r\n        assert((mismatch(defaults.begin(), defaults.end(), ones.begin()) == ExpectedType{defaultAnswer, onesAnswer}));\r\n        assert((mismatch(defaults.begin(), defaults.end(), ones.begin(), ones.end())\r\n                == ExpectedType{defaultAnswer, onesAnswer}));\r\n        if (defaultAnswer == defaults.end()) {\r\n            return;\r\n        }\r\n\r\n        *onesAnswer = {};\r\n        ++defaultAnswer;\r\n        ++onesAnswer;\r\n    }\r\n}\r\n\r\ntemplate <template <class...> class Container1, template <class...> class Container2>\r\nvoid test_case_mismatch_lengths(const size_t testSize) {\r\n    Container1<char> defaults(testSize);\r\n    Container2<char> ones(testSize, one_char);\r\n    using It1 = typename Container1<char>::iterator;\r\n    using It2 = typename Container2<char>::iterator;\r\n\r\n    auto expectedOnes = ones.insert(ones.end(), one_char);\r\n    assert((mismatch(par, defaults.begin(), defaults.end(), ones.begin(), ones.end(), my_not_equal_to)\r\n            == pair<It1, It2>{defaults.end(), expectedOnes}));\r\n    assert((mismatch(par, ones.begin(), ones.end(), defaults.begin(), defaults.end(), my_not_equal_to)\r\n            == pair<It2, It1>{expectedOnes, defaults.end()}));\r\n}\r\n\r\nint main() {\r\n    parallel_test_case(test_case_mismatch_signatures<forward_list>);\r\n    parallel_test_case(test_case_mismatch_signatures<list>);\r\n    parallel_test_case(test_case_mismatch_signatures<vector>);\r\n\r\n    parallel_test_case(test_case_mismatch_lengths<vector, vector>);\r\n    parallel_test_case(test_case_mismatch_lengths<list, list>);\r\n    parallel_test_case(test_case_mismatch_lengths<list, vector>);\r\n    parallel_test_case(test_case_mismatch_lengths<vector, list>);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_partition/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_partition/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <numeric>\r\n#include <random>\r\n#include <string>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\ntemplate <class Container, class Iter, class Fn>\r\nvoid assert_is_partition(Container& c, Iter first, Iter last, Iter div, Fn fn) {\r\n    assert(all_of(first, div, fn));\r\n    assert(none_of(div, last, fn));\r\n    const auto expected = partition(c.begin(), c.end(), fn);\r\n    assert(is_permutation(c.begin(), expected, first, div));\r\n    assert(is_permutation(expected, c.end(), div, last));\r\n}\r\n\r\nconst auto is_even = [](unsigned int i) { return (i & 0x1u) == 0; };\r\n\r\ntemplate <template <class...> class Container>\r\nvoid test_case_partition_parallel(const size_t testSize, mt19937& gen) {\r\n    Container<unsigned int> tmp(testSize);\r\n    iota(tmp.begin(), tmp.end(), 0U);\r\n\r\n    auto tmpStart = tmp;\r\n    {\r\n        assert(tmp.end() == partition(par, tmp.begin(), tmp.end(), [](auto) { return true; }));\r\n        assert(tmp == tmpStart); // technically not guaranteed by the standard, but we want to provide this\r\n        assert(tmp.begin() == partition(par, tmp.begin(), tmp.end(), [](auto) { return false; }));\r\n        assert(tmp == tmpStart); // ditto technically not guaranteed\r\n\r\n        const auto result         = partition(par, tmp.begin(), tmp.end(), is_even);\r\n        const auto expectedFalses = testSize >> 1;\r\n        const auto expectedTrues  = testSize - expectedFalses;\r\n        assert(distance(tmp.begin(), result) == static_cast<ptrdiff_t>(expectedTrues));\r\n        assert(distance(result, tmp.end()) == static_cast<ptrdiff_t>(expectedFalses));\r\n        assert_is_partition(tmpStart, tmp.begin(), tmp.end(), result, is_even);\r\n    }\r\n\r\n    // \"fuzz\" testing:\r\n    for (int i = 0; i < 100; ++i) {\r\n        generate(tmp.begin(), tmp.end(), ref(gen));\r\n        tmpStart          = tmp;\r\n        const auto actual = partition(par, tmp.begin(), tmp.end(), is_even);\r\n        assert_is_partition(tmpStart, tmp.begin(), tmp.end(), actual, is_even);\r\n    }\r\n}\r\n\r\nint main() {\r\n    mt19937 gen(1729);\r\n    parallel_test_case(test_case_partition_parallel<forward_list>, gen);\r\n    parallel_test_case(test_case_partition_parallel<list>, gen);\r\n    parallel_test_case(test_case_partition_parallel<vector>, gen);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_reduce/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_reduce/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma warning(disable : 4242 4244 4365) // test_case_incorrect_special_case_reasoning tests narrowing on purpose\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <iterator>\r\n#include <memory>\r\n#include <numeric>\r\n#include <random>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nvoid test_case_reduce(const size_t testSize, mt19937& gen) {\r\n    vector<unsigned int> c(testSize);\r\n    const auto b = c.begin();\r\n    const auto e = c.end();\r\n    generate(b, e, [&] { return gen(); });\r\n    auto correct = accumulate(b, e, 0U);\r\n    assert(correct == reduce(b, e));\r\n    assert(correct == reduce(seq, b, e));\r\n    assert(correct == reduce(par, b, e));\r\n\r\n    correct += 42U;\r\n\r\n    assert(correct == reduce(b, e, 42U));\r\n    assert(correct == reduce(seq, b, e, 42U));\r\n    assert(correct == reduce(par, b, e, 42U));\r\n\r\n    auto add_a_different_way = [](unsigned int a, unsigned int b) { return a + b; };\r\n    assert(correct == reduce(b, e, 42U, add_a_different_way));\r\n    assert(correct == reduce(seq, b, e, 42U, add_a_different_way));\r\n    assert(correct == reduce(par, b, e, 42U, add_a_different_way));\r\n}\r\n\r\nvector<unique_ptr<vector<unsigned int>>> get_move_only_test_data(const size_t testSize) {\r\n    vector<unique_ptr<vector<unsigned int>>> testData;\r\n    testData.reserve(testSize);\r\n    for (size_t idx = 0; idx < testSize; ++idx) {\r\n        testData.emplace_back(make_unique<vector<unsigned int>>(1, static_cast<unsigned int>(idx)));\r\n    }\r\n\r\n    return testData;\r\n}\r\n\r\ntemplate <class ExPo>\r\nvoid test_case_move_only(ExPo&& exec, const size_t testSize) {\r\n    // one could argue that this mutates the input which is presently disallowed by the parallel\r\n    // algorithms, but the standard is unclear here and if this isn't allowed, the standard\r\n    // is bad and should feel bad\r\n    auto testData                           = get_move_only_test_data(testSize);\r\n    unique_ptr<vector<unsigned int>> result = reduce(forward<ExPo>(exec), make_move_iterator(testData.begin()),\r\n        make_move_iterator(testData.end()), make_unique<vector<unsigned int>>(),\r\n        [](unique_ptr<vector<unsigned int>> lhs, unique_ptr<vector<unsigned int>> rhs) {\r\n            lhs->insert(lhs->end(), rhs->begin(), rhs->end());\r\n            return lhs;\r\n        });\r\n\r\n    sort(result->begin(), result->end());\r\n    for (size_t idx = 0; idx < testSize; ++idx) {\r\n        assert((*result)[idx] == idx);\r\n    }\r\n}\r\n\r\nvoid test_case_incorrect_special_case_reasoning() {\r\n    unsigned char a[] = {128, 128};\r\n    // 128 + 128 mod 256 == 0, but Usual Arithmetic Conversions would say 256\r\n    assert(reduce(begin(a), end(a), 0U, plus<unsigned char>{}) == 0);\r\n}\r\n\r\nint main() {\r\n    mt19937 gen(1729);\r\n    parallel_test_case(test_case_reduce, gen);\r\n    parallel_test_case([](const size_t testSize) { test_case_move_only(seq, testSize); });\r\n    parallel_test_case([](const size_t testSize) { test_case_move_only(par, testSize); });\r\n    test_case_incorrect_special_case_reasoning();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_remove/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_remove/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <numeric>\r\n#include <random>\r\n#include <string>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nstruct even_gen {\r\n    unsigned int i = 0;\r\n\r\n    unsigned int operator()() {\r\n        i += 2;\r\n        return i;\r\n    }\r\n};\r\n\r\nstruct movable_uint {\r\n    unsigned int value;\r\n    /* implicit */ operator unsigned int() const {\r\n        return value;\r\n    }\r\n\r\n    movable_uint() : value{} {}\r\n    /* implicit */ movable_uint(unsigned int x) : value(x) {}\r\n    movable_uint(const movable_uint&)            = delete;\r\n    movable_uint(movable_uint&&)                 = default;\r\n    movable_uint& operator=(const movable_uint&) = delete;\r\n    movable_uint& operator=(movable_uint&&)      = default;\r\n};\r\n\r\nconst auto is_odd  = [](unsigned int i) { return (i & 0x1u) != 0; };\r\nconst auto is_even = [](unsigned int i) { return (i & 0x1u) == 0; };\r\n\r\ntemplate <template <class...> class Container>\r\nvoid test_case_remove_family_parallel(const size_t testSize, mt19937& gen) {\r\n    Container<unsigned int> tmp(testSize);\r\n    generate(tmp.begin(), tmp.end(), even_gen{});\r\n    Container<unsigned int> tested(tmp);\r\n\r\n    {\r\n        // remove nothing:\r\n        assert(tested.end() == remove_if(par, tested.begin(), tested.end(), is_odd));\r\n        assert(tmp == tested);\r\n\r\n        // remove 2 (basic test for remove)\r\n        auto serialResult   = remove(tmp.begin(), tmp.end(), 2U);\r\n        auto parallelResult = remove(par, tested.begin(), tested.end(), 2U);\r\n        if (testSize < 1) {\r\n            assert(parallelResult == tested.end());\r\n        } else {\r\n            assert(next(parallelResult) == tested.end());\r\n        }\r\n\r\n        assert(equal(tmp.begin(), serialResult, tested.begin(), parallelResult));\r\n\r\n        // remove everything:\r\n        assert(tested.begin() == remove_if(par, tested.begin(), tested.end(), is_even));\r\n    }\r\n\r\n    // \"fuzz\" testing:\r\n    for (int i = 0; i < 100; ++i) {\r\n        generate(tmp.begin(), tmp.end(), ref(gen));\r\n        tested              = tmp;\r\n        auto serialResult   = remove_if(tmp.begin(), tmp.end(), is_even);\r\n        auto parallelResult = remove_if(par, tested.begin(), tested.end(), is_even);\r\n        assert(equal(tmp.begin(), serialResult, tested.begin(), parallelResult));\r\n    }\r\n}\r\n\r\nvoid test_case_move_only_elements() {\r\n    vector<movable_uint> tmp(10);\r\n    generate(tmp.begin(), tmp.end(), even_gen{});\r\n    auto result = remove_if(par, tmp.begin(), tmp.end(), is_even);\r\n    assert(none_of(tmp.begin(), result, is_even));\r\n}\r\n\r\nint main() {\r\n    mt19937 gen(1729);\r\n    parallel_test_case(test_case_remove_family_parallel<forward_list>, gen);\r\n    parallel_test_case(test_case_remove_family_parallel<list>, gen);\r\n    parallel_test_case(test_case_remove_family_parallel<vector>, gen);\r\n\r\n    test_case_move_only_elements();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_replace/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_replace/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <random>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nvoid test_case_replace_parallel(const size_t testSize, mt19937& gen) {\r\n    vector<char> actual(testSize);\r\n    uniform_int_distribution<int> dist('a', 'z');\r\n    generate(actual.begin(), actual.end(), [&]() { return static_cast<char>(dist(gen)); });\r\n\r\n    vector<char> expected(actual);\r\n    replace(expected.begin(), expected.end(), 'a', 'b');\r\n    replace(par, actual.begin(), actual.end(), 'a', 'b');\r\n    assert(expected == actual);\r\n}\r\n\r\nvoid test_case_replace_if_parallel(const size_t testSize, mt19937& gen) {\r\n    vector<char> actual(testSize);\r\n    uniform_int_distribution<int> dist('a', 'z');\r\n    generate(actual.begin(), actual.end(), [&]() { return static_cast<char>(dist(gen)); });\r\n\r\n    auto pred = [](char c) { return c == 'a'; };\r\n\r\n    vector<char> expected(actual);\r\n    replace_if(expected.begin(), expected.end(), pred, 'b');\r\n    replace_if(par, actual.begin(), actual.end(), pred, 'b');\r\n    assert(expected == actual);\r\n}\r\n\r\nint main() {\r\n    mt19937 gen(1729);\r\n\r\n    parallel_test_case(test_case_replace_parallel, gen);\r\n    parallel_test_case(test_case_replace_if_parallel, gen);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_search/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_search/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <execution>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <numeric>\r\n#include <random>\r\n#include <string_view>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nconst auto my_equal_to = [](auto a, auto b) { return a == b; };\r\n\r\ntemplate <template <class...> class HaystackContainer, template <class...> class NeedleContainer>\r\nvoid test_case_search_parallel(const size_t testSize, mt19937& gen) {\r\n    HaystackContainer<int> haystack(testSize);\r\n    if (testSize == 0) {\r\n        NeedleContainer<double> needle(6);\r\n        iota(needle.begin(), needle.end(), 0);\r\n        assert(haystack.end() == search(par, haystack.begin(), haystack.end(), needle.begin(), needle.end()));\r\n        assert(\r\n            haystack.end() == search(par, haystack.begin(), haystack.end(), needle.begin(), needle.end(), my_equal_to));\r\n        return;\r\n    }\r\n\r\n    uniform_int_distribution<size_t> startDist(0, testSize - 1);\r\n    size_t startAt = startDist(gen);\r\n    uniform_int_distribution<size_t> sizeDist(1, testSize - startAt);\r\n    size_t expectedSize = sizeDist(gen);\r\n    auto expected       = next(haystack.begin(), static_cast<ptrdiff_t>(startAt));\r\n    auto expectedEnd    = next(expected, static_cast<ptrdiff_t>(expectedSize));\r\n    iota(expected, expectedEnd, 1);\r\n    NeedleContainer<double> needle(expectedSize);\r\n    iota(needle.begin(), needle.end(), 1);\r\n    assert(expected == search(par, haystack.begin(), haystack.end(), needle.begin(), needle.end()));\r\n    assert(expected == search(par, haystack.begin(), haystack.end(), needle.begin(), needle.end(), my_equal_to));\r\n}\r\n\r\ntemplate <template <class...> class HaystackContainer, template <class...> class NeedleContainer>\r\nvoid test_case_suffixes_search_parallel(const int suffixCount) {\r\n    NeedleContainer<double> needle(static_cast<size_t>(suffixCount));\r\n    iota(needle.begin(), needle.end(), 0);\r\n\r\n    int totalLength = (suffixCount * (suffixCount + 1)) / 2;\r\n    HaystackContainer<int> haystack(static_cast<size_t>(totalLength));\r\n    vector<typename HaystackContainer<int>::iterator> expectedResults;\r\n\r\n    // fill haystack with the pattern 0 0 1 0 1 2 0 1 2 3 0 1 2 3 4 [...]\r\n    // and expected results:          ^ ^   ^     ^       ^\r\n    auto b = haystack.begin();\r\n    for (int range = 0; range < suffixCount; ++range) {\r\n        expectedResults.push_back(b);\r\n        auto newB = next(b, range + 1);\r\n        iota(b, newB, 0);\r\n        b = newB;\r\n    }\r\n\r\n    // check that each of the repeating sub-patterns returns the right result\r\n    for (int idx = 0; idx < suffixCount; ++idx) {\r\n        auto expected = expectedResults[static_cast<size_t>(idx)];\r\n        auto actual   = search(par, haystack.begin(), haystack.end(), needle.begin(), next(needle.begin(), idx + 1));\r\n        assert(expected == actual);\r\n    }\r\n}\r\n\r\nint main() {\r\n    { // test that an empty candidate set results in match at the beginning\r\n        auto haystack = \"cute fluffy kittens\"sv;\r\n        auto needle   = \"\"sv;\r\n        assert(haystack.begin() == search(par, haystack.begin(), haystack.end(), needle.begin(), needle.end()));\r\n        assert(haystack.begin()\r\n               == search(par, haystack.begin(), haystack.end(), needle.begin(), needle.end(),\r\n                   [](auto, auto) -> bool { abort(); }));\r\n    }\r\n\r\n    { // test that the first match is found\r\n        auto haystack = \"see cute cuddly cats\"sv;\r\n        auto needle   = \"c\"sv;\r\n        assert(haystack.begin() + 4 == search(par, haystack.begin(), haystack.end(), needle.begin(), needle.end()));\r\n        assert(haystack.begin() + 4\r\n               == search(par, haystack.begin(), haystack.end(), needle.begin(), needle.end(), my_equal_to));\r\n    }\r\n\r\n    { // test that the whole haystack is used\r\n        auto haystack = \"the cats are cute and cuddly\"sv;\r\n        auto needle   = \"cu\"sv;\r\n        assert(haystack.begin() + 13 == search(par, haystack.begin(), haystack.end(), needle.begin(), needle.end()));\r\n        assert(haystack.begin() + 13\r\n               == search(par, haystack.begin(), haystack.end(), needle.begin(), needle.end(), my_equal_to));\r\n    }\r\n\r\n    { // test whole input match\r\n        auto haystack = \"the cats are cute and cuddly\"sv;\r\n        assert(haystack.begin() == search(par, haystack.begin(), haystack.end(), haystack.begin(), haystack.end()));\r\n        assert(haystack.begin()\r\n               == search(par, haystack.begin(), haystack.end(), haystack.begin(), haystack.end(), my_equal_to));\r\n    }\r\n\r\n    mt19937 gen(1729);\r\n\r\n    parallel_test_case(test_case_search_parallel<forward_list, forward_list>, gen);\r\n    parallel_test_case(test_case_search_parallel<list, list>, gen);\r\n    parallel_test_case(test_case_search_parallel<list, vector>, gen);\r\n    parallel_test_case(test_case_search_parallel<vector, forward_list>, gen);\r\n    parallel_test_case(test_case_search_parallel<vector, vector>, gen);\r\n\r\n    test_case_suffixes_search_parallel<forward_list, forward_list>(50);\r\n    test_case_suffixes_search_parallel<list, list>(50);\r\n    test_case_suffixes_search_parallel<list, vector>(50);\r\n    test_case_suffixes_search_parallel<vector, forward_list>(50);\r\n    test_case_suffixes_search_parallel<vector, vector>(50);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_search_n/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_search_n/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <execution>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <numeric>\r\n#include <random>\r\n#include <string_view>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nconst auto my_equal_to = [](auto a, auto b) { return a == b; };\r\n\r\ntemplate <template <class...> class HaystackContainer>\r\nvoid test_case_search_n_parallel(const size_t testSize, mt19937& gen) {\r\n    HaystackContainer<int> haystack(testSize);\r\n    if (testSize == 0) {\r\n        assert(haystack.end() == search_n(par, haystack.begin(), haystack.end(), 1, 1.0));\r\n        assert(haystack.end() == search_n(par, haystack.begin(), haystack.end(), 1, 1.0, my_equal_to));\r\n        return;\r\n    }\r\n\r\n    uniform_int_distribution<size_t> startDist(0, testSize - 1);\r\n    size_t startAt = startDist(gen);\r\n    uniform_int_distribution<size_t> sizeDist(1, testSize - startAt);\r\n    size_t expectedSize = sizeDist(gen);\r\n    auto expected       = next(haystack.begin(), static_cast<ptrdiff_t>(startAt));\r\n    auto expectedEnd    = next(expected, static_cast<ptrdiff_t>(expectedSize));\r\n    fill(expected, expectedEnd, 1729);\r\n    assert(expected == search_n(par, haystack.begin(), haystack.end(), static_cast<int>(expectedSize), 1729));\r\n    assert(\r\n        expected == search_n(par, haystack.begin(), haystack.end(), static_cast<int>(expectedSize), 1729, my_equal_to));\r\n}\r\n\r\ntemplate <template <class...> class HaystackContainer>\r\nvoid test_case_runs_search_n_parallel(const int runCount) {\r\n    // same as Sum[n = 1, n -> runCount, n + 1]\r\n    // == ((runCount + 1)(runCount + 2)/2) - 1\r\n    // == (runCount^2 + 3 * runCount + 3) / 2 - 1\r\n    // == (runCount^2 + 3 * runCount + 1) / 2\r\n    int totalLength = (runCount * runCount + 3 * runCount + 1) / 2;\r\n    HaystackContainer<char> haystack(static_cast<size_t>(totalLength));\r\n    vector<typename HaystackContainer<char>::iterator> expectedResults;\r\n\r\n    // fill haystack with the pattern F T F T T F T T T F T T T T ...\r\n    // and expected results             ^   ^     ^       ^\r\n    auto b = haystack.begin();\r\n    for (int range = 1; range <= runCount; ++range) {\r\n        *b = 'F';\r\n        ++b;\r\n        expectedResults.push_back(b);\r\n        b = fill_n(b, range, 'T');\r\n    }\r\n\r\n    // check that each of the repeating sub-patterns returns the right result\r\n    for (int idx = 1; idx <= runCount; ++idx) {\r\n        auto expected = expectedResults[static_cast<size_t>(idx - 1)];\r\n        auto actual   = search_n(par, haystack.begin(), haystack.end(), idx, 'T');\r\n        assert(expected == actual);\r\n    }\r\n}\r\n\r\nint main() {\r\n    { // test that an empty candidate set results in match at the beginning\r\n        auto haystack = \"cute fluffy kittens\"sv;\r\n        assert(haystack.begin() == search_n(par, haystack.begin(), haystack.end(), 0, 'c'));\r\n        assert(haystack.begin()\r\n               == search_n(par, haystack.begin(), haystack.end(), 0, 'c', [](auto, auto) -> bool { abort(); }));\r\n    }\r\n\r\n    { // test that the first match is found\r\n        auto haystack = \"see cute cuddly cats\"sv;\r\n        assert(haystack.begin() + 4 == search_n(par, haystack.begin(), haystack.end(), 1, 'c'));\r\n        assert(haystack.begin() + 4 == search_n(par, haystack.begin(), haystack.end(), 1, 'c', my_equal_to));\r\n    }\r\n\r\n    { // test that the whole haystack is used\r\n        auto haystack = \"the cats are cccccccute and cuddly\"sv;\r\n        assert(haystack.begin() + 13 == search_n(par, haystack.begin(), haystack.end(), 7, 'c'));\r\n        assert(haystack.begin() + 13 == search_n(par, haystack.begin(), haystack.end(), 7, 'c', my_equal_to));\r\n    }\r\n\r\n    { // test match of whole input\r\n        auto haystack = \"cccc\"sv;\r\n        assert(haystack.begin() == search_n(par, haystack.begin(), haystack.end(), 4, 'c'));\r\n        assert(haystack.begin() == search_n(par, haystack.begin(), haystack.end(), 4, 'c', my_equal_to));\r\n    }\r\n\r\n    mt19937 gen(1729);\r\n\r\n    parallel_test_case(test_case_search_n_parallel<forward_list>, gen);\r\n    parallel_test_case(test_case_search_n_parallel<list>, gen);\r\n    parallel_test_case(test_case_search_n_parallel<vector>, gen);\r\n\r\n    test_case_runs_search_n_parallel<forward_list>(100);\r\n    test_case_runs_search_n_parallel<list>(100);\r\n    test_case_runs_search_n_parallel<vector>(100);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_set_difference/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_set_difference/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <execution>\r\n#include <functional>\r\n#include <iostream>\r\n#include <numeric>\r\n#include <random>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\ntemplate <class T>\r\nvoid assert_message_vector(const bool b, const char* const msg, const T seedValue) {\r\n    if (!b) {\r\n        cerr << msg << \" failed for seed value: \" << seedValue << \"\\n\";\r\n        cerr << \"This is a randomized test.\\n\";\r\n        cerr << \"DO NOT IGNORE/RERUN THIS FAILURE.\\n\";\r\n        cerr << \"You must report it to the STL maintainers.\\n\";\r\n        abort();\r\n    }\r\n}\r\n\r\nvoid test_case_set_difference_parallel(const size_t testSize) {\r\n    vector<size_t> longList(testSize, 1UL);\r\n    vector<size_t> shortList(testSize / 2, 1UL);\r\n    vector<size_t> result(testSize);\r\n\r\n    const int shortListSize = static_cast<int>(shortList.size());\r\n    const int oddLength     = static_cast<int>(testSize % 2);\r\n\r\n    const auto lb = longList.begin();\r\n    const auto le = longList.end();\r\n    const auto sb = shortList.begin();\r\n    const auto se = shortList.end();\r\n    const auto rb = result.begin();\r\n\r\n    // === Ranges of duplicates ===\r\n    // First range size > second range size (should be some leftover elements after operation)\r\n    auto compare_result = set_difference(par, lb, le, sb, se, rb);\r\n    assert(equal(rb, compare_result, lb + shortListSize, le));\r\n    compare_result = set_difference(par, lb, le, sb, se, rb, greater());\r\n    assert(equal(rb, compare_result, lb + shortListSize, le));\r\n\r\n    if (testSize == 0) {\r\n        return;\r\n    }\r\n\r\n    // Second range size > first range size (all elements from first range should be eliminated)\r\n    compare_result = set_difference(par, sb, se, lb, le, rb);\r\n    assert(rb == compare_result);\r\n    compare_result = set_difference(par, sb, se, lb, le, rb, greater());\r\n    assert(rb == compare_result);\r\n\r\n    // First range size == second range size (all elements from first range should be eliminated)\r\n    const auto longListMidpoint = lb + shortListSize;\r\n    compare_result              = set_difference(par, lb, longListMidpoint, sb, se, rb);\r\n    assert(rb == compare_result);\r\n    compare_result = set_difference(par, lb, longListMidpoint, sb, se, rb, greater());\r\n    assert(rb == compare_result);\r\n\r\n    // === First range and second range are completely disjoint ===\r\n    fill(sb, se, 2UL);\r\n    // First range size > second range size\r\n    compare_result = set_difference(par, lb, le, sb, se, rb);\r\n    assert(equal(rb, compare_result, lb, le));\r\n    compare_result = set_difference(par, lb, le, sb, se, rb, greater());\r\n    assert(equal(rb, compare_result, lb, le));\r\n\r\n    // Second range size > first range size\r\n    compare_result = set_difference(par, sb, se, lb, le, rb);\r\n    assert(equal(rb, compare_result, sb, se));\r\n    compare_result = set_difference(par, sb, se, lb, le, rb, greater());\r\n    assert(equal(rb, compare_result, sb, se));\r\n\r\n    if (testSize == 1) {\r\n        return;\r\n    }\r\n\r\n    // === Increasing lists ===\r\n    // Increasing lists starting at 1, with shortList a subset of longList\r\n    iota(lb, le, 1UL);\r\n    iota(sb, se, 1UL);\r\n    compare_result = set_difference(par, lb, le, sb, se, rb);\r\n    assert(equal(rb, compare_result, longListMidpoint, le));\r\n    compare_result = set_difference(par, sb, se, lb, le, rb);\r\n    assert(rb == compare_result);\r\n    compare_result = set_difference(par, lb, longListMidpoint, sb, se, rb);\r\n    assert(rb == compare_result);\r\n\r\n    // === Overlapping but not equal lists, no direct containment ===\r\n    auto remainingAttempts    = quadratic_complexity_case_limit;\r\n    auto overlappingListBegin = lb;\r\n    auto overlappingListEnd   = overlappingListBegin + shortListSize;\r\n    for (auto overlappingPoint = sb; overlappingPoint < se; ++overlappingPoint) {\r\n        compare_result = set_difference(par, sb, se, overlappingListBegin, overlappingListEnd, rb);\r\n        assert(equal(rb, compare_result, sb, overlappingPoint));\r\n        ++overlappingListBegin;\r\n        ++overlappingListEnd;\r\n        if (--remainingAttempts == 0) {\r\n            break;\r\n        }\r\n    }\r\n\r\n    // shortList is a subset of longList, containing every other element of longList\r\n    size_t curr = 2;\r\n    for (auto& elem : shortList) {\r\n        elem = curr;\r\n        curr += 2;\r\n    }\r\n    vector<size_t> expected(longList.size() - shortList.size());\r\n    curr = 1;\r\n    for (auto& elem : expected) {\r\n        elem = curr;\r\n        curr += 2;\r\n    }\r\n    compare_result = set_difference(par, lb, le, sb, se, rb);\r\n    assert(equal(rb, compare_result, expected.begin(), expected.end()));\r\n    compare_result = set_difference(par, sb, se, lb, le, rb);\r\n    assert(rb == compare_result);\r\n\r\n    // === Decreasing lists ===\r\n    // Decreasing lists starting at the size of list, with shortList a subset of longList\r\n    curr = shortList.size();\r\n    for (auto& elem : shortList) {\r\n        elem = curr--;\r\n    }\r\n    curr = longList.size();\r\n    for (auto& elem : longList) {\r\n        elem = curr--;\r\n    }\r\n\r\n    compare_result = set_difference(par, lb, le, sb, se, rb, greater());\r\n    assert(equal(rb, compare_result, lb, lb + shortListSize + oddLength));\r\n    compare_result = set_difference(par, sb, se, lb, le, rb, greater());\r\n    assert(rb == compare_result);\r\n    compare_result = set_difference(par, longListMidpoint + oddLength, le, sb, se, rb, greater());\r\n    assert(rb == compare_result);\r\n\r\n    // === Overlapping but not equal lists, no direct containment ===\r\n    remainingAttempts    = quadratic_complexity_case_limit;\r\n    overlappingListBegin = lb + oddLength;\r\n    overlappingListEnd   = overlappingListBegin + shortListSize;\r\n    for (int overlappingPoint = 0; overlappingPoint < shortListSize; ++overlappingPoint) {\r\n        compare_result = set_difference(par, sb, se, overlappingListBegin, overlappingListEnd, rb, greater());\r\n        assert(equal(rb, compare_result, sb + overlappingPoint, se));\r\n        ++overlappingListBegin;\r\n        ++overlappingListEnd;\r\n        if (--remainingAttempts == 0) {\r\n            break;\r\n        }\r\n    }\r\n\r\n    // test randomized input ranges\r\n    const auto seedValue = random_device{}();\r\n    mt19937 gen(seedValue);\r\n    uniform_int_distribution<> dis(0, static_cast<int>(testSize));\r\n\r\n    vector<int> list1(testSize);\r\n    vector<int> list2(testSize);\r\n    vector<int> seqRes(testSize);\r\n    vector<int> parRes(testSize);\r\n\r\n    for (auto& elem : list1) {\r\n        elem = dis(gen);\r\n    }\r\n    for (auto& elem : list2) {\r\n        elem = dis(gen);\r\n    }\r\n\r\n    sort(list1.begin(), list1.end());\r\n    sort(list2.begin(), list2.end());\r\n    auto seqComp = set_difference(list1.begin(), list1.end(), list2.begin(), list2.end(), seqRes.begin());\r\n    auto parComp = set_difference(par, list1.begin(), list1.end(), list2.begin(), list2.end(), parRes.begin());\r\n    assert_message_vector(\r\n        equal(seqRes.begin(), seqComp, parRes.begin(), parComp), \"Randomized vectors, set difference 1\", seedValue);\r\n\r\n    seqComp = set_difference(list2.begin(), list2.end(), list1.begin(), list1.end(), seqRes.begin());\r\n    parComp = set_difference(par, list2.begin(), list2.end(), list1.begin(), list1.end(), parRes.begin());\r\n    assert_message_vector(\r\n        equal(seqRes.begin(), seqComp, parRes.begin(), parComp), \"Randomized vectors, set difference 2\", seedValue);\r\n}\r\n\r\nint main() {\r\n    parallel_test_case(test_case_set_difference_parallel);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_set_intersection/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_set_intersection/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <execution>\r\n#include <functional>\r\n#include <iostream>\r\n#include <numeric>\r\n#include <random>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\ntemplate <class T>\r\nvoid assert_message_vector(const bool b, const char* const msg, const T seedValue) {\r\n    if (!b) {\r\n        cerr << msg << \" failed for seed value: \" << seedValue << \"\\n\";\r\n        cerr << \"This is a randomized test.\\n\";\r\n        cerr << \"DO NOT IGNORE/RERUN THIS FAILURE.\\n\";\r\n        cerr << \"You must report it to the STL maintainers.\\n\";\r\n        abort();\r\n    }\r\n}\r\n\r\nvoid test_case_set_intersection_parallel(const size_t testSize) {\r\n    vector<size_t> longList(testSize, 1UL);\r\n    vector<size_t> shortList(testSize / 2, 1UL);\r\n    vector<size_t> result(testSize);\r\n\r\n    const int shortListSize = static_cast<int>(shortList.size());\r\n    const int oddLength     = static_cast<int>(testSize % 2);\r\n\r\n    const auto lb = longList.begin();\r\n    const auto le = longList.end();\r\n    const auto sb = shortList.begin();\r\n    const auto se = shortList.end();\r\n    const auto rb = result.begin();\r\n\r\n    // === Ranges of duplicates ===\r\n    auto compare_result = set_intersection(par, lb, le, sb, se, rb);\r\n    assert(equal(rb, compare_result, sb, se));\r\n    compare_result = set_intersection(par, lb, le, sb, se, rb, greater());\r\n    assert(equal(rb, compare_result, sb, se));\r\n    compare_result = set_intersection(par, sb, se, lb, le, rb);\r\n    assert(equal(rb, compare_result, sb, se));\r\n    compare_result = set_intersection(par, sb, se, lb, le, rb, greater());\r\n    assert(equal(rb, compare_result, sb, se));\r\n\r\n    compare_result = set_intersection(par, sb, se, sb, se, rb);\r\n    assert(equal(rb, compare_result, sb, se));\r\n    compare_result = set_intersection(par, sb, se, sb, se, rb, greater());\r\n    assert(equal(rb, compare_result, sb, se));\r\n\r\n    // === First range and second range are completely disjoint ===\r\n    fill(sb, se, 2UL);\r\n    compare_result = set_intersection(par, lb, le, sb, se, rb);\r\n    assert(rb == compare_result);\r\n    compare_result = set_intersection(par, lb, le, sb, se, rb, greater());\r\n    assert(rb == compare_result);\r\n    compare_result = set_intersection(par, sb, se, lb, le, rb);\r\n    assert(rb == compare_result);\r\n    compare_result = set_intersection(par, sb, se, lb, le, rb, greater());\r\n    assert(rb == compare_result);\r\n\r\n    // === Increasing lists ===\r\n    // Increasing lists starting at 1, with shortList a subset of longList\r\n    iota(lb, le, 1UL);\r\n    iota(sb, se, 1UL);\r\n    compare_result = set_intersection(par, lb, le, sb, se, rb);\r\n    assert(equal(rb, compare_result, sb, se));\r\n    compare_result = set_intersection(par, sb, se, lb, le, rb);\r\n    assert(equal(rb, compare_result, sb, se));\r\n    compare_result = set_intersection(par, sb, se, sb, se, rb);\r\n    assert(equal(rb, compare_result, sb, se));\r\n\r\n    // === Overlapping but not equal lists, no direct containments ===\r\n    auto remainingAttempts    = quadratic_complexity_case_limit;\r\n    auto overlappingListBegin = lb;\r\n    auto overlappingListEnd   = overlappingListBegin + shortListSize;\r\n    for (auto overlappingPoint = sb; overlappingPoint < se; ++overlappingPoint) {\r\n        compare_result = set_intersection(par, sb, se, overlappingListBegin, overlappingListEnd, rb);\r\n        assert(equal(rb, compare_result, overlappingPoint, se));\r\n        ++overlappingListBegin;\r\n        ++overlappingListEnd;\r\n        if (--remainingAttempts == 0) {\r\n            break;\r\n        }\r\n    }\r\n\r\n    // shortList is a subset of longList, containing every other element of longList\r\n    size_t curr = 2;\r\n    for (auto& elem : shortList) {\r\n        elem = curr;\r\n        curr += 2;\r\n    }\r\n    compare_result = set_intersection(par, lb, le, sb, se, rb);\r\n    assert(equal(rb, compare_result, sb, se));\r\n    compare_result = set_intersection(par, sb, se, lb, le, rb);\r\n    assert(equal(rb, compare_result, sb, se));\r\n\r\n    // === Decreasing lists ===\r\n    // Decreasing lists starting at the size of list, with shortList a subset of longList\r\n    curr = shortList.size();\r\n    for (auto& elem : shortList) {\r\n        elem = curr--;\r\n    }\r\n    curr = longList.size();\r\n    for (auto& elem : longList) {\r\n        elem = curr--;\r\n    }\r\n\r\n    compare_result = set_intersection(par, lb, le, sb, se, rb, greater());\r\n    assert(equal(rb, compare_result, sb, se));\r\n    compare_result = set_intersection(par, sb, se, lb, le, rb, greater());\r\n    assert(equal(rb, compare_result, sb, se));\r\n    compare_result = set_intersection(par, sb, se, sb, se, rb, greater());\r\n    assert(equal(rb, compare_result, sb, se));\r\n\r\n    remainingAttempts    = quadratic_complexity_case_limit;\r\n    overlappingListBegin = lb + oddLength;\r\n    overlappingListEnd   = overlappingListBegin + shortListSize;\r\n    for (int overlappingPoint = 0; overlappingPoint < shortListSize; ++overlappingPoint) {\r\n        compare_result = set_intersection(par, sb, se, overlappingListBegin, overlappingListEnd, rb, greater());\r\n        assert(equal(rb, compare_result, sb, sb + overlappingPoint));\r\n        ++overlappingListBegin;\r\n        ++overlappingListEnd;\r\n        if (--remainingAttempts == 0) {\r\n            break;\r\n        }\r\n    }\r\n\r\n    // test randomized input ranges\r\n    const auto seedValue = random_device{}();\r\n    mt19937 gen(seedValue);\r\n    uniform_int_distribution<> dis(0, static_cast<int>(testSize));\r\n\r\n    vector<int> list1(testSize);\r\n    vector<int> list2(testSize);\r\n    vector<int> seqRes(testSize);\r\n    vector<int> parRes(testSize);\r\n\r\n    for (auto& elem : list1) {\r\n        elem = dis(gen);\r\n    }\r\n    for (auto& elem : list2) {\r\n        elem = dis(gen);\r\n    }\r\n\r\n    sort(list1.begin(), list1.end());\r\n    sort(list2.begin(), list2.end());\r\n    auto seqComp = set_intersection(list1.begin(), list1.end(), list2.begin(), list2.end(), seqRes.begin());\r\n    auto parComp = set_intersection(par, list1.begin(), list1.end(), list2.begin(), list2.end(), parRes.begin());\r\n    assert_message_vector(\r\n        equal(seqRes.begin(), seqComp, parRes.begin(), parComp), \"Randomized vectors, set intersection 1\", seedValue);\r\n\r\n    seqComp = set_intersection(list2.begin(), list2.end(), list1.begin(), list1.end(), seqRes.begin());\r\n    parComp = set_intersection(par, list2.begin(), list2.end(), list1.begin(), list1.end(), parRes.begin());\r\n    assert_message_vector(\r\n        equal(seqRes.begin(), seqComp, parRes.begin(), parComp), \"Randomized vectors, set intersection 2\", seedValue);\r\n}\r\n\r\nint main() {\r\n    parallel_test_case(test_case_set_intersection_parallel);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_sort/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_sort/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <numeric>\r\n#include <random>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nvoid test_case_sort_parallel_special_cases() {\r\n    vector<int> testData;\r\n    sort(par, testData.begin(), testData.end()); // empty range\r\n    testData.push_back(1);\r\n    sort(par, testData.begin(), testData.end()); // 1 element\r\n    assert(testData == vector<int>({1}));\r\n    testData.push_back(0);\r\n    sort(par, testData.begin(), testData.end());\r\n    assert(testData == vector<int>({0, 1}));\r\n}\r\n\r\nvoid test_case_sort_parallel(const size_t testSize, mt19937& gen) {\r\n    vector<size_t> c(testSize + testSize / 2);\r\n    uniform_int_distribution<size_t> dist(static_cast<size_t>(0), testSize);\r\n    const auto seqEnd = c.begin() + static_cast<ptrdiff_t>(testSize);\r\n    iota(c.begin(), seqEnd, static_cast<size_t>(0));\r\n    generate(seqEnd, c.end(), [&] { return dist(gen); }); // add some duplicate elements\r\n    shuffle(c.begin(), c.end(), gen);\r\n    sort(par, c.begin(), c.end());\r\n    assert(is_sorted(c.begin(), c.end()));\r\n}\r\n\r\nint main() {\r\n    mt19937 gen(1729);\r\n\r\n    test_case_sort_parallel_special_cases();\r\n    parallel_test_case(test_case_sort_parallel, gen);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_stable_sort/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_stable_sort/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <list>\r\n#include <random>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nconst auto cmpTens = [](auto a, auto b) { return a / 10 < b / 10; };\r\n\r\ntemplate <template <class...> class Container>\r\nvoid test_case_stable_sort_parallel_special_cases() {\r\n    Container<int> testData;\r\n    stable_sort(par, testData.begin(), testData.end()); // empty range\r\n    testData.push_back(1);\r\n    stable_sort(par, testData.begin(), testData.end()); // 1 element\r\n    assert(testData == Container<int>({1}));\r\n    testData.push_back(0);\r\n    stable_sort(par, testData.begin(), testData.end());\r\n    assert(testData == Container<int>({0, 1}));\r\n    testData.clear();\r\n    testData.push_back(11);\r\n    testData.push_back(25);\r\n    testData.push_back(10);\r\n    stable_sort(par, testData.begin(), testData.end(), cmpTens);\r\n    assert(testData == Container<int>({11, 10, 25}));\r\n}\r\n\r\nvector<size_t> get_test_case_vector(const size_t testSize, mt19937& gen) {\r\n    vector<size_t> c;\r\n    for (size_t idx = 0; idx < testSize; ++idx) {\r\n        c.push_back(idx * 10 + 5);\r\n    }\r\n\r\n    shuffle(c.begin(), c.end(), gen);\r\n\r\n    // add some duplicate elements that, to be stable, must come after\r\n    uniform_int_distribution<size_t> dist(static_cast<size_t>(0), testSize - 1);\r\n    for (size_t idx = 0; idx < testSize / 2; ++idx) {\r\n        c.push_back(dist(gen) * 10);\r\n    }\r\n\r\n    return c;\r\n}\r\n\r\ntemplate <class FwdIt>\r\nvoid assert_stable_sort_cmpTens_test_case(FwdIt first, FwdIt last) {\r\n    size_t highest = 0;\r\n    while (first != last) {\r\n        auto target = *first;\r\n        assert(target > highest);\r\n        highest = target;\r\n        assert(target % 10 == 5);\r\n        target -= 5;\r\n        do {\r\n            ++first;\r\n        } while (first != last && *first == target);\r\n    }\r\n}\r\n\r\nvoid test_case_stable_sort_parallel_list(const size_t testSize, mt19937& gen) {\r\n    list<size_t> c;\r\n    {\r\n        const auto cVec = get_test_case_vector(testSize, gen);\r\n        c.assign(cVec.begin(), cVec.end());\r\n    }\r\n\r\n    stable_sort(par, c.begin(), c.end(), cmpTens);\r\n    assert_stable_sort_cmpTens_test_case(c.begin(), c.end());\r\n}\r\n\r\nvoid test_case_stable_sort_parallel_vector(const size_t testSize, mt19937& gen) {\r\n    auto c = get_test_case_vector(testSize, gen);\r\n    stable_sort(par, c.begin(), c.end(), cmpTens);\r\n    assert_stable_sort_cmpTens_test_case(c.begin(), c.end());\r\n}\r\n\r\nint main() {\r\n    mt19937 gen(1729);\r\n\r\n    test_case_stable_sort_parallel_special_cases<list>();\r\n    test_case_stable_sort_parallel_special_cases<vector>();\r\n    parallel_test_case(test_case_stable_sort_parallel_list, gen);\r\n    parallel_test_case(test_case_stable_sort_parallel_vector, gen);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_transform/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_transform/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <atomic>\r\n#include <cassert>\r\n#include <execution>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <random>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nconst auto add_twenty   = [](unsigned int x) { return x + 20; };\r\nconst auto equal_twenty = [](unsigned int x, unsigned int y) { return x + 20 == y; };\r\n\r\ntemplate <template <class...> class SourceContainer, template <class...> class DestContainer>\r\nvoid test_case_unary_transform_parallel(const size_t testSize, mt19937& gen) {\r\n    SourceContainer<unsigned int> s(testSize);\r\n    generate(s.begin(), s.end(), ref(gen));\r\n    DestContainer<unsigned int> d(testSize);\r\n    assert(d.end() == transform(par, s.cbegin(), s.cend(), d.begin(), add_twenty));\r\n    assert(equal(s.cbegin(), s.cend(), d.cbegin(), d.cend(), equal_twenty));\r\n}\r\n\r\ntemplate <template <class...> class Source1Container, template <class...> class Source2Container,\r\n    template <class...> class DestContainer>\r\nvoid test_case_binary_transform_parallel(const size_t testSize, mt19937& gen) {\r\n    Source1Container<unsigned int> s1(testSize);\r\n    Source2Container<unsigned int> s2(testSize);\r\n    generate(s1.begin(), s1.end(), ref(gen));\r\n    generate(s2.begin(), s2.end(), ref(gen));\r\n    vector<unsigned int> expected(testSize);\r\n    transform(s1.cbegin(), s1.cend(), s2.cbegin(), expected.begin(), plus<>{});\r\n    DestContainer<unsigned int> d(testSize);\r\n    assert(d.end() == transform(par, s1.cbegin(), s1.cend(), s2.cbegin(), d.begin(), plus<>{}));\r\n    assert(equal(expected.begin(), expected.end(), d.begin(), d.end()));\r\n}\r\n\r\nint main() {\r\n    mt19937 gen(1729);\r\n\r\n    parallel_test_case(test_case_unary_transform_parallel<forward_list, forward_list>, gen);\r\n    parallel_test_case(test_case_unary_transform_parallel<forward_list, list>, gen);\r\n    parallel_test_case(test_case_unary_transform_parallel<forward_list, vector>, gen);\r\n    parallel_test_case(test_case_unary_transform_parallel<list, forward_list>, gen);\r\n    parallel_test_case(test_case_unary_transform_parallel<list, list>, gen);\r\n    parallel_test_case(test_case_unary_transform_parallel<list, vector>, gen);\r\n    parallel_test_case(test_case_unary_transform_parallel<vector, forward_list>, gen);\r\n    parallel_test_case(test_case_unary_transform_parallel<vector, list>, gen);\r\n    parallel_test_case(test_case_unary_transform_parallel<vector, vector>, gen);\r\n\r\n    parallel_test_case(test_case_binary_transform_parallel<forward_list, forward_list, forward_list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<forward_list, forward_list, list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<forward_list, forward_list, vector>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<forward_list, list, forward_list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<forward_list, list, list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<forward_list, list, vector>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<forward_list, vector, forward_list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<forward_list, vector, list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<forward_list, vector, vector>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<list, forward_list, forward_list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<list, forward_list, list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<list, forward_list, vector>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<list, list, forward_list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<list, list, list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<list, list, vector>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<list, vector, forward_list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<list, vector, list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<list, vector, vector>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<vector, forward_list, forward_list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<vector, forward_list, list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<vector, forward_list, vector>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<vector, list, forward_list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<vector, list, list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<vector, list, vector>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<vector, vector, forward_list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<vector, vector, list>, gen);\r\n    parallel_test_case(test_case_binary_transform_parallel<vector, vector, vector>, gen);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_transform_exclusive_scan/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_transform_exclusive_scan/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <functional>\r\n#include <iterator>\r\n#include <numeric>\r\n#include <random>\r\n#include <string>\r\n#include <string_view>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nbool starts_with(const string_view target, const string_view test) {\r\n    return target.substr(0, test.size()) == test;\r\n}\r\n\r\nconstexpr auto alphaNum = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\"sv;\r\nvector<string> prepare_alpha_strings(const size_t testSize) {\r\n    vector<string> result(testSize);\r\n    auto letterPicker = alphaNum.begin();\r\n    for (string& testEntry : result) {\r\n        testEntry.push_back(*letterPicker);\r\n        testEntry.push_back('?');\r\n        ++letterPicker;\r\n        if (letterPicker == alphaNum.end()) {\r\n            letterPicker = alphaNum.begin();\r\n        }\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nconst auto maxAlphaStrings = prepare_alpha_strings(max_parallel_test_case_n);\r\nconst auto removeOne       = [](string str) {\r\n    str.pop_back();\r\n    return str;\r\n};\r\nconst auto addTen = [](unsigned int x) { return x + 10U; };\r\n\r\nbool is_alpha_string(string_view target, const string_view prefix) {\r\n    if (!starts_with(target, prefix)) {\r\n        return false;\r\n    }\r\n\r\n    target.remove_prefix(prefix.size());\r\n    while (starts_with(target, alphaNum)) {\r\n        target.remove_prefix(alphaNum.size());\r\n    }\r\n\r\n    return starts_with(alphaNum, target);\r\n}\r\n\r\nvoid assert_is_alpha_string_prefix_sum(const vector<string>& actualResults, const string_view prefix) {\r\n    size_t expectedSize = prefix.size();\r\n    for (auto&& actual : actualResults) {\r\n        assert(actual.size() == expectedSize);\r\n        assert(is_alpha_string(actual, prefix));\r\n        ++expectedSize;\r\n    }\r\n}\r\n\r\nvoid test_case_transform_exclusive_scan_bop_parallel(const size_t testSize, mt19937& gen) {\r\n    vector<unsigned int> s(testSize);\r\n    generate(s.begin(), s.end(), ref(gen));\r\n    vector<unsigned int> d(testSize);\r\n    assert(d.end() == transform_exclusive_scan(par, s.cbegin(), s.cend(), d.begin(), 1U, multiplies<>{}, addTen));\r\n    transform_exclusive_scan(s.cbegin(), s.cend(), s.begin(), 1U, multiplies<>{}, addTen);\r\n    assert(s == d);\r\n}\r\n\r\nvoid test_case_transform_exclusive_scan_bop_parallel_associative(const size_t testSize) {\r\n    // string concat is associative but not commutative\r\n    vector<string> results(testSize);\r\n    transform_exclusive_scan(par, maxAlphaStrings.begin(), maxAlphaStrings.begin() + static_cast<ptrdiff_t>(testSize),\r\n        results.begin(), \"frobinate\"s, plus<>{}, removeOne);\r\n    assert_is_alpha_string_prefix_sum(results, \"frobinate\");\r\n}\r\n\r\nvoid test_case_transform_exclusive_scan_bop_parallel_associative_in_place(const size_t testSize) {\r\n    // also test where dest == first\r\n    vector<string> results(maxAlphaStrings.begin(), maxAlphaStrings.begin() + static_cast<ptrdiff_t>(testSize));\r\n    transform_exclusive_scan(par, results.begin(), results.end(), results.begin(), \"frobinate\"s, plus<>{}, removeOne);\r\n    assert_is_alpha_string_prefix_sum(results, \"frobinate\");\r\n}\r\n\r\nstruct inputType {\r\n    inputType() = delete;\r\n    /* implicit */ inputType(int) {} // so that the test can make an array\r\n    inputType(const inputType&)            = delete;\r\n    inputType& operator=(const inputType&) = delete;\r\n};\r\n\r\nstruct transformedType {\r\n    transformedType() = delete;\r\n    /* implicit */ transformedType(int) {}\r\n    transformedType(const transformedType&)            = delete;\r\n    transformedType& operator=(const transformedType&) = delete;\r\n};\r\n\r\nstruct bopResult {\r\n    bopResult() = delete;\r\n    /* implicit */ bopResult(int) {}\r\n    bopResult(const bopResult&)            = delete;\r\n    bopResult& operator=(const bopResult&) = delete;\r\n};\r\n\r\nstruct intermediateType {\r\n    intermediateType() = delete;\r\n    explicit intermediateType(int) {} // so that the test can make one of these\r\n    explicit intermediateType(transformedType&&) {} // Intermediate tmp(unary_op(*first))\r\n    // Intermediate tmp = binary_op((one of tmp, move(tmp), unary_op(*first)), unary_op(*first));\r\n    /* implicit */ intermediateType(bopResult&&) {}\r\n    intermediateType(const intermediateType&)            = delete;\r\n    intermediateType(intermediateType&&)                 = default; // tmp = move(tmp)\r\n    intermediateType& operator=(const intermediateType&) = delete;\r\n    intermediateType& operator=(intermediateType&&)      = default;\r\n    // tmp = binary_op((one of tmp, move(tmp), *first), *first)\r\n    intermediateType& operator=(bopResult&&) {\r\n        return *this;\r\n    }\r\n};\r\n\r\nstruct outputType {\r\n    outputType() = delete;\r\n    /* implicit */ outputType(int) {} // so that the test can make an array\r\n    outputType(const outputType&)            = delete;\r\n    outputType& operator=(const outputType&) = delete;\r\n    outputType& operator=(outputType&&)      = delete;\r\n\r\n    // in the first pass\r\n    outputType& operator=(intermediateType&) {\r\n        return *this;\r\n    }\r\n    outputType& operator=(intermediateType&&) {\r\n        return *this;\r\n    }\r\n\r\n    // in the second pass\r\n    outputType& operator=(bopResult&&) {\r\n        return *this;\r\n    }\r\n};\r\n\r\nstruct transformUop {\r\n    transformedType operator()(inputType&) {\r\n        return 0;\r\n    }\r\n};\r\n\r\nstruct typesBop {\r\n    // tmp = binary_op( (one of tmp, move(tmp), unary_op(*first)), unary_op(*first))\r\n    bopResult operator()(intermediateType&, transformedType&&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(intermediateType&&, transformedType&&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(transformedType&&, transformedType&&) {\r\n        return 0;\r\n    }\r\n\r\n    // tmp = binary_op( (one of tmp, move(tmp)), (one of tmp, move(tmp)) )\r\n    bopResult operator()(intermediateType&, intermediateType&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(intermediateType&, intermediateType&&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(intermediateType&&, intermediateType&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(intermediateType&&, intermediateType&&) {\r\n        return 0;\r\n    }\r\n};\r\n\r\nvoid test_case_transform_exclusive_scan_init_writes_intermediate_type() {\r\n    inputType input[2]{0, 0};\r\n    outputType output[2]{0, 0};\r\n    transform_exclusive_scan(begin(input), end(input), output, intermediateType{0}, typesBop{}, transformUop{});\r\n    transform_exclusive_scan(par, begin(input), end(input), output, intermediateType{0}, typesBop{}, transformUop{});\r\n}\r\n\r\nint main() {\r\n    mt19937 gen(1729);\r\n\r\n    parallel_test_case(test_case_transform_exclusive_scan_bop_parallel, gen);\r\n    parallel_test_case(test_case_transform_exclusive_scan_bop_parallel_associative);\r\n    parallel_test_case(test_case_transform_exclusive_scan_bop_parallel_associative_in_place);\r\n    test_case_transform_exclusive_scan_init_writes_intermediate_type();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_transform_inclusive_scan/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_transform_inclusive_scan/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <functional>\r\n#include <iterator>\r\n#include <numeric>\r\n#include <random>\r\n#include <string>\r\n#include <string_view>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nbool starts_with(const string_view target, const string_view test) {\r\n    return target.substr(0, test.size()) == test;\r\n}\r\n\r\nconstexpr auto alphaNum = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\"sv;\r\nvector<string> prepare_alpha_question_strings(const size_t testSize) {\r\n    vector<string> result(testSize);\r\n    auto letterPicker = alphaNum.begin();\r\n    for (string& testEntry : result) {\r\n        testEntry.push_back(*letterPicker);\r\n        testEntry.push_back('?');\r\n        ++letterPicker;\r\n        if (letterPicker == alphaNum.end()) {\r\n            letterPicker = alphaNum.begin();\r\n        }\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nconst auto maxAlphaStrings = prepare_alpha_question_strings(max_parallel_test_case_n);\r\nconst auto removeOne       = [](string str) {\r\n    str.pop_back();\r\n    return str;\r\n};\r\nconst auto addTen = [](unsigned int x) { return x + 10U; };\r\n\r\nbool is_alpha_string(string_view target, const string_view prefix) {\r\n    if (!starts_with(target, prefix)) {\r\n        return false;\r\n    }\r\n\r\n    target.remove_prefix(prefix.size());\r\n    while (starts_with(target, alphaNum)) {\r\n        target.remove_prefix(alphaNum.size());\r\n    }\r\n\r\n    return starts_with(alphaNum, target);\r\n}\r\n\r\nvoid assert_is_alpha_string_prefix_sum(const vector<string>& actualResults, const string_view prefix = {}) {\r\n    size_t expectedSize = prefix.size() + 1;\r\n    for (auto&& actual : actualResults) {\r\n        assert(actual.size() == expectedSize);\r\n        assert(is_alpha_string(actual, prefix));\r\n        ++expectedSize;\r\n    }\r\n}\r\n\r\nvoid test_case_transform_inclusive_scan_parallel(const size_t testSize, mt19937& gen) {\r\n    vector<unsigned int> s(testSize);\r\n    generate(s.begin(), s.end(), ref(gen));\r\n    vector<unsigned int> d(testSize);\r\n    assert(d.end() == transform_inclusive_scan(par, s.cbegin(), s.cend(), d.begin(), multiplies<>{}, addTen));\r\n    transform_inclusive_scan(s.cbegin(), s.cend(), s.begin(), multiplies<>{}, addTen);\r\n    assert(s == d);\r\n}\r\n\r\nvoid test_case_transform_inclusive_scan_parallel_associative(const size_t testSize) {\r\n    // string concat is associative but not commutative\r\n    vector<string> results(testSize);\r\n    transform_inclusive_scan(par, maxAlphaStrings.begin(), maxAlphaStrings.begin() + static_cast<ptrdiff_t>(testSize),\r\n        results.begin(), plus<>{}, removeOne);\r\n    assert_is_alpha_string_prefix_sum(results);\r\n}\r\n\r\nvoid test_case_transform_inclusive_scan_parallel_associative_in_place(const size_t testSize) {\r\n    // also test where dest == first\r\n    vector<string> results(maxAlphaStrings.begin(), maxAlphaStrings.begin() + static_cast<ptrdiff_t>(testSize));\r\n    transform_inclusive_scan(par, results.begin(), results.end(), results.begin(), plus<>{}, removeOne);\r\n    assert_is_alpha_string_prefix_sum(results);\r\n}\r\n\r\nvoid test_case_transform_inclusive_scan_init_parallel(const size_t testSize, mt19937& gen) {\r\n    vector<unsigned int> s(testSize);\r\n    generate(s.begin(), s.end(), ref(gen));\r\n    vector<unsigned int> d(testSize);\r\n    assert(d.end() == transform_inclusive_scan(par, s.cbegin(), s.cend(), d.begin(), multiplies<>{}, addTen, 1729u));\r\n    transform_inclusive_scan(s.cbegin(), s.cend(), s.begin(), multiplies<>{}, addTen, 1729u);\r\n    assert(s == d);\r\n}\r\n\r\nvoid test_case_transform_inclusive_scan_init_parallel_associative(const size_t testSize) {\r\n    // string concat is associative but not commutative\r\n    vector<string> results(testSize);\r\n    transform_inclusive_scan(par, maxAlphaStrings.begin(), maxAlphaStrings.begin() + static_cast<ptrdiff_t>(testSize),\r\n        results.begin(), plus<>{}, removeOne, \"frobinate\"s);\r\n    assert_is_alpha_string_prefix_sum(results, \"frobinate\");\r\n}\r\n\r\nvoid test_case_transform_inclusive_scan_init_parallel_associative_in_place(const size_t testSize) {\r\n    // also test where dest == first\r\n    vector<string> results(maxAlphaStrings.begin(), maxAlphaStrings.begin() + static_cast<ptrdiff_t>(testSize));\r\n    transform_inclusive_scan(par, results.begin(), results.end(), results.begin(), plus<>{}, removeOne, \"frobinate\"s);\r\n    assert_is_alpha_string_prefix_sum(results, \"frobinate\");\r\n}\r\n\r\nstruct inputType {\r\n    inputType() = delete;\r\n    /* implicit */ inputType(int) {} // so that the test can make an array\r\n    inputType(const inputType&)            = delete;\r\n    inputType& operator=(const inputType&) = delete;\r\n};\r\n\r\nstruct transformedType {\r\n    transformedType() = delete;\r\n    /* implicit */ transformedType(int) {}\r\n    transformedType(const transformedType&)            = delete;\r\n    transformedType& operator=(const transformedType&) = delete;\r\n};\r\n\r\nstruct bopResult {\r\n    bopResult() = delete;\r\n    /* implicit */ bopResult(int) {}\r\n    bopResult(const bopResult&)            = delete;\r\n    bopResult& operator=(const bopResult&) = delete;\r\n};\r\n\r\nstruct intermediateType {\r\n    intermediateType() = delete;\r\n    explicit intermediateType(int) {} // so that the test can make one of these\r\n    explicit intermediateType(transformedType&&) {} // Intermediate tmp(unary_op(*first))\r\n    // Intermediate tmp = binary_op((one of tmp, move(tmp), unary_op(*first)), unary_op(*first));\r\n    /* implicit */ intermediateType(bopResult&&) {}\r\n    intermediateType(const intermediateType&)            = delete;\r\n    intermediateType(intermediateType&&)                 = default; // tmp = move(tmp)\r\n    intermediateType& operator=(const intermediateType&) = delete;\r\n    intermediateType& operator=(intermediateType&&)      = delete;\r\n    // tmp = binary_op((one of tmp, move(tmp), *first), *first)\r\n    intermediateType& operator=(bopResult&&) {\r\n        return *this;\r\n    }\r\n};\r\n\r\nstruct outputType {\r\n    outputType() = delete;\r\n    /* implicit */ outputType(int) {} // so that the test can make an array\r\n    outputType(const outputType&)            = delete;\r\n    outputType& operator=(const outputType&) = delete;\r\n    outputType& operator=(outputType&&)      = delete;\r\n\r\n    // in the first pass\r\n    outputType& operator=(intermediateType&) {\r\n        return *this;\r\n    }\r\n    outputType& operator=(intermediateType&&) {\r\n        return *this;\r\n    }\r\n\r\n    // in the second pass\r\n    outputType& operator=(bopResult&&) {\r\n        return *this;\r\n    }\r\n};\r\n\r\nstruct transformUop {\r\n    transformedType operator()(inputType&) {\r\n        return 0;\r\n    }\r\n};\r\n\r\nstruct typesBop {\r\n    // tmp = binary_op( (one of tmp, move(tmp), unary_op(*first)), unary_op(*first))\r\n    bopResult operator()(intermediateType&, transformedType&&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(intermediateType&&, transformedType&&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(transformedType&&, transformedType&&) {\r\n        return 0;\r\n    }\r\n\r\n    // tmp = binary_op( (one of tmp, move(tmp)), (one of tmp, move(tmp)) )\r\n    bopResult operator()(intermediateType&, intermediateType&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(intermediateType&, intermediateType&&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(intermediateType&&, intermediateType&) {\r\n        return 0;\r\n    }\r\n    bopResult operator()(intermediateType&&, intermediateType&&) {\r\n        return 0;\r\n    }\r\n};\r\n\r\nvoid test_case_transform_inclusive_scan_init_writes_intermediate_type() {\r\n    inputType input[2]{0, 0};\r\n    outputType output[2]{0, 0};\r\n    transform_inclusive_scan(begin(input), end(input), output, typesBop{}, transformUop{}, intermediateType{0});\r\n    transform_inclusive_scan(par, begin(input), end(input), output, typesBop{}, transformUop{}, intermediateType{0});\r\n}\r\n\r\nint main() {\r\n    mt19937 gen(1729);\r\n\r\n    parallel_test_case(test_case_transform_inclusive_scan_parallel, gen);\r\n    parallel_test_case(test_case_transform_inclusive_scan_parallel_associative);\r\n    parallel_test_case(test_case_transform_inclusive_scan_parallel_associative_in_place);\r\n    parallel_test_case(test_case_transform_inclusive_scan_init_parallel, gen);\r\n    parallel_test_case(test_case_transform_inclusive_scan_init_parallel_associative);\r\n    parallel_test_case(test_case_transform_inclusive_scan_init_parallel_associative_in_place);\r\n    test_case_transform_inclusive_scan_init_writes_intermediate_type();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_transform_reduce/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0024R2_parallel_algorithms_transform_reduce/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test_case_incorrect_special_case_reasoning and test_case_narrowing_conversion test narrowing on purpose\r\n#pragma warning(disable : 4242 4244 4267 4365)\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <functional>\r\n#include <iterator>\r\n#include <memory>\r\n#include <numeric>\r\n#include <random>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nconst auto add_a_different_way      = [](unsigned int a, unsigned int b) { return a + b; };\r\nconst auto multiply_a_different_way = [](unsigned int a, unsigned int b) { return a * b; };\r\n\r\nvoid test_case_transform_reduce_binary(const size_t testSize, mt19937& gen) {\r\n    vector<unsigned int> c(testSize * 2);\r\n    const auto inputBegin   = c.begin();\r\n    const auto inputEnd     = c.begin() + static_cast<ptrdiff_t>(testSize);\r\n    const auto resultsBegin = inputEnd;\r\n    generate(inputBegin, inputEnd, [&] { return gen(); });\r\n    auto correct = inner_product(inputBegin, inputEnd, resultsBegin, 0U);\r\n    assert(correct == transform_reduce(inputBegin, inputEnd, resultsBegin, 0U));\r\n    assert(correct == transform_reduce(seq, inputBegin, inputEnd, resultsBegin, 0U));\r\n    assert(correct == transform_reduce(par, inputBegin, inputEnd, resultsBegin, 0U));\r\n\r\n    correct += 42U;\r\n\r\n    assert(correct == transform_reduce(inputBegin, inputEnd, resultsBegin, 42U));\r\n    assert(correct == transform_reduce(seq, inputBegin, inputEnd, resultsBegin, 42U));\r\n    assert(correct == transform_reduce(par, inputBegin, inputEnd, resultsBegin, 42U));\r\n\r\n    assert(correct\r\n           == transform_reduce(inputBegin, inputEnd, resultsBegin, 42U, add_a_different_way, multiply_a_different_way));\r\n    assert(correct\r\n           == transform_reduce(\r\n               seq, inputBegin, inputEnd, resultsBegin, 42U, add_a_different_way, multiply_a_different_way));\r\n    assert(correct\r\n           == transform_reduce(\r\n               par, inputBegin, inputEnd, resultsBegin, 42U, add_a_different_way, multiply_a_different_way));\r\n}\r\n\r\nconst auto times_ten = [](unsigned int a) { return a * 10; };\r\n\r\nvoid test_case_transform_reduce(const size_t testSize, mt19937& gen) {\r\n    vector<unsigned int> c(testSize);\r\n    const auto b = c.begin();\r\n    const auto e = c.end();\r\n    generate(b, e, [&] { return gen(); });\r\n    auto correct =\r\n        accumulate(b, e, 0U, [](unsigned int accumulator, unsigned int elem) { return accumulator + elem * 10; });\r\n\r\n    assert(correct == transform_reduce(b, e, 0U, plus<>{}, times_ten));\r\n    assert(correct == transform_reduce(seq, b, e, 0U, plus<>{}, times_ten));\r\n    assert(correct == transform_reduce(par, b, e, 0U, plus<>{}, times_ten));\r\n\r\n    correct += 42U;\r\n\r\n    assert(correct == transform_reduce(b, e, 42U, plus<>{}, times_ten));\r\n    assert(correct == transform_reduce(seq, b, e, 42U, plus<>{}, times_ten));\r\n    assert(correct == transform_reduce(par, b, e, 42U, plus<>{}, times_ten));\r\n}\r\n\r\nvector<unique_ptr<vector<unsigned int>>> get_move_only_test_data(const size_t testSize) {\r\n    vector<unique_ptr<vector<unsigned int>>> testData;\r\n    testData.reserve(testSize);\r\n    for (size_t idx = 0; idx < testSize; ++idx) {\r\n        testData.emplace_back(make_unique<vector<unsigned int>>(1, static_cast<unsigned int>(idx)));\r\n    }\r\n\r\n    return testData;\r\n}\r\n\r\n// one could argue that the move-only examples mutate the input which is presently disallowed by the\r\n// parallel algorithms, but the standard is unclear here and if this isn't allowed, the standard\r\n// is bad and should feel bad\r\n\r\ntemplate <class ExPo>\r\nvoid test_case_move_only_binary(ExPo&& exec, const size_t testSize) {\r\n    auto testData1                          = get_move_only_test_data(testSize);\r\n    auto testData2                          = get_move_only_test_data(testSize);\r\n    unique_ptr<vector<unsigned int>> result = transform_reduce(\r\n        forward<ExPo>(exec), make_move_iterator(testData1.begin()), make_move_iterator(testData1.end()),\r\n        make_move_iterator(testData2.begin()), make_unique<vector<unsigned int>>(),\r\n        [](unique_ptr<vector<unsigned int>> lhs, unique_ptr<vector<unsigned int>> rhs) {\r\n            lhs->insert(lhs->end(), rhs->begin(), rhs->end());\r\n            return lhs;\r\n        },\r\n        [](unique_ptr<vector<unsigned int>> lhs, unique_ptr<vector<unsigned int>> rhs) {\r\n            assert(lhs->size() == 1); // should only be called directly on the input sequence\r\n            assert(rhs->size() == 1);\r\n            unsigned int lhsInt = (*lhs)[0];\r\n            unsigned int rhsInt = (*rhs)[0];\r\n            assert(lhsInt == rhsInt);\r\n            (*lhs)[0] = lhsInt * rhsInt;\r\n            return lhs;\r\n        });\r\n\r\n    sort(result->begin(), result->end());\r\n    for (size_t idx = 0; idx < testSize; ++idx) {\r\n        assert((*result)[idx] == idx * idx);\r\n    }\r\n}\r\n\r\ntemplate <class ExPo>\r\nvoid test_case_move_only(ExPo&& exec, const size_t testSize) {\r\n    auto testData                           = get_move_only_test_data(testSize);\r\n    unique_ptr<vector<unsigned int>> result = transform_reduce(\r\n        forward<ExPo>(exec), make_move_iterator(testData.begin()), make_move_iterator(testData.end()),\r\n        make_unique<vector<unsigned int>>(),\r\n        [](unique_ptr<vector<unsigned int>> lhs, unique_ptr<vector<unsigned int>> rhs) {\r\n            lhs->insert(lhs->end(), rhs->begin(), rhs->end());\r\n            return lhs;\r\n        },\r\n        [](unique_ptr<vector<unsigned int>> target) {\r\n            assert(target->size() == 1); // should only be called directly on the input sequence\r\n            target->back() *= 10;\r\n            return target;\r\n        });\r\n\r\n    sort(result->begin(), result->end());\r\n    for (size_t idx = 0; idx < testSize; ++idx) {\r\n        assert((*result)[idx] == idx * 10);\r\n    }\r\n}\r\n\r\nvoid test_case_incorrect_special_case_reasoning() {\r\n    unsigned char a[] = {64, 1};\r\n    unsigned char b[] = {64, 1};\r\n    // (64 + 64) * (1 + 1) mod 256 == 0, Usual Arithmetic Conversions would say 256\r\n    assert(transform_reduce(begin(a), end(a), b, 0, multiplies<unsigned char>{}, plus<>{}) == 0);\r\n\r\n    unsigned char c[] = {128, 10};\r\n    unsigned char d[] = {128, 10};\r\n    // (128 + 128 mod 256 == 0) * (10 + 10 mod 256) == 0, Usual Arithmetic Conversions would say 5120\r\n    assert(transform_reduce(begin(c), end(c), d, 0, multiplies<>{}, plus<unsigned char>{}) == 0);\r\n}\r\n\r\nvoid test_case_narrowing_conversion() {\r\n    size_t a[]         = {1, 2, 3};\r\n    auto return_itself = [](size_t x) { return x; };\r\n    // Initializing a smaller type (int here) with a larger type (size_t here).\r\n    // According to N4971 [transform.reduce]/7,\r\n    // this narrowing conversion should compile without error.\r\n    assert(transform_reduce(begin(a), end(a), 0, plus<size_t>{}, return_itself) == 6);\r\n    assert(transform_reduce(seq, begin(a), end(a), 0, plus<size_t>{}, return_itself) == 6);\r\n    assert(transform_reduce(par, begin(a), end(a), 0, plus<size_t>{}, return_itself) == 6);\r\n\r\n    size_t b[] = {1, 2, 3};\r\n    // Initializing a smaller type (int here) with a larger type (size_t here).\r\n    // According to N4971 [transform.reduce]/3,\r\n    // this narrowing conversion should compile without error.\r\n    assert(transform_reduce(begin(a), end(a), b, 0, plus<size_t>{}, plus<size_t>{}) == 12);\r\n    assert(transform_reduce(seq, begin(a), end(a), b, 0, plus<size_t>{}, plus<size_t>{}) == 12);\r\n    assert(transform_reduce(par, begin(a), end(a), b, 0, plus<size_t>{}, plus<size_t>{}) == 12);\r\n}\r\n\r\nint main() {\r\n    mt19937 gen(1729);\r\n    parallel_test_case(test_case_transform_reduce_binary, gen);\r\n    parallel_test_case(test_case_transform_reduce, gen);\r\n    parallel_test_case([](const size_t testSize) { test_case_move_only_binary(seq, testSize); });\r\n    parallel_test_case([](const size_t testSize) { test_case_move_only_binary(par, testSize); });\r\n    parallel_test_case([](const size_t testSize) { test_case_move_only(seq, testSize); });\r\n    parallel_test_case([](const size_t testSize) { test_case_move_only(par, testSize); });\r\n    test_case_incorrect_special_case_reasoning();\r\n    test_case_narrowing_conversion();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0035R4_over_aligned_allocation/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0035R4_over_aligned_allocation/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#if !defined(__cpp_aligned_new)\r\n#error overaligned allocation does not work with /Zc:alignedNew-\r\n#endif\r\n\r\n#define _ENABLE_EXTENDED_ALIGNED_STORAGE\r\n#define _HAS_DEPRECATED_TEMPORARY_BUFFER 1\r\n#define _SILENCE_CXX17_TEMPORARY_BUFFER_DEPRECATION_WARNING\r\n#define _SILENCE_CXX23_ALIGNED_STORAGE_DEPRECATION_WARNING\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <initializer_list>\r\n#include <memory>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nnamespace {\r\n    constexpr std::size_t max_align_log  = 14;\r\n    constexpr std::size_t max_size_shift = 3;\r\n\r\n    template <class T>\r\n    T* check_alignment(T* const ptr) {\r\n        void* vp         = ptr;\r\n        std::size_t size = sizeof(T);\r\n        assert(std::align(alignof(T), sizeof(T), vp, size) == ptr);\r\n        return ptr;\r\n    }\r\n\r\n    template <std::size_t Size, std::size_t Align>\r\n    void test_aligned_storage() {\r\n        // test aligned_storage with extended alignments\r\n        static_assert(Size >= Align);\r\n        static_assert(Size % Align == 0);\r\n        using X = std::aligned_storage_t<Size, Align>;\r\n        static_assert(sizeof(X) == Size);\r\n        static_assert(alignof(X) == Align);\r\n    }\r\n\r\n    template <std::size_t Size, std::size_t Align>\r\n    void test_case() {\r\n        test_aligned_storage<Size, Align>();\r\n\r\n        struct T {\r\n            alignas(Align) unsigned char space[Size];\r\n        };\r\n\r\n        std::array<T*, 1024> pointers;\r\n\r\n        for (auto& ptr : pointers) {\r\n            ptr = check_alignment(new T);\r\n        }\r\n        for (auto const& ptr : pointers) {\r\n            delete ptr;\r\n        }\r\n\r\n        std::allocator<T> a;\r\n        for (auto& ptr : pointers) {\r\n            ptr = check_alignment(a.allocate(1));\r\n        }\r\n        for (auto const& ptr : pointers) {\r\n            a.deallocate(ptr, 1);\r\n        }\r\n\r\n        for (auto& ptr : pointers) {\r\n            ptr = check_alignment(std::get_temporary_buffer<T>(1).first);\r\n        }\r\n        for (auto const& ptr : pointers) {\r\n            std::return_temporary_buffer<T>(ptr);\r\n        }\r\n    }\r\n\r\n    template <std::size_t X, std::size_t... Ys>\r\n    void test_single_alignment(std::index_sequence<Ys...>) {\r\n        // ...test with size (1 << (x + y)) and alignment (1 << x)\r\n        std::size_t const align = std::size_t{1} << X;\r\n        (test_case<(align << Ys), align>(), ...);\r\n    }\r\n\r\n    template <std::size_t... Xs>\r\n    void test_alignments(std::index_sequence<Xs...>) {\r\n        // ...and for every y in [0, max_size_shift)...\r\n        (test_single_alignment<Xs>(std::make_index_sequence<max_size_shift>{}), ...);\r\n    }\r\n} // unnamed namespace\r\n\r\nint main() {\r\n    // for every x in [0, max_align_log)...\r\n    test_alignments(std::make_index_sequence<max_align_log>{});\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0040R3_extending_memory_management_tools/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0040R3_extending_memory_management_tools/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <iterator>\r\n#include <memory>\r\n#include <new>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nconstexpr int exampleCount        = 20;\r\nconstexpr char fillChar           = 0x7d;\r\nconstexpr char nonTrivialInitChar = 10;\r\n\r\nstruct Trivial {\r\n    char c;\r\n};\r\nstruct NonTrivial {\r\n    char c = nonTrivialInitChar;\r\n};\r\n\r\nconst auto booleanTestsTrue     = [](const auto& x) { return static_cast<bool>(x); };\r\nconst auto isFillChar           = [](char c) { return c == fillChar; };\r\nconst auto isZeroChar           = [](char c) { return c == 0; };\r\nconst auto isNonTrivialInitChar = [](char c) { return c == nonTrivialInitChar; };\r\n\r\ntemplate <typename Target>\r\nstruct uninitialized_fixture {\r\n    static_assert(sizeof(Target) == 1);\r\n    static_assert(alignof(Target) == 1);\r\n    static_assert(is_trivially_destructible_v<Target>);\r\n\r\n    char storage[exampleCount];\r\n\r\n    uninitialized_fixture() {\r\n        fill(std::begin(storage), std::end(storage), fillChar);\r\n    }\r\n\r\n    Target* begin() {\r\n        return &reinterpret_cast<Target&>(storage[0]);\r\n    }\r\n\r\n    Target* end() {\r\n        return begin() + size(storage);\r\n    }\r\n\r\n    template <typename Fn>\r\n    void assert_all_of(Fn fn) {\r\n        assert(all_of(std::begin(storage), std::end(storage), fn));\r\n    }\r\n};\r\n\r\ntemplate <typename T, size_t Count>\r\nstruct uninitialized_storage {\r\n    alignas(T) char storage[sizeof(T) * Count];\r\n\r\n    uninitialized_storage() {\r\n        fill(std::begin(storage), std::end(storage), fillChar);\r\n    }\r\n\r\n    T* begin() {\r\n        return &reinterpret_cast<T&>(storage);\r\n    }\r\n\r\n    T* end() {\r\n        return begin() + Count;\r\n    }\r\n};\r\n\r\nvoid test_uninitialized_move() {\r\n    unique_ptr<int> ptrs[exampleCount];\r\n    for (auto& ptr : ptrs) {\r\n        ptr = make_unique<int>(52);\r\n    }\r\n\r\n    assert(all_of(begin(ptrs), end(ptrs), booleanTestsTrue));\r\n    uninitialized_storage<unique_ptr<int>, exampleCount> storage;\r\n    assert(uninitialized_move(begin(ptrs), end(ptrs), storage.begin()) == storage.end());\r\n\r\n    assert(none_of(begin(ptrs), end(ptrs), booleanTestsTrue));\r\n    assert(all_of(storage.begin(), storage.end(), booleanTestsTrue));\r\n    destroy(storage.begin(), storage.end());\r\n}\r\n\r\nvoid test_uninitialized_move_n() {\r\n    unique_ptr<int> ptrs[exampleCount];\r\n    for (auto& ptr : ptrs) {\r\n        ptr = make_unique<int>(52);\r\n    }\r\n\r\n    assert(all_of(begin(ptrs), end(ptrs), booleanTestsTrue));\r\n\r\n    uninitialized_storage<unique_ptr<int>, exampleCount> storage;\r\n    const auto result = uninitialized_move_n(begin(ptrs), exampleCount, storage.begin());\r\n\r\n    assert(result.first == end(ptrs));\r\n    assert(result.second == storage.end());\r\n    assert(none_of(begin(ptrs), end(ptrs), booleanTestsTrue));\r\n    assert(all_of(storage.begin(), storage.end(), booleanTestsTrue));\r\n    destroy(storage.begin(), storage.end());\r\n}\r\n\r\nvoid test_uninitialized_value_construct() {\r\n    {\r\n        uninitialized_fixture<Trivial> storage;\r\n        uninitialized_value_construct(storage.begin(), storage.end());\r\n        storage.assert_all_of(isZeroChar);\r\n    }\r\n\r\n    {\r\n        uninitialized_fixture<NonTrivial> storage;\r\n        uninitialized_value_construct(storage.begin(), storage.end());\r\n        storage.assert_all_of(isNonTrivialInitChar);\r\n    }\r\n}\r\n\r\nvoid test_uninitialized_value_construct_n() {\r\n    {\r\n        uninitialized_fixture<Trivial> storage;\r\n        assert(uninitialized_value_construct_n(storage.begin(), exampleCount) == storage.end());\r\n        storage.assert_all_of(isZeroChar);\r\n    }\r\n\r\n    {\r\n        uninitialized_fixture<NonTrivial> storage;\r\n        assert(uninitialized_value_construct_n(storage.begin(), exampleCount) == storage.end());\r\n        storage.assert_all_of(isNonTrivialInitChar);\r\n    }\r\n}\r\n\r\nvoid test_uninitialized_default_construct() {\r\n    {\r\n        uninitialized_fixture<Trivial> storage;\r\n        uninitialized_default_construct(storage.begin(), storage.end());\r\n        storage.assert_all_of(isFillChar); // that is, nothing happened\r\n    }\r\n\r\n    {\r\n        uninitialized_fixture<NonTrivial> storage;\r\n        uninitialized_default_construct(storage.begin(), storage.end());\r\n        storage.assert_all_of(isNonTrivialInitChar);\r\n    }\r\n}\r\n\r\nvoid test_uninitialized_default_construct_n() {\r\n    {\r\n        uninitialized_fixture<Trivial> storage;\r\n        assert(uninitialized_default_construct_n(storage.begin(), exampleCount) == storage.end());\r\n        storage.assert_all_of(isFillChar); // that is, nothing happened\r\n    }\r\n\r\n    {\r\n        uninitialized_fixture<NonTrivial> storage;\r\n        assert(uninitialized_default_construct_n(storage.begin(), exampleCount) == storage.end());\r\n        storage.assert_all_of(isNonTrivialInitChar);\r\n    }\r\n}\r\n\r\nint g_alive = 0;\r\nstruct alive_counter {\r\n    alive_counter() {\r\n        ++g_alive;\r\n    }\r\n    alive_counter(const alive_counter&)            = delete;\r\n    alive_counter& operator=(const alive_counter&) = delete;\r\n    ~alive_counter() {\r\n        --g_alive;\r\n    }\r\n};\r\n\r\nvoid test_destroy_at() {\r\n    uninitialized_storage<alive_counter, 1> storage;\r\n    ::new (storage.begin()) alive_counter;\r\n    assert(g_alive == 1);\r\n    destroy_at(storage.begin());\r\n    assert(g_alive == 0);\r\n}\r\n\r\nvoid test_destroy() {\r\n    uninitialized_storage<alive_counter, exampleCount> storage;\r\n    uninitialized_value_construct(storage.begin(), storage.end());\r\n    assert(g_alive == exampleCount);\r\n    destroy(storage.begin(), storage.end());\r\n    assert(g_alive == 0);\r\n}\r\n\r\nvoid test_destroy_n() {\r\n    uninitialized_storage<alive_counter, exampleCount> storage;\r\n    uninitialized_value_construct(storage.begin(), storage.end());\r\n    assert(g_alive == exampleCount);\r\n    assert(destroy_n(storage.begin(), exampleCount) == storage.end());\r\n    assert(g_alive == 0);\r\n}\r\n\r\nstruct copy_elision_dest;\r\n\r\nclass pinned {\r\npublic:\r\n    explicit pinned(int n) : n_{n} {}\r\n\r\n    pinned(const pinned&)            = delete;\r\n    pinned& operator=(const pinned&) = delete;\r\n\r\nprivate:\r\n    friend copy_elision_dest;\r\n\r\n    int n_;\r\n};\r\n\r\nclass pinned_ioterator {\r\nprivate:\r\n    struct arrow_proxy {\r\n        pinned val_;\r\n\r\n        pinned* operator->() {\r\n            return &val_;\r\n        }\r\n    };\r\n\r\npublic:\r\n    using iterator_category = input_iterator_tag;\r\n    using difference_type   = int;\r\n    using value_type        = pinned;\r\n    using pointer           = arrow_proxy;\r\n    using reference         = pinned;\r\n\r\n    explicit pinned_ioterator(int n) : n_{n} {}\r\n\r\n    pinned operator*() const {\r\n        return pinned{n_};\r\n    }\r\n    pinned_ioterator& operator++() {\r\n        ++n_;\r\n        return *this;\r\n    }\r\n    pinned_ioterator operator++(int) {\r\n        auto old = *this;\r\n        ++*this;\r\n        return old;\r\n    }\r\n\r\n    arrow_proxy operator->() const {\r\n        return arrow_proxy{pinned{n_}};\r\n    }\r\n\r\n    friend bool operator==(pinned_ioterator i, pinned_ioterator j) {\r\n        return i.n_ == j.n_;\r\n    }\r\n#if !_HAS_CXX20\r\n    friend bool operator!=(pinned_ioterator i, pinned_ioterator j) {\r\n        return !(i == j);\r\n    }\r\n#endif // !_HAS_CXX20\r\n\r\nprivate:\r\n    int n_;\r\n};\r\n\r\nstruct copy_elision_dest {\r\n    explicit copy_elision_dest(pinned x) : n_{x.n_} {}\r\n\r\n    int n_;\r\n};\r\n\r\n// std::uninitialized_copy/_n are required to perform guaranteed copy elision since C++17.\r\nvoid test_guaranteed_copy_elision_uninitialized_copy() {\r\n    constexpr int len = 42;\r\n\r\n    uninitialized_storage<copy_elision_dest, len> us;\r\n    uninitialized_copy(pinned_ioterator{0}, pinned_ioterator{len}, us.begin());\r\n    for (int i = 0; i != len; ++i) {\r\n        assert(us.begin()[i].n_ == i);\r\n    }\r\n    destroy(us.begin(), us.end());\r\n}\r\n\r\nvoid test_guaranteed_copy_elision_uninitialized_copy_n() {\r\n    constexpr int len = 42;\r\n\r\n    uninitialized_storage<copy_elision_dest, len> us;\r\n    uninitialized_copy_n(pinned_ioterator{0}, len, us.begin());\r\n    for (int i = 0; i != len; ++i) {\r\n        assert(us.begin()[i].n_ == i);\r\n    }\r\n    destroy(us.begin(), us.end());\r\n}\r\n\r\n// Also test LWG-3918 \"std::uninitialized_move/_n and guaranteed copy elision\".\r\nvoid test_guaranteed_copy_elision_uninitialized_move() {\r\n    constexpr int len = 42;\r\n\r\n    uninitialized_storage<copy_elision_dest, len> us;\r\n    uninitialized_move(pinned_ioterator{0}, pinned_ioterator{len}, us.begin());\r\n    for (int i = 0; i != len; ++i) {\r\n        assert(us.begin()[i].n_ == i);\r\n    }\r\n    destroy(us.begin(), us.end());\r\n}\r\n\r\nvoid test_guaranteed_copy_elision_uninitialized_move_n() {\r\n    constexpr int len = 42;\r\n\r\n    uninitialized_storage<copy_elision_dest, len> us;\r\n    uninitialized_move_n(pinned_ioterator{0}, len, us.begin());\r\n    for (int i = 0; i != len; ++i) {\r\n        assert(us.begin()[i].n_ == i);\r\n    }\r\n    destroy(us.begin(), us.end());\r\n}\r\n\r\nint main() {\r\n    test_uninitialized_move();\r\n    test_uninitialized_move_n();\r\n    test_uninitialized_value_construct();\r\n    test_uninitialized_value_construct_n();\r\n    test_uninitialized_default_construct();\r\n    test_uninitialized_default_construct_n();\r\n    test_destroy_at();\r\n    test_destroy();\r\n    test_destroy_n();\r\n\r\n    test_guaranteed_copy_elision_uninitialized_copy();\r\n    test_guaranteed_copy_elision_uninitialized_copy_n();\r\n    test_guaranteed_copy_elision_uninitialized_move();\r\n    test_guaranteed_copy_elision_uninitialized_move_n();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0040R3_parallel_memory_algorithms/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0040R3_parallel_memory_algorithms/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <execution>\r\n#include <memory>\r\n#include <numeric>\r\n#include <vector>\r\n\r\n#include <parallel_algorithms_utilities.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::execution;\r\n\r\nclass wrap_uchar {\r\nprivate:\r\n    unsigned char ch_ = 42;\r\n\r\npublic:\r\n    bool is_expected() const noexcept {\r\n        return ch_ == 42;\r\n    }\r\n};\r\n\r\nstatic_assert(sizeof(wrap_uchar) == 1);\r\n\r\nconst auto expectation = [](const wrap_uchar& x) { return x.is_expected(); };\r\n\r\nconst auto expectation_zero = [](int n) { return n == 0; };\r\n\r\nconstexpr auto bad_uchar = static_cast<unsigned char>(0xcd);\r\nconstexpr auto bad_int   = static_cast<int>(0xdeadbeef);\r\n\r\nstruct resetting_guard {\r\n    int* ptr_ = nullptr;\r\n\r\n    resetting_guard() = default;\r\n\r\n    ~resetting_guard() {\r\n        if (ptr_) {\r\n            *ptr_ = 0;\r\n        }\r\n    }\r\n\r\n    resetting_guard(const resetting_guard&)            = delete;\r\n    resetting_guard& operator=(const resetting_guard&) = delete;\r\n};\r\n\r\ntemplate <class T>\r\nstruct deallocating_only_deleter {\r\n    size_t count_ = 0;\r\n\r\n    void operator()(T* ptr) const noexcept {\r\n        allocator<T>{}.deallocate(ptr, count_);\r\n    }\r\n};\r\n\r\ntemplate <class T>\r\nunique_ptr<T, deallocating_only_deleter<T>> make_constructed_nondestroying_buffer(size_t n) {\r\n    if (n == 0) {\r\n        return unique_ptr<T, deallocating_only_deleter<T>>{};\r\n    }\r\n\r\n    allocator<T> al;\r\n    unique_ptr<T, deallocating_only_deleter<T>> up{al.allocate(n), deallocating_only_deleter<T>{n}};\r\n    for (size_t i = 0; i != n; ++i) {\r\n        allocator_traits<allocator<T>>::construct(al, up.get() + i);\r\n    }\r\n\r\n    return up;\r\n}\r\n\r\ntemplate <class T>\r\nunique_ptr<T, deallocating_only_deleter<T>> make_unconstructed_nondestroying_buffer(size_t n) {\r\n    if (n == 0) {\r\n        return unique_ptr<T, deallocating_only_deleter<T>>{};\r\n    } else {\r\n        return unique_ptr<T, deallocating_only_deleter<T>>{allocator<T>{}.allocate(n), deallocating_only_deleter<T>{n}};\r\n    }\r\n}\r\n\r\nstruct test_case_uninitialized_default_construct_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer         = make_unique<unsigned char[]>(testSize);\r\n        const auto begin_it = reinterpret_cast<wrap_uchar*>(buffer.get());\r\n        const auto end_it   = begin_it + testSize;\r\n\r\n        fill_n(buffer.get(), testSize, bad_uchar);\r\n\r\n        uninitialized_default_construct(exec, begin_it, end_it);\r\n        assert(all_of(begin_it, end_it, expectation));\r\n    }\r\n};\r\n\r\nstruct test_case_uninitialized_default_construct_n_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer         = make_unique<unsigned char[]>(testSize);\r\n        const auto begin_it = reinterpret_cast<wrap_uchar*>(buffer.get());\r\n        const auto end_it   = begin_it + testSize;\r\n\r\n        fill_n(buffer.get(), testSize, bad_uchar);\r\n\r\n        const auto result_it = uninitialized_default_construct_n(exec, begin_it, testSize);\r\n        assert(all_of(begin_it, end_it, expectation));\r\n        assert(end_it == result_it);\r\n    }\r\n};\r\n\r\nstruct test_case_uninitialized_default_construct_trivial_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer         = make_unconstructed_nondestroying_buffer<unsigned char>(testSize);\r\n        const auto begin_it = buffer.get();\r\n        const auto end_it   = begin_it + testSize;\r\n\r\n        uninitialized_default_construct(exec, begin_it, end_it);\r\n    }\r\n};\r\n\r\nstruct test_case_uninitialized_default_construct_n_trivial_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer         = make_unconstructed_nondestroying_buffer<unsigned char>(testSize);\r\n        const auto begin_it = buffer.get();\r\n        const auto end_it   = begin_it + testSize;\r\n\r\n        const auto result_it = uninitialized_default_construct_n(exec, begin_it, testSize);\r\n        assert(end_it == result_it);\r\n    }\r\n};\r\n\r\nstruct test_case_uninitialized_value_construct_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer         = make_unique<unsigned char[]>(testSize);\r\n        const auto begin_it = reinterpret_cast<wrap_uchar*>(buffer.get());\r\n        const auto end_it   = begin_it + testSize;\r\n\r\n        fill_n(buffer.get(), testSize, bad_uchar);\r\n\r\n        uninitialized_value_construct(exec, begin_it, end_it);\r\n        assert(all_of(begin_it, end_it, expectation));\r\n    }\r\n};\r\n\r\nstruct test_case_uninitialized_value_construct_n_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer         = make_unique<unsigned char[]>(testSize);\r\n        const auto begin_it = reinterpret_cast<wrap_uchar*>(buffer.get());\r\n        const auto end_it   = begin_it + testSize;\r\n\r\n        fill_n(buffer.get(), testSize, bad_uchar);\r\n\r\n        const auto result_it = uninitialized_value_construct_n(exec, begin_it, testSize);\r\n        assert(all_of(begin_it, end_it, expectation));\r\n        assert(end_it == result_it);\r\n    }\r\n};\r\n\r\nstruct test_case_uninitialized_value_construct_memset_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer         = make_unique<int[]>(testSize);\r\n        const auto begin_it = buffer.get();\r\n        const auto end_it   = begin_it + testSize;\r\n\r\n        fill_n(begin_it, testSize, bad_int);\r\n\r\n        uninitialized_value_construct(exec, begin_it, end_it);\r\n        assert(all_of(begin_it, end_it, expectation_zero));\r\n    }\r\n};\r\n\r\nstruct test_case_uninitialized_value_construct_n_memset_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer         = make_unique<int[]>(testSize);\r\n        const auto begin_it = buffer.get();\r\n        const auto end_it   = begin_it + testSize;\r\n\r\n        fill_n(begin_it, testSize, bad_int);\r\n\r\n        const auto result_it = uninitialized_value_construct_n(exec, begin_it, testSize);\r\n        assert(all_of(begin_it, end_it, expectation_zero));\r\n        assert(end_it == result_it);\r\n    }\r\n};\r\n\r\nstruct test_case_uninitialized_value_construct_unwrap_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto vec            = vector<int>(testSize, bad_int);\r\n        const auto begin_it = vec.begin();\r\n        const auto end_it   = vec.end();\r\n\r\n        uninitialized_value_construct(exec, begin_it, end_it);\r\n        assert(all_of(begin_it, end_it, expectation_zero));\r\n    }\r\n};\r\n\r\nstruct test_case_uninitialized_value_construct_n_unwrap_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto vec            = vector<int>(testSize, bad_int);\r\n        const auto begin_it = vec.begin();\r\n        const auto end_it   = vec.end();\r\n\r\n        const auto result_it = uninitialized_value_construct_n(exec, begin_it, testSize);\r\n        assert(all_of(begin_it, end_it, expectation_zero));\r\n        assert(end_it == result_it);\r\n    }\r\n};\r\n\r\nstruct test_case_destroy_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer         = make_unique<unsigned char[]>(testSize);\r\n        const auto begin_it = reinterpret_cast<wrap_uchar*>(buffer.get());\r\n        const auto end_it   = begin_it + testSize;\r\n\r\n        fill_n(buffer.get(), testSize, bad_uchar);\r\n\r\n        uninitialized_default_construct(exec, begin_it, end_it);\r\n        destroy(exec, begin_it, end_it);\r\n    }\r\n};\r\n\r\nstruct test_case_destroy_n_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer         = make_unique<unsigned char[]>(testSize);\r\n        const auto begin_it = reinterpret_cast<wrap_uchar*>(buffer.get());\r\n        const auto end_it   = begin_it + testSize;\r\n\r\n        fill_n(buffer.get(), testSize, bad_uchar);\r\n\r\n        uninitialized_default_construct_n(begin_it, testSize);\r\n        const auto result_it = destroy_n(exec, begin_it, testSize);\r\n        assert(end_it == result_it);\r\n    }\r\n};\r\n\r\nstruct test_case_destroy_nontrivial_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer_to_destroy = make_constructed_nondestroying_buffer<resetting_guard>(testSize);\r\n        const auto begin_it    = buffer_to_destroy.get();\r\n        const auto end_it      = begin_it + testSize;\r\n\r\n        auto buffer_to_clear           = make_unique<int[]>(testSize);\r\n        const auto begin_it_validation = buffer_to_clear.get();\r\n        const auto end_it_validation   = begin_it_validation + testSize;\r\n\r\n        fill(begin_it_validation, end_it_validation, bad_int);\r\n        auto it_guard = begin_it;\r\n        for (auto it_int = begin_it_validation; it_int != end_it_validation; ++it_int) {\r\n            it_guard->ptr_ = it_int;\r\n            ++it_guard;\r\n        }\r\n\r\n        destroy(exec, begin_it, end_it);\r\n        assert(all_of(begin_it_validation, end_it_validation, expectation_zero));\r\n    }\r\n};\r\n\r\nstruct test_case_destroy_n_nontrivial_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer_to_destroy = make_constructed_nondestroying_buffer<resetting_guard>(testSize);\r\n        const auto begin_it    = buffer_to_destroy.get();\r\n        const auto end_it      = begin_it + testSize;\r\n\r\n        auto buffer_to_clear           = make_unique<int[]>(testSize);\r\n        const auto begin_it_validation = buffer_to_clear.get();\r\n        const auto end_it_validation   = begin_it_validation + testSize;\r\n\r\n        fill_n(begin_it_validation, testSize, bad_int);\r\n        auto it_guard = begin_it;\r\n        for (auto it_int = begin_it_validation; it_int != end_it_validation; ++it_int) {\r\n            it_guard->ptr_ = it_int;\r\n            ++it_guard;\r\n        }\r\n\r\n        const auto result_it = destroy_n(exec, begin_it, testSize);\r\n        assert(end_it == result_it);\r\n        assert(all_of(begin_it_validation, end_it_validation, expectation_zero));\r\n    }\r\n};\r\n\r\nstruct test_case_uninitialized_copy_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer         = make_unique<int[]>(testSize);\r\n        auto buffer2        = make_unique<int[]>(testSize);\r\n        const auto begin_it = buffer.get();\r\n        const auto end_it   = begin_it + testSize;\r\n\r\n        fill_n(buffer2.get(), testSize, bad_int);\r\n        iota(begin_it, end_it, 42);\r\n\r\n        const auto begin_it2 = buffer2.get();\r\n        const auto end_it2   = begin_it2 + testSize;\r\n\r\n        uninitialized_copy(exec, begin_it, end_it, begin_it2);\r\n        assert(equal(begin_it, end_it, begin_it2, end_it2));\r\n    }\r\n};\r\n\r\nstruct test_case_uninitialized_copy_n_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer         = make_unique<int[]>(testSize);\r\n        auto buffer2        = make_unique<int[]>(testSize);\r\n        const auto begin_it = buffer.get();\r\n        const auto end_it   = begin_it + testSize;\r\n\r\n        fill_n(buffer2.get(), testSize, bad_int);\r\n        iota(begin_it, end_it, 42);\r\n\r\n        const auto begin_it2 = buffer2.get();\r\n        const auto end_it2   = begin_it2 + testSize;\r\n\r\n        const auto result_it = uninitialized_copy_n(exec, begin_it, testSize, begin_it2);\r\n        assert(equal(begin_it, end_it, begin_it2, end_it2));\r\n        assert(end_it2 == result_it);\r\n    }\r\n};\r\n\r\nstruct test_case_uninitialized_move_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer         = make_unique<int[]>(testSize);\r\n        auto buffer2        = make_unique<int[]>(testSize);\r\n        const auto begin_it = buffer.get();\r\n        const auto end_it   = begin_it + testSize;\r\n\r\n        fill_n(buffer2.get(), testSize, bad_int);\r\n        iota(begin_it, end_it, 42);\r\n\r\n        const auto begin_it2 = buffer2.get();\r\n        const auto end_it2   = begin_it2 + testSize;\r\n\r\n        uninitialized_move(exec, begin_it, end_it, begin_it2);\r\n        assert(equal(begin_it, end_it, begin_it2, end_it2));\r\n    }\r\n};\r\n\r\nstruct test_case_uninitialized_move_n_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer         = make_unique<int[]>(testSize);\r\n        auto buffer2        = make_unique<int[]>(testSize);\r\n        const auto begin_it = buffer.get();\r\n        const auto end_it   = begin_it + testSize;\r\n\r\n        fill_n(buffer2.get(), testSize, bad_int);\r\n        iota(begin_it, end_it, 42);\r\n\r\n        const auto begin_it2 = buffer2.get();\r\n        const auto end_it2   = begin_it2 + testSize;\r\n\r\n        const auto result_pair = uninitialized_move_n(exec, begin_it, testSize, begin_it2);\r\n        assert(equal(begin_it, end_it, begin_it2, end_it2));\r\n        assert(end_it == result_pair.first && end_it2 == result_pair.second);\r\n    }\r\n};\r\n\r\nstruct test_case_uninitialized_fill_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer         = make_unique<int[]>(testSize);\r\n        const auto begin_it = buffer.get();\r\n        const auto end_it   = begin_it + testSize;\r\n\r\n        fill(begin_it, end_it, bad_int);\r\n\r\n        uninitialized_fill(exec, begin_it, end_it, 42);\r\n        assert(all_of(begin_it, end_it, [](int n) { return n == 42; }));\r\n    }\r\n};\r\n\r\nstruct test_case_uninitialized_fill_n_parallel {\r\n    template <class ExecutionPolicy>\r\n    void operator()(const size_t testSize, const ExecutionPolicy& exec) {\r\n        auto buffer         = make_unique<int[]>(testSize);\r\n        const auto begin_it = buffer.get();\r\n        const auto end_it   = begin_it + testSize;\r\n\r\n        fill_n(begin_it, testSize, bad_int);\r\n\r\n        const auto result_it = uninitialized_fill_n(exec, begin_it, testSize, 42);\r\n        assert(all_of(begin_it, end_it, [](int n) { return n == 42; }));\r\n        assert(end_it == result_it);\r\n    }\r\n};\r\n\r\nint main() {\r\n    parallel_test_case(test_case_uninitialized_default_construct_parallel{}, par);\r\n    parallel_test_case(test_case_uninitialized_default_construct_n_parallel{}, par);\r\n    parallel_test_case(test_case_uninitialized_default_construct_trivial_parallel{}, par);\r\n    parallel_test_case(test_case_uninitialized_default_construct_n_trivial_parallel{}, par);\r\n    parallel_test_case(test_case_uninitialized_value_construct_parallel{}, par);\r\n    parallel_test_case(test_case_uninitialized_value_construct_n_parallel{}, par);\r\n    parallel_test_case(test_case_uninitialized_value_construct_memset_parallel{}, par);\r\n    parallel_test_case(test_case_uninitialized_value_construct_n_memset_parallel{}, par);\r\n    parallel_test_case(test_case_uninitialized_value_construct_unwrap_parallel{}, par);\r\n    parallel_test_case(test_case_uninitialized_value_construct_n_unwrap_parallel{}, par);\r\n    parallel_test_case(test_case_destroy_parallel{}, par);\r\n    parallel_test_case(test_case_destroy_n_parallel{}, par);\r\n    parallel_test_case(test_case_destroy_nontrivial_parallel{}, par);\r\n    parallel_test_case(test_case_destroy_n_nontrivial_parallel{}, par);\r\n\r\n    // currently not parallelized\r\n    parallel_test_case(test_case_uninitialized_copy_parallel{}, par);\r\n    parallel_test_case(test_case_uninitialized_copy_n_parallel{}, par);\r\n    parallel_test_case(test_case_uninitialized_move_parallel{}, par);\r\n    parallel_test_case(test_case_uninitialized_move_n_parallel{}, par);\r\n    parallel_test_case(test_case_uninitialized_fill_parallel{}, par);\r\n    parallel_test_case(test_case_uninitialized_fill_n_parallel{}, par);\r\n#if _HAS_CXX20\r\n    parallel_test_case(test_case_uninitialized_default_construct_parallel{}, unseq);\r\n    parallel_test_case(test_case_uninitialized_default_construct_n_parallel{}, unseq);\r\n    parallel_test_case(test_case_uninitialized_default_construct_trivial_parallel{}, unseq);\r\n    parallel_test_case(test_case_uninitialized_default_construct_n_trivial_parallel{}, unseq);\r\n    parallel_test_case(test_case_uninitialized_value_construct_parallel{}, unseq);\r\n    parallel_test_case(test_case_uninitialized_value_construct_n_parallel{}, unseq);\r\n    parallel_test_case(test_case_uninitialized_value_construct_memset_parallel{}, unseq);\r\n    parallel_test_case(test_case_uninitialized_value_construct_n_memset_parallel{}, unseq);\r\n    parallel_test_case(test_case_uninitialized_value_construct_unwrap_parallel{}, unseq);\r\n    parallel_test_case(test_case_uninitialized_value_construct_n_unwrap_parallel{}, unseq);\r\n    parallel_test_case(test_case_destroy_parallel{}, unseq);\r\n    parallel_test_case(test_case_destroy_n_parallel{}, unseq);\r\n    parallel_test_case(test_case_destroy_nontrivial_parallel{}, unseq);\r\n    parallel_test_case(test_case_destroy_n_nontrivial_parallel{}, unseq);\r\n\r\n    // currently not parallelized\r\n    parallel_test_case(test_case_uninitialized_copy_parallel{}, unseq);\r\n    parallel_test_case(test_case_uninitialized_copy_n_parallel{}, unseq);\r\n    parallel_test_case(test_case_uninitialized_move_parallel{}, unseq);\r\n    parallel_test_case(test_case_uninitialized_move_n_parallel{}, unseq);\r\n    parallel_test_case(test_case_uninitialized_fill_parallel{}, unseq);\r\n    parallel_test_case(test_case_uninitialized_fill_n_parallel{}, unseq);\r\n#endif // _HAS_CXX20\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0053R7_cpp_synchronized_buffered_ostream/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0053R7_cpp_synchronized_buffered_ostream/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include \"test.hpp\"\r\n\r\nusing namespace std;\r\n\r\nstatic_assert(is_default_constructible_v<syncbuf>);\r\nstatic_assert(is_constructible_v<syncbuf, syncbuf::streambuf_type*>);\r\nstatic_assert(is_constructible_v<syncbuf, syncbuf::streambuf_type*, syncbuf::allocator_type>);\r\nstatic_assert(is_move_constructible_v<syncbuf>);\r\nstatic_assert(is_move_assignable_v<syncbuf>);\r\nstatic_assert(is_swappable_v<syncbuf>);\r\nstatic_assert(is_destructible_v<syncbuf>);\r\n\r\ntemplate <class Elem, class Traits, class Alloc>\r\nclass test_syncbuf : public basic_syncbuf<Elem, Traits, Alloc> {\r\npublic:\r\n    using size_type      = Alloc::size_type;\r\n    using value_type     = Alloc::value_type;\r\n    using Mybase         = basic_syncbuf<Elem, Traits, Alloc>;\r\n    using streambuf_type = Mybase::streambuf_type;\r\n\r\n    using Mybase::epptr;\r\n    using Mybase::pbase;\r\n    using Mybase::pptr;\r\n\r\n    test_syncbuf() = default;\r\n\r\n    explicit test_syncbuf(streambuf_type* strbuf) : Mybase(strbuf) {}\r\n\r\n    test_syncbuf(streambuf_type* strbuf, const Alloc& al) : Mybase(strbuf, al) {}\r\n\r\n    test_syncbuf(test_syncbuf&&)            = default;\r\n    test_syncbuf& operator=(test_syncbuf&&) = default;\r\n    ~test_syncbuf()                         = default;\r\n\r\n    auto Test_get_buffer_size() const noexcept {\r\n        return static_cast<size_type>(epptr() - pbase());\r\n    }\r\n    auto Test_get_data_size() const noexcept {\r\n        return static_cast<size_type>(pptr() - pbase());\r\n    }\r\n\r\n    test_syncbuf(const test_syncbuf&)            = delete;\r\n    test_syncbuf& operator=(const test_syncbuf&) = delete;\r\n};\r\n\r\ntemplate <class Alloc>\r\nvoid test_syncbuf_member_functions(string_buffer<typename Alloc::value_type>* buf = nullptr) {\r\n\r\n    using value_type = Alloc::value_type;\r\n    using Syncbuf    = test_syncbuf<value_type, char_traits<value_type>, Alloc>;\r\n    using OStream    = basic_ostream<value_type, char_traits<value_type>>;\r\n\r\n    Alloc alloc{};\r\n\r\n    Syncbuf aSyncbuf{buf, alloc};\r\n\r\n    // test construction post-conditions\r\n    assert(aSyncbuf.get_wrapped() == buf);\r\n    assert(aSyncbuf.get_allocator() == alloc);\r\n    assert(aSyncbuf.Test_get_data_size() == 0);\r\n    assert(aSyncbuf.Test_get_buffer_size() == Min_syncbuf_size);\r\n\r\n    // check emit post-conditions with no input\r\n    if (buf) {\r\n        assert(aSyncbuf.emit() == true);\r\n    } else {\r\n        assert(aSyncbuf.emit() == false);\r\n    }\r\n\r\n    OStream os{&aSyncbuf};\r\n\r\n    os << \"A small string\\n\";\r\n    assert(aSyncbuf.Test_get_data_size() == 15);\r\n    if (buf) {\r\n        assert(aSyncbuf.emit() == true);\r\n        assert(buf->str == \"A small string\\n\");\r\n        buf->str.clear();\r\n    } else {\r\n        assert(os.rdstate() == ios::goodbit);\r\n        assert(aSyncbuf.emit() == false);\r\n    }\r\n\r\n    os << \"A string holds more than 32 characters\"; // requires one re-allocation\r\n    if (buf) {\r\n        assert(aSyncbuf.Test_get_data_size() == 38);\r\n        assert(aSyncbuf.emit() == true);\r\n        assert(buf->str == \"A string holds more than 32 characters\");\r\n        buf->str.clear();\r\n    } else {\r\n        assert(aSyncbuf.Test_get_data_size() == Min_syncbuf_size); // if _Wrapped is nullptr, re-allocation will not\r\n                                                                   // occur and will return a _Traits::eof bit\r\n        assert(os.rdstate() == ios::badbit);\r\n        os.setstate(ios::goodbit);\r\n        assert(aSyncbuf.emit() == false);\r\n    }\r\n\r\n    os << \"A string that will definitely overflow the small_size_allocator\"; // requires more than one re-allocation\r\n    if (buf) {\r\n        if constexpr (is_base_of_v<small_size_allocation, Alloc>) { // fail to allocate enough memory\r\n            assert(aSyncbuf.Test_get_data_size() == Min_size_allocation);\r\n            assert(os.rdstate() == ios::badbit);\r\n            os.setstate(ios::goodbit);\r\n            assert(aSyncbuf.emit() == true);\r\n            assert(buf->str == \"A string that will definitely overflow the small_s\");\r\n        } else {\r\n            assert(aSyncbuf.Test_get_data_size() == 63);\r\n            assert(os.rdstate() == ios::goodbit);\r\n            assert(aSyncbuf.emit() == true);\r\n            assert(buf->str == \"A string that will definitely overflow the small_size_allocator\");\r\n        }\r\n        buf->str.clear();\r\n    } else {\r\n        assert(aSyncbuf.Test_get_data_size() == Min_syncbuf_size);\r\n        assert(os.rdstate() == ios::badbit);\r\n        os.setstate(ios::goodbit);\r\n        assert(aSyncbuf.emit() == false);\r\n    }\r\n}\r\n\r\ntemplate <class Alloc, bool ThrowOnSync = false>\r\nvoid test_syncbuf_synchronization(string_buffer<typename Alloc::value_type, ThrowOnSync>* buf) {\r\n    assert(buf); // meaningless to run with nullptr\r\n\r\n    using value_type = Alloc::value_type;\r\n    using Syncbuf    = test_syncbuf<value_type, char_traits<value_type>, Alloc>;\r\n    using OStream    = basic_ostream<value_type, char_traits<value_type>>;\r\n\r\n    {\r\n        Syncbuf buf1{buf};\r\n        OStream os1{&buf1};\r\n        os1 << \"Last element \";\r\n        {\r\n            Syncbuf buf2{buf};\r\n            buf2.set_emit_on_sync(false);\r\n            OStream os2{&buf2};\r\n            os2 << \"Second element \";\r\n            int syncResult = buf2.pubsync(); // trigger a sync\r\n            assert(syncResult == 0);\r\n            {\r\n                Syncbuf buf3{buf};\r\n                OStream{&buf3} << \"First element to be presented!\\n\";\r\n            }\r\n            os2 << \"to be presented!\\n\";\r\n        }\r\n        os1 << \"to be presented!\\n\";\r\n    }\r\n    assert(\r\n        buf->str == \"First element to be presented!\\nSecond element to be presented!\\nLast element to be presented!\\n\");\r\n    buf->str.clear();\r\n    {\r\n        Syncbuf buf1{buf};\r\n        OStream os1{&buf1};\r\n        os1 << \"Last element \";\r\n        {\r\n            Syncbuf buf2{buf};\r\n            buf2.set_emit_on_sync(true);\r\n            OStream os2{&buf2};\r\n            os2 << \"First element to be emitted by sync!\\n\";\r\n            int syncResult = buf2.pubsync(); // trigger a sync\r\n            if constexpr (ThrowOnSync) {\r\n                assert(syncResult == -1);\r\n            } else {\r\n                assert(syncResult == 0);\r\n            }\r\n            {\r\n                Syncbuf buf3{buf};\r\n                OStream{&buf3} << \"Second element to be presented!\\n\";\r\n            }\r\n            os2 << \"Third element to be presented!\\n\";\r\n        }\r\n        os1 << \"to be presented!\\n\";\r\n    }\r\n    assert(buf->str\r\n           == \"First element to be emitted by sync!\\nSecond element to be presented!\\nThird element to be \"\r\n              \"presented!\\nLast element to be presented!\\n\");\r\n    buf->str.clear();\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_syncbuf_move_swap_operations(string_buffer<typename Alloc::value_type>* buf) {\r\n\r\n    using value_type = Alloc::value_type;\r\n    using Syncbuf    = test_syncbuf<value_type, char_traits<value_type>, Alloc>;\r\n    using OStream    = basic_ostream<value_type, char_traits<value_type>>;\r\n\r\n    { // test move constructor\r\n        Syncbuf buf1{buf};\r\n        OStream(&buf1) << \"Some input\";\r\n        auto buf1WrappedObject = buf1.get_wrapped();\r\n        auto buf1BufferSize    = buf1.Test_get_buffer_size();\r\n        auto buf1DataSize      = buf1.Test_get_data_size();\r\n        Syncbuf buf2{move(buf1)};\r\n        assert(buf->str == \"\");\r\n\r\n        // move constructor post-conditions\r\n        assert(buf2.get_wrapped() == buf1WrappedObject);\r\n        assert(buf2.Test_get_buffer_size() == buf1BufferSize);\r\n        assert(buf2.Test_get_data_size() == buf1DataSize);\r\n        assert(buf1.get_wrapped() == nullptr);\r\n        assert(buf1.pbase() == buf1.pptr());\r\n        assert(buf1.Test_get_buffer_size() == 0);\r\n        assert(buf1.Test_get_data_size() == 0);\r\n    }\r\n    assert(buf->str == \"Some input\");\r\n    buf->str.clear();\r\n    { // test move assignment\r\n        Syncbuf buf1{buf};\r\n        OStream{&buf1} << \"Some input\";\r\n        Syncbuf buf2{nullptr};\r\n        auto buf1WrappedObject = buf1.get_wrapped();\r\n        auto buf1BufferSize    = buf1.Test_get_buffer_size();\r\n        auto buf1DataSize      = buf1.Test_get_data_size();\r\n        buf2                   = move(buf1);\r\n\r\n        // move assignment post-conditions\r\n        assert(buf2.get_wrapped() == buf1WrappedObject);\r\n        assert(buf2.Test_get_buffer_size() == buf1BufferSize);\r\n        assert(buf2.Test_get_data_size() == buf1DataSize);\r\n        assert(buf1.get_wrapped() == nullptr);\r\n        assert(buf1.Test_get_buffer_size() == 0);\r\n        assert(buf1.Test_get_data_size() == 0);\r\n\r\n        if constexpr (allocator_traits<Alloc>::propagate_on_container_move_assignment::value\r\n                      && allocator_traits<Alloc>::is_always_equal::value) {\r\n            assert(buf1.get_allocator() == buf2.get_allocator());\r\n        } else if constexpr (allocator_traits<Alloc>::is_always_equal::value) {\r\n            assert(buf1.get_allocator() == buf2.get_allocator());\r\n        } else {\r\n            assert(buf1.get_allocator() != buf2.get_allocator());\r\n        }\r\n    }\r\n    assert(buf->str == \"Some input\");\r\n    buf->str.clear();\r\n    { // test swap\r\n        Syncbuf buf1{buf};\r\n        OStream{&buf1} << \"Some input that requires re-allocation\";\r\n        Syncbuf buf2{nullptr};\r\n        auto buf1WrappedObject = buf1.get_wrapped();\r\n        auto buf1BufferSize    = buf1.Test_get_buffer_size();\r\n        auto buf1DataSize      = buf1.Test_get_data_size();\r\n        auto buf2WrappedObject = buf2.get_wrapped();\r\n        auto buf2BufferSize    = buf2.Test_get_buffer_size();\r\n        auto buf2DataSize      = buf2.Test_get_data_size();\r\n        if constexpr (allocator_traits<Alloc>::propagate_on_container_swap::value\r\n                      || allocator_traits<Alloc>::is_always_equal::value) {\r\n            buf1.swap(buf2);\r\n            assert(buf2.get_wrapped() == buf1WrappedObject);\r\n            assert(buf2.Test_get_buffer_size() == buf1BufferSize);\r\n            assert(buf2.Test_get_data_size() == buf1DataSize);\r\n            assert(buf1.get_wrapped() == buf2WrappedObject);\r\n            assert(buf1.Test_get_buffer_size() == buf2BufferSize);\r\n            assert(buf1.Test_get_data_size() == buf2DataSize);\r\n        }\r\n    }\r\n    assert(buf->str == \"Some input that requires re-allocation\");\r\n    buf->str.clear();\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_osyncstream(string_buffer<typename Alloc::value_type>* buf = nullptr) {\r\n    using value_type  = Alloc::value_type;\r\n    using OSyncStream = basic_osyncstream<value_type, char_traits<value_type>, Alloc>;\r\n\r\n    {\r\n        OSyncStream oss{buf};\r\n\r\n        // test construction post-conditions\r\n        assert(oss.get_wrapped() == buf);\r\n        assert(oss.rdbuf()->get_wrapped() == buf);\r\n\r\n        oss.emit();\r\n        assert(oss.rdstate() == (buf ? ios::goodbit : ios::badbit));\r\n\r\n        oss << \"A small string\\n\";\r\n        oss.emit();\r\n        assert(oss.rdstate() == (buf ? ios::goodbit : ios::badbit));\r\n        if (buf) {\r\n            assert(buf->str == \"A small string\\n\");\r\n            buf->str.clear();\r\n        }\r\n\r\n        oss << \"A string holds more than 32 characters\"; // requires one re-allocation\r\n        oss.emit();\r\n        assert(oss.rdstate() == (buf ? ios::goodbit : ios::badbit));\r\n        if (buf) {\r\n            assert(buf->str == \"A string holds more than 32 characters\");\r\n            buf->str.clear();\r\n        }\r\n\r\n        oss << \"A string that will definitely overflow the small_size_allocator\"; // requires more than one\r\n                                                                                  // re-allocation\r\n        if constexpr (is_base_of_v<small_size_allocation, Alloc>) { // fail to allocate enough memory\r\n            assert(oss.rdstate() == ios::badbit);\r\n            oss.clear();\r\n            oss.emit();\r\n            assert(oss.rdstate() == (buf ? ios::goodbit : ios::badbit));\r\n            assert(buf ? buf->str == \"A string that will definitely overflow the small_s\" : true);\r\n        } else {\r\n            assert(oss.rdstate() == (buf ? ios::goodbit : ios::badbit));\r\n            oss.emit();\r\n            assert(oss.rdstate() == (buf ? ios::goodbit : ios::badbit));\r\n            assert(buf ? buf->str == \"A string that will definitely overflow the small_size_allocator\" : true);\r\n        }\r\n    }\r\n    if (buf) {\r\n        buf->str.clear();\r\n    }\r\n\r\n    { // move construction\r\n        OSyncStream oss{buf};\r\n        oss << \"Some input\";\r\n        auto ossWrapped = oss.get_wrapped();\r\n        OSyncStream oss1{move(oss)};\r\n\r\n        assert(oss1.get_wrapped() == ossWrapped);\r\n        assert(oss.get_wrapped() == nullptr);\r\n    }\r\n    if (buf) {\r\n        assert(buf->str == \"Some input\");\r\n        buf->str.clear();\r\n    }\r\n\r\n    {\r\n        OSyncStream oss{buf};\r\n        oss << \"Some input\";\r\n        auto ossWrapped = oss.get_wrapped();\r\n\r\n        OSyncStream oss1{buf};\r\n        oss1 << \"An input to emit first\\n\";\r\n\r\n        oss1 = move(oss);\r\n\r\n        assert(oss1.get_wrapped() == ossWrapped);\r\n        assert(oss.get_wrapped() == nullptr);\r\n        if (buf) {\r\n            assert(buf->str == \"An input to emit first\\n\");\r\n            buf->str.clear();\r\n        }\r\n    }\r\n    if (buf) {\r\n        assert(buf->str == \"Some input\");\r\n        buf->str.clear();\r\n    }\r\n\r\n    { // test synchronization\r\n        OSyncStream oss(buf);\r\n        oss << \"Last \";\r\n        {\r\n            OSyncStream(oss.get_wrapped()) << \"First Input!\\n\";\r\n        }\r\n        oss << \"Input!\" << '\\n';\r\n    }\r\n    if (buf) {\r\n        assert(buf->str == \"First Input!\\nLast Input!\\n\");\r\n        buf->str.clear();\r\n    }\r\n}\r\n\r\nint main() {\r\n    string_buffer<char> char_buffer{};\r\n    string_buffer<char, true> no_sync_char_buffer{};\r\n\r\n    // Testing basic_syncbuf\r\n    test_syncbuf_member_functions<allocator<char>>();\r\n    test_syncbuf_member_functions<small_size_allocator<char>>();\r\n\r\n    test_syncbuf_member_functions<small_size_allocator<char>>(&char_buffer);\r\n    test_syncbuf_member_functions<allocator<char>>(&char_buffer);\r\n\r\n    test_syncbuf_synchronization<allocator<char>>(&char_buffer);\r\n    test_syncbuf_synchronization<allocator<char>>(&no_sync_char_buffer);\r\n\r\n    test_syncbuf_move_swap_operations<allocator<char>>(&char_buffer);\r\n    test_syncbuf_move_swap_operations<non_move_assignable_non_equal_allocator<char>>(&char_buffer);\r\n    test_syncbuf_move_swap_operations<non_move_assignable_equal_allocator<char>>(&char_buffer);\r\n    test_syncbuf_move_swap_operations<non_swappable_equal_allocator<char>>(&char_buffer);\r\n\r\n    // Testing basic_osyncstream\r\n    test_osyncstream<allocator<char>>();\r\n    test_osyncstream<small_size_allocator<char>>();\r\n\r\n    test_osyncstream<allocator<char>>(&char_buffer);\r\n    test_osyncstream<small_size_allocator<char>>(&char_buffer);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0053R7_cpp_synchronized_buffered_ostream/test.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <ios>\r\n#include <memory>\r\n#include <streambuf>\r\n#include <string>\r\n#include <syncstream>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nconstexpr size_t Min_size_allocation = 50;\r\nconstexpr size_t Min_syncbuf_size    = 32;\r\n\r\ntemplate <class Ty, bool ThrowOnSync = false>\r\nclass string_buffer : public basic_streambuf<Ty, char_traits<Ty>> { // represents the wrapped object in syncbuf\r\npublic:\r\n    string_buffer()  = default;\r\n    ~string_buffer() = default;\r\n\r\n    streamsize xsputn(const Ty* ptr, streamsize n) override {\r\n        str.append(ptr, static_cast<string::size_type>(n));\r\n        return n;\r\n    }\r\n\r\n    int sync() override {\r\n        if constexpr (ThrowOnSync) {\r\n            return -1;\r\n        } else {\r\n            return 0;\r\n        }\r\n    }\r\n\r\n    string str;\r\n};\r\n\r\nclass small_size_allocation {\r\npublic:\r\n    using size_type = size_t;\r\n\r\n    [[nodiscard]] size_type max_size() const noexcept {\r\n        return Min_size_allocation;\r\n    }\r\n};\r\n\r\ntemplate <class Ty>\r\nclass allocator_base {\r\npublic:\r\n    using value_type = Ty;\r\n    using pointer    = Ty*;\r\n\r\n    [[nodiscard]] pointer allocate(const size_t n) {\r\n        return allocator<value_type>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(const pointer ptr, const size_t n) noexcept {\r\n        allocator<value_type>{}.deallocate(ptr, n);\r\n    }\r\n};\r\n\r\ntemplate <class Ty>\r\nclass small_size_allocator : public allocator_base<Ty>, public small_size_allocation {\r\npublic:\r\n    using propagate_on_container_move_assignment = true_type;\r\n    using propagate_on_container_swap            = true_type;\r\n\r\n    constexpr small_size_allocator() noexcept = default;\r\n\r\n    template <class Other>\r\n    constexpr small_size_allocator(const small_size_allocator<Other>&) noexcept {}\r\n};\r\n\r\ntemplate <class Ty, class Other>\r\n[[nodiscard]] bool operator==(const small_size_allocator<Ty>&, const small_size_allocator<Other>&) noexcept {\r\n    return true;\r\n}\r\n\r\nclass non_move_assignable_non_equal_allocator_id {\r\npublic:\r\n    non_move_assignable_non_equal_allocator_id() : id(id_gen++) {}\r\n    constexpr explicit non_move_assignable_non_equal_allocator_id(size_t _id) : id(_id) {}\r\n    ~non_move_assignable_non_equal_allocator_id() = default;\r\n\r\n    size_t id;\r\n\r\nprivate:\r\n    inline static size_t id_gen = 0;\r\n};\r\n\r\ntemplate <class Ty>\r\nclass non_move_assignable_non_equal_allocator : public non_move_assignable_non_equal_allocator_id,\r\n                                                public allocator_base<Ty> {\r\npublic:\r\n    using size_type                              = size_t;\r\n    using propagate_on_container_move_assignment = false_type;\r\n    using propagate_on_container_swap            = true_type;\r\n    using is_always_equal                        = false_type;\r\n\r\n    non_move_assignable_non_equal_allocator() noexcept = default;\r\n\r\n    template <class Other>\r\n    constexpr non_move_assignable_non_equal_allocator(\r\n        const non_move_assignable_non_equal_allocator<Other>& rhs) noexcept\r\n        : non_move_assignable_non_equal_allocator_id{rhs.id} {}\r\n};\r\n\r\ntemplate <class Ty, class Other>\r\n[[nodiscard]] bool operator==(const non_move_assignable_non_equal_allocator<Ty>& lhs,\r\n    const non_move_assignable_non_equal_allocator<Other>& rhs) noexcept {\r\n    return lhs.id == rhs.id;\r\n}\r\n\r\ntemplate <class Ty>\r\nclass non_move_assignable_equal_allocator : public allocator_base<Ty> {\r\npublic:\r\n    using size_type                              = size_t;\r\n    using propagate_on_container_move_assignment = false_type;\r\n    using propagate_on_container_swap            = true_type;\r\n\r\n    constexpr non_move_assignable_equal_allocator() noexcept = default;\r\n\r\n    template <class Other>\r\n    constexpr non_move_assignable_equal_allocator(const non_move_assignable_equal_allocator<Other>&) noexcept {}\r\n};\r\n\r\ntemplate <class Ty, class Other>\r\n[[nodiscard]] bool operator==(\r\n    const non_move_assignable_equal_allocator<Ty>&, const non_move_assignable_equal_allocator<Other>&) noexcept {\r\n    return true;\r\n}\r\n\r\ntemplate <class Ty>\r\nclass non_swappable_equal_allocator : public allocator_base<Ty> {\r\npublic:\r\n    using size_type                              = size_t;\r\n    using propagate_on_container_move_assignment = true_type;\r\n    using propagate_on_container_swap            = false_type;\r\n\r\n    constexpr non_swappable_equal_allocator() noexcept = default;\r\n\r\n    template <class Other>\r\n    constexpr non_swappable_equal_allocator(const non_swappable_equal_allocator<Other>&) noexcept {}\r\n};\r\n\r\ntemplate <class Ty, class Other>\r\n[[nodiscard]] bool operator==(\r\n    const non_swappable_equal_allocator<Ty>&, const non_swappable_equal_allocator<Other>&) noexcept {\r\n    return true;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/double_fixed_precision_to_chars_test_cases_1.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception AND BSL-1.0\r\n\r\n\r\n// Copyright 2018 Ulf Adams\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n// Boost Software License - Version 1.0 - August 17th, 2003\r\n\r\n// Permission is hereby granted, free of charge, to any person or organization\r\n// obtaining a copy of the software and accompanying documentation covered by\r\n// this license (the \"Software\") to use, reproduce, display, distribute,\r\n// execute, and transmit the Software, and to prepare derivative works of the\r\n// Software, and to permit third-parties to whom the Software is furnished to\r\n// do so, all subject to the following:\r\n\r\n// The copyright notices in the Software and this entire statement, including\r\n// the above license grant, this restriction and the following disclaimer,\r\n// must be included in all copies of the Software, in whole or in part, and\r\n// all derivative works of the Software, unless such copies or derivative\r\n// works are solely in the form of machine-executable object code generated by\r\n// a source language processor.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r\n// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r\n// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r\n// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\n// DEALINGS IN THE SOFTWARE.\r\n\r\n\r\n// This file contains test cases derived from:\r\n// https://github.com/ulfjack/ryu\r\n// See xcharconv_ryu.h for the exact commit.\r\n// (Keep the cgmanifest.json commitHash in sync.)\r\n\r\n\r\n#ifndef DOUBLE_FIXED_PRECISION_TO_CHARS_TEST_CASES_1_HPP\r\n#define DOUBLE_FIXED_PRECISION_TO_CHARS_TEST_CASES_1_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\ninline constexpr DoublePrecisionToCharsTestCase double_fixed_precision_to_chars_test_cases_1[] = {\r\n    // Test special cases (zero, inf, nan) and an ordinary case. Also test negative signs.\r\n    {0.0, chars_format::fixed, 4, \"0.0000\"},\r\n    {-0.0, chars_format::fixed, 4, \"-0.0000\"},\r\n    {double_inf, chars_format::fixed, 4, \"inf\"},\r\n    {-double_inf, chars_format::fixed, 4, \"-inf\"},\r\n    {double_nan, chars_format::fixed, 4, \"nan\"},\r\n    {-double_nan, chars_format::fixed, 4, \"-nan(ind)\"},\r\n    {double_nan_payload, chars_format::fixed, 4, \"nan\"},\r\n    {-double_nan_payload, chars_format::fixed, 4, \"-nan\"},\r\n    {1.729, chars_format::fixed, 4, \"1.7290\"},\r\n    {-1.729, chars_format::fixed, 4, \"-1.7290\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2fixedTest Basic\r\n    {0x1.000000001869fp+211, chars_format::fixed, 0,\r\n        \"3291009114715486435425664845573426149758869524108446525879746560\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2fixedTest Zero\r\n    {0.0, chars_format::fixed, 4, \"0.0000\"},\r\n    {0.0, chars_format::fixed, 3, \"0.000\"},\r\n    {0.0, chars_format::fixed, 2, \"0.00\"},\r\n    {0.0, chars_format::fixed, 1, \"0.0\"},\r\n    {0.0, chars_format::fixed, 0, \"0\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2fixedTest MinMax\r\n    {0x0.0000000000001p-1022, chars_format::fixed, 1074,\r\n        \"0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"000000000000000000000000000000000000000000000000000000049406564584124654417656879286822137\"\r\n        \"236505980261432476442558568250067550727020875186529983636163599237979656469544571773092665\"\r\n        \"671035593979639877479601078187812630071319031140452784581716784898210368871863605699873072\"\r\n        \"305000638740915356498438731247339727316961514003171538539807412623856559117102665855668676\"\r\n        \"818703956031062493194527159149245532930545654440112748012970999954193198940908041656332452\"\r\n        \"475714786901472678015935523861155013480352649347201937902681071074917033322268447533357208\"\r\n        \"324319360923828934583680601060115061698097530783422773183292479049825247307763759272478746\"\r\n        \"560847782037344696995336470179726777175851256605511991315048911014510378627381672509558373\"\r\n        \"89733598993664809941164205702637090279242767544565229087538682506419718265533447265625\"},\r\n\r\n    {0x1.fffffffffffffp+1023, chars_format::fixed, 0,\r\n        \"179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558\"\r\n        \"632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245\"\r\n        \"490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168\"\r\n        \"738177180919299881250404026184124858368\"},\r\n\r\n    // Test more corner cases.\r\n    {0x0.fffffffffffffp-1022, chars_format::fixed, 1074,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585\"\r\n        \"0720088902458687608585988765042311224095946549352480256244000922823569517877588880375915526423097809504343\"\r\n        \"1208587738715835729182199302029437922422355981982750124204178896957131179108226104397197960400045489739193\"\r\n        \"8079198936081525613113376149842043271751033627391549782731594143828136275113838604094249464942286316695429\"\r\n        \"1050802018159266421349966065178030950759130587198464239060686371020051087232827846788436319445158661350412\"\r\n        \"2347901479236958520832159762106637540161373658304419360371477835530668283453563400507407304013560296804637\"\r\n        \"5918583163124224521599262546494300836851861719422417646455137135420132217031370496583210154654068035397417\"\r\n        \"9060225895030235019375197730309457631732108525072993050897615825191597207572324554347709124613174935802817\"\r\n        \"34466552734375\"}, // max subnormal\r\n    {0x1p-1022, chars_format::fixed, 1022,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585\"\r\n        \"0720138309023271733240406421921598046233183055332741688720443481391819585428315901251102056406733973103581\"\r\n        \"1005152434161553460108856012385377718821130777993532002330479610147442583636071921565046942503734208375250\"\r\n        \"8066506166581589487204911799685916396485006359087701183048747997808877537499494515804516050509153998565824\"\r\n        \"7081864511353793580499211598108576605199243335211435239014879569960959128889160299264151106346631339366347\"\r\n        \"7586513029371762047325631781485664350872122828637642044846811407613911477062801689853244110024161447421618\"\r\n        \"5671661505401542850847167529019031613227788967297073731233340869889831750678388469260927739779728586596549\"\r\n        \"41091369095406136467568702398678315290680984617210924625396728515625\"}, // min normal\r\n\r\n    // Ryu Printf d2fixed_test.cc D2fixedTest RoundToEven\r\n    {0.125, chars_format::fixed, 3, \"0.125\"},\r\n    {0.125, chars_format::fixed, 2, \"0.12\"},\r\n    {0.375, chars_format::fixed, 3, \"0.375\"},\r\n    {0.375, chars_format::fixed, 2, \"0.38\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2fixedTest RoundToEvenInteger\r\n    {2.5, chars_format::fixed, 1, \"2.5\"},\r\n    {2.5, chars_format::fixed, 0, \"2\"},\r\n    {3.5, chars_format::fixed, 1, \"3.5\"},\r\n    {3.5, chars_format::fixed, 0, \"4\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2fixedTest NonRoundToEvenScenarios\r\n    {0.748046875, chars_format::fixed, 3, \"0.748\"},\r\n    {0.748046875, chars_format::fixed, 2, \"0.75\"},\r\n    {0.748046875, chars_format::fixed, 1, \"0.7\"}, // 0.75 would round to \"0.8\", but this is smaller\r\n\r\n    {0.2509765625, chars_format::fixed, 3, \"0.251\"},\r\n    {0.2509765625, chars_format::fixed, 2, \"0.25\"},\r\n    {0.2509765625, chars_format::fixed, 1, \"0.3\"}, // 0.25 would round to \"0.2\", but this is larger\r\n\r\n    {0x1.0000000000001p-2, chars_format::fixed, 54, \"0.250000000000000055511151231257827021181583404541015625\"},\r\n    {0x1.0000000000001p-2, chars_format::fixed, 3, \"0.250\"},\r\n    {0x1.0000000000001p-2, chars_format::fixed, 2, \"0.25\"},\r\n    {0x1.0000000000001p-2, chars_format::fixed, 1, \"0.3\"}, // 0.25 would round to \"0.2\", but this is larger (again)\r\n\r\n    // More rounding tests.\r\n    {9.5, chars_format::fixed, 1, \"9.5\"},\r\n    {9.5, chars_format::fixed, 0, \"10\"},\r\n    {10.5, chars_format::fixed, 1, \"10.5\"},\r\n    {10.5, chars_format::fixed, 0, \"10\"},\r\n\r\n    {1.241, chars_format::fixed, 3, \"1.241\"},\r\n    {1.241, chars_format::fixed, 1, \"1.2\"},\r\n    {1.251, chars_format::fixed, 3, \"1.251\"},\r\n    {1.251, chars_format::fixed, 1, \"1.3\"},\r\n    {1.261, chars_format::fixed, 3, \"1.261\"},\r\n    {1.261, chars_format::fixed, 1, \"1.3\"},\r\n    {1.341, chars_format::fixed, 3, \"1.341\"},\r\n    {1.341, chars_format::fixed, 1, \"1.3\"},\r\n    {1.351, chars_format::fixed, 3, \"1.351\"},\r\n    {1.351, chars_format::fixed, 1, \"1.4\"},\r\n    {1.361, chars_format::fixed, 3, \"1.361\"},\r\n    {1.361, chars_format::fixed, 1, \"1.4\"},\r\n\r\n    {2.41, chars_format::fixed, 2, \"2.41\"},\r\n    {2.41, chars_format::fixed, 0, \"2\"},\r\n    {2.51, chars_format::fixed, 2, \"2.51\"},\r\n    {2.51, chars_format::fixed, 0, \"3\"},\r\n    {2.61, chars_format::fixed, 2, \"2.61\"},\r\n    {2.61, chars_format::fixed, 0, \"3\"},\r\n    {3.41, chars_format::fixed, 2, \"3.41\"},\r\n    {3.41, chars_format::fixed, 0, \"3\"},\r\n    {3.51, chars_format::fixed, 2, \"3.51\"},\r\n    {3.51, chars_format::fixed, 0, \"4\"},\r\n    {3.61, chars_format::fixed, 2, \"3.61\"},\r\n    {3.61, chars_format::fixed, 0, \"4\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2fixedTest VaryingPrecision\r\n    {1729.142857142857, chars_format::fixed, 47, \"1729.14285714285711037518922239542007446289062500000\"},\r\n    {1729.142857142857, chars_format::fixed, 46, \"1729.1428571428571103751892223954200744628906250000\"},\r\n    {1729.142857142857, chars_format::fixed, 45, \"1729.142857142857110375189222395420074462890625000\"},\r\n    {1729.142857142857, chars_format::fixed, 44, \"1729.14285714285711037518922239542007446289062500\"},\r\n    {1729.142857142857, chars_format::fixed, 43, \"1729.1428571428571103751892223954200744628906250\"},\r\n    {1729.142857142857, chars_format::fixed, 42, \"1729.142857142857110375189222395420074462890625\"},\r\n    {1729.142857142857, chars_format::fixed, 41, \"1729.14285714285711037518922239542007446289062\"},\r\n    {1729.142857142857, chars_format::fixed, 40, \"1729.1428571428571103751892223954200744628906\"},\r\n    {1729.142857142857, chars_format::fixed, 39, \"1729.142857142857110375189222395420074462891\"},\r\n    {1729.142857142857, chars_format::fixed, 38, \"1729.14285714285711037518922239542007446289\"},\r\n    {1729.142857142857, chars_format::fixed, 37, \"1729.1428571428571103751892223954200744629\"},\r\n    {1729.142857142857, chars_format::fixed, 36, \"1729.142857142857110375189222395420074463\"},\r\n    {1729.142857142857, chars_format::fixed, 35, \"1729.14285714285711037518922239542007446\"},\r\n    {1729.142857142857, chars_format::fixed, 34, \"1729.1428571428571103751892223954200745\"},\r\n    {1729.142857142857, chars_format::fixed, 33, \"1729.142857142857110375189222395420074\"},\r\n    {1729.142857142857, chars_format::fixed, 32, \"1729.14285714285711037518922239542007\"},\r\n    {1729.142857142857, chars_format::fixed, 31, \"1729.1428571428571103751892223954201\"},\r\n    {1729.142857142857, chars_format::fixed, 30, \"1729.142857142857110375189222395420\"},\r\n    {1729.142857142857, chars_format::fixed, 29, \"1729.14285714285711037518922239542\"},\r\n    {1729.142857142857, chars_format::fixed, 28, \"1729.1428571428571103751892223954\"},\r\n    {1729.142857142857, chars_format::fixed, 27, \"1729.142857142857110375189222395\"},\r\n    {1729.142857142857, chars_format::fixed, 26, \"1729.14285714285711037518922240\"},\r\n    {1729.142857142857, chars_format::fixed, 25, \"1729.1428571428571103751892224\"},\r\n    {1729.142857142857, chars_format::fixed, 24, \"1729.142857142857110375189222\"},\r\n    {1729.142857142857, chars_format::fixed, 23, \"1729.14285714285711037518922\"},\r\n    {1729.142857142857, chars_format::fixed, 22, \"1729.1428571428571103751892\"},\r\n    {1729.142857142857, chars_format::fixed, 21, \"1729.142857142857110375189\"},\r\n    {1729.142857142857, chars_format::fixed, 20, \"1729.14285714285711037519\"},\r\n    {1729.142857142857, chars_format::fixed, 19, \"1729.1428571428571103752\"},\r\n    {1729.142857142857, chars_format::fixed, 18, \"1729.142857142857110375\"},\r\n    {1729.142857142857, chars_format::fixed, 17, \"1729.14285714285711038\"},\r\n    {1729.142857142857, chars_format::fixed, 16, \"1729.1428571428571104\"},\r\n    {1729.142857142857, chars_format::fixed, 15, \"1729.142857142857110\"},\r\n    {1729.142857142857, chars_format::fixed, 14, \"1729.14285714285711\"},\r\n    {1729.142857142857, chars_format::fixed, 13, \"1729.1428571428571\"},\r\n    {1729.142857142857, chars_format::fixed, 12, \"1729.142857142857\"},\r\n    {1729.142857142857, chars_format::fixed, 11, \"1729.14285714286\"},\r\n    {1729.142857142857, chars_format::fixed, 10, \"1729.1428571429\"},\r\n    {1729.142857142857, chars_format::fixed, 9, \"1729.142857143\"},\r\n    {1729.142857142857, chars_format::fixed, 8, \"1729.14285714\"},\r\n    {1729.142857142857, chars_format::fixed, 7, \"1729.1428571\"},\r\n    {1729.142857142857, chars_format::fixed, 6, \"1729.142857\"},\r\n    {1729.142857142857, chars_format::fixed, 5, \"1729.14286\"},\r\n    {1729.142857142857, chars_format::fixed, 4, \"1729.1429\"},\r\n    {1729.142857142857, chars_format::fixed, 3, \"1729.143\"},\r\n    {1729.142857142857, chars_format::fixed, 2, \"1729.14\"},\r\n    {1729.142857142857, chars_format::fixed, 1, \"1729.1\"},\r\n    {1729.142857142857, chars_format::fixed, 0, \"1729\"},\r\n\r\n    // Negative precision requests 6 digits of precision.\r\n    {1729.142857142857, chars_format::fixed, -1, \"1729.142857\"},\r\n    {1729.142857142857, chars_format::fixed, -2, \"1729.142857\"},\r\n    {1729.142857142857, chars_format::fixed, -3, \"1729.142857\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2fixedTest Carrying\r\n    {0.0009, chars_format::fixed, 4, \"0.0009\"},\r\n    {0.0009, chars_format::fixed, 3, \"0.001\"},\r\n    {0.0029, chars_format::fixed, 4, \"0.0029\"},\r\n    {0.0029, chars_format::fixed, 3, \"0.003\"},\r\n    {0.0099, chars_format::fixed, 4, \"0.0099\"},\r\n    {0.0099, chars_format::fixed, 3, \"0.010\"},\r\n    {0.0299, chars_format::fixed, 4, \"0.0299\"},\r\n    {0.0299, chars_format::fixed, 3, \"0.030\"},\r\n    {0.0999, chars_format::fixed, 4, \"0.0999\"},\r\n    {0.0999, chars_format::fixed, 3, \"0.100\"},\r\n    {0.2999, chars_format::fixed, 4, \"0.2999\"},\r\n    {0.2999, chars_format::fixed, 3, \"0.300\"},\r\n    {0.9999, chars_format::fixed, 4, \"0.9999\"},\r\n    {0.9999, chars_format::fixed, 3, \"1.000\"},\r\n    {2.9999, chars_format::fixed, 4, \"2.9999\"},\r\n    {2.9999, chars_format::fixed, 3, \"3.000\"},\r\n    {9.9999, chars_format::fixed, 4, \"9.9999\"},\r\n    {9.9999, chars_format::fixed, 3, \"10.000\"},\r\n    {29.9999, chars_format::fixed, 4, \"29.9999\"},\r\n    {29.9999, chars_format::fixed, 3, \"30.000\"},\r\n    {99.9999, chars_format::fixed, 4, \"99.9999\"},\r\n    {99.9999, chars_format::fixed, 3, \"100.000\"},\r\n    {299.9999, chars_format::fixed, 4, \"299.9999\"},\r\n    {299.9999, chars_format::fixed, 3, \"300.000\"},\r\n\r\n    {0.09, chars_format::fixed, 2, \"0.09\"},\r\n    {0.09, chars_format::fixed, 1, \"0.1\"},\r\n    {0.29, chars_format::fixed, 2, \"0.29\"},\r\n    {0.29, chars_format::fixed, 1, \"0.3\"},\r\n    {0.99, chars_format::fixed, 2, \"0.99\"},\r\n    {0.99, chars_format::fixed, 1, \"1.0\"},\r\n    {2.99, chars_format::fixed, 2, \"2.99\"},\r\n    {2.99, chars_format::fixed, 1, \"3.0\"},\r\n    {9.99, chars_format::fixed, 2, \"9.99\"},\r\n    {9.99, chars_format::fixed, 1, \"10.0\"},\r\n    {29.99, chars_format::fixed, 2, \"29.99\"},\r\n    {29.99, chars_format::fixed, 1, \"30.0\"},\r\n    {99.99, chars_format::fixed, 2, \"99.99\"},\r\n    {99.99, chars_format::fixed, 1, \"100.0\"},\r\n    {299.99, chars_format::fixed, 2, \"299.99\"},\r\n    {299.99, chars_format::fixed, 1, \"300.0\"},\r\n\r\n    {0.9, chars_format::fixed, 1, \"0.9\"},\r\n    {0.9, chars_format::fixed, 0, \"1\"},\r\n    {2.9, chars_format::fixed, 1, \"2.9\"},\r\n    {2.9, chars_format::fixed, 0, \"3\"},\r\n    {9.9, chars_format::fixed, 1, \"9.9\"},\r\n    {9.9, chars_format::fixed, 0, \"10\"},\r\n    {29.9, chars_format::fixed, 1, \"29.9\"},\r\n    {29.9, chars_format::fixed, 0, \"30\"},\r\n    {99.9, chars_format::fixed, 1, \"99.9\"},\r\n    {99.9, chars_format::fixed, 0, \"100\"},\r\n    {299.9, chars_format::fixed, 1, \"299.9\"},\r\n    {299.9, chars_format::fixed, 0, \"300\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2fixedTest RoundingResultZero\r\n    {0.004, chars_format::fixed, 3, \"0.004\"},\r\n    {0.004, chars_format::fixed, 2, \"0.00\"},\r\n    {0.4, chars_format::fixed, 1, \"0.4\"},\r\n    {0.4, chars_format::fixed, 0, \"0\"},\r\n    {0.5, chars_format::fixed, 1, \"0.5\"},\r\n    {0.5, chars_format::fixed, 0, \"0\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2fixedTest Regression\r\n    {7.018232e-82, chars_format::fixed, 6, \"0.000000\"},\r\n};\r\n\r\n#endif // DOUBLE_FIXED_PRECISION_TO_CHARS_TEST_CASES_1_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/double_fixed_precision_to_chars_test_cases_2.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception AND BSL-1.0\r\n\r\n\r\n// Copyright 2018 Ulf Adams\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n// Boost Software License - Version 1.0 - August 17th, 2003\r\n\r\n// Permission is hereby granted, free of charge, to any person or organization\r\n// obtaining a copy of the software and accompanying documentation covered by\r\n// this license (the \"Software\") to use, reproduce, display, distribute,\r\n// execute, and transmit the Software, and to prepare derivative works of the\r\n// Software, and to permit third-parties to whom the Software is furnished to\r\n// do so, all subject to the following:\r\n\r\n// The copyright notices in the Software and this entire statement, including\r\n// the above license grant, this restriction and the following disclaimer,\r\n// must be included in all copies of the Software, in whole or in part, and\r\n// all derivative works of the Software, unless such copies or derivative\r\n// works are solely in the form of machine-executable object code generated by\r\n// a source language processor.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r\n// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r\n// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r\n// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\n// DEALINGS IN THE SOFTWARE.\r\n\r\n\r\n// This file contains test cases derived from:\r\n// https://github.com/ulfjack/ryu\r\n// See xcharconv_ryu.h for the exact commit.\r\n// (Keep the cgmanifest.json commitHash in sync.)\r\n\r\n\r\n#ifndef DOUBLE_FIXED_PRECISION_TO_CHARS_TEST_CASES_2_HPP\r\n#define DOUBLE_FIXED_PRECISION_TO_CHARS_TEST_CASES_2_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\ninline constexpr DoublePrecisionToCharsTestCase double_fixed_precision_to_chars_test_cases_2[] = {\r\n    // Ryu Printf d2fixed_test.cc D2fixedTest AllPowersOfTen\r\n    // These values test every power of ten that's within the range of doubles.\r\n    {1e-323, chars_format::fixed, 1073,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000098813129168249308835313758573644274473011960522864952885117136500135101454041750373059967272327198475\"\r\n        \"9593129390891435461853313420711879592797549592021563756252601426380622809055691634335697964207377437272113\"\r\n        \"9974614461000127748183071299687746249467945463392302800634307707961482524771311823420533171133735363740791\"\r\n        \"2062124986389054318298491065861091308880225496025941999908386397881816083312664904951429573802945356031871\"\r\n        \"0477223100269607052986944038758053621421498340666445368950667144166486387218476578691673612021202301233961\"\r\n        \"9506156684554636658495809965049461552751854495749312169556407468939399067294035945355435170251321102398263\"\r\n        \"0097822029020757254763345019116747794671979873296198823284114052741805584855350891304581750773650128394365\"\r\n        \"3106689453125\"},\r\n    {1e-322, chars_format::fixed, 1072,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000988131291682493088353137585736442744730119605228649528851171365001351014540417503730599672723271984759\"\r\n        \"5931293908914354618533134207118795927975495920215637562526014263806228090556916343356979642073774372721139\"\r\n        \"9746144610001277481830712996877462494679454633923028006343077079614825247713118234205331711337353637407912\"\r\n        \"0621249863890543182984910658610913088802254960259419999083863978818160833126649049514295738029453560318710\"\r\n        \"4772231002696070529869440387580536214214983406664453689506671441664863872184765786916736120212023012339619\"\r\n        \"5061566845546366584958099650494615527518544957493121695564074689393990672940359453554351702513211023982630\"\r\n        \"0978220290207572547633450191167477946719798732961988232841140527418055848553508913045817507736501283943653\"\r\n        \"106689453125\"},\r\n    {1e-321, chars_format::fixed, 1073,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0009980126045993180192366689615938071721774208012809360241396830786513645246858216787679056694505047046071\"\r\n        \"8906068480034981647184655491899838872552508794177939381512744064442903714624855067905494384945121164483513\"\r\n        \"7436060561012902566490201268462371196262491802622582864065078504109735001902494165473850284507271737819911\"\r\n        \"8274623625294486148147597651970222196902775098620141990747026186063424414579155400094386954097480959218975\"\r\n        \"8199533127230312351681347914563415763571332407310982264017381560815125109066134447859034814141432424630157\"\r\n        \"0121825140018302508076806469995616827937304070680529125197154362879305796697630480898952195383431342224563\"\r\n        \"9880024931096482731097846930791527261869967202916081151695519326922364070390440021762756828138662967830896\"\r\n        \"3775634765625\"},\r\n    {1e-320, chars_format::fixed, 1071,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0099998886718268300541337523676528005766688104049139332319738542138136722671490251377536686879595124857670\"\r\n        \"8246943582132687395553181760422147911120187125822521327632643497190282764359933947726339777865966519379365\"\r\n        \"4309834532129281161268155283999204461560808953010434241919400457020315068567565301579569187340188105680700\"\r\n        \"6870486225722970118072958651424404586788201978253303907287034656397876312416883810846728688580700304253500\"\r\n        \"2949777472842337622787367223150264878556320754442713378075149896484223865098297635973695365456728848769494\"\r\n        \"0230564769292298397759684630055091384876749698303915591084358566671856101564376699700392294336955627042165\"\r\n        \"8995893369006341820505159346148768208043631775753209163523421374707251873615102000236731782933929935097694\"\r\n        \"39697265625\"},\r\n    {1e-319, chars_format::fixed, 1070,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0999988867182683005413375236765280057666881040491393323197385421381367226714902513775366868795951248576708\"\r\n        \"2469435821326873955531817604221479111201871258225213276326434971902827643599339477263397778659665193793654\"\r\n        \"3098345321292811612681552839992044615608089530104342419194004570203150685675653015795691873401881056807006\"\r\n        \"8704862257229701180729586514244045867882019782533039072870346563978763124168838108467286885807003042535002\"\r\n        \"9497774728423376227873672231502648785563207544427133780751498964842238650982976359736953654567288487694940\"\r\n        \"2305647692922983977596846300550913848767496983039155910843585666718561015643766997003922943369556270421658\"\r\n        \"9958933690063418205051593461487682080436317757532091635234213747072518736151020002367317829339299350976943\"\r\n        \"9697265625\"},\r\n    {1e-318, chars_format::fixed, 1073,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"9999987484955998303442587681411374220943283416874456096926739330950172402250479179504041747926784812965558\"\r\n        \"4287487604160175017171489462926670704816262174273696519516951145408899245049086406969675750804029375208657\"\r\n        \"0958067673928243874998599699608192405548840764435726992574353409992989381527841981377451905152545931810859\"\r\n        \"9110747558686066125594356208301549987700423321356332728611852037669447325001045989624298431872975781381900\"\r\n        \"5454970384503369331723666353784541477053573784937783176465656792588872897048240176061210157694087178183364\"\r\n        \"2562633613784476434464272970558600040426824326140871277992264136125009223731705915394664603946883806614852\"\r\n        \"9687158929654939305279279633993568599035157448617115175626251523466992946365550914977760044166643638163805\"\r\n        \"0079345703125\"},\r\n    {1e-317, chars_format::fixed, 1074,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010\"\r\n        \"0000023069253735408389129784751602675844543686685345266696720985206474225156972857665977069218756620453298\"\r\n        \"2264570127938903364494864760334526437358946130769310829548413593659926664074401521200304454351359907994741\"\r\n        \"9542598430782630372260603945613543429690325839445724126694995661872117602435387548905318808226062363719785\"\r\n        \"9200663066444242733391298681807136840324571457602240285981099973517197374979457253670128679434175847866812\"\r\n        \"0265538495438103896717079595982495202667985360377499818082568642138458551310116628649611994972675233684585\"\r\n        \"4885571164676719332386444653160192733396025005032681034257252564659190838258113071979798794845819719745924\"\r\n        \"2018322340080528934937813868610807682359544296115449991188686313782637840938535486734473067826911574229598\"\r\n        \"04534912109375\"},\r\n    {1e-316, chars_format::fixed, 1074,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099\"\r\n        \"9999983659714433460619209563119592647759254336952145504584997059223491913816093472283838042269385386536792\"\r\n        \"3662877802160444990315364051565565391595587327639198904852632370647709618104786126163799632995155486767134\"\r\n        \"5489448155325984352148361206916068673233394735976484265364187348817469712425595930501855154426285227845881\"\r\n        \"1851318198469791538166759153418640131045150835957547860040033740467433541512910274322712859834395088588442\"\r\n        \"6462327203707021334703435862929817973126107752108884758449018560968369545054974839766935919673746583760950\"\r\n        \"0090319935380601677624921618978273452080613810953529918681506974243410714346040856409400022829894441463584\"\r\n        \"4938668328253396212469776138316207336915493277914002853676578005971864447246977639083276301334990421310067\"\r\n        \"17681884765625\"},\r\n    {1e-315, chars_format::fixed, 1074,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999\"\r\n        \"9999984816838086980155348601833786944004252887462239343279298267939669340813115785463940012644762356165637\"\r\n        \"6018472107941603095933610646723473305152197664424334682905225846048030394631398713141543276262621023579516\"\r\n        \"4856403244760035143758219018692306106535865554853296854593335050116920911412927040149351300963455324069998\"\r\n        \"6606369464281496859115328132978038273771846603614391600262917001497059540098100100654272959048368919932233\"\r\n        \"0339106687474623926514774687435260163393325032088515637916186325933425031377463265706869614769269289460443\"\r\n        \"0162434380637971763992931137356926849933919853159267441149680945843205744401462482127152983675926068233239\"\r\n        \"4533416326065098006842778911837195061162902589084326771691951138831352849752802727789635639510379405692219\"\r\n        \"73419189453125\"},\r\n    {1e-314, chars_format::fixed, 1074,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999\"\r\n        \"9999996388074622175516738988975729906454238392563177730222310355101443610783338917264959716398532052454089\"\r\n        \"9574415165753184152116076598302552440718301032275692463431160600051238159897524582918979708937276391703335\"\r\n        \"8525954139100543059856797136454680439560573743621422746884812063111432901286238136624312766335156286311173\"\r\n        \"4156882122398550068601017928572019701038804280182829002491749611793319525949998363969873951188107233370136\"\r\n        \"9106901525150649844628162932489682066065497831884824432587863975583979894602347525106206565724496346455373\"\r\n        \"0883578833211672627673026321143460828466980275216642665831420661841156044955678739304682592136242335929789\"\r\n        \"0480896304182115950572806647047072303636995700787565951845682467426236874811053614853229021264269249513745\"\r\n        \"30792236328125\"},\r\n    {1e-313, chars_format::fixed, 1074,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000\"\r\n        \"0000013287310805879821807546636585886679620431612038734699546109582686175384116193524783693968956688140137\"\r\n        \"5540716352977559252087422693381464203581785118767706512437906713702693003503091646357646071476452635669415\"\r\n        \"5246848621505494472659507014390677520339710167910378869165274485095070275248037277953394248918430544982129\"\r\n        \"7599883717180027845159424818650742664828155549841261024871689316874103301156316092174454298782545011717304\"\r\n        \"6307626801641301972775101344275847471365727489181467010353973327923042139632713540407902463255564615170711\"\r\n        \"8588866674394044605978168193959339061045730000041082743092410352881259983203805365724543506488083910497021\"\r\n        \"9857874056331538133109738980029096933705946944523758930098881700633271540538211594184581088029517559334635\"\r\n        \"73455810546875\"},\r\n    {1e-312, chars_format::fixed, 1074,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999999\"\r\n        \"9999984653414306424254822495727998400384494798179603049566133420122111551188980872622277349738658390603661\"\r\n        \"6017469443438439328094256802746822646621526799644719490000164997455995821447379012072913768453460200785984\"\r\n        \"2506564523554753104320463194375155829195183484015334490701283289008478965323405044403142732483702404210110\"\r\n        \"7905649692216696974146511587715789684961217254373697248854313571918308886594163564317398627121032083125239\"\r\n        \"7360433366008609148270597384621394281525027380815002050113732562980691815499420536041514214523842699856175\"\r\n        \"6629431717108491072037966992019198281329518256786859176589492325403501231096999739212282309503857451372825\"\r\n        \"3432007519784245448952372271615847645051499635293291066062645927220007028099089604888938254134700400754809\"\r\n        \"37957763671875\"},\r\n    {1e-311, chars_format::fixed, 1074,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999\"\r\n        \"9999994753836816616511477927917844470256657499736814793090661876925865714541989788848333087337492396834329\"\r\n        \"9564388520721546473722538158536045855411592384479540534380552114130892428057327572232684630845668163768013\"\r\n        \"5027566927047722665479238893283177666153753035241799107964294452027013440391018179162227081537627087712294\"\r\n        \"7149684401750551218912852475949533812932510787775885488405715316005812990910633000601130631914738865300203\"\r\n        \"9320168310490502062186389904351023247382521319149688554563326346056647735821920228452652563270230450412699\"\r\n        \"5553552197916865708123384867766175142422964311492560020229534457444110911911051310155975850415556167325647\"\r\n        \"9466808241373590371668740244833598142522966162877208895552630351312778658273922385846255167507479200139641\"\r\n        \"76177978515625\"},\r\n    {1e-310, chars_format::fixed, 1074,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999\"\r\n        \"9999996944932750289769196936057731524703811503348409363383061327826907212970624909358517403358560131942537\"\r\n        \"5440449902661182468152038295716398350514698640806187221931821854499235685101121539494695290560370356316192\"\r\n        \"0262976500977290528883924582675649786271503084114142479960098374250875666295837703332537400943138558993342\"\r\n        \"7527906510700039348277770292425883783765220625771825884011346358999037950762662458487021106048861331017974\"\r\n        \"8440294655039824148357371062889259284535962361830108230108597032649720551828440573872362438712905654743976\"\r\n        \"5288600321445975410481753660186482200605570362800256287073548308910808652757531074237476089281222224455610\"\r\n        \"9716993428246282344069074957894355322565651565420188367168360539498689375166899304114842550461617065593600\"\r\n        \"27313232421875\"},\r\n    {1e-309, chars_format::fixed, 1074,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000\"\r\n        \"0000018855892087022346387017456602069175351539464355066307055836837322197256976114460360563569237483024613\"\r\n        \"4201063722057542412447039667519923301545761204072654097444519258182668255539061212114801887707392281797977\"\r\n        \"2617072240272969162930781476600370987449003572837576199918137596489497925344032945035640594998253271803823\"\r\n        \"1310127600194920641926948457189383492092319005731229840067656788931287549282957037345925847390085988195683\"\r\n        \"9641558100533045010067182648271619656070372788634304985561303898580448711893644028069461193139657698056746\"\r\n        \"2639081556737072434065441584389552782431630875877218955513686823577786061222328715052478477937882795755241\"\r\n        \"2218845296973202068072422088501927122992505590849983083325662421357796544096668486800716380002995720133185\"\r\n        \"38665771484375\"},\r\n    {1e-308, chars_format::fixed, 1073,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999\"\r\n        \"9999990932662533724846199547048873403204569370722504933164788134100221702366853061102859515757830175849182\"\r\n        \"2824378438792553200763769833775473829862512856683413461939989729065436937279228852476622948659167943435544\"\r\n        \"6221493480729436132941672166628217375554144801591156397912760548972014203897705803515339607715061990556648\"\r\n        \"8977026029171097782672502440171652303162739065260414400859795093549243326204240563556399326294969169893097\"\r\n        \"5461134804791235994697938405200089317860731205010159117711704697471514344499487123311264707354172378099538\"\r\n        \"7378502198261451023662795913796604718812599767273565216024053297899062477635215259813914438876185752755886\"\r\n        \"1992808911690506171197530846785775640581096161907433186688396108094354271255983085398000298482656944543123\"\r\n        \"2452392578125\"},\r\n    {1e-307, chars_format::fixed, 1072,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999\"\r\n        \"9999909326625337248461995470488734032045693707225049331647881341002217023668530611028595157578301758491822\"\r\n        \"8243784387925532007637698337754738298625128566834134619399897290654369372792288524766229486591679434355446\"\r\n        \"2214934807294361329416721666282173755541448015911563979127605489720142038977058035153396077150619905566488\"\r\n        \"9770260291710977826725024401716523031627390652604144008597950935492433262042405635563993262949691698930975\"\r\n        \"4611348047912359946979384052000893178607312050101591177117046974715143444994871233112647073541723780995387\"\r\n        \"3785021982614510236627959137966047188125997672735652160240532978990624776352152598139144388761857527558861\"\r\n        \"9928089116905061711975308467857756405810961619074331866883961080943542712559830853980002984826569445431232\"\r\n        \"452392578125\"},\r\n    {1e-306, chars_format::fixed, 1069,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000\"\r\n        \"0000279023803391476325978469990224051750613215776767695913434815660171857902754611290428295390285511299939\"\r\n        \"7555396569952545618616744426089938099821880772600111269030190023111167436591184859690670436405323590819830\"\r\n        \"1844721604945146272364072259074692549029825719823273398887747392739210687026322232580358825111023420554384\"\r\n        \"2448102753778430086832136807498326022836612478352744084880146129506125620176035215057087515132261261692207\"\r\n        \"1840157682358884105637168985105575243131100589013256198578475477149271096570431275426554079671665424761417\"\r\n        \"1924100040800742268229310960254010514282230676348267637082219417179036571049957325656665930634428504367776\"\r\n        \"0454755517299704176913224907978537594173374670297704548248979442337094143862519235455010857549495995044708\"\r\n        \"251953125\"},\r\n    {1e-305, chars_format::fixed, 1066,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999999\"\r\n        \"9999628217900530785377054659627883900722995775030945280642024408233714255781016776892345034950140642648166\"\r\n        \"8573825190999521406861414798119234028697220781311072490218654586931744476129716298164369509417157915490653\"\r\n        \"9259553297447374781782441000739045507324002369679044368579627272624666077581243976346526774830702565838523\"\r\n        \"8493027973334562682769653967428338344198908910697296851733096562843141535755075192125128789628361223902198\"\r\n        \"3130437614961415360789480610798036545823058988806310179363406158165146574713062236131985212038180608127389\"\r\n        \"5043986502259049610427190720957335454762962899504686945017155165729595557090423005192733858302009766933344\"\r\n        \"1417250244332809616705208468049446512230390757498683137398144735633162723253963832803492550738155841827392\"\r\n        \"578125\"},\r\n    {1e-304, chars_format::fixed, 1062,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999999\"\r\n        \"9970986017938236030708706274083986072964866688415599378481654095393107971837933080827946997879690663671822\"\r\n        \"9897127841787735834165912278951164530799512255590403301520580715878005643040104591705016257082955213245355\"\r\n        \"9094230958441044282958157287327415209445985068360926723413499488107134434356612967808775938070772540742689\"\r\n        \"7026283217747721343282826813844008368651362124331816540784047770686498029508536253685317002729601094862994\"\r\n        \"9135262480594748043237132185918638374327014677453087342263272675030950619200618216251407442954016965379635\"\r\n        \"6863753776603511529344556156911197043154878083222954043731239608809794343631028040935934998681895455378110\"\r\n        \"9130063014014238947635759786607029686277060011159932613248249854429397509569810154061997309327125549316406\"\r\n        \"25\"},\r\n    {1e-303, chars_format::fixed, 1059,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999\"\r\n        \"9305121602309211138097617585722213781407209893854338937799101162826526342823575798751416352849454431760700\"\r\n        \"5513293326557706590487351553652833209231993635578887404550364703749030538288111678031301177411569065874625\"\r\n        \"4921477327887186271721529352265514273755232628736995836010623070838922880272900947583890416927675525146116\"\r\n        \"3798887927910725682208862371410082513109989521059733783089791982946303046409911855797635730431832642086137\"\r\n        \"6646806101636991397848539106198750400812943404770642200700104244381264145126115841418959590695543799488207\"\r\n        \"1419757830243362094607944726517450359952766243046893934267403312319363799939048233496892637407719130495821\"\r\n        \"06215992711206739656963995638713298863410390903689459607513385138582995281808507570531219244003295898437\"\r\n        \"5\"},\r\n    {1e-302, chars_format::fixed, 1054,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999999999\"\r\n        \"6289124639677304732891737098163313400003754860956628154130529957101690432681798063738592536074161957267240\"\r\n        \"2796813996134279914247685423398828882424967718390038930747186677738512519784590692463902921459555191377723\"\r\n        \"7381431331057915180095641690724245303189270726348129545101205190248600509074839319869855879517154309707408\"\r\n        \"9700433275639158827043869850340834518328948988664790828903405620812448453502724006420631679231752873211868\"\r\n        \"4114610650853826254667653085888570747787061005788271782462022491238577826301688982950514617712444829347269\"\r\n        \"1939817788767646536780382005930664172295779143930111367033975329422275090360339741868585169367074691240515\"\r\n        \"1648239663380463742253582056305034674846879073532500981362665382068399821946513839066028594970703125\"},\r\n    {1e-301, chars_format::fixed, 1052,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000006\"\r\n        \"6504322127499234590215330691750752749850538126789922377769886093782568469091263076567653603289384041799915\"\r\n        \"3212323339173647442450290613844186107610680787137665635265135265327753578757072113467545929599216957984239\"\r\n        \"5147370980532830613127558285453735132274929310782773370851235321985899693814948207689013522864312960953935\"\r\n        \"1774060645412452429006574863088645574619210784806404225209601531305860195942614414423096789547175207334420\"\r\n        \"5835694812023455384508915623719843146914672716501910639371586430015742264313868029854544921348666996359020\"\r\n        \"7149841450365284270233731763503780051537526270058618449857903893539137814638834439474933142947015273438897\"\r\n        \"03142991033638081518025859259858927144364121703023337768036216122169435038813389837741851806640625\"},\r\n    {1e-300, chars_format::fixed, 1049,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000025\"\r\n        \"0590918352087596856961468077037052499253423199004660431840514846763028121819501008949623062702782541489103\"\r\n        \"1146499880413081224609160619018271942662793458427551041478278701507022263926060379361392435977509403014386\"\r\n        \"6141479125513590882591017341692222921220404918621822029155619541859418525883262040928316317872050154019969\"\r\n        \"8661694898041067655794243192165254180873224255430058507393834020333099315764646743363847906553166172481259\"\r\n        \"9598594906293782493759617177861888792970476530542335134710418229637566637950767497147854236589795152044892\"\r\n        \"0491760252897567092617670818249247201056323377556165380506436538125830502246596311593005632365079290253988\"\r\n        \"78153811554013986009587978081167432804936359631140419153283449560376539011485874652862548828125\"},\r\n    {1e-299, chars_format::fixed, 1046,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999999999919\"\r\n        \"0290760137637976208079970046606724998518567438890097551538379739129028665449972035680926865499362402810630\"\r\n        \"3651130713543666646941642034794006359075819280682667925398195400906114450103317751101389479657812615519797\"\r\n        \"8756945816618186836433649314161201999972943672570926856702325994597557960702860121588611892551865896044643\"\r\n        \"3985656531743023483770388411882929286181173813228715116320889861526972008354488226701519154182974517909032\"\r\n        \"5919123351411654126959859303926546520294760229609181275060613732216818338004372560297782550722953028086399\"\r\n        \"6864368522933466048419533648184045496011719191321500860483546203133923869331978450679449946810205349460035\"\r\n        \"55329325281205226730514864672299618939724737118660523316204802313222899101674556732177734375\"},\r\n    {1e-298, chars_format::fixed, 1042,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999999991232\"\r\n        \"8065440178667945403966643095736050128809725161144813110581347907260225388618807065241978378310511738176684\"\r\n        \"8978472961345172089817280618610949969507425520598459508751755269122547961258312490713057673763372204220340\"\r\n        \"3781167641756540616899914675347366906182904398174226130530393770056524451914354311216888057471403500725107\"\r\n        \"6705546549406561057574839884358592320586088346562272180390090411973212500537381300528153669461252213404717\"\r\n        \"7587416437488441814327093646649271377107480476551731021560491782355830383964467734639589943029566464163497\"\r\n        \"5366069084321743418023147658438218610880841891451337934895801756354091018104152540779946423927952220683901\"\r\n        \"2428228659762106653639065937800317076591475056075719596293538415920920670032501220703125\"},\r\n    {1e-297, chars_format::fixed, 1039,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000039647\"\r\n        \"8128980950068520868995348882659698990112439255546729582652670817083234140282683317496428210034914020640749\"\r\n        \"0310076398915630971759041855375317635086531785636111011200732530243024248980965231943970702669785257845617\"\r\n        \"8424324808370650127984402213708118558573561222302940289189796515270127000971493586876574463470122362792297\"\r\n        \"7471765782444391057813106595117131865471280037220785529001835372476246333493828469074142652508409585016908\"\r\n        \"1535237600934009427614926748351814984516753878158617880335246460555951776912803239807668457495085708842964\"\r\n        \"6102549163424107238986497758817967696590019262732110067992581963303272984491636864032312946065142589502281\"\r\n        \"0699832540710987766403439129992000576046943562114055481515606516040861606597900390625\"},\r\n    {1e-296, chars_format::fixed, 1035,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000056958\"\r\n        \"8024265064981030478409707692465796029083892171204366554955530185549727391907866068093230295203015836077090\"\r\n        \"1699839227919216188027123435710995177499246977290400982185512398383456792748744786603989786601684003410274\"\r\n        \"2609519041559184055883340909789320261083566248200925601535674980154916724840401269545227598018324013146388\"\r\n        \"0274190388767162625958511947088095562418409514613018689749203717444806459951576787294477304028395980916466\"\r\n        \"6922847406541184184565293398560546609322341147876025030738254906899123269746363348978633835752400909208341\"\r\n        \"4513869447023277566518254456350926065149258365404485429166981233666429035716071423702199575889771541254094\"\r\n        \"321820289220342105066697862794979293345025428418892943227547220885753631591796875\"},\r\n    {1e-295, chars_format::fixed, 1032,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000006001897\"\r\n        \"2491361621077156168797575070757062243486927860250533894694149620019098093782134390869131834368148286057303\"\r\n        \"9413188458985658353283956245784850548849603838035355899004130448583139080461968391411373707555537234837209\"\r\n        \"2234855089948916142204308734563047805268398079264892661153392562290819806396566282980548567109633967889311\"\r\n        \"3837382858499593494345983536212525100894348867647572501798437291530574599303094328095960577175157717206504\"\r\n        \"4100931710194403310996519344927117866746573618122710669209904247557544687570338275355150184699307959624288\"\r\n        \"9324649465717492838730114672769275063507531844710698303811226726525103304365469702956873915084185072840405\"\r\n        \"266398916053751632054838903102133456680944423311530044884420931339263916015625\"},\r\n    {1e-294, chars_format::fixed, 1029,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000016560498\"\r\n        \"6923928440636750610371765538777806813685229416850392185830714084016387540193554229196687284977563458281821\"\r\n        \"4813515151508611748737787348449315297638965859302790372849252767842821580823519711141930343245794742496359\"\r\n        \"3231233504632556755075890252271716497222096014603833445160783536974977600025234129579304975685188987489664\"\r\n        \"9609996818372197065372922839472695195261458904336640183533171978645665994732331639750105476621993907730344\"\r\n        \"2029655943683541387216510574697964479280439066327423797480201047044950954849744469001007229590688655915893\"\r\n        \"9758854693297190998920585853612635338955732921780230940980952146364529466016653302089713901350093446008356\"\r\n        \"278420969734871669445506829802610380963923120134495547972619533538818359375\"},\r\n    {1e-293, chars_format::fixed, 1022,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000513272777\"\r\n        \"3156786567445994724549536738120593106324687653743495947193397769560622582957859727923921319406989801147958\"\r\n        \"2682107021869891760192074359686674503246238761434052666028941422336769598604510735193757290934568271969456\"\r\n        \"5250874205178404886496479269587257415916038370399079782592972057215539711775770897602495320141095406124240\"\r\n        \"6210622316711873678424528575947398462070827220479080510941327279737299933712209527177057127256605191981041\"\r\n        \"2133848702919347654154568743565358298286767582471701131752741898693476915326550966414029235126014081774902\"\r\n        \"5489666643993809096250345528767275758514013420416326186860042414737323281270882840729341009434992719249133\"\r\n        \"86875522376987390327812590777589729640340010519139468669891357421875\"},\r\n    {1e-292, chars_format::fixed, 1021,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000005132727773\"\r\n        \"1567865674459947245495367381205931063246876537434959471933977695606225829578597279239213194069898011479582\"\r\n        \"6821070218698917601920743596866745032462387614340526660289414223367695986045107351937572909345682719694565\"\r\n        \"2508742051784048864964792695872574159160383703990797825929720572155397117757708976024953201410954061242406\"\r\n        \"2106223167118736784245285759473984620708272204790805109413272797372999337122095271770571272566051919810412\"\r\n        \"1338487029193476541545687435653582982867675824717011317527418986934769153265509664140292351260140817749025\"\r\n        \"4896666439938090962503455287672757585140134204163261868600424147373232812708828407293410094349927192491338\"\r\n        \"6875522376987390327812590777589729640340010519139468669891357421875\"},\r\n    {1e-291, chars_format::fixed, 1019,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999962324323391\"\r\n        \"2798103508506385521992048124372918447536033153018627964458003030494979954072709187387723715072044222381502\"\r\n        \"4190092450342962178772011919125939449339353031431138593572223793087189525906785833115541323441890363444649\"\r\n        \"2821395851514130700828279759982076005663811603557173527102213730318461027579111697031467812072924618160763\"\r\n        \"2734773625772193520456011202305539786285748707062310138073209693886156855664311520649108300273993840638730\"\r\n        \"3038818174447717226154347230593172425188266932619544995886944238892045624403889881989947072504762387803780\"\r\n        \"6280018377774738221645882760651449398490186172444323761070877994173001124374730195890389984380357578527189\"\r\n        \"23186761317114486910984268164259702871277113445103168487548828125\"},\r\n    {1e-290, chars_format::fixed, 1015,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000691278685996\"\r\n        \"2547673918180898415459989495965890694553118186157880703161317411757139641286255133930135858243672932786917\"\r\n        \"0148241343184187872945207785757524996807807658000922047585259217949139273599310566277666474598145636458531\"\r\n        \"5406254511057602394118563984744747087918421271781392057362041198010732075766853728931448545168638112767218\"\r\n        \"7277232802704027068522268732267074912421167160771992853446316296987606743322809571170336107378242695971995\"\r\n        \"4540807154321750533173797817243613093744565100802268111516389954388207143053379932855188006207373354275497\"\r\n        \"5039936037021439057122868999428011419835732154702776709909141696441935276309948483428431353230547941906264\"\r\n        \"0425332975063941955314039677915616266545839607715606689453125\"},\r\n    {1e-289, chars_format::fixed, 1012,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000001216597782184\"\r\n        \"1121332071851420445055850947729807109836319696396934719179642881265582543213680619019232142312832213352408\"\r\n        \"4163390286484192941584938686918553949868597413665027879249811981746091325158693742124647465025499020521108\"\r\n        \"9036966465689115216728219127852873379022584791362417713140924541034671157797941243358376521342957494821061\"\r\n        \"9815013120469114077424518206875138193205377793592507346653993059870530437603059100080677849044804081934928\"\r\n        \"3260736024046421216376242112106057114182206876786317634380179194720733302456566726121387895888403002820621\"\r\n        \"8454014987419420754353802565408021212043345918976891903356154272622424589432036703486812148694961250345991\"\r\n        \"2314280908242325983381615372991291224025189876556396484375\"},\r\n    {1e-288, chars_format::fixed, 1009,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000057735490444068\"\r\n        \"6056577598174714126910861572730869783922094285424325691264678703102336389327771952449332944119499049658178\"\r\n        \"0186088027703415718786500234439107644361807467403819565320361399423324538262232786462612897902648957724741\"\r\n        \"0574293815986421962941557035285513791518871325236200015245144922927908376944180801232636656176964011019622\"\r\n        \"1808650457260393636630534995116269380104128448944442969013289878749600341030883893788244288349023841629492\"\r\n        \"9786044393832885086656309603701161727929621817754084190071554740498038049183528080657816288366674347681044\"\r\n        \"0102912936553966078537125085056956010945264214175920599443644260599671283659952081248132555833757853193105\"\r\n        \"8655199821600008391886404979231883771717548370361328125\"},\r\n    {1e-287, chars_format::fixed, 1006,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000212798803462866\"\r\n        \"1819720944463063858289798963846308354749764282603428916900787907451276235749993426437237273265575167509029\"\r\n        \"3443398974142266764368095422362531278211408028009869470625681338533955089219964942897022997845219557138194\"\r\n        \"4105904887102061264140644298800897904844525959465817081764253128629509377723661071135395019790527607724202\"\r\n        \"8818350552049913467222526540243594216638480385289473670346024547141635690306495794030716500282374238053252\"\r\n        \"0430970711379467483411988175886892590435793778413579130557445058654740294892394251026664247805588921011835\"\r\n        \"6527024866661592505378455402755608985358201946503193467379630330993309721882840441441237007264415734065510\"\r\n        \"2452872302586095454302039797767065465450286865234375\"},\r\n    {1e-286, chars_format::fixed, 1003,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000100000000000000005044436842451220\"\r\n        \"8165649742903257869448523746162199423267071399152913134975872063089463617721743048821110076091074307672300\"\r\n        \"1773840164557791031656209599853674105367413448325304166880274630933873239418552802803077827902355732255673\"\r\n        \"4155315053117879563605851420442899131198757937827635383140100091491688910981786240881722533738176097018180\"\r\n        \"2328737684931317864887852689788738841607236686134384861755239394251298663083703091120976068486655806465942\"\r\n        \"3745492929389741899328744647866723415241332977153893466839269357152524524467034954678631564945125656507192\"\r\n        \"1287084657640471293726917610067698846337541027080034890250801509960322136561847382733078481229459723579489\"\r\n        \"7321730333172862259516477934084832668304443359375\"},\r\n    {1e-285, chars_format::fixed, 999,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000001000000000000000073775958887092680\"\r\n        \"1404019815213532986889510323214921238826142576478123077502664539508246258991900763800999508393324137379055\"\r\n        \"6457205030658897420364139008363631639700799829065917353790436274093311171936755018693561074624838609546568\"\r\n        \"6323279987956931013653781663900351974015566123632070355381551356489650179779266645039404024044961128391013\"\r\n        \"6449234164770644190179225196709761817851829527261033883912345325192520710986992117720249210169865472126799\"\r\n        \"2941215818657955514958349590649614239480491315683751958511243736366217849015089102082228344565148136182606\"\r\n        \"1005534504601082856808084760769860405419582767185150634144000699821020707486017573896452080977016299189995\"\r\n        \"556136179022388432713341899216175079345703125\"},\r\n    {1e-284, chars_format::fixed, 996,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000010000000000000000364454141469639249\"\r\n        \"8079839973240061190426737446662380289774568405597363131123542857264701281527483228571615124211944403293694\"\r\n        \"5071196145293180542808701926406067020581352757653162578101323304859851275347918336331086016627885503628334\"\r\n        \"6910728571119144095013537287461749147707873310629239170126706499732324678410198670839181253838408752562755\"\r\n        \"3902624600386993240981079185939643750046892617935374577364231129052661827470541873034675696845736201789984\"\r\n        \"1631573790410970802849046114778061001730328450520442943215634726206616820635058136087680323829216224055103\"\r\n        \"9900338194868909855458309046212652981489067729694678635264237394725417604979475793913844510851457977578383\"\r\n        \"810868256631465555983595550060272216796875\"},\r\n    {1e-283, chars_format::fixed, 993,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000099999999999999994685210677065491259\"\r\n        \"7749803438914163621026595614939832534061107435560807857560967665020741413878246459195032208808316741012258\"\r\n        \"2691461581832757568102503490534685171574034784387362745740286582840262097008018948802266655386840832186907\"\r\n        \"7377574308387455953552668437614997258331822889697246492735695433382995918922759999075196859715226773290408\"\r\n        \"4873036868203164550342645111605051217155262467154603491420980341585531497120315430319163251987317550427630\"\r\n        \"9581712396063683706863666146546656583513251553594590026633083963132688137970592127246328314557798934048071\"\r\n        \"5283217521283049451642164986463704069928438685182921404423903463619228772657959257922213934465659432066116\"\r\n        \"096837760096605052240192890167236328125\"},\r\n    {1e-282, chars_format::fixed, 986,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000001000000000000000018526752671702122504\"\r\n        \"1886804737033222476192186962870088250087687318910666205005363911217585349955151204119274354572185745520077\"\r\n        \"1078614787119958560901161093554731989656290181027731739586437554468626221849504804091414641004521954640590\"\r\n        \"7613434306306439508188319872169926333293510629733626595607910845351966110661413665284894026503153751601248\"\r\n        \"1956041767365788379171625098381602438061934369139173171980451007384009191883980703412382251633531244053994\"\r\n        \"9689328025005031641651021475338193305452779148824615510516946022794721926745835141507082535452895792504462\"\r\n        \"2593490632078887339949053669939646658982295745940133629986798505271865943673982028951988737047957070402937\"\r\n        \"06313605071045458316802978515625\"},\r\n    {1e-281, chars_format::fixed, 985,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000010000000000000000185267526717021225041\"\r\n        \"8868047370332224761921869628700882500876873189106662050053639112175853499551512041192743545721857455200771\"\r\n        \"0786147871199585609011610935547319896562901810277317395864375544686262218495048040914146410045219546405907\"\r\n        \"6134343063064395081883198721699263332935106297336265956079108453519661106614136652848940265031537516012481\"\r\n        \"9560417673657883791716250983816024380619343691391731719804510073840091918839807034123822516335312440539949\"\r\n        \"6893280250050316416510214753381933054527791488246155105169460227947219267458351415070825354528957925044622\"\r\n        \"5934906320788873399490536699396466589822957459401336299867985052718659436739820289519887370479570704029370\"\r\n        \"6313605071045458316802978515625\"},\r\n    {1e-280, chars_format::fixed, 981,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000099999999999999995736438816947517005069\"\r\n        \"4172070683240219593513666870751723400097759022579142792104411515557258308779196173510175383489009931421520\"\r\n        \"5866900041712517007353341295067415591468605332289608545645634822563507367302240104608293998170498800889934\"\r\n        \"0527112983123526485039091556623246664793688444410197203376128885318687103789266301679766012373101564633549\"\r\n        \"3680073454731979186907663345907207730732342719302852534949839594619012356967550855734248053136101277703677\"\r\n        \"1838055674417227267876760024773786411282086583477850214480190207549799327177530658970705609297562011086483\"\r\n        \"9716814098692546387233575608142290670674682296548225014870667032395919842010303184918392220732752395662146\"\r\n        \"227550692856311798095703125\"},\r\n    {1e-279, chars_format::fixed, 979,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000001000000000000000055224171373038293976285\"\r\n        \"3855155153714644346417139367630859739713156121591071255955788854793010075566749549777915014563133243594249\"\r\n        \"0582259141658595397737701917166689901252657650633132064426278214420910755394245918613661618212134619605613\"\r\n        \"8332212191562054191077246132142653280854876907341369752400579251233654435526266645751846330807393174195816\"\r\n        \"7586387056869531553154177335120654514700934306859959959022574246700632872563820325406114294833382820169887\"\r\n        \"1896505961547263034373800392466570256754118618517715540232495226256286830271042457507823068847895940620711\"\r\n        \"1284126734064465595084418254580910347625099724924457889653606240609990826309427213671625952334798270726423\"\r\n        \"6523769795894622802734375\"},\r\n    {1e-278, chars_format::fixed, 976,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000009999999999999999377924315287625452655759\"\r\n        \"2938171681397062528805745754945088532304770466314992540617804157284976902370041721665215989554925283393972\"\r\n        \"2863486722184850086925551573756491173727324573486761348623622278779062565480320715767956544035586867580858\"\r\n        \"6589133591699069822536494530504293213532859514540924900334307735775143583659422910068228823157401407634290\"\r\n        \"6436040454098439322611246838623618658479257702622384275935602860880217090978462037297537786665387684101487\"\r\n        \"6773669006972746076463602187921228840342152780306594657157834453463345600761594161469026978011649449136654\"\r\n        \"3449438374976635277860236467913059785711676135938086005172831406290399388617527762863814583260690938004700\"\r\n        \"0013291835784912109375\"},\r\n    {1e-277, chars_format::fixed, 973,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000099999999999999996910756215390274492176511\"\r\n        \"7684063095968974449032518673086908962585813328738512123351599947903432632493627286289317645086338574069104\"\r\n        \"9859146406918111243792762665325999307404584222453104941273982428937412290702243078662657808584560218409332\"\r\n        \"3845971447447957127327523414168904388704353969069975999800370095248504560869545227216246858018094967873244\"\r\n        \"9501284846576063116593872419790657220872804668829750264129734225138468602210596951011658297769718221274568\"\r\n        \"0247065025727152144034426510530885009285616882720775225357325358898849879479489384314813008029321043554428\"\r\n        \"6205927658214407906559554220186714365221617661531507762030263395729350884779929292244665672839687431405764\"\r\n        \"0731334686279296875\"},\r\n    {1e-276, chars_format::fixed, 957,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000001000000000000000094368084654463543546521870\"\r\n        \"8934482239623710929327631676310035207382479910928589920458334481180870676664675648379486432346815345866334\"\r\n        \"7562631471965527419417503763703495879299381727950707614250209935245588342983867625950272814993263888123155\"\r\n        \"6645135692769927351778358506727934022073892637128839856295410452367794579708097333520813637944185339945990\"\r\n        \"0648060689427426785194885540085397651937152392533802832245566904836593719145032631567800222330837423133330\"\r\n        \"2885648497259176616280450358052714327419732013400898404732486559604253669336804628129859196806272523059693\"\r\n        \"0521032920066284183883123844111803976410428701340986032380607270307788791985359466707450337707996368408203\"\r\n        \"125\"},\r\n    {1e-275, chars_format::fixed, 966,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000009999999999999999340346158537457213068332267\"\r\n        \"8543526013082338874045021461456248630313162327929500011721456784332939064523200829570096560480254512419700\"\r\n        \"8795371964014762431104610623358122885748511635735451163169163085301125849532284716159435616842569069649709\"\r\n        \"3677965333582715712943593194781546492350408656996176376820222925178758968119116549821319640072436935926581\"\r\n        \"4349890431339283925469990220965010846294970911113385878318393484181518669350318361102421491997587538371382\"\r\n        \"3544507500749779910821332345405681071783711350736713312486683572160874299231588233532459276695530510399722\"\r\n        \"8899848075258616324750193420386387614417860312278232649208014296495104634271942900536345177897601388394832\"\r\n        \"611083984375\"},\r\n    {1e-274, chars_format::fixed, 963,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000099999999999999996610130961388928575477095560\"\r\n        \"7037852897132929578912805217850693190154896842007798502938343898280926049479119604150501130778343016684302\"\r\n        \"1615605151428647837186960260934900671975727644897761590357503387320773655935630248280941234605830319660788\"\r\n        \"2326436524060272739115915692811052380281121998546208140469992448785963339114879068986829879463202286332452\"\r\n        \"7760337239262807107657632569428039809102815139583143671458485970184023737703199520175376382597448769637664\"\r\n        \"6069029951181771612179665924299735122664331073911674594543199769372067780588798430856858149689694544391644\"\r\n        \"1619443003394614275664024245327180443551456525045581841276259778116612913882732538439768177340738475322723\"\r\n        \"388671875\"},\r\n    {1e-273, chars_format::fixed, 954,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000001000000000000000094368084654463543546521870893\"\r\n        \"4482239623710929327631676310035207382479910928589920458334481180870676664675648379486432346815345866334756\"\r\n        \"2631471965527419417503763703495879299381727950707614250209935245588342983867625950272814993263888123155664\"\r\n        \"5135692769927351778358506727934022073892637128839856295410452367794579708097333520813637944185339945990064\"\r\n        \"8060689427426785194885540085397651937152392533802832245566904836593719145032631567800222330837423133330288\"\r\n        \"5648497259176616280450358052714327419732013400898404732486559604253669336804628129859196806272523059693052\"\r\n        \"103292006628418388312384411180397641042870134098603238060727030778879198535946670745033770799636840820312\"\r\n        \"5\"},\r\n    {1e-272, chars_format::fixed, 956,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000009999999999999999301866126025284935730806993268\"\r\n        \"4294899886624383983470374216790147668883045176946431092771471673520639672235493868702134168544937709853359\"\r\n        \"1429337879390148790920375029878823974624300284932163665172614889411667604931319119196596048407394171745033\"\r\n        \"1403935323918325627433389841599442869084231853163044353009766814778484224031986972036038327570940801781773\"\r\n        \"8753236228844311234497456647675670141133638771994459659098870641092624819918170192607554446128657740296261\"\r\n        \"7020041425572240773736235762765978925784739938178814850567203587714401772313240386072092102717837114989906\"\r\n        \"8396528248914912412248339888827962825386071451073585017660894737117835417983258139429381117224693298339843\"\r\n        \"75\"},\r\n    {1e-271, chars_format::fixed, 953,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000099999999999999996302290701291550356776893364016\"\r\n        \"4003991567213658420396519935025329000662579987369857908861397005578650671396918539345720284666419005521998\"\r\n        \"4064142345669578677438274308948177784628961293609594325579624027060200516803071959029068252536915837073555\"\r\n        \"3945337989893640586637253291475984430526597402101480732287181874119467954202566192561065504274325334055487\"\r\n        \"1239678379290193773690454889358399872116960852012322184129061860615381459997992896864882185777724588975864\"\r\n        \"9130276588110251798897047156414379800918187523398613454268820786788600914598485685760672947193158113780296\"\r\n        \"78306273170029769604636013467032308116625984283093277534325640527185230510553992644418030977249145507812\"\r\n        \"5\"},\r\n    {1e-270, chars_format::fixed, 948,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000001000000000000000041830013597844327555020695992134\"\r\n        \"5359740495412230260591865761225745490596877103431706636134296544720601490976701849242289227873195822941751\"\r\n        \"5139748699129965212011319333320290767552615599006927428279643461246592387787857999805268968480537241692929\"\r\n        \"7197013915985629361653049926317182057688666912319700175420148173225696675210377258427028528301268930260832\"\r\n        \"1372369973231892026085870796024761779903363689748636076659149398693012859570912267592927245564778354076598\"\r\n        \"5619461858410775465803020254253971042880790632637293309011045699356005741170820658560775552286468270952449\"\r\n        \"1074549038522237716160872469198769503871198304856739378092440884149283419901621527969837188720703125\"},\r\n    {1e-269, chars_format::fixed, 944,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000009999999999999999577690999072535819686188161500326\"\r\n        \"3519273505848744668567549228551263076943947250497039187792816231909003955020176297381970879169230040385329\"\r\n        \"0082017738668415452075046732258769848720794252352109776306800578923660200469103629897100958283997793383955\"\r\n        \"6038042977997909666871651139893551217711278282611477993685967790592783998133475700895634770393856345744738\"\r\n        \"4650780475466074509591274334212811839206915088148608922660498866512013826738634153858814985914103921374525\"\r\n        \"0149861492819674905149683181364531402686142074093906249333520124546760396391259375431263999079219955930024\"\r\n        \"121721445463605063867689533554544024142970014975713411407853836720960316597484052181243896484375\"},\r\n    {1e-268, chars_format::fixed, 943,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000099999999999999995776909990725358196861881615003263\"\r\n        \"5192735058487446685675492285512630769439472504970391877928162319090039550201762973819708791692300403853290\"\r\n        \"0820177386684154520750467322587698487207942523521097763068005789236602004691036298971009582839977933839556\"\r\n        \"0380429779979096668716511398935512177112782826114779936859677905927839981334757008956347703938563457447384\"\r\n        \"6507804754660745095912743342128118392069150881486089226604988665120138267386341538588149859141039213745250\"\r\n        \"1498614928196749051496831813645314026861420740939062493335201245467603963912593754312639990792199559300241\"\r\n        \"21721445463605063867689533554544024142970014975713411407853836720960316597484052181243896484375\"},\r\n    {1e-267, chars_format::fixed, 935,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000999999999999999984668592288242620556267417699505243\"\r\n        \"4427556929628320851990391133724446223189086131944788332886398080404746053916579979506572702930306087562857\"\r\n        \"0296789951041118584725364456089395329851000842160241838348346965718457724013606770688935077083767291846491\"\r\n        \"3631375619259253076248253934259741264740335159884559705093225192532247940397070357552293443188289194108499\"\r\n        \"5411463765898514999685309454394974635146606713668951271841730504581055280919048092136137622888139957979240\"\r\n        \"8418376203186042607144937694058869104510663482319483838213992263101544129268248268774128669056803708025354\"\r\n        \"662627524236751260150807296069617765600306773764172074692169189802370965480804443359375\"},\r\n    {1e-266, chars_format::fixed, 934,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000009999999999999999846685922882426205562674176995052434\"\r\n        \"4275569296283208519903911337244462231890861319447883328863980804047460539165799795065727029303060875628570\"\r\n        \"2967899510411185847253644560893953298510008421602418383483469657184577240136067706889350770837672918464913\"\r\n        \"6313756192592530762482539342597412647403351598845597050932251925322479403970703575522934431882891941084995\"\r\n        \"4114637658985149996853094543949746351466067136689512718417305045810552809190480921361376228881399579792408\"\r\n        \"4183762031860426071449376940588691045106634823194838382139922631015441292682482687741286690568037080253546\"\r\n        \"62627524236751260150807296069617765600306773764172074692169189802370965480804443359375\"},\r\n    {1e-265, chars_format::fixed, 933,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000099999999999999998466859228824262055626741769950524344\"\r\n        \"2755692962832085199039113372444622318908613194478833288639808040474605391657997950657270293030608756285702\"\r\n        \"9678995104111858472536445608939532985100084216024183834834696571845772401360677068893507708376729184649136\"\r\n        \"3137561925925307624825393425974126474033515988455970509322519253224794039707035755229344318828919410849954\"\r\n        \"1146376589851499968530945439497463514660671366895127184173050458105528091904809213613762288813995797924084\"\r\n        \"1837620318604260714493769405886910451066348231948383821399226310154412926824826877412866905680370802535466\"\r\n        \"2627524236751260150807296069617765600306773764172074692169189802370965480804443359375\"},\r\n    {1e-264, chars_format::fixed, 925,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000001000000000000000012213672486375396070019585686165194290\"\r\n        \"7768226656267343111510651008940076674511880159438755777687567257201019061105026607485123801783385769532188\"\r\n        \"2086421261481722999352275826903638609094263676288387000674976831353905367328402411266467736170956180244689\"\r\n        \"4303306394778338669389237842071626199542224191002289665586032984188422495758631972841440682207524614384247\"\r\n        \"2881974452564577216574512303496326748626962048403693772578610441840030544015983340887991121353726198621929\"\r\n        \"2976570513839949533796121047135432468634500998635356792659586929260727173974451837402920458847217808847772\"\r\n        \"88209358202601049382573125959828533489137658563095101271755993366241455078125\"},\r\n    {1e-263, chars_format::fixed, 924,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000010000000000000000122136724863753960700195856861651942907\"\r\n        \"7682266562673431115106510089400766745118801594387557776875672572010190611050266074851238017833857695321882\"\r\n        \"0864212614817229993522758269036386090942636762883870006749768313539053673284024112664677361709561802446894\"\r\n        \"3033063947783386693892378420716261995422241910022896655860329841884224957586319728414406822075246143842472\"\r\n        \"8819744525645772165745123034963267486269620484036937725786104418400305440159833408879911213537261986219292\"\r\n        \"9765705138399495337961210471354324686345009986353567926595869292607271739744518374029204588472178088477728\"\r\n        \"8209358202601049382573125959828533489137658563095101271755993366241455078125\"},\r\n    {1e-262, chars_format::fixed, 923,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000100000000000000001221367248637539607001958568616519429077\"\r\n        \"6822665626734311151065100894007667451188015943875577768756725720101906110502660748512380178338576953218820\"\r\n        \"8642126148172299935227582690363860909426367628838700067497683135390536732840241126646773617095618024468943\"\r\n        \"0330639477833866938923784207162619954222419100228966558603298418842249575863197284144068220752461438424728\"\r\n        \"8197445256457721657451230349632674862696204840369377257861044184003054401598334088799112135372619862192929\"\r\n        \"7657051383994953379612104713543246863450099863535679265958692926072717397445183740292045884721780884777288\"\r\n        \"209358202601049382573125959828533489137658563095101271755993366241455078125\"},\r\n    {1e-261, chars_format::fixed, 920,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000999999999999999984007510363487433943937365667825404622403\"\r\n        \"1858499650136203484265309618370705435913987636722737007132720287134753111378376150804829390632405896825874\"\r\n        \"2835755829869406788748415695130440806600043856721180691093451748215661117451527599123708109603902481283306\"\r\n        \"5354768000469950146686973765336065314190341205083063488532361401368826701838966200291248435154176358308198\"\r\n        \"9728893217809824559093005170114548158227707844413715390150040396446928048862747223614050542827541975695738\"\r\n        \"5794370175470927605091811150712639672177871184201768104247329678930918510840380610087023154663790550827981\"\r\n        \"414572464666142574853625058233126676743296457061660476028919219970703125\"},\r\n    {1e-260, chars_format::fixed, 916,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000009999999999999999614425806651770642430715896531535728877042\"\r\n        \"7639743563706770631567501610059301751410501950963044627850907560273067164597910833496514764297149885360067\"\r\n        \"9673513083865327379264867283239061764691379113885247039867480636638961486908206652484856605220802705584074\"\r\n        \"9934665781749747526462791203039579317632613673177818105318631717258914564045608873717014172578259375569275\"\r\n        \"9324457403959109467575665091447877832402353969896696393817192415800352751662722921123938941086166587088913\"\r\n        \"1734552438880426522684223629367765023193692232777484599756500134939141399512151758202746006205759132720608\"\r\n        \"71364815590661574151517426191360105036665117950178682804107666015625\"},\r\n    {1e-259, chars_format::fixed, 909,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000100000000000000006975424321706683880722731452357836521425904\"\r\n        \"1769576644520388447783555635685142685114991490318067565371250534304941206899940713450546460263134832737073\"\r\n        \"3569301150432818187174576899527240109748644898527344209892574951236799874221394784955341611482688203792287\"\r\n        \"2771340519085664404161341645807336741324458859113386493425467401198063448970638938552710316030795716303021\"\r\n        \"5539363198269628596767208179963758318010314462508924306966078494112058890935196332034580795945818024575817\"\r\n        \"5384691548589042582068854426091971764017863571304275247971240759153512021920926030066766002800617354047947\"\r\n        \"8761531152970377521634059991839649228495545685291290283203125\"},\r\n    {1e-258, chars_format::fixed, 910,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000999999999999999954221803161717745938794541328458586732600625\"\r\n        \"3726262365708608402011134649202091693710213775846048593849306072923870085843861763994543884853897883249200\"\r\n        \"9461861512013041663469458945815094827248008882074788112602884607331358687394446408414476815897163126439807\"\r\n        \"7850123040582626553256833893683569386595819232891673571703738240152177865551187237446371530993802916520751\"\r\n        \"7582547623458590810226137634464463244244213813974999135856472022629587583400314031863766518560557273100193\"\r\n        \"4762465781519467364937950848500287964648595782062173808712520554072741266682236854915063326747229254166297\"\r\n        \"53836788650765392684298393799480209054308943450450897216796875\"},\r\n    {1e-257, chars_format::fixed, 904,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000009999999999999999773282911727875645124810959674825424289323086\"\r\n        \"5201631816076636171760189907319587251981540013129740058219459269489784824749708380967280284093879720735074\"\r\n        \"7080915104760697051247209557065560812956969027145189098674575883386866983583466966422646756831069087364207\"\r\n        \"8227794706374300509281504065615289919255731045401118442139253945178691903822276670625178568566337658226445\"\r\n        \"1447644953061298417153264674990872314159999761978479226173346063277878485906438895601748067400818676317898\"\r\n        \"5793557223936590560880695309841738997546037682582895429124979615652170571876415440655826669990181114289337\"\r\n        \"83000539800198645801199148763771518133580684661865234375\"},\r\n    {1e-256, chars_format::fixed, 903,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000099999999999999997732829117278756451248109596748254242893230865\"\r\n        \"2016318160766361717601899073195872519815400131297400582194592694897848247497083809672802840938797207350747\"\r\n        \"0809151047606970512472095570655608129569690271451890986745758833868669835834669664226467568310690873642078\"\r\n        \"2277947063743005092815040656152899192557310454011184421392539451786919038222766706251785685663376582264451\"\r\n        \"4476449530612984171532646749908723141599997619784792261733460632778784859064388956017480674008186763178985\"\r\n        \"7935572239365905608806953098417389975460376825828954291249796156521705718764154406558266699901811142893378\"\r\n        \"3000539800198645801199148763771518133580684661865234375\"},\r\n    {1e-255, chars_format::fixed, 898,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000001000000000000000006904595826956932286799885905433205720236863249\"\r\n        \"6356225958454292587070947890188525502717489910638533146924940101117230162790452947523732160415285768619822\"\r\n        \"3265908508745598443456328367626486476737569133374330366111004028066552392139065573833136209114950076085418\"\r\n        \"7779701107578527947435543045317286747658060250112833026964952105954086165959416971185153961057252929067242\"\r\n        \"4402091270979802021488173783405934995886263843094369671238713461484188034266107411577415609873348632233226\"\r\n        \"4974846712624420760221444563547896690293990589317682688469043155586069034559546178247422521307848725108176\"\r\n        \"13033601465588606771461854805238544940948486328125\"},\r\n    {1e-254, chars_format::fixed, 894,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000009999999999999999122604209336149554089797581039910831880622885372\"\r\n        \"5384840359241312717046849838531645281143263981120457069920980142732375617676854249774801571278819442602974\"\r\n        \"7078348041827398235031358522011898974074365930369847704200738220510194840034849928140625258892177891585819\"\r\n        \"7789636031034014857231062971947433169862019781096688252383678240824196580178172634498032269020941885145129\"\r\n        \"5617841834599290417707136735860835402501433783057390987455706336559018146750102870890672265406094308144470\"\r\n        \"9936488919352538093353211095511064960852791300276354053615820664052311244219394177202048499806893773501181\"\r\n        \"1498812839271721486511523835361003875732421875\"},\r\n    {1e-253, chars_format::fixed, 890,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000100000000000000006369110076296211841349196258629847923954160807706\"\r\n        \"4687111197238937629070563398974208747938801815442561088464535322362572340411346105148336238772806323553724\"\r\n        \"0075273148331361542824387688166442433564865757673772352556215167587213702041392244458041905038944824152085\"\r\n        \"8014361026360382446300509419081280606117521331473154800090267507708607072437679582636440155034817339888013\"\r\n        \"0627552349172580931864984929784586926793612196754801473459915818115976602076568627042463987299215308449413\"\r\n        \"6356540503792093075311863594597080681921746489171105833351980909457178064211023456375312410414433376301093\"\r\n        \"954474641378737942432053387165069580078125\"},\r\n    {1e-252, chars_format::fixed, 890,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000999999999999999942546556899484388009882199000452562398358152445216\"\r\n        \"0161451133782892621889113880480039987338722120521687770607482063315194094971032192280798179851168055345424\"\r\n        \"6418389642854581888157457137284802793079005944935361041171487975990014606870778740166104521452120975169753\"\r\n        \"9199604535441953471086056593957214801196625150681369790874794281352940559129169925115461831744985491386391\"\r\n        \"0682451466288395280300908728436006053701927038100881943376338560953404944161366925338709207085975268456506\"\r\n        \"7632194555787233618880614830079358232066797000450535955969614943099255665973581088914504805380368632696679\"\r\n        \"899451996931247776956297457218170166015625\"},\r\n    {1e-251, chars_format::fixed, 886,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000010000000000000000152332832175710262520480571519601125030682258243252\"\r\n        \"1872476369467828231790259460372684825682997408640416390302047595015116804564895078023367045773051634605139\"\r\n        \"0189947471300020122093089839125757186207969240167785318058861959192880549966649628146932388145173349804163\"\r\n        \"7660079723390760662374791520705695571837780491114767168915227587928186582777454658648256629068982358826348\"\r\n        \"0382946815508437033102730700819239822424439957691616181100303330772215901239585323902676066296819580790845\"\r\n        \"1921208450674518994234274996142273843571977352068493824997314339827706516555731738176763846387477108852356\"\r\n        \"86628647044926765374839305877685546875\"},\r\n    {1e-250, chars_format::fixed, 881,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000100000000000000005399953725388389998120318149943080589224693162651679\"\r\n        \"3433910530085759720031238100112368002407447171329703552232353080088105938206674274715725109791162112189484\"\r\n        \"0598413607689274503696330211405461224308544619353452681089857988156722733047094822727388807446206021276968\"\r\n        \"6808980535087478365157118306435876037692626160753374410044461342742031115698575426448637285991836628063146\"\r\n        \"2807772969081619558193405229308021079738637319224411130133261154325713463734072281776541971965885921112598\"\r\n        \"9074819935023498237959425669949093224541146041021654331579356245397864401930228576603456024321655258579877\"\r\n        \"312286043888889253139495849609375\"},\r\n    {1e-249, chars_format::fixed, 880,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000001000000000000000053999537253883899981203181499430805892246931626516793\"\r\n        \"4339105300857597200312381001123680024074471713297035522323530800881059382066742747157251097911621121894840\"\r\n        \"5984136076892745036963302114054612243085446193534526810898579881567227330470948227273888074462060212769686\"\r\n        \"8089805350874783651571183064358760376926261607533744100444613427420311156985754264486372859918366280631462\"\r\n        \"8077729690816195581934052293080210797386373192244111301332611543257134637340722817765419719658859211125989\"\r\n        \"0748199350234982379594256699490932245411460410216543315793562453978644019302285766034560243216552585798773\"\r\n        \"12286043888889253139495849609375\"},\r\n    {1e-248, chars_format::fixed, 876,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000009999999999999999795683295041631824212253427522870745850238164863089699\"\r\n        \"9234860610340310794424258705217009089869884827266742574554899060918518449584516531018017783472224120434382\"\r\n        \"9645092988625380078670111672151364882914836141630164012748026739912164495634562351190414953681877666513312\"\r\n        \"0926859682212462165144835562834902460816936151042518593146525289851376288444005371378097501197159164778775\"\r\n        \"6942772620690104203449664476602519718970085399257243740322368884688891716469171969696185869032090376063669\"\r\n        \"3836791272914631037540830957849203000411080197515945489542757892592986809423908251868630826363765207176470\"\r\n        \"5397072248160839080810546875\"},\r\n    {1e-247, chars_format::fixed, 872,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000100000000000000001926497363734756511988019008409706461554281122775314249\"\r\n        \"4514965560659967723973527350942310370031287236420026538511171664609586474954023659804141544823505729751952\"\r\n        \"4164358047864842338503300552952355751493032316115528640748385136508891938078529760162633755158640458112086\"\r\n        \"2448297230313284854472329392363431586546321106664772125063167481723017718645585839037674201232944402645636\"\r\n        \"3211855740084250652581223188423001215800302116219740192577003768928675335028019472737919103955579681683207\"\r\n        \"7808991286134005086884235109479333757196262799956722460189534377628286140100146030563490161247042209424762\"\r\n        \"404523789882659912109375\"},\r\n    {1e-246, chars_format::fixed, 870,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000999999999999999955750343024252552802032434353201080566712419641442466491\"\r\n        \"0487904290489920764040228729067592158993848944158652697716819759305433083798503004057996086614824890989559\"\r\n        \"8228729892871758556198064226504246757415588764133070195193967566892967673058797629490590058148583893457417\"\r\n        \"3607765772114237296339713699403804211431857526814342153065041485882099839167344386269554984147799948730293\"\r\n        \"1572484869911168636458977125865147740411851183840557296116998936650622624899398314962224421400982080087854\"\r\n        \"7032655949536935485227542598996477522595254802810943565704056549108172667224444115599991250720179891686711\"\r\n        \"9260132312774658203125\"},\r\n    {1e-245, chars_format::fixed, 863,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000009999999999999999303444907790145478748933320608426869471802630069181960896\"\r\n        \"6232037640460181737622108169253875424662395761420076227588610045892604175018095664646283419667319283775740\"\r\n        \"8627896585610926246640877052965224544096950053241837102780140476145869899681976406362910607734556183920393\"\r\n        \"2576831597067927969862816097115995498193161108809905140383881533428689002519387846266801728751423176398651\"\r\n        \"3540558575386334807176752225192019733753831924978194442557834355961703347470797499954377741390561853901654\"\r\n        \"6097531848156893317816192006777335028483055241084311512275416582382971737136376395860271060200830106623470\"\r\n        \"783233642578125\"},\r\n    {1e-244, chars_format::fixed, 862,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000099999999999999993034449077901454787489333206084268694718026300691819608966\"\r\n        \"2320376404601817376221081692538754246623957614200762275886100458926041750180956646462834196673192837757408\"\r\n        \"6278965856109262466408770529652245440969500532418371027801404761458698996819764063629106077345561839203932\"\r\n        \"5768315970679279698628160971159954981931611088099051403838815334286890025193878462668017287514231763986513\"\r\n        \"5405585753863348071767522251920197337538319249781944425578343559617033474707974999543777413905618539016546\"\r\n        \"0975318481568933178161920067773350284830552410843115122754165823829717371363763958602710602008301066234707\"\r\n        \"83233642578125\"},\r\n    {1e-243, chars_format::fixed, 860,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000999999999999999995383472526823840488369433929280174613182583991300328317211\"\r\n        \"6837111742408804873936672009431360776919558264619014651235416662662443221344766703649768265849912664257571\"\r\n        \"9596658396397409391067599588296670104783027874933111662855056967241538680133612103296494053784002559407095\"\r\n        \"3894647469850715331067759323643483547422135670370709946620684643300103875377124832439689733145853231360871\"\r\n        \"3234129212323479415408095084823136988741250335228345020495118295568197537015276310411591129586475816249921\"\r\n        \"2384262502079484603183100373718193400495677586862932287419778865178437101302218181775316452331026084721088\"\r\n        \"409423828125\"},\r\n    {1e-242, chars_format::fixed, 850,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000009999999999999999693678798277001234429789931819051795467816555975474754261919\"\r\n        \"3837726638525524292463299758138334526475654155744578942856518333016329335306866080411977462027189495841776\"\r\n        \"8738584622754955002756418715869838267478188546333511089186532261797191953592235164943207416526488924599875\"\r\n        \"4100523646275479931532994788259100561797257546186315833276721231276224260017887501358829899444389947625769\"\r\n        \"5628205428474799363149460585746715433980272002647847146104452158090524210410657844220643333743596458161371\"\r\n        \"3318314275234234745575404953243171796196161954902198634685306144259317462363867434760322794318199157714843\"\r\n        \"75\"},\r\n    {1e-241, chars_format::fixed, 849,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000099999999999999996936787982770012344297899318190517954678165559754747542619193\"\r\n        \"8377266385255242924632997581383345264756541557445789428565183330163293353068660804119774620271894958417768\"\r\n        \"7385846227549550027564187158698382674781885463335110891865322617971919535922351649432074165264889245998754\"\r\n        \"1005236462754799315329947882591005617972575461863158332767212312762242600178875013588298994443899476257695\"\r\n        \"6282054284747993631494605857467154339802720026478471461044521580905242104106578442206433337435964581613713\"\r\n        \"3183142752342347455754049532431717961961619549021986346853061442593174623638674347603227943181991577148437\"\r\n        \"5\"},\r\n    {1e-240, chars_format::fixed, 848,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000999999999999999969367879827700123442978993181905179546781655597547475426191938\"\r\n        \"3772663852552429246329975813833452647565415574457894285651833301632933530686608041197746202718949584177687\"\r\n        \"3858462275495500275641871586983826747818854633351108918653226179719195359223516494320741652648892459987541\"\r\n        \"0052364627547993153299478825910056179725754618631583327672123127622426001788750135882989944438994762576956\"\r\n        \"2820542847479936314946058574671543398027200264784714610445215809052421041065784422064333374359645816137133\"\r\n        \"183142752342347455754049532431717961961619549021986346853061442593174623638674347603227943181991577148437\"\r\n        \"5\"},\r\n    {1e-239, chars_format::fixed, 845,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000010000000000000000759277475233108684608982384831531593387598582983591608678088152\"\r\n        \"6495296189624426979709455112253728656481252609623707518885743635118724171586796539025946776244048864006266\"\r\n        \"4469924388547969595006792298588215800350017811703378421629495689318049951191680360226281426735122753412882\"\r\n        \"9539156216414092509270031986910763086367695391445593758514057541064426431653432522754100974317078691906840\"\r\n        \"5008530211738026804844700883860075238691610755277275140661505025108160714320988751660906591874799129168282\"\r\n        \"5891089050498574078337572256341803279636545528499519728434495081936805860323147499002516269683837890625\"},\r\n    {1e-238, chars_format::fixed, 840,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000099999999999999999067985336682227244656284224215477550517729613770981251451531375\"\r\n        \"4803700583443193665816975331183669118195751175878957889918151400872130798102236373871589770004064462227523\"\r\n        \"7616830816735961241363311555882571426208406291495470335517085756171728640264680266111895065381642305829046\"\r\n        \"3267482636667637282498370046626020550795760273417853730797965291922933006406875916147397503753738389970183\"\r\n        \"5660488221870958805374087741443622319559242693331719116940274774410004713904731268468483132521263549307219\"\r\n        \"82963799748751127599147704580579761285687302745881169393181442384133106315857730805873870849609375\"},\r\n    {1e-237, chars_format::fixed, 839,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000999999999999999990679853366822272446562842242154775505177296137709812514515313754\"\r\n        \"8037005834431936658169753311836691181957511758789578899181514008721307981022363738715897700040644622275237\"\r\n        \"6168308167359612413633115558825714262084062914954703355170857561717286402646802661118950653816423058290463\"\r\n        \"2674826366676372824983700466260205507957602734178537307979652919229330064068759161473975037537383899701835\"\r\n        \"6604882218709588053740877414436223195592426933317191169402747744100047139047312684684831325212635493072198\"\r\n        \"2963799748751127599147704580579761285687302745881169393181442384133106315857730805873870849609375\"},\r\n    {1e-236, chars_format::fixed, 835,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000010000000000000000452385056269749738957374958363937411586701359205253954606231547212\"\r\n        \"9922782363588238983462383764998428403048712490815296123929376907380178547230294435983168516337593604201381\"\r\n        \"4957518073195145493426287108230683567514025983999121921492328385734199812203920124848335464217685194090758\"\r\n        \"2689353425054148102761793301425115103972420368222739757723576790458504488844347543930933698064944859304528\"\r\n        \"9236911499691672094075724362418556266763620337397978233213107947983026866003126727845611570636930442760770\"\r\n        \"896667141459146949297798054884123959586342812486483601353004502243493334390223026275634765625\"},\r\n    {1e-235, chars_format::fixed, 829,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000099999999999999995794466201073065157705805008561139611308159226802046274685060917490\"\r\n        \"6384239327580431406386227303880018694909606461440847125465979951128205680196431578644620908477577938829729\"\r\n        \"7184198338367113220740766762730180528365910488757805298383239560360625550264905029942091825321578161929573\"\r\n        \"1836098117894763380821314793082190649381915259229530730403006333941783317935380572250403817591754796466532\"\r\n        \"1359685995384056034086040135284373694206587306362717705160991368109381051551269182499342610200096234987102\"\r\n        \"040793131263159890576484959971436813478787059179808682785051132668741047382354736328125\"},\r\n    {1e-234, chars_format::fixed, 828,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000999999999999999957944662010730651577058050085611396113081592268020462746850609174906\"\r\n        \"3842393275804314063862273038800186949096064614408471254659799511282056801964315786446209084775779388297297\"\r\n        \"1841983383671132207407667627301805283659104887578052983832395603606255502649050299420918253215781619295731\"\r\n        \"8360981178947633808213147930821906493819152592295307304030063339417833179353805722504038175917547964665321\"\r\n        \"3596859953840560340860401352843736942065873063627177051609913681093810515512691824993426102000962349871020\"\r\n        \"40793131263159890576484959971436813478787059179808682785051132668741047382354736328125\"},\r\n    {1e-233, chars_format::fixed, 827,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000009999999999999999579446620107306515770580500856113961130815922680204627468506091749063\"\r\n        \"8423932758043140638622730388001869490960646144084712546597995112820568019643157864462090847757793882972971\"\r\n        \"8419833836711322074076676273018052836591048875780529838323956036062555026490502994209182532157816192957318\"\r\n        \"3609811789476338082131479308219064938191525922953073040300633394178331793538057225040381759175479646653213\"\r\n        \"5968599538405603408604013528437369420658730636271770516099136810938105155126918249934261020009623498710204\"\r\n        \"0793131263159890576484959971436813478787059179808682785051132668741047382354736328125\"},\r\n    {1e-232, chars_format::fixed, 823,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000100000000000000002498633390800629111780386442221223710809359379314425107102792415453608\"\r\n        \"8112076356335479272712049688094472633140628515750764885721997341514960534233394596286256239516962075107182\"\r\n        \"0472816639887656725742880165051681088610790505067186285993580442319685387564525781781668666428424184684484\"\r\n        \"0209067767442533561117586939952229164792768091892468770567220195808204085597430151664486820063632239017589\"\r\n        \"4927468561142682409524414760486825800532446292623338674019037911022734863907720194144348058048126919728159\"\r\n        \"867652859301665220833572223445350350191397625909672797206440009176731109619140625\"},\r\n    {1e-231, chars_format::fixed, 819,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000999999999999999989230775562792616696072763442691788577420526313078230631466689498733579\"\r\n        \"3799436758533070665868519237873911805890727424688238618595726944166776874057594220647374331494830109058681\"\r\n        \"1264282277412908670889508664537329698372962398608460711914363987494799888127946672804188825082843152917904\"\r\n        \"6832278353469854332227635491460532805914300319662083078680808603282648054817726043254632316322531603586809\"\r\n        \"4653495333631366369994657065598222837617049966736674670709473501471704305005000902500878671404512223275630\"\r\n        \"27908008026052077180979022374130685442417121322478124056942760944366455078125\"},\r\n    {1e-230, chars_format::fixed, 817,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000010000000000000000464396689151344957708425250099245062264974342811838633347646649480175933\"\r\n        \"5135596462478259638716834667872150467156197971992950003945212977393024232997570081916752333744951362797040\"\r\n        \"8064968717547624093523774421044995987488706419099041487486686846180862681556445048241853678050810632010015\"\r\n        \"2457172669986243785448097443593469531357092784822504818670379709616765366682468006790097312245968621293462\"\r\n        \"0473997781040987303938419284302791059489107019314139818789224754807352395205225648090417259273233816851797\"\r\n        \"149977006703310702512814408808214904078592866198960109613835811614990234375\"},\r\n    {1e-229, chars_format::fixed, 813,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000100000000000000006932322625607124740075042963681759328612819746842611641608385512773119893\"\r\n        \"9920880133372808307294915835253634304557674620371755311403903916831264299662212320939559412636114716811326\"\r\n        \"2338270949150390473752495313136755889923393923048152348239056346740082016672363763218398489397622731424026\"\r\n        \"1109283241013239707167944551887261202427286201031744314152971803328792940845510364876069718542296554636090\"\r\n        \"0496155589319167455351587356310161328165499600930970634670206508434761332673122973230694773644784504899948\"\r\n        \"93647488342551896278779277366273448013345159779419191181659698486328125\"},\r\n    {1e-228, chars_format::fixed, 810,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000001000000000000000032709534510572444792897782233788653990718976368838511485973150840189429998\"\r\n        \"2170153196284692350924051848022268917645627796641468762810652881896291481637939181043016923375529746658571\"\r\n        \"6365369112717512121288935488378822658652663517557723908435557308497536948997025139386197551743964733058282\"\r\n        \"6491927751719567428687923663631557802571128365410305102342922718709701024121818897159151648101200079137387\"\r\n        \"2862711430642963898037561350585601549264125484676547198254721718567815236797365855082592841848703666887850\"\r\n        \"37747177197659862532354876733797777177414900506846606731414794921875\"},\r\n    {1e-227, chars_format::fixed, 807,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000009999999999999999448366743213753185340514284665191996817368457298282596537074605500891845381\"\r\n        \"2773976664205546180637962371884910106109436196588663198625257944970478456758975129968316362100479351673139\"\r\n        \"5237522036301698423224931452058556812576018065406049309435425271296572264531551566715079303865345382215343\"\r\n        \"4497565715287762855082712110530276704869676176331738082946139637219529017219354933154423585289629578009555\"\r\n        \"8254847205260583248896120405471733915260362255569652419810976406962998209560925497441410948107643498199168\"\r\n        \"08006822507980219193039241043496900829268270172178745269775390625\"},\r\n    {1e-226, chars_format::fixed, 803,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000099999999999999992140391160425608486502573412858067853267494422609219249843660980606245241543\"\r\n        \"7266285845678455596772807429948356873502783913017233507635857119058287608601973485118222629925278543631190\"\r\n        \"3265436120687856793144185369306448728558535026937320361233858543155596710812316128092403135788648626506813\"\r\n        \"0517759014456531399369722369875296859785808489260546321506496239188673574863325229045321464303305877790712\"\r\n        \"8222426449488350538349222453692588279587908979174338697479788659722904339841966832055396226731386526846785\"\r\n        \"6149502649681977558236700698302001910633407533168792724609375\"},\r\n    {1e-225, chars_format::fixed, 799,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000999999999999999958896331951646858735466845069282312371173986632069899946869970996505223811742\"\r\n        \"0238551198816655321437134921895475736493087976082710734226128480926827429824179884221282156525025005915181\"\r\n        \"8410909084144606957123920113530397640811680303343967342264892148517982060174353905858269803723369395414073\"\r\n        \"6503960359302868417015603465592491620433337277514815342343364519992601305916837930435844860520897214784655\"\r\n        \"1440994144763216593283930153321896764130507016098354984877493155742287490696278598293374336834640550786179\"\r\n        \"121214422959164173920765250613840180449187755584716796875\"},\r\n    {1e-224, chars_format::fixed, 796,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000010000000000000000188842045074720969281726225744049265127724544816342318643633489012136580458296\"\r\n        \"3596595860680142873716319177545269388374861295393117868142201454771495799112919370837715281606083172804275\"\r\n        \"6213856877702693982152263862758542091738083576971893101469828956572059834562621057530513170623824039675826\"\r\n        \"6261527028829554943250110925357284565537410933697787459888079249619861975705749544080532085014387137886982\"\r\n        \"1877615845707545289506591395555191133327745750663038010048636493634780383388550426764336480678810024954958\"\r\n        \"759532602026627590152685343127814121544361114501953125\"},\r\n    {1e-223, chars_format::fixed, 792,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000099999999999999997089390646281190637400800057030683519949368020198276633036864657744691065855954\"\r\n        \"6277287626692711462403432106728597696196760677403094474374681383689185984160229479378003085214166818823098\"\r\n        \"5300440486973944534218136807948895448410591421461173584131029794582684483073554583722610639117199712477545\"\r\n        \"2839882801888583247748499098113898765741804068580802307245320098647828424758533523028653011700551458546375\"\r\n        \"9034763272472418041727595056862123397096052789194474810296725446652560022479388716998619908128864112804247\"\r\n        \"21621904078638909396659073536284267902374267578125\"},\r\n    {1e-222, chars_format::fixed, 790,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000001000000000000000047678383334268211260671395776863781300739719049425111184760170295473706478191689\"\r\n        \"7791611948666591020190475766871515962797243198480292056504144461304211953105722457766426545688306735745508\"\r\n        \"2414457510587369939053397193673361987629823786735854730386454284033466631578041702546443465108648073266988\"\r\n        \"4805027801397291433526753468482137891534924980161179738620759347290945564368725914713215532098633310638894\"\r\n        \"6209955678372738070689052947657840949863003370919232746001486301649501207291735980302117459836419315967918\"\r\n        \"227902079542079860630110488273203372955322265625\"},\r\n    {1e-221, chars_format::fixed, 787,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000010000000000000000169645925856856893060060376942410028602413035104481732430035608082629881503388323\"\r\n        \"7841176759708004617280138870373003624653886287005531314012122115392711085043513921718682682696513167396990\"\r\n        \"6504364542482001003045855479995989862202599578862071747559917487508179112410433564183086355339876938703742\"\r\n        \"2425478883927078511100484735448777978881712624199170721537360029658810376553696409425413660613858205688403\"\r\n        \"8650264969133150093238119960431981583020131793294388887877935675999408142925964561757501084173080407977398\"\r\n        \"016174108708042922444292344152927398681640625\"},\r\n    {1e-220, chars_format::fixed, 783,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000099999999999999999239355998681967174227375122814278010784257107926662288959827321849441348805654645\"\r\n        \"7812225781416801495804438316992788219990497287676199131886641172731843282325453969622164633472698153505172\"\r\n        \"3921960917686422930553623146058858509260889480648913025162172052469893497144467951580077187425939035308281\"\r\n        \"9256395798904098517668447759506972297076828822690693898011732750582941628468462192600203323158782851279699\"\r\n        \"8908315174577656023161923475148392505322102605760380301683938036029249989328483687465622728201902066159706\"\r\n        \"05896759337838375358842313289642333984375\"},\r\n    {1e-219, chars_format::fixed, 777,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000001000000000000000031707212145005299844245409573899936511680542969157103455046733362124132947708203930\"\r\n        \"7714926864779929789995589357723850624678822194827815450619691426442713913009503657256241430605917862487469\"\r\n        \"7166561291001622904015137923005226896850595734038001458613765686489297002802562559813353729824675980749067\"\r\n        \"2538246634907970670066871114762642838613046935723152057907208241912010477780652352464965759264615802466419\"\r\n        \"0592504013838078779127652818226698251288471292539940250366079943729802932183427756406437098481452879425446\"\r\n        \"23405183301656506955623626708984375\"},\r\n    {1e-218, chars_format::fixed, 776,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000010000000000000000317072121450052998442454095738999365116805429691571034550467333621241329477082039307\"\r\n        \"7149268647799297899955893577238506246788221948278154506196914264427139130095036572562414306059178624874697\"\r\n        \"1665612910016229040151379230052268968505957340380014586137656864892970028025625598133537298246759807490672\"\r\n        \"5382466349079706700668711147626428386130469357231520579072082419120104777806523524649657592646158024664190\"\r\n        \"5925040138380787791276528182266982512884712925399402503660799437298029321834277564064370984814528794254462\"\r\n        \"3405183301656506955623626708984375\"},\r\n    {1e-217, chars_format::fixed, 773,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000100000000000000008202868690748290381476913225646909670859314698821691857882076234597017385606232549615\"\r\n        \"9354324956318077489313327810269020838934932195207033926388944132179370789585752738052315333095636160522433\"\r\n        \"3865999709748671006813819489852840627997292130055660356358349358096040294065285614945850494824158416186469\"\r\n        \"0533610161771210159633481996958026945433808300790479747825558409773104494357129833751939469090353324327685\"\r\n        \"2447491695682251993842794365744794481480119325819590928025541052955082197362408504670566355336611824577985\"\r\n        \"8852984034456312656402587890625\"},\r\n    {1e-216, chars_format::fixed, 768,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0001000000000000000041771507097500820638350154110413768551063063772969066479801539158893341129379028243849\"\r\n        \"0650141736579986975098141799618541420927620252666428348531029418529871986774431281097775150925562311020640\"\r\n        \"0981032220795665225737977383887198736471171490512487603729247907629682830180619080574684849389101431626741\"\r\n        \"1664528249918956372763855804030324781305165180102605821417710349154591213236141639476486349873348621790617\"\r\n        \"8898194461827527289807843312848189993737272683591382148915037089752510141467022134490811495835527189512959\"\r\n        \"01206322014331817626953125\"},\r\n    {1e-215, chars_format::fixed, 767,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0010000000000000000417715070975008206383501541104137685510630637729690664798015391588933411293790282438490\"\r\n        \"6501417365799869750981417996185414209276202526664283485310294185298719867744312810977751509255623110206400\"\r\n        \"9810322207956652257379773838871987364711714905124876037292479076296828301806190805746848493891014316267411\"\r\n        \"6645282499189563727638558040303247813051651801026058214177103491545912132361416394764863498733486217906178\"\r\n        \"8981944618275272898078433128481899937372726835913821489150370897525101414670221344908114958355271895129590\"\r\n        \"1206322014331817626953125\"},\r\n    {1e-214, chars_format::fixed, 763,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0099999999999999991294853170555815447380942404303671844696679748417593976294002496024747640399247703645613\"\r\n        \"9219669145746563738570562978920712197817481457391341938411132808559707770852376293656497482700456956882004\"\r\n        \"0834461538432173005728133703533459726557209837131653219566175297137847666946046014646053306115669486530319\"\r\n        \"1549347298089165733677047427050182759982813113559251953651435370993927616364020573917965857675783303466730\"\r\n        \"5268247784355081422352221012897456633272684485689532862584208239791227856442081540328491173763580945887952\"\r\n        \"111661434173583984375\"},\r\n    {1e-213, chars_format::fixed, 758,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0999999999999999954171883830979807646462457664597374480277602696589740312335709503814153116116173422821875\"\r\n        \"4739105896672465453685204134594097641997354763518196711125117027765048609614168748152231178543046833402459\"\r\n        \"1604649115951648675104072027931121811363903856491275086409322462035869793031218683492314286099010628963343\"\r\n        \"5184601601072366273437779793645172785535986805036776138497072252227896026840664535117799791666885436571492\"\r\n        \"3246312718423286410504962999123503102181513251931111118384484751383594693253237511293418648961051076184958\"\r\n        \"2195281982421875\"},\r\n    {1e-212, chars_format::fixed, 757,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"9999999999999999541718838309798076464624576645973744802776026965897403123357095038141531161161734228218754\"\r\n        \"7391058966724654536852041345940976419973547635181967111251170277650486096141687481522311785430468334024591\"\r\n        \"6046491159516486751040720279311218113639038564912750864093224620358697930312186834923142860990106289633435\"\r\n        \"1846016010723662734377797936451727855359868050367761384970722522278960268406645351177997916668854365714923\"\r\n        \"2463127184232864105049629991235031021815132519311111183844847513835946932532375112934186489610510761849582\"\r\n        \"195281982421875\"},\r\n    {1e-211, chars_format::fixed, 753,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010\"\r\n        \"0000000000000008608661063232909779895216525359147378687217937631390207040190004322751859491200185919223148\"\r\n        \"7483210213431527121984203983241976622948337025348415756924164270255549310346734523145150346617408006619780\"\r\n        \"3675705716738825213682400424000035789768140905045233680154483213952778845764600199401420591442107267582981\"\r\n        \"9621318565063487077315746770387737980112494725839726484177158755147958908213268211985167937585312266489090\"\r\n        \"5058431801519740884977218360010076443645211604561509452017228249180630551698825692064076520182425156235694\"\r\n        \"88525390625\"},\r\n    {1e-210, chars_format::fixed, 747,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100\"\r\n        \"0000000000000043873898055897324950155458825113362008761914838802170307820719070615241641697336759553717563\"\r\n        \"1399716386523329608757910156156686475202216098192174707121765922553290386891794166100999490773361133801437\"\r\n        \"8482515978351587486343371821159223006872592231515616676033673706357229921189260073470231573489730687834203\"\r\n        \"2497478585588919625836612005091909636280741747478504411467800247932849164862875079195075308983463115003359\"\r\n        \"3217406145785889379433244567589512514871679528973822156752272537178589592588018319929688004776835441589355\"\r\n        \"46875\"},\r\n    {1e-209, chars_format::fixed, 746,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000\"\r\n        \"0000000000000438738980558973249501554588251133620087619148388021703078207190706152416416973367595537175631\"\r\n        \"3997163865233296087579101561566864752022160981921747071217659225532903868917941661009994907733611338014378\"\r\n        \"4825159783515874863433718211592230068725922315156166760336737063572299211892600734702315734897306878342032\"\r\n        \"4974785855889196258366120050919096362807417474785044114678002479328491648628750791950753089834631150033593\"\r\n        \"2174061457858893794332445675895125148716795289738221567522725371785895925880183199296880047768354415893554\"\r\n        \"6875\"},\r\n    {1e-208, chars_format::fixed, 740,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000\"\r\n        \"0000000000009790617015372999419661524305356534508474305344681718696392463071555895614181210808709101538629\"\r\n        \"9317014369701487094559614177342856068209341696591277063520820095610986410849952974964457928628136726878610\"\r\n        \"7392870031851823895858131727587566710787775975461843668795650081554484785388973176651872988184843246859220\"\r\n        \"5358362884773709440730729953731144728132480145451776225664799647267625896822809123552851457662733885941786\"\r\n        \"47053338632634301467086529203914974494638270274650781929885279102065975820323728839866816997528076171875\"},\r\n    {1e-207, chars_format::fixed, 740,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999\"\r\n        \"9999999999925002899440665452607943933522518999241603409901169133664392113451739069741444839838971662352189\"\r\n        \"4118120741222031945000987799853887146485996889950967392192910067087537015042366073980296044936620173271678\"\r\n        \"1407990024339830589910929702587154354964069389812802594251558548937082527074825218399829427071649638547547\"\r\n        \"4047490419521194981082357312025652079459028731275039732335201145229557831098452706078256678501822520030527\"\r\n        \"21823215230505509587922520378271037011702981119991813615245049469415494769464203272946178913116455078125\"},\r\n    {1e-206, chars_format::fixed, 737,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000\"\r\n        \"0000000000287448618685041775611467192411468067474871960285579656441116238100310015816652007878432741726553\"\r\n        \"5493345146977353453580801839986912678504489355280493380020846005009332711166642793788659897434684305803356\"\r\n        \"9204162008468756111131622465602620067122836086961830504745239089017417231637691472711696999377193365743421\"\r\n        \"7691734764507346368173226471971292005784923652206732469228783416975785133762358237484114173771323236629297\"\r\n        \"10493178880080126376881833747982617725108140959014170254096944001620528297280543483793735504150390625\"},\r\n    {1e-205, chars_format::fixed, 731,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000\"\r\n        \"0000000000108033855441385090695930971617939141258485306125427711618642104781981975760643786814417768719777\"\r\n        \"0101084177088110526285554822674350215326172337416081911963805825736093616351809127258067112830889529802701\"\r\n        \"1710255377833027212590023483409996624609315032728159548173314624449927087338409957214562717343408376719690\"\r\n        \"4339132793619072862133189115140196827996872950183764303283108930610633143549365903637015367704970936095571\"\r\n        \"25569051267401182441733990905766850296205863565885611603245575196297068032436072826385498046875\"},\r\n    {1e-204, chars_format::fixed, 730,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000\"\r\n        \"0000000001080338554413850906959309716179391412584853061254277116186421047819819757606437868144177687197770\"\r\n        \"1010841770881105262855548226743502153261723374160819119638058257360936163518091272580671128308895298027011\"\r\n        \"7102553778330272125900234834099966246093150327281595481733146244499270873384099572145627173434083767196904\"\r\n        \"3391327936190728621331891151401968279968729501837643032831089306106331435493659036370153677049709360955712\"\r\n        \"5569051267401182441733990905766850296205863565885611603245575196297068032436072826385498046875\"},\r\n    {1e-203, chars_format::fixed, 723,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000\"\r\n        \"0000000364909283964494690243191939081376830412598520594029984319306805834501324924016544053590211885834786\"\r\n        \"8651431172545325847430820148366422456613549311381232891696323291335249035452120486258789557131004593821225\"\r\n        \"3440220260683060295956098435873780428169370394754578725053224457696098050769606268964403117192073603428532\"\r\n        \"3924780348069311122000588899328256220789832219472160120915723671907243196436298677829712131554556674824299\"\r\n        \"153355310153286540401954520562788798446562476933408003532122165779583156108856201171875\"},\r\n    {1e-202, chars_format::fixed, 722,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000\"\r\n        \"0000003649092839644946902431919390813768304125985205940299843193068058345013249240165440535902118858347868\"\r\n        \"6514311725453258474308201483664224566135493113812328916963232913352490354521204862587895571310045938212253\"\r\n        \"4402202606830602959560984358737804281693703947545787250532244576960980507696062689644031171920736034285323\"\r\n        \"9247803480693111220005888993282562207898322194721601209157236719072431964362986778297121315545566748242991\"\r\n        \"53355310153286540401954520562788798446562476933408003532122165779583156108856201171875\"},\r\n    {1e-201, chars_format::fixed, 720,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999\"\r\n        \"9999945839818400838286643877890376724456471851854624142271863625376172236531891325900070089021825036064707\"\r\n        \"8131670538558640710995517318203609118298145276224615168802705395697729075782861950146917558335246313038824\"\r\n        \"5863311858939236135449819299603843204043056259170152128551370517542139943236326734358677709290961889224054\"\r\n        \"9533782349452735577549479293830826276733698466709185184735730814678536219704539366158320724745122774033477\"\r\n        \"753696070790004781196766668518623271037326465104921879856192390434443950653076171875\"},\r\n    {1e-200, chars_format::fixed, 715,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999\"\r\n        \"9999821002623990827595960544117892897470996150535982465624909474979367219721317562018041970215704550302992\"\r\n        \"9362492249482183238301163255790637355208596209840847691345548908285988635545366204397328202413315406723085\"\r\n        \"1267975426859535195138290147135230492006495456852402792598006183692059967260467991913313132575212706757286\"\r\n        \"7114833324440862265532435494287445976335078589119159474703853650968495892746707328834776970293406573920527\"\r\n        \"8643004860546448479624082362272590048489495639927326919860206544399261474609375\"},\r\n    {1e-199, chars_format::fixed, 714,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999999\"\r\n        \"9998210026239908275959605441178928974709961505359824656249094749793672197213175620180419702157045503029929\"\r\n        \"3624922494821832383011632557906373552085962098408476913455489082859886355453662043973282024133154067230851\"\r\n        \"2679754268595351951382901471352304920064954568524027925980061836920599672604679919133131325752127067572867\"\r\n        \"1148333244408622655324354942874459763350785891191594747038536509684958927467073288347769702934065739205278\"\r\n        \"643004860546448479624082362272590048489495639927326919860206544399261474609375\"},\r\n    {1e-198, chars_format::fixed, 709,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999999\"\r\n        \"9912480209922453371527875490677164389094309711567966324486489024148909926870130022474709662059250616363651\"\r\n        \"1458147080229307187686231418190870453248079045903136497403860177328871032921253477527517381647903616019374\"\r\n        \"0905029892256142110930361702937746498070435576271029899614824781239174025784274712636393641727258288515133\"\r\n        \"0297445100692980466016178680741421505873825882672883019848628293687919700018508771176310243642321343588723\"\r\n        \"5808111997818538852504458228488519455634531141186016611754894256591796875\"},\r\n    {1e-197, chars_format::fixed, 706,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999\"\r\n        \"9867415992308580521339330065300981042999687430669319116912447295225761084825312804261628455378686578950031\"\r\n        \"2352968060842582729449985231219265253670571132968779770316262053501963893109782372131737653104498093944552\"\r\n        \"5237102055333446740222582475620693808214863591715625504796712750704515727309674899109745652408715015429070\"\r\n        \"2290582669791096257253741452781427086834611138654851004211475503937005796475478242977894817205464619503906\"\r\n        \"1999776584332685697351547605103705418372328495024703443050384521484375\"},\r\n    {1e-196, chars_format::fixed, 703,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000\"\r\n        \"4615071067758179661877901921244507646449596826610438145504929382150905377245228678732539232076309112008470\"\r\n        \"5701658676821914115201220706677138306223956721187116073383902776725667442275804496169887224048676409452018\"\r\n        \"1865445615510672449577548326152768702232698549198867117154847013547361028832171173063930405176207196512621\"\r\n        \"7434880000801295349273051690751967093116929881956676487916295575832528335077906679497287218312655663972425\"\r\n        \"1347018692505234351971198612785141079939421615563333034515380859375\"},\r\n    {1e-195, chars_format::fixed, 699,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000009\"\r\n        \"3677999834960792206655829358322654196117748425442357266092945260655410004389091876255429747078637700149971\"\r\n        \"4392411315387835717623154222647269218385530343865707695609285700904902512181891160518957784516327854572125\"\r\n        \"4609856652516364874589271821094331982999486548329567725050226187491240334205089186371095100474528302901573\"\r\n        \"0581226431135615706615614211021240729335846782832096445575280050025046313364060792719584553190632391191156\"\r\n        \"426420971847936254735776662183610596912330947816371917724609375\"},\r\n    {1e-194, chars_format::fixed, 697,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000017\"\r\n        \"6343371831543992660529331249185298255229001705015959684231029580212400332902037339673698649737631720455462\"\r\n        \"5910920399179244126456387732458513685519893326744325567768730070677375691037372424068209140690258384890157\"\r\n        \"0812158566609402684872101257877000459234848581841332394474165042630322607916852572002294225345981624610040\"\r\n        \"6093441541393561643994585254187290522693700416075659393155611833054255732280703963248447610881111888441082\"\r\n        \"9937732489961321031245178314605936975567601621150970458984375\"},\r\n    {1e-193, chars_format::fixed, 693,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000480\"\r\n        \"5180224387695644229409161828017957376083947247790048749103987907490802172975899088259381781571298328731633\"\r\n        \"1161975010588893463664495300641850848540573715094261230983808460260354633499880965167566224794664492225960\"\r\n        \"9267217500311011092803480391035282075388553424230703368854037755431549015704682886857569371057021863723165\"\r\n        \"9809706493785998128592079965973372309596073809737814181944872999327386928246655488274067792911966978292755\"\r\n        \"019478367894242808178173476107986061833798885345458984375\"},\r\n    {1e-192, chars_format::fixed, 689,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000009671\"\r\n        \"9746341033047924279945207658819170941542355639987717999738952760776803233047401946952142362832681274148446\"\r\n        \"4464086406632169822254840623325932378871984313358701162582208658389109905017317243443259334219935215449851\"\r\n        \"1002284350581858833354288906597260482526615935385104474338574820368657141625343537929727592125508519195818\"\r\n        \"0101722215466088304260438445341196418505852481077665825668804693831142969500408575374144874733239285038351\"\r\n        \"50271772586917651270965734511264599859714508056640625\"},\r\n    {1e-191, chars_format::fixed, 684,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000018851\"\r\n        \"0357855833015531025794646529958154524177425806481491858204348633867528277859442439788230874411644952170619\"\r\n        \"9131483254429935252790204362740541493259888534929589981916101691322081929877050966151039961826707463454641\"\r\n        \"6741093946270621848431129126061569167008852264601912170614591946835899662997200669632733816370447080531648\"\r\n        \"8942705712963170749170163883692391024336694671584274157166851729395050702462426671605977617515280816610694\"\r\n        \"100232507863790232249812106601893901824951171875\"},\r\n    {1e-190, chars_format::fixed, 683,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000188510\"\r\n        \"3578558330155310257946465299581545241774258064814918582043486338675282778594424397882308744116449521706199\"\r\n        \"1314832544299352527902043627405414932598885349295899819161016913220819298770509661510399618267074634546416\"\r\n        \"7410939462706218484311291260615691670088522646019121706145919468358996629972006696327338163704470805316488\"\r\n        \"9427057129631707491701638836923910243366946715842741571668517293950507024624266716059776175152808166106941\"\r\n        \"00232507863790232249812106601893901824951171875\"},\r\n    {1e-189, chars_format::fixed, 680,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000006868701\"\r\n        \"0541071139230656093540176722762965457494938625473226728286317716385087153277173881747423691735233733148042\"\r\n        \"5748697404066355343545355987256216235425947807033983401593202256625288686656870585123412526520006572271804\"\r\n        \"4141366438132039890265548760463198829352880172135701718813195122032958508119088381804076349661547184462886\"\r\n        \"7039623564970661696806504831291784719866596066739998086041666310153325768908848417267914059823251822529949\"\r\n        \"34771483936941649517393670976161956787109375\"},\r\n    {1e-188, chars_format::fixed, 676,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999949080671\"\r\n        \"1279003288045276597589197780889341620892794798955285494428273252676646716781421147290166903654612945415195\"\r\n        \"5078046974915631886855486755712556527769214532540188976339227580242590091726130570768133012817820279334756\"\r\n        \"0646340915643877770992219901281217210305112634689385411635940697697772079614369773304090393811332693476932\"\r\n        \"3938981202020534253102253223653472329934866867898003995860822205975125145100134012595485199148434350246549\"\r\n        \"6900111219247264671139419078826904296875\"},\r\n    {1e-187, chars_format::fixed, 672,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000128707188\"\r\n        \"1492476103179615777559014858175085297229769087030091149268886719695666186429239047216709109600659513166516\"\r\n        \"3628080766478567127744590846990129685640217526999996641220515727814150383088373870166622140883511824725097\"\r\n        \"0555800973380223745459626764016284546910801475787890257671463097680723471218439304969827153068735740912975\"\r\n        \"3828502407864450344157439379278055932581168942990583236239373502727958352272540979734347453266124169414530\"\r\n        \"431510002017603255808353424072265625\"},\r\n    {1e-186, chars_format::fixed, 669,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999999991080664251\"\r\n        \"5685669468166560948917555793244147559468553310665132212910400110089477566451949283126449927134114187432183\"\r\n        \"0719031387629699130410335832068266329233020044430256366953318471929512377650648101901549205550173745210388\"\r\n        \"0079740662739100885997423620897046367353212695574324315721733045559191910988527898835500091400816510831330\"\r\n        \"7265977876098778431415879508887237194091685205737139920295311939652273102386196136871547144152751022960767\"\r\n        \"812719495850615203380584716796875\"},\r\n    {1e-185, chars_format::fixed, 666,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999992457903555\"\r\n        \"0769427190702384102556300240495118897318633583737556367331737795832250047243022343589628622320989428185675\"\r\n        \"1684524093544768480387939423346907509683442248860244031547895168991055402371205817132869681781293468428540\"\r\n        \"4623559195896101408764988363096856487570543454179869245160513905576261519452200195257172428300492294700692\"\r\n        \"0812148381353584395426909360018948994676885850720938739740504097541214386575670652490890549595435599083970\"\r\n        \"146239153109490871429443359375\"},\r\n    {1e-184, chars_format::fixed, 663,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000577789123865\"\r\n        \"8996131979318037932608940869380335394251139654065437579139271517822295534218459534497321031048674712767507\"\r\n        \"2798922673429902214156043054783028835660356925063883211596635287478007030629856556267717828049382814882687\"\r\n        \"6844812507001754477975900863979707388012766529291701155150606655637354471057371607789096397343540438105999\"\r\n        \"3340440776462244604414007769362106376849128854005703691704118583560010767466380795112258360497758946650037\"\r\n        \"614745087921619415283203125\"},\r\n    {1e-183, chars_format::fixed, 660,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000552210532137\"\r\n        \"9546439214826804069721900978370182573992966007135384544817566702224594847878706556164931847776503680389028\"\r\n        \"0359772830441282859347239977318658445996093758947288947024884094240446250956178483165010198602243104048612\"\r\n        \"3574360685691621657150870775707933781669009392972941923142325757375630498290758836151987058726464452267365\"\r\n        \"1652752061211240842980764340240132327849125765686506562648564970417172460986413789495760688630365820017686\"\r\n        \"928622424602508544921875\"},\r\n    {1e-182, chars_format::fixed, 655,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000047327550973547\"\r\n        \"8783436775096642748159071507167196688077104339505775420776854830232832433234175872115546179446984382178638\"\r\n        \"4633359535274742851177924337279623744820741523005234821780591186721454952300881467747446641155111398712239\"\r\n        \"4733721931523601552373810669792458604359341129281976258333183965739618681171246295431685904936163953014677\"\r\n        \"0540766239402050039082150229448774803628559851829308461626616625635206319283291187972190217081447372038383\"\r\n        \"0368518829345703125\"},\r\n    {1e-181, chars_format::fixed, 654,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000473275509735478\"\r\n        \"7834367750966427481590715071671966880771043395057754207768548302328324332341758721155461794469843821786384\"\r\n        \"6333595352747428511779243372796237448207415230052348217805911867214549523008814677474466411551113987122394\"\r\n        \"7337219315236015523738106697924586043593411292819762583331839657396186811712462954316859049361639530146770\"\r\n        \"5407662394020500390821502294487748036285598518293084616266166256352063192832911879721902170814473720383830\"\r\n        \"368518829345703125\"},\r\n    {1e-180, chars_format::fixed, 647,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000100000000000000002057206575616014\"\r\n        \"5924821392633743555743200414935928126274000788854023831209463312122670238802527341716045037053793207408927\"\r\n        \"7055554752311772624638861626007860251046700554453379680027103035857978894785962064514606187019596944752529\"\r\n        \"8004828377487516462014480565606130025102292156833976111083107487029791428250521772812410162639151759642079\"\r\n        \"7228903793667940914646586013840582754068644705219304713639779589857802525503308044285688538366230204701423\"\r\n        \"64501953125\"},\r\n    {1e-179, chars_format::fixed, 646,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000001000000000000000020572065756160145\"\r\n        \"9248213926337435557432004149359281262740007888540238312094633121226702388025273417160450370537932074089277\"\r\n        \"0555547523117726246388616260078602510467005544533796800271030358579788947859620645146061870195969447525298\"\r\n        \"0048283774875164620144805656061300251022921568339761110831074870297914282505217728124101626391517596420797\"\r\n        \"2289037936679409146465860138405827540686447052193047136397795898578025255033080442856885383662302047014236\"\r\n        \"4501953125\"},\r\n    {1e-178, chars_format::fixed, 641,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000009999999999999999520780235996475509\"\r\n        \"3254973303558352972348764236955198179673189484181712023085285155160314218797407492929839348350198064433601\"\r\n        \"7773388789574064216571704500430381961642408451391728506514300696193707641236920632565789008124705298570090\"\r\n        \"6437455381356119707601934668842017337283098214303282216076742448367510473280588070058851533740829256847796\"\r\n        \"9874021853305965111138747038612487557305308227775860414375917728095925426923251677635562373325228691101074\"\r\n        \"21875\"},\r\n    {1e-177, chars_format::fixed, 640,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000099999999999999995207802359964755093\"\r\n        \"2549733035583529723487642369551981796731894841817120230852851551603142187974074929298393483501980644336017\"\r\n        \"7733887895740642165717045004303819616424084513917285065143006961937076412369206325657890081247052985700906\"\r\n        \"4374553813561197076019346688420173372830982143032822160767424483675104732805880700588515337408292568477969\"\r\n        \"8740218533059651111387470386124875573053082277758604143759177280959254269232516776355623733252286911010742\"\r\n        \"1875\"},\r\n    {1e-176, chars_format::fixed, 632,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000999999999999999995914210579815611727\"\r\n        \"6035951784059463761038168120327142621839870096294152571635463170860840212881656728162453684883657736746979\"\r\n        \"5392411220011109485295768465799357318010252751732178407974254554038401714686355665848001217909837164713986\"\r\n        \"2650009648925666366345267957544784796861339452365270710650645131895517841440516521543696105241114955830918\"\r\n        \"044906619383659773914538196977917810231720960348114221212241330138947859040854382328689098358154296875\"},\r\n    {1e-175, chars_format::fixed, 631,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000009999999999999999959142105798156117276\"\r\n        \"0359517840594637610381681203271426218398700962941525716354631708608402128816567281624536848836577367469795\"\r\n        \"3924112200111094852957684657993573180102527517321784079742545540384017146863556658480012179098371647139862\"\r\n        \"6500096489256663663452679575447847968613394523652707106506451318955178414405165215436961052411149558309180\"\r\n        \"44906619383659773914538196977917810231720960348114221212241330138947859040854382328689098358154296875\"},\r\n    {1e-174, chars_format::fixed, 630,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000099999999999999999591421057981561172760\"\r\n        \"3595178405946376103816812032714262183987009629415257163546317086084021288165672816245368488365773674697953\"\r\n        \"9241122001110948529576846579935731801025275173217840797425455403840171468635566584800121790983716471398626\"\r\n        \"5000964892566636634526795754478479686133945236527071065064513189551784144051652154369610524111495583091804\"\r\n        \"4906619383659773914538196977917810231720960348114221212241330138947859040854382328689098358154296875\"},\r\n    {1e-173, chars_format::fixed, 624,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000001000000000000000040802466047507705981738\"\r\n        \"7500126561010283827794411329843068069293894692053641056977569406164586017945941785256987144241461175064587\"\r\n        \"9228256918309821296094530706786339470126146992930030675499927138062607864511092939560033079687847803826280\"\r\n        \"8188478558890667044712256648069091058093906931208992098479034123455647143387065578043861947100769387366612\"\r\n        \"9072197794446443422556352914330611026469713197725405241789164989540950045920908451080322265625\"},\r\n    {1e-172, chars_format::fixed, 623,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000010000000000000000408024660475077059817387\"\r\n        \"5001265610102838277944113298430680692938946920536410569775694061645860179459417852569871442414611750645879\"\r\n        \"2282569183098212960945307067863394701261469929300306754999271380626078645110929395600330796878478038262808\"\r\n        \"1884785588906670447122566480690910580939069312089920984790341234556471433870655780438619471007693873666129\"\r\n        \"072197794446443422556352914330611026469713197725405241789164989540950045920908451080322265625\"},\r\n    {1e-171, chars_format::fixed, 618,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000099999999999999998334549904886182533644575\"\r\n        \"1824815903073465707275884638649689563143274274027219743913926814938840349574834806876025069429390711572561\"\r\n        \"0244967709339121567716762527719200148820105916795361790584957049666459647214626236474966227897344883106057\"\r\n        \"1957662836356214942355379586519448624820508680799184525163927169525584371276921407873336343892803511244586\"\r\n        \"6451272840010194777314250133539987861677276049891804898805958146112971007823944091796875\"},\r\n    {1e-170, chars_format::fixed, 617,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000999999999999999983345499048861825336445751\"\r\n        \"8248159030734657072758846386496895631432742740272197439139268149388403495748348068760250694293907115725610\"\r\n        \"2449677093391215677167625277192001488201059167953617905849570496664596472146262364749662278973448831060571\"\r\n        \"9576628363562149423553795865194486248205086807991845251639271695255843712769214078733363438928035112445866\"\r\n        \"451272840010194777314250133539987861677276049891804898805958146112971007823944091796875\"},\r\n    {1e-169, chars_format::fixed, 614,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000010000000000000000201179579279951889494332706\"\r\n        \"6503362976461263346164357987024467754083903008282675437345564791148767438721478692254625644809586029974902\"\r\n        \"9663114719064671442799974430463814164864567756829347660592137388682880170721357697310494206530360280015299\"\r\n        \"6738639009092824083236212756882922294542672246320073171719768219062755043188870164156569825065005551127725\"\r\n        \"431170669760491634397165652335013242654640323869852380767042632214725017547607421875\"},\r\n    {1e-168, chars_format::fixed, 610,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000100000000000000004953592503130187983982328573\"\r\n        \"7207811117530174410250732846688769058890834927312362741078714289605534237118770959763206063059979281499433\"\r\n        \"7961897471866831796989517572988535911477486186638825422692833263124125301283449371615913399670578555429637\"\r\n        \"5165233078698879613948160408333701445361155794413696959814092322662093755862536656149181736927290924629741\"\r\n        \"65924485487326723400897105883120943360144183831295094933011569082736968994140625\"},\r\n    {1e-167, chars_format::fixed, 607,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000001000000000000000002467177666011174415199261621\"\r\n        \"7291209528621088924792880843782226300079471761353893528818080846169584772723965002160866791173889106987871\"\r\n        \"8326970219146440066058803436279050909465923972862673158584982610516075507716535339983592646834173469870122\"\r\n        \"7190842982658575634105078651265358454660624644729525716278361114068244375044006328156081588837142632657619\"\r\n        \"03183803243905809949267802061486222313380078929867522674612700939178466796875\"},\r\n    {1e-166, chars_format::fixed, 604,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000010000000000000000401221755582437387548984809141\"\r\n        \"1207308459656130669644389422665977311425737707696806343933304860781908514949606785378218627146120733930447\"\r\n        \"3605738187639423891279012711640974737130742876831380132596626270962175118109020409240257267314631374111246\"\r\n        \"7600332261227520384062989969226832538213712842554808217684108041103989219090945148246702131857559235694570\"\r\n        \"80326445473949491970304074772647913438294864363342639990150928497314453125\"},\r\n    {1e-165, chars_format::fixed, 600,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000100000000000000000999817724445768728313910548020\"\r\n        \"5711379208999375322719246347910058629209216323705094993313077415130598847816413743625780548203370026890641\"\r\n        \"3369093906994053067262300325606022231535403582676612951991861383210390853540868017167926281363140337832311\"\r\n        \"0468103135141091496532272039682341449277397263471673737637105207667528441702396548979931370686529083998664\"\r\n        \"1535715046036377988203231446419361194699604311608709394931793212890625\"},\r\n    {1e-164, chars_format::fixed, 597,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000999999999999999961799779942400004928324104785955\"\r\n        \"5326505889002851247598097419105154531321591184843454796811235068290207651289671673755313909908303270285097\"\r\n        \"0678331559537557144177774603200620079001632856571115536328192609522143294619302967924920545100628925840605\"\r\n        \"6117519717265117459760677955447671567018274041494202349107448822717464429711086554005874540640278472833939\"\r\n        \"4705463613753956168418821244536776049471882288344204425811767578125\"},\r\n    {1e-163, chars_format::fixed, 594,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000009999999999999999232410621007538590444721042305553\"\r\n        \"8966769282101296639226045711088091227051335430774586877556038018775829897900990637533206522079856713880440\"\r\n        \"2682455512151783214215916809129382899197104804151043494558556314567311019878012049214467302760093638546017\"\r\n        \"2667104099484794553110440023470772264137151669161743272965662195512084398607834053711232076602685791117778\"\r\n        \"1841141364660971975280266688113073314525536261498928070068359375\"},\r\n    {1e-162, chars_format::fixed, 591,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000099999999999999995408803637407077575155370467487550\"\r\n        \"4054009684430693086299884950588544959829965649025557500010881500768271898975715175491525836823975050568645\"\r\n        \"9631435787308137962653801874308372118524838133991329895372521390906085609300261532422578213570501344340483\"\r\n        \"4735785580178985887075116482755269889736226657859674474527230208421323174102592427892427404427649408950714\"\r\n        \"0119371829638437424066232939168230586801655590534210205078125\"},\r\n    {1e-161, chars_format::fixed, 587,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000001000000000000000028120774630031375848549545741243778\"\r\n        \"5811701566332371519945117658868634141898328680968104386920846519922069068936562958742313152849540388028298\"\r\n        \"3679493852048719318409229535432756222539343559454777748612211794652265945486000290895506598974572456532294\"\r\n        \"0911725849734827414048354780693832858115305768410546622166900163424732253607969657646833365895490036057512\"\r\n        \"218471468907359835098791478458224446512758731842041015625\"},\r\n    {1e-160, chars_format::fixed, 582,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000009999999999999999886366475601857224634850971725140321\"\r\n        \"6668457145854698362404413106109357186457035125880887139544297133944156933742103167012172677243191174459843\"\r\n        \"7514213299328048160779171128466042026508303756993223913391462556701806908281949753383202185641409828643157\"\r\n        \"6829951574975108576231868056852280790470182005098522878231145211785986468975454556614683943653588645639804\"\r\n        \"3228499463060121588142692417022772133350372314453125\"},\r\n    {1e-159, chars_format::fixed, 581,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000099999999999999998863664756018572246348509717251403216\"\r\n        \"6684571458546983624044131061093571864570351258808871395442971339441569337421031670121726772431911744598437\"\r\n        \"5142132993280481607791711284660420265083037569932239133914625567018069082819497533832021856414098286431576\"\r\n        \"8299515749751085762318680568522807904701820050985228782311452117859864689754545566146839436535886456398043\"\r\n        \"228499463060121588142692417022772133350372314453125\"},\r\n    {1e-158, chars_format::fixed, 577,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000001000000000000000064446171534289376962808838424475145282\"\r\n        \"4968949939521068953419899265716691290743835877718806049949981927510174453927389420121367164743956964027241\"\r\n        \"3320572395360660554036964212016080836775688509796677303432090515784379771181181208118068952169412306834148\"\r\n        \"2158086593158645959509317701749254858130330879185409763182954291175171781559923473369139703210713831561461\"\r\n        \"76302524197776477876686840318143367767333984375\"},\r\n    {1e-157, chars_format::fixed, 574,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000009999999999999999431509331757235297638908524213373642971\"\r\n        \"9717733730390966126541574180671350586793186143106586971175522745590047263800730698748080600642137351586554\"\r\n        \"2817844552713093922452020273570757392631880130378197605747547628184774624032518164415083313239251988047403\"\r\n        \"4974000401221846213932984753153735603509222882524146590734613110527319671367749743279471626477550034318145\"\r\n        \"98176263775286543022957630455493927001953125\"},\r\n    {1e-156, chars_format::fixed, 571,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000100000000000000004018712386257620752302524122384758908543\"\r\n        \"6951462622467448526675089618678004433093242503717657938349599691994050841792615007205534380800831825352415\"\r\n        \"1281480734279032167861177508427981727318841044490579486062336519119930942559532978275682800031488522826664\"\r\n        \"2594928255135369188611385646247859857444916099881074236105569515068381867529377356090119509812206593553233\"\r\n        \"00554463372691316180862486362457275390625\"},\r\n    {1e-155, chars_format::fixed, 567,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000001000000000000000014310806346082160120589404209844862475239\"\r\n        \"6783625375187052570059302021541381490502075510105144112577670957024299874498662019456068142996429428225825\"\r\n        \"1206713457062073829702509023692063137188304469682852384391737891806816886303726225090562219944302181992964\"\r\n        \"5002817903575273088029754823250588381508661599771786817697192724563324931688760432113453111357515934540934\"\r\n        \"8876643207404413260519504547119140625\"},\r\n    {1e-154, chars_format::fixed, 563,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000009999999999999999729086983196916842766920649874404998989240\"\r\n        \"4140240160071602553527513571595209458135162667908476791083494163583662050146811352972270789774073077485032\"\r\n        \"6337632398968772714476833267516565195881349093261444224211342127788288234371605328245369713513693079550795\"\r\n        \"4884744671298030110951922004857720728038625613094579483235888427705349419207394260530659325342359329547026\"\r\n        \"192130942945368587970733642578125\"},\r\n    {1e-153, chars_format::fixed, 561,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000100000000000000003915207116191644562692780774328748002102906\"\r\n        \"0538619069498795888323242017049781731521105609372197265926388142386007618905054995137278140784270051221823\"\r\n        \"5048358736119176465540444185630710774840620589687716157410009922360972402366564045017736910006190641569547\"\r\n        \"1142396544255513419049239690947816673154102284918413932135505363899892554957303574968541865148393549267424\"\r\n        \"8735056607984006404876708984375\"},\r\n    {1e-152, chars_format::fixed, 557,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000001000000000000000065649420298806350167022104845626272069871068\"\r\n        \"1931060570119040295424845374888565915888971814871690079629667450057624658798315813031062380016857617704223\"\r\n        \"7171726346917561938492887898167343012514724525170257235286453801522084258267683500433528199538945799941840\"\r\n        \"0603764767655983428612475478960604302612407465074615720461537986384519001106479628333213098383136507862900\"\r\n        \"543841533362865447998046875\"},\r\n    {1e-151, chars_format::fixed, 553,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000009999999999999999384621444417348083745694787544000702354294314\"\r\n        \"5156851694898495169012043938129726326349763533530464618738945243093920040090396770713137135809035113714781\"\r\n        \"0686592154337349796683468972382137447938351093633980615919518275427551321778768592039645220491567555592692\"\r\n        \"5407280071719070856360983454449039614697613088003290047504131189336704337459490108237997532669716349573718\"\r\n        \"61673891544342041015625\"},\r\n    {1e-150, chars_format::fixed, 551,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000100000000000000000629535823217296399721087933638737788046497104\"\r\n        \"7055204982541793211381291705328905037044059949632305801030675137511608656332028291651300234674570141560909\"\r\n        \"9029501889177602437476876440041602091164279779372295422901954699839733275910706785973181671037757922997368\"\r\n        \"4101427943008113522349948331994414341250592547994858646301304824078966967156534016215353732892623384032049\"\r\n        \"216330051422119140625\"},\r\n    {1e-149, chars_format::fixed, 547,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000999999999999999979162072715997701748154319103592454822450755208\"\r\n        \"8605297691190566028769507757162483276254901039012419555741860548826453541608040578433286840408825397956702\"\r\n        \"1640697508559606492200017535535110464519722421592997174192459216140452526614984397424898845889249761691912\"\r\n        \"0899770526811515388539028169928070635408078808100753777973076517941975301318808426812023704144394287141039\"\r\n        \"96753692626953125\"},\r\n    {1e-148, chars_format::fixed, 544,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000009999999999999999357488158901172821496638227311205779296280098677\"\r\n        \"4904942764267802927000528833599759255577835073153980284380352267630407068684528375057420302698237697128671\"\r\n        \"7937832954133378800900225517256537491228018261850658864691187645294441546276508577338302627079226124410768\"\r\n        \"7165562815801236526022999299023541920515241331442214819091217613856643089243576502656019044934510020539164\"\r\n        \"54315185546875\"},\r\n    {1e-147, chars_format::fixed, 540,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000099999999999999997047942135082161782845621982909807944388620614063\"\r\n        \"8233700823780888155561678240198180611547753267301525028109548441377097466012303024777787838102507230793516\"\r\n        \"7131466593035276977801853877321912144033830251141091664779112581825085221751768948668512925298433184174504\"\r\n        \"6312767776523704135168252192292734673676787310944731876028556663071310283991827150273934421420563012361526\"\r\n        \"4892578125\"},\r\n    {1e-146, chars_format::fixed, 538,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000001000000000000000026048390087948554914524055185862081866699320177260\"\r\n        \"9285379135454623724519020869191215007787973245202805229991896654939403126795338635035235358947156460043947\"\r\n        \"5364858757576593278812118049323717148396664633562964933666903880341568361304620291252915725083082882814125\"\r\n        \"7641911661418463350694669155844394233157857053808657722147655022791173104815265482159247767413035035133361\"\r\n        \"81640625\"},\r\n    {1e-145, chars_format::fixed, 534,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000009999999999999999149104526136946807423883844723340770210730921040155\"\r\n        \"3886373401631393867145439347723972231670921008276953321990721726025461934507218605205214031029881558263867\"\r\n        \"2644731031289462772249594971145257322799403892588683619153477561601360737307586821173427808855808006759668\"\r\n        \"6134438690556193526703746900102992403778891650859797984234782386350325750212775233194406609982252120971679\"\r\n        \"6875\"},\r\n    {1e-144, chars_format::fixed, 527,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000099999999999999995047459260545592047747179910066303857167348508745406\"\r\n        \"3559471465641437481197655378641891424577406702773049949277600695034041212099922836522986897312201317600618\"\r\n        \"5659651255219331773285023382146698543729214743617926487584571589819440575439439704072612302878146696017771\"\r\n        \"0255356261172943203814891907720963806747888947723673401521480956499754455535367014817893505096435546875\"},\r\n    {1e-143, chars_format::fixed, 526,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000999999999999999950474592605455920477471799100663038571673485087454063\"\r\n        \"5594714656414374811976553786418914245774067027730499492776006950340412120999228365229868973122013176006185\"\r\n        \"6596512552193317732850233821466985437292147436179264875845715898194405754394397040726123028781466960177710\"\r\n        \"255356261172943203814891907720963806747888947723673401521480956499754455535367014817893505096435546875\"},\r\n    {1e-142, chars_format::fixed, 521,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000010000000000000000415187909843646941992853405491851801412104911250566867\"\r\n        \"8055933591983443414040584623144434071999004998205277646578228806936119169092900476835416006646879910320012\"\r\n        \"4324406757057414330505197912365935201126483700951764547204928276237357349018272445874789153751726477574834\"\r\n        \"6743781153712352196509454885002561528285839188544891300604311457078665625886060297489166259765625\"},\r\n    {1e-141, chars_format::fixed, 520,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000100000000000000004151879098436469419928534054918518014121049112505668678\"\r\n        \"0559335919834434140405846231444340719990049982052776465782288069361191690929004768354160066468799103200124\"\r\n        \"3244067570574143305051979123659352011264837009517645472049282762373573490182724458747891537517264775748346\"\r\n        \"743781153712352196509454885002561528285839188544891300604311457078665625886060297489166259765625\"},\r\n    {1e-140, chars_format::fixed, 517,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000999999999999999983250504021863079017324674022131009536706807260991007919\"\r\n        \"0630989416603842570455469741304743887367077682909670653460685267564047526850570913191119037376109415479269\"\r\n        \"7446676657790264922336770584044347107527772388993044240635592788964547377071914116211147955201007706428611\"\r\n        \"705619304048118348964858527426057820477947621912585655923333405326047795824706554412841796875\"},\r\n    {1e-139, chars_format::fixed, 514,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000010000000000000000298651335918643711628932072437743460203097543522435510082\"\r\n        \"6008852419962416373378637998156745373938153930041458569504416084023430328021523294715043392256147086968485\"\r\n        \"4418758961511994248831871060836855116242505539397726245213806567814973968761784932253618911783197472724962\"\r\n        \"913730905084412418686107855057037903823030327416475360191583376945345662534236907958984375\"},\r\n    {1e-138, chars_format::fixed, 511,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000100000000000000006715683724786540487934803382108901520719211202524558547961\"\r\n        \"7680190231016089084377904662441905741520556107972601974224668107297943756341746249581258070521894327091158\"\r\n        \"3803528683994702692032032371515623490143308589715533163001095103505741271958999483673303996016937994760395\"\r\n        \"997611967669955619161259196942056630578736140489704009581828358932398259639739990234375\"},\r\n    {1e-137, chars_format::fixed, 508,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000999999999999999977656748473462923959856450035533809158674453610040702748359\"\r\n        \"4601917556754682429582454283432209363869157698333629041914506663452066136381143237472801154168780293160288\"\r\n        \"7252749186952782031200601399626499036195009199436834569298244826513374695402390969442282883730261527345555\"\r\n        \"328849672879601816408256456500304089424972613098230311834413441829383373260498046875\"},\r\n    {1e-136, chars_format::fixed, 504,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000010000000000000000015234388133035855383875390450151974382791625207620048100283\"\r\n        \"1885801576630046733682122410287021775588652667049332286697531726593651835908283730300757011154904205606340\"\r\n        \"7947592277512473349658606837677619335918296521617671188216331487917848351857520007198181041140264394144632\"\r\n        \"34788340564922983129412593279040680454942957577912920896778814494609832763671875\"},\r\n    {1e-135, chars_format::fixed, 499,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000100000000000000003971014335704864406403728146018541868564669677791608810869849\"\r\n        \"2724031911632026342542497318309067946239737609901992747814758739104365912632458992171497623022662440118664\"\r\n        \"6197529302879182099027553839378256942674237652165919805905446443724105883912965076387445672805029872471588\"\r\n        \"429020886143684988326241212501922610289550874540509539656341075897216796875\"},\r\n    {1e-134, chars_format::fixed, 498,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000001000000000000000039710143357048644064037281460185418685646696777916088108698492\"\r\n        \"7240319116320263425424973183090679462397376099019927478147587391043659126324589921714976230226624401186646\"\r\n        \"1975293028791820990275538393782569426742376521659198059054464437241058839129650763874456728050298724715884\"\r\n        \"29020886143684988326241212501922610289550874540509539656341075897216796875\"},\r\n    {1e-133, chars_format::fixed, 493,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000010000000000000000641496342650454815204531166058943602839619187024947014198474039\"\r\n        \"9828224464422410620411217618993206806579261112354147155200128193178834690421687323641123036577948591402888\"\r\n        \"9935748064202920459010453544357763610865201119901287710041064503330419772913467920705224010255686832775799\"\r\n        \"714045712057246057262961864454953175851414926000870764255523681640625\"},\r\n    {1e-132, chars_format::fixed, 487,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000099999999999999998594326335945560165992244413962574716935320854384313882417088792\"\r\n        \"0681179005191262486944630971166878222416607214585555592825144884036557234591653828687686867804939368863225\"\r\n        \"3507311800918466789942308034551417118526062293115049276525200843869593517391950184311224750470481588015379\"\r\n        \"157829994532549384186718988143383057831670157611370086669921875\"},\r\n    {1e-131, chars_format::fixed, 486,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000999999999999999985943263359455601659922444139625747169353208543843138824170887920\"\r\n        \"6811790051912624869446309711668782224166072145855555928251448840365572345916538286876868678049393688632253\"\r\n        \"5073118009184667899423080345514171185260622931150492765252008438695935173919501843112247504704815880153791\"\r\n        \"57829994532549384186718988143383057831670157611370086669921875\"},\r\n    {1e-130, chars_format::fixed, 482,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000010000000000000000860474181186106478814017048964495719560523575469171389466368285000\"\r\n        \"1054302315330244491908885118632122193789221804912802057060030515884801171193467057382254521235894667527601\"\r\n        \"9552791754021117414995911810497742588727689266426889109856940634588690842264333341972440114105661488593017\"\r\n        \"5592715863635705393630548343253394705243408679962158203125\"},\r\n    {1e-129, chars_format::fixed, 477,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000099999999999999992588077050396257392703488768553145229733371914199873875069132357308\"\r\n        \"3560594414038512159956243155212422703836212507412136177871631363182768319485323556005461360487622175994949\"\r\n        \"4382130945420159417717384419280934109333533385517507781179706383817482773534294846124960068136571893048547\"\r\n        \"17236173389759146257205202346085570752620697021484375\"},\r\n    {1e-128, chars_format::fixed, 478,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000001000000000000000054014088595681033090528341454265948024308629865933458907447727514625\"\r\n        \"1465374054496583672623295800994620910810169407848436920545703997149630334448011702591284419846817754198055\"\r\n        \"2987602212529712035107713678381275316882208085186144350914663534730232928215257050045129264726062873538499\"\r\n        \"086450376880826074188490792948869056999683380126953125\"},\r\n    {1e-127, chars_format::fixed, 473,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000010000000000000000283874249773373412578296507005190488789136477211465148760964467263168\"\r\n        \"2934880716742912580111229512205421363205605411030218921798259240852409065290564740839502568526985553483431\"\r\n        \"1543436608640884635209397812668884721728332391839310430911435954191518896407953322860235480539940849278936\"\r\n        \"1388376929984378449489668128080666065216064453125\"},\r\n    {1e-126, chars_format::fixed, 470,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000099999999999999994638210139863752739319384028852897161364970485782829397577234820373021\"\r\n        \"4345292664295553125216983194349005795381216751769380140901609027919473718839974286048093527151711902926412\"\r\n        \"8791629553409303444326331050085056910283373197684845805587978962369256620251783545688525470337396137395610\"\r\n        \"1670625040700457475395523943006992340087890625\"},\r\n    {1e-125, chars_format::fixed, 468,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000001000000000000000011986360261597378484902488618121033425860859148482870696031627021799506\"\r\n        \"3481042668024112659332327365131720647210866385956274025663957324031672660925127839256392536462268084527318\"\r\n        \"1058187798089377705404487113680891558833337742514526084090834260060024953139832920195889383870060217106111\"\r\n        \"44114044801511909099644981324672698974609375\"},\r\n    {1e-124, chars_format::fixed, 464,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000009999999999999999332612496260455571748521106226105592512074739996973786317204924401163559\"\r\n        \"4473034379418149707373328591617254151324277440413068856865168702273500938946658647258438185280892182114909\"\r\n        \"2879170812937657908350751782845046116338108237152444502375806964190744523934359642231277672747416053260997\"\r\n        \"1652195923752515227533876895904541015625\"},\r\n    {1e-123, chars_format::fixed, 459,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000100000000000000005922142664292847127093271541542731793065289023775416593461830777080939659\"\r\n        \"0128620607349127248932406871371778645792957110525430965042159631426620114340502397472176722277540431681441\"\r\n        \"2035022816674485414613427491872372715305389379409506440278639824459525358767109377954635382725138417411847\"\r\n        \"59115412816754542291164398193359375\"},\r\n    {1e-122, chars_format::fixed, 458,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000001000000000000000059221426642928471270932715415427317930652890237754165934618307770809396590\"\r\n        \"1286206073491272489324068713717786457929571105254309650421596314266201143405023974721767222775404316814412\"\r\n        \"0350228166744854146134274918723727153053893794095064402786398244595253587671093779546353827251384174118475\"\r\n        \"9115412816754542291164398193359375\"},\r\n    {1e-121, chars_format::fixed, 452,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000009999999999999999786069133521234062494411283480245923758078238453978220607637059591658505770\"\r\n        \"7372344692184393680496946004426688096084017843279583135225716186398925042119620554398800581762452094073827\"\r\n        \"5930141680382536270564530728234932207383289436306713370547490762619408233606108634384584336451257113864699\"\r\n        \"0220877341926097869873046875\"},\r\n    {1e-120, chars_format::fixed, 451,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000099999999999999997860691335212340624944112834802459237580782384539782206076370595916585057707\"\r\n        \"3723446921843936804969460044266880960840178432795831352257161863989250421196205543988005817624520940738275\"\r\n        \"9301416803825362705645307282349322073832894363067133705474907626194082336061086343845843364512571138646990\"\r\n        \"220877341926097869873046875\"},\r\n    {1e-119, chars_format::fixed, 448,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000001000000000000000013002439022866900658610872163449755279208385506136528780275002732133763542643\"\r\n        \"8129020374848166460094222106719006225434027923201550599488822107117523601001807666818581738553095234381916\"\r\n        \"9425474153069848529657060407593031859636613162145711766919388084154269466416907644493801583795988818792466\"\r\n        \"190643608570098876953125\"},\r\n    {1e-118, chars_format::fixed, 444,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000009999999999999999854860184862721051312750771111096249564879361775455634046659653137594331701877\"\r\n        \"4133794497211277317745247754788489318082330470069609379550593333375080897700058852677628887067865727825908\"\r\n        \"2964292612168713510938703403131829625904775369662119971831386263835125817720722796655072328597668729344150\"\r\n        \"05147457122802734375\"},\r\n    {1e-117, chars_format::fixed, 441,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000100000000000000002951229134482377797501234919485383347284065510329110800564042518315836176611745\"\r\n        \"5840492992438969708604050546310060160950484891830439640907977138553290774088873574907304846088043134151261\"\r\n        \"0290108818163483679497444796094119786429453725341162876113775881672359720380886339077819435772198630729690\"\r\n        \"19412994384765625\"},\r\n    {1e-116, chars_format::fixed, 437,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000999999999999999994291273057982439700022531527858466659758479962694672324860857287639218889373684\"\r\n        \"2384545761780124836827921475699265768487407389229629645863420947113053364182455364024920657605344494375185\"\r\n        \"7723626609824048234091161842734609645240937023651923498738452870154784858419596410561425159357895608991384\"\r\n        \"5062255859375\"},\r\n    {1e-115, chars_format::fixed, 431,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000010000000000000000506449023169285809400062397950510535606899601876489694141081659204698474921637188\"\r\n        \"0171604219554404355680558555414031141153138357492564670095816485848203669125039801019251428454834497950650\"\r\n        \"0075651247213099315044196318651507957266973912674519185773423846648846110424235789082558767404407262802124\"\r\n        \"0234375\"},\r\n    {1e-114, chars_format::fixed, 430,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000100000000000000005064490231692858094000623979505105356068996018764896941410816592046984749216371880\"\r\n        \"1716042195544043556805585554140311411531383574925646700958164858482036691250398010192514284548344979506500\"\r\n        \"0756512472130993150441963186515079572669739126745191857734238466488461104242357890825587674044072628021240\"\r\n        \"234375\"},\r\n    {1e-113, chars_format::fixed, 428,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000999999999999999978512256865477520152827093213044542327497665499707469139871610870446642880592474560\"\r\n        \"7413656931036469180683849343467311711593584204134135942495950700958603418041751523359401738105586857619588\"\r\n        \"4123825652814958815449661778058123104924120719575541183563806091956927685204803424312558490782976150512695\"\r\n        \"3125\"},\r\n    {1e-112, chars_format::fixed, 424,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000009999999999999999496591986848970958379554345802419378342207476245308690301769888504373610359639768643\"\r\n        \"5149509212748826257350468642929907501054835860852035156616715474138980202568600919331052951544416826414234\"\r\n        \"747306025416969739861673743221054056214812500424990226052374662785854342317293230735231190919876098632812\"\r\n        \"5\"},\r\n    {1e-111, chars_format::fixed, 421,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000100000000000000008815387795168313254933939601769443940194995342537854955671117454648191389018076580702\"\r\n        \"2873976813049808948929876432973136524836655272007916446621148442848392962433896277932822131993852253661517\"\r\n        \"5460023692731730268401631043898549001949195234763482210724552280700638817734215990640223026275634765625\"},\r\n    {1e-110, chars_format::fixed, 417,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0001000000000000000051221963480540189426303672967707105650555498545152501416302058360870033129056288755643\"\r\n        \"8396075635667299154831590986600534543597761617445658118334167891261020459677930553668774342472698564564055\"\r\n        \"265511385789128593139162584753710767157743183492959649261329346803250928132911212742328643798828125\"},\r\n    {1e-109, chars_format::fixed, 414,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0009999999999999999921309003267114804294465160877273716483243707367908243916474724638910239112571254734373\"\r\n        \"8461676439380346196841136375912054159676958532320479617304614317043657962202789926136591785273802092822629\"\r\n        \"542916946809659127192130501219695914914199014601235509201726525674303047708235681056976318359375\"},\r\n    {1e-108, chars_format::fixed, 411,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0100000000000000003940375084977444762693224159171115885010927298348016601137114118147423128549645609920254\"\r\n        \"8609403732144624780209551679866871807174846460293608701342659934968952698640024145775130968363489350769680\"\r\n        \"326744756749605705517267782736253202447852708639242959309800795608680346049368381500244140625\"},\r\n    {1e-107, chars_format::fixed, 407,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"1000000000000000001585470431324073868943661188524129088681351186128692715592206207407665386104991598590417\"\r\n        \"4152922614716945307710013432698076388506375506225586787054465233430542373503242382477604758631146127349724\"\r\n        \"08684525827194158640497566304817959803162658537732665475772364516160450875759124755859375\"},\r\n    {1e-106, chars_format::fixed, 405,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"9999999999999999410762217618034758561619325434248814703966763103663354423459102489011599470786483976110075\"\r\n        \"0471390839500613166932080471450496953190329514887864248590506474161669928680438620396768786251503187943973\"\r\n        \"978815635133568363766522001452157157165857837531619534132687476812861859798431396484375\"},\r\n    {1e-105, chars_format::fixed, 401,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009\"\r\n        \"9999999999999996527992122961171506127462400146458051771054626067127835164442863230376212268918567800277146\"\r\n        \"8945249625681491309993020136626037259396997338350656973721648182191714512212327021484803062754864221652807\"\r\n        \"34670414167907363879815853064012686426021044028278339510507066734135150909423828125\"},\r\n    {1e-104, chars_format::fixed, 398,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099\"\r\n        \"9999999999999926554002081118532333094317668601062042008354340183369696766799218859598641712326029375949126\"\r\n        \"1751036566009158849174754612323288954070738351954337932151146772716901515596217134574187423711324741118992\"\r\n        \"53027677129649636985456904850438396097599136336242509059957228600978851318359375\"},\r\n    {1e-103, chars_format::fixed, 395,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999\"\r\n        \"9999999999999575347373999130785156385627348918768225701078765736966206689027496149294264938137482774070003\"\r\n        \"9122043186537622497791120154729558659901263771961233762034148120770964008178595987932619867811787214462572\"\r\n        \"79688487691888384356182054821891706276881794934752178960479795932769775390625\"},\r\n    {1e-102, chars_format::fixed, 391,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999\"\r\n        \"9999999999993275014914487744156960316668185922499812070504746143508154721992501066479866862357315624070101\"\r\n        \"8327011653807952929562609295322233645461595700269502096160038058894049264054562741800233632529553718444548\"\r\n        \"0159114575574772754891649767885510036169449676890508271753787994384765625\"},\r\n    {1e-101, chars_format::fixed, 388,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000\"\r\n        \"0000000000051716172769048498910573067736415953755477838627200290469331297483111135012229536413737838938008\"\r\n        \"2154286693356587616358521047943278225065973931151126122309651732088851891652690019248658513534821641142117\"\r\n        \"9001055338801084410855940271152519915887069146265275776386260986328125\"},\r\n    {1e-100, chars_format::fixed, 381,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000\"\r\n        \"0000000000199918998026028836196477607885341594201826030059365956992555434676176762886132929895827460748109\"\r\n        \"1185079852827053974965402226843604196126360835628314127871794272492894246908066589163059300043457860230145\"\r\n        \"025079449986855914338755579873208034769049845635890960693359375\"},\r\n    {1e-99, chars_format::fixed, 380,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000\"\r\n        \"0000000001999189980260288361964776078853415942018260300593659569925554346761767628861329298958274607481091\"\r\n        \"1850798528270539749654022268436041961263608356283141278717942724928942469080665891630593000434578602301450\"\r\n        \"25079449986855914338755579873208034769049845635890960693359375\"},\r\n    {1e-98, chars_format::fixed, 378,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999\"\r\n        \"9999999938777761008502108474878975001956765921826799815501537087861613187954421956155709823745708345025814\"\r\n        \"6914492613566917209869310021530837652091193736796956409650326860009509268385256465483316166327596918109804\"\r\n        \"658117462243096325476277019816961910692043602466583251953125\"},\r\n    {1e-97, chars_format::fixed, 375,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000\"\r\n        \"0000000362347275614230386486015179458496381198537636440236074215343295235503271551048096227501536207679312\"\r\n        \"8266838165330935538744052169263360047450615280383040626852473271454077752909394064704527719494238439954420\"\r\n        \"779105059740904555554141808215717901475727558135986328125\"},\r\n    {1e-96, chars_format::fixed, 370,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999\"\r\n        \"9999990629210549086179841697146068732580852248447853932751364330404107608912022317267655741089325311177582\"\r\n        \"7709554591152509520094495639900486787323780638317385863868670429754309941669548515427063112032127614792551\"\r\n        \"8186447666098282116564632815425284206867218017578125\"},\r\n    {1e-95, chars_format::fixed, 368,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999\"\r\n        \"9999989455383616020992165214697332781059464800821006333013661371425682464292659609241719228019888411715318\"\r\n        \"8832039109328908751959523136496795471204988242457189228485502920176491976211594796627201250946919570336116\"\r\n        \"40984498321327311742834353935904800891876220703125\"},\r\n    {1e-94, chars_format::fixed, 364,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999\"\r\n        \"9999561900723659573146659174026745989590878742840195308136541444718399142236850346156545011692342917395224\"\r\n        \"1374418302073833315536964415000244320181154987438569925659834711231349524051509396845731986966622013718771\"\r\n        \"2048605636727671708285924978554248809814453125\"},\r\n    {1e-93, chars_format::fixed, 360,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999999\"\r\n        \"9990296557436585543066704173122150759848479182484064729364258134569183411332571521395093820818769977824806\"\r\n        \"2608618361294265890437372950519076931911910880252541509475235263776371431484076857636831509625041102909425\"\r\n        \"751177341368247653008438646793365478515625\"},\r\n    {1e-92, chars_format::fixed, 358,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999999\"\r\n        \"9988124771166018445065242805546453775449723759526860925661082347528762289900626256676638945862246916287024\"\r\n        \"4255218164047735143290068696924629637513332708655939048722142214357695259337042349496128856909275577546838\"\r\n        \"2706261394332614145241677761077880859375\"},\r\n    {1e-91, chars_format::fixed, 355,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000\"\r\n        \"0221884498860836508245232352764322462356965334013463784684827482635335605305906737669192409320657715026091\"\r\n        \"5228319844897656388566043736181737648710222711081486303100580449952876371355518587472543611728213969278705\"\r\n        \"7416722973357536830008029937744140625\"},\r\n    {1e-90, chars_format::fixed, 351,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999999999\"\r\n        \"9493750691003148621709889149244946960691831430175801622256242767571654402661914009469500487621068733014137\"\r\n        \"0874092813614124240337583226333846298487062114638096503972538048521373489674425134635395776198474142304473\"\r\n        \"133435749332420527935028076171875\"},\r\n    {1e-89, chars_format::fixed, 348,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000003\"\r\n        \"8539015671714949588977841546821912212963464861099395816034940616223770432973593970253782565578822006089821\"\r\n        \"1286618301940276728541498431074946002713261085209229472257643701331978478836423187794603219323390230766079\"\r\n        \"866953077726066112518310546875\"},\r\n    {1e-88, chars_format::fixed, 345,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999933\"\r\n        \"8953946436746374964683614163280499584551035186800847917009095590064270577229046689127161110952987838135405\"\r\n        \"1769619040225943481438996285073867598909252320213948341802119826481938818152107683370541217106330922348433\"\r\n        \"887236751616001129150390625\"},\r\n    {1e-87, chars_format::fixed, 342,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000176\"\r\n        \"1029146610688717047594552072313976206179259261553361116813440478030175792345610998556927468211736163456500\"\r\n        \"6468702235674025246197867056143415414879391457166254464215735759522155943218070390309339980083880305983257\"\r\n        \"130719721317291259765625\"},\r\n    {1e-86, chars_format::fixed, 338,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000008458\"\r\n        \"2208924052686909682012804239211604947143851763892666741914281399401518083897262843851805551572223891384597\"\r\n        \"4867117024056975916441904204672069555088860611876713011713657552843701525756652355924822273003371719823917\"\r\n        \"37401485443115234375\"},\r\n    {1e-85, chars_format::fixed, 334,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999977427\"\r\n        \"1409913394073269523051506134966563305818371265181778238664788088419018271914182705997561604444442804732518\"\r\n        \"5789655563502183893007303754914049050169469475340436204235776206482741760351348313945463175400618638377636\"\r\n        \"6710662841796875\"},\r\n    {1e-84, chars_format::fixed, 328,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000345765\"\r\n        \"1055545315643774148256588054462892608157826645123858015864019047369716410120204300084916904592673962596952\"\r\n        \"6597967246048907044268975105442605172196756851680062911162025115250209588661084447736016045382712036371231\"\r\n        \"0791015625\"},\r\n    {1e-83, chars_format::fixed, 327,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000003457651\"\r\n        \"0555453156437741482565880544628926081578266451238580158640190473697164101202043000849169045926739625969526\"\r\n        \"5979672460489070442689751054426051721967568516800629111620251152502095886610844477360160453827120363712310\"\r\n        \"791015625\"},\r\n    {1e-82, chars_format::fixed, 320,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999961425317\"\r\n        \"5133875575759313354743387232240038419096073369208121046736219849991328566788143274501180360291919104909106\"\r\n        \"6016038393425985809817503337589839395411736588716579909256841070903584767215477313584415242075920104980468\"\r\n        \"75\"},\r\n    {1e-81, chars_format::fixed, 319,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000009999999999999999614253175\"\r\n        \"1338755757593133547433872322400384190960733692081210467362198499913285667881432745011803602919191049091066\"\r\n        \"0160383934259858098175033375898393954117365887165799092568410709035847672154773135844152420759201049804687\"\r\n        \"5\"},\r\n    {1e-80, chars_format::fixed, 318,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000099999999999999996142531751\"\r\n        \"3387557575931335474338723224003841909607336920812104673621984999132856678814327450118036029191910490910660\"\r\n        \"160383934259858098175033375898393954117365887165799092568410709035847672154773135844152420759201049804687\"\r\n        \"5\"},\r\n    {1e-79, chars_format::fixed, 313,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999998878728350\"\r\n        \"9251441931781307852081357833240286199608034515093483045050512125248538747074082304321530967363408159620203\"\r\n        \"17497336959217417624670274052264414348782613129120472130243434116803058486766531132161617279052734375\"},\r\n    {1e-78, chars_format::fixed, 312,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000009999999999999999988787283509\"\r\n        \"2514419317813078520813578332402861996080345150934830450505121252485387470740823043215309673634081596202031\"\r\n        \"7497336959217417624670274052264414348782613129120472130243434116803058486766531132161617279052734375\"},\r\n    {1e-77, chars_format::fixed, 306,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000099999999999999992696817954285\"\r\n        \"2977888064283788338863669429270136082147712570640533209564082812219258592693132229048327051034591863408815\"\r\n        \"8396037764475242813674295968331307044624992795434233715246019613687167293392121791839599609375\"},\r\n    {1e-76, chars_format::fixed, 305,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999926968179542852\"\r\n        \"9778880642837883388636694292701360821477125706405332095640828122192585926931322290483270510345918634088158\"\r\n        \"396037764475242813674295968331307044624992795434233715246019613687167293392121791839599609375\"},\r\n    {1e-75, chars_format::fixed, 299,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000009999999999999999576500137009637\"\r\n        \"6884491285850700308643802436708920370749451782251562897192482294336146830490746237302878343191414548305654\"\r\n        \"690326776267877450997656448381172603908118869629750857797034768736921250820159912109375\"},\r\n    {1e-74, chars_format::fixed, 298,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000099999999999999995765001370096376\"\r\n        \"8844912858507003086438024367089203707494517822515628971924822943361468304907462373028783431914145483056546\"\r\n        \"90326776267877450997656448381172603908118869629750857797034768736921250820159912109375\"},\r\n    {1e-73, chars_format::fixed, 295,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000999999999999999996922761423345581\"\r\n        \"2696790341468932915818260911891993040154102154531258139625966702131490879797610286470009004866665380846522\"\r\n        \"46616646076525732436683076683433657106032411976404006281882175244390964508056640625\"},\r\n    {1e-72, chars_format::fixed, 291,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000009999999999999999655045632454401313\"\r\n        \"2986609363498112746678471190920282679869630110312834033237768873180446152192210415242692562864969406216797\"\r\n        \"1937539358324754468588202386067562686157439433287663632654584944248199462890625\"},\r\n    {1e-71, chars_format::fixed, 287,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000099999999999999991523544616079141142\"\r\n        \"6165388815921664882718505061208463251954038143132382524027318361653059189379824961108565855822743626193132\"\r\n        \"450968609203189719636403510281811614357483364301515393890440464019775390625\"},\r\n    {1e-70, chars_format::fixed, 285,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000999999999999999995666033496229363272\"\r\n        \"0865165264168050172244360179994449267416588791259150173879109538953029214474716672179414923458643237528756\"\r\n        \"2948180779769331795928171153901332923741307467935257591307163238525390625\"},\r\n    {1e-69, chars_format::fixed, 280,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000009999999999999999634937985620541825337\"\r\n        \"1806544221874896342206363528305225682661058472850202004367391699840542862041298477419123773661604472897835\"\r\n        \"80765283598918786301304310361326432854411905282177031040191650390625\"},\r\n    {1e-68, chars_format::fixed, 278,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000100000000000000006644495035141476089649\"\r\n        \"7108911652528335589655259975508800554765126800223611545232435068477405667000768594192052486210537605449626\"\r\n        \"573422560856484483414528645350838331751219811849296092987060546875\"},\r\n    {1e-67, chars_format::fixed, 275,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000999999999999999942903568204182066861162\"\r\n        \"2567483319930889885453103445609480809796763141577017433622133843910332110954280101910747866971461536841043\"\r\n        \"771495196989574594736115142890042761791846714913845062255859375\"},\r\n    {1e-66, chars_format::fixed, 271,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000009999999999999999758479367767774519372515\"\r\n        \"5065855080248808217463024614704207398912977710861102386093916681406586600351883259133550656738387415491029\"\r\n        \"61556640076313325245227492388266909983940422534942626953125\"},\r\n    {1e-65, chars_format::fixed, 268,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000099999999999999992313694706062483581550868\"\r\n        \"0402200707449532367718403609291685174004236387156175062977914937213618150573516750918354775003521401620825\"\r\n        \"74583311375313564306477331911082728765904903411865234375\"},\r\n    {1e-64, chars_format::fixed, 265,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000999999999999999965305738833546928712902976\"\r\n        \"6072807834803722132478776394919962261046689643200541013469164386954164329297694232520762089078036042524020\"\r\n        \"73697828855693148231154054883518256247043609619140625\"},\r\n    {1e-63, chars_format::fixed, 262,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000010000000000000000665108390885599516666492874\"\r\n        \"9947296595438784251861531197274275114570714951336379343252004225173231058477583685300765027808089056818526\"\r\n        \"05731451018311606304678207379765808582305908203125\"},\r\n    {1e-62, chars_format::fixed, 255,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000100000000000000003952281235388981221231693792\"\r\n        \"8221717294650341379751932644543677801430300128481208876359081303381409876774126559425932579340280883976410\"\r\n        \"7397274361943573239841498434543609619140625\"},\r\n    {1e-61, chars_format::fixed, 254,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000001000000000000000039522812353889812212316937928\"\r\n        \"2217172946503413797519326445436778014303001284812088763590813033814098767741265594259325793402808839764107\"\r\n        \"397274361943573239841498434543609619140625\"},\r\n    {1e-60, chars_format::fixed, 251,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000009999999999999999704334639131342552092261230258\"\r\n        \"1852072572233846426168156435405004008156570318179241258702127560310406428974820785673527056432009240175516\"\r\n        \"617821216414085938595235347747802734375\"},\r\n    {1e-59, chars_format::fixed, 245,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000100000000000000002570494266573870081169877494774\"\r\n        \"1077980864740796653882428505752249160553243421325583604669297825748714277250889112093117585088725661479625\"\r\n        \"017591388314031064510345458984375\"},\r\n    {1e-58, chars_format::fixed, 244,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000001000000000000000025704942665738700811698774947741\"\r\n        \"0779808647407966538824285057522491605532434213255836046692978257487142772508891120931175850887256614796250\"\r\n        \"17591388314031064510345458984375\"},\r\n    {1e-57, chars_format::fixed, 242,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000009999999999999999549574498624050104405337804876802\"\r\n        \"0469428246581119186532239157342153944919191472312470207982938076356229324745710523507339850487508903231770\"\r\n        \"318598137237131595611572265625\"},\r\n    {1e-56, chars_format::fixed, 238,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000100000000000000003985444122640543888593177383975325\"\r\n        \"2638181195793746285849728588014684774053722646075385187191514745744674051575513464726422405495775969086480\"\r\n        \"47246970236301422119140625\"},\r\n    {1e-55, chars_format::fixed, 235,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000999999999999999994576045832271877048386177385314293\"\r\n        \"7347685398030505949018155135650072674607584205016875299317099552474042893790290755781429918314096028097992\"\r\n        \"53009259700775146484375\"},\r\n    {1e-54, chars_format::fixed, 230,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000010000000000000000307987621475787265184226545488654608\"\r\n        \"5749866459560714766014597312474927273512980096064565573955378764522009913621658689676652276290269583114422\"\r\n        \"857761383056640625\"},\r\n    {1e-53, chars_format::fixed, 229,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000100000000000000003079876214757872651842265454886546085\"\r\n        \"7498664595607147660145973124749272735129800960645655739553787645220099136216586896766522762902695831144228\"\r\n        \"57761383056640625\"},\r\n    {1e-52, chars_format::fixed, 221,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000001000000000000000007616223705782342857599309164192713898\"\r\n        \"9513847283709538948144790065143893595321174669124552225337349106179808916165796528474629667471162974834442\"\r\n        \"138671875\"},\r\n    {1e-51, chars_format::fixed, 220,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000010000000000000000076162237057823428575993091641927138989\"\r\n        \"5138472837095389481447900651438935953211746691245522253373491061798089161657965284746296674711629748344421\"\r\n        \"38671875\"},\r\n    {1e-50, chars_format::fixed, 219,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000100000000000000000761622370578234285759930916419271389895\"\r\n        \"1384728370953894814479006514389359532117466912455222533734910617980891616579652847462966747116297483444213\"\r\n        \"8671875\"},\r\n    {1e-49, chars_format::fixed, 215,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000999999999999999936399465612583852251549992142478035242294\"\r\n        \"1409762213666477161290752968276296960337741640632342481329099202736442053573995281112729571759700775146484\"\r\n        \"375\"},\r\n    {1e-48, chars_format::fixed, 209,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000009999999999999999743817365956230472414429612207258638591780\"\r\n        \"0431070114651283524903861286055227527841029653896133378731029238417615800926796509884297847747802734375\"},\r\n    {1e-47, chars_format::fixed, 208,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000099999999999999997438173659562304724144296122072586385917800\"\r\n        \"431070114651283524903861286055227527841029653896133378731029238417615800926796509884297847747802734375\"},\r\n    {1e-46, chars_format::fixed, 205,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000001000000000000000022999043453913216828505961640883084488789349\"\r\n        \"378835264740187722591657382693176711544546107892003424942768685657057403659564442932605743408203125\"},\r\n    {1e-45, chars_format::fixed, 202,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000009999999999999999841051979672810811588555613047573079851002733\"\r\n        \"243279701583057437492217649804555650371464527474677148367876444723378881462849676609039306640625\"},\r\n    {1e-44, chars_format::fixed, 199,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000099999999999999995299012157797537262313524103585668678214901248\"\r\n        \"072213449280016067527327081027864783122672863183914675200281152456227573566138744354248046875\"},\r\n    {1e-43, chars_format::fixed, 195,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000001000000000000000077450427135198206766016522111459171593954055855\"\r\n        \"14547715482249297106724749098631665490562509435341909114214331566472537815570831298828125\"},\r\n    {1e-42, chars_format::fixed, 192,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000010000000000000000376231293568868998402945121672663764541764419753\"\r\n        \"30007502975346636413174953159862631328378226348851942617557142511941492557525634765625\"},\r\n    {1e-41, chars_format::fixed, 189,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000100000000000000000576129113423785429971690421191214034235435087147\"\r\n        \"76317814976295686899169228986994124665807319451982237978882039897143840789794921875\"},\r\n    {1e-40, chars_format::fixed, 183,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000999999999999999929292879399880145002330645119061973673981332222231\"\r\n        \"93004995110860615409765027190768719826674537642929863068275153636932373046875\"},\r\n    {1e-39, chars_format::fixed, 182,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000009999999999999999292928793998801450023306451190619736739813322222319\"\r\n        \"3004995110860615409765027190768719826674537642929863068275153636932373046875\"},\r\n    {1e-38, chars_format::fixed, 177,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000099999999999999996191940173987276763588211566534471145248715351257676\"\r\n        \"27887442908835027138732593388233127473796457707067020237445831298828125\"},\r\n    {1e-37, chars_format::fixed, 175,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000001000000000000000066324273227849160063246821413449472343705781641680227\"\r\n        \"552882474171018285786819118458879085409307663212530314922332763671875\"},\r\n    {1e-36, chars_format::fixed, 171,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000009999999999999999410384274422774891504091745157237592742434278867560698\"\r\n        \"35916654225999599490547382896199479773713392205536365509033203125\"},\r\n    {1e-35, chars_format::fixed, 169,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000100000000000000000785754519458238030392258619451080624462334988938228728\"\r\n        \"496509153000956551522564186296193611269700340926647186279296875\"},\r\n    {1e-34, chars_format::fixed, 165,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000999999999999999927674603891816510919706492179966349880167443486230826346\"\r\n        \"10696676519760628561173110284698850591666996479034423828125\"},\r\n    {1e-33, chars_format::fixed, 160,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000010000000000000000559673099762419019344522426032374800632968937312731638482\"\r\n        \"799663888967410529939883190309046767652034759521484375\"},\r\n    {1e-32, chars_format::fixed, 159,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000100000000000000005596730997624190193445224260323748006329689373127316384827\"\r\n        \"99663888967410529939883190309046767652034759521484375\"},\r\n    {1e-31, chars_format::fixed, 148,\r\n        \"0.\"\r\n        \"0000000000000000000000000000001000000000000000083336420607585985350931336026868654502364509783548862515410\"\r\n        \"206308619223136702203191816806793212890625\"},\r\n    {1e-30, chars_format::fixed, 147,\r\n        \"0.\"\r\n        \"0000000000000000000000000000010000000000000000833364206075859853509313360268686545023645097835488625154102\"\r\n        \"06308619223136702203191816806793212890625\"},\r\n    {1e-29, chars_format::fixed, 149,\r\n        \"0.\"\r\n        \"0000000000000000000000000000099999999999999994320657417510427825855837769787704137433831559589728533970337\"\r\n        \"7919640114868116143043152987957000732421875\"},\r\n    {1e-28, chars_format::fixed, 146,\r\n        \"0.\"\r\n        \"0000000000000000000000000000999999999999999971232543461600619677032969363675363999943554433427600774844743\"\r\n        \"5974359365218333550728857517242431640625\"},\r\n    {1e-27, chars_format::fixed, 138,\r\n        \"0.\"\r\n        \"0000000000000000000000000010000000000000000384948697491918390813719893615913383013961276435003578191840212\"\r\n        \"24145908490754663944244384765625\"},\r\n    {1e-26, chars_format::fixed, 137,\r\n        \"0.\"\r\n        \"0000000000000000000000000100000000000000003849486974919183908137198936159133830139612764350035781918402122\"\r\n        \"4145908490754663944244384765625\"},\r\n    {1e-25, chars_format::fixed, 136,\r\n        \"0.\"\r\n        \"0000000000000000000000001000000000000000038494869749191839081371989361591338301396127643500357819184021224\"\r\n        \"145908490754663944244384765625\"},\r\n    {1e-24, chars_format::fixed, 132,\r\n        \"0.\"\r\n        \"0000000000000000000000009999999999999999237004995517028246313000618984814088269170693649761857968449874078\"\r\n        \"94222997128963470458984375\"},\r\n    {1e-23, chars_format::fixed, 129,\r\n        \"0.\"\r\n        \"0000000000000000000000099999999999999996043469801489930925532307868667658625875036801410392084399347822909\"\r\n        \"47623550891876220703125\"},\r\n    {1e-22, chars_format::fixed, 125,\r\n        \"0.\"\r\n        \"0000000000000000000001000000000000000048596774326570872352978318978345012095150284772010484957149856199976\"\r\n        \"0568141937255859375\"},\r\n    {1e-21, chars_format::fixed, 122,\r\n        \"0.\"\r\n        \"0000000000000000000009999999999999999075374522278963713967299345116755307569104179593599823760996514465659\"\r\n        \"8567962646484375\"},\r\n    {1e-20, chars_format::fixed, 119,\r\n        \"0.\"\r\n        \"0000000000000000000099999999999999994515327145420957165172950370278739244710771577606678306437970604747533\"\r\n        \"7982177734375\"},\r\n    {1e-19, chars_format::fixed, 114,\r\n        \"0.\"\r\n        \"0000000000000000000999999999999999975245926835260131855729159055676881799265554029432223615003749728202819\"\r\n        \"82421875\"},\r\n    {1e-18, chars_format::fixed, 110,\r\n        \"0.\"\r\n        \"0000000000000000010000000000000000715424240546219245085280561849232477261706364402016333770006895065307617\"\r\n        \"1875\"},\r\n    {1e-17, chars_format::fixed, 109,\r\n        \"0.\"\r\n        \"0000000000000000100000000000000007154242405462192450852805618492324772617063644020163337700068950653076171\"\r\n        \"875\"},\r\n    {1e-16, chars_format::fixed, 104,\r\n        \"0.\"\r\n        \"00000000000000009999999999999999790977867240346035618411149408467364363417573258630000054836273193359375\"},\r\n    {1e-15, chars_format::fixed, 101,\r\n        \"0.00000000000000100000000000000007770539987666107923830718560119501514549256171449087560176849365234375\"},\r\n    {1e-14, chars_format::fixed, 99,\r\n        \"0.000000000000009999999999999999988193093545598986971343290729163921781719182035885751247406005859375\"},\r\n    {1e-13, chars_format::fixed, 95,\r\n        \"0.00000000000010000000000000000303737455634003709136034716842278413651001756079494953155517578125\"},\r\n    {1e-12, chars_format::fixed, 92,\r\n        \"0.00000000000099999999999999997988664762925561536725284350612952266601496376097202301025390625\"},\r\n    {1e-11, chars_format::fixed, 89,\r\n        \"0.00000000000999999999999999939496969281939810930172340963650867706746794283390045166015625\"},\r\n    {1e-10, chars_format::fixed, 86,\r\n        \"0.00000000010000000000000000364321973154977415791655470655996396089904010295867919921875\"},\r\n    {1e-09, chars_format::fixed, 82,\r\n        \"0.0000000010000000000000000622815914577798564188970686927859787829220294952392578125\"},\r\n    {1e-08, chars_format::fixed, 78,\r\n        \"0.000000010000000000000000209225608301284726753266340892878361046314239501953125\"},\r\n    {1e-07, chars_format::fixed, 73, \"0.0000000999999999999999954748111825886258685613938723690807819366455078125\"},\r\n    {1e-06, chars_format::fixed, 72, \"0.000000999999999999999954748111825886258685613938723690807819366455078125\"},\r\n    {1e-05, chars_format::fixed, 69, \"0.000010000000000000000818030539140313095458623138256371021270751953125\"},\r\n    {1e-04, chars_format::fixed, 66, \"0.000100000000000000004792173602385929598312941379845142364501953125\"},\r\n    {1e-03, chars_format::fixed, 60, \"0.001000000000000000020816681711721685132943093776702880859375\"},\r\n    {1e-02, chars_format::fixed, 59, \"0.01000000000000000020816681711721685132943093776702880859375\"},\r\n    {1e-01, chars_format::fixed, 55, \"0.1000000000000000055511151231257827021181583404541015625\"},\r\n    {1e+00, chars_format::fixed, 0, \"1\"},\r\n    {1e+01, chars_format::fixed, 0, \"10\"},\r\n    {1e+02, chars_format::fixed, 0, \"100\"},\r\n    {1e+03, chars_format::fixed, 0, \"1000\"},\r\n    {1e+04, chars_format::fixed, 0, \"10000\"},\r\n    {1e+05, chars_format::fixed, 0, \"100000\"},\r\n    {1e+06, chars_format::fixed, 0, \"1000000\"},\r\n    {1e+07, chars_format::fixed, 0, \"10000000\"},\r\n    {1e+08, chars_format::fixed, 0, \"100000000\"},\r\n    {1e+09, chars_format::fixed, 0, \"1000000000\"},\r\n    {1e+10, chars_format::fixed, 0, \"10000000000\"},\r\n    {1e+11, chars_format::fixed, 0, \"100000000000\"},\r\n    {1e+12, chars_format::fixed, 0, \"1000000000000\"},\r\n    {1e+13, chars_format::fixed, 0, \"10000000000000\"},\r\n    {1e+14, chars_format::fixed, 0, \"100000000000000\"},\r\n    {1e+15, chars_format::fixed, 0, \"1000000000000000\"},\r\n    {1e+16, chars_format::fixed, 0, \"10000000000000000\"},\r\n    {1e+17, chars_format::fixed, 0, \"100000000000000000\"},\r\n    {1e+18, chars_format::fixed, 0, \"1000000000000000000\"},\r\n    {1e+19, chars_format::fixed, 0, \"10000000000000000000\"},\r\n    {1e+20, chars_format::fixed, 0, \"100000000000000000000\"},\r\n    {1e+21, chars_format::fixed, 0, \"1000000000000000000000\"},\r\n    {1e+22, chars_format::fixed, 0, \"10000000000000000000000\"},\r\n    {1e+23, chars_format::fixed, 0, \"99999999999999991611392\"},\r\n    {1e+24, chars_format::fixed, 0, \"999999999999999983222784\"},\r\n    {1e+25, chars_format::fixed, 0, \"10000000000000000905969664\"},\r\n    {1e+26, chars_format::fixed, 0, \"100000000000000004764729344\"},\r\n    {1e+27, chars_format::fixed, 0, \"1000000000000000013287555072\"},\r\n    {1e+28, chars_format::fixed, 0, \"9999999999999999583119736832\"},\r\n    {1e+29, chars_format::fixed, 0, \"99999999999999991433150857216\"},\r\n    {1e+30, chars_format::fixed, 0, \"1000000000000000019884624838656\"},\r\n    {1e+31, chars_format::fixed, 0, \"9999999999999999635896294965248\"},\r\n    {1e+32, chars_format::fixed, 0, \"100000000000000005366162204393472\"},\r\n    {1e+33, chars_format::fixed, 0, \"999999999999999945575230987042816\"},\r\n    {1e+34, chars_format::fixed, 0, \"9999999999999999455752309870428160\"},\r\n    {1e+35, chars_format::fixed, 0, \"99999999999999996863366107917975552\"},\r\n    {1e+36, chars_format::fixed, 0, \"1000000000000000042420637374017961984\"},\r\n    {1e+37, chars_format::fixed, 0, \"9999999999999999538762658202121142272\"},\r\n    {1e+38, chars_format::fixed, 0, \"99999999999999997748809823456034029568\"},\r\n    {1e+39, chars_format::fixed, 0, \"999999999999999939709166371603178586112\"},\r\n    {1e+40, chars_format::fixed, 0, \"10000000000000000303786028427003666890752\"},\r\n    {1e+41, chars_format::fixed, 0, \"100000000000000000620008645040778319495168\"},\r\n    {1e+42, chars_format::fixed, 0, \"1000000000000000044885712678075916785549312\"},\r\n    {1e+43, chars_format::fixed, 0, \"10000000000000000139372116959414099130712064\"},\r\n    {1e+44, chars_format::fixed, 0, \"100000000000000008821361405306422640701865984\"},\r\n    {1e+45, chars_format::fixed, 0, \"999999999999999929757289024535551219930759168\"},\r\n    {1e+46, chars_format::fixed, 0, \"9999999999999999931398190359470212947659194368\"},\r\n    {1e+47, chars_format::fixed, 0, \"100000000000000004384584304507619735463404765184\"},\r\n    {1e+48, chars_format::fixed, 0, \"1000000000000000043845843045076197354634047651840\"},\r\n    {1e+49, chars_format::fixed, 0, \"9999999999999999464902769475481793196872414789632\"},\r\n    {1e+50, chars_format::fixed, 0, \"100000000000000007629769841091887003294964970946560\"},\r\n    {1e+51, chars_format::fixed, 0, \"999999999999999993220948674361627976461708441944064\"},\r\n    {1e+52, chars_format::fixed, 0, \"9999999999999999932209486743616279764617084419440640\"},\r\n    {1e+53, chars_format::fixed, 0, \"99999999999999999322094867436162797646170844194406400\"},\r\n    {1e+54, chars_format::fixed, 0, \"1000000000000000078291540404596243842305360299886116864\"},\r\n    {1e+55, chars_format::fixed, 0, \"10000000000000000102350670204085511496304388135324745728\"},\r\n    {1e+56, chars_format::fixed, 0, \"100000000000000009190283508143378238084034459715684532224\"},\r\n    {1e+57, chars_format::fixed, 0, \"1000000000000000048346692115553659057528394845890514255872\"},\r\n    {1e+58, chars_format::fixed, 0, \"9999999999999999438119489974413630815797154428513196965888\"},\r\n    {1e+59, chars_format::fixed, 0, \"99999999999999997168788049560464200849936328366177157906432\"},\r\n    {1e+60, chars_format::fixed, 0, \"999999999999999949387135297074018866963645011013410073083904\"},\r\n    {1e+61, chars_format::fixed, 0, \"9999999999999999493871352970740188669636450110134100730839040\"},\r\n    {1e+62, chars_format::fixed, 0, \"100000000000000003502199685943161173046080317798311825604870144\"},\r\n    {1e+63, chars_format::fixed, 0, \"1000000000000000057857959942726969827393378689175040438172647424\"},\r\n    {1e+64, chars_format::fixed, 0, \"10000000000000000213204190094543968723012578712679649467743338496\"},\r\n    {1e+65, chars_format::fixed, 0, \"99999999999999999209038626283633850822756121694230455365568299008\"},\r\n    {1e+66, chars_format::fixed, 0, \"999999999999999945322333868247445125709646570021247924665841614848\"},\r\n    {1e+67, chars_format::fixed, 0, \"9999999999999999827367757839185598317239782875580932278577147150336\"},\r\n    {1e+68, chars_format::fixed, 0, \"99999999999999995280522225138166806691251291352861698530421623488512\"},\r\n    {1e+69, chars_format::fixed, 0, \"1000000000000000072531436381529235126158374409646521955518210155479040\"},\r\n    {1e+70, chars_format::fixed, 0, \"10000000000000000725314363815292351261583744096465219555182101554790400\"},\r\n    {1e+71, chars_format::fixed, 0, \"100000000000000004188152556421145795899143386664033828314342771180699648\"},\r\n    {1e+72, chars_format::fixed, 0, \"999999999999999943801810948794571024057224129020550531544123892056457216\"},\r\n    {1e+73, chars_format::fixed, 0, \"9999999999999999830336967949613257980309080240684656321838454199566729216\"},\r\n    {1e+74, chars_format::fixed, 0, \"99999999999999995164818811802792197885196090803013355167206819763650035712\"},\r\n    {1e+75, chars_format::fixed, 0, \"999999999999999926539781176481198923508803215199467887262646419780362305536\"},\r\n    {1e+76, chars_format::fixed, 0, \"10000000000000000470601344959054695891559601407866630764278709534898249531392\"},\r\n    {1e+77, chars_format::fixed, 0, \"99999999999999998278261272554585856747747644714015897553975120217811154108416\"},\r\n    {1e+78, chars_format::fixed, 0, \"1000000000000000008493621433689702976148869924598760615894999102702796905906176\"},\r\n    {1e+79, chars_format::fixed, 0, \"9999999999999999673560075006595519222746403606649979913266024618633003221909504\"},\r\n    {1e+80, chars_format::fixed, 0,\r\n        \"100000000000000000026609864708367276537402401181200809098131977453489758916313088\"},\r\n    {1e+81, chars_format::fixed, 0,\r\n        \"999999999999999921281879895665782741935503249059183851809998224123064148429897728\"},\r\n    {1e+82, chars_format::fixed, 0,\r\n        \"9999999999999999634067965630886574211027143225273567793680363843427086501542887424\"},\r\n    {1e+83, chars_format::fixed, 0,\r\n        \"100000000000000003080666323096525690777025204007643346346089744069413985291331436544\"},\r\n    {1e+84, chars_format::fixed, 0,\r\n        \"1000000000000000057766609898115896702437267127096064137098041863234712334016924614656\"},\r\n    {1e+85, chars_format::fixed, 0,\r\n        \"10000000000000000146306952306748730309700429878646550592786107871697963642511482159104\"},\r\n    {1e+86, chars_format::fixed, 0,\r\n        \"100000000000000001463069523067487303097004298786465505927861078716979636425114821591040\"},\r\n    {1e+87, chars_format::fixed, 0,\r\n        \"999999999999999959416724456350362731491996089648451439669739009806703922950954425516032\"},\r\n    {1e+88, chars_format::fixed, 0,\r\n        \"9999999999999999594167244563503627314919960896484514396697390098067039229509544255160320\"},\r\n    {1e+89, chars_format::fixed, 0,\r\n        \"99999999999999999475366575191804932315794610450682175621941694731908308538307845136842752\"},\r\n    {1e+90, chars_format::fixed, 0,\r\n        \"999999999999999966484112715463900049825186092620125502979674597309179755437379230686511104\"},\r\n    {1e+91, chars_format::fixed, 0,\r\n        \"10000000000000000795623248612804971431562261401669105159386439973487930752201761134141767680\"},\r\n    {1e+92, chars_format::fixed, 0,\r\n        \"100000000000000004337729697461918607329029332495193931179177378933611681288968111094132375552\"},\r\n    {1e+93, chars_format::fixed, 0,\r\n        \"1000000000000000043377296974619186073290293324951939311791773789336116812889681110941323755520\"},\r\n    {1e+94, chars_format::fixed, 0,\r\n        \"10000000000000000202188791271559469885760963232143577411377768562080040049981643093586978275328\"},\r\n    {1e+95, chars_format::fixed, 0,\r\n        \"100000000000000002021887912715594698857609632321435774113777685620800400499816430935869782753280\"},\r\n    {1e+96, chars_format::fixed, 0,\r\n        \"1000000000000000049861653971908893017010268485438462151574892930611988399099305815384459015356416\"},\r\n    {1e+97, chars_format::fixed, 0,\r\n        \"10000000000000000735758738477112498397576062152177456799245857901351759143802190202050679656153088\"},\r\n    {1e+98, chars_format::fixed, 0,\r\n        \"99999999999999999769037024514370800696612547992403838920556863966097586548129676477911932478685184\"},\r\n    {1e+99, chars_format::fixed, 0,\r\n        \"999999999999999967336168804116691273849533185806555472917961779471295845921727862608739868455469056\"},\r\n    {1e+100, chars_format::fixed, 0,\r\n        \"10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104\"},\r\n    {1e+101, chars_format::fixed, 0,\r\n        \"99999999999999997704951326524533662844684271992415000612999597473199345218078991130326129448151154688\"},\r\n    {1e+102, chars_format::fixed, 0,\r\n        \"999999999999999977049513265245336628446842719924150006129995974731993452180789911303261294481511546880\"},\r\n    {1e+103, chars_format::fixed, 0,\r\n        \"10000000000000000019156750857346687362159551272651920111528035145993793242039887559612361451081803235328\"},\r\n    {1e+104, chars_format::fixed, 0,\r\n        \"10000000000000000019156750857346687362159551272651920111528035145993793242039887559612361451081803235328\"\r\n        \"0\"},\r\n    {1e+105, chars_format::fixed, 0,\r\n        \"99999999999999993825830082528197854032702736447212447829441621253887149182459971363682052750390825530163\"\r\n        \"2\"},\r\n    {1e+106, chars_format::fixed, 0,\r\n        \"1000000000000000091035999050368435010460453995175486557154545737484090289535133415215418009754161219056435\"\r\n        \"2\"},\r\n    {1e+107, chars_format::fixed, 0,\r\n        \"9999999999999999688138404702992698343537126906127968940664421175279152513667064539525400239539588480525926\"\r\n        \"4\"},\r\n    {1e+108, chars_format::fixed, 0,\r\n        \"1000000000000000033998991713002824594943974719712898047713430714837875271723200833292741616380733445921308\"\r\n        \"672\"},\r\n    {1e+109, chars_format::fixed, 0,\r\n        \"9999999999999999818508707188399807864717650964328171247958398369899072554380053298205803424393137676263358\"\r\n        \"464\"},\r\n    {1e+110, chars_format::fixed, 0,\r\n        \"1000000000000000023569367514170255833249532795056881863129912539268281668466161732598309361592449510262314\"\r\n        \"10688\"},\r\n    {1e+111, chars_format::fixed, 0,\r\n        \"9999999999999999568197726416418157584051044772583782817953962156228826076211114881539429309474323220447488\"\r\n        \"90112\"},\r\n    {1e+112, chars_format::fixed, 0,\r\n        \"9999999999999999301199346926304397284673331501389768492615896861647229832830913903761963586894254467577228\"\r\n        \"034048\"},\r\n    {1e+113, chars_format::fixed, 0,\r\n        \"1000000000000000015559416129466843024268201396921061433369770580430833781164755703264985389915047447676206\"\r\n        \"28086784\"},\r\n    {1e+114, chars_format::fixed, 0,\r\n        \"1000000000000000015559416129466843024268201396921061433369770580430833781164755703264985389915047447676206\"\r\n        \"280867840\"},\r\n    {1e+115, chars_format::fixed, 0,\r\n        \"1000000000000000015559416129466843024268201396921061433369770580430833781164755703264985389915047447676206\"\r\n        \"2808678400\"},\r\n    {1e+116, chars_format::fixed, 0,\r\n        \"1000000000000000015559416129466843024268201396921061433369770580430833781164755703264985389915047447676206\"\r\n        \"28086784000\"},\r\n    {1e+117, chars_format::fixed, 0,\r\n        \"1000000000000000050555427725995033814228237030803003279020481474722232763977085405824233377105062219252417\"\r\n        \"113236701184\"},\r\n    {1e+118, chars_format::fixed, 0,\r\n        \"9999999999999999665649998943273759183241515094863428494587753284228752052274941196820382078490267674695111\"\r\n        \"155514343424\"},\r\n    {1e+119, chars_format::fixed, 0,\r\n        \"9999999999999999441675524725493338127497287038019000682423203560763798562276031100441194960474173136607361\"\r\n        \"8283536318464\"},\r\n    {1e+120, chars_format::fixed, 0,\r\n        \"9999999999999999800034683473942011816688051928970085181886483118307724146274287254647894349299924397547760\"\r\n        \"75181077037056\"},\r\n    {1e+121, chars_format::fixed, 0,\r\n        \"1000000000000000037340933747145988971939327575449182038102773041037800508067149710137861337142112641505239\"\r\n        \"9029342192009216\"},\r\n    {1e+122, chars_format::fixed, 0,\r\n        \"1000000000000000014405947587245273855831118622428312630137123149354989270691261316268632576257264560805054\"\r\n        \"37183296233537536\"},\r\n    {1e+123, chars_format::fixed, 0,\r\n        \"9999999999999999777099697314041296700579842975949215773920833226624912908898398860778665588415076316847575\"\r\n        \"22070951350501376\"},\r\n    {1e+124, chars_format::fixed, 0,\r\n        \"9999999999999999483531874467312143214394768377282087351960514613084929070487027419252537449089020883885200\"\r\n        \"422613425626021888\"},\r\n    {1e+125, chars_format::fixed, 0,\r\n        \"9999999999999999248677616189928820425446708698348384614392259722252941999757930266031634937628176537515300\"\r\n        \"5841365553228283904\"},\r\n    {1e+126, chars_format::fixed, 0,\r\n        \"9999999999999999248677616189928820425446708698348384614392259722252941999757930266031634937628176537515300\"\r\n        \"58413655532282839040\"},\r\n    {1e+127, chars_format::fixed, 0,\r\n        \"9999999999999999549291066784979473595300225087383524118479625982517885450291174622154390152298057300868772\"\r\n        \"377386949310916067328\"},\r\n    {1e+128, chars_format::fixed, 0,\r\n        \"1000000000000000075174486916518208627471429064352408213482909102357765925242415204664541101097758035428265\"\r\n        \"95503885252632667750400\"},\r\n    {1e+129, chars_format::fixed, 0,\r\n        \"9999999999999999982174435641852414159889288687594125004365433397299404019059046494971157661422685600097771\"\r\n        \"75966751665376232210432\"},\r\n    {1e+130, chars_format::fixed, 0,\r\n        \"1000000000000000059783078246051615185174929025233809070873635949832200820575113093631056034106660140344568\"\r\n        \"1992244323541365884452864\"},\r\n    {1e+131, chars_format::fixed, 0,\r\n        \"9999999999999999120255550095723181391285286496952573018246136855867758157690128277095993909921203475410697\"\r\n        \"4340599870111173348163584\"},\r\n    {1e+132, chars_format::fixed, 0,\r\n        \"9999999999999999908295674023612765636866088499824849119840922265176691516655996362010429339865415703696022\"\r\n        \"53175829982724989462249472\"},\r\n    {1e+133, chars_format::fixed, 0,\r\n        \"1000000000000000022351172359476859933509840930097375956047883642890026486024234359597620351184310059501015\"\r\n        \"2570837624953702918544949248\"},\r\n    {1e+134, chars_format::fixed, 0,\r\n        \"9999999999999999214820364967069931500754982737297246150437511104984830160766032447285726161514508942804936\"\r\n        \"4457837845490532419930947584\"},\r\n    {1e+135, chars_format::fixed, 0,\r\n        \"9999999999999999618296908418149398634492353362767851514454041234551004040556556906761917101645945603687022\"\r\n        \"89580532071091311261383655424\"},\r\n    {1e+136, chars_format::fixed, 0,\r\n        \"1000000000000000058664061270074011975546204286389730438809371354550982135205381560950477535796139358980403\"\r\n        \"0375857007499376802103616864256\"},\r\n    {1e+137, chars_format::fixed, 0,\r\n        \"1000000000000000032841562489204926078987012566359611695512313426258747006898787995544001315627727412683949\"\r\n        \"50478432243557864849063421149184\"},\r\n    {1e+138, chars_format::fixed, 0,\r\n        \"1000000000000000032841562489204926078987012566359611695512313426258747006898787995544001315627727412683949\"\r\n        \"504784322435578648490634211491840\"},\r\n    {1e+139, chars_format::fixed, 0,\r\n        \"1000000000000000032841562489204926078987012566359611695512313426258747006898787995544001315627727412683949\"\r\n        \"5047843224355786484906342114918400\"},\r\n    {1e+140, chars_format::fixed, 0,\r\n        \"1000000000000000059283801240814870037063624887670453288648500744829995778284739806520232965080181245691517\"\r\n        \"92237293382948229697163514582401024\"},\r\n    {1e+141, chars_format::fixed, 0,\r\n        \"1000000000000000016976219238238959704141045173573106739630601035115997744067216908958262325956255112879408\"\r\n        \"454231155599236459402033650892537856\"},\r\n    {1e+142, chars_format::fixed, 0,\r\n        \"1000000000000000050822284840299687970479108944850983978844920802887196171441235227007838837255396019129096\"\r\n        \"0287445781834331294577148468377157632\"},\r\n    {1e+143, chars_format::fixed, 0,\r\n        \"1000000000000000023745432358651105357408657927828682187473464988670237429542020572568177628216083294129345\"\r\n        \"96913384011607579341316989008157343744\"},\r\n    {1e+144, chars_format::fixed, 0,\r\n        \"1000000000000000023745432358651105357408657927828682187473464988670237429542020572568177628216083294129345\"\r\n        \"969133840116075793413169890081573437440\"},\r\n    {1e+145, chars_format::fixed, 0,\r\n        \"9999999999999999890870611821409196126784806260401358945180015464725302399110258148854112806457630061296658\"\r\n        \"928320953898584032761523454337112604672\"},\r\n    {1e+146, chars_format::fixed, 0,\r\n        \"9999999999999999336336672997246224211101969431784618257892600389561987365014342025929851245332505453301777\"\r\n        \"7074930382791057905692427399713177731072\"},\r\n    {1e+147, chars_format::fixed, 0,\r\n        \"9999999999999999779963824056576601743648238894678010807722532449692639392291074924269260494232605139697682\"\r\n        \"68415537077468838432306731146395363835904\"},\r\n    {1e+148, chars_format::fixed, 0,\r\n        \"1000000000000000048976726575150520579572227003530743888745042374590168263593384756161231529247276463793113\"\r\n        \"0646815102767620534329186625852171022761984\"},\r\n    {1e+149, chars_format::fixed, 0,\r\n        \"1000000000000000048976726575150520579572227003530743888745042374590168263593384756161231529247276463793113\"\r\n        \"06468151027676205343291866258521710227619840\"},\r\n    {1e+150, chars_format::fixed, 0,\r\n        \"9999999999999999808355961724373745905731200140303187930911648101541001122036785829762982686162211519627020\"\r\n        \"60266176005440567032331208403948233373515776\"},\r\n    {1e+151, chars_format::fixed, 0,\r\n        \"1000000000000000017177532387217719118039310408430545510773232844520003126278188542008262674286117318272254\"\r\n        \"5959543542834786931126445173006249634549465088\"},\r\n    {1e+152, chars_format::fixed, 0,\r\n        \"1000000000000000046251081359041994740012262723950726884918887272012725537537796509233834198822034251319896\"\r\n        \"62450489690590919397689516441796634752009109504\"},\r\n    {1e+153, chars_format::fixed, 0,\r\n        \"9999999999999999997334030041231537448555390191184366862858401880243696795224237616729197595645671584436693\"\r\n        \"78824028710020392594094129030220133015859757056\"},\r\n    {1e+154, chars_format::fixed, 0,\r\n        \"1000000000000000036947545688058226540980917982984268845192277855215054365934721959721651310970540832744651\"\r\n        \"1753687232667314337003349573404171046192448274432\"},\r\n    {1e+155, chars_format::fixed, 0,\r\n        \"1000000000000000007176231540910168304080614811891603118067127721462506616804883401282666069845761893303865\"\r\n        \"73813296762136260081534229469225952733653677113344\"},\r\n    {1e+156, chars_format::fixed, 0,\r\n        \"9999999999999999833591802231917217145603722750174705363670076144604684175010125545314778769459387417512373\"\r\n        \"88344363105067534507348164573733465510370326085632\"},\r\n    {1e+157, chars_format::fixed, 0,\r\n        \"9999999999999999833591802231917217145603722750174705363670076144604684175010125545314778769459387417512373\"\r\n        \"883443631050675345073481645737334655103703260856320\"},\r\n    {1e+158, chars_format::fixed, 0,\r\n        \"9999999999999999528733545365121100799744618278185808317908538774978595223920578706899569900341651077638731\"\r\n        \"0061494932420984963311567802202010637287727642443776\"},\r\n    {1e+159, chars_format::fixed, 0,\r\n        \"9999999999999999284846939871684207723057334700594690681299308879277724063048941236167402805047462005739816\"\r\n        \"70431418299523701733729688780649419062882836695482368\"},\r\n    {1e+160, chars_format::fixed, 0,\r\n        \"1000000000000000006528407745068226556845664214888626711844884454552051177783818114251033750998886703581634\"\r\n        \"2470187175785193750117648543530356184548650438281396224\"},\r\n    {1e+161, chars_format::fixed, 0,\r\n        \"1000000000000000037745893248228148870661636512820289769330865881201762686375387710504751139196542904784695\"\r\n        \"27765363729011764432297892058199009821165792668120252416\"},\r\n    {1e+162, chars_format::fixed, 0,\r\n        \"9999999999999999378499396381163974664505251594389679853757253159226858588823650024928554969640430609348999\"\r\n        \"79621894213003182527093908649335762989920701551401238528\"},\r\n    {1e+163, chars_format::fixed, 0,\r\n        \"9999999999999999378499396381163974664505251594389679853757253159226858588823650024928554969640430609348999\"\r\n        \"796218942130031825270939086493357629899207015514012385280\"},\r\n    {1e+164, chars_format::fixed, 0,\r\n        \"1000000000000000001783349948587918365145636425603013927107015277701295028477899535620468707992842960998768\"\r\n        \"97036220978235643807646031628623453753183252563447406133248\"},\r\n    {1e+165, chars_format::fixed, 0,\r\n        \"9999999999999998994898934518334849272334583997405404203369513388555203571250442826162875703467631208965785\"\r\n        \"85177704871391229197474064067196498264773607101557544845312\"},\r\n    {1e+166, chars_format::fixed, 0,\r\n        \"9999999999999999404072760505352583023983296100855298230449769143938302256661863838179600254051950569374547\"\r\n        \"392515068357773127490685649548117139715971745147241514401792\"},\r\n    {1e+167, chars_format::fixed, 0,\r\n        \"1000000000000000038608994287419514402794020514913504389544238295685773910164927426701973917545431703435557\"\r\n        \"50902863155030391327289536708508823166797373630632400726786048\"},\r\n    {1e+168, chars_format::fixed, 0,\r\n        \"9999999999999999338604948347429745623719502164303315186116928223077006466996036476256924325958459471709145\"\r\n        \"54599698521475539380813444812793279458505403728617494385000448\"},\r\n    {1e+169, chars_format::fixed, 0,\r\n        \"9999999999999999338604948347429745623719502164303315186116928223077006466996036476256924325958459471709145\"\r\n        \"545996985214755393808134448127932794585054037286174943850004480\"},\r\n    {1e+170, chars_format::fixed, 0,\r\n        \"1000000000000000034419054309312452809177137702974177474706936476750650979626314475538922658147448273184971\"\r\n        \"79085147422915077831721209019419643357959500300321574675254607872\"},\r\n    {1e+171, chars_format::fixed, 0,\r\n        \"9999999999999999539722067296568702117329877137391007098307415531962907132849458132083384777061664123737260\"\r\n        \"01850053663010587168093173889073910282723323583537144858509574144\"},\r\n    {1e+172, chars_format::fixed, 0,\r\n        \"1000000000000000082687162857105802367643627696515223533632653430883267139431135672937273166412217389671719\"\r\n        \"2642523265688348930066834399772699475577180106550229078889679814656\"},\r\n    {1e+173, chars_format::fixed, 0,\r\n        \"1000000000000000014039186255799705217824619705701291360938300429450213045486501081081841332435656868446122\"\r\n        \"85763778101906192989276863139689872767772084421689716760605683089408\"},\r\n    {1e+174, chars_format::fixed, 0,\r\n        \"1000000000000000068957567536844582937679826098352437099093782830596656320642208754566186799616905285426599\"\r\n        \"982929417458880300383900478261195703581718577367397759832385751351296\"},\r\n    {1e+175, chars_format::fixed, 0,\r\n        \"9999999999999999371534524623368764100273307559896873275206250678451924602685103382037576783819090846734548\"\r\n        \"822294900033162112051840457868829614121240178061963384891963422539776\"},\r\n    {1e+176, chars_format::fixed, 0,\r\n        \"1000000000000000007448980502074319891441994938583153872359642541312639852467816160263719876373907058408465\"\r\n        \"60260278464628372543383280977318309056924111623883709653889736043921408\"},\r\n    {1e+177, chars_format::fixed, 0,\r\n        \"1000000000000000007448980502074319891441994938583153872359642541312639852467816160263719876373907058408465\"\r\n        \"602602784646283725433832809773183090569241116238837096538897360439214080\"},\r\n    {1e+178, chars_format::fixed, 0,\r\n        \"1000000000000000052438118447506283719547380015442972461056613724331806183475371886382095683088785761598872\"\r\n        \"4636416932177829345401680187244151732297960592357271816907060120777654272\"},\r\n    {1e+179, chars_format::fixed, 0,\r\n        \"9999999999999999804554977348151415945787638924672627191414598315011400538632827245926943923449798364942214\"\r\n        \"8597943950338419997003168440244384097290815044070304544781216945608327168\"},\r\n    {1e+180, chars_format::fixed, 0,\r\n        \"1000000000000000009248546019891598444566210341657546615907521388633406505708118389308454908642502206536081\"\r\n        \"877044340989143693798086218131232373875663313958712699944969706504756133888\"},\r\n    {1e+181, chars_format::fixed, 0,\r\n        \"9999999999999999171107915076469365246063817042486381462561244058101538598046442622180212564904306224021286\"\r\n        \"256366562347133135483117101991090685868467907010818055540655879490029748224\"},\r\n    {1e+182, chars_format::fixed, 0,\r\n        \"1000000000000000064531198727238395596542107524102891697698359578327358093250202865562715099933745157016453\"\r\n        \"82788895184180192194795092289050635704895322791329123657951217763820802932736\"},\r\n    {1e+183, chars_format::fixed, 0,\r\n        \"9999999999999999465948729515652283389935268682194888565445714403135947064937559828869600251790935293249936\"\r\n        \"66087115356131035228239552737388526279268078143523691759154905886843985723392\"},\r\n    {1e+184, chars_format::fixed, 0,\r\n        \"1000000000000000017356668416969128693522675261749530561236844323121852738547624112492413070031884505939869\"\r\n        \"7631682172475335672600663748292592247410791680053842186513692689376624118857728\"},\r\n    {1e+185, chars_format::fixed, 0,\r\n        \"9999999999999999796170441687537151711071294518668416520676321189574484547855611100361714461103959850786025\"\r\n        \"1139162957211888350975873638026151889477992007905860430885494197722591793250304\"},\r\n    {1e+186, chars_format::fixed, 0,\r\n        \"9999999999999999796170441687537151711071294518668416520676321189574484547855611100361714461103959850786025\"\r\n        \"11391629572118883509758736380261518894779920079058604308854941977225917932503040\"},\r\n    {1e+187, chars_format::fixed, 0,\r\n        \"9999999999999999071569656121801212080692814968920789464627446869617922299624001453201875281811380250249693\"\r\n        \"879805812353226907091680705581859236698853640605134247712274342131878495422251008\"},\r\n    {1e+188, chars_format::fixed, 0,\r\n        \"1000000000000000023093091302697871548929838224851699275430564578154842189679457688865761796867950761110782\"\r\n        \"38543825857419659919011313587350687602971665369018571203143144663564875896666980352\"},\r\n    {1e+189, chars_format::fixed, 0,\r\n        \"1000000000000000023093091302697871548929838224851699275430564578154842189679457688865761796867950761110782\"\r\n        \"385438258574196599190113135873506876029716653690185712031431446635648758966669803520\"},\r\n    {1e+190, chars_format::fixed, 0,\r\n        \"1000000000000000072559171597318778361030342428781137282456834398397210172492068907445206818174324195174062\"\r\n        \"5976868675721161334753163637413771490365780039321792212624518252692320803210995433472\"},\r\n    {1e+191, chars_format::fixed, 0,\r\n        \"1000000000000000072559171597318778361030342428781137282456834398397210172492068907445206818174324195174062\"\r\n        \"59768686757211613347531636374137714903657800393217922126245182526923208032109954334720\"},\r\n    {1e+192, chars_format::fixed, 0,\r\n        \"1000000000000000040900880208761398001286019738266296957960021713442094663491997727554362004538245197373563\"\r\n        \"261847757813447631532786297905940174312186739777303375354598782943738754654264509857792\"},\r\n    {1e+193, chars_format::fixed, 0,\r\n        \"1000000000000000066227513319607302289081477890678169217557471861406187070692054671467037855447108395613962\"\r\n        \"7305190456203824330868103505742897540916997511012040520808812168041334151877325366493184\"},\r\n    {1e+194, chars_format::fixed, 0,\r\n        \"9999999999999999446596743875469617076632787591011823714897111511785435161317813406861937710845650440600452\"\r\n        \"8089686414709538562749489776621177115003729674648080379472553427423904462708600804999168\"},\r\n    {1e+195, chars_format::fixed, 0,\r\n        \"9999999999999999770777647694297191960414651941883788637744473405725817973478542288944188602479099378077566\"\r\n        \"00796112539971931616645685181699233267813951241073670004367049615544210109925082343145472\"},\r\n    {1e+196, chars_format::fixed, 0,\r\n        \"9999999999999999511432924639235132053389160461186216699466583890573511723749959183278387889172340228095875\"\r\n        \"448767138256706948253250552493092635735926276453993770366538373425000777236538229086224384\"},\r\n    {1e+197, chars_format::fixed, 0,\r\n        \"9999999999999999511432924639235132053389160461186216699466583890573511723749959183278387889172340228095875\"\r\n        \"4487671382567069482532505524930926357359262764539937703665383734250007772365382290862243840\"},\r\n    {1e+198, chars_format::fixed, 0,\r\n        \"1000000000000000017535541566019400541537441865177200086145798104936341572305513193378283771523764365204900\"\r\n        \"328030374534281861011105867876227585990799216050325567033999660761493056632508247061001404416\"},\r\n    {1e+199, chars_format::fixed, 0,\r\n        \"1000000000000000097206240488534465344975672848047494185584765763991130052222133923438817750651600776079275\"\r\n        \"6678147673846152604340428430285295728914471221362369950308146488642846313231335560438561636352\"},\r\n    {1e+200, chars_format::fixed, 0,\r\n        \"9999999999999999697331222125103616594745032754550236264824175095034684843555407553419633840470625186802751\"\r\n        \"2415973882408182135734368278484639385041047239877871023591066789981811181813306167128854888448\"},\r\n    {1e+201, chars_format::fixed, 0,\r\n        \"1000000000000000037718785293056550291741793714171007924670336578563554653884390444993619046236149589293075\"\r\n        \"414109087389699655531583234914810756005630018925423128793192791080866922220799992003324610084864\"},\r\n    {1e+202, chars_format::fixed, 0,\r\n        \"9999999999999999017474591319641730272072128367390393282944984404433823148266910656903077218579754480674748\"\r\n        \"342103902584639871831041306548820316951909258721342916786285447187693014154661313392524876840960\"},\r\n    {1e+203, chars_format::fixed, 0,\r\n        \"9999999999999999887691078750632944765093445982954992299750348488402926118236186684444269694600068984518592\"\r\n        \"0534555642245481492613075738123641525387194542623914743194966239051177873087980216425864602058752\"},\r\n    {1e+204, chars_format::fixed, 0,\r\n        \"9999999999999999887691078750632944765093445982954992299750348488402926118236186684444269694600068984518592\"\r\n        \"05345556422454814926130757381236415253871945426239147431949662390511778730879802164258646020587520\"},\r\n    {1e+205, chars_format::fixed, 0,\r\n        \"1000000000000000016616035472855013340286026761993566398512806499527303906862635501325745128692656962574862\"\r\n        \"2041088095949318798038992779336698179926498716835527012730124200454693714718121768282606166882648064\"},\r\n    {1e+206, chars_format::fixed, 0,\r\n        \"1000000000000000038893577551088388431307372492952020133343023820076912942893848967630799656078777013873264\"\r\n        \"60311941213291353170611409437561654018367221268940354434586262616943544566455807655946219322240663552\"},\r\n    {1e+207, chars_format::fixed, 0,\r\n        \"1000000000000000038893577551088388431307372492952020133343023820076912942893848967630799656078777013873264\"\r\n        \"603119412132913531706114094375616540183672212689403544345862626169435445664558076559462193222406635520\"},\r\n    {1e+208, chars_format::fixed, 0,\r\n        \"9999999999999999818630698308109481982927274216983785721776674794699138106539424938898600659703096825493544\"\r\n        \"616522696356805028364441642842329313746550197144253860793660984920822957311285732475861572950035529728\"},\r\n    {1e+209, chars_format::fixed, 0,\r\n        \"1000000000000000073111882183254852571116159535704205070042237624441112422237792851875363410143857412667610\"\r\n        \"68799969763125334902791605243044670546908252847439043930576054277584733562461577854658781477884848504832\"},\r\n    {1e+210, chars_format::fixed, 0,\r\n        \"9999999999999999271137824193446055745986681532948826734589253924871946437036322790985580594661810444784007\"\r\n        \"25843812838336795121561031396504666917998514458446354143529431921823271795036250068185162804696593727488\"},\r\n    {1e+211, chars_format::fixed, 0,\r\n        \"9999999999999999563134023721266549739021664297767471527755878388779781994104643936539191296017163181162427\"\r\n        \"18274989796920105902832035603293074628215317261635171175975654092628084560952155763865693199526971991654\"\r\n        \"4\"},\r\n    {1e+212, chars_format::fixed, 0,\r\n        \"9999999999999999095940104476753759350165691874057639858689279246527245102795330103653414173848598802956955\"\r\n        \"303851066631868086527984288724316222918684327765330639240616986193403841354867066507768445677983667689881\"\r\n        \"6\"},\r\n    {1e+213, chars_format::fixed, 0,\r\n        \"9999999999999999843450375267974223972335247751993370529195837874131304128890232236270657569318301808085710\"\r\n        \"3100891967716008425285219964180994603002344795269643552712402737660070481623142523171900237856413512525414\"\r\n        \"4\"},\r\n    {1e+214, chars_format::fixed, 0,\r\n        \"9999999999999999544446266951486038123467425400819078260993214423089680518452271383223760211130420606034208\"\r\n        \"3075939447157077401283069133405861653476144188223108688589909587369657654393353779934213925425782778274775\"\r\n        \"04\"},\r\n    {1e+215, chars_format::fixed, 0,\r\n        \"9999999999999999066039693645104940765278909638940210631869016901423082741751534018348724438029810682751805\"\r\n        \"1036015414262787762879627804165648934234223216948652905993920546904997130825691790753915825536773603473752\"\r\n        \"064\"},\r\n    {1e+216, chars_format::fixed, 0,\r\n        \"1000000000000000021421546958041957442493134746744949294176709095342291740583330369404881029347127449862957\"\r\n        \"2793183309320908289504788699434215946041483354800734678422429424402018238738808056478663126527039562299620\"\r\n        \"72064\"},\r\n    {1e+217, chars_format::fixed, 0,\r\n        \"9999999999999999601855055748251769806450047292244542376488118125689672251656359867008764503902493796828096\"\r\n        \"6920730331104392157891482092914687179785174704776043382501428272225416917221473218635849697412463879250897\"\r\n        \"79712\"},\r\n    {1e+218, chars_format::fixed, 0,\r\n        \"1000000000000000082657588341258737904341264764265444350704606378115616256001024752108885608304005520043104\"\r\n        \"8894293585531377363220429189576963174104449239123865018594716021581494785755468791093741283312832736674151\"\r\n        \"6615680\"},\r\n    {1e+219, chars_format::fixed, 0,\r\n        \"9999999999999999650843888854825194175928551306260938421710435951908331863990515373171968167067996252972214\"\r\n        \"7801618552072767416863994485028884962235547412234547654639257549968998154834801806327912222841098418750522\"\r\n        \"5498624\"},\r\n    {1e+220, chars_format::fixed, 0,\r\n        \"9999999999999999964372420736895110140590976995965873111133270039707753382929110612616471611327211972294570\"\r\n        \"5439303166270369074288073794559750769917932739968974996321364927527918075560104767557112385584359471548120\"\r\n        \"96741376\"},\r\n    {1e+221, chars_format::fixed, 0,\r\n        \"1000000000000000046601807174820697568405085809949376861420980458018682781323086299572767712214195712321033\"\r\n        \"9765959854898653172616660068980913606220974926434405874301273673162218994872058950552383264597357715602427\"\r\n        \"8435495936\"},\r\n    {1e+222, chars_format::fixed, 0,\r\n        \"1000000000000000046601807174820697568405085809949376861420980458018682781323086299572767712214195712321033\"\r\n        \"9765959854898653172616660068980913606220974926434405874301273673162218994872058950552383264597357715602427\"\r\n        \"84354959360\"},\r\n    {1e+223, chars_format::fixed, 0,\r\n        \"1000000000000000046601807174820697568405085809949376861420980458018682781323086299572767712214195712321033\"\r\n        \"9765959854898653172616660068980913606220974926434405874301273673162218994872058950552383264597357715602427\"\r\n        \"843549593600\"},\r\n    {1e+224, chars_format::fixed, 0,\r\n        \"9999999999999999695490351794831950209296480724474921121484247526010969488287371335268865457530508571403718\"\r\n        \"2409224841134505892881183378706080253249519082903930108094789640533388351546084948006950326015738792668900\"\r\n        \"564521713664\"},\r\n    {1e+225, chars_format::fixed, 0,\r\n        \"9999999999999999284542234486365269956094146124464869125363950430450511714984175783024165903071069343773520\"\r\n        \"0942358863613425448462294146117783821804062986135861502805217858619360833053015850664613088704891665546032\"\r\n        \"3666687950848\"},\r\n    {1e+226, chars_format::fixed, 0,\r\n        \"9999999999999999613300728333138614158656013804472910722260188106898877933626732224819925546638620725877678\"\r\n        \"6115851645630289803997405532188420966960427863550316387036875284150582847847471128538482878553569367244326\"\r\n        \"92495112994816\"},\r\n    {1e+227, chars_format::fixed, 0,\r\n        \"1000000000000000092833470372023199096890348452450507710984513881269234280819695799200296412090882625429431\"\r\n        \"2680982277369774722613785107647096954758588737320813592396350498627547090702529224003396203794828017403750\"\r\n        \"5158080469401600\"},\r\n    {1e+228, chars_format::fixed, 0,\r\n        \"9999999999999999245091215224752468651786722002863904133736401909276707768747069010008674745842963177921021\"\r\n        \"0721539729771401725798080779789307364385299200846126916697418967555614191277681217319748713923050341342237\"\r\n        \"0196749149011968\"},\r\n    {1e+229, chars_format::fixed, 0,\r\n        \"9999999999999999918388610622944277578633427011520373324179896670642961784527024602806390495869308408470337\"\r\n        \"7156852947341939925933988898461972237665534469790930519603853375043556877576725626405434043533142274420344\"\r\n        \"27503713670135808\"},\r\n    {1e+230, chars_format::fixed, 0,\r\n        \"1000000000000000099566444326005117186158815502537072402888948828882896820977495355128273569591146077734924\"\r\n        \"4345335409545480104615144188833823603491391090010261628425414842702426517565519668094253057090928936734531\"\r\n        \"5883616691581616128\"},\r\n    {1e+231, chars_format::fixed, 0,\r\n        \"1000000000000000056475411020520841414840626381983058374700565164155456563967578197189219761589459982979768\"\r\n        \"1693475363620965659806446069238773051601456032797794197839403040623198185642380825912769195995883053017532\"\r\n        \"72401848696295129088\"},\r\n    {1e+232, chars_format::fixed, 0,\r\n        \"1000000000000000056475411020520841414840626381983058374700565164155456563967578197189219761589459982979768\"\r\n        \"1693475363620965659806446069238773051601456032797794197839403040623198185642380825912769195995883053017532\"\r\n        \"724018486962951290880\"},\r\n    {1e+233, chars_format::fixed, 0,\r\n        \"9999999999999999737406270739910319339097032705193514405788685278787712705085372539462364502262226810498681\"\r\n        \"4019040754458979257737456796162759919727807229498567311142603806310797883499542489243201826933949562808949\"\r\n        \"044795771481474727936\"},\r\n    {1e+234, chars_format::fixed, 0,\r\n        \"1000000000000000017865845178806930323739528929966661805443773400559670093686692423675827549619949242079148\"\r\n        \"1557408762472600717257852554081607757108074221535423380034336465960209600239248423318159656454721941207101\"\r\n        \"74156699571604284243968\"},\r\n    {1e+235, chars_format::fixed, 0,\r\n        \"1000000000000000053166019662659649035603389457524510097335697298704389152229216559459500429134930490902572\"\r\n        \"1681812512093962950445138053653873169216309020403876699170397334223513449750683762833231235463783529148067\"\r\n        \"211236930570359138156544\"},\r\n    {1e+236, chars_format::fixed, 0,\r\n        \"1000000000000000053166019662659649035603389457524510097335697298704389152229216559459500429134930490902572\"\r\n        \"1681812512093962950445138053653873169216309020403876699170397334223513449750683762833231235463783529148067\"\r\n        \"2112369305703591381565440\"},\r\n    {1e+237, chars_format::fixed, 0,\r\n        \"9999999999999999402054613143309491576390357693393955632815408246412881648931393249517472146869904946676153\"\r\n        \"2837205133056038042458244550226238504699576640248260779350025557809411313140906763850021826347864477369777\"\r\n        \"0829313903654699186257920\"},\r\n    {1e+238, chars_format::fixed, 0,\r\n        \"1000000000000000048647597328726501040484815309997105515973531039741865112735773470079190300557012891053173\"\r\n        \"8945888832142428584597165509708623196466454966148714674320981543085810557013220039375302073350623645891623\"\r\n        \"631119178909006652304785408\"},\r\n    {1e+239, chars_format::fixed, 0,\r\n        \"9999999999999999908117914543822067029670662216463268745378029250215574072197019260112206547596676129808759\"\r\n        \"9260657287627887017431169472094235452683230716826407562484594165232135299736843791138087983021771402091458\"\r\n        \"056119576436948334022754304\"},\r\n    {1e+240, chars_format::fixed, 0,\r\n        \"1000000000000000013946113804119924437974165856986638331112094170909680489426130543638408513078605724209795\"\r\n        \"1533994970114644654884736372209103405747575829469070323477468267148252340789498643218406108321555742482136\"\r\n        \"93581484614981956096327942144\"},\r\n    {1e+241, chars_format::fixed, 0,\r\n        \"1000000000000000050961029563700272813985525273531136661630960164330677420956416331841909086388906702176065\"\r\n        \"8106681756277614179911327452208591182514380241927357631043882428148314438094801465785761804352561506118922\"\r\n        \"744139467759619125060885807104\"},\r\n    {1e+242, chars_format::fixed, 0,\r\n        \"1000000000000000050961029563700272813985525273531136661630960164330677420956416331841909086388906702176065\"\r\n        \"8106681756277614179911327452208591182514380241927357631043882428148314438094801465785761804352561506118922\"\r\n        \"7441394677596191250608858071040\"},\r\n    {1e+243, chars_format::fixed, 0,\r\n        \"1000000000000000074650575649831695774632795300119615593163034400120115457135799236292149453307499328074479\"\r\n        \"0313201299421914675928345743408263359645135065900661507886387491188354180370195272228869449812405194846465\"\r\n        \"66146722558989084608335389392896\"},\r\n    {1e+244, chars_format::fixed, 0,\r\n        \"1000000000000000074650575649831695774632795300119615593163034400120115457135799236292149453307499328074479\"\r\n        \"0313201299421914675928345743408263359645135065900661507886387491188354180370195272228869449812405194846465\"\r\n        \"661467225589890846083353893928960\"},\r\n    {1e+245, chars_format::fixed, 0,\r\n        \"1000000000000000044327956659583474385004289666086362560801979378309634770826189118595841783651700766924510\"\r\n        \"1088856284197210041026562330672682972917768891214832545527981010497103310257691199981691663623805273275210\"\r\n        \"7272876955671430431745947427930112\"},\r\n    {1e+246, chars_format::fixed, 0,\r\n        \"1000000000000000068586051851782051496707094173312964986690823395758019319873877212752887919376339615844485\"\r\n        \"2468332296376973748947989060861147282299661830963495715414706195050104006347694457779433892574685210532214\"\r\n        \"67463131958534128550160206370177024\"},\r\n    {1e+247, chars_format::fixed, 0,\r\n        \"9999999999999999521471949292288813605336325386252733424243721120057734844449743607990664678980731410286045\"\r\n        \"8468474379141079509251407559565185972665757201699124999584253091957006651156788203502711936104615116985957\"\r\n        \"27381924297989722331966923339726848\"},\r\n    {1e+248, chars_format::fixed, 0,\r\n        \"1000000000000000045298280467271417469472401846375426657837533139007570152788096642362123629080686320881309\"\r\n        \"1144035324684400589343419399880221545293044608804779072323450017879223338101291330293601352781840470765490\"\r\n        \"8851814405278709728676750356293615616\"},\r\n    {1e+249, chars_format::fixed, 0,\r\n        \"9999999999999999210968330832147026575540427693752222372866517696718412616639336002780474141705354144110364\"\r\n        \"0811181423240104047857145413152842812577527572916236425034170729678597741204746503691611405533351920096306\"\r\n        \"7478208555469597215339755257651527680\"},\r\n    {1e+250, chars_format::fixed, 0,\r\n        \"9999999999999999210968330832147026575540427693752222372866517696718412616639336002780474141705354144110364\"\r\n        \"0811181423240104047857145413152842812577527572916236425034170729678597741204746503691611405533351920096306\"\r\n        \"74782085554695972153397552576515276800\"},\r\n    {1e+251, chars_format::fixed, 0,\r\n        \"1000000000000000048279115204488778624958442464223431563930754291871627646175076555372141458238529942636595\"\r\n        \"6593545337061049953772804316485780039629891613241094802639130808557096063636830930611787917875324597455631\"\r\n        \"5302310250472271728848176952226298724352\"},\r\n    {1e+252, chars_format::fixed, 0,\r\n        \"1000000000000000099152028052998409011920202342162715294588395300751542199979533737409779075865727753926819\"\r\n        \"3598516214955865773367640226553978342978747155620883266693416302792790579443373442708838628804120359634031\"\r\n        \"87241060084423965317738575228107571068928\"},\r\n    {1e+253, chars_format::fixed, 0,\r\n        \"9999999999999999363587069377675917736425707327570073564839440723358156278052707548893386994586947577981035\"\r\n        \"1826094056924551506641653143357437722624094200055601817197027212385681288624374039982763538319739206631507\"\r\n        \"77435958293799716241167969694049028276224\"},\r\n    {1e+254, chars_format::fixed, 0,\r\n        \"9999999999999999363587069377675917736425707327570073564839440723358156278052707548893386994586947577981035\"\r\n        \"1826094056924551506641653143357437722624094200055601817197027212385681288624374039982763538319739206631507\"\r\n        \"774359582937997162411679696940490282762240\"},\r\n    {1e+255, chars_format::fixed, 0,\r\n        \"9999999999999999884525696946414532898914128477668338966773684654288481309010349092958796199089453165592925\"\r\n        \"8756995846567465499292772862455788348916374954024635689112910673359193130483369363856562818230607811338327\"\r\n        \"2782784390994049606075766012189756664840192\"},\r\n    {1e+256, chars_format::fixed, 0,\r\n        \"1000000000000000030127659900140542502890486539774695128832107979903274133377646232821112356269145763568243\"\r\n        \"8430171727828179669341366863773446884995019955719986278664561744213800260397056562295560224215930269510378\"\r\n        \"288141352402853119916429412464176397346144256\"},\r\n    {1e+257, chars_format::fixed, 0,\r\n        \"1000000000000000030127659900140542502890486539774695128832107979903274133377646232821112356269145763568243\"\r\n        \"8430171727828179669341366863773446884995019955719986278664561744213800260397056562295560224215930269510378\"\r\n        \"2881413524028531199164294124641763973461442560\"},\r\n    {1e+258, chars_format::fixed, 0,\r\n        \"1000000000000000056799717631659959599209893702659726317411141269166906774962677479877261307539674049653972\"\r\n        \"6465033899457896865765104193391282437061184730323200812906654977415644066700237122877898747347366742071367\"\r\n        \"44674199783831719918405933396323484899269935104\"},\r\n    {1e+259, chars_format::fixed, 0,\r\n        \"9999999999999999287738405203667575368767393208115766122317814807014700953545274940077463414411382764424743\"\r\n        \"8976954756352543229311650112256717871435938122277710485446074580467937964449704320826738363164716737786194\"\r\n        \"85458899748089618699435710767754281089234894848\"},\r\n    {1e+260, chars_format::fixed, 0,\r\n        \"1000000000000000065334776105746173070032103994782936297756431921731269220269887478935228971946243101201405\"\r\n        \"8636189794379406368620700138868989813722357458196229463864124812040234084717254902264247074749426413290883\"\r\n        \"9774942043776657045497009088429335535195969814528\"},\r\n    {1e+261, chars_format::fixed, 0,\r\n        \"9999999999999999287738405203667575368767393208115766122317814807014700953545274940077463414411382764424743\"\r\n        \"8976954756352543229311650112256717871435938122277710485446074580467937964449704320826738363164716737786194\"\r\n        \"8545889974808961869943571076775428108923489484800\"},\r\n    {1e+262, chars_format::fixed, 0,\r\n        \"1000000000000000016172839295009583478096172712153246810967557762960541535300357884361335224964405364288190\"\r\n        \"5330331839631511632172467492917395324154002545647584434349098564602595580939232492998880708913562707066468\"\r\n        \"760361494711018313643605437535869015444666630275072\"},\r\n    {1e+263, chars_format::fixed, 0,\r\n        \"1000000000000000016172839295009583478096172712153246810967557762960541535300357884361335224964405364288190\"\r\n        \"5330331839631511632172467492917395324154002545647584434349098564602595580939232492998880708913562707066468\"\r\n        \"7603614947110183136436054375358690154446666302750720\"},\r\n    {1e+264, chars_format::fixed, 0,\r\n        \"1000000000000000044140518902895287779286391397382581274563006173283444396083023609274483667691850832398819\"\r\n        \"6988775476110313971129684287058746855997333340341924717806535718700452151977396352492066908144631837718580\"\r\n        \"52833032509915549602573975010166573043840478561173504\"},\r\n    {1e+265, chars_format::fixed, 0,\r\n        \"1000000000000000066514662589203851220238566345566048845439364901541766684709156189205002421873807206887323\"\r\n        \"0315530385293355842295457722371828081471997976097396944572485441978737408807927440086615867529487142240269\"\r\n        \"942705389409665241931447200154303102433395309881065472\"},\r\n    {1e+266, chars_format::fixed, 0,\r\n        \"1000000000000000030716032691110149714715086428472500732037190936328451022907344061316172415182677007705717\"\r\n        \"6992722530600488848430220225870898120712534558888641381746965884733480997879077699935337532513718655005566\"\r\n        \"8797052865128496484823152800700833072414104710501367808\"},\r\n    {1e+267, chars_format::fixed, 0,\r\n        \"9999999999999999734382248541602273058775185611228237505937125919871459640244446566940444044768686890151491\"\r\n        \"6762299630919016582458402314694101834973930913546324812261345931410707403929181156932921964884890754300419\"\r\n        \"7890512187794469896370420793533163493423472892065087488\"},\r\n    {1e+268, chars_format::fixed, 0,\r\n        \"9999999999999999734382248541602273058775185611228237505937125919871459640244446566940444044768686890151491\"\r\n        \"6762299630919016582458402314694101834973930913546324812261345931410707403929181156932921964884890754300419\"\r\n        \"78905121877944698963704207935331634934234728920650874880\"},\r\n    {1e+269, chars_format::fixed, 0,\r\n        \"1000000000000000046753818885456127989189605431330410286841364872744016439394555894610368258180303336939076\"\r\n        \"8881340449502893261681846624303314743132774169798163873892798646379355869975202383523110226600782937286713\"\r\n        \"8519293326106230343475263802678137754874196788463928344576\"},\r\n    {1e+270, chars_format::fixed, 0,\r\n        \"1000000000000000046753818885456127989189605431330410286841364872744016439394555894610368258180303336939076\"\r\n        \"8881340449502893261681846624303314743132774169798163873892798646379355869975202383523110226600782937286713\"\r\n        \"85192933261062303434752638026781377548741967884639283445760\"},\r\n    {1e+271, chars_format::fixed, 0,\r\n        \"9999999999999999529098585253973751145501342374646995204443699533752222309208135100774737254399069875964494\"\r\n        \"0587990268968240092837584414759169067994863893904436912794686582343509041098785207009431480570467941101738\"\r\n        \"54458342872794765056233999682236635579342942941443126198272\"},\r\n    {1e+272, chars_format::fixed, 0,\r\n        \"1000000000000000065522610957467878564117499670103552440120763856617775281089304371516947164728382606807602\"\r\n        \"3845848734024107112161464260868794310399431725879707910415464644008356863148267156087543642309530165922021\"\r\n        \"8514235305581886882057848563849292034690350260273827761094656\"},\r\n    {1e+273, chars_format::fixed, 0,\r\n        \"9999999999999999454023416965926748845789765419554426591326103598257186942429141193148421628206752796490392\"\r\n        \"0729957130883384690919113868497250798928233669578260766704022591827505068406526116751697817735479026560506\"\r\n        \"5466066369376850351293060923539046438669680406904714953752576\"},\r\n    {1e+274, chars_format::fixed, 0,\r\n        \"9999999999999999213782878444176341486712719163258207029349796604673073768736360688744211624391338142173265\"\r\n        \"7184251089011847404780008120459112337915016951734497099213897822176292355791297027926950096663514500028564\"\r\n        \"15308090320884466574359759805482716570229159677380024223137792\"},\r\n    {1e+275, chars_format::fixed, 0,\r\n        \"9999999999999999598167740078976993261235993173332158328511887794407654846644809495790947630496001589080667\"\r\n        \"8857380756006307062602577317320133875536163700284518967198097453618232695975663570046546450378657742479671\"\r\n        \"982722077174989256760731188933351130765773907040474247261585408\"},\r\n    {1e+276, chars_format::fixed, 0,\r\n        \"1000000000000000052069140800249855752009185079750964144650090664977064943362508663270311404514719386165843\"\r\n        \"3087289195679301024137674338978658556582691589680457145036017656907888951241814327113357769929500152436233\"\r\n        \"07738608946937362752018518070418086469181314516804918593340833792\"},\r\n    {1e+277, chars_format::fixed, 0,\r\n        \"1000000000000000002867878510995372324870206006461498378357342992691038565390227215968329195733322464961695\"\r\n        \"8313128598304010187936385481780447799767184805866054345934040104083320587698215409722049436653961817402491\"\r\n        \"275192019201707119869992081071729797163687409453914913289541779456\"},\r\n    {1e+278, chars_format::fixed, 0,\r\n        \"9999999999999999635068686795917855831590227478299257653231448548622174630124020581267434287082049279983778\"\r\n        \"4938001204037775189753543960218791943147793788145321066524580618236658968633362758090027700335311493754978\"\r\n        \"334367629875739137498376013657689431411868208826074951744485326848\"},\r\n    {1e+279, chars_format::fixed, 0,\r\n        \"1000000000000000057973292274960393763265862568545700036605220385651388108719182436946549269568487016710341\"\r\n        \"0060188467364335924481829001842443847400552403738185480928254963246837154867046197200314769922564752640282\"\r\n        \"09364937790149360843820835266007499279518823345374529865067232493568\"},\r\n    {1e+280, chars_format::fixed, 0,\r\n        \"1000000000000000032782245982862098248570705283021493564263333577440942603197374335927934378672411793053817\"\r\n        \"4975818241508187016346769106956959939911012930425211247788042456200658152732723551495964903285489125103006\"\r\n        \"290926013924448356521309485648260046220787856768108551057012647002112\"},\r\n    {1e+281, chars_format::fixed, 0,\r\n        \"1000000000000000032782245982862098248570705283021493564263333577440942603197374335927934378672411793053817\"\r\n        \"4975818241508187016346769106956959939911012930425211247788042456200658152732723551495964903285489125103006\"\r\n        \"2909260139244483565213094856482600462207878567681085510570126470021120\"},\r\n    {1e+282, chars_format::fixed, 0,\r\n        \"1000000000000000032782245982862098248570705283021493564263333577440942603197374335927934378672411793053817\"\r\n        \"4975818241508187016346769106956959939911012930425211247788042456200658152732723551495964903285489125103006\"\r\n        \"29092601392444835652130948564826004622078785676810855105701264700211200\"},\r\n    {1e+283, chars_format::fixed, 0,\r\n        \"9999999999999999553953517735361344274271821018911312812290573026184540102343798495987494338396687059809772\"\r\n        \"7966329076780975705558651098687533761031476684077544035813096345547962581760843838922021129763927973084950\"\r\n        \"24959839786965342632596166187964530344229899589832462449290116390191104\"},\r\n    {1e+284, chars_format::fixed, 0,\r\n        \"1000000000000000079214382508457676541256819191699710934083899342334435758975171027725445345572057645297521\"\r\n        \"6283329441806240683821311505209883878195732087635685354312082149188175289466707052058222577470946921779713\"\r\n        \"0505057184069381648545374773244373557467226310750742042216461653692645376\"},\r\n    {1e+285, chars_format::fixed, 0,\r\n        \"9999999999999999801591579205204428501931095198528472118000257105616503599825380852240886161861464938442861\"\r\n        \"4939722145037261932089543889369794765216645522533405937274641374814720644342089175254062058753036222027386\"\r\n        \"3006901551095990707698442841525909542472844588688081080376132618600579072\"},\r\n    {1e+286, chars_format::fixed, 0,\r\n        \"1000000000000000032988611034086967485427088011504507863684758314173802572778608987891478871858632441286011\"\r\n        \"7381629402398400588202211517615861824081167237790591132705927077058380451118207922609574937392980048643791\"\r\n        \"654301923722148311225012721166820834263125344653917287293299907083743789056\"},\r\n    {1e+287, chars_format::fixed, 0,\r\n        \"1000000000000000075252173524940187193614270804825836385192544397063524343015465710025391076396621199239392\"\r\n        \"2091755152714140104196817220558967702128769386220391563888697428719907160465407126676909922607121189796634\"\r\n        \"0736882502910990345434353553680702253338428636675464684849307718019341877248\"},\r\n    {1e+288, chars_format::fixed, 0,\r\n        \"1000000000000000007630473539575035660514778335511710750780086664439969510636494954611131549135839186513983\"\r\n        \"4555553952208956878605448095849998297252605948732710873996264866061464425509888400169173946264495363952086\"\r\n        \"20267012778077787723395914064607119962069483324573977857832138825282954985472\"},\r\n    {1e+289, chars_format::fixed, 0,\r\n        \"1000000000000000061727833527867156886994372310963011258310052850538813376539671558942539170944464796694310\"\r\n        \"4584514912613103459078543395617173821153536698722855425910210916188218613474303381375362727338596024627724\"\r\n        \"499484625789034803081540112423670420191213257583185130503608895092113260150784\"},\r\n    {1e+290, chars_format::fixed, 0,\r\n        \"1000000000000000061727833527867156886994372310963011258310052850538813376539671558942539170944464796694310\"\r\n        \"4584514912613103459078543395617173821153536698722855425910210916188218613474303381375362727338596024627724\"\r\n        \"4994846257890348030815401124236704201912132575831851305036088950921132601507840\"},\r\n    {1e+291, chars_format::fixed, 0,\r\n        \"9999999999999999578609023503462841321535518780965142838525177732290331540055724786262365370719036251480826\"\r\n        \"1289098686371420245702004200641968152637496587417778862354344999448505725826266174594802676763227561304989\"\r\n        \"6960078961318150545418464661067991669581788285529005480705688196068853638234112\"},\r\n    {1e+292, chars_format::fixed, 0,\r\n        \"1000000000000000013256598978357416268068656108958646003563203147794249272690425321461597941803936249972737\"\r\n        \"4638565892090988122974650007025784551738302746731685907395315255274646861058187558214617579496201832662352\"\r\n        \"585538835573636597522107561710941518560028749376834095178551288964115055725510656\"},\r\n    {1e+293, chars_format::fixed, 0,\r\n        \"9999999999999999246234843735396048506044893395792352520261065484899034827946607729250196942326840502532897\"\r\n        \"0231162545648343655275306678872441733790178059478330735395060467469727994972900530063978805843953102113868\"\r\n        \"000379620369084502134308975505229555772913629423636305841602377586326247764393984\"},\r\n    {1e+294, chars_format::fixed, 0,\r\n        \"1000000000000000066436467741248103118547156170586292454485461107376856746627884050583544890346687569804406\"\r\n        \"1207835674606680377442921610508908778753873711201997607708800780391251297994726061339549398843285746132932\"\r\n        \"05683935969567348590731356020719265634967118123751637393518591968740451429495341056\"},\r\n    {1e+295, chars_format::fixed, 0,\r\n        \"9999999999999999813486777206230041577815560719820581330098483720446847883279500839884297726782854580737362\"\r\n        \"6970040225815727702936870449359100155289601680494988872072239402046841988962644563396584878879514845800049\"\r\n        \"02758521100414464490983962613190835886243290260424727924570510530141380583845003264\"},\r\n    {1e+296, chars_format::fixed, 0,\r\n        \"9999999999999999813486777206230041577815560719820581330098483720446847883279500839884297726782854580737362\"\r\n        \"6970040225815727702936870449359100155289601680494988872072239402046841988962644563396584878879514845800049\"\r\n        \"027585211004144644909839626131908358862432902604247279245705105301413805838450032640\"},\r\n    {1e+297, chars_format::fixed, 0,\r\n        \"1000000000000000017652801462756379714374878780719864776839443139119744823869255243069012222883470359078822\"\r\n        \"0728292194112285349344027126247056154504923279794565007954563392017619494511608074472945276562227436175920\"\r\n        \"48849967890105831362861792425329827928397252374398383022243308510390698430058459037696\"},\r\n    {1e+298, chars_format::fixed, 0,\r\n        \"9999999999999999595662034753429788238255624467393741467120915117996487670031669885400803025551745174706847\"\r\n        \"8782311196631452228634829961492223321433823010024592147588202691169230215270582854596864146833859136224555\"\r\n        \"51313826420028155008403585629126369847605750170289266545852965785882018353801250996224\"},\r\n    {1e+299, chars_format::fixed, 0,\r\n        \"1000000000000000052504760255204420248704468581108159154915854115511802457988908195786371375080447864043704\"\r\n        \"4438328838781769425232353604305756447921847867069828483872009265758037378302337947880900593689532349707999\"\r\n        \"4508111903896764088007465274278014249457925878882005684283811566947219638686545940054016\"},\r\n    {1e+300, chars_format::fixed, 0,\r\n        \"1000000000000000052504760255204420248704468581108159154915854115511802457988908195786371375080447864043704\"\r\n        \"4438328838781769425232353604305756447921847867069828483872009265758037378302337947880900593689532349707999\"\r\n        \"45081119038967640880074652742780142494579258788820056842838115669472196386865459400540160\"},\r\n    {1e+301, chars_format::fixed, 0,\r\n        \"1000000000000000052504760255204420248704468581108159154915854115511802457988908195786371375080447864043704\"\r\n        \"4438328838781769425232353604305756447921847867069828483872009265758037378302337947880900593689532349707999\"\r\n        \"450811190389676408800746527427801424945792587888200568428381156694721963868654594005401600\"},\r\n    {1e+302, chars_format::fixed, 0,\r\n        \"1000000000000000076297030790848949253473468551506568117016017342062113802881257944841421889646917840766397\"\r\n        \"4757713854876137221038784479993829181561135051983075016764985648898162653636809541460731423515105837345898\"\r\n        \"6890825155659063617715863205282622390509284183439858617103083735673849899204570498157510656\"},\r\n    {1e+303, chars_format::fixed, 0,\r\n        \"1000000000000000000161765076786456438212668646231659438295495017101117499225738747865260243034213915253779\"\r\n        \"7735681803374160274458205677791996433915416060260686111507461222849761772566500442005272768073270676904621\"\r\n        \"12661427500197051226489898260678763391449376088547292320814127957486330655468919122263277568\"},\r\n    {1e+304, chars_format::fixed, 0,\r\n        \"9999999999999999392535525055364621860040287220117324953190771571323204563013233902843309257440507748436856\"\r\n        \"1180561621725787171937426360305302357988408668827749873014416820110410677102531624409058437198025485515990\"\r\n        \"76639682550821832659549112269607949805346034918662572406407604380845959862074904348138143744\"},\r\n    {1e+305, chars_format::fixed, 0,\r\n        \"9999999999999999392535525055364621860040287220117324953190771571323204563013233902843309257440507748436856\"\r\n        \"1180561621725787171937426360305302357988408668827749873014416820110410677102531624409058437198025485515990\"\r\n        \"766396825508218326595491122696079498053460349186625724064076043808459598620749043481381437440\"},\r\n    {1e+306, chars_format::fixed, 0,\r\n        \"1000000000000000017216064596736454828831087825013238982328892017892380671244575047987920451875459594568606\"\r\n        \"1388616982910603110492255329485206969388057114406501226285146694284603569926249680283295506892241752843467\"\r\n        \"30060716088829214255439694630119794546505512415617982143262670862918816362862119154749127262208\"},\r\n    {1e+307, chars_format::fixed, 0,\r\n        \"9999999999999999860310597602564577717002641838126363875249660735883565852672743849064846414228960666786379\"\r\n        \"2803926546153933531728502521033362759523706153970107306916646893751785690398510731463396416232660711267200\"\r\n        \"11020169553304018596457812688561947201171488461172921822139066929851282122002676667750021070848\"},\r\n    {1e+308, chars_format::fixed, 0,\r\n        \"1000000000000000010979063629440455417404923096773118463368106829031575854049114915371633289784946888990612\"\r\n        \"4966972117251561159028374314008832830700919814604603127166450293302718569748969958855904333838446616500117\"\r\n        \"8426897626212945177628091195786707458122783970171784415105291802893207873272974885715430223118336\"},\r\n};\r\n\r\n#endif // DOUBLE_FIXED_PRECISION_TO_CHARS_TEST_CASES_2_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/double_fixed_precision_to_chars_test_cases_3.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception AND BSL-1.0\r\n\r\n\r\n// Copyright 2018 Ulf Adams\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n// Boost Software License - Version 1.0 - August 17th, 2003\r\n\r\n// Permission is hereby granted, free of charge, to any person or organization\r\n// obtaining a copy of the software and accompanying documentation covered by\r\n// this license (the \"Software\") to use, reproduce, display, distribute,\r\n// execute, and transmit the Software, and to prepare derivative works of the\r\n// Software, and to permit third-parties to whom the Software is furnished to\r\n// do so, all subject to the following:\r\n\r\n// The copyright notices in the Software and this entire statement, including\r\n// the above license grant, this restriction and the following disclaimer,\r\n// must be included in all copies of the Software, in whole or in part, and\r\n// all derivative works of the Software, unless such copies or derivative\r\n// works are solely in the form of machine-executable object code generated by\r\n// a source language processor.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r\n// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r\n// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r\n// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\n// DEALINGS IN THE SOFTWARE.\r\n\r\n\r\n// This file contains test cases derived from:\r\n// https://github.com/ulfjack/ryu\r\n// See xcharconv_ryu.h for the exact commit.\r\n// (Keep the cgmanifest.json commitHash in sync.)\r\n\r\n\r\n#ifndef DOUBLE_FIXED_PRECISION_TO_CHARS_TEST_CASES_3_HPP\r\n#define DOUBLE_FIXED_PRECISION_TO_CHARS_TEST_CASES_3_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\ninline constexpr DoublePrecisionToCharsTestCase double_fixed_precision_to_chars_test_cases_3[] = {\r\n    // Ryu Printf d2fixed_test.cc D2fixedTest AllBinaryExponents\r\n    // These values test every binary exponent.\r\n    // The mantissas were randomly generated.\r\n    {0x0.63b831e8bd9d7p-1022, chars_format::fixed, 1074,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008667315560\"\r\n        \"1518373204745615934992065170006880827787289636461039456117181014435225731420739682086431846196084055971776\"\r\n        \"1976781401452617612090003075542930260777812518669659241729724010681746641686623499848468215594968202107915\"\r\n        \"3402945471922988971873909012440740220527800911244244822910902773084448896950002963160859062629660988288537\"\r\n        \"4947604962348974323036144310657614326754120115556509383797380330234783520222245524583876671362471849408043\"\r\n        \"1858617260899963028423305531253945552260335123939000593240656910669298632181747412649714974019858835628576\"\r\n        \"1402581880926947783051518340651609793980053160313425027619711896255545853478748493923212623215309262429188\"\r\n        \"9535798750202922731324119623206905408779063259071595105183391812893811664489504206776437911230459576472640\"\r\n        \"03753662109375\"},\r\n    {0x1.8777195166b0cp-1022, chars_format::fixed, 1072,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034024962888\"\r\n        \"5488918707803802237219634159360572672157684890228809310363407096641170467659879771805264411927667980233377\"\r\n        \"8493381613983963619886353435618596864780020416582962791672696335498871803986814670850483660459156676370951\"\r\n        \"5096631215158510441977866477856881896988317751492854297037574001592689593245951090014597401089987064349011\"\r\n        \"8898178199420014167358923990328782986564433565017977882465941632972037475759286148645435617069627150190560\"\r\n        \"6610044637601532768006545677482036919081933078680182749619038785085197654630878239258803610922679880731846\"\r\n        \"1295595610061523269781283221357431760026778081133972233612002223605221826818897235077493324279732240457324\"\r\n        \"0208707312500506083305050530743859909422095574730572935613200283098897446182155845928463122618268243968486\"\r\n        \"785888671875\"},\r\n    {0x1.4668b84fe57a0p-1021, chars_format::fixed, 1068,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056740958740\"\r\n        \"6416315113843845367765611463402272605773579309805044238876264896175716378374414880313837549557854086594144\"\r\n        \"6517571068268270820532248191376149517571648221869547136333897392941241920946002959571014115138922292227756\"\r\n        \"5675579700156979183315496460915138087093250268282674126774708694126428169237269531699329932826961970700281\"\r\n        \"7860044551711084995833922394577051992453091701226019440181486036346841321732890759392314160217956773831481\"\r\n        \"0836998109083129295391451373564751392901299926267367714488145730269066445855381488848672338113942395343914\"\r\n        \"7931259731375390972529039085122338240869687761572122993383754664276573025666127187344547915597384296829871\"\r\n        \"1175582031872758195259747569288096497941384426647703960591649037179391408883266656459909427212551236152648\"\r\n        \"92578125\"},\r\n    {0x1.befe59a615135p-1020, chars_format::fixed, 1072,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000155405261736\"\r\n        \"2235237599344524566268329346499410781820240377373211399724292118817533439328423661067387776003211400451369\"\r\n        \"3088093284719809466733351558863675884965219358948864762862301475919926006238764851665875890220244143133239\"\r\n        \"4990914215952953745660507019834777919259824309540394759202512511945735293837981431982027834358977473029612\"\r\n        \"0303664088965600921426179216076245193704452662458429835783277758594438863220080552115251534233085611706230\"\r\n        \"8503464635136074518967164258938058608025448494327947396239370394992669778837860314635821269578123701586483\"\r\n        \"9016649103853253096649589094048656135137787361348031132374178952614572001907211566747518775736907525882271\"\r\n        \"0974186182997578768175923453881771250830539545867001930118621195145977916950326414013971998429042287170886\"\r\n        \"993408203125\"},\r\n    {0x1.1e3d1ff2f0c7dp-1019, chars_format::fixed, 1071,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000199032000513\"\r\n        \"5142880561598924319312704477072269270245936137839955953465230545195415127755767083901447533947828678376962\"\r\n        \"8840827353272482512734186549366506777424260696503583584763933654973123255607415124268905380654726960778878\"\r\n        \"0455364488415004387840662750774569999550709914737717510587715348152633060357249935862626075624081617450315\"\r\n        \"4885783858040748854022822093131458054271092923292182143582852711297479202477529680286154546026438265660119\"\r\n        \"0666964359310825902834425266702229494789747194864674154539719905344544705996332452876246842805615529643436\"\r\n        \"3330985188230759038449117763080644432854364707566853651485305297515523425163520740729706771939538840583142\"\r\n        \"0311524001253621714021938613841338246896203505202451193812218773931269549326908419040194075932959094643592\"\r\n        \"83447265625\"},\r\n    {0x1.6f434a1f8b19bp-1018, chars_format::fixed, 1070,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000510741853904\"\r\n        \"6846927047373682830132718075006256443666199351873286782041441258279676361749462207484160512079462800015135\"\r\n        \"1247641526009378027445855026174588417177058971036936098000778820888042031017906554373258977780010263225403\"\r\n        \"4985134368614288894180981269713098266814859393907435942503999009239804035089734298703368406224788919100457\"\r\n        \"8703872406975692839527795367059563095996889887433505152749668146313379417615714580759187210921661443825061\"\r\n        \"5079726743650989704965620642901239809189450397279529801654706466234792028552787228839089551760441918109416\"\r\n        \"4246004056408218871243893690629186700027052396055033266400221089830267330844275401596778964865771996400585\"\r\n        \"2935700696823519264465123996032196818637410241732060994427104056094504278256324125706555605574976652860641\"\r\n        \"4794921875\"},\r\n    {0x1.587345c18153ep-1017, chars_format::fixed, 1068,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000958034150713\"\r\n        \"4764786508271836926643404057427002697780971266720840479203611958030287584788324659120693742922007657201247\"\r\n        \"5701432533443920920943404653989371931593878000743154963499391621521760536226285826940742684233420125807325\"\r\n        \"1475122129361059576300349579506194683866694625320913445655672698919325929161890237571835547216240424390568\"\r\n        \"4503604058791100485208980042190187445440799433710816373805294721006156102426371505496796959141102703635606\"\r\n        \"8282898610242996821028731917836326909139019066634183567364278468611980916064135979863051465895296219949754\"\r\n        \"3645034872914477180174891107535697767424819637337145925449261230552011300809574685296849175758943122326736\"\r\n        \"0016445450314712551946974418885474268936771312658360117220892077307970715813190132337240356719121336936950\"\r\n        \"68359375\"},\r\n    {0x1.f1b6b87277fdep-1016, chars_format::fixed, 1067,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002768624646153\"\r\n        \"3842708986290401534510677245449052480438452772935563477911887903937433332521175778793903095384041223955723\"\r\n        \"1923283555660292437990927601776574893980601557250737329754310915661825472040213756951830291482697155616984\"\r\n        \"2700521540676609741125857389706633023242364855348478771230295850829291438723530923932923590702415161133831\"\r\n        \"9751130631733719608246390666274473865694983392385750305737090058291815147877218349104719543513706308913668\"\r\n        \"3774947602824936693432977762482651171413713941775960038695919756102724251419600380177635071493624586144398\"\r\n        \"8258956704733318591666199586331239518529031729048520377213164363192327716960117074516227535950936913289772\"\r\n        \"7641328747183370449707056957130139385301002356826323260325258247061322707666120024327938153874129056930541\"\r\n        \"9921875\"},\r\n    {0x1.72a498409980ap-1015, chars_format::fixed, 1066,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004123539674247\"\r\n        \"7088973208679969440262899254505285796142223814175822702981218018251380021070120502969772416262035601116862\"\r\n        \"1659532952906006748436531426296108744371485218418489239052308056360753777114430810169989395269594614007716\"\r\n        \"4320660032095927443769046869340226546265147500705839457828617891438915581029354085740892509908612620206500\"\r\n        \"3470601897807688053820010379771148507245760602767529755342564783534772481563133530608872155816317027321781\"\r\n        \"0752940595356441071317848377916852111771962558733789348917288503698641911641096452799678633118324142847003\"\r\n        \"8337938910339876846473513908343996450852057201827354601830122948746860487681564435359569830201224403457687\"\r\n        \"8689343471222581935495027065359114155162611459186679259780987690986908851542569465209453483112156391143798\"\r\n        \"828125\"},\r\n    {0x1.ce91e910d066ap-1014, chars_format::fixed, 1065,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010292523314007\"\r\n        \"6692326385741229598904670825352808317734627817052485596428748937263427579368777377894657327312479354581078\"\r\n        \"4168520162117480372890622941534124448870772252012602868730161774020407765816726274221052686557419196324208\"\r\n        \"4715821192601015609484863570373655101393795400044083081325937387959984377717529567097636750383014741316553\"\r\n        \"2296085557798963633773657299527935426265350193083637673227681353297917537837040452104722871743258998969100\"\r\n        \"5987271282509672399868182403468494296246048065289295098149422654468288628128861924787217849829763922746869\"\r\n        \"6498494503455447606065743273997995338245842660162359635250494954539395011676725002188222864503213932415104\"\r\n        \"3434437466649570437521385841177305817305146442292695750907213149985758651738798619135195622220635414123535\"\r\n        \"15625\"},\r\n    {0x1.a41cd0fb8478fp-1013, chars_format::fixed, 1065,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018695629667714\"\r\n        \"5895916750114590693491523617790849939055674886628194086158815830540057384771933110599023450761887740398618\"\r\n        \"5824526219439376956126341760163322548493370609238456330600806577305257232320501329017953024287747627232037\"\r\n        \"4572663686511555161745450335781058166365489962041606001461174122457962935078569449571467063040254113362718\"\r\n        \"6270376597920952277811842692283769740789234856500541032298070456110972851620621529465978994343606420788243\"\r\n        \"5523527518948000764505675072290355683463164250772690889284988502644183665525616575696351007686952407174842\"\r\n        \"7534905766691870864059461860337314739734261516944168507075000763370610415995639606879253113685553781567772\"\r\n        \"1698849612362059270919596759679334039324781881079759845171743998123959837331931055359746096655726432800292\"\r\n        \"96875\"},\r\n    {0x1.3e41d54eded4ap-1012, chars_format::fixed, 1063,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028325827575460\"\r\n        \"1010515391461536595545429499538498991017040932231183342824512646699604684458146742737342772784980027834494\"\r\n        \"0826857661781276292472081843809864410394521611902853735829998834742158468857697790386059626657678189248144\"\r\n        \"5265662942795816062763062880205368461416441764978817899328156614741166754420207438171074196786033403238981\"\r\n        \"1562883073602025172957382372382340446938272102534472564616360448591956313016751702183344954371143800460586\"\r\n        \"5651843981130671659574810922103783984979009729510987301074119123340693948685620445541815789689681881384571\"\r\n        \"9863898666697465652428037545729301943625700762708492646428142876480594651159481998644386165302340702226649\"\r\n        \"3420721660512347699421921315325612490897898554760724211631142191989730927392798776054405607283115386962890\"\r\n        \"625\"},\r\n    {0x1.59221b87422dcp-1011, chars_format::fixed, 1061,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061435754675809\"\r\n        \"8837646073896440391226534816436897514942795483804072267347155569125119595580491351990480913034570147895374\"\r\n        \"9199275969705612822746490917273049925735363788261777654916069143307907122518136274038077410603228952574550\"\r\n        \"1894977879086594931372343135335203122952344387060517702808821656121476327893372871287902363583684228396504\"\r\n        \"2552837102397922174874664511453596393052110185322246667762253606317075736272542989625758436326997585642760\"\r\n        \"2393018166303632030454315402968032670946012485516681270764073451032999719873203349131460740206557039826594\"\r\n        \"4836102598855186999874252382364402869617545149531825646529605517647352402816777252637898126613360122856215\"\r\n        \"3297584372631820351071291137909988929778674731782707342702834301100683900287435790232848376035690307617187\"\r\n        \"5\"},\r\n    {0x1.922a6e54c4bcbp-1010, chars_format::fixed, 1062,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143175758120767\"\r\n        \"8327909696250760734478106796867078939935710607595708573102607339856178147302943011543601422950427382699571\"\r\n        \"9719448226349739066691249962145223646872006733056733177952965276951071879207560520825522978044535983860163\"\r\n        \"5063151499836135276583501528784180827303324409079815563661661810073697306944122825275004360202036872430423\"\r\n        \"1730496903611600686763522497807086760639060265790948955651670281170776489599001405555481916829703134521996\"\r\n        \"2049561733515970274623532308359345306507214497299752967076056620391451927843542333198029013832277189655932\"\r\n        \"7003259554334471200742545952329769103656526541210519870252214162081769755690283719852718057095066069103438\"\r\n        \"8286525048452890343118312657240371183075690897644137388980693277205566427134897367068333551287651062011718\"\r\n        \"75\"},\r\n    {0x1.072696ae9ff91p-1009, chars_format::fixed, 1061,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000187369544044078\"\r\n        \"4291437168256570360327506576425988595810379182000643821407577934103660676935011263322031392440132868733732\"\r\n        \"7819429571347328935398026964825400882351174079562591710725763861350852064930712839397819262007054683145461\"\r\n        \"2780065823082780248832842288655503722395814417931461558621625008415876667488081682041201864635065571426334\"\r\n        \"0405276148348836991757774602316265058289810704660352544391098522007138900938734431720321349687880063890794\"\r\n        \"9709313371539376131216980483491496783060831614106142375317162155275223986726898573134529318360000096717296\"\r\n        \"5143050437935935892946724098972506000684771103211681358055518407789793900084808470241680962256248128922853\"\r\n        \"0618262874396186671763441010328385573357333169766190506328011882320599967854946044099051505327224731445312\"\r\n        \"5\"},\r\n    {0x1.0f9b544278c4bp-1008, chars_format::fixed, 1060,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000386780857037671\"\r\n        \"1567970796017679738247589622247284651871120320458105704644504432357204561914952702147103351310377425294926\"\r\n        \"6522585529115860650409630476395436935935507513474968265776334027719389758555490887642752812234042372625443\"\r\n        \"7003602105036202827450917721436713168500906698052919896534518850932069398418985212286909672403077626688044\"\r\n        \"8498682233610964812352992899821397333236093549925309032199246559964137142197652767564372214748185530284478\"\r\n        \"9634362218477877578958247021052670972459957651572193372191075738314273872600135872061638159242292718022325\"\r\n        \"3091674188986794275627204849031519506259253092951584828274906785555947413973379382135394648484451886157711\"\r\n        \"823604868006218023272010337471584057274727293089669987057330278589634131591878940525930374860763549804687\"\r\n        \"5\"},\r\n    {0x1.0c159c101694ep-1007, chars_format::fixed, 1058,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000763529751430495\"\r\n        \"2261443821158790115458810239952267930887072096693486627813429923330320913248325488240687702430323149784113\"\r\n        \"2668378588282844988957673108519903635709387991611919147754896201845081043636843712353787917153989017063736\"\r\n        \"6932138547129575358975875396466265445790571512067390465956520149044782555700513502538083461702835278243119\"\r\n        \"7582947539338933804403231554930541964237271712749234912326942139379518950109342558327795161374824729966907\"\r\n        \"0645661865847799037929906255545116191400664691706275381307240314885435819146724738014196031743697185913499\"\r\n        \"1743063453593039715400411684846294312720981800565410139278357031636119321693824562320610441540921048911338\"\r\n        \"48306373809820626535624355866825082456994424052303706479922855952791049816141821793280541896820068359375\"},\r\n    {0x1.5dea4ce8e9d1cp-1006, chars_format::fixed, 1056,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001993183345740184\"\r\n        \"3380206268213719062063350814301599018679933261580130337290316898735876549592164313534803701036771696187184\"\r\n        \"3460238736763173540738894631496044341513014086769607675313389734660544429847137223449237368185473282818899\"\r\n        \"0763143676913549798050111000449048160356662711177445920457729101143615093098470889673928997872159077848989\"\r\n        \"8585846173250830089770352087321756188087231770443888379781496362819885950130996391895508049596794526555364\"\r\n        \"9325413439043352821440085193375901604390558169700922107887759422298045475048448298435182127152924989867102\"\r\n        \"5481762571674803699881589864389977475085144039107611461508367830308205819849065857072705384254490978027536\"\r\n        \"459817993513291304840523425775112141496214071257787596000063921886091833357568248175084590911865234375\"},\r\n    {0x1.f54052ccfbd85p-1005, chars_format::fixed, 1057,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005710443944044190\"\r\n        \"3852943648577406503088003161021002627368323935629069966209695533414405887372311247087423593978194334966196\"\r\n        \"9952724399972643565145643565596680341154191365245563840621127630622979641166875699011127504856846210492539\"\r\n        \"1744823983638657336393276468809438060554239207107070390674319071138242241936104300064142641425316186292876\"\r\n        \"8191727964756739054251002351820210559683067678277426478312879053806872980671807735494036931597606968803747\"\r\n        \"0882986462600191569302988629020903776604825882710768551646760758983546554323851915180357433146496665776619\"\r\n        \"8572115325587926099638392334145329333710974022615959231083135651027696907010536501610597578068435532320904\"\r\n        \"0588603358187555694328693197982659012778489710933784939697285300275186870067045674659311771392822265625\"},\r\n    {0x1.0090aa3ec4669p-1004, chars_format::fixed, 1056,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005845773229837182\"\r\n        \"3574823131482226670449533326157358746716791953135062569212292668611641801097780408195948596588837344740206\"\r\n        \"4062727322207217975101640660738989340741657280509189289276615212047497934355406431806641278847883402312309\"\r\n        \"8163293513531622437049966284424578880391547670271754853142196587321184864022163506030620064283346385358597\"\r\n        \"4609101781931276219629563822287439933439020777086511705876102130660051067922171320065746506246599474937571\"\r\n        \"3082577376195362056859759924579898568161899707504166498745404902069366067260964218815046333952411377650629\"\r\n        \"1985183641972212962838327237136002597053343023166906014203406467918165849951752439662675714851568453713696\"\r\n        \"999227239301169029854864368002366842252656116249943591260695464895125184057178557850420475006103515625\"},\r\n    {0x1.68e98ac55ee26p-1003, chars_format::fixed, 1054,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016446596413123795\"\r\n        \"5496522777053303591275019495978878844846436113300880266183458890074114483112001652990041532139330705876914\"\r\n        \"7931204601218918457779787534281968243383197085376948804904484155483575710841719547823710139827936080983236\"\r\n        \"7310569254298888979285082470600025912273776655596072801476943857591614720191994310220487539252764806264502\"\r\n        \"0023888520863214641824353895255575638074536400353005626823857188489512901031327512343674332673547866665016\"\r\n        \"5049446488498649673464767822603396054217556395696443674379523864848838394183411800390626841460528189649358\"\r\n        \"0856602004955530161376182324364433356271439175620899551166489231616354720849782465783774866022112969364460\"\r\n        \"3102397975669649131600761665002532724955406576363194307423103157628219150865334086120128631591796875\"},\r\n    {0x1.87db0e29f0009p-1002, chars_format::fixed, 1054,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035713345155797761\"\r\n        \"7610792878229505570226756358469896911919377105068137826586828649404727968260620169232867708166475001047504\"\r\n        \"8111775029985548082700855953146127275470476240362930600538807521258481943527749576808605590290184599616254\"\r\n        \"1846749805790846105326505422770593434773819010873491570027088825238135898601918199194638645572473742585546\"\r\n        \"0042359579974778458859418696543460213592095168174624769832598626020025085824933983826300131126260391727473\"\r\n        \"7077701597408770546536826007815061861863878219345146805938471244598864512590567375912282127533791281642861\"\r\n        \"0226307164803685258847872420371124674464082326064123043271224908418295695531191416257587024691172442399017\"\r\n        \"5156552477624283439156405949424531825414560528190620328410111172789953570827492512762546539306640625\"},\r\n    {0x1.1ebac54ed6e41p-1001, chars_format::fixed, 1053,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052264507616884437\"\r\n        \"5698058090407392073363666940952778105547306570912930855963880587815215988005244769961306374980627154903920\"\r\n        \"2577080249977927392021364007921809496051524796096624912662285949137122585722498527523998551285095014756776\"\r\n        \"2895554588799427559673865771118036682097147368320276001640375343800006580702811100203326519987841007167969\"\r\n        \"2989050499741043577435715581470077666354778579928550640390691438050605710431110522225336076906939348214560\"\r\n        \"5809107751188268682005099869148951108398761525370973305398559682309093811078973750072903988378385138191514\"\r\n        \"6710101115251870548115971597103922009910991277759144615181140737633537081068270245133990756049414344541691\"\r\n        \"511157350304779944771415413564368359181745069897590897094359629893034480119240470230579376220703125\"},\r\n    {0x1.26d300e06c7a2p-1000, chars_format::fixed, 1051,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000107479972537888434\"\r\n        \"9002591708831714014935426753194183154300531753894711710626048627725959770241731634484316278231555944004086\"\r\n        \"4068960179163231231879379245227770021788137500855177795500847910430675168458379864001111773312371956782280\"\r\n        \"6226662250753080318042176493313687445777034547389630877431167690917476995346565873313653117306467438260736\"\r\n        \"9955012283179212129357477946380958365891562954818745714107417513297964491278143411211987964497322424618499\"\r\n        \"2767489380272657401336731570937923770881934128877584144038050995144315844786026271102120245128418421698397\"\r\n        \"3666369609678050583111455989070311087100154293624874535866388069907047758018717555500470604262934072224772\"\r\n        \"3902377618834842156673903433698480020775608092608474045288879938908621625159867107868194580078125\"},\r\n    {0x1.05d0c9256bd0dp-999, chars_format::fixed, 1051,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000190892926200005014\"\r\n        \"6246109184641947605537081104324320091424275239881358691794611711727670645040801753875872256603903100157907\"\r\n        \"4117272136518386432913664549165447650838094687054485497396164457724638108265725028655437867246843186135519\"\r\n        \"7603365817074407495992907452548985192207846909020732206018231589776116670138494034579664823906926825506391\"\r\n        \"6895324452269427403961247476556898979817349667497675420979079930454125061487858631618590818324348506617419\"\r\n        \"3837808794729928192158724968573011652615506712770263804093560900759819690351122605383339463689895499253299\"\r\n        \"3062766970887678113838307812351896769519964147208086459095207951677451629103665277817776597541497215541395\"\r\n        \"3814454153462956899623245175859438180611960265891792845084629082208493855432607233524322509765625\"},\r\n    {0x1.d161118863a28p-998, chars_format::fixed, 1047,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000678627268276378223\"\r\n        \"0838381983740574462538627006938330369010760005283210472937468617690271829803643955687653670078357664384731\"\r\n        \"5850357334123342099135674182764104627918354063120311333624666154673642334968649978203709306412298553137595\"\r\n        \"8742662333631894713141488626368453672515176764212534710900244814738983099412252627437078976170183585539748\"\r\n        \"0023329148528522435511879625527696702064745017607821933043748687600890171795457338357909910477142886261852\"\r\n        \"6510348200725081223743044674000271753348231462705442545938227394702232735449601014985791669981798312694471\"\r\n        \"6921886272884729180867056629180582090341046115889341965333287053999468745767913532019182182102123704212662\"\r\n        \"886623891441087681874017124137900152328702188653090400516365576777388923801481723785400390625\"},\r\n    {0x1.a15ea25a19660p-997, chars_format::fixed, 1044,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001217237261310228099\"\r\n        \"3179252931186926982692345919033968631102111765103315033304380176933385417160002408427950029547023800373790\"\r\n        \"3138964229170029641147550066555294617444125756680352014437431112856968897249350959816759223604652482795967\"\r\n        \"2222373231938825328608517533711548379199837592813292143627291147239524233411932374697495007614762032590063\"\r\n        \"3348562563414895932402962713954954623414922689851738589686706046155327824502166704335474048380283048951935\"\r\n        \"5136211942835589461562419698678550112002073553337267646181096609192841991425028505763676531064365863007797\"\r\n        \"4934313260104372537119221193415761606516937805300536262521389430432123931165919988196641744515354119527516\"\r\n        \"627448597478758769526591885977945190412930384876548373096483146582613699138164520263671875\"},\r\n    {0x1.3405ef09605c0p-996, chars_format::fixed, 1042,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001796667664366212833\"\r\n        \"5665392247768118683231502978059871166650153469309831612890500966882039821861868400342764656165871202066209\"\r\n        \"9545587837211036370546812947350494432238004683763664567568973440673650283854843511596346369844271953549611\"\r\n        \"5538726433986266863862950537061969082882291651460484133576667255869437876496100220690327162754077519560211\"\r\n        \"3421651211440307831129924696845524348946549788527717960851496934136922932274256932207250250473001752070024\"\r\n        \"9939263105447824182001422269657481368614500917398558972900508936492536325012033905462034273351706791432421\"\r\n        \"3319731475850729738988853204799698138245429919661266017564480782965092181767914524772807011403834355276543\"\r\n        \"4718432890065190765206137218078347442517180856079439532635433351970277726650238037109375\"},\r\n    {0x1.d446d39179d61p-995, chars_format::fixed, 1047,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000005462819694528703087\"\r\n        \"8864501228515552805464723717056197760606756889643903510249553048439017711133773671440354639386335467946363\"\r\n        \"5258948740705694069667341257396888036371466715243466156053378293733554928216028872449926627028194020003476\"\r\n        \"6664065924797146527366094882988718989577228548661057271640470276933597886851166967309922049028614618566248\"\r\n        \"7877704337685653857174654805590027514341847429667755625338708736633025559983835650906911708214459739844502\"\r\n        \"2686629737262804848201604027875209019963234888348727732753557137541010501446542044860603307612488978949804\"\r\n        \"5902945493217533531235155103049453504888178998390271594265142786559200789840036462465329069941137693873004\"\r\n        \"796208275584924267266632096981173837936942963677930569510454716919412021525204181671142578125\"},\r\n    {0x1.2a6191841a2f8p-994, chars_format::fixed, 1043,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000006961706248722051462\"\r\n        \"1989094015930584333539423148144476551620642624680348776495275585358068724521997148409410638391145465795792\"\r\n        \"7017181245452872915474622111096382221071681697520914214818303865707205751044498351025044453688419836560516\"\r\n        \"6521031955111219642419220298954347889214534531094837790091823656984057353139300007125800329303520470602016\"\r\n        \"7948760755422183994450699458391794656901738793039684960506013257067218773020004462578765143900984223269242\"\r\n        \"8211132570873279618568830654102695286917053708082753966210260483718165254879075265420369865879763466609644\"\r\n        \"4025144902359009191385276894101485935046230814418030394044362489237345080002513507196221229272533013931878\"\r\n        \"75344385870254336857446723410797249302829991612732996042467448205570690333843231201171875\"},\r\n    {0x1.43dd16d8c3d1dp-993, chars_format::fixed, 1045,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000015112507155402444702\"\r\n        \"0135306022393565196762089755575456624338495151308209685256453809677900586317175819989462383489016678007812\"\r\n        \"8257051031812975438500637988525335792799955185122494381194781947242274154359276094785530478989334370229123\"\r\n        \"2578133321237095332394795413283832150988339299341446907213468318738317581991050115126670141483262312008742\"\r\n        \"6760602897763558894964250015209221575190675349103449428597587562568657357560934571444329997703898734942358\"\r\n        \"0768701256013775365443771733885337641114591771941836216818733412905512656103173434643853672019620647251124\"\r\n        \"8650423697903231660849991114857078523790278047758844805828089772138726744675213995976355584951293948756727\"\r\n        \"5285870905514013401789321488674482336764102707025482497105173251839005388319492340087890625\"},\r\n    {0x1.1e84f4437de27p-992, chars_format::fixed, 1044,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000026739808737490122536\"\r\n        \"4009190269428022346895766923714793667844056434839900624330085514973193324262004035356895030064921783009805\"\r\n        \"7918884705807964199330848477612812938804273799622712378519478003286575370136489884812949516962024244211760\"\r\n        \"9607483360980909948460156496553861705524933111620692577199003799030305070085885260314199767588940990499498\"\r\n        \"8078689242985218461431861416650687300826323297128877359071851056100330924999478855370872777021779956743000\"\r\n        \"7545478335135816334783842422798567071342281048609259270742047112691073337142757755314683776136264937390122\"\r\n        \"1873542271412143094297154950828903295388934717444104032709543164412117129850006101772698944311067042059526\"\r\n        \"539301195418948431941957516625083848704359299592279997082044928902178071439266204833984375\"},\r\n    {0x1.c7925872b0513p-991, chars_format::fixed, 1043,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000085033691573552436743\"\r\n        \"0323595018676754258445568824857213848746280704072236823268383060174370779364946428938559999659947344275015\"\r\n        \"0581379957883082860514723669360341807003760516126412415812793589694396310117558079412640180009205258501662\"\r\n        \"8168299988567681700239036505371609193017146078988594512058175724878949384378830226335983376290822291404418\"\r\n        \"9248632446027235425101963979115169194359369052429197321029095626722937610274060480758657835985167284620389\"\r\n        \"4634678489005824269693355199622645770717771904806998788414597121681720429667752369447431326712331419045036\"\r\n        \"4414271762903198285517145494958139622568612777791641778831814314868966462936027519211973383768944719374984\"\r\n        \"21558727010629900424393170314473940204826819442250618319434352088137529790401458740234375\"},\r\n    {0x1.627c15354010bp-990, chars_format::fixed, 1042,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000132331069010968920653\"\r\n        \"7939780857239039544548016633334237413237030012119277536525667655183086798246156040464737778965504678479790\"\r\n        \"1474884457846727559831433511307559536909759330053748585588483826065566236369058902865464984070903402002662\"\r\n        \"7323204785317407458069469681884433078585615253137057737022751348523239464068872849303111358475731358182415\"\r\n        \"8502490046319712249459640319924660673321900548594141665580600670298168713356715944526652647848979125983846\"\r\n        \"7839220086418924382938642559837439793813090896823728294937356571010588743924249642142134571267294351604717\"\r\n        \"9447180198284565221387942070716104062289822563870293702055361674097594361411801121077029800561858618979754\"\r\n        \"7525922561378864683438391102840453976506918695559000820338724224711768329143524169921875\"},\r\n    {0x1.1d2de00ed154dp-989, chars_format::fixed, 1041,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000212917897767202319747\"\r\n        \"4417184045234455038251105719793602087695352964073068726597457261574546506799204162006987775011216832563456\"\r\n        \"0635491340196070442302984208136777483158675150452452277667442374906278069217074864671270429435465616153992\"\r\n        \"9432660458951455065381945835228296653375005117467866235836194378970814659593732987749891400034868404843486\"\r\n        \"7379969507431598347670943694548493918720371503317755078814637245395045814662285721966172731060086325202379\"\r\n        \"8327662484462321083041143497819466891858512956512833365948538251133632051079775839484970665348326549120564\"\r\n        \"9633701698994828372260402174673318251741533123437069536319726151119995618020513531694305619149713245476241\"\r\n        \"680154186797493041998623136670913061162976041319760955872197882854379713535308837890625\"},\r\n    {0x1.17d753cb61bd0p-988, chars_format::fixed, 1036,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000417864861523554613747\"\r\n        \"7685826354126061495049537861130696785666437631785670860809373661431538965440533278098806894269459412201201\"\r\n        \"5342190405410686311749676095764013989212813042022776259075503972980415783422270319986285895393209990480525\"\r\n        \"5458610171011481897913394796621253230590592528977454294886104079907963730807782157087030725023771729623579\"\r\n        \"2871419986889904702428266107609034227421206913924373960475229255293263340951844946909235155930998157636257\"\r\n        \"4624741570807283814428707319137982913483625918909656057073314391592554674800556558040189767456641449201582\"\r\n        \"0665916994696040385769960996006956179327586748338004860755465704705486223232459808249735830200807558896234\"\r\n        \"6666145156130842715967918196794561008886211006529975975354318507015705108642578125\"},\r\n    {0x1.3499cf58eac56p-987, chars_format::fixed, 1038,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000921618937784037325138\"\r\n        \"6225234344523900898114056892264368766389694116364433408434582133098995372021049984062191604412148079156247\"\r\n        \"0058129921769437214706009973058260865173496321652883226793313437335515335934288330827410313014457604685990\"\r\n        \"8571668564638099154710476905079045104467961179905381697182659091275421605654409939881825288538480681503005\"\r\n        \"0912205675383269371309430717708417954717530276617121140004348164540143690585881527779717788936032409975347\"\r\n        \"3030704075368695199951827482684013499971988993418856488566338075147620067171549130652258755105025348424465\"\r\n        \"8157619807012998649176788353621728721596172866945364020965829131795883913896368903414188789632715887110086\"\r\n        \"986492180657573226368342685188914874974230699578026104745731572620570659637451171875\"},\r\n    {0x1.51a27e8a8fd04p-986, chars_format::fixed, 1036,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000002016654222889489366330\"\r\n        \"9521343065653027086245497896068869059180976583615938098889986991041485859172655850284923121278179049365606\"\r\n        \"4318876082158442840914388695516071513871282541627904960007529256925655758366238004656093505662713945653752\"\r\n        \"8211198364194749602836764902987565025944221130708673443828163387359505375370290009445274572443627613958541\"\r\n        \"9606556712353250612586551744106137528572254128169189469681750106767803119244277794048375021047157915946259\"\r\n        \"9857421379948439622868937356578266959909594120741362514869852677384097257555841840521523679675833897238817\"\r\n        \"4626883880522031537078122191460297407274783067835677391633127317778686117811785197733857788768303829936298\"\r\n        \"7414194915000779858380976854620285433129268926055743804681696929037570953369140625\"},\r\n    {0x1.28c16b4ed7098p-985, chars_format::fixed, 1034,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000003544974751590889385952\"\r\n        \"0264700887688271107416558032715906653570211101157114219987495688096790234026558681710675314185695039044167\"\r\n        \"3389046891140333791267175538211915142881836447148902272897131242054424760323762734875414119017816505979577\"\r\n        \"6451057876420487228094750780831495237996530558044233292884300493086993773653449202457881809071533897240172\"\r\n        \"9596065603472996108834056777416770233084403727965152368376850711830195137130645640590704660731909870705380\"\r\n        \"6529570935342883620442701491795272567870361575635905003352499512824154974326187486698906026566290297547083\"\r\n        \"5003190344156534010770165498653170496875412652458097421921303135343195297833828784423963016127545265701753\"\r\n        \"06033284095638792306713346530524716480707592136667472004774026572704315185546875\"},\r\n    {0x1.519084374060bp-984, chars_format::fixed, 1036,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000008064939085743457919311\"\r\n        \"5655390618626369629653008353154439327413620740314818119036634456720430925246670592130257684011506550587519\"\r\n        \"0702262346443580413571712749788204695695123012277087263105239201891820479284533969818518645517731907503011\"\r\n        \"0798057602091473932084908015034567525286047273421566565922229061651406247462013601709967883813692721418546\"\r\n        \"1292825117230319532485842557112068939568153450865993280216546928857042166319106957693584960248973265389426\"\r\n        \"0268826761621079492065154996852043006813295420056272714448441938250959284349518278972810987370152873447585\"\r\n        \"1958983525486767921479203821534881357550897232367303129611065194955396175464225609057065347598042047704151\"\r\n        \"9013852253561174979884533208594899267372506368456441805392387323081493377685546875\"},\r\n    {0x1.bb4c1e678fe69p-983, chars_format::fixed, 1035,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000021182119864764602130642\"\r\n        \"0947830872065837349416562163106754912736319440133647537047417519506625089140293248385386753482217342594034\"\r\n        \"5405343077013463323112228715747967338103643416804748291754537549066191215546707658855503073696569114420021\"\r\n        \"5376163418936391259487269000595612031216319183887868586108914728266913044890210415928204921425043137414284\"\r\n        \"7079932175793656516248460353248085399130697050117059833885306031409904703709059143662429130360743269466709\"\r\n        \"1959787653602446546371828086868386418607590851520843575326635774784713441747515775290972240748548223967022\"\r\n        \"7228091449147774440773030146542967075167643267588580207316320357062539090226915532990280045685258559475635\"\r\n        \"362835015005020199131435664704208816162996076304381176669267006218433380126953125\"},\r\n    {0x1.8fc48720ae1b7p-982, chars_format::fixed, 1034,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000038204276533494359839532\"\r\n        \"7786957950037434467474350925682292758702707539053966097537580947663100241695943403082531804530234533427497\"\r\n        \"2055557698045277228910057583486130203365779977007424200345778333217990261591775052038674621644837883321860\"\r\n        \"4479055745892037899325962644530650042011580751336469774152864887311520809054052032886266679457055618321561\"\r\n        \"4239563950863023436570620060327664713533021804518289012696278260248731747094663669522603971081606399156333\"\r\n        \"4699556229294842917259386087074187210475783580978873634790343706621345363738501914041367247728531590692172\"\r\n        \"1291972465216250361492750030131190959054941877618571467150483782421339536125360230193230482848612855245297\"\r\n        \"72302016446491866534790783641858391019539842314856059601879678666591644287109375\"},\r\n    {0x1.df9d17014fcc7p-981, chars_format::fixed, 1033,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000091669699368021086682830\"\r\n        \"0309093813571285621232474662339098971852561732904368691968438376659413371715296794753554027780942902843142\"\r\n        \"8614854947085524042160263437140534698285714236207807018531240854589582130352740175233562430379023280135911\"\r\n        \"1934199081564050835388846129941632190939608375409401841582717669022462385638815428406251457874360114711958\"\r\n        \"8910563403995608284494480455504769946667523216484187271326674880791332001238898632099770597084200640414102\"\r\n        \"1470207555193573290672314600093406404336752969826544293661311868686214794585806812928077014517560803574745\"\r\n        \"6710396985460931950294497232649787115171583267022416268260150828123549520339627356344091896805352339831926\"\r\n        \"7275737964394466129772993407912666757701714015382776779006235301494598388671875\"},\r\n    {0x1.14f46f3c4a3e6p-980, chars_format::fixed, 1031,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000105870073708333769307164\"\r\n        \"5886124072693146296874798954178832516189855441157660004353211757630771024341596578033719821846802609255108\"\r\n        \"5643962556381937827988644235294122737922022064040736253715486237412871081011467456775144784917714373365323\"\r\n        \"0160249007136943912958984242226946137765447165742074403848248923815843134358598433641122735237144977649112\"\r\n        \"3135684782630561684391683828579425996992353709635774270637096026351859440339529808571821550153320544369606\"\r\n        \"0298503739712745713124908816402368714174653481365366811568682760782876915863262163482116619227760185945641\"\r\n        \"1707613300236561721775200418214623023298244641208887391216336535355835025703113643664182588390096646989344\"\r\n        \"53704098273993991469348626790718931843515715485182226984761655330657958984375\"},\r\n    {0x1.4f1412250492ap-979, chars_format::fixed, 1030,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000256177341895859676868182\"\r\n        \"9976825737256842310654327258445744819313471812859917700055329134698004320247395612121803671260214123922447\"\r\n        \"4119309374557203193060398335988390438444710676054145004223437055549092341063651939952711254089605942575157\"\r\n        \"6071960503677948754817700769498401177181766232959964193664903733784825820267664691803248684099758561191352\"\r\n        \"7817469545238997407045234095644380673653509287505277908336999504527719309410219875178825293965486069247083\"\r\n        \"2277413345817796973767311238020200683207741845002297395790058716153525483767396221899398704893320226729908\"\r\n        \"4432475721397029529584462526599002034113933442034138852026499319988753574461847693397707919598076817475405\"\r\n        \"8802045425915342354542418540247245180296875588510374655015766620635986328125\"},\r\n    {0x1.9017f415ef785p-978, chars_format::fixed, 1030,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000611766716334159737596090\"\r\n        \"0171171739569686686959974202247177759940425621023390290215523752040825861534988212323450527213368448456470\"\r\n        \"1777247058601053761862866188287904621671478557284507204014216207221772415281552042774346782581581192683400\"\r\n        \"8651569603496067106454520729283294752579871329182936426348026704420032363778594943881025488296122744980767\"\r\n        \"6379388096070674965149803890959401033610344996445005362652164402969795474430171420624878611838431720806079\"\r\n        \"5409670502199104925704949359469014160326235763930160048467177873299739191152514183146561607454394603837639\"\r\n        \"4614792823657772754457214549972293815320072055217604731689008630136271723456654164715192320970918259328542\"\r\n        \"9056144712640551237160829125782371580577478908935518120415508747100830078125\"},\r\n    {0x1.96e1ac8ff079ep-977, chars_format::fixed, 1028,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000001244291850920601401202895\"\r\n        \"3502157484899302248375526922745314229166692585546772990892217496229641056244180835561315195689137757789588\"\r\n        \"5020022496772410413988317059045245377611213388418239106676765461468848383746280664092973815474299167222516\"\r\n        \"8441354650138195822558318864938044614007032745608778442983632656067307717276665535817566683865265869024514\"\r\n        \"3514862764213610885902701104197953459657922797754442670964483945940232205602535173374756171647220221181740\"\r\n        \"9708258360725922875465550779760937086007766054677009929064967760576046514113812222363608434148993491188240\"\r\n        \"3581096088174673455142188302497447440448899021951800042462326739293158886225459160084952851961541578755088\"\r\n        \"21587667877847598940277661829097687051781662148641771636903285980224609375\"},\r\n    {0x1.fadb23cfc26e6p-976, chars_format::fixed, 1027,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000003100051235126117055734868\"\r\n        \"6264751638282347697441603952716948646046693942464502542196818852403552824031750041494745884790683734926184\"\r\n        \"6175883025166164806498599908783951915826113591552191892899938026717712946307353394825563800253428096559535\"\r\n        \"3092919104693493427497172744505685162739090774795106876820569693546699239184707928567968354322443185678444\"\r\n        \"4083274091500700420703555836987399712520363953870514465047148032607184325622329241423209045337661652529605\"\r\n        \"7392478727384385760735974124403991028933509493200214488404622950198348128729879347251430733000443246176375\"\r\n        \"0012676803885387452378858427867468188188241476144860361211975943760433595129660724041926192764915817357353\"\r\n        \"3413935670423949606511027942182777417112760076634003780782222747802734375\"},\r\n    {0x1.c2d100e9fa8aap-975, chars_format::fixed, 1026,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000005514599643126013910099346\"\r\n        \"7191842543303968665047751359175490329248140080201690655843472208689617281422163505946515376031144432861141\"\r\n        \"9690134650231524119310940944686897401473972303914830917415065953443301454685388122841522413415404381988854\"\r\n        \"9152070816439653378310887032225499836821436715596770866662350547108554679082936746467457577046471331226469\"\r\n        \"7289274394842495745574537422516867037314585991641886069493735438794004631014086781490233046315499495508653\"\r\n        \"2232557782440079216740709862709191364247832437561527741320374664494632591901127302658724842566511890764605\"\r\n        \"6283387444873731418111750757745277659752247589518641113946873407135807482894539278142676044746795852491585\"\r\n        \"953284333927743046282564834512270046662507638757233507931232452392578125\"},\r\n    {0x1.47cbd89edc28ap-974, chars_format::fixed, 1025,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000008019518080011995521858004\"\r\n        \"3524324296264728715452014332332170246674538871845805219648492909707144892198471904040082534603052959979879\"\r\n        \"3600046834482647444437487683767751220097572919791242799892524698422822978446221165723798256749590483990027\"\r\n        \"9146786398360818656186570954245843716698894420854352456620438185242918109562666605362523505773440715614748\"\r\n        \"6304856183344925087301696163775028804963431540984237380150218682479654930440154361420853333545363389746232\"\r\n        \"6737963649687648265020685474228502202597648554842420403440696183134806821821458476785465845396455373942354\"\r\n        \"4076630981269681312843563475213302475499714965733582391790622273205357040908868407873222029151501734155057\"\r\n        \"85588461369367258646472150182028804099587659948156215250492095947265625\"},\r\n    {0x1.c4a8aba89bdd8p-973, chars_format::fixed, 1022,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000022148549407571021803058758\"\r\n        \"0892378748180044045162290960266128758237081853875197114341184482311756965524739725514269341594904066527742\"\r\n        \"4434707407854591706332448113851127805566965881571771436089615736431261505627619156849281750933181906556668\"\r\n        \"4802998876220095291903915324011764241086179483872688853308191821462831037697260650618579771433274264469131\"\r\n        \"4774842762584499878681779361342808953291656008895208453361683573332178323164956420441319644683365839431195\"\r\n        \"2023107428052765343098369150862706140329683451956136293976532733407029002335352053483609729854816729883780\"\r\n        \"2725991818678468465210144105201700849036212045721809359776072325345109326784638168220298677182818265744202\"\r\n        \"36100747585318545294634398450106527178604665095917880535125732421875\"},\r\n    {0x1.ae1dec42dca09p-972, chars_format::fixed, 1024,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000042091145246438698296464197\"\r\n        \"6788584620223206018410308358432061499907914886710591233068837766126994241087546476736165489660708158188897\"\r\n        \"6532528261348147612138346921175538542711878986253712101692204514120740888858124855710541461898075840990354\"\r\n        \"1460234877951688209248224254034261463148493079177659920629778053137602860800369125671659281747652562037736\"\r\n        \"4696154878934954777146874097164792640219120647730346822277636460817321960525720307042509474279237735500174\"\r\n        \"4081039719787285874992326572699690952633986222005019432682477986364030941523289532031147634770203769239297\"\r\n        \"3034679777114534015392534198929701908358497367015250536401199805425015654760144385399977606296181636396097\"\r\n        \"8393038157465241961259638119909054498890554896206595003604888916015625\"},\r\n    {0x1.54ff221954c16p-971, chars_format::fixed, 1022,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000066739709449862607565675687\"\r\n        \"7829201194838756325023076671857801591621689938639801840509711072309067042884640156496699439994300838785152\"\r\n        \"8664871312266920501114219371300473883094315059942700609960588228198801286350447114884254092561109053574594\"\r\n        \"5360033210823732362283438537636905209068142302258607649060295923141308162131010242194197916325697362693742\"\r\n        \"5960768196935871679150780952465291867950902919984043604391377263345732481961082670822286777585677288460873\"\r\n        \"2483185534928741979770956013577147182563951486094138266102243971731116472336426028926215761392757848297473\"\r\n        \"4826157117612672491687994740358669693712403332630888555168153976682265301974938845259831299379547919361155\"\r\n        \"06649432796777077774136549374872640072453577886335551738739013671875\"},\r\n    {0x1.be2f99979a8cep-970, chars_format::fixed, 1021,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000174654636402337691006381973\"\r\n        \"6077110430205085110398918660610208193165002648830459932732755875328272920006833298046786276680503784255684\"\r\n        \"6006778704271227385435512730699905754647142222043791534216190031489176270929205737215277156234213897550939\"\r\n        \"7213454717107882597757342120686914788114089935876483956717648137138281353448511598356787044275189190360158\"\r\n        \"9626615453304416936900776008651698533435544636347626690765031072431532774639002545780750939311942703695306\"\r\n        \"4651633504530963445390509584488895131989898049530998192521307275379277301083810182420653862263320234542268\"\r\n        \"8648205063986358713344707038657667978506388499093939846046989651768187181149527056505010534577248975985391\"\r\n        \"9318571093384770703357713843295595523841257090680301189422607421875\"},\r\n    {0x1.462457ae27e71p-969, chars_format::fixed, 1021,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000255329454260029047805071575\"\r\n        \"3818166924852760785307324274455464703276896685649750398556670281450079476171301511416012248448222007463781\"\r\n        \"6440716300864560198901287405644409298523192920264967278757403969724292477983682901039009490073938325388861\"\r\n        \"4316831594822366040947933300462054184386729464257884520452002649710897967901356092952311755812378900392119\"\r\n        \"9749409846260814033055309256968619621536147314096602667572767547368480537021868582121265835469099565600764\"\r\n        \"2227738433848796318377451325226628190118679852419841970206898163786280296976945027930017893514340686171115\"\r\n        \"4337993762616468431106982229175266879638765688225021717769969836929117214014785145496494060501032575121829\"\r\n        \"6624302065265450254613545551241049480495348689146339893341064453125\"},\r\n    {0x1.c9bf289091a57p-968, chars_format::fixed, 1020,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000716719905100483776140191265\"\r\n        \"4283331028999961614491290387680525327758435160264770312345835553652819216736444016623532872322399497645329\"\r\n        \"8018484358256225950727041531158851305320828328874380156377840606874957230780019461255688271701567752333273\"\r\n        \"6185122438898204140391778580621578304431368821964640382678296205551136066826473768970889610022361504710940\"\r\n        \"9764110696035061612142836930506582657157327364164772577568894370334356710122547899533333122870576400085144\"\r\n        \"5387986577865539325916074017436777373567504894953242171513494949770270836128523773225426738845273436941923\"\r\n        \"2602320030129013140405207627454909161216317749927564665698270971158400157244573484733167635547219613675510\"\r\n        \"582898110780193501917110197874105637083630426786839962005615234375\"},\r\n    {0x1.c9a6c21c0e44ap-967, chars_format::fixed, 1018,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000001433141335227930212814919107\"\r\n        \"2605813876697528611345885441115000029609556842920386965482577284207290323742533219950959430783015194668198\"\r\n        \"4866655822228339143835403194270253223913061678439860917065041842332387051370077950094428814869878862795791\"\r\n        \"6496725038596154564027501474646179397442030182754135054292301436144243035179137127061028271541768460916962\"\r\n        \"6900527234807117188403332704905395975649634750649953559577652559528484291031633467618609466234606109062833\"\r\n        \"7052908713177247664619683224737543046454127747542696798955644966121171604862571317569558957857552588354280\"\r\n        \"7316083301746126724381306477578494291843709874477007787068278367148644618010713187514488284609760326730217\"\r\n        \"6234293033266604144621188254848931364904274232685565948486328125\"},\r\n    {0x1.080ca19dc76cfp-966, chars_format::fixed, 1018,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000001653747921414095749664443207\"\r\n        \"3018089012144452120603766472454112579144784777132047524978251678680652305622500049925363586631576797699752\"\r\n        \"3004602180573355978400757182575064036053958408210190339447230879379051417089690260064067487672099587992241\"\r\n        \"4089510417178382171731253321930144431314913298710310772875402641130578414655191164330530463646436718242785\"\r\n        \"1593250624197965599005919337369891600964947788560805510699332326217569801868088227035341727693943399255277\"\r\n        \"8680098874211345639068458050074871457491113617241586311735177325328666991945594936160738917458264152063330\"\r\n        \"4112836941762385362003194298015982774531160072879490045018610848272352089449297155999395672819601691676846\"\r\n        \"7473936479509527842902093242027916630831896327435970306396484375\"},\r\n    {0x1.568db6b9c2a6bp-965, chars_format::fixed, 1017,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000004290843909020546729010417987\"\r\n        \"1798651941226153898698783477673232932487248769134773470874791558624108005131697353608862902655753654574915\"\r\n        \"5269194293346060062071094839619735992744602682720872020489985764651605227123683444931533858939585871115444\"\r\n        \"6384822881445654088301480606833643769669528121156913759180085536698487352616174964008809803650350438860725\"\r\n        \"2321301774363944935742492341884553608844792004824932319261176330222096044026500175605116486722498994442457\"\r\n        \"5770385717357779091208619818711665610895151705642793452624142140189626570619779038580875302481307764977579\"\r\n        \"7625712909337310437672688236559439684574369461412897368191004528045867884390464739907179528687280026756613\"\r\n        \"807116577015152709246269269183216010787873528897762298583984375\"},\r\n    {0x1.8094bbafe93acp-964, chars_format::fixed, 1014,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000009634563122144925584252862709\"\r\n        \"8837665212135824138580247641095033482922043986659116736534146977997184184550644460199475556134749771118880\"\r\n        \"4648235220805765618575601316863143054761832211432259334276682908110694267973267936336452574790472113201409\"\r\n        \"9792189719325293711235087718438176498772644269414827594417119678477271996103962446406885046148430430699696\"\r\n        \"2247952090789771393359568041684499232396514214051736756405489381778675872598742815737011666738940745479418\"\r\n        \"8886316922944939839391299995745043273460133146343884929041994919904676232308848762167658898729149951509500\"\r\n        \"8487221366327604330469301849090855522740604347010078082126314423497545739632197917648583593472744787066092\"\r\n        \"183286022494344519144504612739865478943102061748504638671875\"},\r\n    {0x1.a4d81255160e0p-963, chars_format::fixed, 1010,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000021086057222075156140699923441\"\r\n        \"4564500843088972527279057134370861085961669874684090783975879714875336360665125559425961800525159988473481\"\r\n        \"9389953871450325631938423353411492527102582769073390696443103356152047667934205046245456558650038735730800\"\r\n        \"8719781038879945645342734732749178265832103241325253995241750493815151958293657369564370243965168645236220\"\r\n        \"2454062268891390078907577990174502268833095111096637846568643857395612744263557657149281665440973055056669\"\r\n        \"3721065896779939636234938236192516341296551508179883633406331741957525488070917823271593105149749384800080\"\r\n        \"6618376890372039405238914424603586856296346669256598951615088896128955516717885738634805731156711106938387\"\r\n        \"76867128142144224012266562340300879441201686859130859375\"},\r\n    {0x1.555b4760590b2p-962, chars_format::fixed, 1013,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000034206800637910766975986348248\"\r\n        \"7568092455857226172452538849137654670829026558635397447930919129012919655902035289765511658279266066746655\"\r\n        \"8236027503499479197580402361620786863744924589096061170472217063438961289426815347747096631346945775370008\"\r\n        \"4502575974626831490993326694422860463385783401015534916420924789459645737632655303976057606048773717878928\"\r\n        \"6028980473242284769127953331015775341858001266767203925650569921328324381543299424787438555730075039358292\"\r\n        \"2931646787240480909013093699491596011502544473515796187072513489926739944685859607150588631254483057331394\"\r\n        \"1407589732975206216451663662122824092386332909028127374630388995592459534494362129485634479377824374911061\"\r\n        \"83531864268581560058202217788902999018318951129913330078125\"},\r\n    {0x1.4ac2efcbe3305p-961, chars_format::fixed, 1013,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000066290167589677367951375617422\"\r\n        \"9292716806068642209468475059928574348081435492672562858635936768075345718116507990734126024664323017252510\"\r\n        \"5601231572132227719729327193433661012858341100476443032943984664211713338292994338219373247383273584684158\"\r\n        \"3610763427888729264228261155872596350770036849190036848236690453955577994035107919232269198025498868586627\"\r\n        \"2949097261799666956920307209623381975737540495544653710372564881978390565989219877292992603247756361908752\"\r\n        \"1925534187639963588382054509606194952749384570687464334561188609275095113289769257647430285377053075634126\"\r\n        \"9447780751678632833796862583333928343033480199175862679264807795179484789189270636076092132672376871712774\"\r\n        \"44430229764849742991883463361091344268061220645904541015625\"},\r\n    {0x1.5152151a900e2p-960, chars_format::fixed, 1011,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000135209468575757704669243360090\"\r\n        \"4978812788038658784057375085512637014821192293633284354988083332910409714056212910610846709279699966459815\"\r\n        \"0437523432714437780192406774076606804837119144288166832388898991383219610969528979291417497166809956493647\"\r\n        \"5085288494044278548669054734387251268194713494859273686671251259149052477932550907316733642367666498707764\"\r\n        \"4126779433703191479472341766481221651746023800800090309455088100077933460409533060257217016013325784579980\"\r\n        \"7633941363732792862223948592127182664634081911897379649605382133585971706661879051381683577333948154154830\"\r\n        \"3712439342710725481894223508701233451359165629882362810744996099608461578753790281688211841686919921141420\"\r\n        \"718345664751217256871473892942958627827465534210205078125\"},\r\n    {0x1.7e58e6c112543p-959, chars_format::fixed, 1011,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000306515321253198280436114038864\"\r\n        \"9718163177630153098638242256322057332264316825884745387709988626966778193900377967818621973079307255143430\"\r\n        \"4355125421170227991116729669620848426239592992911979679122157206922094124611266846097111966736120531163975\"\r\n        \"8215562046178316584558614023241339019551486284645236279138390006112994254377796838563179303464741707072344\"\r\n        \"6154644578522256496639523318507897582380933808362832961397125905373505903881692268239311221184441430130140\"\r\n        \"0353970351150576226049056471007070154205939564098937126326694182928324715844701286793731070551106321932604\"\r\n        \"0478506394714115663318719578959298300145129737275568872010082272953473703897500046421729618175608545958200\"\r\n        \"349764878121067677996247624605530290864408016204833984375\"},\r\n    {0x1.3c778445a2b30p-958, chars_format::fixed, 1006,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000507402297546796300155974976354\"\r\n        \"1125170478284238884770689255999822246103901985835478854589953636416469537561590049706630652513764526444447\"\r\n        \"2236786867983363196145687982136332550029676213935914005983113566403763609110378518267950840459370242977226\"\r\n        \"9969685610809178987830705642758801741201614124206542938945991467305841033444750290456306956288188648520408\"\r\n        \"1056812066585987639722063880607676286374127002491780885114417306881402349312394657949491179323334737191953\"\r\n        \"8280721400311952883002233060077141079761762918609175743077624948793447281348172956072801799356361241858583\"\r\n        \"3945965146499299438341126720124755301171679221957015338045823564364353547020467330563043595487862594075027\"\r\n        \"3716264569061340505840007608640007674694061279296875\"},\r\n    {0x1.d5d886a6af07fp-957, chars_format::fixed, 1009,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000001506640153100876566020971562084\"\r\n        \"7113430721240845311467067488393060399424689768179013689935270456617217772626244929423631519228493856034858\"\r\n        \"9795751273940538757255549062206419695642046911817014605594134791735095417547349666106256911825953848335647\"\r\n        \"1500150312765170021570234313983189886563782145873240440323828891290807194213814694507158939235901598275080\"\r\n        \"9131377045618332285170839599383602029439803065564549875367002305011744027345479199876728897725328043145101\"\r\n        \"4572515866251973827561103685944590487910895898225162299074096391327451735400570200908986735487971171181929\"\r\n        \"8254603418980386599420783790582966667612569549001195037944795412981296229040797865364009022932618669635537\"\r\n        \"9052802457638497724001780397884431295096874237060546875\"},\r\n    {0x1.b4d6ad2f813c3p-956, chars_format::fixed, 1008,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000002801593794149458289375221969937\"\r\n        \"8451541676163091913910886367587801515223826775770979017901213581846339239008597274356448340618213879408241\"\r\n        \"5708206777985372462737529604331783161052369852259640641682719407243347401272745693201162769531854684711698\"\r\n        \"1997986538474037406413302814400876575334916367833693107072636011428947924771043183285915397963385764442595\"\r\n        \"4502850284440493944167381091614718033977997952112454266036283567034492773027029721407239251594118127204450\"\r\n        \"3439934946642157033684526504794793241794104430220950327217291773091671208313520057013551013607566881844423\"\r\n        \"3387687590160584099397367567846354051160569747236486489617845200348490288202051349985773023756814947896164\"\r\n        \"670199036189450481071361309659550897777080535888671875\"},\r\n    {0x1.a3accfb847f5dp-955, chars_format::fixed, 1007,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000005383036452986689707089265313361\"\r\n        \"3309687768553145998845020770002508286663820178028904357041106164871662930240429232628188396390915409645247\"\r\n        \"2893947755538934242330914543826959031146221568246692512569359075149804195162245528686132546025168087601990\"\r\n        \"1469233112170819584404180268970996038988942682994555869177877222572726704409670637060636345549170735863881\"\r\n        \"7637507737802603692179707323013726519499078873069293802377310441059050095455840943125657666622548189687664\"\r\n        \"2690857726316749420932215444605654341122928806547906002555368770089678159201832195643718096762297912030990\"\r\n        \"0059276854565582725176763468818525035142169991443317320021522630614922936712841305529989073666151493844968\"\r\n        \"98688035417847308483629831243888475000858306884765625\"},\r\n    {0x1.490cc71c1b5a9p-954, chars_format::fixed, 1006,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000008441234238050257654608143045011\"\r\n        \"3714547500629438411347771053360322063370388173904974678292331037009777086711209941481547644874475926368827\"\r\n        \"7212497420153992338777818006934888909213572957511956634738036763365144586177532285838927084302911516660789\"\r\n        \"5428831657856603626176699984273793880426192286194266443686243608836600001354453011013245420503311602188706\"\r\n        \"2016086384595971121585437748216881228804338113019161359341335927611034275239403794071774633231535502365664\"\r\n        \"7031482236645528004617260974202488109127266152579244998351781422253738236175424370155077300184429245205537\"\r\n        \"0516538649507594510998476523084758454303188096588303409769684799427283670348952796189333712505075374786790\"\r\n        \"8906204526854610836750225644209422171115875244140625\"},\r\n    {0x1.4fd2a30c2f2bep-953, chars_format::fixed, 1004,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000017229963037415353860036939274512\"\r\n        \"6026077034739345703168137555632023714502853526675561807275891540870413620561283459465386257149814404426731\"\r\n        \"0735092244866475405537978980001598032195060108955428328784896295737887239531749999981802001417396108156377\"\r\n        \"9582829767646262355995956025950412141943783595608625038608668079091726460029975659200114921786030177059914\"\r\n        \"7634700558856107451291371285917065599081112280820640917253408975640335333977713665527965071968852553983251\"\r\n        \"7124741580735742733225434024967537004498810829066843540287458856623760334851322987488292975046799929539221\"\r\n        \"3495872616271007027553507548507838903708274694818842286459908081847482476741930831685576757938867841781152\"\r\n        \"21749321393784892819667220464907586574554443359375\"},\r\n    {0x1.e712b11ec1d63p-952, chars_format::fixed, 1004,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000049980227888927947361544276876048\"\r\n        \"9455270526286941463611538933406026259074910585749895445770331696354343239202363631494369169360431693425214\"\r\n        \"7634518684792624730079945537425876985997178452231243017087626532543106276358615929213885810712355953882567\"\r\n        \"4057455540596743874765624052243747659098442761322506411824665706108552084084218918059037991974479006158869\"\r\n        \"3056169849068456226653932205312729989102037696430382138353314730376082250724904487349755042619016279363453\"\r\n        \"6282770945810749744395830459488135229127474448425736737475336134881159932765382595260797681368667692815244\"\r\n        \"7950498623978211624297230724599890314306484488764858546210505231295418043612182084416991082185028657201667\"\r\n        \"91044828773216135431312068249098956584930419921875\"},\r\n    {0x1.a951cb6dfa80dp-951, chars_format::fixed, 1003,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000087286979124915840031811171249768\"\r\n        \"7467444368897106753274009448112897434374990551504083361434472076990675548257442958324490534088914416947203\"\r\n        \"0345962929533820622952754572337555244829291746940819858048818312512407105788126951104999460919138178657731\"\r\n        \"4473614959923071645694511151134251192939276656412454422655235774671039752807359164333796045189813934206387\"\r\n        \"9562295690992026703839973859592630317510343598115293358217353215269579574482300932318121087160706915252100\"\r\n        \"0289421128756125787103234636014020808990191470118697352773753581193966992555371084452440315677385870831672\"\r\n        \"1036573336221194782970791861317168649003079683382766692806872535633233936121493231431619456165918433391451\"\r\n        \"1633536505164077112794984714128077030181884765625\"},\r\n    {0x1.cfeea9a77e27bp-950, chars_format::fixed, 1002,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000190422710104977763320017088013306\"\r\n        \"1562636160392816356868148687074254559912708970128427928098420716969202321713200302826873037284450151621445\"\r\n        \"5924208987366001434939743136403660684329034900795682515039218239607769961070813600340587606383062269871871\"\r\n        \"2357395107973013643630031179965109739646437772385890926147471081285806366515162850607095993734762727585189\"\r\n        \"9282446151613688832986623643166576916545974660203523412854521672957349134716034187586798702358180168471635\"\r\n        \"4436261775438116143970489630933836447388034254533478276594259415992602429267767218555714089756461068648676\"\r\n        \"8873410595168253783490481271524725831561300847507090574073351369652666435690680061075434980258140771483701\"\r\n        \"977439921548818091423527221195399761199951171875\"},\r\n    {0x1.61502417e8ce2p-949, chars_format::fixed, 1000,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000290037283829511630013363865236170\"\r\n        \"6238128613374409059474358941441136834065355513724427153759145165568068731597325059613096888192036043781625\"\r\n        \"2207225681919322577983708053281262885786041260892934350969948470571849596784985903495468733626073860399109\"\r\n        \"5807972691548050674056472793774421388608166241433888395816776961563483444952082053324551414836304389344379\"\r\n        \"6967648502707271130763132701946276020956850825940639071222081359496315692610547887294288506372101623606589\"\r\n        \"8886987801334925916746303182643848978302993650829806171161826837630193206362337054919742109205228382754770\"\r\n        \"8325200456325402876426988696140638836178773460972955648321583541337598316302171184287844342406097967000830\"\r\n        \"5676166815434413592811324633657932281494140625\"},\r\n    {0x1.6f4a6043ee7bep-948, chars_format::fixed, 999,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000603023001148053233608671406136662\"\r\n        \"9154844710765750815164166009510289390408928352130382822822659766062818235069111539868695121950322320668137\"\r\n        \"8171510738766830004867709994331683259303295072702253338399620483078087368703367864741062551628623933830201\"\r\n        \"0153777490849939613997091271883572026324551068699553809789367085830269349078915084559617633423193812990897\"\r\n        \"0145201797688554174500309060673869117866459629299845875451222894126638524480070648366890280832688105349742\"\r\n        \"6575560769846504235371891665287480776710841447042185189149010554457654596595786073462212798709949925503426\"\r\n        \"6265556017366214401224164470380415863280759607522343102756186448326572436788800100967001687104564561953359\"\r\n        \"727412837809623624707455746829509735107421875\"},\r\n    {0x1.82fd3aeac2fecp-947, chars_format::fixed, 997,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000001270729065641045197214871417914178\"\r\n        \"1588967973845926807547334471277675980850408554878248054803892782582018822253418256902829942626257005944569\"\r\n        \"4988348700318777825258518784535605857425130299671300426071383629977858895538733746821903149491024406625677\"\r\n        \"0720046737203696728672760192370711138924283768772475940785693724826698986046600899389474145339650214620200\"\r\n        \"5519277127551424134439683925893021558019255827189881118691971239229665920665706074589881220195814966137824\"\r\n        \"9840066133255936674274226197607897248507836438905238727384458811013417251337908250088568385820779325091802\"\r\n        \"1016981595825486761813591464957247173777907417675517257352395503235491976503703745032815963872051462389201\"\r\n        \"6668749160857032620697282254695892333984375\"},\r\n    {0x1.fda8896e44ddfp-946, chars_format::fixed, 998,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000003347058306335633210849876675716650\"\r\n        \"6385353764031783485196998561866179457340599432256217213352642082359348776006561937984312164867983255432833\"\r\n        \"8726173157671099841073635018988556349126405324929433103638921411010000406997097554139706240329983669188387\"\r\n        \"2720101591275772567836499474144709269745164033553143381865980948114813450956332339842537849932862573037820\"\r\n        \"1514987590090742627365532394510810911008494010157265556059636318908537716658826575242739741476951917424048\"\r\n        \"1162648267831006229274985704703073458419860862001834681264408952610279695812027204281110026433304299240596\"\r\n        \"6114086480503347740480307977037393767702327170428860861334438521055997639875193840517369611866496580535518\"\r\n        \"04025305127510137026547454297542572021484375\"},\r\n    {0x1.f63d0121b757bp-945, chars_format::fixed, 997,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000006596657853729203515742243316233994\"\r\n        \"9684328657517781425278937040263737397772577187341772038360860221866728139740168744657011708467799022498428\"\r\n        \"9048367008807112058030080344286777952675512614595714878804489254477073655363178820937302943891173739688722\"\r\n        \"6525344476794228878774806817015940622309814103147301158180909849015378481312311580130769770792089183707264\"\r\n        \"0679333216386798989999483042211053745064747961945094371289546480468588624655464858151737047145695739493473\"\r\n        \"5507329277236644627330631947684311599090344589073145189553679017707785009474304333968113131703589680752374\"\r\n        \"7130636300631758866165476656409393301104737836983161194297942630550081578225483538085400178223022866888026\"\r\n        \"2464513375419983276515267789363861083984375\"},\r\n    {0x1.1abe55124f6a6p-944, chars_format::fixed, 995,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000007427398668320938600202918314649779\"\r\n        \"2358537735412418076229677375034053108781538417130596628794716377703048792043944787439164083049732926376919\"\r\n        \"7669372654570210896760100817222039133059067468132996774053651076190226967358944107425923006562795703829318\"\r\n        \"5520235291906031948115381397829092825319154312472026340183818944682611111115614544147416970660937328158629\"\r\n        \"9060755244822009110650534665364827404192153653867280756103054142218360222093458106173489557405135404872456\"\r\n        \"5591943722679704655789621606831198408689956651820414839333271464401183877845096687949407630565934742072638\"\r\n        \"8904357845227958574995156936912713306237255628189778269960699349488082411063864186430306510089287244696020\"\r\n        \"99256260174797716899774968624114990234375\"},\r\n    {0x1.e1cc3addbf112p-943, chars_format::fixed, 994,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000025312725644714645962947927743805809\"\r\n        \"8046188843976178214375723184585507431180848627052892059439660381190032909589290532205874362493462899587538\"\r\n        \"1837943114843677690290757475966829773381513504462465935520985874170808757851469248740093376850022734253382\"\r\n        \"3476404974675519672682903628385538916962659662633691571736344318617777302846800242763765681365778209538316\"\r\n        \"4365461668044042733324278614600752670646079645747018634289655624083620110521953699389815696244858788510527\"\r\n        \"4650750720507088292109266028314375468792514417090375144624505854846370613750986429422869415728090168020176\"\r\n        \"7526275538160272166003731708917966386538917542104658631524656016777584689065144268206602137972929129612707\"\r\n        \"0831634142678012722171843051910400390625\"},\r\n    {0x1.c37ea66e435a3p-942, chars_format::fixed, 994,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000047441324100905745554574287302084691\"\r\n        \"2803820795971935816315591113366331582329509971297928949808058941930664947024126350169270196995072745313996\"\r\n        \"4094982842291547313755490486786367335729006128614919710190720756388346060562319519438688203810434951289695\"\r\n        \"4849502432807790285058942456389657214604934749586162446761321929113744909744685596656046149778452097128786\"\r\n        \"8115519659684239948033351708868051182201085858324140277023786909650546821132637590793226042392427342459479\"\r\n        \"2513951533482347196046726595658528758631712076151539390554904469478656627069451502833062779732643453355045\"\r\n        \"9856203730373419301715640151438670751568269220698410650144241297015427718601896354602394403924717955739042\"\r\n        \"5574947556697225081734359264373779296875\"},\r\n    {0x1.5de150d8571dap-941, chars_format::fixed, 992,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000073528110594538782482365773897168607\"\r\n        \"9656276703283988537435722942874894629410400049236090868524904221483780423221265352794066364321977056316193\"\r\n        \"2290871933457999804070473188593715855710063276080601930566799221618951389023450857711029880846747347949781\"\r\n        \"2669476714657911404988980189023000184091924273752038001295416199133536687913336770565773056104716911264461\"\r\n        \"1788011278170299217145724065948735254510907592500616061752976888536427415063374341194168250819599742158320\"\r\n        \"9938081931051790754684746409238795346003455632343306647438655959229430469027013248365025737108296595578764\"\r\n        \"7407936595401532068399171576742411085999112194422003270469263863796327947061737707383862021365045804873264\"\r\n        \"43449802582108532078564167022705078125\"},\r\n    {0x1.2fe740d15c5e4p-940, chars_format::fixed, 990,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000127731959140294048399971213650198466\"\r\n        \"7801236065235048806444537810208068087817829275181212790228225665073254762457032074167125945963486726250164\"\r\n        \"5989542519919320622366927457459078161527979255825282039797351596484203705160087167691063167302504868459367\"\r\n        \"0358363569459857499212684675938886509698800860291252986818533610029910805537195256577905625480446255138948\"\r\n        \"0809263139877181540239827869316534678386403409720339026305076449997313311765579574003533288958339344621641\"\r\n        \"2621528964884123281468415155495052660942536454564580301495844985838838783306155517883113766155698014616431\"\r\n        \"5857620275225327679372535464703713121045423643509346575233415996862647404985643869421282773361209076680433\"\r\n        \"671668879469507373869419097900390625\"},\r\n    {0x1.74c88e0ca098dp-939, chars_format::fixed, 991,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000313365146838093358236420140569051658\"\r\n        \"1105746242498610056637907764625652226456555415141340665125388584830097774288102121532719018587676854488355\"\r\n        \"8080957255704946859709991306677005528969850666401961583903847553471053557951376835124917962926402863407844\"\r\n        \"0782650426136011666899880669292032641069797008147055331195674216356529194889190303458344714494976340157737\"\r\n        \"3388034436986851036531041736832716725000154529591297240790424338568500905683261889088144262991753471099460\"\r\n        \"7816878481325675283258182823175059279889191049771765351259820925621261521633325461482705778771219598075628\"\r\n        \"2970173089471656319768645768979387137939224792870912024630374449872138538705829858684663810842954830785528\"\r\n        \"3528766676681698299944400787353515625\"},\r\n    {0x1.130f11f4ae551p-938, chars_format::fixed, 990,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000462433994807609866517580488595918986\"\r\n        \"7025753248155197523423615068565730024182113965787802278458523387479124049634922415502894962122620968309353\"\r\n        \"5050836368468052738058620716115451967228395173777493981148346272808344417774287830298267236076066569792734\"\r\n        \"5299505713900835962755400093518703015995713998485526808524102156727174234319548762303636435070446231952899\"\r\n        \"4542283472195164243165427286927827946326324892850537364653645448662928503889332720476917768510116269567142\"\r\n        \"5571429733166776144466203775852323954452079649806265803567176251405339625463526249899619311109025885887582\"\r\n        \"8290937401954327799156713208214777486490812857965856234239104338246085766373351339663978363866896439428322\"\r\n        \"285181138795451261103153228759765625\"},\r\n    {0x1.08835fa35800dp-937, chars_format::fixed, 989,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000889408777274034134780544224695515853\"\r\n        \"6136060213214647927655374856057226385535490010817438841387381081057086944476526633185508976830686400273575\"\r\n        \"1381507354730705652023270837347542895198593808692096538170536285629315523725974057943684291775593972874826\"\r\n        \"3606487973520290702671781992419585307527883185118989695926077961368172495071415355856212507116014004141258\"\r\n        \"8933795776394239933049382324414558667115560425786369347695780938584808156024325242043096442949805033001474\"\r\n        \"1952395889951805410266142717798261498669781716279885903817870706702927436667659924741720411154519844673449\"\r\n        \"5368313840004517004090879092343656929377043071000965025412724132842422519637004160953715876831044426578665\"\r\n        \"17407683204510249197483062744140625\"},\r\n    {0x1.6431e220a8c23p-936, chars_format::fixed, 988,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000002395365208372751238892607141173665109\"\r\n        \"4684359629139545046331701056101374156295569337074287726281108064839092019722035425712564337078891872125343\"\r\n        \"0411000497833026470918438064748906303836803667779264399037996493294682779907053959099205417888156319550884\"\r\n        \"2237166002254838778941432287913764333677699977715082668936870273420684163788956494132784941796958079886598\"\r\n        \"5391354437385154150217050073066367310703953519083722746947699236233991091448525170238716635753128040232958\"\r\n        \"0119848376247994125192476520054069021178244018175790204834170600687522006128029219949642817963680824424492\"\r\n        \"5634931880191201392142822061160051761870987672004337971307673840421985840397795630413921011169278967728457\"\r\n        \"6299598484183661639690399169921875\"},\r\n    {0x1.17acfc1134894p-935, chars_format::fixed, 985,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000003761567466326268181885589810634065238\"\r\n        \"4824488135624420876733253077105060946198861732627493193519901047247753085151645061052614831077461787550378\"\r\n        \"9522940191314377583805558176016959667319286171660282631959695917660262794816160089358584110296226747197056\"\r\n        \"6960719972616815524052330290448761157948723719283892809603393480152922696382181832677174415906569718026635\"\r\n        \"1038889725789977121282586495071803503310337622258942765229731736751373980228545367332367240256732267829774\"\r\n        \"0121435959673931330218239056618465199032675986831449764985280751644590105107163390076822957129219367665806\"\r\n        \"9223654709451072516761075679530496081880163478624608778936598616058103897515476300014760931806571259139460\"\r\n        \"0394778535701334476470947265625\"},\r\n    {0x1.e09c9bcb32e3ap-934, chars_format::fixed, 985,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000012928212167160485647289050725920773987\"\r\n        \"4861836069414361195057298546848250710618797414084049769873325428052026475209722120894427905829017312531660\"\r\n        \"8241091852576254939741247469188715203775512048686032331388554335463507137482116585173531717089284209974439\"\r\n        \"7570948154763130326339872466574662174240822879049800497992851730923604321033958606419596582626473030678859\"\r\n        \"2310470685037034319253555665752608782580961488429909489306613884615945556331126875486164601415077624257882\"\r\n        \"8743675690174930134321675660770445691242995363409492941734509374221242410848684155513238368365796187170024\"\r\n        \"7355603717069267105273160141024636245841030542167997538884894269542306738988346319099212738837432340455180\"\r\n        \"2241257973946630954742431640625\"},\r\n    {0x1.a1dbb96340c68p-933, chars_format::fixed, 982,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000022480352182123752808136544940388978663\"\r\n        \"4144528684028071721643530480871593182406991088523084109355277990423722607479167570828666405584023758943395\"\r\n        \"4496235477862650604747190007974927829366839200588582579987175828223675779905454921856840712616925561352311\"\r\n        \"5547617808223210507047507148357936450312818091317344650050542591031620770295421779702653225582120691078585\"\r\n        \"4698054868524203836021409630916609905079528396656843124885091925936276146801902962301794667900084167998719\"\r\n        \"4819323902334663004063391308353045399311591450091720421895257829681349889384996716260685606079478830353867\"\r\n        \"9715429772009000419656042999365911389032791895112255167192881093383147665222748531606285313667187297781424\"\r\n        \"6041816659271717071533203125\"},\r\n    {0x1.2535112b05fa2p-932, chars_format::fixed, 983,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000031548509399420712639272059276400333316\"\r\n        \"8825472939840263152474766394932559633481401213456905267591366748121685127366607186078984663434814626878761\"\r\n        \"9467435913531988781855562027128524486327361877858088502218796529494172466935302619475876494375304284254242\"\r\n        \"0848624400193571676128166369626251295790577666448960494078709554649747335787221346083512058193881301726918\"\r\n        \"5088133887540329540019387686130807401092927971033628483700107282777002447037363112380936616653230090833282\"\r\n        \"0911765805302593218419194473373446779984095803500262917305487147202453464907595976076416622159108849254870\"\r\n        \"5940688817477117458589834121878781888972966233973065609238942277426176631314113665574377210311721175806098\"\r\n        \"92684151418507099151611328125\"},\r\n    {0x1.1a21c468e4a6ap-931, chars_format::fixed, 982,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000060713639849830441431950666885186177075\"\r\n        \"2265151539926629076264973010953983907324466041869432033823459140388847323282265478315251107842926851637284\"\r\n        \"9444737215222562106656325116914278231437352250881778177828512586041058802465427960568227820236551669931647\"\r\n        \"5797663852975205091841100466670249174658035281767126538276048546906760539717394672162140625498504576723310\"\r\n        \"4233430770581482344127010001310021576891807049979818732256016778786725558225608403941078353606559612621001\"\r\n        \"9437108179199837557454769415343201152373557052801749437569865055616521642323629981253371080878813132722433\"\r\n        \"0521397445681333604743523119231158470360150086598845118086029335889054054948984672371006994246595001030186\"\r\n        \"7223461158573627471923828125\"},\r\n    {0x1.fd135d461e64ap-930, chars_format::fixed, 981,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000219102021651833679610311447343290174632\"\r\n        \"2697938270186945371351301396824908535678593228801202439354195354555298866455116158899738801666640075186148\"\r\n        \"0211382559080287549242030557441693683989270686073119230933376584897099084395850837189027078871895526684485\"\r\n        \"9388924973520421799665881564677217995557182337483349755159195630924015413291549658379384389715545475874182\"\r\n        \"2546081513346145952348420009435809153123845362687245912248059666995383487273354828366695696929216032838347\"\r\n        \"2255495913136209316417452869260914810433493047388543891888355256159483630086322246642386624637846863322420\"\r\n        \"8467617370793215969921003844152689072025202975141367168786824130511190159598977575695967511849870934526052\"\r\n        \"224100567400455474853515625\"},\r\n    {0x1.f7d9a435e9332p-929, chars_format::fixed, 980,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000433706034922139992466051098635625789226\"\r\n        \"9790420502347908835422511841116263760317988870371022660947524084318977783088056734831661091131387005107336\"\r\n        \"7080032178622864429629631048087660131822766002732317441095996295232310734747433463008938028163941940376604\"\r\n        \"9209923654610719272401703006216476733737770057412870788266332106008639686989965213527408698164509196717565\"\r\n        \"9794850779480003111895553824321087854495212577457398595402036090648629548430689644857400023575624192252226\"\r\n        \"1811735236070993937319671767831428324962582529487566901130462056303559336906455268177393727945943885724685\"\r\n        \"2906755824249947746316595754138291586086719495135961042977343346868076566523814309925662297331983019432755\"\r\n        \"09984232485294342041015625\"},\r\n    {0x1.94c659bdb66cbp-928, chars_format::fixed, 980,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000696847157286931851289587852746449088974\"\r\n        \"5995933947468338899191644265737622764483380773896231028946301101354121009652116589677772323678127928668665\"\r\n        \"4271207663828960684445858789294767590557697945098533365090822545423512585568031129764104327698074634036050\"\r\n        \"9781859315959933671560688119265086307580742652851690725868508539049375890529951116534350607480891045678054\"\r\n        \"3266574359886133871760507672067140680759980765754218311821351038664767580912988223632453672861098702524281\"\r\n        \"6226651671930502546972496938930139886801587107972624994517314961726258337370823753574631904982305230128135\"\r\n        \"5599149532686969653008374807340759937762749905790290559785069252920339099874079061665087904062221291212608\"\r\n        \"77582244575023651123046875\"},\r\n    {0x1.abe769fc688c7p-927, chars_format::fixed, 979,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000001473331115243778954022705309267832346033\"\r\n        \"2933852257475188822441222074344436589917689823247953665290710696624690991611809635867231547228216053927389\"\r\n        \"4339479994193169330520625936397519235918130249340730882903493307621089561285278036673153849935054504996697\"\r\n        \"5086920227034460151662663011478742176698549702779007271900180889286549079717732243991835014506304637584929\"\r\n        \"4907349943601734582058091677850466600549179567598052592528981026904494706085683657881489962319474536509309\"\r\n        \"5429477087602427196556222424895294076578456413124521507596172456938825133112973006220848381319370353828574\"\r\n        \"4927685484325243111761550184614450373063948573745792548306864820340006938921712751183995104148349852835053\"\r\n        \"7526421248912811279296875\"},\r\n    {0x1.825701170d480p-926, chars_format::fixed, 971,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000002660440609494829928484002331288915189504\"\r\n        \"5655703225518408579970423545100011582978514470567087920738321442927530728543237114459190980071924595778114\"\r\n        \"1729612931668439653482875327754820963954270428962349149199726835698118459273524586492199972709272264358328\"\r\n        \"5720404162313925726900614240612356134419032262428558843961823391328706420533704796826237834901399536182326\"\r\n        \"8143063235754023395627339613127590917817943514492812352700718204492686590850424955549214973042837434213790\"\r\n        \"0767838918385014099377896161172321732594458974432078343771471436203756019462135832472960533663250357058140\"\r\n        \"0682087260645108688451326585554293824380869245358022373059672081904528410332819903308387843310356402071192\"\r\n        \"86060333251953125\"},\r\n    {0x1.9cb40ebe2177ep-925, chars_format::fixed, 976,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000005683973436284207079660842335896376252194\"\r\n        \"2847688739811715193332262874402507007578228137833409228851937575142988133388681897276244108465150313548284\"\r\n        \"1878157912998491023471197153193567938330820279182603747487685157804449914335965648740881215808800101491734\"\r\n        \"4439759287983216092513910053323400256593370050435002396967994998634783117425379138768137945449509233036530\"\r\n        \"5712925878132005668316354328176029389998813412358306819750991589464158840440187540370845417980702155638277\"\r\n        \"2917776316285266398822892936165695523171539159535919943189320603911105750651160880217314777880620536885634\"\r\n        \"9281475078098721211793053402011838737841041885975679740409233160578292466907040308922351851128595967566070\"\r\n        \"6125199794769287109375\"},\r\n    {0x1.ff8156df08505p-924, chars_format::fixed, 976,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000014089452631685326968433243074109517968005\"\r\n        \"8969564052435377386295567255430891923404569767456183925094563844213295122043611679935471391755079980979501\"\r\n        \"8719440525549860095877107153938102269771088019922306110582111291089485525691899073270714769067531770667572\"\r\n        \"6019575953681928890031055092123983880559931602395425034948350672283245379563818248188577432178069785517522\"\r\n        \"1447135604212500292255605581080737160756336541704916605654622573208077336936537681601495287937831361476225\"\r\n        \"0320189168592153831708552861404319266303334058222258097550864258413403531304832809177251851959422421163575\"\r\n        \"9045690707125067558519111608183423177759692836152771907530648000864265464886793313280689138311529973179858\"\r\n        \"6435616016387939453125\"},\r\n    {0x1.9d0f772cf5efcp-923, chars_format::fixed, 973,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000022755564362864926940281773480518310790479\"\r\n        \"8614676370506960981914851328415362342551959688942020547681275943405052471207178431622061755181896773453067\"\r\n        \"7723524447242629222196714464872261421188963595703786682352290957981166316968715768476878377717323676558275\"\r\n        \"9131106254964171713321790287640682417421292875693304779895386407223078981110638172143427694907604433837129\"\r\n        \"0870631124853148741448273362510869730859167323400369922515612597339675515620741030786110317330091445693562\"\r\n        \"5284855820286878817858969041925138420559706752255422532368290832023599170155833556378582588541054835832258\"\r\n        \"9287812185295540933143319689919401128285303281244301083049743762773094540510748328820261887628362273972015\"\r\n        \"8278942108154296875\"},\r\n    {0x1.5ae0a07bccfb6p-922, chars_format::fixed, 973,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000038219068582864352723967747931343616562165\"\r\n        \"7209781173761641840447788828198561093401360596513533007600193800457963875686854151814858111036445511242704\"\r\n        \"7709344441376665355487764145628079260448302287193681816195721958963465354214067102619271776398409728111334\"\r\n        \"6747297605374296427402200943004967162985193289030024297703283006041946617762562693335543494641811348659320\"\r\n        \"0998002484261631559385150974748579850886791518129421085948180303284306883294509926394689017938918992450263\"\r\n        \"0828684452168306954205031632460329887918486232328363814288573154176463928935563277762910223655851384736110\"\r\n        \"7142384002380822110267075736952889482918966077710436454866899431747659736574605283173505787530643829086329\"\r\n        \"7879695892333984375\"},\r\n    {0x1.6fb881d919007p-921, chars_format::fixed, 973,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000081031176278644846070191626517872180531833\"\r\n        \"1135326132318795500180952292783697914667643762630124008413474467884537069420798897444792340459678011732950\"\r\n        \"4730189740041425982303724639847802831823323803632388446800551741044882685402671409590390401829607859501011\"\r\n        \"8323094533029921605002661903680399808172575284741822476914983302354021964279286190987699675882237711813507\"\r\n        \"5109536171233688494942452416618125742680387879907346830121637034403253494540299453377386417370013446614658\"\r\n        \"5718226406710130532428411831937706120600181335992994193865678352422302987448586734996718282943690713535168\"\r\n        \"1811535139582919792094206822722769688324053871886960073948088158553433739716296755044994126748747476085554\"\r\n        \"8083782196044921875\"},\r\n    {0x1.9fca25adf211cp-920, chars_format::fixed, 970,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000183247342542790288693877843728514480478608\"\r\n        \"2325832375061113482101690797286266586294867945954372905818531402941092342910125905372135803452206403364874\"\r\n        \"4249562007607394347490512882057084425496728977149108482082998231691030369572059138763766664598935032230521\"\r\n        \"7308929663141958352882771737400001547440233507938666437442632719015553489697543558934242681927575376884558\"\r\n        \"4435883886178808128569655382229457502908034012259240062189848521009805863770517872740795257317589786558096\"\r\n        \"1925245053824582404468293436544414244144371350546560694236426149333233363964997770950219573720159471661810\"\r\n        \"8410253542270998588555667778049553659906796661021669572029079800552423015550776354970485826356707548256963\"\r\n        \"4914398193359375\"},\r\n    {0x1.3567868a935e6p-919, chars_format::fixed, 970,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000272722205453175178688891579653376960252745\"\r\n        \"0842088929858871118159521370404337824879190994854038061643561159339103362125367673189880817810703976647945\"\r\n        \"6005594396858473757810534511171289815905416613152798741147221740178663478005676337635527073145403417312194\"\r\n        \"8123562161113050777550986478978526638351015030754501556153103570961851853514223016295930188700358435622891\"\r\n        \"2327582537870139843038204744666191730945069746273591847403191866223408504411485305382847908319671602904529\"\r\n        \"6834147370872045913912150003826370272527369018138082705703206012595329748274965798141023735242043688601936\"\r\n        \"9311322760748320147266706397833688866201892620311123569696025528473697359587650090179122841504977259319275\"\r\n        \"6175994873046875\"},\r\n    {0x1.bf28dd0f45ec0p-918, chars_format::fixed, 964,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000788291051502821790843992383709116421149836\"\r\n        \"9045702899188062518103364864188409315336136915242577447392215731577741539262476980101322752505084581018100\"\r\n        \"1225151774240969062413079581855748401286232126223535726941159956859139325024899311289235621704445799561373\"\r\n        \"4916857591820436578956704895859640879051290051584315035693850857881717419907691548467810618884097388311818\"\r\n        \"9313794396946312462030987453218823755018816819599892055694230286747924272367378510090522287033623889106823\"\r\n        \"2565002011363556756912554913016457825304880622105831205885823366792145339675906183530776971838811618905776\"\r\n        \"9600273940040399470882928524666276933882336178786390647141652089006581729645900535885516546841245144605636\"\r\n        \"5966796875\"},\r\n    {0x1.a393be0039498p-917, chars_format::fixed, 966,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000001479332526434951960922418908717277866062855\"\r\n        \"0715159699314589946835960775139104114196387124361744349388346423526249997529063816286588004877609496510635\"\r\n        \"4069497400210979615410318388465977151507798144171315330304323435988597563095458242572885229747942207781481\"\r\n        \"3539875382686759895441332139770602381357809077363620286647587905672519662153366756951425520262031148039690\"\r\n        \"8342237186203988319154990018200960799763004452095958354279543752826246109554840754022410900257769037244635\"\r\n        \"9884979680520216781761547575060963446756203043820334004229099108480214648053579449883572170130099202247949\"\r\n        \"4296931692114542127887432405933594739009899021351204586356951492886187572435401083037476155368494801223278\"\r\n        \"045654296875\"},\r\n    {0x1.3a8c0984bac67p-916, chars_format::fixed, 968,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000002218041062043022551789865707997330466613698\"\r\n        \"1289307679736753455928805959725081462934224670303724159485938268882871438022974238697141104193414482484553\"\r\n        \"0951396830281289648621278119877048709460244734297439979032457124421091010172224292015433663000608699123566\"\r\n        \"9508210185826348819618229937866676364296126489105865139605828360204845989995639472723758780395825659604068\"\r\n        \"9177850038369317144434041219912680004534927123313725716843926392914184693322765428244423296707499699242123\"\r\n        \"9352155928725744678815679120998085146002248164874856671200987562541287503365874233851326456361436674758684\"\r\n        \"5781134774124232829708849899521351684572920654027513944639970411744444322331903593492619108928920468315482\"\r\n        \"13958740234375\"},\r\n    {0x1.938106b73c776p-915, chars_format::fixed, 966,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000005690649743658697916832400938454858803658909\"\r\n        \"5543759130627636379562863411660649404239561145787562444857179638324291687916940100137337435741474876016235\"\r\n        \"0056495718058588423534096485487067553165909715657381402971404442246809475670690107408298781667462547191916\"\r\n        \"2817470744562403850861742638326686838831329543166906530868544059489814971840999590469409567034147242064431\"\r\n        \"6999405402196876112361507834250398148271011353848871090482305740770992731270378503731024908696903489732478\"\r\n        \"7955384440730093355487897020162730857189426818122829178924268502347882813178373493124918620628860025715615\"\r\n        \"2529666027885484652021194383320420661247802440895124858403164728133943685880850871239289290315355174243450\"\r\n        \"164794921875\"},\r\n    {0x1.f4a40cb3650bbp-914, chars_format::fixed, 966,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000014121156100358157296664884403439661646302276\"\r\n        \"3650784856871320010353040705077207668546950355581578583044505766940217400099355023661276743227694506565541\"\r\n        \"1498903855245839961288253008194637438398510127910850318126637809078113983498722820987671412284313866751671\"\r\n        \"6498672025438150812379965713453291240027473524507082740212010339249382671053582408053415675489886917683768\"\r\n        \"2567321817374385812537835559417946028789607212568576973910770764877147702942096611971251748274003472604976\"\r\n        \"6095385206250185385743288799780370985907194496369531038498334418749823932561430082471354799282769696040754\"\r\n        \"8732438073482001097018337599177892638186130742755069952437588982806943523648328386865813399708713404834270\"\r\n        \"477294921875\"},\r\n    {0x1.d90c9ff0ea8b9p-913, chars_format::fixed, 965,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000026685811370633676469151456124462933808944608\"\r\n        \"6679562287777776698876674681021413432252249735738226278585206628706394471551392518714620362982432694174419\"\r\n        \"5066837887234876955300930867092729468480811200274130651215744786557772150087296243176647496252440476244799\"\r\n        \"6249762902390207940964665701907211440315524100628209894341216678829969777457299984096586701156978531800501\"\r\n        \"2698958062884482095994760870515369048323272748656907984060140419242923626411226561350556759451418729720362\"\r\n        \"3647085223188576757317263211392808734393069882455181660848545444617167500172223520590496019958399406193343\"\r\n        \"1307294414013184518821775633960829937443323245504876620948805489343819559141038344485252764570759609341621\"\r\n        \"39892578125\"},\r\n    {0x1.9dda5bbec739ap-912, chars_format::fixed, 963,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000046692815012344966698882844875437366789005901\"\r\n        \"1889759344171317627022843286418622584881256584554850146178922587849067391433971807460553436148881053030070\"\r\n        \"5802861083564184201184169691435145287114258821082648574406529482949951797469318976010031015211593519685235\"\r\n        \"6143504992080056552460511205575879046219713889536617551984999570757281730469581796681608340143307523472370\"\r\n        \"9158340884914908030521084546247013987864207024521100899305768953323642622737252465685844839888300778476275\"\r\n        \"2504690325209332410674159217406970196845448542387095959055345603004485318890117726846497855781173320368657\"\r\n        \"2008119029809783592472501674085799890593727350192541377257601235072778330693898940495500937686301767826080\"\r\n        \"322265625\"},\r\n    {0x1.b3d55416fad60p-911, chars_format::fixed, 958,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000098345480986695514089618875926461208483325452\"\r\n        \"0187790203799630446960504329333498437153616827417615849080912491003925803323420285422299200257544927820640\"\r\n        \"3196974262922142565902846516873218036916144509441954617370831470053949450130019955123314130153815851209568\"\r\n        \"8296822542786671627563023447619196019952069872082177562245203012490168186679900137224439591161763561631529\"\r\n        \"3464515485572364258841282031378610280969479425754178210176017601378479729168995921054485337026942189492031\"\r\n        \"3278249974575095799520464824210431965227917885444240882396069195834232249409883053072784499831730816048858\"\r\n        \"9740516018599266395959212880525154717874306312317000128018615880641766641145906646670482587069272994995117\"\r\n        \"1875\"},\r\n    {0x1.9c252fe78c1bbp-910, chars_format::fixed, 962,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000186000577347183717148252735186349783543584306\"\r\n        \"5226252667540223733159853584429545480842165284796862395516622946505738661111515527860596046535739252667433\"\r\n        \"9619943279155954767042619458245257620539041021467753483618439745555366084496635416052029194375312273988339\"\r\n        \"5953459054698089295160136809941277375021138664370821656468798686147055957476482942394485517741175774489743\"\r\n        \"1022543324456960570281971353204529907162058888376007918463781982884240607983616391110433956964751638884396\"\r\n        \"6487172883723044175491157768319562372459142820052551651952238436737166908742319553970321228193470244524980\"\r\n        \"1875002540042561304717037307821249843975582809304959019825510367065010295870020051722804055316373705863952\"\r\n        \"63671875\"},\r\n    {0x1.37854269a312fp-909, chars_format::fixed, 961,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000281177567563084318100457074184575497197106100\"\r\n        \"0084980110558541339231221112326541290736699617979395977326231025284075045635632891833639494133197161881204\"\r\n        \"6224504398038089804797566696194054852793649425216579228222727097510217509956305478758508297871221479989962\"\r\n        \"5873322057108782555733233200558807587860440057235205744430425661156658048746929392101714509199616555779854\"\r\n        \"2355615838210352261328359536538279552301352677428931245555964648511872460375830460315773282037723059187498\"\r\n        \"4672331036141828396945225593282927606498435385624529841926408136591221683870594888395821882623786633550811\"\r\n        \"6641258134880120437857623554086012486429244012594048633043725631207559578078614137552904139738529920578002\"\r\n        \"9296875\"},\r\n    {0x1.5b68fa4ac2b42p-908, chars_format::fixed, 959,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000627142702954425046034352511101324091475346679\"\r\n        \"7573592625786027826229961270121367161220735064190560294766189444944164164163537272678618355342497912064256\"\r\n        \"5704889212978977236562387447175181719200715273710035345801602255620534196942143774417246687690254364028350\"\r\n        \"9152678828149245572170407760251902661012787036911831314203148098975334506109492493114566823642125222173406\"\r\n        \"7473178795384718700740529819486819550341451155693941748487731802872607782124208196306724517738148599429059\"\r\n        \"2771400812981009664297374096007549529645405830495946914994899100197867617957946223662087156345100226206663\"\r\n        \"9104230829079096834618705866985638583219205247604259687488006991159779704436694203195656882598996162414550\"\r\n        \"78125\"},\r\n    {0x1.1bee12d355aadp-907, chars_format::fixed, 959,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000001025097587133360141028521310018323277453847368\"\r\n        \"5218055938897189096735340237340018400725666682494033072536608452334448790215856221307378430596060981382469\"\r\n        \"4625419037109496021095951526904178029433537609825161518260979461178337955140116397414686445832946718544316\"\r\n        \"2645279912920460025736906612085102498298245991228083818940277514836313880638017043345915398115813272728370\"\r\n        \"1179492276737893371060445823347383802426142678436476115955450138058270748161861808671057012019317372254774\"\r\n        \"7612927374090450924298878319085773548224441762980740444341131886157030691777931721396978119099548556496285\"\r\n        \"1095177735122684967750904878926948300062887536858489633614618245137590016313744456510903546586632728576660\"\r\n        \"15625\"},\r\n    {0x1.5dbb3bf725a55p-906, chars_format::fixed, 958,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000002525332508033293512228949556612784654893447598\"\r\n        \"7700357144674961351479357467092094630453535541284919659245903800349407085632973490108353504676078653305638\"\r\n        \"8680476864446948292312458125217671960943795156782787115386651848999561226033209730510837407818150760317463\"\r\n        \"2534081548073471396342504983710412240194257585234633491428220431741047571003901582159610243573383026547491\"\r\n        \"1659400368786801131458888124352482480324532223906317300645196650798384111356497633385763926314710642986472\"\r\n        \"2263664851030405649181367011150329531668521843720200537028123097483060203056706819706736255855306948167124\"\r\n        \"6793360301294886083514645802904351128554253419272228806760314434771714370286943562859960366040468215942382\"\r\n        \"8125\"},\r\n    {0x1.deb564bfc9b39p-905, chars_format::fixed, 957,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000006913296125147657892922290453005227362836355244\"\r\n        \"3315557555004747661057069612999210997894255772698684551025199124351522536488288269888962458462802724946749\"\r\n        \"2666941103078711591669709456393002977814548674714031442490579187323502483842326834538282021757452558716419\"\r\n        \"4948220489599485554712874650998509771058740523491301689686432317931766517872342221321618438402281239738438\"\r\n        \"1918414301497856335169286849906525371490446315447355139287718496849222455179777434039582883600813461913264\"\r\n        \"0683002736269625867150029972744613412338525800662983389755954407496066156925443484441684969664361113623048\"\r\n        \"0746804569554606627570565749735444390099046341993234153112576404723484124748011936389957554638385772705078\"\r\n        \"125\"},\r\n    {0x1.5179ff1b0d531p-904, chars_format::fixed, 956,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000009747372287629775385909424316703891833573247564\"\r\n        \"8235279596858447770771804886894929506661512363400799235132329961109412782244052135199979147620902244163877\"\r\n        \"9626597351701245970013572675145669042456116850923505846902122101954391035044684055589640864082184396140022\"\r\n        \"0187736393637951646466301575756491015220368431665646131851050972773613550549775860949100748531330715019423\"\r\n        \"1963853639010109636728185073120919295228223264260018917015441561102712444279374287475396552967106691035119\"\r\n        \"1453495845396281368093624689695699465834057840582376163654013374792705789260527711530436179193315127652734\"\r\n        \"8358808702693259272579380945576312699683565750443374991247958918786156723434999094024533405900001525878906\"\r\n        \"25\"},\r\n    {0x1.5567a7e8b22acp-903, chars_format::fixed, 953,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000019721670909138485406708209875245988754855499584\"\r\n        \"3593801435382496634863181333354250488013601769333154658301020938111316690961968819801684276456747470648078\"\r\n        \"4460925731369740039309091313646494344106771917559643744611689449985149741847522870512655148231642390548825\"\r\n        \"4596546181359984630593149398458548638623788384301779196054568577661945071167810995560010331333745976303201\"\r\n        \"2643595551046517388510084614608233716254602267850305675356162650233030360899161133192808264578667329162878\"\r\n        \"4708737722477047743341614476681740665615870417264687557758802755495463473945116677959704440051349739279053\"\r\n        \"89687889706272452193245281982712102143805928570275023188204872089807073720635344216134399175643920898437\"\r\n        \"5\"},\r\n    {0x1.82d26b4d40ec6p-902, chars_format::fixed, 953,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000044690483726796048912736648731122955257354188196\"\r\n        \"0242319865883123307422572380214566349088266541272348399162694465100758770795918495191617148046111636565021\"\r\n        \"9844543013087712957676283665264577527662267741361571586772049777232414728237847783800185819300150695494868\"\r\n        \"2653999899843034181869139363871037782958467075585876988989744537743159905346990806740300898994948523687536\"\r\n        \"7828209803100829565629765163934287231863692549726979176395237517451055069267609733839616408831778853430757\"\r\n        \"8954035491246101013689948210955350821596365451655673397438311473563149126607326293087358055222847103895464\"\r\n        \"44222168239476217622026150424150094836999566430914876899155427272120055803839022701140493154525756835937\"\r\n        \"5\"},\r\n    {0x1.b9adb0b3a270ep-901, chars_format::fixed, 952,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000102056384451920745406860391496194921660362213036\"\r\n        \"5562288058257422369971885119195604032070972015707144596472334283003344969574819842726371410401166526430641\"\r\n        \"0929900200071491252672235000950484652288750093774229945977709420122440502247379632346325992236983886493821\"\r\n        \"1391539205077023662214501398790628925066797744001656546577727861247458245657168760908913580691963130607977\"\r\n        \"6803215097870129800335260946331259196166059113373568611705869136348407003151491682756842641906922895435050\"\r\n        \"4391013909737089907168100664000924621669067051506853028575970448374045400888697082103359003015536916044411\"\r\n        \"79068784764324781639073532912521042956144573308772953464440883496189282908517270698212087154388427734375\"},\r\n    {0x1.51754b041523bp-900, chars_format::fixed, 952,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000155949465914581444168158192054680861671598436644\"\r\n        \"2620364478829976811035089889563564047368317717978748493547107618900970773911702439074983599285664500289449\"\r\n        \"0099878123620323093655056835613818532634226074494779795904480899802150737568260925897170351407616991870097\"\r\n        \"6802279957856393292653995941968958393707777122490398288305066037545153525183704267307195036904186159899450\"\r\n        \"2394042224648739892050532127005297477317011060627275918383352054171181466701597646454049096032781767016048\"\r\n        \"2974319858048441249248666379883400328177436639034736816575953623392316883651494465986730547978520346652340\"\r\n        \"88747269980370542955955889926977401007116018807400721172485495540083189069946456584148108959197998046875\"},\r\n    {0x1.00a667d829ba4p-899, chars_format::fixed, 949,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000237211226291945636889926959610225919727009657699\"\r\n        \"6496202397961351883127358688939107282331299624534155208390877862968305992335609703366546415633283533678270\"\r\n        \"6119375033905584915207671447399368427797827278265677967865192480932785233809461823871812702241616934713059\"\r\n        \"6071680179608635040182094153029361012433988509937012245563392134807731665037384537298367234779762339214326\"\r\n        \"8249901056594934855686217622990248877923391269195571001807761624217336055192512549943990505216069472298347\"\r\n        \"0390100134337335399195570019598788119671177825761130537287707783157679110738395099384763372686340200825394\"\r\n        \"41903467893818834311806047336796227578822931941039658316800094184362279747801949270069599151611328125\"},\r\n    {0x1.2c4d42a513cc0p-898, chars_format::fixed, 944,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000555113591928415468862717082533166226808384500851\"\r\n        \"4417554841019502743301366429368819546119006284763004333001348277225050221860684150032510350617852415448793\"\r\n        \"2917435582912849238042093194887283396639502932028323910651284002746030998913494560860794895072024297806097\"\r\n        \"1029142766066034974054612763882077645998211141669478955213198112932980574245986888148912541052644921915234\"\r\n        \"5004917839581742185059741768986228887671664675393120074838168629509013042697933604905361403885064909007008\"\r\n        \"1828290680696185622583742529430720402081186991071596341524139197492696468962732382079303814473378818485302\"\r\n        \"511034413288084890890452684852818540143093357096495846052242040258306587929837405681610107421875\"},\r\n    {0x1.225c4c3c8232cp-897, chars_format::fixed, 947,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000001073473967444629802420724822979097421269020692973\"\r\n        \"8748612035688298132431930940767808978781611808395357190463149503662940609545550797429425138405559672522900\"\r\n        \"6339887006543979219474079905078476701423633851365003304096553358163726469933016105370060494017301219802989\"\r\n        \"3482448464528100444472938931188041028209567758949481905183049001531134922860872368400958134235712133547181\"\r\n        \"2569531901439452988004676219145306228626404952817818807907754264843610519108607195980800602836302109764033\"\r\n        \"4464264306889872584610305498775551918545763871034864670939169778489835723700551452954573645827010966358712\"\r\n        \"257418750698937467561024473055937316696854724845682348285079432681499156387872062623500823974609375\"},\r\n    {0x1.49f96e8fc3b39p-896, chars_format::fixed, 948,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000002439855426270266744439814801803809895247054421512\"\r\n        \"4227046286789042553768286136848758427981512172714445409930115643233877845863399498871974798169753440335024\"\r\n        \"2401988431098023618401338421499127747850118979962781370625158221841490672613693129416038541246919744044038\"\r\n        \"0909570572089389208878233063263470015565582345570048109359863968364681509387377493594037525854040800897109\"\r\n        \"1122482936133784909715421457345554809011396322005411855059916233822920918416811292732601739460526050660702\"\r\n        \"4809166145756193292992255504344399533818727388472020637202984183709925973193244385159211841241130746105986\"\r\n        \"2509222808177157336752523381613241275274954877922857555982462385291142936694086529314517974853515625\"},\r\n    {0x1.d02b819f5ea60p-895, chars_format::fixed, 942,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000006864215876463049547810788703539701409380640647873\"\r\n        \"9147400934802190758122966145509273130663656083449116193388822368564057256191430774573151546980833069733638\"\r\n        \"4232242413969293063536569077723416762396892707530258707424454546743892561221427588160133512763385429154354\"\r\n        \"9312798476681105264979340881027849188655526015371664367066319612937083186121677093486292468421698574372787\"\r\n        \"1460443148241127262602309896093569590960002026708618897030775910938683812388348909731662562903690820461225\"\r\n        \"3030886781498471111475701705130013263603331962648371224484283181824576820244771587634819709611329231223350\"\r\n        \"5987050190351763242747076189226988458164602331524196780765390002443382400088012218475341796875\"},\r\n    {0x1.9799ed1e92e60p-894, chars_format::fixed, 941,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000012055339469240307377403402594354358674407642465821\"\r\n        \"4403161853873665328348183768707944967517035919903205770271070113114076479488114135898545635834909792131037\"\r\n        \"9981065458509943305443712669457405347768334883742787788574210076011956356747276577674394094443595818534447\"\r\n        \"4992491153419986760843944863078761839695019053264472317921674817757806138643290162179595339950043670422343\"\r\n        \"4169274034194895415420453624725368318043357630277210489316956915292444618610846509129090912794604455025923\"\r\n        \"5072047006302106680667373755369200337798835481918186611848963048722354732914235674141422188511695223505091\"\r\n        \"651304612258808796215869856934551053015669443762235800432502941248458228074014186859130859375\"},\r\n    {0x1.01910e9dcf23fp-893, chars_format::fixed, 945,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000015235738192618518189936618594353198373490038933641\"\r\n        \"5111790903062676051820241330533383850487198054690809001545957303087100560223792006622980536966737234211755\"\r\n        \"4610115874265196595093653515066235057757408737321012747059302244480684314824553717385232770551514728255582\"\r\n        \"4436594037789840136673492380360921795469449312993203310861757505321077871877040854320771623366194214101040\"\r\n        \"9767355749589386637921051247047454063093657663296180147824771690982829988866222038776007404704345799976200\"\r\n        \"3493823707191982605843870742955753084896546013143923808806247650486965191635898381488272370659215232130706\"\r\n        \"3058388996553539467461706719877326145389249433603759474424588216123765960219316184520721435546875\"},\r\n    {0x1.55d13790babe3p-892, chars_format::fixed, 944,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000040438764974429647181083693278793666999589651788371\"\r\n        \"2316059693838777295245607266108475249394878935376323626898846861862368755886367916636298143998039008428394\"\r\n        \"6105355179120022459893093062023824545784393567834950735132918308903968711752955260187817332338525640497165\"\r\n        \"7502319380964581908082064284459113668849235010808935239541206093029385768713858239491000151225959463531583\"\r\n        \"5889637361803405730106505082375740159759460103926440144688165168171854738715370375794081116073467023962896\"\r\n        \"8287348096121485573700124978582031136456289932225609673950336664355143451919771945115113191166252509180553\"\r\n        \"149351063482548119983121858449386491438816394778188001261909345629419476608745753765106201171875\"},\r\n    {0x1.7188a97a16f94p-891, chars_format::fixed, 941,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000087435562511428746407917858121214372902879051776678\"\r\n        \"9817379763220476136106242826852095074666987781422882240275455082159625173427591657526511616774859950448070\"\r\n        \"5195051348020502345099156950992018891280747830850730319314819188183029263829944697648815507866941818927878\"\r\n        \"0582425665436323279405306313375550995403554057816311786992808924770387346666342826175687898745708869277309\"\r\n        \"8795098157293253829450151542285341405243742641265914881758531162780816922738713821526003173659290088391480\"\r\n        \"4697424808639350956260920901169849738081795310697365452593665854547305770395594226542202736076609270724296\"\r\n        \"938582309549515791111533078749081279345889490509807252804908017651541740633547306060791015625\"},\r\n    {0x1.3590ea1f17fdep-890, chars_format::fixed, 941,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000146493127491071126992490786122534662551391906108660\"\r\n        \"4893020723479984156700388998530701157329530892948055206250467791745632187137591881800959448706575506783553\"\r\n        \"3305293980845682189018765192358868026965459386012151443491814855009311650582277113439810642092690727961918\"\r\n        \"3829769355597934005735327479576848296626166074032572190516990701799180866601670181423706918604194268437864\"\r\n        \"7424132138357106197054181850987434271954643223838347525698626002419348990652336080238406606469810367043062\"\r\n        \"4632830507827378702090628737328382855053277277737615450423826030613135622402351902807691843748918648949908\"\r\n        \"080945278986968636934743829447731922043526141347861806163432873972851666621863842010498046875\"},\r\n    {0x1.a490bff22405bp-889, chars_format::fixed, 941,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000398040680032538019248823757194178125361186214721223\"\r\n        \"8841684360793753033502180071560424510118766755474701399549993774340528518781782521015393593943194136695829\"\r\n        \"2878516104741234323167088335311190521761676432545904666778288299887061291364677119632767625410961355927521\"\r\n        \"8876947258959706568599369475887957963067391294889917939846287343966886396643018338025708549019241895307789\"\r\n        \"6482673340235492057075596872283134858371284398948959714256144129887323486148624003771536424647219733725766\"\r\n        \"8040945002790876177020317646106961815493905556587976914374131310785391757041479031876978729052577052233157\"\r\n        \"724978255607703760411166929085715222687136653970780240940907646063351421616971492767333984375\"},\r\n    {0x1.c59bdc303397cp-888, chars_format::fixed, 938,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000858628666061551578620582213363458205748458803788786\"\r\n        \"1653476646133471193396760860140523709430528521295122472188112244145499998342419246971681850985483625015372\"\r\n        \"9001931401489917670794018753095678072632523527999732610094527055794991699011689812682020208999092432846374\"\r\n        \"9206066143375830463217600681424042168640928466759510908488147805264249237670584162817806918290258013605944\"\r\n        \"5292592764666886134366208157303804289513110088392566492734345663801695248299650254552073655270093165014095\"\r\n        \"3745238481264868345866657053099401639847225793582187014757929215746065651862973105294722461164856108604685\"\r\n        \"774535166379595213598040942354994072654807133241315619809341797008528374135494232177734375\"},\r\n    {0x1.b5cd6c8c1c28fp-887, chars_format::fixed, 939,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000001657418018730156027704299335942208423046539273378705\"\r\n        \"1007866897996899438544490745152444688834530645625295640123271066862185300846827639112830109790029239800333\"\r\n        \"6274182420225374479310694714219204498291060859779351667987674079151712854488592484033025216160648157535374\"\r\n        \"0949876187647749371234129360568830223801641060064222372386736263114524128290896008457829750171471791610570\"\r\n        \"6062353536412253151235023622382582131429436080455694095554769027101991142854931736085157727810031776394869\"\r\n        \"3937529484290614370922528247233871396511557553970893932497479312360218072120491695818497939306244437975388\"\r\n        \"8516263944185940942548772357521469280603746275395797560303634554657037369906902313232421875\"},\r\n    {0x1.dd323693a3332p-886, chars_format::fixed, 937,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000003613106834542996945113037331011560709929486413066981\"\r\n        \"3892800930118616243487082666684796081077226753480935212068872259503118509581066207485830029333326409179897\"\r\n        \"6751709329421719319329249471449113212585104216180364902090305245564247211421614493046873288168921343097379\"\r\n        \"1424810940744070365363417199107528165592848991563388371423989125478551859503141188515560705433960301135780\"\r\n        \"9855510923231449073199376203490368131774971870870529128925452259061106855564430654962589375807588265121141\"\r\n        \"1533144826878180312068875356012841418042267850727474063115262479538676565684223521209736564184271951929196\"\r\n        \"35507954677513543575460907844889158905506818431248305945047150089521892368793487548828125\"},\r\n    {0x1.86d3c9131605ep-885, chars_format::fixed, 936,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000005918324175176495510938976497671415587262060964341024\"\r\n        \"3773660851543979583503245329654584813732786527982073834052163642085272541799726161544741798141501688273444\"\r\n        \"8973389564189606166822481467349095902747600636497815870565594931401773022857017064655371943174559969975555\"\r\n        \"9963097604629279063754642229864212114707279675331717816844007259459221802237099864315723446537096700850512\"\r\n        \"4175029486015944278448019481201861981653551367410858983035952773046534667845276266870926697195576559022854\"\r\n        \"0631576870240350592327118633813432163334893809956910105818693405865461650690072606842357847977527034422011\"\r\n        \"2716254835138009906792965231941252390889503048020114928107204832485876977443695068359375\"},\r\n    {0x1.85911e81c4b3ep-884, chars_format::fixed, 935,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000011798475245572565258836463208928683635416019155375711\"\r\n        \"6368488357751653846078375633343585731394837217385287091120028390252414848147343275955457018828059343282834\"\r\n        \"0730621546381698761786831441274619355619496696270024173685557443459253842752241847183852027161270157839527\"\r\n        \"2910201485060611138969490229431541336037591665706625690345523867216992200844339835298032472528560480231572\"\r\n        \"0532675758147358190312305588395835973484510540261572242255926498453096842484137847010445108819535016652319\"\r\n        \"3344995494299949536543046660278432397946662893934648233129548468640073030619432252064931487614833495014858\"\r\n        \"781346346117845149269477579183027503827919826688563897931771862204186618328094482421875\"},\r\n    {0x1.fd3a7670dc2aep-883, chars_format::fixed, 934,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000030845119288706609241776127310550945770260699097294636\"\r\n        \"0902325553169062823977589756568024449658175724356488309154179460646805809256909673683564407525994808351915\"\r\n        \"6603246377068172169481286969315365287278018907572760857821998571184112154093996098113552610554410114972749\"\r\n        \"6544350787571443902508172513593663572408346095883337524472602522735858303857046884402733676415512137932791\"\r\n        \"9906700196084011500970718879296894750190780528244326958169030004334188899958031100736000503800060878357350\"\r\n        \"7149148045707056223577605654336669406379845891253511117578209700869532329366449360905532226889918970109979\"\r\n        \"92044067666407349229132534396534265265865464543393326124487430206499993801116943359375\"},\r\n    {0x1.55795032e6bd0p-882, chars_format::fixed, 930,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000041367697432326765352340817035182743358257354812683967\"\r\n        \"5514706183070775290299430288530880767625546394325091548046642335686562972830560848535832043202751676119898\"\r\n        \"4787279267283006731787236388821611791941976179801966223908838232485454712767866954880107986586331614093671\"\r\n        \"0381685947902023492945274763039123761201070325649322867198926794092379193979001160520283118740890457050606\"\r\n        \"5615283688529715886701601418737963348910052650002158795052277642750755249858943871277223658376131404786971\"\r\n        \"0974725490393066509945142112627335689540105433975437451964937117339719316717342057260783566644006824506803\"\r\n        \"9288577540523073152465291162006574964969847496565336086860042996704578399658203125\"},\r\n    {0x1.d4b623359ac05p-881, chars_format::fixed, 933,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000113563675624986191453102443856984735254272835648039024\"\r\n        \"7148093097331978873723151459297710811496506381505534558309773790241440886806822023647805957728246263626555\"\r\n        \"0762639865697663081700386660252071860545523437851473530877887418045599317762550258475151832404780769663129\"\r\n        \"0499577845888123194920903598141112160404527827884306169772685471839601638500173215919930934478212486692401\"\r\n        \"1933370531388442338358094661908139596342648995217761099977664396650272093960020341884435861220916521937924\"\r\n        \"7000575593977410565239358757046872960846732199088342182083021803693622257171081219637059364936918824579947\"\r\n        \"2649248541360921046913448446758900887079029619342041002028054208494722843170166015625\"},\r\n    {0x1.3fc14119b6b30p-880, chars_format::fixed, 928,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000154946245842527239759062495833753523032566543431810751\"\r\n        \"7130127590869403722238026359250431068983678010402175817581233673382519031060069659513380216030715235291169\"\r\n        \"4652169190757365849842534939286929512771800043392988501637567155216372107136851294950867489850497997102997\"\r\n        \"3977585420440071472851517003121055829161592054739521109927826093026025885683246499701674274453089753056309\"\r\n        \"7291977203548901120184100112729702315119501770992283784215283680031165586637831064539612758832139342286457\"\r\n        \"9273358450301548738879972068346188727141606086652040192570849472622893156172198796091642797668561579545981\"\r\n        \"04804131015062387788537884648628367603544198072285098533029668033123016357421875\"},\r\n    {0x1.387efea29f7d7p-879, chars_format::fixed, 931,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000302857553709510386816086836969056210337722783307285535\"\r\n        \"5220692967731775893727875231391193715089712768013783170035525245663579807030327581339575641841515558865022\"\r\n        \"3875058005326741563542885257754812854331178322417249486816148685850962107177043895514770489994015629591598\"\r\n        \"0115867375133595828507638520983393372274509660267810031430617209341027949678360520548931055162245588815504\"\r\n        \"1168642269270378241902705974557075324087799607548440887496138095190515484126289206547636858207838426948184\"\r\n        \"7128789237077851670168107860012530261251377841489594288815216057423550542572170135730446067870746425778304\"\r\n        \"11006902168840320052258179872988498243578485424887247745573404245078563690185546875\"},\r\n    {0x1.e65f23fe2db0dp-878, chars_format::fixed, 930,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000942740333348115037485284047572893847268067700326743274\"\r\n        \"0281813334184073733241175012142621582185336547439135572303877902850839331914579032892703455962702636721963\"\r\n        \"5439418242731552600088064997714165610578732713529973991554800638812125247404950314573296644157844600155364\"\r\n        \"1354214491814492098227905347273644812896843414825439878882772310022109935207503865014021224756207477741113\"\r\n        \"4643948266030983658278327971341011673659661946388286738125049216155470349506228879832318739988654166524681\"\r\n        \"4447842162631883718367857800178745276287675211435150083921296137407835066159264367886538838166434182939838\"\r\n        \"2732535579059561940117511215852170831865260158810571056164917536079883575439453125\"},\r\n    {0x1.be0d3381db145p-877, chars_format::fixed, 929,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000001729174836691516980553517336131169033606086325093753675\"\r\n        \"4419109791788940622928061477911081864929176484648733039274002682060801271760199087832663704763871824868199\"\r\n        \"3991531006456103430748094806588017738041317168594778702187869249690426620042779563163881086035431687965786\"\r\n        \"6121076029993751741729645917063224939510035511898570999935992830067440500228934203315616921364477636261479\"\r\n        \"4679384856915080325537702909530580016470514923381118473118916750055309888956981579069546748968265626703041\"\r\n        \"6780025246929633596118386225452442180730702839693663881866994486265134523313887979133379249848275332413804\"\r\n        \"760161035687737748418881478304219407823340282082114072181866504251956939697265625\"},\r\n    {0x1.15b4bb463138fp-876, chars_format::fixed, 928,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000002153124133599410258154542154390571855326120563459622520\"\r\n        \"5065032112054906757350946064401973884364945201367158919349888958734251838952734069161919669821826840595044\"\r\n        \"4924912994180329555785724990446715258463485821370710029791472089009777916920588380945749794008116972667632\"\r\n        \"9974463181247441649888441390421006496972025799387444986939962249165560524017456595384490558469327633544094\"\r\n        \"5576505682668112743945032654000227377822639620983203242462816986727896006612405764230193507933353399837465\"\r\n        \"6641508551131984260262634639285697704413869791566604705834455516861576829347186001887771992780142196257079\"\r\n        \"36771490825261708861973418770466995124900078106833234414807520806789398193359375\"},\r\n    {0x1.c9829623e255dp-875, chars_format::fixed, 927,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000007094381157920945667439354681068103447509227212713734976\"\r\n        \"9143575260247208850042176344557556673219122391550803213462791453166083465372413326621666485198457943128035\"\r\n        \"4615254876343265450440084636894948463058853750279245418059419061499942901115676887752226814880255198322013\"\r\n        \"9436429766464461164984165663141029854488048705467562348360481087238365183897951270158302565235088387227882\"\r\n        \"8061474056265146942266842117494952581371563236372454474548015943400930092469885047371085489250666827759464\"\r\n        \"5356984354898943282803740889954727605047952229451319953662380073339087885534411135955772403038293485700573\"\r\n        \"4748620310003839032941834111259667519124028078891797122196294367313385009765625\"},\r\n    {0x1.4e746257d7670p-874, chars_format::fixed, 922,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000010372442383613189969714086258459722252660210904892135354\"\r\n        \"6664564824864365134133293000960441974952192749638978020863794678225957572854635073507252775535164961781534\"\r\n        \"9103444803582326488982705952086013492929462684412975659811329213404719323722531070098963653390797863993492\"\r\n        \"2375987608423830121986992743240549961595473294598640580924969673405756953920124756145504369343197985189208\"\r\n        \"0485777689297288928968886924569014126842036461159664146976253775304747117052161568491733834101439034106718\"\r\n        \"6712491252995801723554370577629804724486087744533699693661677914745564631876392042680021779683932888965662\"\r\n        \"89594361861665631675773451618959540565523269606273970566689968109130859375\"},\r\n    {0x1.0cf4bc9e57f3bp-873, chars_format::fixed, 925,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000016682266784627316054126786634947099848892653011771160846\"\r\n        \"9902247927774169651256336593638231661507087835116568115883612889554220377387265788086029467082903772667492\"\r\n        \"2831297532849528031546928641619694366416535824542202025731166907532844165700456927285153916176469595705886\"\r\n        \"7443145248950221393523045593432559418578880688659990319914265277282424260166051913216749835283576431746611\"\r\n        \"5385064714278273070236040126348067956104322034201963154877669659580960959116015504309990919735860857543724\"\r\n        \"9512248944124858612533720835526187821454158398162016695152261152695946643426485073285270438041876766580343\"\r\n        \"02406565002561725539804953326260251143808854834560406743548810482025146484375\"},\r\n    {0x1.bca9d75009185p-872, chars_format::fixed, 924,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000055161395008185867433415357299266473202855702442652255015\"\r\n        \"4174733465165230596318238791373343416884120642522016359703316218905950439100436732933226969082782786169311\"\r\n        \"5454302291940749074772755050717921148324807872707178915637107070607758223870410283818480871009382801702917\"\r\n        \"2180183032905303915282051609374836137447220943757556647797218095071645532979709602538130511390566521835079\"\r\n        \"6699468382475616011900085039348409957586580232901106296333354593470671297966973754686923720279528690270848\"\r\n        \"8048349448687817723031899550692941655042719473473767583033498736701881264169093594528605625061561557706388\"\r\n        \"5750483471854174717985639223420961559096742377050759387202560901641845703125\"},\r\n    {0x1.cdbe1ccc95d90p-871, chars_format::fixed, 919,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000114560204642325076750571222775436851192164605571682527481\"\r\n        \"5762124952088415596615808373168469160246822484321000751593912242355663941083913700201743951110967290075316\"\r\n        \"3182380892806524301413018460615449738652419601721811101437128085997757100216577623134851669113404571254050\"\r\n        \"6816944359776967289951251306531503289183469926273219080353866450389866014390516672435679791396724309215999\"\r\n        \"6770248028065053108625679906847658543128458538824047203145322198383475617623515440685661963579197311084394\"\r\n        \"9895152983258532048318532787996836228886776963364238874442152079723018206593200540364309223636337944497709\"\r\n        \"68981950183436840696718769035296336955553897496429271996021270751953125\"},\r\n    {0x1.a08e347eebee8p-870, chars_format::fixed, 919,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000206698187369856312292114336091733007715218382597874181651\"\r\n        \"2849212959334684319910588999155563054688552042487345002100121410104592008447301112604018951149526548034818\"\r\n        \"8893504692719952301531071219054886735101514312883173414979910358326786593142237008198154964115878154288660\"\r\n        \"4501583126242304688874484366513075164220664047059619137858056693870956007134838247289096005270760100292852\"\r\n        \"8908244858324430310039391980073912226287873779846512676915660226793076428687633580029559705975990491787084\"\r\n        \"7592802805226940431900752153915100946582833577516755521942664950845586036534018644192041578892577649154335\"\r\n        \"24177885184490559892343474975885675437581312507973052561283111572265625\"},\r\n    {0x1.12459afe073cdp-869, chars_format::fixed, 921,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000272191846524068059931132000697245710331163957942600225109\"\r\n        \"6560090007625639505670844147437379205645010682127734111790249585302708172431629584243318004556707822556023\"\r\n        \"2756992231595695913707832396127112414291967814083664279483782121130660257086947726689908320576416698270875\"\r\n        \"7414974681240812796649904138114661552244197783111750382074950405613552083946446489700175613754938664542100\"\r\n        \"3994961660982636991816058707634629532208736580752557522215085254672270475091825412352898008934744774445658\"\r\n        \"1029948456900349544307061602508792286538650452312185863032524915967344999462622725999810009215933241901668\"\r\n        \"4057896016276584607758107174483620804839034690303378738462924957275390625\"},\r\n    {0x1.0001756acaa34p-868, chars_format::fixed, 918,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000508128354267473450755536119234776173989878203696489395513\"\r\n        \"0680321274137157152649946485593063004909706459221011223798923824797171065383696947332357164386562648631284\"\r\n        \"9073191520565355409187006336251727528271700865445935359221676212289295361664298049416211342128813651851814\"\r\n        \"3256458335982392924007542973144202819143718331034743222068350975022076680647910977770307472932084310087384\"\r\n        \"2723453005642196320580008440470383450260257320640044222252784994928836137114749728430244847021545183325639\"\r\n        \"6123011598918717948962340265499338059700908690029345363869653635550764442527477510671124376200449421607418\"\r\n        \"5189128697597492862393601530286713074957560820621438324451446533203125\"},\r\n    {0x1.a923f6cf5a94cp-867, chars_format::fixed, 917,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000001687665053057820762157022995279778564468211084460073038282\"\r\n        \"8697983205295811627431458729119705328829243777096719665579994254117849067464302618370312175425353893782406\"\r\n        \"2441208188206739880347984078224093935173556451996842851241854518414812710604641456646783939042209035234300\"\r\n        \"7549697592858950809976923310636041815949880034513624879487987710466483762543019539356484131174578611392193\"\r\n        \"2455203585099235154424807349383493024231486017916745364147754223484345302292969504582896292277375000907594\"\r\n        \"6875267007574023695528840568813676232828754491306864681380564224560626125773652293287294741275525783255807\"\r\n        \"419237011346512428936532889366117782259379964671097695827484130859375\"},\r\n    {0x1.1ec90c20f8a14p-866, chars_format::fixed, 916,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000002276883127404377217638244570721494113705000481985729668493\"\r\n        \"1317704292669869186330235385392974936135583425559939139633685462503798116631815904395994711723284574730699\"\r\n        \"6155023939888756843144321245127560309680255408819823953629550337527044667694952163634448328029714220479710\"\r\n        \"5650413943143524391493206834878212096730282097671600157051213678678300464186484597886719361440158070086833\"\r\n        \"4274804209917513296587055016135300878023975459549254745964452344219743352297906726945322169747046918521525\"\r\n        \"4072576985178910173696058780136578510752082477360151040647381828489881163991894382690040854040207373360437\"\r\n        \"75752403727901886111359007654197927905670439940877258777618408203125\"},\r\n    {0x1.8c40010a69bddp-865, chars_format::fixed, 917,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000006291918347254160060272175492842618664079171391920773579142\"\r\n        \"9339647422629100785659522780692862200166897491701255556801910407106573720448533498719438330123476869662624\"\r\n        \"0704934209115582338286117696015309238068919260879285835030642031622990931503918389292642312749696540879180\"\r\n        \"3311714197177193889783060818926773096147698988342115117077934532689695873460272125731176376173747456244746\"\r\n        \"0745166179129141239961621209497591323866150735669664874909372816156647940669783864971383067108306325702411\"\r\n        \"6592611233964687353694158987479949427380270159845583896812091323905699762435381781071574840894205533141176\"\r\n        \"329856093298409978372063276232106776575392359518446028232574462890625\"},\r\n    {0x1.1efdbfdcbcd2ap-864, chars_format::fixed, 915,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000009114070309202436715506704439522116445273667583315101326321\"\r\n        \"1220841163780409432338993660009501481842296218708349541201452089361954411446146803975046420958720254804201\"\r\n        \"6950090674691007785016340938454849306345780627414920934063304738214052872562345240855955895843954816456096\"\r\n        \"6946219116473549606304395767765048257811327042187942500615765107049583838484502359610687054584021634782046\"\r\n        \"2109279705594517393524899645116315147968384649516659855648207409482502910088356334794730960275068225436448\"\r\n        \"2901382848664076403072603858551382288376096255467392095909044460388941503222527272887728801713303434009821\"\r\n        \"1825380764598208977109714858111377822069698595441877841949462890625\"},\r\n    {0x1.906ddfd189240p-863, chars_format::fixed, 909,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000025433112499173347793194125621710163645079369331423202898876\"\r\n        \"2740870132656644179963370891130188870966286895286909980735596949777809152245542352924571623599896408538766\"\r\n        \"9306942286026266510837759661678996824110949218664528453283677257072323229605736418093485916168131207495359\"\r\n        \"2695943801167827535017533352905257163768206378131651313649600349107789087387461150989691005378537949674398\"\r\n        \"9865981922331313110583463218632304343712779751159601698778173244506374886663889558909304985006734120160002\"\r\n        \"1436504006480952802391648772773853880784246678088998821393839777960585285786855049346501567034793016761392\"\r\n        \"9746789657136764079177482233973250913550145924091339111328125\"},\r\n    {0x1.7ce18a4c43eb1p-862, chars_format::fixed, 914,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000048383034142174994104272069838127782959216294890444624860488\"\r\n        \"1177404794594426120880857998471497917185926395692514342169545748844407930478209370082097698966466303161266\"\r\n        \"6935882969164776948437199222172578500786635886274299181215882835731412951066974921021211756829121808175859\"\r\n        \"8187914493364934874344008425996265567120018761509667718055608502897452028494895946834053067261106309416912\"\r\n        \"4950837753490510108692200824269667675272188181979310566617032157898763990519492387274070392056149682430213\"\r\n        \"6526869731362794131748160378334399587897499073925267530473811700835332428644282412990851223505003816036845\"\r\n        \"036704538201885036357457504918588853115579695440828800201416015625\"},\r\n    {0x1.782df6ed4d7c1p-861, chars_format::fixed, 913,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000095571620410084553612231327876427113790261344273014651312134\"\r\n        \"6531376923699321195592174941483374402823022241130263997567506024287148387776798461354301437476844010018790\"\r\n        \"7766581818620751474689521354792419668637234994562671930616485340107247684107637321972451853389214118467182\"\r\n        \"1123889970763705393577880634528933761517297484082915270789468943416839744708329469795749877089097746641157\"\r\n        \"5537371988696981399871854364602534911494453108101743200834799840591710632180550687823669819744527982460287\"\r\n        \"7755033025381947128790421438018640252322295334730678286714386718609825203493845270564103948780979172013971\"\r\n        \"38322894657648983246446723616163154702007886953651905059814453125\"},\r\n    {0x1.c8f1f802391b1p-860, chars_format::fixed, 912,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000232181639911903853645089842504477068482867207024333342829157\"\r\n        \"7919705134892889011156980930242366813130676885496716060042971897736006971123622013129470717465474989351231\"\r\n        \"2968631191631271821301947346158547023662534217907009485542762701806105687506696983460743967825988419691645\"\r\n        \"2391084552940222814224933545941684631041163455433387288322957692396586578847437356129153323542921648490609\"\r\n        \"4517687214723033131816735076669297720633441014191257900017539357278220796859945952519805757175348077621113\"\r\n        \"6458583264149293438298614129607825601449069190688909302232480320013781782200263494821089951192419964494001\"\r\n        \"2660900365078741120123707875055885097026475705206394195556640625\"},\r\n    {0x1.b4262171cb3b7p-859, chars_format::fixed, 911,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000443229429011963768633603196809336946543089979211649221027454\"\r\n        \"8405275696535832050413393762041703842835100613439369769339676083420741214153242100785872435174265771853500\"\r\n        \"9392431015626411922583861369639865949698991042083535182323159478904786522820949927015786513521782914861765\"\r\n        \"7450841270312046380823739644494904776851297637312513275110102336104808293107056795656130590649733974376541\"\r\n        \"9970162656685419340316738036723361873504929779450561348524467585813726066495148491623149065684298295442331\"\r\n        \"6406399105498871522953443938568758577931893225742867272462858385948084245565633604500203685160547735325636\"\r\n        \"080376242437876526249034003779314616622286848723888397216796875\"},\r\n    {0x1.64a437deb4440p-858, chars_format::fixed, 904,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000724862454566518620234725743708768192604113707182498198187433\"\r\n        \"3594377620530764610176592097380225029628645932726108934612739313174583226276319058355309446786731754362240\"\r\n        \"3496838166730353957241402517547465384606062637177347754685284719257619888362283409076933859476395240285644\"\r\n        \"6379192946724641476839922625769792445123702164439694807298008019021013530011385609259488019249176723990804\"\r\n        \"8905028678287251757469304085099656023708399752447431206991973014885061270696168035586546178057383592410412\"\r\n        \"4680138405043785030336699070613668598522547056960518100534311513009802409862859368668829561043226971944392\"\r\n        \"26699982917385446656854952607318409718573093414306640625\"},\r\n    {0x1.68d1c7ddfd3c9p-857, chars_format::fixed, 909,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000001466708125736090512221954506706754473316374680549096643048844\"\r\n        \"9206414100150968687775032402756052292826192310903305035134133781411481712341507954193064787326215057170476\"\r\n        \"7679131224864582828071686888611188799409109024501138539451155008359084440376917174041581383111876783748850\"\r\n        \"0000872271900044128369701757149831659567051913456988928102132132714135417775009699086311215171571037956724\"\r\n        \"7962185037697773480199531512073678158854750890584017056925661719743417354466583312700152556120020313103113\"\r\n        \"5463571741228836842304648117709300656826393728666743359277626137797043271568736571964759141129463848244377\"\r\n        \"4640687500004641624813672695637478682328946888446807861328125\"},\r\n    {0x1.d75f7e137fe61p-856, chars_format::fixed, 908,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000003832202635359104194554961953235011507054258223190057221963033\"\r\n        \"5353346952308164980213456390925558452250257609523249459132862945644945228012525507914866849886180070675458\"\r\n        \"5208817826976126668888145120396190261611609172762119123793145872789603778805203802587968961121447916143996\"\r\n        \"1002799972418744907169391423514023327463523140914150416518473055253385027500232035783985300855435692354488\"\r\n        \"7943781694190440637960551088058658109244864183491834764218822863830891904140211787521427609138820308878984\"\r\n        \"4277557265644615942295037352991745550805324976793851744763356416802504802538322517452316317317151165581065\"\r\n        \"828711542919039951572701685478250510641373693943023681640625\"},\r\n    {0x1.ab03ba2215decp-855, chars_format::fixed, 905,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000006943148025853397197077622647678007083343944753441934095558987\"\r\n        \"7460326824250672274858385074795336068109179111518174172764432638216994241523277261186746220234484198234243\"\r\n        \"6831859881780104169648940151652988950108209827537054607555340313253858616237354565394861058283130194072330\"\r\n        \"0705685976603592449533077414627581849293233497787771627293472929449345822969315648485548907151911780992120\"\r\n        \"8470019603290425328615499359681908998029766237263426183580374474662876558240267887653911901083546355304644\"\r\n        \"3911243526573460491703172114040390276817289845890578743620306966872375092911586288802873761067392220076866\"\r\n        \"999516537127721226008159050024914904497563838958740234375\"},\r\n    {0x1.1a8446c1becebp-854, chars_format::fixed, 906,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000009187299399025639839353141660045728045005906832079651463105609\"\r\n        \"0469764224373506303894785318601668954036095739737917845209608647602558431586717467239245039611550399241162\"\r\n        \"3576333908756070286366449656119838691258523423430330414144163620953827604443743428744603063245041502634327\"\r\n        \"4481569236323844213095362475894936453835494631591638117650406100306878685312472074114350800075997576491205\"\r\n        \"8080348409246107484554164396410838347897285039581676105234110261940749964363668337453955227885141656326569\"\r\n        \"2570816851024552511717992981218509470445404085105859243412968072025617790595413875401003822322765471302218\"\r\n        \"3966981646315616387432623213271654094569385051727294921875\"},\r\n    {0x1.d6414a4bf4907p-853, chars_format::fixed, 905,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000030584908958671776337833997728212552743197169604966979110845813\"\r\n        \"0402764519100128543072177565353659388779586721422062480805494048637982077473308559243951566395413290867225\"\r\n        \"5471570809915647515699422981901707597238756567053418426117941253353267909236696526460445120208280487438673\"\r\n        \"4624903615119560690379371506706635465707437346296769657742269429934163903699889943903922695607261208044403\"\r\n        \"5045033212003702250424000664409060170693287784261706490929305618215679483092331173245544667709092235091659\"\r\n        \"0045877443524782470582045759082447664181476862773133919940629127853848611379955271758919464669049389518829\"\r\n        \"342226751666594490586259524889101157896220684051513671875\"},\r\n    {0x1.0035d29019008p-852, chars_format::fixed, 901,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000033327306790247037336907675034392568454272595369411738900867617\"\r\n        \"4880079134735517335342013230631997238070193934483504697879606878598819097351469420895437630770473232697024\"\r\n        \"3223355253188882278405525096756005242556469028619739611765019036536534035050301257528705215736828310189129\"\r\n        \"1095134178466707426578612230796829810863957988927567766792373175362266064722463852642260216366005158732934\"\r\n        \"5627129548295038999732084305256140469500499943939385349824496739105901495187144509403790073622444198594469\"\r\n        \"7990572015406237569261690504356844448725607824856932216929044311840257291219286900776173012629452228655688\"\r\n        \"47219920199827225548716569392126984894275665283203125\"},\r\n    {0x1.20220d0117b02p-851, chars_format::fixed, 902,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000074959510555108538799335754813356701754792355065646873389377940\"\r\n        \"1769112399719866594903832403760079779042083118660847570367526920460011559675059654679049732952640292043242\"\r\n        \"9984609818930077480670316564262828094663598944693614670185383532442466218699267405223828138978645448763130\"\r\n        \"0095892741084197499086704407259670374813002062851633748523492548210781300670887434058964089123011544222688\"\r\n        \"4232370871021353363060667674967440542821407338711019067174933523839551077258961555519024174473109573715905\"\r\n        \"8912303663040423665505482395509092064060252160684959021066679582680454839013311819960942494580582546135693\"\r\n        \"497151510794086759492671490079374052584171295166015625\"},\r\n    {0x1.3b95c8f65ccb4p-850, chars_format::fixed, 900,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000164202667269448256304548080880543307906880391844297662484492447\"\r\n        \"4480251023441651216759373536510779461101387097822996439468312579313736912924505271471334743943687783285894\"\r\n        \"6432038927944415292959612977509107916975101445198422476042659471640984443533378762951944072509128558502673\"\r\n        \"5116818713884927428724040855519698349334284899334673425879735987102207151385983153910264694564775012186149\"\r\n        \"1898836431598708185841590353804696289196689248002933137399349822865047328348427089299098885077622250958963\"\r\n        \"6859120458893919968343051401887937419932084223079136151305736538298559071780881630642546065888267075810971\"\r\n        \"8395204479519933205011739119072444736957550048828125\"},\r\n    {0x1.79a370e99377ap-849, chars_format::fixed, 900,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000392979515426787845600850473302891817153672436249994404115356263\"\r\n        \"3585534912427028975058137822897912262984183657160412761749470512260593211414155724417537757763613607501931\"\r\n        \"0696503361516265810152174500510905303383517595849911037900072190993370198713478468633737474167721686789141\"\r\n        \"6881771826559067263512273201911508884068552843084392555304259015926831306644784841696265745674241479488370\"\r\n        \"3454284745859365496546440420879817851523567449094063593575883610144277670625619799170002059668286123375913\"\r\n        \"2217353134244980806810263516806334364273618992793185390706920126864155884828580549533789735266770585057487\"\r\n        \"8205714560337746821261362129007466137409210205078125\"},\r\n    {0x1.9c56d66092450p-848, chars_format::fixed, 896,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000858179912462254527410920420918682439504774364380619835887143794\"\r\n        \"0846768983603461477579537133361928488981466248817297542853053040287162959373058321187685047415890640017752\"\r\n        \"4087721175565020604580279309823174920055603319599335823361360590330093225390855217522577816723076842883304\"\r\n        \"2031463074232649497043267774177756998116200394900955210584580259543848489548147764788980523752020408735226\"\r\n        \"3260159463187607331748523728837618007403262411653389035074149781685161401176489280819623071406746696594722\"\r\n        \"6909941847494891129332497433398042956604786381467332571195428733847935092625307951380612214241116466115044\"\r\n        \"845931920935999670518867787905037403106689453125\"},\r\n    {0x1.421d62e8a645dp-847, chars_format::fixed, 899,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000001340801150631603844087613354619321255286365581996464311523264841\"\r\n        \"4608851460824412779274915182857333649885355057613535589004444814459107485028897497795071367868656328786520\"\r\n        \"1430204637815836053277231611431919085691074217650426328138370468837893484263535010782662649184179675083299\"\r\n        \"6448091584065997738570818997931555021995406746701544797903023003241856093261895712165245396792161290247215\"\r\n        \"2407298980304430344846944714451589948955752543741374305143435234244962714228070337425103386522711053691324\"\r\n        \"7629525335673340273427147625680436359716961143881171352463680319714642496079596901877242307398000614565457\"\r\n        \"741579634388939812339458512724377214908599853515625\"},\r\n    {0x1.715254a64adb9p-846, chars_format::fixed, 898,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000003074598537137765830902878446380149229096451133149635983356099389\"\r\n        \"5247133471183641249699681449552243237472526943183175593100589037207439488188256624549597810763535809834706\"\r\n        \"0477106877104572904855819242902252133462944526794745733783938509454990154744011344594235513593896437941246\"\r\n        \"6831551967266918677931538876399443000538108654970475785267065776206250602279624608904629574365051780485834\"\r\n        \"9388973761791892305019059446288013874091013238298511526040244838541574337722601610235500443826320534848230\"\r\n        \"4617941213627282753219081015230403317774960757323582469327131150941470106640207471971875407957254935630676\"\r\n        \"84264279201544756148223314085043966770172119140625\"},\r\n    {0x1.f2cbd7490fd30p-845, chars_format::fixed, 893,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000008304947313449563756278337233530804082694798894791122748930560921\"\r\n        \"7047398914763715260955078525106138710236649863613071683150200481577000742878690170022000140942294975068168\"\r\n        \"6209887083042942769382184521970832898856698156442942703090795995625039035457501781039699343570115468839922\"\r\n        \"2312002352067564686299288641194649680412519205583181163489027403101087284738784201514569777386084959733998\"\r\n        \"2312872612038388001018205969465761016324883622189071362242178588791610258925279276057872913529097906000892\"\r\n        \"2160938551159483058864969866471513981057877132554160010493232911031509454101705527925632329519805437285589\"\r\n        \"837757837639031777143827639520168304443359375\"},\r\n    {0x1.b2aae429d3338p-844, chars_format::fixed, 893,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000014474411243713316867208977352315208912748300186833139035453984167\"\r\n        \"5354753639148030452143451158399149830703468107963464265324484638353285518964551567088265107554403873137980\"\r\n        \"9018957933593401684017433331167762285343818411044885533746274434524620506219125995305723357527314776166432\"\r\n        \"0746690807416272077306969309532034772600245308586568934283524523440596892702417372491246648480892544416253\"\r\n        \"1720822045192149514230329917332339732221913704414744084396980182542537483986194053369028249533947601013624\"\r\n        \"0270103993777786054968382584849587240801028509885320895297831483040255143194596899156238644941664600889849\"\r\n        \"492774963390928633089060895144939422607421875\"},\r\n    {0x1.2617611e9b255p-843, chars_format::fixed, 895,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000019586457971591684628123217698773108935833562264144584623143719864\"\r\n        \"2769046938714077954561728750159436703931768778961167502825335230168197000394874158844610101174297566165868\"\r\n        \"5779536007315301243905593298413366686476462468308974382408845446004492911085860270135950244988831730889623\"\r\n        \"7513671350078634608114555514008370500287464166926141825676068445301167385514883698177546176927308109450223\"\r\n        \"2268677049521764173824448926122463433864969518502089292929143453729778070058866366076873565593983608492151\"\r\n        \"3778108439665755482693218533626126944347359338761906490029759018080945247530366860736467759639429490063485\"\r\n        \"07646514678359750405434169806540012359619140625\"},\r\n    {0x1.5fdb1f3504dedp-842, chars_format::fixed, 894,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000046867153674920416790873337244849971076484220776787110409945879501\"\r\n        \"5130431473931089518435134487283977625540227879888252572412233135500143521775531145980390850992942943675033\"\r\n        \"0223072806424932106119128766805970197325482421531656498659115150512846925176018749355178878646041710082824\"\r\n        \"0333323518242686928518304010351051540577111375092493159921425872818144761750136660331176266578771858537248\"\r\n        \"8276856930054676752303283379947593630831921961798272782320798169726042997383300927368593567279231201682441\"\r\n        \"7359990548829577090601763240558016590881726724432954799549383358558234672790149531275862362895256284006733\"\r\n        \"5857459351888820719977957196533679962158203125\"},\r\n    {0x1.f6c7a277dca7dp-841, chars_format::fixed, 893,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000133940378498813347652150599928846785820592523114567781139740986215\"\r\n        \"1397128824178273542061091712001697600489741012371831182295184552571827172752298276597827206935919744912385\"\r\n        \"7583898395269720191122583914240751810857183878753080263591554001071057411515392078078462714706857877971986\"\r\n        \"6139385729890801625236632339325143395897374604260863281941401282578084928262022203538186684082822846306721\"\r\n        \"4889679313826047600506279372884213489373140373034023253715300471680741138472033401549031643231565079911419\"\r\n        \"3247017713967342207709686373728474172788638089726541841654004537469523907692015816885749998277404037048816\"\r\n        \"097012216008721452453755773603916168212890625\"},\r\n    {0x1.bb9f1504a1a57p-840, chars_format::fixed, 892,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000236361196159319544602501678692389110111543264914794309098727077939\"\r\n        \"0484348136119955071672482176734551019886979338416843661814920768214468158394547246496896565295091270383161\"\r\n        \"1241447972686233146646193882409497679773791432209923332782231322608377162394944996207001310887942606697919\"\r\n        \"2546917085486793311364012688955744886482994983254348780963559905559411146744414418649144791101968594700661\"\r\n        \"9810233218963054329841873754169720351780057245913342890720914510934494465099588466301358667734487117385222\"\r\n        \"5823584447734369039655342049761605886022323077355992846419665985266463514158730746950357019311821978927275\"\r\n        \"67777038100160780231817625463008880615234375\"},\r\n    {0x1.140d6862ed66dp-839, chars_format::fixed, 891,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000294161044569559372215437763981567066858876612230331361499781441954\"\r\n        \"1448706988004808096826758429733606650625431153569494377252120909156008352007049354054676255691194440055586\"\r\n        \"4905785390695936132032732128579822589302352293171772898936078165702938326413141740274218881721642376190515\"\r\n        \"7676508150779736168275532777088051304040575758263582040463035592256867291609018569867190480778672969318048\"\r\n        \"4357443084910488894820841696016046353183524828315637170466422689323272068186618987108680163778027664811007\"\r\n        \"5313043248619216129989534126344633430143999664717144163669627884616897724847223975434155021793107861063194\"\r\n        \"2006625738628144972608424723148345947265625\"},\r\n    {0x1.1556a20068f47p-838, chars_format::fixed, 890,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000591062884354364418329253214374392730665024773120333112469682377252\"\r\n        \"7675163921479725896891521721045849840651915999551426802023426459381988765566611779796927133403617908751963\"\r\n        \"5163782841485181509258153089152256288925517855260419870191548649163019649659947843445217810150977008851978\"\r\n        \"7122819974311777224765773396437333629890333430241333239580022897061562662217223894230414898302276757435276\"\r\n        \"0471327229523240260429752604361048901195445218743348681868283996003972638298232644555585672903656506864598\"\r\n        \"1095535456295152200842278224707830617908242742977983822300734498570619115622471228714886455545532536860558\"\r\n        \"157909562027043648413382470607757568359375\"},\r\n    {0x1.8a637844424c9p-837, chars_format::fixed, 889,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000001681039684855827351023579963752504954529483024994822221441109083553\"\r\n        \"1380563125319563203943253866909216175104325704880448761140455703556626180185908048579022126094709857134231\"\r\n        \"3927613866021217690405138818610985006226605666564755073601170473544615333948754380343036784129510016757948\"\r\n        \"6103332587829562856169336508741156116699382157380027839469033864069983412553061048671602233218745036077020\"\r\n        \"6194564289972002012617700416236636708103854388850007470083332807751966286065831315220704183198185446579202\"\r\n        \"3538138098947494890681839362176868398994948552210918367322601204801678783889603281758643981656058000937999\"\r\n        \"44427974679683757130987942218780517578125\"},\r\n    {0x1.6c58b883c43eap-836, chars_format::fixed, 887,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000003105977744955942926590067639918336253745327007984066848244101448876\"\r\n        \"5656125936602920378930602673659646522508075048508831193127035440881908926520811716105080120700006784839696\"\r\n        \"5880346198894113665199706590577342696924426261667259839007796752267515649057562033903373654401857533142623\"\r\n        \"6187140125932174293413904931149686676806429833856465549385463707235723972546492552807531343959069361962686\"\r\n        \"4606148281041428613600174497025784538263345957961162159163723866639150220568159037280157348845983734567189\"\r\n        \"1293214092887485037314994884435306602798687276288545989827758369435248803257946775797031683187521866108295\"\r\n        \"187647314605783321894705295562744140625\"},\r\n    {0x1.36a7fcc1cfc46p-835, chars_format::fixed, 886,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000005296557380144569072215861407688351112353233268592421471777475242604\"\r\n        \"4438667279139986749437517515188177140269548537520221293766437965393848671855127178764030257644725829744125\"\r\n        \"3734512519058771847953071990841730343795732793045214334729211875577158300987998323085546489474031132841511\"\r\n        \"1572092561634509970907891424846710866942686459739822840866176056286334420348455397570476786496569807729858\"\r\n        \"0010056954322574128346908080869265075775573926971696184685845668852822480375903592455411221140540262039171\"\r\n        \"4747114614201404766504398808292555529737189414561317677517761229745780498074795405501136559553762545677832\"\r\n        \"45175149886563303880393505096435546875\"},\r\n    {0x1.aa3b9d0ec1349p-834, chars_format::fixed, 886,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000014534181673457758400949055236695221048664713095250053797426519767853\"\r\n        \"2370418359567919765802256363710982793213214068181046129672798657879984495167728061963953124586161238507439\"\r\n        \"1567899856444888870552913909920877820552701336906544502774398188591604781018114504110735607946242802648806\"\r\n        \"9547492632915209741224049382111279089343575631285032666899798293647051957896468777447945107059181546956408\"\r\n        \"2406643364225160041453045884503886325221070737739693194936546919810702692652603043565212622312212995327472\"\r\n        \"5326186385562319866802067425861437224035507833099242852893492970721014206630577538178233644114936440891808\"\r\n        \"21143969524200656451284885406494140625\"},\r\n    {0x1.5f0344953ec57p-833, chars_format::fixed, 885,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000023938479247234097018550458511544817367739361536200950902814825089891\"\r\n        \"6697102141063617998075450938596876943234520222814663334325501959922339511022417169200258138866716240572516\"\r\n        \"4739032437804182998555917846877442215614673730495274627840445980495455053691946265275961590944942894884161\"\r\n        \"1461861259188120954051414903760657912572990007375277218500031379100913127364874315175834774396942682472145\"\r\n        \"1716012475547094198982983592160806543815234719036377453626738864303434918589623115748337487232265520789623\"\r\n        \"8611312723960123566997756180723488687877637287889484740120718898355606155730862034130653610455249393190041\"\r\n        \"4292357481826911680400371551513671875\"},\r\n    {0x1.783fc5ed947a7p-832, chars_format::fixed, 884,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000051319111420103700499236206263878034212106202950930977551857998220289\"\r\n        \"3087476301157658778928854723620392753220523269264416102554328703892784714509871799045575377396811614393505\"\r\n        \"2559887642015948609247281884462620205995816224373606402176926540883831558717591219455218087384224255737945\"\r\n        \"0362641034548328645419826016816415049541718987656545856396071620261775045714406002201539977040442012225019\"\r\n        \"1866657902531789248571633199703390242215773002375760167632603757343376191928042229339921704578692579360050\"\r\n        \"5258815288522892074750831437217541465231243409180954321670387197333315664529506371145190073701706340823791\"\r\n        \"574479173505096696317195892333984375\"},\r\n    {0x1.40710848cf107p-831, chars_format::fixed, 883,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000087414290750552295546310067304417538089998764617839404299068353704815\"\r\n        \"3973431496755091359582283788293865850167188491498788205872086312288388767426146999394659547867198614986995\"\r\n        \"4816609712059288233084778805421966138944275623574987168431568745304364621669241457008033758230714634333799\"\r\n        \"1592083834801689901610784799867313772745020111854169849030780011055234667752217741062441145534653890585011\"\r\n        \"1542451572988081998398568760735245436792821070637754721727631828680882026195550243758494821815186708842256\"\r\n        \"7688814649449787897410550246752339391004334032122197024739335375916004769854676164688893706639316550852103\"\r\n        \"48232749311137013137340545654296875\"},\r\n    {0x1.7d709da2908a6p-830, chars_format::fixed, 881,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000208108471524715562544013112320321887284472671173601757178916367556203\"\r\n        \"4816765950484069543464753999344218966790668885556434954834640963848940274729780129572762106340724642693902\"\r\n        \"9786182553238600216092848007235486599438797324606821503856913038248008966124526622808102991511627825050653\"\r\n        \"1620131328768788774416189409345842116105132834135665161161595260229308676173768012552965491894777272036025\"\r\n        \"9548131643864589751988643147070399821513779604354178902911542059198107738793838794825326292221503233637576\"\r\n        \"1945435619458551867191958141096359616331249245416003787574812480465286687861085268674943439588960990282995\"\r\n        \"311417835182510316371917724609375\"},\r\n    {0x1.3e0695064ed8cp-829, chars_format::fixed, 879,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000347021084000003477661750638308435237703537786182613813497780469128403\"\r\n        \"3800891212333097988673493814013195364736504043808795941139087383925791711802331911838123827244326417953056\"\r\n        \"2987277498363862206367235087609457123364999532402518556467052918877611333615959586607430637653297312728824\"\r\n        \"7902939061241640291917731532433047898179063141000213102075810097903504213286609944131302895449794218020720\"\r\n        \"0515744500844214749161058296204205458513208863139333891611154059887707939231034083780526190117163341860564\"\r\n        \"3821485787007800553672720106766199578579046645128658813737482362534833983786485618496649899580083070693703\"\r\n        \"4619841142557561397552490234375\"},\r\n    {0x1.5db5937ba8bdap-828, chars_format::fixed, 879,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000763186683615215970249210329411639121958430473608075726338558440631231\"\r\n        \"3745307865574620244170078956471117970699169233373895272809046711033266481008823220114800551436505352505370\"\r\n        \"1726138003728938116561908360251526317062627691311639965366997406572972581514278704760720055185381569864530\"\r\n        \"6038608189906570895957396970022694630297199287577363770666847839714573712843375560213839416213729895094635\"\r\n        \"2337338739362742305387139962103296257360220339421554482680435146681018012505959237765754657839926762185576\"\r\n        \"0941857622196237041917083920770423819460543969188363546830630364948483303305050991006227235002260661511641\"\r\n        \"6151067824102938175201416015625\"},\r\n    {0x1.6ac6715436880p-827, chars_format::fixed, 872,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000001583401933761789567352980256702295776633737919891851108550810304511052\"\r\n        \"8907733717602402102884849998115672191187006109820501000606499411634194787087402593470868198920066841575310\"\r\n        \"5577412001082854515786066821742485680145606254835768934161958790138488402376485406693577403584709083018706\"\r\n        \"5881058547524256867923951849842211943227607911293126792083385341593121354167764813470369005376574416808641\"\r\n        \"1452423513659991329474857843477918188270714321800366826427248381640323472424199547164205151630092903849126\"\r\n        \"7945868500721886688596381791055070199667412232286926092094960561657785392136164166225682260746854268518291\"\r\n        \"064538061618804931640625\"},\r\n    {0x1.3c3b00b563094p-826, chars_format::fixed, 876,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000002760497402953147075537995895520339372419594994205759124447381524691241\"\r\n        \"3391595013067101010555177517397100426985139428091311014234980202789586468665938033192658135488171299928713\"\r\n        \"4480758847780103851594645801982342979064180714871976769825179650409272513476073933353388956892321072235149\"\r\n        \"0145615126375166980861819231195004556950502697414714017369780865967942852167342748113218698557693272953814\"\r\n        \"8337201682004999096184931755553173054112814485123238132174498935401641579922957354412202193532663584112586\"\r\n        \"9650200213049730204055454487099841334754419372624073886119824036392206103519085784231235178743518732247252\"\r\n        \"9558581300079822540283203125\"},\r\n    {0x1.0a0ff03dc7b93p-825, chars_format::fixed, 877,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000004645119455324602227217342591024880784218971739856490542099890215958775\"\r\n        \"4760551012912411892518528475138617823127607714941375176711195036461654593756557922664803433514884132688607\"\r\n        \"8901110074148150025254392503526305529037021655810570930625531946792188492433413938849159577969097106271760\"\r\n        \"8281675484211415461117818876639956161981328934681719894959830501408247531638575392360372050583551619962632\"\r\n        \"4546859661234530477365388955308858864327508806609889314792645398167383551277259549976575383096677175116552\"\r\n        \"8157351625613694857586869049470850208882843077237683524983690606425331086854496209355161543677267821372822\"\r\n        \"70923606120049953460693359375\"},\r\n    {0x1.1c1859cd75eacp-824, chars_format::fixed, 874,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000009919902000696459127729350966514811417573806821829972221617168476186071\"\r\n        \"5405043509729734134051835419456145780406172178277413161498636992137303800662181445156443401801518547889441\"\r\n        \"8237919900549658925539440736238657233268937358693318097865972191480701130015141892197164286134518013372308\"\r\n        \"8014278380959822191416998871835413481622998929188674249549886989606473985007047872466741235759782391044188\"\r\n        \"7617574862626088827907557313143938169737105103111386182522107665148933770898445415333007078802205277104248\"\r\n        \"4812220901567775296839230012789253525767435152435751596777091235983885421322055696388453631048842673578747\"\r\n        \"05339781939983367919921875\"},\r\n    {0x1.6a30b52edc7dap-823, chars_format::fixed, 874,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000025293584256227206734436690448860438863560423322197287673071289227707969\"\r\n        \"2204821068839754613660527696056655673032934775744927789366034483299943037941202054718946505243272833507365\"\r\n        \"6294192008200028049831581799772717571671721074991839534481385737708488066272572252571245350667982202726521\"\r\n        \"0178115522857672390870362759424441473374843557581613823597887118702404883540266812295744444400774717845528\"\r\n        \"2919057421350105555224402231830887206967806285670112170221507665071279926429611065289317694700042420246011\"\r\n        \"5896441210858370550884234428874411423922321243546304888443672800252136308686251480799838569149540212777083\"\r\n        \"07025022804737091064453125\"},\r\n    {0x1.ed57ca0b1796fp-822, chars_format::fixed, 874,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000068905280466167352632776620072267895607425419562720887072786636113143019\"\r\n        \"9870943435827924716622928660764729397730215669170795196785528888685159578923864553514694529384313751243344\"\r\n        \"6001234126433512271726045295786596372096141206042297685159845546380806896152212520111951628197619447822423\"\r\n        \"2356890637934720581112260679636734550174591142037230254783839132641626802370354491366421432128406243347719\"\r\n        \"9095122086565542807986691910549101079454291551252805162525706181057897779052882188595582910816002410243781\"\r\n        \"1130608445012373884007387134467228753085378611852319995467861412812368477963781865718674362816797973607663\"\r\n        \"15250657498836517333984375\"},\r\n    {0x1.64e9ee7dcbf58p-821, chars_format::fixed, 870,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000099700406511611006380450058410122703902067520359419945795899511825630118\"\r\n        \"5979588665807563367554229093351299347926878163027036020163695376425344287053227483975642933460875671431629\"\r\n        \"5964916659136608035440694664907508699970961003572985859670160028279294993823700602311639161464638127681204\"\r\n        \"3618961458485036245110046968814655838036376921871076322233996810721470996621854701276918380162974677430101\"\r\n        \"5743591908967152567417961150919091220856185361682832504647890500198973106127845308319244621499182967427340\"\r\n        \"3163862076315431601670227511616193753920134610833738402335980235514144062926662492342671367806516968812502\"\r\n        \"4549663066864013671875\"},\r\n    {0x1.7342806f62711p-820, chars_format::fixed, 872,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000207415632006523025196785164169174906373195371036682529872752233681456273\"\r\n        \"3196900633406750711502066586090349737651414619121929946067878998595023137607518164790410230208118160529480\"\r\n        \"0804998156206074746766028222000936477101839893892279418571282614867927137837132859625536123440643270119148\"\r\n        \"9441868242216727044385209820679912278477826246793595959500243660563151818027771380841832693640445456188727\"\r\n        \"8313580962716953304739999657551660090606873802274979700164372578814557790179804100883390247924759915758121\"\r\n        \"8354034260716438236027409958770086933482837896691685792186827022522786412573603601400469044480079361392199\"\r\n        \"643887579441070556640625\"},\r\n    {0x1.a34800bb3cdccp-819, chars_format::fixed, 869,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000468488612389678255239194355235351386695688755917216939524974794469609688\"\r\n        \"9275440032086587785713772492575863764663121769661013949840449013072081217002421796823094420634858798663255\"\r\n        \"2959791163397391150480078590960800464210482358554447476008071375720055732864784273664972611655480106836126\"\r\n        \"9837670010346006730604863637259213240596606427214002032758068677779471237557757686057729819749443611671579\"\r\n        \"4435286740615955354035910308168210866360531162725448806722244300846882708100059764808580923393744064725832\"\r\n        \"5851165337021124565517153553017134868475375552171532363258796791949094141543712314728307999356360369347385\"\r\n        \"130822658538818359375\"},\r\n    {0x1.5d9ceac385ab3p-818, chars_format::fixed, 870,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000781287905611796892616054701198621930179850698389670255302610875879330551\"\r\n        \"7195870978404841713188396988128923287974065721352393075122418551066596657853413338080275298916399348535473\"\r\n        \"4716419110408496130853247928578492241422252260407857242364437935491592841104553623523092855818553312582819\"\r\n        \"1829721220074489940780549879604172402236060303546333769974476684124086874201422786888039344734163906666723\"\r\n        \"7163433456130097453860186207032859848044188224565027108655355814594743568647730686615345405439108736657707\"\r\n        \"4550292968661472642896014039432295935975217238894856607067629281705112580687453385688400614439430569291289\"\r\n        \"4301116466522216796875\"},\r\n    {0x1.0397aff005f16p-817, chars_format::fixed, 868,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000001160234474150790106260993366340033268803447790605933689662507526818550332\"\r\n        \"1277861155577877309099200703570062871759815522881113374815935124759215572993917116224795133831483509297677\"\r\n        \"1138161453964800725190495041903503011599886137368592773546799877499394285923288865121706060353889213509561\"\r\n        \"5587837214035061210211423585850725498665816904041609397518302995764306023305238497902488967898868020342043\"\r\n        \"6124343358353115842501466575805640352097289296560418368734678913228931200939437087788159961581465910047408\"\r\n        \"2740931232740166655750873897827114152724275883362810669863886485081705058400004603553698490081558247766224\"\r\n        \"66742992401123046875\"},\r\n    {0x1.260e422cd6d4ap-816, chars_format::fixed, 867,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000002628531409965365417628087574323361253955646116821732150719166651258384954\"\r\n        \"3277500473619693088454262930856098098303948802604312284693797178542387164814895571426387662670835577249199\"\r\n        \"4903748165606956838961840921237500709335045772958175552098917642465249285524387246225899102999109671601637\"\r\n        \"1967122853936092377692113114869321697491090963580363241607614052143040540849433109843155710931555560972302\"\r\n        \"8171644630679617395772994661804039589896223778792770293045849647466844098260212735564789473032006673525509\"\r\n        \"8153627327592205560893738901018096050788253487773847190576048032007569109788886840915062004242486182192806\"\r\n        \"1544895172119140625\"},\r\n    {0x1.95518b86155dap-815, chars_format::fixed, 866,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000007246195267114579930868294227361324279094210499485281620797358795463778440\"\r\n        \"0200604552323859641436019959259805541627524381368324353088153031282671758700037764963692127107204873182521\"\r\n        \"2743492857367125402295389748557776900998860749951689485541996761789107821514105364483876233240855209145929\"\r\n        \"8218235738836401360617336568712397283800737931493553531144933215030036527214207242191050786592724667324735\"\r\n        \"1952415023600273667576940226363301653096492037705698968488662811198909785131615586198786918782826768903042\"\r\n        \"9662476215473756935600868637399013945524368611538824872280748159378906498225093109517847000944357205298729\"\r\n        \"240894317626953125\"},\r\n    {0x1.a74e934210e34p-814, chars_format::fixed, 864,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000015135575793727129243415548881706639972764602138477489832613301661125525653\"\r\n        \"2612911904572526460038796615464064557235535184255428202266594734780713103215069500727504595579802054769661\"\r\n        \"2801995938419088226231544388528865167219048211633614353037959605771745618174998999740314969772733593311483\"\r\n        \"2527948799345913493919240241391196084831250696806847449720365426721059694382001837632545128601846310630150\"\r\n        \"4920946287872817633761992078128830310281174844229789408905630908727536976405794432973052507474674698762818\"\r\n        \"0025979766467714496165151706491323570471217184103207185438466801337976788369859854760379747062870592344552\"\r\n        \"2785186767578125\"},\r\n    {0x1.33f5e315efac6p-813, chars_format::fixed, 864,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000022022598987138437754955088140950822414079425891031517825754706103180380894\"\r\n        \"0293348910079770489697857931874563628273401003849229027947643460709548320874194553229940197985486063866961\"\r\n        \"4670798818301319562023515413554567537809101283096834013388339700196877232995665517358526772416380714017470\"\r\n        \"1636546412036673472967391348409845462268627991297391371820917998165639554697550184147146843309056835791578\"\r\n        \"1915959205034872994262578079066845040859907941076591375398817610400020832219000691738654346851177693702055\"\r\n        \"9250785009302119656957292836180468192898176572067138287748962619724641134653735346365932556977895728778094\"\r\n        \"0532684326171875\"},\r\n    {0x1.218a6c088e0b7p-812, chars_format::fixed, 864,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000041410759136055035697554355612523273349805779575443516024484433325588504826\"\r\n        \"1735011062749061211793783227645942484379691318093841368847098623863226362751057949455437358357281291709007\"\r\n        \"8198520957288184777281421438777970618618828499284120946242604063906544270123754851472649535798272106982211\"\r\n        \"0373058304439515386219384052728954163702265368813309267001173474115003096471620752013064126070402182426851\"\r\n        \"8292725366826052714592611208714273261395627080752743556294388041183383938489151395241871318175793857142069\"\r\n        \"8036025142557591950993581068293892594140396122869258664699108811249834168694212207378901879906152316834777\"\r\n        \"5936126708984375\"},\r\n    {0x1.666ace219c563p-811, chars_format::fixed, 863,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000102523259087347841878984078463121696629339644516172061356190578703615061771\"\r\n        \"8363325006003067828838099295381539103507207744202525643700611524672299844933001035613433505064997893247944\"\r\n        \"6718573249396209486279921427132204348932797990345068549826491701491034444775051745415504201857190579925928\"\r\n        \"7265901681337746621347007671816715879281848289288553201291490150946851111594352688143654351462331802805120\"\r\n        \"7569954102646295942779533234962168490646675608744310157317163502352340937966413998580071972072654694838719\"\r\n        \"6241181227689049097325035710943740918313124555298228499379304666253435895481214111535361865890081389807164\"\r\n        \"669036865234375\"},\r\n    {0x1.66ca7625d6faap-810, chars_format::fixed, 861,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000205260283483150922693264914914166716147172748441715521997713402871496297517\"\r\n        \"1049035381782547160052232774227698485667471867245925706032627831596226796183758396050199760459851947025984\"\r\n        \"9409329879045372962938698464806900368765191920874766137506415209946969599155078126723825585946353211592780\"\r\n        \"6587691429534082605687544159260014136145889373788274085623000250963914920394540512835289286025901533921535\"\r\n        \"5673194397338372708285535055693381899508696665501113683684770786168217064751366954802701707958201691744906\"\r\n        \"2503148987762376061836645458296711633615697144291896185639468699244637946469630579438003792347444687038660\"\r\n        \"0494384765625\"},\r\n    {0x1.56e3bc6c4d17bp-809, chars_format::fixed, 861,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000392326684132539341095763155233754108248276350060145324785663767954357616607\"\r\n        \"1328111203385529055820908854409551186443084919373917067982109478797832735088299408640774255550297436654337\"\r\n        \"9644802654288179252370784552939288880406467952263662138254115806400058113472923135087350620948486311284499\"\r\n        \"7882375442919052776890269477778849002172473111965967140464422965683565799664797786827073947990240854919101\"\r\n        \"8791857386839430814658014354114909166773527884807665163068492284062280504681162738206750305934487612711077\"\r\n        \"9812803960550043866289394345654678389071255841372420349853289748419105595898023070011717550187313463538885\"\r\n        \"1165771484375\"},\r\n    {0x1.4b39b2c87742ep-808, chars_format::fixed, 859,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000757961507355959685182389831074838390700031429559869743115819166802257914534\"\r\n        \"8683370076416288747863020785670478229418594802605843659633218761991003725554393124746818759551343919858321\"\r\n        \"9037956780023842622026723484236112396230465459969884409244325262106978179826169749752573222068433030816685\"\r\n        \"3319074233042814560568218562357326702621223793698055245872947263256533504098315178943480044679282326507455\"\r\n        \"3050656043056416296959360170882045939731413452970282373048701017908669290277725775612223691751332374494642\"\r\n        \"2143099920831121603313971394256177189429143638913836328456803834641060537520226847441051631903974339365959\"\r\n        \"16748046875\"},\r\n    {0x1.be40d1e238ed5p-807, chars_format::fixed, 859,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000002042372149921196110956852553467144364774045122558957777677661535082492418590\"\r\n        \"2447511045534069936905640957606537200670668241598816941076161810442082354034465365585049545316189811674090\"\r\n        \"9085283322163797816690426713928058838659146977561179355890960777956883768691351789892769651237357201604810\"\r\n        \"2090271465196837631021566949809345877871341713514137474605812629688134747242268026711001133906623627505611\"\r\n        \"0971927834750821976896185521894260300273463567943024440052209000198482863479912953156904928607571710364397\"\r\n        \"2525011916090411511711638026757892492384201068375355062528660761690834686424636523760511863656574860215187\"\r\n        \"07275390625\"},\r\n    {0x1.40ae59ac6132dp-806, chars_format::fixed, 858,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000002935329331483333385498510273320152179625003615741057817445818197494168142790\"\r\n        \"1748305530776598182206753889861863637101626780047066935764018072155601016400421464552029813635340871920828\"\r\n        \"6540502372077707795876864389123453098703947018487275042747888356091864668435050513072283786301499972787555\"\r\n        \"5215685304086401604276801173120313979019406684421427336942605765312807547951367072021783814225922804651957\"\r\n        \"3053627935149750677307039941356482814713297285599712220196545670395402241262550735056162451065557414323405\"\r\n        \"2851884708200203074614546619619936183020853254555093160706089018728675015413448479151270475995261222124099\"\r\n        \"7314453125\"},\r\n    {0x1.5c161d88eecbcp-805, chars_format::fixed, 855,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000006372363858570045164279555957051067914809499361391032495229017309283858883126\"\r\n        \"7228266631303318254630028045739040718717806151057630003575437223382249922228296120345672094131497663649713\"\r\n        \"8825053868512001918319562376117850312216681982942556631070811232763283968776586654217551364407764863206039\"\r\n        \"5171310907363823836647106858223277741268017668931344738686611225086630704022117450770311448359851054010344\"\r\n        \"7645068390784004440801839078883719477888542923897825206398740323615820485633543592686389160458875278305783\"\r\n        \"2428086623507826775024249195807395571626534947115790181112136753703741303550556196455545432399958372116088\"\r\n        \"8671875\"},\r\n    {0x1.ae3b20e6233fcp-804, chars_format::fixed, 854,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000015752344142353219450694189702451991296910433408430789019004125131863629296511\"\r\n        \"4311542306595038907176200315901038316721233788818826571623317203349289987417121376686501945841032567911901\"\r\n        \"2505526989607932653962459605347373167055651820451912046546618888153412645242490087251350087576649187699383\"\r\n        \"0106389822694180825408845628327750244082466163980074438483304220415007922943039390750698179386470176966033\"\r\n        \"7112702767082883519285744806346620427578497508169144643312340209721649688496292864219377630628268116030388\"\r\n        \"7520665708430256415338137506661505153630440989474460324611066529306552773392890998138682334683835506439208\"\r\n        \"984375\"},\r\n    {0x1.c895736ef62c5p-803, chars_format::fixed, 855,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000033434436478293493280593571271178008379632079500385975548283939163497852214879\"\r\n        \"0448445176707594970914929266046301395881911376324184025424812370739165394698174516004668202850196235934904\"\r\n        \"4500920058349166573528858544956797122849756889458856656030089637540017312018075458430375030356712402369619\"\r\n        \"5171762939647965970281076927336877655770322576324057362054878847600831468525556287002358878533444200008041\"\r\n        \"7182360569694778279347726566779815145097506338920779765572188303868670858298304546602128519970722727663497\"\r\n        \"0189720245583840332320063960238821736133336803065883544325328102972112818275229884079635667148977518081665\"\r\n        \"0390625\"},\r\n    {0x1.630761913b642p-802, chars_format::fixed, 853,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000051995664937001350863664258209506916125612045887421035495539968219921552001490\"\r\n        \"4045126665970571265114347528813007435581863058379511824026420279450528771594711743194984119825629737962368\"\r\n        \"9753316518168622232637649073298959845059152436168274836787886410245541432791484117122823236508634176085889\"\r\n        \"5925134098498692005651547668872239050279254533707915364965481634484943025853564537256019007487191319787066\"\r\n        \"4373018730201713610922019398386184775914931861779759491034394263205676462386582564671334894431929147821752\"\r\n        \"4385991080034029146579204618992264661730418092258037341593617653687274884899416349526291014626622200012207\"\r\n        \"03125\"},\r\n    {0x1.8907b557208b7p-801, chars_format::fixed, 853,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000115122266583557494838479816079037491869684562714706684229055149680486828625505\"\r\n        \"8796458842284516181576719673471613817362866823301977849457479564381865329613399427500201855688873879142642\"\r\n        \"7335191075994556321425506668463677430938992260094122782147467504278812098597434190907723040329777871259253\"\r\n        \"3880266541524285722608449816430831021518435036130403690642361921851294669994972412565410678626010255736322\"\r\n        \"9481670642614150662832046947746967360569276734749642475323944536173037037021708328999399961193013811652519\"\r\n        \"1726635449611654545777445394508955230403436092920083704210609483654546500441817613591410918161273002624511\"\r\n        \"71875\"},\r\n    {0x1.0954ea214daecp-800, chars_format::fixed, 850,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000155436367745616369749843612181110118157874961159881252517615127457992032391145\"\r\n        \"7023153031158762892959294137625850420107270440168478704645026759363769681184230190786395976567038018780134\"\r\n        \"8372271029157026219134768483368052056690439268533777009988060893597801037112972580440307515231250113286653\"\r\n        \"1784589848540323576235046792761341567879445491740685965407708948988769245421066466376556710384056647230345\"\r\n        \"5745447620744679132024829071450081674006838972988367188884108104737049840838885337987296921979337482709916\"\r\n        \"3647280629935841825048177410947717584898643244153371511285382388809980791499754104734165593981742858886718\"\r\n        \"75\"},\r\n    {0x1.5c2fe731927e6p-799, chars_format::fixed, 850,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000407949309945749494425253160754934363624554730926844389979349861354376544669413\"\r\n        \"3273976895637787747339760713440649581560845325794100875391063273453728186643522471972773614713700301177847\"\r\n        \"8961898320792492765145068771147703565746082901233584519734866693216924923323985431318931739634995484782340\"\r\n        \"8099297662072926409251426679384195381957872607914527115566407673022695321287430486021579104796335660882445\"\r\n        \"9478793671211948274702724136559074011196819859825079215570247071425975730487942082183311410950781004256077\"\r\n        \"3185128340262169124703929283421156748056103332106440284086201736963792074952550592570332810282707214355468\"\r\n        \"75\"},\r\n    {0x1.6ae6c51c6cf43p-798, chars_format::fixed, 850,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000850378345450284397265111739703870653764954518012213587455414660221110552794478\"\r\n        \"1436847646569250153389780805284146206065382019591751710733514433667516784023869511295085720936858126749712\"\r\n        \"2657568220147023957497250691091289435446773603751461789416055560870495170098169210699402960762896169760174\"\r\n        \"4534558920220401921577220435163110087575526258994364542988920973463193672043139556104124355129532376738670\"\r\n        \"9839198875183729692636944707657278930317739103339487124899124826072841078946429617996885861361489855103899\"\r\n        \"1265610597067390263892574347297208384005668413929906135659085299150980463700477685051737353205680847167968\"\r\n        \"75\"},\r\n    {0x1.ac4e86c315850p-797, chars_format::fixed, 845,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000002007282059547957321616912623139440883855192261998987478687165819964773269703476\"\r\n        \"2028792666015861804714982292219159115495529137800501558783955553148061206323583534701281077232750185616658\"\r\n        \"8209464579572448604508899906177218722368485516244242417571146377270527918098212641631803107437230286556012\"\r\n        \"8825632323317889694497843360775408580857259092497863394524723040311278730203262601562060541513604453034882\"\r\n        \"5415809501368263327044824152414594545569962369609544152106912922650934411810223780925102998679548866177843\"\r\n        \"7540002054621660753197441908343343400344601261991557764803617049109707437537508667446672916412353515625\"},\r\n    {0x1.794bdcb1e5858p-796, chars_format::fixed, 845,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000003536438208901197998089710968716525488669684152098125444655612595655697829432108\"\r\n        \"2019870841710940758511838532489417943905736435746115951713790347474465462971745337544820877439873033371186\"\r\n        \"2007633962738258032417741380068532111539307826414036222432582407066643734419136993944321749222199366860571\"\r\n        \"6208990694526263949725175127253153391301107011881575144862324406302148146062287775652420158281351048772455\"\r\n        \"8551743402584791531847833324394767751212559672612147109528806384219695184783904856874579756560539783035465\"\r\n        \"9437463682786127174530399653052185980142212749148863110471344671503768353204577579163014888763427734375\"},\r\n    {0x1.d14f7ef9a1bacp-795, chars_format::fixed, 845,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000008722809014595793534724831854774230258708710231328550144251403552622630667455584\"\r\n        \"8729098848343284853736028606487383125492860996732221717787417179695557893446531314740287886503942082756517\"\r\n        \"6878567927435477084189200595780684764659910944290667814669512958140664350424682323927138148558204675353147\"\r\n        \"1862258384352222573375498842616906800204400210522386811845621446994346351424286732439555874291154078060218\"\r\n        \"9115030142752959592996857877227304052880736262738027290210660571731655711256049169304129861923207797896858\"\r\n        \"6186803325882819783307168556881297598817001041704706994464233425767840657272245152853429317474365234375\"},\r\n    {0x1.6eb9675837dcfp-794, chars_format::fixed, 846,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000013749379101340066083857337348176012879302998942040643891959413447462809923213710\"\r\n        \"7923859209133670605866208605258647049621760492047179451844836572119347356991890024090747092362463756927276\"\r\n        \"2847379370874635318426406858110822716901060321069319180330630095350071198454014017603381215347279543191075\"\r\n        \"7698492719414722328945092304179731068530834521111061163476202640787726787899152301887532484498175670012280\"\r\n        \"6053953717458149970358111047972034718728424120220308910285188823533296077514778262102253723563125528563041\"\r\n        \"14332462945475323168054283191572629933059608724961728922265061757224113847541957511566579341888427734375\"},\r\n    {0x1.96e8a42e0e289p-793, chars_format::fixed, 845,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000030511988184972799383071211924634487175460180935326054116102185981586408321039421\"\r\n        \"2669807093524175183158874045050170880613243376562389933452426086185695180699312804245142060569472810956533\"\r\n        \"4572370334968164571962533878125149465944408270649637103835598442140509946028942888834087818054913127959283\"\r\n        \"0979111230155766921910856068568283496852317230749669582281777159547977023790389787193331339347536950378181\"\r\n        \"4634341296303969712079941349950377993759212633121226292844763708145719324648259205908825462198868419797842\"\r\n        \"3767700179485155530528570647693354807915784314898721093603267857929939310679401387460529804229736328125\"},\r\n    {0x1.9df5b8438b263p-792, chars_format::fixed, 844,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000062081425746751335610146680295435101859461655681989036586327775217238749061303501\"\r\n        \"7353323713829002805755157194020730148118435599036452088715313932099113134973129083783128920389682715075150\"\r\n        \"5751447312031222220017832949424406905553795591369611573268431281518228057618249401975945890243492974663368\"\r\n        \"9945528960237823817825539165337044719128567721394744671262149404471486748537392698331767276580429963086090\"\r\n        \"2353138272962413113555038517755830887058852014800933522702452536975068231984788501210512796491195164930952\"\r\n        \"739801311157528383120640408842401705946246458190149534645571431645816318223296548239886760711669921875\"},\r\n    {0x1.fb32cf0b36aecp-791, chars_format::fixed, 841,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000152128786415558027249508460865161450323003269986911909002923017356190314057552633\"\r\n        \"8086781944551107256257294332875937033885350270044302018784621809744448807229376800166043171230470979247077\"\r\n        \"7186115661830616632898880741734246107725420264835065954468139450169209357408246924208083777284462849880550\"\r\n        \"4339775671742741877846696047649844165106895821713004468111309546238119818657398265896079248483073162796078\"\r\n        \"4313379336537148325565729100673397232328082703744278459276106826127533120342240662852596857525177657403125\"\r\n        \"501719700324721350369868638181213742553728087480359007130879811509061028118594549596309661865234375\"},\r\n    {0x1.a45aba26ad06dp-790, chars_format::fixed, 842,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000252161663518464109045988041265039199759602063414215566806731221394308396188930687\"\r\n        \"7895352865071445289971934552461081251587394827416804758179858983102808612721778326780698686015680956862173\"\r\n        \"7987604680316201070811263080236047160654596302778345901333565993595911750825409982925725699277443676955122\"\r\n        \"3261805451237266910905932922787342896975680866822288201124281755325063402837770633220119310559118757519818\"\r\n        \"7287184221450436040247100286697114970765495289023647586135740814347953444228162789526700205662670272193162\"\r\n        \"2541693936500695871379949066388752655501946377532357382246670784997633063539979048073291778564453125\"},\r\n    {0x1.76eeea7b33d9bp-789, chars_format::fixed, 841,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000449828978835193123497002578520742852428393384058916236160752448670239424680177924\"\r\n        \"5582632820621839309957978885381833266783882815436988386959011380163998921014626575641453243971748047954427\"\r\n        \"0207626471757268578659669983092065941174603904921505077310135491395913225884586303728461812512986449627782\"\r\n        \"6918043851977788258575236620616478336823085136602585312742180909430348411109930204770908499349190022788555\"\r\n        \"7798282272888791052050805713091213003012308739061423106369221258417858013955079753813197763552984657907220\"\r\n        \"444177753024394698564843952193959423860928797599218080852621903797938784919097088277339935302734375\"},\r\n    {0x1.2f72b0932e6c0p-788, chars_format::fixed, 834,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000728128014416453039664187325228606052344467815817011629518747024454216250146978732\"\r\n        \"5772110024713328093333754746328221475697303727345561926510751935093640686385450454336346624796049720140323\"\r\n        \"0462511871226478475386233042407011469985152131558951126999263252254878031683189821228867935507876544121147\"\r\n        \"1113526006554815875416381462677921753000759728803205318158423248903343928149265950091280712114337761219505\"\r\n        \"9168237794781205290847875237820453998789574995457953460635879854777311114798495215561348833515894505972328\"\r\n        \"37336115964779975403775359793941134875836977710206014691163289853648166172206401824951171875\"},\r\n    {0x1.a51a411cbcd83p-787, chars_format::fixed, 839,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000002020883717144889583731818090325921472592220756822795901210867759968804953074302394\"\r\n        \"1864936723736235817948008261140342779894654766198813974216962059622039149375372207140382159277201024253418\"\r\n        \"6589497286966518076494362067842073632190771066191155689438185010834650626563031976791391939903019143196511\"\r\n        \"0937831030511219504532874058646614651291777315833865631911866390659568658853764893684303164709342765736368\"\r\n        \"3641219540298646042122056831742657703852094032730167092498886612777005716954892482974151250256729385145281\"\r\n        \"8399420681877823748179849398737440333262050279769937353134545698907231781049631536006927490234375\"},\r\n    {0x1.b808810bff5aep-786, chars_format::fixed, 837,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000004223465066821442335027908171814301805291882884523327851200879145198730568559459114\"\r\n        \"5976330970127359480860248854891726431558443351245555468482610003496561352434651925296169879290047618996071\"\r\n        \"8557697298950778181410013964022802609558487181028968350823979446899678698771936631524277718499825579930692\"\r\n        \"0272281717213927883238578820306538666423915251678987176917078960923994189243430557545188066401361332022631\"\r\n        \"3501911783489649376683084871481472461594614907247440858246857575468466973071241319175342027247791966720048\"\r\n        \"49726317886095361299522392188637733793856554789030127543270065615388375590555369853973388671875\"},\r\n    {0x1.a522225f95f46p-785, chars_format::fixed, 836,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000008084125743595664567854740546374794103525453249129066529147690275534203562099912191\"\r\n        \"5876359426286744536442548879145579602755273295208707182241809884602210363950548931232190091262986853262347\"\r\n        \"5135095009363265921031875187107902161141133274103377527040889370197718524615464087385253601309126961531718\"\r\n        \"9935301688316595497628363205247404911760487729038729048937905227196481048751169063611695982960154326059498\"\r\n        \"8729338797802211604439634988154451173709514406892911690109024301612727090904032911743576303129133173491689\"\r\n        \"7008832721886597106496144499841505379496532267678712661840290110148998792283236980438232421875\"},\r\n    {0x1.b3dbd2256d4fap-784, chars_format::fixed, 835,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000016733590187416606942028788295822734147043087946233607968651016945006043063743409956\"\r\n        \"9829226051651502624936952359551337435141043924366256262954714703084104196403532472922571050719624290744697\"\r\n        \"8582396884194042035207547557916850717553492842057781744688693737608928952458431646709318550288396484391157\"\r\n        \"7762794840043702122977622085741279270737213198962173572325958013463853117760877665013868039714619089151048\"\r\n        \"3936959754580000980633446858750098421368476749851793586866701372231665192694279106769119933450898417201549\"\r\n        \"643514656077765935283060136103656512062492185832101622422474207496634335257112979888916015625\"},\r\n    {0x1.6578a562dfd81p-783, chars_format::fixed, 835,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000027448244739455369599852949492552923507948333818208197008468158129083810159695483256\"\r\n        \"3602691754150154664120314225695400387005807802038517353586335988207343902959393348397621769684884913575361\"\r\n        \"7230521444125453235251012843207362623477900893247213636680781392280455803632115282785593332780520340251878\"\r\n        \"2556286556328386905117998586350085644107340826449520555370615285390114023939058381308345313892978294651712\"\r\n        \"1080110383876637670106173438419253507596733224476414075014265345891995296496120856593048414341827141680276\"\r\n        \"415523884377632032961134065066676791255166649173319499965817414022239972837269306182861328125\"},\r\n    {0x1.c375b704d8354p-782, chars_format::fixed, 832,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000069330212812845955601973051705409859820189947914406991516234621867700438780635584678\"\r\n        \"6422452402293772645156697338726349371873983367424350097381613788724747210201244748437625890393184241908098\"\r\n        \"3548934581879151041193417684465460693231943222252870968475205589194276287015578056177004092191366508966567\"\r\n        \"6503348144898858484909426122870870673228226689067501074893767746717599791972139895758896137999486120056433\"\r\n        \"3509007908515664863917534010543666617786469916707237836024118874742072934775462928779342329475149180326686\"\r\n        \"989774048800335725396492694612182396772755548224227706288758099617552943527698516845703125\"},\r\n    {0x1.41ed65ec296ccp-781, chars_format::fixed, 831,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000098876088484049352922774021202980270628015087562012427292778038682091273168220811432\"\r\n        \"0336162897601090023104023704996008069111083741196140661388861826358577996302406407082910484532702903501127\"\r\n        \"3046501315182391724708342834373731353510858807009428849017497972201623850366494027130268394546556252337263\"\r\n        \"9220888897028444197595899063387263573871573732612758260782869758009494263629328008981472261588690396371322\"\r\n        \"0175723695858462099026339510542868187895386861625212297072254733429651534552220213138019454443987615077904\"\r\n        \"49963348399628134274149711127064592991748928608140845053497969274758361279964447021484375\"},\r\n    {0x1.2750c8cb09651p-780, chars_format::fixed, 832,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000181405208663755975928171401731983284561534710865154438919473014190674270163498146632\"\r\n        \"5264328182775378221400043060725800937244923408999789410546799241994708361732797013064162048498558045662932\"\r\n        \"3170804836375424666568971327738513769501374817304064961379303679402983078229591849296911571492481719626897\"\r\n        \"0748424091370987864524876515161709281756916094605784025688182377979979672590895711517738600663244505115355\"\r\n        \"6989518300004374198462856061146613925239488684555318551006250185081535696799617385213871147992274592745652\"\r\n        \"135539672861870128479085175141572936063038323285280528640583952437737025320529937744140625\"},\r\n    {0x1.19ea333f13ef5p-779, chars_format::fixed, 831,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000346346941664058856997226659961568191908353051579393790822304311131985848144061421594\"\r\n        \"8950670924303810991380480870918391562773396968168321180155700058682912089873920922417568865509996831765897\"\r\n        \"5778618460070823329599291047486172481627379552579203424485131687705351828914558936751977084970788723665164\"\r\n        \"6911633446061837481566262159959714724571419648768314999022617018062933732568358168026213901853555115664060\"\r\n        \"9221578327596539256658584427377168271165435763538417856513893401175314602355933911012032764195989159737458\"\r\n        \"24201798081334576050870430956021545159155021671205931799164545736857689917087554931640625\"},\r\n    {0x1.a38c43ff3364dp-778, chars_format::fixed, 830,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000001030872543605267300407826553584936284294146260376706800905581732833516551899440193317\"\r\n        \"2454910493217867696432184596271668631487447065193359138589446927491863106418507505948623568420731561025482\"\r\n        \"1040680581793107781394674696062574897434560726357391482064362738944257244665590825631465273733333620756675\"\r\n        \"6390293322256348701247931456511785821238511159745172815626529220869590250040233626257266765566180638817589\"\r\n        \"0193990786445710715532644427065621287497880140069704688156339008987222694650154503308016083770941603769316\"\r\n        \"7240629952771552441667361465182176428352680002016594773550650643301196396350860595703125\"},\r\n    {0x1.0b0ad1b956d83p-777, chars_format::fixed, 829,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000001312300828090958506009473976947437846053886610704839212982469612660651627920597254767\"\r\n        \"0492262550710764284363323435464168252607282504216121550058386417219638918387595741601006739821592204253433\"\r\n        \"0073715044124724096640674063033718326013719516858787658082444313471097692400701790150424536692057033364955\"\r\n        \"2524608892742277095894257969637967157676697955870966040512564362083751427239069866417018956638131113889721\"\r\n        \"3106203693198480966230974668304648108481706583483004968448046454807759853953231524663460193768051528285130\"\r\n        \"784630367073426811242164361861337955626193876000618043775602927780710160732269287109375\"},\r\n    {0x1.8a159b1e99b88p-776, chars_format::fixed, 825,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000003873224237815389731809748518635096030003118658465656286300637347620601152368226255781\"\r\n        \"1183503862971612833114691641746125502072880341115574094325771751109269324097178608013529608749513409124237\"\r\n        \"5838374168505261130380049259816672308978233967422627780162897268815289721857818949348917033129574756053525\"\r\n        \"2056117984854618682523930513157192437314654228741856799035434401631043720518455898366052956161532089876252\"\r\n        \"7140916102609030211008210383276559453108001243028592320154717229013144171564493874024049142539487772727966\"\r\n        \"16343751153961765872340989930831780784230462810757700253816437907516956329345703125\"},\r\n    {0x1.d415deff614c1p-775, chars_format::fixed, 827,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000009201073964781300008541100556872710599879906689903744896530267513577688481665481962817\"\r\n        \"3659937259171048554565929979214712659389623130600333190907794838391075515187831400099110511118637642668704\"\r\n        \"7583016174605352766814853433181824629824581606810599704853693183609434375216004542753155148207986606803773\"\r\n        \"2986220746545492963890123827116289570377787445870908948449086008729201361201082428590604112666257592229022\"\r\n        \"3290517197672726442811029075924386055866495721558512948039413487672903898945678035746290351193063272360450\"\r\n        \"4410411901707601194771524410246628913870770190286396683632119675166904926300048828125\"},\r\n    {0x1.310bd967f9a00p-774, chars_format::fixed, 817,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000011992483584063613937396382002898619029819538686188191051376468587418398044923819788257\"\r\n        \"9818103124509702374293152236901426529753933885926217522939375787436168025095420854421089105328643012783084\"\r\n        \"1934457751785326270193002021288587642607408488965662669916337673223002264510994634236841840933737724623832\"\r\n        \"0165532369920286784015079222380268705401143575325058869567756026714067386945351235295748404808174268116051\"\r\n        \"7935100483419861018435189240188373810482122213082644041469933620211270257379648322982766563842384538563467\"\r\n        \"443736569589192277871478824920734897185869982649819576181471347808837890625\"},\r\n    {0x1.2a478a0b632c4p-773, chars_format::fixed, 823,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000023452909097606002102998388857387398320146582515932569159622941748507502071602816219003\"\r\n        \"8577919142927662102871282920701702839101779318975472524788417303881315933266593759151136812057701602281728\"\r\n        \"9081182864226530689812976721417530770069277611318604358776733743161458118453496278452601803441503553632201\"\r\n        \"7474518992277328792793939383070761065446832297352683219271773789038387084150729566669981216349132935276369\"\r\n        \"3592948219303919368730207897372104156558695370518639326240457297236641350456607151007096954463810541500796\"\r\n        \"919853141331376838730027058339967416700395930195810478835483081638813018798828125\"},\r\n    {0x1.a10d1c936f397p-772, chars_format::fixed, 824,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000065583225953784304043954834614176088194295405940341601198073153875988601237261704379055\"\r\n        \"9933365976788191707725308732928182976190209935831121926799822295206356039751458151538698202210999800319499\"\r\n        \"3700690531190689213186495513705997548419470722568105046316621424908719955943222521965922140810646651477916\"\r\n        \"2775429961972100244078354448201804009172919086425145196331932267229375638726444077959998629259488107236621\"\r\n        \"9565719189998103239748735717531246698300106404621320272068687120569178549223991517121489275313276613889947\"\r\n        \"0724688740209962027833578890959869765026578336541973612838773988187313079833984375\"},\r\n    {0x1.4135d56a1a3e2p-771, chars_format::fixed, 822,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000101023596160976000069440436962663043104025661238803813305258686783605864177002843137119\"\r\n        \"9769739320783499649064124775574220382629810839018012388827720150663315264203463880475089652049354996245677\"\r\n        \"5568139884585617152622423648803324813113672233655333301389354335118987941796574841244036595242772931025471\"\r\n        \"1557318894251460590412627372888990853767951788969775191050007390534210978779180314377216632922844233387005\"\r\n        \"6541814956903081509819768976437949905372395341814698585477427930455840480364970460096700113363793784472737\"\r\n        \"60163550393934817516023051483276085451591674857496627737418748438358306884765625\"},\r\n    {0x1.9ceaa4e0f9a65p-770, chars_format::fixed, 822,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000259732139706213530448245451882005921834190423856397272920535626662496755449426919125170\"\r\n        \"2550594714010912120186917916765895983048599631991780520962203620444536908024011856433780670158318226201921\"\r\n        \"7821979193975723091497090396671169522898471518374242167613410216813397235783378578812866385423780918919398\"\r\n        \"8670381485384142340434982976254742168664151852148712674513691555142017462243655904084873720815259807064786\"\r\n        \"3885904017009536566406455700942818368886508589824748630609074368927306714824973309805714092994491615308634\"\r\n        \"72389822545360807847278223954502168854992227853273334403638727962970733642578125\"},\r\n    {0x1.89f20e3a83371p-769, chars_format::fixed, 821,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000495598000652351534897964101941613909664883556175856665427073391369005587112187855573638\"\r\n        \"5611230374810791309986802372782433508435375322008993365340619986890224801448685945509568718742271638818953\"\r\n        \"1996365837452205190467129661523205108676185435857200245311949408728206729192333568705183528014348985462418\"\r\n        \"4204571649235774764779579585400684427121320457497024811161711198841228389639769023837032481024520231244303\"\r\n        \"4057065200979920481652492615232633927148499564024439563982325881645117144098140065448506502009259057265030\"\r\n        \"3328769978657418311198129755525915792098434753398805696633644402027130126953125\"},\r\n    {0x1.bee6d84bb634dp-768, chars_format::fixed, 820,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000001124437726280314387806801642368801259603971889474876152269312370318163413010465064013526\"\r\n        \"2083103846749672518801249249538170476428596608475348806502147009220854218318208403259597181016504446505711\"\r\n        \"5424454465191892043335924275116028084271363278077405450543201961262487817246473430127316767816343112024240\"\r\n        \"5621415824776126460894783892659511819740228947054511879748309739593626321546425115133674085633918088072495\"\r\n        \"9346882809972866164269263377530400296198176892310064309601980174227287902248981317884777041785984059282988\"\r\n        \"554452900238197385204296812693280688440211623202458213199861347675323486328125\"},\r\n    {0x1.deb403c7e96ebp-767, chars_format::fixed, 819,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000002408905012655528254140312114793714664032268881311095087349416525657742714176490020984771\"\r\n        \"5481143046869400508714270672918718286848988872663121901055634647037723578276123125516128349187148157183017\"\r\n        \"1798317313191456617430978322899298739530987421493808516778019770371345005838834155581044390605946827549797\"\r\n        \"0709180486706718587131364030821635615599960443591760513678002044920579287319276929340598582253722901275914\"\r\n        \"6679613240165097560521086933490729562560414901156584319689412299906187005948185278022005662480251971989026\"\r\n        \"83943273650726489520827818495221097315484026779586201882921159267425537109375\"},\r\n    {0x1.3d89cf65433a8p-766, chars_format::fixed, 815,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000003195799319805462572521364574117316278693568485767752743809097950037064781039795892048082\"\r\n        \"4463940923329563437363685177400336842377167211712128391896467408379088000492459813190319379094782060739161\"\r\n        \"3617716363350605791562223296062732639286011595094094702957909856135709785441411699195097500768807034283392\"\r\n        \"3998116760516870121574917697037459288010356755439583792967346200669790443814778669500303146321199566652812\"\r\n        \"1763991142543575975589971847109339742740076626470903744949365521927945602356867632925861853636270287275936\"\r\n        \"7963005063148812537726423102708329937460263181492337025701999664306640625\"},\r\n    {0x1.3cfba273e39aap-765, chars_format::fixed, 816,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000006380419758740376032665289805420080182832321478044221503202200762047835959781840169328401\"\r\n        \"3081678136665027405649019757328785359072410017997799082473115643094090029365795499978289712081064470112832\"\r\n        \"9076885474982261315200453456798024048485256634684909215190879937128725725538244545473521500098750392836164\"\r\n        \"0304537884889342864314578127938577062827756669432571158155604168064975558083170912444617887509179562778598\"\r\n        \"9583994623827758905875393700067186061579595903977837711660628927349432190801081573067233350735781687425858\"\r\n        \"34885842794925337155136765021905438655114295443127048201858997344970703125\"},\r\n    {0x1.8fd3a095fbb3bp-764, chars_format::fixed, 816,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000016095894110621704153832201294055971532390391615911012418102173691565843809408450333609669\"\r\n        \"5857168934173226321447397301047417148502624258582835574723816240415594393369665164751768647196218708742592\"\r\n        \"1344236637602594225725582449224662605981402620585333275787021731573507809506478128418455212296523148679126\"\r\n        \"2664266996524011655347686788983136076956554273893939557385379020373453645222044106667326598338033048058315\"\r\n        \"5873811564176938159689442060769621685872330312916464823415664426762643483429352265211453025979662093409239\"\r\n        \"73633448396800289534637228014489311600510035304978373460471630096435546875\"},\r\n    {0x1.f4db39b3ecc94p-763, chars_format::fixed, 813,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000040326128219471308776340774632801968730422798127085717909547582642722780609987155279615390\"\r\n        \"2810669339478058442834132325348297619070203917114895484113342497422436622422171014950377706618395303383927\"\r\n        \"1770105011467448775538953564225445443359521685452770061497047825649312653532071752631734104992995726313037\"\r\n        \"7151447419596676213378577557632829154543778635778400664844147650126586480978710722699215601770032193691389\"\r\n        \"8614935271862924100599178352375439954606326097129388309765290899844628674147158970800023347955167381151032\"\r\n        \"69759047998205277790672589771116263168693194529623724520206451416015625\"},\r\n    {0x1.77036a5ea0238p-762, chars_format::fixed, 811,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000060387918131443855293985504488455915724451292685267014767829849073500412060744954585531063\"\r\n        \"6730305293393951523888733562888957496230925242955930292779412423416985599139667873737076545274846108104562\"\r\n        \"1877686951519498545128012141933364974487522376491162699773763210995107076549084989195346688616058796160233\"\r\n        \"9276112267342077701687069702978155674956635793332657387620943979787993513510686776554055594710429194494938\"\r\n        \"6627062503390682659995039549772250462149515137830868639868155808286646814645933763259664624485459438133730\"\r\n        \"144593675207962419919759523671831669133780451375059783458709716796875\"},\r\n    {0x1.16a7ee18d63d3p-761, chars_format::fixed, 813,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000089743230112456742542899279796268272934437787928293448086298107077647616276508988954791659\"\r\n        \"5804288044644798103641898249421376652724137290600459136448447242365922273624432734917290803189814744215370\"\r\n        \"5702731837594015544794593860976939114279110402292024483236793330618757059821482848520627476373652688290899\"\r\n        \"5679261595490429446328543904775889245889306222564992234900589838102861964399884580694207148624055586974244\"\r\n        \"5831171652450554772427198667133558451445735864240418102343992211275762410613327206706574095487836196314795\"\r\n        \"23191051204460867478785766697922665624531646244577132165431976318359375\"},\r\n    {0x1.23d8446ff655fp-760, chars_format::fixed, 812,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000187981573753279378361773655523115517222985669926891374954084011800644608102756695573682624\"\r\n        \"8605047653570682229143154372846202159429019436045435644649504351411553584618810450861106936705352227437584\"\r\n        \"2568731277301646484032327163404271841069493719674807837610894121338357522419245958738777012616141543339439\"\r\n        \"0911032438610658571063920444331335527989881806927056022970182117493234989439704941944639774081102521389589\"\r\n        \"1696714349771919521346467022907845451052601328720021485657518430282316906559267028608176010620252575967031\"\r\n        \"4514760374378365126359435670864994616380272418609820306301116943359375\"},\r\n    {0x1.d9ab918404aeap-759, chars_format::fixed, 810,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000610196031199063948237033598934190410434889286687771273216097796022959577558462067715874396\"\r\n        \"6749819160787012731884077873234225312484501399731681232773444628204378897443670340405165260057441307837979\"\r\n        \"2088793432688089101518227058288754692925652690365461478939154568630158575729090638020647792935120263089288\"\r\n        \"6217751852987400174491426935500887326192277485223523685571752784812643141185464689893528184889638149138065\"\r\n        \"2507002409142303849126507863537916582989505083248647557799326948431744454808215738540980419242520356242812\"\r\n        \"16732196095488604104431604353842022447906856541521847248077392578125\"},\r\n    {0x1.b79a4312f9cb4p-758, chars_format::fixed, 808,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000001132618262292722758502699840195345356438733152663299584143457256601227018413136017286203526\"\r\n        \"9820314552997461241377632945337361515620918822560229961170393130765553757248043014053314277604328004618600\"\r\n        \"5695400263226405409869565899275176363968066480730681427609625729113254172188553663835406121182992392333618\"\r\n        \"4608179768249661565556415092990480854390048819071574318100620038390298081275462824285010964499785882149284\"\r\n        \"1688957682488157080189277388885933187971360453197973651452791340741998288731311405618485841516869165310136\"\r\n        \"725186574173985326892508292140337999853727524168789386749267578125\"},\r\n    {0x1.0546601b642e2p-757, chars_format::fixed, 808,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000001346328421019360593774572293772585724294970999933506003984042320478536784739030226719526355\"\r\n        \"6416334323998196073782473607018630567269118364564600234366654623643949382152730430690017780065413052347695\"\r\n        \"1053665910754980200664236958227015240115626992714777562773465232769283056463949854307181394577386702165003\"\r\n        \"3486926053374860706444780130558337318531162313219201160491525146597775296876709847890267525250594795293765\"\r\n        \"0369501082058516769660425361944455031347308706252788388788524194595110661637313910166749819315348258679689\"\r\n        \"093276443200938289032121165933464368436034419573843479156494140625\"},\r\n    {0x1.e06b693958e4cp-756, chars_format::fixed, 806,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000004951126320251195764151239969982960264155762354973640825355682242559097539526642761111496204\"\r\n        \"1653194091053383333687977528459131961733246268075570183108576832296256725838984844196198969342687811673558\"\r\n        \"7887408259374359232928716945672901112317542495858052699618979405779261026253825753798270697448884031653575\"\r\n        \"5315962922121208210453490746877239548906461407468987574429645050867059461785131584848399640120680171713028\"\r\n        \"8469826373770474107040550642701421757615256057500503308103419946710300086061346893748306313536348753510183\"\r\n        \"5560640066559693432397641632558560331744956783950328826904296875\"},\r\n    {0x1.9b121164ff8f2p-755, chars_format::fixed, 806,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000008472853590985601241020004190637241463229621527264800448442776684560847734470543149339523242\"\r\n        \"3944742460409199077822362080714239493454257568353046797628519690492599331320691011073453588367065068265407\"\r\n        \"7675051720555490715378575311290261124702213771995469493649223776846558440547642413498326835922954176759564\"\r\n        \"2143658069865886831148635099517743665330779472058221776535386464582426973587043170795481595949964461599706\"\r\n        \"3996698543462258749378243096021674191619062240164618779799121232700677981587852874117410446960008698216656\"\r\n        \"0311473505952658790405830624425931318910443224012851715087890625\"},\r\n    {0x1.33c105a132a50p-754, chars_format::fixed, 802,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000012686651186489640418613729090000624883664125727826691528539824897946273278972673662123556913\"\r\n        \"6796631789208189983431026863877108668219641584809556168837216776958126517591068005717065263272298248242603\"\r\n        \"8981843949566612935545218642071817145322217521025560041269146239403948013671611970850556013445928964207740\"\r\n        \"8705331572574235474192624851323842879640005145189256370467851069614167518680883900253222756097604564947196\"\r\n        \"6663022054729635272862815877076419614503481104276280881883230397522547283862747567583163122464808826042178\"\r\n        \"125167560452464976701592025420950449188239872455596923828125\"},\r\n    {0x1.461881a63a0b1p-753, chars_format::fixed, 805,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000026885518067927030135600540861707655056802159939373748083541390174722386534014508552498653876\"\r\n        \"6100510099067445588072524415445950949218647103736177038525626564873722274278821070632004195312288860329438\"\r\n        \"8630217951705260348488305643570712966829103828184920483901645182663652301170189091428704104767787904483000\"\r\n        \"2873804362246721781438144108851865293957093901180296561836196437647790186463949972800429878337528313848596\"\r\n        \"1700105907608224914495063158132615052678462862682436495900588406487060191263024372546385805536617848116566\"\r\n        \"363084955103460608268235720874628214005497284233570098876953125\"},\r\n    {0x1.0c2407710943ep-752, chars_format::fixed, 803,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000044214640337505111554944922904823248343623564594516449176929291697505388608995390558125712875\"\r\n        \"4791912335240586693816810894915724128757425416511778571176251130211532941252220691325000829704363646059477\"\r\n        \"0323859200793544962681567393060012625739634735505971763236487302996987119743532149729213667588530593927826\"\r\n        \"0408520599271061340719831810161934489555283359505257515360447477172801213945337256578391537827633397957645\"\r\n        \"9174713878464261200380015132547253153164479656660812754868324751497403180618654707083628746868296897020739\"\r\n        \"9435141959840122704954168408875148088554851710796356201171875\"},\r\n    {0x1.f4741e5e15139p-751, chars_format::fixed, 803,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000165042995966925546628984383155687426802630829910568830144805080182059616159400640616791914911\"\r\n        \"6567972342502528633809026611619473914203575226695110014755603134810874402588512571826899337246445297246553\"\r\n        \"2766264698823367621612810348534805900131492296223407951383730219237158057773598874706174618086063840044242\"\r\n        \"0561922495131334668208131885746403391672324167111969390916603648953175737539471579501379373729326118697840\"\r\n        \"8512639099218568828122064104941327084405161941916779504534198182319569569273053021476314273499174412667533\"\r\n        \"2954466959597313317938127585904339866829104721546173095703125\"},\r\n    {0x1.5b320400f0d98p-750, chars_format::fixed, 799,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000229000914269899793583925306054617850167594820150049504339158929071332501528864478409489782356\"\r\n        \"8726988932085980115553293515389936957901739981436559145450779378992877790037673882467134229994518733990751\"\r\n        \"9685728790162322547086061292293262864310308479222563824048629828472193229030605222469084308480088212658865\"\r\n        \"8596692441343569075544140943477600366367404323388750435354634978135442694689381148271780915054657167342124\"\r\n        \"9634131103639734074609825126412085626048859210797049749415351752705234733937121147766631468394943062111239\"\r\n        \"263831349277623049276453315314938663505017757415771484375\"},\r\n    {0x1.366f1ad138336p-749, chars_format::fixed, 800,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000409508166888628517157419817165105554911318069237530796256468732001010118418331055637139157129\"\r\n        \"2008962787733866727329374672025191194795224807234077953539142049054179596385647635507320267095499467503726\"\r\n        \"5536614676875184659859020383556149347567769289988908977699207829717670516082905572978102352864353337911640\"\r\n        \"4234813862457090464963812948429443738058813073252100543366837119461025892649682279087776787817400792979497\"\r\n        \"6185694127951447015973190588292187212001502539099993036783572947568341165095404737746532857085800120406782\"\r\n        \"2030524909524755276801766257221970590762794017791748046875\"},\r\n    {0x1.b68e4ea5cf6b2p-748, chars_format::fixed, 799,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000001157039601914719995161474681192713940448938292324236773346444178863088807807473422509603809728\"\r\n        \"6016984649018125775151464503555615646404060658691264580754160801113496274674184840568134100418868606634608\"\r\n        \"4883838015448770939237227843610689471472516848889140225661395889556818593452328080378502548794576103368260\"\r\n        \"2426807961772990456483059228090427602838082901289380518829759688894970117957680038164686817687234225862905\"\r\n        \"9497492830636304470371179529986886830620720903236045776519393561035298250206099701234656483366474654869577\"\r\n        \"789030389398873717443638753366030869074165821075439453125\"},\r\n    {0x1.5954dfa1e8cfbp-747, chars_format::fixed, 799,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000001822172616272087821939155910415839537495966914721324561350389674540202833806968589169321511824\"\r\n        \"7249574470577577363283406905925589340504067750696872317929067358648190651662372963944126659917530731609662\"\r\n        \"2687835586709261872886471392472717771987220460119402136444455870763923790489340610068961537086029343422713\"\r\n        \"1712148405798938080241679861553713797750769999224740366201895083983660350633648559210159679452353048229015\"\r\n        \"2376909489707030059187727235006050422294906448778167618793769252410314007579540051336232970229014522482537\"\r\n        \"912632759093969035679716483855372644029557704925537109375\"},\r\n    {0x1.63b19116eb98bp-746, chars_format::fixed, 798,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000003753698138066099592031740920696553640319790791970843848324320727604625978078263679575067096049\"\r\n        \"8823863331556436197349751507464907406536791259502997841818725518956116584948522260009384734395632938955897\"\r\n        \"5557559433994542679752635962542248075114030101940045590270114197307140207018668586394636941569947697560965\"\r\n        \"5342242607715417559482986858223945821096213086745651726628355163561208320263619248887956178202400601004652\"\r\n        \"5100412652755517015868480555727850528566770216506559421430507788004742729225958245147053412401108749542667\"\r\n        \"00298560860654499549138307656903634779155254364013671875\"},\r\n    {0x1.5ee917be76e59p-745, chars_format::fixed, 797,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000007406442429898379975840992196232696570280155414355170494470746700831178484225750302970256254251\"\r\n        \"9306298330314198119432646936936219640005302425837793809866997855583039763458231724336941595820523128212963\"\r\n        \"3947664312153197637819160236228380518879865419642095099154847013243834698228981792961692765381003688283386\"\r\n        \"1429456852197071346598706932047301177361039950636204339426533855648927410852086145357918308040661420841561\"\r\n        \"4734431946343515294217972587643229238349975638672734043378699267533306073702414230563790824741511327734312\"\r\n        \"0253686591211890466457390402865712530910968780517578125\"},\r\n    {0x1.6a83518d3d07bp-744, chars_format::fixed, 796,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000015302655517853281865519088036641672349453364010152362760912937487442751067960308155681513204043\"\r\n        \"0603531140119169719954301232130009138770629329047623431367136583488292739563960649306317491883315147232877\"\r\n        \"8111853551638370183466073023350414179430653267818383940598863187341144619169938988058504946188990166111689\"\r\n        \"0371411748419049310873563085132522363302203246396131818560894282203919762752828801213801660943168347443587\"\r\n        \"7212217601824120899083102402432899611516052729144447370268452974713939382192826509551728150820699522893409\"\r\n        \"931803161412415537068199000714230351150035858154296875\"},\r\n    {0x1.82e119223c726p-743, chars_format::fixed, 794,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000032662448520856141582359969116197647314758219008736296797176525214401520867340405444019626396002\"\r\n        \"5977722528663186968836682916017000501882086507974134707585824404879354484989379169992763394149298116714053\"\r\n        \"6497351170034620473951673976632347333736927399827635100863212403303690831363747883357719095736646178466990\"\r\n        \"6108011089145100688546861344607708883052424869986261801888046350637846415147864801751679914776550653014890\"\r\n        \"4271560421265143357707928115720602473152213992952494569908513824173282587811025445448262815293110163847537\"\r\n        \"6877122978262757424516848914208821952342987060546875\"},\r\n    {0x1.9511005e0a3dfp-742, chars_format::fixed, 794,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000068395808072043960437946888615913144022818684597480409139416604854902806048015891947817642973494\"\r\n        \"8862245893917947413915725902749084228620358340824715778220783690279558522472606442707272495233483210036215\"\r\n        \"9581367871384747045125219246721474379386766703417334122219654531636577160208810229335271405672744950103125\"\r\n        \"1275288724009435300708255534437191306099867781740609566530007646264293977991206060866325869748017718453607\"\r\n        \"1352071608186568842594609317420574039197696219126111789580806886704377222403255162694449756479070580400807\"\r\n        \"8262816775448607042875437400653026998043060302734375\"},\r\n    {0x1.576318beef5dap-741, chars_format::fixed, 792,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000115962406402571260225807637588083339565449145756968128771526860579794274238061701246310431437353\"\r\n        \"5120241196943636624576522441056300581422419793065918182403765774576619664789514847825369394357789994302581\"\r\n        \"5117473555950899664260875011783584215111954734503708050533070455197544779620469044887126348153871233465047\"\r\n        \"7100302294427227534119601005347919656805274459431535703704462616052711014127602962719080546695797410866049\"\r\n        \"4425525185133740063498266042385379033759626084965822995882878273767335675757022446493915011042685707220672\"\r\n        \"96520471808840557770281520788557827472686767578125\"},\r\n    {0x1.3c835681df4d7p-740, chars_format::fixed, 792,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000213773982901020816425471059982375549303296669336586187605949616394455735106529551573912809724370\"\r\n        \"8385367203985409989418142339845464744509848763411466950826902047362041530912923617136105382832462853751569\"\r\n        \"7089148893646577214111150032465788510783774980534050003893219526729892343374479002155979221460557420738762\"\r\n        \"4735739625793585216904245671834066893864881121276947393151048614791519049805690272638749341813777239919075\"\r\n        \"3868947235717472056123782214877819185392685523254459125164136720192630371751914248325658632338692842967628\"\r\n        \"95038863071250911929155336110852658748626708984375\"},\r\n    {0x1.7d9de55918ba2p-739, chars_format::fixed, 790,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000515490543463541900457280991786122842428640485925469736386057649097520844538168988144440300147547\"\r\n        \"3674571741539395136810865812257820287579206899897896199476737985440766083717013405434910690087623353627747\"\r\n        \"5925228251990646506347478814471636118300164663494927951118784242630813001137337588649111379217550198123914\"\r\n        \"5721946995220188267870819637862289155305070449878798335295330840577067021393127348309703358916386726162320\"\r\n        \"8224246017669461827484581446654402322156932534434165516639328956185987526456438566471000057408688430571702\"\r\n        \"690182779582617200730965123511850833892822265625\"},\r\n    {0x1.2414b43111a27p-738, chars_format::fixed, 790,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000789089664296121387614420534108250108411475119368219551774587134574381988054662718380514246787658\"\r\n        \"2864571993987161677266347483587329927262540886673595429084055068332713331503140972745759863099423617038793\"\r\n        \"2906236360085565080066630242262384729105354678672708365776181553401219189809418801996089930748555171743979\"\r\n        \"4176679794332576993871994576554201767938461199302784663624577250824925208461360727003710702208860452385157\"\r\n        \"7109991383532739195818399287510119742881192916232957821791065350183530710515309186009093491021467737703715\"\r\n        \"353433063517396561792338616214692592620849609375\"},\r\n    {0x1.c124cfe4c459ep-737, chars_format::fixed, 788,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000002426825986162955409696160720838616439633892458788625309865145355014039133937884499839346028899093\"\r\n        \"0432820913585260554414526029717841800919562286700763605904040464751167458275925208215946333392494612263620\"\r\n        \"9365307724097787315779589883257950377354121499303143400294712376443754680426129417822394964985828423328207\"\r\n        \"2275776984886776696287230432917325151114270595302521151786942917476744573888577694630402552560755028212755\"\r\n        \"5871896204672378684490694692722428760174653910908007906129323028077264260411026749718554739595906291020435\"\r\n        \"9782805061396260271067149005830287933349609375\"},\r\n    {0x1.db6ca39d80d3bp-736, chars_format::fixed, 788,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000005137651801328117658139376700388169245253921618963845408251386167105634433055348889898285991546260\"\r\n        \"4752562071319485845648335529584393765522975276335293274782126103564560674391804761359705291119305451450780\"\r\n        \"9178873973886099210282662326328019523997863070563037719717129070997665663585612017830449229911133403178558\"\r\n        \"4645526739662301140214643107323203614135985232805757613680820631336441887723303479232869452436887245731411\"\r\n        \"8573580202763213328421570983840494818766787235351250893504765102314681700488732866881574538666002685874740\"\r\n        \"9429610530917642563508707098662853240966796875\"},\r\n    {0x1.2c644921df46cp-735, chars_format::fixed, 785,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000006492339312327989397379812497506795768366182105530253107926877050242004909514098345522837065884883\"\r\n        \"3305956119732868279822906352745414538319403704146625057972477571484405064073479760749702326642482665264654\"\r\n        \"9956059872012243832470328232644071176450401483212656747111730955488807809611431008209463391066858018677590\"\r\n        \"7732763117160367987693854415608264300757440194274055962362354462378832753180832240963470361183082402027763\"\r\n        \"0688513162592170967972426511609470994955390113934168759848255995447624075105516859427388219868399379202902\"\r\n        \"1073497485616599078639410436153411865234375\"},\r\n    {0x1.6bd13122dbaecp-734, chars_format::fixed, 784,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000015726294053843144363681777730802477936874597299084010995107628966567384953622503257042435468958025\"\r\n        \"6817689514556296506682508635691790408230988645053782874328147548076915865073026467921875301752650598198704\"\r\n        \"3218119453256217150144733715978427901629387459284666143864869306007500181496611203249610419580016413429528\"\r\n        \"0449738030498260886817981140598424248086555342030238604672222152498165969915199735649857611225997848420675\"\r\n        \"9362681976604047511921835077849991651550299984928801347440824803576874096605998398187416862946416525739844\"\r\n        \"020914670608135565998964011669158935546875\"},\r\n    {0x1.287892a1444f4p-733, chars_format::fixed, 783,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000025630401696102993478539054633433987502198527063819861595789767934541667125215787275857810993033871\"\r\n        \"2919776527357557274968367720569106246135522165132339121000037669478455657996670633099125384048964216917608\"\r\n        \"1287153935906807676638979861995899482434722854021681551266558689523039027804336232103222151597704699482237\"\r\n        \"9922391660359274271916002455343495552557398005709744430276564223663170930770139608062610354384149949188616\"\r\n        \"1320538432032766932551477934507877337828248379260954800678355110576711200666093855448294052836140256287434\"\r\n        \"17206667487562299356795847415924072265625\"},\r\n    {0x1.b57a6911074d3p-732, chars_format::fixed, 784,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000075641405712977867210175274043088388783420867275149767322122351434047338374177936253438028204899302\"\r\n        \"3569628370488523999137071089542042803849243123833082314485877867503612078844280060492941395300769301050477\"\r\n        \"4610838844771708168843517945782166786778563721827463933958843025588740107399532386823702651549747742355276\"\r\n        \"1186941336160543862549988839807751895579998772653688325470326107232963792745930375230680670041063232822687\"\r\n        \"2762673569564881628548880660380868326841031190637588018517873017028771871603303484157541767382497748122591\"\r\n        \"012254201103814921225421130657196044921875\"},\r\n    {0x1.c6dd472003239p-731, chars_format::fixed, 783,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000157295073408453606911729619505523894725953819271770441580534862440013840931204724506555288279172526\"\r\n        \"5682898642166114211738697187713054706955842546263361679145790725498681498242083863209695438953850313229173\"\r\n        \"7688994472301051431573948834616830901954944542778316213234982976290202142350877351166882380050718600047179\"\r\n        \"9043574906093596493205266413296990196692380167403690207319888906701332340595651002137507102441331544012289\"\r\n        \"7708032052769928717028176619198122777638530567453488010312630109750759595045868284965451797591045295646909\"\r\n        \"95446785137801271048374474048614501953125\"},\r\n    {0x1.d8d511e371cedp-730, chars_format::fixed, 782,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000327017007584163488901739444514020270037333941428279849661973291684897878910306288715646201611544729\"\r\n        \"2044197663076116579400260859501397534190638166850065340773734328819697802740537774029895653491985746347320\"\r\n        \"2697651435032552543576203865042344086094884512708854406959942766511470532038912545588547952336181295560197\"\r\n        \"6898306401847016646603757148935068544244962351492995580088595361981923783923457114900478524857371577478488\"\r\n        \"9148021506306074395678311790193411911037000933819133664075399287969675494501573233226822323294383922196327\"\r\n        \"3911075731348319095559418201446533203125\"},\r\n    {0x1.124f0a5bff47fp-729, chars_format::fixed, 781,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000379431043001038469074651257189628076444525440676356092452525157808468573981563260749833451524921233\"\r\n        \"4464478218854372958354678262211764339276307076838216900030749536116899596849844045447638112903920508284238\"\r\n        \"1228428673664143676671917067921934141682782846048725912030100126490279750221605199758820182948609568808322\"\r\n        \"9631353675845188054656847706142232783217611563395233259486184000162893100070693463774052738465987946829719\"\r\n        \"1977645138114233180345854973418698873477770304796619722599145594351820432739557317057896075243604005751245\"\r\n        \"356048428902795421890914440155029296875\"},\r\n    {0x1.04cfd796f792fp-728, chars_format::fixed, 780,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000721523642857880053793775247959791749645526607159006997040539299925472682339901892690001761779717461\"\r\n        \"1834525068905315960874482005026718233604873519766104468453429474282071023466786318463963190522546001664489\"\r\n        \"6094981865004659746758400146543653868622465826282386230479879668218102422146770900114185171676978938400617\"\r\n        \"4907218638131173917391177799025997090172702992695088863786243857700360713804173414881425105352380025308263\"\r\n        \"6167965641333253133573897348355761500720074760832267536970270004610593799613186191805297330974501389530204\"\r\n        \"04297689083250588737428188323974609375\"},\r\n    {0x1.dad5c3f1c8083p-727, chars_format::fixed, 779,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000002627216902452713167932470255041063337972054455244298385747730999682583978564267211395222833881299723\"\r\n        \"2757040379717462115307781844607562060287839351012152481824654882380169383340203054012554868633139986721486\"\r\n        \"8694778426056050225253556169478909199723350490592251366959793551896116302879888102206434602990787939478090\"\r\n        \"9043154651068824471780599187704730395683969622213941713653102524381518253785899380703435327698620776191834\"\r\n        \"2522761430038425983329280479309262507031712731206614698754794756482645215365118609345332025802628587215353\"\r\n        \"7948037183014093898236751556396484375\"},\r\n    {0x1.c10f6676ee08fp-726, chars_format::fixed, 778,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000004969214075705503968584204786780350700796506481339120394453393586005551377900200682597751273073739785\"\r\n        \"6713792652110940037893610113477356898945426511160030786483638944556554320108083906843916705974904743791005\"\r\n        \"1659606462509034100044121352105519179823508882610455594247772185146701964604725737248860216514495753356998\"\r\n        \"3171669726672929674907814670698107960921254035124227163717402147831928058900846423923974580181719298414455\"\r\n        \"7569294727203564152805713830598552930337880093573159627635611491620130885270829508146408233073011684842457\"\r\n        \"125199643996893428266048431396484375\"},\r\n    {0x1.09d1c057f71b1p-725, chars_format::fixed, 777,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000005883012289142309938497422517314849471308186442110116208741734602315706040722695499665752771003657423\"\r\n        \"0300777822884959744956830203671830219446124424666866141278247274657433844948622004807122385264774582644514\"\r\n        \"7658614443065312831352488225116224202916968414513172723789935327375049417409831192742477495287436592133815\"\r\n        \"8977154606575054283207340894242487559060583627578757790014252843179330158798802015612057290111323581268733\"\r\n        \"1457996115464217508961009642396585239800211451843639845539784174057675246039415516356173045876598636308441\"\r\n        \"03710160197806544601917266845703125\"},\r\n    {0x1.4d15da31c76d7p-724, chars_format::fixed, 776,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000014743436359705466669425597004321834607160275202191708101647359884779278816000005465530348819209779595\"\r\n        \"1468193274657326555527683528423165521075539607371822078683349867541347863453219805292318913772267021247819\"\r\n        \"7939920891478945700675670578997649636833850295033438465261262013370652846731723982875478958167012077393670\"\r\n        \"2069690600361602022159246479474998393004303980486125738995295279594477648650045806279857474029772106803426\"\r\n        \"5336038275194781950606208085012372213473554552613880716866570935356126307329100842696616070606264233683324\"\r\n        \"6048399814753793179988861083984375\"},\r\n    {0x1.88eb0dbcf442ap-723, chars_format::fixed, 774,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000034783661139951836659834650869398120825446263038654374830389179725779207115608018307232395526906385987\"\r\n        \"0880824300939458172670455150508058822235267367986041627005790042997377904752045570140208853566396039690367\"\r\n        \"6479758706671069406990269746660238927428872711018746481991387760562749230806116297403149718889702098837849\"\r\n        \"0220255913529791938285558143796317931984839907097658936340062828470837435597321113430649553015925929159557\"\r\n        \"1639897200311940047402536426101840440670659097350647474752106036851970713051703441768301934192532745560022\"\r\n        \"53348196973092854022979736328125\"},\r\n    {0x1.4855037984a9fp-722, chars_format::fixed, 774,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000058132163840225073067103367504949528996314796226487824120028997327955421486231049647242313211271414237\"\r\n        \"8778496575931983419043299641654638440132125481074183643823625939890917321998087428065303811935078982220060\"\r\n        \"2167033080320155151816220164993979839757227461089845910506971715485581225714522454629832571060428488951781\"\r\n        \"2470097151684577794782847430343609839366343499101500085822887900487908381027204874540283621144246564638885\"\r\n        \"4403929804648678499580352812183946211325003975603679026913411470755820684245890767411404683725822603590493\"\r\n        \"99767172872088849544525146484375\"},\r\n    {0x1.9bdf4fb46cd50p-721, chars_format::fixed, 769,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000145846414348785044654977203624176621809552747269771057617162877814093719225517252963305984986600106270\"\r\n        \"6204141099016861315269834193670278038706183720282384066743585253501474455941764360418820933239666347867983\"\r\n        \"5374309483255470999056060106694347782347845835362429701209163392928524163109099636480828887360275436856538\"\r\n        \"4486139527103010105897105377117220903254753483449847373854388714229265424632795812369169390595111068408116\"\r\n        \"3142495388801854357102537942013401014877237805002520937425944193199261434930638999167445989980917975259444\"\r\n        \"574476219713687896728515625\"},\r\n    {0x1.5226e4ee6e982p-720, chars_format::fixed, 771,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000239483186457223836985961329660028613562628677384316778039396973577792511481656889953521201606272226115\"\r\n        \"7592996898267009926620304163787306892480776168521367052677861615450962220072159900888391196462355362792534\"\r\n        \"7693490035517321444407074677040871397493857962020084513631697854991807791579688729150375515509900214495298\"\r\n        \"9181255171836035604989077595260812132791624003169810582584626320410899186907744226562325725878972712953197\"\r\n        \"8540648124353963735950993977735246748350980256848276494637588925843014358359478327888418878023960023604388\"\r\n        \"42515577562153339385986328125\"},\r\n    {0x1.b6eda5fbd10c5p-719, chars_format::fixed, 771,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000621708419827233387307024027741745811040794443557706452277994411521409901799371808917832426374999543745\"\r\n        \"9708730084646622502439860068442286678698825944301025310781759139073356879664328313985698688601620528992621\"\r\n        \"0938458834733984789592348386885500116630027572299560688584147581500893126388510893377999861221311372707282\"\r\n        \"0608328932913850315914325737268345190442541755485660417583283209091584744628348620323940367827433654444591\"\r\n        \"3665648244575892101719754367791134694192123209751648906703932254444471579441803236519866181783791625470314\"\r\n        \"55687829293310642242431640625\"},\r\n    {0x1.ab54a9970b491p-718, chars_format::fixed, 770,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0001210562607654399725553132950172692385758887701305328620754199410250938136945199172975265888535527454069\"\r\n        \"0355502492846008444363980996763073434779142504236751156936639801445163726824422596431945380647995592024691\"\r\n        \"7322472515736102472858231199791467081222143445286129853107163927468170979507191259905972660712892501272660\"\r\n        \"9172179650580485452974212620040682347896625873062938122248292709475007817104483946048002761283617774953642\"\r\n        \"0318648112730692004377228716327738603612872108154905649944074828637843845058514302590590430101086250047615\"\r\n        \"0671602226793766021728515625\"},\r\n    {0x1.e52475ef13116p-717, chars_format::fixed, 768,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0002748668705590606257788154000143150149657512359067847652939126240469042698309526250008546726233302789172\"\r\n        \"2830936961339530184488254755562255682970365586832112135699056236684571478652609112761687391649248291660802\"\r\n        \"6871760284950640014740159858982599053352023940579474462685857732762463474346239252966327615023361931221281\"\r\n        \"6854907296492568241531562622742838180023526445880051872910350605799361364333221427514268379258902152396232\"\r\n        \"8572986542001771093889245315798783532919956243031568917427621001507696878876820335601470447414729214585804\"\r\n        \"58420328795909881591796875\"},\r\n    {0x1.351edff72489dp-716, chars_format::fixed, 768,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0003502765745049966247175754573508900191873148564109798029057617854775749550924909326628455469636702627849\"\r\n        \"2810014717383073851871364542031052664898987775267639214182817288866597944170052014552966290234588578538375\"\r\n        \"3539137637046969043468588558754523047422259424976062063227104084769533852903073076257032877285374940878761\"\r\n        \"3766827060471274377253799889306932143630282633642383689523347663031395573111905814969041986415140717123486\"\r\n        \"1512847412275052242804501401809980382251293818175788830911809550523953036512303536800257532449198727420025\"\r\n        \"53422935307025909423828125\"},\r\n    {0x1.9d894421705e4p-715, chars_format::fixed, 765,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0009371878794082113864014323852870494733158227237832610990196601812083859436006541366308855748222925121806\"\r\n        \"7569237130033979703908326234701870798568231434116803704095289921826427587751663751247850433354120894538773\"\r\n        \"0294878847952665795534233115487937191335435372821527508374752709460878565652044570927908258107993393568437\"\r\n        \"5053797073237697636798612040482671968552883966503139627626344881245978523301163061207480035276886103419527\"\r\n        \"1243460530832167912168889310832478542238080230255146955773958122072713426827081710062923927684330749343644\"\r\n        \"12911236286163330078125\"},\r\n    {0x1.e5b92a8e62631p-714, chars_format::fixed, 766,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0022015678401956501509913015563202673349273994830102214878621064509890592629710942073381394734079571892066\"\r\n        \"0717487730292989115288528305280638727413962106934831869139267022072217246445392935266135588703131037280675\"\r\n        \"1279330987296821526480487767504365898637613452426541908791360526539551414732583564950686053667485060220450\"\r\n        \"5899377266646047617280040514279127012951123130564005585555626870345590497806540537552635681909822254316423\"\r\n        \"8476156766516279219677862865539783026980640293512478470347104263432506258267583226624305482721499771514572\"\r\n        \"785235941410064697265625\"},\r\n    {0x1.5145b770bd17bp-713, chars_format::fixed, 765,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0030574111115052798755704223370355788580585808691529488807936764944992602196499942092750844854714155848637\"\r\n        \"5976497130637186256919022738489601122933480405757980718915295656524814620284490229794811067698027804710242\"\r\n        \"9130376602599274637302539181859471723845759904668345426627291624744410958365438947344354893144388403260841\"\r\n        \"8791325650128517766244303228585118902873034286845844905346105029784310865178592908660838937112931288536138\"\r\n        \"6306009764825661633654047990831795098362102506534239404342245751501345683352411639527096073876144544101407\"\r\n        \"51861035823822021484375\"},\r\n    {0x1.285ec117f96cdp-712, chars_format::fixed, 764,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0053732563210682168420160693837490128172921363352811330680377129309428579320206596965611505276898569179318\"\r\n        \"0647093390822649793019079985569694858841420483773418054150208979227588072543018999060176454825188719716750\"\r\n        \"2661464925503548223182782469269863121025084723548092520888452073422375220993719096473946649034335302943612\"\r\n        \"1613096677012827332884190800037895188734464273611331722229788010640188364868864193380798439305695257683444\"\r\n        \"8302578304119397235029009490306081909908983761213174092123799691360182549197602745922903305642037707912095\"\r\n        \"3567326068878173828125\"},\r\n    {0x1.1e8cb1b784211p-711, chars_format::fixed, 763,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0103904152428537288160412175725911584222222470068030213236664324514378750459993403762404929223250548826745\"\r\n        \"5274086077064876093516276776164403713633366717813302543281377633640747297431399351298595125078328058694723\"\r\n        \"1263392976230612840578533304141734065425472100835493726268324530250308200188467928130265502885613498267791\"\r\n        \"3492772776218471166681639555783027339890029254934945555773986614114209400275887172144352324622676982476223\"\r\n        \"6908887926431680967992576467915316169541976245690932214605308313278667239559618768710187730608396350362454\"\r\n        \"541027545928955078125\"},\r\n    {0x1.614c26f94db72p-710, chars_format::fixed, 761,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0256214462290950831557021118293237115025941079151976511923976832932709758776894370939764211603943341408605\"\r\n        \"1435086543068996317001994538498084889568900263520757669040740738052770788606744726394148829824347522901862\"\r\n        \"8575044652520202084551164343562830387309657146164986667715469091859590029098553279708870192289773041968972\"\r\n        \"9019447246584008116626378243936872732732951000293611420519701228387529778995846771832418528463608655479959\"\r\n        \"6666878438609204060954081373473785578227275825919510032791528243220806060685957293316522553894287739240098\"\r\n        \"7446308135986328125\"},\r\n    {0x1.cb0371a5199dcp-709, chars_format::fixed, 759,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0665761264036970766088826968561289863070801164942176929925487645707981749130488944459314043158227861100918\"\r\n        \"2966493486879017684378501068111704106608360294651257179423138281250615695075077090854993617483899793184073\"\r\n        \"7572721845366892918083935204513265098624706864674876252326384477185950873409277864722432308439377962972266\"\r\n        \"9538428780965056667683747977112330295981666683354446638887307886481193845762170827268609786650431284012097\"\r\n        \"1295474237981811083504503726588941354220904426249518102009195870956794005096163148113563856611563096521422\"\r\n        \"26696014404296875\"},\r\n    {0x1.5c0c6be27bdbdp-708, chars_format::fixed, 760,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"1009631512902304645646792774788606240482994106554289402879987679823841931516363676304196711548653407815878\"\r\n        \"0379274662627526750547647585362799781486959784193358918138494532134903128026449481063685188698857938834116\"\r\n        \"6108008035795636147154980294554173887909631712236290273713530124748884968781299725631320910455173014794362\"\r\n        \"7991788344775165642113484538015489634488837892217754894556857929193281905736745880779492409241135131603805\"\r\n        \"4729059183891803150331228050777715164381028996281583312150401039433149428272191061757567798196078001637943\"\r\n        \"089008331298828125\"},\r\n    {0x1.9b18dabf10f4fp-707, chars_format::fixed, 759,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"2385050068827948873606908831289659780771250115393856357311011604239164563273727553142587346786353833713096\"\r\n        \"6789101042797565022493713355971935140100646122626554995637357166901585570403935901437484841248343592371289\"\r\n        \"5425018681697218180777730838941739826991680525470154592625646310685921758514356927323761938897634452280393\"\r\n        \"0420356789506446385314138879887562460700399879791522534084974388936628423572042785968578321886850655792667\"\r\n        \"4158021419955445593384336788084225756068439195770951500391245958229237201130896626685706785053753264946863\"\r\n        \"05522918701171875\"},\r\n    {0x1.a3e82b920dbbcp-706, chars_format::fixed, 756,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"4872323574333538300731694203713833393972787664039702754863758731172772544445786685972698198591014902707137\"\r\n        \"0646834020728366930715533377952042405272544808690873835324162678305034764863415184756426036677847226141483\"\r\n        \"3261356449196109510818245763145775913293657994758980747920630459771222224503264224646902589868229507753779\"\r\n        \"7907476312181193636149953794577688763457731731398729105343322181898119349835402609162685622645375626461203\"\r\n        \"9375453042703799131923481447004995888932681929161145303655014857543743212251038596227736832133814459666609\"\r\n        \"76409912109375\"},\r\n    {0x1.e55d4e34997edp-705, chars_format::fixed, 757,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\"\r\n        \"1263700063301883961637593345853650848173698173906203553947316800214949500052155115279306618384733383355823\"\r\n        \"9012593269879463412835243497329655831225472435522686519182378700969305497526912686191024754645697306870198\"\r\n        \"7762145427468664520014456587758418342960524150909771188685359678729708491944850185052337045874514571952057\"\r\n        \"4137475072159689914997940459086273680774009478900069713199343055246913368028437896195004050375544491283694\"\r\n        \"1746714816416655581946140115510899932593584992390168732897366379179420338335127806106417125420193769969046\"\r\n        \"115875244140625\"},\r\n    {0x1.82443127bdb92p-704, chars_format::fixed, 755,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\"\r\n        \"7927923533931952950586931510282749592790453715109808832297352620022802755310066252394361312560633056624429\"\r\n        \"8444201320939750950080181045198894675756701860610234013571800216193558312750617204334599296344409701776745\"\r\n        \"5629192373004068874618729305040214979501665418511156657769937991179760363455405882943393933388417275007027\"\r\n        \"9238392034119581576347126335201240604873503387124270592794021386497103267133076944317349877812852252494116\"\r\n        \"1179202904954465216073197261130107718452951168115991671745272658875064850016612522098924387137230951339006\"\r\n        \"4239501953125\"},\r\n    {0x1.c3ddc4e626843p-703, chars_format::fixed, 755,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004\"\r\n        \"1945272696274143506064751591019143690519608938330793458941131430315420967011543669286107587304069881291831\"\r\n        \"6032656187170995340885670400984520535211128358722668170887203873605927186042732064909372141468474051452393\"\r\n        \"3678415858455418832312297913362303042355926367090313440035220453662023511344211217569805253299537764581623\"\r\n        \"9298412580286410353907497125866517188536279462904565662754642482258294680343001078696867682334679872718368\"\r\n        \"0479454352306477125153503393953171166192097258701941353102439406321508295406082916789713976868370082229375\"\r\n        \"8392333984375\"},\r\n    {0x1.85179680c1b94p-702, chars_format::fixed, 752,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007\"\r\n        \"2236307258538304887715568455167838293359876919019126748017947977725350522616163447033071439365285720056989\"\r\n        \"1830461200043803436029630915487962565111962873028113557121533529866936632303307488823207702072296748481648\"\r\n        \"3207014721774399563123795598496459219700635915793195213974388269457089126242058992162724467598411268911353\"\r\n        \"5041058088826843891771253918599206993317190354583185164130892272323989170581794237052458129973574375453130\"\r\n        \"8094598405624524073068109367799283444890475986358854047759977156130022709224630661495325512078125029802322\"\r\n        \"3876953125\"},\r\n    {0x1.03abb48e8728dp-701, chars_format::fixed, 753,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009\"\r\n        \"6417543570694105910088319847436003732314160404928095487625173156883373210396589866754925983282318468734151\"\r\n        \"4860626102306640936393564625714042933596543888017233328739922582864914111709598516057698962957292905855399\"\r\n        \"0934567441164734848774927916780969315595016517054297439820165043351563820924614514119398727275481604029996\"\r\n        \"0756386042271669947379377208367499428338782010383566943029832407667528711616577681695535866646659071647091\"\r\n        \"4123908388130256787445397850940448407274826997829338472227774193835039834169289840737349095434183254837989\"\r\n        \"80712890625\"},\r\n    {0x1.79d5b387ff6e1p-700, chars_format::fixed, 752,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028\"\r\n        \"0585349996703589966336796826175106571975204649309557050563077827633031484345239137032008779803454425820674\"\r\n        \"4866910610784094684492403144435151475937744515111924390411464700497548572775572008259531098399240604224725\"\r\n        \"3517988248553695734193115760399581199810397072263038625088021364839346582236886037622201642160557316228189\"\r\n        \"0103555689859162509848338625648592047933217030304094512319642425587221267340543997848488412451689626096242\"\r\n        \"1731401304347032543208984574360369687689530249039543537052391590404689227043061316990701925533358007669448\"\r\n        \"8525390625\"},\r\n    {0x1.f9a36c542f98ap-699, chars_format::fixed, 750,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075\"\r\n        \"0988159427014312640429110041769881035201942013657029343734130067244322926974338613539238512172550847669836\"\r\n        \"5998866305276024893441213037826183892778818826707997956017649120904325241743665960314219979480619321621023\"\r\n        \"1177346799866346420303044037594349839926813988028994250545012004521866214882022642695520100672688043593341\"\r\n        \"7381270902368080551319092204034520022717550201235816920625743921225883595721830904852424989083302494971511\"\r\n        \"2537048990771644337852326770292330505646617071974147492442400818596083241288074994201906520174816250801086\"\r\n        \"42578125\"},\r\n    {0x1.dcc43228552e1p-698, chars_format::fixed, 750,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141\"\r\n        \"6213380898374425888696012773925654197350739575085630499979667280211957369283336141916504406947291611976826\"\r\n        \"2613417266819735171011252694363255137697340061477369007916565648469804681108757661755312573049783211164497\"\r\n        \"8145679474573981972311296079824919626411465757802494339700719610313560013496068738320814076437003493972563\"\r\n        \"3348163814481607333907526178386566404869283988033728143227953720373312739138525006452287158896685331400467\"\r\n        \"7994616929497619525162625201512449265505741791014482315261649149642060813505950456203663634369149804115295\"\r\n        \"41015625\"},\r\n    {0x1.d0b8e4fa0662dp-697, chars_format::fixed, 749,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000276\"\r\n        \"0873558001601881053225136698606642770173156021946094638327654441239750277371604376302401333375838176249127\"\r\n        \"6659190098605285263009484118213545876527089266147750636296374559822726010162486378474347864133504874870383\"\r\n        \"4735859000210058479124286122333688116257698505115434325045276597993086123951126307272369830002097643093349\"\r\n        \"5710899703696215964159459884254130282807854308585437044111403605197611649243454627518304997063068990328191\"\r\n        \"1439523509412904776158227500132102989654165218342241668691467145045506745987262675612328166607767343521118\"\r\n        \"1640625\"},\r\n    {0x1.b8f44bdf82c3bp-696, chars_format::fixed, 748,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000523\"\r\n        \"9340425140704756747489929431788793795042333762247082503028355968048391910974058508728933672225668737570005\"\r\n        \"6261215037225973259022020420098146267207044708247643902378832911166801581099385424260935460816884100119757\"\r\n        \"2191136678325799358574956793126756634659899667264492014922184163522858477296368823993833665523722738620684\"\r\n        \"9134284083186625764919636375233175292076301811863180189057807144486547703348615966037782155726693672292036\"\r\n        \"5383065976756986827449157248366853644941097600101121135313051876576380221084416888288615155033767223358154\"\r\n        \"296875\"},\r\n    {0x1.f859c249f388dp-695, chars_format::fixed, 747,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001198\"\r\n        \"5208897227798591039255948760211295972666003794523598898895366020833219755267124170139715038638699952937432\"\r\n        \"9645641469104729428750120637526367360593775039076317110708918658483802996513415675328247462305935532785334\"\r\n        \"5693077234597796127995527491563794867569650848921446775522592734337766008213264400815397407021420615343117\"\r\n        \"6922528484394185175495700629128401173269414579032286321428360062399315349631550183174906062438748159785851\"\r\n        \"6867445804419504747204630742763446810820288164538437931161379214648832550182966372176451841369271278381347\"\r\n        \"65625\"},\r\n    {0x1.76c3cf6d25fe8p-694, chars_format::fixed, 743,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001781\"\r\n        \"1558999586523701977647593653910305007237069848717168449377479088923371990969176642927894674055304613438567\"\r\n        \"2757693904280120418869003651550514604809425577325849506851929562524269723511223669099656493330621079242842\"\r\n        \"8532458822479610900457972964267869820261321558949972877826760738857749922382498268945857045773232228967821\"\r\n        \"7862435840327482891491017196268320347469034697494415172295492230087479206891090890393696595327575030145699\"\r\n        \"4053947741352652623430920429779814837285839361266979135427518008642083779946574395580682903528213500976562\"\r\n        \"5\"},\r\n    {0x1.b9755a541518dp-693, chars_format::fixed, 745,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004196\"\r\n        \"2642963537321076602226972991351491104742192225758657473795663642271950965237649181687944784531856492724856\"\r\n        \"5355071455733746569152196344022113027036138256316024271384693248884883018412271913955944148702408979980059\"\r\n        \"8227265908537135628614882879304623430375054715224577326792297458415887012265235615755629258591793791972164\"\r\n        \"2684984061588604707508785500264498166000046974354417486291970140109533598016391655783942366698854204024234\"\r\n        \"1326597783970853680579332068366495230471063766360766930156215738360360456571385157076292671263217926025390\"\r\n        \"625\"},\r\n    {0x1.f9c57cc980773p-692, chars_format::fixed, 744,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009615\"\r\n        \"1781021743031816511544979411331543689547428158611066559215048652158551199908498702146817365187884427510235\"\r\n        \"0184914401779293504720175219084860292010793608864288357348223601530554819113162490280742714226103002168478\"\r\n        \"7171977026814222128547887762200230029015250967853285838300682440492056232862759485418693647725985578269155\"\r\n        \"0194921251369678834994115687793640049054121013242722791010216905285005198355969738557592934334727596160210\"\r\n        \"6476021831384121674402994034324448547614929792406649935288203665277248499698714567784918472170829772949218\"\r\n        \"75\"},\r\n    {0x1.e4a6ad7e5cfc6p-691, chars_format::fixed, 742,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018427\"\r\n        \"3217982706919314195292561843137165719736900892305012012130249686911694510640542037676336488393653370589959\"\r\n        \"3926243894634290961656111329176900212958789868534462454579217822486077398734081760380838049395837069950654\"\r\n        \"3978807720930663055229889895108185505411486872655218182893989627872308830406501574228862140716596878643792\"\r\n        \"7548378335753538717584899573810158933553784812321272086670136727163721373068830685498179085517895127339316\"\r\n        \"502913213462282092457461996729259367925729225844679795995907374116934418495361569512169808149337768554687\"\r\n        \"5\"},\r\n    {0x1.7f07a911528afp-690, chars_format::fixed, 742,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029126\"\r\n        \"9982895385131124804481665511145926540207193470398340387598672609969994161817640184411539843887508097780175\"\r\n        \"6292715018257904858834182291752430373823021727552972791080884692201603060704926189600310048340391737094843\"\r\n        \"8966311208231185033304572841707248092160456783790763408486004595206503050586030453811311128662604284676407\"\r\n        \"5936585430228638201812353595012412234223879718936063316892205505647505934328410726502253892713691474035512\"\r\n        \"661765215882184128685885148232309762780083810333437476996260755753714866145287487597670406103134155273437\"\r\n        \"5\"},\r\n    {0x1.2f7677b3b90c2p-689, chars_format::fixed, 740,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046152\"\r\n        \"8401072508039743461478764594687924995319060152189993535433087430486392734217870019442835051719190583198144\"\r\n        \"2553656510713656782715994845953583576738777953421944638587676427093083206700091872060828263730375628385820\"\r\n        \"2610054697985641847092867237293850732450712511768642331141903450743921108576381371538542093509778445466239\"\r\n        \"1896052825203789490508562830204903362902983806769511223761396562871494245090115486737359776750854944284169\"\r\n        \"31900349707338395187038758203101696045112352978425373877568505844026791606893311836756765842437744140625\"},\r\n    {0x1.c96e22e0f49e0p-688, chars_format::fixed, 735,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000139138\"\r\n        \"6772566309644863656584159407279723917996714126567001591179665817923235637133008261506410949101418557178525\"\r\n        \"4848693614484716795497282176097625998871970849765483775684436859404701647425834608609867577180263832815174\"\r\n        \"5048857014012740612630489661352641380657382676143555519292913946041768889166100234254192155836433450264248\"\r\n        \"7942058638252519054514988104354571006977764996434201232882858207017178083239851389686775235683257017738989\"\r\n        \"819696745189651711690480619467448362029039063335112658375929128862225070406566374003887176513671875\"},\r\n    {0x1.22d28ade59d78p-687, chars_format::fixed, 736,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000176921\"\r\n        \"6229598528527461332850010251663094336550047608731056718174696113525493748257680175022142829591808653632854\"\r\n        \"6854876086315581591257086836506015699884337160251577236196765287883732610170710275347081986155736728834817\"\r\n        \"1389238633597943605260590532313554987754629513514602287999027427816764146389748365110306868781667345159075\"\r\n        \"0078006216779943448818722646594666610858803694648045696820707766968873627985895833280516684694909979158824\"\r\n        \"7445999167063696700086089680623439003509639588506091337715385447548754882518551312386989593505859375\"},\r\n    {0x1.11c6046b7b121p-686, chars_format::fixed, 738,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000333099\"\r\n        \"8408443947605288487079001788029608005563452878826501581531686943608952740413095239583871994525013198697303\"\r\n        \"2072884208419659788802381838961697598322675897538299253098251482071796658315377880753111823559966218895976\"\r\n        \"0234085615296503616542869646489633287956485382288755269890623114565331375644977306382168232365205848195478\"\r\n        \"0527519640267849674880834409948792776098878986583370660790958130647909965835962545756566893462183435137577\"\r\n        \"475484134256044426417195954897394597068043838268279111764305112919348772493322030641138553619384765625\"},\r\n    {0x1.198b1ed81b492p-685, chars_format::fixed, 736,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000685107\"\r\n        \"0184689406742258247552337040437801141896330300976996683830234784171470648296226787368745596153712885999062\"\r\n        \"0757466205693946622570166193885204514544362989255474993548388832557811929371181931092445652573418316369154\"\r\n        \"7291239901087983503297008739251704634191295723900352242758748498461092182730567399414962801117339622637805\"\r\n        \"2571475242760502901622646926155686083616098433267498422890941426625604718466269019951953415552834787603402\"\r\n        \"2294815245715147598466779192478520189164084980440014264351823725096579664750606752932071685791015625\"},\r\n    {0x1.da6addabbbd1fp-684, chars_format::fixed, 736,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002308892\"\r\n        \"1688496223736447698070618132190331861821537468965751360953523467964117030458093659711888679953431325679138\"\r\n        \"3016641616913805533295082590105365577700220213661827891554176114291090426996418755045595031272391436505633\"\r\n        \"7843282569335669119776810340847055881483383938852947141165661430884677477472557582460844244118662091717997\"\r\n        \"1616485032181643293539463714565118379358749880808820996661168372725964919205188069147711554587345138910813\"\r\n        \"3001777714280339866642455389931961554995216357284980538007966577307428224230534397065639495849609375\"},\r\n    {0x1.d56a8fd15797dp-683, chars_format::fixed, 735,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004569104\"\r\n        \"8306445641604873487344582286150036188199466936663762245861254367951253078053084337328657486501850324463993\"\r\n        \"3585428847066193727231878618202759175994292635769866898199587603013635816698477200737836786434113051057221\"\r\n        \"8930930147956667737444440711664958909309074610966569304085097304218562735090854035050636703161868796892880\"\r\n        \"1205899327226333183208398450978715639442169140673197444986361607235881156993779171410174755922663555574675\"\r\n        \"719765400978001502127488303683860400844254815568243693565432528291836433709249831736087799072265625\"},\r\n    {0x1.f3aa6275d60fep-682, chars_format::fixed, 733,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009727078\"\r\n        \"3116371221191762939854842941752679733416007252745486261609859880583198730913356445623264907215190864856034\"\r\n        \"9300936337143532788944063699216212541764989243921159202999554308982439677599213591449347542999436251484507\"\r\n        \"5367400598016897410898113328837764425820423149230175473845973261109374719277837435612064676023199513247523\"\r\n        \"3045514061072806455531384785125604686392921739119523946853964894459653941721178135905207621152684004902257\"\r\n        \"3637782547046925665674774262349927107727157916980699199453741510268400816130451858043670654296875\"},\r\n    {0x1.0771405e2a869p-681, chars_format::fixed, 733,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010256959\"\r\n        \"5461606064887268053153568553376580639755792494327251483572538700817220146427627585189751601766830964808276\"\r\n        \"5100520184753913789297871952035445488088620858709522753885949304861830749926997065358822603151656880892231\"\r\n        \"0311911551509347891000650194176893926784616843323525236120607465290160351740627831830419575892237962611722\"\r\n        \"5434610903951368692523709576945339194613665397373662186644403123786205805517732846357614413846370081728352\"\r\n        \"7981808733394394904977790897574079405672970002302133341216816564411828949232585728168487548828125\"},\r\n    {0x1.ee86c40e3a880p-680, chars_format::fixed, 725,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038508135\"\r\n        \"3673303142922963813598370635291867582327185276827025105817590405888719227773819147337110305420544116504406\"\r\n        \"3198381694452180707110771386166181668775638237942600526891996199641936902921727029456397008323941915328700\"\r\n        \"1381507450019492771172674531394468387904917636365192202428543052485720105094951785815459324529649949108075\"\r\n        \"8552190140197561235432547384533244708479422634288198456340738382181879371165666648289093435544310798152408\"\r\n        \"77180188791702678289624792713938430940614004939666348281690488875028677284717559814453125\"},\r\n    {0x1.585a84931d29bp-679, chars_format::fixed, 731,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053628739\"\r\n        \"3449776509413993969946640629094467941055963527219432817297286274505728731147698006956225575431890876170408\"\r\n        \"1183778334542989247871394210213720706412612288628073749264151253516919514035102739759677470174957006029397\"\r\n        \"1105518911499917452181725574726703070746493199644653852365211489160451206420107780390756479522390212432361\"\r\n        \"9544844002276042785807115068477468180307113909637285338877284767145679505652290144854230292183753537507320\"\r\n        \"81888124338330413581757188688331103832532131348029085481099453858178094378672540187835693359375\"},\r\n    {0x1.7a49530caf5a8p-678, chars_format::fixed, 727,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000117826704\"\r\n        \"0698182932174834217027009303240135587983161895795494778452397329639679691686536974300676227793009505677020\"\r\n        \"6268004366695289302094455927014979167727325035300577934263323507469848151660165476262236690000163522812199\"\r\n        \"9818487048077260073912048682449024882889470093045872007457557688072661279040149182649600739751786706476858\"\r\n        \"3773797722050584699688170936184216507537852151067693436150301794090308536030638452862988298951930409076787\"\r\n        \"7812950822319769876550077524994542753523582646391944239727678223061957396566867828369140625\"},\r\n    {0x1.3b2a42806488cp-677, chars_format::fixed, 727,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000196331985\"\r\n        \"4098648377579926138397987021624086250638291157791230954668880010436584357590182633139799315461668124712803\"\r\n        \"4783577265187254152367638373603835684085721284008785144391510528355096890087564980113745935085538658214821\"\r\n        \"4277448008315767986422179942596365826145629817854524429745151872434160383029615301814906845447565080285068\"\r\n        \"4760039871190397496653333003622016920199196745166870414860204176816066138383274440078377346130079835809872\"\r\n        \"3210470279803874144148526265154314849414816574238971946808618440627469681203365325927734375\"},\r\n    {0x1.c83826db2d099p-676, chars_format::fixed, 728,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000568403391\"\r\n        \"3906094698176268428571086565481442596666460955736241020609519321090743659280674528094060498408491736387123\"\r\n        \"9453858101075259619968299460644164129331162039955588226898372684026450148478891405910277662364390521228588\"\r\n        \"7702971170286636762523478588329475238357643857562254782543377143330981224562879633930733936614162483272666\"\r\n        \"8737257188160360666910506192611752260105743228060751385289440433302908709738748375198084447829892022351978\"\r\n        \"76029202131802937817666288074953338254840490731769654664251589792911545373499393463134765625\"},\r\n    {0x1.ab36df94f8e93p-675, chars_format::fixed, 727,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001064532175\"\r\n        \"8200814413322079175861714925420398312598654352133555760997816258375072365309746623458451602566928889295558\"\r\n        \"7817123557658132010249725751416542814066399908321499983973004793509504161485004080347135156251003544265824\"\r\n        \"9039229363606436055076672347113866815163628981036236168445495284717579960502642475861507919904976041523930\"\r\n        \"1735078975625527410821978439898777022303097916766691649207535368545176326930298026323109512486224382840655\"\r\n        \"7136280207205919064795260099278785611381060600944513383492306957123219035565853118896484375\"},\r\n    {0x1.50471d0714b77p-674, chars_format::fixed, 726,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001675873128\"\r\n        \"7663245067929802646359253751876178073393718529381383029991245143140589642891986998226638001813841188457154\"\r\n        \"0760722831242178043882468016912989619180020502706117428233351747395942121515884241840494596513741316837905\"\r\n        \"6082846586489400073062815260306226775250614217297608945528700853686763895314550239200685720351426929003281\"\r\n        \"9751222225759992649072668129215176147377509677947335109118716015043007331011463548126614761292320640235481\"\r\n        \"244469082541147893929952413974668845082847184134976215030832236152491532266139984130859375\"},\r\n    {0x1.af855fc3c3b42p-673, chars_format::fixed, 724,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004301053857\"\r\n        \"7728233744816436369978549136976645950673498532952391599320329530671325173016013614684923269901956026805218\"\r\n        \"0793702299742913140983893922344975035501831505450412114109672135334397735251037816337885684958047399272301\"\r\n        \"5478174654344760932744538761509098314194729572674808143340483916485684814524519684382188211579232287930164\"\r\n        \"7036270532651278165887797562530738322949801980031349707060037709951853600603902434774229050505469076347146\"\r\n        \"6516501229666796891561067299047712433489573159196839302609305377700366079807281494140625\"},\r\n    {0x1.ad47ff12ec668p-672, chars_format::fixed, 721,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008557459533\"\r\n        \"5115486808557631060044950010564116057553208117505835698979224270605230907269762845091732308470041266117508\"\r\n        \"9528304438909809546901546014735177540676134332138472881953762100352137042313700018497337879496165918958028\"\r\n        \"8095025616031282691409656494757870534052617087201115566268802280358798705227412553213249254918373148019358\"\r\n        \"8714200446263056192475952356968184570908882976764095565692431171738149734334933275867032274731426465263327\"\r\n        \"8520834947286422890756022706803482172043515997794660421504886471666395664215087890625\"},\r\n    {0x1.2cde48f104883p-671, chars_format::fixed, 723,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011995252022\"\r\n        \"6992914307720900091625850495097564336893566868492558667583379960647579954874123322170419152753964502645220\"\r\n        \"9815018851332492164470421724613555880809966057218791771626349729814754804973560650793674682363383237004497\"\r\n        \"1478862191003379588517783537674469445171979807397050229507286000499451324619208184934162672567957907818111\"\r\n        \"4399636409904600629831838939433010105053112940441364353780773903991851843595958763125312470409739561953852\"\r\n        \"017096495437565634136727399479205502966257918494308309931284384219907224178314208984375\"},\r\n    {0x1.946b82be44de8p-670, chars_format::fixed, 719,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032247460965\"\r\n        \"1804600295377863954067981650497106921823374028264261472171109156258578967142316411532502936521798048216973\"\r\n        \"8157545429617260751948724545161550164929347900143444386071167553835944697344697087864752815321198632661073\"\r\n        \"6196192472752954130442089237547974876620142022818033285626625689427902211778409103868338300290375416632087\"\r\n        \"5502896119062450104680129128035887883334678002414605802479763479077509165796055809909187564387126800148849\"\r\n        \"99019899375412526120418451580793367541540907217356703995392308570444583892822265625\"},\r\n    {0x1.4e2c914eb1616p-669, chars_format::fixed, 720,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053292453195\"\r\n        \"3875908539985563008290215902251892089800145159268567401221559574851017261948902272744481687181065927924279\"\r\n        \"0532067763545710634025583260109326608409177908765413576800665981400561292836008934034151241045070961228748\"\r\n        \"8674782406889048222974675939075183083749350058926420756371324155844981444967496091500674139367439954339942\"\r\n        \"0079590395243378093609139932034856238785018363295943683098880386632449051383959973682724787639613141872635\"\r\n        \"547279188040318374333051363586680061786428168335572053138093906454741954803466796875\"},\r\n    {0x1.031a309da2912p-668, chars_format::fixed, 719,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082640741741\"\r\n        \"2055757048866712577769208988306963483048452588757830285597514371579074785748875864556108189585740117180728\"\r\n        \"4355107415836864226327749292226321475119185672293258316840326519229032767352667901178435935016012515772658\"\r\n        \"6340213926226357951008718726295609928330587708283588016053330527448486920594671005732915018619212965168501\"\r\n        \"5318329907338056732349660338068617793043851447322041736375085808880727801220330300011248000844427980884934\"\r\n        \"09434384997049557284279503347774175966576788721074109389519435353577136993408203125\"},\r\n    {0x1.a060575f96216p-667, chars_format::fixed, 718,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000265606661513\"\r\n        \"4470260327011265797749984328048196385454700741542428284140883424514856308075170706221412771217465750892413\"\r\n        \"7864572400279619393621332803019113819666352713459007233981402275694516349005956646243017830327712282448586\"\r\n        \"2567538309483936648467687083454023101421747900088673106584510994727995497457418865781511761412333864356302\"\r\n        \"8626906070446864245505579419695971925496500213147639499943211009347841516900893974938018917246441902822916\"\r\n        \"9215643606811336644663330285421791733774070365381447800245950929820537567138671875\"},\r\n    {0x1.54ecbde19e11fp-666, chars_format::fixed, 718,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000434952149729\"\r\n        \"3475053093372496822267881905412564744551512923227327739429847369248209024683312612536596673638823546885178\"\r\n        \"3217815040969304503384094458178092268115210023143078678982713079920236767336151237300129605293701448857540\"\r\n        \"9843644914093858712844401591080267607833338989064400429719805711283629488600778865792251541980345788332959\"\r\n        \"1860677420929683457043719638929479106102316101892383059298162219248469505288001393428207449595659030610532\"\r\n        \"1231640691595930251310123645268261612767922430489164753453223966062068939208984375\"},\r\n    {0x1.9b65bb5e316dbp-665, chars_format::fixed, 717,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001049722365714\"\r\n        \"7530461540305772931267585053715061256250505487087888061029408785894563215220970697678764383480032593906591\"\r\n        \"6205702309557577375277159458987036426427633182733447713021968370263145361858036928289137615212740149550433\"\r\n        \"1960559979975536391905723334450553852881134362068216711904999364434749875519041157852477294908282245377846\"\r\n        \"9194141465743679238160144163995956438907303935779751926152780243481780495784919204856732854249500399151396\"\r\n        \"209309650004291796200412761177808216423411324935699440175085328519344329833984375\"},\r\n    {0x1.9d9f0bdc97dd1p-664, chars_format::fixed, 716,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002110793667228\"\r\n        \"4170528945594825984539537267894560074842735445651564636232548380045553302817073544554452002495338117462053\"\r\n        \"4078658991556593400119244710172233781404038272600835408871699423495545285788169382119890019819420166458488\"\r\n        \"2960325446094595491519667713215219785422905110363553929458253876328347995783978350150958928634440423464512\"\r\n        \"1978246820592353953489916252647358865343115582584946414230154135689901732367690272225496245117494074301275\"\r\n        \"43500008710404569387590416050499587800361178668850925532751716673374176025390625\"},\r\n    {0x1.93eb2c4f59fa4p-663, chars_format::fixed, 713,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004122558338833\"\r\n        \"3102048516138791115797958837443685538615330228158010372085611196534261347478949518515573803887042776683357\"\r\n        \"7772299895100679885999472136933656647575247856639421484005247092295404547283959255810537283939153615280537\"\r\n        \"7136989128030010671552377676024122283837285170688576898765577337301783627428040617023286366646630475684076\"\r\n        \"6048041588267560017035084467460711609718511878343601909600068154087444256240183857041447304877667616320791\"\r\n        \"66770683820072204968831426390708208735980111470098563586361706256866455078125\"},\r\n    {0x1.8700df2babc4fp-662, chars_format::fixed, 714,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007981480278624\"\r\n        \"7251835728077164402394423392733891469600650972933646922261786684070011768202491345213497635405836392947390\"\r\n        \"0800406081157910353783243643114657359608848833361253991272841241506805336597404984340460111575666022057063\"\r\n        \"4633816720601395545604136254404189400125104060973148928687734799098012124540258682432908196877083204176316\"\r\n        \"9112950312043616184359878531487269768561814660148368024122515583353773744932580874663344179382612758572700\"\r\n        \"658879417422882008015735820127939371092240516958327134489081799983978271484375\"},\r\n    {0x1.b201def031dfcp-661, chars_format::fixed, 711,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017718621999986\"\r\n        \"4749278205111055912018589125978374066197669227881315151030387724345170052438599645613022584219802754045709\"\r\n        \"7953259328816059945423086088311184205880616177141549770021804808590354451776189294939184337822591600499156\"\r\n        \"1326393998653795376111965350552796482851659510178079054575114841420625620468727215117224421601426553623832\"\r\n        \"1843973232791164313798871412962471835220626769195827947235622110286129050558540240156290211298337387790447\"\r\n        \"592797183168010955799288442025804339585715041494040633551776409149169921875\"},\r\n    {0x1.eea8eae3e8e15p-660, chars_format::fixed, 712,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040389599243158\"\r\n        \"3045713943332535252503895076311479780934520547693664806562418678725835547328313110433294021273363893780503\"\r\n        \"4780928606430945625290707275674257055573884215037232738872408635230567690455648167913395447674811798960347\"\r\n        \"6636196737113777359352989798512837038616023039381374775032016160259230267044393895005846414569114236964868\"\r\n        \"9274980703156713685751795983584096488275612518695440933890975685190809613062696118817552579235707139519482\"\r\n        \"7800525263513822042296462436685865367291814465033894521184265613555908203125\"},\r\n    {0x1.390918e84e1b9p-659, chars_format::fixed, 711,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051119492579282\"\r\n        \"8784499200892166815538511338797192605313732010342891943886281580483256028685184519802880654753328687915381\"\r\n        \"9648906041551028274268562539865070406913488612853213504179833758904018370085949144695527290774041634025375\"\r\n        \"8524866274063747781132401746798777790016957543570989997195287670003656195376339120010082958104111194123452\"\r\n        \"3057045814769439813122209299794155552909628221725561202867365610428802774469140416562260181400463623856109\"\r\n        \"377838127752113794699265665949440735904563126723587629385292530059814453125\"},\r\n    {0x1.349996396a2a7p-658, chars_format::fixed, 710,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100790299803776\"\r\n        \"0352523794006745248987438542961217419593457359470612193547391686242939713156571235245311076881428119502761\"\r\n        \"7910521317137030995375115802078871982691238309826759371170232609459580549810568192299972653249096884325031\"\r\n        \"3221638661194719787077329566666878887174893856785966934635413242893764663291559650768477552318529073392585\"\r\n        \"8486893893322471447037807948195595931183280571682149505994767510801571410366742140930448555537922888340438\"\r\n        \"63450758146748423007478214340356358069694664436610764823853969573974609375\"},\r\n    {0x1.f935ab4c240e3p-657, chars_format::fixed, 709,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000330008036855068\"\r\n        \"4468997281648174946382804357406648407085135196092613471039301686552051097935919700597874153854575989644816\"\r\n        \"3001312075836919408774992875424396582242361864068964258493416789105073380194371666385477092586697492100694\"\r\n        \"8707813186404234711808827184648116380332875382803236194612865656418592304556264448127467316824428949345174\"\r\n        \"4559312297666397212071127248105910099473454119853995537371389125448670178169533053377812394755221610653250\"\r\n        \"7338730815426432497099038104195443954491651084026671014726161956787109375\"},\r\n    {0x1.a6f53d0b3c96bp-656, chars_format::fixed, 708,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000552560816345404\"\r\n        \"9291209987331594617821867970163640989621616633942511247613790383333508155046427218235057156316491736183253\"\r\n        \"1565079731835808231681862371698864689080324447442721208730527087280035670998979685844651802800071539294476\"\r\n        \"4290733974064232720563277639560254049527765853489875257055682697413713754457568012174731815681092948578849\"\r\n        \"6812174881480413870766696992766235423337878308651477389960418550866492165533756096688199530990443024609879\"\r\n        \"186497798459794215161380336108314093035431824318948201835155487060546875\"},\r\n    {0x1.fd60024c9f6cep-655, chars_format::fixed, 706,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001330915646612667\"\r\n        \"6327720798888520711121310973719016756617814609392099367961465512997004022190634798593712344809012654336912\"\r\n        \"3336008687248835603759825341297324826585552662290670252876445576563127635381521847011482567784244524538302\"\r\n        \"4757386520155419520590180607348277590132836378469352051761008545687687211422030370707996919463285443656754\"\r\n        \"3001424200212283006776315002739251470698678414022677441491080589922168267970859024072320361540091755329141\"\r\n        \"7625497725089895008484400045455087191470511243096552789211273193359375\"},\r\n    {0x1.e59d51e4b3404p-654, chars_format::fixed, 704,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002537666484635187\"\r\n        \"9796446894886180118923517375928916788468439012038559075591863943949905482322123331177881875117581804566750\"\r\n        \"7501033007502798482889114822353165030685871064806380979997518713085247211620359113239321892013744736508277\"\r\n        \"8750155424105285638558275846595641108095833746918637233220466393816326595449266228517373855397721233293129\"\r\n        \"2826069615658590284856893342692154277412999385588950569011586612223617034264066429835291956640345600927392\"\r\n        \"63995560422194101981991352402767692097995677613653242588043212890625\"},\r\n    {0x1.8f3d063ff6ff8p-653, chars_format::fixed, 702,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172584563963082\"\r\n        \"3234884227494718580270580351053715713703971375362827503015835943180643599018229301247410673453137023511444\"\r\n        \"0276681218585911086934300107994205504714104860990795054228564285081786387946659435399143288603999513076571\"\r\n        \"3915101684430478057187716062578581352152485071389375497738696764199545096908565956533808131306607814317908\"\r\n        \"5025594301665865165419361839755147261933143617447462954222697482489653056327589852788118074865087443355257\"\r\n        \"133659824688533856429351574790498347056200145743787288665771484375\"},\r\n    {0x1.8159ef44ecc50p-652, chars_format::fixed, 700,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008054891565255361\"\r\n        \"4245327177394068343716266241601526344429862653871128012696092458059218804885886107480434857599667923902644\"\r\n        \"2252671328552262873096601408628711791229287582758527981933915133142134968110008715888249271436059630596140\"\r\n        \"4470471333694306867890527358826950270156557243671697176671195161373933098056018737049190157906233805878505\"\r\n        \"9859208293885656813869546314004329986095442735468526295545526700031871588905460237269435492004550566040373\"\r\n        \"4502280634268682688319158924361573781425249762833118438720703125\"},\r\n    {0x1.72d55008d0c7cp-651, chars_format::fixed, 701,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015502849382509784\"\r\n        \"3440460370798397879919914389804519263414392212798173044323126828666473147181847563172722840418818164653948\"\r\n        \"5739004681292286501559984214520409467410522025067113001633353673145348520816452122738504834936009445548134\"\r\n        \"5858287796349425693893136700437728509978189680979782742705639939458396578936557826813559243399450305997531\"\r\n        \"7336632094495939639412468591893668654875973774769313075947026064138787210391211167533235338079298709632988\"\r\n        \"64021730228539197981164725337333010202200966887176036834716796875\"},\r\n    {0x1.9201b21128595p-650, chars_format::fixed, 702,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033612132087463898\"\r\n        \"0627641406841899354617686842148860032301143446825734706041256966895952741820674848370981567388239748345166\"\r\n        \"3727282009910827224470704709509768673820498493219005964909450891961198171946450746546423822293731129894706\"\r\n        \"3876944271555985439646295509571516123799953826967960151184500280021456011548758751801505762629218754188327\"\r\n        \"3389152455349837490381121103198323908767726251799354114660609589566292021099683629126336132681375017182897\"\r\n        \"009957109717175163086000551360132959644033689983189105987548828125\"},\r\n    {0x1.bf95124bfe3cep-649, chars_format::fixed, 700,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074845511815508472\"\r\n        \"3892730981516819500550200911616094734357271511038419504657925524225163693049480606331026030748543057238889\"\r\n        \"1688588143450382218513326026803605897969424969769987065915072269864794505831569673103769471550616591376104\"\r\n        \"2449960552908237115424423286884529903161183095179884684148801654944710608786162313126721614660037498120830\"\r\n        \"2481577617962127682956761128429225789873821642662460485927840445817073256000215184821622111810604090217338\"\r\n        \"1508385840983168502105714325889351812293170951306819915771484375\"},\r\n    {0x1.05319129bc0eep-648, chars_format::fixed, 699,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087354525906889357\"\r\n        \"4305134993198538601819826319241490003920850539716474513772902925780905472224882452658349705414899403485023\"\r\n        \"3097163611935052314576367574441871757087775557264027195413961186352049851840434775056187475847559854756176\"\r\n        \"9991964884741367086470668693809581118019784131401775478072440977727369632271191569356706813323315849604381\"\r\n        \"7399119743256577785689328853675146190840651483635609176766549227988267805333064068837038323167938402444969\"\r\n        \"732430229950789418789762474926163804411771707236766815185546875\"},\r\n    {0x1.45af476abc232p-647, chars_format::fixed, 698,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000217846293363428304\"\r\n        \"3343840105255044439608213317204687613009897078192597109690692465986277592691408555959821894006630173944450\"\r\n        \"6095505079093888034941798418116106205993729784916404753702422780710280257369318292232376849888355197691630\"\r\n        \"0540442163418491631515694653811986348691337937295430285982645590934421669065895422886406865184893196951399\"\r\n        \"3663120591434024270813103802297202805654045913798305355456148879564224219171817120132287862611600613532154\"\r\n        \"24961010708322035390495374773678349811234511435031890869140625\"},\r\n    {0x1.08742c45210fdp-646, chars_format::fixed, 698,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000353779487507535463\"\r\n        \"8913487667852550214946932963610024162769754777754049503207158866648586079495607698068514216489730410356517\"\r\n        \"8852282691667659608840113035799925615101335443096451382460948062815012073693165291377269999829137971766737\"\r\n        \"1885531914227220137110388078345964125965517531862537092344718621338433299695967540557698214234665287119367\"\r\n        \"6499222460810388807942854755170323220878245060297745028548986169193879532454353341863058408893334590778864\"\r\n        \"88131187709654153499168327545731926875305362045764923095703125\"},\r\n    {0x1.e06706f5cc1f8p-645, chars_format::fixed, 694,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001285340064812500204\"\r\n        \"7663650303839837768770868178827228680425989408577299035277697772519128024365042269006137521958339388319697\"\r\n        \"5265503479494447072597343928704527629935234980629701495621199539547037556144229442345470079606428052792040\"\r\n        \"6982515008146955967451695398724643112299643103663775673910972184612760788176258685407613564239509832076960\"\r\n        \"3757825318678910573482963656312687065092042077801896417210663056529091563705356552511784874489831495682451\"\r\n        \"5887701286388062303644996831053504138253629207611083984375\"},\r\n    {0x1.c3b440515c5ccp-644, chars_format::fixed, 694,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000002417112508347818585\"\r\n        \"4577296568973058488028696120773687858171527751677783966413609421158848849895950071414992776742766462322480\"\r\n        \"2204953078177500746806460413182965492695822167375307505348079714337003905535333983330970718150212643108119\"\r\n        \"1942010252850595523287033985789669321526444757608927731550951889320987373819142026991025156753856607046775\"\r\n        \"8974459713102558552732954856343026723690055888710021350990995482922051405478223152042970325171164381289806\"\r\n        \"8027460606431856653120160416392536717467010021209716796875\"},\r\n    {0x1.ec1433b7cbaf0p-643, chars_format::fixed, 691,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000005266324045366900913\"\r\n        \"6451576689712462018780864628757726838532298564973456520124312425159168990966344080685284372048038208798423\"\r\n        \"4515131775332141605827039252921143204800571618187675999431430968489137764119560673111591675947868505036349\"\r\n        \"5734853368006928166562436836138049592492697802548236478358520529617766739001729760991012386263493969655414\"\r\n        \"8089055580137656188780075461507170901101717759741393603409206482184290891472920793565653525360904603890315\"\r\n        \"4631796610265874469813951463947887532413005828857421875\"},\r\n    {0x1.8c19569a7d35cp-642, chars_format::fixed, 692,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000008478256274282182518\"\r\n        \"7637774072036156880782589649318925320904558902615305403899383502544659296812445003369004692272970420908678\"\r\n        \"7736189120322426639864121576693397330358676265593198834037152235715817069429196893999010101159401639577556\"\r\n        \"4940509800763785671916185917507549352955056824078478279323005977928175814655943739879529153802192464682133\"\r\n        \"2904342665749434907103144778825208546062155400334839930506320175047419033723187526321855645168117515248133\"\r\n        \"77187526721215880820547994289881899021565914154052734375\"},\r\n    {0x1.173cac50c28d1p-641, chars_format::fixed, 693,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000011953794466200874950\"\r\n        \"3089102238478026639921052296675200014471809570790044403441032909195396359467854674486635101108320842702261\"\r\n        \"3298248493375000791593832932371433932593882735113346414977063157234473260032991012413221117379942112771102\"\r\n        \"9828749938473236600379940134825736762734725227898037573008988801081557260969989479404890006031075166624593\"\r\n        \"6091224381302042298327178250130131804494601858274360658601193326491878588046458827201053492998972995592881\"\r\n        \"612034128274647988565693168538928148336708545684814453125\"},\r\n    {0x1.08135c62a0056p-640, chars_format::fixed, 691,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000022609509033348430712\"\r\n        \"7953571409359772803095127336982870579907579119353490218219476852343306243082097399103467772270922940612799\"\r\n        \"1080253983816615286662244932825455671700708034737857635423884374419500761222456632014380804220304282042074\"\r\n        \"7378237753242365104911041411953627565913238812923726060254300475841047934769828299971163833702491013210688\"\r\n        \"4368456208752682043195109425417207350414578454666981015229526221786807006629498234932288311629150104730890\"\r\n        \"2301260328539765642741343754096305929124355316162109375\"},\r\n    {0x1.72e01124a3b3ap-639, chars_format::fixed, 690,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000063506864504234787217\"\r\n        \"8929168588729103731776207466253764586680356459178885863289433494789731250844399343683952454007404739476733\"\r\n        \"6749725328888569711409474803055530435807449641300011244092091474018423418952728173503582967907318694311580\"\r\n        \"1574751104695176376459974319398945754927290668438086171312346739449765872904568371150068097358639249101610\"\r\n        \"2674324978548862178535279004153515354065688557841667305151505498091184549204957731460112041598585348160002\"\r\n        \"997507320447907741556292648965609259903430938720703125\"},\r\n    {0x1.e830eea3741c5p-638, chars_format::fixed, 690,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000167190923074967877248\"\r\n        \"1055941962541542126534534498202745103521416813473754421206073199908259895165254281215308516227579576489577\"\r\n        \"8735494523984297364116892188309417901215384208003196885624368929431305416422077941961631852052529884088373\"\r\n        \"5259511842062191605411293040724181397647254696152715588357759798505784923294550394615297009173171305766832\"\r\n        \"1239633893088513813960814378062459350506405709672403745380004055867672638841096510800085511376306229931840\"\r\n        \"104611302550048634874002573269535787403583526611328125\"},\r\n    {0x1.a55edfaa629d8p-637, chars_format::fixed, 686,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000288613756649640442593\"\r\n        \"5836871058312095311794871761541473264597878184472595985606367097373222668869800877529088552860298321376034\"\r\n        \"7946479274851840572577603463445319811450034511292436661004993488187289413747157834399722720957051814536777\"\r\n        \"1828193789342477235604363994624973813101513850874736399835055553921246983579323413022256111347411962631273\"\r\n        \"5400699442241274001058362449373364010127032398605780375222148055134723634623868533413931267400188526019835\"\r\n        \"69028279257018265724354932899586856365203857421875\"},\r\n    {0x1.e4fda41f3dc12p-636, chars_format::fixed, 687,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000664379586224470887670\"\r\n        \"0882126955463017095346819946382451479929742057573428918996527161429215879870342327877002116707737471812527\"\r\n        \"1022578143361434990908293415374062860783204142547245813244888835503055355847444914026775323520290486751277\"\r\n        \"3040962885818846901220232893236930669611199419249964239317528893854558190936267026566141425051313849752100\"\r\n        \"7225928542884374445025424006780454091529598201395448030060249965799465147365051550806948573291876921601661\"\r\n        \"574797868976827164289034044486470520496368408203125\"},\r\n    {0x1.b6c6d5b913315p-635, chars_format::fixed, 687,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000001202143587794451254987\"\r\n        \"4307758373463485567732529548696497108946777892373338498825233998851190169288250470729983756551049200325340\"\r\n        \"9646038667103199192178730894714971640838750321839454360839834009539364164168776033623418700333871719470945\"\r\n        \"5390020102928159467155523872584982511528028983638984992933752520154204626796100307564534943738721194689085\"\r\n        \"7172860201104002606422391817193670983149333434914995143903809339065936913317470198921690228366842475023103\"\r\n        \"730967012105212976535995039739646017551422119140625\"},\r\n    {0x1.3d5cdb61d5eabp-634, chars_format::fixed, 686,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000001738996455539959270302\"\r\n        \"4922101071638710228058853010454955816287203412674019899135279944202376472905021337258625896237726018892889\"\r\n        \"9086845828533503606946253121325963450366034526072666759964392438712742370869822534456387489474784033525648\"\r\n        \"6925055706840475130878149016154785918583949575125805400818453276293215346026410674679840945211540500433754\"\r\n        \"0444738954378827964445928741978867217483445923848187815353826331562166817109812355851913263269115033658801\"\r\n        \"01742535317199678246424809913150966167449951171875\"},\r\n    {0x1.f66ce3d3a114ep-633, chars_format::fixed, 684,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000005506102911439653005578\"\r\n        \"1180408544466257723099083034183419703118907194804421094663580781660676273528898210088043157496678446111711\"\r\n        \"9754411304894464276186456426615997746028595767878242155456834626624868962582541328173269874309195561269455\"\r\n        \"3222682503348082494541469600607497030280636718224508777918266791407040625019889179303603943253832051368754\"\r\n        \"7095452177893522474675770324240828465783630281774188233607627719489884195763554935119805608804359250562788\"\r\n        \"832806214445181325345402001403272151947021484375\"},\r\n    {0x1.172470deb171cp-632, chars_format::fixed, 682,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000006118268064240605714527\"\r\n        \"4956363318000274544013834890966296936024088988282930612184978650264904063655374278708582004982437326041559\"\r\n        \"0233856953389263574865715472704679815904138025683990166563353576868412611739320572220306167036383303769522\"\r\n        \"5389013764717715215814805406610147515377607379775485559684197286852537353051075869007562299900213368314710\"\r\n        \"6802833986208071593930453200187676542794020322742581458245280814157780849754554959666206298998924518407900\"\r\n        \"0110764778863625679150572977960109710693359375\"},\r\n    {0x1.cc8acbb3ce387p-631, chars_format::fixed, 683,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000020188412709311976353396\"\r\n        \"8847463117825496600276996261344169082492136032863543011831648858571334555566261701752986650828364633304418\"\r\n        \"4467038786744951677948833071723791600087614960102937653691668792334319658741997691461247264270712989910977\"\r\n        \"4676963858447867111579389970137833126738825790174333853081246016781765389898239014268504426857552292598582\"\r\n        \"7575131219352802416195149318400300767284708891985212138097090862874407767109082004057353578117944082355823\"\r\n        \"88012711863023440628239768557250499725341796875\"},\r\n    {0x1.9d46d3757a126p-630, chars_format::fixed, 681,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000036232946244639112367859\"\r\n        \"9034222123633353467207374535237316730425316040231727778261368214560242254952821355279147249851468071176677\"\r\n        \"1401620080053891581170323531895693937748727877484376357346761417436052398995962478079173907474651509305526\"\r\n        \"4266635365095100713321919597667540136749723807220847445420758981591982639725443239909862127078321763680723\"\r\n        \"7422939172478544940856503420152322393960593225744469796950069542703289361136545581165109048996725791055641\"\r\n        \"976122492220468984669423662126064300537109375\"},\r\n    {0x1.5c67ae0e78895p-629, chars_format::fixed, 681,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000061090986836497964518361\"\r\n        \"3034251803677236517703159998560778927294990338309622508444992574831348449932865299573396737151577326827495\"\r\n        \"4172919206030684034095396504315336582435878961553782991955748926193970550206763007484081137435305555643552\"\r\n        \"2138895914617137092399936383134815807917765598260378196445832081792336947146274797124038277978644551890909\"\r\n        \"8850496398248618576556315078630943074008429474547571168137788454818734275718514862324305325582256049241387\"\r\n        \"124183744194994005738408304750919342041015625\"},\r\n    {0x1.2f87783b2188dp-628, chars_format::fixed, 680,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000106444494521393955412029\"\r\n        \"3562115247343756377243487613631475018606616016886866548552742932471940087312652947117762081892330009241880\"\r\n        \"7938199458932982907434008164124277908316169896297883791818928979893497865768452217871938696060258968304822\"\r\n        \"1276340627860312652496975952271428426254825821668512842041106458866495101696667393908452425062908044661195\"\r\n        \"1749184112580887560614735875984935407829451159190376056173778082528014814837904155465756260167144994723578\"\r\n        \"38456837431095891588483937084674835205078125\"},\r\n    {0x1.45f46f0331583p-627, chars_format::fixed, 679,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000228617862225339546463393\"\r\n        \"3869150977954140226476306611561116275116133228638974195199741021195291306564050872265758690240115070370439\"\r\n        \"8719380294227416997052161951256350653209352580842353263790206260382725737738392485788340428836466740504832\"\r\n        \"7486120146547623228990845060225911954280445788970650881258700268953440414567426028989215999185465069229332\"\r\n        \"6167135314722644650223345597852365197619401218926106143322634491976351864041964794405459684276785193309357\"\r\n        \"9096245573367696124478243291378021240234375\"},\r\n    {0x1.6faea09dda3f7p-626, chars_format::fixed, 678,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000515769054862210954959362\"\r\n        \"9126143515284893647092851878483329360823349342532024278852283016013650378000284570160481222106076337348452\"\r\n        \"6437814702584827526423100153911962913962801720855275222978938897800051178817984260633179706125463586728357\"\r\n        \"4036004545197262845773427069014263159092844402553818370891779652412651376958400520895665884571049344041722\"\r\n        \"4854583096664283015562359037321257706712436261963397344208984603540615634271876312622767073101055486120613\"\r\n        \"234601872676421407959423959255218505859375\"},\r\n    {0x1.fd11ba94c244fp-625, chars_format::fixed, 677,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000001428201918168743641580506\"\r\n        \"1570582957797941162203963167425601499169707767566576137048543241444320531168598156511583688427686195847212\"\r\n        \"9897937475431167531842729039094949094354884306009515806723673286503437496509105787378263832730335840309201\"\r\n        \"4499545668583556513012056701640438893215817552078525004382652304169786365593370561594916572058052968769945\"\r\n        \"9243337232320280125250787257153626075271940536628789995287096375595375273874864083007789293393194551628306\"\r\n        \"78485175184277977677993476390838623046875\"},\r\n    {0x1.c90c420cf0b65p-624, chars_format::fixed, 676,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000002564510265800063807766265\"\r\n        \"5089472362542882984305302201347516398173403533180585976534161315640938051666852184516249354632293221050056\"\r\n        \"7375141201380918228455858352480628723115250797285514387548153230939412238584051887667836321420415401514120\"\r\n        \"9497251639796833017773424919290240970816054977116200075111851757962310125684874866527111631793100174964969\"\r\n        \"0210063583111446018923027887259222427377589680137555787871347433236980870707367622303054550973142518028192\"\r\n        \"3215108719205090892501175403594970703125\"},\r\n    {0x1.d391952e49017p-623, chars_format::fixed, 675,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000005247085617955439691422075\"\r\n        \"0697206729680930693393806189392472186972317553487714556786098233769482799791950847693693459834579021626839\"\r\n        \"9728663746626185262113984143990716591357062201655858886386541140904956275446729344345153423037862697984444\"\r\n        \"0459329023491130157174730485458049630374966675633574693062515331282157551074828734058892777864602540193250\"\r\n        \"2132098401926185663426957522247203760063557453586246851349782431341310393754891747355941298035050636481939\"\r\n        \"345667768748171511106193065643310546875\"},\r\n    {0x1.e503a112289d7p-622, chars_format::fixed, 674,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000010885720130033327524143787\"\r\n        \"2765529244852077494742369477459509342651047244598374475232481184911356612413555554232574757514637326804013\"\r\n        \"5876652521025979481372233742465255701574216453851850773665954943082477224263880753119476116577310064807731\"\r\n        \"3173127810010776926951954126705625347302718942538734107223165386053846061743415904126374880046187387430900\"\r\n        \"1371907275412415986910905389530960445916397265583237461437838296424402663589369706999567230223368430449756\"\r\n        \"84957620387649512849748134613037109375\"},\r\n    {0x1.e034bb81e6223p-621, chars_format::fixed, 673,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000021555608982793881032727700\"\r\n        \"4540968764480579568571570505024962616865742631615116082852242467220033430009273037170918392497696227267889\"\r\n        \"2855734329337793196374074077906107741798474958876784395016707482885851968709296922631032851601097932395854\"\r\n        \"2929769636255440339987971068117759495033682455054731633575352264020137520998691191325549281307961732743070\"\r\n        \"1664065014159113051007049027294417385656848243327407379757324330354356057073833205658622215952604833557465\"\r\n        \"5023805235032341443002223968505859375\"},\r\n    {0x1.7b3f7b7659658p-620, chars_format::fixed, 669,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000034047560211390398233126309\"\r\n        \"5681521292291635730852337465299625151417698607026609316841829263617487716740419967495013736445763182743473\"\r\n        \"5109538407361638706698218674138096028710135167744227329690414138172185751796380050875945116419344891273141\"\r\n        \"2683260466660309502705263508594214867077018498322662919022245296769732774129634242022391711546658347775048\"\r\n        \"9319804904665210544068620174295287490121780224036319569306523046197506575595216823978488395241784846001475\"\r\n        \"983712225570343434810638427734375\"},\r\n    {0x1.c3de648e8e3c4p-619, chars_format::fixed, 669,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000081134394501696493643970170\"\r\n        \"8958448590502242119848052707979349489721600419940655926461604975255618475404233150813807595154285254949233\"\r\n        \"2794224255592679462840835674273478876350075563767085192465140862054717785123414363518932443771014783422046\"\r\n        \"7755337811866996207513082672638554911611527398619286206143324159777057005675967664862641318690146376278630\"\r\n        \"1641433145360549048637471436359609252939227081020258145036152809972693933016744703307415890333677450929616\"\r\n        \"981056824442930519580841064453125\"},\r\n    {0x1.5c1fb09f4e5a6p-618, chars_format::fixed, 669,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000125013356525501566921482019\"\r\n        \"0756397189716009459935755363577571000079431383938798649139658042184851112712146728342127592621185516412687\"\r\n        \"9795171483134847347119197259993669087956672047493648606916988245162007574697567061860707121759570383676749\"\r\n        \"1895912187880027559965868163003755005006934407345014860350754751682443596085778380356571835395956213185132\"\r\n        \"9700175990805493922248400632256332804710138784602977702939272921306113799173519196290497784021327441761339\"\r\n        \"827053234330378472805023193359375\"},\r\n    {0x1.96cb5454dbb84p-617, chars_format::fixed, 667,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000292164551451979908816970760\"\r\n        \"2906968238386236762223990983897090126665641661907182378337682656506472450151745907015395922255032710247182\"\r\n        \"6621854724862603904799242549379013755638688487646302105947642271040607916570764780353314256670601811103414\"\r\n        \"2393048937580440691645308998693147226694463319568298046502370889995217710647026826901517825918460806798933\"\r\n        \"3594250399158272041774723734295398882676620527578590726337454864712217649593312757082596259176638514576396\"\r\n        \"2327691842801868915557861328125\"},\r\n    {0x1.17e326744eec7p-616, chars_format::fixed, 668,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000402036891910035001370326183\"\r\n        \"5764714669495293870775410413117761488534112347254852152707553781669864371194117900991196066188913092094076\"\r\n        \"9627436025320342933617917135113353168931505731050779793171834786790514287864729512953780153718893963453631\"\r\n        \"5925232559264867798326985595199078779815424832599279718167822934433244010294826462930764848126385680015541\"\r\n        \"5081163596886320108465071997702885841948775719040644829951801535215970389698672803213886459437536799454981\"\r\n        \"91727892844937741756439208984375\"},\r\n    {0x1.8d0730dff1c35p-615, chars_format::fixed, 667,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000001140601491854304861112957904\"\r\n        \"6078472017190434076827676333703184492562745517458722933909773128140863811860680440723519874767311358167542\"\r\n        \"1832304460289731814158715726226721499893358385121455295036409753755696291856376809878491444622602781279561\"\r\n        \"4298253285437604990024681376542185656441137513607157191982929093989227066316968345458523994262768230938095\"\r\n        \"6856546873709262441718817170600788510391208708618239903357485935403444561300988952253751086750397508717824\"\r\n        \"7349584125913679599761962890625\"},\r\n    {0x1.84e464adc9bbbp-614, chars_format::fixed, 666,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000002234456407425392988160245295\"\r\n        \"2105121463033999896331509753060278603561383062671020092513964622839910827392979612072505380639591971850586\"\r\n        \"7953302822071585340945473684155811269041734009391899894892884998655950936230307166985243115317803582559672\"\r\n        \"5766172839564272885227331529420345731439115502642545507672856789487309544230679891279458896193196132458740\"\r\n        \"3615865918507170866263260790615432342540019426259929855207218540356013049043725298895767697004814678063411\"\r\n        \"292896489612758159637451171875\"},\r\n    {0x1.0f78207ab56b3p-613, chars_format::fixed, 665,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000003119559897062789212478702782\"\r\n        \"8771258554467274331378106474180853903784890176470576278085246910031864176926682381009757593827972184358523\"\r\n        \"4379937227458526717860732051290204395780473433869536107639158198822468448383115985094636099649840128948812\"\r\n        \"5559457224226066168139585512180838489229070664388435003461492126740239264693377932479421857227522247537141\"\r\n        \"5195959735820466509414273243741084753632448488495906132266682527804921511867261441349881244530437007789203\"\r\n        \"10767716728150844573974609375\"},\r\n    {0x1.5529ded69b52ep-612, chars_format::fixed, 663,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000007840889282617378434989914048\"\r\n        \"3375110468365507426372771215508168337980921036043285415746083661506063036302466033726799126430809923626284\"\r\n        \"8998613132804398487495251763436683220632776620778652222684238885184627406388017322992084499241930369275029\"\r\n        \"4188388326470646133479933189911245652940004567736087396799055775383956456338672302480006246520779594987653\"\r\n        \"4463873259186889135949555497350644501301606934956057533627187656477601229539927078260013316828025420335279\"\r\n        \"704886488616466522216796875\"},\r\n    {0x1.a04e5d2b8832dp-611, chars_format::fixed, 663,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000019135749100368870646470019839\"\r\n        \"0262952327728712239665529938333681387879917544259402053032888172184347996533360676967652656209466863703861\"\r\n        \"5650212192538996283931574068143975939412425055532002285154138267248351272320519185851595688434551396579504\"\r\n        \"9048363748503832341974546972797132904308785650071473320174774026694645358673515775192868362553696596252586\"\r\n        \"9243235045262356311507524517217651891403639732096190614798119668651216373161579595099193750774857480934088\"\r\n        \"016510941088199615478515625\"},\r\n    {0x1.ebf813b0bce87p-610, chars_format::fixed, 662,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000045227279193825361739063351116\"\r\n        \"5816088894220038747993788047324185155542688625056340145570989028740361933186216690467386983882756961652575\"\r\n        \"2554075245242312500128389337302506248357336421615574134467730176141549296104524998635489828297481285095734\"\r\n        \"4018034514803369509095471164975265590462906153614392945616567352114257599835958658796913640401549715379516\"\r\n        \"2213343596961334963019303057799158031852299505468028659494469866878455865686526428769137627913798915813003\"\r\n        \"98684106767177581787109375\"},\r\n    {0x1.c8dc05f944175p-609, chars_format::fixed, 661,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000083999229662967713528086187594\"\r\n        \"1734181721582943453713679770682887344457568102457262391541221214178048116785539260638908340859917786703727\"\r\n        \"9505483395285085546986591926783022944458139895520106489883316870842496789860725134086126172959651037933921\"\r\n        \"2932675833731449835177604422499681212807486567909065953977706557577852435843117665011821890292937224415194\"\r\n        \"4407190599525788891487127925011008301298436891926527553092511054346791910148049449840910399972537803137129\"\r\n        \"2308904230594635009765625\"},\r\n    {0x1.b3209b1f6e28fp-608, chars_format::fixed, 660,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000160007032096671255227914624485\"\r\n        \"5932247987306293322327633334915277238729554926380285362725895588754187504410829470800380833095408524162170\"\r\n        \"6088096341188012914102423428466410628525126202526153749617372677963548106623913999568183279653957322862821\"\r\n        \"8216958967402578450494409099521871624849947515643100378317721954170792449254983258149261584544709424748265\"\r\n        \"7027764663098328744606276097725901287038160277123370277167439630181736840759407891672679545569391024173455\"\r\n        \"662094056606292724609375\"},\r\n    {0x1.5eb78be3e1518p-607, chars_format::fixed, 656,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000257934513258245514911410956676\"\r\n        \"7562491252934434271200538926296978958690829859567102593189280347819932250798685230108492816467372748857184\"\r\n        \"0826250257687412060697694011629067923734034125963698115546615166584861817323240326079480806578051329196807\"\r\n        \"2293604483722417509495763200324740129764135772142565726176616547381869902883598255059031376990796862892570\"\r\n        \"1707243543973426496727951436282295386607338694004922738045019598655644155617781674736874175657419527851743\"\r\n        \"62361431121826171875\"},\r\n    {0x1.8c46fec031da2p-606, chars_format::fixed, 657,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000582883665073076040413742690611\"\r\n        \"5103909148140022514359612576808446722817107364758841777661151831975968413666955572913538522125935081938480\"\r\n        \"1826429486676475866814876109309418283302171512609831798840104165292921800206023581849348651578578326708382\"\r\n        \"5667938561003612904320383015971953887054691593216595738675834030671283768765741396909279577202197486279725\"\r\n        \"4041005408861321458736807313694753554134760028963271223622555231690394620121743439748913939713048648627591\"\r\n        \"319382190704345703125\"},\r\n    {0x1.86231c6dfd804p-605, chars_format::fixed, 655,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000001147704191955315150375531124228\"\r\n        \"6463359086338700939173534433881149141551312845676541528433370751398526129520536020012344236954486162733765\"\r\n        \"1189410728311021716825316418209072205209059768027017097741944446106051476144926058634185661890784220028337\"\r\n        \"1765359783819221589931961870907795236477229042736793261103112697240517930987177209588268015525779946791717\"\r\n        \"1661002569274579372573148249479204708825803923891308204782759202811211858909414701163803629313520104915369\"\r\n        \"3020343780517578125\"},\r\n    {0x1.6f91c9cea3db8p-604, chars_format::fixed, 653,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000002162629407013831871202182833901\"\r\n        \"4812165466875626132428688506066130661223800325245624218990344615529115525670749882601503297142177345848008\"\r\n        \"0315944694557039046086653470574190248564560937128913048158665762605822060055463866322246382019655628800529\"\r\n        \"3509078032902091923457112717105630806377089745970685933260769211709292606271388326560215405129133988014651\"\r\n        \"9818852439242793594288516683321266294987653057491978352698407891148399388724798573721552763515774131519719\"\r\n        \"95830535888671875\"},\r\n    {0x1.2c556f28eff41p-603, chars_format::fixed, 655,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000003534083085250713196588697362884\"\r\n        \"4009684695670072958139623317371787746358871058121738979142765604242918427270683241572493184281442612016647\"\r\n        \"8731717470396051187190782581219012149682498960891262131383887862540827723812764302327419934805449703626395\"\r\n        \"9980391539791048593977360916969031572048106601825361653601806771067623066557405101165728100046261785882799\"\r\n        \"6936464081367646380909919085410798272389504087757458521098222151497599140581734611116920818929543202102649\"\r\n        \"9569416046142578125\"},\r\n    {0x1.e2ce238120917p-602, chars_format::fixed, 654,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000011362518681203582246140939809705\"\r\n        \"9223323329750156082286044639648432325619883104525374377905680212909118662350839847885927093395163376953078\"\r\n        \"0649407320374552076732425727447144486616834978424123328240435501922796366280503312783365917365174312756198\"\r\n        \"8572368456666284554871791776494899439446052728289589990958105355180415493189818268179755941618181564000540\"\r\n        \"7784338743308334629146202923761771009708242041718279364773719393293011060833410329727610754702027406892739\"\r\n        \"236354827880859375\"},\r\n    {0x1.24196dd650362p-601, chars_format::fixed, 652,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000013748749674401770954459165335871\"\r\n        \"0817668762928858869536383184052080983005439632688737953615326333515273092605183293467910096607640374531111\"\r\n        \"1830830508814835515785355905748622176053926586912542510160402062117321762649513738716450171265643756029288\"\r\n        \"0656933026350543942598594789753370522566816764442872597848560704959503464200147147833503265827822922002568\"\r\n        \"3402460874936529235179643880011367428188255501497400935841710308348831778207986640399917988020206394139677\"\r\n        \"2861480712890625\"},\r\n    {0x1.02bbba1fa294dp-600, chars_format::fixed, 652,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000024356505490995989137168281913610\"\r\n        \"7318300195609360559665735558886820956116389467418480581762255051188661816646626267444282690413817201444989\"\r\n        \"3795379843474624297167025933419508764610709545226859545525423267148372678245393625964579526328349325430932\"\r\n        \"7948354175229582990655951038920732423389522537707078330518124609826977512391397642546757797290343067143148\"\r\n        \"1636818520619080862711069451537886787670702841766022628816887598996680028595230877580535278070783533621579\"\r\n        \"4086456298828125\"},\r\n    {0x1.7727a07c4162fp-599, chars_format::fixed, 651,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000070632264615999984553004824523934\"\r\n        \"8283897468159126630872763421931645355509398841528836700413839674582977495411936486820912787231863213987513\"\r\n        \"9732279777697874927785641034817652246495648429400839683868896349629374101573069328602934415866941417964147\"\r\n        \"7778991331825910198740299059709639508701316549619217498679468403879124284804538594740895098332413481316117\"\r\n        \"5020589785207957510152588199416767215272118503559179297817854115327571908552225891930742562863088096491992\"\r\n        \"473602294921875\"},\r\n    {0x1.8f0824209bbd1p-598, chars_format::fixed, 650,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000150255416353796503238078049262513\"\r\n        \"1313183655790989368653096202076874532796262768734136081147985410699406855342631734193395304686021307845963\"\r\n        \"3625382833323965064677164571736947384885291112411592881140044396780914024598132155156214698736369926767688\"\r\n        \"1706388447416844297101906935142001824747991763834646676407801031790115262730812163741809882810243615841753\"\r\n        \"5712121276660471303203703997445462957681945192276164531001748843715848335096879964667415663370775291696190\"\r\n        \"83404541015625\"},\r\n    {0x1.38fd6bcbd252ep-597, chars_format::fixed, 648,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000235712700143533653223369319506338\"\r\n        \"3685611322315984499867376583641592003520123238822480733091626959027132489043347310332422282332634014516663\"\r\n        \"2407251390978949674797437265536789249726404535232298423612295401912372253892958284036129629125122165807669\"\r\n        \"8365258828418743091325273815121460476829034268030371060463325483826466509899620357858435828090556121781442\"\r\n        \"1238282153146407800701708790804195215186079052909417057069881006589923510391969274646584153742878697812557\"\r\n        \"220458984375\"},\r\n    {0x1.c012c11b55edep-596, chars_format::fixed, 647,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000674887905042332015324048210127833\"\r\n        \"1502439998508787893391432699367881011894957365460991991605179947757459060525555878203957825322038920950910\"\r\n        \"9252093330695496204972405029787172312068416266365540069370928438467957984442296261215105474404132053309569\"\r\n        \"7944637666129056903335338002909782715289955453489346958075162849226922751023079456543002218531124432178119\"\r\n        \"7259739015770754506414529023440291894714329082622622972215277366512912337768656523273591574252350255846977\"\r\n        \"23388671875\"},\r\n    {0x1.1aba0d7a89944p-595, chars_format::fixed, 645,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000851686068755673214987276620373728\"\r\n        \"1085952043392178312399545911742550474447761121572681949922758384553961681252395804477406167243534340829825\"\r\n        \"1404715463428815375105825383201600093367466911186381913978815658791653915337152942484396358421701705185374\"\r\n        \"3753314997692566402365290532001538051110759554425967289016047067802859859690076647062973391344549104412038\"\r\n        \"4987346780876600067145267828322886717207767364116600071977157873861187455284682545908481188234873116016387\"\r\n        \"939453125\"},\r\n    {0x1.fb338c7268b50p-594, chars_format::fixed, 642,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000003055786593521295839437608695717332\"\r\n        \"4154082751196112498539965546191859384115363199888292606660746361125668283340484037571383831699018204666021\"\r\n        \"7446344946472933812140353250354288117258476863349697332813418892391221042590921932812226156621483821181821\"\r\n        \"1400416693170662727113985478183823335721980028025030361593055215041959837190521923332064259055002146620162\"\r\n        \"6391931891093110222234205139677685160791537656843706503862113584384899329926543742885769461281597614288330\"\r\n        \"078125\"},\r\n    {0x1.51b04971b0adbp-593, chars_format::fixed, 645,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000004069012575835781931389065310465960\"\r\n        \"3597467313761268844991087784245249784829428847210475329294275518716491653412136379666423494524195163953742\"\r\n        \"6384878238066930222719005716702736354770121804434103616468073547678393421386666695621433539998263784859566\"\r\n        \"1597381697776886918409632666455919979846021303241798302378411367222817251826090015529123859996461440512599\"\r\n        \"5189283239303437292544747420798857552235240907507102919238856499693549029737782429805292849778197705745697\"\r\n        \"021484375\"},\r\n    {0x1.a8ca233514955p-592, chars_format::fixed, 644,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000010237088948578388358098853060992576\"\r\n        \"5833678165699543519816739026811758277103573884918911845878259246763776340849697422669866470721371511852998\"\r\n        \"3010847352458996891915187839673050932468688832702088095025858634405865838719400606468608999474499247944762\"\r\n        \"7517060907115025623620591611579466797588648126715963228770596324739373609857690212696944678148132075078524\"\r\n        \"6832813540266442635758464587874453243448908378478833771696540049938483523186971702045866550179198384284973\"\r\n        \"14453125\"},\r\n    {0x1.402ec07779db3p-591, chars_format::fixed, 643,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000015432289335652199429529596192176095\"\r\n        \"2280128995355532335903780230002439902106171681964904599691076173097759759271595161852061445606846570553485\"\r\n        \"7516299229776852940266818037569697974320880151630866564103843751340348456654787834477195943853030778904275\"\r\n        \"8121875202161315084633753288551916067532158081233435391266806375281507495586400182624672163254831082909010\"\r\n        \"6252418296293784793912536957393210090528948166507516025010381931734137258421801774943560303654521703720092\"\r\n        \"7734375\"},\r\n    {0x1.f0aeec50d31b6p-590, chars_format::fixed, 641,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000047878677416379371549125789239926548\"\r\n        \"8275276151541240457915349794344887203244731185351753491754511165749554829196846477560962493984753090692845\"\r\n        \"8091661656860381861855985455168049554864448079349729639474815768229922801413673914161293747159398543359951\"\r\n        \"7399823133161165766628860143208254408020613956065686180510699469311110843403784158309126949658184006386667\"\r\n        \"1697437406874245500460119275042566472879746420364608831114323224783157692541202266056643566116690635681152\"\r\n        \"34375\"},\r\n    {0x1.57d294d3c2f9cp-589, chars_format::fixed, 639,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000066286789908919767154439712855163324\"\r\n        \"1654856471257758794690825235525357844432318820659861994055782684096716141775524355094157699459438893136009\"\r\n        \"8433133959264526500722798022081521365031163160858263301206457060475360690707532743601948118549864883622173\"\r\n        \"0927205677352442792084202886242692144199012459097697320364733506063726855287774209801534211907607596434562\"\r\n        \"4292711126381340661949671547560893038505110852732627277478242436357762368270840624973061494529247283935546\"\r\n        \"875\"},\r\n    {0x1.ae73fe6587cecp-588, chars_format::fixed, 638,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000165977196475565345851259092100739880\"\r\n        \"5366476149743750311604392451903207596846739213843409678237113377169104146929663595303028938437023429099489\"\r\n        \"7722409322578884085024115852600249581149079328402999435544793620771795317010302025925238906642933916602274\"\r\n        \"8325256470690871053379233058112221779997889814125759915031815714329956264384917577666782736704616810992236\"\r\n        \"9402275556469164467258730128554765023143883909572262187349358310587896236931726434704614803194999694824218\"\r\n        \"75\"},\r\n    {0x1.fb67296e3acc2p-587, chars_format::fixed, 638,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000391296163618354749958168301134273711\"\r\n        \"3939478374800690677684646556483173479640008227989372534824608807782087337247737217276479692375180018718334\"\r\n        \"8834990540475128812272007525804236832383235927143031196440133464921993395194253059660135062572626327844897\"\r\n        \"5926556105706094110164009778376798762079990792706460418585939444700299490819050738035550792734349962122210\"\r\n        \"0683141335108256011247632041082471238011026898148078121016447315999933764807394709350774064660072326660156\"\r\n        \"25\"},\r\n    {0x1.3ed3dd4d0600ap-586, chars_format::fixed, 637,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000491743331852018458857016433048177192\"\r\n        \"8528679311940238534399712174383421525328918259752617995061995340007505682153275698606542935712773259521689\"\r\n        \"1258580806600352642597941600765812136735054533090439266281829629055509583633628759727182097412609852849993\"\r\n        \"0542504397083636917202583019328014246584974422293036894918411259098493725705882814892400902400193980681435\"\r\n        \"3754156336153177138490707869794905698617635343551805241354135114165840869659973577654454857110977172851562\"\r\n        \"5\"},\r\n    {0x1.c7fc47e8e35d3p-585, chars_format::fixed, 637,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000001406577213166360162473160513277137603\"\r\n        \"0687013595023265826246899604517310916218342653982498273578257694903797846863803354592312379775735833496353\"\r\n        \"8697635759700073763508738768671726201090282961141287767540599357579432684254257072374457660506218693806043\"\r\n        \"0296209980469258502851293064721411956550060490555280947897869268535238617974651676834143674410903250011972\"\r\n        \"5007587257232992073560146104583620982534044853267658149002760617409663046473156100546475499868392944335937\"\r\n        \"5\"},\r\n    {0x1.e55c37b92c6adp-584, chars_format::fixed, 636,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000002994378876442696674396459452237561435\"\r\n        \"1628056540175421741903002166035225397433156307925002196026795564333321860800732260023990285767473609688728\"\r\n        \"5429346165120286356617612333602815378437074971902704269699125569824971873496545479096037651978579992191150\"\r\n        \"5099839114997820088040932021308668960743662393965366462481244219250884957219823927613294786002919454776580\"\r\n        \"789553414262980289198712932020828133788777831646220852744768984882856033280518204264808446168899536132812\"\r\n        \"5\"},\r\n    {0x1.d5f79f14558d4p-583, chars_format::fixed, 633,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000005798827328485946924597590924421122623\"\r\n        \"5064534468838026322900953010973310895710460351625303496060697525894981754846799448233472580657311979468109\"\r\n        \"8598188149502821244093362724432709697646779140442854709952519834481575355268547379497009069253572433783139\"\r\n        \"9571800371346050428402437303389817593443709839557440032105433568682862475767560783606540728946436142711828\"\r\n        \"5829539423788560868340267151754097473537655899023331355796062082375019741675714612938463687896728515625\"},\r\n    {0x1.02af8b4a8eee0p-582, chars_format::fixed, 629,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000006383737379183110916446442922687934008\"\r\n        \"9313583401475598285331493581326429673206288607877477935245231280837188564787009132408304294846616842779757\"\r\n        \"1451303935851646140779239476004716342445942378983444119379324329844134615146761568247550674011002948156021\"\r\n        \"3541664875596554901104780563157049593014023988690619684414077863454296787671113498979822685277179794826213\"\r\n        \"573655430103650891087095920565370724154418138047903578491219789281529983782093040645122528076171875\"},\r\n    {0x1.590863ea685f4p-581, chars_format::fixed, 631,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000017029147394060241225903488954267271489\"\r\n        \"8923273869351644640696094496857025633242564905561571190377650128431667310922276302573508422178617217778935\"\r\n        \"4428791256123022773256234821051426574415366415907465929726112804747693325030138100672596616353372172516265\"\r\n        \"8362102045803504170975831620913372551777275351947103236723323352059524514418255814217675702145734323793974\"\r\n        \"25142662578183158464648926695498204922699256894403776088999825921721509303097263909876346588134765625\"},\r\n    {0x1.88afc27ace629p-580, chars_format::fixed, 632,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000038762215209996964796089923759037167832\"\r\n        \"2492427536823728543378726506019728082716395831747267001077774270084925501806670174866216009677450964270651\"\r\n        \"2953664452990677612703625554026920117242807007251381456932695999254649548206525351444569181879737766662552\"\r\n        \"6547211377515140335058410910399988637349337544609219968737913624189813877322683660487034814611363469602337\"\r\n        \"211596081779924811843071508227249052874980749704115988758129120184126037429450661875307559967041015625\"},\r\n    {0x1.5c7176f603643p-579, chars_format::fixed, 631,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000068789882161917508509670824126173614140\"\r\n        \"3044742680014921956399740581562886162916885542186221362873370531080893419613781966113824431849672860148904\"\r\n        \"2181743880051639476019384315827153826089553979286803568580422895165618106610762680714571764269279291838992\"\r\n        \"3888446076356769915331098530401145137086193594292363576582306654955320578191159151869528057193739314193893\"\r\n        \"58263737195692350077525599803438550915864524706649698538771763034471717901396914385259151458740234375\"},\r\n    {0x1.790d4472e6dbap-578, chars_format::fixed, 629,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000148875621977114469089781218362547566565\"\r\n        \"9352650958589949975668943679471235456361871557534887466361271920586088122046839151996105339750152693202655\"\r\n        \"5928166613066923295230654743312995775558321121766534557827242501067824918202897819452663974735126709356625\"\r\n        \"7944302826094822806715367278970623926796793796461752341109155299244693461361690545605128190643011578010301\"\r\n        \"407239990086636328070328268988589415096579914050756027741641285278006989756249822676181793212890625\"},\r\n    {0x1.c378249bfd0e6p-577, chars_format::fixed, 628,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000356517430989046641453828113599111802600\"\r\n        \"5886155410308918526898215231786380968751338156154874284571624448659133395194372223630162733565207651264967\"\r\n        \"6874971877773732310584587588016131582809612550593957474653709571679682043186902660149986555651445502728962\"\r\n        \"3656178984528924160938846316861374702652784376098268000158537825961986402424669458870213276942985979758358\"\r\n        \"69968250249240285430911246574479070674348728464172280055825836608818235617945902049541473388671875\"},\r\n    {0x1.012a9572308e5p-576, chars_format::fixed, 628,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000406159542392037782859802171593570642607\"\r\n        \"6332010062619958431831272318783138874262507295396479475668064131645251870497308939268400733922807386960744\"\r\n        \"8150365771647312530141587581009118343558626950799148281046271256567808855867812108852064523161903474987315\"\r\n        \"7054105128662997301341221712984156433636865913673633110339306470339794504858111659424780755591486576076810\"\r\n        \"83750037261710068110348985087259076445035649476524760030822502887559721784782595932483673095703125\"},\r\n    {0x1.56195178ec146p-575, chars_format::fixed, 626,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000001080598113210514987988882819423685353906\"\r\n        \"1686084662780914854471675383228243117452879571122473537783026978971842487447921180510513979245365186142858\"\r\n        \"4866033364818684675278744191346541679918674777914698058883725209587091814926510645613748528670465332304494\"\r\n        \"3850364593356260109867034399495400691418744678903519925194377801076238148673147847918302273719745123524009\"\r\n        \"800896703181146322315911891127839376287699882533919755293883024904744161176495254039764404296875\"},\r\n    {0x1.9d2601c0463a5p-574, chars_format::fixed, 626,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000002610049033590998097955226555835549321970\"\r\n        \"4695290513080366093465835681490016799462387973765729881171426828168241733259013399292146369447750338880713\"\r\n        \"9807845292305705181442388256835168226672308962563672964438490805297338473214293819379816464259972063871319\"\r\n        \"5222674660177386067424332816501896648413308447588486597263343965697557104623816147424749364511595700034881\"\r\n        \"997429011261167023892458961713610470983980921921475027054626583122853844542987644672393798828125\"},\r\n    {0x1.b1a83e573f7bbp-573, chars_format::fixed, 625,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000005479224332391463097507240628161360683226\"\r\n        \"1951011145665036504979668985390735600110157767758785050009028843723306919687268827826318060701922646056994\"\r\n        \"2714717248153474281746765628088520324003473535650431537768304962822635243452634262699183389640515919045700\"\r\n        \"9628685312050850428276694131688178962296877209863921698707625891704876707671839895342016796959143826538159\"\r\n        \"53454390247156911968073950955361295931527445870673812509943356729991137399338185787200927734375\"},\r\n    {0x1.9db5b347aea9fp-572, chars_format::fixed, 624,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000010454380162673489713965397325213210055216\"\r\n        \"3879873109105377162392415433498294286245370856908124601498581730215858895362945461402133653079036345203985\"\r\n        \"4918359298172819545920254130654714979749139962053173554210376204625461005863476843387305393280877162550277\"\r\n        \"9192249264078505504614027390103154345616586155077416235880715362347189767875031969711231284078903547104466\"\r\n        \"2694250760821017274249137639457545000358487907089906875091056548399137682281434535980224609375\"},\r\n    {0x1.3df2e64e62b17p-571, chars_format::fixed, 623,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000016069032799845684304837025898602516055352\"\r\n        \"5330476653608985142497079187555897053107670564140159176509442566372059407021909524012789333201080366212249\"\r\n        \"3748426320418018292509093509152048893765563673233963855958593593632026744656404079205066647203536888565373\"\r\n        \"1935242222344840271636673845201596436696040803930327212744844481901820454994441082559588679931543647630524\"\r\n        \"022363479603462003303851739929994528409740117298461041517310121662376332096755504608154296875\"},\r\n    {0x1.3fb9aff5a09b6p-570, chars_format::fixed, 621,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000032317634556278561328898229389131235973792\"\r\n        \"7027325626332809914034879157391321624327129064932660032953998693729842545240820838063867420776343008017269\"\r\n        \"4982316283872060821192192709729960428978910791358989140379796397922628678340369132274813716042402578734967\"\r\n        \"7645937718103957392662178718638371693425024544200467810601510491638476195268941251133713791394315017124881\"\r\n        \"3573390689443103255850376521944591726785518526871530953226141491541056893765926361083984375\"},\r\n    {0x1.b756a80b08275p-569, chars_format::fixed, 621,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000088816113793007975094594031352311578123949\"\r\n        \"4167371788281308547084154424200354650707776201773488980791415078417796406238021557467994937388956410627563\"\r\n        \"3058851067540238835452851831762708928631353643605783934410829825276089987266954588114848541270166660775652\"\r\n        \"8800628693815337078049941448123253158054173322985664435833612313446487476518149284318543738637159669254492\"\r\n        \"3911644918628926358632918516033019990490714551064667381385930866599665023386478424072265625\"},\r\n    {0x1.f7329a0afd825p-568, chars_format::fixed, 620,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000203451601586999405058926242925751758038543\"\r\n        \"0325922397277892203710499409471254020804516754654209654639932909255687413528517546868831113606722319891083\"\r\n        \"4421890991160800376733815743794010033212895441229296565025729898623995081971623460966619095990658796181731\"\r\n        \"3694284115030286757019609621539322656336515768811388337382669901901338040363856054157222072244507777981504\"\r\n        \"304120309709632492257675099278284852081287060608823236140807466654223389923572540283203125\"},\r\n    {0x1.0dbb0dd4c3dc6p-567, chars_format::fixed, 618,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000218113647323195123792998885625982056518325\"\r\n        \"8686257855657737347172216088763166848656291822782916834522669335644771523960050653729780457856095864396001\"\r\n        \"6318089840545935342587500849741876484276147343096801587789314275371440736377430304898008107874617963510343\"\r\n        \"9999677426826811398232961770959454258651768754652990020742431535295716456361590860289280665530000903065444\"\r\n        \"7555995176531553920423514884711703468816347962870583199190832601743750274181365966796875\"},\r\n    {0x1.f37273553a82fp-566, chars_format::fixed, 618,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000807740689160805269118228642550843231522689\"\r\n        \"3494792878282174487309771526555057555137543853187756139458112204099813878239197477337300089588511850598419\"\r\n        \"9281366002798013382874237491147363150496319895513637211883391544592703564244368547173540341075008703545423\"\r\n        \"2579156985417451125586335210551714277714476384788223766687476249466281275483109148501386123200716261782589\"\r\n        \"2047399734741268643801542295545106323151370703548879159683338002650998532772064208984375\"},\r\n    {0x1.948f132293c63p-565, chars_format::fixed, 617,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000001308561772651954193974715412547935990591208\"\r\n        \"3343808525334106458195989110396773558319983334774985646548651422400177890451390329808117639430576439949311\"\r\n        \"2846351303350353239502484610555690434248628579595201736161689146633660758036332258835300772878381990178941\"\r\n        \"5921638100352602461638880220153348552331791239223807821536185010298391358412451677556901252347148614418801\"\r\n        \"397077483341880749380852062406494029384384863122503528387596816173754632472991943359375\"},\r\n    {0x1.1ce9174ee8dd1p-564, chars_format::fixed, 616,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000001843108717463578204325261813318515827856557\"\r\n        \"1369229321208308841340213027211857844123697256040862519901567725132672639518364854371628903708159075430161\"\r\n        \"9279792859862700397570904034465465726650754241810398171714853256199299280893008188067892300503088321533399\"\r\n        \"6109506247186677474230868515683431825040191371852399000466202113797504943448957858043831546287649440338737\"\r\n        \"91332956921068821243541667694116503967315307856156270105429939576424658298492431640625\"},\r\n    {0x1.3f6d7ec03ac34p-563, chars_format::fixed, 613,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000004132806492532132674382360331286768338716797\"\r\n        \"9700016372758868184808065548286026722508349641027855711185659446215296171197420312336059674308408378140691\"\r\n        \"5821893135130157239833260145924419520141522508884955957878888182040445979824348321458158281650270735374053\"\r\n        \"0994471599110522744654340322094456670675212886409515158274968834842167073689925579942545240153929528929270\"\r\n        \"90733811106253593050550399881101662656807983753370905333213158883154392242431640625\"},\r\n    {0x1.d271d5b8d56dap-562, chars_format::fixed, 613,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000012069870317233675409785921174121444821305867\"\r\n        \"5474846470260318024818044719063243067120770137290554450844551433999115380573910887578371341979222946847987\"\r\n        \"9497113395238860243862727327474188777003838509692351870032032910037612444082501641811469305197024541046308\"\r\n        \"7468850125598650551237036205202564890249705306096007731217219252509953590142701977279265426554214972769816\"\r\n        \"77618412990549099603329870806860179147990998205219881356242694891989231109619140625\"},\r\n    {0x1.e5620509d2608p-561, chars_format::fixed, 610,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000025119843525307733558434594260816051677090309\"\r\n        \"6673967930353818644221741226839814296197259152147860503559509486239204789313430961464462590490736435598083\"\r\n        \"0429272741382633782476612511642960529126968971864664787062889352642748759037672326378535772807239429456532\"\r\n        \"1556549743253252690956906469133543099304872943427110064921659955315549232098416962449358057714977677229240\"\r\n        \"84996969867141831806614270005060577891677076056708983742282725870609283447265625\"},\r\n    {0x1.daaeb48f4721dp-560, chars_format::fixed, 612,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000049132134419173275300225535204544729851911649\"\r\n        \"9701658694834634408878394183403806656222921633064889962501065491350976425275433250304984863280428171634552\"\r\n        \"3152413142666030324845516070701147579657337123241253961741033729226789364662827961018036133320427313617289\"\r\n        \"1785884242393338467122165324196011644605546981105602878290791388448732419818004683184996584630381592680288\"\r\n        \"4671039929380913953626088229113441405268743189527214099143748171627521514892578125\"},\r\n    {0x1.79db46c531467p-559, chars_format::fixed, 611,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000078220288221977700063059894664378227368411242\"\r\n        \"8973370074423487710257342610625674603614327579116178628388196293795797162626830091814571929935183642335516\"\r\n        \"2309676128765210431154313546423058071691765486209893249257758087062177758498404099890663358857738381451506\"\r\n        \"1686613845960870319279798128399912226739252082389068103035402992951541364381739672960888215163802051676603\"\r\n        \"836709312773313559283595797003584392382939671772845713348942808806896209716796875\"},\r\n    {0x1.5eec2ba1c3720p-558, chars_format::fixed, 605,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000145289329418459781239540418231613206704442090\"\r\n        \"0267319919487593677463668500580057236620964242008498010268852222847716274413173625608497913079524966652894\"\r\n        \"7671427209197606892230099984747934360035885007327209715222003029066694358608454854337162898211622403584386\"\r\n        \"8866984479016961310735620585801978784207524847137505642202061656064633727425727606694981158953001902520523\"\r\n        \"944612180221265729211093850118644184299387944747650180943310260772705078125\"},\r\n    {0x1.0484bafd678aap-557, chars_format::fixed, 608,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000215720283578313147392487697244659997412717666\"\r\n        \"3329307988473347306938546712857725657427570524490693918411758290383869840942834731519701257950431770805882\"\r\n        \"3864404057477616982597412257398875571344725493510145560232727974443858379411457797657961542960509206305284\"\r\n        \"4086162862418762840265454214673776057813103379569211790266417476203434046175223271364747873717837864591397\"\r\n        \"698825453685671334050757674102559717684013396166164966416545212268829345703125\"},\r\n    {0x1.6d5d28581864ep-556, chars_format::fixed, 607,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000605073421057126407536268421630976468093088607\"\r\n        \"7631171957420171912817787234297774283318868481683511863311317874699026721620204024600543337355973772597888\"\r\n        \"9305040941956754247376027523253570262801340275745355595446006673514357407252198901742843991249170290767431\"\r\n        \"8122814866169759621243013671992945977824396159540497881209462457200089579779727868186796082007661967617098\"\r\n        \"53673787110020335195594341069592956953993034829863972845487296581268310546875\"},\r\n    {0x1.bb2a34ea37314p-555, chars_format::fixed, 605,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000001467836785425614229866782781810141842564117115\"\r\n        \"8235873201689619347389131481467218178604900546424188785128526833687830769657065064731962671428118010817789\"\r\n        \"0970382493324330201954352563963102778896234442647145321597454493486497315822572316287467822249819702713710\"\r\n        \"8636727761413525838697942842193364203301906166874401738418313264607291975181849925899367166430300780818499\"\r\n        \"237580213954668397499666143064833180587047678500312031246721744537353515625\"},\r\n    {0x1.dda66275c3391p-554, chars_format::fixed, 606,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000003164114305557188872167581005098954210978546502\"\r\n        \"8434827969598434513594568939907735780944113164818353072371269147227442593224405529594825365040984777210506\"\r\n        \"0655087817291808653621495733409941136183312201214290111148995836702755905811341517724049697693918406924507\"\r\n        \"6394699362838845068654932477476209593443045636001585391168764081377285606835175954030269312123313228447303\"\r\n        \"7020618452899137221945934076678210757072040593129713670350611209869384765625\"},\r\n    {0x1.ae53c827abeabp-553, chars_format::fixed, 605,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000005701265996213117274833180113565775784954586945\"\r\n        \"2984033576198099915159574664118824194511400497947243457984780546211633008401788598844966082310519962913898\"\r\n        \"8659606033366015659128259656868559311576294716708666983658509115141782873460081585179330018295479063005707\"\r\n        \"4667385636416663954055631149802259850642458557110755505661731896890448946906215984760424281458935169844427\"\r\n        \"601586887049731567952734714418614424269460272398646338842809200286865234375\"},\r\n    {0x1.8a5ef719cc23ep-552, chars_format::fixed, 603,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000010449784962477287548783251955237842370155156614\"\r\n        \"6826334864019810055385905950740758771320828326490262538063745178776147247109081094734941639330363553681011\"\r\n        \"9857279726230392028225272993263843450452364994965665306519688594839664257358745546726073837195205368734856\"\r\n        \"4431376644311167365028342993889282517965130211119142903435658352635759488131161489780485873740697437859266\"\r\n        \"6380889595350983817353676260069987591361240220066974870860576629638671875\"},\r\n    {0x1.0a8013bce024dp-551, chars_format::fixed, 603,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000014123103050632778867079410198580307726871240292\"\r\n        \"0541068368911575763700490733284467263367577298423282975392687130135769634683967418176373335886121724564479\"\r\n        \"2935308284678692288452302095130502629247532688243010174532194011901728294090601781190078090265727142204298\"\r\n        \"2885035401216418337155102635593604609313227230299263203367717097431398505056111687252861128855861691714189\"\r\n        \"0148843251509297646865474549029463580129828415010706521570682525634765625\"},\r\n    {0x1.1c9bc398428f5p-550, chars_format::fixed, 602,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000030165478216464074512212005380921449232249896009\"\r\n        \"4163883459095580088459226807666799899004068886051685278007729156847515877911950031988284153897746333486898\"\r\n        \"7892725688447857051334631277050156343590570961616329006279805162991598947429131105988549014486141475892089\"\r\n        \"8701496103210003098975054883301223628041392497177162320712243561484642920486418632362138024921480131995555\"\r\n        \"150640263619194765536340598175053806517809107390348799526691436767578125\"},\r\n    {0x1.472b04c33821dp-549, chars_format::fixed, 601,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000069352686559745381219629204415882645570340784420\"\r\n        \"1477779975327755062633188410020385461517789302134229495247497247338585103033841186687904998992673315180478\"\r\n        \"3858442726799986942283792161596904014111697431290378325347243997549961343698246262935026970483997121083598\"\r\n        \"4184914714199474992401083147022495609722179436331494389233053529333671768056532410769536588940137956502217\"\r\n        \"61642321234625202601757092330837795035591852865763939917087554931640625\"},\r\n    {0x1.6e2aadc8fb08ep-548, chars_format::fixed, 599,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000155239156316592182116540333593965011324407646818\"\r\n        \"7647449775113663912215536497101280437021070373800926524185812157593426933845162811402898680887532550709538\"\r\n        \"4891797508949596239872819667141887560524686500709790591081991942003207362655327474605546483156944635859249\"\r\n        \"8502858815166465171581423787646222997581034545137598706485618677189505645342906676871638686321474504594718\"\r\n        \"576852307282958385446604353090360728373298115911893546581268310546875\"},\r\n    {0x1.79e0dd8d6d77bp-547, chars_format::fixed, 599,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000320408812244064701040701054214471993636519817131\"\r\n        \"2525761333852332777473674992913214447027108853467029297079393326669734878211189665807441927037194255251288\"\r\n        \"9142688224429225908407606753219328561169740837005707621340208175194042940491350748828157642100258170107083\"\r\n        \"6816124348416114553627244483558069374027744185791657330319365608472005069461657785305916005515453484742887\"\r\n        \"071767583594111673410114045877639110670997979468666017055511474609375\"},\r\n    {0x1.50a1c6dcbee64p-546, chars_format::fixed, 596,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000570870659966143924670412531546301456252428176612\"\r\n        \"9317526566419635735485884884360975976452513951624675081915468001138573658489054987719004117903299183075801\"\r\n        \"0015316949595415271383035047804624141278665302354234911541467226904208366718548527193707891153132877667861\"\r\n        \"0959513757920177232706230558186187214188747454115777586354089985248298015199422913523614410508503850329164\"\r\n        \"774950244578449512806322431457406452182112843729555606842041015625\"},\r\n    {0x1.862c46595aae8p-545, chars_format::fixed, 594,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000001323334251342744653322084617698008418035230749593\"\r\n        \"5298772563684034576138699777035986613426588992064096929624484557341399021891306890138310006079144322877642\"\r\n        \"3588462888697503055590150915018973328299846328628471661195139331560301984598886596494720450062213461808818\"\r\n        \"7057959743436057427473338804629924458598854986541360321208371750313296783051904664329929192280551912742166\"\r\n        \"2183480103792153741442023939800520793141913600265979766845703125\"},\r\n    {0x1.abecaaaada1d4p-544, chars_format::fixed, 594,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000002902749268222376924546350129536870000547304408419\"\r\n        \"4294943260531463212751655391460399814755446587701909041474935743278603124140607256272782257250664990133408\"\r\n        \"6394861768322314208033554135758133295052719658033386416436682014057697341886413139751469199998298583256946\"\r\n        \"2960667909084778059718781902132556507382819564321302015716342432672818757887538730611849655100266544024163\"\r\n        \"8148086882173459801728850060431597057686303742229938507080078125\"},\r\n    {0x1.27363043a03aep-543, chars_format::fixed, 594,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000004005031318533224698037948079353027579083803421613\"\r\n        \"0234269239697945665097491937671792280674809190792923657176885219547827599332963797684275644497957812839330\"\r\n        \"5680093053021087734539543173563658797050864465135277447744160645301874769121775328077711944859058858832844\"\r\n        \"3857685929471452269672993927502101792232928640358924482952399125411408370114513241114066551875913522347461\"\r\n        \"6940250607472942846200812672119440094320452772080898284912109375\"},\r\n    {0x1.f9396910dcb42p-542, chars_format::fixed, 593,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000013708394080755749882353739878794548975711060319922\"\r\n        \"5761168978964230580787408600882502079402930131673822163419006732222086034323894484084689341216849641479224\"\r\n        \"1401627062978614652823668513515864069749045983218624638447467632641139961223891013812536479652440735884693\"\r\n        \"4445629405245581645497453881801461068937202950179316586907829620444413074029684670336457955213142348285380\"\r\n        \"185813403038234527882462121528561738159623928368091583251953125\"},\r\n    {0x1.d5c5aea5e5776p-541, chars_format::fixed, 592,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000025492926252346403699480399559723131522475692333126\"\r\n        \"7460072719370615428030457759180738161742455950687444493756897045095772044904146125927159052272308828398501\"\r\n        \"3090683402584474590747411753259623088047495266413310750814215616392500626374978271647156167704249652658943\"\r\n        \"6756364949351894653290522151409795949089798076303340476697056289062895628727450248207182214063557902486967\"\r\n        \"78190797774755330172384570897037292525055818259716033935546875\"},\r\n    {0x1.9eff9de8438cdp-540, chars_format::fixed, 592,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000045041091507036545799166835714074572890973281642718\"\r\n        \"2547919202745911940414921214477351259743032122538652926379956781548301884168031234796205554552277059391393\"\r\n        \"4114109918845576727243974090120817486463281438934208839893697531955943794618870985059845862267848439181439\"\r\n        \"5890905312457495177615640024453646281524267570153715010163957628881209237239059125078916075999874661387134\"\r\n        \"91403049278798069563096995171491698783938772976398468017578125\"},\r\n    {0x1.35efd2c76fbddp-539, chars_format::fixed, 591,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000067276831657939996199173247920738175748428147489414\"\r\n        \"9670172557085143017225481483937143753539584747010422076106789338814555349198970333778333109059056976956517\"\r\n        \"8468682396913065019601456861151524540447139051235005146110075237349741554326342899856503196071852473843842\"\r\n        \"3888187671059749294753076297686432134824368751110720079131704627264173704339529068829140553825452116336982\"\r\n        \"8914796349684474354758967340472963769570924341678619384765625\"},\r\n    {0x1.153e8699c8ec9p-538, chars_format::fixed, 590,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000120360754529645884962285693011227211565254648719269\"\r\n        \"4016112906712314702358657372751839480616423140272619842377498371831965557992003712160248349385264474301325\"\r\n        \"0056769792049242915691962716052948755237637718544157452941495767999843022796779761615077665689978467244059\"\r\n        \"5860019122080279468390366742471611706350941138875187955869402879785637126810009475756822478368269373066464\"\r\n        \"319957145522036108011010302476506694802083075046539306640625\"},\r\n    {0x1.a972fefbd352ap-537, chars_format::fixed, 588,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000369402710534561582048185239355022103377558944781592\"\r\n        \"0779198213839248547783496951157132900760976663741917103927591266103600942054508846822468097371651143350901\"\r\n        \"5198608338177706532176361531603848383494661224829652850527651574870904966453516740795142615423797810465807\"\r\n        \"7731510550983774719902367320683814449326157174002983539537562964475094257758523723219897183010715085316739\"\r\n        \"7617245016220384641603136088860992458648979663848876953125\"},\r\n    {0x1.cedcd588064fdp-536, chars_format::fixed, 588,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000803774974860294637969073109978872317499863220404922\"\r\n        \"0756055772972337080621452348052409076747787566156520495176942482851069896339546803762048412705026259166502\"\r\n        \"7486298472552658367018275042648961810362216027896296996928598020037020128457966742687104325202626773898711\"\r\n        \"3207732222251418060560080709569006698444788751837482010514354193160667222252519053271487323081042165107372\"\r\n        \"3466706819347602115677364764678713981993496417999267578125\"},\r\n    {0x1.cb43f5da906adp-535, chars_format::fixed, 587,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000001595056784657276524450792782037782490131785891352987\"\r\n        \"5732063943109841715337321381611732771703577489536903502349379623809480404693423608671412800065485553106741\"\r\n        \"2929636750704890697323743904633485510251869076888268108427930628581128120688710084461419207542654861230266\"\r\n        \"3962004264088177849786782954944307405424456628148596509424848746973173412819090106279014176224088018810004\"\r\n        \"195291563276423198181053209054880426265299320220947265625\"},\r\n    {0x1.cf8a16d1be8a0p-534, chars_format::fixed, 581,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000003219800877667736571548308823559094107806812950548488\"\r\n        \"6301991581386389243298290941875520546912655676996881281044191722994297934220491177440366409713402077606702\"\r\n        \"3160848590990575248460251418985831836138485385022657308697336224460692690107383121212263289541467941078820\"\r\n        \"5226590464932818260131222656038901409342927690461162453656396066174341396517780764483920907682608083655719\"\r\n        \"332828054092543457187503008753992617130279541015625\"},\r\n    {0x1.27815078c4b63p-533, chars_format::fixed, 585,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000004105228890331063404396083298757193163623440016095403\"\r\n        \"2470064104477855048188571156057943012804319643271386198925796987207651018098028511887410186972706597660923\"\r\n        \"3032449496732356088241557456578015929237728817932232804838830923233730375003077861250971190850195180983116\"\r\n        \"2651603726739987027097299398843085135417047599817866157427274429479981920466787981923596316500143569645232\"\r\n        \"8267353628992418490550875276312581263482570648193359375\"},\r\n    {0x1.94cb793c06293p-532, chars_format::fixed, 584,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000011247015311011619164388570519415046282988509125973527\"\r\n        \"9741747925135879974063240368816106090328125806109183239424576993216500730132779180552061858976096213910756\"\r\n        \"5169335636657600903698036216667845111433042832408822485088788757268226486530324074227172828587904589966139\"\r\n        \"2132961695282914996319701701516959289417601935843292332629190240565533263563800574591121957879184091543084\"\r\n        \"291008630540113777396271643738145940005779266357421875\"},\r\n    {0x1.fb79dd59284acp-531, chars_format::fixed, 581,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000028199919854660424181406498611767457424061948125885429\"\r\n        \"8589457459624428488191761977266831369694370285708881082830040755467647076905556002995811053078143823884675\"\r\n        \"8896109390273446042898942695810587542321106407847548563781536173906753112551553439539348939569353136479925\"\r\n        \"5109224555942208221914631377657614608003080288344558084468684208204756019731248859110647696119656846453414\"\r\n        \"657236217176483616952964439406059682369232177734375\"},\r\n    {0x1.359571ef938a9p-530, chars_format::fixed, 582,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000034406501648078402345831943940992850675010433136247541\"\r\n        \"5930071265790144615646215078259890694210463772583533525266279480436005810313967603484552689107264291271767\"\r\n        \"5433640137590195247305594909345493430182306596860622742466309500895727273464880490026271211635573150397503\"\r\n        \"4068955683366372451262012623421741695264813612942626052113327810277405224673196646184808761848734931180046\"\r\n        \"0637664395881218926120936885126866400241851806640625\"},\r\n    {0x1.dc1506c0bf6c7p-529, chars_format::fixed, 581,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000105821572946972887139631951583717672743241885198572171\"\r\n        \"9894409815551521845785988952708204139474399757199419807826171073148844804259022309689991737891607182112194\"\r\n        \"5979339326603987813586870046488838854148329058044112342763646435291832724065290367027641733458317007850703\"\r\n        \"6227763823253865069688627280158633158487170573480001793016274242856198979073331588237555754089321977604226\"\r\n        \"135305401194919294738383541698567569255828857421875\"},\r\n    {0x1.2d2b9e28a6a75p-528, chars_format::fixed, 580,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000133885820362663555419594043166998407951143751006488074\"\r\n        \"9848744223254793754076756021225316433435338344953459467439586443326022949940340826249786569726969039054779\"\r\n        \"4793059510184526291833644482138769608879468669219530401670454824660198838977884545919715262148141572387912\"\r\n        \"5291720960621786477795942103209681646791640984403841728360044748549321065798091796033919932698877339989298\"\r\n        \"37348564227117453384607870248146355152130126953125\"},\r\n    {0x1.bfbb91d629252p-527, chars_format::fixed, 578,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000398080705242629831129046568653465048781329393724194653\"\r\n        \"7121059952335568026223584507165458748882980852882625532115425965736450282940426179796892610308950680396742\"\r\n        \"6332324837775355474993402685474785068585575143910608448625832793399476870172835928566422215307639841470332\"\r\n        \"2902267129206965453658202931263208038257035872804879326080897160088621835645648574210621835117584474315503\"\r\n        \"701422926108310917925336980260908603668212890625\"},\r\n    {0x1.81261e2a2b58ep-526, chars_format::fixed, 577,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000684874465910971999415688793387732609580222326033081294\"\r\n        \"0457739536694375108714137109529192455096668704841616167692947763953483210206385981567278734246565968431993\"\r\n        \"8183340812160818214400762654358676796607955323226506004918322556165822460350746720183779242737752869118957\"\r\n        \"9027008696770868127293174180933176997045400686847998011261282926397903945921075498310840676601252395453897\"\r\n        \"47952523762375420801618020050227642059326171875\"},\r\n    {0x1.baa3429377a6bp-525, chars_format::fixed, 577,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000001574203035965531613531401963179047212712636441947777682\"\r\n        \"9501394414493294958623139441874916754684678732509715899103307031538056852240548597509311090249113490142322\"\r\n        \"5555834565328486328064118867427922601658085650759434786670525355266137025296167620889331874321795773492411\"\r\n        \"6551774986936407789322905691142636861514631034901222501011932334071723335375457508301179350693496861344894\"\r\n        \"53548900017576528398421942256391048431396484375\"},\r\n    {0x1.9a907771fab1bp-524, chars_format::fixed, 576,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000002920273408839778291474897610532750298406986436059978405\"\r\n        \"6489683368011606263857076661142188306671405159781423167025684355540878432015185377709571340516596426353921\"\r\n        \"1094938101679106092335341904570196983657111607404300383900189431218591302014329016001873226224978019359870\"\r\n        \"8143728594996072940408519441822653019593776771607108453686713523625247173557248276784137846560483311143573\"\r\n        \"2133191744974709536109003238379955291748046875\"},\r\n    {0x1.5ce3039935233p-523, chars_format::fixed, 575,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000004963143223862366347754616755273112400332892151447482041\"\r\n        \"3997492211106129001776874436254409714844492300472015911147713885952803916385399442599912699660968322717022\"\r\n        \"4030873388958268153423145767609226993844753478328382425919527742749268688537772422007652894684296984825672\"\r\n        \"6439179741579269576223391510486187927658224539225843413775535462042906286635028827134767522968000184340037\"\r\n        \"184670124670304858227609656751155853271484375\"},\r\n    {0x1.b45bcf37c8d61p-522, chars_format::fixed, 574,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000012414975541479182662530661958882288430785834775491841525\"\r\n        \"3894118748241599950978857565442251287584105466456217648773130036540949365023441814765140175590447946206316\"\r\n        \"7531499050878989147302143653326933627474979299646140492013260693375349748541774845381848399320823459041716\"\r\n        \"5541348380294934742447851982030456871109854039981844119330919559540729918368795223177756028547610845159297\"\r\n        \"97124356159798708176822401583194732666015625\"},\r\n    {0x1.3a2690b025ac3p-521, chars_format::fixed, 573,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000017875996042719942144684408823686534589648628475912376125\"\r\n        \"6318213568371444623000687661626760426533702444927738923771107674341441242397371908288063262833805963550278\"\r\n        \"7956111402941722283492907323121687029277413650633235640923880607318621527226861884183570539435102743690701\"\r\n        \"3314867540678538581960362738163081922890280303887423854113981016970820232986294242405150883265433026828668\"\r\n        \"1747402777631350545561872422695159912109375\"},\r\n    {0x1.8664d335d8f63p-520, chars_format::fixed, 572,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000044428868657860281376359178678068678828865965144798881231\"\r\n        \"1780351669706026871334809700611563785295240028095237462616854285876469189545810325410817406934099121471189\"\r\n        \"6003414161154259995400488663448950669618859741408789048876099387012441921979951172011268855276022497405913\"\r\n        \"7997863813366711158424098630563612795406981048797523362754888079179316205818081708016426963313589920827914\"\r\n        \"418743898039565465296618640422821044921875\"},\r\n    {0x1.a79164aa2fc1ep-519, chars_format::fixed, 570,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000096408509408080923610447309847908498668818477504064378536\"\r\n        \"8126046069111380321858738774064160921961840933778408732022497546793318629212174366316259374071673186690940\"\r\n        \"6711053939940359969795275491022481221271149533659942125679052983397494126651483669742329979687385596140269\"\r\n        \"7100058134964859823768146238469490719243711491531401474372331681962078614051224232515313810932919951488580\"\r\n        \"9507713787525062798522412776947021484375\"},\r\n    {0x1.2bc49fa39fb10p-518, chars_format::fixed, 566,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000136460714021292662180226084553088930347285447209235874305\"\r\n        \"0097046497676302502943967554055381119547423766323595238344830105193157914693303425932522789155936224316178\"\r\n        \"1452204208249015869028037829384948462735328602671552251757935853544416424933670392478048782405148215951059\"\r\n        \"2269777986550481097183357926597278222367341442905293644749971602789648179855297617277419064627585012540456\"\r\n        \"066432170700863935053348541259765625\"},\r\n    {0x1.b2a37c764c384p-517, chars_format::fixed, 567,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000395713245503972984559522939670973848253589531980309801595\"\r\n        \"0534188984562819667599991383679897046883718782032484782941289259792401942239688076409151132765326564642870\"\r\n        \"8472951357989644113139437303359323754832806498105951592223176268280456075964368410490158554250010230905107\"\r\n        \"8746998385744637761949259271884011045468465761364898764508683415032121416408732260562728101474458408410433\"\r\n        \"9627430135806207545101642608642578125\"},\r\n    {0x1.843ae1ac69ebfp-516, chars_format::fixed, 568,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000706921793665826155315676758975746710917614373613382411496\"\r\n        \"5675689539617763325368327288361109999039924650044375982589927640589509207269786839389297132819676334187486\"\r\n        \"3544762997531184610834048012793361393520758210628314182754643230419003777061857847364488424594195080455566\"\r\n        \"6513239904728601575232464779031902301528454048548719795433516554941581280795361619320195627602011230602649\"\r\n        \"38313679294878966175019741058349609375\"},\r\n    {0x1.4a7c9b0be349ep-515, chars_format::fixed, 566,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000001203556015715791981306274537208997391543320419551874216638\"\r\n        \"7275134267274407820877716584250745353852034461563951029094754042084741201555023726427557083012962283356634\"\r\n        \"1709883458286591764701770519397372432417712594848271227230992948309669507331728913676066375394901053891640\"\r\n        \"6220492776005908179269094318962119052575144800112517791981236689550651499999859263780522026324949400565011\"\r\n        \"981001362073584459722042083740234375\"},\r\n    {0x1.3e27452f4c3ebp-514, chars_format::fixed, 566,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000002317281696978396955189123377794352625041693253976329352039\"\r\n        \"4005777040356077947428725088477967218198192385517917373937974791820052970469293272851624318294051301876826\"\r\n        \"5036831234199951980780926608738288565060565046999262198272380951707877579093196401801900300021175486558998\"\r\n        \"2252409368493331309771709369251704091173604782777233093007760038948922133043358862285948249785523761316852\"\r\n        \"198177684840629808604717254638671875\"},\r\n    {0x1.b9268d67486d1p-513, chars_format::fixed, 565,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000006426272367902623461308935859215149511432256735493847572944\"\r\n        \"6594062899894550316581573372400318968212811428919647031987628214981951519891993799577542570576179867467306\"\r\n        \"6995193119893788442638742100166477114130792519595077614068438062406479166634128583854848649455609465219571\"\r\n        \"7677079876446559347047552594588771871315680949382327170742119174223144139530631969227670113296190705989840\"\r\n        \"98552364230272360146045684814453125\"},\r\n    {0x1.4df9e0d56e886p-512, chars_format::fixed, 563,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000009730107236224658299273161726811071102935306401307335045399\"\r\n        \"8818620182181804740211694728963191497913793567991103103401793959160433570181997275766527095269264290194861\"\r\n        \"9176904535218754880890639319149166591492630199955163315292873841498671690347850563431920298048447377091620\"\r\n        \"2240532708166933819170785587530689982280013134565017333638307204694287737428192204358891274416205018071845\"\r\n        \"955773824243806302547454833984375\"},\r\n    {0x1.7d69eb7260760p-511, chars_format::fixed, 558,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000022224325771347583865914578960158321557360842317854318621134\"\r\n        \"6933657091487310462801228024943490675385197500413130917810364898093092551411950073674123927781422093946252\"\r\n        \"6035650972628600739491381574581367202204644760249595881705742112157886504025211275233525917071227188614551\"\r\n        \"7728911956442632901477596469360488985449110999125357379110588028167602049750754315903730751451811142871406\"\r\n        \"4459200017154216766357421875\"},\r\n    {0x1.d15b6e4b731adp-510, chars_format::fixed, 562,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000054231128112241111883705509773089298055689258334481416666694\"\r\n        \"0174033207766899747265282984093161657059795934272651133535944542041523246725633760821160380141790144506211\"\r\n        \"1965585664801026021319908168374983068757897232076504585427720559612691028995704712640626772361153715821779\"\r\n        \"0735080586652707161869926318559935407300572770977984474498071181984210951873668231747188277414766302553239\"\r\n        \"54088453319855034351348876953125\"},\r\n    {0x1.3a5731ca0edd8p-509, chars_format::fixed, 558,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000073264353948817245453789075948016247651899446607642030711491\"\r\n        \"9203261126919959600463538126003325368138423524291656290504702564770688838031055615174036884610469534126066\"\r\n        \"9362997067361859795514395001616930733018553465712808422288445892090588535812980025454718642561058682378505\"\r\n        \"0860899147793591675552556686780722696531199100788563791496346567000379603690015154850041767791574143231514\"\r\n        \"4265885464847087860107421875\"},\r\n    {0x1.fe9875d1d94dfp-508, chars_format::fixed, 560,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000238012223201496246879702388385518212926837569584949756349144\"\r\n        \"3680874708929671511664616792769509157042290729263692909282981377264356193089750664771164517780782827902498\"\r\n        \"7730817899324249394130376711933650486643615936943145835807410346338302475022269747351964638109864012374765\"\r\n        \"9229998350272682641624844749509035541297454920646488679466589507176571074090805100721695650319541248673971\"\r\n        \"267635351978242397308349609375\"},\r\n    {0x1.486c8e4f5125dp-507, chars_format::fixed, 559,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000306187305366919855455790001692229950383732938369228904891255\"\r\n        \"0400714620860933013738543809187681149271085941945609868091120166774953177037142854141018233583426970618639\"\r\n        \"2939814864968179422182060843007728238711650063405243333717250217191754533091109488165101681229885852831307\"\r\n        \"7185392005897595766108075485367715975680043787973172841690740579375060116374477022474485558367965354342743\"\r\n        \"46698657609522342681884765625\"},\r\n    {0x1.bfab9b8aca208p-506, chars_format::fixed, 555,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000834719486723590818702524747938529309291954959390302831770399\"\r\n        \"2255055112618365344675577328587436635959675428325027569332624168460969629190495609275974259069718081705553\"\r\n        \"2910901204994378753476346741584959612706674491351373357062458128517513444577097106506660870893763676299618\"\r\n        \"5139036806500809351936561053766612404049255191129847261548373937625810791913226462499137987133268623551884\"\r\n        \"9571235477924346923828125\"},\r\n    {0x1.6e3eb2a2ebf2cp-505, chars_format::fixed, 555,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000001365789677138183637030918241816104834105768971249395580662444\"\r\n        \"8243905928334545004278697729898364093587345786886531313089263086235888667409191551419479933199488611573870\"\r\n        \"7464006492635762748605607064664260305266934879067831693088594717643565903100646927733796631602757838404734\"\r\n        \"6694343336071347790439049988766926425966011418156599676583954839754938558167040734411064231007548741558821\"\r\n        \"3480077683925628662109375\"},\r\n    {0x1.6acfd1805e7f2p-504, chars_format::fixed, 555,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000002705973954758640410373402095847976082689065120074185227455097\"\r\n        \"3101395207195449636437564463046700627498648696257340323748682242724040444170987478411495446279260789908561\"\r\n        \"6545057563405007609306607813789573026667536278047163536372799388111798081815841850537278717264629993896372\"\r\n        \"6825437220330053205315677811360493235151514227614745297867971496265385307299528776493150340060056535662624\"\r\n        \"8103566467761993408203125\"},\r\n    {0x1.fbfdc9be7c4d7p-503, chars_format::fixed, 555,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000007577545297109582983474072004813788365907822173003775895897750\"\r\n        \"0243027089042030315562065576850353242510972298890882064041460099136324646511365952487433336851808048530280\"\r\n        \"7469768102470893345904366988820833134850152267923359413168388663558680740356029634812659629893539455871490\"\r\n        \"1539292174038185034695148230653865497794789982703501268412769655160379904851593576191402367586702482071814\"\r\n        \"3018893897533416748046875\"},\r\n    {0x1.8b6638a74b1b2p-502, chars_format::fixed, 553,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000011796090875694487081840030359311463862270589279053705811580876\"\r\n        \"1074837278249626667753117288906269017536468931733577855602836561907239918066053974196590031535933155795041\"\r\n        \"6152631968840646565017772126604856329170037235553003815414569897105068661910842231236269130833379581876621\"\r\n        \"3815606161209960395800117570967320430008706254767535186723326596270184551813838881741515821066634828184760\"\r\n        \"40847599506378173828125\"},\r\n    {0x1.d46dbd2abc6b4p-501, chars_format::fixed, 551,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000027949604896251110474468435743440309945288120594039878056554427\"\r\n        \"9921954016171784487658911555785873548242453272163051998044291731736689754999480979232786217446696064729498\"\r\n        \"5068805236473413153126372484300849165127366092938786364110450759620750625707230523155311741574527176683116\"\r\n        \"1173715817548051899046835891129345654406713027853111244031216018263685608830589461614758717278306221487582\"\r\n        \"661211490631103515625\"},\r\n    {0x1.12792046e3030p-500, chars_format::fixed, 548,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000032753828239853733863446369582437710222695184799823949849189206\"\r\n        \"1668447150314806302769849056650294108796333252127316348030245611596414872858686019667951434279227319113223\"\r\n        \"5015307772538931409118755707298893828528817337051954380499856181898096431741496302183450840154663766232702\"\r\n        \"2577849630928970432781679531426439396792112263446829491223785021441382997151012842866613095083039297605864\"\r\n        \"703655242919921875\"},\r\n    {0x1.91f97f1e1b12cp-499, chars_format::fixed, 549,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000095938032050821536271229835447916874887997484567576901965829125\"\r\n        \"6969378528924568632998836097558357236535442102841682756532772118758908073143284830054239179665994380300567\"\r\n        \"9051664978882490798724246262234220764114202399847393492562247437513415173947998719357558940259847465774991\"\r\n        \"0798871766481335786204703144142446357441296310764517415801702007499677278970537754650832473757304796890821\"\r\n        \"3078975677490234375\"},\r\n    {0x1.4b9aea9518c4ep-498, chars_format::fixed, 549,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000158286344757288308148434405235066837656882541831304777114304342\"\r\n        \"9024084047758469948167528176544682776912653363035930280156111373619638917108231837788659400421477874750498\"\r\n        \"3740266631275601031515835959834139181852754824887752435828740018624766928424809502762608863433657124684755\"\r\n        \"6501019103039194246314666325291562322641451797420234321729919875813660410590105384869702431771543160721193\"\r\n        \"9990520477294921875\"},\r\n    {0x1.1106179212948p-497, chars_format::fixed, 546,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000260646976887816664639348267585205737473835194484928666807299508\"\r\n        \"8430752460212614384745198842486859348406019417166829789576139383055137489322674490773682689374422958338204\"\r\n        \"9638312333250627743062586688725091585459251117578008013458312697961852084035149641000001215986901914712978\"\r\n        \"9917303218067379788735552246485106897748980726714235495824747867132452073278602120570690559020476939622312\"\r\n        \"7841949462890625\"},\r\n    {0x1.f48d4b7371b3cp-496, chars_format::fixed, 546,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000955721437835636792125693963867145622443146689409402710835290532\"\r\n        \"5520381149247389439448399516323693527385696516282605302217517721173690808036558667030681767685356861437907\"\r\n        \"6473589746382005556442084671513745675453372836262113019323894209341343567227178727748481796550962938455025\"\r\n        \"1638480990808959430571446202539785042577248358196458841392453774487726949584049437186328290749770530965179\"\r\n        \"2049407958984375\"},\r\n    {0x1.38223e0cf2f9ap-495, chars_format::fixed, 546,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000001191935964515715076215188574587129816946998875964752027561753067\"\r\n        \"9373213681293098328176454498212756348418279118150555601665201685096769753982448168633584412176407702216617\"\r\n        \"4838198246329265529449867422827831499533947719005264748430392712434016735879361540756907724219470212796155\"\r\n        \"0080648296820459406354990529597216843845630549601021605362388735114697726445991566440740783150431525427848\"\r\n        \"1006622314453125\"},\r\n    {0x1.3e9fe67fedbf6p-494, chars_format::fixed, 545,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000002433444775335062147896490836112506004327807866246654749986213128\"\r\n        \"3708984042278535636275983077789926684370094792417844456574830999066006984496233880787287573261319640680410\"\r\n        \"8645775952673011694052762137127630272887337941179487208165929511288223378667951186140773886313469032626525\"\r\n        \"7013513191916123647888187047926526116330566078186068092790478450763659348438420169935536563343703164719045\"\r\n        \"162200927734375\"},\r\n    {0x1.bf4f6338b1c00p-493, chars_format::fixed, 535,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000006832519569622275826230015210842443752857043009150473087306324619\"\r\n        \"6160570278444533395376186268614032140532264488840480451914504837343385590483951170204490217840827799011257\"\r\n        \"3516429336486994559408882196722920797431871205120280497991740451360692438534245102123154809896103271026750\"\r\n        \"4632110823167822434654856228970383578198439787772359444028780395594775340373239203017874388024210929870605\"\r\n        \"46875\"},\r\n    {0x1.1cdba81ed92b1p-492, chars_format::fixed, 544,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000008702231667009879595972740876282748210436150590379187728392187690\"\r\n        \"3868602415596437465814520086552230400500984567250911796258452201525241617115394462392204802181167071519763\"\r\n        \"2594303566335424562084952924302166284271162099211654864097202163709480482507076519884526116836205258215614\"\r\n        \"8171394464612237005333734915500968164199971876218771464695624584636893210631012132716399776199978077784180\"\r\n        \"64117431640625\"},\r\n    {0x1.e8bded2bf3efbp-491, chars_format::fixed, 543,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000029861508065908777159451976047342515240826688859949110638489858234\"\r\n        \"0608409889733594243845536658198709654134476256943272501564888338028997374032133260948786678076350777407867\"\r\n        \"9419497302854951107405362150099364518243510024657283742270237945843651504136068975350045379052042474267029\"\r\n        \"6953273560932560846458100107183547166975426819254291611518094470727641954967048615321445481640694197267293\"\r\n        \"9300537109375\"},\r\n    {0x1.8a43b5f93a8bcp-490, chars_format::fixed, 540,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000048178117758993382415252081853649016760029538206499370204986995420\"\r\n        \"2500823235034405160203664726038623565286822407474487671722791487229578768266569205598375311931512631402861\"\r\n        \"5794355146398741091383881484821645516016589991338662690181015071509492664273040280948122893995104403874967\"\r\n        \"5770756688447619742657221113011558466576481022161112679423282758608611546415761983652714661729987710714340\"\r\n        \"2099609375\"},\r\n    {0x1.7c6fb9421797ap-489, chars_format::fixed, 540,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000092976724414783708703425137615132523255799443671421598073694843277\"\r\n        \"9850250477352389588739384698331012106689787849419886842856325526502716934419983558360032835835080894125849\"\r\n        \"8928464653140915818346980791538763289936484730102094049772932148827792590711460754459836901369343119647606\"\r\n        \"8605511929612365598618832617157268611528914345651254227519998483149903806006114637128234789997804909944534\"\r\n        \"3017578125\"},\r\n    {0x1.fc4d97b6db260p-488, chars_format::fixed, 535,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000248453377974546054124096218478105162449105381129043001342851481517\"\r\n        \"1967045024721937503911256327954787145007082612013536717790258656047688413221689961965839099976161689726876\"\r\n        \"4336167475114409706302346559379795259653938717192120443284889978102477887234003586072984895060037225507355\"\r\n        \"0116131407179797214274900984778979338365843557719019090662749781175727345483572605644440045580267906188964\"\r\n        \"84375\"},\r\n    {0x1.27312209461f8p-487, chars_format::fixed, 536,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000288573615274172078525608166258096043109731380500375273550035474006\"\r\n        \"6984700266197561310311413010903161879487471238509926986670990336855614873626750099685160011141832719989610\"\r\n        \"0382007209935530694287868902684985822736702244425962649705422453347112460171425263410261221471206514481370\"\r\n        \"8911163929066039321855007218207870451196293377558772035164374411778261640681986222034538513980805873870849\"\r\n        \"609375\"},\r\n    {0x1.77547904a2effp-486, chars_format::fixed, 538,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000733829874253472696504662411664356921355995256043058139423378569315\"\r\n        \"3425794095362433154716834833762320281163276751347969286341704922201208270815214318925357902195642894168771\"\r\n        \"0346544040836292450671326704582503179785484653536739475002131596213572274974548972149055531629256889984443\"\r\n        \"9482830827645593200019724173455093084667664261357601024773204125019706233964966735072721348842605948448181\"\r\n        \"15234375\"},\r\n    {0x1.a21026147064fp-485, chars_format::fixed, 537,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000001634759818935282177045054054488787491046274899356237491510492363212\"\r\n        \"1430427394154917169330583508545076873765892171099360310717869665020910581306139857330984180339339395585883\"\r\n        \"9364145480190924253344292068014980758090871827549648002131375187771943927587887540239307592878494318358078\"\r\n        \"5470118572485534281639981340542519549125892000830440747781608078598419419441567512762958358507603406906127\"\r\n        \"9296875\"},\r\n    {0x1.e33ffe116dfffp-484, chars_format::fixed, 536,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000003779322643470511364635598031540684384273016181923210691513792826029\"\r\n        \"8076813313813372642658016571660158177452338055855888546398090024181726654816502494516076011656336364216393\"\r\n        \"7498191689679806757915110601496243241433049926608882895493979098170115259616136077677344537414294150339871\"\r\n        \"5913393644403242726936741616261493580695326300741215037921072531691842576184736657296525663696229457855224\"\r\n        \"609375\"},\r\n    {0x1.0d97cbfb3bcadp-483, chars_format::fixed, 535,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000004216777346143084109616894481874471130717304789167765447632830415650\"\r\n        \"6561188571555447146574496467644980277018903207961907119388732661400545320850614276758509932232760700377715\"\r\n        \"1774727915336623087705415153818142529084209963045604465362761727503323166241185255705030684089166869622162\"\r\n        \"2591255126538876387262079254791476225386081573853957834303876636927949431155049353492358932271599769592285\"\r\n        \"15625\"},\r\n    {0x1.fc7c669e372e1p-482, chars_format::fixed, 534,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000015906736035433478795666492032411048437699973656947142198913549771963\"\r\n        \"0496307849953288877553271285177991680664449513987454305753588712869415089089334399246465373968206186757087\"\r\n        \"2068837637964263788973684320121055067169326875666687873260448935727563546153270143949896632947326143345688\"\r\n        \"6465150337567684375926650730030214310392272041024179539494508318355717874093002706104016397148370742797851\"\r\n        \"5625\"},\r\n    {0x1.ca4a36bac00c0p-481, chars_format::fixed, 527,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000028672951771554432303752342207397704874686379593615168937776854662187\"\r\n        \"8773405301900708068746337504994945322408818988088425644366771375033162476683944430496046660877697340757485\"\r\n        \"6334919438201582885201415341555187435812767248875572624752948053776526726589546868961296725647676685932179\"\r\n        \"5103185844509815639410574880178487307497168016508884042466468421161973623156882240436971187591552734375\"},\r\n    {0x1.12bf051e55395p-480, chars_format::fixed, 532,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000034379041633188433781391796667234074028435987426722232347622158962219\"\r\n        \"7482682623389863983269985536637307332869261263118140094455518050615101152124817967901873027097068416097734\"\r\n        \"3415198183537556724484060097889722304549743586116310371815207363078165968507947562208219568651368309624970\"\r\n        \"8885236845139518626737016243174816375240155021122412920468850604975921680939165980817051604390144348144531\"\r\n        \"25\"},\r\n    {0x1.7af60d7aa5967p-479, chars_format::fixed, 531,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000094838962310135761344092396167333415391569688763220398309454881231605\"\r\n        \"3065147462448233077188938996167179801399057332623091728034184656426130519076454149994764188014351734458633\"\r\n        \"3922580025523771508531272951951346764916390419819472756495777678716502600107256209456679635005594684631820\"\r\n        \"2967669406868083831280060434746012560989781549406031651292419456644039454928929444577079266309738159179687\"\r\n        \"5\"},\r\n    {0x1.b73357a425a97p-478, chars_format::fixed, 530,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000219829002164969519126362375173216597026707988157805326928281888340879\"\r\n        \"0275588501934261303304156782175666496020163657838417950808986735463441471582316162574387379909783845369041\"\r\n        \"3411293450978479405679605510279646240013270535759912260815315741921876740827520857597762872416630687383883\"\r\n        \"512728005919619715651456869894288878525081921353210190074545184093363081601069097814615815877914428710937\"\r\n        \"5\"},\r\n    {0x1.cba92c6e719eep-477, chars_format::fixed, 528,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000460139592854495622187848497964174062689248092750502409651176185387012\"\r\n        \"4874208178789429842802485022063149539488430909194789376169291280004440926372510294058843562505380308641033\"\r\n        \"2132906020576639441970365151635139919563397044809863566255987603107796661536180276223793295979901765098721\"\r\n        \"85236937051592948849485535253991494778196501116690165993113720808993516442342297523282468318939208984375\"},\r\n    {0x1.8be4634ff76b9p-476, chars_format::fixed, 528,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000792608961783648857125868633389541908859107692040025788732606098253761\"\r\n        \"5712397245267211703428369834900072721788119149529402481752215477108783887788832919655403424858374016379470\"\r\n        \"5700539445581365307871355509910660167405264567879220059764200181085239747180724882163715232070198364457815\"\r\n        \"99000049045968896364821326508004681718328980102387774532495348135674451128807049826718866825103759765625\"},\r\n    {0x1.195bb1128d351p-475, chars_format::fixed, 527,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000001126604874345762001813244975010961690201250155263230102874630022277230\"\r\n        \"0762831245282635755871042079935221433039730425210520222756093843627061944194023238493891343960989637060980\"\r\n        \"1593025643499862217542244084349248920736567803910409665339573573343421659688270916752098164150324786867805\"\r\n        \"8348447755344979159303793136769657451566731575139884695914882679901314332937545259483158588409423828125\"},\r\n    {0x1.d9582810d5991p-474, chars_format::fixed, 526,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000003790698976276097701053929642020471319796132317855612556647360005645344\"\r\n        \"8874348023486668990302113409067507642551266637528786672055653201849801299141775094686807981628168542009262\"\r\n        \"7374913565047968810228895304309081082777648385365220836309196120447500956558312752535188664481796184515969\"\r\n        \"998860513529444159982414204294876763676852096147815252970649825547955202864613966085016727447509765625\"},\r\n    {0x1.91dc30400a639p-473, chars_format::fixed, 525,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000006436458682719876730635812539634180995079699347021814214234357488008389\"\r\n        \"1301701589050045580411828601056066543857861354184855535527508444334817882353822387608534700556827601216675\"\r\n        \"4572940813489866481451272426938454005768836732009907411180509574411567449720530764934999343126892919453749\"\r\n        \"22480428836021405851435879947613325905648050990408162049774727642148519635156844742596149444580078125\"},\r\n    {0x1.bb4959cd66718p-472, chars_format::fixed, 521,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000014199943377251187537949675350005079423187700022228758326221521640526029\"\r\n        \"5213467409536957833999369366008722874407753705401513284671140970518928691753252515077837559669042688180179\"\r\n        \"2231378697370136951216370863303679060473230296854766707360327968674338036515155027602470266905967351968056\"\r\n        \"3684598499481186364055881959576442428067625960673098033625050273798251510015688836574554443359375\"},\r\n    {0x1.cab1b98b3b707p-471, chars_format::fixed, 523,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000029387007315399001337843467140701947490646533646383646741168981933069251\"\r\n        \"2610752660214561865506794335949789967239321904345156747275229367729995831822884324397633531132361947458460\"\r\n        \"6775207725364931442752465779602158622313197512447305365216189939904546876264703794084991693455204003412709\"\r\n        \"032881758809299262428136448855311663929317040733753824545242128163380357364076189696788787841796875\"},\r\n    {0x1.513f97a6beae4p-470, chars_format::fixed, 520,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000043212757508195659485508065379853979844500716301246743150152785223009553\"\r\n        \"8800362411846402873351540132643570960952043271132202966879024207483585271608519582168701354278018371563475\"\r\n        \"0974720782095418660543965503018408535752782166921273364856333578679926605858330352242829232861196385760569\"\r\n        \"862934221186030844482600416992243969322617877399178251164590935928799808607436716556549072265625\"},\r\n    {0x1.23ddda4aa4f46p-469, chars_format::fixed, 520,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000074795674901009501599687387979276428028217065964050376989668893383691257\"\r\n        \"8238068670425158420787444745170314071895485469191115831640711419412290132762704670408024637792177786766340\"\r\n        \"0480684683540310689622466015351601862349167111369075434108876998189806009451657247710719467572422765836922\"\r\n        \"739389375015650257781352180780599630217854761888887876568332568893993084202520549297332763671875\"},\r\n    {0x1.37ee070b3fb77p-468, chars_format::fixed, 520,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000159874398570857491285439794684213474047983693396198429097585380915449061\"\r\n        \"2351322400471462100460431734115547648302777044697168576967906980123863581995817786040434280493702688948752\"\r\n        \"3834664605233743964551011893531130458715673817464152701502724936963357236274397010976223316921535529322903\"\r\n        \"727447764051111283609075028782985288180585511628949125194354419221554053365252912044525146484375\"},\r\n    {0x1.7a3e814f7c455p-467, chars_format::fixed, 519,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000387725434793987459124953106745422453922512891032594874223625841852210055\"\r\n        \"5592761377749317723583554852811781183024322409339926242048687874638428832985662512640504057974261144387545\"\r\n        \"2520600259624947493551908767796439000133134722428633454335681641891495508639495264472445987261653436831132\"\r\n        \"64168124346368742549505223090492057351838011423203673479209729890726521261967718601226806640625\"},\r\n    {0x1.b008ef4139a7dp-466, chars_format::fixed, 518,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000885729045808417896147542327116863969597592909959232598601584432090028129\"\r\n        \"2962707482488999909479826983551325409988454772747503340056640501172935512844263846793138597095532215877953\"\r\n        \"1368015782256417636468472367451669020006934158710715958539951912279109347589481317524549275125040003675828\"\r\n        \"0058854629233171655759043026055131449871016536323016683784903335663329926319420337677001953125\"},\r\n    {0x1.6a3ceca142f25p-465, chars_format::fixed, 517,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000001485272161434473543729254163996306044326314110204365635337295518954951766\"\r\n        \"6043979043032187958942357980893037084025284854740162292307556763858224145538295607452834423766627270010115\"\r\n        \"3478685493953250306368486765749182433290574627326818284042141799183800323706078347302422984042893438179040\"\r\n        \"719498788628840946618341162630245765429564945800410859233497973264093161560595035552978515625\"},\r\n    {0x1.879c5a128f335p-464, chars_format::fixed, 516,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000003211416622121784517432744711599239237466896440232926880096371200383034052\"\r\n        \"1992537289583647041045528110284263530349951539139983468640852619166251243800157789356404381418108529823424\"\r\n        \"6800586801045226636006748241313130752278657165236190851192753909236005321071256981677969599796784446204027\"\r\n        \"87489118438774242735211460419025885846797137206727786040705296954911318607628345489501953125\"},\r\n    {0x1.a13b758752749p-463, chars_format::fixed, 515,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000006843053332100657829831562220682788863437556445749629660036369035098061976\"\r\n        \"2819624331006890836920053795052268837040249511327940332807288732945808765620126034268676784571417399659098\"\r\n        \"4304971343366016453921898634106206767439674588591040686882768194535915436770345312159774317472950368938005\"\r\n        \"7241534775569646829196396378247871130136170076470499001874969735581544227898120880126953125\"},\r\n    {0x1.dd22c5548b2a9p-462, chars_format::fixed, 514,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000015651071039519719751268946730433209491685269599788420485953219030692473518\"\r\n        \"4499016495553665668181218038463735680904417760697692262477792647738252648295215490091671889157286396107620\"\r\n        \"5611420801384114282311152216549099455747381869282054756781298103540835711990016306871443323392685777042535\"\r\n        \"287304513633281869348053796759051449311207979673589429925328886383795179426670074462890625\"},\r\n    {0x1.3a466b3b9a35dp-461, chars_format::fixed, 513,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000020617783292012132110048484524577034708763801812806846889421937147593782421\"\r\n        \"0465446945123766444293508342185314226530713713824082127126656554247991288683437918042715199973601623635055\"\r\n        \"6160745124128835050848570030661233050190132621333636152617574413419624138051138995646737549047491952163495\"\r\n        \"32298011658742230483021286380716757918646594494906099104269969757297076284885406494140625\"},\r\n    {0x1.af63dcdd336f2p-460, chars_format::fixed, 511,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000056602054122048727921826190049712048498669146495554482077926052213769892391\"\r\n        \"9721551078235387314088747298990346792194827829660599641240756981656489830070688868731818918413640802502222\"\r\n        \"9254301347470836880704748790302969738046971386503460831112186107202194534175784137625129392628895158265668\"\r\n        \"499896268624088807818901523078678889008399162559304063080389823880977928638458251953125\"},\r\n    {0x1.6ec02ea745f7cp-459, chars_format::fixed, 509,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000096241634559974588550470031663368349943378831463927445452058900881064926118\"\r\n        \"1838480910523453866866848763445326161315986809133600636497090313419475443507804928279463021903686529521982\"\r\n        \"7272372772827707409899810195006865574824665465743137968830206089146401495465235722508613312222305895849308\"\r\n        \"3469442454413174103437740243099393609930015773545886048623287933878600597381591796875\"},\r\n    {0x1.9e78dd35e6f36p-458, chars_format::fixed, 509,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000217529092852511916976481136990537026377274895205410423605823337212791259481\"\r\n        \"5669040846309042458464692354951809429921316594686439401476288544343704270602632852441755153220776502469226\"\r\n        \"8832405245030293038442707283947578424923868378811923323228240750150943772355656344948644194454640554859114\"\r\n        \"8840750526187231093226911532892021280816813831593403705255695967935025691986083984375\"},\r\n    {0x1.9a585f80bab85p-457, chars_format::fixed, 509,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000430726291201881032495123987757462219920856107166247088923744679917792617427\"\r\n        \"7643926410960953639064656723442675253498019349377302472925616083800091852427968055195874797685078064633187\"\r\n        \"4989411246175209989797637667922658597168331331423091617844456796847969232221344683029181274309997674362166\"\r\n        \"0195737945380030785131722532615733040986549275130901293096030713059008121490478515625\"},\r\n    {0x1.a6e65ba502986p-456, chars_format::fixed, 507,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000887808969808456945123556994501356671674746084949835164788589684096594825746\"\r\n        \"9219694116915470475749402676706508810042696649702920684395152260781900249028920025575568097493087047790032\"\r\n        \"6755104819257649560814650013648850587868487950664334763601685103216924104124624449367240660195513725717769\"\r\n        \"22263017000926269477966339109356079124769044186304967070100246928632259368896484375\"},\r\n    {0x1.2041239e921cap-455, chars_format::fixed, 506,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000001210286050585642744186350691141643855764814083642151305657706237367114407218\"\r\n        \"0353513990930639340259058767237325709935670423513996244569968030077273275469517682229246899606678958937324\"\r\n        \"2949311404414022027874115262780878530831274706477078046795901829349348680866369719046454352952713560173235\"\r\n        \"3052334628323918972488583866538415926878032025104658941927482374012470245361328125\"},\r\n    {0x1.e2c2206571f8bp-454, chars_format::fixed, 506,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000004053888118960487475899480010322448211042441998490692220671702559606035648313\"\r\n        \"7003469609681462381640957524317291188926254129669373003981744282470621799220617474087959579096390065480430\"\r\n        \"4187742835595325686164988374589032221302465329000777188362131116839661003606492152115484285822834483953377\"\r\n        \"3793548383142400170080167454900059158143070525692763794722850434482097625732421875\"},\r\n    {0x1.264bf10d7be2cp-453, chars_format::fixed, 503,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000004942621032233825263557206107090696840588821687003463265295180364700394447203\"\r\n        \"9593835210475205592373220399127701880188471829971253475219339114010891882483976765506775180065695722698146\"\r\n        \"6137842744520790572580634924148345992801094950146746195022190939969168798551415894884143192300883495947928\"\r\n        \"5883564251332461521178735704628190938091092387907110605738125741481781005859375\"},\r\n    {0x1.cad3f14cb1924p-452, chars_format::fixed, 502,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000015411744957634478558732875158007911309742643791263152383028800246394250010301\"\r\n        \"8411395434201182074077539207603218589797015836084381494407933290832598692742653536345116174588473355663138\"\r\n        \"3997587521092166170726429621207135842117636071464132112769695338048041137489524235515090494741996883492492\"\r\n        \"346460319710822961304962419452460110382008284801713671186007559299468994140625\"},\r\n    {0x1.4a043fb92141ep-451, chars_format::fixed, 502,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000022170106143596450609014218157804357964381470241171242549541903911649755928696\"\r\n        \"3958402834891063160891464277435062966705933777580211869707929056934148231613404163981973357636235389342669\"\r\n        \"6992729841209988489542923697872554428392780018075983672770091316945354715295754269008522521640290584844958\"\r\n        \"554224663146563346799785217835259873951636588884639422758482396602630615234375\"},\r\n    {0x1.d91f605f33ee8p-450, chars_format::fixed, 499,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000063567575408975392743526724403263859606835265005008746398722782311228825240165\"\r\n        \"0881046975492633161486563132346426578332847489634158927173716225287463270003583594203279044269022582967257\"\r\n        \"9378987237901012851778677095976655741399044978428732881345094886140578723570628664975737909788927071910708\"\r\n        \"005133352031145300938446489913435412388853507081876159645617008209228515625\"},\r\n    {0x1.653fd37ce380bp-449, chars_format::fixed, 501,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000095998267065455804136465170482547947366999684488969626917464974228247748059445\"\r\n        \"4353279537485213672367703674531451560088375242660031278793518034857995227061963548088366069731985696736508\"\r\n        \"4056280597444764311055010744517632659439131361488912251913663824732302366424969441750856521571686454336063\"\r\n        \"94738931683648071281473554847572435787250721972441169782541692256927490234375\"},\r\n    {0x1.ea583b86883d5p-448, chars_format::fixed, 500,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000263525973150510919647132574948439570965792684539809398810026647756100088322533\"\r\n        \"6060430789537878181702157577221312628897975753811027144814431329871394977027865977566960377530986920136721\"\r\n        \"4595368780107386756631929499283165347789957070133359903826764691144708669140059711646621994591237328370942\"\r\n        \"2329039006745983085457871703159650651759893236203424748964607715606689453125\"},\r\n    {0x1.9caa8f7dd9b8cp-447, chars_format::fixed, 497,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000443558520762325337039670177223898989458218572250586819779652406990802628870846\"\r\n        \"6038623458578660938980539765362319287575812445115443604920161686867563637962378827974689216987973560102413\"\r\n        \"1474113689214566704920362001387218474022856262900682427132163357445837625284898368022340470806780040356729\"\r\n        \"3462593645569098752698552088290749606525054105077288113534450531005859375\"},\r\n    {0x1.0b26a7ab62a03p-446, chars_format::fixed, 498,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000574299933661418178408124797535427463828147490944204908273475129475790203620596\"\r\n        \"8808235289577557214185221175809093488648720304508481719567216493518482059798351863125739938915060624160992\"\r\n        \"9851660342416199442616527003779071061538402153295760816763318979764870166666613065845559449530246032453946\"\r\n        \"67724116557668613623517681616016498924448541174569982104003429412841796875\"},\r\n    {0x1.694c9672ecb8dp-445, chars_format::fixed, 497,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000001553384362442932381943852794272995188882668422481808532165805295925774530855435\"\r\n        \"8873724455989172691764656869529304703414054431429231326438943379765976288158973018332636251844090175709048\"\r\n        \"7907181989255445273967251973559354426957069146438147193651593982875827959976241429283746749471915763082811\"\r\n        \"2902620254122175049117795947993016236754471037784242071211338043212890625\"},\r\n    {0x1.15ca8f95f7163p-444, chars_format::fixed, 496,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000002388694047247810181551600230458601070525036995026327852093758673520557592030059\"\r\n        \"7436987445133566199723253520905622088961177203403340626842562063948166533848716253990095161542222823363970\"\r\n        \"2916913751658371808451818416175046591027822450168326666188029786423462650604766287956000936915758528714778\"\r\n        \"113866919214746715859310646312523018774953698084573261439800262451171875\"},\r\n    {0x1.1c2c03dc16238p-443, chars_format::fixed, 492,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000004887121523587298843517079003723681337537860440567719421724171809032686656050087\"\r\n        \"4834949274333014957336071556902275886701520752615198889555348290123499906363037088484546285431449365571681\"\r\n        \"3545090738801982175971799897942112736051213679070597132029303741692199615736542790245350502761093230347414\"\r\n        \"67856411410222751404009550700580088999913641600869596004486083984375\"},\r\n    {0x1.5e495a5a5b735p-442, chars_format::fixed, 494,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000012048289504187995891459061440516981076638732120771659218926621650385434481812842\"\r\n        \"5565764606566243510288219058966625819337939917796520503670154154436651304901717368743143186394807699935909\"\r\n        \"1565846790156423584109474593413689541976548679931460273314635130483027907981785192792081387152832558721199\"\r\n        \"6535640679843097377442714718438765419961100633372552692890167236328125\"},\r\n    {0x1.810f44c622e44p-441, chars_format::fixed, 491,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000026488657681982224362975086519642031326070653599531695491298942136575989842374130\"\r\n        \"9139575742203039336304529094287691741966627719771032423495762254409444179311243835772567386195458292994705\"\r\n        \"1941156429898501392004941590588928963306893800268427406521691881809325113789150170542748396344959084162370\"\r\n        \"3067350646766787719232319649187434862369627808220684528350830078125\"},\r\n    {0x1.97653902c35a8p-440, chars_format::fixed, 489,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000056050315915746605269229572281796709012860726683120704776540492198506714810181021\"\r\n        \"0084408541082557658500853846529071987618814344910087704317888361861949507041571302535319807153374858734455\"\r\n        \"6128663875426184058714691467962651372264615689058812238015769309640382466140672015426133338338772381569455\"\r\n        \"41347798517839166586329037456071233691545785404741764068603515625\"},\r\n    {0x1.d0b06982197c4p-439, chars_format::fixed, 489,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000127865809675379673931701562672267103831270744526777044682020813167535931494462780\"\r\n        \"5427237946283937896764463663208001660671769439390470311614391098056422657748039715753857555614071040843776\"\r\n        \"4507966200006170913308468885696110133708193641014112495709199548680022709001658719762139244141769534384518\"\r\n        \"96858275740510024279521401890935550227368366904556751251220703125\"},\r\n    {0x1.7ad59dce3307dp-438, chars_format::fixed, 490,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000208483354839111909423235805144553034826803434467093250087031592844497279565573718\"\r\n        \"5683441726487182520478495393187135418421662424496630273340712102924084001207643461912854939156647313501556\"\r\n        \"2202086754238881125112444185947826421095576363157279834423466108065623720077332405340673896657422758721836\"\r\n        \"818312138692551879632090978955449855902770650573074817657470703125\"},\r\n    {0x1.22c47def048eap-437, chars_format::fixed, 488,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000320035283620302166788218219483718258378975585793664302031648857316898480203335377\"\r\n        \"1713512488147392270162099228886927309075062423572422140898385972403389861024642832762715603470566441983723\"\r\n        \"4475149669897348220989832360687594706199654822519956050144301526089683893154042597972946227286045644119670\"\r\n        \"7008701319424714322741006011785458440499496646225452423095703125\"},\r\n    {0x1.d3be4f543da5fp-436, chars_format::fixed, 488,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000001029649923330716605140999056670660455822138004389178960245612518154204429685221195\"\r\n        \"3765862019485098933960139442073435740250248629227594233385323846119340430984906337219845291452863937061186\"\r\n        \"3498197972678354451284120449607345881475872406589424192521997712826297511857481300936242063273315044261497\"\r\n        \"0604109796889529120935379002954590532681322656571865081787109375\"},\r\n    {0x1.fd62fa30b36b6p-435, chars_format::fixed, 486,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000002242639476728350057234478757977212780535898171050351393197817899654441013735267957\"\r\n        \"5618851857302903865882730175199229103565496011292631095934557746078943220095026182662358550654902950589598\"\r\n        \"6246328713415363125428407082180577115652387196835621603031124215033164972079051555401962570523619692898706\"\r\n        \"28723535172405437079605483585709180260892026126384735107421875\"},\r\n    {0x1.170603dbe87b6p-434, chars_format::fixed, 485,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000002456872917149054692341910801588400297342034487935015689191135733263452080870321491\"\r\n        \"8225650257080313080960162114039088967256680674409730194548950760744934117469497887462044942346223608032266\"\r\n        \"0186527317970438773249144337156681937599876222913792675789099487731403308452906025020919034465325049445396\"\r\n        \"9941105882736470645243131993851193328737281262874603271484375\"},\r\n    {0x1.77ea54b4399ecp-433, chars_format::fixed, 483,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000006620060796036903650416836422120773948577387722861356017297500910103852844569875419\"\r\n        \"3218898779976326154511917336384287231664184196234936420385925179861320722403213741347947394903037876071287\"\r\n        \"8146559509391806548214262613367163669769028100225550634362833144734261671154897581990416404798059344914705\"\r\n        \"82775056018609376694283863429291159263812005519866943359375\"},\r\n    {0x1.93170d7796999p-432, chars_format::fixed, 484,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000014197241995605936318075317043001757935035457049201291955866575822547697829794624951\"\r\n        \"9829155102541855874230559487389305607751617582700679057839905945613876060209570099889526685608968859022154\"\r\n        \"5451651730609188595965784720429445370267692111528854939925241769500649591614777352662374519950927507309951\"\r\n        \"396734409084237509869608206969360253424383699893951416015625\"},\r\n    {0x1.ff784c52bc952p-431, chars_format::fixed, 482,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000036028982430553334107374243676082305559955741670713515214432745189797018506318167441\"\r\n        \"5119379044974650651610682213475903496748485769939459318413756361660218138899061663084963748999691972507933\"\r\n        \"9977690290364910317130272509703637802374239144100499997431894236097897299940723946702573929557957332859418\"\r\n        \"3181208512046210003243462693944820784963667392730712890625\"},\r\n    {0x1.5af297257d112p-430, chars_format::fixed, 481,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000048879393706963279061651865580809295809985896396271068785213668870613554247017676426\"\r\n        \"4613568775870143246099332229707765029557354523950224816865264246462861886095699349276602653803989153158999\"\r\n        \"0908585685941164363224037664050403023168762797067327883280705896601134110886320862615955338992676555453042\"\r\n        \"929182604106022776158102516319559072144329547882080078125\"},\r\n    {0x1.03b2ee82074fbp-429, chars_format::fixed, 481,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000073174892255233898487807636785800529379525766260573968879990028870309082137226413786\"\r\n        \"9707037754094766826168104680726241144403907247560017629565271829849434655181507428399984635472560338317561\"\r\n        \"9782063705755948849457107129514927443108698035930496633435099731335354533972538276537731498433942868404311\"\r\n        \"764137596868821065976273843034505262039601802825927734375\"},\r\n    {0x1.9fc2b88614a46p-428, chars_format::fixed, 479,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000234296202969220701654372625286792351494656622948588264432171250377493874471367898894\"\r\n        \"0931408330268277100146802227564773380100494885443853694357578831151249749287345522900632025209052981850164\"\r\n        \"7499267085097794392124402283114679695089634514614855499431411479366570952080402733612319102179125471664328\"\r\n        \"3610837890005261507919698260593577288091182708740234375\"},\r\n    {0x1.1c19bcdca8429p-427, chars_format::fixed, 479,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000320201927875855240909079382047038971716012010839560229188802197580556167054647521707\"\r\n        \"7921304566834229785392762185141415572109308314583465318465889928031182893624995025779228264326882685649894\"\r\n        \"9504835132555500714162867590326120408214815993087768995979099704250953168843084388646762806659085377812944\"\r\n        \"4374817060285816350262422247396898455917835235595703125\"},\r\n    {0x1.1d050f4eefbe3p-426, chars_format::fixed, 478,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000642475926363441603398664936416724231204931381677133186106010273187261145870100386339\"\r\n        \"5620250675766811689611775362603277134352101533500749088440368668869832279571287827648056854835525875034992\"\r\n        \"8305180701119184697114085791427306956508170513907885443381888417559679379113930618425048181904818918700099\"\r\n        \"808584671394300069646732254113885574042797088623046875\"},\r\n    {0x1.11c71a2da956ap-425, chars_format::fixed, 476,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000001234269555172185411645268386384549988070188881757831646700056505708103168154961790590\"\r\n        \"7560256885144592305226724008378153404624922096368343873627455317325142880923526847640917510564998264021442\"\r\n        \"7984817459457410804145489729393111255042550742282202499332584178463194121184706289536253860130263980592733\"\r\n        \"7145199863994993183524684354779310524463653564453125\"},\r\n    {0x1.ee81e63a1dbb5p-424, chars_format::fixed, 476,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000004458766043103084573814044495093892580021077829793518393203048730169238491691343231457\"\r\n        \"9352529747020633396157671898279222655973091011667538712186773461994050081775765669981786041268824373912943\"\r\n        \"6110739866715672133838542989425811131717350350468471316563500366111765468871232128786825100591863013070937\"\r\n        \"9141148930754401380482931926962919533252716064453125\"},\r\n    {0x1.dc836471938d0p-423, chars_format::fixed, 471,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000008593040354013082701418503357485015504543760058542599736986671841666660902782732890282\"\r\n        \"2137151134768600284621627912476256256232688597033168567478982725596464412740769155465004605025643046038672\"\r\n        \"1430959519718823793955100880298043069592935232947251450817141949376117018162735245056092245100792007580709\"\r\n        \"68485004270664973091697902418673038482666015625\"},\r\n    {0x1.55264a312e91bp-422, chars_format::fixed, 474,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000012304010474281754010997831364457453532363710534547555388355590377279653877735542614715\"\r\n        \"8905193786947316223006782910963684928592070655580364056608821698264700123403236140552502228229389995505527\"\r\n        \"2978080028616364247692131602981552825675357276743670326242029680867553906299343023194677184192076335608358\"\r\n        \"70383215299994628111335259745828807353973388671875\"},\r\n    {0x1.652956524c153p-421, chars_format::fixed, 473,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000025763001930484683121866989543781242187607596461670705046008890509721150477966409285424\"\r\n        \"0376142853819533477654997259597310460635607291805673065230273042570734235752898997793752366928544966510763\"\r\n        \"3481209314028693375060230754644492619570048227210977560174685317157897957914242825662416808322569345838414\"\r\n        \"9419639584654984076905748224817216396331787109375\"},\r\n    {0x1.0a2b6e525e678p-420, chars_format::fixed, 469,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000038399042293533291316095939321676303114799213077840440281919805704609059805275974287633\"\r\n        \"2269808372499317365910044710145437381439295690008968031009068382843451057480056121258710576890301225315461\"\r\n        \"8254069768331287570250854349786862226002299989130792880255411596025381026026745679225130052848864003625387\"\r\n        \"812494718087208411816391162574291229248046875\"},\r\n    {0x1.80f3cf53f1e56p-419, chars_format::fixed, 470,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000111070534839140068297759822869409928825994888725953915393037234143302615526527305271397\"\r\n        \"9071222660231423121274199566584365256903829077551651105898776924580345151091413341216886755831641521800220\"\r\n        \"7239203834667792099786184987630604893166703784352411398622705699416184457581957405287101320388426024640415\"\r\n        \"3365910871809063564796815626323223114013671875\"},\r\n    {0x1.c6389b5e53ad6p-418, chars_format::fixed, 469,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000262113368468090987732763146851193877686932341901067358564771909222467220653398653985193\"\r\n        \"5456434459325162191582489835119660787344562300976799889128731641073139816977369344984867083299081514779085\"\r\n        \"7329074161341060155608291304076285368309466167310219059822685021348364465654950636532913662418976454294622\"\r\n        \"705464001821695774196996353566646575927734375\"},\r\n    {0x1.55b26db32be1ep-417, chars_format::fixed, 468,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000394360121134651044381759906739909380763523592866008869031497969028205506321153473563752\"\r\n        \"3773562778065540267581844648852745541005978291930958793464356548638452126281850878581468028895762232111744\"\r\n        \"6430729844203449939481104294338132959898181198769369429030216917445607336044844216188170744727707132695580\"\r\n        \"92405053795204139532870613038539886474609375\"},\r\n    {0x1.e8a41e7181c02p-416, chars_format::fixed, 467,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000001127903182848672536828516281251793616978886016663493588859071153715021957468803662903289\"\r\n        \"5212853463959440650365015465446648472216894301859689032829271238873991097893686964801536213424044711065189\"\r\n        \"0664773510091035844518841538911365037381575702547919562424686775048201468448557500757249194695989044218674\"\r\n        \"1528474147600036303629167377948760986328125\"},\r\n    {0x1.2667eea0c2e95p-415, chars_format::fixed, 467,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000001359122081875357896787748575354095721984684980673453454465121726789177000238439800164336\"\r\n        \"3339942878637947316632830235804125241752997751017057571712609513429978861869634906214183307341450424559118\"\r\n        \"7769088276321436054830545903438616748892094562844289647452615121206669018005906050956197704112274885164589\"\r\n        \"4198336694813633584999479353427886962890625\"},\r\n    {0x1.ff118baa5e05bp-414, chars_format::fixed, 466,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000004718684877818967099406960594087621978278121691471108630994279892449301312885179077894676\"\r\n        \"2990913058749981445405514710520814818552477939279502321175673267779420034282569987143013690995925309155297\"\r\n        \"3875772042184950963851513969229000287211204414046599085288555867645375655323789795402580250648241404228910\"\r\n        \"682305819790371970157139003276824951171875\"},\r\n    {0x1.fa00c13d0ddaap-413, chars_format::fixed, 464,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000009343828809651030070820635917985414790988850969247035368764192788867773143527423055878928\"\r\n        \"6142542238872497991929164230405696925429022528853431359200549928734206507270504063714712419433330650525747\"\r\n        \"8080943345820147523351879021893663491763825688527705625954046148312625239616444121811917130857641105884815\"\r\n        \"0414934963237101328559219837188720703125\"},\r\n    {0x1.665b3a489008ep-412, chars_format::fixed, 463,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000013234786366979427240557035972871836642676524574733744100764337150714243649312395488035954\"\r\n        \"5924438766721601552453328962421458549925648630711638265850295574292128380162020867890736183395718452916357\"\r\n        \"8218872766927116060686026545609252412900499832587222722510252054321150497353766705080322145596004049998388\"\r\n        \"463205145626488956622779369354248046875\"},\r\n    {0x1.cf3a6f79862cbp-411, chars_format::fixed, 463,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000034215813214105460697767882447548971368626256994487285819832925973102312220381249502362412\"\r\n        \"5245826541377146311911755533093525433960566479878897896249684215009582527023317672508250867310488454244976\"\r\n        \"0765465690238836297191957544621034981392176942003185295012273726522451681136015314107273762726204980959797\"\r\n        \"408157641029902151785790920257568359375\"},\r\n    {0x1.f2a92a57319d6p-410, chars_format::fixed, 461,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000073665992405027932576502815813307644287807305675409422460506005018551902720267819605398541\"\r\n        \"4238097696478280499866977319501776335044121496578337140066670655016184682180563483630646645866140852592448\"\r\n        \"5546243819526362906038236009913051704692368907667120951434121614917932393108410626345799351846363141934487\"\r\n        \"2508503385688527487218379974365234375\"},\r\n    {0x1.b4782f812a1a6p-409, chars_format::fixed, 460,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000128957226518911376304253303844382994740951550947702589965823067780944065331143233135517504\"\r\n        \"7106886920241856765143066843221303761924148291538730101056538730732209809426369364550317168661576089405951\"\r\n        \"6893342761311739812790458294828430025197514372868087428946951588938321376335125139248920989602892567087166\"\r\n        \"764139283259282819926738739013671875\"},\r\n    {0x1.ee7af34b365e0p-408, chars_format::fixed, 455,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000292193651505918198698068782865963925588668114184031580780326550462727555065603598806674662\"\r\n        \"9414856022915856947811511918774856265928387089565685999666896423079799518838921387503210415926729079378110\"\r\n        \"9619607895393891478809206008447840421478719878021387067971213191534286370952639136576340754016239270596244\"\r\n        \"6370904217474162578582763671875\"},\r\n    {0x1.14a9643bbe260p-407, chars_format::fixed, 454,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000326964662826875856166187350955931048656275212106681739462240684404497034874533411736674237\"\r\n        \"5107112336478396840853548949246738861004173600213341731028216731013784067505813407159442286256745421705987\"\r\n        \"9564336730252832758378650879985629367606550261680557818114147674750090027748379705550036504187010055755280\"\r\n        \"291123199276626110076904296875\"},\r\n    {0x1.0ec395f04cef9p-406, chars_format::fixed, 458,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000639989320628421915713048856864376033446721595892847469872724593420864829856958870455047760\"\r\n        \"2085248378390653621725063220797924719036318117380292385885371003940702879343314781859369351981914555340875\"\r\n        \"3441609544511913279421353519249173156705147582989555546199916313639688302881558151527596389698696131148603\"\r\n        \"0723472140380181372165679931640625\"},\r\n    {0x1.3d46e281947e6p-405, chars_format::fixed, 456,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000001499858317076989514525823966719727736795325325581008976677481214221154744543010314739392652\"\r\n        \"0164148452565746821726438033859810485538866367711221425645336660624407212028615122093665600343639667915418\"\r\n        \"1835015100676359058434896646680760060697115596642457489420363978275413709130349419500915238953912475561303\"\r\n        \"09703803504817187786102294921875\"},\r\n    {0x1.5d50c95200fb7p-404, chars_format::fixed, 456,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000003302628563203096102743078152669510483465282476374993410534221659202776793852752821674602115\"\r\n        \"4719645500132460661679437210805460928561156428685590521298685838304710818522176277171870516104981653254178\"\r\n        \"5396613413881621221776174822715281962709879298154402362185091314805242630602420016442167195524831288522271\"\r\n        \"67726596235297620296478271484375\"},\r\n    {0x1.31ebbf8025802p-403, chars_format::fixed, 454,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000005784701017386635665813571475178213245891547339196541041928139521776381395355953596859883517\"\r\n        \"3728934249636260139151445995784828228796861442045536931617772159167928718170270039634525523947964910286046\"\r\n        \"8456508414192128576560298176214002601568625115508870317479941454686582403880708905196368773576377775302859\"\r\n        \"163275570608675479888916015625\"},\r\n    {0x1.45f7b06a1b161p-402, chars_format::fixed, 454,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000012327531669436545124898364942880066252999983643906149889220149845403378792647983133165166313\"\r\n        \"0285406069850700818436949056057893055823679249585303051312488233045352968305435308456249734196737179082525\"\r\n        \"7509795944446677228676476284721228550824045540658730028149589335013698528738527418574216139323697360996590\"\r\n        \"077775181271135807037353515625\"},\r\n    {0x1.df4f5a7e05b4cp-401, chars_format::fixed, 451,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000036253358049975739948158532959144013335613046749062970323972515958518272146127656397527061651\"\r\n        \"2330158936928670103303942817509059905956200910147442693283287995230815845232814920748801039202484840625264\"\r\n        \"2689605477018394461232562723775452393614394463284378370218080769149758857505694173512387676848456319333990\"\r\n        \"904851816594600677490234375\"},\r\n    {0x1.ae574f97a96fap-400, chars_format::fixed, 451,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000065099035263477567697676239505583198082407067935910598028302046053953016881173914627929885947\"\r\n        \"7791434725258529119807135344605329826410498881079099916276669949098538219094433024528915815827831019768695\"\r\n        \"6168782270401104253286553344639621446432482400791768130297624278687916140708336692433937814041000624598609\"\r\n        \"647364355623722076416015625\"},\r\n    {0x1.5682e2e154108p-399, chars_format::fixed, 448,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000103625499379046964959091862600471117889956186476373368177844043699374677721759333633372126623\"\r\n        \"5620753673521880301015481835316604546695585074510813748318166403893500981160445255328996646350393286993364\"\r\n        \"7619899718109816110545702133214480028551930183171747963222880153709154561490814417130793857746429154076395\"\r\n        \"207084715366363525390625\"},\r\n    {0x1.d4e64d894ea04p-398, chars_format::fixed, 448,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000283727637445888553581956642123262479865258843174699347626803180913185298443069068327981185769\"\r\n        \"7978956361760878807872477381784762503118981775000906459859365606515765003795155337649895275836332041129618\"\r\n        \"2841990724847239933972813842498527812062965816261318735671086279933601076560689263142953954466296551117920\"\r\n        \"898832380771636962890625\"},\r\n    {0x1.8405785281eebp-397, chars_format::fixed, 449,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000469577627967097371555452723750881902711650410221457193320352809371226065978207672890408810626\"\r\n        \"6317865597179068001632585327384778399268861774060494784439725118241785784274686728434865765110588561031220\"\r\n        \"0051832556009496694325923769020452784034068367991583215029459659802806642615378078583902084902623741413663\"\r\n        \"0832217633724212646484375\"},\r\n    {0x1.7eb41af181b1fp-396, chars_format::fixed, 448,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000926284137359904239760725747278318480851718538094388095984951772776103581377881621517687046107\"\r\n        \"3820739358671762399252297245381355188827437788019215124457909177576002204640438529929676809008996321079667\"\r\n        \"2437668826852763435171642577713087958205149690123341255227614958196411999620035033920092092107889669705400\"\r\n        \"592647492885589599609375\"},\r\n    {0x1.812947dca7db4p-395, chars_format::fixed, 445,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000001864465441767581948787876829126288776423259173812970804019699886455097908896727904513649076247\"\r\n        \"6499773291512962081243971521160974817694996939384559925965931828721807767099510212703533750486073791155737\"\r\n        \"2641561128410518344272982297646952019398857018895104864314375050246045339758763594224279247502096268362947\"\r\n        \"739660739898681640625\"},\r\n    {0x1.9e33a8306e02cp-394, chars_format::fixed, 444,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000004010086210363826026032740370210610951607084380080466649977013897450280879472138920077347559834\"\r\n        \"3085572822186905057565200084999978361609439732179814096524045340334030955205854963234999783849578354807610\"\r\n        \"3129101125761463915188021001142699068384893953126046023314764012090470686426444166900948107290503230615286\"\r\n        \"15653514862060546875\"},\r\n    {0x1.fc59e1a319ca7p-393, chars_format::fixed, 445,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000009843181783316012260131321277312294289340991085154620935488572812710829568897687517917454774898\"\r\n        \"3566433413213202579862251653915055051534624458376958526131197186020467753223506752832174473323470653788040\"\r\n        \"3917023842260757480666094320718236505488857267067091810391923600161329878145656933799249876937409453603322\"\r\n        \"617709636688232421875\"},\r\n    {0x1.ea48053546540p-392, chars_format::fixed, 438,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000018986595125046416834783391206475835197011693029669966155263156671691418830838428529139208448680\"\r\n        \"1761628631187695816852367151953603093414023513472452231891026909148753713286042719755834756149864024108431\"\r\n        \"7352618090220909719089204136527578336674363112487531886729182570991963930462755397177154748078464763239026\"\r\n        \"06964111328125\"},\r\n    {0x1.c4f7cfd35c403p-391, chars_format::fixed, 443,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000035083205445088968495677101873388169021587210288068562220603066512276293052810916395438868133171\"\r\n        \"2988608732115906573028050475979768658205494632257575125878903299547717299838346765905333055749041027617447\"\r\n        \"6658366227091941304109695520879458424636283604303800109503244258137414372793865533547291724048022842907812\"\r\n        \"4463558197021484375\"},\r\n    {0x1.3f1b2c8eb7534p-390, chars_format::fixed, 440,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000049430715648584051844621127511504766932271831089032969572932369896232697013659331467295126281359\"\r\n        \"7280193667150223703961334976370441319425264759617856817683619261680544917442005575369381757511402108712309\"\r\n        \"8810853003250818301375453449086706715170921583482977020013786182723813883417931808877954225067696825135499\"\r\n        \"2389678955078125\"},\r\n    {0x1.d06093b0815cfp-389, chars_format::fixed, 441,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000143867487806894634411720089270450072936305130349694969058045926550182615349006253769384373773928\"\r\n        \"6573986672966155584474563588101073051265372588214952195923105424109066866902340001776788856342178576245158\"\r\n        \"4783343017610136929540867731038936461298859821917731158626523192232145847810922912810016605078544671414420\"\r\n        \"00865936279296875\"},\r\n    {0x1.5f088215f30e9p-388, chars_format::fixed, 440,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000217505354802260436510639680305528377013354190487961208732896657467379828645778691824236741661289\"\r\n        \"0229435519025675788633274348734782164672190715378378245031133601909436517434190942448107290434316890946990\"\r\n        \"6749542660244958783700832470282660653384794973337579621259557692831744036915874677268201153879090270493179\"\r\n        \"5597076416015625\"},\r\n    {0x1.1ee7b2b7ec4dfp-387, chars_format::fixed, 439,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000355541202374641346026941197599213814105300914392385231945924023425570572466280160634143786390438\"\r\n        \"2973685418873700535065775639722966823229525581142851589902504581542460165636219125927902840526377377151983\"\r\n        \"7017726394054052113160694923207086389507835789415091172180367926100267413479119431307662324570628697983920\"\r\n        \"574188232421875\"},\r\n    {0x1.e5212858a9ac0p-386, chars_format::fixed, 432,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000001202373545031365142117153878587117672681703606088163112794349727952117452707283033519505201026174\"\r\n        \"0485366509703588584741742271044985659498541447419517312938892191148190125806622886098622237138943960841251\"\r\n        \"2086611891344066242908281352486220003806306620784871586188979194136328089090315351938897947547957301139831\"\r\n        \"54296875\"},\r\n    {0x1.e5a64b660de0fp-385, chars_format::fixed, 437,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000002407325014922304367752994225709352155168529396617220909980347611275176660681396749855751548512680\"\r\n        \"3686976280250984695970972311192849181782997143031420579120058075178903814521177139449414732736685869846710\"\r\n        \"4394248895403905847739963053197183129346301971948844195756005547239325696110955749018600613453600089997053\"\r\n        \"1463623046875\"},\r\n    {0x1.a4a35c112380cp-384, chars_format::fixed, 434,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000004170137078921815569275422874696231611004697578299747178989974247794441351318576020742053361837789\"\r\n        \"2337282650336960911124358651887698501080398986078585524941636181345282023250767388273145296009832430066275\"\r\n        \"3351543989060579853452118286049679797374297229051509580387032947578194216464025911861313034023623913526535\"\r\n        \"0341796875\"},\r\n    {0x1.fd84aa058b587p-383, chars_format::fixed, 435,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000010102559419519475794201171450381673041089322627018053899889380695208263228396234959442210305668054\"\r\n        \"0315800262617175361107992065273974530599080955152985761274225519088885807436325575834309377713847614939429\"\r\n        \"3333575213736221842600597238671029059811607467346072347130676068618442925385256248027587844262598082423210\"\r\n        \"14404296875\"},\r\n    {0x1.8cdbd7659dbbep-382, chars_format::fixed, 433,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000015737569358633547811206080917170425167450411520103815909249604594369345874856545245212805027522831\"\r\n        \"4828697279497837821986319825226191691030482601360852618520169586052322172410999244763978900894391063989290\"\r\n        \"7274429293647733654219928166653100454479140789463860010824500467182821754168198236101261500152759253978729\"\r\n        \"248046875\"},\r\n    {0x1.c3fab70ff77d5p-381, chars_format::fixed, 433,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000035846791147293954395277110210507684652698239680639314917967800036918115365251759384633992808617776\"\r\n        \"6654702878948196800507852844357586424000876576667554483947866806149903563073606011829317396890873012538987\"\r\n        \"7873734579886342475181978767165737092606523456123743582322344239764951045502938686837524073780514299869537\"\r\n        \"353515625\"},\r\n    {0x1.92f9eb50ba810p-380, chars_format::fixed, 428,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000063920642274634331751536794408261143575334629993511050648872666338672571665986021735206183246506631\"\r\n        \"6310275076674090520833858863401291192443279548090882698094889561395443424178066943634531052696735508613482\"\r\n        \"0770832743853266338258506304086673064382356156732325879211387133444020186567868790916691068559885025024414\"\r\n        \"0625\"},\r\n    {0x1.e5d12025f41a4p-379, chars_format::fixed, 429,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000154121878455871486470826794435419049309566271972237357143080649393136783708643797138575864124667438\"\r\n        \"3737872144770457576229734354276582112144510562904694677226056840964234255885720568245232592703476094357023\"\r\n        \"0741024501879890512991571333881927803034219492641067380717285096610293451679929432884819107130169868469238\"\r\n        \"28125\"},\r\n    {0x1.70cc20b16cbc5p-378, chars_format::fixed, 430,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000233996571150694532427993724274548584419164096370267414377840680924380456729680389935073467054210096\"\r\n        \"0754662232709991265315584539304483378699489630430398374405591067045972532565084161218473970667549929864999\"\r\n        \"6392129046637675265839770011966526475548357054437982946807154687712923708808876455123026971705257892608642\"\r\n        \"578125\"},\r\n    {0x1.f8f54258baa23p-377, chars_format::fixed, 429,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000640777072494531477345712948701814594979738366565675282681480642255757344672522661067334015294856645\"\r\n        \"9128687255374758152631994199565927896597954231389004959433485579373270670316843744515124954660676742400161\"\r\n        \"6573352786425661214416075033874283969924056495357668700583762395704820122310785279751144116744399070739746\"\r\n        \"09375\"},\r\n    {0x1.b425d7b5baa7ep-376, chars_format::fixed, 427,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000001106917806539146411804119783585998685398182337099121427964465106805819523657678186433645989968505869\"\r\n        \"9818985838907695245733491850809542760700002379068511372422761458974690077805955121015028589977154994267680\"\r\n        \"9335780216735649319371255941752281553265395319094745377493328576212587577298762653299490921199321746826171\"\r\n        \"875\"},\r\n    {0x1.35f98a9945d86p-375, chars_format::fixed, 426,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000001573395880167279095191183196645054033328690151042218769824508106193613244008211017299551381155218880\"\r\n        \"6194750848300838014147761414381772834738961847109691353849345494773983988350461308271434235528286832057230\"\r\n        \"0743114950473751978786711409956425483511937171834026083192810641043710151443235645274398848414421081542968\"\r\n        \"75\"},\r\n    {0x1.22b6deb90a23ap-374, chars_format::fixed, 425,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000002951264303968298727160713040288227598425097892422298086633590377567996746115235964290839233947857299\"\r\n        \"5711210671115813710187104734196413453864402244822331613591780511111572198567644093094822621155112946806780\"\r\n        \"1597918458036879627149037484905674326085936247598906544838680851648021752353656665945891290903091430664062\"\r\n        \"5\"},\r\n    {0x1.af8b9b949bd33p-373, chars_format::fixed, 425,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000008761895839903947528941149515793299411928594010639363029617300553600151529405497910367604494761067749\"\r\n        \"0024580643376208998689305233206456297827193680314349424392820092411434289699250489116523598050954081394617\"\r\n        \"0682297386793535999528105468209541146150882484707425121697199914185677505074067994428332895040512084960937\"\r\n        \"5\"},\r\n    {0x1.6717d5464b378p-372, chars_format::fixed, 421,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000014581718353001727202767958474568085509641315254096668946517258054929653338668760014668801958991413536\"\r\n        \"5885832166422613380830543504451930921550793798367298723049105942703198978517102345816708317809381648497621\"\r\n        \"7917490144653395402570757209661432587925807640507185377121211582174264975719779613427817821502685546875\"},\r\n    {0x1.e82648ff239bbp-371, chars_format::fixed, 423,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000039644645414828138173162257943342753791936726404197770155908477143700013008038105686863030846404367750\"\r\n        \"0604244814244967592799688033858650321919135290377962541541757670567069855566579894393167253937584463430211\"\r\n        \"19484783841081544723213616709921430880585974508806378200231489063870560229929651541169732809066772460937\"\r\n        \"5\"},\r\n    {0x1.e51cfb8657ce3p-370, chars_format::fixed, 422,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000078796103616943104296862864926637808976384305685460046349264971296098085718108590424082442044168977749\"\r\n        \"4808702928472617532638674178490816260470459625717085681235305001720392192877266453685066566192314061292465\"\r\n        \"69266701975452020742004266052294229064688879217955185466426624822655622182310253265313804149627685546875\"},\r\n    {0x1.b14f77ac7c51dp-369, chars_format::fixed, 421,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000140763730306989132795428946966494953633354394967346965100654775368454144611191354294993416273482074426\"\r\n        \"5292749359478573706183304487111250587990863045610478788209575619784704283920909471718395936147460221139005\"\r\n        \"7681912459797630302957798856517266927440740025132710425346247752609318837357932352460920810699462890625\"},\r\n    {0x1.e710d0676d8ecp-368, chars_format::fixed, 418,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000316452957894299284366479758405498013015153300365442114668302774362027017236047806669916218231558679126\"\r\n        \"5939819803384480542154343286832485112721100067084904332871322417428918598692735545635831596174287807117276\"\r\n        \"1923133899979676544387692632814983780063270773577183589647492112373328154717455618083477020263671875\"},\r\n    {0x1.681e2130ddae1p-367, chars_format::fixed, 419,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000467946374062146005526850091841119946310467880706732949118469529585892942611358452448420003810529184217\"\r\n        \"9716636868566303654241614314944289616568687170600929848244691370240879435848048353721799426016783752234675\"\r\n        \"71832515625537071561402276458569226060997833551855877904268772582430102602302213199436664581298828125\"},\r\n    {0x1.a823fd627c74ep-366, chars_format::fixed, 417,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0001102278795072777171761094324315510351910541596223438913463998337507598358574538862112825212925183136037\"\r\n        \"4758720007850149491660100407483775788429494864937877683258886730185228974149721931720492869658905773658805\"\r\n        \"522025872507231167222528685303920977870186585482457331214116436068906068612704984843730926513671875\"},\r\n    {0x1.4154d3aa34c6ap-365, chars_format::fixed, 416,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0001670185551585790858474780313244848775648310183299379723297530880407191909597279001615432270490567092703\"\r\n        \"8588049413218561015314058502253510201835880192993883164036125066854166498016829336021274172481028822007979\"\r\n        \"73906720466201397769120663869839685513950245652908075809535415334750041438383050262928009033203125\"},\r\n    {0x1.3a9ba6e00a75bp-364, chars_format::fixed, 416,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0003270479232134613926939519818831086498076277245978021966733788050641828861931365879518963315790184411820\"\r\n        \"2961795989982173691003362958138454636644978113023886891879423315621501731645725021544326049449904953011856\"\r\n        \"85272846413113018197664085143742641569449064726380745830695839782009670670959167182445526123046875\"},\r\n    {0x1.a63e2539171bcp-363, chars_format::fixed, 413,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0008778772927538465046420583968658156712478310784640448770263366803250453713800969065649510220902821736113\"\r\n        \"5521839038855897343021929048284359152954843460038384673539560484604234173029320737290621489135529752758096\"\r\n        \"35160087896703692795742861281764048566296912514108556450931342141075219842605292797088623046875\"},\r\n    {0x1.5945227d7951cp-362, chars_format::fixed, 412,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0014356894911231067898171923164012923523397719956349474652622401817264054835179242430812570726867562039556\"\r\n        \"9609395820536576981686866835269785818676298857562755446418526260219235762960808818683579213832173570812722\"\r\n        \"6471309299601555074913893102541253974308888834531656129855914372228653519414365291595458984375\"},\r\n    {0x1.82217c782aac0p-361, chars_format::fixed, 407,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0032111903570682555570830432285106056350808268235667287036759585960084214919407425089581154098784074762322\"\r\n        \"1984762123193423025747805649805390981226048331145080309572679467705818692956022292826723774128752395133008\"\r\n        \"99684678865465498234764125959913015552026947590190386616626483373693190515041351318359375\"},\r\n    {0x1.098f6dbee458dp-360, chars_format::fixed, 412,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0044169724909246743271783375837700448384399037383754852175667172815642110900066699080460389447141005868057\"\r\n        \"7300512595879015513339295564000425906636050874382230874106442651414859196934264601320288039760451686440122\"\r\n        \"3779211715551095402858460824838483699891256643499837415689501796123295207507908344268798828125\"},\r\n    {0x1.fc1a3e0355565p-359, chars_format::fixed, 411,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0169021881002942186349352476374852702816515493199417965353300827904162495133687276898844209515941302157090\"\r\n        \"0401849903068670189531301308560376699856638876652995737610028352402636866451563731365247130745763937745851\"\r\n        \"966064973879549502996367695229140698130020298981164052209980042107417830266058444976806640625\"},\r\n    {0x1.9d22abb8a3e58p-358, chars_format::fixed, 407,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0274861575182721631984627503572349625218405647917496546304489442051213309343047354877283852370984774869609\"\r\n        \"6258479741644981792047469220622160496576122467419063847819950632784885804621987847476285866255227176855010\"\r\n        \"64683276474702628786475061222493509474216607179307414465796455260715447366237640380859375\"},\r\n    {0x1.8fe6b364f92bap-357, chars_format::fixed, 408,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0532113482015039559183269947122156749830157940875473713147339471075371407926785436578250639785856358666207\"\r\n        \"0841973139561826683859629713951889226218072364000034484580100026527733693817077658207262024951913070084247\"\r\n        \"964985873179224173871150940905947186618917750283892786899997418004204519093036651611328125\"},\r\n    {0x1.3924fbdf3f4afp-356, chars_format::fixed, 408,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0833347856239357821162981086852666866433705748816360348008711535610941446633825141501665403919747446868711\"\r\n        \"8064179878306685784138623550444206406489413805095796762933268020587437640839695511544931028011676745684700\"\r\n        \"454921274138664102521131689349566080338539705656651646048516113296500407159328460693359375\"},\r\n    {0x1.59bba3abc92e5p-355, chars_format::fixed, 407,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"1840146356658305700046720506362478153418514919580729143953237144381157088225992502276364147381509037196968\"\r\n        \"9088473135358898469208008830766155305349854160835782765484505720924511068004105209529393758874605705530766\"\r\n        \"85104080099519938253964156154017020428131091156799536978638798245810903608798980712890625\"},\r\n    {0x1.f91ab28f6d8d2p-354, chars_format::fixed, 405,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"5376784423862267048130427466387650660078457949027335623159161680415466312113697113185133707159343207900672\"\r\n        \"3080140691741812174355508525869297029994236481283212404596534967023190163547269801449291075872521732140340\"\r\n        \"644845226572809529157488064473891307432846836840412141356182473828084766864776611328125\"},\r\n    {0x1.29815f4575ee9p-353, chars_format::fixed, 405,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"6333829374806563141955671468236487467386767628504964445167342592478413863059249829267913771551270371906653\"\r\n        \"9909954743680825350924903792374425889482639248091034065790800825635803681559457761114287896040451046117396\"\r\n        \"942666747803151643950824239942570360031580162414599488585054132272489368915557861328125\"},\r\n    {0x1.9b5549ca69f66p-352, chars_format::fixed, 403,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\"\r\n        \"7514400642486577219423056529958168455121436480387689214857689064489248433753353045222356747974792138413681\"\r\n        \"2907705310492578831489120381580810440200883241625934295912642633798054015146534242980319769381134505869389\"\r\n        \"4271570763602292963970708357409197599381992481448744314320720150135457515716552734375\"},\r\n    {0x1.124b975a88735p-351, chars_format::fixed, 403,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002\"\r\n        \"3358765579576565334772675826735107157872544630083091706192581114916616667385249065695562210242645649633370\"\r\n        \"6045442624764341660639114681090349749985529232191675913872702599912722915102318783709303584090894615368605\"\r\n        \"3705913497996218739612629046751784994643955963022907695858521037735044956207275390625\"},\r\n    {0x1.1562e3a0ec3f5p-350, chars_format::fixed, 402,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004\"\r\n        \"7243986610495878878673984778734765597249236867292989667607298760616960219054966616029202455795780518195146\"\r\n        \"5005795973444987034101304350852038218864051288571350765414212230181767935792865589673805453295871045943135\"\r\n        \"218617322658165475074435295648383851079801960815007788596631144173443317413330078125\"},\r\n    {0x1.7499ec4ac4fbap-349, chars_format::fixed, 400,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012\"\r\n        \"6921696719929717948595293074176270655868821592065115228502723093035575508756728752819417052641105625324043\"\r\n        \"9621573862942745585133754372795203723658421886786527780857438475385595423831038622147456316483532086718444\"\r\n        \"5964579981005077479106468489233703280283545311579729286677320487797260284423828125\"},\r\n    {0x1.2027f877e5c8cp-348, chars_format::fixed, 398,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019\"\r\n        \"6313160128987602230140589069120674893779125406478798262830941469469129607520870479724158468275870268316408\"\r\n        \"5298367163590557291258677012723236633153179231523169035127063055277636210843393104609703858162693765072077\"\r\n        \"32386773493842387889323502724040878468329818229420880015823058784008026123046875\"},\r\n    {0x1.3ebd90e3fdeb4p-347, chars_format::fixed, 397,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043\"\r\n        \"4298948725607294181933974340441952979288925912414026887685176387402855942127825498213786975990109531847250\"\r\n        \"0014791485568942997169292799689712529737613650880834560117225488561289885361985023302255032167618356367847\"\r\n        \"0959217821493701938086947191985055989095487749551693923422135412693023681640625\"},\r\n    {0x1.4363389eb80c6p-346, chars_format::fixed, 397,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088\"\r\n        \"1261657539118292960739409946303123725780871006988101793185755149006004001323026927378891990623904794199498\"\r\n        \"3370136608303805922691119433796411506570515804574414630126734908108636442398157037410986760749781932649286\"\r\n        \"2699285514009118677994236229754579522131796576189799452549777925014495849609375\"},\r\n    {0x1.36a0109bf8851p-345, chars_format::fixed, 397,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000169\"\r\n        \"2966213667821148807895558802568924925294638856811351781262146839883981321073090026355949504140594721412330\"\r\n        \"2342459896152434186640950048227971643360361238208070759951623991031798070100881289698339939026486985759943\"\r\n        \"6031413554009831686140961859092949411305373264013951484230346977710723876953125\"},\r\n    {0x1.852936e8160a8p-344, chars_format::fixed, 393,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000424\"\r\n        \"2001623031538089445969926359007458012110794838156005148358262320454521346511317229281281681846424778075499\"\r\n        \"4591411301341557818660225142325571011067858617072978287595726603489974360133507991534889217365667026874405\"\r\n        \"553342866483389551396854187976397966564068298112033517099916934967041015625\"},\r\n    {0x1.149ec7bfca2e1p-343, chars_format::fixed, 395,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000603\"\r\n        \"0529809392781297437123670700685046655048483789943399879178843944794509056750476172827344642815850382802738\"\r\n        \"1568077204681688731224261312765461811069975259273018052620262934972760395850186422694979262707180445833295\"\r\n        \"30560909162178292548227844095570554690255438146095912088640034198760986328125\"},\r\n    {0x1.5b2dc6b83f4d5p-342, chars_format::fixed, 394,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001513\"\r\n        \"7520077480203129736786547797218619270753778448891209064918076463125636944869989096240366834149603449714962\"\r\n        \"2117214819752421125106211299219496197133556427938606464103348868389804966690375917611422685068708804532832\"\r\n        \"1041443260516963902382193582509786917988936494339213822968304157257080078125\"},\r\n    {0x1.da0f73386d67dp-341, chars_format::fixed, 393,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004133\"\r\n        \"9493171608475510736380563699750629156862226280416325731522075378368999604060724669971773099651206101216101\"\r\n        \"7546178458942728313191490202170666992385689982184609191280290273663347725787965403909863535334056723463899\"\r\n        \"330281266936838654482799695804640972840449109071414568461477756500244140625\"},\r\n    {0x1.638d3b1ba2bd5p-340, chars_format::fixed, 392,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006201\"\r\n        \"0359315134640090731319437049206220696431274480364487068426341395584546604605252648624919716507113178716477\"\r\n        \"0913020638743635294940380183735409118973050619962086116661476750520741067204022527272515483696214789128062\"\r\n        \"67420333330775690907300282423840649681512360302804154343903064727783203125\"},\r\n    {0x1.906c98f786defp-339, chars_format::fixed, 391,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013967\"\r\n        \"2797288113210155563802057639497080261101418469784665765265619430610942383225098573170486801015161092094059\"\r\n        \"4801693043132822511751377565218354726435621618748890676388642623241585694961988686328873397278768541909462\"\r\n        \"0032800056105071229529844130628872533872453232106636278331279754638671875\"},\r\n    {0x1.758b9ef75765dp-338, chars_format::fixed, 390,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026059\"\r\n        \"4284576091544869113024441675656851873115337841133722143365708084172564125190249561915251837705554401742351\"\r\n        \"8212053862650430595916363766356788828785993044882368496423582980924400652007259360486185742061497737426327\"\r\n        \"712363547867434874089592920722198432503802223436650820076465606689453125\"},\r\n    {0x1.7b53efecb0cb7p-337, chars_format::fixed, 389,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052925\"\r\n        \"6571861074866966622564362184991758705054614745692426662338541604746258507799065981582672715208499392294202\"\r\n        \"3922151415788257853173565728994460950103536934704595200626972777255978544513779471271516694092626768178059\"\r\n        \"63710919477975920904905105901332162954275872834841720759868621826171875\"},\r\n    {0x1.c70cdb03862e1p-336, chars_format::fixed, 388,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000126981\"\r\n        \"6065184715251113419810988125845614275995682808177058849759881139428319192849635487192859941624854592126248\"\r\n        \"3131621666812225084740060541828173882845409244340666437092454026306133640042784394113986314671002430586612\"\r\n        \"3781960021918923744815065946835164201189627419807948172092437744140625\"},\r\n    {0x1.c8620f3a56118p-335, chars_format::fixed, 384,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000254707\"\r\n        \"0634124934890222190262256837195757396815299333529111418249146905687757756780613328879250236219137738411041\"\r\n        \"9810650980668147894567226414738193796911230347051073523053009279230651798707186324331033065240245566418482\"\r\n        \"483161473301224825995891891394773409729168633930385112762451171875\"},\r\n    {0x1.6de527d45ec04p-334, chars_format::fixed, 384,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000408411\"\r\n        \"6507906642250331195895235501255489010558232931652737851087150126965735140861940171547943101025911017273318\"\r\n        \"8861368164992739794129569170184038097703308470945993002999406224190943740318423365285121879965284119243738\"\r\n        \"253055377647337106095646631909179546937593840993940830230712890625\"},\r\n    {0x1.32f4268de3560p-333, chars_format::fixed, 380,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000685242\"\r\n        \"6249982067291046594641114025792733808444130159885465849871908890575691854893072294419504006246523212127411\"\r\n        \"9409952619928433358684826230009248507051618413394733219630867274509517957698525727310017899287975621138616\"\r\n        \"11774779207012072627762389043226676221820525825023651123046875\"},\r\n    {0x1.9504d4e40f114p-332, chars_format::fixed, 382,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001808326\"\r\n        \"0374699234761065257773418498730106022787616035325598600451327358187952165471790323439179847122950235854632\"\r\n        \"2993371696334394192802862629454251406168400743329730917576310927470940241674403303605819271810565651329510\"\r\n        \"1069735058671395240667729986672185304996673949062824249267578125\"},\r\n    {0x1.cb9bf91a5cf2ep-331, chars_format::fixed, 382,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004104121\"\r\n        \"8769683543865527782587708994321977282570253751835355176353868356467589133067113662048462713562786916368979\"\r\n        \"7540950303302913366392376656159255697944455891223668807057168630685792060203335559517088803685034984665409\"\r\n        \"7283173859379552553760216182521247674230835400521755218505859375\"},\r\n    {0x1.534d1a72353b2p-330, chars_format::fixed, 381,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006059640\"\r\n        \"2508961119571296495219413977960985088664161517023286865497038758610911606257218864532266059908463494356686\"\r\n        \"6588930258825411622537414066336047894439146752568610278062157672883821538692535856116708042779936221736077\"\r\n        \"402161935015293480030935946434311745179002173244953155517578125\"},\r\n    {0x1.8a81f0ebdd183p-329, chars_format::fixed, 381,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014091162\"\r\n        \"2646550940969184229022091314518130712359406867042679799339056299623708606466087017396017291953984260348123\"\r\n        \"9618162645140267896879864401078309489936080873580641530655526126026020234997201175781845924483971174376577\"\r\n        \"529462311334822327015502130276303205391741357743740081787109375\"},\r\n    {0x1.2d8d843b6d359p-328, chars_format::fixed, 380,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021541940\"\r\n        \"4380193248651670288841782970808904532288686034378850074779233789912213307605694984649811926449815799086766\"\r\n        \"3560088611417226829754262697058722921390553425595293622934754705135445794701795670505815085804830927660005\"\r\n        \"31858470043399035620014514424980234252871014177799224853515625\"},\r\n    {0x1.5ae523c56234fp-327, chars_format::fixed, 379,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049562087\"\r\n        \"3989840287980026752059150291459341625517462870764782641410663349026046170213552612704183825027030799012887\"\r\n        \"6185253023706365698846472532373612522455538362393161006908387382989139874630325656459405074424384497139546\"\r\n        \"5018007039720702891320847083278522404725663363933563232421875\"},\r\n    {0x1.2e2fba4d55710p-326, chars_format::fixed, 374,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086348821\"\r\n        \"6823528866804486133456991077779977792835930131332092742833348662272985748573158444338915496975298063967453\"\r\n        \"8071785979208342202737614219262452227901906240725418988393360968895849158615336311017872002140977317552544\"\r\n        \"63696422798459940983750726672951714135706424713134765625\"},\r\n    {0x1.a8866b54f8da1p-325, chars_format::fixed, 377,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242613404\"\r\n        \"1499034978590055564514475383648601798436032509268632646894181389474970094831927936969903035456201621280676\"\r\n        \"2871422250085874451502425072522491337759461940696977760033858204402517273797078661623029789913858154155280\"\r\n        \"11949603900100570948172862273395367083139717578887939453125\"},\r\n    {0x1.f1a5726eaf292p-324, chars_format::fixed, 375,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000568803420\"\r\n        \"3287511080114010781167425724268104097312920112035604606624252520666836277601326754766687008186470986973015\"\r\n        \"1105993388888142740897880023820002419173095842184519157214057327786285037297808619594870323944323955228780\"\r\n        \"749141742495715752536700193786600721068680286407470703125\"},\r\n    {0x1.449fb8851eff0p-323, chars_format::fixed, 371,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000742082070\"\r\n        \"4814869536088751675067158544895470994812275183936089793018924239658144174988893916502142322850833635958296\"\r\n        \"3439347313321543227117769751347811379872515444979296564830945130871029257222410374399398236040744961050708\"\r\n        \"14565044206960464645561614815960638225078582763671875\"},\r\n    {0x1.46c05ddbb1318p-322, chars_format::fixed, 371,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001493891068\"\r\n        \"1786228098433397618427083905000278780570950467448198038274216732657666002119768524178303625459142811351426\"\r\n        \"9539148166937605854031616806544458143119642972251690661738492452061452603871892869715803063032290167203688\"\r\n        \"95964772527028274762272985753952525556087493896484375\"},\r\n    {0x1.6b11a7ad03ce8p-321, chars_format::fixed, 370,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003319865991\"\r\n        \"2779944591755497965186522112578908724555826481398937929092451620495530950235419850252258210723507610335779\"\r\n        \"9725303807187723552061327603203139944318751411700583753118403087341835633246108094769809451825572845842984\"\r\n        \"1924240692903336213959164524567313492298126220703125\"},\r\n    {0x1.35af01f0d426cp-320, chars_format::fixed, 370,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005663431628\"\r\n        \"6537580410549627430526563174209683489552393365657133589081290878698891065102827260170613964063421798849062\"\r\n        \"3562854632880516016770172038156097146354316708909596705851523980277831473118340477805634968266611038773673\"\r\n        \"9752007997066030053900931306998245418071746826171875\"},\r\n    {0x1.dcbfadb8b3393p-319, chars_format::fixed, 371,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017437369721\"\r\n        \"8196113063704015243208747067965875508016343943741287829742157754862319334742044342122418129546722253205431\"\r\n        \"8242253107903784262257495811123117467793836357329565702945521480598781283000370307663622328454156102695163\"\r\n        \"94232537279639083660498499739333055913448333740234375\"},\r\n    {0x1.e33f175f87825p-318, chars_format::fixed, 370,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035350054379\"\r\n        \"8210402817892842659760097539150560271582896635734724603643181350804565324201879704146663916020005749792748\"\r\n        \"1963655369280316553093601016308703840044416860234797599714687238147587264455072639781883052945016623706665\"\r\n        \"2626089735718395434815874978085048496723175048828125\"},\r\n    {0x1.754e6b5cce5f8p-317, chars_format::fixed, 366,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054615606193\"\r\n        \"4441318621092045441032660308681227358557603718106692853823448693845175292429534277882694528221586447733355\"\r\n        \"5245129408920113772627882583255398024993020964149434865318046789416202263713530106328387058785716076215004\"\r\n        \"574612686683021678391014575026929378509521484375\"},\r\n    {0x1.8467156a708c0p-316, chars_format::fixed, 362,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000113648474919\"\r\n        \"6438175580907332565880653966873506395118992763683101773589005179813700866154835962817624948656756383550758\"\r\n        \"0954231657277026079560947234101704808680915410879153776375826243910611440268005043071854993760549846641059\"\r\n        \"96887417671104003602522425353527069091796875\"},\r\n    {0x1.895d0eb98e49ap-315, chars_format::fixed, 366,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000230200078065\"\r\n        \"6893202458516089685679401590576324453158175134547155022646273232545522244477459002923119279321035265858094\"\r\n        \"3454895481930310174158828988727175916938505066846090096475282769653718973005391423611253029949878718850332\"\r\n        \"174066138091195199422145378775894641876220703125\"},\r\n    {0x1.40a747961380fp-314, chars_format::fixed, 366,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000375298902424\"\r\n        \"0666642780953754135567335978452472991859961173893630396968364346350643567404509708653300043590368338057512\"\r\n        \"5143713587196206996924176535060370203741533267488207717423868283366861735055394526781231134347450183664810\"\r\n        \"112785757689746191090307547710835933685302734375\"},\r\n    {0x1.3b6a90b6dd82fp-313, chars_format::fixed, 365,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000738338448129\"\r\n        \"3360100162604071222320854504989415917243667423373175657818383210258806923533986241556370859195332901443406\"\r\n        \"1400015193119257876364506245948504929991412023543177395961251163226947557872491055376075316272590357735037\"\r\n        \"89072506886537183845575782470405101776123046875\"},\r\n    {0x1.29a514459ca70p-312, chars_format::fixed, 360,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001393476812215\"\r\n        \"9904445853290075552856512674507704664699177572841136493178162330742824621681098250948372789843472975025145\"\r\n        \"6654416423830571259374225337974011611156252922037258169533613173818100385793804677394622735141766994054388\"\r\n        \"605073224738362114294432103633880615234375\"},\r\n    {0x1.0b74c8584ad3ap-311, chars_format::fixed, 362,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002504286566562\"\r\n        \"7230013905293764731537341817933131283917087004920122084647344228898478210371710543160857493563223693900113\"\r\n        \"6948844407029210584627234019763143896970351150846985824258803274296439361886009001435481001665108126089397\"\r\n        \"16590594759537680147332139313220977783203125\"},\r\n    {0x1.1e03e68fcf7f4p-310, chars_format::fixed, 360,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005356123085643\"\r\n        \"1216215705891197384170210658872854832333041087321234180910038318181672802850047733820007628560418217168597\"\r\n        \"2328799651035840891788773709992554797907500387843891228116979454940850233766623349333385640802273842934100\"\r\n        \"485380088940701170940883457660675048828125\"},\r\n    {0x1.713e883d649b0p-309, chars_format::fixed, 357,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013829457207184\"\r\n        \"7350006467947786140534609402102460119338483840183504329951410756480852036970002082214938069496871105807765\"\r\n        \"0616342008059436475519226330199242170564636294910908465637413172208311802193088597551634614855151721147207\"\r\n        \"000139900401336490176618099212646484375\"},\r\n    {0x1.86281c91677fcp-308, chars_format::fixed, 358,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029225397297013\"\r\n        \"2914853402915046037003365995797951158161424678070205702834545391776697284890614697909470154629997814087950\"\r\n        \"8687731981104368938317412794557509506094479412204017138158281353548291029466911248434233716220045938072921\"\r\n        \"0268068385403239517472684383392333984375\"},\r\n    {0x1.45504d79391d3p-307, chars_format::fixed, 359,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048736427954876\"\r\n        \"5161115885562973232237353661326521702392018462879200677062285966561894022674262468399524132160049764777409\"\r\n        \"2578759747996729059226009083377666503000929669306147768883189338553343486811660273955905839667699971359598\"\r\n        \"67351484575692666112445294857025146484375\"},\r\n    {0x1.8b65fbaa5facdp-306, chars_format::fixed, 358,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000118472141176650\"\r\n        \"3795834920011168926296215936641177727034485569727245391385495932888180052660104404787609525395088845106890\"\r\n        \"9045054476068079407828299173083787534280114697185660289803879204360881162923549764539705654978955780374117\"\r\n        \"5956435682792289298959076404571533203125\"},\r\n    {0x1.15b31d81ca8eap-305, chars_format::fixed, 356,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000166412796674715\"\r\n        \"9828107765209825994552167129554936207837810987076903930581624018675917720336651340542435363305307619807439\"\r\n        \"2079428468517747070184564672200772228970478128098200293765227442139878292915729397733401783923305939554351\"\r\n        \"80664181871179607696831226348876953125\"},\r\n    {0x1.eac3901bbf6abp-304, chars_format::fixed, 356,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000588185044246909\"\r\n        \"8516920553670028118760656704237860263120333531016471621746637456908577353248513356817228666441363174804107\"\r\n        \"9603736093364172756069029939969846461903462814768648203770730263090238795720931192885832356103167878986701\"\r\n        \"10035226343825343064963817596435546875\"},\r\n    {0x1.54d51a8657184p-303, chars_format::fixed, 353,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000816981584111072\"\r\n        \"6190959340594713716396752204762409775690590311177074675593649619210154923484788418377974524231704747460727\"\r\n        \"8211532496775158564303013511601060759320541814855924433742431495891719034839407284806072370552380195254937\"\r\n        \"86687775354948826134204864501953125\"},\r\n    {0x1.4254ea10b5973p-302, chars_format::fixed, 354,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001545269946488938\"\r\n        \"3084423290711151957352280795463335067223992351392751481442851664811520430139228875639213995744337299656369\"\r\n        \"8494777793436879534495292022436992037556775109404800293598056714392374950920150650171867569806873131225966\"\r\n        \"044866027004900388419628143310546875\"},\r\n    {0x1.7da943773f203p-301, chars_format::fixed, 353,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003659395376290149\"\r\n        \"0298980465769951165569165929629731813929605504263224870936440470834287500461898098845461917630071247520018\"\r\n        \"3741800575688110181618613341186483104049336857735772610014290974319446787969336623844116806490099061063836\"\r\n        \"49415647596470080316066741943359375\"},\r\n    {0x1.ae4f00acf5c6cp-300, chars_format::fixed, 350,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008251660766595778\"\r\n        \"2806495449548266610202563683706678154753337492221892598865851270347456671454474309415340154294710835376571\"\r\n        \"0923663409929467862648030890496688726139045114262386812243844497274555150209350984257558006307623973962783\"\r\n        \"73662426020018756389617919921875\"},\r\n    {0x1.8295f42a5103dp-299, chars_format::fixed, 351,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014826450102010817\"\r\n        \"7112109309230404161604761515251859062798560549580412410778763908075718248823384450717892513774699575501451\"\r\n        \"9989666396774597050923947581614694394142733801357605731634397122864408194429046946612815415837368683560359\"\r\n        \"983175658271647989749908447265625\"},\r\n    {0x1.abb6488a3abe1p-298, chars_format::fixed, 350,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032807475032115240\"\r\n        \"0621002334783930940202513541814817469150751240127675013509155922040907645472112074412341589250311944676967\"\r\n        \"7606167840548043568275485063335952880492463696904911366558949107704185370883887697884167403882199956499654\"\r\n        \"54731500358320772647857666015625\"},\r\n    {0x1.48abffc61d5a3p-297, chars_format::fixed, 349,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050421279276628866\"\r\n        \"7714049175213434496558184101026994112477668656706985117641549717061039336615015558509431246691132567436980\"\r\n        \"1198150556902001329039711316763352353546309989047586031244556241720884452961200633910465023228199971105922\"\r\n        \"8275189525447785854339599609375\"},\r\n    {0x1.68d80a54d6153p-296, chars_format::fixed, 348,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110713529313139876\"\r\n        \"7717026386576564905999076270512666752625153773141953869126009209387761702504512599387595189572820355949180\"\r\n        \"3353030449422757775201774891500460993748209972927568896749778497989235797960843501525091752096634223345716\"\r\n        \"918629477731883525848388671875\"},\r\n    {0x1.2c6b77467b856p-295, chars_format::fixed, 346,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000184348602722992243\"\r\n        \"9864671014820259607164916371907450371006190330032051780043274915710483106829066898772124682889055778430799\"\r\n        \"3280265606013315339776365873870562188509836621092146310161464010844116362509684895752013953067888207826285\"\r\n        \"9067763201892375946044921875\"},\r\n    {0x1.6ef654b64f428p-294, chars_format::fixed, 343,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000450362971454614901\"\r\n        \"5565847390136487163744421281719924533654409304717063588099858576407642256409055860666625519380863533430018\"\r\n        \"4634028151020515833502204384460487026824375085037728001029155097609575124669889142655211742433118971007388\"\r\n        \"6089958250522613525390625\"},\r\n    {0x1.451173235af75p-293, chars_format::fixed, 345,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000797894997669661890\"\r\n        \"5743204193329440817482113311923432159532259024136125855019496049078781186160682797898753405806699852897325\"\r\n        \"4481039137378992025466005103154103836916888873664956672360806241970118298900602228377874924371282450152875\"\r\n        \"753701664507389068603515625\"},\r\n    {0x1.ffacd596082c9p-292, chars_format::fixed, 344,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000002511861056992210656\"\r\n        \"4460984688389187692141330531682768924103863645054219481499842629645126936078591972527872511472222243531230\"\r\n        \"9709437730552329335737166622168597422045113087432814378216341861796310595179875161588614823973686362990065\"\r\n        \"39047695696353912353515625\"},\r\n    {0x1.063332099741ep-291, chars_format::fixed, 342,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000002574328439038412112\"\r\n        \"1339828370307253704732203904243798931630246226927879139516091842410667400769648561814006096715185494529174\"\r\n        \"2251165941694548044712489711348582758259760078958923842987028079231637018004530552653017459741047190391327\"\r\n        \"603720128536224365234375\"},\r\n    {0x1.96f4c617754aap-290, chars_format::fixed, 341,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000007991143060138612044\"\r\n        \"0060711986378002682633187804808109392328090664875747637758557400825900344026788010313343272911369936246104\"\r\n        \"3666923313670271869280829318221799503990742364295320472425956004990574429576668221347291246048349933062127\"\r\n        \"09285318851470947265625\"},\r\n    {0x1.935ccb527a6a7p-289, chars_format::fixed, 341,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000015841152817579089701\"\r\n        \"8882464641018008950488543008157320474270002138555112131994111586969178359200601940403856832944195530241996\"\r\n        \"7746287933439864720708976721912575416846145830426694475875093628131081178417251003920666538316019966714520\"\r\n        \"70586383342742919921875\"},\r\n    {0x1.3b5e38a2262e5p-288, chars_format::fixed, 340,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000024770739864851201045\"\r\n        \"2155211305654889101839291994373257256314216727223966524139888430219634166161400854032988566619651757547235\"\r\n        \"9891526537618251014430666239671769242560566212549308763232701265169301373333992197678810748273647845962841\"\r\n        \"5293991565704345703125\"},\r\n    {0x1.484a5328dfd67p-287, chars_format::fixed, 339,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000051571453461558414690\"\r\n        \"9754111958434101816659023703664033867818207164808688726169703472872850000784856430335588701703489523571282\"\r\n        \"0537383690075538450161438034853869422976361266642382017218067571284158409883746152359111636354072061294573\"\r\n        \"359191417694091796875\"},\r\n    {0x1.34089c222a3bfp-286, chars_format::fixed, 338,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000096778617084384446515\"\r\n        \"8565944891863915602747909697915764205500509556759598575651716164143069092577852590346952362288345318732779\"\r\n        \"8568136059930544298735015241262011909133987707450757096283166295478439265991543602940180845983775270724436\"\r\n        \"26821041107177734375\"},\r\n    {0x1.e6fcdd939cf07p-285, chars_format::fixed, 337,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000306005556558652005349\"\r\n        \"7677219724879439959145670618963086526570704041880822755231488655743456205128555382903007168865333581857182\"\r\n        \"6190105221989372774229983686836022431888358343760367433825245716062350333706110021552565525482236807874869\"\r\n        \"5552349090576171875\"},\r\n    {0x1.44926d40c76ebp-284, chars_format::fixed, 336,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000407898671083931571877\"\r\n        \"5294875626470385926419123333105307604270807518529328891798583990444803845522897437277247965812453288478962\"\r\n        \"3464577842685924105438447903371304802399611547626347695335896454048526363549443947247030717306870428728871\"\r\n        \"047496795654296875\"},\r\n    {0x1.4e29f7527bdc8p-283, chars_format::fixed, 332,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000839906286351287938781\"\r\n        \"1399937801734945834565528522981195141320594189544565521220835566976062331631101494419248955870560600137698\"\r\n        \"5537432417245983422897581939844353607370673169909597826206179621656852140508748086333845606077375123277306\"\r\n        \"55670166015625\"},\r\n    {0x1.8c68f2953a6ccp-282, chars_format::fixed, 332,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000001992717826656166044464\"\r\n        \"2125584749374937520778851582251840153437757893208705737778210140182563707851211680549600008809348350013647\"\r\n        \"0476092352988612163262395625243307278830900372908744130530715872596772314013667190546463814371236367151141\"\r\n        \"16668701171875\"},\r\n    {0x1.daa11a32d930ap-281, chars_format::fixed, 332,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000004771839231117577849683\"\r\n        \"4201787015006522460756370577250546037300400638004617260362478357013608710612128385322177994718163923316958\"\r\n        \"7356613212047538343034581376134935211933499518225742900654242594724446526025006878879430871620570542290806\"\r\n        \"77032470703125\"},\r\n    {0x1.c877431c64f8bp-280, chars_format::fixed, 332,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000009178454461057711008754\"\r\n        \"8536112667514918507241599449782305683393170457359980388202548163671022362647074555117211601907492906738459\"\r\n        \"5406042749373380753064107605729164133086776553397098585026443014794176607191273850605561790416686562821269\"\r\n        \"03533935546875\"},\r\n    {0x1.5319d83c3ef66p-279, chars_format::fixed, 330,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000013637044518063170854462\"\r\n        \"0760090905084613073552309882071588338221196190603646879437448326867262360431709154963514036585997359479452\"\r\n        \"1598491713884892203310936117346635245864362504730914824313006233451354019185590427110099653873476199805736\"\r\n        \"541748046875\"},\r\n    {0x1.df184ae5a1660p-278, chars_format::fixed, 325,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000038533883620323423714136\"\r\n        \"8128893415340996478918164189505690827044688227151816733024219543787370498849648155949225657910076871879456\"\r\n        \"4929080860556792381458881802490168760412120163853230487833062749073711941022457594385741685982793569564819\"\r\n        \"3359375\"},\r\n    {0x1.76fe5bdd1cd6ep-277, chars_format::fixed, 328,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000060321909257448322486188\"\r\n        \"7996966232951770214205402364690073024853288708207880615382738524861521119471824996020430389313128435058945\"\r\n        \"5757683977891608532509454031524834955525796191785318935471432086135671333301105923041518508398439735174179\"\r\n        \"0771484375\"},\r\n    {0x1.e827f6053cb84p-276, chars_format::fixed, 326,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000157050726605353931219748\"\r\n        \"9455185685886539197056637023936726196188936490075003356583213294480785568242997342311657438088381991935594\"\r\n        \"9272491412335198004143965428959297991382269299217708245206148360399598046602265277726928616175428032875061\"\r\n        \"03515625\"},\r\n    {0x1.57fe4f2319e0ep-275, chars_format::fixed, 326,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000221340726418391480146163\"\r\n        \"5015569718274627178765751299225249596505238353182116010182283950977351771990336765898850911669779695349426\"\r\n        \"2104386349156169447242147956660447400279680075978087677811790841695191575308476750194586202269420027732849\"\r\n        \"12109375\"},\r\n    {0x1.47d634f051b6dp-274, chars_format::fixed, 326,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000421889631569647900919768\"\r\n        \"5512987966320685875867604111458001744027098589253025634454275850202149904374614351329867678610640459460381\"\r\n        \"9499146960639827531342972339284079258492104097977877930835987641028139759694082222551969607593491673469543\"\r\n        \"45703125\"},\r\n    {0x1.ab161f2c4f9a8p-273, chars_format::fixed, 322,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000001099225953719482307807849\"\r\n        \"2322005134697759069190880982299089476477421890699462556853397689401906770390979778607694151546843280207413\"\r\n        \"0342767290219697959626185832487110501790388370592167474364612702816563355456835893164679873734712600708007\"\r\n        \"8125\"},\r\n    {0x1.e291ca105dbf4p-272, chars_format::fixed, 322,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000002484054238126029593102682\"\r\n        \"4878265850213738163806945569103735598853085085998454192004270399375665114378419793933909342691597838382392\"\r\n        \"0259991198886269275880452442035925336260690735668115500978992897615927476495656378574494738131761550903320\"\r\n        \"3125\"},\r\n    {0x1.05497b2f09b2cp-271, chars_format::fixed, 321,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000002689980129196104964925989\"\r\n        \"7509032221460182990193199573687789715730498841548008680282752621494050089364971956146360501570711407609350\"\r\n        \"9216799977300670476900145388353293690677054565291249211441112205284685587880488810696988366544246673583984\"\r\n        \"375\"},\r\n    {0x1.5c2e8d0a58e74p-270, chars_format::fixed, 320,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000007169144283915296680065178\"\r\n        \"9754421125674555953045807849165758253326495394357218725180436693959779826838539023524181158608569041319117\"\r\n        \"0438571390570469553243783321439188124683995544413425828554208859124188824019086041516857221722602844238281\"\r\n        \"25\"},\r\n    {0x1.150c7af401be8p-269, chars_format::fixed, 318,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000011408995211686882396999673\"\r\n        \"2771619429059117696310083593483087029745251732070619014374528062846747967900668779068752395048930939229325\"\r\n        \"944194026364434225582687841188243409709254873786228664105033274878825411136062939476687461137771606445312\"\r\n        \"5\"},\r\n    {0x1.bb30e9d725359p-268, chars_format::fixed, 320,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000036501624740693435787870241\"\r\n        \"0891277836731376220732051140141704161506159605875161481334726669028801083941369022414280357161153404157898\"\r\n        \"7268880778049879810047432484556757312227489027693957016145786181405066828098426867654779925942420959472656\"\r\n        \"25\"},\r\n    {0x1.8e26580dfb59fp-267, chars_format::fixed, 319,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000065583965679406291322543386\"\r\n        \"3772474907706697339230956823918714576491226620528055668423504368694790695666244799577994068697065802161796\"\r\n        \"3379673539191502533261642388234987613056971297550790007411141205578147816979139861359726637601852416992187\"\r\n        \"5\"},\r\n    {0x1.2ebd25a1e5a0ap-266, chars_format::fixed, 317,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000099735404360143309836615940\"\r\n        \"6069412823786123163324796730068189863724310472848274992506525874894482730745214907159098256425409638672402\"\r\n        \"82046493845413738188365824559847017543136304439349637525185634460284100910598681366536766290664672851562\"\r\n        \"5\"},\r\n    {0x1.430c70559fa8ap-265, chars_format::fixed, 316,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000212852635715402355756963326\"\r\n        \"5933551639296725987663497454190032844976248188264555042422152048670432612287432453899640173462327851640422\"\r\n        \"07656441873771873947372771748143644161220111890357661173789620596974447863658497226424515247344970703125\"},\r\n    {0x1.b37b4c8d42152p-264, chars_format::fixed, 315,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000573866702023013827963720278\"\r\n        \"8807056492920169217697166963059087608965977706055865270454378473854683004629500446032807258003040576004522\"\r\n        \"0527069108799560747635923877620361175609046577365973669951977782777152725657288101501762866973876953125\"},\r\n    {0x1.e7df267017ba9p-263, chars_format::fixed, 315,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000001285809956063130133848197064\"\r\n        \"8325266446537589188919690394573293863678630154936269933032378796467868286022293131359614581138374615252074\"\r\n        \"6396771825426169624107483758544143530277325048406906936058276443024528390424165991134941577911376953125\"},\r\n    {0x1.24edec18cb7ebp-262, chars_format::fixed, 314,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000001544059773715194646097232293\"\r\n        \"1613150367282007839535034780293980553235893087580481701735620945314590019229682990302900204048714059771297\"\r\n        \"947553595019588135744666474064112354893256519803109838895912968304013901388316298834979534149169921875\"},\r\n    {0x1.e259e5060f8b2p-261, chars_format::fixed, 312,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000005085041310658148984326449739\"\r\n        \"1468834239896808424048302785732446399420840399817211944222782861236400064717650029209129207984481028747992\"\r\n        \"2800960523182642683648046932685960291959579642015772043086609122131136473399237729609012603759765625\"},\r\n    {0x1.74c84ba4bd4a4p-260, chars_format::fixed, 310,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000007859891790258630143706359270\"\r\n        \"0391486067845391377030263724566219385264035315415509521990392844610347274677649318753401309311030578426734\"\r\n        \"94543202277888281984892070647330058705596424879530849578503082231151211090036667883396148681640625\"},\r\n    {0x1.63e925b45db68p-259, chars_format::fixed, 308,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000015008325529570412331623540869\"\r\n        \"2318222467298748568848667528071014844189585617221497166920080296757455946666133503364128985836668117456388\"\r\n        \"387335023474589528561716496306845300111545482800773821004114427779541074414737522602081298828125\"},\r\n    {0x1.8cfb3f3c5fcb0p-258, chars_format::fixed, 306,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000033480454826799275168273424149\"\r\n        \"4260245160394205926976743394714852099777996214181704439045307244233459338117526732740417275913568885136319\"\r\n        \"9856905782006938943098182212607365397150427389013379979310069956000006641261279582977294921875\"},\r\n    {0x1.f7c87448db5fbp-257, chars_format::fixed, 309,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000084975685812240518705712137865\"\r\n        \"3504086691655000597238726212421654829545650974876771798110445932287518001991785436537587101247795788092235\"\r\n        \"2800183139082748948605372626813875208770216535992080681381766193993598790257237851619720458984375\"},\r\n    {0x1.e5fc8e5d48f9bp-256, chars_format::fixed, 308,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000163947724143070226309182119377\"\r\n        \"5372634243918692270000593799703073872677907151010451429759058340761011227242016051539416659017291756167864\"\r\n        \"060665103292217176205515232500969434144333778734538005321386133772421089815907180309295654296875\"},\r\n    {0x1.ae03e4daf2ee0p-255, chars_format::fixed, 302,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000290131550137518304336272643681\"\r\n        \"2116563756484400756322030273213923838050864039865987841562611675023491725703543580213144915476445763872235\"\r\n        \"651387576298414489076718483357143723725388691019565212680930699207237921655178070068359375\"},\r\n    {0x1.1b8ab942a6426p-254, chars_format::fixed, 305,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000382611804506936019106599873748\"\r\n        \"2255120049858934710011108712738518689170735705966447549912007319027170983581023332628356967493174797628748\"\r\n        \"129494411563405321852741198026896593856497615654551312791564754434148198924958705902099609375\"},\r\n    {0x1.0c1e462c5c1cep-253, chars_format::fixed, 304,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000723598272195478800371822609801\"\r\n        \"7140780701095782183686293577823391688605110135925206639698894546021871641529980582179296597763425758540148\"\r\n        \"88159205157469067456314240460661266281712378036264886327355583262033178471028804779052734375\"},\r\n    {0x1.e7b34d78e6948p-252, chars_format::fixed, 301,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000002632414291507956679404458522820\"\r\n        \"8590792665767389780345214640856391021186677025555855415331925777643406404267481582715967520197234875894526\"\r\n        \"97486195004740894571365225366838907355346627759025424087013789176126010715961456298828125\"},\r\n    {0x1.19f7b9144e56ep-251, chars_format::fixed, 302,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000003043900383151561567633605648528\"\r\n        \"5756533835399224529189344052214824595214456119324049792258875343600293464605060356052949960559839643219948\"\r\n        \"250099914213156123317711143870226847667680860980675416893603824064484797418117523193359375\"},\r\n    {0x1.9243a3c6aa988p-250, chars_format::fixed, 299,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000008685053970949931955559499782793\"\r\n        \"3889454841898663613334205733556673628208790371074675294281427261965075820622127188272720686006316883426755\"\r\n        \"728765572095930620716564177375514361089642420728218485947991212015040218830108642578125\"},\r\n    {0x1.1fcc03dda0a29p-249, chars_format::fixed, 301,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000012427314157729456479934367418834\"\r\n        \"4921139801832679256254035832815095396832575738969536252302952905818679335139867126855919765889486660234790\"\r\n        \"77125532193887343148261321890083229131103071296755857577664983182330615818500518798828125\"},\r\n    {0x1.89816794283e0p-248, chars_format::fixed, 295,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000033983797108077041005965221970144\"\r\n        \"9270111386975593968697829250705890339709488341324515374071635287665805623289119716016152060124454015265884\"\r\n        \"05167456823811417909534098707575372193159628231295954492452437989413738250732421875\"},\r\n    {0x1.c60043d326280p-247, chars_format::fixed, 292,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000078416589235876873864289188382541\"\r\n        \"2680982061972990493938935625523315898525486989136226372381121432223993609915480134465272471761419124295424\"\r\n        \"63342526076594337886490692674241112102191675337081733232480473816394805908203125\"},\r\n    {0x1.80c28d4967c46p-246, chars_format::fixed, 297,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000132914077601964831657415119941949\"\r\n        \"1075305257086908475749508503265285908288591400306702686081517049600710538824206879805638335832128758336392\"\r\n        \"1988770555946670003883812600453791642239414171056122171421520761214196681976318359375\"},\r\n    {0x1.a40c7ce612bbdp-245, chars_format::fixed, 297,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000290208965790319384537361173621222\"\r\n        \"8667135296506323548714539974492591207840732828200977273593613094846558098038147780280954865082646231469077\"\r\n        \"7478454224088947478463265810300725797569510767959233277224484481848776340484619140625\"},\r\n    {0x1.efaf47443919ap-244, chars_format::fixed, 295,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000684930633110214442852626226308539\"\r\n        \"0101973923359825322543536163696365620422741413585533131004115616382717641362970861808789762143903765257144\"\r\n        \"24271780749287936058534182261326294307462493604621300846702069975435733795166015625\"},\r\n    {0x1.7500215776f19p-243, chars_format::fixed, 295,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000001030814484713535377118614529817109\"\r\n        \"7410301970246782425463944124259742140545264889430363986396035589042598392965577684427324087311806164099196\"\r\n        \"31827705932480302973969722163129709559888265435478871268060174770653247833251953125\"},\r\n    {0x1.4a99b1bcecb64p-242, chars_format::fixed, 292,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000001827277123300592913288498842730137\"\r\n        \"8153940847425631690632810979503758848344768354506461635004842080033192263390140106182493404532628159952008\"\r\n        \"14086913857733087461577506816919375825548910174944694517762400209903717041015625\"},\r\n    {0x1.be72480668102p-241, chars_format::fixed, 292,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000004935150669641910324006166926550225\"\r\n        \"6149959617111583303561219685377261392905223787116563640644769825543047758998821713721504680236906163507862\"\r\n        \"29899863402284617929661166109163084243262320516265617698081769049167633056640625\"},\r\n    {0x1.e7a659213dfb5p-240, chars_format::fixed, 292,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000010781250168794165933748349260234324\"\r\n        \"3910264638792899470531141938294828417591353189172688117587481618090046432679611225514535349967383908198802\"\r\n        \"53376364061559733784810868039410940784524062241445108156767673790454864501953125\"},\r\n    {0x1.8490c51f45e0cp-239, chars_format::fixed, 289,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000017181272168700195560600399255994575\"\r\n        \"0191688722510099967403223288619485158101752998401507139707482255573997867396379335700002769043874836031870\"\r\n        \"99842401715999979637460652213279215481944728338703498593531548976898193359375\"},\r\n    {0x1.e2624233f3ae1p-238, chars_format::fixed, 290,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000042659307529076216561467963956055319\"\r\n        \"3168972469683442364205790310634427253557408187714105647198337090919889430309795900282398265726189862458374\"\r\n        \"678051097719482165551080831781337690013222729845665526227094233036041259765625\"},\r\n    {0x1.d34363be146f9p-237, chars_format::fixed, 289,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000082644256896671227468821316614503358\"\r\n        \"3318272051367540732059260881575848379677685269313105225560795453156201999752392611005149405019628407058574\"\r\n        \"51612605924084149511941781828994646637298604474608509917743504047393798828125\"},\r\n    {0x1.cc0d98a80a987p-236, chars_format::fixed, 288,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000162738020657325978961138173872602763\"\r\n        \"4103097410045766684562920176381305594300538915293361058918473228314436959590541926080602810091502080422698\"\r\n        \"0534376836276932498708203738289521621263045147998127504251897335052490234375\"},\r\n    {0x1.0361a6687dab5p-235, chars_format::fixed, 287,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000183505869443814376581462090395957966\"\r\n        \"2255884361050661407760281655192030983533924668060541241759050983674635009073179904153453991581773532228622\"\r\n        \"490354517767036426047187834187574863309411199452370055951178073883056640625\"},\r\n    {0x1.334f6d8947b79p-234, chars_format::fixed, 286,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000434828615428421369337573376270471592\"\r\n        \"5110958338493111881172797715333830872916712442244649032535828057602138531289335929051088851434758295916723\"\r\n        \"76873605604435264983395219417897960278995839189519756473600864410400390625\"},\r\n    {0x1.305f84a10441bp-233, chars_format::fixed, 285,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000861345397615590038055480615315880221\"\r\n        \"8112390354251248505662201630614528343138187122485072779443239827237358105127242669202292238202206019105358\"\r\n        \"3587616875316948729880599795022920461828874749699025414884090423583984375\"},\r\n    {0x1.c9b7f3905ce9bp-232, chars_format::fixed, 284,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000002590595243725045563505923729301582289\"\r\n        \"7473731806321263112212662836451190738319086758301231709882273911943529327018044446621067865400351938481216\"\r\n        \"559748291967404307769910111881699055214056670592981390655040740966796875\"},\r\n    {0x1.2cf7988d814d0p-231, chars_format::fixed, 279,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000003406827648187512110628833531572523878\"\r\n        \"7330858093186688658099540644480044178549555509113134844354121258224253452591702106989621843660299350553233\"\r\n        \"0186491208047744444804166320805993706244407803751528263092041015625\"},\r\n    {0x1.2439294be562ap-230, chars_format::fixed, 281,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000006615700752136380539591751222162850767\"\r\n        \"4702476236714185773792545977038289879884140448995517698614722807482564316269955719701793397075413905783271\"\r\n        \"318826294501086750761564164204087123977160445065237581729888916015625\"},\r\n    {0x1.7d0e7e36e5257p-229, chars_format::fixed, 281,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000017253632008143088480986275464805616259\"\r\n        \"4664610475574084555791727712966221709255677969584776451459889348610943280541592636736407336659321916801029\"\r\n        \"023411688490517352222660438058887688583808994735591113567352294921875\"},\r\n    {0x1.7644d51f65057p-228, chars_format::fixed, 280,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000033892588392445132904880849439603103583\"\r\n        \"2408658546980420925396178891103575355839740945128488973410602319117156688472064894916865501422840027142738\"\r\n        \"59791254064651550505603955741606991836079032509587705135345458984375\"},\r\n    {0x1.10bed5717b54ap-227, chars_format::fixed, 278,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000049397904291451873909412488950158690757\"\r\n        \"6592934125894735294262798645025293238520392188366703254950604394513860826816969882247207957292424991122060\"\r\n        \"599367981196290341226848470690402592708778684027493000030517578125\"},\r\n    {0x1.97ed031bcbbe9p-226, chars_format::fixed, 278,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000147761815700754991357783998881795972964\"\r\n        \"6543270693691090869363980717301850413872502132999352585749189714053058229777886958874081655166914945387334\"\r\n        \"176236365795347469506899364122265438936665304936468601226806640625\"},\r\n    {0x1.e87bc17774e5fp-225, chars_format::fixed, 277,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000353883927539305215694586030569756054270\"\r\n        \"8905701070644453775189948397167810358540904406875368957330644952008736200486300421607355606413910639782040\"\r\n        \"63233997161090636218434661575127364585569011978805065155029296875\"},\r\n    {0x1.4ccad3c275ebbp-224, chars_format::fixed, 276,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000482185633857731122231087086928544800265\"\r\n        \"0682677831896983412031939032716293413681877374959247433165167106011799750781588278683806073709165512240232\"\r\n        \"8021117440941168240798979371941612726004677824676036834716796875\"},\r\n    {0x1.5a61517ffd9c3p-223, chars_format::fixed, 275,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000001003746392394803539895237768695472569570\"\r\n        \"8749868243331851405077722286769296317670730594311068901851751621982905208845752049158036704193593034774538\"\r\n        \"757502752294448392761903876557738612973480485379695892333984375\"},\r\n    {0x1.3760a2aa6c254p-222, chars_format::fixed, 272,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000001804630112067757783115652327375138155300\"\r\n        \"4340805312555968258097633741380875846144919225810181030729661426063465509289312072911372495984143831747178\"\r\n        \"764135517056767525796712181573866473627276718616485595703125\"},\r\n    {0x1.b29dcf95ce2bfp-221, chars_format::fixed, 273,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000005037756265273765674074043183480696509275\"\r\n        \"4376110615663711189065303770401719757724363364437831625604535900905066591416234093068063139894383117810259\"\r\n        \"7624583278594631650763868702114223196986131370067596435546875\"},\r\n    {0x1.3aa4a3e7fe35ep-220, chars_format::fixed, 271,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000007294226364184892470979197433331855239292\"\r\n        \"2497189413454562471159916381061755863392570840931492118884350692330286429326633451588825073607891188996001\"\r\n        \"06765970543491284065751312226666414062492549419403076171875\"},\r\n    {0x1.74467fb9beca1p-219, chars_format::fixed, 271,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000017260576914043516299667521604544099503136\"\r\n        \"8942254606077291025462183934993722035708739731939013562031045416518587029197566747180584119441988307413207\"\r\n        \"24457610150486788942736371410546780680306255817413330078125\"},\r\n    {0x1.04460adf3c909p-218, chars_format::fixed, 270,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000024135211264249107986888028696130084430233\"\r\n        \"1199680608168326292370848100433544597095878127513056419537958634482951063686329453571446508833729813534139\"\r\n        \"9152847190355737107270162056238405057229101657867431640625\"},\r\n    {0x1.4821325395af2p-217, chars_format::fixed, 268,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000060855030282997452019447514867331630657468\"\r\n        \"0441276457329900935114328316525912406566934993043883319480057195762916477340190285864330691976263848355178\"\r\n        \"46818553661819052591486212122617871500551700592041015625\"},\r\n    {0x1.6de490a48e2fep-216, chars_format::fixed, 267,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000135717194322092089616822917590790896522078\"\r\n        \"5435880214450563946466856687031728868606265057037973678986955770686522077269479766474371452555454769467211\"\r\n        \"5452339483210146553471275865376810543239116668701171875\"},\r\n    {0x1.9fae33750204dp-215, chars_format::fixed, 267,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000308368913191465426546216764354534279279853\"\r\n        \"4647154007947826510094192557921891772574536300851979266772693650957852102558457910312241351543397130800984\"\r\n        \"9425461816976347384500201087575987912714481353759765625\"},\r\n    {0x1.b89a1b615d668p-214, chars_format::fixed, 263,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000653713430119731508528988387670142850540091\"\r\n        \"7024591492023198371494072408095221057296211181997410062702880812047091371176364709303433877377005013842865\"\r\n        \"407407861123856296359235784620977938175201416015625\"},\r\n    {0x1.1205bf14b82bdp-213, chars_format::fixed, 265,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000813124596414924820811665415896048177068741\"\r\n        \"7100698018506635581043211888340131866927322782838488132064383032775727008428556203643464133360106426989235\"\r\n        \"32080491406205668969420230496325530111789703369140625\"},\r\n    {0x1.38bb74b2cee28p-212, chars_format::fixed, 261,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000001855981412950647386642180401236753360880458\"\r\n        \"3471137464959335795734206066943305396434753643633830322823523500521445327350900664130943592099717852707904\"\r\n        \"0475538697363422357966555864550173282623291015625\"},\r\n    {0x1.22a0215ce7d73p-211, chars_format::fixed, 263,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000003449567762615895867421439569691922423317964\"\r\n        \"9058963110430872447723008494208841922384319206038046498414808280237161710744628525006862200491884428522247\"\r\n        \"284967078805040241462620542733930051326751708984375\"},\r\n    {0x1.43e2f21e78901p-210, chars_format::fixed, 262,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000007688715671540768259102383228674540661496075\"\r\n        \"0239691936325646278514953457227545274838167326206011205999045631110875216847571251783396084883096029016216\"\r\n        \"49250645841588980289316168637014925479888916015625\"},\r\n    {0x1.a6c0fc50fb8dcp-209, chars_format::fixed, 259,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000020071439114262729837504870375731843208174931\"\r\n        \"7651105701733226243785084204963498325479454120948366065657945373829686641016997655205206115182939135129158\"\r\n        \"51364397379352766392912599258124828338623046875\"},\r\n    {0x1.a43598a7e7224p-208, chars_format::fixed, 258,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000039901264509201541515385647530544570777756931\"\r\n        \"3296573829059392550415956380207781632010739005800912630326089506298277570548782926339548312289799185348914\"\r\n        \"9519963741230554887806647457182407379150390625\"},\r\n    {0x1.4514380584fc6p-207, chars_format::fixed, 258,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000061736189512288787578528448418416349991749663\"\r\n        \"7008478097846944616435197214273765845275167574578053467647504429563767628821091658473943936912688697004783\"\r\n        \"0556322654427248153297114185988903045654296875\"},\r\n    {0x1.8641944ca7d95p-206, chars_format::fixed, 258,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000148228155683115713877743471137365531850617628\"\r\n        \"0396008351620169786052842426640120340461814180392122940758722185770249302574978259743400263529336200340532\"\r\n        \"5086520527566591454160516150295734405517578125\"},\r\n    {0x1.f6b995ecb51e2p-205, chars_format::fixed, 256,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000381892700996864536569443303868808512429901994\"\r\n        \"5683149348065774492948647242485944631484315360661317694039053771102086264734603829885669675948835648501752\"\r\n        \"12447569439433436855324544012546539306640625\"},\r\n    {0x1.3d552fcd337bcp-204, chars_format::fixed, 254,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000482120756263090964607335737046910295129184548\"\r\n        \"6120439614808929664049267548576069034362769170219282267696881563389639383199305786840112696187596685076424\"\r\n        \"095350855481001417501829564571380615234375\"},\r\n    {0x1.c5d7efd89b777p-203, chars_format::fixed, 255,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000001379040554740910859757234864203023303050665354\"\r\n        \"8234544771446962869832057530013194054847840729805753756239288541495194785127271088725606233437937799342256\"\r\n        \"7498515984851792381959967315196990966796875\"},\r\n    {0x1.bc2f329491015p-202, chars_format::fixed, 254,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000002699380950167714677876947991018326219983910950\"\r\n        \"7301803802721972810548917211929893732348630965943238348446579057907037793339112719528261592247795018823419\"\r\n        \"872788793583140432019717991352081298828125\"},\r\n    {0x1.ae773e40a5fc9p-201, chars_format::fixed, 253,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000005232021895448789678535575502851476012484574302\"\r\n        \"9055888558216867850774043141361941613159031705933056320069790158341755812463991375826293315611774685844727\"\r\n        \"67532123071987371076829731464385986328125\"},\r\n    {0x1.54177621d4f18p-200, chars_format::fixed, 249,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000008267169964142633934082062830213120039431487952\"\r\n        \"9639688939193883369957348095154029848956018262827562450461879976754364993213606617872940726273138631243625\"\r\n        \"4737434637718251906335353851318359375\"},\r\n    {0x1.8c7e3d8c73527p-199, chars_format::fixed, 251,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000019276428005917081988903274894497209583789235200\"\r\n        \"8736221021965477733596774273299177586972339462480949958331639251543454284154774391128234192554058215314342\"\r\n        \"905610800471549737267196178436279296875\"},\r\n    {0x1.1d175cef3afb0p-198, chars_format::fixed, 246,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000027720738716829783366211423523072899760981646584\"\r\n        \"1798403055382188185776045220614211365026873497010110050222931977960513176092910948280156008449368314899841\"\r\n        \"0814556336845271289348602294921875\"},\r\n    {0x1.4475513c62602p-197, chars_format::fixed, 248,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000063097149258933373555396693520858956722428887774\"\r\n        \"2666815195215779362169959776323405818268309517939822174869970049426645388404390460596730442919006912917689\"\r\n        \"877673410592251457273960113525390625\"},\r\n    {0x1.777b0397564a0p-196, chars_format::fixed, 243,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000146038814660673950191544065066486223357997282171\"\r\n        \"4612054612001568583664870140519624031185135549832404652969469358986901884625568803226634472197751485333938\"\r\n        \"6036168434657156467437744140625\"},\r\n    {0x1.335f347ccd407p-195, chars_format::fixed, 247,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000239097499545739290984863047127264436692140662444\"\r\n        \"5438467965433410567473131868231146307731875389309386961521625874106489904594563874974763679662177013815482\"\r\n        \"77339561536791734397411346435546875\"},\r\n    {0x1.cb7fe420097c3p-194, chars_format::fixed, 246,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000714868218325357134525827040142183776038625814343\"\r\n        \"3588039819011645350355951153434841376093702012543245568444756399561844181411081205798629839157163744917111\"\r\n        \"7140167552861385047435760498046875\"},\r\n    {0x1.2b9e54a754171p-193, chars_format::fixed, 245,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000932265186832387152243995656617496115470062423700\"\r\n        \"6152888732071619516530868484515410144259845793808601500140904741554326054101316920396718331088344207391305\"\r\n        \"218379784491844475269317626953125\"},\r\n    {0x1.61db13efbac84p-192, chars_format::fixed, 242,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000002202049881264494876203363514211712493655815987895\"\r\n        \"0024605332256666966723974999759217940229530756811212534736376207515633057521771033537451227692950672665261\"\r\n        \"890870169736444950103759765625\"},\r\n    {0x1.b0d988ed3cddap-191, chars_format::fixed, 242,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000005387261159597293155417509914577162667716775311060\"\r\n        \"3582724995579755815059161748788482588937205208507054423401377376127275846562117768446237202968791824009286\"\r\n        \"983709898777306079864501953125\"},\r\n    {0x1.5aae85fd3e364p-190, chars_format::fixed, 240,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000008629622859499132515722973187885994477755447192547\"\r\n        \"3343599866427363221069537701112240904539206861116322405729087727198931900656419761165562244079746401226316\"\r\n        \"2658200599253177642822265625\"},\r\n    {0x1.b03e8e5e29e8cp-189, chars_format::fixed, 239,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000021518906041456636649540146948591549576372380444424\"\r\n        \"9806914387191511810096575548231772543665497700146147060328618439467737562606935278910241424697724621495353\"\r\n        \"858335874974727630615234375\"},\r\n    {0x1.4f61610cf1a2cp-188, chars_format::fixed, 238,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000033393236367487654889340514543993395885414094092298\"\r\n        \"2647103907686288821916852642730160784453816121776183567171427971774624803882873084071041978534988281523965\"\r\n        \"27002565562725067138671875\"},\r\n    {0x1.b36be913bc32ap-187, chars_format::fixed, 238,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000086708313720945146475351007645513441880275082684907\"\r\n        \"5036476620742153179051707527589540504339856257246438315205913784201820885543490247311817055789195940462832\"\r\n        \"36821182072162628173828125\"},\r\n    {0x1.c8e61b78565d0p-186, chars_format::fixed, 234,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000181970468187666026036866320957540966616516157535403\"\r\n        \"7670515951369392444985334737195772712668533324273065544210687349993721714328431898158745100291255880620155\"\r\n        \"9491455554962158203125\"},\r\n    {0x1.1775e38a634cbp-185, chars_format::fixed, 237,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000222603133599254049013833282557299702059565194251283\"\r\n        \"4837273165699301928837755016406181832991233228391945078627297246441972446178838518272174226003690122865918\"\r\n        \"9655445516109466552734375\"},\r\n    {0x1.0e15175ca8a3cp-184, chars_format::fixed, 234,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000430266067224100317333026770786621181243110051580536\"\r\n        \"0378229754216557961393586643157147601449694081038343461913842993636241248227654731942689453338957150663190\"\r\n        \"9869611263275146484375\"},\r\n    {0x1.4acfbe5469d34p-183, chars_format::fixed, 233,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000001054026242991815396584666677626491662818305460576857\"\r\n        \"5074287470826265255183716784817538128179345311968289342157486633140791923370468402402534702222425266882055\"\r\n        \"439054965972900390625\"},\r\n    {0x1.e17bb356e6d2cp-182, chars_format::fixed, 232,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000003068187998538622571875295539133090432734111360224460\"\r\n        \"6377562999866621196092449560501454295722110444234867058605656421172248387681425499341411611275987070257542\"\r\n        \"65487194061279296875\"},\r\n    {0x1.ae1fe199896b9p-181, chars_format::fixed, 233,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000005481823354294242845386199567614086443191578992113084\"\r\n        \"0684049211074743678696081616378159770391924796871267297084151393359730921440980329112542535074936722594429\"\r\n        \"738819599151611328125\"},\r\n    {0x1.a3e5b17d50316p-180, chars_format::fixed, 231,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000010702958332703832567616253901818145919920308310633570\"\r\n        \"4121497645444567287179585019441154244655821808282401414871886524700799667471447695812208911192442428728099\"\r\n        \"9124050140380859375\"},\r\n    {0x1.96b34187d54c0p-179, chars_format::fixed, 225,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000020733146515683786499609111229893863241245076553478564\"\r\n        \"3256160374417458563911593835483522987970775186543541176655017724809603589812469909281489321983826812356710\"\r\n        \"4339599609375\"},\r\n    {0x1.675af8398ba55p-178, chars_format::fixed, 230,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000036639110494840281694548174991298603448018526659230862\"\r\n        \"4903332492471277075145167617389269028158335738355115730033554552298718973314046770846375000729722160031087\"\r\n        \"696552276611328125\"},\r\n    {0x1.5dd2845405124p-177, chars_format::fixed, 227,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000071334288244990372312224907648096701095619611996252745\"\r\n        \"4605787694136174698730202040655249068207108069901102955125093074988767111613914735646080345077280071564018\"\r\n        \"726348876953125\"},\r\n    {0x1.1b379a2950eacp-176, chars_format::fixed, 226,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000115504902181527296463191518415016846094042323931950073\"\r\n        \"0532801623775477633840056979868607605928852867639627638892484111121180817837198959163735878519219113513827\"\r\n        \"32391357421875\"},\r\n    {0x1.050c080bc80d1p-175, chars_format::fixed, 227,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000212926392615345824042139084085022347428420568623696687\"\r\n        \"8571050023330370630111578447788906881832960215258137376334762627097723751361355200295566447721284930594265\"\r\n        \"460968017578125\"},\r\n    {0x1.b43a3871c2fbap-174, chars_format::fixed, 225,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000711629189352214430515176212350698193579561352328746960\"\r\n        \"4676817937986941504449910144619335479111297659419541055742263599973449439645232367235294645979593042284250\"\r\n        \"2593994140625\"},\r\n    {0x1.df22454bc74f6p-173, chars_format::fixed, 224,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000001563247190926505061106805161595161751997831247953427151\"\r\n        \"4571791116510630486516616104887110827559419704430548593022161692046697459355757142684950622424366883933544\"\r\n        \"158935546875\"},\r\n    {0x1.b833d723fe25ap-172, chars_format::fixed, 223,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000002872455350090359802857254638300178114911027128272264256\"\r\n        \"7137230852108467397456216094989216899040621575989169047949594509459845436067162993687418293120572343468666\"\r\n        \"07666015625\"},\r\n    {0x1.f684b3c7cc0acp-171, chars_format::fixed, 221,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000006558170706952156987785687072431960377973028128216125661\"\r\n        \"3335172096317790203054916032047180861903076571475476949770983954945174541038832582984241525991819798946380\"\r\n        \"615234375\"},\r\n    {0x1.a5b141082f7b4p-170, chars_format::fixed, 220,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000011006685169756962680050220555041590876254318428865998856\"\r\n        \"9045688269339538913108647404952659594031915621633770697462006094925393963682158648964559688465669751167297\"\r\n        \"36328125\"},\r\n    {0x1.4fff666a560aep-169, chars_format::fixed, 220,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000017539896072768474874561864155705114932844071436878901874\"\r\n        \"9326317838467055752161232305239966778050582704264694405684999526265046209880238414768882648786529898643493\"\r\n        \"65234375\"},\r\n    {0x1.668bb57ef8bccp-168, chars_format::fixed, 218,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000037433921715043594589736460314331405184962182591207676516\"\r\n        \"7720492215331841300392792216243120028749941240758768607887085263453345700124241801631796988658607006072998\"\r\n        \"046875\"},\r\n    {0x1.dcd176deeeae3p-167, chars_format::fixed, 219,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000099564289980093796889603154154145876739448114195979055992\"\r\n        \"6902590224573129717127057611396323672607934389143663775516448533334441014369664557648320624139159917831420\"\r\n        \"8984375\"},\r\n    {0x1.16a3865422377p-166, chars_format::fixed, 218,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000116364979243225221897297052242786229930882923236248731594\"\r\n        \"8934888434929983564865325849049549620057568156330193520858451476789898436370318535182377672754228115081787\"\r\n        \"109375\"},\r\n    {0x1.bce21dad63749p-165, chars_format::fixed, 217,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000371583841159493506147378208719048169250779569408692309413\"\r\n        \"1488511150289090977603018132195717243449127154792316806924856786230023167338920586644235299900174140930175\"\r\n        \"78125\"},\r\n    {0x1.89eeefab48d10p-164, chars_format::fixed, 212,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000658056963417738275682010734279149903138108824337865274527\"\r\n        \"340177751085537685676458714128712234144985979360132419013818037920732217926911289396230131387710571289062\"\r\n        \"5\"},\r\n    {0x1.8fee5ccadb200p-163, chars_format::fixed, 206,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000001336152174543859284066395565563171654946943165053851747677\"\r\n        \"4582035584703495979290821050139073573949863898319932246070741721499786081039928831160068511962890625\"},\r\n    {0x1.07380dad14bcap-162, chars_format::fixed, 213,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000001758805859472406906837815134000656238238908993747747715595\"\r\n        \"3047822519153788093489690886862546961352922261512761607203161331406532363885730774200055748224258422851562\"\r\n        \"5\"},\r\n    {0x1.0b59bf6c21943p-161, chars_format::fixed, 213,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000003572825938796783575781050231474822856033670219138548239089\"\r\n        \"9073723989786692440757890127298326923356779924206406360535208681285940235383691288006957620382308959960937\"\r\n        \"5\"},\r\n    {0x1.fa531504c2a95p-160, chars_format::fixed, 212,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000013532863609445874625424619828095184220811044476992203391714\"\r\n        \"726909818173064528541715965734117428727450051983079860150084854520519117571097922336775809526443481445312\"\r\n        \"5\"},\r\n    {0x1.bcfee137bb727p-159, chars_format::fixed, 211,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000023787372002095833385126791878777862375484338276605231718277\"\r\n        \"36041320661206356555332021716335377659697411693080297350262510957391581811748437758069485425949096679687\"\r\n        \"5\"},\r\n    {0x1.151cd5ef2d805p-158, chars_format::fixed, 210,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000029626275330019588245631947287909396699745270360057415499881\"\r\n        \"99852573984360531392757263428340980072068222394117076967551033424286277551118473638780415058135986328125\"},\r\n    {0x1.a50d5e23e121ep-157, chars_format::fixed, 208,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000090029880689123645099794460485807721339684096115950637844009\"\r\n        \"362876227390039831564636627226957537724402162583602570082390824379725557946585468016564846038818359375\"},\r\n    {0x1.82802e4264badp-156, chars_format::fixed, 208,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000165284071528441447855006149734552733369999127774633850562991\"\r\n        \"043359152029597089960035135672906948051353768689247248694610022134998672527217422612011432647705078125\"},\r\n    {0x1.2177668084382p-155, chars_format::fixed, 206,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000247576191853698082030212400035215933812096632723082049868033\"\r\n        \"5024058131760117241155512244849406066711402810901342339011156623573839397067786194384098052978515625\"},\r\n    {0x1.03b3d0af74440p-154, chars_format::fixed, 200,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000444238987494900843994339695995098261443293305913325679391461\"\r\n        \"0695787073745872826201675765786764986150790936867056336867509713783874758519232273101806640625\"},\r\n    {0x1.d2d07d1f0f329p-153, chars_format::fixed, 205,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000001597036901212250959318477514463560465972110052858020348453661\"\r\n        \"114995453788426982996437834015229782577081540055113898402168459700334324224968440830707550048828125\"},\r\n    {0x1.8fa32bc4d85bap-152, chars_format::fixed, 203,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000002734429961643154352243242191279271813443642705760566549994309\"\r\n        \"1928202467144496467783172463158734772458732489503583523195173743403074695379473268985748291015625\"},\r\n    {0x1.67c2abce8df9dp-151, chars_format::fixed, 203,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000004923161560346420724200792187601358851860129025104491687662924\"\r\n        \"1339050523954671848627932540076411043836705992149190718766560426189471399993635714054107666015625\"},\r\n    {0x1.73f3b6e413e35p-150, chars_format::fixed, 202,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000010179995696026282273811276434771842619116554426387226609081999\"\r\n        \"306437938716096066552645975664851424917170160429284839383179406269164246623404324054718017578125\"},\r\n    {0x1.7a95dc8122d45p-149, chars_format::fixed, 201,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000020723091166540273850593168126191139912345243921985305222697460\"\r\n        \"10003905501097895079213267551039998263371339743302659321122494162636940018273890018463134765625\"},\r\n    {0x1.af1bf9e405f36p-148, chars_format::fixed, 199,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000047196310508913904671194894358782925911776121787765422306796132\"\r\n        \"134761227959946314353602058140317633579755078227792840228627113674519932828843593597412109375\"},\r\n    {0x1.93bd4a776ff22p-147, chars_format::fixed, 198,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000088399910274584726229868620813946972911876446658509805639346664\"\r\n        \"85756635438910965113045452799651249339083210906594691158577603573576197959482669830322265625\"},\r\n    {0x1.998a4f77b7f72p-146, chars_format::fixed, 197,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000179340049546542910245662039900875920568313167261753249545366657\"\r\n        \"7716116620213166546467180442427628942420448257652650092541790627365116961300373077392578125\"},\r\n    {0x1.e2ee6bf0a5651p-145, chars_format::fixed, 197,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000422956835910564709068003370286188447416571417665682213678355812\"\r\n        \"2724658730842920633563034498958928767526273091660778125078223865784821100533008575439453125\"},\r\n    {0x1.80940300d356fp-144, chars_format::fixed, 196,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000673636000238404179995423930417754312868629249686475854751089088\"\r\n        \"646535533046155257103169810022443463128717088829987280629296719780541025102138519287109375\"},\r\n    {0x1.fb7e121e4f09ep-143, chars_format::fixed, 194,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000001777871026025537082306811881574403454523919617504481056645248505\"\r\n        \"9711823829134148938595203744881815979364219466006546976899471701472066342830657958984375\"},\r\n    {0x1.db7f5ce10385bp-142, chars_format::fixed, 194,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000003331569659565884604746958559230960176066631235771463790780530480\"\r\n        \"1690666734362639697081633088940864280810672903680724754593711622874252498149871826171875\"},\r\n    {0x1.1d9d22c7f3534p-141, chars_format::fixed, 191,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000004002301960990423046030612937546885334555687306024269519143435585\"\r\n        \"0628634523560076237997206470162408844618039983898061251466060639359056949615478515625\"},\r\n    {0x1.8e16e3aa24c6fp-140, chars_format::fixed, 192,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000011156841616796604932136274348484852039247641538297458130288766038\"\r\n        \"21663049539205116152069822829205002114654420551642655112800639471970498561859130859375\"},\r\n    {0x1.87e3f754c260dp-139, chars_format::fixed, 191,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000021966221825446393623879986362588124795901767213242488227182002426\"\r\n        \"8029734385173578034649495511564138867989536864355759604450213373638689517974853515625\"},\r\n    {0x1.fa5d32abaa11cp-138, chars_format::fixed, 188,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000056765373748004688332440652788786161538895277758131917477071063157\"\r\n        \"0041698358399840694619345434124738111031881204748827940420596860349178314208984375\"},\r\n    {0x1.f67503a2182bbp-137, chars_format::fixed, 189,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000112654775034390728341437781791380233004082818991798448486035784404\"\r\n        \"71818264924572994395463590144925447532309702169950327288461267016828060150146484375\"},\r\n    {0x1.db3ed18fbe233p-136, chars_format::fixed, 188,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000213107401086292667418252766407681523457020559571672401249223380999\"\r\n        \"0673310546131572074009228115100114521007594603485557627209345810115337371826171875\"},\r\n    {0x1.8335b0765d557p-135, chars_format::fixed, 187,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000347261690499442998794533299394815869917005220736341744107621709115\"\r\n        \"031987909302410044329883903658013740638026145557404333885642699897289276123046875\"},\r\n    {0x1.4dbf09123267bp-134, chars_format::fixed, 186,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000598627945734676624400745950605001550286642741362338546015756676686\"\r\n        \"11139098768423815169512058364388094422285646611925358229200355708599090576171875\"},\r\n    {0x1.5e56a8ce3c277p-133, chars_format::fixed, 185,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000001256777780832933001321775313711471627602105802559709007658682419783\"\r\n        \"6408715656044366011499934739896008786645686949867695147986523807048797607421875\"},\r\n    {0x1.bb079ee8f4d5cp-132, chars_format::fixed, 182,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000003178582703527919012178411933954290292754725568671302600893705451044\"\r\n        \"7409625558295054802900095791530292975435312285981126478873193264007568359375\"},\r\n    {0x1.4f6e275cf1a76p-131, chars_format::fixed, 182,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000004813188583918946434263028581023898575269952764660409858008830460951\"\r\n        \"8450064927286820639649469111945897896454038544789000297896564006805419921875\"},\r\n    {0x1.6e0c8ad2bb37cp-130, chars_format::fixed, 180,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000010505090911062820335561411705941054623172870846458893207124770055231\"\r\n        \"06106921870430888257930709698217096315087104585472843609750270843505859375\"},\r\n    {0x1.98e433996597fp-129, chars_format::fixed, 181,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000023469216079446797138739112899579158124687027232331769891232554936238\"\r\n        \"609927331878316423045145059373263289603794845561424153856933116912841796875\"},\r\n    {0x1.42726d8c4369ap-128, chars_format::fixed, 179,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000037015098458206448453351979822608106339451489448555898068736741171041\"\r\n        \"6296973229555473403516808856791343862457921431996510364115238189697265625\"},\r\n    {0x1.486454058df80p-127, chars_format::fixed, 172,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000075395084299958847860449433646301178540543942807329687696496446852570\"\r\n        \"945235346855720548050138439533096601508077583275735378265380859375\"},\r\n    {0x1.6661274c7f05cp-126, chars_format::fixed, 176,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000164559798686967835340820637511334291365290360151649186607120062118549\"\r\n        \"9801342584795897515286799950816332138714415123104117810726165771484375\"},\r\n    {0x1.3aa7b44b0a502p-125, chars_format::fixed, 176,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000288965067500368064755779719228352553128154522967464982357315991850883\"\r\n        \"1495951943822141976963118457401302752174387933337129652500152587890625\"},\r\n    {0x1.9fd27c3ae95f7p-124, chars_format::fixed, 176,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000763744775889794385912297229514875268210416129934720340408669789113025\"\r\n        \"0718208990904335632548776530668932505108159602968953549861907958984375\"},\r\n    {0x1.da78946cc5490p-123, chars_format::fixed, 171,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000001742931242211031071897797941374877596373704426709900579991877856290126\"\r\n        \"82535510419761596095857177080024058568596956320106983184814453125\"},\r\n    {0x1.f203ac3519f18p-122, chars_format::fixed, 171,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000003658831567832270827231401967202780229509371162725867762209862489371751\"\r\n        \"20390237932813757635425698511166814341777353547513484954833984375\"},\r\n    {0x1.b49aae7f5cad1p-121, chars_format::fixed, 173,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000006415322502181043530205537799813093430916940457471116691767428439442996\"\r\n        \"9174601750224385013791146732675674257961873081512749195098876953125\"},\r\n    {0x1.b661988bbdc4bp-120, chars_format::fixed, 172,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000012882866599344565053618788391492597985347367160360079978812335056300495\"\r\n        \"851823386955130707091986101697766997631333651952445507049560546875\"},\r\n    {0x1.7dc73059f4d49p-119, chars_format::fixed, 171,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000022438898905531304113205534342267833215945294680111818683410060358815191\"\r\n        \"18026928138778739246707479015885411399722215719521045684814453125\"},\r\n    {0x1.cdb2f9141b525p-118, chars_format::fixed, 170,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000054272469927212228398680026288174857747043423993740677691930900376873032\"\r\n        \"7611528112020569043533364805842467148977448232471942901611328125\"},\r\n    {0x1.ca41b4813a41ep-117, chars_format::fixed, 168,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000107735623137020512175428706905408399153184701951301970808448378468396141\"\r\n        \"71734258592932298947107694342406603027484379708766937255859375\"},\r\n    {0x1.81c487a032056p-116, chars_format::fixed, 167,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000181387098238701349633394397706124283186756008245784673448133756160446651\"\r\n        \"5628515662370009802438486357090141609660349786281585693359375\"},\r\n    {0x1.72bcb5fff535bp-115, chars_format::fixed, 167,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000348639542344064625506917491450303109916165134325757439080190348152792923\"\r\n        \"6375536125880844075773656864924987530685029923915863037109375\"},\r\n    {0x1.8bd7918860dbbp-114, chars_format::fixed, 166,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000744496176838064849353841502839459311866175404207553605255924112979795595\"\r\n        \"940397470964010914577790867241446903790347278118133544921875\"},\r\n    {0x1.a7f69dcd72222p-113, chars_format::fixed, 164,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000001594772855822436299560799941989765492435642647914623707098531525626084115\"\r\n        \"4700059297961143613131529406246045255102217197418212890625\"},\r\n    {0x1.eb4294b46da96p-112, chars_format::fixed, 163,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000003695830084176479639455260307651214753449914783842584804612247384526132591\"\r\n        \"666639170979876370670691443365285522304475307464599609375\"},\r\n    {0x1.45d8b318ecb26p-111, chars_format::fixed, 162,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000004902792957147278927838444756869768149019724566978348662299374512320242730\"\r\n        \"15219082824038381029918554077084991149604320526123046875\"},\r\n    {0x1.c95d0b441f711p-110, chars_format::fixed, 162,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000013763280779744355993441768388857348578041188915187008104911491475416457823\"\r\n        \"92109190078754478447908837779323221184313297271728515625\"},\r\n    {0x1.98333d0f2d03dp-109, chars_format::fixed, 161,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000024567652907408954862171758719761037178820726837148989034299592147290607067\"\r\n        \"1721993027764897876696892353720613755285739898681640625\"},\r\n    {0x1.dfd8b02992707p-108, chars_format::fixed, 160,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000057759413981215069525017042272423165722552378432976327150239566602665492393\"\r\n        \"820853640382627369742607470470829866826534271240234375\"},\r\n    {0x1.18e3e3b1a223ep-107, chars_format::fixed, 158,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000067621854242881406431627770947480800315291558269137007328403548746185753195\"\r\n        \"7636272663091092649523261570720933377742767333984375\"},\r\n    {0x1.9658328cb8114p-106, chars_format::fixed, 156,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000195647770340322473312661063510516605879488523000599581212031452510120291855\"\r\n        \"30780310726950421695846671354956924915313720703125\"},\r\n    {0x1.86c79844889d0p-105, chars_format::fixed, 153,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000376307131331019530087401714271214955872839103262439387399877169913343616427\"\r\n        \"64145573780698583732373663224279880523681640625\"},\r\n    {0x1.27dcf92066d8bp-104, chars_format::fixed, 156,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000569811750812064009223916550837978633848152611356004127465923597968062004899\"\r\n        \"91016465245177169407497785869054496288299560546875\"},\r\n    {0x1.b6c8ffb6a90c2p-103, chars_format::fixed, 154,\r\n        \"0.\"\r\n        \"0000000000000000000000000000001690138926311054318110236564865289427460630148700245225157423719757617540829\"\r\n        \"938381809205427686038092360831797122955322265625\"},\r\n    {0x1.39b18e81b6f59p-102, chars_format::fixed, 154,\r\n        \"0.\"\r\n        \"0000000000000000000000000000002416607441957108957588975134712019154730585846911599307374205389291528134853\"\r\n        \"336896338549255602856646873988211154937744140625\"},\r\n    {0x1.58ad465068c9ap-101, chars_format::fixed, 152,\r\n        \"0.\"\r\n        \"0000000000000000000000000000005310587796480732071029250198485358165789962237100555630757110785330978219665\"\r\n        \"2680426318671180752062355168163776397705078125\"},\r\n    {0x1.9d0ed395b4c84p-100, chars_format::fixed, 150,\r\n        \"0.\"\r\n        \"0000000000000000000000000000012728329747902230165316181540568536882833839113574207013715404328367409245034\"\r\n        \"93056774150460341843427158892154693603515625\"},\r\n    {0x1.bf9c0e64057fbp-99, chars_format::fixed, 151,\r\n        \"0.\"\r\n        \"0000000000000000000000000000027586071091388190196112205187915629121694961798162398502469066619619835167200\"\r\n        \"191071434911549431490129791200160980224609375\"},\r\n    {0x1.f3a0cebf107f8p-98, chars_format::fixed, 147,\r\n        \"0.\"\r\n        \"0000000000000000000000000000061583924748384136682512359017261255450407522093971748312640088161632302368340\"\r\n        \"62736317463304658303968608379364013671875\"},\r\n    {0x1.8d2ccae7cd365p-97, chars_format::fixed, 149,\r\n        \"0.\"\r\n        \"0000000000000000000000000000097911189758325206052557743537635646483728105421101526676208264656982528338082\"\r\n        \"7420087744172860766411758959293365478515625\"},\r\n    {0x1.aa0b3a331c5bcp-96, chars_format::fixed, 146,\r\n        \"0.\"\r\n        \"0000000000000000000000000000210055839089996359805238145952856304376486447936260805095946149908033949297355\"\r\n        \"5637345128843662678264081478118896484375\"},\r\n    {0x1.4b814b3a1cb61p-95, chars_format::fixed, 147,\r\n        \"0.\"\r\n        \"0000000000000000000000000000326889221350947712147955071785659465984814261422850057606214077799506126533303\"\r\n        \"84305139233447334845550358295440673828125\"},\r\n    {0x1.f4068960578d7p-94, chars_format::fixed, 146,\r\n        \"0.\"\r\n        \"0000000000000000000000000000986126487863665154148549616437903991301673772882391672259813800118265245760098\"\r\n        \"4197139126763431704603135585784912109375\"},\r\n    {0x1.f62c0cec38831p-93, chars_format::fixed, 145,\r\n        \"0.\"\r\n        \"0000000000000000000000000001980719577204124484138355016308944910386872689797885690626746042250712996212087\"\r\n        \"813052704632355016656219959259033203125\"},\r\n    {0x1.37c69791af80ep-92, chars_format::fixed, 143,\r\n        \"0.\"\r\n        \"0000000000000000000000000002459477005766036849575665181886406238795564556816120551364851906728956835567617\"\r\n        \"7002777649249765090644359588623046875\"},\r\n    {0x1.c42f82f902ae4p-91, chars_format::fixed, 141,\r\n        \"0.\"\r\n        \"0000000000000000000000000007134230712364223304595809522516715699200827642532178972744923986331716221978571\"\r\n        \"64593415291165001690387725830078125\"},\r\n    {0x1.ab5c60a4631b5p-90, chars_format::fixed, 142,\r\n        \"0.\"\r\n        \"0000000000000000000000000013485130668183937590444128052855465890028802588861696634054925499593654875281345\"\r\n        \"528748033757437951862812042236328125\"},\r\n    {0x1.163adde1f573ep-89, chars_format::fixed, 140,\r\n        \"0.\"\r\n        \"0000000000000000000000000017558778301243823121155271808116835370371045792990942242404584251962271126273895\"\r\n        \"6605744533590041100978851318359375\"},\r\n    {0x1.6cc1d8ecb558ap-88, chars_format::fixed, 139,\r\n        \"0.\"\r\n        \"0000000000000000000000000046038833248427952809663776964936140725404629123882134521116254371057353346474716\"\r\n        \"460079434909857809543609619140625\"},\r\n    {0x1.0cdf536fb5eefp-87, chars_format::fixed, 139,\r\n        \"0.\"\r\n        \"0000000000000000000000000067872927594290552636925886720441058685794883580176619836663438543506473958621949\"\r\n        \"549296914483420550823211669921875\"},\r\n    {0x1.cf43fecae092dp-86, chars_format::fixed, 138,\r\n        \"0.\"\r\n        \"0000000000000000000000000233889360486653108513167454683035633013248291265766368439722253260950506417725769\"\r\n        \"38137717661447823047637939453125\"},\r\n    {0x1.f45a241c9839ap-85, chars_format::fixed, 136,\r\n        \"0.\"\r\n        \"0000000000000000000000000505226523137597644108357193858899678905200966342862579397127901378286747580137472\"\r\n        \"368733142502605915069580078125\"},\r\n    {0x1.0e0770a686d83p-84, chars_format::fixed, 136,\r\n        \"0.\"\r\n        \"0000000000000000000000000545319349263515916601773982019382980686780428085905231623418418248727505825979022\"\r\n        \"802130202762782573699951171875\"},\r\n    {0x1.0248f281384bap-83, chars_format::fixed, 134,\r\n        \"0.\"\r\n        \"0000000000000000000000001043204606574315648767810454522756782910973292669829335211958993700088332845510308\"\r\n        \"2887944765388965606689453125\"},\r\n    {0x1.ac4e19937ae27p-82, chars_format::fixed, 134,\r\n        \"0.\"\r\n        \"0000000000000000000000003459820865051478989748670632484660497868302074004577838972792560732951588908790085\"\r\n        \"9522051177918910980224609375\"},\r\n    {0x1.3087a7746f421p-81, chars_format::fixed, 133,\r\n        \"0.\"\r\n        \"0000000000000000000000004919945865610923037667176669438364925899595305968700003623719473337845553562175382\"\r\n        \"467103190720081329345703125\"},\r\n    {0x1.70783708f772ap-80, chars_format::fixed, 131,\r\n        \"0.\"\r\n        \"0000000000000000000000011905894569192662776098050199813402280754741687796493203055674863031360155574134296\"\r\n        \"3301576673984527587890625\"},\r\n    {0x1.e065c19de1dc4p-79, chars_format::fixed, 129,\r\n        \"0.\"\r\n        \"0000000000000000000000031044959876029036877825464923078462041822306405426805057268534225947687055224832874\"\r\n        \"95560944080352783203125\"},\r\n    {0x1.c685d70ae0fe0p-78, chars_format::fixed, 125,\r\n        \"0.\"\r\n        \"0000000000000000000000058745696639777179642268254943931146596782812693870464352651882683487016834078531246\"\r\n        \"6323375701904296875\"},\r\n    {0x1.a0780c9dec656p-77, chars_format::fixed, 128,\r\n        \"0.\"\r\n        \"0000000000000000000000107654698431785435045489713914256723242131891407125053545692616296242105633496066730\"\r\n        \"0038039684295654296875\"},\r\n    {0x1.3cb9bbf0aea75p-76, chars_format::fixed, 128,\r\n        \"0.\"\r\n        \"0000000000000000000000163743258090422544821847978493162537292356197934025069916273112825139124382189947937\"\r\n        \"1495544910430908203125\"},\r\n    {0x1.f0a2b8fd92f2fp-75, chars_format::fixed, 127,\r\n        \"0.\"\r\n        \"0000000000000000000000513509211207940396346808840622328108640224488399038307803406533218193441570065260748\"\r\n        \"378932476043701171875\"},\r\n    {0x1.bb04bcebdd6ffp-74, chars_format::fixed, 126,\r\n        \"0.\"\r\n        \"0000000000000000000000916140801451767788622065769604257008319492079233873702331702798193346914956691762199\"\r\n        \"62537288665771484375\"},\r\n    {0x1.0b62fe692a947p-73, chars_format::fixed, 125,\r\n        \"0.\"\r\n        \"0000000000000000000001105885448728602157660372530490316353991836641389306121489508310390403877931930765043\"\r\n        \"9441204071044921875\"},\r\n    {0x1.272fe8508d433p-72, chars_format::fixed, 124,\r\n        \"0.\"\r\n        \"0000000000000000000002441730781169199364855750861362078623225251480968477216777312403805932916611709515564\"\r\n        \"143657684326171875\"},\r\n    {0x1.a4da532053764p-71, chars_format::fixed, 121,\r\n        \"0.\"\r\n        \"0000000000000000000006962426049274538699439196410633694865008161302307608512174481874001941150709171779453\"\r\n        \"754425048828125\"},\r\n    {0x1.93f477225bbbep-70, chars_format::fixed, 121,\r\n        \"0.\"\r\n        \"0000000000000000000013365747882614801032463352914308130925659506904834814518322032295127854695238056592643\"\r\n        \"260955810546875\"},\r\n    {0x1.dac01e869bf58p-69, chars_format::fixed, 118,\r\n        \"0.\"\r\n        \"0000000000000000000031416350487962486701379607843901811256471115918449956111273280168205701556871645152568\"\r\n        \"817138671875\"},\r\n    {0x1.d259d75a5b1c3p-68, chars_format::fixed, 120,\r\n        \"0.\"\r\n        \"0000000000000000000061721033295351600892557306527903367291189660591862000039607358270465908844926161691546\"\r\n        \"44012451171875\"},\r\n    {0x1.21e65c14b2260p-67, chars_format::fixed, 114,\r\n        \"0.\"\r\n        \"0000000000000000000076735849386577397352904483936223962191097616545595134704416118154313153354451060295104\"\r\n        \"98046875\"},\r\n    {0x1.247adaeef533dp-66, chars_format::fixed, 118,\r\n        \"0.\"\r\n        \"0000000000000000000154837571490893774333213229345009640160216876301445875570468591053696627568569965660572\"\r\n        \"052001953125\"},\r\n    {0x1.8590b3c7299d1p-65, chars_format::fixed, 117,\r\n        \"0.\"\r\n        \"0000000000000000000412468245113335524762074241204890152586197732119167202362655655356604711414547637104988\"\r\n        \"09814453125\"},\r\n    {0x1.c16c9cb03d8aap-64, chars_format::fixed, 115,\r\n        \"0.\"\r\n        \"0000000000000000000951692901231032540579231072092779398477634354654546553799188135513986708247102797031402\"\r\n        \"587890625\"},\r\n    {0x1.afab9cd6fe545p-63, chars_format::fixed, 115,\r\n        \"0.\"\r\n        \"0000000000000000001828195094563646962244514682444059838175275831433078317124485412392687067040242254734039\"\r\n        \"306640625\"},\r\n    {0x1.f3fa50d429d7dp-62, chars_format::fixed, 114,\r\n        \"0.\"\r\n        \"0000000000000000004234976659797314303742107007588948382176629454667150841487566204079939780058339238166809\"\r\n        \"08203125\"},\r\n    {0x1.28c638f71d180p-61, chars_format::fixed, 106,\r\n        \"0.\"\r\n        \"000000000000000000502755231383003604812020402739857044083133282962733145993183825339656323194503784179687\"\r\n        \"5\"},\r\n    {0x1.9f197cec56a5bp-60, chars_format::fixed, 112,\r\n        \"0.\"\r\n        \"0000000000000000014064120230650801115977574752674439808505632504024500210870751715219739708118140697479248\"\r\n        \"046875\"},\r\n    {0x1.23514676b2275p-59, chars_format::fixed, 111,\r\n        \"0.\"\r\n        \"0000000000000000019740440391270056901548099504899902549377128678416990284483212292343523586168885231018066\"\r\n        \"40625\"},\r\n    {0x1.742a3899f4ebfp-58, chars_format::fixed, 110,\r\n        \"0.\"\r\n        \"0000000000000000050437752684379660394102518960175013841542044125962947903607513921997451689094305038452148\"\r\n        \"4375\"},\r\n    {0x1.a24fa5ce867fbp-57, chars_format::fixed, 109,\r\n        \"0.\"\r\n        \"0000000000000000113383457288879493881896180602251467830667152418533914770559789531034766696393489837646484\"\r\n        \"375\"},\r\n    {0x1.cd8bd478c4055p-56, chars_format::fixed, 108,\r\n        \"0.\"\r\n        \"0000000000000000250204702232128672419987362874135136401925963981667314084411657404416473582386970520019531\"\r\n        \"25\"},\r\n    {0x1.5586beb808bb7p-55, chars_format::fixed, 107,\r\n        \"0.\"\r\n        \"0000000000000000370283608071470711740923263273835399293643331770486265552833060610282700508832931518554687\"\r\n        \"5\"},\r\n    {0x1.1782f85ff73e4p-54, chars_format::fixed, 104,\r\n        \"0.\"\r\n        \"00000000000000006060941731133067066111993215447123683291462078494282739171694629476405680179595947265625\"},\r\n    {0x1.5241f4d37d585p-53, chars_format::fixed, 105,\r\n        \"0.\"\r\n        \"00000000000000014669586812661773367631643496494282542762537977724252025168993895931635051965713500976562\"\r\n        \"5\"},\r\n    {0x1.a9145af5d709dp-52, chars_format::fixed, 104,\r\n        \"0.\"\r\n        \"00000000000000036869770513056370258874447534099887412925645774515459596187838542391546070575714111328125\"},\r\n    {0x1.14e3531aa8734p-51, chars_format::fixed, 101,\r\n        \"0.00000000000000048032409094989299117442762699440752432309049459180361196786179789341986179351806640625\"},\r\n    {0x1.8d306ae29c760p-50, chars_format::fixed, 97,\r\n        \"0.0000000000000013780266196844444434001720951926995236184146642610670596695854328572750091552734375\"},\r\n    {0x1.34141b1c6e739p-49, chars_format::fixed, 101,\r\n        \"0.00000000000000213772429398483853817359285620068290943482478168313765110042368178255856037139892578125\"},\r\n    {0x1.bfaa985695d46p-48, chars_format::fixed, 99,\r\n        \"0.000000000000006212619127432842815535315316465814989023408974888607048114863573573529720306396484375\"},\r\n    {0x1.a1bbef9dd867ep-47, chars_format::fixed, 98,\r\n        \"0.00000000000001159445109391313455470569692597092094861802556715613121696151210926473140716552734375\"},\r\n    {0x1.d4c0489e284adp-46, chars_format::fixed, 98,\r\n        \"0.00000000000002602091364932322080817661116014788518557084191773487447107982006855309009552001953125\"},\r\n    {0x1.5256e07f25dcdp-45, chars_format::fixed, 97,\r\n        \"0.0000000000000375632150992183886471662319623894115764293523407335584352040314115583896636962890625\"},\r\n    {0x1.71a8a2ed2b45fp-44, chars_format::fixed, 96,\r\n        \"0.000000000000082080728005574479728778617018482662413977023196931526172193116508424282073974609375\"},\r\n    {0x1.b0e4af6682317p-43, chars_format::fixed, 95,\r\n        \"0.00000000000019224324416725509019750615142710900007101508524254285248389351181685924530029296875\"},\r\n    {0x1.7b8de5bf78fd4p-42, chars_format::fixed, 92,\r\n        \"0.00000000000033711192675176746235914191322624765202904673078165842525777406990528106689453125\"},\r\n    {0x1.ae59a0cb674f4p-41, chars_format::fixed, 91,\r\n        \"0.0000000000007644553608444342585595182827876899211462513594739220934570766985416412353515625\"},\r\n    {0x1.5dd5fa7afbee1p-40, chars_format::fixed, 92,\r\n        \"0.00000000000124286662127449181887050977687219485896298609706178694978007115423679351806640625\"},\r\n    {0x1.384536c7c656fp-39, chars_format::fixed, 91,\r\n        \"0.0000000000022188144095886259914737759791032178121987505914347593716229312121868133544921875\"},\r\n    {0x1.a1194c27935c7p-38, chars_format::fixed, 90,\r\n        \"0.000000000005927330708414900645292509942453463927213019868389665134600363671779632568359375\"},\r\n    {0x1.a02b0d1c1f1a8p-37, chars_format::fixed, 86,\r\n        \"0.00000000001182821076754492303774112659466477733005707051461286027915775775909423828125\"},\r\n    {0x1.651f948c8f895p-36, chars_format::fixed, 88,\r\n        \"0.0000000000203001127618364981565507635049392808242185726186335159582085907459259033203125\"},\r\n    {0x1.0658d9ac47254p-35, chars_format::fixed, 85,\r\n        \"0.0000000000298254089359250336024448739896349803990549531818032846786081790924072265625\"},\r\n    {0x1.463f50c6fb1bfp-34, chars_format::fixed, 86,\r\n        \"0.00000000007418005368738489917011425132798547142642942020529517321847379207611083984375\"},\r\n    {0x1.fff128a1f6814p-33, chars_format::fixed, 83,\r\n        \"0.00000000023280428024704824536772626046771984820171752517126151360571384429931640625\"},\r\n    {0x1.514274eb0bbe6p-32, chars_format::fixed, 83,\r\n        \"0.00000000030673581616552569753443045750033145446789006882681860588490962982177734375\"},\r\n    {0x1.c66e7acce03a0p-31, chars_format::fixed, 78,\r\n        \"0.000000000826606194612068018706590240458897955733164053526706993579864501953125\"},\r\n    {0x1.3f09f0d9f8a0fp-30, chars_format::fixed, 82,\r\n        \"0.0000000011606565070959597058008216612762751596132915210546343587338924407958984375\"},\r\n    {0x1.364bffd2bc2acp-29, chars_format::fixed, 79,\r\n        \"0.0000000022577068906830200447981735699908012460213058147928677499294281005859375\"},\r\n    {0x1.21d26e23a4c2cp-28, chars_format::fixed, 78,\r\n        \"0.000000004217465074781223546467325241464407792335578051279298961162567138671875\"},\r\n    {0x1.ff8816230e3aep-27, chars_format::fixed, 78,\r\n        \"0.000000014887528604095426785363609988553645901987465549609623849391937255859375\"},\r\n    {0x1.81d69783dda8fp-26, chars_format::fixed, 78,\r\n        \"0.000000022458741990672780846062688334639767528955189845873974263668060302734375\"},\r\n    {0x1.4c5ef6a88833bp-25, chars_format::fixed, 77,\r\n        \"0.00000003869307125073411435703155092889760080510086481808684766292572021484375\"},\r\n    {0x1.a7cdc3dfbe9a7p-24, chars_format::fixed, 76,\r\n        \"0.0000000986745045636969746077316024100711810973507454036734998226165771484375\"},\r\n    {0x1.1241321139c78p-23, chars_format::fixed, 72,\r\n        \"0.000000127709782783028146746994412052966794135500094853341579437255859375\"},\r\n    {0x1.a5b4169e66c20p-22, chars_format::fixed, 69,\r\n        \"0.000000392741961530240641102713905485899203995359130203723907470703125\"},\r\n    {0x1.79889fa31ee9cp-21, chars_format::fixed, 71,\r\n        \"0.00000070321128865744089630400275037214186113487812690436840057373046875\"},\r\n    {0x1.6659647864b09p-20, chars_format::fixed, 72,\r\n        \"0.000001334954758379262946808873659121363886015387834049761295318603515625\"},\r\n    {0x1.d26dfc62429ebp-19, chars_format::fixed, 71,\r\n        \"0.00000347517156840570335023048696709846439034663490019738674163818359375\"},\r\n    {0x1.793d2e00a8300p-18, chars_format::fixed, 62,\r\n        \"0.00000562129889716887591599725482183202984742820262908935546875\"},\r\n    {0x1.39585d365fddfp-17, chars_format::fixed, 69,\r\n        \"0.000009338413843761515393811049878802776902375626377761363983154296875\"},\r\n    {0x1.db9dd5363f2bbp-16, chars_format::fixed, 68,\r\n        \"0.00002834895459445888963169284113785550971442717127501964569091796875\"},\r\n    {0x1.996aa70581c70p-15, chars_format::fixed, 63,\r\n        \"0.000048806263333083725435013189297706048819236457347869873046875\"},\r\n    {0x1.24d414212635cp-14, chars_format::fixed, 64,\r\n        \"0.0000698157387141301578013796724775374968885444104671478271484375\"},\r\n    {0x1.49743faae0bcep-13, chars_format::fixed, 64,\r\n        \"0.0001570959551281101199658729594688111319555900990962982177734375\"},\r\n    {0x1.fd541909e34d0p-12, chars_format::fixed, 60, \"0.000485733515795794441871624513851202209480106830596923828125\"},\r\n    {0x1.fc05fd5826c21p-11, chars_format::fixed, 63,\r\n        \"0.000968977731662493927018708905762878202949650585651397705078125\"},\r\n    {0x1.b8d7be1e07ac5p-10, chars_format::fixed, 62,\r\n        \"0.00168168161281527614621389421500907701556570827960968017578125\"},\r\n    {0x1.58ae5b82bc128p-9, chars_format::fixed, 58, \"0.0026297079760909843060279200699369539506733417510986328125\"},\r\n    {0x1.da353b89e30a0p-8, chars_format::fixed, 55, \"0.0072358389242134502072900659186416305601596832275390625\"},\r\n    {0x1.523aa52ed6443p-7, chars_format::fixed, 59, \"0.01032193246435231769042584204498780309222638607025146484375\"},\r\n    {0x1.b12c63dc720bbp-6, chars_format::fixed, 58, \"0.0264388060766413794666629399898738483898341655731201171875\"},\r\n    {0x1.8284dd65c8bc7p-5, chars_format::fixed, 57, \"0.047182495515037774225231004265879164449870586395263671875\"},\r\n    {0x1.e78254ba42944p-4, chars_format::fixed, 54, \"0.119020777670958699534509150907979346811771392822265625\"},\r\n    {0x1.a2ea8656520bap-3, chars_format::fixed, 54, \"0.204548882970135015302304282158729620277881622314453125\"},\r\n    {0x1.c9baa87f5bfbbp-2, chars_format::fixed, 54, \"0.447001106999774300287953110455418936908245086669921875\"},\r\n    {0x1.71b66707cac81p-1, chars_format::fixed, 53, \"0.72209474535101503267497946580988354980945587158203125\"},\r\n    {0x1.61447ddf5fb3ep+0, chars_format::fixed, 51, \"1.379951350245121499682454668800346553325653076171875\"},\r\n    {0x1.b56d58bd7ad8fp+1, chars_format::fixed, 51, \"3.417399494666546910792703783954493701457977294921875\"},\r\n    {0x1.5201909da2346p+2, chars_format::fixed, 49, \"5.2813455142393816998946931562386453151702880859375\"},\r\n    {0x1.b29512bde933ep+3, chars_format::fixed, 48, \"13.580697413368053361182319349609315395355224609375\"},\r\n    {0x1.28ba36cdc60a7p+4, chars_format::fixed, 48, \"18.545462421229469640593379153870046138763427734375\"},\r\n    {0x1.4a0f954ec75bap+5, chars_format::fixed, 46, \"41.2576090006436544399548438377678394317626953125\"},\r\n    {0x1.df376fa0e3183p+6, chars_format::fixed, 46, \"119.8041367663009140187568846158683300018310546875\"},\r\n    {0x1.d777fba5be5b1p+7, chars_format::fixed, 45, \"235.734341792570859297484275884926319122314453125\"},\r\n    {0x1.c36ecdbaad102p+8, chars_format::fixed, 43, \"451.4328266785161076768417842686176300048828125\"},\r\n    {0x1.92271b9835605p+9, chars_format::fixed, 43, \"804.3055296192766263629891909658908843994140625\"},\r\n    {0x1.3825bbeddf401p+10, chars_format::fixed, 42, \"1248.589595287339989226893521845340728759765625\"},\r\n    {0x1.bb88c3b81cd97p+11, chars_format::fixed, 41, \"3548.27389150271073958720080554485321044921875\"},\r\n    {0x1.0d8d78fa727c1p+12, chars_format::fixed, 40, \"4312.8420357200675425701774656772613525390625\"},\r\n    {0x1.f22ae1035f4c6p+13, chars_format::fixed, 38, \"15941.35986971332386019639670848846435546875\"},\r\n    {0x1.86358ae5236dep+14, chars_format::fixed, 37, \"24973.3856397186100366525352001190185546875\"},\r\n    {0x1.60fac84cf570cp+15, chars_format::fixed, 35, \"45181.39121214867918752133846282958984375\"},\r\n    {0x1.27022f6d4c231p+16, chars_format::fixed, 36, \"75522.185261496124439872801303863525390625\"},\r\n    {0x1.4e3d42df12170p+17, chars_format::fixed, 31, \"171130.5224325763992965221405029296875\"},\r\n    {0x1.198a850ca77d0p+18, chars_format::fixed, 30, \"288298.078897354193031787872314453125\"},\r\n    {0x1.b9ed4a147a3d3p+19, chars_format::fixed, 33, \"905066.314999694353900849819183349609375\"},\r\n    {0x1.f24810bc3163fp+20, chars_format::fixed, 32, \"2040961.04594553983770310878753662109375\"},\r\n    {0x1.48f2de574af19p+21, chars_format::fixed, 31, \"2694747.7926234123297035694122314453125\"},\r\n    {0x1.7b69f67382652p+22, chars_format::fixed, 29, \"6216317.61280210502445697784423828125\"},\r\n    {0x1.80957cacc5b6dp+23, chars_format::fixed, 29, \"12602046.33744593895971775054931640625\"},\r\n    {0x1.581bf08ec083bp+24, chars_format::fixed, 28, \"22551536.5576250366866588592529296875\"},\r\n    {0x1.10483fa5a32e9p+25, chars_format::fixed, 27, \"35688575.294042415916919708251953125\"},\r\n    {0x1.0ed9715f279f7p+26, chars_format::fixed, 26, \"71001541.48679338395595550537109375\"},\r\n    {0x1.b72203719cba3p+27, chars_format::fixed, 25, \"230232091.5503817498683929443359375\"},\r\n    {0x1.fd9abcf52a4a5p+28, chars_format::fixed, 24, \"534358991.322824776172637939453125\"},\r\n    {0x1.2fcaa4b911fc2p+29, chars_format::fixed, 22, \"637097111.1337816715240478515625\"},\r\n    {0x1.15bbc0a9a86a6p+30, chars_format::fixed, 21, \"1164898346.414468288421630859375\"},\r\n    {0x1.b00ca87636445p+31, chars_format::fixed, 21, \"3624293435.105989933013916015625\"},\r\n    {0x1.d840bff2e1059p+32, chars_format::fixed, 20, \"7923089394.87899112701416015625\"},\r\n    {0x1.6573fbd897a95p+33, chars_format::fixed, 19, \"11994134449.1848545074462890625\"},\r\n    {0x1.884fb41a62589p+34, chars_format::fixed, 18, \"26327568489.536655426025390625\"},\r\n    {0x1.ac014e40dd0dap+35, chars_format::fixed, 16, \"57445872134.9079132080078125\"},\r\n    {0x1.43fc6c60c1eefp+36, chars_format::fixed, 16, \"86969337356.1208343505859375\"},\r\n    {0x1.2dbd32a11ddb3p+37, chars_format::fixed, 15, \"161994920995.732025146484375\"},\r\n    {0x1.b0bd32c9becf1p+38, chars_format::fixed, 14, \"464650023535.70220947265625\"},\r\n    {0x1.a4dd93186c42dp+39, chars_format::fixed, 13, \"903801834550.1304931640625\"},\r\n    {0x1.e32a7f9fa538ap+40, chars_format::fixed, 11, \"2075182210981.22119140625\"},\r\n    {0x1.2084411c53fa7p+41, chars_format::fixed, 11, \"2478338881703.95654296875\"},\r\n    {0x1.0d5a138c14d99p+42, chars_format::fixed, 10, \"4627429732435.3994140625\"},\r\n    {0x1.0ead5f7d79f3bp+43, chars_format::fixed, 9, \"9300399090639.615234375\"},\r\n    {0x1.d9bdd70990201p+44, chars_format::fixed, 8, \"32555272280322.00390625\"},\r\n    {0x1.b1ba144c3c6d7p+45, chars_format::fixed, 7, \"59610967410573.6796875\"},\r\n    {0x1.56ef390e1980dp+46, chars_format::fixed, 6, \"94265107777120.203125\"},\r\n    {0x1.d08de26a3153dp+47, chars_format::fixed, 5, \"255391392143529.90625\"},\r\n    {0x1.96bf8d1fe67eap+48, chars_format::fixed, 3, \"447224427308670.625\"},\r\n    {0x1.095e52abc0566p+49, chars_format::fixed, 2, \"583551390548140.75\"},\r\n    {0x1.d639785501ca7p+50, chars_format::fixed, 2, \"2068069188110121.75\"},\r\n    {0x1.7a69b71f7291ap+51, chars_format::fixed, 0, \"3328555513255053\"},\r\n    {0x1.6f06d69bea925p+52, chars_format::fixed, 0, \"6456802203838757\"},\r\n    {0x1.e477d245cfe2cp+53, chars_format::fixed, 0, \"17045704215755864\"},\r\n    {0x1.94b582e6fb874p+54, chars_format::fixed, 0, \"28478866104181200\"},\r\n    {0x1.651121f05f90dp+55, chars_format::fixed, 0, \"50252702075045992\"},\r\n    {0x1.7b487047230f8p+56, chars_format::fixed, 0, \"106758663240355712\"},\r\n    {0x1.7784c1fbc471cp+57, chars_format::fixed, 0, \"211398169908011904\"},\r\n    {0x1.7ac4b78ae30e4p+58, chars_format::fixed, 0, \"426455335139293440\"},\r\n    {0x1.312f35afa81abp+59, chars_format::fixed, 0, \"687214204188415360\"},\r\n    {0x1.06017fddf665bp+60, chars_format::fixed, 0, \"1179969481513261824\"},\r\n    {0x1.5637f72135e49p+61, chars_format::fixed, 0, \"3082431250837574144\"},\r\n    {0x1.027e9b70ce1ccp+62, chars_format::fixed, 0, \"4656624004411895808\"},\r\n    {0x1.60c83f40c3bc1p+63, chars_format::fixed, 0, \"12710318822043551744\"},\r\n    {0x1.2689a2af0f3ddp+64, chars_format::fixed, 0, \"21223673591718858752\"},\r\n    {0x1.6bd7cbc72e9cep+65, chars_format::fixed, 0, \"52435295624203190272\"},\r\n    {0x1.b4618e9b7fb90p+66, chars_format::fixed, 0, \"125778283487165677568\"},\r\n    {0x1.b700b394dae46p+67, chars_format::fixed, 0, \"253067849876474363904\"},\r\n    {0x1.69b9336bb3625p+68, chars_format::fixed, 0, \"417038733696760610816\"},\r\n    {0x1.2e73980401159p+69, chars_format::fixed, 0, \"697405765271726194688\"},\r\n    {0x1.9cd16da53fb63p+70, chars_format::fixed, 0, \"1903787364496945446912\"},\r\n    {0x1.a5f63f3a815d1p+71, chars_format::fixed, 0, \"3891911610207935397888\"},\r\n    {0x1.b0e3c4047b75cp+72, chars_format::fixed, 0, \"7985405687712874233856\"},\r\n    {0x1.4d847c6eb42c0p+73, chars_format::fixed, 0, \"12304624807151021326336\"},\r\n    {0x1.85fc1437b1734p+74, chars_format::fixed, 0, \"28775790596421559779328\"},\r\n    {0x1.8a7019581e7fap+75, chars_format::fixed, 0, \"58208757994689939898368\"},\r\n    {0x1.c67cb0e7b2a1cp+76, chars_format::fixed, 0, \"134140907927602311725056\"},\r\n    {0x1.e9cf376a61382p+77, chars_format::fixed, 0, \"289132459907178460872704\"},\r\n    {0x1.f3020a5bb1e68p+78, chars_format::fixed, 0, \"589124628706466797191168\"},\r\n    {0x1.c5c96a4dd9bf3p+79, chars_format::fixed, 0, \"1071473736158360648024064\"},\r\n    {0x1.9c2cc74cde703p+80, chars_format::fixed, 0, \"1946441008779422248992768\"},\r\n    {0x1.aba488754df1ap+81, chars_format::fixed, 0, \"4038971174128976945741824\"},\r\n    {0x1.fad8c14ba9d89p+82, chars_format::fixed, 0, \"9574063461859927634477056\"},\r\n    {0x1.f2fda18bc958dp+83, chars_format::fixed, 0, \"18851337402710215888994304\"},\r\n    {0x1.9d8f6c51ed693p+84, chars_format::fixed, 0, \"31247728753733906905169920\"},\r\n    {0x1.f8236511754b2p+85, chars_format::fixed, 0, \"76183220036477407253757952\"},\r\n    {0x1.a2d213294f709p+86, chars_format::fixed, 0, \"126580760756294165874081792\"},\r\n    {0x1.50d2867c287f9p+87, chars_format::fixed, 0, \"203596626581082410749788160\"},\r\n    {0x1.3bf963799b446p+88, chars_format::fixed, 0, \"381989337423178708023246848\"},\r\n    {0x1.a12dc41e72c86p+89, chars_format::fixed, 0, \"1008676382053808460168953856\"},\r\n    {0x1.832bbfda4182fp+90, chars_format::fixed, 0, \"1872243572018953219752329216\"},\r\n    {0x1.b22ef35aa515ep+91, chars_format::fixed, 0, \"4199164189291374906487865344\"},\r\n    {0x1.24632dbcf4379p+92, chars_format::fixed, 0, \"5655595157253244734125637632\"},\r\n    {0x1.5016423c09309p+93, chars_format::fixed, 0, \"13001734056457270778428129280\"},\r\n    {0x1.bbf972700d65cp+94, chars_format::fixed, 0, \"34350855574179920076494340096\"},\r\n    {0x1.6e1f3e3e4245fp+95, chars_format::fixed, 0, \"56654642115107953004184076288\"},\r\n    {0x1.47d35248fe09dp+96, chars_format::fixed, 0, \"101457070140041083705704316928\"},\r\n    {0x1.d31a67ab2db51p+97, chars_format::fixed, 0, \"289122842438625311850965762048\"},\r\n    {0x1.ab1253de2af64p+98, chars_format::fixed, 0, \"528689023652633609509229559808\"},\r\n    {0x1.9cfdf3dc71391p+99, chars_format::fixed, 0, \"1022518671042034182622745198592\"},\r\n    {0x1.96152f2254ee0p+100, chars_format::fixed, 0, \"2010824384227389239008365117440\"},\r\n    {0x1.b4de90e5f0095p+101, chars_format::fixed, 0, \"4326544962445928561728343244800\"},\r\n    {0x1.be778d0492e6ap+102, chars_format::fixed, 0, \"8843189919417627285369414221824\"},\r\n    {0x1.ebc33e9f0f228p+103, chars_format::fixed, 0, \"19480726537977613039106892234752\"},\r\n    {0x1.7af455437cc9bp+104, chars_format::fixed, 0, \"30023862850183478784012048138240\"},\r\n    {0x1.642a6e844551ep+105, chars_format::fixed, 0, \"56436715663923718161576574844928\"},\r\n    {0x1.41b8b3a301a15p+106, chars_format::fixed, 0, \"101957610305533992485037451247616\"},\r\n    {0x1.0155b96fbcde0p+107, chars_format::fixed, 0, \"163105345367552336552353253556224\"},\r\n    {0x1.17b500de21540p+108, chars_format::fixed, 0, \"354570802835801091766892577685504\"},\r\n    {0x1.fa3527f025531p+109, chars_format::fixed, 0, \"1283388839036855097115531068571648\"},\r\n    {0x1.12991a738b877p+110, chars_format::fixed, 0, \"1392377581640218018121716183597056\"},\r\n    {0x1.4bbcfb93f0ee4p+111, chars_format::fixed, 0, \"3364225166474354069710570596073472\"},\r\n    {0x1.15926f3d7b071p+112, chars_format::fixed, 0, \"5629829199100141824040041065742336\"},\r\n    {0x1.86dacf9db9927p+113, chars_format::fixed, 0, \"15854951477853973766554010496532480\"},\r\n    {0x1.6aa8e880f9271p+114, chars_format::fixed, 0, \"29422458257062697580352079193440256\"},\r\n    {0x1.44db602f65a69p+115, chars_format::fixed, 0, \"52711051576274024231085405965910016\"},\r\n    {0x1.4aa98d059f6c7p+116, chars_format::fixed, 0, \"107306053965661318564328070210125824\"},\r\n    {0x1.ad41a77876ac0p+117, chars_format::fixed, 0, \"278603372165060620709063210871816192\"},\r\n    {0x1.66608302c1ae0p+118, chars_format::fixed, 0, \"465199941604955653649793565669195776\"},\r\n    {0x1.724a6060561d6p+119, chars_format::fixed, 0, \"961329185843412549197741860528848896\"},\r\n    {0x1.d6cd57f7afd91p+120, chars_format::fixed, 0, \"2444544386985640811823093072529457152\"},\r\n    {0x1.ddc593d2d0608p+121, chars_format::fixed, 0, \"4961465895993372192136189659616116736\"},\r\n    {0x1.cb5644ce1a91fp+122, chars_format::fixed, 0, \"9540055986377936639970287777627504640\"},\r\n    {0x1.1bc54417de33cp+123, chars_format::fixed, 0, \"11787368324472861665867817538046394368\"},\r\n    {0x1.0b7025db14e7ap+124, chars_format::fixed, 0, \"22217886245582567633425166223452143616\"},\r\n    {0x1.c25ad8d3be06dp+125, chars_format::fixed, 0, \"74828037824613418029633676794849656832\"},\r\n    {0x1.6fa2ef34cd8cep+126, chars_format::fixed, 0, \"122168169555880306340177489939782434816\"},\r\n    {0x1.2154fd4e3bc1cp+127, chars_format::fixed, 0, \"192294090682938928866121043260519481344\"},\r\n    {0x1.2b3cd0ab51216p+128, chars_format::fixed, 0, \"397754940865523918837358639143272316928\"},\r\n    {0x1.088b103a41b0bp+129, chars_format::fixed, 0, \"703276498569342686920339511489517846528\"},\r\n    {0x1.e53444dfa15a7p+130, chars_format::fixed, 0, \"2579787897255990868798456303636608712704\"},\r\n    {0x1.19ed8692b24fbp+131, chars_format::fixed, 0, \"2997970965091339190918492577226091921408\"},\r\n    {0x1.d6393885ae144p+132, chars_format::fixed, 0, \"10000548245536083788593238972941513785344\"},\r\n    {0x1.6acc29897fd95p+133, chars_format::fixed, 0, \"15431699376188799230066746785793442840576\"},\r\n    {0x1.f2f9916765d68p+134, chars_format::fixed, 0, \"42448087869444726132947292415438599749632\"},\r\n    {0x1.a8bb1d24ff93dp+135, chars_format::fixed, 0, \"72264220268357129106158415886080664403968\"},\r\n    {0x1.c5c3e8df3f2cfp+136, chars_format::fixed, 0, \"154408320815216985959484763121150171545600\"},\r\n    {0x1.1772e9d5da5a7p+137, chars_format::fixed, 0, \"190183053010164648774242281749579802083328\"},\r\n    {0x1.14f6d2645603fp+138, chars_format::fixed, 0, \"376984063098152793892190666264816558014464\"},\r\n    {0x1.24a5b6eb957c8p+139, chars_format::fixed, 0, \"796661788291652637963628795803622629703680\"},\r\n    {0x1.2ead0eb8af7cbp+140, chars_format::fixed, 0, \"1647924923062673765177664088659074522021888\"},\r\n    {0x1.f516ab8dbd662p+141, chars_format::fixed, 0, \"5456371187228343385170833127692803019636736\"},\r\n    {0x1.855d7376918a9p+142, chars_format::fixed, 0, \"8479619741110213809967927453284253992747008\"},\r\n    {0x1.f44b558dbdfb5p+143, chars_format::fixed, 0, \"21790888931872989461006813529845663969312768\"},\r\n    {0x1.196a6ab9ee449p+144, chars_format::fixed, 0, \"24514764141293366381415554359835359275122688\"},\r\n    {0x1.c970123b86b86p+145, chars_format::fixed, 0, \"79696901062182934373616907409137788885401600\"},\r\n    {0x1.23fe1017a3e0ap+146, chars_format::fixed, 0, \"101744513270938959360968970914297622533505024\"},\r\n    {0x1.547b58dbe0a82p+147, chars_format::fixed, 0, \"237281200493303842948982975659978497995046912\"},\r\n    {0x1.6b72d270d534dp+148, chars_format::fixed, 0, \"506573307308778511819262316883115987825590272\"},\r\n    {0x1.9bfa29a521e6cp+149, chars_format::fixed, 0, \"1148424814894339399771081143389126450042896384\"},\r\n    {0x1.088e70fa79bf2p+150, chars_format::fixed, 0, \"1474951280394658237786084602544572869491294208\"},\r\n    {0x1.1d97a9d8999d2p+151, chars_format::fixed, 0, \"3184462066193894206844138084970587550398808064\"},\r\n    {0x1.1b7ddc6783fe8p+152, chars_format::fixed, 0, \"6322074926642195313905924879563454681421185024\"},\r\n    {0x1.90f9b356e1fd1p+153, chars_format::fixed, 0, \"17884100129279887107935363982167269062471581696\"},\r\n    {0x1.04a659aa20643p+154, chars_format::fixed, 0, \"23250739609400940032347413152147324745086402560\"},\r\n    {0x1.b45db51612c32p+155, chars_format::fixed, 0, \"77850303756798823507242277549769146173862445056\"},\r\n    {0x1.94f1118511db0p+156, chars_format::fixed, 0, \"144488017324739167332291972816201226607422078976\"},\r\n    {0x1.74288ae36661ep+157, chars_format::fixed, 0, \"265581086928756856691568738355781584549167759360\"},\r\n    {0x1.3253541731259p+158, chars_format::fixed, 0, \"437202365761853212655650514880767316833467367424\"},\r\n    {0x1.9d71f6b97eb99p+159, chars_format::fixed, 0, \"1180177332650351500186142018418327053943445651456\"},\r\n    {0x1.9c2824d021211p+160, chars_format::fixed, 0, \"2352999434252425166009583916770268278726766624768\"},\r\n    {0x1.2c37fa039529bp+161, chars_format::fixed, 0, \"3427891103047345015228894619797641792100916789248\"},\r\n    {0x1.97f764d76e448p+162, chars_format::fixed, 0, \"9316305249300850264705734277618344776195427532800\"},\r\n    {0x1.a28e124e01121p+163, chars_format::fixed, 0, \"19116211540697205399927873627877011998254938718208\"},\r\n    {0x1.500cfed695739p+164, chars_format::fixed, 0, \"30696171319662410271698897460360354956718064533504\"},\r\n    {0x1.2cd97b4ce81a2p+165, chars_format::fixed, 0, \"54961511485964129240667100065476685812465949212672\"},\r\n    {0x1.d24224f1cf2bcp+166, chars_format::fixed, 0, \"170359345069614948406404727167574558656079671066624\"},\r\n    {0x1.83b3da401d150p+167, chars_format::fixed, 0, \"283313955071286289178391550929804608096590893154304\"},\r\n    {0x1.a3b0d2f93d673p+168, chars_format::fixed, 0, \"613378673285658591018762418018704374742768855023616\"},\r\n    {0x1.6b5cc29017ae4p+169, chars_format::fixed, 0, \"1062109320797658708151958249612931353686624780156928\"},\r\n    {0x1.e6bf9a05045a3p+170, chars_format::fixed, 0, \"2845534590927396736753751979474589830905163889508352\"},\r\n    {0x1.cc9ed46d0d98ep+171, chars_format::fixed, 0, \"5385580087774829124578596551004441252780605203021824\"},\r\n    {0x1.bc208d2b82a15p+172, chars_format::fixed, 0, \"10385481005999034803544914290611356999601747138707456\"},\r\n    {0x1.6c981eeb98863p+173, chars_format::fixed, 0, \"17051361668200266280635006715246243029863394338406400\"},\r\n    {0x1.af5d7ade9c17ap+174, chars_format::fixed, 0, \"40348216442512827178202027976145404001660863678251008\"},\r\n    {0x1.ebfb63d8a468bp+175, chars_format::fixed, 0, \"92036158369142271242411353737258443958178349337018368\"},\r\n    {0x1.8165629784911p+176, chars_format::fixed, 0, \"144193775900760462481135039693825192887594892339970048\"},\r\n    {0x1.f561a2a30dd53p+177, chars_format::fixed, 0, \"375178096298129453493805795896698130008167991753048064\"},\r\n    {0x1.ce7c7938e0eb9p+178, chars_format::fixed, 0, \"692146559638991570078851625625319303554674020637999104\"},\r\n    {0x1.77bc8cddcf12ap+179, chars_format::fixed, 0, \"1124637789574368600447483337148668908930534274783772672\"},\r\n    {0x1.3fc175c6f2438p+180, chars_format::fixed, 0, \"1914156990649081570063038235013271375259033985125187584\"},\r\n    {0x1.914ec58ebe041p+181, chars_format::fixed, 0, \"4804705186047787763539909785825820848780520789991489536\"},\r\n    {0x1.5114314b07626p+182, chars_format::fixed, 0, \"8071435564947532553915773674998525033942233843077480448\"},\r\n    {0x1.e2f0276441399p+183, chars_format::fixed, 0, \"23128140200050004179900419204722717138007627859971014656\"},\r\n    {0x1.cf8d0a2eae505p+184, chars_format::fixed, 0, \"44399358958425029747414170378892766455751677599478185984\"},\r\n    {0x1.4dda59a8f20a2p+185, chars_format::fixed, 0, \"63953515931602618386692877635154528630077627837316071424\"},\r\n    {0x1.bab65f6c0e97cp+186, chars_format::fixed, 0, \"169613692241034722191343016069607921350219320331459362816\"},\r\n    {0x1.0db1e999e5dcep+187, chars_format::fixed, 0, \"206653170011853535337803469369851216808403208737925365760\"},\r\n    {0x1.16729f78118dbp+188, chars_format::fixed, 0, \"426719928808949879800861601633810112450796943718953779200\"},\r\n    {0x1.84b2774cd6d15p+189, chars_format::fixed, 0, \"1191353245759245872712330749375395405217002847792663625728\"},\r\n    {0x1.5e6b2eec1979ep+190, chars_format::fixed, 0, \"2148060287120407132486133792062303242882862510466574319616\"},\r\n    {0x1.57ac5f28c5822p+191, chars_format::fixed, 0, \"4213422729321882403507151670457754635672165551067199700992\"},\r\n    {0x1.2c1e6e57e9676p+192, chars_format::fixed, 0, \"7358893309664639936881070842796439426339053634941326721024\"},\r\n    {0x1.f14d05585f439p+193, chars_format::fixed, 0, \"24387563351268131955594715375272838644628307055389846798336\"},\r\n    {0x1.18fdf7f764a16p+194, chars_format::fixed, 0, \"27559621536224231764973310109769900471295096010340351082496\"},\r\n    {0x1.8c82785d38820p+195, chars_format::fixed, 0, \"77779106454146886485489687505009291495088393514544036577280\"},\r\n    {0x1.e664096512a4fp+196, chars_format::fixed, 0, \"190820271006743062589068419007889919427368854321224868691968\"},\r\n    {0x1.7ad7e8f87a31fp+197, chars_format::fixed, 0, \"297254819348561348142059994275052781258332713659043726491648\"},\r\n    {0x1.8fbcbd9143824p+198, chars_format::fixed, 0, \"627297873989847920060186967507561121071724081221944431607808\"},\r\n    {0x1.fffab418f559fp+199, chars_format::fixed, 0, \"1606873109429469790133884014121163665471467983941023660244992\"},\r\n    {0x1.da1c6d063ff81p+200, chars_format::fixed, 0, \"2976043223039824053749757547207391812994613888441872405233664\"},\r\n    {0x1.15fe8ce1e9504p+201, chars_format::fixed, 0, \"3489997472879308917395719419357749318529849683153472890863616\"},\r\n    {0x1.a8f8f1d983703p+202, chars_format::fixed, 0, \"10670380970822515728824154611513147539078615867965386421960704\"},\r\n    {0x1.a7c5f2cb7fa9cp+203, chars_format::fixed, 0, \"21280541721170621914318415811403250028099879746592336410312704\"},\r\n    {0x1.9a069737b82f9p+204, chars_format::fixed, 0, \"41180373037668160785451413693672802945556196669733887910346752\"},\r\n    {0x1.d7fb39182d06bp+205, chars_format::fixed, 0, \"94805596416636166286963836377361743535131113441946788094279680\"},\r\n    {0x1.8d79cca5204b4p+206, chars_format::fixed, 0, \"159679737690547294653629880448829857591918862991885354225631232\"},\r\n    {0x1.640c53e94baf0p+207, chars_format::fixed, 0, \"286073663238193178122650589057504705307874404845642118712000512\"},\r\n    {0x1.804d768153946p+208, chars_format::fixed, 0, \"617550451567674330351768298244433962928282156182053738323640320\"},\r\n    {0x1.d56e2fb92f94bp+209, chars_format::fixed, 0,\r\n        \"1508691188244574982497059261858774337284894599380994275393142784\"},\r\n    {0x1.9de8dda906a1ep+210, chars_format::fixed, 0,\r\n        \"2660508539901083172029910702401831570415871079047501730937831424\"},\r\n    {0x1.7625e5dbb3e9cp+211, chars_format::fixed, 0,\r\n        \"4809861739392636763970911315108253399659550567331225058938978304\"},\r\n    {0x1.c66583b372649p+212, chars_format::fixed, 0,\r\n        \"11682993418673641507770337381177220245747542216734811616358432768\"},\r\n    {0x1.c7dbe2df944fcp+213, chars_format::fixed, 0,\r\n        \"23441185866765201891906590922363241098417108629756551288590434304\"},\r\n    {0x1.52e75005b7ac3p+214, chars_format::fixed, 0,\r\n        \"34854210022549138065076113679839139392004906864670443177957654528\"},\r\n    {0x1.61996d6b5a737p+215, chars_format::fixed, 0,\r\n        \"72731162770376529778347980921328038690888967732944646841598738432\"},\r\n    {0x1.494416e47342cp+216, chars_format::fixed, 0,\r\n        \"135452165324500505731674715004755427528854893946418837623752622080\"},\r\n    {0x1.d60ab6b85519cp+217, chars_format::fixed, 0,\r\n        \"386728003636036058641366871128252569918895873439564907057088823296\"},\r\n    {0x1.33e03222aff77p+218, chars_format::fixed, 0,\r\n        \"506610974407740673840531052436472518619916156367111801266415599616\"},\r\n    {0x1.c180013aacf42p+219, chars_format::fixed, 0,\r\n        \"1479308658758350330944201788946768123438076335588933997743174582272\"},\r\n    {0x1.a8c4ee725339fp+220, chars_format::fixed, 0,\r\n        \"2795839034978863819877803502232039113629062617998185283225294733312\"},\r\n    {0x1.e8aaf34741ab6p+221, chars_format::fixed, 0,\r\n        \"6432840401396405792365580284144481229273342573010878029692370157568\"},\r\n    {0x1.227ef7d830535p+222, chars_format::fixed, 0,\r\n        \"7648199062043261318600497597311503711731364104890099198009813237760\"},\r\n    {0x1.50d3b96e4614ap+223, chars_format::fixed, 0,\r\n        \"17736014170885828821631467083617455696667197990697308887351889494016\"},\r\n    {0x1.8199aecb377d9p+224, chars_format::fixed, 0,\r\n        \"40608453724544028931786363107981702003718879833309714118046052777984\"},\r\n    {0x1.19dbb35474ceep+225, chars_format::fixed, 0,\r\n        \"59366267010857000073898171317477288623551476762400866883285525987328\"},\r\n    {0x1.dc33701787db2p+226, chars_format::fixed, 0,\r\n        \"200599244568418166158633240420166985299541370621581756051323713748992\"},\r\n    {0x1.eff20ab8910b4p+227, chars_format::fixed, 0,\r\n        \"417833237036618955782462790270901274407866847161169503610707764051968\"},\r\n    {0x1.bbe88a3d4104ep+228, chars_format::fixed, 0,\r\n        \"747984105847088632825661725590567003356199708795195209233577533243392\"},\r\n    {0x1.46b387e75ac05p+229, chars_format::fixed, 0,\r\n        \"1100981177656366596121887029311165116283765891574561058397569203306496\"},\r\n    {0x1.e666f5cf254cap+230, chars_format::fixed, 0,\r\n        \"3278344263502461615618708692041532796484309585052066932644501920940032\"},\r\n    {0x1.e6e69845380cep+231, chars_format::fixed, 0,\r\n        \"6563409273861357872055846937881366142433814631142651266800757371830272\"},\r\n    {0x1.87fc0b17b39efp+232, chars_format::fixed, 0,\r\n        \"10567882407580982568830708317724752282141329118524865643643232472530944\"},\r\n    {0x1.1d2094524e151p+233, chars_format::fixed, 0,\r\n        \"15374031618797994143345255818223153455446312412350835802141987662987264\"},\r\n    {0x1.ef0acdf882c82p+234, chars_format::fixed, 0,\r\n        \"53385245818425520938354086001407499619172852619721193835236025339740160\"},\r\n    {0x1.fcbcd755571cbp+235, chars_format::fixed, 0,\r\n        \"109724321606021718480487121388084343129412917209137058037575549878009856\"},\r\n    {0x1.5bc325b6842e6p+236, chars_format::fixed, 0,\r\n        \"150010446473379751635360522928886290191929534462594299677079810961571840\"},\r\n    {0x1.4839844f3a28ep+237, chars_format::fixed, 0,\r\n        \"283165431565250843561226845873096957075695083997080472361101646654078976\"},\r\n    {0x1.e268bea09d76dp+238, chars_format::fixed, 0,\r\n        \"832366412253767450473627272269736199394015241611420074982712040652537856\"},\r\n    {0x1.9760fc3633170p+239, chars_format::fixed, 0,\r\n        \"1405812739508858068375342755770185891515789882712544527098421327318482944\"},\r\n    {0x1.f9780dce1dea1p+240, chars_format::fixed, 0,\r\n        \"3488618552580639620123899659132615213727580900417550210713537290046537728\"},\r\n    {0x1.06379cf942b94p+241, chars_format::fixed, 0,\r\n        \"3619513742366401459360774923805574186193834456864238978452991001371869184\"},\r\n    {0x1.54e3dfab69e89p+242, chars_format::fixed, 0,\r\n        \"9410948883835140439259712749284374813211962760503227341524256159409635328\"},\r\n    {0x1.31e863bfd9bd6p+243, chars_format::fixed, 0,\r\n        \"16890382785900103876754997077931661155681683793063575869750399994525908992\"},\r\n    {0x1.97cf871c408f0p+244, chars_format::fixed, 0,\r\n        \"45033691214168135372365182321155169406467422866316271815207540483596222464\"},\r\n    {0x1.1c444bdbdf9c3p+245, chars_format::fixed, 0,\r\n        \"62781991287502835294706934796700503444220891091676239343080273452105465856\"},\r\n    {0x1.05d2dc08efe95p+246, chars_format::fixed, 0,\r\n        \"115650595692360812734551875859766266613142682216011370208563856535394975744\"},\r\n    {0x1.ecc77551d4971p+247, chars_format::fixed, 0,\r\n        \"435332683162743291871502389653473442925183772482197555090046969989126160384\"},\r\n    {0x1.d480cb6589e19p+248, chars_format::fixed, 0,\r\n        \"827773333411108944564788528429675414027959576520140010882381647552484212736\"},\r\n    {0x1.8d8ef73cf87b1p+249, chars_format::fixed, 0,\r\n        \"1404849996452092323181663448719164230590611915347499050189329189348495589376\"},\r\n    {0x1.48a0c3b10a317p+250, chars_format::fixed, 0,\r\n        \"2322541569987461897646236862872835979235153071147854369984513726383982116864\"},\r\n    {0x1.4272a4c4fdd70p+251, chars_format::fixed, 0,\r\n        \"4557727968952480904558449925323762902907761772892808327111565265849267781632\"},\r\n    {0x1.ae03d804b061ep+252, chars_format::fixed, 0,\r\n        \"12156332270976550147325112623712160214870303638258728835579240357786392985600\"},\r\n    {0x1.0b5dd53c3113bp+253, chars_format::fixed, 0,\r\n        \"15116664880436697889619534522569417861107074808654256101389938332337600200704\"},\r\n    {0x1.fdd951416069dp+254, chars_format::fixed, 0,\r\n        \"57652801636485908304981079853657826006611591736383711473146661351961829310464\"},\r\n    {0x1.3f050c163f528p+255, chars_format::fixed, 0,\r\n        \"72148358177064735441715850462253186745656784598757713984413999990820116103168\"},\r\n    {0x1.d281ec8a5d188p+256, chars_format::fixed, 0,\r\n        \"211007343253573153040916841042569198900237589785514419724926914360700078915584\"},\r\n    {0x1.b1ee0f3407c41p+257, chars_format::fixed, 0,\r\n        \"392544155933803743324755229116691986569477877247338320380545265297625347784704\"},\r\n    {0x1.6832d41e7dc1ap+258, chars_format::fixed, 0,\r\n        \"651689727341929711233861882075902356487556403051443857638498564365941253079040\"},\r\n    {0x1.e64f563364bdep+259, chars_format::fixed, 0,\r\n        \"1759713762122699202687616247528935298815073962848552505418712077302891964006400\"},\r\n    {0x1.daa06c44fb425p+260, chars_format::fixed, 0,\r\n        \"3434875728114804814685899568021643975684275456343249710170796956248388352868352\"},\r\n    {0x1.36affe847782ap+261, chars_format::fixed, 0,\r\n        \"4496894013184631719592075324719660880451832741221158646672639002826028676546560\"},\r\n    {0x1.5a4251d5f8667p+262, chars_format::fixed, 0,\r\n        \"10023515028874743203760034918542228757355688414371945561530461637433189038292992\"},\r\n    {0x1.61672219d801dp+263, chars_format::fixed, 0,\r\n        \"20460627987672046957993749035049653899503117503129177347274847415982748178841600\"},\r\n    {0x1.3d865b7eeb438p+264, chars_format::fixed, 0,\r\n        \"36766863868985022220367084943920216131061939418967080566277924324348988351315968\"},\r\n    {0x1.2db506dfa8ce9p+265, chars_format::fixed, 0,\r\n        \"69870599261497189307442468175452786217368249333102065069521396329647863295377408\"},\r\n    {0x1.8390d09306414p+266, chars_format::fixed, 0,\r\n        \"179508160415808704712141748605675659243941837354766083639370088277774910089068544\"},\r\n    {0x1.9b58ceed26006p+267, chars_format::fixed, 0,\r\n        \"381045742515568238106089113337056938315639562315303996957679473250795050372169728\"},\r\n    {0x1.2fbe163c69224p+268, chars_format::fixed, 0,\r\n        \"562735708283395761680999734220534079897036103282947406804850940523084358392741888\"},\r\n    {0x1.ed623087df1bep+269, chars_format::fixed, 0,\r\n        \"1828157196786173258110715724311801689865646019514059112947102608834558509445021696\"},\r\n    {0x1.c4a8946c5378ap+270, chars_format::fixed, 0,\r\n        \"3354513608629342758881183607515227358808179514909005943036597166005055102654611456\"},\r\n    {0x1.15c4e12be427fp+271, chars_format::fixed, 0,\r\n        \"4116922864713554962262731822113769463098264781458759029065788118035733765689442304\"},\r\n    {0x1.6ad5bf3ce75d1p+272, chars_format::fixed, 0,\r\n        \"10755434708169830468646961963757742494547372019865450762930913468197267328525664256\"},\r\n    {0x1.39e6cc7b696f2p+273, chars_format::fixed, 0,\r\n        \"18609826393606468152836428445460492052838500356054137125720357473673460037122523136\"},\r\n    {0x1.492f9204fea8cp+274, chars_format::fixed, 0,\r\n        \"39031924794474990334523500695205978003245342146820076519433466216752476212355399680\"},\r\n    {0x1.10fdf067e1d3ap+275, chars_format::fixed, 0,\r\n        \"64737911159818786400194931508236873102720909642740513708334320479730693747677069312\"},\r\n    {0x1.4475e6d3ffa4cp+276, chars_format::fixed, 0,\r\n        \"153886578090640196755690493218260429593835278923075770789252846079936296641204584448\"},\r\n    {0x1.e690de58f29c9p+277, chars_format::fixed, 0,\r\n        \"461541222592303232645421887442495089995066619544195472117594256018529300800228818944\"},\r\n    {0x1.12d15aa66324bp+278, chars_format::fixed, 0,\r\n        \"521367158800009825612598958231777939062375172881031702301591795450637439548805611520\"},\r\n    {0x1.c6239933289ecp+279, chars_format::fixed, 0,\r\n        \"1723128550002755437133951204996418910562653794534546195856270285892794521746348703744\"},\r\n    {0x1.b6563b1fc7692p+280, chars_format::fixed, 0,\r\n        \"3326341182536398505347105064878210412153017884659534401506803457160509140679576780800\"},\r\n    {0x1.bc57fc9b4e281p+281, chars_format::fixed, 0,\r\n        \"6743849062437124540067369460095704859176196480433913929539186007746583809206972841984\"},\r\n    {0x1.f8df107311968p+282, chars_format::fixed, 0,\r\n        \"15324966500321058049592869611887769487534860026596133853595336640461446056900382687232\"},\r\n    {0x1.de346966130bbp+283, chars_format::fixed, 0,\r\n        \"29031045606668695079086558896866507278227043543999063147023976978260396987770338279424\"},\r\n    {0x1.4bcb7614590adp+284, chars_format::fixed, 0,\r\n        \"40285461203337303545331340422939720789741892918160941159647588152564951369732381999104\"},\r\n    {0x1.0563f359dbcccp+285, chars_format::fixed, 0,\r\n        \"63474382619472774879674901098388887476421241832512569944968136076387350654165612232704\"},\r\n    {0x1.31c3c51fb59f0p+286, chars_format::fixed, 0,\r\n        \"148499905686861542665053988630525851133259775675492961721942835140068121158861530857472\"},\r\n    {0x1.43b14acd508e9p+287, chars_format::fixed, 0,\r\n        \"314413721470914827393293275279827694247227625704700173468711358766455498713644557926400\"},\r\n    {0x1.7a67288ca2338p+288, chars_format::fixed, 0,\r\n        \"735111663943683991924868091407140115848506284972761980234658243157821224316229105221632\"},\r\n    {0x1.90ee051acce20p+289, chars_format::fixed, 0,\r\n        \"1557747566386344816691965362482515856301711161509577196359183216260647622504160667107328\"},\r\n    {0x1.2489551766274p+290, chars_format::fixed, 0,\r\n        \"2273205881098212719172251019697290790177862652621182786611096562647157941278227203883008\"},\r\n    {0x1.3e54bc6237b93p+291, chars_format::fixed, 0,\r\n        \"4947293841380347003020105042807568353223605346291404893299918661932182932360249923862528\"},\r\n    {0x1.ecf1cc571a5cdp+292, chars_format::fixed, 0,\r\n        \"15322047885180556695270544082527752765618412372787918210678376413654108545252676641751040\"},\r\n    {0x1.62c38c686058dp+293, chars_format::fixed, 0,\r\n        \"22054038951762964986671726632558697872297075702108276219895533878990952721420526897070080\"},\r\n    {0x1.1956cbeae3776p+294, chars_format::fixed, 0,\r\n        \"34979111598588176010555116390040342571373179418270620765845075298580332460285709028163584\"},\r\n    {0x1.d245370a2c906p+295, chars_format::fixed, 0,\r\n        \"115943544996190933856633616414466811022505880808156492718239704433998219084021400875302912\"},\r\n    {0x1.77a2ad5be5f22p+296, chars_format::fixed, 0,\r\n        \"186812241557541298892557723890372259123352337205389983867335838290407406167752042457595904\"},\r\n    {0x1.5e27d63120bc6p+297, chars_format::fixed, 0,\r\n        \"348281044472571483629770428112359357931579367395984692863821844484753880315554503889780736\"},\r\n    {0x1.6cd5ca4b6a049p+298, chars_format::fixed, 0,\r\n        \"725763926599453313576032544399461752503111043260623699604979165837300824089149573789908992\"},\r\n    {0x1.21ef16216f087p+299, chars_format::fixed, 0,\r\n        \"1153527049014772181210371929535324976526694483335493350780385752130773271127971750637207552\"},\r\n    {0x1.39c791a4cdd30p+300, chars_format::fixed, 0,\r\n        \"2496797909293860274452611679981864366431273655911171418054054946652601225349601977195036672\"},\r\n    {0x1.b84f065ad9c40p+301, chars_format::fixed, 0,\r\n        \"7007223778789100460674592112903687638288056977455315141802089640807060683661017463323099136\"},\r\n    {0x1.5c980f061d930p+302, chars_format::fixed, 0,\r\n        \"11095288700912676850259655407944409623006326764511603357666977203703446579685558999924604928\"},\r\n    {0x1.d11d295facde2p+303, chars_format::fixed, 0,\r\n        \"29607930405769014382601054795425097838217102889963775497642608889806414863145865310495571968\"},\r\n    {0x1.bbf08598a98bbp+304, chars_format::fixed, 0,\r\n        \"56520050704947556744896535369107614707599849622347754280995272309160258719009203701942321152\"},\r\n    {0x1.ba04cbb38e4d5p+305, chars_format::fixed, 0,\r\n        \"112551007727079359585097814946865173194633864244482778621517929765203808143927747684958470144\"},\r\n    {0x1.54131d0e410eap+306, chars_format::fixed, 0,\r\n        \"173186080336662674773428302451694949383861654865608072294885374856902390005170129581872513024\"},\r\n    {0x1.e30ce3214662bp+307, chars_format::fixed, 0,\r\n        \"491995461222250678150766955487414849320177453519696863021951432129138251603934668204877545472\"},\r\n    {0x1.53b14d0307376p+308, chars_format::fixed, 0,\r\n        \"691966009118651520979803296576329218495201852892814426466356352573178600739540460494424899584\"},\r\n    {0x1.0db459c95ae0ap+309, chars_format::fixed, 0,\r\n        \"1098795518726438366609401980967157225074875139569724076317122730302418377716044842181188386816\"},\r\n    {0x1.1c3939899abbap+310, chars_format::fixed, 0,\r\n        \"2315894257968477114139855258593793035500513640711965686941821174621775820808713339985182326784\"},\r\n    {0x1.373d598ccbedep+311, chars_format::fixed, 0,\r\n        \"5072050876594695187143611329349529671804041318752578686754097723389320355895218925355946475520\"},\r\n    {0x1.3df92e8f7f25cp+312, chars_format::fixed, 0,\r\n        \"10363570999985610218238902711693729605343613482930794977520814186252504820113148082355622117376\"},\r\n    {0x1.e43040df434b2p+313, chars_format::fixed, 0,\r\n        \"31561899942152433381203488205922856539908726361744071551624952459304620181234055813806189182976\"},\r\n    {0x1.bd56a038510a5p+314, chars_format::fixed, 0,\r\n        \"58058899603986402390979930533204289636439533662431550984437804920565671771960313337224984788992\"},\r\n    {0x1.47a680f7df241p+315, chars_format::fixed, 0,\r\n        \"85431764922746352414815315662378944345996354389236714634151510172388323479866864189920524632064\"},\r\n    {0x1.0a7083cf6add8p+316, chars_format::fixed, 0,\r\n        \"138943198710420748341660043617043022583822760533446236412979829417047860471831997112096984662016\"},\r\n    {0x1.ca2d6c8c53bd5p+317, chars_format::fixed, 0,\r\n        \"477861849016998188114122579439270994768860615811890514883370859774317648442079613611698244550656\"},\r\n    {0x1.e92db2529dbcfp+318, chars_format::fixed, 0,\r\n        \"1020389588899609153532580957412143752366703719293632571694846387812362664420354081750298547716096\"},\r\n    {0x1.7e9337e01fb65p+319, chars_format::fixed, 0,\r\n        \"1596045688776375776841703068858618647181748707273854812785319263912136577406031736557627640905728\"},\r\n    {0x1.856a9ca60259dp+320, chars_format::fixed, 0,\r\n        \"3249173807353552076769227343856334408112864749547363816303721235276306516121646129315832634802176\"},\r\n    {0x1.2954147067244p+321, chars_format::fixed, 0,\r\n        \"4961638176380709527864130701814524798785240769392200382075051902521140868022699235320535724326912\"},\r\n    {0x1.8a9948a3b5773p+322, chars_format::fixed, 0,\r\n        \"13169653838480804261787216771021395751394285182101604350092325078019863042497232905928302772879360\"},\r\n    {0x1.9d7f682a48e95p+323, chars_format::fixed, 0,\r\n        \"27600802833290057294863365648278498083682974322674559612258381363079661754043107711541518184480768\"},\r\n    {0x1.1394946666649p+324, chars_format::fixed, 0,\r\n        \"36789758695100667984355585133798803034265640286914369787158051732884080762893646681521731009511424\"},\r\n    {0x1.5cf3dcf0c210ap+325, chars_format::fixed, 0,\r\n        \"93169776057927388397860971692076748096813463829441115661384293210348344104809158613064035568975872\"},\r\n    {0x1.edad497808d6ap+326, chars_format::fixed, 0,\r\n        \"263621865809578202632007715175239364465008642226141794355213814208815258090680462442156516792336384\"},\r\n    {0x1.0da0103363c19p+327, chars_format::fixed, 0,\r\n        \"287958016292024262706195266242702522208665557458094458094772254523203474127145608787359761973641216\"},\r\n    {0x1.e0e09ee6fbc77p+328, chars_format::fixed, 0,\r\n        \"1027147944933023542626819355716472887371271886832370736047056582372410954517572846778976767599181824\"},\r\n    {0x1.9678e5f1a7d71p+329, chars_format::fixed, 0,\r\n        \"1736438949946239757715573812462668203854228021142457473943958788246613058128755016444052964993138688\"},\r\n    {0x1.4b5b869a8b73ap+330, chars_format::fixed, 0,\r\n        \"2831101490449813330351300092716022415336638150557587101281369589000119033315970171347397084924870656\"},\r\n    {0x1.fe2c3d2523805p+331, chars_format::fixed, 0,\r\n        \"8717780031735017825202945866702741954863254816636562878236216927980533804341886067016970323602964480\"},\r\n    {0x1.7a8e2bf190c3ep+332, chars_format::fixed, 0,\r\n        \"12937429393963081102936715388735517174575449745661779868560549590564554071876819476341646368012500992\"},\r\n    {0x1.c20e9fb7c28cfp+333, chars_format::fixed, 0,\r\n        \"30762117874250039643733615885315530924664479523238936706849825774314004483458403504169088362311843840\"},\r\n    {0x1.bc64bd3fbb063p+334, chars_format::fixed, 0,\r\n        \"60750002047707119351020146056748996020726847090111922770368870774035039300942105887039623283718750208\"},\r\n    {0x1.6fa79bcec5d71p+335, chars_format::fixed, 0,\r\n        \"100519131923249665159539189045738250625445899193224853577560494867813212309547435281219657555073040384\"},\r\n    {0x1.255820e7b40dbp+336, chars_format::fixed, 0,\r\n        \"160404356999704584039118751697581736942407721317265568405145483828932537524402503992838476799827509248\"},\r\n    {0x1.24e8b96eea468p+337, chars_format::fixed, 0,\r\n        \"320332798201769959258478598390469858187503168380540831739211163523937048679598283011990104943469002752\"},\r\n    {0x1.296421957b8fcp+338, chars_format::fixed, 0,\r\n        \"650468980931338189749732798197360744414144439025939112265821291401038872632313877281859844571396046848\"},\r\n    {0x1.2b239b9bcb1b4p+339, chars_format::fixed, 0,\r\n        \"1308584396599165566045730161590653878587049789341429936525191989129126795868599529420259141598822006784\"},\r\n    {0x1.ea18f74afcc08p+340, chars_format::fixed, 0,\r\n        \"4287864653000838387576078081500217988595704090069841900641074208176801061178027675635595638576924065792\"},\r\n    {0x1.771193f9d6396p+341, chars_format::fixed, 0,\r\n        \"6562953660628768829189264161074367158311572400757453113543576153535820429893027838763351813805739868160\"},\r\n    {0x1.5da5e2bf67261p+342, chars_format::fixed, 0,\r\n        \"12236285152807307624643628388698918410797745423679381645265829552143290625157094290629079953916645343232\"},\r\n    {0x1.58fcd12ad7c3ep+343, chars_format::fixed, 0,\r\n        \"24146377765621171182079586051573746443023029345082834585424128063094779334007517592308658607782004523008\"},\r\n    {0x1.b981dd551031dp+344, chars_format::fixed, 0,\r\n        \"61803976055027187805645727187356890583048090549637147591363651473300874743076219960394574930078255284224\"},\r\n    {0x1.3fc3743a41034p+345, chars_format::fixed, 0,\r\n        \"89523575061105608238046943579501639205343860863408393270849566318887407646865214523447906339722299965440\"},\r\n    {0x1.dd8d36aaec71ap+346, chars_format::fixed, 0,\r\n        \"26739842993463813581156554780066217112772220767550736342920483680948044260004126801045126228240727696998\"\r\n        \"4\"},\r\n    {0x1.b602d12c2da7dp+347, chars_format::fixed, 0,\r\n        \"49051642185904873558626243255292753780465266746677410227409405159144065675524555006405554665149184763494\"\r\n        \"4\"},\r\n    {0x1.fc12bf0bef890p+348, chars_format::fixed, 0,\r\n        \"113795434024829486042338000081810099722588212366244304944366973309627116575158217811445667800351829812838\"\r\n        \"4\"},\r\n    {0x1.3b58efef7ec92p+349, chars_format::fixed, 0,\r\n        \"141259541205595997693021666042884440773661567606819789980115193551404322394471748056362736136713555410944\"\r\n        \"0\"},\r\n    {0x1.5b4c0eded4f79p+350, chars_format::fixed, 0,\r\n        \"311142743186002630640577638734310077189031292161333511033996767595551835883657601727589498257791590911180\"\r\n        \"8\"},\r\n    {0x1.e85ac6ef41497p+351, chars_format::fixed, 0,\r\n        \"875031714552777887225807383376825846159238826560043847494035938723501665994908088640458130401929788915712\"\r\n        \"0\"},\r\n    {0x1.3f23aec99600fp+352, chars_format::fixed, 0,\r\n        \"1143665218169053437791696983895095268164468569824714282350958559928889824463345030834752069494306643535462\"\r\n        \"4\"},\r\n    {0x1.dbfc913a56c60p+353, chars_format::fixed, 0,\r\n        \"3411483086538129071800118542616399504614130643685414294680318962544798628099321482305174141705247569792204\"\r\n        \"8\"},\r\n    {0x1.1c2ebe7ec1836p+354, chars_format::fixed, 0,\r\n        \"4073577415899245225960580860658850498986681199008703896559519292487004890804481986750861338164246566299238\"\r\n        \"4\"},\r\n    {0x1.938cd43ae03ccp+355, chars_format::fixed, 0,\r\n        \"1156927033128253405996906832732887656530865035604514520460096825132623670464113645197639515740810767782379\"\r\n        \"52\"},\r\n    {0x1.3b62009235fd5p+356, chars_format::fixed, 0,\r\n        \"1808325159908248270287140807249616053067477666022582227265950515643346517298199495919130365860760932633804\"\r\n        \"80\"},\r\n    {0x1.4aa1b1e151343p+357, chars_format::fixed, 0,\r\n        \"3791515819931573020870093208989719549053779720350783268479897406115616623025556208847436104017615978684743\"\r\n        \"68\"},\r\n    {0x1.9e1c89c676ae4p+358, chars_format::fixed, 0,\r\n        \"9497641000152050533933692352770827532886008297490354102183749813940857555737621815657793630195331519500779\"\r\n        \"52\"},\r\n    {0x1.3c53f9e9b8734p+359, chars_format::fixed, 0,\r\n        \"1450995807728975300658374553952345542332188682619160625619541203796573979107950975975929307550493973164326\"\r\n        \"912\"},\r\n    {0x1.e2406d2cc3bf2p+360, chars_format::fixed, 0,\r\n        \"4424174112983774166346168063541478892490396153922578140353694059038212329120121626025623387504240176662577\"\r\n        \"152\"},\r\n    {0x1.965c4e0d723edp+361, chars_format::fixed, 0,\r\n        \"7455899165473142891410407993445287142678369581757602511443241805608259062452677439719374796291043974872825\"\r\n        \"856\"},\r\n    {0x1.f33c9e28b3fdep+362, chars_format::fixed, 0,\r\n        \"1831998212881987847587463179817625260583859227295674763869324737953857333941893959041639880689268798361121\"\r\n        \"5872\"},\r\n    {0x1.9f22e896506fdp+363, chars_format::fixed, 0,\r\n        \"3046766945740591268037411649241064495268923737271466586523553924004122130570808853030772156099541307710504\"\r\n        \"9600\"},\r\n    {0x1.b237a63060f12p+364, chars_format::fixed, 0,\r\n        \"6373612538460249654292584671694501959756750262508216475854313728962720485103687524257115101524481605949928\"\r\n        \"2432\"},\r\n    {0x1.1dc76d7407d6dp+365, chars_format::fixed, 0,\r\n        \"8389552291826710390436149420039271487408725462561403588441786268070424663051774660933458866042972348945635\"\r\n        \"7376\"},\r\n    {0x1.e7fd5979d3140p+366, chars_format::fixed, 0,\r\n        \"2865161162150603509344474186833037533735333354175484885199280093460377624949994775110060838906517616340280\"\r\n        \"27904\"},\r\n    {0x1.ff1435c531fe7p+367, chars_format::fixed, 0,\r\n        \"6001453332972218932973411842315949625507549531805811536330508301961761394517291791742398897172342756841336\"\r\n        \"34048\"},\r\n    {0x1.5982e576be2d3p+368, chars_format::fixed, 0,\r\n        \"8114480333841310431852207106195732624573708335144294291178267067998449502486132131743924808574403664574991\"\r\n        \"56480\"},\r\n    {0x1.e0c0dbb472726p+369, chars_format::fixed, 0,\r\n        \"2258139439987612428015336505781481576430206807875363890109017576698987613919603004228509836355729557666733\"\r\n        \"752320\"},\r\n    {0x1.4debd3de5d8eep+370, chars_format::fixed, 0,\r\n        \"3136912645074335122364486804207067597209008115968614760745328968164833170677624444463154824550700849672497\"\r\n        \"397760\"},\r\n    {0x1.d1c493d286bdap+371, chars_format::fixed, 0,\r\n        \"8751005610037839569078498062403882911460183213677968265282850389208347874248098697335864961077782840591167\"\r\n        \"520768\"},\r\n    {0x1.cd72d6d8a7970p+372, chars_format::fixed, 0,\r\n        \"1733970664386912125872693897473560306483505961937588436510286673421890058470855545932258775999383764761746\"\r\n        \"1321728\"},\r\n    {0x1.01627039cb9a4p+373, chars_format::fixed, 0,\r\n        \"1934331254218701838453598175217237943737496771352435574889883098268382982283950220943173031097545837069499\"\r\n        \"1052800\"},\r\n    {0x1.a01e0e84d9fcdp+374, chars_format::fixed, 0,\r\n        \"6254524509233588212610830596577176659766944453511106755580487048288604005681198831239915598637843698115382\"\r\n        \"1884416\"},\r\n    {0x1.37e20c15e4800p+375, chars_format::fixed, 0,\r\n        \"9375622388315127403777672412879065014013388830042759601136502377501286541373592048356259696956137325677691\"\r\n        \"8499328\"},\r\n    {0x1.92565f524e5acp+376, chars_format::fixed, 0,\r\n        \"2418960634195268316395495689809143543065258436533233781922790717982079892017737002531449168323857711298954\"\r\n        \"60536320\"},\r\n    {0x1.b27b47d7ee854p+377, chars_format::fixed, 0,\r\n        \"5224440098918061370801664236931918267919020204582718655324508727854633555962516699473334315236265293145624\"\r\n        \"55371776\"},\r\n    {0x1.1a868033c3960p+378, chars_format::fixed, 0,\r\n        \"6794474678720090780860324238475587283291306410467544848935627504155000240285699245466669806256893372114269\"\r\n        \"11027200\"},\r\n    {0x1.a98ac07f11c9fp+379, chars_format::fixed, 0,\r\n        \"2046778382742435131475329556460351029370620189037525051596970511153669678206889113140327658180583658079785\"\r\n        \"771335680\"},\r\n    {0x1.b41b1012636e1p+380, chars_format::fixed, 0,\r\n        \"4195175792183929221375982545851813858035036354531575881851302179796683271008989121319242515283719614275851\"\r\n        \"189747712\"},\r\n    {0x1.999b23d856f1ep+381, chars_format::fixed, 0,\r\n        \"7880516976947722698439550191495267433356903672490332138766800161609546095955098211605858324954180861896127\"\r\n        \"374426112\"},\r\n    {0x1.305a3f8fdcff6p+382, chars_format::fixed, 0,\r\n        \"1171103551432728154956947994964796464091757879395596124696570919141670594706593929522754358987899672236930\"\r\n        \"8020178944\"},\r\n    {0x1.2fd99084e7c85p+383, chars_format::fixed, 0,\r\n        \"2338338695923867795487878416772616459210866818291210186069829383612708147973871939101117394698248794781384\"\r\n        \"7224549376\"},\r\n    {0x1.5dec261193077p+384, chars_format::fixed, 0,\r\n        \"5385799521445424707984567080296514002385833371920436336634074022526042515878945538534358402227721907605213\"\r\n        \"3007589376\"},\r\n    {0x1.a60cf45de0593p+385, chars_format::fixed, 0,\r\n        \"1299190664355894349777676514493340125040798882377073081083767614109492705524812822835944112469544470514561\"\r\n        \"45233281024\"},\r\n    {0x1.206f40c937d33p+386, chars_format::fixed, 0,\r\n        \"1775765812386984535762973709984739744765368770153037968730081658466792891896799685313136070777116248291620\"\r\n        \"63377989632\"},\r\n    {0x1.f728c980c890fp+387, chars_format::fixed, 0,\r\n        \"6195464634160997608567397112064977934269900151384984023135869099793434721498411944650441148889663785218245\"\r\n        \"16257087488\"},\r\n    {0x1.51e04772f1442p+388, chars_format::fixed, 0,\r\n        \"8320622375414998490526200947636548591576611889020858480783546025992168248085458479505569932708677732014340\"\r\n        \"68744404992\"},\r\n    {0x1.0912df6441979p+389, chars_format::fixed, 0,\r\n        \"1305554550582523208650674413548860428138330402294494603154556374044385981567373075868022295693702790040894\"\r\n        \"493689905152\"},\r\n    {0x1.857ce22ca5331p+390, chars_format::fixed, 0,\r\n        \"3836650434819978138099173880908523539242335231710182630876123447838335232647223635309021017839509241339971\"\r\n        \"350959226880\"},\r\n    {0x1.bc467f73b801fp+391, chars_format::fixed, 0,\r\n        \"8752670682427703980486963924525335227103728261943421525466500065475899686463211404336654549717016700389246\"\r\n        \"819052290048\"},\r\n    {0x1.5bfa6323e5cacp+392, chars_format::fixed, 0,\r\n        \"1371103427759536945157058907347025668765848614818811279886089945932326262483180610587330682635043434607233\"\r\n        \"7605128617984\"},\r\n    {0x1.82a929b1cf7e9p+393, chars_format::fixed, 0,\r\n        \"3047042188071979160224384218657618683166832259466005452103229197857186078753977423920984111729737041395557\"\r\n        \"2374972661760\"},\r\n    {0x1.e182eb353c038p+394, chars_format::fixed, 0,\r\n        \"7589006090032981090777813506934998050847755485934492363252721651347512116968716567951239839335895477366321\"\r\n        \"6863144837120\"},\r\n    {0x1.4c41f45ceb5f1p+395, chars_format::fixed, 0,\r\n        \"1047329391234229898792724604299179931023116824530959482604334182410534636379573330962109668776108486243319\"\r\n        \"61409430618112\"},\r\n    {0x1.4ce2d62a959bap+396, chars_format::fixed, 0,\r\n        \"2098620704538618703579982244064579947907086805961270103883683638080771912066638498186067590507991594924438\"\r\n        \"99741222207488\"},\r\n    {0x1.00a9e2d3e2ec1p+397, chars_format::fixed, 0,\r\n        \"3236179661386883652537980615095087002218043250286096069338484678230877725980185831620693744465153385217733\"\r\n        \"58467766026240\"},\r\n    {0x1.3c23db7779f4dp+398, chars_format::fixed, 0,\r\n        \"7972193856244526804064977940518293569386570610320672224744772099408870175512300349633667769144281931431455\"\r\n        \"44747212341248\"},\r\n    {0x1.6ad531cf6c4f6p+399, chars_format::fixed, 0,\r\n        \"1829931506025344530682223306811607430773233013466737003847562291822667772985002907439024576972932391742019\"\r\n        \"304962257846272\"},\r\n    {0x1.c98a8c0cc02abp+400, chars_format::fixed, 0,\r\n        \"4615178541421858608427535142571748466616058402431400157116586682652732762350017641507180191858019795591750\"\r\n        \"003286534520832\"},\r\n    {0x1.2599b4edfd3a2p+401, chars_format::fixed, 0,\r\n        \"5923044070696604771732616334920038891861142216152644953252439659806567968691229490833857614766206732681216\"\r\n        \"489965037289472\"},\r\n    {0x1.516e7c40f57a3p+402, chars_format::fixed, 0,\r\n        \"1361457289463493935314237753446450714998319678553037909082538558276375972696523741273235641888992343389329\"\r\n        \"1965665865891840\"},\r\n    {0x1.554ae9a6c9824p+403, chars_format::fixed, 0,\r\n        \"2754071394910484324330262754279472770629275635858147408834581170878029851593573370011391039087701392669532\"\r\n        \"7834062687567872\"},\r\n    {0x1.9f90524b6d626p+404, chars_format::fixed, 0,\r\n        \"6706809109602002050577686360962415983549615927938302295168613079702848036672699210359495237607001832749217\"\r\n        \"9668721922473984\"},\r\n    {0x1.f8c257fe070b8p+405, chars_format::fixed, 0,\r\n        \"1629267833580615463068816636091436259012674541563499284744651164979261239615690161190815723817519159242443\"\r\n        \"92117769349365760\"},\r\n    {0x1.5063a56cc31c9p+406, chars_format::fixed, 0,\r\n        \"2171602703883232007445315044637402650371728748307807247230177679217019568319384748363585553529475082142819\"\r\n        \"01658244655349760\"},\r\n    {0x1.bb50c0252104cp+407, chars_format::fixed, 0,\r\n        \"5723756099896326116405147589905161253505155129585629724986229057913911494779646970912178874582889958310820\"\r\n        \"88581314451079168\"},\r\n    {0x1.0b03b69a2e2b0p+408, chars_format::fixed, 0,\r\n        \"6894981730856179454977399200699351382952421263825434670350382928146216714982857029503164685009309440793615\"\r\n        \"59687185962106880\"},\r\n    {0x1.9d8bbd0e57606p+409, chars_format::fixed, 0,\r\n        \"2135757459649774324586064399778297415231258353092828891422462165385184090655843737056294676809425852734520\"\r\n        \"620544272774463488\"},\r\n    {0x1.1eafceb2b72f1p+410, chars_format::fixed, 0,\r\n        \"2961187277322293084826589494183329859405148034286470192676108441112739159224626669459295069493706626656429\"\r\n        \"936634490345488384\"},\r\n    {0x1.b82d31fcfdc41p+411, chars_format::fixed, 0,\r\n        \"9093166616854772671085259933316902762675289165630758054798840586372002897018168748438268762277481698283521\"\r\n        \"876304509982998528\"},\r\n    {0x1.29779ec1c6410p+412, chars_format::fixed, 0,\r\n        \"1229015698960275453718867366877057613832971743412023643196250163102555790726222410132492891884972489296110\"\r\n        \"5935201229760102400\"},\r\n    {0x1.8e05bee28280bp+413, chars_format::fixed, 0,\r\n        \"3288938903330379644961065400716518295356796477246364769269321501289872171996397168853799928443477130589346\"\r\n        \"4950312791814701056\"},\r\n    {0x1.cd14abd1e732dp+414, chars_format::fixed, 0,\r\n        \"7620004493567339864262219508861490396730034227755039046102041308274422419447425700846542223513787194922125\"\r\n        \"6838888880477306880\"},\r\n    {0x1.f2ef51feb4de6p+415, chars_format::fixed, 0,\r\n        \"1649119286271774345950461353968056960543958011297083266118687289447733111976663588544385731322405061236194\"\r\n        \"54700176498963251200\"},\r\n    {0x1.413ce3f0889cfp+416, chars_format::fixed, 0,\r\n        \"2123562001812472576282352525406745359031883428304103919104057801647664893836115806076980101637483462694271\"\r\n        \"23500298885388042240\"},\r\n    {0x1.80779e1506fc3p+417, chars_format::fixed, 0,\r\n        \"5083087486236233448745112973325131705774710931332862654480044921708376763073241202766613658492942259875031\"\r\n        \"03152602026665312256\"},\r\n    {0x1.f4593e67fd929p+418, chars_format::fixed, 0,\r\n        \"1323033736481405611984914410448319784704839252810423411622406266681117431920348308595863755130254039143802\"\r\n        \"571352312329397075968\"},\r\n    {0x1.5e1972e7208f0p+419, chars_format::fixed, 0,\r\n        \"1851482434708501404103498234936607544635241391027063475792961593090611345556654935908485171605594743656239\"\r\n        \"041462410004345651200\"},\r\n    {0x1.96497bf3d6e91p+420, chars_format::fixed, 0,\r\n        \"4297255645889242100707192159028895803971338559378666988081520720039810159447749167245761309264741132760920\"\r\n        \"631315371878690848768\"},\r\n    {0x1.b393f1a1dd519p+421, chars_format::fixed, 0,\r\n        \"9214123983353544230749526470476701347062870723863628075041458455922502614934820003680619969053137653170758\"\r\n        \"109561988952788828160\"},\r\n    {0x1.7a530210739cfp+422, chars_format::fixed, 0,\r\n        \"1600598424093753155397712357077769847897455502347635013084207171497664728521311793589988812962803594763390\"\r\n        \"7591684080627204751360\"},\r\n    {0x1.e3afa67c26cadp+423, chars_format::fixed, 0,\r\n        \"4092718156465024566468401022680098550827493157588909049631574478958824919079525184918827554889609347791335\"\r\n        \"2511764494291847610368\"},\r\n    {0x1.9c6025d074da1p+424, chars_format::fixed, 0,\r\n        \"6978645415917667486470063740679674095350598585981813321409810080272375693303149978674913039493630586998768\"\r\n        \"3275467906968807538688\"},\r\n    {0x1.065f9b19a0340p+425, chars_format::fixed, 0,\r\n        \"8880309352590179059498223684649858027191485335587402324325827563998301861860081801736437654883429022720020\"\r\n        \"3210514836291613360128\"},\r\n    {0x1.28065949e7553p+426, chars_format::fixed, 0,\r\n        \"2003854959702457433859473247861663167756833310526516747728979606354202126480766110129519255313792933991224\"\r\n        \"33770669620377086328832\"},\r\n    {0x1.dbade2e06f07dp+427, chars_format::fixed, 0,\r\n        \"6439948347184868699932802270952994310521984742682642596361657347416623542119782895493907710484400942495650\"\r\n        \"42561286390284027953152\"},\r\n    {0x1.67ec7d8c1da11p+428, chars_format::fixed, 0,\r\n        \"9745603385424578690730660575093745942192046027152353304115685895989977292131017126112277202152017894440157\"\r\n        \"03751438749985539096576\"},\r\n    {0x1.36a68148c8217p+429, chars_format::fixed, 0,\r\n        \"1682287066188509095838534603217685796480060545513558888885974825635003665102457636118829044285076747296724\"\r\n        \"564008491547307408359424\"},\r\n    {0x1.dc66b421571e7p+430, chars_format::fixed, 0,\r\n        \"5159777854912000122928945827116304465245126926206087972652025252644964871647187410067802690996029806092759\"\r\n        \"584457166981263691612160\"},\r\n    {0x1.e15c9d78ea3edp+431, chars_format::fixed, 0,\r\n        \"1042700947903679763559181336620334898147474113646804750154068255204432600426309066113873074271593564213747\"\r\n        \"9038773324522255424684032\"},\r\n    {0x1.ae724dbf30ac9p+432, chars_format::fixed, 0,\r\n        \"1864821815977769417748150360069980614504309430537735078622917784360533485567205024779803878816031745385873\"\r\n        \"2791008998841995499667456\"},\r\n    {0x1.430c116f28682p+433, chars_format::fixed, 0,\r\n        \"2799071930288179263470020809214476562706602883320362880904959545252059753768545020523217205576861504948855\"\r\n        \"2388925979796926720114688\"},\r\n    {0x1.b320abff3a613p+434, chars_format::fixed, 0,\r\n        \"7540407358942798252149214581448140611354124493751246358199578400762702984088032060250929879092048787838884\"\r\n        \"4654553206928916206321664\"},\r\n    {0x1.18baac522a7acp+435, chars_format::fixed, 0,\r\n        \"9729616533270472304570417119172291888449393973617088395124676104067103572505711292487799535537200023307996\"\r\n        \"1207242515380010313842688\"},\r\n    {0x1.4fbbb115a5ca8p+436, chars_format::fixed, 0,\r\n        \"2327192970289217603736376862480172183581025603660473458778209701502726441931437480495336959507404143716963\"\r\n        \"44356185425416667875246080\"},\r\n    {0x1.5d9b4105ffe61p+437, chars_format::fixed, 0,\r\n        \"4846716195431876557020677208945267951902487885369065798328001026837854178458864809207130091946624378546702\"\r\n        \"35875578368509717239562240\"},\r\n    {0x1.382005bbee766p+438, chars_format::fixed, 0,\r\n        \"8654197708736782692147011384996386386958546737598990044532749569816649505721539326066810068414534675805441\"\r\n        \"58666736089780468257390592\"},\r\n    {0x1.c059a164fbd82p+439, chars_format::fixed, 0,\r\n        \"2486253574248309139019190958645794670602442405535326377843846617565779445181345847239819375592637266262345\"\r\n        \"183038540336851637686501376\"},\r\n    {0x1.979cf64e101fdp+440, chars_format::fixed, 0,\r\n        \"4520706326672799065936892964499821241321414973892041429149405822266443181534229880251214464630186822608598\"\r\n        \"050594119641896654588608512\"},\r\n    {0x1.83251647fd9bfp+441, chars_format::fixed, 0,\r\n        \"8587398813646014313498373382639609467752907323052773992789373868056394750880784700092369195591424184346777\"\r\n        \"023720872944875812390174720\"},\r\n    {0x1.955ba92aaabeep+442, chars_format::fixed, 0,\r\n        \"1798278368931096142222750131079175510458587196459837877316863923206918321102064028659266499971075439621763\"\r\n        \"4910130253608134690434187264\"},\r\n    {0x1.8bb4dd0dfbad4p+443, chars_format::fixed, 0,\r\n        \"3510922927497369934786449067775999722388108766381702391354561276314694730648943789975155980344813142572626\"\r\n        \"0143262853014497255579713536\"},\r\n    {0x1.f2ffa36c6b9eep+444, chars_format::fixed, 0,\r\n        \"8854772868346543081884861642413599775854015649396963765701944773200152753763141152896936319959895472749176\"\r\n        \"6342717137006267941580177408\"},\r\n    {0x1.632ab9a3bbcbap+445, chars_format::fixed, 0,\r\n        \"1260493422715540281381879048109037109089648025900867074500376421044953131588905720338440064105352720966599\"\r\n        \"73119538989418847848208793600\"},\r\n    {0x1.7d9bd6980a8cfp+446, chars_format::fixed, 0,\r\n        \"2708671992994250418398087494151796097713969623989579473281302487040823853967100300115519498762952432972348\"\r\n        \"69643886677394157405489594368\"},\r\n    {0x1.a0ffc9a223266p+447, chars_format::fixed, 0,\r\n        \"5919748927113358584497548577785785622444408238661178056481236239642105233604233073908017593353418287904776\"\r\n        \"76111442443375110521989627904\"},\r\n    {0x1.2f2d555f5fce4p+448, chars_format::fixed, 0,\r\n        \"8607845504713467860443481861845557158816229480521445772939116212383850781617004168771192161082373845996311\"\r\n        \"64804764816415732192769998848\"},\r\n    {0x1.a65f9697c0d52p+449, chars_format::fixed, 0,\r\n        \"2398416696381307213030425486681554471977877905811241459414850746590388262421129199754985504543718795097719\"\r\n        \"717531387216891723088847175680\"},\r\n    {0x1.1e2be5c1a5196p+450, chars_format::fixed, 0,\r\n        \"3250007960862917778646959436106261588596497868644218319552582445607073449461147239873581615651891772642481\"\r\n        \"239481297672424409886179196928\"},\r\n    {0x1.47b6e3f5377a9p+451, chars_format::fixed, 0,\r\n        \"7443610248681702639133038491090496037720936627920146034222488686717712668090730441114098755897550999531316\"\r\n        \"963156312332013839122343919616\"},\r\n    {0x1.aad9cc8c1c972p+452, chars_format::fixed, 0,\r\n        \"1939072965661521519650681200061745147977671151244914278784845930334126060919102833109367328343544061792595\"\r\n        \"8437747265492354517993099624448\"},\r\n    {0x1.8cc0ea5310fdep+453, chars_format::fixed, 0,\r\n        \"3604698283522465641291575497692050182403054427234986326616462122334470132905824957460303056026474511799313\"\r\n        \"7684398776063481336351546146816\"},\r\n    {0x1.e8e380e2826ccp+454, chars_format::fixed, 0,\r\n        \"8883580710031505936495757285305375888511826205311995823147371443859957282195109866977037424844826203876940\"\r\n        \"1918432797048903756272554213376\"},\r\n    {0x1.2033b9d066e11p+455, chars_format::fixed, 0,\r\n        \"1047382066517004887875515440857871933032526992118894922460416678442332126944080997079388354371913743391220\"\r\n        \"09603229883686875857626060554240\"},\r\n    {0x1.7564b97a79d61p+456, chars_format::fixed, 0,\r\n        \"2713968226205329724198839272443779204420828521124700044786578904741141482697647869109259519421773680942058\"\r\n        \"28453389512306293635710562861056\"},\r\n    {0x1.2b82c2280c26fp+457, chars_format::fixed, 0,\r\n        \"4353920593614510470582072622828484344506092106572839403272182983522103949524464205352878226077641587001129\"\r\n        \"20667363070863633573415250558976\"},\r\n    {0x1.bf1f7396a6e57p+458, chars_format::fixed, 0,\r\n        \"1299944829366616991485980598548860151230651968759817944646322876723765795715004216987647604565446053438109\"\r\n        \"738523479554490524610468784373760\"},\r\n    {0x1.a657699d2c0dfp+459, chars_format::fixed, 0,\r\n        \"2455792996647105319987264946698174035669223140410363354394221901033041745005367433246369672312355030457831\"\r\n        \"875446589644026555749761133051904\"},\r\n    {0x1.288594faed777p+460, chars_format::fixed, 0,\r\n        \"3448376481821884742599997031703064023879309720647762419738450097130822453852343817969276956489783419047227\"\r\n        \"298470342228861543277801557196800\"},\r\n    {0x1.2375adab19290p+461, chars_format::fixed, 0,\r\n        \"6779013852180731642062803877328743866864466400459437016702545211778164705716580098240222579585037005161048\"\r\n        \"665824473078182953740522326327296\"},\r\n    {0x1.83324c05e70f4p+462, chars_format::fixed, 0,\r\n        \"1801148096883475019636536919296742071541586298507160412177605739972045947153374096003240644881783751921622\"\r\n        \"6379536264641695755986389226749952\"},\r\n    {0x1.97873666d985cp+463, chars_format::fixed, 0,\r\n        \"3791452902390206955710500442840086836755207186104228602225717818522441363532172058874581012257504841425551\"\r\n        \"7018518297768531087665402960936960\"},\r\n    {0x1.5bfa9fa8f352fp+464, chars_format::fixed, 0,\r\n        \"6474870054646572123288894968827209553499800984017510519629220257247365090779349079369962488899365434134790\"\r\n        \"1931540117631355075040339017334784\"},\r\n    {0x1.b42b6a79cf7afp+465, chars_format::fixed, 0,\r\n        \"1623167748474864773828424688913270302178709053686288141707027608624181277656422760878504097983468045273062\"\r\n        \"76739512993900734621330821705891840\"},\r\n    {0x1.da02be394de37p+466, chars_format::fixed, 0,\r\n        \"3527980476981337987773962526579022198834297486895530721521967825754560658125868500395457050798650594544364\"\r\n        \"49176466265315274091295259079213056\"},\r\n    {0x1.3eeed2ed5a952p+467, chars_format::fixed, 0,\r\n        \"4747525868091625374589753173451404493876080871121742834882965854600562461662497927915612971112492170124392\"\r\n        \"30326495036221766234765211123843072\"},\r\n    {0x1.3666a3d10b839p+468, chars_format::fixed, 0,\r\n        \"9241043811243548973437968577443506942126123215765079382499053019235772992464791613721718056244982972392322\"\r\n        \"68381394165934174203311772747694080\"},\r\n    {0x1.2570fb22b2de6p+469, chars_format::fixed, 0,\r\n        \"1747226815890356797048937639487427006091339387805682507872537441725533023977464453765330869945960255161837\"\r\n        \"902768182371165254880871258817298432\"},\r\n    {0x1.b07e20dfa1d42p+470, chars_format::fixed, 0,\r\n        \"5150350285544563391812484307981437266024721816515492278648187712670078428969897604590305016815911078869385\"\r\n        \"475223702592482681568973998545436672\"},\r\n    {0x1.c0fecaa34903bp+471, chars_format::fixed, 0,\r\n        \"1069374361345412834422973850765955406904111310411630553855176363664113300074916419053549457280270184284477\"\r\n        \"5713873914174897214881753809553457152\"},\r\n    {0x1.6a93c2fdb14e2p+472, chars_format::fixed, 0,\r\n        \"1727103927590087870232006461316111421173476006202037902235061715895198996726977765096839369534642467691936\"\r\n        \"0350528737280818370651311134702829568\"},\r\n    {0x1.ed356c6ec0f02p+473, chars_format::fixed, 0,\r\n        \"4698710632023436530935786534852661707629543086484094036770090925468610387543334690177440820673497567004141\"\r\n        \"6172724241468670572852355997846470656\"},\r\n    {0x1.fa2a9a922005bp+474, chars_format::fixed, 0,\r\n        \"9644313300615437562954467377321799557173735190605188996537216951703287357068462671044572325619359963134707\"\r\n        \"4349343808996878649261861384554020864\"},\r\n    {0x1.7779f5e06053dp+475, chars_format::fixed, 0,\r\n        \"1430838540572183040958898684234122121763075160751964220576820347672694960847168624017385087570938384997742\"\r\n        \"04490512832595931739164387055612461056\"},\r\n    {0x1.2ae00f64ca014p+476, chars_format::fixed, 0,\r\n        \"2277864578225410212402417046529252532595308641192361449872591767217736129023733728821577739245924409722402\"\r\n        \"57516688035006692022253572705950367744\"},\r\n    {0x1.14617f48912ccp+477, chars_format::fixed, 0,\r\n        \"4212849184362801569012349144749918377557914068975855440238329095456615077937044063548270484212352853989881\"\r\n        \"46300675184394950248081186488630378496\"},\r\n    {0x1.0e36f018afe63p+478, chars_format::fixed, 0,\r\n        \"8237715226546192746890447503120997923455595181879649723647619197005184957111250965472231223461180995981164\"\r\n        \"14799396399785995085176935884420808704\"},\r\n    {0x1.b52a83911a3c4p+479, chars_format::fixed, 0,\r\n        \"2665473721535922617453686564760605460217249995998770698831673228524989243942728182577687690040115887181965\"\r\n        \"731696893395851534226381642953140469760\"},\r\n    {0x1.ed98b659547bdp+480, chars_format::fixed, 0,\r\n        \"6019079138812161786404322771424209890074870865812828805359552352323665383150698386003738456164231488395169\"\r\n        \"844387225601064643184790911958453846016\"},\r\n    {0x1.fcce356c4ec85p+481, chars_format::fixed, 0,\r\n        \"1240908469029254165252761304543777501804893547322477854855421458145658884001133973362920340485889792403751\"\r\n        \"7041939851403445857567862463857852153856\"},\r\n    {0x1.3dc01483d63ddp+482, chars_format::fixed, 0,\r\n        \"1549900904806158881464152699552360093970738879528261717476769716034424926686904372943175161706160101858976\"\r\n        \"1944702337982434466462060034234811154432\"},\r\n    {0x1.4557a7b0057d8p+483, chars_format::fixed, 0,\r\n        \"3173866166356781626428551682280197297172815165120646996350638069618889027783736539668210630975874228200635\"\r\n        \"3922475242220366972514288404986230472704\"},\r\n    {0x1.669d69cbaf0ddp+484, chars_format::fixed, 0,\r\n        \"6996909564666351480656445883823347269335803932073664184743953878251805093112232960317695851202157645208611\"\r\n        \"6368782676471010501175026121646448574464\"},\r\n    {0x1.6a4308943f906p+485, chars_format::fixed, 0,\r\n        \"1413613005000349527596558070519024536027300340645688986079557743371441028796468956524778334197919542401370\"\r\n        \"13541670491478732029287175906702745665536\"},\r\n    {0x1.7e7001ab289dap+486, chars_format::fixed, 0,\r\n        \"2984684476732969973080482346008839779751088774198073117054414068625023704835748482292748918191379061402125\"\r\n        \"47533066937938143958203611335491240067072\"},\r\n    {0x1.44fa24aa8c90fp+487, chars_format::fixed, 0,\r\n        \"5072484297164672655753850075984225346401905228983528238839567946741940798379964728683087188822779499088842\"\r\n        \"45889023882897106195080463734761662185472\"},\r\n    {0x1.25d657eccb0e9p+488, chars_format::fixed, 0,\r\n        \"9172861001485727556863079465865253123173810000291904525320024949451214146915356704665580883376317239026339\"\r\n        \"49642595917883820840553955755394812870656\"},\r\n    {0x1.fdc48127436c0p+489, chars_format::fixed, 0,\r\n        \"3182732505899356703333123375269121290337735260803631099135633282182290195491466337751897766996078264788587\"\r\n        \"642034976623676783849309720668272859283456\"},\r\n    {0x1.50cc21e5e879dp+490, chars_format::fixed, 0,\r\n        \"4205587083947036897361115167889316607808963711580165158947458467902039543371629868331531359330796414315624\"\r\n        \"528062235406626283210983955984299738529792\"},\r\n    {0x1.5a4e10fb478ccp+491, chars_format::fixed, 0,\r\n        \"8648615720577232960260010237860665878489921627977706971167413716473182293562488282429974320988334381296634\"\r\n        \"069075898792649120978628662820343688200192\"},\r\n    {0x1.e6b342df1851fp+492, chars_format::fixed, 0,\r\n        \"2430969225495933253645053867907956025352941506654104238038342052727418957827445358505456938458399248773145\"\r\n        \"5483906898199659271966077737111144370274304\"},\r\n    {0x1.bf189fba46a51p+493, chars_format::fixed, 0,\r\n        \"4466309998082111170073506282370706108196457943209416122250434976487611411198060243493917472961323197528069\"\r\n        \"7191542952742623676348156107248907356995584\"},\r\n    {0x1.7744c67ce2733p+494, chars_format::fixed, 0,\r\n        \"7497564003947888936804623213880607410569882473110233428100677524964392839094983634660845809216505266606930\"\r\n        \"3519645320456702179748989546565091612164096\"},\r\n    {0x1.dc39acc6db7a8p+495, chars_format::fixed, 0,\r\n        \"1902919189559358251304225442961393389251981946644000818136247545166144987405523096628331483536251762254461\"\r\n        \"84345874717099016754240440378652340420345856\"},\r\n    {0x1.db93ed9dfa8dcp+496, chars_format::fixed, 0,\r\n        \"3800664183367710249288782490611872596137966173896218961044788164668898811254379468178194199678384504219632\"\r\n        \"36989721829537772787957124251662568730394624\"},\r\n    {0x1.b0906aca51c5dp+497, chars_format::fixed, 0,\r\n        \"6913824994082101377604034173352491535191266177664483054837067552426279897762927143757444035702927195098300\"\r\n        \"91288971999328682925119460651701964793446400\"},\r\n    {0x1.108f1f5365715p+498, chars_format::fixed, 0,\r\n        \"8712815483801715739257252286091866880067213418600853446340019791507392408796585979762097162000700841120209\"\r\n        \"22177725097537079407027753889855794306875392\"},\r\n    {0x1.73f5a2326daefp+499, chars_format::fixed, 0,\r\n        \"2378063972746060671897133818731680998752821318138463059978993349603226525259879320538960465423866875653875\"\r\n        \"431703645955198350097511963193717040609230848\"},\r\n    {0x1.5d60e9bc96714p+500, chars_format::fixed, 0,\r\n        \"4467392649638728970803009590025830597303866011670781488243987805549781170269232221346075088554896404581063\"\r\n        \"190784109692968975073166801707596473568329728\"},\r\n    {0x1.3b69dd2b0a7b8p+501, chars_format::fixed, 0,\r\n        \"8066185078159116167712295472117206859173225720179896603658517103726174861169657859726094564340370120252442\"\r\n        \"441673563796215351159644731012365795563929600\"},\r\n    {0x1.70986ba3519c3p+502, chars_format::fixed, 0,\r\n        \"1885244836996482542892823600943986116713564594995534344272830669658301681623735404806000618410629544582208\"\r\n        \"7646981385967186957895722281604432060701736960\"},\r\n    {0x1.5c9ead10d3adep+503, chars_format::fixed, 0,\r\n        \"3566152723739795234467018637155560524159413361159391842517155401062532273143246648879880582906919677326033\"\r\n        \"9528369728020651143141594374865566386412847104\"},\r\n    {0x1.2199c7c3b4ea1p+504, chars_format::fixed, 0,\r\n        \"5924851411681644640503417927190379494222823593778565459127443443668591444400551269545237672213501034354348\"\r\n        \"0884465555148433997142511793829160779635490816\"},\r\n    {0x1.7012b5d2cf305p+505, chars_format::fixed, 0,\r\n        \"1506058732121946655301287035109368639724991640175947243409282754446485613331818703580697336292409066290374\"\r\n        \"91671355128894869419427983062506453820908765184\"},\r\n    {0x1.5d488913a6d62p+506, chars_format::fixed, 0,\r\n        \"2858352024928191633886631432755921098706556519067353362046901478558781313878813883999231511122842403911018\"\r\n        \"78885418173061097660244197201776411569329012736\"},\r\n    {0x1.151c3720960e0p+507, chars_format::fixed, 0,\r\n        \"4535449894907774216903444340621604929977002891827276445632867693279801638271688849603199225842871662382499\"\r\n        \"92218941837638686010641196013298349788803104768\"},\r\n    {0x1.3557fa79ed04ap+508, chars_format::fixed, 0,\r\n        \"1012602649962377004457699442379863701200241750146498587811776078299649301264839681749775832225005049204134\"\r\n        \"901434458455631896130313812311189422436650057728\"},\r\n    {0x1.34632efda2f08p+509, chars_format::fixed, 0,\r\n        \"2018945071699849221312114766647416600939271104509438172852900806111729366941794283528300927782339248654747\"\r\n        \"013008590709252183660814342129605380010212851712\"},\r\n    {0x1.d18dd31d25525p+510, chars_format::fixed, 0,\r\n        \"6095760398208723298290951312121146581559974158820441582039629822285159626651555080140482022426506592227887\"\r\n        \"431158650579821218458724165898660363966842142720\"},\r\n    {0x1.9deef9f325dcdp+511, chars_format::fixed, 0,\r\n        \"1083972828702817904110477939440299843114904486633296890600374236556171888340430592781362784246092831970240\"\r\n        \"3984206679307763828828827451150213226478513946624\"},\r\n    {0x1.80ef70407b9d2p+512, chars_format::fixed, 0,\r\n        \"2016069787519307328105835041424551032020164488279653199409142566727146565023499640467691810358820470380298\"\r\n        \"0632898021029981572024314647222500081978631520256\"},\r\n    {0x1.b15f90e524369p+513, chars_format::fixed, 0,\r\n        \"4539520336739885202903530520810936804269492388269902813984327324977051420435023147430028294370432243418817\"\r\n        \"3617390582015018290214912507195023522743860592640\"},\r\n    {0x1.7d04016826a78p+514, chars_format::fixed, 0,\r\n        \"7982163447075078500581630705245379670915140040243916863725922660021993611757550398339375577457747355423547\"\r\n        \"5350529315775591347087019497446187187442089459712\"},\r\n    {0x1.09207e9aeb4cep+515, chars_format::fixed, 0,\r\n        \"1110865930994822323207372198105848601563976392119606356275524650260339658645638045517835592013731934565135\"\r\n        \"31979239601685059643816826533951965329199816769536\"},\r\n    {0x1.5eb84ec7e3693p+516, chars_format::fixed, 0,\r\n        \"2938991096845654049714530881766572299372468632666686578038784692824308992083021347310144229689848355329552\"\r\n        \"08915016266000487049786013109396266423674162118656\"},\r\n    {0x1.cd831a4414f7bp+517, chars_format::fixed, 0,\r\n        \"7734832320107849406975915415314845221690643354561217179632760627826757853193585968251996352889799583975116\"\r\n        \"47543570671668790057093880969098511595082212179968\"},\r\n    {0x1.3c41b73edbcf8p+518, chars_format::fixed, 0,\r\n        \"1060077280433434182449867323875464300059011229631163811669364109849227173188103395063538656771476964158203\"\r\n        \"812970364575007765811558050041484967816046261043200\"},\r\n    {0x1.7de6915655786p+519, chars_format::fixed, 0,\r\n        \"2560225316421401979422803492998633063406956866791362756726796134688568349944844143386491471677961456075665\"\r\n        \"903377049407345319868363294328606411349469066952704\"},\r\n    {0x1.e47a65469d029p+520, chars_format::fixed, 0,\r\n        \"6495789416268922401553168716966856796994063997872865919646022617543716396397164326215179203658207493313865\"\r\n        \"250447186614103438727429420216590467896398839808000\"},\r\n    {0x1.866eb1b2a52cdp+521, chars_format::fixed, 0,\r\n        \"1046968522959716567924247286778170756423223211506659389759754782355273358650062373117565585265466103667594\"\r\n        \"4667470248283335770956666084386262948697191024164864\"},\r\n    {0x1.508c027c49129p+522, chars_format::fixed, 0,\r\n        \"1804942547168450381169233647180574434039267609096655991415816782969324893685745177245502281954665102041939\"\r\n        \"5086693907597563666097234994451590506212471517216768\"},\r\n    {0x1.61ee1b28cecdep+523, chars_format::fixed, 0,\r\n        \"3796341461730841578780959690416055511432134825264742076212103463147953812002640039488541870094600932014886\"\r\n        \"9300117380342424037408264379528162055292585638887424\"},\r\n    {0x1.a7da0d015e36cp+524, chars_format::fixed, 0,\r\n        \"9092676802446734182033317648157748339291866285256612138324008080153551839181017108363268562797239004416443\"\r\n        \"0686884665469961819946851131278768884750528251166720\"},\r\n    {0x1.f343d287ffc8dp+525, chars_format::fixed, 0,\r\n        \"2142095457187479618186780355817389739087362820361209981629963953818884718187142470744282955503944630514476\"\r\n        \"51015663758672875883679550666916401541316002057289728\"},\r\n    {0x1.9c9c3a3327bfep+526, chars_format::fixed, 0,\r\n        \"3540607460490399649379648607162695350285243859533520233883922296148930609534314973215695090528711232136078\"\r\n        \"08354960582121162245411977647195367953750953520267264\"},\r\n    {0x1.610edb058ff32p+527, chars_format::fixed, 0,\r\n        \"6059179837113681950743099036006662055373279197285707406415028557873237442313731316660613237670511973318738\"\r\n        \"95394455715612868333780052349810329711384825746685952\"},\r\n    {0x1.f30c74ca208cap+528, chars_format::fixed, 0,\r\n        \"1712934026663283474995357785834399393951624952986783508184917269255378176824789737438473421087542152442662\"\r\n        \"795936288492656745381512223241233513801086791472644096\"},\r\n    {0x1.1c138fed7032dp+529, chars_format::fixed, 0,\r\n        \"1950127108367380265978789840612705413832446328076573867485880615095436437393072425261010441833325963717934\"\r\n        \"862664034468096428283397061878573723884854136941838336\"},\r\n    {0x1.78c95f77c873ep+530, chars_format::fixed, 0,\r\n        \"5173127718232939980745023901479711875074678603456290138612335116072095562130741558337106215138151055677886\"\r\n        \"848632459023665184850001400687968418400453658547322880\"},\r\n    {0x1.6459f93baec50p+531, chars_format::fixed, 0,\r\n        \"9785122654459946377156492136855692182754204044558544765901824636932439040204770643127601540321477379216964\"\r\n        \"153369345749073097713940190208348710065187772895854592\"},\r\n    {0x1.7906aa9a30611p+532, chars_format::fixed, 0,\r\n        \"2070565985519521146028617020903893764173127242228915282585821249629480716329796518060418640315424317976790\"\r\n        \"7958537137222057332190533942595916677783931001302417408\"},\r\n    {0x1.fa515f09e2725p+533, chars_format::fixed, 0,\r\n        \"5561231417700302612291035723276700921862313641901478942608981704822095236478468533450021103273631092111317\"\r\n        \"2928546161625907053067205424290791219411580020307525632\"},\r\n    {0x1.54d8573fb9596p+534, chars_format::fixed, 0,\r\n        \"7487464053324147073027985156251864960201268556410853848339298317867059869862354923570380271660107398895386\"\r\n        \"0606902557706179876262726589838088595804228576518078464\"},\r\n    {0x1.87e0d2f66b2bfp+535, chars_format::fixed, 0,\r\n        \"1721705395889040085230484290177093700112635956558847354390801559210296136488400633064531368996046204338082\"\r\n        \"51320307524080356734627614383764502179134363483408171008\"},\r\n    {0x1.60fc1327a06edp+536, chars_format::fixed, 0,\r\n        \"3101655447037900802206864434665525751926566828861379496861490211946029427633689466104445558270823162523042\"\r\n        \"68825795213378323348966049009545989957974376346959216640\"},\r\n    {0x1.992c8531ab31fp+537, chars_format::fixed, 0,\r\n        \"7190773969829954854476175955344126385509454725611500646868974906575026924567060298765274709735419930980006\"\r\n        \"46708518252563177681082336014920325874693801095389511680\"},\r\n    {0x1.cddee01e85f4ap+538, chars_format::fixed, 0,\r\n        \"1623371911267483481925060254083224874793319516602544418050392885957058564653246713426343598398954248921447\"\r\n        \"620240933830255782920769862417050715330898449264684302336\"},\r\n    {0x1.99388c768c3b8p+539, chars_format::fixed, 0,\r\n        \"2876639877916821718682171274884552699886270156870449470065976716669949296867873810397188727080135624623289\"\r\n        \"844646359504438367801675052210339168690365297101300039680\"},\r\n    {0x1.6c2ad6bba6ed8p+540, chars_format::fixed, 0,\r\n        \"5119867078891216752868300961559184243391774358043130873214522170176541422335876910061550665577816751144687\"\r\n        \"884279178798057513594382918680535607030620295902798020608\"},\r\n    {0x1.8121da546cf38p+541, chars_format::fixed, 0,\r\n        \"1082922960564749728749181147172534066701998238229528744199876607002722024796828928873682969768759332687491\"\r\n        \"6164752948106530119043799024142733614166064793545183592448\"},\r\n    {0x1.cc5c0ae184fdep+542, chars_format::fixed, 0,\r\n        \"2588897361986241005529795338682328544797589617536924774421046652734108621468962075520384347322252943006850\"\r\n        \"6678735966744366849758761825149394672284437121408260112384\"},\r\n    {0x1.afe092d15aefbp+543, chars_format::fixed, 0,\r\n        \"4857446184407045659245281466971101032273355703136282585341361993811637469258567653006024918127832386005581\"\r\n        \"7101089476270147525185193144865210540198232007480243650560\"},\r\n    {0x1.5f1a1433b9174p+544, chars_format::fixed, 0,\r\n        \"7897885248231480976572569148942549464110847839825749737884750938765890487107457976553278218726644590993528\"\r\n        \"8393542325707257672246926784385310159883948368526709882880\"},\r\n    {0x1.8ab67f98bb5f2p+545, chars_format::fixed, 0,\r\n        \"1775779240824860821984065029088456210333160939606438319025292868447492342699690750546360447139157960257192\"\r\n        \"83383611834930550575178173514581572666518402542001715150848\"},\r\n    {0x1.f62458acb73c6p+546, chars_format::fixed, 0,\r\n        \"4518186943899558415594287998616160732723580088808462627420793528636818628997768184974309329576692162223176\"\r\n        \"68812532970018869401576788745672335158605915636428814942208\"},\r\n    {0x1.4fe1a6ba1c0e3p+547, chars_format::fixed, 0,\r\n        \"6044406760379019868077037578408273873990355824829759644956313772837374257794918228456495998047454720738464\"\r\n        \"53804398133039311346050607936591463621343012361379329867776\"},\r\n    {0x1.063123904b927p+548, chars_format::fixed, 0,\r\n        \"9436631806093061427504203624500918508929173467950768498563951691995406365724812023159411207645424547667477\"\r\n        \"29956337135685250388333452322276527666526976611670460203008\"},\r\n    {0x1.c3e4c9bc47a76p+549, chars_format::fixed, 0,\r\n        \"3252849304270332114141330920099667655586309723577617203784379378032680392500513565776995824888509641060398\"\r\n        \"758716325831107713950320367933304627208668064052102524043264\"},\r\n    {0x1.594ccd81bd096p+550, chars_format::fixed, 0,\r\n        \"4971119941681659246429900277695016189863900011324524097738682426150509372935284398658270040527707830632488\"\r\n        \"868641461825918412782352354477687969196944687248446058397696\"},\r\n    {0x1.0c6555b87dfb8p+551, chars_format::fixed, 0,\r\n        \"7727934358856249540712628004988530049108022935118936582350134536455368772614055294662838998154536874398727\"\r\n        \"685060343548384620139502630275174727089552646218700654903296\"},\r\n    {0x1.b1efe87fe7322p+552, chars_format::fixed, 0,\r\n        \"2498874613076679837682780019982381395325675770876787651723828199748718199155198556530355267680902179245809\"\r\n        \"2123757308008963935169221303180214415444334488294696842952704\"},\r\n    {0x1.674a2eb4f0902p+553, chars_format::fixed, 0,\r\n        \"4138019138142108089524058702370011058866958085656593606829430376209068415463061793950055250788145237903012\"\r\n        \"2575643692667026093292813010368028679921072693955370544005120\"},\r\n    {0x1.4d10ab628902cp+554, chars_format::fixed, 0,\r\n        \"7671967953519935527988835422723451725742864531269712353438836332441022123915831674052826962836486534105217\"\r\n        \"3890153833114361977767211690942890884469581914980429066141696\"},\r\n    {0x1.348910101b05bp+555, chars_format::fixed, 0,\r\n        \"1421387953398881298880148949989246131415966016590209275959301216019884063155091433154061854986924572094303\"\r\n        \"85915732641654474120803055851072564038321516443810452985610240\"},\r\n    {0x1.f9213f77afaa5p+556, chars_format::fixed, 0,\r\n        \"4654153239076367382507751909873960041617365750592820377780564748261536571017284247911250926211719639526121\"\r\n        \"54921251227290320071201201332495977153680975614053869829488640\"},\r\n    {0x1.39148decde7a0p+557, chars_format::fixed, 0,\r\n        \"5769302991727879083534369344622854115108324627932898949190215146826105443397486515578648274397540068588579\"\r\n        \"68022384319234650521865502886831850045752670251564620807405568\"},\r\n    {0x1.dbecf9a36abebp+558, chars_format::fixed, 0,\r\n        \"1754028954197855453667927844908089896111067495596717096095862590203926162827983922996020492251206894850008\"\r\n        \"881110629079605516679136092848462020350119138244956800543621120\"},\r\n    {0x1.d4b8e3838c0c9p+559, chars_format::fixed, 0,\r\n        \"3454961038953493961416329266507926190098571820556925301139707205531339797053249053274907174887330950161588\"\r\n        \"768433100280033360041954344387894356034343704057173414445580288\"},\r\n    {0x1.0a21e645d2c72p+560, chars_format::fixed, 0,\r\n        \"3923334972089951622565300641907308211115105939015666440336500180781584271475526051495013014994682723202516\"\r\n        \"176590662854806987645471308169316788500685330937565504795049984\"},\r\n    {0x1.af01dfd28918fp+561, chars_format::fixed, 0,\r\n        \"1270785497029221059358757388587580343725199627810931207192376637355335173867515445571721127388807720391413\"\r\n        \"2749180314815054893523728069064065041255302851675835296773046272\"},\r\n    {0x1.92f36b46cac74p+562, chars_format::fixed, 0,\r\n        \"2376127169235011089198021521294622742280859027700317730068935393573426739498506711549038426666364463532190\"\r\n        \"5607600207437156411377406544504086631781775691133562731288854528\"},\r\n    {0x1.bfe04dfec51e0p+563, chars_format::fixed, 0,\r\n        \"5282087226424358235534033223248192160927276354617411186625887374972589898961096536046003769963641126001271\"\r\n        \"8784674393928472275175596068580609021329456130597064239797501952\"},\r\n    {0x1.94670a2ba70e6p+564, chars_format::fixed, 0,\r\n        \"9538748971891788210294826959447321562285701368048121126900779431593940381208373712228668831047181893306861\"\r\n        \"2563309998840782226852329612567449648252694634073100841335652352\"},\r\n    {0x1.bf6363fec4e21p+565, chars_format::fixed, 0,\r\n        \"2110533030324335695114644743880526517325317990927054481372423252496835520201472625558431700825477706902190\"\r\n        \"86744514884262890299095847660667744123821425839198582550323789824\"},\r\n    {0x1.130ebe426a4a0p+566, chars_format::fixed, 0,\r\n        \"2595142529235476807803390558661695672500621537095263774513524541786122460498753198121422520070124017510893\"\r\n        \"08402019833593780464399940409144513916301021676563350656888340480\"},\r\n    {0x1.4846fccf0db5fp+567, chars_format::fixed, 0,\r\n        \"6194530882320718305868353746876073825832971695709799346530285196479882855956178146629021151145597515239212\"\r\n        \"61814494546071943712322858477374811036408749349113740468449968128\"},\r\n    {0x1.cce40bc89d5a7p+568, chars_format::fixed, 0,\r\n        \"1739384579276981315759148533472828942133919101747611403307763949041755917155463866885761903090731725408142\"\r\n        \"081878718092529513244534671322128694195746568199203839343494955008\"},\r\n    {0x1.4cbb8d52adc91p+569, chars_format::fixed, 0,\r\n        \"2511440849787250488984960823661023170015960694172379166961908852483508502473802800840227243962307657672948\"\r\n        \"104995738811198515357386384926071278483707177078191869448614313984\"},\r\n    {0x1.cd56ecd7c5ed1p+570, chars_format::fixed, 0,\r\n        \"6964312528803397312815501717085672958841099480084848887578166052741502930919084645175071070482730543501969\"\r\n        \"067430731268878668278955626743849683963257233143847666633043607552\"},\r\n    {0x1.974548f633393p+571, chars_format::fixed, 0,\r\n        \"1229619287434227939803550366058587498426821564041569261418575489361230644061872194638787745903436688341360\"\r\n        \"9369181520067792869295968147404310797964224428121711225529989857280\"},\r\n    {0x1.785df63f7e7e1p+572, chars_format::fixed, 0,\r\n        \"2272632099172039380608214248568621755833020263807784815055087523001108297661296988698182950893022720120741\"\r\n        \"7730127845908876453052097589780463041422857268424951597133270614016\"},\r\n    {0x1.fa98d2372e253p+573, chars_format::fixed, 0,\r\n        \"6118009224455289447910813350384693683637135923396090328815184313947469439908628988159696066060199969027417\"\r\n        \"0051304615631465749824618705719721448275602824998439000878232895488\"},\r\n    {0x1.44f76f3ef0c7ap+574, chars_format::fixed, 0,\r\n        \"7849033701858733657333338224128967925188228188034754443320631773380593836151809534076527696243184197506404\"\r\n        \"7569375644124507699361497786620173012597660819648747164399097085952\"},\r\n    {0x1.845aee96c611dp+575, chars_format::fixed, 0,\r\n        \"1876016568195346041307282911895873269227056466128613116705598354597979107703442092519735290845838762519764\"\r\n        \"12473853052506364697656419609232890365789316383760219161065634660352\"},\r\n    {0x1.6abc94e260cffp+576, chars_format::fixed, 0,\r\n        \"3504523456271905044456328981793031211960672504956564247152194223246017794606940815368454050419459725899057\"\r\n        \"31168807151668054670532129843180363278721230005822552578189869187072\"},\r\n    {0x1.77e7f7ab33101p+577, chars_format::fixed, 0,\r\n        \"7263516584915378549456374754019148312952164487273374523757947663309932008898383542324381521377534959347339\"\r\n        \"36104514254970171070110867729784675843986648873395065583346126946304\"},\r\n    {0x1.ec2c8c72e6720p+578, chars_format::fixed, 0,\r\n        \"1902024960720674749038357856571117617159007367233488763764304962629532853766003841254145827765451340202248\"\r\n        \"656704594513309856716357813392938070159279476826318762074068165328896\"},\r\n    {0x1.ffa5d013ee4f4p+579, chars_format::fixed, 0,\r\n        \"3954563518862104166845868151963509202256503857762504705099964158993333535956221899163073808878713121193560\"\r\n        \"993015277645286678140294132386511219265217225137785123722280327708672\"},\r\n    {0x1.0e5c252b8b844p+580, chars_format::fixed, 0,\r\n        \"4179264564957456691890915787876071213030222891346247026060219448541493116407958328849777616319472384674792\"\r\n        \"667771126097789471772132138304456722148757124945602576369254706184192\"},\r\n    {0x1.b285d8728f853p+581, chars_format::fixed, 0,\r\n        \"1343383837208860839275954186578316568515086448937253404985304962119681977311432677737360729858283175807327\"\r\n        \"3139400905288866876199471807470183600176123459886516500946100328333312\"},\r\n    {0x1.830d570659ed5p+582, chars_format::fixed, 0,\r\n        \"2393243838635075239890606048013413118442674938278013875033863115012797924647747394912560603984121018844185\"\r\n        \"8566259800113585445368689288040865119179350881451516413561225814736896\"},\r\n    {0x1.5b7cf521730bap+583, chars_format::fixed, 0,\r\n        \"4297218754414362476458685406454566259504125701200572410097020758545576989569800779521715384386228436874078\"\r\n        \"8374177134573090336400694437095719918344517831582150115611945321103360\"},\r\n    {0x1.5f8ba5e3fe8cdp+584, chars_format::fixed, 0,\r\n        \"8694788966088642431551733491737923768147338900455502528714742557618068865137761911350308021080809708024830\"\r\n        \"3065713994383176911387666854498724374888010555657160403443732556283904\"},\r\n    {0x1.3c656382359c3p+585, chars_format::fixed, 0,\r\n        \"1565087239595795330934751186537463572020863629652884408657506889375456678915794287957461217526054518782303\"\r\n        \"36009199988423048858224043380759941961868932909470130132231537427480576\"},\r\n    {0x1.0cf69f601cbcbp+586, chars_format::fixed, 0,\r\n        \"2660912725174955503734445132971699373273287252301595838621179120991141885609266880422595257944145394659821\"\r\n        \"61018353954777170666779903498891261251335885914232419435941537077264384\"},\r\n    {0x1.712601f59010fp+587, chars_format::fixed, 0,\r\n        \"7304131091528227731828312715634128626367832710671257456567167856205625711803589283602777730033690938295994\"\r\n        \"39489279348564634343854478223995096490083834564122961187316938125082624\"},\r\n    {0x1.d9cb25c6870d5p+588, chars_format::fixed, 0,\r\n        \"1874936763830119511088272644435099293590064609044781767075844089889019757217295841065279840107191149534805\"\r\n        \"711539366541500871745028252870081743197260064203842403729644908114345984\"},\r\n    {0x1.3f0bce2a16035p+589, chars_format::fixed, 0,\r\n        \"2525113715353648212566127731316531176076410374319204644551422849547789865636458756542087902666897521096233\"\r\n        \"621580712956165193248559493345236489976046311451102680851980278768336896\"},\r\n    {0x1.4e046f64ace9fp+590, chars_format::fixed, 0,\r\n        \"5287208897505957815290500832701101436902153212758737317151324637067933559773024823268717155802178796499285\"\r\n        \"469008136051884913289117970821444349734733325693898128129470005715664896\"},\r\n    {0x1.81c96c18da3b8p+591, chars_format::fixed, 0,\r\n        \"1221335110809534390008730330642654428571831649641697488678924465058412297932751547521957833726239537659335\"\r\n        \"3901364495415734234777395486829707907374874417711021037161711853711130624\"},\r\n    {0x1.4d6f7e4292164p+592, chars_format::fixed, 0,\r\n        \"2111199772350984424078474304802331723537273011414249046667007794843906302772854287028348243792549228029403\"\r\n        \"8014573739362326768950393557886221693829978829496324438880160656306208768\"},\r\n    {0x1.8c09c58dce2d5p+593, chars_format::fixed, 0,\r\n        \"5015156723398376688851854823300132149131573532544219395842307346143156886967502714035629323131767733754309\"\r\n        \"6676819898009801602967325844127445604533459507481195933684935651668000768\"},\r\n    {0x1.35c34702001c9p+594, chars_format::fixed, 0,\r\n        \"7845248843802527862130310181565492504090475974055418073866337795403937821966496554816098802133004458154408\"\r\n        \"6790884596615125296396497742047656667223884572601517271224748933535236096\"},\r\n    {0x1.29c65d36b40dep+595, chars_format::fixed, 0,\r\n        \"1508326924899240484807552920022043764387734351669090850005123902047388054400367006990834771993864001929354\"\r\n        \"79514139200504582847173176153264857561337534047601980885310892466243633152\"},\r\n    {0x1.f096b560fea30p+596, chars_format::fixed, 0,\r\n        \"5030767976647529790064331000378597835371837602093398599444274006283104679786516943952146567331123886883869\"\r\n        \"36471483606502720156765698268474401719617647826060798815782857201376296960\"},\r\n    {0x1.2ebc1ebd45cb7p+597, chars_format::fixed, 0,\r\n        \"6133803460001548253354885670013712055949309064595983732574734284700889696143012218271572983257819531370501\"\r\n        \"34105978358652455249997921465483648671250142659113169108289945909053095936\"},\r\n    {0x1.bb1e534cd7220p+598, chars_format::fixed, 0,\r\n        \"1795631779932945645555691631836738572066334162075671104303499810331329716359776792806247250058684612113955\"\r\n        \"614358367020579719652520207053724496150314508797330293943336699424736804864\"},\r\n    {0x1.5a25ad40029b8p+599, chars_format::fixed, 0,\r\n        \"2805357599815182909589240522552000727461710491417322927673538624867192724211245350712114196927545716327289\"\r\n        \"356897590584828984871288054571880759699213224815050910018022191678672076800\"},\r\n    {0x1.920574253404cp+600, chars_format::fixed, 0,\r\n        \"6516381475942178867787353079663494921228558365294741624560836268083158617627742153482261039838305294655484\"\r\n        \"394073977159925482307630138907365278448422568005135582757883527066002915328\"},\r\n    {0x1.4b2834aafe474p+601, chars_format::fixed, 0,\r\n        \"1073547929579207822146146257824192599715982860748705307246504619358397447410866184277944300935443663486800\"\r\n        \"4476810418060601519121547906362418385449487160625577520457386019933969711104\"},\r\n    {0x1.1a6d55bf92261p+602, chars_format::fixed, 0,\r\n        \"1831149383814210354275261703611810370718850345053913553803807148059546706723549001290145156791548554767939\"\r\n        \"6737058601282328571489161236550988761960486022562870032145767653310556274688\"},\r\n    {0x1.939b15b62b48fp+603, chars_format::fixed, 0,\r\n        \"5233651721774457828930143547397259937500061905380822296675964663237327978958491501013819915288110106550653\"\r\n        \"2687557038424526575845468735889436101248308704643094047464453357888117669888\"},\r\n    {0x1.3323559810654p+604, chars_format::fixed, 0,\r\n        \"7965462598423407056084302378673355917335731484889156733217607393926632478128285248888903323232860319051286\"\r\n        \"4441919949753844338711395543768065444398593130152687221530109421623170826240\"},\r\n    {0x1.333eb164f7174p+605, chars_format::fixed, 0,\r\n        \"1593646840569022296301553121368170395099167364084121635931507149141390227879906775324655193952504627810761\"\r\n        \"36435039410295432478253760955315056455838993587622326715302371758119667630080\"},\r\n    {0x1.d0f59fe9d68e5p+606, chars_format::fixed, 0,\r\n        \"4823391413011240786328500371068980348345666540130652185217498297528052654536190138187741079967132340015234\"\r\n        \"09728884313284382907823478860910903091121695170799862320491542129699840851968\"},\r\n    {0x1.84e2b5e2c9a1ep+607, chars_format::fixed, 0,\r\n        \"8068434006659676654457255650625273153880247845815410845450429043686140437620851632121083255356331396926281\"\r\n        \"89202172627621495205007691501867201659515859130020754039123809607454929453056\"},\r\n    {0x1.18d12c4dbc048p+608, chars_format::fixed, 0,\r\n        \"1165254854887318129432253341611849244005128740776362876484341916238137446011434288707560292719458464014737\"\r\n        \"894962911847266193570440892019218458606795787156430221022282467463389239050240\"},\r\n    {0x1.7af5d345c6d23p+609, chars_format::fixed, 0,\r\n        \"3145002956331294992170525256755601269251814902720329120259308009316667046885009501073150613005267467412015\"\r\n        \"774348292634459749772960881227292173172198041386149418679539742007941742460928\"},\r\n    {0x1.975ab947edb1dp+610, chars_format::fixed, 0,\r\n        \"6761293527838664139820472719407404184606964850712365515757111169491961757654459712979691921318465965400569\"\r\n        \"804885376202390953715006070422295318330113570714871272953215654160102661816320\"},\r\n    {0x1.c1d0737b292d5p+611, chars_format::fixed, 0,\r\n        \"1493209026956578329458803613558608105114935104513446644261768856600601200183754016845867017291711870176878\"\r\n        \"6867474604627194399095522425450416452953980195186577171892642417347609543835648\"},\r\n    {0x1.aa02efe9f3794p+612, chars_format::fixed, 0,\r\n        \"2828385985536288646739600925330248187306124521764350039266631456163504031832715154244217269958526893063262\"\r\n        \"2241589973221227709826283976490647011264056279643437090782685578260187550056448\"},\r\n    {0x1.3d7dc9ffbee8cp+613, chars_format::fixed, 0,\r\n        \"4215793138787126201592687095074940538481765045595017468901634442009813796975044491572801611250986027715006\"\r\n        \"0601492917876180907845520932017756677408045726864238056988978424999333691654144\"},\r\n    {0x1.c6879a9f1b649p+614, chars_format::fixed, 0,\r\n        \"1207089970866236509803893135776239030792924490943617610122250493112943793228292109367666090691032798784025\"\r\n        \"27125214963888503868333527614117931372209142616050590653014235608250452260421632\"},\r\n    {0x1.ab65674d500bdp+615, chars_format::fixed, 0,\r\n        \"2270063106824027339748931657665787482441271129863506482565758064680942773085932165051194821233066802535430\"\r\n        \"56092075426388221410551611143867357719504542651007243174106278126401989803769856\"},\r\n    {0x1.7c53e1b833ab0p+616, chars_format::fixed, 0,\r\n        \"4040129430311583696732143007957685754304307731082292367345730826427069599704857090760582991485791697151631\"\r\n        \"73120245949614126178698831517102780044385664344470114797725850999704214300524544\"},\r\n    {0x1.2e77c927411a0p+617, chars_format::fixed, 0,\r\n        \"6426088010351117377696578205088747577220357388110480717002637520690262509475860031400023069785596865878141\"\r\n        \"52496590594469715368836313131660803069753435961872139875035538111189185036550144\"},\r\n    {0x1.91af529276bf6p+618, chars_format::fixed, 0,\r\n        \"1706800695515592043638178774221120688990002250514497596097161346863020672135118420251354652187393164201601\"\r\n        \"670059306842801510185352447629065196450702180793164841642105280807255981179273216\"},\r\n    {0x1.e2ffeafa53641p+619, chars_format::fixed, 0,\r\n        \"4104631682494188864369935361376767857643384088875573814265459751005633416294618032797301016990143507953959\"\r\n        \"788936681276555602164867149581334764589758388426211227129842787556178265657835520\"},\r\n    {0x1.5650db2b156bfp+620, chars_format::fixed, 0,\r\n        \"5818142413455796337262350052901214703926549122335030954752626652312814127222961805733762821859560957230112\"\r\n        \"471018315948488391977542573706585784859374641921502790939786006178741349999706112\"},\r\n    {0x1.bf7ae95e29007p+621, chars_format::fixed, 0,\r\n        \"1521111645270472022091693248054533383629375050697674028247841213400615883747873299312668828654731448130511\"\r\n        \"3926160400673257953300679831181284416307088159652747412468645675852976258440757248\"},\r\n    {0x1.7f3b57b7768f3p+622, chars_format::fixed, 0,\r\n        \"2605426852604141837012475826173618188600935104429295284097984287919101203867074790892872048677747768749544\"\r\n        \"2139696169653926332331688473761049756433252163195764050763466390084322743208116224\"},\r\n    {0x1.2df5ab759d94ap+623, chars_format::fixed, 0,\r\n        \"4105785371952792797923544609781390593778788901965417025328883762106784109780846493843594945671150262919884\"\r\n        \"5047066360505800379087691836395031068487812569438457407732512474227630214523912192\"},\r\n    {0x1.f86e4bfeb9a95p+624, chars_format::fixed, 0,\r\n        \"1371762624713213935603103021290409397649002657176806388466624917414582863372923705620850015249707047610369\"\r\n        \"79181678894768420162515624483582843225609804010781295565639720290288781607684800512\"},\r\n    {0x1.f40819bbe6e34p+625, chars_format::fixed, 0,\r\n        \"2719598623051542762828931204662829393792666006819729241065131463908221573347443568905277808876497139692162\"\r\n        \"20975232992872917430431261712729880546657888244648604349740292101232975795214876672\"},\r\n    {0x1.bb810fa7ba591p+626, chars_format::fixed, 0,\r\n        \"4824307741692702581214748969871257413043521313431692823365156172118433687874991849451910101780637851580927\"\r\n        \"86083355584001575840555363877550523501868437389941728201417346022675028135672545280\"},\r\n    {0x1.b49cba268e605p+627, chars_format::fixed, 0,\r\n        \"9498678712086855135485612482817386035484744399978252985762738418810197130887400026957427601514257406777053\"\r\n        \"71858937491969553131423202713212361520698537802948066370938491409647594429525000192\"},\r\n    {0x1.6794724f38a2dp+628, chars_format::fixed, 0,\r\n        \"1564561653734616153139558477069017581635904986153700450417153427550585234667770125429143748064852361268797\"\r\n        \"206642428914737885631574981113215615320879524124007390426980020724645404028254027776\"},\r\n    {0x1.d885c64ec1963p+629, chars_format::fixed, 0,\r\n        \"4111969199449787965653113376666097187490284584408598385740832809666652014310023661412103549412319639123668\"\r\n        \"277588476017765557295002078594048079978501293546557091940850855608591393411787915264\"},\r\n    {0x1.d4b6a8ce4e210p+630, chars_format::fixed, 0,\r\n        \"8157644542642784322824447550827509442465557032724520145904709409993018687708215050514757144043629528032384\"\r\n        \"532254436218938771670398095496674453158624970127845737803157578586920398874979860480\"},\r\n    {0x1.0dfc30c10a8f6p+631, chars_format::fixed, 0,\r\n        \"9397820074087552582334670996735885114551745878387262711305976908588636667440528918796299652112796230215736\"\r\n        \"762416233629290695818905123073123846308612952343782071766983440677059709153069498368\"},\r\n    {0x1.b0ee3365acf4bp+632, chars_format::fixed, 0,\r\n        \"3013945875484752466087128275705590665501410175077108295441341008911665790630027227962526962250783999602813\"\r\n        \"1322069003748345377672125070777019272622112701902180304760314555069924255238207832064\"},\r\n    {0x1.e8516d69c2517p+633, chars_format::fixed, 0,\r\n        \"6799079050215054775581744115108883498204609734318503991003788727899458010588519952316616029248028234629401\"\r\n        \"0872791245755968359936256756521776307578874668802788800843559936168472480219628830720\"},\r\n    {0x1.678bfe66c299ap+634, chars_format::fixed, 0,\r\n        \"1001227511687842883269531626638627505957747284820345284888879957505431285757627837509417299025524139625340\"\r\n        \"78869424254770151616712433286627933649089597511713238066169913296314718460937108455424\"},\r\n    {0x1.04700a1049e6bp+635, chars_format::fixed, 0,\r\n        \"1450477696477973922762246127213778090456662698013927848380973425482356287729579824529546003515261730125140\"\r\n        \"67058098025582676058384729733566966350382985119197142132911172845321643870781582606336\"},\r\n    {0x1.42ccf6b7f926ap+636, chars_format::fixed, 0,\r\n        \"3595602416094139549672415248140651783040570008089519417160381034595515860995858594543511319122030731248523\"\r\n        \"97179554337917085081215107409583937953090530652396114892869575308843675129211185528832\"},\r\n    {0x1.62da3942f3ba2p+637, chars_format::fixed, 0,\r\n        \"7905240079936543650845642299739737677916396108750875835655292602652947056851599230847124600851685285594996\"\r\n        \"04255099654858809141476957078618577590864095604243342920714026320377441054472831762432\"},\r\n    {0x1.6617ede33b7d7p+638, chars_format::fixed, 0,\r\n        \"1595488485333753846793096016195937937357422696318152564775792115138249157053382604410670802109663452372280\"\r\n        \"622563873071483865155214731195109515482575780647056162170021909878210640606642688753664\"},\r\n    {0x1.5c71e4b115269p+639, chars_format::fixed, 0,\r\n        \"3104998331330945794715310828569883404674067176884556565218284351444638269692991313496681903293609511189575\"\r\n        \"808859645677809012205688992155876799240651615710401257329009039104082564451422481416192\"},\r\n    {0x1.f38de0551cfd8p+640, chars_format::fixed, 0,\r\n        \"8903071845176859294355195227333545858376729955660332574912590438489416396405665802642435013033256079391183\"\r\n        \"097998040901449719178200967412709547407175233106220746691802662083191769493569324187648\"},\r\n    {0x1.7d3104213fa96p+641, chars_format::fixed, 0,\r\n        \"1358721439433228783163696740912347417319867778111461068847750924006676727003630439658300200733836148834243\"\r\n        \"4701826146857086210638259037086627062270667811911963671153223450792336088526500973772800\"},\r\n    {0x1.05c12199a4ce0p+642, chars_format::fixed, 0,\r\n        \"1865998426328270109596191066112710566261944234007108999996633524706671600899536342001290451786915606541494\"\r\n        \"3288271814177193884147313963724468713128901740026751426896821846885684778228695338844160\"},\r\n    {0x1.e7c493c1e5eb2p+643, chars_format::fixed, 0,\r\n        \"6954412455796678146528360174052816146865715601627035821935282887515245554692031453812033436021460189574846\"\r\n        \"8949215676482982196512810670940274921427074192952089823830554753893672379339452513779712\"},\r\n    {0x1.7be4b24c3e84ap+644, chars_format::fixed, 0,\r\n        \"1083275518981697368683840011739492511756715007425316867107301035743708290842980251168573814582538402274720\"\r\n        \"02871294262996952385717718556772469494577025756255588922017376406338209071473684947927040\"},\r\n    {0x1.2de39fee556c2p+645, chars_format::fixed, 0,\r\n        \"1721689201890626802206847153738774326055755959039803125874910835109420415058963881416982285197817618611176\"\r\n        \"35178753721442312474618140545615242891098913632068282120236765154238166534743448711331840\"},\r\n    {0x1.064ef464f3256p+646, chars_format::fixed, 0,\r\n        \"2991916436302712369274961966062721088927127529515002223774472011939456628835037710472812168912508987641012\"\r\n        \"02070770195820265912330897451258503380258144675789025947161960842321190442166624672808960\"},\r\n    {0x1.53c83ee0f3068p+647, chars_format::fixed, 0,\r\n        \"7751180767767666666899380129819749585309620493445974661962731435913506659391803434757712578145745216133072\"\r\n        \"22499090718182469027512595486412104282224089391808118934952932553489010283810329970343936\"},\r\n    {0x1.3d245fcdf38e0p+648, chars_format::fixed, 0,\r\n        \"1446941938650359502812707550148484621797920097057112024108610898616783602909172115320888205220428417615869\"\r\n        \"692393014844961294938705227221973480785926757243856237171772712052212742533379530998939648\"},\r\n    {0x1.e08347f6d354fp+649, chars_format::fixed, 0,\r\n        \"4384622385640972648784313774534524001623349767718470283874553407158311176981697096756222623282787499801445\"\r\n        \"184284881420975108036710110563126305622808224088979432579122289231488107948520961449394176\"},\r\n    {0x1.26dd41c959944p+650, chars_format::fixed, 0,\r\n        \"5381203163606890165258076803310873532138500227958540514963357066178342157170894073191972046689622720739079\"\r\n        \"961349180699018841380453909336296408176168776915809695465869463868037226981151032054120448\"},\r\n    {0x1.32a46cf0469cdp+651, chars_format::fixed, 0,\r\n        \"1119229781219803145367253890487858392054631005778719691968056460280400602163527505290471657839323070554979\"\r\n        \"2391736916811871536801023058717321491817885637178624494387092346840642879252645460150583296\"},\r\n    {0x1.f735cacad6b34p+652, chars_format::fixed, 0,\r\n        \"3673386106091207688913621569679455389408175004806918381792022879329286736717206172122567128325786514905976\"\r\n        \"2373032895575586250199621890834068293240362884267618309008853943697973367517798399718981632\"},\r\n    {0x1.6f9e96b3a07d3p+653, chars_format::fixed, 0,\r\n        \"5367174654182726101120335408762410892287859708091264622292238086266828749180259713752371134773469445613757\"\r\n        \"7512510066286097290894101024991650054347426329814100070532676175900514872055547324115451904\"},\r\n    {0x1.9a7be8fdf7d97p+654, chars_format::fixed, 0,\r\n        \"1198597749534963449090887841757613913366429242741488267748319817517257217935798001692677071594436579670425\"\r\n        \"74692923571443314746208884004956936450441535729663397603260741070812981369093068197195677696\"},\r\n    {0x1.da6e03fe5ee66p+655, chars_format::fixed, 0,\r\n        \"2770633669736967207955811227572999198966350253747669664564192146259917827699577293046495164147025849303833\"\r\n        \"69099948172126078628543391675565516869571467232515617030599512982766562717569725701405278208\"},\r\n    {0x1.46bfd17446d76p+656, chars_format::fixed, 0,\r\n        \"3816382032421530207865505258110516936220607788988249066818195596533133561278357699046241911001476280204084\"\r\n        \"28932624183905960507058168406385765800174407011359638209862028651785169944480326048859291648\"},\r\n    {0x1.4da5bdbbe28e6p+657, chars_format::fixed, 0,\r\n        \"7793902438347514440640181011113478123571429987141646872526553782378647727817064069370690092739024473577040\"\r\n        \"23377635205357481997520059613138340462342666890730126616251260546972142434062110654323490816\"},\r\n    {0x1.794508278de11p+658, chars_format::fixed, 0,\r\n        \"1762580890481987881425283457135501712972354397557805894287268773125378566000519027633345144060799112376632\"\r\n        \"196892933953973742848878173535542830691929043392759764761692511349391854787965137532076687360\"},\r\n    {0x1.eb532e6f9d7d9p+659, chars_format::fixed, 0,\r\n        \"4590880368222410865791218998205211387879524770061966448373098808296105923369755568747442330158655870441628\"\r\n        \"405972833885899442431367846953537758531668062429844500799658848386004026176785845424421339136\"},\r\n    {0x1.de74ebce4a37fp+660, chars_format::fixed, 0,\r\n        \"8941282866369576915713370199438403724519950866233398403869742470051018098969851229255072872351236953241690\"\r\n        \"859581044027690123952861405038640439793801150984027335811429652593548499275325847981191593984\"},\r\n    {0x1.f37efe81f6078p+661, chars_format::fixed, 0,\r\n        \"1866892216382209310267021259030272441213816077293731544355198853523532726972700428318806768509799391577996\"\r\n        \"7857553550469160341100795009241978760744022819053953305820738316178892052108850291867761246208\"},\r\n    {0x1.b9ac64ed3cc40p+662, chars_format::fixed, 0,\r\n        \"3301554140624012765282790128531799465425225910829272462785463242343111222529183299371460170183709253222898\"\r\n        \"4666842289569788469418213910100041040541661269705317791388661975141778219886098547588248633344\"},\r\n    {0x1.be00282b03f5ep+663, chars_format::fixed, 0,\r\n        \"6667800778670079956212752630731020775230819347039281550267183886354694984178437069741548386845262392466246\"\r\n        \"5852932499279515268041523524885590999171088727718673563969761030301929187013508451729059872768\"},\r\n    {0x1.1f0bfd13ebd68p+664, chars_format::fixed, 0,\r\n        \"8582818157212463310752411961628465729198777979420078115831657234410521524747640969126433265024863686225058\"\r\n        \"7399330494835558065432909058158755560573757532140879843155127845886935663226690006104546476032\"},\r\n    {0x1.214942705de21p+665, chars_format::fixed, 0,\r\n        \"1729955066348232585429815277483881150466681399421002179444051004008466615998235776770997963716272572012183\"\r\n        \"71431466580295993674478312273890911112115116201849407598813746738002168025760524577720667996160\"},\r\n    {0x1.09671a2b2cb1dp+666, chars_format::fixed, 0,\r\n        \"3174260421239594152016080747569458769344202387931082624539750316063638950221427193166837534132027948222893\"\r\n        \"65003537922894512928901216347580242808688118038808320342245310580635968754349465019243816812544\"},\r\n    {0x1.ba3141cf23cb4p+667, chars_format::fixed, 0,\r\n        \"1057738779050305784552396788296549265592250669951790118469054139525164892325553676596807312345243283118942\"\r\n        \"831396109005239237295468261418029835948558091906860873139381555038608771496710686082370958786560\"},\r\n    {0x1.86d43f758f915p+668, chars_format::fixed, 0,\r\n        \"1869752072792986020220533348187109263480606863609304000134747658299718635099101474955456658558244951782785\"\r\n        \"217425143964153188049690824639256727086482834546449274691729012173091390685981881574798938603520\"},\r\n    {0x1.34d8186824c10p+669, chars_format::fixed, 0,\r\n        \"2955061165839853772981208410423327958188619742299599743973924802358463375106307770696982606800232882190255\"\r\n        \"835984668412855709756751449286828670454146045729913364117793350552523245031469165393183309299712\"},\r\n    {0x1.e78ec2e502b07p+670, chars_format::fixed, 0,\r\n        \"9330031602327954656442973471013148617216548090389767979285186157977640513319499144517329482317159161851973\"\r\n        \"382886503720740495065769351149280072967849485120060333190450091919271255293415847165484888752128\"},\r\n    {0x1.f9eb8df3b3791p+671, chars_format::fixed, 0,\r\n        \"1936284144316907161772597733814696981306853769463077283378952353594060538695960758739103558415536199157147\"\r\n        \"7218864349571847687751095323036013647599983792758341840892977146731474886476017173416410244710400\"},\r\n    {0x1.f3bf2b7fd9993p+672, chars_format::fixed, 0,\r\n        \"3825314140412423908755344513507823014921817162983591500590046869105515725317702843347518172188803135347414\"\r\n        \"3805960645601659788841709440240831940652256561820866616777441445506068582195950276620332646268928\"},\r\n    {0x1.7028723b0868bp+673, chars_format::fixed, 0,\r\n        \"5636134524042644799624360279347731171505187833022937509490065520174547633917857823469204278320358667440081\"\r\n        \"4536523693629016758628762237700239395376218700185658748567853569033785027091761965807224097865728\"},\r\n    {0x1.557c7c726b2c5p+674, chars_format::fixed, 0,\r\n        \"1045563380046825437365920810881259039404331704270752953532059165345715816638411672391964039153381490213019\"\r\n        \"73914820975343519675720107557611312716650944578510886085691231275003492219818521525260187846311936\"},\r\n    {0x1.871a220cf573fp+675, chars_format::fixed, 0,\r\n        \"2394954328277625827509482699780047544816392970258196966572178130341032941744783245157743671000112247232460\"\r\n        \"04426134549707543279835675223903160643688382643597490008860447048746541065340198566551705264062464\"},\r\n    {0x1.7ab1f57987853p+676, chars_format::fixed, 0,\r\n        \"4637958398638087339937761182227231049124921246399686678310748497379066375957972167038729798670423059318812\"\r\n        \"77246512300341294333647657347794641948475142092198438521343984711625050786905805143040315550072832\"},\r\n    {0x1.5d3ddba3b5f62p+677, chars_format::fixed, 0,\r\n        \"8554470028680689905457374439889878323873796764466467132577542178041331259462261869701820360932262177458633\"\r\n        \"57936953692366755947421731246318689169626782187431645178224405902434053217838696105015610359939072\"},\r\n    {0x1.ca1c22f39b22bp+678, chars_format::fixed, 0,\r\n        \"2244226984310112282742144219425634400342236553116225944706361966321023853693220234245975607038739590449436\"\r\n        \"608778953178834695527378455121099232622455529116651588866259062455701860787333589107721957541937152\"},\r\n    {0x1.5571570a3d877p+679, chars_format::fixed, 0,\r\n        \"3345376225949994309590611550813489342004449480811488957688296398330964853387848361151560473842736697054901\"\r\n        \"754178011537224573858899467011609733043254823463231975478542474685169259633176067748962831236595712\"},\r\n    {0x1.4094b51955758p+680, chars_format::fixed, 0,\r\n        \"6281953454630420202275618993069739417385914224011807043883040480576055123863345303309775160680768851364379\"\r\n        \"633566498059922977393145681190563895952411661162198926892429054001662376306285334661068344151506944\"},\r\n    {0x1.9048c53155909p+681, chars_format::fixed, 0,\r\n        \"1568756700441442943044558061390767244029799937223654185010977731065696663028938068251290166098424314781816\"\r\n        \"4720305606372514460855651668937589154968441803492390245562381549787491329484096179468977774843133952\"},\r\n    {0x1.648fda1b8573dp+682, chars_format::fixed, 0,\r\n        \"2794808396725350715827089206220430492466901029150428816331326145852645634881970757182065470525400283782009\"\r\n        \"5403692983421401206915761523316550794340500753951807995473779905072062573759605370231867493790515200\"},\r\n    {0x1.43618fcb01bb4p+683, chars_format::fixed, 0,\r\n        \"5069460081666643483191504695700656896976847410731048356974618354537795358421749857202239066682444420690680\"\r\n        \"2716110058524003006214659535848234793606862153660055012848214798236108687160590757085244967798964224\"},\r\n    {0x1.e3c671ad8c424p+684, chars_format::fixed, 0,\r\n        \"1516773194655658235833854536387364152085560407344589363868960388430608227631836747794729508003104381911044\"\r\n        \"08642304100789891065969740635351032828526812314484068150876373570965277810326480540295924136407990272\"},\r\n    {0x1.0083712d8f528p+685, chars_format::fixed, 0,\r\n        \"1608485680821464130401617152690420948765452504210405669849278686501554120481720167768747957104967730689737\"\r\n        \"19496544120901191625200109058676087802871541264829133196190867040924564024017823724146856414240833536\"},\r\n    {0x1.1b815b8ce81ebp+686, chars_format::fixed, 0,\r\n        \"3555480059704266891152127019844250818474388230010407876343909993680505839762945849831409995743368702241891\"\r\n        \"63184788239468910565398744819870703830959835692636607007655630104135189425612387037272246775462232064\"},\r\n    {0x1.3cb5cc09f23b0p+687, chars_format::fixed, 0,\r\n        \"7943813334385863056542324297969427490956423776670584086879015121252165848927147198380473925309566136676102\"\r\n        \"94102333273655557547426416548788317016668008395432111323108190919984834221381915705192746329317572608\"},\r\n    {0x1.0eb891e353010p+688, chars_format::fixed, 0,\r\n        \"1358060002850566437569066220742424529363053836777337432911324154271055107224126127159061222794072519157552\"\r\n        \"514226831664192131528047596624496198846425386719665197330596236999383282901549238870689594008508825600\"},\r\n    {0x1.fe4392ee89698p+689, chars_format::fixed, 0,\r\n        \"5119433935571944306515549418307175275418107317058191945931032384985682786535454037617883736252238990787931\"\r\n        \"721861923842646425087948083052097162063136700891783482967154133027296156365640453753060081736636956672\"},\r\n    {0x1.2dcb28f24e477p+690, chars_format::fixed, 0,\r\n        \"6055737748179178377512325376707318300605078432844880119433017225619267638501958744950585870381817183479615\"\r\n        \"888079777486184355096973374331860638106502031077122796354840154902424520732833513406609567524824547328\"},\r\n    {0x1.7ef16a0343a29p+691, chars_format::fixed, 0,\r\n        \"1536813620100941815107574661221297808607802168437717593395633411458486095019910602689208855230840582685968\"\r\n        \"1198673424970533136301013108806903613888941328528246657716715762818718782183405530137798396072563834880\"},\r\n    {0x1.2a242729206abp+692, chars_format::fixed, 0,\r\n        \"2392979962823187453355916259567570068822526719044600258305185299632665771293612449132450526507765384681411\"\r\n        \"3912468376263785578115495854111182179778355706863388202457043252998698055736229924100641739854177107968\"},\r\n    {0x1.6fdb131897c76p+693, chars_format::fixed, 0,\r\n        \"5905063752643222946004667242915201851227615746616101168136118801285565321724762394852682484876204660705111\"\r\n        \"7422917669609347806672777830684801992638883640836819494802345454688968856603084866279004383014876610560\"},\r\n    {0x1.828b9edabf8bcp+694, chars_format::fixed, 0,\r\n        \"1241016416991475698698772118485852513075185422886339439749369509075818634822479531883472862044460482461759\"\r\n        \"26376358164303658206374976185443979610307101254760486194833808768397406617592883545020705987606790275072\"},\r\n    {0x1.561155e6ffb7ap+695, chars_format::fixed, 0,\r\n        \"2196438817181218637691314999391606891510435803326604653926564567070596714147497981058947196199772411280070\"\r\n        \"38529115316543316991123904985184012949857407673490871091790599594254663632479001321411805904083076775936\"},\r\n    {0x1.b770da1a7923bp+696, chars_format::fixed, 0,\r\n        \"5643355654143248139826986782450695013725739782459251895015817609507287513867479349111552688940177778096787\"\r\n        \"96605880934558431966021135949322020945206483833796818557605415476191440013445527768217391316223846776832\"},\r\n    {0x1.f39e870744604p+697, chars_format::fixed, 0,\r\n        \"1283234933019471834475596491074664947666560060020456820709639275619096610751496707012812799558712552505735\"\r\n        \"78716443502946802448442620802618959976978767428487544804073805963064736494872215411812100040796649449062\"\r\n        \"4\"},\r\n    {0x1.e0e0a24f508c7p+698, chars_format::fixed, 0,\r\n        \"2470196171073976436158323491514639764649528138296820506628253098079754232389193902786402931911170832742473\"\r\n        \"76819180283870144825478353453772049798438963755599572352833066699197991588948065122208085779596633230540\"\r\n        \"8\"},\r\n    {0x1.8ac9f3659f1e2p+699, chars_format::fixed, 0,\r\n        \"4055943573502298873950637595005545513320818153972933685470356192365077737900912446855672017311174986257853\"\r\n        \"22257531748255933833911596322305908820799861570096445826119055025147325835330550150749374733298534711296\"\r\n        \"0\"},\r\n    {0x1.c6c3610ba0783p+700, chars_format::fixed, 0,\r\n        \"9344204033720964789099166968585434806191233691620277011040269619659764889119933446640827820888154718264556\"\r\n        \"48106587676761185019235392954314227170622662103422697806457896662312360195041629483904435021403511586816\"\r\n        \"0\"},\r\n    {0x1.7ab499967a977p+701, chars_format::fixed, 0,\r\n        \"1556282993207826838292053664483252529563220742278206524558245294858801442634545164766259333234394269335904\"\r\n        \"367303824148104384395607953259617983621977672054433130933810767395696883211282676150003579684530450281267\"\r\n        \"2\"},\r\n    {0x1.f024a7d24b0d3p+702, chars_format::fixed, 0,\r\n        \"4077782162006019326633431827559285349135566446998944937268116760733940953107973573104987444727500132792603\"\r\n        \"016716647774810946339317774614675085229067529724067990247981819516824938089923609051324757764430419197952\"\r\n        \"0\"},\r\n    {0x1.d17a4e72d8ab9p+703, chars_format::fixed, 0,\r\n        \"7651488357127853276242132761864036422814454022471530147218920574712855733986768331218923431269999172230480\"\r\n        \"187508384059736711183902958629060763487777480969265193074898840268978802200642734863912959964269495975936\"\r\n        \"0\"},\r\n    {0x1.bdb5292735f65p+704, chars_format::fixed, 0,\r\n        \"1465301787337399869276363583724019621305256722912708038903280860517766226744000444820382608869987867026571\"\r\n        \"6119895040590223473662415362562185577545483877918682484885072367719780856613420653419248587697138004131840\"\r\n        \"0\"},\r\n    {0x1.d857daf79aa6dp+705, chars_format::fixed, 0,\r\n        \"3105736681090479780414240556022157098684844918477547872130010461066190932436462163526080163763369129773061\"\r\n        \"4260626133495600176265734381520800838613263216443343936742775300303226983614380976086743674850864273974886\"\r\n        \"4\"},\r\n    {0x1.09c435c527cc1p+706, chars_format::fixed, 0,\r\n        \"3494919053072309175675748445269104771306176491933340563145977157106258428646610880710294082136226924489793\"\r\n        \"3428086956552905322744082047362472421201551180358972335992195302859220811917676779815344923699394346221568\"\r\n        \"0\"},\r\n    {0x1.9eeba5c11bf2dp+707, chars_format::fixed, 0,\r\n        \"1091269103804911780335617842758026759298792073797386346264391405742828944445972629343078246464517280056710\"\r\n        \"6461406826996303424238234353669224948290555453511829403527677778524266812157553084925288785765222710163537\"\r\n        \"92\"},\r\n    {0x1.711ce33669c35p+708, chars_format::fixed, 0,\r\n        \"1941583711865697204746256015156518944019741559908299207229008834844625781875330586526456945344115576020927\"\r\n        \"5642068221511536635242993712997814887667227461258100922151180021454095730001569776360303611499916502635642\"\r\n        \"88\"},\r\n    {0x1.e1545d8e4756cp+709, chars_format::fixed, 0,\r\n        \"5063717719666343978161956101987079543887170989961124525040709065924399985127971621370596120381841856193051\"\r\n        \"5753883747499226964119454731907400047677810621416560130132110719738999828696690103485087370985049811090145\"\r\n        \"28\"},\r\n    {0x1.87047e172162ep+710, chars_format::fixed, 0,\r\n        \"8227221790228980671257499469705287291730768045242473279959358582346511385783401335164982153939474653321232\"\r\n        \"6263547497673971000449241653499551540968272330271569995570944583513505428002922386656793469347367810246901\"\r\n        \"76\"},\r\n    {0x1.23af3f8b0f756p+711, chars_format::fixed, 0,\r\n        \"1227440354851668993456839977968899869468735345520167925651503238281582135096466232431925258215419562610191\"\r\n        \"1191474444485124744373216236838038919013796336290985868971128189541024231417124227566422090476366803561873\"\r\n        \"408\"},\r\n    {0x1.15ac6c4e78557p+712, chars_format::fixed, 0,\r\n        \"2336960786523523960259537098118818102270133123628378374095278087135612248329180736851269495018599953027852\"\r\n        \"1810012639497784971753531338904066858624412827095937168137934366276318155094307389715761670889176261000691\"\r\n        \"712\"},\r\n    {0x1.0c56bc2aeaa8dp+713, chars_format::fixed, 0,\r\n        \"4516795524723723359179339019491606525273423400192020762180542320617453299983205014338704947737188575834177\"\r\n        \"4049089350088820445306091663288005992999760075869205707071166753317023001654263861551683890717335067755020\"\r\n        \"288\"},\r\n    {0x1.1d43438f94121p+714, chars_format::fixed, 0,\r\n        \"9603333317066072371349453366599550684514556512675701199979085982192340107867858726361550496438065106481326\"\r\n        \"8845510440564013868695648869083373584373867869269917305531784840327501073368826901361601492333604453279072\"\r\n        \"256\"},\r\n    {0x1.22061a1f36b39p+715, chars_format::fixed, 0,\r\n        \"1952722934421129620483274849139197031365929863015778953867693034306903376020819758959987970287392899249952\"\r\n        \"3660899069569792928747578376452370917853369774868866779572702655138554220853982914990475716478533124237557\"\r\n        \"7600\"},\r\n    {0x1.b4c6aa9857545p+716, chars_format::fixed, 0,\r\n        \"5881603409821294314490532969861265375773324536229858509467145703084398100107690323994373648175249156266885\"\r\n        \"4322761516142693345396666266461470068359281734322103363387243546308238464659220797411699881100100073352803\"\r\n        \"1232\"},\r\n    {0x1.fc44623e54a39p+717, chars_format::fixed, 0,\r\n        \"1368859723229009103731168614635019692992509093194960531475270498326709289521745405065946018254320406117476\"\r\n        \"4948358136090265427597894075060438725634965524048386906052855831441518644686937797919299173004683502086772\"\r\n        \"49024\"},\r\n    {0x1.aa3773f76d3c6p+718, chars_format::fixed, 0,\r\n        \"2295764284659215143576575537617792224453034112312240455390484925314195149688610525887087606485161503643446\"\r\n        \"9487640122992188236785253589413174035526802275272496248351134708835699120438951179663704960111131110779723\"\r\n        \"44832\"},\r\n    {0x1.678f5a3aaf4abp+719, chars_format::fixed, 0,\r\n        \"3873452666452653040977800502103291280830376123603932314519000754253255961367122662804153620709055411954929\"\r\n        \"4806165642693765246793612927583829780398517402958999267072228701042868544358203143993858786679510868442270\"\r\n        \"92480\"},\r\n    {0x1.75d7f7f1fed35p+720, chars_format::fixed, 0,\r\n        \"8054654093095745571857803131829974735040217155795720972996527382749299243187278634624462721156563160664825\"\r\n        \"7005986783765190678460254789257444743374938027880768711231300036742824114502555294053396292678677992113449\"\r\n        \"20576\"},\r\n    {0x1.ecd6547f3a750p+721, chars_format::fixed, 0,\r\n        \"2123686535515559562273528586395505800313514483395745075298085135171798735233109223304560074674700126056193\"\r\n        \"7291158946718173896569296039531604856733284152037686012749260529207824319250135096395495352516915944992763\"\r\n        \"019264\"},\r\n    {0x1.0a596dfac622cp+722, chars_format::fixed, 0,\r\n        \"2295453607950479536310528485623837004757586382379191488457881203273698650584404729967997754495888886488744\"\r\n        \"2951056669952071781052790473826029299953021688768115856412305379354233814949593640298703702046027442239383\"\r\n        \"273472\"},\r\n    {0x1.2787de7be85a1p+723, chars_format::fixed, 0,\r\n        \"5093889959692539576182619568129398286405410583783652444177945234158735336533724146392768476042360567250313\"\r\n        \"6464819499023258784989583342649665721431826274705734325984972248516667725996772046163212974917654538257698\"\r\n        \"914304\"},\r\n    {0x1.017035217c70ap+724, chars_format::fixed, 0,\r\n        \"8874626256790000244076336222069640077467713258416463773717347636815937384815717327682486531603138365405751\"\r\n        \"1691703267627156659382229317277215514890808408496917480416674632400398136402895339939119899965737997460146\"\r\n        \"487296\"},\r\n    {0x1.520d5af29b2e0p+725, chars_format::fixed, 0,\r\n        \"2330722763749368558325721472615163327901421757587933088529200799908478224799659671505075666225503013905885\"\r\n        \"9680585650409357736245667774031018743688729855165660056396607022699316763797442861823666088645738211778673\"\r\n        \"5607808\"},\r\n    {0x1.07577e25bec05p+726, chars_format::fixed, 0,\r\n        \"3631254054969045478394538534108073927018626053514348146178073154620545943900950162158636224366305088996445\"\r\n        \"7871752131739439415577000104889353026296447622197049676919909822289694967906242744230734591647156614148244\"\r\n        \"1113600\"},\r\n    {0x1.8e96d600a22cfp+727, chars_format::fixed, 0,\r\n        \"1099239719563048539304802974519333248720009988612645868221010247563255776583817687910234874086417481675345\"\r\n        \"7433974739024870404593839667345575652949301794831043532859325960191677592937324697516311201831048403427646\"\r\n        \"91390464\"},\r\n    {0x1.d58382d6bdbc0p+728, chars_format::fixed, 0,\r\n        \"2589674385756993492602399990611460265698002203137296410164233119645313914901079606471826933858404098518098\"\r\n        \"9593038354058654753675686443392283446651614202408033168533185669827718314096479456553169530746246086290573\"\r\n        \"10949376\"},\r\n    {0x1.dadcdbd4e3d3dp+729, chars_format::fixed, 0,\r\n        \"5238355375759047679718444801493998575722879567001090086493441713989645048600536493575093493176666817520705\"\r\n        \"9862764586622862769820594672704713785528525150031742372621400280257565057235276397330683769676485155549679\"\r\n        \"10612992\"},\r\n    {0x1.9368fd03b4a42p+730, chars_format::fixed, 0,\r\n        \"8900279560041490619979192723221632347611057883537554951306638995371024216929437445872303513774467149318672\"\r\n        \"2234462396480190553216899841333725945022797124710083138285057710837640319331020800463716341487970600766913\"\r\n        \"49569536\"},\r\n    {0x1.f845eb76e5443p+731, chars_format::fixed, 0,\r\n        \"2225116158761087766363348913942892039519802036376171305139767829547062077205969578841514901877534556356255\"\r\n        \"5762777495118665261832821781371260756638778983883714666146446905425278001279688706219809518432225998751748\"\r\n        \"784652288\"},\r\n    {0x1.2f3e996a88e6fp+732, chars_format::fixed, 0,\r\n        \"2676146191342833504034301295321913182412616832450020227274467870190931847781381491185289873065187374317510\"\r\n        \"1425081977800077877770735697038879718637455326844951298257413736161884021836125708342242902075069447996397\"\r\n        \"458554880\"},\r\n    {0x1.4a45683f62e2cp+733, chars_format::fixed, 0,\r\n        \"5829314115768354071597483488729876648514915998500096356960323028164937936867867297910462603022001770665310\"\r\n        \"9780865614743215820832575027607418817847904297376017943402827508775808108531296093503913514229899714127169\"\r\n        \"872461824\"},\r\n    {0x1.271f30e62182bp+734, chars_format::fixed, 0,\r\n        \"1041785244206836381482082569848538480096152452290912090875765575273930405227173007583543796714117570489723\"\r\n        \"6255641041287157462180544590035841136272606482818447031698519086284298653682594108090391640145979587298963\"\r\n        \"2111050752\"},\r\n    {0x1.320dd43436bdcp+735, chars_format::fixed, 0,\r\n        \"2160752056028688461743683297576498790902096878235063080433213244844666904753916384825496258413341301758118\"\r\n        \"7899511015448441435915632057733803456589470033458768226512926713973314665173167551963813546320158531267851\"\r\n        \"8261284864\"},\r\n    {0x1.d4492eadb2bbdp+736, chars_format::fixed, 0,\r\n        \"6612229146655117441168711686094444532436910098228026264275635783330347752449760489501084085477318895305025\"\r\n        \"4952524079915063414419338956574698098611454290489494124898739202330237178653780186955601485401625450255165\"\r\n        \"4684950528\"},\r\n    {0x1.7244f0d2e016fp+737, chars_format::fixed, 0,\r\n        \"1045645670773271637283661690345001000283115449429739664757508063194100654200851508498050167472695411837384\"\r\n        \"0973552191616310412396016632996447033707258871187435688521599916928549468974662428654817829704874331915703\"\r\n        \"60707842048\"},\r\n    {0x1.79783032b55c8p+738, chars_format::fixed, 0,\r\n        \"2131958191762413466353988942080877003390278263413142880580362127448798568211133167351017171417321177966109\"\r\n        \"1103962982927755433640136765454273679309575775884064681827819011941847150896169556773632828022579674932529\"\r\n        \"14289311744\"},\r\n    {0x1.0b80e405b47b0p+739, chars_format::fixed, 0,\r\n        \"3021734238681330196986086098675130970728131350248726308811240224908928405470052917525002475086011480736989\"\r\n        \"6624843157291087679036263473270864818434041899624889329937851637732532800509498117442029880517462687772083\"\r\n        \"01410582528\"},\r\n    {0x1.8c7da56899335p+740, chars_format::fixed, 0,\r\n        \"8957564546729513618700519346747272746107736055861506709457313341941037304392681464987938562259463523737640\"\r\n        \"0948996618304363198022425918235806365729809664546715654847344117952840077801654196792979507517085335923130\"\r\n        \"91309174784\"},\r\n    {0x1.642033bd8f523p+741, chars_format::fixed, 0,\r\n        \"1609126720952320784150002291081965503718696293038888149012934381940650942573719189611286824497427701209601\"\r\n        \"1103846798799626483018174230774059177771202072628613312351980968314129006419829400748219701186026293005375\"\r\n        \"228012920832\"},\r\n    {0x1.9bc991377fc41p+742, chars_format::fixed, 0,\r\n        \"3721258517697667524776603268792357806534625490986603100725174894625343008775348017057145675495549590962407\"\r\n        \"4965147809435188568377268619875477540828907199705993963484184077353272851049733783025187657054342901373829\"\r\n        \"994915037184\"},\r\n    {0x1.84a5ddbd8f438p+743, chars_format::fixed, 0,\r\n        \"7024301672009425838025662912126814595330470868115541671156926539644327945801957358311540156486313337589557\"\r\n        \"9685909656995177174501875343122585231807531330311572313079292529543335146246164661218890443786186808043029\"\r\n        \"385978052608\"},\r\n    {0x1.812a1f8314ee5p+744, chars_format::fixed, 0,\r\n        \"1392268859877182592349746773363535658333138149954293042940913594792764552210250115600054769290737506972972\"\r\n        \"5342408628685239141847531223744719982978027470592653996762274804719172717669993358845520936049681972313975\"\r\n        \"2620522995712\"},\r\n    {0x1.7c836a459d446p+745, chars_format::fixed, 0,\r\n        \"2750911960497591307884445748945284629758653802877648998968329372262619130678842796735210842450431070421229\"\r\n        \"2151035888750950130882002322209950733340085450796423070978342873426401731887124393590376154252845693353298\"\r\n        \"0757779185664\"},\r\n    {0x1.c6fd7c21c37e9p+746, chars_format::fixed, 0,\r\n        \"6578680864102577255707787019589983476528158564831344882323922191623997676810847854751781441935898349486881\"\r\n        \"2196179213854821347805334962449803183900781467628953637713061092827366412942137406533401622084266250098110\"\r\n        \"4964844650496\"},\r\n    {0x1.1910872193e4ap+747, chars_format::fixed, 0,\r\n        \"8127797721199312242409160908564874766877148108242791968380748492961207149792226473298600227146464993385549\"\r\n        \"7569272362343740219167487183252229672093518947250855792119297436241311866040388542951564096258269136861772\"\r\n        \"1565208903680\"},\r\n    {0x1.e7a0dc9273731p+748, chars_format::fixed, 0,\r\n        \"2820237949529470317762890891723491551677048500394606994256036437109310202078844450723666505267762564382294\"\r\n        \"1616984584405761190431901079604324140883095468794558317571713910406741983588147750896322217239015660195789\"\r\n        \"35599446360064\"},\r\n    {0x1.2e360651c6029p+749, chars_format::fixed, 0,\r\n        \"3495723738255211452744482178604527955830110169457050715565323051837075097793915869045419749814682707345393\"\r\n        \"7935704146076704637189922374483332301500880617531694966435700931973663656797146377969581204122663768815174\"\r\n        \"61737018753024\"},\r\n    {0x1.228638d331517p+750, chars_format::fixed, 0,\r\n        \"6721082912592892884197305896435679801878082782522381596685281346194817706914936055514139398315616473575172\"\r\n        \"3582381838767364218423428900386923688554615255663544151664465105180194395018816205593085597697340457992620\"\r\n        \"01243453652992\"},\r\n    {0x1.daad7920d9184p+751, chars_format::fixed, 0,\r\n        \"2196269058711356995331145282266004942125027540578994118360011960462533544403705214740007357954957868218513\"\r\n        \"0515293337008075180533249529233350875198357980735191485985215759870956129913862215075486089748283668061691\"\r\n        \"205360990289920\"},\r\n    {0x1.fc367b64a56a0p+752, chars_format::fixed, 0,\r\n        \"4702863683113725194063960973499747891654249089450258901606867986817928359509157131107166631127688744378523\"\r\n        \"7186911133931305617838775969338327695100395080327930114607085822544817999883326112098494441309084006252415\"\r\n        \"055825045815296\"},\r\n    {0x1.f6e5591a0bc39p+753, chars_format::fixed, 0,\r\n        \"9307324517542514697582244145176573210676397705683421188857166552145538571574192836598914525078519041089662\"\r\n        \"0874452920641540661618903444865624546490778050170641236480653815602064266888930904612434348648660578681855\"\r\n        \"108771838164992\"},\r\n    {0x1.0816210e741d9p+754, chars_format::fixed, 0,\r\n        \"9775137400232788245461979249328995347121969007448197063448461677154947355085479118128329526481778292235270\"\r\n        \"6061326551287759687592915176722475045491362638732590059161507195395361478829422139931404206375588728573521\"\r\n        \"807551598952448\"},\r\n    {0x1.bf4ddbb28ff78p+755, chars_format::fixed, 0,\r\n        \"3311384964585959032265962955408561029446842687666536252928361389826655908935433788371333793983157636535123\"\r\n        \"6093952819619349852838092193945849100746223855816339303226875615954020173611648688061774736290148116460246\"\r\n        \"5147231123013632\"},\r\n    {0x1.22340a9f27993p+756, chars_format::fixed, 0,\r\n        \"4296740089682653693619685204778787784222879549477758054736502741042587518192457642311991948337153228278755\"\r\n        \"6223245593515136178433188143859836126303866310125792739941803487391969403811804336856169218976067287564221\"\r\n        \"7165115690582016\"},\r\n    {0x1.c854c0ff61dd4p+757, chars_format::fixed, 0,\r\n        \"1351284488894256863343170670736999106280589629940727361352870919021737282813860003548731361411054650613017\"\r\n        \"5979693662379954907245475777505034921707218865345263170876295764424200712121307128446231005054445073917483\"\r\n        \"68719761509449728\"},\r\n    {0x1.a7ae27d0d4485p+758, chars_format::fixed, 0,\r\n        \"2509198468783754807731074334607032605711544625671057970995270512460643375264697520099044738808832338356216\"\r\n        \"3179133403072384380098770989766972936437787507921796438332243405697413234717967017145922177620585767891811\"\r\n        \"92769609255616512\"},\r\n    {0x1.63661358f7264p+759, chars_format::fixed, 0,\r\n        \"4209617328858550063205172225821872247014562312759675821174391466759774447231632596434331599555608445851494\"\r\n        \"1174841089432312006819740350812602890591275373093111608274027906458049964325438650357074434395519882088005\"\r\n        \"20321808449142784\"},\r\n    {0x1.0300bf26fd68ep+760, chars_format::fixed, 0,\r\n        \"6135661532855285869388899909021584997918770086045081468884709171479140787335530685203769912073225861728157\"\r\n        \"9976366131392745072658904926119270002620328679520460157302155135408495181252847469474891525082879692534900\"\r\n        \"79718987125489664\"},\r\n    {0x1.838123317bff2p+761, chars_format::fixed, 0,\r\n        \"1835960873424024875517009489326813800794881719596271084010300050215417037045759768802256925129327995282374\"\r\n        \"5128929061396141929193591727629831823122413292887614537118714335123297684397196955209175428403825140165978\"\r\n        \"466839424002949120\"},\r\n    {0x1.e3927b4212b34p+762, chars_format::fixed, 0,\r\n        \"4582242303370037772517265893885039611467246975245114775017096258551843583443468789786320930086482741689432\"\r\n        \"1621534738378345133903881085198621733196221263896490459158348094524594289256006654057327248264693927568182\"\r\n        \"907234209828438016\"},\r\n    {0x1.08cedaf963229p+763, chars_format::fixed, 0,\r\n        \"5018545601421532348212036414344703817574522237982615692173102373360462854025661488977284181406693000830032\"\r\n        \"7360291067623446675802184137931993722552424250060175975563339633154061405272636075589386122667206698254309\"\r\n        \"997744334718369792\"},\r\n    {0x1.91fca0dbce025p+764, chars_format::fixed, 0,\r\n        \"1523661683782226118359498355280462120810387201488444694707261852709568760522785950774120035981225647992415\"\r\n        \"3268915648163391081256988008659617489616827001996746290980908042429063287469300251546686342201121807506874\"\r\n        \"6265517706895687680\"},\r\n    {0x1.5297454425c1bp+765, chars_format::fixed, 0,\r\n        \"2566740718632855257682720329872108144883467487982934883991455376873707477105015183243411439956531965728204\"\r\n        \"6508184153037576504248082493404189817144671486439215924512664024164129548551829584530145455399199341923594\"\r\n        \"4180577661756637184\"},\r\n    {0x1.b0f443954c717p+766, chars_format::fixed, 0,\r\n        \"6564151959920961394230714502378331091738070637090186507523556135132147620443368837558214636894653939964132\"\r\n        \"3757357718309683648453607080686817494059905169659449441693854905244032325127240563529969529142354605262556\"\r\n        \"9523937164155420672\"},\r\n    {0x1.393f28adab23bp+767, chars_format::fixed, 0,\r\n        \"9498460772305780158082815662200183788619996980168963578500885537080626445137280799527872282820358818068031\"\r\n        \"6231943703208129193287071326187029635778260356608440247828283834974689386054468533040795027311516162612591\"\r\n        \"1382367174150586368\"},\r\n    {0x1.6ccee9de5f09bp+768, chars_format::fixed, 0,\r\n        \"2212388350553618292420425099312874149231992615598473809512626321690009127813173003495667900190943719071414\"\r\n        \"1747046126548457112475553582140540745337526832671513502626909215811246736089331236321064270002482113615770\"\r\n        \"77814685419605852160\"},\r\n    {0x1.aa7e5f5e5358cp+769, chars_format::fixed, 0,\r\n        \"5172961691829431933248287579057345034013744858429135071862722341405867374003880179589023614028215961960709\"\r\n        \"8551590682320344905318670742656945039835931120666701570376183397568895102563277958752907801635934970948509\"\r\n        \"97541669026700197888\"},\r\n    {0x1.cfc195e85b968p+770, chars_format::fixed, 0,\r\n        \"1124984189175588147030728857463349109632082181606108725108487909044481063280737954738616935134527634142463\"\r\n        \"9949923511787252203981278243393110031850908641735138673909363057517667235391316307036804051909753689540172\"\r\n        \"298591886940406022144\"},\r\n    {0x1.09d290fc51ebap+771, chars_format::fixed, 0,\r\n        \"1289669622190386579505521508298314100924637069061856532549363250469091591549993083219228616468381610205336\"\r\n        \"2794942573420188170207590463294324183021031144947921860119527768018916893440763094280421949876583300156098\"\r\n        \"252472908447697862656\"},\r\n    {0x1.ec76d7e7f32e2p+772, chars_format::fixed, 0,\r\n        \"4778497687103401765782899829107866823662348724264464491426484752300467160540534520506038266413147798664677\"\r\n        \"2258193692599429358101302845147423102623897277011177375231975113197123433649841218533372666759429462798413\"\r\n        \"899670124201699704832\"},\r\n    {0x1.d3759f7354154p+773, chars_format::fixed, 0,\r\n        \"9071740946235158251287920731264087922543112315784837645934036269104431986336047583397267115172715330911699\"\r\n        \"5361329976139758184944638155058103560006767186294083681213986399683839132287337191340066977329985766803820\"\r\n        \"023594898696504868864\"},\r\n    {0x1.60b6f9a6cb668p+774, chars_format::fixed, 0,\r\n        \"1368990064881959941999107885865686935605076541647508860978116265485948578198942963140863016455072112996766\"\r\n        \"4667516382760065619975526997593096805480179373298731763239363650046238044145819507509521293323522558851884\"\r\n        \"1565183013015978508288\"},\r\n    {0x1.a3c77db35f695p+775, chars_format::fixed, 0,\r\n        \"3258574493508666018008553768521673233102666339162590006158823465137249432920844666175034388106202817984130\"\r\n        \"3500039379610492680263601798272490077729409636622352080862648395718996514972162139998925573766807273439211\"\r\n        \"4018704118688163823616\"},\r\n    {0x1.eef5de3f62c58p+776, chars_format::fixed, 0,\r\n        \"7684350108718560325979481137518322482583512302483039083444334579698521690597104346246846782506582514504791\"\r\n        \"2125738690485015567714875966771104682742067063862563612299284919405566108773824093990980786495874767991700\"\r\n        \"6112904357735921876992\"},\r\n    {0x1.51ba28979a120p+777, chars_format::fixed, 0,\r\n        \"1048655120284885337518169926227744033792394532324263004849928007006875812471199069193755306709216330637991\"\r\n        \"9042222290411966518177587635202468049196307870481158562870784314762941147915175052356129505961049598992785\"\r\n        \"28033246763355767570432\"},\r\n    {0x1.9fd38f9f73f2bp+778, chars_format::fixed, 0,\r\n        \"2582312100746456704688510497983240938087288076216159666463403105145689378876467211854319776664742325252471\"\r\n        \"7030763325540754649522816359243310063589936180121186606349690383577731425411204043316011649101011138512368\"\r\n        \"91366615266610552766464\"},\r\n    {0x1.2fd85095f4029p+779, chars_format::fixed, 0,\r\n        \"3773798625179518109583592016493956431363308988441257087538348984874057927950097725103248996261286271801445\"\r\n        \"9504193445120757407907189144301239661918136593193902219208925392669956632345212178865841386145270040898321\"\r\n        \"16221541501954953314304\"},\r\n    {0x1.53a0df58b1308p+780, chars_format::fixed, 0,\r\n        \"8436467969179780625631377211487559312289964624443803691434778920125581556110900971849535077994352112888125\"\r\n        \"9866112492343121758586264732710993325312136019615856768634924854433723542000359250601083417088260802375174\"\r\n        \"77068626899846633095168\"},\r\n    {0x1.7853413f16c1bp+781, chars_format::fixed, 0,\r\n        \"1869605452284401350966455748990065935657282749067601745091617896710631154777985649130718834954210111265800\"\r\n        \"5309841330321848604882393473276054144615855579516887007677523075927100196811708898963044271945765289659745\"\r\n        \"596271845019699344572416\"},\r\n    {0x1.290f64c0a0f5ep+782, chars_format::fixed, 0,\r\n        \"2951623859521487739101901213624124592744216909981376421903987777371997968009748939217464138961035292271386\"\r\n        \"2890286875729093249384003468174984823770703901224171760339808769937674915783537892674723102222457228291092\"\r\n        \"854470262186353488822272\"},\r\n    {0x1.20679eb9f303dp+783, chars_format::fixed, 0,\r\n        \"5731246293623384930592518792088171426875067753335138844047765715105180926544030424537223802071732817759314\"\r\n        \"2906472135329915628413376794410081606252471037985964411085601427663278020515065794450484176067501754271955\"\r\n        \"222237400714209314996224\"},\r\n    {0x1.0ae6422a72abbp+784, chars_format::fixed, 0,\r\n        \"1060777524386811571192682510470248509957696072219117046158801607497241668618913582255749491059035492778565\"\r\n        \"6708385039524821654945192201535605651865304171288436653698763647134905201762897504751962718699517740042220\"\r\n        \"0235531877206380605603840\"},\r\n    {0x1.1fae68f6d3324p+785, chars_format::fixed, 0,\r\n        \"2286747679664497534205554820454828927543556018383534640120745275210123608679924533448915923631726795718462\"\r\n        \"3487958174401142746027141560134475739267031997849080010403748431538207450354945415157572851306313404367335\"\r\n        \"7388907554946695678656512\"},\r\n    {0x1.82f324bb4860dp+786, chars_format::fixed, 0,\r\n        \"6151644498588618172735745322111653547376394984545317383496026169036854401054954348948745430831246702302444\"\r\n        \"7096775770639942903909845800613304121256033397557768223233230631826204287457231590026392480924434621501204\"\r\n        \"0747327614291824074555392\"},\r\n    {0x1.e9086a4bb3d72p+787, chars_format::fixed, 0,\r\n        \"1554907917153526716656803341341787099174423118479183580971929971098600551279942568153827669834650970330580\"\r\n        \"5461720353769109082196396069244292976260367817803845536052864117867862067002385049227084017353940632371031\"\r\n        \"78254440605458957894418432\"},\r\n    {0x1.d652f229fd243p+788, chars_format::fixed, 0,\r\n        \"2990844031338327836891237353397536704971767675697261294098476758674947546686058981804225247042123381016366\"\r\n        \"8374978356069521116571142232050936063138545081542868704073789670857785639211755749310612200689386520737978\"\r\n        \"26470503447254389439332352\"},\r\n    {0x1.4c659adeeaf67p+789, chars_format::fixed, 0,\r\n        \"4227499559860197203222233767875123584297822581753641873717198937790374846968884348564739920913211517986804\"\r\n        \"8924005008223799969450036931121190620382214101903000673561461881968860844134242897684375608705162392591795\"\r\n        \"78450042045898033696079872\"},\r\n    {0x1.101c96a3868a6p+790, chars_format::fixed, 0,\r\n        \"6921556727173319655887206352719470806468048123722709757972998609127519477299193350955438774717540810522808\"\r\n        \"1623379691915880174302604761306788949477588944381065447240434730475228438357558161499124050506798805084031\"\r\n        \"51299257176295521537490944\"},\r\n    {0x1.2feaa8c33880fp+791, chars_format::fixed, 0,\r\n        \"1546112461847910546445348354554596107735033597804106630847643414096179866373830585260952857725317754100426\"\r\n        \"4067492187536698174721711543425404914756440588618774810564134699064876355999283612602885953257730947009317\"\r\n        \"381536957859327362761490432\"},\r\n    {0x1.1c3506245949bp+792, chars_format::fixed, 0,\r\n        \"2891688859897640505584546769937114410872191007854790954272597962268918205318854546446664629639680565380631\"\r\n        \"7083603620047115733397089340005717523905233899895025268253712612400331831340802733561147803039200537312857\"\r\n        \"618649039581864838165430272\"},\r\n    {0x1.a53b315cae3e6p+793, chars_format::fixed, 0,\r\n        \"8571703697432336776259303005661112424926161972106533192411599787181789783810931630989223874694406417468552\"\r\n        \"3298415045821806142729843989226217029888046933855786313871277036806878976792362171343885325239651091342746\"\r\n        \"563574845645114888312324096\"},\r\n    {0x1.745bcebb9e730p+794, chars_format::fixed, 0,\r\n        \"1515437423092638262978661792606846218941593274821459310029012942349890659796552949227892210838643058225056\"\r\n        \"7923072041370855924935681800468808621847966030009447663099018897310419613175132792095915905646233854346265\"\r\n        \"2696067619761155130246823936\"},\r\n    {0x1.ea5c1c862f610p+795, chars_format::fixed, 0,\r\n        \"3991365102553956977414843677791519944343743790311148869394033396640593391345027585196296350367269990471335\"\r\n        \"4504427874733144849750183333296788088457049747772037562065867416762573328521955000945049895640840653170792\"\r\n        \"1573265195554001334403334144\"},\r\n    {0x1.fe4e1de13002cp+796, chars_format::fixed, 0,\r\n        \"8307426908068282803540365946978841862357902074740613326241075620528922761174857890768232952985491976183267\"\r\n        \"2867604799739972210630251318172645992742856821927579552970736456855546954531695286593950166665764538037316\"\r\n        \"4457301122656345267900514304\"},\r\n    {0x1.7cd4c04d040c6p+797, chars_format::fixed, 0,\r\n        \"1239935058473939862037066836327773954243830981321230556331574290302494015706921369193076927157947232372911\"\r\n        \"6213126325550744155497240306155654567083745539780429796709211518313992024634904110755279532028184517046087\"\r\n        \"71159860186649204109959233536\"},\r\n    {0x1.5f73b78bc87a6p+798, chars_format::fixed, 0,\r\n        \"2288561658292481653078407007381331103925098745031711071330343296205097293734492877075269266829308919460552\"\r\n        \"9060821113789935131401962213671725689253950098470905996306499422990661339588450775885820505219195445982215\"\r\n        \"11781291374084313853894590464\"},\r\n    {0x1.b69a2039b5067p+799, chars_format::fixed, 0,\r\n        \"5712118804366145667832800887250609354813890366337728128504160852009563760948598247640707542424040272944587\"\r\n        \"7433960467866392390833301820873588395274966080813386511823961252706217774910416144157537907529737908129314\"\r\n        \"79009600857785548295886602240\"},\r\n    {0x1.c9318f56346cep+800, chars_format::fixed, 0,\r\n        \"1190849015382164461928315809352810998742665517099636576545835465666502659226083121166027373632019722882400\"\r\n        \"6880796304542534239787601078478908535518751474443340950600663728659390276471029585583316392190821272919100\"\r\n        \"890475871653745707435922817024\"},\r\n    {0x1.3401abd9cab1ap+801, chars_format::fixed, 0,\r\n        \"1604524982308389588136171371286056339117115657816499157541428929533472973745493835204494845668092659796968\"\r\n        \"6305092574512088968876212563904777324043086752591850228821125008177060006660886576153892544511940324884821\"\r\n        \"831835718200815935339827822592\"},\r\n    {0x1.9451509f4d594p+802, chars_format::fixed, 0,\r\n        \"4212493492663987282069870516407756103315064532224695147298337436025008475450945614045277189389181165008270\"\r\n        \"0847670320208342765294646599932122764460906189699523260166816565950753728514288339317887195081398510133952\"\r\n        \"380834671272890871310960295936\"},\r\n    {0x1.693311304ae2fp+803, chars_format::fixed, 0,\r\n        \"7526510477008029533217836706512965204545627504360913284782433660866906782601795240020495594009429312405425\"\r\n        \"7485247578525344530160009990515022610474543667187401009294509851019000843576260401621898754055451537764710\"\r\n        \"133944076096837889877193261056\"},\r\n    {0x1.df089519e462bp+804, chars_format::fixed, 0,\r\n        \"1996376537011996848163492602603437495127794008523924859342071894757509158912938350902427917115985800435928\"\r\n        \"6350468855830663667815926292170746949096087192572572966237704650573370437541674493107777514668378661892953\"\r\n        \"4332115383984329784377263259648\"},\r\n    {0x1.ab89beb8aabe9p+805, chars_format::fixed, 0,\r\n        \"3563537496925402543056858551702721779279944490842035581834286172617816179453272341074919578171269082403107\"\r\n        \"9431001734386981290710014877418384909788408128871528946477050155988048786430527173515903821312085439904020\"\r\n        \"9060513455780040766296470585344\"},\r\n    {0x1.46cc5273da02bp+806, chars_format::fixed, 0,\r\n        \"5447736670805846656665513461167279050903754617246093489061362387012944240167651720678399312897003918195803\"\r\n        \"6242638454467435113135932680475257141457664214432930589585363496292167588600276715581165797704432034558568\"\r\n        \"8095697352462571132700896264192\"},\r\n    {0x1.4ea090983d564p+807, chars_format::fixed, 0,\r\n        \"1115649520754066141825316480918547216227289171323499149438066261329661653154086524459648427649786830971943\"\r\n        \"7361717764366564551984078700024030142469279336151783283919122538685386893777627674303720356444516323162330\"\r\n        \"89241962428253771093052393259008\"},\r\n    {0x1.629961b8658adp+808, chars_format::fixed, 0,\r\n        \"2364472232372920253063237690872446146400710959736874190253892071675979723440181782464807358732399469995571\"\r\n        \"2564826445273203285839586934088438487705413425312976170764839421218724081281682131154222867366230870489789\"\r\n        \"95832395381703408449220174151680\"},\r\n    {0x1.6fa68b72c2677p+809, chars_format::fixed, 0,\r\n        \"4902998551512005499121979386692421692075087225195339730719012538687165637654721543582061012112162991857046\"\r\n        \"9293222996503651249004514458173108261277398557745366069257648850697333865449354730396352670301570284464788\"\r\n        \"99210225561647442056843991449600\"},\r\n    {0x1.1d5ddcb816159p+810, chars_format::fixed, 0,\r\n        \"7611315740938819323872953271895211474478635171584276234311828630336066670802750378506600304395259658449273\"\r\n        \"0804170954707332095689951255177723791503672412271913757545450746479319606169521707407309632709639593796882\"\r\n        \"23847143281208387082485955035136\"},\r\n    {0x1.19fad786740bfp+811, chars_format::fixed, 0,\r\n        \"1504196573819294620072221293976191131314995724591337689338444383576314616541453011609664146082128939293104\"\r\n        \"4063007870455881079716967466386033030370578182092136818306440233919949340491000711108339985451730457325151\"\r\n        \"769785159894859363338510334427136\"},\r\n    {0x1.3ae2c0e08d1efp+812, chars_format::fixed, 0,\r\n        \"3359460420577639957154773556272317452852829619828788020649144926132106369426775645911856906989669446631580\"\r\n        \"7906039419673583392967765692370244386385047651586952866565244333476675839923690163169345406150878194065043\"\r\n        \"083480115234578972233121652539392\"},\r\n    {0x1.07a5540e2223ap+813, chars_format::fixed, 0,\r\n        \"5625581093732572236416854419059991991994498811559912626037135945476694864145392239558158835183631144394271\"\r\n        \"7007487728670828857067991157217165524572799961876816278123518260519471151953818299245832510132263127425745\"\r\n        \"862693517199538881917101906329600\"},\r\n    {0x1.956e83e8c51e2p+814, chars_format::fixed, 0,\r\n        \"1730191634549963935228963857706197899605878404309509182469829469997962268328403783011174669150365085584104\"\r\n        \"7699993972684677150016631413169402888903555377860700178101361347206102235441687905789332819243706206641953\"\r\n        \"6392847325840865191718208676036608\"},\r\n    {0x1.b8b498637dbdap+815, chars_format::fixed, 0,\r\n        \"3761446787869432004084730692080982350594833255547042465216645842029569230353458866080714139839104585830958\"\r\n        \"4141396787481704217326088717302817844437379170170392971444715003056624059162595716398338029459517985630959\"\r\n        \"4723079708839024149840998296453120\"},\r\n    {0x1.f84238ea4240fp+816, chars_format::fixed, 0,\r\n        \"8607754656034729561427290991846434064767392401247219233672032402104931170328457753495749992781302088893851\"\r\n        \"2877391794685587259569734402818667907894609702812978464548898674996480210321564492153592126714177787136947\"\r\n        \"2698001655905751301072163396648960\"},\r\n    {0x1.52ad71035d8cbp+817, chars_format::fixed, 0,\r\n        \"1156252925981560513023673029610029010612362487558668509342358557887466871845476721005725551361299230675461\"\r\n        \"8734201369323089831816399817329232592863381700962243268612592850117666906932663256884093296640944090463628\"\r\n        \"56182501376346373114543815180419072\"},\r\n    {0x1.48fec7d03fd3dp+818, chars_format::fixed, 0,\r\n        \"2246394864375403980527326651485669245197727286620258385556923004315903268604175938971458874735319469158314\"\r\n        \"7445290290847570784974917937550331548102278822775549310561617178951205260309221459391881943682444534678651\"\r\n        \"83485659375409167115085108199030784\"},\r\n    {0x1.cf3c351de21d2p+819, chars_format::fixed, 0,\r\n        \"6325983032753726918904466251966929693126179117236422132936159363701941407139819508033767151405383036826201\"\r\n        \"7948525407473371253598635858146097053504774680735754482019607694763760820411748962021488173778012204928851\"\r\n        \"55229266752654874064585229395296256\"},\r\n    {0x1.04cfee010a1b0p+820, chars_format::fixed, 0,\r\n        \"7123352302648311812940977486599229363261654775925341829761368591273751849955008690383072143433739887164748\"\r\n        \"1668106254028095527161169584321562092295142705858087011879671879920126685204347898998829081808527814331340\"\r\n        \"90565968448841286218356104624078848\"},\r\n    {0x1.16ff034ddceb6p+821, chars_format::fixed, 0,\r\n        \"1523998978888332123850341808023231376640526668535020235447451882314731950193068418024079537155527291003257\"\r\n        \"7904995435484867544853612253420558684289105266512226510797182253949450660096518781961412812869756857962735\"\r\n        \"233879680013030703241961011578667008\"},\r\n    {0x1.87edf8de5b8c5p+822, chars_format::fixed, 0,\r\n        \"4281781595885279200969093983754069266765794250026164885822575561843206962781965631728547934791532920197423\"\r\n        \"6177409037100598864435472911580957551260375351969260803535135570444517991763118151440245553428809692987954\"\r\n        \"301004090162477967508729042667831296\"},\r\n    {0x1.669c114e230f8p+823, chars_format::fixed, 0,\r\n        \"7835530851123770953093081028147155644797778410666203544060056438937022323217689692118563142956249032576041\"\r\n        \"8404067879533744997877544132389700374854166750696823903333514961763178001608219775679211864880497413015784\"\r\n        \"159154833577142573195961256835547136\"},\r\n    {0x1.58d031c626c98p+824, chars_format::fixed, 0,\r\n        \"1506816682188536976124153210817529317132690221642794406751235066145605476647359331234683559547435727310615\"\r\n        \"5044335297597502204853441775603760283465417548518949886551088247631916208127990346238716541173557612796468\"\r\n        \"2682475050190476626348021385449701376\"},\r\n    {0x1.e34e95fb1fd7cp+825, chars_format::fixed, 0,\r\n        \"4224054580562566278800555322953830721086485763030663401123107902783677682725866824330966129891633282135040\"\r\n        \"0989972207524406875637464954757287300296947794590995851382436932573238352590829031255025844799715155456302\"\r\n        \"8850116547816966945718645194204643328\"},\r\n    {0x1.63711d42e8969p+826, chars_format::fixed, 0,\r\n        \"6213052410467450431270982463955752348355173033745885014933541691585524013767370983607152968031929306742033\"\r\n        \"8431231775899914561268433126058276909759843058020187831906516203457340365795454903377639957069803699072801\"\r\n        \"4309370022216068485544971660370640896\"},\r\n    {0x1.badc307c28bf7p+827, chars_format::fixed, 0,\r\n        \"1548221225307829013732351507699867200850643838692622432926966118774203067949246826649292137547628864781537\"\r\n        \"7097910782288154181892834450581675945757048759722797843011259402057553060481527845525865412393984431641481\"\r\n        \"12432800361003761689682808487570046976\"},\r\n    {0x1.0a9ffb84993f8p+828, chars_format::fixed, 0,\r\n        \"1864220165682573503248704544573713126420209039174088273052618099771941502058018171093140670039757003258252\"\r\n        \"9172581079437000463650236868314242803350408171226231094176077790370649433717215623690613479838917057288218\"\r\n        \"81800728029892690586075143474451054592\"},\r\n    {0x1.b4b37e4289e69p+829, chars_format::fixed, 0,\r\n        \"6106758858401295192990763513258752902279342216308475928570546668419196513534241765078705675222282547813767\"\r\n        \"2227260745563449247475678199017566904097722140187438878011594369887686491510102675185119821049956290047267\"\r\n        \"53068810448767555137722058562680651776\"},\r\n    {0x1.cb3dec22a459bp+830, chars_format::fixed, 0,\r\n        \"1284392988511442720522350990489730817592865155726864254510601255073031521416911372712405349672907685990662\"\r\n        \"1705804846558955256076772476796097947443390854266265023216884341939532691642354710576066588831667847670780\"\r\n        \"415959665868837863306341265182751195136\"},\r\n    {0x1.540046039353bp+831, chars_format::fixed, 0,\r\n        \"1901808189069232606083254993296292379380305020093059713712129166634331190765923177464970865624014143988537\"\r\n        \"7299585288916853409200970017152319393354685852544254621762314547664713839797551310372046651176253573040983\"\r\n        \"944733060790144155006131906575106834432\"},\r\n    {0x1.ba087c8abd72fp+832, chars_format::fixed, 0,\r\n        \"4945056610126362443442155269122662718800616069058287822687952843025422076351881963897871117005979636902498\"\r\n        \"9982232464755664534044906334523871075990243816865616746254709873074943650481520843847600213234428706056019\"\r\n        \"068656667598654710477124012188526182400\"},\r\n    {0x1.c630424f784bfp+833, chars_format::fixed, 0,\r\n        \"1016207902406094190275298627859289824485403781057097083553634725388418440581122258598691835551052369976071\"\r\n        \"0872056273862002012903688540268455594486445835463898257422670306160249841786788398348038840152794723614255\"\r\n        \"4900694304483602071758702926508016533504\"},\r\n    {0x1.85e91d57faa7fp+834, chars_format::fixed, 0,\r\n        \"1744783175737113597186847175580875344959143617382329610748081764033990986358949500374522811749920338252020\"\r\n        \"6953932415196777197734382850955740955244809434074211350191162855135535868180438163052388866943904443337965\"\r\n        \"9770369684768166645860973519914758307840\"},\r\n    {0x1.dd2774ff825b7p+835, chars_format::fixed, 0,\r\n        \"4270366017096213024430304816302644483514757455804197397017597895636270238670332252715517948929123803387223\"\r\n        \"1920206653955204731086891213619258712521980972880073023676067188100942561595631388393387964151624752024353\"\r\n        \"8505407157611049161933934195472429219840\"},\r\n    {0x1.7fb49456f0d6fp+836, chars_format::fixed, 0,\r\n        \"6868063596101005477854773261348464798524701803638108696305813468648434233818175939873557846428699096151224\"\r\n        \"2386052408235307774656820233556520688039217201186384292423872595060052482109916471906309998393757750274297\"\r\n        \"8451517889868589043980171636988524363776\"},\r\n    {0x1.fd01873113f1bp+837, chars_format::fixed, 0,\r\n        \"1822171630415365027221376415900069388448512648916632407044265005972434698491503673653271725521188620061704\"\r\n        \"5155914097009770418589105106014891964691625388056866497850700742112600992456056688660396679887212004750422\"\r\n        \"74986829577278501646953779544646546882560\"},\r\n    {0x1.16ae49bfdd770p+838, chars_format::fixed, 0,\r\n        \"1995278255623411223561838811400002441969697691888401298519688370608009240561398085852420583577874589413332\"\r\n        \"1086828543677591975072573617228550610964643982443403065033000858901323188317634398220391439107359665243029\"\r\n        \"17790375371341763162002626475342277115904\"},\r\n    {0x1.f3ef2c4210cacp+839, chars_format::fixed, 0,\r\n        \"7158784748789307949969845835595916478416054901970935629863198516380218616008225858778587086953722042834129\"\r\n        \"5915495376232539137464579618172301533684206003008057044823541560840931727308747349996468853672501067388492\"\r\n        \"88705506701643342594415108812000139935744\"},\r\n    {0x1.ad8a77a22e9ccp+840, chars_format::fixed, 0,\r\n        \"1230158021942028825875071007396724280360324415718175980720572439129494273595706678295852991935378192763498\"\r\n        \"1033217885766306081107285243057170341353162586149662027251521923877920840694271005199283603156734903699862\"\r\n        \"760042508068641111106629716312501667233792\"},\r\n    {0x1.ee0e5ceddd957p+841, chars_format::fixed, 0,\r\n        \"2829845067072680803956902071361137076975224769326587773897721877667181587196689079704822930978717609673291\"\r\n        \"3155757502472485831512123279954649837442464127269154272613516821521630339389264106498596269220549475390239\"\r\n        \"525928386877340201687282618195535303016448\"},\r\n    {0x1.5b0d6e76dda47p+842, chars_format::fixed, 0,\r\n        \"3975680900562016767396350006329006137574382693692484391606729898396076898830929892237233312586174934007206\"\r\n        \"0319381459938511026797859287500066223711437605222773712234232452529346847725476192414516164592103296163916\"\r\n        \"103009892150560428500460332836507332116480\"},\r\n    {0x1.7c22aee81fa83p+843, chars_format::fixed, 0,\r\n        \"8709330821451115252810768012306876235448235163094084495303789891774493820572710069011933753303159801293283\"\r\n        \"0589918351604190230926986452939490818860258825739176922187483816730793944102196336984779405191945284891319\"\r\n        \"207064962654856171425270750844538014662656\"},\r\n    {0x1.b84441e72b707p+844, chars_format::fixed, 0,\r\n        \"2017400597162605500108220584766212678179271387642471349142610713520015337763696332779691942567060685401387\"\r\n        \"6918822816913092901838605660349967306574048902985017926926426922160650954888618275276621627594251124039331\"\r\n        \"6495487843867292364651919029871904141869056\"},\r\n    {0x1.0552b62c8e128p+845, chars_format::fixed, 0,\r\n        \"2394882217848989055998021901272348484946734193824049053308304008127035096528397948456683197420620656420009\"\r\n        \"7781339190803475544405899998776573917536603926647654712961320719180783745038114302763496065029848115885312\"\r\n        \"8823296817588537874887085684399549987160064\"},\r\n    {0x1.81940cda93532p+846, chars_format::fixed, 0,\r\n        \"7067225914874603278195309678783902788952905693466699540646916425206238350149546831618361587886219325008989\"\r\n        \"4282472966768898902676484983322004983046061423598299625822191743493982170676938693601430832593152728997132\"\r\n        \"6515959112034442052657625648636244137082880\"},\r\n    {0x1.feca14e0d5431p+847, chars_format::fixed, 0,\r\n        \"1872441344926455400091247936601365542939173878682525765085721936043640550857611134838492817476006232364176\"\r\n        \"7835596392820292836312216640738452980201778183460534804882548357947050721479578811476564710237054936967982\"\r\n        \"03822670734824380038945947831900155722858496\"},\r\n    {0x1.8827ec23206d4p+848, chars_format::fixed, 0,\r\n        \"2875114620119347314751104891458095780576296877403992097321919590508164098045297604906359687771050438445633\"\r\n        \"7894213348208064628861252826958842376155582047096680535216544097198269378299696222611619735831458977428420\"\r\n        \"31555441896836579508527488730801254267092992\"},\r\n    {0x1.b5f64571e8768p+849, chars_format::fixed, 0,\r\n        \"6421888796776797314705011140285443102597625958543774418067324499776215242475777117088431755748962538349353\"\r\n        \"8836139322647535605059491506707955299358332456485148910350945632728518921433840059928128363509048830632031\"\r\n        \"54505532895528456078517711521452946616221696\"},\r\n    {0x1.008a415b3183ap+850, chars_format::fixed, 0,\r\n        \"7523354749558753381321504126418980468327364467997733415241858639174563751769064813649450220534917850754493\"\r\n        \"0498222695867201696750601432670286057874645177617496411241789337938266747670617067998955517887930280575309\"\r\n        \"11086833369059608532445683217794338830417920\"},\r\n    {0x1.80ce08985395dp+851, chars_format::fixed, 0,\r\n        \"2256975509232508697520349372403327938500010740841229327571034734529741007531663576440705215671731130503406\"\r\n        \"7651464732222278229950875188438096097098693500593626499599354701491292045641155779313893754223307594582684\"\r\n        \"179285274438822126930926929605644194834022400\"},\r\n    {0x1.c93e2e3575dd3p+852, chars_format::fixed, 0,\r\n        \"5363685485901033415692746617568400373839471412857340052632708960330998535677262977256461309418795083601149\"\r\n        \"0798191875830540965012329992024243324117031846353213527619614592845421867993288949952792623418731091948867\"\r\n        \"505567571032101385441229409672592337764614144\"},\r\n    {0x1.3585fd503289fp+853, chars_format::fixed, 0,\r\n        \"7261725338002667344403557962076252731488250874157549810506892522025645778055352124763904040337562208354323\"\r\n        \"1648655026449962873077602676162884366704660038431773595102305961345607259687165580266364076404492328554914\"\r\n        \"262493008301528885911022370188177304688001024\"},\r\n    {0x1.9437b5f9e6b1dp+854, chars_format::fixed, 0,\r\n        \"1896669117686693401777021420771323384015443949488432429213078011540411126315791788541394387891583182076222\"\r\n        \"5058330334818765453192129841460076462100278905976046462701327439153034708797371088216020877561782110688248\"\r\n        \"8293831053109873906677004142654823373750665216\"},\r\n    {0x1.da62d2c072d77p+855, chars_format::fixed, 0,\r\n        \"4451826363670248396549505385686540617023686346289028207919451611843297399671101675106088626630849538390346\"\r\n        \"4274615058609336233573902160355269482964859583649202118665701266245040516275542749883320102331873934011769\"\r\n        \"5425270114186248731818945622702296059546173440\"},\r\n    {0x1.ed1dc3f094314p+856, chars_format::fixed, 0,\r\n        \"9255196758728659170628432222281064940522665134527304285689591325037815345134519735549576304322147319069694\"\r\n        \"6061186095546366289667553400008860697281408511467619926809726405412032641298125263623772004155953749934964\"\r\n        \"0773600892533856516647510713166368494906769408\"},\r\n    {0x1.ef52edd00039ap+857, chars_format::fixed, 0,\r\n        \"1859326412250149517440318386767823383636145550418147260619727093181932132349756416174915336580715499132256\"\r\n        \"7239047603041733193284570448432621621493452795476340307700011017173112736992081146083085951648580275260201\"\r\n        \"73336192319696495016121803920946730655041978368\"},\r\n    {0x1.e3bb125744a76p+858, chars_format::fixed, 0,\r\n        \"3631616735798308771484482403701891749284436082651744295745696697342549405994811692287823083013729596879413\"\r\n        \"3601595743191760740027506247438700268348905775276841544555486608339876006515235523778892658740265032528362\"\r\n        \"67137258982023926052809172133449146986873749504\"},\r\n    {0x1.ca0a9344ec42dp+859, chars_format::fixed, 0,\r\n        \"6877505680971993677356223994766405151817451988281518147786054815774896356806164354151008565525247288890027\"\r\n        \"4616992886440167995443209864499119340293256783020656323405023028901182987695422028798186742630385862743115\"\r\n        \"15637490526902098135179090001625391964633432064\"},\r\n    {0x1.2411970d3d9abp+860, chars_format::fixed, 0,\r\n        \"8770843055493249554337003797751135193930869338351211266532326494187446377060919013016157045519857725860413\"\r\n        \"3463667990793725821857704198963233115305098870860255165375119695025968781016709927809377866554971062327795\"\r\n        \"18706602377059819914819060153907843977606856704\"},\r\n    {0x1.1ec5847492eb6p+861, chars_format::fixed, 0,\r\n        \"1722353804283123934154885356186319398364249521348739434817004802619859209033620424007877073816549604463711\"\r\n        \"1234221725032105102445473636296300051447379818587313307592113774148603508162327681282960135174331968357051\"\r\n        \"909828327505871566528836256883770889417414148096\"},\r\n    {0x1.1cea572360825p+862, chars_format::fixed, 0,\r\n        \"3422411361841638766098396890912778062110215083235591295477425870401383700624137793701609836743389409704423\"\r\n        \"9954855931215654655245594021586821160094007218215126558146592472447256293895464127754087059265613739944595\"\r\n        \"777869883504853717504448659641688579757020545024\"},\r\n    {0x1.24cde6b8208dep+863, chars_format::fixed, 0,\r\n        \"7034346313302069062208036352091525036813417238043122241246694209155837679835944501243406823556247629126691\"\r\n        \"9226348349396456332785024497156913097466497146801025653409515217997991299068775518325672380319261943020463\"\r\n        \"197815031497056680470826442214372237094403702784\"},\r\n    {0x1.b585d7749984ep+864, chars_format::fixed, 0,\r\n        \"2102214352271264253492770247036383359536174278809825156593980866095788231465504791195079200685516624483476\"\r\n        \"7974238452880747833657553115523757453706247811119231305566117991707028803571386513969815087824748113955083\"\r\n        \"4505719033737546841534219073919609942945929625600\"},\r\n    {0x1.9d037445325cdp+865, chars_format::fixed, 0,\r\n        \"3968903357983933358608727332954549720255202522310155795436817007368559434650835388166519178973310116260096\"\r\n        \"3383266612663095036871450059647424477583739650992874497048749911010885461405122997713224429117789959480089\"\r\n        \"8868953265027415713662233602012993288552077852672\"},\r\n    {0x1.164c006e21d01p+866, chars_format::fixed, 0,\r\n        \"5348655415676104112296627231336027614772247455222989517318724204212535141535787074057847747019139160458778\"\r\n        \"4754476204610495001217242198509021954156308395167323086093598109092711835065649588273506598990479176828659\"\r\n        \"2793842156241914783340450390835867251603190841344\"},\r\n    {0x1.b1ad1c32ca51ep+867, chars_format::fixed, 0,\r\n        \"1666985705607390429587775732842376945344938593849607460304845439141852821517546371531540378752848387892102\"\r\n        \"6973498524768435298612726230798966730370437462696763889738984928558335195928667058746022231367700484346228\"\r\n        \"33020129626133155057078829236175711168725220589568\"},\r\n    {0x1.48aec4c5297d8p+868, chars_format::fixed, 0,\r\n        \"2526813006151518389667254108319381996281495836901716186191646269200481823010555095296010845425738392254772\"\r\n        \"5943004728504424314232279742164538882547748511112862045767026624443840850898104066993831432965637261265926\"\r\n        \"26063461209454637519696384115499033283572944338944\"},\r\n    {0x1.c82791a9d61b3p+869, chars_format::fixed, 0,\r\n        \"7013556395550644732713437677960885824232179454919940941733675843924747332970407521161486450429823685670910\"\r\n        \"8949158012385329466580458908760752813984573839567147974220450311565993202087303566982247820891777751736306\"\r\n        \"69756457138689042468036550644721521533789925277696\"},\r\n    {0x1.6aa8c3fa4676cp+870, chars_format::fixed, 0,\r\n        \"1115205775476796964301853677986532252724053391631523006783932486795640689627158211225755787090339150921580\"\r\n        \"9195632789412681309373034474766406403061693337475881591270220542310410239308185757421756844791871208146352\"\r\n        \"914785075306301854988292533485142861808237092536320\"},\r\n    {0x1.283c03e3922cap+871, chars_format::fixed, 0,\r\n        \"1821888512887940305090770184170025435370538532340970862763355080572458243737111367835994275658085505961990\"\r\n        \"9538709666000002011321068157020717799489188568193711493428769991799596587365795492155389826329926058586931\"\r\n        \"943076794661977482279539782871784104567717178114048\"},\r\n    {0x1.8cea9120f82c5p+872, chars_format::fixed, 0,\r\n        \"4882195462759246829703414410105290231642364141974658055501208851097584791737463457393972405597895853250544\"\r\n        \"5891082483486470444055187191754168905827274986635863594922760299653897737620629889319691907799041544243274\"\r\n        \"680302980924347818100188562495929432829251712712704\"},\r\n    {0x1.d973ddd6f5b77p+873, chars_format::fixed, 0,\r\n        \"1164723286943979714412861252695173553894699809557870844274049721549991630300598205809621513464867749602277\"\r\n        \"8358864404661060686053224949400602494602798264027880378735346953581981252068246346395442398647143674042475\"\r\n        \"9351730369993756319745282998559730184772104807776256\"},\r\n    {0x1.f6b246aa65daap+874, chars_format::fixed, 0,\r\n        \"2473329697422188379677866136282734288797075908262518592553912042991205032900868671443809141867214598649217\"\r\n        \"4712383120756613999577307274079478417359093011890491477801895294832335120235586751351155563827535637086305\"\r\n        \"8697535795005475738555744173010248664718303031197696\"},\r\n    {0x1.84c43fcdfd3c9p+875, chars_format::fixed, 0,\r\n        \"3825561477223161940909066356275172054969566444174064538170425904720803636562220825079748903740377780168750\"\r\n        \"2125182070591173860405139598415006826786757186196918837171900669579489297074184154948051992668950786538289\"\r\n        \"5043590951293226573743254266501415406206108651487232\"},\r\n    {0x1.0d0cf61c34917p+876, chars_format::fixed, 0,\r\n        \"5295052253043566414814853105036228490760127517204856884408776032345879648761285187994569004351367730582363\"\r\n        \"1102796350947825488118113691790816687071197390110822056596096408387588685451868082682101442224663390047094\"\r\n        \"2204464313973177246167132074412483179319922517868544\"},\r\n    {0x1.b7470f572ca34p+877, chars_format::fixed, 0,\r\n        \"1729040905959649116039266062978022412098767092460049212752183312254455963818193835565116157857112293790820\"\r\n        \"0473656272615115635506694725695789350352789294789049086487856655594758061394221120471704052919548629963620\"\r\n        \"14302506768477688217193036724104566863122371314712576\"},\r\n    {0x1.6f579373cf416p+878, chars_format::fixed, 0,\r\n        \"2891791152281736301264549189434588087795914065874816462645721514493356769747884874824655769404114014714839\"\r\n        \"7377315468913188395342221247645370902831663236894162732903279151485411243258636823652251212667685402060878\"\r\n        \"88147820900177311817262558184006103887903947191484416\"},\r\n    {0x1.53e61c25b3dd6p+879, chars_format::fixed, 0,\r\n        \"5351505058163175503652058032511868767394723684533712565005116472708972201531957327960367320564218058163391\"\r\n        \"8282724749280618985202123345078679545965226942036726728362612905208892639318252391998042303703012201843022\"\r\n        \"82653816452437377175209751915703117701073210525614080\"},\r\n    {0x1.58f3a1aff6692p+880, chars_format::fixed, 0,\r\n        \"1086211736015682871178201808371556770114085500668976884921131075669192339015059615536150975742301212266201\"\r\n        \"4754360662152557532516891404769476679247276552896246224430104845687946909316451861550395289285067068085578\"\r\n        \"438933939908261673483684160060573765056449123499114496\"},\r\n    {0x1.6f410a840c9f6p+881, chars_format::fixed, 0,\r\n        \"2312878548854693148927226057436939416607481867761090154735580617724218000218069708609072504549106446673135\"\r\n        \"6012755303159383848137622563092094031187881508973383084384539684615575106546531259506154293856692731122850\"\r\n        \"835008617650833500338712484495998333181450026401923072\"},\r\n    {0x1.c55ec45991240p+882, chars_format::fixed, 0,\r\n        \"5710434640774436687944252402632832187382931183484960546332215146951620929538763952710132764959079242165178\"\r\n        \"2951431574791056980025135631843782634495352278149730287773075570419732894928870641548934721248253607083129\"\r\n        \"769835264604896319470976595601519978424881761413496832\"},\r\n    {0x1.c4390577e353fp+883, chars_format::fixed, 0,\r\n        \"1139196396986594757331448843265504374699007604247900558085799169137172910546920893033401160303193176552766\"\r\n        \"0091780587343007352327219771495560339070418923068233497051337143519196747439316990323902864187453335448826\"\r\n        \"6172291445223237400317190676258012429832003316365656064\"},\r\n    {0x1.80024108442cep+884, chars_format::fixed, 0,\r\n        \"1934716715728560130377491523269741559556228665287449407899292044892513832493911335485524695854150038538231\"\r\n        \"4141665000205632676217046647143481267927344531839859463734603434565955221843700375092631112068208053096052\"\r\n        \"5914602333952472305588169963643877194149734083891036160\"},\r\n    {0x1.d3b49d281769fp+885, chars_format::fixed, 0,\r\n        \"4712796592581909901464405653979535403089398515730991561956578413609172347048908316116205111181226290245342\"\r\n        \"5226280174204303599890024674277497778601021197796448799795592252510655609106998838901008333274706593494509\"\r\n        \"8638325018724512951515441851702692596765254267021819904\"},\r\n    {0x1.e1d71a9ff3f96p+886, chars_format::fixed, 0,\r\n        \"9710448034768052672438865544056372222995727213376149307819679901447985404814649941002228957783222378765871\"\r\n        \"1062208242783252241446793505138663514822554836844556379096450419132358720919983927412907785103887365784823\"\r\n        \"4049424161572976854377951240964017540898697569732919296\"},\r\n    {0x1.a7027ae520191p+887, chars_format::fixed, 0,\r\n        \"1704969060094782137012516806549265874882449222201912813733844769685659623879006461411669620124848296484672\"\r\n        \"2518462807667744540705666302709252842576014145658047281594604891967429804362794845167186197178572452825634\"\r\n        \"39952765212043058091006226485989331945084763383877599232\"},\r\n    {0x1.07cadff975a25p+888, chars_format::fixed, 0,\r\n        \"2126466744696046684318576412480136845262899390351427851316858719774877299823980329883929311149178616597969\"\r\n        \"7663098254550908257893030425271048814655986545809835832964003552304933355297148396313644011966126361581743\"\r\n        \"08868271748374352726432722496121159510184514510133395456\"},\r\n    {0x1.cae05e4bb900cp+889, chars_format::fixed, 0,\r\n        \"7398129672423321236891546220313461863382778134828859908120447392860538203573489607075482174702569716820477\"\r\n        \"7583116464493949889475906863189257955793241183126856649701183576356686203323841536973682145865612956531461\"\r\n        \"78255710476500506024135400500117736967485460947838959616\"},\r\n    {0x1.2eca1796b7a01p+890, chars_format::fixed, 0,\r\n        \"9763305417386078757841193044134229981258193838309690644218924513612095217887121067326401043257117670497734\"\r\n        \"2514487550716649052565855329517679750642028726369749103281829751867350631505109649754054709211049472430115\"\r\n        \"98819166228787969713283529575588634229583035259655553024\"},\r\n    {0x1.406a4282d1f80p+891, chars_format::fixed, 0,\r\n        \"2066327308007577766833899464818023159095202282183745303888528727906769831359206965416391205884101072304850\"\r\n        \"8495601646678371226001698307406776245558511131355442285854719325498394303806171354078769112539750147173245\"\r\n        \"571337587193911747858038040870387038252781816931388751872\"},\r\n    {0x1.c19ff8bce5676p+892, chars_format::fixed, 0,\r\n        \"5799178955588580313832306342422037232935263407438997728060381032097221940423277929510634820591793468939452\"\r\n        \"2696868454464534088801848427247833969714525921428289335535887239762367821662440215785554881872891842616713\"\r\n        \"432471899850352776136551900415744006197797151659494735872\"},\r\n    {0x1.1fe38d5e73e29p+893, chars_format::fixed, 0,\r\n        \"7426275326973986307109725841089426303810630611482086956620672977458763980477014672584491894651874473403114\"\r\n        \"3021208649756677091082854170767961435325955672189926474505080435972623659757700322004879574080770168925556\"\r\n        \"162933649281172853594080068740031755532479512733798105088\"},\r\n    {0x1.9c33b1b47ba39p+894, chars_format::fixed, 0,\r\n        \"2126601811602286541187938193096706979065079846562191464812921314485909577776359845661852533080170964146096\"\r\n        \"2028398488852935375727252011109343683483602631716719725691820861554885109306800026106728345769222998602010\"\r\n        \"8923825094600902604570400447656671508873522451105426964480\"},\r\n    {0x1.a26d55f602cabp+895, chars_format::fixed, 0,\r\n        \"4317436423117040120255173529974772254323235675770027155253316788607303528397784489420760216277657108415801\"\r\n        \"0663748782798132127212331576235229379897954206215901379520328422222986940242262655513958777505518613483473\"\r\n        \"1324943467913151240603384480045011193118883243399917338624\"},\r\n    {0x1.9dbb95083d899p+896, chars_format::fixed, 0,\r\n        \"8537997866147937932086834687042925869634241520388951292562346438046647370424983316565328470216235333526243\"\r\n        \"0230771873812455596864771052946798377042963587130199342368960172506445248640601133589873999711363352992996\"\r\n        \"2577600432036682866890623144100588419524680589002758160384\"},\r\n    {0x1.6af76358f5a1dp+897, chars_format::fixed, 0,\r\n        \"1498071428134464007780032439163174763167202332182014380288094036026713263422148028378476693939489341254974\"\r\n        \"3315175699118176690271333694409422931200364970973511204512283805793412413859670303911008205859277025423927\"\r\n        \"45474290298130286461010207645790970715880496072204117606400\"},\r\n    {0x1.158ee8ababa48p+898, chars_format::fixed, 0,\r\n        \"2291132798223344322425528260625168395481817822410114209681417059379907822605362481686082523041084930740179\"\r\n        \"4938727064039609130634410288293576360996716827534463250611775991152913987383288931208041580642553098466749\"\r\n        \"31418822021358105569854772475004960990822479556624116613120\"},\r\n    {0x1.e6e6e63b2d752p+899, chars_format::fixed, 0,\r\n        \"8038363677318396556327995029242470843427070979195756285674397867806939706054063657340754465439219700365983\"\r\n        \"1038449891623303013878338875318325631427410892018306533606911326540623970940303221704531171196604168492964\"\r\n        \"37886880687688620940240142624597135728868058798902940270592\"},\r\n    {0x1.efb1c88f1b917p+900, chars_format::fixed, 0,\r\n        \"1636704223662971872926840290537429665604677025536594739761280558558457785326068421608580561357786593980305\"\r\n        \"4001782845885335284671227368945859246103833671693334164044042289382713736631949286817233118852275703561244\"\r\n        \"866825763146062984617418588471703105453076171109553535975424\"},\r\n    {0x1.09f8f19708f4bp+901, chars_format::fixed, 0,\r\n        \"1756397294592382415052517689161246267131678221066068467955384132387050320961040549809226331126283062084869\"\r\n        \"8166590963200352421549351353875253525073670122197955377023314616064284302191866777213148361838762790664534\"\r\n        \"151448437648021580687531829596950159719152557277080794955776\"},\r\n    {0x1.4baeba8c6048ap+902, chars_format::fixed, 0,\r\n        \"4380651719659701842753667118788096548119882730465151319847756488243301147358915122419429882591601057332012\"\r\n        \"2560946841358828401716933827331252587490410058843369730851775004171339659600872446832576319585490739885084\"\r\n        \"627694863349688275377814547997028444578550781519051836358656\"},\r\n    {0x1.8cd2d20b35045p+903, chars_format::fixed, 0,\r\n        \"1048198470642523089013530392748711464398080640979325475829251742340865045400400469041038616402002492140675\"\r\n        \"8023326193163199208178263907297254325852268667229134068205337257475898950610434088667461413488546122578876\"\r\n        \"7794959454342911064675144442738585353876408558614225881137152\"},\r\n    {0x1.8d927eecfed2cp+904, chars_format::fixed, 0,\r\n        \"2100352450013366284006250575121905479173193823358442030929326332974074473721348101789506582305920565707468\"\r\n        \"8049500391598287165020222155439212117567418053301191773649724638145328284276963660489615382389845607705999\"\r\n        \"3174472058950185123299125702872712090700453722243307694718976\"},\r\n    {0x1.de6575ee0f842p+905, chars_format::fixed, 0,\r\n        \"5054683304672061692864435304560463853057759841471498625299266222670932528434682480388950556864210430734961\"\r\n        \"0745686492335174847122681791105437393107199395330577293772004982994402169453900947397780936299569536029307\"\r\n        \"5326737012260339556128535967312245217254998376141704004632576\"},\r\n    {0x1.02c1c5af5c860p+906, chars_format::fixed, 0,\r\n        \"5467994685893837449997609347765145422775816265185433717909013393764555697633751412155483408337916351152336\"\r\n        \"7881555527904092175910124413639262604316896685329523998863702831302843811023239789592084285241318631843763\"\r\n        \"1699837025581837989426185144833604274121548536678718694752256\"},\r\n    {0x1.2768e4c0016e5p+907, chars_format::fixed, 0,\r\n        \"1248506802584477596000296381325595823899084298806631818341080575665422070104596445969399915381961342690079\"\r\n        \"5383590162064612193316865424619794643903302734626850573312008182104701579872562992665748874207984281817223\"\r\n        \"37305318589783277454941621557207209980815620697038786742190080\"},\r\n    {0x1.4e3237606f16cp+908, chars_format::fixed, 0,\r\n        \"2824864037182867265786832939505776926630190358252825076250422918149873869976549288344262960437848810553667\"\r\n        \"7304966408485930117454283136933325649318713255058864473449520856540751730462432817977102406488174610171466\"\r\n        \"88589267521771449097578821541542067925624384510543111693271040\"},\r\n    {0x1.f05eff930a17ep+909, chars_format::fixed, 0,\r\n        \"8391364185949281078730467478434105301469327044667898156427634520643283841258489468377232362710673433136105\"\r\n        \"4141658193657015933422048691419008684025794061262560633236970279407026026036348678823852303620175883505767\"\r\n        \"75298560150181764281568949818405610899480408885000428278775808\"},\r\n    {0x1.a23308e004343p+910, chars_format::fixed, 0,\r\n        \"1413967563097096406875742717145065364248098469922373112994589166932341330249858694062498748232834710600680\"\r\n        \"6484626321798080789159899076997530742562675118931815996780577004550133730682895284794882090573608603158127\"\r\n        \"782382700611832530867974120984653500223207142925287346782863360\"},\r\n    {0x1.adec4218e0233p+911, chars_format::fixed, 0,\r\n        \"2907211624912509104293964104641252481386999589819741298574261094284127769400019140858119197500533647040686\"\r\n        \"0867099952709291831619257475813220345780370284209521826263838930895900491215237741201831235226009613342628\"\r\n        \"929616172359221046711196391821853929650939211266126599721844736\"},\r\n    {0x1.43575d8295151p+912, chars_format::fixed, 0,\r\n        \"4372977278689427877236502163972562771699874994097304454599200555409637724464561940790454875669360177626160\"\r\n        \"5615295200492259789871959536407924132018575110763477868487909192353678882153936012938840005244167449993900\"\r\n        \"225872455306119622800921723936421051368987504900833416633647104\"},\r\n    {0x1.be237fd05844bp+913, chars_format::fixed, 0,\r\n        \"1206746209172920482170599633284351836454918481996205499641452818517689706180565661779093468811074768725352\"\r\n        \"9554430671093693945109004776514605936882161265486545965646225296699839245523651426685943492273535620908804\"\r\n        \"7813317803540270554003913049746492043246213723402668101888638976\"},\r\n    {0x1.9b2ed63fe7c22p+914, chars_format::fixed, 0,\r\n        \"2224391242910452089394265492861286224565291679092267752042654313557463335787427426545405741454442859262956\"\r\n        \"8379696465864381006010330236280104796233517428393217620546060560500561730793581895811886061533870316879439\"\r\n        \"2925077735391135331507600083390485205139796785562476991788089344\"},\r\n    {0x1.8f0f2f60d3781p+915, chars_format::fixed, 0,\r\n        \"4317611102271228016786766022531685100130220110302580177975195343044698965579434264332022946212614737569659\"\r\n        \"8605775461407182773007642219213516445390389123848992334909970910238843879068149759722430499092666200101257\"\r\n        \"9367979653974531063520144552196830827397549438193507868325445632\"},\r\n    {0x1.0f15d62fc5633p+916, chars_format::fixed, 0,\r\n        \"5865999613363234252700168815533860482840110507026517794916844472138470831888862579919090376343668284567592\"\r\n        \"2730628471596350822289204633373699926178697527728077742905055274347940911164236314416470252478837343332484\"\r\n        \"8215428458862120335468197775176023691718933345373884546130378752\"},\r\n    {0x1.a13ca388420aep+917, chars_format::fixed, 0,\r\n        \"1805713053858883406104851593475653439099582248912919271115374307068690633711321393048815859078302345184508\"\r\n        \"3465161474658957443597810256405268781492023550128803260698464598891187343705079596513727680472912274227377\"\r\n        \"09200512048695849494656431906847973487558358759169627465021652992\"},\r\n    {0x1.362f096e14122p+918, chars_format::fixed, 0,\r\n        \"2684819410822477793708256238350630736813343293691974759958661230424045665709441797057694534150520273102535\"\r\n        \"2063275298234271972808874370984715108465723496226338093227554271807748758643262677764928395101867239839748\"\r\n        \"93363047437618046657896564635520646493576084143889699133523492864\"},\r\n    {0x1.8fa644035b86cp+919, chars_format::fixed, 0,\r\n        \"6918394090981146226785687442953296005321447370756312589232517452386875269326743628444757932344169576551728\"\r\n        \"5646175201331338042161461746613473883912731283814472816602655230909845500767906523138071198103622194492559\"\r\n        \"16170496306109571246026337759461802379014512053313539039259787264\"},\r\n    {0x1.15b58f82ad041p+920, chars_format::fixed, 0,\r\n        \"9614934849906352674358034435479122825920101781110432900338739296670040296523161810516872068575955352142297\"\r\n        \"7296912242109228430307817710278651885395410719800083878262080058331389980609961031707718320455514485161454\"\r\n        \"21691615264016637411219377961498887240480935611881565575031291904\"},\r\n    {0x1.f7e12b4722058p+921, chars_format::fixed, 0,\r\n        \"3489094951176538191756448922762501897909321313118756025897457429641264386812815448542183831292379977515087\"\r\n        \"5900331696123219592163852102918951996190712669180312837102264190402832310860371995836019024677086930099795\"\r\n        \"038164349707939106070027734238634052910612717651260495359532597248\"},\r\n    {0x1.b833396267bb9p+922, chars_format::fixed, 0,\r\n        \"6096297720785518608574674377078686626285827627514784985195986467454224269253458521661432057320196649552268\"\r\n        \"4402506847391756764778571074538281511211662153889677898205224268147436074860209243421539375176420987837673\"\r\n        \"061179473769012230731773379533894549326703303424138194371446046720\"},\r\n    {0x1.14ff9cd90c1c8p+923, chars_format::fixed, 0,\r\n        \"7672262077744884713006179696715340903528000014352038531009845561189201595373630367297725355798413612216176\"\r\n        \"4185528003926174615453610917327502734566699395900378162311162518292368170942093585324272092751570123402213\"\r\n        \"897816199751137235767500308035447734094150706669707498282849140736\"},\r\n    {0x1.3b1721167a5c2p+924, chars_format::fixed, 0,\r\n        \"1745464936311234645811401977433317791686625810948837881843693942930207804590615270733673133973235453137169\"\r\n        \"4122805547505004347758078536486493581755512213069064244897552740702857411771169051007082046815909825346386\"\r\n        \"1923710066771866278518787343952413380888028548678629320352600162304\"},\r\n    {0x1.8a85c622c377ep+925, chars_format::fixed, 0,\r\n        \"4370970349088264546054714374521499700800536247675600541593305086751230639015535006074440112662211818338562\"\r\n        \"8893591634130105303841351355397209148823854049801509535957224449805744852508078737748916601046347509145089\"\r\n        \"1077867871890421144700651238367267845567414870002937756298860560384\"},\r\n    {0x1.e4116b8770eb9p+926, chars_format::fixed, 0,\r\n        \"1072611467186610255195699506318180541083425968946164931134440429099562983560928544709327414517696838220957\"\r\n        \"7691730267516961838342769956003080500876256414283245766395028552439100716792168169716485434629515242084910\"\r\n        \"92988143024833061601691689500187256255660717629109506653574802702336\"},\r\n    {0x1.2a7f9aaaa274cp+927, chars_format::fixed, 0,\r\n        \"1322842383136168734928622730847522068939123185484208729581124710591394860823608943009661178928087703936241\"\r\n        \"9368574467625772869761730012815322556071849734683009244912396242799723939287778432072347819320371304931625\"\r\n        \"33391015168714982268831422978156810759831148502703022726522467254272\"},\r\n    {0x1.a112cefbcbd73p+928, chars_format::fixed, 0,\r\n        \"3696652073770944856273351710081500846137573512247897431984400690049962982301430688264874239621891367390318\"\r\n        \"3546159606857447498580939661393897508899821878961259077566193093886939323505877645667047538744838184254565\"\r\n        \"14513165432860037804808051299109674905178839116525770357448709767168\"},\r\n    {0x1.36a61081043f2p+929, chars_format::fixed, 0,\r\n        \"5506752176655331636540502711187914206125441362527193317710706989807069317439740848973809289220786628648288\"\r\n        \"4555468373410435455551618029155808631495073624818014753049295448518557218260967701007209684333957186507186\"\r\n        \"21788286669569369424999561392550693981389439225370897223798604431360\"},\r\n    {0x1.98a5de28ff8fbp+930, chars_format::fixed, 0,\r\n        \"1448789521114117706527948813277710811636971804841690812426970987651058323754991832082697037916638492848371\"\r\n        \"6101996728969550512264207242838202930575130917335244421316614871820771276485711677143869529909844813431086\"\r\n        \"965217307420056734039126102817769912404692662944189803753694493147136\"},\r\n    {0x1.a53cb3ab922ddp+931, chars_format::fixed, 0,\r\n        \"2986844610156001710864236368072401577881219531149747865967245252598017194972088926670171107217136906198783\"\r\n        \"7071939787390239299888828179058855299293313493226990708575337541149492181146116029745447674832615420430400\"\r\n        \"026329727925506366389563259476775092305734497599186276417667617259520\"},\r\n    {0x1.6b6f105002edfp+932, chars_format::fixed, 0,\r\n        \"5153963748435939514516999808660875241420128731405238955009857222166696819972142821916309711156802563600992\"\r\n        \"8986897494774746273899778268774215432730115194070459068770093986304086255655853502296108142313212957976196\"\r\n        \"434291429763959675488362249598031403354267911828901663515648043515904\"},\r\n    {0x1.e1d1de4ed51d6p+933, chars_format::fixed, 0,\r\n        \"1366566061134506230069941581515647669827904936836285130400736863784619905434228544398880080255337218763675\"\r\n        \"2324891733745382843204984168669747013968741907785597040206188442129899863626975509018118326693510940704481\"\r\n        \"5321573786764986943900426058733725257337715070032077314544904538423296\"},\r\n    {0x1.e13c425396dcfp+934, chars_format::fixed, 0,\r\n        \"2729817037657254325059517605869105999979835898346602030017530624179319470998467167048603329846025958530473\"\r\n        \"8501728333112429756703714831032291130699430391210776604669442298269223815481168903858143661297681669637595\"\r\n        \"7552397722265738220831655238058438853369422480860721573835123332218880\"},\r\n    {0x1.68969e0aaf976p+935, chars_format::fixed, 0,\r\n        \"4090888763436565805231231198228123996924301709315778863528206262378427584688159426565175279451403860690231\"\r\n        \"0680067407782231685539629405417040770224791051919994786609519766686041876831448351089711686675879007780782\"\r\n        \"2288950357706699724262413392756445470735520054260852996798068314603520\"},\r\n    {0x1.3b22da0fe1911p+936, chars_format::fixed, 0,\r\n        \"7150463385743894057149162397872189291435428618033227483316583541735978883828817453589766203220592565947382\"\r\n        \"9125446783819711875924634269631560072360273768476625962809137486564949723089779828896658245987950759317776\"\r\n        \"6553940950035435273202528651698676033968867504991057070045076471676928\"},\r\n    {0x1.4e66e432f39f8p+937, chars_format::fixed, 0,\r\n        \"1517521083327295139731717177109312053302870069107147008113001038704411865779896400819123412159105395310825\"\r\n        \"9695586208869550977455645030770653241052540848617869176493307109783276761933251361810228255632506295550694\"\r\n        \"27362782422201363564357317874795808595718985906746009234596759127195648\"},\r\n    {0x1.cd42a1d8134ddp+938, chars_format::fixed, 0,\r\n        \"4186412589165421767898716015432613056024086300173594109569805451109295806380953057478024743232263219866313\"\r\n        \"6541830262217102389440103279083308727370318469472103959648186828128018472091852429202120707467480690510312\"\r\n        \"54669662460887222261960281257747458512455969074216563763504450258337792\"},\r\n    {0x1.5f2cf251a2c3cp+939, chars_format::fixed, 0,\r\n        \"6374560719497041460701147329748632119440885185527182640520984137567315850917823015770083842564974131596515\"\r\n        \"3178749077315627273694181974600394749841554191816591821625859252389807056373440212382991527479956896621112\"\r\n        \"51632663075464418798824836792784408317689148157466121016089825903640576\"},\r\n    {0x1.adc9e02b49a66p+940, chars_format::fixed, 0,\r\n        \"1560309767506257489675888790428458001466658874729292990232938636478392151994043561909739907020146439250200\"\r\n        \"2502889071505906047799714943906021193927813417932587342250037464291164675731708499008092045363925855484561\"\r\n        \"813254903791863073045978225400887637841137225271718710407150443264212992\"},\r\n    {0x1.3d3363cbf2d84p+941, chars_format::fixed, 0,\r\n        \"2303138994294190935226852719823449637957706839633620331774487681516157647997617198352065945583102472309907\"\r\n        \"8395391265344133836092564623529452001123181686993342188668630395503520019686951640906920797579123077911005\"\r\n        \"311195074484622555449838749756095271033619639701182005144598929173643264\"},\r\n    {0x1.d766f62bf7f84p+942, chars_format::fixed, 0,\r\n        \"6845537430162202819243635547282384623865630523052170655812924234493680000202051886886806429640053035219178\"\r\n        \"9103446622679054710651824601063699795212899145117894716268443433970383665653774839680179902031305021971768\"\r\n        \"776346231778021269958063780588872346431583200394283187585456728088510464\"},\r\n    {0x1.184991c55d18cp+943, chars_format::fixed, 0,\r\n        \"8140470197133931734428738306748654022124701675695596709329038381281146508844610735228040868008048242819544\"\r\n        \"3285984630102297259934379258403210539301744278637153895956503034979477752839009780477841202724566363451047\"\r\n        \"078458089708094639868097495758509389693820290367400727907449779154583552\"},\r\n    {0x1.e8b3dcebeba57p+944, chars_format::fixed, 0,\r\n        \"2838707086595763604355226460215788354155062149456756370153617957977613916383732094422601856621444842168281\"\r\n        \"3914671499422962520918011100090623468091757683486424953487526144699470112884738808560838601800306510869156\"\r\n        \"6848732851954616351985795075190456971406831718621827217641148650350444544\"},\r\n    {0x1.967cd81cba730p+945, chars_format::fixed, 0,\r\n        \"4722297205156322451935033800902271657380330388166781249078844472531184077055662309294098918683511277263521\"\r\n        \"1274322478383143828515091907403699999613777913405300109811578199243818649554348924986028138120740783254364\"\r\n        \"8176623038761068209741353579116977976801854769065041573240303400423260160\"},\r\n    {0x1.4cf2067674a05p+946, chars_format::fixed, 0,\r\n        \"7735866498835462963282098049100353143835588059605679122181958735546473359301043785113342800098653584376820\"\r\n        \"2881339731579242843976021772296755652531739255043642318470742741165059640807778747078183625844484565756622\"\r\n        \"1704456125209427655591152156570845479024339183607328000005037882486030336\"},\r\n    {0x1.396e85b33c0bdp+947, chars_format::fixed, 0,\r\n        \"1456494620618158084459208459420770422214927536576777900279771118932370050161556521689788247934469660196579\"\r\n        \"8721400180531472919608601157825242581481197718827532284397109804084993643161754366273822504660151826112811\"\r\n        \"32374308583508656325781250344038137418380156687680087240907535210346708992\"},\r\n    {0x1.95206484ce576p+948, chars_format::fixed, 0,\r\n        \"3765187536411293767607982637363828513465621054834409479462724471987875949761786891019151855075713264875716\"\r\n        \"5903363847317049616325971892969467450305542675957244941206979207543253336290149657218116776965368316485391\"\r\n        \"66571141383041739341196077037239708754641370459694088122009910159310061568\"},\r\n    {0x1.22e9ba39c791ap+949, chars_format::fixed, 0,\r\n        \"5407406833340396522675098123764498345666847968993094015226717680122502831876966735794037632907460591643106\"\r\n        \"1417922843845411520165846890927266983643524214231220854779294391058028067273539481325897959134379456820216\"\r\n        \"27098020277135686194888669422944751029317284553997638270499385873918853120\"},\r\n    {0x1.c10015e885bf5p+950, chars_format::fixed, 0,\r\n        \"1669177722518344273415549369518463866259090463325810047247048853359097793051530435198906482304997332747712\"\r\n        \"6189569201847643531679905439914069521049750350740191646900576278399142863638015589023698201833596072165979\"\r\n        \"582528813031375076284990869886696245331704707225600453047248955585985511424\"},\r\n    {0x1.7e47eb8f41b03p+951, chars_format::fixed, 0,\r\n        \"2842291093748382815920588173319061198852991689166578053613126094345711868593940607258163435142829954632057\"\r\n        \"6039674947354409622194167614647980942927688441394664988769965156684016039562858582192035802389832782256588\"\r\n        \"289515506812686376870544138120305268181385592824850132930562312484883005440\"},\r\n    {0x1.09d0d2a526197p+952, chars_format::fixed, 0,\r\n        \"3952724615386466556695108729477857830462388988363697022489397885452303811179772031609082741394749308321289\"\r\n        \"6784472224927371790261412898525223903773488834898026836686461131769297466001418605340737269644574857450341\"\r\n        \"578296133621137927482641494123749218905855394522144524531019546018141175808\"},\r\n    {0x1.329393888f7bep+953, chars_format::fixed, 0,\r\n        \"9117687890595328511827970113600540178658790276010227086543682999888533832962609232164085312077801071266945\"\r\n        \"1037369846018808184155729548970048798771986716809691514577371817315812422363402546217710091494507737209116\"\r\n        \"100467436142545614804211132806327613747648211271222880398152942507767365632\"},\r\n    {0x1.bbe7721540300p+954, chars_format::fixed, 0,\r\n        \"2640371517686009502269944905314196857610042416188409329493154957126231977636983134735640750000859434586857\"\r\n        \"8388667060393589683456601684868123235871260277660661634949848655415180774643363104994880195726190507098086\"\r\n        \"6218863512709255609194971921954793897583681193907186498977864992248177885184\"},\r\n    {0x1.88cbea96e97dbp+955, chars_format::fixed, 0,\r\n        \"4672760871330719181173159500896037529822132598379668723322679962219636658645173408958383205774241418852472\"\r\n        \"9979082356117106965134483252910595432217633340497939646058701055096633058521775335290507969016326805223029\"\r\n        \"4873047744394947965285062467179754729677808277337626448692513961219618504704\"},\r\n    {0x1.92de904946e55p+956, chars_format::fixed, 0,\r\n        \"9585177496788628387142470355015742212486238917360070658610426925030214990977153058152176450356649681790336\"\r\n        \"7952042515523493507436053813331569470420445822249123926247567133249307863703233304674289976290756088612297\"\r\n        \"8562137242199024883969219071166888547570446344670542408167905350651582873600\"},\r\n    {0x1.7f42451f5dfadp+957, chars_format::fixed, 0,\r\n        \"1823719730845467935252133288969682350721256183200026152024966384902247490319395306206450777775000728278230\"\r\n        \"5584468898799588965916746439892707001557996930464421414003555234003365385838436499046029165006649216313147\"\r\n        \"24659998243129794062500661512152097902395046413344222843293713779303676641280\"},\r\n    {0x1.5bcb0fe12ff45p+958, chars_format::fixed, 0,\r\n        \"3309916067143353509308422467251436064739440112327605203935023467392925583502528567943381470440057281325203\"\r\n        \"7631616540337974591546356439900881755771350580349423907729282667309320200818403594129982607779730691504764\"\r\n        \"84721278024806918523029143876241835657869581941341018295520569998556732063744\"},\r\n    {0x1.b90465a9c592cp+959, chars_format::fixed, 0,\r\n        \"8394239974695799137286907828194240402021747779379374890348748683653987512151853218238504873099131553545012\"\r\n        \"9606629267347365557213473538261645610678099731825426593053238188159102648963799654267675617881491720751224\"\r\n        \"85056808596585496363951473489693787263841753239641456480490412640309010759680\"},\r\n    {0x1.69983d358fd5ep+960, chars_format::fixed, 0,\r\n        \"1376505367275418285918454682799556281744180366785115914292380535790408233716300592361359449030062026887964\"\r\n        \"6442765727268093432290312608512568298649956460735499043421724231696037756319710881966456670774643933394816\"\r\n        \"839437145361195475585915790038086938448416859756069308137927266057545163210752\"},\r\n    {0x1.de946c1935bebp+961, chars_format::fixed, 0,\r\n        \"3643679829326756854990321834751813757472665171774164410575176353619125026671266145125877525563560599822883\"\r\n        \"4201290124600643409144591004477627247750056004662162883889308925062806886760585732591401156829935941514163\"\r\n        \"437151042307371112230166232390702102964620484295971653304142427375365317984256\"},\r\n    {0x1.b5842f82a9de7p+962, chars_format::fixed, 0,\r\n        \"6662084711556888737073947375644206506568119676991133168261109249671533671871515559697788361716287852384144\"\r\n        \"9119524422880539955471646835289884068563042614219856260062907517310146636867204299065684544126277649452338\"\r\n        \"127010045221858188132828582061277352981469985490408290156135533130942236327936\"},\r\n    {0x1.e8b22ed3af96bp+963, chars_format::fixed, 0,\r\n        \"1488280074828332439997705846927264592847263285162991620634919457926813570888474496724375189954581591825810\"\r\n        \"6356476421281172420190532891044532412190612016616999360124778825918915150278377287131102941985635431929293\"\r\n        \"8359404923519710627910962261670847242925348963282404187971202996261023196905472\"},\r\n    {0x1.29a2da729cdddp+964, chars_format::fixed, 0,\r\n        \"1812848563407435318665103271085141879976583019164804492079628993979783986655462858316005770828764150814783\"\r\n        \"5341699166075715528253946274407735707796002959684745400447999976115259511453484550003661419801563141426559\"\r\n        \"0188431157433539282197161887547513163560678186514777300223161756952567350296576\"},\r\n    {0x1.276a30d060d86p+965, chars_format::fixed, 0,\r\n        \"3598637576458590111840117385743543166539334422813404319599309026721155733548251740840399891127183593846656\"\r\n        \"3457897348603351501555761876916814911543024120253006764961962489310312473579522696109479433342243946843578\"\r\n        \"7861000044261520862271340282348921123669443147738197112216532212442847112069120\"},\r\n    {0x1.d01246917497dp+966, chars_format::fixed, 0,\r\n        \"1130630353072375755137934754023028387880106704619578987854459135758905369025219831719631830560829247104804\"\r\n        \"2657351042564933344721639117478343535402443188370987099319116504280182849360957780070321495820864051770889\"\r\n        \"65595898416550699038646583977157339794314844188021211564490649717795032156602368\"},\r\n    {0x1.980e6a27628afp+967, chars_format::fixed, 0,\r\n        \"1988318424383897673041093229690321504377325734772213979328273102004376962789771142769689221409494405615587\"\r\n        \"4577353288025561072120486850801011342519919802442507756487497529091100008383128788061631909192385819609445\"\r\n        \"98491001794144386958052292241630342045252697101128134565354695877741983337283584\"},\r\n    {0x1.437c0e85d91f7p+968, chars_format::fixed, 0,\r\n        \"3152458971727972088271522584576841595017476408350484024213020426351601306009874958691305503495873140344934\"\r\n        \"4120837209365039614219706654045911383418740437970714190615897363229882508602521223101844253649126244343767\"\r\n        \"12560730512038580641775599869341924017562703624377521765695489143064395748737024\"},\r\n    {0x1.1ceddebc11368p+969, chars_format::fixed, 0,\r\n        \"5553448658483889498581539525533215555459922290832105470455447395778318808756164465828978162299776557137749\"\r\n        \"8025486036130367992289300205712003021474148459088330889275882646754413619478328989089270521743646337866976\"\r\n        \"08550809012398518292302677846190666214723168559532363121548103075175628747571200\"},\r\n    {0x1.f13408b3aaf95p+970, chars_format::fixed, 0,\r\n        \"1938160749820337358617569655781794481265906440306510868326219063396137205587268584015394903508566804558057\"\r\n        \"2727168483169888813544953159009656580157426651582270490076171843265331366857398808751854868343334950335271\"\r\n        \"862852572593152703307164355455704785758224484450798612380768726365918063744778240\"},\r\n    {0x1.af9922dbfa336p+971, chars_format::fixed, 0,\r\n        \"3364847896300296869862042374928307250449248589901973524911036178856186397043114384289618133383868345881461\"\r\n        \"2459859556927825860962493899864961836754799336153280681646256720300580617990328257017412749516118667033519\"\r\n        \"617412877924128534588246437115544693678681843960583893836646823695670362570227712\"},\r\n    {0x1.b6d988f35196fp+972, chars_format::fixed, 0,\r\n        \"6842765724941905947916115492736327014329278437219995077727487152277149907130550370856295447076940886213887\"\r\n        \"3147480237432588536217362770348126910744372289332447477347428161691026629351599796138689644770675420773355\"\r\n        \"753525455403314756439454112546882384282443317925562970942312363902161635738910720\"},\r\n    {0x1.90c721972c4a2p+973, chars_format::fixed, 0,\r\n        \"1249825938708992998754460472922920104746118308100169669591179198566756416920144596218021866266429717325722\"\r\n        \"4078341600170450617006812468031203181675314567467906310050431941451480055567229392119043931302728285141041\"\r\n        \"6527131226964653068028871701489323868875661390179301613620908627438519900539191296\"},\r\n    {0x1.7fa5032ebc8e7p+974, chars_format::fixed, 0,\r\n        \"2392791615385826139439300643911146437558959126293906788098470369938702999795441688618776497596037571666377\"\r\n        \"4732492933413361697395279766660762163053855741928754105932265202987225221490104027741592772916452744334157\"\r\n        \"3258308076333446631106547639938187560726465677882789688970890598968747947810881536\"},\r\n    {0x1.4ce903c008152p+975, chars_format::fixed, 0,\r\n        \"4152722646899414980588312000821606280564937630876292475856059543224122545953509575582972272632353876168181\"\r\n        \"0010924491150575390692502270005249227743759120939016515218117336974702624879803738329131066638102954845430\"\r\n        \"5977457986611411122735356736460608954225433970661515041585228932440487179403132928\"},\r\n    {0x1.1033cfd825bfep+976, chars_format::fixed, 0,\r\n        \"6790906283978801716186671042844327340884324357258325691213782880964393725253636056605757532196239247651641\"\r\n        \"0929537382448923715002547882415900908088044125341808699192055187776245203855785821826033218217154724236274\"\r\n        \"5152998922247516579175346880356048429165046724254554702021353471037187691525439488\"},\r\n    {0x1.0fcd0f994c6c3p+977, chars_format::fixed, 0,\r\n        \"1356178576074932367866978726568836556568964094970861971405416012976711060180517427903380593329117322963023\"\r\n        \"4969453438982442226392090195313512065880006858358710235243352553689909557144367669578006873842586434861599\"\r\n        \"80898573992763548701523679724999841102526974236295406990913753746951524692055293952\"},\r\n    {0x1.4ecd6004d6052p+978, chars_format::fixed, 0,\r\n        \"3341059095259842031705908954890593902583462891609397252245762351681423524432142389594976840618913063366843\"\r\n        \"1736876048481591920402160526446886009029718998138187592518899712938766195979432452826614892642216860271597\"\r\n        \"31679090731728037603430553370313415095082805462245669418052893304307800157894737920\"},\r\n    {0x1.f3efb39a62b6fp+979, chars_format::fixed, 0,\r\n        \"9977930881477502672654523893810822539174262015181547528004373399914172651650280510114050036517851280729310\"\r\n        \"3483270287908172488479635472429852391205913527184601284844129823533288723242328051246858569389855346025180\"\r\n        \"65129004909212362943512437101234020643757629011735714458250584381888822081044348928\"},\r\n    {0x1.7b90e1f7acd5fp+980, chars_format::fixed, 0,\r\n        \"1515106038250911930323007269661608539782400613824485269823157871706838649963809208560431197661416733417210\"\r\n        \"5906748535235901980708457410198184620788093383477763282778952752339058653659862971112147616374073340458735\"\r\n        \"624035902430001740279680217097916130499458182712540460766316226317254024325738004480\"},\r\n    {0x1.780e24e541603p+981, chars_format::fixed, 0,\r\n        \"3002184910089352024335822557467088962081515655444957457325005191265432611398728483535314520167667352571888\"\r\n        \"7504269788180664121841910641245353435449304351855214142643335804597316032113489460467008188118235798768059\"\r\n        \"751952649200503215287587191207086694028505970883124170608147640357927402985570172928\"},\r\n    {0x1.700d3d3809014p+982, chars_format::fixed, 0,\r\n        \"5876579596327993022784810363786560100394378705653137636003630290527375252110556752828674598502825538487545\"\r\n        \"7149035636796524147140419906897446621971953601388118050607284035635741728837647620217411773045592902437770\"\r\n        \"451522858269571663877746249378744932425279354599869012839882446798078904889967116288\"},\r\n    {0x1.b688d558b5f6cp+983, chars_format::fixed, 0,\r\n        \"1400391748829508427561371989828628654390094654379685278620574834010309817686902745427193392136512471350624\"\r\n        \"2484004346866449563603204670620822309825395187688945258116375683563999776785955197613481703986052348446144\"\r\n        \"0124895585825179963559084955205686769325898379507940166327523415178499971301572083712\"},\r\n    {0x1.f01912b454894p+984, chars_format::fixed, 0,\r\n        \"3168423262194204738527726410150703955606744016936273104761288141601799242343771061184655532204415834272239\"\r\n        \"8891527757901336200227044450107894273649413104299236004814623370181797955251848674554964186894050852024727\"\r\n        \"8182505289084695487280862714932759338066051522762627957622658669625057321641956081664\"},\r\n    {0x1.1006d98e085bcp+985, chars_format::fixed, 0,\r\n        \"3474700589684215405676624171022493925327895749427976470785052614733461449521266111222951339227123391215685\"\r\n        \"4476185107350635385308364780059851509940573215572464022804595298279648920878313271543040662798316640519213\"\r\n        \"1258940257292542957476413248506076428650670534137201954640611227376407648222278844416\"},\r\n    {0x1.2c3916e2ff373p+986, chars_format::fixed, 0,\r\n        \"7669723855021268596083260991127614609891577065725339072773146046237811451796225273821871338898440274475341\"\r\n        \"0064405524435047487136748243837561974513860830823109563623271246170547844427171279359216631158125320663533\"\r\n        \"0061153560207434566610596179623433497342212224379877437918600098792472693553791762432\"},\r\n    {0x1.0a7487f857db1p+987, chars_format::fixed, 0,\r\n        \"1361413192509653322735827730429732760562001096467427339051917514610198108671646239003496382177992474878573\"\r\n        \"9562008053248180518804706631518893074790348471379835377058536186780287202477849752237696900243942214620588\"\r\n        \"98780565314051488693571227506727823926105057168671455333801700670110926825836349751296\"},\r\n    {0x1.3857c488fe8b8p+988, chars_format::fixed, 0,\r\n        \"3191738550947262240174196390274179831602084289146737287163911427996850154072007438579318347355028923084754\"\r\n        \"0653134695263194519450157220167768105073651723636444589362144051985825621212239253696269866857190204603967\"\r\n        \"38617495507842843305566526087166039077960918279884459165757255575108034221542182223872\"},\r\n    {0x1.b2e84c3dce473p+989, chars_format::fixed, 0,\r\n        \"8888378843987562418516420774536055875880215587503712519853284905673607825016375290440927071139925425341818\"\r\n        \"5944446973470003066186698313761897833628284399899232296260594245626950225486569896197452836176842807847393\"\r\n        \"76094743421421524562002257540912448826271782010926639892392033944710549976982451388416\"},\r\n    {0x1.71b76b7215201p+990, chars_format::fixed, 0,\r\n        \"1511209083597545648269104847032413667646182441103813783087500083922331916924246476808237041403566025416915\"\r\n        \"8866970278017087147522752922506066201760164519286966821272286952676676235656098321740107241152698605542660\"\r\n        \"799442146505061129659657887076900042124590387275392937317008374397153245502302047961088\"},\r\n    {0x1.21b184ed36242p+991, chars_format::fixed, 0,\r\n        \"2368232792394045592907485540473183588520053039663596736804105159275720662485864569862671071322557174526923\"\r\n        \"3572952364463497530622281253432330216494969540793671013008494434510222402947619422751718115470589045753965\"\r\n        \"396355529469848408434057376579487220386627111660172302509770187382123275691926545760256\"},\r\n    {0x1.37ea2520488ccp+992, chars_format::fixed, 0,\r\n        \"5099780421145732430172796978002178493219657773712465197446157433528141629291114053707851380034951605816623\"\r\n        \"0665102398926509396805097666543921332551215402491474991834159110468760387855787708151727786027845789596274\"\r\n        \"715728449794070641109346128933556201664107191668445099152331696871514428213048815648768\"},\r\n    {0x1.4664dbcd00eb0p+993, chars_format::fixed, 0,\r\n        \"1067303337764472558207612827956225689002076275259891270726186261290460562838896340306131448503546150701933\"\r\n        \"7443849092619515427015813868732735904065717939244093070771192416618279480647059892487980542131200172770395\"\r\n        \"8919211691346875357854618106887096598976434119814713819831043038372307216901286490275840\"},\r\n    {0x1.6b9cbc489e09ap+994, chars_format::fixed, 0,\r\n        \"2378013021177000863542879802805495514342840555979292208592408212522200120751056466262068322605779601917414\"\r\n        \"5264041745386355521909812299455547924135316999304726429467529717059753209028061780043768961726888620722928\"\r\n        \"5482891877778657703920272278134074512640642342772726595535234502682602103798938923433984\"},\r\n    {0x1.f513bbd25d6dep+995, chars_format::fixed, 0,\r\n        \"6554057728282088273408989938670419534562784654004749964505990799598384510911984945454308319586877780571247\"\r\n        \"0709246155198754800325729039870071334566159482962115836603561764337220699871656323296193675700388227695912\"\r\n        \"2708936001833829616557908400458109782703568488107962693518959628276723172599697604870144\"},\r\n    {0x1.3e00e64a007e5p+996, chars_format::fixed, 0,\r\n        \"8318933161474208239138244783031393295429686149692453351817687406202137819571369672461631470905243568748045\"\r\n        \"2344945385840798908154889072644700471440528658396399806034644184126184960179911705204764348714709297955755\"\r\n        \"6891805175387244452772540164096096030738843539931931830599736589422869440330138761822208\"},\r\n    {0x1.04358f2000393p+997, chars_format::fixed, 0,\r\n        \"1361408270105775828299160551697548957928811747469574257703326768944182915799744952896263039627607256777184\"\r\n        \"6656327797897499210538162973482767373033877343410507704148182660523911686944081033779016427297188372354934\"\r\n        \"34622743766811503326558480996563151364510469225186261976905322157612487935439550111809536\"},\r\n    {0x1.ff5ca45dac07fp+998, chars_format::fixed, 0,\r\n        \"5350865811014990284942192842849390562587048732242189849768215440609076563721324457217609971532665543149436\"\r\n        \"7692959167382963109998027962870458639423046259352855553385281696899266289307733673015832615500102062652623\"\r\n        \"98738807874995959199986290114910339936114860975870138690918797206511003398780232983904256\"},\r\n    {0x1.95dfb7963208bp+999, chars_format::fixed, 0,\r\n        \"8494089296675852658549484918212622743316661665812171612122175668006467773461153903337808047969308652843259\"\r\n        \"5426418755589765576772662481710377489716568772207399586386914619422465426427181541276443218386030711267423\"\r\n        \"11092793152059699473302461456023443866238021717620357163817975956645460032632423773634560\"},\r\n    {0x1.042ea27af2ccfp+1000, chars_format::fixed, 0,\r\n        \"1089013402778421431393034800940209922880478638830842757754958900049052483817153688008331659437650336092382\"\r\n        \"0392795616711337787448876524123449490254769141101794549844398669582520673639828304310115553416089199219491\"\r\n        \"153554556979108530787196381372092387340130982723560970359575450657479047437786029202866176\"},\r\n    {0x1.19cacda6d507cp+1001, chars_format::fixed, 0,\r\n        \"2358927877102592004528582798246123679681703630087718597748855427933584215878224419198599063292612150307790\"\r\n        \"7652000366655921124159236733668993049853618779829576694619427973473812537072705272983173672330636015433777\"\r\n        \"950412177760641174727204088780046261172088405036986621286405986734378144157024874903109632\"},\r\n    {0x1.e4dc48c30aebdp+1002, chars_format::fixed, 0,\r\n        \"8117690363105264865533708088415713875742879852292905831990096302089005205398271218130044634633378782912170\"\r\n        \"0353552736846220325179555283701149493529159663325631748303262086329374073949673246604454694795266625030867\"\r\n        \"472373502272570181905030453820398128968285453872513665526905113335684193781314404248190976\"},\r\n    {0x1.16fa9da90f9d8p+1003, chars_format::fixed, 0,\r\n        \"9341511426794587620836724813109834191208553050520394301727004450386313219789396277145074527533329034785481\"\r\n        \"0996060014050974256615370965247946833602288854220636677899882124481182200368284438935937724411219747755380\"\r\n        \"016760116417262780962600310403215068957481809727018548258602677622354836648271052026150912\"},\r\n    {0x1.8a86318c46281p+1004, chars_format::fixed, 0,\r\n        \"2642100432019359922222064335914842088328155609718907491375831812404861631551113883459814041718784949039679\"\r\n        \"1244080065878607868133673114397037915538043969012145635567418878924141006499653329450812671793356195918577\"\r\n        \"8192754757376080092862115085847862393689963492786526884623762776875632820851286300067627008\"},\r\n    {0x1.ff462fd806bd7p+1005, chars_format::fixed, 0,\r\n        \"6847933389378864334995195437342870627133767658067754565611112423454867889953014019812264031670380814132469\"\r\n        \"5411179000499603182801500020515071507814898324063724387150008288842134297762012303937455168173797787865578\"\r\n        \"8295179567168650606205377274978890097754212420262333936960341237630114805596678852383342592\"},\r\n    {0x1.9abb3e1c6258dp+1006, chars_format::fixed, 0,\r\n        \"1100255620018400702308143874179289094708076257600082156362901433283474967995224448775775348330029825350784\"\r\n        \"5587920641953420422722195404300554251098322908384237964741427980219082903574723830698253480240845466355370\"\r\n        \"91282385282353501007663737911321641626869306594390707034645320031413007213532753781288075264\"},\r\n    {0x1.de0bd3c1f52abp+1007, chars_format::fixed, 0,\r\n        \"2561153089209499451450108883187135838431944890345289232562567670790474032784993077517551433824974196965788\"\r\n        \"3859230897100388642398768469698484561986559132752389503697246954564350968078109699787924474173314642916495\"\r\n        \"93820790500115221658520513179659203340914713114632244088248136782610390183342216645609259008\"},\r\n    {0x1.d9c1bbc9b76a1p+1008, chars_format::fixed, 0,\r\n        \"5076344585537475813761151329271831544962994883865596230707128468133757349486378718111403188008801550695642\"\r\n        \"1091981481286994724230486016166000868612123718765692513777948923292191374860899741743361159897078289821867\"\r\n        \"70681263550628277966122021347502889218558140981978778760709565257654468755221733041969823744\"},\r\n    {0x1.838389973dca2p+1009, chars_format::fixed, 0,\r\n        \"8304487832500948763665787260588002793145134106225464617649330176041142787088124576577881178863433513982288\"\r\n        \"7779176818155851598178824680178566717352111022359529341838998629315886484033406785875117879478875959346386\"\r\n        \"43446637560952598376682571125723765484978607914917947356221830413431528356893552064082214912\"},\r\n    {0x1.060853e168c00p+1010, chars_format::fixed, 0,\r\n        \"1123080444666546301777878963934799099664396571463402334381500916124078024627094771314789772593194701733562\"\r\n        \"3763019109215938315064399499114678702426677155196395562512625676973629490891725699048630439538271293954132\"\r\n        \"944471985636790260821195763195960709126795406948190820263635402442656971341237103098326941696\"},\r\n    {0x1.f308c45ea73d7p+1011, chars_format::fixed, 0,\r\n        \"4277755922081604265385731003870414636675211815528525166515441193283173524515214526116577671174238835415601\"\r\n        \"6987199321943069906953191709200985805991473654422677796863026046204131122140632089138619896078253943359779\"\r\n        \"967819804460846041770466218522657499957662378458077745646242495542457900501384540282123452416\"},\r\n    {0x1.6e7f0598d9a7ap+1012, chars_format::fixed, 0,\r\n        \"6283260967439312321793941478600472136834781014816953260382384706038874291670268315757003036986538537806169\"\r\n        \"5042342257016325640854560981897007228730601664309292490339180773764661159594282018922741338839585531864854\"\r\n        \"596993614806461429966237140466546002145002610631737886461529165004165330118612673778600116224\"},\r\n    {0x1.90ee34c61a4e4p+1013, chars_format::fixed, 0,\r\n        \"1374721516419186455736032890241718308090950277398005330501602487559466724973474834596108952144525149107676\"\r\n        \"0161371030946104850545438257754381973659153645099708064799494869929937271094708615446698975028528698722301\"\r\n        \"0010358709717485396216234719231061846048602963736424188145247774330747094015196695990582116352\"},\r\n    {0x1.e2a0a3d09f949p+1014, chars_format::fixed, 0,\r\n        \"3309692927391868361486967991604904234511951653533894719501226432521292268347453245940663906285425386625813\"\r\n        \"5771915111168736218389811776587927240863291205346055402758901819603218140364375221704644685454587645911827\"\r\n        \"0311328170300273241053563917737426045554632200608705001740820709150305846610578306477689143296\"},\r\n    {0x1.c1f1e31fb56a1p+1015, chars_format::fixed, 0,\r\n        \"6171133478197849282390517627431306460094801359895025970562404481097657813763533609936439679151871466284237\"\r\n        \"0928051624194822539865806340825894402647560060436739555106052989538844073638999851345424789758896392741219\"\r\n        \"9886596463797584431228714343905526280539044788020033342657437500226579170692177128139530436608\"},\r\n    {0x1.c021a05af3889p+1016, chars_format::fixed, 0,\r\n        \"1229252101049421320220839212091034737197493286199636265221535468362635428677845097705645798882340660785186\"\r\n        \"2663713256576958288897748280964823036198994326915865563426861434381481536883642706185724402134855112796978\"\r\n        \"11055580445126773330393578734970725834547100511308555559785816417647601996123490828625750523904\"},\r\n    {0x1.a0ba4fb02d02bp+1017, chars_format::fixed, 0,\r\n        \"2286220295463317826172353650964968564170727985030029086980398242025886246164731357645492228106511645621918\"\r\n        \"2959097742681117375627065808719653571450868551945456981280565103995670323842785460796863662205525864729263\"\r\n        \"46841213905402221500853475646279673353994324548018463119634259994839858773138984052848465018880\"},\r\n    {0x1.3f966b0ddcfd7p+1018, chars_format::fixed, 0,\r\n        \"3506594130884535498475346454243139100767422760433561214852206574801782510453884430705755089558040841617942\"\r\n        \"4711841630794438578685520836445166676048320954617860819651051369003901818091804579152460658452242729354433\"\r\n        \"46243739881419482228334516326372503115386643937845878401903583322133727281304761523559911653376\"},\r\n    {0x1.f28cb9c6710a9p+1019, chars_format::fixed, 0,\r\n        \"1094042224758922774331628525752344677114912160862655925310463893100615228912566476241883748789051728586854\"\r\n        \"4197084268693535114301521886251172039242934377863244918632927972972091308702040655975609483203160018660194\"\r\n        \"642090669215782471906632775672148557149263319590356475272060941885997193903260433671483161575424\"},\r\n    {0x1.c941430ebe2afp+1020, chars_format::fixed, 0,\r\n        \"2006845819301448565923369096504654157715022292244887680207969874959492765948492536407905186369307992254996\"\r\n        \"2370234075267907510104030015375054184658913782338904892471130339388202458928273358393081217222561624956342\"\r\n        \"978681689679366741339635310316349500249207446752433563045842746492341156586638953143467738398720\"},\r\n    {0x1.3e04900b4e89ep+1021, chars_format::fixed, 0,\r\n        \"2791496372374563643332709866809290981114730224378050606994822818228326594781000162780323911104517277890639\"\r\n        \"3098707244757298090886194248239218943139090593484015407218496749128358376605186663256302502757258571365175\"\r\n        \"630215388510334525743239925811352693280111872637884811742138711874263709333351600610928924557312\"},\r\n    {0x1.5cd1470a36d2ep+1022, chars_format::fixed, 0,\r\n        \"6123699292104194981771404189192852883978693833694232208413709518604296181981393604802892672354866046897127\"\r\n        \"8496965458693991743225149388783817396573788778128574099251588335294401179946164342339300212146009105558717\"\r\n        \"985452576260185887979241983673503558946414035103004649802078842226017422195444929429676453003264\"},\r\n    {0x1.e4ed787bb244bp+1023, chars_format::fixed, 0,\r\n        \"1702638774998990104935280334555195796750436559084917131548593325784866486976081021679835107118659466855126\"\r\n        \"2984927294793703708001158120333242616861941586246075606910029233718147847851055755750691813753282576963131\"\r\n        \"0693972479511748662180221113394836543075210717029725044946195117678217681054268005181200990732288\"},\r\n};\r\n\r\n#endif // DOUBLE_FIXED_PRECISION_TO_CHARS_TEST_CASES_3_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/double_fixed_precision_to_chars_test_cases_4.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef DOUBLE_FIXED_PRECISION_TO_CHARS_TEST_CASES_4_HPP\r\n#define DOUBLE_FIXED_PRECISION_TO_CHARS_TEST_CASES_4_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\ninline constexpr DoublePrecisionToCharsTestCase double_fixed_precision_to_chars_test_cases_4[] = {\r\n    // Test the maximum mantissa, which generates the most digits for each exponent.\r\n    {0x0.fffffffffffffp-1022, chars_format::fixed, 1074,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585\"\r\n        \"0720088902458687608585988765042311224095946549352480256244000922823569517877588880375915526423097809504343\"\r\n        \"1208587738715835729182199302029437922422355981982750124204178896957131179108226104397197960400045489739193\"\r\n        \"8079198936081525613113376149842043271751033627391549782731594143828136275113838604094249464942286316695429\"\r\n        \"1050802018159266421349966065178030950759130587198464239060686371020051087232827846788436319445158661350412\"\r\n        \"2347901479236958520832159762106637540161373658304419360371477835530668283453563400507407304013560296804637\"\r\n        \"5918583163124224521599262546494300836851861719422417646455137135420132217031370496583210154654068035397417\"\r\n        \"9060225895030235019375197730309457631732108525072993050897615825191597207572324554347709124613174935802817\"\r\n        \"34466552734375\"},\r\n    {0x1.fffffffffffffp-1022, chars_format::fixed, 1074,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170\"\r\n        \"1440227211481959341826395186963909270329129604685221944964444404215389103305904781627017582829831782607924\"\r\n        \"2213740172877389189291055314414815641243486759976282126534658507104573762744298025962244902903779698114444\"\r\n        \"6145705102663115100318287949527959668236039986479250965780342141637013812613333119898765515451440315261253\"\r\n        \"8132666529513060001849177663286607555958373922409899478075565940981010216121988146052587425791790000716759\"\r\n        \"9934414508608720568157791543592301891033496486942061405218289243144579760516365090360651414037721744226256\"\r\n        \"1590244668525767372446430075513332450079650686719491377688478005309963967709758965844137894433796621993967\"\r\n        \"3169362804570848666132067970177289160800206986794085513437288676754097207572324554347709124613174935802817\"\r\n        \"34466552734375\"},\r\n    {0x1.fffffffffffffp-1021, chars_format::fixed, 1073,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089002954340\"\r\n        \"2880454422963918683652790373927818540658259209370443889928888808430778206611809563254035165659663565215848\"\r\n        \"4427480345754778378582110628829631282486973519952564253069317014209147525488596051924489805807559396228889\"\r\n        \"2291410205326230200636575899055919336472079972958501931560684283274027625226666239797531030902880630522507\"\r\n        \"6265333059026120003698355326573215111916747844819798956151131881962020432243976292105174851583580001433519\"\r\n        \"9868829017217441136315583087184603782066992973884122810436578486289159521032730180721302828075443488452512\"\r\n        \"3180489337051534744892860151026664900159301373438982755376956010619927935419517931688275788867593243987934\"\r\n        \"6338725609141697332264135940354578321600413973588171026874577353508194415144649108695418249226349871605634\"\r\n        \"6893310546875\"},\r\n    {0x1.fffffffffffffp-1020, chars_format::fixed, 1072,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000178005908680\"\r\n        \"5760908845927837367305580747855637081316518418740887779857777616861556413223619126508070331319327130431696\"\r\n        \"8854960691509556757164221257659262564973947039905128506138634028418295050977192103848979611615118792457778\"\r\n        \"4582820410652460401273151798111838672944159945917003863121368566548055250453332479595062061805761261045015\"\r\n        \"2530666118052240007396710653146430223833495689639597912302263763924040864487952584210349703167160002867039\"\r\n        \"9737658034434882272631166174369207564133985947768245620873156972578319042065460361442605656150886976905024\"\r\n        \"6360978674103069489785720302053329800318602746877965510753912021239855870839035863376551577735186487975869\"\r\n        \"2677451218283394664528271880709156643200827947176342053749154707016388830289298217390836498452699743211269\"\r\n        \"378662109375\"},\r\n    {0x1.fffffffffffffp-1019, chars_format::fixed, 1071,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000356011817361\"\r\n        \"1521817691855674734611161495711274162633036837481775559715555233723112826447238253016140662638654260863393\"\r\n        \"7709921383019113514328442515318525129947894079810257012277268056836590101954384207697959223230237584915556\"\r\n        \"9165640821304920802546303596223677345888319891834007726242737133096110500906664959190124123611522522090030\"\r\n        \"5061332236104480014793421306292860447666991379279195824604527527848081728975905168420699406334320005734079\"\r\n        \"9475316068869764545262332348738415128267971895536491241746313945156638084130920722885211312301773953810049\"\r\n        \"2721957348206138979571440604106659600637205493755931021507824042479711741678071726753103155470372975951738\"\r\n        \"5354902436566789329056543761418313286401655894352684107498309414032777660578596434781672996905399486422538\"\r\n        \"75732421875\"},\r\n    {0x1.fffffffffffffp-1018, chars_format::fixed, 1070,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000712023634722\"\r\n        \"3043635383711349469222322991422548325266073674963551119431110467446225652894476506032281325277308521726787\"\r\n        \"5419842766038227028656885030637050259895788159620514024554536113673180203908768415395918446460475169831113\"\r\n        \"8331281642609841605092607192447354691776639783668015452485474266192221001813329918380248247223045044180061\"\r\n        \"0122664472208960029586842612585720895333982758558391649209055055696163457951810336841398812668640011468159\"\r\n        \"8950632137739529090524664697476830256535943791072982483492627890313276168261841445770422624603547907620098\"\r\n        \"5443914696412277959142881208213319201274410987511862043015648084959423483356143453506206310940745951903477\"\r\n        \"0709804873133578658113087522836626572803311788705368214996618828065555321157192869563345993810798972845077\"\r\n        \"5146484375\"},\r\n    {0x1.fffffffffffffp-1017, chars_format::fixed, 1069,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001424047269444\"\r\n        \"6087270767422698938444645982845096650532147349927102238862220934892451305788953012064562650554617043453575\"\r\n        \"0839685532076454057313770061274100519791576319241028049109072227346360407817536830791836892920950339662227\"\r\n        \"6662563285219683210185214384894709383553279567336030904970948532384442003626659836760496494446090088360122\"\r\n        \"0245328944417920059173685225171441790667965517116783298418110111392326915903620673682797625337280022936319\"\r\n        \"7901264275479058181049329394953660513071887582145964966985255780626552336523682891540845249207095815240197\"\r\n        \"0887829392824555918285762416426638402548821975023724086031296169918846966712286907012412621881491903806954\"\r\n        \"1419609746267157316226175045673253145606623577410736429993237656131110642314385739126691987621597945690155\"\r\n        \"029296875\"},\r\n    {0x1.fffffffffffffp-1016, chars_format::fixed, 1068,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002848094538889\"\r\n        \"2174541534845397876889291965690193301064294699854204477724441869784902611577906024129125301109234086907150\"\r\n        \"1679371064152908114627540122548201039583152638482056098218144454692720815635073661583673785841900679324455\"\r\n        \"3325126570439366420370428769789418767106559134672061809941897064768884007253319673520992988892180176720244\"\r\n        \"0490657888835840118347370450342883581335931034233566596836220222784653831807241347365595250674560045872639\"\r\n        \"5802528550958116362098658789907321026143775164291929933970511561253104673047365783081690498414191630480394\"\r\n        \"1775658785649111836571524832853276805097643950047448172062592339837693933424573814024825243762983807613908\"\r\n        \"2839219492534314632452350091346506291213247154821472859986475312262221284628771478253383975243195891380310\"\r\n        \"05859375\"},\r\n    {0x1.fffffffffffffp-1015, chars_format::fixed, 1067,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005696189077778\"\r\n        \"4349083069690795753778583931380386602128589399708408955448883739569805223155812048258250602218468173814300\"\r\n        \"3358742128305816229255080245096402079166305276964112196436288909385441631270147323167347571683801358648910\"\r\n        \"6650253140878732840740857539578837534213118269344123619883794129537768014506639347041985977784360353440488\"\r\n        \"0981315777671680236694740900685767162671862068467133193672440445569307663614482694731190501349120091745279\"\r\n        \"1605057101916232724197317579814642052287550328583859867941023122506209346094731566163380996828383260960788\"\r\n        \"3551317571298223673143049665706553610195287900094896344125184679675387866849147628049650487525967615227816\"\r\n        \"5678438985068629264904700182693012582426494309642945719972950624524442569257542956506767950486391782760620\"\r\n        \"1171875\"},\r\n    {0x1.fffffffffffffp-1014, chars_format::fixed, 1066,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011392378155556\"\r\n        \"8698166139381591507557167862760773204257178799416817910897767479139610446311624096516501204436936347628600\"\r\n        \"6717484256611632458510160490192804158332610553928224392872577818770883262540294646334695143367602717297821\"\r\n        \"3300506281757465681481715079157675068426236538688247239767588259075536029013278694083971955568720706880976\"\r\n        \"1962631555343360473389481801371534325343724136934266387344880891138615327228965389462381002698240183490558\"\r\n        \"3210114203832465448394635159629284104575100657167719735882046245012418692189463132326761993656766521921576\"\r\n        \"7102635142596447346286099331413107220390575800189792688250369359350775733698295256099300975051935230455633\"\r\n        \"1356877970137258529809400365386025164852988619285891439945901249048885138515085913013535900972783565521240\"\r\n        \"234375\"},\r\n    {0x1.fffffffffffffp-1013, chars_format::fixed, 1065,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022784756311113\"\r\n        \"7396332278763183015114335725521546408514357598833635821795534958279220892623248193033002408873872695257201\"\r\n        \"3434968513223264917020320980385608316665221107856448785745155637541766525080589292669390286735205434595642\"\r\n        \"6601012563514931362963430158315350136852473077376494479535176518151072058026557388167943911137441413761952\"\r\n        \"3925263110686720946778963602743068650687448273868532774689761782277230654457930778924762005396480366981116\"\r\n        \"6420228407664930896789270319258568209150201314335439471764092490024837384378926264653523987313533043843153\"\r\n        \"4205270285192894692572198662826214440781151600379585376500738718701551467396590512198601950103870460911266\"\r\n        \"2713755940274517059618800730772050329705977238571782879891802498097770277030171826027071801945567131042480\"\r\n        \"46875\"},\r\n    {0x1.fffffffffffffp-1012, chars_format::fixed, 1064,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045569512622227\"\r\n        \"4792664557526366030228671451043092817028715197667271643591069916558441785246496386066004817747745390514402\"\r\n        \"6869937026446529834040641960771216633330442215712897571490311275083533050161178585338780573470410869191285\"\r\n        \"3202025127029862725926860316630700273704946154752988959070353036302144116053114776335887822274882827523904\"\r\n        \"7850526221373441893557927205486137301374896547737065549379523564554461308915861557849524010792960733962233\"\r\n        \"2840456815329861793578540638517136418300402628670878943528184980049674768757852529307047974627066087686306\"\r\n        \"8410540570385789385144397325652428881562303200759170753001477437403102934793181024397203900207740921822532\"\r\n        \"5427511880549034119237601461544100659411954477143565759783604996195540554060343652054143603891134262084960\"\r\n        \"9375\"},\r\n    {0x1.fffffffffffffp-1011, chars_format::fixed, 1063,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091139025244454\"\r\n        \"9585329115052732060457342902086185634057430395334543287182139833116883570492992772132009635495490781028805\"\r\n        \"3739874052893059668081283921542433266660884431425795142980622550167066100322357170677561146940821738382570\"\r\n        \"6404050254059725451853720633261400547409892309505977918140706072604288232106229552671775644549765655047809\"\r\n        \"5701052442746883787115854410972274602749793095474131098759047129108922617831723115699048021585921467924466\"\r\n        \"5680913630659723587157081277034272836600805257341757887056369960099349537515705058614095949254132175372613\"\r\n        \"6821081140771578770288794651304857763124606401518341506002954874806205869586362048794407800415481843645065\"\r\n        \"0855023761098068238475202923088201318823908954287131519567209992391081108120687304108287207782268524169921\"\r\n        \"875\"},\r\n    {0x1.fffffffffffffp-1010, chars_format::fixed, 1062,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182278050488909\"\r\n        \"9170658230105464120914685804172371268114860790669086574364279666233767140985985544264019270990981562057610\"\r\n        \"7479748105786119336162567843084866533321768862851590285961245100334132200644714341355122293881643476765141\"\r\n        \"2808100508119450903707441266522801094819784619011955836281412145208576464212459105343551289099531310095619\"\r\n        \"1402104885493767574231708821944549205499586190948262197518094258217845235663446231398096043171842935848933\"\r\n        \"1361827261319447174314162554068545673201610514683515774112739920198699075031410117228191898508264350745227\"\r\n        \"3642162281543157540577589302609715526249212803036683012005909749612411739172724097588815600830963687290130\"\r\n        \"1710047522196136476950405846176402637647817908574263039134419984782162216241374608216574415564537048339843\"\r\n        \"75\"},\r\n    {0x1.fffffffffffffp-1009, chars_format::fixed, 1061,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000364556100977819\"\r\n        \"8341316460210928241829371608344742536229721581338173148728559332467534281971971088528038541981963124115221\"\r\n        \"4959496211572238672325135686169733066643537725703180571922490200668264401289428682710244587763286953530282\"\r\n        \"5616201016238901807414882533045602189639569238023911672562824290417152928424918210687102578199062620191238\"\r\n        \"2804209770987535148463417643889098410999172381896524395036188516435690471326892462796192086343685871697866\"\r\n        \"2723654522638894348628325108137091346403221029367031548225479840397398150062820234456383797016528701490454\"\r\n        \"7284324563086315081155178605219431052498425606073366024011819499224823478345448195177631201661927374580260\"\r\n        \"3420095044392272953900811692352805275295635817148526078268839969564324432482749216433148831129074096679687\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-1008, chars_format::fixed, 1060,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000729112201955639\"\r\n        \"6682632920421856483658743216689485072459443162676346297457118664935068563943942177056077083963926248230442\"\r\n        \"9918992423144477344650271372339466133287075451406361143844980401336528802578857365420489175526573907060565\"\r\n        \"1232402032477803614829765066091204379279138476047823345125648580834305856849836421374205156398125240382476\"\r\n        \"5608419541975070296926835287778196821998344763793048790072377032871380942653784925592384172687371743395732\"\r\n        \"5447309045277788697256650216274182692806442058734063096450959680794796300125640468912767594033057402980909\"\r\n        \"4568649126172630162310357210438862104996851212146732048023638998449646956690896390355262403323854749160520\"\r\n        \"684019008878454590780162338470561055059127163429705215653767993912864886496549843286629766225814819335937\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-1007, chars_format::fixed, 1059,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001458224403911279\"\r\n        \"3365265840843712967317486433378970144918886325352692594914237329870137127887884354112154167927852496460885\"\r\n        \"9837984846288954689300542744678932266574150902812722287689960802673057605157714730840978351053147814121130\"\r\n        \"2464804064955607229659530132182408758558276952095646690251297161668611713699672842748410312796250480764953\"\r\n        \"1216839083950140593853670575556393643996689527586097580144754065742761885307569851184768345374743486791465\"\r\n        \"0894618090555577394513300432548365385612884117468126192901919361589592600251280937825535188066114805961818\"\r\n        \"9137298252345260324620714420877724209993702424293464096047277996899293913381792780710524806647709498321041\"\r\n        \"36803801775690918156032467694112211011825432685941043130753598782572977299309968657325953245162963867187\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-1006, chars_format::fixed, 1058,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002916448807822558\"\r\n        \"6730531681687425934634972866757940289837772650705385189828474659740274255775768708224308335855704992921771\"\r\n        \"9675969692577909378601085489357864533148301805625444575379921605346115210315429461681956702106295628242260\"\r\n        \"4929608129911214459319060264364817517116553904191293380502594323337223427399345685496820625592500961529906\"\r\n        \"2433678167900281187707341151112787287993379055172195160289508131485523770615139702369536690749486973582930\"\r\n        \"1789236181111154789026600865096730771225768234936252385803838723179185200502561875651070376132229611923637\"\r\n        \"8274596504690520649241428841755448419987404848586928192094555993798587826763585561421049613295418996642082\"\r\n        \"73607603551381836312064935388224422023650865371882086261507197565145954598619937314651906490325927734375\"},\r\n    {0x1.fffffffffffffp-1005, chars_format::fixed, 1057,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005832897615645117\"\r\n        \"3461063363374851869269945733515880579675545301410770379656949319480548511551537416448616671711409985843543\"\r\n        \"9351939385155818757202170978715729066296603611250889150759843210692230420630858923363913404212591256484520\"\r\n        \"9859216259822428918638120528729635034233107808382586761005188646674446854798691370993641251185001923059812\"\r\n        \"4867356335800562375414682302225574575986758110344390320579016262971047541230279404739073381498973947165860\"\r\n        \"3578472362222309578053201730193461542451536469872504771607677446358370401005123751302140752264459223847275\"\r\n        \"6549193009381041298482857683510896839974809697173856384189111987597175653527171122842099226590837993284165\"\r\n        \"4721520710276367262412987077644884404730173074376417252301439513029190919723987462930381298065185546875\"},\r\n    {0x1.fffffffffffffp-1004, chars_format::fixed, 1056,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011665795231290234\"\r\n        \"6922126726749703738539891467031761159351090602821540759313898638961097023103074832897233343422819971687087\"\r\n        \"8703878770311637514404341957431458132593207222501778301519686421384460841261717846727826808425182512969041\"\r\n        \"9718432519644857837276241057459270068466215616765173522010377293348893709597382741987282502370003846119624\"\r\n        \"9734712671601124750829364604451149151973516220688780641158032525942095082460558809478146762997947894331720\"\r\n        \"7156944724444619156106403460386923084903072939745009543215354892716740802010247502604281504528918447694551\"\r\n        \"3098386018762082596965715367021793679949619394347712768378223975194351307054342245684198453181675986568330\"\r\n        \"944304142055273452482597415528976880946034614875283450460287902605838183944797492586076259613037109375\"},\r\n    {0x1.fffffffffffffp-1003, chars_format::fixed, 1055,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023331590462580469\"\r\n        \"3844253453499407477079782934063522318702181205643081518627797277922194046206149665794466686845639943374175\"\r\n        \"7407757540623275028808683914862916265186414445003556603039372842768921682523435693455653616850365025938083\"\r\n        \"9436865039289715674552482114918540136932431233530347044020754586697787419194765483974565004740007692239249\"\r\n        \"9469425343202249501658729208902298303947032441377561282316065051884190164921117618956293525995895788663441\"\r\n        \"4313889448889238312212806920773846169806145879490019086430709785433481604020495005208563009057836895389102\"\r\n        \"6196772037524165193931430734043587359899238788695425536756447950388702614108684491368396906363351973136661\"\r\n        \"88860828411054690496519483105795376189206922975056690092057580521167636788959498517215251922607421875\"},\r\n    {0x1.fffffffffffffp-1002, chars_format::fixed, 1054,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046663180925160938\"\r\n        \"7688506906998814954159565868127044637404362411286163037255594555844388092412299331588933373691279886748351\"\r\n        \"4815515081246550057617367829725832530372828890007113206078745685537843365046871386911307233700730051876167\"\r\n        \"8873730078579431349104964229837080273864862467060694088041509173395574838389530967949130009480015384478499\"\r\n        \"8938850686404499003317458417804596607894064882755122564632130103768380329842235237912587051991791577326882\"\r\n        \"8627778897778476624425613841547692339612291758980038172861419570866963208040990010417126018115673790778205\"\r\n        \"2393544075048330387862861468087174719798477577390851073512895900777405228217368982736793812726703946273323\"\r\n        \"7772165682210938099303896621159075237841384595011338018411516104233527357791899703443050384521484375\"},\r\n    {0x1.fffffffffffffp-1001, chars_format::fixed, 1053,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093326361850321877\"\r\n        \"5377013813997629908319131736254089274808724822572326074511189111688776184824598663177866747382559773496702\"\r\n        \"9631030162493100115234735659451665060745657780014226412157491371075686730093742773822614467401460103752335\"\r\n        \"7747460157158862698209928459674160547729724934121388176083018346791149676779061935898260018960030768956999\"\r\n        \"7877701372808998006634916835609193215788129765510245129264260207536760659684470475825174103983583154653765\"\r\n        \"7255557795556953248851227683095384679224583517960076345722839141733926416081980020834252036231347581556410\"\r\n        \"4787088150096660775725722936174349439596955154781702147025791801554810456434737965473587625453407892546647\"\r\n        \"554433136442187619860779324231815047568276919002267603682303220846705471558379940688610076904296875\"},\r\n    {0x1.fffffffffffffp-1000, chars_format::fixed, 1052,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000186652723700643755\"\r\n        \"0754027627995259816638263472508178549617449645144652149022378223377552369649197326355733494765119546993405\"\r\n        \"9262060324986200230469471318903330121491315560028452824314982742151373460187485547645228934802920207504671\"\r\n        \"5494920314317725396419856919348321095459449868242776352166036693582299353558123871796520037920061537913999\"\r\n        \"5755402745617996013269833671218386431576259531020490258528520415073521319368940951650348207967166309307531\"\r\n        \"4511115591113906497702455366190769358449167035920152691445678283467852832163960041668504072462695163112820\"\r\n        \"9574176300193321551451445872348698879193910309563404294051583603109620912869475930947175250906815785093295\"\r\n        \"10886627288437523972155864846363009513655383800453520736460644169341094311675988137722015380859375\"},\r\n    {0x1.fffffffffffffp-999, chars_format::fixed, 1051,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000373305447401287510\"\r\n        \"1508055255990519633276526945016357099234899290289304298044756446755104739298394652711466989530239093986811\"\r\n        \"8524120649972400460938942637806660242982631120056905648629965484302746920374971095290457869605840415009343\"\r\n        \"0989840628635450792839713838696642190918899736485552704332073387164598707116247743593040075840123075827999\"\r\n        \"1510805491235992026539667342436772863152519062040980517057040830147042638737881903300696415934332618615062\"\r\n        \"9022231182227812995404910732381538716898334071840305382891356566935705664327920083337008144925390326225641\"\r\n        \"9148352600386643102902891744697397758387820619126808588103167206219241825738951861894350501813631570186590\"\r\n        \"2177325457687504794431172969272601902731076760090704147292128833868218862335197627544403076171875\"},\r\n    {0x1.fffffffffffffp-998, chars_format::fixed, 1050,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000746610894802575020\"\r\n        \"3016110511981039266553053890032714198469798580578608596089512893510209478596789305422933979060478187973623\"\r\n        \"7048241299944800921877885275613320485965262240113811297259930968605493840749942190580915739211680830018686\"\r\n        \"1979681257270901585679427677393284381837799472971105408664146774329197414232495487186080151680246151655998\"\r\n        \"3021610982471984053079334684873545726305038124081961034114081660294085277475763806601392831868665237230125\"\r\n        \"8044462364455625990809821464763077433796668143680610765782713133871411328655840166674016289850780652451283\"\r\n        \"8296705200773286205805783489394795516775641238253617176206334412438483651477903723788701003627263140373180\"\r\n        \"435465091537500958886234593854520380546215352018140829458425766773643772467039525508880615234375\"},\r\n    {0x1.fffffffffffffp-997, chars_format::fixed, 1049,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001493221789605150040\"\r\n        \"6032221023962078533106107780065428396939597161157217192179025787020418957193578610845867958120956375947247\"\r\n        \"4096482599889601843755770551226640971930524480227622594519861937210987681499884381161831478423361660037372\"\r\n        \"3959362514541803171358855354786568763675598945942210817328293548658394828464990974372160303360492303311996\"\r\n        \"6043221964943968106158669369747091452610076248163922068228163320588170554951527613202785663737330474460251\"\r\n        \"6088924728911251981619642929526154867593336287361221531565426267742822657311680333348032579701561304902567\"\r\n        \"6593410401546572411611566978789591033551282476507234352412668824876967302955807447577402007254526280746360\"\r\n        \"87093018307500191777246918770904076109243070403628165891685153354728754493407905101776123046875\"},\r\n    {0x1.fffffffffffffp-996, chars_format::fixed, 1048,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000002986443579210300081\"\r\n        \"2064442047924157066212215560130856793879194322314434384358051574040837914387157221691735916241912751894494\"\r\n        \"8192965199779203687511541102453281943861048960455245189039723874421975362999768762323662956846723320074744\"\r\n        \"7918725029083606342717710709573137527351197891884421634656587097316789656929981948744320606720984606623993\"\r\n        \"2086443929887936212317338739494182905220152496327844136456326641176341109903055226405571327474660948920503\"\r\n        \"2177849457822503963239285859052309735186672574722443063130852535485645314623360666696065159403122609805135\"\r\n        \"3186820803093144823223133957579182067102564953014468704825337649753934605911614895154804014509052561492721\"\r\n        \"7418603661500038355449383754180815221848614080725633178337030670945750898681581020355224609375\"},\r\n    {0x1.fffffffffffffp-995, chars_format::fixed, 1047,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000005972887158420600162\"\r\n        \"4128884095848314132424431120261713587758388644628868768716103148081675828774314443383471832483825503788989\"\r\n        \"6385930399558407375023082204906563887722097920910490378079447748843950725999537524647325913693446640149489\"\r\n        \"5837450058167212685435421419146275054702395783768843269313174194633579313859963897488641213441969213247986\"\r\n        \"4172887859775872424634677478988365810440304992655688272912653282352682219806110452811142654949321897841006\"\r\n        \"4355698915645007926478571718104619470373345149444886126261705070971290629246721333392130318806245219610270\"\r\n        \"6373641606186289646446267915158364134205129906028937409650675299507869211823229790309608029018105122985443\"\r\n        \"483720732300007671089876750836163044369722816145126635667406134189150179736316204071044921875\"},\r\n    {0x1.fffffffffffffp-994, chars_format::fixed, 1046,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000011945774316841200324\"\r\n        \"8257768191696628264848862240523427175516777289257737537432206296163351657548628886766943664967651007577979\"\r\n        \"2771860799116814750046164409813127775444195841820980756158895497687901451999075049294651827386893280298979\"\r\n        \"1674900116334425370870842838292550109404791567537686538626348389267158627719927794977282426883938426495972\"\r\n        \"8345775719551744849269354957976731620880609985311376545825306564705364439612220905622285309898643795682012\"\r\n        \"8711397831290015852957143436209238940746690298889772252523410141942581258493442666784260637612490439220541\"\r\n        \"2747283212372579292892535830316728268410259812057874819301350599015738423646459580619216058036210245970886\"\r\n        \"96744146460001534217975350167232608873944563229025327133481226837830035947263240814208984375\"},\r\n    {0x1.fffffffffffffp-993, chars_format::fixed, 1045,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000023891548633682400649\"\r\n        \"6515536383393256529697724481046854351033554578515475074864412592326703315097257773533887329935302015155958\"\r\n        \"5543721598233629500092328819626255550888391683641961512317790995375802903998150098589303654773786560597958\"\r\n        \"3349800232668850741741685676585100218809583135075373077252696778534317255439855589954564853767876852991945\"\r\n        \"6691551439103489698538709915953463241761219970622753091650613129410728879224441811244570619797287591364025\"\r\n        \"7422795662580031705914286872418477881493380597779544505046820283885162516986885333568521275224980878441082\"\r\n        \"5494566424745158585785071660633456536820519624115749638602701198031476847292919161238432116072420491941773\"\r\n        \"9348829292000306843595070033446521774788912645805065426696245367566007189452648162841796875\"},\r\n    {0x1.fffffffffffffp-992, chars_format::fixed, 1044,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000047783097267364801299\"\r\n        \"3031072766786513059395448962093708702067109157030950149728825184653406630194515547067774659870604030311917\"\r\n        \"1087443196467259000184657639252511101776783367283923024635581990751605807996300197178607309547573121195916\"\r\n        \"6699600465337701483483371353170200437619166270150746154505393557068634510879711179909129707535753705983891\"\r\n        \"3383102878206979397077419831906926483522439941245506183301226258821457758448883622489141239594575182728051\"\r\n        \"4845591325160063411828573744836955762986761195559089010093640567770325033973770667137042550449961756882165\"\r\n        \"0989132849490317171570143321266913073641039248231499277205402396062953694585838322476864232144840983883547\"\r\n        \"869765858400061368719014006689304354957782529161013085339249073513201437890529632568359375\"},\r\n    {0x1.fffffffffffffp-991, chars_format::fixed, 1043,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000095566194534729602598\"\r\n        \"6062145533573026118790897924187417404134218314061900299457650369306813260389031094135549319741208060623834\"\r\n        \"2174886392934518000369315278505022203553566734567846049271163981503211615992600394357214619095146242391833\"\r\n        \"3399200930675402966966742706340400875238332540301492309010787114137269021759422359818259415071507411967782\"\r\n        \"6766205756413958794154839663813852967044879882491012366602452517642915516897767244978282479189150365456102\"\r\n        \"9691182650320126823657147489673911525973522391118178020187281135540650067947541334274085100899923513764330\"\r\n        \"1978265698980634343140286642533826147282078496462998554410804792125907389171676644953728464289681967767095\"\r\n        \"73953171680012273743802801337860870991556505832202617067849814702640287578105926513671875\"},\r\n    {0x1.fffffffffffffp-990, chars_format::fixed, 1042,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000191132389069459205197\"\r\n        \"2124291067146052237581795848374834808268436628123800598915300738613626520778062188271098639482416121247668\"\r\n        \"4349772785869036000738630557010044407107133469135692098542327963006423231985200788714429238190292484783666\"\r\n        \"6798401861350805933933485412680801750476665080602984618021574228274538043518844719636518830143014823935565\"\r\n        \"3532411512827917588309679327627705934089759764982024733204905035285831033795534489956564958378300730912205\"\r\n        \"9382365300640253647314294979347823051947044782236356040374562271081300135895082668548170201799847027528660\"\r\n        \"3956531397961268686280573285067652294564156992925997108821609584251814778343353289907456928579363935534191\"\r\n        \"4790634336002454748760560267572174198311301166440523413569962940528057515621185302734375\"},\r\n    {0x1.fffffffffffffp-989, chars_format::fixed, 1041,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000382264778138918410394\"\r\n        \"4248582134292104475163591696749669616536873256247601197830601477227253041556124376542197278964832242495336\"\r\n        \"8699545571738072001477261114020088814214266938271384197084655926012846463970401577428858476380584969567333\"\r\n        \"3596803722701611867866970825361603500953330161205969236043148456549076087037689439273037660286029647871130\"\r\n        \"7064823025655835176619358655255411868179519529964049466409810070571662067591068979913129916756601461824411\"\r\n        \"8764730601280507294628589958695646103894089564472712080749124542162600271790165337096340403599694055057320\"\r\n        \"7913062795922537372561146570135304589128313985851994217643219168503629556686706579814913857158727871068382\"\r\n        \"958126867200490949752112053514434839662260233288104682713992588105611503124237060546875\"},\r\n    {0x1.fffffffffffffp-988, chars_format::fixed, 1040,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000764529556277836820788\"\r\n        \"8497164268584208950327183393499339233073746512495202395661202954454506083112248753084394557929664484990673\"\r\n        \"7399091143476144002954522228040177628428533876542768394169311852025692927940803154857716952761169939134666\"\r\n        \"7193607445403223735733941650723207001906660322411938472086296913098152174075378878546075320572059295742261\"\r\n        \"4129646051311670353238717310510823736359039059928098932819620141143324135182137959826259833513202923648823\"\r\n        \"7529461202561014589257179917391292207788179128945424161498249084325200543580330674192680807199388110114641\"\r\n        \"5826125591845074745122293140270609178256627971703988435286438337007259113373413159629827714317455742136765\"\r\n        \"91625373440098189950422410702886967932452046657620936542798517621122300624847412109375\"},\r\n    {0x1.fffffffffffffp-987, chars_format::fixed, 1039,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000001529059112555673641577\"\r\n        \"6994328537168417900654366786998678466147493024990404791322405908909012166224497506168789115859328969981347\"\r\n        \"4798182286952288005909044456080355256857067753085536788338623704051385855881606309715433905522339878269333\"\r\n        \"4387214890806447471467883301446414003813320644823876944172593826196304348150757757092150641144118591484522\"\r\n        \"8259292102623340706477434621021647472718078119856197865639240282286648270364275919652519667026405847297647\"\r\n        \"5058922405122029178514359834782584415576358257890848322996498168650401087160661348385361614398776220229283\"\r\n        \"1652251183690149490244586280541218356513255943407976870572876674014518226746826319259655428634911484273531\"\r\n        \"8325074688019637990084482140577393586490409331524187308559703524224460124969482421875\"},\r\n    {0x1.fffffffffffffp-986, chars_format::fixed, 1038,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000003058118225111347283155\"\r\n        \"3988657074336835801308733573997356932294986049980809582644811817818024332448995012337578231718657939962694\"\r\n        \"9596364573904576011818088912160710513714135506171073576677247408102771711763212619430867811044679756538666\"\r\n        \"8774429781612894942935766602892828007626641289647753888345187652392608696301515514184301282288237182969045\"\r\n        \"6518584205246681412954869242043294945436156239712395731278480564573296540728551839305039334052811694595295\"\r\n        \"0117844810244058357028719669565168831152716515781696645992996337300802174321322696770723228797552440458566\"\r\n        \"3304502367380298980489172561082436713026511886815953741145753348029036453493652638519310857269822968547063\"\r\n        \"665014937603927598016896428115478717298081866304837461711940704844892024993896484375\"},\r\n    {0x1.fffffffffffffp-985, chars_format::fixed, 1037,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000006116236450222694566310\"\r\n        \"7977314148673671602617467147994713864589972099961619165289623635636048664897990024675156463437315879925389\"\r\n        \"9192729147809152023636177824321421027428271012342147153354494816205543423526425238861735622089359513077333\"\r\n        \"7548859563225789885871533205785656015253282579295507776690375304785217392603031028368602564576474365938091\"\r\n        \"3037168410493362825909738484086589890872312479424791462556961129146593081457103678610078668105623389190590\"\r\n        \"0235689620488116714057439339130337662305433031563393291985992674601604348642645393541446457595104880917132\"\r\n        \"6609004734760597960978345122164873426053023773631907482291506696058072906987305277038621714539645937094127\"\r\n        \"33002987520785519603379285623095743459616373260967492342388140968978404998779296875\"},\r\n    {0x1.fffffffffffffp-984, chars_format::fixed, 1036,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000012232472900445389132621\"\r\n        \"5954628297347343205234934295989427729179944199923238330579247271272097329795980049350312926874631759850779\"\r\n        \"8385458295618304047272355648642842054856542024684294306708989632411086847052850477723471244178719026154667\"\r\n        \"5097719126451579771743066411571312030506565158591015553380750609570434785206062056737205129152948731876182\"\r\n        \"6074336820986725651819476968173179781744624958849582925113922258293186162914207357220157336211246778381180\"\r\n        \"0471379240976233428114878678260675324610866063126786583971985349203208697285290787082892915190209761834265\"\r\n        \"3218009469521195921956690244329746852106047547263814964583013392116145813974610554077243429079291874188254\"\r\n        \"6600597504157103920675857124619148691923274652193498468477628193795680999755859375\"},\r\n    {0x1.fffffffffffffp-983, chars_format::fixed, 1035,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000024464945800890778265243\"\r\n        \"1909256594694686410469868591978855458359888399846476661158494542544194659591960098700625853749263519701559\"\r\n        \"6770916591236608094544711297285684109713084049368588613417979264822173694105700955446942488357438052309335\"\r\n        \"0195438252903159543486132823142624061013130317182031106761501219140869570412124113474410258305897463752365\"\r\n        \"2148673641973451303638953936346359563489249917699165850227844516586372325828414714440314672422493556762360\"\r\n        \"0942758481952466856229757356521350649221732126253573167943970698406417394570581574165785830380419523668530\"\r\n        \"6436018939042391843913380488659493704212095094527629929166026784232291627949221108154486858158583748376509\"\r\n        \"320119500831420784135171424923829738384654930438699693695525638759136199951171875\"},\r\n    {0x1.fffffffffffffp-982, chars_format::fixed, 1034,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000048929891601781556530486\"\r\n        \"3818513189389372820939737183957710916719776799692953322316989085088389319183920197401251707498527039403119\"\r\n        \"3541833182473216189089422594571368219426168098737177226835958529644347388211401910893884976714876104618670\"\r\n        \"0390876505806319086972265646285248122026260634364062213523002438281739140824248226948820516611794927504730\"\r\n        \"4297347283946902607277907872692719126978499835398331700455689033172744651656829428880629344844987113524720\"\r\n        \"1885516963904933712459514713042701298443464252507146335887941396812834789141163148331571660760839047337061\"\r\n        \"2872037878084783687826760977318987408424190189055259858332053568464583255898442216308973716317167496753018\"\r\n        \"64023900166284156827034284984765947676930986087739938739105127751827239990234375\"},\r\n    {0x1.fffffffffffffp-981, chars_format::fixed, 1033,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000097859783203563113060972\"\r\n        \"7637026378778745641879474367915421833439553599385906644633978170176778638367840394802503414997054078806238\"\r\n        \"7083666364946432378178845189142736438852336197474354453671917059288694776422803821787769953429752209237340\"\r\n        \"0781753011612638173944531292570496244052521268728124427046004876563478281648496453897641033223589855009460\"\r\n        \"8594694567893805214555815745385438253956999670796663400911378066345489303313658857761258689689974227049440\"\r\n        \"3771033927809867424919029426085402596886928505014292671775882793625669578282326296663143321521678094674122\"\r\n        \"5744075756169567375653521954637974816848380378110519716664107136929166511796884432617947432634334993506037\"\r\n        \"2804780033256831365406856996953189535386197217547987747821025550365447998046875\"},\r\n    {0x1.fffffffffffffp-980, chars_format::fixed, 1032,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000195719566407126226121945\"\r\n        \"5274052757557491283758948735830843666879107198771813289267956340353557276735680789605006829994108157612477\"\r\n        \"4167332729892864756357690378285472877704672394948708907343834118577389552845607643575539906859504418474680\"\r\n        \"1563506023225276347889062585140992488105042537456248854092009753126956563296992907795282066447179710018921\"\r\n        \"7189389135787610429111631490770876507913999341593326801822756132690978606627317715522517379379948454098880\"\r\n        \"7542067855619734849838058852170805193773857010028585343551765587251339156564652593326286643043356189348245\"\r\n        \"1488151512339134751307043909275949633696760756221039433328214273858333023593768865235894865268669987012074\"\r\n        \"560956006651366273081371399390637907077239443509597549564205110073089599609375\"},\r\n    {0x1.fffffffffffffp-979, chars_format::fixed, 1031,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000391439132814252452243891\"\r\n        \"0548105515114982567517897471661687333758214397543626578535912680707114553471361579210013659988216315224954\"\r\n        \"8334665459785729512715380756570945755409344789897417814687668237154779105691215287151079813719008836949360\"\r\n        \"3127012046450552695778125170281984976210085074912497708184019506253913126593985815590564132894359420037843\"\r\n        \"4378778271575220858223262981541753015827998683186653603645512265381957213254635431045034758759896908197761\"\r\n        \"5084135711239469699676117704341610387547714020057170687103531174502678313129305186652573286086712378696490\"\r\n        \"2976303024678269502614087818551899267393521512442078866656428547716666047187537730471789730537339974024149\"\r\n        \"12191201330273254616274279878127581415447888701919509912841022014617919921875\"},\r\n    {0x1.fffffffffffffp-978, chars_format::fixed, 1030,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000782878265628504904487782\"\r\n        \"1096211030229965135035794943323374667516428795087253157071825361414229106942723158420027319976432630449909\"\r\n        \"6669330919571459025430761513141891510818689579794835629375336474309558211382430574302159627438017673898720\"\r\n        \"6254024092901105391556250340563969952420170149824995416368039012507826253187971631181128265788718840075686\"\r\n        \"8757556543150441716446525963083506031655997366373307207291024530763914426509270862090069517519793816395523\"\r\n        \"0168271422478939399352235408683220775095428040114341374207062349005356626258610373305146572173424757392980\"\r\n        \"5952606049356539005228175637103798534787043024884157733312857095433332094375075460943579461074679948048298\"\r\n        \"2438240266054650923254855975625516283089577740383901982568204402923583984375\"},\r\n    {0x1.fffffffffffffp-977, chars_format::fixed, 1029,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000001565756531257009808975564\"\r\n        \"2192422060459930270071589886646749335032857590174506314143650722828458213885446316840054639952865260899819\"\r\n        \"3338661839142918050861523026283783021637379159589671258750672948619116422764861148604319254876035347797441\"\r\n        \"2508048185802210783112500681127939904840340299649990832736078025015652506375943262362256531577437680151373\"\r\n        \"7515113086300883432893051926167012063311994732746614414582049061527828853018541724180139035039587632791046\"\r\n        \"0336542844957878798704470817366441550190856080228682748414124698010713252517220746610293144346849514785961\"\r\n        \"1905212098713078010456351274207597069574086049768315466625714190866664188750150921887158922149359896096596\"\r\n        \"487648053210930184650971195125103256617915548076780396513640880584716796875\"},\r\n    {0x1.fffffffffffffp-976, chars_format::fixed, 1028,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000003131513062514019617951128\"\r\n        \"4384844120919860540143179773293498670065715180349012628287301445656916427770892633680109279905730521799638\"\r\n        \"6677323678285836101723046052567566043274758319179342517501345897238232845529722297208638509752070695594882\"\r\n        \"5016096371604421566225001362255879809680680599299981665472156050031305012751886524724513063154875360302747\"\r\n        \"5030226172601766865786103852334024126623989465493228829164098123055657706037083448360278070079175265582092\"\r\n        \"0673085689915757597408941634732883100381712160457365496828249396021426505034441493220586288693699029571922\"\r\n        \"3810424197426156020912702548415194139148172099536630933251428381733328377500301843774317844298719792193192\"\r\n        \"97529610642186036930194239025020651323583109615356079302728176116943359375\"},\r\n    {0x1.fffffffffffffp-975, chars_format::fixed, 1027,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000006263026125028039235902256\"\r\n        \"8769688241839721080286359546586997340131430360698025256574602891313832855541785267360218559811461043599277\"\r\n        \"3354647356571672203446092105135132086549516638358685035002691794476465691059444594417277019504141391189765\"\r\n        \"0032192743208843132450002724511759619361361198599963330944312100062610025503773049449026126309750720605495\"\r\n        \"0060452345203533731572207704668048253247978930986457658328196246111315412074166896720556140158350531164184\"\r\n        \"1346171379831515194817883269465766200763424320914730993656498792042853010068882986441172577387398059143844\"\r\n        \"7620848394852312041825405096830388278296344199073261866502856763466656755000603687548635688597439584386385\"\r\n        \"9505922128437207386038847805004130264716621923071215860545635223388671875\"},\r\n    {0x1.fffffffffffffp-974, chars_format::fixed, 1026,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000012526052250056078471804513\"\r\n        \"7539376483679442160572719093173994680262860721396050513149205782627665711083570534720437119622922087198554\"\r\n        \"6709294713143344406892184210270264173099033276717370070005383588952931382118889188834554039008282782379530\"\r\n        \"0064385486417686264900005449023519238722722397199926661888624200125220051007546098898052252619501441210990\"\r\n        \"0120904690407067463144415409336096506495957861972915316656392492222630824148333793441112280316701062328368\"\r\n        \"2692342759663030389635766538931532401526848641829461987312997584085706020137765972882345154774796118287689\"\r\n        \"5241696789704624083650810193660776556592688398146523733005713526933313510001207375097271377194879168772771\"\r\n        \"901184425687441477207769561000826052943324384614243172109127044677734375\"},\r\n    {0x1.fffffffffffffp-973, chars_format::fixed, 1025,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000025052104500112156943609027\"\r\n        \"5078752967358884321145438186347989360525721442792101026298411565255331422167141069440874239245844174397109\"\r\n        \"3418589426286688813784368420540528346198066553434740140010767177905862764237778377669108078016565564759060\"\r\n        \"0128770972835372529800010898047038477445444794399853323777248400250440102015092197796104505239002882421980\"\r\n        \"0241809380814134926288830818672193012991915723945830633312784984445261648296667586882224560633402124656736\"\r\n        \"5384685519326060779271533077863064803053697283658923974625995168171412040275531945764690309549592236575379\"\r\n        \"0483393579409248167301620387321553113185376796293047466011427053866627020002414750194542754389758337545543\"\r\n        \"80236885137488295441553912200165210588664876922848634421825408935546875\"},\r\n    {0x1.fffffffffffffp-972, chars_format::fixed, 1024,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000050104209000224313887218055\"\r\n        \"0157505934717768642290876372695978721051442885584202052596823130510662844334282138881748478491688348794218\"\r\n        \"6837178852573377627568736841081056692396133106869480280021534355811725528475556755338216156033131129518120\"\r\n        \"0257541945670745059600021796094076954890889588799706647554496800500880204030184395592209010478005764843960\"\r\n        \"0483618761628269852577661637344386025983831447891661266625569968890523296593335173764449121266804249313473\"\r\n        \"0769371038652121558543066155726129606107394567317847949251990336342824080551063891529380619099184473150758\"\r\n        \"0966787158818496334603240774643106226370753592586094932022854107733254040004829500389085508779516675091087\"\r\n        \"6047377027497659088310782440033042117732975384569726884365081787109375\"},\r\n    {0x1.fffffffffffffp-971, chars_format::fixed, 1023,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000100208418000448627774436110\"\r\n        \"0315011869435537284581752745391957442102885771168404105193646261021325688668564277763496956983376697588437\"\r\n        \"3674357705146755255137473682162113384792266213738960560043068711623451056951113510676432312066262259036240\"\r\n        \"0515083891341490119200043592188153909781779177599413295108993601001760408060368791184418020956011529687920\"\r\n        \"0967237523256539705155323274688772051967662895783322533251139937781046593186670347528898242533608498626946\"\r\n        \"1538742077304243117086132311452259212214789134635695898503980672685648161102127783058761238198368946301516\"\r\n        \"1933574317636992669206481549286212452741507185172189864045708215466508080009659000778171017559033350182175\"\r\n        \"209475405499531817662156488006608423546595076913945376873016357421875\"},\r\n    {0x1.fffffffffffffp-970, chars_format::fixed, 1022,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000200416836000897255548872220\"\r\n        \"0630023738871074569163505490783914884205771542336808210387292522042651377337128555526993913966753395176874\"\r\n        \"7348715410293510510274947364324226769584532427477921120086137423246902113902227021352864624132524518072480\"\r\n        \"1030167782682980238400087184376307819563558355198826590217987202003520816120737582368836041912023059375840\"\r\n        \"1934475046513079410310646549377544103935325791566645066502279875562093186373340695057796485067216997253892\"\r\n        \"3077484154608486234172264622904518424429578269271391797007961345371296322204255566117522476396737892603032\"\r\n        \"3867148635273985338412963098572424905483014370344379728091416430933016160019318001556342035118066700364350\"\r\n        \"41895081099906363532431297601321684709319015382789075374603271484375\"},\r\n    {0x1.fffffffffffffp-969, chars_format::fixed, 1021,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000400833672001794511097744440\"\r\n        \"1260047477742149138327010981567829768411543084673616420774585044085302754674257111053987827933506790353749\"\r\n        \"4697430820587021020549894728648453539169064854955842240172274846493804227804454042705729248265049036144960\"\r\n        \"2060335565365960476800174368752615639127116710397653180435974404007041632241475164737672083824046118751680\"\r\n        \"3868950093026158820621293098755088207870651583133290133004559751124186372746681390115592970134433994507784\"\r\n        \"6154968309216972468344529245809036848859156538542783594015922690742592644408511132235044952793475785206064\"\r\n        \"7734297270547970676825926197144849810966028740688759456182832861866032320038636003112684070236133400728700\"\r\n        \"8379016219981272706486259520264336941863803076557815074920654296875\"},\r\n    {0x1.fffffffffffffp-968, chars_format::fixed, 1020,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000801667344003589022195488880\"\r\n        \"2520094955484298276654021963135659536823086169347232841549170088170605509348514222107975655867013580707498\"\r\n        \"9394861641174042041099789457296907078338129709911684480344549692987608455608908085411458496530098072289920\"\r\n        \"4120671130731920953600348737505231278254233420795306360871948808014083264482950329475344167648092237503360\"\r\n        \"7737900186052317641242586197510176415741303166266580266009119502248372745493362780231185940268867989015569\"\r\n        \"2309936618433944936689058491618073697718313077085567188031845381485185288817022264470089905586951570412129\"\r\n        \"5468594541095941353651852394289699621932057481377518912365665723732064640077272006225368140472266801457401\"\r\n        \"675803243996254541297251904052867388372760615311563014984130859375\"},\r\n    {0x1.fffffffffffffp-967, chars_format::fixed, 1019,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000001603334688007178044390977760\"\r\n        \"5040189910968596553308043926271319073646172338694465683098340176341211018697028444215951311734027161414997\"\r\n        \"8789723282348084082199578914593814156676259419823368960689099385975216911217816170822916993060196144579840\"\r\n        \"8241342261463841907200697475010462556508466841590612721743897616028166528965900658950688335296184475006721\"\r\n        \"5475800372104635282485172395020352831482606332533160532018239004496745490986725560462371880537735978031138\"\r\n        \"4619873236867889873378116983236147395436626154171134376063690762970370577634044528940179811173903140824259\"\r\n        \"0937189082191882707303704788579399243864114962755037824731331447464129280154544012450736280944533602914803\"\r\n        \"35160648799250908259450380810573477674552123062312602996826171875\"},\r\n    {0x1.fffffffffffffp-966, chars_format::fixed, 1018,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000003206669376014356088781955521\"\r\n        \"0080379821937193106616087852542638147292344677388931366196680352682422037394056888431902623468054322829995\"\r\n        \"7579446564696168164399157829187628313352518839646737921378198771950433822435632341645833986120392289159681\"\r\n        \"6482684522927683814401394950020925113016933683181225443487795232056333057931801317901376670592368950013443\"\r\n        \"0951600744209270564970344790040705662965212665066321064036478008993490981973451120924743761075471956062276\"\r\n        \"9239746473735779746756233966472294790873252308342268752127381525940741155268089057880359622347806281648518\"\r\n        \"1874378164383765414607409577158798487728229925510075649462662894928258560309088024901472561889067205829606\"\r\n        \"7032129759850181651890076162114695534910424612462520599365234375\"},\r\n    {0x1.fffffffffffffp-965, chars_format::fixed, 1017,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000006413338752028712177563911042\"\r\n        \"0160759643874386213232175705085276294584689354777862732393360705364844074788113776863805246936108645659991\"\r\n        \"5158893129392336328798315658375256626705037679293475842756397543900867644871264683291667972240784578319363\"\r\n        \"2965369045855367628802789900041850226033867366362450886975590464112666115863602635802753341184737900026886\"\r\n        \"1903201488418541129940689580081411325930425330132642128072956017986981963946902241849487522150943912124553\"\r\n        \"8479492947471559493512467932944589581746504616684537504254763051881482310536178115760719244695612563297036\"\r\n        \"3748756328767530829214819154317596975456459851020151298925325789856517120618176049802945123778134411659213\"\r\n        \"406425951970036330378015232422939106982084922492504119873046875\"},\r\n    {0x1.fffffffffffffp-964, chars_format::fixed, 1016,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000012826677504057424355127822084\"\r\n        \"0321519287748772426464351410170552589169378709555725464786721410729688149576227553727610493872217291319983\"\r\n        \"0317786258784672657596631316750513253410075358586951685512795087801735289742529366583335944481569156638726\"\r\n        \"5930738091710735257605579800083700452067734732724901773951180928225332231727205271605506682369475800053772\"\r\n        \"3806402976837082259881379160162822651860850660265284256145912035973963927893804483698975044301887824249107\"\r\n        \"6958985894943118987024935865889179163493009233369075008509526103762964621072356231521438489391225126594072\"\r\n        \"7497512657535061658429638308635193950912919702040302597850651579713034241236352099605890247556268823318426\"\r\n        \"81285190394007266075603046484587821396416984498500823974609375\"},\r\n    {0x1.fffffffffffffp-963, chars_format::fixed, 1015,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000025653355008114848710255644168\"\r\n        \"0643038575497544852928702820341105178338757419111450929573442821459376299152455107455220987744434582639966\"\r\n        \"0635572517569345315193262633501026506820150717173903371025590175603470579485058733166671888963138313277453\"\r\n        \"1861476183421470515211159600167400904135469465449803547902361856450664463454410543211013364738951600107544\"\r\n        \"7612805953674164519762758320325645303721701320530568512291824071947927855787608967397950088603775648498215\"\r\n        \"3917971789886237974049871731778358326986018466738150017019052207525929242144712463042876978782450253188145\"\r\n        \"4995025315070123316859276617270387901825839404080605195701303159426068482472704199211780495112537646636853\"\r\n        \"6257038078801453215120609296917564279283396899700164794921875\"},\r\n    {0x1.fffffffffffffp-962, chars_format::fixed, 1014,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000051306710016229697420511288336\"\r\n        \"1286077150995089705857405640682210356677514838222901859146885642918752598304910214910441975488869165279932\"\r\n        \"1271145035138690630386525267002053013640301434347806742051180351206941158970117466333343777926276626554906\"\r\n        \"3722952366842941030422319200334801808270938930899607095804723712901328926908821086422026729477903200215089\"\r\n        \"5225611907348329039525516640651290607443402641061137024583648143895855711575217934795900177207551296996430\"\r\n        \"7835943579772475948099743463556716653972036933476300034038104415051858484289424926085753957564900506376290\"\r\n        \"9990050630140246633718553234540775803651678808161210391402606318852136964945408398423560990225075293273707\"\r\n        \"251407615760290643024121859383512855856679379940032958984375\"},\r\n    {0x1.fffffffffffffp-961, chars_format::fixed, 1013,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000102613420032459394841022576672\"\r\n        \"2572154301990179411714811281364420713355029676445803718293771285837505196609820429820883950977738330559864\"\r\n        \"2542290070277381260773050534004106027280602868695613484102360702413882317940234932666687555852553253109812\"\r\n        \"7445904733685882060844638400669603616541877861799214191609447425802657853817642172844053458955806400430179\"\r\n        \"0451223814696658079051033281302581214886805282122274049167296287791711423150435869591800354415102593992861\"\r\n        \"5671887159544951896199486927113433307944073866952600068076208830103716968578849852171507915129801012752581\"\r\n        \"9980101260280493267437106469081551607303357616322420782805212637704273929890816796847121980450150586547414\"\r\n        \"50281523152058128604824371876702571171335875988006591796875\"},\r\n    {0x1.fffffffffffffp-960, chars_format::fixed, 1012,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000205226840064918789682045153344\"\r\n        \"5144308603980358823429622562728841426710059352891607436587542571675010393219640859641767901955476661119728\"\r\n        \"5084580140554762521546101068008212054561205737391226968204721404827764635880469865333375111705106506219625\"\r\n        \"4891809467371764121689276801339207233083755723598428383218894851605315707635284345688106917911612800860358\"\r\n        \"0902447629393316158102066562605162429773610564244548098334592575583422846300871739183600708830205187985723\"\r\n        \"1343774319089903792398973854226866615888147733905200136152417660207433937157699704343015830259602025505163\"\r\n        \"9960202520560986534874212938163103214606715232644841565610425275408547859781633593694243960900301173094829\"\r\n        \"0056304630411625720964874375340514234267175197601318359375\"},\r\n    {0x1.fffffffffffffp-959, chars_format::fixed, 1011,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000410453680129837579364090306689\"\r\n        \"0288617207960717646859245125457682853420118705783214873175085143350020786439281719283535803910953322239457\"\r\n        \"0169160281109525043092202136016424109122411474782453936409442809655529271760939730666750223410213012439250\"\r\n        \"9783618934743528243378553602678414466167511447196856766437789703210631415270568691376213835823225601720716\"\r\n        \"1804895258786632316204133125210324859547221128489096196669185151166845692601743478367201417660410375971446\"\r\n        \"2687548638179807584797947708453733231776295467810400272304835320414867874315399408686031660519204051010327\"\r\n        \"9920405041121973069748425876326206429213430465289683131220850550817095719563267187388487921800602346189658\"\r\n        \"011260926082325144192974875068102846853435039520263671875\"},\r\n    {0x1.fffffffffffffp-958, chars_format::fixed, 1010,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000820907360259675158728180613378\"\r\n        \"0577234415921435293718490250915365706840237411566429746350170286700041572878563438567071607821906644478914\"\r\n        \"0338320562219050086184404272032848218244822949564907872818885619311058543521879461333500446820426024878501\"\r\n        \"9567237869487056486757107205356828932335022894393713532875579406421262830541137382752427671646451203441432\"\r\n        \"3609790517573264632408266250420649719094442256978192393338370302333691385203486956734402835320820751942892\"\r\n        \"5375097276359615169595895416907466463552590935620800544609670640829735748630798817372063321038408102020655\"\r\n        \"9840810082243946139496851752652412858426860930579366262441701101634191439126534374776975843601204692379316\"\r\n        \"02252185216465028838594975013620569370687007904052734375\"},\r\n    {0x1.fffffffffffffp-957, chars_format::fixed, 1009,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000001641814720519350317456361226756\"\r\n        \"1154468831842870587436980501830731413680474823132859492700340573400083145757126877134143215643813288957828\"\r\n        \"0676641124438100172368808544065696436489645899129815745637771238622117087043758922667000893640852049757003\"\r\n        \"9134475738974112973514214410713657864670045788787427065751158812842525661082274765504855343292902406882864\"\r\n        \"7219581035146529264816532500841299438188884513956384786676740604667382770406973913468805670641641503885785\"\r\n        \"0750194552719230339191790833814932927105181871241601089219341281659471497261597634744126642076816204041311\"\r\n        \"9681620164487892278993703505304825716853721861158732524883402203268382878253068749553951687202409384758632\"\r\n        \"0450437043293005767718995002724113874137401580810546875\"},\r\n    {0x1.fffffffffffffp-956, chars_format::fixed, 1008,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000003283629441038700634912722453512\"\r\n        \"2308937663685741174873961003661462827360949646265718985400681146800166291514253754268286431287626577915656\"\r\n        \"1353282248876200344737617088131392872979291798259631491275542477244234174087517845334001787281704099514007\"\r\n        \"8268951477948225947028428821427315729340091577574854131502317625685051322164549531009710686585804813765729\"\r\n        \"4439162070293058529633065001682598876377769027912769573353481209334765540813947826937611341283283007771570\"\r\n        \"1500389105438460678383581667629865854210363742483202178438682563318942994523195269488253284153632408082623\"\r\n        \"9363240328975784557987407010609651433707443722317465049766804406536765756506137499107903374404818769517264\"\r\n        \"090087408658601153543799000544822774827480316162109375\"},\r\n    {0x1.fffffffffffffp-955, chars_format::fixed, 1007,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000006567258882077401269825444907024\"\r\n        \"4617875327371482349747922007322925654721899292531437970801362293600332583028507508536572862575253155831312\"\r\n        \"2706564497752400689475234176262785745958583596519262982551084954488468348175035690668003574563408199028015\"\r\n        \"6537902955896451894056857642854631458680183155149708263004635251370102644329099062019421373171609627531458\"\r\n        \"8878324140586117059266130003365197752755538055825539146706962418669531081627895653875222682566566015543140\"\r\n        \"3000778210876921356767163335259731708420727484966404356877365126637885989046390538976506568307264816165247\"\r\n        \"8726480657951569115974814021219302867414887444634930099533608813073531513012274998215806748809637539034528\"\r\n        \"18017481731720230708759800108964554965496063232421875\"},\r\n    {0x1.fffffffffffffp-954, chars_format::fixed, 1006,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000013134517764154802539650889814048\"\r\n        \"9235750654742964699495844014645851309443798585062875941602724587200665166057015017073145725150506311662624\"\r\n        \"5413128995504801378950468352525571491917167193038525965102169908976936696350071381336007149126816398056031\"\r\n        \"3075805911792903788113715285709262917360366310299416526009270502740205288658198124038842746343219255062917\"\r\n        \"7756648281172234118532260006730395505511076111651078293413924837339062163255791307750445365133132031086280\"\r\n        \"6001556421753842713534326670519463416841454969932808713754730253275771978092781077953013136614529632330495\"\r\n        \"7452961315903138231949628042438605734829774889269860199067217626147063026024549996431613497619275078069056\"\r\n        \"3603496346344046141751960021792910993099212646484375\"},\r\n    {0x1.fffffffffffffp-953, chars_format::fixed, 1005,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000026269035528309605079301779628097\"\r\n        \"8471501309485929398991688029291702618887597170125751883205449174401330332114030034146291450301012623325249\"\r\n        \"0826257991009602757900936705051142983834334386077051930204339817953873392700142762672014298253632796112062\"\r\n        \"6151611823585807576227430571418525834720732620598833052018541005480410577316396248077685492686438510125835\"\r\n        \"5513296562344468237064520013460791011022152223302156586827849674678124326511582615500890730266264062172561\"\r\n        \"2003112843507685427068653341038926833682909939865617427509460506551543956185562155906026273229059264660991\"\r\n        \"4905922631806276463899256084877211469659549778539720398134435252294126052049099992863226995238550156138112\"\r\n        \"720699269268809228350392004358582198619842529296875\"},\r\n    {0x1.fffffffffffffp-952, chars_format::fixed, 1004,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000052538071056619210158603559256195\"\r\n        \"6943002618971858797983376058583405237775194340251503766410898348802660664228060068292582900602025246650498\"\r\n        \"1652515982019205515801873410102285967668668772154103860408679635907746785400285525344028596507265592224125\"\r\n        \"2303223647171615152454861142837051669441465241197666104037082010960821154632792496155370985372877020251671\"\r\n        \"1026593124688936474129040026921582022044304446604313173655699349356248653023165231001781460532528124345122\"\r\n        \"4006225687015370854137306682077853667365819879731234855018921013103087912371124311812052546458118529321982\"\r\n        \"9811845263612552927798512169754422939319099557079440796268870504588252104098199985726453990477100312276225\"\r\n        \"44139853853761845670078400871716439723968505859375\"},\r\n    {0x1.fffffffffffffp-951, chars_format::fixed, 1003,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000105076142113238420317207118512391\"\r\n        \"3886005237943717595966752117166810475550388680503007532821796697605321328456120136585165801204050493300996\"\r\n        \"3305031964038411031603746820204571935337337544308207720817359271815493570800571050688057193014531184448250\"\r\n        \"4606447294343230304909722285674103338882930482395332208074164021921642309265584992310741970745754040503342\"\r\n        \"2053186249377872948258080053843164044088608893208626347311398698712497306046330462003562921065056248690244\"\r\n        \"8012451374030741708274613364155707334731639759462469710037842026206175824742248623624105092916237058643965\"\r\n        \"9623690527225105855597024339508845878638199114158881592537741009176504208196399971452907980954200624552450\"\r\n        \"8827970770752369134015680174343287944793701171875\"},\r\n    {0x1.fffffffffffffp-950, chars_format::fixed, 1002,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000210152284226476840634414237024782\"\r\n        \"7772010475887435191933504234333620951100777361006015065643593395210642656912240273170331602408100986601992\"\r\n        \"6610063928076822063207493640409143870674675088616415441634718543630987141601142101376114386029062368896500\"\r\n        \"9212894588686460609819444571348206677765860964790664416148328043843284618531169984621483941491508081006684\"\r\n        \"4106372498755745896516160107686328088177217786417252694622797397424994612092660924007125842130112497380489\"\r\n        \"6024902748061483416549226728311414669463279518924939420075684052412351649484497247248210185832474117287931\"\r\n        \"9247381054450211711194048679017691757276398228317763185075482018353008416392799942905815961908401249104901\"\r\n        \"765594154150473826803136034868657588958740234375\"},\r\n    {0x1.fffffffffffffp-949, chars_format::fixed, 1001,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000420304568452953681268828474049565\"\r\n        \"5544020951774870383867008468667241902201554722012030131287186790421285313824480546340663204816201973203985\"\r\n        \"3220127856153644126414987280818287741349350177232830883269437087261974283202284202752228772058124737793001\"\r\n        \"8425789177372921219638889142696413355531721929581328832296656087686569237062339969242967882983016162013368\"\r\n        \"8212744997511491793032320215372656176354435572834505389245594794849989224185321848014251684260224994760979\"\r\n        \"2049805496122966833098453456622829338926559037849878840151368104824703298968994494496420371664948234575863\"\r\n        \"8494762108900423422388097358035383514552796456635526370150964036706016832785599885811631923816802498209803\"\r\n        \"53118830830094765360627206973731517791748046875\"},\r\n    {0x1.fffffffffffffp-948, chars_format::fixed, 1000,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000840609136905907362537656948099131\"\r\n        \"1088041903549740767734016937334483804403109444024060262574373580842570627648961092681326409632403946407970\"\r\n        \"6440255712307288252829974561636575482698700354465661766538874174523948566404568405504457544116249475586003\"\r\n        \"6851578354745842439277778285392826711063443859162657664593312175373138474124679938485935765966032324026737\"\r\n        \"6425489995022983586064640430745312352708871145669010778491189589699978448370643696028503368520449989521958\"\r\n        \"4099610992245933666196906913245658677853118075699757680302736209649406597937988988992840743329896469151727\"\r\n        \"6989524217800846844776194716070767029105592913271052740301928073412033665571199771623263847633604996419607\"\r\n        \"0623766166018953072125441394746303558349609375\"},\r\n    {0x1.fffffffffffffp-947, chars_format::fixed, 999,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000001681218273811814725075313896198262\"\r\n        \"2176083807099481535468033874668967608806218888048120525148747161685141255297922185362652819264807892815941\"\r\n        \"2880511424614576505659949123273150965397400708931323533077748349047897132809136811008915088232498951172007\"\r\n        \"3703156709491684878555556570785653422126887718325315329186624350746276948249359876971871531932064648053475\"\r\n        \"2850979990045967172129280861490624705417742291338021556982379179399956896741287392057006737040899979043916\"\r\n        \"8199221984491867332393813826491317355706236151399515360605472419298813195875977977985681486659792938303455\"\r\n        \"3979048435601693689552389432141534058211185826542105480603856146824067331142399543246527695267209992839214\"\r\n        \"124753233203790614425088278949260711669921875\"},\r\n    {0x1.fffffffffffffp-946, chars_format::fixed, 998,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000003362436547623629450150627792396524\"\r\n        \"4352167614198963070936067749337935217612437776096241050297494323370282510595844370725305638529615785631882\"\r\n        \"5761022849229153011319898246546301930794801417862647066155496698095794265618273622017830176464997902344014\"\r\n        \"7406313418983369757111113141571306844253775436650630658373248701492553896498719753943743063864129296106950\"\r\n        \"5701959980091934344258561722981249410835484582676043113964758358799913793482574784114013474081799958087833\"\r\n        \"6398443968983734664787627652982634711412472302799030721210944838597626391751955955971362973319585876606910\"\r\n        \"7958096871203387379104778864283068116422371653084210961207712293648134662284799086493055390534419985678428\"\r\n        \"24950646640758122885017655789852142333984375\"},\r\n    {0x1.fffffffffffffp-945, chars_format::fixed, 997,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000006724873095247258900301255584793048\"\r\n        \"8704335228397926141872135498675870435224875552192482100594988646740565021191688741450611277059231571263765\"\r\n        \"1522045698458306022639796493092603861589602835725294132310993396191588531236547244035660352929995804688029\"\r\n        \"4812626837966739514222226283142613688507550873301261316746497402985107792997439507887486127728258592213901\"\r\n        \"1403919960183868688517123445962498821670969165352086227929516717599827586965149568228026948163599916175667\"\r\n        \"2796887937967469329575255305965269422824944605598061442421889677195252783503911911942725946639171753213821\"\r\n        \"5916193742406774758209557728566136232844743306168421922415424587296269324569598172986110781068839971356856\"\r\n        \"4990129328151624577003531157970428466796875\"},\r\n    {0x1.fffffffffffffp-944, chars_format::fixed, 996,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000013449746190494517800602511169586097\"\r\n        \"7408670456795852283744270997351740870449751104384964201189977293481130042383377482901222554118463142527530\"\r\n        \"3044091396916612045279592986185207723179205671450588264621986792383177062473094488071320705859991609376058\"\r\n        \"9625253675933479028444452566285227377015101746602522633492994805970215585994879015774972255456517184427802\"\r\n        \"2807839920367737377034246891924997643341938330704172455859033435199655173930299136456053896327199832351334\"\r\n        \"5593775875934938659150510611930538845649889211196122884843779354390505567007823823885451893278343506427643\"\r\n        \"1832387484813549516419115457132272465689486612336843844830849174592538649139196345972221562137679942713712\"\r\n        \"998025865630324915400706231594085693359375\"},\r\n    {0x1.fffffffffffffp-943, chars_format::fixed, 995,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000026899492380989035601205022339172195\"\r\n        \"4817340913591704567488541994703481740899502208769928402379954586962260084766754965802445108236926285055060\"\r\n        \"6088182793833224090559185972370415446358411342901176529243973584766354124946188976142641411719983218752117\"\r\n        \"9250507351866958056888905132570454754030203493205045266985989611940431171989758031549944510913034368855604\"\r\n        \"5615679840735474754068493783849995286683876661408344911718066870399310347860598272912107792654399664702669\"\r\n        \"1187551751869877318301021223861077691299778422392245769687558708781011134015647647770903786556687012855286\"\r\n        \"3664774969627099032838230914264544931378973224673687689661698349185077298278392691944443124275359885427425\"\r\n        \"99605173126064983080141246318817138671875\"},\r\n    {0x1.fffffffffffffp-942, chars_format::fixed, 994,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000053798984761978071202410044678344390\"\r\n        \"9634681827183409134977083989406963481799004417539856804759909173924520169533509931604890216473852570110121\"\r\n        \"2176365587666448181118371944740830892716822685802353058487947169532708249892377952285282823439966437504235\"\r\n        \"8501014703733916113777810265140909508060406986410090533971979223880862343979516063099889021826068737711209\"\r\n        \"1231359681470949508136987567699990573367753322816689823436133740798620695721196545824215585308799329405338\"\r\n        \"2375103503739754636602042447722155382599556844784491539375117417562022268031295295541807573113374025710572\"\r\n        \"7329549939254198065676461828529089862757946449347375379323396698370154596556785383888886248550719770854851\"\r\n        \"9921034625212996616028249263763427734375\"},\r\n    {0x1.fffffffffffffp-941, chars_format::fixed, 993,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000107597969523956142404820089356688781\"\r\n        \"9269363654366818269954167978813926963598008835079713609519818347849040339067019863209780432947705140220242\"\r\n        \"4352731175332896362236743889481661785433645371604706116975894339065416499784755904570565646879932875008471\"\r\n        \"7002029407467832227555620530281819016120813972820181067943958447761724687959032126199778043652137475422418\"\r\n        \"2462719362941899016273975135399981146735506645633379646872267481597241391442393091648431170617598658810676\"\r\n        \"4750207007479509273204084895444310765199113689568983078750234835124044536062590591083615146226748051421145\"\r\n        \"4659099878508396131352923657058179725515892898694750758646793396740309193113570767777772497101439541709703\"\r\n        \"984206925042599323205649852752685546875\"},\r\n    {0x1.fffffffffffffp-940, chars_format::fixed, 992,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000215195939047912284809640178713377563\"\r\n        \"8538727308733636539908335957627853927196017670159427219039636695698080678134039726419560865895410280440484\"\r\n        \"8705462350665792724473487778963323570867290743209412233951788678130832999569511809141131293759865750016943\"\r\n        \"4004058814935664455111241060563638032241627945640362135887916895523449375918064252399556087304274950844836\"\r\n        \"4925438725883798032547950270799962293471013291266759293744534963194482782884786183296862341235197317621352\"\r\n        \"9500414014959018546408169790888621530398227379137966157500469670248089072125181182167230292453496102842290\"\r\n        \"9318199757016792262705847314116359451031785797389501517293586793480618386227141535555544994202879083419407\"\r\n        \"96841385008519864641129970550537109375\"},\r\n    {0x1.fffffffffffffp-939, chars_format::fixed, 991,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000430391878095824569619280357426755127\"\r\n        \"7077454617467273079816671915255707854392035340318854438079273391396161356268079452839121731790820560880969\"\r\n        \"7410924701331585448946975557926647141734581486418824467903577356261665999139023618282262587519731500033886\"\r\n        \"8008117629871328910222482121127276064483255891280724271775833791046898751836128504799112174608549901689672\"\r\n        \"9850877451767596065095900541599924586942026582533518587489069926388965565769572366593724682470394635242705\"\r\n        \"9000828029918037092816339581777243060796454758275932315000939340496178144250362364334460584906992205684581\"\r\n        \"8636399514033584525411694628232718902063571594779003034587173586961236772454283071111089988405758166838815\"\r\n        \"9368277001703972928225994110107421875\"},\r\n    {0x1.fffffffffffffp-938, chars_format::fixed, 990,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000860783756191649139238560714853510255\"\r\n        \"4154909234934546159633343830511415708784070680637708876158546782792322712536158905678243463581641121761939\"\r\n        \"4821849402663170897893951115853294283469162972837648935807154712523331998278047236564525175039463000067773\"\r\n        \"6016235259742657820444964242254552128966511782561448543551667582093797503672257009598224349217099803379345\"\r\n        \"9701754903535192130191801083199849173884053165067037174978139852777931131539144733187449364940789270485411\"\r\n        \"8001656059836074185632679163554486121592909516551864630001878680992356288500724728668921169813984411369163\"\r\n        \"7272799028067169050823389256465437804127143189558006069174347173922473544908566142222179976811516333677631\"\r\n        \"873655400340794585645198822021484375\"},\r\n    {0x1.fffffffffffffp-937, chars_format::fixed, 989,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000001721567512383298278477121429707020510\"\r\n        \"8309818469869092319266687661022831417568141361275417752317093565584645425072317811356486927163282243523878\"\r\n        \"9643698805326341795787902231706588566938325945675297871614309425046663996556094473129050350078926000135547\"\r\n        \"2032470519485315640889928484509104257933023565122897087103335164187595007344514019196448698434199606758691\"\r\n        \"9403509807070384260383602166399698347768106330134074349956279705555862263078289466374898729881578540970823\"\r\n        \"6003312119672148371265358327108972243185819033103729260003757361984712577001449457337842339627968822738327\"\r\n        \"4545598056134338101646778512930875608254286379116012138348694347844947089817132284444359953623032667355263\"\r\n        \"74731080068158917129039764404296875\"},\r\n    {0x1.fffffffffffffp-936, chars_format::fixed, 988,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000003443135024766596556954242859414041021\"\r\n        \"6619636939738184638533375322045662835136282722550835504634187131169290850144635622712973854326564487047757\"\r\n        \"9287397610652683591575804463413177133876651891350595743228618850093327993112188946258100700157852000271094\"\r\n        \"4064941038970631281779856969018208515866047130245794174206670328375190014689028038392897396868399213517383\"\r\n        \"8807019614140768520767204332799396695536212660268148699912559411111724526156578932749797459763157081941647\"\r\n        \"2006624239344296742530716654217944486371638066207458520007514723969425154002898914675684679255937645476654\"\r\n        \"9091196112268676203293557025861751216508572758232024276697388695689894179634264568888719907246065334710527\"\r\n        \"4946216013631783425807952880859375\"},\r\n    {0x1.fffffffffffffp-935, chars_format::fixed, 987,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000006886270049533193113908485718828082043\"\r\n        \"3239273879476369277066750644091325670272565445101671009268374262338581700289271245425947708653128974095515\"\r\n        \"8574795221305367183151608926826354267753303782701191486457237700186655986224377892516201400315704000542188\"\r\n        \"8129882077941262563559713938036417031732094260491588348413340656750380029378056076785794793736798427034767\"\r\n        \"7614039228281537041534408665598793391072425320536297399825118822223449052313157865499594919526314163883294\"\r\n        \"4013248478688593485061433308435888972743276132414917040015029447938850308005797829351369358511875290953309\"\r\n        \"8182392224537352406587114051723502433017145516464048553394777391379788359268529137777439814492130669421054\"\r\n        \"989243202726356685161590576171875\"},\r\n    {0x1.fffffffffffffp-934, chars_format::fixed, 986,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000013772540099066386227816971437656164086\"\r\n        \"6478547758952738554133501288182651340545130890203342018536748524677163400578542490851895417306257948191031\"\r\n        \"7149590442610734366303217853652708535506607565402382972914475400373311972448755785032402800631408001084377\"\r\n        \"6259764155882525127119427876072834063464188520983176696826681313500760058756112153571589587473596854069535\"\r\n        \"5228078456563074083068817331197586782144850641072594799650237644446898104626315730999189839052628327766588\"\r\n        \"8026496957377186970122866616871777945486552264829834080030058895877700616011595658702738717023750581906619\"\r\n        \"6364784449074704813174228103447004866034291032928097106789554782759576718537058275554879628984261338842109\"\r\n        \"97848640545271337032318115234375\"},\r\n    {0x1.fffffffffffffp-933, chars_format::fixed, 985,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000027545080198132772455633942875312328173\"\r\n        \"2957095517905477108267002576365302681090261780406684037073497049354326801157084981703790834612515896382063\"\r\n        \"4299180885221468732606435707305417071013215130804765945828950800746623944897511570064805601262816002168755\"\r\n        \"2519528311765050254238855752145668126928377041966353393653362627001520117512224307143179174947193708139071\"\r\n        \"0456156913126148166137634662395173564289701282145189599300475288893796209252631461998379678105256655533177\"\r\n        \"6052993914754373940245733233743555890973104529659668160060117791755401232023191317405477434047501163813239\"\r\n        \"2729568898149409626348456206894009732068582065856194213579109565519153437074116551109759257968522677684219\"\r\n        \"9569728109054267406463623046875\"},\r\n    {0x1.fffffffffffffp-932, chars_format::fixed, 984,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000055090160396265544911267885750624656346\"\r\n        \"5914191035810954216534005152730605362180523560813368074146994098708653602314169963407581669225031792764126\"\r\n        \"8598361770442937465212871414610834142026430261609531891657901601493247889795023140129611202525632004337510\"\r\n        \"5039056623530100508477711504291336253856754083932706787306725254003040235024448614286358349894387416278142\"\r\n        \"0912313826252296332275269324790347128579402564290379198600950577787592418505262923996759356210513311066355\"\r\n        \"2105987829508747880491466467487111781946209059319336320120235583510802464046382634810954868095002327626478\"\r\n        \"5459137796298819252696912413788019464137164131712388427158219131038306874148233102219518515937045355368439\"\r\n        \"913945621810853481292724609375\"},\r\n    {0x1.fffffffffffffp-931, chars_format::fixed, 983,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000110180320792531089822535771501249312693\"\r\n        \"1828382071621908433068010305461210724361047121626736148293988197417307204628339926815163338450063585528253\"\r\n        \"7196723540885874930425742829221668284052860523219063783315803202986495779590046280259222405051264008675021\"\r\n        \"0078113247060201016955423008582672507713508167865413574613450508006080470048897228572716699788774832556284\"\r\n        \"1824627652504592664550538649580694257158805128580758397201901155575184837010525847993518712421026622132710\"\r\n        \"4211975659017495760982932934974223563892418118638672640240471167021604928092765269621909736190004655252957\"\r\n        \"0918275592597638505393824827576038928274328263424776854316438262076613748296466204439037031874090710736879\"\r\n        \"82789124362170696258544921875\"},\r\n    {0x1.fffffffffffffp-930, chars_format::fixed, 982,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000220360641585062179645071543002498625386\"\r\n        \"3656764143243816866136020610922421448722094243253472296587976394834614409256679853630326676900127171056507\"\r\n        \"4393447081771749860851485658443336568105721046438127566631606405972991559180092560518444810102528017350042\"\r\n        \"0156226494120402033910846017165345015427016335730827149226901016012160940097794457145433399577549665112568\"\r\n        \"3649255305009185329101077299161388514317610257161516794403802311150369674021051695987037424842053244265420\"\r\n        \"8423951318034991521965865869948447127784836237277345280480942334043209856185530539243819472380009310505914\"\r\n        \"1836551185195277010787649655152077856548656526849553708632876524153227496592932408878074063748181421473759\"\r\n        \"6557824872434139251708984375\"},\r\n    {0x1.fffffffffffffp-929, chars_format::fixed, 981,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000440721283170124359290143086004997250772\"\r\n        \"7313528286487633732272041221844842897444188486506944593175952789669228818513359707260653353800254342113014\"\r\n        \"8786894163543499721702971316886673136211442092876255133263212811945983118360185121036889620205056034700084\"\r\n        \"0312452988240804067821692034330690030854032671461654298453802032024321880195588914290866799155099330225136\"\r\n        \"7298510610018370658202154598322777028635220514323033588807604622300739348042103391974074849684106488530841\"\r\n        \"6847902636069983043931731739896894255569672474554690560961884668086419712371061078487638944760018621011828\"\r\n        \"3673102370390554021575299310304155713097313053699107417265753048306454993185864817756148127496362842947519\"\r\n        \"311564974486827850341796875\"},\r\n    {0x1.fffffffffffffp-928, chars_format::fixed, 980,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000881442566340248718580286172009994501545\"\r\n        \"4627056572975267464544082443689685794888376973013889186351905579338457637026719414521306707600508684226029\"\r\n        \"7573788327086999443405942633773346272422884185752510266526425623891966236720370242073779240410112069400168\"\r\n        \"0624905976481608135643384068661380061708065342923308596907604064048643760391177828581733598310198660450273\"\r\n        \"4597021220036741316404309196645554057270441028646067177615209244601478696084206783948149699368212977061683\"\r\n        \"3695805272139966087863463479793788511139344949109381121923769336172839424742122156975277889520037242023656\"\r\n        \"7346204740781108043150598620608311426194626107398214834531506096612909986371729635512296254992725685895038\"\r\n        \"62312994897365570068359375\"},\r\n    {0x1.fffffffffffffp-927, chars_format::fixed, 979,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000001762885132680497437160572344019989003090\"\r\n        \"9254113145950534929088164887379371589776753946027778372703811158676915274053438829042613415201017368452059\"\r\n        \"5147576654173998886811885267546692544845768371505020533052851247783932473440740484147558480820224138800336\"\r\n        \"1249811952963216271286768137322760123416130685846617193815208128097287520782355657163467196620397320900546\"\r\n        \"9194042440073482632808618393291108114540882057292134355230418489202957392168413567896299398736425954123366\"\r\n        \"7391610544279932175726926959587577022278689898218762243847538672345678849484244313950555779040074484047313\"\r\n        \"4692409481562216086301197241216622852389252214796429669063012193225819972743459271024592509985451371790077\"\r\n        \"2462598979473114013671875\"},\r\n    {0x1.fffffffffffffp-926, chars_format::fixed, 978,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000003525770265360994874321144688039978006181\"\r\n        \"8508226291901069858176329774758743179553507892055556745407622317353830548106877658085226830402034736904119\"\r\n        \"0295153308347997773623770535093385089691536743010041066105702495567864946881480968295116961640448277600672\"\r\n        \"2499623905926432542573536274645520246832261371693234387630416256194575041564711314326934393240794641801093\"\r\n        \"8388084880146965265617236786582216229081764114584268710460836978405914784336827135792598797472851908246733\"\r\n        \"4783221088559864351453853919175154044557379796437524487695077344691357698968488627901111558080148968094626\"\r\n        \"9384818963124432172602394482433245704778504429592859338126024386451639945486918542049185019970902743580154\"\r\n        \"492519795894622802734375\"},\r\n    {0x1.fffffffffffffp-925, chars_format::fixed, 977,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000007051540530721989748642289376079956012363\"\r\n        \"7016452583802139716352659549517486359107015784111113490815244634707661096213755316170453660804069473808238\"\r\n        \"0590306616695995547247541070186770179383073486020082132211404991135729893762961936590233923280896555201344\"\r\n        \"4999247811852865085147072549291040493664522743386468775260832512389150083129422628653868786481589283602187\"\r\n        \"6776169760293930531234473573164432458163528229168537420921673956811829568673654271585197594945703816493466\"\r\n        \"9566442177119728702907707838350308089114759592875048975390154689382715397936977255802223116160297936189253\"\r\n        \"8769637926248864345204788964866491409557008859185718676252048772903279890973837084098370039941805487160308\"\r\n        \"98503959178924560546875\"},\r\n    {0x1.fffffffffffffp-924, chars_format::fixed, 976,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000014103081061443979497284578752159912024727\"\r\n        \"4032905167604279432705319099034972718214031568222226981630489269415322192427510632340907321608138947616476\"\r\n        \"1180613233391991094495082140373540358766146972040164264422809982271459787525923873180467846561793110402688\"\r\n        \"9998495623705730170294145098582080987329045486772937550521665024778300166258845257307737572963178567204375\"\r\n        \"3552339520587861062468947146328864916327056458337074841843347913623659137347308543170395189891407632986933\"\r\n        \"9132884354239457405815415676700616178229519185750097950780309378765430795873954511604446232320595872378507\"\r\n        \"7539275852497728690409577929732982819114017718371437352504097545806559781947674168196740079883610974320617\"\r\n        \"9700791835784912109375\"},\r\n    {0x1.fffffffffffffp-923, chars_format::fixed, 975,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000028206162122887958994569157504319824049454\"\r\n        \"8065810335208558865410638198069945436428063136444453963260978538830644384855021264681814643216277895232952\"\r\n        \"2361226466783982188990164280747080717532293944080328528845619964542919575051847746360935693123586220805377\"\r\n        \"9996991247411460340588290197164161974658090973545875101043330049556600332517690514615475145926357134408750\"\r\n        \"7104679041175722124937894292657729832654112916674149683686695827247318274694617086340790379782815265973867\"\r\n        \"8265768708478914811630831353401232356459038371500195901560618757530861591747909023208892464641191744757015\"\r\n        \"5078551704995457380819155859465965638228035436742874705008195091613119563895348336393480159767221948641235\"\r\n        \"940158367156982421875\"},\r\n    {0x1.fffffffffffffp-922, chars_format::fixed, 974,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000056412324245775917989138315008639648098909\"\r\n        \"6131620670417117730821276396139890872856126272888907926521957077661288769710042529363629286432555790465904\"\r\n        \"4722452933567964377980328561494161435064587888160657057691239929085839150103695492721871386247172441610755\"\r\n        \"9993982494822920681176580394328323949316181947091750202086660099113200665035381029230950291852714268817501\"\r\n        \"4209358082351444249875788585315459665308225833348299367373391654494636549389234172681580759565630531947735\"\r\n        \"6531537416957829623261662706802464712918076743000391803121237515061723183495818046417784929282383489514031\"\r\n        \"0157103409990914761638311718931931276456070873485749410016390183226239127790696672786960319534443897282471\"\r\n        \"88031673431396484375\"},\r\n    {0x1.fffffffffffffp-921, chars_format::fixed, 973,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000112824648491551835978276630017279296197819\"\r\n        \"2263241340834235461642552792279781745712252545777815853043914155322577539420085058727258572865111580931808\"\r\n        \"9444905867135928755960657122988322870129175776321314115382479858171678300207390985443742772494344883221511\"\r\n        \"9987964989645841362353160788656647898632363894183500404173320198226401330070762058461900583705428537635002\"\r\n        \"8418716164702888499751577170630919330616451666696598734746783308989273098778468345363161519131261063895471\"\r\n        \"3063074833915659246523325413604929425836153486000783606242475030123446366991636092835569858564766979028062\"\r\n        \"0314206819981829523276623437863862552912141746971498820032780366452478255581393345573920639068887794564943\"\r\n        \"7606334686279296875\"},\r\n    {0x1.fffffffffffffp-920, chars_format::fixed, 972,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000225649296983103671956553260034558592395638\"\r\n        \"4526482681668470923285105584559563491424505091555631706087828310645155078840170117454517145730223161863617\"\r\n        \"8889811734271857511921314245976645740258351552642628230764959716343356600414781970887485544988689766443023\"\r\n        \"9975929979291682724706321577313295797264727788367000808346640396452802660141524116923801167410857075270005\"\r\n        \"6837432329405776999503154341261838661232903333393197469493566617978546197556936690726323038262522127790942\"\r\n        \"6126149667831318493046650827209858851672306972001567212484950060246892733983272185671139717129533958056124\"\r\n        \"0628413639963659046553246875727725105824283493942997640065560732904956511162786691147841278137775589129887\"\r\n        \"521266937255859375\"},\r\n    {0x1.fffffffffffffp-919, chars_format::fixed, 971,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000451298593966207343913106520069117184791276\"\r\n        \"9052965363336941846570211169119126982849010183111263412175656621290310157680340234909034291460446323727235\"\r\n        \"7779623468543715023842628491953291480516703105285256461529919432686713200829563941774971089977379532886047\"\r\n        \"9951859958583365449412643154626591594529455576734001616693280792905605320283048233847602334821714150540011\"\r\n        \"3674864658811553999006308682523677322465806666786394938987133235957092395113873381452646076525044255581885\"\r\n        \"2252299335662636986093301654419717703344613944003134424969900120493785467966544371342279434259067916112248\"\r\n        \"1256827279927318093106493751455450211648566987885995280131121465809913022325573382295682556275551178259775\"\r\n        \"04253387451171875\"},\r\n    {0x1.fffffffffffffp-918, chars_format::fixed, 970,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000902597187932414687826213040138234369582553\"\r\n        \"8105930726673883693140422338238253965698020366222526824351313242580620315360680469818068582920892647454471\"\r\n        \"5559246937087430047685256983906582961033406210570512923059838865373426401659127883549942179954759065772095\"\r\n        \"9903719917166730898825286309253183189058911153468003233386561585811210640566096467695204669643428301080022\"\r\n        \"7349729317623107998012617365047354644931613333572789877974266471914184790227746762905292153050088511163770\"\r\n        \"4504598671325273972186603308839435406689227888006268849939800240987570935933088742684558868518135832224496\"\r\n        \"2513654559854636186212987502910900423297133975771990560262242931619826044651146764591365112551102356519550\"\r\n        \"0850677490234375\"},\r\n    {0x1.fffffffffffffp-917, chars_format::fixed, 969,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000001805194375864829375652426080276468739165107\"\r\n        \"6211861453347767386280844676476507931396040732445053648702626485161240630721360939636137165841785294908943\"\r\n        \"1118493874174860095370513967813165922066812421141025846119677730746852803318255767099884359909518131544191\"\r\n        \"9807439834333461797650572618506366378117822306936006466773123171622421281132192935390409339286856602160045\"\r\n        \"4699458635246215996025234730094709289863226667145579755948532943828369580455493525810584306100177022327540\"\r\n        \"9009197342650547944373206617678870813378455776012537699879600481975141871866177485369117737036271664448992\"\r\n        \"5027309119709272372425975005821800846594267951543981120524485863239652089302293529182730225102204713039100\"\r\n        \"170135498046875\"},\r\n    {0x1.fffffffffffffp-916, chars_format::fixed, 968,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000003610388751729658751304852160552937478330215\"\r\n        \"2423722906695534772561689352953015862792081464890107297405252970322481261442721879272274331683570589817886\"\r\n        \"2236987748349720190741027935626331844133624842282051692239355461493705606636511534199768719819036263088383\"\r\n        \"9614879668666923595301145237012732756235644613872012933546246343244842562264385870780818678573713204320090\"\r\n        \"9398917270492431992050469460189418579726453334291159511897065887656739160910987051621168612200354044655081\"\r\n        \"8018394685301095888746413235357741626756911552025075399759200963950283743732354970738235474072543328897985\"\r\n        \"0054618239418544744851950011643601693188535903087962241048971726479304178604587058365460450204409426078200\"\r\n        \"34027099609375\"},\r\n    {0x1.fffffffffffffp-915, chars_format::fixed, 967,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000007220777503459317502609704321105874956660430\"\r\n        \"4847445813391069545123378705906031725584162929780214594810505940644962522885443758544548663367141179635772\"\r\n        \"4473975496699440381482055871252663688267249684564103384478710922987411213273023068399537439638072526176767\"\r\n        \"9229759337333847190602290474025465512471289227744025867092492686489685124528771741561637357147426408640181\"\r\n        \"8797834540984863984100938920378837159452906668582319023794131775313478321821974103242337224400708089310163\"\r\n        \"6036789370602191777492826470715483253513823104050150799518401927900567487464709941476470948145086657795970\"\r\n        \"0109236478837089489703900023287203386377071806175924482097943452958608357209174116730920900408818852156400\"\r\n        \"6805419921875\"},\r\n    {0x1.fffffffffffffp-914, chars_format::fixed, 966,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000014441555006918635005219408642211749913320860\"\r\n        \"9694891626782139090246757411812063451168325859560429189621011881289925045770887517089097326734282359271544\"\r\n        \"8947950993398880762964111742505327376534499369128206768957421845974822426546046136799074879276145052353535\"\r\n        \"8459518674667694381204580948050931024942578455488051734184985372979370249057543483123274714294852817280363\"\r\n        \"7595669081969727968201877840757674318905813337164638047588263550626956643643948206484674448801416178620327\"\r\n        \"2073578741204383554985652941430966507027646208100301599036803855801134974929419882952941896290173315591940\"\r\n        \"0218472957674178979407800046574406772754143612351848964195886905917216714418348233461841800817637704312801\"\r\n        \"361083984375\"},\r\n    {0x1.fffffffffffffp-913, chars_format::fixed, 965,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000028883110013837270010438817284423499826641721\"\r\n        \"9389783253564278180493514823624126902336651719120858379242023762579850091541775034178194653468564718543089\"\r\n        \"7895901986797761525928223485010654753068998738256413537914843691949644853092092273598149758552290104707071\"\r\n        \"6919037349335388762409161896101862049885156910976103468369970745958740498115086966246549428589705634560727\"\r\n        \"5191338163939455936403755681515348637811626674329276095176527101253913287287896412969348897602832357240654\"\r\n        \"4147157482408767109971305882861933014055292416200603198073607711602269949858839765905883792580346631183880\"\r\n        \"0436945915348357958815600093148813545508287224703697928391773811834433428836696466923683601635275408625602\"\r\n        \"72216796875\"},\r\n    {0x1.fffffffffffffp-912, chars_format::fixed, 964,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000057766220027674540020877634568846999653283443\"\r\n        \"8779566507128556360987029647248253804673303438241716758484047525159700183083550068356389306937129437086179\"\r\n        \"5791803973595523051856446970021309506137997476512827075829687383899289706184184547196299517104580209414143\"\r\n        \"3838074698670777524818323792203724099770313821952206936739941491917480996230173932493098857179411269121455\"\r\n        \"0382676327878911872807511363030697275623253348658552190353054202507826574575792825938697795205664714481308\"\r\n        \"8294314964817534219942611765723866028110584832401206396147215423204539899717679531811767585160693262367760\"\r\n        \"0873891830696715917631200186297627091016574449407395856783547623668866857673392933847367203270550817251205\"\r\n        \"4443359375\"},\r\n    {0x1.fffffffffffffp-911, chars_format::fixed, 963,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000115532440055349080041755269137693999306566887\"\r\n        \"7559133014257112721974059294496507609346606876483433516968095050319400366167100136712778613874258874172359\"\r\n        \"1583607947191046103712893940042619012275994953025654151659374767798579412368369094392599034209160418828286\"\r\n        \"7676149397341555049636647584407448199540627643904413873479882983834961992460347864986197714358822538242910\"\r\n        \"0765352655757823745615022726061394551246506697317104380706108405015653149151585651877395590411329428962617\"\r\n        \"6588629929635068439885223531447732056221169664802412792294430846409079799435359063623535170321386524735520\"\r\n        \"1747783661393431835262400372595254182033148898814791713567095247337733715346785867694734406541101634502410\"\r\n        \"888671875\"},\r\n    {0x1.fffffffffffffp-910, chars_format::fixed, 962,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000231064880110698160083510538275387998613133775\"\r\n        \"5118266028514225443948118588993015218693213752966867033936190100638800732334200273425557227748517748344718\"\r\n        \"3167215894382092207425787880085238024551989906051308303318749535597158824736738188785198068418320837656573\"\r\n        \"5352298794683110099273295168814896399081255287808827746959765967669923984920695729972395428717645076485820\"\r\n        \"1530705311515647491230045452122789102493013394634208761412216810031306298303171303754791180822658857925235\"\r\n        \"3177259859270136879770447062895464112442339329604825584588861692818159598870718127247070340642773049471040\"\r\n        \"3495567322786863670524800745190508364066297797629583427134190494675467430693571735389468813082203269004821\"\r\n        \"77734375\"},\r\n    {0x1.fffffffffffffp-909, chars_format::fixed, 961,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000462129760221396320167021076550775997226267551\"\r\n        \"0236532057028450887896237177986030437386427505933734067872380201277601464668400546851114455497035496689436\"\r\n        \"6334431788764184414851575760170476049103979812102616606637499071194317649473476377570396136836641675313147\"\r\n        \"0704597589366220198546590337629792798162510575617655493919531935339847969841391459944790857435290152971640\"\r\n        \"3061410623031294982460090904245578204986026789268417522824433620062612596606342607509582361645317715850470\"\r\n        \"6354519718540273759540894125790928224884678659209651169177723385636319197741436254494140681285546098942080\"\r\n        \"6991134645573727341049601490381016728132595595259166854268380989350934861387143470778937626164406538009643\"\r\n        \"5546875\"},\r\n    {0x1.fffffffffffffp-908, chars_format::fixed, 960,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000924259520442792640334042153101551994452535102\"\r\n        \"0473064114056901775792474355972060874772855011867468135744760402555202929336801093702228910994070993378873\"\r\n        \"2668863577528368829703151520340952098207959624205233213274998142388635298946952755140792273673283350626294\"\r\n        \"1409195178732440397093180675259585596325021151235310987839063870679695939682782919889581714870580305943280\"\r\n        \"6122821246062589964920181808491156409972053578536835045648867240125225193212685215019164723290635431700941\"\r\n        \"2709039437080547519081788251581856449769357318419302338355446771272638395482872508988281362571092197884161\"\r\n        \"3982269291147454682099202980762033456265191190518333708536761978701869722774286941557875252328813076019287\"\r\n        \"109375\"},\r\n    {0x1.fffffffffffffp-907, chars_format::fixed, 959,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000001848519040885585280668084306203103988905070204\"\r\n        \"0946128228113803551584948711944121749545710023734936271489520805110405858673602187404457821988141986757746\"\r\n        \"5337727155056737659406303040681904196415919248410466426549996284777270597893905510281584547346566701252588\"\r\n        \"2818390357464880794186361350519171192650042302470621975678127741359391879365565839779163429741160611886561\"\r\n        \"2245642492125179929840363616982312819944107157073670091297734480250450386425370430038329446581270863401882\"\r\n        \"5418078874161095038163576503163712899538714636838604676710893542545276790965745017976562725142184395768322\"\r\n        \"7964538582294909364198405961524066912530382381036667417073523957403739445548573883115750504657626152038574\"\r\n        \"21875\"},\r\n    {0x1.fffffffffffffp-906, chars_format::fixed, 958,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000003697038081771170561336168612406207977810140408\"\r\n        \"1892256456227607103169897423888243499091420047469872542979041610220811717347204374808915643976283973515493\"\r\n        \"0675454310113475318812606081363808392831838496820932853099992569554541195787811020563169094693133402505176\"\r\n        \"5636780714929761588372722701038342385300084604941243951356255482718783758731131679558326859482321223773122\"\r\n        \"4491284984250359859680727233964625639888214314147340182595468960500900772850740860076658893162541726803765\"\r\n        \"0836157748322190076327153006327425799077429273677209353421787085090553581931490035953125450284368791536645\"\r\n        \"5929077164589818728396811923048133825060764762073334834147047914807478891097147766231501009315252304077148\"\r\n        \"4375\"},\r\n    {0x1.fffffffffffffp-905, chars_format::fixed, 957,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000007394076163542341122672337224812415955620280816\"\r\n        \"3784512912455214206339794847776486998182840094939745085958083220441623434694408749617831287952567947030986\"\r\n        \"1350908620226950637625212162727616785663676993641865706199985139109082391575622041126338189386266805010353\"\r\n        \"1273561429859523176745445402076684770600169209882487902712510965437567517462263359116653718964642447546244\"\r\n        \"8982569968500719719361454467929251279776428628294680365190937921001801545701481720153317786325083453607530\"\r\n        \"1672315496644380152654306012654851598154858547354418706843574170181107163862980071906250900568737583073291\"\r\n        \"1858154329179637456793623846096267650121529524146669668294095829614957782194295532463002018630504608154296\"\r\n        \"875\"},\r\n    {0x1.fffffffffffffp-904, chars_format::fixed, 956,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000014788152327084682245344674449624831911240561632\"\r\n        \"7569025824910428412679589695552973996365680189879490171916166440883246869388817499235662575905135894061972\"\r\n        \"2701817240453901275250424325455233571327353987283731412399970278218164783151244082252676378772533610020706\"\r\n        \"2547122859719046353490890804153369541200338419764975805425021930875135034924526718233307437929284895092489\"\r\n        \"7965139937001439438722908935858502559552857256589360730381875842003603091402963440306635572650166907215060\"\r\n        \"3344630993288760305308612025309703196309717094708837413687148340362214327725960143812501801137475166146582\"\r\n        \"3716308658359274913587247692192535300243059048293339336588191659229915564388591064926004037261009216308593\"\r\n        \"75\"},\r\n    {0x1.fffffffffffffp-903, chars_format::fixed, 955,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000029576304654169364490689348899249663822481123265\"\r\n        \"5138051649820856825359179391105947992731360379758980343832332881766493738777634998471325151810271788123944\"\r\n        \"5403634480907802550500848650910467142654707974567462824799940556436329566302488164505352757545067220041412\"\r\n        \"5094245719438092706981781608306739082400676839529951610850043861750270069849053436466614875858569790184979\"\r\n        \"5930279874002878877445817871717005119105714513178721460763751684007206182805926880613271145300333814430120\"\r\n        \"6689261986577520610617224050619406392619434189417674827374296680724428655451920287625003602274950332293164\"\r\n        \"7432617316718549827174495384385070600486118096586678673176383318459831128777182129852008074522018432617187\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-902, chars_format::fixed, 954,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000059152609308338728981378697798499327644962246531\"\r\n        \"0276103299641713650718358782211895985462720759517960687664665763532987477555269996942650303620543576247889\"\r\n        \"0807268961815605101001697301820934285309415949134925649599881112872659132604976329010705515090134440082825\"\r\n        \"0188491438876185413963563216613478164801353679059903221700087723500540139698106872933229751717139580369959\"\r\n        \"1860559748005757754891635743434010238211429026357442921527503368014412365611853761226542290600667628860241\"\r\n        \"3378523973155041221234448101238812785238868378835349654748593361448857310903840575250007204549900664586329\"\r\n        \"486523463343709965434899076877014120097223619317335734635276663691966225755436425970401614904403686523437\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-901, chars_format::fixed, 953,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000118305218616677457962757395596998655289924493062\"\r\n        \"0552206599283427301436717564423791970925441519035921375329331527065974955110539993885300607241087152495778\"\r\n        \"1614537923631210202003394603641868570618831898269851299199762225745318265209952658021411030180268880165650\"\r\n        \"0376982877752370827927126433226956329602707358119806443400175447001080279396213745866459503434279160739918\"\r\n        \"3721119496011515509783271486868020476422858052714885843055006736028824731223707522453084581201335257720482\"\r\n        \"6757047946310082442468896202477625570477736757670699309497186722897714621807681150500014409099801329172658\"\r\n        \"97304692668741993086979815375402824019444723863467146927055332738393245151087285194080322980880737304687\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-900, chars_format::fixed, 952,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000236610437233354915925514791193997310579848986124\"\r\n        \"1104413198566854602873435128847583941850883038071842750658663054131949910221079987770601214482174304991556\"\r\n        \"3229075847262420404006789207283737141237663796539702598399524451490636530419905316042822060360537760331300\"\r\n        \"0753965755504741655854252866453912659205414716239612886800350894002160558792427491732919006868558321479836\"\r\n        \"7442238992023031019566542973736040952845716105429771686110013472057649462447415044906169162402670515440965\"\r\n        \"3514095892620164884937792404955251140955473515341398618994373445795429243615362301000028818199602658345317\"\r\n        \"94609385337483986173959630750805648038889447726934293854110665476786490302174570388160645961761474609375\"},\r\n    {0x1.fffffffffffffp-899, chars_format::fixed, 951,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000473220874466709831851029582387994621159697972248\"\r\n        \"2208826397133709205746870257695167883701766076143685501317326108263899820442159975541202428964348609983112\"\r\n        \"6458151694524840808013578414567474282475327593079405196799048902981273060839810632085644120721075520662600\"\r\n        \"1507931511009483311708505732907825318410829432479225773600701788004321117584854983465838013737116642959673\"\r\n        \"4884477984046062039133085947472081905691432210859543372220026944115298924894830089812338324805341030881930\"\r\n        \"7028191785240329769875584809910502281910947030682797237988746891590858487230724602000057636399205316690635\"\r\n        \"8921877067496797234791926150161129607777889545386858770822133095357298060434914077632129192352294921875\"},\r\n    {0x1.fffffffffffffp-898, chars_format::fixed, 950,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000946441748933419663702059164775989242319395944496\"\r\n        \"4417652794267418411493740515390335767403532152287371002634652216527799640884319951082404857928697219966225\"\r\n        \"2916303389049681616027156829134948564950655186158810393598097805962546121679621264171288241442151041325200\"\r\n        \"3015863022018966623417011465815650636821658864958451547201403576008642235169709966931676027474233285919346\"\r\n        \"9768955968092124078266171894944163811382864421719086744440053888230597849789660179624676649610682061763861\"\r\n        \"4056383570480659539751169619821004563821894061365594475977493783181716974461449204000115272798410633381271\"\r\n        \"784375413499359446958385230032225921555577909077371754164426619071459612086982815526425838470458984375\"},\r\n    {0x1.fffffffffffffp-897, chars_format::fixed, 949,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000001892883497866839327404118329551978484638791888992\"\r\n        \"8835305588534836822987481030780671534807064304574742005269304433055599281768639902164809715857394439932450\"\r\n        \"5832606778099363232054313658269897129901310372317620787196195611925092243359242528342576482884302082650400\"\r\n        \"6031726044037933246834022931631301273643317729916903094402807152017284470339419933863352054948466571838693\"\r\n        \"9537911936184248156532343789888327622765728843438173488880107776461195699579320359249353299221364123527722\"\r\n        \"8112767140961319079502339239642009127643788122731188951954987566363433948922898408000230545596821266762543\"\r\n        \"56875082699871889391677046006445184311115581815474350832885323814291922417396563105285167694091796875\"},\r\n    {0x1.fffffffffffffp-896, chars_format::fixed, 948,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000003785766995733678654808236659103956969277583777985\"\r\n        \"7670611177069673645974962061561343069614128609149484010538608866111198563537279804329619431714788879864901\"\r\n        \"1665213556198726464108627316539794259802620744635241574392391223850184486718485056685152965768604165300801\"\r\n        \"2063452088075866493668045863262602547286635459833806188805614304034568940678839867726704109896933143677387\"\r\n        \"9075823872368496313064687579776655245531457686876346977760215552922391399158640718498706598442728247055445\"\r\n        \"6225534281922638159004678479284018255287576245462377903909975132726867897845796816000461091193642533525087\"\r\n        \"1375016539974377878335409201289036862223116363094870166577064762858384483479312621057033538818359375\"},\r\n    {0x1.fffffffffffffp-895, chars_format::fixed, 947,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000007571533991467357309616473318207913938555167555971\"\r\n        \"5341222354139347291949924123122686139228257218298968021077217732222397127074559608659238863429577759729802\"\r\n        \"3330427112397452928217254633079588519605241489270483148784782447700368973436970113370305931537208330601602\"\r\n        \"4126904176151732987336091726525205094573270919667612377611228608069137881357679735453408219793866287354775\"\r\n        \"8151647744736992626129375159553310491062915373752693955520431105844782798317281436997413196885456494110891\"\r\n        \"2451068563845276318009356958568036510575152490924755807819950265453735795691593632000922182387285067050174\"\r\n        \"275003307994875575667081840257807372444623272618974033315412952571676896695862524211406707763671875\"},\r\n    {0x1.fffffffffffffp-894, chars_format::fixed, 946,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000015143067982934714619232946636415827877110335111943\"\r\n        \"0682444708278694583899848246245372278456514436597936042154435464444794254149119217318477726859155519459604\"\r\n        \"6660854224794905856434509266159177039210482978540966297569564895400737946873940226740611863074416661203204\"\r\n        \"8253808352303465974672183453050410189146541839335224755222457216138275762715359470906816439587732574709551\"\r\n        \"6303295489473985252258750319106620982125830747505387911040862211689565596634562873994826393770912988221782\"\r\n        \"4902137127690552636018713917136073021150304981849511615639900530907471591383187264001844364774570134100348\"\r\n        \"55000661598975115133416368051561474488924654523794806663082590514335379339172504842281341552734375\"},\r\n    {0x1.fffffffffffffp-893, chars_format::fixed, 945,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000030286135965869429238465893272831655754220670223886\"\r\n        \"1364889416557389167799696492490744556913028873195872084308870928889588508298238434636955453718311038919209\"\r\n        \"3321708449589811712869018532318354078420965957081932595139129790801475893747880453481223726148833322406409\"\r\n        \"6507616704606931949344366906100820378293083678670449510444914432276551525430718941813632879175465149419103\"\r\n        \"2606590978947970504517500638213241964251661495010775822081724423379131193269125747989652787541825976443564\"\r\n        \"9804274255381105272037427834272146042300609963699023231279801061814943182766374528003688729549140268200697\"\r\n        \"1000132319795023026683273610312294897784930904758961332616518102867075867834500968456268310546875\"},\r\n    {0x1.fffffffffffffp-892, chars_format::fixed, 944,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000060572271931738858476931786545663311508441340447772\"\r\n        \"2729778833114778335599392984981489113826057746391744168617741857779177016596476869273910907436622077838418\"\r\n        \"6643416899179623425738037064636708156841931914163865190278259581602951787495760906962447452297666644812819\"\r\n        \"3015233409213863898688733812201640756586167357340899020889828864553103050861437883627265758350930298838206\"\r\n        \"5213181957895941009035001276426483928503322990021551644163448846758262386538251495979305575083651952887129\"\r\n        \"9608548510762210544074855668544292084601219927398046462559602123629886365532749056007377459098280536401394\"\r\n        \"200026463959004605336654722062458979556986180951792266523303620573415173566900193691253662109375\"},\r\n    {0x1.fffffffffffffp-891, chars_format::fixed, 943,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000121144543863477716953863573091326623016882680895544\"\r\n        \"5459557666229556671198785969962978227652115492783488337235483715558354033192953738547821814873244155676837\"\r\n        \"3286833798359246851476074129273416313683863828327730380556519163205903574991521813924894904595333289625638\"\r\n        \"6030466818427727797377467624403281513172334714681798041779657729106206101722875767254531516701860597676413\"\r\n        \"0426363915791882018070002552852967857006645980043103288326897693516524773076502991958611150167303905774259\"\r\n        \"9217097021524421088149711337088584169202439854796092925119204247259772731065498112014754918196561072802788\"\r\n        \"40005292791800921067330944412491795911397236190358453304660724114683034713380038738250732421875\"},\r\n    {0x1.fffffffffffffp-890, chars_format::fixed, 942,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000242289087726955433907727146182653246033765361791089\"\r\n        \"0919115332459113342397571939925956455304230985566976674470967431116708066385907477095643629746488311353674\"\r\n        \"6573667596718493702952148258546832627367727656655460761113038326411807149983043627849789809190666579251277\"\r\n        \"2060933636855455594754935248806563026344669429363596083559315458212412203445751534509063033403721195352826\"\r\n        \"0852727831583764036140005105705935714013291960086206576653795387033049546153005983917222300334607811548519\"\r\n        \"8434194043048842176299422674177168338404879709592185850238408494519545462130996224029509836393122145605576\"\r\n        \"8001058558360184213466188882498359182279447238071690660932144822936606942676007747650146484375\"},\r\n    {0x1.fffffffffffffp-889, chars_format::fixed, 941,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000484578175453910867815454292365306492067530723582178\"\r\n        \"1838230664918226684795143879851912910608461971133953348941934862233416132771814954191287259492976622707349\"\r\n        \"3147335193436987405904296517093665254735455313310921522226076652823614299966087255699579618381333158502554\"\r\n        \"4121867273710911189509870497613126052689338858727192167118630916424824406891503069018126066807442390705652\"\r\n        \"1705455663167528072280010211411871428026583920172413153307590774066099092306011967834444600669215623097039\"\r\n        \"6868388086097684352598845348354336676809759419184371700476816989039090924261992448059019672786244291211153\"\r\n        \"600211711672036842693237776499671836455889447614338132186428964587321388535201549530029296875\"},\r\n    {0x1.fffffffffffffp-888, chars_format::fixed, 940,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000969156350907821735630908584730612984135061447164356\"\r\n        \"3676461329836453369590287759703825821216923942267906697883869724466832265543629908382574518985953245414698\"\r\n        \"6294670386873974811808593034187330509470910626621843044452153305647228599932174511399159236762666317005108\"\r\n        \"8243734547421822379019740995226252105378677717454384334237261832849648813783006138036252133614884781411304\"\r\n        \"3410911326335056144560020422823742856053167840344826306615181548132198184612023935668889201338431246194079\"\r\n        \"3736776172195368705197690696708673353619518838368743400953633978078181848523984896118039345572488582422307\"\r\n        \"20042342334407368538647555299934367291177889522867626437285792917464277707040309906005859375\"},\r\n    {0x1.fffffffffffffp-887, chars_format::fixed, 939,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000001938312701815643471261817169461225968270122894328712\"\r\n        \"7352922659672906739180575519407651642433847884535813395767739448933664531087259816765149037971906490829397\"\r\n        \"2589340773747949623617186068374661018941821253243686088904306611294457199864349022798318473525332634010217\"\r\n        \"6487469094843644758039481990452504210757355434908768668474523665699297627566012276072504267229769562822608\"\r\n        \"6821822652670112289120040845647485712106335680689652613230363096264396369224047871337778402676862492388158\"\r\n        \"7473552344390737410395381393417346707239037676737486801907267956156363697047969792236078691144977164844614\"\r\n        \"4008468466881473707729511059986873458235577904573525287457158583492855541408061981201171875\"},\r\n    {0x1.fffffffffffffp-886, chars_format::fixed, 938,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000003876625403631286942523634338922451936540245788657425\"\r\n        \"4705845319345813478361151038815303284867695769071626791535478897867329062174519633530298075943812981658794\"\r\n        \"5178681547495899247234372136749322037883642506487372177808613222588914399728698045596636947050665268020435\"\r\n        \"2974938189687289516078963980905008421514710869817537336949047331398595255132024552145008534459539125645217\"\r\n        \"3643645305340224578240081691294971424212671361379305226460726192528792738448095742675556805353724984776317\"\r\n        \"4947104688781474820790762786834693414478075353474973603814535912312727394095939584472157382289954329689228\"\r\n        \"801693693376294741545902211997374691647115580914705057491431716698571108281612396240234375\"},\r\n    {0x1.fffffffffffffp-885, chars_format::fixed, 937,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000007753250807262573885047268677844903873080491577314850\"\r\n        \"9411690638691626956722302077630606569735391538143253583070957795734658124349039267060596151887625963317589\"\r\n        \"0357363094991798494468744273498644075767285012974744355617226445177828799457396091193273894101330536040870\"\r\n        \"5949876379374579032157927961810016843029421739635074673898094662797190510264049104290017068919078251290434\"\r\n        \"7287290610680449156480163382589942848425342722758610452921452385057585476896191485351113610707449969552634\"\r\n        \"9894209377562949641581525573669386828956150706949947207629071824625454788191879168944314764579908659378457\"\r\n        \"60338738675258948309180442399474938329423116182941011498286343339714221656322479248046875\"},\r\n    {0x1.fffffffffffffp-884, chars_format::fixed, 936,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000015506501614525147770094537355689807746160983154629701\"\r\n        \"8823381277383253913444604155261213139470783076286507166141915591469316248698078534121192303775251926635178\"\r\n        \"0714726189983596988937488546997288151534570025949488711234452890355657598914792182386547788202661072081741\"\r\n        \"1899752758749158064315855923620033686058843479270149347796189325594381020528098208580034137838156502580869\"\r\n        \"4574581221360898312960326765179885696850685445517220905842904770115170953792382970702227221414899939105269\"\r\n        \"9788418755125899283163051147338773657912301413899894415258143649250909576383758337888629529159817318756915\"\r\n        \"2067747735051789661836088479894987665884623236588202299657268667942844331264495849609375\"},\r\n    {0x1.fffffffffffffp-883, chars_format::fixed, 935,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000031013003229050295540189074711379615492321966309259403\"\r\n        \"7646762554766507826889208310522426278941566152573014332283831182938632497396157068242384607550503853270356\"\r\n        \"1429452379967193977874977093994576303069140051898977422468905780711315197829584364773095576405322144163482\"\r\n        \"3799505517498316128631711847240067372117686958540298695592378651188762041056196417160068275676313005161738\"\r\n        \"9149162442721796625920653530359771393701370891034441811685809540230341907584765941404454442829799878210539\"\r\n        \"9576837510251798566326102294677547315824602827799788830516287298501819152767516675777259058319634637513830\"\r\n        \"413549547010357932367217695978997533176924647317640459931453733588568866252899169921875\"},\r\n    {0x1.fffffffffffffp-882, chars_format::fixed, 934,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000062026006458100591080378149422759230984643932618518807\"\r\n        \"5293525109533015653778416621044852557883132305146028664567662365877264994792314136484769215101007706540712\"\r\n        \"2858904759934387955749954187989152606138280103797954844937811561422630395659168729546191152810644288326964\"\r\n        \"7599011034996632257263423694480134744235373917080597391184757302377524082112392834320136551352626010323477\"\r\n        \"8298324885443593251841307060719542787402741782068883623371619080460683815169531882808908885659599756421079\"\r\n        \"9153675020503597132652204589355094631649205655599577661032574597003638305535033351554518116639269275027660\"\r\n        \"82709909402071586473443539195799506635384929463528091986290746717713773250579833984375\"},\r\n    {0x1.fffffffffffffp-881, chars_format::fixed, 933,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000124052012916201182160756298845518461969287865237037615\"\r\n        \"0587050219066031307556833242089705115766264610292057329135324731754529989584628272969538430202015413081424\"\r\n        \"5717809519868775911499908375978305212276560207595909689875623122845260791318337459092382305621288576653929\"\r\n        \"5198022069993264514526847388960269488470747834161194782369514604755048164224785668640273102705252020646955\"\r\n        \"6596649770887186503682614121439085574805483564137767246743238160921367630339063765617817771319199512842159\"\r\n        \"8307350041007194265304409178710189263298411311199155322065149194007276611070066703109036233278538550055321\"\r\n        \"6541981880414317294688707839159901327076985892705618397258149343542754650115966796875\"},\r\n    {0x1.fffffffffffffp-880, chars_format::fixed, 932,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000248104025832402364321512597691036923938575730474075230\"\r\n        \"1174100438132062615113666484179410231532529220584114658270649463509059979169256545939076860404030826162849\"\r\n        \"1435619039737551822999816751956610424553120415191819379751246245690521582636674918184764611242577153307859\"\r\n        \"0396044139986529029053694777920538976941495668322389564739029209510096328449571337280546205410504041293911\"\r\n        \"3193299541774373007365228242878171149610967128275534493486476321842735260678127531235635542638399025684319\"\r\n        \"6614700082014388530608818357420378526596822622398310644130298388014553222140133406218072466557077100110643\"\r\n        \"308396376082863458937741567831980265415397178541123679451629868708550930023193359375\"},\r\n    {0x1.fffffffffffffp-879, chars_format::fixed, 931,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000496208051664804728643025195382073847877151460948150460\"\r\n        \"2348200876264125230227332968358820463065058441168229316541298927018119958338513091878153720808061652325698\"\r\n        \"2871238079475103645999633503913220849106240830383638759502492491381043165273349836369529222485154306615718\"\r\n        \"0792088279973058058107389555841077953882991336644779129478058419020192656899142674561092410821008082587822\"\r\n        \"6386599083548746014730456485756342299221934256551068986972952643685470521356255062471271085276798051368639\"\r\n        \"3229400164028777061217636714840757053193645244796621288260596776029106444280266812436144933114154200221286\"\r\n        \"61679275216572691787548313566396053083079435708224735890325973741710186004638671875\"},\r\n    {0x1.fffffffffffffp-878, chars_format::fixed, 930,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000992416103329609457286050390764147695754302921896300920\"\r\n        \"4696401752528250460454665936717640926130116882336458633082597854036239916677026183756307441616123304651396\"\r\n        \"5742476158950207291999267007826441698212481660767277519004984982762086330546699672739058444970308613231436\"\r\n        \"1584176559946116116214779111682155907765982673289558258956116838040385313798285349122184821642016165175645\"\r\n        \"2773198167097492029460912971512684598443868513102137973945905287370941042712510124942542170553596102737278\"\r\n        \"6458800328057554122435273429681514106387290489593242576521193552058212888560533624872289866228308400442573\"\r\n        \"2335855043314538357509662713279210616615887141644947178065194748342037200927734375\"},\r\n    {0x1.fffffffffffffp-877, chars_format::fixed, 929,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000001984832206659218914572100781528295391508605843792601840\"\r\n        \"9392803505056500920909331873435281852260233764672917266165195708072479833354052367512614883232246609302793\"\r\n        \"1484952317900414583998534015652883396424963321534555038009969965524172661093399345478116889940617226462872\"\r\n        \"3168353119892232232429558223364311815531965346579116517912233676080770627596570698244369643284032330351290\"\r\n        \"5546396334194984058921825943025369196887737026204275947891810574741882085425020249885084341107192205474557\"\r\n        \"2917600656115108244870546859363028212774580979186485153042387104116425777121067249744579732456616800885146\"\r\n        \"467171008662907671501932542655842123323177428328989435613038949668407440185546875\"},\r\n    {0x1.fffffffffffffp-876, chars_format::fixed, 928,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000003969664413318437829144201563056590783017211687585203681\"\r\n        \"8785607010113001841818663746870563704520467529345834532330391416144959666708104735025229766464493218605586\"\r\n        \"2969904635800829167997068031305766792849926643069110076019939931048345322186798690956233779881234452925744\"\r\n        \"6336706239784464464859116446728623631063930693158233035824467352161541255193141396488739286568064660702581\"\r\n        \"1092792668389968117843651886050738393775474052408551895783621149483764170850040499770168682214384410949114\"\r\n        \"5835201312230216489741093718726056425549161958372970306084774208232851554242134499489159464913233601770292\"\r\n        \"93434201732581534300386508531168424664635485665797887122607789933681488037109375\"},\r\n    {0x1.fffffffffffffp-875, chars_format::fixed, 927,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000007939328826636875658288403126113181566034423375170407363\"\r\n        \"7571214020226003683637327493741127409040935058691669064660782832289919333416209470050459532928986437211172\"\r\n        \"5939809271601658335994136062611533585699853286138220152039879862096690644373597381912467559762468905851489\"\r\n        \"2673412479568928929718232893457247262127861386316466071648934704323082510386282792977478573136129321405162\"\r\n        \"2185585336779936235687303772101476787550948104817103791567242298967528341700080999540337364428768821898229\"\r\n        \"1670402624460432979482187437452112851098323916745940612169548416465703108484268998978318929826467203540585\"\r\n        \"8686840346516306860077301706233684932927097133159577424521557986736297607421875\"},\r\n    {0x1.fffffffffffffp-874, chars_format::fixed, 926,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000015878657653273751316576806252226363132068846750340814727\"\r\n        \"5142428040452007367274654987482254818081870117383338129321565664579838666832418940100919065857972874422345\"\r\n        \"1879618543203316671988272125223067171399706572276440304079759724193381288747194763824935119524937811702978\"\r\n        \"5346824959137857859436465786914494524255722772632932143297869408646165020772565585954957146272258642810324\"\r\n        \"4371170673559872471374607544202953575101896209634207583134484597935056683400161999080674728857537643796458\"\r\n        \"3340805248920865958964374874904225702196647833491881224339096832931406216968537997956637859652934407081171\"\r\n        \"737368069303261372015460341246736986585419426631915484904311597347259521484375\"},\r\n    {0x1.fffffffffffffp-873, chars_format::fixed, 925,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000031757315306547502633153612504452726264137693500681629455\"\r\n        \"0284856080904014734549309974964509636163740234766676258643131329159677333664837880201838131715945748844690\"\r\n        \"3759237086406633343976544250446134342799413144552880608159519448386762577494389527649870239049875623405957\"\r\n        \"0693649918275715718872931573828989048511445545265864286595738817292330041545131171909914292544517285620648\"\r\n        \"8742341347119744942749215088405907150203792419268415166268969195870113366800323998161349457715075287592916\"\r\n        \"6681610497841731917928749749808451404393295666983762448678193665862812433937075995913275719305868814162343\"\r\n        \"47473613860652274403092068249347397317083885326383096980862319469451904296875\"},\r\n    {0x1.fffffffffffffp-872, chars_format::fixed, 924,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000063514630613095005266307225008905452528275387001363258910\"\r\n        \"0569712161808029469098619949929019272327480469533352517286262658319354667329675760403676263431891497689380\"\r\n        \"7518474172813266687953088500892268685598826289105761216319038896773525154988779055299740478099751246811914\"\r\n        \"1387299836551431437745863147657978097022891090531728573191477634584660083090262343819828585089034571241297\"\r\n        \"7484682694239489885498430176811814300407584838536830332537938391740226733600647996322698915430150575185833\"\r\n        \"3363220995683463835857499499616902808786591333967524897356387331725624867874151991826551438611737628324686\"\r\n        \"9494722772130454880618413649869479463416777065276619396172463893890380859375\"},\r\n    {0x1.fffffffffffffp-871, chars_format::fixed, 923,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000127029261226190010532614450017810905056550774002726517820\"\r\n        \"1139424323616058938197239899858038544654960939066705034572525316638709334659351520807352526863782995378761\"\r\n        \"5036948345626533375906177001784537371197652578211522432638077793547050309977558110599480956199502493623828\"\r\n        \"2774599673102862875491726295315956194045782181063457146382955269169320166180524687639657170178069142482595\"\r\n        \"4969365388478979770996860353623628600815169677073660665075876783480453467201295992645397830860301150371666\"\r\n        \"6726441991366927671714998999233805617573182667935049794712774663451249735748303983653102877223475256649373\"\r\n        \"898944554426090976123682729973895892683355413055323879234492778778076171875\"},\r\n    {0x1.fffffffffffffp-870, chars_format::fixed, 922,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000254058522452380021065228900035621810113101548005453035640\"\r\n        \"2278848647232117876394479799716077089309921878133410069145050633277418669318703041614705053727565990757523\"\r\n        \"0073896691253066751812354003569074742395305156423044865276155587094100619955116221198961912399004987247656\"\r\n        \"5549199346205725750983452590631912388091564362126914292765910538338640332361049375279314340356138284965190\"\r\n        \"9938730776957959541993720707247257201630339354147321330151753566960906934402591985290795661720602300743333\"\r\n        \"3452883982733855343429997998467611235146365335870099589425549326902499471496607967306205754446950513298747\"\r\n        \"79788910885218195224736545994779178536671082611064775846898555755615234375\"},\r\n    {0x1.fffffffffffffp-869, chars_format::fixed, 921,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000508117044904760042130457800071243620226203096010906071280\"\r\n        \"4557697294464235752788959599432154178619843756266820138290101266554837338637406083229410107455131981515046\"\r\n        \"0147793382506133503624708007138149484790610312846089730552311174188201239910232442397923824798009974495313\"\r\n        \"1098398692411451501966905181263824776183128724253828585531821076677280664722098750558628680712276569930381\"\r\n        \"9877461553915919083987441414494514403260678708294642660303507133921813868805183970581591323441204601486666\"\r\n        \"6905767965467710686859995996935222470292730671740199178851098653804998942993215934612411508893901026597495\"\r\n        \"5957782177043639044947309198955835707334216522212955169379711151123046875\"},\r\n    {0x1.fffffffffffffp-868, chars_format::fixed, 920,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000001016234089809520084260915600142487240452406192021812142560\"\r\n        \"9115394588928471505577919198864308357239687512533640276580202533109674677274812166458820214910263963030092\"\r\n        \"0295586765012267007249416014276298969581220625692179461104622348376402479820464884795847649596019948990626\"\r\n        \"2196797384822903003933810362527649552366257448507657171063642153354561329444197501117257361424553139860763\"\r\n        \"9754923107831838167974882828989028806521357416589285320607014267843627737610367941163182646882409202973333\"\r\n        \"3811535930935421373719991993870444940585461343480398357702197307609997885986431869224823017787802053194991\"\r\n        \"191556435408727808989461839791167141466843304442591033875942230224609375\"},\r\n    {0x1.fffffffffffffp-867, chars_format::fixed, 919,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000002032468179619040168521831200284974480904812384043624285121\"\r\n        \"8230789177856943011155838397728616714479375025067280553160405066219349354549624332917640429820527926060184\"\r\n        \"0591173530024534014498832028552597939162441251384358922209244696752804959640929769591695299192039897981252\"\r\n        \"4393594769645806007867620725055299104732514897015314342127284306709122658888395002234514722849106279721527\"\r\n        \"9509846215663676335949765657978057613042714833178570641214028535687255475220735882326365293764818405946666\"\r\n        \"7623071861870842747439983987740889881170922686960796715404394615219995771972863738449646035575604106389982\"\r\n        \"38311287081745561797892367958233428293368660888518206775188446044921875\"},\r\n    {0x1.fffffffffffffp-866, chars_format::fixed, 918,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000004064936359238080337043662400569948961809624768087248570243\"\r\n        \"6461578355713886022311676795457233428958750050134561106320810132438698709099248665835280859641055852120368\"\r\n        \"1182347060049068028997664057105195878324882502768717844418489393505609919281859539183390598384079795962504\"\r\n        \"8787189539291612015735241450110598209465029794030628684254568613418245317776790004469029445698212559443055\"\r\n        \"9019692431327352671899531315956115226085429666357141282428057071374510950441471764652730587529636811893333\"\r\n        \"5246143723741685494879967975481779762341845373921593430808789230439991543945727476899292071151208212779964\"\r\n        \"7662257416349112359578473591646685658673732177703641355037689208984375\"},\r\n    {0x1.fffffffffffffp-865, chars_format::fixed, 917,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000008129872718476160674087324801139897923619249536174497140487\"\r\n        \"2923156711427772044623353590914466857917500100269122212641620264877397418198497331670561719282111704240736\"\r\n        \"2364694120098136057995328114210391756649765005537435688836978787011219838563719078366781196768159591925009\"\r\n        \"7574379078583224031470482900221196418930059588061257368509137226836490635553580008938058891396425118886111\"\r\n        \"8039384862654705343799062631912230452170859332714282564856114142749021900882943529305461175059273623786667\"\r\n        \"0492287447483370989759935950963559524683690747843186861617578460879983087891454953798584142302416425559929\"\r\n        \"532451483269822471915694718329337131734746435540728271007537841796875\"},\r\n    {0x1.fffffffffffffp-864, chars_format::fixed, 916,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000016259745436952321348174649602279795847238499072348994280974\"\r\n        \"5846313422855544089246707181828933715835000200538244425283240529754794836396994663341123438564223408481472\"\r\n        \"4729388240196272115990656228420783513299530011074871377673957574022439677127438156733562393536319183850019\"\r\n        \"5148758157166448062940965800442392837860119176122514737018274453672981271107160017876117782792850237772223\"\r\n        \"6078769725309410687598125263824460904341718665428565129712228285498043801765887058610922350118547247573334\"\r\n        \"0984574894966741979519871901927119049367381495686373723235156921759966175782909907597168284604832851119859\"\r\n        \"06490296653964494383138943665867426346949287108145654201507568359375\"},\r\n    {0x1.fffffffffffffp-863, chars_format::fixed, 915,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000032519490873904642696349299204559591694476998144697988561949\"\r\n        \"1692626845711088178493414363657867431670000401076488850566481059509589672793989326682246877128446816962944\"\r\n        \"9458776480392544231981312456841567026599060022149742755347915148044879354254876313467124787072638367700039\"\r\n        \"0297516314332896125881931600884785675720238352245029474036548907345962542214320035752235565585700475544447\"\r\n        \"2157539450618821375196250527648921808683437330857130259424456570996087603531774117221844700237094495146668\"\r\n        \"1969149789933483959039743803854238098734762991372747446470313843519932351565819815194336569209665702239718\"\r\n        \"1298059330792898876627788733173485269389857421629130840301513671875\"},\r\n    {0x1.fffffffffffffp-862, chars_format::fixed, 914,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000065038981747809285392698598409119183388953996289395977123898\"\r\n        \"3385253691422176356986828727315734863340000802152977701132962119019179345587978653364493754256893633925889\"\r\n        \"8917552960785088463962624913683134053198120044299485510695830296089758708509752626934249574145276735400078\"\r\n        \"0595032628665792251763863201769571351440476704490058948073097814691925084428640071504471131171400951088894\"\r\n        \"4315078901237642750392501055297843617366874661714260518848913141992175207063548234443689400474188990293336\"\r\n        \"3938299579866967918079487607708476197469525982745494892940627687039864703131639630388673138419331404479436\"\r\n        \"259611866158579775325557746634697053877971484325826168060302734375\"},\r\n    {0x1.fffffffffffffp-861, chars_format::fixed, 913,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000130077963495618570785397196818238366777907992578791954247796\"\r\n        \"6770507382844352713973657454631469726680001604305955402265924238038358691175957306728987508513787267851779\"\r\n        \"7835105921570176927925249827366268106396240088598971021391660592179517417019505253868499148290553470800156\"\r\n        \"1190065257331584503527726403539142702880953408980117896146195629383850168857280143008942262342801902177788\"\r\n        \"8630157802475285500785002110595687234733749323428521037697826283984350414127096468887378800948377980586672\"\r\n        \"7876599159733935836158975215416952394939051965490989785881255374079729406263279260777346276838662808958872\"\r\n        \"51922373231715955065111549326939410775594296865165233612060546875\"},\r\n    {0x1.fffffffffffffp-860, chars_format::fixed, 912,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000260155926991237141570794393636476733555815985157583908495593\"\r\n        \"3541014765688705427947314909262939453360003208611910804531848476076717382351914613457975017027574535703559\"\r\n        \"5670211843140353855850499654732536212792480177197942042783321184359034834039010507736998296581106941600312\"\r\n        \"2380130514663169007055452807078285405761906817960235792292391258767700337714560286017884524685603804355577\"\r\n        \"7260315604950571001570004221191374469467498646857042075395652567968700828254192937774757601896755961173345\"\r\n        \"5753198319467871672317950430833904789878103930981979571762510748159458812526558521554692553677325617917745\"\r\n        \"0384474646343191013022309865387882155118859373033046722412109375\"},\r\n    {0x1.fffffffffffffp-859, chars_format::fixed, 911,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000520311853982474283141588787272953467111631970315167816991186\"\r\n        \"7082029531377410855894629818525878906720006417223821609063696952153434764703829226915950034055149071407119\"\r\n        \"1340423686280707711700999309465072425584960354395884085566642368718069668078021015473996593162213883200624\"\r\n        \"4760261029326338014110905614156570811523813635920471584584782517535400675429120572035769049371207608711155\"\r\n        \"4520631209901142003140008442382748938934997293714084150791305135937401656508385875549515203793511922346691\"\r\n        \"1506396638935743344635900861667809579756207861963959143525021496318917625053117043109385107354651235835490\"\r\n        \"076894929268638202604461973077576431023771874606609344482421875\"},\r\n    {0x1.fffffffffffffp-858, chars_format::fixed, 910,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000001040623707964948566283177574545906934223263940630335633982373\"\r\n        \"4164059062754821711789259637051757813440012834447643218127393904306869529407658453831900068110298142814238\"\r\n        \"2680847372561415423401998618930144851169920708791768171133284737436139336156042030947993186324427766401248\"\r\n        \"9520522058652676028221811228313141623047627271840943169169565035070801350858241144071538098742415217422310\"\r\n        \"9041262419802284006280016884765497877869994587428168301582610271874803313016771751099030407587023844693382\"\r\n        \"3012793277871486689271801723335619159512415723927918287050042992637835250106234086218770214709302471670980\"\r\n        \"15378985853727640520892394615515286204754374921321868896484375\"},\r\n    {0x1.fffffffffffffp-857, chars_format::fixed, 909,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000002081247415929897132566355149091813868446527881260671267964746\"\r\n        \"8328118125509643423578519274103515626880025668895286436254787808613739058815316907663800136220596285628476\"\r\n        \"5361694745122830846803997237860289702339841417583536342266569474872278672312084061895986372648855532802497\"\r\n        \"9041044117305352056443622456626283246095254543681886338339130070141602701716482288143076197484830434844621\"\r\n        \"8082524839604568012560033769530995755739989174856336603165220543749606626033543502198060815174047689386764\"\r\n        \"6025586555742973378543603446671238319024831447855836574100085985275670500212468172437540429418604943341960\"\r\n        \"3075797170745528104178478923103057240950874984264373779296875\"},\r\n    {0x1.fffffffffffffp-856, chars_format::fixed, 908,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000004162494831859794265132710298183627736893055762521342535929493\"\r\n        \"6656236251019286847157038548207031253760051337790572872509575617227478117630633815327600272441192571256953\"\r\n        \"0723389490245661693607994475720579404679682835167072684533138949744557344624168123791972745297711065604995\"\r\n        \"8082088234610704112887244913252566492190509087363772676678260140283205403432964576286152394969660869689243\"\r\n        \"6165049679209136025120067539061991511479978349712673206330441087499213252067087004396121630348095378773529\"\r\n        \"2051173111485946757087206893342476638049662895711673148200171970551341000424936344875080858837209886683920\"\r\n        \"615159434149105620835695784620611448190174996852874755859375\"},\r\n    {0x1.fffffffffffffp-855, chars_format::fixed, 907,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000008324989663719588530265420596367255473786111525042685071858987\"\r\n        \"3312472502038573694314077096414062507520102675581145745019151234454956235261267630655200544882385142513906\"\r\n        \"1446778980491323387215988951441158809359365670334145369066277899489114689248336247583945490595422131209991\"\r\n        \"6164176469221408225774489826505132984381018174727545353356520280566410806865929152572304789939321739378487\"\r\n        \"2330099358418272050240135078123983022959956699425346412660882174998426504134174008792243260696190757547058\"\r\n        \"4102346222971893514174413786684953276099325791423346296400343941102682000849872689750161717674419773367841\"\r\n        \"23031886829821124167139156924122289638034999370574951171875\"},\r\n    {0x1.fffffffffffffp-854, chars_format::fixed, 906,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000016649979327439177060530841192734510947572223050085370143717974\"\r\n        \"6624945004077147388628154192828125015040205351162291490038302468909912470522535261310401089764770285027812\"\r\n        \"2893557960982646774431977902882317618718731340668290738132555798978229378496672495167890981190844262419983\"\r\n        \"2328352938442816451548979653010265968762036349455090706713040561132821613731858305144609579878643478756974\"\r\n        \"4660198716836544100480270156247966045919913398850692825321764349996853008268348017584486521392381515094116\"\r\n        \"8204692445943787028348827573369906552198651582846692592800687882205364001699745379500323435348839546735682\"\r\n        \"4606377365964224833427831384824457927606999874114990234375\"},\r\n    {0x1.fffffffffffffp-853, chars_format::fixed, 905,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000033299958654878354121061682385469021895144446100170740287435949\"\r\n        \"3249890008154294777256308385656250030080410702324582980076604937819824941045070522620802179529540570055624\"\r\n        \"5787115921965293548863955805764635237437462681336581476265111597956458756993344990335781962381688524839966\"\r\n        \"4656705876885632903097959306020531937524072698910181413426081122265643227463716610289219159757286957513948\"\r\n        \"9320397433673088200960540312495932091839826797701385650643528699993706016536696035168973042784763030188233\"\r\n        \"6409384891887574056697655146739813104397303165693385185601375764410728003399490759000646870697679093471364\"\r\n        \"921275473192844966685566276964891585521399974822998046875\"},\r\n    {0x1.fffffffffffffp-852, chars_format::fixed, 904,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000066599917309756708242123364770938043790288892200341480574871898\"\r\n        \"6499780016308589554512616771312500060160821404649165960153209875639649882090141045241604359059081140111249\"\r\n        \"1574231843930587097727911611529270474874925362673162952530223195912917513986689980671563924763377049679932\"\r\n        \"9313411753771265806195918612041063875048145397820362826852162244531286454927433220578438319514573915027897\"\r\n        \"8640794867346176401921080624991864183679653595402771301287057399987412033073392070337946085569526060376467\"\r\n        \"2818769783775148113395310293479626208794606331386770371202751528821456006798981518001293741395358186942729\"\r\n        \"84255094638568993337113255392978317104279994964599609375\"},\r\n    {0x1.fffffffffffffp-851, chars_format::fixed, 903,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000133199834619513416484246729541876087580577784400682961149743797\"\r\n        \"2999560032617179109025233542625000120321642809298331920306419751279299764180282090483208718118162280222498\"\r\n        \"3148463687861174195455823223058540949749850725346325905060446391825835027973379961343127849526754099359865\"\r\n        \"8626823507542531612391837224082127750096290795640725653704324489062572909854866441156876639029147830055795\"\r\n        \"7281589734692352803842161249983728367359307190805542602574114799974824066146784140675892171139052120752934\"\r\n        \"5637539567550296226790620586959252417589212662773540742405503057642912013597963036002587482790716373885459\"\r\n        \"6851018927713798667422651078595663420855998992919921875\"},\r\n    {0x1.fffffffffffffp-850, chars_format::fixed, 902,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000266399669239026832968493459083752175161155568801365922299487594\"\r\n        \"5999120065234358218050467085250000240643285618596663840612839502558599528360564180966417436236324560444996\"\r\n        \"6296927375722348390911646446117081899499701450692651810120892783651670055946759922686255699053508198719731\"\r\n        \"7253647015085063224783674448164255500192581591281451307408648978125145819709732882313753278058295660111591\"\r\n        \"4563179469384705607684322499967456734718614381611085205148229599949648132293568281351784342278104241505869\"\r\n        \"1275079135100592453581241173918504835178425325547081484811006115285824027195926072005174965581432747770919\"\r\n        \"370203785542759733484530215719132684171199798583984375\"},\r\n    {0x1.fffffffffffffp-849, chars_format::fixed, 901,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000532799338478053665936986918167504350322311137602731844598975189\"\r\n        \"1998240130468716436100934170500000481286571237193327681225679005117199056721128361932834872472649120889993\"\r\n        \"2593854751444696781823292892234163798999402901385303620241785567303340111893519845372511398107016397439463\"\r\n        \"4507294030170126449567348896328511000385163182562902614817297956250291639419465764627506556116591320223182\"\r\n        \"9126358938769411215368644999934913469437228763222170410296459199899296264587136562703568684556208483011738\"\r\n        \"2550158270201184907162482347837009670356850651094162969622012230571648054391852144010349931162865495541838\"\r\n        \"74040757108551946696906043143826536834239959716796875\"},\r\n    {0x1.fffffffffffffp-848, chars_format::fixed, 900,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000001065598676956107331873973836335008700644622275205463689197950378\"\r\n        \"3996480260937432872201868341000000962573142474386655362451358010234398113442256723865669744945298241779986\"\r\n        \"5187709502889393563646585784468327597998805802770607240483571134606680223787039690745022796214032794878926\"\r\n        \"9014588060340252899134697792657022000770326365125805229634595912500583278838931529255013112233182640446365\"\r\n        \"8252717877538822430737289999869826938874457526444340820592918399798592529174273125407137369112416966023476\"\r\n        \"5100316540402369814324964695674019340713701302188325939244024461143296108783704288020699862325730991083677\"\r\n        \"4808151421710389339381208628765307366847991943359375\"},\r\n    {0x1.fffffffffffffp-847, chars_format::fixed, 899,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000002131197353912214663747947672670017401289244550410927378395900756\"\r\n        \"7992960521874865744403736682000001925146284948773310724902716020468796226884513447731339489890596483559973\"\r\n        \"0375419005778787127293171568936655195997611605541214480967142269213360447574079381490045592428065589757853\"\r\n        \"8029176120680505798269395585314044001540652730251610459269191825001166557677863058510026224466365280892731\"\r\n        \"6505435755077644861474579999739653877748915052888681641185836799597185058348546250814274738224833932046953\"\r\n        \"0200633080804739628649929391348038681427402604376651878488048922286592217567408576041399724651461982167354\"\r\n        \"961630284342077867876241725753061473369598388671875\"},\r\n    {0x1.fffffffffffffp-846, chars_format::fixed, 898,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000004262394707824429327495895345340034802578489100821854756791801513\"\r\n        \"5985921043749731488807473364000003850292569897546621449805432040937592453769026895462678979781192967119946\"\r\n        \"0750838011557574254586343137873310391995223211082428961934284538426720895148158762980091184856131179515707\"\r\n        \"6058352241361011596538791170628088003081305460503220918538383650002333115355726117020052448932730561785463\"\r\n        \"3010871510155289722949159999479307755497830105777363282371673599194370116697092501628549476449667864093906\"\r\n        \"0401266161609479257299858782696077362854805208753303756976097844573184435134817152082799449302923964334709\"\r\n        \"92326056868415573575248345150612294673919677734375\"},\r\n    {0x1.fffffffffffffp-845, chars_format::fixed, 897,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000008524789415648858654991790690680069605156978201643709513583603027\"\r\n        \"1971842087499462977614946728000007700585139795093242899610864081875184907538053790925357959562385934239892\"\r\n        \"1501676023115148509172686275746620783990446422164857923868569076853441790296317525960182369712262359031415\"\r\n        \"2116704482722023193077582341256176006162610921006441837076767300004666230711452234040104897865461123570926\"\r\n        \"6021743020310579445898319998958615510995660211554726564743347198388740233394185003257098952899335728187812\"\r\n        \"0802532323218958514599717565392154725709610417506607513952195689146368870269634304165598898605847928669419\"\r\n        \"8465211373683114715049669030122458934783935546875\"},\r\n    {0x1.fffffffffffffp-844, chars_format::fixed, 896,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000017049578831297717309983581381360139210313956403287419027167206054\"\r\n        \"3943684174998925955229893456000015401170279590186485799221728163750369815076107581850715919124771868479784\"\r\n        \"3003352046230297018345372551493241567980892844329715847737138153706883580592635051920364739424524718062830\"\r\n        \"4233408965444046386155164682512352012325221842012883674153534600009332461422904468080209795730922247141853\"\r\n        \"2043486040621158891796639997917231021991320423109453129486694396777480466788370006514197905798671456375624\"\r\n        \"1605064646437917029199435130784309451419220835013215027904391378292737740539268608331197797211695857338839\"\r\n        \"693042274736622943009933806024491786956787109375\"},\r\n    {0x1.fffffffffffffp-843, chars_format::fixed, 895,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000034099157662595434619967162762720278420627912806574838054334412108\"\r\n        \"7887368349997851910459786912000030802340559180372971598443456327500739630152215163701431838249543736959568\"\r\n        \"6006704092460594036690745102986483135961785688659431695474276307413767161185270103840729478849049436125660\"\r\n        \"8466817930888092772310329365024704024650443684025767348307069200018664922845808936160419591461844494283706\"\r\n        \"4086972081242317783593279995834462043982640846218906258973388793554960933576740013028395811597342912751248\"\r\n        \"3210129292875834058398870261568618902838441670026430055808782756585475481078537216662395594423391714677679\"\r\n        \"38608454947324588601986761204898357391357421875\"},\r\n    {0x1.fffffffffffffp-842, chars_format::fixed, 894,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000068198315325190869239934325525440556841255825613149676108668824217\"\r\n        \"5774736699995703820919573824000061604681118360745943196886912655001479260304430327402863676499087473919137\"\r\n        \"2013408184921188073381490205972966271923571377318863390948552614827534322370540207681458957698098872251321\"\r\n        \"6933635861776185544620658730049408049300887368051534696614138400037329845691617872320839182923688988567412\"\r\n        \"8173944162484635567186559991668924087965281692437812517946777587109921867153480026056791623194685825502496\"\r\n        \"6420258585751668116797740523137237805676883340052860111617565513170950962157074433324791188846783429355358\"\r\n        \"7721690989464917720397352240979671478271484375\"},\r\n    {0x1.fffffffffffffp-841, chars_format::fixed, 893,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000136396630650381738479868651050881113682511651226299352217337648435\"\r\n        \"1549473399991407641839147648000123209362236721491886393773825310002958520608860654805727352998174947838274\"\r\n        \"4026816369842376146762980411945932543847142754637726781897105229655068644741080415362917915396197744502643\"\r\n        \"3867271723552371089241317460098816098601774736103069393228276800074659691383235744641678365847377977134825\"\r\n        \"6347888324969271134373119983337848175930563384875625035893555174219843734306960052113583246389371651004993\"\r\n        \"2840517171503336233595481046274475611353766680105720223235131026341901924314148866649582377693566858710717\"\r\n        \"544338197892983544079470448195934295654296875\"},\r\n    {0x1.fffffffffffffp-840, chars_format::fixed, 892,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000272793261300763476959737302101762227365023302452598704434675296870\"\r\n        \"3098946799982815283678295296000246418724473442983772787547650620005917041217721309611454705996349895676548\"\r\n        \"8053632739684752293525960823891865087694285509275453563794210459310137289482160830725835830792395489005286\"\r\n        \"7734543447104742178482634920197632197203549472206138786456553600149319382766471489283356731694755954269651\"\r\n        \"2695776649938542268746239966675696351861126769751250071787110348439687468613920104227166492778743302009986\"\r\n        \"5681034343006672467190962092548951222707533360211440446470262052683803848628297733299164755387133717421435\"\r\n        \"08867639578596708815894089639186859130859375\"},\r\n    {0x1.fffffffffffffp-839, chars_format::fixed, 891,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000545586522601526953919474604203524454730046604905197408869350593740\"\r\n        \"6197893599965630567356590592000492837448946885967545575095301240011834082435442619222909411992699791353097\"\r\n        \"6107265479369504587051921647783730175388571018550907127588420918620274578964321661451671661584790978010573\"\r\n        \"5469086894209484356965269840395264394407098944412277572913107200298638765532942978566713463389511908539302\"\r\n        \"5391553299877084537492479933351392703722253539502500143574220696879374937227840208454332985557486604019973\"\r\n        \"1362068686013344934381924185097902445415066720422880892940524105367607697256595466598329510774267434842870\"\r\n        \"1773527915719341763178817927837371826171875\"},\r\n    {0x1.fffffffffffffp-838, chars_format::fixed, 890,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000001091173045203053907838949208407048909460093209810394817738701187481\"\r\n        \"2395787199931261134713181184000985674897893771935091150190602480023668164870885238445818823985399582706195\"\r\n        \"2214530958739009174103843295567460350777142037101814255176841837240549157928643322903343323169581956021147\"\r\n        \"0938173788418968713930539680790528788814197888824555145826214400597277531065885957133426926779023817078605\"\r\n        \"0783106599754169074984959866702785407444507079005000287148441393758749874455680416908665971114973208039946\"\r\n        \"2724137372026689868763848370195804890830133440845761785881048210735215394513190933196659021548534869685740\"\r\n        \"354705583143868352635763585567474365234375\"},\r\n    {0x1.fffffffffffffp-837, chars_format::fixed, 889,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000002182346090406107815677898416814097818920186419620789635477402374962\"\r\n        \"4791574399862522269426362368001971349795787543870182300381204960047336329741770476891637647970799165412390\"\r\n        \"4429061917478018348207686591134920701554284074203628510353683674481098315857286645806686646339163912042294\"\r\n        \"1876347576837937427861079361581057577628395777649110291652428801194555062131771914266853853558047634157210\"\r\n        \"1566213199508338149969919733405570814889014158010000574296882787517499748911360833817331942229946416079892\"\r\n        \"5448274744053379737527696740391609781660266881691523571762096421470430789026381866393318043097069739371480\"\r\n        \"70941116628773670527152717113494873046875\"},\r\n    {0x1.fffffffffffffp-836, chars_format::fixed, 888,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000004364692180812215631355796833628195637840372839241579270954804749924\"\r\n        \"9583148799725044538852724736003942699591575087740364600762409920094672659483540953783275295941598330824780\"\r\n        \"8858123834956036696415373182269841403108568148407257020707367348962196631714573291613373292678327824084588\"\r\n        \"3752695153675874855722158723162115155256791555298220583304857602389110124263543828533707707116095268314420\"\r\n        \"3132426399016676299939839466811141629778028316020001148593765575034999497822721667634663884459892832159785\"\r\n        \"0896549488106759475055393480783219563320533763383047143524192842940861578052763732786636086194139478742961\"\r\n        \"4188223325754734105430543422698974609375\"},\r\n    {0x1.fffffffffffffp-835, chars_format::fixed, 887,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000008729384361624431262711593667256391275680745678483158541909609499849\"\r\n        \"9166297599450089077705449472007885399183150175480729201524819840189345318967081907566550591883196661649561\"\r\n        \"7716247669912073392830746364539682806217136296814514041414734697924393263429146583226746585356655648169176\"\r\n        \"7505390307351749711444317446324230310513583110596441166609715204778220248527087657067415414232190536628840\"\r\n        \"6264852798033352599879678933622283259556056632040002297187531150069998995645443335269327768919785664319570\"\r\n        \"1793098976213518950110786961566439126641067526766094287048385685881723156105527465573272172388278957485922\"\r\n        \"837644665150946821086108684539794921875\"},\r\n    {0x1.fffffffffffffp-834, chars_format::fixed, 886,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000017458768723248862525423187334512782551361491356966317083819218999699\"\r\n        \"8332595198900178155410898944015770798366300350961458403049639680378690637934163815133101183766393323299123\"\r\n        \"5432495339824146785661492729079365612434272593629028082829469395848786526858293166453493170713311296338353\"\r\n        \"5010780614703499422888634892648460621027166221192882333219430409556440497054175314134830828464381073257681\"\r\n        \"2529705596066705199759357867244566519112113264080004594375062300139997991290886670538655537839571328639140\"\r\n        \"3586197952427037900221573923132878253282135053532188574096771371763446312211054931146544344776557914971845\"\r\n        \"67528933030189364217221736907958984375\"},\r\n    {0x1.fffffffffffffp-833, chars_format::fixed, 885,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000034917537446497725050846374669025565102722982713932634167638437999399\"\r\n        \"6665190397800356310821797888031541596732600701922916806099279360757381275868327630266202367532786646598247\"\r\n        \"0864990679648293571322985458158731224868545187258056165658938791697573053716586332906986341426622592676707\"\r\n        \"0021561229406998845777269785296921242054332442385764666438860819112880994108350628269661656928762146515362\"\r\n        \"5059411192133410399518715734489133038224226528160009188750124600279995982581773341077311075679142657278280\"\r\n        \"7172395904854075800443147846265756506564270107064377148193542743526892624422109862293088689553115829943691\"\r\n        \"3505786606037872843444347381591796875\"},\r\n    {0x1.fffffffffffffp-832, chars_format::fixed, 884,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000069835074892995450101692749338051130205445965427865268335276875998799\"\r\n        \"3330380795600712621643595776063083193465201403845833612198558721514762551736655260532404735065573293196494\"\r\n        \"1729981359296587142645970916317462449737090374516112331317877583395146107433172665813972682853245185353414\"\r\n        \"0043122458813997691554539570593842484108664884771529332877721638225761988216701256539323313857524293030725\"\r\n        \"0118822384266820799037431468978266076448453056320018377500249200559991965163546682154622151358285314556561\"\r\n        \"4344791809708151600886295692531513013128540214128754296387085487053785248844219724586177379106231659887382\"\r\n        \"701157321207574568688869476318359375\"},\r\n    {0x1.fffffffffffffp-831, chars_format::fixed, 883,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000139670149785990900203385498676102260410891930855730536670553751997598\"\r\n        \"6660761591201425243287191552126166386930402807691667224397117443029525103473310521064809470131146586392988\"\r\n        \"3459962718593174285291941832634924899474180749032224662635755166790292214866345331627945365706490370706828\"\r\n        \"0086244917627995383109079141187684968217329769543058665755443276451523976433402513078646627715048586061450\"\r\n        \"0237644768533641598074862937956532152896906112640036755000498401119983930327093364309244302716570629113122\"\r\n        \"8689583619416303201772591385063026026257080428257508592774170974107570497688439449172354758212463319774765\"\r\n        \"40231464241514913737773895263671875\"},\r\n    {0x1.fffffffffffffp-830, chars_format::fixed, 882,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000279340299571981800406770997352204520821783861711461073341107503995197\"\r\n        \"3321523182402850486574383104252332773860805615383334448794234886059050206946621042129618940262293172785976\"\r\n        \"6919925437186348570583883665269849798948361498064449325271510333580584429732690663255890731412980741413656\"\r\n        \"0172489835255990766218158282375369936434659539086117331510886552903047952866805026157293255430097172122900\"\r\n        \"0475289537067283196149725875913064305793812225280073510000996802239967860654186728618488605433141258226245\"\r\n        \"7379167238832606403545182770126052052514160856515017185548341948215140995376878898344709516424926639549530\"\r\n        \"8046292848302982747554779052734375\"},\r\n    {0x1.fffffffffffffp-829, chars_format::fixed, 881,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000558680599143963600813541994704409041643567723422922146682215007990394\"\r\n        \"6643046364805700973148766208504665547721611230766668897588469772118100413893242084259237880524586345571953\"\r\n        \"3839850874372697141167767330539699597896722996128898650543020667161168859465381326511781462825961482827312\"\r\n        \"0344979670511981532436316564750739872869319078172234663021773105806095905733610052314586510860194344245800\"\r\n        \"0950579074134566392299451751826128611587624450560147020001993604479935721308373457236977210866282516452491\"\r\n        \"4758334477665212807090365540252104105028321713030034371096683896430281990753757796689419032849853279099061\"\r\n        \"609258569660596549510955810546875\"},\r\n    {0x1.fffffffffffffp-828, chars_format::fixed, 880,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000001117361198287927201627083989408818083287135446845844293364430015980789\"\r\n        \"3286092729611401946297532417009331095443222461533337795176939544236200827786484168518475761049172691143906\"\r\n        \"7679701748745394282335534661079399195793445992257797301086041334322337718930762653023562925651922965654624\"\r\n        \"0689959341023963064872633129501479745738638156344469326043546211612191811467220104629173021720388688491600\"\r\n        \"1901158148269132784598903503652257223175248901120294040003987208959871442616746914473954421732565032904982\"\r\n        \"9516668955330425614180731080504208210056643426060068742193367792860563981507515593378838065699706558198123\"\r\n        \"21851713932119309902191162109375\"},\r\n    {0x1.fffffffffffffp-827, chars_format::fixed, 879,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000002234722396575854403254167978817636166574270893691688586728860031961578\"\r\n        \"6572185459222803892595064834018662190886444923066675590353879088472401655572968337036951522098345382287813\"\r\n        \"5359403497490788564671069322158798391586891984515594602172082668644675437861525306047125851303845931309248\"\r\n        \"1379918682047926129745266259002959491477276312688938652087092423224383622934440209258346043440777376983200\"\r\n        \"3802316296538265569197807007304514446350497802240588080007974417919742885233493828947908843465130065809965\"\r\n        \"9033337910660851228361462161008416420113286852120137484386735585721127963015031186757676131399413116396246\"\r\n        \"4370342786423861980438232421875\"},\r\n    {0x1.fffffffffffffp-826, chars_format::fixed, 878,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000004469444793151708806508335957635272333148541787383377173457720063923157\"\r\n        \"3144370918445607785190129668037324381772889846133351180707758176944803311145936674073903044196690764575627\"\r\n        \"0718806994981577129342138644317596783173783969031189204344165337289350875723050612094251702607691862618496\"\r\n        \"2759837364095852259490532518005918982954552625377877304174184846448767245868880418516692086881554753966400\"\r\n        \"7604632593076531138395614014609028892700995604481176160015948835839485770466987657895817686930260131619931\"\r\n        \"8066675821321702456722924322016832840226573704240274968773471171442255926030062373515352262798826232792492\"\r\n        \"874068557284772396087646484375\"},\r\n    {0x1.fffffffffffffp-825, chars_format::fixed, 877,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000008938889586303417613016671915270544666297083574766754346915440127846314\"\r\n        \"6288741836891215570380259336074648763545779692266702361415516353889606622291873348147806088393381529151254\"\r\n        \"1437613989963154258684277288635193566347567938062378408688330674578701751446101224188503405215383725236992\"\r\n        \"5519674728191704518981065036011837965909105250755754608348369692897534491737760837033384173763109507932801\"\r\n        \"5209265186153062276791228029218057785401991208962352320031897671678971540933975315791635373860520263239863\"\r\n        \"6133351642643404913445848644033665680453147408480549937546942342884511852060124747030704525597652465584985\"\r\n        \"74813711456954479217529296875\"},\r\n    {0x1.fffffffffffffp-824, chars_format::fixed, 876,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000017877779172606835226033343830541089332594167149533508693830880255692629\"\r\n        \"2577483673782431140760518672149297527091559384533404722831032707779213244583746696295612176786763058302508\"\r\n        \"2875227979926308517368554577270387132695135876124756817376661349157403502892202448377006810430767450473985\"\r\n        \"1039349456383409037962130072023675931818210501511509216696739385795068983475521674066768347526219015865603\"\r\n        \"0418530372306124553582456058436115570803982417924704640063795343357943081867950631583270747721040526479727\"\r\n        \"2266703285286809826891697288067331360906294816961099875093884685769023704120249494061409051195304931169971\"\r\n        \"4962742291390895843505859375\"},\r\n    {0x1.fffffffffffffp-823, chars_format::fixed, 875,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000035755558345213670452066687661082178665188334299067017387661760511385258\"\r\n        \"5154967347564862281521037344298595054183118769066809445662065415558426489167493392591224353573526116605016\"\r\n        \"5750455959852617034737109154540774265390271752249513634753322698314807005784404896754013620861534900947970\"\r\n        \"2078698912766818075924260144047351863636421003023018433393478771590137966951043348133536695052438031731206\"\r\n        \"0837060744612249107164912116872231141607964835849409280127590686715886163735901263166541495442081052959454\"\r\n        \"4533406570573619653783394576134662721812589633922199750187769371538047408240498988122818102390609862339942\"\r\n        \"992548458278179168701171875\"},\r\n    {0x1.fffffffffffffp-822, chars_format::fixed, 874,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000071511116690427340904133375322164357330376668598134034775323521022770517\"\r\n        \"0309934695129724563042074688597190108366237538133618891324130831116852978334986785182448707147052233210033\"\r\n        \"1500911919705234069474218309081548530780543504499027269506645396629614011568809793508027241723069801895940\"\r\n        \"4157397825533636151848520288094703727272842006046036866786957543180275933902086696267073390104876063462412\"\r\n        \"1674121489224498214329824233744462283215929671698818560255181373431772327471802526333082990884162105918908\"\r\n        \"9066813141147239307566789152269325443625179267844399500375538743076094816480997976245636204781219724679885\"\r\n        \"98509691655635833740234375\"},\r\n    {0x1.fffffffffffffp-821, chars_format::fixed, 873,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000143022233380854681808266750644328714660753337196268069550647042045541034\"\r\n        \"0619869390259449126084149377194380216732475076267237782648261662233705956669973570364897414294104466420066\"\r\n        \"3001823839410468138948436618163097061561087008998054539013290793259228023137619587016054483446139603791880\"\r\n        \"8314795651067272303697040576189407454545684012092073733573915086360551867804173392534146780209752126924824\"\r\n        \"3348242978448996428659648467488924566431859343397637120510362746863544654943605052666165981768324211837817\"\r\n        \"8133626282294478615133578304538650887250358535688799000751077486152189632961995952491272409562439449359771\"\r\n        \"9701938331127166748046875\"},\r\n    {0x1.fffffffffffffp-820, chars_format::fixed, 872,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000286044466761709363616533501288657429321506674392536139101294084091082068\"\r\n        \"1239738780518898252168298754388760433464950152534475565296523324467411913339947140729794828588208932840132\"\r\n        \"6003647678820936277896873236326194123122174017996109078026581586518456046275239174032108966892279207583761\"\r\n        \"6629591302134544607394081152378814909091368024184147467147830172721103735608346785068293560419504253849648\"\r\n        \"6696485956897992857319296934977849132863718686795274241020725493727089309887210105332331963536648423675635\"\r\n        \"6267252564588957230267156609077301774500717071377598001502154972304379265923991904982544819124878898719543\"\r\n        \"940387666225433349609375\"},\r\n    {0x1.fffffffffffffp-819, chars_format::fixed, 871,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000572088933523418727233067002577314858643013348785072278202588168182164136\"\r\n        \"2479477561037796504336597508777520866929900305068951130593046648934823826679894281459589657176417865680265\"\r\n        \"2007295357641872555793746472652388246244348035992218156053163173036912092550478348064217933784558415167523\"\r\n        \"3259182604269089214788162304757629818182736048368294934295660345442207471216693570136587120839008507699297\"\r\n        \"3392971913795985714638593869955698265727437373590548482041450987454178619774420210664663927073296847351271\"\r\n        \"2534505129177914460534313218154603549001434142755196003004309944608758531847983809965089638249757797439087\"\r\n        \"88077533245086669921875\"},\r\n    {0x1.fffffffffffffp-818, chars_format::fixed, 870,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000001144177867046837454466134005154629717286026697570144556405176336364328272\"\r\n        \"4958955122075593008673195017555041733859800610137902261186093297869647653359788562919179314352835731360530\"\r\n        \"4014590715283745111587492945304776492488696071984436312106326346073824185100956696128435867569116830335046\"\r\n        \"6518365208538178429576324609515259636365472096736589868591320690884414942433387140273174241678017015398594\"\r\n        \"6785943827591971429277187739911396531454874747181096964082901974908357239548840421329327854146593694702542\"\r\n        \"5069010258355828921068626436309207098002868285510392006008619889217517063695967619930179276499515594878175\"\r\n        \"7615506649017333984375\"},\r\n    {0x1.fffffffffffffp-817, chars_format::fixed, 869,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000002288355734093674908932268010309259434572053395140289112810352672728656544\"\r\n        \"9917910244151186017346390035110083467719601220275804522372186595739295306719577125838358628705671462721060\"\r\n        \"8029181430567490223174985890609552984977392143968872624212652692147648370201913392256871735138233660670093\"\r\n        \"3036730417076356859152649219030519272730944193473179737182641381768829884866774280546348483356034030797189\"\r\n        \"3571887655183942858554375479822793062909749494362193928165803949816714479097680842658655708293187389405085\"\r\n        \"0138020516711657842137252872618414196005736571020784012017239778435034127391935239860358552999031189756351\"\r\n        \"523101329803466796875\"},\r\n    {0x1.fffffffffffffp-816, chars_format::fixed, 868,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000004576711468187349817864536020618518869144106790280578225620705345457313089\"\r\n        \"9835820488302372034692780070220166935439202440551609044744373191478590613439154251676717257411342925442121\"\r\n        \"6058362861134980446349971781219105969954784287937745248425305384295296740403826784513743470276467321340186\"\r\n        \"6073460834152713718305298438061038545461888386946359474365282763537659769733548561092696966712068061594378\"\r\n        \"7143775310367885717108750959645586125819498988724387856331607899633428958195361685317311416586374778810170\"\r\n        \"0276041033423315684274505745236828392011473142041568024034479556870068254783870479720717105998062379512703\"\r\n        \"04620265960693359375\"},\r\n    {0x1.fffffffffffffp-815, chars_format::fixed, 867,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000009153422936374699635729072041237037738288213580561156451241410690914626179\"\r\n        \"9671640976604744069385560140440333870878404881103218089488746382957181226878308503353434514822685850884243\"\r\n        \"2116725722269960892699943562438211939909568575875490496850610768590593480807653569027486940552934642680373\"\r\n        \"2146921668305427436610596876122077090923776773892718948730565527075319539467097122185393933424136123188757\"\r\n        \"4287550620735771434217501919291172251638997977448775712663215799266857916390723370634622833172749557620340\"\r\n        \"0552082066846631368549011490473656784022946284083136048068959113740136509567740959441434211996124759025406\"\r\n        \"0924053192138671875\"},\r\n    {0x1.fffffffffffffp-814, chars_format::fixed, 866,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000018306845872749399271458144082474075476576427161122312902482821381829252359\"\r\n        \"9343281953209488138771120280880667741756809762206436178977492765914362453756617006706869029645371701768486\"\r\n        \"4233451444539921785399887124876423879819137151750980993701221537181186961615307138054973881105869285360746\"\r\n        \"4293843336610854873221193752244154181847553547785437897461131054150639078934194244370787866848272246377514\"\r\n        \"8575101241471542868435003838582344503277995954897551425326431598533715832781446741269245666345499115240680\"\r\n        \"1104164133693262737098022980947313568045892568166272096137918227480273019135481918882868423992249518050812\"\r\n        \"184810638427734375\"},\r\n    {0x1.fffffffffffffp-813, chars_format::fixed, 865,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000036613691745498798542916288164948150953152854322244625804965642763658504719\"\r\n        \"8686563906418976277542240561761335483513619524412872357954985531828724907513234013413738059290743403536972\"\r\n        \"8466902889079843570799774249752847759638274303501961987402443074362373923230614276109947762211738570721492\"\r\n        \"8587686673221709746442387504488308363695107095570875794922262108301278157868388488741575733696544492755029\"\r\n        \"7150202482943085736870007677164689006555991909795102850652863197067431665562893482538491332690998230481360\"\r\n        \"2208328267386525474196045961894627136091785136332544192275836454960546038270963837765736847984499036101624\"\r\n        \"36962127685546875\"},\r\n    {0x1.fffffffffffffp-812, chars_format::fixed, 864,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000073227383490997597085832576329896301906305708644489251609931285527317009439\"\r\n        \"7373127812837952555084481123522670967027239048825744715909971063657449815026468026827476118581486807073945\"\r\n        \"6933805778159687141599548499505695519276548607003923974804886148724747846461228552219895524423477141442985\"\r\n        \"7175373346443419492884775008976616727390214191141751589844524216602556315736776977483151467393088985510059\"\r\n        \"4300404965886171473740015354329378013111983819590205701305726394134863331125786965076982665381996460962720\"\r\n        \"4416656534773050948392091923789254272183570272665088384551672909921092076541927675531473695968998072203248\"\r\n        \"7392425537109375\"},\r\n    {0x1.fffffffffffffp-811, chars_format::fixed, 863,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000146454766981995194171665152659792603812611417288978503219862571054634018879\"\r\n        \"4746255625675905110168962247045341934054478097651489431819942127314899630052936053654952237162973614147891\"\r\n        \"3867611556319374283199096999011391038553097214007847949609772297449495692922457104439791048846954282885971\"\r\n        \"4350746692886838985769550017953233454780428382283503179689048433205112631473553954966302934786177971020118\"\r\n        \"8600809931772342947480030708658756026223967639180411402611452788269726662251573930153965330763992921925440\"\r\n        \"8833313069546101896784183847578508544367140545330176769103345819842184153083855351062947391937996144406497\"\r\n        \"478485107421875\"},\r\n    {0x1.fffffffffffffp-810, chars_format::fixed, 862,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000292909533963990388343330305319585207625222834577957006439725142109268037758\"\r\n        \"9492511251351810220337924494090683868108956195302978863639884254629799260105872107309904474325947228295782\"\r\n        \"7735223112638748566398193998022782077106194428015695899219544594898991385844914208879582097693908565771942\"\r\n        \"8701493385773677971539100035906466909560856764567006359378096866410225262947107909932605869572355942040237\"\r\n        \"7201619863544685894960061417317512052447935278360822805222905576539453324503147860307930661527985843850881\"\r\n        \"7666626139092203793568367695157017088734281090660353538206691639684368306167710702125894783875992288812994\"\r\n        \"95697021484375\"},\r\n    {0x1.fffffffffffffp-809, chars_format::fixed, 861,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000585819067927980776686660610639170415250445669155914012879450284218536075517\"\r\n        \"8985022502703620440675848988181367736217912390605957727279768509259598520211744214619808948651894456591565\"\r\n        \"5470446225277497132796387996045564154212388856031391798439089189797982771689828417759164195387817131543885\"\r\n        \"7402986771547355943078200071812933819121713529134012718756193732820450525894215819865211739144711884080475\"\r\n        \"4403239727089371789920122834635024104895870556721645610445811153078906649006295720615861323055971687701763\"\r\n        \"5333252278184407587136735390314034177468562181320707076413383279368736612335421404251789567751984577625989\"\r\n        \"9139404296875\"},\r\n    {0x1.fffffffffffffp-808, chars_format::fixed, 860,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000001171638135855961553373321221278340830500891338311828025758900568437072151035\"\r\n        \"7970045005407240881351697976362735472435824781211915454559537018519197040423488429239617897303788913183131\"\r\n        \"0940892450554994265592775992091128308424777712062783596878178379595965543379656835518328390775634263087771\"\r\n        \"4805973543094711886156400143625867638243427058268025437512387465640901051788431639730423478289423768160950\"\r\n        \"8806479454178743579840245669270048209791741113443291220891622306157813298012591441231722646111943375403527\"\r\n        \"0666504556368815174273470780628068354937124362641414152826766558737473224670842808503579135503969155251979\"\r\n        \"827880859375\"},\r\n    {0x1.fffffffffffffp-807, chars_format::fixed, 859,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000002343276271711923106746642442556681661001782676623656051517801136874144302071\"\r\n        \"5940090010814481762703395952725470944871649562423830909119074037038394080846976858479235794607577826366262\"\r\n        \"1881784901109988531185551984182256616849555424125567193756356759191931086759313671036656781551268526175542\"\r\n        \"9611947086189423772312800287251735276486854116536050875024774931281802103576863279460846956578847536321901\"\r\n        \"7612958908357487159680491338540096419583482226886582441783244612315626596025182882463445292223886750807054\"\r\n        \"1333009112737630348546941561256136709874248725282828305653533117474946449341685617007158271007938310503959\"\r\n        \"65576171875\"},\r\n    {0x1.fffffffffffffp-806, chars_format::fixed, 858,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000004686552543423846213493284885113363322003565353247312103035602273748288604143\"\r\n        \"1880180021628963525406791905450941889743299124847661818238148074076788161693953716958471589215155652732524\"\r\n        \"3763569802219977062371103968364513233699110848251134387512713518383862173518627342073313563102537052351085\"\r\n        \"9223894172378847544625600574503470552973708233072101750049549862563604207153726558921693913157695072643803\"\r\n        \"5225917816714974319360982677080192839166964453773164883566489224631253192050365764926890584447773501614108\"\r\n        \"2666018225475260697093883122512273419748497450565656611307066234949892898683371234014316542015876621007919\"\r\n        \"3115234375\"},\r\n    {0x1.fffffffffffffp-805, chars_format::fixed, 857,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000009373105086847692426986569770226726644007130706494624206071204547496577208286\"\r\n        \"3760360043257927050813583810901883779486598249695323636476296148153576323387907433916943178430311305465048\"\r\n        \"7527139604439954124742207936729026467398221696502268775025427036767724347037254684146627126205074104702171\"\r\n        \"8447788344757695089251201149006941105947416466144203500099099725127208414307453117843387826315390145287607\"\r\n        \"0451835633429948638721965354160385678333928907546329767132978449262506384100731529853781168895547003228216\"\r\n        \"5332036450950521394187766245024546839496994901131313222614132469899785797366742468028633084031753242015838\"\r\n        \"623046875\"},\r\n    {0x1.fffffffffffffp-804, chars_format::fixed, 856,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000018746210173695384853973139540453453288014261412989248412142409094993154416572\"\r\n        \"7520720086515854101627167621803767558973196499390647272952592296307152646775814867833886356860622610930097\"\r\n        \"5054279208879908249484415873458052934796443393004537550050854073535448694074509368293254252410148209404343\"\r\n        \"6895576689515390178502402298013882211894832932288407000198199450254416828614906235686775652630780290575214\"\r\n        \"0903671266859897277443930708320771356667857815092659534265956898525012768201463059707562337791094006456433\"\r\n        \"0664072901901042788375532490049093678993989802262626445228264939799571594733484936057266168063506484031677\"\r\n        \"24609375\"},\r\n    {0x1.fffffffffffffp-803, chars_format::fixed, 855,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000037492420347390769707946279080906906576028522825978496824284818189986308833145\"\r\n        \"5041440173031708203254335243607535117946392998781294545905184592614305293551629735667772713721245221860195\"\r\n        \"0108558417759816498968831746916105869592886786009075100101708147070897388149018736586508504820296418808687\"\r\n        \"3791153379030780357004804596027764423789665864576814000396398900508833657229812471373551305261560581150428\"\r\n        \"1807342533719794554887861416641542713335715630185319068531913797050025536402926119415124675582188012912866\"\r\n        \"1328145803802085576751064980098187357987979604525252890456529879599143189466969872114532336127012968063354\"\r\n        \"4921875\"},\r\n    {0x1.fffffffffffffp-802, chars_format::fixed, 854,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000074984840694781539415892558161813813152057045651956993648569636379972617666291\"\r\n        \"0082880346063416406508670487215070235892785997562589091810369185228610587103259471335545427442490443720390\"\r\n        \"0217116835519632997937663493832211739185773572018150200203416294141794776298037473173017009640592837617374\"\r\n        \"7582306758061560714009609192055528847579331729153628000792797801017667314459624942747102610523121162300856\"\r\n        \"3614685067439589109775722833283085426671431260370638137063827594100051072805852238830249351164376025825732\"\r\n        \"2656291607604171153502129960196374715975959209050505780913059759198286378933939744229064672254025936126708\"\r\n        \"984375\"},\r\n    {0x1.fffffffffffffp-801, chars_format::fixed, 853,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000149969681389563078831785116323627626304114091303913987297139272759945235332582\"\r\n        \"0165760692126832813017340974430140471785571995125178183620738370457221174206518942671090854884980887440780\"\r\n        \"0434233671039265995875326987664423478371547144036300400406832588283589552596074946346034019281185675234749\"\r\n        \"5164613516123121428019218384111057695158663458307256001585595602035334628919249885494205221046242324601712\"\r\n        \"7229370134879178219551445666566170853342862520741276274127655188200102145611704477660498702328752051651464\"\r\n        \"5312583215208342307004259920392749431951918418101011561826119518396572757867879488458129344508051872253417\"\r\n        \"96875\"},\r\n    {0x1.fffffffffffffp-800, chars_format::fixed, 852,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000299939362779126157663570232647255252608228182607827974594278545519890470665164\"\r\n        \"0331521384253665626034681948860280943571143990250356367241476740914442348413037885342181709769961774881560\"\r\n        \"0868467342078531991750653975328846956743094288072600800813665176567179105192149892692068038562371350469499\"\r\n        \"0329227032246242856038436768222115390317326916614512003171191204070669257838499770988410442092484649203425\"\r\n        \"4458740269758356439102891333132341706685725041482552548255310376400204291223408955320997404657504103302929\"\r\n        \"0625166430416684614008519840785498863903836836202023123652239036793145515735758976916258689016103744506835\"\r\n        \"9375\"},\r\n    {0x1.fffffffffffffp-799, chars_format::fixed, 851,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000599878725558252315327140465294510505216456365215655949188557091039780941330328\"\r\n        \"0663042768507331252069363897720561887142287980500712734482953481828884696826075770684363419539923549763120\"\r\n        \"1736934684157063983501307950657693913486188576145201601627330353134358210384299785384136077124742700938998\"\r\n        \"0658454064492485712076873536444230780634653833229024006342382408141338515676999541976820884184969298406850\"\r\n        \"8917480539516712878205782666264683413371450082965105096510620752800408582446817910641994809315008206605858\"\r\n        \"1250332860833369228017039681570997727807673672404046247304478073586291031471517953832517378032207489013671\"\r\n        \"875\"},\r\n    {0x1.fffffffffffffp-798, chars_format::fixed, 850,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000001199757451116504630654280930589021010432912730431311898377114182079561882660656\"\r\n        \"1326085537014662504138727795441123774284575961001425468965906963657769393652151541368726839079847099526240\"\r\n        \"3473869368314127967002615901315387826972377152290403203254660706268716420768599570768272154249485401877996\"\r\n        \"1316908128984971424153747072888461561269307666458048012684764816282677031353999083953641768369938596813701\"\r\n        \"7834961079033425756411565332529366826742900165930210193021241505600817164893635821283989618630016413211716\"\r\n        \"2500665721666738456034079363141995455615347344808092494608956147172582062943035907665034756064414978027343\"\r\n        \"75\"},\r\n    {0x1.fffffffffffffp-797, chars_format::fixed, 849,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000002399514902233009261308561861178042020865825460862623796754228364159123765321312\"\r\n        \"2652171074029325008277455590882247548569151922002850937931813927315538787304303082737453678159694199052480\"\r\n        \"6947738736628255934005231802630775653944754304580806406509321412537432841537199141536544308498970803755992\"\r\n        \"2633816257969942848307494145776923122538615332916096025369529632565354062707998167907283536739877193627403\"\r\n        \"5669922158066851512823130665058733653485800331860420386042483011201634329787271642567979237260032826423432\"\r\n        \"5001331443333476912068158726283990911230694689616184989217912294345164125886071815330069512128829956054687\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-796, chars_format::fixed, 848,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000004799029804466018522617123722356084041731650921725247593508456728318247530642624\"\r\n        \"5304342148058650016554911181764495097138303844005701875863627854631077574608606165474907356319388398104961\"\r\n        \"3895477473256511868010463605261551307889508609161612813018642825074865683074398283073088616997941607511984\"\r\n        \"5267632515939885696614988291553846245077230665832192050739059265130708125415996335814567073479754387254807\"\r\n        \"1339844316133703025646261330117467306971600663720840772084966022403268659574543285135958474520065652846865\"\r\n        \"000266288666695382413631745256798182246138937923236997843582458869032825177214363066013902425765991210937\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-795, chars_format::fixed, 847,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000009598059608932037045234247444712168083463301843450495187016913456636495061285249\"\r\n        \"0608684296117300033109822363528990194276607688011403751727255709262155149217212330949814712638776796209922\"\r\n        \"7790954946513023736020927210523102615779017218323225626037285650149731366148796566146177233995883215023969\"\r\n        \"0535265031879771393229976583107692490154461331664384101478118530261416250831992671629134146959508774509614\"\r\n        \"2679688632267406051292522660234934613943201327441681544169932044806537319149086570271916949040131305693730\"\r\n        \"00053257733339076482726349051359636449227787584647399568716491773806565035442872613202780485153198242187\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-794, chars_format::fixed, 846,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000019196119217864074090468494889424336166926603686900990374033826913272990122570498\"\r\n        \"1217368592234600066219644727057980388553215376022807503454511418524310298434424661899629425277553592419845\"\r\n        \"5581909893026047472041854421046205231558034436646451252074571300299462732297593132292354467991766430047938\"\r\n        \"1070530063759542786459953166215384980308922663328768202956237060522832501663985343258268293919017549019228\"\r\n        \"5359377264534812102585045320469869227886402654883363088339864089613074638298173140543833898080262611387460\"\r\n        \"00106515466678152965452698102719272898455575169294799137432983547613130070885745226405560970306396484375\"},\r\n    {0x1.fffffffffffffp-793, chars_format::fixed, 845,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000038392238435728148180936989778848672333853207373801980748067653826545980245140996\"\r\n        \"2434737184469200132439289454115960777106430752045615006909022837048620596868849323799258850555107184839691\"\r\n        \"1163819786052094944083708842092410463116068873292902504149142600598925464595186264584708935983532860095876\"\r\n        \"2141060127519085572919906332430769960617845326657536405912474121045665003327970686516536587838035098038457\"\r\n        \"0718754529069624205170090640939738455772805309766726176679728179226149276596346281087667796160525222774920\"\r\n        \"0021303093335630593090539620543854579691115033858959827486596709522626014177149045281112194061279296875\"},\r\n    {0x1.fffffffffffffp-792, chars_format::fixed, 844,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000076784476871456296361873979557697344667706414747603961496135307653091960490281992\"\r\n        \"4869474368938400264878578908231921554212861504091230013818045674097241193737698647598517701110214369679382\"\r\n        \"2327639572104189888167417684184820926232137746585805008298285201197850929190372529169417871967065720191752\"\r\n        \"4282120255038171145839812664861539921235690653315072811824948242091330006655941373033073175676070196076914\"\r\n        \"1437509058139248410340181281879476911545610619533452353359456358452298553192692562175335592321050445549840\"\r\n        \"004260618667126118618107924108770915938223006771791965497319341904525202835429809056222438812255859375\"},\r\n    {0x1.fffffffffffffp-791, chars_format::fixed, 843,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000153568953742912592723747959115394689335412829495207922992270615306183920980563984\"\r\n        \"9738948737876800529757157816463843108425723008182460027636091348194482387475397295197035402220428739358764\"\r\n        \"4655279144208379776334835368369641852464275493171610016596570402395701858380745058338835743934131440383504\"\r\n        \"8564240510076342291679625329723079842471381306630145623649896484182660013311882746066146351352140392153828\"\r\n        \"2875018116278496820680362563758953823091221239066904706718912716904597106385385124350671184642100891099680\"\r\n        \"00852123733425223723621584821754183187644601354358393099463868380905040567085961811244487762451171875\"},\r\n    {0x1.fffffffffffffp-790, chars_format::fixed, 842,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000307137907485825185447495918230789378670825658990415845984541230612367841961127969\"\r\n        \"9477897475753601059514315632927686216851446016364920055272182696388964774950794590394070804440857478717528\"\r\n        \"9310558288416759552669670736739283704928550986343220033193140804791403716761490116677671487868262880767009\"\r\n        \"7128481020152684583359250659446159684942762613260291247299792968365320026623765492132292702704280784307656\"\r\n        \"5750036232556993641360725127517907646182442478133809413437825433809194212770770248701342369284201782199360\"\r\n        \"0170424746685044744724316964350836637528920270871678619892773676181008113417192362248897552490234375\"},\r\n    {0x1.fffffffffffffp-789, chars_format::fixed, 841,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000614275814971650370894991836461578757341651317980831691969082461224735683922255939\"\r\n        \"8955794951507202119028631265855372433702892032729840110544365392777929549901589180788141608881714957435057\"\r\n        \"8621116576833519105339341473478567409857101972686440066386281609582807433522980233355342975736525761534019\"\r\n        \"4256962040305369166718501318892319369885525226520582494599585936730640053247530984264585405408561568615313\"\r\n        \"1500072465113987282721450255035815292364884956267618826875650867618388425541540497402684738568403564398720\"\r\n        \"034084949337008948944863392870167327505784054174335723978554735236201622683438472449779510498046875\"},\r\n    {0x1.fffffffffffffp-788, chars_format::fixed, 840,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000001228551629943300741789983672923157514683302635961663383938164922449471367844511879\"\r\n        \"7911589903014404238057262531710744867405784065459680221088730785555859099803178361576283217763429914870115\"\r\n        \"7242233153667038210678682946957134819714203945372880132772563219165614867045960466710685951473051523068038\"\r\n        \"8513924080610738333437002637784638739771050453041164989199171873461280106495061968529170810817123137230626\"\r\n        \"3000144930227974565442900510071630584729769912535237653751301735236776851083080994805369477136807128797440\"\r\n        \"06816989867401789788972678574033465501156810834867144795710947047240324536687694489955902099609375\"},\r\n    {0x1.fffffffffffffp-787, chars_format::fixed, 839,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000002457103259886601483579967345846315029366605271923326767876329844898942735689023759\"\r\n        \"5823179806028808476114525063421489734811568130919360442177461571111718199606356723152566435526859829740231\"\r\n        \"4484466307334076421357365893914269639428407890745760265545126438331229734091920933421371902946103046136077\"\r\n        \"7027848161221476666874005275569277479542100906082329978398343746922560212990123937058341621634246274461252\"\r\n        \"6000289860455949130885801020143261169459539825070475307502603470473553702166161989610738954273614257594880\"\r\n        \"1363397973480357957794535714806693100231362166973428959142189409448064907337538897991180419921875\"},\r\n    {0x1.fffffffffffffp-786, chars_format::fixed, 838,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000004914206519773202967159934691692630058733210543846653535752659689797885471378047519\"\r\n        \"1646359612057616952229050126842979469623136261838720884354923142223436399212713446305132871053719659480462\"\r\n        \"8968932614668152842714731787828539278856815781491520531090252876662459468183841866842743805892206092272155\"\r\n        \"4055696322442953333748010551138554959084201812164659956796687493845120425980247874116683243268492548922505\"\r\n        \"2000579720911898261771602040286522338919079650140950615005206940947107404332323979221477908547228515189760\"\r\n        \"272679594696071591558907142961338620046272433394685791828437881889612981467507779598236083984375\"},\r\n    {0x1.fffffffffffffp-785, chars_format::fixed, 837,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000009828413039546405934319869383385260117466421087693307071505319379595770942756095038\"\r\n        \"3292719224115233904458100253685958939246272523677441768709846284446872798425426892610265742107439318960925\"\r\n        \"7937865229336305685429463575657078557713631562983041062180505753324918936367683733685487611784412184544310\"\r\n        \"8111392644885906667496021102277109918168403624329319913593374987690240851960495748233366486536985097845010\"\r\n        \"4001159441823796523543204080573044677838159300281901230010413881894214808664647958442955817094457030379520\"\r\n        \"54535918939214318311781428592267724009254486678937158365687576377922596293501555919647216796875\"},\r\n    {0x1.fffffffffffffp-784, chars_format::fixed, 836,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000019656826079092811868639738766770520234932842175386614143010638759191541885512190076\"\r\n        \"6585438448230467808916200507371917878492545047354883537419692568893745596850853785220531484214878637921851\"\r\n        \"5875730458672611370858927151314157115427263125966082124361011506649837872735367467370975223568824369088621\"\r\n        \"6222785289771813334992042204554219836336807248658639827186749975380481703920991496466732973073970195690020\"\r\n        \"8002318883647593047086408161146089355676318600563802460020827763788429617329295916885911634188914060759041\"\r\n        \"0907183787842863662356285718453544801850897335787431673137515275584519258700311183929443359375\"},\r\n    {0x1.fffffffffffffp-783, chars_format::fixed, 835,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000039313652158185623737279477533541040469865684350773228286021277518383083771024380153\"\r\n        \"3170876896460935617832401014743835756985090094709767074839385137787491193701707570441062968429757275843703\"\r\n        \"1751460917345222741717854302628314230854526251932164248722023013299675745470734934741950447137648738177243\"\r\n        \"2445570579543626669984084409108439672673614497317279654373499950760963407841982992933465946147940391380041\"\r\n        \"6004637767295186094172816322292178711352637201127604920041655527576859234658591833771823268377828121518082\"\r\n        \"181436757568572732471257143690708960370179467157486334627503055116903851740062236785888671875\"},\r\n    {0x1.fffffffffffffp-782, chars_format::fixed, 834,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000078627304316371247474558955067082080939731368701546456572042555036766167542048760306\"\r\n        \"6341753792921871235664802029487671513970180189419534149678770275574982387403415140882125936859514551687406\"\r\n        \"3502921834690445483435708605256628461709052503864328497444046026599351490941469869483900894275297476354486\"\r\n        \"4891141159087253339968168818216879345347228994634559308746999901521926815683965985866931892295880782760083\"\r\n        \"2009275534590372188345632644584357422705274402255209840083311055153718469317183667543646536755656243036164\"\r\n        \"36287351513714546494251428738141792074035893431497266925500611023380770348012447357177734375\"},\r\n    {0x1.fffffffffffffp-781, chars_format::fixed, 833,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000157254608632742494949117910134164161879462737403092913144085110073532335084097520613\"\r\n        \"2683507585843742471329604058975343027940360378839068299357540551149964774806830281764251873719029103374812\"\r\n        \"7005843669380890966871417210513256923418105007728656994888092053198702981882939738967801788550594952708972\"\r\n        \"9782282318174506679936337636433758690694457989269118617493999803043853631367931971733863784591761565520166\"\r\n        \"4018551069180744376691265289168714845410548804510419680166622110307436938634367335087293073511312486072328\"\r\n        \"7257470302742909298850285747628358414807178686299453385100122204676154069602489471435546875\"},\r\n    {0x1.fffffffffffffp-780, chars_format::fixed, 832,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000314509217265484989898235820268328323758925474806185826288170220147064670168195041226\"\r\n        \"5367015171687484942659208117950686055880720757678136598715081102299929549613660563528503747438058206749625\"\r\n        \"4011687338761781933742834421026513846836210015457313989776184106397405963765879477935603577101189905417945\"\r\n        \"9564564636349013359872675272867517381388915978538237234987999606087707262735863943467727569183523131040332\"\r\n        \"8037102138361488753382530578337429690821097609020839360333244220614873877268734670174586147022624972144657\"\r\n        \"451494060548581859770057149525671682961435737259890677020024440935230813920497894287109375\"},\r\n    {0x1.fffffffffffffp-779, chars_format::fixed, 831,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000629018434530969979796471640536656647517850949612371652576340440294129340336390082453\"\r\n        \"0734030343374969885318416235901372111761441515356273197430162204599859099227321127057007494876116413499250\"\r\n        \"8023374677523563867485668842053027693672420030914627979552368212794811927531758955871207154202379810835891\"\r\n        \"9129129272698026719745350545735034762777831957076474469975999212175414525471727886935455138367046262080665\"\r\n        \"6074204276722977506765061156674859381642195218041678720666488441229747754537469340349172294045249944289314\"\r\n        \"90298812109716371954011429905134336592287147451978135404004888187046162784099578857421875\"},\r\n    {0x1.fffffffffffffp-778, chars_format::fixed, 830,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000001258036869061939959592943281073313295035701899224743305152680880588258680672780164906\"\r\n        \"1468060686749939770636832471802744223522883030712546394860324409199718198454642254114014989752232826998501\"\r\n        \"6046749355047127734971337684106055387344840061829255959104736425589623855063517911742414308404759621671783\"\r\n        \"8258258545396053439490701091470069525555663914152948939951998424350829050943455773870910276734092524161331\"\r\n        \"2148408553445955013530122313349718763284390436083357441332976882459495509074938680698344588090499888578629\"\r\n        \"8059762421943274390802285981026867318457429490395627080800977637409232556819915771484375\"},\r\n    {0x1.fffffffffffffp-777, chars_format::fixed, 829,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000002516073738123879919185886562146626590071403798449486610305361761176517361345560329812\"\r\n        \"2936121373499879541273664943605488447045766061425092789720648818399436396909284508228029979504465653997003\"\r\n        \"2093498710094255469942675368212110774689680123658511918209472851179247710127035823484828616809519243343567\"\r\n        \"6516517090792106878981402182940139051111327828305897879903996848701658101886911547741820553468185048322662\"\r\n        \"4296817106891910027060244626699437526568780872166714882665953764918991018149877361396689176180999777157259\"\r\n        \"611952484388654878160457196205373463691485898079125416160195527481846511363983154296875\"},\r\n    {0x1.fffffffffffffp-776, chars_format::fixed, 828,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000005032147476247759838371773124293253180142807596898973220610723522353034722691120659624\"\r\n        \"5872242746999759082547329887210976894091532122850185579441297636798872793818569016456059959008931307994006\"\r\n        \"4186997420188510939885350736424221549379360247317023836418945702358495420254071646969657233619038486687135\"\r\n        \"3033034181584213757962804365880278102222655656611795759807993697403316203773823095483641106936370096645324\"\r\n        \"8593634213783820054120489253398875053137561744333429765331907529837982036299754722793378352361999554314519\"\r\n        \"22390496877730975632091439241074692738297179615825083232039105496369302272796630859375\"},\r\n    {0x1.fffffffffffffp-775, chars_format::fixed, 827,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000010064294952495519676743546248586506360285615193797946441221447044706069445382241319249\"\r\n        \"1744485493999518165094659774421953788183064245700371158882595273597745587637138032912119918017862615988012\"\r\n        \"8373994840377021879770701472848443098758720494634047672837891404716990840508143293939314467238076973374270\"\r\n        \"6066068363168427515925608731760556204445311313223591519615987394806632407547646190967282213872740193290649\"\r\n        \"7187268427567640108240978506797750106275123488666859530663815059675964072599509445586756704723999108629038\"\r\n        \"4478099375546195126418287848214938547659435923165016646407821099273860454559326171875\"},\r\n    {0x1.fffffffffffffp-774, chars_format::fixed, 826,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000020128589904991039353487092497173012720571230387595892882442894089412138890764482638498\"\r\n        \"3488970987999036330189319548843907576366128491400742317765190547195491175274276065824239836035725231976025\"\r\n        \"6747989680754043759541402945696886197517440989268095345675782809433981681016286587878628934476153946748541\"\r\n        \"2132136726336855031851217463521112408890622626447183039231974789613264815095292381934564427745480386581299\"\r\n        \"4374536855135280216481957013595500212550246977333719061327630119351928145199018891173513409447998217258076\"\r\n        \"895619875109239025283657569642987709531887184633003329281564219854772090911865234375\"},\r\n    {0x1.fffffffffffffp-773, chars_format::fixed, 825,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000040257179809982078706974184994346025441142460775191785764885788178824277781528965276996\"\r\n        \"6977941975998072660378639097687815152732256982801484635530381094390982350548552131648479672071450463952051\"\r\n        \"3495979361508087519082805891393772395034881978536190691351565618867963362032573175757257868952307893497082\"\r\n        \"4264273452673710063702434927042224817781245252894366078463949579226529630190584763869128855490960773162598\"\r\n        \"8749073710270560432963914027191000425100493954667438122655260238703856290398037782347026818895996434516153\"\r\n        \"79123975021847805056731513928597541906377436926600665856312843970954418182373046875\"},\r\n    {0x1.fffffffffffffp-772, chars_format::fixed, 824,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000080514359619964157413948369988692050882284921550383571529771576357648555563057930553993\"\r\n        \"3955883951996145320757278195375630305464513965602969271060762188781964701097104263296959344142900927904102\"\r\n        \"6991958723016175038165611782787544790069763957072381382703131237735926724065146351514515737904615786994164\"\r\n        \"8528546905347420127404869854084449635562490505788732156927899158453059260381169527738257710981921546325197\"\r\n        \"7498147420541120865927828054382000850200987909334876245310520477407712580796075564694053637791992869032307\"\r\n        \"5824795004369561011346302785719508381275487385320133171262568794190883636474609375\"},\r\n    {0x1.fffffffffffffp-771, chars_format::fixed, 823,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000161028719239928314827896739977384101764569843100767143059543152715297111126115861107986\"\r\n        \"7911767903992290641514556390751260610929027931205938542121524377563929402194208526593918688285801855808205\"\r\n        \"3983917446032350076331223565575089580139527914144762765406262475471853448130292703029031475809231573988329\"\r\n        \"7057093810694840254809739708168899271124981011577464313855798316906118520762339055476515421963843092650395\"\r\n        \"4996294841082241731855656108764001700401975818669752490621040954815425161592151129388107275583985738064615\"\r\n        \"164959000873912202269260557143901676255097477064026634252513758838176727294921875\"},\r\n    {0x1.fffffffffffffp-770, chars_format::fixed, 822,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000322057438479856629655793479954768203529139686201534286119086305430594222252231722215973\"\r\n        \"5823535807984581283029112781502521221858055862411877084243048755127858804388417053187837376571603711616410\"\r\n        \"7967834892064700152662447131150179160279055828289525530812524950943706896260585406058062951618463147976659\"\r\n        \"4114187621389680509619479416337798542249962023154928627711596633812237041524678110953030843927686185300790\"\r\n        \"9992589682164483463711312217528003400803951637339504981242081909630850323184302258776214551167971476129230\"\r\n        \"32991800174782440453852111428780335251019495412805326850502751767635345458984375\"},\r\n    {0x1.fffffffffffffp-769, chars_format::fixed, 821,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000644114876959713259311586959909536407058279372403068572238172610861188444504463444431947\"\r\n        \"1647071615969162566058225563005042443716111724823754168486097510255717608776834106375674753143207423232821\"\r\n        \"5935669784129400305324894262300358320558111656579051061625049901887413792521170812116125903236926295953318\"\r\n        \"8228375242779361019238958832675597084499924046309857255423193267624474083049356221906061687855372370601581\"\r\n        \"9985179364328966927422624435056006801607903274679009962484163819261700646368604517552429102335942952258460\"\r\n        \"6598360034956488090770422285756067050203899082561065370100550353527069091796875\"},\r\n    {0x1.fffffffffffffp-768, chars_format::fixed, 820,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000001288229753919426518623173919819072814116558744806137144476345221722376889008926888863894\"\r\n        \"3294143231938325132116451126010084887432223449647508336972195020511435217553668212751349506286414846465643\"\r\n        \"1871339568258800610649788524600716641116223313158102123250099803774827585042341624232251806473852591906637\"\r\n        \"6456750485558722038477917665351194168999848092619714510846386535248948166098712443812123375710744741203163\"\r\n        \"9970358728657933854845248870112013603215806549358019924968327638523401292737209035104858204671885904516921\"\r\n        \"319672006991297618154084457151213410040779816512213074020110070705413818359375\"},\r\n    {0x1.fffffffffffffp-767, chars_format::fixed, 819,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000002576459507838853037246347839638145628233117489612274288952690443444753778017853777727788\"\r\n        \"6588286463876650264232902252020169774864446899295016673944390041022870435107336425502699012572829692931286\"\r\n        \"3742679136517601221299577049201433282232446626316204246500199607549655170084683248464503612947705183813275\"\r\n        \"2913500971117444076955835330702388337999696185239429021692773070497896332197424887624246751421489482406327\"\r\n        \"9940717457315867709690497740224027206431613098716039849936655277046802585474418070209716409343771809033842\"\r\n        \"63934401398259523630816891430242682008155963302442614804022014141082763671875\"},\r\n    {0x1.fffffffffffffp-766, chars_format::fixed, 818,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000005152919015677706074492695679276291256466234979224548577905380886889507556035707555455577\"\r\n        \"3176572927753300528465804504040339549728893798590033347888780082045740870214672851005398025145659385862572\"\r\n        \"7485358273035202442599154098402866564464893252632408493000399215099310340169366496929007225895410367626550\"\r\n        \"5827001942234888153911670661404776675999392370478858043385546140995792664394849775248493502842978964812655\"\r\n        \"9881434914631735419380995480448054412863226197432079699873310554093605170948836140419432818687543618067685\"\r\n        \"2786880279651904726163378286048536401631192660488522960804402828216552734375\"},\r\n    {0x1.fffffffffffffp-765, chars_format::fixed, 817,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000010305838031355412148985391358552582512932469958449097155810761773779015112071415110911154\"\r\n        \"6353145855506601056931609008080679099457787597180066695777560164091481740429345702010796050291318771725145\"\r\n        \"4970716546070404885198308196805733128929786505264816986000798430198620680338732993858014451790820735253101\"\r\n        \"1654003884469776307823341322809553351998784740957716086771092281991585328789699550496987005685957929625311\"\r\n        \"9762869829263470838761990960896108825726452394864159399746621108187210341897672280838865637375087236135370\"\r\n        \"557376055930380945232675657209707280326238532097704592160880565643310546875\"},\r\n    {0x1.fffffffffffffp-764, chars_format::fixed, 816,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000020611676062710824297970782717105165025864939916898194311621523547558030224142830221822309\"\r\n        \"2706291711013202113863218016161358198915575194360133391555120328182963480858691404021592100582637543450290\"\r\n        \"9941433092140809770396616393611466257859573010529633972001596860397241360677465987716028903581641470506202\"\r\n        \"3308007768939552615646682645619106703997569481915432173542184563983170657579399100993974011371915859250623\"\r\n        \"9525739658526941677523981921792217651452904789728318799493242216374420683795344561677731274750174472270741\"\r\n        \"11475211186076189046535131441941456065247706419540918432176113128662109375\"},\r\n    {0x1.fffffffffffffp-763, chars_format::fixed, 815,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000041223352125421648595941565434210330051729879833796388623243047095116060448285660443644618\"\r\n        \"5412583422026404227726436032322716397831150388720266783110240656365926961717382808043184201165275086900581\"\r\n        \"9882866184281619540793232787222932515719146021059267944003193720794482721354931975432057807163282941012404\"\r\n        \"6616015537879105231293365291238213407995138963830864347084369127966341315158798201987948022743831718501247\"\r\n        \"9051479317053883355047963843584435302905809579456637598986484432748841367590689123355462549500348944541482\"\r\n        \"2295042237215237809307026288388291213049541283908183686435222625732421875\"},\r\n    {0x1.fffffffffffffp-762, chars_format::fixed, 814,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000082446704250843297191883130868420660103459759667592777246486094190232120896571320887289237\"\r\n        \"0825166844052808455452872064645432795662300777440533566220481312731853923434765616086368402330550173801163\"\r\n        \"9765732368563239081586465574445865031438292042118535888006387441588965442709863950864115614326565882024809\"\r\n        \"3232031075758210462586730582476426815990277927661728694168738255932682630317596403975896045487663437002495\"\r\n        \"8102958634107766710095927687168870605811619158913275197972968865497682735181378246710925099000697889082964\"\r\n        \"459008447443047561861405257677658242609908256781636737287044525146484375\"},\r\n    {0x1.fffffffffffffp-761, chars_format::fixed, 813,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000164893408501686594383766261736841320206919519335185554492972188380464241793142641774578474\"\r\n        \"1650333688105616910905744129290865591324601554881067132440962625463707846869531232172736804661100347602327\"\r\n        \"9531464737126478163172931148891730062876584084237071776012774883177930885419727901728231228653131764049618\"\r\n        \"6464062151516420925173461164952853631980555855323457388337476511865365260635192807951792090975326874004991\"\r\n        \"6205917268215533420191855374337741211623238317826550395945937730995365470362756493421850198001395778165928\"\r\n        \"91801689488609512372281051535531648521981651356327347457408905029296875\"},\r\n    {0x1.fffffffffffffp-760, chars_format::fixed, 812,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000329786817003373188767532523473682640413839038670371108985944376760928483586285283549156948\"\r\n        \"3300667376211233821811488258581731182649203109762134264881925250927415693739062464345473609322200695204655\"\r\n        \"9062929474252956326345862297783460125753168168474143552025549766355861770839455803456462457306263528099237\"\r\n        \"2928124303032841850346922329905707263961111710646914776674953023730730521270385615903584181950653748009983\"\r\n        \"2411834536431066840383710748675482423246476635653100791891875461990730940725512986843700396002791556331857\"\r\n        \"8360337897721902474456210307106329704396330271265469491481781005859375\"},\r\n    {0x1.fffffffffffffp-759, chars_format::fixed, 811,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000659573634006746377535065046947365280827678077340742217971888753521856967172570567098313896\"\r\n        \"6601334752422467643622976517163462365298406219524268529763850501854831387478124928690947218644401390409311\"\r\n        \"8125858948505912652691724595566920251506336336948287104051099532711723541678911606912924914612527056198474\"\r\n        \"5856248606065683700693844659811414527922223421293829553349906047461461042540771231807168363901307496019966\"\r\n        \"4823669072862133680767421497350964846492953271306201583783750923981461881451025973687400792005583112663715\"\r\n        \"672067579544380494891242061421265940879266054253093898296356201171875\"},\r\n    {0x1.fffffffffffffp-758, chars_format::fixed, 810,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000001319147268013492755070130093894730561655356154681484435943777507043713934345141134196627793\"\r\n        \"3202669504844935287245953034326924730596812439048537059527701003709662774956249857381894437288802780818623\"\r\n        \"6251717897011825305383449191133840503012672673896574208102199065423447083357823213825849829225054112396949\"\r\n        \"1712497212131367401387689319622829055844446842587659106699812094922922085081542463614336727802614992039932\"\r\n        \"9647338145724267361534842994701929692985906542612403167567501847962923762902051947374801584011166225327431\"\r\n        \"34413515908876098978248412284253188175853210850618779659271240234375\"},\r\n    {0x1.fffffffffffffp-757, chars_format::fixed, 809,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000002638294536026985510140260187789461123310712309362968871887555014087427868690282268393255586\"\r\n        \"6405339009689870574491906068653849461193624878097074119055402007419325549912499714763788874577605561637247\"\r\n        \"2503435794023650610766898382267681006025345347793148416204398130846894166715646427651699658450108224793898\"\r\n        \"3424994424262734802775378639245658111688893685175318213399624189845844170163084927228673455605229984079865\"\r\n        \"9294676291448534723069685989403859385971813085224806335135003695925847525804103894749603168022332450654862\"\r\n        \"6882703181775219795649682456850637635170642170123755931854248046875\"},\r\n    {0x1.fffffffffffffp-756, chars_format::fixed, 808,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000005276589072053971020280520375578922246621424618725937743775110028174855737380564536786511173\"\r\n        \"2810678019379741148983812137307698922387249756194148238110804014838651099824999429527577749155211123274494\"\r\n        \"5006871588047301221533796764535362012050690695586296832408796261693788333431292855303399316900216449587796\"\r\n        \"6849988848525469605550757278491316223377787370350636426799248379691688340326169854457346911210459968159731\"\r\n        \"8589352582897069446139371978807718771943626170449612670270007391851695051608207789499206336044664901309725\"\r\n        \"376540636355043959129936491370127527034128434024751186370849609375\"},\r\n    {0x1.fffffffffffffp-755, chars_format::fixed, 807,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000010553178144107942040561040751157844493242849237451875487550220056349711474761129073573022346\"\r\n        \"5621356038759482297967624274615397844774499512388296476221608029677302199649998859055155498310422246548989\"\r\n        \"0013743176094602443067593529070724024101381391172593664817592523387576666862585710606798633800432899175593\"\r\n        \"3699977697050939211101514556982632446755574740701272853598496759383376680652339708914693822420919936319463\"\r\n        \"7178705165794138892278743957615437543887252340899225340540014783703390103216415578998412672089329802619450\"\r\n        \"75308127271008791825987298274025505406825686804950237274169921875\"},\r\n    {0x1.fffffffffffffp-754, chars_format::fixed, 806,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000021106356288215884081122081502315688986485698474903750975100440112699422949522258147146044693\"\r\n        \"1242712077518964595935248549230795689548999024776592952443216059354604399299997718110310996620844493097978\"\r\n        \"0027486352189204886135187058141448048202762782345187329635185046775153333725171421213597267600865798351186\"\r\n        \"7399955394101878422203029113965264893511149481402545707196993518766753361304679417829387644841839872638927\"\r\n        \"4357410331588277784557487915230875087774504681798450681080029567406780206432831157996825344178659605238901\"\r\n        \"5061625454201758365197459654805101081365137360990047454833984375\"},\r\n    {0x1.fffffffffffffp-753, chars_format::fixed, 805,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000042212712576431768162244163004631377972971396949807501950200880225398845899044516294292089386\"\r\n        \"2485424155037929191870497098461591379097998049553185904886432118709208798599995436220621993241688986195956\"\r\n        \"0054972704378409772270374116282896096405525564690374659270370093550306667450342842427194535201731596702373\"\r\n        \"4799910788203756844406058227930529787022298962805091414393987037533506722609358835658775289683679745277854\"\r\n        \"8714820663176555569114975830461750175549009363596901362160059134813560412865662315993650688357319210477803\"\r\n        \"012325090840351673039491930961020216273027472198009490966796875\"},\r\n    {0x1.fffffffffffffp-752, chars_format::fixed, 804,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000084425425152863536324488326009262755945942793899615003900401760450797691798089032588584178772\"\r\n        \"4970848310075858383740994196923182758195996099106371809772864237418417597199990872441243986483377972391912\"\r\n        \"0109945408756819544540748232565792192811051129380749318540740187100613334900685684854389070403463193404746\"\r\n        \"9599821576407513688812116455861059574044597925610182828787974075067013445218717671317550579367359490555709\"\r\n        \"7429641326353111138229951660923500351098018727193802724320118269627120825731324631987301376714638420955606\"\r\n        \"02465018168070334607898386192204043254605494439601898193359375\"},\r\n    {0x1.fffffffffffffp-751, chars_format::fixed, 803,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000168850850305727072648976652018525511891885587799230007800803520901595383596178065177168357544\"\r\n        \"9941696620151716767481988393846365516391992198212743619545728474836835194399981744882487972966755944783824\"\r\n        \"0219890817513639089081496465131584385622102258761498637081480374201226669801371369708778140806926386809493\"\r\n        \"9199643152815027377624232911722119148089195851220365657575948150134026890437435342635101158734718981111419\"\r\n        \"4859282652706222276459903321847000702196037454387605448640236539254241651462649263974602753429276841911212\"\r\n        \"0493003633614066921579677238440808650921098887920379638671875\"},\r\n    {0x1.fffffffffffffp-750, chars_format::fixed, 802,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000337701700611454145297953304037051023783771175598460015601607041803190767192356130354336715089\"\r\n        \"9883393240303433534963976787692731032783984396425487239091456949673670388799963489764975945933511889567648\"\r\n        \"0439781635027278178162992930263168771244204517522997274162960748402453339602742739417556281613852773618987\"\r\n        \"8399286305630054755248465823444238296178391702440731315151896300268053780874870685270202317469437962222838\"\r\n        \"9718565305412444552919806643694001404392074908775210897280473078508483302925298527949205506858553683822424\"\r\n        \"098600726722813384315935447688161730184219777584075927734375\"},\r\n    {0x1.fffffffffffffp-749, chars_format::fixed, 801,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000675403401222908290595906608074102047567542351196920031203214083606381534384712260708673430179\"\r\n        \"9766786480606867069927953575385462065567968792850974478182913899347340777599926979529951891867023779135296\"\r\n        \"0879563270054556356325985860526337542488409035045994548325921496804906679205485478835112563227705547237975\"\r\n        \"6798572611260109510496931646888476592356783404881462630303792600536107561749741370540404634938875924445677\"\r\n        \"9437130610824889105839613287388002808784149817550421794560946157016966605850597055898411013717107367644848\"\r\n        \"19720145344562676863187089537632346036843955516815185546875\"},\r\n    {0x1.fffffffffffffp-748, chars_format::fixed, 800,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000001350806802445816581191813216148204095135084702393840062406428167212763068769424521417346860359\"\r\n        \"9533572961213734139855907150770924131135937585701948956365827798694681555199853959059903783734047558270592\"\r\n        \"1759126540109112712651971721052675084976818070091989096651842993609813358410970957670225126455411094475951\"\r\n        \"3597145222520219020993863293776953184713566809762925260607585201072215123499482741080809269877751848891355\"\r\n        \"8874261221649778211679226574776005617568299635100843589121892314033933211701194111796822027434214735289696\"\r\n        \"3944029068912535372637417907526469207368791103363037109375\"},\r\n    {0x1.fffffffffffffp-747, chars_format::fixed, 799,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000002701613604891633162383626432296408190270169404787680124812856334425526137538849042834693720719\"\r\n        \"9067145922427468279711814301541848262271875171403897912731655597389363110399707918119807567468095116541184\"\r\n        \"3518253080218225425303943442105350169953636140183978193303685987219626716821941915340450252910822188951902\"\r\n        \"7194290445040438041987726587553906369427133619525850521215170402144430246998965482161618539755503697782711\"\r\n        \"7748522443299556423358453149552011235136599270201687178243784628067866423402388223593644054868429470579392\"\r\n        \"788805813782507074527483581505293841473758220672607421875\"},\r\n    {0x1.fffffffffffffp-746, chars_format::fixed, 798,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000005403227209783266324767252864592816380540338809575360249625712668851052275077698085669387441439\"\r\n        \"8134291844854936559423628603083696524543750342807795825463311194778726220799415836239615134936190233082368\"\r\n        \"7036506160436450850607886884210700339907272280367956386607371974439253433643883830680900505821644377903805\"\r\n        \"4388580890080876083975453175107812738854267239051701042430340804288860493997930964323237079511007395565423\"\r\n        \"5497044886599112846716906299104022470273198540403374356487569256135732846804776447187288109736858941158785\"\r\n        \"57761162756501414905496716301058768294751644134521484375\"},\r\n    {0x1.fffffffffffffp-745, chars_format::fixed, 797,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000010806454419566532649534505729185632761080677619150720499251425337702104550155396171338774882879\"\r\n        \"6268583689709873118847257206167393049087500685615591650926622389557452441598831672479230269872380466164737\"\r\n        \"4073012320872901701215773768421400679814544560735912773214743948878506867287767661361801011643288755807610\"\r\n        \"8777161780161752167950906350215625477708534478103402084860681608577720987995861928646474159022014791130847\"\r\n        \"0994089773198225693433812598208044940546397080806748712975138512271465693609552894374576219473717882317571\"\r\n        \"1552232551300282981099343260211753658950328826904296875\"},\r\n    {0x1.fffffffffffffp-744, chars_format::fixed, 796,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000021612908839133065299069011458371265522161355238301440998502850675404209100310792342677549765759\"\r\n        \"2537167379419746237694514412334786098175001371231183301853244779114904883197663344958460539744760932329474\"\r\n        \"8146024641745803402431547536842801359629089121471825546429487897757013734575535322723602023286577511615221\"\r\n        \"7554323560323504335901812700431250955417068956206804169721363217155441975991723857292948318044029582261694\"\r\n        \"1988179546396451386867625196416089881092794161613497425950277024542931387219105788749152438947435764635142\"\r\n        \"310446510260056596219868652042350731790065765380859375\"},\r\n    {0x1.fffffffffffffp-743, chars_format::fixed, 795,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000043225817678266130598138022916742531044322710476602881997005701350808418200621584685355099531518\"\r\n        \"5074334758839492475389028824669572196350002742462366603706489558229809766395326689916921079489521864658949\"\r\n        \"6292049283491606804863095073685602719258178242943651092858975795514027469151070645447204046573155023230443\"\r\n        \"5108647120647008671803625400862501910834137912413608339442726434310883951983447714585896636088059164523388\"\r\n        \"3976359092792902773735250392832179762185588323226994851900554049085862774438211577498304877894871529270284\"\r\n        \"62089302052011319243973730408470146358013153076171875\"},\r\n    {0x1.fffffffffffffp-742, chars_format::fixed, 794,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000086451635356532261196276045833485062088645420953205763994011402701616836401243169370710199063037\"\r\n        \"0148669517678984950778057649339144392700005484924733207412979116459619532790653379833842158979043729317899\"\r\n        \"2584098566983213609726190147371205438516356485887302185717951591028054938302141290894408093146310046460887\"\r\n        \"0217294241294017343607250801725003821668275824827216678885452868621767903966895429171793272176118329046776\"\r\n        \"7952718185585805547470500785664359524371176646453989703801108098171725548876423154996609755789743058540569\"\r\n        \"2417860410402263848794746081694029271602630615234375\"},\r\n    {0x1.fffffffffffffp-741, chars_format::fixed, 793,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000172903270713064522392552091666970124177290841906411527988022805403233672802486338741420398126074\"\r\n        \"0297339035357969901556115298678288785400010969849466414825958232919239065581306759667684317958087458635798\"\r\n        \"5168197133966427219452380294742410877032712971774604371435903182056109876604282581788816186292620092921774\"\r\n        \"0434588482588034687214501603450007643336551649654433357770905737243535807933790858343586544352236658093553\"\r\n        \"5905436371171611094941001571328719048742353292907979407602216196343451097752846309993219511579486117081138\"\r\n        \"483572082080452769758949216338805854320526123046875\"},\r\n    {0x1.fffffffffffffp-740, chars_format::fixed, 792,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000345806541426129044785104183333940248354581683812823055976045610806467345604972677482840796252148\"\r\n        \"0594678070715939803112230597356577570800021939698932829651916465838478131162613519335368635916174917271597\"\r\n        \"0336394267932854438904760589484821754065425943549208742871806364112219753208565163577632372585240185843548\"\r\n        \"0869176965176069374429003206900015286673103299308866715541811474487071615867581716687173088704473316187107\"\r\n        \"1810872742343222189882003142657438097484706585815958815204432392686902195505692619986439023158972234162276\"\r\n        \"96714416416090553951789843267761170864105224609375\"},\r\n    {0x1.fffffffffffffp-739, chars_format::fixed, 791,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000691613082852258089570208366667880496709163367625646111952091221612934691209945354965681592504296\"\r\n        \"1189356141431879606224461194713155141600043879397865659303832931676956262325227038670737271832349834543194\"\r\n        \"0672788535865708877809521178969643508130851887098417485743612728224439506417130327155264745170480371687096\"\r\n        \"1738353930352138748858006413800030573346206598617733431083622948974143231735163433374346177408946632374214\"\r\n        \"3621745484686444379764006285314876194969413171631917630408864785373804391011385239972878046317944468324553\"\r\n        \"9342883283218110790357968653552234172821044921875\"},\r\n    {0x1.fffffffffffffp-738, chars_format::fixed, 790,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000001383226165704516179140416733335760993418326735251292223904182443225869382419890709931363185008592\"\r\n        \"2378712282863759212448922389426310283200087758795731318607665863353912524650454077341474543664699669086388\"\r\n        \"1345577071731417755619042357939287016261703774196834971487225456448879012834260654310529490340960743374192\"\r\n        \"3476707860704277497716012827600061146692413197235466862167245897948286463470326866748692354817893264748428\"\r\n        \"7243490969372888759528012570629752389938826343263835260817729570747608782022770479945756092635888936649107\"\r\n        \"868576656643622158071593730710446834564208984375\"},\r\n    {0x1.fffffffffffffp-737, chars_format::fixed, 789,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000002766452331409032358280833466671521986836653470502584447808364886451738764839781419862726370017184\"\r\n        \"4757424565727518424897844778852620566400175517591462637215331726707825049300908154682949087329399338172776\"\r\n        \"2691154143462835511238084715878574032523407548393669942974450912897758025668521308621058980681921486748384\"\r\n        \"6953415721408554995432025655200122293384826394470933724334491795896572926940653733497384709635786529496857\"\r\n        \"4486981938745777519056025141259504779877652686527670521635459141495217564045540959891512185271777873298215\"\r\n        \"73715331328724431614318746142089366912841796875\"},\r\n    {0x1.fffffffffffffp-736, chars_format::fixed, 788,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000005532904662818064716561666933343043973673306941005168895616729772903477529679562839725452740034368\"\r\n        \"9514849131455036849795689557705241132800351035182925274430663453415650098601816309365898174658798676345552\"\r\n        \"5382308286925671022476169431757148065046815096787339885948901825795516051337042617242117961363842973496769\"\r\n        \"3906831442817109990864051310400244586769652788941867448668983591793145853881307466994769419271573058993714\"\r\n        \"8973963877491555038112050282519009559755305373055341043270918282990435128091081919783024370543555746596431\"\r\n        \"4743066265744886322863749228417873382568359375\"},\r\n    {0x1.fffffffffffffp-735, chars_format::fixed, 787,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000011065809325636129433123333866686087947346613882010337791233459545806955059359125679450905480068737\"\r\n        \"9029698262910073699591379115410482265600702070365850548861326906831300197203632618731796349317597352691105\"\r\n        \"0764616573851342044952338863514296130093630193574679771897803651591032102674085234484235922727685946993538\"\r\n        \"7813662885634219981728102620800489173539305577883734897337967183586291707762614933989538838543146117987429\"\r\n        \"7947927754983110076224100565038019119510610746110682086541836565980870256182163839566048741087111493192862\"\r\n        \"948613253148977264572749845683574676513671875\"},\r\n    {0x1.fffffffffffffp-734, chars_format::fixed, 786,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000022131618651272258866246667733372175894693227764020675582466919091613910118718251358901810960137475\"\r\n        \"8059396525820147399182758230820964531201404140731701097722653813662600394407265237463592698635194705382210\"\r\n        \"1529233147702684089904677727028592260187260387149359543795607303182064205348170468968471845455371893987077\"\r\n        \"5627325771268439963456205241600978347078611155767469794675934367172583415525229867979077677086292235974859\"\r\n        \"5895855509966220152448201130076038239021221492221364173083673131961740512364327679132097482174222986385725\"\r\n        \"89722650629795452914549969136714935302734375\"},\r\n    {0x1.fffffffffffffp-733, chars_format::fixed, 785,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000044263237302544517732493335466744351789386455528041351164933838183227820237436502717803621920274951\"\r\n        \"6118793051640294798365516461641929062402808281463402195445307627325200788814530474927185397270389410764420\"\r\n        \"3058466295405368179809355454057184520374520774298719087591214606364128410696340937936943690910743787974155\"\r\n        \"1254651542536879926912410483201956694157222311534939589351868734345166831050459735958155354172584471949719\"\r\n        \"1791711019932440304896402260152076478042442984442728346167346263923481024728655358264194964348445972771451\"\r\n        \"7944530125959090582909993827342987060546875\"},\r\n    {0x1.fffffffffffffp-732, chars_format::fixed, 784,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000088526474605089035464986670933488703578772911056082702329867676366455640474873005435607243840549903\"\r\n        \"2237586103280589596731032923283858124805616562926804390890615254650401577629060949854370794540778821528840\"\r\n        \"6116932590810736359618710908114369040749041548597438175182429212728256821392681875873887381821487575948310\"\r\n        \"2509303085073759853824820966403913388314444623069879178703737468690333662100919471916310708345168943899438\"\r\n        \"3583422039864880609792804520304152956084885968885456692334692527846962049457310716528389928696891945542903\"\r\n        \"588906025191818116581998765468597412109375\"},\r\n    {0x1.fffffffffffffp-731, chars_format::fixed, 783,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000177052949210178070929973341866977407157545822112165404659735352732911280949746010871214487681099806\"\r\n        \"4475172206561179193462065846567716249611233125853608781781230509300803155258121899708741589081557643057681\"\r\n        \"2233865181621472719237421816228738081498083097194876350364858425456513642785363751747774763642975151896620\"\r\n        \"5018606170147519707649641932807826776628889246139758357407474937380667324201838943832621416690337887798876\"\r\n        \"7166844079729761219585609040608305912169771937770913384669385055693924098914621433056779857393783891085807\"\r\n        \"17781205038363623316399753093719482421875\"},\r\n    {0x1.fffffffffffffp-730, chars_format::fixed, 782,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000354105898420356141859946683733954814315091644224330809319470705465822561899492021742428975362199612\"\r\n        \"8950344413122358386924131693135432499222466251707217563562461018601606310516243799417483178163115286115362\"\r\n        \"4467730363242945438474843632457476162996166194389752700729716850913027285570727503495549527285950303793241\"\r\n        \"0037212340295039415299283865615653553257778492279516714814949874761334648403677887665242833380675775597753\"\r\n        \"4333688159459522439171218081216611824339543875541826769338770111387848197829242866113559714787567782171614\"\r\n        \"3556241007672724663279950618743896484375\"},\r\n    {0x1.fffffffffffffp-729, chars_format::fixed, 781,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000708211796840712283719893367467909628630183288448661618638941410931645123798984043484857950724399225\"\r\n        \"7900688826244716773848263386270864998444932503414435127124922037203212621032487598834966356326230572230724\"\r\n        \"8935460726485890876949687264914952325992332388779505401459433701826054571141455006991099054571900607586482\"\r\n        \"0074424680590078830598567731231307106515556984559033429629899749522669296807355775330485666761351551195506\"\r\n        \"8667376318919044878342436162433223648679087751083653538677540222775696395658485732227119429575135564343228\"\r\n        \"711248201534544932655990123748779296875\"},\r\n    {0x1.fffffffffffffp-728, chars_format::fixed, 780,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000001416423593681424567439786734935819257260366576897323237277882821863290247597968086969715901448798451\"\r\n        \"5801377652489433547696526772541729996889865006828870254249844074406425242064975197669932712652461144461449\"\r\n        \"7870921452971781753899374529829904651984664777559010802918867403652109142282910013982198109143801215172964\"\r\n        \"0148849361180157661197135462462614213031113969118066859259799499045338593614711550660971333522703102391013\"\r\n        \"7334752637838089756684872324866447297358175502167307077355080445551392791316971464454238859150271128686457\"\r\n        \"42249640306908986531198024749755859375\"},\r\n    {0x1.fffffffffffffp-727, chars_format::fixed, 779,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000002832847187362849134879573469871638514520733153794646474555765643726580495195936173939431802897596903\"\r\n        \"1602755304978867095393053545083459993779730013657740508499688148812850484129950395339865425304922288922899\"\r\n        \"5741842905943563507798749059659809303969329555118021605837734807304218284565820027964396218287602430345928\"\r\n        \"0297698722360315322394270924925228426062227938236133718519598998090677187229423101321942667045406204782027\"\r\n        \"4669505275676179513369744649732894594716351004334614154710160891102785582633942928908477718300542257372914\"\r\n        \"8449928061381797306239604949951171875\"},\r\n    {0x1.fffffffffffffp-726, chars_format::fixed, 778,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000005665694374725698269759146939743277029041466307589292949111531287453160990391872347878863605795193806\"\r\n        \"3205510609957734190786107090166919987559460027315481016999376297625700968259900790679730850609844577845799\"\r\n        \"1483685811887127015597498119319618607938659110236043211675469614608436569131640055928792436575204860691856\"\r\n        \"0595397444720630644788541849850456852124455876472267437039197996181354374458846202643885334090812409564054\"\r\n        \"9339010551352359026739489299465789189432702008669228309420321782205571165267885857816955436601084514745829\"\r\n        \"689985612276359461247920989990234375\"},\r\n    {0x1.fffffffffffffp-725, chars_format::fixed, 777,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000011331388749451396539518293879486554058082932615178585898223062574906321980783744695757727211590387612\"\r\n        \"6411021219915468381572214180333839975118920054630962033998752595251401936519801581359461701219689155691598\"\r\n        \"2967371623774254031194996238639237215877318220472086423350939229216873138263280111857584873150409721383712\"\r\n        \"1190794889441261289577083699700913704248911752944534874078395992362708748917692405287770668181624819128109\"\r\n        \"8678021102704718053478978598931578378865404017338456618840643564411142330535771715633910873202169029491659\"\r\n        \"37997122455271892249584197998046875\"},\r\n    {0x1.fffffffffffffp-724, chars_format::fixed, 776,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000022662777498902793079036587758973108116165865230357171796446125149812643961567489391515454423180775225\"\r\n        \"2822042439830936763144428360667679950237840109261924067997505190502803873039603162718923402439378311383196\"\r\n        \"5934743247548508062389992477278474431754636440944172846701878458433746276526560223715169746300819442767424\"\r\n        \"2381589778882522579154167399401827408497823505889069748156791984725417497835384810575541336363249638256219\"\r\n        \"7356042205409436106957957197863156757730808034676913237681287128822284661071543431267821746404338058983318\"\r\n        \"7599424491054378449916839599609375\"},\r\n    {0x1.fffffffffffffp-723, chars_format::fixed, 775,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000045325554997805586158073175517946216232331730460714343592892250299625287923134978783030908846361550450\"\r\n        \"5644084879661873526288856721335359900475680218523848135995010381005607746079206325437846804878756622766393\"\r\n        \"1869486495097016124779984954556948863509272881888345693403756916867492553053120447430339492601638885534848\"\r\n        \"4763179557765045158308334798803654816995647011778139496313583969450834995670769621151082672726499276512439\"\r\n        \"4712084410818872213915914395726313515461616069353826475362574257644569322143086862535643492808676117966637\"\r\n        \"519884898210875689983367919921875\"},\r\n    {0x1.fffffffffffffp-722, chars_format::fixed, 774,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000090651109995611172316146351035892432464663460921428687185784500599250575846269957566061817692723100901\"\r\n        \"1288169759323747052577713442670719800951360437047696271990020762011215492158412650875693609757513245532786\"\r\n        \"3738972990194032249559969909113897727018545763776691386807513833734985106106240894860678985203277771069696\"\r\n        \"9526359115530090316616669597607309633991294023556278992627167938901669991341539242302165345452998553024878\"\r\n        \"9424168821637744427831828791452627030923232138707652950725148515289138644286173725071286985617352235933275\"\r\n        \"03976979642175137996673583984375\"},\r\n    {0x1.fffffffffffffp-721, chars_format::fixed, 773,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000181302219991222344632292702071784864929326921842857374371569001198501151692539915132123635385446201802\"\r\n        \"2576339518647494105155426885341439601902720874095392543980041524022430984316825301751387219515026491065572\"\r\n        \"7477945980388064499119939818227795454037091527553382773615027667469970212212481789721357970406555542139393\"\r\n        \"9052718231060180633233339195214619267982588047112557985254335877803339982683078484604330690905997106049757\"\r\n        \"8848337643275488855663657582905254061846464277415305901450297030578277288572347450142573971234704471866550\"\r\n        \"0795395928435027599334716796875\"},\r\n    {0x1.fffffffffffffp-720, chars_format::fixed, 772,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000362604439982444689264585404143569729858653843685714748743138002397002303385079830264247270770892403604\"\r\n        \"5152679037294988210310853770682879203805441748190785087960083048044861968633650603502774439030052982131145\"\r\n        \"4955891960776128998239879636455590908074183055106765547230055334939940424424963579442715940813111084278787\"\r\n        \"8105436462120361266466678390429238535965176094225115970508671755606679965366156969208661381811994212099515\"\r\n        \"7696675286550977711327315165810508123692928554830611802900594061156554577144694900285147942469408943733100\"\r\n        \"159079185687005519866943359375\"},\r\n    {0x1.fffffffffffffp-719, chars_format::fixed, 771,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000725208879964889378529170808287139459717307687371429497486276004794004606770159660528494541541784807209\"\r\n        \"0305358074589976420621707541365758407610883496381570175920166096089723937267301207005548878060105964262290\"\r\n        \"9911783921552257996479759272911181816148366110213531094460110669879880848849927158885431881626222168557575\"\r\n        \"6210872924240722532933356780858477071930352188450231941017343511213359930732313938417322763623988424199031\"\r\n        \"5393350573101955422654630331621016247385857109661223605801188122313109154289389800570295884938817887466200\"\r\n        \"31815837137401103973388671875\"},\r\n    {0x1.fffffffffffffp-718, chars_format::fixed, 770,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0001450417759929778757058341616574278919434615374742858994972552009588009213540319321056989083083569614418\"\r\n        \"0610716149179952841243415082731516815221766992763140351840332192179447874534602414011097756120211928524581\"\r\n        \"9823567843104515992959518545822363632296732220427062188920221339759761697699854317770863763252444337115151\"\r\n        \"2421745848481445065866713561716954143860704376900463882034687022426719861464627876834645527247976848398063\"\r\n        \"0786701146203910845309260663242032494771714219322447211602376244626218308578779601140591769877635774932400\"\r\n        \"6363167427480220794677734375\"},\r\n    {0x1.fffffffffffffp-717, chars_format::fixed, 769,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0002900835519859557514116683233148557838869230749485717989945104019176018427080638642113978166167139228836\"\r\n        \"1221432298359905682486830165463033630443533985526280703680664384358895749069204828022195512240423857049163\"\r\n        \"9647135686209031985919037091644727264593464440854124377840442679519523395399708635541727526504888674230302\"\r\n        \"4843491696962890131733427123433908287721408753800927764069374044853439722929255753669291054495953696796126\"\r\n        \"1573402292407821690618521326484064989543428438644894423204752489252436617157559202281183539755271549864801\"\r\n        \"272633485496044158935546875\"},\r\n    {0x1.fffffffffffffp-716, chars_format::fixed, 768,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0005801671039719115028233366466297115677738461498971435979890208038352036854161277284227956332334278457672\"\r\n        \"2442864596719811364973660330926067260887067971052561407361328768717791498138409656044391024480847714098327\"\r\n        \"9294271372418063971838074183289454529186928881708248755680885359039046790799417271083455053009777348460604\"\r\n        \"9686983393925780263466854246867816575442817507601855528138748089706879445858511507338582108991907393592252\"\r\n        \"3146804584815643381237042652968129979086856877289788846409504978504873234315118404562367079510543099729602\"\r\n        \"54526697099208831787109375\"},\r\n    {0x1.fffffffffffffp-715, chars_format::fixed, 767,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0011603342079438230056466732932594231355476922997942871959780416076704073708322554568455912664668556915344\"\r\n        \"4885729193439622729947320661852134521774135942105122814722657537435582996276819312088782048961695428196655\"\r\n        \"8588542744836127943676148366578909058373857763416497511361770718078093581598834542166910106019554696921209\"\r\n        \"9373966787851560526933708493735633150885635015203711056277496179413758891717023014677164217983814787184504\"\r\n        \"6293609169631286762474085305936259958173713754579577692819009957009746468630236809124734159021086199459205\"\r\n        \"0905339419841766357421875\"},\r\n    {0x1.fffffffffffffp-714, chars_format::fixed, 766,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0023206684158876460112933465865188462710953845995885743919560832153408147416645109136911825329337113830688\"\r\n        \"9771458386879245459894641323704269043548271884210245629445315074871165992553638624177564097923390856393311\"\r\n        \"7177085489672255887352296733157818116747715526832995022723541436156187163197669084333820212039109393842419\"\r\n        \"8747933575703121053867416987471266301771270030407422112554992358827517783434046029354328435967629574369009\"\r\n        \"2587218339262573524948170611872519916347427509159155385638019914019492937260473618249468318042172398918410\"\r\n        \"181067883968353271484375\"},\r\n    {0x1.fffffffffffffp-713, chars_format::fixed, 765,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0046413368317752920225866931730376925421907691991771487839121664306816294833290218273823650658674227661377\"\r\n        \"9542916773758490919789282647408538087096543768420491258890630149742331985107277248355128195846781712786623\"\r\n        \"4354170979344511774704593466315636233495431053665990045447082872312374326395338168667640424078218787684839\"\r\n        \"7495867151406242107734833974942532603542540060814844225109984717655035566868092058708656871935259148738018\"\r\n        \"5174436678525147049896341223745039832694855018318310771276039828038985874520947236498936636084344797836820\"\r\n        \"36213576793670654296875\"},\r\n    {0x1.fffffffffffffp-712, chars_format::fixed, 764,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0092826736635505840451733863460753850843815383983542975678243328613632589666580436547647301317348455322755\"\r\n        \"9085833547516981839578565294817076174193087536840982517781260299484663970214554496710256391693563425573246\"\r\n        \"8708341958689023549409186932631272466990862107331980090894165744624748652790676337335280848156437575369679\"\r\n        \"4991734302812484215469667949885065207085080121629688450219969435310071133736184117417313743870518297476037\"\r\n        \"0348873357050294099792682447490079665389710036636621542552079656077971749041894472997873272168689595673640\"\r\n        \"7242715358734130859375\"},\r\n    {0x1.fffffffffffffp-711, chars_format::fixed, 763,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0185653473271011680903467726921507701687630767967085951356486657227265179333160873095294602634696910645511\"\r\n        \"8171667095033963679157130589634152348386175073681965035562520598969327940429108993420512783387126851146493\"\r\n        \"7416683917378047098818373865262544933981724214663960181788331489249497305581352674670561696312875150739358\"\r\n        \"9983468605624968430939335899770130414170160243259376900439938870620142267472368234834627487741036594952074\"\r\n        \"0697746714100588199585364894980159330779420073273243085104159312155943498083788945995746544337379191347281\"\r\n        \"448543071746826171875\"},\r\n    {0x1.fffffffffffffp-710, chars_format::fixed, 762,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0371306946542023361806935453843015403375261535934171902712973314454530358666321746190589205269393821291023\"\r\n        \"6343334190067927358314261179268304696772350147363930071125041197938655880858217986841025566774253702292987\"\r\n        \"4833367834756094197636747730525089867963448429327920363576662978498994611162705349341123392625750301478717\"\r\n        \"9966937211249936861878671799540260828340320486518753800879877741240284534944736469669254975482073189904148\"\r\n        \"1395493428201176399170729789960318661558840146546486170208318624311886996167577891991493088674758382694562\"\r\n        \"89708614349365234375\"},\r\n    {0x1.fffffffffffffp-709, chars_format::fixed, 761,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0742613893084046723613870907686030806750523071868343805425946628909060717332643492381178410538787642582047\"\r\n        \"2686668380135854716628522358536609393544700294727860142250082395877311761716435973682051133548507404585974\"\r\n        \"9666735669512188395273495461050179735926896858655840727153325956997989222325410698682246785251500602957435\"\r\n        \"9933874422499873723757343599080521656680640973037507601759755482480569069889472939338509950964146379808296\"\r\n        \"2790986856402352798341459579920637323117680293092972340416637248623773992335155783982986177349516765389125\"\r\n        \"7941722869873046875\"},\r\n    {0x1.fffffffffffffp-708, chars_format::fixed, 760,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"1485227786168093447227741815372061613501046143736687610851893257818121434665286984762356821077575285164094\"\r\n        \"5373336760271709433257044717073218787089400589455720284500164791754623523432871947364102267097014809171949\"\r\n        \"9333471339024376790546990922100359471853793717311681454306651913995978444650821397364493570503001205914871\"\r\n        \"9867748844999747447514687198161043313361281946075015203519510964961138139778945878677019901928292759616592\"\r\n        \"5581973712804705596682919159841274646235360586185944680833274497247547984670311567965972354699033530778251\"\r\n        \"588344573974609375\"},\r\n    {0x1.fffffffffffffp-707, chars_format::fixed, 759,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"2970455572336186894455483630744123227002092287473375221703786515636242869330573969524713642155150570328189\"\r\n        \"0746673520543418866514089434146437574178801178911440569000329583509247046865743894728204534194029618343899\"\r\n        \"8666942678048753581093981844200718943707587434623362908613303827991956889301642794728987141006002411829743\"\r\n        \"9735497689999494895029374396322086626722563892150030407039021929922276279557891757354039803856585519233185\"\r\n        \"1163947425609411193365838319682549292470721172371889361666548994495095969340623135931944709398067061556503\"\r\n        \"17668914794921875\"},\r\n    {0x1.fffffffffffffp-706, chars_format::fixed, 758,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"5940911144672373788910967261488246454004184574946750443407573031272485738661147939049427284310301140656378\"\r\n        \"1493347041086837733028178868292875148357602357822881138000659167018494093731487789456409068388059236687799\"\r\n        \"7333885356097507162187963688401437887415174869246725817226607655983913778603285589457974282012004823659487\"\r\n        \"9470995379998989790058748792644173253445127784300060814078043859844552559115783514708079607713171038466370\"\r\n        \"2327894851218822386731676639365098584941442344743778723333097988990191938681246271863889418796134123113006\"\r\n        \"3533782958984375\"},\r\n    {0x1.fffffffffffffp-705, chars_format::fixed, 757,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\"\r\n        \"1881822289344747577821934522976492908008369149893500886815146062544971477322295878098854568620602281312756\"\r\n        \"2986694082173675466056357736585750296715204715645762276001318334036988187462975578912818136776118473375599\"\r\n        \"4667770712195014324375927376802875774830349738493451634453215311967827557206571178915948564024009647318975\"\r\n        \"8941990759997979580117497585288346506890255568600121628156087719689105118231567029416159215426342076932740\"\r\n        \"4655789702437644773463353278730197169882884689487557446666195977980383877362492543727778837592268246226012\"\r\n        \"706756591796875\"},\r\n    {0x1.fffffffffffffp-704, chars_format::fixed, 756,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002\"\r\n        \"3763644578689495155643869045952985816016738299787001773630292125089942954644591756197709137241204562625512\"\r\n        \"5973388164347350932112715473171500593430409431291524552002636668073976374925951157825636273552236946751198\"\r\n        \"9335541424390028648751854753605751549660699476986903268906430623935655114413142357831897128048019294637951\"\r\n        \"7883981519995959160234995170576693013780511137200243256312175439378210236463134058832318430852684153865480\"\r\n        \"9311579404875289546926706557460394339765769378975114893332391955960767754724985087455557675184536492452025\"\r\n        \"41351318359375\"},\r\n    {0x1.fffffffffffffp-703, chars_format::fixed, 755,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004\"\r\n        \"7527289157378990311287738091905971632033476599574003547260584250179885909289183512395418274482409125251025\"\r\n        \"1946776328694701864225430946343001186860818862583049104005273336147952749851902315651272547104473893502397\"\r\n        \"8671082848780057297503709507211503099321398953973806537812861247871310228826284715663794256096038589275903\"\r\n        \"5767963039991918320469990341153386027561022274400486512624350878756420472926268117664636861705368307730961\"\r\n        \"8623158809750579093853413114920788679531538757950229786664783911921535509449970174911115350369072984904050\"\r\n        \"8270263671875\"},\r\n    {0x1.fffffffffffffp-702, chars_format::fixed, 754,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009\"\r\n        \"5054578314757980622575476183811943264066953199148007094521168500359771818578367024790836548964818250502050\"\r\n        \"3893552657389403728450861892686002373721637725166098208010546672295905499703804631302545094208947787004795\"\r\n        \"7342165697560114595007419014423006198642797907947613075625722495742620457652569431327588512192077178551807\"\r\n        \"1535926079983836640939980682306772055122044548800973025248701757512840945852536235329273723410736615461923\"\r\n        \"7246317619501158187706826229841577359063077515900459573329567823843071018899940349822230700738145969808101\"\r\n        \"654052734375\"},\r\n    {0x1.fffffffffffffp-701, chars_format::fixed, 753,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019\"\r\n        \"0109156629515961245150952367623886528133906398296014189042337000719543637156734049581673097929636501004100\"\r\n        \"7787105314778807456901723785372004747443275450332196416021093344591810999407609262605090188417895574009591\"\r\n        \"4684331395120229190014838028846012397285595815895226151251444991485240915305138862655177024384154357103614\"\r\n        \"3071852159967673281879961364613544110244089097601946050497403515025681891705072470658547446821473230923847\"\r\n        \"4492635239002316375413652459683154718126155031800919146659135647686142037799880699644461401476291939616203\"\r\n        \"30810546875\"},\r\n    {0x1.fffffffffffffp-700, chars_format::fixed, 752,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038\"\r\n        \"0218313259031922490301904735247773056267812796592028378084674001439087274313468099163346195859273002008201\"\r\n        \"5574210629557614913803447570744009494886550900664392832042186689183621998815218525210180376835791148019182\"\r\n        \"9368662790240458380029676057692024794571191631790452302502889982970481830610277725310354048768308714207228\"\r\n        \"6143704319935346563759922729227088220488178195203892100994807030051363783410144941317094893642946461847694\"\r\n        \"8985270478004632750827304919366309436252310063601838293318271295372284075599761399288922802952583879232406\"\r\n        \"6162109375\"},\r\n    {0x1.fffffffffffffp-699, chars_format::fixed, 751,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076\"\r\n        \"0436626518063844980603809470495546112535625593184056756169348002878174548626936198326692391718546004016403\"\r\n        \"1148421259115229827606895141488018989773101801328785664084373378367243997630437050420360753671582296038365\"\r\n        \"8737325580480916760059352115384049589142383263580904605005779965940963661220555450620708097536617428414457\"\r\n        \"2287408639870693127519845458454176440976356390407784201989614060102727566820289882634189787285892923695389\"\r\n        \"7970540956009265501654609838732618872504620127203676586636542590744568151199522798577845605905167758464813\"\r\n        \"232421875\"},\r\n    {0x1.fffffffffffffp-698, chars_format::fixed, 750,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152\"\r\n        \"0873253036127689961207618940991092225071251186368113512338696005756349097253872396653384783437092008032806\"\r\n        \"2296842518230459655213790282976037979546203602657571328168746756734487995260874100840721507343164592076731\"\r\n        \"7474651160961833520118704230768099178284766527161809210011559931881927322441110901241416195073234856828914\"\r\n        \"4574817279741386255039690916908352881952712780815568403979228120205455133640579765268379574571785847390779\"\r\n        \"5941081912018531003309219677465237745009240254407353173273085181489136302399045597155691211810335516929626\"\r\n        \"46484375\"},\r\n    {0x1.fffffffffffffp-697, chars_format::fixed, 749,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000304\"\r\n        \"1746506072255379922415237881982184450142502372736227024677392011512698194507744793306769566874184016065612\"\r\n        \"4593685036460919310427580565952075959092407205315142656337493513468975990521748201681443014686329184153463\"\r\n        \"4949302321923667040237408461536198356569533054323618420023119863763854644882221802482832390146469713657828\"\r\n        \"9149634559482772510079381833816705763905425561631136807958456240410910267281159530536759149143571694781559\"\r\n        \"1882163824037062006618439354930475490018480508814706346546170362978272604798091194311382423620671033859252\"\r\n        \"9296875\"},\r\n    {0x1.fffffffffffffp-696, chars_format::fixed, 748,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000608\"\r\n        \"3493012144510759844830475763964368900285004745472454049354784023025396389015489586613539133748368032131224\"\r\n        \"9187370072921838620855161131904151918184814410630285312674987026937951981043496403362886029372658368306926\"\r\n        \"9898604643847334080474816923072396713139066108647236840046239727527709289764443604965664780292939427315657\"\r\n        \"8299269118965545020158763667633411527810851123262273615916912480821820534562319061073518298287143389563118\"\r\n        \"3764327648074124013236878709860950980036961017629412693092340725956545209596182388622764847241342067718505\"\r\n        \"859375\"},\r\n    {0x1.fffffffffffffp-695, chars_format::fixed, 747,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001216\"\r\n        \"6986024289021519689660951527928737800570009490944908098709568046050792778030979173227078267496736064262449\"\r\n        \"8374740145843677241710322263808303836369628821260570625349974053875903962086992806725772058745316736613853\"\r\n        \"9797209287694668160949633846144793426278132217294473680092479455055418579528887209931329560585878854631315\"\r\n        \"6598538237931090040317527335266823055621702246524547231833824961643641069124638122147036596574286779126236\"\r\n        \"7528655296148248026473757419721901960073922035258825386184681451913090419192364777245529694482684135437011\"\r\n        \"71875\"},\r\n    {0x1.fffffffffffffp-694, chars_format::fixed, 746,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002433\"\r\n        \"3972048578043039379321903055857475601140018981889816197419136092101585556061958346454156534993472128524899\"\r\n        \"6749480291687354483420644527616607672739257642521141250699948107751807924173985613451544117490633473227707\"\r\n        \"9594418575389336321899267692289586852556264434588947360184958910110837159057774419862659121171757709262631\"\r\n        \"3197076475862180080635054670533646111243404493049094463667649923287282138249276244294073193148573558252473\"\r\n        \"5057310592296496052947514839443803920147844070517650772369362903826180838384729554491059388965368270874023\"\r\n        \"4375\"},\r\n    {0x1.fffffffffffffp-693, chars_format::fixed, 745,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004866\"\r\n        \"7944097156086078758643806111714951202280037963779632394838272184203171112123916692908313069986944257049799\"\r\n        \"3498960583374708966841289055233215345478515285042282501399896215503615848347971226903088234981266946455415\"\r\n        \"9188837150778672643798535384579173705112528869177894720369917820221674318115548839725318242343515418525262\"\r\n        \"6394152951724360161270109341067292222486808986098188927335299846574564276498552488588146386297147116504947\"\r\n        \"0114621184592992105895029678887607840295688141035301544738725807652361676769459108982118777930736541748046\"\r\n        \"875\"},\r\n    {0x1.fffffffffffffp-692, chars_format::fixed, 744,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009733\"\r\n        \"5888194312172157517287612223429902404560075927559264789676544368406342224247833385816626139973888514099598\"\r\n        \"6997921166749417933682578110466430690957030570084565002799792431007231696695942453806176469962533892910831\"\r\n        \"8377674301557345287597070769158347410225057738355789440739835640443348636231097679450636484687030837050525\"\r\n        \"2788305903448720322540218682134584444973617972196377854670599693149128552997104977176292772594294233009894\"\r\n        \"0229242369185984211790059357775215680591376282070603089477451615304723353538918217964237555861473083496093\"\r\n        \"75\"},\r\n    {0x1.fffffffffffffp-691, chars_format::fixed, 743,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019467\"\r\n        \"1776388624344315034575224446859804809120151855118529579353088736812684448495666771633252279947777028199197\"\r\n        \"3995842333498835867365156220932861381914061140169130005599584862014463393391884907612352939925067785821663\"\r\n        \"6755348603114690575194141538316694820450115476711578881479671280886697272462195358901272969374061674101050\"\r\n        \"5576611806897440645080437364269168889947235944392755709341199386298257105994209954352585545188588466019788\"\r\n        \"0458484738371968423580118715550431361182752564141206178954903230609446707077836435928475111722946166992187\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-690, chars_format::fixed, 742,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038934\"\r\n        \"3552777248688630069150448893719609618240303710237059158706177473625368896991333543266504559895554056398394\"\r\n        \"7991684666997671734730312441865722763828122280338260011199169724028926786783769815224705879850135571643327\"\r\n        \"3510697206229381150388283076633389640900230953423157762959342561773394544924390717802545938748123348202101\"\r\n        \"1153223613794881290160874728538337779894471888785511418682398772596514211988419908705171090377176932039576\"\r\n        \"091696947674393684716023743110086272236550512828241235790980646121889341415567287185695022344589233398437\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-689, chars_format::fixed, 741,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077868\"\r\n        \"7105554497377260138300897787439219236480607420474118317412354947250737793982667086533009119791108112796789\"\r\n        \"5983369333995343469460624883731445527656244560676520022398339448057853573567539630449411759700271143286654\"\r\n        \"7021394412458762300776566153266779281800461906846315525918685123546789089848781435605091877496246696404202\"\r\n        \"2306447227589762580321749457076675559788943777571022837364797545193028423976839817410342180754353864079152\"\r\n        \"18339389534878736943204748622017254447310102565648247158196129224377868283113457437139004468917846679687\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-688, chars_format::fixed, 740,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000155737\"\r\n        \"4211108994754520276601795574878438472961214840948236634824709894501475587965334173066018239582216225593579\"\r\n        \"1966738667990686938921249767462891055312489121353040044796678896115707147135079260898823519400542286573309\"\r\n        \"4042788824917524601553132306533558563600923813692631051837370247093578179697562871210183754992493392808404\"\r\n        \"4612894455179525160643498914153351119577887555142045674729595090386056847953679634820684361508707728158304\"\r\n        \"36678779069757473886409497244034508894620205131296494316392258448755736566226914874278008937835693359375\"},\r\n    {0x1.fffffffffffffp-687, chars_format::fixed, 739,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000311474\"\r\n        \"8422217989509040553203591149756876945922429681896473269649419789002951175930668346132036479164432451187158\"\r\n        \"3933477335981373877842499534925782110624978242706080089593357792231414294270158521797647038801084573146618\"\r\n        \"8085577649835049203106264613067117127201847627385262103674740494187156359395125742420367509984986785616808\"\r\n        \"9225788910359050321286997828306702239155775110284091349459190180772113695907359269641368723017415456316608\"\r\n        \"7335755813951494777281899448806901778924041026259298863278451689751147313245382974855601787567138671875\"},\r\n    {0x1.fffffffffffffp-686, chars_format::fixed, 738,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000622949\"\r\n        \"6844435979018081106407182299513753891844859363792946539298839578005902351861336692264072958328864902374316\"\r\n        \"7866954671962747755684999069851564221249956485412160179186715584462828588540317043595294077602169146293237\"\r\n        \"6171155299670098406212529226134234254403695254770524207349480988374312718790251484840735019969973571233617\"\r\n        \"8451577820718100642573995656613404478311550220568182698918380361544227391814718539282737446034830912633217\"\r\n        \"467151162790298955456379889761380355784808205251859772655690337950229462649076594971120357513427734375\"},\r\n    {0x1.fffffffffffffp-685, chars_format::fixed, 737,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001245899\"\r\n        \"3688871958036162212814364599027507783689718727585893078597679156011804703722673384528145916657729804748633\"\r\n        \"5733909343925495511369998139703128442499912970824320358373431168925657177080634087190588155204338292586475\"\r\n        \"2342310599340196812425058452268468508807390509541048414698961976748625437580502969681470039939947142467235\"\r\n        \"6903155641436201285147991313226808956623100441136365397836760723088454783629437078565474892069661825266434\"\r\n        \"93430232558059791091275977952276071156961641050371954531138067590045892529815318994224071502685546875\"},\r\n    {0x1.fffffffffffffp-684, chars_format::fixed, 736,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002491798\"\r\n        \"7377743916072324425628729198055015567379437455171786157195358312023609407445346769056291833315459609497267\"\r\n        \"1467818687850991022739996279406256884999825941648640716746862337851314354161268174381176310408676585172950\"\r\n        \"4684621198680393624850116904536937017614781019082096829397923953497250875161005939362940079879894284934471\"\r\n        \"3806311282872402570295982626453617913246200882272730795673521446176909567258874157130949784139323650532869\"\r\n        \"8686046511611958218255195590455214231392328210074390906227613518009178505963063798844814300537109375\"},\r\n    {0x1.fffffffffffffp-683, chars_format::fixed, 735,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004983597\"\r\n        \"4755487832144648851257458396110031134758874910343572314390716624047218814890693538112583666630919218994534\"\r\n        \"2935637375701982045479992558812513769999651883297281433493724675702628708322536348762352620817353170345900\"\r\n        \"9369242397360787249700233809073874035229562038164193658795847906994501750322011878725880159759788569868942\"\r\n        \"7612622565744805140591965252907235826492401764545461591347042892353819134517748314261899568278647301065739\"\r\n        \"737209302322391643651039118091042846278465642014878181245522703601835701192612759768962860107421875\"},\r\n    {0x1.fffffffffffffp-682, chars_format::fixed, 734,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009967194\"\r\n        \"9510975664289297702514916792220062269517749820687144628781433248094437629781387076225167333261838437989068\"\r\n        \"5871274751403964090959985117625027539999303766594562866987449351405257416645072697524705241634706340691801\"\r\n        \"8738484794721574499400467618147748070459124076328387317591695813989003500644023757451760319519577139737885\"\r\n        \"5225245131489610281183930505814471652984803529090923182694085784707638269035496628523799136557294602131479\"\r\n        \"47441860464478328730207823618208569255693128402975636249104540720367140238522551953792572021484375\"},\r\n    {0x1.fffffffffffffp-681, chars_format::fixed, 733,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019934389\"\r\n        \"9021951328578595405029833584440124539035499641374289257562866496188875259562774152450334666523676875978137\"\r\n        \"1742549502807928181919970235250055079998607533189125733974898702810514833290145395049410483269412681383603\"\r\n        \"7476969589443148998800935236295496140918248152656774635183391627978007001288047514903520639039154279475771\"\r\n        \"0450490262979220562367861011628943305969607058181846365388171569415276538070993257047598273114589204262958\"\r\n        \"9488372092895665746041564723641713851138625680595127249820908144073428047704510390758514404296875\"},\r\n    {0x1.fffffffffffffp-680, chars_format::fixed, 732,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039868779\"\r\n        \"8043902657157190810059667168880249078070999282748578515125732992377750519125548304900669333047353751956274\"\r\n        \"3485099005615856363839940470500110159997215066378251467949797405621029666580290790098820966538825362767207\"\r\n        \"4953939178886297997601870472590992281836496305313549270366783255956014002576095029807041278078308558951542\"\r\n        \"0900980525958441124735722023257886611939214116363692730776343138830553076141986514095196546229178408525917\"\r\n        \"897674418579133149208312944728342770227725136119025449964181628814685609540902078151702880859375\"},\r\n    {0x1.fffffffffffffp-679, chars_format::fixed, 731,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000079737559\"\r\n        \"6087805314314381620119334337760498156141998565497157030251465984755501038251096609801338666094707503912548\"\r\n        \"6970198011231712727679880941000220319994430132756502935899594811242059333160581580197641933077650725534414\"\r\n        \"9907878357772595995203740945181984563672992610627098540733566511912028005152190059614082556156617117903084\"\r\n        \"1801961051916882249471444046515773223878428232727385461552686277661106152283973028190393092458356817051835\"\r\n        \"79534883715826629841662588945668554045545027223805089992836325762937121908180415630340576171875\"},\r\n    {0x1.fffffffffffffp-678, chars_format::fixed, 730,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000159475119\"\r\n        \"2175610628628763240238668675520996312283997130994314060502931969511002076502193219602677332189415007825097\"\r\n        \"3940396022463425455359761882000440639988860265513005871799189622484118666321163160395283866155301451068829\"\r\n        \"9815756715545191990407481890363969127345985221254197081467133023824056010304380119228165112313234235806168\"\r\n        \"3603922103833764498942888093031546447756856465454770923105372555322212304567946056380786184916713634103671\"\r\n        \"5906976743165325968332517789133710809109005444761017998567265152587424381636083126068115234375\"},\r\n    {0x1.fffffffffffffp-677, chars_format::fixed, 729,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000318950238\"\r\n        \"4351221257257526480477337351041992624567994261988628121005863939022004153004386439205354664378830015650194\"\r\n        \"7880792044926850910719523764000881279977720531026011743598379244968237332642326320790567732310602902137659\"\r\n        \"9631513431090383980814963780727938254691970442508394162934266047648112020608760238456330224626468471612336\"\r\n        \"7207844207667528997885776186063092895513712930909541846210745110644424609135892112761572369833427268207343\"\r\n        \"181395348633065193666503557826742161821801088952203599713453030517484876327216625213623046875\"},\r\n    {0x1.fffffffffffffp-676, chars_format::fixed, 728,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000637900476\"\r\n        \"8702442514515052960954674702083985249135988523977256242011727878044008306008772878410709328757660031300389\"\r\n        \"5761584089853701821439047528001762559955441062052023487196758489936474665284652641581135464621205804275319\"\r\n        \"9263026862180767961629927561455876509383940885016788325868532095296224041217520476912660449252936943224673\"\r\n        \"4415688415335057995771552372126185791027425861819083692421490221288849218271784225523144739666854536414686\"\r\n        \"36279069726613038733300711565348432364360217790440719942690606103496975265443325042724609375\"},\r\n    {0x1.fffffffffffffp-675, chars_format::fixed, 727,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001275800953\"\r\n        \"7404885029030105921909349404167970498271977047954512484023455756088016612017545756821418657515320062600779\"\r\n        \"1523168179707403642878095056003525119910882124104046974393516979872949330569305283162270929242411608550639\"\r\n        \"8526053724361535923259855122911753018767881770033576651737064190592448082435040953825320898505873886449346\"\r\n        \"8831376830670115991543104744252371582054851723638167384842980442577698436543568451046289479333709072829372\"\r\n        \"7255813945322607746660142313069686472872043558088143988538121220699395053088665008544921875\"},\r\n    {0x1.fffffffffffffp-674, chars_format::fixed, 726,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002551601907\"\r\n        \"4809770058060211843818698808335940996543954095909024968046911512176033224035091513642837315030640125201558\"\r\n        \"3046336359414807285756190112007050239821764248208093948787033959745898661138610566324541858484823217101279\"\r\n        \"7052107448723071846519710245823506037535763540067153303474128381184896164870081907650641797011747772898693\"\r\n        \"7662753661340231983086209488504743164109703447276334769685960885155396873087136902092578958667418145658745\"\r\n        \"451162789064521549332028462613937294574408711617628797707624244139879010617733001708984375\"},\r\n    {0x1.fffffffffffffp-673, chars_format::fixed, 725,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005103203814\"\r\n        \"9619540116120423687637397616671881993087908191818049936093823024352066448070183027285674630061280250403116\"\r\n        \"6092672718829614571512380224014100479643528496416187897574067919491797322277221132649083716969646434202559\"\r\n        \"4104214897446143693039420491647012075071527080134306606948256762369792329740163815301283594023495545797387\"\r\n        \"5325507322680463966172418977009486328219406894552669539371921770310793746174273804185157917334836291317490\"\r\n        \"90232557812904309866405692522787458914881742323525759541524848827975802123546600341796875\"},\r\n    {0x1.fffffffffffffp-672, chars_format::fixed, 724,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010206407629\"\r\n        \"9239080232240847375274795233343763986175816383636099872187646048704132896140366054571349260122560500806233\"\r\n        \"2185345437659229143024760448028200959287056992832375795148135838983594644554442265298167433939292868405118\"\r\n        \"8208429794892287386078840983294024150143054160268613213896513524739584659480327630602567188046991091594775\"\r\n        \"0651014645360927932344837954018972656438813789105339078743843540621587492348547608370315834669672582634981\"\r\n        \"8046511562580861973281138504557491782976348464705151908304969765595160424709320068359375\"},\r\n    {0x1.fffffffffffffp-671, chars_format::fixed, 723,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020412815259\"\r\n        \"8478160464481694750549590466687527972351632767272199744375292097408265792280732109142698520245121001612466\"\r\n        \"4370690875318458286049520896056401918574113985664751590296271677967189289108884530596334867878585736810237\"\r\n        \"6416859589784574772157681966588048300286108320537226427793027049479169318960655261205134376093982183189550\"\r\n        \"1302029290721855864689675908037945312877627578210678157487687081243174984697095216740631669339345165269963\"\r\n        \"609302312516172394656227700911498356595269692941030381660993953119032084941864013671875\"},\r\n    {0x1.fffffffffffffp-670, chars_format::fixed, 722,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040825630519\"\r\n        \"6956320928963389501099180933375055944703265534544399488750584194816531584561464218285397040490242003224932\"\r\n        \"8741381750636916572099041792112803837148227971329503180592543355934378578217769061192669735757171473620475\"\r\n        \"2833719179569149544315363933176096600572216641074452855586054098958338637921310522410268752187964366379100\"\r\n        \"2604058581443711729379351816075890625755255156421356314975374162486349969394190433481263338678690330539927\"\r\n        \"21860462503234478931245540182299671319053938588206076332198790623806416988372802734375\"},\r\n    {0x1.fffffffffffffp-669, chars_format::fixed, 721,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081651261039\"\r\n        \"3912641857926779002198361866750111889406531069088798977501168389633063169122928436570794080980484006449865\"\r\n        \"7482763501273833144198083584225607674296455942659006361185086711868757156435538122385339471514342947240950\"\r\n        \"5667438359138299088630727866352193201144433282148905711172108197916677275842621044820537504375928732758200\"\r\n        \"5208117162887423458758703632151781251510510312842712629950748324972699938788380866962526677357380661079854\"\r\n        \"4372092500646895786249108036459934263810787717641215266439758124761283397674560546875\"},\r\n    {0x1.fffffffffffffp-668, chars_format::fixed, 720,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000163302522078\"\r\n        \"7825283715853558004396723733500223778813062138177597955002336779266126338245856873141588161960968012899731\"\r\n        \"4965527002547666288396167168451215348592911885318012722370173423737514312871076244770678943028685894481901\"\r\n        \"1334876718276598177261455732704386402288866564297811422344216395833354551685242089641075008751857465516401\"\r\n        \"0416234325774846917517407264303562503021020625685425259901496649945399877576761733925053354714761322159708\"\r\n        \"874418500129379157249821607291986852762157543528243053287951624952256679534912109375\"},\r\n    {0x1.fffffffffffffp-667, chars_format::fixed, 719,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000326605044157\"\r\n        \"5650567431707116008793447467000447557626124276355195910004673558532252676491713746283176323921936025799462\"\r\n        \"9931054005095332576792334336902430697185823770636025444740346847475028625742152489541357886057371788963802\"\r\n        \"2669753436553196354522911465408772804577733128595622844688432791666709103370484179282150017503714931032802\"\r\n        \"0832468651549693835034814528607125006042041251370850519802993299890799755153523467850106709429522644319417\"\r\n        \"74883700025875831449964321458397370552431508705648610657590324990451335906982421875\"},\r\n    {0x1.fffffffffffffp-666, chars_format::fixed, 718,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000653210088315\"\r\n        \"1301134863414232017586894934000895115252248552710391820009347117064505352983427492566352647843872051598925\"\r\n        \"9862108010190665153584668673804861394371647541272050889480693694950057251484304979082715772114743577927604\"\r\n        \"5339506873106392709045822930817545609155466257191245689376865583333418206740968358564300035007429862065604\"\r\n        \"1664937303099387670069629057214250012084082502741701039605986599781599510307046935700213418859045288638835\"\r\n        \"4976740005175166289992864291679474110486301741129722131518064998090267181396484375\"},\r\n    {0x1.fffffffffffffp-665, chars_format::fixed, 717,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001306420176630\"\r\n        \"2602269726828464035173789868001790230504497105420783640018694234129010705966854985132705295687744103197851\"\r\n        \"9724216020381330307169337347609722788743295082544101778961387389900114502968609958165431544229487155855209\"\r\n        \"0679013746212785418091645861635091218310932514382491378753731166666836413481936717128600070014859724131208\"\r\n        \"3329874606198775340139258114428500024168165005483402079211973199563199020614093871400426837718090577277670\"\r\n        \"995348001035033257998572858335894822097260348225944426303612999618053436279296875\"},\r\n    {0x1.fffffffffffffp-664, chars_format::fixed, 716,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002612840353260\"\r\n        \"5204539453656928070347579736003580461008994210841567280037388468258021411933709970265410591375488206395703\"\r\n        \"9448432040762660614338674695219445577486590165088203557922774779800229005937219916330863088458974311710418\"\r\n        \"1358027492425570836183291723270182436621865028764982757507462333333672826963873434257200140029719448262416\"\r\n        \"6659749212397550680278516228857000048336330010966804158423946399126398041228187742800853675436181154555341\"\r\n        \"99069600207006651599714571667178964419452069645188885260722599923610687255859375\"},\r\n    {0x1.fffffffffffffp-663, chars_format::fixed, 715,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005225680706521\"\r\n        \"0409078907313856140695159472007160922017988421683134560074776936516042823867419940530821182750976412791407\"\r\n        \"8896864081525321228677349390438891154973180330176407115845549559600458011874439832661726176917948623420836\"\r\n        \"2716054984851141672366583446540364873243730057529965515014924666667345653927746868514400280059438896524833\"\r\n        \"3319498424795101360557032457714000096672660021933608316847892798252796082456375485601707350872362309110683\"\r\n        \"9813920041401330319942914333435792883890413929037777052144519984722137451171875\"},\r\n    {0x1.fffffffffffffp-662, chars_format::fixed, 714,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010451361413042\"\r\n        \"0818157814627712281390318944014321844035976843366269120149553873032085647734839881061642365501952825582815\"\r\n        \"7793728163050642457354698780877782309946360660352814231691099119200916023748879665323452353835897246841672\"\r\n        \"5432109969702283344733166893080729746487460115059931030029849333334691307855493737028800560118877793049666\"\r\n        \"6638996849590202721114064915428000193345320043867216633695785596505592164912750971203414701744724618221367\"\r\n        \"962784008280266063988582866687158576778082785807555410428903996944427490234375\"},\r\n    {0x1.fffffffffffffp-661, chars_format::fixed, 713,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020902722826084\"\r\n        \"1636315629255424562780637888028643688071953686732538240299107746064171295469679762123284731003905651165631\"\r\n        \"5587456326101284914709397561755564619892721320705628463382198238401832047497759330646904707671794493683345\"\r\n        \"0864219939404566689466333786161459492974920230119862060059698666669382615710987474057601120237755586099333\"\r\n        \"3277993699180405442228129830856000386690640087734433267391571193011184329825501942406829403489449236442735\"\r\n        \"92556801656053212797716573337431715355616557161511082085780799388885498046875\"},\r\n    {0x1.fffffffffffffp-660, chars_format::fixed, 712,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041805445652168\"\r\n        \"3272631258510849125561275776057287376143907373465076480598215492128342590939359524246569462007811302331263\"\r\n        \"1174912652202569829418795123511129239785442641411256926764396476803664094995518661293809415343588987366690\"\r\n        \"1728439878809133378932667572322918985949840460239724120119397333338765231421974948115202240475511172198666\"\r\n        \"6555987398360810884456259661712000773381280175468866534783142386022368659651003884813658806978898472885471\"\r\n        \"8511360331210642559543314667486343071123311432302216417156159877777099609375\"},\r\n    {0x1.fffffffffffffp-659, chars_format::fixed, 711,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083610891304336\"\r\n        \"6545262517021698251122551552114574752287814746930152961196430984256685181878719048493138924015622604662526\"\r\n        \"2349825304405139658837590247022258479570885282822513853528792953607328189991037322587618830687177974733380\"\r\n        \"3456879757618266757865335144645837971899680920479448240238794666677530462843949896230404480951022344397333\"\r\n        \"3111974796721621768912519323424001546762560350937733069566284772044737319302007769627317613957796945770943\"\r\n        \"702272066242128511908662933497268614224662286460443283431231975555419921875\"},\r\n    {0x1.fffffffffffffp-658, chars_format::fixed, 710,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000167221782608673\"\r\n        \"3090525034043396502245103104229149504575629493860305922392861968513370363757438096986277848031245209325052\"\r\n        \"4699650608810279317675180494044516959141770565645027707057585907214656379982074645175237661374355949466760\"\r\n        \"6913759515236533515730670289291675943799361840958896480477589333355060925687899792460808961902044688794666\"\r\n        \"6223949593443243537825038646848003093525120701875466139132569544089474638604015539254635227915593891541887\"\r\n        \"40454413248425702381732586699453722844932457292088656686246395111083984375\"},\r\n    {0x1.fffffffffffffp-657, chars_format::fixed, 709,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000334443565217346\"\r\n        \"6181050068086793004490206208458299009151258987720611844785723937026740727514876193972555696062490418650104\"\r\n        \"9399301217620558635350360988089033918283541131290055414115171814429312759964149290350475322748711898933521\"\r\n        \"3827519030473067031461340578583351887598723681917792960955178666710121851375799584921617923804089377589333\"\r\n        \"2447899186886487075650077293696006187050241403750932278265139088178949277208031078509270455831187783083774\"\r\n        \"8090882649685140476346517339890744568986491458417731337249279022216796875\"},\r\n    {0x1.fffffffffffffp-656, chars_format::fixed, 708,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000668887130434693\"\r\n        \"2362100136173586008980412416916598018302517975441223689571447874053481455029752387945111392124980837300209\"\r\n        \"8798602435241117270700721976178067836567082262580110828230343628858625519928298580700950645497423797867042\"\r\n        \"7655038060946134062922681157166703775197447363835585921910357333420243702751599169843235847608178755178666\"\r\n        \"4895798373772974151300154587392012374100482807501864556530278176357898554416062157018540911662375566167549\"\r\n        \"618176529937028095269303467978148913797298291683546267449855804443359375\"},\r\n    {0x1.fffffffffffffp-655, chars_format::fixed, 707,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001337774260869386\"\r\n        \"4724200272347172017960824833833196036605035950882447379142895748106962910059504775890222784249961674600419\"\r\n        \"7597204870482234541401443952356135673134164525160221656460687257717251039856597161401901290994847595734085\"\r\n        \"5310076121892268125845362314333407550394894727671171843820714666840487405503198339686471695216357510357332\"\r\n        \"9791596747545948302600309174784024748200965615003729113060556352715797108832124314037081823324751132335099\"\r\n        \"23635305987405619053860693595629782759459658336709253489971160888671875\"},\r\n    {0x1.fffffffffffffp-654, chars_format::fixed, 706,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002675548521738772\"\r\n        \"9448400544694344035921649667666392073210071901764894758285791496213925820119009551780445568499923349200839\"\r\n        \"5194409740964469082802887904712271346268329050320443312921374515434502079713194322803802581989695191468171\"\r\n        \"0620152243784536251690724628666815100789789455342343687641429333680974811006396679372943390432715020714665\"\r\n        \"9583193495091896605200618349568049496401931230007458226121112705431594217664248628074163646649502264670198\"\r\n        \"4727061197481123810772138719125956551891931667341850697994232177734375\"},\r\n    {0x1.fffffffffffffp-653, chars_format::fixed, 705,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005351097043477545\"\r\n        \"8896801089388688071843299335332784146420143803529789516571582992427851640238019103560891136999846698401679\"\r\n        \"0388819481928938165605775809424542692536658100640886625842749030869004159426388645607605163979390382936342\"\r\n        \"1240304487569072503381449257333630201579578910684687375282858667361949622012793358745886780865430041429331\"\r\n        \"9166386990183793210401236699136098992803862460014916452242225410863188435328497256148327293299004529340396\"\r\n        \"945412239496224762154427743825191310378386333468370139598846435546875\"},\r\n    {0x1.fffffffffffffp-652, chars_format::fixed, 704,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010702194086955091\"\r\n        \"7793602178777376143686598670665568292840287607059579033143165984855703280476038207121782273999693396803358\"\r\n        \"0777638963857876331211551618849085385073316201281773251685498061738008318852777291215210327958780765872684\"\r\n        \"2480608975138145006762898514667260403159157821369374750565717334723899244025586717491773561730860082858663\"\r\n        \"8332773980367586420802473398272197985607724920029832904484450821726376870656994512296654586598009058680793\"\r\n        \"89082447899244952430885548765038262075677266693674027919769287109375\"},\r\n    {0x1.fffffffffffffp-651, chars_format::fixed, 703,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021404388173910183\"\r\n        \"5587204357554752287373197341331136585680575214119158066286331969711406560952076414243564547999386793606716\"\r\n        \"1555277927715752662423103237698170770146632402563546503370996123476016637705554582430420655917561531745368\"\r\n        \"4961217950276290013525797029334520806318315642738749501131434669447798488051173434983547123461720165717327\"\r\n        \"6665547960735172841604946796544395971215449840059665808968901643452753741313989024593309173196018117361587\"\r\n        \"7816489579848990486177109753007652415135453338734805583953857421875\"},\r\n    {0x1.fffffffffffffp-650, chars_format::fixed, 702,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042808776347820367\"\r\n        \"1174408715109504574746394682662273171361150428238316132572663939422813121904152828487129095998773587213432\"\r\n        \"3110555855431505324846206475396341540293264805127093006741992246952033275411109164860841311835123063490736\"\r\n        \"9922435900552580027051594058669041612636631285477499002262869338895596976102346869967094246923440331434655\"\r\n        \"3331095921470345683209893593088791942430899680119331617937803286905507482627978049186618346392036234723175\"\r\n        \"563297915969798097235421950601530483027090667746961116790771484375\"},\r\n    {0x1.fffffffffffffp-649, chars_format::fixed, 701,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085617552695640734\"\r\n        \"2348817430219009149492789365324546342722300856476632265145327878845626243808305656974258191997547174426864\"\r\n        \"6221111710863010649692412950792683080586529610254186013483984493904066550822218329721682623670246126981473\"\r\n        \"9844871801105160054103188117338083225273262570954998004525738677791193952204693739934188493846880662869310\"\r\n        \"6662191842940691366419787186177583884861799360238663235875606573811014965255956098373236692784072469446351\"\r\n        \"12659583193959619447084390120306096605418133549392223358154296875\"},\r\n    {0x1.fffffffffffffp-648, chars_format::fixed, 700,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000171235105391281468\"\r\n        \"4697634860438018298985578730649092685444601712953264530290655757691252487616611313948516383995094348853729\"\r\n        \"2442223421726021299384825901585366161173059220508372026967968987808133101644436659443365247340492253962947\"\r\n        \"9689743602210320108206376234676166450546525141909996009051477355582387904409387479868376987693761325738621\"\r\n        \"3324383685881382732839574372355167769723598720477326471751213147622029930511912196746473385568144938892702\"\r\n        \"2531916638791923889416878024061219321083626709878444671630859375\"},\r\n    {0x1.fffffffffffffp-647, chars_format::fixed, 699,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342470210782562936\"\r\n        \"9395269720876036597971157461298185370889203425906529060581311515382504975233222627897032767990188697707458\"\r\n        \"4884446843452042598769651803170732322346118441016744053935937975616266203288873318886730494680984507925895\"\r\n        \"9379487204420640216412752469352332901093050283819992018102954711164775808818774959736753975387522651477242\"\r\n        \"6648767371762765465679148744710335539447197440954652943502426295244059861023824393492946771136289877785404\"\r\n        \"506383327758384777883375604812243864216725341975688934326171875\"},\r\n    {0x1.fffffffffffffp-646, chars_format::fixed, 698,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000684940421565125873\"\r\n        \"8790539441752073195942314922596370741778406851813058121162623030765009950466445255794065535980377395414916\"\r\n        \"9768893686904085197539303606341464644692236882033488107871875951232532406577746637773460989361969015851791\"\r\n        \"8758974408841280432825504938704665802186100567639984036205909422329551617637549919473507950775045302954485\"\r\n        \"3297534743525530931358297489420671078894394881909305887004852590488119722047648786985893542272579755570809\"\r\n        \"01276665551676955576675120962448772843345068395137786865234375\"},\r\n    {0x1.fffffffffffffp-645, chars_format::fixed, 697,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001369880843130251747\"\r\n        \"7581078883504146391884629845192741483556813703626116242325246061530019900932890511588131071960754790829833\"\r\n        \"9537787373808170395078607212682929289384473764066976215743751902465064813155493275546921978723938031703583\"\r\n        \"7517948817682560865651009877409331604372201135279968072411818844659103235275099838947015901550090605908970\"\r\n        \"6595069487051061862716594978841342157788789763818611774009705180976239444095297573971787084545159511141618\"\r\n        \"0255333110335391115335024192489754568669013679027557373046875\"},\r\n    {0x1.fffffffffffffp-644, chars_format::fixed, 696,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000002739761686260503495\"\r\n        \"5162157767008292783769259690385482967113627407252232484650492123060039801865781023176262143921509581659667\"\r\n        \"9075574747616340790157214425365858578768947528133952431487503804930129626310986551093843957447876063407167\"\r\n        \"5035897635365121731302019754818663208744402270559936144823637689318206470550199677894031803100181211817941\"\r\n        \"3190138974102123725433189957682684315577579527637223548019410361952478888190595147943574169090319022283236\"\r\n        \"051066622067078223067004838497950913733802735805511474609375\"},\r\n    {0x1.fffffffffffffp-643, chars_format::fixed, 695,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000005479523372521006991\"\r\n        \"0324315534016585567538519380770965934227254814504464969300984246120079603731562046352524287843019163319335\"\r\n        \"8151149495232681580314428850731717157537895056267904862975007609860259252621973102187687914895752126814335\"\r\n        \"0071795270730243462604039509637326417488804541119872289647275378636412941100399355788063606200362423635882\"\r\n        \"6380277948204247450866379915365368631155159055274447096038820723904957776381190295887148338180638044566472\"\r\n        \"10213324413415644613400967699590182746760547161102294921875\"},\r\n    {0x1.fffffffffffffp-642, chars_format::fixed, 694,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000010959046745042013982\"\r\n        \"0648631068033171135077038761541931868454509629008929938601968492240159207463124092705048575686038326638671\"\r\n        \"6302298990465363160628857701463434315075790112535809725950015219720518505243946204375375829791504253628670\"\r\n        \"0143590541460486925208079019274652834977609082239744579294550757272825882200798711576127212400724847271765\"\r\n        \"2760555896408494901732759830730737262310318110548894192077641447809915552762380591774296676361276089132944\"\r\n        \"2042664882683128922680193539918036549352109432220458984375\"},\r\n    {0x1.fffffffffffffp-641, chars_format::fixed, 693,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000021918093490084027964\"\r\n        \"1297262136066342270154077523083863736909019258017859877203936984480318414926248185410097151372076653277343\"\r\n        \"2604597980930726321257715402926868630151580225071619451900030439441037010487892408750751659583008507257340\"\r\n        \"0287181082920973850416158038549305669955218164479489158589101514545651764401597423152254424801449694543530\"\r\n        \"5521111792816989803465519661461474524620636221097788384155282895619831105524761183548593352722552178265888\"\r\n        \"408532976536625784536038707983607309870421886444091796875\"},\r\n    {0x1.fffffffffffffp-640, chars_format::fixed, 692,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000043836186980168055928\"\r\n        \"2594524272132684540308155046167727473818038516035719754407873968960636829852496370820194302744153306554686\"\r\n        \"5209195961861452642515430805853737260303160450143238903800060878882074020975784817501503319166017014514680\"\r\n        \"0574362165841947700832316077098611339910436328958978317178203029091303528803194846304508849602899389087061\"\r\n        \"1042223585633979606931039322922949049241272442195576768310565791239662211049522367097186705445104356531776\"\r\n        \"81706595307325156907207741596721461974084377288818359375\"},\r\n    {0x1.fffffffffffffp-639, chars_format::fixed, 691,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000087672373960336111856\"\r\n        \"5189048544265369080616310092335454947636077032071439508815747937921273659704992741640388605488306613109373\"\r\n        \"0418391923722905285030861611707474520606320900286477807600121757764148041951569635003006638332034029029360\"\r\n        \"1148724331683895401664632154197222679820872657917956634356406058182607057606389692609017699205798778174122\"\r\n        \"2084447171267959213862078645845898098482544884391153536621131582479324422099044734194373410890208713063553\"\r\n        \"6341319061465031381441548319344292394816875457763671875\"},\r\n    {0x1.fffffffffffffp-638, chars_format::fixed, 690,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000175344747920672223713\"\r\n        \"0378097088530738161232620184670909895272154064142879017631495875842547319409985483280777210976613226218746\"\r\n        \"0836783847445810570061723223414949041212641800572955615200243515528296083903139270006013276664068058058720\"\r\n        \"2297448663367790803329264308394445359641745315835913268712812116365214115212779385218035398411597556348244\"\r\n        \"4168894342535918427724157291691796196965089768782307073242263164958648844198089468388746821780417426127107\"\r\n        \"268263812293006276288309663868858478963375091552734375\"},\r\n    {0x1.fffffffffffffp-637, chars_format::fixed, 689,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000350689495841344447426\"\r\n        \"0756194177061476322465240369341819790544308128285758035262991751685094638819970966561554421953226452437492\"\r\n        \"1673567694891621140123446446829898082425283601145911230400487031056592167806278540012026553328136116117440\"\r\n        \"4594897326735581606658528616788890719283490631671826537425624232730428230425558770436070796823195112696488\"\r\n        \"8337788685071836855448314583383592393930179537564614146484526329917297688396178936777493643560834852254214\"\r\n        \"53652762458601255257661932773771695792675018310546875\"},\r\n    {0x1.fffffffffffffp-636, chars_format::fixed, 688,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000701378991682688894852\"\r\n        \"1512388354122952644930480738683639581088616256571516070525983503370189277639941933123108843906452904874984\"\r\n        \"3347135389783242280246892893659796164850567202291822460800974062113184335612557080024053106656272232234880\"\r\n        \"9189794653471163213317057233577781438566981263343653074851248465460856460851117540872141593646390225392977\"\r\n        \"6675577370143673710896629166767184787860359075129228292969052659834595376792357873554987287121669704508429\"\r\n        \"0730552491720251051532386554754339158535003662109375\"},\r\n    {0x1.fffffffffffffp-635, chars_format::fixed, 687,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000001402757983365377789704\"\r\n        \"3024776708245905289860961477367279162177232513143032141051967006740378555279883866246217687812905809749968\"\r\n        \"6694270779566484560493785787319592329701134404583644921601948124226368671225114160048106213312544464469761\"\r\n        \"8379589306942326426634114467155562877133962526687306149702496930921712921702235081744283187292780450785955\"\r\n        \"3351154740287347421793258333534369575720718150258456585938105319669190753584715747109974574243339409016858\"\r\n        \"146110498344050210306477310950867831707000732421875\"},\r\n    {0x1.fffffffffffffp-634, chars_format::fixed, 686,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000002805515966730755579408\"\r\n        \"6049553416491810579721922954734558324354465026286064282103934013480757110559767732492435375625811619499937\"\r\n        \"3388541559132969120987571574639184659402268809167289843203896248452737342450228320096212426625088928939523\"\r\n        \"6759178613884652853268228934311125754267925053374612299404993861843425843404470163488566374585560901571910\"\r\n        \"6702309480574694843586516667068739151441436300516913171876210639338381507169431494219949148486678818033716\"\r\n        \"29222099668810042061295462190173566341400146484375\"},\r\n    {0x1.fffffffffffffp-633, chars_format::fixed, 685,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000005611031933461511158817\"\r\n        \"2099106832983621159443845909469116648708930052572128564207868026961514221119535464984870751251623238999874\"\r\n        \"6777083118265938241975143149278369318804537618334579686407792496905474684900456640192424853250177857879047\"\r\n        \"3518357227769305706536457868622251508535850106749224598809987723686851686808940326977132749171121803143821\"\r\n        \"3404618961149389687173033334137478302882872601033826343752421278676763014338862988439898296973357636067432\"\r\n        \"5844419933762008412259092438034713268280029296875\"},\r\n    {0x1.fffffffffffffp-632, chars_format::fixed, 684,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000011222063866923022317634\"\r\n        \"4198213665967242318887691818938233297417860105144257128415736053923028442239070929969741502503246477999749\"\r\n        \"3554166236531876483950286298556738637609075236669159372815584993810949369800913280384849706500355715758094\"\r\n        \"7036714455538611413072915737244503017071700213498449197619975447373703373617880653954265498342243606287642\"\r\n        \"6809237922298779374346066668274956605765745202067652687504842557353526028677725976879796593946715272134865\"\r\n        \"168883986752401682451818487606942653656005859375\"},\r\n    {0x1.fffffffffffffp-631, chars_format::fixed, 683,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000022444127733846044635268\"\r\n        \"8396427331934484637775383637876466594835720210288514256831472107846056884478141859939483005006492955999498\"\r\n        \"7108332473063752967900572597113477275218150473338318745631169987621898739601826560769699413000711431516189\"\r\n        \"4073428911077222826145831474489006034143400426996898395239950894747406747235761307908530996684487212575285\"\r\n        \"3618475844597558748692133336549913211531490404135305375009685114707052057355451953759593187893430544269730\"\r\n        \"33776797350480336490363697521388530731201171875\"},\r\n    {0x1.fffffffffffffp-630, chars_format::fixed, 682,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000044888255467692089270537\"\r\n        \"6792854663868969275550767275752933189671440420577028513662944215692113768956283719878966010012985911998997\"\r\n        \"4216664946127505935801145194226954550436300946676637491262339975243797479203653121539398826001422863032378\"\r\n        \"8146857822154445652291662948978012068286800853993796790479901789494813494471522615817061993368974425150570\"\r\n        \"7236951689195117497384266673099826423062980808270610750019370229414104114710903907519186375786861088539460\"\r\n        \"6755359470096067298072739504277706146240234375\"},\r\n    {0x1.fffffffffffffp-629, chars_format::fixed, 681,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000089776510935384178541075\"\r\n        \"3585709327737938551101534551505866379342880841154057027325888431384227537912567439757932020025971823997994\"\r\n        \"8433329892255011871602290388453909100872601893353274982524679950487594958407306243078797652002845726064757\"\r\n        \"6293715644308891304583325897956024136573601707987593580959803578989626988943045231634123986737948850301141\"\r\n        \"4473903378390234994768533346199652846125961616541221500038740458828208229421807815038372751573722177078921\"\r\n        \"351071894019213459614547900855541229248046875\"},\r\n    {0x1.fffffffffffffp-628, chars_format::fixed, 680,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000179553021870768357082150\"\r\n        \"7171418655475877102203069103011732758685761682308114054651776862768455075825134879515864040051943647995989\"\r\n        \"6866659784510023743204580776907818201745203786706549965049359900975189916814612486157595304005691452129515\"\r\n        \"2587431288617782609166651795912048273147203415975187161919607157979253977886090463268247973475897700602282\"\r\n        \"8947806756780469989537066692399305692251923233082443000077480917656416458843615630076745503147444354157842\"\r\n        \"70214378803842691922909580171108245849609375\"},\r\n    {0x1.fffffffffffffp-627, chars_format::fixed, 679,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000359106043741536714164301\"\r\n        \"4342837310951754204406138206023465517371523364616228109303553725536910151650269759031728080103887295991979\"\r\n        \"3733319569020047486409161553815636403490407573413099930098719801950379833629224972315190608011382904259030\"\r\n        \"5174862577235565218333303591824096546294406831950374323839214315958507955772180926536495946951795401204565\"\r\n        \"7895613513560939979074133384798611384503846466164886000154961835312832917687231260153491006294888708315685\"\r\n        \"4042875760768538384581916034221649169921875\"},\r\n    {0x1.fffffffffffffp-626, chars_format::fixed, 678,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000718212087483073428328602\"\r\n        \"8685674621903508408812276412046931034743046729232456218607107451073820303300539518063456160207774591983958\"\r\n        \"7466639138040094972818323107631272806980815146826199860197439603900759667258449944630381216022765808518061\"\r\n        \"0349725154471130436666607183648193092588813663900748647678428631917015911544361853072991893903590802409131\"\r\n        \"5791227027121879958148266769597222769007692932329772000309923670625665835374462520306982012589777416631370\"\r\n        \"808575152153707676916383206844329833984375\"},\r\n    {0x1.fffffffffffffp-625, chars_format::fixed, 677,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000001436424174966146856657205\"\r\n        \"7371349243807016817624552824093862069486093458464912437214214902147640606601079036126912320415549183967917\"\r\n        \"4933278276080189945636646215262545613961630293652399720394879207801519334516899889260762432045531617036122\"\r\n        \"0699450308942260873333214367296386185177627327801497295356857263834031823088723706145983787807181604818263\"\r\n        \"1582454054243759916296533539194445538015385864659544000619847341251331670748925040613964025179554833262741\"\r\n        \"61715030430741535383276641368865966796875\"},\r\n    {0x1.fffffffffffffp-624, chars_format::fixed, 676,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000002872848349932293713314411\"\r\n        \"4742698487614033635249105648187724138972186916929824874428429804295281213202158072253824640831098367935834\"\r\n        \"9866556552160379891273292430525091227923260587304799440789758415603038669033799778521524864091063234072244\"\r\n        \"1398900617884521746666428734592772370355254655602994590713714527668063646177447412291967575614363209636526\"\r\n        \"3164908108487519832593067078388891076030771729319088001239694682502663341497850081227928050359109666525483\"\r\n        \"2343006086148307076655328273773193359375\"},\r\n    {0x1.fffffffffffffp-623, chars_format::fixed, 675,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000005745696699864587426628822\"\r\n        \"9485396975228067270498211296375448277944373833859649748856859608590562426404316144507649281662196735871669\"\r\n        \"9733113104320759782546584861050182455846521174609598881579516831206077338067599557043049728182126468144488\"\r\n        \"2797801235769043493332857469185544740710509311205989181427429055336127292354894824583935151228726419273052\"\r\n        \"6329816216975039665186134156777782152061543458638176002479389365005326682995700162455856100718219333050966\"\r\n        \"468601217229661415331065654754638671875\"},\r\n    {0x1.fffffffffffffp-622, chars_format::fixed, 674,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000011491393399729174853257645\"\r\n        \"8970793950456134540996422592750896555888747667719299497713719217181124852808632289015298563324393471743339\"\r\n        \"9466226208641519565093169722100364911693042349219197763159033662412154676135199114086099456364252936288976\"\r\n        \"5595602471538086986665714938371089481421018622411978362854858110672254584709789649167870302457452838546105\"\r\n        \"2659632433950079330372268313555564304123086917276352004958778730010653365991400324911712201436438666101932\"\r\n        \"93720243445932283066213130950927734375\"},\r\n    {0x1.fffffffffffffp-621, chars_format::fixed, 673,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000022982786799458349706515291\"\r\n        \"7941587900912269081992845185501793111777495335438598995427438434362249705617264578030597126648786943486679\"\r\n        \"8932452417283039130186339444200729823386084698438395526318067324824309352270398228172198912728505872577953\"\r\n        \"1191204943076173973331429876742178962842037244823956725709716221344509169419579298335740604914905677092210\"\r\n        \"5319264867900158660744536627111128608246173834552704009917557460021306731982800649823424402872877332203865\"\r\n        \"8744048689186456613242626190185546875\"},\r\n    {0x1.fffffffffffffp-620, chars_format::fixed, 672,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000045965573598916699413030583\"\r\n        \"5883175801824538163985690371003586223554990670877197990854876868724499411234529156061194253297573886973359\"\r\n        \"7864904834566078260372678888401459646772169396876791052636134649648618704540796456344397825457011745155906\"\r\n        \"2382409886152347946662859753484357925684074489647913451419432442689018338839158596671481209829811354184421\"\r\n        \"0638529735800317321489073254222257216492347669105408019835114920042613463965601299646848805745754664407731\"\r\n        \"748809737837291322648525238037109375\"},\r\n    {0x1.fffffffffffffp-619, chars_format::fixed, 671,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000091931147197833398826061167\"\r\n        \"1766351603649076327971380742007172447109981341754395981709753737448998822469058312122388506595147773946719\"\r\n        \"5729809669132156520745357776802919293544338793753582105272269299297237409081592912688795650914023490311812\"\r\n        \"4764819772304695893325719506968715851368148979295826902838864885378036677678317193342962419659622708368842\"\r\n        \"1277059471600634642978146508444514432984695338210816039670229840085226927931202599293697611491509328815463\"\r\n        \"49761947567458264529705047607421875\"},\r\n    {0x1.fffffffffffffp-618, chars_format::fixed, 670,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000183862294395666797652122334\"\r\n        \"3532703207298152655942761484014344894219962683508791963419507474897997644938116624244777013190295547893439\"\r\n        \"1459619338264313041490715553605838587088677587507164210544538598594474818163185825377591301828046980623624\"\r\n        \"9529639544609391786651439013937431702736297958591653805677729770756073355356634386685924839319245416737684\"\r\n        \"2554118943201269285956293016889028865969390676421632079340459680170453855862405198587395222983018657630926\"\r\n        \"9952389513491652905941009521484375\"},\r\n    {0x1.fffffffffffffp-617, chars_format::fixed, 669,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000367724588791333595304244668\"\r\n        \"7065406414596305311885522968028689788439925367017583926839014949795995289876233248489554026380591095786878\"\r\n        \"2919238676528626082981431107211677174177355175014328421089077197188949636326371650755182603656093961247249\"\r\n        \"9059279089218783573302878027874863405472595917183307611355459541512146710713268773371849678638490833475368\"\r\n        \"5108237886402538571912586033778057731938781352843264158680919360340907711724810397174790445966037315261853\"\r\n        \"990477902698330581188201904296875\"},\r\n    {0x1.fffffffffffffp-616, chars_format::fixed, 668,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000735449177582667190608489337\"\r\n        \"4130812829192610623771045936057379576879850734035167853678029899591990579752466496979108052761182191573756\"\r\n        \"5838477353057252165962862214423354348354710350028656842178154394377899272652743301510365207312187922494499\"\r\n        \"8118558178437567146605756055749726810945191834366615222710919083024293421426537546743699357276981666950737\"\r\n        \"0216475772805077143825172067556115463877562705686528317361838720681815423449620794349580891932074630523707\"\r\n        \"98095580539666116237640380859375\"},\r\n    {0x1.fffffffffffffp-615, chars_format::fixed, 667,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000001470898355165334381216978674\"\r\n        \"8261625658385221247542091872114759153759701468070335707356059799183981159504932993958216105522364383147513\"\r\n        \"1676954706114504331925724428846708696709420700057313684356308788755798545305486603020730414624375844988999\"\r\n        \"6237116356875134293211512111499453621890383668733230445421838166048586842853075093487398714553963333901474\"\r\n        \"0432951545610154287650344135112230927755125411373056634723677441363630846899241588699161783864149261047415\"\r\n        \"9619116107933223247528076171875\"},\r\n    {0x1.fffffffffffffp-614, chars_format::fixed, 666,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000002941796710330668762433957349\"\r\n        \"6523251316770442495084183744229518307519402936140671414712119598367962319009865987916432211044728766295026\"\r\n        \"3353909412229008663851448857693417393418841400114627368712617577511597090610973206041460829248751689977999\"\r\n        \"2474232713750268586423024222998907243780767337466460890843676332097173685706150186974797429107926667802948\"\r\n        \"0865903091220308575300688270224461855510250822746113269447354882727261693798483177398323567728298522094831\"\r\n        \"923823221586644649505615234375\"},\r\n    {0x1.fffffffffffffp-613, chars_format::fixed, 665,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000005883593420661337524867914699\"\r\n        \"3046502633540884990168367488459036615038805872281342829424239196735924638019731975832864422089457532590052\"\r\n        \"6707818824458017327702897715386834786837682800229254737425235155023194181221946412082921658497503379955998\"\r\n        \"4948465427500537172846048445997814487561534674932921781687352664194347371412300373949594858215853335605896\"\r\n        \"1731806182440617150601376540448923711020501645492226538894709765454523387596966354796647135456597044189663\"\r\n        \"84764644317328929901123046875\"},\r\n    {0x1.fffffffffffffp-612, chars_format::fixed, 664,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000011767186841322675049735829398\"\r\n        \"6093005267081769980336734976918073230077611744562685658848478393471849276039463951665728844178915065180105\"\r\n        \"3415637648916034655405795430773669573675365600458509474850470310046388362443892824165843316995006759911996\"\r\n        \"9896930855001074345692096891995628975123069349865843563374705328388694742824600747899189716431706671211792\"\r\n        \"3463612364881234301202753080897847422041003290984453077789419530909046775193932709593294270913194088379327\"\r\n        \"6952928863465785980224609375\"},\r\n    {0x1.fffffffffffffp-611, chars_format::fixed, 663,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000023534373682645350099471658797\"\r\n        \"2186010534163539960673469953836146460155223489125371317696956786943698552078927903331457688357830130360210\"\r\n        \"6831275297832069310811590861547339147350731200917018949700940620092776724887785648331686633990013519823993\"\r\n        \"9793861710002148691384193783991257950246138699731687126749410656777389485649201495798379432863413342423584\"\r\n        \"6927224729762468602405506161795694844082006581968906155578839061818093550387865419186588541826388176758655\"\r\n        \"390585772693157196044921875\"},\r\n    {0x1.fffffffffffffp-610, chars_format::fixed, 662,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000047068747365290700198943317594\"\r\n        \"4372021068327079921346939907672292920310446978250742635393913573887397104157855806662915376715660260720421\"\r\n        \"3662550595664138621623181723094678294701462401834037899401881240185553449775571296663373267980027039647987\"\r\n        \"9587723420004297382768387567982515900492277399463374253498821313554778971298402991596758865726826684847169\"\r\n        \"3854449459524937204811012323591389688164013163937812311157678123636187100775730838373177083652776353517310\"\r\n        \"78117154538631439208984375\"},\r\n    {0x1.fffffffffffffp-609, chars_format::fixed, 661,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000094137494730581400397886635188\"\r\n        \"8744042136654159842693879815344585840620893956501485270787827147774794208315711613325830753431320521440842\"\r\n        \"7325101191328277243246363446189356589402924803668075798803762480371106899551142593326746535960054079295975\"\r\n        \"9175446840008594765536775135965031800984554798926748506997642627109557942596805983193517731453653369694338\"\r\n        \"7708898919049874409622024647182779376328026327875624622315356247272374201551461676746354167305552707034621\"\r\n        \"5623430907726287841796875\"},\r\n    {0x1.fffffffffffffp-608, chars_format::fixed, 660,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000188274989461162800795773270377\"\r\n        \"7488084273308319685387759630689171681241787913002970541575654295549588416631423226651661506862641042881685\"\r\n        \"4650202382656554486492726892378713178805849607336151597607524960742213799102285186653493071920108158591951\"\r\n        \"8350893680017189531073550271930063601969109597853497013995285254219115885193611966387035462907306739388677\"\r\n        \"5417797838099748819244049294365558752656052655751249244630712494544748403102923353492708334611105414069243\"\r\n        \"124686181545257568359375\"},\r\n    {0x1.fffffffffffffp-607, chars_format::fixed, 659,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000376549978922325601591546540755\"\r\n        \"4976168546616639370775519261378343362483575826005941083151308591099176833262846453303323013725282085763370\"\r\n        \"9300404765313108972985453784757426357611699214672303195215049921484427598204570373306986143840216317183903\"\r\n        \"6701787360034379062147100543860127203938219195706994027990570508438231770387223932774070925814613478777355\"\r\n        \"0835595676199497638488098588731117505312105311502498489261424989089496806205846706985416669222210828138486\"\r\n        \"24937236309051513671875\"},\r\n    {0x1.fffffffffffffp-606, chars_format::fixed, 658,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000753099957844651203183093081510\"\r\n        \"9952337093233278741551038522756686724967151652011882166302617182198353666525692906606646027450564171526741\"\r\n        \"8600809530626217945970907569514852715223398429344606390430099842968855196409140746613972287680432634367807\"\r\n        \"3403574720068758124294201087720254407876438391413988055981141016876463540774447865548141851629226957554710\"\r\n        \"1671191352398995276976197177462235010624210623004996978522849978178993612411693413970833338444421656276972\"\r\n        \"4987447261810302734375\"},\r\n    {0x1.fffffffffffffp-605, chars_format::fixed, 657,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000001506199915689302406366186163021\"\r\n        \"9904674186466557483102077045513373449934303304023764332605234364396707333051385813213292054901128343053483\"\r\n        \"7201619061252435891941815139029705430446796858689212780860199685937710392818281493227944575360865268735614\"\r\n        \"6807149440137516248588402175440508815752876782827976111962282033752927081548895731096283703258453915109420\"\r\n        \"3342382704797990553952394354924470021248421246009993957045699956357987224823386827941666676888843312553944\"\r\n        \"997489452362060546875\"},\r\n    {0x1.fffffffffffffp-604, chars_format::fixed, 656,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000003012399831378604812732372326043\"\r\n        \"9809348372933114966204154091026746899868606608047528665210468728793414666102771626426584109802256686106967\"\r\n        \"4403238122504871783883630278059410860893593717378425561720399371875420785636562986455889150721730537471229\"\r\n        \"3614298880275032497176804350881017631505753565655952223924564067505854163097791462192567406516907830218840\"\r\n        \"6684765409595981107904788709848940042496842492019987914091399912715974449646773655883333353777686625107889\"\r\n        \"99497890472412109375\"},\r\n    {0x1.fffffffffffffp-603, chars_format::fixed, 655,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000006024799662757209625464744652087\"\r\n        \"9618696745866229932408308182053493799737213216095057330420937457586829332205543252853168219604513372213934\"\r\n        \"8806476245009743567767260556118821721787187434756851123440798743750841571273125972911778301443461074942458\"\r\n        \"7228597760550064994353608701762035263011507131311904447849128135011708326195582924385134813033815660437681\"\r\n        \"3369530819191962215809577419697880084993684984039975828182799825431948899293547311766666707555373250215779\"\r\n        \"9899578094482421875\"},\r\n    {0x1.fffffffffffffp-602, chars_format::fixed, 654,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000012049599325514419250929489304175\"\r\n        \"9237393491732459864816616364106987599474426432190114660841874915173658664411086505706336439209026744427869\"\r\n        \"7612952490019487135534521112237643443574374869513702246881597487501683142546251945823556602886922149884917\"\r\n        \"4457195521100129988707217403524070526023014262623808895698256270023416652391165848770269626067631320875362\"\r\n        \"6739061638383924431619154839395760169987369968079951656365599650863897798587094623533333415110746500431559\"\r\n        \"979915618896484375\"},\r\n    {0x1.fffffffffffffp-601, chars_format::fixed, 653,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000024099198651028838501858978608351\"\r\n        \"8474786983464919729633232728213975198948852864380229321683749830347317328822173011412672878418053488855739\"\r\n        \"5225904980038974271069042224475286887148749739027404493763194975003366285092503891647113205773844299769834\"\r\n        \"8914391042200259977414434807048141052046028525247617791396512540046833304782331697540539252135262641750725\"\r\n        \"3478123276767848863238309678791520339974739936159903312731199301727795597174189247066666830221493000863119\"\r\n        \"95983123779296875\"},\r\n    {0x1.fffffffffffffp-600, chars_format::fixed, 652,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000048198397302057677003717957216703\"\r\n        \"6949573966929839459266465456427950397897705728760458643367499660694634657644346022825345756836106977711479\"\r\n        \"0451809960077948542138084448950573774297499478054808987526389950006732570185007783294226411547688599539669\"\r\n        \"7828782084400519954828869614096282104092057050495235582793025080093666609564663395081078504270525283501450\"\r\n        \"6956246553535697726476619357583040679949479872319806625462398603455591194348378494133333660442986001726239\"\r\n        \"9196624755859375\"},\r\n    {0x1.fffffffffffffp-599, chars_format::fixed, 651,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000096396794604115354007435914433407\"\r\n        \"3899147933859678918532930912855900795795411457520917286734999321389269315288692045650691513672213955422958\"\r\n        \"0903619920155897084276168897901147548594998956109617975052779900013465140370015566588452823095377199079339\"\r\n        \"5657564168801039909657739228192564208184114100990471165586050160187333219129326790162157008541050567002901\"\r\n        \"3912493107071395452953238715166081359898959744639613250924797206911182388696756988266667320885972003452479\"\r\n        \"839324951171875\"},\r\n    {0x1.fffffffffffffp-598, chars_format::fixed, 650,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000192793589208230708014871828866814\"\r\n        \"7798295867719357837065861825711801591590822915041834573469998642778538630577384091301383027344427910845916\"\r\n        \"1807239840311794168552337795802295097189997912219235950105559800026930280740031133176905646190754398158679\"\r\n        \"1315128337602079819315478456385128416368228201980942331172100320374666438258653580324314017082101134005802\"\r\n        \"7824986214142790905906477430332162719797919489279226501849594413822364777393513976533334641771944006904959\"\r\n        \"67864990234375\"},\r\n    {0x1.fffffffffffffp-597, chars_format::fixed, 649,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000385587178416461416029743657733629\"\r\n        \"5596591735438715674131723651423603183181645830083669146939997285557077261154768182602766054688855821691832\"\r\n        \"3614479680623588337104675591604590194379995824438471900211119600053860561480062266353811292381508796317358\"\r\n        \"2630256675204159638630956912770256832736456403961884662344200640749332876517307160648628034164202268011605\"\r\n        \"5649972428285581811812954860664325439595838978558453003699188827644729554787027953066669283543888013809919\"\r\n        \"3572998046875\"},\r\n    {0x1.fffffffffffffp-596, chars_format::fixed, 648,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000771174356832922832059487315467259\"\r\n        \"1193183470877431348263447302847206366363291660167338293879994571114154522309536365205532109377711643383664\"\r\n        \"7228959361247176674209351183209180388759991648876943800422239200107721122960124532707622584763017592634716\"\r\n        \"5260513350408319277261913825540513665472912807923769324688401281498665753034614321297256068328404536023211\"\r\n        \"1299944856571163623625909721328650879191677957116906007398377655289459109574055906133338567087776027619838\"\r\n        \"714599609375\"},\r\n    {0x1.fffffffffffffp-595, chars_format::fixed, 647,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000001542348713665845664118974630934518\"\r\n        \"2386366941754862696526894605694412732726583320334676587759989142228309044619072730411064218755423286767329\"\r\n        \"4457918722494353348418702366418360777519983297753887600844478400215442245920249065415245169526035185269433\"\r\n        \"0521026700816638554523827651081027330945825615847538649376802562997331506069228642594512136656809072046422\"\r\n        \"2599889713142327247251819442657301758383355914233812014796755310578918219148111812266677134175552055239677\"\r\n        \"42919921875\"},\r\n    {0x1.fffffffffffffp-594, chars_format::fixed, 646,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000003084697427331691328237949261869036\"\r\n        \"4772733883509725393053789211388825465453166640669353175519978284456618089238145460822128437510846573534658\"\r\n        \"8915837444988706696837404732836721555039966595507775201688956800430884491840498130830490339052070370538866\"\r\n        \"1042053401633277109047655302162054661891651231695077298753605125994663012138457285189024273313618144092844\"\r\n        \"5199779426284654494503638885314603516766711828467624029593510621157836438296223624533354268351104110479354\"\r\n        \"8583984375\"},\r\n    {0x1.fffffffffffffp-593, chars_format::fixed, 645,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000006169394854663382656475898523738072\"\r\n        \"9545467767019450786107578422777650930906333281338706351039956568913236178476290921644256875021693147069317\"\r\n        \"7831674889977413393674809465673443110079933191015550403377913600861768983680996261660980678104140741077732\"\r\n        \"2084106803266554218095310604324109323783302463390154597507210251989326024276914570378048546627236288185689\"\r\n        \"0399558852569308989007277770629207033533423656935248059187021242315672876592447249066708536702208220958709\"\r\n        \"716796875\"},\r\n    {0x1.fffffffffffffp-592, chars_format::fixed, 644,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000012338789709326765312951797047476145\"\r\n        \"9090935534038901572215156845555301861812666562677412702079913137826472356952581843288513750043386294138635\"\r\n        \"5663349779954826787349618931346886220159866382031100806755827201723537967361992523321961356208281482155464\"\r\n        \"4168213606533108436190621208648218647566604926780309195014420503978652048553829140756097093254472576371378\"\r\n        \"0799117705138617978014555541258414067066847313870496118374042484631345753184894498133417073404416441917419\"\r\n        \"43359375\"},\r\n    {0x1.fffffffffffffp-591, chars_format::fixed, 643,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000024677579418653530625903594094952291\"\r\n        \"8181871068077803144430313691110603723625333125354825404159826275652944713905163686577027500086772588277271\"\r\n        \"1326699559909653574699237862693772440319732764062201613511654403447075934723985046643922712416562964310928\"\r\n        \"8336427213066216872381242417296437295133209853560618390028841007957304097107658281512194186508945152742756\"\r\n        \"1598235410277235956029111082516828134133694627740992236748084969262691506369788996266834146808832883834838\"\r\n        \"8671875\"},\r\n    {0x1.fffffffffffffp-590, chars_format::fixed, 642,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000049355158837307061251807188189904583\"\r\n        \"6363742136155606288860627382221207447250666250709650808319652551305889427810327373154055000173545176554542\"\r\n        \"2653399119819307149398475725387544880639465528124403227023308806894151869447970093287845424833125928621857\"\r\n        \"6672854426132433744762484834592874590266419707121236780057682015914608194215316563024388373017890305485512\"\r\n        \"3196470820554471912058222165033656268267389255481984473496169938525383012739577992533668293617665767669677\"\r\n        \"734375\"},\r\n    {0x1.fffffffffffffp-589, chars_format::fixed, 641,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000098710317674614122503614376379809167\"\r\n        \"2727484272311212577721254764442414894501332501419301616639305102611778855620654746308110000347090353109084\"\r\n        \"5306798239638614298796951450775089761278931056248806454046617613788303738895940186575690849666251857243715\"\r\n        \"3345708852264867489524969669185749180532839414242473560115364031829216388430633126048776746035780610971024\"\r\n        \"6392941641108943824116444330067312536534778510963968946992339877050766025479155985067336587235331535339355\"\r\n        \"46875\"},\r\n    {0x1.fffffffffffffp-588, chars_format::fixed, 640,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000197420635349228245007228752759618334\"\r\n        \"5454968544622425155442509528884829789002665002838603233278610205223557711241309492616220000694180706218169\"\r\n        \"0613596479277228597593902901550179522557862112497612908093235227576607477791880373151381699332503714487430\"\r\n        \"6691417704529734979049939338371498361065678828484947120230728063658432776861266252097553492071561221942049\"\r\n        \"2785883282217887648232888660134625073069557021927937893984679754101532050958311970134673174470663070678710\"\r\n        \"9375\"},\r\n    {0x1.fffffffffffffp-587, chars_format::fixed, 639,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000394841270698456490014457505519236669\"\r\n        \"0909937089244850310885019057769659578005330005677206466557220410447115422482618985232440001388361412436338\"\r\n        \"1227192958554457195187805803100359045115724224995225816186470455153214955583760746302763398665007428974861\"\r\n        \"3382835409059469958099878676742996722131357656969894240461456127316865553722532504195106984143122443884098\"\r\n        \"5571766564435775296465777320269250146139114043855875787969359508203064101916623940269346348941326141357421\"\r\n        \"875\"},\r\n    {0x1.fffffffffffffp-586, chars_format::fixed, 638,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000789682541396912980028915011038473338\"\r\n        \"1819874178489700621770038115539319156010660011354412933114440820894230844965237970464880002776722824872676\"\r\n        \"2454385917108914390375611606200718090231448449990451632372940910306429911167521492605526797330014857949722\"\r\n        \"6765670818118939916199757353485993444262715313939788480922912254633731107445065008390213968286244887768197\"\r\n        \"1143533128871550592931554640538500292278228087711751575938719016406128203833247880538692697882652282714843\"\r\n        \"75\"},\r\n    {0x1.fffffffffffffp-585, chars_format::fixed, 637,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000001579365082793825960057830022076946676\"\r\n        \"3639748356979401243540076231078638312021320022708825866228881641788461689930475940929760005553445649745352\"\r\n        \"4908771834217828780751223212401436180462896899980903264745881820612859822335042985211053594660029715899445\"\r\n        \"3531341636237879832399514706971986888525430627879576961845824509267462214890130016780427936572489775536394\"\r\n        \"2287066257743101185863109281077000584556456175423503151877438032812256407666495761077385395765304565429687\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-584, chars_format::fixed, 636,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000003158730165587651920115660044153893352\"\r\n        \"7279496713958802487080152462157276624042640045417651732457763283576923379860951881859520011106891299490704\"\r\n        \"9817543668435657561502446424802872360925793799961806529491763641225719644670085970422107189320059431798890\"\r\n        \"7062683272475759664799029413943973777050861255759153923691649018534924429780260033560855873144979551072788\"\r\n        \"457413251548620237172621856215400116911291235084700630375487606562451281533299152215477079153060913085937\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-583, chars_format::fixed, 635,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000006317460331175303840231320088307786705\"\r\n        \"4558993427917604974160304924314553248085280090835303464915526567153846759721903763719040022213782598981409\"\r\n        \"9635087336871315123004892849605744721851587599923613058983527282451439289340171940844214378640118863597781\"\r\n        \"4125366544951519329598058827887947554101722511518307847383298037069848859560520067121711746289959102145576\"\r\n        \"91482650309724047434524371243080023382258247016940126075097521312490256306659830443095415830612182617187\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-582, chars_format::fixed, 634,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000012634920662350607680462640176615573410\"\r\n        \"9117986855835209948320609848629106496170560181670606929831053134307693519443807527438080044427565197962819\"\r\n        \"9270174673742630246009785699211489443703175199847226117967054564902878578680343881688428757280237727195562\"\r\n        \"8250733089903038659196117655775895108203445023036615694766596074139697719121040134243423492579918204291153\"\r\n        \"82965300619448094869048742486160046764516494033880252150195042624980512613319660886190831661224365234375\"},\r\n    {0x1.fffffffffffffp-581, chars_format::fixed, 633,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000025269841324701215360925280353231146821\"\r\n        \"8235973711670419896641219697258212992341120363341213859662106268615387038887615054876160088855130395925639\"\r\n        \"8540349347485260492019571398422978887406350399694452235934109129805757157360687763376857514560475454391125\"\r\n        \"6501466179806077318392235311551790216406890046073231389533192148279395438242080268486846985159836408582307\"\r\n        \"6593060123889618973809748497232009352903298806776050430039008524996102522663932177238166332244873046875\"},\r\n    {0x1.fffffffffffffp-580, chars_format::fixed, 632,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000050539682649402430721850560706462293643\"\r\n        \"6471947423340839793282439394516425984682240726682427719324212537230774077775230109752320177710260791851279\"\r\n        \"7080698694970520984039142796845957774812700799388904471868218259611514314721375526753715029120950908782251\"\r\n        \"3002932359612154636784470623103580432813780092146462779066384296558790876484160536973693970319672817164615\"\r\n        \"318612024777923794761949699446401870580659761355210086007801704999220504532786435447633266448974609375\"},\r\n    {0x1.fffffffffffffp-579, chars_format::fixed, 631,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000101079365298804861443701121412924587287\"\r\n        \"2943894846681679586564878789032851969364481453364855438648425074461548155550460219504640355420521583702559\"\r\n        \"4161397389941041968078285593691915549625401598777808943736436519223028629442751053507430058241901817564502\"\r\n        \"6005864719224309273568941246207160865627560184292925558132768593117581752968321073947387940639345634329230\"\r\n        \"63722404955584758952389939889280374116131952271042017201560340999844100906557287089526653289794921875\"},\r\n    {0x1.fffffffffffffp-578, chars_format::fixed, 630,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000202158730597609722887402242825849174574\"\r\n        \"5887789693363359173129757578065703938728962906729710877296850148923096311100920439009280710841043167405118\"\r\n        \"8322794779882083936156571187383831099250803197555617887472873038446057258885502107014860116483803635129005\"\r\n        \"2011729438448618547137882492414321731255120368585851116265537186235163505936642147894775881278691268658461\"\r\n        \"2744480991116951790477987977856074823226390454208403440312068199968820181311457417905330657958984375\"},\r\n    {0x1.fffffffffffffp-577, chars_format::fixed, 629,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000404317461195219445774804485651698349149\"\r\n        \"1775579386726718346259515156131407877457925813459421754593700297846192622201840878018561421682086334810237\"\r\n        \"6645589559764167872313142374767662198501606395111235774945746076892114517771004214029720232967607270258010\"\r\n        \"4023458876897237094275764984828643462510240737171702232531074372470327011873284295789551762557382537316922\"\r\n        \"548896198223390358095597595571214964645278090841680688062413639993764036262291483581066131591796875\"},\r\n    {0x1.fffffffffffffp-576, chars_format::fixed, 628,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000808634922390438891549608971303396698298\"\r\n        \"3551158773453436692519030312262815754915851626918843509187400595692385244403681756037122843364172669620475\"\r\n        \"3291179119528335744626284749535324397003212790222471549891492153784229035542008428059440465935214540516020\"\r\n        \"8046917753794474188551529969657286925020481474343404465062148744940654023746568591579103525114765074633845\"\r\n        \"09779239644678071619119519114242992929055618168336137612482727998752807252458296716213226318359375\"},\r\n    {0x1.fffffffffffffp-575, chars_format::fixed, 627,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000001617269844780877783099217942606793396596\"\r\n        \"7102317546906873385038060624525631509831703253837687018374801191384770488807363512074245686728345339240950\"\r\n        \"6582358239056671489252569499070648794006425580444943099782984307568458071084016856118880931870429081032041\"\r\n        \"6093835507588948377103059939314573850040962948686808930124297489881308047493137183158207050229530149267690\"\r\n        \"1955847928935614323823903822848598585811123633667227522496545599750561450491659343242645263671875\"},\r\n    {0x1.fffffffffffffp-574, chars_format::fixed, 626,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000003234539689561755566198435885213586793193\"\r\n        \"4204635093813746770076121249051263019663406507675374036749602382769540977614727024148491373456690678481901\"\r\n        \"3164716478113342978505138998141297588012851160889886199565968615136916142168033712237761863740858162064083\"\r\n        \"2187671015177896754206119878629147700081925897373617860248594979762616094986274366316414100459060298535380\"\r\n        \"391169585787122864764780764569719717162224726733445504499309119950112290098331868648529052734375\"},\r\n    {0x1.fffffffffffffp-573, chars_format::fixed, 625,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000006469079379123511132396871770427173586386\"\r\n        \"8409270187627493540152242498102526039326813015350748073499204765539081955229454048296982746913381356963802\"\r\n        \"6329432956226685957010277996282595176025702321779772399131937230273832284336067424475523727481716324128166\"\r\n        \"4375342030355793508412239757258295400163851794747235720497189959525232189972548732632828200918120597070760\"\r\n        \"78233917157424572952956152913943943432444945346689100899861823990022458019666373729705810546875\"},\r\n    {0x1.fffffffffffffp-572, chars_format::fixed, 624,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000012938158758247022264793743540854347172773\"\r\n        \"6818540375254987080304484996205052078653626030701496146998409531078163910458908096593965493826762713927605\"\r\n        \"2658865912453371914020555992565190352051404643559544798263874460547664568672134848951047454963432648256332\"\r\n        \"8750684060711587016824479514516590800327703589494471440994379919050464379945097465265656401836241194141521\"\r\n        \"5646783431484914590591230582788788686488989069337820179972364798004491603933274745941162109375\"},\r\n    {0x1.fffffffffffffp-571, chars_format::fixed, 623,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000025876317516494044529587487081708694345547\"\r\n        \"3637080750509974160608969992410104157307252061402992293996819062156327820917816193187930987653525427855210\"\r\n        \"5317731824906743828041111985130380704102809287119089596527748921095329137344269697902094909926865296512665\"\r\n        \"7501368121423174033648959029033181600655407178988942881988759838100928759890194930531312803672482388283043\"\r\n        \"129356686296982918118246116557757737297797813867564035994472959600898320786654949188232421875\"},\r\n    {0x1.fffffffffffffp-570, chars_format::fixed, 622,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000051752635032988089059174974163417388691094\"\r\n        \"7274161501019948321217939984820208314614504122805984587993638124312655641835632386375861975307050855710421\"\r\n        \"0635463649813487656082223970260761408205618574238179193055497842190658274688539395804189819853730593025331\"\r\n        \"5002736242846348067297918058066363201310814357977885763977519676201857519780389861062625607344964776566086\"\r\n        \"25871337259396583623649223311551547459559562773512807198894591920179664157330989837646484375\"},\r\n    {0x1.fffffffffffffp-569, chars_format::fixed, 621,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000103505270065976178118349948326834777382189\"\r\n        \"4548323002039896642435879969640416629229008245611969175987276248625311283671264772751723950614101711420842\"\r\n        \"1270927299626975312164447940521522816411237148476358386110995684381316549377078791608379639707461186050663\"\r\n        \"0005472485692696134595836116132726402621628715955771527955039352403715039560779722125251214689929553132172\"\r\n        \"5174267451879316724729844662310309491911912554702561439778918384035932831466197967529296875\"},\r\n    {0x1.fffffffffffffp-568, chars_format::fixed, 620,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000207010540131952356236699896653669554764378\"\r\n        \"9096646004079793284871759939280833258458016491223938351974552497250622567342529545503447901228203422841684\"\r\n        \"2541854599253950624328895881043045632822474296952716772221991368762633098754157583216759279414922372101326\"\r\n        \"0010944971385392269191672232265452805243257431911543055910078704807430079121559444250502429379859106264345\"\r\n        \"034853490375863344945968932462061898382382510940512287955783676807186566293239593505859375\"},\r\n    {0x1.fffffffffffffp-567, chars_format::fixed, 619,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000414021080263904712473399793307339109528757\"\r\n        \"8193292008159586569743519878561666516916032982447876703949104994501245134685059091006895802456406845683368\"\r\n        \"5083709198507901248657791762086091265644948593905433544443982737525266197508315166433518558829844744202652\"\r\n        \"0021889942770784538383344464530905610486514863823086111820157409614860158243118888501004858759718212528690\"\r\n        \"06970698075172668989193786492412379676476502188102457591156735361437313258647918701171875\"},\r\n    {0x1.fffffffffffffp-566, chars_format::fixed, 618,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000828042160527809424946799586614678219057515\"\r\n        \"6386584016319173139487039757123333033832065964895753407898209989002490269370118182013791604912813691366737\"\r\n        \"0167418397015802497315583524172182531289897187810867088887965475050532395016630332867037117659689488405304\"\r\n        \"0043779885541569076766688929061811220973029727646172223640314819229720316486237777002009717519436425057380\"\r\n        \"1394139615034533797838757298482475935295300437620491518231347072287462651729583740234375\"},\r\n    {0x1.fffffffffffffp-565, chars_format::fixed, 617,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000001656084321055618849893599173229356438115031\"\r\n        \"2773168032638346278974079514246666067664131929791506815796419978004980538740236364027583209825627382733474\"\r\n        \"0334836794031604994631167048344365062579794375621734177775930950101064790033260665734074235319378976810608\"\r\n        \"0087559771083138153533377858123622441946059455292344447280629638459440632972475554004019435038872850114760\"\r\n        \"278827923006906759567751459696495187059060087524098303646269414457492530345916748046875\"},\r\n    {0x1.fffffffffffffp-564, chars_format::fixed, 616,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000003312168642111237699787198346458712876230062\"\r\n        \"5546336065276692557948159028493332135328263859583013631592839956009961077480472728055166419651254765466948\"\r\n        \"0669673588063209989262334096688730125159588751243468355551861900202129580066521331468148470638757953621216\"\r\n        \"0175119542166276307066755716247244883892118910584688894561259276918881265944951108008038870077745700229520\"\r\n        \"55765584601381351913550291939299037411812017504819660729253882891498506069183349609375\"},\r\n    {0x1.fffffffffffffp-563, chars_format::fixed, 615,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000006624337284222475399574396692917425752460125\"\r\n        \"1092672130553385115896318056986664270656527719166027263185679912019922154960945456110332839302509530933896\"\r\n        \"1339347176126419978524668193377460250319177502486936711103723800404259160133042662936296941277515907242432\"\r\n        \"0350239084332552614133511432494489767784237821169377789122518553837762531889902216016077740155491400459041\"\r\n        \"1153116920276270382710058387859807482362403500963932145850776578299701213836669921875\"},\r\n    {0x1.fffffffffffffp-562, chars_format::fixed, 614,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000013248674568444950799148793385834851504920250\"\r\n        \"2185344261106770231792636113973328541313055438332054526371359824039844309921890912220665678605019061867792\"\r\n        \"2678694352252839957049336386754920500638355004973873422207447600808518320266085325872593882555031814484864\"\r\n        \"0700478168665105228267022864988979535568475642338755578245037107675525063779804432032155480310982800918082\"\r\n        \"230623384055254076542011677571961496472480700192786429170155315659940242767333984375\"},\r\n    {0x1.fffffffffffffp-561, chars_format::fixed, 613,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000026497349136889901598297586771669703009840500\"\r\n        \"4370688522213540463585272227946657082626110876664109052742719648079688619843781824441331357210038123735584\"\r\n        \"5357388704505679914098672773509841001276710009947746844414895201617036640532170651745187765110063628969728\"\r\n        \"1400956337330210456534045729977959071136951284677511156490074215351050127559608864064310960621965601836164\"\r\n        \"46124676811050815308402335514392299294496140038557285834031063131988048553466796875\"},\r\n    {0x1.fffffffffffffp-560, chars_format::fixed, 612,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000052994698273779803196595173543339406019681000\"\r\n        \"8741377044427080927170544455893314165252221753328218105485439296159377239687563648882662714420076247471169\"\r\n        \"0714777409011359828197345547019682002553420019895493688829790403234073281064341303490375530220127257939456\"\r\n        \"2801912674660420913068091459955918142273902569355022312980148430702100255119217728128621921243931203672328\"\r\n        \"9224935362210163061680467102878459858899228007711457166806212626397609710693359375\"},\r\n    {0x1.fffffffffffffp-559, chars_format::fixed, 611,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000105989396547559606393190347086678812039362001\"\r\n        \"7482754088854161854341088911786628330504443506656436210970878592318754479375127297765325428840152494942338\"\r\n        \"1429554818022719656394691094039364005106840039790987377659580806468146562128682606980751060440254515878912\"\r\n        \"5603825349320841826136182919911836284547805138710044625960296861404200510238435456257243842487862407344657\"\r\n        \"844987072442032612336093420575691971779845601542291433361242525279521942138671875\"},\r\n    {0x1.fffffffffffffp-558, chars_format::fixed, 610,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000211978793095119212786380694173357624078724003\"\r\n        \"4965508177708323708682177823573256661008887013312872421941757184637508958750254595530650857680304989884676\"\r\n        \"2859109636045439312789382188078728010213680079581974755319161612936293124257365213961502120880509031757825\"\r\n        \"1207650698641683652272365839823672569095610277420089251920593722808401020476870912514487684975724814689315\"\r\n        \"68997414488406522467218684115138394355969120308458286672248505055904388427734375\"},\r\n    {0x1.fffffffffffffp-557, chars_format::fixed, 609,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000423957586190238425572761388346715248157448006\"\r\n        \"9931016355416647417364355647146513322017774026625744843883514369275017917500509191061301715360609979769352\"\r\n        \"5718219272090878625578764376157456020427360159163949510638323225872586248514730427923004241761018063515650\"\r\n        \"2415301397283367304544731679647345138191220554840178503841187445616802040953741825028975369951449629378631\"\r\n        \"3799482897681304493443736823027678871193824061691657334449701011180877685546875\"},\r\n    {0x1.fffffffffffffp-556, chars_format::fixed, 608,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000847915172380476851145522776693430496314896013\"\r\n        \"9862032710833294834728711294293026644035548053251489687767028738550035835001018382122603430721219959538705\"\r\n        \"1436438544181757251157528752314912040854720318327899021276646451745172497029460855846008483522036127031300\"\r\n        \"4830602794566734609089463359294690276382441109680357007682374891233604081907483650057950739902899258757262\"\r\n        \"759896579536260898688747364605535774238764812338331466889940202236175537109375\"},\r\n    {0x1.fffffffffffffp-555, chars_format::fixed, 607,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000001695830344760953702291045553386860992629792027\"\r\n        \"9724065421666589669457422588586053288071096106502979375534057477100071670002036764245206861442439919077410\"\r\n        \"2872877088363514502315057504629824081709440636655798042553292903490344994058921711692016967044072254062600\"\r\n        \"9661205589133469218178926718589380552764882219360714015364749782467208163814967300115901479805798517514525\"\r\n        \"51979315907252179737749472921107154847752962467666293377988040447235107421875\"},\r\n    {0x1.fffffffffffffp-554, chars_format::fixed, 606,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000003391660689521907404582091106773721985259584055\"\r\n        \"9448130843333179338914845177172106576142192213005958751068114954200143340004073528490413722884879838154820\"\r\n        \"5745754176727029004630115009259648163418881273311596085106585806980689988117843423384033934088144508125201\"\r\n        \"9322411178266938436357853437178761105529764438721428030729499564934416327629934600231802959611597035029051\"\r\n        \"0395863181450435947549894584221430969550592493533258675597608089447021484375\"},\r\n    {0x1.fffffffffffffp-553, chars_format::fixed, 605,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000006783321379043814809164182213547443970519168111\"\r\n        \"8896261686666358677829690354344213152284384426011917502136229908400286680008147056980827445769759676309641\"\r\n        \"1491508353454058009260230018519296326837762546623192170213171613961379976235686846768067868176289016250403\"\r\n        \"8644822356533876872715706874357522211059528877442856061458999129868832655259869200463605919223194070058102\"\r\n        \"079172636290087189509978916844286193910118498706651735119521617889404296875\"},\r\n    {0x1.fffffffffffffp-552, chars_format::fixed, 604,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000013566642758087629618328364427094887941038336223\"\r\n        \"7792523373332717355659380708688426304568768852023835004272459816800573360016294113961654891539519352619282\"\r\n        \"2983016706908116018520460037038592653675525093246384340426343227922759952471373693536135736352578032500807\"\r\n        \"7289644713067753745431413748715044422119057754885712122917998259737665310519738400927211838446388140116204\"\r\n        \"15834527258017437901995783368857238782023699741330347023904323577880859375\"},\r\n    {0x1.fffffffffffffp-551, chars_format::fixed, 603,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000027133285516175259236656728854189775882076672447\"\r\n        \"5585046746665434711318761417376852609137537704047670008544919633601146720032588227923309783079038705238564\"\r\n        \"5966033413816232037040920074077185307351050186492768680852686455845519904942747387072271472705156065001615\"\r\n        \"4579289426135507490862827497430088844238115509771424245835996519475330621039476801854423676892776280232408\"\r\n        \"3166905451603487580399156673771447756404739948266069404780864715576171875\"},\r\n    {0x1.fffffffffffffp-550, chars_format::fixed, 602,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000054266571032350518473313457708379551764153344895\"\r\n        \"1170093493330869422637522834753705218275075408095340017089839267202293440065176455846619566158077410477129\"\r\n        \"1932066827632464074081840148154370614702100372985537361705372911691039809885494774144542945410312130003230\"\r\n        \"9158578852271014981725654994860177688476231019542848491671993038950661242078953603708847353785552560464816\"\r\n        \"633381090320697516079831334754289551280947989653213880956172943115234375\"},\r\n    {0x1.fffffffffffffp-549, chars_format::fixed, 601,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000108533142064701036946626915416759103528306689790\"\r\n        \"2340186986661738845275045669507410436550150816190680034179678534404586880130352911693239132316154820954258\"\r\n        \"3864133655264928148163680296308741229404200745971074723410745823382079619770989548289085890820624260006461\"\r\n        \"8317157704542029963451309989720355376952462039085696983343986077901322484157907207417694707571105120929633\"\r\n        \"26676218064139503215966266950857910256189597930642776191234588623046875\"},\r\n    {0x1.fffffffffffffp-548, chars_format::fixed, 600,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000217066284129402073893253830833518207056613379580\"\r\n        \"4680373973323477690550091339014820873100301632381360068359357068809173760260705823386478264632309641908516\"\r\n        \"7728267310529856296327360592617482458808401491942149446821491646764159239541979096578171781641248520012923\"\r\n        \"6634315409084059926902619979440710753904924078171393966687972155802644968315814414835389415142210241859266\"\r\n        \"5335243612827900643193253390171582051237919586128555238246917724609375\"},\r\n    {0x1.fffffffffffffp-547, chars_format::fixed, 599,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000434132568258804147786507661667036414113226759160\"\r\n        \"9360747946646955381100182678029641746200603264762720136718714137618347520521411646772956529264619283817033\"\r\n        \"5456534621059712592654721185234964917616802983884298893642983293528318479083958193156343563282497040025847\"\r\n        \"3268630818168119853805239958881421507809848156342787933375944311605289936631628829670778830284420483718533\"\r\n        \"067048722565580128638650678034316410247583917225711047649383544921875\"},\r\n    {0x1.fffffffffffffp-546, chars_format::fixed, 598,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000000868265136517608295573015323334072828226453518321\"\r\n        \"8721495893293910762200365356059283492401206529525440273437428275236695041042823293545913058529238567634067\"\r\n        \"0913069242119425185309442370469929835233605967768597787285966587056636958167916386312687126564994080051694\"\r\n        \"6537261636336239707610479917762843015619696312685575866751888623210579873263257659341557660568840967437066\"\r\n        \"13409744513116025727730135606863282049516783445142209529876708984375\"},\r\n    {0x1.fffffffffffffp-545, chars_format::fixed, 597,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000001736530273035216591146030646668145656452907036643\"\r\n        \"7442991786587821524400730712118566984802413059050880546874856550473390082085646587091826117058477135268134\"\r\n        \"1826138484238850370618884740939859670467211935537195574571933174113273916335832772625374253129988160103389\"\r\n        \"3074523272672479415220959835525686031239392625371151733503777246421159746526515318683115321137681934874132\"\r\n        \"2681948902623205145546027121372656409903356689028441905975341796875\"},\r\n    {0x1.fffffffffffffp-544, chars_format::fixed, 596,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000003473060546070433182292061293336291312905814073287\"\r\n        \"4885983573175643048801461424237133969604826118101761093749713100946780164171293174183652234116954270536268\"\r\n        \"3652276968477700741237769481879719340934423871074391149143866348226547832671665545250748506259976320206778\"\r\n        \"6149046545344958830441919671051372062478785250742303467007554492842319493053030637366230642275363869748264\"\r\n        \"536389780524641029109205424274531281980671337805688381195068359375\"},\r\n    {0x1.fffffffffffffp-543, chars_format::fixed, 595,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000006946121092140866364584122586672582625811628146574\"\r\n        \"9771967146351286097602922848474267939209652236203522187499426201893560328342586348367304468233908541072536\"\r\n        \"7304553936955401482475538963759438681868847742148782298287732696453095665343331090501497012519952640413557\"\r\n        \"2298093090689917660883839342102744124957570501484606934015108985684638986106061274732461284550727739496529\"\r\n        \"07277956104928205821841084854906256396134267561137676239013671875\"},\r\n    {0x1.fffffffffffffp-542, chars_format::fixed, 594,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000013892242184281732729168245173345165251623256293149\"\r\n        \"9543934292702572195205845696948535878419304472407044374998852403787120656685172696734608936467817082145073\"\r\n        \"4609107873910802964951077927518877363737695484297564596575465392906191330686662181002994025039905280827114\"\r\n        \"4596186181379835321767678684205488249915141002969213868030217971369277972212122549464922569101455478993058\"\r\n        \"1455591220985641164368216970981251279226853512227535247802734375\"},\r\n    {0x1.fffffffffffffp-541, chars_format::fixed, 593,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000027784484368563465458336490346690330503246512586299\"\r\n        \"9087868585405144390411691393897071756838608944814088749997704807574241313370345393469217872935634164290146\"\r\n        \"9218215747821605929902155855037754727475390968595129193150930785812382661373324362005988050079810561654228\"\r\n        \"9192372362759670643535357368410976499830282005938427736060435942738555944424245098929845138202910957986116\"\r\n        \"291118244197128232873643394196250255845370702445507049560546875\"},\r\n    {0x1.fffffffffffffp-540, chars_format::fixed, 592,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000055568968737126930916672980693380661006493025172599\"\r\n        \"8175737170810288780823382787794143513677217889628177499995409615148482626740690786938435745871268328580293\"\r\n        \"8436431495643211859804311710075509454950781937190258386301861571624765322746648724011976100159621123308457\"\r\n        \"8384744725519341287070714736821952999660564011876855472120871885477111888848490197859690276405821915972232\"\r\n        \"58223648839425646574728678839250051169074140489101409912109375\"},\r\n    {0x1.fffffffffffffp-539, chars_format::fixed, 591,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000111137937474253861833345961386761322012986050345199\"\r\n        \"6351474341620577561646765575588287027354435779256354999990819230296965253481381573876871491742536657160587\"\r\n        \"6872862991286423719608623420151018909901563874380516772603723143249530645493297448023952200319242246616915\"\r\n        \"6769489451038682574141429473643905999321128023753710944241743770954223777696980395719380552811643831944465\"\r\n        \"1644729767885129314945735767850010233814828097820281982421875\"},\r\n    {0x1.fffffffffffffp-538, chars_format::fixed, 590,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000222275874948507723666691922773522644025972100690399\"\r\n        \"2702948683241155123293531151176574054708871558512709999981638460593930506962763147753742983485073314321175\"\r\n        \"3745725982572847439217246840302037819803127748761033545207446286499061290986594896047904400638484493233831\"\r\n        \"3538978902077365148282858947287811998642256047507421888483487541908447555393960791438761105623287663888930\"\r\n        \"328945953577025862989147153570002046762965619564056396484375\"},\r\n    {0x1.fffffffffffffp-537, chars_format::fixed, 589,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000444551749897015447333383845547045288051944201380798\"\r\n        \"5405897366482310246587062302353148109417743117025419999963276921187861013925526295507485966970146628642350\"\r\n        \"7491451965145694878434493680604075639606255497522067090414892572998122581973189792095808801276968986467662\"\r\n        \"7077957804154730296565717894575623997284512095014843776966975083816895110787921582877522211246575327777860\"\r\n        \"65789190715405172597829430714000409352593123912811279296875\"},\r\n    {0x1.fffffffffffffp-536, chars_format::fixed, 588,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000000889103499794030894666767691094090576103888402761597\"\r\n        \"0811794732964620493174124604706296218835486234050839999926553842375722027851052591014971933940293257284701\"\r\n        \"4982903930291389756868987361208151279212510995044134180829785145996245163946379584191617602553937972935325\"\r\n        \"4155915608309460593131435789151247994569024190029687553933950167633790221575843165755044422493150655555721\"\r\n        \"3157838143081034519565886142800081870518624782562255859375\"},\r\n    {0x1.fffffffffffffp-535, chars_format::fixed, 587,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000001778206999588061789333535382188181152207776805523194\"\r\n        \"1623589465929240986348249209412592437670972468101679999853107684751444055702105182029943867880586514569402\"\r\n        \"9965807860582779513737974722416302558425021990088268361659570291992490327892759168383235205107875945870650\"\r\n        \"8311831216618921186262871578302495989138048380059375107867900335267580443151686331510088844986301311111442\"\r\n        \"631567628616206903913177228560016374103724956512451171875\"},\r\n    {0x1.fffffffffffffp-534, chars_format::fixed, 586,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000003556413999176123578667070764376362304415553611046388\"\r\n        \"3247178931858481972696498418825184875341944936203359999706215369502888111404210364059887735761173029138805\"\r\n        \"9931615721165559027475949444832605116850043980176536723319140583984980655785518336766470410215751891741301\"\r\n        \"6623662433237842372525743156604991978276096760118750215735800670535160886303372663020177689972602622222885\"\r\n        \"26313525723241380782635445712003274820744991302490234375\"},\r\n    {0x1.fffffffffffffp-533, chars_format::fixed, 585,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000007112827998352247157334141528752724608831107222092776\"\r\n        \"6494357863716963945392996837650369750683889872406719999412430739005776222808420728119775471522346058277611\"\r\n        \"9863231442331118054951898889665210233700087960353073446638281167969961311571036673532940820431503783482603\"\r\n        \"3247324866475684745051486313209983956552193520237500431471601341070321772606745326040355379945205244445770\"\r\n        \"5262705144648276156527089142400654964148998260498046875\"},\r\n    {0x1.fffffffffffffp-532, chars_format::fixed, 584,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000014225655996704494314668283057505449217662214444185553\"\r\n        \"2988715727433927890785993675300739501367779744813439998824861478011552445616841456239550943044692116555223\"\r\n        \"9726462884662236109903797779330420467400175920706146893276562335939922623142073347065881640863007566965206\"\r\n        \"6494649732951369490102972626419967913104387040475000862943202682140643545213490652080710759890410488891541\"\r\n        \"052541028929655231305417828480130992829799652099609375\"},\r\n    {0x1.fffffffffffffp-531, chars_format::fixed, 583,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000028451311993408988629336566115010898435324428888371106\"\r\n        \"5977431454867855781571987350601479002735559489626879997649722956023104891233682912479101886089384233110447\"\r\n        \"9452925769324472219807595558660840934800351841412293786553124671879845246284146694131763281726015133930413\"\r\n        \"2989299465902738980205945252839935826208774080950001725886405364281287090426981304161421519780820977783082\"\r\n        \"10508205785931046261083565696026198565959930419921875\"},\r\n    {0x1.fffffffffffffp-530, chars_format::fixed, 582,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000056902623986817977258673132230021796870648857776742213\"\r\n        \"1954862909735711563143974701202958005471118979253759995299445912046209782467365824958203772178768466220895\"\r\n        \"8905851538648944439615191117321681869600703682824587573106249343759690492568293388263526563452030267860826\"\r\n        \"5978598931805477960411890505679871652417548161900003451772810728562574180853962608322843039561641955566164\"\r\n        \"2101641157186209252216713139205239713191986083984375\"},\r\n    {0x1.fffffffffffffp-529, chars_format::fixed, 581,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000113805247973635954517346264460043593741297715553484426\"\r\n        \"3909725819471423126287949402405916010942237958507519990598891824092419564934731649916407544357536932441791\"\r\n        \"7811703077297888879230382234643363739201407365649175146212498687519380985136586776527053126904060535721653\"\r\n        \"1957197863610955920823781011359743304835096323800006903545621457125148361707925216645686079123283911132328\"\r\n        \"420328231437241850443342627841047942638397216796875\"},\r\n    {0x1.fffffffffffffp-528, chars_format::fixed, 580,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000227610495947271909034692528920087187482595431106968852\"\r\n        \"7819451638942846252575898804811832021884475917015039981197783648184839129869463299832815088715073864883583\"\r\n        \"5623406154595777758460764469286727478402814731298350292424997375038761970273173553054106253808121071443306\"\r\n        \"3914395727221911841647562022719486609670192647600013807091242914250296723415850433291372158246567822264656\"\r\n        \"84065646287448370088668525568209588527679443359375\"},\r\n    {0x1.fffffffffffffp-527, chars_format::fixed, 579,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000455220991894543818069385057840174374965190862213937705\"\r\n        \"5638903277885692505151797609623664043768951834030079962395567296369678259738926599665630177430147729767167\"\r\n        \"1246812309191555516921528938573454956805629462596700584849994750077523940546347106108212507616242142886612\"\r\n        \"7828791454443823683295124045438973219340385295200027614182485828500593446831700866582744316493135644529313\"\r\n        \"6813129257489674017733705113641917705535888671875\"},\r\n    {0x1.fffffffffffffp-526, chars_format::fixed, 578,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000000910441983789087636138770115680348749930381724427875411\"\r\n        \"1277806555771385010303595219247328087537903668060159924791134592739356519477853199331260354860295459534334\"\r\n        \"2493624618383111033843057877146909913611258925193401169699989500155047881092694212216425015232484285773225\"\r\n        \"5657582908887647366590248090877946438680770590400055228364971657001186893663401733165488632986271289058627\"\r\n        \"362625851497934803546741022728383541107177734375\"},\r\n    {0x1.fffffffffffffp-525, chars_format::fixed, 577,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000001820883967578175272277540231360697499860763448855750822\"\r\n        \"2555613111542770020607190438494656175075807336120319849582269185478713038955706398662520709720590919068668\"\r\n        \"4987249236766222067686115754293819827222517850386802339399979000310095762185388424432850030464968571546451\"\r\n        \"1315165817775294733180496181755892877361541180800110456729943314002373787326803466330977265972542578117254\"\r\n        \"72525170299586960709348204545676708221435546875\"},\r\n    {0x1.fffffffffffffp-524, chars_format::fixed, 576,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000003641767935156350544555080462721394999721526897711501644\"\r\n        \"5111226223085540041214380876989312350151614672240639699164538370957426077911412797325041419441181838137336\"\r\n        \"9974498473532444135372231508587639654445035700773604678799958000620191524370776848865700060929937143092902\"\r\n        \"2630331635550589466360992363511785754723082361600220913459886628004747574653606932661954531945085156234509\"\r\n        \"4505034059917392141869640909135341644287109375\"},\r\n    {0x1.fffffffffffffp-523, chars_format::fixed, 575,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000007283535870312701089110160925442789999443053795423003289\"\r\n        \"0222452446171080082428761753978624700303229344481279398329076741914852155822825594650082838882363676274673\"\r\n        \"9948996947064888270744463017175279308890071401547209357599916001240383048741553697731400121859874286185804\"\r\n        \"5260663271101178932721984727023571509446164723200441826919773256009495149307213865323909063890170312469018\"\r\n        \"901006811983478428373928181827068328857421875\"},\r\n    {0x1.fffffffffffffp-522, chars_format::fixed, 574,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000014567071740625402178220321850885579998886107590846006578\"\r\n        \"0444904892342160164857523507957249400606458688962558796658153483829704311645651189300165677764727352549347\"\r\n        \"9897993894129776541488926034350558617780142803094418715199832002480766097483107395462800243719748572371609\"\r\n        \"0521326542202357865443969454047143018892329446400883653839546512018990298614427730647818127780340624938037\"\r\n        \"80201362396695685674785636365413665771484375\"},\r\n    {0x1.fffffffffffffp-521, chars_format::fixed, 573,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000029134143481250804356440643701771159997772215181692013156\"\r\n        \"0889809784684320329715047015914498801212917377925117593316306967659408623291302378600331355529454705098695\"\r\n        \"9795987788259553082977852068701117235560285606188837430399664004961532194966214790925600487439497144743218\"\r\n        \"1042653084404715730887938908094286037784658892801767307679093024037980597228855461295636255560681249876075\"\r\n        \"6040272479339137134957127273082733154296875\"},\r\n    {0x1.fffffffffffffp-520, chars_format::fixed, 572,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000058268286962501608712881287403542319995544430363384026312\"\r\n        \"1779619569368640659430094031828997602425834755850235186632613935318817246582604757200662711058909410197391\"\r\n        \"9591975576519106165955704137402234471120571212377674860799328009923064389932429581851200974878994289486436\"\r\n        \"2085306168809431461775877816188572075569317785603534615358186048075961194457710922591272511121362499752151\"\r\n        \"208054495867827426991425454616546630859375\"},\r\n    {0x1.fffffffffffffp-519, chars_format::fixed, 571,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000116536573925003217425762574807084639991088860726768052624\"\r\n        \"3559239138737281318860188063657995204851669511700470373265227870637634493165209514401325422117818820394783\"\r\n        \"9183951153038212331911408274804468942241142424755349721598656019846128779864859163702401949757988578972872\"\r\n        \"4170612337618862923551755632377144151138635571207069230716372096151922388915421845182545022242724999504302\"\r\n        \"41610899173565485398285090923309326171875\"},\r\n    {0x1.fffffffffffffp-518, chars_format::fixed, 570,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000233073147850006434851525149614169279982177721453536105248\"\r\n        \"7118478277474562637720376127315990409703339023400940746530455741275268986330419028802650844235637640789567\"\r\n        \"8367902306076424663822816549608937884482284849510699443197312039692257559729718327404803899515977157945744\"\r\n        \"8341224675237725847103511264754288302277271142414138461432744192303844777830843690365090044485449999008604\"\r\n        \"8322179834713097079657018184661865234375\"},\r\n    {0x1.fffffffffffffp-517, chars_format::fixed, 569,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000466146295700012869703050299228338559964355442907072210497\"\r\n        \"4236956554949125275440752254631980819406678046801881493060911482550537972660838057605301688471275281579135\"\r\n        \"6735804612152849327645633099217875768964569699021398886394624079384515119459436654809607799031954315891489\"\r\n        \"6682449350475451694207022529508576604554542284828276922865488384607689555661687380730180088970899998017209\"\r\n        \"664435966942619415931403636932373046875\"},\r\n    {0x1.fffffffffffffp-516, chars_format::fixed, 568,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000000932292591400025739406100598456677119928710885814144420994\"\r\n        \"8473913109898250550881504509263961638813356093603762986121822965101075945321676115210603376942550563158271\"\r\n        \"3471609224305698655291266198435751537929139398042797772789248158769030238918873309619215598063908631782979\"\r\n        \"3364898700950903388414045059017153209109084569656553845730976769215379111323374761460360177941799996034419\"\r\n        \"32887193388523883186280727386474609375\"},\r\n    {0x1.fffffffffffffp-515, chars_format::fixed, 567,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000001864585182800051478812201196913354239857421771628288841989\"\r\n        \"6947826219796501101763009018527923277626712187207525972243645930202151890643352230421206753885101126316542\"\r\n        \"6943218448611397310582532396871503075858278796085595545578496317538060477837746619238431196127817263565958\"\r\n        \"6729797401901806776828090118034306418218169139313107691461953538430758222646749522920720355883599992068838\"\r\n        \"6577438677704776637256145477294921875\"},\r\n    {0x1.fffffffffffffp-514, chars_format::fixed, 566,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000003729170365600102957624402393826708479714843543256577683979\"\r\n        \"3895652439593002203526018037055846555253424374415051944487291860404303781286704460842413507770202252633085\"\r\n        \"3886436897222794621165064793743006151716557592171191091156992635076120955675493238476862392255634527131917\"\r\n        \"3459594803803613553656180236068612836436338278626215382923907076861516445293499045841440711767199984137677\"\r\n        \"315487735540955327451229095458984375\"},\r\n    {0x1.fffffffffffffp-513, chars_format::fixed, 565,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000007458340731200205915248804787653416959429687086513155367958\"\r\n        \"7791304879186004407052036074111693110506848748830103888974583720808607562573408921684827015540404505266170\"\r\n        \"7772873794445589242330129587486012303433115184342382182313985270152241911350986476953724784511269054263834\"\r\n        \"6919189607607227107312360472137225672872676557252430765847814153723032890586998091682881423534399968275354\"\r\n        \"63097547108191065490245819091796875\"},\r\n    {0x1.fffffffffffffp-512, chars_format::fixed, 564,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000014916681462400411830497609575306833918859374173026310735917\"\r\n        \"5582609758372008814104072148223386221013697497660207777949167441617215125146817843369654031080809010532341\"\r\n        \"5545747588891178484660259174972024606866230368684764364627970540304483822701972953907449569022538108527669\"\r\n        \"3838379215214454214624720944274451345745353114504861531695628307446065781173996183365762847068799936550709\"\r\n        \"2619509421638213098049163818359375\"},\r\n    {0x1.fffffffffffffp-511, chars_format::fixed, 563,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000029833362924800823660995219150613667837718748346052621471835\"\r\n        \"1165219516744017628208144296446772442027394995320415555898334883234430250293635686739308062161618021064683\"\r\n        \"1091495177782356969320518349944049213732460737369528729255941080608967645403945907814899138045076217055338\"\r\n        \"7676758430428908429249441888548902691490706229009723063391256614892131562347992366731525694137599873101418\"\r\n        \"523901884327642619609832763671875\"},\r\n    {0x1.fffffffffffffp-510, chars_format::fixed, 562,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000059666725849601647321990438301227335675437496692105242943670\"\r\n        \"2330439033488035256416288592893544884054789990640831111796669766468860500587271373478616124323236042129366\"\r\n        \"2182990355564713938641036699888098427464921474739057458511882161217935290807891815629798276090152434110677\"\r\n        \"5353516860857816858498883777097805382981412458019446126782513229784263124695984733463051388275199746202837\"\r\n        \"04780376865528523921966552734375\"},\r\n    {0x1.fffffffffffffp-509, chars_format::fixed, 561,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000119333451699203294643980876602454671350874993384210485887340\"\r\n        \"4660878066976070512832577185787089768109579981281662223593339532937721001174542746957232248646472084258732\"\r\n        \"4365980711129427877282073399776196854929842949478114917023764322435870581615783631259596552180304868221355\"\r\n        \"0707033721715633716997767554195610765962824916038892253565026459568526249391969466926102776550399492405674\"\r\n        \"0956075373105704784393310546875\"},\r\n    {0x1.fffffffffffffp-508, chars_format::fixed, 560,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000238666903398406589287961753204909342701749986768420971774680\"\r\n        \"9321756133952141025665154371574179536219159962563324447186679065875442002349085493914464497292944168517464\"\r\n        \"8731961422258855754564146799552393709859685898956229834047528644871741163231567262519193104360609736442710\"\r\n        \"1414067443431267433995535108391221531925649832077784507130052919137052498783938933852205553100798984811348\"\r\n        \"191215074621140956878662109375\"},\r\n    {0x1.fffffffffffffp-507, chars_format::fixed, 559,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000477333806796813178575923506409818685403499973536841943549361\"\r\n        \"8643512267904282051330308743148359072438319925126648894373358131750884004698170987828928994585888337034929\"\r\n        \"7463922844517711509128293599104787419719371797912459668095057289743482326463134525038386208721219472885420\"\r\n        \"2828134886862534867991070216782443063851299664155569014260105838274104997567877867704411106201597969622696\"\r\n        \"38243014924228191375732421875\"},\r\n    {0x1.fffffffffffffp-506, chars_format::fixed, 558,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000000954667613593626357151847012819637370806999947073683887098723\"\r\n        \"7287024535808564102660617486296718144876639850253297788746716263501768009396341975657857989171776674069859\"\r\n        \"4927845689035423018256587198209574839438743595824919336190114579486964652926269050076772417442438945770840\"\r\n        \"5656269773725069735982140433564886127702599328311138028520211676548209995135755735408822212403195939245392\"\r\n        \"7648602984845638275146484375\"},\r\n    {0x1.fffffffffffffp-505, chars_format::fixed, 557,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000001909335227187252714303694025639274741613999894147367774197447\"\r\n        \"4574049071617128205321234972593436289753279700506595577493432527003536018792683951315715978343553348139718\"\r\n        \"9855691378070846036513174396419149678877487191649838672380229158973929305852538100153544834884877891541681\"\r\n        \"1312539547450139471964280867129772255405198656622276057040423353096419990271511470817644424806391878490785\"\r\n        \"529720596969127655029296875\"},\r\n    {0x1.fffffffffffffp-504, chars_format::fixed, 556,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000003818670454374505428607388051278549483227999788294735548394894\"\r\n        \"9148098143234256410642469945186872579506559401013191154986865054007072037585367902631431956687106696279437\"\r\n        \"9711382756141692073026348792838299357754974383299677344760458317947858611705076200307089669769755783083362\"\r\n        \"2625079094900278943928561734259544510810397313244552114080846706192839980543022941635288849612783756981571\"\r\n        \"05944119393825531005859375\"},\r\n    {0x1.fffffffffffffp-503, chars_format::fixed, 555,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000007637340908749010857214776102557098966455999576589471096789789\"\r\n        \"8296196286468512821284939890373745159013118802026382309973730108014144075170735805262863913374213392558875\"\r\n        \"9422765512283384146052697585676598715509948766599354689520916635895717223410152400614179339539511566166724\"\r\n        \"5250158189800557887857123468519089021620794626489104228161693412385679961086045883270577699225567513963142\"\r\n        \"1188823878765106201171875\"},\r\n    {0x1.fffffffffffffp-502, chars_format::fixed, 554,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000015274681817498021714429552205114197932911999153178942193579579\"\r\n        \"6592392572937025642569879780747490318026237604052764619947460216028288150341471610525727826748426785117751\"\r\n        \"8845531024566768292105395171353197431019897533198709379041833271791434446820304801228358679079023132333449\"\r\n        \"0500316379601115775714246937038178043241589252978208456323386824771359922172091766541155398451135027926284\"\r\n        \"237764775753021240234375\"},\r\n    {0x1.fffffffffffffp-501, chars_format::fixed, 553,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000030549363634996043428859104410228395865823998306357884387159159\"\r\n        \"3184785145874051285139759561494980636052475208105529239894920432056576300682943221051455653496853570235503\"\r\n        \"7691062049133536584210790342706394862039795066397418758083666543582868893640609602456717358158046264666898\"\r\n        \"1000632759202231551428493874076356086483178505956416912646773649542719844344183533082310796902270055852568\"\r\n        \"47552955150604248046875\"},\r\n    {0x1.fffffffffffffp-500, chars_format::fixed, 552,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000061098727269992086857718208820456791731647996612715768774318318\"\r\n        \"6369570291748102570279519122989961272104950416211058479789840864113152601365886442102911306993707140471007\"\r\n        \"5382124098267073168421580685412789724079590132794837516167333087165737787281219204913434716316092529333796\"\r\n        \"2001265518404463102856987748152712172966357011912833825293547299085439688688367066164621593804540111705136\"\r\n        \"9510591030120849609375\"},\r\n    {0x1.fffffffffffffp-499, chars_format::fixed, 551,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000122197454539984173715436417640913583463295993225431537548636637\"\r\n        \"2739140583496205140559038245979922544209900832422116959579681728226305202731772884205822613987414280942015\"\r\n        \"0764248196534146336843161370825579448159180265589675032334666174331475574562438409826869432632185058667592\"\r\n        \"4002531036808926205713975496305424345932714023825667650587094598170879377376734132329243187609080223410273\"\r\n        \"902118206024169921875\"},\r\n    {0x1.fffffffffffffp-498, chars_format::fixed, 550,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000244394909079968347430872835281827166926591986450863075097273274\"\r\n        \"5478281166992410281118076491959845088419801664844233919159363456452610405463545768411645227974828561884030\"\r\n        \"1528496393068292673686322741651158896318360531179350064669332348662951149124876819653738865264370117335184\"\r\n        \"8005062073617852411427950992610848691865428047651335301174189196341758754753468264658486375218160446820547\"\r\n        \"80423641204833984375\"},\r\n    {0x1.fffffffffffffp-497, chars_format::fixed, 549,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000488789818159936694861745670563654333853183972901726150194546549\"\r\n        \"0956562333984820562236152983919690176839603329688467838318726912905220810927091536823290455949657123768060\"\r\n        \"3056992786136585347372645483302317792636721062358700129338664697325902298249753639307477730528740234670369\"\r\n        \"6010124147235704822855901985221697383730856095302670602348378392683517509506936529316972750436320893641095\"\r\n        \"6084728240966796875\"},\r\n    {0x1.fffffffffffffp-496, chars_format::fixed, 548,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000000977579636319873389723491341127308667706367945803452300389093098\"\r\n        \"1913124667969641124472305967839380353679206659376935676637453825810441621854183073646580911899314247536120\"\r\n        \"6113985572273170694745290966604635585273442124717400258677329394651804596499507278614955461057480469340739\"\r\n        \"2020248294471409645711803970443394767461712190605341204696756785367035019013873058633945500872641787282191\"\r\n        \"216945648193359375\"},\r\n    {0x1.fffffffffffffp-495, chars_format::fixed, 547,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000001955159272639746779446982682254617335412735891606904600778186196\"\r\n        \"3826249335939282248944611935678760707358413318753871353274907651620883243708366147293161823798628495072241\"\r\n        \"2227971144546341389490581933209271170546884249434800517354658789303609192999014557229910922114960938681478\"\r\n        \"4040496588942819291423607940886789534923424381210682409393513570734070038027746117267891001745283574564382\"\r\n        \"43389129638671875\"},\r\n    {0x1.fffffffffffffp-494, chars_format::fixed, 546,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000003910318545279493558893965364509234670825471783213809201556372392\"\r\n        \"7652498671878564497889223871357521414716826637507742706549815303241766487416732294586323647597256990144482\"\r\n        \"4455942289092682778981163866418542341093768498869601034709317578607218385998029114459821844229921877362956\"\r\n        \"8080993177885638582847215881773579069846848762421364818787027141468140076055492234535782003490567149128764\"\r\n        \"8677825927734375\"},\r\n    {0x1.fffffffffffffp-493, chars_format::fixed, 545,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000007820637090558987117787930729018469341650943566427618403112744785\"\r\n        \"5304997343757128995778447742715042829433653275015485413099630606483532974833464589172647295194513980288964\"\r\n        \"8911884578185365557962327732837084682187536997739202069418635157214436771996058228919643688459843754725913\"\r\n        \"6161986355771277165694431763547158139693697524842729637574054282936280152110984469071564006981134298257529\"\r\n        \"735565185546875\"},\r\n    {0x1.fffffffffffffp-492, chars_format::fixed, 544,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000015641274181117974235575861458036938683301887132855236806225489571\"\r\n        \"0609994687514257991556895485430085658867306550030970826199261212967065949666929178345294590389027960577929\"\r\n        \"7823769156370731115924655465674169364375073995478404138837270314428873543992116457839287376919687509451827\"\r\n        \"2323972711542554331388863527094316279387395049685459275148108565872560304221968938143128013962268596515059\"\r\n        \"47113037109375\"},\r\n    {0x1.fffffffffffffp-491, chars_format::fixed, 543,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000031282548362235948471151722916073877366603774265710473612450979142\"\r\n        \"1219989375028515983113790970860171317734613100061941652398522425934131899333858356690589180778055921155859\"\r\n        \"5647538312741462231849310931348338728750147990956808277674540628857747087984232915678574753839375018903654\"\r\n        \"4647945423085108662777727054188632558774790099370918550296217131745120608443937876286256027924537193030118\"\r\n        \"9422607421875\"},\r\n    {0x1.fffffffffffffp-490, chars_format::fixed, 542,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000062565096724471896942303445832147754733207548531420947224901958284\"\r\n        \"2439978750057031966227581941720342635469226200123883304797044851868263798667716713381178361556111842311719\"\r\n        \"1295076625482924463698621862696677457500295981913616555349081257715494175968465831357149507678750037807308\"\r\n        \"9295890846170217325555454108377265117549580198741837100592434263490241216887875752572512055849074386060237\"\r\n        \"884521484375\"},\r\n    {0x1.fffffffffffffp-489, chars_format::fixed, 541,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000125130193448943793884606891664295509466415097062841894449803916568\"\r\n        \"4879957500114063932455163883440685270938452400247766609594089703736527597335433426762356723112223684623438\"\r\n        \"2590153250965848927397243725393354915000591963827233110698162515430988351936931662714299015357500075614617\"\r\n        \"8591781692340434651110908216754530235099160397483674201184868526980482433775751505145024111698148772120475\"\r\n        \"76904296875\"},\r\n    {0x1.fffffffffffffp-488, chars_format::fixed, 540,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000250260386897887587769213783328591018932830194125683788899607833136\"\r\n        \"9759915000228127864910327766881370541876904800495533219188179407473055194670866853524713446224447369246876\"\r\n        \"5180306501931697854794487450786709830001183927654466221396325030861976703873863325428598030715000151229235\"\r\n        \"7183563384680869302221816433509060470198320794967348402369737053960964867551503010290048223396297544240951\"\r\n        \"5380859375\"},\r\n    {0x1.fffffffffffffp-487, chars_format::fixed, 539,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000000500520773795775175538427566657182037865660388251367577799215666273\"\r\n        \"9519830000456255729820655533762741083753809600991066438376358814946110389341733707049426892448894738493753\"\r\n        \"0360613003863395709588974901573419660002367855308932442792650061723953407747726650857196061430000302458471\"\r\n        \"4367126769361738604443632867018120940396641589934696804739474107921929735103006020580096446792595088481903\"\r\n        \"076171875\"},\r\n    {0x1.fffffffffffffp-486, chars_format::fixed, 538,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000001001041547591550351076855133314364075731320776502735155598431332547\"\r\n        \"9039660000912511459641311067525482167507619201982132876752717629892220778683467414098853784897789476987506\"\r\n        \"0721226007726791419177949803146839320004735710617864885585300123447906815495453301714392122860000604916942\"\r\n        \"8734253538723477208887265734036241880793283179869393609478948215843859470206012041160192893585190176963806\"\r\n        \"15234375\"},\r\n    {0x1.fffffffffffffp-485, chars_format::fixed, 537,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000002002083095183100702153710266628728151462641553005470311196862665095\"\r\n        \"8079320001825022919282622135050964335015238403964265753505435259784441557366934828197707569795578953975012\"\r\n        \"1442452015453582838355899606293678640009471421235729771170600246895813630990906603428784245720001209833885\"\r\n        \"7468507077446954417774531468072483761586566359738787218957896431687718940412024082320385787170380353927612\"\r\n        \"3046875\"},\r\n    {0x1.fffffffffffffp-484, chars_format::fixed, 536,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000004004166190366201404307420533257456302925283106010940622393725330191\"\r\n        \"6158640003650045838565244270101928670030476807928531507010870519568883114733869656395415139591157907950024\"\r\n        \"2884904030907165676711799212587357280018942842471459542341200493791627261981813206857568491440002419667771\"\r\n        \"4937014154893908835549062936144967523173132719477574437915792863375437880824048164640771574340760707855224\"\r\n        \"609375\"},\r\n    {0x1.fffffffffffffp-483, chars_format::fixed, 535,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000008008332380732402808614841066514912605850566212021881244787450660383\"\r\n        \"2317280007300091677130488540203857340060953615857063014021741039137766229467739312790830279182315815900048\"\r\n        \"5769808061814331353423598425174714560037885684942919084682400987583254523963626413715136982880004839335542\"\r\n        \"9874028309787817671098125872289935046346265438955148875831585726750875761648096329281543148681521415710449\"\r\n        \"21875\"},\r\n    {0x1.fffffffffffffp-482, chars_format::fixed, 534,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000016016664761464805617229682133029825211701132424043762489574901320766\"\r\n        \"4634560014600183354260977080407714680121907231714126028043482078275532458935478625581660558364631631800097\"\r\n        \"1539616123628662706847196850349429120075771369885838169364801975166509047927252827430273965760009678671085\"\r\n        \"9748056619575635342196251744579870092692530877910297751663171453501751523296192658563086297363042831420898\"\r\n        \"4375\"},\r\n    {0x1.fffffffffffffp-481, chars_format::fixed, 533,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000032033329522929611234459364266059650423402264848087524979149802641532\"\r\n        \"9269120029200366708521954160815429360243814463428252056086964156551064917870957251163321116729263263600194\"\r\n        \"3079232247257325413694393700698858240151542739771676338729603950333018095854505654860547931520019357342171\"\r\n        \"9496113239151270684392503489159740185385061755820595503326342907003503046592385317126172594726085662841796\"\r\n        \"875\"},\r\n    {0x1.fffffffffffffp-480, chars_format::fixed, 532,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000064066659045859222468918728532119300846804529696175049958299605283065\"\r\n        \"8538240058400733417043908321630858720487628926856504112173928313102129835741914502326642233458526527200388\"\r\n        \"6158464494514650827388787401397716480303085479543352677459207900666036191709011309721095863040038714684343\"\r\n        \"8992226478302541368785006978319480370770123511641191006652685814007006093184770634252345189452171325683593\"\r\n        \"75\"},\r\n    {0x1.fffffffffffffp-479, chars_format::fixed, 531,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000128133318091718444937837457064238601693609059392350099916599210566131\"\r\n        \"7076480116801466834087816643261717440975257853713008224347856626204259671483829004653284466917053054400777\"\r\n        \"2316928989029301654777574802795432960606170959086705354918415801332072383418022619442191726080077429368687\"\r\n        \"7984452956605082737570013956638960741540247023282382013305371628014012186369541268504690378904342651367187\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-478, chars_format::fixed, 530,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000256266636183436889875674914128477203387218118784700199833198421132263\"\r\n        \"4152960233602933668175633286523434881950515707426016448695713252408519342967658009306568933834106108801554\"\r\n        \"4633857978058603309555149605590865921212341918173410709836831602664144766836045238884383452160154858737375\"\r\n        \"596890591321016547514002791327792148308049404656476402661074325602802437273908253700938075780868530273437\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-477, chars_format::fixed, 529,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000000512533272366873779751349828256954406774436237569400399666396842264526\"\r\n        \"8305920467205867336351266573046869763901031414852032897391426504817038685935316018613137867668212217603108\"\r\n        \"9267715956117206619110299211181731842424683836346821419673663205328289533672090477768766904320309717474751\"\r\n        \"19378118264203309502800558265558429661609880931295280532214865120560487454781650740187615156173706054687\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-476, chars_format::fixed, 528,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000001025066544733747559502699656513908813548872475138800799332793684529053\"\r\n        \"6611840934411734672702533146093739527802062829704065794782853009634077371870632037226275735336424435206217\"\r\n        \"8535431912234413238220598422363463684849367672693642839347326410656579067344180955537533808640619434949502\"\r\n        \"38756236528406619005601116531116859323219761862590561064429730241120974909563301480375230312347412109375\"},\r\n    {0x1.fffffffffffffp-475, chars_format::fixed, 527,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000002050133089467495119005399313027817627097744950277601598665587369058107\"\r\n        \"3223681868823469345405066292187479055604125659408131589565706019268154743741264074452551470672848870412435\"\r\n        \"7070863824468826476441196844726927369698735345387285678694652821313158134688361911075067617281238869899004\"\r\n        \"7751247305681323801120223306223371864643952372518112212885946048224194981912660296075046062469482421875\"},\r\n    {0x1.fffffffffffffp-474, chars_format::fixed, 526,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000004100266178934990238010798626055635254195489900555203197331174738116214\"\r\n        \"6447363737646938690810132584374958111208251318816263179131412038536309487482528148905102941345697740824871\"\r\n        \"4141727648937652952882393689453854739397470690774571357389305642626316269376723822150135234562477739798009\"\r\n        \"550249461136264760224044661244674372928790474503622442577189209644838996382532059215009212493896484375\"},\r\n    {0x1.fffffffffffffp-473, chars_format::fixed, 525,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000008200532357869980476021597252111270508390979801110406394662349476232429\"\r\n        \"2894727475293877381620265168749916222416502637632526358262824077072618974965056297810205882691395481649742\"\r\n        \"8283455297875305905764787378907709478794941381549142714778611285252632538753447644300270469124955479596019\"\r\n        \"10049892227252952044808932248934874585758094900724488515437841928967799276506411843001842498779296875\"},\r\n    {0x1.fffffffffffffp-472, chars_format::fixed, 524,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000016401064715739960952043194504222541016781959602220812789324698952464858\"\r\n        \"5789454950587754763240530337499832444833005275265052716525648154145237949930112595620411765382790963299485\"\r\n        \"6566910595750611811529574757815418957589882763098285429557222570505265077506895288600540938249910959192038\"\r\n        \"2009978445450590408961786449786974917151618980144897703087568385793559855301282368600368499755859375\"},\r\n    {0x1.fffffffffffffp-471, chars_format::fixed, 523,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000032802129431479921904086389008445082033563919204441625578649397904929717\"\r\n        \"1578909901175509526481060674999664889666010550530105433051296308290475899860225191240823530765581926598971\"\r\n        \"3133821191501223623059149515630837915179765526196570859114445141010530155013790577201081876499821918384076\"\r\n        \"401995689090118081792357289957394983430323796028979540617513677158711971060256473720073699951171875\"},\r\n    {0x1.fffffffffffffp-470, chars_format::fixed, 522,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000065604258862959843808172778016890164067127838408883251157298795809859434\"\r\n        \"3157819802351019052962121349999329779332021101060210866102592616580951799720450382481647061531163853197942\"\r\n        \"6267642383002447246118299031261675830359531052393141718228890282021060310027581154402163752999643836768152\"\r\n        \"80399137818023616358471457991478996686064759205795908123502735431742394212051294744014739990234375\"},\r\n    {0x1.fffffffffffffp-469, chars_format::fixed, 521,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000131208517725919687616345556033780328134255676817766502314597591619718868\"\r\n        \"6315639604702038105924242699998659558664042202120421732205185233161903599440900764963294123062327706395885\"\r\n        \"2535284766004894492236598062523351660719062104786283436457780564042120620055162308804327505999287673536305\"\r\n        \"6079827563604723271694291598295799337212951841159181624700547086348478842410258948802947998046875\"},\r\n    {0x1.fffffffffffffp-468, chars_format::fixed, 520,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000262417035451839375232691112067560656268511353635533004629195183239437737\"\r\n        \"2631279209404076211848485399997319117328084404240843464410370466323807198881801529926588246124655412791770\"\r\n        \"5070569532009788984473196125046703321438124209572566872915561128084241240110324617608655011998575347072611\"\r\n        \"215965512720944654338858319659159867442590368231836324940109417269695768482051789760589599609375\"},\r\n    {0x1.fffffffffffffp-467, chars_format::fixed, 519,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000000524834070903678750465382224135121312537022707271066009258390366478875474\"\r\n        \"5262558418808152423696970799994638234656168808481686928820740932647614397763603059853176492249310825583541\"\r\n        \"0141139064019577968946392250093406642876248419145133745831122256168482480220649235217310023997150694145222\"\r\n        \"43193102544188930867771663931831973488518073646367264988021883453939153696410357952117919921875\"},\r\n    {0x1.fffffffffffffp-466, chars_format::fixed, 518,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000001049668141807357500930764448270242625074045414542132018516780732957750949\"\r\n        \"0525116837616304847393941599989276469312337616963373857641481865295228795527206119706352984498621651167082\"\r\n        \"0282278128039155937892784500186813285752496838290267491662244512336964960441298470434620047994301388290444\"\r\n        \"8638620508837786173554332786366394697703614729273452997604376690787830739282071590423583984375\"},\r\n    {0x1.fffffffffffffp-465, chars_format::fixed, 517,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000002099336283614715001861528896540485250148090829084264037033561465915501898\"\r\n        \"1050233675232609694787883199978552938624675233926747715282963730590457591054412239412705968997243302334164\"\r\n        \"0564556256078311875785569000373626571504993676580534983324489024673929920882596940869240095988602776580889\"\r\n        \"727724101767557234710866557273278939540722945854690599520875338157566147856414318084716796875\"},\r\n    {0x1.fffffffffffffp-464, chars_format::fixed, 516,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000004198672567229430003723057793080970500296181658168528074067122931831003796\"\r\n        \"2100467350465219389575766399957105877249350467853495430565927461180915182108824478825411937994486604668328\"\r\n        \"1129112512156623751571138000747253143009987353161069966648978049347859841765193881738480191977205553161779\"\r\n        \"45544820353511446942173311454655787908144589170938119904175067631513229571282863616943359375\"},\r\n    {0x1.fffffffffffffp-463, chars_format::fixed, 515,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000008397345134458860007446115586161941000592363316337056148134245863662007592\"\r\n        \"4200934700930438779151532799914211754498700935706990861131854922361830364217648957650823875988973209336656\"\r\n        \"2258225024313247503142276001494506286019974706322139933297956098695719683530387763476960383954411106323558\"\r\n        \"9108964070702289388434662290931157581628917834187623980835013526302645914256572723388671875\"},\r\n    {0x1.fffffffffffffp-462, chars_format::fixed, 514,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000016794690268917720014892231172323882001184726632674112296268491727324015184\"\r\n        \"8401869401860877558303065599828423508997401871413981722263709844723660728435297915301647751977946418673312\"\r\n        \"4516450048626495006284552002989012572039949412644279866595912197391439367060775526953920767908822212647117\"\r\n        \"821792814140457877686932458186231516325783566837524796167002705260529182851314544677734375\"},\r\n    {0x1.fffffffffffffp-461, chars_format::fixed, 513,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000033589380537835440029784462344647764002369453265348224592536983454648030369\"\r\n        \"6803738803721755116606131199656847017994803742827963444527419689447321456870595830603295503955892837346624\"\r\n        \"9032900097252990012569104005978025144079898825288559733191824394782878734121551053907841535817644425294235\"\r\n        \"64358562828091575537386491637246303265156713367504959233400541052105836570262908935546875\"},\r\n    {0x1.fffffffffffffp-460, chars_format::fixed, 512,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000067178761075670880059568924689295528004738906530696449185073966909296060739\"\r\n        \"3607477607443510233212262399313694035989607485655926889054839378894642913741191661206591007911785674693249\"\r\n        \"8065800194505980025138208011956050288159797650577119466383648789565757468243102107815683071635288850588471\"\r\n        \"2871712565618315107477298327449260653031342673500991846680108210421167314052581787109375\"},\r\n    {0x1.fffffffffffffp-459, chars_format::fixed, 511,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000134357522151341760119137849378591056009477813061392898370147933818592121478\"\r\n        \"7214955214887020466424524798627388071979214971311853778109678757789285827482383322413182015823571349386499\"\r\n        \"6131600389011960050276416023912100576319595301154238932767297579131514936486204215631366143270577701176942\"\r\n        \"574342513123663021495459665489852130606268534700198369336021642084233462810516357421875\"},\r\n    {0x1.fffffffffffffp-458, chars_format::fixed, 510,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000268715044302683520238275698757182112018955626122785796740295867637184242957\"\r\n        \"4429910429774040932849049597254776143958429942623707556219357515578571654964766644826364031647142698772999\"\r\n        \"2263200778023920100552832047824201152639190602308477865534595158263029872972408431262732286541155402353885\"\r\n        \"14868502624732604299091933097970426121253706940039673867204328416846692562103271484375\"},\r\n    {0x1.fffffffffffffp-457, chars_format::fixed, 509,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000000537430088605367040476551397514364224037911252245571593480591735274368485914\"\r\n        \"8859820859548081865698099194509552287916859885247415112438715031157143309929533289652728063294285397545998\"\r\n        \"4526401556047840201105664095648402305278381204616955731069190316526059745944816862525464573082310804707770\"\r\n        \"2973700524946520859818386619594085224250741388007934773440865683369338512420654296875\"},\r\n    {0x1.fffffffffffffp-456, chars_format::fixed, 508,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000001074860177210734080953102795028728448075822504491143186961183470548736971829\"\r\n        \"7719641719096163731396198389019104575833719770494830224877430062314286619859066579305456126588570795091996\"\r\n        \"9052803112095680402211328191296804610556762409233911462138380633052119491889633725050929146164621609415540\"\r\n        \"594740104989304171963677323918817044850148277601586954688173136673867702484130859375\"},\r\n    {0x1.fffffffffffffp-455, chars_format::fixed, 507,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000002149720354421468161906205590057456896151645008982286373922366941097473943659\"\r\n        \"5439283438192327462792396778038209151667439540989660449754860124628573239718133158610912253177141590183993\"\r\n        \"8105606224191360804422656382593609221113524818467822924276761266104238983779267450101858292329243218831081\"\r\n        \"18948020997860834392735464783763408970029655520317390937634627334773540496826171875\"},\r\n    {0x1.fffffffffffffp-454, chars_format::fixed, 506,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000004299440708842936323812411180114913792303290017964572747844733882194947887319\"\r\n        \"0878566876384654925584793556076418303334879081979320899509720249257146479436266317221824506354283180367987\"\r\n        \"6211212448382721608845312765187218442227049636935645848553522532208477967558534900203716584658486437662162\"\r\n        \"3789604199572166878547092956752681794005931104063478187526925466954708099365234375\"},\r\n    {0x1.fffffffffffffp-453, chars_format::fixed, 505,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000008598881417685872647624822360229827584606580035929145495689467764389895774638\"\r\n        \"1757133752769309851169587112152836606669758163958641799019440498514292958872532634443649012708566360735975\"\r\n        \"2422424896765443217690625530374436884454099273871291697107045064416955935117069800407433169316972875324324\"\r\n        \"757920839914433375709418591350536358801186220812695637505385093390941619873046875\"},\r\n    {0x1.fffffffffffffp-452, chars_format::fixed, 504,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000017197762835371745295249644720459655169213160071858290991378935528779791549276\"\r\n        \"3514267505538619702339174224305673213339516327917283598038880997028585917745065268887298025417132721471950\"\r\n        \"4844849793530886435381251060748873768908198547742583394214090128833911870234139600814866338633945750648649\"\r\n        \"51584167982886675141883718270107271760237244162539127501077018678188323974609375\"},\r\n    {0x1.fffffffffffffp-451, chars_format::fixed, 503,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000034395525670743490590499289440919310338426320143716581982757871057559583098552\"\r\n        \"7028535011077239404678348448611346426679032655834567196077761994057171835490130537774596050834265442943900\"\r\n        \"9689699587061772870762502121497747537816397095485166788428180257667823740468279201629732677267891501297299\"\r\n        \"0316833596577335028376743654021454352047448832507825500215403735637664794921875\"},\r\n    {0x1.fffffffffffffp-450, chars_format::fixed, 502,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000068791051341486981180998578881838620676852640287433163965515742115119166197105\"\r\n        \"4057070022154478809356696897222692853358065311669134392155523988114343670980261075549192101668530885887801\"\r\n        \"9379399174123545741525004242995495075632794190970333576856360515335647480936558403259465354535783002594598\"\r\n        \"063366719315467005675348730804290870409489766501565100043080747127532958984375\"},\r\n    {0x1.fffffffffffffp-449, chars_format::fixed, 501,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000137582102682973962361997157763677241353705280574866327931031484230238332394210\"\r\n        \"8114140044308957618713393794445385706716130623338268784311047976228687341960522151098384203337061771775603\"\r\n        \"8758798348247091483050008485990990151265588381940667153712721030671294961873116806518930709071566005189196\"\r\n        \"12673343863093401135069746160858174081897953300313020008616149425506591796875\"},\r\n    {0x1.fffffffffffffp-448, chars_format::fixed, 500,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000275164205365947924723994315527354482707410561149732655862062968460476664788421\"\r\n        \"6228280088617915237426787588890771413432261246676537568622095952457374683921044302196768406674123543551207\"\r\n        \"7517596696494182966100016971981980302531176763881334307425442061342589923746233613037861418143132010378392\"\r\n        \"2534668772618680227013949232171634816379590660062604001723229885101318359375\"},\r\n    {0x1.fffffffffffffp-447, chars_format::fixed, 499,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000000550328410731895849447988631054708965414821122299465311724125936920953329576843\"\r\n        \"2456560177235830474853575177781542826864522493353075137244191904914749367842088604393536813348247087102415\"\r\n        \"5035193392988365932200033943963960605062353527762668614850884122685179847492467226075722836286264020756784\"\r\n        \"506933754523736045402789846434326963275918132012520800344645977020263671875\"},\r\n    {0x1.fffffffffffffp-446, chars_format::fixed, 498,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000001100656821463791698895977262109417930829642244598930623448251873841906659153686\"\r\n        \"4913120354471660949707150355563085653729044986706150274488383809829498735684177208787073626696494174204831\"\r\n        \"0070386785976731864400067887927921210124707055525337229701768245370359694984934452151445672572528041513569\"\r\n        \"01386750904747209080557969286865392655183626402504160068929195404052734375\"},\r\n    {0x1.fffffffffffffp-445, chars_format::fixed, 497,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000002201313642927583397791954524218835861659284489197861246896503747683813318307372\"\r\n        \"9826240708943321899414300711126171307458089973412300548976767619658997471368354417574147253392988348409662\"\r\n        \"0140773571953463728800135775855842420249414111050674459403536490740719389969868904302891345145056083027138\"\r\n        \"0277350180949441816111593857373078531036725280500832013785839080810546875\"},\r\n    {0x1.fffffffffffffp-444, chars_format::fixed, 496,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000004402627285855166795583909048437671723318568978395722493793007495367626636614745\"\r\n        \"9652481417886643798828601422252342614916179946824601097953535239317994942736708835148294506785976696819324\"\r\n        \"0281547143906927457600271551711684840498828222101348918807072981481438779939737808605782690290112166054276\"\r\n        \"055470036189888363222318771474615706207345056100166402757167816162109375\"},\r\n    {0x1.fffffffffffffp-443, chars_format::fixed, 495,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000008805254571710333591167818096875343446637137956791444987586014990735253273229491\"\r\n        \"9304962835773287597657202844504685229832359893649202195907070478635989885473417670296589013571953393638648\"\r\n        \"0563094287813854915200543103423369680997656444202697837614145962962877559879475617211565380580224332108552\"\r\n        \"11094007237977672644463754294923141241469011220033280551433563232421875\"},\r\n    {0x1.fffffffffffffp-442, chars_format::fixed, 494,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000017610509143420667182335636193750686893274275913582889975172029981470506546458983\"\r\n        \"8609925671546575195314405689009370459664719787298404391814140957271979770946835340593178027143906787277296\"\r\n        \"1126188575627709830401086206846739361995312888405395675228291925925755119758951234423130761160448664217104\"\r\n        \"2218801447595534528892750858984628248293802244006656110286712646484375\"},\r\n    {0x1.fffffffffffffp-441, chars_format::fixed, 493,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000035221018286841334364671272387501373786548551827165779950344059962941013092917967\"\r\n        \"7219851343093150390628811378018740919329439574596808783628281914543959541893670681186356054287813574554592\"\r\n        \"2252377151255419660802172413693478723990625776810791350456583851851510239517902468846261522320897328434208\"\r\n        \"443760289519106905778550171796925649658760448801331222057342529296875\"},\r\n    {0x1.fffffffffffffp-440, chars_format::fixed, 492,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000070442036573682668729342544775002747573097103654331559900688119925882026185835935\"\r\n        \"4439702686186300781257622756037481838658879149193617567256563829087919083787341362372712108575627149109184\"\r\n        \"4504754302510839321604344827386957447981251553621582700913167703703020479035804937692523044641794656868416\"\r\n        \"88752057903821381155710034359385129931752089760266244411468505859375\"},\r\n    {0x1.fffffffffffffp-439, chars_format::fixed, 491,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000140884073147365337458685089550005495146194207308663119801376239851764052371671870\"\r\n        \"8879405372372601562515245512074963677317758298387235134513127658175838167574682724745424217151254298218368\"\r\n        \"9009508605021678643208689654773914895962503107243165401826335407406040958071609875385046089283589313736833\"\r\n        \"7750411580764276231142006871877025986350417952053248882293701171875\"},\r\n    {0x1.fffffffffffffp-438, chars_format::fixed, 490,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000281768146294730674917370179100010990292388414617326239602752479703528104743343741\"\r\n        \"7758810744745203125030491024149927354635516596774470269026255316351676335149365449490848434302508596436737\"\r\n        \"8019017210043357286417379309547829791925006214486330803652670814812081916143219750770092178567178627473667\"\r\n        \"550082316152855246228401374375405197270083590410649776458740234375\"},\r\n    {0x1.fffffffffffffp-437, chars_format::fixed, 489,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000000563536292589461349834740358200021980584776829234652479205504959407056209486687483\"\r\n        \"5517621489490406250060982048299854709271033193548940538052510632703352670298730898981696868605017192873475\"\r\n        \"6038034420086714572834758619095659583850012428972661607305341629624163832286439501540184357134357254947335\"\r\n        \"10016463230571049245680274875081039454016718082129955291748046875\"},\r\n    {0x1.fffffffffffffp-436, chars_format::fixed, 488,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000001127072585178922699669480716400043961169553658469304958411009918814112418973374967\"\r\n        \"1035242978980812500121964096599709418542066387097881076105021265406705340597461797963393737210034385746951\"\r\n        \"2076068840173429145669517238191319167700024857945323214610683259248327664572879003080368714268714509894670\"\r\n        \"2003292646114209849136054975016207890803343616425991058349609375\"},\r\n    {0x1.fffffffffffffp-435, chars_format::fixed, 487,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000002254145170357845399338961432800087922339107316938609916822019837628224837946749934\"\r\n        \"2070485957961625000243928193199418837084132774195762152210042530813410681194923595926787474420068771493902\"\r\n        \"4152137680346858291339034476382638335400049715890646429221366518496655329145758006160737428537429019789340\"\r\n        \"400658529222841969827210995003241578160668723285198211669921875\"},\r\n    {0x1.fffffffffffffp-434, chars_format::fixed, 486,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000004508290340715690798677922865600175844678214633877219833644039675256449675893499868\"\r\n        \"4140971915923250000487856386398837674168265548391524304420085061626821362389847191853574948840137542987804\"\r\n        \"8304275360693716582678068952765276670800099431781292858442733036993310658291516012321474857074858039578680\"\r\n        \"80131705844568393965442199000648315632133744657039642333984375\"},\r\n    {0x1.fffffffffffffp-433, chars_format::fixed, 485,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000009016580681431381597355845731200351689356429267754439667288079350512899351786999736\"\r\n        \"8281943831846500000975712772797675348336531096783048608840170123253642724779694383707149897680275085975609\"\r\n        \"6608550721387433165356137905530553341600198863562585716885466073986621316583032024642949714149716079157361\"\r\n        \"6026341168913678793088439800129663126426748931407928466796875\"},\r\n    {0x1.fffffffffffffp-432, chars_format::fixed, 484,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000018033161362862763194711691462400703378712858535508879334576158701025798703573999473\"\r\n        \"6563887663693000001951425545595350696673062193566097217680340246507285449559388767414299795360550171951219\"\r\n        \"3217101442774866330712275811061106683200397727125171433770932147973242633166064049285899428299432158314723\"\r\n        \"205268233782735758617687960025932625285349786281585693359375\"},\r\n    {0x1.fffffffffffffp-431, chars_format::fixed, 483,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000036066322725725526389423382924801406757425717071017758669152317402051597407147998947\"\r\n        \"3127775327386000003902851091190701393346124387132194435360680493014570899118777534828599590721100343902438\"\r\n        \"6434202885549732661424551622122213366400795454250342867541864295946485266332128098571798856598864316629446\"\r\n        \"41053646756547151723537592005186525057069957256317138671875\"},\r\n    {0x1.fffffffffffffp-430, chars_format::fixed, 482,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000072132645451451052778846765849602813514851434142035517338304634804103194814295997894\"\r\n        \"6255550654772000007805702182381402786692248774264388870721360986029141798237555069657199181442200687804877\"\r\n        \"2868405771099465322849103244244426732801590908500685735083728591892970532664256197143597713197728633258892\"\r\n        \"8210729351309430344707518401037305011413991451263427734375\"},\r\n    {0x1.fffffffffffffp-429, chars_format::fixed, 481,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000144265290902902105557693531699205627029702868284071034676609269608206389628591995789\"\r\n        \"2511101309544000015611404364762805573384497548528777741442721972058283596475110139314398362884401375609754\"\r\n        \"5736811542198930645698206488488853465603181817001371470167457183785941065328512394287195426395457266517785\"\r\n        \"642145870261886068941503680207461002282798290252685546875\"},\r\n    {0x1.fffffffffffffp-428, chars_format::fixed, 480,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000288530581805804211115387063398411254059405736568142069353218539216412779257183991578\"\r\n        \"5022202619088000031222808729525611146768995097057555482885443944116567192950220278628796725768802751219509\"\r\n        \"1473623084397861291396412976977706931206363634002742940334914367571882130657024788574390852790914533035571\"\r\n        \"28429174052377213788300736041492200456559658050537109375\"},\r\n    {0x1.fffffffffffffp-427, chars_format::fixed, 479,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000000577061163611608422230774126796822508118811473136284138706437078432825558514367983157\"\r\n        \"0044405238176000062445617459051222293537990194115110965770887888233134385900440557257593451537605502439018\"\r\n        \"2947246168795722582792825953955413862412727268005485880669828735143764261314049577148781705581829066071142\"\r\n        \"5685834810475442757660147208298440091311931610107421875\"},\r\n    {0x1.fffffffffffffp-426, chars_format::fixed, 478,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000001154122327223216844461548253593645016237622946272568277412874156865651117028735966314\"\r\n        \"0088810476352000124891234918102444587075980388230221931541775776466268771800881114515186903075211004878036\"\r\n        \"5894492337591445165585651907910827724825454536010971761339657470287528522628099154297563411163658132142285\"\r\n        \"137166962095088551532029441659688018262386322021484375\"},\r\n    {0x1.fffffffffffffp-425, chars_format::fixed, 477,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000002308244654446433688923096507187290032475245892545136554825748313731302234057471932628\"\r\n        \"0177620952704000249782469836204889174151960776460443863083551552932537543601762229030373806150422009756073\"\r\n        \"1788984675182890331171303815821655449650909072021943522679314940575057045256198308595126822327316264284570\"\r\n        \"27433392419017710306405888331937603652477264404296875\"},\r\n    {0x1.fffffffffffffp-424, chars_format::fixed, 476,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000004616489308892867377846193014374580064950491785090273109651496627462604468114943865256\"\r\n        \"0355241905408000499564939672409778348303921552920887726167103105865075087203524458060747612300844019512146\"\r\n        \"3577969350365780662342607631643310899301818144043887045358629881150114090512396617190253644654632528569140\"\r\n        \"5486678483803542061281177666387520730495452880859375\"},\r\n    {0x1.fffffffffffffp-423, chars_format::fixed, 475,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000009232978617785734755692386028749160129900983570180546219302993254925208936229887730512\"\r\n        \"0710483810816000999129879344819556696607843105841775452334206211730150174407048916121495224601688039024292\"\r\n        \"7155938700731561324685215263286621798603636288087774090717259762300228181024793234380507289309265057138281\"\r\n        \"097335696760708412256235533277504146099090576171875\"},\r\n    {0x1.fffffffffffffp-422, chars_format::fixed, 474,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000018465957235571469511384772057498320259801967140361092438605986509850417872459775461024\"\r\n        \"1420967621632001998259758689639113393215686211683550904668412423460300348814097832242990449203376078048585\"\r\n        \"4311877401463122649370430526573243597207272576175548181434519524600456362049586468761014578618530114276562\"\r\n        \"19467139352141682451247106655500829219818115234375\"},\r\n    {0x1.fffffffffffffp-421, chars_format::fixed, 473,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000036931914471142939022769544114996640519603934280722184877211973019700835744919550922048\"\r\n        \"2841935243264003996519517379278226786431372423367101809336824846920600697628195664485980898406752156097170\"\r\n        \"8623754802926245298740861053146487194414545152351096362869039049200912724099172937522029157237060228553124\"\r\n        \"3893427870428336490249421331100165843963623046875\"},\r\n    {0x1.fffffffffffffp-420, chars_format::fixed, 472,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000073863828942285878045539088229993281039207868561444369754423946039401671489839101844096\"\r\n        \"5683870486528007993039034758556453572862744846734203618673649693841201395256391328971961796813504312194341\"\r\n        \"7247509605852490597481722106292974388829090304702192725738078098401825448198345875044058314474120457106248\"\r\n        \"778685574085667298049884266220033168792724609375\"},\r\n    {0x1.fffffffffffffp-419, chars_format::fixed, 471,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000147727657884571756091078176459986562078415737122888739508847892078803342979678203688193\"\r\n        \"1367740973056015986078069517112907145725489693468407237347299387682402790512782657943923593627008624388683\"\r\n        \"4495019211704981194963444212585948777658180609404385451476156196803650896396691750088116628948240914212497\"\r\n        \"55737114817133459609976853244006633758544921875\"},\r\n    {0x1.fffffffffffffp-418, chars_format::fixed, 470,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000295455315769143512182156352919973124156831474245777479017695784157606685959356407376386\"\r\n        \"2735481946112031972156139034225814291450979386936814474694598775364805581025565315887847187254017248777366\"\r\n        \"8990038423409962389926888425171897555316361218808770902952312393607301792793383500176233257896481828424995\"\r\n        \"1147422963426691921995370648801326751708984375\"},\r\n    {0x1.fffffffffffffp-417, chars_format::fixed, 469,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000000590910631538287024364312705839946248313662948491554958035391568315213371918712814752772\"\r\n        \"5470963892224063944312278068451628582901958773873628949389197550729611162051130631775694374508034497554733\"\r\n        \"7980076846819924779853776850343795110632722437617541805904624787214603585586767000352466515792963656849990\"\r\n        \"229484592685338384399074129760265350341796875\"},\r\n    {0x1.fffffffffffffp-416, chars_format::fixed, 468,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000001181821263076574048728625411679892496627325896983109916070783136630426743837425629505545\"\r\n        \"0941927784448127888624556136903257165803917547747257898778395101459222324102261263551388749016068995109467\"\r\n        \"5960153693639849559707553700687590221265444875235083611809249574429207171173534000704933031585927313699980\"\r\n        \"45896918537067676879814825952053070068359375\"},\r\n    {0x1.fffffffffffffp-415, chars_format::fixed, 467,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000002363642526153148097457250823359784993254651793966219832141566273260853487674851259011090\"\r\n        \"1883855568896255777249112273806514331607835095494515797556790202918444648204522527102777498032137990218935\"\r\n        \"1920307387279699119415107401375180442530889750470167223618499148858414342347068001409866063171854627399960\"\r\n        \"9179383707413535375962965190410614013671875\"},\r\n    {0x1.fffffffffffffp-414, chars_format::fixed, 466,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000004727285052306296194914501646719569986509303587932439664283132546521706975349702518022180\"\r\n        \"3767711137792511554498224547613028663215670190989031595113580405836889296409045054205554996064275980437870\"\r\n        \"3840614774559398238830214802750360885061779500940334447236998297716828684694136002819732126343709254799921\"\r\n        \"835876741482707075192593038082122802734375\"},\r\n    {0x1.fffffffffffffp-413, chars_format::fixed, 465,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000009454570104612592389829003293439139973018607175864879328566265093043413950699405036044360\"\r\n        \"7535422275585023108996449095226057326431340381978063190227160811673778592818090108411109992128551960875740\"\r\n        \"7681229549118796477660429605500721770123559001880668894473996595433657369388272005639464252687418509599843\"\r\n        \"67175348296541415038518607616424560546875\"},\r\n    {0x1.fffffffffffffp-412, chars_format::fixed, 464,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000018909140209225184779658006586878279946037214351729758657132530186086827901398810072088721\"\r\n        \"5070844551170046217992898190452114652862680763956126380454321623347557185636180216822219984257103921751481\"\r\n        \"5362459098237592955320859211001443540247118003761337788947993190867314738776544011278928505374837019199687\"\r\n        \"3435069659308283007703721523284912109375\"},\r\n    {0x1.fffffffffffffp-411, chars_format::fixed, 463,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000037818280418450369559316013173756559892074428703459517314265060372173655802797620144177443\"\r\n        \"0141689102340092435985796380904229305725361527912252760908643246695114371272360433644439968514207843502963\"\r\n        \"0724918196475185910641718422002887080494236007522675577895986381734629477553088022557857010749674038399374\"\r\n        \"687013931861656601540744304656982421875\"},\r\n    {0x1.fffffffffffffp-410, chars_format::fixed, 462,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000075636560836900739118632026347513119784148857406919034628530120744347311605595240288354886\"\r\n        \"0283378204680184871971592761808458611450723055824505521817286493390228742544720867288879937028415687005926\"\r\n        \"1449836392950371821283436844005774160988472015045351155791972763469258955106176045115714021499348076798749\"\r\n        \"37402786372331320308148860931396484375\"},\r\n    {0x1.fffffffffffffp-409, chars_format::fixed, 461,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000151273121673801478237264052695026239568297714813838069257060241488694623211190480576709772\"\r\n        \"0566756409360369743943185523616917222901446111649011043634572986780457485089441734577759874056831374011852\"\r\n        \"2899672785900743642566873688011548321976944030090702311583945526938517910212352090231428042998696153597498\"\r\n        \"7480557274466264061629772186279296875\"},\r\n    {0x1.fffffffffffffp-408, chars_format::fixed, 460,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000302546243347602956474528105390052479136595429627676138514120482977389246422380961153419544\"\r\n        \"1133512818720739487886371047233834445802892223298022087269145973560914970178883469155519748113662748023704\"\r\n        \"5799345571801487285133747376023096643953888060181404623167891053877035820424704180462856085997392307194997\"\r\n        \"496111454893252812325954437255859375\"},\r\n    {0x1.fffffffffffffp-407, chars_format::fixed, 459,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000000605092486695205912949056210780104958273190859255352277028240965954778492844761922306839088\"\r\n        \"2267025637441478975772742094467668891605784446596044174538291947121829940357766938311039496227325496047409\"\r\n        \"1598691143602974570267494752046193287907776120362809246335782107754071640849408360925712171994784614389994\"\r\n        \"99222290978650562465190887451171875\"},\r\n    {0x1.fffffffffffffp-406, chars_format::fixed, 458,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000001210184973390411825898112421560209916546381718510704554056481931909556985689523844613678176\"\r\n        \"4534051274882957951545484188935337783211568893192088349076583894243659880715533876622078992454650992094818\"\r\n        \"3197382287205949140534989504092386575815552240725618492671564215508143281698816721851424343989569228779989\"\r\n        \"9844458195730112493038177490234375\"},\r\n    {0x1.fffffffffffffp-405, chars_format::fixed, 457,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000002420369946780823651796224843120419833092763437021409108112963863819113971379047689227356352\"\r\n        \"9068102549765915903090968377870675566423137786384176698153167788487319761431067753244157984909301984189636\"\r\n        \"6394764574411898281069979008184773151631104481451236985343128431016286563397633443702848687979138457559979\"\r\n        \"968891639146022498607635498046875\"},\r\n    {0x1.fffffffffffffp-404, chars_format::fixed, 456,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000004840739893561647303592449686240839666185526874042818216225927727638227942758095378454712705\"\r\n        \"8136205099531831806181936755741351132846275572768353396306335576974639522862135506488315969818603968379273\"\r\n        \"2789529148823796562139958016369546303262208962902473970686256862032573126795266887405697375958276915119959\"\r\n        \"93778327829204499721527099609375\"},\r\n    {0x1.fffffffffffffp-403, chars_format::fixed, 455,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000009681479787123294607184899372481679332371053748085636432451855455276455885516190756909425411\"\r\n        \"6272410199063663612363873511482702265692551145536706792612671153949279045724271012976631939637207936758546\"\r\n        \"5579058297647593124279916032739092606524417925804947941372513724065146253590533774811394751916553830239919\"\r\n        \"8755665565840899944305419921875\"},\r\n    {0x1.fffffffffffffp-402, chars_format::fixed, 454,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000019362959574246589214369798744963358664742107496171272864903710910552911771032381513818850823\"\r\n        \"2544820398127327224727747022965404531385102291073413585225342307898558091448542025953263879274415873517093\"\r\n        \"1158116595295186248559832065478185213048835851609895882745027448130292507181067549622789503833107660479839\"\r\n        \"751133113168179988861083984375\"},\r\n    {0x1.fffffffffffffp-401, chars_format::fixed, 453,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000038725919148493178428739597489926717329484214992342545729807421821105823542064763027637701646\"\r\n        \"5089640796254654449455494045930809062770204582146827170450684615797116182897084051906527758548831747034186\"\r\n        \"2316233190590372497119664130956370426097671703219791765490054896260585014362135099245579007666215320959679\"\r\n        \"50226622633635997772216796875\"},\r\n    {0x1.fffffffffffffp-400, chars_format::fixed, 452,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000077451838296986356857479194979853434658968429984685091459614843642211647084129526055275403293\"\r\n        \"0179281592509308898910988091861618125540409164293654340901369231594232365794168103813055517097663494068372\"\r\n        \"4632466381180744994239328261912740852195343406439583530980109792521170028724270198491158015332430641919359\"\r\n        \"0045324526727199554443359375\"},\r\n    {0x1.fffffffffffffp-399, chars_format::fixed, 451,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000154903676593972713714958389959706869317936859969370182919229687284423294168259052110550806586\"\r\n        \"0358563185018617797821976183723236251080818328587308681802738463188464731588336207626111034195326988136744\"\r\n        \"9264932762361489988478656523825481704390686812879167061960219585042340057448540396982316030664861283838718\"\r\n        \"009064905345439910888671875\"},\r\n    {0x1.fffffffffffffp-398, chars_format::fixed, 450,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000309807353187945427429916779919413738635873719938740365838459374568846588336518104221101613172\"\r\n        \"0717126370037235595643952367446472502161636657174617363605476926376929463176672415252222068390653976273489\"\r\n        \"8529865524722979976957313047650963408781373625758334123920439170084680114897080793964632061329722567677436\"\r\n        \"01812981069087982177734375\"},\r\n    {0x1.fffffffffffffp-397, chars_format::fixed, 449,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000000619614706375890854859833559838827477271747439877480731676918749137693176673036208442203226344\"\r\n        \"1434252740074471191287904734892945004323273314349234727210953852753858926353344830504444136781307952546979\"\r\n        \"7059731049445959953914626095301926817562747251516668247840878340169360229794161587929264122659445135354872\"\r\n        \"0362596213817596435546875\"},\r\n    {0x1.fffffffffffffp-396, chars_format::fixed, 448,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000001239229412751781709719667119677654954543494879754961463353837498275386353346072416884406452688\"\r\n        \"2868505480148942382575809469785890008646546628698469454421907705507717852706689661008888273562615905093959\"\r\n        \"4119462098891919907829252190603853635125494503033336495681756680338720459588323175858528245318890270709744\"\r\n        \"072519242763519287109375\"},\r\n    {0x1.fffffffffffffp-395, chars_format::fixed, 447,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000002478458825503563419439334239355309909086989759509922926707674996550772706692144833768812905376\"\r\n        \"5737010960297884765151618939571780017293093257396938908843815411015435705413379322017776547125231810187918\"\r\n        \"8238924197783839815658504381207707270250989006066672991363513360677440919176646351717056490637780541419488\"\r\n        \"14503848552703857421875\"},\r\n    {0x1.fffffffffffffp-394, chars_format::fixed, 446,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000004956917651007126838878668478710619818173979519019845853415349993101545413384289667537625810753\"\r\n        \"1474021920595769530303237879143560034586186514793877817687630822030871410826758644035553094250463620375837\"\r\n        \"6477848395567679631317008762415414540501978012133345982727026721354881838353292703434112981275561082838976\"\r\n        \"2900769710540771484375\"},\r\n    {0x1.fffffffffffffp-393, chars_format::fixed, 445,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000009913835302014253677757336957421239636347959038039691706830699986203090826768579335075251621506\"\r\n        \"2948043841191539060606475758287120069172373029587755635375261644061742821653517288071106188500927240751675\"\r\n        \"2955696791135359262634017524830829081003956024266691965454053442709763676706585406868225962551122165677952\"\r\n        \"580153942108154296875\"},\r\n    {0x1.fffffffffffffp-392, chars_format::fixed, 444,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000019827670604028507355514673914842479272695918076079383413661399972406181653537158670150503243012\"\r\n        \"5896087682383078121212951516574240138344746059175511270750523288123485643307034576142212377001854481503350\"\r\n        \"5911393582270718525268035049661658162007912048533383930908106885419527353413170813736451925102244331355905\"\r\n        \"16030788421630859375\"},\r\n    {0x1.fffffffffffffp-391, chars_format::fixed, 443,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000039655341208057014711029347829684958545391836152158766827322799944812363307074317340301006486025\"\r\n        \"1792175364766156242425903033148480276689492118351022541501046576246971286614069152284424754003708963006701\"\r\n        \"1822787164541437050536070099323316324015824097066767861816213770839054706826341627472903850204488662711810\"\r\n        \"3206157684326171875\"},\r\n    {0x1.fffffffffffffp-390, chars_format::fixed, 442,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000079310682416114029422058695659369917090783672304317533654645599889624726614148634680602012972050\"\r\n        \"3584350729532312484851806066296960553378984236702045083002093152493942573228138304568849508007417926013402\"\r\n        \"3645574329082874101072140198646632648031648194133535723632427541678109413652683254945807700408977325423620\"\r\n        \"641231536865234375\"},\r\n    {0x1.fffffffffffffp-389, chars_format::fixed, 441,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000158621364832228058844117391318739834181567344608635067309291199779249453228297269361204025944100\"\r\n        \"7168701459064624969703612132593921106757968473404090166004186304987885146456276609137699016014835852026804\"\r\n        \"7291148658165748202144280397293265296063296388267071447264855083356218827305366509891615400817954650847241\"\r\n        \"28246307373046875\"},\r\n    {0x1.fffffffffffffp-388, chars_format::fixed, 440,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000317242729664456117688234782637479668363134689217270134618582399558498906456594538722408051888201\"\r\n        \"4337402918129249939407224265187842213515936946808180332008372609975770292912553218275398032029671704053609\"\r\n        \"4582297316331496404288560794586530592126592776534142894529710166712437654610733019783230801635909301694482\"\r\n        \"5649261474609375\"},\r\n    {0x1.fffffffffffffp-387, chars_format::fixed, 439,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000000634485459328912235376469565274959336726269378434540269237164799116997812913189077444816103776402\"\r\n        \"8674805836258499878814448530375684427031873893616360664016745219951540585825106436550796064059343408107218\"\r\n        \"9164594632662992808577121589173061184253185553068285789059420333424875309221466039566461603271818603388965\"\r\n        \"129852294921875\"},\r\n    {0x1.fffffffffffffp-386, chars_format::fixed, 438,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000001268970918657824470752939130549918673452538756869080538474329598233995625826378154889632207552805\"\r\n        \"7349611672516999757628897060751368854063747787232721328033490439903081171650212873101592128118686816214437\"\r\n        \"8329189265325985617154243178346122368506371106136571578118840666849750618442932079132923206543637206777930\"\r\n        \"25970458984375\"},\r\n    {0x1.fffffffffffffp-385, chars_format::fixed, 437,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000002537941837315648941505878261099837346905077513738161076948659196467991251652756309779264415105611\"\r\n        \"4699223345033999515257794121502737708127495574465442656066980879806162343300425746203184256237373632428875\"\r\n        \"6658378530651971234308486356692244737012742212273143156237681333699501236885864158265846413087274413555860\"\r\n        \"5194091796875\"},\r\n    {0x1.fffffffffffffp-384, chars_format::fixed, 436,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000005075883674631297883011756522199674693810155027476322153897318392935982503305512619558528830211222\"\r\n        \"9398446690067999030515588243005475416254991148930885312133961759612324686600851492406368512474747264857751\"\r\n        \"3316757061303942468616972713384489474025484424546286312475362667399002473771728316531692826174548827111721\"\r\n        \"038818359375\"},\r\n    {0x1.fffffffffffffp-383, chars_format::fixed, 435,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000010151767349262595766023513044399349387620310054952644307794636785871965006611025239117057660422445\"\r\n        \"8796893380135998061031176486010950832509982297861770624267923519224649373201702984812737024949494529715502\"\r\n        \"6633514122607884937233945426768978948050968849092572624950725334798004947543456633063385652349097654223442\"\r\n        \"07763671875\"},\r\n    {0x1.fffffffffffffp-382, chars_format::fixed, 434,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000020303534698525191532047026088798698775240620109905288615589273571743930013222050478234115320844891\"\r\n        \"7593786760271996122062352972021901665019964595723541248535847038449298746403405969625474049898989059431005\"\r\n        \"3267028245215769874467890853537957896101937698185145249901450669596009895086913266126771304698195308446884\"\r\n        \"1552734375\"},\r\n    {0x1.fffffffffffffp-381, chars_format::fixed, 433,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000040607069397050383064094052177597397550481240219810577231178547143487860026444100956468230641689783\"\r\n        \"5187573520543992244124705944043803330039929191447082497071694076898597492806811939250948099797978118862010\"\r\n        \"6534056490431539748935781707075915792203875396370290499802901339192019790173826532253542609396390616893768\"\r\n        \"310546875\"},\r\n    {0x1.fffffffffffffp-380, chars_format::fixed, 432,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000081214138794100766128188104355194795100962480439621154462357094286975720052888201912936461283379567\"\r\n        \"0375147041087984488249411888087606660079858382894164994143388153797194985613623878501896199595956237724021\"\r\n        \"3068112980863079497871563414151831584407750792740580999605802678384039580347653064507085218792781233787536\"\r\n        \"62109375\"},\r\n    {0x1.fffffffffffffp-379, chars_format::fixed, 431,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000162428277588201532256376208710389590201924960879242308924714188573951440105776403825872922566759134\"\r\n        \"0750294082175968976498823776175213320159716765788329988286776307594389971227247757003792399191912475448042\"\r\n        \"6136225961726158995743126828303663168815501585481161999211605356768079160695306129014170437585562467575073\"\r\n        \"2421875\"},\r\n    {0x1.fffffffffffffp-378, chars_format::fixed, 430,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000324856555176403064512752417420779180403849921758484617849428377147902880211552807651745845133518268\"\r\n        \"1500588164351937952997647552350426640319433531576659976573552615188779942454495514007584798383824950896085\"\r\n        \"2272451923452317991486253656607326337631003170962323998423210713536158321390612258028340875171124935150146\"\r\n        \"484375\"},\r\n    {0x1.fffffffffffffp-377, chars_format::fixed, 429,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000000649713110352806129025504834841558360807699843516969235698856754295805760423105615303491690267036536\"\r\n        \"3001176328703875905995295104700853280638867063153319953147105230377559884908991028015169596767649901792170\"\r\n        \"4544903846904635982972507313214652675262006341924647996846421427072316642781224516056681750342249870300292\"\r\n        \"96875\"},\r\n    {0x1.fffffffffffffp-376, chars_format::fixed, 428,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000001299426220705612258051009669683116721615399687033938471397713508591611520846211230606983380534073072\"\r\n        \"6002352657407751811990590209401706561277734126306639906294210460755119769817982056030339193535299803584340\"\r\n        \"9089807693809271965945014626429305350524012683849295993692842854144633285562449032113363500684499740600585\"\r\n        \"9375\"},\r\n    {0x1.fffffffffffffp-375, chars_format::fixed, 427,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000002598852441411224516102019339366233443230799374067876942795427017183223041692422461213966761068146145\"\r\n        \"2004705314815503623981180418803413122555468252613279812588420921510239539635964112060678387070599607168681\"\r\n        \"8179615387618543931890029252858610701048025367698591987385685708289266571124898064226727001368999481201171\"\r\n        \"875\"},\r\n    {0x1.fffffffffffffp-374, chars_format::fixed, 426,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000005197704882822449032204038678732466886461598748135753885590854034366446083384844922427933522136292290\"\r\n        \"4009410629631007247962360837606826245110936505226559625176841843020479079271928224121356774141199214337363\"\r\n        \"6359230775237087863780058505717221402096050735397183974771371416578533142249796128453454002737998962402343\"\r\n        \"75\"},\r\n    {0x1.fffffffffffffp-373, chars_format::fixed, 425,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000010395409765644898064408077357464933772923197496271507771181708068732892166769689844855867044272584580\"\r\n        \"8018821259262014495924721675213652490221873010453119250353683686040958158543856448242713548282398428674727\"\r\n        \"2718461550474175727560117011434442804192101470794367949542742833157066284499592256906908005475997924804687\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-372, chars_format::fixed, 424,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000020790819531289796128816154714929867545846394992543015542363416137465784333539379689711734088545169161\"\r\n        \"6037642518524028991849443350427304980443746020906238500707367372081916317087712896485427096564796857349454\"\r\n        \"543692310094835145512023402286888560838420294158873589908548566631413256899918451381381601095199584960937\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-371, chars_format::fixed, 423,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000041581639062579592257632309429859735091692789985086031084726832274931568667078759379423468177090338323\"\r\n        \"2075285037048057983698886700854609960887492041812477001414734744163832634175425792970854193129593714698909\"\r\n        \"08738462018967029102404680457377712167684058831774717981709713326282651379983690276276320219039916992187\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-370, chars_format::fixed, 422,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000083163278125159184515264618859719470183385579970172062169453664549863137334157518758846936354180676646\"\r\n        \"4150570074096115967397773401709219921774984083624954002829469488327665268350851585941708386259187429397818\"\r\n        \"17476924037934058204809360914755424335368117663549435963419426652565302759967380552552640438079833984375\"},\r\n    {0x1.fffffffffffffp-369, chars_format::fixed, 421,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000166326556250318369030529237719438940366771159940344124338907329099726274668315037517693872708361353292\"\r\n        \"8301140148192231934795546803418439843549968167249908005658938976655330536701703171883416772518374858795636\"\r\n        \"3495384807586811640961872182951084867073623532709887192683885330513060551993476110510528087615966796875\"},\r\n    {0x1.fffffffffffffp-368, chars_format::fixed, 420,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000332653112500636738061058475438877880733542319880688248677814658199452549336630075035387745416722706585\"\r\n        \"6602280296384463869591093606836879687099936334499816011317877953310661073403406343766833545036749717591272\"\r\n        \"699076961517362328192374436590216973414724706541977438536777066102612110398695222102105617523193359375\"},\r\n    {0x1.fffffffffffffp-367, chars_format::fixed, 419,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0000665306225001273476122116950877755761467084639761376497355629316398905098673260150070775490833445413171\"\r\n        \"3204560592768927739182187213673759374199872668999632022635755906621322146806812687533667090073499435182545\"\r\n        \"39815392303472465638474887318043394682944941308395487707355413220522422079739044420421123504638671875\"},\r\n    {0x1.fffffffffffffp-366, chars_format::fixed, 418,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0001330612450002546952244233901755511522934169279522752994711258632797810197346520300141550981666890826342\"\r\n        \"6409121185537855478364374427347518748399745337999264045271511813242644293613625375067334180146998870365090\"\r\n        \"7963078460694493127694977463608678936588988261679097541471082644104484415947808884084224700927734375\"},\r\n    {0x1.fffffffffffffp-365, chars_format::fixed, 417,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0002661224900005093904488467803511023045868338559045505989422517265595620394693040600283101963333781652685\"\r\n        \"2818242371075710956728748854695037496799490675998528090543023626485288587227250750134668360293997740730181\"\r\n        \"592615692138898625538995492721735787317797652335819508294216528820896883189561776816844940185546875\"},\r\n    {0x1.fffffffffffffp-364, chars_format::fixed, 416,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0005322449800010187808976935607022046091736677118091011978845034531191240789386081200566203926667563305370\"\r\n        \"5636484742151421913457497709390074993598981351997056181086047252970577174454501500269336720587995481460363\"\r\n        \"18523138427779725107799098544347157463559530467163901658843305764179376637912355363368988037109375\"},\r\n    {0x1.fffffffffffffp-363, chars_format::fixed, 415,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0010644899600020375617953871214044092183473354236182023957690069062382481578772162401132407853335126610741\"\r\n        \"1272969484302843826914995418780149987197962703994112362172094505941154348909003000538673441175990962920726\"\r\n        \"3704627685555945021559819708869431492711906093432780331768661152835875327582471072673797607421875\"},\r\n    {0x1.fffffffffffffp-362, chars_format::fixed, 414,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0021289799200040751235907742428088184366946708472364047915380138124764963157544324802264815706670253221482\"\r\n        \"2545938968605687653829990837560299974395925407988224724344189011882308697818006001077346882351981925841452\"\r\n        \"740925537111189004311963941773886298542381218686556066353732230567175065516494214534759521484375\"},\r\n    {0x1.fffffffffffffp-361, chars_format::fixed, 413,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0042579598400081502471815484856176368733893416944728095830760276249529926315088649604529631413340506442964\"\r\n        \"5091877937211375307659981675120599948791850815976449448688378023764617395636012002154693764703963851682905\"\r\n        \"48185107422237800862392788354777259708476243737311213270746446113435013103298842906951904296875\"},\r\n    {0x1.fffffffffffffp-360, chars_format::fixed, 412,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0085159196800163004943630969712352737467786833889456191661520552499059852630177299209059262826681012885929\"\r\n        \"0183755874422750615319963350241199897583701631952898897376756047529234791272024004309387529407927703365810\"\r\n        \"9637021484447560172478557670955451941695248747462242654149289222687002620659768581390380859375\"},\r\n    {0x1.fffffffffffffp-359, chars_format::fixed, 411,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0170318393600326009887261939424705474935573667778912383323041104998119705260354598418118525653362025771858\"\r\n        \"0367511748845501230639926700482399795167403263905797794753512095058469582544048008618775058815855406731621\"\r\n        \"927404296889512034495711534191090388339049749492448530829857844537400524131953716278076171875\"},\r\n    {0x1.fffffffffffffp-358, chars_format::fixed, 410,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0340636787200652019774523878849410949871147335557824766646082209996239410520709196836237051306724051543716\"\r\n        \"0735023497691002461279853400964799590334806527811595589507024190116939165088096017237550117631710813463243\"\r\n        \"85480859377902406899142306838218077667809949898489706165971568907480104826390743255615234375\"},\r\n    {0x1.fffffffffffffp-357, chars_format::fixed, 409,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"0681273574401304039549047757698821899742294671115649533292164419992478821041418393672474102613448103087432\"\r\n        \"1470046995382004922559706801929599180669613055623191179014048380233878330176192034475100235263421626926487\"\r\n        \"7096171875580481379828461367643615533561989979697941233194313781496020965278148651123046875\"},\r\n    {0x1.fffffffffffffp-356, chars_format::fixed, 408,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"1362547148802608079098095515397643799484589342231299066584328839984957642082836787344948205226896206174864\"\r\n        \"2940093990764009845119413603859198361339226111246382358028096760467756660352384068950200470526843253852975\"\r\n        \"419234375116096275965692273528723106712397995939588246638862756299204193055629730224609375\"},\r\n    {0x1.fffffffffffffp-355, chars_format::fixed, 407,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"2725094297605216158196191030795287598969178684462598133168657679969915284165673574689896410453792412349728\"\r\n        \"5880187981528019690238827207718396722678452222492764716056193520935513320704768137900400941053686507705950\"\r\n        \"83846875023219255193138454705744621342479599187917649327772551259840838611125946044921875\"},\r\n    {0x1.fffffffffffffp-354, chars_format::fixed, 406,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n        \"5450188595210432316392382061590575197938357368925196266337315359939830568331347149379792820907584824699457\"\r\n        \"1760375963056039380477654415436793445356904444985529432112387041871026641409536275800801882107373015411901\"\r\n        \"6769375004643851038627690941148924268495919837583529865554510251968167722225189208984375\"},\r\n    {0x1.fffffffffffffp-353, chars_format::fixed, 405,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\"\r\n        \"0900377190420864632784764123181150395876714737850392532674630719879661136662694298759585641815169649398914\"\r\n        \"3520751926112078760955308830873586890713808889971058864224774083742053282819072551601603764214746030823803\"\r\n        \"353875000928770207725538188229784853699183967516705973110902050393633544445037841796875\"},\r\n    {0x1.fffffffffffffp-352, chars_format::fixed, 404,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002\"\r\n        \"1800754380841729265569528246362300791753429475700785065349261439759322273325388597519171283630339298797828\"\r\n        \"7041503852224157521910617661747173781427617779942117728449548167484106565638145103203207528429492061647606\"\r\n        \"70775000185754041545107637645956970739836793503341194622180410078726708889007568359375\"},\r\n    {0x1.fffffffffffffp-351, chars_format::fixed, 403,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004\"\r\n        \"3601508761683458531139056492724601583506858951401570130698522879518644546650777195038342567260678597595657\"\r\n        \"4083007704448315043821235323494347562855235559884235456899096334968213131276290206406415056858984123295213\"\r\n        \"4155000037150808309021527529191394147967358700668238924436082015745341777801513671875\"},\r\n    {0x1.fffffffffffffp-350, chars_format::fixed, 402,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008\"\r\n        \"7203017523366917062278112985449203167013717902803140261397045759037289093301554390076685134521357195191314\"\r\n        \"8166015408896630087642470646988695125710471119768470913798192669936426262552580412812830113717968246590426\"\r\n        \"831000007430161661804305505838278829593471740133647784887216403149068355560302734375\"},\r\n    {0x1.fffffffffffffp-349, chars_format::fixed, 401,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017\"\r\n        \"4406035046733834124556225970898406334027435805606280522794091518074578186603108780153370269042714390382629\"\r\n        \"6332030817793260175284941293977390251420942239536941827596385339872852525105160825625660227435936493180853\"\r\n        \"66200001486032332360861101167655765918694348026729556977443280629813671112060546875\"},\r\n    {0x1.fffffffffffffp-348, chars_format::fixed, 400,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034\"\r\n        \"8812070093467668249112451941796812668054871611212561045588183036149156373206217560306740538085428780765259\"\r\n        \"2664061635586520350569882587954780502841884479073883655192770679745705050210321651251320454871872986361707\"\r\n        \"3240000297206466472172220233531153183738869605345911395488656125962734222412109375\"},\r\n    {0x1.fffffffffffffp-347, chars_format::fixed, 399,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069\"\r\n        \"7624140186935336498224903883593625336109743222425122091176366072298312746412435120613481076170857561530518\"\r\n        \"5328123271173040701139765175909561005683768958147767310385541359491410100420643302502640909743745972723414\"\r\n        \"648000059441293294434444046706230636747773921069182279097731225192546844482421875\"},\r\n    {0x1.fffffffffffffp-346, chars_format::fixed, 398,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000139\"\r\n        \"5248280373870672996449807767187250672219486444850244182352732144596625492824870241226962152341715123061037\"\r\n        \"0656246542346081402279530351819122011367537916295534620771082718982820200841286605005281819487491945446829\"\r\n        \"29600011888258658886888809341246127349554784213836455819546245038509368896484375\"},\r\n    {0x1.fffffffffffffp-345, chars_format::fixed, 397,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000279\"\r\n        \"0496560747741345992899615534374501344438972889700488364705464289193250985649740482453924304683430246122074\"\r\n        \"1312493084692162804559060703638244022735075832591069241542165437965640401682573210010563638974983890893658\"\r\n        \"5920002377651731777377761868249225469910956842767291163909249007701873779296875\"},\r\n    {0x1.fffffffffffffp-344, chars_format::fixed, 396,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000558\"\r\n        \"0993121495482691985799231068749002688877945779400976729410928578386501971299480964907848609366860492244148\"\r\n        \"2624986169384325609118121407276488045470151665182138483084330875931280803365146420021127277949967781787317\"\r\n        \"184000475530346355475552373649845093982191368553458232781849801540374755859375\"},\r\n    {0x1.fffffffffffffp-343, chars_format::fixed, 395,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001116\"\r\n        \"1986242990965383971598462137498005377755891558801953458821857156773003942598961929815697218733720984488296\"\r\n        \"5249972338768651218236242814552976090940303330364276966168661751862561606730292840042254555899935563574634\"\r\n        \"36800095106069271095110474729969018796438273710691646556369960308074951171875\"},\r\n    {0x1.fffffffffffffp-342, chars_format::fixed, 394,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002232\"\r\n        \"3972485981930767943196924274996010755511783117603906917643714313546007885197923859631394437467441968976593\"\r\n        \"0499944677537302436472485629105952181880606660728553932337323503725123213460585680084509111799871127149268\"\r\n        \"7360019021213854219022094945993803759287654742138329311273992061614990234375\"},\r\n    {0x1.fffffffffffffp-341, chars_format::fixed, 393,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004464\"\r\n        \"7944971963861535886393848549992021511023566235207813835287428627092015770395847719262788874934883937953186\"\r\n        \"0999889355074604872944971258211904363761213321457107864674647007450246426921171360169018223599742254298537\"\r\n        \"472003804242770843804418989198760751857530948427665862254798412322998046875\"},\r\n    {0x1.fffffffffffffp-340, chars_format::fixed, 392,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008929\"\r\n        \"5889943927723071772787697099984043022047132470415627670574857254184031540791695438525577749869767875906372\"\r\n        \"1999778710149209745889942516423808727522426642914215729349294014900492853842342720338036447199484508597074\"\r\n        \"94400760848554168760883797839752150371506189685533172450959682464599609375\"},\r\n    {0x1.fffffffffffffp-339, chars_format::fixed, 391,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017859\"\r\n        \"1779887855446143545575394199968086044094264940831255341149714508368063081583390877051155499739535751812744\"\r\n        \"3999557420298419491779885032847617455044853285828431458698588029800985707684685440676072894398969017194149\"\r\n        \"8880152169710833752176759567950430074301237937106634490191936492919921875\"},\r\n    {0x1.fffffffffffffp-338, chars_format::fixed, 390,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035718\"\r\n        \"3559775710892287091150788399936172088188529881662510682299429016736126163166781754102310999479071503625488\"\r\n        \"7999114840596838983559770065695234910089706571656862917397176059601971415369370881352145788797938034388299\"\r\n        \"776030433942166750435351913590086014860247587421326898038387298583984375\"},\r\n    {0x1.fffffffffffffp-337, chars_format::fixed, 389,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071436\"\r\n        \"7119551421784574182301576799872344176377059763325021364598858033472252326333563508204621998958143007250977\"\r\n        \"5998229681193677967119540131390469820179413143313725834794352119203942830738741762704291577595876068776599\"\r\n        \"55206086788433350087070382718017202972049517484265379607677459716796875\"},\r\n    {0x1.fffffffffffffp-336, chars_format::fixed, 388,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142873\"\r\n        \"4239102843569148364603153599744688352754119526650042729197716066944504652667127016409243997916286014501955\"\r\n        \"1996459362387355934239080262780939640358826286627451669588704238407885661477483525408583155191752137553199\"\r\n        \"1041217357686670017414076543603440594409903496853075921535491943359375\"},\r\n    {0x1.fffffffffffffp-335, chars_format::fixed, 387,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000285746\"\r\n        \"8478205687138296729206307199489376705508239053300085458395432133889009305334254032818487995832572029003910\"\r\n        \"3992918724774711868478160525561879280717652573254903339177408476815771322954967050817166310383504275106398\"\r\n        \"208243471537334003482815308720688118881980699370615184307098388671875\"},\r\n    {0x1.fffffffffffffp-334, chars_format::fixed, 386,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000571493\"\r\n        \"6956411374276593458412614398978753411016478106600170916790864267778018610668508065636975991665144058007820\"\r\n        \"7985837449549423736956321051123758561435305146509806678354816953631542645909934101634332620767008550212796\"\r\n        \"41648694307466800696563061744137623776396139874123036861419677734375\"},\r\n    {0x1.fffffffffffffp-333, chars_format::fixed, 385,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142987\"\r\n        \"3912822748553186916825228797957506822032956213200341833581728535556037221337016131273951983330288116015641\"\r\n        \"5971674899098847473912642102247517122870610293019613356709633907263085291819868203268665241534017100425592\"\r\n        \"8329738861493360139312612348827524755279227974824607372283935546875\"},\r\n    {0x1.fffffffffffffp-332, chars_format::fixed, 384,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002285974\"\r\n        \"7825645497106373833650457595915013644065912426400683667163457071112074442674032262547903966660576232031283\"\r\n        \"1943349798197694947825284204495034245741220586039226713419267814526170583639736406537330483068034200851185\"\r\n        \"665947772298672027862522469765504951055845594964921474456787109375\"},\r\n    {0x1.fffffffffffffp-331, chars_format::fixed, 383,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004571949\"\r\n        \"5651290994212747667300915191830027288131824852801367334326914142224148885348064525095807933321152464062566\"\r\n        \"3886699596395389895650568408990068491482441172078453426838535629052341167279472813074660966136068401702371\"\r\n        \"33189554459734405572504493953100990211169118992984294891357421875\"},\r\n    {0x1.fffffffffffffp-330, chars_format::fixed, 382,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009143899\"\r\n        \"1302581988425495334601830383660054576263649705602734668653828284448297770696129050191615866642304928125132\"\r\n        \"7773399192790779791301136817980136982964882344156906853677071258104682334558945626149321932272136803404742\"\r\n        \"6637910891946881114500898790620198042233823798596858978271484375\"},\r\n    {0x1.fffffffffffffp-329, chars_format::fixed, 381,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018287798\"\r\n        \"2605163976850990669203660767320109152527299411205469337307656568896595541392258100383231733284609856250265\"\r\n        \"5546798385581559582602273635960273965929764688313813707354142516209364669117891252298643864544273606809485\"\r\n        \"327582178389376222900179758124039608446764759719371795654296875\"},\r\n    {0x1.fffffffffffffp-328, chars_format::fixed, 380,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036575596\"\r\n        \"5210327953701981338407321534640218305054598822410938674615313137793191082784516200766463466569219712500531\"\r\n        \"1093596771163119165204547271920547931859529376627627414708285032418729338235782504597287729088547213618970\"\r\n        \"65516435677875244580035951624807921689352951943874359130859375\"},\r\n    {0x1.fffffffffffffp-327, chars_format::fixed, 379,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073151193\"\r\n        \"0420655907403962676814643069280436610109197644821877349230626275586382165569032401532926933138439425001062\"\r\n        \"2187193542326238330409094543841095863719058753255254829416570064837458676471565009194575458177094427237941\"\r\n        \"3103287135575048916007190324961584337870590388774871826171875\"},\r\n    {0x1.fffffffffffffp-326, chars_format::fixed, 378,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000146302386\"\r\n        \"0841311814807925353629286138560873220218395289643754698461252551172764331138064803065853866276878850002124\"\r\n        \"4374387084652476660818189087682191727438117506510509658833140129674917352943130018389150916354188854475882\"\r\n        \"620657427115009783201438064992316867574118077754974365234375\"},\r\n    {0x1.fffffffffffffp-325, chars_format::fixed, 377,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000292604772\"\r\n        \"1682623629615850707258572277121746440436790579287509396922505102345528662276129606131707732553757700004248\"\r\n        \"8748774169304953321636378175364383454876235013021019317666280259349834705886260036778301832708377708951765\"\r\n        \"24131485423001956640287612998463373514823615550994873046875\"},\r\n    {0x1.fffffffffffffp-324, chars_format::fixed, 376,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000585209544\"\r\n        \"3365247259231701414517144554243492880873581158575018793845010204691057324552259212263415465107515400008497\"\r\n        \"7497548338609906643272756350728766909752470026042038635332560518699669411772520073556603665416755417903530\"\r\n        \"4826297084600391328057522599692674702964723110198974609375\"},\r\n    {0x1.fffffffffffffp-323, chars_format::fixed, 375,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001170419088\"\r\n        \"6730494518463402829034289108486985761747162317150037587690020409382114649104518424526830930215030800016995\"\r\n        \"4995096677219813286545512701457533819504940052084077270665121037399338823545040147113207330833510835807060\"\r\n        \"965259416920078265611504519938534940592944622039794921875\"},\r\n    {0x1.fffffffffffffp-322, chars_format::fixed, 374,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002340838177\"\r\n        \"3460989036926805658068578216973971523494324634300075175380040818764229298209036849053661860430061600033990\"\r\n        \"9990193354439626573091025402915067639009880104168154541330242074798677647090080294226414661667021671614121\"\r\n        \"93051883384015653122300903987706988118588924407958984375\"},\r\n    {0x1.fffffffffffffp-321, chars_format::fixed, 373,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004681676354\"\r\n        \"6921978073853611316137156433947943046988649268600150350760081637528458596418073698107323720860123200067981\"\r\n        \"9980386708879253146182050805830135278019760208336309082660484149597355294180160588452829323334043343228243\"\r\n        \"8610376676803130624460180797541397623717784881591796875\"},\r\n    {0x1.fffffffffffffp-320, chars_format::fixed, 372,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009363352709\"\r\n        \"3843956147707222632274312867895886093977298537200300701520163275056917192836147396214647441720246400135963\"\r\n        \"9960773417758506292364101611660270556039520416672618165320968299194710588360321176905658646668086686456487\"\r\n        \"722075335360626124892036159508279524743556976318359375\"},\r\n    {0x1.fffffffffffffp-319, chars_format::fixed, 371,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018726705418\"\r\n        \"7687912295414445264548625735791772187954597074400601403040326550113834385672294792429294883440492800271927\"\r\n        \"9921546835517012584728203223320541112079040833345236330641936598389421176720642353811317293336173372912975\"\r\n        \"44415067072125224978407231901655904948711395263671875\"},\r\n    {0x1.fffffffffffffp-318, chars_format::fixed, 370,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037453410837\"\r\n        \"5375824590828890529097251471583544375909194148801202806080653100227668771344589584858589766880985600543855\"\r\n        \"9843093671034025169456406446641082224158081666690472661283873196778842353441284707622634586672346745825950\"\r\n        \"8883013414425044995681446380331180989742279052734375\"},\r\n    {0x1.fffffffffffffp-317, chars_format::fixed, 369,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074906821675\"\r\n        \"0751649181657781058194502943167088751818388297602405612161306200455337542689179169717179533761971201087711\"\r\n        \"9686187342068050338912812893282164448316163333380945322567746393557684706882569415245269173344693491651901\"\r\n        \"776602682885008999136289276066236197948455810546875\"},\r\n    {0x1.fffffffffffffp-316, chars_format::fixed, 368,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000149813643350\"\r\n        \"1503298363315562116389005886334177503636776595204811224322612400910675085378358339434359067523942402175423\"\r\n        \"9372374684136100677825625786564328896632326666761890645135492787115369413765138830490538346689386983303803\"\r\n        \"55320536577001799827257855213247239589691162109375\"},\r\n    {0x1.fffffffffffffp-315, chars_format::fixed, 367,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000299627286700\"\r\n        \"3006596726631124232778011772668355007273553190409622448645224801821350170756716678868718135047884804350847\"\r\n        \"8744749368272201355651251573128657793264653333523781290270985574230738827530277660981076693378773966607607\"\r\n        \"1064107315400359965451571042649447917938232421875\"},\r\n    {0x1.fffffffffffffp-314, chars_format::fixed, 366,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000599254573400\"\r\n        \"6013193453262248465556023545336710014547106380819244897290449603642700341513433357737436270095769608701695\"\r\n        \"7489498736544402711302503146257315586529306667047562580541971148461477655060555321962153386757547933215214\"\r\n        \"212821463080071993090314208529889583587646484375\"},\r\n    {0x1.fffffffffffffp-313, chars_format::fixed, 365,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001198509146801\"\r\n        \"2026386906524496931112047090673420029094212761638489794580899207285400683026866715474872540191539217403391\"\r\n        \"4978997473088805422605006292514631173058613334095125161083942296922955310121110643924306773515095866430428\"\r\n        \"42564292616014398618062841705977916717529296875\"},\r\n    {0x1.fffffffffffffp-312, chars_format::fixed, 364,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002397018293602\"\r\n        \"4052773813048993862224094181346840058188425523276979589161798414570801366053733430949745080383078434806782\"\r\n        \"9957994946177610845210012585029262346117226668190250322167884593845910620242221287848613547030191732860856\"\r\n        \"8512858523202879723612568341195583343505859375\"},\r\n    {0x1.fffffffffffffp-311, chars_format::fixed, 363,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004794036587204\"\r\n        \"8105547626097987724448188362693680116376851046553959178323596829141602732107466861899490160766156869613565\"\r\n        \"9915989892355221690420025170058524692234453336380500644335769187691821240484442575697227094060383465721713\"\r\n        \"702571704640575944722513668239116668701171875\"},\r\n    {0x1.fffffffffffffp-310, chars_format::fixed, 362,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009588073174409\"\r\n        \"6211095252195975448896376725387360232753702093107918356647193658283205464214933723798980321532313739227131\"\r\n        \"9831979784710443380840050340117049384468906672761001288671538375383642480968885151394454188120766931443427\"\r\n        \"40514340928115188944502733647823333740234375\"},\r\n    {0x1.fffffffffffffp-309, chars_format::fixed, 361,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019176146348819\"\r\n        \"2422190504391950897792753450774720465507404186215836713294387316566410928429867447597960643064627478454263\"\r\n        \"9663959569420886761680100680234098768937813345522002577343076750767284961937770302788908376241533862886854\"\r\n        \"8102868185623037788900546729564666748046875\"},\r\n    {0x1.fffffffffffffp-308, chars_format::fixed, 360,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038352292697638\"\r\n        \"4844381008783901795585506901549440931014808372431673426588774633132821856859734895195921286129254956908527\"\r\n        \"9327919138841773523360201360468197537875626691044005154686153501534569923875540605577816752483067725773709\"\r\n        \"620573637124607557780109345912933349609375\"},\r\n    {0x1.fffffffffffffp-307, chars_format::fixed, 359,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076704585395276\"\r\n        \"9688762017567803591171013803098881862029616744863346853177549266265643713719469790391842572258509913817055\"\r\n        \"8655838277683547046720402720936395075751253382088010309372307003069139847751081211155633504966135451547419\"\r\n        \"24114727424921511556021869182586669921875\"},\r\n    {0x1.fffffffffffffp-306, chars_format::fixed, 358,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000153409170790553\"\r\n        \"9377524035135607182342027606197763724059233489726693706355098532531287427438939580783685144517019827634111\"\r\n        \"7311676555367094093440805441872790151502506764176020618744614006138279695502162422311267009932270903094838\"\r\n        \"4822945484984302311204373836517333984375\"},\r\n    {0x1.fffffffffffffp-305, chars_format::fixed, 357,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306818341581107\"\r\n        \"8755048070271214364684055212395527448118466979453387412710197065062574854877879161567370289034039655268223\"\r\n        \"4623353110734188186881610883745580303005013528352041237489228012276559391004324844622534019864541806189676\"\r\n        \"964589096996860462240874767303466796875\"},\r\n    {0x1.fffffffffffffp-304, chars_format::fixed, 356,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613636683162215\"\r\n        \"7510096140542428729368110424791054896236933958906774825420394130125149709755758323134740578068079310536446\"\r\n        \"9246706221468376373763221767491160606010027056704082474978456024553118782008649689245068039729083612379353\"\r\n        \"92917819399372092448174953460693359375\"},\r\n    {0x1.fffffffffffffp-303, chars_format::fixed, 355,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001227273366324431\"\r\n        \"5020192281084857458736220849582109792473867917813549650840788260250299419511516646269481156136158621072893\"\r\n        \"8493412442936752747526443534982321212020054113408164949956912049106237564017299378490136079458167224758707\"\r\n        \"8583563879874418489634990692138671875\"},\r\n    {0x1.fffffffffffffp-302, chars_format::fixed, 354,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002454546732648863\"\r\n        \"0040384562169714917472441699164219584947735835627099301681576520500598839023033292538962312272317242145787\"\r\n        \"6986824885873505495052887069964642424040108226816329899913824098212475128034598756980272158916334449517415\"\r\n        \"716712775974883697926998138427734375\"},\r\n    {0x1.fffffffffffffp-301, chars_format::fixed, 353,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004909093465297726\"\r\n        \"0080769124339429834944883398328439169895471671254198603363153041001197678046066585077924624544634484291575\"\r\n        \"3973649771747010990105774139929284848080216453632659799827648196424950256069197513960544317832668899034831\"\r\n        \"43342555194976739585399627685546875\"},\r\n    {0x1.fffffffffffffp-300, chars_format::fixed, 352,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009818186930595452\"\r\n        \"0161538248678859669889766796656878339790943342508397206726306082002395356092133170155849249089268968583150\"\r\n        \"7947299543494021980211548279858569696160432907265319599655296392849900512138395027921088635665337798069662\"\r\n        \"8668511038995347917079925537109375\"},\r\n    {0x1.fffffffffffffp-299, chars_format::fixed, 351,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019636373861190904\"\r\n        \"0323076497357719339779533593313756679581886685016794413452612164004790712184266340311698498178537937166301\"\r\n        \"5894599086988043960423096559717139392320865814530639199310592785699801024276790055842177271330675596139325\"\r\n        \"733702207799069583415985107421875\"},\r\n    {0x1.fffffffffffffp-298, chars_format::fixed, 350,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039272747722381808\"\r\n        \"0646152994715438679559067186627513359163773370033588826905224328009581424368532680623396996357075874332603\"\r\n        \"1789198173976087920846193119434278784641731629061278398621185571399602048553580111684354542661351192278651\"\r\n        \"46740441559813916683197021484375\"},\r\n    {0x1.fffffffffffffp-297, chars_format::fixed, 349,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078545495444763616\"\r\n        \"1292305989430877359118134373255026718327546740067177653810448656019162848737065361246793992714151748665206\"\r\n        \"3578396347952175841692386238868557569283463258122556797242371142799204097107160223368709085322702384557302\"\r\n        \"9348088311962783336639404296875\"},\r\n    {0x1.fffffffffffffp-296, chars_format::fixed, 348,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000157090990889527232\"\r\n        \"2584611978861754718236268746510053436655093480134355307620897312038325697474130722493587985428303497330412\"\r\n        \"7156792695904351683384772477737115138566926516245113594484742285598408194214320446737418170645404769114605\"\r\n        \"869617662392556667327880859375\"},\r\n    {0x1.fffffffffffffp-295, chars_format::fixed, 347,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000314181981779054464\"\r\n        \"5169223957723509436472537493020106873310186960268710615241794624076651394948261444987175970856606994660825\"\r\n        \"4313585391808703366769544955474230277133853032490227188969484571196816388428640893474836341290809538229211\"\r\n        \"73923532478511333465576171875\"},\r\n    {0x1.fffffffffffffp-294, chars_format::fixed, 346,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000628363963558108929\"\r\n        \"0338447915447018872945074986040213746620373920537421230483589248153302789896522889974351941713213989321650\"\r\n        \"8627170783617406733539089910948460554267706064980454377938969142393632776857281786949672682581619076458423\"\r\n        \"4784706495702266693115234375\"},\r\n    {0x1.fffffffffffffp-293, chars_format::fixed, 345,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001256727927116217858\"\r\n        \"0676895830894037745890149972080427493240747841074842460967178496306605579793045779948703883426427978643301\"\r\n        \"7254341567234813467078179821896921108535412129960908755877938284787265553714563573899345365163238152916846\"\r\n        \"956941299140453338623046875\"},\r\n    {0x1.fffffffffffffp-292, chars_format::fixed, 344,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000002513455854232435716\"\r\n        \"1353791661788075491780299944160854986481495682149684921934356992613211159586091559897407766852855957286603\"\r\n        \"4508683134469626934156359643793842217070824259921817511755876569574531107429127147798690730326476305833693\"\r\n        \"91388259828090667724609375\"},\r\n    {0x1.fffffffffffffp-291, chars_format::fixed, 343,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000005026911708464871432\"\r\n        \"2707583323576150983560599888321709972962991364299369843868713985226422319172183119794815533705711914573206\"\r\n        \"9017366268939253868312719287587684434141648519843635023511753139149062214858254295597381460652952611667387\"\r\n        \"8277651965618133544921875\"},\r\n    {0x1.fffffffffffffp-290, chars_format::fixed, 342,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000010053823416929742864\"\r\n        \"5415166647152301967121199776643419945925982728598739687737427970452844638344366239589631067411423829146413\"\r\n        \"8034732537878507736625438575175368868283297039687270047023506278298124429716508591194762921305905223334775\"\r\n        \"655530393123626708984375\"},\r\n    {0x1.fffffffffffffp-289, chars_format::fixed, 341,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000020107646833859485729\"\r\n        \"0830333294304603934242399553286839891851965457197479375474855940905689276688732479179262134822847658292827\"\r\n        \"6069465075757015473250877150350737736566594079374540094047012556596248859433017182389525842611810446669551\"\r\n        \"31106078624725341796875\"},\r\n    {0x1.fffffffffffffp-288, chars_format::fixed, 340,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000040215293667718971458\"\r\n        \"1660666588609207868484799106573679783703930914394958750949711881811378553377464958358524269645695316585655\"\r\n        \"2138930151514030946501754300701475473133188158749080188094025113192497718866034364779051685223620893339102\"\r\n        \"6221215724945068359375\"},\r\n    {0x1.fffffffffffffp-287, chars_format::fixed, 339,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000080430587335437942916\"\r\n        \"3321333177218415736969598213147359567407861828789917501899423763622757106754929916717048539291390633171310\"\r\n        \"4277860303028061893003508601402950946266376317498160376188050226384995437732068729558103370447241786678205\"\r\n        \"244243144989013671875\"},\r\n    {0x1.fffffffffffffp-286, chars_format::fixed, 338,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000160861174670875885832\"\r\n        \"6642666354436831473939196426294719134815723657579835003798847527245514213509859833434097078582781266342620\"\r\n        \"8555720606056123786007017202805901892532752634996320752376100452769990875464137459116206740894483573356410\"\r\n        \"48848628997802734375\"},\r\n    {0x1.fffffffffffffp-285, chars_format::fixed, 337,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000321722349341751771665\"\r\n        \"3285332708873662947878392852589438269631447315159670007597695054491028427019719666868194157165562532685241\"\r\n        \"7111441212112247572014034405611803785065505269992641504752200905539981750928274918232413481788967146712820\"\r\n        \"9769725799560546875\"},\r\n    {0x1.fffffffffffffp-284, chars_format::fixed, 336,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000643444698683503543330\"\r\n        \"6570665417747325895756785705178876539262894630319340015195390108982056854039439333736388314331125065370483\"\r\n        \"4222882424224495144028068811223607570131010539985283009504401811079963501856549836464826963577934293425641\"\r\n        \"953945159912109375\"},\r\n    {0x1.fffffffffffffp-283, chars_format::fixed, 335,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000001286889397367007086661\"\r\n        \"3141330835494651791513571410357753078525789260638680030390780217964113708078878667472776628662250130740966\"\r\n        \"8445764848448990288056137622447215140262021079970566019008803622159927003713099672929653927155868586851283\"\r\n        \"90789031982421875\"},\r\n    {0x1.fffffffffffffp-282, chars_format::fixed, 334,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000002573778794734014173322\"\r\n        \"6282661670989303583027142820715506157051578521277360060781560435928227416157757334945553257324500261481933\"\r\n        \"6891529696897980576112275244894430280524042159941132038017607244319854007426199345859307854311737173702567\"\r\n        \"8157806396484375\"},\r\n    {0x1.fffffffffffffp-281, chars_format::fixed, 333,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000005147557589468028346645\"\r\n        \"2565323341978607166054285641431012314103157042554720121563120871856454832315514669891106514649000522963867\"\r\n        \"3783059393795961152224550489788860561048084319882264076035214488639708014852398691718615708623474347405135\"\r\n        \"631561279296875\"},\r\n    {0x1.fffffffffffffp-280, chars_format::fixed, 332,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000010295115178936056693290\"\r\n        \"5130646683957214332108571282862024628206314085109440243126241743712909664631029339782213029298001045927734\"\r\n        \"7566118787591922304449100979577721122096168639764528152070428977279416029704797383437231417246948694810271\"\r\n        \"26312255859375\"},\r\n    {0x1.fffffffffffffp-279, chars_format::fixed, 331,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000020590230357872113386581\"\r\n        \"0261293367914428664217142565724049256412628170218880486252483487425819329262058679564426058596002091855469\"\r\n        \"5132237575183844608898201959155442244192337279529056304140857954558832059409594766874462834493897389620542\"\r\n        \"5262451171875\"},\r\n    {0x1.fffffffffffffp-278, chars_format::fixed, 330,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000041180460715744226773162\"\r\n        \"0522586735828857328434285131448098512825256340437760972504966974851638658524117359128852117192004183710939\"\r\n        \"0264475150367689217796403918310884488384674559058112608281715909117664118819189533748925668987794779241085\"\r\n        \"052490234375\"},\r\n    {0x1.fffffffffffffp-277, chars_format::fixed, 329,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000082360921431488453546324\"\r\n        \"1045173471657714656868570262896197025650512680875521945009933949703277317048234718257704234384008367421878\"\r\n        \"0528950300735378435592807836621768976769349118116225216563431818235328237638379067497851337975589558482170\"\r\n        \"10498046875\"},\r\n    {0x1.fffffffffffffp-276, chars_format::fixed, 328,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000164721842862976907092648\"\r\n        \"2090346943315429313737140525792394051301025361751043890019867899406554634096469436515408468768016734843756\"\r\n        \"1057900601470756871185615673243537953538698236232450433126863636470656475276758134995702675951179116964340\"\r\n        \"2099609375\"},\r\n    {0x1.fffffffffffffp-275, chars_format::fixed, 327,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000329443685725953814185296\"\r\n        \"4180693886630858627474281051584788102602050723502087780039735798813109268192938873030816937536033469687512\"\r\n        \"2115801202941513742371231346487075907077396472464900866253727272941312950553516269991405351902358233928680\"\r\n        \"419921875\"},\r\n    {0x1.fffffffffffffp-274, chars_format::fixed, 326,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000658887371451907628370592\"\r\n        \"8361387773261717254948562103169576205204101447004175560079471597626218536385877746061633875072066939375024\"\r\n        \"4231602405883027484742462692974151814154792944929801732507454545882625901107032539982810703804716467857360\"\r\n        \"83984375\"},\r\n    {0x1.fffffffffffffp-273, chars_format::fixed, 325,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000001317774742903815256741185\"\r\n        \"6722775546523434509897124206339152410408202894008351120158943195252437072771755492123267750144133878750048\"\r\n        \"8463204811766054969484925385948303628309585889859603465014909091765251802214065079965621407609432935714721\"\r\n        \"6796875\"},\r\n    {0x1.fffffffffffffp-272, chars_format::fixed, 324,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000002635549485807630513482371\"\r\n        \"3445551093046869019794248412678304820816405788016702240317886390504874145543510984246535500288267757500097\"\r\n        \"6926409623532109938969850771896607256619171779719206930029818183530503604428130159931242815218865871429443\"\r\n        \"359375\"},\r\n    {0x1.fffffffffffffp-271, chars_format::fixed, 323,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000005271098971615261026964742\"\r\n        \"6891102186093738039588496825356609641632811576033404480635772781009748291087021968493071000576535515000195\"\r\n        \"3852819247064219877939701543793214513238343559438413860059636367061007208856260319862485630437731742858886\"\r\n        \"71875\"},\r\n    {0x1.fffffffffffffp-270, chars_format::fixed, 322,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000010542197943230522053929485\"\r\n        \"3782204372187476079176993650713219283265623152066808961271545562019496582174043936986142001153071030000390\"\r\n        \"7705638494128439755879403087586429026476687118876827720119272734122014417712520639724971260875463485717773\"\r\n        \"4375\"},\r\n    {0x1.fffffffffffffp-269, chars_format::fixed, 321,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000021084395886461044107858970\"\r\n        \"7564408744374952158353987301426438566531246304133617922543091124038993164348087873972284002306142060000781\"\r\n        \"5411276988256879511758806175172858052953374237753655440238545468244028835425041279449942521750926971435546\"\r\n        \"875\"},\r\n    {0x1.fffffffffffffp-268, chars_format::fixed, 320,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000042168791772922088215717941\"\r\n        \"5128817488749904316707974602852877133062492608267235845086182248077986328696175747944568004612284120001563\"\r\n        \"0822553976513759023517612350345716105906748475507310880477090936488057670850082558899885043501853942871093\"\r\n        \"75\"},\r\n    {0x1.fffffffffffffp-267, chars_format::fixed, 319,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000084337583545844176431435883\"\r\n        \"0257634977499808633415949205705754266124985216534471690172364496155972657392351495889136009224568240003126\"\r\n        \"1645107953027518047035224700691432211813496951014621760954181872976115341700165117799770087003707885742187\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-266, chars_format::fixed, 318,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000168675167091688352862871766\"\r\n        \"0515269954999617266831898411411508532249970433068943380344728992311945314784702991778272018449136480006252\"\r\n        \"329021590605503609407044940138286442362699390202924352190836374595223068340033023559954017400741577148437\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-265, chars_format::fixed, 317,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000337350334183376705725743532\"\r\n        \"1030539909999234533663796822823017064499940866137886760689457984623890629569405983556544036898272960012504\"\r\n        \"65804318121100721881408988027657288472539878040584870438167274919044613668006604711990803480148315429687\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-264, chars_format::fixed, 316,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000000674700668366753411451487064\"\r\n        \"2061079819998469067327593645646034128999881732275773521378915969247781259138811967113088073796545920025009\"\r\n        \"31608636242201443762817976055314576945079756081169740876334549838089227336013209423981606960296630859375\"},\r\n    {0x1.fffffffffffffp-263, chars_format::fixed, 315,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000001349401336733506822902974128\"\r\n        \"4122159639996938134655187291292068257999763464551547042757831938495562518277623934226176147593091840050018\"\r\n        \"6321727248440288752563595211062915389015951216233948175266909967617845467202641884796321392059326171875\"},\r\n    {0x1.fffffffffffffp-262, chars_format::fixed, 314,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000002698802673467013645805948256\"\r\n        \"8244319279993876269310374582584136515999526929103094085515663876991125036555247868452352295186183680100037\"\r\n        \"264345449688057750512719042212583077803190243246789635053381993523569093440528376959264278411865234375\"},\r\n    {0x1.fffffffffffffp-261, chars_format::fixed, 313,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000005397605346934027291611896513\"\r\n        \"6488638559987752538620749165168273031999053858206188171031327753982250073110495736904704590372367360200074\"\r\n        \"52869089937611550102543808442516615560638048649357927010676398704713818688105675391852855682373046875\"},\r\n    {0x1.fffffffffffffp-260, chars_format::fixed, 312,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000010795210693868054583223793027\"\r\n        \"2977277119975505077241498330336546063998107716412376342062655507964500146220991473809409180744734720400149\"\r\n        \"0573817987522310020508761688503323112127609729871585402135279740942763737621135078370571136474609375\"},\r\n    {0x1.fffffffffffffp-259, chars_format::fixed, 311,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000021590421387736109166447586054\"\r\n        \"5954554239951010154482996660673092127996215432824752684125311015929000292441982947618818361489469440800298\"\r\n        \"114763597504462004101752337700664622425521945974317080427055948188552747524227015674114227294921875\"},\r\n    {0x1.fffffffffffffp-258, chars_format::fixed, 310,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000043180842775472218332895172109\"\r\n        \"1909108479902020308965993321346184255992430865649505368250622031858000584883965895237636722978938881600596\"\r\n        \"22952719500892400820350467540132924485104389194863416085411189637710549504845403134822845458984375\"},\r\n    {0x1.fffffffffffffp-257, chars_format::fixed, 309,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000086361685550944436665790344218\"\r\n        \"3818216959804040617931986642692368511984861731299010736501244063716001169767931790475273445957877763201192\"\r\n        \"4590543900178480164070093508026584897020877838972683217082237927542109900969080626964569091796875\"},\r\n    {0x1.fffffffffffffp-256, chars_format::fixed, 308,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000172723371101888873331580688436\"\r\n        \"7636433919608081235863973285384737023969723462598021473002488127432002339535863580950546891915755526402384\"\r\n        \"918108780035696032814018701605316979404175567794536643416447585508421980193816125392913818359375\"},\r\n    {0x1.fffffffffffffp-255, chars_format::fixed, 307,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000345446742203777746663161376873\"\r\n        \"5272867839216162471727946570769474047939446925196042946004976254864004679071727161901093783831511052804769\"\r\n        \"83621756007139206562803740321063395880835113558907328683289517101684396038763225078582763671875\"},\r\n    {0x1.fffffffffffffp-254, chars_format::fixed, 306,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000000690893484407555493326322753747\"\r\n        \"0545735678432324943455893141538948095878893850392085892009952509728009358143454323802187567663022105609539\"\r\n        \"6724351201427841312560748064212679176167022711781465736657903420336879207752645015716552734375\"},\r\n    {0x1.fffffffffffffp-253, chars_format::fixed, 305,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000001381786968815110986652645507494\"\r\n        \"1091471356864649886911786283077896191757787700784171784019905019456018716286908647604375135326044211219079\"\r\n        \"344870240285568262512149612842535835233404542356293147331580684067375841550529003143310546875\"},\r\n    {0x1.fffffffffffffp-252, chars_format::fixed, 304,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000002763573937630221973305291014988\"\r\n        \"2182942713729299773823572566155792383515575401568343568039810038912037432573817295208750270652088422438158\"\r\n        \"68974048057113652502429922568507167046680908471258629466316136813475168310105800628662109375\"},\r\n    {0x1.fffffffffffffp-251, chars_format::fixed, 303,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000005527147875260443946610582029976\"\r\n        \"4365885427458599547647145132311584767031150803136687136079620077824074865147634590417500541304176844876317\"\r\n        \"3794809611422730500485984513701433409336181694251725893263227362695033662021160125732421875\"},\r\n    {0x1.fffffffffffffp-250, chars_format::fixed, 302,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000011054295750520887893221164059952\"\r\n        \"8731770854917199095294290264623169534062301606273374272159240155648149730295269180835001082608353689752634\"\r\n        \"758961922284546100097196902740286681867236338850345178652645472539006732404232025146484375\"},\r\n    {0x1.fffffffffffffp-249, chars_format::fixed, 301,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000022108591501041775786442328119905\"\r\n        \"7463541709834398190588580529246339068124603212546748544318480311296299460590538361670002165216707379505269\"\r\n        \"51792384456909220019439380548057336373447267770069035730529094507801346480846405029296875\"},\r\n    {0x1.fffffffffffffp-248, chars_format::fixed, 300,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000044217183002083551572884656239811\"\r\n        \"4927083419668796381177161058492678136249206425093497088636960622592598921181076723340004330433414759010539\"\r\n        \"0358476891381844003887876109611467274689453554013807146105818901560269296169281005859375\"},\r\n    {0x1.fffffffffffffp-247, chars_format::fixed, 299,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000088434366004167103145769312479622\"\r\n        \"9854166839337592762354322116985356272498412850186994177273921245185197842362153446680008660866829518021078\"\r\n        \"071695378276368800777575221922293454937890710802761429221163780312053859233856201171875\"},\r\n    {0x1.fffffffffffffp-246, chars_format::fixed, 298,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000176868732008334206291538624959245\"\r\n        \"9708333678675185524708644233970712544996825700373988354547842490370395684724306893360017321733659036042156\"\r\n        \"14339075655273760155515044384458690987578142160552285844232756062410771846771240234375\"},\r\n    {0x1.fffffffffffffp-245, chars_format::fixed, 297,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000353737464016668412583077249918491\"\r\n        \"9416667357350371049417288467941425089993651400747976709095684980740791369448613786720034643467318072084312\"\r\n        \"2867815131054752031103008876891738197515628432110457168846551212482154369354248046875\"},\r\n    {0x1.fffffffffffffp-244, chars_format::fixed, 296,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000000707474928033336825166154499836983\"\r\n        \"8833334714700742098834576935882850179987302801495953418191369961481582738897227573440069286934636144168624\"\r\n        \"573563026210950406220601775378347639503125686422091433769310242496430873870849609375\"},\r\n    {0x1.fffffffffffffp-243, chars_format::fixed, 295,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000001414949856066673650332308999673967\"\r\n        \"7666669429401484197669153871765700359974605602991906836382739922963165477794455146880138573869272288337249\"\r\n        \"14712605242190081244120355075669527900625137284418286753862048499286174774169921875\"},\r\n    {0x1.fffffffffffffp-242, chars_format::fixed, 294,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000002829899712133347300664617999347935\"\r\n        \"5333338858802968395338307743531400719949211205983813672765479845926330955588910293760277147738544576674498\"\r\n        \"2942521048438016248824071015133905580125027456883657350772409699857234954833984375\"},\r\n    {0x1.fffffffffffffp-241, chars_format::fixed, 293,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000005659799424266694601329235998695871\"\r\n        \"0666677717605936790676615487062801439898422411967627345530959691852661911177820587520554295477089153348996\"\r\n        \"588504209687603249764814203026781116025005491376731470154481939971446990966796875\"},\r\n    {0x1.fffffffffffffp-240, chars_format::fixed, 292,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000011319598848533389202658471997391742\"\r\n        \"1333355435211873581353230974125602879796844823935254691061919383705323822355641175041108590954178306697993\"\r\n        \"17700841937520649952962840605356223205001098275346294030896387994289398193359375\"},\r\n    {0x1.fffffffffffffp-239, chars_format::fixed, 291,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000022639197697066778405316943994783484\"\r\n        \"2666710870423747162706461948251205759593689647870509382123838767410647644711282350082217181908356613395986\"\r\n        \"3540168387504129990592568121071244641000219655069258806179277598857879638671875\"},\r\n    {0x1.fffffffffffffp-238, chars_format::fixed, 290,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000045278395394133556810633887989566968\"\r\n        \"5333421740847494325412923896502411519187379295741018764247677534821295289422564700164434363816713226791972\"\r\n        \"708033677500825998118513624214248928200043931013851761235855519771575927734375\"},\r\n    {0x1.fffffffffffffp-237, chars_format::fixed, 289,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000090556790788267113621267775979133937\"\r\n        \"0666843481694988650825847793004823038374758591482037528495355069642590578845129400328868727633426453583945\"\r\n        \"41606735500165199623702724842849785640008786202770352247171103954315185546875\"},\r\n    {0x1.fffffffffffffp-236, chars_format::fixed, 288,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000181113581576534227242535551958267874\"\r\n        \"1333686963389977301651695586009646076749517182964075056990710139285181157690258800657737455266852907167890\"\r\n        \"8321347100033039924740544968569957128001757240554070449434220790863037109375\"},\r\n    {0x1.fffffffffffffp-235, chars_format::fixed, 287,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000362227163153068454485071103916535748\"\r\n        \"2667373926779954603303391172019292153499034365928150113981420278570362315380517601315474910533705814335781\"\r\n        \"664269420006607984948108993713991425600351448110814089886844158172607421875\"},\r\n    {0x1.fffffffffffffp-234, chars_format::fixed, 286,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000000724454326306136908970142207833071496\"\r\n        \"5334747853559909206606782344038584306998068731856300227962840557140724630761035202630949821067411628671563\"\r\n        \"32853884001321596989621798742798285120070289622162817977368831634521484375\"},\r\n    {0x1.fffffffffffffp-233, chars_format::fixed, 285,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000001448908652612273817940284415666142993\"\r\n        \"0669495707119818413213564688077168613996137463712600455925681114281449261522070405261899642134823257343126\"\r\n        \"6570776800264319397924359748559657024014057924432563595473766326904296875\"},\r\n    {0x1.fffffffffffffp-232, chars_format::fixed, 284,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000002897817305224547635880568831332285986\"\r\n        \"1338991414239636826427129376154337227992274927425200911851362228562898523044140810523799284269646514686253\"\r\n        \"314155360052863879584871949711931404802811584886512719094753265380859375\"},\r\n    {0x1.fffffffffffffp-231, chars_format::fixed, 283,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000005795634610449095271761137662664571972\"\r\n        \"2677982828479273652854258752308674455984549854850401823702724457125797046088281621047598568539293029372506\"\r\n        \"62831072010572775916974389942386280960562316977302543818950653076171875\"},\r\n    {0x1.fffffffffffffp-230, chars_format::fixed, 282,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000011591269220898190543522275325329143944\"\r\n        \"5355965656958547305708517504617348911969099709700803647405448914251594092176563242095197137078586058745013\"\r\n        \"2566214402114555183394877988477256192112463395460508763790130615234375\"},\r\n    {0x1.fffffffffffffp-229, chars_format::fixed, 281,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000023182538441796381087044550650658287889\"\r\n        \"0711931313917094611417035009234697823938199419401607294810897828503188184353126484190394274157172117490026\"\r\n        \"513242880422911036678975597695451238422492679092101752758026123046875\"},\r\n    {0x1.fffffffffffffp-228, chars_format::fixed, 280,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000046365076883592762174089101301316575778\"\r\n        \"1423862627834189222834070018469395647876398838803214589621795657006376368706252968380788548314344234980053\"\r\n        \"02648576084582207335795119539090247684498535818420350551605224609375\"},\r\n    {0x1.fffffffffffffp-227, chars_format::fixed, 279,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000092730153767185524348178202602633151556\"\r\n        \"2847725255668378445668140036938791295752797677606429179243591314012752737412505936761577096628688469960106\"\r\n        \"0529715216916441467159023907818049536899707163684070110321044921875\"},\r\n    {0x1.fffffffffffffp-226, chars_format::fixed, 278,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000185460307534371048696356405205266303112\"\r\n        \"5695450511336756891336280073877582591505595355212858358487182628025505474825011873523154193257376939920212\"\r\n        \"105943043383288293431804781563609907379941432736814022064208984375\"},\r\n    {0x1.fffffffffffffp-225, chars_format::fixed, 277,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000370920615068742097392712810410532606225\"\r\n        \"1390901022673513782672560147755165183011190710425716716974365256051010949650023747046308386514753879840424\"\r\n        \"21188608676657658686360956312721981475988286547362804412841796875\"},\r\n    {0x1.fffffffffffffp-224, chars_format::fixed, 276,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000000741841230137484194785425620821065212450\"\r\n        \"2781802045347027565345120295510330366022381420851433433948730512102021899300047494092616773029507759680848\"\r\n        \"4237721735331531737272191262544396295197657309472560882568359375\"},\r\n    {0x1.fffffffffffffp-223, chars_format::fixed, 275,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000001483682460274968389570851241642130424900\"\r\n        \"5563604090694055130690240591020660732044762841702866867897461024204043798600094988185233546059015519361696\"\r\n        \"847544347066306347454438252508879259039531461894512176513671875\"},\r\n    {0x1.fffffffffffffp-222, chars_format::fixed, 274,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000002967364920549936779141702483284260849801\"\r\n        \"1127208181388110261380481182041321464089525683405733735794922048408087597200189976370467092118031038723393\"\r\n        \"69508869413261269490887650501775851807906292378902435302734375\"},\r\n    {0x1.fffffffffffffp-221, chars_format::fixed, 273,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000005934729841099873558283404966568521699602\"\r\n        \"2254416362776220522760962364082642928179051366811467471589844096816175194400379952740934184236062077446787\"\r\n        \"3901773882652253898177530100355170361581258475780487060546875\"},\r\n    {0x1.fffffffffffffp-220, chars_format::fixed, 272,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000011869459682199747116566809933137043399204\"\r\n        \"4508832725552441045521924728165285856358102733622934943179688193632350388800759905481868368472124154893574\"\r\n        \"780354776530450779635506020071034072316251695156097412109375\"},\r\n    {0x1.fffffffffffffp-219, chars_format::fixed, 271,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000023738919364399494233133619866274086798408\"\r\n        \"9017665451104882091043849456330571712716205467245869886359376387264700777601519810963736736944248309787149\"\r\n        \"56070955306090155927101204014206814463250339031219482421875\"},\r\n    {0x1.fffffffffffffp-218, chars_format::fixed, 270,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000047477838728798988466267239732548173596817\"\r\n        \"8035330902209764182087698912661143425432410934491739772718752774529401555203039621927473473888496619574299\"\r\n        \"1214191061218031185420240802841362892650067806243896484375\"},\r\n    {0x1.fffffffffffffp-217, chars_format::fixed, 269,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000094955677457597976932534479465096347193635\"\r\n        \"6070661804419528364175397825322286850864821868983479545437505549058803110406079243854946947776993239148598\"\r\n        \"242838212243606237084048160568272578530013561248779296875\"},\r\n    {0x1.fffffffffffffp-216, chars_format::fixed, 268,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000189911354915195953865068958930192694387271\"\r\n        \"2141323608839056728350795650644573701729643737966959090875011098117606220812158487709893895553986478297196\"\r\n        \"48567642448721247416809632113654515706002712249755859375\"},\r\n    {0x1.fffffffffffffp-215, chars_format::fixed, 267,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000379822709830391907730137917860385388774542\"\r\n        \"4282647217678113456701591301289147403459287475933918181750022196235212441624316975419787791107972956594392\"\r\n        \"9713528489744249483361926422730903141200542449951171875\"},\r\n    {0x1.fffffffffffffp-214, chars_format::fixed, 266,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000000759645419660783815460275835720770777549084\"\r\n        \"8565294435356226913403182602578294806918574951867836363500044392470424883248633950839575582215945913188785\"\r\n        \"942705697948849896672385284546180628240108489990234375\"},\r\n    {0x1.fffffffffffffp-213, chars_format::fixed, 265,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000001519290839321567630920551671441541555098169\"\r\n        \"7130588870712453826806365205156589613837149903735672727000088784940849766497267901679151164431891826377571\"\r\n        \"88541139589769979334477056909236125648021697998046875\"},\r\n    {0x1.fffffffffffffp-212, chars_format::fixed, 264,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000003038581678643135261841103342883083110196339\"\r\n        \"4261177741424907653612730410313179227674299807471345454000177569881699532994535803358302328863783652755143\"\r\n        \"7708227917953995866895411381847225129604339599609375\"},\r\n    {0x1.fffffffffffffp-211, chars_format::fixed, 263,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000006077163357286270523682206685766166220392678\"\r\n        \"8522355482849815307225460820626358455348599614942690908000355139763399065989071606716604657727567305510287\"\r\n        \"541645583590799173379082276369445025920867919921875\"},\r\n    {0x1.fffffffffffffp-210, chars_format::fixed, 262,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000012154326714572541047364413371532332440785357\"\r\n        \"7044710965699630614450921641252716910697199229885381816000710279526798131978143213433209315455134611020575\"\r\n        \"08329116718159834675816455273889005184173583984375\"},\r\n    {0x1.fffffffffffffp-209, chars_format::fixed, 261,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000024308653429145082094728826743064664881570715\"\r\n        \"4089421931399261228901843282505433821394398459770763632001420559053596263956286426866418630910269222041150\"\r\n        \"1665823343631966935163291054777801036834716796875\"},\r\n    {0x1.fffffffffffffp-208, chars_format::fixed, 260,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000048617306858290164189457653486129329763141430\"\r\n        \"8178843862798522457803686565010867642788796919541527264002841118107192527912572853732837261820538444082300\"\r\n        \"333164668726393387032658210955560207366943359375\"},\r\n    {0x1.fffffffffffffp-207, chars_format::fixed, 259,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000097234613716580328378915306972258659526282861\"\r\n        \"6357687725597044915607373130021735285577593839083054528005682236214385055825145707465674523641076888164600\"\r\n        \"66632933745278677406531642191112041473388671875\"},\r\n    {0x1.fffffffffffffp-206, chars_format::fixed, 258,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000194469227433160656757830613944517319052565723\"\r\n        \"2715375451194089831214746260043470571155187678166109056011364472428770111650291414931349047282153776329201\"\r\n        \"3326586749055735481306328438222408294677734375\"},\r\n    {0x1.fffffffffffffp-205, chars_format::fixed, 257,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000388938454866321313515661227889034638105131446\"\r\n        \"5430750902388179662429492520086941142310375356332218112022728944857540223300582829862698094564307552658402\"\r\n        \"665317349811147096261265687644481658935546875\"},\r\n    {0x1.fffffffffffffp-204, chars_format::fixed, 256,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000000777876909732642627031322455778069276210262893\"\r\n        \"0861501804776359324858985040173882284620750712664436224045457889715080446601165659725396189128615105316805\"\r\n        \"33063469962229419252253137528896331787109375\"},\r\n    {0x1.fffffffffffffp-203, chars_format::fixed, 255,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000001555753819465285254062644911556138552420525786\"\r\n        \"1723003609552718649717970080347764569241501425328872448090915779430160893202331319450792378257230210633610\"\r\n        \"6612693992445883850450627505779266357421875\"},\r\n    {0x1.fffffffffffffp-202, chars_format::fixed, 254,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000003111507638930570508125289823112277104841051572\"\r\n        \"3446007219105437299435940160695529138483002850657744896181831558860321786404662638901584756514460421267221\"\r\n        \"322538798489176770090125501155853271484375\"},\r\n    {0x1.fffffffffffffp-201, chars_format::fixed, 253,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000006223015277861141016250579646224554209682103144\"\r\n        \"6892014438210874598871880321391058276966005701315489792363663117720643572809325277803169513028920842534442\"\r\n        \"64507759697835354018025100231170654296875\"},\r\n    {0x1.fffffffffffffp-200, chars_format::fixed, 252,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000012446030555722282032501159292449108419364206289\"\r\n        \"3784028876421749197743760642782116553932011402630979584727326235441287145618650555606339026057841685068885\"\r\n        \"2901551939567070803605020046234130859375\"},\r\n    {0x1.fffffffffffffp-199, chars_format::fixed, 251,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000024892061111444564065002318584898216838728412578\"\r\n        \"7568057752843498395487521285564233107864022805261959169454652470882574291237301111212678052115683370137770\"\r\n        \"580310387913414160721004009246826171875\"},\r\n    {0x1.fffffffffffffp-198, chars_format::fixed, 250,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000049784122222889128130004637169796433677456825157\"\r\n        \"5136115505686996790975042571128466215728045610523918338909304941765148582474602222425356104231366740275541\"\r\n        \"16062077582682832144200801849365234375\"},\r\n    {0x1.fffffffffffffp-197, chars_format::fixed, 249,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000099568244445778256260009274339592867354913650315\"\r\n        \"0272231011373993581950085142256932431456091221047836677818609883530297164949204444850712208462733480551082\"\r\n        \"3212415516536566428840160369873046875\"},\r\n    {0x1.fffffffffffffp-196, chars_format::fixed, 248,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000199136488891556512520018548679185734709827300630\"\r\n        \"0544462022747987163900170284513864862912182442095673355637219767060594329898408889701424416925466961102164\"\r\n        \"642483103307313285768032073974609375\"},\r\n    {0x1.fffffffffffffp-195, chars_format::fixed, 247,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000398272977783113025040037097358371469419654601260\"\r\n        \"1088924045495974327800340569027729725824364884191346711274439534121188659796817779402848833850933922204329\"\r\n        \"28496620661462657153606414794921875\"},\r\n    {0x1.fffffffffffffp-194, chars_format::fixed, 246,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000000796545955566226050080074194716742938839309202520\"\r\n        \"2177848090991948655600681138055459451648729768382693422548879068242377319593635558805697667701867844408658\"\r\n        \"5699324132292531430721282958984375\"},\r\n    {0x1.fffffffffffffp-193, chars_format::fixed, 245,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000001593091911132452100160148389433485877678618405040\"\r\n        \"4355696181983897311201362276110918903297459536765386845097758136484754639187271117611395335403735688817317\"\r\n        \"139864826458506286144256591796875\"},\r\n    {0x1.fffffffffffffp-192, chars_format::fixed, 244,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000003186183822264904200320296778866971755357236810080\"\r\n        \"8711392363967794622402724552221837806594919073530773690195516272969509278374542235222790670807471377634634\"\r\n        \"27972965291701257228851318359375\"},\r\n    {0x1.fffffffffffffp-191, chars_format::fixed, 243,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000006372367644529808400640593557733943510714473620161\"\r\n        \"7422784727935589244805449104443675613189838147061547380391032545939018556749084470445581341614942755269268\"\r\n        \"5594593058340251445770263671875\"},\r\n    {0x1.fffffffffffffp-190, chars_format::fixed, 242,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000012744735289059616801281187115467887021428947240323\"\r\n        \"4845569455871178489610898208887351226379676294123094760782065091878037113498168940891162683229885510538537\"\r\n        \"118918611668050289154052734375\"},\r\n    {0x1.fffffffffffffp-189, chars_format::fixed, 241,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000025489470578119233602562374230935774042857894480646\"\r\n        \"9691138911742356979221796417774702452759352588246189521564130183756074226996337881782325366459771021077074\"\r\n        \"23783722333610057830810546875\"},\r\n    {0x1.fffffffffffffp-188, chars_format::fixed, 240,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000050978941156238467205124748461871548085715788961293\"\r\n        \"9382277823484713958443592835549404905518705176492379043128260367512148453992675763564650732919542042154148\"\r\n        \"4756744466722011566162109375\"},\r\n    {0x1.fffffffffffffp-187, chars_format::fixed, 239,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000101957882312476934410249496923743096171431577922587\"\r\n        \"8764555646969427916887185671098809811037410352984758086256520735024296907985351527129301465839084084308296\"\r\n        \"951348893344402313232421875\"},\r\n    {0x1.fffffffffffffp-186, chars_format::fixed, 238,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000203915764624953868820498993847486192342863155845175\"\r\n        \"7529111293938855833774371342197619622074820705969516172513041470048593815970703054258602931678168168616593\"\r\n        \"90269778668880462646484375\"},\r\n    {0x1.fffffffffffffp-185, chars_format::fixed, 237,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000407831529249907737640997987694972384685726311690351\"\r\n        \"5058222587877711667548742684395239244149641411939032345026082940097187631941406108517205863356336337233187\"\r\n        \"8053955733776092529296875\"},\r\n    {0x1.fffffffffffffp-184, chars_format::fixed, 236,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000000815663058499815475281995975389944769371452623380703\"\r\n        \"0116445175755423335097485368790478488299282823878064690052165880194375263882812217034411726712672674466375\"\r\n        \"610791146755218505859375\"},\r\n    {0x1.fffffffffffffp-183, chars_format::fixed, 235,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000001631326116999630950563991950779889538742905246761406\"\r\n        \"0232890351510846670194970737580956976598565647756129380104331760388750527765624434068823453425345348932751\"\r\n        \"22158229351043701171875\"},\r\n    {0x1.fffffffffffffp-182, chars_format::fixed, 234,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000003262652233999261901127983901559779077485810493522812\"\r\n        \"0465780703021693340389941475161913953197131295512258760208663520777501055531248868137646906850690697865502\"\r\n        \"4431645870208740234375\"},\r\n    {0x1.fffffffffffffp-181, chars_format::fixed, 233,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000006525304467998523802255967803119558154971620987045624\"\r\n        \"0931561406043386680779882950323827906394262591024517520417327041555002111062497736275293813701381395731004\"\r\n        \"886329174041748046875\"},\r\n    {0x1.fffffffffffffp-180, chars_format::fixed, 232,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000013050608935997047604511935606239116309943241974091248\"\r\n        \"1863122812086773361559765900647655812788525182049035040834654083110004222124995472550587627402762791462009\"\r\n        \"77265834808349609375\"},\r\n    {0x1.fffffffffffffp-179, chars_format::fixed, 231,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000026101217871994095209023871212478232619886483948182496\"\r\n        \"3726245624173546723119531801295311625577050364098070081669308166220008444249990945101175254805525582924019\"\r\n        \"5453166961669921875\"},\r\n    {0x1.fffffffffffffp-178, chars_format::fixed, 230,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000052202435743988190418047742424956465239772967896364992\"\r\n        \"7452491248347093446239063602590623251154100728196140163338616332440016888499981890202350509611051165848039\"\r\n        \"090633392333984375\"},\r\n    {0x1.fffffffffffffp-177, chars_format::fixed, 229,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000104404871487976380836095484849912930479545935792729985\"\r\n        \"4904982496694186892478127205181246502308201456392280326677232664880033776999963780404701019222102331696078\"\r\n        \"18126678466796875\"},\r\n    {0x1.fffffffffffffp-176, chars_format::fixed, 228,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000208809742975952761672190969699825860959091871585459970\"\r\n        \"9809964993388373784956254410362493004616402912784560653354465329760067553999927560809402038444204663392156\"\r\n        \"3625335693359375\"},\r\n    {0x1.fffffffffffffp-175, chars_format::fixed, 227,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000417619485951905523344381939399651721918183743170919941\"\r\n        \"9619929986776747569912508820724986009232805825569121306708930659520135107999855121618804076888409326784312\"\r\n        \"725067138671875\"},\r\n    {0x1.fffffffffffffp-174, chars_format::fixed, 226,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000000835238971903811046688763878799303443836367486341839883\"\r\n        \"9239859973553495139825017641449972018465611651138242613417861319040270215999710243237608153776818653568625\"\r\n        \"45013427734375\"},\r\n    {0x1.fffffffffffffp-173, chars_format::fixed, 225,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000001670477943807622093377527757598606887672734972683679767\"\r\n        \"8479719947106990279650035282899944036931223302276485226835722638080540431999420486475216307553637307137250\"\r\n        \"9002685546875\"},\r\n    {0x1.fffffffffffffp-172, chars_format::fixed, 224,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000003340955887615244186755055515197213775345469945367359535\"\r\n        \"6959439894213980559300070565799888073862446604552970453671445276161080863998840972950432615107274614274501\"\r\n        \"800537109375\"},\r\n    {0x1.fffffffffffffp-171, chars_format::fixed, 223,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000006681911775230488373510111030394427550690939890734719071\"\r\n        \"3918879788427961118600141131599776147724893209105940907342890552322161727997681945900865230214549228549003\"\r\n        \"60107421875\"},\r\n    {0x1.fffffffffffffp-170, chars_format::fixed, 222,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000013363823550460976747020222060788855101381879781469438142\"\r\n        \"7837759576855922237200282263199552295449786418211881814685781104644323455995363891801730460429098457098007\"\r\n        \"2021484375\"},\r\n    {0x1.fffffffffffffp-169, chars_format::fixed, 221,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000026727647100921953494040444121577710202763759562938876285\"\r\n        \"5675519153711844474400564526399104590899572836423763629371562209288646911990727783603460920858196914196014\"\r\n        \"404296875\"},\r\n    {0x1.fffffffffffffp-168, chars_format::fixed, 220,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000053455294201843906988080888243155420405527519125877752571\"\r\n        \"1351038307423688948801129052798209181799145672847527258743124418577293823981455567206921841716393828392028\"\r\n        \"80859375\"},\r\n    {0x1.fffffffffffffp-167, chars_format::fixed, 219,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000106910588403687813976161776486310840811055038251755505142\"\r\n        \"2702076614847377897602258105596418363598291345695054517486248837154587647962911134413843683432787656784057\"\r\n        \"6171875\"},\r\n    {0x1.fffffffffffffp-166, chars_format::fixed, 218,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000213821176807375627952323552972621681622110076503511010284\"\r\n        \"5404153229694755795204516211192836727196582691390109034972497674309175295925822268827687366865575313568115\"\r\n        \"234375\"},\r\n    {0x1.fffffffffffffp-165, chars_format::fixed, 217,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000427642353614751255904647105945243363244220153007022020569\"\r\n        \"0808306459389511590409032422385673454393165382780218069944995348618350591851644537655374733731150627136230\"\r\n        \"46875\"},\r\n    {0x1.fffffffffffffp-164, chars_format::fixed, 216,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000000855284707229502511809294211890486726488440306014044041138\"\r\n        \"1616612918779023180818064844771346908786330765560436139889990697236701183703289075310749467462301254272460\"\r\n        \"9375\"},\r\n    {0x1.fffffffffffffp-163, chars_format::fixed, 215,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000001710569414459005023618588423780973452976880612028088082276\"\r\n        \"3233225837558046361636129689542693817572661531120872279779981394473402367406578150621498934924602508544921\"\r\n        \"875\"},\r\n    {0x1.fffffffffffffp-162, chars_format::fixed, 214,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000003421138828918010047237176847561946905953761224056176164552\"\r\n        \"6466451675116092723272259379085387635145323062241744559559962788946804734813156301242997869849205017089843\"\r\n        \"75\"},\r\n    {0x1.fffffffffffffp-161, chars_format::fixed, 213,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000006842277657836020094474353695123893811907522448112352329105\"\r\n        \"2932903350232185446544518758170775270290646124483489119119925577893609469626312602485995739698410034179687\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-160, chars_format::fixed, 212,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000013684555315672040188948707390247787623815044896224704658210\"\r\n        \"586580670046437089308903751634155054058129224896697823823985115578721893925262520497199147939682006835937\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-159, chars_format::fixed, 211,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000027369110631344080377897414780495575247630089792449409316421\"\r\n        \"17316134009287417861780750326831010811625844979339564764797023115744378785052504099439829587936401367187\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-158, chars_format::fixed, 210,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000054738221262688160755794829560991150495260179584898818632842\"\r\n        \"34632268018574835723561500653662021623251689958679129529594046231488757570105008198879659175872802734375\"},\r\n    {0x1.fffffffffffffp-157, chars_format::fixed, 209,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000109476442525376321511589659121982300990520359169797637265684\"\r\n        \"6926453603714967144712300130732404324650337991735825905918809246297751514021001639775931835174560546875\"},\r\n    {0x1.fffffffffffffp-156, chars_format::fixed, 208,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000218952885050752643023179318243964601981040718339595274531369\"\r\n        \"385290720742993428942460026146480864930067598347165181183761849259550302804200327955186367034912109375\"},\r\n    {0x1.fffffffffffffp-155, chars_format::fixed, 207,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000437905770101505286046358636487929203962081436679190549062738\"\r\n        \"77058144148598685788492005229296172986013519669433036236752369851910060560840065591037273406982421875\"},\r\n    {0x1.fffffffffffffp-154, chars_format::fixed, 206,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000000875811540203010572092717272975858407924162873358381098125477\"\r\n        \"5411628829719737157698401045859234597202703933886607247350473970382012112168013118207454681396484375\"},\r\n    {0x1.fffffffffffffp-153, chars_format::fixed, 205,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000001751623080406021144185434545951716815848325746716762196250955\"\r\n        \"082325765943947431539680209171846919440540786777321449470094794076402422433602623641490936279296875\"},\r\n    {0x1.fffffffffffffp-152, chars_format::fixed, 204,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000003503246160812042288370869091903433631696651493433524392501910\"\r\n        \"16465153188789486307936041834369383888108157355464289894018958815280484486720524728298187255859375\"},\r\n    {0x1.fffffffffffffp-151, chars_format::fixed, 203,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000007006492321624084576741738183806867263393302986867048785003820\"\r\n        \"3293030637757897261587208366873876777621631471092857978803791763056096897344104945659637451171875\"},\r\n    {0x1.fffffffffffffp-150, chars_format::fixed, 202,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000014012984643248169153483476367613734526786605973734097570007640\"\r\n        \"658606127551579452317441673374775355524326294218571595760758352611219379468820989131927490234375\"},\r\n    {0x1.fffffffffffffp-149, chars_format::fixed, 201,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000028025969286496338306966952735227469053573211947468195140015281\"\r\n        \"31721225510315890463488334674955071104865258843714319152151670522243875893764197826385498046875\"},\r\n    {0x1.fffffffffffffp-148, chars_format::fixed, 200,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000056051938572992676613933905470454938107146423894936390280030562\"\r\n        \"6344245102063178092697666934991014220973051768742863830430334104448775178752839565277099609375\"},\r\n    {0x1.fffffffffffffp-147, chars_format::fixed, 199,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000112103877145985353227867810940909876214292847789872780560061125\"\r\n        \"268849020412635618539533386998202844194610353748572766086066820889755035750567913055419921875\"},\r\n    {0x1.fffffffffffffp-146, chars_format::fixed, 198,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000224207754291970706455735621881819752428585695579745561120122250\"\r\n        \"53769804082527123707906677399640568838922070749714553217213364177951007150113582611083984375\"},\r\n    {0x1.fffffffffffffp-145, chars_format::fixed, 197,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000448415508583941412911471243763639504857171391159491122240244501\"\r\n        \"0753960816505424741581335479928113767784414149942910643442672835590201430022716522216796875\"},\r\n    {0x1.fffffffffffffp-144, chars_format::fixed, 196,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000896831017167882825822942487527279009714342782318982244480489002\"\r\n        \"150792163301084948316267095985622753556882829988582128688534567118040286004543304443359375\"},\r\n    {0x1.fffffffffffffp-143, chars_format::fixed, 195,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000001793662034335765651645884975054558019428685564637964488960978004\"\r\n        \"30158432660216989663253419197124550711376565997716425737706913423608057200908660888671875\"},\r\n    {0x1.fffffffffffffp-142, chars_format::fixed, 194,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000003587324068671531303291769950109116038857371129275928977921956008\"\r\n        \"6031686532043397932650683839424910142275313199543285147541382684721611440181732177734375\"},\r\n    {0x1.fffffffffffffp-141, chars_format::fixed, 193,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000007174648137343062606583539900218232077714742258551857955843912017\"\r\n        \"206337306408679586530136767884982028455062639908657029508276536944322288036346435546875\"},\r\n    {0x1.fffffffffffffp-140, chars_format::fixed, 192,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000014349296274686125213167079800436464155429484517103715911687824034\"\r\n        \"41267461281735917306027353576996405691012527981731405901655307388864457607269287109375\"},\r\n    {0x1.fffffffffffffp-139, chars_format::fixed, 191,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000028698592549372250426334159600872928310858969034207431823375648068\"\r\n        \"8253492256347183461205470715399281138202505596346281180331061477772891521453857421875\"},\r\n    {0x1.fffffffffffffp-138, chars_format::fixed, 190,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000057397185098744500852668319201745856621717938068414863646751296137\"\r\n        \"650698451269436692241094143079856227640501119269256236066212295554578304290771484375\"},\r\n    {0x1.fffffffffffffp-137, chars_format::fixed, 189,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000114794370197489001705336638403491713243435876136829727293502592275\"\r\n        \"30139690253887338448218828615971245528100223853851247213242459110915660858154296875\"},\r\n    {0x1.fffffffffffffp-136, chars_format::fixed, 188,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000229588740394978003410673276806983426486871752273659454587005184550\"\r\n        \"6027938050777467689643765723194249105620044770770249442648491822183132171630859375\"},\r\n    {0x1.fffffffffffffp-135, chars_format::fixed, 187,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000459177480789956006821346553613966852973743504547318909174010369101\"\r\n        \"205587610155493537928753144638849821124008954154049888529698364436626434326171875\"},\r\n    {0x1.fffffffffffffp-134, chars_format::fixed, 186,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000918354961579912013642693107227933705947487009094637818348020738202\"\r\n        \"41117522031098707585750628927769964224801790830809977705939672887325286865234375\"},\r\n    {0x1.fffffffffffffp-133, chars_format::fixed, 185,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000001836709923159824027285386214455867411894974018189275636696041476404\"\r\n        \"8223504406219741517150125785553992844960358166161995541187934577465057373046875\"},\r\n    {0x1.fffffffffffffp-132, chars_format::fixed, 184,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000003673419846319648054570772428911734823789948036378551273392082952809\"\r\n        \"644700881243948303430025157110798568992071633232399108237586915493011474609375\"},\r\n    {0x1.fffffffffffffp-131, chars_format::fixed, 183,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000007346839692639296109141544857823469647579896072757102546784165905619\"\r\n        \"28940176248789660686005031422159713798414326646479821647517383098602294921875\"},\r\n    {0x1.fffffffffffffp-130, chars_format::fixed, 182,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000014693679385278592218283089715646939295159792145514205093568331811238\"\r\n        \"5788035249757932137201006284431942759682865329295964329503476619720458984375\"},\r\n    {0x1.fffffffffffffp-129, chars_format::fixed, 181,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000029387358770557184436566179431293878590319584291028410187136663622477\"\r\n        \"157607049951586427440201256886388551936573065859192865900695323944091796875\"},\r\n    {0x1.fffffffffffffp-128, chars_format::fixed, 180,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000058774717541114368873132358862587757180639168582056820374273327244954\"\r\n        \"31521409990317285488040251377277710387314613171838573180139064788818359375\"},\r\n    {0x1.fffffffffffffp-127, chars_format::fixed, 179,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000117549435082228737746264717725175514361278337164113640748546654489908\"\r\n        \"6304281998063457097608050275455542077462922634367714636027812957763671875\"},\r\n    {0x1.fffffffffffffp-126, chars_format::fixed, 178,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000235098870164457475492529435450351028722556674328227281497093308979817\"\r\n        \"260856399612691419521610055091108415492584526873542927205562591552734375\"},\r\n    {0x1.fffffffffffffp-125, chars_format::fixed, 177,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000470197740328914950985058870900702057445113348656454562994186617959634\"\r\n        \"52171279922538283904322011018221683098516905374708585441112518310546875\"},\r\n    {0x1.fffffffffffffp-124, chars_format::fixed, 176,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000940395480657829901970117741801404114890226697312909125988373235919269\"\r\n        \"0434255984507656780864402203644336619703381074941717088222503662109375\"},\r\n    {0x1.fffffffffffffp-123, chars_format::fixed, 175,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000001880790961315659803940235483602808229780453394625818251976746471838538\"\r\n        \"086851196901531356172880440728867323940676214988343417644500732421875\"},\r\n    {0x1.fffffffffffffp-122, chars_format::fixed, 174,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000003761581922631319607880470967205616459560906789251636503953492943677076\"\r\n        \"17370239380306271234576088145773464788135242997668683528900146484375\"},\r\n    {0x1.fffffffffffffp-121, chars_format::fixed, 173,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000007523163845262639215760941934411232919121813578503273007906985887354152\"\r\n        \"3474047876061254246915217629154692957627048599533736705780029296875\"},\r\n    {0x1.fffffffffffffp-120, chars_format::fixed, 172,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000015046327690525278431521883868822465838243627157006546015813971774708304\"\r\n        \"694809575212250849383043525830938591525409719906747341156005859375\"},\r\n    {0x1.fffffffffffffp-119, chars_format::fixed, 171,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000030092655381050556863043767737644931676487254314013092031627943549416609\"\r\n        \"38961915042450169876608705166187718305081943981349468231201171875\"},\r\n    {0x1.fffffffffffffp-118, chars_format::fixed, 170,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000060185310762101113726087535475289863352974508628026184063255887098833218\"\r\n        \"7792383008490033975321741033237543661016388796269893646240234375\"},\r\n    {0x1.fffffffffffffp-117, chars_format::fixed, 169,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000120370621524202227452175070950579726705949017256052368126511774197666437\"\r\n        \"558476601698006795064348206647508732203277759253978729248046875\"},\r\n    {0x1.fffffffffffffp-116, chars_format::fixed, 168,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000240741243048404454904350141901159453411898034512104736253023548395332875\"\r\n        \"11695320339601359012869641329501746440655551850795745849609375\"},\r\n    {0x1.fffffffffffffp-115, chars_format::fixed, 167,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000481482486096808909808700283802318906823796069024209472506047096790665750\"\r\n        \"2339064067920271802573928265900349288131110370159149169921875\"},\r\n    {0x1.fffffffffffffp-114, chars_format::fixed, 166,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000962964972193617819617400567604637813647592138048418945012094193581331500\"\r\n        \"467812813584054360514785653180069857626222074031829833984375\"},\r\n    {0x1.fffffffffffffp-113, chars_format::fixed, 165,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000001925929944387235639234801135209275627295184276096837890024188387162663000\"\r\n        \"93562562716810872102957130636013971525244414806365966796875\"},\r\n    {0x1.fffffffffffffp-112, chars_format::fixed, 164,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000003851859888774471278469602270418551254590368552193675780048376774325326001\"\r\n        \"8712512543362174420591426127202794305048882961273193359375\"},\r\n    {0x1.fffffffffffffp-111, chars_format::fixed, 163,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000007703719777548942556939204540837102509180737104387351560096753548650652003\"\r\n        \"742502508672434884118285225440558861009776592254638671875\"},\r\n    {0x1.fffffffffffffp-110, chars_format::fixed, 162,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000015407439555097885113878409081674205018361474208774703120193507097301304007\"\r\n        \"48500501734486976823657045088111772201955318450927734375\"},\r\n    {0x1.fffffffffffffp-109, chars_format::fixed, 161,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000030814879110195770227756818163348410036722948417549406240387014194602608014\"\r\n        \"9700100346897395364731409017622354440391063690185546875\"},\r\n    {0x1.fffffffffffffp-108, chars_format::fixed, 160,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000061629758220391540455513636326696820073445896835098812480774028389205216029\"\r\n        \"940020069379479072946281803524470888078212738037109375\"},\r\n    {0x1.fffffffffffffp-107, chars_format::fixed, 159,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000123259516440783080911027272653393640146891793670197624961548056778410432059\"\r\n        \"88004013875895814589256360704894177615642547607421875\"},\r\n    {0x1.fffffffffffffp-106, chars_format::fixed, 158,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000246519032881566161822054545306787280293783587340395249923096113556820864119\"\r\n        \"7600802775179162917851272140978835523128509521484375\"},\r\n    {0x1.fffffffffffffp-105, chars_format::fixed, 157,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000493038065763132323644109090613574560587567174680790499846192227113641728239\"\r\n        \"520160555035832583570254428195767104625701904296875\"},\r\n    {0x1.fffffffffffffp-104, chars_format::fixed, 156,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000986076131526264647288218181227149121175134349361580999692384454227283456479\"\r\n        \"04032111007166516714050885639153420925140380859375\"},\r\n    {0x1.fffffffffffffp-103, chars_format::fixed, 155,\r\n        \"0.\"\r\n        \"0000000000000000000000000000001972152263052529294576436362454298242350268698723161999384768908454566912958\"\r\n        \"0806422201433303342810177127830684185028076171875\"},\r\n    {0x1.fffffffffffffp-102, chars_format::fixed, 154,\r\n        \"0.\"\r\n        \"0000000000000000000000000000003944304526105058589152872724908596484700537397446323998769537816909133825916\"\r\n        \"161284440286660668562035425566136837005615234375\"},\r\n    {0x1.fffffffffffffp-101, chars_format::fixed, 153,\r\n        \"0.\"\r\n        \"0000000000000000000000000000007888609052210117178305745449817192969401074794892647997539075633818267651832\"\r\n        \"32256888057332133712407085113227367401123046875\"},\r\n    {0x1.fffffffffffffp-100, chars_format::fixed, 152,\r\n        \"0.\"\r\n        \"0000000000000000000000000000015777218104420234356611490899634385938802149589785295995078151267636535303664\"\r\n        \"6451377611466426742481417022645473480224609375\"},\r\n    {0x1.fffffffffffffp-99, chars_format::fixed, 151,\r\n        \"0.\"\r\n        \"0000000000000000000000000000031554436208840468713222981799268771877604299179570591990156302535273070607329\"\r\n        \"290275522293285348496283404529094696044921875\"},\r\n    {0x1.fffffffffffffp-98, chars_format::fixed, 150,\r\n        \"0.\"\r\n        \"0000000000000000000000000000063108872417680937426445963598537543755208598359141183980312605070546141214658\"\r\n        \"58055104458657069699256680905818939208984375\"},\r\n    {0x1.fffffffffffffp-97, chars_format::fixed, 149,\r\n        \"0.\"\r\n        \"0000000000000000000000000000126217744835361874852891927197075087510417196718282367960625210141092282429317\"\r\n        \"1611020891731413939851336181163787841796875\"},\r\n    {0x1.fffffffffffffp-96, chars_format::fixed, 148,\r\n        \"0.\"\r\n        \"0000000000000000000000000000252435489670723749705783854394150175020834393436564735921250420282184564858634\"\r\n        \"322204178346282787970267236232757568359375\"},\r\n    {0x1.fffffffffffffp-95, chars_format::fixed, 147,\r\n        \"0.\"\r\n        \"0000000000000000000000000000504870979341447499411567708788300350041668786873129471842500840564369129717268\"\r\n        \"64440835669256557594053447246551513671875\"},\r\n    {0x1.fffffffffffffp-94, chars_format::fixed, 146,\r\n        \"0.\"\r\n        \"0000000000000000000000000001009741958682894998823135417576600700083337573746258943685001681128738259434537\"\r\n        \"2888167133851311518810689449310302734375\"},\r\n    {0x1.fffffffffffffp-93, chars_format::fixed, 145,\r\n        \"0.\"\r\n        \"0000000000000000000000000002019483917365789997646270835153201400166675147492517887370003362257476518869074\"\r\n        \"577633426770262303762137889862060546875\"},\r\n    {0x1.fffffffffffffp-92, chars_format::fixed, 144,\r\n        \"0.\"\r\n        \"0000000000000000000000000004038967834731579995292541670306402800333350294985035774740006724514953037738149\"\r\n        \"15526685354052460752427577972412109375\"},\r\n    {0x1.fffffffffffffp-91, chars_format::fixed, 143,\r\n        \"0.\"\r\n        \"0000000000000000000000000008077935669463159990585083340612805600666700589970071549480013449029906075476298\"\r\n        \"3105337070810492150485515594482421875\"},\r\n    {0x1.fffffffffffffp-90, chars_format::fixed, 142,\r\n        \"0.\"\r\n        \"0000000000000000000000000016155871338926319981170166681225611201333401179940143098960026898059812150952596\"\r\n        \"621067414162098430097103118896484375\"},\r\n    {0x1.fffffffffffffp-89, chars_format::fixed, 141,\r\n        \"0.\"\r\n        \"0000000000000000000000000032311742677852639962340333362451222402666802359880286197920053796119624301905193\"\r\n        \"24213482832419686019420623779296875\"},\r\n    {0x1.fffffffffffffp-88, chars_format::fixed, 140,\r\n        \"0.\"\r\n        \"0000000000000000000000000064623485355705279924680666724902444805333604719760572395840107592239248603810386\"\r\n        \"4842696566483937203884124755859375\"},\r\n    {0x1.fffffffffffffp-87, chars_format::fixed, 139,\r\n        \"0.\"\r\n        \"0000000000000000000000000129246970711410559849361333449804889610667209439521144791680215184478497207620772\"\r\n        \"968539313296787440776824951171875\"},\r\n    {0x1.fffffffffffffp-86, chars_format::fixed, 138,\r\n        \"0.\"\r\n        \"0000000000000000000000000258493941422821119698722666899609779221334418879042289583360430368956994415241545\"\r\n        \"93707862659357488155364990234375\"},\r\n    {0x1.fffffffffffffp-85, chars_format::fixed, 137,\r\n        \"0.\"\r\n        \"0000000000000000000000000516987882845642239397445333799219558442668837758084579166720860737913988830483091\"\r\n        \"8741572531871497631072998046875\"},\r\n    {0x1.fffffffffffffp-84, chars_format::fixed, 136,\r\n        \"0.\"\r\n        \"0000000000000000000000001033975765691284478794890667598439116885337675516169158333441721475827977660966183\"\r\n        \"748314506374299526214599609375\"},\r\n    {0x1.fffffffffffffp-83, chars_format::fixed, 135,\r\n        \"0.\"\r\n        \"0000000000000000000000002067951531382568957589781335196878233770675351032338316666883442951655955321932367\"\r\n        \"49662901274859905242919921875\"},\r\n    {0x1.fffffffffffffp-82, chars_format::fixed, 134,\r\n        \"0.\"\r\n        \"0000000000000000000000004135903062765137915179562670393756467541350702064676633333766885903311910643864734\"\r\n        \"9932580254971981048583984375\"},\r\n    {0x1.fffffffffffffp-81, chars_format::fixed, 133,\r\n        \"0.\"\r\n        \"0000000000000000000000008271806125530275830359125340787512935082701404129353266667533771806623821287729469\"\r\n        \"986516050994396209716796875\"},\r\n    {0x1.fffffffffffffp-80, chars_format::fixed, 132,\r\n        \"0.\"\r\n        \"0000000000000000000000016543612251060551660718250681575025870165402808258706533335067543613247642575458939\"\r\n        \"97303210198879241943359375\"},\r\n    {0x1.fffffffffffffp-79, chars_format::fixed, 131,\r\n        \"0.\"\r\n        \"0000000000000000000000033087224502121103321436501363150051740330805616517413066670135087226495285150917879\"\r\n        \"9460642039775848388671875\"},\r\n    {0x1.fffffffffffffp-78, chars_format::fixed, 130,\r\n        \"0.\"\r\n        \"0000000000000000000000066174449004242206642873002726300103480661611233034826133340270174452990570301835759\"\r\n        \"892128407955169677734375\"},\r\n    {0x1.fffffffffffffp-77, chars_format::fixed, 129,\r\n        \"0.\"\r\n        \"0000000000000000000000132348898008484413285746005452600206961323222466069652266680540348905981140603671519\"\r\n        \"78425681591033935546875\"},\r\n    {0x1.fffffffffffffp-76, chars_format::fixed, 128,\r\n        \"0.\"\r\n        \"0000000000000000000000264697796016968826571492010905200413922646444932139304533361080697811962281207343039\"\r\n        \"5685136318206787109375\"},\r\n    {0x1.fffffffffffffp-75, chars_format::fixed, 127,\r\n        \"0.\"\r\n        \"0000000000000000000000529395592033937653142984021810400827845292889864278609066722161395623924562414686079\"\r\n        \"137027263641357421875\"},\r\n    {0x1.fffffffffffffp-74, chars_format::fixed, 126,\r\n        \"0.\"\r\n        \"0000000000000000000001058791184067875306285968043620801655690585779728557218133444322791247849124829372158\"\r\n        \"27405452728271484375\"},\r\n    {0x1.fffffffffffffp-73, chars_format::fixed, 125,\r\n        \"0.\"\r\n        \"0000000000000000000002117582368135750612571936087241603311381171559457114436266888645582495698249658744316\"\r\n        \"5481090545654296875\"},\r\n    {0x1.fffffffffffffp-72, chars_format::fixed, 124,\r\n        \"0.\"\r\n        \"0000000000000000000004235164736271501225143872174483206622762343118914228872533777291164991396499317488633\"\r\n        \"096218109130859375\"},\r\n    {0x1.fffffffffffffp-71, chars_format::fixed, 123,\r\n        \"0.\"\r\n        \"0000000000000000000008470329472543002450287744348966413245524686237828457745067554582329982792998634977266\"\r\n        \"19243621826171875\"},\r\n    {0x1.fffffffffffffp-70, chars_format::fixed, 122,\r\n        \"0.\"\r\n        \"0000000000000000000016940658945086004900575488697932826491049372475656915490135109164659965585997269954532\"\r\n        \"3848724365234375\"},\r\n    {0x1.fffffffffffffp-69, chars_format::fixed, 121,\r\n        \"0.\"\r\n        \"0000000000000000000033881317890172009801150977395865652982098744951313830980270218329319931171994539909064\"\r\n        \"769744873046875\"},\r\n    {0x1.fffffffffffffp-68, chars_format::fixed, 120,\r\n        \"0.\"\r\n        \"0000000000000000000067762635780344019602301954791731305964197489902627661960540436658639862343989079818129\"\r\n        \"53948974609375\"},\r\n    {0x1.fffffffffffffp-67, chars_format::fixed, 119,\r\n        \"0.\"\r\n        \"0000000000000000000135525271560688039204603909583462611928394979805255323921080873317279724687978159636259\"\r\n        \"0789794921875\"},\r\n    {0x1.fffffffffffffp-66, chars_format::fixed, 118,\r\n        \"0.\"\r\n        \"0000000000000000000271050543121376078409207819166925223856789959610510647842161746634559449375956319272518\"\r\n        \"157958984375\"},\r\n    {0x1.fffffffffffffp-65, chars_format::fixed, 117,\r\n        \"0.\"\r\n        \"0000000000000000000542101086242752156818415638333850447713579919221021295684323493269118898751912638545036\"\r\n        \"31591796875\"},\r\n    {0x1.fffffffffffffp-64, chars_format::fixed, 116,\r\n        \"0.\"\r\n        \"0000000000000000001084202172485504313636831276667700895427159838442042591368646986538237797503825277090072\"\r\n        \"6318359375\"},\r\n    {0x1.fffffffffffffp-63, chars_format::fixed, 115,\r\n        \"0.\"\r\n        \"0000000000000000002168404344971008627273662553335401790854319676884085182737293973076475595007650554180145\"\r\n        \"263671875\"},\r\n    {0x1.fffffffffffffp-62, chars_format::fixed, 114,\r\n        \"0.\"\r\n        \"0000000000000000004336808689942017254547325106670803581708639353768170365474587946152951190015301108360290\"\r\n        \"52734375\"},\r\n    {0x1.fffffffffffffp-61, chars_format::fixed, 113,\r\n        \"0.\"\r\n        \"0000000000000000008673617379884034509094650213341607163417278707536340730949175892305902380030602216720581\"\r\n        \"0546875\"},\r\n    {0x1.fffffffffffffp-60, chars_format::fixed, 112,\r\n        \"0.\"\r\n        \"0000000000000000017347234759768069018189300426683214326834557415072681461898351784611804760061204433441162\"\r\n        \"109375\"},\r\n    {0x1.fffffffffffffp-59, chars_format::fixed, 111,\r\n        \"0.\"\r\n        \"0000000000000000034694469519536138036378600853366428653669114830145362923796703569223609520122408866882324\"\r\n        \"21875\"},\r\n    {0x1.fffffffffffffp-58, chars_format::fixed, 110,\r\n        \"0.\"\r\n        \"0000000000000000069388939039072276072757201706732857307338229660290725847593407138447219040244817733764648\"\r\n        \"4375\"},\r\n    {0x1.fffffffffffffp-57, chars_format::fixed, 109,\r\n        \"0.\"\r\n        \"0000000000000000138777878078144552145514403413465714614676459320581451695186814276894438080489635467529296\"\r\n        \"875\"},\r\n    {0x1.fffffffffffffp-56, chars_format::fixed, 108,\r\n        \"0.\"\r\n        \"0000000000000000277555756156289104291028806826931429229352918641162903390373628553788876160979270935058593\"\r\n        \"75\"},\r\n    {0x1.fffffffffffffp-55, chars_format::fixed, 107,\r\n        \"0.\"\r\n        \"0000000000000000555111512312578208582057613653862858458705837282325806780747257107577752321958541870117187\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-54, chars_format::fixed, 106,\r\n        \"0.\"\r\n        \"000000000000000111022302462515641716411522730772571691741167456465161356149451421515550464391708374023437\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-53, chars_format::fixed, 105,\r\n        \"0.\"\r\n        \"00000000000000022204460492503128343282304546154514338348233491293032271229890284303110092878341674804687\"\r\n        \"5\"},\r\n    {0x1.fffffffffffffp-52, chars_format::fixed, 104,\r\n        \"0.\"\r\n        \"00000000000000044408920985006256686564609092309028676696466982586064542459780568606220185756683349609375\"},\r\n    {0x1.fffffffffffffp-51, chars_format::fixed, 103,\r\n        \"0.\"\r\n        \"0000000000000008881784197001251337312921818461805735339293396517212908491956113721244037151336669921875\"},\r\n    {0x1.fffffffffffffp-50, chars_format::fixed, 102,\r\n        \"0.000000000000001776356839400250267462584363692361147067858679303442581698391222744248807430267333984375\"},\r\n    {0x1.fffffffffffffp-49, chars_format::fixed, 101,\r\n        \"0.00000000000000355271367880050053492516872738472229413571735860688516339678244548849761486053466796875\"},\r\n    {0x1.fffffffffffffp-48, chars_format::fixed, 100,\r\n        \"0.0000000000000071054273576010010698503374547694445882714347172137703267935648909769952297210693359375\"},\r\n    {0x1.fffffffffffffp-47, chars_format::fixed, 99,\r\n        \"0.000000000000014210854715202002139700674909538889176542869434427540653587129781953990459442138671875\"},\r\n    {0x1.fffffffffffffp-46, chars_format::fixed, 98,\r\n        \"0.00000000000002842170943040400427940134981907777835308573886885508130717425956390798091888427734375\"},\r\n    {0x1.fffffffffffffp-45, chars_format::fixed, 97,\r\n        \"0.0000000000000568434188608080085588026996381555567061714777377101626143485191278159618377685546875\"},\r\n    {0x1.fffffffffffffp-44, chars_format::fixed, 96,\r\n        \"0.000000000000113686837721616017117605399276311113412342955475420325228697038255631923675537109375\"},\r\n    {0x1.fffffffffffffp-43, chars_format::fixed, 95,\r\n        \"0.00000000000022737367544323203423521079855262222682468591095084065045739407651126384735107421875\"},\r\n    {0x1.fffffffffffffp-42, chars_format::fixed, 94,\r\n        \"0.0000000000004547473508864640684704215971052444536493718219016813009147881530225276947021484375\"},\r\n    {0x1.fffffffffffffp-41, chars_format::fixed, 93,\r\n        \"0.000000000000909494701772928136940843194210488907298743643803362601829576306045055389404296875\"},\r\n    {0x1.fffffffffffffp-40, chars_format::fixed, 92,\r\n        \"0.00000000000181898940354585627388168638842097781459748728760672520365915261209011077880859375\"},\r\n    {0x1.fffffffffffffp-39, chars_format::fixed, 91,\r\n        \"0.0000000000036379788070917125477633727768419556291949745752134504073183052241802215576171875\"},\r\n    {0x1.fffffffffffffp-38, chars_format::fixed, 90,\r\n        \"0.000000000007275957614183425095526745553683911258389949150426900814636610448360443115234375\"},\r\n    {0x1.fffffffffffffp-37, chars_format::fixed, 89,\r\n        \"0.00000000001455191522836685019105349110736782251677989830085380162927322089672088623046875\"},\r\n    {0x1.fffffffffffffp-36, chars_format::fixed, 88,\r\n        \"0.0000000000291038304567337003821069822147356450335597966017076032585464417934417724609375\"},\r\n    {0x1.fffffffffffffp-35, chars_format::fixed, 87,\r\n        \"0.000000000058207660913467400764213964429471290067119593203415206517092883586883544921875\"},\r\n    {0x1.fffffffffffffp-34, chars_format::fixed, 86,\r\n        \"0.00000000011641532182693480152842792885894258013423918640683041303418576717376708984375\"},\r\n    {0x1.fffffffffffffp-33, chars_format::fixed, 85,\r\n        \"0.0000000002328306436538696030568558577178851602684783728136608260683715343475341796875\"},\r\n    {0x1.fffffffffffffp-32, chars_format::fixed, 84,\r\n        \"0.000000000465661287307739206113711715435770320536956745627321652136743068695068359375\"},\r\n    {0x1.fffffffffffffp-31, chars_format::fixed, 83,\r\n        \"0.00000000093132257461547841222742343087154064107391349125464330427348613739013671875\"},\r\n    {0x1.fffffffffffffp-30, chars_format::fixed, 82,\r\n        \"0.0000000018626451492309568244548468617430812821478269825092866085469722747802734375\"},\r\n    {0x1.fffffffffffffp-29, chars_format::fixed, 81,\r\n        \"0.000000003725290298461913648909693723486162564295653965018573217093944549560546875\"},\r\n    {0x1.fffffffffffffp-28, chars_format::fixed, 80,\r\n        \"0.00000000745058059692382729781938744697232512859130793003714643418788909912109375\"},\r\n    {0x1.fffffffffffffp-27, chars_format::fixed, 79,\r\n        \"0.0000000149011611938476545956387748939446502571826158600742928683757781982421875\"},\r\n    {0x1.fffffffffffffp-26, chars_format::fixed, 78,\r\n        \"0.000000029802322387695309191277549787889300514365231720148585736751556396484375\"},\r\n    {0x1.fffffffffffffp-25, chars_format::fixed, 77,\r\n        \"0.00000005960464477539061838255509957577860102873046344029717147350311279296875\"},\r\n    {0x1.fffffffffffffp-24, chars_format::fixed, 76,\r\n        \"0.0000001192092895507812367651101991515572020574609268805943429470062255859375\"},\r\n    {0x1.fffffffffffffp-23, chars_format::fixed, 75,\r\n        \"0.000000238418579101562473530220398303114404114921853761188685894012451171875\"},\r\n    {0x1.fffffffffffffp-22, chars_format::fixed, 74,\r\n        \"0.00000047683715820312494706044079660622880822984370752237737178802490234375\"},\r\n    {0x1.fffffffffffffp-21, chars_format::fixed, 73,\r\n        \"0.0000009536743164062498941208815932124576164596874150447547435760498046875\"},\r\n    {0x1.fffffffffffffp-20, chars_format::fixed, 72,\r\n        \"0.000001907348632812499788241763186424915232919374830089509487152099609375\"},\r\n    {0x1.fffffffffffffp-19, chars_format::fixed, 71,\r\n        \"0.00000381469726562499957648352637284983046583874966017901897430419921875\"},\r\n    {0x1.fffffffffffffp-18, chars_format::fixed, 70,\r\n        \"0.0000076293945312499991529670527456996609316774993203580379486083984375\"},\r\n    {0x1.fffffffffffffp-17, chars_format::fixed, 69,\r\n        \"0.000015258789062499998305934105491399321863354998640716075897216796875\"},\r\n    {0x1.fffffffffffffp-16, chars_format::fixed, 68,\r\n        \"0.00003051757812499999661186821098279864372670999728143215179443359375\"},\r\n    {0x1.fffffffffffffp-15, chars_format::fixed, 67,\r\n        \"0.0000610351562499999932237364219655972874534199945628643035888671875\"},\r\n    {0x1.fffffffffffffp-14, chars_format::fixed, 66,\r\n        \"0.000122070312499999986447472843931194574906839989125728607177734375\"},\r\n    {0x1.fffffffffffffp-13, chars_format::fixed, 65,\r\n        \"0.00024414062499999997289494568786238914981367997825145721435546875\"},\r\n    {0x1.fffffffffffffp-12, chars_format::fixed, 64,\r\n        \"0.0004882812499999999457898913757247782996273599565029144287109375\"},\r\n    {0x1.fffffffffffffp-11, chars_format::fixed, 63,\r\n        \"0.000976562499999999891579782751449556599254719913005828857421875\"},\r\n    {0x1.fffffffffffffp-10, chars_format::fixed, 62,\r\n        \"0.00195312499999999978315956550289911319850943982601165771484375\"},\r\n    {0x1.fffffffffffffp-9, chars_format::fixed, 61, \"0.0039062499999999995663191310057982263970188796520233154296875\"},\r\n    {0x1.fffffffffffffp-8, chars_format::fixed, 60, \"0.007812499999999999132638262011596452794037759304046630859375\"},\r\n    {0x1.fffffffffffffp-7, chars_format::fixed, 59, \"0.01562499999999999826527652402319290558807551860809326171875\"},\r\n    {0x1.fffffffffffffp-6, chars_format::fixed, 58, \"0.0312499999999999965305530480463858111761510372161865234375\"},\r\n    {0x1.fffffffffffffp-5, chars_format::fixed, 57, \"0.062499999999999993061106096092771622352302074432373046875\"},\r\n    {0x1.fffffffffffffp-4, chars_format::fixed, 56, \"0.12499999999999998612221219218554324470460414886474609375\"},\r\n    {0x1.fffffffffffffp-3, chars_format::fixed, 55, \"0.2499999999999999722444243843710864894092082977294921875\"},\r\n    {0x1.fffffffffffffp-2, chars_format::fixed, 54, \"0.499999999999999944488848768742172978818416595458984375\"},\r\n    {0x1.fffffffffffffp-1, chars_format::fixed, 53, \"0.99999999999999988897769753748434595763683319091796875\"},\r\n    {0x1.fffffffffffffp+0, chars_format::fixed, 52, \"1.9999999999999997779553950749686919152736663818359375\"},\r\n    {0x1.fffffffffffffp+1, chars_format::fixed, 51, \"3.999999999999999555910790149937383830547332763671875\"},\r\n    {0x1.fffffffffffffp+2, chars_format::fixed, 50, \"7.99999999999999911182158029987476766109466552734375\"},\r\n    {0x1.fffffffffffffp+3, chars_format::fixed, 49, \"15.9999999999999982236431605997495353221893310546875\"},\r\n    {0x1.fffffffffffffp+4, chars_format::fixed, 48, \"31.999999999999996447286321199499070644378662109375\"},\r\n    {0x1.fffffffffffffp+5, chars_format::fixed, 47, \"63.99999999999999289457264239899814128875732421875\"},\r\n    {0x1.fffffffffffffp+6, chars_format::fixed, 46, \"127.9999999999999857891452847979962825775146484375\"},\r\n    {0x1.fffffffffffffp+7, chars_format::fixed, 45, \"255.999999999999971578290569595992565155029296875\"},\r\n    {0x1.fffffffffffffp+8, chars_format::fixed, 44, \"511.99999999999994315658113919198513031005859375\"},\r\n    {0x1.fffffffffffffp+9, chars_format::fixed, 43, \"1023.9999999999998863131622783839702606201171875\"},\r\n    {0x1.fffffffffffffp+10, chars_format::fixed, 42, \"2047.999999999999772626324556767940521240234375\"},\r\n    {0x1.fffffffffffffp+11, chars_format::fixed, 41, \"4095.99999999999954525264911353588104248046875\"},\r\n    {0x1.fffffffffffffp+12, chars_format::fixed, 40, \"8191.9999999999990905052982270717620849609375\"},\r\n    {0x1.fffffffffffffp+13, chars_format::fixed, 39, \"16383.999999999998181010596454143524169921875\"},\r\n    {0x1.fffffffffffffp+14, chars_format::fixed, 38, \"32767.99999999999636202119290828704833984375\"},\r\n    {0x1.fffffffffffffp+15, chars_format::fixed, 37, \"65535.9999999999927240423858165740966796875\"},\r\n    {0x1.fffffffffffffp+16, chars_format::fixed, 36, \"131071.999999999985448084771633148193359375\"},\r\n    {0x1.fffffffffffffp+17, chars_format::fixed, 35, \"262143.99999999997089616954326629638671875\"},\r\n    {0x1.fffffffffffffp+18, chars_format::fixed, 34, \"524287.9999999999417923390865325927734375\"},\r\n    {0x1.fffffffffffffp+19, chars_format::fixed, 33, \"1048575.999999999883584678173065185546875\"},\r\n    {0x1.fffffffffffffp+20, chars_format::fixed, 32, \"2097151.99999999976716935634613037109375\"},\r\n    {0x1.fffffffffffffp+21, chars_format::fixed, 31, \"4194303.9999999995343387126922607421875\"},\r\n    {0x1.fffffffffffffp+22, chars_format::fixed, 30, \"8388607.999999999068677425384521484375\"},\r\n    {0x1.fffffffffffffp+23, chars_format::fixed, 29, \"16777215.99999999813735485076904296875\"},\r\n    {0x1.fffffffffffffp+24, chars_format::fixed, 28, \"33554431.9999999962747097015380859375\"},\r\n    {0x1.fffffffffffffp+25, chars_format::fixed, 27, \"67108863.999999992549419403076171875\"},\r\n    {0x1.fffffffffffffp+26, chars_format::fixed, 26, \"134217727.99999998509883880615234375\"},\r\n    {0x1.fffffffffffffp+27, chars_format::fixed, 25, \"268435455.9999999701976776123046875\"},\r\n    {0x1.fffffffffffffp+28, chars_format::fixed, 24, \"536870911.999999940395355224609375\"},\r\n    {0x1.fffffffffffffp+29, chars_format::fixed, 23, \"1073741823.99999988079071044921875\"},\r\n    {0x1.fffffffffffffp+30, chars_format::fixed, 22, \"2147483647.9999997615814208984375\"},\r\n    {0x1.fffffffffffffp+31, chars_format::fixed, 21, \"4294967295.999999523162841796875\"},\r\n    {0x1.fffffffffffffp+32, chars_format::fixed, 20, \"8589934591.99999904632568359375\"},\r\n    {0x1.fffffffffffffp+33, chars_format::fixed, 19, \"17179869183.9999980926513671875\"},\r\n    {0x1.fffffffffffffp+34, chars_format::fixed, 18, \"34359738367.999996185302734375\"},\r\n    {0x1.fffffffffffffp+35, chars_format::fixed, 17, \"68719476735.99999237060546875\"},\r\n    {0x1.fffffffffffffp+36, chars_format::fixed, 16, \"137438953471.9999847412109375\"},\r\n    {0x1.fffffffffffffp+37, chars_format::fixed, 15, \"274877906943.999969482421875\"},\r\n    {0x1.fffffffffffffp+38, chars_format::fixed, 14, \"549755813887.99993896484375\"},\r\n    {0x1.fffffffffffffp+39, chars_format::fixed, 13, \"1099511627775.9998779296875\"},\r\n    {0x1.fffffffffffffp+40, chars_format::fixed, 12, \"2199023255551.999755859375\"},\r\n    {0x1.fffffffffffffp+41, chars_format::fixed, 11, \"4398046511103.99951171875\"},\r\n    {0x1.fffffffffffffp+42, chars_format::fixed, 10, \"8796093022207.9990234375\"},\r\n    {0x1.fffffffffffffp+43, chars_format::fixed, 9, \"17592186044415.998046875\"},\r\n    {0x1.fffffffffffffp+44, chars_format::fixed, 8, \"35184372088831.99609375\"},\r\n    {0x1.fffffffffffffp+45, chars_format::fixed, 7, \"70368744177663.9921875\"},\r\n    {0x1.fffffffffffffp+46, chars_format::fixed, 6, \"140737488355327.984375\"},\r\n    {0x1.fffffffffffffp+47, chars_format::fixed, 5, \"281474976710655.96875\"},\r\n    {0x1.fffffffffffffp+48, chars_format::fixed, 4, \"562949953421311.9375\"},\r\n    {0x1.fffffffffffffp+49, chars_format::fixed, 3, \"1125899906842623.875\"},\r\n    {0x1.fffffffffffffp+50, chars_format::fixed, 2, \"2251799813685247.75\"},\r\n    {0x1.fffffffffffffp+51, chars_format::fixed, 1, \"4503599627370495.5\"},\r\n    {0x1.fffffffffffffp+52, chars_format::fixed, 0, \"9007199254740991\"},\r\n    {0x1.fffffffffffffp+53, chars_format::fixed, 0, \"18014398509481982\"},\r\n    {0x1.fffffffffffffp+54, chars_format::fixed, 0, \"36028797018963964\"},\r\n    {0x1.fffffffffffffp+55, chars_format::fixed, 0, \"72057594037927928\"},\r\n    {0x1.fffffffffffffp+56, chars_format::fixed, 0, \"144115188075855856\"},\r\n    {0x1.fffffffffffffp+57, chars_format::fixed, 0, \"288230376151711712\"},\r\n    {0x1.fffffffffffffp+58, chars_format::fixed, 0, \"576460752303423424\"},\r\n    {0x1.fffffffffffffp+59, chars_format::fixed, 0, \"1152921504606846848\"},\r\n    {0x1.fffffffffffffp+60, chars_format::fixed, 0, \"2305843009213693696\"},\r\n    {0x1.fffffffffffffp+61, chars_format::fixed, 0, \"4611686018427387392\"},\r\n    {0x1.fffffffffffffp+62, chars_format::fixed, 0, \"9223372036854774784\"},\r\n    {0x1.fffffffffffffp+63, chars_format::fixed, 0, \"18446744073709549568\"},\r\n    {0x1.fffffffffffffp+64, chars_format::fixed, 0, \"36893488147419099136\"},\r\n    {0x1.fffffffffffffp+65, chars_format::fixed, 0, \"73786976294838198272\"},\r\n    {0x1.fffffffffffffp+66, chars_format::fixed, 0, \"147573952589676396544\"},\r\n    {0x1.fffffffffffffp+67, chars_format::fixed, 0, \"295147905179352793088\"},\r\n    {0x1.fffffffffffffp+68, chars_format::fixed, 0, \"590295810358705586176\"},\r\n    {0x1.fffffffffffffp+69, chars_format::fixed, 0, \"1180591620717411172352\"},\r\n    {0x1.fffffffffffffp+70, chars_format::fixed, 0, \"2361183241434822344704\"},\r\n    {0x1.fffffffffffffp+71, chars_format::fixed, 0, \"4722366482869644689408\"},\r\n    {0x1.fffffffffffffp+72, chars_format::fixed, 0, \"9444732965739289378816\"},\r\n    {0x1.fffffffffffffp+73, chars_format::fixed, 0, \"18889465931478578757632\"},\r\n    {0x1.fffffffffffffp+74, chars_format::fixed, 0, \"37778931862957157515264\"},\r\n    {0x1.fffffffffffffp+75, chars_format::fixed, 0, \"75557863725914315030528\"},\r\n    {0x1.fffffffffffffp+76, chars_format::fixed, 0, \"151115727451828630061056\"},\r\n    {0x1.fffffffffffffp+77, chars_format::fixed, 0, \"302231454903657260122112\"},\r\n    {0x1.fffffffffffffp+78, chars_format::fixed, 0, \"604462909807314520244224\"},\r\n    {0x1.fffffffffffffp+79, chars_format::fixed, 0, \"1208925819614629040488448\"},\r\n    {0x1.fffffffffffffp+80, chars_format::fixed, 0, \"2417851639229258080976896\"},\r\n    {0x1.fffffffffffffp+81, chars_format::fixed, 0, \"4835703278458516161953792\"},\r\n    {0x1.fffffffffffffp+82, chars_format::fixed, 0, \"9671406556917032323907584\"},\r\n    {0x1.fffffffffffffp+83, chars_format::fixed, 0, \"19342813113834064647815168\"},\r\n    {0x1.fffffffffffffp+84, chars_format::fixed, 0, \"38685626227668129295630336\"},\r\n    {0x1.fffffffffffffp+85, chars_format::fixed, 0, \"77371252455336258591260672\"},\r\n    {0x1.fffffffffffffp+86, chars_format::fixed, 0, \"154742504910672517182521344\"},\r\n    {0x1.fffffffffffffp+87, chars_format::fixed, 0, \"309485009821345034365042688\"},\r\n    {0x1.fffffffffffffp+88, chars_format::fixed, 0, \"618970019642690068730085376\"},\r\n    {0x1.fffffffffffffp+89, chars_format::fixed, 0, \"1237940039285380137460170752\"},\r\n    {0x1.fffffffffffffp+90, chars_format::fixed, 0, \"2475880078570760274920341504\"},\r\n    {0x1.fffffffffffffp+91, chars_format::fixed, 0, \"4951760157141520549840683008\"},\r\n    {0x1.fffffffffffffp+92, chars_format::fixed, 0, \"9903520314283041099681366016\"},\r\n    {0x1.fffffffffffffp+93, chars_format::fixed, 0, \"19807040628566082199362732032\"},\r\n    {0x1.fffffffffffffp+94, chars_format::fixed, 0, \"39614081257132164398725464064\"},\r\n    {0x1.fffffffffffffp+95, chars_format::fixed, 0, \"79228162514264328797450928128\"},\r\n    {0x1.fffffffffffffp+96, chars_format::fixed, 0, \"158456325028528657594901856256\"},\r\n    {0x1.fffffffffffffp+97, chars_format::fixed, 0, \"316912650057057315189803712512\"},\r\n    {0x1.fffffffffffffp+98, chars_format::fixed, 0, \"633825300114114630379607425024\"},\r\n    {0x1.fffffffffffffp+99, chars_format::fixed, 0, \"1267650600228229260759214850048\"},\r\n    {0x1.fffffffffffffp+100, chars_format::fixed, 0, \"2535301200456458521518429700096\"},\r\n    {0x1.fffffffffffffp+101, chars_format::fixed, 0, \"5070602400912917043036859400192\"},\r\n    {0x1.fffffffffffffp+102, chars_format::fixed, 0, \"10141204801825834086073718800384\"},\r\n    {0x1.fffffffffffffp+103, chars_format::fixed, 0, \"20282409603651668172147437600768\"},\r\n    {0x1.fffffffffffffp+104, chars_format::fixed, 0, \"40564819207303336344294875201536\"},\r\n    {0x1.fffffffffffffp+105, chars_format::fixed, 0, \"81129638414606672688589750403072\"},\r\n    {0x1.fffffffffffffp+106, chars_format::fixed, 0, \"162259276829213345377179500806144\"},\r\n    {0x1.fffffffffffffp+107, chars_format::fixed, 0, \"324518553658426690754359001612288\"},\r\n    {0x1.fffffffffffffp+108, chars_format::fixed, 0, \"649037107316853381508718003224576\"},\r\n    {0x1.fffffffffffffp+109, chars_format::fixed, 0, \"1298074214633706763017436006449152\"},\r\n    {0x1.fffffffffffffp+110, chars_format::fixed, 0, \"2596148429267413526034872012898304\"},\r\n    {0x1.fffffffffffffp+111, chars_format::fixed, 0, \"5192296858534827052069744025796608\"},\r\n    {0x1.fffffffffffffp+112, chars_format::fixed, 0, \"10384593717069654104139488051593216\"},\r\n    {0x1.fffffffffffffp+113, chars_format::fixed, 0, \"20769187434139308208278976103186432\"},\r\n    {0x1.fffffffffffffp+114, chars_format::fixed, 0, \"41538374868278616416557952206372864\"},\r\n    {0x1.fffffffffffffp+115, chars_format::fixed, 0, \"83076749736557232833115904412745728\"},\r\n    {0x1.fffffffffffffp+116, chars_format::fixed, 0, \"166153499473114465666231808825491456\"},\r\n    {0x1.fffffffffffffp+117, chars_format::fixed, 0, \"332306998946228931332463617650982912\"},\r\n    {0x1.fffffffffffffp+118, chars_format::fixed, 0, \"664613997892457862664927235301965824\"},\r\n    {0x1.fffffffffffffp+119, chars_format::fixed, 0, \"1329227995784915725329854470603931648\"},\r\n    {0x1.fffffffffffffp+120, chars_format::fixed, 0, \"2658455991569831450659708941207863296\"},\r\n    {0x1.fffffffffffffp+121, chars_format::fixed, 0, \"5316911983139662901319417882415726592\"},\r\n    {0x1.fffffffffffffp+122, chars_format::fixed, 0, \"10633823966279325802638835764831453184\"},\r\n    {0x1.fffffffffffffp+123, chars_format::fixed, 0, \"21267647932558651605277671529662906368\"},\r\n    {0x1.fffffffffffffp+124, chars_format::fixed, 0, \"42535295865117303210555343059325812736\"},\r\n    {0x1.fffffffffffffp+125, chars_format::fixed, 0, \"85070591730234606421110686118651625472\"},\r\n    {0x1.fffffffffffffp+126, chars_format::fixed, 0, \"170141183460469212842221372237303250944\"},\r\n    {0x1.fffffffffffffp+127, chars_format::fixed, 0, \"340282366920938425684442744474606501888\"},\r\n    {0x1.fffffffffffffp+128, chars_format::fixed, 0, \"680564733841876851368885488949213003776\"},\r\n    {0x1.fffffffffffffp+129, chars_format::fixed, 0, \"1361129467683753702737770977898426007552\"},\r\n    {0x1.fffffffffffffp+130, chars_format::fixed, 0, \"2722258935367507405475541955796852015104\"},\r\n    {0x1.fffffffffffffp+131, chars_format::fixed, 0, \"5444517870735014810951083911593704030208\"},\r\n    {0x1.fffffffffffffp+132, chars_format::fixed, 0, \"10889035741470029621902167823187408060416\"},\r\n    {0x1.fffffffffffffp+133, chars_format::fixed, 0, \"21778071482940059243804335646374816120832\"},\r\n    {0x1.fffffffffffffp+134, chars_format::fixed, 0, \"43556142965880118487608671292749632241664\"},\r\n    {0x1.fffffffffffffp+135, chars_format::fixed, 0, \"87112285931760236975217342585499264483328\"},\r\n    {0x1.fffffffffffffp+136, chars_format::fixed, 0, \"174224571863520473950434685170998528966656\"},\r\n    {0x1.fffffffffffffp+137, chars_format::fixed, 0, \"348449143727040947900869370341997057933312\"},\r\n    {0x1.fffffffffffffp+138, chars_format::fixed, 0, \"696898287454081895801738740683994115866624\"},\r\n    {0x1.fffffffffffffp+139, chars_format::fixed, 0, \"1393796574908163791603477481367988231733248\"},\r\n    {0x1.fffffffffffffp+140, chars_format::fixed, 0, \"2787593149816327583206954962735976463466496\"},\r\n    {0x1.fffffffffffffp+141, chars_format::fixed, 0, \"5575186299632655166413909925471952926932992\"},\r\n    {0x1.fffffffffffffp+142, chars_format::fixed, 0, \"11150372599265310332827819850943905853865984\"},\r\n    {0x1.fffffffffffffp+143, chars_format::fixed, 0, \"22300745198530620665655639701887811707731968\"},\r\n    {0x1.fffffffffffffp+144, chars_format::fixed, 0, \"44601490397061241331311279403775623415463936\"},\r\n    {0x1.fffffffffffffp+145, chars_format::fixed, 0, \"89202980794122482662622558807551246830927872\"},\r\n    {0x1.fffffffffffffp+146, chars_format::fixed, 0, \"178405961588244965325245117615102493661855744\"},\r\n    {0x1.fffffffffffffp+147, chars_format::fixed, 0, \"356811923176489930650490235230204987323711488\"},\r\n    {0x1.fffffffffffffp+148, chars_format::fixed, 0, \"713623846352979861300980470460409974647422976\"},\r\n    {0x1.fffffffffffffp+149, chars_format::fixed, 0, \"1427247692705959722601960940920819949294845952\"},\r\n    {0x1.fffffffffffffp+150, chars_format::fixed, 0, \"2854495385411919445203921881841639898589691904\"},\r\n    {0x1.fffffffffffffp+151, chars_format::fixed, 0, \"5708990770823838890407843763683279797179383808\"},\r\n    {0x1.fffffffffffffp+152, chars_format::fixed, 0, \"11417981541647677780815687527366559594358767616\"},\r\n    {0x1.fffffffffffffp+153, chars_format::fixed, 0, \"22835963083295355561631375054733119188717535232\"},\r\n    {0x1.fffffffffffffp+154, chars_format::fixed, 0, \"45671926166590711123262750109466238377435070464\"},\r\n    {0x1.fffffffffffffp+155, chars_format::fixed, 0, \"91343852333181422246525500218932476754870140928\"},\r\n    {0x1.fffffffffffffp+156, chars_format::fixed, 0, \"182687704666362844493051000437864953509740281856\"},\r\n    {0x1.fffffffffffffp+157, chars_format::fixed, 0, \"365375409332725688986102000875729907019480563712\"},\r\n    {0x1.fffffffffffffp+158, chars_format::fixed, 0, \"730750818665451377972204001751459814038961127424\"},\r\n    {0x1.fffffffffffffp+159, chars_format::fixed, 0, \"1461501637330902755944408003502919628077922254848\"},\r\n    {0x1.fffffffffffffp+160, chars_format::fixed, 0, \"2923003274661805511888816007005839256155844509696\"},\r\n    {0x1.fffffffffffffp+161, chars_format::fixed, 0, \"5846006549323611023777632014011678512311689019392\"},\r\n    {0x1.fffffffffffffp+162, chars_format::fixed, 0, \"11692013098647222047555264028023357024623378038784\"},\r\n    {0x1.fffffffffffffp+163, chars_format::fixed, 0, \"23384026197294444095110528056046714049246756077568\"},\r\n    {0x1.fffffffffffffp+164, chars_format::fixed, 0, \"46768052394588888190221056112093428098493512155136\"},\r\n    {0x1.fffffffffffffp+165, chars_format::fixed, 0, \"93536104789177776380442112224186856196987024310272\"},\r\n    {0x1.fffffffffffffp+166, chars_format::fixed, 0, \"187072209578355552760884224448373712393974048620544\"},\r\n    {0x1.fffffffffffffp+167, chars_format::fixed, 0, \"374144419156711105521768448896747424787948097241088\"},\r\n    {0x1.fffffffffffffp+168, chars_format::fixed, 0, \"748288838313422211043536897793494849575896194482176\"},\r\n    {0x1.fffffffffffffp+169, chars_format::fixed, 0, \"1496577676626844422087073795586989699151792388964352\"},\r\n    {0x1.fffffffffffffp+170, chars_format::fixed, 0, \"2993155353253688844174147591173979398303584777928704\"},\r\n    {0x1.fffffffffffffp+171, chars_format::fixed, 0, \"5986310706507377688348295182347958796607169555857408\"},\r\n    {0x1.fffffffffffffp+172, chars_format::fixed, 0, \"11972621413014755376696590364695917593214339111714816\"},\r\n    {0x1.fffffffffffffp+173, chars_format::fixed, 0, \"23945242826029510753393180729391835186428678223429632\"},\r\n    {0x1.fffffffffffffp+174, chars_format::fixed, 0, \"47890485652059021506786361458783670372857356446859264\"},\r\n    {0x1.fffffffffffffp+175, chars_format::fixed, 0, \"95780971304118043013572722917567340745714712893718528\"},\r\n    {0x1.fffffffffffffp+176, chars_format::fixed, 0, \"191561942608236086027145445835134681491429425787437056\"},\r\n    {0x1.fffffffffffffp+177, chars_format::fixed, 0, \"383123885216472172054290891670269362982858851574874112\"},\r\n    {0x1.fffffffffffffp+178, chars_format::fixed, 0, \"766247770432944344108581783340538725965717703149748224\"},\r\n    {0x1.fffffffffffffp+179, chars_format::fixed, 0, \"1532495540865888688217163566681077451931435406299496448\"},\r\n    {0x1.fffffffffffffp+180, chars_format::fixed, 0, \"3064991081731777376434327133362154903862870812598992896\"},\r\n    {0x1.fffffffffffffp+181, chars_format::fixed, 0, \"6129982163463554752868654266724309807725741625197985792\"},\r\n    {0x1.fffffffffffffp+182, chars_format::fixed, 0, \"12259964326927109505737308533448619615451483250395971584\"},\r\n    {0x1.fffffffffffffp+183, chars_format::fixed, 0, \"24519928653854219011474617066897239230902966500791943168\"},\r\n    {0x1.fffffffffffffp+184, chars_format::fixed, 0, \"49039857307708438022949234133794478461805933001583886336\"},\r\n    {0x1.fffffffffffffp+185, chars_format::fixed, 0, \"98079714615416876045898468267588956923611866003167772672\"},\r\n    {0x1.fffffffffffffp+186, chars_format::fixed, 0, \"196159429230833752091796936535177913847223732006335545344\"},\r\n    {0x1.fffffffffffffp+187, chars_format::fixed, 0, \"392318858461667504183593873070355827694447464012671090688\"},\r\n    {0x1.fffffffffffffp+188, chars_format::fixed, 0, \"784637716923335008367187746140711655388894928025342181376\"},\r\n    {0x1.fffffffffffffp+189, chars_format::fixed, 0, \"1569275433846670016734375492281423310777789856050684362752\"},\r\n    {0x1.fffffffffffffp+190, chars_format::fixed, 0, \"3138550867693340033468750984562846621555579712101368725504\"},\r\n    {0x1.fffffffffffffp+191, chars_format::fixed, 0, \"6277101735386680066937501969125693243111159424202737451008\"},\r\n    {0x1.fffffffffffffp+192, chars_format::fixed, 0, \"12554203470773360133875003938251386486222318848405474902016\"},\r\n    {0x1.fffffffffffffp+193, chars_format::fixed, 0, \"25108406941546720267750007876502772972444637696810949804032\"},\r\n    {0x1.fffffffffffffp+194, chars_format::fixed, 0, \"50216813883093440535500015753005545944889275393621899608064\"},\r\n    {0x1.fffffffffffffp+195, chars_format::fixed, 0, \"100433627766186881071000031506011091889778550787243799216128\"},\r\n    {0x1.fffffffffffffp+196, chars_format::fixed, 0, \"200867255532373762142000063012022183779557101574487598432256\"},\r\n    {0x1.fffffffffffffp+197, chars_format::fixed, 0, \"401734511064747524284000126024044367559114203148975196864512\"},\r\n    {0x1.fffffffffffffp+198, chars_format::fixed, 0, \"803469022129495048568000252048088735118228406297950393729024\"},\r\n    {0x1.fffffffffffffp+199, chars_format::fixed, 0, \"1606938044258990097136000504096177470236456812595900787458048\"},\r\n    {0x1.fffffffffffffp+200, chars_format::fixed, 0, \"3213876088517980194272001008192354940472913625191801574916096\"},\r\n    {0x1.fffffffffffffp+201, chars_format::fixed, 0, \"6427752177035960388544002016384709880945827250383603149832192\"},\r\n    {0x1.fffffffffffffp+202, chars_format::fixed, 0, \"12855504354071920777088004032769419761891654500767206299664384\"},\r\n    {0x1.fffffffffffffp+203, chars_format::fixed, 0, \"25711008708143841554176008065538839523783309001534412599328768\"},\r\n    {0x1.fffffffffffffp+204, chars_format::fixed, 0, \"51422017416287683108352016131077679047566618003068825198657536\"},\r\n    {0x1.fffffffffffffp+205, chars_format::fixed, 0, \"102844034832575366216704032262155358095133236006137650397315072\"},\r\n    {0x1.fffffffffffffp+206, chars_format::fixed, 0, \"205688069665150732433408064524310716190266472012275300794630144\"},\r\n    {0x1.fffffffffffffp+207, chars_format::fixed, 0, \"411376139330301464866816129048621432380532944024550601589260288\"},\r\n    {0x1.fffffffffffffp+208, chars_format::fixed, 0, \"822752278660602929733632258097242864761065888049101203178520576\"},\r\n    {0x1.fffffffffffffp+209, chars_format::fixed, 0,\r\n        \"1645504557321205859467264516194485729522131776098202406357041152\"},\r\n    {0x1.fffffffffffffp+210, chars_format::fixed, 0,\r\n        \"3291009114642411718934529032388971459044263552196404812714082304\"},\r\n    {0x1.fffffffffffffp+211, chars_format::fixed, 0,\r\n        \"6582018229284823437869058064777942918088527104392809625428164608\"},\r\n    {0x1.fffffffffffffp+212, chars_format::fixed, 0,\r\n        \"13164036458569646875738116129555885836177054208785619250856329216\"},\r\n    {0x1.fffffffffffffp+213, chars_format::fixed, 0,\r\n        \"26328072917139293751476232259111771672354108417571238501712658432\"},\r\n    {0x1.fffffffffffffp+214, chars_format::fixed, 0,\r\n        \"52656145834278587502952464518223543344708216835142477003425316864\"},\r\n    {0x1.fffffffffffffp+215, chars_format::fixed, 0,\r\n        \"105312291668557175005904929036447086689416433670284954006850633728\"},\r\n    {0x1.fffffffffffffp+216, chars_format::fixed, 0,\r\n        \"210624583337114350011809858072894173378832867340569908013701267456\"},\r\n    {0x1.fffffffffffffp+217, chars_format::fixed, 0,\r\n        \"421249166674228700023619716145788346757665734681139816027402534912\"},\r\n    {0x1.fffffffffffffp+218, chars_format::fixed, 0,\r\n        \"842498333348457400047239432291576693515331469362279632054805069824\"},\r\n    {0x1.fffffffffffffp+219, chars_format::fixed, 0,\r\n        \"1684996666696914800094478864583153387030662938724559264109610139648\"},\r\n    {0x1.fffffffffffffp+220, chars_format::fixed, 0,\r\n        \"3369993333393829600188957729166306774061325877449118528219220279296\"},\r\n    {0x1.fffffffffffffp+221, chars_format::fixed, 0,\r\n        \"6739986666787659200377915458332613548122651754898237056438440558592\"},\r\n    {0x1.fffffffffffffp+222, chars_format::fixed, 0,\r\n        \"13479973333575318400755830916665227096245303509796474112876881117184\"},\r\n    {0x1.fffffffffffffp+223, chars_format::fixed, 0,\r\n        \"26959946667150636801511661833330454192490607019592948225753762234368\"},\r\n    {0x1.fffffffffffffp+224, chars_format::fixed, 0,\r\n        \"53919893334301273603023323666660908384981214039185896451507524468736\"},\r\n    {0x1.fffffffffffffp+225, chars_format::fixed, 0,\r\n        \"107839786668602547206046647333321816769962428078371792903015048937472\"},\r\n    {0x1.fffffffffffffp+226, chars_format::fixed, 0,\r\n        \"215679573337205094412093294666643633539924856156743585806030097874944\"},\r\n    {0x1.fffffffffffffp+227, chars_format::fixed, 0,\r\n        \"431359146674410188824186589333287267079849712313487171612060195749888\"},\r\n    {0x1.fffffffffffffp+228, chars_format::fixed, 0,\r\n        \"862718293348820377648373178666574534159699424626974343224120391499776\"},\r\n    {0x1.fffffffffffffp+229, chars_format::fixed, 0,\r\n        \"1725436586697640755296746357333149068319398849253948686448240782999552\"},\r\n    {0x1.fffffffffffffp+230, chars_format::fixed, 0,\r\n        \"3450873173395281510593492714666298136638797698507897372896481565999104\"},\r\n    {0x1.fffffffffffffp+231, chars_format::fixed, 0,\r\n        \"6901746346790563021186985429332596273277595397015794745792963131998208\"},\r\n    {0x1.fffffffffffffp+232, chars_format::fixed, 0,\r\n        \"13803492693581126042373970858665192546555190794031589491585926263996416\"},\r\n    {0x1.fffffffffffffp+233, chars_format::fixed, 0,\r\n        \"27606985387162252084747941717330385093110381588063178983171852527992832\"},\r\n    {0x1.fffffffffffffp+234, chars_format::fixed, 0,\r\n        \"55213970774324504169495883434660770186220763176126357966343705055985664\"},\r\n    {0x1.fffffffffffffp+235, chars_format::fixed, 0,\r\n        \"110427941548649008338991766869321540372441526352252715932687410111971328\"},\r\n    {0x1.fffffffffffffp+236, chars_format::fixed, 0,\r\n        \"220855883097298016677983533738643080744883052704505431865374820223942656\"},\r\n    {0x1.fffffffffffffp+237, chars_format::fixed, 0,\r\n        \"441711766194596033355967067477286161489766105409010863730749640447885312\"},\r\n    {0x1.fffffffffffffp+238, chars_format::fixed, 0,\r\n        \"883423532389192066711934134954572322979532210818021727461499280895770624\"},\r\n    {0x1.fffffffffffffp+239, chars_format::fixed, 0,\r\n        \"1766847064778384133423868269909144645959064421636043454922998561791541248\"},\r\n    {0x1.fffffffffffffp+240, chars_format::fixed, 0,\r\n        \"3533694129556768266847736539818289291918128843272086909845997123583082496\"},\r\n    {0x1.fffffffffffffp+241, chars_format::fixed, 0,\r\n        \"7067388259113536533695473079636578583836257686544173819691994247166164992\"},\r\n    {0x1.fffffffffffffp+242, chars_format::fixed, 0,\r\n        \"14134776518227073067390946159273157167672515373088347639383988494332329984\"},\r\n    {0x1.fffffffffffffp+243, chars_format::fixed, 0,\r\n        \"28269553036454146134781892318546314335345030746176695278767976988664659968\"},\r\n    {0x1.fffffffffffffp+244, chars_format::fixed, 0,\r\n        \"56539106072908292269563784637092628670690061492353390557535953977329319936\"},\r\n    {0x1.fffffffffffffp+245, chars_format::fixed, 0,\r\n        \"113078212145816584539127569274185257341380122984706781115071907954658639872\"},\r\n    {0x1.fffffffffffffp+246, chars_format::fixed, 0,\r\n        \"226156424291633169078255138548370514682760245969413562230143815909317279744\"},\r\n    {0x1.fffffffffffffp+247, chars_format::fixed, 0,\r\n        \"452312848583266338156510277096741029365520491938827124460287631818634559488\"},\r\n    {0x1.fffffffffffffp+248, chars_format::fixed, 0,\r\n        \"904625697166532676313020554193482058731040983877654248920575263637269118976\"},\r\n    {0x1.fffffffffffffp+249, chars_format::fixed, 0,\r\n        \"1809251394333065352626041108386964117462081967755308497841150527274538237952\"},\r\n    {0x1.fffffffffffffp+250, chars_format::fixed, 0,\r\n        \"3618502788666130705252082216773928234924163935510616995682301054549076475904\"},\r\n    {0x1.fffffffffffffp+251, chars_format::fixed, 0,\r\n        \"7237005577332261410504164433547856469848327871021233991364602109098152951808\"},\r\n    {0x1.fffffffffffffp+252, chars_format::fixed, 0,\r\n        \"14474011154664522821008328867095712939696655742042467982729204218196305903616\"},\r\n    {0x1.fffffffffffffp+253, chars_format::fixed, 0,\r\n        \"28948022309329045642016657734191425879393311484084935965458408436392611807232\"},\r\n    {0x1.fffffffffffffp+254, chars_format::fixed, 0,\r\n        \"57896044618658091284033315468382851758786622968169871930916816872785223614464\"},\r\n    {0x1.fffffffffffffp+255, chars_format::fixed, 0,\r\n        \"115792089237316182568066630936765703517573245936339743861833633745570447228928\"},\r\n    {0x1.fffffffffffffp+256, chars_format::fixed, 0,\r\n        \"231584178474632365136133261873531407035146491872679487723667267491140894457856\"},\r\n    {0x1.fffffffffffffp+257, chars_format::fixed, 0,\r\n        \"463168356949264730272266523747062814070292983745358975447334534982281788915712\"},\r\n    {0x1.fffffffffffffp+258, chars_format::fixed, 0,\r\n        \"926336713898529460544533047494125628140585967490717950894669069964563577831424\"},\r\n    {0x1.fffffffffffffp+259, chars_format::fixed, 0,\r\n        \"1852673427797058921089066094988251256281171934981435901789338139929127155662848\"},\r\n    {0x1.fffffffffffffp+260, chars_format::fixed, 0,\r\n        \"3705346855594117842178132189976502512562343869962871803578676279858254311325696\"},\r\n    {0x1.fffffffffffffp+261, chars_format::fixed, 0,\r\n        \"7410693711188235684356264379953005025124687739925743607157352559716508622651392\"},\r\n    {0x1.fffffffffffffp+262, chars_format::fixed, 0,\r\n        \"14821387422376471368712528759906010050249375479851487214314705119433017245302784\"},\r\n    {0x1.fffffffffffffp+263, chars_format::fixed, 0,\r\n        \"29642774844752942737425057519812020100498750959702974428629410238866034490605568\"},\r\n    {0x1.fffffffffffffp+264, chars_format::fixed, 0,\r\n        \"59285549689505885474850115039624040200997501919405948857258820477732068981211136\"},\r\n    {0x1.fffffffffffffp+265, chars_format::fixed, 0,\r\n        \"118571099379011770949700230079248080401995003838811897714517640955464137962422272\"},\r\n    {0x1.fffffffffffffp+266, chars_format::fixed, 0,\r\n        \"237142198758023541899400460158496160803990007677623795429035281910928275924844544\"},\r\n    {0x1.fffffffffffffp+267, chars_format::fixed, 0,\r\n        \"474284397516047083798800920316992321607980015355247590858070563821856551849689088\"},\r\n    {0x1.fffffffffffffp+268, chars_format::fixed, 0,\r\n        \"948568795032094167597601840633984643215960030710495181716141127643713103699378176\"},\r\n    {0x1.fffffffffffffp+269, chars_format::fixed, 0,\r\n        \"1897137590064188335195203681267969286431920061420990363432282255287426207398756352\"},\r\n    {0x1.fffffffffffffp+270, chars_format::fixed, 0,\r\n        \"3794275180128376670390407362535938572863840122841980726864564510574852414797512704\"},\r\n    {0x1.fffffffffffffp+271, chars_format::fixed, 0,\r\n        \"7588550360256753340780814725071877145727680245683961453729129021149704829595025408\"},\r\n    {0x1.fffffffffffffp+272, chars_format::fixed, 0,\r\n        \"15177100720513506681561629450143754291455360491367922907458258042299409659190050816\"},\r\n    {0x1.fffffffffffffp+273, chars_format::fixed, 0,\r\n        \"30354201441027013363123258900287508582910720982735845814916516084598819318380101632\"},\r\n    {0x1.fffffffffffffp+274, chars_format::fixed, 0,\r\n        \"60708402882054026726246517800575017165821441965471691629833032169197638636760203264\"},\r\n    {0x1.fffffffffffffp+275, chars_format::fixed, 0,\r\n        \"121416805764108053452493035601150034331642883930943383259666064338395277273520406528\"},\r\n    {0x1.fffffffffffffp+276, chars_format::fixed, 0,\r\n        \"242833611528216106904986071202300068663285767861886766519332128676790554547040813056\"},\r\n    {0x1.fffffffffffffp+277, chars_format::fixed, 0,\r\n        \"485667223056432213809972142404600137326571535723773533038664257353581109094081626112\"},\r\n    {0x1.fffffffffffffp+278, chars_format::fixed, 0,\r\n        \"971334446112864427619944284809200274653143071447547066077328514707162218188163252224\"},\r\n    {0x1.fffffffffffffp+279, chars_format::fixed, 0,\r\n        \"1942668892225728855239888569618400549306286142895094132154657029414324436376326504448\"},\r\n    {0x1.fffffffffffffp+280, chars_format::fixed, 0,\r\n        \"3885337784451457710479777139236801098612572285790188264309314058828648872752653008896\"},\r\n    {0x1.fffffffffffffp+281, chars_format::fixed, 0,\r\n        \"7770675568902915420959554278473602197225144571580376528618628117657297745505306017792\"},\r\n    {0x1.fffffffffffffp+282, chars_format::fixed, 0,\r\n        \"15541351137805830841919108556947204394450289143160753057237256235314595491010612035584\"},\r\n    {0x1.fffffffffffffp+283, chars_format::fixed, 0,\r\n        \"31082702275611661683838217113894408788900578286321506114474512470629190982021224071168\"},\r\n    {0x1.fffffffffffffp+284, chars_format::fixed, 0,\r\n        \"62165404551223323367676434227788817577801156572643012228949024941258381964042448142336\"},\r\n    {0x1.fffffffffffffp+285, chars_format::fixed, 0,\r\n        \"124330809102446646735352868455577635155602313145286024457898049882516763928084896284672\"},\r\n    {0x1.fffffffffffffp+286, chars_format::fixed, 0,\r\n        \"248661618204893293470705736911155270311204626290572048915796099765033527856169792569344\"},\r\n    {0x1.fffffffffffffp+287, chars_format::fixed, 0,\r\n        \"497323236409786586941411473822310540622409252581144097831592199530067055712339585138688\"},\r\n    {0x1.fffffffffffffp+288, chars_format::fixed, 0,\r\n        \"994646472819573173882822947644621081244818505162288195663184399060134111424679170277376\"},\r\n    {0x1.fffffffffffffp+289, chars_format::fixed, 0,\r\n        \"1989292945639146347765645895289242162489637010324576391326368798120268222849358340554752\"},\r\n    {0x1.fffffffffffffp+290, chars_format::fixed, 0,\r\n        \"3978585891278292695531291790578484324979274020649152782652737596240536445698716681109504\"},\r\n    {0x1.fffffffffffffp+291, chars_format::fixed, 0,\r\n        \"7957171782556585391062583581156968649958548041298305565305475192481072891397433362219008\"},\r\n    {0x1.fffffffffffffp+292, chars_format::fixed, 0,\r\n        \"15914343565113170782125167162313937299917096082596611130610950384962145782794866724438016\"},\r\n    {0x1.fffffffffffffp+293, chars_format::fixed, 0,\r\n        \"31828687130226341564250334324627874599834192165193222261221900769924291565589733448876032\"},\r\n    {0x1.fffffffffffffp+294, chars_format::fixed, 0,\r\n        \"63657374260452683128500668649255749199668384330386444522443801539848583131179466897752064\"},\r\n    {0x1.fffffffffffffp+295, chars_format::fixed, 0,\r\n        \"127314748520905366257001337298511498399336768660772889044887603079697166262358933795504128\"},\r\n    {0x1.fffffffffffffp+296, chars_format::fixed, 0,\r\n        \"254629497041810732514002674597022996798673537321545778089775206159394332524717867591008256\"},\r\n    {0x1.fffffffffffffp+297, chars_format::fixed, 0,\r\n        \"509258994083621465028005349194045993597347074643091556179550412318788665049435735182016512\"},\r\n    {0x1.fffffffffffffp+298, chars_format::fixed, 0,\r\n        \"1018517988167242930056010698388091987194694149286183112359100824637577330098871470364033024\"},\r\n    {0x1.fffffffffffffp+299, chars_format::fixed, 0,\r\n        \"2037035976334485860112021396776183974389388298572366224718201649275154660197742940728066048\"},\r\n    {0x1.fffffffffffffp+300, chars_format::fixed, 0,\r\n        \"4074071952668971720224042793552367948778776597144732449436403298550309320395485881456132096\"},\r\n    {0x1.fffffffffffffp+301, chars_format::fixed, 0,\r\n        \"8148143905337943440448085587104735897557553194289464898872806597100618640790971762912264192\"},\r\n    {0x1.fffffffffffffp+302, chars_format::fixed, 0,\r\n        \"16296287810675886880896171174209471795115106388578929797745613194201237281581943525824528384\"},\r\n    {0x1.fffffffffffffp+303, chars_format::fixed, 0,\r\n        \"32592575621351773761792342348418943590230212777157859595491226388402474563163887051649056768\"},\r\n    {0x1.fffffffffffffp+304, chars_format::fixed, 0,\r\n        \"65185151242703547523584684696837887180460425554315719190982452776804949126327774103298113536\"},\r\n    {0x1.fffffffffffffp+305, chars_format::fixed, 0,\r\n        \"130370302485407095047169369393675774360920851108631438381964905553609898252655548206596227072\"},\r\n    {0x1.fffffffffffffp+306, chars_format::fixed, 0,\r\n        \"260740604970814190094338738787351548721841702217262876763929811107219796505311096413192454144\"},\r\n    {0x1.fffffffffffffp+307, chars_format::fixed, 0,\r\n        \"521481209941628380188677477574703097443683404434525753527859622214439593010622192826384908288\"},\r\n    {0x1.fffffffffffffp+308, chars_format::fixed, 0,\r\n        \"1042962419883256760377354955149406194887366808869051507055719244428879186021244385652769816576\"},\r\n    {0x1.fffffffffffffp+309, chars_format::fixed, 0,\r\n        \"2085924839766513520754709910298812389774733617738103014111438488857758372042488771305539633152\"},\r\n    {0x1.fffffffffffffp+310, chars_format::fixed, 0,\r\n        \"4171849679533027041509419820597624779549467235476206028222876977715516744084977542611079266304\"},\r\n    {0x1.fffffffffffffp+311, chars_format::fixed, 0,\r\n        \"8343699359066054083018839641195249559098934470952412056445753955431033488169955085222158532608\"},\r\n    {0x1.fffffffffffffp+312, chars_format::fixed, 0,\r\n        \"16687398718132108166037679282390499118197868941904824112891507910862066976339910170444317065216\"},\r\n    {0x1.fffffffffffffp+313, chars_format::fixed, 0,\r\n        \"33374797436264216332075358564780998236395737883809648225783015821724133952679820340888634130432\"},\r\n    {0x1.fffffffffffffp+314, chars_format::fixed, 0,\r\n        \"66749594872528432664150717129561996472791475767619296451566031643448267905359640681777268260864\"},\r\n    {0x1.fffffffffffffp+315, chars_format::fixed, 0,\r\n        \"133499189745056865328301434259123992945582951535238592903132063286896535810719281363554536521728\"},\r\n    {0x1.fffffffffffffp+316, chars_format::fixed, 0,\r\n        \"266998379490113730656602868518247985891165903070477185806264126573793071621438562727109073043456\"},\r\n    {0x1.fffffffffffffp+317, chars_format::fixed, 0,\r\n        \"533996758980227461313205737036495971782331806140954371612528253147586143242877125454218146086912\"},\r\n    {0x1.fffffffffffffp+318, chars_format::fixed, 0,\r\n        \"1067993517960454922626411474072991943564663612281908743225056506295172286485754250908436292173824\"},\r\n    {0x1.fffffffffffffp+319, chars_format::fixed, 0,\r\n        \"2135987035920909845252822948145983887129327224563817486450113012590344572971508501816872584347648\"},\r\n    {0x1.fffffffffffffp+320, chars_format::fixed, 0,\r\n        \"4271974071841819690505645896291967774258654449127634972900226025180689145943017003633745168695296\"},\r\n    {0x1.fffffffffffffp+321, chars_format::fixed, 0,\r\n        \"8543948143683639381011291792583935548517308898255269945800452050361378291886034007267490337390592\"},\r\n    {0x1.fffffffffffffp+322, chars_format::fixed, 0,\r\n        \"17087896287367278762022583585167871097034617796510539891600904100722756583772068014534980674781184\"},\r\n    {0x1.fffffffffffffp+323, chars_format::fixed, 0,\r\n        \"34175792574734557524045167170335742194069235593021079783201808201445513167544136029069961349562368\"},\r\n    {0x1.fffffffffffffp+324, chars_format::fixed, 0,\r\n        \"68351585149469115048090334340671484388138471186042159566403616402891026335088272058139922699124736\"},\r\n    {0x1.fffffffffffffp+325, chars_format::fixed, 0,\r\n        \"136703170298938230096180668681342968776276942372084319132807232805782052670176544116279845398249472\"},\r\n    {0x1.fffffffffffffp+326, chars_format::fixed, 0,\r\n        \"273406340597876460192361337362685937552553884744168638265614465611564105340353088232559690796498944\"},\r\n    {0x1.fffffffffffffp+327, chars_format::fixed, 0,\r\n        \"546812681195752920384722674725371875105107769488337276531228931223128210680706176465119381592997888\"},\r\n    {0x1.fffffffffffffp+328, chars_format::fixed, 0,\r\n        \"1093625362391505840769445349450743750210215538976674553062457862446256421361412352930238763185995776\"},\r\n    {0x1.fffffffffffffp+329, chars_format::fixed, 0,\r\n        \"2187250724783011681538890698901487500420431077953349106124915724892512842722824705860477526371991552\"},\r\n    {0x1.fffffffffffffp+330, chars_format::fixed, 0,\r\n        \"4374501449566023363077781397802975000840862155906698212249831449785025685445649411720955052743983104\"},\r\n    {0x1.fffffffffffffp+331, chars_format::fixed, 0,\r\n        \"8749002899132046726155562795605950001681724311813396424499662899570051370891298823441910105487966208\"},\r\n    {0x1.fffffffffffffp+332, chars_format::fixed, 0,\r\n        \"17498005798264093452311125591211900003363448623626792848999325799140102741782597646883820210975932416\"},\r\n    {0x1.fffffffffffffp+333, chars_format::fixed, 0,\r\n        \"34996011596528186904622251182423800006726897247253585697998651598280205483565195293767640421951864832\"},\r\n    {0x1.fffffffffffffp+334, chars_format::fixed, 0,\r\n        \"69992023193056373809244502364847600013453794494507171395997303196560410967130390587535280843903729664\"},\r\n    {0x1.fffffffffffffp+335, chars_format::fixed, 0,\r\n        \"139984046386112747618489004729695200026907588989014342791994606393120821934260781175070561687807459328\"},\r\n    {0x1.fffffffffffffp+336, chars_format::fixed, 0,\r\n        \"279968092772225495236978009459390400053815177978028685583989212786241643868521562350141123375614918656\"},\r\n    {0x1.fffffffffffffp+337, chars_format::fixed, 0,\r\n        \"559936185544450990473956018918780800107630355956057371167978425572483287737043124700282246751229837312\"},\r\n    {0x1.fffffffffffffp+338, chars_format::fixed, 0,\r\n        \"1119872371088901980947912037837561600215260711912114742335956851144966575474086249400564493502459674624\"},\r\n    {0x1.fffffffffffffp+339, chars_format::fixed, 0,\r\n        \"2239744742177803961895824075675123200430521423824229484671913702289933150948172498801128987004919349248\"},\r\n    {0x1.fffffffffffffp+340, chars_format::fixed, 0,\r\n        \"4479489484355607923791648151350246400861042847648458969343827404579866301896344997602257974009838698496\"},\r\n    {0x1.fffffffffffffp+341, chars_format::fixed, 0,\r\n        \"8958978968711215847583296302700492801722085695296917938687654809159732603792689995204515948019677396992\"},\r\n    {0x1.fffffffffffffp+342, chars_format::fixed, 0,\r\n        \"17917957937422431695166592605400985603444171390593835877375309618319465207585379990409031896039354793984\"},\r\n    {0x1.fffffffffffffp+343, chars_format::fixed, 0,\r\n        \"35835915874844863390333185210801971206888342781187671754750619236638930415170759980818063792078709587968\"},\r\n    {0x1.fffffffffffffp+344, chars_format::fixed, 0,\r\n        \"71671831749689726780666370421603942413776685562375343509501238473277860830341519961636127584157419175936\"},\r\n    {0x1.fffffffffffffp+345, chars_format::fixed, 0,\r\n        \"14334366349937945356133274084320788482755337112475068701900247694655572166068303992327225516831483835187\"\r\n        \"2\"},\r\n    {0x1.fffffffffffffp+346, chars_format::fixed, 0,\r\n        \"28668732699875890712266548168641576965510674224950137403800495389311144332136607984654451033662967670374\"\r\n        \"4\"},\r\n    {0x1.fffffffffffffp+347, chars_format::fixed, 0,\r\n        \"57337465399751781424533096337283153931021348449900274807600990778622288664273215969308902067325935340748\"\r\n        \"8\"},\r\n    {0x1.fffffffffffffp+348, chars_format::fixed, 0,\r\n        \"114674930799503562849066192674566307862042696899800549615201981557244577328546431938617804134651870681497\"\r\n        \"6\"},\r\n    {0x1.fffffffffffffp+349, chars_format::fixed, 0,\r\n        \"229349861599007125698132385349132615724085393799601099230403963114489154657092863877235608269303741362995\"\r\n        \"2\"},\r\n    {0x1.fffffffffffffp+350, chars_format::fixed, 0,\r\n        \"458699723198014251396264770698265231448170787599202198460807926228978309314185727754471216538607482725990\"\r\n        \"4\"},\r\n    {0x1.fffffffffffffp+351, chars_format::fixed, 0,\r\n        \"917399446396028502792529541396530462896341575198404396921615852457956618628371455508942433077214965451980\"\r\n        \"8\"},\r\n    {0x1.fffffffffffffp+352, chars_format::fixed, 0,\r\n        \"1834798892792057005585059082793060925792683150396808793843231704915913237256742911017884866154429930903961\"\r\n        \"6\"},\r\n    {0x1.fffffffffffffp+353, chars_format::fixed, 0,\r\n        \"3669597785584114011170118165586121851585366300793617587686463409831826474513485822035769732308859861807923\"\r\n        \"2\"},\r\n    {0x1.fffffffffffffp+354, chars_format::fixed, 0,\r\n        \"7339195571168228022340236331172243703170732601587235175372926819663652949026971644071539464617719723615846\"\r\n        \"4\"},\r\n    {0x1.fffffffffffffp+355, chars_format::fixed, 0,\r\n        \"1467839114233645604468047266234448740634146520317447035074585363932730589805394328814307892923543944723169\"\r\n        \"28\"},\r\n    {0x1.fffffffffffffp+356, chars_format::fixed, 0,\r\n        \"2935678228467291208936094532468897481268293040634894070149170727865461179610788657628615785847087889446338\"\r\n        \"56\"},\r\n    {0x1.fffffffffffffp+357, chars_format::fixed, 0,\r\n        \"5871356456934582417872189064937794962536586081269788140298341455730922359221577315257231571694175778892677\"\r\n        \"12\"},\r\n    {0x1.fffffffffffffp+358, chars_format::fixed, 0,\r\n        \"1174271291386916483574437812987558992507317216253957628059668291146184471844315463051446314338835155778535\"\r\n        \"424\"},\r\n    {0x1.fffffffffffffp+359, chars_format::fixed, 0,\r\n        \"2348542582773832967148875625975117985014634432507915256119336582292368943688630926102892628677670311557070\"\r\n        \"848\"},\r\n    {0x1.fffffffffffffp+360, chars_format::fixed, 0,\r\n        \"4697085165547665934297751251950235970029268865015830512238673164584737887377261852205785257355340623114141\"\r\n        \"696\"},\r\n    {0x1.fffffffffffffp+361, chars_format::fixed, 0,\r\n        \"9394170331095331868595502503900471940058537730031661024477346329169475774754523704411570514710681246228283\"\r\n        \"392\"},\r\n    {0x1.fffffffffffffp+362, chars_format::fixed, 0,\r\n        \"1878834066219066373719100500780094388011707546006332204895469265833895154950904740882314102942136249245656\"\r\n        \"6784\"},\r\n    {0x1.fffffffffffffp+363, chars_format::fixed, 0,\r\n        \"3757668132438132747438201001560188776023415092012664409790938531667790309901809481764628205884272498491313\"\r\n        \"3568\"},\r\n    {0x1.fffffffffffffp+364, chars_format::fixed, 0,\r\n        \"7515336264876265494876402003120377552046830184025328819581877063335580619803618963529256411768544996982626\"\r\n        \"7136\"},\r\n    {0x1.fffffffffffffp+365, chars_format::fixed, 0,\r\n        \"1503067252975253098975280400624075510409366036805065763916375412667116123960723792705851282353708999396525\"\r\n        \"34272\"},\r\n    {0x1.fffffffffffffp+366, chars_format::fixed, 0,\r\n        \"3006134505950506197950560801248151020818732073610131527832750825334232247921447585411702564707417998793050\"\r\n        \"68544\"},\r\n    {0x1.fffffffffffffp+367, chars_format::fixed, 0,\r\n        \"6012269011901012395901121602496302041637464147220263055665501650668464495842895170823405129414835997586101\"\r\n        \"37088\"},\r\n    {0x1.fffffffffffffp+368, chars_format::fixed, 0,\r\n        \"1202453802380202479180224320499260408327492829444052611133100330133692899168579034164681025882967199517220\"\r\n        \"274176\"},\r\n    {0x1.fffffffffffffp+369, chars_format::fixed, 0,\r\n        \"2404907604760404958360448640998520816654985658888105222266200660267385798337158068329362051765934399034440\"\r\n        \"548352\"},\r\n    {0x1.fffffffffffffp+370, chars_format::fixed, 0,\r\n        \"4809815209520809916720897281997041633309971317776210444532401320534771596674316136658724103531868798068881\"\r\n        \"096704\"},\r\n    {0x1.fffffffffffffp+371, chars_format::fixed, 0,\r\n        \"9619630419041619833441794563994083266619942635552420889064802641069543193348632273317448207063737596137762\"\r\n        \"193408\"},\r\n    {0x1.fffffffffffffp+372, chars_format::fixed, 0,\r\n        \"1923926083808323966688358912798816653323988527110484177812960528213908638669726454663489641412747519227552\"\r\n        \"4386816\"},\r\n    {0x1.fffffffffffffp+373, chars_format::fixed, 0,\r\n        \"3847852167616647933376717825597633306647977054220968355625921056427817277339452909326979282825495038455104\"\r\n        \"8773632\"},\r\n    {0x1.fffffffffffffp+374, chars_format::fixed, 0,\r\n        \"7695704335233295866753435651195266613295954108441936711251842112855634554678905818653958565650990076910209\"\r\n        \"7547264\"},\r\n    {0x1.fffffffffffffp+375, chars_format::fixed, 0,\r\n        \"1539140867046659173350687130239053322659190821688387342250368422571126910935781163730791713130198015382041\"\r\n        \"95094528\"},\r\n    {0x1.fffffffffffffp+376, chars_format::fixed, 0,\r\n        \"3078281734093318346701374260478106645318381643376774684500736845142253821871562327461583426260396030764083\"\r\n        \"90189056\"},\r\n    {0x1.fffffffffffffp+377, chars_format::fixed, 0,\r\n        \"6156563468186636693402748520956213290636763286753549369001473690284507643743124654923166852520792061528167\"\r\n        \"80378112\"},\r\n    {0x1.fffffffffffffp+378, chars_format::fixed, 0,\r\n        \"1231312693637327338680549704191242658127352657350709873800294738056901528748624930984633370504158412305633\"\r\n        \"560756224\"},\r\n    {0x1.fffffffffffffp+379, chars_format::fixed, 0,\r\n        \"2462625387274654677361099408382485316254705314701419747600589476113803057497249861969266741008316824611267\"\r\n        \"121512448\"},\r\n    {0x1.fffffffffffffp+380, chars_format::fixed, 0,\r\n        \"4925250774549309354722198816764970632509410629402839495201178952227606114994499723938533482016633649222534\"\r\n        \"243024896\"},\r\n    {0x1.fffffffffffffp+381, chars_format::fixed, 0,\r\n        \"9850501549098618709444397633529941265018821258805678990402357904455212229988999447877066964033267298445068\"\r\n        \"486049792\"},\r\n    {0x1.fffffffffffffp+382, chars_format::fixed, 0,\r\n        \"1970100309819723741888879526705988253003764251761135798080471580891042445997799889575413392806653459689013\"\r\n        \"6972099584\"},\r\n    {0x1.fffffffffffffp+383, chars_format::fixed, 0,\r\n        \"3940200619639447483777759053411976506007528503522271596160943161782084891995599779150826785613306919378027\"\r\n        \"3944199168\"},\r\n    {0x1.fffffffffffffp+384, chars_format::fixed, 0,\r\n        \"7880401239278894967555518106823953012015057007044543192321886323564169783991199558301653571226613838756054\"\r\n        \"7888398336\"},\r\n    {0x1.fffffffffffffp+385, chars_format::fixed, 0,\r\n        \"1576080247855778993511103621364790602403011401408908638464377264712833956798239911660330714245322767751210\"\r\n        \"95776796672\"},\r\n    {0x1.fffffffffffffp+386, chars_format::fixed, 0,\r\n        \"3152160495711557987022207242729581204806022802817817276928754529425667913596479823320661428490645535502421\"\r\n        \"91553593344\"},\r\n    {0x1.fffffffffffffp+387, chars_format::fixed, 0,\r\n        \"6304320991423115974044414485459162409612045605635634553857509058851335827192959646641322856981291071004843\"\r\n        \"83107186688\"},\r\n    {0x1.fffffffffffffp+388, chars_format::fixed, 0,\r\n        \"1260864198284623194808882897091832481922409121127126910771501811770267165438591929328264571396258214200968\"\r\n        \"766214373376\"},\r\n    {0x1.fffffffffffffp+389, chars_format::fixed, 0,\r\n        \"2521728396569246389617765794183664963844818242254253821543003623540534330877183858656529142792516428401937\"\r\n        \"532428746752\"},\r\n    {0x1.fffffffffffffp+390, chars_format::fixed, 0,\r\n        \"5043456793138492779235531588367329927689636484508507643086007247081068661754367717313058285585032856803875\"\r\n        \"064857493504\"},\r\n    {0x1.fffffffffffffp+391, chars_format::fixed, 0,\r\n        \"1008691358627698555847106317673465985537927296901701528617201449416213732350873543462611657117006571360775\"\r\n        \"0129714987008\"},\r\n    {0x1.fffffffffffffp+392, chars_format::fixed, 0,\r\n        \"2017382717255397111694212635346931971075854593803403057234402898832427464701747086925223314234013142721550\"\r\n        \"0259429974016\"},\r\n    {0x1.fffffffffffffp+393, chars_format::fixed, 0,\r\n        \"4034765434510794223388425270693863942151709187606806114468805797664854929403494173850446628468026285443100\"\r\n        \"0518859948032\"},\r\n    {0x1.fffffffffffffp+394, chars_format::fixed, 0,\r\n        \"8069530869021588446776850541387727884303418375213612228937611595329709858806988347700893256936052570886200\"\r\n        \"1037719896064\"},\r\n    {0x1.fffffffffffffp+395, chars_format::fixed, 0,\r\n        \"1613906173804317689355370108277545576860683675042722445787522319065941971761397669540178651387210514177240\"\r\n        \"02075439792128\"},\r\n    {0x1.fffffffffffffp+396, chars_format::fixed, 0,\r\n        \"3227812347608635378710740216555091153721367350085444891575044638131883943522795339080357302774421028354480\"\r\n        \"04150879584256\"},\r\n    {0x1.fffffffffffffp+397, chars_format::fixed, 0,\r\n        \"6455624695217270757421480433110182307442734700170889783150089276263767887045590678160714605548842056708960\"\r\n        \"08301759168512\"},\r\n    {0x1.fffffffffffffp+398, chars_format::fixed, 0,\r\n        \"1291124939043454151484296086622036461488546940034177956630017855252753577409118135632142921109768411341792\"\r\n        \"016603518337024\"},\r\n    {0x1.fffffffffffffp+399, chars_format::fixed, 0,\r\n        \"2582249878086908302968592173244072922977093880068355913260035710505507154818236271264285842219536822683584\"\r\n        \"033207036674048\"},\r\n    {0x1.fffffffffffffp+400, chars_format::fixed, 0,\r\n        \"5164499756173816605937184346488145845954187760136711826520071421011014309636472542528571684439073645367168\"\r\n        \"066414073348096\"},\r\n    {0x1.fffffffffffffp+401, chars_format::fixed, 0,\r\n        \"1032899951234763321187436869297629169190837552027342365304014284202202861927294508505714336887814729073433\"\r\n        \"6132828146696192\"},\r\n    {0x1.fffffffffffffp+402, chars_format::fixed, 0,\r\n        \"2065799902469526642374873738595258338381675104054684730608028568404405723854589017011428673775629458146867\"\r\n        \"2265656293392384\"},\r\n    {0x1.fffffffffffffp+403, chars_format::fixed, 0,\r\n        \"4131599804939053284749747477190516676763350208109369461216057136808811447709178034022857347551258916293734\"\r\n        \"4531312586784768\"},\r\n    {0x1.fffffffffffffp+404, chars_format::fixed, 0,\r\n        \"8263199609878106569499494954381033353526700416218738922432114273617622895418356068045714695102517832587468\"\r\n        \"9062625173569536\"},\r\n    {0x1.fffffffffffffp+405, chars_format::fixed, 0,\r\n        \"1652639921975621313899898990876206670705340083243747784486422854723524579083671213609142939020503566517493\"\r\n        \"78125250347139072\"},\r\n    {0x1.fffffffffffffp+406, chars_format::fixed, 0,\r\n        \"3305279843951242627799797981752413341410680166487495568972845709447049158167342427218285878041007133034987\"\r\n        \"56250500694278144\"},\r\n    {0x1.fffffffffffffp+407, chars_format::fixed, 0,\r\n        \"6610559687902485255599595963504826682821360332974991137945691418894098316334684854436571756082014266069975\"\r\n        \"12501001388556288\"},\r\n    {0x1.fffffffffffffp+408, chars_format::fixed, 0,\r\n        \"1322111937580497051119919192700965336564272066594998227589138283778819663266936970887314351216402853213995\"\r\n        \"025002002777112576\"},\r\n    {0x1.fffffffffffffp+409, chars_format::fixed, 0,\r\n        \"2644223875160994102239838385401930673128544133189996455178276567557639326533873941774628702432805706427990\"\r\n        \"050004005554225152\"},\r\n    {0x1.fffffffffffffp+410, chars_format::fixed, 0,\r\n        \"5288447750321988204479676770803861346257088266379992910356553135115278653067747883549257404865611412855980\"\r\n        \"100008011108450304\"},\r\n    {0x1.fffffffffffffp+411, chars_format::fixed, 0,\r\n        \"1057689550064397640895935354160772269251417653275998582071310627023055730613549576709851480973122282571196\"\r\n        \"0200016022216900608\"},\r\n    {0x1.fffffffffffffp+412, chars_format::fixed, 0,\r\n        \"2115379100128795281791870708321544538502835306551997164142621254046111461227099153419702961946244565142392\"\r\n        \"0400032044433801216\"},\r\n    {0x1.fffffffffffffp+413, chars_format::fixed, 0,\r\n        \"4230758200257590563583741416643089077005670613103994328285242508092222922454198306839405923892489130284784\"\r\n        \"0800064088867602432\"},\r\n    {0x1.fffffffffffffp+414, chars_format::fixed, 0,\r\n        \"8461516400515181127167482833286178154011341226207988656570485016184445844908396613678811847784978260569568\"\r\n        \"1600128177735204864\"},\r\n    {0x1.fffffffffffffp+415, chars_format::fixed, 0,\r\n        \"1692303280103036225433496566657235630802268245241597731314097003236889168981679322735762369556995652113913\"\r\n        \"63200256355470409728\"},\r\n    {0x1.fffffffffffffp+416, chars_format::fixed, 0,\r\n        \"3384606560206072450866993133314471261604536490483195462628194006473778337963358645471524739113991304227827\"\r\n        \"26400512710940819456\"},\r\n    {0x1.fffffffffffffp+417, chars_format::fixed, 0,\r\n        \"6769213120412144901733986266628942523209072980966390925256388012947556675926717290943049478227982608455654\"\r\n        \"52801025421881638912\"},\r\n    {0x1.fffffffffffffp+418, chars_format::fixed, 0,\r\n        \"1353842624082428980346797253325788504641814596193278185051277602589511335185343458188609895645596521691130\"\r\n        \"905602050843763277824\"},\r\n    {0x1.fffffffffffffp+419, chars_format::fixed, 0,\r\n        \"2707685248164857960693594506651577009283629192386556370102555205179022670370686916377219791291193043382261\"\r\n        \"811204101687526555648\"},\r\n    {0x1.fffffffffffffp+420, chars_format::fixed, 0,\r\n        \"5415370496329715921387189013303154018567258384773112740205110410358045340741373832754439582582386086764523\"\r\n        \"622408203375053111296\"},\r\n    {0x1.fffffffffffffp+421, chars_format::fixed, 0,\r\n        \"1083074099265943184277437802660630803713451676954622548041022082071609068148274766550887916516477217352904\"\r\n        \"7244816406750106222592\"},\r\n    {0x1.fffffffffffffp+422, chars_format::fixed, 0,\r\n        \"2166148198531886368554875605321261607426903353909245096082044164143218136296549533101775833032954434705809\"\r\n        \"4489632813500212445184\"},\r\n    {0x1.fffffffffffffp+423, chars_format::fixed, 0,\r\n        \"4332296397063772737109751210642523214853806707818490192164088328286436272593099066203551666065908869411618\"\r\n        \"8979265627000424890368\"},\r\n    {0x1.fffffffffffffp+424, chars_format::fixed, 0,\r\n        \"8664592794127545474219502421285046429707613415636980384328176656572872545186198132407103332131817738823237\"\r\n        \"7958531254000849780736\"},\r\n    {0x1.fffffffffffffp+425, chars_format::fixed, 0,\r\n        \"1732918558825509094843900484257009285941522683127396076865635331314574509037239626481420666426363547764647\"\r\n        \"55917062508001699561472\"},\r\n    {0x1.fffffffffffffp+426, chars_format::fixed, 0,\r\n        \"3465837117651018189687800968514018571883045366254792153731270662629149018074479252962841332852727095529295\"\r\n        \"11834125016003399122944\"},\r\n    {0x1.fffffffffffffp+427, chars_format::fixed, 0,\r\n        \"6931674235302036379375601937028037143766090732509584307462541325258298036148958505925682665705454191058590\"\r\n        \"23668250032006798245888\"},\r\n    {0x1.fffffffffffffp+428, chars_format::fixed, 0,\r\n        \"1386334847060407275875120387405607428753218146501916861492508265051659607229791701185136533141090838211718\"\r\n        \"047336500064013596491776\"},\r\n    {0x1.fffffffffffffp+429, chars_format::fixed, 0,\r\n        \"2772669694120814551750240774811214857506436293003833722985016530103319214459583402370273066282181676423436\"\r\n        \"094673000128027192983552\"},\r\n    {0x1.fffffffffffffp+430, chars_format::fixed, 0,\r\n        \"5545339388241629103500481549622429715012872586007667445970033060206638428919166804740546132564363352846872\"\r\n        \"189346000256054385967104\"},\r\n    {0x1.fffffffffffffp+431, chars_format::fixed, 0,\r\n        \"1109067877648325820700096309924485943002574517201533489194006612041327685783833360948109226512872670569374\"\r\n        \"4378692000512108771934208\"},\r\n    {0x1.fffffffffffffp+432, chars_format::fixed, 0,\r\n        \"2218135755296651641400192619848971886005149034403066978388013224082655371567666721896218453025745341138748\"\r\n        \"8757384001024217543868416\"},\r\n    {0x1.fffffffffffffp+433, chars_format::fixed, 0,\r\n        \"4436271510593303282800385239697943772010298068806133956776026448165310743135333443792436906051490682277497\"\r\n        \"7514768002048435087736832\"},\r\n    {0x1.fffffffffffffp+434, chars_format::fixed, 0,\r\n        \"8872543021186606565600770479395887544020596137612267913552052896330621486270666887584873812102981364554995\"\r\n        \"5029536004096870175473664\"},\r\n    {0x1.fffffffffffffp+435, chars_format::fixed, 0,\r\n        \"1774508604237321313120154095879177508804119227522453582710410579266124297254133377516974762420596272910999\"\r\n        \"10059072008193740350947328\"},\r\n    {0x1.fffffffffffffp+436, chars_format::fixed, 0,\r\n        \"3549017208474642626240308191758355017608238455044907165420821158532248594508266755033949524841192545821998\"\r\n        \"20118144016387480701894656\"},\r\n    {0x1.fffffffffffffp+437, chars_format::fixed, 0,\r\n        \"7098034416949285252480616383516710035216476910089814330841642317064497189016533510067899049682385091643996\"\r\n        \"40236288032774961403789312\"},\r\n    {0x1.fffffffffffffp+438, chars_format::fixed, 0,\r\n        \"1419606883389857050496123276703342007043295382017962866168328463412899437803306702013579809936477018328799\"\r\n        \"280472576065549922807578624\"},\r\n    {0x1.fffffffffffffp+439, chars_format::fixed, 0,\r\n        \"2839213766779714100992246553406684014086590764035925732336656926825798875606613404027159619872954036657598\"\r\n        \"560945152131099845615157248\"},\r\n    {0x1.fffffffffffffp+440, chars_format::fixed, 0,\r\n        \"5678427533559428201984493106813368028173181528071851464673313853651597751213226808054319239745908073315197\"\r\n        \"121890304262199691230314496\"},\r\n    {0x1.fffffffffffffp+441, chars_format::fixed, 0,\r\n        \"1135685506711885640396898621362673605634636305614370292934662770730319550242645361610863847949181614663039\"\r\n        \"4243780608524399382460628992\"},\r\n    {0x1.fffffffffffffp+442, chars_format::fixed, 0,\r\n        \"2271371013423771280793797242725347211269272611228740585869325541460639100485290723221727695898363229326078\"\r\n        \"8487561217048798764921257984\"},\r\n    {0x1.fffffffffffffp+443, chars_format::fixed, 0,\r\n        \"4542742026847542561587594485450694422538545222457481171738651082921278200970581446443455391796726458652157\"\r\n        \"6975122434097597529842515968\"},\r\n    {0x1.fffffffffffffp+444, chars_format::fixed, 0,\r\n        \"9085484053695085123175188970901388845077090444914962343477302165842556401941162892886910783593452917304315\"\r\n        \"3950244868195195059685031936\"},\r\n    {0x1.fffffffffffffp+445, chars_format::fixed, 0,\r\n        \"1817096810739017024635037794180277769015418088982992468695460433168511280388232578577382156718690583460863\"\r\n        \"07900489736390390119370063872\"},\r\n    {0x1.fffffffffffffp+446, chars_format::fixed, 0,\r\n        \"3634193621478034049270075588360555538030836177965984937390920866337022560776465157154764313437381166921726\"\r\n        \"15800979472780780238740127744\"},\r\n    {0x1.fffffffffffffp+447, chars_format::fixed, 0,\r\n        \"7268387242956068098540151176721111076061672355931969874781841732674045121552930314309528626874762333843452\"\r\n        \"31601958945561560477480255488\"},\r\n    {0x1.fffffffffffffp+448, chars_format::fixed, 0,\r\n        \"1453677448591213619708030235344222215212334471186393974956368346534809024310586062861905725374952466768690\"\r\n        \"463203917891123120954960510976\"},\r\n    {0x1.fffffffffffffp+449, chars_format::fixed, 0,\r\n        \"2907354897182427239416060470688444430424668942372787949912736693069618048621172125723811450749904933537380\"\r\n        \"926407835782246241909921021952\"},\r\n    {0x1.fffffffffffffp+450, chars_format::fixed, 0,\r\n        \"5814709794364854478832120941376888860849337884745575899825473386139236097242344251447622901499809867074761\"\r\n        \"852815671564492483819842043904\"},\r\n    {0x1.fffffffffffffp+451, chars_format::fixed, 0,\r\n        \"1162941958872970895766424188275377772169867576949115179965094677227847219448468850289524580299961973414952\"\r\n        \"3705631343128984967639684087808\"},\r\n    {0x1.fffffffffffffp+452, chars_format::fixed, 0,\r\n        \"2325883917745941791532848376550755544339735153898230359930189354455694438896937700579049160599923946829904\"\r\n        \"7411262686257969935279368175616\"},\r\n    {0x1.fffffffffffffp+453, chars_format::fixed, 0,\r\n        \"4651767835491883583065696753101511088679470307796460719860378708911388877793875401158098321199847893659809\"\r\n        \"4822525372515939870558736351232\"},\r\n    {0x1.fffffffffffffp+454, chars_format::fixed, 0,\r\n        \"9303535670983767166131393506203022177358940615592921439720757417822777755587750802316196642399695787319618\"\r\n        \"9645050745031879741117472702464\"},\r\n    {0x1.fffffffffffffp+455, chars_format::fixed, 0,\r\n        \"1860707134196753433226278701240604435471788123118584287944151483564555551117550160463239328479939157463923\"\r\n        \"79290101490063759482234945404928\"},\r\n    {0x1.fffffffffffffp+456, chars_format::fixed, 0,\r\n        \"3721414268393506866452557402481208870943576246237168575888302967129111102235100320926478656959878314927847\"\r\n        \"58580202980127518964469890809856\"},\r\n    {0x1.fffffffffffffp+457, chars_format::fixed, 0,\r\n        \"7442828536787013732905114804962417741887152492474337151776605934258222204470200641852957313919756629855695\"\r\n        \"17160405960255037928939781619712\"},\r\n    {0x1.fffffffffffffp+458, chars_format::fixed, 0,\r\n        \"1488565707357402746581022960992483548377430498494867430355321186851644440894040128370591462783951325971139\"\r\n        \"034320811920510075857879563239424\"},\r\n    {0x1.fffffffffffffp+459, chars_format::fixed, 0,\r\n        \"2977131414714805493162045921984967096754860996989734860710642373703288881788080256741182925567902651942278\"\r\n        \"068641623841020151715759126478848\"},\r\n    {0x1.fffffffffffffp+460, chars_format::fixed, 0,\r\n        \"5954262829429610986324091843969934193509721993979469721421284747406577763576160513482365851135805303884556\"\r\n        \"137283247682040303431518252957696\"},\r\n    {0x1.fffffffffffffp+461, chars_format::fixed, 0,\r\n        \"1190852565885922197264818368793986838701944398795893944284256949481315552715232102696473170227161060776911\"\r\n        \"2274566495364080606863036505915392\"},\r\n    {0x1.fffffffffffffp+462, chars_format::fixed, 0,\r\n        \"2381705131771844394529636737587973677403888797591787888568513898962631105430464205392946340454322121553822\"\r\n        \"4549132990728161213726073011830784\"},\r\n    {0x1.fffffffffffffp+463, chars_format::fixed, 0,\r\n        \"4763410263543688789059273475175947354807777595183575777137027797925262210860928410785892680908644243107644\"\r\n        \"9098265981456322427452146023661568\"},\r\n    {0x1.fffffffffffffp+464, chars_format::fixed, 0,\r\n        \"9526820527087377578118546950351894709615555190367151554274055595850524421721856821571785361817288486215289\"\r\n        \"8196531962912644854904292047323136\"},\r\n    {0x1.fffffffffffffp+465, chars_format::fixed, 0,\r\n        \"1905364105417475515623709390070378941923111038073430310854811119170104884344371364314357072363457697243057\"\r\n        \"96393063925825289709808584094646272\"},\r\n    {0x1.fffffffffffffp+466, chars_format::fixed, 0,\r\n        \"3810728210834951031247418780140757883846222076146860621709622238340209768688742728628714144726915394486115\"\r\n        \"92786127851650579419617168189292544\"},\r\n    {0x1.fffffffffffffp+467, chars_format::fixed, 0,\r\n        \"7621456421669902062494837560281515767692444152293721243419244476680419537377485457257428289453830788972231\"\r\n        \"85572255703301158839234336378585088\"},\r\n    {0x1.fffffffffffffp+468, chars_format::fixed, 0,\r\n        \"1524291284333980412498967512056303153538488830458744248683848895336083907475497091451485657890766157794446\"\r\n        \"371144511406602317678468672757170176\"},\r\n    {0x1.fffffffffffffp+469, chars_format::fixed, 0,\r\n        \"3048582568667960824997935024112606307076977660917488497367697790672167814950994182902971315781532315588892\"\r\n        \"742289022813204635356937345514340352\"},\r\n    {0x1.fffffffffffffp+470, chars_format::fixed, 0,\r\n        \"6097165137335921649995870048225212614153955321834976994735395581344335629901988365805942631563064631177785\"\r\n        \"484578045626409270713874691028680704\"},\r\n    {0x1.fffffffffffffp+471, chars_format::fixed, 0,\r\n        \"1219433027467184329999174009645042522830791064366995398947079116268867125980397673161188526312612926235557\"\r\n        \"0969156091252818541427749382057361408\"},\r\n    {0x1.fffffffffffffp+472, chars_format::fixed, 0,\r\n        \"2438866054934368659998348019290085045661582128733990797894158232537734251960795346322377052625225852471114\"\r\n        \"1938312182505637082855498764114722816\"},\r\n    {0x1.fffffffffffffp+473, chars_format::fixed, 0,\r\n        \"4877732109868737319996696038580170091323164257467981595788316465075468503921590692644754105250451704942228\"\r\n        \"3876624365011274165710997528229445632\"},\r\n    {0x1.fffffffffffffp+474, chars_format::fixed, 0,\r\n        \"9755464219737474639993392077160340182646328514935963191576632930150937007843181385289508210500903409884456\"\r\n        \"7753248730022548331421995056458891264\"},\r\n    {0x1.fffffffffffffp+475, chars_format::fixed, 0,\r\n        \"1951092843947494927998678415432068036529265702987192638315326586030187401568636277057901642100180681976891\"\r\n        \"35506497460045096662843990112917782528\"},\r\n    {0x1.fffffffffffffp+476, chars_format::fixed, 0,\r\n        \"3902185687894989855997356830864136073058531405974385276630653172060374803137272554115803284200361363953782\"\r\n        \"71012994920090193325687980225835565056\"},\r\n    {0x1.fffffffffffffp+477, chars_format::fixed, 0,\r\n        \"7804371375789979711994713661728272146117062811948770553261306344120749606274545108231606568400722727907565\"\r\n        \"42025989840180386651375960451671130112\"},\r\n    {0x1.fffffffffffffp+478, chars_format::fixed, 0,\r\n        \"1560874275157995942398942732345654429223412562389754110652261268824149921254909021646321313680144545581513\"\r\n        \"084051979680360773302751920903342260224\"},\r\n    {0x1.fffffffffffffp+479, chars_format::fixed, 0,\r\n        \"3121748550315991884797885464691308858446825124779508221304522537648299842509818043292642627360289091163026\"\r\n        \"168103959360721546605503841806684520448\"},\r\n    {0x1.fffffffffffffp+480, chars_format::fixed, 0,\r\n        \"6243497100631983769595770929382617716893650249559016442609045075296599685019636086585285254720578182326052\"\r\n        \"336207918721443093211007683613369040896\"},\r\n    {0x1.fffffffffffffp+481, chars_format::fixed, 0,\r\n        \"1248699420126396753919154185876523543378730049911803288521809015059319937003927217317057050944115636465210\"\r\n        \"4672415837442886186422015367226738081792\"},\r\n    {0x1.fffffffffffffp+482, chars_format::fixed, 0,\r\n        \"2497398840252793507838308371753047086757460099823606577043618030118639874007854434634114101888231272930420\"\r\n        \"9344831674885772372844030734453476163584\"},\r\n    {0x1.fffffffffffffp+483, chars_format::fixed, 0,\r\n        \"4994797680505587015676616743506094173514920199647213154087236060237279748015708869268228203776462545860841\"\r\n        \"8689663349771544745688061468906952327168\"},\r\n    {0x1.fffffffffffffp+484, chars_format::fixed, 0,\r\n        \"9989595361011174031353233487012188347029840399294426308174472120474559496031417738536456407552925091721683\"\r\n        \"7379326699543089491376122937813904654336\"},\r\n    {0x1.fffffffffffffp+485, chars_format::fixed, 0,\r\n        \"1997919072202234806270646697402437669405968079858885261634894424094911899206283547707291281510585018344336\"\r\n        \"74758653399086178982752245875627809308672\"},\r\n    {0x1.fffffffffffffp+486, chars_format::fixed, 0,\r\n        \"3995838144404469612541293394804875338811936159717770523269788848189823798412567095414582563021170036688673\"\r\n        \"49517306798172357965504491751255618617344\"},\r\n    {0x1.fffffffffffffp+487, chars_format::fixed, 0,\r\n        \"7991676288808939225082586789609750677623872319435541046539577696379647596825134190829165126042340073377346\"\r\n        \"99034613596344715931008983502511237234688\"},\r\n    {0x1.fffffffffffffp+488, chars_format::fixed, 0,\r\n        \"1598335257761787845016517357921950135524774463887108209307915539275929519365026838165833025208468014675469\"\r\n        \"398069227192689431862017967005022474469376\"},\r\n    {0x1.fffffffffffffp+489, chars_format::fixed, 0,\r\n        \"3196670515523575690033034715843900271049548927774216418615831078551859038730053676331666050416936029350938\"\r\n        \"796138454385378863724035934010044948938752\"},\r\n    {0x1.fffffffffffffp+490, chars_format::fixed, 0,\r\n        \"6393341031047151380066069431687800542099097855548432837231662157103718077460107352663332100833872058701877\"\r\n        \"592276908770757727448071868020089897877504\"},\r\n    {0x1.fffffffffffffp+491, chars_format::fixed, 0,\r\n        \"1278668206209430276013213886337560108419819571109686567446332431420743615492021470532666420166774411740375\"\r\n        \"5184553817541515454896143736040179795755008\"},\r\n    {0x1.fffffffffffffp+492, chars_format::fixed, 0,\r\n        \"2557336412418860552026427772675120216839639142219373134892664862841487230984042941065332840333548823480751\"\r\n        \"0369107635083030909792287472080359591510016\"},\r\n    {0x1.fffffffffffffp+493, chars_format::fixed, 0,\r\n        \"5114672824837721104052855545350240433679278284438746269785329725682974461968085882130665680667097646961502\"\r\n        \"0738215270166061819584574944160719183020032\"},\r\n    {0x1.fffffffffffffp+494, chars_format::fixed, 0,\r\n        \"1022934564967544220810571109070048086735855656887749253957065945136594892393617176426133136133419529392300\"\r\n        \"41476430540332123639169149888321438366040064\"},\r\n    {0x1.fffffffffffffp+495, chars_format::fixed, 0,\r\n        \"2045869129935088441621142218140096173471711313775498507914131890273189784787234352852266272266839058784600\"\r\n        \"82952861080664247278338299776642876732080128\"},\r\n    {0x1.fffffffffffffp+496, chars_format::fixed, 0,\r\n        \"4091738259870176883242284436280192346943422627550997015828263780546379569574468705704532544533678117569201\"\r\n        \"65905722161328494556676599553285753464160256\"},\r\n    {0x1.fffffffffffffp+497, chars_format::fixed, 0,\r\n        \"8183476519740353766484568872560384693886845255101994031656527561092759139148937411409065089067356235138403\"\r\n        \"31811444322656989113353199106571506928320512\"},\r\n    {0x1.fffffffffffffp+498, chars_format::fixed, 0,\r\n        \"1636695303948070753296913774512076938777369051020398806331305512218551827829787482281813017813471247027680\"\r\n        \"663622888645313978226706398213143013856641024\"},\r\n    {0x1.fffffffffffffp+499, chars_format::fixed, 0,\r\n        \"3273390607896141506593827549024153877554738102040797612662611024437103655659574964563626035626942494055361\"\r\n        \"327245777290627956453412796426286027713282048\"},\r\n    {0x1.fffffffffffffp+500, chars_format::fixed, 0,\r\n        \"6546781215792283013187655098048307755109476204081595225325222048874207311319149929127252071253884988110722\"\r\n        \"654491554581255912906825592852572055426564096\"},\r\n    {0x1.fffffffffffffp+501, chars_format::fixed, 0,\r\n        \"1309356243158456602637531019609661551021895240816319045065044409774841462263829985825450414250776997622144\"\r\n        \"5308983109162511825813651185705144110853128192\"},\r\n    {0x1.fffffffffffffp+502, chars_format::fixed, 0,\r\n        \"2618712486316913205275062039219323102043790481632638090130088819549682924527659971650900828501553995244289\"\r\n        \"0617966218325023651627302371410288221706256384\"},\r\n    {0x1.fffffffffffffp+503, chars_format::fixed, 0,\r\n        \"5237424972633826410550124078438646204087580963265276180260177639099365849055319943301801657003107990488578\"\r\n        \"1235932436650047303254604742820576443412512768\"},\r\n    {0x1.fffffffffffffp+504, chars_format::fixed, 0,\r\n        \"1047484994526765282110024815687729240817516192653055236052035527819873169811063988660360331400621598097715\"\r\n        \"62471864873300094606509209485641152886825025536\"},\r\n    {0x1.fffffffffffffp+505, chars_format::fixed, 0,\r\n        \"2094969989053530564220049631375458481635032385306110472104071055639746339622127977320720662801243196195431\"\r\n        \"24943729746600189213018418971282305773650051072\"},\r\n    {0x1.fffffffffffffp+506, chars_format::fixed, 0,\r\n        \"4189939978107061128440099262750916963270064770612220944208142111279492679244255954641441325602486392390862\"\r\n        \"49887459493200378426036837942564611547300102144\"},\r\n    {0x1.fffffffffffffp+507, chars_format::fixed, 0,\r\n        \"8379879956214122256880198525501833926540129541224441888416284222558985358488511909282882651204972784781724\"\r\n        \"99774918986400756852073675885129223094600204288\"},\r\n    {0x1.fffffffffffffp+508, chars_format::fixed, 0,\r\n        \"1675975991242824451376039705100366785308025908244888377683256844511797071697702381856576530240994556956344\"\r\n        \"999549837972801513704147351770258446189200408576\"},\r\n    {0x1.fffffffffffffp+509, chars_format::fixed, 0,\r\n        \"3351951982485648902752079410200733570616051816489776755366513689023594143395404763713153060481989113912689\"\r\n        \"999099675945603027408294703540516892378400817152\"},\r\n    {0x1.fffffffffffffp+510, chars_format::fixed, 0,\r\n        \"6703903964971297805504158820401467141232103632979553510733027378047188286790809527426306120963978227825379\"\r\n        \"998199351891206054816589407081033784756801634304\"},\r\n    {0x1.fffffffffffffp+511, chars_format::fixed, 0,\r\n        \"1340780792994259561100831764080293428246420726595910702146605475609437657358161905485261224192795645565075\"\r\n        \"9996398703782412109633178814162067569513603268608\"},\r\n    {0x1.fffffffffffffp+512, chars_format::fixed, 0,\r\n        \"2681561585988519122201663528160586856492841453191821404293210951218875314716323810970522448385591291130151\"\r\n        \"9992797407564824219266357628324135139027206537216\"},\r\n    {0x1.fffffffffffffp+513, chars_format::fixed, 0,\r\n        \"5363123171977038244403327056321173712985682906383642808586421902437750629432647621941044896771182582260303\"\r\n        \"9985594815129648438532715256648270278054413074432\"},\r\n    {0x1.fffffffffffffp+514, chars_format::fixed, 0,\r\n        \"1072624634395407648880665411264234742597136581276728561717284380487550125886529524388208979354236516452060\"\r\n        \"79971189630259296877065430513296540556108826148864\"},\r\n    {0x1.fffffffffffffp+515, chars_format::fixed, 0,\r\n        \"2145249268790815297761330822528469485194273162553457123434568760975100251773059048776417958708473032904121\"\r\n        \"59942379260518593754130861026593081112217652297728\"},\r\n    {0x1.fffffffffffffp+516, chars_format::fixed, 0,\r\n        \"4290498537581630595522661645056938970388546325106914246869137521950200503546118097552835917416946065808243\"\r\n        \"19884758521037187508261722053186162224435304595456\"},\r\n    {0x1.fffffffffffffp+517, chars_format::fixed, 0,\r\n        \"8580997075163261191045323290113877940777092650213828493738275043900401007092236195105671834833892131616486\"\r\n        \"39769517042074375016523444106372324448870609190912\"},\r\n    {0x1.fffffffffffffp+518, chars_format::fixed, 0,\r\n        \"1716199415032652238209064658022775588155418530042765698747655008780080201418447239021134366966778426323297\"\r\n        \"279539034084148750033046888212744648897741218381824\"},\r\n    {0x1.fffffffffffffp+519, chars_format::fixed, 0,\r\n        \"3432398830065304476418129316045551176310837060085531397495310017560160402836894478042268733933556852646594\"\r\n        \"559078068168297500066093776425489297795482436763648\"},\r\n    {0x1.fffffffffffffp+520, chars_format::fixed, 0,\r\n        \"6864797660130608952836258632091102352621674120171062794990620035120320805673788956084537467867113705293189\"\r\n        \"118156136336595000132187552850978595590964873527296\"},\r\n    {0x1.fffffffffffffp+521, chars_format::fixed, 0,\r\n        \"1372959532026121790567251726418220470524334824034212558998124007024064161134757791216907493573422741058637\"\r\n        \"8236312272673190000264375105701957191181929747054592\"},\r\n    {0x1.fffffffffffffp+522, chars_format::fixed, 0,\r\n        \"2745919064052243581134503452836440941048669648068425117996248014048128322269515582433814987146845482117275\"\r\n        \"6472624545346380000528750211403914382363859494109184\"},\r\n    {0x1.fffffffffffffp+523, chars_format::fixed, 0,\r\n        \"5491838128104487162269006905672881882097339296136850235992496028096256644539031164867629974293690964234551\"\r\n        \"2945249090692760001057500422807828764727718988218368\"},\r\n    {0x1.fffffffffffffp+524, chars_format::fixed, 0,\r\n        \"1098367625620897432453801381134576376419467859227370047198499205619251328907806232973525994858738192846910\"\r\n        \"25890498181385520002115000845615657529455437976436736\"},\r\n    {0x1.fffffffffffffp+525, chars_format::fixed, 0,\r\n        \"2196735251241794864907602762269152752838935718454740094396998411238502657815612465947051989717476385693820\"\r\n        \"51780996362771040004230001691231315058910875952873472\"},\r\n    {0x1.fffffffffffffp+526, chars_format::fixed, 0,\r\n        \"4393470502483589729815205524538305505677871436909480188793996822477005315631224931894103979434952771387641\"\r\n        \"03561992725542080008460003382462630117821751905746944\"},\r\n    {0x1.fffffffffffffp+527, chars_format::fixed, 0,\r\n        \"8786941004967179459630411049076611011355742873818960377587993644954010631262449863788207958869905542775282\"\r\n        \"07123985451084160016920006764925260235643503811493888\"},\r\n    {0x1.fffffffffffffp+528, chars_format::fixed, 0,\r\n        \"1757388200993435891926082209815322202271148574763792075517598728990802126252489972757641591773981108555056\"\r\n        \"414247970902168320033840013529850520471287007622987776\"},\r\n    {0x1.fffffffffffffp+529, chars_format::fixed, 0,\r\n        \"3514776401986871783852164419630644404542297149527584151035197457981604252504979945515283183547962217110112\"\r\n        \"828495941804336640067680027059701040942574015245975552\"},\r\n    {0x1.fffffffffffffp+530, chars_format::fixed, 0,\r\n        \"7029552803973743567704328839261288809084594299055168302070394915963208505009959891030566367095924434220225\"\r\n        \"656991883608673280135360054119402081885148030491951104\"},\r\n    {0x1.fffffffffffffp+531, chars_format::fixed, 0,\r\n        \"1405910560794748713540865767852257761816918859811033660414078983192641701001991978206113273419184886844045\"\r\n        \"1313983767217346560270720108238804163770296060983902208\"},\r\n    {0x1.fffffffffffffp+532, chars_format::fixed, 0,\r\n        \"2811821121589497427081731535704515523633837719622067320828157966385283402003983956412226546838369773688090\"\r\n        \"2627967534434693120541440216477608327540592121967804416\"},\r\n    {0x1.fffffffffffffp+533, chars_format::fixed, 0,\r\n        \"5623642243178994854163463071409031047267675439244134641656315932770566804007967912824453093676739547376180\"\r\n        \"5255935068869386241082880432955216655081184243935608832\"},\r\n    {0x1.fffffffffffffp+534, chars_format::fixed, 0,\r\n        \"1124728448635798970832692614281806209453535087848826928331263186554113360801593582564890618735347909475236\"\r\n        \"10511870137738772482165760865910433310162368487871217664\"},\r\n    {0x1.fffffffffffffp+535, chars_format::fixed, 0,\r\n        \"2249456897271597941665385228563612418907070175697653856662526373108226721603187165129781237470695818950472\"\r\n        \"21023740275477544964331521731820866620324736975742435328\"},\r\n    {0x1.fffffffffffffp+536, chars_format::fixed, 0,\r\n        \"4498913794543195883330770457127224837814140351395307713325052746216453443206374330259562474941391637900944\"\r\n        \"42047480550955089928663043463641733240649473951484870656\"},\r\n    {0x1.fffffffffffffp+537, chars_format::fixed, 0,\r\n        \"8997827589086391766661540914254449675628280702790615426650105492432906886412748660519124949882783275801888\"\r\n        \"84094961101910179857326086927283466481298947902969741312\"},\r\n    {0x1.fffffffffffffp+538, chars_format::fixed, 0,\r\n        \"1799565517817278353332308182850889935125656140558123085330021098486581377282549732103824989976556655160377\"\r\n        \"768189922203820359714652173854566932962597895805939482624\"},\r\n    {0x1.fffffffffffffp+539, chars_format::fixed, 0,\r\n        \"3599131035634556706664616365701779870251312281116246170660042196973162754565099464207649979953113310320755\"\r\n        \"536379844407640719429304347709133865925195791611878965248\"},\r\n    {0x1.fffffffffffffp+540, chars_format::fixed, 0,\r\n        \"7198262071269113413329232731403559740502624562232492341320084393946325509130198928415299959906226620641511\"\r\n        \"072759688815281438858608695418267731850391583223757930496\"},\r\n    {0x1.fffffffffffffp+541, chars_format::fixed, 0,\r\n        \"1439652414253822682665846546280711948100524912446498468264016878789265101826039785683059991981245324128302\"\r\n        \"2145519377630562877717217390836535463700783166447515860992\"},\r\n    {0x1.fffffffffffffp+542, chars_format::fixed, 0,\r\n        \"2879304828507645365331693092561423896201049824892996936528033757578530203652079571366119983962490648256604\"\r\n        \"4291038755261125755434434781673070927401566332895031721984\"},\r\n    {0x1.fffffffffffffp+543, chars_format::fixed, 0,\r\n        \"5758609657015290730663386185122847792402099649785993873056067515157060407304159142732239967924981296513208\"\r\n        \"8582077510522251510868869563346141854803132665790063443968\"},\r\n    {0x1.fffffffffffffp+544, chars_format::fixed, 0,\r\n        \"1151721931403058146132677237024569558480419929957198774611213503031412081460831828546447993584996259302641\"\r\n        \"77164155021044503021737739126692283709606265331580126887936\"},\r\n    {0x1.fffffffffffffp+545, chars_format::fixed, 0,\r\n        \"2303443862806116292265354474049139116960839859914397549222427006062824162921663657092895987169992518605283\"\r\n        \"54328310042089006043475478253384567419212530663160253775872\"},\r\n    {0x1.fffffffffffffp+546, chars_format::fixed, 0,\r\n        \"4606887725612232584530708948098278233921679719828795098444854012125648325843327314185791974339985037210567\"\r\n        \"08656620084178012086950956506769134838425061326320507551744\"},\r\n    {0x1.fffffffffffffp+547, chars_format::fixed, 0,\r\n        \"9213775451224465169061417896196556467843359439657590196889708024251296651686654628371583948679970074421134\"\r\n        \"17313240168356024173901913013538269676850122652641015103488\"},\r\n    {0x1.fffffffffffffp+548, chars_format::fixed, 0,\r\n        \"1842755090244893033812283579239311293568671887931518039377941604850259330337330925674316789735994014884226\"\r\n        \"834626480336712048347803826027076539353700245305282030206976\"},\r\n    {0x1.fffffffffffffp+549, chars_format::fixed, 0,\r\n        \"3685510180489786067624567158478622587137343775863036078755883209700518660674661851348633579471988029768453\"\r\n        \"669252960673424096695607652054153078707400490610564060413952\"},\r\n    {0x1.fffffffffffffp+550, chars_format::fixed, 0,\r\n        \"7371020360979572135249134316957245174274687551726072157511766419401037321349323702697267158943976059536907\"\r\n        \"338505921346848193391215304108306157414800981221128120827904\"},\r\n    {0x1.fffffffffffffp+551, chars_format::fixed, 0,\r\n        \"1474204072195914427049826863391449034854937510345214431502353283880207464269864740539453431788795211907381\"\r\n        \"4677011842693696386782430608216612314829601962442256241655808\"},\r\n    {0x1.fffffffffffffp+552, chars_format::fixed, 0,\r\n        \"2948408144391828854099653726782898069709875020690428863004706567760414928539729481078906863577590423814762\"\r\n        \"9354023685387392773564861216433224629659203924884512483311616\"},\r\n    {0x1.fffffffffffffp+553, chars_format::fixed, 0,\r\n        \"5896816288783657708199307453565796139419750041380857726009413135520829857079458962157813727155180847629525\"\r\n        \"8708047370774785547129722432866449259318407849769024966623232\"},\r\n    {0x1.fffffffffffffp+554, chars_format::fixed, 0,\r\n        \"1179363257756731541639861490713159227883950008276171545201882627104165971415891792431562745431036169525905\"\r\n        \"17416094741549571094259444865732898518636815699538049933246464\"},\r\n    {0x1.fffffffffffffp+555, chars_format::fixed, 0,\r\n        \"2358726515513463083279722981426318455767900016552343090403765254208331942831783584863125490862072339051810\"\r\n        \"34832189483099142188518889731465797037273631399076099866492928\"},\r\n    {0x1.fffffffffffffp+556, chars_format::fixed, 0,\r\n        \"4717453031026926166559445962852636911535800033104686180807530508416663885663567169726250981724144678103620\"\r\n        \"69664378966198284377037779462931594074547262798152199732985856\"},\r\n    {0x1.fffffffffffffp+557, chars_format::fixed, 0,\r\n        \"9434906062053852333118891925705273823071600066209372361615061016833327771327134339452501963448289356207241\"\r\n        \"39328757932396568754075558925863188149094525596304399465971712\"},\r\n    {0x1.fffffffffffffp+558, chars_format::fixed, 0,\r\n        \"1886981212410770466623778385141054764614320013241874472323012203366665554265426867890500392689657871241448\"\r\n        \"278657515864793137508151117851726376298189051192608798931943424\"},\r\n    {0x1.fffffffffffffp+559, chars_format::fixed, 0,\r\n        \"3773962424821540933247556770282109529228640026483748944646024406733331108530853735781000785379315742482896\"\r\n        \"557315031729586275016302235703452752596378102385217597863886848\"},\r\n    {0x1.fffffffffffffp+560, chars_format::fixed, 0,\r\n        \"7547924849643081866495113540564219058457280052967497889292048813466662217061707471562001570758631484965793\"\r\n        \"114630063459172550032604471406905505192756204770435195727773696\"},\r\n    {0x1.fffffffffffffp+561, chars_format::fixed, 0,\r\n        \"1509584969928616373299022708112843811691456010593499577858409762693332443412341494312400314151726296993158\"\r\n        \"6229260126918345100065208942813811010385512409540870391455547392\"},\r\n    {0x1.fffffffffffffp+562, chars_format::fixed, 0,\r\n        \"3019169939857232746598045416225687623382912021186999155716819525386664886824682988624800628303452593986317\"\r\n        \"2458520253836690200130417885627622020771024819081740782911094784\"},\r\n    {0x1.fffffffffffffp+563, chars_format::fixed, 0,\r\n        \"6038339879714465493196090832451375246765824042373998311433639050773329773649365977249601256606905187972634\"\r\n        \"4917040507673380400260835771255244041542049638163481565822189568\"},\r\n    {0x1.fffffffffffffp+564, chars_format::fixed, 0,\r\n        \"1207667975942893098639218166490275049353164808474799662286727810154665954729873195449920251321381037594526\"\r\n        \"89834081015346760800521671542510488083084099276326963131644379136\"},\r\n    {0x1.fffffffffffffp+565, chars_format::fixed, 0,\r\n        \"2415335951885786197278436332980550098706329616949599324573455620309331909459746390899840502642762075189053\"\r\n        \"79668162030693521601043343085020976166168198552653926263288758272\"},\r\n    {0x1.fffffffffffffp+566, chars_format::fixed, 0,\r\n        \"4830671903771572394556872665961100197412659233899198649146911240618663818919492781799681005285524150378107\"\r\n        \"59336324061387043202086686170041952332336397105307852526577516544\"},\r\n    {0x1.fffffffffffffp+567, chars_format::fixed, 0,\r\n        \"9661343807543144789113745331922200394825318467798397298293822481237327637838985563599362010571048300756215\"\r\n        \"18672648122774086404173372340083904664672794210615705053155033088\"},\r\n    {0x1.fffffffffffffp+568, chars_format::fixed, 0,\r\n        \"1932268761508628957822749066384440078965063693559679459658764496247465527567797112719872402114209660151243\"\r\n        \"037345296245548172808346744680167809329345588421231410106310066176\"},\r\n    {0x1.fffffffffffffp+569, chars_format::fixed, 0,\r\n        \"3864537523017257915645498132768880157930127387119358919317528992494931055135594225439744804228419320302486\"\r\n        \"074690592491096345616693489360335618658691176842462820212620132352\"},\r\n    {0x1.fffffffffffffp+570, chars_format::fixed, 0,\r\n        \"7729075046034515831290996265537760315860254774238717838635057984989862110271188450879489608456838640604972\"\r\n        \"149381184982192691233386978720671237317382353684925640425240264704\"},\r\n    {0x1.fffffffffffffp+571, chars_format::fixed, 0,\r\n        \"1545815009206903166258199253107552063172050954847743567727011596997972422054237690175897921691367728120994\"\r\n        \"4298762369964385382466773957441342474634764707369851280850480529408\"},\r\n    {0x1.fffffffffffffp+572, chars_format::fixed, 0,\r\n        \"3091630018413806332516398506215104126344101909695487135454023193995944844108475380351795843382735456241988\"\r\n        \"8597524739928770764933547914882684949269529414739702561700961058816\"},\r\n    {0x1.fffffffffffffp+573, chars_format::fixed, 0,\r\n        \"6183260036827612665032797012430208252688203819390974270908046387991889688216950760703591686765470912483977\"\r\n        \"7195049479857541529867095829765369898539058829479405123401922117632\"},\r\n    {0x1.fffffffffffffp+574, chars_format::fixed, 0,\r\n        \"1236652007365522533006559402486041650537640763878194854181609277598377937643390152140718337353094182496795\"\r\n        \"54390098959715083059734191659530739797078117658958810246803844235264\"},\r\n    {0x1.fffffffffffffp+575, chars_format::fixed, 0,\r\n        \"2473304014731045066013118804972083301075281527756389708363218555196755875286780304281436674706188364993591\"\r\n        \"08780197919430166119468383319061479594156235317917620493607688470528\"},\r\n    {0x1.fffffffffffffp+576, chars_format::fixed, 0,\r\n        \"4946608029462090132026237609944166602150563055512779416726437110393511750573560608562873349412376729987182\"\r\n        \"17560395838860332238936766638122959188312470635835240987215376941056\"},\r\n    {0x1.fffffffffffffp+577, chars_format::fixed, 0,\r\n        \"9893216058924180264052475219888333204301126111025558833452874220787023501147121217125746698824753459974364\"\r\n        \"35120791677720664477873533276245918376624941271670481974430753882112\"},\r\n    {0x1.fffffffffffffp+578, chars_format::fixed, 0,\r\n        \"1978643211784836052810495043977666640860225222205111766690574844157404700229424243425149339764950691994872\"\r\n        \"870241583355441328955747066552491836753249882543340963948861507764224\"},\r\n    {0x1.fffffffffffffp+579, chars_format::fixed, 0,\r\n        \"3957286423569672105620990087955333281720450444410223533381149688314809400458848486850298679529901383989745\"\r\n        \"740483166710882657911494133104983673506499765086681927897723015528448\"},\r\n    {0x1.fffffffffffffp+580, chars_format::fixed, 0,\r\n        \"7914572847139344211241980175910666563440900888820447066762299376629618800917696973700597359059802767979491\"\r\n        \"480966333421765315822988266209967347012999530173363855795446031056896\"},\r\n    {0x1.fffffffffffffp+581, chars_format::fixed, 0,\r\n        \"1582914569427868842248396035182133312688180177764089413352459875325923760183539394740119471811960553595898\"\r\n        \"2961932666843530631645976532419934694025999060346727711590892062113792\"},\r\n    {0x1.fffffffffffffp+582, chars_format::fixed, 0,\r\n        \"3165829138855737684496792070364266625376360355528178826704919750651847520367078789480238943623921107191796\"\r\n        \"5923865333687061263291953064839869388051998120693455423181784124227584\"},\r\n    {0x1.fffffffffffffp+583, chars_format::fixed, 0,\r\n        \"6331658277711475368993584140728533250752720711056357653409839501303695040734157578960477887247842214383593\"\r\n        \"1847730667374122526583906129679738776103996241386910846363568248455168\"},\r\n    {0x1.fffffffffffffp+584, chars_format::fixed, 0,\r\n        \"1266331655542295073798716828145706650150544142211271530681967900260739008146831515792095577449568442876718\"\r\n        \"63695461334748245053167812259359477552207992482773821692727136496910336\"},\r\n    {0x1.fffffffffffffp+585, chars_format::fixed, 0,\r\n        \"2532663311084590147597433656291413300301088284422543061363935800521478016293663031584191154899136885753437\"\r\n        \"27390922669496490106335624518718955104415984965547643385454272993820672\"},\r\n    {0x1.fffffffffffffp+586, chars_format::fixed, 0,\r\n        \"5065326622169180295194867312582826600602176568845086122727871601042956032587326063168382309798273771506874\"\r\n        \"54781845338992980212671249037437910208831969931095286770908545987641344\"},\r\n    {0x1.fffffffffffffp+587, chars_format::fixed, 0,\r\n        \"1013065324433836059038973462516565320120435313769017224545574320208591206517465212633676461959654754301374\"\r\n        \"909563690677985960425342498074875820417663939862190573541817091975282688\"},\r\n    {0x1.fffffffffffffp+588, chars_format::fixed, 0,\r\n        \"2026130648867672118077946925033130640240870627538034449091148640417182413034930425267352923919309508602749\"\r\n        \"819127381355971920850684996149751640835327879724381147083634183950565376\"},\r\n    {0x1.fffffffffffffp+589, chars_format::fixed, 0,\r\n        \"4052261297735344236155893850066261280481741255076068898182297280834364826069860850534705847838619017205499\"\r\n        \"638254762711943841701369992299503281670655759448762294167268367901130752\"},\r\n    {0x1.fffffffffffffp+590, chars_format::fixed, 0,\r\n        \"8104522595470688472311787700132522560963482510152137796364594561668729652139721701069411695677238034410999\"\r\n        \"276509525423887683402739984599006563341311518897524588334536735802261504\"},\r\n    {0x1.fffffffffffffp+591, chars_format::fixed, 0,\r\n        \"1620904519094137694462357540026504512192696502030427559272918912333745930427944340213882339135447606882199\"\r\n        \"8553019050847775366805479969198013126682623037795049176669073471604523008\"},\r\n    {0x1.fffffffffffffp+592, chars_format::fixed, 0,\r\n        \"3241809038188275388924715080053009024385393004060855118545837824667491860855888680427764678270895213764399\"\r\n        \"7106038101695550733610959938396026253365246075590098353338146943209046016\"},\r\n    {0x1.fffffffffffffp+593, chars_format::fixed, 0,\r\n        \"6483618076376550777849430160106018048770786008121710237091675649334983721711777360855529356541790427528799\"\r\n        \"4212076203391101467221919876792052506730492151180196706676293886418092032\"},\r\n    {0x1.fffffffffffffp+594, chars_format::fixed, 0,\r\n        \"1296723615275310155569886032021203609754157201624342047418335129866996744342355472171105871308358085505759\"\r\n        \"88424152406782202934443839753584105013460984302360393413352587772836184064\"},\r\n    {0x1.fffffffffffffp+595, chars_format::fixed, 0,\r\n        \"2593447230550620311139772064042407219508314403248684094836670259733993488684710944342211742616716171011519\"\r\n        \"76848304813564405868887679507168210026921968604720786826705175545672368128\"},\r\n    {0x1.fffffffffffffp+596, chars_format::fixed, 0,\r\n        \"5186894461101240622279544128084814439016628806497368189673340519467986977369421888684423485233432342023039\"\r\n        \"53696609627128811737775359014336420053843937209441573653410351091344736256\"},\r\n    {0x1.fffffffffffffp+597, chars_format::fixed, 0,\r\n        \"1037378892220248124455908825616962887803325761299473637934668103893597395473884377736884697046686468404607\"\r\n        \"907393219254257623475550718028672840107687874418883147306820702182689472512\"},\r\n    {0x1.fffffffffffffp+598, chars_format::fixed, 0,\r\n        \"2074757784440496248911817651233925775606651522598947275869336207787194790947768755473769394093372936809215\"\r\n        \"814786438508515246951101436057345680215375748837766294613641404365378945024\"},\r\n    {0x1.fffffffffffffp+599, chars_format::fixed, 0,\r\n        \"4149515568880992497823635302467851551213303045197894551738672415574389581895537510947538788186745873618431\"\r\n        \"629572877017030493902202872114691360430751497675532589227282808730757890048\"},\r\n    {0x1.fffffffffffffp+600, chars_format::fixed, 0,\r\n        \"8299031137761984995647270604935703102426606090395789103477344831148779163791075021895077576373491747236863\"\r\n        \"259145754034060987804405744229382720861502995351065178454565617461515780096\"},\r\n    {0x1.fffffffffffffp+601, chars_format::fixed, 0,\r\n        \"1659806227552396999129454120987140620485321218079157820695468966229755832758215004379015515274698349447372\"\r\n        \"6518291508068121975608811488458765441723005990702130356909131234923031560192\"},\r\n    {0x1.fffffffffffffp+602, chars_format::fixed, 0,\r\n        \"3319612455104793998258908241974281240970642436158315641390937932459511665516430008758031030549396698894745\"\r\n        \"3036583016136243951217622976917530883446011981404260713818262469846063120384\"},\r\n    {0x1.fffffffffffffp+603, chars_format::fixed, 0,\r\n        \"6639224910209587996517816483948562481941284872316631282781875864919023331032860017516062061098793397789490\"\r\n        \"6073166032272487902435245953835061766892023962808521427636524939692126240768\"},\r\n    {0x1.fffffffffffffp+604, chars_format::fixed, 0,\r\n        \"1327844982041917599303563296789712496388256974463326256556375172983804666206572003503212412219758679557898\"\r\n        \"12146332064544975804870491907670123533784047925617042855273049879384252481536\"},\r\n    {0x1.fffffffffffffp+605, chars_format::fixed, 0,\r\n        \"2655689964083835198607126593579424992776513948926652513112750345967609332413144007006424824439517359115796\"\r\n        \"24292664129089951609740983815340247067568095851234085710546099758768504963072\"},\r\n    {0x1.fffffffffffffp+606, chars_format::fixed, 0,\r\n        \"5311379928167670397214253187158849985553027897853305026225500691935218664826288014012849648879034718231592\"\r\n        \"48585328258179903219481967630680494135136191702468171421092199517537009926144\"},\r\n    {0x1.fffffffffffffp+607, chars_format::fixed, 0,\r\n        \"1062275985633534079442850637431769997110605579570661005245100138387043732965257602802569929775806943646318\"\r\n        \"497170656516359806438963935261360988270272383404936342842184399035074019852288\"},\r\n    {0x1.fffffffffffffp+608, chars_format::fixed, 0,\r\n        \"2124551971267068158885701274863539994221211159141322010490200276774087465930515205605139859551613887292636\"\r\n        \"994341313032719612877927870522721976540544766809872685684368798070148039704576\"},\r\n    {0x1.fffffffffffffp+609, chars_format::fixed, 0,\r\n        \"4249103942534136317771402549727079988442422318282644020980400553548174931861030411210279719103227774585273\"\r\n        \"988682626065439225755855741045443953081089533619745371368737596140296079409152\"},\r\n    {0x1.fffffffffffffp+610, chars_format::fixed, 0,\r\n        \"8498207885068272635542805099454159976884844636565288041960801107096349863722060822420559438206455549170547\"\r\n        \"977365252130878451511711482090887906162179067239490742737475192280592158818304\"},\r\n    {0x1.fffffffffffffp+611, chars_format::fixed, 0,\r\n        \"1699641577013654527108561019890831995376968927313057608392160221419269972744412164484111887641291109834109\"\r\n        \"5954730504261756903023422964181775812324358134478981485474950384561184317636608\"},\r\n    {0x1.fffffffffffffp+612, chars_format::fixed, 0,\r\n        \"3399283154027309054217122039781663990753937854626115216784320442838539945488824328968223775282582219668219\"\r\n        \"1909461008523513806046845928363551624648716268957962970949900769122368635273216\"},\r\n    {0x1.fffffffffffffp+613, chars_format::fixed, 0,\r\n        \"6798566308054618108434244079563327981507875709252230433568640885677079890977648657936447550565164439336438\"\r\n        \"3818922017047027612093691856727103249297432537915925941899801538244737270546432\"},\r\n    {0x1.fffffffffffffp+614, chars_format::fixed, 0,\r\n        \"1359713261610923621686848815912665596301575141850446086713728177135415978195529731587289510113032887867287\"\r\n        \"67637844034094055224187383713454206498594865075831851883799603076489474541092864\"},\r\n    {0x1.fffffffffffffp+615, chars_format::fixed, 0,\r\n        \"2719426523221847243373697631825331192603150283700892173427456354270831956391059463174579020226065775734575\"\r\n        \"35275688068188110448374767426908412997189730151663703767599206152978949082185728\"},\r\n    {0x1.fffffffffffffp+616, chars_format::fixed, 0,\r\n        \"5438853046443694486747395263650662385206300567401784346854912708541663912782118926349158040452131551469150\"\r\n        \"70551376136376220896749534853816825994379460303327407535198412305957898164371456\"},\r\n    {0x1.fffffffffffffp+617, chars_format::fixed, 0,\r\n        \"1087770609288738897349479052730132477041260113480356869370982541708332782556423785269831608090426310293830\"\r\n        \"141102752272752441793499069707633651988758920606654815070396824611915796328742912\"},\r\n    {0x1.fffffffffffffp+618, chars_format::fixed, 0,\r\n        \"2175541218577477794698958105460264954082520226960713738741965083416665565112847570539663216180852620587660\"\r\n        \"282205504545504883586998139415267303977517841213309630140793649223831592657485824\"},\r\n    {0x1.fffffffffffffp+619, chars_format::fixed, 0,\r\n        \"4351082437154955589397916210920529908165040453921427477483930166833331130225695141079326432361705241175320\"\r\n        \"564411009091009767173996278830534607955035682426619260281587298447663185314971648\"},\r\n    {0x1.fffffffffffffp+620, chars_format::fixed, 0,\r\n        \"8702164874309911178795832421841059816330080907842854954967860333666662260451390282158652864723410482350641\"\r\n        \"128822018182019534347992557661069215910071364853238520563174596895326370629943296\"},\r\n    {0x1.fffffffffffffp+621, chars_format::fixed, 0,\r\n        \"1740432974861982235759166484368211963266016181568570990993572066733332452090278056431730572944682096470128\"\r\n        \"2257644036364039068695985115322138431820142729706477041126349193790652741259886592\"},\r\n    {0x1.fffffffffffffp+622, chars_format::fixed, 0,\r\n        \"3480865949723964471518332968736423926532032363137141981987144133466664904180556112863461145889364192940256\"\r\n        \"4515288072728078137391970230644276863640285459412954082252698387581305482519773184\"},\r\n    {0x1.fffffffffffffp+623, chars_format::fixed, 0,\r\n        \"6961731899447928943036665937472847853064064726274283963974288266933329808361112225726922291778728385880512\"\r\n        \"9030576145456156274783940461288553727280570918825908164505396775162610965039546368\"},\r\n    {0x1.fffffffffffffp+624, chars_format::fixed, 0,\r\n        \"1392346379889585788607333187494569570612812945254856792794857653386665961672222445145384458355745677176102\"\r\n        \"58061152290912312549567880922577107454561141837651816329010793550325221930079092736\"},\r\n    {0x1.fffffffffffffp+625, chars_format::fixed, 0,\r\n        \"2784692759779171577214666374989139141225625890509713585589715306773331923344444890290768916711491354352205\"\r\n        \"16122304581824625099135761845154214909122283675303632658021587100650443860158185472\"},\r\n    {0x1.fffffffffffffp+626, chars_format::fixed, 0,\r\n        \"5569385519558343154429332749978278282451251781019427171179430613546663846688889780581537833422982708704410\"\r\n        \"32244609163649250198271523690308429818244567350607265316043174201300887720316370944\"},\r\n    {0x1.fffffffffffffp+627, chars_format::fixed, 0,\r\n        \"1113877103911668630885866549995655656490250356203885434235886122709332769337777956116307566684596541740882\"\r\n        \"064489218327298500396543047380616859636489134701214530632086348402601775440632741888\"},\r\n    {0x1.fffffffffffffp+628, chars_format::fixed, 0,\r\n        \"2227754207823337261771733099991311312980500712407770868471772245418665538675555912232615133369193083481764\"\r\n        \"128978436654597000793086094761233719272978269402429061264172696805203550881265483776\"},\r\n    {0x1.fffffffffffffp+629, chars_format::fixed, 0,\r\n        \"4455508415646674523543466199982622625961001424815541736943544490837331077351111824465230266738386166963528\"\r\n        \"257956873309194001586172189522467438545956538804858122528345393610407101762530967552\"},\r\n    {0x1.fffffffffffffp+630, chars_format::fixed, 0,\r\n        \"8911016831293349047086932399965245251922002849631083473887088981674662154702223648930460533476772333927056\"\r\n        \"515913746618388003172344379044934877091913077609716245056690787220814203525061935104\"},\r\n    {0x1.fffffffffffffp+631, chars_format::fixed, 0,\r\n        \"1782203366258669809417386479993049050384400569926216694777417796334932430940444729786092106695354466785411\"\r\n        \"3031827493236776006344688758089869754183826155219432490113381574441628407050123870208\"},\r\n    {0x1.fffffffffffffp+632, chars_format::fixed, 0,\r\n        \"3564406732517339618834772959986098100768801139852433389554835592669864861880889459572184213390708933570822\"\r\n        \"6063654986473552012689377516179739508367652310438864980226763148883256814100247740416\"},\r\n    {0x1.fffffffffffffp+633, chars_format::fixed, 0,\r\n        \"7128813465034679237669545919972196201537602279704866779109671185339729723761778919144368426781417867141645\"\r\n        \"2127309972947104025378755032359479016735304620877729960453526297766513628200495480832\"},\r\n    {0x1.fffffffffffffp+634, chars_format::fixed, 0,\r\n        \"1425762693006935847533909183994439240307520455940973355821934237067945944752355783828873685356283573428329\"\r\n        \"04254619945894208050757510064718958033470609241755459920907052595533027256400990961664\"},\r\n    {0x1.fffffffffffffp+635, chars_format::fixed, 0,\r\n        \"2851525386013871695067818367988878480615040911881946711643868474135891889504711567657747370712567146856658\"\r\n        \"08509239891788416101515020129437916066941218483510919841814105191066054512801981923328\"},\r\n    {0x1.fffffffffffffp+636, chars_format::fixed, 0,\r\n        \"5703050772027743390135636735977756961230081823763893423287736948271783779009423135315494741425134293713316\"\r\n        \"17018479783576832203030040258875832133882436967021839683628210382132109025603963846656\"},\r\n    {0x1.fffffffffffffp+637, chars_format::fixed, 0,\r\n        \"1140610154405548678027127347195551392246016364752778684657547389654356755801884627063098948285026858742663\"\r\n        \"234036959567153664406060080517751664267764873934043679367256420764264218051207927693312\"},\r\n    {0x1.fffffffffffffp+638, chars_format::fixed, 0,\r\n        \"2281220308811097356054254694391102784492032729505557369315094779308713511603769254126197896570053717485326\"\r\n        \"468073919134307328812120161035503328535529747868087358734512841528528436102415855386624\"},\r\n    {0x1.fffffffffffffp+639, chars_format::fixed, 0,\r\n        \"4562440617622194712108509388782205568984065459011114738630189558617427023207538508252395793140107434970652\"\r\n        \"936147838268614657624240322071006657071059495736174717469025683057056872204831710773248\"},\r\n    {0x1.fffffffffffffp+640, chars_format::fixed, 0,\r\n        \"9124881235244389424217018777564411137968130918022229477260379117234854046415077016504791586280214869941305\"\r\n        \"872295676537229315248480644142013314142118991472349434938051366114113744409663421546496\"},\r\n    {0x1.fffffffffffffp+641, chars_format::fixed, 0,\r\n        \"1824976247048877884843403755512882227593626183604445895452075823446970809283015403300958317256042973988261\"\r\n        \"1744591353074458630496961288284026628284237982944698869876102732228227488819326843092992\"},\r\n    {0x1.fffffffffffffp+642, chars_format::fixed, 0,\r\n        \"3649952494097755769686807511025764455187252367208891790904151646893941618566030806601916634512085947976522\"\r\n        \"3489182706148917260993922576568053256568475965889397739752205464456454977638653686185984\"},\r\n    {0x1.fffffffffffffp+643, chars_format::fixed, 0,\r\n        \"7299904988195511539373615022051528910374504734417783581808303293787883237132061613203833269024171895953044\"\r\n        \"6978365412297834521987845153136106513136951931778795479504410928912909955277307372371968\"},\r\n    {0x1.fffffffffffffp+644, chars_format::fixed, 0,\r\n        \"1459980997639102307874723004410305782074900946883556716361660658757576647426412322640766653804834379190608\"\r\n        \"93956730824595669043975690306272213026273903863557590959008821857825819910554614744743936\"},\r\n    {0x1.fffffffffffffp+645, chars_format::fixed, 0,\r\n        \"2919961995278204615749446008820611564149801893767113432723321317515153294852824645281533307609668758381217\"\r\n        \"87913461649191338087951380612544426052547807727115181918017643715651639821109229489487872\"},\r\n    {0x1.fffffffffffffp+646, chars_format::fixed, 0,\r\n        \"5839923990556409231498892017641223128299603787534226865446642635030306589705649290563066615219337516762435\"\r\n        \"75826923298382676175902761225088852105095615454230363836035287431303279642218458978975744\"},\r\n    {0x1.fffffffffffffp+647, chars_format::fixed, 0,\r\n        \"1167984798111281846299778403528244625659920757506845373089328527006061317941129858112613323043867503352487\"\r\n        \"151653846596765352351805522450177704210191230908460727672070574862606559284436917957951488\"},\r\n    {0x1.fffffffffffffp+648, chars_format::fixed, 0,\r\n        \"2335969596222563692599556807056489251319841515013690746178657054012122635882259716225226646087735006704974\"\r\n        \"303307693193530704703611044900355408420382461816921455344141149725213118568873835915902976\"},\r\n    {0x1.fffffffffffffp+649, chars_format::fixed, 0,\r\n        \"4671939192445127385199113614112978502639683030027381492357314108024245271764519432450453292175470013409948\"\r\n        \"606615386387061409407222089800710816840764923633842910688282299450426237137747671831805952\"},\r\n    {0x1.fffffffffffffp+650, chars_format::fixed, 0,\r\n        \"9343878384890254770398227228225957005279366060054762984714628216048490543529038864900906584350940026819897\"\r\n        \"213230772774122818814444179601421633681529847267685821376564598900852474275495343663611904\"},\r\n    {0x1.fffffffffffffp+651, chars_format::fixed, 0,\r\n        \"1868775676978050954079645445645191401055873212010952596942925643209698108705807772980181316870188005363979\"\r\n        \"4426461545548245637628888359202843267363059694535371642753129197801704948550990687327223808\"},\r\n    {0x1.fffffffffffffp+652, chars_format::fixed, 0,\r\n        \"3737551353956101908159290891290382802111746424021905193885851286419396217411615545960362633740376010727958\"\r\n        \"8852923091096491275257776718405686534726119389070743285506258395603409897101981374654447616\"},\r\n    {0x1.fffffffffffffp+653, chars_format::fixed, 0,\r\n        \"7475102707912203816318581782580765604223492848043810387771702572838792434823231091920725267480752021455917\"\r\n        \"7705846182192982550515553436811373069452238778141486571012516791206819794203962749308895232\"},\r\n    {0x1.fffffffffffffp+654, chars_format::fixed, 0,\r\n        \"1495020541582440763263716356516153120844698569608762077554340514567758486964646218384145053496150404291183\"\r\n        \"55411692364385965101031106873622746138904477556282973142025033582413639588407925498617790464\"},\r\n    {0x1.fffffffffffffp+655, chars_format::fixed, 0,\r\n        \"2990041083164881526527432713032306241689397139217524155108681029135516973929292436768290106992300808582367\"\r\n        \"10823384728771930202062213747245492277808955112565946284050067164827279176815850997235580928\"},\r\n    {0x1.fffffffffffffp+656, chars_format::fixed, 0,\r\n        \"5980082166329763053054865426064612483378794278435048310217362058271033947858584873536580213984601617164734\"\r\n        \"21646769457543860404124427494490984555617910225131892568100134329654558353631701994471161856\"},\r\n    {0x1.fffffffffffffp+657, chars_format::fixed, 0,\r\n        \"1196016433265952610610973085212922496675758855687009662043472411654206789571716974707316042796920323432946\"\r\n        \"843293538915087720808248854988981969111235820450263785136200268659309116707263403988942323712\"},\r\n    {0x1.fffffffffffffp+658, chars_format::fixed, 0,\r\n        \"2392032866531905221221946170425844993351517711374019324086944823308413579143433949414632085593840646865893\"\r\n        \"686587077830175441616497709977963938222471640900527570272400537318618233414526807977884647424\"},\r\n    {0x1.fffffffffffffp+659, chars_format::fixed, 0,\r\n        \"4784065733063810442443892340851689986703035422748038648173889646616827158286867898829264171187681293731787\"\r\n        \"373174155660350883232995419955927876444943281801055140544801074637236466829053615955769294848\"},\r\n    {0x1.fffffffffffffp+660, chars_format::fixed, 0,\r\n        \"9568131466127620884887784681703379973406070845496077296347779293233654316573735797658528342375362587463574\"\r\n        \"746348311320701766465990839911855752889886563602110281089602149274472933658107231911538589696\"},\r\n    {0x1.fffffffffffffp+661, chars_format::fixed, 0,\r\n        \"1913626293225524176977556936340675994681214169099215459269555858646730863314747159531705668475072517492714\"\r\n        \"9492696622641403532931981679823711505779773127204220562179204298548945867316214463823077179392\"},\r\n    {0x1.fffffffffffffp+662, chars_format::fixed, 0,\r\n        \"3827252586451048353955113872681351989362428338198430918539111717293461726629494319063411336950145034985429\"\r\n        \"8985393245282807065863963359647423011559546254408441124358408597097891734632428927646154358784\"},\r\n    {0x1.fffffffffffffp+663, chars_format::fixed, 0,\r\n        \"7654505172902096707910227745362703978724856676396861837078223434586923453258988638126822673900290069970859\"\r\n        \"7970786490565614131727926719294846023119092508816882248716817194195783469264857855292308717568\"},\r\n    {0x1.fffffffffffffp+664, chars_format::fixed, 0,\r\n        \"1530901034580419341582045549072540795744971335279372367415644686917384690651797727625364534780058013994171\"\r\n        \"95941572981131228263455853438589692046238185017633764497433634388391566938529715710584617435136\"},\r\n    {0x1.fffffffffffffp+665, chars_format::fixed, 0,\r\n        \"3061802069160838683164091098145081591489942670558744734831289373834769381303595455250729069560116027988343\"\r\n        \"91883145962262456526911706877179384092476370035267528994867268776783133877059431421169234870272\"},\r\n    {0x1.fffffffffffffp+666, chars_format::fixed, 0,\r\n        \"6123604138321677366328182196290163182979885341117489469662578747669538762607190910501458139120232055976687\"\r\n        \"83766291924524913053823413754358768184952740070535057989734537553566267754118862842338469740544\"},\r\n    {0x1.fffffffffffffp+667, chars_format::fixed, 0,\r\n        \"1224720827664335473265636439258032636595977068223497893932515749533907752521438182100291627824046411195337\"\r\n        \"567532583849049826107646827508717536369905480141070115979469075107132535508237725684676939481088\"},\r\n    {0x1.fffffffffffffp+668, chars_format::fixed, 0,\r\n        \"2449441655328670946531272878516065273191954136446995787865031499067815505042876364200583255648092822390675\"\r\n        \"135065167698099652215293655017435072739810960282140231958938150214265071016475451369353878962176\"},\r\n    {0x1.fffffffffffffp+669, chars_format::fixed, 0,\r\n        \"4898883310657341893062545757032130546383908272893991575730062998135631010085752728401166511296185644781350\"\r\n        \"270130335396199304430587310034870145479621920564280463917876300428530142032950902738707757924352\"},\r\n    {0x1.fffffffffffffp+670, chars_format::fixed, 0,\r\n        \"9797766621314683786125091514064261092767816545787983151460125996271262020171505456802333022592371289562700\"\r\n        \"540260670792398608861174620069740290959243841128560927835752600857060284065901805477415515848704\"},\r\n    {0x1.fffffffffffffp+671, chars_format::fixed, 0,\r\n        \"1959553324262936757225018302812852218553563309157596630292025199254252404034301091360466604518474257912540\"\r\n        \"1080521341584797217722349240139480581918487682257121855671505201714120568131803610954831031697408\"},\r\n    {0x1.fffffffffffffp+672, chars_format::fixed, 0,\r\n        \"3919106648525873514450036605625704437107126618315193260584050398508504808068602182720933209036948515825080\"\r\n        \"2161042683169594435444698480278961163836975364514243711343010403428241136263607221909662063394816\"},\r\n    {0x1.fffffffffffffp+673, chars_format::fixed, 0,\r\n        \"7838213297051747028900073211251408874214253236630386521168100797017009616137204365441866418073897031650160\"\r\n        \"4322085366339188870889396960557922327673950729028487422686020806856482272527214443819324126789632\"},\r\n    {0x1.fffffffffffffp+674, chars_format::fixed, 0,\r\n        \"1567642659410349405780014642250281774842850647326077304233620159403401923227440873088373283614779406330032\"\r\n        \"08644170732678377741778793921115844655347901458056974845372041613712964545054428887638648253579264\"},\r\n    {0x1.fffffffffffffp+675, chars_format::fixed, 0,\r\n        \"3135285318820698811560029284500563549685701294652154608467240318806803846454881746176746567229558812660064\"\r\n        \"17288341465356755483557587842231689310695802916113949690744083227425929090108857775277296507158528\"},\r\n    {0x1.fffffffffffffp+676, chars_format::fixed, 0,\r\n        \"6270570637641397623120058569001127099371402589304309216934480637613607692909763492353493134459117625320128\"\r\n        \"34576682930713510967115175684463378621391605832227899381488166454851858180217715550554593014317056\"},\r\n    {0x1.fffffffffffffp+677, chars_format::fixed, 0,\r\n        \"1254114127528279524624011713800225419874280517860861843386896127522721538581952698470698626891823525064025\"\r\n        \"669153365861427021934230351368926757242783211664455798762976332909703716360435431101109186028634112\"},\r\n    {0x1.fffffffffffffp+678, chars_format::fixed, 0,\r\n        \"2508228255056559049248023427600450839748561035721723686773792255045443077163905396941397253783647050128051\"\r\n        \"338306731722854043868460702737853514485566423328911597525952665819407432720870862202218372057268224\"},\r\n    {0x1.fffffffffffffp+679, chars_format::fixed, 0,\r\n        \"5016456510113118098496046855200901679497122071443447373547584510090886154327810793882794507567294100256102\"\r\n        \"676613463445708087736921405475707028971132846657823195051905331638814865441741724404436744114536448\"},\r\n    {0x1.fffffffffffffp+680, chars_format::fixed, 0,\r\n        \"1003291302022623619699209371040180335899424414288689474709516902018177230865562158776558901513458820051220\"\r\n        \"5353226926891416175473842810951414057942265693315646390103810663277629730883483448808873488229072896\"},\r\n    {0x1.fffffffffffffp+681, chars_format::fixed, 0,\r\n        \"2006582604045247239398418742080360671798848828577378949419033804036354461731124317553117803026917640102441\"\r\n        \"0706453853782832350947685621902828115884531386631292780207621326555259461766966897617746976458145792\"},\r\n    {0x1.fffffffffffffp+682, chars_format::fixed, 0,\r\n        \"4013165208090494478796837484160721343597697657154757898838067608072708923462248635106235606053835280204882\"\r\n        \"1412907707565664701895371243805656231769062773262585560415242653110518923533933795235493952916291584\"},\r\n    {0x1.fffffffffffffp+683, chars_format::fixed, 0,\r\n        \"8026330416180988957593674968321442687195395314309515797676135216145417846924497270212471212107670560409764\"\r\n        \"2825815415131329403790742487611312463538125546525171120830485306221037847067867590470987905832583168\"},\r\n    {0x1.fffffffffffffp+684, chars_format::fixed, 0,\r\n        \"1605266083236197791518734993664288537439079062861903159535227043229083569384899454042494242421534112081952\"\r\n        \"85651630830262658807581484975222624927076251093050342241660970612442075694135735180941975811665166336\"},\r\n    {0x1.fffffffffffffp+685, chars_format::fixed, 0,\r\n        \"3210532166472395583037469987328577074878158125723806319070454086458167138769798908084988484843068224163905\"\r\n        \"71303261660525317615162969950445249854152502186100684483321941224884151388271470361883951623330332672\"},\r\n    {0x1.fffffffffffffp+686, chars_format::fixed, 0,\r\n        \"6421064332944791166074939974657154149756316251447612638140908172916334277539597816169976969686136448327811\"\r\n        \"42606523321050635230325939900890499708305004372201368966643882449768302776542940723767903246660665344\"},\r\n    {0x1.fffffffffffffp+687, chars_format::fixed, 0,\r\n        \"1284212866588958233214987994931430829951263250289522527628181634583266855507919563233995393937227289665562\"\r\n        \"285213046642101270460651879801780999416610008744402737933287764899536605553085881447535806493321330688\"},\r\n    {0x1.fffffffffffffp+688, chars_format::fixed, 0,\r\n        \"2568425733177916466429975989862861659902526500579045055256363269166533711015839126467990787874454579331124\"\r\n        \"570426093284202540921303759603561998833220017488805475866575529799073211106171762895071612986642661376\"},\r\n    {0x1.fffffffffffffp+689, chars_format::fixed, 0,\r\n        \"5136851466355832932859951979725723319805053001158090110512726538333067422031678252935981575748909158662249\"\r\n        \"140852186568405081842607519207123997666440034977610951733151059598146422212343525790143225973285322752\"},\r\n    {0x1.fffffffffffffp+690, chars_format::fixed, 0,\r\n        \"1027370293271166586571990395945144663961010600231618022102545307666613484406335650587196315149781831732449\"\r\n        \"8281704373136810163685215038414247995332880069955221903466302119196292844424687051580286451946570645504\"},\r\n    {0x1.fffffffffffffp+691, chars_format::fixed, 0,\r\n        \"2054740586542333173143980791890289327922021200463236044205090615333226968812671301174392630299563663464899\"\r\n        \"6563408746273620327370430076828495990665760139910443806932604238392585688849374103160572903893141291008\"},\r\n    {0x1.fffffffffffffp+692, chars_format::fixed, 0,\r\n        \"4109481173084666346287961583780578655844042400926472088410181230666453937625342602348785260599127326929799\"\r\n        \"3126817492547240654740860153656991981331520279820887613865208476785171377698748206321145807786282582016\"},\r\n    {0x1.fffffffffffffp+693, chars_format::fixed, 0,\r\n        \"8218962346169332692575923167561157311688084801852944176820362461332907875250685204697570521198254653859598\"\r\n        \"6253634985094481309481720307313983962663040559641775227730416953570342755397496412642291615572565164032\"},\r\n    {0x1.fffffffffffffp+694, chars_format::fixed, 0,\r\n        \"1643792469233866538515184633512231462337616960370588835364072492266581575050137040939514104239650930771919\"\r\n        \"72507269970188962618963440614627967925326081119283550455460833907140685510794992825284583231145130328064\"},\r\n    {0x1.fffffffffffffp+695, chars_format::fixed, 0,\r\n        \"3287584938467733077030369267024462924675233920741177670728144984533163150100274081879028208479301861543839\"\r\n        \"45014539940377925237926881229255935850652162238567100910921667814281371021589985650569166462290260656128\"},\r\n    {0x1.fffffffffffffp+696, chars_format::fixed, 0,\r\n        \"6575169876935466154060738534048925849350467841482355341456289969066326300200548163758056416958603723087678\"\r\n        \"90029079880755850475853762458511871701304324477134201821843335628562742043179971301138332924580521312256\"},\r\n    {0x1.fffffffffffffp+697, chars_format::fixed, 0,\r\n        \"1315033975387093230812147706809785169870093568296471068291257993813265260040109632751611283391720744617535\"\r\n        \"78005815976151170095170752491702374340260864895426840364368667125712548408635994260227666584916104262451\"\r\n        \"2\"},\r\n    {0x1.fffffffffffffp+698, chars_format::fixed, 0,\r\n        \"2630067950774186461624295413619570339740187136592942136582515987626530520080219265503222566783441489235071\"\r\n        \"56011631952302340190341504983404748680521729790853680728737334251425096817271988520455333169832208524902\"\r\n        \"4\"},\r\n    {0x1.fffffffffffffp+699, chars_format::fixed, 0,\r\n        \"5260135901548372923248590827239140679480374273185884273165031975253061040160438531006445133566882978470143\"\r\n        \"12023263904604680380683009966809497361043459581707361457474668502850193634543977040910666339664417049804\"\r\n        \"8\"},\r\n    {0x1.fffffffffffffp+700, chars_format::fixed, 0,\r\n        \"1052027180309674584649718165447828135896074854637176854633006395050612208032087706201289026713376595694028\"\r\n        \"624046527809209360761366019933618994722086919163414722914949337005700387269087954081821332679328834099609\"\r\n        \"6\"},\r\n    {0x1.fffffffffffffp+701, chars_format::fixed, 0,\r\n        \"2104054360619349169299436330895656271792149709274353709266012790101224416064175412402578053426753191388057\"\r\n        \"248093055618418721522732039867237989444173838326829445829898674011400774538175908163642665358657668199219\"\r\n        \"2\"},\r\n    {0x1.fffffffffffffp+702, chars_format::fixed, 0,\r\n        \"4208108721238698338598872661791312543584299418548707418532025580202448832128350824805156106853506382776114\"\r\n        \"496186111236837443045464079734475978888347676653658891659797348022801549076351816327285330717315336398438\"\r\n        \"4\"},\r\n    {0x1.fffffffffffffp+703, chars_format::fixed, 0,\r\n        \"8416217442477396677197745323582625087168598837097414837064051160404897664256701649610312213707012765552228\"\r\n        \"992372222473674886090928159468951957776695353307317783319594696045603098152703632654570661434630672796876\"\r\n        \"8\"},\r\n    {0x1.fffffffffffffp+704, chars_format::fixed, 0,\r\n        \"1683243488495479335439549064716525017433719767419482967412810232080979532851340329922062442741402553110445\"\r\n        \"7984744444947349772181856318937903915553390706614635566639189392091206196305407265309141322869261345593753\"\r\n        \"6\"},\r\n    {0x1.fffffffffffffp+705, chars_format::fixed, 0,\r\n        \"3366486976990958670879098129433050034867439534838965934825620464161959065702680659844124885482805106220891\"\r\n        \"5969488889894699544363712637875807831106781413229271133278378784182412392610814530618282645738522691187507\"\r\n        \"2\"},\r\n    {0x1.fffffffffffffp+706, chars_format::fixed, 0,\r\n        \"6732973953981917341758196258866100069734879069677931869651240928323918131405361319688249770965610212441783\"\r\n        \"1938977779789399088727425275751615662213562826458542266556757568364824785221629061236565291477045382375014\"\r\n        \"4\"},\r\n    {0x1.fffffffffffffp+707, chars_format::fixed, 0,\r\n        \"1346594790796383468351639251773220013946975813935586373930248185664783626281072263937649954193122042488356\"\r\n        \"6387795555957879817745485055150323132442712565291708453311351513672964957044325812247313058295409076475002\"\r\n        \"88\"},\r\n    {0x1.fffffffffffffp+708, chars_format::fixed, 0,\r\n        \"2693189581592766936703278503546440027893951627871172747860496371329567252562144527875299908386244084976713\"\r\n        \"2775591111915759635490970110300646264885425130583416906622703027345929914088651624494626116590818152950005\"\r\n        \"76\"},\r\n    {0x1.fffffffffffffp+709, chars_format::fixed, 0,\r\n        \"5386379163185533873406557007092880055787903255742345495720992742659134505124289055750599816772488169953426\"\r\n        \"5551182223831519270981940220601292529770850261166833813245406054691859828177303248989252233181636305900011\"\r\n        \"52\"},\r\n    {0x1.fffffffffffffp+710, chars_format::fixed, 0,\r\n        \"1077275832637106774681311401418576011157580651148469099144198548531826901024857811150119963354497633990685\"\r\n        \"3110236444766303854196388044120258505954170052233366762649081210938371965635460649797850446636327261180002\"\r\n        \"304\"},\r\n    {0x1.fffffffffffffp+711, chars_format::fixed, 0,\r\n        \"2154551665274213549362622802837152022315161302296938198288397097063653802049715622300239926708995267981370\"\r\n        \"6220472889532607708392776088240517011908340104466733525298162421876743931270921299595700893272654522360004\"\r\n        \"608\"},\r\n    {0x1.fffffffffffffp+712, chars_format::fixed, 0,\r\n        \"4309103330548427098725245605674304044630322604593876396576794194127307604099431244600479853417990535962741\"\r\n        \"2440945779065215416785552176481034023816680208933467050596324843753487862541842599191401786545309044720009\"\r\n        \"216\"},\r\n    {0x1.fffffffffffffp+713, chars_format::fixed, 0,\r\n        \"8618206661096854197450491211348608089260645209187752793153588388254615208198862489200959706835981071925482\"\r\n        \"4881891558130430833571104352962068047633360417866934101192649687506975725083685198382803573090618089440018\"\r\n        \"432\"},\r\n    {0x1.fffffffffffffp+714, chars_format::fixed, 0,\r\n        \"1723641332219370839490098242269721617852129041837550558630717677650923041639772497840191941367196214385096\"\r\n        \"4976378311626086166714220870592413609526672083573386820238529937501395145016737039676560714618123617888003\"\r\n        \"6864\"},\r\n    {0x1.fffffffffffffp+715, chars_format::fixed, 0,\r\n        \"3447282664438741678980196484539443235704258083675101117261435355301846083279544995680383882734392428770192\"\r\n        \"9952756623252172333428441741184827219053344167146773640477059875002790290033474079353121429236247235776007\"\r\n        \"3728\"},\r\n    {0x1.fffffffffffffp+716, chars_format::fixed, 0,\r\n        \"6894565328877483357960392969078886471408516167350202234522870710603692166559089991360767765468784857540385\"\r\n        \"9905513246504344666856883482369654438106688334293547280954119750005580580066948158706242858472494471552014\"\r\n        \"7456\"},\r\n    {0x1.fffffffffffffp+717, chars_format::fixed, 0,\r\n        \"1378913065775496671592078593815777294281703233470040446904574142120738433311817998272153553093756971508077\"\r\n        \"1981102649300868933371376696473930887621337666858709456190823950001116116013389631741248571694498894310402\"\r\n        \"94912\"},\r\n    {0x1.fffffffffffffp+718, chars_format::fixed, 0,\r\n        \"2757826131550993343184157187631554588563406466940080893809148284241476866623635996544307106187513943016154\"\r\n        \"3962205298601737866742753392947861775242675333717418912381647900002232232026779263482497143388997788620805\"\r\n        \"89824\"},\r\n    {0x1.fffffffffffffp+719, chars_format::fixed, 0,\r\n        \"5515652263101986686368314375263109177126812933880161787618296568482953733247271993088614212375027886032308\"\r\n        \"7924410597203475733485506785895723550485350667434837824763295800004464464053558526964994286777995577241611\"\r\n        \"79648\"},\r\n    {0x1.fffffffffffffp+720, chars_format::fixed, 0,\r\n        \"1103130452620397337273662875052621835425362586776032357523659313696590746649454398617722842475005577206461\"\r\n        \"7584882119440695146697101357179144710097070133486967564952659160000892892810711705392998857355599115448322\"\r\n        \"359296\"},\r\n    {0x1.fffffffffffffp+721, chars_format::fixed, 0,\r\n        \"2206260905240794674547325750105243670850725173552064715047318627393181493298908797235445684950011154412923\"\r\n        \"5169764238881390293394202714358289420194140266973935129905318320001785785621423410785997714711198230896644\"\r\n        \"718592\"},\r\n    {0x1.fffffffffffffp+722, chars_format::fixed, 0,\r\n        \"4412521810481589349094651500210487341701450347104129430094637254786362986597817594470891369900022308825847\"\r\n        \"0339528477762780586788405428716578840388280533947870259810636640003571571242846821571995429422396461793289\"\r\n        \"437184\"},\r\n    {0x1.fffffffffffffp+723, chars_format::fixed, 0,\r\n        \"8825043620963178698189303000420974683402900694208258860189274509572725973195635188941782739800044617651694\"\r\n        \"0679056955525561173576810857433157680776561067895740519621273280007143142485693643143990858844792923586578\"\r\n        \"874368\"},\r\n    {0x1.fffffffffffffp+724, chars_format::fixed, 0,\r\n        \"1765008724192635739637860600084194936680580138841651772037854901914545194639127037788356547960008923530338\"\r\n        \"8135811391105112234715362171486631536155312213579148103924254656001428628497138728628798171768958584717315\"\r\n        \"7748736\"},\r\n    {0x1.fffffffffffffp+725, chars_format::fixed, 0,\r\n        \"3530017448385271479275721200168389873361160277683303544075709803829090389278254075576713095920017847060677\"\r\n        \"6271622782210224469430724342973263072310624427158296207848509312002857256994277457257596343537917169434631\"\r\n        \"5497472\"},\r\n    {0x1.fffffffffffffp+726, chars_format::fixed, 0,\r\n        \"7060034896770542958551442400336779746722320555366607088151419607658180778556508151153426191840035694121355\"\r\n        \"2543245564420448938861448685946526144621248854316592415697018624005714513988554914515192687075834338869263\"\r\n        \"0994944\"},\r\n    {0x1.fffffffffffffp+727, chars_format::fixed, 0,\r\n        \"1412006979354108591710288480067355949344464111073321417630283921531636155711301630230685238368007138824271\"\r\n        \"0508649112884089787772289737189305228924249770863318483139403724801142902797710982903038537415166867773852\"\r\n        \"61989888\"},\r\n    {0x1.fffffffffffffp+728, chars_format::fixed, 0,\r\n        \"2824013958708217183420576960134711898688928222146642835260567843063272311422603260461370476736014277648542\"\r\n        \"1017298225768179575544579474378610457848499541726636966278807449602285805595421965806077074830333735547705\"\r\n        \"23979776\"},\r\n    {0x1.fffffffffffffp+729, chars_format::fixed, 0,\r\n        \"5648027917416434366841153920269423797377856444293285670521135686126544622845206520922740953472028555297084\"\r\n        \"2034596451536359151089158948757220915696999083453273932557614899204571611190843931612154149660667471095410\"\r\n        \"47959552\"},\r\n    {0x1.fffffffffffffp+730, chars_format::fixed, 0,\r\n        \"1129605583483286873368230784053884759475571288858657134104227137225308924569041304184548190694405711059416\"\r\n        \"8406919290307271830217831789751444183139399816690654786511522979840914322238168786322430829932133494219082\"\r\n        \"095919104\"},\r\n    {0x1.fffffffffffffp+731, chars_format::fixed, 0,\r\n        \"2259211166966573746736461568107769518951142577717314268208454274450617849138082608369096381388811422118833\"\r\n        \"6813838580614543660435663579502888366278799633381309573023045959681828644476337572644861659864266988438164\"\r\n        \"191838208\"},\r\n    {0x1.fffffffffffffp+732, chars_format::fixed, 0,\r\n        \"4518422333933147493472923136215539037902285155434628536416908548901235698276165216738192762777622844237667\"\r\n        \"3627677161229087320871327159005776732557599266762619146046091919363657288952675145289723319728533976876328\"\r\n        \"383676416\"},\r\n    {0x1.fffffffffffffp+733, chars_format::fixed, 0,\r\n        \"9036844667866294986945846272431078075804570310869257072833817097802471396552330433476385525555245688475334\"\r\n        \"7255354322458174641742654318011553465115198533525238292092183838727314577905350290579446639457067953752656\"\r\n        \"767352832\"},\r\n    {0x1.fffffffffffffp+734, chars_format::fixed, 0,\r\n        \"1807368933573258997389169254486215615160914062173851414566763419560494279310466086695277105111049137695066\"\r\n        \"9451070864491634928348530863602310693023039706705047658418436767745462915581070058115889327891413590750531\"\r\n        \"3534705664\"},\r\n    {0x1.fffffffffffffp+735, chars_format::fixed, 0,\r\n        \"3614737867146517994778338508972431230321828124347702829133526839120988558620932173390554210222098275390133\"\r\n        \"8902141728983269856697061727204621386046079413410095316836873535490925831162140116231778655782827181501062\"\r\n        \"7069411328\"},\r\n    {0x1.fffffffffffffp+736, chars_format::fixed, 0,\r\n        \"7229475734293035989556677017944862460643656248695405658267053678241977117241864346781108420444196550780267\"\r\n        \"7804283457966539713394123454409242772092158826820190633673747070981851662324280232463557311565654363002125\"\r\n        \"4138822656\"},\r\n    {0x1.fffffffffffffp+737, chars_format::fixed, 0,\r\n        \"1445895146858607197911335403588972492128731249739081131653410735648395423448372869356221684088839310156053\"\r\n        \"5560856691593307942678824690881848554418431765364038126734749414196370332464856046492711462313130872600425\"\r\n        \"08277645312\"},\r\n    {0x1.fffffffffffffp+738, chars_format::fixed, 0,\r\n        \"2891790293717214395822670807177944984257462499478162263306821471296790846896745738712443368177678620312107\"\r\n        \"1121713383186615885357649381763697108836863530728076253469498828392740664929712092985422924626261745200850\"\r\n        \"16555290624\"},\r\n    {0x1.fffffffffffffp+739, chars_format::fixed, 0,\r\n        \"5783580587434428791645341614355889968514924998956324526613642942593581693793491477424886736355357240624214\"\r\n        \"2243426766373231770715298763527394217673727061456152506938997656785481329859424185970845849252523490401700\"\r\n        \"33110581248\"},\r\n    {0x1.fffffffffffffp+740, chars_format::fixed, 0,\r\n        \"1156716117486885758329068322871177993702984999791264905322728588518716338758698295484977347271071448124842\"\r\n        \"8448685353274646354143059752705478843534745412291230501387799531357096265971884837194169169850504698080340\"\r\n        \"066221162496\"},\r\n    {0x1.fffffffffffffp+741, chars_format::fixed, 0,\r\n        \"2313432234973771516658136645742355987405969999582529810645457177037432677517396590969954694542142896249685\"\r\n        \"6897370706549292708286119505410957687069490824582461002775599062714192531943769674388338339701009396160680\"\r\n        \"132442324992\"},\r\n    {0x1.fffffffffffffp+742, chars_format::fixed, 0,\r\n        \"4626864469947543033316273291484711974811939999165059621290914354074865355034793181939909389084285792499371\"\r\n        \"3794741413098585416572239010821915374138981649164922005551198125428385063887539348776676679402018792321360\"\r\n        \"264884649984\"},\r\n    {0x1.fffffffffffffp+743, chars_format::fixed, 0,\r\n        \"9253728939895086066632546582969423949623879998330119242581828708149730710069586363879818778168571584998742\"\r\n        \"7589482826197170833144478021643830748277963298329844011102396250856770127775078697553353358804037584642720\"\r\n        \"529769299968\"},\r\n    {0x1.fffffffffffffp+744, chars_format::fixed, 0,\r\n        \"1850745787979017213326509316593884789924775999666023848516365741629946142013917272775963755633714316999748\"\r\n        \"5517896565239434166628895604328766149655592659665968802220479250171354025555015739510670671760807516928544\"\r\n        \"1059538599936\"},\r\n    {0x1.fffffffffffffp+745, chars_format::fixed, 0,\r\n        \"3701491575958034426653018633187769579849551999332047697032731483259892284027834545551927511267428633999497\"\r\n        \"1035793130478868333257791208657532299311185319331937604440958500342708051110031479021341343521615033857088\"\r\n        \"2119077199872\"},\r\n    {0x1.fffffffffffffp+746, chars_format::fixed, 0,\r\n        \"7402983151916068853306037266375539159699103998664095394065462966519784568055669091103855022534857267998994\"\r\n        \"2071586260957736666515582417315064598622370638663875208881917000685416102220062958042682687043230067714176\"\r\n        \"4238154399744\"},\r\n    {0x1.fffffffffffffp+747, chars_format::fixed, 0,\r\n        \"1480596630383213770661207453275107831939820799732819078813092593303956913611133818220771004506971453599798\"\r\n        \"8414317252191547333303116483463012919724474127732775041776383400137083220444012591608536537408646013542835\"\r\n        \"28476308799488\"},\r\n    {0x1.fffffffffffffp+748, chars_format::fixed, 0,\r\n        \"2961193260766427541322414906550215663879641599465638157626185186607913827222267636441542009013942907199597\"\r\n        \"6828634504383094666606232966926025839448948255465550083552766800274166440888025183217073074817292027085670\"\r\n        \"56952617598976\"},\r\n    {0x1.fffffffffffffp+749, chars_format::fixed, 0,\r\n        \"5922386521532855082644829813100431327759283198931276315252370373215827654444535272883084018027885814399195\"\r\n        \"3657269008766189333212465933852051678897896510931100167105533600548332881776050366434146149634584054171341\"\r\n        \"13905235197952\"},\r\n    {0x1.fffffffffffffp+750, chars_format::fixed, 0,\r\n        \"1184477304306571016528965962620086265551856639786255263050474074643165530888907054576616803605577162879839\"\r\n        \"0731453801753237866642493186770410335779579302186220033421106720109666576355210073286829229926916810834268\"\r\n        \"227810470395904\"},\r\n    {0x1.fffffffffffffp+751, chars_format::fixed, 0,\r\n        \"2368954608613142033057931925240172531103713279572510526100948149286331061777814109153233607211154325759678\"\r\n        \"1462907603506475733284986373540820671559158604372440066842213440219333152710420146573658459853833621668536\"\r\n        \"455620940791808\"},\r\n    {0x1.fffffffffffffp+752, chars_format::fixed, 0,\r\n        \"4737909217226284066115863850480345062207426559145021052201896298572662123555628218306467214422308651519356\"\r\n        \"2925815207012951466569972747081641343118317208744880133684426880438666305420840293147316919707667243337072\"\r\n        \"911241881583616\"},\r\n    {0x1.fffffffffffffp+753, chars_format::fixed, 0,\r\n        \"9475818434452568132231727700960690124414853118290042104403792597145324247111256436612934428844617303038712\"\r\n        \"5851630414025902933139945494163282686236634417489760267368853760877332610841680586294633839415334486674145\"\r\n        \"822483763167232\"},\r\n    {0x1.fffffffffffffp+754, chars_format::fixed, 0,\r\n        \"1895163686890513626446345540192138024882970623658008420880758519429064849422251287322586885768923460607742\"\r\n        \"5170326082805180586627989098832656537247326883497952053473770752175466522168336117258926767883066897334829\"\r\n        \"1644967526334464\"},\r\n    {0x1.fffffffffffffp+755, chars_format::fixed, 0,\r\n        \"3790327373781027252892691080384276049765941247316016841761517038858129698844502574645173771537846921215485\"\r\n        \"0340652165610361173255978197665313074494653766995904106947541504350933044336672234517853535766133794669658\"\r\n        \"3289935052668928\"},\r\n    {0x1.fffffffffffffp+756, chars_format::fixed, 0,\r\n        \"7580654747562054505785382160768552099531882494632033683523034077716259397689005149290347543075693842430970\"\r\n        \"0681304331220722346511956395330626148989307533991808213895083008701866088673344469035707071532267589339316\"\r\n        \"6579870105337856\"},\r\n    {0x1.fffffffffffffp+757, chars_format::fixed, 0,\r\n        \"1516130949512410901157076432153710419906376498926406736704606815543251879537801029858069508615138768486194\"\r\n        \"0136260866244144469302391279066125229797861506798361642779016601740373217734668893807141414306453517867863\"\r\n        \"33159740210675712\"},\r\n    {0x1.fffffffffffffp+758, chars_format::fixed, 0,\r\n        \"3032261899024821802314152864307420839812752997852813473409213631086503759075602059716139017230277536972388\"\r\n        \"0272521732488288938604782558132250459595723013596723285558033203480746435469337787614282828612907035735726\"\r\n        \"66319480421351424\"},\r\n    {0x1.fffffffffffffp+759, chars_format::fixed, 0,\r\n        \"6064523798049643604628305728614841679625505995705626946818427262173007518151204119432278034460555073944776\"\r\n        \"0545043464976577877209565116264500919191446027193446571116066406961492870938675575228565657225814071471453\"\r\n        \"32638960842702848\"},\r\n    {0x1.fffffffffffffp+760, chars_format::fixed, 0,\r\n        \"1212904759609928720925661145722968335925101199141125389363685452434601503630240823886455606892111014788955\"\r\n        \"2109008692995315575441913023252900183838289205438689314223213281392298574187735115045713131445162814294290\"\r\n        \"665277921685405696\"},\r\n    {0x1.fffffffffffffp+761, chars_format::fixed, 0,\r\n        \"2425809519219857441851322291445936671850202398282250778727370904869203007260481647772911213784222029577910\"\r\n        \"4218017385990631150883826046505800367676578410877378628446426562784597148375470230091426262890325628588581\"\r\n        \"330555843370811392\"},\r\n    {0x1.fffffffffffffp+762, chars_format::fixed, 0,\r\n        \"4851619038439714883702644582891873343700404796564501557454741809738406014520963295545822427568444059155820\"\r\n        \"8436034771981262301767652093011600735353156821754757256892853125569194296750940460182852525780651257177162\"\r\n        \"661111686741622784\"},\r\n    {0x1.fffffffffffffp+763, chars_format::fixed, 0,\r\n        \"9703238076879429767405289165783746687400809593129003114909483619476812029041926591091644855136888118311641\"\r\n        \"6872069543962524603535304186023201470706313643509514513785706251138388593501880920365705051561302514354325\"\r\n        \"322223373483245568\"},\r\n    {0x1.fffffffffffffp+764, chars_format::fixed, 0,\r\n        \"1940647615375885953481057833156749337480161918625800622981896723895362405808385318218328971027377623662328\"\r\n        \"3374413908792504920707060837204640294141262728701902902757141250227677718700376184073141010312260502870865\"\r\n        \"0644446746966491136\"},\r\n    {0x1.fffffffffffffp+765, chars_format::fixed, 0,\r\n        \"3881295230751771906962115666313498674960323837251601245963793447790724811616770636436657942054755247324656\"\r\n        \"6748827817585009841414121674409280588282525457403805805514282500455355437400752368146282020624521005741730\"\r\n        \"1288893493932982272\"},\r\n    {0x1.fffffffffffffp+766, chars_format::fixed, 0,\r\n        \"7762590461503543813924231332626997349920647674503202491927586895581449623233541272873315884109510494649313\"\r\n        \"3497655635170019682828243348818561176565050914807611611028565000910710874801504736292564041249042011483460\"\r\n        \"2577786987865964544\"},\r\n    {0x1.fffffffffffffp+767, chars_format::fixed, 0,\r\n        \"1552518092300708762784846266525399469984129534900640498385517379116289924646708254574663176821902098929862\"\r\n        \"6699531127034003936565648669763712235313010182961522322205713000182142174960300947258512808249808402296692\"\r\n        \"05155573975731929088\"},\r\n    {0x1.fffffffffffffp+768, chars_format::fixed, 0,\r\n        \"3105036184601417525569692533050798939968259069801280996771034758232579849293416509149326353643804197859725\"\r\n        \"3399062254068007873131297339527424470626020365923044644411426000364284349920601894517025616499616804593384\"\r\n        \"10311147951463858176\"},\r\n    {0x1.fffffffffffffp+769, chars_format::fixed, 0,\r\n        \"6210072369202835051139385066101597879936518139602561993542069516465159698586833018298652707287608395719450\"\r\n        \"6798124508136015746262594679054848941252040731846089288822852000728568699841203789034051232999233609186768\"\r\n        \"20622295902927716352\"},\r\n    {0x1.fffffffffffffp+770, chars_format::fixed, 0,\r\n        \"1242014473840567010227877013220319575987303627920512398708413903293031939717366603659730541457521679143890\"\r\n        \"1359624901627203149252518935810969788250408146369217857764570400145713739968240757806810246599846721837353\"\r\n        \"641244591805855432704\"},\r\n    {0x1.fffffffffffffp+771, chars_format::fixed, 0,\r\n        \"2484028947681134020455754026440639151974607255841024797416827806586063879434733207319461082915043358287780\"\r\n        \"2719249803254406298505037871621939576500816292738435715529140800291427479936481515613620493199693443674707\"\r\n        \"282489183611710865408\"},\r\n    {0x1.fffffffffffffp+772, chars_format::fixed, 0,\r\n        \"4968057895362268040911508052881278303949214511682049594833655613172127758869466414638922165830086716575560\"\r\n        \"5438499606508812597010075743243879153001632585476871431058281600582854959872963031227240986399386887349414\"\r\n        \"564978367223421730816\"},\r\n    {0x1.fffffffffffffp+773, chars_format::fixed, 0,\r\n        \"9936115790724536081823016105762556607898429023364099189667311226344255517738932829277844331660173433151121\"\r\n        \"0876999213017625194020151486487758306003265170953742862116563201165709919745926062454481972798773774698829\"\r\n        \"129956734446843461632\"},\r\n    {0x1.fffffffffffffp+774, chars_format::fixed, 0,\r\n        \"1987223158144907216364603221152511321579685804672819837933462245268851103547786565855568866332034686630224\"\r\n        \"2175399842603525038804030297297551661200653034190748572423312640233141983949185212490896394559754754939765\"\r\n        \"8259913468893686923264\"},\r\n    {0x1.fffffffffffffp+775, chars_format::fixed, 0,\r\n        \"3974446316289814432729206442305022643159371609345639675866924490537702207095573131711137732664069373260448\"\r\n        \"4350799685207050077608060594595103322401306068381497144846625280466283967898370424981792789119509509879531\"\r\n        \"6519826937787373846528\"},\r\n    {0x1.fffffffffffffp+776, chars_format::fixed, 0,\r\n        \"7948892632579628865458412884610045286318743218691279351733848981075404414191146263422275465328138746520896\"\r\n        \"8701599370414100155216121189190206644802612136762994289693250560932567935796740849963585578239019019759063\"\r\n        \"3039653875574747693056\"},\r\n    {0x1.fffffffffffffp+777, chars_format::fixed, 0,\r\n        \"1589778526515925773091682576922009057263748643738255870346769796215080882838229252684455093065627749304179\"\r\n        \"3740319874082820031043224237838041328960522427352598857938650112186513587159348169992717115647803803951812\"\r\n        \"66079307751149495386112\"},\r\n    {0x1.fffffffffffffp+778, chars_format::fixed, 0,\r\n        \"3179557053031851546183365153844018114527497287476511740693539592430161765676458505368910186131255498608358\"\r\n        \"7480639748165640062086448475676082657921044854705197715877300224373027174318696339985434231295607607903625\"\r\n        \"32158615502298990772224\"},\r\n    {0x1.fffffffffffffp+779, chars_format::fixed, 0,\r\n        \"6359114106063703092366730307688036229054994574953023481387079184860323531352917010737820372262510997216717\"\r\n        \"4961279496331280124172896951352165315842089709410395431754600448746054348637392679970868462591215215807250\"\r\n        \"64317231004597981544448\"},\r\n    {0x1.fffffffffffffp+780, chars_format::fixed, 0,\r\n        \"1271822821212740618473346061537607245810998914990604696277415836972064706270583402147564074452502199443343\"\r\n        \"4992255899266256024834579390270433063168417941882079086350920089749210869727478535994173692518243043161450\"\r\n        \"128634462009195963088896\"},\r\n    {0x1.fffffffffffffp+781, chars_format::fixed, 0,\r\n        \"2543645642425481236946692123075214491621997829981209392554831673944129412541166804295128148905004398886686\"\r\n        \"9984511798532512049669158780540866126336835883764158172701840179498421739454957071988347385036486086322900\"\r\n        \"257268924018391926177792\"},\r\n    {0x1.fffffffffffffp+782, chars_format::fixed, 0,\r\n        \"5087291284850962473893384246150428983243995659962418785109663347888258825082333608590256297810008797773373\"\r\n        \"9969023597065024099338317561081732252673671767528316345403680358996843478909914143976694770072972172645800\"\r\n        \"514537848036783852355584\"},\r\n    {0x1.fffffffffffffp+783, chars_format::fixed, 0,\r\n        \"1017458256970192494778676849230085796648799131992483757021932669577651765016466721718051259562001759554674\"\r\n        \"7993804719413004819867663512216346450534734353505663269080736071799368695781982828795338954014594434529160\"\r\n        \"1029075696073567704711168\"},\r\n    {0x1.fffffffffffffp+784, chars_format::fixed, 0,\r\n        \"2034916513940384989557353698460171593297598263984967514043865339155303530032933443436102519124003519109349\"\r\n        \"5987609438826009639735327024432692901069468707011326538161472143598737391563965657590677908029188869058320\"\r\n        \"2058151392147135409422336\"},\r\n    {0x1.fffffffffffffp+785, chars_format::fixed, 0,\r\n        \"4069833027880769979114707396920343186595196527969935028087730678310607060065866886872205038248007038218699\"\r\n        \"1975218877652019279470654048865385802138937414022653076322944287197474783127931315181355816058377738116640\"\r\n        \"4116302784294270818844672\"},\r\n    {0x1.fffffffffffffp+786, chars_format::fixed, 0,\r\n        \"8139666055761539958229414793840686373190393055939870056175461356621214120131733773744410076496014076437398\"\r\n        \"3950437755304038558941308097730771604277874828045306152645888574394949566255862630362711632116755476233280\"\r\n        \"8232605568588541637689344\"},\r\n    {0x1.fffffffffffffp+787, chars_format::fixed, 0,\r\n        \"1627933211152307991645882958768137274638078611187974011235092271324242824026346754748882015299202815287479\"\r\n        \"6790087551060807711788261619546154320855574965609061230529177714878989913251172526072542326423351095246656\"\r\n        \"16465211137177083275378688\"},\r\n    {0x1.fffffffffffffp+788, chars_format::fixed, 0,\r\n        \"3255866422304615983291765917536274549276157222375948022470184542648485648052693509497764030598405630574959\"\r\n        \"3580175102121615423576523239092308641711149931218122461058355429757979826502345052145084652846702190493312\"\r\n        \"32930422274354166550757376\"},\r\n    {0x1.fffffffffffffp+789, chars_format::fixed, 0,\r\n        \"6511732844609231966583531835072549098552314444751896044940369085296971296105387018995528061196811261149918\"\r\n        \"7160350204243230847153046478184617283422299862436244922116710859515959653004690104290169305693404380986624\"\r\n        \"65860844548708333101514752\"},\r\n    {0x1.fffffffffffffp+790, chars_format::fixed, 0,\r\n        \"1302346568921846393316706367014509819710462888950379208988073817059394259221077403799105612239362252229983\"\r\n        \"7432070040848646169430609295636923456684459972487248984423342171903191930600938020858033861138680876197324\"\r\n        \"931721689097416666203029504\"},\r\n    {0x1.fffffffffffffp+791, chars_format::fixed, 0,\r\n        \"2604693137843692786633412734029019639420925777900758417976147634118788518442154807598211224478724504459967\"\r\n        \"4864140081697292338861218591273846913368919944974497968846684343806383861201876041716067722277361752394649\"\r\n        \"863443378194833332406059008\"},\r\n    {0x1.fffffffffffffp+792, chars_format::fixed, 0,\r\n        \"5209386275687385573266825468058039278841851555801516835952295268237577036884309615196422448957449008919934\"\r\n        \"9728280163394584677722437182547693826737839889948995937693368687612767722403752083432135444554723504789299\"\r\n        \"726886756389666664812118016\"},\r\n    {0x1.fffffffffffffp+793, chars_format::fixed, 0,\r\n        \"1041877255137477114653365093611607855768370311160303367190459053647515407376861923039284489791489801783986\"\r\n        \"9945656032678916935544487436509538765347567977989799187538673737522553544480750416686427088910944700957859\"\r\n        \"9453773512779333329624236032\"},\r\n    {0x1.fffffffffffffp+794, chars_format::fixed, 0,\r\n        \"2083754510274954229306730187223215711536740622320606734380918107295030814753723846078568979582979603567973\"\r\n        \"9891312065357833871088974873019077530695135955979598375077347475045107088961500833372854177821889401915719\"\r\n        \"8907547025558666659248472064\"},\r\n    {0x1.fffffffffffffp+795, chars_format::fixed, 0,\r\n        \"4167509020549908458613460374446431423073481244641213468761836214590061629507447692157137959165959207135947\"\r\n        \"9782624130715667742177949746038155061390271911959196750154694950090214177923001666745708355643778803831439\"\r\n        \"7815094051117333318496944128\"},\r\n    {0x1.fffffffffffffp+796, chars_format::fixed, 0,\r\n        \"8335018041099816917226920748892862846146962489282426937523672429180123259014895384314275918331918414271895\"\r\n        \"9565248261431335484355899492076310122780543823918393500309389900180428355846003333491416711287557607662879\"\r\n        \"5630188102234666636993888256\"},\r\n    {0x1.fffffffffffffp+797, chars_format::fixed, 0,\r\n        \"1667003608219963383445384149778572569229392497856485387504734485836024651802979076862855183666383682854379\"\r\n        \"1913049652286267096871179898415262024556108764783678700061877980036085671169200666698283342257511521532575\"\r\n        \"91260376204469333273987776512\"},\r\n    {0x1.fffffffffffffp+798, chars_format::fixed, 0,\r\n        \"3334007216439926766890768299557145138458784995712970775009468971672049303605958153725710367332767365708758\"\r\n        \"3826099304572534193742359796830524049112217529567357400123755960072171342338401333396566684515023043065151\"\r\n        \"82520752408938666547975553024\"},\r\n    {0x1.fffffffffffffp+799, chars_format::fixed, 0,\r\n        \"6668014432879853533781536599114290276917569991425941550018937943344098607211916307451420734665534731417516\"\r\n        \"7652198609145068387484719593661048098224435059134714800247511920144342684676802666793133369030046086130303\"\r\n        \"65041504817877333095951106048\"},\r\n    {0x1.fffffffffffffp+800, chars_format::fixed, 0,\r\n        \"1333602886575970706756307319822858055383513998285188310003787588668819721442383261490284146933106946283503\"\r\n        \"3530439721829013677496943918732209619644887011826942960049502384028868536935360533358626673806009217226060\"\r\n        \"730083009635754666191902212096\"},\r\n    {0x1.fffffffffffffp+801, chars_format::fixed, 0,\r\n        \"2667205773151941413512614639645716110767027996570376620007575177337639442884766522980568293866213892567006\"\r\n        \"7060879443658027354993887837464419239289774023653885920099004768057737073870721066717253347612018434452121\"\r\n        \"460166019271509332383804424192\"},\r\n    {0x1.fffffffffffffp+802, chars_format::fixed, 0,\r\n        \"5334411546303882827025229279291432221534055993140753240015150354675278885769533045961136587732427785134013\"\r\n        \"4121758887316054709987775674928838478579548047307771840198009536115474147741442133434506695224036868904242\"\r\n        \"920332038543018664767608848384\"},\r\n    {0x1.fffffffffffffp+803, chars_format::fixed, 0,\r\n        \"1066882309260776565405045855858286444306811198628150648003030070935055777153906609192227317546485557026802\"\r\n        \"6824351777463210941997555134985767695715909609461554368039601907223094829548288426686901339044807373780848\"\r\n        \"5840664077086037329535217696768\"},\r\n    {0x1.fffffffffffffp+804, chars_format::fixed, 0,\r\n        \"2133764618521553130810091711716572888613622397256301296006060141870111554307813218384454635092971114053605\"\r\n        \"3648703554926421883995110269971535391431819218923108736079203814446189659096576853373802678089614747561697\"\r\n        \"1681328154172074659070435393536\"},\r\n    {0x1.fffffffffffffp+805, chars_format::fixed, 0,\r\n        \"4267529237043106261620183423433145777227244794512602592012120283740223108615626436768909270185942228107210\"\r\n        \"7297407109852843767990220539943070782863638437846217472158407628892379318193153706747605356179229495123394\"\r\n        \"3362656308344149318140870787072\"},\r\n    {0x1.fffffffffffffp+806, chars_format::fixed, 0,\r\n        \"8535058474086212523240366846866291554454489589025205184024240567480446217231252873537818540371884456214421\"\r\n        \"4594814219705687535980441079886141565727276875692434944316815257784758636386307413495210712358458990246788\"\r\n        \"6725312616688298636281741574144\"},\r\n    {0x1.fffffffffffffp+807, chars_format::fixed, 0,\r\n        \"1707011694817242504648073369373258310890897917805041036804848113496089243446250574707563708074376891242884\"\r\n        \"2918962843941137507196088215977228313145455375138486988863363051556951727277261482699042142471691798049357\"\r\n        \"73450625233376597272563483148288\"},\r\n    {0x1.fffffffffffffp+808, chars_format::fixed, 0,\r\n        \"3414023389634485009296146738746516621781795835610082073609696226992178486892501149415127416148753782485768\"\r\n        \"5837925687882275014392176431954456626290910750276973977726726103113903454554522965398084284943383596098715\"\r\n        \"46901250466753194545126966296576\"},\r\n    {0x1.fffffffffffffp+809, chars_format::fixed, 0,\r\n        \"6828046779268970018592293477493033243563591671220164147219392453984356973785002298830254832297507564971537\"\r\n        \"1675851375764550028784352863908913252581821500553947955453452206227806909109045930796168569886767192197430\"\r\n        \"93802500933506389090253932593152\"},\r\n    {0x1.fffffffffffffp+810, chars_format::fixed, 0,\r\n        \"1365609355853794003718458695498606648712718334244032829443878490796871394757000459766050966459501512994307\"\r\n        \"4335170275152910005756870572781782650516364300110789591090690441245561381821809186159233713977353438439486\"\r\n        \"187605001867012778180507865186304\"},\r\n    {0x1.fffffffffffffp+811, chars_format::fixed, 0,\r\n        \"2731218711707588007436917390997213297425436668488065658887756981593742789514000919532101932919003025988614\"\r\n        \"8670340550305820011513741145563565301032728600221579182181380882491122763643618372318467427954706876878972\"\r\n        \"375210003734025556361015730372608\"},\r\n    {0x1.fffffffffffffp+812, chars_format::fixed, 0,\r\n        \"5462437423415176014873834781994426594850873336976131317775513963187485579028001839064203865838006051977229\"\r\n        \"7340681100611640023027482291127130602065457200443158364362761764982245527287236744636934855909413753757944\"\r\n        \"750420007468051112722031460745216\"},\r\n    {0x1.fffffffffffffp+813, chars_format::fixed, 0,\r\n        \"1092487484683035202974766956398885318970174667395226263555102792637497115805600367812840773167601210395445\"\r\n        \"9468136220122328004605496458225426120413091440088631672872552352996449105457447348927386971181882750751588\"\r\n        \"9500840014936102225444062921490432\"},\r\n    {0x1.fffffffffffffp+814, chars_format::fixed, 0,\r\n        \"2184974969366070405949533912797770637940349334790452527110205585274994231611200735625681546335202420790891\"\r\n        \"8936272440244656009210992916450852240826182880177263345745104705992898210914894697854773942363765501503177\"\r\n        \"9001680029872204450888125842980864\"},\r\n    {0x1.fffffffffffffp+815, chars_format::fixed, 0,\r\n        \"4369949938732140811899067825595541275880698669580905054220411170549988463222401471251363092670404841581783\"\r\n        \"7872544880489312018421985832901704481652365760354526691490209411985796421829789395709547884727531003006355\"\r\n        \"8003360059744408901776251685961728\"},\r\n    {0x1.fffffffffffffp+816, chars_format::fixed, 0,\r\n        \"8739899877464281623798135651191082551761397339161810108440822341099976926444802942502726185340809683163567\"\r\n        \"5745089760978624036843971665803408963304731520709053382980418823971592843659578791419095769455062006012711\"\r\n        \"6006720119488817803552503371923456\"},\r\n    {0x1.fffffffffffffp+817, chars_format::fixed, 0,\r\n        \"1747979975492856324759627130238216510352279467832362021688164468219995385288960588500545237068161936632713\"\r\n        \"5149017952195724807368794333160681792660946304141810676596083764794318568731915758283819153891012401202542\"\r\n        \"32013440238977635607105006743846912\"},\r\n    {0x1.fffffffffffffp+818, chars_format::fixed, 0,\r\n        \"3495959950985712649519254260476433020704558935664724043376328936439990770577921177001090474136323873265427\"\r\n        \"0298035904391449614737588666321363585321892608283621353192167529588637137463831516567638307782024802405084\"\r\n        \"64026880477955271214210013487693824\"},\r\n    {0x1.fffffffffffffp+819, chars_format::fixed, 0,\r\n        \"6991919901971425299038508520952866041409117871329448086752657872879981541155842354002180948272647746530854\"\r\n        \"0596071808782899229475177332642727170643785216567242706384335059177274274927663033135276615564049604810169\"\r\n        \"28053760955910542428420026975387648\"},\r\n    {0x1.fffffffffffffp+820, chars_format::fixed, 0,\r\n        \"1398383980394285059807701704190573208281823574265889617350531574575996308231168470800436189654529549306170\"\r\n        \"8119214361756579845895035466528545434128757043313448541276867011835454854985532606627055323112809920962033\"\r\n        \"856107521911821084856840053950775296\"},\r\n    {0x1.fffffffffffffp+821, chars_format::fixed, 0,\r\n        \"2796767960788570119615403408381146416563647148531779234701063149151992616462336941600872379309059098612341\"\r\n        \"6238428723513159691790070933057090868257514086626897082553734023670909709971065213254110646225619841924067\"\r\n        \"712215043823642169713680107901550592\"},\r\n    {0x1.fffffffffffffp+822, chars_format::fixed, 0,\r\n        \"5593535921577140239230806816762292833127294297063558469402126298303985232924673883201744758618118197224683\"\r\n        \"2476857447026319383580141866114181736515028173253794165107468047341819419942130426508221292451239683848135\"\r\n        \"424430087647284339427360215803101184\"},\r\n    {0x1.fffffffffffffp+823, chars_format::fixed, 0,\r\n        \"1118707184315428047846161363352458566625458859412711693880425259660797046584934776640348951723623639444936\"\r\n        \"6495371489405263876716028373222836347303005634650758833021493609468363883988426085301644258490247936769627\"\r\n        \"0848860175294568678854720431606202368\"},\r\n    {0x1.fffffffffffffp+824, chars_format::fixed, 0,\r\n        \"2237414368630856095692322726704917133250917718825423387760850519321594093169869553280697903447247278889873\"\r\n        \"2990742978810527753432056746445672694606011269301517666042987218936727767976852170603288516980495873539254\"\r\n        \"1697720350589137357709440863212404736\"},\r\n    {0x1.fffffffffffffp+825, chars_format::fixed, 0,\r\n        \"4474828737261712191384645453409834266501835437650846775521701038643188186339739106561395806894494557779746\"\r\n        \"5981485957621055506864113492891345389212022538603035332085974437873455535953704341206577033960991747078508\"\r\n        \"3395440701178274715418881726424809472\"},\r\n    {0x1.fffffffffffffp+826, chars_format::fixed, 0,\r\n        \"8949657474523424382769290906819668533003670875301693551043402077286376372679478213122791613788989115559493\"\r\n        \"1962971915242111013728226985782690778424045077206070664171948875746911071907408682413154067921983494157016\"\r\n        \"6790881402356549430837763452849618944\"},\r\n    {0x1.fffffffffffffp+827, chars_format::fixed, 0,\r\n        \"1789931494904684876553858181363933706600734175060338710208680415457275274535895642624558322757797823111898\"\r\n        \"6392594383048422202745645397156538155684809015441214132834389775149382214381481736482630813584396698831403\"\r\n        \"33581762804713098861675526905699237888\"},\r\n    {0x1.fffffffffffffp+828, chars_format::fixed, 0,\r\n        \"3579862989809369753107716362727867413201468350120677420417360830914550549071791285249116645515595646223797\"\r\n        \"2785188766096844405491290794313076311369618030882428265668779550298764428762963472965261627168793397662806\"\r\n        \"67163525609426197723351053811398475776\"},\r\n    {0x1.fffffffffffffp+829, chars_format::fixed, 0,\r\n        \"7159725979618739506215432725455734826402936700241354840834721661829101098143582570498233291031191292447594\"\r\n        \"5570377532193688810982581588626152622739236061764856531337559100597528857525926945930523254337586795325613\"\r\n        \"34327051218852395446702107622796951552\"},\r\n    {0x1.fffffffffffffp+830, chars_format::fixed, 0,\r\n        \"1431945195923747901243086545091146965280587340048270968166944332365820219628716514099646658206238258489518\"\r\n        \"9114075506438737762196516317725230524547847212352971306267511820119505771505185389186104650867517359065122\"\r\n        \"668654102437704790893404215245593903104\"},\r\n    {0x1.fffffffffffffp+831, chars_format::fixed, 0,\r\n        \"2863890391847495802486173090182293930561174680096541936333888664731640439257433028199293316412476516979037\"\r\n        \"8228151012877475524393032635450461049095694424705942612535023640239011543010370778372209301735034718130245\"\r\n        \"337308204875409581786808430491187806208\"},\r\n    {0x1.fffffffffffffp+832, chars_format::fixed, 0,\r\n        \"5727780783694991604972346180364587861122349360193083872667777329463280878514866056398586632824953033958075\"\r\n        \"6456302025754951048786065270900922098191388849411885225070047280478023086020741556744418603470069436260490\"\r\n        \"674616409750819163573616860982375612416\"},\r\n    {0x1.fffffffffffffp+833, chars_format::fixed, 0,\r\n        \"1145556156738998320994469236072917572224469872038616774533555465892656175702973211279717326564990606791615\"\r\n        \"1291260405150990209757213054180184419638277769882377045014009456095604617204148311348883720694013887252098\"\r\n        \"1349232819501638327147233721964751224832\"},\r\n    {0x1.fffffffffffffp+834, chars_format::fixed, 0,\r\n        \"2291112313477996641988938472145835144448939744077233549067110931785312351405946422559434653129981213583230\"\r\n        \"2582520810301980419514426108360368839276555539764754090028018912191209234408296622697767441388027774504196\"\r\n        \"2698465639003276654294467443929502449664\"},\r\n    {0x1.fffffffffffffp+835, chars_format::fixed, 0,\r\n        \"4582224626955993283977876944291670288897879488154467098134221863570624702811892845118869306259962427166460\"\r\n        \"5165041620603960839028852216720737678553111079529508180056037824382418468816593245395534882776055549008392\"\r\n        \"5396931278006553308588934887859004899328\"},\r\n    {0x1.fffffffffffffp+836, chars_format::fixed, 0,\r\n        \"9164449253911986567955753888583340577795758976308934196268443727141249405623785690237738612519924854332921\"\r\n        \"0330083241207921678057704433441475357106222159059016360112075648764836937633186490791069765552111098016785\"\r\n        \"0793862556013106617177869775718009798656\"},\r\n    {0x1.fffffffffffffp+837, chars_format::fixed, 0,\r\n        \"1832889850782397313591150777716668115559151795261786839253688745428249881124757138047547722503984970866584\"\r\n        \"2066016648241584335611540886688295071421244431811803272022415129752967387526637298158213953110422219603357\"\r\n        \"01587725112026213234355739551436019597312\"},\r\n    {0x1.fffffffffffffp+838, chars_format::fixed, 0,\r\n        \"3665779701564794627182301555433336231118303590523573678507377490856499762249514276095095445007969941733168\"\r\n        \"4132033296483168671223081773376590142842488863623606544044830259505934775053274596316427906220844439206714\"\r\n        \"03175450224052426468711479102872039194624\"},\r\n    {0x1.fffffffffffffp+839, chars_format::fixed, 0,\r\n        \"7331559403129589254364603110866672462236607181047147357014754981712999524499028552190190890015939883466336\"\r\n        \"8264066592966337342446163546753180285684977727247213088089660519011869550106549192632855812441688878413428\"\r\n        \"06350900448104852937422958205744078389248\"},\r\n    {0x1.fffffffffffffp+840, chars_format::fixed, 0,\r\n        \"1466311880625917850872920622173334492447321436209429471402950996342599904899805710438038178003187976693267\"\r\n        \"3652813318593267468489232709350636057136995545449442617617932103802373910021309838526571162488337775682685\"\r\n        \"612701800896209705874845916411488156778496\"},\r\n    {0x1.fffffffffffffp+841, chars_format::fixed, 0,\r\n        \"2932623761251835701745841244346668984894642872418858942805901992685199809799611420876076356006375953386534\"\r\n        \"7305626637186534936978465418701272114273991090898885235235864207604747820042619677053142324976675551365371\"\r\n        \"225403601792419411749691832822976313556992\"},\r\n    {0x1.fffffffffffffp+842, chars_format::fixed, 0,\r\n        \"5865247522503671403491682488693337969789285744837717885611803985370399619599222841752152712012751906773069\"\r\n        \"4611253274373069873956930837402544228547982181797770470471728415209495640085239354106284649953351102730742\"\r\n        \"450807203584838823499383665645952627113984\"},\r\n    {0x1.fffffffffffffp+843, chars_format::fixed, 0,\r\n        \"1173049504500734280698336497738667593957857148967543577122360797074079923919844568350430542402550381354613\"\r\n        \"8922250654874613974791386167480508845709596436359554094094345683041899128017047870821256929990670220546148\"\r\n        \"4901614407169677646998767331291905254227968\"},\r\n    {0x1.fffffffffffffp+844, chars_format::fixed, 0,\r\n        \"2346099009001468561396672995477335187915714297935087154244721594148159847839689136700861084805100762709227\"\r\n        \"7844501309749227949582772334961017691419192872719108188188691366083798256034095741642513859981340441092296\"\r\n        \"9803228814339355293997534662583810508455936\"},\r\n    {0x1.fffffffffffffp+845, chars_format::fixed, 0,\r\n        \"4692198018002937122793345990954670375831428595870174308489443188296319695679378273401722169610201525418455\"\r\n        \"5689002619498455899165544669922035382838385745438216376377382732167596512068191483285027719962680882184593\"\r\n        \"9606457628678710587995069325167621016911872\"},\r\n    {0x1.fffffffffffffp+846, chars_format::fixed, 0,\r\n        \"9384396036005874245586691981909340751662857191740348616978886376592639391358756546803444339220403050836911\"\r\n        \"1378005238996911798331089339844070765676771490876432752754765464335193024136382966570055439925361764369187\"\r\n        \"9212915257357421175990138650335242033823744\"},\r\n    {0x1.fffffffffffffp+847, chars_format::fixed, 0,\r\n        \"1876879207201174849117338396381868150332571438348069723395777275318527878271751309360688867844080610167382\"\r\n        \"2275601047799382359666217867968814153135354298175286550550953092867038604827276593314011087985072352873837\"\r\n        \"58425830514714842351980277300670484067647488\"},\r\n    {0x1.fffffffffffffp+848, chars_format::fixed, 0,\r\n        \"3753758414402349698234676792763736300665142876696139446791554550637055756543502618721377735688161220334764\"\r\n        \"4551202095598764719332435735937628306270708596350573101101906185734077209654553186628022175970144705747675\"\r\n        \"16851661029429684703960554601340968135294976\"},\r\n    {0x1.fffffffffffffp+849, chars_format::fixed, 0,\r\n        \"7507516828804699396469353585527472601330285753392278893583109101274111513087005237442755471376322440669528\"\r\n        \"9102404191197529438664871471875256612541417192701146202203812371468154419309106373256044351940289411495350\"\r\n        \"33703322058859369407921109202681936270589952\"},\r\n    {0x1.fffffffffffffp+850, chars_format::fixed, 0,\r\n        \"1501503365760939879293870717105494520266057150678455778716621820254822302617401047488551094275264488133905\"\r\n        \"7820480838239505887732974294375051322508283438540229240440762474293630883861821274651208870388057882299070\"\r\n        \"067406644117718738815842218405363872541179904\"},\r\n    {0x1.fffffffffffffp+851, chars_format::fixed, 0,\r\n        \"3003006731521879758587741434210989040532114301356911557433243640509644605234802094977102188550528976267811\"\r\n        \"5640961676479011775465948588750102645016566877080458480881524948587261767723642549302417740776115764598140\"\r\n        \"134813288235437477631684436810727745082359808\"},\r\n    {0x1.fffffffffffffp+852, chars_format::fixed, 0,\r\n        \"6006013463043759517175482868421978081064228602713823114866487281019289210469604189954204377101057952535623\"\r\n        \"1281923352958023550931897177500205290033133754160916961763049897174523535447285098604835481552231529196280\"\r\n        \"269626576470874955263368873621455490164719616\"},\r\n    {0x1.fffffffffffffp+853, chars_format::fixed, 0,\r\n        \"1201202692608751903435096573684395616212845720542764622973297456203857842093920837990840875420211590507124\"\r\n        \"6256384670591604710186379435500041058006626750832183392352609979434904707089457019720967096310446305839256\"\r\n        \"0539253152941749910526737747242910980329439232\"},\r\n    {0x1.fffffffffffffp+854, chars_format::fixed, 0,\r\n        \"2402405385217503806870193147368791232425691441085529245946594912407715684187841675981681750840423181014249\"\r\n        \"2512769341183209420372758871000082116013253501664366784705219958869809414178914039441934192620892611678512\"\r\n        \"1078506305883499821053475494485821960658878464\"},\r\n    {0x1.fffffffffffffp+855, chars_format::fixed, 0,\r\n        \"4804810770435007613740386294737582464851382882171058491893189824815431368375683351963363501680846362028498\"\r\n        \"5025538682366418840745517742000164232026507003328733569410439917739618828357828078883868385241785223357024\"\r\n        \"2157012611766999642106950988971643921317756928\"},\r\n    {0x1.fffffffffffffp+856, chars_format::fixed, 0,\r\n        \"9609621540870015227480772589475164929702765764342116983786379649630862736751366703926727003361692724056997\"\r\n        \"0051077364732837681491035484000328464053014006657467138820879835479237656715656157767736770483570446714048\"\r\n        \"4314025223533999284213901977943287842635513856\"},\r\n    {0x1.fffffffffffffp+857, chars_format::fixed, 0,\r\n        \"1921924308174003045496154517895032985940553152868423396757275929926172547350273340785345400672338544811399\"\r\n        \"4010215472946567536298207096800065692810602801331493427764175967095847531343131231553547354096714089342809\"\r\n        \"68628050447067998568427803955886575685271027712\"},\r\n    {0x1.fffffffffffffp+858, chars_format::fixed, 0,\r\n        \"3843848616348006090992309035790065971881106305736846793514551859852345094700546681570690801344677089622798\"\r\n        \"8020430945893135072596414193600131385621205602662986855528351934191695062686262463107094708193428178685619\"\r\n        \"37256100894135997136855607911773151370542055424\"},\r\n    {0x1.fffffffffffffp+859, chars_format::fixed, 0,\r\n        \"7687697232696012181984618071580131943762212611473693587029103719704690189401093363141381602689354179245597\"\r\n        \"6040861891786270145192828387200262771242411205325973711056703868383390125372524926214189416386856357371238\"\r\n        \"74512201788271994273711215823546302741084110848\"},\r\n    {0x1.fffffffffffffp+860, chars_format::fixed, 0,\r\n        \"1537539446539202436396923614316026388752442522294738717405820743940938037880218672628276320537870835849119\"\r\n        \"5208172378357254029038565677440052554248482241065194742211340773676678025074504985242837883277371271474247\"\r\n        \"749024403576543988547422431647092605482168221696\"},\r\n    {0x1.fffffffffffffp+861, chars_format::fixed, 0,\r\n        \"3075078893078404872793847228632052777504885044589477434811641487881876075760437345256552641075741671698239\"\r\n        \"0416344756714508058077131354880105108496964482130389484422681547353356050149009970485675766554742542948495\"\r\n        \"498048807153087977094844863294185210964336443392\"},\r\n    {0x1.fffffffffffffp+862, chars_format::fixed, 0,\r\n        \"6150157786156809745587694457264105555009770089178954869623282975763752151520874690513105282151483343396478\"\r\n        \"0832689513429016116154262709760210216993928964260778968845363094706712100298019940971351533109485085896990\"\r\n        \"996097614306175954189689726588370421928672886784\"},\r\n    {0x1.fffffffffffffp+863, chars_format::fixed, 0,\r\n        \"1230031557231361949117538891452821111001954017835790973924656595152750430304174938102621056430296668679295\"\r\n        \"6166537902685803223230852541952042043398785792852155793769072618941342420059603988194270306621897017179398\"\r\n        \"1992195228612351908379379453176740843857345773568\"},\r\n    {0x1.fffffffffffffp+864, chars_format::fixed, 0,\r\n        \"2460063114462723898235077782905642222003908035671581947849313190305500860608349876205242112860593337358591\"\r\n        \"2333075805371606446461705083904084086797571585704311587538145237882684840119207976388540613243794034358796\"\r\n        \"3984390457224703816758758906353481687714691547136\"},\r\n    {0x1.fffffffffffffp+865, chars_format::fixed, 0,\r\n        \"4920126228925447796470155565811284444007816071343163895698626380611001721216699752410484225721186674717182\"\r\n        \"4666151610743212892923410167808168173595143171408623175076290475765369680238415952777081226487588068717592\"\r\n        \"7968780914449407633517517812706963375429383094272\"},\r\n    {0x1.fffffffffffffp+866, chars_format::fixed, 0,\r\n        \"9840252457850895592940311131622568888015632142686327791397252761222003442433399504820968451442373349434364\"\r\n        \"9332303221486425785846820335616336347190286342817246350152580951530739360476831905554162452975176137435185\"\r\n        \"5937561828898815267035035625413926750858766188544\"},\r\n    {0x1.fffffffffffffp+867, chars_format::fixed, 0,\r\n        \"1968050491570179118588062226324513777603126428537265558279450552244400688486679900964193690288474669886872\"\r\n        \"9866460644297285157169364067123267269438057268563449270030516190306147872095366381110832490595035227487037\"\r\n        \"11875123657797630534070071250827853501717532377088\"},\r\n    {0x1.fffffffffffffp+868, chars_format::fixed, 0,\r\n        \"3936100983140358237176124452649027555206252857074531116558901104488801376973359801928387380576949339773745\"\r\n        \"9732921288594570314338728134246534538876114537126898540061032380612295744190732762221664981190070454974074\"\r\n        \"23750247315595261068140142501655707003435064754176\"},\r\n    {0x1.fffffffffffffp+869, chars_format::fixed, 0,\r\n        \"7872201966280716474352248905298055110412505714149062233117802208977602753946719603856774761153898679547491\"\r\n        \"9465842577189140628677456268493069077752229074253797080122064761224591488381465524443329962380140909948148\"\r\n        \"47500494631190522136280285003311414006870129508352\"},\r\n    {0x1.fffffffffffffp+870, chars_format::fixed, 0,\r\n        \"1574440393256143294870449781059611022082501142829812446623560441795520550789343920771354952230779735909498\"\r\n        \"3893168515437828125735491253698613815550445814850759416024412952244918297676293104888665992476028181989629\"\r\n        \"695000989262381044272560570006622828013740259016704\"},\r\n    {0x1.fffffffffffffp+871, chars_format::fixed, 0,\r\n        \"3148880786512286589740899562119222044165002285659624893247120883591041101578687841542709904461559471818996\"\r\n        \"7786337030875656251470982507397227631100891629701518832048825904489836595352586209777331984952056363979259\"\r\n        \"390001978524762088545121140013245656027480518033408\"},\r\n    {0x1.fffffffffffffp+872, chars_format::fixed, 0,\r\n        \"6297761573024573179481799124238444088330004571319249786494241767182082203157375683085419808923118943637993\"\r\n        \"5572674061751312502941965014794455262201783259403037664097651808979673190705172419554663969904112727958518\"\r\n        \"780003957049524177090242280026491312054961036066816\"},\r\n    {0x1.fffffffffffffp+873, chars_format::fixed, 0,\r\n        \"1259552314604914635896359824847688817666000914263849957298848353436416440631475136617083961784623788727598\"\r\n        \"7114534812350262500588393002958891052440356651880607532819530361795934638141034483910932793980822545591703\"\r\n        \"7560007914099048354180484560052982624109922072133632\"},\r\n    {0x1.fffffffffffffp+874, chars_format::fixed, 0,\r\n        \"2519104629209829271792719649695377635332001828527699914597696706872832881262950273234167923569247577455197\"\r\n        \"4229069624700525001176786005917782104880713303761215065639060723591869276282068967821865587961645091183407\"\r\n        \"5120015828198096708360969120105965248219844144267264\"},\r\n    {0x1.fffffffffffffp+875, chars_format::fixed, 0,\r\n        \"5038209258419658543585439299390755270664003657055399829195393413745665762525900546468335847138495154910394\"\r\n        \"8458139249401050002353572011835564209761426607522430131278121447183738552564137935643731175923290182366815\"\r\n        \"0240031656396193416721938240211930496439688288534528\"},\r\n    {0x1.fffffffffffffp+876, chars_format::fixed, 0,\r\n        \"1007641851683931708717087859878151054132800731411079965839078682749133152505180109293667169427699030982078\"\r\n        \"9691627849880210000470714402367112841952285321504486026255624289436747710512827587128746235184658036473363\"\r\n        \"00480063312792386833443876480423860992879376577069056\"},\r\n    {0x1.fffffffffffffp+877, chars_format::fixed, 0,\r\n        \"2015283703367863417434175719756302108265601462822159931678157365498266305010360218587334338855398061964157\"\r\n        \"9383255699760420000941428804734225683904570643008972052511248578873495421025655174257492470369316072946726\"\r\n        \"00960126625584773666887752960847721985758753154138112\"},\r\n    {0x1.fffffffffffffp+878, chars_format::fixed, 0,\r\n        \"4030567406735726834868351439512604216531202925644319863356314730996532610020720437174668677710796123928315\"\r\n        \"8766511399520840001882857609468451367809141286017944105022497157746990842051310348514984940738632145893452\"\r\n        \"01920253251169547333775505921695443971517506308276224\"},\r\n    {0x1.fffffffffffffp+879, chars_format::fixed, 0,\r\n        \"8061134813471453669736702879025208433062405851288639726712629461993065220041440874349337355421592247856631\"\r\n        \"7533022799041680003765715218936902735618282572035888210044994315493981684102620697029969881477264291786904\"\r\n        \"03840506502339094667551011843390887943035012616552448\"},\r\n    {0x1.fffffffffffffp+880, chars_format::fixed, 0,\r\n        \"1612226962694290733947340575805041686612481170257727945342525892398613044008288174869867471084318449571326\"\r\n        \"3506604559808336000753143043787380547123656514407177642008998863098796336820524139405993976295452858357380\"\r\n        \"807681013004678189335102023686781775886070025233104896\"},\r\n    {0x1.fffffffffffffp+881, chars_format::fixed, 0,\r\n        \"3224453925388581467894681151610083373224962340515455890685051784797226088016576349739734942168636899142652\"\r\n        \"7013209119616672001506286087574761094247313028814355284017997726197592673641048278811987952590905716714761\"\r\n        \"615362026009356378670204047373563551772140050466209792\"},\r\n    {0x1.fffffffffffffp+882, chars_format::fixed, 0,\r\n        \"6448907850777162935789362303220166746449924681030911781370103569594452176033152699479469884337273798285305\"\r\n        \"4026418239233344003012572175149522188494626057628710568035995452395185347282096557623975905181811433429523\"\r\n        \"230724052018712757340408094747127103544280100932419584\"},\r\n    {0x1.fffffffffffffp+883, chars_format::fixed, 0,\r\n        \"1289781570155432587157872460644033349289984936206182356274020713918890435206630539895893976867454759657061\"\r\n        \"0805283647846668800602514435029904437698925211525742113607199090479037069456419311524795181036362286685904\"\r\n        \"6461448104037425514680816189494254207088560201864839168\"},\r\n    {0x1.fffffffffffffp+884, chars_format::fixed, 0,\r\n        \"2579563140310865174315744921288066698579969872412364712548041427837780870413261079791787953734909519314122\"\r\n        \"1610567295693337601205028870059808875397850423051484227214398180958074138912838623049590362072724573371809\"\r\n        \"2922896208074851029361632378988508414177120403729678336\"},\r\n    {0x1.fffffffffffffp+885, chars_format::fixed, 0,\r\n        \"5159126280621730348631489842576133397159939744824729425096082855675561740826522159583575907469819038628244\"\r\n        \"3221134591386675202410057740119617750795700846102968454428796361916148277825677246099180724145449146743618\"\r\n        \"5845792416149702058723264757977016828354240807459356672\"},\r\n    {0x1.fffffffffffffp+886, chars_format::fixed, 0,\r\n        \"1031825256124346069726297968515226679431987948964945885019216571135112348165304431916715181493963807725648\"\r\n        \"8644226918277335040482011548023923550159140169220593690885759272383229655565135449219836144829089829348723\"\r\n        \"71691584832299404117446529515954033656708481614918713344\"},\r\n    {0x1.fffffffffffffp+887, chars_format::fixed, 0,\r\n        \"2063650512248692139452595937030453358863975897929891770038433142270224696330608863833430362987927615451297\"\r\n        \"7288453836554670080964023096047847100318280338441187381771518544766459311130270898439672289658179658697447\"\r\n        \"43383169664598808234893059031908067313416963229837426688\"},\r\n    {0x1.fffffffffffffp+888, chars_format::fixed, 0,\r\n        \"4127301024497384278905191874060906717727951795859783540076866284540449392661217727666860725975855230902595\"\r\n        \"4576907673109340161928046192095694200636560676882374763543037089532918622260541796879344579316359317394894\"\r\n        \"86766339329197616469786118063816134626833926459674853376\"},\r\n    {0x1.fffffffffffffp+889, chars_format::fixed, 0,\r\n        \"8254602048994768557810383748121813435455903591719567080153732569080898785322435455333721451951710461805190\"\r\n        \"9153815346218680323856092384191388401273121353764749527086074179065837244521083593758689158632718634789789\"\r\n        \"73532678658395232939572236127632269253667852919349706752\"},\r\n    {0x1.fffffffffffffp+890, chars_format::fixed, 0,\r\n        \"1650920409798953711562076749624362687091180718343913416030746513816179757064487091066744290390342092361038\"\r\n        \"1830763069243736064771218476838277680254624270752949905417214835813167448904216718751737831726543726957957\"\r\n        \"947065357316790465879144472255264538507335705838699413504\"},\r\n    {0x1.fffffffffffffp+891, chars_format::fixed, 0,\r\n        \"3301840819597907423124153499248725374182361436687826832061493027632359514128974182133488580780684184722076\"\r\n        \"3661526138487472129542436953676555360509248541505899810834429671626334897808433437503475663453087453915915\"\r\n        \"894130714633580931758288944510529077014671411677398827008\"},\r\n    {0x1.fffffffffffffp+892, chars_format::fixed, 0,\r\n        \"6603681639195814846248306998497450748364722873375653664122986055264719028257948364266977161561368369444152\"\r\n        \"7323052276974944259084873907353110721018497083011799621668859343252669795616866875006951326906174907831831\"\r\n        \"788261429267161863516577889021058154029342823354797654016\"},\r\n    {0x1.fffffffffffffp+893, chars_format::fixed, 0,\r\n        \"1320736327839162969249661399699490149672944574675130732824597211052943805651589672853395432312273673888830\"\r\n        \"5464610455394988851816974781470622144203699416602359924333771868650533959123373375001390265381234981566366\"\r\n        \"3576522858534323727033155778042116308058685646709595308032\"},\r\n    {0x1.fffffffffffffp+894, chars_format::fixed, 0,\r\n        \"2641472655678325938499322799398980299345889149350261465649194422105887611303179345706790864624547347777661\"\r\n        \"0929220910789977703633949562941244288407398833204719848667543737301067918246746750002780530762469963132732\"\r\n        \"7153045717068647454066311556084232616117371293419190616064\"},\r\n    {0x1.fffffffffffffp+895, chars_format::fixed, 0,\r\n        \"5282945311356651876998645598797960598691778298700522931298388844211775222606358691413581729249094695555322\"\r\n        \"1858441821579955407267899125882488576814797666409439697335087474602135836493493500005561061524939926265465\"\r\n        \"4306091434137294908132623112168465232234742586838381232128\"},\r\n    {0x1.fffffffffffffp+896, chars_format::fixed, 0,\r\n        \"1056589062271330375399729119759592119738355659740104586259677768842355044521271738282716345849818939111064\"\r\n        \"4371688364315991081453579825176497715362959533281887939467017494920427167298698700001112212304987985253093\"\r\n        \"08612182868274589816265246224336930464469485173676762464256\"},\r\n    {0x1.fffffffffffffp+897, chars_format::fixed, 0,\r\n        \"2113178124542660750799458239519184239476711319480209172519355537684710089042543476565432691699637878222128\"\r\n        \"8743376728631982162907159650352995430725919066563775878934034989840854334597397400002224424609975970506186\"\r\n        \"17224365736549179632530492448673860928938970347353524928512\"},\r\n    {0x1.fffffffffffffp+898, chars_format::fixed, 0,\r\n        \"4226356249085321501598916479038368478953422638960418345038711075369420178085086953130865383399275756444257\"\r\n        \"7486753457263964325814319300705990861451838133127551757868069979681708669194794800004448849219951941012372\"\r\n        \"34448731473098359265060984897347721857877940694707049857024\"},\r\n    {0x1.fffffffffffffp+899, chars_format::fixed, 0,\r\n        \"8452712498170643003197832958076736957906845277920836690077422150738840356170173906261730766798551512888515\"\r\n        \"4973506914527928651628638601411981722903676266255103515736139959363417338389589600008897698439903882024744\"\r\n        \"68897462946196718530121969794695443715755881389414099714048\"},\r\n    {0x1.fffffffffffffp+900, chars_format::fixed, 0,\r\n        \"1690542499634128600639566591615347391581369055584167338015484430147768071234034781252346153359710302577703\"\r\n        \"0994701382905585730325727720282396344580735253251020703147227991872683467677917920001779539687980776404948\"\r\n        \"937794925892393437060243939589390887431511762778828199428096\"},\r\n    {0x1.fffffffffffffp+901, chars_format::fixed, 0,\r\n        \"3381084999268257201279133183230694783162738111168334676030968860295536142468069562504692306719420605155406\"\r\n        \"1989402765811171460651455440564792689161470506502041406294455983745366935355835840003559079375961552809897\"\r\n        \"875589851784786874120487879178781774863023525557656398856192\"},\r\n    {0x1.fffffffffffffp+902, chars_format::fixed, 0,\r\n        \"6762169998536514402558266366461389566325476222336669352061937720591072284936139125009384613438841210310812\"\r\n        \"3978805531622342921302910881129585378322941013004082812588911967490733870711671680007118158751923105619795\"\r\n        \"751179703569573748240975758357563549726047051115312797712384\"},\r\n    {0x1.fffffffffffffp+903, chars_format::fixed, 0,\r\n        \"1352433999707302880511653273292277913265095244467333870412387544118214456987227825001876922687768242062162\"\r\n        \"4795761106324468584260582176225917075664588202600816562517782393498146774142334336001423631750384621123959\"\r\n        \"1502359407139147496481951516715127099452094102230625595424768\"},\r\n    {0x1.fffffffffffffp+904, chars_format::fixed, 0,\r\n        \"2704867999414605761023306546584555826530190488934667740824775088236428913974455650003753845375536484124324\"\r\n        \"9591522212648937168521164352451834151329176405201633125035564786996293548284668672002847263500769242247918\"\r\n        \"3004718814278294992963903033430254198904188204461251190849536\"},\r\n    {0x1.fffffffffffffp+905, chars_format::fixed, 0,\r\n        \"5409735998829211522046613093169111653060380977869335481649550176472857827948911300007507690751072968248649\"\r\n        \"9183044425297874337042328704903668302658352810403266250071129573992587096569337344005694527001538484495836\"\r\n        \"6009437628556589985927806066860508397808376408922502381699072\"},\r\n    {0x1.fffffffffffffp+906, chars_format::fixed, 0,\r\n        \"1081947199765842304409322618633822330612076195573867096329910035294571565589782260001501538150214593649729\"\r\n        \"9836608885059574867408465740980733660531670562080653250014225914798517419313867468801138905400307696899167\"\r\n        \"32018875257113179971855612133721016795616752817845004763398144\"},\r\n    {0x1.fffffffffffffp+907, chars_format::fixed, 0,\r\n        \"2163894399531684608818645237267644661224152391147734192659820070589143131179564520003003076300429187299459\"\r\n        \"9673217770119149734816931481961467321063341124161306500028451829597034838627734937602277810800615393798334\"\r\n        \"64037750514226359943711224267442033591233505635690009526796288\"},\r\n    {0x1.fffffffffffffp+908, chars_format::fixed, 0,\r\n        \"4327788799063369217637290474535289322448304782295468385319640141178286262359129040006006152600858374598919\"\r\n        \"9346435540238299469633862963922934642126682248322613000056903659194069677255469875204555621601230787596669\"\r\n        \"28075501028452719887422448534884067182467011271380019053592576\"},\r\n    {0x1.fffffffffffffp+909, chars_format::fixed, 0,\r\n        \"8655577598126738435274580949070578644896609564590936770639280282356572524718258080012012305201716749197839\"\r\n        \"8692871080476598939267725927845869284253364496645226000113807318388139354510939750409111243202461575193338\"\r\n        \"56151002056905439774844897069768134364934022542760038107185152\"},\r\n    {0x1.fffffffffffffp+910, chars_format::fixed, 0,\r\n        \"1731115519625347687054916189814115728979321912918187354127856056471314504943651616002402461040343349839567\"\r\n        \"9738574216095319787853545185569173856850672899329045200022761463677627870902187950081822248640492315038667\"\r\n        \"712302004113810879549689794139536268729868045085520076214370304\"},\r\n    {0x1.fffffffffffffp+911, chars_format::fixed, 0,\r\n        \"3462231039250695374109832379628231457958643825836374708255712112942629009887303232004804922080686699679135\"\r\n        \"9477148432190639575707090371138347713701345798658090400045522927355255741804375900163644497280984630077335\"\r\n        \"424604008227621759099379588279072537459736090171040152428740608\"},\r\n    {0x1.fffffffffffffp+912, chars_format::fixed, 0,\r\n        \"6924462078501390748219664759256462915917287651672749416511424225885258019774606464009609844161373399358271\"\r\n        \"8954296864381279151414180742276695427402691597316180800091045854710511483608751800327288994561969260154670\"\r\n        \"849208016455243518198759176558145074919472180342080304857481216\"},\r\n    {0x1.fffffffffffffp+913, chars_format::fixed, 0,\r\n        \"1384892415700278149643932951851292583183457530334549883302284845177051603954921292801921968832274679871654\"\r\n        \"3790859372876255830282836148455339085480538319463236160018209170942102296721750360065457798912393852030934\"\r\n        \"1698416032910487036397518353116290149838944360684160609714962432\"},\r\n    {0x1.fffffffffffffp+914, chars_format::fixed, 0,\r\n        \"2769784831400556299287865903702585166366915060669099766604569690354103207909842585603843937664549359743308\"\r\n        \"7581718745752511660565672296910678170961076638926472320036418341884204593443500720130915597824787704061868\"\r\n        \"3396832065820974072795036706232580299677888721368321219429924864\"},\r\n    {0x1.fffffffffffffp+915, chars_format::fixed, 0,\r\n        \"5539569662801112598575731807405170332733830121338199533209139380708206415819685171207687875329098719486617\"\r\n        \"5163437491505023321131344593821356341922153277852944640072836683768409186887001440261831195649575408123736\"\r\n        \"6793664131641948145590073412465160599355777442736642438859849728\"},\r\n    {0x1.fffffffffffffp+916, chars_format::fixed, 0,\r\n        \"1107913932560222519715146361481034066546766024267639906641827876141641283163937034241537575065819743897323\"\r\n        \"5032687498301004664226268918764271268384430655570588928014567336753681837377400288052366239129915081624747\"\r\n        \"33587328263283896291180146824930321198711554885473284877719699456\"},\r\n    {0x1.fffffffffffffp+917, chars_format::fixed, 0,\r\n        \"2215827865120445039430292722962068133093532048535279813283655752283282566327874068483075150131639487794647\"\r\n        \"0065374996602009328452537837528542536768861311141177856029134673507363674754800576104732478259830163249494\"\r\n        \"67174656526567792582360293649860642397423109770946569755439398912\"},\r\n    {0x1.fffffffffffffp+918, chars_format::fixed, 0,\r\n        \"4431655730240890078860585445924136266187064097070559626567311504566565132655748136966150300263278975589294\"\r\n        \"0130749993204018656905075675057085073537722622282355712058269347014727349509601152209464956519660326498989\"\r\n        \"34349313053135585164720587299721284794846219541893139510878797824\"},\r\n    {0x1.fffffffffffffp+919, chars_format::fixed, 0,\r\n        \"8863311460481780157721170891848272532374128194141119253134623009133130265311496273932300600526557951178588\"\r\n        \"0261499986408037313810151350114170147075445244564711424116538694029454699019202304418929913039320652997978\"\r\n        \"68698626106271170329441174599442569589692439083786279021757595648\"},\r\n    {0x1.fffffffffffffp+920, chars_format::fixed, 0,\r\n        \"1772662292096356031544234178369654506474825638828223850626924601826626053062299254786460120105311590235717\"\r\n        \"6052299997281607462762030270022834029415089048912942284823307738805890939803840460883785982607864130599595\"\r\n        \"737397252212542340658882349198885139179384878167572558043515191296\"},\r\n    {0x1.fffffffffffffp+921, chars_format::fixed, 0,\r\n        \"3545324584192712063088468356739309012949651277656447701253849203653252106124598509572920240210623180471435\"\r\n        \"2104599994563214925524060540045668058830178097825884569646615477611781879607680921767571965215728261199191\"\r\n        \"474794504425084681317764698397770278358769756335145116087030382592\"},\r\n    {0x1.fffffffffffffp+922, chars_format::fixed, 0,\r\n        \"7090649168385424126176936713478618025899302555312895402507698407306504212249197019145840480421246360942870\"\r\n        \"4209199989126429851048121080091336117660356195651769139293230955223563759215361843535143930431456522398382\"\r\n        \"949589008850169362635529396795540556717539512670290232174060765184\"},\r\n    {0x1.fffffffffffffp+923, chars_format::fixed, 0,\r\n        \"1418129833677084825235387342695723605179860511062579080501539681461300842449839403829168096084249272188574\"\r\n        \"0841839997825285970209624216018267223532071239130353827858646191044712751843072368707028786086291304479676\"\r\n        \"5899178017700338725271058793591081113435079025340580464348121530368\"},\r\n    {0x1.fffffffffffffp+924, chars_format::fixed, 0,\r\n        \"2836259667354169650470774685391447210359721022125158161003079362922601684899678807658336192168498544377148\"\r\n        \"1683679995650571940419248432036534447064142478260707655717292382089425503686144737414057572172582608959353\"\r\n        \"1798356035400677450542117587182162226870158050681160928696243060736\"},\r\n    {0x1.fffffffffffffp+925, chars_format::fixed, 0,\r\n        \"5672519334708339300941549370782894420719442044250316322006158725845203369799357615316672384336997088754296\"\r\n        \"3367359991301143880838496864073068894128284956521415311434584764178851007372289474828115144345165217918706\"\r\n        \"3596712070801354901084235174364324453740316101362321857392486121472\"},\r\n    {0x1.fffffffffffffp+926, chars_format::fixed, 0,\r\n        \"1134503866941667860188309874156578884143888408850063264401231745169040673959871523063334476867399417750859\"\r\n        \"2673471998260228776167699372814613778825656991304283062286916952835770201474457894965623028869033043583741\"\r\n        \"27193424141602709802168470348728648907480632202724643714784972242944\"},\r\n    {0x1.fffffffffffffp+927, chars_format::fixed, 0,\r\n        \"2269007733883335720376619748313157768287776817700126528802463490338081347919743046126668953734798835501718\"\r\n        \"5346943996520457552335398745629227557651313982608566124573833905671540402948915789931246057738066087167482\"\r\n        \"54386848283205419604336940697457297814961264405449287429569944485888\"},\r\n    {0x1.fffffffffffffp+928, chars_format::fixed, 0,\r\n        \"4538015467766671440753239496626315536575553635400253057604926980676162695839486092253337907469597671003437\"\r\n        \"0693887993040915104670797491258455115302627965217132249147667811343080805897831579862492115476132174334965\"\r\n        \"08773696566410839208673881394914595629922528810898574859139888971776\"},\r\n    {0x1.fffffffffffffp+929, chars_format::fixed, 0,\r\n        \"9076030935533342881506478993252631073151107270800506115209853961352325391678972184506675814939195342006874\"\r\n        \"1387775986081830209341594982516910230605255930434264498295335622686161611795663159724984230952264348669930\"\r\n        \"17547393132821678417347762789829191259845057621797149718279777943552\"},\r\n    {0x1.fffffffffffffp+930, chars_format::fixed, 0,\r\n        \"1815206187106668576301295798650526214630221454160101223041970792270465078335794436901335162987839068401374\"\r\n        \"8277555197216366041868318996503382046121051186086852899659067124537232322359132631944996846190452869733986\"\r\n        \"035094786265643356834695525579658382519690115243594299436559555887104\"},\r\n    {0x1.fffffffffffffp+931, chars_format::fixed, 0,\r\n        \"3630412374213337152602591597301052429260442908320202446083941584540930156671588873802670325975678136802749\"\r\n        \"6555110394432732083736637993006764092242102372173705799318134249074464644718265263889993692380905739467972\"\r\n        \"070189572531286713669391051159316765039380230487188598873119111774208\"},\r\n    {0x1.fffffffffffffp+932, chars_format::fixed, 0,\r\n        \"7260824748426674305205183194602104858520885816640404892167883169081860313343177747605340651951356273605499\"\r\n        \"3110220788865464167473275986013528184484204744347411598636268498148929289436530527779987384761811478935944\"\r\n        \"140379145062573427338782102318633530078760460974377197746238223548416\"},\r\n    {0x1.fffffffffffffp+933, chars_format::fixed, 0,\r\n        \"1452164949685334861041036638920420971704177163328080978433576633816372062668635549521068130390271254721099\"\r\n        \"8622044157773092833494655197202705636896840948869482319727253699629785857887306105555997476952362295787188\"\r\n        \"8280758290125146854677564204637267060157520921948754395492476447096832\"},\r\n    {0x1.fffffffffffffp+934, chars_format::fixed, 0,\r\n        \"2904329899370669722082073277840841943408354326656161956867153267632744125337271099042136260780542509442199\"\r\n        \"7244088315546185666989310394405411273793681897738964639454507399259571715774612211111994953904724591574377\"\r\n        \"6561516580250293709355128409274534120315041843897508790984952894193664\"},\r\n    {0x1.fffffffffffffp+935, chars_format::fixed, 0,\r\n        \"5808659798741339444164146555681683886816708653312323913734306535265488250674542198084272521561085018884399\"\r\n        \"4488176631092371333978620788810822547587363795477929278909014798519143431549224422223989907809449183148755\"\r\n        \"3123033160500587418710256818549068240630083687795017581969905788387328\"},\r\n    {0x1.fffffffffffffp+936, chars_format::fixed, 0,\r\n        \"1161731959748267888832829311136336777363341730662464782746861307053097650134908439616854504312217003776879\"\r\n        \"8897635326218474266795724157762164509517472759095585855781802959703828686309844884444797981561889836629751\"\r\n        \"06246066321001174837420513637098136481260167375590035163939811576774656\"},\r\n    {0x1.fffffffffffffp+937, chars_format::fixed, 0,\r\n        \"2323463919496535777665658622272673554726683461324929565493722614106195300269816879233709008624434007553759\"\r\n        \"7795270652436948533591448315524329019034945518191171711563605919407657372619689768889595963123779673259502\"\r\n        \"12492132642002349674841027274196272962520334751180070327879623153549312\"},\r\n    {0x1.fffffffffffffp+938, chars_format::fixed, 0,\r\n        \"4646927838993071555331317244545347109453366922649859130987445228212390600539633758467418017248868015107519\"\r\n        \"5590541304873897067182896631048658038069891036382343423127211838815314745239379537779191926247559346519004\"\r\n        \"24984265284004699349682054548392545925040669502360140655759246307098624\"},\r\n    {0x1.fffffffffffffp+939, chars_format::fixed, 0,\r\n        \"9293855677986143110662634489090694218906733845299718261974890456424781201079267516934836034497736030215039\"\r\n        \"1181082609747794134365793262097316076139782072764686846254423677630629490478759075558383852495118693038008\"\r\n        \"49968530568009398699364109096785091850081339004720281311518492614197248\"},\r\n    {0x1.fffffffffffffp+940, chars_format::fixed, 0,\r\n        \"1858771135597228622132526897818138843781346769059943652394978091284956240215853503386967206899547206043007\"\r\n        \"8236216521949558826873158652419463215227956414552937369250884735526125898095751815111676770499023738607601\"\r\n        \"699937061136018797398728218193570183700162678009440562623036985228394496\"},\r\n    {0x1.fffffffffffffp+941, chars_format::fixed, 0,\r\n        \"3717542271194457244265053795636277687562693538119887304789956182569912480431707006773934413799094412086015\"\r\n        \"6472433043899117653746317304838926430455912829105874738501769471052251796191503630223353540998047477215203\"\r\n        \"399874122272037594797456436387140367400325356018881125246073970456788992\"},\r\n    {0x1.fffffffffffffp+942, chars_format::fixed, 0,\r\n        \"7435084542388914488530107591272555375125387076239774609579912365139824960863414013547868827598188824172031\"\r\n        \"2944866087798235307492634609677852860911825658211749477003538942104503592383007260446707081996094954430406\"\r\n        \"799748244544075189594912872774280734800650712037762250492147940913577984\"},\r\n    {0x1.fffffffffffffp+943, chars_format::fixed, 0,\r\n        \"1487016908477782897706021518254511075025077415247954921915982473027964992172682802709573765519637764834406\"\r\n        \"2588973217559647061498526921935570572182365131642349895400707788420900718476601452089341416399218990886081\"\r\n        \"3599496489088150379189825745548561469601301424075524500984295881827155968\"},\r\n    {0x1.fffffffffffffp+944, chars_format::fixed, 0,\r\n        \"2974033816955565795412043036509022150050154830495909843831964946055929984345365605419147531039275529668812\"\r\n        \"5177946435119294122997053843871141144364730263284699790801415576841801436953202904178682832798437981772162\"\r\n        \"7198992978176300758379651491097122939202602848151049001968591763654311936\"},\r\n    {0x1.fffffffffffffp+945, chars_format::fixed, 0,\r\n        \"5948067633911131590824086073018044300100309660991819687663929892111859968690731210838295062078551059337625\"\r\n        \"0355892870238588245994107687742282288729460526569399581602831153683602873906405808357365665596875963544325\"\r\n        \"4397985956352601516759302982194245878405205696302098003937183527308623872\"},\r\n    {0x1.fffffffffffffp+946, chars_format::fixed, 0,\r\n        \"1189613526782226318164817214603608860020061932198363937532785978422371993738146242167659012415710211867525\"\r\n        \"0071178574047717649198821537548456457745892105313879916320566230736720574781281161671473133119375192708865\"\r\n        \"08795971912705203033518605964388491756810411392604196007874367054617247744\"},\r\n    {0x1.fffffffffffffp+947, chars_format::fixed, 0,\r\n        \"2379227053564452636329634429207217720040123864396727875065571956844743987476292484335318024831420423735050\"\r\n        \"0142357148095435298397643075096912915491784210627759832641132461473441149562562323342946266238750385417730\"\r\n        \"17591943825410406067037211928776983513620822785208392015748734109234495488\"},\r\n    {0x1.fffffffffffffp+948, chars_format::fixed, 0,\r\n        \"4758454107128905272659268858414435440080247728793455750131143913689487974952584968670636049662840847470100\"\r\n        \"0284714296190870596795286150193825830983568421255519665282264922946882299125124646685892532477500770835460\"\r\n        \"35183887650820812134074423857553967027241645570416784031497468218468990976\"},\r\n    {0x1.fffffffffffffp+949, chars_format::fixed, 0,\r\n        \"9516908214257810545318537716828870880160495457586911500262287827378975949905169937341272099325681694940200\"\r\n        \"0569428592381741193590572300387651661967136842511039330564529845893764598250249293371785064955001541670920\"\r\n        \"70367775301641624268148847715107934054483291140833568062994936436937981952\"},\r\n    {0x1.fffffffffffffp+950, chars_format::fixed, 0,\r\n        \"1903381642851562109063707543365774176032099091517382300052457565475795189981033987468254419865136338988040\"\r\n        \"0113885718476348238718114460077530332393427368502207866112905969178752919650049858674357012991000308334184\"\r\n        \"140735550603283248536297695430215868108966582281667136125989872873875963904\"},\r\n    {0x1.fffffffffffffp+951, chars_format::fixed, 0,\r\n        \"3806763285703124218127415086731548352064198183034764600104915130951590379962067974936508839730272677976080\"\r\n        \"0227771436952696477436228920155060664786854737004415732225811938357505839300099717348714025982000616668368\"\r\n        \"281471101206566497072595390860431736217933164563334272251979745747751927808\"},\r\n    {0x1.fffffffffffffp+952, chars_format::fixed, 0,\r\n        \"7613526571406248436254830173463096704128396366069529200209830261903180759924135949873017679460545355952160\"\r\n        \"0455542873905392954872457840310121329573709474008831464451623876715011678600199434697428051964001233336736\"\r\n        \"562942202413132994145190781720863472435866329126668544503959491495503855616\"},\r\n    {0x1.fffffffffffffp+953, chars_format::fixed, 0,\r\n        \"1522705314281249687250966034692619340825679273213905840041966052380636151984827189974603535892109071190432\"\r\n        \"0091108574781078590974491568062024265914741894801766292890324775343002335720039886939485610392800246667347\"\r\n        \"3125884404826265988290381563441726944871732658253337089007918982991007711232\"},\r\n    {0x1.fffffffffffffp+954, chars_format::fixed, 0,\r\n        \"3045410628562499374501932069385238681651358546427811680083932104761272303969654379949207071784218142380864\"\r\n        \"0182217149562157181948983136124048531829483789603532585780649550686004671440079773878971220785600493334694\"\r\n        \"6251768809652531976580763126883453889743465316506674178015837965982015422464\"},\r\n    {0x1.fffffffffffffp+955, chars_format::fixed, 0,\r\n        \"6090821257124998749003864138770477363302717092855623360167864209522544607939308759898414143568436284761728\"\r\n        \"0364434299124314363897966272248097063658967579207065171561299101372009342880159547757942441571200986669389\"\r\n        \"2503537619305063953161526253766907779486930633013348356031675931964030844928\"},\r\n    {0x1.fffffffffffffp+956, chars_format::fixed, 0,\r\n        \"1218164251424999749800772827754095472660543418571124672033572841904508921587861751979682828713687256952345\"\r\n        \"6072886859824862872779593254449619412731793515841413034312259820274401868576031909551588488314240197333877\"\r\n        \"85007075238610127906323052507533815558973861266026696712063351863928061689856\"},\r\n    {0x1.fffffffffffffp+957, chars_format::fixed, 0,\r\n        \"2436328502849999499601545655508190945321086837142249344067145683809017843175723503959365657427374513904691\"\r\n        \"2145773719649725745559186508899238825463587031682826068624519640548803737152063819103176976628480394667755\"\r\n        \"70014150477220255812646105015067631117947722532053393424126703727856123379712\"},\r\n    {0x1.fffffffffffffp+958, chars_format::fixed, 0,\r\n        \"4872657005699998999203091311016381890642173674284498688134291367618035686351447007918731314854749027809382\"\r\n        \"4291547439299451491118373017798477650927174063365652137249039281097607474304127638206353953256960789335511\"\r\n        \"40028300954440511625292210030135262235895445064106786848253407455712246759424\"},\r\n    {0x1.fffffffffffffp+959, chars_format::fixed, 0,\r\n        \"9745314011399997998406182622032763781284347348568997376268582735236071372702894015837462629709498055618764\"\r\n        \"8583094878598902982236746035596955301854348126731304274498078562195214948608255276412707906513921578671022\"\r\n        \"80056601908881023250584420060270524471790890128213573696506814911424493518848\"},\r\n    {0x1.fffffffffffffp+960, chars_format::fixed, 0,\r\n        \"1949062802279999599681236524406552756256869469713799475253716547047214274540578803167492525941899611123752\"\r\n        \"9716618975719780596447349207119391060370869625346260854899615712439042989721651055282541581302784315734204\"\r\n        \"560113203817762046501168840120541048943581780256427147393013629822848987037696\"},\r\n    {0x1.fffffffffffffp+961, chars_format::fixed, 0,\r\n        \"3898125604559999199362473048813105512513738939427598950507433094094428549081157606334985051883799222247505\"\r\n        \"9433237951439561192894698414238782120741739250692521709799231424878085979443302110565083162605568631468409\"\r\n        \"120226407635524093002337680241082097887163560512854294786027259645697974075392\"},\r\n    {0x1.fffffffffffffp+962, chars_format::fixed, 0,\r\n        \"7796251209119998398724946097626211025027477878855197901014866188188857098162315212669970103767598444495011\"\r\n        \"8866475902879122385789396828477564241483478501385043419598462849756171958886604221130166325211137262936818\"\r\n        \"240452815271048186004675360482164195774327121025708589572054519291395948150784\"},\r\n    {0x1.fffffffffffffp+963, chars_format::fixed, 0,\r\n        \"1559250241823999679744989219525242205005495575771039580202973237637771419632463042533994020753519688899002\"\r\n        \"3773295180575824477157879365695512848296695700277008683919692569951234391777320844226033265042227452587363\"\r\n        \"6480905630542096372009350720964328391548654242051417179144109038582791896301568\"},\r\n    {0x1.fffffffffffffp+964, chars_format::fixed, 0,\r\n        \"3118500483647999359489978439050484410010991151542079160405946475275542839264926085067988041507039377798004\"\r\n        \"7546590361151648954315758731391025696593391400554017367839385139902468783554641688452066530084454905174727\"\r\n        \"2961811261084192744018701441928656783097308484102834358288218077165583792603136\"},\r\n    {0x1.fffffffffffffp+965, chars_format::fixed, 0,\r\n        \"6237000967295998718979956878100968820021982303084158320811892950551085678529852170135976083014078755596009\"\r\n        \"5093180722303297908631517462782051393186782801108034735678770279804937567109283376904133060168909810349454\"\r\n        \"5923622522168385488037402883857313566194616968205668716576436154331167585206272\"},\r\n    {0x1.fffffffffffffp+966, chars_format::fixed, 0,\r\n        \"1247400193459199743795991375620193764004396460616831664162378590110217135705970434027195216602815751119201\"\r\n        \"9018636144460659581726303492556410278637356560221606947135754055960987513421856675380826612033781962069890\"\r\n        \"91847245044336770976074805767714627132389233936411337433152872308662335170412544\"},\r\n    {0x1.fffffffffffffp+967, chars_format::fixed, 0,\r\n        \"2494800386918399487591982751240387528008792921233663328324757180220434271411940868054390433205631502238403\"\r\n        \"8037272288921319163452606985112820557274713120443213894271508111921975026843713350761653224067563924139781\"\r\n        \"83694490088673541952149611535429254264778467872822674866305744617324670340825088\"},\r\n    {0x1.fffffffffffffp+968, chars_format::fixed, 0,\r\n        \"4989600773836798975183965502480775056017585842467326656649514360440868542823881736108780866411263004476807\"\r\n        \"6074544577842638326905213970225641114549426240886427788543016223843950053687426701523306448135127848279563\"\r\n        \"67388980177347083904299223070858508529556935745645349732611489234649340681650176\"},\r\n    {0x1.fffffffffffffp+969, chars_format::fixed, 0,\r\n        \"9979201547673597950367931004961550112035171684934653313299028720881737085647763472217561732822526008953615\"\r\n        \"2149089155685276653810427940451282229098852481772855577086032447687900107374853403046612896270255696559127\"\r\n        \"34777960354694167808598446141717017059113871491290699465222978469298681363300352\"},\r\n    {0x1.fffffffffffffp+970, chars_format::fixed, 0,\r\n        \"1995840309534719590073586200992310022407034336986930662659805744176347417129552694443512346564505201790723\"\r\n        \"0429817831137055330762085588090256445819770496354571115417206489537580021474970680609322579254051139311825\"\r\n        \"469555920709388335617196892283434034118227742982581398930445956938597362726600704\"},\r\n    {0x1.fffffffffffffp+971, chars_format::fixed, 0,\r\n        \"3991680619069439180147172401984620044814068673973861325319611488352694834259105388887024693129010403581446\"\r\n        \"0859635662274110661524171176180512891639540992709142230834412979075160042949941361218645158508102278623650\"\r\n        \"939111841418776671234393784566868068236455485965162797860891913877194725453201408\"},\r\n    {0x1.fffffffffffffp+972, chars_format::fixed, 0,\r\n        \"7983361238138878360294344803969240089628137347947722650639222976705389668518210777774049386258020807162892\"\r\n        \"1719271324548221323048342352361025783279081985418284461668825958150320085899882722437290317016204557247301\"\r\n        \"878223682837553342468787569133736136472910971930325595721783827754389450906402816\"},\r\n    {0x1.fffffffffffffp+973, chars_format::fixed, 0,\r\n        \"1596672247627775672058868960793848017925627469589544530127844595341077933703642155554809877251604161432578\"\r\n        \"4343854264909644264609668470472205156655816397083656892333765191630064017179976544487458063403240911449460\"\r\n        \"3756447365675106684937575138267472272945821943860651191443567655508778901812805632\"},\r\n    {0x1.fffffffffffffp+974, chars_format::fixed, 0,\r\n        \"3193344495255551344117737921587696035851254939179089060255689190682155867407284311109619754503208322865156\"\r\n        \"8687708529819288529219336940944410313311632794167313784667530383260128034359953088974916126806481822898920\"\r\n        \"7512894731350213369875150276534944545891643887721302382887135311017557803625611264\"},\r\n    {0x1.fffffffffffffp+975, chars_format::fixed, 0,\r\n        \"6386688990511102688235475843175392071702509878358178120511378381364311734814568622219239509006416645730313\"\r\n        \"7375417059638577058438673881888820626623265588334627569335060766520256068719906177949832253612963645797841\"\r\n        \"5025789462700426739750300553069889091783287775442604765774270622035115607251222528\"},\r\n    {0x1.fffffffffffffp+976, chars_format::fixed, 0,\r\n        \"1277337798102220537647095168635078414340501975671635624102275676272862346962913724443847901801283329146062\"\r\n        \"7475083411927715411687734776377764125324653117666925513867012153304051213743981235589966450722592729159568\"\r\n        \"30051578925400853479500601106139778183566575550885209531548541244070231214502445056\"},\r\n    {0x1.fffffffffffffp+977, chars_format::fixed, 0,\r\n        \"2554675596204441075294190337270156828681003951343271248204551352545724693925827448887695803602566658292125\"\r\n        \"4950166823855430823375469552755528250649306235333851027734024306608102427487962471179932901445185458319136\"\r\n        \"60103157850801706959001202212279556367133151101770419063097082488140462429004890112\"},\r\n    {0x1.fffffffffffffp+978, chars_format::fixed, 0,\r\n        \"5109351192408882150588380674540313657362007902686542496409102705091449387851654897775391607205133316584250\"\r\n        \"9900333647710861646750939105511056501298612470667702055468048613216204854975924942359865802890370916638273\"\r\n        \"20206315701603413918002404424559112734266302203540838126194164976280924858009780224\"},\r\n    {0x1.fffffffffffffp+979, chars_format::fixed, 0,\r\n        \"1021870238481776430117676134908062731472401580537308499281820541018289877570330979555078321441026663316850\"\r\n        \"1980066729542172329350187821102211300259722494133540411093609722643240970995184988471973160578074183327654\"\r\n        \"640412631403206827836004808849118225468532604407081676252388329952561849716019560448\"},\r\n    {0x1.fffffffffffffp+980, chars_format::fixed, 0,\r\n        \"2043740476963552860235352269816125462944803161074616998563641082036579755140661959110156642882053326633700\"\r\n        \"3960133459084344658700375642204422600519444988267080822187219445286481941990369976943946321156148366655309\"\r\n        \"280825262806413655672009617698236450937065208814163352504776659905123699432039120896\"},\r\n    {0x1.fffffffffffffp+981, chars_format::fixed, 0,\r\n        \"4087480953927105720470704539632250925889606322149233997127282164073159510281323918220313285764106653267400\"\r\n        \"7920266918168689317400751284408845201038889976534161644374438890572963883980739953887892642312296733310618\"\r\n        \"561650525612827311344019235396472901874130417628326705009553319810247398864078241792\"},\r\n    {0x1.fffffffffffffp+982, chars_format::fixed, 0,\r\n        \"8174961907854211440941409079264501851779212644298467994254564328146319020562647836440626571528213306534801\"\r\n        \"5840533836337378634801502568817690402077779953068323288748877781145927767961479907775785284624593466621237\"\r\n        \"123301051225654622688038470792945803748260835256653410019106639620494797728156483584\"},\r\n    {0x1.fffffffffffffp+983, chars_format::fixed, 0,\r\n        \"1634992381570842288188281815852900370355842528859693598850912865629263804112529567288125314305642661306960\"\r\n        \"3168106767267475726960300513763538080415555990613664657749775556229185553592295981555157056924918693324247\"\r\n        \"4246602102451309245376076941585891607496521670513306820038213279240989595456312967168\"},\r\n    {0x1.fffffffffffffp+984, chars_format::fixed, 0,\r\n        \"3269984763141684576376563631705800740711685057719387197701825731258527608225059134576250628611285322613920\"\r\n        \"6336213534534951453920601027527076160831111981227329315499551112458371107184591963110314113849837386648494\"\r\n        \"8493204204902618490752153883171783214993043341026613640076426558481979190912625934336\"},\r\n    {0x1.fffffffffffffp+985, chars_format::fixed, 0,\r\n        \"6539969526283369152753127263411601481423370115438774395403651462517055216450118269152501257222570645227841\"\r\n        \"2672427069069902907841202055054152321662223962454658630999102224916742214369183926220628227699674773296989\"\r\n        \"6986408409805236981504307766343566429986086682053227280152853116963958381825251868672\"},\r\n    {0x1.fffffffffffffp+986, chars_format::fixed, 0,\r\n        \"1307993905256673830550625452682320296284674023087754879080730292503411043290023653830500251444514129045568\"\r\n        \"2534485413813980581568240411010830464332444792490931726199820444983348442873836785244125645539934954659397\"\r\n        \"93972816819610473963008615532687132859972173364106454560305706233927916763650503737344\"},\r\n    {0x1.fffffffffffffp+987, chars_format::fixed, 0,\r\n        \"2615987810513347661101250905364640592569348046175509758161460585006822086580047307661000502889028258091136\"\r\n        \"5068970827627961163136480822021660928664889584981863452399640889966696885747673570488251291079869909318795\"\r\n        \"87945633639220947926017231065374265719944346728212909120611412467855833527301007474688\"},\r\n    {0x1.fffffffffffffp+988, chars_format::fixed, 0,\r\n        \"5231975621026695322202501810729281185138696092351019516322921170013644173160094615322001005778056516182273\"\r\n        \"0137941655255922326272961644043321857329779169963726904799281779933393771495347140976502582159739818637591\"\r\n        \"75891267278441895852034462130748531439888693456425818241222824935711667054602014949376\"},\r\n    {0x1.fffffffffffffp+989, chars_format::fixed, 0,\r\n        \"1046395124205339064440500362145856237027739218470203903264584234002728834632018923064400201155611303236454\"\r\n        \"6027588331051184465254592328808664371465955833992745380959856355986678754299069428195300516431947963727518\"\r\n        \"351782534556883791704068924261497062879777386912851636482445649871423334109204029898752\"},\r\n    {0x1.fffffffffffffp+990, chars_format::fixed, 0,\r\n        \"2092790248410678128881000724291712474055478436940407806529168468005457669264037846128800402311222606472909\"\r\n        \"2055176662102368930509184657617328742931911667985490761919712711973357508598138856390601032863895927455036\"\r\n        \"703565069113767583408137848522994125759554773825703272964891299742846668218408059797504\"},\r\n    {0x1.fffffffffffffp+991, chars_format::fixed, 0,\r\n        \"4185580496821356257762001448583424948110956873880815613058336936010915338528075692257600804622445212945818\"\r\n        \"4110353324204737861018369315234657485863823335970981523839425423946715017196277712781202065727791854910073\"\r\n        \"407130138227535166816275697045988251519109547651406545929782599485693336436816119595008\"},\r\n    {0x1.fffffffffffffp+992, chars_format::fixed, 0,\r\n        \"8371160993642712515524002897166849896221913747761631226116673872021830677056151384515201609244890425891636\"\r\n        \"8220706648409475722036738630469314971727646671941963047678850847893430034392555425562404131455583709820146\"\r\n        \"814260276455070333632551394091976503038219095302813091859565198971386672873632239190016\"},\r\n    {0x1.fffffffffffffp+993, chars_format::fixed, 0,\r\n        \"1674232198728542503104800579433369979244382749552326245223334774404366135411230276903040321848978085178327\"\r\n        \"3644141329681895144407347726093862994345529334388392609535770169578686006878511085112480826291116741964029\"\r\n        \"3628520552910140667265102788183953006076438190605626183719130397942773345747264478380032\"},\r\n    {0x1.fffffffffffffp+994, chars_format::fixed, 0,\r\n        \"3348464397457085006209601158866739958488765499104652490446669548808732270822460553806080643697956170356654\"\r\n        \"7288282659363790288814695452187725988691058668776785219071540339157372013757022170224961652582233483928058\"\r\n        \"7257041105820281334530205576367906012152876381211252367438260795885546691494528956760064\"},\r\n    {0x1.fffffffffffffp+995, chars_format::fixed, 0,\r\n        \"6696928794914170012419202317733479916977530998209304980893339097617464541644921107612161287395912340713309\"\r\n        \"4576565318727580577629390904375451977382117337553570438143080678314744027514044340449923305164466967856117\"\r\n        \"4514082211640562669060411152735812024305752762422504734876521591771093382989057913520128\"},\r\n    {0x1.fffffffffffffp+996, chars_format::fixed, 0,\r\n        \"1339385758982834002483840463546695983395506199641860996178667819523492908328984221522432257479182468142661\"\r\n        \"8915313063745516115525878180875090395476423467510714087628616135662948805502808868089984661032893393571223\"\r\n        \"49028164423281125338120822305471624048611505524845009469753043183542186765978115827040256\"},\r\n    {0x1.fffffffffffffp+997, chars_format::fixed, 0,\r\n        \"2678771517965668004967680927093391966791012399283721992357335639046985816657968443044864514958364936285323\"\r\n        \"7830626127491032231051756361750180790952846935021428175257232271325897611005617736179969322065786787142446\"\r\n        \"98056328846562250676241644610943248097223011049690018939506086367084373531956231654080512\"},\r\n    {0x1.fffffffffffffp+998, chars_format::fixed, 0,\r\n        \"5357543035931336009935361854186783933582024798567443984714671278093971633315936886089729029916729872570647\"\r\n        \"5661252254982064462103512723500361581905693870042856350514464542651795222011235472359938644131573574284893\"\r\n        \"96112657693124501352483289221886496194446022099380037879012172734168747063912463308161024\"},\r\n    {0x1.fffffffffffffp+999, chars_format::fixed, 0,\r\n        \"1071508607186267201987072370837356786716404959713488796942934255618794326663187377217945805983345974514129\"\r\n        \"5132250450996412892420702544700072316381138774008571270102892908530359044402247094471987728826314714856978\"\r\n        \"792225315386249002704966578443772992388892044198760075758024345468337494127824926616322048\"},\r\n    {0x1.fffffffffffffp+1000, chars_format::fixed, 0,\r\n        \"2143017214372534403974144741674713573432809919426977593885868511237588653326374754435891611966691949028259\"\r\n        \"0264500901992825784841405089400144632762277548017142540205785817060718088804494188943975457652629429713957\"\r\n        \"584450630772498005409933156887545984777784088397520151516048690936674988255649853232644096\"},\r\n    {0x1.fffffffffffffp+1001, chars_format::fixed, 0,\r\n        \"4286034428745068807948289483349427146865619838853955187771737022475177306652749508871783223933383898056518\"\r\n        \"0529001803985651569682810178800289265524555096034285080411571634121436177608988377887950915305258859427915\"\r\n        \"168901261544996010819866313775091969555568176795040303032097381873349976511299706465288192\"},\r\n    {0x1.fffffffffffffp+1002, chars_format::fixed, 0,\r\n        \"8572068857490137615896578966698854293731239677707910375543474044950354613305499017743566447866767796113036\"\r\n        \"1058003607971303139365620357600578531049110192068570160823143268242872355217976755775901830610517718855830\"\r\n        \"337802523089992021639732627550183939111136353590080606064194763746699953022599412930576384\"},\r\n    {0x1.fffffffffffffp+1003, chars_format::fixed, 0,\r\n        \"1714413771498027523179315793339770858746247935541582075108694808990070922661099803548713289573353559222607\"\r\n        \"2211600721594260627873124071520115706209822038413714032164628653648574471043595351155180366122103543771166\"\r\n        \"0675605046179984043279465255100367878222272707180161212128389527493399906045198825861152768\"},\r\n    {0x1.fffffffffffffp+1004, chars_format::fixed, 0,\r\n        \"3428827542996055046358631586679541717492495871083164150217389617980141845322199607097426579146707118445214\"\r\n        \"4423201443188521255746248143040231412419644076827428064329257307297148942087190702310360732244207087542332\"\r\n        \"1351210092359968086558930510200735756444545414360322424256779054986799812090397651722305536\"},\r\n    {0x1.fffffffffffffp+1005, chars_format::fixed, 0,\r\n        \"6857655085992110092717263173359083434984991742166328300434779235960283690644399214194853158293414236890428\"\r\n        \"8846402886377042511492496286080462824839288153654856128658514614594297884174381404620721464488414175084664\"\r\n        \"2702420184719936173117861020401471512889090828720644848513558109973599624180795303444611072\"},\r\n    {0x1.fffffffffffffp+1006, chars_format::fixed, 0,\r\n        \"1371531017198422018543452634671816686996998348433265660086955847192056738128879842838970631658682847378085\"\r\n        \"7769280577275408502298499257216092564967857630730971225731702922918859576834876280924144292897682835016932\"\r\n        \"85404840369439872346235722040802943025778181657441289697027116219947199248361590606889222144\"},\r\n    {0x1.fffffffffffffp+1007, chars_format::fixed, 0,\r\n        \"2743062034396844037086905269343633373993996696866531320173911694384113476257759685677941263317365694756171\"\r\n        \"5538561154550817004596998514432185129935715261461942451463405845837719153669752561848288585795365670033865\"\r\n        \"70809680738879744692471444081605886051556363314882579394054232439894398496723181213778444288\"},\r\n    {0x1.fffffffffffffp+1008, chars_format::fixed, 0,\r\n        \"5486124068793688074173810538687266747987993393733062640347823388768226952515519371355882526634731389512343\"\r\n        \"1077122309101634009193997028864370259871430522923884902926811691675438307339505123696577171590731340067731\"\r\n        \"41619361477759489384942888163211772103112726629765158788108464879788796993446362427556888576\"},\r\n    {0x1.fffffffffffffp+1009, chars_format::fixed, 0,\r\n        \"1097224813758737614834762107737453349597598678746612528069564677753645390503103874271176505326946277902468\"\r\n        \"6215424461820326801838799405772874051974286104584776980585362338335087661467901024739315434318146268013546\"\r\n        \"283238722955518978769885776326423544206225453259530317576216929759577593986892724855113777152\"},\r\n    {0x1.fffffffffffffp+1010, chars_format::fixed, 0,\r\n        \"2194449627517475229669524215474906699195197357493225056139129355507290781006207748542353010653892555804937\"\r\n        \"2430848923640653603677598811545748103948572209169553961170724676670175322935802049478630868636292536027092\"\r\n        \"566477445911037957539771552652847088412450906519060635152433859519155187973785449710227554304\"},\r\n    {0x1.fffffffffffffp+1011, chars_format::fixed, 0,\r\n        \"4388899255034950459339048430949813398390394714986450112278258711014581562012415497084706021307785111609874\"\r\n        \"4861697847281307207355197623091496207897144418339107922341449353340350645871604098957261737272585072054185\"\r\n        \"132954891822075915079543105305694176824901813038121270304867719038310375947570899420455108608\"},\r\n    {0x1.fffffffffffffp+1012, chars_format::fixed, 0,\r\n        \"8777798510069900918678096861899626796780789429972900224556517422029163124024830994169412042615570223219748\"\r\n        \"9723395694562614414710395246182992415794288836678215844682898706680701291743208197914523474545170144108370\"\r\n        \"265909783644151830159086210611388353649803626076242540609735438076620751895141798840910217216\"},\r\n    {0x1.fffffffffffffp+1013, chars_format::fixed, 0,\r\n        \"1755559702013980183735619372379925359356157885994580044911303484405832624804966198833882408523114044643949\"\r\n        \"7944679138912522882942079049236598483158857767335643168936579741336140258348641639582904694909034028821674\"\r\n        \"0531819567288303660318172421222776707299607252152485081219470876153241503790283597681820434432\"},\r\n    {0x1.fffffffffffffp+1014, chars_format::fixed, 0,\r\n        \"3511119404027960367471238744759850718712315771989160089822606968811665249609932397667764817046228089287899\"\r\n        \"5889358277825045765884158098473196966317715534671286337873159482672280516697283279165809389818068057643348\"\r\n        \"1063639134576607320636344842445553414599214504304970162438941752306483007580567195363640868864\"},\r\n    {0x1.fffffffffffffp+1015, chars_format::fixed, 0,\r\n        \"7022238808055920734942477489519701437424631543978320179645213937623330499219864795335529634092456178575799\"\r\n        \"1778716555650091531768316196946393932635431069342572675746318965344561033394566558331618779636136115286696\"\r\n        \"2127278269153214641272689684891106829198429008609940324877883504612966015161134390727281737728\"},\r\n    {0x1.fffffffffffffp+1016, chars_format::fixed, 0,\r\n        \"1404447761611184146988495497903940287484926308795664035929042787524666099843972959067105926818491235715159\"\r\n        \"8355743311130018306353663239389278786527086213868514535149263793068912206678913311666323755927227223057339\"\r\n        \"24254556538306429282545379369782213658396858017219880649755767009225932030322268781454563475456\"},\r\n    {0x1.fffffffffffffp+1017, chars_format::fixed, 0,\r\n        \"2808895523222368293976990995807880574969852617591328071858085575049332199687945918134211853636982471430319\"\r\n        \"6711486622260036612707326478778557573054172427737029070298527586137824413357826623332647511854454446114678\"\r\n        \"48509113076612858565090758739564427316793716034439761299511534018451864060644537562909126950912\"},\r\n    {0x1.fffffffffffffp+1018, chars_format::fixed, 0,\r\n        \"5617791046444736587953981991615761149939705235182656143716171150098664399375891836268423707273964942860639\"\r\n        \"3422973244520073225414652957557115146108344855474058140597055172275648826715653246665295023708908892229356\"\r\n        \"97018226153225717130181517479128854633587432068879522599023068036903728121289075125818253901824\"},\r\n    {0x1.fffffffffffffp+1019, chars_format::fixed, 0,\r\n        \"1123558209288947317590796398323152229987941047036531228743234230019732879875178367253684741454792988572127\"\r\n        \"8684594648904014645082930591511423029221668971094811628119411034455129765343130649333059004741781778445871\"\r\n        \"394036452306451434260363034958257709267174864137759045198046136073807456242578150251636507803648\"},\r\n    {0x1.fffffffffffffp+1020, chars_format::fixed, 0,\r\n        \"2247116418577894635181592796646304459975882094073062457486468460039465759750356734507369482909585977144255\"\r\n        \"7369189297808029290165861183022846058443337942189623256238822068910259530686261298666118009483563556891742\"\r\n        \"788072904612902868520726069916515418534349728275518090396092272147614912485156300503273015607296\"},\r\n    {0x1.fffffffffffffp+1021, chars_format::fixed, 0,\r\n        \"4494232837155789270363185593292608919951764188146124914972936920078931519500713469014738965819171954288511\"\r\n        \"4738378595616058580331722366045692116886675884379246512477644137820519061372522597332236018967127113783485\"\r\n        \"576145809225805737041452139833030837068699456551036180792184544295229824970312601006546031214592\"},\r\n    {0x1.fffffffffffffp+1022, chars_format::fixed, 0,\r\n        \"8988465674311578540726371186585217839903528376292249829945873840157863039001426938029477931638343908577022\"\r\n        \"9476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971\"\r\n        \"152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184\"},\r\n    {0x1.fffffffffffffp+1023, chars_format::fixed, 0,\r\n        \"1797693134862315708145274237317043567980705675258449965989174768031572607800285387605895586327668781715404\"\r\n        \"5895351438246423432132688946418276846754670353751698604991057655128207624549009038932894407586850845513394\"\r\n        \"2304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368\"},\r\n};\r\n\r\n#endif // DOUBLE_FIXED_PRECISION_TO_CHARS_TEST_CASES_4_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/double_from_chars_test_cases.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef DOUBLE_FROM_CHARS_TEST_CASES_HPP\r\n#define DOUBLE_FROM_CHARS_TEST_CASES_HPP\r\n\r\n#include <charconv>\r\n#include <cstddef>\r\n#include <system_error>\r\nusing namespace std;\r\n\r\ninline constexpr DoubleFromCharsTestCase double_from_chars_test_cases[] = {\r\n    {\"1.000000000000a000\", chars_format::hex, 18, errc{}, 0x1.000000000000ap0}, // exact\r\n    {\"1.000000000000a001\", chars_format::hex, 18, errc{}, 0x1.000000000000ap0}, // below midpoint, round down\r\n    {\"1.000000000000a800\", chars_format::hex, 18, errc{}, 0x1.000000000000ap0}, // midpoint, round down to even\r\n    {\"1.000000000000a801\", chars_format::hex, 18, errc{}, 0x1.000000000000bp0}, // above midpoint, round up\r\n    {\"1.000000000000b000\", chars_format::hex, 18, errc{}, 0x1.000000000000bp0}, // exact\r\n    {\"1.000000000000b001\", chars_format::hex, 18, errc{}, 0x1.000000000000bp0}, // below midpoint, round down\r\n    {\"1.000000000000b800\", chars_format::hex, 18, errc{}, 0x1.000000000000cp0}, // midpoint, round up to even\r\n    {\"1.000000000000b801\", chars_format::hex, 18, errc{}, 0x1.000000000000cp0}, // above midpoint, round up\r\n\r\n    {\"1.00000000000020\", chars_format::hex, 16, errc{}, 0x1.0000000000002p0}, // exact\r\n    {\"1.00000000000021\", chars_format::hex, 16, errc{}, 0x1.0000000000002p0}, // below midpoint, round down\r\n    {\"1.00000000000028\", chars_format::hex, 16, errc{}, 0x1.0000000000002p0}, // midpoint, round down to even\r\n    {\"1.00000000000029\", chars_format::hex, 16, errc{}, 0x1.0000000000003p0}, // above midpoint, round up\r\n    {\"1.00000000000030\", chars_format::hex, 16, errc{}, 0x1.0000000000003p0}, // exact\r\n    {\"1.00000000000031\", chars_format::hex, 16, errc{}, 0x1.0000000000003p0}, // below midpoint, round down\r\n    {\"1.00000000000038\", chars_format::hex, 16, errc{}, 0x1.0000000000004p0}, // midpoint, round up to even\r\n    {\"1.00000000000039\", chars_format::hex, 16, errc{}, 0x1.0000000000004p0}, // above midpoint, round up\r\n\r\n    {\"1.00000000000000044408920985006261616945266723632812500000\", chars_format::general, 58, errc{},\r\n        0x1.0000000000002p0}, // exact\r\n    {\"1.00000000000000045796699765787707292474806308746337890625\", chars_format::general, 58, errc{},\r\n        0x1.0000000000002p0}, // below midpoint, round down\r\n    {\"1.00000000000000055511151231257827021181583404541015624999\", chars_format::general, 58, errc{},\r\n        0x1.0000000000002p0}, // below midpoint, round down\r\n    {\"1.00000000000000055511151231257827021181583404541015625000\", chars_format::general, 58, errc{},\r\n        0x1.0000000000002p0}, // midpoint, round down to even\r\n    {\"1.00000000000000055511151231257827021181583404541015625001\", chars_format::general, 58, errc{},\r\n        0x1.0000000000003p0}, // above midpoint, round up\r\n    {\"1.00000000000000056898930012039272696711122989654541015625\", chars_format::general, 58, errc{},\r\n        0x1.0000000000003p0}, // above midpoint, round up\r\n    {\"1.00000000000000066613381477509392425417900085449218750000\", chars_format::general, 58, errc{},\r\n        0x1.0000000000003p0}, // exact\r\n    {\"1.00000000000000068001160258290838100947439670562744140625\", chars_format::general, 58, errc{},\r\n        0x1.0000000000003p0}, // below midpoint, round down\r\n    {\"1.00000000000000077715611723760957829654216766357421874999\", chars_format::general, 58, errc{},\r\n        0x1.0000000000003p0}, // below midpoint, round down\r\n    {\"1.00000000000000077715611723760957829654216766357421875000\", chars_format::general, 58, errc{},\r\n        0x1.0000000000004p0}, // midpoint, round up to even\r\n    {\"1.00000000000000077715611723760957829654216766357421875001\", chars_format::general, 58, errc{},\r\n        0x1.0000000000004p0}, // above midpoint, round up\r\n    {\"1.00000000000000079103390504542403505183756351470947265625\", chars_format::general, 58, errc{},\r\n        0x1.0000000000004p0}, // above midpoint, round up\r\n\r\n    // https://www.exploringbinary.com/nondeterministic-floating-point-conversions-in-java/\r\n    {\"0.0000008p-1022\", chars_format::hex, 15, errc{}, 0x0.0000008p-1022},\r\n\r\n    // VSO-838635 \"<charconv>: from_chars() mishandles certain subnormals\"\r\n    // These values change on half-ulp boundaries:\r\n    // 1 * 2^-1075 ~= 2.47e-324 (half-ulp between zero and min subnormal)\r\n    // 2 * 2^-1075 ~= 4.94e-324 (min subnormal)\r\n    // 3 * 2^-1075 ~= 7.41e-324 (half-ulp between min subnormal and next subnormal)\r\n    // 4 * 2^-1075 ~= 9.88e-324 (next subnormal)\r\n    {\"1.\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111e-324\",\r\n        chars_format::scientific, 1007, errc::result_out_of_range, 0x0.0000000000000p+0},\r\n    {\"2.\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222e-324\",\r\n        chars_format::scientific, 1007, errc::result_out_of_range, 0x0.0000000000000p+0},\r\n    {\"3.\"\r\n     \"3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333\"\r\n     \"3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333\"\r\n     \"3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333\"\r\n     \"3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333\"\r\n     \"3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333\"\r\n     \"3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333\"\r\n     \"3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333\"\r\n     \"3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333\"\r\n     \"3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333\"\r\n     \"3333333333333333333e-324\",\r\n        chars_format::scientific, 1007, errc{}, 0x0.0000000000001p-1022},\r\n    {\"4.\"\r\n     \"4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444\"\r\n     \"4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444\"\r\n     \"4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444\"\r\n     \"4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444\"\r\n     \"4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444\"\r\n     \"4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444\"\r\n     \"4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444\"\r\n     \"4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444\"\r\n     \"4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444\"\r\n     \"4444444444444444444e-324\",\r\n        chars_format::scientific, 1007, errc{}, 0x0.0000000000001p-1022},\r\n    {\"5.\"\r\n     \"5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555\"\r\n     \"5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555\"\r\n     \"5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555\"\r\n     \"5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555\"\r\n     \"5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555\"\r\n     \"5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555\"\r\n     \"5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555\"\r\n     \"5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555\"\r\n     \"5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555\"\r\n     \"5555555555555555555e-324\",\r\n        chars_format::scientific, 1007, errc{}, 0x0.0000000000001p-1022},\r\n    {\"6.\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666e-324\",\r\n        chars_format::scientific, 1007, errc{}, 0x0.0000000000001p-1022},\r\n    {\"7.\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777e-324\",\r\n        chars_format::scientific, 1007, errc{}, 0x0.0000000000002p-1022},\r\n    {\"8.\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888e-324\",\r\n        chars_format::scientific, 1007, errc{}, 0x0.0000000000002p-1022},\r\n    {\"9.\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999e-324\",\r\n        chars_format::scientific, 1007, errc{}, 0x0.0000000000002p-1022},\r\n\r\n    // VSO-852024: Test cases for round-to-nearest, ties-to-even.\r\n    // Consider the values:\r\n    // A: 0x1.0000000000000p+0 == 1.0000000000000000000000000000000000000000000000000000\r\n    // X:    (1 + 2^-53) * 2^0 == 1.00000000000000011102230246251565404236316680908203125\r\n    // B: 0x1.0000000000001p+0 == 1.0000000000000002220446049250313080847263336181640625\r\n    // X is equidistant from A and B. Because they're tied for being nearest, we need to round to even.\r\n    // That means rounding down to A, because A's least significant hexit 0 is even.\r\n    // However, values between X and B aren't tied - they're simply nearer to B, so they need to round up to B.\r\n    // We need to handle tricky cases like the digits of X, followed by a million 0 digits, followed by a 1 digit.\r\n    // Similarly:\r\n    // E:      0x1.ffffffffffffep+0 == 1.999999999999999555910790149937383830547332763671875\r\n    // Y: (1 + 1 - 3 * 2^-53) * 2^0 == 1.99999999999999966693309261245303787291049957275390625\r\n    // F:      0x1.fffffffffffffp+0 == 1.9999999999999997779553950749686919152736663818359375\r\n    // The hexit E is 14 and even, while F is 15 and odd.\r\n\r\n    // just below (0 + 2^-53) * 2^-1022: decremented last digit, then appended three 9 digits\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002470\"\r\n     \"3282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772\"\r\n     \"2858865463328355177969898199387398005390939063150356595155702263922908583924491051844359318028499365361525003\"\r\n     \"1937045767824921936562366986365848075700158576926990370631192827955855133292783433840935197801553124659726357\"\r\n     \"9574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324\"\r\n     \"6736009689513405355374585166611342237666786041621596804619144672918403005300575308490487653917113865916462395\"\r\n     \"2491262365388187963623937328042389101867234849766823508986338858792562830275599565752445550725518931369083625\"\r\n     \"4779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328124999\",\r\n        chars_format::fixed, 1080, errc::result_out_of_range, 0x0.0000000000000p+0},\r\n\r\n    // (0 + 2^-53) * 2^-1022 exactly\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002470\"\r\n     \"3282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772\"\r\n     \"2858865463328355177969898199387398005390939063150356595155702263922908583924491051844359318028499365361525003\"\r\n     \"1937045767824921936562366986365848075700158576926990370631192827955855133292783433840935197801553124659726357\"\r\n     \"9574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324\"\r\n     \"6736009689513405355374585166611342237666786041621596804619144672918403005300575308490487653917113865916462395\"\r\n     \"2491262365388187963623937328042389101867234849766823508986338858792562830275599565752445550725518931369083625\"\r\n     \"4779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328125\",\r\n        chars_format::fixed, 1077, errc::result_out_of_range, 0x0.0000000000000p+0},\r\n\r\n    // (0 + 2^-53) * 2^-1022 exactly, followed by a thousand 0 digits\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002470\"\r\n     \"3282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772\"\r\n     \"2858865463328355177969898199387398005390939063150356595155702263922908583924491051844359318028499365361525003\"\r\n     \"1937045767824921936562366986365848075700158576926990370631192827955855133292783433840935197801553124659726357\"\r\n     \"9574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324\"\r\n     \"6736009689513405355374585166611342237666786041621596804619144672918403005300575308490487653917113865916462395\"\r\n     \"2491262365388187963623937328042389101867234849766823508986338858792562830275599565752445550725518931369083625\"\r\n     \"4779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328125000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000\",\r\n        chars_format::fixed, 2077, errc::result_out_of_range, 0x0.0000000000000p+0},\r\n\r\n    // above (0 + 2^-53) * 2^-1022: appended a thousand 0 digits followed by a 1 digit\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002470\"\r\n     \"3282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772\"\r\n     \"2858865463328355177969898199387398005390939063150356595155702263922908583924491051844359318028499365361525003\"\r\n     \"1937045767824921936562366986365848075700158576926990370631192827955855133292783433840935197801553124659726357\"\r\n     \"9574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324\"\r\n     \"6736009689513405355374585166611342237666786041621596804619144672918403005300575308490487653917113865916462395\"\r\n     \"2491262365388187963623937328042389101867234849766823508986338858792562830275599565752445550725518931369083625\"\r\n     \"4779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328125000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00001\",\r\n        chars_format::fixed, 2078, errc{}, 0x0.0000000000001p-1022},\r\n\r\n    // above (0 + 2^-53) * 2^-1022: appended a 1 digit\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002470\"\r\n     \"3282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772\"\r\n     \"2858865463328355177969898199387398005390939063150356595155702263922908583924491051844359318028499365361525003\"\r\n     \"1937045767824921936562366986365848075700158576926990370631192827955855133292783433840935197801553124659726357\"\r\n     \"9574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324\"\r\n     \"6736009689513405355374585166611342237666786041621596804619144672918403005300575308490487653917113865916462395\"\r\n     \"2491262365388187963623937328042389101867234849766823508986338858792562830275599565752445550725518931369083625\"\r\n     \"47791869486679949683240497058210285131854513962138377228261454376934125320985913276672363281251\",\r\n        chars_format::fixed, 1078, errc{}, 0x0.0000000000001p-1022},\r\n\r\n    // above (0 + 2^-53) * 2^-1022: incremented last digit\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002470\"\r\n     \"3282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772\"\r\n     \"2858865463328355177969898199387398005390939063150356595155702263922908583924491051844359318028499365361525003\"\r\n     \"1937045767824921936562366986365848075700158576926990370631192827955855133292783433840935197801553124659726357\"\r\n     \"9574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324\"\r\n     \"6736009689513405355374585166611342237666786041621596804619144672918403005300575308490487653917113865916462395\"\r\n     \"2491262365388187963623937328042389101867234849766823508986338858792562830275599565752445550725518931369083625\"\r\n     \"4779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328126\",\r\n        chars_format::fixed, 1077, errc{}, 0x0.0000000000001p-1022},\r\n\r\n    // just below (0 + 1 - 3 * 2^-53) * 2^-1022: decremented last digit, then appended three 9 digits\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072006419\"\r\n     \"9176395546258779936602667813027328296362349540005779643539444484102225369938322261431279727704724131030539099\"\r\n     \"2976863718870946851468024222968583977359185141028540361975476844303195813273469348201130421165308554532083149\"\r\n     \"3676067608324920106709384047261543474082573017216837765643921010648239116172158852475760231303527077156200284\"\r\n     \"1775343298712758123539074213191978739083589771549597066404661620550578925994422322342444472859570416955675758\"\r\n     \"5423752417124134805999073137808018133811049489046686648944255834488901008259721496147104204399198556535697531\"\r\n     \"0055231935448663898095485089604066035268185282450207861510244351362091237759797852153577038777504570568436147\"\r\n     \"5530270683064113556748943345076587312006145811358486831521563686919762403704226016998291015624999\",\r\n        chars_format::fixed, 1080, errc{}, 0x0.ffffffffffffep-1022},\r\n\r\n    // (0 + 1 - 3 * 2^-53) * 2^-1022 exactly\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072006419\"\r\n     \"9176395546258779936602667813027328296362349540005779643539444484102225369938322261431279727704724131030539099\"\r\n     \"2976863718870946851468024222968583977359185141028540361975476844303195813273469348201130421165308554532083149\"\r\n     \"3676067608324920106709384047261543474082573017216837765643921010648239116172158852475760231303527077156200284\"\r\n     \"1775343298712758123539074213191978739083589771549597066404661620550578925994422322342444472859570416955675758\"\r\n     \"5423752417124134805999073137808018133811049489046686648944255834488901008259721496147104204399198556535697531\"\r\n     \"0055231935448663898095485089604066035268185282450207861510244351362091237759797852153577038777504570568436147\"\r\n     \"5530270683064113556748943345076587312006145811358486831521563686919762403704226016998291015625\",\r\n        chars_format::fixed, 1077, errc{}, 0x0.ffffffffffffep-1022},\r\n\r\n    // (0 + 1 - 3 * 2^-53) * 2^-1022 exactly, followed by a thousand 0 digits\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072006419\"\r\n     \"9176395546258779936602667813027328296362349540005779643539444484102225369938322261431279727704724131030539099\"\r\n     \"2976863718870946851468024222968583977359185141028540361975476844303195813273469348201130421165308554532083149\"\r\n     \"3676067608324920106709384047261543474082573017216837765643921010648239116172158852475760231303527077156200284\"\r\n     \"1775343298712758123539074213191978739083589771549597066404661620550578925994422322342444472859570416955675758\"\r\n     \"5423752417124134805999073137808018133811049489046686648944255834488901008259721496147104204399198556535697531\"\r\n     \"0055231935448663898095485089604066035268185282450207861510244351362091237759797852153577038777504570568436147\"\r\n     \"5530270683064113556748943345076587312006145811358486831521563686919762403704226016998291015625000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000\",\r\n        chars_format::fixed, 2077, errc{}, 0x0.ffffffffffffep-1022},\r\n\r\n    // above (0 + 1 - 3 * 2^-53) * 2^-1022: appended a thousand 0 digits followed by a 1 digit\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072006419\"\r\n     \"9176395546258779936602667813027328296362349540005779643539444484102225369938322261431279727704724131030539099\"\r\n     \"2976863718870946851468024222968583977359185141028540361975476844303195813273469348201130421165308554532083149\"\r\n     \"3676067608324920106709384047261543474082573017216837765643921010648239116172158852475760231303527077156200284\"\r\n     \"1775343298712758123539074213191978739083589771549597066404661620550578925994422322342444472859570416955675758\"\r\n     \"5423752417124134805999073137808018133811049489046686648944255834488901008259721496147104204399198556535697531\"\r\n     \"0055231935448663898095485089604066035268185282450207861510244351362091237759797852153577038777504570568436147\"\r\n     \"5530270683064113556748943345076587312006145811358486831521563686919762403704226016998291015625000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00001\",\r\n        chars_format::fixed, 2078, errc{}, 0x0.fffffffffffffp-1022},\r\n\r\n    // above (0 + 1 - 3 * 2^-53) * 2^-1022: appended a 1 digit\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072006419\"\r\n     \"9176395546258779936602667813027328296362349540005779643539444484102225369938322261431279727704724131030539099\"\r\n     \"2976863718870946851468024222968583977359185141028540361975476844303195813273469348201130421165308554532083149\"\r\n     \"3676067608324920106709384047261543474082573017216837765643921010648239116172158852475760231303527077156200284\"\r\n     \"1775343298712758123539074213191978739083589771549597066404661620550578925994422322342444472859570416955675758\"\r\n     \"5423752417124134805999073137808018133811049489046686648944255834488901008259721496147104204399198556535697531\"\r\n     \"0055231935448663898095485089604066035268185282450207861510244351362091237759797852153577038777504570568436147\"\r\n     \"55302706830641135567489433450765873120061458113584868315215636869197624037042260169982910156251\",\r\n        chars_format::fixed, 1078, errc{}, 0x0.fffffffffffffp-1022},\r\n\r\n    // above (0 + 1 - 3 * 2^-53) * 2^-1022: incremented last digit\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072006419\"\r\n     \"9176395546258779936602667813027328296362349540005779643539444484102225369938322261431279727704724131030539099\"\r\n     \"2976863718870946851468024222968583977359185141028540361975476844303195813273469348201130421165308554532083149\"\r\n     \"3676067608324920106709384047261543474082573017216837765643921010648239116172158852475760231303527077156200284\"\r\n     \"1775343298712758123539074213191978739083589771549597066404661620550578925994422322342444472859570416955675758\"\r\n     \"5423752417124134805999073137808018133811049489046686648944255834488901008259721496147104204399198556535697531\"\r\n     \"0055231935448663898095485089604066035268185282450207861510244351362091237759797852153577038777504570568436147\"\r\n     \"5530270683064113556748943345076587312006145811358486831521563686919762403704226016998291015626\",\r\n        chars_format::fixed, 1077, errc{}, 0x0.fffffffffffffp-1022},\r\n\r\n    // just below (1 + 2^-53) * 2^-1022: decremented last digit, then appended three 9 digits\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072016301\"\r\n     \"2305563795567615250361241457301801308322872404958664760675944619203679411688695321398552054903200090343478188\"\r\n     \"4412325572184367563347617020518175998922941393629966742598285899994830148971433555578567693279306015978183162\"\r\n     \"1424250679624607852958851992724935776883207324924799248168692322471659649343292587839501022509739575795105716\"\r\n     \"0073834364573849432419299709217920738991976169431413149717326525502008499797367678374315520581880443916381057\"\r\n     \"2367791175177756227497413804253387084478193655533073867420834526162513029462022730109054820067654020201547112\"\r\n     \"0020281397001415752591234401773622442737124681517501897455599786532342558862196115163359241679580296044770649\"\r\n     \"4647018477736093430045142168360701364747951396213837722826145437693412532098591327667236328124999\",\r\n        chars_format::fixed, 1080, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    // (1 + 2^-53) * 2^-1022 exactly\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072016301\"\r\n     \"2305563795567615250361241457301801308322872404958664760675944619203679411688695321398552054903200090343478188\"\r\n     \"4412325572184367563347617020518175998922941393629966742598285899994830148971433555578567693279306015978183162\"\r\n     \"1424250679624607852958851992724935776883207324924799248168692322471659649343292587839501022509739575795105716\"\r\n     \"0073834364573849432419299709217920738991976169431413149717326525502008499797367678374315520581880443916381057\"\r\n     \"2367791175177756227497413804253387084478193655533073867420834526162513029462022730109054820067654020201547112\"\r\n     \"0020281397001415752591234401773622442737124681517501897455599786532342558862196115163359241679580296044770649\"\r\n     \"4647018477736093430045142168360701364747951396213837722826145437693412532098591327667236328125\",\r\n        chars_format::fixed, 1077, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    // (1 + 2^-53) * 2^-1022 exactly, followed by a thousand 0 digits\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072016301\"\r\n     \"2305563795567615250361241457301801308322872404958664760675944619203679411688695321398552054903200090343478188\"\r\n     \"4412325572184367563347617020518175998922941393629966742598285899994830148971433555578567693279306015978183162\"\r\n     \"1424250679624607852958851992724935776883207324924799248168692322471659649343292587839501022509739575795105716\"\r\n     \"0073834364573849432419299709217920738991976169431413149717326525502008499797367678374315520581880443916381057\"\r\n     \"2367791175177756227497413804253387084478193655533073867420834526162513029462022730109054820067654020201547112\"\r\n     \"0020281397001415752591234401773622442737124681517501897455599786532342558862196115163359241679580296044770649\"\r\n     \"4647018477736093430045142168360701364747951396213837722826145437693412532098591327667236328125000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000\",\r\n        chars_format::fixed, 2077, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    // above (1 + 2^-53) * 2^-1022: appended a thousand 0 digits followed by a 1 digit\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072016301\"\r\n     \"2305563795567615250361241457301801308322872404958664760675944619203679411688695321398552054903200090343478188\"\r\n     \"4412325572184367563347617020518175998922941393629966742598285899994830148971433555578567693279306015978183162\"\r\n     \"1424250679624607852958851992724935776883207324924799248168692322471659649343292587839501022509739575795105716\"\r\n     \"0073834364573849432419299709217920738991976169431413149717326525502008499797367678374315520581880443916381057\"\r\n     \"2367791175177756227497413804253387084478193655533073867420834526162513029462022730109054820067654020201547112\"\r\n     \"0020281397001415752591234401773622442737124681517501897455599786532342558862196115163359241679580296044770649\"\r\n     \"4647018477736093430045142168360701364747951396213837722826145437693412532098591327667236328125000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00001\",\r\n        chars_format::fixed, 2078, errc{}, 0x1.0000000000001p-1022},\r\n\r\n    // above (1 + 2^-53) * 2^-1022: appended a 1 digit\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072016301\"\r\n     \"2305563795567615250361241457301801308322872404958664760675944619203679411688695321398552054903200090343478188\"\r\n     \"4412325572184367563347617020518175998922941393629966742598285899994830148971433555578567693279306015978183162\"\r\n     \"1424250679624607852958851992724935776883207324924799248168692322471659649343292587839501022509739575795105716\"\r\n     \"0073834364573849432419299709217920738991976169431413149717326525502008499797367678374315520581880443916381057\"\r\n     \"2367791175177756227497413804253387084478193655533073867420834526162513029462022730109054820067654020201547112\"\r\n     \"0020281397001415752591234401773622442737124681517501897455599786532342558862196115163359241679580296044770649\"\r\n     \"46470184777360934300451421683607013647479513962138377228261454376934125320985913276672363281251\",\r\n        chars_format::fixed, 1078, errc{}, 0x1.0000000000001p-1022},\r\n\r\n    // above (1 + 2^-53) * 2^-1022: incremented last digit\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072016301\"\r\n     \"2305563795567615250361241457301801308322872404958664760675944619203679411688695321398552054903200090343478188\"\r\n     \"4412325572184367563347617020518175998922941393629966742598285899994830148971433555578567693279306015978183162\"\r\n     \"1424250679624607852958851992724935776883207324924799248168692322471659649343292587839501022509739575795105716\"\r\n     \"0073834364573849432419299709217920738991976169431413149717326525502008499797367678374315520581880443916381057\"\r\n     \"2367791175177756227497413804253387084478193655533073867420834526162513029462022730109054820067654020201547112\"\r\n     \"0020281397001415752591234401773622442737124681517501897455599786532342558862196115163359241679580296044770649\"\r\n     \"4647018477736093430045142168360701364747951396213837722826145437693412532098591327667236328126\",\r\n        chars_format::fixed, 1077, errc{}, 0x1.0000000000001p-1022},\r\n\r\n    // just below (1 + 1 - 3 * 2^-53) * 2^-1022: decremented last digit, then appended three 9 digits\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144020250\"\r\n     \"8199667279499186358524265859260511351695091228726223124931264069530541271189424317838013700808305231545782515\"\r\n     \"4530323827726959236845743044099361970891187471508150509418060480375117378320411851935338796416115205148741308\"\r\n     \"3163272520124606023105869053620631175265621765214646643181420505164043632222668006474326056011713528291579642\"\r\n     \"2274554896821334728738317548403413978098469341510556195293821919814730032341053661708792231510873354131880491\"\r\n     \"1055533902788485678121901775450062980622457102958163711745945687733011032421168917765671370549738710820782247\"\r\n     \"7584250967061891687062782163335299376138075114200886249979505279101870966346394401564490729731565935244123171\"\r\n     \"5398102212132212018470035807616260163568645811358486831521563686919762403704226016998291015624999\",\r\n        chars_format::fixed, 1080, errc{}, 0x1.ffffffffffffep-1022},\r\n\r\n    // (1 + 1 - 3 * 2^-53) * 2^-1022 exactly\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144020250\"\r\n     \"8199667279499186358524265859260511351695091228726223124931264069530541271189424317838013700808305231545782515\"\r\n     \"4530323827726959236845743044099361970891187471508150509418060480375117378320411851935338796416115205148741308\"\r\n     \"3163272520124606023105869053620631175265621765214646643181420505164043632222668006474326056011713528291579642\"\r\n     \"2274554896821334728738317548403413978098469341510556195293821919814730032341053661708792231510873354131880491\"\r\n     \"1055533902788485678121901775450062980622457102958163711745945687733011032421168917765671370549738710820782247\"\r\n     \"7584250967061891687062782163335299376138075114200886249979505279101870966346394401564490729731565935244123171\"\r\n     \"5398102212132212018470035807616260163568645811358486831521563686919762403704226016998291015625\",\r\n        chars_format::fixed, 1077, errc{}, 0x1.ffffffffffffep-1022},\r\n\r\n    // (1 + 1 - 3 * 2^-53) * 2^-1022 exactly, followed by a thousand 0 digits\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144020250\"\r\n     \"8199667279499186358524265859260511351695091228726223124931264069530541271189424317838013700808305231545782515\"\r\n     \"4530323827726959236845743044099361970891187471508150509418060480375117378320411851935338796416115205148741308\"\r\n     \"3163272520124606023105869053620631175265621765214646643181420505164043632222668006474326056011713528291579642\"\r\n     \"2274554896821334728738317548403413978098469341510556195293821919814730032341053661708792231510873354131880491\"\r\n     \"1055533902788485678121901775450062980622457102958163711745945687733011032421168917765671370549738710820782247\"\r\n     \"7584250967061891687062782163335299376138075114200886249979505279101870966346394401564490729731565935244123171\"\r\n     \"5398102212132212018470035807616260163568645811358486831521563686919762403704226016998291015625000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000\",\r\n        chars_format::fixed, 2077, errc{}, 0x1.ffffffffffffep-1022},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^-1022: appended a thousand 0 digits followed by a 1 digit\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144020250\"\r\n     \"8199667279499186358524265859260511351695091228726223124931264069530541271189424317838013700808305231545782515\"\r\n     \"4530323827726959236845743044099361970891187471508150509418060480375117378320411851935338796416115205148741308\"\r\n     \"3163272520124606023105869053620631175265621765214646643181420505164043632222668006474326056011713528291579642\"\r\n     \"2274554896821334728738317548403413978098469341510556195293821919814730032341053661708792231510873354131880491\"\r\n     \"1055533902788485678121901775450062980622457102958163711745945687733011032421168917765671370549738710820782247\"\r\n     \"7584250967061891687062782163335299376138075114200886249979505279101870966346394401564490729731565935244123171\"\r\n     \"5398102212132212018470035807616260163568645811358486831521563686919762403704226016998291015625000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00001\",\r\n        chars_format::fixed, 2078, errc{}, 0x1.fffffffffffffp-1022},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^-1022: appended a 1 digit\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144020250\"\r\n     \"8199667279499186358524265859260511351695091228726223124931264069530541271189424317838013700808305231545782515\"\r\n     \"4530323827726959236845743044099361970891187471508150509418060480375117378320411851935338796416115205148741308\"\r\n     \"3163272520124606023105869053620631175265621765214646643181420505164043632222668006474326056011713528291579642\"\r\n     \"2274554896821334728738317548403413978098469341510556195293821919814730032341053661708792231510873354131880491\"\r\n     \"1055533902788485678121901775450062980622457102958163711745945687733011032421168917765671370549738710820782247\"\r\n     \"7584250967061891687062782163335299376138075114200886249979505279101870966346394401564490729731565935244123171\"\r\n     \"53981022121322120184700358076162601635686458113584868315215636869197624037042260169982910156251\",\r\n        chars_format::fixed, 1078, errc{}, 0x1.fffffffffffffp-1022},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^-1022: incremented last digit\r\n    {\"0.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144020250\"\r\n     \"8199667279499186358524265859260511351695091228726223124931264069530541271189424317838013700808305231545782515\"\r\n     \"4530323827726959236845743044099361970891187471508150509418060480375117378320411851935338796416115205148741308\"\r\n     \"3163272520124606023105869053620631175265621765214646643181420505164043632222668006474326056011713528291579642\"\r\n     \"2274554896821334728738317548403413978098469341510556195293821919814730032341053661708792231510873354131880491\"\r\n     \"1055533902788485678121901775450062980622457102958163711745945687733011032421168917765671370549738710820782247\"\r\n     \"7584250967061891687062782163335299376138075114200886249979505279101870966346394401564490729731565935244123171\"\r\n     \"5398102212132212018470035807616260163568645811358486831521563686919762403704226016998291015626\",\r\n        chars_format::fixed, 1077, errc{}, 0x1.fffffffffffffp-1022},\r\n\r\n    // just below (1 + 2^-53) * 2^-33: decremented last digit, then appended three 9 digits\r\n    {\"0.00000000011641532182693482737782207114105741986576081359316958696581423282623291015624999\", chars_format::fixed,\r\n        91, errc{}, 0x1.0000000000000p-33},\r\n\r\n    // (1 + 2^-53) * 2^-33 exactly\r\n    {\"0.00000000011641532182693482737782207114105741986576081359316958696581423282623291015625\", chars_format::fixed,\r\n        88, errc{}, 0x1.0000000000000p-33},\r\n\r\n    // (1 + 2^-53) * 2^-33 exactly, followed by a thousand 0 digits\r\n    {\"0.\"\r\n     \"0000000001164153218269348273778220711410574198657608135931695869658142328262329101562500000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\r\n        chars_format::fixed, 1088, errc{}, 0x1.0000000000000p-33},\r\n\r\n    // above (1 + 2^-53) * 2^-33: appended a thousand 0 digits followed by a 1 digit\r\n    {\"0.\"\r\n     \"0000000001164153218269348273778220711410574198657608135931695869658142328262329101562500000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\",\r\n        chars_format::fixed, 1089, errc{}, 0x1.0000000000001p-33},\r\n\r\n    // above (1 + 2^-53) * 2^-33: appended a 1 digit\r\n    {\"0.000000000116415321826934827377822071141057419865760813593169586965814232826232910156251\", chars_format::fixed,\r\n        89, errc{}, 0x1.0000000000001p-33},\r\n\r\n    // above (1 + 2^-53) * 2^-33: incremented last digit\r\n    {\"0.00000000011641532182693482737782207114105741986576081359316958696581423282623291015626\", chars_format::fixed,\r\n        88, errc{}, 0x1.0000000000001p-33},\r\n\r\n    // just below (1 + 1 - 3 * 2^-53) * 2^-33: decremented last digit, then appended three 9 digits\r\n    {\"0.00000000023283064365386959013215878657682774040271755922049123910255730152130126953124999\", chars_format::fixed,\r\n        91, errc{}, 0x1.ffffffffffffep-33},\r\n\r\n    // (1 + 1 - 3 * 2^-53) * 2^-33 exactly\r\n    {\"0.00000000023283064365386959013215878657682774040271755922049123910255730152130126953125\", chars_format::fixed,\r\n        88, errc{}, 0x1.ffffffffffffep-33},\r\n\r\n    // (1 + 1 - 3 * 2^-53) * 2^-33 exactly, followed by a thousand 0 digits\r\n    {\"0.\"\r\n     \"0000000002328306436538695901321587865768277404027175592204912391025573015213012695312500000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\r\n        chars_format::fixed, 1088, errc{}, 0x1.ffffffffffffep-33},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^-33: appended a thousand 0 digits followed by a 1 digit\r\n    {\"0.\"\r\n     \"0000000002328306436538695901321587865768277404027175592204912391025573015213012695312500000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\",\r\n        chars_format::fixed, 1089, errc{}, 0x1.fffffffffffffp-33},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^-33: appended a 1 digit\r\n    {\"0.000000000232830643653869590132158786576827740402717559220491239102557301521301269531251\", chars_format::fixed,\r\n        89, errc{}, 0x1.fffffffffffffp-33},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^-33: incremented last digit\r\n    {\"0.00000000023283064365386959013215878657682774040271755922049123910255730152130126953126\", chars_format::fixed,\r\n        88, errc{}, 0x1.fffffffffffffp-33},\r\n\r\n    // just below (1 + 2^-53) * 2^0: decremented last digit, then appended three 9 digits\r\n    {\"1.00000000000000011102230246251565404236316680908203124999\", chars_format::fixed, 58, errc{},\r\n        0x1.0000000000000p+0},\r\n\r\n    // (1 + 2^-53) * 2^0 exactly\r\n    {\"1.00000000000000011102230246251565404236316680908203125\", chars_format::fixed, 55, errc{}, 0x1.0000000000000p+0},\r\n\r\n    // (1 + 2^-53) * 2^0 exactly, followed by a thousand 0 digits\r\n    {\"1.\"\r\n     \"0000000000000001110223024625156540423631668090820312500000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"000000000000000000000000000000000000000000000000000000000000000000000000\",\r\n        chars_format::fixed, 1055, errc{}, 0x1.0000000000000p+0},\r\n\r\n    // above (1 + 2^-53) * 2^0: appended a thousand 0 digits followed by a 1 digit\r\n    {\"1.\"\r\n     \"0000000000000001110223024625156540423631668090820312500000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000001\",\r\n        chars_format::fixed, 1056, errc{}, 0x1.0000000000001p+0},\r\n\r\n    // above (1 + 2^-53) * 2^0: appended a 1 digit\r\n    {\"1.000000000000000111022302462515654042363166809082031251\", chars_format::fixed, 56, errc{}, 0x1.0000000000001p+0},\r\n\r\n    // above (1 + 2^-53) * 2^0: incremented last digit\r\n    {\"1.00000000000000011102230246251565404236316680908203126\", chars_format::fixed, 55, errc{}, 0x1.0000000000001p+0},\r\n\r\n    // just below (1 + 1 - 3 * 2^-53) * 2^0: decremented last digit, then appended three 9 digits\r\n    {\"1.99999999999999966693309261245303787291049957275390624999\", chars_format::fixed, 58, errc{},\r\n        0x1.ffffffffffffep+0},\r\n\r\n    // (1 + 1 - 3 * 2^-53) * 2^0 exactly\r\n    {\"1.99999999999999966693309261245303787291049957275390625\", chars_format::fixed, 55, errc{}, 0x1.ffffffffffffep+0},\r\n\r\n    // (1 + 1 - 3 * 2^-53) * 2^0 exactly, followed by a thousand 0 digits\r\n    {\"1.\"\r\n     \"9999999999999996669330926124530378729104995727539062500000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"000000000000000000000000000000000000000000000000000000000000000000000000\",\r\n        chars_format::fixed, 1055, errc{}, 0x1.ffffffffffffep+0},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^0: appended a thousand 0 digits followed by a 1 digit\r\n    {\"1.\"\r\n     \"9999999999999996669330926124530378729104995727539062500000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000001\",\r\n        chars_format::fixed, 1056, errc{}, 0x1.fffffffffffffp+0},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^0: appended a 1 digit\r\n    {\"1.999999999999999666933092612453037872910499572753906251\", chars_format::fixed, 56, errc{}, 0x1.fffffffffffffp+0},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^0: incremented last digit\r\n    {\"1.99999999999999966693309261245303787291049957275390626\", chars_format::fixed, 55, errc{}, 0x1.fffffffffffffp+0},\r\n\r\n    // just below (1 + 2^-53) * 2^33: decremented last digit, then appended three 9 digits\r\n    {\"8589934592.00000095367431640624999\", chars_format::fixed, 34, errc{}, 0x1.0000000000000p+33},\r\n\r\n    // (1 + 2^-53) * 2^33 exactly\r\n    {\"8589934592.00000095367431640625\", chars_format::fixed, 31, errc{}, 0x1.0000000000000p+33},\r\n\r\n    // (1 + 2^-53) * 2^33 exactly, followed by a thousand 0 digits\r\n    {\"8589934592.\"\r\n     \"0000009536743164062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"000000000000000000000000000000000000000\",\r\n        chars_format::fixed, 1031, errc{}, 0x1.0000000000000p+33},\r\n\r\n    // above (1 + 2^-53) * 2^33: appended a thousand 0 digits followed by a 1 digit\r\n    {\"8589934592.\"\r\n     \"0000009536743164062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000001\",\r\n        chars_format::fixed, 1032, errc{}, 0x1.0000000000001p+33},\r\n\r\n    // above (1 + 2^-53) * 2^33: appended a 1 digit\r\n    {\"8589934592.000000953674316406251\", chars_format::fixed, 32, errc{}, 0x1.0000000000001p+33},\r\n\r\n    // above (1 + 2^-53) * 2^33: incremented last digit\r\n    {\"8589934592.00000095367431640626\", chars_format::fixed, 31, errc{}, 0x1.0000000000001p+33},\r\n\r\n    // just below (1 + 1 - 3 * 2^-53) * 2^33: decremented last digit, then appended three 9 digits\r\n    {\"17179869183.99999713897705078124999\", chars_format::fixed, 35, errc{}, 0x1.ffffffffffffep+33},\r\n\r\n    // (1 + 1 - 3 * 2^-53) * 2^33 exactly\r\n    {\"17179869183.99999713897705078125\", chars_format::fixed, 32, errc{}, 0x1.ffffffffffffep+33},\r\n\r\n    // (1 + 1 - 3 * 2^-53) * 2^33 exactly, followed by a thousand 0 digits\r\n    {\"17179869183.\"\r\n     \"9999971389770507812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"000000000000000000000000000000000000000\",\r\n        chars_format::fixed, 1032, errc{}, 0x1.ffffffffffffep+33},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^33: appended a thousand 0 digits followed by a 1 digit\r\n    {\"17179869183.\"\r\n     \"9999971389770507812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000001\",\r\n        chars_format::fixed, 1033, errc{}, 0x1.fffffffffffffp+33},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^33: appended a 1 digit\r\n    {\"17179869183.999997138977050781251\", chars_format::fixed, 33, errc{}, 0x1.fffffffffffffp+33},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^33: incremented last digit\r\n    {\"17179869183.99999713897705078126\", chars_format::fixed, 32, errc{}, 0x1.fffffffffffffp+33},\r\n\r\n    // just below (1 + 2^-53) * 2^77: decremented last digit, then appended three 9 digits\r\n    {\"151115727451828663615487.999\", chars_format::fixed, 28, errc{}, 0x1.0000000000000p+77},\r\n\r\n    // (1 + 2^-53) * 2^77 exactly\r\n    {\"151115727451828663615488\", chars_format::fixed, 24, errc{}, 0x1.0000000000000p+77},\r\n\r\n    // (1 + 2^-53) * 2^77 exactly, followed by a thousand 0 digits\r\n    {\"151115727451828663615488.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000\",\r\n        chars_format::fixed, 1025, errc{}, 0x1.0000000000000p+77},\r\n\r\n    // above (1 + 2^-53) * 2^77: appended a thousand 0 digits followed by a 1 digit\r\n    {\"151115727451828663615488.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000001\",\r\n        chars_format::fixed, 1026, errc{}, 0x1.0000000000001p+77},\r\n\r\n    // above (1 + 2^-53) * 2^77: appended a 1 digit\r\n    {\"151115727451828663615488.1\", chars_format::fixed, 26, errc{}, 0x1.0000000000001p+77},\r\n\r\n    // above (1 + 2^-53) * 2^77: incremented last digit\r\n    {\"151115727451828663615489\", chars_format::fixed, 24, errc{}, 0x1.0000000000001p+77},\r\n\r\n    // just below (1 + 1 - 3 * 2^-53) * 2^77: decremented last digit, then appended three 9 digits\r\n    {\"302231454903657243344895.999\", chars_format::fixed, 28, errc{}, 0x1.ffffffffffffep+77},\r\n\r\n    // (1 + 1 - 3 * 2^-53) * 2^77 exactly\r\n    {\"302231454903657243344896\", chars_format::fixed, 24, errc{}, 0x1.ffffffffffffep+77},\r\n\r\n    // (1 + 1 - 3 * 2^-53) * 2^77 exactly, followed by a thousand 0 digits\r\n    {\"302231454903657243344896.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000\",\r\n        chars_format::fixed, 1025, errc{}, 0x1.ffffffffffffep+77},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^77: appended a thousand 0 digits followed by a 1 digit\r\n    {\"302231454903657243344896.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000001\",\r\n        chars_format::fixed, 1026, errc{}, 0x1.fffffffffffffp+77},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^77: appended a 1 digit\r\n    {\"302231454903657243344896.1\", chars_format::fixed, 26, errc{}, 0x1.fffffffffffffp+77},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^77: incremented last digit\r\n    {\"302231454903657243344897\", chars_format::fixed, 24, errc{}, 0x1.fffffffffffffp+77},\r\n\r\n    // just below (1 + 2^-53) * 2^1023: decremented last digit, then appended three 9 digits\r\n    {\"8988465674311580536566680721305029496276241413130815897397134275615404541548669375241369800602409693534988440\"\r\n     \"3114202125541629105369684531108613657287705365884742938136589844238179474556051429647415148697857438797685859\"\r\n     \"063890851407391008830874765563025951597582513936655578157348020066364210154316532161708031.999\",\r\n        chars_format::fixed, 312, errc{}, 0x1.0000000000000p+1023},\r\n\r\n    // (1 + 2^-53) * 2^1023 exactly\r\n    {\"8988465674311580536566680721305029496276241413130815897397134275615404541548669375241369800602409693534988440\"\r\n     \"3114202125541629105369684531108613657287705365884742938136589844238179474556051429647415148697857438797685859\"\r\n     \"063890851407391008830874765563025951597582513936655578157348020066364210154316532161708032\",\r\n        chars_format::fixed, 308, errc{}, 0x1.0000000000000p+1023},\r\n\r\n    // (1 + 2^-53) * 2^1023 exactly, followed by a thousand 0 digits\r\n    {\"8988465674311580536566680721305029496276241413130815897397134275615404541548669375241369800602409693534988440\"\r\n     \"3114202125541629105369684531108613657287705365884742938136589844238179474556051429647415148697857438797685859\"\r\n     \"063890851407391008830874765563025951597582513936655578157348020066364210154316532161708032.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000\",\r\n        chars_format::fixed, 1309, errc{}, 0x1.0000000000000p+1023},\r\n\r\n    // above (1 + 2^-53) * 2^1023: appended a thousand 0 digits followed by a 1 digit\r\n    {\"8988465674311580536566680721305029496276241413130815897397134275615404541548669375241369800602409693534988440\"\r\n     \"3114202125541629105369684531108613657287705365884742938136589844238179474556051429647415148697857438797685859\"\r\n     \"063890851407391008830874765563025951597582513936655578157348020066364210154316532161708032.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000001\",\r\n        chars_format::fixed, 1310, errc{}, 0x1.0000000000001p+1023},\r\n\r\n    // above (1 + 2^-53) * 2^1023: appended a 1 digit\r\n    {\"8988465674311580536566680721305029496276241413130815897397134275615404541548669375241369800602409693534988440\"\r\n     \"3114202125541629105369684531108613657287705365884742938136589844238179474556051429647415148697857438797685859\"\r\n     \"063890851407391008830874765563025951597582513936655578157348020066364210154316532161708032.1\",\r\n        chars_format::fixed, 310, errc{}, 0x1.0000000000001p+1023},\r\n\r\n    // above (1 + 2^-53) * 2^1023: incremented last digit\r\n    {\"8988465674311580536566680721305029496276241413130815897397134275615404541548669375241369800602409693534988440\"\r\n     \"3114202125541629105369684531108613657287705365884742938136589844238179474556051429647415148697857438797685859\"\r\n     \"063890851407391008830874765563025951597582513936655578157348020066364210154316532161708033\",\r\n        chars_format::fixed, 308, errc{}, 0x1.0000000000001p+1023},\r\n\r\n    // just below (1 + 1 - 3 * 2^-53) * 2^1023: decremented last digit, then appended three 9 digits\r\n    {\"1797693134862315608353258760581052985162070023416521662616611746258695532672923265745300992879465492467506314\"\r\n     \"9033587701752208710592698796290627760473556921329019091915239418047621712533496094635638726128664019802903779\"\r\n     \"9514183602981511756283727771403830521483963923935633133642802139091669457927874464075218943.999\",\r\n        chars_format::fixed, 313, errc{}, 0x1.ffffffffffffep+1023},\r\n\r\n    // (1 + 1 - 3 * 2^-53) * 2^1023 exactly\r\n    {\"1797693134862315608353258760581052985162070023416521662616611746258695532672923265745300992879465492467506314\"\r\n     \"9033587701752208710592698796290627760473556921329019091915239418047621712533496094635638726128664019802903779\"\r\n     \"9514183602981511756283727771403830521483963923935633133642802139091669457927874464075218944\",\r\n        chars_format::fixed, 309, errc{}, 0x1.ffffffffffffep+1023},\r\n\r\n    // (1 + 1 - 3 * 2^-53) * 2^1023 exactly, followed by a thousand 0 digits\r\n    {\"1797693134862315608353258760581052985162070023416521662616611746258695532672923265745300992879465492467506314\"\r\n     \"9033587701752208710592698796290627760473556921329019091915239418047621712533496094635638726128664019802903779\"\r\n     \"9514183602981511756283727771403830521483963923935633133642802139091669457927874464075218944.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000\",\r\n        chars_format::fixed, 1310, errc{}, 0x1.ffffffffffffep+1023},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^1023: appended a thousand 0 digits followed by a 1 digit\r\n    {\"1797693134862315608353258760581052985162070023416521662616611746258695532672923265745300992879465492467506314\"\r\n     \"9033587701752208710592698796290627760473556921329019091915239418047621712533496094635638726128664019802903779\"\r\n     \"9514183602981511756283727771403830521483963923935633133642802139091669457927874464075218944.\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000001\",\r\n        chars_format::fixed, 1311, errc{}, 0x1.fffffffffffffp+1023},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^1023: appended a 1 digit\r\n    {\"1797693134862315608353258760581052985162070023416521662616611746258695532672923265745300992879465492467506314\"\r\n     \"9033587701752208710592698796290627760473556921329019091915239418047621712533496094635638726128664019802903779\"\r\n     \"9514183602981511756283727771403830521483963923935633133642802139091669457927874464075218944.1\",\r\n        chars_format::fixed, 311, errc{}, 0x1.fffffffffffffp+1023},\r\n\r\n    // above (1 + 1 - 3 * 2^-53) * 2^1023: incremented last digit\r\n    {\"1797693134862315608353258760581052985162070023416521662616611746258695532672923265745300992879465492467506314\"\r\n     \"9033587701752208710592698796290627760473556921329019091915239418047621712533496094635638726128664019802903779\"\r\n     \"9514183602981511756283727771403830521483963923935633133642802139091669457927874464075218945\",\r\n        chars_format::fixed, 309, errc{}, 0x1.fffffffffffffp+1023},\r\n\r\n    // VSO-852024 also affected hexfloats.\r\n    {\"0.00000000000008p-1022\", chars_format::hex, 22, errc::result_out_of_range, 0x0.0000000000000p+0},\r\n    {\"0.\"\r\n     \"0000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000001p-1022\",\r\n        chars_format::hex, 1023, errc{}, 0x0.0000000000001p-1022},\r\n\r\n    {\"0.ffffffffffffe8p-1022\", chars_format::hex, 22, errc{}, 0x0.ffffffffffffep-1022},\r\n    {\"0.\"\r\n     \"ffffffffffffe800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000001p-1022\",\r\n        chars_format::hex, 1023, errc{}, 0x0.fffffffffffffp-1022},\r\n\r\n    {\"1.00000000000008p+0\", chars_format::hex, 19, errc{}, 0x1.0000000000000p+0},\r\n    {\"1.\"\r\n     \"0000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000001p+0\",\r\n        chars_format::hex, 1020, errc{}, 0x1.0000000000001p+0},\r\n\r\n    {\"1.ffffffffffffe8p+0\", chars_format::hex, 19, errc{}, 0x1.ffffffffffffep+0},\r\n    {\"1.\"\r\n     \"ffffffffffffe800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000001p+0\",\r\n        chars_format::hex, 1020, errc{}, 0x1.fffffffffffffp+0},\r\n\r\n    {\"1.00000000000008p+1023\", chars_format::hex, 22, errc{}, 0x1.0000000000000p+1023},\r\n    {\"1.\"\r\n     \"0000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000001p+1023\",\r\n        chars_format::hex, 1023, errc{}, 0x1.0000000000001p+1023},\r\n\r\n    {\"1.ffffffffffffe8p+1023\", chars_format::hex, 22, errc{}, 0x1.ffffffffffffep+1023},\r\n    {\"1.\"\r\n     \"ffffffffffffe800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000001p+1023\",\r\n        chars_format::hex, 1023, errc{}, 0x1.fffffffffffffp+1023},\r\n\r\n    // VSO-733765 \"<charconv>: [Feedback] double std::from_chars behavior on exponent out of range\"\r\n    // LWG-3081 \"Floating point from_chars API does not distinguish between overflow and underflow\"\r\n    // These test cases exercise every overflow/underflow codepath.\r\n    {\"1e+1000\", chars_format::scientific, 7, errc::result_out_of_range, double_inf},\r\n    {\"1e-1000\", chars_format::scientific, 7, errc::result_out_of_range, 0.0},\r\n    {\"1.fffffffffffff8p+1023\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n    {\"1e+2000\", chars_format::scientific, 7, errc::result_out_of_range, double_inf},\r\n    {\"1e-2000\", chars_format::scientific, 7, errc::result_out_of_range, 0.0},\r\n    {\"1e+9999\", chars_format::scientific, 7, errc::result_out_of_range, double_inf},\r\n    {\"1e-9999\", chars_format::scientific, 7, errc::result_out_of_range, 0.0},\r\n    {\"10e+5199\", chars_format::scientific, 8, errc::result_out_of_range, double_inf},\r\n    {\"0.001e-5199\", chars_format::scientific, 11, errc::result_out_of_range, 0.0},\r\n\r\n    // GH-931 \"<charconv>: hex from_chars(\\\"0.fffffffffffff8p-1022\\\") is incorrect\"\r\n    // Test cases for values close to std::numeric_limits<double>::min() and std::numeric_limits<double>::max()\r\n    {\"0.fffffffffffffp-1022\", chars_format::hex, 21, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"1.0000000000000p-1022\", chars_format::hex, 21, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    {\"1.ffffffffffffep-1023\", chars_format::hex, 21, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"1.fffffffffffffp-1023\", chars_format::hex, 21, errc{}, 0x1.0000000000000p-1022},\r\n    {\"2.0000000000000p-1023\", chars_format::hex, 21, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    {\"3.ffffffffffffcp-1024\", chars_format::hex, 21, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"3.ffffffffffffdp-1024\", chars_format::hex, 21, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"3.ffffffffffffep-1024\", chars_format::hex, 21, errc{}, 0x1.0000000000000p-1022},\r\n    {\"3.fffffffffffffp-1024\", chars_format::hex, 21, errc{}, 0x1.0000000000000p-1022},\r\n    {\"4.0000000000000p-1024\", chars_format::hex, 21, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    {\"7.ffffffffffff8p-1025\", chars_format::hex, 21, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"7.ffffffffffff9p-1025\", chars_format::hex, 21, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"7.ffffffffffffbp-1025\", chars_format::hex, 21, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"7.ffffffffffffcp-1025\", chars_format::hex, 21, errc{}, 0x1.0000000000000p-1022},\r\n    {\"7.ffffffffffffdp-1025\", chars_format::hex, 21, errc{}, 0x1.0000000000000p-1022},\r\n    {\"7.ffffffffffffep-1025\", chars_format::hex, 21, errc{}, 0x1.0000000000000p-1022},\r\n    {\"7.fffffffffffffp-1025\", chars_format::hex, 21, errc{}, 0x1.0000000000000p-1022},\r\n    {\"8.0000000000000p-1025\", chars_format::hex, 21, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    {\"0.fffffffffffff0p-1022\", chars_format::hex, 22, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"0.fffffffffffff1p-1022\", chars_format::hex, 22, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"0.fffffffffffff7p-1022\", chars_format::hex, 22, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"0.fffffffffffff8p-1022\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"0.fffffffffffff9p-1022\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"0.fffffffffffffbp-1022\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"0.fffffffffffffcp-1022\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"0.fffffffffffffdp-1022\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"0.ffffffffffffffp-1022\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"1.00000000000000p-1022\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    {\"1.ffffffffffffe0p-1023\", chars_format::hex, 22, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"1.ffffffffffffe1p-1023\", chars_format::hex, 22, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"1.ffffffffffffefp-1023\", chars_format::hex, 22, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"1.fffffffffffff0p-1023\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"1.fffffffffffff1p-1023\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"1.fffffffffffff7p-1023\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"1.fffffffffffff8p-1023\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"1.fffffffffffff9p-1023\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"1.ffffffffffffffp-1023\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"2.00000000000000p-1023\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    {\"3.ffffffffffffc0p-1024\", chars_format::hex, 22, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"3.ffffffffffffc1p-1024\", chars_format::hex, 22, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"3.ffffffffffffdfp-1024\", chars_format::hex, 22, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"3.ffffffffffffe0p-1024\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"3.ffffffffffffe1p-1024\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"3.ffffffffffffefp-1024\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"3.fffffffffffff0p-1024\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"3.fffffffffffff1p-1024\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"3.ffffffffffffffp-1024\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"4.00000000000000p-1024\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    {\"7.ffffffffffff80p-1025\", chars_format::hex, 22, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"7.ffffffffffff81p-1025\", chars_format::hex, 22, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"7.ffffffffffffbfp-1025\", chars_format::hex, 22, errc{}, 0x0.fffffffffffffp-1022},\r\n    {\"7.ffffffffffffc0p-1025\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"7.ffffffffffffc1p-1025\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"7.ffffffffffffdfp-1025\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"7.ffffffffffffe0p-1025\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"7.ffffffffffffe1p-1025\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"7.ffffffffffffffp-1025\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n    {\"8.00000000000000p-1025\", chars_format::hex, 22, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    {\"1.fffffffffffffp+1023\", chars_format::hex, 21, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"2.0000000000000p+1023\", chars_format::hex, 21, errc::result_out_of_range, double_inf},\r\n\r\n    {\"3.ffffffffffffep+1022\", chars_format::hex, 21, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"3.fffffffffffffp+1022\", chars_format::hex, 21, errc::result_out_of_range, double_inf},\r\n    {\"4.0000000000000p+1022\", chars_format::hex, 21, errc::result_out_of_range, double_inf},\r\n\r\n    {\"7.ffffffffffffcp+1021\", chars_format::hex, 21, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"7.ffffffffffffdp+1021\", chars_format::hex, 21, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"7.ffffffffffffep+1021\", chars_format::hex, 21, errc::result_out_of_range, double_inf},\r\n    {\"7.fffffffffffffp+1021\", chars_format::hex, 21, errc::result_out_of_range, double_inf},\r\n    {\"8.0000000000000p+1021\", chars_format::hex, 21, errc::result_out_of_range, double_inf},\r\n\r\n    {\"0.fffffffffffff8p+1024\", chars_format::hex, 22, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"0.fffffffffffff9p+1024\", chars_format::hex, 22, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"0.fffffffffffffbp+1024\", chars_format::hex, 22, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"0.fffffffffffffcp+1024\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n    {\"0.fffffffffffffdp+1024\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n    {\"0.ffffffffffffffp+1024\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n    {\"1.00000000000000p+1024\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n\r\n    {\"1.fffffffffffff0p+1023\", chars_format::hex, 22, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"1.fffffffffffff1p+1023\", chars_format::hex, 22, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"1.fffffffffffff7p+1023\", chars_format::hex, 22, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"1.fffffffffffff8p+1023\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n    {\"1.fffffffffffff9p+1023\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n    {\"1.ffffffffffffffp+1023\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n    {\"2.00000000000000p+1023\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n\r\n    {\"3.ffffffffffffe0p+1022\", chars_format::hex, 22, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"3.ffffffffffffe1p+1022\", chars_format::hex, 22, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"3.ffffffffffffefp+1022\", chars_format::hex, 22, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"3.fffffffffffff0p+1022\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n    {\"3.fffffffffffff1p+1022\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n    {\"3.ffffffffffffffp+1022\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n    {\"4.00000000000000p+1022\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n\r\n    {\"7.ffffffffffffc0p+1021\", chars_format::hex, 22, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"7.ffffffffffffc1p+1021\", chars_format::hex, 22, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"7.ffffffffffffdfp+1021\", chars_format::hex, 22, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"7.ffffffffffffe0p+1021\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n    {\"7.ffffffffffffe1p+1021\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n    {\"7.ffffffffffffffp+1021\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n    {\"8.00000000000000p+1021\", chars_format::hex, 22, errc::result_out_of_range, double_inf},\r\n\r\n    {\"0.fffffffffffff80p+1024\", chars_format::hex, 23, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"0.fffffffffffff81p+1024\", chars_format::hex, 23, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"0.fffffffffffffbfp+1024\", chars_format::hex, 23, errc{}, 0x1.fffffffffffffp+1023},\r\n    {\"0.fffffffffffffc0p+1024\", chars_format::hex, 23, errc::result_out_of_range, double_inf},\r\n    {\"0.fffffffffffffc1p+1024\", chars_format::hex, 23, errc::result_out_of_range, double_inf},\r\n    {\"0.fffffffffffffffp+1024\", chars_format::hex, 23, errc::result_out_of_range, double_inf},\r\n    {\"1.000000000000000p+1024\", chars_format::hex, 23, errc::result_out_of_range, double_inf},\r\n\r\n    // (0 + 1 - 2 * 2^-53) * 2^-1022 exactly\r\n    {\"2.\"\r\n     \"22507385850720088902458687608585988765042311224095946549352480256244000922823569517877588880375915526423097809504\"\r\n     \"34312085877387158357291821993020294379224223559819827501242041788969571311791082261043971979604000454897391938079\"\r\n     \"19893608152561311337614984204327175103362739154978273159414382813627511383860409424946494228631669542910508020181\"\r\n     \"59266421349966065178030950759130587198464239060686371020051087232827846788436319445158661350412234790147923695852\"\r\n     \"08321597621066375401613736583044193603714778355306682834535634005074073040135602968046375918583163124224521599262\"\r\n     \"54649430083685186171942241764645513713542013221703137049658321015465406803539741790602258950302350193751977303094\"\r\n     \"5763173210852507299305089761582519159720757232455434770912461317493580281734466552734375e-308\",\r\n        chars_format::scientific, 773, errc{}, 0x0.fffffffffffffp-1022},\r\n\r\n    // (0 + 1 - 2 * 2^-53) * 2^-1022 exactly, followed by a thousand 0 digits\r\n    {\"2.\"\r\n     \"22507385850720088902458687608585988765042311224095946549352480256244000922823569517877588880375915526423097809504\"\r\n     \"34312085877387158357291821993020294379224223559819827501242041788969571311791082261043971979604000454897391938079\"\r\n     \"19893608152561311337614984204327175103362739154978273159414382813627511383860409424946494228631669542910508020181\"\r\n     \"59266421349966065178030950759130587198464239060686371020051087232827846788436319445158661350412234790147923695852\"\r\n     \"08321597621066375401613736583044193603714778355306682834535634005074073040135602968046375918583163124224521599262\"\r\n     \"54649430083685186171942241764645513713542013221703137049658321015465406803539741790602258950302350193751977303094\"\r\n     \"57631732108525072993050897615825191597207572324554347709124613174935802817344665527343750000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000e-308\",\r\n        chars_format::scientific, 1773, errc{}, 0x0.fffffffffffffp-1022},\r\n\r\n    // above (0 + 1 - 2 * 2^-53) * 2^-1022, appended a thousand 0 digits followed by a 1 digit\r\n    {\"2.\"\r\n     \"22507385850720088902458687608585988765042311224095946549352480256244000922823569517877588880375915526423097809504\"\r\n     \"34312085877387158357291821993020294379224223559819827501242041788969571311791082261043971979604000454897391938079\"\r\n     \"19893608152561311337614984204327175103362739154978273159414382813627511383860409424946494228631669542910508020181\"\r\n     \"59266421349966065178030950759130587198464239060686371020051087232827846788436319445158661350412234790147923695852\"\r\n     \"08321597621066375401613736583044193603714778355306682834535634005074073040135602968046375918583163124224521599262\"\r\n     \"54649430083685186171942241764645513713542013221703137049658321015465406803539741790602258950302350193751977303094\"\r\n     \"57631732108525072993050897615825191597207572324554347709124613174935802817344665527343750000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"000000000000000000000000000000000000000000000000000000000000000000000001e-308\",\r\n        chars_format::scientific, 1774, errc{}, 0x0.fffffffffffffp-1022},\r\n\r\n    // above (0 + 1 - 2 * 2^-53) * 2^-1022: appended a 1 digit\r\n    {\"2.\"\r\n     \"22507385850720088902458687608585988765042311224095946549352480256244000922823569517877588880375915526423097809504\"\r\n     \"34312085877387158357291821993020294379224223559819827501242041788969571311791082261043971979604000454897391938079\"\r\n     \"19893608152561311337614984204327175103362739154978273159414382813627511383860409424946494228631669542910508020181\"\r\n     \"59266421349966065178030950759130587198464239060686371020051087232827846788436319445158661350412234790147923695852\"\r\n     \"08321597621066375401613736583044193603714778355306682834535634005074073040135602968046375918583163124224521599262\"\r\n     \"54649430083685186171942241764645513713542013221703137049658321015465406803539741790602258950302350193751977303094\"\r\n     \"57631732108525072993050897615825191597207572324554347709124613174935802817344665527343751e-308\",\r\n        chars_format::scientific, 774, errc{}, 0x0.fffffffffffffp-1022},\r\n\r\n    // above (0 + 1 - 2 * 2^-53) * 2^-1022: incremented last digit\r\n    {\"2.\"\r\n     \"22507385850720088902458687608585988765042311224095946549352480256244000922823569517877588880375915526423097809504\"\r\n     \"34312085877387158357291821993020294379224223559819827501242041788969571311791082261043971979604000454897391938079\"\r\n     \"19893608152561311337614984204327175103362739154978273159414382813627511383860409424946494228631669542910508020181\"\r\n     \"59266421349966065178030950759130587198464239060686371020051087232827846788436319445158661350412234790147923695852\"\r\n     \"08321597621066375401613736583044193603714778355306682834535634005074073040135602968046375918583163124224521599262\"\r\n     \"54649430083685186171942241764645513713542013221703137049658321015465406803539741790602258950302350193751977303094\"\r\n     \"5763173210852507299305089761582519159720757232455434770912461317493580281734466552734376e-308\",\r\n        chars_format::scientific, 773, errc{}, 0x0.fffffffffffffp-1022},\r\n\r\n    // below (0 + 1 - 2^-53) * 2^-1022: decremented last digit, then appended three 9 digits\r\n    {\"2.\"\r\n     \"22507385850720113605740979670913197593481954635164564802342610972482222202107694551652952390813508791414915891303\"\r\n     \"96211068700864386945946455276572074078206217433799881410632673292535522868813721490129811224514518898490572223072\"\r\n     \"85255133155755015914397476397983411801999323962548289017107081850690630666655994938275772572015763062690663332647\"\r\n     \"56530000924588831643303777979186961204949739037782970490505108060994073026293712895895000358379996720725430436028\"\r\n     \"40788957717961509455167482434710307026091446215722898802581825451803257070188608721131280795122334262883686223215\"\r\n     \"03775666622503982534335974568884423900265498198385487948292206894721689831099698365846814022854243330660339850886\"\r\n     \"44580400103493397042756718644338377048603786162277173854562306587467901408672332763671874999e-308\",\r\n        chars_format::scientific, 777, errc{}, 0x0.fffffffffffffp-1022},\r\n\r\n    // (0 + 1 - 2^-53) * 2^-1022 exactly\r\n    {\"2.\"\r\n     \"22507385850720113605740979670913197593481954635164564802342610972482222202107694551652952390813508791414915891303\"\r\n     \"96211068700864386945946455276572074078206217433799881410632673292535522868813721490129811224514518898490572223072\"\r\n     \"85255133155755015914397476397983411801999323962548289017107081850690630666655994938275772572015763062690663332647\"\r\n     \"56530000924588831643303777979186961204949739037782970490505108060994073026293712895895000358379996720725430436028\"\r\n     \"40788957717961509455167482434710307026091446215722898802581825451803257070188608721131280795122334262883686223215\"\r\n     \"03775666622503982534335974568884423900265498198385487948292206894721689831099698365846814022854243330660339850886\"\r\n     \"44580400103493397042756718644338377048603786162277173854562306587467901408672332763671875e-308\",\r\n        chars_format::scientific, 774, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    // (0 + 1 - 2^-53) * 2^-1022 exactly, followed by a thousand 0 digits\r\n    {\"2.\"\r\n     \"22507385850720113605740979670913197593481954635164564802342610972482222202107694551652952390813508791414915891303\"\r\n     \"96211068700864386945946455276572074078206217433799881410632673292535522868813721490129811224514518898490572223072\"\r\n     \"85255133155755015914397476397983411801999323962548289017107081850690630666655994938275772572015763062690663332647\"\r\n     \"56530000924588831643303777979186961204949739037782970490505108060994073026293712895895000358379996720725430436028\"\r\n     \"40788957717961509455167482434710307026091446215722898802581825451803257070188608721131280795122334262883686223215\"\r\n     \"03775666622503982534335974568884423900265498198385487948292206894721689831099698365846814022854243330660339850886\"\r\n     \"44580400103493397042756718644338377048603786162277173854562306587467901408672332763671875000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"000000000000000000000000000000000000000000000000000000000000000000000000e-308\",\r\n        chars_format::scientific, 1774, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    // above (0 + 1 - 2^-53) * 2^-1022: append a thousand 0 digits followed by a 1 digit\r\n    {\"2.\"\r\n     \"22507385850720113605740979670913197593481954635164564802342610972482222202107694551652952390813508791414915891303\"\r\n     \"96211068700864386945946455276572074078206217433799881410632673292535522868813721490129811224514518898490572223072\"\r\n     \"85255133155755015914397476397983411801999323962548289017107081850690630666655994938275772572015763062690663332647\"\r\n     \"56530000924588831643303777979186961204949739037782970490505108060994073026293712895895000358379996720725430436028\"\r\n     \"40788957717961509455167482434710307026091446215722898802581825451803257070188608721131280795122334262883686223215\"\r\n     \"03775666622503982534335974568884423900265498198385487948292206894721689831099698365846814022854243330660339850886\"\r\n     \"44580400103493397042756718644338377048603786162277173854562306587467901408672332763671875000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000001e-308\",\r\n        chars_format::scientific, 1775, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    // above (0 + 1 - 2^-53) * 2^-1022: appended a 1 digit\r\n    {\"2.\"\r\n     \"22507385850720113605740979670913197593481954635164564802342610972482222202107694551652952390813508791414915891303\"\r\n     \"96211068700864386945946455276572074078206217433799881410632673292535522868813721490129811224514518898490572223072\"\r\n     \"85255133155755015914397476397983411801999323962548289017107081850690630666655994938275772572015763062690663332647\"\r\n     \"56530000924588831643303777979186961204949739037782970490505108060994073026293712895895000358379996720725430436028\"\r\n     \"40788957717961509455167482434710307026091446215722898802581825451803257070188608721131280795122334262883686223215\"\r\n     \"03775666622503982534335974568884423900265498198385487948292206894721689831099698365846814022854243330660339850886\"\r\n     \"445804001034933970427567186443383770486037861622771738545623065874679014086723327636718751e-308\",\r\n        chars_format::scientific, 775, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    // above (0 + 1 - 2^-53) * 2^-1022: incremented last digit\r\n    {\"2.\"\r\n     \"22507385850720113605740979670913197593481954635164564802342610972482222202107694551652952390813508791414915891303\"\r\n     \"96211068700864386945946455276572074078206217433799881410632673292535522868813721490129811224514518898490572223072\"\r\n     \"85255133155755015914397476397983411801999323962548289017107081850690630666655994938275772572015763062690663332647\"\r\n     \"56530000924588831643303777979186961204949739037782970490505108060994073026293712895895000358379996720725430436028\"\r\n     \"40788957717961509455167482434710307026091446215722898802581825451803257070188608721131280795122334262883686223215\"\r\n     \"03775666622503982534335974568884423900265498198385487948292206894721689831099698365846814022854243330660339850886\"\r\n     \"44580400103493397042756718644338377048603786162277173854562306587467901408672332763671876e-308\",\r\n        chars_format::scientific, 774, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    // below (0 + 1 - 0.5 * 2^-53) * 2^-1022: decremented last digit, then appended three 9 digits\r\n    {\"2.\"\r\n     \"22507385850720125957382125702076802007701776340698873928837676330601332841749757068540634146032305423910824932203\"\r\n     \"77160560112603001240273771918347963927697214370789908365327989044318498647325041104672730846969778120287162365569\"\r\n     \"67935895657351868202788722494811530151317616366333296945953431369222190308053787694940411743707809822580740988880\"\r\n     \"55161790711900214875940191589215148208192489026331270225732118475077186145222409621263169862363877686014183806116\"\r\n     \"57022637766409076481944355360543363737279780145931006786604921175167849085215111597673733233391919832213268535191\"\r\n     \"28338784891913380715532840971003878993627240686726663397609149834349831344879676653469091559130189899114521124782\"\r\n     \"380547341009775590676096291585949697743018930811385869272811532937339507043361663818359374999e-308\",\r\n        chars_format::scientific, 778, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    // (0 + 1 - 0.5 * 2^-53) * 2^-1022 exactly\r\n    {\"2.\"\r\n     \"22507385850720125957382125702076802007701776340698873928837676330601332841749757068540634146032305423910824932203\"\r\n     \"77160560112603001240273771918347963927697214370789908365327989044318498647325041104672730846969778120287162365569\"\r\n     \"67935895657351868202788722494811530151317616366333296945953431369222190308053787694940411743707809822580740988880\"\r\n     \"55161790711900214875940191589215148208192489026331270225732118475077186145222409621263169862363877686014183806116\"\r\n     \"57022637766409076481944355360543363737279780145931006786604921175167849085215111597673733233391919832213268535191\"\r\n     \"28338784891913380715532840971003878993627240686726663397609149834349831344879676653469091559130189899114521124782\"\r\n     \"380547341009775590676096291585949697743018930811385869272811532937339507043361663818359375e-308\",\r\n        chars_format::scientific, 775, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    // (0 + 1 - 0.5 * 2^-53) * 2^-1022 exactly, followed by a thousand 0 digits\r\n    {\"2.\"\r\n     \"22507385850720125957382125702076802007701776340698873928837676330601332841749757068540634146032305423910824932203\"\r\n     \"77160560112603001240273771918347963927697214370789908365327989044318498647325041104672730846969778120287162365569\"\r\n     \"67935895657351868202788722494811530151317616366333296945953431369222190308053787694940411743707809822580740988880\"\r\n     \"55161790711900214875940191589215148208192489026331270225732118475077186145222409621263169862363877686014183806116\"\r\n     \"57022637766409076481944355360543363737279780145931006786604921175167849085215111597673733233391919832213268535191\"\r\n     \"28338784891913380715532840971003878993627240686726663397609149834349831344879676653469091559130189899114521124782\"\r\n     \"38054734100977559067609629158594969774301893081138586927281153293733950704336166381835937500000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000e-308\",\r\n        chars_format::scientific, 1775, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    // above (0 + 1 - 0.5 * 2^-53) * 2^-1022: append a thousand 0 digits followed by a 1 digit\r\n    {\"2.\"\r\n     \"22507385850720125957382125702076802007701776340698873928837676330601332841749757068540634146032305423910824932203\"\r\n     \"77160560112603001240273771918347963927697214370789908365327989044318498647325041104672730846969778120287162365569\"\r\n     \"67935895657351868202788722494811530151317616366333296945953431369222190308053787694940411743707809822580740988880\"\r\n     \"55161790711900214875940191589215148208192489026331270225732118475077186145222409621263169862363877686014183806116\"\r\n     \"57022637766409076481944355360543363737279780145931006786604921175167849085215111597673733233391919832213268535191\"\r\n     \"28338784891913380715532840971003878993627240686726663397609149834349831344879676653469091559130189899114521124782\"\r\n     \"38054734100977559067609629158594969774301893081138586927281153293733950704336166381835937500000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000001e-308\",\r\n        chars_format::scientific, 1776, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    // above (0 + 1 - 0.5 * 2^-53) * 2^-1022: appended a 1 digit\r\n    {\"2.\"\r\n     \"22507385850720125957382125702076802007701776340698873928837676330601332841749757068540634146032305423910824932203\"\r\n     \"77160560112603001240273771918347963927697214370789908365327989044318498647325041104672730846969778120287162365569\"\r\n     \"67935895657351868202788722494811530151317616366333296945953431369222190308053787694940411743707809822580740988880\"\r\n     \"55161790711900214875940191589215148208192489026331270225732118475077186145222409621263169862363877686014183806116\"\r\n     \"57022637766409076481944355360543363737279780145931006786604921175167849085215111597673733233391919832213268535191\"\r\n     \"28338784891913380715532840971003878993627240686726663397609149834349831344879676653469091559130189899114521124782\"\r\n     \"3805473410097755906760962915859496977430189308113858692728115329373395070433616638183593751e-308\",\r\n        chars_format::scientific, 776, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    // above (0 + 1 - 0.5 * 2^-53) * 2^-1022: incremented last digit\r\n    {\"2.\"\r\n     \"22507385850720125957382125702076802007701776340698873928837676330601332841749757068540634146032305423910824932203\"\r\n     \"77160560112603001240273771918347963927697214370789908365327989044318498647325041104672730846969778120287162365569\"\r\n     \"67935895657351868202788722494811530151317616366333296945953431369222190308053787694940411743707809822580740988880\"\r\n     \"55161790711900214875940191589215148208192489026331270225732118475077186145222409621263169862363877686014183806116\"\r\n     \"57022637766409076481944355360543363737279780145931006786604921175167849085215111597673733233391919832213268535191\"\r\n     \"28338784891913380715532840971003878993627240686726663397609149834349831344879676653469091559130189899114521124782\"\r\n     \"380547341009775590676096291585949697743018930811385869272811532937339507043361663818359376e-308\",\r\n        chars_format::scientific, 775, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    // below 1 * 2^-1022: decremented last digit, then appended three 9 digits\r\n    {\"2.\"\r\n     \"22507385850720138309023271733240406421921598046233183055332741688720443481391819585428315901251102056406733973103\"\r\n     \"58110051524341615534601088560123853777188211307779935320023304796101474425836360719215650469425037342083752508066\"\r\n     \"50616658158948720491179968591639648500635908770118304874799780887753749949451580451605050915399856582470818645113\"\r\n     \"53793580499211598108576605199243335211435239014879569960959128889160299264151106346631339366347758651302937176204\"\r\n     \"73256317814856643508721228286376420448468114076139114770628016898532441100241614474216185671661505401542850847167\"\r\n     \"52901903161322778896729707373123334086988983175067838846926092773977972858659654941091369095406136467568702398678\"\r\n     \"315290680984617210924625396728515624999e-308\",\r\n        chars_format::scientific, 724, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    // 1 * 2^-1022 exactly\r\n    {\"2.\"\r\n     \"22507385850720138309023271733240406421921598046233183055332741688720443481391819585428315901251102056406733973103\"\r\n     \"58110051524341615534601088560123853777188211307779935320023304796101474425836360719215650469425037342083752508066\"\r\n     \"50616658158948720491179968591639648500635908770118304874799780887753749949451580451605050915399856582470818645113\"\r\n     \"53793580499211598108576605199243335211435239014879569960959128889160299264151106346631339366347758651302937176204\"\r\n     \"73256317814856643508721228286376420448468114076139114770628016898532441100241614474216185671661505401542850847167\"\r\n     \"52901903161322778896729707373123334086988983175067838846926092773977972858659654941091369095406136467568702398678\"\r\n     \"315290680984617210924625396728515625e-308\",\r\n        chars_format::scientific, 721, errc{}, 0x1.0000000000000p-1022},\r\n\r\n    // GH-3161: \"<charconv>: from_chars, incorrect conversion of tiny doubles, when specified without a fractional part\"\r\n    // slightly above the midpoint between 0x1.4258265642fe8p-1022 and 0x1.4258265642fe9p-1022, without decimal point\r\n    {\"28017185671564702625986967801367508381305145856029502167789836829722124560807078866183829589255835985468748869481\"\r\n     \"86583142362517164634520243360501584015713807233124871337198558567758800235976556111488605578858880932554217965863\"\r\n     \"07051360968462063659891899462054247537745976596872767714180852945844484408053399155613871082139550145579799707241\"\r\n     \"02739077746853707044081281775302910700845395388393628022004086658191413817026937499382994523889310476633341355125\"\r\n     \"36970161512201336865537906990405470959087815470627336860267082642705818724890923485099076407427813196992821890396\"\r\n     \"81414673574614863062987306855746291767811978264371471321046227200851894843139416687953473478884075454592166055730\"\r\n     \"14774895683738184268219531683594714240155669493243656420489173797250259667634963989257812500000001e-1083\",\r\n        chars_format::scientific, 782, errc{}, 0x1.4258265642fe9p-1022},\r\n\r\n    // (1 + 1 - 2 * 2^-53) * 2^1023 exactly\r\n    {\"17976931348623157081452742373170435679807056752584499659891747680315726078002853876058955863276687817154045895351\"\r\n     \"43824642343213268894641827684675467035375169860499105765512820762454900903893289440758685084551339423045832369032\"\r\n     \"22948165808559332123348274797826204144723168738177180919299881250404026184124858368\",\r\n        chars_format::fixed, 309, errc{}, 0x1.fffffffffffffp+1023},\r\n\r\n    // (1 + 1 - 2 * 2^-53) * 2^1023 exactly, followed by a thousand 0 digits\r\n    {\"17976931348623157081452742373170435679807056752584499659891747680315726078002853876058955863276687817154045895351\"\r\n     \"43824642343213268894641827684675467035375169860499105765512820762454900903893289440758685084551339423045832369032\"\r\n     \"22948165808559332123348274797826204144723168738177180919299881250404026184124858368.\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\r\n        chars_format::fixed, 1310, errc{}, 0x1.fffffffffffffp+1023},\r\n\r\n    // above (1 + 1 - 2 * 2^-53) * 2^1023, appended a thousand 0 digits followed by a 1 digit\r\n    {\"17976931348623157081452742373170435679807056752584499659891747680315726078002853876058955863276687817154045895351\"\r\n     \"43824642343213268894641827684675467035375169860499105765512820762454900903893289440758685084551339423045832369032\"\r\n     \"22948165808559332123348274797826204144723168738177180919299881250404026184124858368.\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\",\r\n        chars_format::fixed, 1311, errc{}, 0x1.fffffffffffffp+1023},\r\n\r\n    // above (1 + 1 - 2 * 2^-53) * 2^1023: appended a 1 digit\r\n    {\"17976931348623157081452742373170435679807056752584499659891747680315726078002853876058955863276687817154045895351\"\r\n     \"43824642343213268894641827684675467035375169860499105765512820762454900903893289440758685084551339423045832369032\"\r\n     \"22948165808559332123348274797826204144723168738177180919299881250404026184124858368.1\",\r\n        chars_format::fixed, 311, errc{}, 0x1.fffffffffffffp+1023},\r\n\r\n    // above (1 + 1 - 2 * 2^-53) * 2^1023: incremented last digit\r\n    {\"17976931348623157081452742373170435679807056752584499659891747680315726078002853876058955863276687817154045895351\"\r\n     \"43824642343213268894641827684675467035375169860499105765512820762454900903893289440758685084551339423045832369032\"\r\n     \"22948165808559332123348274797826204144723168738177180919299881250404026184124858369\",\r\n        chars_format::fixed, 309, errc{}, 0x1.fffffffffffffp+1023},\r\n\r\n    // below (1 + 1 - 2^-53) * 2^1023: decremented last digit, then appended three 9 digits\r\n    {\"17976931348623158079372897140530341507993413271003782693617377898044496829276475094664901797758720709633028641669\"\r\n     \"28879109465555478519404026306574886715058206819089020007083836762738548458177115317644757302700698555713669596228\"\r\n     \"42914819860834936475292719074168444365510704342711559699508093042880177904174497791.999\",\r\n        chars_format::fixed, 313, errc{}, 0x1.fffffffffffffp+1023},\r\n\r\n    // (1 + 1 - 2^-53) * 2^1023 exactly\r\n    {\"17976931348623158079372897140530341507993413271003782693617377898044496829276475094664901797758720709633028641669\"\r\n     \"28879109465555478519404026306574886715058206819089020007083836762738548458177115317644757302700698555713669596228\"\r\n     \"42914819860834936475292719074168444365510704342711559699508093042880177904174497792\",\r\n        chars_format::fixed, 309, errc::result_out_of_range, double_inf},\r\n\r\n    // (1 + 1 - 2^-53) * 2^1023 exactly, followed by a thousand 0 digits\r\n    {\"17976931348623158079372897140530341507993413271003782693617377898044496829276475094664901797758720709633028641669\"\r\n     \"28879109465555478519404026306574886715058206819089020007083836762738548458177115317644757302700698555713669596228\"\r\n     \"42914819860834936475292719074168444365510704342711559699508093042880177904174497792.\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\r\n        chars_format::fixed, 1310, errc::result_out_of_range, double_inf},\r\n\r\n    // above (1 + 1 - 2^-53) * 2^1023: append a thousand 0 digits followed by a 1 digit\r\n    {\"17976931348623158079372897140530341507993413271003782693617377898044496829276475094664901797758720709633028641669\"\r\n     \"28879109465555478519404026306574886715058206819089020007083836762738548458177115317644757302700698555713669596228\"\r\n     \"42914819860834936475292719074168444365510704342711559699508093042880177904174497792.\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n     \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\",\r\n        chars_format::fixed, 1311, errc::result_out_of_range, double_inf},\r\n\r\n    // above (1 + 1 - 2^-53) * 2^1023: appended a 1 digit\r\n    {\"17976931348623158079372897140530341507993413271003782693617377898044496829276475094664901797758720709633028641669\"\r\n     \"28879109465555478519404026306574886715058206819089020007083836762738548458177115317644757302700698555713669596228\"\r\n     \"42914819860834936475292719074168444365510704342711559699508093042880177904174497792.1\",\r\n        chars_format::fixed, 311, errc::result_out_of_range, double_inf},\r\n\r\n    // above (1 + 1 - 2^-53) * 2^1023: incremented last digit\r\n    {\"17976931348623158079372897140530341507993413271003782693617377898044496829276475094664901797758720709633028641669\"\r\n     \"28879109465555478519404026306574886715058206819089020007083836762738548458177115317644757302700698555713669596228\"\r\n     \"42914819860834936475292719074168444365510704342711559699508093042880177904174497792\",\r\n        chars_format::fixed, 309, errc::result_out_of_range, double_inf},\r\n\r\n    // below 1 * 2^1024: decremented last digit, then appended three 9 digits\r\n    {\"17976931348623159077293051907890247336179769789423065727343008115773267580550096313270847732240753602112011387987\"\r\n     \"13933576587897688144166224928474306394741243777678934248654852763022196012460941194530829520850057688381506823424\"\r\n     \"62881473913110540827237163350510684586298239947245938479716304835356329624224137215.999\",\r\n        chars_format::fixed, 313, errc::result_out_of_range, double_inf},\r\n\r\n    // 1 * 2^1024 exactly\r\n    {\"17976931348623159077293051907890247336179769789423065727343008115773267580550096313270847732240753602112011387987\"\r\n     \"13933576587897688144166224928474306394741243777678934248654852763022196012460941194530829520850057688381506823424\"\r\n     \"62881473913110540827237163350510684586298239947245938479716304835356329624224137216\",\r\n        chars_format::fixed, 309, errc::result_out_of_range, double_inf},\r\n};\r\n\r\n#endif // DOUBLE_FROM_CHARS_TEST_CASES_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/double_general_precision_to_chars_test_cases.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef DOUBLE_GENERAL_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n#define DOUBLE_GENERAL_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\n// C11 7.21.6.1 \"The fprintf function\"/8:\r\n\r\n// \"Then, if a conversion with style E would have an exponent of X:\r\n// - if P > X >= -4, the conversion is with style f (or F) and precision P - (X + 1).\r\n// - otherwise, the conversion is with style e (or E) and precision P - 1.\"\r\n\r\n// \"Finally, [...] any trailing zeros are removed from the fractional portion of the result\r\n// and the decimal-point character is removed if there is no fractional portion remaining.\"\r\n\r\ninline constexpr DoublePrecisionToCharsTestCase double_general_precision_to_chars_test_cases[] = {\r\n    // Test special cases (zero, inf, nan) and an ordinary case. Also test negative signs.\r\n    {0.0, chars_format::general, 4, \"0\"},\r\n    {-0.0, chars_format::general, 4, \"-0\"},\r\n    {double_inf, chars_format::general, 4, \"inf\"},\r\n    {-double_inf, chars_format::general, 4, \"-inf\"},\r\n    {double_nan, chars_format::general, 4, \"nan\"},\r\n    {-double_nan, chars_format::general, 4, \"-nan(ind)\"},\r\n    {double_nan_payload, chars_format::general, 4, \"nan\"},\r\n    {-double_nan_payload, chars_format::general, 4, \"-nan\"},\r\n    {1.729, chars_format::general, 4, \"1.729\"},\r\n    {-1.729, chars_format::general, 4, \"-1.729\"},\r\n\r\n    // Test corner cases.\r\n    {0x0.0000000000001p-1022, chars_format::general, 1000,\r\n        \"4.\"\r\n        \"94065645841246544176568792868221372365059802614324764425585682500675507270208751865299836361635992379796564695\"\r\n        \"44571773092665671035593979639877479601078187812630071319031140452784581716784898210368871863605699873072305000\"\r\n        \"63874091535649843873124733972731696151400317153853980741262385655911710266585566867681870395603106249319452715\"\r\n        \"91492455329305456544401127480129709999541931989409080416563324524757147869014726780159355238611550134803526493\"\r\n        \"47201937902681071074917033322268447533357208324319360923828934583680601060115061698097530783422773183292479049\"\r\n        \"82524730776375927247874656084778203734469699533647017972677717585125660551199131504891101451037862738167250955\"\r\n        \"837389733598993664809941164205702637090279242767544565229087538682506419718265533447265625\"\r\n        \"e-324\"}, // min subnormal\r\n    {0x0.fffffffffffffp-1022, chars_format::general, 1000,\r\n        \"2.\"\r\n        \"22507385850720088902458687608585988765042311224095946549352480256244000922823569517877588880375915526423097809\"\r\n        \"50434312085877387158357291821993020294379224223559819827501242041788969571311791082261043971979604000454897391\"\r\n        \"93807919893608152561311337614984204327175103362739154978273159414382813627511383860409424946494228631669542910\"\r\n        \"50802018159266421349966065178030950759130587198464239060686371020051087232827846788436319445158661350412234790\"\r\n        \"14792369585208321597621066375401613736583044193603714778355306682834535634005074073040135602968046375918583163\"\r\n        \"12422452159926254649430083685186171942241764645513713542013221703137049658321015465406803539741790602258950302\"\r\n        \"3501937519773030945763173210852507299305089761582519159720757232455434770912461317493580281734466552734375\"\r\n        \"e-308\"}, // max subnormal\r\n    {0x1p-1022, chars_format::general, 1000,\r\n        \"2.\"\r\n        \"22507385850720138309023271733240406421921598046233183055332741688720443481391819585428315901251102056406733973\"\r\n        \"10358110051524341615534601088560123853777188211307779935320023304796101474425836360719215650469425037342083752\"\r\n        \"50806650616658158948720491179968591639648500635908770118304874799780887753749949451580451605050915399856582470\"\r\n        \"81864511353793580499211598108576605199243335211435239014879569960959128889160299264151106346631339366347758651\"\r\n        \"30293717620473256317814856643508721228286376420448468114076139114770628016898532441100241614474216185671661505\"\r\n        \"40154285084716752901903161322778896729707373123334086988983175067838846926092773977972858659654941091369095406\"\r\n        \"136467568702398678315290680984617210924625396728515625e-308\"}, // min normal\r\n    {0x1.fffffffffffffp+1023, chars_format::general, 1000,\r\n        \"17976931348623157081452742373170435679807056752584499659891747680315726078002853876058955863276687817154045895\"\r\n        \"35143824642343213268894641827684675467035375169860499105765512820762454900903893289440758685084551339423045832\"\r\n        \"36903222948165808559332123348274797826204144723168738177180919299881250404026184124858368\"}, // max normal\r\n\r\n    {0x0.0000000000001p-1022, chars_format::general, 6, \"4.94066e-324\"}, // min subnormal\r\n    {0x0.fffffffffffffp-1022, chars_format::general, 6, \"2.22507e-308\"}, // max subnormal\r\n    {0x1p-1022, chars_format::general, 6, \"2.22507e-308\"}, // min normal\r\n    {0x1.fffffffffffffp+1023, chars_format::general, 6, \"1.79769e+308\"}, // max normal\r\n\r\n    // Test maximum-length output (excluding minus signs).\r\n    {0x1.fffffffffffffp-1022, chars_format::general, 1000,\r\n        \"4.\"\r\n        \"45014771701440227211481959341826395186963909270329129604685221944964444404215389103305904781627017582829831782\"\r\n        \"60792422137401728773891892910553144148156412434867599762821265346585071045737627442980259622449029037796981144\"\r\n        \"44614570510266311510031828794952795966823603998647925096578034214163701381261333311989876551545144031526125381\"\r\n        \"32666529513060001849177663286607555958373922409899478075565940981010216121988146052587425791790000716759993441\"\r\n        \"45086087205681577915435923018910334964869420614052182892431445797605163650903606514140377217442262561590244668\"\r\n        \"52576737244643007551333245007965068671949137768847800530996396770975896584413789443379662199396731693628045708\"\r\n        \"4866613206797017728916080020698679408551343728867675409720757232455434770912461317493580281734466552734375e-\"\r\n        \"308\"}, // scientific, happens to be the same length as max subnormal\r\n    {0x1.fffffffffffffp-14, chars_format::general, 1000,\r\n        \"0.000122070312499999986447472843931194574906839989125728607177734375\"}, // fixed\r\n\r\n    // Test varying precision. Negative precision requests P == 6. Zero precision requests P == 1.\r\n    // Here, the scientific exponent X is 0.\r\n    // Therefore, fixed notation is always chosen with precision P - (X + 1) == P - 1.\r\n    {0x1.b04p0, chars_format::general, -2, \"1.68848\"},\r\n    {0x1.b04p0, chars_format::general, -1, \"1.68848\"},\r\n    {0x1.b04p0, chars_format::general, 0, \"2\"},\r\n    {0x1.b04p0, chars_format::general, 1, \"2\"}, // fixed notation trims decimal point\r\n    {0x1.b04p0, chars_format::general, 2, \"1.7\"},\r\n    {0x1.b04p0, chars_format::general, 3, \"1.69\"},\r\n    {0x1.b04p0, chars_format::general, 4, \"1.688\"},\r\n    {0x1.b04p0, chars_format::general, 5, \"1.6885\"},\r\n    {0x1.b04p0, chars_format::general, 6, \"1.68848\"},\r\n    {0x1.b04p0, chars_format::general, 7, \"1.688477\"},\r\n    {0x1.b04p0, chars_format::general, 8, \"1.6884766\"},\r\n    {0x1.b04p0, chars_format::general, 9, \"1.68847656\"},\r\n    {0x1.b04p0, chars_format::general, 10, \"1.688476562\"}, // round to even\r\n    {0x1.b04p0, chars_format::general, 11, \"1.6884765625\"}, // exact\r\n    {0x1.b04p0, chars_format::general, 12, \"1.6884765625\"}, // trim trailing zeros\r\n    {0x1.b04p0, chars_format::general, 13, \"1.6884765625\"},\r\n\r\n    // Here, the scientific exponent X is -5.\r\n    // Therefore, scientific notation is always chosen with precision P - 1.\r\n    {0x1.8p-15, chars_format::general, -2, \"4.57764e-05\"},\r\n    {0x1.8p-15, chars_format::general, -1, \"4.57764e-05\"},\r\n    {0x1.8p-15, chars_format::general, 0, \"5e-05\"},\r\n    {0x1.8p-15, chars_format::general, 1, \"5e-05\"}, // scientific notation trims decimal point\r\n    {0x1.8p-15, chars_format::general, 2, \"4.6e-05\"},\r\n    {0x1.8p-15, chars_format::general, 3, \"4.58e-05\"},\r\n    {0x1.8p-15, chars_format::general, 4, \"4.578e-05\"},\r\n    {0x1.8p-15, chars_format::general, 5, \"4.5776e-05\"},\r\n    {0x1.8p-15, chars_format::general, 6, \"4.57764e-05\"},\r\n    {0x1.8p-15, chars_format::general, 7, \"4.577637e-05\"},\r\n    {0x1.8p-15, chars_format::general, 8, \"4.5776367e-05\"},\r\n    {0x1.8p-15, chars_format::general, 9, \"4.57763672e-05\"},\r\n    {0x1.8p-15, chars_format::general, 10, \"4.577636719e-05\"},\r\n    {0x1.8p-15, chars_format::general, 11, \"4.5776367188e-05\"}, // round to even\r\n    {0x1.8p-15, chars_format::general, 12, \"4.57763671875e-05\"}, // exact\r\n    {0x1.8p-15, chars_format::general, 13, \"4.57763671875e-05\"}, // trim trailing zeros\r\n    {0x1.8p-15, chars_format::general, 14, \"4.57763671875e-05\"},\r\n\r\n    // Trim trailing zeros.\r\n    {0x1.80015p0, chars_format::general, 1, \"2\"}, // fixed notation trims decimal point\r\n    {0x1.80015p0, chars_format::general, 2, \"1.5\"},\r\n    {0x1.80015p0, chars_format::general, 3, \"1.5\"}, // general trims trailing zeros\r\n    {0x1.80015p0, chars_format::general, 4, \"1.5\"},\r\n    {0x1.80015p0, chars_format::general, 5, \"1.5\"},\r\n    {0x1.80015p0, chars_format::general, 6, \"1.50002\"},\r\n    {0x1.80015p0, chars_format::general, 7, \"1.50002\"},\r\n    {0x1.80015p0, chars_format::general, 8, \"1.50002\"},\r\n    {0x1.80015p0, chars_format::general, 9, \"1.50002003\"},\r\n    {0x1.80015p0, chars_format::general, 10, \"1.500020027\"},\r\n    {0x1.80015p0, chars_format::general, 11, \"1.5000200272\"},\r\n    {0x1.80015p0, chars_format::general, 12, \"1.50002002716\"},\r\n    {0x1.80015p0, chars_format::general, 13, \"1.500020027161\"},\r\n    {0x1.80015p0, chars_format::general, 14, \"1.5000200271606\"},\r\n    {0x1.80015p0, chars_format::general, 15, \"1.50002002716064\"},\r\n    {0x1.80015p0, chars_format::general, 16, \"1.500020027160645\"},\r\n    {0x1.80015p0, chars_format::general, 17, \"1.5000200271606445\"},\r\n    {0x1.80015p0, chars_format::general, 18, \"1.50002002716064453\"},\r\n    {0x1.80015p0, chars_format::general, 19, \"1.500020027160644531\"},\r\n    {0x1.80015p0, chars_format::general, 20, \"1.5000200271606445312\"}, // round to even\r\n    {0x1.80015p0, chars_format::general, 21, \"1.50002002716064453125\"}, // exact\r\n\r\n    // Trim trailing zeros and decimal point.\r\n    {0x1.00015p0, chars_format::general, 1, \"1\"}, // fixed notation trims decimal point\r\n    {0x1.00015p0, chars_format::general, 2, \"1\"}, // general trims decimal point and trailing zeros\r\n    {0x1.00015p0, chars_format::general, 3, \"1\"},\r\n    {0x1.00015p0, chars_format::general, 4, \"1\"},\r\n    {0x1.00015p0, chars_format::general, 5, \"1\"},\r\n    {0x1.00015p0, chars_format::general, 6, \"1.00002\"},\r\n    {0x1.00015p0, chars_format::general, 7, \"1.00002\"},\r\n    {0x1.00015p0, chars_format::general, 8, \"1.00002\"},\r\n    {0x1.00015p0, chars_format::general, 9, \"1.00002003\"},\r\n    {0x1.00015p0, chars_format::general, 10, \"1.000020027\"},\r\n    {0x1.00015p0, chars_format::general, 11, \"1.0000200272\"},\r\n    {0x1.00015p0, chars_format::general, 12, \"1.00002002716\"},\r\n    {0x1.00015p0, chars_format::general, 13, \"1.000020027161\"},\r\n    {0x1.00015p0, chars_format::general, 14, \"1.0000200271606\"},\r\n    {0x1.00015p0, chars_format::general, 15, \"1.00002002716064\"},\r\n    {0x1.00015p0, chars_format::general, 16, \"1.000020027160645\"},\r\n    {0x1.00015p0, chars_format::general, 17, \"1.0000200271606445\"},\r\n    {0x1.00015p0, chars_format::general, 18, \"1.00002002716064453\"},\r\n    {0x1.00015p0, chars_format::general, 19, \"1.000020027160644531\"},\r\n    {0x1.00015p0, chars_format::general, 20, \"1.0000200271606445312\"}, // round to even\r\n    {0x1.00015p0, chars_format::general, 21, \"1.00002002716064453125\"}, // exact\r\n\r\n    // Trim trailing zeros, scientific notation.\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 1, \"1e-06\"}, // scientific notation trims decimal point\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 2, \"1.3e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 3, \"1.3e-06\"}, // general trims trailing zeros\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 4, \"1.3e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 5, \"1.3e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 6, \"1.3e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 7, \"1.3e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 8, \"1.3e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 9, \"1.3e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 10, \"1.3e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 11, \"1.3e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 12, \"1.3e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 13, \"1.3e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 14, \"1.3e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 15, \"1.3e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 16, \"1.3e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 17, \"1.3e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 18, \"1.30000000000000005e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 19, \"1.300000000000000047e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 20, \"1.3000000000000000471e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 21, \"1.30000000000000004705e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 22, \"1.300000000000000047052e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 23, \"1.3000000000000000470517e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 24, \"1.30000000000000004705166e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 25, \"1.300000000000000047051664e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 26, \"1.3000000000000000470516638e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 27, \"1.30000000000000004705166378e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 28, \"1.30000000000000004705166378e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 29, \"1.3000000000000000470516637804e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 30, \"1.30000000000000004705166378044e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 31, \"1.30000000000000004705166378044e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 32, \"1.3000000000000000470516637804397e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 33, \"1.30000000000000004705166378043968e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 34, \"1.300000000000000047051663780439679e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 35, \"1.3000000000000000470516637804396787e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 36, \"1.30000000000000004705166378043967867e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 37, \"1.300000000000000047051663780439678675e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 38, \"1.3000000000000000470516637804396786748e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 39, \"1.30000000000000004705166378043967867484e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 40, \"1.300000000000000047051663780439678674838e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 41, \"1.3000000000000000470516637804396786748384e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 42, \"1.30000000000000004705166378043967867483843e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 43, \"1.300000000000000047051663780439678674838433e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 44, \"1.3000000000000000470516637804396786748384329e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 45, \"1.30000000000000004705166378043967867483843293e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 46, \"1.300000000000000047051663780439678674838432926e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 47, \"1.3000000000000000470516637804396786748384329258e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 48, \"1.30000000000000004705166378043967867483843292575e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 49, \"1.300000000000000047051663780439678674838432925753e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 50, \"1.3000000000000000470516637804396786748384329257533e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 51, \"1.3000000000000000470516637804396786748384329257533e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 52, \"1.300000000000000047051663780439678674838432925753295e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 53, \"1.3000000000000000470516637804396786748384329257532954e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 54, \"1.30000000000000004705166378043967867483843292575329542e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 55, \"1.300000000000000047051663780439678674838432925753295422e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 56, \"1.3000000000000000470516637804396786748384329257532954216e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 57, \"1.3000000000000000470516637804396786748384329257532954216e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 58, \"1.3000000000000000470516637804396786748384329257532954216e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 59,\r\n        \"1.3000000000000000470516637804396786748384329257532954216003e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 60,\r\n        \"1.30000000000000004705166378043967867483843292575329542160034e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 61,\r\n        \"1.300000000000000047051663780439678674838432925753295421600342e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 62,\r\n        \"1.3000000000000000470516637804396786748384329257532954216003418e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 63,\r\n        \"1.3000000000000000470516637804396786748384329257532954216003418e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 64,\r\n        \"1.300000000000000047051663780439678674838432925753295421600341797e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 65,\r\n        \"1.3000000000000000470516637804396786748384329257532954216003417969e-06\"},\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 66,\r\n        \"1.30000000000000004705166378043967867483843292575329542160034179688e-06\"}, // round to even\r\n    {0x1.5cf751db94e6bp-20, chars_format::general, 67,\r\n        \"1.300000000000000047051663780439678674838432925753295421600341796875e-06\"}, // exact\r\n\r\n    // Trim trailing zeros and decimal point, scientific notation.\r\n    {0x1.92a737110e454p-19, chars_format::general, 1, \"3e-06\"}, // scientific notation trims decimal point\r\n    {0x1.92a737110e454p-19, chars_format::general, 2, \"3e-06\"}, // general trims decimal point and trailing zeros\r\n    {0x1.92a737110e454p-19, chars_format::general, 3, \"3e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 4, \"3e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 5, \"3e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 6, \"3e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 7, \"3e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 8, \"3e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 9, \"3e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 10, \"3e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 11, \"3e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 12, \"3e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 13, \"3e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 14, \"3e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 15, \"3e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 16, \"3e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 17, \"3.0000000000000001e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 18, \"3.00000000000000008e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 19, \"3.000000000000000076e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 20, \"3.000000000000000076e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 21, \"3.000000000000000076e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 22, \"3.000000000000000076003e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 23, \"3.0000000000000000760026e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 24, \"3.00000000000000007600257e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 25, \"3.000000000000000076002572e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 26, \"3.0000000000000000760025723e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 27, \"3.00000000000000007600257229e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 28, \"3.000000000000000076002572291e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 29, \"3.0000000000000000760025722912e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 30, \"3.00000000000000007600257229123e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 31, \"3.000000000000000076002572291234e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 32, \"3.0000000000000000760025722912339e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 33, \"3.00000000000000007600257229123386e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 34, \"3.000000000000000076002572291233861e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 35, \"3.0000000000000000760025722912338608e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 36, \"3.00000000000000007600257229123386082e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 37, \"3.000000000000000076002572291233860824e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 38, \"3.0000000000000000760025722912338608239e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 39, \"3.00000000000000007600257229123386082392e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 40, \"3.000000000000000076002572291233860823922e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 41, \"3.0000000000000000760025722912338608239224e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 42, \"3.00000000000000007600257229123386082392244e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 43, \"3.000000000000000076002572291233860823922441e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 44, \"3.0000000000000000760025722912338608239224413e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 45, \"3.00000000000000007600257229123386082392244134e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 46, \"3.000000000000000076002572291233860823922441341e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 47, \"3.000000000000000076002572291233860823922441341e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 48, \"3.00000000000000007600257229123386082392244134098e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 49, \"3.000000000000000076002572291233860823922441340983e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 50, \"3.0000000000000000760025722912338608239224413409829e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 51, \"3.00000000000000007600257229123386082392244134098291e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 52, \"3.000000000000000076002572291233860823922441340982914e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 53, \"3.000000000000000076002572291233860823922441340982914e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 54, \"3.00000000000000007600257229123386082392244134098291397e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 55, \"3.000000000000000076002572291233860823922441340982913971e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 56, \"3.0000000000000000760025722912338608239224413409829139709e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 57,\r\n        \"3.00000000000000007600257229123386082392244134098291397095e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 58,\r\n        \"3.000000000000000076002572291233860823922441340982913970947e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 59,\r\n        \"3.0000000000000000760025722912338608239224413409829139709473e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 60,\r\n        \"3.00000000000000007600257229123386082392244134098291397094727e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 61,\r\n        \"3.000000000000000076002572291233860823922441340982913970947266e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 62,\r\n        \"3.0000000000000000760025722912338608239224413409829139709472656e-06\"},\r\n    {0x1.92a737110e454p-19, chars_format::general, 63,\r\n        \"3.00000000000000007600257229123386082392244134098291397094726562e-06\"}, // round to even\r\n    {0x1.92a737110e454p-19, chars_format::general, 64,\r\n        \"3.000000000000000076002572291233860823922441340982913970947265625e-06\"}, // exact\r\n\r\n    // Test a large precision with fixed notation and scientific notation,\r\n    // verifying that we remain within the bounds of any lookup tables.\r\n    {0x1.ba9fbe76c8b44p+0, chars_format::general, 5000, \"1.72900000000000009237055564881302416324615478515625\"},\r\n    {0x1.d01ff9abb93d1p-20, chars_format::general, 5000,\r\n        \"1.729000000000000090107283613749533657255597063340246677398681640625e-06\"},\r\n\r\n    // Test the transitions between fixed notation and scientific notation.\r\n    {5555555.0, chars_format::general, 1, \"6e+06\"},\r\n    {555555.0, chars_format::general, 1, \"6e+05\"},\r\n    {55555.0, chars_format::general, 1, \"6e+04\"},\r\n    {5555.0, chars_format::general, 1, \"6e+03\"},\r\n    {555.0, chars_format::general, 1, \"6e+02\"},\r\n    {55.0, chars_format::general, 1, \"6e+01\"}, // round to even\r\n    {5.0, chars_format::general, 1, \"5\"},\r\n    {0x1p-3, chars_format::general, 1, \"0.1\"}, // 0.125\r\n    {0x1p-6, chars_format::general, 1, \"0.02\"}, // 0.015625\r\n    {0x1p-9, chars_format::general, 1, \"0.002\"}, // 0.001953125\r\n    {0x1p-13, chars_format::general, 1, \"0.0001\"}, // 0.0001220703125\r\n    {0x1p-16, chars_format::general, 1, \"2e-05\"}, // 1.52587890625e-05\r\n    {0x1p-19, chars_format::general, 1, \"2e-06\"}, // 1.9073486328125e-06\r\n\r\n    {5555555.0, chars_format::general, 2, \"5.6e+06\"},\r\n    {555555.0, chars_format::general, 2, \"5.6e+05\"},\r\n    {55555.0, chars_format::general, 2, \"5.6e+04\"},\r\n    {5555.0, chars_format::general, 2, \"5.6e+03\"},\r\n    {555.0, chars_format::general, 2, \"5.6e+02\"}, // round to even\r\n    {55.0, chars_format::general, 2, \"55\"},\r\n    {5.0, chars_format::general, 2, \"5\"},\r\n    {0x1p-3, chars_format::general, 2, \"0.12\"}, // round to even\r\n    {0x1p-6, chars_format::general, 2, \"0.016\"},\r\n    {0x1p-9, chars_format::general, 2, \"0.002\"},\r\n    {0x1p-13, chars_format::general, 2, \"0.00012\"},\r\n    {0x1p-16, chars_format::general, 2, \"1.5e-05\"},\r\n    {0x1p-19, chars_format::general, 2, \"1.9e-06\"},\r\n\r\n    {5555555.0, chars_format::general, 3, \"5.56e+06\"},\r\n    {555555.0, chars_format::general, 3, \"5.56e+05\"},\r\n    {55555.0, chars_format::general, 3, \"5.56e+04\"},\r\n    {5555.0, chars_format::general, 3, \"5.56e+03\"}, // round to even\r\n    {555.0, chars_format::general, 3, \"555\"},\r\n    {55.0, chars_format::general, 3, \"55\"},\r\n    {5.0, chars_format::general, 3, \"5\"},\r\n    {0x1p-3, chars_format::general, 3, \"0.125\"},\r\n    {0x1p-6, chars_format::general, 3, \"0.0156\"},\r\n    {0x1p-9, chars_format::general, 3, \"0.00195\"},\r\n    {0x1p-13, chars_format::general, 3, \"0.000122\"},\r\n    {0x1p-16, chars_format::general, 3, \"1.53e-05\"},\r\n    {0x1p-19, chars_format::general, 3, \"1.91e-06\"},\r\n\r\n    {5555555.0, chars_format::general, 4, \"5.556e+06\"},\r\n    {555555.0, chars_format::general, 4, \"5.556e+05\"},\r\n    {55555.0, chars_format::general, 4, \"5.556e+04\"}, // round to even\r\n    {5555.0, chars_format::general, 4, \"5555\"},\r\n    {555.0, chars_format::general, 4, \"555\"},\r\n    {55.0, chars_format::general, 4, \"55\"},\r\n    {5.0, chars_format::general, 4, \"5\"},\r\n    {0x1p-3, chars_format::general, 4, \"0.125\"},\r\n    {0x1p-6, chars_format::general, 4, \"0.01562\"}, // round to even\r\n    {0x1p-9, chars_format::general, 4, \"0.001953\"},\r\n    {0x1p-13, chars_format::general, 4, \"0.0001221\"},\r\n    {0x1p-16, chars_format::general, 4, \"1.526e-05\"},\r\n    {0x1p-19, chars_format::general, 4, \"1.907e-06\"},\r\n\r\n    {5555555.0, chars_format::general, 5, \"5.5556e+06\"},\r\n    {555555.0, chars_format::general, 5, \"5.5556e+05\"}, // round to even\r\n    {55555.0, chars_format::general, 5, \"55555\"},\r\n    {5555.0, chars_format::general, 5, \"5555\"},\r\n    {555.0, chars_format::general, 5, \"555\"},\r\n    {55.0, chars_format::general, 5, \"55\"},\r\n    {5.0, chars_format::general, 5, \"5\"},\r\n    {0x1p-3, chars_format::general, 5, \"0.125\"},\r\n    {0x1p-6, chars_format::general, 5, \"0.015625\"},\r\n    {0x1p-9, chars_format::general, 5, \"0.0019531\"},\r\n    {0x1p-13, chars_format::general, 5, \"0.00012207\"},\r\n    {0x1p-16, chars_format::general, 5, \"1.5259e-05\"},\r\n    {0x1p-19, chars_format::general, 5, \"1.9073e-06\"},\r\n\r\n    // Tricky corner cases.\r\n    // In these scenarios, rounding can adjust the scientific exponent X,\r\n    // which affects the transition between fixed notation and scientific notation.\r\n    {999.999, chars_format::general, 1, \"1e+03\"}, // \"%.0e\" is \"1e+03\"; X == 3\r\n    {999.999, chars_format::general, 2, \"1e+03\"}, // \"%.1e\" is \"1.0e+03\"; X == 3\r\n    {999.999, chars_format::general, 3, \"1e+03\"}, // \"%.2e\" is \"1.00e+03\"; X == 3\r\n    {999.999, chars_format::general, 4, \"1000\"}, // \"%.3e\" is \"1.000e+03\"; X == 3\r\n    {999.999, chars_format::general, 5, \"1000\"}, // \"%.4e\" is \"1.0000e+03\"; X == 3\r\n    {999.999, chars_format::general, 6, \"999.999\"}, // \"%.5e\" is \"9.99999e+02\"; X == 2\r\n\r\n    {999.99, chars_format::general, 1, \"1e+03\"},\r\n    {999.99, chars_format::general, 2, \"1e+03\"},\r\n    {999.99, chars_format::general, 3, \"1e+03\"},\r\n    {999.99, chars_format::general, 4, \"1000\"},\r\n    {999.99, chars_format::general, 5, \"999.99\"},\r\n    {999.99, chars_format::general, 6, \"999.99\"},\r\n\r\n    // C11's Standardese is slightly vague about how to perform the trial formatting in scientific notation,\r\n    // but the intention is to use precision P - 1, which is what's used when scientific notation is actually chosen.\r\n    // This example verifies this behavior. Here, P == 3 performs trial formatting with \"%.2e\", triggering rounding.\r\n    // That increases X to 3, forcing scientific notation to be chosen.\r\n    // If P == 3 performed trial formatting with \"%.3e\", rounding wouldn't happen,\r\n    // X would be 2, and fixed notation would be chosen.\r\n    {999.9, chars_format::general, 1, \"1e+03\"}, // \"%.0e\" is \"1e+03\"; X == 3\r\n    {999.9, chars_format::general, 2, \"1e+03\"}, // \"%.1e\" is \"1.0e+03\"; X == 3\r\n    {999.9, chars_format::general, 3, \"1e+03\"}, // \"%.2e\" is \"1.00e+03\"; X == 3; SPECIAL CORNER CASE\r\n    {999.9, chars_format::general, 4, \"999.9\"}, // \"%.3e\" is \"9.999e+02\"; X == 2\r\n    {999.9, chars_format::general, 5, \"999.9\"}, // \"%.4e\" is \"9.9990e+02\"; X == 2\r\n    {999.9, chars_format::general, 6, \"999.9\"}, // \"%.5e\" is \"9.99900e+02\"; X == 2\r\n\r\n    {999.0, chars_format::general, 1, \"1e+03\"},\r\n    {999.0, chars_format::general, 2, \"1e+03\"},\r\n    {999.0, chars_format::general, 3, \"999\"},\r\n    {999.0, chars_format::general, 4, \"999\"},\r\n    {999.0, chars_format::general, 5, \"999\"},\r\n    {999.0, chars_format::general, 6, \"999\"},\r\n\r\n    {99.9999, chars_format::general, 1, \"1e+02\"},\r\n    {99.9999, chars_format::general, 2, \"1e+02\"},\r\n    {99.9999, chars_format::general, 3, \"100\"},\r\n    {99.9999, chars_format::general, 4, \"100\"},\r\n    {99.9999, chars_format::general, 5, \"100\"},\r\n    {99.9999, chars_format::general, 6, \"99.9999\"},\r\n\r\n    {99.999, chars_format::general, 1, \"1e+02\"},\r\n    {99.999, chars_format::general, 2, \"1e+02\"},\r\n    {99.999, chars_format::general, 3, \"100\"},\r\n    {99.999, chars_format::general, 4, \"100\"},\r\n    {99.999, chars_format::general, 5, \"99.999\"},\r\n    {99.999, chars_format::general, 6, \"99.999\"},\r\n\r\n    {99.99, chars_format::general, 1, \"1e+02\"},\r\n    {99.99, chars_format::general, 2, \"1e+02\"},\r\n    {99.99, chars_format::general, 3, \"100\"},\r\n    {99.99, chars_format::general, 4, \"99.99\"},\r\n    {99.99, chars_format::general, 5, \"99.99\"},\r\n    {99.99, chars_format::general, 6, \"99.99\"},\r\n\r\n    {99.9, chars_format::general, 1, \"1e+02\"},\r\n    {99.9, chars_format::general, 2, \"1e+02\"},\r\n    {99.9, chars_format::general, 3, \"99.9\"},\r\n    {99.9, chars_format::general, 4, \"99.9\"},\r\n    {99.9, chars_format::general, 5, \"99.9\"},\r\n    {99.9, chars_format::general, 6, \"99.9\"},\r\n\r\n    {99.0, chars_format::general, 1, \"1e+02\"},\r\n    {99.0, chars_format::general, 2, \"99\"},\r\n    {99.0, chars_format::general, 3, \"99\"},\r\n    {99.0, chars_format::general, 4, \"99\"},\r\n    {99.0, chars_format::general, 5, \"99\"},\r\n    {99.0, chars_format::general, 6, \"99\"},\r\n\r\n    {9.99999, chars_format::general, 1, \"1e+01\"},\r\n    {9.99999, chars_format::general, 2, \"10\"},\r\n    {9.99999, chars_format::general, 3, \"10\"},\r\n    {9.99999, chars_format::general, 4, \"10\"},\r\n    {9.99999, chars_format::general, 5, \"10\"},\r\n    {9.99999, chars_format::general, 6, \"9.99999\"},\r\n\r\n    {9.9999, chars_format::general, 1, \"1e+01\"},\r\n    {9.9999, chars_format::general, 2, \"10\"},\r\n    {9.9999, chars_format::general, 3, \"10\"},\r\n    {9.9999, chars_format::general, 4, \"10\"},\r\n    {9.9999, chars_format::general, 5, \"9.9999\"},\r\n    {9.9999, chars_format::general, 6, \"9.9999\"},\r\n\r\n    {9.999, chars_format::general, 1, \"1e+01\"},\r\n    {9.999, chars_format::general, 2, \"10\"},\r\n    {9.999, chars_format::general, 3, \"10\"},\r\n    {9.999, chars_format::general, 4, \"9.999\"},\r\n    {9.999, chars_format::general, 5, \"9.999\"},\r\n    {9.999, chars_format::general, 6, \"9.999\"},\r\n\r\n    {9.99, chars_format::general, 1, \"1e+01\"},\r\n    {9.99, chars_format::general, 2, \"10\"},\r\n    {9.99, chars_format::general, 3, \"9.99\"},\r\n    {9.99, chars_format::general, 4, \"9.99\"},\r\n    {9.99, chars_format::general, 5, \"9.99\"},\r\n    {9.99, chars_format::general, 6, \"9.99\"},\r\n\r\n    {9.9, chars_format::general, 1, \"1e+01\"},\r\n    {9.9, chars_format::general, 2, \"9.9\"},\r\n    {9.9, chars_format::general, 3, \"9.9\"},\r\n    {9.9, chars_format::general, 4, \"9.9\"},\r\n    {9.9, chars_format::general, 5, \"9.9\"},\r\n    {9.9, chars_format::general, 6, \"9.9\"},\r\n\r\n    {9.0, chars_format::general, 1, \"9\"},\r\n    {9.0, chars_format::general, 2, \"9\"},\r\n    {9.0, chars_format::general, 3, \"9\"},\r\n    {9.0, chars_format::general, 4, \"9\"},\r\n    {9.0, chars_format::general, 5, \"9\"},\r\n    {9.0, chars_format::general, 6, \"9\"},\r\n\r\n    {0.999999, chars_format::general, 1, \"1\"},\r\n    {0.999999, chars_format::general, 2, \"1\"},\r\n    {0.999999, chars_format::general, 3, \"1\"},\r\n    {0.999999, chars_format::general, 4, \"1\"},\r\n    {0.999999, chars_format::general, 5, \"1\"},\r\n    {0.999999, chars_format::general, 6, \"0.999999\"},\r\n\r\n    {0.99999, chars_format::general, 1, \"1\"},\r\n    {0.99999, chars_format::general, 2, \"1\"},\r\n    {0.99999, chars_format::general, 3, \"1\"},\r\n    {0.99999, chars_format::general, 4, \"1\"},\r\n    {0.99999, chars_format::general, 5, \"0.99999\"},\r\n    {0.99999, chars_format::general, 6, \"0.99999\"},\r\n\r\n    {0.9999, chars_format::general, 1, \"1\"},\r\n    {0.9999, chars_format::general, 2, \"1\"},\r\n    {0.9999, chars_format::general, 3, \"1\"},\r\n    {0.9999, chars_format::general, 4, \"0.9999\"},\r\n    {0.9999, chars_format::general, 5, \"0.9999\"},\r\n    {0.9999, chars_format::general, 6, \"0.9999\"},\r\n\r\n    {0.999, chars_format::general, 1, \"1\"},\r\n    {0.999, chars_format::general, 2, \"1\"},\r\n    {0.999, chars_format::general, 3, \"0.999\"},\r\n    {0.999, chars_format::general, 4, \"0.999\"},\r\n    {0.999, chars_format::general, 5, \"0.999\"},\r\n    {0.999, chars_format::general, 6, \"0.999\"},\r\n\r\n    {0.99, chars_format::general, 1, \"1\"},\r\n    {0.99, chars_format::general, 2, \"0.99\"},\r\n    {0.99, chars_format::general, 3, \"0.99\"},\r\n    {0.99, chars_format::general, 4, \"0.99\"},\r\n    {0.99, chars_format::general, 5, \"0.99\"},\r\n    {0.99, chars_format::general, 6, \"0.99\"},\r\n\r\n    {0.9, chars_format::general, 1, \"0.9\"},\r\n    {0.9, chars_format::general, 2, \"0.9\"},\r\n    {0.9, chars_format::general, 3, \"0.9\"},\r\n    {0.9, chars_format::general, 4, \"0.9\"},\r\n    {0.9, chars_format::general, 5, \"0.9\"},\r\n    {0.9, chars_format::general, 6, \"0.9\"},\r\n\r\n    {0.0999999, chars_format::general, 1, \"0.1\"},\r\n    {0.0999999, chars_format::general, 2, \"0.1\"},\r\n    {0.0999999, chars_format::general, 3, \"0.1\"},\r\n    {0.0999999, chars_format::general, 4, \"0.1\"},\r\n    {0.0999999, chars_format::general, 5, \"0.1\"},\r\n    {0.0999999, chars_format::general, 6, \"0.0999999\"},\r\n\r\n    {0.099999, chars_format::general, 1, \"0.1\"},\r\n    {0.099999, chars_format::general, 2, \"0.1\"},\r\n    {0.099999, chars_format::general, 3, \"0.1\"},\r\n    {0.099999, chars_format::general, 4, \"0.1\"},\r\n    {0.099999, chars_format::general, 5, \"0.099999\"},\r\n    {0.099999, chars_format::general, 6, \"0.099999\"},\r\n\r\n    {0.09999, chars_format::general, 1, \"0.1\"},\r\n    {0.09999, chars_format::general, 2, \"0.1\"},\r\n    {0.09999, chars_format::general, 3, \"0.1\"},\r\n    {0.09999, chars_format::general, 4, \"0.09999\"},\r\n    {0.09999, chars_format::general, 5, \"0.09999\"},\r\n    {0.09999, chars_format::general, 6, \"0.09999\"},\r\n\r\n    {0.0999, chars_format::general, 1, \"0.1\"},\r\n    {0.0999, chars_format::general, 2, \"0.1\"},\r\n    {0.0999, chars_format::general, 3, \"0.0999\"},\r\n    {0.0999, chars_format::general, 4, \"0.0999\"},\r\n    {0.0999, chars_format::general, 5, \"0.0999\"},\r\n    {0.0999, chars_format::general, 6, \"0.0999\"},\r\n\r\n    {0.099, chars_format::general, 1, \"0.1\"},\r\n    {0.099, chars_format::general, 2, \"0.099\"},\r\n    {0.099, chars_format::general, 3, \"0.099\"},\r\n    {0.099, chars_format::general, 4, \"0.099\"},\r\n    {0.099, chars_format::general, 5, \"0.099\"},\r\n    {0.099, chars_format::general, 6, \"0.099\"},\r\n\r\n    {0.09, chars_format::general, 1, \"0.09\"},\r\n    {0.09, chars_format::general, 2, \"0.09\"},\r\n    {0.09, chars_format::general, 3, \"0.09\"},\r\n    {0.09, chars_format::general, 4, \"0.09\"},\r\n    {0.09, chars_format::general, 5, \"0.09\"},\r\n    {0.09, chars_format::general, 6, \"0.09\"},\r\n\r\n    {0.00999999, chars_format::general, 1, \"0.01\"},\r\n    {0.00999999, chars_format::general, 2, \"0.01\"},\r\n    {0.00999999, chars_format::general, 3, \"0.01\"},\r\n    {0.00999999, chars_format::general, 4, \"0.01\"},\r\n    {0.00999999, chars_format::general, 5, \"0.01\"},\r\n    {0.00999999, chars_format::general, 6, \"0.00999999\"},\r\n\r\n    {0.0099999, chars_format::general, 1, \"0.01\"},\r\n    {0.0099999, chars_format::general, 2, \"0.01\"},\r\n    {0.0099999, chars_format::general, 3, \"0.01\"},\r\n    {0.0099999, chars_format::general, 4, \"0.01\"},\r\n    {0.0099999, chars_format::general, 5, \"0.0099999\"},\r\n    {0.0099999, chars_format::general, 6, \"0.0099999\"},\r\n\r\n    {0.009999, chars_format::general, 1, \"0.01\"},\r\n    {0.009999, chars_format::general, 2, \"0.01\"},\r\n    {0.009999, chars_format::general, 3, \"0.01\"},\r\n    {0.009999, chars_format::general, 4, \"0.009999\"},\r\n    {0.009999, chars_format::general, 5, \"0.009999\"},\r\n    {0.009999, chars_format::general, 6, \"0.009999\"},\r\n\r\n    {0.00999, chars_format::general, 1, \"0.01\"},\r\n    {0.00999, chars_format::general, 2, \"0.01\"},\r\n    {0.00999, chars_format::general, 3, \"0.00999\"},\r\n    {0.00999, chars_format::general, 4, \"0.00999\"},\r\n    {0.00999, chars_format::general, 5, \"0.00999\"},\r\n    {0.00999, chars_format::general, 6, \"0.00999\"},\r\n\r\n    {0.0099, chars_format::general, 1, \"0.01\"},\r\n    {0.0099, chars_format::general, 2, \"0.0099\"},\r\n    {0.0099, chars_format::general, 3, \"0.0099\"},\r\n    {0.0099, chars_format::general, 4, \"0.0099\"},\r\n    {0.0099, chars_format::general, 5, \"0.0099\"},\r\n    {0.0099, chars_format::general, 6, \"0.0099\"},\r\n\r\n    {0.009, chars_format::general, 1, \"0.009\"},\r\n    {0.009, chars_format::general, 2, \"0.009\"},\r\n    {0.009, chars_format::general, 3, \"0.009\"},\r\n    {0.009, chars_format::general, 4, \"0.009\"},\r\n    {0.009, chars_format::general, 5, \"0.009\"},\r\n    {0.009, chars_format::general, 6, \"0.009\"},\r\n\r\n    {0.000999999, chars_format::general, 1, \"0.001\"},\r\n    {0.000999999, chars_format::general, 2, \"0.001\"},\r\n    {0.000999999, chars_format::general, 3, \"0.001\"},\r\n    {0.000999999, chars_format::general, 4, \"0.001\"},\r\n    {0.000999999, chars_format::general, 5, \"0.001\"},\r\n    {0.000999999, chars_format::general, 6, \"0.000999999\"},\r\n\r\n    {0.00099999, chars_format::general, 1, \"0.001\"},\r\n    {0.00099999, chars_format::general, 2, \"0.001\"},\r\n    {0.00099999, chars_format::general, 3, \"0.001\"},\r\n    {0.00099999, chars_format::general, 4, \"0.001\"},\r\n    {0.00099999, chars_format::general, 5, \"0.00099999\"},\r\n    {0.00099999, chars_format::general, 6, \"0.00099999\"},\r\n\r\n    {0.0009999, chars_format::general, 1, \"0.001\"},\r\n    {0.0009999, chars_format::general, 2, \"0.001\"},\r\n    {0.0009999, chars_format::general, 3, \"0.001\"},\r\n    {0.0009999, chars_format::general, 4, \"0.0009999\"},\r\n    {0.0009999, chars_format::general, 5, \"0.0009999\"},\r\n    {0.0009999, chars_format::general, 6, \"0.0009999\"},\r\n\r\n    {0.000999, chars_format::general, 1, \"0.001\"},\r\n    {0.000999, chars_format::general, 2, \"0.001\"},\r\n    {0.000999, chars_format::general, 3, \"0.000999\"},\r\n    {0.000999, chars_format::general, 4, \"0.000999\"},\r\n    {0.000999, chars_format::general, 5, \"0.000999\"},\r\n    {0.000999, chars_format::general, 6, \"0.000999\"},\r\n\r\n    {0.00099, chars_format::general, 1, \"0.001\"},\r\n    {0.00099, chars_format::general, 2, \"0.00099\"},\r\n    {0.00099, chars_format::general, 3, \"0.00099\"},\r\n    {0.00099, chars_format::general, 4, \"0.00099\"},\r\n    {0.00099, chars_format::general, 5, \"0.00099\"},\r\n    {0.00099, chars_format::general, 6, \"0.00099\"},\r\n\r\n    {0.0009, chars_format::general, 1, \"0.0009\"},\r\n    {0.0009, chars_format::general, 2, \"0.0009\"},\r\n    {0.0009, chars_format::general, 3, \"0.0009\"},\r\n    {0.0009, chars_format::general, 4, \"0.0009\"},\r\n    {0.0009, chars_format::general, 5, \"0.0009\"},\r\n    {0.0009, chars_format::general, 6, \"0.0009\"},\r\n\r\n    // Having a scientific exponent X == -5 triggers scientific notation.\r\n    // If rounding adjusts this to X == -4, then fixed notation will be selected.\r\n    {0.0000999999, chars_format::general, 1, \"0.0001\"},\r\n    {0.0000999999, chars_format::general, 2, \"0.0001\"},\r\n    {0.0000999999, chars_format::general, 3, \"0.0001\"},\r\n    {0.0000999999, chars_format::general, 4, \"0.0001\"},\r\n    {0.0000999999, chars_format::general, 5, \"0.0001\"},\r\n    {0.0000999999, chars_format::general, 6, \"9.99999e-05\"},\r\n\r\n    {0.000099999, chars_format::general, 1, \"0.0001\"},\r\n    {0.000099999, chars_format::general, 2, \"0.0001\"},\r\n    {0.000099999, chars_format::general, 3, \"0.0001\"},\r\n    {0.000099999, chars_format::general, 4, \"0.0001\"},\r\n    {0.000099999, chars_format::general, 5, \"9.9999e-05\"},\r\n    {0.000099999, chars_format::general, 6, \"9.9999e-05\"},\r\n\r\n    {0.00009999, chars_format::general, 1, \"0.0001\"},\r\n    {0.00009999, chars_format::general, 2, \"0.0001\"},\r\n    {0.00009999, chars_format::general, 3, \"0.0001\"},\r\n    {0.00009999, chars_format::general, 4, \"9.999e-05\"},\r\n    {0.00009999, chars_format::general, 5, \"9.999e-05\"},\r\n    {0.00009999, chars_format::general, 6, \"9.999e-05\"},\r\n\r\n    {0.0000999, chars_format::general, 1, \"0.0001\"},\r\n    {0.0000999, chars_format::general, 2, \"0.0001\"},\r\n    {0.0000999, chars_format::general, 3, \"9.99e-05\"},\r\n    {0.0000999, chars_format::general, 4, \"9.99e-05\"},\r\n    {0.0000999, chars_format::general, 5, \"9.99e-05\"},\r\n    {0.0000999, chars_format::general, 6, \"9.99e-05\"},\r\n\r\n    {0.000099, chars_format::general, 1, \"0.0001\"},\r\n    {0.000099, chars_format::general, 2, \"9.9e-05\"},\r\n    {0.000099, chars_format::general, 3, \"9.9e-05\"},\r\n    {0.000099, chars_format::general, 4, \"9.9e-05\"},\r\n    {0.000099, chars_format::general, 5, \"9.9e-05\"},\r\n    {0.000099, chars_format::general, 6, \"9.9e-05\"},\r\n\r\n    {0.00009, chars_format::general, 1, \"9e-05\"},\r\n    {0.00009, chars_format::general, 2, \"9e-05\"},\r\n    {0.00009, chars_format::general, 3, \"9e-05\"},\r\n    {0.00009, chars_format::general, 4, \"9e-05\"},\r\n    {0.00009, chars_format::general, 5, \"9e-05\"},\r\n    {0.00009, chars_format::general, 6, \"9e-05\"},\r\n\r\n    // Rounding test cases without exponent-adjusting behavior.\r\n    {2999.999, chars_format::general, 1, \"3e+03\"},\r\n    {2999.999, chars_format::general, 2, \"3e+03\"},\r\n    {2999.999, chars_format::general, 3, \"3e+03\"},\r\n    {2999.999, chars_format::general, 4, \"3000\"},\r\n    {2999.999, chars_format::general, 5, \"3000\"},\r\n    {2999.999, chars_format::general, 6, \"3000\"},\r\n\r\n    {2999.99, chars_format::general, 1, \"3e+03\"},\r\n    {2999.99, chars_format::general, 2, \"3e+03\"},\r\n    {2999.99, chars_format::general, 3, \"3e+03\"},\r\n    {2999.99, chars_format::general, 4, \"3000\"},\r\n    {2999.99, chars_format::general, 5, \"3000\"},\r\n    {2999.99, chars_format::general, 6, \"2999.99\"},\r\n\r\n    {2999.9, chars_format::general, 1, \"3e+03\"},\r\n    {2999.9, chars_format::general, 2, \"3e+03\"},\r\n    {2999.9, chars_format::general, 3, \"3e+03\"},\r\n    {2999.9, chars_format::general, 4, \"3000\"},\r\n    {2999.9, chars_format::general, 5, \"2999.9\"},\r\n    {2999.9, chars_format::general, 6, \"2999.9\"},\r\n\r\n    {2999.0, chars_format::general, 1, \"3e+03\"},\r\n    {2999.0, chars_format::general, 2, \"3e+03\"},\r\n    {2999.0, chars_format::general, 3, \"3e+03\"},\r\n    {2999.0, chars_format::general, 4, \"2999\"},\r\n    {2999.0, chars_format::general, 5, \"2999\"},\r\n    {2999.0, chars_format::general, 6, \"2999\"},\r\n\r\n    {299.999, chars_format::general, 1, \"3e+02\"},\r\n    {299.999, chars_format::general, 2, \"3e+02\"},\r\n    {299.999, chars_format::general, 3, \"300\"},\r\n    {299.999, chars_format::general, 4, \"300\"},\r\n    {299.999, chars_format::general, 5, \"300\"},\r\n    {299.999, chars_format::general, 6, \"299.999\"},\r\n\r\n    {299.99, chars_format::general, 1, \"3e+02\"},\r\n    {299.99, chars_format::general, 2, \"3e+02\"},\r\n    {299.99, chars_format::general, 3, \"300\"},\r\n    {299.99, chars_format::general, 4, \"300\"},\r\n    {299.99, chars_format::general, 5, \"299.99\"},\r\n    {299.99, chars_format::general, 6, \"299.99\"},\r\n\r\n    {299.9, chars_format::general, 1, \"3e+02\"},\r\n    {299.9, chars_format::general, 2, \"3e+02\"},\r\n    {299.9, chars_format::general, 3, \"300\"},\r\n    {299.9, chars_format::general, 4, \"299.9\"},\r\n    {299.9, chars_format::general, 5, \"299.9\"},\r\n    {299.9, chars_format::general, 6, \"299.9\"},\r\n\r\n    {299.0, chars_format::general, 1, \"3e+02\"},\r\n    {299.0, chars_format::general, 2, \"3e+02\"},\r\n    {299.0, chars_format::general, 3, \"299\"},\r\n    {299.0, chars_format::general, 4, \"299\"},\r\n    {299.0, chars_format::general, 5, \"299\"},\r\n    {299.0, chars_format::general, 6, \"299\"},\r\n\r\n    {29.999, chars_format::general, 1, \"3e+01\"},\r\n    {29.999, chars_format::general, 2, \"30\"},\r\n    {29.999, chars_format::general, 3, \"30\"},\r\n    {29.999, chars_format::general, 4, \"30\"},\r\n    {29.999, chars_format::general, 5, \"29.999\"},\r\n    {29.999, chars_format::general, 6, \"29.999\"},\r\n\r\n    {29.99, chars_format::general, 1, \"3e+01\"},\r\n    {29.99, chars_format::general, 2, \"30\"},\r\n    {29.99, chars_format::general, 3, \"30\"},\r\n    {29.99, chars_format::general, 4, \"29.99\"},\r\n    {29.99, chars_format::general, 5, \"29.99\"},\r\n    {29.99, chars_format::general, 6, \"29.99\"},\r\n\r\n    {29.9, chars_format::general, 1, \"3e+01\"},\r\n    {29.9, chars_format::general, 2, \"30\"},\r\n    {29.9, chars_format::general, 3, \"29.9\"},\r\n    {29.9, chars_format::general, 4, \"29.9\"},\r\n    {29.9, chars_format::general, 5, \"29.9\"},\r\n    {29.9, chars_format::general, 6, \"29.9\"},\r\n\r\n    {29.0, chars_format::general, 1, \"3e+01\"},\r\n    {29.0, chars_format::general, 2, \"29\"},\r\n    {29.0, chars_format::general, 3, \"29\"},\r\n    {29.0, chars_format::general, 4, \"29\"},\r\n    {29.0, chars_format::general, 5, \"29\"},\r\n    {29.0, chars_format::general, 6, \"29\"},\r\n\r\n    {2.999, chars_format::general, 1, \"3\"},\r\n    {2.999, chars_format::general, 2, \"3\"},\r\n    {2.999, chars_format::general, 3, \"3\"},\r\n    {2.999, chars_format::general, 4, \"2.999\"},\r\n    {2.999, chars_format::general, 5, \"2.999\"},\r\n    {2.999, chars_format::general, 6, \"2.999\"},\r\n\r\n    {2.99, chars_format::general, 1, \"3\"},\r\n    {2.99, chars_format::general, 2, \"3\"},\r\n    {2.99, chars_format::general, 3, \"2.99\"},\r\n    {2.99, chars_format::general, 4, \"2.99\"},\r\n    {2.99, chars_format::general, 5, \"2.99\"},\r\n    {2.99, chars_format::general, 6, \"2.99\"},\r\n\r\n    {2.9, chars_format::general, 1, \"3\"},\r\n    {2.9, chars_format::general, 2, \"2.9\"},\r\n    {2.9, chars_format::general, 3, \"2.9\"},\r\n    {2.9, chars_format::general, 4, \"2.9\"},\r\n    {2.9, chars_format::general, 5, \"2.9\"},\r\n    {2.9, chars_format::general, 6, \"2.9\"},\r\n\r\n    {2.0, chars_format::general, 1, \"2\"},\r\n    {2.0, chars_format::general, 2, \"2\"},\r\n    {2.0, chars_format::general, 3, \"2\"},\r\n    {2.0, chars_format::general, 4, \"2\"},\r\n    {2.0, chars_format::general, 5, \"2\"},\r\n    {2.0, chars_format::general, 6, \"2\"},\r\n\r\n    {0.2999, chars_format::general, 1, \"0.3\"},\r\n    {0.2999, chars_format::general, 2, \"0.3\"},\r\n    {0.2999, chars_format::general, 3, \"0.3\"},\r\n    {0.2999, chars_format::general, 4, \"0.2999\"},\r\n    {0.2999, chars_format::general, 5, \"0.2999\"},\r\n    {0.2999, chars_format::general, 6, \"0.2999\"},\r\n\r\n    {0.299, chars_format::general, 1, \"0.3\"},\r\n    {0.299, chars_format::general, 2, \"0.3\"},\r\n    {0.299, chars_format::general, 3, \"0.299\"},\r\n    {0.299, chars_format::general, 4, \"0.299\"},\r\n    {0.299, chars_format::general, 5, \"0.299\"},\r\n    {0.299, chars_format::general, 6, \"0.299\"},\r\n\r\n    {0.29, chars_format::general, 1, \"0.3\"},\r\n    {0.29, chars_format::general, 2, \"0.29\"},\r\n    {0.29, chars_format::general, 3, \"0.29\"},\r\n    {0.29, chars_format::general, 4, \"0.29\"},\r\n    {0.29, chars_format::general, 5, \"0.29\"},\r\n    {0.29, chars_format::general, 6, \"0.29\"},\r\n\r\n    {0.2, chars_format::general, 1, \"0.2\"},\r\n    {0.2, chars_format::general, 2, \"0.2\"},\r\n    {0.2, chars_format::general, 3, \"0.2\"},\r\n    {0.2, chars_format::general, 4, \"0.2\"},\r\n    {0.2, chars_format::general, 5, \"0.2\"},\r\n    {0.2, chars_format::general, 6, \"0.2\"},\r\n\r\n    {0.02999, chars_format::general, 1, \"0.03\"},\r\n    {0.02999, chars_format::general, 2, \"0.03\"},\r\n    {0.02999, chars_format::general, 3, \"0.03\"},\r\n    {0.02999, chars_format::general, 4, \"0.02999\"},\r\n    {0.02999, chars_format::general, 5, \"0.02999\"},\r\n    {0.02999, chars_format::general, 6, \"0.02999\"},\r\n\r\n    {0.0299, chars_format::general, 1, \"0.03\"},\r\n    {0.0299, chars_format::general, 2, \"0.03\"},\r\n    {0.0299, chars_format::general, 3, \"0.0299\"},\r\n    {0.0299, chars_format::general, 4, \"0.0299\"},\r\n    {0.0299, chars_format::general, 5, \"0.0299\"},\r\n    {0.0299, chars_format::general, 6, \"0.0299\"},\r\n\r\n    {0.029, chars_format::general, 1, \"0.03\"},\r\n    {0.029, chars_format::general, 2, \"0.029\"},\r\n    {0.029, chars_format::general, 3, \"0.029\"},\r\n    {0.029, chars_format::general, 4, \"0.029\"},\r\n    {0.029, chars_format::general, 5, \"0.029\"},\r\n    {0.029, chars_format::general, 6, \"0.029\"},\r\n\r\n    {0.02, chars_format::general, 1, \"0.02\"},\r\n    {0.02, chars_format::general, 2, \"0.02\"},\r\n    {0.02, chars_format::general, 3, \"0.02\"},\r\n    {0.02, chars_format::general, 4, \"0.02\"},\r\n    {0.02, chars_format::general, 5, \"0.02\"},\r\n    {0.02, chars_format::general, 6, \"0.02\"},\r\n\r\n    {0.002999, chars_format::general, 1, \"0.003\"},\r\n    {0.002999, chars_format::general, 2, \"0.003\"},\r\n    {0.002999, chars_format::general, 3, \"0.003\"},\r\n    {0.002999, chars_format::general, 4, \"0.002999\"},\r\n    {0.002999, chars_format::general, 5, \"0.002999\"},\r\n    {0.002999, chars_format::general, 6, \"0.002999\"},\r\n\r\n    {0.00299, chars_format::general, 1, \"0.003\"},\r\n    {0.00299, chars_format::general, 2, \"0.003\"},\r\n    {0.00299, chars_format::general, 3, \"0.00299\"},\r\n    {0.00299, chars_format::general, 4, \"0.00299\"},\r\n    {0.00299, chars_format::general, 5, \"0.00299\"},\r\n    {0.00299, chars_format::general, 6, \"0.00299\"},\r\n\r\n    {0.0029, chars_format::general, 1, \"0.003\"},\r\n    {0.0029, chars_format::general, 2, \"0.0029\"},\r\n    {0.0029, chars_format::general, 3, \"0.0029\"},\r\n    {0.0029, chars_format::general, 4, \"0.0029\"},\r\n    {0.0029, chars_format::general, 5, \"0.0029\"},\r\n    {0.0029, chars_format::general, 6, \"0.0029\"},\r\n\r\n    {0.002, chars_format::general, 1, \"0.002\"},\r\n    {0.002, chars_format::general, 2, \"0.002\"},\r\n    {0.002, chars_format::general, 3, \"0.002\"},\r\n    {0.002, chars_format::general, 4, \"0.002\"},\r\n    {0.002, chars_format::general, 5, \"0.002\"},\r\n    {0.002, chars_format::general, 6, \"0.002\"},\r\n\r\n    {0.0002999, chars_format::general, 1, \"0.0003\"},\r\n    {0.0002999, chars_format::general, 2, \"0.0003\"},\r\n    {0.0002999, chars_format::general, 3, \"0.0003\"},\r\n    {0.0002999, chars_format::general, 4, \"0.0002999\"},\r\n    {0.0002999, chars_format::general, 5, \"0.0002999\"},\r\n    {0.0002999, chars_format::general, 6, \"0.0002999\"},\r\n\r\n    {0.000299, chars_format::general, 1, \"0.0003\"},\r\n    {0.000299, chars_format::general, 2, \"0.0003\"},\r\n    {0.000299, chars_format::general, 3, \"0.000299\"},\r\n    {0.000299, chars_format::general, 4, \"0.000299\"},\r\n    {0.000299, chars_format::general, 5, \"0.000299\"},\r\n    {0.000299, chars_format::general, 6, \"0.000299\"},\r\n\r\n    {0.00029, chars_format::general, 1, \"0.0003\"},\r\n    {0.00029, chars_format::general, 2, \"0.00029\"},\r\n    {0.00029, chars_format::general, 3, \"0.00029\"},\r\n    {0.00029, chars_format::general, 4, \"0.00029\"},\r\n    {0.00029, chars_format::general, 5, \"0.00029\"},\r\n    {0.00029, chars_format::general, 6, \"0.00029\"},\r\n\r\n    {0.0002, chars_format::general, 1, \"0.0002\"},\r\n    {0.0002, chars_format::general, 2, \"0.0002\"},\r\n    {0.0002, chars_format::general, 3, \"0.0002\"},\r\n    {0.0002, chars_format::general, 4, \"0.0002\"},\r\n    {0.0002, chars_format::general, 5, \"0.0002\"},\r\n    {0.0002, chars_format::general, 6, \"0.0002\"},\r\n\r\n    {0.00002999, chars_format::general, 1, \"3e-05\"},\r\n    {0.00002999, chars_format::general, 2, \"3e-05\"},\r\n    {0.00002999, chars_format::general, 3, \"3e-05\"},\r\n    {0.00002999, chars_format::general, 4, \"2.999e-05\"},\r\n    {0.00002999, chars_format::general, 5, \"2.999e-05\"},\r\n    {0.00002999, chars_format::general, 6, \"2.999e-05\"},\r\n\r\n    {0.0000299, chars_format::general, 1, \"3e-05\"},\r\n    {0.0000299, chars_format::general, 2, \"3e-05\"},\r\n    {0.0000299, chars_format::general, 3, \"2.99e-05\"},\r\n    {0.0000299, chars_format::general, 4, \"2.99e-05\"},\r\n    {0.0000299, chars_format::general, 5, \"2.99e-05\"},\r\n    {0.0000299, chars_format::general, 6, \"2.99e-05\"},\r\n\r\n    {0.000029, chars_format::general, 1, \"3e-05\"},\r\n    {0.000029, chars_format::general, 2, \"2.9e-05\"},\r\n    {0.000029, chars_format::general, 3, \"2.9e-05\"},\r\n    {0.000029, chars_format::general, 4, \"2.9e-05\"},\r\n    {0.000029, chars_format::general, 5, \"2.9e-05\"},\r\n    {0.000029, chars_format::general, 6, \"2.9e-05\"},\r\n\r\n    {0.00002, chars_format::general, 1, \"2e-05\"},\r\n    {0.00002, chars_format::general, 2, \"2e-05\"},\r\n    {0.00002, chars_format::general, 3, \"2e-05\"},\r\n    {0.00002, chars_format::general, 4, \"2e-05\"},\r\n    {0.00002, chars_format::general, 5, \"2e-05\"},\r\n    {0.00002, chars_format::general, 6, \"2e-05\"},\r\n\r\n    // Test the transitions between values of the scientific exponent X.\r\n    // For brevity, we avoid testing all possible combinations of P and X. Instead, we test:\r\n    // * All values of P where some X can be affected by rounding. (For double, this is [1, 15].)\r\n    // * P == 25, which is arbitrary.\r\n    // * P == numeric_limits::max_exponent10 + 1. This selects fixed notation for numeric_limits::max(),\r\n    //   so it's the largest interesting value of P.\r\n    // * Finally, we test the transitions around X == P - 1, ensuring that we can recognize every value of X.\r\n    {0x1.8e757928e0c9dp-14, chars_format::general, 1, \"9e-05\"},\r\n    {0x1.8e757928e0c9ep-14, chars_format::general, 1, \"0.0001\"},\r\n    {0x1.f212d77318fc5p-11, chars_format::general, 1, \"0.0009\"},\r\n    {0x1.f212d77318fc6p-11, chars_format::general, 1, \"0.001\"},\r\n    {0x1.374bc6a7ef9dbp-7, chars_format::general, 1, \"0.009\"},\r\n    {0x1.374bc6a7ef9dcp-7, chars_format::general, 1, \"0.01\"},\r\n    {0x1.851eb851eb851p-4, chars_format::general, 1, \"0.09\"},\r\n    {0x1.851eb851eb852p-4, chars_format::general, 1, \"0.1\"},\r\n    {0x1.e666666666666p-1, chars_format::general, 1, \"0.9\"},\r\n    {0x1.e666666666667p-1, chars_format::general, 1, \"1\"},\r\n    {0x1.2ffffffffffffp+3, chars_format::general, 1, \"9\"},\r\n    {0x1.3000000000000p+3, chars_format::general, 1, \"1e+01\"},\r\n    {0x1.a1554fbdad751p-14, chars_format::general, 2, \"9.9e-05\"},\r\n    {0x1.a1554fbdad752p-14, chars_format::general, 2, \"0.0001\"},\r\n    {0x1.04d551d68c692p-10, chars_format::general, 2, \"0.00099\"},\r\n    {0x1.04d551d68c693p-10, chars_format::general, 2, \"0.001\"},\r\n    {0x1.460aa64c2f837p-7, chars_format::general, 2, \"0.0099\"},\r\n    {0x1.460aa64c2f838p-7, chars_format::general, 2, \"0.01\"},\r\n    {0x1.978d4fdf3b645p-4, chars_format::general, 2, \"0.099\"},\r\n    {0x1.978d4fdf3b646p-4, chars_format::general, 2, \"0.1\"},\r\n    {0x1.fd70a3d70a3d7p-1, chars_format::general, 2, \"0.99\"},\r\n    {0x1.fd70a3d70a3d8p-1, chars_format::general, 2, \"1\"},\r\n    {0x1.3e66666666666p+3, chars_format::general, 2, \"9.9\"},\r\n    {0x1.3e66666666667p+3, chars_format::general, 2, \"10\"},\r\n    {0x1.8dfffffffffffp+6, chars_format::general, 2, \"99\"},\r\n    {0x1.8e00000000000p+6, chars_format::general, 2, \"1e+02\"},\r\n    {0x1.a3387ecc8eb96p-14, chars_format::general, 3, \"9.99e-05\"},\r\n    {0x1.a3387ecc8eb97p-14, chars_format::general, 3, \"0.0001\"},\r\n    {0x1.06034f3fd933ep-10, chars_format::general, 3, \"0.000999\"},\r\n    {0x1.06034f3fd933fp-10, chars_format::general, 3, \"0.001\"},\r\n    {0x1.4784230fcf80dp-7, chars_format::general, 3, \"0.00999\"},\r\n    {0x1.4784230fcf80ep-7, chars_format::general, 3, \"0.01\"},\r\n    {0x1.99652bd3c3611p-4, chars_format::general, 3, \"0.0999\"},\r\n    {0x1.99652bd3c3612p-4, chars_format::general, 3, \"0.1\"},\r\n    {0x1.ffbe76c8b4395p-1, chars_format::general, 3, \"0.999\"},\r\n    {0x1.ffbe76c8b4396p-1, chars_format::general, 3, \"1\"},\r\n    {0x1.3fd70a3d70a3dp+3, chars_format::general, 3, \"9.99\"},\r\n    {0x1.3fd70a3d70a3ep+3, chars_format::general, 3, \"10\"},\r\n    {0x1.8fcccccccccccp+6, chars_format::general, 3, \"99.9\"},\r\n    {0x1.8fccccccccccdp+6, chars_format::general, 3, \"100\"},\r\n    {0x1.f3bffffffffffp+9, chars_format::general, 3, \"999\"},\r\n    {0x1.f3c0000000000p+9, chars_format::general, 3, \"1e+03\"},\r\n    {0x1.a368d04e0ba6ap-14, chars_format::general, 4, \"9.999e-05\"},\r\n    {0x1.a368d04e0ba6bp-14, chars_format::general, 4, \"0.0001\"},\r\n    {0x1.06218230c7482p-10, chars_format::general, 4, \"0.0009999\"},\r\n    {0x1.06218230c7483p-10, chars_format::general, 4, \"0.001\"},\r\n    {0x1.47a9e2bcf91a3p-7, chars_format::general, 4, \"0.009999\"},\r\n    {0x1.47a9e2bcf91a4p-7, chars_format::general, 4, \"0.01\"},\r\n    {0x1.99945b6c3760bp-4, chars_format::general, 4, \"0.09999\"},\r\n    {0x1.99945b6c3760cp-4, chars_format::general, 4, \"0.1\"},\r\n    {0x1.fff972474538ep-1, chars_format::general, 4, \"0.9999\"},\r\n    {0x1.fff972474538fp-1, chars_format::general, 4, \"1\"},\r\n    {0x1.3ffbe76c8b439p+3, chars_format::general, 4, \"9.999\"},\r\n    {0x1.3ffbe76c8b43ap+3, chars_format::general, 4, \"10\"},\r\n    {0x1.8ffae147ae147p+6, chars_format::general, 4, \"99.99\"},\r\n    {0x1.8ffae147ae148p+6, chars_format::general, 4, \"100\"},\r\n    {0x1.f3f9999999999p+9, chars_format::general, 4, \"999.9\"},\r\n    {0x1.f3f999999999ap+9, chars_format::general, 4, \"1000\"},\r\n    {0x1.387bfffffffffp+13, chars_format::general, 4, \"9999\"},\r\n    {0x1.387c000000000p+13, chars_format::general, 4, \"1e+04\"},\r\n    {0x1.a36da54164f19p-14, chars_format::general, 5, \"9.9999e-05\"},\r\n    {0x1.a36da54164f1ap-14, chars_format::general, 5, \"0.0001\"},\r\n    {0x1.06248748df16fp-10, chars_format::general, 5, \"0.00099999\"},\r\n    {0x1.06248748df170p-10, chars_format::general, 5, \"0.001\"},\r\n    {0x1.47ada91b16dcbp-7, chars_format::general, 5, \"0.0099999\"},\r\n    {0x1.47ada91b16dccp-7, chars_format::general, 5, \"0.01\"},\r\n    {0x1.99991361dc93ep-4, chars_format::general, 5, \"0.099999\"},\r\n    {0x1.99991361dc93fp-4, chars_format::general, 5, \"0.1\"},\r\n    {0x1.ffff583a53b8ep-1, chars_format::general, 5, \"0.99999\"},\r\n    {0x1.ffff583a53b8fp-1, chars_format::general, 5, \"1\"},\r\n    {0x1.3fff972474538p+3, chars_format::general, 5, \"9.9999\"},\r\n    {0x1.3fff972474539p+3, chars_format::general, 5, \"10\"},\r\n    {0x1.8fff7ced91687p+6, chars_format::general, 5, \"99.999\"},\r\n    {0x1.8fff7ced91688p+6, chars_format::general, 5, \"100\"},\r\n    {0x1.f3ff5c28f5c28p+9, chars_format::general, 5, \"999.99\"},\r\n    {0x1.f3ff5c28f5c29p+9, chars_format::general, 5, \"1000\"},\r\n    {0x1.387f999999999p+13, chars_format::general, 5, \"9999.9\"},\r\n    {0x1.387f99999999ap+13, chars_format::general, 5, \"10000\"},\r\n    {0x1.869f7ffffffffp+16, chars_format::general, 5, \"99999\"},\r\n    {0x1.869f800000000p+16, chars_format::general, 5, \"1e+05\"},\r\n    {0x1.a36e20f35445dp-14, chars_format::general, 6, \"9.99999e-05\"},\r\n    {0x1.a36e20f35445ep-14, chars_format::general, 6, \"0.0001\"},\r\n    {0x1.0624d49814abap-10, chars_format::general, 6, \"0.000999999\"},\r\n    {0x1.0624d49814abbp-10, chars_format::general, 6, \"0.001\"},\r\n    {0x1.47ae09be19d69p-7, chars_format::general, 6, \"0.00999999\"},\r\n    {0x1.47ae09be19d6ap-7, chars_format::general, 6, \"0.01\"},\r\n    {0x1.99998c2da04c3p-4, chars_format::general, 6, \"0.0999999\"},\r\n    {0x1.99998c2da04c4p-4, chars_format::general, 6, \"0.1\"},\r\n    {0x1.ffffef39085f4p-1, chars_format::general, 6, \"0.999999\"},\r\n    {0x1.ffffef39085f5p-1, chars_format::general, 6, \"1\"},\r\n    {0x1.3ffff583a53b8p+3, chars_format::general, 6, \"9.99999\"},\r\n    {0x1.3ffff583a53b9p+3, chars_format::general, 6, \"10\"},\r\n    {0x1.8ffff2e48e8a7p+6, chars_format::general, 6, \"99.9999\"},\r\n    {0x1.8ffff2e48e8a8p+6, chars_format::general, 6, \"100\"},\r\n    {0x1.f3ffef9db22d0p+9, chars_format::general, 6, \"999.999\"},\r\n    {0x1.f3ffef9db22d1p+9, chars_format::general, 6, \"1000\"},\r\n    {0x1.387ff5c28f5c2p+13, chars_format::general, 6, \"9999.99\"},\r\n    {0x1.387ff5c28f5c3p+13, chars_format::general, 6, \"10000\"},\r\n    {0x1.869ff33333333p+16, chars_format::general, 6, \"99999.9\"},\r\n    {0x1.869ff33333334p+16, chars_format::general, 6, \"100000\"},\r\n    {0x1.e847effffffffp+19, chars_format::general, 6, \"999999\"},\r\n    {0x1.e847f00000000p+19, chars_format::general, 6, \"1e+06\"},\r\n    {0x1.a36e2d51ec34bp-14, chars_format::general, 7, \"9.999999e-05\"},\r\n    {0x1.a36e2d51ec34cp-14, chars_format::general, 7, \"0.0001\"},\r\n    {0x1.0624dc5333a0ep-10, chars_format::general, 7, \"0.0009999999\"},\r\n    {0x1.0624dc5333a0fp-10, chars_format::general, 7, \"0.001\"},\r\n    {0x1.47ae136800892p-7, chars_format::general, 7, \"0.009999999\"},\r\n    {0x1.47ae136800893p-7, chars_format::general, 7, \"0.01\"},\r\n    {0x1.9999984200ab7p-4, chars_format::general, 7, \"0.09999999\"},\r\n    {0x1.9999984200ab8p-4, chars_format::general, 7, \"0.1\"},\r\n    {0x1.fffffe5280d65p-1, chars_format::general, 7, \"0.9999999\"},\r\n    {0x1.fffffe5280d66p-1, chars_format::general, 7, \"1\"},\r\n    {0x1.3ffffef39085fp+3, chars_format::general, 7, \"9.999999\"},\r\n    {0x1.3ffffef390860p+3, chars_format::general, 7, \"10\"},\r\n    {0x1.8ffffeb074a77p+6, chars_format::general, 7, \"99.99999\"},\r\n    {0x1.8ffffeb074a78p+6, chars_format::general, 7, \"100\"},\r\n    {0x1.f3fffe5c91d14p+9, chars_format::general, 7, \"999.9999\"},\r\n    {0x1.f3fffe5c91d15p+9, chars_format::general, 7, \"1000\"},\r\n    {0x1.387ffef9db22dp+13, chars_format::general, 7, \"9999.999\"},\r\n    {0x1.387ffef9db22ep+13, chars_format::general, 7, \"10000\"},\r\n    {0x1.869ffeb851eb8p+16, chars_format::general, 7, \"99999.99\"},\r\n    {0x1.869ffeb851eb9p+16, chars_format::general, 7, \"100000\"},\r\n    {0x1.e847fe6666666p+19, chars_format::general, 7, \"999999.9\"},\r\n    {0x1.e847fe6666667p+19, chars_format::general, 7, \"1000000\"},\r\n    {0x1.312cfefffffffp+23, chars_format::general, 7, \"9999999\"},\r\n    {0x1.312cff0000000p+23, chars_format::general, 7, \"1e+07\"},\r\n    {0x1.a36e2e8e94ffcp-14, chars_format::general, 8, \"9.9999999e-05\"},\r\n    {0x1.a36e2e8e94ffdp-14, chars_format::general, 8, \"0.0001\"},\r\n    {0x1.0624dd191d1fdp-10, chars_format::general, 8, \"0.00099999999\"},\r\n    {0x1.0624dd191d1fep-10, chars_format::general, 8, \"0.001\"},\r\n    {0x1.47ae145f6467dp-7, chars_format::general, 8, \"0.0099999999\"},\r\n    {0x1.47ae145f6467ep-7, chars_format::general, 8, \"0.01\"},\r\n    {0x1.999999773d81cp-4, chars_format::general, 8, \"0.099999999\"},\r\n    {0x1.999999773d81dp-4, chars_format::general, 8, \"0.1\"},\r\n    {0x1.ffffffd50ce23p-1, chars_format::general, 8, \"0.99999999\"},\r\n    {0x1.ffffffd50ce24p-1, chars_format::general, 8, \"1\"},\r\n    {0x1.3fffffe5280d6p+3, chars_format::general, 8, \"9.9999999\"},\r\n    {0x1.3fffffe5280d7p+3, chars_format::general, 8, \"10\"},\r\n    {0x1.8fffffde7210bp+6, chars_format::general, 8, \"99.999999\"},\r\n    {0x1.8fffffde7210cp+6, chars_format::general, 8, \"100\"},\r\n    {0x1.f3ffffd60e94ep+9, chars_format::general, 8, \"999.99999\"},\r\n    {0x1.f3ffffd60e94fp+9, chars_format::general, 8, \"1000\"},\r\n    {0x1.387fffe5c91d1p+13, chars_format::general, 8, \"9999.9999\"},\r\n    {0x1.387fffe5c91d2p+13, chars_format::general, 8, \"10000\"},\r\n    {0x1.869fffdf3b645p+16, chars_format::general, 8, \"99999.999\"},\r\n    {0x1.869fffdf3b646p+16, chars_format::general, 8, \"100000\"},\r\n    {0x1.e847ffd70a3d7p+19, chars_format::general, 8, \"999999.99\"},\r\n    {0x1.e847ffd70a3d8p+19, chars_format::general, 8, \"1000000\"},\r\n    {0x1.312cffe666666p+23, chars_format::general, 8, \"9999999.9\"},\r\n    {0x1.312cffe666667p+23, chars_format::general, 8, \"10000000\"},\r\n    {0x1.7d783fdffffffp+26, chars_format::general, 8, \"99999999\"},\r\n    {0x1.7d783fe000000p+26, chars_format::general, 8, \"1e+08\"},\r\n    {0x1.a36e2eae3f7a7p-14, chars_format::general, 9, \"9.99999999e-05\"},\r\n    {0x1.a36e2eae3f7a8p-14, chars_format::general, 9, \"0.0001\"},\r\n    {0x1.0624dd2ce7ac8p-10, chars_format::general, 9, \"0.000999999999\"},\r\n    {0x1.0624dd2ce7ac9p-10, chars_format::general, 9, \"0.001\"},\r\n    {0x1.47ae14782197bp-7, chars_format::general, 9, \"0.00999999999\"},\r\n    {0x1.47ae14782197cp-7, chars_format::general, 9, \"0.01\"},\r\n    {0x1.9999999629fd9p-4, chars_format::general, 9, \"0.0999999999\"},\r\n    {0x1.9999999629fdap-4, chars_format::general, 9, \"0.1\"},\r\n    {0x1.fffffffbb47d0p-1, chars_format::general, 9, \"0.999999999\"},\r\n    {0x1.fffffffbb47d1p-1, chars_format::general, 9, \"1\"},\r\n    {0x1.3ffffffd50ce2p+3, chars_format::general, 9, \"9.99999999\"},\r\n    {0x1.3ffffffd50ce3p+3, chars_format::general, 9, \"10\"},\r\n    {0x1.8ffffffca501ap+6, chars_format::general, 9, \"99.9999999\"},\r\n    {0x1.8ffffffca501bp+6, chars_format::general, 9, \"100\"},\r\n    {0x1.f3fffffbce421p+9, chars_format::general, 9, \"999.999999\"},\r\n    {0x1.f3fffffbce422p+9, chars_format::general, 9, \"1000\"},\r\n    {0x1.387ffffd60e94p+13, chars_format::general, 9, \"9999.99999\"},\r\n    {0x1.387ffffd60e95p+13, chars_format::general, 9, \"10000\"},\r\n    {0x1.869ffffcb923ap+16, chars_format::general, 9, \"99999.9999\"},\r\n    {0x1.869ffffcb923bp+16, chars_format::general, 9, \"100000\"},\r\n    {0x1.e847fffbe76c8p+19, chars_format::general, 9, \"999999.999\"},\r\n    {0x1.e847fffbe76c9p+19, chars_format::general, 9, \"1000000\"},\r\n    {0x1.312cfffd70a3dp+23, chars_format::general, 9, \"9999999.99\"},\r\n    {0x1.312cfffd70a3ep+23, chars_format::general, 9, \"10000000\"},\r\n    {0x1.7d783ffccccccp+26, chars_format::general, 9, \"99999999.9\"},\r\n    {0x1.7d783ffcccccdp+26, chars_format::general, 9, \"100000000\"},\r\n    {0x1.dcd64ffbfffffp+29, chars_format::general, 9, \"999999999\"},\r\n    {0x1.dcd64ffc00000p+29, chars_format::general, 9, \"1e+09\"},\r\n    {0x1.a36e2eb16a205p-14, chars_format::general, 10, \"9.999999999e-05\"},\r\n    {0x1.a36e2eb16a206p-14, chars_format::general, 10, \"0.0001\"},\r\n    {0x1.0624dd2ee2543p-10, chars_format::general, 10, \"0.0009999999999\"},\r\n    {0x1.0624dd2ee2544p-10, chars_format::general, 10, \"0.001\"},\r\n    {0x1.47ae147a9ae94p-7, chars_format::general, 10, \"0.009999999999\"},\r\n    {0x1.47ae147a9ae95p-7, chars_format::general, 10, \"0.01\"},\r\n    {0x1.9999999941a39p-4, chars_format::general, 10, \"0.09999999999\"},\r\n    {0x1.9999999941a3ap-4, chars_format::general, 10, \"0.1\"},\r\n    {0x1.ffffffff920c8p-1, chars_format::general, 10, \"0.9999999999\"},\r\n    {0x1.ffffffff920c9p-1, chars_format::general, 10, \"1\"},\r\n    {0x1.3fffffffbb47dp+3, chars_format::general, 10, \"9.999999999\"},\r\n    {0x1.3fffffffbb47ep+3, chars_format::general, 10, \"10\"},\r\n    {0x1.8fffffffaa19cp+6, chars_format::general, 10, \"99.99999999\"},\r\n    {0x1.8fffffffaa19dp+6, chars_format::general, 10, \"100\"},\r\n    {0x1.f3ffffff94a03p+9, chars_format::general, 10, \"999.9999999\"},\r\n    {0x1.f3ffffff94a04p+9, chars_format::general, 10, \"1000\"},\r\n    {0x1.387fffffbce42p+13, chars_format::general, 10, \"9999.999999\"},\r\n    {0x1.387fffffbce43p+13, chars_format::general, 10, \"10000\"},\r\n    {0x1.869fffffac1d2p+16, chars_format::general, 10, \"99999.99999\"},\r\n    {0x1.869fffffac1d3p+16, chars_format::general, 10, \"100000\"},\r\n    {0x1.e847ffff97247p+19, chars_format::general, 10, \"999999.9999\"},\r\n    {0x1.e847ffff97248p+19, chars_format::general, 10, \"1000000\"},\r\n    {0x1.312cffffbe76cp+23, chars_format::general, 10, \"9999999.999\"},\r\n    {0x1.312cffffbe76dp+23, chars_format::general, 10, \"10000000\"},\r\n    {0x1.7d783fffae147p+26, chars_format::general, 10, \"99999999.99\"},\r\n    {0x1.7d783fffae148p+26, chars_format::general, 10, \"100000000\"},\r\n    {0x1.dcd64fff99999p+29, chars_format::general, 10, \"999999999.9\"},\r\n    {0x1.dcd64fff9999ap+29, chars_format::general, 10, \"1000000000\"},\r\n    {0x1.2a05f1ffbffffp+33, chars_format::general, 10, \"9999999999\"},\r\n    {0x1.2a05f1ffc0000p+33, chars_format::general, 10, \"1e+10\"},\r\n    {0x1.a36e2eb1bb30fp-14, chars_format::general, 11, \"9.9999999999e-05\"},\r\n    {0x1.a36e2eb1bb310p-14, chars_format::general, 11, \"0.0001\"},\r\n    {0x1.0624dd2f14fe9p-10, chars_format::general, 11, \"0.00099999999999\"},\r\n    {0x1.0624dd2f14feap-10, chars_format::general, 11, \"0.001\"},\r\n    {0x1.47ae147ada3e3p-7, chars_format::general, 11, \"0.0099999999999\"},\r\n    {0x1.47ae147ada3e4p-7, chars_format::general, 11, \"0.01\"},\r\n    {0x1.9999999990cdcp-4, chars_format::general, 11, \"0.099999999999\"},\r\n    {0x1.9999999990cddp-4, chars_format::general, 11, \"0.1\"},\r\n    {0x1.fffffffff5014p-1, chars_format::general, 11, \"0.99999999999\"},\r\n    {0x1.fffffffff5015p-1, chars_format::general, 11, \"1\"},\r\n    {0x1.3ffffffff920cp+3, chars_format::general, 11, \"9.9999999999\"},\r\n    {0x1.3ffffffff920dp+3, chars_format::general, 11, \"10\"},\r\n    {0x1.8ffffffff768fp+6, chars_format::general, 11, \"99.999999999\"},\r\n    {0x1.8ffffffff7690p+6, chars_format::general, 11, \"100\"},\r\n    {0x1.f3fffffff5433p+9, chars_format::general, 11, \"999.99999999\"},\r\n    {0x1.f3fffffff5434p+9, chars_format::general, 11, \"1000\"},\r\n    {0x1.387ffffff94a0p+13, chars_format::general, 11, \"9999.9999999\"},\r\n    {0x1.387ffffff94a1p+13, chars_format::general, 11, \"10000\"},\r\n    {0x1.869ffffff79c8p+16, chars_format::general, 11, \"99999.999999\"},\r\n    {0x1.869ffffff79c9p+16, chars_format::general, 11, \"100000\"},\r\n    {0x1.e847fffff583ap+19, chars_format::general, 11, \"999999.99999\"},\r\n    {0x1.e847fffff583bp+19, chars_format::general, 11, \"1000000\"},\r\n    {0x1.312cfffff9724p+23, chars_format::general, 11, \"9999999.9999\"},\r\n    {0x1.312cfffff9725p+23, chars_format::general, 11, \"10000000\"},\r\n    {0x1.7d783ffff7cedp+26, chars_format::general, 11, \"99999999.999\"},\r\n    {0x1.7d783ffff7ceep+26, chars_format::general, 11, \"100000000\"},\r\n    {0x1.dcd64ffff5c28p+29, chars_format::general, 11, \"999999999.99\"},\r\n    {0x1.dcd64ffff5c29p+29, chars_format::general, 11, \"1000000000\"},\r\n    {0x1.2a05f1fff9999p+33, chars_format::general, 11, \"9999999999.9\"},\r\n    {0x1.2a05f1fff999ap+33, chars_format::general, 11, \"10000000000\"},\r\n    {0x1.74876e7ff7fffp+36, chars_format::general, 11, \"99999999999\"},\r\n    {0x1.74876e7ff8000p+36, chars_format::general, 11, \"1e+11\"},\r\n    {0x1.a36e2eb1c34c3p-14, chars_format::general, 12, \"9.99999999999e-05\"},\r\n    {0x1.a36e2eb1c34c4p-14, chars_format::general, 12, \"0.0001\"},\r\n    {0x1.0624dd2f1a0fap-10, chars_format::general, 12, \"0.000999999999999\"},\r\n    {0x1.0624dd2f1a0fbp-10, chars_format::general, 12, \"0.001\"},\r\n    {0x1.47ae147ae0938p-7, chars_format::general, 12, \"0.00999999999999\"},\r\n    {0x1.47ae147ae0939p-7, chars_format::general, 12, \"0.01\"},\r\n    {0x1.9999999998b86p-4, chars_format::general, 12, \"0.0999999999999\"},\r\n    {0x1.9999999998b87p-4, chars_format::general, 12, \"0.1\"},\r\n    {0x1.fffffffffee68p-1, chars_format::general, 12, \"0.999999999999\"},\r\n    {0x1.fffffffffee69p-1, chars_format::general, 12, \"1\"},\r\n    {0x1.3fffffffff501p+3, chars_format::general, 12, \"9.99999999999\"},\r\n    {0x1.3fffffffff502p+3, chars_format::general, 12, \"10\"},\r\n    {0x1.8fffffffff241p+6, chars_format::general, 12, \"99.9999999999\"},\r\n    {0x1.8fffffffff242p+6, chars_format::general, 12, \"100\"},\r\n    {0x1.f3fffffffeed1p+9, chars_format::general, 12, \"999.999999999\"},\r\n    {0x1.f3fffffffeed2p+9, chars_format::general, 12, \"1000\"},\r\n    {0x1.387fffffff543p+13, chars_format::general, 12, \"9999.99999999\"},\r\n    {0x1.387fffffff544p+13, chars_format::general, 12, \"10000\"},\r\n    {0x1.869fffffff294p+16, chars_format::general, 12, \"99999.9999999\"},\r\n    {0x1.869fffffff295p+16, chars_format::general, 12, \"100000\"},\r\n    {0x1.e847fffffef39p+19, chars_format::general, 12, \"999999.999999\"},\r\n    {0x1.e847fffffef3ap+19, chars_format::general, 12, \"1000000\"},\r\n    {0x1.312cffffff583p+23, chars_format::general, 12, \"9999999.99999\"},\r\n    {0x1.312cffffff584p+23, chars_format::general, 12, \"10000000\"},\r\n    {0x1.7d783fffff2e4p+26, chars_format::general, 12, \"99999999.9999\"},\r\n    {0x1.7d783fffff2e5p+26, chars_format::general, 12, \"100000000\"},\r\n    {0x1.dcd64ffffef9dp+29, chars_format::general, 12, \"999999999.999\"},\r\n    {0x1.dcd64ffffef9ep+29, chars_format::general, 12, \"1000000000\"},\r\n    {0x1.2a05f1ffff5c2p+33, chars_format::general, 12, \"9999999999.99\"},\r\n    {0x1.2a05f1ffff5c3p+33, chars_format::general, 12, \"10000000000\"},\r\n    {0x1.74876e7fff333p+36, chars_format::general, 12, \"99999999999.9\"},\r\n    {0x1.74876e7fff334p+36, chars_format::general, 12, \"100000000000\"},\r\n    {0x1.d1a94a1ffefffp+39, chars_format::general, 12, \"999999999999\"},\r\n    {0x1.d1a94a1fff000p+39, chars_format::general, 12, \"1e+12\"},\r\n    {0x1.a36e2eb1c41bbp-14, chars_format::general, 13, \"9.999999999999e-05\"},\r\n    {0x1.a36e2eb1c41bcp-14, chars_format::general, 13, \"0.0001\"},\r\n    {0x1.0624dd2f1a915p-10, chars_format::general, 13, \"0.0009999999999999\"},\r\n    {0x1.0624dd2f1a916p-10, chars_format::general, 13, \"0.001\"},\r\n    {0x1.47ae147ae135ap-7, chars_format::general, 13, \"0.009999999999999\"},\r\n    {0x1.47ae147ae135bp-7, chars_format::general, 13, \"0.01\"},\r\n    {0x1.9999999999831p-4, chars_format::general, 13, \"0.09999999999999\"},\r\n    {0x1.9999999999832p-4, chars_format::general, 13, \"0.1\"},\r\n    {0x1.ffffffffffe3dp-1, chars_format::general, 13, \"0.9999999999999\"},\r\n    {0x1.ffffffffffe3ep-1, chars_format::general, 13, \"1\"},\r\n    {0x1.3fffffffffee6p+3, chars_format::general, 13, \"9.999999999999\"},\r\n    {0x1.3fffffffffee7p+3, chars_format::general, 13, \"10\"},\r\n    {0x1.8fffffffffea0p+6, chars_format::general, 13, \"99.99999999999\"},\r\n    {0x1.8fffffffffea1p+6, chars_format::general, 13, \"100\"},\r\n    {0x1.f3ffffffffe48p+9, chars_format::general, 13, \"999.9999999999\"},\r\n    {0x1.f3ffffffffe49p+9, chars_format::general, 13, \"1000\"},\r\n    {0x1.387fffffffeedp+13, chars_format::general, 13, \"9999.999999999\"},\r\n    {0x1.387fffffffeeep+13, chars_format::general, 13, \"10000\"},\r\n    {0x1.869fffffffea8p+16, chars_format::general, 13, \"99999.99999999\"},\r\n    {0x1.869fffffffea9p+16, chars_format::general, 13, \"100000\"},\r\n    {0x1.e847ffffffe52p+19, chars_format::general, 13, \"999999.9999999\"},\r\n    {0x1.e847ffffffe53p+19, chars_format::general, 13, \"1000000\"},\r\n    {0x1.312cffffffef3p+23, chars_format::general, 13, \"9999999.999999\"},\r\n    {0x1.312cffffffef4p+23, chars_format::general, 13, \"10000000\"},\r\n    {0x1.7d783fffffeb0p+26, chars_format::general, 13, \"99999999.99999\"},\r\n    {0x1.7d783fffffeb1p+26, chars_format::general, 13, \"100000000\"},\r\n    {0x1.dcd64fffffe5cp+29, chars_format::general, 13, \"999999999.9999\"},\r\n    {0x1.dcd64fffffe5dp+29, chars_format::general, 13, \"1000000000\"},\r\n    {0x1.2a05f1ffffef9p+33, chars_format::general, 13, \"9999999999.999\"},\r\n    {0x1.2a05f1ffffefap+33, chars_format::general, 13, \"10000000000\"},\r\n    {0x1.74876e7fffeb8p+36, chars_format::general, 13, \"99999999999.99\"},\r\n    {0x1.74876e7fffeb9p+36, chars_format::general, 13, \"100000000000\"},\r\n    {0x1.d1a94a1fffe66p+39, chars_format::general, 13, \"999999999999.9\"},\r\n    {0x1.d1a94a1fffe67p+39, chars_format::general, 13, \"1000000000000\"},\r\n    {0x1.2309ce53ffeffp+43, chars_format::general, 13, \"9999999999999\"},\r\n    {0x1.2309ce53fff00p+43, chars_format::general, 13, \"1e+13\"},\r\n    {0x1.a36e2eb1c4307p-14, chars_format::general, 14, \"9.9999999999999e-05\"},\r\n    {0x1.a36e2eb1c4308p-14, chars_format::general, 14, \"0.0001\"},\r\n    {0x1.0624dd2f1a9e4p-10, chars_format::general, 14, \"0.00099999999999999\"},\r\n    {0x1.0624dd2f1a9e5p-10, chars_format::general, 14, \"0.001\"},\r\n    {0x1.47ae147ae145ep-7, chars_format::general, 14, \"0.0099999999999999\"},\r\n    {0x1.47ae147ae145fp-7, chars_format::general, 14, \"0.01\"},\r\n    {0x1.9999999999975p-4, chars_format::general, 14, \"0.099999999999999\"},\r\n    {0x1.9999999999976p-4, chars_format::general, 14, \"0.1\"},\r\n    {0x1.fffffffffffd2p-1, chars_format::general, 14, \"0.99999999999999\"},\r\n    {0x1.fffffffffffd3p-1, chars_format::general, 14, \"1\"},\r\n    {0x1.3ffffffffffe3p+3, chars_format::general, 14, \"9.9999999999999\"},\r\n    {0x1.3ffffffffffe4p+3, chars_format::general, 14, \"10\"},\r\n    {0x1.8ffffffffffdcp+6, chars_format::general, 14, \"99.999999999999\"},\r\n    {0x1.8ffffffffffddp+6, chars_format::general, 14, \"100\"},\r\n    {0x1.f3fffffffffd4p+9, chars_format::general, 14, \"999.99999999999\"},\r\n    {0x1.f3fffffffffd5p+9, chars_format::general, 14, \"1000\"},\r\n    {0x1.387ffffffffe4p+13, chars_format::general, 14, \"9999.9999999999\"},\r\n    {0x1.387ffffffffe5p+13, chars_format::general, 14, \"10000\"},\r\n    {0x1.869ffffffffddp+16, chars_format::general, 14, \"99999.999999999\"},\r\n    {0x1.869ffffffffdep+16, chars_format::general, 14, \"100000\"},\r\n    {0x1.e847fffffffd5p+19, chars_format::general, 14, \"999999.99999999\"},\r\n    {0x1.e847fffffffd6p+19, chars_format::general, 14, \"1000000\"},\r\n    {0x1.312cfffffffe5p+23, chars_format::general, 14, \"9999999.9999999\"},\r\n    {0x1.312cfffffffe6p+23, chars_format::general, 14, \"10000000\"},\r\n    {0x1.7d783ffffffdep+26, chars_format::general, 14, \"99999999.999999\"},\r\n    {0x1.7d783ffffffdfp+26, chars_format::general, 14, \"100000000\"},\r\n    {0x1.dcd64ffffffd6p+29, chars_format::general, 14, \"999999999.99999\"},\r\n    {0x1.dcd64ffffffd7p+29, chars_format::general, 14, \"1000000000\"},\r\n    {0x1.2a05f1fffffe5p+33, chars_format::general, 14, \"9999999999.9999\"},\r\n    {0x1.2a05f1fffffe6p+33, chars_format::general, 14, \"10000000000\"},\r\n    {0x1.74876e7ffffdfp+36, chars_format::general, 14, \"99999999999.999\"},\r\n    {0x1.74876e7ffffe0p+36, chars_format::general, 14, \"100000000000\"},\r\n    {0x1.d1a94a1ffffd7p+39, chars_format::general, 14, \"999999999999.99\"},\r\n    {0x1.d1a94a1ffffd8p+39, chars_format::general, 14, \"1000000000000\"},\r\n    {0x1.2309ce53fffe6p+43, chars_format::general, 14, \"9999999999999.9\"},\r\n    {0x1.2309ce53fffe7p+43, chars_format::general, 14, \"10000000000000\"},\r\n    {0x1.6bcc41e8fffdfp+46, chars_format::general, 14, \"99999999999999\"},\r\n    {0x1.6bcc41e8fffe0p+46, chars_format::general, 14, \"1e+14\"},\r\n    {0x1.a36e2eb1c4328p-14, chars_format::general, 15, \"9.99999999999999e-05\"},\r\n    {0x1.a36e2eb1c4329p-14, chars_format::general, 15, \"0.0001\"},\r\n    {0x1.0624dd2f1a9f9p-10, chars_format::general, 15, \"0.000999999999999999\"},\r\n    {0x1.0624dd2f1a9fap-10, chars_format::general, 15, \"0.001\"},\r\n    {0x1.47ae147ae1477p-7, chars_format::general, 15, \"0.00999999999999999\"},\r\n    {0x1.47ae147ae1478p-7, chars_format::general, 15, \"0.01\"},\r\n    {0x1.9999999999995p-4, chars_format::general, 15, \"0.0999999999999999\"},\r\n    {0x1.9999999999996p-4, chars_format::general, 15, \"0.1\"},\r\n    {0x1.ffffffffffffbp-1, chars_format::general, 15, \"0.999999999999999\"},\r\n    {0x1.ffffffffffffcp-1, chars_format::general, 15, \"1\"},\r\n    {0x1.3fffffffffffdp+3, chars_format::general, 15, \"9.99999999999999\"},\r\n    {0x1.3fffffffffffep+3, chars_format::general, 15, \"10\"},\r\n    {0x1.8fffffffffffcp+6, chars_format::general, 15, \"99.9999999999999\"},\r\n    {0x1.8fffffffffffdp+6, chars_format::general, 15, \"100\"},\r\n    {0x1.f3ffffffffffbp+9, chars_format::general, 15, \"999.999999999999\"},\r\n    {0x1.f3ffffffffffcp+9, chars_format::general, 15, \"1000\"},\r\n    {0x1.387fffffffffdp+13, chars_format::general, 15, \"9999.99999999999\"},\r\n    {0x1.387fffffffffep+13, chars_format::general, 15, \"10000\"},\r\n    {0x1.869fffffffffcp+16, chars_format::general, 15, \"99999.9999999999\"},\r\n    {0x1.869fffffffffdp+16, chars_format::general, 15, \"100000\"},\r\n    {0x1.e847ffffffffbp+19, chars_format::general, 15, \"999999.999999999\"},\r\n    {0x1.e847ffffffffcp+19, chars_format::general, 15, \"1000000\"},\r\n    {0x1.312cffffffffdp+23, chars_format::general, 15, \"9999999.99999999\"},\r\n    {0x1.312cffffffffep+23, chars_format::general, 15, \"10000000\"},\r\n    {0x1.7d783fffffffcp+26, chars_format::general, 15, \"99999999.9999999\"},\r\n    {0x1.7d783fffffffdp+26, chars_format::general, 15, \"100000000\"},\r\n    {0x1.dcd64fffffffbp+29, chars_format::general, 15, \"999999999.999999\"},\r\n    {0x1.dcd64fffffffcp+29, chars_format::general, 15, \"1000000000\"},\r\n    {0x1.2a05f1ffffffdp+33, chars_format::general, 15, \"9999999999.99999\"},\r\n    {0x1.2a05f1ffffffep+33, chars_format::general, 15, \"10000000000\"},\r\n    {0x1.74876e7fffffcp+36, chars_format::general, 15, \"99999999999.9999\"},\r\n    {0x1.74876e7fffffdp+36, chars_format::general, 15, \"100000000000\"},\r\n    {0x1.d1a94a1fffffbp+39, chars_format::general, 15, \"999999999999.999\"},\r\n    {0x1.d1a94a1fffffcp+39, chars_format::general, 15, \"1000000000000\"},\r\n    {0x1.2309ce53ffffdp+43, chars_format::general, 15, \"9999999999999.99\"},\r\n    {0x1.2309ce53ffffep+43, chars_format::general, 15, \"10000000000000\"},\r\n    {0x1.6bcc41e8ffffcp+46, chars_format::general, 15, \"99999999999999.9\"},\r\n    {0x1.6bcc41e8ffffdp+46, chars_format::general, 15, \"100000000000000\"},\r\n    {0x1.c6bf52633fffbp+49, chars_format::general, 15, \"999999999999999\"},\r\n    {0x1.c6bf52633fffcp+49, chars_format::general, 15, \"1e+15\"},\r\n    {0x1.1c37937e07fffp+53, chars_format::general, 16, \"9999999999999998\"},\r\n    {0x1.1c37937e08000p+53, chars_format::general, 16, \"1e+16\"},\r\n    {0x1.6345785d89fffp+56, chars_format::general, 17, \"99999999999999984\"},\r\n    {0x1.6345785d8a000p+56, chars_format::general, 17, \"1e+17\"},\r\n    {0x1.bc16d674ec7ffp+59, chars_format::general, 18, \"999999999999999872\"},\r\n    {0x1.bc16d674ec800p+59, chars_format::general, 18, \"1e+18\"},\r\n    {0x1.158e460913cffp+63, chars_format::general, 19, \"9999999999999997952\"},\r\n    {0x1.158e460913d00p+63, chars_format::general, 19, \"1e+19\"},\r\n    {0x1.5af1d78b58c3fp+66, chars_format::general, 20, \"99999999999999983616\"},\r\n    {0x1.5af1d78b58c40p+66, chars_format::general, 20, \"1e+20\"},\r\n    {0x1.b1ae4d6e2ef4fp+69, chars_format::general, 21, \"999999999999999868928\"},\r\n    {0x1.b1ae4d6e2ef50p+69, chars_format::general, 21, \"1e+21\"},\r\n    {0x1.0f0cf064dd591p+73, chars_format::general, 22, \"9999999999999997902848\"},\r\n    {0x1.0f0cf064dd592p+73, chars_format::general, 22, \"1e+22\"},\r\n    {0x1.52d02c7e14af6p+76, chars_format::general, 23, \"99999999999999991611392\"},\r\n    {0x1.52d02c7e14af7p+76, chars_format::general, 23, \"1.0000000000000000838861e+23\"},\r\n    {0x1.a784379d99db4p+79, chars_format::general, 24, \"999999999999999983222784\"},\r\n    {0x1.a784379d99db5p+79, chars_format::general, 24, \"1.00000000000000011744051e+24\"},\r\n    {0x1.a36e2eb1c432cp-14, chars_format::general, 25, \"9.999999999999999123964645e-05\"},\r\n    {0x1.a36e2eb1c432dp-14, chars_format::general, 25, \"0.0001000000000000000047921736\"},\r\n    {0x1.0624dd2f1a9fbp-10, chars_format::general, 25, \"0.0009999999999999998039762472\"},\r\n    {0x1.0624dd2f1a9fcp-10, chars_format::general, 25, \"0.001000000000000000020816682\"},\r\n    {0x1.47ae147ae147ap-7, chars_format::general, 25, \"0.009999999999999998473443341\"},\r\n    {0x1.47ae147ae147bp-7, chars_format::general, 25, \"0.01000000000000000020816682\"},\r\n    {0x1.9999999999999p-4, chars_format::general, 25, \"0.09999999999999999167332732\"},\r\n    {0x1.999999999999ap-4, chars_format::general, 25, \"0.1000000000000000055511151\"},\r\n    {0x1.fffffffffffffp-1, chars_format::general, 25, \"0.9999999999999998889776975\"},\r\n    {0x1.0000000000000p+0, chars_format::general, 25, \"1\"},\r\n    {0x1.3ffffffffffffp+3, chars_format::general, 25, \"9.999999999999998223643161\"},\r\n    {0x1.4000000000000p+3, chars_format::general, 25, \"10\"},\r\n    {0x1.8ffffffffffffp+6, chars_format::general, 25, \"99.99999999999998578914528\"},\r\n    {0x1.9000000000000p+6, chars_format::general, 25, \"100\"},\r\n    {0x1.f3fffffffffffp+9, chars_format::general, 25, \"999.9999999999998863131623\"},\r\n    {0x1.f400000000000p+9, chars_format::general, 25, \"1000\"},\r\n    {0x1.387ffffffffffp+13, chars_format::general, 25, \"9999.999999999998181010596\"},\r\n    {0x1.3880000000000p+13, chars_format::general, 25, \"10000\"},\r\n    {0x1.869ffffffffffp+16, chars_format::general, 25, \"99999.99999999998544808477\"},\r\n    {0x1.86a0000000000p+16, chars_format::general, 25, \"100000\"},\r\n    {0x1.e847fffffffffp+19, chars_format::general, 25, \"999999.9999999998835846782\"},\r\n    {0x1.e848000000000p+19, chars_format::general, 25, \"1000000\"},\r\n    {0x1.312cfffffffffp+23, chars_format::general, 25, \"9999999.999999998137354851\"},\r\n    {0x1.312d000000000p+23, chars_format::general, 25, \"10000000\"},\r\n    {0x1.7d783ffffffffp+26, chars_format::general, 25, \"99999999.99999998509883881\"},\r\n    {0x1.7d78400000000p+26, chars_format::general, 25, \"100000000\"},\r\n    {0x1.dcd64ffffffffp+29, chars_format::general, 25, \"999999999.9999998807907104\"},\r\n    {0x1.dcd6500000000p+29, chars_format::general, 25, \"1000000000\"},\r\n    {0x1.2a05f1fffffffp+33, chars_format::general, 25, \"9999999999.999998092651367\"},\r\n    {0x1.2a05f20000000p+33, chars_format::general, 25, \"10000000000\"},\r\n    {0x1.74876e7ffffffp+36, chars_format::general, 25, \"99999999999.99998474121094\"},\r\n    {0x1.74876e8000000p+36, chars_format::general, 25, \"100000000000\"},\r\n    {0x1.d1a94a1ffffffp+39, chars_format::general, 25, \"999999999999.9998779296875\"},\r\n    {0x1.d1a94a2000000p+39, chars_format::general, 25, \"1000000000000\"},\r\n    {0x1.2309ce53fffffp+43, chars_format::general, 25, \"9999999999999.998046875\"},\r\n    {0x1.2309ce5400000p+43, chars_format::general, 25, \"10000000000000\"},\r\n    {0x1.6bcc41e8fffffp+46, chars_format::general, 25, \"99999999999999.984375\"},\r\n    {0x1.6bcc41e900000p+46, chars_format::general, 25, \"100000000000000\"},\r\n    {0x1.c6bf52633ffffp+49, chars_format::general, 25, \"999999999999999.875\"},\r\n    {0x1.c6bf526340000p+49, chars_format::general, 25, \"1000000000000000\"},\r\n    {0x1.1c37937e07fffp+53, chars_format::general, 25, \"9999999999999998\"},\r\n    {0x1.1c37937e08000p+53, chars_format::general, 25, \"10000000000000000\"},\r\n    {0x1.6345785d89fffp+56, chars_format::general, 25, \"99999999999999984\"},\r\n    {0x1.6345785d8a000p+56, chars_format::general, 25, \"100000000000000000\"},\r\n    {0x1.bc16d674ec7ffp+59, chars_format::general, 25, \"999999999999999872\"},\r\n    {0x1.bc16d674ec800p+59, chars_format::general, 25, \"1000000000000000000\"},\r\n    {0x1.158e460913cffp+63, chars_format::general, 25, \"9999999999999997952\"},\r\n    {0x1.158e460913d00p+63, chars_format::general, 25, \"10000000000000000000\"},\r\n    {0x1.5af1d78b58c3fp+66, chars_format::general, 25, \"99999999999999983616\"},\r\n    {0x1.5af1d78b58c40p+66, chars_format::general, 25, \"100000000000000000000\"},\r\n    {0x1.b1ae4d6e2ef4fp+69, chars_format::general, 25, \"999999999999999868928\"},\r\n    {0x1.b1ae4d6e2ef50p+69, chars_format::general, 25, \"1000000000000000000000\"},\r\n    {0x1.0f0cf064dd591p+73, chars_format::general, 25, \"9999999999999997902848\"},\r\n    {0x1.0f0cf064dd592p+73, chars_format::general, 25, \"10000000000000000000000\"},\r\n    {0x1.52d02c7e14af6p+76, chars_format::general, 25, \"99999999999999991611392\"},\r\n    {0x1.52d02c7e14af7p+76, chars_format::general, 25, \"100000000000000008388608\"},\r\n    {0x1.a784379d99db4p+79, chars_format::general, 25, \"999999999999999983222784\"},\r\n    {0x1.a784379d99db5p+79, chars_format::general, 25, \"1000000000000000117440512\"},\r\n    {0x1.08b2a2c280290p+83, chars_format::general, 25, \"9999999999999998758486016\"},\r\n    {0x1.08b2a2c280291p+83, chars_format::general, 25, \"1.000000000000000090596966e+25\"},\r\n    {0x1.4adf4b7320334p+86, chars_format::general, 26, \"99999999999999987584860160\"},\r\n    {0x1.4adf4b7320335p+86, chars_format::general, 26, \"1.0000000000000000476472934e+26\"},\r\n    {0x1.9d971e4fe8401p+89, chars_format::general, 27, \"999999999999999875848601600\"},\r\n    {0x1.9d971e4fe8402p+89, chars_format::general, 27, \"1.00000000000000001328755507e+27\"},\r\n    {0x1.027e72f1f1281p+93, chars_format::general, 28, \"9999999999999999583119736832\"},\r\n    {0x1.027e72f1f1282p+93, chars_format::general, 28, \"1.000000000000000178214299238e+28\"},\r\n    {0x1.431e0fae6d721p+96, chars_format::general, 29, \"99999999999999991433150857216\"},\r\n    {0x1.431e0fae6d722p+96, chars_format::general, 29, \"1.0000000000000000902533690163e+29\"},\r\n    {0x1.93e5939a08ce9p+99, chars_format::general, 30, \"999999999999999879147136483328\"},\r\n    {0x1.93e5939a08ceap+99, chars_format::general, 30, \"1.00000000000000001988462483866e+30\"},\r\n    {0x1.f8def8808b024p+102, chars_format::general, 31, \"9999999999999999635896294965248\"},\r\n    {0x1.f8def8808b025p+102, chars_format::general, 31, \"1.000000000000000076179620180787e+31\"},\r\n    {0x1.3b8b5b5056e16p+106, chars_format::general, 32, \"99999999999999987351763694911488\"},\r\n    {0x1.3b8b5b5056e17p+106, chars_format::general, 32, \"1.0000000000000000536616220439347e+32\"},\r\n    {0x1.8a6e32246c99cp+109, chars_format::general, 33, \"999999999999999945575230987042816\"},\r\n    {0x1.8a6e32246c99dp+109, chars_format::general, 33, \"1.00000000000000008969041906289869e+33\"},\r\n    {0x1.ed09bead87c03p+112, chars_format::general, 34, \"9999999999999999455752309870428160\"},\r\n    {0x1.ed09bead87c04p+112, chars_format::general, 34, \"1.000000000000000060867381447727514e+34\"},\r\n    {0x1.3426172c74d82p+116, chars_format::general, 35, \"99999999999999996863366107917975552\"},\r\n    {0x1.3426172c74d83p+116, chars_format::general, 35, \"1.0000000000000001531011018162752717e+35\"},\r\n    {0x1.812f9cf7920e2p+119, chars_format::general, 36, \"999999999999999894846684784341549056\"},\r\n    {0x1.812f9cf7920e3p+119, chars_format::general, 36, \"1.00000000000000004242063737401796198e+36\"},\r\n    {0x1.e17b84357691bp+122, chars_format::general, 37, \"9999999999999999538762658202121142272\"},\r\n    {0x1.e17b84357691cp+122, chars_format::general, 37, \"1.00000000000000007193542789195324457e+37\"},\r\n    {0x1.2ced32a16a1b1p+126, chars_format::general, 38, \"99999999999999997748809823456034029568\"},\r\n    {0x1.2ced32a16a1b2p+126, chars_format::general, 38, \"1.0000000000000001663827575493461488435e+38\"},\r\n    {0x1.78287f49c4a1dp+129, chars_format::general, 39, \"999999999999999939709166371603178586112\"},\r\n    {0x1.78287f49c4a1ep+129, chars_format::general, 39, \"1.00000000000000009082489382343182542438e+39\"},\r\n    {0x1.d6329f1c35ca4p+132, chars_format::general, 40, \"9999999999999999094860208812374492184576\"},\r\n    {0x1.d6329f1c35ca5p+132, chars_format::general, 40, \"1.000000000000000030378602842700366689075e+40\"},\r\n    {0x1.25dfa371a19e6p+136, chars_format::general, 41, \"99999999999999981277195531206711524196352\"},\r\n    {0x1.25dfa371a19e7p+136, chars_format::general, 41, \"1.0000000000000000062000864504077831949517e+41\"},\r\n    {0x1.6f578c4e0a060p+139, chars_format::general, 42, \"999999999999999890143207767403382423158784\"},\r\n    {0x1.6f578c4e0a061p+139, chars_format::general, 42, \"1.00000000000000004488571267807591678554931e+42\"},\r\n    {0x1.cb2d6f618c878p+142, chars_format::general, 43, \"9999999999999998901432077674033824231587840\"},\r\n    {0x1.cb2d6f618c879p+142, chars_format::general, 43, \"1.000000000000000013937211695941409913071206e+43\"},\r\n    {0x1.1efc659cf7d4bp+146, chars_format::general, 44, \"99999999999999989014320776740338242315878400\"},\r\n    {0x1.1efc659cf7d4cp+146, chars_format::general, 44, \"1.0000000000000000882136140530642264070186598e+44\"},\r\n    {0x1.66bb7f0435c9ep+149, chars_format::general, 45, \"999999999999999929757289024535551219930759168\"},\r\n    {0x1.66bb7f0435c9fp+149, chars_format::general, 45, \"1.00000000000000008821361405306422640701865984e+45\"},\r\n    {0x1.c06a5ec5433c6p+152, chars_format::general, 46, \"9999999999999999931398190359470212947659194368\"},\r\n    {0x1.c06a5ec5433c7p+152, chars_format::general, 46, \"1.000000000000000119904879058769961444436239974e+46\"},\r\n    {0x1.18427b3b4a05bp+156, chars_format::general, 47, \"99999999999999984102174700855949311516153479168\"},\r\n    {0x1.18427b3b4a05cp+156, chars_format::general, 47, \"1.0000000000000000438458430450761973546340476518e+47\"},\r\n    {0x1.5e531a0a1c872p+159, chars_format::general, 48, \"999999999999999881586566215862833963056037363712\"},\r\n    {0x1.5e531a0a1c873p+159, chars_format::general, 48, \"1.00000000000000004384584304507619735463404765184e+48\"},\r\n    {0x1.b5e7e08ca3a8fp+162, chars_format::general, 49, \"9999999999999999464902769475481793196872414789632\"},\r\n    {0x1.b5e7e08ca3a90p+162, chars_format::general, 49, \"1.000000000000000076297698410918870032949649709466e+49\"},\r\n    {0x1.11b0ec57e6499p+166, chars_format::general, 50, \"99999999999999986860582406952576489172979654066176\"},\r\n    {0x1.11b0ec57e649ap+166, chars_format::general, 50, \"1.0000000000000000762976984109188700329496497094656e+50\"},\r\n    {0x1.561d276ddfdc0p+169, chars_format::general, 51, \"999999999999999993220948674361627976461708441944064\"},\r\n    {0x1.561d276ddfdc1p+169, chars_format::general, 51, \"1.00000000000000015937444814747611208943759097698714e+51\"},\r\n    {0x1.aba4714957d30p+172, chars_format::general, 52, \"9999999999999999932209486743616279764617084419440640\"},\r\n    {0x1.aba4714957d31p+172, chars_format::general, 52, \"1.000000000000000126143748252853215266842414469978522e+52\"},\r\n    {0x1.0b46c6cdd6e3ep+176, chars_format::general, 53, \"99999999999999999322094867436162797646170844194406400\"},\r\n    {0x1.0b46c6cdd6e3fp+176, chars_format::general, 53, \"1.0000000000000002058974279999481676410708380867991962e+53\"},\r\n    {0x1.4e1878814c9cdp+179, chars_format::general, 54, \"999999999999999908150356944127012110618056584002011136\"},\r\n    {0x1.4e1878814c9cep+179, chars_format::general, 54, \"1.00000000000000007829154040459624384230536029988611686e+54\"},\r\n    {0x1.a19e96a19fc40p+182, chars_format::general, 55, \"9999999999999998741221202520331657642805958408251899904\"},\r\n    {0x1.a19e96a19fc41p+182, chars_format::general, 55, \"1.000000000000000010235067020408551149630438813532474573e+55\"},\r\n    {0x1.05031e2503da8p+186, chars_format::general, 56, \"99999999999999987412212025203316576428059584082518999040\"},\r\n    {0x1.05031e2503da9p+186, chars_format::general, 56,\r\n        \"1.0000000000000000919028350814337823808403445971568453222e+56\"},\r\n    {0x1.4643e5ae44d12p+189, chars_format::general, 57, \"999999999999999874122120252033165764280595840825189990400\"},\r\n    {0x1.4643e5ae44d13p+189, chars_format::general, 57,\r\n        \"1.00000000000000004834669211555365905752839484589051425587e+57\"},\r\n    {0x1.97d4df19d6057p+192, chars_format::general, 58, \"9999999999999999438119489974413630815797154428513196965888\"},\r\n    {0x1.97d4df19d6058p+192, chars_format::general, 58,\r\n        \"1.000000000000000083191606488257757716177954646903579108966e+58\"},\r\n    {0x1.fdca16e04b86dp+195, chars_format::general, 59, \"99999999999999997168788049560464200849936328366177157906432\"},\r\n    {0x1.fdca16e04b86ep+195, chars_format::general, 59,\r\n        \"1.0000000000000000831916064882577577161779546469035791089664e+59\"},\r\n    {0x1.3e9e4e4c2f344p+199, chars_format::general, 60, \"999999999999999949387135297074018866963645011013410073083904\"},\r\n    {0x1.3e9e4e4c2f345p+199, chars_format::general, 60,\r\n        \"1.00000000000000012779309688531900399924939119220030212092723e+60\"},\r\n    {0x1.8e45e1df3b015p+202, chars_format::general, 61,\r\n        \"9999999999999999493871352970740188669636450110134100730839040\"},\r\n    {0x1.8e45e1df3b016p+202, chars_format::general, 61,\r\n        \"1.000000000000000092111904567670006972792241955962923711358566e+61\"},\r\n    {0x1.f1d75a5709c1ap+205, chars_format::general, 62,\r\n        \"99999999999999992084218144295482124579792562202350734542897152\"},\r\n    {0x1.f1d75a5709c1bp+205, chars_format::general, 62,\r\n        \"1.0000000000000000350219968594316117304608031779831182560487014e+62\"},\r\n    {0x1.3726987666190p+209, chars_format::general, 63,\r\n        \"999999999999999875170255276364105051932774599639662981181079552\"},\r\n    {0x1.3726987666191p+209, chars_format::general, 63,\r\n        \"1.00000000000000005785795994272696982739337868917504043817264742e+63\"},\r\n    {0x1.84f03e93ff9f4p+212, chars_format::general, 64,\r\n        \"9999999999999998751702552763641050519327745996396629811810795520\"},\r\n    {0x1.84f03e93ff9f5p+212, chars_format::general, 64,\r\n        \"1.00000000000000002132041900945439687230125787126796494677433385e+64\"},\r\n    {0x1.e62c4e38ff872p+215, chars_format::general, 65,\r\n        \"99999999999999999209038626283633850822756121694230455365568299008\"},\r\n    {0x1.e62c4e38ff873p+215, chars_format::general, 65,\r\n        \"1.0000000000000001090105172493085719645223478342449461261302864282e+65\"},\r\n    {0x1.2fdbb0e39fb47p+219, chars_format::general, 66,\r\n        \"999999999999999945322333868247445125709646570021247924665841614848\"},\r\n    {0x1.2fdbb0e39fb48p+219, chars_format::general, 66,\r\n        \"1.00000000000000013239454344660301865578130515770547444062520711578e+66\"},\r\n    {0x1.7bd29d1c87a19p+222, chars_format::general, 67,\r\n        \"9999999999999999827367757839185598317239782875580932278577147150336\"},\r\n    {0x1.7bd29d1c87a1ap+222, chars_format::general, 67,\r\n        \"1.000000000000000132394543446603018655781305157705474440625207115776e+67\"},\r\n    {0x1.dac74463a989fp+225, chars_format::general, 68,\r\n        \"99999999999999995280522225138166806691251291352861698530421623488512\"},\r\n    {0x1.dac74463a98a0p+225, chars_format::general, 68,\r\n        \"1.000000000000000072531436381529235126158374409646521955518210155479e+68\"},\r\n    {0x1.28bc8abe49f63p+229, chars_format::general, 69,\r\n        \"999999999999999880969493773293127831364996015857874003175819882528768\"},\r\n    {0x1.28bc8abe49f64p+229, chars_format::general, 69,\r\n        \"1.00000000000000007253143638152923512615837440964652195551821015547904e+69\"},\r\n    {0x1.72ebad6ddc73cp+232, chars_format::general, 70,\r\n        \"9999999999999999192818822949403492903236716946156035936442979371188224\"},\r\n    {0x1.72ebad6ddc73dp+232, chars_format::general, 70,\r\n        \"1.00000000000000007253143638152923512615837440964652195551821015547904e+70\"},\r\n    {0x1.cfa698c95390bp+235, chars_format::general, 71,\r\n        \"99999999999999991928188229494034929032367169461560359364429793711882240\"},\r\n    {0x1.cfa698c95390cp+235, chars_format::general, 71,\r\n        \"1.0000000000000000418815255642114579589914338666403382831434277118069965e+71\"},\r\n    {0x1.21c81f7dd43a7p+239, chars_format::general, 72,\r\n        \"999999999999999943801810948794571024057224129020550531544123892056457216\"},\r\n    {0x1.21c81f7dd43a8p+239, chars_format::general, 72,\r\n        \"1.00000000000000013996124017962834489392564360426012603474273153155753574e+72\"},\r\n    {0x1.6a3a275d49491p+242, chars_format::general, 73,\r\n        \"9999999999999999830336967949613257980309080240684656321838454199566729216\"},\r\n    {0x1.6a3a275d49492p+242, chars_format::general, 73,\r\n        \"1.000000000000000139961240179628344893925643604260126034742731531557535744e+73\"},\r\n    {0x1.c4c8b1349b9b5p+245, chars_format::general, 74,\r\n        \"99999999999999995164818811802792197885196090803013355167206819763650035712\"},\r\n    {0x1.c4c8b1349b9b6p+245, chars_format::general, 74,\r\n        \"1.000000000000000077190222825761537255567749372183461873719177086917190615e+74\"},\r\n    {0x1.1afd6ec0e1411p+249, chars_format::general, 75,\r\n        \"999999999999999926539781176481198923508803215199467887262646419780362305536\"},\r\n    {0x1.1afd6ec0e1412p+249, chars_format::general, 75,\r\n        \"1.00000000000000012740703670885498336625406475784479320253802064262946671821e+75\"},\r\n    {0x1.61bcca7119915p+252, chars_format::general, 76,\r\n        \"9999999999999998863663300700064420349597509066704028242075715752105414230016\"},\r\n    {0x1.61bcca7119916p+252, chars_format::general, 76,\r\n        \"1.000000000000000047060134495905469589155960140786663076427870953489824953139e+76\"},\r\n    {0x1.ba2bfd0d5ff5bp+255, chars_format::general, 77,\r\n        \"99999999999999998278261272554585856747747644714015897553975120217811154108416\"},\r\n    {0x1.ba2bfd0d5ff5cp+255, chars_format::general, 77,\r\n        \"1.0000000000000001113376562662650806108344438344331671773159907048015383651942e+77\"},\r\n    {0x1.145b7e285bf98p+259, chars_format::general, 78,\r\n        \"999999999999999802805551768538947706777722104929947493053015898505313987330048\"},\r\n    {0x1.145b7e285bf99p+259, chars_format::general, 78,\r\n        \"1.00000000000000000849362143368970297614886992459876061589499910270279690590618e+78\"},\r\n    {0x1.59725db272f7fp+262, chars_format::general, 79,\r\n        \"9999999999999999673560075006595519222746403606649979913266024618633003221909504\"},\r\n    {0x1.59725db272f80p+262, chars_format::general, 79,\r\n        \"1.000000000000000131906463232780156137771558616400048489600189025221286657051853e+79\"},\r\n    {0x1.afcef51f0fb5ep+265, chars_format::general, 80,\r\n        \"99999999999999986862573406138718939297648940722396769236245052384850852127440896\"},\r\n    {0x1.afcef51f0fb5fp+265, chars_format::general, 80,\r\n        \"1.0000000000000000002660986470836727653740240118120080909813197745348975891631309e+80\"},\r\n    {0x1.0de1593369d1bp+269, chars_format::general, 81,\r\n        \"999999999999999921281879895665782741935503249059183851809998224123064148429897728\"},\r\n    {0x1.0de1593369d1cp+269, chars_format::general, 81,\r\n        \"1.0000000000000001319064632327801561377715586164000484896001890252212866570518528e+81\"},\r\n    {0x1.5159af8044462p+272, chars_format::general, 82,\r\n        \"9999999999999999634067965630886574211027143225273567793680363843427086501542887424\"},\r\n    {0x1.5159af8044463p+272, chars_format::general, 82,\r\n        \"1.0000000000000001319064632327801561377715586164000484896001890252212866570518528e+82\"},\r\n    {0x1.a5b01b605557ap+275, chars_format::general, 83,\r\n        \"99999999999999989600692989521205793443517660497828009527517532799127744739526311936\"},\r\n    {0x1.a5b01b605557bp+275, chars_format::general, 83,\r\n        \"1.0000000000000000308066632309652569077702520400764334634608974406941398529133143654e+83\"},\r\n    {0x1.078e111c3556cp+279, chars_format::general, 84,\r\n        \"999999999999999842087036560910778345101146430939018748000886482910132485188042620928\"},\r\n    {0x1.078e111c3556dp+279, chars_format::general, 84,\r\n        \"1.00000000000000005776660989811589670243726712709606413709804186323471233401692461466e+84\"},\r\n    {0x1.4971956342ac7p+282, chars_format::general, 85,\r\n        \"9999999999999998420870365609107783451011464309390187480008864829101324851880426209280\"},\r\n    {0x1.4971956342ac8p+282, chars_format::general, 85,\r\n        \"1.00000000000000001463069523067487303097004298786465505927861078716979636425114821591e+85\"},\r\n    {0x1.9bcdfabc13579p+285, chars_format::general, 86,\r\n        \"99999999999999987659576829486359728227492574232414601025643134376206526100066373992448\"},\r\n    {0x1.9bcdfabc1357ap+285, chars_format::general, 86,\r\n        \"1.0000000000000000146306952306748730309700429878646550592786107871697963642511482159104e+86\"},\r\n    {0x1.0160bcb58c16cp+289, chars_format::general, 87,\r\n        \"999999999999999959416724456350362731491996089648451439669739009806703922950954425516032\"},\r\n    {0x1.0160bcb58c16dp+289, chars_format::general, 87,\r\n        \"1.0000000000000001802726075536484039294041836825132659181052261192590736881517295870935e+87\"},\r\n    {0x1.41b8ebe2ef1c7p+292, chars_format::general, 88,\r\n        \"9999999999999999594167244563503627314919960896484514396697390098067039229509544255160320\"},\r\n    {0x1.41b8ebe2ef1c8p+292, chars_format::general, 88,\r\n        \"1.00000000000000013610143093418879568982174616394030302241812869736859973511157455477801e+88\"},\r\n    {0x1.922726dbaae39p+295, chars_format::general, 89,\r\n        \"99999999999999999475366575191804932315794610450682175621941694731908308538307845136842752\"},\r\n    {0x1.922726dbaae3ap+295, chars_format::general, 89,\r\n        \"1.0000000000000001361014309341887956898217461639403030224181286973685997351115745547780096e+89\"},\r\n    {0x1.f6b0f092959c7p+298, chars_format::general, 90,\r\n        \"999999999999999966484112715463900049825186092620125502979674597309179755437379230686511104\"},\r\n    {0x1.f6b0f092959c8p+298, chars_format::general, 90,\r\n        \"1.00000000000000007956232486128049714315622614016691051593864399734879307522017611341417677e+90\"},\r\n    {0x1.3a2e965b9d81cp+302, chars_format::general, 91,\r\n        \"9999999999999998986371854279739417938265620640920544952042929572854117635677011010499117056\"},\r\n    {0x1.3a2e965b9d81dp+302, chars_format::general, 91,\r\n        \"1.000000000000000079562324861280497143156226140166910515938643997348793075220176113414176768e+91\"},\r\n    {0x1.88ba3bf284e23p+305, chars_format::general, 92,\r\n        \"99999999999999989863718542797394179382656206409205449520429295728541176356770110104991170560\"},\r\n    {0x1.88ba3bf284e24p+305, chars_format::general, 92,\r\n        \"1.0000000000000000433772969746191860732902933249519393117917737893361168128896811109413237555e+92\"},\r\n    {0x1.eae8caef261acp+308, chars_format::general, 93,\r\n        \"999999999999999927585207737302990649719308316264031458521789123695552773432097103028194115584\"},\r\n    {0x1.eae8caef261adp+308, chars_format::general, 93,\r\n        \"1.00000000000000004337729697461918607329029332495193931179177378933611681288968111094132375552e+93\"},\r\n    {0x1.32d17ed577d0bp+312, chars_format::general, 94,\r\n        \"9999999999999998349515363474500343108625203093137051759058013911831015418660298966976904036352\"},\r\n    {0x1.32d17ed577d0cp+312, chars_format::general, 94,\r\n        \"1.000000000000000020218879127155946988576096323214357741137776856208004004998164309358697827533e+94\"},\r\n    {0x1.7f85de8ad5c4ep+315, chars_format::general, 95,\r\n        \"99999999999999987200500490339121684640523551209383568895219648418808203449245677922989188841472\"},\r\n    {0x1.7f85de8ad5c4fp+315, chars_format::general, 95,\r\n        \"1.0000000000000000202188791271559469885760963232143577411377768562080040049981643093586978275328e+95\"},\r\n    {0x1.df67562d8b362p+318, chars_format::general, 96,\r\n        \"999999999999999931290554592897108903273579836542044509826428632996050822694739791281414264061952\"},\r\n    {0x1.df67562d8b363p+318, chars_format::general, 96,\r\n        \"1.00000000000000004986165397190889301701026848543846215157489293061198839909930581538445901535642e+96\"},\r\n    {0x1.2ba095dc7701dp+322, chars_format::general, 97,\r\n        \"9999999999999998838621148412923952577789043769834774531270429139496757921329133816401963635441664\"},\r\n    {0x1.2ba095dc7701ep+322, chars_format::general, 97,\r\n        \"1.000000000000000073575873847711249839757606215217745679924585790135175914380219020205067965615309e+97\"},\r\n    {0x1.7688bb5394c25p+325, chars_format::general, 98,\r\n        \"99999999999999999769037024514370800696612547992403838920556863966097586548129676477911932478685184\"},\r\n    {0x1.7688bb5394c26p+325, chars_format::general, 98,\r\n        \"1.0000000000000001494613774502787916725490869505114529706436029406093759632791412756310166064437658e+98\"},\r\n    {0x1.d42aea2879f2ep+328, chars_format::general, 99,\r\n        \"999999999999999967336168804116691273849533185806555472917961779471295845921727862608739868455469056\"},\r\n    {0x1.d42aea2879f2fp+328, chars_format::general, 99,\r\n        \"1.00000000000000008875297456822475820631590236227648713806838922023001592416000347129025769378100019e+99\"},\r\n    {0x1.249ad2594c37cp+332, chars_format::general, 100,\r\n        \"9999999999999998216360018871870109548898901740426374747374488505608317520357971321909184780648316928\"},\r\n    {0x1.249ad2594c37dp+332, chars_format::general, 100,\r\n        \"1.00000000000000001590289110975991804683608085639452813897813275577478387721703810608134699858568151e+100\"},\r\n    {0x1.6dc186ef9f45cp+335, chars_format::general, 101,\r\n        \"99999999999999997704951326524533662844684271992415000612999597473199345218078991130326129448151154688\"},\r\n    {0x1.6dc186ef9f45dp+335, chars_format::general, 101,\r\n        \"1.000000000000000132463024643303662302003795265805662537522543098903155152325782690415604110898191401e+101\"},\r\n    {0x1.c931e8ab87173p+338, chars_format::general, 102,\r\n        \"999999999999999977049513265245336628446842719924150006129995974731993452180789911303261294481511546880\"},\r\n    {0x1.c931e8ab87174p+338, chars_format::general, 102,\r\n        \"1.00000000000000010138032236769199716729240475662936003124403367406892281229678413459313554761485543014e+102\"},\r\n    {0x1.1dbf316b346e7p+342, chars_format::general, 103,\r\n        \"9999999999999998029863805218200118740630558685368559709703431956602923480183979986974373400948301103104\"},\r\n    {0x1.1dbf316b346e8p+342, chars_format::general, 103,\r\n        \"1.000000000000000001915675085734668736215955127265192011152803514599379324203988755961236145108180323533e+\"\r\n        \"103\"},\r\n    {0x1.652efdc6018a1p+345, chars_format::general, 104,\r\n        \"99999999999999984277223943460294324649363572028252317900683525944810974325551615015019710109750015295488\"},\r\n    {0x1.652efdc6018a2p+345, chars_format::general, 104,\r\n        \"1.0000000000000000019156750857346687362159551272651920111528035145993793242039887559612361451081803235328e+\"\r\n        \"104\"},\r\n    {0x1.be7abd3781ecap+348, chars_format::general, 105,\r\n        \"999999999999999938258300825281978540327027364472124478294416212538871491824599713636820527503908255301632\"},\r\n    {0x1.be7abd3781ecbp+348, chars_format::general, 105,\r\n        \"1.00000000000000006557304934618735893210488289005825954401119081665988715658337779828565176271245239176397e+\"\r\n        \"105\"},\r\n    {0x1.170cb642b133ep+352, chars_format::general, 106,\r\n        \"9999999999999998873324014169198263836158851542376704520077063708904652259210884797772880334204906007166976\"},\r\n    {0x1.170cb642b133fp+352, chars_format::general, 106,\r\n        \"1.000000000000000091035999050368435010460453995175486557154545737484090289535133415215418009754161219056435e+\"\r\n        \"106\"},\r\n    {0x1.5ccfe3d35d80ep+355, chars_format::general, 107,\r\n        \"99999999999999996881384047029926983435371269061279689406644211752791525136670645395254002395395884805259264\"},\r\n    {0x1.5ccfe3d35d80fp+355, chars_format::general, 107,\r\n        \"1.0000000000000001317767185770581567358293677633630497781839136108028153022579424023030440050208953427243827e+\"\r\n        \"107\"},\r\n    {0x1.b403dcc834e11p+358, chars_format::general, 108,\r\n        \"999999999999999903628689227595715073763450661512695740419453520217955231010212074612338431527184250183876608\"},\r\n    {0x1.b403dcc834e12p+358, chars_format::general, 108,\r\n        \"1.\"\r\n        \"00000000000000003399899171300282459494397471971289804771343071483787527172320083329274161638073344592130867e+\"\r\n        \"108\"},\r\n    {0x1.108269fd210cbp+362, chars_format::general, 109,\r\n        \"999999999999999981850870718839980786471765096432817124795839836989907255438005329820580342439313767626335846\"\r\n        \"4\"},\r\n    {0x1.108269fd210ccp+362, chars_format::general, 109,\r\n        \"1.\"\r\n        \"000000000000000190443354695491356020360603589553140816466203348381779320578787343709225438204992480806227149e+\"\r\n        \"109\"},\r\n    {0x1.54a3047c694fdp+365, chars_format::general, 110,\r\n        \"9999999999999998566953803328491556461384620005606229097936217301547840163535361214873932849799065397184010649\"\r\n        \"6\"},\r\n    {0x1.54a3047c694fep+365, chars_format::general, 110,\r\n        \"1.\"\r\n        \"0000000000000000235693675141702558332495327950568818631299125392682816684661617325983093615924495102623141069e\"\r\n        \"+110\"},\r\n    {0x1.a9cbc59b83a3dp+368, chars_format::general, 111,\r\n        \"99999999999999995681977264164181575840510447725837828179539621562288260762111148815394293094743232204474889011\"\r\n        \"2\"},\r\n    {0x1.a9cbc59b83a3ep+368, chars_format::general, 111,\r\n        \"1.\"\r\n        \"00000000000000009031896238669869590809396111285538544446442886291368072931121197704267579223746669847987932365\"\r\n        \"e+111\"},\r\n    {0x1.0a1f5b8132466p+372, chars_format::general, 112,\r\n        \"99999999999999993011993469263043972846733315013897684926158968616472298328309139037619635868942544675772280340\"\r\n        \"48\"},\r\n    {0x1.0a1f5b8132467p+372, chars_format::general, 112,\r\n        \"1.\"\r\n        \"00000000000000014371863828472144796796950376709418830953204192182999997798725217259816893675348044905393149706\"\r\n        \"2e+112\"},\r\n    {0x1.4ca732617ed7fp+375, chars_format::general, 113,\r\n        \"99999999999999984468045325579403643266646490335689226515340879189861218540142707748740732746380344583923932594\"\r\n        \"176\"},\r\n    {0x1.4ca732617ed80p+375, chars_format::general, 113,\r\n        \"1.\"\r\n        \"00000000000000001555941612946684302426820139692106143336977058043083378116475570326498538991504744767620628086\"\r\n        \"78e+113\"},\r\n    {0x1.9fd0fef9de8dfp+378, chars_format::general, 114,\r\n        \"99999999999999987885624583052859775098681220206972609879668114960505650455409280264292293995405224620663271692\"\r\n        \"6976\"},\r\n    {0x1.9fd0fef9de8e0p+378, chars_format::general, 114,\r\n        \"1.\"\r\n        \"00000000000000001555941612946684302426820139692106143336977058043083378116475570326498538991504744767620628086\"\r\n        \"784e+114\"},\r\n    {0x1.03e29f5c2b18bp+382, chars_format::general, 115,\r\n        \"99999999999999979683434365116565058701797868515892489805282749110959013858769506226968546997745512532488857856\"\r\n        \"24576\"},\r\n    {0x1.03e29f5c2b18cp+382, chars_format::general, 115,\r\n        \"1.\"\r\n        \"00000000000000001555941612946684302426820139692106143336977058043083378116475570326498538991504744767620628086\"\r\n        \"784e+115\"},\r\n    {0x1.44db473335deep+385, chars_format::general, 116,\r\n        \"99999999999999984057935814682588907446802322751135220511621610897383886710310719046874545396497358979515211902\"\r\n        \"353408\"},\r\n    {0x1.44db473335defp+385, chars_format::general, 116,\r\n        \"1.\"\r\n        \"00000000000000001555941612946684302426820139692106143336977058043083378116475570326498538991504744767620628086\"\r\n        \"784e+116\"},\r\n    {0x1.961219000356ap+388, chars_format::general, 117,\r\n        \"99999999999999991057138133988227065438809449527523589641763789755663683272776659558724142834500313294757378376\"\r\n        \"1256448\"},\r\n    {0x1.961219000356bp+388, chars_format::general, 117,\r\n        \"1.\"\r\n        \"00000000000000005055542772599503381422823703080300327902048147472223276397708540582423337710506221925241711323\"\r\n        \"670118e+117\"},\r\n    {0x1.fb969f40042c5p+391, chars_format::general, 118,\r\n        \"99999999999999996656499989432737591832415150948634284945877532842287520522749411968203820784902676746951111555\"\r\n        \"14343424\"},\r\n    {0x1.fb969f40042c6p+391, chars_format::general, 118,\r\n        \"1.\"\r\n        \"00000000000000007855223700321758644619626553790855675554105019015535195022694916787163176685707403651338577913\"\r\n        \"1790131e+118\"},\r\n    {0x1.3d3e2388029bbp+395, chars_format::general, 119,\r\n        \"99999999999999994416755247254933381274972870380190006824232035607637985622760311004411949604741731366073618283\"\r\n        \"536318464\"},\r\n    {0x1.3d3e2388029bcp+395, chars_format::general, 119,\r\n        \"1.\"\r\n        \"00000000000000012334713184677367065734511114927744231797396013484834264822673118714746919046029294413093564456\"\r\n        \"39324467e+119\"},\r\n    {0x1.8c8dac6a0342ap+398, chars_format::general, 120,\r\n        \"99999999999999998000346834739420118166880519289700851818864831183077241462742872546478943492999243975477607518\"\r\n        \"1077037056\"},\r\n    {0x1.8c8dac6a0342bp+398, chars_format::general, 120,\r\n        \"1.\"\r\n        \"00000000000000012334713184677367065734511114927744231797396013484834264822673118714746919046029294413093564456\"\r\n        \"393244672e+120\"},\r\n    {0x1.efb1178484134p+401, chars_format::general, 121,\r\n        \"99999999999999992266600294764241339139828281034483499827452358262374432118770774079171753271787223800431224742\"\r\n        \"79348731904\"},\r\n    {0x1.efb1178484135p+401, chars_format::general, 121,\r\n        \"1.\"\r\n        \"00000000000000003734093374714598897193932757544918203810277304103780050806714971013786133714211264150523990293\"\r\n        \"4219200922e+121\"},\r\n    {0x1.35ceaeb2d28c0p+405, chars_format::general, 122,\r\n        \"99999999999999983092605830803955292696544699826135736641192401589249937168415416531480248917847991520357012302\"\r\n        \"290741100544\"},\r\n    {0x1.35ceaeb2d28c1p+405, chars_format::general, 122,\r\n        \"1.\"\r\n        \"00000000000000001440594758724527385583111862242831263013712314935498927069126131626863257625726456080505437183\"\r\n        \"29623353754e+122\"},\r\n    {0x1.83425a5f872f1p+408, chars_format::general, 123,\r\n        \"99999999999999997770996973140412967005798429759492157739208332266249129088983988607786655884150763168475752207\"\r\n        \"0951350501376\"},\r\n    {0x1.83425a5f872f2p+408, chars_format::general, 123,\r\n        \"1.\"\r\n        \"00000000000000012449388115476870641315052159692848578837224262943248321009552560684093062850453534816594492111\"\r\n        \"899528999731e+123\"},\r\n    {0x1.e412f0f768fadp+411, chars_format::general, 124,\r\n        \"99999999999999994835318744673121432143947683772820873519605146130849290704870274192525374490890208838852004226\"\r\n        \"13425626021888\"},\r\n    {0x1.e412f0f768faep+411, chars_format::general, 124,\r\n        \"1.\"\r\n        \"00000000000000006578031658542287571591350667719506010398017890672448644241325131853570500063932426157346996149\"\r\n        \"9777714198938e+124\"},\r\n    {0x1.2e8bd69aa19ccp+415, chars_format::general, 125,\r\n        \"99999999999999992486776161899288204254467086983483846143922597222529419997579302660316349376281765375153005841\"\r\n        \"365553228283904\"},\r\n    {0x1.2e8bd69aa19cdp+415, chars_format::general, 125,\r\n        \"1.\"\r\n        \"00000000000000011275116824089954027370311861298180065149382988489088385655907074917988550293149313084744992919\"\r\n        \"51517748376371e+125\"},\r\n    {0x1.7a2ecc414a03fp+418, chars_format::general, 126,\r\n        \"99999999999999992486776161899288204254467086983483846143922597222529419997579302660316349376281765375153005841\"\r\n        \"3655532282839040\"},\r\n    {0x1.7a2ecc414a040p+418, chars_format::general, 126,\r\n        \"1.\"\r\n        \"00000000000000007517448691651820862747142906435240821348290910235776592524241520466454110109775803542826595503\"\r\n        \"88525263266775e+126\"},\r\n    {0x1.d8ba7f519c84fp+421, chars_format::general, 127,\r\n        \"99999999999999995492910667849794735953002250873835241184796259825178854502911746221543901522980573008687723773\"\r\n        \"86949310916067328\"},\r\n    {0x1.d8ba7f519c850p+421, chars_format::general, 127,\r\n        \"1.\"\r\n        \"00000000000000007517448691651820862747142906435240821348290910235776592524241520466454110109775803542826595503\"\r\n        \"8852526326677504e+127\"},\r\n    {0x1.27748f9301d31p+425, chars_format::general, 128,\r\n        \"99999999999999988278187853568579059876517857536991893086699469578820211690113881674597776370903434688204400735\"\r\n        \"860037395056427008\"},\r\n    {0x1.27748f9301d32p+425, chars_format::general, 128,\r\n        \"1.\"\r\n        \"00000000000000007517448691651820862747142906435240821348290910235776592524241520466454110109775803542826595503\"\r\n        \"8852526326677504e+128\"},\r\n    {0x1.7151b377c247ep+428, chars_format::general, 129,\r\n        \"99999999999999999821744356418524141598892886875941250043654333972994040190590464949711576614226856000977717596\"\r\n        \"6751665376232210432\"},\r\n    {0x1.7151b377c247fp+428, chars_format::general, 129,\r\n        \"1.\"\r\n        \"00000000000000015213153026885117583895392925994540392652927486498559144857892575983196643605324751084675473411\"\r\n        \"095338727712279757e+129\"},\r\n    {0x1.cda62055b2d9dp+431, chars_format::general, 130,\r\n        \"99999999999999993665180888231886764680292871228501592999945072962767998323669620536317549817787697967498615270\"\r\n        \"90709766158759755776\"},\r\n    {0x1.cda62055b2d9ep+431, chars_format::general, 130,\r\n        \"1.\"\r\n        \"00000000000000005978307824605161518517492902523380907087363594983220082057511309363105603410666014034456819922\"\r\n        \"4432354136588445286e+130\"},\r\n    {0x1.2087d4358fc82p+435, chars_format::general, 131,\r\n        \"99999999999999991202555500957231813912852864969525730182461368558677581576901282770959939099212034754106974340\"\r\n        \"599870111173348163584\"},\r\n    {0x1.2087d4358fc83p+435, chars_format::general, 131,\r\n        \"1.\"\r\n        \"00000000000000010903558599154471420052372915041332632722331003791400915551047984893820824847817340461240101783\"\r\n        \"05769051448734331699e+131\"},\r\n    {0x1.68a9c942f3ba3p+438, chars_format::general, 132,\r\n        \"99999999999999999082956740236127656368660884998248491198409222651766915166559963620104293398654157036960225317\"\r\n        \"5829982724989462249472\"},\r\n    {0x1.68a9c942f3ba4p+438, chars_format::general, 132,\r\n        \"1.\"\r\n        \"00000000000000014843759218793919341280276925055694013230304930837945582345877325318393001997538401602666727271\"\r\n        \"549254595150142347674e+132\"},\r\n    {0x1.c2d43b93b0a8bp+441, chars_format::general, 133,\r\n        \"99999999999999989626475253101452645421691260963781177979271797740059714858969546601131068239323610297536324145\"\r\n        \"20324447890822855131136\"},\r\n    {0x1.c2d43b93b0a8cp+441, chars_format::general, 133,\r\n        \"1.\"\r\n        \"00000000000000002235117235947685993350984093009737595604788364289002648602423435959762035118431005950101525708\"\r\n        \"3762495370291854494925e+133\"},\r\n    {0x1.19c4a53c4e697p+445, chars_format::general, 134,\r\n        \"99999999999999992148203649670699315007549827372972461504375111049848301607660324472857261615145089428049364457\"\r\n        \"837845490532419930947584\"},\r\n    {0x1.19c4a53c4e698p+445, chars_format::general, 134,\r\n        \"1.\"\r\n        \"00000000000000012322030822224672671694418358646502729705201617528156995597186547446666808621716922472153686958\"\r\n        \"91465358352595096803738e+134\"},\r\n    {0x1.6035ce8b6203dp+448, chars_format::general, 135,\r\n        \"99999999999999996182969084181493986344923533627678515144540412345510040405565569067619171016459456036870228958\"\r\n        \"0532071091311261383655424\"},\r\n    {0x1.6035ce8b6203ep+448, chars_format::general, 135,\r\n        \"1.\"\r\n        \"00000000000000012322030822224672671694418358646502729705201617528156995597186547446666808621716922472153686958\"\r\n        \"914653583525950968037376e+135\"},\r\n    {0x1.b843422e3a84cp+451, chars_format::general, 136,\r\n        \"99999999999999992955156736572858249275024568623913672232408171308980649367241373391809643495407962749813537357\"\r\n        \"88091781425216117243117568\"},\r\n    {0x1.b843422e3a84dp+451, chars_format::general, 136,\r\n        \"1.\"\r\n        \"00000000000000005866406127007401197554620428638973043880937135455098213520538156095047753579613935898040303758\"\r\n        \"5700749937680210361686426e+136\"},\r\n    {0x1.132a095ce492fp+455, chars_format::general, 137,\r\n        \"99999999999999982626157224225223890651347880611866174913584999992086598044603947229219155428043184231232124237\"\r\n        \"329592070639473281441202176\"},\r\n    {0x1.132a095ce4930p+455, chars_format::general, 137,\r\n        \"1.\"\r\n        \"00000000000000003284156248920492607898701256635961169551231342625874700689878799554400131562772741268394950478\"\r\n        \"43224355786484906342114918e+137\"},\r\n    {0x1.57f48bb41db7bp+458, chars_format::general, 138,\r\n        \"99999999999999986757757029164277634100818555816685173841114268518844218573658917694255350654989095638664689485\"\r\n        \"5501223680845484378371915776\"},\r\n    {0x1.57f48bb41db7cp+458, chars_format::general, 138,\r\n        \"1.\"\r\n        \"00000000000000003284156248920492607898701256635961169551231342625874700689878799554400131562772741268394950478\"\r\n        \"432243557864849063421149184e+138\"},\r\n    {0x1.adf1aea12525ap+461, chars_format::general, 139,\r\n        \"99999999999999990063036873115520628860395095980540372983137683340250314996902894066284306836545824764610741684\"\r\n        \"12654660604060856295398309888\"},\r\n    {0x1.adf1aea12525bp+461, chars_format::general, 139,\r\n        \"1.\"\r\n        \"00000000000000003284156248920492607898701256635961169551231342625874700689878799554400131562772741268394950478\"\r\n        \"432243557864849063421149184e+139\"},\r\n    {0x1.0cb70d24b7378p+465, chars_format::general, 140,\r\n        \"99999999999999984774589122793531837245072631718372054355900219626000560719712531871037976946055058163097058166\"\r\n        \"404267825310912362767116664832\"},\r\n    {0x1.0cb70d24b7379p+465, chars_format::general, 140,\r\n        \"1.\"\r\n        \"00000000000000005928380124081487003706362488767045328864850074482999577828473980652023296508018124569151792237\"\r\n        \"29338294822969716351458240102e+140\"},\r\n    {0x1.4fe4d06de5056p+468, chars_format::general, 141,\r\n        \"99999999999999984774589122793531837245072631718372054355900219626000560719712531871037976946055058163097058166\"\r\n        \"4042678253109123627671166648320\"},\r\n    {0x1.4fe4d06de5057p+468, chars_format::general, 141,\r\n        \"1.\"\r\n        \"00000000000000001697621923823895970414104517357310673963060103511599774406721690895826232595625511287940845423\"\r\n        \"115559923645940203365089253786e+141\"},\r\n    {0x1.a3de04895e46cp+471, chars_format::general, 142,\r\n        \"99999999999999991543802243205677490512685385973947502198764173180240246194516195480953279205883239413034573069\"\r\n        \"08878466464492349900630570041344\"},\r\n    {0x1.a3de04895e46dp+471, chars_format::general, 142,\r\n        \"1.\"\r\n        \"00000000000000005082228484029968797047910894485098397884492080288719617144123522700783883725539601912909602874\"\r\n        \"4578183433129457714846837715763e+142\"},\r\n    {0x1.066ac2d5daec3p+475, chars_format::general, 143,\r\n        \"99999999999999980713061250546244445284504979165026785650181847493456749434830333705088795590158149413134549224\"\r\n        \"793557721710505681023603243483136\"},\r\n    {0x1.066ac2d5daec4p+475, chars_format::general, 143,\r\n        \"1.\"\r\n        \"00000000000000002374543235865110535740865792782868218747346498867023742954202057256817762821608329412934596913\"\r\n        \"38401160757934131698900815734374e+143\"},\r\n    {0x1.4805738b51a74p+478, chars_format::general, 144,\r\n        \"99999999999999985045357647610017663375777141888595072269614777768170148138704678415434589036448185413094558762\"\r\n        \"5116484988842728082166842262552576\"},\r\n    {0x1.4805738b51a75p+478, chars_format::general, 144,\r\n        \"1.\"\r\n        \"00000000000000002374543235865110535740865792782868218747346498867023742954202057256817762821608329412934596913\"\r\n        \"384011607579341316989008157343744e+144\"},\r\n    {0x1.9a06d06e26112p+481, chars_format::general, 145,\r\n        \"99999999999999998908706118214091961267848062604013589451800154647253023991102581488541128064576300612966589283\"\r\n        \"20953898584032761523454337112604672\"},\r\n    {0x1.9a06d06e26113p+481, chars_format::general, 145,\r\n        \"1.\"\r\n        \"00000000000000012772054588818166259159918983319432106633985531526335899843500484561647667092704415812838619803\"\r\n        \"9074294727963824222524025159968358e+145\"},\r\n    {0x1.00444244d7cabp+485, chars_format::general, 146,\r\n        \"99999999999999993363366729972462242111019694317846182578926003895619873650143420259298512453325054533017777074\"\r\n        \"930382791057905692427399713177731072\"},\r\n    {0x1.00444244d7cacp+485, chars_format::general, 146,\r\n        \"1.\"\r\n        \"00000000000000015544724282938981118738333167462515810070422606902152475013980065176268974898330038852813025908\"\r\n        \"04700757018759338365597434497099366e+146\"},\r\n    {0x1.405552d60dbd6p+488, chars_format::general, 147,\r\n        \"99999999999999997799638240565766017436482388946780108077225324496926393922910749242692604942326051396976826841\"\r\n        \"5537077468838432306731146395363835904\"},\r\n    {0x1.405552d60dbd7p+488, chars_format::general, 147,\r\n        \"1.\"\r\n        \"00000000000000015544724282938981118738333167462515810070422606902152475013980065176268974898330038852813025908\"\r\n        \"047007570187593383655974344970993664e+147\"},\r\n    {0x1.906aa78b912cbp+491, chars_format::general, 148,\r\n        \"99999999999999990701603823616479976915742077540485827279946411534835961486483022869262056959924456414642347214\"\r\n        \"95638781756234316947997075736253956096\"},\r\n    {0x1.906aa78b912ccp+491, chars_format::general, 148,\r\n        \"1.\"\r\n        \"00000000000000004897672657515052057957222700353074388874504237459016826359338475616123152924727646379311306468\"\r\n        \"1510276762053432918662585217102276198e+148\"},\r\n    {0x1.f485516e7577ep+494, chars_format::general, 149,\r\n        \"99999999999999993540817590396194393124038202103003539598857976719672134461054113418634276152885094407576139065\"\r\n        \"595315789290943193957228310232077172736\"},\r\n    {0x1.f485516e7577fp+494, chars_format::general, 149,\r\n        \"1.\"\r\n        \"00000000000000004897672657515052057957222700353074388874504237459016826359338475616123152924727646379311306468\"\r\n        \"15102767620534329186625852171022761984e+149\"},\r\n    {0x1.38d352e5096afp+498, chars_format::general, 150,\r\n        \"99999999999999998083559617243737459057312001403031879309116481015410011220367858297629826861622115196270206026\"\r\n        \"6176005440567032331208403948233373515776\"},\r\n    {0x1.38d352e5096b0p+498, chars_format::general, 150,\r\n        \"1.\"\r\n        \"00000000000000016254527724633909722790407198603145238150150498198361518257622837813612029696570198351046473870\"\r\n        \"706739563119743389775288733188378066944e+150\"},\r\n    {0x1.8708279e4bc5ap+501, chars_format::general, 151,\r\n        \"99999999999999987180978752809634100817454883082963864004496070705639106998014870588040505160653265303404445320\"\r\n        \"16411713261887913912817139180431292235776\"},\r\n    {0x1.8708279e4bc5bp+501, chars_format::general, 151,\r\n        \"1.\"\r\n        \"00000000000000001717753238721771911803931040843054551077323284452000312627818854200826267428611731827225459595\"\r\n        \"4354283478693112644517300624963454946509e+151\"},\r\n    {0x1.e8ca3185deb71p+504, chars_format::general, 152,\r\n        \"99999999999999992995688547174489225212045346187000138833626956204183589249936464033154810067836651912932851030\"\r\n        \"272641618719051989257594860081125951275008\"},\r\n    {0x1.e8ca3185deb72p+504, chars_format::general, 152,\r\n        \"1.\"\r\n        \"00000000000000004625108135904199474001226272395072688491888727201272553753779650923383419882203425131989662450\"\r\n        \"4896905909193976895164417966347520091095e+152\"},\r\n    {0x1.317e5ef3ab327p+508, chars_format::general, 153,\r\n        \"99999999999999999973340300412315374485553901911843668628584018802436967952242376167291975956456715844366937882\"\r\n        \"4028710020392594094129030220133015859757056\"},\r\n    {0x1.317e5ef3ab328p+508, chars_format::general, 153,\r\n        \"1.\"\r\n        \"00000000000000018580411642379851772548243383844759748081802852397779311158391475191657751659443552994857836154\"\r\n        \"750149357559812529827058120499103278510899e+153\"},\r\n    {0x1.7dddf6b095ff0p+511, chars_format::general, 154,\r\n        \"99999999999999988809097495231793535647940212752094020956652718645231562028552916752672510534664613554072398918\"\r\n        \"99450398872692753716440996292182057045458944\"},\r\n    {0x1.7dddf6b095ff1p+511, chars_format::general, 154,\r\n        \"1.\"\r\n        \"00000000000000003694754568805822654098091798298426884519227785521505436593472195972165131097054083274465117536\"\r\n        \"8723266731433700334957340417104619244827443e+154\"},\r\n    {0x1.dd55745cbb7ecp+514, chars_format::general, 155,\r\n        \"99999999999999988809097495231793535647940212752094020956652718645231562028552916752672510534664613554072398918\"\r\n        \"994503988726927537164409962921820570454589440\"},\r\n    {0x1.dd55745cbb7edp+514, chars_format::general, 155,\r\n        \"1.\"\r\n        \"00000000000000000717623154091016830408061481189160311806712772146250661680488340128266606984576189330386573813\"\r\n        \"29676213626008153422946922595273365367711334e+155\"},\r\n    {0x1.2a5568b9f52f4p+518, chars_format::general, 156,\r\n        \"99999999999999998335918022319172171456037227501747053636700761446046841750101255453147787694593874175123738834\"\r\n        \"4363105067534507348164573733465510370326085632\"},\r\n    {0x1.2a5568b9f52f5p+518, chars_format::general, 156,\r\n        \"1.\"\r\n        \"00000000000000017389559076493929443072231257001053118996796847047677401193197932854098342014452395417226418665\"\r\n        \"31992354280649713012055219419601197018864681e+156\"},\r\n    {0x1.74eac2e8727b1p+521, chars_format::general, 157,\r\n        \"99999999999999998335918022319172171456037227501747053636700761446046841750101255453147787694593874175123738834\"\r\n        \"43631050675345073481645737334655103703260856320\"},\r\n    {0x1.74eac2e8727b2p+521, chars_format::general, 157,\r\n        \"1.\"\r\n        \"00000000000000013578830865658977988748992451101191905924777629927351289304578597373908231150480691168805882699\"\r\n        \"1432009355958878510597332300261197835574391603e+157\"},\r\n    {0x1.d22573a28f19dp+524, chars_format::general, 158,\r\n        \"99999999999999995287335453651211007997446182781858083179085387749785952239205787068995699003416510776387310061\"\r\n        \"494932420984963311567802202010637287727642443776\"},\r\n    {0x1.d22573a28f19ep+524, chars_format::general, 158,\r\n        \"1.\"\r\n        \"00000000000000007481665728323055661831810361661413965009546882534829510282787660605604053768125964371333025153\"\r\n        \"26044476405891300456242288735429228494750692147e+158\"},\r\n    {0x1.2357684599702p+528, chars_format::general, 159,\r\n        \"99999999999999992848469398716842077230573347005946906812993088792777240630489412361674028050474620057398167043\"\r\n        \"1418299523701733729688780649419062882836695482368\"},\r\n    {0x1.2357684599703p+528, chars_format::general, 159,\r\n        \"1.\"\r\n        \"00000000000000012359397838191793523365556033213236317741731480448846933500220410020247395674009745809311311189\"\r\n        \"96664970128849288176027116149175428383545271255e+159\"},\r\n    {0x1.6c2d4256ffcc2p+531, chars_format::general, 160,\r\n        \"99999999999999985044098022926861498776580272523031142441497732130349363482597013298244681001060569756632909384\"\r\n        \"41190205280284556945232082632196709006295628251136\"},\r\n    {0x1.6c2d4256ffcc3p+531, chars_format::general, 160,\r\n        \"1.\"\r\n        \"00000000000000000652840774506822655684566421488862671184488445455205117778381811425103375099888670358163424701\"\r\n        \"8717578519375011764854353035618454865043828139622e+160\"},\r\n    {0x1.c73892ecbfbf3p+534, chars_format::general, 161,\r\n        \"99999999999999991287595123558845961539774732109363753938694017460291665200910932548988158640591809997245115511\"\r\n        \"395844372456707812265566617217918448639526895091712\"},\r\n    {0x1.c73892ecbfbf4p+534, chars_format::general, 161,\r\n        \"1.\"\r\n        \"00000000000000003774589324822814887066163651282028976933086588120176268637538771050475113919654290478469527765\"\r\n        \"36372901176443229789205819900982116579266812025242e+161\"},\r\n    {0x1.1c835bd3f7d78p+538, chars_format::general, 162,\r\n        \"99999999999999993784993963811639746645052515943896798537572531592268585888236500249285549696404306093489997962\"\r\n        \"1894213003182527093908649335762989920701551401238528\"},\r\n    {0x1.1c835bd3f7d79p+538, chars_format::general, 162,\r\n        \"1.\"\r\n        \"00000000000000013764184685833990027487274786620161155328600644648083951386841041851664678142904274863449057568\"\r\n        \"538036723210611886393251464443343339515181100380979e+162\"},\r\n    {0x1.63a432c8f5cd6p+541, chars_format::general, 163,\r\n        \"99999999999999993784993963811639746645052515943896798537572531592268585888236500249285549696404306093489997962\"\r\n        \"18942130031825270939086493357629899207015514012385280\"},\r\n    {0x1.63a432c8f5cd7p+541, chars_format::general, 163,\r\n        \"1.\"\r\n        \"00000000000000009768346541429519971318830332484908283970395022036920878287120133531188852453604281109457245647\"\r\n        \"2683136386321400509927741582699344700261759083295539e+163\"},\r\n    {0x1.bc8d3f7b3340bp+544, chars_format::general, 164,\r\n        \"99999999999999987391652932764487656775541389327492204364443535414407668928683046936524228593524316087103098888\"\r\n        \"157864364992697772750101243698844800887746832841572352\"},\r\n    {0x1.bc8d3f7b3340cp+544, chars_format::general, 164,\r\n        \"1.\"\r\n        \"00000000000000000178334994858791836514563642560301392710701527770129502847789953562046870799284296099876897036\"\r\n        \"22097823564380764603162862345375318325256344740613325e+164\"},\r\n    {0x1.15d847ad00087p+548, chars_format::general, 165,\r\n        \"99999999999999989948989345183348492723345839974054042033695133885552035712504428261628757034676312089657858517\"\r\n        \"7704871391229197474064067196498264773607101557544845312\"},\r\n    {0x1.15d847ad00088p+548, chars_format::general, 165,\r\n        \"1.\"\r\n        \"00000000000000010407680644534235180305781445146548743387707921654706969983075478862464984563892280110095935554\"\r\n        \"671469332164695544656850527257679889144416739057781965e+165\"},\r\n    {0x1.5b4e5998400a9p+551, chars_format::general, 166,\r\n        \"99999999999999994040727605053525830239832961008552982304497691439383022566618638381796002540519505693745473925\"\r\n        \"15068357773127490685649548117139715971745147241514401792\"},\r\n    {0x1.5b4e5998400aap+551, chars_format::general, 166,\r\n        \"1.\"\r\n        \"00000000000000010407680644534235180305781445146548743387707921654706969983075478862464984563892280110095935554\"\r\n        \"6714693321646955446568505272576798891444167390577819648e+166\"},\r\n    {0x1.b221effe500d3p+554, chars_format::general, 167,\r\n        \"99999999999999990767336997157383960226643264180953830087855645396318233083327270285662206135844950810475381599\"\r\n        \"246526426844590779296424471954140613832058419086616428544\"},\r\n    {0x1.b221effe500d4p+554, chars_format::general, 167,\r\n        \"1.\"\r\n        \"00000000000000003860899428741951440279402051491350438954423829568577391016492742670197391754543170343555750902\"\r\n        \"86315503039132728953670850882316679737363063240072678605e+167\"},\r\n    {0x1.0f5535fef2084p+558, chars_format::general, 168,\r\n        \"99999999999999993386049483474297456237195021643033151861169282230770064669960364762569243259584594717091455459\"\r\n        \"9698521475539380813444812793279458505403728617494385000448\"},\r\n    {0x1.0f5535fef2085p+558, chars_format::general, 168,\r\n        \"1.\"\r\n        \"00000000000000014335749374009605424321609081339667726047678376906384717363025120577825540249501745970020046345\"\r\n        \"756457913228716497728935738318387744206888403052015072051e+168\"},\r\n    {0x1.532a837eae8a5p+561, chars_format::general, 169,\r\n        \"99999999999999993386049483474297456237195021643033151861169282230770064669960364762569243259584594717091455459\"\r\n        \"96985214755393808134448127932794585054037286174943850004480\"},\r\n    {0x1.532a837eae8a6p+561, chars_format::general, 169,\r\n        \"1.\"\r\n        \"00000000000000010145809395902543830704726269400340811210376557971261786824412169414774280851518315719434328168\"\r\n        \"5991367600937608144520448465202993654735852947914997576499e+169\"},\r\n    {0x1.a7f5245e5a2cep+564, chars_format::general, 170,\r\n        \"99999999999999990034097500988648181343688772091571619991327827082671720239070003832128235741197850516622880918\"\r\n        \"243995225045973534722968565889475147553730375141026248523776\"},\r\n    {0x1.a7f5245e5a2cfp+564, chars_format::general, 170,\r\n        \"1.\"\r\n        \"00000000000000003441905430931245280917713770297417747470693647675065097962631447553892265814744827318497179085\"\r\n        \"14742291507783172120901941964335795950030032157467525460787e+170\"},\r\n    {0x1.08f936baf85c1p+568, chars_format::general, 171,\r\n        \"99999999999999995397220672965687021173298771373910070983074155319629071328494581320833847770616641237372600185\"\r\n        \"0053663010587168093173889073910282723323583537144858509574144\"},\r\n    {0x1.08f936baf85c2p+568, chars_format::general, 171,\r\n        \"1.\"\r\n        \"00000000000000016849713360873842380491738768503263874950059468267458475686192891275656295888291804120371477252\"\r\n        \"050850605109689907695070273397240771446870268008324260691968e+171\"},\r\n    {0x1.4b378469b6731p+571, chars_format::general, 172,\r\n        \"99999999999999991106722135384055949309610771948039310189677092730063190456954919329869358147081608660772824771\"\r\n        \"59626944024852218964185263418978577250945597085571816901050368\"},\r\n    {0x1.4b378469b6732p+571, chars_format::general, 172,\r\n        \"1.\"\r\n        \"00000000000000008268716285710580236764362769651522353363265343088326713943113567293727316641221738967171926425\"\r\n        \"2326568834893006683439977269947557718010655022907888967981466e+172\"},\r\n    {0x1.9e056584240fdp+574, chars_format::general, 173,\r\n        \"99999999999999987674323305318751091818660372407342701554959442658410485759723189737097766448253582599493004440\"\r\n        \"868991951600366493901423615628791772651134064568704023452975104\"},\r\n    {0x1.9e056584240fep+574, chars_format::general, 173,\r\n        \"1.\"\r\n        \"00000000000000001403918625579970521782461970570129136093830042945021304548650108108184133243565686844612285763\"\r\n        \"77810190619298927686313968987276777208442168971676060568308941e+173\"},\r\n    {0x1.02c35f729689ep+578, chars_format::general, 174,\r\n        \"99999999999999984928404241266507205825900052774785414647185322601088322001937806062880493089191161750469148176\"\r\n        \"2871699606818419373090804007799965727644765395390927070069522432\"},\r\n    {0x1.02c35f729689fp+578, chars_format::general, 174,\r\n        \"1.\"\r\n        \"00000000000000006895756753684458293767982609835243709909378283059665632064220875456618679961690528542659998292\"\r\n        \"94174588803003839004782611957035817185773673977598323857513513e+174\"},\r\n    {0x1.4374374f3c2c6p+581, chars_format::general, 175,\r\n        \"99999999999999993715345246233687641002733075598968732752062506784519246026851033820375767838190908467345488222\"\r\n        \"94900033162112051840457868829614121240178061963384891963422539776\"},\r\n    {0x1.4374374f3c2c7p+581, chars_format::general, 175,\r\n        \"1.\"\r\n        \"00000000000000011289227256168048511356399121247335368961816875151381094076677489335366317336190401901098168316\"\r\n        \"2726610734996776805955752633284304916763887798233613448887717069e+175\"},\r\n    {0x1.945145230b377p+584, chars_format::general, 176,\r\n        \"99999999999999986685792442259943292861266657339622078268160759437774506806920451614379548038991111093844416185\"\r\n        \"619536034869697653528180058283225500691937355558043949532406874112\"},\r\n    {0x1.945145230b378p+584, chars_format::general, 176,\r\n        \"1.\"\r\n        \"00000000000000000744898050207431989144199493858315387235964254131263985246781616026371987637390705840846560260\"\r\n        \"27846462837254338328097731830905692411162388370965388973604392141e+176\"},\r\n    {0x1.f965966bce055p+587, chars_format::general, 177,\r\n        \"99999999999999989497613563849441032117853224643360740061721458376472402494892684496778035958671030043244845000\"\r\n        \"5513217535702667994787395102883917853758746611883659375731342835712\"},\r\n    {0x1.f965966bce056p+587, chars_format::general, 177,\r\n        \"1.\"\r\n        \"00000000000000000744898050207431989144199493858315387235964254131263985246781616026371987637390705840846560260\"\r\n        \"278464628372543383280977318309056924111623883709653889736043921408e+177\"},\r\n    {0x1.3bdf7e0360c35p+591, chars_format::general, 178,\r\n        \"99999999999999987248156666577842840712583970800369810626872899225514085944514898190859245622927094883724501948\"\r\n        \"60589317860981148271829194868425875762872481668410834714055235600384\"},\r\n    {0x1.3bdf7e0360c36p+591, chars_format::general, 178,\r\n        \"1.\"\r\n        \"00000000000000005243811844750628371954738001544297246105661372433180618347537188638209568308878576159887246364\"\r\n        \"1693217782934540168018724415173229796059235727181690706012077765427e+178\"},\r\n    {0x1.8ad75d8438f43p+594, chars_format::general, 179,\r\n        \"99999999999999998045549773481514159457876389246726271914145983150114005386328272459269439234497983649422148597\"\r\n        \"943950338419997003168440244384097290815044070304544781216945608327168\"},\r\n    {0x1.8ad75d8438f44p+594, chars_format::general, 179,\r\n        \"1.\"\r\n        \"00000000000000012442073916019742584451599613841868220297176761716247231308746104817149697383259168670352344130\"\r\n        \"39469321816691103043530463865054866839680307513179335998546994475827e+179\"},\r\n    {0x1.ed8d34e547313p+597, chars_format::general, 180,\r\n        \"99999999999999989407635287958577104461642454489641102884327516010434069832877573044541284345241272636864031278\"\r\n        \"4735046105718485868083216078242264642659886674081956339558310064685056\"},\r\n    {0x1.ed8d34e547314p+597, chars_format::general, 180,\r\n        \"1.\"\r\n        \"00000000000000000924854601989159844456621034165754661590752138863340650570811838930845490864250220653608187704\"\r\n        \"434098914369379808621813123237387566331395871269994496970650475613389e+180\"},\r\n    {0x1.3478410f4c7ecp+601, chars_format::general, 181,\r\n        \"99999999999999991711079150764693652460638170424863814625612440581015385980464426221802125649043062240212862563\"\r\n        \"66562347133135483117101991090685868467907010818055540655879490029748224\"},\r\n    {0x1.3478410f4c7edp+601, chars_format::general, 181,\r\n        \"1.\"\r\n        \"00000000000000010138630053213626036452603897906645508555891837145665915161159251639888856079457379067003512845\"\r\n        \"2025743574074047860726063355679164479837216343594335873825060509292954e+181\"},\r\n    {0x1.819651531f9e7p+604, chars_format::general, 182,\r\n        \"99999999999999991711079150764693652460638170424863814625612440581015385980464426221802125649043062240212862563\"\r\n        \"665623471331354831171019910906858684679070108180555406558794900297482240\"},\r\n    {0x1.819651531f9e8p+604, chars_format::general, 182,\r\n        \"1.\"\r\n        \"00000000000000006453119872723839559654210752410289169769835957832735809325020286556271509993374515701645382788\"\r\n        \"89518418019219479509228905063570489532279132912365795121776382080293274e+182\"},\r\n    {0x1.e1fbe5a7e7861p+607, chars_format::general, 183,\r\n        \"99999999999999994659487295156522833899352686821948885654457144031359470649375598288696002517909352932499366608\"\r\n        \"7115356131035228239552737388526279268078143523691759154905886843985723392\"},\r\n    {0x1.e1fbe5a7e7862p+607, chars_format::general, 183,\r\n        \"1.\"\r\n        \"00000000000000006453119872723839559654210752410289169769835957832735809325020286556271509993374515701645382788\"\r\n        \"895184180192194795092289050635704895322791329123657951217763820802932736e+183\"},\r\n    {0x1.2d3d6f88f0b3cp+611, chars_format::general, 184,\r\n        \"99999999999999982865854717589206108144494621233608601539078330229983131973730910021120495042444190163353350428\"\r\n        \"52788704601485085281825842706955095829283737561469387976341354799421194240\"},\r\n    {0x1.2d3d6f88f0b3dp+611, chars_format::general, 184,\r\n        \"1.\"\r\n        \"00000000000000001735666841696912869352267526174953056123684432312185273854762411249241307003188450593986976316\"\r\n        \"8217247533567260066374829259224741079168005384218651369268937662411885773e+184\"},\r\n    {0x1.788ccb6b2ce0cp+614, chars_format::general, 185,\r\n        \"99999999999999997961704416875371517110712945186684165206763211895744845478556111003617144611039598507860251139\"\r\n        \"162957211888350975873638026151889477992007905860430885494197722591793250304\"},\r\n    {0x1.788ccb6b2ce0dp+614, chars_format::general, 185,\r\n        \"1.\"\r\n        \"00000000000000013057554116161536926076931269139759728874448093561506558983381311986113794179635006852367151849\"\r\n        \"79802737776185109892901762523422799769117843610616789122498189718937455821e+185\"},\r\n    {0x1.d6affe45f818fp+617, chars_format::general, 186,\r\n        \"99999999999999997961704416875371517110712945186684165206763211895744845478556111003617144611039598507860251139\"\r\n        \"1629572118883509758736380261518894779920079058604308854941977225917932503040\"},\r\n    {0x1.d6affe45f8190p+617, chars_format::general, 186,\r\n        \"1.\"\r\n        \"00000000000000010038384176304303844283687604349144616140911117228354216282416271789614464265915925183465771707\"\r\n        \"671013344587151074317941705417760293751344330057020490078825062269858296627e+186\"},\r\n    {0x1.262dfeebbb0f9p+621, chars_format::general, 187,\r\n        \"99999999999999990715696561218012120806928149689207894646274468696179222996240014532018752818113802502496938798\"\r\n        \"05812353226907091680705581859236698853640605134247712274342131878495422251008\"},\r\n    {0x1.262dfeebbb0fap+621, chars_format::general, 187,\r\n        \"1.\"\r\n        \"00000000000000010038384176304303844283687604349144616140911117228354216282416271789614464265915925183465771707\"\r\n        \"6710133445871510743179417054177602937513443300570204900788250622698582966272e+187\"},\r\n    {0x1.6fb97ea6a9d37p+624, chars_format::general, 188,\r\n        \"99999999999999986851159038200753776111576258757220550347347138989744224339004763080499610528553377966303172216\"\r\n        \"135545569805454885304878641227288327493418395599568449276340570087973407686656\"},\r\n    {0x1.6fb97ea6a9d38p+624, chars_format::general, 188,\r\n        \"1.\"\r\n        \"00000000000000002309309130269787154892983822485169927543056457815484218967945768886576179686795076111078238543\"\r\n        \"82585741965991901131358735068760297166536901857120314314466356487589666698035e+188\"},\r\n    {0x1.cba7de5054485p+627, chars_format::general, 189,\r\n        \"99999999999999989942789056614560451867857771502810425786489002754892223264792964241714924360201717595258185481\"\r\n        \"6736079397763477105066203831193512563278085201938953880500051690455580595453952\"},\r\n    {0x1.cba7de5054486p+627, chars_format::general, 189,\r\n        \"1.\"\r\n        \"00000000000000002309309130269787154892983822485169927543056457815484218967945768886576179686795076111078238543\"\r\n        \"825857419659919011313587350687602971665369018571203143144663564875896666980352e+189\"},\r\n    {0x1.1f48eaf234ad3p+631, chars_format::general, 190,\r\n        \"99999999999999987469485041883515111262832561306338525435175511742773824124162403312742673294883045892094174869\"\r\n        \"24315804379963345034522698960570091326029642051843383703107348987949033805840384\"},\r\n    {0x1.1f48eaf234ad4p+631, chars_format::general, 190,\r\n        \"1.\"\r\n        \"00000000000000007255917159731877836103034242878113728245683439839721017249206890744520681817432419517406259768\"\r\n        \"6867572116133475316363741377149036578003932179221262451825269232080321099543347e+190\"},\r\n    {0x1.671b25aec1d88p+634, chars_format::general, 191,\r\n        \"99999999999999991426771465453187656230872897620693565997277097362163262749171300799098274999392920617156591849\"\r\n        \"131877877362376266603456419227541462168315779999172318661364176545198692437590016\"},\r\n    {0x1.671b25aec1d89p+634, chars_format::general, 191,\r\n        \"1.\"\r\n        \"00000000000000007255917159731877836103034242878113728245683439839721017249206890744520681817432419517406259768\"\r\n        \"68675721161334753163637413771490365780039321792212624518252692320803210995433472e+191\"},\r\n    {0x1.c0e1ef1a724eap+637, chars_format::general, 192,\r\n        \"99999999999999991426771465453187656230872897620693565997277097362163262749171300799098274999392920617156591849\"\r\n        \"1318778773623762666034564192275414621683157799991723186613641765451986924375900160\"},\r\n    {0x1.c0e1ef1a724ebp+637, chars_format::general, 192,\r\n        \"1.\"\r\n        \"00000000000000004090088020876139800128601973826629695796002171344209466349199772755436200453824519737356326184\"\r\n        \"775781344763153278629790594017431218673977730337535459878294373875465426450985779e+192\"},\r\n    {0x1.188d357087712p+641, chars_format::general, 193,\r\n        \"99999999999999986361444843284006798671781267138319114077787067769344781309159912016563104817620280969076698114\"\r\n        \"87431649040206546179292274931158555956605099986382706217459209761309199883223171072\"},\r\n    {0x1.188d357087713p+641, chars_format::general, 193,\r\n        \"1.\"\r\n        \"00000000000000006622751331960730228908147789067816921755747186140618707069205467146703785544710839561396273051\"\r\n        \"9045620382433086810350574289754091699751101204052080881216804133415187732536649318e+193\"},\r\n    {0x1.5eb082cca94d7p+644, chars_format::general, 194,\r\n        \"99999999999999994465967438754696170766327875910118237148971115117854351613178134068619377108456504406004528089\"\r\n        \"686414709538562749489776621177115003729674648080379472553427423904462708600804999168\"},\r\n    {0x1.5eb082cca94d8p+644, chars_format::general, 194,\r\n        \"1.\"\r\n        \"00000000000000010675012629696074914955421093453716483291339209814873492221214578172731921690128951279860188039\"\r\n        \"31061114781155732488348436490817389205692194451348429331109807648720412813795157606e+194\"},\r\n    {0x1.b65ca37fd3a0dp+647, chars_format::general, 195,\r\n        \"99999999999999997707776476942971919604146519418837886377444734057258179734785422889441886024790993780775660079\"\r\n        \"6112539971931616645685181699233267813951241073670004367049615544210109925082343145472\"},\r\n    {0x1.b65ca37fd3a0ep+647, chars_format::general, 195,\r\n        \"1.\"\r\n        \"00000000000000010675012629696074914955421093453716483291339209814873492221214578172731921690128951279860188039\"\r\n        \"310611147811557324883484364908173892056921944513484293311098076487204128137951576064e+195\"},\r\n    {0x1.11f9e62fe4448p+651, chars_format::general, 196,\r\n        \"99999999999999995114329246392351320533891604611862166994665838905735117237499591832783878891723402280958754487\"\r\n        \"67138256706948253250552493092635735926276453993770366538373425000777236538229086224384\"},\r\n    {0x1.11f9e62fe4449p+651, chars_format::general, 196,\r\n        \"1.\"\r\n        \"00000000000000015861907090797316113095930923067667922056897000117919617215786240286047935956264134279493999223\"\r\n        \"1903540080589155890094708429021127363216410793720778359535526853136813823898384806707e+196\"},\r\n    {0x1.56785fbbdd55ap+654, chars_format::general, 197,\r\n        \"99999999999999995114329246392351320533891604611862166994665838905735117237499591832783878891723402280958754487\"\r\n        \"671382567069482532505524930926357359262764539937703665383734250007772365382290862243840\"},\r\n    {0x1.56785fbbdd55bp+654, chars_format::general, 197,\r\n        \"1.\"\r\n        \"00000000000000011712391521916323154583523059376506771044450767875482717220128910595395124543355987879786950276\"\r\n        \"08655971986102897770868166050696166090986577148520300183958899825249957898832895698534e+197\"},\r\n    {0x1.ac1677aad4ab0p+657, chars_format::general, 198,\r\n        \"99999999999999988475104336182762586914039022706004325374751867317836077244447864327739380631070368041427476172\"\r\n        \"3053117059528639544242622390941156386039240473187039308013923507098814799398756243472384\"},\r\n    {0x1.ac1677aad4ab1p+657, chars_format::general, 198,\r\n        \"1.\"\r\n        \"00000000000000001753554156601940054153744186517720008614579810493634157230551319337828377152376436520490032803\"\r\n        \"037453428186101110586787622758599079921605032556703399966076149305663250824706100140442e+198\"},\r\n    {0x1.0b8e0acac4eaep+661, chars_format::general, 199,\r\n        \"99999999999999988475104336182762586914039022706004325374751867317836077244447864327739380631070368041427476172\"\r\n        \"30531170595286395442426223909411563860392404731870393080139235070988147993987562434723840\"},\r\n    {0x1.0b8e0acac4eafp+661, chars_format::general, 199,\r\n        \"1.\"\r\n        \"00000000000000009720624048853446534497567284804749418558476576399113005222213392343881775065160077607927566781\"\r\n        \"4767384615260434042843028529572891447122136236995030814648864284631323133556043856163635e+199\"},\r\n    {0x1.4e718d7d7625ap+664, chars_format::general, 200,\r\n        \"99999999999999996973312221251036165947450327545502362648241750950346848435554075534196338404706251868027512415\"\r\n        \"973882408182135734368278484639385041047239877871023591066789981811181813306167128854888448\"},\r\n    {0x1.4e718d7d7625bp+664, chars_format::general, 200,\r\n        \"1.\"\r\n        \"00000000000000013969727991387583324014272937224498437195221518215368390817766497947110253951978019521227584903\"\r\n        \"31102381264067929425631097572992384593387153897566291159758524401378248003875013787018854e+200\"},\r\n    {0x1.a20df0dcd3af0p+667, chars_format::general, 201,\r\n        \"99999999999999990174745913196417302720721283673903932829449844044338231482669106569030772185797544806747483421\"\r\n        \"0390258463987183104130654882031695190925872134291678628544718769301415466131339252487684096\"},\r\n    {0x1.a20df0dcd3af1p+667, chars_format::general, 201,\r\n        \"1.\"\r\n        \"00000000000000003771878529305655029174179371417100792467033657856355465388439044499361904623614958929307541410\"\r\n        \"908738969965553158323491481075600563001892542312879319279108086692222079999200332461008486e+201\"},\r\n    {0x1.0548b68a044d6p+671, chars_format::general, 202,\r\n        \"99999999999999990174745913196417302720721283673903932829449844044338231482669106569030772185797544806747483421\"\r\n        \"03902584639871831041306548820316951909258721342916786285447187693014154661313392524876840960\"},\r\n    {0x1.0548b68a044d7p+671, chars_format::general, 202,\r\n        \"1.\"\r\n        \"00000000000000011930158098971197665046254224063018908249583946143565805731901007257560584086305407402843576204\"\r\n        \"8305668441056540670697470767990591893474757396431061931338898125494704000308401767883525325e+202\"},\r\n    {0x1.469ae42c8560cp+674, chars_format::general, 203,\r\n        \"99999999999999998876910787506329447650934459829549922997503484884029261182361866844442696946000689845185920534\"\r\n        \"555642245481492613075738123641525387194542623914743194966239051177873087980216425864602058752\"},\r\n    {0x1.469ae42c8560dp+674, chars_format::general, 203,\r\n        \"1.\"\r\n        \"00000000000000016281240536126153737511360812140841903333610766563411320581747387395266546466406979922062794761\"\r\n        \"58887504364704121840108339451823712339845344488589385918977339967333617071438142709626935706e+203\"},\r\n    {0x1.98419d37a6b8fp+677, chars_format::general, 204,\r\n        \"99999999999999998876910787506329447650934459829549922997503484884029261182361866844442696946000689845185920534\"\r\n        \"5556422454814926130757381236415253871945426239147431949662390511778730879802164258646020587520\"},\r\n    {0x1.98419d37a6b90p+677, chars_format::general, 204,\r\n        \"1.\"\r\n        \"00000000000000012800374586402188879539275541678583507266389310227534908701870283285101776562325721906687419916\"\r\n        \"182228484013931497336014340342894776157671280691663726345066529974243554167548426849935897395e+204\"},\r\n    {0x1.fe52048590672p+680, chars_format::general, 205,\r\n        \"99999999999999990522832508168813788517929810720129772436171989677925872670656816980047249176205670608285020905\"\r\n        \"57969050236202928251957239362070375381666542984859087613894256390005080826781722527340175556608\"},\r\n    {0x1.fe52048590673p+680, chars_format::general, 205,\r\n        \"1.\"\r\n        \"00000000000000001661603547285501334028602676199356639851280649952730390686263550132574512869265696257486220410\"\r\n        \"8809594931879803899277933669817992649871683552701273012420045469371471812176828260616688264806e+205\"},\r\n    {0x1.3ef342d37a407p+684, chars_format::general, 206,\r\n        \"99999999999999986067324092522138770313660664528439025470128525568004065464414123719036343698981660348604541103\"\r\n        \"459182906031648839556284004276265549348464259679976306097717770685212259087870984958094927200256\"},\r\n    {0x1.3ef342d37a408p+684, chars_format::general, 206,\r\n        \"1.\"\r\n        \"00000000000000003889357755108838843130737249295202013334302382007691294289384896763079965607877701387326460311\"\r\n        \"94121329135317061140943756165401836722126894035443458626261694354456645580765594621932224066355e+206\"},\r\n    {0x1.8eb0138858d09p+687, chars_format::general, 207,\r\n        \"99999999999999989631730825039478784877075981481791623042963296855941511229408278327845068080760868556348924945\"\r\n        \"1555889830959531939269147157518161129230251958148679621306976052570830984318279772103403898929152\"},\r\n    {0x1.8eb0138858d0ap+687, chars_format::general, 207,\r\n        \"1.\"\r\n        \"00000000000000003889357755108838843130737249295202013334302382007691294289384896763079965607877701387326460311\"\r\n        \"941213291353170611409437561654018367221268940354434586262616943544566455807655946219322240663552e+207\"},\r\n    {0x1.f25c186a6f04cp+690, chars_format::general, 208,\r\n        \"99999999999999998186306983081094819829272742169837857217766747946991381065394249388986006597030968254935446165\"\r\n        \"22696356805028364441642842329313746550197144253860793660984920822957311285732475861572950035529728\"},\r\n    {0x1.f25c186a6f04dp+690, chars_format::general, 208,\r\n        \"1.\"\r\n        \"00000000000000009592408527136582866432201756420566169450838016068391207513375544137173924618724434519717474458\"\r\n        \"6554630146560575784024467000148992689405664381702612359153846788595597987579871338229149809718067e+208\"},\r\n    {0x1.37798f428562fp+694, chars_format::general, 209,\r\n        \"99999999999999989061425747836704382546929530769255207431309733449871519907009213590435672179676195243109823530\"\r\n        \"484164010765664497227613801915728022751095446033285297165420831725583764136794858449981115862089728\"},\r\n    {0x1.37798f4285630p+694, chars_format::general, 209,\r\n        \"1.\"\r\n        \"00000000000000007311188218325485257111615953570420507004223762444111242223779285187536341014385741266761068799\"\r\n        \"96976312533490279160524304467054690825284743904393057605427758473356246157785465878147788484850483e+209\"},\r\n    {0x1.8557f31326bbbp+697, chars_format::general, 210,\r\n        \"99999999999999992711378241934460557459866815329488267345892539248719464370363227909855805946618104447840072584\"\r\n        \"3812838336795121561031396504666917998514458446354143529431921823271795036250068185162804696593727488\"},\r\n    {0x1.8557f31326bbcp+697, chars_format::general, 210,\r\n        \"1.\"\r\n        \"00000000000000007311188218325485257111615953570420507004223762444111242223779285187536341014385741266761068799\"\r\n        \"969763125334902791605243044670546908252847439043930576054277584733562461577854658781477884848504832e+210\"},\r\n    {0x1.e6adefd7f06aap+700, chars_format::general, 211,\r\n        \"99999999999999995631340237212665497390216642977674715277558783887797819941046439365391912960171631811624271827\"\r\n        \"49897969201059028320356032930746282153172616351711759756540926280845609521557638656931995269719916544\"},\r\n    {0x1.e6adefd7f06abp+700, chars_format::general, 211,\r\n        \"1.\"\r\n        \"00000000000000007311188218325485257111615953570420507004223762444111242223779285187536341014385741266761068799\"\r\n        \"969763125334902791605243044670546908252847439043930576054277584733562461577854658781477884848504832e+211\"},\r\n    {0x1.302cb5e6f642ap+704, chars_format::general, 212,\r\n        \"99999999999999990959401044767537593501656918740576398586892792465272451027953301036534141738485988029569553038\"\r\n        \"510666318680865279842887243162229186843277653306392406169861934038413548670665077684456779836676898816\"},\r\n    {0x1.302cb5e6f642bp+704, chars_format::general, 212,\r\n        \"1.\"\r\n        \"00000000000000009647157814548049209055895815688969665349556758155373926680325854351965226625228563157788428194\"\r\n        \"46391981199976529328557958774316372559707169414929317175205124911858373485031031322390947127876596531e+212\"},\r\n    {0x1.7c37e360b3d35p+707, chars_format::general, 213,\r\n        \"99999999999999998434503752679742239723352477519933705291958378741313041288902322362706575693183018080857103100\"\r\n        \"8919677160084252852199641809946030023447952696435527124027376600704816231425231719002378564135125254144\"},\r\n    {0x1.7c37e360b3d36p+707, chars_format::general, 213,\r\n        \"1.\"\r\n        \"00000000000000013384709168504151532166743595078648318702089551293394221810800365015051443602577078183432203225\"\r\n        \"654570510663545295974118056659350633347830502317873324868489112134617772086239360331800009567183778611e+213\"},\r\n    {0x1.db45dc38e0c82p+710, chars_format::general, 214,\r\n        \"99999999999999995444462669514860381234674254008190782609932144230896805184522713832237602111304206060342083075\"\r\n        \"93944715707740128306913340586165347614418822310868858990958736965765439335377993421392542578277827477504\"},\r\n    {0x1.db45dc38e0c83p+710, chars_format::general, 214,\r\n        \"1.\"\r\n        \"00000000000000007404627002174387815189387148055162473338037082272561749602041147954113496438819454142402163175\"\r\n        \"7495293928014972916724565063934515809466164092481450798821885313089633125087528849591751483057152773325e+214\"},\r\n    {0x1.290ba9a38c7d1p+714, chars_format::general, 215,\r\n        \"99999999999999990660396936451049407652789096389402106318690169014230827417515340183487244380298106827518051036\"\r\n        \"015414262787762879627804165648934234223216948652905993920546904997130825691790753915825536773603473752064\"},\r\n    {0x1.290ba9a38c7d2p+714, chars_format::general, 215,\r\n        \"1.\"\r\n        \"00000000000000009796659868706293301980329726864556811483658069880894738485544834778488675304322503758814179195\"\r\n        \"71154583994631649339312112649981120190710204647603637787670876363922509633974747510822509281030267784397e+\"\r\n        \"215\"},\r\n    {0x1.734e940c6f9c5p+717, chars_format::general, 216,\r\n        \"99999999999999986833144350000000628787280970294371165285696588840898045203909441264486958195493227441258825404\"\r\n        \"0761879473560521568747407734787588406864399290882799171293145332687119715621994096773456255662636329336832\"},\r\n    {0x1.734e940c6f9c6p+717, chars_format::general, 216,\r\n        \"1.\"\r\n        \"00000000000000002142154695804195744249313474674494929417670909534229174058333036940488102934712744986295727931\"\r\n        \"833093209082895047886994342159460414833548007346784224294244020182387388080564786631265270395622996207206e+\"\r\n        \"216\"},\r\n    {0x1.d022390f8b837p+720, chars_format::general, 217,\r\n        \"99999999999999996018550557482517698064500472922445423764881181256896722516563598670087645039024937968280966920\"\r\n        \"73033110439215789148209291468717978517470477604338250142827222541691722147321863584969741246387925089779712\"},\r\n    {0x1.d022390f8b838p+720, chars_format::general, 217,\r\n        \"1.\"\r\n        \"00000000000000008265758834125873790434126476426544435070460637811561625600102475210888560830400552004310488942\"\r\n        \"9358553137736322042918957696317410444923912386501859471602158149478575546879109374128331283273667415166157e+\"\r\n        \"217\"},\r\n    {0x1.221563a9b7322p+724, chars_format::general, 218,\r\n        \"99999999999999988670225591496504042642724870819986016981533507324097780666440272745607095564199569546663253707\"\r\n        \"407016578763273303796211201720443029584092898479300433989106071698353021544403254911815982945786756526505984\"},\r\n    {0x1.221563a9b7323p+724, chars_format::general, 218,\r\n        \"1.\"\r\n        \"00000000000000008265758834125873790434126476426544435070460637811561625600102475210888560830400552004310488942\"\r\n        \"93585531377363220429189576963174104449239123865018594716021581494785755468791093741283312832736674151661568e+\"\r\n        \"218\"},\r\n    {0x1.6a9abc9424febp+727, chars_format::general, 219,\r\n        \"99999999999999996508438888548251941759285513062609384217104359519083318639905153731719681670679962529722147801\"\r\n        \"618552072767416863994485028884962235547412234547654639257549968998154834801806327912222841098418750522549862\"\r\n        \"4\"},\r\n    {0x1.6a9abc9424fecp+727, chars_format::general, 219,\r\n        \"1.\"\r\n        \"00000000000000012184865482651747739992406797547856118688246063909054394586834915703944853883640748495839935990\"\r\n        \"041623060775703984391032683214000647474050906684363049794437763597758461316612473913036557403682738514637619e+\"\r\n        \"219\"},\r\n    {0x1.c5416bb92e3e6p+730, chars_format::general, 220,\r\n        \"99999999999999999643724207368951101405909769959658731111332700397077533829291106126164716113272119722945705439\"\r\n        \"3031662703690742880737945597507699179327399689749963213649275279180755601047675571123855843594715481209674137\"\r\n        \"6\"},\r\n    {0x1.c5416bb92e3e7p+730, chars_format::general, 220,\r\n        \"1.\"\r\n        \"00000000000000012184865482651747739992406797547856118688246063909054394586834915703944853883640748495839935990\"\r\n        \"0416230607757039843910326832140006474740509066843630497944377635977584613166124739130365574036827385146376192e\"\r\n        \"+220\"},\r\n    {0x1.1b48e353bce6fp+734, chars_format::general, 221,\r\n        \"99999999999999984594354677029595135102113336853821866019036664182705300920238534632828550788829765195472628778\"\r\n        \"41701812188111865249310881159489304248316684372375624724951524510245607865055365695160441670641811964856316723\"\r\n        \"2\"},\r\n    {0x1.1b48e353bce70p+734, chars_format::general, 221,\r\n        \"1.\"\r\n        \"00000000000000004660180717482069756840508580994937686142098045801868278132308629957276771221419571232103397659\"\r\n        \"59854898653172616660068980913606220974926434405874301273673162218994872058950552383264597357715602427843549594\"\r\n        \"e+221\"},\r\n    {0x1.621b1c28ac20bp+737, chars_format::general, 222,\r\n        \"99999999999999988607519885120090059449792385682045030043648940506537896362652553697718194875347726402798782554\"\r\n        \"65332429481124015531462501110312687593638634379075360034695852051995460703834403032781272808056570057453763297\"\r\n        \"28\"},\r\n    {0x1.621b1c28ac20cp+737, chars_format::general, 222,\r\n        \"1.\"\r\n        \"00000000000000004660180717482069756840508580994937686142098045801868278132308629957276771221419571232103397659\"\r\n        \"59854898653172616660068980913606220974926434405874301273673162218994872058950552383264597357715602427843549593\"\r\n        \"6e+222\"},\r\n    {0x1.baa1e332d728ep+740, chars_format::general, 223,\r\n        \"99999999999999991818052051592485998927935624744623561263338761565603972716583768949629910144562095368659705575\"\r\n        \"64236923315533735757183797070971394269896194384435148282491314085395342974857632902877937717988376531531720556\"\r\n        \"544\"},\r\n    {0x1.baa1e332d728fp+740, chars_format::general, 223,\r\n        \"1.\"\r\n        \"00000000000000004660180717482069756840508580994937686142098045801868278132308629957276771221419571232103397659\"\r\n        \"59854898653172616660068980913606220974926434405874301273673162218994872058950552383264597357715602427843549593\"\r\n        \"6e+223\"},\r\n    {0x1.14a52dffc6799p+744, chars_format::general, 224,\r\n        \"99999999999999996954903517948319502092964807244749211214842475260109694882873713352688654575305085714037182409\"\r\n        \"22484113450589288118337870608025324951908290393010809478964053338835154608494800695032601573879266890056452171\"\r\n        \"3664\"},\r\n    {0x1.14a52dffc679ap+744, chars_format::general, 224,\r\n        \"1.\"\r\n        \"00000000000000017502309383371653514753081537245251811020857330038132583548033490964923632298277047095547089743\"\r\n        \"55472873990811497562954164756241047679956674427313454264855010352594401143043471863651256997442828324155378630\"\r\n        \"656e+224\"},\r\n    {0x1.59ce797fb817fp+747, chars_format::general, 225,\r\n        \"99999999999999992845422344863652699560941461244648691253639504304505117149841757830241659030710693437735200942\"\r\n        \"35886361342544846229414611778382180406298613586150280521785861936083305301585066461308870489166554603236666879\"\r\n        \"50848\"},\r\n    {0x1.59ce797fb8180p+747, chars_format::general, 225,\r\n        \"1.\"\r\n        \"00000000000000009283347037202319909689034845245050771098451388126923428081969579920029641209088262542943126809\"\r\n        \"82277369774722613785107647096954758588737320813592396350498627547090702529224003396203794828017403750515808046\"\r\n        \"9402e+225\"},\r\n    {0x1.b04217dfa61dfp+750, chars_format::general, 226,\r\n        \"99999999999999996133007283331386141586560138044729107222601881068988779336267322248199255466386207258776786115\"\r\n        \"85164563028980399740553218842096696042786355031638703687528415058284784747112853848287855356936724432692495112\"\r\n        \"994816\"},\r\n    {0x1.b04217dfa61e0p+750, chars_format::general, 226,\r\n        \"1.\"\r\n        \"00000000000000009283347037202319909689034845245050771098451388126923428081969579920029641209088262542943126809\"\r\n        \"82277369774722613785107647096954758588737320813592396350498627547090702529224003396203794828017403750515808046\"\r\n        \"94016e+226\"},\r\n    {0x1.0e294eebc7d2bp+754, chars_format::general, 227,\r\n        \"99999999999999988242803431008825880725075313724536108897092176834227990088845967645101024020764974088276981699\"\r\n        \"46896878981535071313820561889181858515215775562466488089746287565001234077846164119538291674288316841998507352\"\r\n        \"6276096\"},\r\n    {0x1.0e294eebc7d2cp+754, chars_format::general, 227,\r\n        \"1.\"\r\n        \"00000000000000009283347037202319909689034845245050771098451388126923428081969579920029641209088262542943126809\"\r\n        \"82277369774722613785107647096954758588737320813592396350498627547090702529224003396203794828017403750515808046\"\r\n        \"94016e+227\"},\r\n    {0x1.51b3a2a6b9c76p+757, chars_format::general, 228,\r\n        \"99999999999999992450912152247524686517867220028639041337364019092767077687470690100086747458429631779210210721\"\r\n        \"53972977140172579808077978930736438529920084612691669741896755561419127768121731974871392305034134223701967491\"\r\n        \"49011968\"},\r\n    {0x1.51b3a2a6b9c77p+757, chars_format::general, 228,\r\n        \"1.\"\r\n        \"00000000000000009283347037202319909689034845245050771098451388126923428081969579920029641209088262542943126809\"\r\n        \"82277369774722613785107647096954758588737320813592396350498627547090702529224003396203794828017403750515808046\"\r\n        \"94016e+228\"},\r\n    {0x1.a6208b5068394p+760, chars_format::general, 229,\r\n        \"99999999999999999183886106229442775786334270115203733241798966706429617845270246028063904958693084084703377156\"\r\n        \"85294734193992593398889846197223766553446979093051960385337504355687757672562640543404353314227442034427503713\"\r\n        \"670135808\"},\r\n    {0x1.a6208b5068395p+760, chars_format::general, 229,\r\n        \"1.\"\r\n        \"00000000000000012649834014193278954323268370288333117050668861933754698160869357884018219959219988695689710027\"\r\n        \"47938248301632620580513580730198422600500768053772541672219001944225017481444457680470275332614057655878576158\"\r\n        \"03016806e+229\"},\r\n    {0x1.07d457124123cp+764, chars_format::general, 230,\r\n        \"99999999999999988411127779858373832956786989976700226194703050524569553592790956543300452958271560395914310860\"\r\n        \"35179922907880571653590858570844041715803947924475495355832306284857949825457186833751615699518149537266645758\"\r\n        \"1821100032\"},\r\n    {0x1.07d457124123dp+764, chars_format::general, 230,\r\n        \"1.\"\r\n        \"00000000000000009956644432600511718615881550253707240288894882888289682097749535512827356959114607773492443453\"\r\n        \"35409545480104615144188833823603491391090010261628425414842702426517565519668094253057090928936734531588361669\"\r\n        \"158161613e+230\"},\r\n    {0x1.49c96cd6d16cbp+767, chars_format::general, 231,\r\n        \"99999999999999988411127779858373832956786989976700226194703050524569553592790956543300452958271560395914310860\"\r\n        \"35179922907880571653590858570844041715803947924475495355832306284857949825457186833751615699518149537266645758\"\r\n        \"18211000320\"},\r\n    {0x1.49c96cd6d16ccp+767, chars_format::general, 231,\r\n        \"1.\"\r\n        \"00000000000000005647541102052084141484062638198305837470056516415545656396757819718921976158945998297976816934\"\r\n        \"75363620965659806446069238773051601456032797794197839403040623198185642380825912769195995883053017532724018486\"\r\n        \"9629512909e+231\"},\r\n    {0x1.9c3bc80c85c7ep+770, chars_format::general, 232,\r\n        \"99999999999999991858410444297115894662242119621021348449773743702764774153584329178424757598406447976326812075\"\r\n        \"23216662519436418612086534611285553663849717898419964165273969667523488336530932020840491736225123136358120303\"\r\n        \"938278260736\"},\r\n    {0x1.9c3bc80c85c7fp+770, chars_format::general, 232,\r\n        \"1.\"\r\n        \"00000000000000005647541102052084141484062638198305837470056516415545656396757819718921976158945998297976816934\"\r\n        \"75363620965659806446069238773051601456032797794197839403040623198185642380825912769195995883053017532724018486\"\r\n        \"96295129088e+232\"},\r\n    {0x1.01a55d07d39cfp+774, chars_format::general, 233,\r\n        \"99999999999999997374062707399103193390970327051935144057886852787877127050853725394623645022622268104986814019\"\r\n        \"04075445897925773745679616275991972780722949856731114260380631079788349954248924320182693394956280894904479577\"\r\n        \"1481474727936\"},\r\n    {0x1.01a55d07d39d0p+774, chars_format::general, 233,\r\n        \"1.\"\r\n        \"00000000000000019436671759807052388305883156775590326490339289128326538639931310259419194719485548619626821794\"\r\n        \"27510579411883194280051942934817649248215877689975714640807276728847796425120893517551500029880911929089916669\"\r\n        \"987624321024e+233\"},\r\n    {0x1.420eb449c8842p+777, chars_format::general, 234,\r\n        \"99999999999999984136497275954333676442022629217742034598415390983607480097407174475746315204504299796202809353\"\r\n        \"90014365789551321425056220280696566900227193156784354032124643690352682071725742801761409414001502274393217321\"\r\n        \"44446136385536\"},\r\n    {0x1.420eb449c8843p+777, chars_format::general, 234,\r\n        \"1.\"\r\n        \"00000000000000001786584517880693032373952892996666180544377340055967009368669242367582754961994924207914815574\"\r\n        \"08762472600717257852554081607757108074221535423380034336465960209600239248423318159656454721941207101741566995\"\r\n        \"7160428424397e+234\"},\r\n    {0x1.9292615c3aa53p+780, chars_format::general, 235,\r\n        \"99999999999999991196532172724877418814794734729311692976800170612551291805912001632480891107500549560887611841\"\r\n        \"97513608514017695996055364811520783369824930063422626153861170298051704942404772944919427537177384205332557191\"\r\n        \"153093955289088\"},\r\n    {0x1.9292615c3aa54p+780, chars_format::general, 235,\r\n        \"1.\"\r\n        \"00000000000000005316601966265964903560338945752451009733569729870438915222921655945950042913493049090257216818\"\r\n        \"12512093962950445138053653873169216309020403876699170397334223513449750683762833231235463783529148067211236930\"\r\n        \"57035913815654e+235\"},\r\n    {0x1.f736f9b3494e8p+783, chars_format::general, 236,\r\n        \"99999999999999994020546131433094915763903576933939556328154082464128816489313932495174721468699049466761532837\"\r\n        \"20513305603804245824455022623850469957664024826077935002555780941131314090676385002182634786447736977708293139\"\r\n        \"0365469918625792\"},\r\n    {0x1.f736f9b3494e9p+783, chars_format::general, 236,\r\n        \"1.\"\r\n        \"00000000000000005316601966265964903560338945752451009733569729870438915222921655945950042913493049090257216818\"\r\n        \"12512093962950445138053653873169216309020403876699170397334223513449750683762833231235463783529148067211236930\"\r\n        \"570359138156544e+236\"},\r\n    {0x1.3a825c100dd11p+787, chars_format::general, 237,\r\n        \"99999999999999994020546131433094915763903576933939556328154082464128816489313932495174721468699049466761532837\"\r\n        \"20513305603804245824455022623850469957664024826077935002555780941131314090676385002182634786447736977708293139\"\r\n        \"03654699186257920\"},\r\n    {0x1.3a825c100dd12p+787, chars_format::general, 237,\r\n        \"1.\"\r\n        \"00000000000000012094235467165686896238200167043557881776819118314224974463086290016415235780369448864354627206\"\r\n        \"67711366978438164726212832622760464119834231307071911634201289056840812639614702168667161181777994720913003205\"\r\n        \"4906464259329229e+237\"},\r\n    {0x1.8922f31411455p+790, chars_format::general, 238,\r\n        \"99999999999999990405808264286576519669044258912015891238421075294109584894559460990926618606364969587242913963\"\r\n        \"31073693328877462044103460624068471125229983529879139676226679317989414380888721568885729507381685429067351125\"\r\n        \"745727105048510464\"},\r\n    {0x1.8922f31411456p+790, chars_format::general, 238,\r\n        \"1.\"\r\n        \"00000000000000004864759732872650104048481530999710551597353103974186511273577347007919030055701289105317389458\"\r\n        \"88832142428584597165509708623196466454966148714674320981543085810557013220039375302073350623645891623631119178\"\r\n        \"90900665230478541e+238\"},\r\n    {0x1.eb6bafd91596bp+793, chars_format::general, 239,\r\n        \"99999999999999999081179145438220670296706622164632687453780292502155740721970192601122065475966761298087599260\"\r\n        \"65728762788701743116947209423545268323071682640756248459416523213529973684379113808798302177140209145805611957\"\r\n        \"6436948334022754304\"},\r\n    {0x1.eb6bafd91596cp+793, chars_format::general, 239,\r\n        \"1.\"\r\n        \"00000000000000010648340320307079537800256439834788415740925915446217281825184501414715994635435816912547179657\"\r\n        \"11935522068467451214072207822847664586860614788592393503669648407584052755699636795348399070151574101456626400\"\r\n        \"174318471207295386e+239\"},\r\n    {0x1.33234de7ad7e2p+797, chars_format::general, 240,\r\n        \"99999999999999982887153500621818255791736877426414667851776420380469583177470160262090564652710083437844186705\"\r\n        \"61039299797029751780972211664521913553767177633785645397462147941854262984530381627628166526924298207894191738\"\r\n        \"10082174047524749312\"},\r\n    {0x1.33234de7ad7e3p+797, chars_format::general, 240,\r\n        \"1.\"\r\n        \"00000000000000001394611380411992443797416585698663833111209417090968048942613054363840851307860572420979515339\"\r\n        \"94970114644654884736372209103405747575829469070323477468267148252340789498643218406108321555742482136935814846\"\r\n        \"1498195609632794214e+240\"},\r\n    {0x1.7fec216198ddbp+800, chars_format::general, 241,\r\n        \"99999999999999990290136652537887930994008760735314333955549619064668969483527317902790679314770279031098318159\"\r\n        \"34611625736079804963132210640075447162592094208400778225784148066048873590175516339020228538451571779510840981\"\r\n        \"320420868670460264448\"},\r\n    {0x1.7fec216198ddcp+800, chars_format::general, 241,\r\n        \"1.\"\r\n        \"00000000000000005096102956370027281398552527353113666163096016433067742095641633184190908638890670217606581066\"\r\n        \"81756277614179911327452208591182514380241927357631043882428148314438094801465785761804352561506118922744139467\"\r\n        \"7596191250608858071e+241\"},\r\n    {0x1.dfe729b9ff152p+803, chars_format::general, 242,\r\n        \"99999999999999993251329913304315801074917514058874200397058898538348724005950180959070725179594357268399970740\"\r\n        \"84040556111699826235996210230296860606122060838246831357112948115726717832433570223577053343062481208157500678\"\r\n        \"6082605199485453729792\"},\r\n    {0x1.dfe729b9ff153p+803, chars_format::general, 242,\r\n        \"1.\"\r\n        \"00000000000000005096102956370027281398552527353113666163096016433067742095641633184190908638890670217606581066\"\r\n        \"81756277614179911327452208591182514380241927357631043882428148314438094801465785761804352561506118922744139467\"\r\n        \"759619125060885807104e+242\"},\r\n    {0x1.2bf07a143f6d3p+807, chars_format::general, 243,\r\n        \"99999999999999988513420696078031208945463508741178414090644051380461116770073600069022651795875832088717326610\"\r\n        \"44954267510707792199413810885942599096474114230493146346986868036242167044820684008286133655685026122322845162\"\r\n        \"94771707790360919932928\"},\r\n    {0x1.2bf07a143f6d4p+807, chars_format::general, 243,\r\n        \"1.\"\r\n        \"00000000000000007465057564983169577463279530011961559316303440012011545713579923629214945330749932807447903132\"\r\n        \"01299421914675928345743408263359645135065900661507886387491188354180370195272228869449812405194846465661467225\"\r\n        \"589890846083353893929e+243\"},\r\n    {0x1.76ec98994f488p+810, chars_format::general, 244,\r\n        \"99999999999999992303748069859058882649026712995335043135775929106771202558774864781061110502850652232463441914\"\r\n        \"76223298391501419428679730361426008304192471516696094355087732099829807674910992980518869405586990190990569575\"\r\n        \"476151831539558138249216\"},\r\n    {0x1.76ec98994f489p+810, chars_format::general, 244,\r\n        \"1.\"\r\n        \"00000000000000007465057564983169577463279530011961559316303440012011545713579923629214945330749932807447903132\"\r\n        \"01299421914675928345743408263359645135065900661507886387491188354180370195272228869449812405194846465661467225\"\r\n        \"58989084608335389392896e+244\"},\r\n    {0x1.d4a7bebfa31aap+813, chars_format::general, 245,\r\n        \"99999999999999992303748069859058882649026712995335043135775929106771202558774864781061110502850652232463441914\"\r\n        \"76223298391501419428679730361426008304192471516696094355087732099829807674910992980518869405586990190990569575\"\r\n        \"4761518315395581382492160\"},\r\n    {0x1.d4a7bebfa31abp+813, chars_format::general, 245,\r\n        \"1.\"\r\n        \"00000000000000004432795665958347438500428966608636256080197937830963477082618911859584178365170076692451010888\"\r\n        \"56284197210041026562330672682972917768891214832545527981010497103310257691199981691663623805273275210727287695\"\r\n        \"567143043174594742793011e+245\"},\r\n    {0x1.24e8d737c5f0ap+817, chars_format::general, 246,\r\n        \"99999999999999987452129031419343460308465811550014557958007125617094292749237245949651883357922882448468414325\"\r\n        \"24198938864085576575219353432807244518312974190356320904718626098437627668395397496060967645712476183095882327\"\r\n        \"43975534688554349643169792\"},\r\n    {0x1.24e8d737c5f0bp+817, chars_format::general, 246,\r\n        \"1.\"\r\n        \"00000000000000006858605185178205149670709417331296498669082339575801931987387721275288791937633961584448524683\"\r\n        \"32296376973748947989060861147282299661830963495715414706195050104006347694457779433892574685210532214674631319\"\r\n        \"5853412855016020637017702e+246\"},\r\n    {0x1.6e230d05b76cdp+820, chars_format::general, 247,\r\n        \"99999999999999995214719492922888136053363253862527334242437211200577348444497436079906646789807314102860458468\"\r\n        \"47437914107950925140755956518597266575720169912499958425309195700665115678820350271193610461511698595727381924\"\r\n        \"297989722331966923339726848\"},\r\n    {0x1.6e230d05b76cep+820, chars_format::general, 247,\r\n        \"1.\"\r\n        \"00000000000000010739900415929977487543158138487552886811297382367543459835017816340416173653576177411644546754\"\r\n        \"93915864595681622271829162690177310690534561356787233466490334905120091699670255821458896093110143420990381118\"\r\n        \"0144584732248137771557847e+247\"},\r\n    {0x1.c9abd04725480p+823, chars_format::general, 248,\r\n        \"99999999999999992109683308321470265755404276937522223728665176967184126166393360027804741417053541441103640811\"\r\n        \"18142324010404785714541315284281257752757291623642503417072967859774120474650369161140553335192009630674782085\"\r\n        \"5546959721533975525765152768\"},\r\n    {0x1.c9abd04725481p+823, chars_format::general, 248,\r\n        \"1.\"\r\n        \"00000000000000004529828046727141746947240184637542665783753313900757015278809664236212362908068632088130911440\"\r\n        \"35324684400589343419399880221545293044608804779072323450017879223338101291330293601352781840470765490885181440\"\r\n        \"527870972867675035629361562e+248\"},\r\n    {0x1.1e0b622c774d0p+827, chars_format::general, 249,\r\n        \"99999999999999992109683308321470265755404276937522223728665176967184126166393360027804741417053541441103640811\"\r\n        \"18142324010404785714541315284281257752757291623642503417072967859774120474650369161140553335192009630674782085\"\r\n        \"55469597215339755257651527680\"},\r\n    {0x1.1e0b622c774d1p+827, chars_format::general, 249,\r\n        \"1.\"\r\n        \"00000000000000011981914889770544635662341729257554931016806196060900748746259446761256935802677686476347273817\"\r\n        \"85634100634700078042315019183903714219719712672330215469784826041476489781338248265480118943638019007011421053\"\r\n        \"5117759732962415254610693325e+249\"},\r\n    {0x1.658e3ab795204p+830, chars_format::general, 250,\r\n        \"99999999999999992109683308321470265755404276937522223728665176967184126166393360027804741417053541441103640811\"\r\n        \"18142324010404785714541315284281257752757291623642503417072967859774120474650369161140553335192009630674782085\"\r\n        \"554695972153397552576515276800\"},\r\n    {0x1.658e3ab795205p+830, chars_format::general, 250,\r\n        \"1.\"\r\n        \"00000000000000008007468573480729761680954238793548389559177992242157424230286229414566496925552857469298547216\"\r\n        \"52135745309841019576760278403979222926327228462592673059242454405136015920000672444612205821948817131744093259\"\r\n        \"92035997306767273088415852134e+250\"},\r\n    {0x1.bef1c9657a685p+833, chars_format::general, 251,\r\n        \"99999999999999992109683308321470265755404276937522223728665176967184126166393360027804741417053541441103640811\"\r\n        \"18142324010404785714541315284281257752757291623642503417072967859774120474650369161140553335192009630674782085\"\r\n        \"5546959721533975525765152768000\"},\r\n    {0x1.bef1c9657a686p+833, chars_format::general, 251,\r\n        \"1.\"\r\n        \"00000000000000004827911520448877862495844246422343156393075429187162764617507655537214145823852994263659565935\"\r\n        \"45337061049953772804316485780039629891613241094802639130808557096063636830930611787917875324597455631530231025\"\r\n        \"047227172884817695222629872435e+251\"},\r\n    {0x1.17571ddf6c813p+837, chars_format::general, 252,\r\n        \"99999999999999989566037665895988746407316283040558037195783126523188398476170500925922860535693650876592455786\"\r\n        \"32703376602494988296586281185129583324986101729410476274325850012516217203394320635785088937310920430503692297\"\r\n        \"65618973200711352404729235767296\"},\r\n    {0x1.17571ddf6c814p+837, chars_format::general, 252,\r\n        \"1.\"\r\n        \"00000000000000009915202805299840901192020234216271529458839530075154219997953373740977907586572775392681935985\"\r\n        \"16214955865773367640226553978342978747155620883266693416302792790579443373442708838628804120359634031872410600\"\r\n        \"8442396531773857522810757106893e+252\"},\r\n    {0x1.5d2ce55747a18p+840, chars_format::general, 253,\r\n        \"99999999999999993635870693776759177364257073275700735648394407233581562780527075488933869945869475779810351826\"\r\n        \"09405692455150664165314335743772262409420005560181719702721238568128862437403998276353831973920663150777435958\"\r\n        \"293799716241167969694049028276224\"},\r\n    {0x1.5d2ce55747a19p+840, chars_format::general, 253,\r\n        \"1.\"\r\n        \"00000000000000009915202805299840901192020234216271529458839530075154219997953373740977907586572775392681935985\"\r\n        \"16214955865773367640226553978342978747155620883266693416302792790579443373442708838628804120359634031872410600\"\r\n        \"84423965317738575228107571068928e+253\"},\r\n    {0x1.b4781ead1989ep+843, chars_format::general, 254,\r\n        \"99999999999999993635870693776759177364257073275700735648394407233581562780527075488933869945869475779810351826\"\r\n        \"09405692455150664165314335743772262409420005560181719702721238568128862437403998276353831973920663150777435958\"\r\n        \"2937997162411679696940490282762240\"},\r\n    {0x1.b4781ead1989fp+843, chars_format::general, 254,\r\n        \"1.\"\r\n        \"00000000000000006659336382995224556426467602028157370696750505506839688554468114090569100058432115470107619153\"\r\n        \"34853103183648826945244110331428835479608497818649698673586481946089327186234966726173809691071839855653415672\"\r\n        \"334151665790142195763670374206669e+254\"},\r\n    {0x1.10cb132c2ff63p+847, chars_format::general, 255,\r\n        \"99999999999999998845256969464145328989141284776683389667736846542884813090103490929587961990894531655929258756\"\r\n        \"99584656746549929277286245578834891637495402463568911291067335919313048336936385656281823060781133832727827843\"\r\n        \"90994049606075766012189756664840192\"},\r\n    {0x1.10cb132c2ff64p+847, chars_format::general, 255,\r\n        \"1.\"\r\n        \"00000000000000019682802072213689935488678130780614005745106603780097814328409152692204330170994755160404886480\"\r\n        \"60300513912146989725173884919085408549796990077117677644451725324049791935065935175993787408223016560529395386\"\r\n        \"3745036153391164218332917201371136e+255\"},\r\n    {0x1.54fdd7f73bf3bp+850, chars_format::general, 256,\r\n        \"99999999999999986342729907814418565089419177174325020021314992200557012347120093872018141082834397553243882122\"\r\n        \"83155142447191693008553661974684581490114449895439651479036702276471002178058655944454644452316004196046887318\"\r\n        \"431202624493742403095061074555174912\"},\r\n    {0x1.54fdd7f73bf3cp+850, chars_format::general, 256,\r\n        \"1.\"\r\n        \"00000000000000003012765990014054250289048653977469512883210797990327413337764623282111235626914576356824384301\"\r\n        \"71727828179669341366863773446884995019955719986278664561744213800260397056562295560224215930269510378288141352\"\r\n        \"40285311991642941246417639734614426e+256\"},\r\n    {0x1.aa3d4df50af0ap+853, chars_format::general, 257,\r\n        \"99999999999999989676737124254345702129345072534953918593694153358511092545248999754036759991650433313959982558\"\r\n        \"60869679593687222680215684269124664196082703913607454095578204581228881153759383867608558747906705432495138125\"\r\n        \"2255327235782798049688841391133687808\"},\r\n    {0x1.aa3d4df50af0bp+853, chars_format::general, 257,\r\n        \"1.\"\r\n        \"00000000000000003012765990014054250289048653977469512883210797990327413337764623282111235626914576356824384301\"\r\n        \"71727828179669341366863773446884995019955719986278664561744213800260397056562295560224215930269510378288141352\"\r\n        \"402853119916429412464176397346144256e+257\"},\r\n    {0x1.0a6650b926d66p+857, chars_format::general, 258,\r\n        \"99999999999999984342325577950462282865463639957947680877887495505784564228242750342806969737544776096814221861\"\r\n        \"36526420159294375205556448598020531866533497484538969909111800893616274792638219190562295874961583454177936834\"\r\n        \"35460456504301996197076723582025859072\"},\r\n    {0x1.0a6650b926d67p+857, chars_format::general, 258,\r\n        \"1.\"\r\n        \"00000000000000005679971763165995959920989370265972631741114126916690677496267747987726130753967404965397264650\"\r\n        \"33899457896865765104193391282437061184730323200812906654977415644066700237122877898747347366742071367446741997\"\r\n        \"838317199184059333963234848992699351e+258\"},\r\n    {0x1.4cffe4e7708c0p+860, chars_format::general, 259,\r\n        \"99999999999999992877384052036675753687673932081157661223178148070147009535452749400774634144113827644247438976\"\r\n        \"95475635254322931165011225671787143593812227771048544607458046793796444970432082673836316471673778619485458899\"\r\n        \"748089618699435710767754281089234894848\"},\r\n    {0x1.4cffe4e7708c1p+860, chars_format::general, 259,\r\n        \"1.\"\r\n        \"00000000000000009947501000209102695332094516327577621913759453198871900149872747516709962957251930739113873208\"\r\n        \"13374065444380043083920779819320367048369688344067694004150538594156785326019809640384357665098168950100503030\"\r\n        \"5350597260122672083617283716271875031e+259\"},\r\n    {0x1.a03fde214caf0p+863, chars_format::general, 260,\r\n        \"99999999999999992877384052036675753687673932081157661223178148070147009535452749400774634144113827644247438976\"\r\n        \"95475635254322931165011225671787143593812227771048544607458046793796444970432082673836316471673778619485458899\"\r\n        \"7480896186994357107677542810892348948480\"},\r\n    {0x1.a03fde214caf1p+863, chars_format::general, 260,\r\n        \"1.\"\r\n        \"00000000000000006533477610574617307003210399478293629775643192173126922026988747893522897194624310120140586361\"\r\n        \"89794379406368620700138868989813722357458196229463864124812040234084717254902264247074749426413290883977494204\"\r\n        \"377665704549700908842933553519596981453e+260\"},\r\n    {0x1.0427ead4cfed6p+867, chars_format::general, 261,\r\n        \"99999999999999992877384052036675753687673932081157661223178148070147009535452749400774634144113827644247438976\"\r\n        \"95475635254322931165011225671787143593812227771048544607458046793796444970432082673836316471673778619485458899\"\r\n        \"74808961869943571076775428108923489484800\"},\r\n    {0x1.0427ead4cfed7p+867, chars_format::general, 261,\r\n        \"1.\"\r\n        \"00000000000000014727133745697382238992532279916575210907122218634914869521910346989171855024930599605676474792\"\r\n        \"86385625897596034421215454980629669615645777304513055835224436298257680625584373191017809199256998242672715387\"\r\n        \"1554113560598600276880411169778142334157e+261\"},\r\n    {0x1.4531e58a03e8bp+870, chars_format::general, 262,\r\n        \"99999999999999984137484174572393159565730592946990641349600519844239865540869710365415745791787118859675824650\"\r\n        \"59111638997013689862529533948250133185078807957662740116351490992011950708371166466963719380640490770210556304\"\r\n        \"785160923755265983999639546733803159420928\"},\r\n    {0x1.4531e58a03e8cp+870, chars_format::general, 262,\r\n        \"1.\"\r\n        \"00000000000000001617283929500958347809617271215324681096755776296054153530035788436133522496440536428819053303\"\r\n        \"31839631511632172467492917395324154002545647584434349098564602595580939232492998880708913562707066468760361494\"\r\n        \"71101831364360543753586901544466663027507e+262\"},\r\n    {0x1.967e5eec84e2ep+873, chars_format::general, 263,\r\n        \"99999999999999987633444125558106197214507928600657449299031571134602723138702925979559301132717802373504470381\"\r\n        \"13657237499937386383522210637664937348572175883017061912794113312725748413195532949712758217053805909920517342\"\r\n        \"7703324017329338747068854404759758535917568\"},\r\n    {0x1.967e5eec84e2fp+873, chars_format::general, 263,\r\n        \"1.\"\r\n        \"00000000000000001617283929500958347809617271215324681096755776296054153530035788436133522496440536428819053303\"\r\n        \"31839631511632172467492917395324154002545647584434349098564602595580939232492998880708913562707066468760361494\"\r\n        \"711018313643605437535869015444666630275072e+263\"},\r\n    {0x1.fc1df6a7a61bap+876, chars_format::general, 264,\r\n        \"99999999999999993226980047135247057452551665646524342018121253199183295295236070962188989678206895995630303550\"\r\n        \"00930195104615300817110493340728624010161564563583976787102309025867824740914519322111220355315110133456455003\"\r\n        \"54660676649720249983847887046345216426508288\"},\r\n    {0x1.fc1df6a7a61bbp+876, chars_format::general, 264,\r\n        \"1.\"\r\n        \"00000000000000004414051890289528777928639139738258127456300617328344439608302360927448366769185083239881969887\"\r\n        \"75476110313971129684287058746855997333340341924717806535718700452151977396352492066908144631837718580528330325\"\r\n        \"099155496025739750101665730438404785611735e+264\"},\r\n    {0x1.3d92ba28c7d14p+880, chars_format::general, 265,\r\n        \"99999999999999988752151309873534369262116676009830827842849507547518837570009554976085238841815621097929637014\"\r\n        \"91111829020872969270239867178277674680890053619130444887655752455354163678739330224192450644706066754627704874\"\r\n        \"925587274685787599733204126473471115726422016\"},\r\n    {0x1.3d92ba28c7d15p+880, chars_format::general, 265,\r\n        \"1.\"\r\n        \"00000000000000006651466258920385122023856634556604884543936490154176668470915618920500242187380720688732303155\"\r\n        \"30385293355842295457722371828081471997976097396944572485441978737408807927440086615867529487142240269942705389\"\r\n        \"40966524193144720015430310243339530988106547e+265\"},\r\n    {0x1.8cf768b2f9c59p+883, chars_format::general, 266,\r\n        \"99999999999999988752151309873534369262116676009830827842849507547518837570009554976085238841815621097929637014\"\r\n        \"91111829020872969270239867178277674680890053619130444887655752455354163678739330224192450644706066754627704874\"\r\n        \"9255872746857875997332041264734711157264220160\"},\r\n    {0x1.8cf768b2f9c5ap+883, chars_format::general, 266,\r\n        \"1.\"\r\n        \"00000000000000003071603269111014971471508642847250073203719093632845102290734406131617241518267700770571769927\"\r\n        \"22530600488848430220225870898120712534558888641381746965884733480997879077699935337532513718655005566879705286\"\r\n        \"512849648482315280070083307241410471050136781e+266\"},\r\n    {0x1.f03542dfb8370p+886, chars_format::general, 267,\r\n        \"99999999999999997343822485416022730587751856112282375059371259198714596402444465669404440447686868901514916762\"\r\n        \"29963091901658245840231469410183497393091354632481226134593141070740392918115693292196488489075430041978905121\"\r\n        \"87794469896370420793533163493423472892065087488\"},\r\n    {0x1.f03542dfb8371p+886, chars_format::general, 267,\r\n        \"1.\"\r\n        \"00000000000000008799384052806007212355265429582217771348066928066975608179024346593830042588848532639628623092\"\r\n        \"15098109076038614600220272386057927676026422650282267797176325891255365237284177382868538948234581091780505451\"\r\n        \"1477545980009263522048349795485862131796226867e+267\"},\r\n    {0x1.362149cbd3226p+890, chars_format::general, 268,\r\n        \"99999999999999997343822485416022730587751856112282375059371259198714596402444465669404440447686868901514916762\"\r\n        \"29963091901658245840231469410183497393091354632481226134593141070740392918115693292196488489075430041978905121\"\r\n        \"877944698963704207935331634934234728920650874880\"},\r\n    {0x1.362149cbd3227p+890, chars_format::general, 268,\r\n        \"1.\"\r\n        \"00000000000000015672720993239997901415773573664179009121284329387932215244972275148485403873545530882496846890\"\r\n        \"06179119380666835856213554171582585845787463460962892794726236783564348628785267837271769223730071721661465648\"\r\n        \"70964053742325963876653698631719710373500577382e+268\"},\r\n    {0x1.83a99c3ec7eafp+893, chars_format::general, 269,\r\n        \"99999999999999990012263082286432662256543169091523721434606031123027548865433341877772055077343404109122144711\"\r\n        \"19476680910054809833838635505623862012012911101088559470539902785610810633847863474166376195213573370105880911\"\r\n        \"1452663635798820356028494943810497789949089153024\"},\r\n    {0x1.83a99c3ec7eb0p+893, chars_format::general, 269,\r\n        \"1.\"\r\n        \"00000000000000004675381888545612798918960543133041028684136487274401643939455589461036825818030333693907688813\"\r\n        \"40449502893261681846624303314743132774169798163873892798646379355869975202383523110226600782937286713851929332\"\r\n        \"610623034347526380267813775487419678846392834458e+269\"},\r\n    {0x1.e494034e79e5bp+896, chars_format::general, 270,\r\n        \"99999999999999992944886843538268689589026643899827182884512122353302367880237791394425009225480790026079253531\"\r\n        \"63671245306696184236395769067447716164444288513645626136161198099662643547554995401378421112758316038855090595\"\r\n        \"43833769773341090453584235060232375896520569913344\"},\r\n    {0x1.e494034e79e5cp+896, chars_format::general, 270,\r\n        \"1.\"\r\n        \"00000000000000004675381888545612798918960543133041028684136487274401643939455589461036825818030333693907688813\"\r\n        \"40449502893261681846624303314743132774169798163873892798646379355869975202383523110226600782937286713851929332\"\r\n        \"6106230343475263802678137754874196788463928344576e+270\"},\r\n    {0x1.2edc82110c2f9p+900, chars_format::general, 271,\r\n        \"99999999999999995290985852539737511455013423746469952044436995337522223092081351007747372543990698759644940587\"\r\n        \"99026896824009283758441475916906799486389390443691279468658234350904109878520700943148057046794110173854458342\"\r\n        \"872794765056233999682236635579342942941443126198272\"},\r\n    {0x1.2edc82110c2fap+900, chars_format::general, 271,\r\n        \"1.\"\r\n        \"00000000000000014059777924551488086382907662519612105323835979211281064786829827914326279092069968628170437038\"\r\n        \"81872108962514079934807130712579466061950205884056506128634524360835840526246345277305144519080463253849400322\"\r\n        \"34845130363881876085339091539549641475134254271693e+271\"},\r\n    {0x1.7a93a2954f3b7p+903, chars_format::general, 272,\r\n        \"99999999999999991537227438137387396469434575991841521388557198562770454753131655626431591234374844785939841297\"\r\n        \"82457854396308324523168344957772266171277227355618234136662976348917763748975572076316639552336839557855469946\"\r\n        \"9776634573397170474480057796161122485794632428945408\"},\r\n    {0x1.7a93a2954f3b8p+903, chars_format::general, 272,\r\n        \"1.\"\r\n        \"00000000000000006552261095746787856411749967010355244012076385661777528108930437151694716472838260680760238458\"\r\n        \"48734024107112161464260868794310399431725879707910415464644008356863148267156087543642309530165922021851423530\"\r\n        \"558188688205784856384929203469035026027382776109466e+272\"},\r\n    {0x1.d9388b3aa30a5p+906, chars_format::general, 273,\r\n        \"99999999999999994540234169659267488457897654195544265913261035982571869424291411931484216282067527964903920729\"\r\n        \"95713088338469091911386849725079892823366957826076670402259182750506840652611675169781773547902656050654660663\"\r\n        \"69376850351293060923539046438669680406904714953752576\"},\r\n    {0x1.d9388b3aa30a6p+906, chars_format::general, 273,\r\n        \"1.\"\r\n        \"00000000000000006552261095746787856411749967010355244012076385661777528108930437151694716472838260680760238458\"\r\n        \"48734024107112161464260868794310399431725879707910415464644008356863148267156087543642309530165922021851423530\"\r\n        \"5581886882057848563849292034690350260273827761094656e+273\"},\r\n    {0x1.27c35704a5e67p+910, chars_format::general, 274,\r\n        \"99999999999999992137828784441763414867127191632582070293497966046730737687363606887442116243913381421732657184\"\r\n        \"25108901184740478000812045911233791501695173449709921389782217629235579129702792695009666351450002856415308090\"\r\n        \"320884466574359759805482716570229159677380024223137792\"},\r\n    {0x1.27c35704a5e68p+910, chars_format::general, 274,\r\n        \"1.\"\r\n        \"00000000000000011357071866181796003593290892136279635251602525533459791582786047239778916549146553767102765549\"\r\n        \"89942398414569389285410476422002602075069448460643913489597938599405671312973852493186523923071228410330128677\"\r\n        \"30395676208292655524474469910197031481071702673824154e+274\"},\r\n    {0x1.71b42cc5cf601p+913, chars_format::general, 275,\r\n        \"99999999999999995981677400789769932612359931733321583285118877944076548466448094957909476304960015890806678857\"\r\n        \"38075600630706260257731732013387553616370028451896719809745361823269597566357004654645037865774247967198272207\"\r\n        \"7174989256760731188933351130765773907040474247261585408\"},\r\n    {0x1.71b42cc5cf602p+913, chars_format::general, 275,\r\n        \"1.\"\r\n        \"00000000000000011357071866181796003593290892136279635251602525533459791582786047239778916549146553767102765549\"\r\n        \"89942398414569389285410476422002602075069448460643913489597938599405671312973852493186523923071228410330128677\"\r\n        \"303956762082926555244744699101970314810717026738241536e+275\"},\r\n    {0x1.ce2137f743381p+916, chars_format::general, 276,\r\n        \"99999999999999992906598507711364718416173739652729972891822148426199899843180504501535588256122708315547461518\"\r\n        \"87702241073933634452195983131664543924630144450147281073774846468042382817033635086936740654314851878571900913\"\r\n        \"80020735839470243162305319587149880588271350432374194176\"},\r\n    {0x1.ce2137f743382p+916, chars_format::general, 276,\r\n        \"1.\"\r\n        \"00000000000000005206914080024985575200918507975096414465009066497706494336250866327031140451471938616584330872\"\r\n        \"89195679301024137674338978658556582691589680457145036017656907888951241814327113357769929500152436233077386089\"\r\n        \"4693736275201851807041808646918131451680491859334083379e+276\"},\r\n    {0x1.20d4c2fa8a030p+920, chars_format::general, 277,\r\n        \"99999999999999980606282935397743861631428971330363531318635230354693305350110142676040036060773478014510592164\"\r\n        \"86208802846843131230052987604772505157670608443149526129892785047133523819740156816103551808477267524066415738\"\r\n        \"131041089269219682541925527051184466597377822714075545600\"},\r\n    {0x1.20d4c2fa8a031p+920, chars_format::general, 277,\r\n        \"1.\"\r\n        \"00000000000000000286787851099537232487020600646149837835734299269103856539022721596832919573332246496169583131\"\r\n        \"28598304010187936385481780447799767184805866054345934040104083320587698215409722049436653961817402491275192019\"\r\n        \"20170711986999208107172979716368740945391491328954177946e+277\"},\r\n    {0x1.6909f3b92c83dp+923, chars_format::general, 278,\r\n        \"99999999999999996350686867959178558315902274782992576532314485486221746301240205812674342870820492799837784938\"\r\n        \"00120403777518975354396021879194314779378814532106652458061823665896863336275809002770033531149375497833436762\"\r\n        \"9875739137498376013657689431411868208826074951744485326848\"},\r\n    {0x1.6909f3b92c83ep+923, chars_format::general, 278,\r\n        \"1.\"\r\n        \"00000000000000012095090800520613255000375578235621621745993740617750187252370268949308649680867507585164977711\"\r\n        \"14032004708194819478739056153616124401087020621063778786230862284660202852811461189436515253821483471600457787\"\r\n        \"84410673823045552018961235923118917516783716763482151977e+278\"},\r\n    {0x1.c34c70a777a4cp+926, chars_format::general, 279,\r\n        \"99999999999999993201806081446891618979007614092466767489578634459916058111014193185347481508811089842772346383\"\r\n        \"37338083591383806529527415024309952855037173314315227192428015942144195432968678565436737186614953903080032558\"\r\n        \"01626734885371401760100025992318635002556156068237393526784\"},\r\n    {0x1.c34c70a777a4dp+926, chars_format::general, 279,\r\n        \"1.\"\r\n        \"00000000000000005797329227496039376326586256854570003660522038565138810871918243694654926956848701671034100601\"\r\n        \"88467364335924481829001842443847400552403738185480928254963246837154867046197200314769922564752640282093649377\"\r\n        \"9014936084382083526600749927951882334537452986506723249357e+279\"},\r\n    {0x1.1a0fc668aac6fp+930, chars_format::general, 280,\r\n        \"99999999999999983125387564607573413100944699882784178552823911175737855902290952777901525150381000380162943008\"\r\n        \"56434658995751266289947873088679994697143921417382666342399831226135658142385861165970188884104804799869139102\"\r\n        \"108086341186118549553740473625584843283014570307735223533568\"},\r\n    {0x1.1a0fc668aac70p+930, chars_format::general, 280,\r\n        \"1.\"\r\n        \"00000000000000003278224598286209824857070528302149356426333357744094260319737433592793437867241179305381749758\"\r\n        \"18241508187016346769106956959939911012930425211247788042456200658152732723551495964903285489125103006290926013\"\r\n        \"92444835652130948564826004622078785676810855105701264700211e+280\"},\r\n    {0x1.6093b802d578bp+933, chars_format::general, 281,\r\n        \"99999999999999987155954971343300695452169865566657214127525800489409136785780248940879907693753036165206704358\"\r\n        \"48796028834004282385779689862931977960301222176155690682411105112539073058618988125756808205108864441153496484\"\r\n        \"4713587442531567367726443881446254459800333664575907082272768\"},\r\n    {0x1.6093b802d578cp+933, chars_format::general, 281,\r\n        \"1.\"\r\n        \"00000000000000003278224598286209824857070528302149356426333357744094260319737433592793437867241179305381749758\"\r\n        \"18241508187016346769106956959939911012930425211247788042456200658152732723551495964903285489125103006290926013\"\r\n        \"924448356521309485648260046220787856768108551057012647002112e+281\"},\r\n    {0x1.b8b8a6038ad6ep+936, chars_format::general, 282,\r\n        \"99999999999999990380408896731882521333149998113755642587287311940346161492571685871262613728450664793241713438\"\r\n        \"42685124704606695262445143282333564570827062783174110154420124221661804991605489693586103661912112154180982390\"\r\n        \"36197666670678728654776751975985792813764840337747509598224384\"},\r\n    {0x1.b8b8a6038ad6fp+936, chars_format::general, 282,\r\n        \"1.\"\r\n        \"00000000000000003278224598286209824857070528302149356426333357744094260319737433592793437867241179305381749758\"\r\n        \"18241508187016346769106956959939911012930425211247788042456200658152732723551495964903285489125103006290926013\"\r\n        \"924448356521309485648260046220787856768108551057012647002112e+282\"},\r\n    {0x1.137367c236c65p+940, chars_format::general, 283,\r\n        \"99999999999999995539535177353613442742718210189113128122905730261845401023437984959874943383966870598097727966\"\r\n        \"32907678097570555865109868753376103147668407754403581309634554796258176084383892202112976392797308495024959839\"\r\n        \"786965342632596166187964530344229899589832462449290116390191104\"},\r\n    {0x1.137367c236c66p+940, chars_format::general, 283,\r\n        \"1.\"\r\n        \"00000000000000016176040299840537128380991058490543070265379403547842359146903181314324262006031693817521786077\"\r\n        \"93797891669425998275768770637546257455033787639321465930492277094643660455497502236220467316338093858400869637\"\r\n        \"48692004633583168474875257268171778539856869873655019802198016e+283\"},\r\n    {0x1.585041b2c477ep+943, chars_format::general, 284,\r\n        \"99999999999999991412234152856228705615063640528827139694410995604646009398744945688985079659553905954212916344\"\r\n        \"00729635383199467382978088376542072286195331777420004385463010336581079210161170195291478208089151422349777880\"\r\n        \"2469744018919490624758069218767323224280852151918381000638332928\"},\r\n    {0x1.585041b2c477fp+943, chars_format::general, 284,\r\n        \"1.\"\r\n        \"00000000000000007921438250845767654125681919169971093408389934233443575897517102772544534557205764529752162833\"\r\n        \"29441806240683821311505209883878195732087635685354312082149188175289466707052058222577470946921779713050505718\"\r\n        \"406938164854537477324437355746722631075074204221646165369264538e+284\"},\r\n    {0x1.ae64521f7595ep+946, chars_format::general, 285,\r\n        \"99999999999999998015915792052044285019310951985284721180002571056165035998253808522408861618614649384428614939\"\r\n        \"72214503726193208954388936979476521664552253340593727464137481472064434208917525406205875303622202738630069015\"\r\n        \"51095990707698442841525909542472844588688081080376132618600579072\"},\r\n    {0x1.ae64521f7595fp+946, chars_format::general, 285,\r\n        \"1.\"\r\n        \"00000000000000011223279070443675443827805574898199884151185721959203089197271534189256425536736136244860012131\"\r\n        \"15184240412180692097210634185345420421266096466941173621486423743031144206430235828034669494688305371190651286\"\r\n        \"0389309174470551602941634425207206928044720020276077784303507866e+285\"},\r\n    {0x1.0cfeb353a97dap+950, chars_format::general, 286,\r\n        \"99999999999999982167079857982086894449117404489786525614582789972519372159432537722191784916868865151910938310\"\r\n        \"00650819703008229183002900332433843156495641588976792075318750746904382211902272900011322274342879579557370290\"\r\n        \"877394694632899550160573878909537749585771381335145583492791795712\"},\r\n    {0x1.0cfeb353a97dbp+950, chars_format::general, 286,\r\n        \"1.\"\r\n        \"00000000000000003298861103408696748542708801150450786368475831417380257277860898789147887185863244128601173816\"\r\n        \"29402398400588202211517615861824081167237790591132705927077058380451118207922609574937392980048643791654301923\"\r\n        \"72214831122501272116682083426312534465391728729329990708374378906e+286\"},\r\n    {0x1.503e602893dd1p+953, chars_format::general, 287,\r\n        \"99999999999999990619792356152730836086553963154052229916140006550463726206803882148974225824466616742587032512\"\r\n        \"52151451182040218394408786544189938360792501189839157616022073800323076610310407569981750556625185264396142944\"\r\n        \"0152961412697448185630726610509727876130297437184073129291725930496\"},\r\n    {0x1.503e602893dd2p+953, chars_format::general, 287,\r\n        \"1.\"\r\n        \"00000000000000007525217352494018719361427080482583638519254439706352434301546571002539107639662119923939220917\"\r\n        \"55152714140104196817220558967702128769386220391563888697428719907160465407126676909922607121189796634073688250\"\r\n        \"291099034543435355368070225333842863667546468484930771801934187725e+287\"},\r\n    {0x1.a44df832b8d45p+956, chars_format::general, 288,\r\n        \"99999999999999987238707356884473259431579339688345948195517119919285984587855344378261249461427516106316594831\"\r\n        \"51551198590427422709846432059487500279073757349494211399740744578955598850947153701993579243712262990460633882\"\r\n        \"76013556261500671120207314819439877240212639876510262115462027411456\"},\r\n    {0x1.a44df832b8d46p+956, chars_format::general, 288,\r\n        \"1.\"\r\n        \"00000000000000000763047353957503566051477833551171075078008666443996951063649495461113154913583918651398345555\"\r\n        \"53952208956878605448095849998297252605948732710873996264866061464425509888400169173946264495363952086202670127\"\r\n        \"7807778772339591406460711996206948332457397785783213882528295498547e+288\"},\r\n    {0x1.06b0bb1fb384bp+960, chars_format::general, 289,\r\n        \"99999999999999984533839357469867198107599640915780922819018810614343791292696514161690868370996235597300244686\"\r\n        \"71070996517137186162196548471725549813698762277218254426715681201861616643456550607603042193381925171312226633\"\r\n        \"756007099691216225313273537909139560233403722802458867734978418966528\"},\r\n    {0x1.06b0bb1fb384cp+960, chars_format::general, 289,\r\n        \"1.\"\r\n        \"00000000000000006172783352786715688699437231096301125831005285053881337653967155894253917094446479669431045845\"\r\n        \"14912613103459078543395617173821153536698722855425910210916188218613474303381375362727338596024627724499484625\"\r\n        \"78903480308154011242367042019121325758318513050360889509211326015078e+289\"},\r\n    {0x1.485ce9e7a065ep+963, chars_format::general, 290,\r\n        \"99999999999999988861628156533236896225967158951884963421416105502251300564950642508203478115686284411726404918\"\r\n        \"39839319834401564638436362212144670558298754392859785583555782605211988175441515558627901473910465681949678232\"\r\n        \"1626126403692810027353529143655542997033600043426888732064053872033792\"},\r\n    {0x1.485ce9e7a065fp+963, chars_format::general, 290,\r\n        \"1.\"\r\n        \"00000000000000006172783352786715688699437231096301125831005285053881337653967155894253917094446479669431045845\"\r\n        \"14912613103459078543395617173821153536698722855425910210916188218613474303381375362727338596024627724499484625\"\r\n        \"789034803081540112423670420191213257583185130503608895092113260150784e+290\"},\r\n    {0x1.9a742461887f6p+966, chars_format::general, 291,\r\n        \"99999999999999995786090235034628413215355187809651428385251777322903315400557247862623653707190362514808261289\"\r\n        \"09868637142024570200420064196815263749658741777886235434499944850572582626617459480267676322756130498969600789\"\r\n        \"61318150545418464661067991669581788285529005480705688196068853638234112\"},\r\n    {0x1.9a742461887f7p+966, chars_format::general, 291,\r\n        \"1.\"\r\n        \"00000000000000009635014392037411447194131245525184358312923120964207345071770458571464004890198518720971974030\"\r\n        \"49927271757270581324387468166156450132378716547939135136388269341293771528969347323547226020447460133009445904\"\r\n        \"514319235623991934361333921356345049159150155735792899469254834740265e+291\"},\r\n    {0x1.008896bcf54f9p+970, chars_format::general, 292,\r\n        \"99999999999999979167381246631288772440823918551011912472046164953338479795101395012015232287580575067411805999\"\r\n        \"41798275603729356851659179433605840090394772053822755792233955461707155943795194068332216685526534938121786651\"\r\n        \"731816229250415901309895111103185283290657933692573660950408978352832512\"},\r\n    {0x1.008896bcf54fap+970, chars_format::general, 292,\r\n        \"1.\"\r\n        \"00000000000000001325659897835741626806865610895864600356320314779424927269042532146159794180393624997273746385\"\r\n        \"65892090988122974650007025784551738302746731685907395315255274646861058187558214617579496201832662352585538835\"\r\n        \"57363659752210756171094151856002874937683409517855128896411505572551066e+292\"},\r\n    {0x1.40aabc6c32a38p+973, chars_format::general, 293,\r\n        \"99999999999999992462348437353960485060448933957923525202610654848990348279466077292501969423268405025328970231\"\r\n        \"16254564834365527530667887244173379017805947833073539506046746972799497290053006397880584395310211386800037962\"\r\n        \"0369084502134308975505229555772913629423636305841602377586326247764393984\"},\r\n    {0x1.40aabc6c32a39p+973, chars_format::general, 293,\r\n        \"1.\"\r\n        \"00000000000000010188971358317522768553282287833805675510029974709859506258618986999817618937518844969218522540\"\r\n        \"15529617141880421769346164324930097587687515538741251124463802320922619085063422837278408008355113318371039709\"\r\n        \"110364744830784225871360081542766135811304559772942340169597486674581914e+293\"},\r\n    {0x1.90d56b873f4c6p+976, chars_format::general, 294,\r\n        \"99999999999999992462348437353960485060448933957923525202610654848990348279466077292501969423268405025328970231\"\r\n        \"16254564834365527530667887244173379017805947833073539506046746972799497290053006397880584395310211386800037962\"\r\n        \"03690845021343089755052295557729136294236363058416023775863262477643939840\"},\r\n    {0x1.90d56b873f4c7p+976, chars_format::general, 294,\r\n        \"1.\"\r\n        \"00000000000000006643646774124810311854715617058629245448546110737685674662788405058354489034668756980440612078\"\r\n        \"35674606680377442921610508908778753873711201997607708800780391251297994726061339549398843285746132932056839359\"\r\n        \"6956734859073135602071926563496711812375163739351859196874045142949534106e+294\"},\r\n    {0x1.f50ac6690f1f8p+979, chars_format::general, 295,\r\n        \"99999999999999998134867772062300415778155607198205813300984837204468478832795008398842977267828545807373626970\"\r\n        \"04022581572770293687044935910015528960168049498887207223940204684198896264456339658487887951484580004902758521\"\r\n        \"100414464490983962613190835886243290260424727924570510530141380583845003264\"},\r\n    {0x1.f50ac6690f1f9p+979, chars_format::general, 295,\r\n        \"1.\"\r\n        \"00000000000000009479906441478980277213568953678770389497733201915424739939452870611524992956948827371462940447\"\r\n        \"79558615049579825999799033241699828844892252830514542659727120106997694213263006179702495063833317241108199639\"\r\n        \"22742649304609009273852659650414714489654692260539105607315889219865621299e+295\"},\r\n    {0x1.3926bc01a973bp+983, chars_format::general, 296,\r\n        \"99999999999999998134867772062300415778155607198205813300984837204468478832795008398842977267828545807373626970\"\r\n        \"04022581572770293687044935910015528960168049498887207223940204684198896264456339658487887951484580004902758521\"\r\n        \"1004144644909839626131908358862432902604247279245705105301413805838450032640\"},\r\n    {0x1.3926bc01a973cp+983, chars_format::general, 296,\r\n        \"1.\"\r\n        \"00000000000000016286929643128988194074816961567109135215782220741998496603447587939134202370420996309916528534\"\r\n        \"44880235135665545387451491640710408775726774829490943921199269360676972982547006092431259331242559582831464310\"\r\n        \"103633710179153770813728052874889457678220239413883383398969399167542938829e+296\"},\r\n    {0x1.87706b0213d09p+986, chars_format::general, 297,\r\n        \"99999999999999987243630649422287748800158794576863820152106407081950468170403460674668242206273075505847886031\"\r\n        \"39507989435033142666801002471598601070832814300524965205584765878312050233601939798121865123629792258145535047\"\r\n        \"69848291707808207769286850569305558980974742103098278680884456943362624192512\"},\r\n    {0x1.87706b0213d0ap+986, chars_format::general, 297,\r\n        \"1.\"\r\n        \"00000000000000001765280146275637971437487878071986477683944313911974482386925524306901222288347035907882207282\"\r\n        \"92194112285349344027126247056154504923279794565007954563392017619494511608074472945276562227436175920488499678\"\r\n        \"901058313628617924253298279283972523743983830222433085103906984300584590377e+297\"},\r\n    {0x1.e94c85c298c4cp+989, chars_format::general, 298,\r\n        \"99999999999999995956620347534297882382556244673937414671209151179964876700316698854008030255517451747068478782\"\r\n        \"31119663145222863482996149222332143382301002459214758820269116923021527058285459686414683385913622455551313826\"\r\n        \"420028155008403585629126369847605750170289266545852965785882018353801250996224\"},\r\n    {0x1.e94c85c298c4dp+989, chars_format::general, 298,\r\n        \"1.\"\r\n        \"00000000000000007573939945016978060492419511470035540696679476643984088073534349759794414321176620068695935783\"\r\n        \"53268561425475824571256344889976866464258586670801150306514918315967496157863486204138441068958729385425685531\"\r\n        \"3820884722488322628774701887203392973176783938990132044219319502473679297577e+298\"},\r\n    {0x1.31cfd3999f7afp+993, chars_format::general, 299,\r\n        \"99999999999999986662764669548153739894665631237058913850832890808749507601742578129378923002990117089766513181\"\r\n        \"33400544521020494612387992688216364916734935089945645631272475808664751778623038472235677239477536911651816462\"\r\n        \"4503799012160606438304513147494189124523779646633247748770420728389479079870464\"},\r\n    {0x1.31cfd3999f7b0p+993, chars_format::general, 299,\r\n        \"1.\"\r\n        \"00000000000000005250476025520442024870446858110815915491585411551180245798890819578637137508044786404370444383\"\r\n        \"28838781769425232353604305756447921847867069828483872009265758037378302337947880900593689532349707999450811190\"\r\n        \"389676408800746527427801424945792587888200568428381156694721963868654594005402e+299\"},\r\n    {0x1.7e43c8800759bp+996, chars_format::general, 300,\r\n        \"99999999999999990380306940742611396889821876611810314178983394957235655241172226419230565904001050952687299421\"\r\n        \"72488191970701442160631255301862676302961362037653290906871132254407461890488006957907279698051971129211615408\"\r\n        \"03823920273299782054992133678869364753954248541633605124057805104488924519071744\"},\r\n    {0x1.7e43c8800759cp+996, chars_format::general, 300,\r\n        \"1.\"\r\n        \"00000000000000005250476025520442024870446858110815915491585411551180245798890819578637137508044786404370444383\"\r\n        \"28838781769425232353604305756447921847867069828483872009265758037378302337947880900593689532349707999450811190\"\r\n        \"3896764088007465274278014249457925878882005684283811566947219638686545940054016e+300\"},\r\n    {0x1.ddd4baa009302p+999, chars_format::general, 301,\r\n        \"99999999999999993354340757698177522485946872911611434441503798276024573352715945051111880224809798043023928414\"\r\n        \"03758309930446200199225865392779725411942503595819407127350057411001629979979981746444561664911518503259454564\"\r\n        \"508526643946547561925497354420113435609274102018745072331406833609642314953654272\"},\r\n    {0x1.ddd4baa009303p+999, chars_format::general, 301,\r\n        \"1.\"\r\n        \"00000000000000005250476025520442024870446858110815915491585411551180245798890819578637137508044786404370444383\"\r\n        \"28838781769425232353604305756447921847867069828483872009265758037378302337947880900593689532349707999450811190\"\r\n        \"3896764088007465274278014249457925878882005684283811566947219638686545940054016e+301\"},\r\n    {0x1.2aa4f4a405be1p+1003, chars_format::general, 302,\r\n        \"99999999999999988595886650569271721532146878831929642021471152965962304374245995240101777311515802698485322026\"\r\n        \"33726121194854587337474489247312446837572677102753621174583777160450961036792822084784910517936242704782911914\"\r\n        \"1560667380048679757245757262098417746977035154548906385860807815060374033329553408\"},\r\n    {0x1.2aa4f4a405be2p+1003, chars_format::general, 302,\r\n        \"1.\"\r\n        \"00000000000000007629703079084894925347346855150656811701601734206211380288125794484142188964691784076639747577\"\r\n        \"13854876137221038784479993829181561135051983075016764985648898162653636809541460731423515105837345898689082515\"\r\n        \"565906361771586320528262239050928418343985861710308373567384989920457049815751066e+302\"},\r\n    {0x1.754e31cd072d9p+1006, chars_format::general, 303,\r\n        \"99999999999999984789123364866147080769106883568184208085445036717912489191470035391293694980880606422854436916\"\r\n        \"17700370206381297048073388330938623978076815908300992412370752960010425882243094355457189600356022066001677793\"\r\n        \"87409881325152430676383842364162444596844704620380709158981993982315347403639619584\"},\r\n    {0x1.754e31cd072dap+1006, chars_format::general, 303,\r\n        \"1.\"\r\n        \"00000000000000000016176507678645643821266864623165943829549501710111749922573874786526024303421391525377977356\"\r\n        \"81803374160274458205677791996433915416060260686111507461222849761772566500442005272768073270676904621126614275\"\r\n        \"0019705122648989826067876339144937608854729232081412795748633065546891912226327757e+303\"},\r\n    {0x1.d2a1be4048f90p+1009, chars_format::general, 304,\r\n        \"99999999999999993925355250553646218600402872201173249531907715713232045630132339028433092574405077484368561180\"\r\n        \"56162172578717193742636030530235798840866882774987301441682011041067710253162440905843719802548551599076639682\"\r\n        \"550821832659549112269607949805346034918662572406407604380845959862074904348138143744\"},\r\n    {0x1.d2a1be4048f91p+1009, chars_format::general, 304,\r\n        \"1.\"\r\n        \"00000000000000006106997764803645069042130857045158638127191287706991454215015410544618956032437705566387393533\"\r\n        \"07444575741831722668719553462632031991253638597235713480763688482477422747721569639692426738805257643176588867\"\r\n        \"45311919187024885294396731802364148685228327400987495476888065324730347809712740762e+304\"},\r\n    {0x1.23a516e82d9bap+1013, chars_format::general, 305,\r\n        \"99999999999999993925355250553646218600402872201173249531907715713232045630132339028433092574405077484368561180\"\r\n        \"56162172578717193742636030530235798840866882774987301441682011041067710253162440905843719802548551599076639682\"\r\n        \"5508218326595491122696079498053460349186625724064076043808459598620749043481381437440\"},\r\n    {0x1.23a516e82d9bbp+1013, chars_format::general, 305,\r\n        \"1.\"\r\n        \"00000000000000013415983273353644379307167647951549871284361430903247099365945253454330474107257282415598692944\"\r\n        \"58214017639700440024369667222069771881485692090584760704212694947323250244457046880001650900559281269636558378\"\r\n        \"394497607396668697348582938954618758012455694971955365001701469278440622346520965939e+305\"},\r\n    {0x1.6c8e5ca239028p+1016, chars_format::general, 306,\r\n        \"99999999999999986129104041433646954317696961901022600830926229637226024135807173258074139961264195511876508474\"\r\n        \"95341434554323895229942575853502209624619359048748317736669737478565494256644598516180547363344259730852672204\"\r\n        \"21335152276470127823801795414563694568114532338018850013250375609552861714878501486592\"},\r\n    {0x1.6c8e5ca239029p+1016, chars_format::general, 306,\r\n        \"1.\"\r\n        \"00000000000000001721606459673645482883108782501323898232889201789238067124457504798792045187545959456860613886\"\r\n        \"16982910603110492255329485206969388057114406501226285146694284603569926249680283295506892241752843467300607160\"\r\n        \"8882921425543969463011979454650551241561798214326267086291881636286211915474912726221e+306\"},\r\n    {0x1.c7b1f3cac7433p+1019, chars_format::general, 307,\r\n        \"99999999999999998603105976025645777170026418381263638752496607358835658526727438490648464142289606667863792803\"\r\n        \"92654615393353172850252103336275952370615397010730691664689375178569039851073146339641623266071126720011020169\"\r\n        \"553304018596457812688561947201171488461172921822139066929851282122002676667750021070848\"},\r\n    {0x1.c7b1f3cac7434p+1019, chars_format::general, 307,\r\n        \"1.\"\r\n        \"00000000000000011077107910617644600022355874861504676674066985080445292917647703723222788323315017823851077132\"\r\n        \"89967796232382450470561630819049695116611434972713065592709012878572585445501694163102699168797993709169368134\"\r\n        \"89325651442821434713910594025670603124120052026408963372719880814847673618671502727578e+307\"},\r\n    {0x1.1ccf385ebc89fp+1023, chars_format::general, 308,\r\n        \"99999999999999981139503267596847425176765179308926185662298078548582170379439067165044410288854031049481594743\"\r\n        \"36416162218712184181818764860392712526220943863955368165461882398564076018873179386796117002253512935189333018\"\r\n        \"0773705244319986644578003569234231285691342840034082734135647456849389933411990123839488\"},\r\n    {0x1.1ccf385ebc8a0p+1023, chars_format::general, 308,\r\n        \"1.\"\r\n        \"00000000000000001097906362944045541740492309677311846336810682903157585404911491537163328978494688899061249669\"\r\n        \"72117251561159028374314008832830700919814604603127166450293302718569748969958855904333838446616500117842689762\"\r\n        \"621294517762809119578670745812278397017178441510529180289320787327297488571543022311834e+308\"},\r\n    {0x1.a36e2eb1c432cp-14, chars_format::general, 309,\r\n        \"9.99999999999999912396464463171241732197813689708709716796875e-05\"},\r\n    {0x1.a36e2eb1c432dp-14, chars_format::general, 309,\r\n        \"0.000100000000000000004792173602385929598312941379845142364501953125\"},\r\n    {0x1.0624dd2f1a9fbp-10, chars_format::general, 309,\r\n        \"0.00099999999999999980397624721462079833145253360271453857421875\"},\r\n    {0x1.0624dd2f1a9fcp-10, chars_format::general, 309,\r\n        \"0.001000000000000000020816681711721685132943093776702880859375\"},\r\n    {0x1.47ae147ae147ap-7, chars_format::general, 309, \"0.0099999999999999984734433411404097569175064563751220703125\"},\r\n    {0x1.47ae147ae147bp-7, chars_format::general, 309, \"0.01000000000000000020816681711721685132943093776702880859375\"},\r\n    {0x1.9999999999999p-4, chars_format::general, 309, \"0.09999999999999999167332731531132594682276248931884765625\"},\r\n    {0x1.999999999999ap-4, chars_format::general, 309, \"0.1000000000000000055511151231257827021181583404541015625\"},\r\n    {0x1.fffffffffffffp-1, chars_format::general, 309, \"0.99999999999999988897769753748434595763683319091796875\"},\r\n    {0x1.0000000000000p+0, chars_format::general, 309, \"1\"},\r\n    {0x1.3ffffffffffffp+3, chars_format::general, 309, \"9.9999999999999982236431605997495353221893310546875\"},\r\n    {0x1.4000000000000p+3, chars_format::general, 309, \"10\"},\r\n    {0x1.8ffffffffffffp+6, chars_format::general, 309, \"99.9999999999999857891452847979962825775146484375\"},\r\n    {0x1.9000000000000p+6, chars_format::general, 309, \"100\"},\r\n    {0x1.f3fffffffffffp+9, chars_format::general, 309, \"999.9999999999998863131622783839702606201171875\"},\r\n    {0x1.f400000000000p+9, chars_format::general, 309, \"1000\"},\r\n    {0x1.387ffffffffffp+13, chars_format::general, 309, \"9999.999999999998181010596454143524169921875\"},\r\n    {0x1.3880000000000p+13, chars_format::general, 309, \"10000\"},\r\n    {0x1.869ffffffffffp+16, chars_format::general, 309, \"99999.999999999985448084771633148193359375\"},\r\n    {0x1.86a0000000000p+16, chars_format::general, 309, \"100000\"},\r\n    {0x1.e847fffffffffp+19, chars_format::general, 309, \"999999.999999999883584678173065185546875\"},\r\n    {0x1.e848000000000p+19, chars_format::general, 309, \"1000000\"},\r\n    {0x1.312cfffffffffp+23, chars_format::general, 309, \"9999999.99999999813735485076904296875\"},\r\n    {0x1.312d000000000p+23, chars_format::general, 309, \"10000000\"},\r\n    {0x1.7d783ffffffffp+26, chars_format::general, 309, \"99999999.99999998509883880615234375\"},\r\n    {0x1.7d78400000000p+26, chars_format::general, 309, \"100000000\"},\r\n    {0x1.dcd64ffffffffp+29, chars_format::general, 309, \"999999999.99999988079071044921875\"},\r\n    {0x1.dcd6500000000p+29, chars_format::general, 309, \"1000000000\"},\r\n    {0x1.2a05f1fffffffp+33, chars_format::general, 309, \"9999999999.9999980926513671875\"},\r\n    {0x1.2a05f20000000p+33, chars_format::general, 309, \"10000000000\"},\r\n    {0x1.74876e7ffffffp+36, chars_format::general, 309, \"99999999999.9999847412109375\"},\r\n    {0x1.74876e8000000p+36, chars_format::general, 309, \"100000000000\"},\r\n    {0x1.d1a94a1ffffffp+39, chars_format::general, 309, \"999999999999.9998779296875\"},\r\n    {0x1.d1a94a2000000p+39, chars_format::general, 309, \"1000000000000\"},\r\n    {0x1.2309ce53fffffp+43, chars_format::general, 309, \"9999999999999.998046875\"},\r\n    {0x1.2309ce5400000p+43, chars_format::general, 309, \"10000000000000\"},\r\n    {0x1.6bcc41e8fffffp+46, chars_format::general, 309, \"99999999999999.984375\"},\r\n    {0x1.6bcc41e900000p+46, chars_format::general, 309, \"100000000000000\"},\r\n    {0x1.c6bf52633ffffp+49, chars_format::general, 309, \"999999999999999.875\"},\r\n    {0x1.c6bf526340000p+49, chars_format::general, 309, \"1000000000000000\"},\r\n    {0x1.1c37937e07fffp+53, chars_format::general, 309, \"9999999999999998\"},\r\n    {0x1.1c37937e08000p+53, chars_format::general, 309, \"10000000000000000\"},\r\n    {0x1.6345785d89fffp+56, chars_format::general, 309, \"99999999999999984\"},\r\n    {0x1.6345785d8a000p+56, chars_format::general, 309, \"100000000000000000\"},\r\n    {0x1.bc16d674ec7ffp+59, chars_format::general, 309, \"999999999999999872\"},\r\n    {0x1.bc16d674ec800p+59, chars_format::general, 309, \"1000000000000000000\"},\r\n    {0x1.158e460913cffp+63, chars_format::general, 309, \"9999999999999997952\"},\r\n    {0x1.158e460913d00p+63, chars_format::general, 309, \"10000000000000000000\"},\r\n    {0x1.5af1d78b58c3fp+66, chars_format::general, 309, \"99999999999999983616\"},\r\n    {0x1.5af1d78b58c40p+66, chars_format::general, 309, \"100000000000000000000\"},\r\n    {0x1.b1ae4d6e2ef4fp+69, chars_format::general, 309, \"999999999999999868928\"},\r\n    {0x1.b1ae4d6e2ef50p+69, chars_format::general, 309, \"1000000000000000000000\"},\r\n    {0x1.0f0cf064dd591p+73, chars_format::general, 309, \"9999999999999997902848\"},\r\n    {0x1.0f0cf064dd592p+73, chars_format::general, 309, \"10000000000000000000000\"},\r\n    {0x1.52d02c7e14af6p+76, chars_format::general, 309, \"99999999999999991611392\"},\r\n    {0x1.52d02c7e14af7p+76, chars_format::general, 309, \"100000000000000008388608\"},\r\n    {0x1.a784379d99db4p+79, chars_format::general, 309, \"999999999999999983222784\"},\r\n    {0x1.a784379d99db5p+79, chars_format::general, 309, \"1000000000000000117440512\"},\r\n    {0x1.08b2a2c280290p+83, chars_format::general, 309, \"9999999999999998758486016\"},\r\n    {0x1.08b2a2c280291p+83, chars_format::general, 309, \"10000000000000000905969664\"},\r\n    {0x1.4adf4b7320334p+86, chars_format::general, 309, \"99999999999999987584860160\"},\r\n    {0x1.4adf4b7320335p+86, chars_format::general, 309, \"100000000000000004764729344\"},\r\n    {0x1.9d971e4fe8401p+89, chars_format::general, 309, \"999999999999999875848601600\"},\r\n    {0x1.9d971e4fe8402p+89, chars_format::general, 309, \"1000000000000000013287555072\"},\r\n    {0x1.027e72f1f1281p+93, chars_format::general, 309, \"9999999999999999583119736832\"},\r\n    {0x1.027e72f1f1282p+93, chars_format::general, 309, \"10000000000000001782142992384\"},\r\n    {0x1.431e0fae6d721p+96, chars_format::general, 309, \"99999999999999991433150857216\"},\r\n    {0x1.431e0fae6d722p+96, chars_format::general, 309, \"100000000000000009025336901632\"},\r\n    {0x1.93e5939a08ce9p+99, chars_format::general, 309, \"999999999999999879147136483328\"},\r\n    {0x1.93e5939a08ceap+99, chars_format::general, 309, \"1000000000000000019884624838656\"},\r\n    {0x1.f8def8808b024p+102, chars_format::general, 309, \"9999999999999999635896294965248\"},\r\n    {0x1.f8def8808b025p+102, chars_format::general, 309, \"10000000000000000761796201807872\"},\r\n    {0x1.3b8b5b5056e16p+106, chars_format::general, 309, \"99999999999999987351763694911488\"},\r\n    {0x1.3b8b5b5056e17p+106, chars_format::general, 309, \"100000000000000005366162204393472\"},\r\n    {0x1.8a6e32246c99cp+109, chars_format::general, 309, \"999999999999999945575230987042816\"},\r\n    {0x1.8a6e32246c99dp+109, chars_format::general, 309, \"1000000000000000089690419062898688\"},\r\n    {0x1.ed09bead87c03p+112, chars_format::general, 309, \"9999999999999999455752309870428160\"},\r\n    {0x1.ed09bead87c04p+112, chars_format::general, 309, \"10000000000000000608673814477275136\"},\r\n    {0x1.3426172c74d82p+116, chars_format::general, 309, \"99999999999999996863366107917975552\"},\r\n    {0x1.3426172c74d83p+116, chars_format::general, 309, \"100000000000000015310110181627527168\"},\r\n    {0x1.812f9cf7920e2p+119, chars_format::general, 309, \"999999999999999894846684784341549056\"},\r\n    {0x1.812f9cf7920e3p+119, chars_format::general, 309, \"1000000000000000042420637374017961984\"},\r\n    {0x1.e17b84357691bp+122, chars_format::general, 309, \"9999999999999999538762658202121142272\"},\r\n    {0x1.e17b84357691cp+122, chars_format::general, 309, \"10000000000000000719354278919532445696\"},\r\n    {0x1.2ced32a16a1b1p+126, chars_format::general, 309, \"99999999999999997748809823456034029568\"},\r\n    {0x1.2ced32a16a1b2p+126, chars_format::general, 309, \"100000000000000016638275754934614884352\"},\r\n    {0x1.78287f49c4a1dp+129, chars_format::general, 309, \"999999999999999939709166371603178586112\"},\r\n    {0x1.78287f49c4a1ep+129, chars_format::general, 309, \"1000000000000000090824893823431825424384\"},\r\n    {0x1.d6329f1c35ca4p+132, chars_format::general, 309, \"9999999999999999094860208812374492184576\"},\r\n    {0x1.d6329f1c35ca5p+132, chars_format::general, 309, \"10000000000000000303786028427003666890752\"},\r\n    {0x1.25dfa371a19e6p+136, chars_format::general, 309, \"99999999999999981277195531206711524196352\"},\r\n    {0x1.25dfa371a19e7p+136, chars_format::general, 309, \"100000000000000000620008645040778319495168\"},\r\n    {0x1.6f578c4e0a060p+139, chars_format::general, 309, \"999999999999999890143207767403382423158784\"},\r\n    {0x1.6f578c4e0a061p+139, chars_format::general, 309, \"1000000000000000044885712678075916785549312\"},\r\n    {0x1.cb2d6f618c878p+142, chars_format::general, 309, \"9999999999999998901432077674033824231587840\"},\r\n    {0x1.cb2d6f618c879p+142, chars_format::general, 309, \"10000000000000000139372116959414099130712064\"},\r\n    {0x1.1efc659cf7d4bp+146, chars_format::general, 309, \"99999999999999989014320776740338242315878400\"},\r\n    {0x1.1efc659cf7d4cp+146, chars_format::general, 309, \"100000000000000008821361405306422640701865984\"},\r\n    {0x1.66bb7f0435c9ep+149, chars_format::general, 309, \"999999999999999929757289024535551219930759168\"},\r\n    {0x1.66bb7f0435c9fp+149, chars_format::general, 309, \"1000000000000000088213614053064226407018659840\"},\r\n    {0x1.c06a5ec5433c6p+152, chars_format::general, 309, \"9999999999999999931398190359470212947659194368\"},\r\n    {0x1.c06a5ec5433c7p+152, chars_format::general, 309, \"10000000000000001199048790587699614444362399744\"},\r\n    {0x1.18427b3b4a05bp+156, chars_format::general, 309, \"99999999999999984102174700855949311516153479168\"},\r\n    {0x1.18427b3b4a05cp+156, chars_format::general, 309, \"100000000000000004384584304507619735463404765184\"},\r\n    {0x1.5e531a0a1c872p+159, chars_format::general, 309, \"999999999999999881586566215862833963056037363712\"},\r\n    {0x1.5e531a0a1c873p+159, chars_format::general, 309, \"1000000000000000043845843045076197354634047651840\"},\r\n    {0x1.b5e7e08ca3a8fp+162, chars_format::general, 309, \"9999999999999999464902769475481793196872414789632\"},\r\n    {0x1.b5e7e08ca3a90p+162, chars_format::general, 309, \"10000000000000000762976984109188700329496497094656\"},\r\n    {0x1.11b0ec57e6499p+166, chars_format::general, 309, \"99999999999999986860582406952576489172979654066176\"},\r\n    {0x1.11b0ec57e649ap+166, chars_format::general, 309, \"100000000000000007629769841091887003294964970946560\"},\r\n    {0x1.561d276ddfdc0p+169, chars_format::general, 309, \"999999999999999993220948674361627976461708441944064\"},\r\n    {0x1.561d276ddfdc1p+169, chars_format::general, 309, \"1000000000000000159374448147476112089437590976987136\"},\r\n    {0x1.aba4714957d30p+172, chars_format::general, 309, \"9999999999999999932209486743616279764617084419440640\"},\r\n    {0x1.aba4714957d31p+172, chars_format::general, 309, \"10000000000000001261437482528532152668424144699785216\"},\r\n    {0x1.0b46c6cdd6e3ep+176, chars_format::general, 309, \"99999999999999999322094867436162797646170844194406400\"},\r\n    {0x1.0b46c6cdd6e3fp+176, chars_format::general, 309, \"100000000000000020589742799994816764107083808679919616\"},\r\n    {0x1.4e1878814c9cdp+179, chars_format::general, 309, \"999999999999999908150356944127012110618056584002011136\"},\r\n    {0x1.4e1878814c9cep+179, chars_format::general, 309, \"1000000000000000078291540404596243842305360299886116864\"},\r\n    {0x1.a19e96a19fc40p+182, chars_format::general, 309, \"9999999999999998741221202520331657642805958408251899904\"},\r\n    {0x1.a19e96a19fc41p+182, chars_format::general, 309, \"10000000000000000102350670204085511496304388135324745728\"},\r\n    {0x1.05031e2503da8p+186, chars_format::general, 309, \"99999999999999987412212025203316576428059584082518999040\"},\r\n    {0x1.05031e2503da9p+186, chars_format::general, 309, \"100000000000000009190283508143378238084034459715684532224\"},\r\n    {0x1.4643e5ae44d12p+189, chars_format::general, 309, \"999999999999999874122120252033165764280595840825189990400\"},\r\n    {0x1.4643e5ae44d13p+189, chars_format::general, 309, \"1000000000000000048346692115553659057528394845890514255872\"},\r\n    {0x1.97d4df19d6057p+192, chars_format::general, 309, \"9999999999999999438119489974413630815797154428513196965888\"},\r\n    {0x1.97d4df19d6058p+192, chars_format::general, 309, \"10000000000000000831916064882577577161779546469035791089664\"},\r\n    {0x1.fdca16e04b86dp+195, chars_format::general, 309, \"99999999999999997168788049560464200849936328366177157906432\"},\r\n    {0x1.fdca16e04b86ep+195, chars_format::general, 309,\r\n        \"100000000000000008319160648825775771617795464690357910896640\"},\r\n    {0x1.3e9e4e4c2f344p+199, chars_format::general, 309,\r\n        \"999999999999999949387135297074018866963645011013410073083904\"},\r\n    {0x1.3e9e4e4c2f345p+199, chars_format::general, 309,\r\n        \"1000000000000000127793096885319003999249391192200302120927232\"},\r\n    {0x1.8e45e1df3b015p+202, chars_format::general, 309,\r\n        \"9999999999999999493871352970740188669636450110134100730839040\"},\r\n    {0x1.8e45e1df3b016p+202, chars_format::general, 309,\r\n        \"10000000000000000921119045676700069727922419559629237113585664\"},\r\n    {0x1.f1d75a5709c1ap+205, chars_format::general, 309,\r\n        \"99999999999999992084218144295482124579792562202350734542897152\"},\r\n    {0x1.f1d75a5709c1bp+205, chars_format::general, 309,\r\n        \"100000000000000003502199685943161173046080317798311825604870144\"},\r\n    {0x1.3726987666190p+209, chars_format::general, 309,\r\n        \"999999999999999875170255276364105051932774599639662981181079552\"},\r\n    {0x1.3726987666191p+209, chars_format::general, 309,\r\n        \"1000000000000000057857959942726969827393378689175040438172647424\"},\r\n    {0x1.84f03e93ff9f4p+212, chars_format::general, 309,\r\n        \"9999999999999998751702552763641050519327745996396629811810795520\"},\r\n    {0x1.84f03e93ff9f5p+212, chars_format::general, 309,\r\n        \"10000000000000000213204190094543968723012578712679649467743338496\"},\r\n    {0x1.e62c4e38ff872p+215, chars_format::general, 309,\r\n        \"99999999999999999209038626283633850822756121694230455365568299008\"},\r\n    {0x1.e62c4e38ff873p+215, chars_format::general, 309,\r\n        \"100000000000000010901051724930857196452234783424494612613028642816\"},\r\n    {0x1.2fdbb0e39fb47p+219, chars_format::general, 309,\r\n        \"999999999999999945322333868247445125709646570021247924665841614848\"},\r\n    {0x1.2fdbb0e39fb48p+219, chars_format::general, 309,\r\n        \"1000000000000000132394543446603018655781305157705474440625207115776\"},\r\n    {0x1.7bd29d1c87a19p+222, chars_format::general, 309,\r\n        \"9999999999999999827367757839185598317239782875580932278577147150336\"},\r\n    {0x1.7bd29d1c87a1ap+222, chars_format::general, 309,\r\n        \"10000000000000001323945434466030186557813051577054744406252071157760\"},\r\n    {0x1.dac74463a989fp+225, chars_format::general, 309,\r\n        \"99999999999999995280522225138166806691251291352861698530421623488512\"},\r\n    {0x1.dac74463a98a0p+225, chars_format::general, 309,\r\n        \"100000000000000007253143638152923512615837440964652195551821015547904\"},\r\n    {0x1.28bc8abe49f63p+229, chars_format::general, 309,\r\n        \"999999999999999880969493773293127831364996015857874003175819882528768\"},\r\n    {0x1.28bc8abe49f64p+229, chars_format::general, 309,\r\n        \"1000000000000000072531436381529235126158374409646521955518210155479040\"},\r\n    {0x1.72ebad6ddc73cp+232, chars_format::general, 309,\r\n        \"9999999999999999192818822949403492903236716946156035936442979371188224\"},\r\n    {0x1.72ebad6ddc73dp+232, chars_format::general, 309,\r\n        \"10000000000000000725314363815292351261583744096465219555182101554790400\"},\r\n    {0x1.cfa698c95390bp+235, chars_format::general, 309,\r\n        \"99999999999999991928188229494034929032367169461560359364429793711882240\"},\r\n    {0x1.cfa698c95390cp+235, chars_format::general, 309,\r\n        \"100000000000000004188152556421145795899143386664033828314342771180699648\"},\r\n    {0x1.21c81f7dd43a7p+239, chars_format::general, 309,\r\n        \"999999999999999943801810948794571024057224129020550531544123892056457216\"},\r\n    {0x1.21c81f7dd43a8p+239, chars_format::general, 309,\r\n        \"1000000000000000139961240179628344893925643604260126034742731531557535744\"},\r\n    {0x1.6a3a275d49491p+242, chars_format::general, 309,\r\n        \"9999999999999999830336967949613257980309080240684656321838454199566729216\"},\r\n    {0x1.6a3a275d49492p+242, chars_format::general, 309,\r\n        \"10000000000000001399612401796283448939256436042601260347427315315575357440\"},\r\n    {0x1.c4c8b1349b9b5p+245, chars_format::general, 309,\r\n        \"99999999999999995164818811802792197885196090803013355167206819763650035712\"},\r\n    {0x1.c4c8b1349b9b6p+245, chars_format::general, 309,\r\n        \"100000000000000007719022282576153725556774937218346187371917708691719061504\"},\r\n    {0x1.1afd6ec0e1411p+249, chars_format::general, 309,\r\n        \"999999999999999926539781176481198923508803215199467887262646419780362305536\"},\r\n    {0x1.1afd6ec0e1412p+249, chars_format::general, 309,\r\n        \"1000000000000000127407036708854983366254064757844793202538020642629466718208\"},\r\n    {0x1.61bcca7119915p+252, chars_format::general, 309,\r\n        \"9999999999999998863663300700064420349597509066704028242075715752105414230016\"},\r\n    {0x1.61bcca7119916p+252, chars_format::general, 309,\r\n        \"10000000000000000470601344959054695891559601407866630764278709534898249531392\"},\r\n    {0x1.ba2bfd0d5ff5bp+255, chars_format::general, 309,\r\n        \"99999999999999998278261272554585856747747644714015897553975120217811154108416\"},\r\n    {0x1.ba2bfd0d5ff5cp+255, chars_format::general, 309,\r\n        \"100000000000000011133765626626508061083444383443316717731599070480153836519424\"},\r\n    {0x1.145b7e285bf98p+259, chars_format::general, 309,\r\n        \"999999999999999802805551768538947706777722104929947493053015898505313987330048\"},\r\n    {0x1.145b7e285bf99p+259, chars_format::general, 309,\r\n        \"1000000000000000008493621433689702976148869924598760615894999102702796905906176\"},\r\n    {0x1.59725db272f7fp+262, chars_format::general, 309,\r\n        \"9999999999999999673560075006595519222746403606649979913266024618633003221909504\"},\r\n    {0x1.59725db272f80p+262, chars_format::general, 309,\r\n        \"10000000000000001319064632327801561377715586164000484896001890252212866570518528\"},\r\n    {0x1.afcef51f0fb5ep+265, chars_format::general, 309,\r\n        \"99999999999999986862573406138718939297648940722396769236245052384850852127440896\"},\r\n    {0x1.afcef51f0fb5fp+265, chars_format::general, 309,\r\n        \"100000000000000000026609864708367276537402401181200809098131977453489758916313088\"},\r\n    {0x1.0de1593369d1bp+269, chars_format::general, 309,\r\n        \"999999999999999921281879895665782741935503249059183851809998224123064148429897728\"},\r\n    {0x1.0de1593369d1cp+269, chars_format::general, 309,\r\n        \"1000000000000000131906463232780156137771558616400048489600189025221286657051852800\"},\r\n    {0x1.5159af8044462p+272, chars_format::general, 309,\r\n        \"9999999999999999634067965630886574211027143225273567793680363843427086501542887424\"},\r\n    {0x1.5159af8044463p+272, chars_format::general, 309,\r\n        \"10000000000000001319064632327801561377715586164000484896001890252212866570518528000\"},\r\n    {0x1.a5b01b605557ap+275, chars_format::general, 309,\r\n        \"99999999999999989600692989521205793443517660497828009527517532799127744739526311936\"},\r\n    {0x1.a5b01b605557bp+275, chars_format::general, 309,\r\n        \"100000000000000003080666323096525690777025204007643346346089744069413985291331436544\"},\r\n    {0x1.078e111c3556cp+279, chars_format::general, 309,\r\n        \"999999999999999842087036560910778345101146430939018748000886482910132485188042620928\"},\r\n    {0x1.078e111c3556dp+279, chars_format::general, 309,\r\n        \"1000000000000000057766609898115896702437267127096064137098041863234712334016924614656\"},\r\n    {0x1.4971956342ac7p+282, chars_format::general, 309,\r\n        \"9999999999999998420870365609107783451011464309390187480008864829101324851880426209280\"},\r\n    {0x1.4971956342ac8p+282, chars_format::general, 309,\r\n        \"10000000000000000146306952306748730309700429878646550592786107871697963642511482159104\"},\r\n    {0x1.9bcdfabc13579p+285, chars_format::general, 309,\r\n        \"99999999999999987659576829486359728227492574232414601025643134376206526100066373992448\"},\r\n    {0x1.9bcdfabc1357ap+285, chars_format::general, 309,\r\n        \"100000000000000001463069523067487303097004298786465505927861078716979636425114821591040\"},\r\n    {0x1.0160bcb58c16cp+289, chars_format::general, 309,\r\n        \"999999999999999959416724456350362731491996089648451439669739009806703922950954425516032\"},\r\n    {0x1.0160bcb58c16dp+289, chars_format::general, 309,\r\n        \"1000000000000000180272607553648403929404183682513265918105226119259073688151729587093504\"},\r\n    {0x1.41b8ebe2ef1c7p+292, chars_format::general, 309,\r\n        \"9999999999999999594167244563503627314919960896484514396697390098067039229509544255160320\"},\r\n    {0x1.41b8ebe2ef1c8p+292, chars_format::general, 309,\r\n        \"10000000000000001361014309341887956898217461639403030224181286973685997351115745547780096\"},\r\n    {0x1.922726dbaae39p+295, chars_format::general, 309,\r\n        \"99999999999999999475366575191804932315794610450682175621941694731908308538307845136842752\"},\r\n    {0x1.922726dbaae3ap+295, chars_format::general, 309,\r\n        \"100000000000000013610143093418879568982174616394030302241812869736859973511157455477800960\"},\r\n    {0x1.f6b0f092959c7p+298, chars_format::general, 309,\r\n        \"999999999999999966484112715463900049825186092620125502979674597309179755437379230686511104\"},\r\n    {0x1.f6b0f092959c8p+298, chars_format::general, 309,\r\n        \"1000000000000000079562324861280497143156226140166910515938643997348793075220176113414176768\"},\r\n    {0x1.3a2e965b9d81cp+302, chars_format::general, 309,\r\n        \"9999999999999998986371854279739417938265620640920544952042929572854117635677011010499117056\"},\r\n    {0x1.3a2e965b9d81dp+302, chars_format::general, 309,\r\n        \"10000000000000000795623248612804971431562261401669105159386439973487930752201761134141767680\"},\r\n    {0x1.88ba3bf284e23p+305, chars_format::general, 309,\r\n        \"99999999999999989863718542797394179382656206409205449520429295728541176356770110104991170560\"},\r\n    {0x1.88ba3bf284e24p+305, chars_format::general, 309,\r\n        \"100000000000000004337729697461918607329029332495193931179177378933611681288968111094132375552\"},\r\n    {0x1.eae8caef261acp+308, chars_format::general, 309,\r\n        \"999999999999999927585207737302990649719308316264031458521789123695552773432097103028194115584\"},\r\n    {0x1.eae8caef261adp+308, chars_format::general, 309,\r\n        \"1000000000000000043377296974619186073290293324951939311791773789336116812889681110941323755520\"},\r\n    {0x1.32d17ed577d0bp+312, chars_format::general, 309,\r\n        \"9999999999999998349515363474500343108625203093137051759058013911831015418660298966976904036352\"},\r\n    {0x1.32d17ed577d0cp+312, chars_format::general, 309,\r\n        \"10000000000000000202188791271559469885760963232143577411377768562080040049981643093586978275328\"},\r\n    {0x1.7f85de8ad5c4ep+315, chars_format::general, 309,\r\n        \"99999999999999987200500490339121684640523551209383568895219648418808203449245677922989188841472\"},\r\n    {0x1.7f85de8ad5c4fp+315, chars_format::general, 309,\r\n        \"100000000000000002021887912715594698857609632321435774113777685620800400499816430935869782753280\"},\r\n    {0x1.df67562d8b362p+318, chars_format::general, 309,\r\n        \"999999999999999931290554592897108903273579836542044509826428632996050822694739791281414264061952\"},\r\n    {0x1.df67562d8b363p+318, chars_format::general, 309,\r\n        \"1000000000000000049861653971908893017010268485438462151574892930611988399099305815384459015356416\"},\r\n    {0x1.2ba095dc7701dp+322, chars_format::general, 309,\r\n        \"9999999999999998838621148412923952577789043769834774531270429139496757921329133816401963635441664\"},\r\n    {0x1.2ba095dc7701ep+322, chars_format::general, 309,\r\n        \"10000000000000000735758738477112498397576062152177456799245857901351759143802190202050679656153088\"},\r\n    {0x1.7688bb5394c25p+325, chars_format::general, 309,\r\n        \"99999999999999999769037024514370800696612547992403838920556863966097586548129676477911932478685184\"},\r\n    {0x1.7688bb5394c26p+325, chars_format::general, 309,\r\n        \"100000000000000014946137745027879167254908695051145297064360294060937596327914127563101660644376576\"},\r\n    {0x1.d42aea2879f2ep+328, chars_format::general, 309,\r\n        \"999999999999999967336168804116691273849533185806555472917961779471295845921727862608739868455469056\"},\r\n    {0x1.d42aea2879f2fp+328, chars_format::general, 309,\r\n        \"1000000000000000088752974568224758206315902362276487138068389220230015924160003471290257693781000192\"},\r\n    {0x1.249ad2594c37cp+332, chars_format::general, 309,\r\n        \"9999999999999998216360018871870109548898901740426374747374488505608317520357971321909184780648316928\"},\r\n    {0x1.249ad2594c37dp+332, chars_format::general, 309,\r\n        \"10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104\"},\r\n    {0x1.6dc186ef9f45cp+335, chars_format::general, 309,\r\n        \"99999999999999997704951326524533662844684271992415000612999597473199345218078991130326129448151154688\"},\r\n    {0x1.6dc186ef9f45dp+335, chars_format::general, 309,\r\n        \"100000000000000013246302464330366230200379526580566253752254309890315515232578269041560411089819140096\"},\r\n    {0x1.c931e8ab87173p+338, chars_format::general, 309,\r\n        \"999999999999999977049513265245336628446842719924150006129995974731993452180789911303261294481511546880\"},\r\n    {0x1.c931e8ab87174p+338, chars_format::general, 309,\r\n        \"1000000000000000101380322367691997167292404756629360031244033674068922812296784134593135547614855430144\"},\r\n    {0x1.1dbf316b346e7p+342, chars_format::general, 309,\r\n        \"9999999999999998029863805218200118740630558685368559709703431956602923480183979986974373400948301103104\"},\r\n    {0x1.1dbf316b346e8p+342, chars_format::general, 309,\r\n        \"10000000000000000019156750857346687362159551272651920111528035145993793242039887559612361451081803235328\"},\r\n    {0x1.652efdc6018a1p+345, chars_format::general, 309,\r\n        \"99999999999999984277223943460294324649363572028252317900683525944810974325551615015019710109750015295488\"},\r\n    {0x1.652efdc6018a2p+345, chars_format::general, 309,\r\n        \"100000000000000000191567508573466873621595512726519201115280351459937932420398875596123614510818032353280\"},\r\n    {0x1.be7abd3781ecap+348, chars_format::general, 309,\r\n        \"999999999999999938258300825281978540327027364472124478294416212538871491824599713636820527503908255301632\"},\r\n    {0x1.be7abd3781ecbp+348, chars_format::general, 309,\r\n        \"1000000000000000065573049346187358932104882890058259544011190816659887156583377798285651762712452391763968\"},\r\n    {0x1.170cb642b133ep+352, chars_format::general, 309,\r\n        \"9999999999999998873324014169198263836158851542376704520077063708904652259210884797772880334204906007166976\"},\r\n    {0x1.170cb642b133fp+352, chars_format::general, 309,\r\n        \"10000000000000000910359990503684350104604539951754865571545457374840902895351334152154180097541612190564352\"},\r\n    {0x1.5ccfe3d35d80ep+355, chars_format::general, 309,\r\n        \"99999999999999996881384047029926983435371269061279689406644211752791525136670645395254002395395884805259264\"},\r\n    {0x1.5ccfe3d35d80fp+355, chars_format::general, 309,\r\n        \"100000000000000013177671857705815673582936776336304977818391361080281530225794240230304400502089534272438272\"},\r\n    {0x1.b403dcc834e11p+358, chars_format::general, 309,\r\n        \"999999999999999903628689227595715073763450661512695740419453520217955231010212074612338431527184250183876608\"},\r\n    {0x1.b403dcc834e12p+358, chars_format::general, 309,\r\n        \"100000000000000003399899171300282459494397471971289804771343071483787527172320083329274161638073344592130867\"\r\n        \"2\"},\r\n    {0x1.108269fd210cbp+362, chars_format::general, 309,\r\n        \"999999999999999981850870718839980786471765096432817124795839836989907255438005329820580342439313767626335846\"\r\n        \"4\"},\r\n    {0x1.108269fd210ccp+362, chars_format::general, 309,\r\n        \"1000000000000000190443354695491356020360603589553140816466203348381779320578787343709225438204992480806227148\"\r\n        \"8\"},\r\n    {0x1.54a3047c694fdp+365, chars_format::general, 309,\r\n        \"9999999999999998566953803328491556461384620005606229097936217301547840163535361214873932849799065397184010649\"\r\n        \"6\"},\r\n    {0x1.54a3047c694fep+365, chars_format::general, 309,\r\n        \"10000000000000000235693675141702558332495327950568818631299125392682816684661617325983093615924495102623141068\"\r\n        \"8\"},\r\n    {0x1.a9cbc59b83a3dp+368, chars_format::general, 309,\r\n        \"99999999999999995681977264164181575840510447725837828179539621562288260762111148815394293094743232204474889011\"\r\n        \"2\"},\r\n    {0x1.a9cbc59b83a3ep+368, chars_format::general, 309,\r\n        \"10000000000000000903189623866986959080939611128553854444644288629136807293112119770426757922374666984798793236\"\r\n        \"48\"},\r\n    {0x1.0a1f5b8132466p+372, chars_format::general, 309,\r\n        \"99999999999999993011993469263043972846733315013897684926158968616472298328309139037619635868942544675772280340\"\r\n        \"48\"},\r\n    {0x1.0a1f5b8132467p+372, chars_format::general, 309,\r\n        \"10000000000000001437186382847214479679695037670941883095320419218299999779872521725981689367534804490539314970\"\r\n        \"624\"},\r\n    {0x1.4ca732617ed7fp+375, chars_format::general, 309,\r\n        \"99999999999999984468045325579403643266646490335689226515340879189861218540142707748740732746380344583923932594\"\r\n        \"176\"},\r\n    {0x1.4ca732617ed80p+375, chars_format::general, 309,\r\n        \"10000000000000000155594161294668430242682013969210614333697705804308337811647557032649853899150474476762062808\"\r\n        \"6784\"},\r\n    {0x1.9fd0fef9de8dfp+378, chars_format::general, 309,\r\n        \"99999999999999987885624583052859775098681220206972609879668114960505650455409280264292293995405224620663271692\"\r\n        \"6976\"},\r\n    {0x1.9fd0fef9de8e0p+378, chars_format::general, 309,\r\n        \"10000000000000000155594161294668430242682013969210614333697705804308337811647557032649853899150474476762062808\"\r\n        \"67840\"},\r\n    {0x1.03e29f5c2b18bp+382, chars_format::general, 309,\r\n        \"99999999999999979683434365116565058701797868515892489805282749110959013858769506226968546997745512532488857856\"\r\n        \"24576\"},\r\n    {0x1.03e29f5c2b18cp+382, chars_format::general, 309,\r\n        \"10000000000000000155594161294668430242682013969210614333697705804308337811647557032649853899150474476762062808\"\r\n        \"678400\"},\r\n    {0x1.44db473335deep+385, chars_format::general, 309,\r\n        \"99999999999999984057935814682588907446802322751135220511621610897383886710310719046874545396497358979515211902\"\r\n        \"353408\"},\r\n    {0x1.44db473335defp+385, chars_format::general, 309,\r\n        \"10000000000000000155594161294668430242682013969210614333697705804308337811647557032649853899150474476762062808\"\r\n        \"6784000\"},\r\n    {0x1.961219000356ap+388, chars_format::general, 309,\r\n        \"99999999999999991057138133988227065438809449527523589641763789755663683272776659558724142834500313294757378376\"\r\n        \"1256448\"},\r\n    {0x1.961219000356bp+388, chars_format::general, 309,\r\n        \"10000000000000000505554277259950338142282370308030032790204814747222327639770854058242333771050622192524171132\"\r\n        \"36701184\"},\r\n    {0x1.fb969f40042c5p+391, chars_format::general, 309,\r\n        \"99999999999999996656499989432737591832415150948634284945877532842287520522749411968203820784902676746951111555\"\r\n        \"14343424\"},\r\n    {0x1.fb969f40042c6p+391, chars_format::general, 309,\r\n        \"10000000000000000785522370032175864461962655379085567555410501901553519502269491678716317668570740365133857791\"\r\n        \"317901312\"},\r\n    {0x1.3d3e2388029bbp+395, chars_format::general, 309,\r\n        \"99999999999999994416755247254933381274972870380190006824232035607637985622760311004411949604741731366073618283\"\r\n        \"536318464\"},\r\n    {0x1.3d3e2388029bcp+395, chars_format::general, 309,\r\n        \"10000000000000001233471318467736706573451111492774423179739601348483426482267311871474691904602929441309356445\"\r\n        \"6393244672\"},\r\n    {0x1.8c8dac6a0342ap+398, chars_format::general, 309,\r\n        \"99999999999999998000346834739420118166880519289700851818864831183077241462742872546478943492999243975477607518\"\r\n        \"1077037056\"},\r\n    {0x1.8c8dac6a0342bp+398, chars_format::general, 309,\r\n        \"10000000000000001233471318467736706573451111492774423179739601348483426482267311871474691904602929441309356445\"\r\n        \"63932446720\"},\r\n    {0x1.efb1178484134p+401, chars_format::general, 309,\r\n        \"99999999999999992266600294764241339139828281034483499827452358262374432118770774079171753271787223800431224742\"\r\n        \"79348731904\"},\r\n    {0x1.efb1178484135p+401, chars_format::general, 309,\r\n        \"10000000000000000373409337471459889719393275754491820381027730410378005080671497101378613371421126415052399029\"\r\n        \"342192009216\"},\r\n    {0x1.35ceaeb2d28c0p+405, chars_format::general, 309,\r\n        \"99999999999999983092605830803955292696544699826135736641192401589249937168415416531480248917847991520357012302\"\r\n        \"290741100544\"},\r\n    {0x1.35ceaeb2d28c1p+405, chars_format::general, 309,\r\n        \"10000000000000000144059475872452738558311186224283126301371231493549892706912613162686325762572645608050543718\"\r\n        \"3296233537536\"},\r\n    {0x1.83425a5f872f1p+408, chars_format::general, 309,\r\n        \"99999999999999997770996973140412967005798429759492157739208332266249129088983988607786655884150763168475752207\"\r\n        \"0951350501376\"},\r\n    {0x1.83425a5f872f2p+408, chars_format::general, 309,\r\n        \"10000000000000001244938811547687064131505215969284857883722426294324832100955256068409306285045353481659449211\"\r\n        \"18995289997312\"},\r\n    {0x1.e412f0f768fadp+411, chars_format::general, 309,\r\n        \"99999999999999994835318744673121432143947683772820873519605146130849290704870274192525374490890208838852004226\"\r\n        \"13425626021888\"},\r\n    {0x1.e412f0f768faep+411, chars_format::general, 309,\r\n        \"10000000000000000657803165854228757159135066771950601039801789067244864424132513185357050006393242615734699614\"\r\n        \"997777141989376\"},\r\n    {0x1.2e8bd69aa19ccp+415, chars_format::general, 309,\r\n        \"99999999999999992486776161899288204254467086983483846143922597222529419997579302660316349376281765375153005841\"\r\n        \"365553228283904\"},\r\n    {0x1.2e8bd69aa19cdp+415, chars_format::general, 309,\r\n        \"10000000000000001127511682408995402737031186129818006514938298848908838565590707491798855029314931308474499291\"\r\n        \"9515177483763712\"},\r\n    {0x1.7a2ecc414a03fp+418, chars_format::general, 309,\r\n        \"99999999999999992486776161899288204254467086983483846143922597222529419997579302660316349376281765375153005841\"\r\n        \"3655532282839040\"},\r\n    {0x1.7a2ecc414a040p+418, chars_format::general, 309,\r\n        \"10000000000000000751744869165182086274714290643524082134829091023577659252424152046645411010977580354282659550\"\r\n        \"38852526326677504\"},\r\n    {0x1.d8ba7f519c84fp+421, chars_format::general, 309,\r\n        \"99999999999999995492910667849794735953002250873835241184796259825178854502911746221543901522980573008687723773\"\r\n        \"86949310916067328\"},\r\n    {0x1.d8ba7f519c850p+421, chars_format::general, 309,\r\n        \"10000000000000000751744869165182086274714290643524082134829091023577659252424152046645411010977580354282659550\"\r\n        \"388525263266775040\"},\r\n    {0x1.27748f9301d31p+425, chars_format::general, 309,\r\n        \"99999999999999988278187853568579059876517857536991893086699469578820211690113881674597776370903434688204400735\"\r\n        \"860037395056427008\"},\r\n    {0x1.27748f9301d32p+425, chars_format::general, 309,\r\n        \"10000000000000000751744869165182086274714290643524082134829091023577659252424152046645411010977580354282659550\"\r\n        \"3885252632667750400\"},\r\n    {0x1.7151b377c247ep+428, chars_format::general, 309,\r\n        \"99999999999999999821744356418524141598892886875941250043654333972994040190590464949711576614226856000977717596\"\r\n        \"6751665376232210432\"},\r\n    {0x1.7151b377c247fp+428, chars_format::general, 309,\r\n        \"10000000000000001521315302688511758389539292599454039265292748649855914485789257598319664360532475108467547341\"\r\n        \"10953387277122797568\"},\r\n    {0x1.cda62055b2d9dp+431, chars_format::general, 309,\r\n        \"99999999999999993665180888231886764680292871228501592999945072962767998323669620536317549817787697967498615270\"\r\n        \"90709766158759755776\"},\r\n    {0x1.cda62055b2d9ep+431, chars_format::general, 309,\r\n        \"10000000000000000597830782460516151851749290252338090708736359498322008205751130936310560341066601403445681992\"\r\n        \"244323541365884452864\"},\r\n    {0x1.2087d4358fc82p+435, chars_format::general, 309,\r\n        \"99999999999999991202555500957231813912852864969525730182461368558677581576901282770959939099212034754106974340\"\r\n        \"599870111173348163584\"},\r\n    {0x1.2087d4358fc83p+435, chars_format::general, 309,\r\n        \"10000000000000001090355859915447142005237291504133263272233100379140091555104798489382082484781734046124010178\"\r\n        \"3057690514487343316992\"},\r\n    {0x1.68a9c942f3ba3p+438, chars_format::general, 309,\r\n        \"99999999999999999082956740236127656368660884998248491198409222651766915166559963620104293398654157036960225317\"\r\n        \"5829982724989462249472\"},\r\n    {0x1.68a9c942f3ba4p+438, chars_format::general, 309,\r\n        \"10000000000000001484375921879391934128027692505569401323030493083794558234587732531839300199753840160266672727\"\r\n        \"15492545951501423476736\"},\r\n    {0x1.c2d43b93b0a8bp+441, chars_format::general, 309,\r\n        \"99999999999999989626475253101452645421691260963781177979271797740059714858969546601131068239323610297536324145\"\r\n        \"20324447890822855131136\"},\r\n    {0x1.c2d43b93b0a8cp+441, chars_format::general, 309,\r\n        \"10000000000000000223511723594768599335098409300973759560478836428900264860242343595976203511843100595010152570\"\r\n        \"837624953702918544949248\"},\r\n    {0x1.19c4a53c4e697p+445, chars_format::general, 309,\r\n        \"99999999999999992148203649670699315007549827372972461504375111049848301607660324472857261615145089428049364457\"\r\n        \"837845490532419930947584\"},\r\n    {0x1.19c4a53c4e698p+445, chars_format::general, 309,\r\n        \"10000000000000001232203082222467267169441835864650272970520161752815699559718654744666680862171692247215368695\"\r\n        \"8914653583525950968037376\"},\r\n    {0x1.6035ce8b6203dp+448, chars_format::general, 309,\r\n        \"99999999999999996182969084181493986344923533627678515144540412345510040405565569067619171016459456036870228958\"\r\n        \"0532071091311261383655424\"},\r\n    {0x1.6035ce8b6203ep+448, chars_format::general, 309,\r\n        \"10000000000000001232203082222467267169441835864650272970520161752815699559718654744666680862171692247215368695\"\r\n        \"89146535835259509680373760\"},\r\n    {0x1.b843422e3a84cp+451, chars_format::general, 309,\r\n        \"99999999999999992955156736572858249275024568623913672232408171308980649367241373391809643495407962749813537357\"\r\n        \"88091781425216117243117568\"},\r\n    {0x1.b843422e3a84dp+451, chars_format::general, 309,\r\n        \"10000000000000000586640612700740119755462042863897304388093713545509821352053815609504775357961393589804030375\"\r\n        \"857007499376802103616864256\"},\r\n    {0x1.132a095ce492fp+455, chars_format::general, 309,\r\n        \"99999999999999982626157224225223890651347880611866174913584999992086598044603947229219155428043184231232124237\"\r\n        \"329592070639473281441202176\"},\r\n    {0x1.132a095ce4930p+455, chars_format::general, 309,\r\n        \"10000000000000000328415624892049260789870125663596116955123134262587470068987879955440013156277274126839495047\"\r\n        \"8432243557864849063421149184\"},\r\n    {0x1.57f48bb41db7bp+458, chars_format::general, 309,\r\n        \"99999999999999986757757029164277634100818555816685173841114268518844218573658917694255350654989095638664689485\"\r\n        \"5501223680845484378371915776\"},\r\n    {0x1.57f48bb41db7cp+458, chars_format::general, 309,\r\n        \"10000000000000000328415624892049260789870125663596116955123134262587470068987879955440013156277274126839495047\"\r\n        \"84322435578648490634211491840\"},\r\n    {0x1.adf1aea12525ap+461, chars_format::general, 309,\r\n        \"99999999999999990063036873115520628860395095980540372983137683340250314996902894066284306836545824764610741684\"\r\n        \"12654660604060856295398309888\"},\r\n    {0x1.adf1aea12525bp+461, chars_format::general, 309,\r\n        \"10000000000000000328415624892049260789870125663596116955123134262587470068987879955440013156277274126839495047\"\r\n        \"843224355786484906342114918400\"},\r\n    {0x1.0cb70d24b7378p+465, chars_format::general, 309,\r\n        \"99999999999999984774589122793531837245072631718372054355900219626000560719712531871037976946055058163097058166\"\r\n        \"404267825310912362767116664832\"},\r\n    {0x1.0cb70d24b7379p+465, chars_format::general, 309,\r\n        \"10000000000000000592838012408148700370636248876704532886485007448299957782847398065202329650801812456915179223\"\r\n        \"7293382948229697163514582401024\"},\r\n    {0x1.4fe4d06de5056p+468, chars_format::general, 309,\r\n        \"99999999999999984774589122793531837245072631718372054355900219626000560719712531871037976946055058163097058166\"\r\n        \"4042678253109123627671166648320\"},\r\n    {0x1.4fe4d06de5057p+468, chars_format::general, 309,\r\n        \"10000000000000000169762192382389597041410451735731067396306010351159977440672169089582623259562551128794084542\"\r\n        \"31155599236459402033650892537856\"},\r\n    {0x1.a3de04895e46cp+471, chars_format::general, 309,\r\n        \"99999999999999991543802243205677490512685385973947502198764173180240246194516195480953279205883239413034573069\"\r\n        \"08878466464492349900630570041344\"},\r\n    {0x1.a3de04895e46dp+471, chars_format::general, 309,\r\n        \"10000000000000000508222848402996879704791089448509839788449208028871961714412352270078388372553960191290960287\"\r\n        \"445781834331294577148468377157632\"},\r\n    {0x1.066ac2d5daec3p+475, chars_format::general, 309,\r\n        \"99999999999999980713061250546244445284504979165026785650181847493456749434830333705088795590158149413134549224\"\r\n        \"793557721710505681023603243483136\"},\r\n    {0x1.066ac2d5daec4p+475, chars_format::general, 309,\r\n        \"10000000000000000237454323586511053574086579278286821874734649886702374295420205725681776282160832941293459691\"\r\n        \"3384011607579341316989008157343744\"},\r\n    {0x1.4805738b51a74p+478, chars_format::general, 309,\r\n        \"99999999999999985045357647610017663375777141888595072269614777768170148138704678415434589036448185413094558762\"\r\n        \"5116484988842728082166842262552576\"},\r\n    {0x1.4805738b51a75p+478, chars_format::general, 309,\r\n        \"10000000000000000237454323586511053574086579278286821874734649886702374295420205725681776282160832941293459691\"\r\n        \"33840116075793413169890081573437440\"},\r\n    {0x1.9a06d06e26112p+481, chars_format::general, 309,\r\n        \"99999999999999998908706118214091961267848062604013589451800154647253023991102581488541128064576300612966589283\"\r\n        \"20953898584032761523454337112604672\"},\r\n    {0x1.9a06d06e26113p+481, chars_format::general, 309,\r\n        \"10000000000000001277205458881816625915991898331943210663398553152633589984350048456164766709270441581283861980\"\r\n        \"390742947279638242225240251599683584\"},\r\n    {0x1.00444244d7cabp+485, chars_format::general, 309,\r\n        \"99999999999999993363366729972462242111019694317846182578926003895619873650143420259298512453325054533017777074\"\r\n        \"930382791057905692427399713177731072\"},\r\n    {0x1.00444244d7cacp+485, chars_format::general, 309,\r\n        \"10000000000000001554472428293898111873833316746251581007042260690215247501398006517626897489833003885281302590\"\r\n        \"8047007570187593383655974344970993664\"},\r\n    {0x1.405552d60dbd6p+488, chars_format::general, 309,\r\n        \"99999999999999997799638240565766017436482388946780108077225324496926393922910749242692604942326051396976826841\"\r\n        \"5537077468838432306731146395363835904\"},\r\n    {0x1.405552d60dbd7p+488, chars_format::general, 309,\r\n        \"10000000000000001554472428293898111873833316746251581007042260690215247501398006517626897489833003885281302590\"\r\n        \"80470075701875933836559743449709936640\"},\r\n    {0x1.906aa78b912cbp+491, chars_format::general, 309,\r\n        \"99999999999999990701603823616479976915742077540485827279946411534835961486483022869262056959924456414642347214\"\r\n        \"95638781756234316947997075736253956096\"},\r\n    {0x1.906aa78b912ccp+491, chars_format::general, 309,\r\n        \"10000000000000000489767265751505205795722270035307438887450423745901682635933847561612315292472764637931130646\"\r\n        \"815102767620534329186625852171022761984\"},\r\n    {0x1.f485516e7577ep+494, chars_format::general, 309,\r\n        \"99999999999999993540817590396194393124038202103003539598857976719672134461054113418634276152885094407576139065\"\r\n        \"595315789290943193957228310232077172736\"},\r\n    {0x1.f485516e7577fp+494, chars_format::general, 309,\r\n        \"10000000000000000489767265751505205795722270035307438887450423745901682635933847561612315292472764637931130646\"\r\n        \"8151027676205343291866258521710227619840\"},\r\n    {0x1.38d352e5096afp+498, chars_format::general, 309,\r\n        \"99999999999999998083559617243737459057312001403031879309116481015410011220367858297629826861622115196270206026\"\r\n        \"6176005440567032331208403948233373515776\"},\r\n    {0x1.38d352e5096b0p+498, chars_format::general, 309,\r\n        \"10000000000000001625452772463390972279040719860314523815015049819836151825762283781361202969657019835104647387\"\r\n        \"07067395631197433897752887331883780669440\"},\r\n    {0x1.8708279e4bc5ap+501, chars_format::general, 309,\r\n        \"99999999999999987180978752809634100817454883082963864004496070705639106998014870588040505160653265303404445320\"\r\n        \"16411713261887913912817139180431292235776\"},\r\n    {0x1.8708279e4bc5bp+501, chars_format::general, 309,\r\n        \"10000000000000000171775323872177191180393104084305455107732328445200031262781885420082626742861173182722545959\"\r\n        \"543542834786931126445173006249634549465088\"},\r\n    {0x1.e8ca3185deb71p+504, chars_format::general, 309,\r\n        \"99999999999999992995688547174489225212045346187000138833626956204183589249936464033154810067836651912932851030\"\r\n        \"272641618719051989257594860081125951275008\"},\r\n    {0x1.e8ca3185deb72p+504, chars_format::general, 309,\r\n        \"10000000000000000462510813590419947400122627239507268849188872720127255375377965092338341988220342513198966245\"\r\n        \"0489690590919397689516441796634752009109504\"},\r\n    {0x1.317e5ef3ab327p+508, chars_format::general, 309,\r\n        \"99999999999999999973340300412315374485553901911843668628584018802436967952242376167291975956456715844366937882\"\r\n        \"4028710020392594094129030220133015859757056\"},\r\n    {0x1.317e5ef3ab328p+508, chars_format::general, 309,\r\n        \"10000000000000001858041164237985177254824338384475974808180285239777931115839147519165775165944355299485783615\"\r\n        \"47501493575598125298270581204991032785108992\"},\r\n    {0x1.7dddf6b095ff0p+511, chars_format::general, 309,\r\n        \"99999999999999988809097495231793535647940212752094020956652718645231562028552916752672510534664613554072398918\"\r\n        \"99450398872692753716440996292182057045458944\"},\r\n    {0x1.7dddf6b095ff1p+511, chars_format::general, 309,\r\n        \"10000000000000000369475456880582265409809179829842688451922778552150543659347219597216513109705408327446511753\"\r\n        \"687232667314337003349573404171046192448274432\"},\r\n    {0x1.dd55745cbb7ecp+514, chars_format::general, 309,\r\n        \"99999999999999988809097495231793535647940212752094020956652718645231562028552916752672510534664613554072398918\"\r\n        \"994503988726927537164409962921820570454589440\"},\r\n    {0x1.dd55745cbb7edp+514, chars_format::general, 309,\r\n        \"10000000000000000071762315409101683040806148118916031180671277214625066168048834012826660698457618933038657381\"\r\n        \"3296762136260081534229469225952733653677113344\"},\r\n    {0x1.2a5568b9f52f4p+518, chars_format::general, 309,\r\n        \"99999999999999998335918022319172171456037227501747053636700761446046841750101255453147787694593874175123738834\"\r\n        \"4363105067534507348164573733465510370326085632\"},\r\n    {0x1.2a5568b9f52f5p+518, chars_format::general, 309,\r\n        \"10000000000000001738955907649392944307223125700105311899679684704767740119319793285409834201445239541722641866\"\r\n        \"53199235428064971301205521941960119701886468096\"},\r\n    {0x1.74eac2e8727b1p+521, chars_format::general, 309,\r\n        \"99999999999999998335918022319172171456037227501747053636700761446046841750101255453147787694593874175123738834\"\r\n        \"43631050675345073481645737334655103703260856320\"},\r\n    {0x1.74eac2e8727b2p+521, chars_format::general, 309,\r\n        \"10000000000000001357883086565897798874899245110119190592477762992735128930457859737390823115048069116880588269\"\r\n        \"914320093559588785105973323002611978355743916032\"},\r\n    {0x1.d22573a28f19dp+524, chars_format::general, 309,\r\n        \"99999999999999995287335453651211007997446182781858083179085387749785952239205787068995699003416510776387310061\"\r\n        \"494932420984963311567802202010637287727642443776\"},\r\n    {0x1.d22573a28f19ep+524, chars_format::general, 309,\r\n        \"10000000000000000748166572832305566183181036166141396500954688253482951028278766060560405376812596437133302515\"\r\n        \"3260444764058913004562422887354292284947506921472\"},\r\n    {0x1.2357684599702p+528, chars_format::general, 309,\r\n        \"99999999999999992848469398716842077230573347005946906812993088792777240630489412361674028050474620057398167043\"\r\n        \"1418299523701733729688780649419062882836695482368\"},\r\n    {0x1.2357684599703p+528, chars_format::general, 309,\r\n        \"10000000000000001235939783819179352336555603321323631774173148044884693350022041002024739567400974580931131118\"\r\n        \"99666497012884928817602711614917542838354527125504\"},\r\n    {0x1.6c2d4256ffcc2p+531, chars_format::general, 309,\r\n        \"99999999999999985044098022926861498776580272523031142441497732130349363482597013298244681001060569756632909384\"\r\n        \"41190205280284556945232082632196709006295628251136\"},\r\n    {0x1.6c2d4256ffcc3p+531, chars_format::general, 309,\r\n        \"10000000000000000065284077450682265568456642148886267118448844545520511777838181142510337509988867035816342470\"\r\n        \"187175785193750117648543530356184548650438281396224\"},\r\n    {0x1.c73892ecbfbf3p+534, chars_format::general, 309,\r\n        \"99999999999999991287595123558845961539774732109363753938694017460291665200910932548988158640591809997245115511\"\r\n        \"395844372456707812265566617217918448639526895091712\"},\r\n    {0x1.c73892ecbfbf4p+534, chars_format::general, 309,\r\n        \"10000000000000000377458932482281488706616365128202897693308658812017626863753877105047511391965429047846952776\"\r\n        \"5363729011764432297892058199009821165792668120252416\"},\r\n    {0x1.1c835bd3f7d78p+538, chars_format::general, 309,\r\n        \"99999999999999993784993963811639746645052515943896798537572531592268585888236500249285549696404306093489997962\"\r\n        \"1894213003182527093908649335762989920701551401238528\"},\r\n    {0x1.1c835bd3f7d79p+538, chars_format::general, 309,\r\n        \"10000000000000001376418468583399002748727478662016115532860064464808395138684104185166467814290427486344905756\"\r\n        \"85380367232106118863932514644433433395151811003809792\"},\r\n    {0x1.63a432c8f5cd6p+541, chars_format::general, 309,\r\n        \"99999999999999993784993963811639746645052515943896798537572531592268585888236500249285549696404306093489997962\"\r\n        \"18942130031825270939086493357629899207015514012385280\"},\r\n    {0x1.63a432c8f5cd7p+541, chars_format::general, 309,\r\n        \"10000000000000000976834654142951997131883033248490828397039502203692087828712013353118885245360428110945724564\"\r\n        \"726831363863214005099277415826993447002617590832955392\"},\r\n    {0x1.bc8d3f7b3340bp+544, chars_format::general, 309,\r\n        \"99999999999999987391652932764487656775541389327492204364443535414407668928683046936524228593524316087103098888\"\r\n        \"157864364992697772750101243698844800887746832841572352\"},\r\n    {0x1.bc8d3f7b3340cp+544, chars_format::general, 309,\r\n        \"10000000000000000017833499485879183651456364256030139271070152777012950284778995356204687079928429609987689703\"\r\n        \"6220978235643807646031628623453753183252563447406133248\"},\r\n    {0x1.15d847ad00087p+548, chars_format::general, 309,\r\n        \"99999999999999989948989345183348492723345839974054042033695133885552035712504428261628757034676312089657858517\"\r\n        \"7704871391229197474064067196498264773607101557544845312\"},\r\n    {0x1.15d847ad00088p+548, chars_format::general, 309,\r\n        \"10000000000000001040768064453423518030578144514654874338770792165470696998307547886246498456389228011009593555\"\r\n        \"46714693321646955446568505272576798891444167390577819648\"},\r\n    {0x1.5b4e5998400a9p+551, chars_format::general, 309,\r\n        \"99999999999999994040727605053525830239832961008552982304497691439383022566618638381796002540519505693745473925\"\r\n        \"15068357773127490685649548117139715971745147241514401792\"},\r\n    {0x1.5b4e5998400aap+551, chars_format::general, 309,\r\n        \"10000000000000001040768064453423518030578144514654874338770792165470696998307547886246498456389228011009593555\"\r\n        \"467146933216469554465685052725767988914441673905778196480\"},\r\n    {0x1.b221effe500d3p+554, chars_format::general, 309,\r\n        \"99999999999999990767336997157383960226643264180953830087855645396318233083327270285662206135844950810475381599\"\r\n        \"246526426844590779296424471954140613832058419086616428544\"},\r\n    {0x1.b221effe500d4p+554, chars_format::general, 309,\r\n        \"10000000000000000386089942874195144027940205149135043895442382956857739101649274267019739175454317034355575090\"\r\n        \"2863155030391327289536708508823166797373630632400726786048\"},\r\n    {0x1.0f5535fef2084p+558, chars_format::general, 309,\r\n        \"99999999999999993386049483474297456237195021643033151861169282230770064669960364762569243259584594717091455459\"\r\n        \"9698521475539380813444812793279458505403728617494385000448\"},\r\n    {0x1.0f5535fef2085p+558, chars_format::general, 309,\r\n        \"10000000000000001433574937400960542432160908133966772604767837690638471736302512057782554024950174597002004634\"\r\n        \"57564579132287164977289357383183877442068884030520150720512\"},\r\n    {0x1.532a837eae8a5p+561, chars_format::general, 309,\r\n        \"99999999999999993386049483474297456237195021643033151861169282230770064669960364762569243259584594717091455459\"\r\n        \"96985214755393808134448127932794585054037286174943850004480\"},\r\n    {0x1.532a837eae8a6p+561, chars_format::general, 309,\r\n        \"10000000000000001014580939590254383070472626940034081121037655797126178682441216941477428085151831571943432816\"\r\n        \"859913676009376081445204484652029936547358529479149975764992\"},\r\n    {0x1.a7f5245e5a2cep+564, chars_format::general, 309,\r\n        \"99999999999999990034097500988648181343688772091571619991327827082671720239070003832128235741197850516622880918\"\r\n        \"243995225045973534722968565889475147553730375141026248523776\"},\r\n    {0x1.a7f5245e5a2cfp+564, chars_format::general, 309,\r\n        \"10000000000000000344190543093124528091771377029741774747069364767506509796263144755389226581474482731849717908\"\r\n        \"5147422915077831721209019419643357959500300321574675254607872\"},\r\n    {0x1.08f936baf85c1p+568, chars_format::general, 309,\r\n        \"99999999999999995397220672965687021173298771373910070983074155319629071328494581320833847770616641237372600185\"\r\n        \"0053663010587168093173889073910282723323583537144858509574144\"},\r\n    {0x1.08f936baf85c2p+568, chars_format::general, 309,\r\n        \"10000000000000001684971336087384238049173876850326387495005946826745847568619289127565629588829180412037147725\"\r\n        \"20508506051096899076950702733972407714468702680083242606919680\"},\r\n    {0x1.4b378469b6731p+571, chars_format::general, 309,\r\n        \"99999999999999991106722135384055949309610771948039310189677092730063190456954919329869358147081608660772824771\"\r\n        \"59626944024852218964185263418978577250945597085571816901050368\"},\r\n    {0x1.4b378469b6732p+571, chars_format::general, 309,\r\n        \"10000000000000000826871628571058023676436276965152235336326534308832671394311356729372731664122173896717192642\"\r\n        \"523265688348930066834399772699475577180106550229078889679814656\"},\r\n    {0x1.9e056584240fdp+574, chars_format::general, 309,\r\n        \"99999999999999987674323305318751091818660372407342701554959442658410485759723189737097766448253582599493004440\"\r\n        \"868991951600366493901423615628791772651134064568704023452975104\"},\r\n    {0x1.9e056584240fep+574, chars_format::general, 309,\r\n        \"10000000000000000140391862557997052178246197057012913609383004294502130454865010810818413324356568684461228576\"\r\n        \"3778101906192989276863139689872767772084421689716760605683089408\"},\r\n    {0x1.02c35f729689ep+578, chars_format::general, 309,\r\n        \"99999999999999984928404241266507205825900052774785414647185322601088322001937806062880493089191161750469148176\"\r\n        \"2871699606818419373090804007799965727644765395390927070069522432\"},\r\n    {0x1.02c35f729689fp+578, chars_format::general, 309,\r\n        \"10000000000000000689575675368445829376798260983524370990937828305966563206422087545661867996169052854265999829\"\r\n        \"29417458880300383900478261195703581718577367397759832385751351296\"},\r\n    {0x1.4374374f3c2c6p+581, chars_format::general, 309,\r\n        \"99999999999999993715345246233687641002733075598968732752062506784519246026851033820375767838190908467345488222\"\r\n        \"94900033162112051840457868829614121240178061963384891963422539776\"},\r\n    {0x1.4374374f3c2c7p+581, chars_format::general, 309,\r\n        \"10000000000000001128922725616804851135639912124733536896181687515138109407667748933536631733619040190109816831\"\r\n        \"627266107349967768059557526332843049167638877982336134488877170688\"},\r\n    {0x1.945145230b377p+584, chars_format::general, 309,\r\n        \"99999999999999986685792442259943292861266657339622078268160759437774506806920451614379548038991111093844416185\"\r\n        \"619536034869697653528180058283225500691937355558043949532406874112\"},\r\n    {0x1.945145230b378p+584, chars_format::general, 309,\r\n        \"10000000000000000074489805020743198914419949385831538723596425413126398524678161602637198763739070584084656026\"\r\n        \"0278464628372543383280977318309056924111623883709653889736043921408\"},\r\n    {0x1.f965966bce055p+587, chars_format::general, 309,\r\n        \"99999999999999989497613563849441032117853224643360740061721458376472402494892684496778035958671030043244845000\"\r\n        \"5513217535702667994787395102883917853758746611883659375731342835712\"},\r\n    {0x1.f965966bce056p+587, chars_format::general, 309,\r\n        \"10000000000000000074489805020743198914419949385831538723596425413126398524678161602637198763739070584084656026\"\r\n        \"02784646283725433832809773183090569241116238837096538897360439214080\"},\r\n    {0x1.3bdf7e0360c35p+591, chars_format::general, 309,\r\n        \"99999999999999987248156666577842840712583970800369810626872899225514085944514898190859245622927094883724501948\"\r\n        \"60589317860981148271829194868425875762872481668410834714055235600384\"},\r\n    {0x1.3bdf7e0360c36p+591, chars_format::general, 309,\r\n        \"10000000000000000524381184475062837195473800154429724610566137243318061834753718863820956830887857615988724636\"\r\n        \"416932177829345401680187244151732297960592357271816907060120777654272\"},\r\n    {0x1.8ad75d8438f43p+594, chars_format::general, 309,\r\n        \"99999999999999998045549773481514159457876389246726271914145983150114005386328272459269439234497983649422148597\"\r\n        \"943950338419997003168440244384097290815044070304544781216945608327168\"},\r\n    {0x1.8ad75d8438f44p+594, chars_format::general, 309,\r\n        \"10000000000000001244207391601974258445159961384186822029717676171624723130874610481714969738325916867035234413\"\r\n        \"0394693218166911030435304638650548668396803075131793359985469944758272\"},\r\n    {0x1.ed8d34e547313p+597, chars_format::general, 309,\r\n        \"99999999999999989407635287958577104461642454489641102884327516010434069832877573044541284345241272636864031278\"\r\n        \"4735046105718485868083216078242264642659886674081956339558310064685056\"},\r\n    {0x1.ed8d34e547314p+597, chars_format::general, 309,\r\n        \"10000000000000000092485460198915984445662103416575466159075213886334065057081183893084549086425022065360818770\"\r\n        \"44340989143693798086218131232373875663313958712699944969706504756133888\"},\r\n    {0x1.3478410f4c7ecp+601, chars_format::general, 309,\r\n        \"99999999999999991711079150764693652460638170424863814625612440581015385980464426221802125649043062240212862563\"\r\n        \"66562347133135483117101991090685868467907010818055540655879490029748224\"},\r\n    {0x1.3478410f4c7edp+601, chars_format::general, 309,\r\n        \"10000000000000001013863005321362603645260389790664550855589183714566591516115925163988885607945737906700351284\"\r\n        \"520257435740740478607260633556791644798372163435943358738250605092929536\"},\r\n    {0x1.819651531f9e7p+604, chars_format::general, 309,\r\n        \"99999999999999991711079150764693652460638170424863814625612440581015385980464426221802125649043062240212862563\"\r\n        \"665623471331354831171019910906858684679070108180555406558794900297482240\"},\r\n    {0x1.819651531f9e8p+604, chars_format::general, 309,\r\n        \"10000000000000000645311987272383955965421075241028916976983595783273580932502028655627150999337451570164538278\"\r\n        \"8895184180192194795092289050635704895322791329123657951217763820802932736\"},\r\n    {0x1.e1fbe5a7e7861p+607, chars_format::general, 309,\r\n        \"99999999999999994659487295156522833899352686821948885654457144031359470649375598288696002517909352932499366608\"\r\n        \"7115356131035228239552737388526279268078143523691759154905886843985723392\"},\r\n    {0x1.e1fbe5a7e7862p+607, chars_format::general, 309,\r\n        \"10000000000000000645311987272383955965421075241028916976983595783273580932502028655627150999337451570164538278\"\r\n        \"88951841801921947950922890506357048953227913291236579512177638208029327360\"},\r\n    {0x1.2d3d6f88f0b3cp+611, chars_format::general, 309,\r\n        \"99999999999999982865854717589206108144494621233608601539078330229983131973730910021120495042444190163353350428\"\r\n        \"52788704601485085281825842706955095829283737561469387976341354799421194240\"},\r\n    {0x1.2d3d6f88f0b3dp+611, chars_format::general, 309,\r\n        \"10000000000000000173566684169691286935226752617495305612368443231218527385476241124924130700318845059398697631\"\r\n        \"682172475335672600663748292592247410791680053842186513692689376624118857728\"},\r\n    {0x1.788ccb6b2ce0cp+614, chars_format::general, 309,\r\n        \"99999999999999997961704416875371517110712945186684165206763211895744845478556111003617144611039598507860251139\"\r\n        \"162957211888350975873638026151889477992007905860430885494197722591793250304\"},\r\n    {0x1.788ccb6b2ce0dp+614, chars_format::general, 309,\r\n        \"10000000000000001305755411616153692607693126913975972887444809356150655898338131198611379417963500685236715184\"\r\n        \"9798027377761851098929017625234227997691178436106167891224981897189374558208\"},\r\n    {0x1.d6affe45f818fp+617, chars_format::general, 309,\r\n        \"99999999999999997961704416875371517110712945186684165206763211895744845478556111003617144611039598507860251139\"\r\n        \"1629572118883509758736380261518894779920079058604308854941977225917932503040\"},\r\n    {0x1.d6affe45f8190p+617, chars_format::general, 309,\r\n        \"10000000000000001003838417630430384428368760434914461614091111722835421628241627178961446426591592518346577170\"\r\n        \"76710133445871510743179417054177602937513443300570204900788250622698582966272\"},\r\n    {0x1.262dfeebbb0f9p+621, chars_format::general, 309,\r\n        \"99999999999999990715696561218012120806928149689207894646274468696179222996240014532018752818113802502496938798\"\r\n        \"05812353226907091680705581859236698853640605134247712274342131878495422251008\"},\r\n    {0x1.262dfeebbb0fap+621, chars_format::general, 309,\r\n        \"10000000000000001003838417630430384428368760434914461614091111722835421628241627178961446426591592518346577170\"\r\n        \"767101334458715107431794170541776029375134433005702049007882506226985829662720\"},\r\n    {0x1.6fb97ea6a9d37p+624, chars_format::general, 309,\r\n        \"99999999999999986851159038200753776111576258757220550347347138989744224339004763080499610528553377966303172216\"\r\n        \"135545569805454885304878641227288327493418395599568449276340570087973407686656\"},\r\n    {0x1.6fb97ea6a9d38p+624, chars_format::general, 309,\r\n        \"10000000000000000230930913026978715489298382248516992754305645781548421896794576888657617968679507611107823854\"\r\n        \"3825857419659919011313587350687602971665369018571203143144663564875896666980352\"},\r\n    {0x1.cba7de5054485p+627, chars_format::general, 309,\r\n        \"99999999999999989942789056614560451867857771502810425786489002754892223264792964241714924360201717595258185481\"\r\n        \"6736079397763477105066203831193512563278085201938953880500051690455580595453952\"},\r\n    {0x1.cba7de5054486p+627, chars_format::general, 309,\r\n        \"10000000000000000230930913026978715489298382248516992754305645781548421896794576888657617968679507611107823854\"\r\n        \"38258574196599190113135873506876029716653690185712031431446635648758966669803520\"},\r\n    {0x1.1f48eaf234ad3p+631, chars_format::general, 309,\r\n        \"99999999999999987469485041883515111262832561306338525435175511742773824124162403312742673294883045892094174869\"\r\n        \"24315804379963345034522698960570091326029642051843383703107348987949033805840384\"},\r\n    {0x1.1f48eaf234ad4p+631, chars_format::general, 309,\r\n        \"10000000000000000725591715973187783610303424287811372824568343983972101724920689074452068181743241951740625976\"\r\n        \"868675721161334753163637413771490365780039321792212624518252692320803210995433472\"},\r\n    {0x1.671b25aec1d88p+634, chars_format::general, 309,\r\n        \"99999999999999991426771465453187656230872897620693565997277097362163262749171300799098274999392920617156591849\"\r\n        \"131877877362376266603456419227541462168315779999172318661364176545198692437590016\"},\r\n    {0x1.671b25aec1d89p+634, chars_format::general, 309,\r\n        \"10000000000000000725591715973187783610303424287811372824568343983972101724920689074452068181743241951740625976\"\r\n        \"8686757211613347531636374137714903657800393217922126245182526923208032109954334720\"},\r\n    {0x1.c0e1ef1a724eap+637, chars_format::general, 309,\r\n        \"99999999999999991426771465453187656230872897620693565997277097362163262749171300799098274999392920617156591849\"\r\n        \"1318778773623762666034564192275414621683157799991723186613641765451986924375900160\"},\r\n    {0x1.c0e1ef1a724ebp+637, chars_format::general, 309,\r\n        \"10000000000000000409008802087613980012860197382662969579600217134420946634919977275543620045382451973735632618\"\r\n        \"47757813447631532786297905940174312186739777303375354598782943738754654264509857792\"},\r\n    {0x1.188d357087712p+641, chars_format::general, 309,\r\n        \"99999999999999986361444843284006798671781267138319114077787067769344781309159912016563104817620280969076698114\"\r\n        \"87431649040206546179292274931158555956605099986382706217459209761309199883223171072\"},\r\n    {0x1.188d357087713p+641, chars_format::general, 309,\r\n        \"10000000000000000662275133196073022890814778906781692175574718614061870706920546714670378554471083956139627305\"\r\n        \"190456203824330868103505742897540916997511012040520808812168041334151877325366493184\"},\r\n    {0x1.5eb082cca94d7p+644, chars_format::general, 309,\r\n        \"99999999999999994465967438754696170766327875910118237148971115117854351613178134068619377108456504406004528089\"\r\n        \"686414709538562749489776621177115003729674648080379472553427423904462708600804999168\"},\r\n    {0x1.5eb082cca94d8p+644, chars_format::general, 309,\r\n        \"10000000000000001067501262969607491495542109345371648329133920981487349222121457817273192169012895127986018803\"\r\n        \"9310611147811557324883484364908173892056921944513484293311098076487204128137951576064\"},\r\n    {0x1.b65ca37fd3a0dp+647, chars_format::general, 309,\r\n        \"99999999999999997707776476942971919604146519418837886377444734057258179734785422889441886024790993780775660079\"\r\n        \"6112539971931616645685181699233267813951241073670004367049615544210109925082343145472\"},\r\n    {0x1.b65ca37fd3a0ep+647, chars_format::general, 309,\r\n        \"10000000000000001067501262969607491495542109345371648329133920981487349222121457817273192169012895127986018803\"\r\n        \"93106111478115573248834843649081738920569219445134842933110980764872041281379515760640\"},\r\n    {0x1.11f9e62fe4448p+651, chars_format::general, 309,\r\n        \"99999999999999995114329246392351320533891604611862166994665838905735117237499591832783878891723402280958754487\"\r\n        \"67138256706948253250552493092635735926276453993770366538373425000777236538229086224384\"},\r\n    {0x1.11f9e62fe4449p+651, chars_format::general, 309,\r\n        \"10000000000000001586190709079731611309593092306766792205689700011791961721578624028604793595626413427949399922\"\r\n        \"319035400805891558900947084290211273632164107937207783595355268531368138238983848067072\"},\r\n    {0x1.56785fbbdd55ap+654, chars_format::general, 309,\r\n        \"99999999999999995114329246392351320533891604611862166994665838905735117237499591832783878891723402280958754487\"\r\n        \"671382567069482532505524930926357359262764539937703665383734250007772365382290862243840\"},\r\n    {0x1.56785fbbdd55bp+654, chars_format::general, 309,\r\n        \"10000000000000001171239152191632315458352305937650677104445076787548271722012891059539512454335598787978695027\"\r\n        \"6086559719861028977708681660506961660909865771485203001839588998252499578988328956985344\"},\r\n    {0x1.ac1677aad4ab0p+657, chars_format::general, 309,\r\n        \"99999999999999988475104336182762586914039022706004325374751867317836077244447864327739380631070368041427476172\"\r\n        \"3053117059528639544242622390941156386039240473187039308013923507098814799398756243472384\"},\r\n    {0x1.ac1677aad4ab1p+657, chars_format::general, 309,\r\n        \"10000000000000000175355415660194005415374418651772000861457981049363415723055131933782837715237643652049003280\"\r\n        \"30374534281861011105867876227585990799216050325567033999660761493056632508247061001404416\"},\r\n    {0x1.0b8e0acac4eaep+661, chars_format::general, 309,\r\n        \"99999999999999988475104336182762586914039022706004325374751867317836077244447864327739380631070368041427476172\"\r\n        \"30531170595286395442426223909411563860392404731870393080139235070988147993987562434723840\"},\r\n    {0x1.0b8e0acac4eafp+661, chars_format::general, 309,\r\n        \"10000000000000000972062404885344653449756728480474941855847657639911300522221339234388177506516007760792756678\"\r\n        \"147673846152604340428430285295728914471221362369950308146488642846313231335560438561636352\"},\r\n    {0x1.4e718d7d7625ap+664, chars_format::general, 309,\r\n        \"99999999999999996973312221251036165947450327545502362648241750950346848435554075534196338404706251868027512415\"\r\n        \"973882408182135734368278484639385041047239877871023591066789981811181813306167128854888448\"},\r\n    {0x1.4e718d7d7625bp+664, chars_format::general, 309,\r\n        \"10000000000000001396972799138758332401427293722449843719522151821536839081776649794711025395197801952122758490\"\r\n        \"3311023812640679294256310975729923845933871538975662911597585244013782480038750137870188544\"},\r\n    {0x1.a20df0dcd3af0p+667, chars_format::general, 309,\r\n        \"99999999999999990174745913196417302720721283673903932829449844044338231482669106569030772185797544806747483421\"\r\n        \"0390258463987183104130654882031695190925872134291678628544718769301415466131339252487684096\"},\r\n    {0x1.a20df0dcd3af1p+667, chars_format::general, 309,\r\n        \"10000000000000000377187852930565502917417937141710079246703365785635546538843904449936190462361495892930754141\"\r\n        \"09087389699655531583234914810756005630018925423128793192791080866922220799992003324610084864\"},\r\n    {0x1.0548b68a044d6p+671, chars_format::general, 309,\r\n        \"99999999999999990174745913196417302720721283673903932829449844044338231482669106569030772185797544806747483421\"\r\n        \"03902584639871831041306548820316951909258721342916786285447187693014154661313392524876840960\"},\r\n    {0x1.0548b68a044d7p+671, chars_format::general, 309,\r\n        \"10000000000000001193015809897119766504625422406301890824958394614356580573190100725756058408630540740284357620\"\r\n        \"483056684410565406706974707679905918934747573964310619313388981254947040003084017678835253248\"},\r\n    {0x1.469ae42c8560cp+674, chars_format::general, 309,\r\n        \"99999999999999998876910787506329447650934459829549922997503484884029261182361866844442696946000689845185920534\"\r\n        \"555642245481492613075738123641525387194542623914743194966239051177873087980216425864602058752\"},\r\n    {0x1.469ae42c8560dp+674, chars_format::general, 309,\r\n        \"10000000000000001628124053612615373751136081214084190333361076656341132058174738739526654646640697992206279476\"\r\n        \"1588875043647041218401083394518237123398453444885893859189773399673336170714381427096269357056\"},\r\n    {0x1.98419d37a6b8fp+677, chars_format::general, 309,\r\n        \"99999999999999998876910787506329447650934459829549922997503484884029261182361866844442696946000689845185920534\"\r\n        \"5556422454814926130757381236415253871945426239147431949662390511778730879802164258646020587520\"},\r\n    {0x1.98419d37a6b90p+677, chars_format::general, 309,\r\n        \"10000000000000001280037458640218887953927554167858350726638931022753490870187028328510177656232572190668741991\"\r\n        \"61822284840139314973360143403428947761576712806916637263450665299742435541675484268499358973952\"},\r\n    {0x1.fe52048590672p+680, chars_format::general, 309,\r\n        \"99999999999999990522832508168813788517929810720129772436171989677925872670656816980047249176205670608285020905\"\r\n        \"57969050236202928251957239362070375381666542984859087613894256390005080826781722527340175556608\"},\r\n    {0x1.fe52048590673p+680, chars_format::general, 309,\r\n        \"10000000000000000166160354728550133402860267619935663985128064995273039068626355013257451286926569625748622041\"\r\n        \"088095949318798038992779336698179926498716835527012730124200454693714718121768282606166882648064\"},\r\n    {0x1.3ef342d37a407p+684, chars_format::general, 309,\r\n        \"99999999999999986067324092522138770313660664528439025470128525568004065464414123719036343698981660348604541103\"\r\n        \"459182906031648839556284004276265549348464259679976306097717770685212259087870984958094927200256\"},\r\n    {0x1.3ef342d37a408p+684, chars_format::general, 309,\r\n        \"10000000000000000388935775510883884313073724929520201333430238200769129428938489676307996560787770138732646031\"\r\n        \"1941213291353170611409437561654018367221268940354434586262616943544566455807655946219322240663552\"},\r\n    {0x1.8eb0138858d09p+687, chars_format::general, 309,\r\n        \"99999999999999989631730825039478784877075981481791623042963296855941511229408278327845068080760868556348924945\"\r\n        \"1555889830959531939269147157518161129230251958148679621306976052570830984318279772103403898929152\"},\r\n    {0x1.8eb0138858d0ap+687, chars_format::general, 309,\r\n        \"10000000000000000388935775510883884313073724929520201333430238200769129428938489676307996560787770138732646031\"\r\n        \"19412132913531706114094375616540183672212689403544345862626169435445664558076559462193222406635520\"},\r\n    {0x1.f25c186a6f04cp+690, chars_format::general, 309,\r\n        \"99999999999999998186306983081094819829272742169837857217766747946991381065394249388986006597030968254935446165\"\r\n        \"22696356805028364441642842329313746550197144253860793660984920822957311285732475861572950035529728\"},\r\n    {0x1.f25c186a6f04dp+690, chars_format::general, 309,\r\n        \"10000000000000000959240852713658286643220175642056616945083801606839120751337554413717392461872443451971747445\"\r\n        \"865546301465605757840244670001489926894056643817026123591538467885955979875798713382291498097180672\"},\r\n    {0x1.37798f428562fp+694, chars_format::general, 309,\r\n        \"99999999999999989061425747836704382546929530769255207431309733449871519907009213590435672179676195243109823530\"\r\n        \"484164010765664497227613801915728022751095446033285297165420831725583764136794858449981115862089728\"},\r\n    {0x1.37798f4285630p+694, chars_format::general, 309,\r\n        \"10000000000000000731118821832548525711161595357042050700422376244411124222377928518753634101438574126676106879\"\r\n        \"9969763125334902791605243044670546908252847439043930576054277584733562461577854658781477884848504832\"},\r\n    {0x1.8557f31326bbbp+697, chars_format::general, 309,\r\n        \"99999999999999992711378241934460557459866815329488267345892539248719464370363227909855805946618104447840072584\"\r\n        \"3812838336795121561031396504666917998514458446354143529431921823271795036250068185162804696593727488\"},\r\n    {0x1.8557f31326bbcp+697, chars_format::general, 309,\r\n        \"10000000000000000731118821832548525711161595357042050700422376244411124222377928518753634101438574126676106879\"\r\n        \"99697631253349027916052430446705469082528474390439305760542775847335624615778546587814778848485048320\"},\r\n    {0x1.e6adefd7f06aap+700, chars_format::general, 309,\r\n        \"99999999999999995631340237212665497390216642977674715277558783887797819941046439365391912960171631811624271827\"\r\n        \"49897969201059028320356032930746282153172616351711759756540926280845609521557638656931995269719916544\"},\r\n    {0x1.e6adefd7f06abp+700, chars_format::general, 309,\r\n        \"10000000000000000731118821832548525711161595357042050700422376244411124222377928518753634101438574126676106879\"\r\n        \"996976312533490279160524304467054690825284743904393057605427758473356246157785465878147788484850483200\"},\r\n    {0x1.302cb5e6f642ap+704, chars_format::general, 309,\r\n        \"99999999999999990959401044767537593501656918740576398586892792465272451027953301036534141738485988029569553038\"\r\n        \"510666318680865279842887243162229186843277653306392406169861934038413548670665077684456779836676898816\"},\r\n    {0x1.302cb5e6f642bp+704, chars_format::general, 309,\r\n        \"10000000000000000964715781454804920905589581568896966534955675815537392668032585435196522662522856315778842819\"\r\n        \"4463919811999765293285579587743163725597071694149293171752051249118583734850310313223909471278765965312\"},\r\n    {0x1.7c37e360b3d35p+707, chars_format::general, 309,\r\n        \"99999999999999998434503752679742239723352477519933705291958378741313041288902322362706575693183018080857103100\"\r\n        \"8919677160084252852199641809946030023447952696435527124027376600704816231425231719002378564135125254144\"},\r\n    {0x1.7c37e360b3d36p+707, chars_format::general, 309,\r\n        \"10000000000000001338470916850415153216674359507864831870208955129339422181080036501505144360257707818343220322\"\r\n        \"56545705106635452959741180566593506333478305023178733248684891121346177720862393603318000095671837786112\"},\r\n    {0x1.db45dc38e0c82p+710, chars_format::general, 309,\r\n        \"99999999999999995444462669514860381234674254008190782609932144230896805184522713832237602111304206060342083075\"\r\n        \"93944715707740128306913340586165347614418822310868858990958736965765439335377993421392542578277827477504\"},\r\n    {0x1.db45dc38e0c83p+710, chars_format::general, 309,\r\n        \"10000000000000000740462700217438781518938714805516247333803708227256174960204114795411349643881945414240216317\"\r\n        \"574952939280149729167245650639345158094661640924814507988218853130896331250875288495917514830571527733248\"},\r\n    {0x1.290ba9a38c7d1p+714, chars_format::general, 309,\r\n        \"99999999999999990660396936451049407652789096389402106318690169014230827417515340183487244380298106827518051036\"\r\n        \"015414262787762879627804165648934234223216948652905993920546904997130825691790753915825536773603473752064\"},\r\n    {0x1.290ba9a38c7d2p+714, chars_format::general, 309,\r\n        \"10000000000000000979665986870629330198032972686455681148365806988089473848554483477848867530432250375881417919\"\r\n        \"5711545839946316493393121126499811201907102046476036377876708763639225096339747475108225092810302677843968\"},\r\n    {0x1.734e940c6f9c5p+717, chars_format::general, 309,\r\n        \"99999999999999986833144350000000628787280970294371165285696588840898045203909441264486958195493227441258825404\"\r\n        \"0761879473560521568747407734787588406864399290882799171293145332687119715621994096773456255662636329336832\"},\r\n    {0x1.734e940c6f9c6p+717, chars_format::general, 309,\r\n        \"10000000000000000214215469580419574424931347467449492941767090953422917405833303694048810293471274498629572793\"\r\n        \"18330932090828950478869943421594604148335480073467842242942440201823873880805647866312652703956229962072064\"},\r\n    {0x1.d022390f8b837p+720, chars_format::general, 309,\r\n        \"99999999999999996018550557482517698064500472922445423764881181256896722516563598670087645039024937968280966920\"\r\n        \"73033110439215789148209291468717978517470477604338250142827222541691722147321863584969741246387925089779712\"},\r\n    {0x1.d022390f8b838p+720, chars_format::general, 309,\r\n        \"10000000000000000826575883412587379043412647642654443507046063781156162560010247521088856083040055200431048894\"\r\n        \"293585531377363220429189576963174104449239123865018594716021581494785755468791093741283312832736674151661568\"},\r\n    {0x1.221563a9b7322p+724, chars_format::general, 309,\r\n        \"99999999999999988670225591496504042642724870819986016981533507324097780666440272745607095564199569546663253707\"\r\n        \"407016578763273303796211201720443029584092898479300433989106071698353021544403254911815982945786756526505984\"},\r\n    {0x1.221563a9b7323p+724, chars_format::general, 309,\r\n        \"10000000000000000826575883412587379043412647642654443507046063781156162560010247521088856083040055200431048894\"\r\n        \"293585531377363220429189576963174104449239123865018594716021581494785755468791093741283312832736674151661568\"\r\n        \"0\"},\r\n    {0x1.6a9abc9424febp+727, chars_format::general, 309,\r\n        \"99999999999999996508438888548251941759285513062609384217104359519083318639905153731719681670679962529722147801\"\r\n        \"618552072767416863994485028884962235547412234547654639257549968998154834801806327912222841098418750522549862\"\r\n        \"4\"},\r\n    {0x1.6a9abc9424fecp+727, chars_format::general, 309,\r\n        \"10000000000000001218486548265174773999240679754785611868824606390905439458683491570394485388364074849583993599\"\r\n        \"0041623060775703984391032683214000647474050906684363049794437763597758461316612473913036557403682738514637619\"\r\n        \"2\"},\r\n    {0x1.c5416bb92e3e6p+730, chars_format::general, 309,\r\n        \"99999999999999999643724207368951101405909769959658731111332700397077533829291106126164716113272119722945705439\"\r\n        \"3031662703690742880737945597507699179327399689749963213649275279180755601047675571123855843594715481209674137\"\r\n        \"6\"},\r\n    {0x1.c5416bb92e3e7p+730, chars_format::general, 309,\r\n        \"10000000000000001218486548265174773999240679754785611868824606390905439458683491570394485388364074849583993599\"\r\n        \"00416230607757039843910326832140006474740509066843630497944377635977584613166124739130365574036827385146376192\"\r\n        \"0\"},\r\n    {0x1.1b48e353bce6fp+734, chars_format::general, 309,\r\n        \"99999999999999984594354677029595135102113336853821866019036664182705300920238534632828550788829765195472628778\"\r\n        \"41701812188111865249310881159489304248316684372375624724951524510245607865055365695160441670641811964856316723\"\r\n        \"2\"},\r\n    {0x1.1b48e353bce70p+734, chars_format::general, 309,\r\n        \"10000000000000000466018071748206975684050858099493768614209804580186827813230862995727677122141957123210339765\"\r\n        \"95985489865317261666006898091360622097492643440587430127367316221899487205895055238326459735771560242784354959\"\r\n        \"36\"},\r\n    {0x1.621b1c28ac20bp+737, chars_format::general, 309,\r\n        \"99999999999999988607519885120090059449792385682045030043648940506537896362652553697718194875347726402798782554\"\r\n        \"65332429481124015531462501110312687593638634379075360034695852051995460703834403032781272808056570057453763297\"\r\n        \"28\"},\r\n    {0x1.621b1c28ac20cp+737, chars_format::general, 309,\r\n        \"10000000000000000466018071748206975684050858099493768614209804580186827813230862995727677122141957123210339765\"\r\n        \"95985489865317261666006898091360622097492643440587430127367316221899487205895055238326459735771560242784354959\"\r\n        \"360\"},\r\n    {0x1.baa1e332d728ep+740, chars_format::general, 309,\r\n        \"99999999999999991818052051592485998927935624744623561263338761565603972716583768949629910144562095368659705575\"\r\n        \"64236923315533735757183797070971394269896194384435148282491314085395342974857632902877937717988376531531720556\"\r\n        \"544\"},\r\n    {0x1.baa1e332d728fp+740, chars_format::general, 309,\r\n        \"10000000000000000466018071748206975684050858099493768614209804580186827813230862995727677122141957123210339765\"\r\n        \"95985489865317261666006898091360622097492643440587430127367316221899487205895055238326459735771560242784354959\"\r\n        \"3600\"},\r\n    {0x1.14a52dffc6799p+744, chars_format::general, 309,\r\n        \"99999999999999996954903517948319502092964807244749211214842475260109694882873713352688654575305085714037182409\"\r\n        \"22484113450589288118337870608025324951908290393010809478964053338835154608494800695032601573879266890056452171\"\r\n        \"3664\"},\r\n    {0x1.14a52dffc679ap+744, chars_format::general, 309,\r\n        \"10000000000000001750230938337165351475308153724525181102085733003813258354803349096492363229827704709554708974\"\r\n        \"35547287399081149756295416475624104767995667442731345426485501035259440114304347186365125699744282832415537863\"\r\n        \"06560\"},\r\n    {0x1.59ce797fb817fp+747, chars_format::general, 309,\r\n        \"99999999999999992845422344863652699560941461244648691253639504304505117149841757830241659030710693437735200942\"\r\n        \"35886361342544846229414611778382180406298613586150280521785861936083305301585066461308870489166554603236666879\"\r\n        \"50848\"},\r\n    {0x1.59ce797fb8180p+747, chars_format::general, 309,\r\n        \"10000000000000000928334703720231990968903484524505077109845138812692342808196957992002964120908826254294312680\"\r\n        \"98227736977472261378510764709695475858873732081359239635049862754709070252922400339620379482801740375051580804\"\r\n        \"694016\"},\r\n    {0x1.b04217dfa61dfp+750, chars_format::general, 309,\r\n        \"99999999999999996133007283331386141586560138044729107222601881068988779336267322248199255466386207258776786115\"\r\n        \"85164563028980399740553218842096696042786355031638703687528415058284784747112853848287855356936724432692495112\"\r\n        \"994816\"},\r\n    {0x1.b04217dfa61e0p+750, chars_format::general, 309,\r\n        \"10000000000000000928334703720231990968903484524505077109845138812692342808196957992002964120908826254294312680\"\r\n        \"98227736977472261378510764709695475858873732081359239635049862754709070252922400339620379482801740375051580804\"\r\n        \"6940160\"},\r\n    {0x1.0e294eebc7d2bp+754, chars_format::general, 309,\r\n        \"99999999999999988242803431008825880725075313724536108897092176834227990088845967645101024020764974088276981699\"\r\n        \"46896878981535071313820561889181858515215775562466488089746287565001234077846164119538291674288316841998507352\"\r\n        \"6276096\"},\r\n    {0x1.0e294eebc7d2cp+754, chars_format::general, 309,\r\n        \"10000000000000000928334703720231990968903484524505077109845138812692342808196957992002964120908826254294312680\"\r\n        \"98227736977472261378510764709695475858873732081359239635049862754709070252922400339620379482801740375051580804\"\r\n        \"69401600\"},\r\n    {0x1.51b3a2a6b9c76p+757, chars_format::general, 309,\r\n        \"99999999999999992450912152247524686517867220028639041337364019092767077687470690100086747458429631779210210721\"\r\n        \"53972977140172579808077978930736438529920084612691669741896755561419127768121731974871392305034134223701967491\"\r\n        \"49011968\"},\r\n    {0x1.51b3a2a6b9c77p+757, chars_format::general, 309,\r\n        \"10000000000000000928334703720231990968903484524505077109845138812692342808196957992002964120908826254294312680\"\r\n        \"98227736977472261378510764709695475858873732081359239635049862754709070252922400339620379482801740375051580804\"\r\n        \"694016000\"},\r\n    {0x1.a6208b5068394p+760, chars_format::general, 309,\r\n        \"99999999999999999183886106229442775786334270115203733241798966706429617845270246028063904958693084084703377156\"\r\n        \"85294734193992593398889846197223766553446979093051960385337504355687757672562640543404353314227442034427503713\"\r\n        \"670135808\"},\r\n    {0x1.a6208b5068395p+760, chars_format::general, 309,\r\n        \"10000000000000001264983401419327895432326837028833311705066886193375469816086935788401821995921998869568971002\"\r\n        \"74793824830163262058051358073019842260050076805377254167221900194422501748144445768047027533261405765587857615\"\r\n        \"8030168064\"},\r\n    {0x1.07d457124123cp+764, chars_format::general, 309,\r\n        \"99999999999999988411127779858373832956786989976700226194703050524569553592790956543300452958271560395914310860\"\r\n        \"35179922907880571653590858570844041715803947924475495355832306284857949825457186833751615699518149537266645758\"\r\n        \"1821100032\"},\r\n    {0x1.07d457124123dp+764, chars_format::general, 309,\r\n        \"10000000000000000995664443260051171861588155025370724028889488288828968209774953551282735695911460777349244345\"\r\n        \"33540954548010461514418883382360349139109001026162842541484270242651756551966809425305709092893673453158836166\"\r\n        \"91581616128\"},\r\n    {0x1.49c96cd6d16cbp+767, chars_format::general, 309,\r\n        \"99999999999999988411127779858373832956786989976700226194703050524569553592790956543300452958271560395914310860\"\r\n        \"35179922907880571653590858570844041715803947924475495355832306284857949825457186833751615699518149537266645758\"\r\n        \"18211000320\"},\r\n    {0x1.49c96cd6d16ccp+767, chars_format::general, 309,\r\n        \"10000000000000000564754110205208414148406263819830583747005651641554565639675781971892197615894599829797681693\"\r\n        \"47536362096565980644606923877305160145603279779419783940304062319818564238082591276919599588305301753272401848\"\r\n        \"696295129088\"},\r\n    {0x1.9c3bc80c85c7ep+770, chars_format::general, 309,\r\n        \"99999999999999991858410444297115894662242119621021348449773743702764774153584329178424757598406447976326812075\"\r\n        \"23216662519436418612086534611285553663849717898419964165273969667523488336530932020840491736225123136358120303\"\r\n        \"938278260736\"},\r\n    {0x1.9c3bc80c85c7fp+770, chars_format::general, 309,\r\n        \"10000000000000000564754110205208414148406263819830583747005651641554565639675781971892197615894599829797681693\"\r\n        \"47536362096565980644606923877305160145603279779419783940304062319818564238082591276919599588305301753272401848\"\r\n        \"6962951290880\"},\r\n    {0x1.01a55d07d39cfp+774, chars_format::general, 309,\r\n        \"99999999999999997374062707399103193390970327051935144057886852787877127050853725394623645022622268104986814019\"\r\n        \"04075445897925773745679616275991972780722949856731114260380631079788349954248924320182693394956280894904479577\"\r\n        \"1481474727936\"},\r\n    {0x1.01a55d07d39d0p+774, chars_format::general, 309,\r\n        \"10000000000000001943667175980705238830588315677559032649033928912832653863993131025941919471948554861962682179\"\r\n        \"42751057941188319428005194293481764924821587768997571464080727672884779642512089351755150002988091192908991666\"\r\n        \"99876243210240\"},\r\n    {0x1.420eb449c8842p+777, chars_format::general, 309,\r\n        \"99999999999999984136497275954333676442022629217742034598415390983607480097407174475746315204504299796202809353\"\r\n        \"90014365789551321425056220280696566900227193156784354032124643690352682071725742801761409414001502274393217321\"\r\n        \"44446136385536\"},\r\n    {0x1.420eb449c8843p+777, chars_format::general, 309,\r\n        \"10000000000000000178658451788069303237395289299666618054437734005596700936866924236758275496199492420791481557\"\r\n        \"40876247260071725785255408160775710807422153542338003433646596020960023924842331815965645472194120710174156699\"\r\n        \"571604284243968\"},\r\n    {0x1.9292615c3aa53p+780, chars_format::general, 309,\r\n        \"99999999999999991196532172724877418814794734729311692976800170612551291805912001632480891107500549560887611841\"\r\n        \"97513608514017695996055364811520783369824930063422626153861170298051704942404772944919427537177384205332557191\"\r\n        \"153093955289088\"},\r\n    {0x1.9292615c3aa54p+780, chars_format::general, 309,\r\n        \"10000000000000000531660196626596490356033894575245100973356972987043891522292165594595004291349304909025721681\"\r\n        \"81251209396295044513805365387316921630902040387669917039733422351344975068376283323123546378352914806721123693\"\r\n        \"0570359138156544\"},\r\n    {0x1.f736f9b3494e8p+783, chars_format::general, 309,\r\n        \"99999999999999994020546131433094915763903576933939556328154082464128816489313932495174721468699049466761532837\"\r\n        \"20513305603804245824455022623850469957664024826077935002555780941131314090676385002182634786447736977708293139\"\r\n        \"0365469918625792\"},\r\n    {0x1.f736f9b3494e9p+783, chars_format::general, 309,\r\n        \"10000000000000000531660196626596490356033894575245100973356972987043891522292165594595004291349304909025721681\"\r\n        \"81251209396295044513805365387316921630902040387669917039733422351344975068376283323123546378352914806721123693\"\r\n        \"05703591381565440\"},\r\n    {0x1.3a825c100dd11p+787, chars_format::general, 309,\r\n        \"99999999999999994020546131433094915763903576933939556328154082464128816489313932495174721468699049466761532837\"\r\n        \"20513305603804245824455022623850469957664024826077935002555780941131314090676385002182634786447736977708293139\"\r\n        \"03654699186257920\"},\r\n    {0x1.3a825c100dd12p+787, chars_format::general, 309,\r\n        \"10000000000000001209423546716568689623820016704355788177681911831422497446308629001641523578036944886435462720\"\r\n        \"66771136697843816472621283262276046411983423130707191163420128905684081263961470216866716118177799472091300320\"\r\n        \"549064642593292288\"},\r\n    {0x1.8922f31411455p+790, chars_format::general, 309,\r\n        \"99999999999999990405808264286576519669044258912015891238421075294109584894559460990926618606364969587242913963\"\r\n        \"31073693328877462044103460624068471125229983529879139676226679317989414380888721568885729507381685429067351125\"\r\n        \"745727105048510464\"},\r\n    {0x1.8922f31411456p+790, chars_format::general, 309,\r\n        \"10000000000000000486475973287265010404848153099971055159735310397418651127357734700791903005570128910531738945\"\r\n        \"88883214242858459716550970862319646645496614871467432098154308581055701322003937530207335062364589162363111917\"\r\n        \"8909006652304785408\"},\r\n    {0x1.eb6bafd91596bp+793, chars_format::general, 309,\r\n        \"99999999999999999081179145438220670296706622164632687453780292502155740721970192601122065475966761298087599260\"\r\n        \"65728762788701743116947209423545268323071682640756248459416523213529973684379113808798302177140209145805611957\"\r\n        \"6436948334022754304\"},\r\n    {0x1.eb6bafd91596cp+793, chars_format::general, 309,\r\n        \"10000000000000001064834032030707953780025643983478841574092591544621728182518450141471599463543581691254717965\"\r\n        \"71193552206846745121407220782284766458686061478859239350366964840758405275569963679534839907015157410145662640\"\r\n        \"01743184712072953856\"},\r\n    {0x1.33234de7ad7e2p+797, chars_format::general, 309,\r\n        \"99999999999999982887153500621818255791736877426414667851776420380469583177470160262090564652710083437844186705\"\r\n        \"61039299797029751780972211664521913553767177633785645397462147941854262984530381627628166526924298207894191738\"\r\n        \"10082174047524749312\"},\r\n    {0x1.33234de7ad7e3p+797, chars_format::general, 309,\r\n        \"10000000000000000139461138041199244379741658569866383311120941709096804894261305436384085130786057242097951533\"\r\n        \"99497011464465488473637220910340574757582946907032347746826714825234078949864321840610832155574248213693581484\"\r\n        \"614981956096327942144\"},\r\n    {0x1.7fec216198ddbp+800, chars_format::general, 309,\r\n        \"99999999999999990290136652537887930994008760735314333955549619064668969483527317902790679314770279031098318159\"\r\n        \"34611625736079804963132210640075447162592094208400778225784148066048873590175516339020228538451571779510840981\"\r\n        \"320420868670460264448\"},\r\n    {0x1.7fec216198ddcp+800, chars_format::general, 309,\r\n        \"10000000000000000509610295637002728139855252735311366616309601643306774209564163318419090863889067021760658106\"\r\n        \"68175627761417991132745220859118251438024192735763104388242814831443809480146578576180435256150611892274413946\"\r\n        \"7759619125060885807104\"},\r\n    {0x1.dfe729b9ff152p+803, chars_format::general, 309,\r\n        \"99999999999999993251329913304315801074917514058874200397058898538348724005950180959070725179594357268399970740\"\r\n        \"84040556111699826235996210230296860606122060838246831357112948115726717832433570223577053343062481208157500678\"\r\n        \"6082605199485453729792\"},\r\n    {0x1.dfe729b9ff153p+803, chars_format::general, 309,\r\n        \"10000000000000000509610295637002728139855252735311366616309601643306774209564163318419090863889067021760658106\"\r\n        \"68175627761417991132745220859118251438024192735763104388242814831443809480146578576180435256150611892274413946\"\r\n        \"77596191250608858071040\"},\r\n    {0x1.2bf07a143f6d3p+807, chars_format::general, 309,\r\n        \"99999999999999988513420696078031208945463508741178414090644051380461116770073600069022651795875832088717326610\"\r\n        \"44954267510707792199413810885942599096474114230493146346986868036242167044820684008286133655685026122322845162\"\r\n        \"94771707790360919932928\"},\r\n    {0x1.2bf07a143f6d4p+807, chars_format::general, 309,\r\n        \"10000000000000000746505756498316957746327953001196155931630344001201154571357992362921494533074993280744790313\"\r\n        \"20129942191467592834574340826335964513506590066150788638749118835418037019527222886944981240519484646566146722\"\r\n        \"558989084608335389392896\"},\r\n    {0x1.76ec98994f488p+810, chars_format::general, 309,\r\n        \"99999999999999992303748069859058882649026712995335043135775929106771202558774864781061110502850652232463441914\"\r\n        \"76223298391501419428679730361426008304192471516696094355087732099829807674910992980518869405586990190990569575\"\r\n        \"476151831539558138249216\"},\r\n    {0x1.76ec98994f489p+810, chars_format::general, 309,\r\n        \"10000000000000000746505756498316957746327953001196155931630344001201154571357992362921494533074993280744790313\"\r\n        \"20129942191467592834574340826335964513506590066150788638749118835418037019527222886944981240519484646566146722\"\r\n        \"5589890846083353893928960\"},\r\n    {0x1.d4a7bebfa31aap+813, chars_format::general, 309,\r\n        \"99999999999999992303748069859058882649026712995335043135775929106771202558774864781061110502850652232463441914\"\r\n        \"76223298391501419428679730361426008304192471516696094355087732099829807674910992980518869405586990190990569575\"\r\n        \"4761518315395581382492160\"},\r\n    {0x1.d4a7bebfa31abp+813, chars_format::general, 309,\r\n        \"10000000000000000443279566595834743850042896660863625608019793783096347708261891185958417836517007669245101088\"\r\n        \"85628419721004102656233067268297291776889121483254552798101049710331025769119998169166362380527327521072728769\"\r\n        \"55671430431745947427930112\"},\r\n    {0x1.24e8d737c5f0ap+817, chars_format::general, 309,\r\n        \"99999999999999987452129031419343460308465811550014557958007125617094292749237245949651883357922882448468414325\"\r\n        \"24198938864085576575219353432807244518312974190356320904718626098437627668395397496060967645712476183095882327\"\r\n        \"43975534688554349643169792\"},\r\n    {0x1.24e8d737c5f0bp+817, chars_format::general, 309,\r\n        \"10000000000000000685860518517820514967070941733129649866908233957580193198738772127528879193763396158444852468\"\r\n        \"33229637697374894798906086114728229966183096349571541470619505010400634769445777943389257468521053221467463131\"\r\n        \"958534128550160206370177024\"},\r\n    {0x1.6e230d05b76cdp+820, chars_format::general, 309,\r\n        \"99999999999999995214719492922888136053363253862527334242437211200577348444497436079906646789807314102860458468\"\r\n        \"47437914107950925140755956518597266575720169912499958425309195700665115678820350271193610461511698595727381924\"\r\n        \"297989722331966923339726848\"},\r\n    {0x1.6e230d05b76cep+820, chars_format::general, 309,\r\n        \"10000000000000001073990041592997748754315813848755288681129738236754345983501781634041617365357617741164454675\"\r\n        \"49391586459568162227182916269017731069053456135678723346649033490512009169967025582145889609311014342099038111\"\r\n        \"8014458473224813777155784704\"},\r\n    {0x1.c9abd04725480p+823, chars_format::general, 309,\r\n        \"99999999999999992109683308321470265755404276937522223728665176967184126166393360027804741417053541441103640811\"\r\n        \"18142324010404785714541315284281257752757291623642503417072967859774120474650369161140553335192009630674782085\"\r\n        \"5546959721533975525765152768\"},\r\n    {0x1.c9abd04725481p+823, chars_format::general, 309,\r\n        \"10000000000000000452982804672714174694724018463754266578375331390075701527880966423621236290806863208813091144\"\r\n        \"03532468440058934341939988022154529304460880477907232345001787922333810129133029360135278184047076549088518144\"\r\n        \"05278709728676750356293615616\"},\r\n    {0x1.1e0b622c774d0p+827, chars_format::general, 309,\r\n        \"99999999999999992109683308321470265755404276937522223728665176967184126166393360027804741417053541441103640811\"\r\n        \"18142324010404785714541315284281257752757291623642503417072967859774120474650369161140553335192009630674782085\"\r\n        \"55469597215339755257651527680\"},\r\n    {0x1.1e0b622c774d1p+827, chars_format::general, 309,\r\n        \"10000000000000001198191488977054463566234172925755493101680619606090074874625944676125693580267768647634727381\"\r\n        \"78563410063470007804231501918390371421971971267233021546978482604147648978133824826548011894363801900701142105\"\r\n        \"351177597329624152546106933248\"},\r\n    {0x1.658e3ab795204p+830, chars_format::general, 309,\r\n        \"99999999999999992109683308321470265755404276937522223728665176967184126166393360027804741417053541441103640811\"\r\n        \"18142324010404785714541315284281257752757291623642503417072967859774120474650369161140553335192009630674782085\"\r\n        \"554695972153397552576515276800\"},\r\n    {0x1.658e3ab795205p+830, chars_format::general, 309,\r\n        \"10000000000000000800746857348072976168095423879354838955917799224215742423028622941456649692555285746929854721\"\r\n        \"65213574530984101957676027840397922292632722846259267305924245440513601592000067244461220582194881713174409325\"\r\n        \"9920359973067672730884158521344\"},\r\n    {0x1.bef1c9657a685p+833, chars_format::general, 309,\r\n        \"99999999999999992109683308321470265755404276937522223728665176967184126166393360027804741417053541441103640811\"\r\n        \"18142324010404785714541315284281257752757291623642503417072967859774120474650369161140553335192009630674782085\"\r\n        \"5546959721533975525765152768000\"},\r\n    {0x1.bef1c9657a686p+833, chars_format::general, 309,\r\n        \"10000000000000000482791152044887786249584424642234315639307542918716276461750765553721414582385299426365956593\"\r\n        \"54533706104995377280431648578003962989161324109480263913080855709606363683093061178791787532459745563153023102\"\r\n        \"50472271728848176952226298724352\"},\r\n    {0x1.17571ddf6c813p+837, chars_format::general, 309,\r\n        \"99999999999999989566037665895988746407316283040558037195783126523188398476170500925922860535693650876592455786\"\r\n        \"32703376602494988296586281185129583324986101729410476274325850012516217203394320635785088937310920430503692297\"\r\n        \"65618973200711352404729235767296\"},\r\n    {0x1.17571ddf6c814p+837, chars_format::general, 309,\r\n        \"10000000000000000991520280529984090119202023421627152945883953007515421999795337374097790758657277539268193598\"\r\n        \"51621495586577336764022655397834297874715562088326669341630279279057944337344270883862880412035963403187241060\"\r\n        \"084423965317738575228107571068928\"},\r\n    {0x1.5d2ce55747a18p+840, chars_format::general, 309,\r\n        \"99999999999999993635870693776759177364257073275700735648394407233581562780527075488933869945869475779810351826\"\r\n        \"09405692455150664165314335743772262409420005560181719702721238568128862437403998276353831973920663150777435958\"\r\n        \"293799716241167969694049028276224\"},\r\n    {0x1.5d2ce55747a19p+840, chars_format::general, 309,\r\n        \"10000000000000000991520280529984090119202023421627152945883953007515421999795337374097790758657277539268193598\"\r\n        \"51621495586577336764022655397834297874715562088326669341630279279057944337344270883862880412035963403187241060\"\r\n        \"0844239653177385752281075710689280\"},\r\n    {0x1.b4781ead1989ep+843, chars_format::general, 309,\r\n        \"99999999999999993635870693776759177364257073275700735648394407233581562780527075488933869945869475779810351826\"\r\n        \"09405692455150664165314335743772262409420005560181719702721238568128862437403998276353831973920663150777435958\"\r\n        \"2937997162411679696940490282762240\"},\r\n    {0x1.b4781ead1989fp+843, chars_format::general, 309,\r\n        \"10000000000000000665933638299522455642646760202815737069675050550683968855446811409056910005843211547010761915\"\r\n        \"33485310318364882694524411033142883547960849781864969867358648194608932718623496672617380969107183985565341567\"\r\n        \"23341516657901421957636703742066688\"},\r\n    {0x1.10cb132c2ff63p+847, chars_format::general, 309,\r\n        \"99999999999999998845256969464145328989141284776683389667736846542884813090103490929587961990894531655929258756\"\r\n        \"99584656746549929277286245578834891637495402463568911291067335919313048336936385656281823060781133832727827843\"\r\n        \"90994049606075766012189756664840192\"},\r\n    {0x1.10cb132c2ff64p+847, chars_format::general, 309,\r\n        \"10000000000000001968280207221368993548867813078061400574510660378009781432840915269220433017099475516040488648\"\r\n        \"06030051391214698972517388491908540854979699007711767764445172532404979193506593517599378740822301656052939538\"\r\n        \"637450361533911642183329172013711360\"},\r\n    {0x1.54fdd7f73bf3bp+850, chars_format::general, 309,\r\n        \"99999999999999986342729907814418565089419177174325020021314992200557012347120093872018141082834397553243882122\"\r\n        \"83155142447191693008553661974684581490114449895439651479036702276471002178058655944454644452316004196046887318\"\r\n        \"431202624493742403095061074555174912\"},\r\n    {0x1.54fdd7f73bf3cp+850, chars_format::general, 309,\r\n        \"10000000000000000301276599001405425028904865397746951288321079799032741333776462328211123562691457635682438430\"\r\n        \"17172782817966934136686377344688499501995571998627866456174421380026039705656229556022421593026951037828814135\"\r\n        \"2402853119916429412464176397346144256\"},\r\n    {0x1.aa3d4df50af0ap+853, chars_format::general, 309,\r\n        \"99999999999999989676737124254345702129345072534953918593694153358511092545248999754036759991650433313959982558\"\r\n        \"60869679593687222680215684269124664196082703913607454095578204581228881153759383867608558747906705432495138125\"\r\n        \"2255327235782798049688841391133687808\"},\r\n    {0x1.aa3d4df50af0bp+853, chars_format::general, 309,\r\n        \"10000000000000000301276599001405425028904865397746951288321079799032741333776462328211123562691457635682438430\"\r\n        \"17172782817966934136686377344688499501995571998627866456174421380026039705656229556022421593026951037828814135\"\r\n        \"24028531199164294124641763973461442560\"},\r\n    {0x1.0a6650b926d66p+857, chars_format::general, 309,\r\n        \"99999999999999984342325577950462282865463639957947680877887495505784564228242750342806969737544776096814221861\"\r\n        \"36526420159294375205556448598020531866533497484538969909111800893616274792638219190562295874961583454177936834\"\r\n        \"35460456504301996197076723582025859072\"},\r\n    {0x1.0a6650b926d67p+857, chars_format::general, 309,\r\n        \"10000000000000000567997176316599595992098937026597263174111412691669067749626774798772613075396740496539726465\"\r\n        \"03389945789686576510419339128243706118473032320081290665497741564406670023712287789874734736674207136744674199\"\r\n        \"783831719918405933396323484899269935104\"},\r\n    {0x1.4cffe4e7708c0p+860, chars_format::general, 309,\r\n        \"99999999999999992877384052036675753687673932081157661223178148070147009535452749400774634144113827644247438976\"\r\n        \"95475635254322931165011225671787143593812227771048544607458046793796444970432082673836316471673778619485458899\"\r\n        \"748089618699435710767754281089234894848\"},\r\n    {0x1.4cffe4e7708c1p+860, chars_format::general, 309,\r\n        \"10000000000000000994750100020910269533209451632757762191375945319887190014987274751670996295725193073911387320\"\r\n        \"81337406544438004308392077981932036704836968834406769400415053859415678532601980964038435766509816895010050303\"\r\n        \"0535059726012267208361728371627187503104\"},\r\n    {0x1.a03fde214caf0p+863, chars_format::general, 309,\r\n        \"99999999999999992877384052036675753687673932081157661223178148070147009535452749400774634144113827644247438976\"\r\n        \"95475635254322931165011225671787143593812227771048544607458046793796444970432082673836316471673778619485458899\"\r\n        \"7480896186994357107677542810892348948480\"},\r\n    {0x1.a03fde214caf1p+863, chars_format::general, 309,\r\n        \"10000000000000000653347761057461730700321039947829362977564319217312692202698874789352289719462431012014058636\"\r\n        \"18979437940636862070013886898981372235745819622946386412481204023408471725490226424707474942641329088397749420\"\r\n        \"43776657045497009088429335535195969814528\"},\r\n    {0x1.0427ead4cfed6p+867, chars_format::general, 309,\r\n        \"99999999999999992877384052036675753687673932081157661223178148070147009535452749400774634144113827644247438976\"\r\n        \"95475635254322931165011225671787143593812227771048544607458046793796444970432082673836316471673778619485458899\"\r\n        \"74808961869943571076775428108923489484800\"},\r\n    {0x1.0427ead4cfed7p+867, chars_format::general, 309,\r\n        \"10000000000000001472713374569738223899253227991657521090712221863491486952191034698917185502493059960567647479\"\r\n        \"28638562589759603442121545498062966961564577730451305583522443629825768062558437319101780919925699824267271538\"\r\n        \"715541135605986002768804111697781423341568\"},\r\n    {0x1.4531e58a03e8bp+870, chars_format::general, 309,\r\n        \"99999999999999984137484174572393159565730592946990641349600519844239865540869710365415745791787118859675824650\"\r\n        \"59111638997013689862529533948250133185078807957662740116351490992011950708371166466963719380640490770210556304\"\r\n        \"785160923755265983999639546733803159420928\"},\r\n    {0x1.4531e58a03e8cp+870, chars_format::general, 309,\r\n        \"10000000000000000161728392950095834780961727121532468109675577629605415353003578843613352249644053642881905330\"\r\n        \"33183963151163217246749291739532415400254564758443434909856460259558093923249299888070891356270706646876036149\"\r\n        \"4711018313643605437535869015444666630275072\"},\r\n    {0x1.967e5eec84e2ep+873, chars_format::general, 309,\r\n        \"99999999999999987633444125558106197214507928600657449299031571134602723138702925979559301132717802373504470381\"\r\n        \"13657237499937386383522210637664937348572175883017061912794113312725748413195532949712758217053805909920517342\"\r\n        \"7703324017329338747068854404759758535917568\"},\r\n    {0x1.967e5eec84e2fp+873, chars_format::general, 309,\r\n        \"10000000000000000161728392950095834780961727121532468109675577629605415353003578843613352249644053642881905330\"\r\n        \"33183963151163217246749291739532415400254564758443434909856460259558093923249299888070891356270706646876036149\"\r\n        \"47110183136436054375358690154446666302750720\"},\r\n    {0x1.fc1df6a7a61bap+876, chars_format::general, 309,\r\n        \"99999999999999993226980047135247057452551665646524342018121253199183295295236070962188989678206895995630303550\"\r\n        \"00930195104615300817110493340728624010161564563583976787102309025867824740914519322111220355315110133456455003\"\r\n        \"54660676649720249983847887046345216426508288\"},\r\n    {0x1.fc1df6a7a61bbp+876, chars_format::general, 309,\r\n        \"10000000000000000441405189028952877792863913973825812745630061732834443960830236092744836676918508323988196988\"\r\n        \"77547611031397112968428705874685599733334034192471780653571870045215197739635249206690814463183771858052833032\"\r\n        \"509915549602573975010166573043840478561173504\"},\r\n    {0x1.3d92ba28c7d14p+880, chars_format::general, 309,\r\n        \"99999999999999988752151309873534369262116676009830827842849507547518837570009554976085238841815621097929637014\"\r\n        \"91111829020872969270239867178277674680890053619130444887655752455354163678739330224192450644706066754627704874\"\r\n        \"925587274685787599733204126473471115726422016\"},\r\n    {0x1.3d92ba28c7d15p+880, chars_format::general, 309,\r\n        \"10000000000000000665146625892038512202385663455660488454393649015417666847091561892050024218738072068873230315\"\r\n        \"53038529335584229545772237182808147199797609739694457248544197873740880792744008661586752948714224026994270538\"\r\n        \"9409665241931447200154303102433395309881065472\"},\r\n    {0x1.8cf768b2f9c59p+883, chars_format::general, 309,\r\n        \"99999999999999988752151309873534369262116676009830827842849507547518837570009554976085238841815621097929637014\"\r\n        \"91111829020872969270239867178277674680890053619130444887655752455354163678739330224192450644706066754627704874\"\r\n        \"9255872746857875997332041264734711157264220160\"},\r\n    {0x1.8cf768b2f9c5ap+883, chars_format::general, 309,\r\n        \"10000000000000000307160326911101497147150864284725007320371909363284510229073440613161724151826770077057176992\"\r\n        \"72253060048884843022022587089812071253455888864138174696588473348099787907769993533753251371865500556687970528\"\r\n        \"65128496484823152800700833072414104710501367808\"},\r\n    {0x1.f03542dfb8370p+886, chars_format::general, 309,\r\n        \"99999999999999997343822485416022730587751856112282375059371259198714596402444465669404440447686868901514916762\"\r\n        \"29963091901658245840231469410183497393091354632481226134593141070740392918115693292196488489075430041978905121\"\r\n        \"87794469896370420793533163493423472892065087488\"},\r\n    {0x1.f03542dfb8371p+886, chars_format::general, 309,\r\n        \"10000000000000000879938405280600721235526542958221777134806692806697560817902434659383004258884853263962862309\"\r\n        \"21509810907603861460022027238605792767602642265028226779717632589125536523728417738286853894823458109178050545\"\r\n        \"114775459800092635220483497954858621317962268672\"},\r\n    {0x1.362149cbd3226p+890, chars_format::general, 309,\r\n        \"99999999999999997343822485416022730587751856112282375059371259198714596402444465669404440447686868901514916762\"\r\n        \"29963091901658245840231469410183497393091354632481226134593141070740392918115693292196488489075430041978905121\"\r\n        \"877944698963704207935331634934234728920650874880\"},\r\n    {0x1.362149cbd3227p+890, chars_format::general, 309,\r\n        \"10000000000000001567272099323999790141577357366417900912128432938793221524497227514848540387354553088249684689\"\r\n        \"00617911938066683585621355417158258584578746346096289279472623678356434862878526783727176922373007172166146564\"\r\n        \"8709640537423259638766536986317197103735005773824\"},\r\n    {0x1.83a99c3ec7eafp+893, chars_format::general, 309,\r\n        \"99999999999999990012263082286432662256543169091523721434606031123027548865433341877772055077343404109122144711\"\r\n        \"19476680910054809833838635505623862012012911101088559470539902785610810633847863474166376195213573370105880911\"\r\n        \"1452663635798820356028494943810497789949089153024\"},\r\n    {0x1.83a99c3ec7eb0p+893, chars_format::general, 309,\r\n        \"10000000000000000467538188854561279891896054313304102868413648727440164393945558946103682581803033369390768881\"\r\n        \"34044950289326168184662430331474313277416979816387389279864637935586997520238352311022660078293728671385192933\"\r\n        \"26106230343475263802678137754874196788463928344576\"},\r\n    {0x1.e494034e79e5bp+896, chars_format::general, 309,\r\n        \"99999999999999992944886843538268689589026643899827182884512122353302367880237791394425009225480790026079253531\"\r\n        \"63671245306696184236395769067447716164444288513645626136161198099662643547554995401378421112758316038855090595\"\r\n        \"43833769773341090453584235060232375896520569913344\"},\r\n    {0x1.e494034e79e5cp+896, chars_format::general, 309,\r\n        \"10000000000000000467538188854561279891896054313304102868413648727440164393945558946103682581803033369390768881\"\r\n        \"34044950289326168184662430331474313277416979816387389279864637935586997520238352311022660078293728671385192933\"\r\n        \"261062303434752638026781377548741967884639283445760\"},\r\n    {0x1.2edc82110c2f9p+900, chars_format::general, 309,\r\n        \"99999999999999995290985852539737511455013423746469952044436995337522223092081351007747372543990698759644940587\"\r\n        \"99026896824009283758441475916906799486389390443691279468658234350904109878520700943148057046794110173854458342\"\r\n        \"872794765056233999682236635579342942941443126198272\"},\r\n    {0x1.2edc82110c2fap+900, chars_format::general, 309,\r\n        \"10000000000000001405977792455148808638290766251961210532383597921128106478682982791432627909206996862817043703\"\r\n        \"88187210896251407993480713071257946606195020588405650612863452436083584052624634527730514451908046325384940032\"\r\n        \"2348451303638818760853390915395496414751342542716928\"},\r\n    {0x1.7a93a2954f3b7p+903, chars_format::general, 309,\r\n        \"99999999999999991537227438137387396469434575991841521388557198562770454753131655626431591234374844785939841297\"\r\n        \"82457854396308324523168344957772266171277227355618234136662976348917763748975572076316639552336839557855469946\"\r\n        \"9776634573397170474480057796161122485794632428945408\"},\r\n    {0x1.7a93a2954f3b8p+903, chars_format::general, 309,\r\n        \"10000000000000000655226109574678785641174996701035524401207638566177752810893043715169471647283826068076023845\"\r\n        \"84873402410711216146426086879431039943172587970791041546464400835686314826715608754364230953016592202185142353\"\r\n        \"05581886882057848563849292034690350260273827761094656\"},\r\n    {0x1.d9388b3aa30a5p+906, chars_format::general, 309,\r\n        \"99999999999999994540234169659267488457897654195544265913261035982571869424291411931484216282067527964903920729\"\r\n        \"95713088338469091911386849725079892823366957826076670402259182750506840652611675169781773547902656050654660663\"\r\n        \"69376850351293060923539046438669680406904714953752576\"},\r\n    {0x1.d9388b3aa30a6p+906, chars_format::general, 309,\r\n        \"10000000000000000655226109574678785641174996701035524401207638566177752810893043715169471647283826068076023845\"\r\n        \"84873402410711216146426086879431039943172587970791041546464400835686314826715608754364230953016592202185142353\"\r\n        \"055818868820578485638492920346903502602738277610946560\"},\r\n    {0x1.27c35704a5e67p+910, chars_format::general, 309,\r\n        \"99999999999999992137828784441763414867127191632582070293497966046730737687363606887442116243913381421732657184\"\r\n        \"25108901184740478000812045911233791501695173449709921389782217629235579129702792695009666351450002856415308090\"\r\n        \"320884466574359759805482716570229159677380024223137792\"},\r\n    {0x1.27c35704a5e68p+910, chars_format::general, 309,\r\n        \"10000000000000001135707186618179600359329089213627963525160252553345979158278604723977891654914655376710276554\"\r\n        \"98994239841456938928541047642200260207506944846064391348959793859940567131297385249318652392307122841033012867\"\r\n        \"7303956762082926555244744699101970314810717026738241536\"},\r\n    {0x1.71b42cc5cf601p+913, chars_format::general, 309,\r\n        \"99999999999999995981677400789769932612359931733321583285118877944076548466448094957909476304960015890806678857\"\r\n        \"38075600630706260257731732013387553616370028451896719809745361823269597566357004654645037865774247967198272207\"\r\n        \"7174989256760731188933351130765773907040474247261585408\"},\r\n    {0x1.71b42cc5cf602p+913, chars_format::general, 309,\r\n        \"10000000000000001135707186618179600359329089213627963525160252553345979158278604723977891654914655376710276554\"\r\n        \"98994239841456938928541047642200260207506944846064391348959793859940567131297385249318652392307122841033012867\"\r\n        \"73039567620829265552447446991019703148107170267382415360\"},\r\n    {0x1.ce2137f743381p+916, chars_format::general, 309,\r\n        \"99999999999999992906598507711364718416173739652729972891822148426199899843180504501535588256122708315547461518\"\r\n        \"87702241073933634452195983131664543924630144450147281073774846468042382817033635086936740654314851878571900913\"\r\n        \"80020735839470243162305319587149880588271350432374194176\"},\r\n    {0x1.ce2137f743382p+916, chars_format::general, 309,\r\n        \"10000000000000000520691408002498557520091850797509641446500906649770649433625086632703114045147193861658433087\"\r\n        \"28919567930102413767433897865855658269158968045714503601765690788895124181432711335776992950015243623307738608\"\r\n        \"946937362752018518070418086469181314516804918593340833792\"},\r\n    {0x1.20d4c2fa8a030p+920, chars_format::general, 309,\r\n        \"99999999999999980606282935397743861631428971330363531318635230354693305350110142676040036060773478014510592164\"\r\n        \"86208802846843131230052987604772505157670608443149526129892785047133523819740156816103551808477267524066415738\"\r\n        \"131041089269219682541925527051184466597377822714075545600\"},\r\n    {0x1.20d4c2fa8a031p+920, chars_format::general, 309,\r\n        \"10000000000000000028678785109953723248702060064614983783573429926910385653902272159683291957333224649616958313\"\r\n        \"12859830401018793638548178044779976718480586605434593404010408332058769821540972204943665396181740249127519201\"\r\n        \"9201707119869992081071729797163687409453914913289541779456\"},\r\n    {0x1.6909f3b92c83dp+923, chars_format::general, 309,\r\n        \"99999999999999996350686867959178558315902274782992576532314485486221746301240205812674342870820492799837784938\"\r\n        \"00120403777518975354396021879194314779378814532106652458061823665896863336275809002770033531149375497833436762\"\r\n        \"9875739137498376013657689431411868208826074951744485326848\"},\r\n    {0x1.6909f3b92c83ep+923, chars_format::general, 309,\r\n        \"10000000000000001209509080052061325500037557823562162174599374061775018725237026894930864968086750758516497771\"\r\n        \"11403200470819481947873905615361612440108702062106377878623086228466020285281146118943651525382148347160045778\"\r\n        \"78441067382304555201896123592311891751678371676348215197696\"},\r\n    {0x1.c34c70a777a4cp+926, chars_format::general, 309,\r\n        \"99999999999999993201806081446891618979007614092466767489578634459916058111014193185347481508811089842772346383\"\r\n        \"37338083591383806529527415024309952855037173314315227192428015942144195432968678565436737186614953903080032558\"\r\n        \"01626734885371401760100025992318635002556156068237393526784\"},\r\n    {0x1.c34c70a777a4dp+926, chars_format::general, 309,\r\n        \"10000000000000000579732922749603937632658625685457000366052203856513881087191824369465492695684870167103410060\"\r\n        \"18846736433592448182900184244384740055240373818548092825496324683715486704619720031476992256475264028209364937\"\r\n        \"790149360843820835266007499279518823345374529865067232493568\"},\r\n    {0x1.1a0fc668aac6fp+930, chars_format::general, 309,\r\n        \"99999999999999983125387564607573413100944699882784178552823911175737855902290952777901525150381000380162943008\"\r\n        \"56434658995751266289947873088679994697143921417382666342399831226135658142385861165970188884104804799869139102\"\r\n        \"108086341186118549553740473625584843283014570307735223533568\"},\r\n    {0x1.1a0fc668aac70p+930, chars_format::general, 309,\r\n        \"10000000000000000327822459828620982485707052830214935642633335774409426031973743359279343786724117930538174975\"\r\n        \"81824150818701634676910695695993991101293042521124778804245620065815273272355149596490328548912510300629092601\"\r\n        \"3924448356521309485648260046220787856768108551057012647002112\"},\r\n    {0x1.6093b802d578bp+933, chars_format::general, 309,\r\n        \"99999999999999987155954971343300695452169865566657214127525800489409136785780248940879907693753036165206704358\"\r\n        \"48796028834004282385779689862931977960301222176155690682411105112539073058618988125756808205108864441153496484\"\r\n        \"4713587442531567367726443881446254459800333664575907082272768\"},\r\n    {0x1.6093b802d578cp+933, chars_format::general, 309,\r\n        \"10000000000000000327822459828620982485707052830214935642633335774409426031973743359279343786724117930538174975\"\r\n        \"81824150818701634676910695695993991101293042521124778804245620065815273272355149596490328548912510300629092601\"\r\n        \"39244483565213094856482600462207878567681085510570126470021120\"},\r\n    {0x1.b8b8a6038ad6ep+936, chars_format::general, 309,\r\n        \"99999999999999990380408896731882521333149998113755642587287311940346161492571685871262613728450664793241713438\"\r\n        \"42685124704606695262445143282333564570827062783174110154420124221661804991605489693586103661912112154180982390\"\r\n        \"36197666670678728654776751975985792813764840337747509598224384\"},\r\n    {0x1.b8b8a6038ad6fp+936, chars_format::general, 309,\r\n        \"10000000000000000327822459828620982485707052830214935642633335774409426031973743359279343786724117930538174975\"\r\n        \"81824150818701634676910695695993991101293042521124778804245620065815273272355149596490328548912510300629092601\"\r\n        \"392444835652130948564826004622078785676810855105701264700211200\"},\r\n    {0x1.137367c236c65p+940, chars_format::general, 309,\r\n        \"99999999999999995539535177353613442742718210189113128122905730261845401023437984959874943383966870598097727966\"\r\n        \"32907678097570555865109868753376103147668407754403581309634554796258176084383892202112976392797308495024959839\"\r\n        \"786965342632596166187964530344229899589832462449290116390191104\"},\r\n    {0x1.137367c236c66p+940, chars_format::general, 309,\r\n        \"10000000000000001617604029984053712838099105849054307026537940354784235914690318131432426200603169381752178607\"\r\n        \"79379789166942599827576877063754625745503378763932146593049227709464366045549750223622046731633809385840086963\"\r\n        \"7486920046335831684748752572681717785398568698736550198021980160\"},\r\n    {0x1.585041b2c477ep+943, chars_format::general, 309,\r\n        \"99999999999999991412234152856228705615063640528827139694410995604646009398744945688985079659553905954212916344\"\r\n        \"00729635383199467382978088376542072286195331777420004385463010336581079210161170195291478208089151422349777880\"\r\n        \"2469744018919490624758069218767323224280852151918381000638332928\"},\r\n    {0x1.585041b2c477fp+943, chars_format::general, 309,\r\n        \"10000000000000000792143825084576765412568191916997109340838993423344357589751710277254453455720576452975216283\"\r\n        \"32944180624068382131150520988387819573208763568535431208214918817528946670705205822257747094692177971305050571\"\r\n        \"84069381648545374773244373557467226310750742042216461653692645376\"},\r\n    {0x1.ae64521f7595ep+946, chars_format::general, 309,\r\n        \"99999999999999998015915792052044285019310951985284721180002571056165035998253808522408861618614649384428614939\"\r\n        \"72214503726193208954388936979476521664552253340593727464137481472064434208917525406205875303622202738630069015\"\r\n        \"51095990707698442841525909542472844588688081080376132618600579072\"},\r\n    {0x1.ae64521f7595fp+946, chars_format::general, 309,\r\n        \"10000000000000001122327907044367544382780557489819988415118572195920308919727153418925642553673613624486001213\"\r\n        \"11518424041218069209721063418534542042126609646694117362148642374303114420643023582803466949468830537119065128\"\r\n        \"603893091744705516029416344252072069280447200202760777843035078656\"},\r\n    {0x1.0cfeb353a97dap+950, chars_format::general, 309,\r\n        \"99999999999999982167079857982086894449117404489786525614582789972519372159432537722191784916868865151910938310\"\r\n        \"00650819703008229183002900332433843156495641588976792075318750746904382211902272900011322274342879579557370290\"\r\n        \"877394694632899550160573878909537749585771381335145583492791795712\"},\r\n    {0x1.0cfeb353a97dbp+950, chars_format::general, 309,\r\n        \"10000000000000000329886110340869674854270880115045078636847583141738025727786089878914788718586324412860117381\"\r\n        \"62940239840058820221151761586182408116723779059113270592707705838045111820792260957493739298004864379165430192\"\r\n        \"3722148311225012721166820834263125344653917287293299907083743789056\"},\r\n    {0x1.503e602893dd1p+953, chars_format::general, 309,\r\n        \"99999999999999990619792356152730836086553963154052229916140006550463726206803882148974225824466616742587032512\"\r\n        \"52151451182040218394408786544189938360792501189839157616022073800323076610310407569981750556625185264396142944\"\r\n        \"0152961412697448185630726610509727876130297437184073129291725930496\"},\r\n    {0x1.503e602893dd2p+953, chars_format::general, 309,\r\n        \"10000000000000000752521735249401871936142708048258363851925443970635243430154657100253910763966211992393922091\"\r\n        \"75515271414010419681722055896770212876938622039156388869742871990716046540712667690992260712118979663407368825\"\r\n        \"02910990345434353553680702253338428636675464684849307718019341877248\"},\r\n    {0x1.a44df832b8d45p+956, chars_format::general, 309,\r\n        \"99999999999999987238707356884473259431579339688345948195517119919285984587855344378261249461427516106316594831\"\r\n        \"51551198590427422709846432059487500279073757349494211399740744578955598850947153701993579243712262990460633882\"\r\n        \"76013556261500671120207314819439877240212639876510262115462027411456\"},\r\n    {0x1.a44df832b8d46p+956, chars_format::general, 309,\r\n        \"10000000000000000076304735395750356605147783355117107507800866644399695106364949546111315491358391865139834555\"\r\n        \"55395220895687860544809584999829725260594873271087399626486606146442550988840016917394626449536395208620267012\"\r\n        \"778077787723395914064607119962069483324573977857832138825282954985472\"},\r\n    {0x1.06b0bb1fb384bp+960, chars_format::general, 309,\r\n        \"99999999999999984533839357469867198107599640915780922819018810614343791292696514161690868370996235597300244686\"\r\n        \"71070996517137186162196548471725549813698762277218254426715681201861616643456550607603042193381925171312226633\"\r\n        \"756007099691216225313273537909139560233403722802458867734978418966528\"},\r\n    {0x1.06b0bb1fb384cp+960, chars_format::general, 309,\r\n        \"10000000000000000617278335278671568869943723109630112583100528505388133765396715589425391709444647966943104584\"\r\n        \"51491261310345907854339561717382115353669872285542591021091618821861347430338137536272733859602462772449948462\"\r\n        \"5789034803081540112423670420191213257583185130503608895092113260150784\"},\r\n    {0x1.485ce9e7a065ep+963, chars_format::general, 309,\r\n        \"99999999999999988861628156533236896225967158951884963421416105502251300564950642508203478115686284411726404918\"\r\n        \"39839319834401564638436362212144670558298754392859785583555782605211988175441515558627901473910465681949678232\"\r\n        \"1626126403692810027353529143655542997033600043426888732064053872033792\"},\r\n    {0x1.485ce9e7a065fp+963, chars_format::general, 309,\r\n        \"10000000000000000617278335278671568869943723109630112583100528505388133765396715589425391709444647966943104584\"\r\n        \"51491261310345907854339561717382115353669872285542591021091618821861347430338137536272733859602462772449948462\"\r\n        \"57890348030815401124236704201912132575831851305036088950921132601507840\"},\r\n    {0x1.9a742461887f6p+966, chars_format::general, 309,\r\n        \"99999999999999995786090235034628413215355187809651428385251777322903315400557247862623653707190362514808261289\"\r\n        \"09868637142024570200420064196815263749658741777886235434499944850572582626617459480267676322756130498969600789\"\r\n        \"61318150545418464661067991669581788285529005480705688196068853638234112\"},\r\n    {0x1.9a742461887f7p+966, chars_format::general, 309,\r\n        \"10000000000000000963501439203741144719413124552518435831292312096420734507177045857146400489019851872097197403\"\r\n        \"04992727175727058132438746816615645013237871654793913513638826934129377152896934732354722602044746013300944590\"\r\n        \"451431923562399193436133392135634504915915015573579289946925483474026496\"},\r\n    {0x1.008896bcf54f9p+970, chars_format::general, 309,\r\n        \"99999999999999979167381246631288772440823918551011912472046164953338479795101395012015232287580575067411805999\"\r\n        \"41798275603729356851659179433605840090394772053822755792233955461707155943795194068332216685526534938121786651\"\r\n        \"731816229250415901309895111103185283290657933692573660950408978352832512\"},\r\n    {0x1.008896bcf54fap+970, chars_format::general, 309,\r\n        \"10000000000000000132565989783574162680686561089586460035632031477942492726904253214615979418039362499727374638\"\r\n        \"56589209098812297465000702578455173830274673168590739531525527464686105818755821461757949620183266235258553883\"\r\n        \"5573636597522107561710941518560028749376834095178551288964115055725510656\"},\r\n    {0x1.40aabc6c32a38p+973, chars_format::general, 309,\r\n        \"99999999999999992462348437353960485060448933957923525202610654848990348279466077292501969423268405025328970231\"\r\n        \"16254564834365527530667887244173379017805947833073539506046746972799497290053006397880584395310211386800037962\"\r\n        \"0369084502134308975505229555772913629423636305841602377586326247764393984\"},\r\n    {0x1.40aabc6c32a39p+973, chars_format::general, 309,\r\n        \"10000000000000001018897135831752276855328228783380567551002997470985950625861898699981761893751884496921852254\"\r\n        \"01552961714188042176934616432493009758768751553874125112446380232092261908506342283727840800835511331837103970\"\r\n        \"91103647448307842258713600815427661358113045597729423401695974866745819136\"},\r\n    {0x1.90d56b873f4c6p+976, chars_format::general, 309,\r\n        \"99999999999999992462348437353960485060448933957923525202610654848990348279466077292501969423268405025328970231\"\r\n        \"16254564834365527530667887244173379017805947833073539506046746972799497290053006397880584395310211386800037962\"\r\n        \"03690845021343089755052295557729136294236363058416023775863262477643939840\"},\r\n    {0x1.90d56b873f4c7p+976, chars_format::general, 309,\r\n        \"10000000000000000664364677412481031185471561705862924544854611073768567466278840505835448903466875698044061207\"\r\n        \"83567460668037744292161050890877875387371120199760770880078039125129799472606133954939884328574613293205683935\"\r\n        \"969567348590731356020719265634967118123751637393518591968740451429495341056\"},\r\n    {0x1.f50ac6690f1f8p+979, chars_format::general, 309,\r\n        \"99999999999999998134867772062300415778155607198205813300984837204468478832795008398842977267828545807373626970\"\r\n        \"04022581572770293687044935910015528960168049498887207223940204684198896264456339658487887951484580004902758521\"\r\n        \"100414464490983962613190835886243290260424727924570510530141380583845003264\"},\r\n    {0x1.f50ac6690f1f9p+979, chars_format::general, 309,\r\n        \"10000000000000000947990644147898027721356895367877038949773320191542473993945287061152499295694882737146294044\"\r\n        \"77955861504957982599979903324169982884489225283051454265972712010699769421326300617970249506383331724110819963\"\r\n        \"9227426493046090092738526596504147144896546922605391056073158892198656212992\"},\r\n    {0x1.3926bc01a973bp+983, chars_format::general, 309,\r\n        \"99999999999999998134867772062300415778155607198205813300984837204468478832795008398842977267828545807373626970\"\r\n        \"04022581572770293687044935910015528960168049498887207223940204684198896264456339658487887951484580004902758521\"\r\n        \"1004144644909839626131908358862432902604247279245705105301413805838450032640\"},\r\n    {0x1.3926bc01a973cp+983, chars_format::general, 309,\r\n        \"10000000000000001628692964312898819407481696156710913521578222074199849660344758793913420237042099630991652853\"\r\n        \"44488023513566554538745149164071040877572677482949094392119926936067697298254700609243125933124255958283146431\"\r\n        \"01036337101791537708137280528748894576782202394138833833989693991675429388288\"},\r\n    {0x1.87706b0213d09p+986, chars_format::general, 309,\r\n        \"99999999999999987243630649422287748800158794576863820152106407081950468170403460674668242206273075505847886031\"\r\n        \"39507989435033142666801002471598601070832814300524965205584765878312050233601939798121865123629792258145535047\"\r\n        \"69848291707808207769286850569305558980974742103098278680884456943362624192512\"},\r\n    {0x1.87706b0213d0ap+986, chars_format::general, 309,\r\n        \"10000000000000000176528014627563797143748787807198647768394431391197448238692552430690122228834703590788220728\"\r\n        \"29219411228534934402712624705615450492327979456500795456339201761949451160807447294527656222743617592048849967\"\r\n        \"890105831362861792425329827928397252374398383022243308510390698430058459037696\"},\r\n    {0x1.e94c85c298c4cp+989, chars_format::general, 309,\r\n        \"99999999999999995956620347534297882382556244673937414671209151179964876700316698854008030255517451747068478782\"\r\n        \"31119663145222863482996149222332143382301002459214758820269116923021527058285459686414683385913622455551313826\"\r\n        \"420028155008403585629126369847605750170289266545852965785882018353801250996224\"},\r\n    {0x1.e94c85c298c4dp+989, chars_format::general, 309,\r\n        \"10000000000000000757393994501697806049241951147003554069667947664398408807353434975979441432117662006869593578\"\r\n        \"35326856142547582457125634488997686646425858667080115030651491831596749615786348620413844106895872938542568553\"\r\n        \"1382088472248832262877470188720339297317678393899013204421931950247367929757696\"},\r\n    {0x1.31cfd3999f7afp+993, chars_format::general, 309,\r\n        \"99999999999999986662764669548153739894665631237058913850832890808749507601742578129378923002990117089766513181\"\r\n        \"33400544521020494612387992688216364916734935089945645631272475808664751778623038472235677239477536911651816462\"\r\n        \"4503799012160606438304513147494189124523779646633247748770420728389479079870464\"},\r\n    {0x1.31cfd3999f7b0p+993, chars_format::general, 309,\r\n        \"10000000000000000525047602552044202487044685811081591549158541155118024579889081957863713750804478640437044438\"\r\n        \"32883878176942523235360430575644792184786706982848387200926575803737830233794788090059368953234970799945081119\"\r\n        \"03896764088007465274278014249457925878882005684283811566947219638686545940054016\"},\r\n    {0x1.7e43c8800759bp+996, chars_format::general, 309,\r\n        \"99999999999999990380306940742611396889821876611810314178983394957235655241172226419230565904001050952687299421\"\r\n        \"72488191970701442160631255301862676302961362037653290906871132254407461890488006957907279698051971129211615408\"\r\n        \"03823920273299782054992133678869364753954248541633605124057805104488924519071744\"},\r\n    {0x1.7e43c8800759cp+996, chars_format::general, 309,\r\n        \"10000000000000000525047602552044202487044685811081591549158541155118024579889081957863713750804478640437044438\"\r\n        \"32883878176942523235360430575644792184786706982848387200926575803737830233794788090059368953234970799945081119\"\r\n        \"038967640880074652742780142494579258788820056842838115669472196386865459400540160\"},\r\n    {0x1.ddd4baa009302p+999, chars_format::general, 309,\r\n        \"99999999999999993354340757698177522485946872911611434441503798276024573352715945051111880224809798043023928414\"\r\n        \"03758309930446200199225865392779725411942503595819407127350057411001629979979981746444561664911518503259454564\"\r\n        \"508526643946547561925497354420113435609274102018745072331406833609642314953654272\"},\r\n    {0x1.ddd4baa009303p+999, chars_format::general, 309,\r\n        \"10000000000000000525047602552044202487044685811081591549158541155118024579889081957863713750804478640437044438\"\r\n        \"32883878176942523235360430575644792184786706982848387200926575803737830233794788090059368953234970799945081119\"\r\n        \"0389676408800746527427801424945792587888200568428381156694721963868654594005401600\"},\r\n    {0x1.2aa4f4a405be1p+1003, chars_format::general, 309,\r\n        \"99999999999999988595886650569271721532146878831929642021471152965962304374245995240101777311515802698485322026\"\r\n        \"33726121194854587337474489247312446837572677102753621174583777160450961036792822084784910517936242704782911914\"\r\n        \"1560667380048679757245757262098417746977035154548906385860807815060374033329553408\"},\r\n    {0x1.2aa4f4a405be2p+1003, chars_format::general, 309,\r\n        \"10000000000000000762970307908489492534734685515065681170160173420621138028812579448414218896469178407663974757\"\r\n        \"71385487613722103878447999382918156113505198307501676498564889816265363680954146073142351510583734589868908251\"\r\n        \"55659063617715863205282622390509284183439858617103083735673849899204570498157510656\"},\r\n    {0x1.754e31cd072d9p+1006, chars_format::general, 309,\r\n        \"99999999999999984789123364866147080769106883568184208085445036717912489191470035391293694980880606422854436916\"\r\n        \"17700370206381297048073388330938623978076815908300992412370752960010425882243094355457189600356022066001677793\"\r\n        \"87409881325152430676383842364162444596844704620380709158981993982315347403639619584\"},\r\n    {0x1.754e31cd072dap+1006, chars_format::general, 309,\r\n        \"10000000000000000001617650767864564382126686462316594382954950171011174992257387478652602430342139152537797735\"\r\n        \"68180337416027445820567779199643391541606026068611150746122284976177256650044200527276807327067690462112661427\"\r\n        \"500197051226489898260678763391449376088547292320814127957486330655468919122263277568\"},\r\n    {0x1.d2a1be4048f90p+1009, chars_format::general, 309,\r\n        \"99999999999999993925355250553646218600402872201173249531907715713232045630132339028433092574405077484368561180\"\r\n        \"56162172578717193742636030530235798840866882774987301441682011041067710253162440905843719802548551599076639682\"\r\n        \"550821832659549112269607949805346034918662572406407604380845959862074904348138143744\"},\r\n    {0x1.d2a1be4048f91p+1009, chars_format::general, 309,\r\n        \"10000000000000000610699776480364506904213085704515863812719128770699145421501541054461895603243770556638739353\"\r\n        \"30744457574183172266871955346263203199125363859723571348076368848247742274772156963969242673880525764317658886\"\r\n        \"7453119191870248852943967318023641486852283274009874954768880653247303478097127407616\"},\r\n    {0x1.23a516e82d9bap+1013, chars_format::general, 309,\r\n        \"99999999999999993925355250553646218600402872201173249531907715713232045630132339028433092574405077484368561180\"\r\n        \"56162172578717193742636030530235798840866882774987301441682011041067710253162440905843719802548551599076639682\"\r\n        \"5508218326595491122696079498053460349186625724064076043808459598620749043481381437440\"},\r\n    {0x1.23a516e82d9bbp+1013, chars_format::general, 309,\r\n        \"10000000000000001341598327335364437930716764795154987128436143090324709936594525345433047410725728241559869294\"\r\n        \"45821401763970044002436966722206977188148569209058476070421269494732325024445704688000165090055928126963655837\"\r\n        \"83944976073966686973485829389546187580124556949719553650017014692784406223465209659392\"},\r\n    {0x1.6c8e5ca239028p+1016, chars_format::general, 309,\r\n        \"99999999999999986129104041433646954317696961901022600830926229637226024135807173258074139961264195511876508474\"\r\n        \"95341434554323895229942575853502209624619359048748317736669737478565494256644598516180547363344259730852672204\"\r\n        \"21335152276470127823801795414563694568114532338018850013250375609552861714878501486592\"},\r\n    {0x1.6c8e5ca239029p+1016, chars_format::general, 309,\r\n        \"10000000000000000172160645967364548288310878250132389823288920178923806712445750479879204518754595945686061388\"\r\n        \"61698291060311049225532948520696938805711440650122628514669428460356992624968028329550689224175284346730060716\"\r\n        \"088829214255439694630119794546505512415617982143262670862918816362862119154749127262208\"},\r\n    {0x1.c7b1f3cac7433p+1019, chars_format::general, 309,\r\n        \"99999999999999998603105976025645777170026418381263638752496607358835658526727438490648464142289606667863792803\"\r\n        \"92654615393353172850252103336275952370615397010730691664689375178569039851073146339641623266071126720011020169\"\r\n        \"553304018596457812688561947201171488461172921822139066929851282122002676667750021070848\"},\r\n    {0x1.c7b1f3cac7434p+1019, chars_format::general, 309,\r\n        \"10000000000000001107710791061764460002235587486150467667406698508044529291764770372322278832331501782385107713\"\r\n        \"28996779623238245047056163081904969511661143497271306559270901287857258544550169416310269916879799370916936813\"\r\n        \"4893256514428214347139105940256706031241200520264089633727198808148476736186715027275776\"},\r\n    {0x1.1ccf385ebc89fp+1023, chars_format::general, 309,\r\n        \"99999999999999981139503267596847425176765179308926185662298078548582170379439067165044410288854031049481594743\"\r\n        \"36416162218712184181818764860392712526220943863955368165461882398564076018873179386796117002253512935189333018\"\r\n        \"0773705244319986644578003569234231285691342840034082734135647456849389933411990123839488\"},\r\n    {0x1.1ccf385ebc8a0p+1023, chars_format::general, 309,\r\n        \"10000000000000000109790636294404554174049230967731184633681068290315758540491149153716332897849468889906124966\"\r\n        \"97211725156115902837431400883283070091981460460312716645029330271856974896995885590433383844661650011784268976\"\r\n        \"26212945177628091195786707458122783970171784415105291802893207873272974885715430223118336\"},\r\n    {0x1.fffffffffffffp+1023, chars_format::general, 309,\r\n        \"17976931348623157081452742373170435679807056752584499659891747680315726078002853876058955863276687817154045895\"\r\n        \"35143824642343213268894641827684675467035375169860499105765512820762454900903893289440758685084551339423045832\"\r\n        \"36903222948165808559332123348274797826204144723168738177180919299881250404026184124858368\"},\r\n\r\n    // The UCRT had trouble with rounding this value. charconv was never affected, but let's test it anyways.\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 105,\r\n        \"109995565999999994887854821710219658911365648587951921896774663603198787416706536331386569598149846892544\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 19, \"1.099955659999999949e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 18, \"1.09995565999999995e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 17, \"1.0999556599999999e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 16, \"1.09995566e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 15, \"1.09995566e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 14, \"1.09995566e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 13, \"1.09995566e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 12, \"1.09995566e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 11, \"1.09995566e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 10, \"1.09995566e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 9, \"1.09995566e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 8, \"1.0999557e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 7, \"1.099956e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 6, \"1.09996e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 5, \"1.1e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 4, \"1.1e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 3, \"1.1e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 2, \"1.1e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::general, 1, \"1e+104\"},\r\n\r\n    // More cases that the UCRT had trouble with (e.g. DevCom-1093399).\r\n    {0x1.8p+62, chars_format::general, 17, \"6.9175290276410819e+18\"},\r\n    {0x1.0a2742p+17, chars_format::general, 6, \"136271\"},\r\n    {0x1.f8b0f962cdffbp+205, chars_format::general, 14, \"1.0137595739223e+62\"},\r\n    {0x1.f8b0f962cdffbp+205, chars_format::general, 17, \"1.0137595739222531e+62\"},\r\n    {0x1.f8b0f962cdffbp+205, chars_format::general, 51, \"1.01375957392225305727423222620636224221808910954041e+62\"},\r\n    {0x1.f8b0f962cdffbp+205, chars_format::general, 55, \"1.013759573922253057274232226206362242218089109540405973e+62\"},\r\n};\r\n\r\n#endif // DOUBLE_GENERAL_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/double_hex_precision_to_chars_test_cases.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef DOUBLE_HEX_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n#define DOUBLE_HEX_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\ninline constexpr DoublePrecisionToCharsTestCase double_hex_precision_to_chars_test_cases[] = {\r\n    // Test special cases (zero, inf, nan) and an ordinary case. Also test negative signs.\r\n    {0.0, chars_format::hex, 4, \"0.0000p+0\"},\r\n    {-0.0, chars_format::hex, 4, \"-0.0000p+0\"},\r\n    {double_inf, chars_format::hex, 4, \"inf\"},\r\n    {-double_inf, chars_format::hex, 4, \"-inf\"},\r\n    {double_nan, chars_format::hex, 4, \"nan\"},\r\n    {-double_nan, chars_format::hex, 4, \"-nan(ind)\"},\r\n    {double_nan_payload, chars_format::hex, 4, \"nan\"},\r\n    {-double_nan_payload, chars_format::hex, 4, \"-nan\"},\r\n    {0x1.729p+0, chars_format::hex, 4, \"1.7290p+0\"},\r\n    {-0x1.729p+0, chars_format::hex, 4, \"-1.7290p+0\"},\r\n\r\n    // Test hexfloat corner cases.\r\n    {0x1.728p+0, chars_format::hex, 13, \"1.7280000000000p+0\"},\r\n    {0x0.0000000000001p-1022, chars_format::hex, 13, \"0.0000000000001p-1022\"}, // min subnormal\r\n    {0x0.fffffffffffffp-1022, chars_format::hex, 13, \"0.fffffffffffffp-1022\"}, // max subnormal\r\n    {0x1p-1022, chars_format::hex, 13, \"1.0000000000000p-1022\"}, // min normal\r\n    {0x1.fffffffffffffp+1023, chars_format::hex, 13, \"1.fffffffffffffp+1023\"}, // max normal\r\n\r\n    // Test hexfloat exponents.\r\n    {0x1p-1009, chars_format::hex, 0, \"1p-1009\"},\r\n    {0x1p-999, chars_format::hex, 0, \"1p-999\"},\r\n    {0x1p-99, chars_format::hex, 0, \"1p-99\"},\r\n    {0x1p-9, chars_format::hex, 0, \"1p-9\"},\r\n    {0x1p+0, chars_format::hex, 0, \"1p+0\"},\r\n    {0x1p+9, chars_format::hex, 0, \"1p+9\"},\r\n    {0x1p+99, chars_format::hex, 0, \"1p+99\"},\r\n    {0x1p+999, chars_format::hex, 0, \"1p+999\"},\r\n    {0x1p+1009, chars_format::hex, 0, \"1p+1009\"},\r\n\r\n    // Test hexfloat hexits.\r\n    {0x1.01234567p+0, chars_format::hex, 8, \"1.01234567p+0\"},\r\n    {0x1.89abcdefp+0, chars_format::hex, 8, \"1.89abcdefp+0\"},\r\n\r\n    // Test varying precision. Negative precision requests full precision, not shortest round-trip.\r\n    {0x1.1234561234561p+0, chars_format::hex, -2, \"1.1234561234561p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, -1, \"1.1234561234561p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 0, \"1p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 1, \"1.1p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 2, \"1.12p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 3, \"1.123p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 4, \"1.1234p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 5, \"1.12345p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 6, \"1.123456p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 7, \"1.1234561p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 8, \"1.12345612p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 9, \"1.123456123p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 10, \"1.1234561234p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 11, \"1.12345612345p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 12, \"1.123456123456p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 13, \"1.1234561234561p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 14, \"1.12345612345610p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 15, \"1.123456123456100p+0\"},\r\n    {0x1.1234561234561p+0, chars_format::hex, 16, \"1.1234561234561000p+0\"},\r\n\r\n    // Test rounding at every position.\r\n    {0x1.cccccccccccccp+0, chars_format::hex, 0, \"2p+0\"},\r\n    {0x1.cccccccccccccp+0, chars_format::hex, 1, \"1.dp+0\"},\r\n    {0x1.cccccccccccccp+0, chars_format::hex, 2, \"1.cdp+0\"},\r\n    {0x1.cccccccccccccp+0, chars_format::hex, 3, \"1.ccdp+0\"},\r\n    {0x1.cccccccccccccp+0, chars_format::hex, 4, \"1.cccdp+0\"},\r\n    {0x1.cccccccccccccp+0, chars_format::hex, 5, \"1.ccccdp+0\"},\r\n    {0x1.cccccccccccccp+0, chars_format::hex, 6, \"1.cccccdp+0\"},\r\n    {0x1.cccccccccccccp+0, chars_format::hex, 7, \"1.ccccccdp+0\"},\r\n    {0x1.cccccccccccccp+0, chars_format::hex, 8, \"1.cccccccdp+0\"},\r\n    {0x1.cccccccccccccp+0, chars_format::hex, 9, \"1.ccccccccdp+0\"},\r\n    {0x1.cccccccccccccp+0, chars_format::hex, 10, \"1.cccccccccdp+0\"},\r\n    {0x1.cccccccccccccp+0, chars_format::hex, 11, \"1.ccccccccccdp+0\"},\r\n    {0x1.cccccccccccccp+0, chars_format::hex, 12, \"1.cccccccccccdp+0\"},\r\n    {0x1.cccccccccccccp+0, chars_format::hex, 13, \"1.cccccccccccccp+0\"},\r\n\r\n    // Test all combinations of least significant bit, round bit, and trailing bits.\r\n    {0x1.04000p+0, chars_format::hex, 2, \"1.04p+0\"}, // Lsb 0, Round 0, Trailing 0\r\n    {0x1.04001p+0, chars_format::hex, 2, \"1.04p+0\"}, // Lsb 0, Round 0 and Trailing 1 in different hexits\r\n    {0x1.04200p+0, chars_format::hex, 2, \"1.04p+0\"}, // Lsb 0, Round 0 and Trailing 1 in same hexit\r\n    {0x1.04800p+0, chars_format::hex, 2, \"1.04p+0\"}, // Lsb 0, Round 1, Trailing 0\r\n    {0x1.04801p+0, chars_format::hex, 2, \"1.05p+0\"}, // Lsb 0, Round 1 and Trailing 1 in different hexits\r\n    {0x1.04900p+0, chars_format::hex, 2, \"1.05p+0\"}, // Lsb 0, Round 1 and Trailing 1 in same hexit\r\n    {0x1.05000p+0, chars_format::hex, 2, \"1.05p+0\"}, // Lsb 1, Round 0, Trailing 0\r\n    {0x1.05001p+0, chars_format::hex, 2, \"1.05p+0\"}, // Lsb 1, Round 0 and Trailing 1 in different hexits\r\n    {0x1.05200p+0, chars_format::hex, 2, \"1.05p+0\"}, // Lsb 1, Round 0 and Trailing 1 in same hexit\r\n    {0x1.05800p+0, chars_format::hex, 2, \"1.06p+0\"}, // Lsb 1, Round 1, Trailing 0\r\n    {0x1.05801p+0, chars_format::hex, 2, \"1.06p+0\"}, // Lsb 1, Round 1 and Trailing 1 in different hexits\r\n    {0x1.05900p+0, chars_format::hex, 2, \"1.06p+0\"}, // Lsb 1, Round 1 and Trailing 1 in same hexit\r\n\r\n    // Test carry propagation.\r\n    {0x1.0affffffffffep+0, chars_format::hex, 12, \"1.0b0000000000p+0\"},\r\n\r\n    // Test carry propagation into the leading hexit.\r\n    {0x0.fffffffffffffp-1022, chars_format::hex, 12, \"1.000000000000p-1022\"},\r\n    {0x1.fffffffffffffp+1023, chars_format::hex, 12, \"2.000000000000p+1023\"},\r\n\r\n    // Test how the leading hexit participates in the rounding decision.\r\n    {0x0.000p+0, chars_format::hex, 0, \"0p+0\"},\r\n    {0x0.001p-1022, chars_format::hex, 0, \"0p-1022\"},\r\n    {0x0.200p-1022, chars_format::hex, 0, \"0p-1022\"},\r\n    {0x0.800p-1022, chars_format::hex, 0, \"0p-1022\"},\r\n    {0x0.801p-1022, chars_format::hex, 0, \"1p-1022\"},\r\n    {0x0.900p-1022, chars_format::hex, 0, \"1p-1022\"},\r\n    {0x1.000p+0, chars_format::hex, 0, \"1p+0\"},\r\n    {0x1.001p+0, chars_format::hex, 0, \"1p+0\"},\r\n    {0x1.200p+0, chars_format::hex, 0, \"1p+0\"},\r\n    {0x1.800p+0, chars_format::hex, 0, \"2p+0\"},\r\n    {0x1.801p+0, chars_format::hex, 0, \"2p+0\"},\r\n    {0x1.900p+0, chars_format::hex, 0, \"2p+0\"},\r\n};\r\n\r\n#endif // DOUBLE_HEX_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/double_scientific_precision_to_chars_test_cases_1.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception AND BSL-1.0\r\n\r\n\r\n// Copyright 2018 Ulf Adams\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n// Boost Software License - Version 1.0 - August 17th, 2003\r\n\r\n// Permission is hereby granted, free of charge, to any person or organization\r\n// obtaining a copy of the software and accompanying documentation covered by\r\n// this license (the \"Software\") to use, reproduce, display, distribute,\r\n// execute, and transmit the Software, and to prepare derivative works of the\r\n// Software, and to permit third-parties to whom the Software is furnished to\r\n// do so, all subject to the following:\r\n\r\n// The copyright notices in the Software and this entire statement, including\r\n// the above license grant, this restriction and the following disclaimer,\r\n// must be included in all copies of the Software, in whole or in part, and\r\n// all derivative works of the Software, unless such copies or derivative\r\n// works are solely in the form of machine-executable object code generated by\r\n// a source language processor.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r\n// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r\n// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r\n// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\n// DEALINGS IN THE SOFTWARE.\r\n\r\n\r\n// This file contains test cases derived from:\r\n// https://github.com/ulfjack/ryu\r\n// See xcharconv_ryu.h for the exact commit.\r\n// (Keep the cgmanifest.json commitHash in sync.)\r\n\r\n\r\n#ifndef DOUBLE_SCIENTIFIC_PRECISION_TO_CHARS_TEST_CASES_1_HPP\r\n#define DOUBLE_SCIENTIFIC_PRECISION_TO_CHARS_TEST_CASES_1_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\ninline constexpr DoublePrecisionToCharsTestCase double_scientific_precision_to_chars_test_cases_1[] = {\r\n    // Test special cases (zero, inf, nan) and an ordinary case. Also test negative signs.\r\n    {0.0, chars_format::scientific, 4, \"0.0000e+00\"},\r\n    {-0.0, chars_format::scientific, 4, \"-0.0000e+00\"},\r\n    {double_inf, chars_format::scientific, 4, \"inf\"},\r\n    {-double_inf, chars_format::scientific, 4, \"-inf\"},\r\n    {double_nan, chars_format::scientific, 4, \"nan\"},\r\n    {-double_nan, chars_format::scientific, 4, \"-nan(ind)\"},\r\n    {double_nan_payload, chars_format::scientific, 4, \"nan\"},\r\n    {-double_nan_payload, chars_format::scientific, 4, \"-nan\"},\r\n    {1.729, chars_format::scientific, 4, \"1.7290e+00\"},\r\n    {-1.729, chars_format::scientific, 4, \"-1.7290e+00\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2expTest Basic\r\n    {0x1.000000001869fp+211, chars_format::scientific, 62,\r\n        \"3.29100911471548643542566484557342614975886952410844652587974656e+63\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2expTest Zero\r\n    {0.0, chars_format::scientific, 4, \"0.0000e+00\"},\r\n    {0.0, chars_format::scientific, 3, \"0.000e+00\"},\r\n    {0.0, chars_format::scientific, 2, \"0.00e+00\"},\r\n    {0.0, chars_format::scientific, 1, \"0.0e+00\"},\r\n    {0.0, chars_format::scientific, 0, \"0e+00\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2expTest MinMax\r\n    {0x0.0000000000001p-1022, chars_format::scientific, 750,\r\n        \"4.9406564584124654417656879286822137236505980261432476442558568250067550727020875186529983\"\r\n        \"636163599237979656469544571773092665671035593979639877479601078187812630071319031140452784\"\r\n        \"581716784898210368871863605699873072305000638740915356498438731247339727316961514003171538\"\r\n        \"539807412623856559117102665855668676818703956031062493194527159149245532930545654440112748\"\r\n        \"012970999954193198940908041656332452475714786901472678015935523861155013480352649347201937\"\r\n        \"902681071074917033322268447533357208324319360923828934583680601060115061698097530783422773\"\r\n        \"183292479049825247307763759272478746560847782037344696995336470179726777175851256605511991\"\r\n        \"315048911014510378627381672509558373897335989936648099411642057026370902792427675445652290\"\r\n        \"87538682506419718265533447265625e-324\"},\r\n\r\n    {0x1.fffffffffffffp+1023, chars_format::scientific, 308,\r\n        \"1.7976931348623157081452742373170435679807056752584499659891747680315726078002853876058955\"\r\n        \"863276687817154045895351438246423432132688946418276846754670353751698604991057655128207624\"\r\n        \"549009038932894407586850845513394230458323690322294816580855933212334827479782620414472316\"\r\n        \"8738177180919299881250404026184124858368e+308\"},\r\n\r\n    // Test more corner cases.\r\n    {0x0.fffffffffffffp-1022, chars_format::scientific, 766,\r\n        \"2.\"\r\n        \"2250738585072008890245868760858598876504231122409594654935248025624400092282356951787758888037591552642309\"\r\n        \"7809504343120858773871583572918219930202943792242235598198275012420417889695713117910822610439719796040004\"\r\n        \"5489739193807919893608152561311337614984204327175103362739154978273159414382813627511383860409424946494228\"\r\n        \"6316695429105080201815926642134996606517803095075913058719846423906068637102005108723282784678843631944515\"\r\n        \"8661350412234790147923695852083215976210663754016137365830441936037147783553066828345356340050740730401356\"\r\n        \"0296804637591858316312422452159926254649430083685186171942241764645513713542013221703137049658321015465406\"\r\n        \"8035397417906022589503023501937519773030945763173210852507299305089761582519159720757232455434770912461317\"\r\n        \"493580281734466552734375e-308\"}, // max subnormal\r\n    {0x1p-1022, chars_format::scientific, 714,\r\n        \"2.\"\r\n        \"2250738585072013830902327173324040642192159804623318305533274168872044348139181958542831590125110205640673\"\r\n        \"3973103581100515243416155346010885601238537771882113077799353200233047961014744258363607192156504694250373\"\r\n        \"4208375250806650616658158948720491179968591639648500635908770118304874799780887753749949451580451605050915\"\r\n        \"3998565824708186451135379358049921159810857660519924333521143523901487956996095912888916029926415110634663\"\r\n        \"1339366347758651302937176204732563178148566435087212282863764204484681140761391147706280168985324411002416\"\r\n        \"1447421618567166150540154285084716752901903161322778896729707373123334086988983175067838846926092773977972\"\r\n        \"858659654941091369095406136467568702398678315290680984617210924625396728515625e-308\"}, // min normal\r\n\r\n    // Ryu Printf d2fixed_test.cc D2expTest RoundToEven\r\n    {0.125, chars_format::scientific, 2, \"1.25e-01\"},\r\n    {0.125, chars_format::scientific, 1, \"1.2e-01\"},\r\n    {0.375, chars_format::scientific, 2, \"3.75e-01\"},\r\n    {0.375, chars_format::scientific, 1, \"3.8e-01\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2expTest RoundToEvenInteger\r\n    {2.5, chars_format::scientific, 1, \"2.5e+00\"},\r\n    {2.5, chars_format::scientific, 0, \"2e+00\"},\r\n    {3.5, chars_format::scientific, 1, \"3.5e+00\"},\r\n    {3.5, chars_format::scientific, 0, \"4e+00\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2expTest NonRoundToEvenScenarios\r\n    {0.748046875, chars_format::scientific, 2, \"7.48e-01\"},\r\n    {0.748046875, chars_format::scientific, 1, \"7.5e-01\"},\r\n    {0.748046875, chars_format::scientific, 0, \"7e-01\"}, // 0.75 would round to \"8e-01\", but this is smaller\r\n\r\n    {0.2509765625, chars_format::scientific, 2, \"2.51e-01\"},\r\n    {0.2509765625, chars_format::scientific, 1, \"2.5e-01\"},\r\n    {0.2509765625, chars_format::scientific, 0, \"3e-01\"}, // 0.25 would round to \"2e-01\", but this is larger\r\n\r\n    {0x1.0000000000001p-2, chars_format::scientific, 53, \"2.50000000000000055511151231257827021181583404541015625e-01\"},\r\n    {0x1.0000000000001p-2, chars_format::scientific, 2, \"2.50e-01\"},\r\n    {0x1.0000000000001p-2, chars_format::scientific, 1, \"2.5e-01\"},\r\n    {0x1.0000000000001p-2, chars_format::scientific, 0,\r\n        \"3e-01\"}, // 0.25 would round to \"2e-01\", but this is larger (again)\r\n\r\n    // More rounding tests.\r\n    {9.5, chars_format::scientific, 1, \"9.5e+00\"},\r\n    {9.5, chars_format::scientific, 0, \"1e+01\"},\r\n    {10.5, chars_format::scientific, 2, \"1.05e+01\"},\r\n    {10.5, chars_format::scientific, 1, \"1.0e+01\"},\r\n\r\n    {1.241, chars_format::scientific, 3, \"1.241e+00\"},\r\n    {1.241, chars_format::scientific, 1, \"1.2e+00\"},\r\n    {1.251, chars_format::scientific, 3, \"1.251e+00\"},\r\n    {1.251, chars_format::scientific, 1, \"1.3e+00\"},\r\n    {1.261, chars_format::scientific, 3, \"1.261e+00\"},\r\n    {1.261, chars_format::scientific, 1, \"1.3e+00\"},\r\n    {1.341, chars_format::scientific, 3, \"1.341e+00\"},\r\n    {1.341, chars_format::scientific, 1, \"1.3e+00\"},\r\n    {1.351, chars_format::scientific, 3, \"1.351e+00\"},\r\n    {1.351, chars_format::scientific, 1, \"1.4e+00\"},\r\n    {1.361, chars_format::scientific, 3, \"1.361e+00\"},\r\n    {1.361, chars_format::scientific, 1, \"1.4e+00\"},\r\n\r\n    {2.41, chars_format::scientific, 2, \"2.41e+00\"},\r\n    {2.41, chars_format::scientific, 0, \"2e+00\"},\r\n    {2.51, chars_format::scientific, 2, \"2.51e+00\"},\r\n    {2.51, chars_format::scientific, 0, \"3e+00\"},\r\n    {2.61, chars_format::scientific, 2, \"2.61e+00\"},\r\n    {2.61, chars_format::scientific, 0, \"3e+00\"},\r\n    {3.41, chars_format::scientific, 2, \"3.41e+00\"},\r\n    {3.41, chars_format::scientific, 0, \"3e+00\"},\r\n    {3.51, chars_format::scientific, 2, \"3.51e+00\"},\r\n    {3.51, chars_format::scientific, 0, \"4e+00\"},\r\n    {3.61, chars_format::scientific, 2, \"3.61e+00\"},\r\n    {3.61, chars_format::scientific, 0, \"4e+00\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2expTest VaryingPrecision\r\n    {1729.142857142857, chars_format::scientific, 50, \"1.72914285714285711037518922239542007446289062500000e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 49, \"1.7291428571428571103751892223954200744628906250000e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 48, \"1.729142857142857110375189222395420074462890625000e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 47, \"1.72914285714285711037518922239542007446289062500e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 46, \"1.7291428571428571103751892223954200744628906250e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 45, \"1.729142857142857110375189222395420074462890625e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 44, \"1.72914285714285711037518922239542007446289062e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 43, \"1.7291428571428571103751892223954200744628906e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 42, \"1.729142857142857110375189222395420074462891e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 41, \"1.72914285714285711037518922239542007446289e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 40, \"1.7291428571428571103751892223954200744629e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 39, \"1.729142857142857110375189222395420074463e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 38, \"1.72914285714285711037518922239542007446e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 37, \"1.7291428571428571103751892223954200745e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 36, \"1.729142857142857110375189222395420074e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 35, \"1.72914285714285711037518922239542007e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 34, \"1.7291428571428571103751892223954201e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 33, \"1.729142857142857110375189222395420e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 32, \"1.72914285714285711037518922239542e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 31, \"1.7291428571428571103751892223954e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 30, \"1.729142857142857110375189222395e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 29, \"1.72914285714285711037518922240e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 28, \"1.7291428571428571103751892224e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 27, \"1.729142857142857110375189222e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 26, \"1.72914285714285711037518922e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 25, \"1.7291428571428571103751892e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 24, \"1.729142857142857110375189e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 23, \"1.72914285714285711037519e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 22, \"1.7291428571428571103752e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 21, \"1.729142857142857110375e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 20, \"1.72914285714285711038e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 19, \"1.7291428571428571104e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 18, \"1.729142857142857110e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 17, \"1.72914285714285711e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 16, \"1.7291428571428571e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 15, \"1.729142857142857e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 14, \"1.72914285714286e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 13, \"1.7291428571429e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 12, \"1.729142857143e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 11, \"1.72914285714e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 10, \"1.7291428571e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 9, \"1.729142857e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 8, \"1.72914286e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 7, \"1.7291429e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 6, \"1.729143e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 5, \"1.72914e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 4, \"1.7291e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 3, \"1.729e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 2, \"1.73e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 1, \"1.7e+03\"},\r\n    {1729.142857142857, chars_format::scientific, 0, \"2e+03\"},\r\n\r\n    // Negative precision requests 6 digits of precision.\r\n    {1729.142857142857, chars_format::scientific, -1, \"1.729143e+03\"},\r\n    {1729.142857142857, chars_format::scientific, -2, \"1.729143e+03\"},\r\n    {1729.142857142857, chars_format::scientific, -3, \"1.729143e+03\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2expTest Carrying\r\n    {2.0009, chars_format::scientific, 4, \"2.0009e+00\"},\r\n    {2.0009, chars_format::scientific, 3, \"2.001e+00\"},\r\n    {2.0029, chars_format::scientific, 4, \"2.0029e+00\"},\r\n    {2.0029, chars_format::scientific, 3, \"2.003e+00\"},\r\n    {2.0099, chars_format::scientific, 4, \"2.0099e+00\"},\r\n    {2.0099, chars_format::scientific, 3, \"2.010e+00\"},\r\n    {2.0299, chars_format::scientific, 4, \"2.0299e+00\"},\r\n    {2.0299, chars_format::scientific, 3, \"2.030e+00\"},\r\n    {2.0999, chars_format::scientific, 4, \"2.0999e+00\"},\r\n    {2.0999, chars_format::scientific, 3, \"2.100e+00\"},\r\n    {2.2999, chars_format::scientific, 4, \"2.2999e+00\"},\r\n    {2.2999, chars_format::scientific, 3, \"2.300e+00\"},\r\n    {2.9999, chars_format::scientific, 4, \"2.9999e+00\"},\r\n    {2.9999, chars_format::scientific, 3, \"3.000e+00\"},\r\n    {9.9999, chars_format::scientific, 4, \"9.9999e+00\"},\r\n    {9.9999, chars_format::scientific, 3, \"1.000e+01\"},\r\n\r\n    {2.09, chars_format::scientific, 2, \"2.09e+00\"},\r\n    {2.09, chars_format::scientific, 1, \"2.1e+00\"},\r\n    {2.29, chars_format::scientific, 2, \"2.29e+00\"},\r\n    {2.29, chars_format::scientific, 1, \"2.3e+00\"},\r\n    {2.99, chars_format::scientific, 2, \"2.99e+00\"},\r\n    {2.99, chars_format::scientific, 1, \"3.0e+00\"},\r\n    {9.99, chars_format::scientific, 2, \"9.99e+00\"},\r\n    {9.99, chars_format::scientific, 1, \"1.0e+01\"},\r\n\r\n    {2.9, chars_format::scientific, 1, \"2.9e+00\"},\r\n    {2.9, chars_format::scientific, 0, \"3e+00\"},\r\n    {9.9, chars_format::scientific, 1, \"9.9e+00\"},\r\n    {9.9, chars_format::scientific, 0, \"1e+01\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2expTest Exponents\r\n    {9.99e-100, chars_format::scientific, 2, \"9.99e-100\"},\r\n    {9.99e-99, chars_format::scientific, 2, \"9.99e-99\"},\r\n    {9.99e-10, chars_format::scientific, 2, \"9.99e-10\"},\r\n    {9.99e-09, chars_format::scientific, 2, \"9.99e-09\"},\r\n    {9.99e-01, chars_format::scientific, 2, \"9.99e-01\"},\r\n    {9.99e+00, chars_format::scientific, 2, \"9.99e+00\"},\r\n    {9.99e+01, chars_format::scientific, 2, \"9.99e+01\"},\r\n    {9.99e+09, chars_format::scientific, 2, \"9.99e+09\"},\r\n    {9.99e+10, chars_format::scientific, 2, \"9.99e+10\"},\r\n    {9.99e+99, chars_format::scientific, 2, \"9.99e+99\"},\r\n    {9.99e+100, chars_format::scientific, 2, \"9.99e+100\"},\r\n\r\n    {9.99e-100, chars_format::scientific, 1, \"1.0e-99\"},\r\n    {9.99e-99, chars_format::scientific, 1, \"1.0e-98\"},\r\n    {9.99e-10, chars_format::scientific, 1, \"1.0e-09\"},\r\n    {9.99e-09, chars_format::scientific, 1, \"1.0e-08\"},\r\n    {9.99e-01, chars_format::scientific, 1, \"1.0e+00\"},\r\n    {9.99e+00, chars_format::scientific, 1, \"1.0e+01\"},\r\n    {9.99e+01, chars_format::scientific, 1, \"1.0e+02\"},\r\n    {9.99e+09, chars_format::scientific, 1, \"1.0e+10\"},\r\n    {9.99e+10, chars_format::scientific, 1, \"1.0e+11\"},\r\n    {9.99e+99, chars_format::scientific, 1, \"1.0e+100\"},\r\n    {9.99e+100, chars_format::scientific, 1, \"1.0e+101\"},\r\n\r\n    // Ryu Printf d2fixed_test.cc D2expTest PrintDecimalPoint\r\n    // These values exercise each codepath.\r\n    {1e+54, chars_format::scientific, 0, \"1e+54\"},\r\n    {1e+54, chars_format::scientific, 1, \"1.0e+54\"},\r\n    {1e-63, chars_format::scientific, 0, \"1e-63\"},\r\n    {1e-63, chars_format::scientific, 1, \"1.0e-63\"},\r\n    {1e+83, chars_format::scientific, 0, \"1e+83\"},\r\n    {1e+83, chars_format::scientific, 1, \"1.0e+83\"},\r\n\r\n    // The UCRT had trouble with rounding this value. charconv was never affected, but let's test it anyways.\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 104,\r\n        \"1.09995565999999994887854821710219658911365648587951921896774663603198787416706536331386569598149846892544e+\"\r\n        \"104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 18, \"1.099955659999999949e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 17, \"1.09995565999999995e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 16, \"1.0999556599999999e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 15, \"1.099955660000000e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 14, \"1.09995566000000e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 13, \"1.0999556600000e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 12, \"1.099955660000e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 11, \"1.09995566000e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 10, \"1.0999556600e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 9, \"1.099955660e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 8, \"1.09995566e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 7, \"1.0999557e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 6, \"1.099956e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 5, \"1.09996e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 4, \"1.1000e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 3, \"1.100e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 2, \"1.10e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 1, \"1.1e+104\"},\r\n    {0x1.88e2d605edc3dp+345, chars_format::scientific, 0, \"1e+104\"},\r\n\r\n    // More cases that the UCRT had trouble with (e.g. DevCom-1093399).\r\n    {0x1.8p+62, chars_format::scientific, 16, \"6.9175290276410819e+18\"},\r\n    {0x1.0a2742p+17, chars_format::scientific, 5, \"1.36271e+05\"},\r\n    {0x1.f8b0f962cdffbp+205, chars_format::scientific, 13, \"1.0137595739223e+62\"},\r\n    {0x1.f8b0f962cdffbp+205, chars_format::scientific, 16, \"1.0137595739222531e+62\"},\r\n    {0x1.f8b0f962cdffbp+205, chars_format::scientific, 50, \"1.01375957392225305727423222620636224221808910954041e+62\"},\r\n    {0x1.f8b0f962cdffbp+205, chars_format::scientific, 54,\r\n        \"1.013759573922253057274232226206362242218089109540405973e+62\"},\r\n};\r\n\r\n#endif // DOUBLE_SCIENTIFIC_PRECISION_TO_CHARS_TEST_CASES_1_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/double_scientific_precision_to_chars_test_cases_2.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception AND BSL-1.0\r\n\r\n\r\n// Copyright 2018 Ulf Adams\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n// Boost Software License - Version 1.0 - August 17th, 2003\r\n\r\n// Permission is hereby granted, free of charge, to any person or organization\r\n// obtaining a copy of the software and accompanying documentation covered by\r\n// this license (the \"Software\") to use, reproduce, display, distribute,\r\n// execute, and transmit the Software, and to prepare derivative works of the\r\n// Software, and to permit third-parties to whom the Software is furnished to\r\n// do so, all subject to the following:\r\n\r\n// The copyright notices in the Software and this entire statement, including\r\n// the above license grant, this restriction and the following disclaimer,\r\n// must be included in all copies of the Software, in whole or in part, and\r\n// all derivative works of the Software, unless such copies or derivative\r\n// works are solely in the form of machine-executable object code generated by\r\n// a source language processor.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r\n// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r\n// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r\n// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\n// DEALINGS IN THE SOFTWARE.\r\n\r\n\r\n// This file contains test cases derived from:\r\n// https://github.com/ulfjack/ryu\r\n// See xcharconv_ryu.h for the exact commit.\r\n// (Keep the cgmanifest.json commitHash in sync.)\r\n\r\n\r\n#ifndef DOUBLE_SCIENTIFIC_PRECISION_TO_CHARS_TEST_CASES_2_HPP\r\n#define DOUBLE_SCIENTIFIC_PRECISION_TO_CHARS_TEST_CASES_2_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\ninline constexpr DoublePrecisionToCharsTestCase double_scientific_precision_to_chars_test_cases_2[] = {\r\n    // Ryu Printf d2fixed_test.cc D2expTest AllPowersOfTen\r\n    // These values test every power of ten that's within the range of doubles.\r\n    {1e-323, chars_format::scientific, 749,\r\n        \"9.\"\r\n        \"8813129168249308835313758573644274473011960522864952885117136500135101454041750373059967272327198475959312\"\r\n        \"9390891435461853313420711879592797549592021563756252601426380622809055691634335697964207377437272113997461\"\r\n        \"4461000127748183071299687746249467945463392302800634307707961482524771311823420533171133735363740791206212\"\r\n        \"4986389054318298491065861091308880225496025941999908386397881816083312664904951429573802945356031871047722\"\r\n        \"3100269607052986944038758053621421498340666445368950667144166486387218476578691673612021202301233961950615\"\r\n        \"6684554636658495809965049461552751854495749312169556407468939399067294035945355435170251321102398263009782\"\r\n        \"2029020757254763345019116747794671979873296198823284114052741805584855350891304581750773650128394365310668\"\r\n        \"9453125e-324\"},\r\n    {1e-322, chars_format::scientific, 749,\r\n        \"9.\"\r\n        \"8813129168249308835313758573644274473011960522864952885117136500135101454041750373059967272327198475959312\"\r\n        \"9390891435461853313420711879592797549592021563756252601426380622809055691634335697964207377437272113997461\"\r\n        \"4461000127748183071299687746249467945463392302800634307707961482524771311823420533171133735363740791206212\"\r\n        \"4986389054318298491065861091308880225496025941999908386397881816083312664904951429573802945356031871047722\"\r\n        \"3100269607052986944038758053621421498340666445368950667144166486387218476578691673612021202301233961950615\"\r\n        \"6684554636658495809965049461552751854495749312169556407468939399067294035945355435170251321102398263009782\"\r\n        \"2029020757254763345019116747794671979873296198823284114052741805584855350891304581750773650128394365310668\"\r\n        \"9453125e-323\"},\r\n    {1e-321, chars_format::scientific, 751,\r\n        \"9.\"\r\n        \"9801260459931801923666896159380717217742080128093602413968307865136452468582167876790566945050470460718906\"\r\n        \"0684800349816471846554918998388725525087941779393815127440644429037146248550679054943849451211644835137436\"\r\n        \"0605610129025664902012684623711962624918026225828640650785041097350019024941654738502845072717378199118274\"\r\n        \"6236252944861481475976519702221969027750986201419907470261860634244145791554000943869540974809592189758199\"\r\n        \"5331272303123516813479145634157635713324073109822640173815608151251090661344478590348141414324246301570121\"\r\n        \"8251400183025080768064699956168279373040706805291251971543628793057966976304808989521953834313422245639880\"\r\n        \"0249310964827310978469307915272618699672029160811516955193269223640703904400217627568281386629678308963775\"\r\n        \"634765625e-322\"},\r\n    {1e-320, chars_format::scientific, 750,\r\n        \"9.\"\r\n        \"9998886718268300541337523676528005766688104049139332319738542138136722671490251377536686879595124857670824\"\r\n        \"6943582132687395553181760422147911120187125822521327632643497190282764359933947726339777865966519379365430\"\r\n        \"9834532129281161268155283999204461560808953010434241919400457020315068567565301579569187340188105680700687\"\r\n        \"0486225722970118072958651424404586788201978253303907287034656397876312416883810846728688580700304253500294\"\r\n        \"9777472842337622787367223150264878556320754442713378075149896484223865098297635973695365456728848769494023\"\r\n        \"0564769292298397759684630055091384876749698303915591084358566671856101564376699700392294336955627042165899\"\r\n        \"5893369006341820505159346148768208043631775753209163523421374707251873615102000236731782933929935097694396\"\r\n        \"97265625e-321\"},\r\n    {1e-319, chars_format::scientific, 750,\r\n        \"9.\"\r\n        \"9998886718268300541337523676528005766688104049139332319738542138136722671490251377536686879595124857670824\"\r\n        \"6943582132687395553181760422147911120187125822521327632643497190282764359933947726339777865966519379365430\"\r\n        \"9834532129281161268155283999204461560808953010434241919400457020315068567565301579569187340188105680700687\"\r\n        \"0486225722970118072958651424404586788201978253303907287034656397876312416883810846728688580700304253500294\"\r\n        \"9777472842337622787367223150264878556320754442713378075149896484223865098297635973695365456728848769494023\"\r\n        \"0564769292298397759684630055091384876749698303915591084358566671856101564376699700392294336955627042165899\"\r\n        \"5893369006341820505159346148768208043631775753209163523421374707251873615102000236731782933929935097694396\"\r\n        \"97265625e-320\"},\r\n    {1e-318, chars_format::scientific, 754,\r\n        \"9.\"\r\n        \"9999874849559983034425876814113742209432834168744560969267393309501724022504791795040417479267848129655584\"\r\n        \"2874876041601750171714894629266707048162621742736965195169511454088992450490864069696757508040293752086570\"\r\n        \"9580676739282438749985996996081924055488407644357269925743534099929893815278419813774519051525459318108599\"\r\n        \"1107475586860661255943562083015499877004233213563327286118520376694473250010459896242984318729757813819005\"\r\n        \"4549703845033693317236663537845414770535737849377831764656567925888728970482401760612101576940871781833642\"\r\n        \"5626336137844764344642729705586000404268243261408712779922641361250092237317059153946646039468838066148529\"\r\n        \"6871589296549393052792796339935685990351574486171151756262515234669929463655509149777600441666436381638050\"\r\n        \"079345703125e-319\"},\r\n    {1e-317, chars_format::scientific, 757,\r\n        \"1.\"\r\n        \"0000002306925373540838912978475160267584454368668534526669672098520647422515697285766597706921875662045329\"\r\n        \"8226457012793890336449486476033452643735894613076931082954841359365992666407440152120030445435135990799474\"\r\n        \"1954259843078263037226060394561354342969032583944572412669499566187211760243538754890531880822606236371978\"\r\n        \"5920066306644424273339129868180713684032457145760224028598109997351719737497945725367012867943417584786681\"\r\n        \"2026553849543810389671707959598249520266798536037749981808256864213845855131011662864961199497267523368458\"\r\n        \"5488557116467671933238644465316019273339602500503268103425725256465919083825811307197979879484581971974592\"\r\n        \"4201832234008052893493781386861080768235954429611544999118868631378263784093853548673447306782691157422959\"\r\n        \"804534912109375e-317\"},\r\n    {1e-316, chars_format::scientific, 757,\r\n        \"9.\"\r\n        \"9999998365971443346061920956311959264775925433695214550458499705922349191381609347228383804226938538653679\"\r\n        \"2366287780216044499031536405156556539159558732763919890485263237064770961810478612616379963299515548676713\"\r\n        \"4548944815532598435214836120691606867323339473597648426536418734881746971242559593050185515442628522784588\"\r\n        \"1185131819846979153816675915341864013104515083595754786004003374046743354151291027432271285983439508858844\"\r\n        \"2646232720370702133470343586292981797312610775210888475844901856096836954505497483976693591967374658376095\"\r\n        \"0009031993538060167762492161897827345208061381095352991868150697424341071434604085640940002282989444146358\"\r\n        \"4493866832825339621246977613831620733691549327791400285367657800597186444724697763908327630133499042131006\"\r\n        \"717681884765625e-317\"},\r\n    {1e-315, chars_format::scientific, 758,\r\n        \"9.\"\r\n        \"9999999848168380869801553486018337869440042528874622393432792982679396693408131157854639400126447623561656\"\r\n        \"3760184721079416030959336106467234733051521976644243346829052258460480303946313987131415432762626210235795\"\r\n        \"1648564032447600351437582190186923061065358655548532968545933350501169209114129270401493513009634553240699\"\r\n        \"9866063694642814968591153281329780382737718466036143916002629170014970595400981001006542729590483689199322\"\r\n        \"3303391066874746239265147746874352601633933250320885156379161863259334250313774632657068696147692692894604\"\r\n        \"4301624343806379717639929311373569268499339198531592674411496809458432057444014624821271529836759260682332\"\r\n        \"3945334163260650980068427789118371950611629025890843267716919511388313528497528027277896356395103794056922\"\r\n        \"1973419189453125e-316\"},\r\n    {1e-314, chars_format::scientific, 759,\r\n        \"9.\"\r\n        \"9999999996388074622175516738988975729906454238392563177730222310355101443610783338917264959716398532052454\"\r\n        \"0899574415165753184152116076598302552440718301032275692463431160600051238159897524582918979708937276391703\"\r\n        \"3358525954139100543059856797136454680439560573743621422746884812063111432901286238136624312766335156286311\"\r\n        \"1734156882122398550068601017928572019701038804280182829002491749611793319525949998363969873951188107233370\"\r\n        \"1369106901525150649844628162932489682066065497831884824432587863975583979894602347525106206565724496346455\"\r\n        \"3730883578833211672627673026321143460828466980275216642665831420661841156044955678739304682592136242335929\"\r\n        \"7890480896304182115950572806647047072303636995700787565951845682467426236874811053614853229021264269249513\"\r\n        \"74530792236328125e-315\"},\r\n    {1e-313, chars_format::scientific, 761,\r\n        \"1.\"\r\n        \"0000000000132873108058798218075466365858866796204316120387346995461095826861753841161935247836939689566881\"\r\n        \"4013755407163529775592520874226933814642035817851187677065124379067137026930035030916463576460714764526356\"\r\n        \"6941552468486215054944726595070143906775203397101679103788691652744850950702752480372779533942489184305449\"\r\n        \"8212975998837171800278451594248186507426648281555498412610248716893168741033011563160921744542987825450117\"\r\n        \"1730463076268016413019727751013442758474713657274891814670103539733279230421396327135404079024632555646151\"\r\n        \"7071185888666743940446059781681939593390610457300000410827430924103528812599832038053657245435064880839104\"\r\n        \"9702198578740563315381331097389800290969337059469445237589300988817006332715405382115941845810880295175593\"\r\n        \"3463573455810546875e-313\"},\r\n    {1e-312, chars_format::scientific, 761,\r\n        \"9.\"\r\n        \"9999999999846534143064242548224957279984003844947981796030495661334201221115511889808726222773497386583906\"\r\n        \"0366160174694434384393280942568027468226466215267996447194900001649974559958214473790120729137684534602007\"\r\n        \"8598425065645235547531043204631943751558291951834840153344907012832890084789653234050444031427324837024042\"\r\n        \"1011079056496922166969741465115877157896849612172543736972488543135719183088865941635643173986271210320831\"\r\n        \"2523973604333660086091482705973846213942815250273808150020501137325629806918154994205360415142145238426998\"\r\n        \"5617566294317171084910720379669920191982813295182567868591765894923254035012310969997392122823095038574513\"\r\n        \"7282534320075197842454489523722716158476450514996352932910660626459272200070280990896048889382541347004007\"\r\n        \"5480937957763671875e-313\"},\r\n    {1e-311, chars_format::scientific, 762,\r\n        \"9.\"\r\n        \"9999999999994753836816616511477927917844470256657499736814793090661876925865714541989788848333087337492396\"\r\n        \"8343299564388520721546473722538158536045855411592384479540534380552114130892428057327572232684630845668163\"\r\n        \"7680135027566927047722665479238893283177666153753035241799107964294452027013440391018179162227081537627087\"\r\n        \"7122947149684401750551218912852475949533812932510787775885488405715316005812990910633000601130631914738865\"\r\n        \"3002039320168310490502062186389904351023247382521319149688554563326346056647735821920228452652563270230450\"\r\n        \"4126995553552197916865708123384867766175142422964311492560020229534457444110911911051310155975850415556167\"\r\n        \"3256479466808241373590371668740244833598142522966162877208895552630351312778658273922385846255167507479200\"\r\n        \"13964176177978515625e-312\"},\r\n    {1e-310, chars_format::scientific, 763,\r\n        \"9.\"\r\n        \"9999999999999694493275028976919693605773152470381150334840936338306132782690721297062490935851740335856013\"\r\n        \"1942537544044990266118246815203829571639835051469864080618722193182185449923568510112153949469529056037035\"\r\n        \"6316192026297650097729052888392458267564978627150308411414247996009837425087566629583770333253740094313855\"\r\n        \"8993342752790651070003934827777029242588378376522062577182588401134635899903795076266245848702110604886133\"\r\n        \"1017974844029465503982414835737106288925928453596236183010823010859703264972055182844057387236243871290565\"\r\n        \"4743976528860032144597541048175366018648220060557036280025628707354830891080865275753107423747608928122222\"\r\n        \"4455610971699342824628234406907495789435532256565156542018836716836053949868937516689930411484255046161706\"\r\n        \"559360027313232421875e-311\"},\r\n    {1e-309, chars_format::scientific, 765,\r\n        \"1.\"\r\n        \"0000000000000018855892087022346387017456602069175351539464355066307055836837322197256976114460360563569237\"\r\n        \"4830246134201063722057542412447039667519923301545761204072654097444519258182668255539061212114801887707392\"\r\n        \"2817979772617072240272969162930781476600370987449003572837576199918137596489497925344032945035640594998253\"\r\n        \"2718038231310127600194920641926948457189383492092319005731229840067656788931287549282957037345925847390085\"\r\n        \"9881956839641558100533045010067182648271619656070372788634304985561303898580448711893644028069461193139657\"\r\n        \"6980567462639081556737072434065441584389552782431630875877218955513686823577786061222328715052478477937882\"\r\n        \"7957552412218845296973202068072422088501927122992505590849983083325662421357796544096668486800716380002995\"\r\n        \"72013318538665771484375e-309\"},\r\n    {1e-308, chars_format::scientific, 764,\r\n        \"9.\"\r\n        \"9999999999999990932662533724846199547048873403204569370722504933164788134100221702366853061102859515757830\"\r\n        \"1758491822824378438792553200763769833775473829862512856683413461939989729065436937279228852476622948659167\"\r\n        \"9434355446221493480729436132941672166628217375554144801591156397912760548972014203897705803515339607715061\"\r\n        \"9905566488977026029171097782672502440171652303162739065260414400859795093549243326204240563556399326294969\"\r\n        \"1698930975461134804791235994697938405200089317860731205010159117711704697471514344499487123311264707354172\"\r\n        \"3780995387378502198261451023662795913796604718812599767273565216024053297899062477635215259813914438876185\"\r\n        \"7527558861992808911690506171197530846785775640581096161907433186688396108094354271255983085398000298482656\"\r\n        \"9445431232452392578125e-309\"},\r\n    {1e-307, chars_format::scientific, 764,\r\n        \"9.\"\r\n        \"9999999999999990932662533724846199547048873403204569370722504933164788134100221702366853061102859515757830\"\r\n        \"1758491822824378438792553200763769833775473829862512856683413461939989729065436937279228852476622948659167\"\r\n        \"9434355446221493480729436132941672166628217375554144801591156397912760548972014203897705803515339607715061\"\r\n        \"9905566488977026029171097782672502440171652303162739065260414400859795093549243326204240563556399326294969\"\r\n        \"1698930975461134804791235994697938405200089317860731205010159117711704697471514344499487123311264707354172\"\r\n        \"3780995387378502198261451023662795913796604718812599767273565216024053297899062477635215259813914438876185\"\r\n        \"7527558861992808911690506171197530846785775640581096161907433186688396108094354271255983085398000298482656\"\r\n        \"9445431232452392578125e-308\"},\r\n    {1e-306, chars_format::scientific, 763,\r\n        \"1.\"\r\n        \"0000000000000000279023803391476325978469990224051750613215776767695913434815660171857902754611290428295390\"\r\n        \"2855112999397555396569952545618616744426089938099821880772600111269030190023111167436591184859690670436405\"\r\n        \"3235908198301844721604945146272364072259074692549029825719823273398887747392739210687026322232580358825111\"\r\n        \"0234205543842448102753778430086832136807498326022836612478352744084880146129506125620176035215057087515132\"\r\n        \"2612616922071840157682358884105637168985105575243131100589013256198578475477149271096570431275426554079671\"\r\n        \"6654247614171924100040800742268229310960254010514282230676348267637082219417179036571049957325656665930634\"\r\n        \"4285043677760454755517299704176913224907978537594173374670297704548248979442337094143862519235455010857549\"\r\n        \"495995044708251953125e-306\"},\r\n    {1e-305, chars_format::scientific, 760,\r\n        \"9.\"\r\n        \"9999999999999999628217900530785377054659627883900722995775030945280642024408233714255781016776892345034950\"\r\n        \"1406426481668573825190999521406861414798119234028697220781311072490218654586931744476129716298164369509417\"\r\n        \"1579154906539259553297447374781782441000739045507324002369679044368579627272624666077581243976346526774830\"\r\n        \"7025658385238493027973334562682769653967428338344198908910697296851733096562843141535755075192125128789628\"\r\n        \"3612239021983130437614961415360789480610798036545823058988806310179363406158165146574713062236131985212038\"\r\n        \"1806081273895043986502259049610427190720957335454762962899504686945017155165729595557090423005192733858302\"\r\n        \"0097669333441417250244332809616705208468049446512230390757498683137398144735633162723253963832803492550738\"\r\n        \"155841827392578125e-306\"},\r\n    {1e-304, chars_format::scientific, 757,\r\n        \"9.\"\r\n        \"9999999999999997098601793823603070870627408398607296486668841559937848165409539310797183793308082794699787\"\r\n        \"9690663671822989712784178773583416591227895116453079951225559040330152058071587800564304010459170501625708\"\r\n        \"2955213245355909423095844104428295815728732741520944598506836092672341349948810713443435661296780877593807\"\r\n        \"0772540742689702628321774772134328282681384400836865136212433181654078404777068649802950853625368531700272\"\r\n        \"9601094862994913526248059474804323713218591863837432701467745308734226327267503095061920061821625140744295\"\r\n        \"4016965379635686375377660351152934455615691119704315487808322295404373123960880979434363102804093593499868\"\r\n        \"1895455378110913006301401423894763575978660702968627706001115993261324824985442939750956981015406199730932\"\r\n        \"712554931640625e-305\"},\r\n    {1e-303, chars_format::scientific, 755,\r\n        \"9.\"\r\n        \"9999999999999993051216023092111380976175857222137814072098938543389377991011628265263428235757987514163528\"\r\n        \"4945443176070055132933265577065904873515536528332092319936355788874045503647037490305382881116780313011774\"\r\n        \"1156906587462549214773278871862717215293522655142737552326287369958360106230708389228802729009475838904169\"\r\n        \"2767552514611637988879279107256822088623714100825131099895210597337830897919829463030464099118557976357304\"\r\n        \"3183264208613766468061016369913978485391061987504008129434047706422007001042443812641451261158414189595906\"\r\n        \"9554379948820714197578302433620946079447265174503599527662430468939342674033123193637999390482334968926374\"\r\n        \"0771913049582106215992711206739656963995638713298863410390903689459607513385138582995281808507570531219244\"\r\n        \"0032958984375e-304\"},\r\n    {1e-302, chars_format::scientific, 751,\r\n        \"9.\"\r\n        \"9999999999999996289124639677304732891737098163313400003754860956628154130529957101690432681798063738592536\"\r\n        \"0741619572672402796813996134279914247685423398828882424967718390038930747186677738512519784590692463902921\"\r\n        \"4595551913777237381431331057915180095641690724245303189270726348129545101205190248600509074839319869855879\"\r\n        \"5171543097074089700433275639158827043869850340834518328948988664790828903405620812448453502724006420631679\"\r\n        \"2317528732118684114610650853826254667653085888570747787061005788271782462022491238577826301688982950514617\"\r\n        \"7124448293472691939817788767646536780382005930664172295779143930111367033975329422275090360339741868585169\"\r\n        \"3670746912405151648239663380463742253582056305034674846879073532500981362665382068399821946513839066028594\"\r\n        \"970703125e-303\"},\r\n    {1e-301, chars_format::scientific, 751,\r\n        \"1.\"\r\n        \"0000000000000000665043221274992345902153306917507527498505381267899223777698860937825684690912630765676536\"\r\n        \"0328938404179991532123233391736474424502906138441861076106807871376656352651352653277535787570721134675459\"\r\n        \"2959921695798423951473709805328306131275582854537351322749293107827733708512353219858996938149482076890135\"\r\n        \"2286431296095393517740606454124524290065748630886455746192107848064042252096015313058601959426144144230967\"\r\n        \"8954717520733442058356948120234553845089156237198431469146727165019106393715864300157422643138680298545449\"\r\n        \"2134866699635902071498414503652842702337317635037800515375262700586184498579038935391378146388344394749331\"\r\n        \"4294701527343889703142991033638081518025859259858927144364121703023337768036216122169435038813389837741851\"\r\n        \"806640625e-301\"},\r\n    {1e-300, chars_format::scientific, 749,\r\n        \"1.\"\r\n        \"0000000000000000250590918352087596856961468077037052499253423199004660431840514846763028121819501008949623\"\r\n        \"0627027825414891031146499880413081224609160619018271942662793458427551041478278701507022263926060379361392\"\r\n        \"4359775094030143866141479125513590882591017341692222921220404918621822029155619541859418525883262040928316\"\r\n        \"3178720501540199698661694898041067655794243192165254180873224255430058507393834020333099315764646743363847\"\r\n        \"9065531661724812599598594906293782493759617177861888792970476530542335134710418229637566637950767497147854\"\r\n        \"2365897951520448920491760252897567092617670818249247201056323377556165380506436538125830502246596311593005\"\r\n        \"6323650792902539887815381155401398600958797808116743280493635963114041915328344956037653901148587465286254\"\r\n        \"8828125e-300\"},\r\n    {1e-299, chars_format::scientific, 746,\r\n        \"9.\"\r\n        \"9999999999999999190290760137637976208079970046606724998518567438890097551538379739129028665449972035680926\"\r\n        \"8654993624028106303651130713543666646941642034794006359075819280682667925398195400906114450103317751101389\"\r\n        \"4796578126155197978756945816618186836433649314161201999972943672570926856702325994597557960702860121588611\"\r\n        \"8925518658960446433985656531743023483770388411882929286181173813228715116320889861526972008354488226701519\"\r\n        \"1541829745179090325919123351411654126959859303926546520294760229609181275060613732216818338004372560297782\"\r\n        \"5507229530280863996864368522933466048419533648184045496011719191321500860483546203133923869331978450679449\"\r\n        \"9468102053494600355532932528120522673051486467229961893972473711866052331620480231322289910167455673217773\"\r\n        \"4375e-300\"},\r\n    {1e-298, chars_format::scientific, 743,\r\n        \"9.\"\r\n        \"9999999999999991232806544017866794540396664309573605012880972516114481311058134790726022538861880706524197\"\r\n        \"8378310511738176684897847296134517208981728061861094996950742552059845950875175526912254796125831249071305\"\r\n        \"7673763372204220340378116764175654061689991467534736690618290439817422613053039377005652445191435431121688\"\r\n        \"8057471403500725107670554654940656105757483988435859232058608834656227218039009041197321250053738130052815\"\r\n        \"3669461252213404717758741643748844181432709364664927137710748047655173102156049178235583038396446773463958\"\r\n        \"9943029566464163497536606908432174341802314765843821861088084189145133793489580175635409101810415254077994\"\r\n        \"6423927952220683901242822865976210665363906593780031707659147505607571959629353841592092067003250122070312\"\r\n        \"5e-299\"},\r\n    {1e-297, chars_format::scientific, 742,\r\n        \"1.\"\r\n        \"0000000000000000396478128980950068520868995348882659698990112439255546729582652670817083234140282683317496\"\r\n        \"4282100349140206407490310076398915630971759041855375317635086531785636111011200732530243024248980965231943\"\r\n        \"9707026697852578456178424324808370650127984402213708118558573561222302940289189796515270127000971493586876\"\r\n        \"5744634701223627922977471765782444391057813106595117131865471280037220785529001835372476246333493828469074\"\r\n        \"1426525084095850169081535237600934009427614926748351814984516753878158617880335246460555951776912803239807\"\r\n        \"6684574950857088429646102549163424107238986497758817967696590019262732110067992581963303272984491636864032\"\r\n        \"3129460651425895022810699832540710987766403439129992000576046943562114055481515606516040861606597900390625\"\r\n        \"e-297\"},\r\n    {1e-296, chars_format::scientific, 739,\r\n        \"1.\"\r\n        \"0000000000000000056958802426506498103047840970769246579602908389217120436655495553018554972739190786606809\"\r\n        \"3230295203015836077090169983922791921618802712343571099517749924697729040098218551239838345679274874478660\"\r\n        \"3989786601684003410274260951904155918405588334090978932026108356624820092560153567498015491672484040126954\"\r\n        \"5227598018324013146388027419038876716262595851194708809556241840951461301868974920371744480645995157678729\"\r\n        \"4477304028395980916466692284740654118418456529339856054660932234114787602503073825490689912326974636334897\"\r\n        \"8633835752400909208341451386944702327756651825445635092606514925836540448542916698123366642903571607142370\"\r\n        \"2199575889771541254094321820289220342105066697862794979293345025428418892943227547220885753631591796875e-\"\r\n        \"296\"},\r\n    {1e-295, chars_format::scientific, 737,\r\n        \"1.\"\r\n        \"0000000000000000600189724913616210771561687975750707570622434869278602505338946941496200190980937821343908\"\r\n        \"6913183436814828605730394131884589856583532839562457848505488496038380353558990041304485831390804619683914\"\r\n        \"1137370755553723483720922348550899489161422043087345630478052683980792648926611533925622908198063965662829\"\r\n        \"8054856710963396788931138373828584995934943459835362125251008943488676475725017984372915305745993030943280\"\r\n        \"9596057717515771720650441009317101944033109965193449271178667465736181227106692099042475575446875703382753\"\r\n        \"5515018469930795962428893246494657174928387301146727692750635075318447106983038112267265251033043654697029\"\r\n        \"56873915084185072840405266398916053751632054838903102133456680944423311530044884420931339263916015625e-\"\r\n        \"295\"},\r\n    {1e-294, chars_format::scientific, 735,\r\n        \"1.\"\r\n        \"0000000000000000165604986923928440636750610371765538777806813685229416850392185830714084016387540193554229\"\r\n        \"1966872849775634582818214813515151508611748737787348449315297638965859302790372849252767842821580823519711\"\r\n        \"1419303432457947424963593231233504632556755075890252271716497222096014603833445160783536974977600025234129\"\r\n        \"5793049756851889874896649609996818372197065372922839472695195261458904336640183533171978645665994732331639\"\r\n        \"7501054766219939077303442029655943683541387216510574697964479280439066327423797480201047044950954849744469\"\r\n        \"0010072295906886559158939758854693297190998920585853612635338955732921780230940980952146364529466016653302\"\r\n        \"089713901350093446008356278420969734871669445506829802610380963923120134495547972619533538818359375e-294\"},\r\n    {1e-293, chars_format::scientific, 729,\r\n        \"1.\"\r\n        \"0000000000000000513272777315678656744599472454953673812059310632468765374349594719339776956062258295785972\"\r\n        \"7923921319406989801147958268210702186989176019207435968667450324623876143405266602894142233676959860451073\"\r\n        \"5193757290934568271969456525087420517840488649647926958725741591603837039907978259297205721553971177577089\"\r\n        \"7602495320141095406124240621062231671187367842452857594739846207082722047908051094132727973729993371220952\"\r\n        \"7177057127256605191981041213384870291934765415456874356535829828676758247170113175274189869347691532655096\"\r\n        \"6414029235126014081774902548966664399380909625034552876727575851401342041632618686004241473732328127088284\"\r\n        \"072934100943499271924913386875522376987390327812590777589729640340010519139468669891357421875e-293\"},\r\n    {1e-292, chars_format::scientific, 729,\r\n        \"1.\"\r\n        \"0000000000000000513272777315678656744599472454953673812059310632468765374349594719339776956062258295785972\"\r\n        \"7923921319406989801147958268210702186989176019207435968667450324623876143405266602894142233676959860451073\"\r\n        \"5193757290934568271969456525087420517840488649647926958725741591603837039907978259297205721553971177577089\"\r\n        \"7602495320141095406124240621062231671187367842452857594739846207082722047908051094132727973729993371220952\"\r\n        \"7177057127256605191981041213384870291934765415456874356535829828676758247170113175274189869347691532655096\"\r\n        \"6414029235126014081774902548966664399380909625034552876727575851401342041632618686004241473732328127088284\"\r\n        \"072934100943499271924913386875522376987390327812590777589729640340010519139468669891357421875e-292\"},\r\n    {1e-291, chars_format::scientific, 727,\r\n        \"9.\"\r\n        \"9999999999999996232432339127981035085063855219920481243729184475360331530186279644580030304949799540727091\"\r\n        \"8738772371507204422238150241900924503429621787720119191259394493393530314311385935722237930871895259067858\"\r\n        \"3311554132344189036344464928213958515141307008282797599820760056638116035571735271022137303184610275791116\"\r\n        \"9703146781207292461816076327347736257721935204560112023055397862857487070623101380732096938861568556643115\"\r\n        \"2064910830027399384063873030388181744477172261543472305931724251882669326195449958869442388920456244038898\"\r\n        \"8198994707250476238780378062800183777747382216458827606514493984901861724443237610708779941730011243747301\"\r\n        \"9589038998438035757852718923186761317114486910984268164259702871277113445103168487548828125e-292\"},\r\n    {1e-290, chars_format::scientific, 725,\r\n        \"1.\"\r\n        \"0000000000000000691278685996254767391818089841545998949596589069455311818615788070316131741175713964128625\"\r\n        \"5133930135858243672932786917014824134318418787294520778575752499680780765800092204758525921794913927359931\"\r\n        \"0566277666474598145636458531540625451105760239411856398474474708791842127178139205736204119801073207576685\"\r\n        \"3728931448545168638112767218727723280270402706852226873226707491242116716077199285344631629698760674332280\"\r\n        \"9571170336107378242695971995454080715432175053317379781724361309374456510080226811151638995438820714305337\"\r\n        \"9932855188006207373354275497503993603702143905712286899942801141983573215470277670990914169644193527630994\"\r\n        \"84834284313532305479419062640425332975063941955314039677915616266545839607715606689453125e-290\"},\r\n    {1e-289, chars_format::scientific, 723,\r\n        \"1.\"\r\n        \"0000000000000000121659778218411213320718514204450558509477298071098363196963969347191796428812655825432136\"\r\n        \"8061901923214231283221335240841633902864841929415849386869185539498685974136650278792498119817460913251586\"\r\n        \"9374212464746502549902052110890369664656891152167282191278528733790225847913624177131409245410346711577979\"\r\n        \"4124335837652134295749482106198150131204691140774245182068751381932053777935925073466539930598705304376030\"\r\n        \"5910008067784904480408193492832607360240464212163762421121060571141822068767863176343801791947207333024565\"\r\n        \"6672612138789588840300282062184540149874194207543538025654080212120433459189768919033561542726224245894320\"\r\n        \"367034868121486949612503459912314280908242325983381615372991291224025189876556396484375e-289\"},\r\n    {1e-288, chars_format::scientific, 721,\r\n        \"1.\"\r\n        \"0000000000000000577354904440686056577598174714126910861572730869783922094285424325691264678703102336389327\"\r\n        \"7719524493329441194990496581780186088027703415718786500234439107644361807467403819565320361399423324538262\"\r\n        \"2327864626128979026489577247410574293815986421962941557035285513791518871325236200015245144922927908376944\"\r\n        \"1808012326366561769640110196221808650457260393636630534995116269380104128448944442969013289878749600341030\"\r\n        \"8838937882442883490238416294929786044393832885086656309603701161727929621817754084190071554740498038049183\"\r\n        \"5280806578162883666743476810440102912936553966078537125085056956010945264214175920599443644260599671283659\"\r\n        \"9520812481325558337578531931058655199821600008391886404979231883771717548370361328125e-288\"},\r\n    {1e-287, chars_format::scientific, 719,\r\n        \"1.\"\r\n        \"0000000000000000212798803462866181972094446306385828979896384630835474976428260342891690078790745127623574\"\r\n        \"9993426437237273265575167509029344339897414226676436809542236253127821140802800986947062568133853395508921\"\r\n        \"9964942897022997845219557138194410590488710206126414064429880089790484452595946581708176425312862950937772\"\r\n        \"3661071135395019790527607724202881835055204991346722252654024359421663848038528947367034602454714163569030\"\r\n        \"6495794030716500282374238053252043097071137946748341198817588689259043579377841357913055744505865474029489\"\r\n        \"2394251026664247805588921011835652702486666159250537845540275560898535820194650319346737963033099330972188\"\r\n        \"28404414412370072644157340655102452872302586095454302039797767065465450286865234375e-287\"},\r\n    {1e-286, chars_format::scientific, 717,\r\n        \"1.\"\r\n        \"0000000000000000504443684245122081656497429032578694485237461621994232670713991529131349758720630894636177\"\r\n        \"2174304882111007609107430767230017738401645577910316562095998536741053674134483253041668802746309338732394\"\r\n        \"1855280280307782790235573225567341553150531178795636058514204428991311987579378276353831401000914916889109\"\r\n        \"8178624088172253373817609701818023287376849313178648878526897887388416072366861343848617552393942512986630\"\r\n        \"8370309112097606848665580646594237454929293897418993287446478667234152413329771538934668392693571525245244\"\r\n        \"6703495467863156494512565650719212870846576404712937269176100676988463375410270800348902508015099603221365\"\r\n        \"618473827330784812294597235794897321730333172862259516477934084832668304443359375e-286\"},\r\n    {1e-285, chars_format::scientific, 714,\r\n        \"1.\"\r\n        \"0000000000000000737759588870926801404019815213532986889510323214921238826142576478123077502664539508246258\"\r\n        \"9919007638009995083933241373790556457205030658897420364139008363631639700799829065917353790436274093311171\"\r\n        \"9367550186935610746248386095465686323279987956931013653781663900351974015566123632070355381551356489650179\"\r\n        \"7792666450394040240449611283910136449234164770644190179225196709761817851829527261033883912345325192520710\"\r\n        \"9869921177202492101698654721267992941215818657955514958349590649614239480491315683751958511243736366217849\"\r\n        \"0150891020822283445651481361826061005534504601082856808084760769860405419582767185150634144000699821020707\"\r\n        \"486017573896452080977016299189995556136179022388432713341899216175079345703125e-285\"},\r\n    {1e-284, chars_format::scientific, 712,\r\n        \"1.\"\r\n        \"0000000000000000364454141469639249807983997324006119042673744666238028977456840559736313112354285726470128\"\r\n        \"1527483228571615124211944403293694507119614529318054280870192640606702058135275765316257810132330485985127\"\r\n        \"5347918336331086016627885503628334691072857111914409501353728746174914770787331062923917012670649973232467\"\r\n        \"8410198670839181253838408752562755390262460038699324098107918593964375004689261793537457736423112905266182\"\r\n        \"7470541873034675696845736201789984163157379041097080284904611477806100173032845052044294321563472620661682\"\r\n        \"0635058136087680323829216224055103990033819486890985545830904621265298148906772969467863526423739472541760\"\r\n        \"4979475793913844510851457977578383810868256631465555983595550060272216796875e-284\"},\r\n    {1e-283, chars_format::scientific, 709,\r\n        \"9.\"\r\n        \"9999999999999994685210677065491259774980343891416362102659561493983253406110743556080785756096766502074141\"\r\n        \"3878246459195032208808316741012258269146158183275756810250349053468517157403478438736274574028658284026209\"\r\n        \"7008018948802266655386840832186907737757430838745595355266843761499725833182288969724649273569543338299591\"\r\n        \"8922759999075196859715226773290408487303686820316455034264511160505121715526246715460349142098034158553149\"\r\n        \"7120315430319163251987317550427630958171239606368370686366614654665658351325155359459002663308396313268813\"\r\n        \"7970592127246328314557798934048071528321752128304945164216498646370406992843868518292140442390346361922877\"\r\n        \"2657959257922213934465659432066116096837760096605052240192890167236328125e-284\"},\r\n    {1e-282, chars_format::scientific, 704,\r\n        \"1.\"\r\n        \"0000000000000000185267526717021225041886804737033222476192186962870088250087687318910666205005363911217585\"\r\n        \"3499551512041192743545721857455200771078614787119958560901161093554731989656290181027731739586437554468626\"\r\n        \"2218495048040914146410045219546405907613434306306439508188319872169926333293510629733626595607910845351966\"\r\n        \"1106614136652848940265031537516012481956041767365788379171625098381602438061934369139173171980451007384009\"\r\n        \"1918839807034123822516335312440539949689328025005031641651021475338193305452779148824615510516946022794721\"\r\n        \"9267458351415070825354528957925044622593490632078887339949053669939646658982295745940133629986798505271865\"\r\n        \"94367398202895198873704795707040293706313605071045458316802978515625e-282\"},\r\n    {1e-281, chars_format::scientific, 704,\r\n        \"1.\"\r\n        \"0000000000000000185267526717021225041886804737033222476192186962870088250087687318910666205005363911217585\"\r\n        \"3499551512041192743545721857455200771078614787119958560901161093554731989656290181027731739586437554468626\"\r\n        \"2218495048040914146410045219546405907613434306306439508188319872169926333293510629733626595607910845351966\"\r\n        \"1106614136652848940265031537516012481956041767365788379171625098381602438061934369139173171980451007384009\"\r\n        \"1918839807034123822516335312440539949689328025005031641651021475338193305452779148824615510516946022794721\"\r\n        \"9267458351415070825354528957925044622593490632078887339949053669939646658982295745940133629986798505271865\"\r\n        \"94367398202895198873704795707040293706313605071045458316802978515625e-281\"},\r\n    {1e-280, chars_format::scientific, 700,\r\n        \"9.\"\r\n        \"9999999999999995736438816947517005069417207068324021959351366687075172340009775902257914279210441151555725\"\r\n        \"8308779196173510175383489009931421520586690004171251700735334129506741559146860533228960854564563482256350\"\r\n        \"7367302240104608293998170498800889934052711298312352648503909155662324666479368844441019720337612888531868\"\r\n        \"7103789266301679766012373101564633549368007345473197918690766334590720773073234271930285253494983959461901\"\r\n        \"2356967550855734248053136101277703677183805567441722726787676002477378641128208658347785021448019020754979\"\r\n        \"9327177530658970705609297562011086483971681409869254638723357560814229067067468229654822501487066703239591\"\r\n        \"9842010303184918392220732752395662146227550692856311798095703125e-281\"},\r\n    {1e-279, chars_format::scientific, 700,\r\n        \"1.\"\r\n        \"0000000000000000552241713730382939762853855155153714644346417139367630859739713156121591071255955788854793\"\r\n        \"0100755667495497779150145631332435942490582259141658595397737701917166689901252657650633132064426278214420\"\r\n        \"9107553942459186136616182121346196056138332212191562054191077246132142653280854876907341369752400579251233\"\r\n        \"6544355262666457518463308073931741958167586387056869531553154177335120654514700934306859959959022574246700\"\r\n        \"6328725638203254061142948333828201698871896505961547263034373800392466570256754118618517715540232495226256\"\r\n        \"2868302710424575078230688478959406207111284126734064465595084418254580910347625099724924457889653606240609\"\r\n        \"9908263094272136716259523347982707264236523769795894622802734375e-279\"},\r\n    {1e-278, chars_format::scientific, 697,\r\n        \"9.\"\r\n        \"9999999999999993779243152876254526557592938171681397062528805745754945088532304770466314992540617804157284\"\r\n        \"9769023700417216652159895549252833939722863486722184850086925551573756491173727324573486761348623622278779\"\r\n        \"0625654803207157679565440355868675808586589133591699069822536494530504293213532859514540924900334307735775\"\r\n        \"1435836594229100682288231574014076342906436040454098439322611246838623618658479257702622384275935602860880\"\r\n        \"2170909784620372975377866653876841014876773669006972746076463602187921228840342152780306594657157834453463\"\r\n        \"3456007615941614690269780116494491366543449438374976635277860236467913059785711676135938086005172831406290\"\r\n        \"3993886175277628638145832606909380047000013291835784912109375e-279\"},\r\n    {1e-277, chars_format::scientific, 695,\r\n        \"9.\"\r\n        \"9999999999999996910756215390274492176511768406309596897444903251867308690896258581332873851212335159994790\"\r\n        \"3432632493627286289317645086338574069104985914640691811124379276266532599930740458422245310494127398242893\"\r\n        \"7412290702243078662657808584560218409332384597144744795712732752341416890438870435396906997599980037009524\"\r\n        \"8504560869545227216246858018094967873244950128484657606311659387241979065722087280466882975026412973422513\"\r\n        \"8468602210596951011658297769718221274568024706502572715214403442651053088500928561688272077522535732535889\"\r\n        \"8849879479489384314813008029321043554428620592765821440790655955422018671436522161766153150776203026339572\"\r\n        \"93508847799292922446656728396874314057640731334686279296875e-278\"},\r\n    {1e-276, chars_format::scientific, 681,\r\n        \"1.\"\r\n        \"0000000000000000943680846544635435465218708934482239623710929327631676310035207382479910928589920458334481\"\r\n        \"1808706766646756483794864323468153458663347562631471965527419417503763703495879299381727950707614250209935\"\r\n        \"2455883429838676259502728149932638881231556645135692769927351778358506727934022073892637128839856295410452\"\r\n        \"3677945797080973335208136379441853399459900648060689427426785194885540085397651937152392533802832245566904\"\r\n        \"8365937191450326315678002223308374231333302885648497259176616280450358052714327419732013400898404732486559\"\r\n        \"6042536693368046281298591968062725230596930521032920066284183883123844111803976410428701340986032380607270\"\r\n        \"307788791985359466707450337707996368408203125e-276\"},\r\n    {1e-275, chars_format::scientific, 690,\r\n        \"9.\"\r\n        \"9999999999999993403461585374572130683322678543526013082338874045021461456248630313162327929500011721456784\"\r\n        \"3329390645232008295700965604802545124197008795371964014762431104610623358122885748511635735451163169163085\"\r\n        \"3011258495322847161594356168425690696497093677965333582715712943593194781546492350408656996176376820222925\"\r\n        \"1787589681191165498213196400724369359265814349890431339283925469990220965010846294970911113385878318393484\"\r\n        \"1815186693503183611024214919975875383713823544507500749779910821332345405681071783711350736713312486683572\"\r\n        \"1608742992315882335324592766955305103997228899848075258616324750193420386387614417860312278232649208014296\"\r\n        \"495104634271942900536345177897601388394832611083984375e-276\"},\r\n    {1e-274, chars_format::scientific, 688,\r\n        \"9.\"\r\n        \"9999999999999996610130961388928575477095560703785289713292957891280521785069319015489684200779850293834389\"\r\n        \"8280926049479119604150501130778343016684302161560515142864783718696026093490067197572764489776159035750338\"\r\n        \"7320773655935630248280941234605830319660788232643652406027273911591569281105238028112199854620814046999244\"\r\n        \"8785963339114879068986829879463202286332452776033723926280710765763256942803980910281513958314367145848597\"\r\n        \"0184023737703199520175376382597448769637664606902995118177161217966592429973512266433107391167459454319976\"\r\n        \"9372067780588798430856858149689694544391644161944300339461427566402424532718044355145652504558184127625977\"\r\n        \"8116612913882732538439768177340738475322723388671875e-275\"},\r\n    {1e-273, chars_format::scientific, 681,\r\n        \"1.\"\r\n        \"0000000000000000943680846544635435465218708934482239623710929327631676310035207382479910928589920458334481\"\r\n        \"1808706766646756483794864323468153458663347562631471965527419417503763703495879299381727950707614250209935\"\r\n        \"2455883429838676259502728149932638881231556645135692769927351778358506727934022073892637128839856295410452\"\r\n        \"3677945797080973335208136379441853399459900648060689427426785194885540085397651937152392533802832245566904\"\r\n        \"8365937191450326315678002223308374231333302885648497259176616280450358052714327419732013400898404732486559\"\r\n        \"6042536693368046281298591968062725230596930521032920066284183883123844111803976410428701340986032380607270\"\r\n        \"307788791985359466707450337707996368408203125e-273\"},\r\n    {1e-272, chars_format::scientific, 683,\r\n        \"9.\"\r\n        \"9999999999999993018661260252849357308069932684294899886624383983470374216790147668883045176946431092771471\"\r\n        \"6735206396722354938687021341685449377098533591429337879390148790920375029878823974624300284932163665172614\"\r\n        \"8894116676049313191191965960484073941717450331403935323918325627433389841599442869084231853163044353009766\"\r\n        \"8147784842240319869720360383275709408017817738753236228844311234497456647675670141133638771994459659098870\"\r\n        \"6410926248199181701926075544461286577402962617020041425572240773736235762765978925784739938178814850567203\"\r\n        \"5877144017723132403860720921027178371149899068396528248914912412248339888827962825386071451073585017660894\"\r\n        \"73711783541798325813942938111722469329833984375e-273\"},\r\n    {1e-271, chars_format::scientific, 681,\r\n        \"9.\"\r\n        \"9999999999999996302290701291550356776893364016400399156721365842039651993502532900066257998736985790886139\"\r\n        \"7005578650671396918539345720284666419005521998406414234566957867743827430894817778462896129360959432557962\"\r\n        \"4027060200516803071959029068252536915837073555394533798989364058663725329147598443052659740210148073228718\"\r\n        \"1874119467954202566192561065504274325334055487123967837929019377369045488935839987211696085201232218412906\"\r\n        \"1860615381459997992896864882185777724588975864913027658811025179889704715641437980091818752339861345426882\"\r\n        \"0786788600914598485685760672947193158113780296783062731700297696046360134670323081166259842830932775343256\"\r\n        \"405271852305105539926444180309772491455078125e-272\"},\r\n    {1e-270, chars_format::scientific, 678,\r\n        \"1.\"\r\n        \"0000000000000000418300135978443275550206959921345359740495412230260591865761225745490596877103431706636134\"\r\n        \"2965447206014909767018492422892278731958229417515139748699129965212011319333320290767552615599006927428279\"\r\n        \"6434612465923877878579998052689684805372416929297197013915985629361653049926317182057688666912319700175420\"\r\n        \"1481732256966752103772584270285283012689302608321372369973231892026085870796024761779903363689748636076659\"\r\n        \"1493986930128595709122675929272455647783540765985619461858410775465803020254253971042880790632637293309011\"\r\n        \"0456993560057411708206585607755522864682709524491074549038522237716160872469198769503871198304856739378092\"\r\n        \"440884149283419901621527969837188720703125e-270\"},\r\n    {1e-269, chars_format::scientific, 674,\r\n        \"9.\"\r\n        \"9999999999999995776909990725358196861881615003263519273505848744668567549228551263076943947250497039187792\"\r\n        \"8162319090039550201762973819708791692300403853290082017738668415452075046732258769848720794252352109776306\"\r\n        \"8005789236602004691036298971009582839977933839556038042977997909666871651139893551217711278282611477993685\"\r\n        \"9677905927839981334757008956347703938563457447384650780475466074509591274334212811839206915088148608922660\"\r\n        \"4988665120138267386341538588149859141039213745250149861492819674905149683181364531402686142074093906249333\"\r\n        \"5201245467603963912593754312639990792199559300241217214454636050638676895335545440241429700149757134114078\"\r\n        \"53836720960316597484052181243896484375e-270\"},\r\n    {1e-268, chars_format::scientific, 674,\r\n        \"9.\"\r\n        \"9999999999999995776909990725358196861881615003263519273505848744668567549228551263076943947250497039187792\"\r\n        \"8162319090039550201762973819708791692300403853290082017738668415452075046732258769848720794252352109776306\"\r\n        \"8005789236602004691036298971009582839977933839556038042977997909666871651139893551217711278282611477993685\"\r\n        \"9677905927839981334757008956347703938563457447384650780475466074509591274334212811839206915088148608922660\"\r\n        \"4988665120138267386341538588149859141039213745250149861492819674905149683181364531402686142074093906249333\"\r\n        \"5201245467603963912593754312639990792199559300241217214454636050638676895335545440241429700149757134114078\"\r\n        \"53836720960316597484052181243896484375e-269\"},\r\n    {1e-267, chars_format::scientific, 667,\r\n        \"9.\"\r\n        \"9999999999999998466859228824262055626741769950524344275569296283208519903911337244462231890861319447883328\"\r\n        \"8639808040474605391657997950657270293030608756285702967899510411185847253644560893953298510008421602418383\"\r\n        \"4834696571845772401360677068893507708376729184649136313756192592530762482539342597412647403351598845597050\"\r\n        \"9322519253224794039707035755229344318828919410849954114637658985149996853094543949746351466067136689512718\"\r\n        \"4173050458105528091904809213613762288813995797924084183762031860426071449376940588691045106634823194838382\"\r\n        \"1399226310154412926824826877412866905680370802535466262752423675126015080729606961776560030677376417207469\"\r\n        \"2169189802370965480804443359375e-268\"},\r\n    {1e-266, chars_format::scientific, 667,\r\n        \"9.\"\r\n        \"9999999999999998466859228824262055626741769950524344275569296283208519903911337244462231890861319447883328\"\r\n        \"8639808040474605391657997950657270293030608756285702967899510411185847253644560893953298510008421602418383\"\r\n        \"4834696571845772401360677068893507708376729184649136313756192592530762482539342597412647403351598845597050\"\r\n        \"9322519253224794039707035755229344318828919410849954114637658985149996853094543949746351466067136689512718\"\r\n        \"4173050458105528091904809213613762288813995797924084183762031860426071449376940588691045106634823194838382\"\r\n        \"1399226310154412926824826877412866905680370802535466262752423675126015080729606961776560030677376417207469\"\r\n        \"2169189802370965480804443359375e-267\"},\r\n    {1e-265, chars_format::scientific, 667,\r\n        \"9.\"\r\n        \"9999999999999998466859228824262055626741769950524344275569296283208519903911337244462231890861319447883328\"\r\n        \"8639808040474605391657997950657270293030608756285702967899510411185847253644560893953298510008421602418383\"\r\n        \"4834696571845772401360677068893507708376729184649136313756192592530762482539342597412647403351598845597050\"\r\n        \"9322519253224794039707035755229344318828919410849954114637658985149996853094543949746351466067136689512718\"\r\n        \"4173050458105528091904809213613762288813995797924084183762031860426071449376940588691045106634823194838382\"\r\n        \"1399226310154412926824826877412866905680370802535466262752423675126015080729606961776560030677376417207469\"\r\n        \"2169189802370965480804443359375e-266\"},\r\n    {1e-264, chars_format::scientific, 661,\r\n        \"1.\"\r\n        \"0000000000000000122136724863753960700195856861651942907768226656267343111510651008940076674511880159438755\"\r\n        \"7776875672572010190611050266074851238017833857695321882086421261481722999352275826903638609094263676288387\"\r\n        \"0006749768313539053673284024112664677361709561802446894303306394778338669389237842071626199542224191002289\"\r\n        \"6655860329841884224957586319728414406822075246143842472881974452564577216574512303496326748626962048403693\"\r\n        \"7725786104418400305440159833408879911213537261986219292976570513839949533796121047135432468634500998635356\"\r\n        \"7926595869292607271739744518374029204588472178088477728820935820260104938257312595982853348913765856309510\"\r\n        \"1271755993366241455078125e-264\"},\r\n    {1e-263, chars_format::scientific, 661,\r\n        \"1.\"\r\n        \"0000000000000000122136724863753960700195856861651942907768226656267343111510651008940076674511880159438755\"\r\n        \"7776875672572010190611050266074851238017833857695321882086421261481722999352275826903638609094263676288387\"\r\n        \"0006749768313539053673284024112664677361709561802446894303306394778338669389237842071626199542224191002289\"\r\n        \"6655860329841884224957586319728414406822075246143842472881974452564577216574512303496326748626962048403693\"\r\n        \"7725786104418400305440159833408879911213537261986219292976570513839949533796121047135432468634500998635356\"\r\n        \"7926595869292607271739744518374029204588472178088477728820935820260104938257312595982853348913765856309510\"\r\n        \"1271755993366241455078125e-263\"},\r\n    {1e-262, chars_format::scientific, 661,\r\n        \"1.\"\r\n        \"0000000000000000122136724863753960700195856861651942907768226656267343111510651008940076674511880159438755\"\r\n        \"7776875672572010190611050266074851238017833857695321882086421261481722999352275826903638609094263676288387\"\r\n        \"0006749768313539053673284024112664677361709561802446894303306394778338669389237842071626199542224191002289\"\r\n        \"6655860329841884224957586319728414406822075246143842472881974452564577216574512303496326748626962048403693\"\r\n        \"7725786104418400305440159833408879911213537261986219292976570513839949533796121047135432468634500998635356\"\r\n        \"7926595869292607271739744518374029204588472178088477728820935820260104938257312595982853348913765856309510\"\r\n        \"1271755993366241455078125e-262\"},\r\n    {1e-261, chars_format::scientific, 658,\r\n        \"9.\"\r\n        \"9999999999999998400751036348743394393736566782540462240318584996501362034842653096183707054359139876367227\"\r\n        \"3700713272028713475311137837615080482939063240589682587428357558298694067887484156951304408066000438567211\"\r\n        \"8069109345174821566111745152759912370810960390248128330653547680004699501466869737653360653141903412050830\"\r\n        \"6348853236140136882670183896620029124843515417635830819897288932178098245590930051701145481582277078444137\"\r\n        \"1539015004039644692804886274722361405054282754197569573857943701754709276050918111507126396721778711842017\"\r\n        \"6810424732967893091851084038061008702315466379055082798141457246466614257485362505823312667674329645706166\"\r\n        \"0476028919219970703125e-262\"},\r\n    {1e-260, chars_format::scientific, 655,\r\n        \"9.\"\r\n        \"9999999999999996144258066517706424307158965315357288770427639743563706770631567501610059301751410501950963\"\r\n        \"0446278509075602730671645979108334965147642971498853600679673513083865327379264867283239061764691379113885\"\r\n        \"2470398674806366389614869082066524848566052208027055840749934665781749747526462791203039579317632613673177\"\r\n        \"8181053186317172589145640456088737170141725782593755692759324457403959109467575665091447877832402353969896\"\r\n        \"6963938171924158003527516627229211239389410861665870889131734552438880426522684223629367765023193692232777\"\r\n        \"4845997565001349391413995121517582027460062057591327206087136481559066157415151742619136010503666511795017\"\r\n        \"8682804107666015625e-261\"},\r\n    {1e-259, chars_format::scientific, 650,\r\n        \"1.\"\r\n        \"0000000000000000697542432170668388072273145235783652142590417695766445203884477835556356851426851149914903\"\r\n        \"1806756537125053430494120689994071345054646026313483273707335693011504328181871745768995272401097486448985\"\r\n        \"2734420989257495123679987422139478495534161148268820379228727713405190856644041613416458073367413244588591\"\r\n        \"1338649342546740119806344897063893855271031603079571630302155393631982696285967672081799637583180103144625\"\r\n        \"0892430696607849411205889093519633203458079594581802457581753846915485890425820688544260919717640178635713\"\r\n        \"0427524797124075915351202192092603006676600280061735404794787615311529703775216340599918396492284955456852\"\r\n        \"91290283203125e-259\"},\r\n    {1e-258, chars_format::scientific, 651,\r\n        \"9.\"\r\n        \"9999999999999995422180316171774593879454132845858673260062537262623657086084020111346492020916937102137758\"\r\n        \"4604859384930607292387008584386176399454388485389788324920094618615120130416634694589458150948272480088820\"\r\n        \"7478811260288460733135868739444640841447681589716312643980778501230405826265532568338936835693865958192328\"\r\n        \"9167357170373824015217786555118723744637153099380291652075175825476234585908102261376344644632442442138139\"\r\n        \"7499913585647202262958758340031403186376651856055727310019347624657815194673649379508485002879646485957820\"\r\n        \"6217380871252055407274126668223685491506332674722925416629753836788650765392684298393799480209054308943450\"\r\n        \"450897216796875e-259\"},\r\n    {1e-257, chars_format::scientific, 646,\r\n        \"9.\"\r\n        \"9999999999999997732829117278756451248109596748254242893230865201631816076636171760189907319587251981540013\"\r\n        \"1297400582194592694897848247497083809672802840938797207350747080915104760697051247209557065560812956969027\"\r\n        \"1451890986745758833868669835834669664226467568310690873642078227794706374300509281504065615289919255731045\"\r\n        \"4011184421392539451786919038222766706251785685663376582264451447644953061298417153264674990872314159999761\"\r\n        \"9784792261733460632778784859064388956017480674008186763178985793557223936590560880695309841738997546037682\"\r\n        \"5828954291249796156521705718764154406558266699901811142893378300053980019864580119914876377151813358068466\"\r\n        \"1865234375e-258\"},\r\n    {1e-256, chars_format::scientific, 646,\r\n        \"9.\"\r\n        \"9999999999999997732829117278756451248109596748254242893230865201631816076636171760189907319587251981540013\"\r\n        \"1297400582194592694897848247497083809672802840938797207350747080915104760697051247209557065560812956969027\"\r\n        \"1451890986745758833868669835834669664226467568310690873642078227794706374300509281504065615289919255731045\"\r\n        \"4011184421392539451786919038222766706251785685663376582264451447644953061298417153264674990872314159999761\"\r\n        \"9784792261733460632778784859064388956017480674008186763178985793557223936590560880695309841738997546037682\"\r\n        \"5828954291249796156521705718764154406558266699901811142893378300053980019864580119914876377151813358068466\"\r\n        \"1865234375e-257\"},\r\n    {1e-255, chars_format::scientific, 643,\r\n        \"1.\"\r\n        \"0000000000000000069045958269569322867998859054332057202368632496356225958454292587070947890188525502717489\"\r\n        \"9106385331469249401011172301627904529475237321604152857686198223265908508745598443456328367626486476737569\"\r\n        \"1333743303661110040280665523921390655738331362091149500760854187779701107578527947435543045317286747658060\"\r\n        \"2501128330269649521059540861659594169711851539610572529290672424402091270979802021488173783405934995886263\"\r\n        \"8430943696712387134614841880342661074115774156098733486322332264974846712624420760221444563547896690293990\"\r\n        \"5893176826884690431555860690345595461782474225213078487251081761303360146558860677146185480523854494094848\"\r\n        \"6328125e-255\"},\r\n    {1e-254, chars_format::scientific, 639,\r\n        \"9.\"\r\n        \"9999999999999991226042093361495540897975810399108318806228853725384840359241312717046849838531645281143263\"\r\n        \"9811204570699209801427323756176768542497748015712788194426029747078348041827398235031358522011898974074365\"\r\n        \"9303698477042007382205101948400348499281406252588921778915858197789636031034014857231062971947433169862019\"\r\n        \"7810966882523836782408241965801781726344980322690209418851451295617841834599290417707136735860835402501433\"\r\n        \"7830573909874557063365590181467501028708906722654060943081444709936488919352538093353211095511064960852791\"\r\n        \"3002763540536158206640523112442193941772020484998068937735011811498812839271721486511523835361003875732421\"\r\n        \"875e-255\"},\r\n    {1e-253, chars_format::scientific, 637,\r\n        \"1.\"\r\n        \"0000000000000000636911007629621184134919625862984792395416080770646871111972389376290705633989742087479388\"\r\n        \"0181544256108846453532236257234041134610514833623877280632355372400752731483313615428243876881664424335648\"\r\n        \"6575767377235255621516758721370204139224445804190503894482415208580143610263603824463005094190812806061175\"\r\n        \"2133147315480009026750770860707243767958263644015503481733988801306275523491725809318649849297845869267936\"\r\n        \"1219675480147345991581811597660207656862704246398729921530844941363565405037920930753118635945970806819217\"\r\n        \"4648917110583335198090945717806421102345637531241041443337630109395447464137873794243205338716506958007812\"\r\n        \"5e-253\"},\r\n    {1e-252, chars_format::scientific, 637,\r\n        \"9.\"\r\n        \"9999999999999994254655689948438800988219900045256239835815244521601614511337828926218891138804800399873387\"\r\n        \"2212052168777060748206331519409497103219228079817985116805534542464183896428545818881574571372848027930790\"\r\n        \"0594493536104117148797599001460687077874016610452145212097516975391996045354419534710860565939572148011966\"\r\n        \"2515068136979087479428135294055912916992511546183174498549138639106824514662883952803009087284360060537019\"\r\n        \"2703810088194337633856095340494416136692533870920708597526845650676321945557872336188806148300793582320667\"\r\n        \"9700045053595596961494309925566597358108891450480538036863269667989945199693124777695629745721817016601562\"\r\n        \"5e-253\"},\r\n    {1e-251, chars_format::scientific, 635,\r\n        \"1.\"\r\n        \"0000000000000000152332832175710262520480571519601125030682258243252187247636946782823179025946037268482568\"\r\n        \"2997408640416390302047595015116804564895078023367045773051634605139018994747130002012209308983912575718620\"\r\n        \"7969240167785318058861959192880549966649628146932388145173349804163766007972339076066237479152070569557183\"\r\n        \"7780491114767168915227587928186582777454658648256629068982358826348038294681550843703310273070081923982242\"\r\n        \"4439957691616181100303330772215901239585323902676066296819580790845192120845067451899423427499614227384357\"\r\n        \"197735206849382499731433982770651655573173817676384638747710885235686628647044926765374839305877685546875e\"\r\n        \"-251\"},\r\n    {1e-250, chars_format::scientific, 631,\r\n        \"1.\"\r\n        \"0000000000000000539995372538838999812031814994308058922469316265167934339105300857597200312381001123680024\"\r\n        \"0744717132970355223235308008810593820667427471572510979116211218948405984136076892745036963302114054612243\"\r\n        \"0854461935345268108985798815672273304709482272738880744620602127696868089805350874783651571183064358760376\"\r\n        \"9262616075337441004446134274203111569857542644863728599183662806314628077729690816195581934052293080210797\"\r\n        \"3863731922441113013326115432571346373407228177654197196588592111259890748199350234982379594256699490932245\"\r\n        \"41146041021654331579356245397864401930228576603456024321655258579877312286043888889253139495849609375e-\"\r\n        \"250\"},\r\n    {1e-249, chars_format::scientific, 631,\r\n        \"1.\"\r\n        \"0000000000000000539995372538838999812031814994308058922469316265167934339105300857597200312381001123680024\"\r\n        \"0744717132970355223235308008810593820667427471572510979116211218948405984136076892745036963302114054612243\"\r\n        \"0854461935345268108985798815672273304709482272738880744620602127696868089805350874783651571183064358760376\"\r\n        \"9262616075337441004446134274203111569857542644863728599183662806314628077729690816195581934052293080210797\"\r\n        \"3863731922441113013326115432571346373407228177654197196588592111259890748199350234982379594256699490932245\"\r\n        \"41146041021654331579356245397864401930228576603456024321655258579877312286043888889253139495849609375e-\"\r\n        \"249\"},\r\n    {1e-248, chars_format::scientific, 627,\r\n        \"9.\"\r\n        \"9999999999999997956832950416318242122534275228707458502381648630896999234860610340310794424258705217009089\"\r\n        \"8698848272667425745548990609185184495845165310180177834722241204343829645092988625380078670111672151364882\"\r\n        \"9148361416301640127480267399121644956345623511904149536818776665133120926859682212462165144835562834902460\"\r\n        \"8169361510425185931465252898513762884440053713780975011971591647787756942772620690104203449664476602519718\"\r\n        \"9700853992572437403223688846888917164691719696961858690320903760636693836791272914631037540830957849203000\"\r\n        \"4110801975159454895427578925929868094239082518686308263637652071764705397072248160839080810546875e-249\"},\r\n    {1e-247, chars_format::scientific, 625,\r\n        \"1.\"\r\n        \"0000000000000000192649736373475651198801900840970646155428112277531424945149655606599677239735273509423103\"\r\n        \"7003128723642002653851117166460958647495402365980414154482350572975195241643580478648423385033005529523557\"\r\n        \"5149303231611552864074838513650889193807852976016263375515864045811208624482972303132848544723293923634315\"\r\n        \"8654632110666477212506316748172301771864558583903767420123294440264563632118557400842506525812231884230012\"\r\n        \"1580030211621974019257700376892867533502801947273791910395557968168320778089912861340050868842351094793337\"\r\n        \"57196262799956722460189534377628286140100146030563490161247042209424762404523789882659912109375e-247\"},\r\n    {1e-246, chars_format::scientific, 623,\r\n        \"9.\"\r\n        \"9999999999999995575034302425255280203243435320108056671241964144246649104879042904899207640402287290675921\"\r\n        \"5899384894415865269771681975930543308379850300405799608661482489098955982287298928717585561980642265042467\"\r\n        \"5741558876413307019519396756689296767305879762949059005814858389345741736077657721142372963397136994038042\"\r\n        \"1143185752681434215306504148588209983916734438626955498414779994873029315724848699111686364589771258651477\"\r\n        \"4041185118384055729611699893665062262489939831496222442140098208008785470326559495369354852275425989964775\"\r\n        \"225952548028109435657040565491081726672244441155999912507201798916867119260132312774658203125e-247\"},\r\n    {1e-245, chars_format::scientific, 617,\r\n        \"9.\"\r\n        \"9999999999999993034449077901454787489333206084268694718026300691819608966232037640460181737622108169253875\"\r\n        \"4246623957614200762275886100458926041750180956646462834196673192837757408627896585610926246640877052965224\"\r\n        \"5440969500532418371027801404761458698996819764063629106077345561839203932576831597067927969862816097115995\"\r\n        \"4981931611088099051403838815334286890025193878462668017287514231763986513540558575386334807176752225192019\"\r\n        \"7337538319249781944425578343559617033474707974999543777413905618539016546097531848156893317816192006777335\"\r\n        \"028483055241084311512275416582382971737136376395860271060200830106623470783233642578125e-246\"},\r\n    {1e-244, chars_format::scientific, 617,\r\n        \"9.\"\r\n        \"9999999999999993034449077901454787489333206084268694718026300691819608966232037640460181737622108169253875\"\r\n        \"4246623957614200762275886100458926041750180956646462834196673192837757408627896585610926246640877052965224\"\r\n        \"5440969500532418371027801404761458698996819764063629106077345561839203932576831597067927969862816097115995\"\r\n        \"4981931611088099051403838815334286890025193878462668017287514231763986513540558575386334807176752225192019\"\r\n        \"7337538319249781944425578343559617033474707974999543777413905618539016546097531848156893317816192006777335\"\r\n        \"028483055241084311512275416582382971737136376395860271060200830106623470783233642578125e-245\"},\r\n    {1e-243, chars_format::scientific, 616,\r\n        \"9.\"\r\n        \"9999999999999999538347252682384048836943392928017461318258399130032831721168371117424088048739366720094313\"\r\n        \"6077691955826461901465123541666266244322134476670364976826584991266425757195966583963974093910675995882966\"\r\n        \"7010478302787493311166285505696724153868013361210329649405378400255940709538946474698507153310677593236434\"\r\n        \"8354742213567037070994662068464330010387537712483243968973314585323136087132341292123234794154080950848231\"\r\n        \"3698874125033522834502049511829556819753701527631041159112958647581624992123842625020794846031831003737181\"\r\n        \"93400495677586862932287419778865178437101302218181775316452331026084721088409423828125e-244\"},\r\n    {1e-242, chars_format::scientific, 607,\r\n        \"9.\"\r\n        \"9999999999999996936787982770012344297899318190517954678165559754747542619193837726638525524292463299758138\"\r\n        \"3345264756541557445789428565183330163293353068660804119774620271894958417768738584622754955002756418715869\"\r\n        \"8382674781885463335110891865322617971919535922351649432074165264889245998754100523646275479931532994788259\"\r\n        \"1005617972575461863158332767212312762242600178875013588298994443899476257695628205428474799363149460585746\"\r\n        \"7154339802720026478471461044521580905242104106578442206433337435964581613713318314275234234745575404953243\"\r\n        \"17179619616195490219863468530614425931746236386743476032279431819915771484375e-243\"},\r\n    {1e-241, chars_format::scientific, 607,\r\n        \"9.\"\r\n        \"9999999999999996936787982770012344297899318190517954678165559754747542619193837726638525524292463299758138\"\r\n        \"3345264756541557445789428565183330163293353068660804119774620271894958417768738584622754955002756418715869\"\r\n        \"8382674781885463335110891865322617971919535922351649432074165264889245998754100523646275479931532994788259\"\r\n        \"1005617972575461863158332767212312762242600178875013588298994443899476257695628205428474799363149460585746\"\r\n        \"7154339802720026478471461044521580905242104106578442206433337435964581613713318314275234234745575404953243\"\r\n        \"17179619616195490219863468530614425931746236386743476032279431819915771484375e-242\"},\r\n    {1e-240, chars_format::scientific, 607,\r\n        \"9.\"\r\n        \"9999999999999996936787982770012344297899318190517954678165559754747542619193837726638525524292463299758138\"\r\n        \"3345264756541557445789428565183330163293353068660804119774620271894958417768738584622754955002756418715869\"\r\n        \"8382674781885463335110891865322617971919535922351649432074165264889245998754100523646275479931532994788259\"\r\n        \"1005617972575461863158332767212312762242600178875013588298994443899476257695628205428474799363149460585746\"\r\n        \"7154339802720026478471461044521580905242104106578442206433337435964581613713318314275234234745575404953243\"\r\n        \"17179619616195490219863468530614425931746236386743476032279431819915771484375e-241\"},\r\n    {1e-239, chars_format::scientific, 606,\r\n        \"1.\"\r\n        \"0000000000000000759277475233108684608982384831531593387598582983591608678088152649529618962442697970945511\"\r\n        \"2253728656481252609623707518885743635118724171586796539025946776244048864006266446992438854796959500679229\"\r\n        \"8588215800350017811703378421629495689318049951191680360226281426735122753412882953915621641409250927003198\"\r\n        \"6910763086367695391445593758514057541064426431653432522754100974317078691906840500853021173802680484470088\"\r\n        \"3860075238691610755277275140661505025108160714320988751660906591874799129168282589108905049857407833757225\"\r\n        \"6341803279636545528499519728434495081936805860323147499002516269683837890625e-239\"},\r\n    {1e-238, chars_format::scientific, 601,\r\n        \"9.\"\r\n        \"9999999999999999067985336682227244656284224215477550517729613770981251451531375480370058344319366581697533\"\r\n        \"1183669118195751175878957889918151400872130798102236373871589770004064462227523761683081673596124136331155\"\r\n        \"5882571426208406291495470335517085756171728640264680266111895065381642305829046326748263666763728249837004\"\r\n        \"6626020550795760273417853730797965291922933006406875916147397503753738389970183566048822187095880537408774\"\r\n        \"1443622319559242693331719116940274774410004713904731268468483132521263549307219829637997487511275991477045\"\r\n        \"80579761285687302745881169393181442384133106315857730805873870849609375e-239\"},\r\n    {1e-237, chars_format::scientific, 601,\r\n        \"9.\"\r\n        \"9999999999999999067985336682227244656284224215477550517729613770981251451531375480370058344319366581697533\"\r\n        \"1183669118195751175878957889918151400872130798102236373871589770004064462227523761683081673596124136331155\"\r\n        \"5882571426208406291495470335517085756171728640264680266111895065381642305829046326748263666763728249837004\"\r\n        \"6626020550795760273417853730797965291922933006406875916147397503753738389970183566048822187095880537408774\"\r\n        \"1443622319559242693331719116940274774410004713904731268468483132521263549307219829637997487511275991477045\"\r\n        \"80579761285687302745881169393181442384133106315857730805873870849609375e-238\"},\r\n    {1e-236, chars_format::scientific, 599,\r\n        \"1.\"\r\n        \"0000000000000000452385056269749738957374958363937411586701359205253954606231547212992278236358823898346238\"\r\n        \"3764998428403048712490815296123929376907380178547230294435983168516337593604201381495751807319514549342628\"\r\n        \"7108230683567514025983999121921492328385734199812203920124848335464217685194090758268935342505414810276179\"\r\n        \"3301425115103972420368222739757723576790458504488844347543930933698064944859304528923691149969167209407572\"\r\n        \"4362418556266763620337397978233213107947983026866003126727845611570636930442760770896667141459146949297798\"\r\n        \"054884123959586342812486483601353004502243493334390223026275634765625e-236\"},\r\n    {1e-235, chars_format::scientific, 593,\r\n        \"9.\"\r\n        \"9999999999999995794466201073065157705805008561139611308159226802046274685060917490638423932758043140638622\"\r\n        \"7303880018694909606461440847125465979951128205680196431578644620908477577938829729718419833836711322074076\"\r\n        \"6762730180528365910488757805298383239560360625550264905029942091825321578161929573183609811789476338082131\"\r\n        \"4793082190649381915259229530730403006333941783317935380572250403817591754796466532135968599538405603408604\"\r\n        \"0135284373694206587306362717705160991368109381051551269182499342610200096234987102040793131263159890576484\"\r\n        \"959971436813478787059179808682785051132668741047382354736328125e-236\"},\r\n    {1e-234, chars_format::scientific, 593,\r\n        \"9.\"\r\n        \"9999999999999995794466201073065157705805008561139611308159226802046274685060917490638423932758043140638622\"\r\n        \"7303880018694909606461440847125465979951128205680196431578644620908477577938829729718419833836711322074076\"\r\n        \"6762730180528365910488757805298383239560360625550264905029942091825321578161929573183609811789476338082131\"\r\n        \"4793082190649381915259229530730403006333941783317935380572250403817591754796466532135968599538405603408604\"\r\n        \"0135284373694206587306362717705160991368109381051551269182499342610200096234987102040793131263159890576484\"\r\n        \"959971436813478787059179808682785051132668741047382354736328125e-235\"},\r\n    {1e-233, chars_format::scientific, 593,\r\n        \"9.\"\r\n        \"9999999999999995794466201073065157705805008561139611308159226802046274685060917490638423932758043140638622\"\r\n        \"7303880018694909606461440847125465979951128205680196431578644620908477577938829729718419833836711322074076\"\r\n        \"6762730180528365910488757805298383239560360625550264905029942091825321578161929573183609811789476338082131\"\r\n        \"4793082190649381915259229530730403006333941783317935380572250403817591754796466532135968599538405603408604\"\r\n        \"0135284373694206587306362717705160991368109381051551269182499342610200096234987102040793131263159890576484\"\r\n        \"959971436813478787059179808682785051132668741047382354736328125e-234\"},\r\n    {1e-232, chars_format::scientific, 591,\r\n        \"1.\"\r\n        \"0000000000000000249863339080062911178038644222122371080935937931442510710279241545360881120763563354792727\"\r\n        \"1204968809447263314062851575076488572199734151496053423339459628625623951696207510718204728166398876567257\"\r\n        \"4288016505168108861079050506718628599358044231968538756452578178166866642842418468448402090677674425335611\"\r\n        \"1758693995222916479276809189246877056722019580820408559743015166448682006363223901758949274685611426824095\"\r\n        \"2441476048682580053244629262333867401903791102273486390772019414434805804812691972815986765285930166522083\"\r\n        \"3572223445350350191397625909672797206440009176731109619140625e-232\"},\r\n    {1e-231, chars_format::scientific, 587,\r\n        \"9.\"\r\n        \"9999999999999998923077556279261669607276344269178857742052631307823063146668949873357937994367585330706658\"\r\n        \"6851923787391180589072742468823861859572694416677687405759422064737433149483010905868112642822774129086708\"\r\n        \"8950866453732969837296239860846071191436398749479988812794667280418882508284315291790468322783534698543322\"\r\n        \"2763549146053280591430031966208307868080860328264805481772604325463231632253160358680946534953336313663699\"\r\n        \"9465706559822283761704996673667467070947350147170430500500090250087867140451222327563027908008026052077180\"\r\n        \"979022374130685442417121322478124056942760944366455078125e-232\"},\r\n    {1e-230, chars_format::scientific, 587,\r\n        \"1.\"\r\n        \"0000000000000000464396689151344957708425250099245062264974342811838633347646649480175933513559646247825963\"\r\n        \"8716834667872150467156197971992950003945212977393024232997570081916752333744951362797040806496871754762409\"\r\n        \"3523774421044995987488706419099041487486686846180862681556445048241853678050810632010015245717266998624378\"\r\n        \"5448097443593469531357092784822504818670379709616765366682468006790097312245968621293462047399778104098730\"\r\n        \"3938419284302791059489107019314139818789224754807352395205225648090417259273233816851797149977006703310702\"\r\n        \"512814408808214904078592866198960109613835811614990234375e-230\"},\r\n    {1e-229, chars_format::scientific, 584,\r\n        \"1.\"\r\n        \"0000000000000000693232262560712474007504296368175932861281974684261164160838551277311989399208801333728083\"\r\n        \"0729491583525363430455767462037175531140390391683126429966221232093955941263611471681132623382709491503904\"\r\n        \"7375249531313675588992339392304815234823905634674008201667236376321839848939762273142402611092832410132397\"\r\n        \"0716794455188726120242728620103174431415297180332879294084551036487606971854229655463609004961555893191674\"\r\n        \"5535158735631016132816549960093097063467020650843476133267312297323069477364478450489994893647488342551896\"\r\n        \"278779277366273448013345159779419191181659698486328125e-229\"},\r\n    {1e-228, chars_format::scientific, 582,\r\n        \"1.\"\r\n        \"0000000000000000327095345105724447928977822337886539907189763688385114859731508401894299982170153196284692\"\r\n        \"3509240518480222689176456277966414687628106528818962914816379391810430169233755297466585716365369112717512\"\r\n        \"1212889354883788226586526635175577239084355573084975369489970251393861975517439647330582826491927751719567\"\r\n        \"4286879236636315578025711283654103051023429227187097010241218188971591516481012000791373872862711430642963\"\r\n        \"8980375613505856015492641254846765471982547217185678152367973658550825928418487036668878503774717719765986\"\r\n        \"2532354876733797777177414900506846606731414794921875e-228\"},\r\n    {1e-227, chars_format::scientific, 579,\r\n        \"9.\"\r\n        \"9999999999999994483667432137531853405142846651919968173684572982825965370746055008918453812773976664205546\"\r\n        \"1806379623718849101061094361965886631986252579449704784567589751299683163621004793516731395237522036301698\"\r\n        \"4232249314520585568125760180654060493094354252712965722645315515667150793038653453822153434497565715287762\"\r\n        \"8550827121105302767048696761763317380829461396372195290172193549331544235852896295780095558254847205260583\"\r\n        \"2488961204054717339152603622555696524198109764069629982095609254974414109481076434981991680800682250798021\"\r\n        \"9193039241043496900829268270172178745269775390625e-228\"},\r\n    {1e-226, chars_format::scientific, 576,\r\n        \"9.\"\r\n        \"9999999999999992140391160425608486502573412858067853267494422609219249843660980606245241543726628584567845\"\r\n        \"5596772807429948356873502783913017233507635857119058287608601973485118222629925278543631190326543612068785\"\r\n        \"6793144185369306448728558535026937320361233858543155596710812316128092403135788648626506813051775901445653\"\r\n        \"1399369722369875296859785808489260546321506496239188673574863325229045321464303305877790712822242644948835\"\r\n        \"0538349222453692588279587908979174338697479788659722904339841966832055396226731386526846785614950264968197\"\r\n        \"7558236700698302001910633407533168792724609375e-227\"},\r\n    {1e-225, chars_format::scientific, 573,\r\n        \"9.\"\r\n        \"9999999999999995889633195164685873546684506928231237117398663206989994686997099650522381174202385511988166\"\r\n        \"5532143713492189547573649308797608271073422612848092682742982417988422128215652502500591518184109090841446\"\r\n        \"0695712392011353039764081168030334396734226489214851798206017435390585826980372336939541407365039603593028\"\r\n        \"6841701560346559249162043333727751481534234336451999260130591683793043584486052089721478465514409941447632\"\r\n        \"1659328393015332189676413050701609835498487749315574228749069627859829337433683464055078617912121442295916\"\r\n        \"4173920765250613840180449187755584716796875e-226\"},\r\n    {1e-224, chars_format::scientific, 572,\r\n        \"1.\"\r\n        \"0000000000000000188842045074720969281726225744049265127724544816342318643633489012136580458296359659586068\"\r\n        \"0142873716319177545269388374861295393117868142201454771495799112919370837715281606083172804275621385687770\"\r\n        \"2693982152263862758542091738083576971893101469828956572059834562621057530513170623824039675826626152702882\"\r\n        \"9554943250110925357284565537410933697787459888079249619861975705749544080532085014387137886982187761584570\"\r\n        \"7545289506591395555191133327745750663038010048636493634780383388550426764336480678810024954958759532602026\"\r\n        \"627590152685343127814121544361114501953125e-224\"},\r\n    {1e-223, chars_format::scientific, 568,\r\n        \"9.\"\r\n        \"9999999999999997089390646281190637400800057030683519949368020198276633036864657744691065855954627728762669\"\r\n        \"2711462403432106728597696196760677403094474374681383689185984160229479378003085214166818823098530044048697\"\r\n        \"3944534218136807948895448410591421461173584131029794582684483073554583722610639117199712477545283988280188\"\r\n        \"8583247748499098113898765741804068580802307245320098647828424758533523028653011700551458546375903476327247\"\r\n        \"2418041727595056862123397096052789194474810296725446652560022479388716998619908128864112804247216219040786\"\r\n        \"38909396659073536284267902374267578125e-224\"},\r\n    {1e-222, chars_format::scientific, 568,\r\n        \"1.\"\r\n        \"0000000000000000476783833342682112606713957768637813007397190494251111847601702954737064781916897791611948\"\r\n        \"6665910201904757668715159627972431984802920565041444613042119531057224577664265456883067357455082414457510\"\r\n        \"5873699390533971936733619876298237867358547303864542840334666315780417025464434651086480732669884805027801\"\r\n        \"3972914335267534684821378915349249801611797386207593472909455643687259147132155320986333106388946209955678\"\r\n        \"3727380706890529476578409498630033709192327460014863016495012072917359803021174598364193159679182279020795\"\r\n        \"42079860630110488273203372955322265625e-222\"},\r\n    {1e-221, chars_format::scientific, 566,\r\n        \"1.\"\r\n        \"0000000000000000169645925856856893060060376942410028602413035104481732430035608082629881503388323784117675\"\r\n        \"9708004617280138870373003624653886287005531314012122115392711085043513921718682682696513167396990650436454\"\r\n        \"2482001003045855479995989862202599578862071747559917487508179112410433564183086355339876938703742242547888\"\r\n        \"3927078511100484735448777978881712624199170721537360029658810376553696409425413660613858205688403865026496\"\r\n        \"9133150093238119960431981583020131793294388887877935675999408142925964561757501084173080407977398016174108\"\r\n        \"708042922444292344152927398681640625e-221\"},\r\n    {1e-220, chars_format::scientific, 562,\r\n        \"9.\"\r\n        \"9999999999999999239355998681967174227375122814278010784257107926662288959827321849441348805654645781222578\"\r\n        \"1416801495804438316992788219990497287676199131886641172731843282325453969622164633472698153505172392196091\"\r\n        \"7686422930553623146058858509260889480648913025162172052469893497144467951580077187425939035308281925639579\"\r\n        \"8904098517668447759506972297076828822690693898011732750582941628468462192600203323158782851279699890831517\"\r\n        \"4577656023161923475148392505322102605760380301683938036029249989328483687465622728201902066159706058967593\"\r\n        \"37838375358842313289642333984375e-221\"},\r\n    {1e-219, chars_format::scientific, 558,\r\n        \"1.\"\r\n        \"0000000000000000317072121450052998442454095738999365116805429691571034550467333621241329477082039307714926\"\r\n        \"8647799297899955893577238506246788221948278154506196914264427139130095036572562414306059178624874697166561\"\r\n        \"2910016229040151379230052268968505957340380014586137656864892970028025625598133537298246759807490672538246\"\r\n        \"6349079706700668711147626428386130469357231520579072082419120104777806523524649657592646158024664190592504\"\r\n        \"0138380787791276528182266982512884712925399402503660799437298029321834277564064370984814528794254462340518\"\r\n        \"3301656506955623626708984375e-219\"},\r\n    {1e-218, chars_format::scientific, 558,\r\n        \"1.\"\r\n        \"0000000000000000317072121450052998442454095738999365116805429691571034550467333621241329477082039307714926\"\r\n        \"8647799297899955893577238506246788221948278154506196914264427139130095036572562414306059178624874697166561\"\r\n        \"2910016229040151379230052268968505957340380014586137656864892970028025625598133537298246759807490672538246\"\r\n        \"6349079706700668711147626428386130469357231520579072082419120104777806523524649657592646158024664190592504\"\r\n        \"0138380787791276528182266982512884712925399402503660799437298029321834277564064370984814528794254462340518\"\r\n        \"3301656506955623626708984375e-218\"},\r\n    {1e-217, chars_format::scientific, 556,\r\n        \"1.\"\r\n        \"0000000000000000820286869074829038147691322564690967085931469882169185788207623459701738560623254961593543\"\r\n        \"2495631807748931332781026902083893493219520703392638894413217937078958575273805231533309563616052243338659\"\r\n        \"9970974867100681381948985284062799729213005566035635834935809604029406528561494585049482415841618646905336\"\r\n        \"1016177121015963348199695802694543380830079047974782555840977310449435712983375193946909035332432768524474\"\r\n        \"9169568225199384279436574479448148011932581959092802554105295508219736240850467056635533661182457798588529\"\r\n        \"84034456312656402587890625e-217\"},\r\n    {1e-216, chars_format::scientific, 552,\r\n        \"1.\"\r\n        \"0000000000000000417715070975008206383501541104137685510630637729690664798015391588933411293790282438490650\"\r\n        \"1417365799869750981417996185414209276202526664283485310294185298719867744312810977751509255623110206400981\"\r\n        \"0322207956652257379773838871987364711714905124876037292479076296828301806190805746848493891014316267411664\"\r\n        \"5282499189563727638558040303247813051651801026058214177103491545912132361416394764863498733486217906178898\"\r\n        \"1944618275272898078433128481899937372726835913821489150370897525101414670221344908114958355271895129590120\"\r\n        \"6322014331817626953125e-216\"},\r\n    {1e-215, chars_format::scientific, 552,\r\n        \"1.\"\r\n        \"0000000000000000417715070975008206383501541104137685510630637729690664798015391588933411293790282438490650\"\r\n        \"1417365799869750981417996185414209276202526664283485310294185298719867744312810977751509255623110206400981\"\r\n        \"0322207956652257379773838871987364711714905124876037292479076296828301806190805746848493891014316267411664\"\r\n        \"5282499189563727638558040303247813051651801026058214177103491545912132361416394764863498733486217906178898\"\r\n        \"1944618275272898078433128481899937372726835913821489150370897525101414670221344908114958355271895129590120\"\r\n        \"6322014331817626953125e-215\"},\r\n    {1e-214, chars_format::scientific, 548,\r\n        \"9.\"\r\n        \"9999999999999991294853170555815447380942404303671844696679748417593976294002496024747640399247703645613921\"\r\n        \"9669145746563738570562978920712197817481457391341938411132808559707770852376293656497482700456956882004083\"\r\n        \"4461538432173005728133703533459726557209837131653219566175297137847666946046014646053306115669486530319154\"\r\n        \"9347298089165733677047427050182759982813113559251953651435370993927616364020573917965857675783303466730526\"\r\n        \"8247784355081422352221012897456633272684485689532862584208239791227856442081540328491173763580945887952111\"\r\n        \"661434173583984375e-215\"},\r\n    {1e-213, chars_format::scientific, 544,\r\n        \"9.\"\r\n        \"9999999999999995417188383097980764646245766459737448027760269658974031233570950381415311611617342282187547\"\r\n        \"3910589667246545368520413459409764199735476351819671112511702776504860961416874815223117854304683340245916\"\r\n        \"0464911595164867510407202793112181136390385649127508640932246203586979303121868349231428609901062896334351\"\r\n        \"8460160107236627343777979364517278553598680503677613849707225222789602684066453511779979166688543657149232\"\r\n        \"4631271842328641050496299912350310218151325193111111838448475138359469325323751129341864896105107618495821\"\r\n        \"95281982421875e-214\"},\r\n    {1e-212, chars_format::scientific, 544,\r\n        \"9.\"\r\n        \"9999999999999995417188383097980764646245766459737448027760269658974031233570950381415311611617342282187547\"\r\n        \"3910589667246545368520413459409764199735476351819671112511702776504860961416874815223117854304683340245916\"\r\n        \"0464911595164867510407202793112181136390385649127508640932246203586979303121868349231428609901062896334351\"\r\n        \"8460160107236627343777979364517278553598680503677613849707225222789602684066453511779979166688543657149232\"\r\n        \"4631271842328641050496299912350310218151325193111111838448475138359469325323751129341864896105107618495821\"\r\n        \"95281982421875e-213\"},\r\n    {1e-211, chars_format::scientific, 542,\r\n        \"1.\"\r\n        \"0000000000000000860866106323290977989521652535914737868721793763139020704019000432275185949120018591922314\"\r\n        \"8748321021343152712198420398324197662294833702534841575692416427025554931034673452314515034661740800661978\"\r\n        \"0367570571673882521368240042400003578976814090504523368015448321395277884576460019940142059144210726758298\"\r\n        \"1962131856506348707731574677038773798011249472583972648417715875514795890821326821198516793758531226648909\"\r\n        \"0505843180151974088497721836001007644364521160456150945201722824918063055169882569206407652018242515623569\"\r\n        \"488525390625e-211\"},\r\n    {1e-210, chars_format::scientific, 537,\r\n        \"1.\"\r\n        \"0000000000000000438738980558973249501554588251133620087619148388021703078207190706152416416973367595537175\"\r\n        \"6313997163865233296087579101561566864752022160981921747071217659225532903868917941661009994907733611338014\"\r\n        \"3784825159783515874863433718211592230068725922315156166760336737063572299211892600734702315734897306878342\"\r\n        \"0324974785855889196258366120050919096362807417474785044114678002479328491648628750791950753089834631150033\"\r\n        \"5932174061457858893794332445675895125148716795289738221567522725371785895925880183199296880047768354415893\"\r\n        \"5546875e-210\"},\r\n    {1e-209, chars_format::scientific, 537,\r\n        \"1.\"\r\n        \"0000000000000000438738980558973249501554588251133620087619148388021703078207190706152416416973367595537175\"\r\n        \"6313997163865233296087579101561566864752022160981921747071217659225532903868917941661009994907733611338014\"\r\n        \"3784825159783515874863433718211592230068725922315156166760336737063572299211892600734702315734897306878342\"\r\n        \"0324974785855889196258366120050919096362807417474785044114678002479328491648628750791950753089834631150033\"\r\n        \"5932174061457858893794332445675895125148716795289738221567522725371785895925880183199296880047768354415893\"\r\n        \"5546875e-209\"},\r\n    {1e-208, chars_format::scientific, 532,\r\n        \"1.\"\r\n        \"0000000000000000979061701537299941966152430535653450847430534468171869639246307155589561418121080870910153\"\r\n        \"8629931701436970148709455961417734285606820934169659127706352082009561098641084995297496445792862813672687\"\r\n        \"8610739287003185182389585813172758756671078777597546184366879565008155448478538897317665187298818484324685\"\r\n        \"9220535836288477370944073072995373114472813248014545177622566479964726762589682280912355285145766273388594\"\r\n        \"1786470533386326343014670865292039149744946382702746507819298852791020659758203237288398668169975280761718\"\r\n        \"75e-208\"},\r\n    {1e-207, chars_format::scientific, 532,\r\n        \"9.\"\r\n        \"9999999999999992500289944066545260794393352251899924160340990116913366439211345173906974144483983897166235\"\r\n        \"2189411812074122203194500098779985388714648599688995096739219291006708753701504236607398029604493662017327\"\r\n        \"1678140799002433983058991092970258715435496406938981280259425155854893708252707482521839982942707164963854\"\r\n        \"7547404749041952119498108235731202565207945902873127503973233520114522955783109845270607825667850182252003\"\r\n        \"0527218232152305055095879225203782710370117029811199918136152450494694154947694642032729461789131164550781\"\r\n        \"25e-208\"},\r\n    {1e-206, chars_format::scientific, 531,\r\n        \"1.\"\r\n        \"0000000000000000287448618685041775611467192411468067474871960285579656441116238100310015816652007878432741\"\r\n        \"7265535493345146977353453580801839986912678504489355280493380020846005009332711166642793788659897434684305\"\r\n        \"8033569204162008468756111131622465602620067122836086961830504745239089017417231637691472711696999377193365\"\r\n        \"7434217691734764507346368173226471971292005784923652206732469228783416975785133762358237484114173771323236\"\r\n        \"6292971049317888008012637688183374798261772510814095901417025409694400162052829728054348379373550415039062\"\r\n        \"5e-206\"},\r\n    {1e-205, chars_format::scientific, 526,\r\n        \"1.\"\r\n        \"0000000000000000010803385544138509069593097161793914125848530612542771161864210478198197576064378681441776\"\r\n        \"8719777010108417708811052628555482267435021532617233741608191196380582573609361635180912725806711283088952\"\r\n        \"9802701171025537783302721259002348340999662460931503272815954817331462444992708733840995721456271734340837\"\r\n        \"6719690433913279361907286213318911514019682799687295018376430328310893061063314354936590363701536770497093\"\r\n        \"609557125569051267401182441733990905766850296205863565885611603245575196297068032436072826385498046875e-\"\r\n        \"205\"},\r\n    {1e-204, chars_format::scientific, 526,\r\n        \"1.\"\r\n        \"0000000000000000010803385544138509069593097161793914125848530612542771161864210478198197576064378681441776\"\r\n        \"8719777010108417708811052628555482267435021532617233741608191196380582573609361635180912725806711283088952\"\r\n        \"9802701171025537783302721259002348340999662460931503272815954817331462444992708733840995721456271734340837\"\r\n        \"6719690433913279361907286213318911514019682799687295018376430328310893061063314354936590363701536770497093\"\r\n        \"609557125569051267401182441733990905766850296205863565885611603245575196297068032436072826385498046875e-\"\r\n        \"204\"},\r\n    {1e-203, chars_format::scientific, 520,\r\n        \"1.\"\r\n        \"0000000000000000364909283964494690243191939081376830412598520594029984319306805834501324924016544053590211\"\r\n        \"8858347868651431172545325847430820148366422456613549311381232891696323291335249035452120486258789557131004\"\r\n        \"5938212253440220260683060295956098435873780428169370394754578725053224457696098050769606268964403117192073\"\r\n        \"6034285323924780348069311122000588899328256220789832219472160120915723671907243196436298677829712131554556\"\r\n        \"674824299153355310153286540401954520562788798446562476933408003532122165779583156108856201171875e-203\"},\r\n    {1e-202, chars_format::scientific, 520,\r\n        \"1.\"\r\n        \"0000000000000000364909283964494690243191939081376830412598520594029984319306805834501324924016544053590211\"\r\n        \"8858347868651431172545325847430820148366422456613549311381232891696323291335249035452120486258789557131004\"\r\n        \"5938212253440220260683060295956098435873780428169370394754578725053224457696098050769606268964403117192073\"\r\n        \"6034285323924780348069311122000588899328256220789832219472160120915723671907243196436298677829712131554556\"\r\n        \"674824299153355310153286540401954520562788798446562476933408003532122165779583156108856201171875e-202\"},\r\n    {1e-201, chars_format::scientific, 518,\r\n        \"9.\"\r\n        \"9999999999999994583981840083828664387789037672445647185185462414227186362537617223653189132590007008902182\"\r\n        \"5036064707813167053855864071099551731820360911829814527622461516880270539569772907578286195014691755833524\"\r\n        \"6313038824586331185893923613544981929960384320404305625917015212855137051754213994323632673435867770929096\"\r\n        \"1889224054953378234945273557754947929383082627673369846670918518473573081467853621970453936615832072474512\"\r\n        \"2774033477753696070790004781196766668518623271037326465104921879856192390434443950653076171875e-202\"},\r\n    {1e-200, chars_format::scientific, 514,\r\n        \"9.\"\r\n        \"9999999999999998210026239908275959605441178928974709961505359824656249094749793672197213175620180419702157\"\r\n        \"0455030299293624922494821832383011632557906373552085962098408476913455489082859886355453662043973282024133\"\r\n        \"1540672308512679754268595351951382901471352304920064954568524027925980061836920599672604679919133131325752\"\r\n        \"1270675728671148333244408622655324354942874459763350785891191594747038536509684958927467073288347769702934\"\r\n        \"065739205278643004860546448479624082362272590048489495639927326919860206544399261474609375e-201\"},\r\n    {1e-199, chars_format::scientific, 514,\r\n        \"9.\"\r\n        \"9999999999999998210026239908275959605441178928974709961505359824656249094749793672197213175620180419702157\"\r\n        \"0455030299293624922494821832383011632557906373552085962098408476913455489082859886355453662043973282024133\"\r\n        \"1540672308512679754268595351951382901471352304920064954568524027925980061836920599672604679919133131325752\"\r\n        \"1270675728671148333244408622655324354942874459763350785891191594747038536509684958927467073288347769702934\"\r\n        \"065739205278643004860546448479624082362272590048489495639927326919860206544399261474609375e-200\"},\r\n    {1e-198, chars_format::scientific, 510,\r\n        \"9.\"\r\n        \"9999999999999991248020992245337152787549067716438909430971156796632448648902414890992687013002247470966205\"\r\n        \"9250616363651145814708022930718768623141819087045324807904590313649740386017732887103292125347752751738164\"\r\n        \"7903616019374090502989225614211093036170293774649807043557627102989961482478123917402578427471263639364172\"\r\n        \"7258288515133029744510069298046601617868074142150587382588267288301984862829368791970001850877117631024364\"\r\n        \"23213435887235808111997818538852504458228488519455634531141186016611754894256591796875e-199\"},\r\n    {1e-197, chars_format::scientific, 508,\r\n        \"9.\"\r\n        \"9999999999999998674159923085805213393300653009810429996874306693191169124472952257610848253128042616284553\"\r\n        \"7868657895003123529680608425827294499852312192652536705711329687797703162620535019638931097823721317376531\"\r\n        \"0449809394455252371020553334467402225824756206938082148635917156255047967127507045157273096748991097456524\"\r\n        \"0871501542907022905826697910962572537414527814270868346111386548510042114755039370057964754782429778948172\"\r\n        \"054646195039061999776584332685697351547605103705418372328495024703443050384521484375e-198\"},\r\n    {1e-196, chars_format::scientific, 507,\r\n        \"1.\"\r\n        \"0000000000000000461507106775817966187790192124450764644959682661043814550492938215090537724522867873253923\"\r\n        \"2076309112008470570165867682191411520122070667713830622395672118711607338390277672566744227580449616988722\"\r\n        \"4048676409452018186544561551067244957754832615276870223269854919886711715484701354736102883217117306393040\"\r\n        \"5176207196512621743488000080129534927305169075196709311692988195667648791629557583252833507790667949728721\"\r\n        \"83126556639724251347018692505234351971198612785141079939421615563333034515380859375e-196\"},\r\n    {1e-195, chars_format::scientific, 504,\r\n        \"1.\"\r\n        \"0000000000000000936779998349607922066558293583226541961177484254423572660929452606554100043890918762554297\"\r\n        \"4707863770014997143924113153878357176231542226472692183855303438657076956092857009049025121818911605189577\"\r\n        \"8451632785457212546098566525163648745892718210943319829994865483295677250502261874912403342050891863710951\"\r\n        \"0047452830290157305812264311356157066156142110212407293358467828320964455752800500250463133640607927195845\"\r\n        \"53190632391191156426420971847936254735776662183610596912330947816371917724609375e-195\"},\r\n    {1e-194, chars_format::scientific, 503,\r\n        \"1.\"\r\n        \"0000000000000000176343371831543992660529331249185298255229001705015959684231029580212400332902037339673698\"\r\n        \"6497376317204554625910920399179244126456387732458513685519893326744325567768730070677375691037372424068209\"\r\n        \"1406902583848901570812158566609402684872101257877000459234848581841332394474165042630322607916852572002294\"\r\n        \"2253459816246100406093441541393561643994585254187290522693700416075659393155611833054255732280703963248447\"\r\n        \"6108811118884410829937732489961321031245178314605936975567601621150970458984375e-194\"},\r\n    {1e-193, chars_format::scientific, 500,\r\n        \"1.\"\r\n        \"0000000000000000480518022438769564422940916182801795737608394724779004874910398790749080217297589908825938\"\r\n        \"1781571298328731633116197501058889346366449530064185084854057371509426123098380846026035463349988096516756\"\r\n        \"6224794664492225960926721750031101109280348039103528207538855342423070336885403775543154901570468288685756\"\r\n        \"9371057021863723165980970649378599812859207996597337230959607380973781418194487299932738692824665548827406\"\r\n        \"7792911966978292755019478367894242808178173476107986061833798885345458984375e-193\"},\r\n    {1e-192, chars_format::scientific, 497,\r\n        \"1.\"\r\n        \"0000000000000000967197463410330479242799452076588191709415423556399877179997389527607768032330474019469521\"\r\n        \"4236283268127414844644640864066321698222548406233259323788719843133587011625822086583891099050173172434432\"\r\n        \"5933421993521544985110022843505818588333542889065972604825266159353851044743385748203686571416253435379297\"\r\n        \"2759212550851919581801017222154660883042604384453411964185058524810776658256688046938311429695004085753741\"\r\n        \"4487473323928503835150271772586917651270965734511264599859714508056640625e-192\"},\r\n    {1e-191, chars_format::scientific, 493,\r\n        \"1.\"\r\n        \"0000000000000000188510357855833015531025794646529958154524177425806481491858204348633867528277859442439788\"\r\n        \"2308744116449521706199131483254429935252790204362740541493259888534929589981916101691322081929877050966151\"\r\n        \"0399618267074634546416741093946270621848431129126061569167008852264601912170614591946835899662997200669632\"\r\n        \"7338163704470805316488942705712963170749170163883692391024336694671584274157166851729395050702462426671605\"\r\n        \"977617515280816610694100232507863790232249812106601893901824951171875e-191\"},\r\n    {1e-190, chars_format::scientific, 493,\r\n        \"1.\"\r\n        \"0000000000000000188510357855833015531025794646529958154524177425806481491858204348633867528277859442439788\"\r\n        \"2308744116449521706199131483254429935252790204362740541493259888534929589981916101691322081929877050966151\"\r\n        \"0399618267074634546416741093946270621848431129126061569167008852264601912170614591946835899662997200669632\"\r\n        \"7338163704470805316488942705712963170749170163883692391024336694671584274157166851729395050702462426671605\"\r\n        \"977617515280816610694100232507863790232249812106601893901824951171875e-190\"},\r\n    {1e-189, chars_format::scientific, 491,\r\n        \"1.\"\r\n        \"0000000000000000686870105410711392306560935401767227629654574949386254732267282863177163850871532771738817\"\r\n        \"4742369173523373314804257486974040663553435453559872562162354259478070339834015932022566252886866568705851\"\r\n        \"2341252652000657227180441413664381320398902655487604631988293528801721357017188131951220329585081190883818\"\r\n        \"0407634966154718446288670396235649706616968065048312917847198665960667399980860416663101533257689088484172\"\r\n        \"6791405982325182252994934771483936941649517393670976161956787109375e-189\"},\r\n    {1e-188, chars_format::scientific, 487,\r\n        \"9.\"\r\n        \"9999999999999994908067112790032880452765975891977808893416208927947989552854944282732526766467167814211472\"\r\n        \"9016690365461294541519550780469749156318868554867557125565277692145325401889763392275802425900917261305707\"\r\n        \"6813301281782027933475606463409156438777709922199012812172103051126346893854116359406976977720796143697733\"\r\n        \"0409039381133269347693239389812020205342531022532236534723299348668678980039958608222059751251451001340125\"\r\n        \"954851991484343502465496900111219247264671139419078826904296875e-189\"},\r\n    {1e-187, chars_format::scientific, 485,\r\n        \"1.\"\r\n        \"0000000000000000128707188149247610317961577755901485817508529722976908703009114926888671969566618642923904\"\r\n        \"7216709109600659513166516362808076647856712774459084699012968564021752699999664122051572781415038308837387\"\r\n        \"0166622140883511824725097055580097338022374545962676401628454691080147578789025767146309768072347121843930\"\r\n        \"4969827153068735740912975382850240786445034415743937927805593258116894299058323623937350272795835227254097\"\r\n        \"9734347453266124169414530431510002017603255808353424072265625e-187\"},\r\n    {1e-186, chars_format::scientific, 482,\r\n        \"9.\"\r\n        \"9999999999999991080664251568566946816656094891755579324414755946855331066513221291040011008947756645194928\"\r\n        \"3126449927134114187432183071903138762969913041033583206826632923302004443025636695331847192951237765064810\"\r\n        \"1901549205550173745210388007974066273910088599742362089704636735321269557432431572173304555919191098852789\"\r\n        \"8835500091400816510831330726597787609877843141587950888723719409168520573713992029531193965227310238619613\"\r\n        \"6871547144152751022960767812719495850615203380584716796875e-187\"},\r\n    {1e-185, chars_format::scientific, 480,\r\n        \"9.\"\r\n        \"9999999999999999245790355507694271907023841025563002404951188973186335837375563673317377958322500472430223\"\r\n        \"4358962862232098942818567516845240935447684803879394233469075096834422488602440315478951689910554023712058\"\r\n        \"1713286968178129346842854046235591958961014087649883630968564875705434541798692451605139055762615194522001\"\r\n        \"9525717242830049229470069208121483813535843954269093600189489946768858507209387397405040975412143865756706\"\r\n        \"52490890549595435599083970146239153109490871429443359375e-186\"},\r\n    {1e-184, chars_format::scientific, 479,\r\n        \"1.\"\r\n        \"0000000000000000577789123865899613197931803793260894086938033539425113965406543757913927151782229553421845\"\r\n        \"9534497321031048674712767507279892267342990221415604305478302883566035692506388321159663528747800703062985\"\r\n        \"6556267717828049382814882687684481250700175447797590086397970738801276652929170115515060665563735447105737\"\r\n        \"1607789096397343540438105999334044077646224460441400776936210637684912885400570369170411858356001076746638\"\r\n        \"0795112258360497758946650037614745087921619415283203125e-184\"},\r\n    {1e-183, chars_format::scientific, 477,\r\n        \"1.\"\r\n        \"0000000000000000055221053213795464392148268040697219009783701825739929660071353845448175667022245948478787\"\r\n        \"0655616493184777650368038902803597728304412828593472399773186584459960937589472889470248840942404462509561\"\r\n        \"7848316501019860224310404861235743606856916216571508707757079337816690093929729419231423257573756304982907\"\r\n        \"5883615198705872646445226736516527520612112408429807643402401323278491257656865065626485649704171724609864\"\r\n        \"13789495760688630365820017686928622424602508544921875e-183\"},\r\n    {1e-182, chars_format::scientific, 473,\r\n        \"1.\"\r\n        \"0000000000000000473275509735478783436775096642748159071507167196688077104339505775420776854830232832433234\"\r\n        \"1758721155461794469843821786384633359535274742851177924337279623744820741523005234821780591186721454952300\"\r\n        \"8814677474466411551113987122394733721931523601552373810669792458604359341129281976258333183965739618681171\"\r\n        \"2462954316859049361639530146770540766239402050039082150229448774803628559851829308461626616625635206319283\"\r\n        \"2911879721902170814473720383830368518829345703125e-182\"},\r\n    {1e-181, chars_format::scientific, 473,\r\n        \"1.\"\r\n        \"0000000000000000473275509735478783436775096642748159071507167196688077104339505775420776854830232832433234\"\r\n        \"1758721155461794469843821786384633359535274742851177924337279623744820741523005234821780591186721454952300\"\r\n        \"8814677474466411551113987122394733721931523601552373810669792458604359341129281976258333183965739618681171\"\r\n        \"2462954316859049361639530146770540766239402050039082150229448774803628559851829308461626616625635206319283\"\r\n        \"2911879721902170814473720383830368518829345703125e-181\"},\r\n    {1e-180, chars_format::scientific, 467,\r\n        \"1.\"\r\n        \"0000000000000000205720657561601459248213926337435557432004149359281262740007888540238312094633121226702388\"\r\n        \"0252734171604503705379320740892770555547523117726246388616260078602510467005544533796800271030358579788947\"\r\n        \"8596206451460618701959694475252980048283774875164620144805656061300251022921568339761110831074870297914282\"\r\n        \"5052177281241016263915175964207972289037936679409146465860138405827540686447052193047136397795898578025255\"\r\n        \"0330804428568853836623020470142364501953125e-180\"},\r\n    {1e-179, chars_format::scientific, 467,\r\n        \"1.\"\r\n        \"0000000000000000205720657561601459248213926337435557432004149359281262740007888540238312094633121226702388\"\r\n        \"0252734171604503705379320740892770555547523117726246388616260078602510467005544533796800271030358579788947\"\r\n        \"8596206451460618701959694475252980048283774875164620144805656061300251022921568339761110831074870297914282\"\r\n        \"5052177281241016263915175964207972289037936679409146465860138405827540686447052193047136397795898578025255\"\r\n        \"0330804428568853836623020470142364501953125e-179\"},\r\n    {1e-178, chars_format::scientific, 462,\r\n        \"9.\"\r\n        \"9999999999999995207802359964755093254973303558352972348764236955198179673189484181712023085285155160314218\"\r\n        \"7974074929298393483501980644336017773388789574064216571704500430381961642408451391728506514300696193707641\"\r\n        \"2369206325657890081247052985700906437455381356119707601934668842017337283098214303282216076742448367510473\"\r\n        \"2805880700588515337408292568477969874021853305965111138747038612487557305308227775860414375917728095925426\"\r\n        \"92325167763556237332522869110107421875e-179\"},\r\n    {1e-177, chars_format::scientific, 462,\r\n        \"9.\"\r\n        \"9999999999999995207802359964755093254973303558352972348764236955198179673189484181712023085285155160314218\"\r\n        \"7974074929298393483501980644336017773388789574064216571704500430381961642408451391728506514300696193707641\"\r\n        \"2369206325657890081247052985700906437455381356119707601934668842017337283098214303282216076742448367510473\"\r\n        \"2805880700588515337408292568477969874021853305965111138747038612487557305308227775860414375917728095925426\"\r\n        \"92325167763556237332522869110107421875e-178\"},\r\n    {1e-176, chars_format::scientific, 455,\r\n        \"9.\"\r\n        \"9999999999999999591421057981561172760359517840594637610381681203271426218398700962941525716354631708608402\"\r\n        \"1288165672816245368488365773674697953924112200111094852957684657993573180102527517321784079742545540384017\"\r\n        \"1468635566584800121790983716471398626500096489256663663452679575447847968613394523652707106506451318955178\"\r\n        \"4144051652154369610524111495583091804490661938365977391453819697791781023172096034811422121224133013894785\"\r\n        \"9040854382328689098358154296875e-177\"},\r\n    {1e-175, chars_format::scientific, 455,\r\n        \"9.\"\r\n        \"9999999999999999591421057981561172760359517840594637610381681203271426218398700962941525716354631708608402\"\r\n        \"1288165672816245368488365773674697953924112200111094852957684657993573180102527517321784079742545540384017\"\r\n        \"1468635566584800121790983716471398626500096489256663663452679575447847968613394523652707106506451318955178\"\r\n        \"4144051652154369610524111495583091804490661938365977391453819697791781023172096034811422121224133013894785\"\r\n        \"9040854382328689098358154296875e-176\"},\r\n    {1e-174, chars_format::scientific, 455,\r\n        \"9.\"\r\n        \"9999999999999999591421057981561172760359517840594637610381681203271426218398700962941525716354631708608402\"\r\n        \"1288165672816245368488365773674697953924112200111094852957684657993573180102527517321784079742545540384017\"\r\n        \"1468635566584800121790983716471398626500096489256663663452679575447847968613394523652707106506451318955178\"\r\n        \"4144051652154369610524111495583091804490661938365977391453819697791781023172096034811422121224133013894785\"\r\n        \"9040854382328689098358154296875e-175\"},\r\n    {1e-173, chars_format::scientific, 451,\r\n        \"1.\"\r\n        \"0000000000000000408024660475077059817387500126561010283827794411329843068069293894692053641056977569406164\"\r\n        \"5860179459417852569871442414611750645879228256918309821296094530706786339470126146992930030675499927138062\"\r\n        \"6078645110929395600330796878478038262808188478558890667044712256648069091058093906931208992098479034123455\"\r\n        \"6471433870655780438619471007693873666129072197794446443422556352914330611026469713197725405241789164989540\"\r\n        \"950045920908451080322265625e-173\"},\r\n    {1e-172, chars_format::scientific, 451,\r\n        \"1.\"\r\n        \"0000000000000000408024660475077059817387500126561010283827794411329843068069293894692053641056977569406164\"\r\n        \"5860179459417852569871442414611750645879228256918309821296094530706786339470126146992930030675499927138062\"\r\n        \"6078645110929395600330796878478038262808188478558890667044712256648069091058093906931208992098479034123455\"\r\n        \"6471433870655780438619471007693873666129072197794446443422556352914330611026469713197725405241789164989540\"\r\n        \"950045920908451080322265625e-172\"},\r\n    {1e-171, chars_format::scientific, 446,\r\n        \"9.\"\r\n        \"9999999999999998334549904886182533644575182481590307346570727588463864968956314327427402721974391392681493\"\r\n        \"8840349574834806876025069429390711572561024496770933912156771676252771920014882010591679536179058495704966\"\r\n        \"6459647214626236474966227897344883106057195766283635621494235537958651944862482050868079918452516392716952\"\r\n        \"5584371276921407873336343892803511244586645127284001019477731425013353998786167727604989180489880595814611\"\r\n        \"2971007823944091796875e-172\"},\r\n    {1e-170, chars_format::scientific, 446,\r\n        \"9.\"\r\n        \"9999999999999998334549904886182533644575182481590307346570727588463864968956314327427402721974391392681493\"\r\n        \"8840349574834806876025069429390711572561024496770933912156771676252771920014882010591679536179058495704966\"\r\n        \"6459647214626236474966227897344883106057195766283635621494235537958651944862482050868079918452516392716952\"\r\n        \"5584371276921407873336343892803511244586645127284001019477731425013353998786167727604989180489880595814611\"\r\n        \"2971007823944091796875e-171\"},\r\n    {1e-169, chars_format::scientific, 445,\r\n        \"1.\"\r\n        \"0000000000000000201179579279951889494332706650336297646126334616435798702446775408390300828267543734556479\"\r\n        \"1148767438721478692254625644809586029974902966311471906467144279997443046381416486456775682934766059213738\"\r\n        \"8682880170721357697310494206530360280015299673863900909282408323621275688292229454267224632007317171976821\"\r\n        \"9062755043188870164156569825065005551127725431170669760491634397165652335013242654640323869852380767042632\"\r\n        \"214725017547607421875e-169\"},\r\n    {1e-168, chars_format::scientific, 442,\r\n        \"1.\"\r\n        \"0000000000000000495359250313018798398232857372078111175301744102507328466887690588908349273123627410787142\"\r\n        \"8960553423711877095976320606305997928149943379618974718668317969895175729885359114774861866388254226928332\"\r\n        \"6312412530128344937161591339967057855542963751652330786988796139481604083337014453611557944136969598140923\"\r\n        \"2266209375586253665614918173692729092462974165924485487326723400897105883120943360144183831295094933011569\"\r\n        \"082736968994140625e-168\"},\r\n    {1e-167, chars_format::scientific, 440,\r\n        \"1.\"\r\n        \"0000000000000000024671776660111744151992616217291209528621088924792880843782226300079471761353893528818080\"\r\n        \"8461695847727239650021608667911738891069878718326970219146440066058803436279050909465923972862673158584982\"\r\n        \"6105160755077165353399835926468341734698701227190842982658575634105078651265358454660624644729525716278361\"\r\n        \"1140682443750440063281560815888371426326576190318380324390580994926780206148622231338007892986752267461270\"\r\n        \"0939178466796875e-167\"},\r\n    {1e-166, chars_format::scientific, 438,\r\n        \"1.\"\r\n        \"0000000000000000401221755582437387548984809141120730845965613066964438942266597731142573770769680634393330\"\r\n        \"4860781908514949606785378218627146120733930447360573818763942389127901271164097473713074287683138013259662\"\r\n        \"6270962175118109020409240257267314631374111246760033226122752038406298996922683253821371284255480821768410\"\r\n        \"8041103989219090945148246702131857559235694570803264454739494919703040747726479134382948643633426399901509\"\r\n        \"28497314453125e-166\"},\r\n    {1e-165, chars_format::scientific, 435,\r\n        \"1.\"\r\n        \"0000000000000000099981772444576872831391054802057113792089993753227192463479100586292092163237050949933130\"\r\n        \"7741513059884781641374362578054820337002689064133690939069940530672623003256060222315354035826766129519918\"\r\n        \"6138321039085354086801716792628136314033783231104681031351410914965322720396823414492773972634716737376371\"\r\n        \"0520766752844170239654897993137068652908399866415357150460363779882032314464193611946996043116087093949317\"\r\n        \"93212890625e-165\"},\r\n    {1e-164, chars_format::scientific, 432,\r\n        \"9.\"\r\n        \"9999999999999996179977994240000492832410478595553265058890028512475980974191051545313215911848434547968112\"\r\n        \"3506829020765128967167375531390990830327028509706783315595375571441777746032006200790016328565711155363281\"\r\n        \"9260952214329461930296792492054510062892584060561175197172651174597606779554476715670182740414942023491074\"\r\n        \"4882271746442971108655400587454064027847283393947054636137539561684188212445367760494718822883442044258117\"\r\n        \"67578125e-165\"},\r\n    {1e-163, chars_format::scientific, 430,\r\n        \"9.\"\r\n        \"9999999999999992324106210075385904447210423055538966769282101296639226045711088091227051335430774586877556\"\r\n        \"0380187758298979009906375332065220798567138804402682455512151783214215916809129382899197104804151043494558\"\r\n        \"5563145673110198780120492144673027600936385460172667104099484794553110440023470772264137151669161743272965\"\r\n        \"6621955120843986078340537112320766026857911177781841141364660971975280266688113073314525536261498928070068\"\r\n        \"359375e-164\"},\r\n    {1e-162, chars_format::scientific, 428,\r\n        \"9.\"\r\n        \"9999999999999995408803637407077575155370467487550405400968443069308629988495058854495982996564902555750001\"\r\n        \"0881500768271898975715175491525836823975050568645963143578730813796265380187430837211852483813399132989537\"\r\n        \"2521390906085609300261532422578213570501344340483473578558017898588707511648275526988973622665785967447452\"\r\n        \"7230208421323174102592427892427404427649408950714011937182963843742406623293916823058680165559053421020507\"\r\n        \"8125e-163\"},\r\n    {1e-161, chars_format::scientific, 426,\r\n        \"1.\"\r\n        \"0000000000000000281207746300313758485495457412437785811701566332371519945117658868634141898328680968104386\"\r\n        \"9208465199220690689365629587423131528495403880282983679493852048719318409229535432756222539343559454777748\"\r\n        \"6122117946522659454860002908955065989745724565322940911725849734827414048354780693832858115305768410546622\"\r\n        \"1669001634247322536079696576468333658954900360575122184714689073598350987914784582244465127587318420410156\"\r\n        \"25e-161\"},\r\n    {1e-160, chars_format::scientific, 421,\r\n        \"9.\"\r\n        \"9999999999999998863664756018572246348509717251403216668457145854698362404413106109357186457035125880887139\"\r\n        \"5442971339441569337421031670121726772431911744598437514213299328048160779171128466042026508303756993223913\"\r\n        \"3914625567018069082819497533832021856414098286431576829951574975108576231868056852280790470182005098522878\"\r\n        \"2311452117859864689754545566146839436535886456398043228499463060121588142692417022772133350372314453125e-\"\r\n        \"161\"},\r\n    {1e-159, chars_format::scientific, 421,\r\n        \"9.\"\r\n        \"9999999999999998863664756018572246348509717251403216668457145854698362404413106109357186457035125880887139\"\r\n        \"5442971339441569337421031670121726772431911744598437514213299328048160779171128466042026508303756993223913\"\r\n        \"3914625567018069082819497533832021856414098286431576829951574975108576231868056852280790470182005098522878\"\r\n        \"2311452117859864689754545566146839436535886456398043228499463060121588142692417022772133350372314453125e-\"\r\n        \"160\"},\r\n    {1e-158, chars_format::scientific, 419,\r\n        \"1.\"\r\n        \"0000000000000000644461715342893769628088384244751452824968949939521068953419899265716691290743835877718806\"\r\n        \"0499499819275101744539273894201213671647439569640272413320572395360660554036964212016080836775688509796677\"\r\n        \"3034320905157843797711811812081180689521694123068341482158086593158645959509317701749254858130330879185409\"\r\n        \"76318295429117517178155992347336913970321071383156146176302524197776477876686840318143367767333984375e-\"\r\n        \"158\"},\r\n    {1e-157, chars_format::scientific, 416,\r\n        \"9.\"\r\n        \"9999999999999994315093317572352976389085242133736429719717733730390966126541574180671350586793186143106586\"\r\n        \"9711755227455900472638007306987480806006421373515865542817844552713093922452020273570757392631880130378197\"\r\n        \"6057475476281847746240325181644150833132392519880474034974000401221846213932984753153735603509222882524146\"\r\n        \"59073461311052731967136774974327947162647755003431814598176263775286543022957630455493927001953125e-158\"},\r\n    {1e-156, chars_format::scientific, 415,\r\n        \"1.\"\r\n        \"0000000000000000401871238625762075230252412238475890854369514626224674485266750896186780044330932425037176\"\r\n        \"5793834959969199405084179261500720553438080083182535241512814807342790321678611775084279817273188410444905\"\r\n        \"7948606233651911993094255953297827568280003148852282666425949282551353691886113856462478598574449160998810\"\r\n        \"7423610556951506838186752937735609011950981220659355323300554463372691316180862486362457275390625e-156\"},\r\n    {1e-155, chars_format::scientific, 412,\r\n        \"1.\"\r\n        \"0000000000000000143108063460821601205894042098448624752396783625375187052570059302021541381490502075510105\"\r\n        \"1441125776709570242998744986620194560681429964294282258251206713457062073829702509023692063137188304469682\"\r\n        \"8523843917378918068168863037262250905622199443021819929645002817903575273088029754823250588381508661599771\"\r\n        \"7868176971927245633249316887604321134531113575159345409348876643207404413260519504547119140625e-155\"},\r\n    {1e-154, chars_format::scientific, 408,\r\n        \"9.\"\r\n        \"9999999999999997290869831969168427669206498744049989892404140240160071602553527513571595209458135162667908\"\r\n        \"4767910834941635836620501468113529722707897740730774850326337632398968772714476833267516565195881349093261\"\r\n        \"4442242113421277882882343716053282453697135136930795507954884744671298030110951922004857720728038625613094\"\r\n        \"579483235888427705349419207394260530659325342359329547026192130942945368587970733642578125e-155\"},\r\n    {1e-153, chars_format::scientific, 408,\r\n        \"1.\"\r\n        \"0000000000000000391520711619164456269278077432874800210290605386190694987958883232420170497817315211056093\"\r\n        \"7219726592638814238600761890505499513727814078427005122182350483587361191764655404441856307107748406205896\"\r\n        \"8771615741000992236097240236656404501773691000619064156954711423965442555134190492396909478166731541022849\"\r\n        \"184139321355053638998925549573035749685418651483935492674248735056607984006404876708984375e-153\"},\r\n    {1e-152, chars_format::scientific, 405,\r\n        \"1.\"\r\n        \"0000000000000000656494202988063501670221048456262720698710681931060570119040295424845374888565915888971814\"\r\n        \"8716900796296674500576246587983158130310623800168576177042237171726346917561938492887898167343012514724525\"\r\n        \"1702572352864538015220842582676835004335281995389457999418400603764767655983428612475478960604302612407465\"\r\n        \"074615720461537986384519001106479628333213098383136507862900543841533362865447998046875e-152\"},\r\n    {1e-151, chars_format::scientific, 401,\r\n        \"9.\"\r\n        \"9999999999999993846214444173480837456947875440007023542943145156851694898495169012043938129726326349763533\"\r\n        \"5304646187389452430939200400903967707131371358090351137147810686592154337349796683468972382137447938351093\"\r\n        \"6339806159195182754275513217787685920396452204915675555926925407280071719070856360983454449039614697613088\"\r\n        \"00329004750413118933670433745949010823799753266971634957371861673891544342041015625e-152\"},\r\n    {1e-150, chars_format::scientific, 401,\r\n        \"1.\"\r\n        \"0000000000000000062953582321729639972108793363873778804649710470552049825417932113812917053289050370440599\"\r\n        \"4963230580103067513751160865633202829165130023467457014156090990295018891776024374768764400416020911642797\"\r\n        \"7937229542290195469983973327591070678597318167103775792299736841014279430081135223499483319944143412505925\"\r\n        \"47994858646301304824078966967156534016215353732892623384032049216330051422119140625e-150\"},\r\n    {1e-149, chars_format::scientific, 397,\r\n        \"9.\"\r\n        \"9999999999999997916207271599770174815431910359245482245075520886052976911905660287695077571624832762549010\"\r\n        \"3901241955574186054882645354160804057843328684040882539795670216406975085596064922000175355351104645197224\"\r\n        \"2159299717419245921614045252661498439742489884588924976169191208997705268115153885390281699280706354080788\"\r\n        \"0810075377797307651794197530131880842681202370414439428714103996753692626953125e-150\"},\r\n    {1e-148, chars_format::scientific, 395,\r\n        \"9.\"\r\n        \"9999999999999993574881589011728214966382273112057792962800986774904942764267802927000528833599759255577835\"\r\n        \"0731539802843803522676304070686845283750574203026982376971286717937832954133378800900225517256537491228018\"\r\n        \"2618506588646911876452944415462765085773383026270792261244107687165562815801236526022999299023541920515241\"\r\n        \"33144221481909121761385664308924357650265601904493451002053916454315185546875e-149\"},\r\n    {1e-147, chars_format::scientific, 392,\r\n        \"9.\"\r\n        \"9999999999999997047942135082161782845621982909807944388620614063823370082378088815556167824019818061154775\"\r\n        \"3267301525028109548441377097466012303024777787838102507230793516713146659303527697780185387732191214403383\"\r\n        \"0251141091664779112581825085221751768948668512925298433184174504631276777652370413516825219229273467367678\"\r\n        \"73109447318760285566630713102839918271502739344214205630123615264892578125e-148\"},\r\n    {1e-146, chars_format::scientific, 392,\r\n        \"1.\"\r\n        \"0000000000000000260483900879485549145240551858620818666993201772609285379135454623724519020869191215007787\"\r\n        \"9732452028052299918966549394031267953386350352353589471564600439475364858757576593278812118049323717148396\"\r\n        \"6646335629649336669038803415683613046202912529157250830828828141257641911661418463350694669155844394233157\"\r\n        \"85705380865772214765502279117310481526548215924776741303503513336181640625e-146\"},\r\n    {1e-145, chars_format::scientific, 388,\r\n        \"9.\"\r\n        \"9999999999999991491045261369468074238838447233407702107309210401553886373401631393867145439347723972231670\"\r\n        \"9210082769533219907217260254619345072186052052140310298815582638672644731031289462772249594971145257322799\"\r\n        \"4038925886836191534775616013607373075868211734278088558080067596686134438690556193526703746900102992403778\"\r\n        \"8916508597979842347823863503257502127752331944066099822521209716796875e-146\"},\r\n    {1e-144, chars_format::scientific, 382,\r\n        \"9.\"\r\n        \"9999999999999995047459260545592047747179910066303857167348508745406355947146564143748119765537864189142457\"\r\n        \"7406702773049949277600695034041212099922836522986897312201317600618565965125521933177328502338214669854372\"\r\n        \"9214743617926487584571589819440575439439704072612302878146696017771025535626117294320381489190772096380674\"\r\n        \"7888947723673401521480956499754455535367014817893505096435546875e-145\"},\r\n    {1e-143, chars_format::scientific, 382,\r\n        \"9.\"\r\n        \"9999999999999995047459260545592047747179910066303857167348508745406355947146564143748119765537864189142457\"\r\n        \"7406702773049949277600695034041212099922836522986897312201317600618565965125521933177328502338214669854372\"\r\n        \"9214743617926487584571589819440575439439704072612302878146696017771025535626117294320381489190772096380674\"\r\n        \"7888947723673401521480956499754455535367014817893505096435546875e-144\"},\r\n    {1e-142, chars_format::scientific, 379,\r\n        \"1.\"\r\n        \"0000000000000000415187909843646941992853405491851801412104911250566867805593359198344341404058462314443407\"\r\n        \"1999004998205277646578228806936119169092900476835416006646879910320012432440675705741433050519791236593520\"\r\n        \"1126483700951764547204928276237357349018272445874789153751726477574834674378115371235219650945488500256152\"\r\n        \"8285839188544891300604311457078665625886060297489166259765625e-142\"},\r\n    {1e-141, chars_format::scientific, 379,\r\n        \"1.\"\r\n        \"0000000000000000415187909843646941992853405491851801412104911250566867805593359198344341404058462314443407\"\r\n        \"1999004998205277646578228806936119169092900476835416006646879910320012432440675705741433050519791236593520\"\r\n        \"1126483700951764547204928276237357349018272445874789153751726477574834674378115371235219650945488500256152\"\r\n        \"8285839188544891300604311457078665625886060297489166259765625e-141\"},\r\n    {1e-140, chars_format::scientific, 376,\r\n        \"9.\"\r\n        \"9999999999999998325050402186307901732467402213100953670680726099100791906309894166038425704554697413047438\"\r\n        \"8736707768290967065346068526756404752685057091319111903737610941547926974466766577902649223367705840443471\"\r\n        \"0752777238899304424063559278896454737707191411621114795520100770642861170561930404811834896485852742605782\"\r\n        \"0477947621912585655923333405326047795824706554412841796875e-141\"},\r\n    {1e-139, chars_format::scientific, 375,\r\n        \"1.\"\r\n        \"0000000000000000298651335918643711628932072437743460203097543522435510082600885241996241637337863799815674\"\r\n        \"5373938153930041458569504416084023430328021523294715043392256147086968485441875896151199424883187106083685\"\r\n        \"5116242505539397726245213806567814973968761784932253618911783197472724962913730905084412418686107855057037\"\r\n        \"903823030327416475360191583376945345662534236907958984375e-139\"},\r\n    {1e-138, chars_format::scientific, 373,\r\n        \"1.\"\r\n        \"0000000000000000671568372478654048793480338210890152071921120252455854796176801902310160890843779046624419\"\r\n        \"0574152055610797260197422466810729794375634174624958125807052189432709115838035286839947026920320323715156\"\r\n        \"2349014330858971553316300109510350574127195899948367330399601693799476039599761196766995561916125919694205\"\r\n        \"6630578736140489704009581828358932398259639739990234375e-138\"},\r\n    {1e-137, chars_format::scientific, 370,\r\n        \"9.\"\r\n        \"9999999999999997765674847346292395985645003553380915867445361004070274835946019175567546824295824542834322\"\r\n        \"0936386915769833362904191450666345206613638114323747280115416878029316028872527491869527820312006013996264\"\r\n        \"9903619500919943683456929824482651337469540239096944228288373026152734555532884967287960181640825645650030\"\r\n        \"4089424972613098230311834413441829383373260498046875e-138\"},\r\n    {1e-136, chars_format::scientific, 368,\r\n        \"1.\"\r\n        \"0000000000000000015234388133035855383875390450151974382791625207620048100283188580157663004673368212241028\"\r\n        \"7021775588652667049332286697531726593651835908283730300757011154904205606340794759227751247334965860683767\"\r\n        \"7619335918296521617671188216331487917848351857520007198181041140264394144632347883405649229831294125932790\"\r\n        \"40680454942957577912920896778814494609832763671875e-136\"},\r\n    {1e-135, chars_format::scientific, 364,\r\n        \"1.\"\r\n        \"0000000000000000397101433570486440640372814601854186856466967779160881086984927240319116320263425424973183\"\r\n        \"0906794623973760990199274781475873910436591263245899217149762302266244011866461975293028791820990275538393\"\r\n        \"7825694267423765216591980590544644372410588391296507638744567280502987247158842902088614368498832624121250\"\r\n        \"1922610289550874540509539656341075897216796875e-135\"},\r\n    {1e-134, chars_format::scientific, 364,\r\n        \"1.\"\r\n        \"0000000000000000397101433570486440640372814601854186856466967779160881086984927240319116320263425424973183\"\r\n        \"0906794623973760990199274781475873910436591263245899217149762302266244011866461975293028791820990275538393\"\r\n        \"7825694267423765216591980590544644372410588391296507638744567280502987247158842902088614368498832624121250\"\r\n        \"1922610289550874540509539656341075897216796875e-134\"},\r\n    {1e-133, chars_format::scientific, 360,\r\n        \"1.\"\r\n        \"0000000000000000641496342650454815204531166058943602839619187024947014198474039982822446442241062041121761\"\r\n        \"8993206806579261112354147155200128193178834690421687323641123036577948591402888993574806420292045901045354\"\r\n        \"4357763610865201119901287710041064503330419772913467920705224010255686832775799714045712057246057262961864\"\r\n        \"454953175851414926000870764255523681640625e-133\"},\r\n    {1e-132, chars_format::scientific, 354,\r\n        \"9.\"\r\n        \"9999999999999998594326335945560165992244413962574716935320854384313882417088792068117900519126248694463097\"\r\n        \"1166878222416607214585555592825144884036557234591653828687686867804939368863225350731180091846678994230803\"\r\n        \"4551417118526062293115049276525200843869593517391950184311224750470481588015379157829994532549384186718988\"\r\n        \"143383057831670157611370086669921875e-133\"},\r\n    {1e-131, chars_format::scientific, 354,\r\n        \"9.\"\r\n        \"9999999999999998594326335945560165992244413962574716935320854384313882417088792068117900519126248694463097\"\r\n        \"1166878222416607214585555592825144884036557234591653828687686867804939368863225350731180091846678994230803\"\r\n        \"4551417118526062293115049276525200843869593517391950184311224750470481588015379157829994532549384186718988\"\r\n        \"143383057831670157611370086669921875e-132\"},\r\n    {1e-130, chars_format::scientific, 352,\r\n        \"1.\"\r\n        \"0000000000000000860474181186106478814017048964495719560523575469171389466368285000105430231533024449190888\"\r\n        \"5118632122193789221804912802057060030515884801171193467057382254521235894667527601955279175402111741499591\"\r\n        \"1810497742588727689266426889109856940634588690842264333341972440114105661488593017559271586363570539363054\"\r\n        \"8343253394705243408679962158203125e-130\"},\r\n    {1e-129, chars_format::scientific, 347,\r\n        \"9.\"\r\n        \"9999999999999992588077050396257392703488768553145229733371914199873875069132357308356059441403851215995624\"\r\n        \"3155212422703836212507412136177871631363182768319485323556005461360487622175994949438213094542015941771738\"\r\n        \"4419280934109333533385517507781179706383817482773534294846124960068136571893048547172361733897591462572052\"\r\n        \"02346085570752620697021484375e-130\"},\r\n    {1e-128, chars_format::scientific, 350,\r\n        \"1.\"\r\n        \"0000000000000000540140885956810330905283414542659480243086298659334589074477275146251465374054496583672623\"\r\n        \"2958009946209108101694078484369205457039971496303344480117025912844198468177541980552987602212529712035107\"\r\n        \"7136783812753168822080851861443509146635347302329282152570500451292647260628735384990864503768808260741884\"\r\n        \"90792948869056999683380126953125e-128\"},\r\n    {1e-127, chars_format::scientific, 346,\r\n        \"1.\"\r\n        \"0000000000000000283874249773373412578296507005190488789136477211465148760964467263168293488071674291258011\"\r\n        \"1229512205421363205605411030218921798259240852409065290564740839502568526985553483431154343660864088463520\"\r\n        \"9397812668884721728332391839310430911435954191518896407953322860235480539940849278936138837692998437844948\"\r\n        \"9668128080666065216064453125e-127\"},\r\n    {1e-126, chars_format::scientific, 343,\r\n        \"9.\"\r\n        \"9999999999999994638210139863752739319384028852897161364970485782829397577234820373021434529266429555312521\"\r\n        \"6983194349005795381216751769380140901609027919473718839974286048093527151711902926412879162955340930344432\"\r\n        \"6331050085056910283373197684845805587978962369256620251783545688525470337396137395610167062504070045747539\"\r\n        \"5523943006992340087890625e-127\"},\r\n    {1e-125, chars_format::scientific, 343,\r\n        \"1.\"\r\n        \"0000000000000000119863602615973784849024886181210334258608591484828706960316270217995063481042668024112659\"\r\n        \"3323273651317206472108663859562740256639573240316726609251278392563925364622680845273181058187798089377705\"\r\n        \"4044871136808915588333377425145260840908342600600249531398329201958893838700602171061114411404480151190909\"\r\n        \"9644981324672698974609375e-125\"},\r\n    {1e-124, chars_format::scientific, 339,\r\n        \"9.\"\r\n        \"9999999999999993326124962604555717485211062261055925120747399969737863172049244011635594473034379418149707\"\r\n        \"3733285916172541513242774404130688568651687022735009389466586472584381852808921821149092879170812937657908\"\r\n        \"3507517828450461163381082371524445023758069641907445239343596422312776727474160532609971652195923752515227\"\r\n        \"533876895904541015625e-125\"},\r\n    {1e-123, chars_format::scientific, 336,\r\n        \"1.\"\r\n        \"0000000000000000592214266429284712709327154154273179306528902377541659346183077708093965901286206073491272\"\r\n        \"4893240687137177864579295711052543096504215963142662011434050239747217672227754043168144120350228166744854\"\r\n        \"1461342749187237271530538937940950644027863982445952535876710937795463538272513841741184759115412816754542\"\r\n        \"291164398193359375e-123\"},\r\n    {1e-122, chars_format::scientific, 336,\r\n        \"1.\"\r\n        \"0000000000000000592214266429284712709327154154273179306528902377541659346183077708093965901286206073491272\"\r\n        \"4893240687137177864579295711052543096504215963142662011434050239747217672227754043168144120350228166744854\"\r\n        \"1461342749187237271530538937940950644027863982445952535876710937795463538272513841741184759115412816754542\"\r\n        \"291164398193359375e-122\"},\r\n    {1e-121, chars_format::scientific, 330,\r\n        \"9.\"\r\n        \"9999999999999997860691335212340624944112834802459237580782384539782206076370595916585057707372344692184393\"\r\n        \"6804969460044266880960840178432795831352257161863989250421196205543988005817624520940738275930141680382536\"\r\n        \"2705645307282349322073832894363067133705474907626194082336061086343845843364512571138646990220877341926097\"\r\n        \"869873046875e-122\"},\r\n    {1e-120, chars_format::scientific, 330,\r\n        \"9.\"\r\n        \"9999999999999997860691335212340624944112834802459237580782384539782206076370595916585057707372344692184393\"\r\n        \"6804969460044266880960840178432795831352257161863989250421196205543988005817624520940738275930141680382536\"\r\n        \"2705645307282349322073832894363067133705474907626194082336061086343845843364512571138646990220877341926097\"\r\n        \"869873046875e-121\"},\r\n    {1e-119, chars_format::scientific, 329,\r\n        \"1.\"\r\n        \"0000000000000000130024390228669006586108721634497552792083855061365287802750027321337635426438129020374848\"\r\n        \"1664600942221067190062254340279232015505994888221071175236010018076668185817385530952343819169425474153069\"\r\n        \"8485296570604075930318596366131621457117669193880841542694664169076444938015837959888187924661906436085700\"\r\n        \"98876953125e-119\"},\r\n    {1e-118, chars_format::scientific, 325,\r\n        \"9.\"\r\n        \"9999999999999998548601848627210513127507711110962495648793617754556340466596531375943317018774133794497211\"\r\n        \"2773177452477547884893180823304700696093795505933333750808977000588526776288870678657278259082964292612168\"\r\n        \"7135109387034031318296259047753696621199718313862638351258177207227966550723285976687293441500514745712280\"\r\n        \"2734375e-119\"},\r\n    {1e-117, chars_format::scientific, 324,\r\n        \"1.\"\r\n        \"0000000000000000295122913448237779750123491948538334728406551032911080056404251831583617661174558404929924\"\r\n        \"3896970860405054631006016095048489183043964090797713855329077408887357490730484608804313415126102901088181\"\r\n        \"6348367949744479609411978642945372534116287611377588167235972038088633907781943577219863072969019412994384\"\r\n        \"765625e-117\"},\r\n    {1e-116, chars_format::scientific, 320,\r\n        \"9.\"\r\n        \"9999999999999999429127305798243970002253152785846665975847996269467232486085728763921888937368423845457617\"\r\n        \"8012483682792147569926576848740738922962964586342094711305336418245536402492065760534449437518577236266098\"\r\n        \"2404823409116184273460964524093702365192349873845287015478485841959641056142515935789560899138450622558593\"\r\n        \"75e-117\"},\r\n    {1e-115, chars_format::scientific, 316,\r\n        \"1.\"\r\n        \"0000000000000000506449023169285809400062397950510535606899601876489694141081659204698474921637188017160421\"\r\n        \"9554404355680558555414031141153138357492564670095816485848203669125039801019251428454834497950650007565124\"\r\n        \"72130993150441963186515079572669739126745191857734238466488461104242357890825587674044072628021240234375e-\"\r\n        \"115\"},\r\n    {1e-114, chars_format::scientific, 316,\r\n        \"1.\"\r\n        \"0000000000000000506449023169285809400062397950510535606899601876489694141081659204698474921637188017160421\"\r\n        \"9554404355680558555414031141153138357492564670095816485848203669125039801019251428454834497950650007565124\"\r\n        \"72130993150441963186515079572669739126745191857734238466488461104242357890825587674044072628021240234375e-\"\r\n        \"114\"},\r\n    {1e-113, chars_format::scientific, 314,\r\n        \"9.\"\r\n        \"9999999999999997851225686547752015282709321304454232749766549970746913987161087044664288059247456074136569\"\r\n        \"3103646918068384934346731171159358420413413594249595070095860341804175152335940173810558685761958841238256\"\r\n        \"528149588154496617780581231049241207195755411835638060919569276852048034243125584907829761505126953125e-\"\r\n        \"114\"},\r\n    {1e-112, chars_format::scientific, 311,\r\n        \"9.\"\r\n        \"9999999999999994965919868489709583795543458024193783422074762453086903017698885043736103596397686435149509\"\r\n        \"2127488262573504686429299075010548358608520351566167154741389802025686009193310529515444168264142347473060\"\r\n        \"254169697398616737432210540562148125004249902260523746627858543423172932307352311909198760986328125e-113\"},\r\n    {1e-111, chars_format::scientific, 310,\r\n        \"1.\"\r\n        \"0000000000000000881538779516831325493393960176944394019499534253785495567111745464819138901807658070228739\"\r\n        \"7681304980894892987643297313652483665527200791644662114844284839296243389627793282213199385225366151754600\"\r\n        \"23692731730268401631043898549001949195234763482210724552280700638817734215990640223026275634765625e-111\"},\r\n    {1e-110, chars_format::scientific, 307,\r\n        \"1.\"\r\n        \"0000000000000000512219634805401894263036729677071056505554985451525014163020583608700331290562887556438396\"\r\n        \"0756356672991548315909866005345435977616174456581183341678912610204596779305536687743424726985645640552655\"\r\n        \"11385789128593139162584753710767157743183492959649261329346803250928132911212742328643798828125e-110\"},\r\n    {1e-109, chars_format::scientific, 304,\r\n        \"9.\"\r\n        \"9999999999999999213090032671148042944651608772737164832437073679082439164747246389102391125712547343738461\"\r\n        \"6764393803461968411363759120541596769585323204796173046143170436579622027899261365917852738020928226295429\"\r\n        \"16946809659127192130501219695914914199014601235509201726525674303047708235681056976318359375e-110\"},\r\n    {1e-108, chars_format::scientific, 303,\r\n        \"1.\"\r\n        \"0000000000000000394037508497744476269322415917111588501092729834801660113711411814742312854964560992025486\"\r\n        \"0940373214462478020955167986687180717484646029360870134265993496895269864002414577513096836348935076968032\"\r\n        \"6744756749605705517267782736253202447852708639242959309800795608680346049368381500244140625e-108\"},\r\n    {1e-107, chars_format::scientific, 300,\r\n        \"1.\"\r\n        \"0000000000000000015854704313240738689436611885241290886813511861286927155922062074076653861049915985904174\"\r\n        \"1529226147169453077100134326980763885063755062255867870544652334305423735032423824776047586311461273497240\"\r\n        \"8684525827194158640497566304817959803162658537732665475772364516160450875759124755859375e-107\"},\r\n    {1e-106, chars_format::scientific, 298,\r\n        \"9.\"\r\n        \"9999999999999994107622176180347585616193254342488147039667631036633544234591024890115994707864839761100750\"\r\n        \"4713908395006131669320804714504969531903295148878642485905064741616699286804386203967687862515031879439739\"\r\n        \"78815635133568363766522001452157157165857837531619534132687476812861859798431396484375e-107\"},\r\n    {1e-105, chars_format::scientific, 295,\r\n        \"9.\"\r\n        \"9999999999999996527992122961171506127462400146458051771054626067127835164442863230376212268918567800277146\"\r\n        \"8945249625681491309993020136626037259396997338350656973721648182191714512212327021484803062754864221652807\"\r\n        \"34670414167907363879815853064012686426021044028278339510507066734135150909423828125e-106\"},\r\n    {1e-104, chars_format::scientific, 293,\r\n        \"9.\"\r\n        \"9999999999999992655400208111853233309431766860106204200835434018336969676679921885959864171232602937594912\"\r\n        \"6175103656600915884917475461232328895407073835195433793215114677271690151559621713457418742371132474111899\"\r\n        \"253027677129649636985456904850438396097599136336242509059957228600978851318359375e-105\"},\r\n    {1e-103, chars_format::scientific, 291,\r\n        \"9.\"\r\n        \"9999999999999995753473739991307851563856273489187682257010787657369662066890274961492942649381374827740700\"\r\n        \"0391220431865376224977911201547295586599012637719612337620341481207709640081785959879326198678117872144625\"\r\n        \"7279688487691888384356182054821891706276881794934752178960479795932769775390625e-104\"},\r\n    {1e-102, chars_format::scientific, 288,\r\n        \"9.\"\r\n        \"9999999999999993275014914487744156960316668185922499812070504746143508154721992501066479866862357315624070\"\r\n        \"1018327011653807952929562609295322233645461595700269502096160038058894049264054562741800233632529553718444\"\r\n        \"5480159114575574772754891649767885510036169449676890508271753787994384765625e-103\"},\r\n    {1e-101, chars_format::scientific, 287,\r\n        \"1.\"\r\n        \"0000000000000000517161727690484989105730677364159537554778386272002904693312974831111350122295364137378389\"\r\n        \"3800821542866933565876163585210479432782250659739311511261223096517320888518916526900192486585135348216411\"\r\n        \"421179001055338801084410855940271152519915887069146265275776386260986328125e-101\"},\r\n    {1e-100, chars_format::scientific, 281,\r\n        \"1.\"\r\n        \"0000000000000000199918998026028836196477607885341594201826030059365956992555434676176762886132929895827460\"\r\n        \"7481091185079852827053974965402226843604196126360835628314127871794272492894246908066589163059300043457860\"\r\n        \"230145025079449986855914338755579873208034769049845635890960693359375e-100\"},\r\n    {1e-99, chars_format::scientific, 281,\r\n        \"1.\"\r\n        \"0000000000000000199918998026028836196477607885341594201826030059365956992555434676176762886132929895827460\"\r\n        \"7481091185079852827053974965402226843604196126360835628314127871794272492894246908066589163059300043457860\"\r\n        \"230145025079449986855914338755579873208034769049845635890960693359375e-99\"},\r\n    {1e-98, chars_format::scientific, 279,\r\n        \"9.\"\r\n        \"9999999999999993877776100850210847487897500195676592182679981550153708786161318795442195615570982374570834\"\r\n        \"5025814691449261356691720986931002153083765209119373679695640965032686000950926838525646548331616632759691\"\r\n        \"8109804658117462243096325476277019816961910692043602466583251953125e-99\"},\r\n    {1e-97, chars_format::scientific, 278,\r\n        \"1.\"\r\n        \"0000000000000000362347275614230386486015179458496381198537636440236074215343295235503271551048096227501536\"\r\n        \"2076793128266838165330935538744052169263360047450615280383040626852473271454077752909394064704527719494238\"\r\n        \"439954420779105059740904555554141808215717901475727558135986328125e-97\"},\r\n    {1e-96, chars_format::scientific, 273,\r\n        \"9.\"\r\n        \"9999999999999990629210549086179841697146068732580852248447853932751364330404107608912022317267655741089325\"\r\n        \"3111775827709554591152509520094495639900486787323780638317385863868670429754309941669548515427063112032127\"\r\n        \"6147925518186447666098282116564632815425284206867218017578125e-97\"},\r\n    {1e-95, chars_format::scientific, 272,\r\n        \"9.\"\r\n        \"9999999999999998945538361602099216521469733278105946480082100633301366137142568246429265960924171922801988\"\r\n        \"8411715318883203910932890875195952313649679547120498824245718922848550292017649197621159479662720125094691\"\r\n        \"957033611640984498321327311742834353935904800891876220703125e-96\"},\r\n    {1e-94, chars_format::scientific, 269,\r\n        \"9.\"\r\n        \"9999999999999995619007236595731466591740267459895908787428401953081365414447183991422368503461565450116923\"\r\n        \"4291739522413744183020738333155369644150002443201811549874385699256598347112313495240515093968457319869666\"\r\n        \"220137187712048605636727671708285924978554248809814453125e-95\"},\r\n    {1e-93, chars_format::scientific, 266,\r\n        \"9.\"\r\n        \"9999999999999990296557436585543066704173122150759848479182484064729364258134569183411332571521395093820818\"\r\n        \"7699778248062608618361294265890437372950519076931911910880252541509475235263776371431484076857636831509625\"\r\n        \"041102909425751177341368247653008438646793365478515625e-94\"},\r\n    {1e-92, chars_format::scientific, 265,\r\n        \"9.\"\r\n        \"9999999999999998812477116601844506524280554645377544972375952686092566108234752876228990062625667663894586\"\r\n        \"2246916287024425521816404773514329006869692462963751333270865593904872214221435769525933704234949612885690\"\r\n        \"92755775468382706261394332614145241677761077880859375e-93\"},\r\n    {1e-91, chars_format::scientific, 264,\r\n        \"1.\"\r\n        \"0000000000000000221884498860836508245232352764322462356965334013463784684827482635335605305906737669192409\"\r\n        \"3206577150260915228319844897656388566043736181737648710222711081486303100580449952876371355518587472543611\"\r\n        \"7282139692787057416722973357536830008029937744140625e-91\"},\r\n    {1e-90, chars_format::scientific, 260,\r\n        \"9.\"\r\n        \"9999999999999999493750691003148621709889149244946960691831430175801622256242767571654402661914009469500487\"\r\n        \"6210687330141370874092813614124240337583226333846298487062114638096503972538048521373489674425134635395776\"\r\n        \"198474142304473133435749332420527935028076171875e-91\"},\r\n    {1e-89, chars_format::scientific, 259,\r\n        \"1.\"\r\n        \"0000000000000000385390156717149495889778415468219122129634648610993958160349406162237704329735939702537825\"\r\n        \"6557882200608982112866183019402767285414984310749460027132610852092294722576437013319784788364231877946032\"\r\n        \"19323390230766079866953077726066112518310546875e-89\"},\r\n    {1e-88, chars_format::scientific, 256,\r\n        \"9.\"\r\n        \"9999999999999993389539464367463749646836141632804995845510351868008479170090955900642705772290466891271611\"\r\n        \"1095298783813540517696190402259434814389962850738675989092523202139483418021198264819388181521076833705412\"\r\n        \"17106330922348433887236751616001129150390625e-89\"},\r\n    {1e-87, chars_format::scientific, 255,\r\n        \"1.\"\r\n        \"0000000000000000176102914661068871704759455207231397620617925926155336111681344047803017579234561099855692\"\r\n        \"7468211736163456500646870223567402524619786705614341541487939145716625446421573575952215594321807039030933\"\r\n        \"9980083880305983257130719721317291259765625e-87\"},\r\n    {1e-86, chars_format::scientific, 252,\r\n        \"1.\"\r\n        \"0000000000000000845822089240526869096820128042392116049471438517638926667419142813994015180838972628438518\"\r\n        \"0555157222389138459748671170240569759164419042046720695550888606118767130117136575528437015257566523559248\"\r\n        \"2227300337171982391737401485443115234375e-86\"},\r\n    {1e-85, chars_format::scientific, 248,\r\n        \"9.\"\r\n        \"9999999999999997742714099133940732695230515061349665633058183712651817782386647880884190182719141827059975\"\r\n        \"6160444444280473251857896555635021838930073037549140490501694694753404362042357762064827417603513483139454\"\r\n        \"631754006186383776366710662841796875e-86\"},\r\n    {1e-84, chars_format::scientific, 244,\r\n        \"1.\"\r\n        \"0000000000000000345765105554531564377414825658805446289260815782664512385801586401904736971641012020430008\"\r\n        \"4916904592673962596952659796724604890704426897510544260517219675685168006291116202511525020958866108444773\"\r\n        \"60160453827120363712310791015625e-84\"},\r\n    {1e-83, chars_format::scientific, 244,\r\n        \"1.\"\r\n        \"0000000000000000345765105554531564377414825658805446289260815782664512385801586401904736971641012020430008\"\r\n        \"4916904592673962596952659796724604890704426897510544260517219675685168006291116202511525020958866108444773\"\r\n        \"60160453827120363712310791015625e-83\"},\r\n    {1e-82, chars_format::scientific, 237,\r\n        \"9.\"\r\n        \"9999999999999996142531751338755757593133547433872322400384190960733692081210467362198499913285667881432745\"\r\n        \"0118036029191910490910660160383934259858098175033375898393954117365887165799092568410709035847672154773135\"\r\n        \"8441524207592010498046875e-83\"},\r\n    {1e-81, chars_format::scientific, 237,\r\n        \"9.\"\r\n        \"9999999999999996142531751338755757593133547433872322400384190960733692081210467362198499913285667881432745\"\r\n        \"0118036029191910490910660160383934259858098175033375898393954117365887165799092568410709035847672154773135\"\r\n        \"8441524207592010498046875e-82\"},\r\n    {1e-80, chars_format::scientific, 237,\r\n        \"9.\"\r\n        \"9999999999999996142531751338755757593133547433872322400384190960733692081210467362198499913285667881432745\"\r\n        \"0118036029191910490910660160383934259858098175033375898393954117365887165799092568410709035847672154773135\"\r\n        \"8441524207592010498046875e-81\"},\r\n    {1e-79, chars_format::scientific, 233,\r\n        \"9.\"\r\n        \"9999999999999999887872835092514419317813078520813578332402861996080345150934830450505121252485387470740823\"\r\n        \"0432153096736340815962020317497336959217417624670274052264414348782613129120472130243434116803058486766531\"\r\n        \"132161617279052734375e-80\"},\r\n    {1e-78, chars_format::scientific, 233,\r\n        \"9.\"\r\n        \"9999999999999999887872835092514419317813078520813578332402861996080345150934830450505121252485387470740823\"\r\n        \"0432153096736340815962020317497336959217417624670274052264414348782613129120472130243434116803058486766531\"\r\n        \"132161617279052734375e-79\"},\r\n    {1e-77, chars_format::scientific, 228,\r\n        \"9.\"\r\n        \"9999999999999992696817954285297788806428378833886366942927013608214771257064053320956408281221925859269313\"\r\n        \"2229048327051034591863408815839603776447524281367429596833130704462499279543423371524601961368716729339212\"\r\n        \"1791839599609375e-78\"},\r\n    {1e-76, chars_format::scientific, 228,\r\n        \"9.\"\r\n        \"9999999999999992696817954285297788806428378833886366942927013608214771257064053320956408281221925859269313\"\r\n        \"2229048327051034591863408815839603776447524281367429596833130704462499279543423371524601961368716729339212\"\r\n        \"1791839599609375e-77\"},\r\n    {1e-75, chars_format::scientific, 223,\r\n        \"9.\"\r\n        \"9999999999999995765001370096376884491285850700308643802436708920370749451782251562897192482294336146830490\"\r\n        \"7462373028783431914145483056546903267762678774509976564483811726039081188696297508577970347687369212508201\"\r\n        \"59912109375e-76\"},\r\n    {1e-74, chars_format::scientific, 223,\r\n        \"9.\"\r\n        \"9999999999999995765001370096376884491285850700308643802436708920370749451782251562897192482294336146830490\"\r\n        \"7462373028783431914145483056546903267762678774509976564483811726039081188696297508577970347687369212508201\"\r\n        \"59912109375e-75\"},\r\n    {1e-73, chars_format::scientific, 221,\r\n        \"9.\"\r\n        \"9999999999999999692276142334558126967903414689329158182609118919930401541021545312581396259667021314908797\"\r\n        \"9761028647000900486666538084652246616646076525732436683076683433657106032411976404006281882175244390964508\"\r\n        \"056640625e-74\"},\r\n    {1e-72, chars_format::scientific, 218,\r\n        \"9.\"\r\n        \"9999999999999996550456324544013132986609363498112746678471190920282679869630110312834033237768873180446152\"\r\n        \"1922104152426925628649694062167971937539358324754468588202386067562686157439433287663632654584944248199462\"\r\n        \"890625e-73\"},\r\n    {1e-71, chars_format::scientific, 215,\r\n        \"9.\"\r\n        \"9999999999999991523544616079141142616538881592166488271850506120846325195403814313238252402731836165305918\"\r\n        \"9379824961108565855822743626193132450968609203189719636403510281811614357483364301515393890440464019775390\"\r\n        \"625e-72\"},\r\n    {1e-70, chars_format::scientific, 214,\r\n        \"9.\"\r\n        \"9999999999999999566603349622936327208651652641680501722443601799944492674165887912591501738791095389530292\"\r\n        \"1447471667217941492345864323752875629481807797693317959281711539013329237413074679352575913071632385253906\"\r\n        \"25e-71\"},\r\n    {1e-69, chars_format::scientific, 210,\r\n        \"9.\"\r\n        \"9999999999999996349379856205418253371806544221874896342206363528305225682661058472850202004367391699840542\"\r\n        \"86204129847741912377366160447289783580765283598918786301304310361326432854411905282177031040191650390625e-\"\r\n        \"70\"},\r\n    {1e-68, chars_format::scientific, 210,\r\n        \"1.\"\r\n        \"0000000000000000664449503514147608964971089116525283355896552599755088005547651268002236115452324350684774\"\r\n        \"05667000768594192052486210537605449626573422560856484483414528645350838331751219811849296092987060546875e-\"\r\n        \"68\"},\r\n    {1e-67, chars_format::scientific, 207,\r\n        \"9.\"\r\n        \"9999999999999994290356820418206686116225674833199308898854531034456094808097967631415770174336221338439103\"\r\n        \"32110954280101910747866971461536841043771495196989574594736115142890042761791846714913845062255859375e-\"\r\n        \"68\"},\r\n    {1e-66, chars_format::scientific, 204,\r\n        \"9.\"\r\n        \"9999999999999997584793677677745193725155065855080248808217463024614704207398912977710861102386093916681406\"\r\n        \"58660035188325913355065673838741549102961556640076313325245227492388266909983940422534942626953125e-67\"},\r\n    {1e-65, chars_format::scientific, 202,\r\n        \"9.\"\r\n        \"9999999999999992313694706062483581550868040220070744953236771840360929168517400423638715617506297791493721\"\r\n        \"361815057351675091835477500352140162082574583311375313564306477331911082728765904903411865234375e-66\"},\r\n    {1e-64, chars_format::scientific, 200,\r\n        \"9.\"\r\n        \"9999999999999996530573883354692871290297660728078348037221324787763949199622610466896432005410134691643869\"\r\n        \"5416432929769423252076208907803604252402073697828855693148231154054883518256247043609619140625e-65\"},\r\n    {1e-63, chars_format::scientific, 199,\r\n        \"1.\"\r\n        \"0000000000000000665108390885599516666492874994729659543878425186153119727427511457071495133637934325200422\"\r\n        \"517323105847758368530076502780808905681852605731451018311606304678207379765808582305908203125e-63\"},\r\n    {1e-62, chars_format::scientific, 193,\r\n        \"1.\"\r\n        \"0000000000000000395228123538898122123169379282217172946503413797519326445436778014303001284812088763590813\"\r\n        \"033814098767741265594259325793402808839764107397274361943573239841498434543609619140625e-62\"},\r\n    {1e-61, chars_format::scientific, 193,\r\n        \"1.\"\r\n        \"0000000000000000395228123538898122123169379282217172946503413797519326445436778014303001284812088763590813\"\r\n        \"033814098767741265594259325793402808839764107397274361943573239841498434543609619140625e-61\"},\r\n    {1e-60, chars_format::scientific, 190,\r\n        \"9.\"\r\n        \"9999999999999997043346391313425520922612302581852072572233846426168156435405004008156570318179241258702127\"\r\n        \"560310406428974820785673527056432009240175516617821216414085938595235347747802734375e-61\"},\r\n    {1e-59, chars_format::scientific, 186,\r\n        \"1.\"\r\n        \"0000000000000000257049426657387008116987749477410779808647407966538824285057522491605532434213255836046692\"\r\n        \"97825748714277250889112093117585088725661479625017591388314031064510345458984375e-59\"},\r\n    {1e-58, chars_format::scientific, 186,\r\n        \"1.\"\r\n        \"0000000000000000257049426657387008116987749477410779808647407966538824285057522491605532434213255836046692\"\r\n        \"97825748714277250889112093117585088725661479625017591388314031064510345458984375e-58\"},\r\n    {1e-57, chars_format::scientific, 184,\r\n        \"9.\"\r\n        \"9999999999999995495744986240501044053378048768020469428246581119186532239157342153944919191472312470207982\"\r\n        \"938076356229324745710523507339850487508903231770318598137237131595611572265625e-58\"},\r\n    {1e-56, chars_format::scientific, 182,\r\n        \"1.\"\r\n        \"0000000000000000398544412264054388859317738397532526381811957937462858497285880146847740537226460753851871\"\r\n        \"9151474574467405157551346472642240549577596908648047246970236301422119140625e-56\"},\r\n    {1e-55, chars_format::scientific, 179,\r\n        \"9.\"\r\n        \"9999999999999999457604583227187704838617738531429373476853980305059490181551356500726746075842050168752993\"\r\n        \"1709955247404289379029075578142991831409602809799253009259700775146484375e-56\"},\r\n    {1e-54, chars_format::scientific, 176,\r\n        \"1.\"\r\n        \"0000000000000000307987621475787265184226545488654608574986645956071476601459731247492727351298009606456557\"\r\n        \"3955378764522009913621658689676652276290269583114422857761383056640625e-54\"},\r\n    {1e-53, chars_format::scientific, 176,\r\n        \"1.\"\r\n        \"0000000000000000307987621475787265184226545488654608574986645956071476601459731247492727351298009606456557\"\r\n        \"3955378764522009913621658689676652276290269583114422857761383056640625e-53\"},\r\n    {1e-52, chars_format::scientific, 169,\r\n        \"1.\"\r\n        \"0000000000000000076162237057823428575993091641927138989513847283709538948144790065143893595321174669124552\"\r\n        \"225337349106179808916165796528474629667471162974834442138671875e-52\"},\r\n    {1e-51, chars_format::scientific, 169,\r\n        \"1.\"\r\n        \"0000000000000000076162237057823428575993091641927138989513847283709538948144790065143893595321174669124552\"\r\n        \"225337349106179808916165796528474629667471162974834442138671875e-51\"},\r\n    {1e-50, chars_format::scientific, 169,\r\n        \"1.\"\r\n        \"0000000000000000076162237057823428575993091641927138989513847283709538948144790065143893595321174669124552\"\r\n        \"225337349106179808916165796528474629667471162974834442138671875e-50\"},\r\n    {1e-49, chars_format::scientific, 165,\r\n        \"9.\"\r\n        \"9999999999999993639946561258385225154999214247803524229414097622136664771612907529682762969603377416406323\"\r\n        \"42481329099202736442053573995281112729571759700775146484375e-50\"},\r\n    {1e-48, chars_format::scientific, 160,\r\n        \"9.\"\r\n        \"9999999999999997438173659562304724144296122072586385917800431070114651283524903861286055227527841029653896\"\r\n        \"133378731029238417615800926796509884297847747802734375e-49\"},\r\n    {1e-47, chars_format::scientific, 160,\r\n        \"9.\"\r\n        \"9999999999999997438173659562304724144296122072586385917800431070114651283524903861286055227527841029653896\"\r\n        \"133378731029238417615800926796509884297847747802734375e-48\"},\r\n    {1e-46, chars_format::scientific, 159,\r\n        \"1.\"\r\n        \"0000000000000000229990434539132168285059616408830844887893493788352647401877225916573826931767115445461078\"\r\n        \"92003424942768685657057403659564442932605743408203125e-46\"},\r\n    {1e-45, chars_format::scientific, 156,\r\n        \"9.\"\r\n        \"9999999999999998410519796728108115885556130475730798510027332432797015830574374922176498045556503714645274\"\r\n        \"74677148367876444723378881462849676609039306640625e-46\"},\r\n    {1e-44, chars_format::scientific, 154,\r\n        \"9.\"\r\n        \"9999999999999995299012157797537262313524103585668678214901248072213449280016067527327081027864783122672863\"\r\n        \"183914675200281152456227573566138744354248046875e-45\"},\r\n    {1e-43, chars_format::scientific, 152,\r\n        \"1.\"\r\n        \"0000000000000000774504271351982067660165221114591715939540558551454771548224929710672474909863166549056250\"\r\n        \"9435341909114214331566472537815570831298828125e-43\"},\r\n    {1e-42, chars_format::scientific, 150,\r\n        \"1.\"\r\n        \"0000000000000000376231293568868998402945121672663764541764419753300075029753466364131749531598626313283782\"\r\n        \"26348851942617557142511941492557525634765625e-42\"},\r\n    {1e-41, chars_format::scientific, 148,\r\n        \"1.\"\r\n        \"0000000000000000057612911342378542997169042119121403423543508714776317814976295686899169228986994124665807\"\r\n        \"319451982237978882039897143840789794921875e-41\"},\r\n    {1e-40, chars_format::scientific, 142,\r\n        \"9.\"\r\n        \"9999999999999992929287939988014500233064511906197367398133222223193004995110860615409765027190768719826674\"\r\n        \"537642929863068275153636932373046875e-41\"},\r\n    {1e-39, chars_format::scientific, 142,\r\n        \"9.\"\r\n        \"9999999999999992929287939988014500233064511906197367398133222223193004995110860615409765027190768719826674\"\r\n        \"537642929863068275153636932373046875e-40\"},\r\n    {1e-38, chars_format::scientific, 138,\r\n        \"9.\"\r\n        \"9999999999999996191940173987276763588211566534471145248715351257676278874429088350271387325933882331274737\"\r\n        \"96457707067020237445831298828125e-39\"},\r\n    {1e-37, chars_format::scientific, 138,\r\n        \"1.\"\r\n        \"0000000000000000663242732278491600632468214134494723437057816416802275528824741710182857868191184588790854\"\r\n        \"09307663212530314922332763671875e-37\"},\r\n    {1e-36, chars_format::scientific, 134,\r\n        \"9.\"\r\n        \"9999999999999994103842744227748915040917451572375927424342788675606983591665422599959949054738289619947977\"\r\n        \"3713392205536365509033203125e-37\"},\r\n    {1e-35, chars_format::scientific, 134,\r\n        \"1.\"\r\n        \"0000000000000000078575451945823803039225861945108062446233498893822872849650915300095655152256418629619361\"\r\n        \"1269700340926647186279296875e-35\"},\r\n    {1e-34, chars_format::scientific, 130,\r\n        \"9.\"\r\n        \"9999999999999992767460389181651091970649217996634988016744348623082634610696676519760628561173110284698850\"\r\n        \"591666996479034423828125e-35\"},\r\n    {1e-33, chars_format::scientific, 127,\r\n        \"1.\"\r\n        \"0000000000000000559673099762419019344522426032374800632968937312731638482799663888967410529939883190309046\"\r\n        \"767652034759521484375e-33\"},\r\n    {1e-32, chars_format::scientific, 127,\r\n        \"1.\"\r\n        \"0000000000000000559673099762419019344522426032374800632968937312731638482799663888967410529939883190309046\"\r\n        \"767652034759521484375e-32\"},\r\n    {1e-31, chars_format::scientific, 117,\r\n        \"1.\"\r\n        \"0000000000000000833364206075859853509313360268686545023645097835488625154102063086192231367022031918168067\"\r\n        \"93212890625e-31\"},\r\n    {1e-30, chars_format::scientific, 117,\r\n        \"1.\"\r\n        \"0000000000000000833364206075859853509313360268686545023645097835488625154102063086192231367022031918168067\"\r\n        \"93212890625e-30\"},\r\n    {1e-29, chars_format::scientific, 119,\r\n        \"9.\"\r\n        \"9999999999999994320657417510427825855837769787704137433831559589728533970337791964011486811614304315298795\"\r\n        \"7000732421875e-30\"},\r\n    {1e-28, chars_format::scientific, 117,\r\n        \"9.\"\r\n        \"9999999999999997123254346160061967703296936367536399994355443342760077484474359743593652183335507288575172\"\r\n        \"42431640625e-29\"},\r\n    {1e-27, chars_format::scientific, 111,\r\n        \"1.\"\r\n        \"0000000000000000384948697491918390813719893615913383013961276435003578191840212241459084907546639442443847\"\r\n        \"65625e-27\"},\r\n    {1e-26, chars_format::scientific, 111,\r\n        \"1.\"\r\n        \"0000000000000000384948697491918390813719893615913383013961276435003578191840212241459084907546639442443847\"\r\n        \"65625e-26\"},\r\n    {1e-25, chars_format::scientific, 111,\r\n        \"1.\"\r\n        \"0000000000000000384948697491918390813719893615913383013961276435003578191840212241459084907546639442443847\"\r\n        \"65625e-25\"},\r\n    {1e-24, chars_format::scientific, 107,\r\n        \"9.\"\r\n        \"9999999999999992370049955170282463130006189848140882691706936497618579684498740789422299712896347045898437\"\r\n        \"5e-25\"},\r\n    {1e-23, chars_format::scientific, 105,\r\n        \"9.\"\r\n        \"999999999999999604346980148993092553230786866765862587503680141039208439934782290947623550891876220703125e\"\r\n        \"-24\"},\r\n    {1e-22, chars_format::scientific, 103,\r\n        \"1.\"\r\n        \"0000000000000000485967743265708723529783189783450120951502847720104849571498561999760568141937255859375e-\"\r\n        \"22\"},\r\n    {1e-21, chars_format::scientific, 100,\r\n        \"9.9999999999999990753745222789637139672993451167553075691041795935998237609965144656598567962646484375e-\"\r\n        \"22\"},\r\n    {1e-20, chars_format::scientific, 98,\r\n        \"9.99999999999999945153271454209571651729503702787392447107715776066783064379706047475337982177734375e-21\"},\r\n    {1e-19, chars_format::scientific, 94,\r\n        \"9.9999999999999997524592683526013185572915905567688179926555402943222361500374972820281982421875e-20\"},\r\n    {1e-18, chars_format::scientific, 92,\r\n        \"1.00000000000000007154242405462192450852805618492324772617063644020163337700068950653076171875e-18\"},\r\n    {1e-17, chars_format::scientific, 92,\r\n        \"1.00000000000000007154242405462192450852805618492324772617063644020163337700068950653076171875e-17\"},\r\n    {1e-16, chars_format::scientific, 87,\r\n        \"9.999999999999999790977867240346035618411149408467364363417573258630000054836273193359375e-17\"},\r\n    {1e-15, chars_format::scientific, 86,\r\n        \"1.00000000000000007770539987666107923830718560119501514549256171449087560176849365234375e-15\"},\r\n    {1e-14, chars_format::scientific, 84,\r\n        \"9.999999999999999988193093545598986971343290729163921781719182035885751247406005859375e-15\"},\r\n    {1e-13, chars_format::scientific, 82,\r\n        \"1.0000000000000000303737455634003709136034716842278413651001756079494953155517578125e-13\"},\r\n    {1e-12, chars_format::scientific, 79,\r\n        \"9.9999999999999997988664762925561536725284350612952266601496376097202301025390625e-13\"},\r\n    {1e-11, chars_format::scientific, 77,\r\n        \"9.99999999999999939496969281939810930172340963650867706746794283390045166015625e-12\"},\r\n    {1e-10, chars_format::scientific, 76,\r\n        \"1.0000000000000000364321973154977415791655470655996396089904010295867919921875e-10\"},\r\n    {1e-09, chars_format::scientific, 73,\r\n        \"1.0000000000000000622815914577798564188970686927859787829220294952392578125e-09\"},\r\n    {1e-08, chars_format::scientific, 70,\r\n        \"1.0000000000000000209225608301284726753266340892878361046314239501953125e-08\"},\r\n    {1e-07, chars_format::scientific, 65, \"9.99999999999999954748111825886258685613938723690807819366455078125e-08\"},\r\n    {1e-06, chars_format::scientific, 65, \"9.99999999999999954748111825886258685613938723690807819366455078125e-07\"},\r\n    {1e-05, chars_format::scientific, 64, \"1.0000000000000000818030539140313095458623138256371021270751953125e-05\"},\r\n    {1e-04, chars_format::scientific, 62, \"1.00000000000000004792173602385929598312941379845142364501953125e-04\"},\r\n    {1e-03, chars_format::scientific, 57, \"1.000000000000000020816681711721685132943093776702880859375e-03\"},\r\n    {1e-02, chars_format::scientific, 57, \"1.000000000000000020816681711721685132943093776702880859375e-02\"},\r\n    {1e-01, chars_format::scientific, 54, \"1.000000000000000055511151231257827021181583404541015625e-01\"},\r\n    {1e+00, chars_format::scientific, 0, \"1e+00\"},\r\n    {1e+01, chars_format::scientific, 0, \"1e+01\"},\r\n    {1e+02, chars_format::scientific, 0, \"1e+02\"},\r\n    {1e+03, chars_format::scientific, 0, \"1e+03\"},\r\n    {1e+04, chars_format::scientific, 0, \"1e+04\"},\r\n    {1e+05, chars_format::scientific, 0, \"1e+05\"},\r\n    {1e+06, chars_format::scientific, 0, \"1e+06\"},\r\n    {1e+07, chars_format::scientific, 0, \"1e+07\"},\r\n    {1e+08, chars_format::scientific, 0, \"1e+08\"},\r\n    {1e+09, chars_format::scientific, 0, \"1e+09\"},\r\n    {1e+10, chars_format::scientific, 0, \"1e+10\"},\r\n    {1e+11, chars_format::scientific, 0, \"1e+11\"},\r\n    {1e+12, chars_format::scientific, 0, \"1e+12\"},\r\n    {1e+13, chars_format::scientific, 0, \"1e+13\"},\r\n    {1e+14, chars_format::scientific, 0, \"1e+14\"},\r\n    {1e+15, chars_format::scientific, 0, \"1e+15\"},\r\n    {1e+16, chars_format::scientific, 0, \"1e+16\"},\r\n    {1e+17, chars_format::scientific, 0, \"1e+17\"},\r\n    {1e+18, chars_format::scientific, 0, \"1e+18\"},\r\n    {1e+19, chars_format::scientific, 0, \"1e+19\"},\r\n    {1e+20, chars_format::scientific, 0, \"1e+20\"},\r\n    {1e+21, chars_format::scientific, 0, \"1e+21\"},\r\n    {1e+22, chars_format::scientific, 0, \"1e+22\"},\r\n    {1e+23, chars_format::scientific, 22, \"9.9999999999999991611392e+22\"},\r\n    {1e+24, chars_format::scientific, 23, \"9.99999999999999983222784e+23\"},\r\n    {1e+25, chars_format::scientific, 25, \"1.0000000000000000905969664e+25\"},\r\n    {1e+26, chars_format::scientific, 26, \"1.00000000000000004764729344e+26\"},\r\n    {1e+27, chars_format::scientific, 27, \"1.000000000000000013287555072e+27\"},\r\n    {1e+28, chars_format::scientific, 27, \"9.999999999999999583119736832e+27\"},\r\n    {1e+29, chars_format::scientific, 28, \"9.9999999999999991433150857216e+28\"},\r\n    {1e+30, chars_format::scientific, 30, \"1.000000000000000019884624838656e+30\"},\r\n    {1e+31, chars_format::scientific, 30, \"9.999999999999999635896294965248e+30\"},\r\n    {1e+32, chars_format::scientific, 32, \"1.00000000000000005366162204393472e+32\"},\r\n    {1e+33, chars_format::scientific, 32, \"9.99999999999999945575230987042816e+32\"},\r\n    {1e+34, chars_format::scientific, 32, \"9.99999999999999945575230987042816e+33\"},\r\n    {1e+35, chars_format::scientific, 34, \"9.9999999999999996863366107917975552e+34\"},\r\n    {1e+36, chars_format::scientific, 36, \"1.000000000000000042420637374017961984e+36\"},\r\n    {1e+37, chars_format::scientific, 36, \"9.999999999999999538762658202121142272e+36\"},\r\n    {1e+38, chars_format::scientific, 37, \"9.9999999999999997748809823456034029568e+37\"},\r\n    {1e+39, chars_format::scientific, 38, \"9.99999999999999939709166371603178586112e+38\"},\r\n    {1e+40, chars_format::scientific, 40, \"1.0000000000000000303786028427003666890752e+40\"},\r\n    {1e+41, chars_format::scientific, 41, \"1.00000000000000000620008645040778319495168e+41\"},\r\n    {1e+42, chars_format::scientific, 42, \"1.000000000000000044885712678075916785549312e+42\"},\r\n    {1e+43, chars_format::scientific, 43, \"1.0000000000000000139372116959414099130712064e+43\"},\r\n    {1e+44, chars_format::scientific, 44, \"1.00000000000000008821361405306422640701865984e+44\"},\r\n    {1e+45, chars_format::scientific, 44, \"9.99999999999999929757289024535551219930759168e+44\"},\r\n    {1e+46, chars_format::scientific, 45, \"9.999999999999999931398190359470212947659194368e+45\"},\r\n    {1e+47, chars_format::scientific, 47, \"1.00000000000000004384584304507619735463404765184e+47\"},\r\n    {1e+48, chars_format::scientific, 47, \"1.00000000000000004384584304507619735463404765184e+48\"},\r\n    {1e+49, chars_format::scientific, 48, \"9.999999999999999464902769475481793196872414789632e+48\"},\r\n    {1e+50, chars_format::scientific, 49, \"1.0000000000000000762976984109188700329496497094656e+50\"},\r\n    {1e+51, chars_format::scientific, 50, \"9.99999999999999993220948674361627976461708441944064e+50\"},\r\n    {1e+52, chars_format::scientific, 50, \"9.99999999999999993220948674361627976461708441944064e+51\"},\r\n    {1e+53, chars_format::scientific, 50, \"9.99999999999999993220948674361627976461708441944064e+52\"},\r\n    {1e+54, chars_format::scientific, 54, \"1.000000000000000078291540404596243842305360299886116864e+54\"},\r\n    {1e+55, chars_format::scientific, 55, \"1.0000000000000000102350670204085511496304388135324745728e+55\"},\r\n    {1e+56, chars_format::scientific, 56, \"1.00000000000000009190283508143378238084034459715684532224e+56\"},\r\n    {1e+57, chars_format::scientific, 57, \"1.000000000000000048346692115553659057528394845890514255872e+57\"},\r\n    {1e+58, chars_format::scientific, 57, \"9.999999999999999438119489974413630815797154428513196965888e+57\"},\r\n    {1e+59, chars_format::scientific, 58, \"9.9999999999999997168788049560464200849936328366177157906432e+58\"},\r\n    {1e+60, chars_format::scientific, 59, \"9.99999999999999949387135297074018866963645011013410073083904e+59\"},\r\n    {1e+61, chars_format::scientific, 59, \"9.99999999999999949387135297074018866963645011013410073083904e+60\"},\r\n    {1e+62, chars_format::scientific, 62, \"1.00000000000000003502199685943161173046080317798311825604870144e+62\"},\r\n    {1e+63, chars_format::scientific, 63, \"1.000000000000000057857959942726969827393378689175040438172647424e+63\"},\r\n    {1e+64, chars_format::scientific, 64, \"1.0000000000000000213204190094543968723012578712679649467743338496e+64\"},\r\n    {1e+65, chars_format::scientific, 64, \"9.9999999999999999209038626283633850822756121694230455365568299008e+64\"},\r\n    {1e+66, chars_format::scientific, 65, \"9.99999999999999945322333868247445125709646570021247924665841614848e+65\"},\r\n    {1e+67, chars_format::scientific, 66, \"9.999999999999999827367757839185598317239782875580932278577147150336e+66\"},\r\n    {1e+68, chars_format::scientific, 67, \"9.9999999999999995280522225138166806691251291352861698530421623488512e+67\"},\r\n    {1e+69, chars_format::scientific, 68, \"1.00000000000000007253143638152923512615837440964652195551821015547904e+69\"},\r\n    {1e+70, chars_format::scientific, 68, \"1.00000000000000007253143638152923512615837440964652195551821015547904e+70\"},\r\n    {1e+71, chars_format::scientific, 71,\r\n        \"1.00000000000000004188152556421145795899143386664033828314342771180699648e+71\"},\r\n    {1e+72, chars_format::scientific, 71,\r\n        \"9.99999999999999943801810948794571024057224129020550531544123892056457216e+71\"},\r\n    {1e+73, chars_format::scientific, 72,\r\n        \"9.999999999999999830336967949613257980309080240684656321838454199566729216e+72\"},\r\n    {1e+74, chars_format::scientific, 73,\r\n        \"9.9999999999999995164818811802792197885196090803013355167206819763650035712e+73\"},\r\n    {1e+75, chars_format::scientific, 74,\r\n        \"9.99999999999999926539781176481198923508803215199467887262646419780362305536e+74\"},\r\n    {1e+76, chars_format::scientific, 76,\r\n        \"1.0000000000000000470601344959054695891559601407866630764278709534898249531392e+76\"},\r\n    {1e+77, chars_format::scientific, 76,\r\n        \"9.9999999999999998278261272554585856747747644714015897553975120217811154108416e+76\"},\r\n    {1e+78, chars_format::scientific, 78,\r\n        \"1.000000000000000008493621433689702976148869924598760615894999102702796905906176e+78\"},\r\n    {1e+79, chars_format::scientific, 78,\r\n        \"9.999999999999999673560075006595519222746403606649979913266024618633003221909504e+78\"},\r\n    {1e+80, chars_format::scientific, 80,\r\n        \"1.00000000000000000026609864708367276537402401181200809098131977453489758916313088e+80\"},\r\n    {1e+81, chars_format::scientific, 80,\r\n        \"9.99999999999999921281879895665782741935503249059183851809998224123064148429897728e+80\"},\r\n    {1e+82, chars_format::scientific, 81,\r\n        \"9.999999999999999634067965630886574211027143225273567793680363843427086501542887424e+81\"},\r\n    {1e+83, chars_format::scientific, 83,\r\n        \"1.00000000000000003080666323096525690777025204007643346346089744069413985291331436544e+83\"},\r\n    {1e+84, chars_format::scientific, 84,\r\n        \"1.000000000000000057766609898115896702437267127096064137098041863234712334016924614656e+84\"},\r\n    {1e+85, chars_format::scientific, 85,\r\n        \"1.0000000000000000146306952306748730309700429878646550592786107871697963642511482159104e+85\"},\r\n    {1e+86, chars_format::scientific, 85,\r\n        \"1.0000000000000000146306952306748730309700429878646550592786107871697963642511482159104e+86\"},\r\n    {1e+87, chars_format::scientific, 86,\r\n        \"9.99999999999999959416724456350362731491996089648451439669739009806703922950954425516032e+86\"},\r\n    {1e+88, chars_format::scientific, 86,\r\n        \"9.99999999999999959416724456350362731491996089648451439669739009806703922950954425516032e+87\"},\r\n    {1e+89, chars_format::scientific, 88,\r\n        \"9.9999999999999999475366575191804932315794610450682175621941694731908308538307845136842752e+88\"},\r\n    {1e+90, chars_format::scientific, 89,\r\n        \"9.99999999999999966484112715463900049825186092620125502979674597309179755437379230686511104e+89\"},\r\n    {1e+91, chars_format::scientific, 90,\r\n        \"1.000000000000000079562324861280497143156226140166910515938643997348793075220176113414176768e+91\"},\r\n    {1e+92, chars_format::scientific, 92,\r\n        \"1.00000000000000004337729697461918607329029332495193931179177378933611681288968111094132375552e+92\"},\r\n    {1e+93, chars_format::scientific, 92,\r\n        \"1.00000000000000004337729697461918607329029332495193931179177378933611681288968111094132375552e+93\"},\r\n    {1e+94, chars_format::scientific, 94,\r\n        \"1.0000000000000000202188791271559469885760963232143577411377768562080040049981643093586978275328e+94\"},\r\n    {1e+95, chars_format::scientific, 94,\r\n        \"1.0000000000000000202188791271559469885760963232143577411377768562080040049981643093586978275328e+95\"},\r\n    {1e+96, chars_format::scientific, 96,\r\n        \"1.000000000000000049861653971908893017010268485438462151574892930611988399099305815384459015356416e+96\"},\r\n    {1e+97, chars_format::scientific, 97,\r\n        \"1.0000000000000000735758738477112498397576062152177456799245857901351759143802190202050679656153088e+97\"},\r\n    {1e+98, chars_format::scientific, 97,\r\n        \"9.9999999999999999769037024514370800696612547992403838920556863966097586548129676477911932478685184e+97\"},\r\n    {1e+99, chars_format::scientific, 98,\r\n        \"9.99999999999999967336168804116691273849533185806555472917961779471295845921727862608739868455469056e+98\"},\r\n    {1e+100, chars_format::scientific, 100,\r\n        \"1.0000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104e+\"\r\n        \"100\"},\r\n    {1e+101, chars_format::scientific, 100,\r\n        \"9.9999999999999997704951326524533662844684271992415000612999597473199345218078991130326129448151154688e+\"\r\n        \"100\"},\r\n    {1e+102, chars_format::scientific, 100,\r\n        \"9.9999999999999997704951326524533662844684271992415000612999597473199345218078991130326129448151154688e+\"\r\n        \"101\"},\r\n    {1e+103, chars_format::scientific, 103,\r\n        \"1.\"\r\n        \"0000000000000000019156750857346687362159551272651920111528035145993793242039887559612361451081803235328e+\"\r\n        \"103\"},\r\n    {1e+104, chars_format::scientific, 103,\r\n        \"1.\"\r\n        \"0000000000000000019156750857346687362159551272651920111528035145993793242039887559612361451081803235328e+\"\r\n        \"104\"},\r\n    {1e+105, chars_format::scientific, 104,\r\n        \"9.\"\r\n        \"99999999999999938258300825281978540327027364472124478294416212538871491824599713636820527503908255301632e+\"\r\n        \"104\"},\r\n    {1e+106, chars_format::scientific, 106,\r\n        \"1.\"\r\n        \"0000000000000000910359990503684350104604539951754865571545457374840902895351334152154180097541612190564352\"\r\n        \"e+106\"},\r\n    {1e+107, chars_format::scientific, 106,\r\n        \"9.\"\r\n        \"9999999999999996881384047029926983435371269061279689406644211752791525136670645395254002395395884805259264\"\r\n        \"e+106\"},\r\n    {1e+108, chars_format::scientific, 108,\r\n        \"1.\"\r\n        \"0000000000000000339989917130028245949439747197128980477134307148378752717232008332927416163807334459213086\"\r\n        \"72e+108\"},\r\n    {1e+109, chars_format::scientific, 108,\r\n        \"9.\"\r\n        \"9999999999999998185087071883998078647176509643281712479583983698990725543800532982058034243931376762633584\"\r\n        \"64e+108\"},\r\n    {1e+110, chars_format::scientific, 110,\r\n        \"1.\"\r\n        \"0000000000000000235693675141702558332495327950568818631299125392682816684661617325983093615924495102623141\"\r\n        \"0688e+110\"},\r\n    {1e+111, chars_format::scientific, 110,\r\n        \"9.\"\r\n        \"9999999999999995681977264164181575840510447725837828179539621562288260762111148815394293094743232204474889\"\r\n        \"0112e+110\"},\r\n    {1e+112, chars_format::scientific, 111,\r\n        \"9.\"\r\n        \"9999999999999993011993469263043972846733315013897684926158968616472298328309139037619635868942544675772280\"\r\n        \"34048e+111\"},\r\n    {1e+113, chars_format::scientific, 113,\r\n        \"1.\"\r\n        \"0000000000000000155594161294668430242682013969210614333697705804308337811647557032649853899150474476762062\"\r\n        \"8086784e+113\"},\r\n    {1e+114, chars_format::scientific, 113,\r\n        \"1.\"\r\n        \"0000000000000000155594161294668430242682013969210614333697705804308337811647557032649853899150474476762062\"\r\n        \"8086784e+114\"},\r\n    {1e+115, chars_format::scientific, 113,\r\n        \"1.\"\r\n        \"0000000000000000155594161294668430242682013969210614333697705804308337811647557032649853899150474476762062\"\r\n        \"8086784e+115\"},\r\n    {1e+116, chars_format::scientific, 113,\r\n        \"1.\"\r\n        \"0000000000000000155594161294668430242682013969210614333697705804308337811647557032649853899150474476762062\"\r\n        \"8086784e+116\"},\r\n    {1e+117, chars_format::scientific, 117,\r\n        \"1.\"\r\n        \"0000000000000000505554277259950338142282370308030032790204814747222327639770854058242333771050622192524171\"\r\n        \"13236701184e+117\"},\r\n    {1e+118, chars_format::scientific, 117,\r\n        \"9.\"\r\n        \"9999999999999996656499989432737591832415150948634284945877532842287520522749411968203820784902676746951111\"\r\n        \"55514343424e+117\"},\r\n    {1e+119, chars_format::scientific, 118,\r\n        \"9.\"\r\n        \"9999999999999994416755247254933381274972870380190006824232035607637985622760311004411949604741731366073618\"\r\n        \"283536318464e+118\"},\r\n    {1e+120, chars_format::scientific, 119,\r\n        \"9.\"\r\n        \"9999999999999998000346834739420118166880519289700851818864831183077241462742872546478943492999243975477607\"\r\n        \"5181077037056e+119\"},\r\n    {1e+121, chars_format::scientific, 121,\r\n        \"1.\"\r\n        \"0000000000000000373409337471459889719393275754491820381027730410378005080671497101378613371421126415052399\"\r\n        \"029342192009216e+121\"},\r\n    {1e+122, chars_format::scientific, 122,\r\n        \"1.\"\r\n        \"0000000000000000144059475872452738558311186224283126301371231493549892706912613162686325762572645608050543\"\r\n        \"7183296233537536e+122\"},\r\n    {1e+123, chars_format::scientific, 122,\r\n        \"9.\"\r\n        \"9999999999999997770996973140412967005798429759492157739208332266249129088983988607786655884150763168475752\"\r\n        \"2070951350501376e+122\"},\r\n    {1e+124, chars_format::scientific, 123,\r\n        \"9.\"\r\n        \"9999999999999994835318744673121432143947683772820873519605146130849290704870274192525374490890208838852004\"\r\n        \"22613425626021888e+123\"},\r\n    {1e+125, chars_format::scientific, 124,\r\n        \"9.\"\r\n        \"9999999999999992486776161899288204254467086983483846143922597222529419997579302660316349376281765375153005\"\r\n        \"841365553228283904e+124\"},\r\n    {1e+126, chars_format::scientific, 124,\r\n        \"9.\"\r\n        \"9999999999999992486776161899288204254467086983483846143922597222529419997579302660316349376281765375153005\"\r\n        \"841365553228283904e+125\"},\r\n    {1e+127, chars_format::scientific, 126,\r\n        \"9.\"\r\n        \"9999999999999995492910667849794735953002250873835241184796259825178854502911746221543901522980573008687723\"\r\n        \"77386949310916067328e+126\"},\r\n    {1e+128, chars_format::scientific, 126,\r\n        \"1.\"\r\n        \"0000000000000000751744869165182086274714290643524082134829091023577659252424152046645411010977580354282659\"\r\n        \"55038852526326677504e+128\"},\r\n    {1e+129, chars_format::scientific, 128,\r\n        \"9.\"\r\n        \"9999999999999999821744356418524141598892886875941250043654333972994040190590464949711576614226856000977717\"\r\n        \"5966751665376232210432e+128\"},\r\n    {1e+130, chars_format::scientific, 130,\r\n        \"1.\"\r\n        \"0000000000000000597830782460516151851749290252338090708736359498322008205751130936310560341066601403445681\"\r\n        \"992244323541365884452864e+130\"},\r\n    {1e+131, chars_format::scientific, 130,\r\n        \"9.\"\r\n        \"9999999999999991202555500957231813912852864969525730182461368558677581576901282770959939099212034754106974\"\r\n        \"340599870111173348163584e+130\"},\r\n    {1e+132, chars_format::scientific, 131,\r\n        \"9.\"\r\n        \"9999999999999999082956740236127656368660884998248491198409222651766915166559963620104293398654157036960225\"\r\n        \"3175829982724989462249472e+131\"},\r\n    {1e+133, chars_format::scientific, 133,\r\n        \"1.\"\r\n        \"0000000000000000223511723594768599335098409300973759560478836428900264860242343595976203511843100595010152\"\r\n        \"570837624953702918544949248e+133\"},\r\n    {1e+134, chars_format::scientific, 133,\r\n        \"9.\"\r\n        \"9999999999999992148203649670699315007549827372972461504375111049848301607660324472857261615145089428049364\"\r\n        \"457837845490532419930947584e+133\"},\r\n    {1e+135, chars_format::scientific, 134,\r\n        \"9.\"\r\n        \"9999999999999996182969084181493986344923533627678515144540412345510040405565569067619171016459456036870228\"\r\n        \"9580532071091311261383655424e+134\"},\r\n    {1e+136, chars_format::scientific, 136,\r\n        \"1.\"\r\n        \"0000000000000000586640612700740119755462042863897304388093713545509821352053815609504775357961393589804030\"\r\n        \"375857007499376802103616864256e+136\"},\r\n    {1e+137, chars_format::scientific, 137,\r\n        \"1.\"\r\n        \"0000000000000000328415624892049260789870125663596116955123134262587470068987879955440013156277274126839495\"\r\n        \"0478432243557864849063421149184e+137\"},\r\n    {1e+138, chars_format::scientific, 137,\r\n        \"1.\"\r\n        \"0000000000000000328415624892049260789870125663596116955123134262587470068987879955440013156277274126839495\"\r\n        \"0478432243557864849063421149184e+138\"},\r\n    {1e+139, chars_format::scientific, 137,\r\n        \"1.\"\r\n        \"0000000000000000328415624892049260789870125663596116955123134262587470068987879955440013156277274126839495\"\r\n        \"0478432243557864849063421149184e+139\"},\r\n    {1e+140, chars_format::scientific, 140,\r\n        \"1.\"\r\n        \"0000000000000000592838012408148700370636248876704532886485007448299957782847398065202329650801812456915179\"\r\n        \"2237293382948229697163514582401024e+140\"},\r\n    {1e+141, chars_format::scientific, 141,\r\n        \"1.\"\r\n        \"0000000000000000169762192382389597041410451735731067396306010351159977440672169089582623259562551128794084\"\r\n        \"54231155599236459402033650892537856e+141\"},\r\n    {1e+142, chars_format::scientific, 142,\r\n        \"1.\"\r\n        \"0000000000000000508222848402996879704791089448509839788449208028871961714412352270078388372553960191290960\"\r\n        \"287445781834331294577148468377157632e+142\"},\r\n    {1e+143, chars_format::scientific, 143,\r\n        \"1.\"\r\n        \"0000000000000000237454323586511053574086579278286821874734649886702374295420205725681776282160832941293459\"\r\n        \"6913384011607579341316989008157343744e+143\"},\r\n    {1e+144, chars_format::scientific, 143,\r\n        \"1.\"\r\n        \"0000000000000000237454323586511053574086579278286821874734649886702374295420205725681776282160832941293459\"\r\n        \"6913384011607579341316989008157343744e+144\"},\r\n    {1e+145, chars_format::scientific, 144,\r\n        \"9.\"\r\n        \"9999999999999998908706118214091961267848062604013589451800154647253023991102581488541128064576300612966589\"\r\n        \"28320953898584032761523454337112604672e+144\"},\r\n    {1e+146, chars_format::scientific, 145,\r\n        \"9.\"\r\n        \"9999999999999993363366729972462242111019694317846182578926003895619873650143420259298512453325054533017777\"\r\n        \"074930382791057905692427399713177731072e+145\"},\r\n    {1e+147, chars_format::scientific, 146,\r\n        \"9.\"\r\n        \"9999999999999997799638240565766017436482388946780108077225324496926393922910749242692604942326051396976826\"\r\n        \"8415537077468838432306731146395363835904e+146\"},\r\n    {1e+148, chars_format::scientific, 148,\r\n        \"1.\"\r\n        \"0000000000000000489767265751505205795722270035307438887450423745901682635933847561612315292472764637931130\"\r\n        \"646815102767620534329186625852171022761984e+148\"},\r\n    {1e+149, chars_format::scientific, 148,\r\n        \"1.\"\r\n        \"0000000000000000489767265751505205795722270035307438887450423745901682635933847561612315292472764637931130\"\r\n        \"646815102767620534329186625852171022761984e+149\"},\r\n    {1e+150, chars_format::scientific, 149,\r\n        \"9.\"\r\n        \"9999999999999998083559617243737459057312001403031879309116481015410011220367858297629826861622115196270206\"\r\n        \"0266176005440567032331208403948233373515776e+149\"},\r\n    {1e+151, chars_format::scientific, 151,\r\n        \"1.\"\r\n        \"0000000000000000171775323872177191180393104084305455107732328445200031262781885420082626742861173182722545\"\r\n        \"959543542834786931126445173006249634549465088e+151\"},\r\n    {1e+152, chars_format::scientific, 152,\r\n        \"1.\"\r\n        \"0000000000000000462510813590419947400122627239507268849188872720127255375377965092338341988220342513198966\"\r\n        \"2450489690590919397689516441796634752009109504e+152\"},\r\n    {1e+153, chars_format::scientific, 152,\r\n        \"9.\"\r\n        \"9999999999999999973340300412315374485553901911843668628584018802436967952242376167291975956456715844366937\"\r\n        \"8824028710020392594094129030220133015859757056e+152\"},\r\n    {1e+154, chars_format::scientific, 154,\r\n        \"1.\"\r\n        \"0000000000000000369475456880582265409809179829842688451922778552150543659347219597216513109705408327446511\"\r\n        \"753687232667314337003349573404171046192448274432e+154\"},\r\n    {1e+155, chars_format::scientific, 155,\r\n        \"1.\"\r\n        \"0000000000000000071762315409101683040806148118916031180671277214625066168048834012826660698457618933038657\"\r\n        \"3813296762136260081534229469225952733653677113344e+155\"},\r\n    {1e+156, chars_format::scientific, 155,\r\n        \"9.\"\r\n        \"9999999999999998335918022319172171456037227501747053636700761446046841750101255453147787694593874175123738\"\r\n        \"8344363105067534507348164573733465510370326085632e+155\"},\r\n    {1e+157, chars_format::scientific, 155,\r\n        \"9.\"\r\n        \"9999999999999998335918022319172171456037227501747053636700761446046841750101255453147787694593874175123738\"\r\n        \"8344363105067534507348164573733465510370326085632e+156\"},\r\n    {1e+158, chars_format::scientific, 157,\r\n        \"9.\"\r\n        \"9999999999999995287335453651211007997446182781858083179085387749785952239205787068995699003416510776387310\"\r\n        \"061494932420984963311567802202010637287727642443776e+157\"},\r\n    {1e+159, chars_format::scientific, 158,\r\n        \"9.\"\r\n        \"9999999999999992848469398716842077230573347005946906812993088792777240630489412361674028050474620057398167\"\r\n        \"0431418299523701733729688780649419062882836695482368e+158\"},\r\n    {1e+160, chars_format::scientific, 160,\r\n        \"1.\"\r\n        \"0000000000000000065284077450682265568456642148886267118448844545520511777838181142510337509988867035816342\"\r\n        \"470187175785193750117648543530356184548650438281396224e+160\"},\r\n    {1e+161, chars_format::scientific, 161,\r\n        \"1.\"\r\n        \"0000000000000000377458932482281488706616365128202897693308658812017626863753877105047511391965429047846952\"\r\n        \"7765363729011764432297892058199009821165792668120252416e+161\"},\r\n    {1e+162, chars_format::scientific, 161,\r\n        \"9.\"\r\n        \"9999999999999993784993963811639746645052515943896798537572531592268585888236500249285549696404306093489997\"\r\n        \"9621894213003182527093908649335762989920701551401238528e+161\"},\r\n    {1e+163, chars_format::scientific, 161,\r\n        \"9.\"\r\n        \"9999999999999993784993963811639746645052515943896798537572531592268585888236500249285549696404306093489997\"\r\n        \"9621894213003182527093908649335762989920701551401238528e+162\"},\r\n    {1e+164, chars_format::scientific, 164,\r\n        \"1.\"\r\n        \"0000000000000000017833499485879183651456364256030139271070152777012950284778995356204687079928429609987689\"\r\n        \"7036220978235643807646031628623453753183252563447406133248e+164\"},\r\n    {1e+165, chars_format::scientific, 164,\r\n        \"9.\"\r\n        \"9999999999999989948989345183348492723345839974054042033695133885552035712504428261628757034676312089657858\"\r\n        \"5177704871391229197474064067196498264773607101557544845312e+164\"},\r\n    {1e+166, chars_format::scientific, 165,\r\n        \"9.\"\r\n        \"9999999999999994040727605053525830239832961008552982304497691439383022566618638381796002540519505693745473\"\r\n        \"92515068357773127490685649548117139715971745147241514401792e+165\"},\r\n    {1e+167, chars_format::scientific, 167,\r\n        \"1.\"\r\n        \"0000000000000000386089942874195144027940205149135043895442382956857739101649274267019739175454317034355575\"\r\n        \"0902863155030391327289536708508823166797373630632400726786048e+167\"},\r\n    {1e+168, chars_format::scientific, 167,\r\n        \"9.\"\r\n        \"9999999999999993386049483474297456237195021643033151861169282230770064669960364762569243259584594717091455\"\r\n        \"4599698521475539380813444812793279458505403728617494385000448e+167\"},\r\n    {1e+169, chars_format::scientific, 167,\r\n        \"9.\"\r\n        \"9999999999999993386049483474297456237195021643033151861169282230770064669960364762569243259584594717091455\"\r\n        \"4599698521475539380813444812793279458505403728617494385000448e+168\"},\r\n    {1e+170, chars_format::scientific, 170,\r\n        \"1.\"\r\n        \"0000000000000000344190543093124528091771377029741774747069364767506509796263144755389226581474482731849717\"\r\n        \"9085147422915077831721209019419643357959500300321574675254607872e+170\"},\r\n    {1e+171, chars_format::scientific, 170,\r\n        \"9.\"\r\n        \"9999999999999995397220672965687021173298771373910070983074155319629071328494581320833847770616641237372600\"\r\n        \"1850053663010587168093173889073910282723323583537144858509574144e+170\"},\r\n    {1e+172, chars_format::scientific, 172,\r\n        \"1.\"\r\n        \"0000000000000000826871628571058023676436276965152235336326534308832671394311356729372731664122173896717192\"\r\n        \"642523265688348930066834399772699475577180106550229078889679814656e+172\"},\r\n    {1e+173, chars_format::scientific, 173,\r\n        \"1.\"\r\n        \"0000000000000000140391862557997052178246197057012913609383004294502130454865010810818413324356568684461228\"\r\n        \"5763778101906192989276863139689872767772084421689716760605683089408e+173\"},\r\n    {1e+174, chars_format::scientific, 174,\r\n        \"1.\"\r\n        \"0000000000000000689575675368445829376798260983524370990937828305966563206422087545661867996169052854265999\"\r\n        \"82929417458880300383900478261195703581718577367397759832385751351296e+174\"},\r\n    {1e+175, chars_format::scientific, 174,\r\n        \"9.\"\r\n        \"9999999999999993715345246233687641002733075598968732752062506784519246026851033820375767838190908467345488\"\r\n        \"22294900033162112051840457868829614121240178061963384891963422539776e+174\"},\r\n    {1e+176, chars_format::scientific, 176,\r\n        \"1.\"\r\n        \"0000000000000000074489805020743198914419949385831538723596425413126398524678161602637198763739070584084656\"\r\n        \"0260278464628372543383280977318309056924111623883709653889736043921408e+176\"},\r\n    {1e+177, chars_format::scientific, 176,\r\n        \"1.\"\r\n        \"0000000000000000074489805020743198914419949385831538723596425413126398524678161602637198763739070584084656\"\r\n        \"0260278464628372543383280977318309056924111623883709653889736043921408e+177\"},\r\n    {1e+178, chars_format::scientific, 178,\r\n        \"1.\"\r\n        \"0000000000000000524381184475062837195473800154429724610566137243318061834753718863820956830887857615988724\"\r\n        \"636416932177829345401680187244151732297960592357271816907060120777654272e+178\"},\r\n    {1e+179, chars_format::scientific, 178,\r\n        \"9.\"\r\n        \"9999999999999998045549773481514159457876389246726271914145983150114005386328272459269439234497983649422148\"\r\n        \"597943950338419997003168440244384097290815044070304544781216945608327168e+178\"},\r\n    {1e+180, chars_format::scientific, 180,\r\n        \"1.\"\r\n        \"0000000000000000092485460198915984445662103416575466159075213886334065057081183893084549086425022065360818\"\r\n        \"77044340989143693798086218131232373875663313958712699944969706504756133888e+180\"},\r\n    {1e+181, chars_format::scientific, 180,\r\n        \"9.\"\r\n        \"9999999999999991711079150764693652460638170424863814625612440581015385980464426221802125649043062240212862\"\r\n        \"56366562347133135483117101991090685868467907010818055540655879490029748224e+180\"},\r\n    {1e+182, chars_format::scientific, 182,\r\n        \"1.\"\r\n        \"0000000000000000645311987272383955965421075241028916976983595783273580932502028655627150999337451570164538\"\r\n        \"2788895184180192194795092289050635704895322791329123657951217763820802932736e+182\"},\r\n    {1e+183, chars_format::scientific, 182,\r\n        \"9.\"\r\n        \"9999999999999994659487295156522833899352686821948885654457144031359470649375598288696002517909352932499366\"\r\n        \"6087115356131035228239552737388526279268078143523691759154905886843985723392e+182\"},\r\n    {1e+184, chars_format::scientific, 184,\r\n        \"1.\"\r\n        \"0000000000000000173566684169691286935226752617495305612368443231218527385476241124924130700318845059398697\"\r\n        \"631682172475335672600663748292592247410791680053842186513692689376624118857728e+184\"},\r\n    {1e+185, chars_format::scientific, 184,\r\n        \"9.\"\r\n        \"9999999999999997961704416875371517110712945186684165206763211895744845478556111003617144611039598507860251\"\r\n        \"139162957211888350975873638026151889477992007905860430885494197722591793250304e+184\"},\r\n    {1e+186, chars_format::scientific, 184,\r\n        \"9.\"\r\n        \"9999999999999997961704416875371517110712945186684165206763211895744845478556111003617144611039598507860251\"\r\n        \"139162957211888350975873638026151889477992007905860430885494197722591793250304e+185\"},\r\n    {1e+187, chars_format::scientific, 186,\r\n        \"9.\"\r\n        \"9999999999999990715696561218012120806928149689207894646274468696179222996240014532018752818113802502496938\"\r\n        \"79805812353226907091680705581859236698853640605134247712274342131878495422251008e+186\"},\r\n    {1e+188, chars_format::scientific, 188,\r\n        \"1.\"\r\n        \"0000000000000000230930913026978715489298382248516992754305645781548421896794576888657617968679507611107823\"\r\n        \"8543825857419659919011313587350687602971665369018571203143144663564875896666980352e+188\"},\r\n    {1e+189, chars_format::scientific, 188,\r\n        \"1.\"\r\n        \"0000000000000000230930913026978715489298382248516992754305645781548421896794576888657617968679507611107823\"\r\n        \"8543825857419659919011313587350687602971665369018571203143144663564875896666980352e+189\"},\r\n    {1e+190, chars_format::scientific, 190,\r\n        \"1.\"\r\n        \"0000000000000000725591715973187783610303424287811372824568343983972101724920689074452068181743241951740625\"\r\n        \"976868675721161334753163637413771490365780039321792212624518252692320803210995433472e+190\"},\r\n    {1e+191, chars_format::scientific, 190,\r\n        \"1.\"\r\n        \"0000000000000000725591715973187783610303424287811372824568343983972101724920689074452068181743241951740625\"\r\n        \"976868675721161334753163637413771490365780039321792212624518252692320803210995433472e+191\"},\r\n    {1e+192, chars_format::scientific, 192,\r\n        \"1.\"\r\n        \"0000000000000000409008802087613980012860197382662969579600217134420946634919977275543620045382451973735632\"\r\n        \"61847757813447631532786297905940174312186739777303375354598782943738754654264509857792e+192\"},\r\n    {1e+193, chars_format::scientific, 193,\r\n        \"1.\"\r\n        \"0000000000000000662275133196073022890814778906781692175574718614061870706920546714670378554471083956139627\"\r\n        \"305190456203824330868103505742897540916997511012040520808812168041334151877325366493184e+193\"},\r\n    {1e+194, chars_format::scientific, 193,\r\n        \"9.\"\r\n        \"9999999999999994465967438754696170766327875910118237148971115117854351613178134068619377108456504406004528\"\r\n        \"089686414709538562749489776621177115003729674648080379472553427423904462708600804999168e+193\"},\r\n    {1e+195, chars_format::scientific, 194,\r\n        \"9.\"\r\n        \"9999999999999997707776476942971919604146519418837886377444734057258179734785422889441886024790993780775660\"\r\n        \"0796112539971931616645685181699233267813951241073670004367049615544210109925082343145472e+194\"},\r\n    {1e+196, chars_format::scientific, 195,\r\n        \"9.\"\r\n        \"9999999999999995114329246392351320533891604611862166994665838905735117237499591832783878891723402280958754\"\r\n        \"48767138256706948253250552493092635735926276453993770366538373425000777236538229086224384e+195\"},\r\n    {1e+197, chars_format::scientific, 195,\r\n        \"9.\"\r\n        \"9999999999999995114329246392351320533891604611862166994665838905735117237499591832783878891723402280958754\"\r\n        \"48767138256706948253250552493092635735926276453993770366538373425000777236538229086224384e+196\"},\r\n    {1e+198, chars_format::scientific, 198,\r\n        \"1.\"\r\n        \"0000000000000000175355415660194005415374418651772000861457981049363415723055131933782837715237643652049003\"\r\n        \"28030374534281861011105867876227585990799216050325567033999660761493056632508247061001404416e+198\"},\r\n    {1e+199, chars_format::scientific, 199,\r\n        \"1.\"\r\n        \"0000000000000000972062404885344653449756728480474941855847657639911300522221339234388177506516007760792756\"\r\n        \"678147673846152604340428430285295728914471221362369950308146488642846313231335560438561636352e+199\"},\r\n    {1e+200, chars_format::scientific, 199,\r\n        \"9.\"\r\n        \"9999999999999996973312221251036165947450327545502362648241750950346848435554075534196338404706251868027512\"\r\n        \"415973882408182135734368278484639385041047239877871023591066789981811181813306167128854888448e+199\"},\r\n    {1e+201, chars_format::scientific, 201,\r\n        \"1.\"\r\n        \"0000000000000000377187852930565502917417937141710079246703365785635546538843904449936190462361495892930754\"\r\n        \"14109087389699655531583234914810756005630018925423128793192791080866922220799992003324610084864e+201\"},\r\n    {1e+202, chars_format::scientific, 200,\r\n        \"9.\"\r\n        \"9999999999999990174745913196417302720721283673903932829449844044338231482669106569030772185797544806747483\"\r\n        \"4210390258463987183104130654882031695190925872134291678628544718769301415466131339252487684096e+201\"},\r\n    {1e+203, chars_format::scientific, 202,\r\n        \"9.\"\r\n        \"9999999999999998876910787506329447650934459829549922997503484884029261182361866844442696946000689845185920\"\r\n        \"534555642245481492613075738123641525387194542623914743194966239051177873087980216425864602058752e+202\"},\r\n    {1e+204, chars_format::scientific, 202,\r\n        \"9.\"\r\n        \"9999999999999998876910787506329447650934459829549922997503484884029261182361866844442696946000689845185920\"\r\n        \"534555642245481492613075738123641525387194542623914743194966239051177873087980216425864602058752e+203\"},\r\n    {1e+205, chars_format::scientific, 205,\r\n        \"1.\"\r\n        \"0000000000000000166160354728550133402860267619935663985128064995273039068626355013257451286926569625748622\"\r\n        \"041088095949318798038992779336698179926498716835527012730124200454693714718121768282606166882648064e+205\"},\r\n    {1e+206, chars_format::scientific, 206,\r\n        \"1.\"\r\n        \"0000000000000000388935775510883884313073724929520201333430238200769129428938489676307996560787770138732646\"\r\n        \"0311941213291353170611409437561654018367221268940354434586262616943544566455807655946219322240663552e+\"\r\n        \"206\"},\r\n    {1e+207, chars_format::scientific, 206,\r\n        \"1.\"\r\n        \"0000000000000000388935775510883884313073724929520201333430238200769129428938489676307996560787770138732646\"\r\n        \"0311941213291353170611409437561654018367221268940354434586262616943544566455807655946219322240663552e+\"\r\n        \"207\"},\r\n    {1e+208, chars_format::scientific, 207,\r\n        \"9.\"\r\n        \"9999999999999998186306983081094819829272742169837857217766747946991381065394249388986006597030968254935446\"\r\n        \"16522696356805028364441642842329313746550197144253860793660984920822957311285732475861572950035529728e+\"\r\n        \"207\"},\r\n    {1e+209, chars_format::scientific, 209,\r\n        \"1.\"\r\n        \"0000000000000000731118821832548525711161595357042050700422376244411124222377928518753634101438574126676106\"\r\n        \"8799969763125334902791605243044670546908252847439043930576054277584733562461577854658781477884848504832e+\"\r\n        \"209\"},\r\n    {1e+210, chars_format::scientific, 209,\r\n        \"9.\"\r\n        \"9999999999999992711378241934460557459866815329488267345892539248719464370363227909855805946618104447840072\"\r\n        \"5843812838336795121561031396504666917998514458446354143529431921823271795036250068185162804696593727488e+\"\r\n        \"209\"},\r\n    {1e+211, chars_format::scientific, 210,\r\n        \"9.\"\r\n        \"9999999999999995631340237212665497390216642977674715277558783887797819941046439365391912960171631811624271\"\r\n        \"82749897969201059028320356032930746282153172616351711759756540926280845609521557638656931995269719916544e+\"\r\n        \"210\"},\r\n    {1e+212, chars_format::scientific, 211,\r\n        \"9.\"\r\n        \"9999999999999990959401044767537593501656918740576398586892792465272451027953301036534141738485988029569553\"\r\n        \"038510666318680865279842887243162229186843277653306392406169861934038413548670665077684456779836676898816e\"\r\n        \"+211\"},\r\n    {1e+213, chars_format::scientific, 212,\r\n        \"9.\"\r\n        \"9999999999999998434503752679742239723352477519933705291958378741313041288902322362706575693183018080857103\"\r\n        \"1008919677160084252852199641809946030023447952696435527124027376600704816231425231719002378564135125254144\"\r\n        \"e+212\"},\r\n    {1e+214, chars_format::scientific, 213,\r\n        \"9.\"\r\n        \"9999999999999995444462669514860381234674254008190782609932144230896805184522713832237602111304206060342083\"\r\n        \"0759394471570774012830691334058616534761441882231086885899095873696576543933537799342139254257827782747750\"\r\n        \"4e+213\"},\r\n    {1e+215, chars_format::scientific, 214,\r\n        \"9.\"\r\n        \"9999999999999990660396936451049407652789096389402106318690169014230827417515340183487244380298106827518051\"\r\n        \"0360154142627877628796278041656489342342232169486529059939205469049971308256917907539158255367736034737520\"\r\n        \"64e+214\"},\r\n    {1e+216, chars_format::scientific, 216,\r\n        \"1.\"\r\n        \"0000000000000000214215469580419574424931347467449492941767090953422917405833303694048810293471274498629572\"\r\n        \"7931833093209082895047886994342159460414833548007346784224294244020182387388080564786631265270395622996207\"\r\n        \"2064e+216\"},\r\n    {1e+217, chars_format::scientific, 216,\r\n        \"9.\"\r\n        \"9999999999999996018550557482517698064500472922445423764881181256896722516563598670087645039024937968280966\"\r\n        \"9207303311043921578914820929146871797851747047760433825014282722254169172214732186358496974124638792508977\"\r\n        \"9712e+216\"},\r\n    {1e+218, chars_format::scientific, 217,\r\n        \"1.\"\r\n        \"0000000000000000826575883412587379043412647642654443507046063781156162560010247521088856083040055200431048\"\r\n        \"8942935855313773632204291895769631741044492391238650185947160215814947857554687910937412833128327366741516\"\r\n        \"61568e+218\"},\r\n    {1e+219, chars_format::scientific, 218,\r\n        \"9.\"\r\n        \"9999999999999996508438888548251941759285513062609384217104359519083318639905153731719681670679962529722147\"\r\n        \"8016185520727674168639944850288849622355474122345476546392575499689981548348018063279122228410984187505225\"\r\n        \"498624e+218\"},\r\n    {1e+220, chars_format::scientific, 219,\r\n        \"9.\"\r\n        \"9999999999999999643724207368951101405909769959658731111332700397077533829291106126164716113272119722945705\"\r\n        \"4393031662703690742880737945597507699179327399689749963213649275279180755601047675571123855843594715481209\"\r\n        \"6741376e+219\"},\r\n    {1e+221, chars_format::scientific, 221,\r\n        \"1.\"\r\n        \"0000000000000000466018071748206975684050858099493768614209804580186827813230862995727677122141957123210339\"\r\n        \"7659598548986531726166600689809136062209749264344058743012736731622189948720589505523832645973577156024278\"\r\n        \"435495936e+221\"},\r\n    {1e+222, chars_format::scientific, 221,\r\n        \"1.\"\r\n        \"0000000000000000466018071748206975684050858099493768614209804580186827813230862995727677122141957123210339\"\r\n        \"7659598548986531726166600689809136062209749264344058743012736731622189948720589505523832645973577156024278\"\r\n        \"435495936e+222\"},\r\n    {1e+223, chars_format::scientific, 221,\r\n        \"1.\"\r\n        \"0000000000000000466018071748206975684050858099493768614209804580186827813230862995727677122141957123210339\"\r\n        \"7659598548986531726166600689809136062209749264344058743012736731622189948720589505523832645973577156024278\"\r\n        \"435495936e+223\"},\r\n    {1e+224, chars_format::scientific, 223,\r\n        \"9.\"\r\n        \"9999999999999996954903517948319502092964807244749211214842475260109694882873713352688654575305085714037182\"\r\n        \"4092248411345058928811833787060802532495190829039301080947896405333883515460849480069503260157387926689005\"\r\n        \"64521713664e+223\"},\r\n    {1e+225, chars_format::scientific, 224,\r\n        \"9.\"\r\n        \"9999999999999992845422344863652699560941461244648691253639504304505117149841757830241659030710693437735200\"\r\n        \"9423588636134254484622941461177838218040629861358615028052178586193608330530158506646130887048916655460323\"\r\n        \"666687950848e+224\"},\r\n    {1e+226, chars_format::scientific, 225,\r\n        \"9.\"\r\n        \"9999999999999996133007283331386141586560138044729107222601881068988779336267322248199255466386207258776786\"\r\n        \"1158516456302898039974055321884209669604278635503163870368752841505828478474711285384828785535693672443269\"\r\n        \"2495112994816e+225\"},\r\n    {1e+227, chars_format::scientific, 225,\r\n        \"1.\"\r\n        \"0000000000000000928334703720231990968903484524505077109845138812692342808196957992002964120908826254294312\"\r\n        \"6809822773697747226137851076470969547585887373208135923963504986275470907025292240033962037948280174037505\"\r\n        \"1580804694016e+227\"},\r\n    {1e+228, chars_format::scientific, 227,\r\n        \"9.\"\r\n        \"9999999999999992450912152247524686517867220028639041337364019092767077687470690100086747458429631779210210\"\r\n        \"7215397297714017257980807797893073643852992008461269166974189675556141912776812173197487139230503413422370\"\r\n        \"196749149011968e+227\"},\r\n    {1e+229, chars_format::scientific, 228,\r\n        \"9.\"\r\n        \"9999999999999999183886106229442775786334270115203733241798966706429617845270246028063904958693084084703377\"\r\n        \"1568529473419399259339888984619722376655344697909305196038533750435568775767256264054340435331422744203442\"\r\n        \"7503713670135808e+228\"},\r\n    {1e+230, chars_format::scientific, 230,\r\n        \"1.\"\r\n        \"0000000000000000995664443260051171861588155025370724028889488288828968209774953551282735695911460777349244\"\r\n        \"3453354095454801046151441888338236034913910900102616284254148427024265175655196680942530570909289367345315\"\r\n        \"883616691581616128e+230\"},\r\n    {1e+231, chars_format::scientific, 231,\r\n        \"1.\"\r\n        \"0000000000000000564754110205208414148406263819830583747005651641554565639675781971892197615894599829797681\"\r\n        \"6934753636209656598064460692387730516014560327977941978394030406231981856423808259127691959958830530175327\"\r\n        \"2401848696295129088e+231\"},\r\n    {1e+232, chars_format::scientific, 231,\r\n        \"1.\"\r\n        \"0000000000000000564754110205208414148406263819830583747005651641554565639675781971892197615894599829797681\"\r\n        \"6934753636209656598064460692387730516014560327977941978394030406231981856423808259127691959958830530175327\"\r\n        \"2401848696295129088e+232\"},\r\n    {1e+233, chars_format::scientific, 232,\r\n        \"9.\"\r\n        \"9999999999999997374062707399103193390970327051935144057886852787877127050853725394623645022622268104986814\"\r\n        \"0190407544589792577374567961627599197278072294985673111426038063107978834995424892432018269339495628089490\"\r\n        \"44795771481474727936e+232\"},\r\n    {1e+234, chars_format::scientific, 234,\r\n        \"1.\"\r\n        \"0000000000000000178658451788069303237395289299666618054437734005596700936866924236758275496199492420791481\"\r\n        \"5574087624726007172578525540816077571080742215354233800343364659602096002392484233181596564547219412071017\"\r\n        \"4156699571604284243968e+234\"},\r\n    {1e+235, chars_format::scientific, 235,\r\n        \"1.\"\r\n        \"0000000000000000531660196626596490356033894575245100973356972987043891522292165594595004291349304909025721\"\r\n        \"6818125120939629504451380536538731692163090204038766991703973342235134497506837628332312354637835291480672\"\r\n        \"11236930570359138156544e+235\"},\r\n    {1e+236, chars_format::scientific, 235,\r\n        \"1.\"\r\n        \"0000000000000000531660196626596490356033894575245100973356972987043891522292165594595004291349304909025721\"\r\n        \"6818125120939629504451380536538731692163090204038766991703973342235134497506837628332312354637835291480672\"\r\n        \"11236930570359138156544e+236\"},\r\n    {1e+237, chars_format::scientific, 235,\r\n        \"9.\"\r\n        \"9999999999999994020546131433094915763903576933939556328154082464128816489313932495174721468699049466761532\"\r\n        \"8372051330560380424582445502262385046995766402482607793500255578094113131409067638500218263478644773697770\"\r\n        \"82931390365469918625792e+236\"},\r\n    {1e+238, chars_format::scientific, 238,\r\n        \"1.\"\r\n        \"0000000000000000486475973287265010404848153099971055159735310397418651127357734700791903005570128910531738\"\r\n        \"9458888321424285845971655097086231964664549661487146743209815430858105570132200393753020733506236458916236\"\r\n        \"31119178909006652304785408e+238\"},\r\n    {1e+239, chars_format::scientific, 238,\r\n        \"9.\"\r\n        \"9999999999999999081179145438220670296706622164632687453780292502155740721970192601122065475966761298087599\"\r\n        \"2606572876278870174311694720942354526832307168264075624845941652321352997368437911380879830217714020914580\"\r\n        \"56119576436948334022754304e+238\"},\r\n    {1e+240, chars_format::scientific, 240,\r\n        \"1.\"\r\n        \"0000000000000000139461138041199244379741658569866383311120941709096804894261305436384085130786057242097951\"\r\n        \"5339949701146446548847363722091034057475758294690703234774682671482523407894986432184061083215557424821369\"\r\n        \"3581484614981956096327942144e+240\"},\r\n    {1e+241, chars_format::scientific, 241,\r\n        \"1.\"\r\n        \"0000000000000000509610295637002728139855252735311366616309601643306774209564163318419090863889067021760658\"\r\n        \"1066817562776141799113274522085911825143802419273576310438824281483144380948014657857618043525615061189227\"\r\n        \"44139467759619125060885807104e+241\"},\r\n    {1e+242, chars_format::scientific, 241,\r\n        \"1.\"\r\n        \"0000000000000000509610295637002728139855252735311366616309601643306774209564163318419090863889067021760658\"\r\n        \"1066817562776141799113274522085911825143802419273576310438824281483144380948014657857618043525615061189227\"\r\n        \"44139467759619125060885807104e+242\"},\r\n    {1e+243, chars_format::scientific, 243,\r\n        \"1.\"\r\n        \"0000000000000000746505756498316957746327953001196155931630344001201154571357992362921494533074993280744790\"\r\n        \"3132012994219146759283457434082633596451350659006615078863874911883541803701952722288694498124051948464656\"\r\n        \"6146722558989084608335389392896e+243\"},\r\n    {1e+244, chars_format::scientific, 243,\r\n        \"1.\"\r\n        \"0000000000000000746505756498316957746327953001196155931630344001201154571357992362921494533074993280744790\"\r\n        \"3132012994219146759283457434082633596451350659006615078863874911883541803701952722288694498124051948464656\"\r\n        \"6146722558989084608335389392896e+244\"},\r\n    {1e+245, chars_format::scientific, 245,\r\n        \"1.\"\r\n        \"0000000000000000443279566595834743850042896660863625608019793783096347708261891185958417836517007669245101\"\r\n        \"0888562841972100410265623306726829729177688912148325455279810104971033102576911999816916636238052732752107\"\r\n        \"272876955671430431745947427930112e+245\"},\r\n    {1e+246, chars_format::scientific, 246,\r\n        \"1.\"\r\n        \"0000000000000000685860518517820514967070941733129649866908233957580193198738772127528879193763396158444852\"\r\n        \"4683322963769737489479890608611472822996618309634957154147061950501040063476944577794338925746852105322146\"\r\n        \"7463131958534128550160206370177024e+246\"},\r\n    {1e+247, chars_format::scientific, 246,\r\n        \"9.\"\r\n        \"9999999999999995214719492922888136053363253862527334242437211200577348444497436079906646789807314102860458\"\r\n        \"4684743791410795092514075595651859726657572016991249995842530919570066511567882035027119361046151169859572\"\r\n        \"7381924297989722331966923339726848e+246\"},\r\n    {1e+248, chars_format::scientific, 248,\r\n        \"1.\"\r\n        \"0000000000000000452982804672714174694724018463754266578375331390075701527880966423621236290806863208813091\"\r\n        \"1440353246844005893434193998802215452930446088047790723234500178792233381012913302936013527818404707654908\"\r\n        \"851814405278709728676750356293615616e+248\"},\r\n    {1e+249, chars_format::scientific, 247,\r\n        \"9.\"\r\n        \"9999999999999992109683308321470265755404276937522223728665176967184126166393360027804741417053541441103640\"\r\n        \"8111814232401040478571454131528428125775275729162364250341707296785977412047465036916114055333519200963067\"\r\n        \"47820855546959721533975525765152768e+248\"},\r\n    {1e+250, chars_format::scientific, 247,\r\n        \"9.\"\r\n        \"9999999999999992109683308321470265755404276937522223728665176967184126166393360027804741417053541441103640\"\r\n        \"8111814232401040478571454131528428125775275729162364250341707296785977412047465036916114055333519200963067\"\r\n        \"47820855546959721533975525765152768e+249\"},\r\n    {1e+251, chars_format::scientific, 251,\r\n        \"1.\"\r\n        \"0000000000000000482791152044887786249584424642234315639307542918716276461750765553721414582385299426365956\"\r\n        \"5935453370610499537728043164857800396298916132410948026391308085570960636368309306117879178753245974556315\"\r\n        \"302310250472271728848176952226298724352e+251\"},\r\n    {1e+252, chars_format::scientific, 252,\r\n        \"1.\"\r\n        \"0000000000000000991520280529984090119202023421627152945883953007515421999795337374097790758657277539268193\"\r\n        \"5985162149558657733676402265539783429787471556208832666934163027927905794433734427088386288041203596340318\"\r\n        \"7241060084423965317738575228107571068928e+252\"},\r\n    {1e+253, chars_format::scientific, 252,\r\n        \"9.\"\r\n        \"9999999999999993635870693776759177364257073275700735648394407233581562780527075488933869945869475779810351\"\r\n        \"8260940569245515066416531433574377226240942000556018171970272123856812886243740399827635383197392066315077\"\r\n        \"7435958293799716241167969694049028276224e+252\"},\r\n    {1e+254, chars_format::scientific, 252,\r\n        \"9.\"\r\n        \"9999999999999993635870693776759177364257073275700735648394407233581562780527075488933869945869475779810351\"\r\n        \"8260940569245515066416531433574377226240942000556018171970272123856812886243740399827635383197392066315077\"\r\n        \"7435958293799716241167969694049028276224e+253\"},\r\n    {1e+255, chars_format::scientific, 254,\r\n        \"9.\"\r\n        \"9999999999999998845256969464145328989141284776683389667736846542884813090103490929587961990894531655929258\"\r\n        \"7569958465674654992927728624557883489163749540246356891129106733591931304833693638565628182306078113383272\"\r\n        \"782784390994049606075766012189756664840192e+254\"},\r\n    {1e+256, chars_format::scientific, 256,\r\n        \"1.\"\r\n        \"0000000000000000301276599001405425028904865397746951288321079799032741333776462328211123562691457635682438\"\r\n        \"4301717278281796693413668637734468849950199557199862786645617442138002603970565622955602242159302695103782\"\r\n        \"88141352402853119916429412464176397346144256e+256\"},\r\n    {1e+257, chars_format::scientific, 256,\r\n        \"1.\"\r\n        \"0000000000000000301276599001405425028904865397746951288321079799032741333776462328211123562691457635682438\"\r\n        \"4301717278281796693413668637734468849950199557199862786645617442138002603970565622955602242159302695103782\"\r\n        \"88141352402853119916429412464176397346144256e+257\"},\r\n    {1e+258, chars_format::scientific, 258,\r\n        \"1.\"\r\n        \"0000000000000000567997176316599595992098937026597263174111412691669067749626774798772613075396740496539726\"\r\n        \"4650338994578968657651041933912824370611847303232008129066549774156440667002371228778987473473667420713674\"\r\n        \"4674199783831719918405933396323484899269935104e+258\"},\r\n    {1e+259, chars_format::scientific, 258,\r\n        \"9.\"\r\n        \"9999999999999992877384052036675753687673932081157661223178148070147009535452749400774634144113827644247438\"\r\n        \"9769547563525432293116501122567178714359381222777104854460745804679379644497043208267383631647167377861948\"\r\n        \"5458899748089618699435710767754281089234894848e+258\"},\r\n    {1e+260, chars_format::scientific, 260,\r\n        \"1.\"\r\n        \"0000000000000000653347761057461730700321039947829362977564319217312692202698874789352289719462431012014058\"\r\n        \"6361897943794063686207001388689898137223574581962294638641248120402340847172549022642470747494264132908839\"\r\n        \"774942043776657045497009088429335535195969814528e+260\"},\r\n    {1e+261, chars_format::scientific, 258,\r\n        \"9.\"\r\n        \"9999999999999992877384052036675753687673932081157661223178148070147009535452749400774634144113827644247438\"\r\n        \"9769547563525432293116501122567178714359381222777104854460745804679379644497043208267383631647167377861948\"\r\n        \"5458899748089618699435710767754281089234894848e+260\"},\r\n    {1e+262, chars_format::scientific, 262,\r\n        \"1.\"\r\n        \"0000000000000000161728392950095834780961727121532468109675577629605415353003578843613352249644053642881905\"\r\n        \"3303318396315116321724674929173953241540025456475844343490985646025955809392324929988807089135627070664687\"\r\n        \"60361494711018313643605437535869015444666630275072e+262\"},\r\n    {1e+263, chars_format::scientific, 262,\r\n        \"1.\"\r\n        \"0000000000000000161728392950095834780961727121532468109675577629605415353003578843613352249644053642881905\"\r\n        \"3303318396315116321724674929173953241540025456475844343490985646025955809392324929988807089135627070664687\"\r\n        \"60361494711018313643605437535869015444666630275072e+263\"},\r\n    {1e+264, chars_format::scientific, 264,\r\n        \"1.\"\r\n        \"0000000000000000441405189028952877792863913973825812745630061732834443960830236092744836676918508323988196\"\r\n        \"9887754761103139711296842870587468559973333403419247178065357187004521519773963524920669081446318377185805\"\r\n        \"2833032509915549602573975010166573043840478561173504e+264\"},\r\n    {1e+265, chars_format::scientific, 265,\r\n        \"1.\"\r\n        \"0000000000000000665146625892038512202385663455660488454393649015417666847091561892050024218738072068873230\"\r\n        \"3155303852933558422954577223718280814719979760973969445724854419787374088079274400866158675294871422402699\"\r\n        \"42705389409665241931447200154303102433395309881065472e+265\"},\r\n    {1e+266, chars_format::scientific, 266,\r\n        \"1.\"\r\n        \"0000000000000000307160326911101497147150864284725007320371909363284510229073440613161724151826770077057176\"\r\n        \"9927225306004888484302202258708981207125345588886413817469658847334809978790776999353375325137186550055668\"\r\n        \"797052865128496484823152800700833072414104710501367808e+266\"},\r\n    {1e+267, chars_format::scientific, 266,\r\n        \"9.\"\r\n        \"9999999999999997343822485416022730587751856112282375059371259198714596402444465669404440447686868901514916\"\r\n        \"7622996309190165824584023146941018349739309135463248122613459314107074039291811569329219648848907543004197\"\r\n        \"890512187794469896370420793533163493423472892065087488e+266\"},\r\n    {1e+268, chars_format::scientific, 266,\r\n        \"9.\"\r\n        \"9999999999999997343822485416022730587751856112282375059371259198714596402444465669404440447686868901514916\"\r\n        \"7622996309190165824584023146941018349739309135463248122613459314107074039291811569329219648848907543004197\"\r\n        \"890512187794469896370420793533163493423472892065087488e+267\"},\r\n    {1e+269, chars_format::scientific, 269,\r\n        \"1.\"\r\n        \"0000000000000000467538188854561279891896054313304102868413648727440164393945558946103682581803033369390768\"\r\n        \"8813404495028932616818466243033147431327741697981638738927986463793558699752023835231102266007829372867138\"\r\n        \"519293326106230343475263802678137754874196788463928344576e+269\"},\r\n    {1e+270, chars_format::scientific, 269,\r\n        \"1.\"\r\n        \"0000000000000000467538188854561279891896054313304102868413648727440164393945558946103682581803033369390768\"\r\n        \"8813404495028932616818466243033147431327741697981638738927986463793558699752023835231102266007829372867138\"\r\n        \"519293326106230343475263802678137754874196788463928344576e+270\"},\r\n    {1e+271, chars_format::scientific, 270,\r\n        \"9.\"\r\n        \"9999999999999995290985852539737511455013423746469952044436995337522223092081351007747372543990698759644940\"\r\n        \"5879902689682400928375844147591690679948638939044369127946865823435090410987852070094314805704679411017385\"\r\n        \"4458342872794765056233999682236635579342942941443126198272e+270\"},\r\n    {1e+272, chars_format::scientific, 272,\r\n        \"1.\"\r\n        \"0000000000000000655226109574678785641174996701035524401207638566177752810893043715169471647283826068076023\"\r\n        \"8458487340241071121614642608687943103994317258797079104154646440083568631482671560875436423095301659220218\"\r\n        \"514235305581886882057848563849292034690350260273827761094656e+272\"},\r\n    {1e+273, chars_format::scientific, 272,\r\n        \"9.\"\r\n        \"9999999999999994540234169659267488457897654195544265913261035982571869424291411931484216282067527964903920\"\r\n        \"7299571308833846909191138684972507989282336695782607667040225918275050684065261167516978177354790265605065\"\r\n        \"466066369376850351293060923539046438669680406904714953752576e+272\"},\r\n    {1e+274, chars_format::scientific, 273,\r\n        \"9.\"\r\n        \"9999999999999992137828784441763414867127191632582070293497966046730737687363606887442116243913381421732657\"\r\n        \"1842510890118474047800081204591123379150169517344970992138978221762923557912970279269500966635145000285641\"\r\n        \"5308090320884466574359759805482716570229159677380024223137792e+273\"},\r\n    {1e+275, chars_format::scientific, 274,\r\n        \"9.\"\r\n        \"9999999999999995981677400789769932612359931733321583285118877944076548466448094957909476304960015890806678\"\r\n        \"8573807560063070626025773173201338755361637002845189671980974536182326959756635700465464503786577424796719\"\r\n        \"82722077174989256760731188933351130765773907040474247261585408e+274\"},\r\n    {1e+276, chars_format::scientific, 276,\r\n        \"1.\"\r\n        \"0000000000000000520691408002498557520091850797509641446500906649770649433625086632703114045147193861658433\"\r\n        \"0872891956793010241376743389786585565826915896804571450360176569078889512418143271133577699295001524362330\"\r\n        \"7738608946937362752018518070418086469181314516804918593340833792e+276\"},\r\n    {1e+277, chars_format::scientific, 277,\r\n        \"1.\"\r\n        \"0000000000000000028678785109953723248702060064614983783573429926910385653902272159683291957333224649616958\"\r\n        \"3131285983040101879363854817804477997671848058660543459340401040833205876982154097220494366539618174024912\"\r\n        \"75192019201707119869992081071729797163687409453914913289541779456e+277\"},\r\n    {1e+278, chars_format::scientific, 277,\r\n        \"9.\"\r\n        \"9999999999999996350686867959178558315902274782992576532314485486221746301240205812674342870820492799837784\"\r\n        \"9380012040377751897535439602187919431477937881453210665245806182366589686333627580900277003353114937549783\"\r\n        \"34367629875739137498376013657689431411868208826074951744485326848e+277\"},\r\n    {1e+279, chars_format::scientific, 279,\r\n        \"1.\"\r\n        \"0000000000000000579732922749603937632658625685457000366052203856513881087191824369465492695684870167103410\"\r\n        \"0601884673643359244818290018424438474005524037381854809282549632468371548670461972003147699225647526402820\"\r\n        \"9364937790149360843820835266007499279518823345374529865067232493568e+279\"},\r\n    {1e+280, chars_format::scientific, 280,\r\n        \"1.\"\r\n        \"0000000000000000327822459828620982485707052830214935642633335774409426031973743359279343786724117930538174\"\r\n        \"9758182415081870163467691069569599399110129304252112477880424562006581527327235514959649032854891251030062\"\r\n        \"90926013924448356521309485648260046220787856768108551057012647002112e+280\"},\r\n    {1e+281, chars_format::scientific, 280,\r\n        \"1.\"\r\n        \"0000000000000000327822459828620982485707052830214935642633335774409426031973743359279343786724117930538174\"\r\n        \"9758182415081870163467691069569599399110129304252112477880424562006581527327235514959649032854891251030062\"\r\n        \"90926013924448356521309485648260046220787856768108551057012647002112e+281\"},\r\n    {1e+282, chars_format::scientific, 280,\r\n        \"1.\"\r\n        \"0000000000000000327822459828620982485707052830214935642633335774409426031973743359279343786724117930538174\"\r\n        \"9758182415081870163467691069569599399110129304252112477880424562006581527327235514959649032854891251030062\"\r\n        \"90926013924448356521309485648260046220787856768108551057012647002112e+282\"},\r\n    {1e+283, chars_format::scientific, 282,\r\n        \"9.\"\r\n        \"9999999999999995539535177353613442742718210189113128122905730261845401023437984959874943383966870598097727\"\r\n        \"9663290767809757055586510986875337610314766840775440358130963455479625817608438389220211297639279730849502\"\r\n        \"4959839786965342632596166187964530344229899589832462449290116390191104e+282\"},\r\n    {1e+284, chars_format::scientific, 284,\r\n        \"1.\"\r\n        \"0000000000000000792143825084576765412568191916997109340838993423344357589751710277254453455720576452975216\"\r\n        \"2833294418062406838213115052098838781957320876356853543120821491881752894667070520582225774709469217797130\"\r\n        \"505057184069381648545374773244373557467226310750742042216461653692645376e+284\"},\r\n    {1e+285, chars_format::scientific, 284,\r\n        \"9.\"\r\n        \"9999999999999998015915792052044285019310951985284721180002571056165035998253808522408861618614649384428614\"\r\n        \"9397221450372619320895438893697947652166455225334059372746413748147206443420891752540620587530362220273863\"\r\n        \"006901551095990707698442841525909542472844588688081080376132618600579072e+284\"},\r\n    {1e+286, chars_format::scientific, 286,\r\n        \"1.\"\r\n        \"0000000000000000329886110340869674854270880115045078636847583141738025727786089878914788718586324412860117\"\r\n        \"3816294023984005882022115176158618240811672377905911327059270770583804511182079226095749373929800486437916\"\r\n        \"54301923722148311225012721166820834263125344653917287293299907083743789056e+286\"},\r\n    {1e+287, chars_format::scientific, 287,\r\n        \"1.\"\r\n        \"0000000000000000752521735249401871936142708048258363851925443970635243430154657100253910763966211992393922\"\r\n        \"0917551527141401041968172205589677021287693862203915638886974287199071604654071266769099226071211897966340\"\r\n        \"736882502910990345434353553680702253338428636675464684849307718019341877248e+287\"},\r\n    {1e+288, chars_format::scientific, 288,\r\n        \"1.\"\r\n        \"0000000000000000076304735395750356605147783355117107507800866644399695106364949546111315491358391865139834\"\r\n        \"5555539522089568786054480958499982972526059487327108739962648660614644255098884001691739462644953639520862\"\r\n        \"0267012778077787723395914064607119962069483324573977857832138825282954985472e+288\"},\r\n    {1e+289, chars_format::scientific, 289,\r\n        \"1.\"\r\n        \"0000000000000000617278335278671568869943723109630112583100528505388133765396715589425391709444647966943104\"\r\n        \"5845149126131034590785433956171738211535366987228554259102109161882186134743033813753627273385960246277244\"\r\n        \"99484625789034803081540112423670420191213257583185130503608895092113260150784e+289\"},\r\n    {1e+290, chars_format::scientific, 289,\r\n        \"1.\"\r\n        \"0000000000000000617278335278671568869943723109630112583100528505388133765396715589425391709444647966943104\"\r\n        \"5845149126131034590785433956171738211535366987228554259102109161882186134743033813753627273385960246277244\"\r\n        \"99484625789034803081540112423670420191213257583185130503608895092113260150784e+290\"},\r\n    {1e+291, chars_format::scientific, 290,\r\n        \"9.\"\r\n        \"9999999999999995786090235034628413215355187809651428385251777322903315400557247862623653707190362514808261\"\r\n        \"2890986863714202457020042006419681526374965874177788623543449994485057258262661745948026767632275613049896\"\r\n        \"960078961318150545418464661067991669581788285529005480705688196068853638234112e+290\"},\r\n    {1e+292, chars_format::scientific, 292,\r\n        \"1.\"\r\n        \"0000000000000000132565989783574162680686561089586460035632031477942492726904253214615979418039362499727374\"\r\n        \"6385658920909881229746500070257845517383027467316859073953152552746468610581875582146175794962018326623525\"\r\n        \"85538835573636597522107561710941518560028749376834095178551288964115055725510656e+292\"},\r\n    {1e+293, chars_format::scientific, 292,\r\n        \"9.\"\r\n        \"9999999999999992462348437353960485060448933957923525202610654848990348279466077292501969423268405025328970\"\r\n        \"2311625456483436552753066788724417337901780594783307353950604674697279949729005300639788058439531021138680\"\r\n        \"00379620369084502134308975505229555772913629423636305841602377586326247764393984e+292\"},\r\n    {1e+294, chars_format::scientific, 294,\r\n        \"1.\"\r\n        \"0000000000000000664364677412481031185471561705862924544854611073768567466278840505835448903466875698044061\"\r\n        \"2078356746066803774429216105089087787538737112019976077088007803912512979947260613395493988432857461329320\"\r\n        \"5683935969567348590731356020719265634967118123751637393518591968740451429495341056e+294\"},\r\n    {1e+295, chars_format::scientific, 294,\r\n        \"9.\"\r\n        \"9999999999999998134867772062300415778155607198205813300984837204468478832795008398842977267828545807373626\"\r\n        \"9700402258157277029368704493591001552896016804949888720722394020468419889626445633965848788795148458000490\"\r\n        \"2758521100414464490983962613190835886243290260424727924570510530141380583845003264e+294\"},\r\n    {1e+296, chars_format::scientific, 294,\r\n        \"9.\"\r\n        \"9999999999999998134867772062300415778155607198205813300984837204468478832795008398842977267828545807373626\"\r\n        \"9700402258157277029368704493591001552896016804949888720722394020468419889626445633965848788795148458000490\"\r\n        \"2758521100414464490983962613190835886243290260424727924570510530141380583845003264e+295\"},\r\n    {1e+297, chars_format::scientific, 297,\r\n        \"1.\"\r\n        \"0000000000000000176528014627563797143748787807198647768394431391197448238692552430690122228834703590788220\"\r\n        \"7282921941122853493440271262470561545049232797945650079545633920176194945116080744729452765622274361759204\"\r\n        \"8849967890105831362861792425329827928397252374398383022243308510390698430058459037696e+297\"},\r\n    {1e+298, chars_format::scientific, 297,\r\n        \"9.\"\r\n        \"9999999999999995956620347534297882382556244673937414671209151179964876700316698854008030255517451747068478\"\r\n        \"7823111966314522286348299614922233214338230100245921475882026911692302152705828545968641468338591362245555\"\r\n        \"1313826420028155008403585629126369847605750170289266545852965785882018353801250996224e+297\"},\r\n    {1e+299, chars_format::scientific, 299,\r\n        \"1.\"\r\n        \"0000000000000000525047602552044202487044685811081591549158541155118024579889081957863713750804478640437044\"\r\n        \"4383288387817694252323536043057564479218478670698284838720092657580373783023379478809005936895323497079994\"\r\n        \"508111903896764088007465274278014249457925878882005684283811566947219638686545940054016e+299\"},\r\n    {1e+300, chars_format::scientific, 299,\r\n        \"1.\"\r\n        \"0000000000000000525047602552044202487044685811081591549158541155118024579889081957863713750804478640437044\"\r\n        \"4383288387817694252323536043057564479218478670698284838720092657580373783023379478809005936895323497079994\"\r\n        \"508111903896764088007465274278014249457925878882005684283811566947219638686545940054016e+300\"},\r\n    {1e+301, chars_format::scientific, 299,\r\n        \"1.\"\r\n        \"0000000000000000525047602552044202487044685811081591549158541155118024579889081957863713750804478640437044\"\r\n        \"4383288387817694252323536043057564479218478670698284838720092657580373783023379478809005936895323497079994\"\r\n        \"508111903896764088007465274278014249457925878882005684283811566947219638686545940054016e+301\"},\r\n    {1e+302, chars_format::scientific, 302,\r\n        \"1.\"\r\n        \"0000000000000000762970307908489492534734685515065681170160173420621138028812579448414218896469178407663974\"\r\n        \"7577138548761372210387844799938291815611350519830750167649856488981626536368095414607314235151058373458986\"\r\n        \"890825155659063617715863205282622390509284183439858617103083735673849899204570498157510656e+302\"},\r\n    {1e+303, chars_format::scientific, 303,\r\n        \"1.\"\r\n        \"0000000000000000001617650767864564382126686462316594382954950171011174992257387478652602430342139152537797\"\r\n        \"7356818033741602744582056777919964339154160602606861115074612228497617725665004420052727680732706769046211\"\r\n        \"2661427500197051226489898260678763391449376088547292320814127957486330655468919122263277568e+303\"},\r\n    {1e+304, chars_format::scientific, 303,\r\n        \"9.\"\r\n        \"9999999999999993925355250553646218600402872201173249531907715713232045630132339028433092574405077484368561\"\r\n        \"1805616217257871719374263603053023579884086688277498730144168201104106771025316244090584371980254855159907\"\r\n        \"6639682550821832659549112269607949805346034918662572406407604380845959862074904348138143744e+303\"},\r\n    {1e+305, chars_format::scientific, 303,\r\n        \"9.\"\r\n        \"9999999999999993925355250553646218600402872201173249531907715713232045630132339028433092574405077484368561\"\r\n        \"1805616217257871719374263603053023579884086688277498730144168201104106771025316244090584371980254855159907\"\r\n        \"6639682550821832659549112269607949805346034918662572406407604380845959862074904348138143744e+304\"},\r\n    {1e+306, chars_format::scientific, 306,\r\n        \"1.\"\r\n        \"0000000000000000172160645967364548288310878250132389823288920178923806712445750479879204518754595945686061\"\r\n        \"3886169829106031104922553294852069693880571144065012262851466942846035699262496802832955068922417528434673\"\r\n        \"0060716088829214255439694630119794546505512415617982143262670862918816362862119154749127262208e+306\"},\r\n    {1e+307, chars_format::scientific, 306,\r\n        \"9.\"\r\n        \"9999999999999998603105976025645777170026418381263638752496607358835658526727438490648464142289606667863792\"\r\n        \"8039265461539335317285025210333627595237061539701073069166468937517856903985107314633964162326607112672001\"\r\n        \"1020169553304018596457812688561947201171488461172921822139066929851282122002676667750021070848e+306\"},\r\n    {1e+308, chars_format::scientific, 308,\r\n        \"1.\"\r\n        \"0000000000000000109790636294404554174049230967731184633681068290315758540491149153716332897849468889906124\"\r\n        \"9669721172515611590283743140088328307009198146046031271664502933027185697489699588559043338384466165001178\"\r\n        \"426897626212945177628091195786707458122783970171784415105291802893207873272974885715430223118336e+308\"},\r\n};\r\n\r\n#endif // DOUBLE_SCIENTIFIC_PRECISION_TO_CHARS_TEST_CASES_2_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/double_scientific_precision_to_chars_test_cases_3.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception AND BSL-1.0\r\n\r\n\r\n// Copyright 2018 Ulf Adams\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n// Boost Software License - Version 1.0 - August 17th, 2003\r\n\r\n// Permission is hereby granted, free of charge, to any person or organization\r\n// obtaining a copy of the software and accompanying documentation covered by\r\n// this license (the \"Software\") to use, reproduce, display, distribute,\r\n// execute, and transmit the Software, and to prepare derivative works of the\r\n// Software, and to permit third-parties to whom the Software is furnished to\r\n// do so, all subject to the following:\r\n\r\n// The copyright notices in the Software and this entire statement, including\r\n// the above license grant, this restriction and the following disclaimer,\r\n// must be included in all copies of the Software, in whole or in part, and\r\n// all derivative works of the Software, unless such copies or derivative\r\n// works are solely in the form of machine-executable object code generated by\r\n// a source language processor.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r\n// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r\n// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r\n// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\n// DEALINGS IN THE SOFTWARE.\r\n\r\n\r\n// This file contains test cases derived from:\r\n// https://github.com/ulfjack/ryu\r\n// See xcharconv_ryu.h for the exact commit.\r\n// (Keep the cgmanifest.json commitHash in sync.)\r\n\r\n\r\n#ifndef DOUBLE_SCIENTIFIC_PRECISION_TO_CHARS_TEST_CASES_3_HPP\r\n#define DOUBLE_SCIENTIFIC_PRECISION_TO_CHARS_TEST_CASES_3_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\ninline constexpr DoublePrecisionToCharsTestCase double_scientific_precision_to_chars_test_cases_3[] = {\r\n    // Ryu Printf d2fixed_test.cc D2expTest AllBinaryExponents\r\n    // These values test every binary exponent.\r\n    // The mantissas were randomly generated.\r\n    {0x0.63b831e8bd9d7p-1022, chars_format::scientific, 765,\r\n        \"8.\"\r\n        \"6673155601518373204745615934992065170006880827787289636461039456117181014435225731420739682086431846196084\"\r\n        \"0559717761976781401452617612090003075542930260777812518669659241729724010681746641686623499848468215594968\"\r\n        \"2021079153402945471922988971873909012440740220527800911244244822910902773084448896950002963160859062629660\"\r\n        \"9882885374947604962348974323036144310657614326754120115556509383797380330234783520222245524583876671362471\"\r\n        \"8494080431858617260899963028423305531253945552260335123939000593240656910669298632181747412649714974019858\"\r\n        \"8356285761402581880926947783051518340651609793980053160313425027619711896255545853478748493923212623215309\"\r\n        \"2624291889535798750202922731324119623206905408779063259071595105183391812893811664489504206776437911230459\"\r\n        \"57647264003753662109375e-309\"},\r\n    {0x1.8777195166b0cp-1022, chars_format::scientific, 764,\r\n        \"3.\"\r\n        \"4024962888548891870780380223721963415936057267215768489022880931036340709664117046765987977180526441192766\"\r\n        \"7980233377849338161398396361988635343561859686478002041658296279167269633549887180398681467085048366045915\"\r\n        \"6676370951509663121515851044197786647785688189698831775149285429703757400159268959324595109001459740108998\"\r\n        \"7064349011889817819942001416735892399032878298656443356501797788246594163297203747575928614864543561706962\"\r\n        \"7150190560661004463760153276800654567748203691908193307868018274961903878508519765463087823925880361092267\"\r\n        \"9880731846129559561006152326978128322135743176002677808113397223361200222360522182681889723507749332427973\"\r\n        \"2240457324020870731250050608330505053074385990942209557473057293561320028309889744618215584592846312261826\"\r\n        \"8243968486785888671875e-308\"},\r\n    {0x1.4668b84fe57a0p-1021, chars_format::scientific, 760,\r\n        \"5.\"\r\n        \"6740958740641631511384384536776561146340227260577357930980504423887626489617571637837441488031383754955785\"\r\n        \"4086594144651757106826827082053224819137614951757164822186954713633389739294124192094600295957101411513892\"\r\n        \"2292227756567557970015697918331549646091513808709325026828267412677470869412642816923726953169932993282696\"\r\n        \"1970700281786004455171108499583392239457705199245309170122601944018148603634684132173289075939231416021795\"\r\n        \"6773831481083699810908312929539145137356475139290129992626736771448814573026906644585538148884867233811394\"\r\n        \"2395343914793125973137539097252903908512233824086968776157212299338375466427657302566612718734454791559738\"\r\n        \"4296829871117558203187275819525974756928809649794138442664770396059164903717939140888326665645990942721255\"\r\n        \"123615264892578125e-308\"},\r\n    {0x1.befe59a615135p-1020, chars_format::scientific, 765,\r\n        \"1.\"\r\n        \"5540526173622352375993445245662683293464994107818202403773732113997242921188175334393284236610673877760032\"\r\n        \"1140045136930880932847198094667333515588636758849652193589488647628623014759199260062387648516658758902202\"\r\n        \"4414313323949909142159529537456605070198347779192598243095403947592025125119457352938379814319820278343589\"\r\n        \"7747302961203036640889656009214261792160762451937044526624584298357832777585944388632200805521152515342330\"\r\n        \"8561170623085034646351360745189671642589380586080254484943279473962393703949926697788378603146358212695781\"\r\n        \"2370158648390166491038532530966495890940486561351377873613480311323741789526145720019072115667475187757369\"\r\n        \"0752588227109741861829975787681759234538817712508305395458670019301186211951459779169503264140139719984290\"\r\n        \"42287170886993408203125e-307\"},\r\n    {0x1.1e3d1ff2f0c7dp-1019, chars_format::scientific, 764,\r\n        \"1.\"\r\n        \"9903200051351428805615989243193127044770722692702459361378399559534652305451954151277557670839014475339478\"\r\n        \"2867837696288408273532724825127341865493665067774242606965035835847639336549731232556074151242689053806547\"\r\n        \"2696077887804553644884150043878406627507745699995507099147377175105877153481526330603572499358626260756240\"\r\n        \"8161745031548857838580407488540228220931314580542710929232921821435828527112974792024775296802861545460264\"\r\n        \"3826566011906669643593108259028344252667022294947897471948646741545397199053445447059963324528762468428056\"\r\n        \"1552964343633309851882307590384491177630806444328543647075668536514853052975155234251635207407297067719395\"\r\n        \"3884058314203115240012536217140219386138413382468962035052024511938122187739312695493269084190401940759329\"\r\n        \"5909464359283447265625e-307\"},\r\n    {0x1.6f434a1f8b19bp-1018, chars_format::scientific, 763,\r\n        \"5.\"\r\n        \"1074185390468469270473736828301327180750062564436661993518732867820414412582796763617494622074841605120794\"\r\n        \"6280001513512476415260093780274458550261745884171770589710369360980007788208880420310179065543732589777800\"\r\n        \"1026322540349851343686142888941809812697130982668148593939074359425039990092398040350897342987033684062247\"\r\n        \"8891910045787038724069756928395277953670595630959968898874335051527496681463133794176157145807591872109216\"\r\n        \"6144382506150797267436509897049656206429012398091894503972795298016547064662347920285527872288390895517604\"\r\n        \"4191810941642460040564082188712438936906291867000270523960550332664002210898302673308442754015967789648657\"\r\n        \"7199640058529357006968235192644651239960321968186374102417320609944271040560945042782563241257065556055749\"\r\n        \"766528606414794921875e-307\"},\r\n    {0x1.587345c18153ep-1017, chars_format::scientific, 761,\r\n        \"9.\"\r\n        \"5803415071347647865082718369266434040574270026977809712667208404792036119580302875847883246591206937429220\"\r\n        \"0765720124757014325334439209209434046539893719315938780007431549634993916215217605362262858269407426842334\"\r\n        \"2012580732514751221293610595763003495795061946838666946253209134456556726989193259291618902375718355472162\"\r\n        \"4042439056845036040587911004852089800421901874454407994337108163738052947210061561024263715054967969591411\"\r\n        \"0270363560682828986102429968210287319178363269091390190666341835673642784686119809160641359798630514658952\"\r\n        \"9621994975436450348729144771801748911075356977674248196373371459254492612305520113008095746852968491757589\"\r\n        \"4312232673600164454503147125519469744188854742689367713126583601172208920773079707158131901323372403567191\"\r\n        \"2133693695068359375e-307\"},\r\n    {0x1.f1b6b87277fdep-1016, chars_format::scientific, 761,\r\n        \"2.\"\r\n        \"7686246461533842708986290401534510677245449052480438452772935563477911887903937433332521175778793903095384\"\r\n        \"0412239557231923283555660292437990927601776574893980601557250737329754310915661825472040213756951830291482\"\r\n        \"6971556169842700521540676609741125857389706633023242364855348478771230295850829291438723530923932923590702\"\r\n        \"4151611338319751130631733719608246390666274473865694983392385750305737090058291815147877218349104719543513\"\r\n        \"7063089136683774947602824936693432977762482651171413713941775960038695919756102724251419600380177635071493\"\r\n        \"6245861443988258956704733318591666199586331239518529031729048520377213164363192327716960117074516227535950\"\r\n        \"9369132897727641328747183370449707056957130139385301002356826323260325258247061322707666120024327938153874\"\r\n        \"1290569305419921875e-306\"},\r\n    {0x1.72a498409980ap-1015, chars_format::scientific, 760,\r\n        \"4.\"\r\n        \"1235396742477088973208679969440262899254505285796142223814175822702981218018251380021070120502969772416262\"\r\n        \"0356011168621659532952906006748436531426296108744371485218418489239052308056360753777114430810169989395269\"\r\n        \"5946140077164320660032095927443769046869340226546265147500705839457828617891438915581029354085740892509908\"\r\n        \"6126202065003470601897807688053820010379771148507245760602767529755342564783534772481563133530608872155816\"\r\n        \"3170273217810752940595356441071317848377916852111771962558733789348917288503698641911641096452799678633118\"\r\n        \"3241428470038337938910339876846473513908343996450852057201827354601830122948746860487681564435359569830201\"\r\n        \"2244034576878689343471222581935495027065359114155162611459186679259780987690986908851542569465209453483112\"\r\n        \"156391143798828125e-306\"},\r\n    {0x1.ce91e910d066ap-1014, chars_format::scientific, 760,\r\n        \"1.\"\r\n        \"0292523314007669232638574122959890467082535280831773462781705248559642874893726342757936877737789465732731\"\r\n        \"2479354581078416852016211748037289062294153412444887077225201260286873016177402040776581672627422105268655\"\r\n        \"7419196324208471582119260101560948486357037365510139379540004408308132593738795998437771752956709763675038\"\r\n        \"3014741316553229608555779896363377365729952793542626535019308363767322768135329791753783704045210472287174\"\r\n        \"3258998969100598727128250967239986818240346849429624604806528929509814942265446828862812886192478721784982\"\r\n        \"9763922746869649849450345544760606574327399799533824584266016235963525049495453939501167672500218822286450\"\r\n        \"3213932415104343443746664957043752138584117730581730514644229269575090721314998575865173879861913519562222\"\r\n        \"063541412353515625e-305\"},\r\n    {0x1.a41cd0fb8478fp-1013, chars_format::scientific, 760,\r\n        \"1.\"\r\n        \"8695629667714589591675011459069349152361779084993905567488662819408615881583054005738477193311059902345076\"\r\n        \"1887740398618582452621943937695612634176016332254849337060923845633060080657730525723232050132901795302428\"\r\n        \"7747627232037457266368651155516174545033578105816636548996204160600146117412245796293507856944957146706304\"\r\n        \"0254113362718627037659792095227781184269228376974078923485650054103229807045611097285162062152946597899434\"\r\n        \"3606420788243552352751894800076450567507229035568346316425077269088928498850264418366552561657569635100768\"\r\n        \"6952407174842753490576669187086405946186033731473973426151694416850707500076337061041599563960687925311368\"\r\n        \"5553781567772169884961236205927091959675967933403932478188107975984517174399812395983733193105535974609665\"\r\n        \"572643280029296875e-305\"},\r\n    {0x1.3e41d54eded4ap-1012, chars_format::scientific, 758,\r\n        \"2.\"\r\n        \"8325827575460101051539146153659554542949953849899101704093223118334282451264669960468445814674273734277278\"\r\n        \"4980027834494082685766178127629247208184380986441039452161190285373582999883474215846885769779038605962665\"\r\n        \"7678189248144526566294279581606276306288020536846141644176497881789932815661474116675442020743817107419678\"\r\n        \"6033403238981156288307360202517295738237238234044693827210253447256461636044859195631301675170218334495437\"\r\n        \"1143800460586565184398113067165957481092210378398497900972951098730107411912334069394868562044554181578968\"\r\n        \"9681881384571986389866669746565242803754572930194362570076270849264642814287648059465115948199864438616530\"\r\n        \"2340702226649342072166051234769942192131532561249089789855476072421163114219198973092739279877605440560728\"\r\n        \"3115386962890625e-305\"},\r\n    {0x1.59221b87422dcp-1011, chars_format::scientific, 756,\r\n        \"6.\"\r\n        \"1435754675809883764607389644039122653481643689751494279548380407226734715556912511959558049135199048091303\"\r\n        \"4570147895374919927596970561282274649091727304992573536378826177765491606914330790712251813627403807741060\"\r\n        \"3228952574550189497787908659493137234313533520312295234438706051770280882165612147632789337287128790236358\"\r\n        \"3684228396504255283710239792217487466451145359639305211018532224666776225360631707573627254298962575843632\"\r\n        \"6997585642760239301816630363203045431540296803267094601248551668127076407345103299971987320334913146074020\"\r\n        \"6557039826594483610259885518699987425238236440286961754514953182564652960551764735240281677725263789812661\"\r\n        \"3360122856215329758437263182035107129113790998892977867473178270734270283430110068390028743579023284837603\"\r\n        \"56903076171875e-305\"},\r\n    {0x1.922a6e54c4bcbp-1010, chars_format::scientific, 758,\r\n        \"1.\"\r\n        \"4317575812076783279096962507607344781067968670789399357106075957085731026073398561781473029430115436014229\"\r\n        \"5042738269957197194482263497390666912499621452236468720067330567331779529652769510718792075605208255229780\"\r\n        \"4453598386016350631514998361352765835015287841808273033244090798155636616618100736973069441228252750043602\"\r\n        \"0203687243042317304969036116006867635224978070867606390602657909489556516702811707764895990014055554819168\"\r\n        \"2970313452199620495617335159702746235323083593453065072144972997529670760566203914519278435423331980290138\"\r\n        \"3227718965593270032595543344712007425459523297691036565265412105198702522141620817697556902837198527180570\"\r\n        \"9506606910343882865250484528903431183126572403711830756908976441373889806932772055664271348973670683335512\"\r\n        \"8765106201171875e-304\"},\r\n    {0x1.072696ae9ff91p-1009, chars_format::scientific, 757,\r\n        \"1.\"\r\n        \"8736954404407842914371682565703603275065764259885958103791820006438214075779341036606769350112633220313924\"\r\n        \"4013286873373278194295713473289353980269648254008823511740795625917107257638613508520649307128393978192620\"\r\n        \"0705468314546127800658230827802488328422886555037223958144179314615586216250084158766674880816820412018646\"\r\n        \"3506557142633404052761483488369917577746023162650582898107046603525443910985220071389009387344317203213496\"\r\n        \"8788006389079497093133715393761312169804834914967830608316141061423753171621552752239867268985731345293183\"\r\n        \"6000009671729651430504379359358929467240989725060006847711032116813580555184077897939000848084702416809622\"\r\n        \"5624812892285306182628743961866717634410103283855733573331697661905063280118823205999678549460440990515053\"\r\n        \"272247314453125e-304\"},\r\n    {0x1.0f9b544278c4bp-1008, chars_format::scientific, 756,\r\n        \"3.\"\r\n        \"8678085703767115679707960176797382475896222472846518711203204581057046445044323572045619149527021471033513\"\r\n        \"1037742529492665225855291158606504096304763954369359355075134749682657763340277193897585554908876427528122\"\r\n        \"3404237262544370036021050362028274509177214367131685009066980529198965345188509320693984189852122869096724\"\r\n        \"0307762668804484986822336109648123529928998213973332360935499253090321992465599641371421976527675643722147\"\r\n        \"4818553028447896343622184778775789582470210526709724599576515721933721910757383142738726001358720616381592\"\r\n        \"4229271802232530916741889867942756272048490315195062592530929515848282749067855559474139733793821353946484\"\r\n        \"8445188615771182360486800621802327201033747158405727472729308966998705733027858963413159187894052593037486\"\r\n        \"07635498046875e-304\"},\r\n    {0x1.0c159c101694ep-1007, chars_format::scientific, 754,\r\n        \"7.\"\r\n        \"6352975143049522614438211587901154588102399522679308870720966934866278134299233303209132483254882406877024\"\r\n        \"3032314978411326683785882828449889576731085199036357093879916119191477548962018450810436368437123537879171\"\r\n        \"5398901706373669321385471295753589758753964662654457905715120673904659565201490447825557005135025380834617\"\r\n        \"0283527824311975829475393389338044032315549305419642372717127492349123269421393795189501093425583277951613\"\r\n        \"7482472996690706456618658477990379299062555451161914006646917062753813072403148854358191467247380141960317\"\r\n        \"4369718591349917430634535930397154004116848462943127209818005654101392783570316361193216938245623206104415\"\r\n        \"4092104891133848306373809820626535624355866825082456994424052303706479922855952791049816141821793280541896\"\r\n        \"820068359375e-304\"},\r\n    {0x1.5dea4ce8e9d1cp-1006, chars_format::scientific, 753,\r\n        \"1.\"\r\n        \"9931833457401843380206268213719062063350814301599018679933261580130337290316898735876549592164313534803701\"\r\n        \"0367716961871843460238736763173540738894631496044341513014086769607675313389734660544429847137223449237368\"\r\n        \"1854732828188990763143676913549798050111000449048160356662711177445920457729101143615093098470889673928997\"\r\n        \"8721590778489898585846173250830089770352087321756188087231770443888379781496362819885950130996391895508049\"\r\n        \"5967945265553649325413439043352821440085193375901604390558169700922107887759422298045475048448298435182127\"\r\n        \"1529249898671025481762571674803699881589864389977475085144039107611461508367830308205819849065857072705384\"\r\n        \"2544909780275364598179935132913048405234257751121414962140712577875960000639218860918333575682481750845909\"\r\n        \"11865234375e-303\"},\r\n    {0x1.f54052ccfbd85p-1005, chars_format::scientific, 754,\r\n        \"5.\"\r\n        \"7104439440441903852943648577406503088003161021002627368323935629069966209695533414405887372311247087423593\"\r\n        \"9781943349661969952724399972643565145643565596680341154191365245563840621127630622979641166875699011127504\"\r\n        \"8568462104925391744823983638657336393276468809438060554239207107070390674319071138242241936104300064142641\"\r\n        \"4253161862928768191727964756739054251002351820210559683067678277426478312879053806872980671807735494036931\"\r\n        \"5976069688037470882986462600191569302988629020903776604825882710768551646760758983546554323851915180357433\"\r\n        \"1464966657766198572115325587926099638392334145329333710974022615959231083135651027696907010536501610597578\"\r\n        \"0684355323209040588603358187555694328693197982659012778489710933784939697285300275186870067045674659311771\"\r\n        \"392822265625e-303\"},\r\n    {0x1.0090aa3ec4669p-1004, chars_format::scientific, 753,\r\n        \"5.\"\r\n        \"8457732298371823574823131482226670449533326157358746716791953135062569212292668611641801097780408195948596\"\r\n        \"5888373447402064062727322207217975101640660738989340741657280509189289276615212047497934355406431806641278\"\r\n        \"8478834023123098163293513531622437049966284424578880391547670271754853142196587321184864022163506030620064\"\r\n        \"2833463853585974609101781931276219629563822287439933439020777086511705876102130660051067922171320065746506\"\r\n        \"2465994749375713082577376195362056859759924579898568161899707504166498745404902069366067260964218815046333\"\r\n        \"9524113776506291985183641972212962838327237136002597053343023166906014203406467918165849951752439662675714\"\r\n        \"8515684537136969992272393011690298548643680023668422526561162499435912606954648951251840571785578504204750\"\r\n        \"06103515625e-303\"},\r\n    {0x1.68e98ac55ee26p-1003, chars_format::scientific, 752,\r\n        \"1.\"\r\n        \"6446596413123795549652277705330359127501949597887884484643611330088026618345889007411448311200165299004153\"\r\n        \"2139330705876914793120460121891845777978753428196824338319708537694880490448415548357571084171954782371013\"\r\n        \"9827936080983236731056925429888897928508247060002591227377665559607280147694385759161472019199431022048753\"\r\n        \"9252764806264502002388852086321464182435389525557563807453640035300562682385718848951290103132751234367433\"\r\n        \"2673547866665016504944648849864967346476782260339605421755639569644367437952386484883839418341180039062684\"\r\n        \"1460528189649358085660200495553016137618232436443335627143917562089955116648923161635472084978246578377486\"\r\n        \"6022112969364460310239797566964913160076166500253272495540657636319430742310315762821915086533408612012863\"\r\n        \"1591796875e-302\"},\r\n    {0x1.87db0e29f0009p-1002, chars_format::scientific, 752,\r\n        \"3.\"\r\n        \"5713345155797761761079287822950557022675635846989691191937710506813782658682864940472796826062016923286770\"\r\n        \"8166475001047504811177502998554808270085595314612727547047624036293060053880752125848194352774957680860559\"\r\n        \"0290184599616254184674980579084610532650542277059343477381901087349157002708882523813589860191819919463864\"\r\n        \"5572473742585546004235957997477845885941869654346021359209516817462476983259862602002508582493398382630013\"\r\n        \"1126260391727473707770159740877054653682600781506186186387821934514680593847124459886451259056737591228212\"\r\n        \"7533791281642861022630716480368525884787242037112467446408232606412304327122490841829569553119141625758702\"\r\n        \"4691172442399017515655247762428343915640594942453182541456052819062032841011117278995357082749251276254653\"\r\n        \"9306640625e-302\"},\r\n    {0x1.1ebac54ed6e41p-1001, chars_format::scientific, 751,\r\n        \"5.\"\r\n        \"2264507616884437569805809040739207336366694095277810554730657091293085596388058781521598800524476996130637\"\r\n        \"4980627154903920257708024997792739202136400792180949605152479609662491266228594913712258572249852752399855\"\r\n        \"1285095014756776289555458879942755967386577111803668209714736832027600164037534380000658070281110020332651\"\r\n        \"9987841007167969298905049974104357743571558147007766635477857992855064039069143805060571043111052222533607\"\r\n        \"6906939348214560580910775118826868200509986914895110839876152537097330539855968230909381107897375007290398\"\r\n        \"8378385138191514671010111525187054811597159710392200991099127775914461518114073763353708106827024513399075\"\r\n        \"6049414344541691511157350304779944771415413564368359181745069897590897094359629893034480119240470230579376\"\r\n        \"220703125e-302\"},\r\n    {0x1.26d300e06c7a2p-1000, chars_format::scientific, 750,\r\n        \"1.\"\r\n        \"0747997253788843490025917088317140149354267531941831543005317538947117106260486277259597702417316344843162\"\r\n        \"7823155594400408640689601791632312318793792452277700217881375008551777955008479104306751684583798640011117\"\r\n        \"7331237195678228062266622507530803180421764933136874457770345473896308774311676909174769953465658733136531\"\r\n        \"1730646743826073699550122831792121293574779463809583658915629548187457141074175132979644912781434112119879\"\r\n        \"6449732242461849927674893802726574013367315709379237708819341288775841440380509951443158447860262711021202\"\r\n        \"4512841842169839736663696096780505831114559890703110871001542936248745358663880699070477580187175555004706\"\r\n        \"0426293407222477239023776188348421566739034336984800207756080926084740452888799389086216251598671078681945\"\r\n        \"80078125e-301\"},\r\n    {0x1.05d0c9256bd0dp-999, chars_format::scientific, 750,\r\n        \"1.\"\r\n        \"9089292620000501462461091846419476055370811043243200914242752398813586917946117117276706450408017538758722\"\r\n        \"5660390310015790741172721365183864329136645491654476508380946870544854973961644577246381082657250286554378\"\r\n        \"6724684318613551976033658170744074959929074525489851922078469090207322060182315897761166701384940345796648\"\r\n        \"2390692682550639168953244522694274039612474765568989798173496674976754209790799304541250614878586316185908\"\r\n        \"1832434850661741938378087947299281921587249685730116526155067127702638040935609007598196903511226053833394\"\r\n        \"6368989549925329930627669708876781138383078123518967695199641472080864590952079516774516291036652778177765\"\r\n        \"9754149721554139538144541534629568996232451758594381806119602658917928450846290822084938554326072335243225\"\r\n        \"09765625e-301\"},\r\n    {0x1.d161118863a28p-998, chars_format::scientific, 746,\r\n        \"6.\"\r\n        \"7862726827637822308383819837405744625386270069383303690107600052832104729374686176902718298036439556876536\"\r\n        \"7007835766438473158503573341233420991356741827641046279183540631203113336246661546736423349686499782037093\"\r\n        \"0641229855313759587426623336318947131414886263684536725151767642125347109002448147389830994122526274370789\"\r\n        \"7617018358553974800233291485285224355118796255276967020647450176078219330437486876008901717954573383579099\"\r\n        \"1047714288626185265103482007250812237430446740002717533482314627054425459382273947022327354496010149857916\"\r\n        \"6998179831269447169218862728847291808670566291805820903410461158893419653332870539994687457679135320191821\"\r\n        \"8210212370421266288662389144108768187401712413790015232870218865309040051636557677738892380148172378540039\"\r\n        \"0625e-301\"},\r\n    {0x1.a15ea25a19660p-997, chars_format::scientific, 744,\r\n        \"1.\"\r\n        \"2172372613102280993179252931186926982692345919033968631102111765103315033304380176933385417160002408427950\"\r\n        \"0295470238003737903138964229170029641147550066555294617444125756680352014437431112856968897249350959816759\"\r\n        \"2236046524827959672222373231938825328608517533711548379199837592813292143627291147239524233411932374697495\"\r\n        \"0076147620325900633348562563414895932402962713954954623414922689851738589686706046155327824502166704335474\"\r\n        \"0483802830489519355136211942835589461562419698678550112002073553337267646181096609192841991425028505763676\"\r\n        \"5310643658630077974934313260104372537119221193415761606516937805300536262521389430432123931165919988196641\"\r\n        \"7445153541195275166274485974787587695265918859779451904129303848765483730964831465826136991381645202636718\"\r\n        \"75e-300\"},\r\n    {0x1.3405ef09605c0p-996, chars_format::scientific, 742,\r\n        \"1.\"\r\n        \"7966676643662128335665392247768118683231502978059871166650153469309831612890500966882039821861868400342764\"\r\n        \"6561658712020662099545587837211036370546812947350494432238004683763664567568973440673650283854843511596346\"\r\n        \"3698442719535496115538726433986266863862950537061969082882291651460484133576667255869437876496100220690327\"\r\n        \"1627540775195602113421651211440307831129924696845524348946549788527717960851496934136922932274256932207250\"\r\n        \"2504730017520700249939263105447824182001422269657481368614500917398558972900508936492536325012033905462034\"\r\n        \"2733517067914324213319731475850729738988853204799698138245429919661266017564480782965092181767914524772807\"\r\n        \"0114038343552765434718432890065190765206137218078347442517180856079439532635433351970277726650238037109375\"\r\n        \"e-300\"},\r\n    {0x1.d446d39179d61p-995, chars_format::scientific, 747,\r\n        \"5.\"\r\n        \"4628196945287030878864501228515552805464723717056197760606756889643903510249553048439017711133773671440354\"\r\n        \"6393863354679463635258948740705694069667341257396888036371466715243466156053378293733554928216028872449926\"\r\n        \"6270281940200034766664065924797146527366094882988718989577228548661057271640470276933597886851166967309922\"\r\n        \"0490286146185662487877704337685653857174654805590027514341847429667755625338708736633025559983835650906911\"\r\n        \"7082144597398445022686629737262804848201604027875209019963234888348727732753557137541010501446542044860603\"\r\n        \"3076124889789498045902945493217533531235155103049453504888178998390271594265142786559200789840036462465329\"\r\n        \"0699411376938730047962082755849242672666320969811738379369429636779305695104547169194120215252041816711425\"\r\n        \"78125e-300\"},\r\n    {0x1.2a6191841a2f8p-994, chars_format::scientific, 743,\r\n        \"6.\"\r\n        \"9617062487220514621989094015930584333539423148144476551620642624680348776495275585358068724521997148409410\"\r\n        \"6383911454657957927017181245452872915474622111096382221071681697520914214818303865707205751044498351025044\"\r\n        \"4536884198365605166521031955111219642419220298954347889214534531094837790091823656984057353139300007125800\"\r\n        \"3293035204706020167948760755422183994450699458391794656901738793039684960506013257067218773020004462578765\"\r\n        \"1439009842232692428211132570873279618568830654102695286917053708082753966210260483718165254879075265420369\"\r\n        \"8658797634666096444025144902359009191385276894101485935046230814418030394044362489237345080002513507196221\"\r\n        \"2292725330139318787534438587025433685744672341079724930282999161273299604246744820557069033384323120117187\"\r\n        \"5e-300\"},\r\n    {0x1.43dd16d8c3d1dp-993, chars_format::scientific, 746,\r\n        \"1.\"\r\n        \"5112507155402444702013530602239356519676208975557545662433849515130820968525645380967790058631717581998946\"\r\n        \"2383489016678007812825705103181297543850063798852533579279995518512249438119478194724227415435927609478553\"\r\n        \"0478989334370229123257813332123709533239479541328383215098833929934144690721346831873831758199105011512667\"\r\n        \"0141483262312008742676060289776355889496425001520922157519067534910344942859758756256865735756093457144432\"\r\n        \"9997703898734942358076870125601377536544377173388533764111459177194183621681873341290551265610317343464385\"\r\n        \"3672019620647251124865042369790323166084999111485707852379027804775884480582808977213872674467521399597635\"\r\n        \"5584951293948756727528587090551401340178932148867448233676410270702548249710517325183900538831949234008789\"\r\n        \"0625e-299\"},\r\n    {0x1.1e84f4437de27p-992, chars_format::scientific, 745,\r\n        \"2.\"\r\n        \"6739808737490122536400919026942802234689576692371479366784405643483990062433008551497319332426200403535689\"\r\n        \"5030064921783009805791888470580796419933084847761281293880427379962271237851947800328657537013648988481294\"\r\n        \"9516962024244211760960748336098090994846015649655386170552493311162069257719900379903030507008588526031419\"\r\n        \"9767588940990499498807868924298521846143186141665068730082632329712887735907185105610033092499947885537087\"\r\n        \"2777021779956743000754547833513581633478384242279856707134228104860925927074204711269107333714275775531468\"\r\n        \"3776136264937390122187354227141214309429715495082890329538893471744410403270954316441211712985000610177269\"\r\n        \"8944311067042059526539301195418948431941957516625083848704359299592279997082044928902178071439266204833984\"\r\n        \"375e-299\"},\r\n    {0x1.c7925872b0513p-991, chars_format::scientific, 744,\r\n        \"8.\"\r\n        \"5033691573552436743032359501867675425844556882485721384874628070407223682326838306017437077936494642893855\"\r\n        \"9999659947344275015058137995788308286051472366936034180700376051612641241581279358969439631011755807941264\"\r\n        \"0180009205258501662816829998856768170023903650537160919301714607898859451205817572487894938437883022633598\"\r\n        \"3376290822291404418924863244602723542510196397911516919435936905242919732102909562672293761027406048075865\"\r\n        \"7835985167284620389463467848900582426969335519962264577071777190480699878841459712168172042966775236944743\"\r\n        \"1326712331419045036441427176290319828551714549495813962256861277779164177883181431486896646293602751921197\"\r\n        \"3383768944719374984215587270106299004243931703144739402048268194422506183194343520881375297904014587402343\"\r\n        \"75e-299\"},\r\n    {0x1.627c15354010bp-990, chars_format::scientific, 744,\r\n        \"1.\"\r\n        \"3233106901096892065379397808572390395445480166333342374132370300121192775365256676551830867982461560404647\"\r\n        \"3777896550467847979014748844578467275598314335113075595369097593300537485855884838260655662363690589028654\"\r\n        \"6498407090340200266273232047853174074580694696818844330785856152531370577370227513485232394640688728493031\"\r\n        \"1135847573135818241585024900463197122494596403199246606733219005485941416655806006702981687133567159445266\"\r\n        \"5264784897912598384678392200864189243829386425598374397938130908968237282949373565710105887439242496421421\"\r\n        \"3457126729435160471794471801982845652213879420707161040622898225638702937020553616740975943614118011210770\"\r\n        \"2980056185861897975475259225613788646834383911028404539765069186955590008203387242247117683291435241699218\"\r\n        \"75e-298\"},\r\n    {0x1.1d2de00ed154dp-989, chars_format::scientific, 743,\r\n        \"2.\"\r\n        \"1291789776720231974744171840452344550382511057197936020876953529640730687265974572615745465067992041620069\"\r\n        \"8777501121683256345606354913401960704423029842081367774831586751504524522776674423749062780692170748646712\"\r\n        \"7042943546561615399294326604589514550653819458352282966533750051174678662358361943789708146595937329877498\"\r\n        \"9140003486840484348673799695074315983476709436945484939187203715033177550788146372453950458146622857219661\"\r\n        \"7273106008632520237983276624844623210830411434978194668918585129565128333659485382511336320510797758394849\"\r\n        \"7066534832654912056496337016989948283722604021746733182517415331234370695363197261511199956180205135316943\"\r\n        \"0561914971324547624168015418679749304199862313667091306116297604131976095587219788285437971353530883789062\"\r\n        \"5e-298\"},\r\n    {0x1.17d753cb61bd0p-988, chars_format::scientific, 738,\r\n        \"4.\"\r\n        \"1786486152355461374776858263541260614950495378611306967856664376317856708608093736614315389654405332780988\"\r\n        \"0689426945941220120153421904054106863117496760957640139892128130420227762590755039729804157834222703199862\"\r\n        \"8589539320999048052554586101710114818979133947966212532305905925289774542948861040799079637308077821570870\"\r\n        \"3072502377172962357928714199868899047024282661076090342274212069139243739604752292552932633409518449469092\"\r\n        \"3515593099815763625746247415708072838144287073191379829134836259189096560570733143915925546748005565580401\"\r\n        \"8976745664144920158206659169946960403857699609960069561793275867483380048607554657047054862232324598082497\"\r\n        \"358302008075588962346666145156130842715967918196794561008886211006529975975354318507015705108642578125e-\"\r\n        \"298\"},\r\n    {0x1.3499cf58eac56p-987, chars_format::scientific, 740,\r\n        \"9.\"\r\n        \"2161893778403732513862252343445239008981140568922643687663896941163644334084345821330989953720210499840621\"\r\n        \"9160441214807915624700581299217694372147060099730582608651734963216528832267933134373355153359342883308274\"\r\n        \"1031301445760468599085716685646380991547104769050790451044679611799053816971826590912754216056544099398818\"\r\n        \"2528853848068150300509122056753832693713094307177084179547175302766171211400043481645401436905858815277797\"\r\n        \"1778893603240997534730307040753686951999518274826840134999719889934188564885663380751476200671715491306522\"\r\n        \"5875510502534842446581576198070129986491767883536217287215961728669453640209658291317958839138963689034141\"\r\n        \"88789632715887110086986492180657573226368342685188914874974230699578026104745731572620570659637451171875e-\"\r\n        \"298\"},\r\n    {0x1.51a27e8a8fd04p-986, chars_format::scientific, 739,\r\n        \"2.\"\r\n        \"0166542228894893663309521343065653027086245497896068869059180976583615938098889986991041485859172655850284\"\r\n        \"9231212781790493656064318876082158442840914388695516071513871282541627904960007529256925655758366238004656\"\r\n        \"0935056627139456537528211198364194749602836764902987565025944221130708673443828163387359505375370290009445\"\r\n        \"2745724436276139585419606556712353250612586551744106137528572254128169189469681750106767803119244277794048\"\r\n        \"3750210471579159462599857421379948439622868937356578266959909594120741362514869852677384097257555841840521\"\r\n        \"5236796758338972388174626883880522031537078122191460297407274783067835677391633127317778686117811785197733\"\r\n        \"8577887683038299362987414194915000779858380976854620285433129268926055743804681696929037570953369140625e-\"\r\n        \"297\"},\r\n    {0x1.28c16b4ed7098p-985, chars_format::scientific, 737,\r\n        \"3.\"\r\n        \"5449747515908893859520264700887688271107416558032715906653570211101157114219987495688096790234026558681710\"\r\n        \"6753141856950390441673389046891140333791267175538211915142881836447148902272897131242054424760323762734875\"\r\n        \"4141190178165059795776451057876420487228094750780831495237996530558044233292884300493086993773653449202457\"\r\n        \"8818090715338972401729596065603472996108834056777416770233084403727965152368376850711830195137130645640590\"\r\n        \"7046607319098707053806529570935342883620442701491795272567870361575635905003352499512824154974326187486698\"\r\n        \"9060265662902975470835003190344156534010770165498653170496875412652458097421921303135343195297833828784423\"\r\n        \"96301612754526570175306033284095638792306713346530524716480707592136667472004774026572704315185546875e-\"\r\n        \"297\"},\r\n    {0x1.519084374060bp-984, chars_format::scientific, 739,\r\n        \"8.\"\r\n        \"0649390857434579193115655390618626369629653008353154439327413620740314818119036634456720430925246670592130\"\r\n        \"2576840115065505875190702262346443580413571712749788204695695123012277087263105239201891820479284533969818\"\r\n        \"5186455177319075030110798057602091473932084908015034567525286047273421566565922229061651406247462013601709\"\r\n        \"9678838136927214185461292825117230319532485842557112068939568153450865993280216546928857042166319106957693\"\r\n        \"5849602489732653894260268826761621079492065154996852043006813295420056272714448441938250959284349518278972\"\r\n        \"8109873701528734475851958983525486767921479203821534881357550897232367303129611065194955396175464225609057\"\r\n        \"0653475980420477041519013852253561174979884533208594899267372506368456441805392387323081493377685546875e-\"\r\n        \"297\"},\r\n    {0x1.bb4c1e678fe69p-983, chars_format::scientific, 739,\r\n        \"2.\"\r\n        \"1182119864764602130642094783087206583734941656216310675491273631944013364753704741751950662508914029324838\"\r\n        \"5386753482217342594034540534307701346332311222871574796733810364341680474829175453754906619121554670765885\"\r\n        \"5503073696569114420021537616341893639125948726900059561203121631918388786858610891472826691304489021041592\"\r\n        \"8204921425043137414284707993217579365651624846035324808539913069705011705983388530603140990470370905914366\"\r\n        \"2429130360743269466709195978765360244654637182808686838641860759085152084357532663577478471344174751577529\"\r\n        \"0972240748548223967022722809144914777444077303014654296707516764326758858020731632035706253909022691553299\"\r\n        \"0280045685258559475635362835015005020199131435664704208816162996076304381176669267006218433380126953125e-\"\r\n        \"296\"},\r\n    {0x1.8fc48720ae1b7p-982, chars_format::scientific, 738,\r\n        \"3.\"\r\n        \"8204276533494359839532778695795003743446747435092568229275870270753905396609753758094766310024169594340308\"\r\n        \"2531804530234533427497205555769804527722891005758348613020336577997700742420034577833321799026159177505203\"\r\n        \"8674621644837883321860447905574589203789932596264453065004201158075133646977415286488731152080905405203288\"\r\n        \"6266679457055618321561423956395086302343657062006032766471353302180451828901269627826024873174709466366952\"\r\n        \"2603971081606399156333469955622929484291725938608707418721047578358097887363479034370662134536373850191404\"\r\n        \"1367247728531590692172129197246521625036149275003013119095905494187761857146715048378242133953612536023019\"\r\n        \"323048284861285524529772302016446491866534790783641858391019539842314856059601879678666591644287109375e-\"\r\n        \"296\"},\r\n    {0x1.df9d17014fcc7p-981, chars_format::scientific, 737,\r\n        \"9.\"\r\n        \"1669699368021086682830030909381357128562123247466233909897185256173290436869196843837665941337171529679475\"\r\n        \"3554027780942902843142861485494708552404216026343714053469828571423620780701853124085458958213035274017523\"\r\n        \"3562430379023280135911193419908156405083538884612994163219093960837540940184158271766902246238563881542840\"\r\n        \"6251457874360114711958891056340399560828449448045550476994666752321648418727132667488079133200123889863209\"\r\n        \"9770597084200640414102147020755519357329067231460009340640433675296982654429366131186868621479458580681292\"\r\n        \"8077014517560803574745671039698546093195029449723264978711517158326702241626826015082812354952033962735634\"\r\n        \"40918968053523398319267275737964394466129772993407912666757701714015382776779006235301494598388671875e-\"\r\n        \"296\"},\r\n    {0x1.14f46f3c4a3e6p-980, chars_format::scientific, 736,\r\n        \"1.\"\r\n        \"0587007370833376930716458861240726931462968747989541788325161898554411576600043532117576307710243415965780\"\r\n        \"3371982184680260925510856439625563819378279886442352941227379220220640407362537154862374128710810114674567\"\r\n        \"7514478491771437336532301602490071369439129589842422269461377654471657420744038482489238158431343585984336\"\r\n        \"4112273523714497764911231356847826305616843916838285794259969923537096357742706370960263518594403395298085\"\r\n        \"7182155015332054436960602985037397127457131249088164023687141746534813653668115686827607828769158632621634\"\r\n        \"8211661922776018594564117076133002365617217752004182146230232982446412088873912163365353558350257031136436\"\r\n        \"6418258839009664698934453704098273993991469348626790718931843515715485182226984761655330657958984375e-\"\r\n        \"295\"},\r\n    {0x1.4f1412250492ap-979, chars_format::scientific, 735,\r\n        \"2.\"\r\n        \"5617734189585967686818299768257372568423106543272584457448193134718128599177000553291346980043202473956121\"\r\n        \"2180367126021412392244741193093745572031930603983359883904384447106760541450042234370555490923410636519399\"\r\n        \"5271125408960594257515760719605036779487548177007694984011771817662329599641936649037337848258202676646918\"\r\n        \"0324868409975856119135278174695452389974070452340956443806736535092875052779083369995045277193094102198751\"\r\n        \"7882529396548606924708322774133458177969737673112380202006832077418450022973957900587161535254837673962218\"\r\n        \"9939870489332022672990844324757213970295295844625265990020341139334420341388520264993199887535744618476933\"\r\n        \"977079195980768174754058802045425915342354542418540247245180296875588510374655015766620635986328125e-295\"},\r\n    {0x1.9017f415ef785p-978, chars_format::scientific, 735,\r\n        \"6.\"\r\n        \"1176671633415973759609001711717395696866869599742022471777599404256210233902902155237520408258615349882123\"\r\n        \"2345052721336844845647017772470586010537618628661882879046216714785572845072040142162072217724152815520427\"\r\n        \"7434678258158119268340086515696034960671064545207292832947525798713291829364263480267044200323637785949438\"\r\n        \"8102548829612274498076763793880960706749651498038909594010336103449964450053626521644029697954744301714206\"\r\n        \"2487861183843172080607954096705021991049257049493594690141603262357639301600484671778732997391911525141831\"\r\n        \"4656160745439460383763946147928236577727544572145499722938153200720552176047316890086301362717234566541647\"\r\n        \"151923209709182593285429056144712640551237160829125782371580577478908935518120415508747100830078125e-295\"},\r\n    {0x1.96e1ac8ff079ep-977, chars_format::scientific, 734,\r\n        \"1.\"\r\n        \"2442918509206014012028953502157484899302248375526922745314229166692585546772990892217496229641056244180835\"\r\n        \"5613151956891377577895885020022496772410413988317059045245377611213388418239106676765461468848383746280664\"\r\n        \"0929738154742991672225168441354650138195822558318864938044614007032745608778442983632656067307717276665535\"\r\n        \"8175666838652658690245143514862764213610885902701104197953459657922797754442670964483945940232205602535173\"\r\n        \"3747561716472202211817409708258360725922875465550779760937086007766054677009929064967760576046514113812222\"\r\n        \"3636084341489934911882403581096088174673455142188302497447440448899021951800042462326739293158886225459160\"\r\n        \"08495285196154157875508821587667877847598940277661829097687051781662148641771636903285980224609375e-294\"},\r\n    {0x1.fadb23cfc26e6p-976, chars_format::scientific, 733,\r\n        \"3.\"\r\n        \"1000512351261170557348686264751638282347697441603952716948646046693942464502542196818852403552824031750041\"\r\n        \"4947458847906837349261846175883025166164806498599908783951915826113591552191892899938026717712946307353394\"\r\n        \"8255638002534280965595353092919104693493427497172744505685162739090774795106876820569693546699239184707928\"\r\n        \"5679683543224431856784444083274091500700420703555836987399712520363953870514465047148032607184325622329241\"\r\n        \"4232090453376616525296057392478727384385760735974124403991028933509493200214488404622950198348128729879347\"\r\n        \"2514307330004432461763750012676803885387452378858427867468188188241476144860361211975943760433595129660724\"\r\n        \"0419261927649158173573533413935670423949606511027942182777417112760076634003780782222747802734375e-294\"},\r\n    {0x1.c2d100e9fa8aap-975, chars_format::scientific, 732,\r\n        \"5.\"\r\n        \"5145996431260139100993467191842543303968665047751359175490329248140080201690655843472208689617281422163505\"\r\n        \"9465153760311444328611419690134650231524119310940944686897401473972303914830917415065953443301454685388122\"\r\n        \"8415224134154043819888549152070816439653378310887032225499836821436715596770866662350547108554679082936746\"\r\n        \"4674575770464713312264697289274394842495745574537422516867037314585991641886069493735438794004631014086781\"\r\n        \"4902330463154994955086532232557782440079216740709862709191364247832437561527741320374664494632591901127302\"\r\n        \"6587248425665118907646056283387444873731418111750757745277659752247589518641113946873407135807482894539278\"\r\n        \"142676044746795852491585953284333927743046282564834512270046662507638757233507931232452392578125e-294\"},\r\n    {0x1.47cbd89edc28ap-974, chars_format::scientific, 731,\r\n        \"8.\"\r\n        \"0195180800119955218580043524324296264728715452014332332170246674538871845805219648492909707144892198471904\"\r\n        \"0400825346030529599798793600046834482647444437487683767751220097572919791242799892524698422822978446221165\"\r\n        \"7237982567495904839900279146786398360818656186570954245843716698894420854352456620438185242918109562666605\"\r\n        \"3625235057734407156147486304856183344925087301696163775028804963431540984237380150218682479654930440154361\"\r\n        \"4208533335453633897462326737963649687648265020685474228502202597648554842420403440696183134806821821458476\"\r\n        \"7854658453964553739423544076630981269681312843563475213302475499714965733582391790622273205357040908868407\"\r\n        \"87322202915150173415505785588461369367258646472150182028804099587659948156215250492095947265625e-294\"},\r\n    {0x1.c4a8aba89bdd8p-973, chars_format::scientific, 729,\r\n        \"2.\"\r\n        \"2148549407571021803058758089237874818004404516229096026612875823708185387519711434118448231175696552473972\"\r\n        \"5514269341594904066527742443470740785459170633244811385112780556696588157177143608961573643126150562761915\"\r\n        \"6849281750933181906556668480299887622009529190391532401176424108617948387268885330819182146283103769726065\"\r\n        \"0618579771433274264469131477484276258449987868177936134280895329165600889520845336168357333217832316495642\"\r\n        \"0441319644683365839431195202310742805276534309836915086270614032968345195613629397653273340702900233535205\"\r\n        \"3483609729854816729883780272599181867846846521014410520170084903621204572180935977607232534510932678463816\"\r\n        \"822029867718281826574420236100747585318545294634398450106527178604665095917880535125732421875e-293\"},\r\n    {0x1.ae1dec42dca09p-972, chars_format::scientific, 731,\r\n        \"4.\"\r\n        \"2091145246438698296464197678858462022320601841030835843206149990791488671059123306883776612699424108754647\"\r\n        \"6736165489660708158188897653252826134814761213834692117553854271187898625371210169220451412074088885812485\"\r\n        \"5710541461898075840990354146023487795168820924822425403426146314849307917765992062977805313760286080036912\"\r\n        \"5671659281747652562037736469615487893495477714687409716479264021912064773034682227763646081732196052572030\"\r\n        \"7042509474279237735500174408103971978728587499232657269969095263398622200501943268247798636403094152328953\"\r\n        \"2031147634770203769239297303467977711453401539253419892970190835849736701525053640119980542501565476014438\"\r\n        \"53999776062961816363960978393038157465241961259638119909054498890554896206595003604888916015625e-293\"},\r\n    {0x1.54ff221954c16p-971, chars_format::scientific, 729,\r\n        \"6.\"\r\n        \"6739709449862607565675687782920119483875632502307667185780159162168993863980184050971107230906704288464015\"\r\n        \"6496699439994300838785152866487131226692050111421937130047388309431505994270060996058822819880128635044711\"\r\n        \"4884254092561109053574594536003321082373236228343853763690520906814230225860764906029592314130816213101024\"\r\n        \"2194197916325697362693742596076819693587167915078095246529186795090291998404360439137726334573248196108267\"\r\n        \"0822286777585677288460873248318553492874197977095601357714718256395148609413826610224397173111647233642602\"\r\n        \"8926215761392757848297473482615711761267249168799474035866969371240333263088855516815397668226530197493884\"\r\n        \"525983129937954791936115506649432796777077774136549374872640072453577886335551738739013671875e-293\"},\r\n    {0x1.be2f99979a8cep-970, chars_format::scientific, 729,\r\n        \"1.\"\r\n        \"7465463640233769100638197360771104302050851103989186606102081931650026488304599327327558753282729200068332\"\r\n        \"9804678627668050378425568460067787042712273854355127306999057546471422220437915342161900314891762709292057\"\r\n        \"3721527715623421389755093972134547171078825977573421206869147881140899358764839567176481371382813534485115\"\r\n        \"9835678704427518919036015896266154533044169369007760086516985334355446363476266907650310724315327746390025\"\r\n        \"4578075093931194270369530646516335045309634453905095844888951319898980495309981925213072753792773010838101\"\r\n        \"8242065386226332023454226886482050639863587133447070386576679785063884990939398460469896517681871811495270\"\r\n        \"565050105345772489759853919318571093384770703357713843295595523841257090680301189422607421875e-292\"},\r\n    {0x1.462457ae27e71p-969, chars_format::scientific, 729,\r\n        \"2.\"\r\n        \"5532945426002904780507157538181669248527607853073242744554647032768966856497503985566702814500794761713015\"\r\n        \"1141601224844822200746378164407163008645601989012874056444092985231929202649672787574039697242924779836829\"\r\n        \"0103900949007393832538886143168315948223660409479333004620541843867294642578845204520026497108979679013560\"\r\n        \"9295231175581237890039211997494098462608140330553092569686196215361473140966026675727675473684805370218685\"\r\n        \"8212126583546909956560076422277384338487963183774513252266281901186798524198419702068981637862802969769450\"\r\n        \"2793001789351434068617111543379937626164684311069822291752668796387656882250217177699698369291172140147851\"\r\n        \"454964940605010325751218296624302065265450254613545551241049480495348689146339893341064453125e-292\"},\r\n    {0x1.c9bf289091a57p-968, chars_format::scientific, 728,\r\n        \"7.\"\r\n        \"1671990510048377614019126542833310289999616144912903876805253277584351602647703123458355536528192167364440\"\r\n        \"1662353287232239949764532980184843582562259507270415311588513053208283288743801563778406068749572307800194\"\r\n        \"6125568827170156775233327361851224388982041403917785806215783044313688219646403826782962055511360668264737\"\r\n        \"6897088961002236150471094097641106960350616121428369305065826571573273641647725775688943703343567101225478\"\r\n        \"9953333312287057640008514453879865778655393259160740174367773735675048949532421715134949497702708361285237\"\r\n        \"7322542673884527343694192326023200301290131404052076274549091612163177499275646656982709711584001572445734\"\r\n        \"84733167635547219613675510582898110780193501917110197874105637083630426786839962005615234375e-292\"},\r\n    {0x1.c9a6c21c0e44ap-967, chars_format::scientific, 727,\r\n        \"1.\"\r\n        \"4331413352279302128149191072605813876697528611345885441115000029609556842920386965482577284207290323742533\"\r\n        \"2199509594307830151946681984866655822228339143835403194270253223913061678439860917065041842332387051370077\"\r\n        \"9500944288148698788627957916496725038596154564027501474646179397442030182754135054292301436144243035179137\"\r\n        \"1270610282715417684609169626900527234807117188403332704905395975649634750649953559577652559528484291031633\"\r\n        \"4676186094662346061090628337052908713177247664619683224737543046454127747542696798955644966121171604862571\"\r\n        \"3175695589578575525883542807316083301746126724381306477578494291843709874477007787068278367148644618010713\"\r\n        \"1875144882846097603267302176234293033266604144621188254848931364904274232685565948486328125e-291\"},\r\n    {0x1.080ca19dc76cfp-966, chars_format::scientific, 727,\r\n        \"1.\"\r\n        \"6537479214140957496644432073018089012144452120603766472454112579144784777132047524978251678680652305622500\"\r\n        \"0499253635866315767976997523004602180573355978400757182575064036053958408210190339447230879379051417089690\"\r\n        \"2600640674876720995879922414089510417178382171731253321930144431314913298710310772875402641130578414655191\"\r\n        \"1643305304636464367182427851593250624197965599005919337369891600964947788560805510699332326217569801868088\"\r\n        \"2270353417276939433992552778680098874211345639068458050074871457491113617241586311735177325328666991945594\"\r\n        \"9361607389174582641520633304112836941762385362003194298015982774531160072879490045018610848272352089449297\"\r\n        \"1559993956728196016916768467473936479509527842902093242027916630831896327435970306396484375e-291\"},\r\n    {0x1.568db6b9c2a6bp-965, chars_format::scientific, 726,\r\n        \"4.\"\r\n        \"2908439090205467290104179871798651941226153898698783477673232932487248769134773470874791558624108005131697\"\r\n        \"3536088629026557536545749155269194293346060062071094839619735992744602682720872020489985764651605227123683\"\r\n        \"4449315338589395858711154446384822881445654088301480606833643769669528121156913759180085536698487352616174\"\r\n        \"9640088098036503504388607252321301774363944935742492341884553608844792004824932319261176330222096044026500\"\r\n        \"1756051164867224989944424575770385717357779091208619818711665610895151705642793452624142140189626570619779\"\r\n        \"0385808753024813077649775797625712909337310437672688236559439684574369461412897368191004528045867884390464\"\r\n        \"739907179528687280026756613807116577015152709246269269183216010787873528897762298583984375e-291\"},\r\n    {0x1.8094bbafe93acp-964, chars_format::scientific, 723,\r\n        \"9.\"\r\n        \"6345631221449255842528627098837665212135824138580247641095033482922043986659116736534146977997184184550644\"\r\n        \"4601994755561347497711188804648235220805765618575601316863143054761832211432259334276682908110694267973267\"\r\n        \"9363364525747904721132014099792189719325293711235087718438176498772644269414827594417119678477271996103962\"\r\n        \"4464068850461484304306996962247952090789771393359568041684499232396514214051736756405489381778675872598742\"\r\n        \"8157370116667389407454794188886316922944939839391299995745043273460133146343884929041994919904676232308848\"\r\n        \"7621676588987291499515095008487221366327604330469301849090855522740604347010078082126314423497545739632197\"\r\n        \"917648583593472744787066092183286022494344519144504612739865478943102061748504638671875e-291\"},\r\n    {0x1.a4d81255160e0p-963, chars_format::scientific, 720,\r\n        \"2.\"\r\n        \"1086057222075156140699923441456450084308897252727905713437086108596166987468409078397587971487533636066512\"\r\n        \"5559425961800525159988473481938995387145032563193842335341149252710258276907339069644310335615204766793420\"\r\n        \"5046245456558650038735730800871978103887994564534273473274917826583210324132525399524175049381515195829365\"\r\n        \"7369564370243965168645236220245406226889139007890757799017450226883309511109663784656864385739561274426355\"\r\n        \"7657149281665440973055056669372106589677993963623493823619251634129655150817988363340633174195752548807091\"\r\n        \"7823271593105149749384800080661837689037203940523891442460358685629634666925659895161508889612895551671788\"\r\n        \"573863480573115671110693838776867128142144224012266562340300879441201686859130859375e-290\"},\r\n    {0x1.555b4760590b2p-962, chars_format::scientific, 723,\r\n        \"3.\"\r\n        \"4206800637910766975986348248756809245585722617245253884913765467082902655863539744793091912901291965590203\"\r\n        \"5289765511658279266066746655823602750349947919758040236162078686374492458909606117047221706343896128942681\"\r\n        \"5347747096631346945775370008450257597462683149099332669442286046338578340101553491642092478945964573763265\"\r\n        \"5303976057606048773717878928602898047324228476912795333101577534185800126676720392565056992132832438154329\"\r\n        \"9424787438555730075039358292293164678724048090901309369949159601150254447351579618707251348992673994468585\"\r\n        \"9607150588631254483057331394140758973297520621645166366212282409238633290902812737463038899559245953449436\"\r\n        \"212948563447937782437491106183531864268581560058202217788902999018318951129913330078125e-290\"},\r\n    {0x1.4ac2efcbe3305p-961, chars_format::scientific, 723,\r\n        \"6.\"\r\n        \"6290167589677367951375617422929271680606864220946847505992857434808143549267256285863593676807534571811650\"\r\n        \"7990734126024664323017252510560123157213222771972932719343366101285834110047644303294398466421171333829299\"\r\n        \"4338219373247383273584684158361076342788872926422826115587259635077003684919003684823669045395557799403510\"\r\n        \"7919232269198025498868586627294909726179966695692030720962338197573754049554465371037256488197839056598921\"\r\n        \"9877292992603247756361908752192553418763996358838205450960619495274938457068746433456118860927509511328976\"\r\n        \"9257647430285377053075634126944778075167863283379686258333392834303348019917586267926480779517948478918927\"\r\n        \"063607609213267237687171277444430229764849742991883463361091344268061220645904541015625e-290\"},\r\n    {0x1.5152151a900e2p-960, chars_format::scientific, 722,\r\n        \"1.\"\r\n        \"3520946857575770466924336009049788127880386587840573750855126370148211922936332843549880833329104097140562\"\r\n        \"1291061084670927969996645981504375234327144377801924067740766068048371191442881668323888989913832196109695\"\r\n        \"2897929141749716680995649364750852884940442785486690547343872512681947134948592736866712512591490524779325\"\r\n        \"5090731673364236766649870776441267794337031914794723417664812216517460238008000903094550881000779334604095\"\r\n        \"3306025721701601332578457998076339413637327928622239485921271826646340819118973796496053821335859717066618\"\r\n        \"7905138168357733394815415483037124393427107254818942235087012334513591656298823628107449960996084615787537\"\r\n        \"90281688211841686919921141420718345664751217256871473892942958627827465534210205078125e-289\"},\r\n    {0x1.7e58e6c112543p-959, chars_format::scientific, 722,\r\n        \"3.\"\r\n        \"0651532125319828043611403886497181631776301530986382422563220573322643168258847453877099886269667781939003\"\r\n        \"7796781862197307930725514343043551254211702279911167296696208484262395929929119796791221572069220941246112\"\r\n        \"6684609711196673612053116397582155620461783165845586140232413390195514862846452362791383900061129942543777\"\r\n        \"9683856317930346474170707234461546445785222564966395233185078975823809338083628329613971259053735059038816\"\r\n        \"9226823931122118444143013014003539703511505762260490564710070701542059395640989371263266941829283247158447\"\r\n        \"0128679373107055110632193260404785063947141156633187195789592983001451297372755688720100822729534737038975\"\r\n        \"00046421729618175608545958200349764878121067677996247624605530290864408016204833984375e-289\"},\r\n    {0x1.3c778445a2b30p-958, chars_format::scientific, 717,\r\n        \"5.\"\r\n        \"0740229754679630015597497635411251704782842388847706892559998222461039019858354788545899536364164695375615\"\r\n        \"9004970663065251376452644444722367868679833631961456879821363325500296762139359140059831135664037636091103\"\r\n        \"7851826795084045937024297722699696856108091789878307056427588017412016141242065429389459914673058410334447\"\r\n        \"5029045630695628818864852040810568120665859876397220638806076762863741270024917808851144173068814023493123\"\r\n        \"9465794949117932333473719195382807214003119528830022330600771410797617629186091757430776249487934472813481\"\r\n        \"7295607280179935636124185858339459651464992994383411267201247553011716792219570153380458235643643535470204\"\r\n        \"673305630435954878625940750273716264569061340505840007608640007674694061279296875e-289\"},\r\n    {0x1.d5d886a6af07fp-957, chars_format::scientific, 721,\r\n        \"1.\"\r\n        \"5066401531008765660209715620847113430721240845311467067488393060399424689768179013689935270456617217772626\"\r\n        \"2449294236315192284938560348589795751273940538757255549062206419695642046911817014605594134791735095417547\"\r\n        \"3496661062569118259538483356471500150312765170021570234313983189886563782145873240440323828891290807194213\"\r\n        \"8146945071589392359015982750809131377045618332285170839599383602029439803065564549875367002305011744027345\"\r\n        \"4791998767288977253280431451014572515866251973827561103685944590487910895898225162299074096391327451735400\"\r\n        \"5702009089867354879711711819298254603418980386599420783790582966667612569549001195037944795412981296229040\"\r\n        \"7978653640090229326186696355379052802457638497724001780397884431295096874237060546875e-288\"},\r\n    {0x1.b4d6ad2f813c3p-956, chars_format::scientific, 720,\r\n        \"2.\"\r\n        \"8015937941494582893752219699378451541676163091913910886367587801515223826775770979017901213581846339239008\"\r\n        \"5972743564483406182138794082415708206777985372462737529604331783161052369852259640641682719407243347401272\"\r\n        \"7456932011627695318546847116981997986538474037406413302814400876575334916367833693107072636011428947924771\"\r\n        \"0431832859153979633857644425954502850284440493944167381091614718033977997952112454266036283567034492773027\"\r\n        \"0297214072392515941181272044503439934946642157033684526504794793241794104430220950327217291773091671208313\"\r\n        \"5200570135510136075668818444233387687590160584099397367567846354051160569747236486489617845200348490288202\"\r\n        \"051349985773023756814947896164670199036189450481071361309659550897777080535888671875e-288\"},\r\n    {0x1.a3accfb847f5dp-955, chars_format::scientific, 719,\r\n        \"5.\"\r\n        \"3830364529866897070892653133613309687768553145998845020770002508286663820178028904357041106164871662930240\"\r\n        \"4292326281883963909154096452472893947755538934242330914543826959031146221568246692512569359075149804195162\"\r\n        \"2455286861325460251680876019901469233112170819584404180268970996038988942682994555869177877222572726704409\"\r\n        \"6706370606363455491707358638817637507737802603692179707323013726519499078873069293802377310441059050095455\"\r\n        \"8409431256576666225481896876642690857726316749420932215444605654341122928806547906002555368770089678159201\"\r\n        \"8321956437180967622979120309900059276854565582725176763468818525035142169991443317320021522630614922936712\"\r\n        \"84130552998907366615149384496898688035417847308483629831243888475000858306884765625e-288\"},\r\n    {0x1.490cc71c1b5a9p-954, chars_format::scientific, 718,\r\n        \"8.\"\r\n        \"4412342380502576546081430450113714547500629438411347771053360322063370388173904974678292331037009777086711\"\r\n        \"2099414815476448744759263688277212497420153992338777818006934888909213572957511956634738036763365144586177\"\r\n        \"5322858389270843029115166607895428831657856603626176699984273793880426192286194266443686243608836600001354\"\r\n        \"4530110132454205033116021887062016086384595971121585437748216881228804338113019161359341335927611034275239\"\r\n        \"4037940717746332315355023656647031482236645528004617260974202488109127266152579244998351781422253738236175\"\r\n        \"4243701550773001844292452055370516538649507594510998476523084758454303188096588303409769684799427283670348\"\r\n        \"9527961893337125050753747867908906204526854610836750225644209422171115875244140625e-288\"},\r\n    {0x1.4fd2a30c2f2bep-953, chars_format::scientific, 717,\r\n        \"1.\"\r\n        \"7229963037415353860036939274512602607703473934570316813755563202371450285352667556180727589154087041362056\"\r\n        \"1283459465386257149814404426731073509224486647540553797898000159803219506010895542832878489629573788723953\"\r\n        \"1749999981802001417396108156377958282976764626235599595602595041214194378359560862503860866807909172646002\"\r\n        \"9975659200114921786030177059914763470055885610745129137128591706559908111228082064091725340897564033533397\"\r\n        \"7713665527965071968852553983251712474158073574273322543402496753700449881082906684354028745885662376033485\"\r\n        \"1322987488292975046799929539221349587261627100702755350754850783890370827469481884228645990808184748247674\"\r\n        \"193083168557675793886784178115221749321393784892819667220464907586574554443359375e-287\"},\r\n    {0x1.e712b11ec1d63p-952, chars_format::scientific, 717,\r\n        \"4.\"\r\n        \"9980227888927947361544276876048945527052628694146361153893340602625907491058574989544577033169635434323920\"\r\n        \"2363631494369169360431693425214763451868479262473007994553742587698599717845223124301708762653254310627635\"\r\n        \"8615929213885810712355953882567405745554059674387476562405224374765909844276132250641182466570610855208408\"\r\n        \"4218918059037991974479006158869305616984906845622665393220531272998910203769643038213835331473037608225072\"\r\n        \"4904487349755042619016279363453628277094581074974439583045948813522912747444842573673747533613488115993276\"\r\n        \"5382595260797681368667692815244795049862397821162429723072459989031430648448876485854621050523129541804361\"\r\n        \"218208441699108218502865720166791044828773216135431312068249098956584930419921875e-287\"},\r\n    {0x1.a951cb6dfa80dp-951, chars_format::scientific, 716,\r\n        \"8.\"\r\n        \"7286979124915840031811171249768746744436889710675327400944811289743437499055150408336143447207699067554825\"\r\n        \"7442958324490534088914416947203034596292953382062295275457233755524482929174694081985804881831251240710578\"\r\n        \"8126951104999460919138178657731447361495992307164569451115113425119293927665641245442265523577467103975280\"\r\n        \"7359164333796045189813934206387956229569099202670383997385959263031751034359811529335821735321526957957448\"\r\n        \"2300932318121087160706915252100028942112875612578710323463601402080899019147011869735277375358119396699255\"\r\n        \"5371084452440315677385870831672103657333622119478297079186131716864900307968338276669280687253563323393612\"\r\n        \"14932314316194561659184333914511633536505164077112794984714128077030181884765625e-287\"},\r\n    {0x1.cfeea9a77e27bp-950, chars_format::scientific, 716,\r\n        \"1.\"\r\n        \"9042271010497776332001708801330615626361603928163568681486870742545599127089701284279280984207169692023217\"\r\n        \"1320030282687303728445015162144559242089873660014349397431364036606843290349007956825150392182396077699610\"\r\n        \"7081360034058760638306226987187123573951079730136436300311799651097396464377723858909261474710812858063665\"\r\n        \"1516285060709599373476272758518992824461516136888329866236431665769165459746602035234128545216729573491347\"\r\n        \"1603418758679870235818016847163544362617754381161439704896309338364473880342545334782765942594159926024292\"\r\n        \"6776721855571408975646106864867688734105951682537834904812715247258315613008475070905740733513696526664356\"\r\n        \"90680061075434980258140771483701977439921548818091423527221195399761199951171875e-286\"},\r\n    {0x1.61502417e8ce2p-949, chars_format::scientific, 714,\r\n        \"2.\"\r\n        \"9003728382951163001336386523617062381286133744090594743589414411368340653555137244271537591451655680687315\"\r\n        \"9732505961309688819203604378162522072256819193225779837080532812628857860412608929343509699484705718495967\"\r\n        \"8498590349546873362607386039910958079726915480506740564727937744213886081662414338883958167769615634834449\"\r\n        \"5208205332455141483630438934437969676485027072711307631327019462760209568508259406390712220813594963156926\"\r\n        \"1054788729428850637210162360658988869878013349259167463031826438489783029936508298061711618268376301932063\"\r\n        \"6233705491974210920522838275477083252004563254028764269886961406388361787734609729556483215835413375983163\"\r\n        \"021711842878443424060979670008305676166815434413592811324633657932281494140625e-286\"},\r\n    {0x1.6f4a6043ee7bep-948, chars_format::scientific, 713,\r\n        \"6.\"\r\n        \"0302300114805323360867140613666291548447107657508151641660095102893904089283521303828228226597660628182350\"\r\n        \"6911153986869512195032232066813781715107387668300048677099943316832593032950727022533383996204830780873687\"\r\n        \"0336786474106255162862393383020101537774908499396139970912718835720263245510686995538097893670858302693490\"\r\n        \"7891508455961763342319381299089701452017976885541745003090606738691178664596292998458754512228941266385244\"\r\n        \"8007064836689028083268810534974265755607698465042353718916652874807767108414470421851891490105544576545965\"\r\n        \"9578607346221279870994992550342662655560173662144012241644703804158632807596075223431027561864483265724367\"\r\n        \"88800100967001687104564561953359727412837809623624707455746829509735107421875e-286\"},\r\n    {0x1.82fd3aeac2fecp-947, chars_format::scientific, 712,\r\n        \"1.\"\r\n        \"2707290656410451972148714179141781588967973845926807547334471277675980850408554878248054803892782582018822\"\r\n        \"2534182569028299426262570059445694988348700318777825258518784535605857425130299671300426071383629977858895\"\r\n        \"5387337468219031494910244066256770720046737203696728672760192370711138924283768772475940785693724826698986\"\r\n        \"0466008993894741453396502146202005519277127551424134439683925893021558019255827189881118691971239229665920\"\r\n        \"6657060745898812201958149661378249840066133255936674274226197607897248507836438905238727384458811013417251\"\r\n        \"3379082500885683858207793250918021016981595825486761813591464957247173777907417675517257352395503235491976\"\r\n        \"5037037450328159638720514623892016668749160857032620697282254695892333984375e-285\"},\r\n    {0x1.fda8896e44ddfp-946, chars_format::scientific, 713,\r\n        \"3.\"\r\n        \"3470583063356332108498766757166506385353764031783485196998561866179457340599432256217213352642082359348776\"\r\n        \"0065619379843121648679832554328338726173157671099841073635018988556349126405324929433103638921411010000406\"\r\n        \"9970975541397062403299836691883872720101591275772567836499474144709269745164033553143381865980948114813450\"\r\n        \"9563323398425378499328625730378201514987590090742627365532394510810911008494010157265556059636318908537716\"\r\n        \"6588265752427397414769519174240481162648267831006229274985704703073458419860862001834681264408952610279695\"\r\n        \"8120272042811100264333042992405966114086480503347740480307977037393767702327170428860861334438521055997639\"\r\n        \"87519384051736961186649658053551804025305127510137026547454297542572021484375e-285\"},\r\n    {0x1.f63d0121b757bp-945, chars_format::scientific, 712,\r\n        \"6.\"\r\n        \"5966578537292035157422433162339949684328657517781425278937040263737397772577187341772038360860221866728139\"\r\n        \"7401687446570117084677990224984289048367008807112058030080344286777952675512614595714878804489254477073655\"\r\n        \"3631788209373029438911737396887226525344476794228878774806817015940622309814103147301158180909849015378481\"\r\n        \"3123115801307697707920891837072640679333216386798989999483042211053745064747961945094371289546480468588624\"\r\n        \"6554648581517370471456957394934735507329277236644627330631947684311599090344589073145189553679017707785009\"\r\n        \"4743043339681131317035896807523747130636300631758866165476656409393301104737836983161194297942630550081578\"\r\n        \"2254835380854001782230228668880262464513375419983276515267789363861083984375e-285\"},\r\n    {0x1.1abe55124f6a6p-944, chars_format::scientific, 710,\r\n        \"7.\"\r\n        \"4273986683209386002029183146497792358537735412418076229677375034053108781538417130596628794716377703048792\"\r\n        \"0439447874391640830497329263769197669372654570210896760100817222039133059067468132996774053651076190226967\"\r\n        \"3589441074259230065627957038293185520235291906031948115381397829092825319154312472026340183818944682611111\"\r\n        \"1156145441474169706609373281586299060755244822009110650534665364827404192153653867280756103054142218360222\"\r\n        \"0934581061734895574051354048724565591943722679704655789621606831198408689956651820414839333271464401183877\"\r\n        \"8450966879494076305659347420726388904357845227958574995156936912713306237255628189778269960699349488082411\"\r\n        \"06386418643030651008928724469602099256260174797716899774968624114990234375e-285\"},\r\n    {0x1.e1cc3addbf112p-943, chars_format::scientific, 710,\r\n        \"2.\"\r\n        \"5312725644714645962947927743805809804618884397617821437572318458550743118084862705289205943966038119003290\"\r\n        \"9589290532205874362493462899587538183794311484367769029075747596682977338151350446246593552098587417080875\"\r\n        \"7851469248740093376850022734253382347640497467551967268290362838553891696265966263369157173634431861777730\"\r\n        \"2846800242763765681365778209538316436546166804404273332427861460075267064607964574701863428965562408362011\"\r\n        \"0521953699389815696244858788510527465075072050708829210926602831437546879251441709037514462450585484637061\"\r\n        \"3750986429422869415728090168020176752627553816027216600373170891796638653891754210465863152465601677758468\"\r\n        \"90651442682066021379729291296127070831634142678012722171843051910400390625e-284\"},\r\n    {0x1.c37ea66e435a3p-942, chars_format::scientific, 710,\r\n        \"4.\"\r\n        \"7441324100905745554574287302084691280382079597193581631559111336633158232950997129792894980805894193066494\"\r\n        \"7024126350169270196995072745313996409498284229154731375549048678636733572900612861491971019072075638834606\"\r\n        \"0562319519438688203810434951289695484950243280779028505894245638965721460493474958616244676132192911374490\"\r\n        \"9744685596656046149778452097128786811551965968423994803335170886805118220108585832414027702378690965054682\"\r\n        \"1132637590793226042392427342459479251395153348234719604672659565852875863171207615153939055490446947865662\"\r\n        \"7069451502833062779732643453355045985620373037341930171564015143867075156826922069841065014424129701542771\"\r\n        \"86018963546023944039247179557390425574947556697225081734359264373779296875e-284\"},\r\n    {0x1.5de150d8571dap-941, chars_format::scientific, 708,\r\n        \"7.\"\r\n        \"3528110594538782482365773897168607965627670328398853743572294287489462941040004923609086852490422148378042\"\r\n        \"3221265352794066364321977056316193229087193345799980407047318859371585571006327608060193056679922161895138\"\r\n        \"9023450857711029880846747347949781266947671465791140498898018902300018409192427375203800129541619913353668\"\r\n        \"7913336770565773056104716911264461178801127817029921714572406594873525451090759250061606175297688853642741\"\r\n        \"5063374341194168250819599742158320993808193105179075468474640923879534600345563234330664743865595922943046\"\r\n        \"9027013248365025737108296595578764740793659540153206839917157674241108599911219442200327046926386379632794\"\r\n        \"706173770738386202136504580487326443449802582108532078564167022705078125e-284\"},\r\n    {0x1.2fe740d15c5e4p-940, chars_format::scientific, 707,\r\n        \"1.\"\r\n        \"2773195914029404839997121365019846678012360652350488064445378102080680878178292751812127902282256650732547\"\r\n        \"6245703207416712594596348672625016459895425199193206223669274574590781615279792558252820397973515964842037\"\r\n        \"0516008716769106316730250486845936703583635694598574992126846759388865096988008602912529868185336100299108\"\r\n        \"0553719525657790562548044625513894808092631398771815402398278693165346783864034097203390263050764499973133\"\r\n        \"1176557957400353328895833934462164126215289648841232814684151554950526609425364545645803014958449858388387\"\r\n        \"8330615551788311376615569801461643158576202752253276793725354647037131210454236435093465752334159968626474\"\r\n        \"04985643869421282773361209076680433671668879469507373869419097900390625e-283\"},\r\n    {0x1.74c88e0ca098dp-939, chars_format::scientific, 708,\r\n        \"3.\"\r\n        \"1336514683809335823642014056905165811057462424986100566379077646256522264565554151413406651253885848300977\"\r\n        \"7428810212153271901858767685448835580809572557049468597099913066770055289698506664019615839038475534710535\"\r\n        \"5795137683512491796292640286340784407826504261360116668998806692920326410697970081470553311956742163565291\"\r\n        \"9488919030345834471449497634015773733880344369868510365310417368327167250001545295912972407904243385685009\"\r\n        \"0568326188908814426299175347109946078168784813256752832581828231750592798891910497717653512598209256212615\"\r\n        \"2163332546148270577877121959807562829701730894716563197686457689793871379392247928709120246303744498721385\"\r\n        \"387058298586846638108429548307855283528766676681698299944400787353515625e-283\"},\r\n    {0x1.130f11f4ae551p-938, chars_format::scientific, 707,\r\n        \"4.\"\r\n        \"6243399480760986651758048859591898670257532481551975234236150685657300241821139657878022784585233874791240\"\r\n        \"4963492241550289496212262096830935350508363684680527380586207161154519672283951737774939811483462728083444\"\r\n        \"1777428783029826723607606656979273452995057139008359627554000935187030159957139984855268085241021567271742\"\r\n        \"3431954876230363643507044623195289945422834721951642431654272869278279463263248928505373646536454486629285\"\r\n        \"0388933272047691776851011626956714255714297331667761444662037758523239544520796498062658035671762514053396\"\r\n        \"2546352624989961931110902588588758282909374019543277991567132082147774864908128579658562342391043382460857\"\r\n        \"66373351339663978363866896439428322285181138795451261103153228759765625e-283\"},\r\n    {0x1.08835fa35800dp-937, chars_format::scientific, 706,\r\n        \"8.\"\r\n        \"8940877727403413478054422469551585361360602132146479276553748560572263855354900108174388413873810810570869\"\r\n        \"4447652663318550897683068640027357513815073547307056520232708373475428951985938086920965381705362856293155\"\r\n        \"2372597405794368429177559397287482636064879735202907026717819924195853075278831851189896959260779613681724\"\r\n        \"9507141535585621250711601400414125889337957763942399330493823244145586671155604257863693476957809385848081\"\r\n        \"5602432524204309644294980503300147419523958899518054102661427177982614986697817162798859038178707067029274\"\r\n        \"3666765992474172041115451984467344953683138400045170040908790923436569293770430710009650254127241328424225\"\r\n        \"1963700416095371587683104442657866517407683204510249197483062744140625e-283\"},\r\n    {0x1.6431e220a8c23p-936, chars_format::scientific, 706,\r\n        \"2.\"\r\n        \"3953652083727512388926071411736651094684359629139545046331701056101374156295569337074287726281108064839092\"\r\n        \"0197220354257125643370788918721253430411000497833026470918438064748906303836803667779264399037996493294682\"\r\n        \"7799070539590992054178881563195508842237166002254838778941432287913764333677699977715082668936870273420684\"\r\n        \"1637889564941327849417969580798865985391354437385154150217050073066367310703953519083722746947699236233991\"\r\n        \"0914485251702387166357531280402329580119848376247994125192476520054069021178244018175790204834170600687522\"\r\n        \"0061280292199496428179636808244244925634931880191201392142822061160051761870987672004337971307673840421985\"\r\n        \"8403977956304139210111692789677284576299598484183661639690399169921875e-282\"},\r\n    {0x1.17acfc1134894p-935, chars_format::scientific, 703,\r\n        \"3.\"\r\n        \"7615674663262681818855898106340652384824488135624420876733253077105060946198861732627493193519901047247753\"\r\n        \"0851516450610526148310774617875503789522940191314377583805558176016959667319286171660282631959695917660262\"\r\n        \"7948161600893585841102962267471970566960719972616815524052330290448761157948723719283892809603393480152922\"\r\n        \"6963821818326771744159065697180266351038889725789977121282586495071803503310337622258942765229731736751373\"\r\n        \"9802285453673323672402567322678297740121435959673931330218239056618465199032675986831449764985280751644590\"\r\n        \"1051071633900768229571292193676658069223654709451072516761075679530496081880163478624608778936598616058103\"\r\n        \"8975154763000147609318065712591394600394778535701334476470947265625e-282\"},\r\n    {0x1.e09c9bcb32e3ap-934, chars_format::scientific, 704,\r\n        \"1.\"\r\n        \"2928212167160485647289050725920773987486183606941436119505729854684825071061879741408404976987332542805202\"\r\n        \"6475209722120894427905829017312531660824109185257625493974124746918871520377551204868603233138855433546350\"\r\n        \"7137482116585173531717089284209974439757094815476313032633987246657466217424082287904980049799285173092360\"\r\n        \"4321033958606419596582626473030678859231047068503703431925355566575260878258096148842990948930661388461594\"\r\n        \"5556331126875486164601415077624257882874367569017493013432167566077044569124299536340949294173450937422124\"\r\n        \"2410848684155513238368365796187170024735560371706926710527316014102463624584103054216799753888489426954230\"\r\n        \"67389883463190992127388374323404551802241257973946630954742431640625e-281\"},\r\n    {0x1.a1dbb96340c68p-933, chars_format::scientific, 701,\r\n        \"2.\"\r\n        \"2480352182123752808136544940388978663414452868402807172164353048087159318240699108852308410935527799042372\"\r\n        \"2607479167570828666405584023758943395449623547786265060474719000797492782936683920058858257998717582822367\"\r\n        \"5779905454921856840712616925561352311554761780822321050704750714835793645031281809131734465005054259103162\"\r\n        \"0770295421779702653225582120691078585469805486852420383602140963091660990507952839665684312488509192593627\"\r\n        \"6146801902962301794667900084167998719481932390233466300406339130835304539931159145009172042189525782968134\"\r\n        \"9889384996716260685606079478830353867971542977200900041965604299936591138903279189511225516719288109338314\"\r\n        \"76652227485316062853136671872977814246041816659271717071533203125e-281\"},\r\n    {0x1.2535112b05fa2p-932, chars_format::scientific, 702,\r\n        \"3.\"\r\n        \"1548509399420712639272059276400333316882547293984026315247476639493255963348140121345690526759136674812168\"\r\n        \"5127366607186078984663434814626878761946743591353198878185556202712852448632736187785808850221879652949417\"\r\n        \"2466935302619475876494375304284254242084862440019357167612816636962625129579057766644896049407870955464974\"\r\n        \"7335787221346083512058193881301726918508813388754032954001938768613080740109292797103362848370010728277700\"\r\n        \"2447037363112380936616653230090833282091176580530259321841919447337344677998409580350026291730548714720245\"\r\n        \"3464907595976076416622159108849254870594068881747711745858983412187878188897296623397306560923894227742617\"\r\n        \"663131411366557437721031172117580609892684151418507099151611328125e-281\"},\r\n    {0x1.1a21c468e4a6ap-931, chars_format::scientific, 701,\r\n        \"6.\"\r\n        \"0713639849830441431950666885186177075226515153992662907626497301095398390732446604186943203382345914038884\"\r\n        \"7323282265478315251107842926851637284944473721522256210665632511691427823143735225088177817782851258604105\"\r\n        \"8802465427960568227820236551669931647579766385297520509184110046667024917465803528176712653827604854690676\"\r\n        \"0539717394672162140625498504576723310423343077058148234412701000131002157689180704997981873225601677878672\"\r\n        \"5558225608403941078353606559612621001943710817919983755745476941534320115237355705280174943756986505561652\"\r\n        \"1642323629981253371080878813132722433052139744568133360474352311923115847036015008659884511808602933588905\"\r\n        \"40549489846723710069942465950010301867223461158573627471923828125e-281\"},\r\n    {0x1.fd135d461e64ap-930, chars_format::scientific, 701,\r\n        \"2.\"\r\n        \"1910202165183367961031144734329017463226979382701869453713513013968249085356785932288012024393541953545552\"\r\n        \"9886645511615889973880166664007518614802113825590802875492420305574416936839892706860731192309333765848970\"\r\n        \"9908439585083718902707887189552668448593889249735204217996658815646772179955571823374833497551591956309240\"\r\n        \"1541329154965837938438971554547587418225460815133461459523484200094358091531238453626872459122480596669953\"\r\n        \"8348727335482836669569692921603283834722554959131362093164174528692609148104334930473885438918883552561594\"\r\n        \"8363008632224664238662463784686332242084676173707932159699210038441526890720252029751413671687868241305111\"\r\n        \"90159598977575695967511849870934526052224100567400455474853515625e-280\"},\r\n    {0x1.f7d9a435e9332p-929, chars_format::scientific, 700,\r\n        \"4.\"\r\n        \"3370603492213999246605109863562578922697904205023479088354225118411162637603179888703710226609475240843189\"\r\n        \"7778308805673483166109113138700510733670800321786228644296296310480876601318227660027323174410959962952323\"\r\n        \"1073474743346300893802816394194037660492099236546107192724017030062164767337377700574128707882663321060086\"\r\n        \"3968698996521352740869816450919671756597948507794800031118955538243210878544952125774573985954020360906486\"\r\n        \"2954843068964485740002357562419225222618117352360709939373196717678314283249625825294875669011304620563035\"\r\n        \"5933690645526817739372794594388572468529067558242499477463165957541382915860867194951359610429773433468680\"\r\n        \"7656652381430992566229733198301943275509984232485294342041015625e-280\"},\r\n    {0x1.94c659bdb66cbp-928, chars_format::scientific, 700,\r\n        \"6.\"\r\n        \"9684715728693185128958785274644908897459959339474683388991916442657376227644833807738962310289463011013541\"\r\n        \"2100965211658967777232367812792866866542712076638289606844458587892947675905576979450985333650908225454235\"\r\n        \"1258556803112976410432769807463403605097818593159599336715606881192650863075807426528516907258685085390493\"\r\n        \"7589052995111653435060748089104567805432665743598861338717605076720671406807599807657542183118213510386647\"\r\n        \"6758091298822363245367286109870252428162266516719305025469724969389301398868015871079726249945173149617262\"\r\n        \"5833737082375357463190498230523012813555991495326869696530083748073407599377627499057902905597850692529203\"\r\n        \"3909987407906166508790406222129121260877582244575023651123046875e-280\"},\r\n    {0x1.abe769fc688c7p-927, chars_format::scientific, 700,\r\n        \"1.\"\r\n        \"4733311152437789540227053092678323460332933852257475188822441222074344436589917689823247953665290710696624\"\r\n        \"6909916118096358672315472282160539273894339479994193169330520625936397519235918130249340730882903493307621\"\r\n        \"0895612852780366731538499350545049966975086920227034460151662663011478742176698549702779007271900180889286\"\r\n        \"5490797177322439918350145063046375849294907349943601734582058091677850466600549179567598052592528981026904\"\r\n        \"4947060856836578814899623194745365093095429477087602427196556222424895294076578456413124521507596172456938\"\r\n        \"8251331129730062208483813193703538285744927685484325243111761550184614450373063948573745792548306864820340\"\r\n        \"0069389217127511839951041483498528350537526421248912811279296875e-279\"},\r\n    {0x1.825701170d480p-926, chars_format::scientific, 692,\r\n        \"2.\"\r\n        \"6604406094948299284840023312889151895045655703225518408579970423545100011582978514470567087920738321442927\"\r\n        \"5307285432371144591909800719245957781141729612931668439653482875327754820963954270428962349149199726835698\"\r\n        \"1184592735245864921999727092722643583285720404162313925726900614240612356134419032262428558843961823391328\"\r\n        \"7064205337047968262378349013995361823268143063235754023395627339613127590917817943514492812352700718204492\"\r\n        \"6865908504249555492149730428374342137900767838918385014099377896161172321732594458974432078343771471436203\"\r\n        \"7560194621358324729605336632503570581400682087260645108688451326585554293824380869245358022373059672081904\"\r\n        \"52841033281990330838784331035640207119286060333251953125e-279\"},\r\n    {0x1.9cb40ebe2177ep-925, chars_format::scientific, 697,\r\n        \"5.\"\r\n        \"6839734362842070796608423358963762521942847688739811715193332262874402507007578228137833409228851937575142\"\r\n        \"9881333886818972762441084651503135482841878157912998491023471197153193567938330820279182603747487685157804\"\r\n        \"4499143359656487408812158088001014917344439759287983216092513910053323400256593370050435002396967994998634\"\r\n        \"7831174253791387681379454495092330365305712925878132005668316354328176029389998813412358306819750991589464\"\r\n        \"1588404401875403708454179807021556382772917776316285266398822892936165695523171539159535919943189320603911\"\r\n        \"1057506511608802173147778806205368856349281475078098721211793053402011838737841041885975679740409233160578\"\r\n        \"2924669070403089223518511285959675660706125199794769287109375e-279\"},\r\n    {0x1.ff8156df08505p-924, chars_format::scientific, 698,\r\n        \"1.\"\r\n        \"4089452631685326968433243074109517968005896956405243537738629556725543089192340456976745618392509456384421\"\r\n        \"3295122043611679935471391755079980979501871944052554986009587710715393810226977108801992230611058211129108\"\r\n        \"9485525691899073270714769067531770667572601957595368192889003105509212398388055993160239542503494835067228\"\r\n        \"3245379563818248188577432178069785517522144713560421250029225560558108073716075633654170491660565462257320\"\r\n        \"8077336936537681601495287937831361476225032018916859215383170855286140431926630333405822225809755086425841\"\r\n        \"3403531304832809177251851959422421163575904569070712506755851911160818342317775969283615277190753064800086\"\r\n        \"42654648867933132806891383115299731798586435616016387939453125e-278\"},\r\n    {0x1.9d0f772cf5efcp-923, chars_format::scientific, 695,\r\n        \"2.\"\r\n        \"2755564362864926940281773480518310790479861467637050696098191485132841536234255195968894202054768127594340\"\r\n        \"5052471207178431622061755181896773453067772352444724262922219671446487226142118896359570378668235229095798\"\r\n        \"1166316968715768476878377717323676558275913110625496417171332179028764068241742129287569330477989538640722\"\r\n        \"3078981110638172143427694907604433837129087063112485314874144827336251086973085916732340036992251561259733\"\r\n        \"9675515620741030786110317330091445693562528485582028687881785896904192513842055970675225542253236829083202\"\r\n        \"3599170155833556378582588541054835832258928781218529554093314331968991940112828530328124430108304974376277\"\r\n        \"30945405107483288202618876283622739720158278942108154296875e-278\"},\r\n    {0x1.5ae0a07bccfb6p-922, chars_format::scientific, 695,\r\n        \"3.\"\r\n        \"8219068582864352723967747931343616562165720978117376164184044778882819856109340136059651353300760019380045\"\r\n        \"7963875686854151814858111036445511242704770934444137666535548776414562807926044830228719368181619572195896\"\r\n        \"3465354214067102619271776398409728111334674729760537429642740220094300496716298519328903002429770328300604\"\r\n        \"1946617762562693335543494641811348659320099800248426163155938515097474857985088679151812942108594818030328\"\r\n        \"4306883294509926394689017938918992450263082868445216830695420503163246032988791848623232836381428857315417\"\r\n        \"6463928935563277762910223655851384736110714238400238082211026707573695288948291896607771043645486689943174\"\r\n        \"76597365746052831735057875306438290863297879695892333984375e-278\"},\r\n    {0x1.6fb881d919007p-921, chars_format::scientific, 695,\r\n        \"8.\"\r\n        \"1031176278644846070191626517872180531833113532613231879550018095229278369791466764376263012400841347446788\"\r\n        \"4537069420798897444792340459678011732950473018974004142598230372463984780283182332380363238844680055174104\"\r\n        \"4882685402671409590390401829607859501011832309453302992160500266190368039980817257528474182247691498330235\"\r\n        \"4021964279286190987699675882237711813507510953617123368849494245241661812574268038787990734683012163703440\"\r\n        \"3253494540299453377386417370013446614658571822640671013053242841183193770612060018133599299419386567835242\"\r\n        \"2302987448586734996718282943690713535168181153513958291979209420682272276968832405387188696007394808815855\"\r\n        \"34337397162967550449941267487474760855548083782196044921875e-278\"},\r\n    {0x1.9fca25adf211cp-920, chars_format::scientific, 693,\r\n        \"1.\"\r\n        \"8324734254279028869387784372851448047860823258323750611134821016907972862665862948679459543729058185314029\"\r\n        \"4109234291012590537213580345220640336487442495620076073943474905128820570844254967289771491084820829982316\"\r\n        \"9103036957205913876376666459893503223052173089296631419583528827717374000015474402335079386664374426327190\"\r\n        \"1555348969754355893424268192757537688455844358838861788081285696553822294575029080340122592400621898485210\"\r\n        \"0980586377051787274079525731758978655809619252450538245824044682934365444142441443713505465606942364261493\"\r\n        \"3323336396499777095021957372015947166181084102535422709985885556677780495536599067966610216695720290798005\"\r\n        \"524230155507763549704858263567075482569634914398193359375e-277\"},\r\n    {0x1.3567868a935e6p-919, chars_format::scientific, 693,\r\n        \"2.\"\r\n        \"7272220545317517868889157965337696025274508420889298588711181595213704043378248791909948540380616435611593\"\r\n        \"3910336212536767318988081781070397664794560055943968584737578105345111712898159054166131527987411472217401\"\r\n        \"7866347800567633763552707314540341731219481235621611130507775509864789785266383510150307545015561531035709\"\r\n        \"6185185351422301629593018870035843562289123275825378701398430382047446661917309450697462735918474031918662\"\r\n        \"2340850441148530538284790831967160290452968341473708720459139121500038263702725273690181380827057032060125\"\r\n        \"9532974827496579814102373524204368860193693113227607483201472667063978336888662018926203111235696960255284\"\r\n        \"736973595876500901791228415049772593192756175994873046875e-277\"},\r\n    {0x1.bf28dd0f45ec0p-918, chars_format::scientific, 687,\r\n        \"7.\"\r\n        \"8829105150282179084399238370911642114983690457028991880625181033648641884093153361369152425774473922157315\"\r\n        \"7774153926247698010132275250508458101810012251517742409690624130795818557484012862321262235357269411599568\"\r\n        \"5913932502489931128923562170444579956137349168575918204365789567048958596408790512900515843150356938508578\"\r\n        \"8171741990769154846781061888409738831181893137943969463124620309874532188237550188168195998920556942302867\"\r\n        \"4792427236737851009052228703362388910682325650020113635567569125549130164578253048806221058312058858233667\"\r\n        \"9214533967590618353077697183881161890577696002739400403994708829285246662769338823361787863906471416520890\"\r\n        \"065817296459005358855165468412451446056365966796875e-277\"},\r\n    {0x1.a393be0039498p-917, chars_format::scientific, 690,\r\n        \"1.\"\r\n        \"4793325264349519609224189087172778660628550715159699314589946835960775139104114196387124361744349388346423\"\r\n        \"5262499975290638162865880048776094965106354069497400210979615410318388465977151507798144171315330304323435\"\r\n        \"9885975630954582425728852297479422077814813539875382686759895441332139770602381357809077363620286647587905\"\r\n        \"6725196621533667569514255202620311480396908342237186203988319154990018200960799763004452095958354279543752\"\r\n        \"8262461095548407540224109002577690372446359884979680520216781761547575060963446756203043820334004229099108\"\r\n        \"4802146480535794498835721701300992022479494296931692114542127887432405933594739009899021351204586356951492\"\r\n        \"886187572435401083037476155368494801223278045654296875e-276\"},\r\n    {0x1.3a8c0984bac67p-916, chars_format::scientific, 692,\r\n        \"2.\"\r\n        \"2180410620430225517898657079973304666136981289307679736753455928805959725081462934224670303724159485938268\"\r\n        \"8828714380229742386971411041934144824845530951396830281289648621278119877048709460244734297439979032457124\"\r\n        \"4210910101722242920154336630006086991235669508210185826348819618229937866676364296126489105865139605828360\"\r\n        \"2048459899956394727237587803958256596040689177850038369317144434041219912680004534927123313725716843926392\"\r\n        \"9141846933227654282444232967074996992421239352155928725744678815679120998085146002248164874856671200987562\"\r\n        \"5412875033658742338513264563614366747586845781134774124232829708849899521351684572920654027513944639970411\"\r\n        \"74444432233190359349261910892892046831548213958740234375e-276\"},\r\n    {0x1.938106b73c776p-915, chars_format::scientific, 690,\r\n        \"5.\"\r\n        \"6906497436586979168324009384548588036589095543759130627636379562863411660649404239561145787562444857179638\"\r\n        \"3242916879169401001373374357414748760162350056495718058588423534096485487067553165909715657381402971404442\"\r\n        \"2468094756706901074082987816674625471919162817470744562403850861742638326686838831329543166906530868544059\"\r\n        \"4898149718409995904694095670341472420644316999405402196876112361507834250398148271011353848871090482305740\"\r\n        \"7709927312703785037310249086969034897324787955384440730093355487897020162730857189426818122829178924268502\"\r\n        \"3478828131783734931249186206288600257156152529666027885484652021194383320420661247802440895124858403164728\"\r\n        \"133943685880850871239289290315355174243450164794921875e-276\"},\r\n    {0x1.f4a40cb3650bbp-914, chars_format::scientific, 691,\r\n        \"1.\"\r\n        \"4121156100358157296664884403439661646302276365078485687132001035304070507720766854695035558157858304450576\"\r\n        \"6940217400099355023661276743227694506565541149890385524583996128825300819463743839851012791085031812663780\"\r\n        \"9078113983498722820987671412284313866751671649867202543815081237996571345329124002747352450708274021201033\"\r\n        \"9249382671053582408053415675489886917683768256732181737438581253783555941794602878960721256857697391077076\"\r\n        \"4877147702942096611971251748274003472604976609538520625018538574328879978037098590719449636953103849833441\"\r\n        \"8749823932561430082471354799282769696040754873243807348200109701833759917789263818613074275506995243758898\"\r\n        \"2806943523648328386865813399708713404834270477294921875e-275\"},\r\n    {0x1.d90c9ff0ea8b9p-913, chars_format::scientific, 690,\r\n        \"2.\"\r\n        \"6685811370633676469151456124462933808944608667956228777777669887667468102141343225224973573822627858520662\"\r\n        \"8706394471551392518714620362982432694174419506683788723487695530093086709272946848081120027413065121574478\"\r\n        \"6557772150087296243176647496252440476244799624976290239020794096466570190721144031552410062820989434121667\"\r\n        \"8829969777457299984096586701156978531800501269895806288448209599476087051536904832327274865690798406014041\"\r\n        \"9242923626411226561350556759451418729720362364708522318857675731726321139280873439306988245518166084854544\"\r\n        \"4617167500172223520590496019958399406193343130729441401318451882177563396082993744332324550487662094880548\"\r\n        \"934381955914103834448525276457075960934162139892578125e-275\"},\r\n    {0x1.9dda5bbec739ap-912, chars_format::scientific, 688,\r\n        \"4.\"\r\n        \"6692815012344966698882844875437366789005901188975934417131762702284328641862258488125658455485014617892258\"\r\n        \"7849067391433971807460553436148881053030070580286108356418420118416969143514528711425882108264857440652948\"\r\n        \"2949951797469318976010031015211593519685235614350499208005655246051120557587904621971388953661755198499957\"\r\n        \"0757281730469581796681608340143307523472370915834088491490803052108454624701398786420702452110089930576895\"\r\n        \"3323642622737252465685844839888300778476275250469032520933241067415921740697019684544854238709595905534560\"\r\n        \"3004485318890117726846497855781173320368657200811902980978359247250167408579989059372735019254137725760123\"\r\n        \"5072778330693898940495500937686301767826080322265625e-275\"},\r\n    {0x1.b3d55416fad60p-911, chars_format::scientific, 683,\r\n        \"9.\"\r\n        \"8345480986695514089618875926461208483325452018779020379963044696050432933349843715361682741761584908091249\"\r\n        \"1003925803323420285422299200257544927820640319697426292214256590284651687321803691614450944195461737083147\"\r\n        \"0053949450130019955123314130153815851209568829682254278667162756302344761919601995206987208217756224520301\"\r\n        \"2490168186679900137224439591161763561631529346451548557236425884128203137861028096947942575417821017601760\"\r\n        \"1378479729168995921054485337026942189492031327824997457509579952046482421043196522791788544424088239606919\"\r\n        \"5834232249409883053072784499831730816048858974051601859926639595921288052515471787430631231700012801861588\"\r\n        \"06417666411459066466704825870692729949951171875e-275\"},\r\n    {0x1.9c252fe78c1bbp-910, chars_format::scientific, 688,\r\n        \"1.\"\r\n        \"8600057734718371714825273518634978354358430652262526675402237331598535844295454808421652847968623955166229\"\r\n        \"4650573866111151552786059604653573925266743396199432791559547670426194582452576205390410214677534836184397\"\r\n        \"4555536608449663541605202919437531227398833959534590546980892951601368099412773750211386643708216564687986\"\r\n        \"8614705595747648294239448551774117577448974310225433244569605702819713532045299071620588883760079184637819\"\r\n        \"8288424060798361639111043395696475163888439664871728837230441754911577683195623724591428200525516519522384\"\r\n        \"3673716690874231955397032122819347024452498018750025400425613047170373078212498439755828093049590198255103\"\r\n        \"6706501029587002005172280405531637370586395263671875e-274\"},\r\n    {0x1.37854269a312fp-909, chars_format::scientific, 687,\r\n        \"2.\"\r\n        \"8117756756308431810045707418457549719710610000849801105585413392312211123265412907366996179793959773262310\"\r\n        \"2528407504563563289183363949413319716188120462245043980380898047975666961940548527936494252165792282227270\"\r\n        \"9751021750995630547875850829787122147998996258733220571087825557332332005588075878604400572352057444304256\"\r\n        \"6115665804874692939210171450919961655577985423556158382103522613283595365382795523013526774289312455559646\"\r\n        \"4851187246037583046031577328203772305918749846723310361418283969452255932829276064984353856245298419264081\"\r\n        \"3659122168387059488839582188262378663355081166412581348801204378576235540860124864292440125940486330437256\"\r\n        \"312075595780786141375529041397385299205780029296875e-274\"},\r\n    {0x1.5b68fa4ac2b42p-908, chars_format::scientific, 685,\r\n        \"6.\"\r\n        \"2714270295442504603435251110132409147534667975735926257860278262299612701213671612207350641905602947661894\"\r\n        \"4494416416416353727267861835534249791206425657048892129789772365623874471751817192007152737100353458016022\"\r\n        \"5562053419694214377441724668769025436402835091526788281492455721704077602519026610127870369118313142031480\"\r\n        \"9897533450610949249311456682364212522217340674731787953847187007405298194868195503414511556939417484877318\"\r\n        \"0287260778212420819630672451773814859942905927714008129810096642973740960075495296454058304959469149948991\"\r\n        \"0019786761795794622366208715634510022620666391042308290790968346187058669856385832192052476042596874880069\"\r\n        \"9115977970443669420319565688259899616241455078125e-274\"},\r\n    {0x1.1bee12d355aadp-907, chars_format::scientific, 686,\r\n        \"1.\"\r\n        \"0250975871333601410285213100183232774538473685218055938897189096735340237340018400725666682494033072536608\"\r\n        \"4523344487902158562213073784305960609813824694625419037109496021095951526904178029433537609825161518260979\"\r\n        \"4611783379551401163974146864458329467185443162645279912920460025736906612085102498298245991228083818940277\"\r\n        \"5148363138806380170433459153981158132727283701179492276737893371060445823347383802426142678436476115955450\"\r\n        \"1380582707481618618086710570120193173722547747612927374090450924298878319085773548224441762980740444341131\"\r\n        \"8861570306917779317213969781190995485564962851095177735122684967750904878926948300062887536858489633614618\"\r\n        \"24513759001631374445651090354658663272857666015625e-273\"},\r\n    {0x1.5dbb3bf725a55p-906, chars_format::scientific, 685,\r\n        \"2.\"\r\n        \"5253325080332935122289495566127846548934475987700357144674961351479357467092094630453535541284919659245903\"\r\n        \"8003494070856329734901083535046760786533056388680476864446948292312458125217671960943795156782787115386651\"\r\n        \"8489995612260332097305108374078181507603174632534081548073471396342504983710412240194257585234633491428220\"\r\n        \"4317410475710039015821596102435733830265474911659400368786801131458888124352482480324532223906317300645196\"\r\n        \"6507983841113564976333857639263147106429864722263664851030405649181367011150329531668521843720200537028123\"\r\n        \"0974830602030567068197067362558553069481671246793360301294886083514645802904351128554253419272228806760314\"\r\n        \"4347717143702869435628599603660404682159423828125e-273\"},\r\n    {0x1.deb564bfc9b39p-905, chars_format::scientific, 684,\r\n        \"6.\"\r\n        \"9132961251476578929222904530052273628363552443315557555004747661057069612999210997894255772698684551025199\"\r\n        \"1243515225364882882698889624584628027249467492666941103078711591669709456393002977814548674714031442490579\"\r\n        \"1873235024838423268345382820217574525587164194948220489599485554712874650998509771058740523491301689686432\"\r\n        \"3179317665178723422213216184384022812397384381918414301497856335169286849906525371490446315447355139287718\"\r\n        \"4968492224551797774340395828836008134619132640683002736269625867150029972744613412338525800662983389755954\"\r\n        \"4074960661569254434844416849696643611136230480746804569554606627570565749735444390099046341993234153112576\"\r\n        \"404723484124748011936389957554638385772705078125e-273\"},\r\n    {0x1.5179ff1b0d531p-904, chars_format::scientific, 683,\r\n        \"9.\"\r\n        \"7473722876297753859094243167038918335732475648235279596858447770771804886894929506661512363400799235132329\"\r\n        \"9611094127822440521351999791476209022441638779626597351701245970013572675145669042456116850923505846902122\"\r\n        \"1019543910350446840555896408640821843961400220187736393637951646466301575756491015220368431665646131851050\"\r\n        \"9727736135505497758609491007485313307150194231963853639010109636728185073120919295228223264260018917015441\"\r\n        \"5611027124442793742874753965529671066910351191453495845396281368093624689695699465834057840582376163654013\"\r\n        \"3747927057892605277115304361791933151276527348358808702693259272579380945576312699683565750443374991247958\"\r\n        \"91878615672343499909402453340590000152587890625e-273\"},\r\n    {0x1.5567a7e8b22acp-903, chars_format::scientific, 681,\r\n        \"1.\"\r\n        \"9721670909138485406708209875245988754855499584359380143538249663486318133335425048801360176933315465830102\"\r\n        \"0938111316690961968819801684276456747470648078446092573136974003930909131364649434410677191755964374461168\"\r\n        \"9449985149741847522870512655148231642390548825459654618135998463059314939845854863862378838430177919605456\"\r\n        \"8577661945071167810995560010331333745976303201264359555104651738851008461460823371625460226785030567535616\"\r\n        \"2650233030360899161133192808264578667329162878470873772247704774334161447668174066561587041726468755775880\"\r\n        \"2755495463473945116677959704440051349739279053896878897062724521932452819827121021438059285702750231882048\"\r\n        \"720898070737206353442161343991756439208984375e-272\"},\r\n    {0x1.82d26b4d40ec6p-902, chars_format::scientific, 681,\r\n        \"4.\"\r\n        \"4690483726796048912736648731122955257354188196024231986588312330742257238021456634908826654127234839916269\"\r\n        \"4465100758770795918495191617148046111636565021984454301308771295767628366526457752766226774136157158677204\"\r\n        \"9777232414728237847783800185819300150695494868265399989984303418186913936387103778295846707558587698898974\"\r\n        \"4537743159905346990806740300898994948523687536782820980310082956562976516393428723186369254972697917639523\"\r\n        \"7517451055069267609733839616408831778853430757895403549124610101368994821095535082159636545165567339743831\"\r\n        \"1473563149126607326293087358055222847103895464442221682394762176220261504241500948369995664309148768991554\"\r\n        \"272721200558038390227011404931545257568359375e-272\"},\r\n    {0x1.b9adb0b3a270ep-901, chars_format::scientific, 681,\r\n        \"1.\"\r\n        \"0205638445192074540686039149619492166036221303655622880582574223699718851191956040320709720157071445964723\"\r\n        \"3428300334496957481984272637141040116652643064109299002000714912526722350009504846522887500937742299459777\"\r\n        \"0942012244050224737963234632599223698388649382113915392050770236622145013987906289250667977440016565465777\"\r\n        \"2786124745824565716876090891358069196313060797768032150978701298003352609463312591961660591133735686117058\"\r\n        \"6913634840700315149168275684264190692289543505043910139097370899071681006640009246216690670515068530285759\"\r\n        \"7044837404540088869708210335900301553691604441179068784764324781639073532912521042956144573308772953464440\"\r\n        \"883496189282908517270698212087154388427734375e-271\"},\r\n    {0x1.51754b041523bp-900, chars_format::scientific, 681,\r\n        \"1.\"\r\n        \"5594946591458144416815819205468086167159843664426203644788299768110350898895635640473683177179787484935471\"\r\n        \"0761890097077391170243907498359928566450028944900998781236203230936550568356138185326342260744947797959044\"\r\n        \"8089980215073756826092589717035140761699187009768022799578563932926539959419689583937077771224903982883050\"\r\n        \"6603754515352518370426730719503690418615989945023940422246487398920505321270052974773170110606272759183833\"\r\n        \"5205417118146670159764645404909603278176701604829743198580484412492486663798834003281774366390347368165759\"\r\n        \"5362339231688365149446598673054797852034665234088747269980370542955955889926977401007116018807400721172485\"\r\n        \"495540083189069946456584148108959197998046875e-271\"},\r\n    {0x1.00a667d829ba4p-899, chars_format::scientific, 678,\r\n        \"2.\"\r\n        \"3721122629194563688992695961022591972700965769964962023979613518831273586889391072823312996245341552083908\"\r\n        \"7786296830599233560970336654641563328353367827061193750339055849152076714473993684277978272782656779678651\"\r\n        \"9248093278523380946182387181270224161693471305960716801796086350401820941530293610124339885099370122455633\"\r\n        \"9213480773166503738453729836723477976233921432682499010565949348556862176229902488779233912691955710018077\"\r\n        \"6162421733605519251254994399050521606947229834703901001343373353991955700195987881196711778257611305372877\"\r\n        \"0778315767911073839509938476337268634020082539441903467893818834311806047336796227578822931941039658316800\"\r\n        \"094184362279747801949270069599151611328125e-271\"},\r\n    {0x1.2c4d42a513cc0p-898, chars_format::scientific, 673,\r\n        \"5.\"\r\n        \"5511359192841546886271708253316622680838450085144175548410195027433013664293688195461190062847630043330013\"\r\n        \"4827722505022186068415003251035061785241544879329174355829128492380420931948872833966395029320283239106512\"\r\n        \"8400274603099891349456086079489507202429780609710291427660660349740546127638820776459982111416694789552131\"\r\n        \"9811293298057424598688814891254105264492191523450049178395817421850597417689862288876716646753931200748381\"\r\n        \"6862950901304269793360490536140388506490900700818282906806961856225837425294307204020811869910715963415241\"\r\n        \"3919749269646896273238207930381447337881848530251103441328808489089045268485281854014309335709649584605224\"\r\n        \"2040258306587929837405681610107421875e-271\"},\r\n    {0x1.225c4c3c8232cp-897, chars_format::scientific, 677,\r\n        \"1.\"\r\n        \"0734739674446298024207248229790974212690206929738748612035688298132431930940767808978781611808395357190463\"\r\n        \"1495036629406095455507974294251384055596725229006339887006543979219474079905078476701423633851365003304096\"\r\n        \"5533581637264699330161053700604940173012198029893482448464528100444472938931188041028209567758949481905183\"\r\n        \"0490015311349228608723684009581342357121335471812569531901439452988004676219145306228626404952817818807907\"\r\n        \"7542648436105191086071959808006028363021097640334464264306889872584610305498775551918545763871034864670939\"\r\n        \"1697784898357237005514529545736458270109663587122574187506989374675610244730559373166968547248456823482850\"\r\n        \"79432681499156387872062623500823974609375e-270\"},\r\n    {0x1.49f96e8fc3b39p-896, chars_format::scientific, 678,\r\n        \"2.\"\r\n        \"4398554262702667444398148018038098952470544215124227046286789042553768286136848758427981512172714445409930\"\r\n        \"1156432338778458633994988719747981697534403350242401988431098023618401338421499127747850118979962781370625\"\r\n        \"1582218414906726136931294160385412469197440440380909570572089389208878233063263470015565582345570048109359\"\r\n        \"8639683646815093873774935940375258540408008971091122482936133784909715421457345554809011396322005411855059\"\r\n        \"9162338229209184168112927326017394605260506607024809166145756193292992255504344399533818727388472020637202\"\r\n        \"9841837099259731932443851592118412411307461059862509222808177157336752523381613241275274954877922857555982\"\r\n        \"462385291142936694086529314517974853515625e-270\"},\r\n    {0x1.d02b819f5ea60p-895, chars_format::scientific, 672,\r\n        \"6.\"\r\n        \"8642158764630495478107887035397014093806406478739147400934802190758122966145509273130663656083449116193388\"\r\n        \"8223685640572561914307745731515469808330697336384232242413969293063536569077723416762396892707530258707424\"\r\n        \"4545467438925612214275881601335127633854291543549312798476681105264979340881027849188655526015371664367066\"\r\n        \"3196129370831861216770934862924684216985743727871460443148241127262602309896093569590960002026708618897030\"\r\n        \"7759109386838123883489097316625629036908204612253030886781498471111475701705130013263603331962648371224484\"\r\n        \"2831818245768202447715876348197096113292312233505987050190351763242747076189226988458164602331524196780765\"\r\n        \"390002443382400088012218475341796875e-270\"},\r\n    {0x1.9799ed1e92e60p-894, chars_format::scientific, 672,\r\n        \"1.\"\r\n        \"2055339469240307377403402594354358674407642465821440316185387366532834818376870794496751703591990320577027\"\r\n        \"1070113114076479488114135898545635834909792131037998106545850994330544371266945740534776833488374278778857\"\r\n        \"4210076011956356747276577674394094443595818534447499249115341998676084394486307876183969501905326447231792\"\r\n        \"1674817757806138643290162179595339950043670422343416927403419489541542045362472536831804335763027721048931\"\r\n        \"6956915292444618610846509129090912794604455025923507204700630210668066737375536920033779883548191818661184\"\r\n        \"8963048722354732914235674141422188511695223505091651304612258808796215869856934551053015669443762235800432\"\r\n        \"502941248458228074014186859130859375e-269\"},\r\n    {0x1.01910e9dcf23fp-893, chars_format::scientific, 676,\r\n        \"1.\"\r\n        \"5235738192618518189936618594353198373490038933641511179090306267605182024133053338385048719805469080900154\"\r\n        \"5957303087100560223792006622980536966737234211755461011587426519659509365351506623505775740873732101274705\"\r\n        \"9302244480684314824553717385232770551514728255582443659403778984013667349238036092179546944931299320331086\"\r\n        \"1757505321077871877040854320771623366194214101040976735574958938663792105124704745406309365766329618014782\"\r\n        \"4771690982829988866222038776007404704345799976200349382370719198260584387074295575308489654601314392380880\"\r\n        \"6247650486965191635898381488272370659215232130706305838899655353946746170671987732614538924943360375947442\"\r\n        \"4588216123765960219316184520721435546875e-269\"},\r\n    {0x1.55d13790babe3p-892, chars_format::scientific, 675,\r\n        \"4.\"\r\n        \"0438764974429647181083693278793666999589651788371231605969383877729524560726610847524939487893537632362689\"\r\n        \"8846861862368755886367916636298143998039008428394610535517912002245989309306202382454578439356783495073513\"\r\n        \"2918308903968711752955260187817332338525640497165750231938096458190808206428445911366884923501080893523954\"\r\n        \"1206093029385768713858239491000151225959463531583588963736180340573010650508237574015975946010392644014468\"\r\n        \"8165168171854738715370375794081116073467023962896828734809612148557370012497858203113645628993222560967395\"\r\n        \"0336664355143451919771945115113191166252509180553149351063482548119983121858449386491438816394778188001261\"\r\n        \"909345629419476608745753765106201171875e-269\"},\r\n    {0x1.7188a97a16f94p-891, chars_format::scientific, 672,\r\n        \"8.\"\r\n        \"7435562511428746407917858121214372902879051776678981737976322047613610624282685209507466698778142288224027\"\r\n        \"5455082159625173427591657526511616774859950448070519505134802050234509915695099201889128074783085073031931\"\r\n        \"4819188183029263829944697648815507866941818927878058242566543632327940530631337555099540355405781631178699\"\r\n        \"2808924770387346666342826175687898745708869277309879509815729325382945015154228534140524374264126591488175\"\r\n        \"8531162780816922738713821526003173659290088391480469742480863935095626092090116984973808179531069736545259\"\r\n        \"3665854547305770395594226542202736076609270724296938582309549515791111533078749081279345889490509807252804\"\r\n        \"908017651541740633547306060791015625e-269\"},\r\n    {0x1.3590ea1f17fdep-890, chars_format::scientific, 673,\r\n        \"1.\"\r\n        \"4649312749107112699249078612253466255139190610866048930207234799841567003889985307011573295308929480552062\"\r\n        \"5046779174563218713759188180095944870657550678355333052939808456821890187651923588680269654593860121514434\"\r\n        \"9181485500931165058227711343981064209269072796191838297693555979340057353274795768482966261660740325721905\"\r\n        \"1699070179918086660167018142370691860419426843786474241321383571061970541818509874342719546432238383475256\"\r\n        \"9862600241934899065233608023840660646981036704306246328305078273787020906287373283828550532772777376154504\"\r\n        \"2382603061313562240235190280769184374891864894990808094527898696863693474382944773192204352614134786180616\"\r\n        \"3432873972851666621863842010498046875e-268\"},\r\n    {0x1.a490bff22405bp-889, chars_format::scientific, 673,\r\n        \"3.\"\r\n        \"9804068003253801924882375719417812536118621472122388416843607937530335021800715604245101187667554747013995\"\r\n        \"4999377434052851878178252101539359394319413669582928785161047412343231670883353111905217616764325459046667\"\r\n        \"7828829988706129136467711963276762541096135592752188769472589597065685993694758879579630673912948899179398\"\r\n        \"4628734396688639664301833802570854901924189530778964826733402354920570755968722831348583712843989489597142\"\r\n        \"5614412988732348614862400377153642464721973372576680409450027908761770203176461069618154939055565879769143\"\r\n        \"7413131078539175704147903187697872905257705223315772497825560770376041116692908571522268713665397078024094\"\r\n        \"0907646063351421616971492767333984375e-268\"},\r\n    {0x1.c59bdc303397cp-888, chars_format::scientific, 670,\r\n        \"8.\"\r\n        \"5862866606155157862058221336345820574845880378878616534766461334711933967608601405237094305285212951224721\"\r\n        \"8811224414549999834241924697168185098548362501537290019314014899176707940187530956780726325235279997326100\"\r\n        \"9452705579499169901168981268202020899909243284637492060661433758304632176006814240421686409284667595109084\"\r\n        \"8814780526424923767058416281780691829025801360594452925927646668861343662081573038042895131100883925664927\"\r\n        \"3434566380169524829965025455207365527009316501409537452384812648683458666570530994016398472257935821870147\"\r\n        \"5792921574606565186297310529472246116485610860468577453516637959521359804094235499407265480713324131561980\"\r\n        \"9341797008528374135494232177734375e-268\"},\r\n    {0x1.b5cd6c8c1c28fp-887, chars_format::scientific, 672,\r\n        \"1.\"\r\n        \"6574180187301560277042993359422084230465392733787051007866897996899438544490745152444688834530645625295640\"\r\n        \"1232710668621853008468276391128301097900292398003336274182420225374479310694714219204498291060859779351667\"\r\n        \"9876740791517128544885924840330252161606481575353740949876187647749371234129360568830223801641060064222372\"\r\n        \"3867362631145241282908960084578297501714717916105706062353536412253151235023622382582131429436080455694095\"\r\n        \"5547690271019911428549317360851577278100317763948693937529484290614370922528247233871396511557553970893932\"\r\n        \"4974793123602180721204916958184979393062444379753888516263944185940942548772357521469280603746275395797560\"\r\n        \"303634554657037369906902313232421875e-267\"},\r\n    {0x1.dd323693a3332p-886, chars_format::scientific, 670,\r\n        \"3.\"\r\n        \"6131068345429969451130373310115607099294864130669813892800930118616243487082666684796081077226753480935212\"\r\n        \"0688722595031185095810662074858300293333264091798976751709329421719319329249471449113212585104216180364902\"\r\n        \"0903052455642472114216144930468732881689213430973791424810940744070365363417199107528165592848991563388371\"\r\n        \"4239891254785518595031411885155607054339603011357809855510923231449073199376203490368131774971870870529128\"\r\n        \"9254522590611068555644306549625893758075882651211411533144826878180312068875356012841418042267850727474063\"\r\n        \"1152624795386765656842235212097365641842719519291963550795467751354357546090784488915890550681843124830594\"\r\n        \"5047150089521892368793487548828125e-267\"},\r\n    {0x1.86d3c9131605ep-885, chars_format::scientific, 669,\r\n        \"5.\"\r\n        \"9183241751764955109389764976714155872620609643410243773660851543979583503245329654584813732786527982073834\"\r\n        \"0521636420852725417997261615447417981415016882734448973389564189606166822481467349095902747600636497815870\"\r\n        \"5655949314017730228570170646553719431745599699755559963097604629279063754642229864212114707279675331717816\"\r\n        \"8440072594592218022370998643157234465370967008505124175029486015944278448019481201861981653551367410858983\"\r\n        \"0359527730465346678452762668709266971955765590228540631576870240350592327118633813432163334893809956910105\"\r\n        \"8186934058654616506900726068423578479775270344220112716254835138009906792965231941252390889503048020114928\"\r\n        \"107204832485876977443695068359375e-267\"},\r\n    {0x1.85911e81c4b3ep-884, chars_format::scientific, 669,\r\n        \"1.\"\r\n        \"1798475245572565258836463208928683635416019155375711636848835775165384607837563334358573139483721738528709\"\r\n        \"1120028390252414848147343275955457018828059343282834073062154638169876178683144127461935561949669627002417\"\r\n        \"3685557443459253842752241847183852027161270157839527291020148506061113896949022943154133603759166570662569\"\r\n        \"0345523867216992200844339835298032472528560480231572053267575814735819031230558839583597348451054026157224\"\r\n        \"2255926498453096842484137847010445108819535016652319334499549429994953654304666027843239794666289393464823\"\r\n        \"3129548468640073030619432252064931487614833495014858781346346117845149269477579183027503827919826688563897\"\r\n        \"931771862204186618328094482421875e-266\"},\r\n    {0x1.fd3a7670dc2aep-883, chars_format::scientific, 668,\r\n        \"3.\"\r\n        \"0845119288706609241776127310550945770260699097294636090232555316906282397758975656802444965817572435648830\"\r\n        \"9154179460646805809256909673683564407525994808351915660324637706817216948128696931536528727801890757276085\"\r\n        \"7821998571184112154093996098113552610554410114972749654435078757144390250817251359366357240834609588333752\"\r\n        \"4472602522735858303857046884402733676415512137932791990670019608401150097071887929689475019078052824432695\"\r\n        \"8169030004334188899958031100736000503800060878357350714914804570705622357760565433666940637984589125351111\"\r\n        \"7578209700869532329366449360905532226889918970109979920440676664073492291325343965342652658654645433933261\"\r\n        \"24487430206499993801116943359375e-266\"},\r\n    {0x1.55795032e6bd0p-882, chars_format::scientific, 664,\r\n        \"4.\"\r\n        \"1367697432326765352340817035182743358257354812683967551470618307077529029943028853088076762554639432509154\"\r\n        \"8046642335686562972830560848535832043202751676119898478727926728300673178723638882161179194197617980196622\"\r\n        \"3908838232485454712767866954880107986586331614093671038168594790202349294527476303912376120107032564932286\"\r\n        \"7198926794092379193979001160520283118740890457050606561528368852971588670160141873796334891005265000215879\"\r\n        \"5052277642750755249858943871277223658376131404786971097472549039306650994514211262733568954010543397543745\"\r\n        \"1964937117339719316717342057260783566644006824506803928857754052307315246529116200657496496984749656533608\"\r\n        \"6860042996704578399658203125e-266\"},\r\n    {0x1.d4b623359ac05p-881, chars_format::scientific, 668,\r\n        \"1.\"\r\n        \"1356367562498619145310244385698473525427283564803902471480930973319788737231514592977108114965063815055345\"\r\n        \"5830977379024144088680682202364780595772824626362655507626398656976630817003866602520718605455234378514735\"\r\n        \"3087788741804559931776255025847515183240478076966312904995778458881231949209035981411121604045278278843061\"\r\n        \"6977268547183960163850017321591993093447821248669240119333705313884423383580946619081395963426489952177610\"\r\n        \"9997766439665027209396002034188443586122091652193792470005755939774105652393587570468729608467321990883421\"\r\n        \"8208302180369362225717108121963705936493691882457994726492485413609210469134484467589008870790296193420410\"\r\n        \"02028054208494722843170166015625e-265\"},\r\n    {0x1.3fc14119b6b30p-880, chars_format::scientific, 663,\r\n        \"1.\"\r\n        \"5494624584252723975906249583375352303256654343181075171301275908694037222380263592504310689836780104021758\"\r\n        \"1758123367338251903106006965951338021603071523529116946521691907573658498425349392869295127718000433929885\"\r\n        \"0163756715521637210713685129495086748985049799710299739775854204400714728515170031210558291615920547395211\"\r\n        \"0992782609302602588568324649970167427445308975305630972919772035489011201841001127297023151195017709922837\"\r\n        \"8421528368003116558663783106453961275883213934228645792733584503015487388799720683461887271416060866520401\"\r\n        \"9257084947262289315617219879609164279766856157954598104804131015062387788537884648628367603544198072285098\"\r\n        \"533029668033123016357421875e-265\"},\r\n    {0x1.387efea29f7d7p-879, chars_format::scientific, 666,\r\n        \"3.\"\r\n        \"0285755370951038681608683696905621033772278330728553552206929677317758937278752313911937150897127680137831\"\r\n        \"7003552524566357980703032758133957564184151555886502238750580053267415635428852577548128543311783224172494\"\r\n        \"8681614868585096210717704389551477048999401562959159801158673751335958285076385209833933722745096602678100\"\r\n        \"3143061720934102794967836052054893105516224558881550411686422692703782419027059745570753240877996075484408\"\r\n        \"8749613809519051548412628920654763685820783842694818471287892370778516701681078600125302612513778414895942\"\r\n        \"8881521605742355054257217013573044606787074642577830411006902168840320052258179872988498243578485424887247\"\r\n        \"745573404245078563690185546875e-265\"},\r\n    {0x1.e65f23fe2db0dp-878, chars_format::scientific, 665,\r\n        \"9.\"\r\n        \"4274033334811503748528404757289384726806770032674327402818133341840737332411750121426215821853365474391355\"\r\n        \"7230387790285083933191457903289270345596270263672196354394182427315526000880649977141656105787327135299739\"\r\n        \"9155480063881212524740495031457329664415784460015536413542144918144920982279053472736448128968434148254398\"\r\n        \"7888277231002210993520750386501402122475620747774111346439482660309836582783279713410116736596619463882867\"\r\n        \"3812504921615547034950622887983231873998865416652468144478421626318837183678578001787452762876752114351500\"\r\n        \"8392129613740783506615926436788653883816643418293983827325355790595619401175112158521708318652601588105710\"\r\n        \"56164917536079883575439453125e-265\"},\r\n    {0x1.be0d3381db145p-877, chars_format::scientific, 665,\r\n        \"1.\"\r\n        \"7291748366915169805535173361311690336060863250937536754419109791788940622928061477911081864929176484648733\"\r\n        \"0392740026820608012717601990878326637047638718248681993991531006456103430748094806588017738041317168594778\"\r\n        \"7021878692496904266200427795631638810860354316879657866121076029993751741729645917063224939510035511898570\"\r\n        \"9999359928300674405002289342033156169213644776362614794679384856915080325537702909530580016470514923381118\"\r\n        \"4731189167500553098889569815790695467489682656267030416780025246929633596118386225452442180730702839693663\"\r\n        \"8818669944862651345233138879791333792498482753324138047601610356877377484188814783042194078233402820821140\"\r\n        \"72181866504251956939697265625e-264\"},\r\n    {0x1.15b4bb463138fp-876, chars_format::scientific, 664,\r\n        \"2.\"\r\n        \"1531241335994102581545421543905718553261205634596225205065032112054906757350946064401973884364945201367158\"\r\n        \"9193498889587342518389527340691619196698218268405950444924912994180329555785724990446715258463485821370710\"\r\n        \"0297914720890097779169205883809457497940081169726676329974463181247441649888441390421006496972025799387444\"\r\n        \"9869399622491655605240174565953844905584693276335440945576505682668112743945032654000227377822639620983203\"\r\n        \"2424628169867278960066124057642301935079333533998374656641508551131984260262634639285697704413869791566604\"\r\n        \"7058344555168615768293471860018877719927801421962570793677149082526170886197341877046699512490007810683323\"\r\n        \"4414807520806789398193359375e-264\"},\r\n    {0x1.c9829623e255dp-875, chars_format::scientific, 663,\r\n        \"7.\"\r\n        \"0943811579209456674393546810681034475092272127137349769143575260247208850042176344557556673219122391550803\"\r\n        \"2134627914531660834653724133266216664851984579431280354615254876343265450440084636894948463058853750279245\"\r\n        \"4180594190614999429011156768877522268148802551983220139436429766464461164984165663141029854488048705467562\"\r\n        \"3483604810872383651838979512701583025652350883872278828061474056265146942266842117494952581371563236372454\"\r\n        \"4745480159434009300924698850473710854892506668277594645356984354898943282803740889954727605047952229451319\"\r\n        \"9536623800733390878855344111359557724030382934857005734748620310003839032941834111259667519124028078891797\"\r\n        \"122196294367313385009765625e-264\"},\r\n    {0x1.4e746257d7670p-874, chars_format::scientific, 659,\r\n        \"1.\"\r\n        \"0372442383613189969714086258459722252660210904892135354666456482486436513413329300096044197495219274963897\"\r\n        \"8020863794678225957572854635073507252775535164961781534910344480358232648898270595208601349292946268441297\"\r\n        \"5659811329213404719323722531070098963653390797863993492237598760842383012198699274324054996159547329459864\"\r\n        \"0580924969673405756953920124756145504369343197985189208048577768929728892896888692456901412684203646115966\"\r\n        \"4146976253775304747117052161568491733834101439034106718671249125299580172355437057762980472448608774453369\"\r\n        \"9693661677914745564631876392042680021779683932888965662895943618616656316757734516189595405655232696062739\"\r\n        \"70566689968109130859375e-263\"},\r\n    {0x1.0cf4bc9e57f3bp-873, chars_format::scientific, 662,\r\n        \"1.\"\r\n        \"6682266784627316054126786634947099848892653011771160846990224792777416965125633659363823166150708783511656\"\r\n        \"8115883612889554220377387265788086029467082903772667492283129753284952803154692864161969436641653582454220\"\r\n        \"2025731166907532844165700456927285153916176469595705886744314524895022139352304559343255941857888068865999\"\r\n        \"0319914265277282424260166051913216749835283576431746611538506471427827307023604012634806795610432203420196\"\r\n        \"3154877669659580960959116015504309990919735860857543724951224894412485861253372083552618782145415839816201\"\r\n        \"6695152261152695946643426485073285270438041876766580343024065650025617255398049533262602511438088548345604\"\r\n        \"06743548810482025146484375e-263\"},\r\n    {0x1.bca9d75009185p-872, chars_format::scientific, 661,\r\n        \"5.\"\r\n        \"5161395008185867433415357299266473202855702442652255015417473346516523059631823879137334341688412064252201\"\r\n        \"6359703316218905950439100436732933226969082782786169311545430229194074907477275505071792114832480787270717\"\r\n        \"8915637107070607758223870410283818480871009382801702917218018303290530391528205160937483613744722094375755\"\r\n        \"6647797218095071645532979709602538130511390566521835079669946838247561601190008503934840995758658023290110\"\r\n        \"6296333354593470671297966973754686923720279528690270848804834944868781772303189955069294165504271947347376\"\r\n        \"7583033498736701881264169093594528605625061561557706388575048347185417471798563922342096155909674237705075\"\r\n        \"9387202560901641845703125e-263\"},\r\n    {0x1.cdbe1ccc95d90p-871, chars_format::scientific, 657,\r\n        \"1.\"\r\n        \"1456020464232507675057122277543685119216460557168252748157621249520884155966158083731684691602468224843210\"\r\n        \"0075159391224235566394108391370020174395111096729007531631823808928065243014130184606154497386524196017218\"\r\n        \"1110143712808599775710021657762313485166911340457125405068169443597769672899512513065315032891834699262732\"\r\n        \"1908035386645038986601439051667243567979139672430921599967702480280650531086256799068476585431284585388240\"\r\n        \"4720314532219838347561762351544068566196357919731108439498951529832585320483185327879968362288867769633642\"\r\n        \"3887444215207972301820659320054036430922363633794449770968981950183436840696718769035296336955553897496429\"\r\n        \"271996021270751953125e-262\"},\r\n    {0x1.a08e347eebee8p-870, chars_format::scientific, 657,\r\n        \"2.\"\r\n        \"0669818736985631229211433609173300771521838259787418165128492129593346843199105889991555630546885520424873\"\r\n        \"4500210012141010459200844730111260401895114952654803481888935046927199523015310712190548867351015143128831\"\r\n        \"7341497991035832678659314223700819815496411587815428866045015831262423046888744843665130751642206640470596\"\r\n        \"1913785805669387095600713483824728909600527076010029285289082448583244303100393919800739122262878737798465\"\r\n        \"1267691566022679307642868763358002955970597599049178708475928028052269404319007521539151009465828335775167\"\r\n        \"5552194266495084558603653401864419204157889257764915433524177885184490559892343474975885675437581312507973\"\r\n        \"052561283111572265625e-262\"},\r\n    {0x1.12459afe073cdp-869, chars_format::scientific, 659,\r\n        \"2.\"\r\n        \"7219184652406805993113200069724571033116395794260022510965600900076256395056708441474373792056450106821277\"\r\n        \"3411179024958530270817243162958424331800455670782255602327569922315956959137078323961271124142919678140836\"\r\n        \"6427948378212113066025708694772668990832057641669827087574149746812408127966499041381146615522441977831117\"\r\n        \"5038207495040561355208394644648970017561375493866454210039949616609826369918160587076346295322087365807525\"\r\n        \"5752221508525467227047509182541235289800893474477444565810299484569003495443070616025087922865386504523121\"\r\n        \"8586303252491596734499946262272599981000921593324190166840578960162765846077581071744836208048390346903033\"\r\n        \"78738462924957275390625e-262\"},\r\n    {0x1.0001756acaa34p-868, chars_format::scientific, 656,\r\n        \"5.\"\r\n        \"0812835426747345075553611923477617398987820369648939551306803212741371571526499464855930630049097064592210\"\r\n        \"1122379892382479717106538369694733235716438656264863128490731915205653554091870063362517275282717008654459\"\r\n        \"3535922167621228929536166429804941621134212881365185181432564583359823929240075429731442028191437183310347\"\r\n        \"4322206835097502207668064791097777030747293208431008738427234530056421963205800084404703834502602573206400\"\r\n        \"4422225278499492883613711474972843024484702154518332563961230115989187179489623402654993380597009086900293\"\r\n        \"4536386965363555076444252747751067112437620044942160741851891286975974928623936015302867130749575608206214\"\r\n        \"38324451446533203125e-262\"},\r\n    {0x1.a923f6cf5a94cp-867, chars_format::scientific, 656,\r\n        \"1.\"\r\n        \"6876650530578207621570229952797785644682110844600730382828697983205295811627431458729119705328829243777096\"\r\n        \"7196655799942541178490674643026183703121754253538937824062441208188206739880347984078224093935173556451996\"\r\n        \"8428512418545184148127106046414566467839390422090352343007549697592858950809976923310636041815949880034513\"\r\n        \"6248794879877104664837625430195393564841311745786113921932455203585099235154424807349383493024231486017916\"\r\n        \"7453641477542234843453022929695045828962922773750009075946875267007574023695528840568813676232828754491306\"\r\n        \"8646813805642245606261257736522932872947412755257832558074192370113465124289365328893661177822593799646710\"\r\n        \"97695827484130859375e-261\"},\r\n    {0x1.1ec90c20f8a14p-866, chars_format::scientific, 655,\r\n        \"2.\"\r\n        \"2768831274043772176382445707214941137050004819857296684931317704292669869186330235385392974936135583425559\"\r\n        \"9391396336854625037981166318159043959947117232845747306996155023939888756843144321245127560309680255408819\"\r\n        \"8239536295503375270446676949521636344483280297142204797105650413943143524391493206834878212096730282097671\"\r\n        \"6001570512136786783004641864845978867193614401580700868334274804209917513296587055016135300878023975459549\"\r\n        \"2547459644523442197433522979067269453221697470469185215254072576985178910173696058780136578510752082477360\"\r\n        \"1510406473818284898811639918943826900408540402073733604377575240372790188611135900765419792790567043994087\"\r\n        \"7258777618408203125e-261\"},\r\n    {0x1.8c40010a69bddp-865, chars_format::scientific, 656,\r\n        \"6.\"\r\n        \"2919183472541600602721754928426186640791713919207735791429339647422629100785659522780692862200166897491701\"\r\n        \"2555568019104071065737204485334987194383301234768696626240704934209115582338286117696015309238068919260879\"\r\n        \"2858350306420316229909315039183892926423127496965408791803311714197177193889783060818926773096147698988342\"\r\n        \"1151170779345326896958734602721257311763761737474562447460745166179129141239961621209497591323866150735669\"\r\n        \"6648749093728161566479406697838649713830671083063257024116592611233964687353694158987479949427380270159845\"\r\n        \"5838968120913239056997624353817810715748408942055331411763298560932984099783720632762321067765753923595184\"\r\n        \"46028232574462890625e-261\"},\r\n    {0x1.1efdbfdcbcd2ap-864, chars_format::scientific, 654,\r\n        \"9.\"\r\n        \"1140703092024367155067044395221164452736675833151013263211220841163780409432338993660009501481842296218708\"\r\n        \"3495412014520893619544114461468039750464209587202548042016950090674691007785016340938454849306345780627414\"\r\n        \"9209340633047382140528725623452408559558958439548164560966946219116473549606304395767765048257811327042187\"\r\n        \"9425006157651070495838384845023596106870545840216347820462109279705594517393524899645116315147968384649516\"\r\n        \"6598556482074094825029100883563347947309602750682254364482901382848664076403072603858551382288376096255467\"\r\n        \"3920959090444603889415032225272728877288017133034340098211825380764598208977109714858111377822069698595441\"\r\n        \"877841949462890625e-261\"},\r\n    {0x1.906ddfd189240p-863, chars_format::scientific, 649,\r\n        \"2.\"\r\n        \"5433112499173347793194125621710163645079369331423202898876274087013265664417996337089113018887096628689528\"\r\n        \"6909980735596949777809152245542352924571623599896408538766930694228602626651083775966167899682411094921866\"\r\n        \"4528453283677257072323229605736418093485916168131207495359269594380116782753501753335290525716376820637813\"\r\n        \"1651313649600349107789087387461150989691005378537949674398986598192233131311058346321863230434371277975115\"\r\n        \"9601698778173244506374886663889558909304985006734120160002143650400648095280239164877277385388078424667808\"\r\n        \"8998821393839777960585285786855049346501567034793016761392974678965713676407917748223397325091355014592409\"\r\n        \"1339111328125e-260\"},\r\n    {0x1.7ce18a4c43eb1p-862, chars_format::scientific, 654,\r\n        \"4.\"\r\n        \"8383034142174994104272069838127782959216294890444624860488117740479459442612088085799847149791718592639569\"\r\n        \"2514342169545748844407930478209370082097698966466303161266693588296916477694843719922217257850078663588627\"\r\n        \"4299181215882835731412951066974921021211756829121808175859818791449336493487434400842599626556712001876150\"\r\n        \"9667718055608502897452028494895946834053067261106309416912495083775349051010869220082426966767527218818197\"\r\n        \"9310566617032157898763990519492387274070392056149682430213652686973136279413174816037833439958789749907392\"\r\n        \"5267530473811700835332428644282412990851223505003816036845036704538201885036357457504918588853115579695440\"\r\n        \"828800201416015625e-260\"},\r\n    {0x1.782df6ed4d7c1p-861, chars_format::scientific, 653,\r\n        \"9.\"\r\n        \"5571620410084553612231327876427113790261344273014651312134653137692369932119559217494148337440282302224113\"\r\n        \"0263997567506024287148387776798461354301437476844010018790776658181862075147468952135479241966863723499456\"\r\n        \"2671930616485340107247684107637321972451853389214118467182112388997076370539357788063452893376151729748408\"\r\n        \"2915270789468943416839744708329469795749877089097746641157553737198869698139987185436460253491149445310810\"\r\n        \"1743200834799840591710632180550687823669819744527982460287775503302538194712879042143801864025232229533473\"\r\n        \"0678286714386718609825203493845270564103948780979172013971383228946576489832464467236161631547020078869536\"\r\n        \"51905059814453125e-260\"},\r\n    {0x1.c8f1f802391b1p-860, chars_format::scientific, 653,\r\n        \"2.\"\r\n        \"3218163991190385364508984250447706848286720702433334282915779197051348928890111569809302423668131306768854\"\r\n        \"9671606004297189773600697112362201312947071746547498935123129686311916312718213019473461585470236625342179\"\r\n        \"0700948554276270180610568750669698346074396782598841969164523910845529402228142249335459416846310411634554\"\r\n        \"3338728832295769239658657884743735612915332354292164849060945176872147230331318167350766692977206334410141\"\r\n        \"9125790001753935727822079685994595251980575717534807762111364585832641492934382986141296078256014490691906\"\r\n        \"8890930223248032001378178220026349482108995119241996449400126609003650787411201237078750558850970264757052\"\r\n        \"06394195556640625e-259\"},\r\n    {0x1.b4262171cb3b7p-859, chars_format::scientific, 652,\r\n        \"4.\"\r\n        \"4322942901196376863360319680933694654308997921164922102745484052756965358320504133937620417038428351006134\"\r\n        \"3936976933967608342074121415324210078587243517426577185350093924310156264119225838613696398659496989910420\"\r\n        \"8353518232315947890478652282094992701578651352178291486176574508412703120463808237396444949047768512976373\"\r\n        \"1251327511010233610480829310705679565613059064973397437654199701626566854193403167380367233618735049297794\"\r\n        \"5056134852446758581372606649514849162314906568429829544233164063991054988715229534439385687585779318932257\"\r\n        \"4286727246285838594808424556563360450020368516054773532563608037624243787652624903400377931461662228684872\"\r\n        \"3888397216796875e-259\"},\r\n    {0x1.64a437deb4440p-858, chars_format::scientific, 645,\r\n        \"7.\"\r\n        \"2486245456651862023472574370876819260411370718249819818743335943776205307646101765920973802250296286459327\"\r\n        \"2610893461273931317458322627631905835530944678673175436224034968381667303539572414025175474653846060626371\"\r\n        \"7734775468528471925761988836228340907693385947639524028564463791929467246414768399226257697924451237021644\"\r\n        \"3969480729800801902101353001138560925948801924917672399080489050286782872517574693040850996560237083997524\"\r\n        \"4743120699197301488506127069616803558654617805738359241041246801384050437850303366990706136685985225470569\"\r\n        \"6051810053431151300980240986285936866882956104322697194439226699982917385446656854952607318409718573093414\"\r\n        \"306640625e-259\"},\r\n    {0x1.68d1c7ddfd3c9p-857, chars_format::scientific, 651,\r\n        \"1.\"\r\n        \"4667081257360905122219545067067544733163746805490966430488449206414100150968687775032402756052292826192310\"\r\n        \"9033050351341337814114817123415079541930647873262150571704767679131224864582828071686888611188799409109024\"\r\n        \"5011385394511550083590844403769171740415813831118767837488500000872271900044128369701757149831659567051913\"\r\n        \"4569889281021321327141354177750096990863112151715710379567247962185037697773480199531512073678158854750890\"\r\n        \"5840170569256617197434173544665833127001525561200203131031135463571741228836842304648117709300656826393728\"\r\n        \"6667433592776261377970432715687365719647591411294638482443774640687500004641624813672695637478682328946888\"\r\n        \"446807861328125e-258\"},\r\n    {0x1.d75f7e137fe61p-856, chars_format::scientific, 650,\r\n        \"3.\"\r\n        \"8322026353591041945549619532350115070542582231900572219630335353346952308164980213456390925558452250257609\"\r\n        \"5232494591328629456449452280125255079148668498861800706754585208817826976126668888145120396190261611609172\"\r\n        \"7621191237931458727896037788052038025879689611214479161439961002799972418744907169391423514023327463523140\"\r\n        \"9141504165184730552533850275002320357839853008554356923544887943781694190440637960551088058658109244864183\"\r\n        \"4918347642188228638308919041402117875214276091388203088789844277557265644615942295037352991745550805324976\"\r\n        \"7938517447633564168025048025383225174523163173171511655810658287115429190399515727016854782505106413736939\"\r\n        \"43023681640625e-258\"},\r\n    {0x1.ab03ba2215decp-855, chars_format::scientific, 647,\r\n        \"6.\"\r\n        \"9431480258533971970776226476780070833439447534419340955589877460326824250672274858385074795336068109179111\"\r\n        \"5181741727644326382169942415232772611867462202344841982342436831859881780104169648940151652988950108209827\"\r\n        \"5370546075553403132538586162373545653948610582831301940723300705685976603592449533077414627581849293233497\"\r\n        \"7877716272934729294493458229693156484855489071519117809921208470019603290425328615499359681908998029766237\"\r\n        \"2634261835803744746628765582402678876539119010835463553046443911243526573460491703172114040390276817289845\"\r\n        \"8905787436203069668723750929115862888028737610673922200768669995165371277212260081590500249149044975638389\"\r\n        \"58740234375e-258\"},\r\n    {0x1.1a8446c1becebp-854, chars_format::scientific, 648,\r\n        \"9.\"\r\n        \"1872993990256398393531416600457280450059068320796514631056090469764224373506303894785318601668954036095739\"\r\n        \"7379178452096086476025584315867174672392450396115503992411623576333908756070286366449656119838691258523423\"\r\n        \"4303304141441636209538276044437434287446030632450415026343274481569236323844213095362475894936453835494631\"\r\n        \"5916381176504061003068786853124720741143508000759975764912058080348409246107484554164396410838347897285039\"\r\n        \"5816761052341102619407499643636683374539552278851416563265692570816851024552511717992981218509470445404085\"\r\n        \"1058592434129680720256177905954138754010038223227654713022183966981646315616387432623213271654094569385051\"\r\n        \"727294921875e-258\"},\r\n    {0x1.d6414a4bf4907p-853, chars_format::scientific, 648,\r\n        \"3.\"\r\n        \"0584908958671776337833997728212552743197169604966979110845813040276451910012854307217756535365938877958672\"\r\n        \"1422062480805494048637982077473308559243951566395413290867225547157080991564751569942298190170759723875656\"\r\n        \"7053418426117941253353267909236696526460445120208280487438673462490361511956069037937150670663546570743734\"\r\n        \"6296769657742269429934163903699889943903922695607261208044403504503321200370225042400066440906017069328778\"\r\n        \"4261706490929305618215679483092331173245544667709092235091659004587744352478247058204575908244766418147686\"\r\n        \"2773133919940629127853848611379955271758919464669049389518829342226751666594490586259524889101157896220684\"\r\n        \"051513671875e-257\"},\r\n    {0x1.0035d29019008p-852, chars_format::scientific, 644,\r\n        \"3.\"\r\n        \"3327306790247037336907675034392568454272595369411738900867617488007913473551733534201323063199723807019393\"\r\n        \"4483504697879606878598819097351469420895437630770473232697024322335525318888227840552509675600524255646902\"\r\n        \"8619739611765019036536534035050301257528705215736828310189129109513417846670742657861223079682981086395798\"\r\n        \"8927567766792373175362266064722463852642260216366005158732934562712954829503899973208430525614046950049994\"\r\n        \"3939385349824496739105901495187144509403790073622444198594469799057201540623756926169050435684444872560782\"\r\n        \"4856932216929044311840257291219286900776173012629452228655688472199201998272255487165693921269848942756652\"\r\n        \"83203125e-257\"},\r\n    {0x1.20220d0117b02p-851, chars_format::scientific, 645,\r\n        \"7.\"\r\n        \"4959510555108538799335754813356701754792355065646873389377940176911239971986659490383240376007977904208311\"\r\n        \"8660847570367526920460011559675059654679049732952640292043242998460981893007748067031656426282809466359894\"\r\n        \"4693614670185383532442466218699267405223828138978645448763130009589274108419749908670440725967037481300206\"\r\n        \"2851633748523492548210781300670887434058964089123011544222688423237087102135336306066767496744054282140733\"\r\n        \"8711019067174933523839551077258961555519024174473109573715905891230366304042366550548239550909206406025216\"\r\n        \"0684959021066679582680454839013311819960942494580582546135693497151510794086759492671490079374052584171295\"\r\n        \"166015625e-257\"},\r\n    {0x1.3b95c8f65ccb4p-850, chars_format::scientific, 644,\r\n        \"1.\"\r\n        \"6420266726944825630454808088054330790688039184429766248449244744802510234416512167593735365107794611013870\"\r\n        \"9782299643946831257931373691292450527147133474394368778328589464320389279444152929596129775091079169751014\"\r\n        \"4519842247604265947164098444353337876295194407250912855850267351168187138849274287240408555196983493342848\"\r\n        \"9933467342587973598710220715138598315391026469456477501218614918988364315987081858415903538046962891966892\"\r\n        \"4800293313739934982286504732834842708929909888507762225095896368591204588939199683430514018879374199320842\"\r\n        \"2307913615130573653829855907178088163064254606588826707581097183952044795199332050117391190724447369575500\"\r\n        \"48828125e-256\"},\r\n    {0x1.79a370e99377ap-849, chars_format::scientific, 644,\r\n        \"3.\"\r\n        \"9297951542678784560085047330289181715367243624999440411535626335855349124270289750581378228979122629841836\"\r\n        \"5716041276174947051226059321141415572441753775776361360750193106965033615162658101521745005109053033835175\"\r\n        \"9584991103790007219099337019871347846863373747416772168678914168817718265590672635122732019115088840685528\"\r\n        \"4308439255530425901592683130664478484169626574567424147948837034542847458593654965464404208798178515235674\"\r\n        \"4909406359357588361014427767062561979917000205966828612337591322173531342449808068102635168063343642736189\"\r\n        \"9279318539070692012686415588482858054953378973526677058505748782057145603377468212613621290074661374092102\"\r\n        \"05078125e-256\"},\r\n    {0x1.9c56d66092450p-848, chars_format::scientific, 640,\r\n        \"8.\"\r\n        \"5817991246225452741092042091868243950477436438061983588714379408467689836034614775795371333619284889814662\"\r\n        \"4881729754285305304028716295937305832118768504741589064001775240877211755650206045802793098231749200556033\"\r\n        \"1959933582336136059033009322539085521752257781672307684288330420314630742326494970432677741777569981162003\"\r\n        \"9490095521058458025954384848954814776478898052375202040873522632601594631876073317485237288376180074032624\"\r\n        \"1165338903507414978168516140117648928081962307140674669659472269099418474948911293324974333980429566047863\"\r\n        \"8146733257119542873384793509262530795138061221424111646611504484593192093599967051886778790503740310668945\"\r\n        \"3125e-256\"},\r\n    {0x1.421d62e8a645dp-847, chars_format::scientific, 644,\r\n        \"1.\"\r\n        \"3408011506316038440876133546193212552863655819964643115232648414608851460824412779274915182857333649885355\"\r\n        \"0576135355890044448144591074850288974977950713678686563287865201430204637815836053277231611431919085691074\"\r\n        \"2176504263281383704688378934842635350107826626491841796750832996448091584065997738570818997931555021995406\"\r\n        \"7467015447979030230032418560932618957121652453967921612902472152407298980304430344846944714451589948955752\"\r\n        \"5437413743051434352342449627142280703374251033865227110536913247629525335673340273427147625680436359716961\"\r\n        \"1438811713524636803197146424960795969018772423073980006145654577415796343889398123394585127243772149085998\"\r\n        \"53515625e-255\"},\r\n    {0x1.715254a64adb9p-846, chars_format::scientific, 643,\r\n        \"3.\"\r\n        \"0745985371377658309028784463801492290964511331496359833560993895247133471183641249699681449552243237472526\"\r\n        \"9431831755931005890372074394881882566245495978107635358098347060477106877104572904855819242902252133462944\"\r\n        \"5267947457337839385094549901547440113445942355135938964379412466831551967266918677931538876399443000538108\"\r\n        \"6549704757852670657762062506022796246089046295743650517804858349388973761791892305019059446288013874091013\"\r\n        \"2382985115260402448385415743377226016102355004438263205348482304617941213627282753219081015230403317774960\"\r\n        \"7573235824693271311509414701066402074719718754079572549356306768426427920154475614822331408504396677017211\"\r\n        \"9140625e-255\"},\r\n    {0x1.f2cbd7490fd30p-845, chars_format::scientific, 638,\r\n        \"8.\"\r\n        \"3049473134495637562783372335308040826947988947911227489305609217047398914763715260955078525106138710236649\"\r\n        \"8636130716831502004815770007428786901700220001409422949750681686209887083042942769382184521970832898856698\"\r\n        \"1564429427030907959956250390354575017810396993435701154688399222312002352067564686299288641194649680412519\"\r\n        \"2055831811634890274031010872847387842015145697773860849597339982312872612038388001018205969465761016324883\"\r\n        \"6221890713622421785887916102589252792760578729135290979060008922160938551159483058864969866471513981057877\"\r\n        \"1325541600104932329110315094541017055279256323295198054372855898377578376390317771438276395201683044433593\"\r\n        \"75e-255\"},\r\n    {0x1.b2aae429d3338p-844, chars_format::scientific, 639,\r\n        \"1.\"\r\n        \"4474411243713316867208977352315208912748300186833139035453984167535475363914803045214345115839914983070346\"\r\n        \"8107963464265324484638353285518964551567088265107554403873137980901895793359340168401743333116776228534381\"\r\n        \"8411044885533746274434524620506219125995305723357527314776166432074669080741627207730696930953203477260024\"\r\n        \"5308586568934283524523440596892702417372491246648480892544416253172082204519214951423032991733233973222191\"\r\n        \"3704414744084396980182542537483986194053369028249533947601013624027010399377778605496838258484958724080102\"\r\n        \"8509885320895297831483040255143194596899156238644941664600889849492774963390928633089060895144939422607421\"\r\n        \"875e-254\"},\r\n    {0x1.2617611e9b255p-843, chars_format::scientific, 641,\r\n        \"1.\"\r\n        \"9586457971591684628123217698773108935833562264144584623143719864276904693871407795456172875015943670393176\"\r\n        \"8778961167502825335230168197000394874158844610101174297566165868577953600731530124390559329841336668647646\"\r\n        \"2468308974382408845446004492911085860270135950244988831730889623751367135007863460811455551400837050028746\"\r\n        \"4166926141825676068445301167385514883698177546176927308109450223226867704952176417382444892612246343386496\"\r\n        \"9518502089292929143453729778070058866366076873565593983608492151377810843966575548269321853362612694434735\"\r\n        \"9338761906490029759018080945247530366860736467759639429490063485076465146783597504054341698065400123596191\"\r\n        \"40625e-254\"},\r\n    {0x1.5fdb1f3504dedp-842, chars_format::scientific, 640,\r\n        \"4.\"\r\n        \"6867153674920416790873337244849971076484220776787110409945879501513043147393108951843513448728397762554022\"\r\n        \"7879888252572412233135500143521775531145980390850992942943675033022307280642493210611912876680597019732548\"\r\n        \"2421531656498659115150512846925176018749355178878646041710082824033332351824268692851830401035105154057711\"\r\n        \"1375092493159921425872818144761750136660331176266578771858537248827685693005467675230328337994759363083192\"\r\n        \"1961798272782320798169726042997383300927368593567279231201682441735999054882957709060176324055801659088172\"\r\n        \"6724432954799549383358558234672790149531275862362895256284006733585745935188882071997795719653367996215820\"\r\n        \"3125e-254\"},\r\n    {0x1.f6c7a277dca7dp-841, chars_format::scientific, 640,\r\n        \"1.\"\r\n        \"3394037849881334765215059992884678582059252311456778113974098621513971288241782735420610917120016976004897\"\r\n        \"4101237183118229518455257182717275229827659782720693591974491238575838983952697201911225839142407518108571\"\r\n        \"8387875308026359155400107105741151539207807846271470685787797198661393857298908016252366323393251433958973\"\r\n        \"7460426086328194140128257808492826202220353818668408282284630672148896793138260476005062793728842134893731\"\r\n        \"4037303402325371530047168074113847203340154903164323156507991141932470177139673422077096863737284741727886\"\r\n        \"3808972654184165400453746952390769201581688574999827740403704881609701221600872145245375577360391616821289\"\r\n        \"0625e-253\"},\r\n    {0x1.bb9f1504a1a57p-840, chars_format::scientific, 639,\r\n        \"2.\"\r\n        \"3636119615931954460250167869238911011154326491479430909872707793904843481361199550716724821767345510198869\"\r\n        \"7933841684366181492076821446815839454724649689656529509127038316112414479726862331466461938824094976797737\"\r\n        \"9143220992333278223132260837716239494499620700131088794260669791925469170854867933113640126889557448864829\"\r\n        \"9498325434878096355990555941114674441441864914479110196859470066198102332189630543298418737541697203517800\"\r\n        \"5724591334289072091451093449446509958846630135866773448711738522258235844477343690396553420497616058860223\"\r\n        \"2307735599284641966598526646351415873074695035701931182197892727567777038100160780231817625463008880615234\"\r\n        \"375e-253\"},\r\n    {0x1.140d6862ed66dp-839, chars_format::scientific, 638,\r\n        \"2.\"\r\n        \"9416104456955937221543776398156706685887661223033136149978144195414487069880048080968267584297336066506254\"\r\n        \"3115356949437725212090915600835200704935405467625569119444005558649057853906959361320327321285798225893023\"\r\n        \"5229317177289893607816570293832641314174027421888172164237619051576765081507797361682755327770880513040405\"\r\n        \"7575826358204046303559225686729160901856986719048077867296931804843574430849104888948208416960160463531835\"\r\n        \"2482831563717046642268932327206818661898710868016377802766481100753130432486192161299895341263446334301439\"\r\n        \"9966471714416366962788461689772484722397543415502179310786106319420066257386281449726084247231483459472656\"\r\n        \"25e-253\"},\r\n    {0x1.1556a20068f47p-838, chars_format::scientific, 637,\r\n        \"5.\"\r\n        \"9106288435436441832925321437439273066502477312033311246968237725276751639214797258968915217210458498406519\"\r\n        \"1599955142680202342645938198876556661177979692713340361790875196351637828414851815092581530891522562889255\"\r\n        \"1785526041987019154864916301964965994784344521781015097700885197871228199743117772247657733964373336298903\"\r\n        \"3343024133323958002289706156266221722389423041489830227675743527604713272295232402604297526043610489011954\"\r\n        \"4521874334868186828399600397263829823264455558567290365650686459810955354562951522008422782247078306179082\"\r\n        \"4274297798382230073449857061911562247122871488645554553253686055815790956202704364841338247060775756835937\"\r\n        \"5e-253\"},\r\n    {0x1.8a637844424c9p-837, chars_format::scientific, 637,\r\n        \"1.\"\r\n        \"6810396848558273510235799637525049545294830249948222214411090835531380563125319563203943253866909216175104\"\r\n        \"3257048804487611404557035566261801859080485790221260947098571342313927613866021217690405138818610985006226\"\r\n        \"6056665647550736011704735446153339487543803430367841295100167579486103332587829562856169336508741156116699\"\r\n        \"3821573800278394690338640699834125530610486716022332187450360770206194564289972002012617700416236636708103\"\r\n        \"8543888500074700833328077519662860658313152207041831981854465792023538138098947494890681839362176868398994\"\r\n        \"9485522109183673226012048016787838896032817586439816560580009379994442797467968375713098794221878051757812\"\r\n        \"5e-252\"},\r\n    {0x1.6c58b883c43eap-836, chars_format::scientific, 635,\r\n        \"3.\"\r\n        \"1059777449559429265900676399183362537453270079840668482441014488765656125936602920378930602673659646522508\"\r\n        \"0750485088311931270354408819089265208117161050801207000067848396965880346198894113665199706590577342696924\"\r\n        \"4262616672598390077967522675156490575620339033736544018575331426236187140125932174293413904931149686676806\"\r\n        \"4298338564655493854637072357239725464925528075313439590693619626864606148281041428613600174497025784538263\"\r\n        \"3459579611621591637238666391502205681590372801573488459837345671891293214092887485037314994884435306602798\"\r\n        \"687276288545989827758369435248803257946775797031683187521866108295187647314605783321894705295562744140625e\"\r\n        \"-252\"},\r\n    {0x1.36a7fcc1cfc46p-835, chars_format::scientific, 634,\r\n        \"5.\"\r\n        \"2965573801445690722158614076883511123532332685924214717774752426044438667279139986749437517515188177140269\"\r\n        \"5485375202212937664379653938486718551271787640302576447258297441253734512519058771847953071990841730343795\"\r\n        \"7327930452143347292118755771583009879983230855464894740311328415111572092561634509970907891424846710866942\"\r\n        \"6864597398228408661760562863344203484553975704767864965698077298580010056954322574128346908080869265075775\"\r\n        \"5739269716961846858456688528224803759035924554112211405402620391714747114614201404766504398808292555529737\"\r\n        \"18941456131767751776122974578049807479540550113655955376254567783245175149886563303880393505096435546875e-\"\r\n        \"252\"},\r\n    {0x1.aa3b9d0ec1349p-834, chars_format::scientific, 635,\r\n        \"1.\"\r\n        \"4534181673457758400949055236695221048664713095250053797426519767853237041835956791976580225636371098279321\"\r\n        \"3214068181046129672798657879984495167728061963953124586161238507439156789985644488887055291390992087782055\"\r\n        \"2701336906544502774398188591604781018114504110735607946242802648806954749263291520974122404938211127908934\"\r\n        \"3575631285032666899798293647051957896468777447945107059181546956408240664336422516004145304588450388632522\"\r\n        \"1070737739693194936546919810702692652603043565212622312212995327472532618638556231986680206742586143722403\"\r\n        \"550783309924285289349297072101420663057753817823364411493644089180821143969524200656451284885406494140625e\"\r\n        \"-251\"},\r\n    {0x1.5f0344953ec57p-833, chars_format::scientific, 634,\r\n        \"2.\"\r\n        \"3938479247234097018550458511544817367739361536200950902814825089891669710214106361799807545093859687694323\"\r\n        \"4520222814663334325501959922339511022417169200258138866716240572516473903243780418299855591784687744221561\"\r\n        \"4673730495274627840445980495455053691946265275961590944942894884161146186125918812095405141490376065791257\"\r\n        \"2990007375277218500031379100913127364874315175834774396942682472145171601247554709419898298359216080654381\"\r\n        \"5234719036377453626738864303434918589623115748337487232265520789623861131272396012356699775618072348868787\"\r\n        \"76372878894847401207188983556061557308620341306536104552493931900414292357481826911680400371551513671875e-\"\r\n        \"251\"},\r\n    {0x1.783fc5ed947a7p-832, chars_format::scientific, 633,\r\n        \"5.\"\r\n        \"1319111420103700499236206263878034212106202950930977551857998220289308747630115765877892885472362039275322\"\r\n        \"0523269264416102554328703892784714509871799045575377396811614393505255988764201594860924728188446262020599\"\r\n        \"5816224373606402176926540883831558717591219455218087384224255737945036264103454832864541982601681641504954\"\r\n        \"1718987656545856396071620261775045714406002201539977040442012225019186665790253178924857163319970339024221\"\r\n        \"5773002375760167632603757343376191928042229339921704578692579360050525881528852289207475083143721754146523\"\r\n        \"1243409180954321670387197333315664529506371145190073701706340823791574479173505096696317195892333984375e-\"\r\n        \"251\"},\r\n    {0x1.40710848cf107p-831, chars_format::scientific, 632,\r\n        \"8.\"\r\n        \"7414290750552295546310067304417538089998764617839404299068353704815397343149675509135958228378829386585016\"\r\n        \"7188491498788205872086312288388767426146999394659547867198614986995481660971205928823308477880542196613894\"\r\n        \"4275623574987168431568745304364621669241457008033758230714634333799159208383480168990161078479986731377274\"\r\n        \"5020111854169849030780011055234667752217741062441145534653890585011154245157298808199839856876073524543679\"\r\n        \"2821070637754721727631828680882026195550243758494821815186708842256768881464944978789741055024675233939100\"\r\n        \"433403212219702473933537591600476985467616468889370663931655085210348232749311137013137340545654296875e-\"\r\n        \"251\"},\r\n    {0x1.7d709da2908a6p-830, chars_format::scientific, 631,\r\n        \"2.\"\r\n        \"0810847152471556254401311232032188728447267117360175717891636755620348167659504840695434647539993442189667\"\r\n        \"9066888555643495483464096384894027472978012957276210634072464269390297861825532386002160928480072354865994\"\r\n        \"3879732460682150385691303824800896612452662280810299151162782505065316201313287687887744161894093458421161\"\r\n        \"0513283413566516116159526022930867617376801255296549189477727203602595481316438645897519886431470703998215\"\r\n        \"1377960435417890291154205919810773879383879482532629222150323363757619454356194585518671919581410963596163\"\r\n        \"31249245416003787574812480465286687861085268674943439588960990282995311417835182510316371917724609375e-\"\r\n        \"250\"},\r\n    {0x1.3e0695064ed8cp-829, chars_format::scientific, 629,\r\n        \"3.\"\r\n        \"4702108400000347766175063830843523770353778618261381349778046912840338008912123330979886734938140131953647\"\r\n        \"3650404380879594113908738392579171180233191183812382724432641795305629872774983638622063672350876094571233\"\r\n        \"6499953240251855646705291887761133361595958660743063765329731272882479029390612416402919177315324330478981\"\r\n        \"7906314100021310207581009790350421328660994413130289544979421802072005157445008442147491610582962042054585\"\r\n        \"1320886313933389161115405988770793923103408378052619011716334186056438214857870078005536727201067661995785\"\r\n        \"790466451286588137374823625348339837864856184966498995800830706937034619841142557561397552490234375e-250\"},\r\n    {0x1.5db5937ba8bdap-828, chars_format::scientific, 629,\r\n        \"7.\"\r\n        \"6318668361521597024921032941163912195843047360807572633855844063123137453078655746202441700789564711179706\"\r\n        \"9916923337389527280904671103326648100882322011480055143650535250537017261380037289381165619083602515263170\"\r\n        \"6262769131163996536699740657297258151427870476072005518538156986453060386081899065708959573969700226946302\"\r\n        \"9719928757736377066684783971457371284337556021383941621372989509463523373387393627423053871399621032962573\"\r\n        \"6022033942155448268043514668101801250595923776575465783992676218557609418576221962370419170839207704238194\"\r\n        \"605439691883635468306303649484833033050509910062272350022606615116416151067824102938175201416015625e-250\"},\r\n    {0x1.6ac6715436880p-827, chars_format::scientific, 623,\r\n        \"1.\"\r\n        \"5834019337617895673529802567022957766337379198918511085508103045110528907733717602402102884849998115672191\"\r\n        \"1870061098205010006064994116341947870874025934708681989200668415753105577412001082854515786066821742485680\"\r\n        \"1456062548357689341619587901384884023764854066935774035847090830187065881058547524256867923951849842211943\"\r\n        \"2276079112931267920833853415931213541677648134703690053765744168086411452423513659991329474857843477918188\"\r\n        \"2707143218003668264272483816403234724241995471642051516300929038491267945868500721886688596381791055070199\"\r\n        \"667412232286926092094960561657785392136164166225682260746854268518291064538061618804931640625e-249\"},\r\n    {0x1.3c3b00b563094p-826, chars_format::scientific, 627,\r\n        \"2.\"\r\n        \"7604974029531470755379958955203393724195949942057591244473815246912413391595013067101010555177517397100426\"\r\n        \"9851394280913110142349802027895864686659380331926581354881712999287134480758847780103851594645801982342979\"\r\n        \"0641807148719767698251796504092725134760739333533889568923210722351490145615126375166980861819231195004556\"\r\n        \"9505026974147140173697808659679428521673427481132186985576932729538148337201682004999096184931755553173054\"\r\n        \"1128144851232381321744989354016415799229573544122021935326635841125869650200213049730204055454487099841334\"\r\n        \"7544193726240738861198240363922061035190857842312351787435187322472529558581300079822540283203125e-249\"},\r\n    {0x1.0a0ff03dc7b93p-825, chars_format::scientific, 628,\r\n        \"4.\"\r\n        \"6451194553246022272173425910248807842189717398564905420998902159587754760551012912411892518528475138617823\"\r\n        \"1276077149413751767111950364616545937565579226648034335148841326886078901110074148150025254392503526305529\"\r\n        \"0370216558105709306255319467921884924334139388491595779690971062717608281675484211415461117818876639956161\"\r\n        \"9813289346817198949598305014082475316385753923603720505835516199626324546859661234530477365388955308858864\"\r\n        \"3275088066098893147926453981673835512772595499765753830966771751165528157351625613694857586869049470850208\"\r\n        \"88284307723768352498369060642533108685449620935516154367726782137282270923606120049953460693359375e-249\"},\r\n    {0x1.1c1859cd75eacp-824, chars_format::scientific, 625,\r\n        \"9.\"\r\n        \"9199020006964591277293509665148114175738068218299722216171684761860715405043509729734134051835419456145780\"\r\n        \"4061721782774131614986369921373038006621814451564434018015185478894418237919900549658925539440736238657233\"\r\n        \"2689373586933180978659721914807011300151418921971642861345180133723088014278380959822191416998871835413481\"\r\n        \"6229989291886742495498869896064739850070478724667412357597823910441887617574862626088827907557313143938169\"\r\n        \"7371051031113861825221076651489337708984454153330070788022052771042484812220901567775296839230012789253525\"\r\n        \"76743515243575159677709123598388542132205569638845363104884267357874705339781939983367919921875e-249\"},\r\n    {0x1.6a30b52edc7dap-823, chars_format::scientific, 626,\r\n        \"2.\"\r\n        \"5293584256227206734436690448860438863560423322197287673071289227707969220482106883975461366052769605665567\"\r\n        \"3032934775744927789366034483299943037941202054718946505243272833507365629419200820002804983158179977271757\"\r\n        \"1671721074991839534481385737708488066272572252571245350667982202726521017811552285767239087036275942444147\"\r\n        \"3374843557581613823597887118702404883540266812295744444400774717845528291905742135010555522440223183088720\"\r\n        \"6967806285670112170221507665071279926429611065289317694700042420246011589644121085837055088423442887441142\"\r\n        \"392232124354630488844367280025213630868625148079983856914954021277708307025022804737091064453125e-248\"},\r\n    {0x1.ed57ca0b1796fp-822, chars_format::scientific, 626,\r\n        \"6.\"\r\n        \"8905280466167352632776620072267895607425419562720887072786636113143019987094343582792471662292866076472939\"\r\n        \"7730215669170795196785528888685159578923864553514694529384313751243344600123412643351227172604529578659637\"\r\n        \"2096141206042297685159845546380806896152212520111951628197619447822423235689063793472058111226067963673455\"\r\n        \"0174591142037230254783839132641626802370354491366421432128406243347719909512208656554280798669191054910107\"\r\n        \"9454291551252805162525706181057897779052882188595582910816002410243781113060844501237388400738713446722875\"\r\n        \"308537861185231999546786141281236847796378186571867436281679797360766315250657498836517333984375e-248\"},\r\n    {0x1.64e9ee7dcbf58p-821, chars_format::scientific, 622,\r\n        \"9.\"\r\n        \"9700406511611006380450058410122703902067520359419945795899511825630118597958866580756336755422909335129934\"\r\n        \"7926878163027036020163695376425344287053227483975642933460875671431629596491665913660803544069466490750869\"\r\n        \"9970961003572985859670160028279294993823700602311639161464638127681204361896145848503624511004696881465583\"\r\n        \"8036376921871076322233996810721470996621854701276918380162974677430101574359190896715256741796115091909122\"\r\n        \"0856185361682832504647890500198973106127845308319244621499182967427340316386207631543160167022751161619375\"\r\n        \"39201346108337384023359802355141440629266624923426713678065169688125024549663066864013671875e-248\"},\r\n    {0x1.7342806f62711p-820, chars_format::scientific, 625,\r\n        \"2.\"\r\n        \"0741563200652302519678516416917490637319537103668252987275223368145627331969006334067507115020665860903497\"\r\n        \"3765141461912192994606787899859502313760751816479041023020811816052948008049981562060747467660282220009364\"\r\n        \"7710183989389227941857128261486792713783713285962553612344064327011914894418682422167270443852098206799122\"\r\n        \"7847782624679359595950024366056315181802777138084183269364044545618872783135809627169533047399996575516600\"\r\n        \"9060687380227497970016437257881455779017980410088339024792475991575812183540342607164382360274099587700869\"\r\n        \"33482837896691685792186827022522786412573603601400469044480079361392199643887579441070556640625e-247\"},\r\n    {0x1.a34800bb3cdccp-819, chars_format::scientific, 622,\r\n        \"4.\"\r\n        \"6848861238967825523919435523535138669568875591721693952497479446960968892754400320865877857137724925758637\"\r\n        \"6466312176966101394984044901307208121700242179682309442063485879866325529597911633973911504800785909608004\"\r\n        \"6421048235855444747600807137572005573286478427366497261165548010683612698376700103460067306048636372592132\"\r\n        \"4059660642721400203275806867777947123755775768605772981974944361167157944352867406159553540359103081682108\"\r\n        \"6636053116272544880672224430084688270810005976480858092339374406472583258511653370211245655171535530171348\"\r\n        \"68475375552171532363258796791949094141543712314728307999356360369347385130822658538818359375e-247\"},\r\n    {0x1.5d9ceac385ab3p-818, chars_format::scientific, 623,\r\n        \"7.\"\r\n        \"8128790561179689261605470119862193017985069838967025530261087587933055171958709784048417131883969881289232\"\r\n        \"8797406572135239307512241855106659665785341333808027529891639934853547347164191104084961308532479285784922\"\r\n        \"4142225226040785724236443793549159284110455362352309285581855331258281918297212200744899407805498796041724\"\r\n        \"0223606030354633376997447668412408687420142278688803934473416390666672371634334561300974538601862070328598\"\r\n        \"4804418822456502710865535581459474356864773068661534540543910873665770745502929686614726428960140394322959\"\r\n        \"359752172388948566070676292817051125806874533856884006144394305692912894301116466522216796875e-247\"},\r\n    {0x1.0397aff005f16p-817, chars_format::scientific, 622,\r\n        \"1.\"\r\n        \"1602344741507901062609933663400332688034477906059336896625075268185503321277861155577877309099200703570062\"\r\n        \"8717598155228811133748159351247592155729939171162247951338314835092976771138161453964800725190495041903503\"\r\n        \"0115998861373685927735467998774993942859232888651217060603538892135095615587837214035061210211423585850725\"\r\n        \"4986658169040416093975183029957643060233052384979024889678988680203420436124343358353115842501466575805640\"\r\n        \"3520972892965604183687346789132289312009394370877881599615814659100474082740931232740166655750873897827114\"\r\n        \"15272427588336281066986388648508170505840000460355369849008155824776622466742992401123046875e-246\"},\r\n    {0x1.260e422cd6d4ap-816, chars_format::scientific, 621,\r\n        \"2.\"\r\n        \"6285314099653654176280875743233612539556461168217321507191666512583849543277500473619693088454262930856098\"\r\n        \"0983039488026043122846937971785423871648148955714263876626708355772491994903748165606956838961840921237500\"\r\n        \"7093350457729581755520989176424652492855243872462258991029991096716016371967122853936092377692113114869321\"\r\n        \"6974910909635803632416076140521430405408494331098431557109315555609723028171644630679617395772994661804039\"\r\n        \"5898962237787927702930458496474668440982602127355647894730320066735255098153627327592205560893738901018096\"\r\n        \"0507882534877738471905760480320075691097888868409150620042424861821928061544895172119140625e-246\"},\r\n    {0x1.95518b86155dap-815, chars_format::scientific, 620,\r\n        \"7.\"\r\n        \"2461952671145799308682942273613242790942104994852816207973587954637784400200604552323859641436019959259805\"\r\n        \"5416275243813683243530881530312826717587000377649636921271072048731825212743492857367125402295389748557776\"\r\n        \"9009988607499516894855419967617891078215141053644838762332408552091459298218235738836401360617336568712397\"\r\n        \"2838007379314935535311449332150300365272142072421910507865927246673247351952415023600273667576940226363301\"\r\n        \"6530964920377056989684886628111989097851316155861987869187828267689030429662476215473756935600868637399013\"\r\n        \"945524368611538824872280748159378906498225093109517847000944357205298729240894317626953125e-246\"},\r\n    {0x1.a74e934210e34p-814, chars_format::scientific, 619,\r\n        \"1.\"\r\n        \"5135575793727129243415548881706639972764602138477489832613301661125525653261291190457252646003879661546406\"\r\n        \"4557235535184255428202266594734780713103215069500727504595579802054769661280199593841908822623154438852886\"\r\n        \"5167219048211633614353037959605771745618174998999740314969772733593311483252794879934591349391924024139119\"\r\n        \"6084831250696806847449720365426721059694382001837632545128601846310630150492094628787281763376199207812883\"\r\n        \"0310281174844229789408905630908727536976405794432973052507474674698762818002597976646771449616515170649132\"\r\n        \"35704712171841032071854384668013379767883698598547603797470628705923445522785186767578125e-245\"},\r\n    {0x1.33f5e315efac6p-813, chars_format::scientific, 619,\r\n        \"2.\"\r\n        \"2022598987138437754955088140950822414079425891031517825754706103180380894029334891007977048969785793187456\"\r\n        \"3628273401003849229027947643460709548320874194553229940197985486063866961467079881830131956202351541355456\"\r\n        \"7537809101283096834013388339700196877232995665517358526772416380714017470163654641203667347296739134840984\"\r\n        \"5462268627991297391371820917998165639554697550184147146843309056835791578191595920503487299426257807906684\"\r\n        \"5040859907941076591375398817610400020832219000691738654346851177693702055925078500930211965695729283618046\"\r\n        \"81928981765720671382877489626197246411346537353463659325569778957287780940532684326171875e-245\"},\r\n    {0x1.218a6c088e0b7p-812, chars_format::scientific, 619,\r\n        \"4.\"\r\n        \"1410759136055035697554355612523273349805779575443516024484433325588504826173501106274906121179378322764594\"\r\n        \"2484379691318093841368847098623863226362751057949455437358357281291709007819852095728818477728142143877797\"\r\n        \"0618618828499284120946242604063906544270123754851472649535798272106982211037305830443951538621938405272895\"\r\n        \"4163702265368813309267001173474115003096471620752013064126070402182426851829272536682605271459261120871427\"\r\n        \"3261395627080752743556294388041183383938489151395241871318175793857142069803602514255759195099358106829389\"\r\n        \"25941403961228692586646991088112498341686942122073789018799061523168347775936126708984375e-245\"},\r\n    {0x1.666ace219c563p-811, chars_format::scientific, 619,\r\n        \"1.\"\r\n        \"0252325908734784187898407846312169662933964451617206135619057870361506177183633250060030678288380992953815\"\r\n        \"3910350720774420252564370061152467229984493300103561343350506499789324794467185732493962094862799214271322\"\r\n        \"0434893279799034506854982649170149103444477505174541550420185719057992592872659016813377466213470076718167\"\r\n        \"1587928184828928855320129149015094685111159435268814365435146233180280512075699541026462959427795332349621\"\r\n        \"6849064667560874431015731716350235234093796641399858007197207265469483871962411812276890490973250357109437\"\r\n        \"40918313124555298228499379304666253435895481214111535361865890081389807164669036865234375e-244\"},\r\n    {0x1.66ca7625d6faap-810, chars_format::scientific, 617,\r\n        \"2.\"\r\n        \"0526028348315092269326491491416671614717274844171552199771340287149629751710490353817825471600522327742276\"\r\n        \"9848566747186724592570603262783159622679618375839605019976045985194702598494093298790453729629386984648069\"\r\n        \"0036876519192087476613750641520994696959915507812672382558594635321159278065876914295340826056875441592600\"\r\n        \"1413614588937378827408562300025096391492039454051283528928602590153392153556731943973383727082855350556933\"\r\n        \"8189950869666550111368368477078616821706475136695480270170795820169174490625031489877623760618366454582967\"\r\n        \"116336156971442918961856394686992446379464696305794380037923474446870386600494384765625e-244\"},\r\n    {0x1.56e3bc6c4d17bp-809, chars_format::scientific, 617,\r\n        \"3.\"\r\n        \"9232668413253934109576315523375410824827635006014532478566376795435761660713281112033855290558209088544095\"\r\n        \"5118644308491937391706798210947879783273508829940864077425555029743665433796448026542881792523707845529392\"\r\n        \"8888040646795226366213825411580640005811347292313508735062094848631128449978823754429190527768902694777788\"\r\n        \"4900217247311196596714046442296568356579966479778682707394799024085491910187918573868394308146580143541149\"\r\n        \"0916677352788480766516306849228406228050468116273820675030593448761271107798128039605500438662893943456546\"\r\n        \"783890712558413724203498532897484191055958980230700117175501873134635388851165771484375e-244\"},\r\n    {0x1.4b39b2c87742ep-808, chars_format::scientific, 615,\r\n        \"7.\"\r\n        \"5796150735595968518238983107483839070003142955986974311581916680225791453486833700764162887478630207856704\"\r\n        \"7822941859480260584365963321876199100372555439312474681875955134391985832190379567800238426220267234842361\"\r\n        \"1239623046545996988440924432526210697817982616974975257322206843303081668533190742330428145605682185623573\"\r\n        \"2670262122379369805524587294726325653350409831517894348004467928232650745530506560430564162969593601708820\"\r\n        \"4593973141345297028237304870101790866929027772577561222369175133237449464221430999208311216033139713942561\"\r\n        \"7718942914363891383632845680383464106053752022684744105163190397433936595916748046875e-244\"},\r\n    {0x1.be40d1e238ed5p-807, chars_format::scientific, 616,\r\n        \"2.\"\r\n        \"0423721499211961109568525534671443647740451225589577776776615350824924185902447511045534069936905640957606\"\r\n        \"5372006706682415988169410761618104420823540344653655850495453161898116740909085283322163797816690426713928\"\r\n        \"0588386591469775611793558909607779568837686913517898927696512373572016048102090271465196837631021566949809\"\r\n        \"3458778713417135141374746058126296881347472422680267110011339066236275056110971927834750821976896185521894\"\r\n        \"2603002734635679430244400522090001984828634799129531569049286075717103643972525011916090411511711638026757\"\r\n        \"89249238420106837535506252866076169083468642463652376051186365657486021518707275390625e-243\"},\r\n    {0x1.40ae59ac6132dp-806, chars_format::scientific, 615,\r\n        \"2.\"\r\n        \"9353293314833333854985102733201521796250036157410578174458181974941681427901748305530776598182206753889861\"\r\n        \"8636371016267800470669357640180721556010164004214645520298136353408719208286540502372077707795876864389123\"\r\n        \"4530987039470184872750427478883560918646684350505130722837863014999727875555215685304086401604276801173120\"\r\n        \"3139790194066844214273369426057653128075479513670720217838142259228046519573053627935149750677307039941356\"\r\n        \"4828147132972855997122201965456703954022412625507350561624510655574143234052851884708200203074614546619619\"\r\n        \"9361830208532545550931607060890187286750154134484791512704759952612221240997314453125e-243\"},\r\n    {0x1.5c161d88eecbcp-805, chars_format::scientific, 612,\r\n        \"6.\"\r\n        \"3723638585700451642795559570510679148094993613910324952290173092838588831267228266631303318254630028045739\"\r\n        \"0407187178061510576300035754372233822499222282961203456720941314976636497138825053868512001918319562376117\"\r\n        \"8503122166819829425566310708112327632839687765866542175513644077648632060395171310907363823836647106858223\"\r\n        \"2777412680176689313447386866112250866307040221174507703114483598510540103447645068390784004440801839078883\"\r\n        \"7194778885429238978252063987403236158204856335435926863891604588752783057832428086623507826775024249195807\"\r\n        \"3955716265349471157901811121367537037413035505561964555454323999583721160888671875e-243\"},\r\n    {0x1.ae3b20e6233fcp-804, chars_format::scientific, 612,\r\n        \"1.\"\r\n        \"5752344142353219450694189702451991296910433408430789019004125131863629296511431154230659503890717620031590\"\r\n        \"1038316721233788818826571623317203349289987417121376686501945841032567911901250552698960793265396245960534\"\r\n        \"7373167055651820451912046546618888153412645242490087251350087576649187699383010638982269418082540884562832\"\r\n        \"7750244082466163980074438483304220415007922943039390750698179386470176966033711270276708288351928574480634\"\r\n        \"6620427578497508169144643312340209721649688496292864219377630628268116030388752066570843025641533813750666\"\r\n        \"1505153630440989474460324611066529306552773392890998138682334683835506439208984375e-242\"},\r\n    {0x1.c895736ef62c5p-803, chars_format::scientific, 613,\r\n        \"3.\"\r\n        \"3434436478293493280593571271178008379632079500385975548283939163497852214879044844517670759497091492926604\"\r\n        \"6301395881911376324184025424812370739165394698174516004668202850196235934904450092005834916657352885854495\"\r\n        \"6797122849756889458856656030089637540017312018075458430375030356712402369619517176293964796597028107692733\"\r\n        \"6877655770322576324057362054878847600831468525556287002358878533444200008041718236056969477827934772656677\"\r\n        \"9815145097506338920779765572188303868670858298304546602128519970722727663497018972024558384033232006396023\"\r\n        \"88217361333368030658835443253281029721128182752298840796356671489775180816650390625e-242\"},\r\n    {0x1.630761913b642p-802, chars_format::scientific, 611,\r\n        \"5.\"\r\n        \"1995664937001350863664258209506916125612045887421035495539968219921552001490404512666597057126511434752881\"\r\n        \"3007435581863058379511824026420279450528771594711743194984119825629737962368975331651816862223263764907329\"\r\n        \"8959845059152436168274836787886410245541432791484117122823236508634176085889592513409849869200565154766887\"\r\n        \"2239050279254533707915364965481634484943025853564537256019007487191319787066437301873020171361092201939838\"\r\n        \"6184775914931861779759491034394263205676462386582564671334894431929147821752438599108003402914657920461899\"\r\n        \"226466173041809225803734159361765368727488489941634952629101462662220001220703125e-242\"},\r\n    {0x1.8907b557208b7p-801, chars_format::scientific, 612,\r\n        \"1.\"\r\n        \"1512226658355749483847981607903749186968456271470668422905514968048682862550587964588422845161815767196734\"\r\n        \"7161381736286682330197784945747956438186532961339942750020185568887387914264273351910759945563214255066684\"\r\n        \"6367743093899226009412278214746750427881209859743419090772304032977787125925338802665415242857226084498164\"\r\n        \"3083102151843503613040369064236192185129466999497241256541067862601025573632294816706426141506628320469477\"\r\n        \"4696736056927673474964247532394453617303703702170832899939996119301381165251917266354496116545457774453945\"\r\n        \"0895523040343609292008370421060948365454650044181761359141091816127300262451171875e-241\"},\r\n    {0x1.0954ea214daecp-800, chars_format::scientific, 609,\r\n        \"1.\"\r\n        \"5543636774561636974984361218111011815787496115988125251761512745799203239114570231530311587628929592941376\"\r\n        \"2585042010727044016847870464502675936376968118423019078639597656703801878013483722710291570262191347684833\"\r\n        \"6805205669043926853377700998806089359780103711297258044030751523125011328665317845898485403235762350467927\"\r\n        \"6134156787944549174068596540770894898876924542106646637655671038405664723034557454476207446791320248290714\"\r\n        \"5008167400683897298836718888410810473704984083888533798729692197933748270991636472806299358418250481774109\"\r\n        \"4771758489864324415337151128538238880998079149975410473416559398174285888671875e-241\"},\r\n    {0x1.5c2fe731927e6p-799, chars_format::scientific, 609,\r\n        \"4.\"\r\n        \"0794930994574949442525316075493436362455473092684438997934986135437654466941332739768956377877473397607134\"\r\n        \"4064958156084532579410087539106327345372818664352247197277361471370030117784789618983207924927651450687711\"\r\n        \"4770356574608290123358451973486669321692492332398543131893173963499548478234080992976620729264092514266793\"\r\n        \"8419538195787260791452711556640767302269532128743048602157910479633566088244594787936712119482747027241365\"\r\n        \"5907401119681985982507921557024707142597573048794208218331141095078100425607731851283402621691247039292834\"\r\n        \"2115674805610333210644028408620173696379207495255059257033281028270721435546875e-241\"},\r\n    {0x1.6ae6c51c6cf43p-798, chars_format::scientific, 609,\r\n        \"8.\"\r\n        \"5037834545028439726511173970387065376495451801221358745541466022111055279447814368476465692501533897808052\"\r\n        \"8414620606538201959175171073351443366751678402386951129508572093685812674971226575682201470239574972506910\"\r\n        \"9128943544677360375146178941605556087049517009816921069940296076289616976017445345589202204019215772204351\"\r\n        \"6311008757552625899436454298892097346319367204313955610412435512953237673867098391988751837296926369447076\"\r\n        \"5727893031773910333948712489912482607284107894642961799688586136148985510389912656105970673902638925743472\"\r\n        \"9720838400566841392990613565908529915098046370047768505173735320568084716796875e-241\"},\r\n    {0x1.ac4e86c315850p-797, chars_format::scientific, 605,\r\n        \"2.\"\r\n        \"0072820595479573216169126231394408838551922619989874786871658199647732697034762028792666015861804714982292\"\r\n        \"2191591154955291378005015587839555531480612063235835347012810772327501856166588209464579572448604508899906\"\r\n        \"1772187223684855162442424175711463772705279180982126416318031074372302865560128825632323317889694497843360\"\r\n        \"7754085808572590924978633945247230403112787302032626015620605415136044530348825415809501368263327044824152\"\r\n        \"4145945455699623696095441521069129226509344118102237809251029986795488661778437540002054621660753197441908\"\r\n        \"343343400344601261991557764803617049109707437537508667446672916412353515625e-240\"},\r\n    {0x1.794bdcb1e5858p-796, chars_format::scientific, 605,\r\n        \"3.\"\r\n        \"5364382089011979980897109687165254886696841520981254446556125956556978294321082019870841710940758511838532\"\r\n        \"4894179439057364357461159517137903474744654629717453375448208774398730333711862007633962738258032417741380\"\r\n        \"0685321115393078264140362224325824070666437344191369939443217492221993668605716208990694526263949725175127\"\r\n        \"2531533913011070118815751448623244063021481460622877756524201582813510487724558551743402584791531847833324\"\r\n        \"3947677512125596726121471095288063842196951847839048568745797565605397830354659437463682786127174530399653\"\r\n        \"052185980142212749148863110471344671503768353204577579163014888763427734375e-240\"},\r\n    {0x1.d14f7ef9a1bacp-795, chars_format::scientific, 605,\r\n        \"8.\"\r\n        \"7228090145957935347248318547742302587087102313285501442514035526226306674555848729098848343284853736028606\"\r\n        \"4873831254928609967322217177874171796955578934465313147402878865039420827565176878567927435477084189200595\"\r\n        \"7806847646599109442906678146695129581406643504246823239271381485582046753531471862258384352222573375498842\"\r\n        \"6169068002044002105223868118456214469943463514242867324395558742911540780602189115030142752959592996857877\"\r\n        \"2273040528807362627380272902106605717316557112560491693041298619232077978968586186803325882819783307168556\"\r\n        \"881297598817001041704706994464233425767840657272245152853429317474365234375e-240\"},\r\n    {0x1.6eb9675837dcfp-794, chars_format::scientific, 607,\r\n        \"1.\"\r\n        \"3749379101340066083857337348176012879302998942040643891959413447462809923213710792385920913367060586620860\"\r\n        \"5258647049621760492047179451844836572119347356991890024090747092362463756927276284737937087463531842640685\"\r\n        \"8110822716901060321069319180330630095350071198454014017603381215347279543191075769849271941472232894509230\"\r\n        \"4179731068530834521111061163476202640787726787899152301887532484498175670012280605395371745814997035811104\"\r\n        \"7972034718728424120220308910285188823533296077514778262102253723563125528563041143324629454753231680542831\"\r\n        \"91572629933059608724961728922265061757224113847541957511566579341888427734375e-239\"},\r\n    {0x1.96e8a42e0e289p-793, chars_format::scientific, 606,\r\n        \"3.\"\r\n        \"0511988184972799383071211924634487175460180935326054116102185981586408321039421266980709352417518315887404\"\r\n        \"5050170880613243376562389933452426086185695180699312804245142060569472810956533457237033496816457196253387\"\r\n        \"8125149465944408270649637103835598442140509946028942888834087818054913127959283097911123015576692191085606\"\r\n        \"8568283496852317230749669582281777159547977023790389787193331339347536950378181463434129630396971207994134\"\r\n        \"9950377993759212633121226292844763708145719324648259205908825462198868419797842376770017948515553052857064\"\r\n        \"7693354807915784314898721093603267857929939310679401387460529804229736328125e-239\"},\r\n    {0x1.9df5b8438b263p-792, chars_format::scientific, 605,\r\n        \"6.\"\r\n        \"2081425746751335610146680295435101859461655681989036586327775217238749061303501735332371382900280575515719\"\r\n        \"4020730148118435599036452088715313932099113134973129083783128920389682715075150575144731203122222001783294\"\r\n        \"9424406905553795591369611573268431281518228057618249401975945890243492974663368994552896023782381782553916\"\r\n        \"5337044719128567721394744671262149404471486748537392698331767276580429963086090235313827296241311355503851\"\r\n        \"7755830887058852014800933522702452536975068231984788501210512796491195164930952739801311157528383120640408\"\r\n        \"842401705946246458190149534645571431645816318223296548239886760711669921875e-239\"},\r\n    {0x1.fb32cf0b36aecp-791, chars_format::scientific, 603,\r\n        \"1.\"\r\n        \"5212878641555802724950846086516145032300326998691190900292301735619031405755263380867819445511072562572943\"\r\n        \"3287593703388535027004430201878462180974444880722937680016604317123047097924707771861156618306166328988807\"\r\n        \"4173424610772542026483506595446813945016920935740824692420808377728446284988055043397756717427418778466960\"\r\n        \"4764984416510689582171300446811130954623811981865739826589607924848307316279607843133793365371483255657291\"\r\n        \"0067339723232808270374427845927610682612753312034224066285259685752517765740312550171970032472135036986863\"\r\n        \"8181213742553728087480359007130879811509061028118594549596309661865234375e-238\"},\r\n    {0x1.a45aba26ad06dp-790, chars_format::scientific, 604,\r\n        \"2.\"\r\n        \"5216166351846410904598804126503919975960206341421556680673122139430839618893068778953528650714452899719345\"\r\n        \"5246108125158739482741680475817985898310280861272177832678069868601568095686217379876046803162010708112630\"\r\n        \"8023604716065459630277834590133356599359591175082540998292572569927744367695512232618054512372669109059329\"\r\n        \"2278734289697568086682228820112428175532506340283777063322011931055911875751981872871842214504360402471002\"\r\n        \"8669711497076549528902364758613574081434795344422816278952670020566267027219316225416939365006958713799490\"\r\n        \"66388752655501946377532357382246670784997633063539979048073291778564453125e-238\"},\r\n    {0x1.76eeea7b33d9bp-789, chars_format::scientific, 603,\r\n        \"4.\"\r\n        \"4982897883519312349700257852074285242839338405891623616075244867023942468017792455826328206218393099579788\"\r\n        \"8538183326678388281543698838695901138016399892101462657564145324397174804795442702076264717572685786596699\"\r\n        \"8309206594117460390492150507731013549139591322588458630372846181251298644962778269180438519777882585752366\"\r\n        \"2061647833682308513660258531274218090943034841110993020477090849934919002278855577982822728887910520508057\"\r\n        \"1309121300301230873906142310636922125841785801395507975381319776355298465790722044417775302439469856484395\"\r\n        \"2193959423860928797599218080852621903797938784919097088277339935302734375e-238\"},\r\n    {0x1.2f72b0932e6c0p-788, chars_format::scientific, 596,\r\n        \"7.\"\r\n        \"2812801441645303966418732522860605234446781581701162951874702445421625014697873257721100247133280933337547\"\r\n        \"4632822147569730372734556192651075193509364068638545045433634662479604972014032304625118712264784753862330\"\r\n        \"4240701146998515213155895112699926325225487803168318982122886793550787654412114711135260065548158754163814\"\r\n        \"6267792175300075972880320531815842324890334392814926595009128071211433776121950591682377947812052908478752\"\r\n        \"3782045399878957499545795346063587985477731111479849521556134883351589450597232837336115964779975403775359\"\r\n        \"793941134875836977710206014691163289853648166172206401824951171875e-238\"},\r\n    {0x1.a51a411cbcd83p-787, chars_format::scientific, 602,\r\n        \"2.\"\r\n        \"0208837171448895837318180903259214725922207568227959012108677599688049530743023941864936723736235817948008\"\r\n        \"2611403427798946547661988139742169620596220391493753722071403821592772010242534186589497286966518076494362\"\r\n        \"0678420736321907710661911556894381850108346506265630319767913919399030191431965110937831030511219504532874\"\r\n        \"0586466146512917773158338656319118663906595686588537648936843031647093427657363683641219540298646042122056\"\r\n        \"8317426577038520940327301670924988866127770057169548924829741512502567293851452818399420681877823748179849\"\r\n        \"398737440333262050279769937353134545698907231781049631536006927490234375e-237\"},\r\n    {0x1.b808810bff5aep-786, chars_format::scientific, 600,\r\n        \"4.\"\r\n        \"2234650668214423350279081718143018052918828845233278512008791451987305685594591145976330970127359480860248\"\r\n        \"8548917264315584433512455554684826100034965613524346519252961698792900476189960718557697298950778181410013\"\r\n        \"9640228026095584871810289683508239794468996786987719366315242777184998255799306920272281717213927883238578\"\r\n        \"8203065386664239152516789871769170789609239941892434305575451880664013613320226313501911783489649376683084\"\r\n        \"8714814724615946149072474408582468575754684669730712413191753420272477919667200484972631788609536129952239\"\r\n        \"2188637733793856554789030127543270065615388375590555369853973388671875e-237\"},\r\n    {0x1.a522225f95f46p-785, chars_format::scientific, 599,\r\n        \"8.\"\r\n        \"0841257435956645678547405463747941035254532491290665291476902755342035620999121915876359426286744536442548\"\r\n        \"8791455796027552732952087071822418098846022103639505489312321900912629868532623475135095009363265921031875\"\r\n        \"1871079021611411332741033775270408893701977185246154640873852536013091269615317189935301688316595497628363\"\r\n        \"2052474049117604877290387290489379052271964810487511690636116959829601543260594988729338797802211604439634\"\r\n        \"9881544511737095144068929116901090243016127270909040329117435763031291331734916897008832721886597106496144\"\r\n        \"499841505379496532267678712661840290110148998792283236980438232421875e-237\"},\r\n    {0x1.b3dbd2256d4fap-784, chars_format::scientific, 599,\r\n        \"1.\"\r\n        \"6733590187416606942028788295822734147043087946233607968651016945006043063743409956982922605165150262493695\"\r\n        \"2359551337435141043924366256262954714703084104196403532472922571050719624290744697858239688419404203520754\"\r\n        \"7557916850717553492842057781744688693737608928952458431646709318550288396484391157776279484004370212297762\"\r\n        \"2085741279270737213198962173572325958013463853117760877665013868039714619089151048393695975458000098063344\"\r\n        \"6858750098421368476749851793586866701372231665192694279106769119933450898417201549643514656077765935283060\"\r\n        \"136103656512062492185832101622422474207496634335257112979888916015625e-236\"},\r\n    {0x1.6578a562dfd81p-783, chars_format::scientific, 599,\r\n        \"2.\"\r\n        \"7448244739455369599852949492552923507948333818208197008468158129083810159695483256360269175415015466412031\"\r\n        \"4225695400387005807802038517353586335988207343902959393348397621769684884913575361723052144412545323525101\"\r\n        \"2843207362623477900893247213636680781392280455803632115282785593332780520340251878255628655632838690511799\"\r\n        \"8586350085644107340826449520555370615285390114023939058381308345313892978294651712108011038387663767010617\"\r\n        \"3438419253507596733224476414075014265345891995296496120856593048414341827141680276415523884377632032961134\"\r\n        \"065066676791255166649173319499965817414022239972837269306182861328125e-236\"},\r\n    {0x1.c375b704d8354p-782, chars_format::scientific, 596,\r\n        \"6.\"\r\n        \"9330212812845955601973051705409859820189947914406991516234621867700438780635584678642245240229377264515669\"\r\n        \"7338726349371873983367424350097381613788724747210201244748437625890393184241908098354893458187915104119341\"\r\n        \"7684465460693231943222252870968475205589194276287015578056177004092191366508966567650334814489885848490942\"\r\n        \"6122870870673228226689067501074893767746717599791972139895758896137999486120056433350900790851566486391753\"\r\n        \"4010543666617786469916707237836024118874742072934775462928779342329475149180326686989774048800335725396492\"\r\n        \"694612182396772755548224227706288758099617552943527698516845703125e-236\"},\r\n    {0x1.41ed65ec296ccp-781, chars_format::scientific, 595,\r\n        \"9.\"\r\n        \"8876088484049352922774021202980270628015087562012427292778038682091273168220811432033616289760109002310402\"\r\n        \"3704996008069111083741196140661388861826358577996302406407082910484532702903501127304650131518239172470834\"\r\n        \"2834373731353510858807009428849017497972201623850366494027130268394546556252337263922088889702844419759589\"\r\n        \"9063387263573871573732612758260782869758009494263629328008981472261588690396371322017572369585846209902633\"\r\n        \"9510542868187895386861625212297072254733429651534552220213138019454443987615077904499633483996281342741497\"\r\n        \"11127064592991748928608140845053497969274758361279964447021484375e-236\"},\r\n    {0x1.2750c8cb09651p-780, chars_format::scientific, 597,\r\n        \"1.\"\r\n        \"8140520866375597592817140173198328456153471086515443891947301419067427016349814663252643281827753782214000\"\r\n        \"4306072580093724492340899978941054679924199470836173279701306416204849855804566293231708048363754246665689\"\r\n        \"7132773851376950137481730406496137930367940298307822959184929691157149248171962689707484240913709878645248\"\r\n        \"7651516170928175691609460578402568818237797997967259089571151773860066324450511535569895183000043741984628\"\r\n        \"5606114661392523948868455531855100625018508153569679961738521387114799227459274565213553967286187012847908\"\r\n        \"5175141572936063038323285280528640583952437737025320529937744140625e-235\"},\r\n    {0x1.19ea333f13ef5p-779, chars_format::scientific, 596,\r\n        \"3.\"\r\n        \"4634694166405885699722665996156819190835305157939379082230431113198584814406142159489506709243038109913804\"\r\n        \"8087091839156277339696816832118015570005868291208987392092241756886550999683176589757786184600708233295992\"\r\n        \"9104748617248162737955257920342448513168770535182891455893675197708497078872366516469116334460618374815662\"\r\n        \"6215995971472457141964876831499902261701806293373256835816802621390185355511566406092215783275965392566585\"\r\n        \"8442737716827116543576353841785651389340117531460235593391101203276419598915973745824201798081334576050870\"\r\n        \"430956021545159155021671205931799164545736857689917087554931640625e-235\"},\r\n    {0x1.a38c43ff3364dp-778, chars_format::scientific, 596,\r\n        \"1.\"\r\n        \"0308725436052673004078265535849362842941462603767068009055817328335165518994401933172454910493217867696432\"\r\n        \"1845962716686314874470651933591385894469274918631064185075059486235684207315610254821040680581793107781394\"\r\n        \"6746960625748974345607263573914820643627389442572446655908256314652737333336207566756390293322256348701247\"\r\n        \"9314565117858212385111597451728156265292208695902500402336262572667655661806388175890193990786445710715532\"\r\n        \"6444270656212874978801400697046881563390089872226946501545033080160837709416037693167240629952771552441667\"\r\n        \"361465182176428352680002016594773550650643301196396350860595703125e-234\"},\r\n    {0x1.0b0ad1b956d83p-777, chars_format::scientific, 595,\r\n        \"1.\"\r\n        \"3123008280909585060094739769474378460538866107048392129824696126606516279205972547670492262550710764284363\"\r\n        \"3234354641682526072825042161215500583864172196389183875957416010067398215922042534330073715044124724096640\"\r\n        \"6740630337183260137195168587876580824443134710976924007017901504245366920570333649552524608892742277095894\"\r\n        \"2579696379671576766979558709660405125643620837514272390698664170189566381311138897213106203693198480966230\"\r\n        \"9746683046481084817065834830049684480464548077598539532315246634601937680515282851307846303670734268112421\"\r\n        \"64361861337955626193876000618043775602927780710160732269287109375e-234\"},\r\n    {0x1.8a159b1e99b88p-776, chars_format::scientific, 591,\r\n        \"3.\"\r\n        \"8732242378153897318097485186350960300031186584656562863006373476206011523682262557811183503862971612833114\"\r\n        \"6916417461255020728803411155740943257717511092693240971786080135296087495134091242375838374168505261130380\"\r\n        \"0492598166723089782339674226277801628972688152897218578189493489170331295747560535252056117984854618682523\"\r\n        \"9305131571924373146542287418567990354344016310437205184558983660529561615320898762527140916102609030211008\"\r\n        \"2103832765594531080012430285923201547172290131441715644938740240491425394877727279661634375115396176587234\"\r\n        \"0989930831780784230462810757700253816437907516956329345703125e-234\"},\r\n    {0x1.d415deff614c1p-775, chars_format::scientific, 593,\r\n        \"9.\"\r\n        \"2010739647813000085411005568727105998799066899037448965302675135776884816654819628173659937259171048554565\"\r\n        \"9299792147126593896231306003331909077948383910755151878314000991105111186376426687047583016174605352766814\"\r\n        \"8534331818246298245816068105997048536931836094343752160045427531551482079866068037732986220746545492963890\"\r\n        \"1238271162895703777874458709089484490860087292013612010824285906041126662575922290223290517197672726442811\"\r\n        \"0290759243860558664957215585129480394134876729038989456780357462903511930632723604504410411901707601194771\"\r\n        \"524410246628913870770190286396683632119675166904926300048828125e-234\"},\r\n    {0x1.310bd967f9a00p-774, chars_format::scientific, 584,\r\n        \"1.\"\r\n        \"1992483584063613937396382002898619029819538686188191051376468587418398044923819788257981810312450970237429\"\r\n        \"3152236901426529753933885926217522939375787436168025095420854421089105328643012783084193445775178532627019\"\r\n        \"3002021288587642607408488965662669916337673223002264510994634236841840933737724623832016553236992028678401\"\r\n        \"5079222380268705401143575325058869567756026714067386945351235295748404808174268116051793510048341986101843\"\r\n        \"5189240188373810482122213082644041469933620211270257379648322982766563842384538563467443736569589192277871\"\r\n        \"478824920734897185869982649819576181471347808837890625e-233\"},\r\n    {0x1.2a478a0b632c4p-773, chars_format::scientific, 590,\r\n        \"2.\"\r\n        \"3452909097606002102998388857387398320146582515932569159622941748507502071602816219003857791914292766210287\"\r\n        \"1282920701702839101779318975472524788417303881315933266593759151136812057701602281728908118286422653068981\"\r\n        \"2976721417530770069277611318604358776733743161458118453496278452601803441503553632201747451899227732879279\"\r\n        \"3939383070761065446832297352683219271773789038387084150729566669981216349132935276369359294821930391936873\"\r\n        \"0207897372104156558695370518639326240457297236641350456607151007096954463810541500796919853141331376838730\"\r\n        \"027058339967416700395930195810478835483081638813018798828125e-233\"},\r\n    {0x1.a10d1c936f397p-772, chars_format::scientific, 591,\r\n        \"6.\"\r\n        \"5583225953784304043954834614176088194295405940341601198073153875988601237261704379055993336597678819170772\"\r\n        \"5308732928182976190209935831121926799822295206356039751458151538698202210999800319499370069053119068921318\"\r\n        \"6495513705997548419470722568105046316621424908719955943222521965922140810646651477916277542996197210024407\"\r\n        \"8354448201804009172919086425145196331932267229375638726444077959998629259488107236621956571918999810323974\"\r\n        \"8735717531246698300106404621320272068687120569178549223991517121489275313276613889947072468874020996202783\"\r\n        \"3578890959869765026578336541973612838773988187313079833984375e-233\"},\r\n    {0x1.4135d56a1a3e2p-771, chars_format::scientific, 590,\r\n        \"1.\"\r\n        \"0102359616097600006944043696266304310402566123880381330525868678360586417700284313711997697393207834996490\"\r\n        \"6412477557422038262981083901801238882772015066331526420346388047508965204935499624567755681398845856171526\"\r\n        \"2242364880332481311367223365533330138935433511898794179657484124403659524277293102547115573188942514605904\"\r\n        \"1262737288899085376795178896977519105000739053421097877918031437721663292284423338700565418149569030815098\"\r\n        \"1976897643794990537239534181469858547742793045584048036497046009670011336379378447273760163550393934817516\"\r\n        \"023051483276085451591674857496627737418748438358306884765625e-232\"},\r\n    {0x1.9ceaa4e0f9a65p-770, chars_format::scientific, 590,\r\n        \"2.\"\r\n        \"5973213970621353044824545188200592183419042385639727292053562666249675544942691912517025505947140109121201\"\r\n        \"8691791676589598304859963199178052096220362044453690802401185643378067015831822620192178219791939757230914\"\r\n        \"9709039667116952289847151837424216761341021681339723578337857881286638542378091891939886703814853841423404\"\r\n        \"3498297625474216866415185214871267451369155514201746224365590408487372081525980706478638859040170095365664\"\r\n        \"0645570094281836888650858982474863060907436892730671482497330980571409299449161530863472389822545360807847\"\r\n        \"278223954502168854992227853273334403638727962970733642578125e-232\"},\r\n    {0x1.89f20e3a83371p-769, chars_format::scientific, 589,\r\n        \"4.\"\r\n        \"9559800065235153489796410194161390966488355617585666542707339136900558711218785557363856112303748107913099\"\r\n        \"8680237278243350843537532200899336534061998689022480144868594550956871874227163881895319963658374522051904\"\r\n        \"6712966152320510867618543585720024531194940872820672919233356870518352801434898546241842045716492357747647\"\r\n        \"7957958540068442712132045749702481116171119884122838963976902383703248102452023124430340570652009799204816\"\r\n        \"5249261523263392714849956402443956398232588164511714409814006544850650200925905726503033287699786574183111\"\r\n        \"98129755525915792098434753398805696633644402027130126953125e-232\"},\r\n    {0x1.bee6d84bb634dp-768, chars_format::scientific, 589,\r\n        \"1.\"\r\n        \"1244377262803143878068016423688012596039718894748761522693123703181634130104650640135262083103846749672518\"\r\n        \"8012492495381704764285966084753488065021470092208542183182084032595971810165044465057115424454465191892043\"\r\n        \"3359242751160280842713632780774054505432019612624878172464734301273167678163431120242405621415824776126460\"\r\n        \"8947838926595118197402289470545118797483097395936263215464251151336740856339180880724959346882809972866164\"\r\n        \"2692633775304002961981768923100643096019801742272879022489813178847770417859840592829885544529002381973852\"\r\n        \"04296812693280688440211623202458213199861347675323486328125e-231\"},\r\n    {0x1.deb403c7e96ebp-767, chars_format::scientific, 588,\r\n        \"2.\"\r\n        \"4089050126555282541403121147937146640322688813110950873494165256577427141764900209847715481143046869400508\"\r\n        \"7142706729187182868489888726631219010556346470377235782761231255161283491871481571830171798317313191456617\"\r\n        \"4309783228992987395309874214938085167780197703713450058388341555810443906059468275497970709180486706718587\"\r\n        \"1313640308216356155999604435917605136780020449205792873192769293405985822537229012759146679613240165097560\"\r\n        \"5210869334907295625604149011565843196894122999061870059481852780220056624802519719890268394327365072648952\"\r\n        \"0827818495221097315484026779586201882921159267425537109375e-231\"},\r\n    {0x1.3d89cf65433a8p-766, chars_format::scientific, 584,\r\n        \"3.\"\r\n        \"1957993198054625725213645741173162786935684857677527438090979500370647810397958920480824463940923329563437\"\r\n        \"3636851774003368423771672117121283918964674083790880004924598131903193790947820607391613617716363350605791\"\r\n        \"5622232960627326392860115950940947029579098561357097854414116991950975007688070342833923998116760516870121\"\r\n        \"5749176970374592880103567554395837929673462006697904438147786695003031463211995666528121763991142543575975\"\r\n        \"5899718471093397427400766264709037449493655219279456023568676329258618536362702872759367963005063148812537\"\r\n        \"726423102708329937460263181492337025701999664306640625e-231\"},\r\n    {0x1.3cfba273e39aap-765, chars_format::scientific, 585,\r\n        \"6.\"\r\n        \"3804197587403760326652898054200801828323214780442215032022007620478359597818401693284013081678136665027405\"\r\n        \"6490197573287853590724100179977990824731156430940900293657954999782897120810644701128329076885474982261315\"\r\n        \"2004534567980240484852566346849092151908799371287257255382445454735215000987503928361640304537884889342864\"\r\n        \"3145781279385770628277566694325711581556041680649755580831709124446178875091795627785989583994623827758905\"\r\n        \"8753937000671860615795959039778377116606289273494321908010815730672333507357816874258583488584279492533715\"\r\n        \"5136765021905438655114295443127048201858997344970703125e-231\"},\r\n    {0x1.8fd3a095fbb3bp-764, chars_format::scientific, 586,\r\n        \"1.\"\r\n        \"6095894110621704153832201294055971532390391615911012418102173691565843809408450333609669585716893417322632\"\r\n        \"1447397301047417148502624258582835574723816240415594393369665164751768647196218708742592134423663760259422\"\r\n        \"5725582449224662605981402620585333275787021731573507809506478128418455212296523148679126266426699652401165\"\r\n        \"5347686788983136076956554273893939557385379020373453645222044106667326598338033048058315587381156417693815\"\r\n        \"9689442060769621685872330312916464823415664426762643483429352265211453025979662093409239736334483968002895\"\r\n        \"34637228014489311600510035304978373460471630096435546875e-230\"},\r\n    {0x1.f4db39b3ecc94p-763, chars_format::scientific, 583,\r\n        \"4.\"\r\n        \"0326128219471308776340774632801968730422798127085717909547582642722780609987155279615390281066933947805844\"\r\n        \"2834132325348297619070203917114895484113342497422436622422171014950377706618395303383927177010501146744877\"\r\n        \"5538953564225445443359521685452770061497047825649312653532071752631734104992995726313037715144741959667621\"\r\n        \"3378577557632829154543778635778400664844147650126586480978710722699215601770032193691389861493527186292410\"\r\n        \"0599178352375439954606326097129388309765290899844628674147158970800023347955167381151032697590479982052777\"\r\n        \"90672589771116263168693194529623724520206451416015625e-230\"},\r\n    {0x1.77036a5ea0238p-762, chars_format::scientific, 581,\r\n        \"6.\"\r\n        \"0387918131443855293985504488455915724451292685267014767829849073500412060744954585531063673030529339395152\"\r\n        \"3888733562888957496230925242955930292779412423416985599139667873737076545274846108104562187768695151949854\"\r\n        \"5128012141933364974487522376491162699773763210995107076549084989195346688616058796160233927611226734207770\"\r\n        \"1687069702978155674956635793332657387620943979787993513510686776554055594710429194494938662706250339068265\"\r\n        \"9995039549772250462149515137830868639868155808286646814645933763259664624485459438133730144593675207962419\"\r\n        \"919759523671831669133780451375059783458709716796875e-230\"},\r\n    {0x1.16a7ee18d63d3p-761, chars_format::scientific, 583,\r\n        \"8.\"\r\n        \"9743230112456742542899279796268272934437787928293448086298107077647616276508988954791659580428804464479810\"\r\n        \"3641898249421376652724137290600459136448447242365922273624432734917290803189814744215370570273183759401554\"\r\n        \"4794593860976939114279110402292024483236793330618757059821482848520627476373652688290899567926159549042944\"\r\n        \"6328543904775889245889306222564992234900589838102861964399884580694207148624055586974244583117165245055477\"\r\n        \"2427198667133558451445735864240418102343992211275762410613327206706574095487836196314795231910512044608674\"\r\n        \"78785766697922665624531646244577132165431976318359375e-230\"},\r\n    {0x1.23d8446ff655fp-760, chars_format::scientific, 583,\r\n        \"1.\"\r\n        \"8798157375327937836177365552311551722298566992689137495408401180064460810275669557368262486050476535706822\"\r\n        \"2914315437284620215942901943604543564464950435141155358461881045086110693670535222743758425687312773016464\"\r\n        \"8403232716340427184106949371967480783761089412133835752241924595873877701261614154333943909110324386106585\"\r\n        \"7106392044433133552798988180692705602297018211749323498943970494194463977408110252138958916967143497719195\"\r\n        \"2134646702290784545105260132872002148565751843028231690655926702860817601062025257596703145147603743783651\"\r\n        \"26359435670864994616380272418609820306301116943359375e-229\"},\r\n    {0x1.d9ab918404aeap-759, chars_format::scientific, 581,\r\n        \"6.\"\r\n        \"1019603119906394823703359893419041043488928668777127321609779602295957755846206771587439667498191607870127\"\r\n        \"3188407787323422531248450139973168123277344462820437889744367034040516526005744130783797920887934326880891\"\r\n        \"0151822705828875469292565269036546147893915456863015857572909063802064779293512026308928862177518529874001\"\r\n        \"7449142693550088732619227748522352368557175278481264314118546468989352818488963814913806525070024091423038\"\r\n        \"4912650786353791658298950508324864755779932694843174445480821573854098041924252035624281216732196095488604\"\r\n        \"104431604353842022447906856541521847248077392578125e-229\"},\r\n    {0x1.b79a4312f9cb4p-758, chars_format::scientific, 580,\r\n        \"1.\"\r\n        \"1326182622927227585026998401953453564387331526632995841434572566012270184131360172862035269820314552997461\"\r\n        \"2413776329453373615156209188225602299611703931307655537572480430140533142776043280046186005695400263226405\"\r\n        \"4098695658992751763639680664807306814276096257291132541721885536638354061211829923923336184608179768249661\"\r\n        \"5655564150929904808543900488190715743181006200383902980812754628242850109644997858821492841688957682488157\"\r\n        \"0801892773888859331879713604531979736514527913407419982887313114056184858415168691653101367251865741739853\"\r\n        \"26892508292140337999853727524168789386749267578125e-228\"},\r\n    {0x1.0546601b642e2p-757, chars_format::scientific, 580,\r\n        \"1.\"\r\n        \"3463284210193605937745722937725857242949709999335060039840423204785367847390302267195263556416334323998196\"\r\n        \"0737824736070186305672691183645646002343666546236439493821527304306900177800654130523476951053665910754980\"\r\n        \"2006642369582270152401156269927147775627734652327692830564639498543071813945773867021650033486926053374860\"\r\n        \"7064447801305583373185311623132192011604915251465977752968767098478902675252505947952937650369501082058516\"\r\n        \"7696604253619444550313473087062527883887885241945951106616373139101667498193153482586796890932764432009382\"\r\n        \"89032121165933464368436034419573843479156494140625e-228\"},\r\n    {0x1.e06b693958e4cp-756, chars_format::scientific, 578,\r\n        \"4.\"\r\n        \"9511263202511957641512399699829602641557623549736408253556822425590975395266427611114962041653194091053383\"\r\n        \"3336879775284591319617332462680755701831085768322962567258389848441961989693426878116735587887408259374359\"\r\n        \"2329287169456729011123175424958580526996189794057792610262538257537982706974488840316535755315962922121208\"\r\n        \"2104534907468772395489064614074689875744296450508670594617851315848483996401206801717130288469826373770474\"\r\n        \"1070405506427014217576152560575005033081034199467103000860613468937483063135363487535101835560640066559693\"\r\n        \"432397641632558560331744956783950328826904296875e-228\"},\r\n    {0x1.9b121164ff8f2p-755, chars_format::scientific, 578,\r\n        \"8.\"\r\n        \"4728535909856012410200041906372414632296215272648004484427766845608477344705431493395232423944742460409199\"\r\n        \"0778223620807142394934542575683530467976285196904925993313206910110734535883670650682654077675051720555490\"\r\n        \"7153785753112902611247022137719954694936492237768465584405476424134983268359229541767595642143658069865886\"\r\n        \"8311486350995177436653307794720582217765353864645824269735870431707954815959499644615997063996698543462258\"\r\n        \"7493782430960216741916190622401646187797991212327006779815878528741174104469600086982166560311473505952658\"\r\n        \"790405830624425931318910443224012851715087890625e-228\"},\r\n    {0x1.33c105a132a50p-754, chars_format::scientific, 575,\r\n        \"1.\"\r\n        \"2686651186489640418613729090000624883664125727826691528539824897946273278972673662123556913679663178920818\"\r\n        \"9983431026863877108668219641584809556168837216776958126517591068005717065263272298248242603898184394956661\"\r\n        \"2935545218642071817145322217521025560041269146239403948013671611970850556013445928964207740870533157257423\"\r\n        \"5474192624851323842879640005145189256370467851069614167518680883900253222756097604564947196666302205472963\"\r\n        \"5272862815877076419614503481104276280881883230397522547283862747567583163122464808826042178125167560452464\"\r\n        \"976701592025420950449188239872455596923828125e-227\"},\r\n    {0x1.461881a63a0b1p-753, chars_format::scientific, 578,\r\n        \"2.\"\r\n        \"6885518067927030135600540861707655056802159939373748083541390174722386534014508552498653876610051009906744\"\r\n        \"5588072524415445950949218647103736177038525626564873722274278821070632004195312288860329438863021795170526\"\r\n        \"0348488305643570712966829103828184920483901645182663652301170189091428704104767787904483000287380436224672\"\r\n        \"1781438144108851865293957093901180296561836196437647790186463949972800429878337528313848596170010590760822\"\r\n        \"4914495063158132615052678462862682436495900588406487060191263024372546385805536617848116566363084955103460\"\r\n        \"608268235720874628214005497284233570098876953125e-227\"},\r\n    {0x1.0c2407710943ep-752, chars_format::scientific, 576,\r\n        \"4.\"\r\n        \"4214640337505111554944922904823248343623564594516449176929291697505388608995390558125712875479191233524058\"\r\n        \"6693816810894915724128757425416511778571176251130211532941252220691325000829704363646059477032385920079354\"\r\n        \"4962681567393060012625739634735505971763236487302996987119743532149729213667588530593927826040852059927106\"\r\n        \"1340719831810161934489555283359505257515360447477172801213945337256578391537827633397957645917471387846426\"\r\n        \"1200380015132547253153164479656660812754868324751497403180618654707083628746868296897020739943514195984012\"\r\n        \"2704954168408875148088554851710796356201171875e-227\"},\r\n    {0x1.f4741e5e15139p-751, chars_format::scientific, 577,\r\n        \"1.\"\r\n        \"6504299596692554662898438315568742680263082991056883014480508018205961615940064061679191491165679723425025\"\r\n        \"2863380902661161947391420357522669511001475560313481087440258851257182689933724644529724655327662646988233\"\r\n        \"6762161281034853480590013149229622340795138373021923715805777359887470617461808606384004424205619224951313\"\r\n        \"3466820813188574640339167232416711196939091660364895317573753947157950137937372932611869784085126390992185\"\r\n        \"6882812206410494132708440516194191677950453419818231956956927305302147631427349917441266753329544669595973\"\r\n        \"13317938127585904339866829104721546173095703125e-226\"},\r\n    {0x1.5b320400f0d98p-750, chars_format::scientific, 573,\r\n        \"2.\"\r\n        \"2900091426989979358392530605461785016759482015004950433915892907133250152886447840948978235687269889320859\"\r\n        \"8011555329351538993695790173998143655914545077937899287779003767388246713422999451873399075196857287901623\"\r\n        \"2254708606129229326286431030847922256382404862982847219322903060522246908430848008821265886585966924413435\"\r\n        \"6907554414094347760036636740432338875043535463497813544269468938114827178091505465716734212496341311036397\"\r\n        \"3407460982512641208562604885921079704974941535175270523473393712114776663146839494306211123926383134927762\"\r\n        \"3049276453315314938663505017757415771484375e-226\"},\r\n    {0x1.366f1ad138336p-749, chars_format::scientific, 574,\r\n        \"4.\"\r\n        \"0950816688862851715741981716510555491131806923753079625646873200101011841833105563713915712920089627877338\"\r\n        \"6672732937467202519119479522480723407795353914204905417959638564763550732026709549946750372655366146768751\"\r\n        \"8465985902038355614934756776928998890897769920782971767051608290557297810235286435333791164042348138624570\"\r\n        \"9046496381294842944373805881307325210054336683711946102589264968227908777678781740079297949761856941279514\"\r\n        \"4701597319058829218721200150253909999303678357294756834116509540473774653285708580012040678220305249095247\"\r\n        \"55276801766257221970590762794017791748046875e-226\"},\r\n    {0x1.b68e4ea5cf6b2p-748, chars_format::scientific, 574,\r\n        \"1.\"\r\n        \"1570396019147199951614746811927139404489382923242367733464441788630888078074734225096038097286016984649018\"\r\n        \"1257751514645035556156464040606586912645807541608011134962746741848405681341004188686066346084883838015448\"\r\n        \"7709392372278436106894714725168488891402256613958895568185934523280803785025487945761033682602426807961772\"\r\n        \"9904564830592280904276028380829012893805188297596888949701179576800381646868176872342258629059497492830636\"\r\n        \"3044703711795299868868306207209032360457765193935610352982502060997012346564833664746548695777890303893988\"\r\n        \"73717443638753366030869074165821075439453125e-225\"},\r\n    {0x1.5954dfa1e8cfbp-747, chars_format::scientific, 574,\r\n        \"1.\"\r\n        \"8221726162720878219391559104158395374959669147213245613503896745402028338069685891693215118247249574470577\"\r\n        \"5773632834069059255893405040677506968723179290673586481906516623729639441266599175307316096622687835586709\"\r\n        \"2618728864713924727177719872204601194021364444558707639237904893406100689615370860293434227131712148405798\"\r\n        \"9380802416798615537137977507699992247403662018950839836603506336485592101596794523530482290152376909489707\"\r\n        \"0300591877272350060504222949064487781676187937692524103140075795400513362329702290145224825379126327590939\"\r\n        \"69035679716483855372644029557704925537109375e-225\"},\r\n    {0x1.63b19116eb98bp-746, chars_format::scientific, 573,\r\n        \"3.\"\r\n        \"7536981380660995920317409206965536403197907919708438483243207276046259780782636795750670960498823863331556\"\r\n        \"4361973497515074649074065367912595029978418187255189561165849485222600093847343956329389558975557559433994\"\r\n        \"5426797526359625422480751140301019400455902701141973071402070186685863946369415699476975609655342242607715\"\r\n        \"4175594829868582239458210962130867456517266283551635612083202636192488879561782024006010046525100412652755\"\r\n        \"5170158684805557278505285667702165065594214305077880047427292259582451470534124011087495426670029856086065\"\r\n        \"4499549138307656903634779155254364013671875e-225\"},\r\n    {0x1.5ee917be76e59p-745, chars_format::scientific, 572,\r\n        \"7.\"\r\n        \"4064424298983799758409921962326965702801554143551704944707467008311784842257503029702562542519306298330314\"\r\n        \"1981194326469369362196400053024258377938098669978555830397634582317243369415958205231282129633947664312153\"\r\n        \"1976378191602362283805188798654196420950991548470132438346982289817929616927653810036882833861429456852197\"\r\n        \"0713465987069320473011773610399506362043394265338556489274108520861453579183080406614208415614734431946343\"\r\n        \"5152942179725876432292383499756386727340433786992675333060737024142305637908247415113277343120253686591211\"\r\n        \"890466457390402865712530910968780517578125e-225\"},\r\n    {0x1.6a83518d3d07bp-744, chars_format::scientific, 572,\r\n        \"1.\"\r\n        \"5302655517853281865519088036641672349453364010152362760912937487442751067960308155681513204043060353114011\"\r\n        \"9169719954301232130009138770629329047623431367136583488292739563960649306317491883315147232877811185355163\"\r\n        \"8370183466073023350414179430653267818383940598863187341144619169938988058504946188990166111689037141174841\"\r\n        \"9049310873563085132522363302203246396131818560894282203919762752828801213801660943168347443587721221760182\"\r\n        \"4120899083102402432899611516052729144447370268452974713939382192826509551728150820699522893409931803161412\"\r\n        \"415537068199000714230351150035858154296875e-224\"},\r\n    {0x1.82e119223c726p-743, chars_format::scientific, 570,\r\n        \"3.\"\r\n        \"2662448520856141582359969116197647314758219008736296797176525214401520867340405444019626396002597772252866\"\r\n        \"3186968836682916017000501882086507974134707585824404879354484989379169992763394149298116714053649735117003\"\r\n        \"4620473951673976632347333736927399827635100863212403303690831363747883357719095736646178466990610801108914\"\r\n        \"5100688546861344607708883052424869986261801888046350637846415147864801751679914776550653014890427156042126\"\r\n        \"5143357707928115720602473152213992952494569908513824173282587811025445448262815293110163847537687712297826\"\r\n        \"2757424516848914208821952342987060546875e-224\"},\r\n    {0x1.9511005e0a3dfp-742, chars_format::scientific, 570,\r\n        \"6.\"\r\n        \"8395808072043960437946888615913144022818684597480409139416604854902806048015891947817642973494886224589391\"\r\n        \"7947413915725902749084228620358340824715778220783690279558522472606442707272495233483210036215958136787138\"\r\n        \"4747045125219246721474379386766703417334122219654531636577160208810229335271405672744950103125127528872400\"\r\n        \"9435300708255534437191306099867781740609566530007646264293977991206060866325869748017718453607135207160818\"\r\n        \"6568842594609317420574039197696219126111789580806886704377222403255162694449756479070580400807826281677544\"\r\n        \"8607042875437400653026998043060302734375e-224\"},\r\n    {0x1.576318beef5dap-741, chars_format::scientific, 569,\r\n        \"1.\"\r\n        \"1596240640257126022580763758808333956544914575696812877152686057979427423806170124631043143735351202411969\"\r\n        \"4363662457652244105630058142241979306591818240376577457661966478951484782536939435778999430258151174735559\"\r\n        \"5089966426087501178358421511195473450370805053307045519754477962046904488712634815387123346504771003022944\"\r\n        \"2722753411960100534791965680527445943153570370446261605271101412760296271908054669579741086604944255251851\"\r\n        \"3374006349826604238537903375962608496582299588287827376733567575702244649391501104268570722067296520471808\"\r\n        \"840557770281520788557827472686767578125e-223\"},\r\n    {0x1.3c835681df4d7p-740, chars_format::scientific, 569,\r\n        \"2.\"\r\n        \"1377398290102081642547105998237554930329666933658618760594961639445573510652955157391280972437083853672039\"\r\n        \"8540998941814233984546474450984876341146695082690204736204153091292361713610538283246285375156970891488936\"\r\n        \"4657721411115003246578851078377498053405000389321952672989234337447900215597922146055742073876247357396257\"\r\n        \"9358521690424567183406689386488112127694739315104861479151904980569027263874934181377723991907538689472357\"\r\n        \"1747205612378221487781918539268552325445912516413672019263037175191424832565863233869284296762895038863071\"\r\n        \"250911929155336110852658748626708984375e-223\"},\r\n    {0x1.7d9de55918ba2p-739, chars_format::scientific, 567,\r\n        \"5.\"\r\n        \"1549054346354190045728099178612284242864048592546973638605764909752084453816898814444030014754736745717415\"\r\n        \"3939513681086581225782028757920689989789619947673798544076608371701340543491069008762335362774759252282519\"\r\n        \"9064650634747881447163611830016466349492795111878424263081300113733758864911137921755019812391457219469952\"\r\n        \"2018826787081963786228915530507044987879833529533084057706702139312734830970335891638672616232082242460176\"\r\n        \"6946182748458144665440232215693253443416551663932895618598752645643856647100005740868843057170269018277958\"\r\n        \"2617200730965123511850833892822265625e-223\"},\r\n    {0x1.2414b43111a27p-738, chars_format::scientific, 567,\r\n        \"7.\"\r\n        \"8908966429612138761442053410825010841147511936821955177458713457438198805466271838051424678765828645719939\"\r\n        \"8716167726634748358732992726254088667359542908405506833271333150314097274575986309942361703879329062363600\"\r\n        \"8556508006663024226238472910535467867270836577618155340121918980941880199608993074855517174397941766797943\"\r\n        \"3257699387199457655420176793846119930278466362457725082492520846136072700371070220886045238515771099913835\"\r\n        \"3273919581839928751011974288119291623295782179106535018353071051530918600909349102146773770371535343306351\"\r\n        \"7396561792338616214692592620849609375e-223\"},\r\n    {0x1.c124cfe4c459ep-737, chars_format::scientific, 566,\r\n        \"2.\"\r\n        \"4268259861629554096961607208386164396338924587886253098651453550140391339378844998393460288990930432820913\"\r\n        \"5852605544145260297178418009195622867007636059040404647511674582759252082159463333924946122636209365307724\"\r\n        \"0977873157795898832579503773541214993031434002947123764437546804261294178223949649858284233282072275776984\"\r\n        \"8867766962872304329173251511142705953025211517869429174767445738885776946304025525607550282127555871896204\"\r\n        \"6723786844906946927224287601746539109080079061293230280772642604110267497185547395959062910204359782805061\"\r\n        \"396260271067149005830287933349609375e-222\"},\r\n    {0x1.db6ca39d80d3bp-736, chars_format::scientific, 566,\r\n        \"5.\"\r\n        \"1376518013281176581393767003881692452539216189638454082513861671056344330553488898982859915462604752562071\"\r\n        \"3194858456483355295843937655229752763352932747821261035645606743918047613597052911193054514507809178873973\"\r\n        \"8860992102826623263280195239978630705630377197171290709976656635856120178304492299111334031785584645526739\"\r\n        \"6623011402146431073232036141359852328057576136808206313364418877233034792328694524368872457314118573580202\"\r\n        \"7632133284215709838404948187667872353512508935047651023146817004887328668815745386660026858747409429610530\"\r\n        \"917642563508707098662853240966796875e-222\"},\r\n    {0x1.2c644921df46cp-735, chars_format::scientific, 563,\r\n        \"6.\"\r\n        \"4923393123279893973798124975067957683661821055302531079268770502420049095140983455228370658848833305956119\"\r\n        \"7328682798229063527454145383194037041466250579724775714844050640734797607497023266424826652646549956059872\"\r\n        \"0122438324703282326440711764504014832126567471117309554888078096114310082094633910668580186775907732763117\"\r\n        \"1603679876938544156082643007574401942740559623623544623788327531808322409634703611830824020277630688513162\"\r\n        \"5921709679724265116094709949553901139341687598482559954476240751055168594273882198683993792029021073497485\"\r\n        \"616599078639410436153411865234375e-222\"},\r\n    {0x1.6bd13122dbaecp-734, chars_format::scientific, 563,\r\n        \"1.\"\r\n        \"5726294053843144363681777730802477936874597299084010995107628966567384953622503257042435468958025681768951\"\r\n        \"4556296506682508635691790408230988645053782874328147548076915865073026467921875301752650598198704321811945\"\r\n        \"3256217150144733715978427901629387459284666143864869306007500181496611203249610419580016413429528044973803\"\r\n        \"0498260886817981140598424248086555342030238604672222152498165969915199735649857611225997848420675936268197\"\r\n        \"6604047511921835077849991651550299984928801347440824803576874096605998398187416862946416525739844020914670\"\r\n        \"608135565998964011669158935546875e-221\"},\r\n    {0x1.287892a1444f4p-733, chars_format::scientific, 562,\r\n        \"2.\"\r\n        \"5630401696102993478539054633433987502198527063819861595789767934541667125215787275857810993033871291977652\"\r\n        \"7357557274968367720569106246135522165132339121000037669478455657996670633099125384048964216917608128715393\"\r\n        \"5906807676638979861995899482434722854021681551266558689523039027804336232103222151597704699482237992239166\"\r\n        \"0359274271916002455343495552557398005709744430276564223663170930770139608062610354384149949188616132053843\"\r\n        \"2032766932551477934507877337828248379260954800678355110576711200666093855448294052836140256287434172066674\"\r\n        \"87562299356795847415924072265625e-221\"},\r\n    {0x1.b57a6911074d3p-732, chars_format::scientific, 563,\r\n        \"7.\"\r\n        \"5641405712977867210175274043088388783420867275149767322122351434047338374177936253438028204899302356962837\"\r\n        \"0488523999137071089542042803849243123833082314485877867503612078844280060492941395300769301050477461083884\"\r\n        \"4771708168843517945782166786778563721827463933958843025588740107399532386823702651549747742355276118694133\"\r\n        \"6160543862549988839807751895579998772653688325470326107232963792745930375230680670041063232822687276267356\"\r\n        \"9564881628548880660380868326841031190637588018517873017028771871603303484157541767382497748122591012254201\"\r\n        \"103814921225421130657196044921875e-221\"},\r\n    {0x1.c6dd472003239p-731, chars_format::scientific, 563,\r\n        \"1.\"\r\n        \"5729507340845360691172961950552389472595381927177044158053486244001384093120472450655528827917252656828986\"\r\n        \"4216611421173869718771305470695584254626336167914579072549868149824208386320969543895385031322917376889944\"\r\n        \"7230105143157394883461683090195494454277831621323498297629020214235087735116688238005071860004717990435749\"\r\n        \"0609359649320526641329699019669238016740369020731988890670133234059565100213750710244133154401228977080320\"\r\n        \"5276992871702817661919812277763853056745348801031263010975075959504586828496545179759104529564690995446785\"\r\n        \"137801271048374474048614501953125e-220\"},\r\n    {0x1.d8d511e371cedp-730, chars_format::scientific, 562,\r\n        \"3.\"\r\n        \"2701700758416348890173944451402027003733394142827984966197329168489787891030628871564620161154472920441976\"\r\n        \"6307611657940026085950139753419063816685006534077373432881969780274053777402989565349198574634732026976514\"\r\n        \"3503255254357620386504234408609488451270885440695994276651147053203891254558854795233618129556019768983064\"\r\n        \"0184701664660375714893506854424496235149299558008859536198192378392345711490047852485737157747848891480215\"\r\n        \"0630607439567831179019341191103700093381913366407539928796967549450157323322682232329438392219632739110757\"\r\n        \"31348319095559418201446533203125e-220\"},\r\n    {0x1.124f0a5bff47fp-729, chars_format::scientific, 561,\r\n        \"3.\"\r\n        \"7943104300103846907465125718962807644452544067635609245252515780846857398156326074983345152492123344644782\"\r\n        \"1885437295835467826221176433927630707683821690003074953611689959684984404544763811290392050828423812284286\"\r\n        \"7366414367667191706792193414168278284604872591203010012649027975022160519975882018294860956880832296313536\"\r\n        \"7584518805465684770614223278321761156339523325948618400016289310007069346377405273846598794682971919776451\"\r\n        \"3811423318034585497341869887347777030479661972259914559435182043273955731705789607524360400575124535604842\"\r\n        \"8902795421890914440155029296875e-220\"},\r\n    {0x1.04cfd796f792fp-728, chars_format::scientific, 560,\r\n        \"7.\"\r\n        \"2152364285788005379377524795979174964552660715900699704053929992547268233990189269000176177971746118345250\"\r\n        \"6890531596087448200502671823360487351976610446845342947428207102346678631846396319052254600166448960949818\"\r\n        \"6500465974675840014654365386862246582628238623047987966821810242214677090011418517167697893840061749072186\"\r\n        \"3813117391739117779902599709017270299269508886378624385770036071380417341488142510535238002530826361679656\"\r\n        \"4133325313357389734835576150072007476083226753697027000461059379961318619180529733097450138953020404297689\"\r\n        \"083250588737428188323974609375e-220\"},\r\n    {0x1.dad5c3f1c8083p-727, chars_format::scientific, 560,\r\n        \"2.\"\r\n        \"6272169024527131679324702550410633379720544552442983857477309996825839785642672113952228338812997232757040\"\r\n        \"3797174621153077818446075620602878393510121524818246548823801693833402030540125548686331399867214868694778\"\r\n        \"4260560502252535561694789091997233504905922513669597935518961163028798881022064346029907879394780909043154\"\r\n        \"6510688244717805991877047303956839696222139417136531025243815182537858993807034353276986207761918342522761\"\r\n        \"4300384259833292804793092625070317127312066146987547947564826452153651186093453320258026285872153537948037\"\r\n        \"183014093898236751556396484375e-219\"},\r\n    {0x1.c10f6676ee08fp-726, chars_format::scientific, 559,\r\n        \"4.\"\r\n        \"9692140757055039685842047867803507007965064813391203944533935860055513779002006825977512730737397856713792\"\r\n        \"6521109400378936101134773568989454265111600307864836389445565543201080839068439167059749047437910051659606\"\r\n        \"4625090341000441213521055191798235088826104555942477721851467019646047257372488602165144957533569983171669\"\r\n        \"7266729296749078146706981079609212540351242271637174021478319280589008464239239745801817192984144557569294\"\r\n        \"7272035641528057138305985529303378800935731596276356114916201308852708295081464082330730116848424571251996\"\r\n        \"43996893428266048431396484375e-219\"},\r\n    {0x1.09d1c057f71b1p-725, chars_format::scientific, 558,\r\n        \"5.\"\r\n        \"8830122891423099384974225173148494713081864421101162087417346023157060407226954996657527710036574230300777\"\r\n        \"8228849597449568302036718302194461244246668661412782472746574338449486220048071223852647745826445147658614\"\r\n        \"4430653128313524882251162242029169684145131727237899353273750494174098311927424774952874365921338158977154\"\r\n        \"6065750542832073408942424875590605836275787577900142528431793301587988020156120572901113235812687331457996\"\r\n        \"1154642175089610096423965852398002114518436398455397841740576752460394155163561730458765986363084410371016\"\r\n        \"0197806544601917266845703125e-219\"},\r\n    {0x1.4d15da31c76d7p-724, chars_format::scientific, 558,\r\n        \"1.\"\r\n        \"4743436359705466669425597004321834607160275202191708101647359884779278816000005465530348819209779595146819\"\r\n        \"3274657326555527683528423165521075539607371822078683349867541347863453219805292318913772267021247819793992\"\r\n        \"0891478945700675670578997649636833850295033438465261262013370652846731723982875478958167012077393670206969\"\r\n        \"0600361602022159246479474998393004303980486125738995295279594477648650045806279857474029772106803426533603\"\r\n        \"8275194781950606208085012372213473554552613880716866570935356126307329100842696616070606264233683324604839\"\r\n        \"9814753793179988861083984375e-218\"},\r\n    {0x1.88eb0dbcf442ap-723, chars_format::scientific, 556,\r\n        \"3.\"\r\n        \"4783661139951836659834650869398120825446263038654374830389179725779207115608018307232395526906385987088082\"\r\n        \"4300939458172670455150508058822235267367986041627005790042997377904752045570140208853566396039690367647975\"\r\n        \"8706671069406990269746660238927428872711018746481991387760562749230806116297403149718889702098837849022025\"\r\n        \"5913529791938285558143796317931984839907097658936340062828470837435597321113430649553015925929159557163989\"\r\n        \"7200311940047402536426101840440670659097350647474752106036851970713051703441768301934192532745560022533481\"\r\n        \"96973092854022979736328125e-218\"},\r\n    {0x1.4855037984a9fp-722, chars_format::scientific, 556,\r\n        \"5.\"\r\n        \"8132163840225073067103367504949528996314796226487824120028997327955421486231049647242313211271414237877849\"\r\n        \"6575931983419043299641654638440132125481074183643823625939890917321998087428065303811935078982220060216703\"\r\n        \"3080320155151816220164993979839757227461089845910506971715485581225714522454629832571060428488951781247009\"\r\n        \"7151684577794782847430343609839366343499101500085822887900487908381027204874540283621144246564638885440392\"\r\n        \"9804648678499580352812183946211325003975603679026913411470755820684245890767411404683725822603590493997671\"\r\n        \"72872088849544525146484375e-218\"},\r\n    {0x1.9bdf4fb46cd50p-721, chars_format::scientific, 552,\r\n        \"1.\"\r\n        \"4584641434878504465497720362417662180955274726977105761716287781409371922551725296330598498660010627062041\"\r\n        \"4109901686131526983419367027803870618372028238406674358525350147445594176436041882093323966634786798353743\"\r\n        \"0948325547099905606010669434778234784583536242970120916339292852416310909963648082888736027543685653844861\"\r\n        \"3952710301010589710537711722090325475348344984737385438871422926542463279581236916939059511106840811631424\"\r\n        \"9538880185435710253794201340101487723780500252093742594419319926143493063899916744598998091797525944457447\"\r\n        \"6219713687896728515625e-217\"},\r\n    {0x1.5226e4ee6e982p-720, chars_format::scientific, 554,\r\n        \"2.\"\r\n        \"3948318645722383698596132966002861356262867738431677803939697357779251148165688995352120160627222611575929\"\r\n        \"9689826700992662030416378730689248077616852136705267786161545096222007215990088839119646235536279253476934\"\r\n        \"9003551732144440707467704087139749385796202008451363169785499180779157968872915037551550990021449529891812\"\r\n        \"5517183603560498907759526081213279162400316981058258462632041089918690774422656232572587897271295319785406\"\r\n        \"4812435396373595099397773524674835098025684827649463758892584301435835947832788841887802396002360438842515\"\r\n        \"577562153339385986328125e-217\"},\r\n    {0x1.b6eda5fbd10c5p-719, chars_format::scientific, 554,\r\n        \"6.\"\r\n        \"2170841982723338730702402774174581104079444355770645227799441152140990179937180891783242637499954374597087\"\r\n        \"3008464662250243986006844228667869882594430102531078175913907335687966432831398569868860162052899262109384\"\r\n        \"5883473398478959234838688550011663002757229956068858414758150089312638851089337799986122131137270728206083\"\r\n        \"2893291385031591432573726834519044254175548566041758328320909158474462834862032394036782743365444459136656\"\r\n        \"4824457589210171975436779113469419212320975164890670393225444447157944180323651986618178379162547031455687\"\r\n        \"829293310642242431640625e-217\"},\r\n    {0x1.ab54a9970b491p-718, chars_format::scientific, 554,\r\n        \"1.\"\r\n        \"2105626076543997255531329501726923857588877013053286207541994102509381369451991729752658885355274540690355\"\r\n        \"5024928460084443639809967630734347791425042367511569366398014451637268244225964319453806479955920246917322\"\r\n        \"4725157361024728582311997914670812221434452861298531071639274681709795071912599059726607128925012726609172\"\r\n        \"1796505804854529742126200406823478966258730629381222482927094750078171044839460480027612836177749536420318\"\r\n        \"6481127306920043772287163277386036128721081549056499440748286378438450585143025905904301010862500476150671\"\r\n        \"602226793766021728515625e-216\"},\r\n    {0x1.e52475ef13116p-717, chars_format::scientific, 552,\r\n        \"2.\"\r\n        \"7486687055906062577881540001431501496575123590678476529391262404690426983095262500085467262333027891722830\"\r\n        \"9369613395301844882547555622556829703655868321121356990562366845714786526091127616873916492482916608026871\"\r\n        \"7602849506400147401598589825990533520239405794744626858577327624634743462392529663276150233619312212816854\"\r\n        \"9072964925682415315626227428381800235264458800518729103506057993613643332214275142683792589021523962328572\"\r\n        \"9865420017710938892453157987835329199562430315689174276210015076968788768203356014704474147292145858045842\"\r\n        \"0328795909881591796875e-216\"},\r\n    {0x1.351edff72489dp-716, chars_format::scientific, 552,\r\n        \"3.\"\r\n        \"5027657450499662471757545735089001918731485641097980290576178547757495509249093266284554696367026278492810\"\r\n        \"0147173830738518713645420310526648989877752676392141828172888665979441700520145529662902345885785383753539\"\r\n        \"1376370469690434685885587545230474222594249760620632271040847695338529030730762570328772853749408787613766\"\r\n        \"8270604712743772537998893069321436302826336423836895233476630313955731119058149690419864151407171234861512\"\r\n        \"8474122750522428045014018099803822512938181757888309118095505239530365123035368002575324491987274200255342\"\r\n        \"2935307025909423828125e-216\"},\r\n    {0x1.9d894421705e4p-715, chars_format::scientific, 549,\r\n        \"9.\"\r\n        \"3718787940821138640143238528704947331582272378326109901966018120838594360065413663088557482229251218067569\"\r\n        \"2371300339797039083262347018707985682314341168037040952899218264275877516637512478504333541208945387730294\"\r\n        \"8788479526657955342331154879371913354353728215275083747527094608785656520445709279082581079933935684375053\"\r\n        \"7970732376976367986120404826719685528839665031396276263448812459785233011630612074800352768861034195271243\"\r\n        \"4605308321679121688893108324785422380802302551469557739581220727134268270817100629239276843307493436441291\"\r\n        \"1236286163330078125e-216\"},\r\n    {0x1.e5b92a8e62631p-714, chars_format::scientific, 551,\r\n        \"2.\"\r\n        \"2015678401956501509913015563202673349273994830102214878621064509890592629710942073381394734079571892066071\"\r\n        \"7487730292989115288528305280638727413962106934831869139267022072217246445392935266135588703131037280675127\"\r\n        \"9330987296821526480487767504365898637613452426541908791360526539551414732583564950686053667485060220450589\"\r\n        \"9377266646047617280040514279127012951123130564005585555626870345590497806540537552635681909822254316423847\"\r\n        \"6156766516279219677862865539783026980640293512478470347104263432506258267583226624305482721499771514572785\"\r\n        \"235941410064697265625e-215\"},\r\n    {0x1.5145b770bd17bp-713, chars_format::scientific, 550,\r\n        \"3.\"\r\n        \"0574111115052798755704223370355788580585808691529488807936764944992602196499942092750844854714155848637597\"\r\n        \"6497130637186256919022738489601122933480405757980718915295656524814620284490229794811067698027804710242913\"\r\n        \"0376602599274637302539181859471723845759904668345426627291624744410958365438947344354893144388403260841879\"\r\n        \"1325650128517766244303228585118902873034286845844905346105029784310865178592908660838937112931288536138630\"\r\n        \"6009764825661633654047990831795098362102506534239404342245751501345683352411639527096073876144544101407518\"\r\n        \"61035823822021484375e-215\"},\r\n    {0x1.285ec117f96cdp-712, chars_format::scientific, 549,\r\n        \"5.\"\r\n        \"3732563210682168420160693837490128172921363352811330680377129309428579320206596965611505276898569179318064\"\r\n        \"7093390822649793019079985569694858841420483773418054150208979227588072543018999060176454825188719716750266\"\r\n        \"1464925503548223182782469269863121025084723548092520888452073422375220993719096473946649034335302943612161\"\r\n        \"3096677012827332884190800037895188734464273611331722229788010640188364868864193380798439305695257683444830\"\r\n        \"2578304119397235029009490306081909908983761213174092123799691360182549197602745922903305642037707912095356\"\r\n        \"7326068878173828125e-215\"},\r\n    {0x1.1e8cb1b784211p-711, chars_format::scientific, 549,\r\n        \"1.\"\r\n        \"0390415242853728816041217572591158422222247006803021323666432451437875045999340376240492922325054882674552\"\r\n        \"7408607706487609351627677616440371363336671781330254328137763364074729743139935129859512507832805869472312\"\r\n        \"6339297623061284057853330414173406542547210083549372626832453025030820018846792813026550288561349826779134\"\r\n        \"9277277621847116668163955578302733989002925493494555577398661411420940027588717214435232462267698247622369\"\r\n        \"0888792643168096799257646791531616954197624569093221460530831327866723955961876871018773060839635036245454\"\r\n        \"1027545928955078125e-214\"},\r\n    {0x1.614c26f94db72p-710, chars_format::scientific, 547,\r\n        \"2.\"\r\n        \"5621446229095083155702111829323711502594107915197651192397683293270975877689437093976421160394334140860514\"\r\n        \"3508654306899631700199453849808488956890026352075766904074073805277078860674472639414882982434752290186285\"\r\n        \"7504465252020208455116434356283038730965714616498666771546909185959002909855327970887019228977304196897290\"\r\n        \"1944724658400811662637824393687273273295100029361142051970122838752977899584677183241852846360865547995966\"\r\n        \"6687843860920406095408137347378557822727582591951003279152824322080606068595729331652255389428773924009874\"\r\n        \"46308135986328125e-214\"},\r\n    {0x1.cb0371a5199dcp-709, chars_format::scientific, 545,\r\n        \"6.\"\r\n        \"6576126403697076608882696856128986307080116494217692992548764570798174913048894445931404315822786110091829\"\r\n        \"6649348687901768437850106811170410660836029465125717942313828125061569507507709085499361748389979318407375\"\r\n        \"7272184536689291808393520451326509862470686467487625232638447718595087340927786472243230843937796297226695\"\r\n        \"3842878096505666768374797711233029598166668335444663888730788648119384576217082726860978665043128401209712\"\r\n        \"9547423798181108350450372658894135422090442624951810200919587095679400509616314811356385661156309652142226\"\r\n        \"696014404296875e-214\"},\r\n    {0x1.5c0c6be27bdbdp-708, chars_format::scientific, 547,\r\n        \"1.\"\r\n        \"0096315129023046456467927747886062404829941065542894028799876798238419315163636763041967115486534078158780\"\r\n        \"3792746626275267505476475853627997814869597841933589181384945321349031280264494810636851886988579388341166\"\r\n        \"1080080357956361471549802945541738879096317122362902737135301247488849687812997256313209104551730147943627\"\r\n        \"9917883447751656421134845380154896344888378922177548945568579291932819057367458807794924092411351316038054\"\r\n        \"7290591838918031503312280507777151643810289962815833121504010394331494282721910617575677981960780016379430\"\r\n        \"89008331298828125e-213\"},\r\n    {0x1.9b18dabf10f4fp-707, chars_format::scientific, 546,\r\n        \"2.\"\r\n        \"3850500688279488736069088312896597807712501153938563573110116042391645632737275531425873467863538337130966\"\r\n        \"7891010427975650224937133559719351401006461226265549956373571669015855704039359014374848412483435923712895\"\r\n        \"4250186816972181807777308389417398269916805254701545926256463106859217585143569273237619388976344522803930\"\r\n        \"4203567895064463853141388798875624607003998797915225340849743889366284235720427859685783218868506557926674\"\r\n        \"1580214199554455933843367880842257560684391957709515003912459582292372011308966266857067850537532649468630\"\r\n        \"5522918701171875e-213\"},\r\n    {0x1.a3e82b920dbbcp-706, chars_format::scientific, 543,\r\n        \"4.\"\r\n        \"8723235743335383007316942037138333939727876640397027548637587311727725444457866859726981985910149027071370\"\r\n        \"6468340207283669307155333779520424052725448086908738353241626783050347648634151847564260366778472261414833\"\r\n        \"2613564491961095108182457631457759132936579947589807479206304597712222245032642246469025898682295077537797\"\r\n        \"9074763121811936361499537945776887634577317313987291053433221818981193498354026091626856226453756264612039\"\r\n        \"3754530427037991319234814470049958889326819291611453036550148575437432122510385962277368321338144596666097\"\r\n        \"6409912109375e-213\"},\r\n    {0x1.e55d4e34997edp-705, chars_format::scientific, 545,\r\n        \"1.\"\r\n        \"1263700063301883961637593345853650848173698173906203553947316800214949500052155115279306618384733383355823\"\r\n        \"9012593269879463412835243497329655831225472435522686519182378700969305497526912686191024754645697306870198\"\r\n        \"7762145427468664520014456587758418342960524150909771188685359678729708491944850185052337045874514571952057\"\r\n        \"4137475072159689914997940459086273680774009478900069713199343055246913368028437896195004050375544491283694\"\r\n        \"1746714816416655581946140115510899932593584992390168732897366379179420338335127806106417125420193769969046\"\r\n        \"115875244140625e-212\"},\r\n    {0x1.82443127bdb92p-704, chars_format::scientific, 543,\r\n        \"1.\"\r\n        \"7927923533931952950586931510282749592790453715109808832297352620022802755310066252394361312560633056624429\"\r\n        \"8444201320939750950080181045198894675756701860610234013571800216193558312750617204334599296344409701776745\"\r\n        \"5629192373004068874618729305040214979501665418511156657769937991179760363455405882943393933388417275007027\"\r\n        \"9238392034119581576347126335201240604873503387124270592794021386497103267133076944317349877812852252494116\"\r\n        \"1179202904954465216073197261130107718452951168115991671745272658875064850016612522098924387137230951339006\"\r\n        \"4239501953125e-212\"},\r\n    {0x1.c3ddc4e626843p-703, chars_format::scientific, 543,\r\n        \"4.\"\r\n        \"1945272696274143506064751591019143690519608938330793458941131430315420967011543669286107587304069881291831\"\r\n        \"6032656187170995340885670400984520535211128358722668170887203873605927186042732064909372141468474051452393\"\r\n        \"3678415858455418832312297913362303042355926367090313440035220453662023511344211217569805253299537764581623\"\r\n        \"9298412580286410353907497125866517188536279462904565662754642482258294680343001078696867682334679872718368\"\r\n        \"0479454352306477125153503393953171166192097258701941353102439406321508295406082916789713976868370082229375\"\r\n        \"8392333984375e-212\"},\r\n    {0x1.85179680c1b94p-702, chars_format::scientific, 540,\r\n        \"7.\"\r\n        \"2236307258538304887715568455167838293359876919019126748017947977725350522616163447033071439365285720056989\"\r\n        \"1830461200043803436029630915487962565111962873028113557121533529866936632303307488823207702072296748481648\"\r\n        \"3207014721774399563123795598496459219700635915793195213974388269457089126242058992162724467598411268911353\"\r\n        \"5041058088826843891771253918599206993317190354583185164130892272323989170581794237052458129973574375453130\"\r\n        \"8094598405624524073068109367799283444890475986358854047759977156130022709224630661495325512078125029802322\"\r\n        \"3876953125e-212\"},\r\n    {0x1.03abb48e8728dp-701, chars_format::scientific, 541,\r\n        \"9.\"\r\n        \"6417543570694105910088319847436003732314160404928095487625173156883373210396589866754925983282318468734151\"\r\n        \"4860626102306640936393564625714042933596543888017233328739922582864914111709598516057698962957292905855399\"\r\n        \"0934567441164734848774927916780969315595016517054297439820165043351563820924614514119398727275481604029996\"\r\n        \"0756386042271669947379377208367499428338782010383566943029832407667528711616577681695535866646659071647091\"\r\n        \"4123908388130256787445397850940448407274826997829338472227774193835039834169289840737349095434183254837989\"\r\n        \"80712890625e-212\"},\r\n    {0x1.79d5b387ff6e1p-700, chars_format::scientific, 541,\r\n        \"2.\"\r\n        \"8058534999670358996633679682617510657197520464930955705056307782763303148434523913703200877980345442582067\"\r\n        \"4486691061078409468449240314443515147593774451511192439041146470049754857277557200825953109839924060422472\"\r\n        \"5351798824855369573419311576039958119981039707226303862508802136483934658223688603762220164216055731622818\"\r\n        \"9010355568985916250984833862564859204793321703030409451231964242558722126734054399784848841245168962609624\"\r\n        \"2173140130434703254320898457436036968768953024903954353705239159040468922704306131699070192553335800766944\"\r\n        \"88525390625e-211\"},\r\n    {0x1.f9a36c542f98ap-699, chars_format::scientific, 539,\r\n        \"7.\"\r\n        \"5098815942701431264042911004176988103520194201365702934373413006724432292697433861353923851217255084766983\"\r\n        \"6599886630527602489344121303782618389277881882670799795601764912090432524174366596031421997948061932162102\"\r\n        \"3117734679986634642030304403759434983992681398802899425054501200452186621488202264269552010067268804359334\"\r\n        \"1738127090236808055131909220403452002271755020123581692062574392122588359572183090485242498908330249497151\"\r\n        \"1253704899077164433785232677029233050564661707197414749244240081859608324128807499420190652017481625080108\"\r\n        \"642578125e-211\"},\r\n    {0x1.dcc43228552e1p-698, chars_format::scientific, 540,\r\n        \"1.\"\r\n        \"4162133808983744258886960127739256541973507395750856304999796672802119573692833361419165044069472916119768\"\r\n        \"2626134172668197351710112526943632551376973400614773690079165656484698046811087576617553125730497832111644\"\r\n        \"9781456794745739819723112960798249196264114657578024943397007196103135600134960687383208140764370034939725\"\r\n        \"6333481638144816073339075261783865664048692839880337281432279537203733127391385250064522871588966853314004\"\r\n        \"6779946169294976195251626252015124492655057417910144823152616491496420608135059504562036636343691498041152\"\r\n        \"9541015625e-210\"},\r\n    {0x1.d0b8e4fa0662dp-697, chars_format::scientific, 539,\r\n        \"2.\"\r\n        \"7608735580016018810532251366986066427701731560219460946383276544412397502773716043763024013333758381762491\"\r\n        \"2766591900986052852630094841182135458765270892661477506362963745598227260101624863784743478641335048748703\"\r\n        \"8347358590002100584791242861223336881162576985051154343250452765979930861239511263072723698300020976430933\"\r\n        \"4957108997036962159641594598842541302828078543085854370441114036051976116492434546275183049970630689903281\"\r\n        \"9114395235094129047761582275001321029896541652183422416686914671450455067459872626756123281666077673435211\"\r\n        \"181640625e-210\"},\r\n    {0x1.b8f44bdf82c3bp-696, chars_format::scientific, 538,\r\n        \"5.\"\r\n        \"2393404251407047567474899294317887937950423337622470825030283559680483919109740585087289336722256687375700\"\r\n        \"0562612150372259732590220204200981462672070447082476439023788329111668015810993854242609354608168841001197\"\r\n        \"5721911366783257993585749567931267566346598996672644920149221841635228584772963688239938336655237227386206\"\r\n        \"8491342840831866257649196363752331752920763018118631801890578071444865477033486159660377821557266936722920\"\r\n        \"3653830659767569868274491572483668536449410976001011211353130518765763802210844168882886151550337672233581\"\r\n        \"54296875e-210\"},\r\n    {0x1.f859c249f388dp-695, chars_format::scientific, 538,\r\n        \"1.\"\r\n        \"1985208897227798591039255948760211295972666003794523598898895366020833219755267124170139715038638699952937\"\r\n        \"4329645641469104729428750120637526367360593775039076317110708918658483802996513415675328247462305935532785\"\r\n        \"3345693077234597796127995527491563794867569650848921446775522592734337766008213264400815397407021420615343\"\r\n        \"1176922528484394185175495700629128401173269414579032286321428360062399315349631550183174906062438748159785\"\r\n        \"8516867445804419504747204630742763446810820288164538437931161379214648832550182966372176451841369271278381\"\r\n        \"34765625e-209\"},\r\n    {0x1.76c3cf6d25fe8p-694, chars_format::scientific, 534,\r\n        \"1.\"\r\n        \"7811558999586523701977647593653910305007237069848717168449377479088923371990969176642927894674055304613438\"\r\n        \"5672757693904280120418869003651550514604809425577325849506851929562524269723511223669099656493330621079242\"\r\n        \"8428532458822479610900457972964267869820261321558949972877826760738857749922382498268945857045773232228967\"\r\n        \"8217862435840327482891491017196268320347469034697494415172295492230087479206891090890393696595327575030145\"\r\n        \"6994053947741352652623430920429779814837285839361266979135427518008642083779946574395580682903528213500976\"\r\n        \"5625e-209\"},\r\n    {0x1.b9755a541518dp-693, chars_format::scientific, 536,\r\n        \"4.\"\r\n        \"1962642963537321076602226972991351491104742192225758657473795663642271950965237649181687944784531856492724\"\r\n        \"8565355071455733746569152196344022113027036138256316024271384693248884883018412271913955944148702408979980\"\r\n        \"0598227265908537135628614882879304623430375054715224577326792297458415887012265235615755629258591793791972\"\r\n        \"1642684984061588604707508785500264498166000046974354417486291970140109533598016391655783942366698854204024\"\r\n        \"2341326597783970853680579332068366495230471063766360766930156215738360360456571385157076292671263217926025\"\r\n        \"390625e-209\"},\r\n    {0x1.f9c57cc980773p-692, chars_format::scientific, 535,\r\n        \"9.\"\r\n        \"6151781021743031816511544979411331543689547428158611066559215048652158551199908498702146817365187884427510\"\r\n        \"2350184914401779293504720175219084860292010793608864288357348223601530554819113162490280742714226103002168\"\r\n        \"4787171977026814222128547887762200230029015250967853285838300682440492056232862759485418693647725985578269\"\r\n        \"1550194921251369678834994115687793640049054121013242722791010216905285005198355969738557592934334727596160\"\r\n        \"2106476021831384121674402994034324448547614929792406649935288203665277248499698714567784918472170829772949\"\r\n        \"21875e-209\"},\r\n    {0x1.e4a6ad7e5cfc6p-691, chars_format::scientific, 534,\r\n        \"1.\"\r\n        \"8427321798270691931419529256184313716571973690089230501201213024968691169451064054203767633648839365337058\"\r\n        \"9959392624389463429096165611132917690021295878986853446245457921782248607739873408176038083804939583706995\"\r\n        \"0654397880772093066305522988989510818550541148687265521818289398962787230883040650157422886214071659687864\"\r\n        \"3792754837833575353871758489957381015893355378481232127208667013672716372137306883068549817908551789512733\"\r\n        \"9316502913213462282092457461996729259367925729225844679795995907374116934418495361569512169808149337768554\"\r\n        \"6875e-208\"},\r\n    {0x1.7f07a911528afp-690, chars_format::scientific, 534,\r\n        \"2.\"\r\n        \"9126998289538513112480448166551114592654020719347039834038759867260996999416181764018441153984388750809778\"\r\n        \"0175629271501825790485883418229175243037382302172755297279108088469220160306070492618960031004834039173709\"\r\n        \"4843896631120823118503330457284170724809216045678379076340848600459520650305058603045381131112866260428467\"\r\n        \"6407593658543022863820181235359501241223422387971893606331689220550564750593432841072650225389271369147403\"\r\n        \"5512661765215882184128685885148232309762780083810333437476996260755753714866145287487597670406103134155273\"\r\n        \"4375e-208\"},\r\n    {0x1.2f7677b3b90c2p-689, chars_format::scientific, 532,\r\n        \"4.\"\r\n        \"6152840107250803974346147876459468792499531906015218999353543308743048639273421787001944283505171919058319\"\r\n        \"8144255365651071365678271599484595358357673877795342194463858767642709308320670009187206082826373037562838\"\r\n        \"5820261005469798564184709286723729385073245071251176864233114190345074392110857638137153854209350977844546\"\r\n        \"6239189605282520378949050856283020490336290298380676951122376139656287149424509011548673735977675085494428\"\r\n        \"4169319003497073383951870387582031016960451123529784253738775685058440267916068933118367567658424377441406\"\r\n        \"25e-208\"},\r\n    {0x1.c96e22e0f49e0p-688, chars_format::scientific, 528,\r\n        \"1.\"\r\n        \"3913867725663096448636565841594072797239179967141265670015911796658179232356371330082615064109491014185571\"\r\n        \"7852548486936144847167954972821760976259988719708497654837756844368594047016474258346086098675771802638328\"\r\n        \"1517450488570140127406126304896613526413806573826761435555192929139460417688891661002342541921558364334502\"\r\n        \"6424879420586382525190545149881043545710069777649964342012328828582070171780832398513896867752356832570177\"\r\n        \"38989819696745189651711690480619467448362029039063335112658375929128862225070406566374003887176513671875e-\"\r\n        \"207\"},\r\n    {0x1.22d28ade59d78p-687, chars_format::scientific, 529,\r\n        \"1.\"\r\n        \"7692162295985285274613328500102516630943365500476087310567181746961135254937482576801750221428295918086536\"\r\n        \"3285468548760863155815912570868365060156998843371602515772361967652878837326101707102753470819861557367288\"\r\n        \"3481713892386335979436052605905323135549877546295135146022879990274278167641463897483651103068687816673451\"\r\n        \"5907500780062167799434488187226465946666108588036946480456968207077669688736279858958332805166846949099791\"\r\n        \"588247445999167063696700086089680623439003509639588506091337715385447548754882518551312386989593505859375e\"\r\n        \"-207\"},\r\n    {0x1.11c6046b7b121p-686, chars_format::scientific, 531,\r\n        \"3.\"\r\n        \"3309984084439476052884870790017880296080055634528788265015815316869436089527404130952395838719945250131986\"\r\n        \"9730320728842084196597888023818389616975983226758975382992530982514820717966583153778807531118235599662188\"\r\n        \"9597602340856152965036165428696464896332879564853822887552698906231145653313756449773063821682323652058481\"\r\n        \"9547805275196402678496748808344099487927760988789865833706607909581306479099658359625457565668934621834351\"\r\n        \"3757747548413425604442641719595489739459706804383826827911176430511291934877249332203064113855361938476562\"\r\n        \"5e-207\"},\r\n    {0x1.198b1ed81b492p-685, chars_format::scientific, 529,\r\n        \"6.\"\r\n        \"8510701846894067422582475523370404378011418963303009769966838302347841714706482962267873687455961537128859\"\r\n        \"9906207574662056939466225701661938852045145443629892554749935483888325578119293711819310924456525734183163\"\r\n        \"6915472912399010879835032970087392517046341912957239003522427587484984610921827305673994149628011173396226\"\r\n        \"3780525714752427605029016226469261556860836160984332674984228909414266256047184662690199519534155528347876\"\r\n        \"034022294815245715147598466779192478520189164084980440014264351823725096579664750606752932071685791015625e\"\r\n        \"-207\"},\r\n    {0x1.da6addabbbd1fp-684, chars_format::scientific, 530,\r\n        \"2.\"\r\n        \"3088921688496223736447698070618132190331861821537468965751360953523467964117030458093659711888679953431325\"\r\n        \"6791383016641616913805533295082590105365577700220213661827891554176114291090426996418755045595031272391436\"\r\n        \"5056337843282569335669119776810340847055881483383938852947141165661430884677477472557582460844244118662091\"\r\n        \"7179971616485032181643293539463714565118379358749880808820996661168372725964919205188069147711554587345138\"\r\n        \"9108133001777714280339866642455389931961554995216357284980538007966577307428224230534397065639495849609375\"\r\n        \"e-206\"},\r\n    {0x1.d56a8fd15797dp-683, chars_format::scientific, 529,\r\n        \"4.\"\r\n        \"5691048306445641604873487344582286150036188199466936663762245861254367951253078053084337328657486501850324\"\r\n        \"4639933585428847066193727231878618202759175994292635769866898199587603013635816698477200737836786434113051\"\r\n        \"0572218930930147956667737444440711664958909309074610966569304085097304218562735090854035050636703161868796\"\r\n        \"8928801205899327226333183208398450978715639442169140673197444986361607235881156993779171410174755922663555\"\r\n        \"574675719765400978001502127488303683860400844254815568243693565432528291836433709249831736087799072265625e\"\r\n        \"-206\"},\r\n    {0x1.f3aa6275d60fep-682, chars_format::scientific, 527,\r\n        \"9.\"\r\n        \"7270783116371221191762939854842941752679733416007252745486261609859880583198730913356445623264907215190864\"\r\n        \"8560349300936337143532788944063699216212541764989243921159202999554308982439677599213591449347542999436251\"\r\n        \"4845075367400598016897410898113328837764425820423149230175473845973261109374719277837435612064676023199513\"\r\n        \"2475233045514061072806455531384785125604686392921739119523946853964894459653941721178135905207621152684004\"\r\n        \"9022573637782547046925665674774262349927107727157916980699199453741510268400816130451858043670654296875e-\"\r\n        \"206\"},\r\n    {0x1.0771405e2a869p-681, chars_format::scientific, 528,\r\n        \"1.\"\r\n        \"0256959546160606488726805315356855337658063975579249432725148357253870081722014642762758518975160176683096\"\r\n        \"4808276510052018475391378929787195203544548808862085870952275388594930486183074992699706535882260315165688\"\r\n        \"0892231031191155150934789100065019417689392678461684332352523612060746529016035174062783183041957589223796\"\r\n        \"2611722543461090395136869252370957694533919461366539737366218664440312378620580551773284635761441384637008\"\r\n        \"17283527981808733394394904977790897574079405672970002302133341216816564411828949232585728168487548828125e-\"\r\n        \"205\"},\r\n    {0x1.ee86c40e3a880p-680, chars_format::scientific, 520,\r\n        \"3.\"\r\n        \"8508135367330314292296381359837063529186758232718527682702510581759040588871922777381914733711030542054411\"\r\n        \"6504406319838169445218070711077138616618166877563823794260052689199619964193690292172702945639700832394191\"\r\n        \"5328700138150745001949277117267453139446838790491763636519220242854305248572010509495178581545932452964994\"\r\n        \"9108075855219014019756123543254738453324470847942263428819845634073838218187937116566664828909343554431079\"\r\n        \"815240877180188791702678289624792713938430940614004939666348281690488875028677284717559814453125e-205\"},\r\n    {0x1.585a84931d29bp-679, chars_format::scientific, 526,\r\n        \"5.\"\r\n        \"3628739344977650941399396994664062909446794105596352721943281729728627450572873114769800695622557543189087\"\r\n        \"6170408118377833454298924787139421021372070641261228862807374926415125351691951403510273975967747017495700\"\r\n        \"6029397110551891149991745218172557472670307074649319964465385236521148916045120642010778039075647952239021\"\r\n        \"2432361954484400227604278580711506847746818030711390963728533887728476714567950565229014485423029218375353\"\r\n        \"750732081888124338330413581757188688331103832532131348029085481099453858178094378672540187835693359375e-\"\r\n        \"205\"},\r\n    {0x1.7a49530caf5a8p-678, chars_format::scientific, 523,\r\n        \"1.\"\r\n        \"1782670406981829321748342170270093032401355879831618957954947784523973296396796916865369743006762277930095\"\r\n        \"0567702062680043666952893020944559270149791677273250353005779342633235074698481516601654762622366900001635\"\r\n        \"2281219998184870480772600739120486824490248828894700930458720074575576880726612790401491826496007397517867\"\r\n        \"0647685837737977220505846996881709361842165075378521510676934361503017940903085360306384528629882989519304\"\r\n        \"090767877812950822319769876550077524994542753523582646391944239727678223061957396566867828369140625e-204\"},\r\n    {0x1.3b2a42806488cp-677, chars_format::scientific, 523,\r\n        \"1.\"\r\n        \"9633198540986483775799261383979870216240862506382911577912309546688800104365843575901826331397993154616681\"\r\n        \"2471280347835772651872541523676383736038356840857212840087851443915105283550968900875649801137459350855386\"\r\n        \"5821482142774480083157679864221799425963658261456298178545244297451518724341603830296153018149068454475650\"\r\n        \"8028506847600398711903974966533330036220169201991967451668704148602041768160661383832744400783773461300798\"\r\n        \"358098723210470279803874144148526265154314849414816574238971946808618440627469681203365325927734375e-204\"},\r\n    {0x1.c83826db2d099p-676, chars_format::scientific, 524,\r\n        \"5.\"\r\n        \"6840339139060946981762684285710865654814425966664609557362410206095193210907436592806745280940604984084917\"\r\n        \"3638712394538581010752596199682994606441641293311620399555882268983726840264501484788914059102776623643905\"\r\n        \"2122858877029711702866367625234785883294752383576438575622547825433771433309812245628796339307339366141624\"\r\n        \"8327266687372571881603606669105061926117522601057432280607513852894404333029087097387483751980844478298920\"\r\n        \"2235197876029202131802937817666288074953338254840490731769654664251589792911545373499393463134765625e-\"\r\n        \"204\"},\r\n    {0x1.ab36df94f8e93p-675, chars_format::scientific, 524,\r\n        \"1.\"\r\n        \"0645321758200814413322079175861714925420398312598654352133555760997816258375072365309746623458451602566928\"\r\n        \"8892955587817123557658132010249725751416542814066399908321499983973004793509504161485004080347135156251003\"\r\n        \"5442658249039229363606436055076672347113866815163628981036236168445495284717579960502642475861507919904976\"\r\n        \"0415239301735078975625527410821978439898777022303097916766691649207535368545176326930298026323109512486224\"\r\n        \"3828406557136280207205919064795260099278785611381060600944513383492306957123219035565853118896484375e-\"\r\n        \"203\"},\r\n    {0x1.50471d0714b77p-674, chars_format::scientific, 523,\r\n        \"1.\"\r\n        \"6758731287663245067929802646359253751876178073393718529381383029991245143140589642891986998226638001813841\"\r\n        \"1884571540760722831242178043882468016912989619180020502706117428233351747395942121515884241840494596513741\"\r\n        \"3168379056082846586489400073062815260306226775250614217297608945528700853686763895314550239200685720351426\"\r\n        \"9290032819751222225759992649072668129215176147377509677947335109118716015043007331011463548126614761292320\"\r\n        \"640235481244469082541147893929952413974668845082847184134976215030832236152491532266139984130859375e-203\"},\r\n    {0x1.af855fc3c3b42p-673, chars_format::scientific, 521,\r\n        \"4.\"\r\n        \"3010538577728233744816436369978549136976645950673498532952391599320329530671325173016013614684923269901956\"\r\n        \"0268052180793702299742913140983893922344975035501831505450412114109672135334397735251037816337885684958047\"\r\n        \"3992723015478174654344760932744538761509098314194729572674808143340483916485684814524519684382188211579232\"\r\n        \"2879301647036270532651278165887797562530738322949801980031349707060037709951853600603902434774229050505469\"\r\n        \"0763471466516501229666796891561067299047712433489573159196839302609305377700366079807281494140625e-203\"},\r\n    {0x1.ad47ff12ec668p-672, chars_format::scientific, 518,\r\n        \"8.\"\r\n        \"5574595335115486808557631060044950010564116057553208117505835698979224270605230907269762845091732308470041\"\r\n        \"2661175089528304438909809546901546014735177540676134332138472881953762100352137042313700018497337879496165\"\r\n        \"9189580288095025616031282691409656494757870534052617087201115566268802280358798705227412553213249254918373\"\r\n        \"1480193588714200446263056192475952356968184570908882976764095565692431171738149734334933275867032274731426\"\r\n        \"4652633278520834947286422890756022706803482172043515997794660421504886471666395664215087890625e-203\"},\r\n    {0x1.2cde48f104883p-671, chars_format::scientific, 521,\r\n        \"1.\"\r\n        \"1995252022699291430772090009162585049509756433689356686849255866758337996064757995487412332217041915275396\"\r\n        \"4502645220981501885133249216447042172461355588080996605721879177162634972981475480497356065079367468236338\"\r\n        \"3237004497147886219100337958851778353767446944517197980739705022950728600049945132461920818493416267256795\"\r\n        \"7907818111439963640990460062983183893943301010505311294044136435378077390399185184359595876312531247040973\"\r\n        \"9561953852017096495437565634136727399479205502966257918494308309931284384219907224178314208984375e-202\"},\r\n    {0x1.946b82be44de8p-670, chars_format::scientific, 517,\r\n        \"3.\"\r\n        \"2247460965180460029537786395406798165049710692182337402826426147217110915625857896714231641153250293652179\"\r\n        \"8048216973815754542961726075194872454516155016492934790014344438607116755383594469734469708786475281532119\"\r\n        \"8632661073619619247275295413044208923754797487662014202281803328562662568942790221177840910386833830029037\"\r\n        \"5416632087550289611906245010468012912803588788333467800241460580247976347907750916579605580990918756438712\"\r\n        \"680014884999019899375412526120418451580793367541540907217356703995392308570444583892822265625e-202\"},\r\n    {0x1.4e2c914eb1616p-669, chars_format::scientific, 518,\r\n        \"5.\"\r\n        \"3292453195387590853998556300829021590225189208980014515926856740122155957485101726194890227274448168718106\"\r\n        \"5927924279053206776354571063402558326010932660840917790876541357680066598140056129283600893403415124104507\"\r\n        \"0961228748867478240688904822297467593907518308374935005892642075637132415584498144496749609150067413936743\"\r\n        \"9954339942007959039524337809360913993203485623878501836329594368309888038663244905138395997368272478763961\"\r\n        \"3141872635547279188040318374333051363586680061786428168335572053138093906454741954803466796875e-202\"},\r\n    {0x1.031a309da2912p-668, chars_format::scientific, 517,\r\n        \"8.\"\r\n        \"2640741741205575704886671257776920898830696348304845258875783028559751437157907478574887586455610818958574\"\r\n        \"0117180728435510741583686422632774929222632147511918567229325831684032651922903276735266790117843593501601\"\r\n        \"2515772658634021392622635795100871872629560992833058770828358801605333052744848692059467100573291501861921\"\r\n        \"2965168501531832990733805673234966033806861779304385144732204173637508580888072780122033030001124800084442\"\r\n        \"798088493409434384997049557284279503347774175966576788721074109389519435353577136993408203125e-202\"},\r\n    {0x1.a060575f96216p-667, chars_format::scientific, 517,\r\n        \"2.\"\r\n        \"6560666151344702603270112657977499843280481963854547007415424282841408834245148563080751707062214127712174\"\r\n        \"6575089241378645724002796193936213328030191138196663527134590072339814022756945163490059566462430178303277\"\r\n        \"1228244858625675383094839366484676870834540231014217479000886731065845109947279954974574188657815117614123\"\r\n        \"3386435630286269060704468642455055794196959719254965002131476394999432110093478415169008939749380189172464\"\r\n        \"419028229169215643606811336644663330285421791733774070365381447800245950929820537567138671875e-201\"},\r\n    {0x1.54ecbde19e11fp-666, chars_format::scientific, 517,\r\n        \"4.\"\r\n        \"3495214972934750530933724968222678819054125647445515129232273277394298473692482090246833126125365966736388\"\r\n        \"2354688517832178150409693045033840944581780922681152100231430786789827130799202367673361512373001296052937\"\r\n        \"0144885754098436449140938587128444015910802676078333389890644004297198057112836294886007788657922515419803\"\r\n        \"4578833295918606774209296834570437196389294791061023161018923830592981622192484695052880013934282074495956\"\r\n        \"590306105321231640691595930251310123645268261612767922430489164753453223966062068939208984375e-201\"},\r\n    {0x1.9b65bb5e316dbp-665, chars_format::scientific, 517,\r\n        \"1.\"\r\n        \"0497223657147530461540305772931267585053715061256250505487087888061029408785894563215220970697678764383480\"\r\n        \"0325939065916205702309557577375277159458987036426427633182733447713021968370263145361858036928289137615212\"\r\n        \"7401495504331960559979975536391905723334450553852881134362068216711904999364434749875519041157852477294908\"\r\n        \"2822453778469194141465743679238160144163995956438907303935779751926152780243481780495784919204856732854249\"\r\n        \"500399151396209309650004291796200412761177808216423411324935699440175085328519344329833984375e-200\"},\r\n    {0x1.9d9f0bdc97dd1p-664, chars_format::scientific, 516,\r\n        \"2.\"\r\n        \"1107936672284170528945594825984539537267894560074842735445651564636232548380045553302817073544554452002495\"\r\n        \"3381174620534078658991556593400119244710172233781404038272600835408871699423495545285788169382119890019819\"\r\n        \"4201664584882960325446094595491519667713215219785422905110363553929458253876328347995783978350150958928634\"\r\n        \"4404234645121978246820592353953489916252647358865343115582584946414230154135689901732367690272225496245117\"\r\n        \"49407430127543500008710404569387590416050499587800361178668850925532751716673374176025390625e-200\"},\r\n    {0x1.93eb2c4f59fa4p-663, chars_format::scientific, 513,\r\n        \"4.\"\r\n        \"1225583388333102048516138791115797958837443685538615330228158010372085611196534261347478949518515573803887\"\r\n        \"0427766833577772299895100679885999472136933656647575247856639421484005247092295404547283959255810537283939\"\r\n        \"1536152805377136989128030010671552377676024122283837285170688576898765577337301783627428040617023286366646\"\r\n        \"6304756840766048041588267560017035084467460711609718511878343601909600068154087444256240183857041447304877\"\r\n        \"66761632079166770683820072204968831426390708208735980111470098563586361706256866455078125e-200\"},\r\n    {0x1.8700df2babc4fp-662, chars_format::scientific, 514,\r\n        \"7.\"\r\n        \"9814802786247251835728077164402394423392733891469600650972933646922261786684070011768202491345213497635405\"\r\n        \"8363929473900800406081157910353783243643114657359608848833361253991272841241506805336597404984340460111575\"\r\n        \"6660220570634633816720601395545604136254404189400125104060973148928687734799098012124540258682432908196877\"\r\n        \"0832041763169112950312043616184359878531487269768561814660148368024122515583353773744932580874663344179382\"\r\n        \"612758572700658879417422882008015735820127939371092240516958327134489081799983978271484375e-200\"},\r\n    {0x1.b201def031dfcp-661, chars_format::scientific, 512,\r\n        \"1.\"\r\n        \"7718621999986474927820511105591201858912597837406619766922788131515103038772434517005243859964561302258421\"\r\n        \"9802754045709795325932881605994542308608831118420588061617714154977002180480859035445177618929493918433782\"\r\n        \"2591600499156132639399865379537611196535055279648285165951017807905457511484142062562046872721511722442160\"\r\n        \"1426553623832184397323279116431379887141296247183522062676919582794723562211028612905055854024015629021129\"\r\n        \"8337387790447592797183168010955799288442025804339585715041494040633551776409149169921875e-199\"},\r\n    {0x1.eea8eae3e8e15p-660, chars_format::scientific, 513,\r\n        \"4.\"\r\n        \"0389599243158304571394333253525250389507631147978093452054769366480656241867872583554732831311043329402127\"\r\n        \"3363893780503478092860643094562529070727567425705557388421503723273887240863523056769045564816791339544767\"\r\n        \"4811798960347663619673711377735935298979851283703861602303938137477503201616025923026704439389500584641456\"\r\n        \"9114236964868927498070315671368575179598358409648827561251869544093389097568519080961306269611881755257923\"\r\n        \"57071395194827800525263513822042296462436685865367291814465033894521184265613555908203125e-199\"},\r\n    {0x1.390918e84e1b9p-659, chars_format::scientific, 512,\r\n        \"5.\"\r\n        \"1119492579282878449920089216681553851133879719260531373201034289194388628158048325602868518451980288065475\"\r\n        \"3328687915381964890604155102827426856253986507040691348861285321350417983375890401837008594914469552729077\"\r\n        \"4041634025375852486627406374778113240174679877779001695754357098999719528767000365619537633912001008295810\"\r\n        \"4111194123452305704581476943981312220929979415555290962822172556120286736561042880277446914041656226018140\"\r\n        \"0463623856109377838127752113794699265665949440735904563126723587629385292530059814453125e-199\"},\r\n    {0x1.349996396a2a7p-658, chars_format::scientific, 512,\r\n        \"1.\"\r\n        \"0079029980377603525237940067452489874385429612174195934573594706121935473916862429397131565712352453110768\"\r\n        \"8142811950276179105213171370309953751158020788719826912383098267593711702326094595805498105681922999726532\"\r\n        \"4909688432503132216386611947197870773295666668788871748938567859669346354132428937646632915596507684775523\"\r\n        \"1852907339258584868938933224714470378079481955959311832805716821495059947675108015714103667421409304485555\"\r\n        \"3792288834043863450758146748423007478214340356358069694664436610764823853969573974609375e-198\"},\r\n    {0x1.f935ab4c240e3p-657, chars_format::scientific, 511,\r\n        \"3.\"\r\n        \"3000803685506844689972816481749463828043574066484070851351960926134710393016865520510979359197005978741538\"\r\n        \"5457598964481630013120758369194087749928754243965822423618640689642584934167891050733801943716663854770925\"\r\n        \"8669749210069487078131864042347118088271846481163803328753828032361946128656564185923045562644481274673168\"\r\n        \"2442894934517445593122976663972120711272481059100994734541198539955373713891254486701781695330533778123947\"\r\n        \"552216106532507338730815426432497099038104195443954491651084026671014726161956787109375e-198\"},\r\n    {0x1.a6f53d0b3c96bp-656, chars_format::scientific, 510,\r\n        \"5.\"\r\n        \"5256081634540492912099873315946178218679701636409896216166339425112476137903833335081550464272182350571563\"\r\n        \"1649173618325315650797318358082316818623716988646890803244474427212087305270872800356709989796858446518028\"\r\n        \"0007153929447642907339740642327205632776395602540495277658534898752570556826974137137544575680121747318156\"\r\n        \"8109294857884968121748814804138707666969927662354233378783086514773899604185508664921655337560966881995309\"\r\n        \"90443024609879186497798459794215161380336108314093035431824318948201835155487060546875e-198\"},\r\n    {0x1.fd60024c9f6cep-655, chars_format::scientific, 509,\r\n        \"1.\"\r\n        \"3309156466126676327720798888520711121310973719016756617814609392099367961465512997004022190634798593712344\"\r\n        \"8090126543369123336008687248835603759825341297324826585552662290670252876445576563127635381521847011482567\"\r\n        \"7842445245383024757386520155419520590180607348277590132836378469352051761008545687687211422030370707996919\"\r\n        \"4632854436567543001424200212283006776315002739251470698678414022677441491080589922168267970859024072320361\"\r\n        \"5400917553291417625497725089895008484400045455087191470511243096552789211273193359375e-197\"},\r\n    {0x1.e59d51e4b3404p-654, chars_format::scientific, 507,\r\n        \"2.\"\r\n        \"5376664846351879796446894886180118923517375928916788468439012038559075591863943949905482322123331177881875\"\r\n        \"1175818045667507501033007502798482889114822353165030685871064806380979997518713085247211620359113239321892\"\r\n        \"0137447365082778750155424105285638558275846595641108095833746918637233220466393816326595449266228517373855\"\r\n        \"3977212332931292826069615658590284856893342692154277412999385588950569011586612223617034264066429835291956\"\r\n        \"64034560092739263995560422194101981991352402767692097995677613653242588043212890625e-197\"},\r\n    {0x1.8f3d063ff6ff8p-653, chars_format::scientific, 505,\r\n        \"4.\"\r\n        \"1725845639630823234884227494718580270580351053715713703971375362827503015835943180643599018229301247410673\"\r\n        \"4531370235114440276681218585911086934300107994205504714104860990795054228564285081786387946659435399143288\"\r\n        \"6039995130765713915101684430478057187716062578581352152485071389375497738696764199545096908565956533808131\"\r\n        \"3066078143179085025594301665865165419361839755147261933143617447462954222697482489653056327589852788118074\"\r\n        \"865087443355257133659824688533856429351574790498347056200145743787288665771484375e-197\"},\r\n    {0x1.8159ef44ecc50p-652, chars_format::scientific, 503,\r\n        \"8.\"\r\n        \"0548915652553614245327177394068343716266241601526344429862653871128012696092458059218804885886107480434857\"\r\n        \"5996679239026442252671328552262873096601408628711791229287582758527981933915133142134968110008715888249271\"\r\n        \"4360596305961404470471333694306867890527358826950270156557243671697176671195161373933098056018737049190157\"\r\n        \"9062338058785059859208293885656813869546314004329986095442735468526295545526700031871588905460237269435492\"\r\n        \"0045505660403734502280634268682688319158924361573781425249762833118438720703125e-197\"},\r\n    {0x1.72d55008d0c7cp-651, chars_format::scientific, 505,\r\n        \"1.\"\r\n        \"5502849382509784344046037079839787991991438980451926341439221279817304432312682866647314718184756317272284\"\r\n        \"0418818164653948573900468129228650155998421452040946741052202506711300163335367314534852081645212273850483\"\r\n        \"4936009445548134585828779634942569389313670043772850997818968097978274270563993945839657893655782681355924\"\r\n        \"3399450305997531733663209449593963941246859189366865487597377476931307594702606413878721039121116753323533\"\r\n        \"807929870963298864021730228539197981164725337333010202200966887176036834716796875e-196\"},\r\n    {0x1.9201b21128595p-650, chars_format::scientific, 506,\r\n        \"3.\"\r\n        \"3612132087463898062764140684189935461768684214886003230114344682573470604125696689595274182067484837098156\"\r\n        \"7388239748345166372728200991082722447070470950976867382049849321900596490945089196119817194645074654642382\"\r\n        \"2293731129894706387694427155598543964629550957151612379995382696796015118450028002145601154875875180150576\"\r\n        \"2629218754188327338915245534983749038112110319832390876772625179935411466060958956629202109968362912633613\"\r\n        \"2681375017182897009957109717175163086000551360132959644033689983189105987548828125e-196\"},\r\n    {0x1.bf95124bfe3cep-649, chars_format::scientific, 504,\r\n        \"7.\"\r\n        \"4845511815508472389273098151681950055020091161609473435727151103841950465792552422516369304948060633102603\"\r\n        \"0748543057238889168858814345038221851332602680360589796942496976998706591507226986479450583156967310376947\"\r\n        \"1550616591376104244996055290823711542442328688452990316118309517988468414880165494471060878616231312672161\"\r\n        \"4660037498120830248157761796212768295676112842922578987382164266246048592784044581707325600021518482162211\"\r\n        \"18106040902173381508385840983168502105714325889351812293170951306819915771484375e-196\"},\r\n    {0x1.05319129bc0eep-648, chars_format::scientific, 503,\r\n        \"8.\"\r\n        \"7354525906889357430513499319853860181982631924149000392085053971647451377290292578090547222488245265834970\"\r\n        \"5414899403485023309716361193505231457636757444187175708777555726402719541396118635204985184043477505618747\"\r\n        \"5847559854756176999196488474136708647066869380958111801978413140177547807244097772736963227119156935670681\"\r\n        \"3323315849604381739911974325657778568932885367514619084065148363560917676654922798826780533306406883703832\"\r\n        \"3167938402444969732430229950789418789762474926163804411771707236766815185546875e-196\"},\r\n    {0x1.45af476abc232p-647, chars_format::scientific, 503,\r\n        \"2.\"\r\n        \"1784629336342830433438401052550444396082133172046876130098970781925971096906924659862775926914085559598218\"\r\n        \"9400663017394445060955050790938880349417984181161062059937297849164047537024227807102802573693182922323768\"\r\n        \"4988835519769163005404421634184916315156946538119863486913379372954302859826455909344216690658954228864068\"\r\n        \"6518489319695139936631205914340242708131038022972028056540459137983053554561488795642242191718171201322878\"\r\n        \"6261160061353215424961010708322035390495374773678349811234511435031890869140625e-195\"},\r\n    {0x1.08742c45210fdp-646, chars_format::scientific, 503,\r\n        \"3.\"\r\n        \"5377948750753546389134876678525502149469329636100241627697547777540495032071588666485860794956076980685142\"\r\n        \"1648973041035651788522826916676596088401130357999256151013354430964513824609480628150120736931652913772699\"\r\n        \"9982913797176673718855319142272201371103880783459641259655175318625370923447186213384332996959675405576982\"\r\n        \"1423466528711936764992224608103888079428547551703232208782450602977450285489861691938795324543533418630584\"\r\n        \"0889333459077886488131187709654153499168327545731926875305362045764923095703125e-195\"},\r\n    {0x1.e06706f5cc1f8p-645, chars_format::scientific, 500,\r\n        \"1.\"\r\n        \"2853400648125002047663650303839837768770868178827228680425989408577299035277697772519128024365042269006137\"\r\n        \"5219583393883196975265503479494447072597343928704527629935234980629701495621199539547037556144229442345470\"\r\n        \"0796064280527920406982515008146955967451695398724643112299643103663775673910972184612760788176258685407613\"\r\n        \"5642395098320769603757825318678910573482963656312687065092042077801896417210663056529091563705356552511784\"\r\n        \"8744898314956824515887701286388062303644996831053504138253629207611083984375e-194\"},\r\n    {0x1.c3b440515c5ccp-644, chars_format::scientific, 500,\r\n        \"2.\"\r\n        \"4171125083478185854577296568973058488028696120773687858171527751677783966413609421158848849895950071414992\"\r\n        \"7767427664623224802204953078177500746806460413182965492695822167375307505348079714337003905535333983330970\"\r\n        \"7181502126431081191942010252850595523287033985789669321526444757608927731550951889320987373819142026991025\"\r\n        \"1567538566070467758974459713102558552732954856343026723690055888710021350990995482922051405478223152042970\"\r\n        \"3251711643812898068027460606431856653120160416392536717467010021209716796875e-194\"},\r\n    {0x1.ec1433b7cbaf0p-643, chars_format::scientific, 497,\r\n        \"5.\"\r\n        \"2663240453669009136451576689712462018780864628757726838532298564973456520124312425159168990966344080685284\"\r\n        \"3720480382087984234515131775332141605827039252921143204800571618187675999431430968489137764119560673111591\"\r\n        \"6759478685050363495734853368006928166562436836138049592492697802548236478358520529617766739001729760991012\"\r\n        \"3862634939696554148089055580137656188780075461507170901101717759741393603409206482184290891472920793565653\"\r\n        \"5253609046038903154631796610265874469813951463947887532413005828857421875e-194\"},\r\n    {0x1.8c19569a7d35cp-642, chars_format::scientific, 498,\r\n        \"8.\"\r\n        \"4782562742821825187637774072036156880782589649318925320904558902615305403899383502544659296812445003369004\"\r\n        \"6922729704209086787736189120322426639864121576693397330358676265593198834037152235715817069429196893999010\"\r\n        \"1011594016395775564940509800763785671916185917507549352955056824078478279323005977928175814655943739879529\"\r\n        \"1538021924646821332904342665749434907103144778825208546062155400334839930506320175047419033723187526321855\"\r\n        \"64516811751524813377187526721215880820547994289881899021565914154052734375e-194\"},\r\n    {0x1.173cac50c28d1p-641, chars_format::scientific, 500,\r\n        \"1.\"\r\n        \"1953794466200874950308910223847802663992105229667520001447180957079004440344103290919539635946785467448663\"\r\n        \"5101108320842702261329824849337500079159383293237143393259388273511334641497706315723447326003299101241322\"\r\n        \"1117379942112771102982874993847323660037994013482573676273472522789803757300898880108155726096998947940489\"\r\n        \"0006031075166624593609122438130204229832717825013013180449460185827436065860119332649187858804645882720105\"\r\n        \"3492998972995592881612034128274647988565693168538928148336708545684814453125e-193\"},\r\n    {0x1.08135c62a0056p-640, chars_format::scientific, 498,\r\n        \"2.\"\r\n        \"2609509033348430712795357140935977280309512733698287057990757911935349021821947685234330624308209739910346\"\r\n        \"7772270922940612799108025398381661528666224493282545567170070803473785763542388437441950076122245663201438\"\r\n        \"0804220304282042074737823775324236510491104141195362756591323881292372606025430047584104793476982829997116\"\r\n        \"3833702491013210688436845620875268204319510942541720735041457845466698101522952622178680700662949823493228\"\r\n        \"83116291501047308902301260328539765642741343754096305929124355316162109375e-193\"},\r\n    {0x1.72e01124a3b3ap-639, chars_format::scientific, 497,\r\n        \"6.\"\r\n        \"3506864504234787217892916858872910373177620746625376458668035645917888586328943349478973125084439934368395\"\r\n        \"2454007404739476733674972532888856971140947480305553043580744964130001124409209147401842341895272817350358\"\r\n        \"2967907318694311580157475110469517637645997431939894575492729066843808617131234673944976587290456837115006\"\r\n        \"8097358639249101610267432497854886217853527900415351535406568855784166730515150549809118454920495773146011\"\r\n        \"2041598585348160002997507320447907741556292648965609259903430938720703125e-193\"},\r\n    {0x1.e830eea3741c5p-638, chars_format::scientific, 498,\r\n        \"1.\"\r\n        \"6719092307496787724810559419625415421265345344982027451035214168134737544212060731999082598951652542812153\"\r\n        \"0851622757957648957787354945239842973641168921883094179012153842080031968856243689294313054164220779419616\"\r\n        \"3185205252988408837352595118420621916054112930407241813976472546961527155883577597985057849232945503946152\"\r\n        \"9700917317130576683212396338930885138139608143780624593505064057096724037453800040558676726388410965108000\"\r\n        \"85511376306229931840104611302550048634874002573269535787403583526611328125e-192\"},\r\n    {0x1.a55edfaa629d8p-637, chars_format::scientific, 494,\r\n        \"2.\"\r\n        \"8861375664964044259358368710583120953117948717615414732645978781844725959856063670973732226688698008775290\"\r\n        \"8855286029832137603479464792748518405725776034634453198114500345112924366610049934881872894137471578343997\"\r\n        \"2272095705181453677718281937893424772356043639946249738131015138508747363998350555539212469835793234130222\"\r\n        \"5611134741196263127354006994422412740010583624493733640101270323986057803752221480551347236346238685334139\"\r\n        \"3126740018852601983569028279257018265724354932899586856365203857421875e-192\"},\r\n    {0x1.e4fda41f3dc12p-636, chars_format::scientific, 495,\r\n        \"6.\"\r\n        \"6437958622447088767008821269554630170953468199463824514799297420575734289189965271614292158798703423278770\"\r\n        \"0211670773747181252710225781433614349909082934153740628607832041425472458132448888355030553558474449140267\"\r\n        \"7532352029048675127730409628858188469012202328932369306696111994192499642393175288938545581909362670265661\"\r\n        \"4142505131384975210072259285428843744450254240067804540915295982013954480300602499657994651473650515508069\"\r\n        \"48573291876921601661574797868976827164289034044486470520496368408203125e-192\"},\r\n    {0x1.b6c6d5b913315p-635, chars_format::scientific, 496,\r\n        \"1.\"\r\n        \"2021435877944512549874307758373463485567732529548696497108946777892373338498825233998851190169288250470729\"\r\n        \"9837565510492003253409646038667103199192178730894714971640838750321839454360839834009539364164168776033623\"\r\n        \"4187003338717194709455390020102928159467155523872584982511528028983638984992933752520154204626796100307564\"\r\n        \"5349437387211946890857172860201104002606422391817193670983149333434914995143903809339065936913317470198921\"\r\n        \"690228366842475023103730967012105212976535995039739646017551422119140625e-191\"},\r\n    {0x1.3d5cdb61d5eabp-634, chars_format::scientific, 495,\r\n        \"1.\"\r\n        \"7389964555399592703024922101071638710228058853010454955816287203412674019899135279944202376472905021337258\"\r\n        \"6258962377260188928899086845828533503606946253121325963450366034526072666759964392438712742370869822534456\"\r\n        \"3874894747840335256486925055706840475130878149016154785918583949575125805400818453276293215346026410674679\"\r\n        \"8409452115405004337540444738954378827964445928741978867217483445923848187815353826331562166817109812355851\"\r\n        \"91326326911503365880101742535317199678246424809913150966167449951171875e-191\"},\r\n    {0x1.f66ce3d3a114ep-633, chars_format::scientific, 493,\r\n        \"5.\"\r\n        \"5061029114396530055781180408544466257723099083034183419703118907194804421094663580781660676273528898210088\"\r\n        \"0431574966784461117119754411304894464276186456426615997746028595767878242155456834626624868962582541328173\"\r\n        \"2698743091955612694553222682503348082494541469600607497030280636718224508777918266791407040625019889179303\"\r\n        \"6039432538320513687547095452177893522474675770324240828465783630281774188233607627719489884195763554935119\"\r\n        \"805608804359250562788832806214445181325345402001403272151947021484375e-191\"},\r\n    {0x1.172470deb171cp-632, chars_format::scientific, 491,\r\n        \"6.\"\r\n        \"1182680642406057145274956363318000274544013834890966296936024088988282930612184978650264904063655374278708\"\r\n        \"5820049824373260415590233856953389263574865715472704679815904138025683990166563353576868412611739320572220\"\r\n        \"3061670363833037695225389013764717715215814805406610147515377607379775485559684197286852537353051075869007\"\r\n        \"5622999002133683147106802833986208071593930453200187676542794020322742581458245280814157780849754554959666\"\r\n        \"2062989989245184079000110764778863625679150572977960109710693359375e-191\"},\r\n    {0x1.cc8acbb3ce387p-631, chars_format::scientific, 493,\r\n        \"2.\"\r\n        \"0188412709311976353396884746311782549660027699626134416908249213603286354301183164885857133455556626170175\"\r\n        \"2986650828364633304418446703878674495167794883307172379160008761496010293765369166879233431965874199769146\"\r\n        \"1247264270712989910977467696385844786711157938997013783312673882579017433385308124601678176538989823901426\"\r\n        \"8504426857552292598582757513121935280241619514931840030076728470889198521213809709086287440776710908200405\"\r\n        \"735357811794408235582388012711863023440628239768557250499725341796875e-190\"},\r\n    {0x1.9d46d3757a126p-630, chars_format::scientific, 491,\r\n        \"3.\"\r\n        \"6232946244639112367859903422212363335346720737453523731673042531604023172777826136821456024225495282135527\"\r\n        \"9147249851468071176677140162008005389158117032353189569393774872787748437635734676141743605239899596247807\"\r\n        \"9173907474651509305526426663536509510071332191959766754013674972380722084744542075898159198263972544323990\"\r\n        \"9862127078321763680723742293917247854494085650342015232239396059322574446979695006954270328936113654558116\"\r\n        \"5109048996725791055641976122492220468984669423662126064300537109375e-190\"},\r\n    {0x1.5c67ae0e78895p-629, chars_format::scientific, 491,\r\n        \"6.\"\r\n        \"1090986836497964518361303425180367723651770315999856077892729499033830962250844499257483134844993286529957\"\r\n        \"3396737151577326827495417291920603068403409539650431533658243587896155378299195574892619397055020676300748\"\r\n        \"4081137435305555643552213889591461713709239993638313481580791776559826037819644583208179233694714627479712\"\r\n        \"4038277978644551890909885049639824861857655631507863094307400842947454757116813778845481873427571851486232\"\r\n        \"4305325582256049241387124183744194994005738408304750919342041015625e-190\"},\r\n    {0x1.2f87783b2188dp-628, chars_format::scientific, 491,\r\n        \"1.\"\r\n        \"0644449452139395541202935621152473437563772434876136314750186066160168868665485527429324719400873126529471\"\r\n        \"1776208189233000924188079381994589329829074340081641242779083161698962978837918189289798934978657684522178\"\r\n        \"7193869606025896830482212763406278603126524969759522714284262548258216685128420411064588664951016966673939\"\r\n        \"0845242506290804466119517491841125808875606147358759849354078294511591903760561737780825280148148379041554\"\r\n        \"6575626016714499472357838456837431095891588483937084674835205078125e-189\"},\r\n    {0x1.45f46f0331583p-627, chars_format::scientific, 490,\r\n        \"2.\"\r\n        \"2861786222533954646339338691509779541402264763066115611162751161332286389741951997410211952913065640508722\"\r\n        \"6575869024011507037043987193802942274169970521619512563506532093525808423532637902062603827257377383924857\"\r\n        \"8834042883646674050483274861201465476232289908450602259119542804457889706508812587002689534404145674260289\"\r\n        \"8921599918546506922933261671353147226446502233455978523651976194012189261061433226344919763518640419647944\"\r\n        \"054596842767851933093579096245573367696124478243291378021240234375e-189\"},\r\n    {0x1.6faea09dda3f7p-626, chars_format::scientific, 489,\r\n        \"5.\"\r\n        \"1576905486221095495936291261435152848936470928518784833293608233493425320242788522830160136503780002845701\"\r\n        \"6048122210607633734845264378147025848275264231001539119629139628017208552752229789388978000511788179842606\"\r\n        \"3317970612546358672835740360045451972628457734270690142631590928444025538183708917796524126513769584005208\"\r\n        \"9566588457104934404172248545830966642830155623590373212577067124362619633973442089846035406156342718763126\"\r\n        \"22767073101055486120613234601872676421407959423959255218505859375e-189\"},\r\n    {0x1.fd11ba94c244fp-625, chars_format::scientific, 489,\r\n        \"1.\"\r\n        \"4282019181687436415805061570582957797941162203963167425601499169707767566576137048543241444320531168598156\"\r\n        \"5115836884276861958472129897937475431167531842729039094949094354884306009515806723673286503437496509105787\"\r\n        \"3782638327303358403092014499545668583556513012056701640438893215817552078525004382652304169786365593370561\"\r\n        \"5949165720580529687699459243337232320280125250787257153626075271940536628789995287096375595375273874864083\"\r\n        \"00778929339319455162830678485175184277977677993476390838623046875e-188\"},\r\n    {0x1.c90c420cf0b65p-624, chars_format::scientific, 488,\r\n        \"2.\"\r\n        \"5645102658000638077662655089472362542882984305302201347516398173403533180585976534161315640938051666852184\"\r\n        \"5162493546322932210500567375141201380918228455858352480628723115250797285514387548153230939412238584051887\"\r\n        \"6678363214204154015141209497251639796833017773424919290240970816054977116200075111851757962310125684874866\"\r\n        \"5271116317931001749649690210063583111446018923027887259222427377589680137555787871347433236980870707367622\"\r\n        \"3030545509731425180281923215108719205090892501175403594970703125e-188\"},\r\n    {0x1.d391952e49017p-623, chars_format::scientific, 487,\r\n        \"5.\"\r\n        \"2470856179554396914220750697206729680930693393806189392472186972317553487714556786098233769482799791950847\"\r\n        \"6936934598345790216268399728663746626185262113984143990716591357062201655858886386541140904956275446729344\"\r\n        \"3451534230378626979844440459329023491130157174730485458049630374966675633574693062515331282157551074828734\"\r\n        \"0588927778646025401932502132098401926185663426957522247203760063557453586246851349782431341310393754891747\"\r\n        \"355941298035050636481939345667768748171511106193065643310546875e-188\"},\r\n    {0x1.e503a112289d7p-622, chars_format::scientific, 487,\r\n        \"1.\"\r\n        \"0885720130033327524143787276552924485207749474236947745950934265104724459837447523248118491135661241355555\"\r\n        \"4232574757514637326804013587665252102597948137223374246525570157421645385185077366595494308247722426388075\"\r\n        \"3119476116577310064807731317312781001077692695195412670562534730271894253873410722316538605384606174341590\"\r\n        \"4126374880046187387430900137190727541241598691090538953096044591639726558323746143783829642440266358936970\"\r\n        \"699956723022336843044975684957620387649512849748134613037109375e-187\"},\r\n    {0x1.e034bb81e6223p-621, chars_format::scientific, 486,\r\n        \"2.\"\r\n        \"1555608982793881032727700454096876448057956857157050502496261686574263161511608285224246722003343000927303\"\r\n        \"7170918392497696227267889285573432933779319637407407790610774179847495887678439501670748288585196870929692\"\r\n        \"2631032851601097932395854292976963625544033998797106811775949503368245505473163357535226402013752099869119\"\r\n        \"1325549281307961732743070166406501415911305100704902729441738565684824332740737975732433035435605707383320\"\r\n        \"56586222159526048335574655023805235032341443002223968505859375e-187\"},\r\n    {0x1.7b3f7b7659658p-620, chars_format::scientific, 482,\r\n        \"3.\"\r\n        \"4047560211390398233126309568152129229163573085233746529962515141769860702660931684182926361748771674041996\"\r\n        \"7495013736445763182743473510953840736163870669821867413809602871013516774422732969041413817218575179638005\"\r\n        \"0875945116419344891273141268326046666030950270526350859421486707701849832266291902224529676973277412963424\"\r\n        \"2022391711546658347775048931980490466521054406862017429528749012178022403631956930652304619750657559521682\"\r\n        \"3978488395241784846001475983712225570343434810638427734375e-187\"},\r\n    {0x1.c3de648e8e3c4p-619, chars_format::scientific, 482,\r\n        \"8.\"\r\n        \"1134394501696493643970170895844859050224211984805270797934948972160041994065592646160497525561847540423315\"\r\n        \"0813807595154285254949233279422425559267946284083567427347887635007556376708519246514086205471778512341436\"\r\n        \"3518932443771014783422046775533781186699620751308267263855491161152739861928620614332415977705700567596766\"\r\n        \"4862641318690146376278630164143314536054904863747143635960925293922708102025814503615280997269393301674470\"\r\n        \"3307415890333677450929616981056824442930519580841064453125e-187\"},\r\n    {0x1.5c1fb09f4e5a6p-618, chars_format::scientific, 483,\r\n        \"1.\"\r\n        \"2501335652550156692148201907563971897160094599357553635775710000794313839387986491396580421848511127121467\"\r\n        \"2834212759262118551641268797951714831348473471191972599936690879566720474936486069169882451620075746975670\"\r\n        \"6186070712175957038367674918959121878800275599658681630037550050069344073450148603507547516824435960857783\"\r\n        \"8035657183539595621318513297001759908054939222484006322563328047101387846029777029392729213061137991735191\"\r\n        \"96290497784021327441761339827053234330378472805023193359375e-186\"},\r\n    {0x1.96cb5454dbb84p-617, chars_format::scientific, 481,\r\n        \"2.\"\r\n        \"9216455145197990881697076029069682383862367622239909838970901266656416619071823783376826565064724501517459\"\r\n        \"0701539592225503271024718266218547248626039047992425493790137556386884876463021059476422710406079165707647\"\r\n        \"8035331425667060181110341423930489375804406916453089986931472266944633195682980465023708899952177106470268\"\r\n        \"2690151782591846080679893335942503991582720417747237342953988826766205275785907263374548647122176495933127\"\r\n        \"570825962591766385145763962327691842801868915557861328125e-186\"},\r\n    {0x1.17e326744eec7p-616, chars_format::scientific, 482,\r\n        \"4.\"\r\n        \"0203689191003500137032618357647146694952938707754104131177614885341123472548521527075537816698643711941179\"\r\n        \"0099119606618891309209407696274360253203429336179171351133531689315057310507797931718347867905142878647295\"\r\n        \"1295378015371889396345363159252325592648677983269855951990787798154248325992797181678229344332440102948264\"\r\n        \"6293076484812638568001554150811635968863201084650719977028858419487757190406448299518015352159703896986728\"\r\n        \"0321388645943753679945498191727892844937741756439208984375e-186\"},\r\n    {0x1.8d0730dff1c35p-615, chars_format::scientific, 482,\r\n        \"1.\"\r\n        \"1406014918543048611129579046078472017190434076827676333703184492562745517458722933909773128140863811860680\"\r\n        \"4407235198747673113581675421832304460289731814158715726226721499893358385121455295036409753755696291856376\"\r\n        \"8098784914446226027812795614298253285437604990024681376542185656441137513607157191982929093989227066316968\"\r\n        \"3454585239942627682309380956856546873709262441718817170600788510391208708618239903357485935403444561300988\"\r\n        \"9522537510867503975087178247349584125913679599761962890625e-185\"},\r\n    {0x1.84e464adc9bbbp-614, chars_format::scientific, 481,\r\n        \"2.\"\r\n        \"2344564074253929881602452952105121463033999896331509753060278603561383062671020092513964622839910827392979\"\r\n        \"6120725053806395919718505867953302822071585340945473684155811269041734009391899894892884998655950936230307\"\r\n        \"1669852431153178035825596725766172839564272885227331529420345731439115502642545507672856789487309544230679\"\r\n        \"8912794588961931961324587403615865918507170866263260790615432342540019426259929855207218540356013049043725\"\r\n        \"298895767697004814678063411292896489612758159637451171875e-185\"},\r\n    {0x1.0f78207ab56b3p-613, chars_format::scientific, 480,\r\n        \"3.\"\r\n        \"1195598970627892124787027828771258554467274331378106474180853903784890176470576278085246910031864176926682\"\r\n        \"3810097575938279721843585234379937227458526717860732051290204395780473433869536107639158198822468448383115\"\r\n        \"9850946360996498401289488125559457224226066168139585512180838489229070664388435003461492126740239264693377\"\r\n        \"9324794218572275222475371415195959735820466509414273243741084753632448488495906132266682527804921511867261\"\r\n        \"44134988124453043700778920310767716728150844573974609375e-185\"},\r\n    {0x1.5529ded69b52ep-612, chars_format::scientific, 478,\r\n        \"7.\"\r\n        \"8408892826173784349899140483375110468365507426372771215508168337980921036043285415746083661506063036302466\"\r\n        \"0337267991264308099236262848998613132804398487495251763436683220632776620778652222684238885184627406388017\"\r\n        \"3229920844992419303692750294188388326470646133479933189911245652940004567736087396799055775383956456338672\"\r\n        \"3024800062465207795949876534463873259186889135949555497350644501301606934956057533627187656477601229539927\"\r\n        \"078260013316828025420335279704886488616466522216796875e-185\"},\r\n    {0x1.a04e5d2b8832dp-611, chars_format::scientific, 479,\r\n        \"1.\"\r\n        \"9135749100368870646470019839026295232772871223966552993833368138787991754425940205303288817218434799653336\"\r\n        \"0676967652656209466863703861565021219253899628393157406814397593941242505553200228515413826724835127232051\"\r\n        \"9185851595688434551396579504904836374850383234197454697279713290430878565007147332017477402669464535867351\"\r\n        \"5775192868362553696596252586924323504526235631150752451721765189140363973209619061479811966865121637316157\"\r\n        \"9595099193750774857480934088016510941088199615478515625e-184\"},\r\n    {0x1.ebf813b0bce87p-610, chars_format::scientific, 478,\r\n        \"4.\"\r\n        \"5227279193825361739063351116581608889422003874799378804732418515554268862505634014557098902874036193318621\"\r\n        \"6690467386983882756961652575255407524524231250012838933730250624835733642161557413446773017614154929610452\"\r\n        \"4998635489828297481285095734401803451480336950909547116497526559046290615361439294561656735211425759983595\"\r\n        \"8658796913640401549715379516221334359696133496301930305779915803185229950546802865949446986687845586568652\"\r\n        \"642876913762791379891581300398684106767177581787109375e-184\"},\r\n    {0x1.c8dc05f944175p-609, chars_format::scientific, 477,\r\n        \"8.\"\r\n        \"3999229662967713528086187594173418172158294345371367977068288734445756810245726239154122121417804811678553\"\r\n        \"9260638908340859917786703727950548339528508554698659192678302294445813989552010648988331687084249678986072\"\r\n        \"5134086126172959651037933921293267583373144983517760442249968121280748656790906595397770655757785243584311\"\r\n        \"7665011821890292937224415194440719059952578889148712792501100830129843689192652755309251105434679191014804\"\r\n        \"94498409103999725378031371292308904230594635009765625e-184\"},\r\n    {0x1.b3209b1f6e28fp-608, chars_format::scientific, 477,\r\n        \"1.\"\r\n        \"6000703209667125522791462448559322479873062933223276333349152772387295549263802853627258955887541875044108\"\r\n        \"2947080038083309540852416217060880963411880129141024234284664106285251262025261537496173726779635481066239\"\r\n        \"1399956818327965395732286282182169589674025784504944090995218716248499475156431003783177219541707924492549\"\r\n        \"8325814926158454470942474826570277646630983287446062760977259012870381602771233702771674396301817368407594\"\r\n        \"07891672679545569391024173455662094056606292724609375e-183\"},\r\n    {0x1.5eb78be3e1518p-607, chars_format::scientific, 473,\r\n        \"2.\"\r\n        \"5793451325824551491141095667675624912529344342712005389262969789586908298595671025931892803478199322507986\"\r\n        \"8523010849281646737274885718408262502576874120606976940116290679237340341259636981155466151665848618173232\"\r\n        \"4032607948080657805132919680722936044837224175094957632003247401297641357721425657261766165473818699028835\"\r\n        \"9825505903137699079686289257017072435439734264967279514362822953866073386940049227380450195986556441556177\"\r\n        \"8167473687417565741952785174362361431121826171875e-183\"},\r\n    {0x1.8c46fec031da2p-606, chars_format::scientific, 474,\r\n        \"5.\"\r\n        \"8288366507307604041374269061151039091481400225143596125768084467228171073647588417776611518319759684136669\"\r\n        \"5557291353852212593508193848018264294866764758668148761093094182833021715126098317988401041652929218002060\"\r\n        \"2358184934865157857832670838256679385610036129043203830159719538870546915932165957386758340306712837687657\"\r\n        \"4139690927957720219748627972540410054088613214587368073136947535541347600289632712236225552316903946201217\"\r\n        \"43439748913939713048648627591319382190704345703125e-183\"},\r\n    {0x1.86231c6dfd804p-605, chars_format::scientific, 473,\r\n        \"1.\"\r\n        \"1477041919553151503755311242286463359086338700939173534433881149141551312845676541528433370751398526129520\"\r\n        \"5360200123442369544861627337651189410728311021716825316418209072205209059768027017097741944446106051476144\"\r\n        \"9260586341856618907842200283371765359783819221589931961870907795236477229042736793261103112697240517930987\"\r\n        \"1772095882680155257799467917171661002569274579372573148249479204708825803923891308204782759202811211858909\"\r\n        \"4147011638036293135201049153693020343780517578125e-182\"},\r\n    {0x1.6f91c9cea3db8p-604, chars_format::scientific, 471,\r\n        \"2.\"\r\n        \"1626294070138318712021828339014812165466875626132428688506066130661223800325245624218990344615529115525670\"\r\n        \"7498826015032971421773458480080315944694557039046086653470574190248564560937128913048158665762605822060055\"\r\n        \"4638663222463820196556288005293509078032902091923457112717105630806377089745970685933260769211709292606271\"\r\n        \"3883265602154051291339880146519818852439242793594288516683321266294987653057491978352698407891148399388724\"\r\n        \"79857372155276351577413151971995830535888671875e-182\"},\r\n    {0x1.2c556f28eff41p-603, chars_format::scientific, 473,\r\n        \"3.\"\r\n        \"5340830852507131965886973628844009684695670072958139623317371787746358871058121738979142765604242918427270\"\r\n        \"6832415724931842814426120166478731717470396051187190782581219012149682498960891262131383887862540827723812\"\r\n        \"7643023274199348054497036263959980391539791048593977360916969031572048106601825361653601806771067623066557\"\r\n        \"4051011657281000462617858827996936464081367646380909919085410798272389504087757458521098222151497599140581\"\r\n        \"7346111169208189295432021026499569416046142578125e-182\"},\r\n    {0x1.e2ce238120917p-602, chars_format::scientific, 473,\r\n        \"1.\"\r\n        \"1362518681203582246140939809705922332332975015608228604463964843232561988310452537437790568021290911866235\"\r\n        \"0839847885927093395163376953078064940732037455207673242572744714448661683497842412332824043550192279636628\"\r\n        \"0503312783365917365174312756198857236845666628455487179177649489943944605272828958999095810535518041549318\"\r\n        \"9818268179755941618181564000540778433874330833462914620292376177100970824204171827936477371939329301106083\"\r\n        \"3410329727610754702027406892739236354827880859375e-181\"},\r\n    {0x1.24196dd650362p-601, chars_format::scientific, 471,\r\n        \"1.\"\r\n        \"3748749674401770954459165335871081766876292885886953638318405208098300543963268873795361532633351527309260\"\r\n        \"5183293467910096607640374531111183083050881483551578535590574862217605392658691254251016040206211732176264\"\r\n        \"9513738716450171265643756029288065693302635054394259859478975337052256681676444287259784856070495950346420\"\r\n        \"0147147833503265827822922002568340246087493652923517964388001136742818825550149740093584171030834883177820\"\r\n        \"79866403999179880202063941396772861480712890625e-181\"},\r\n    {0x1.02bbba1fa294dp-600, chars_format::scientific, 471,\r\n        \"2.\"\r\n        \"4356505490995989137168281913610731830019560936055966573555888682095611638946741848058176225505118866181664\"\r\n        \"6626267444282690413817201444989379537984347462429716702593341950876461070954522685954552542326714837267824\"\r\n        \"5393625964579526328349325430932794835417522958299065595103892073242338952253770707833051812460982697751239\"\r\n        \"1397642546757797290343067143148163681852061908086271106945153788678767070284176602262881688759899668002859\"\r\n        \"52308775805352780707835336215794086456298828125e-181\"},\r\n    {0x1.7727a07c4162fp-599, chars_format::scientific, 470,\r\n        \"7.\"\r\n        \"0632264615999984553004824523934828389746815912663087276342193164535550939884152883670041383967458297749541\"\r\n        \"1936486820912787231863213987513973227977769787492778564103481765224649564842940083968386889634962937410157\"\r\n        \"3069328602934415866941417964147777899133182591019874029905970963950870131654961921749867946840387912428480\"\r\n        \"4538594740895098332413481316117502058978520795751015258819941676721527211850355917929781785411532757190855\"\r\n        \"2225891930742562863088096491992473602294921875e-181\"},\r\n    {0x1.8f0824209bbd1p-598, chars_format::scientific, 470,\r\n        \"1.\"\r\n        \"5025541635379650323807804926251313131836557909893686530962020768745327962627687341360811479854106994068553\"\r\n        \"4263173419339530468602130784596336253828333239650646771645717369473848852911124115928811400443967809140245\"\r\n        \"9813215515621469873636992676768817063884474168442971019069351420018247479917638346466764078010317901152627\"\r\n        \"3081216374180988281024361584175357121212766604713032037039974454629576819451922761645310017488437158483350\"\r\n        \"9687996466741566337077529169619083404541015625e-180\"},\r\n    {0x1.38fd6bcbd252ep-597, chars_format::scientific, 468,\r\n        \"2.\"\r\n        \"3571270014353365322336931950633836856113223159844998673765836415920035201232388224807330916269590271324890\"\r\n        \"4334731033242228233263401451666324072513909789496747974372655367892497264045352322984236122954019123722538\"\r\n        \"9295828403612962912512216580766983652588284187430913252738151214604768290342680303710604633254838264665098\"\r\n        \"9962035785843582809055612178144212382821531464078007017087908041952151860790529094170570698810065899235103\"\r\n        \"91969274646584153742878697812557220458984375e-180\"},\r\n    {0x1.c012c11b55edep-596, chars_format::scientific, 467,\r\n        \"6.\"\r\n        \"7488790504233201532404821012783315024399985087878933914326993678810118949573654609919916051799477574590605\"\r\n        \"2555587820395782532203892095091092520933306954962049724050297871723120684162663655400693709284384679579844\"\r\n        \"4229626121510547440413205330956979446376661290569033353380029097827152899554534893469580751628492269227510\"\r\n        \"2307945654300221853112443217811972597390157707545064145290234402918947143290826226229722152773665129123377\"\r\n        \"6865652327359157425235025584697723388671875e-180\"},\r\n    {0x1.1aba0d7a89944p-595, chars_format::scientific, 465,\r\n        \"8.\"\r\n        \"5168606875567321498727662037372810859520433921783123995459117425504744477611215726819499227583845539616812\"\r\n        \"5239580447740616724353434082982514047154634288153751058253832016000933674669111863819139788156587916539153\"\r\n        \"3715294248439635842170170518537437533149976925664023652905320015380511107595544259672890160470678028598596\"\r\n        \"9007664706297339134454910441203849873467808766000671452678283228867172077673641166000719771578738611874552\"\r\n        \"84682545908481188234873116016387939453125e-180\"},\r\n    {0x1.fb338c7268b50p-594, chars_format::scientific, 463,\r\n        \"3.\"\r\n        \"0557865935212958394376086957173324154082751196112498539965546191859384115363199888292606660746361125668283\"\r\n        \"3404840375713838316990182046660217446344946472933812140353250354288117258476863349697332813418892391221042\"\r\n        \"5909219328122261566214838211818211400416693170662727113985478183823335721980028025030361593055215041959837\"\r\n        \"1905219233320642590550021466201626391931891093110222234205139677685160791537656843706503862113584384899329\"\r\n        \"926543742885769461281597614288330078125e-179\"},\r\n    {0x1.51b04971b0adbp-593, chars_format::scientific, 466,\r\n        \"4.\"\r\n        \"0690125758357819313890653104659603597467313761268844991087784245249784829428847210475329294275518716491653\"\r\n        \"4121363796664234945241951639537426384878238066930222719005716702736354770121804434103616468073547678393421\"\r\n        \"3866666956214335399982637848595661597381697776886918409632666455919979846021303241798302378411367222817251\"\r\n        \"8260900155291238599964614405125995189283239303437292544747420798857552235240907507102919238856499693549029\"\r\n        \"737782429805292849778197705745697021484375e-179\"},\r\n    {0x1.a8ca233514955p-592, chars_format::scientific, 466,\r\n        \"1.\"\r\n        \"0237088948578388358098853060992576583367816569954351981673902681175827710357388491891184587825924676377634\"\r\n        \"0849697422669866470721371511852998301084735245899689191518783967305093246868883270208809502585863440586583\"\r\n        \"8719400606468608999474499247944762751706090711502562362059161157946679758864812671596322877059632473937360\"\r\n        \"9857690212696944678148132075078524683281354026644263575846458787445324344890837847883377169654004993848352\"\r\n        \"318697170204586655017919838428497314453125e-178\"},\r\n    {0x1.402ec07779db3p-591, chars_format::scientific, 465,\r\n        \"1.\"\r\n        \"5432289335652199429529596192176095228012899535553233590378023000243990210617168196490459969107617309775975\"\r\n        \"9271595161852061445606846570553485751629922977685294026681803756969797432088015163086656410384375134034845\"\r\n        \"6654787834477195943853030778904275812187520216131508463375328855191606753215808123343539126680637528150749\"\r\n        \"5586400182624672163254831082909010625241829629378479391253695739321009052894816650751602501038193173413725\"\r\n        \"84218017749435603036545217037200927734375e-178\"},\r\n    {0x1.f0aeec50d31b6p-590, chars_format::scientific, 463,\r\n        \"4.\"\r\n        \"7878677416379371549125789239926548827527615154124045791534979434488720324473118535175349175451116574955482\"\r\n        \"9196846477560962493984753090692845809166165686038186185598545516804955486444807934972963947481576822992280\"\r\n        \"1413673914161293747159398543359951739982313316116576662886014320825440802061395606568618051069946931111084\"\r\n        \"3403784158309126949658184006386667169743740687424550046011927504256647287974642036460883111432322478315769\"\r\n        \"254120226605664356611669063568115234375e-178\"},\r\n    {0x1.57d294d3c2f9cp-589, chars_format::scientific, 461,\r\n        \"6.\"\r\n        \"6286789908919767154439712855163324165485647125775879469082523552535784443231882065986199405578268409671614\"\r\n        \"1775524355094157699459438893136009843313395926452650072279802208152136503116316085826330120645706047536069\"\r\n        \"0707532743601948118549864883622173092720567735244279208420288624269214419901245909769732036473350606372685\"\r\n        \"5287774209801534211907607596434562429271112638134066194967154756089303850511085273262727747824243635776236\"\r\n        \"8270840624973061494529247283935546875e-178\"},\r\n    {0x1.ae73fe6587cecp-588, chars_format::scientific, 461,\r\n        \"1.\"\r\n        \"6597719647556534585125909210073988053664761497437503116043924519032075968467392138434096782371133771691041\"\r\n        \"4692966359530302893843702342909948977224093225788840850241158526002495811490793284029994355447936207717953\"\r\n        \"1701030202592523890664293391660227483252564706908710533792330581122217799978898141257599150318157143299562\"\r\n        \"6438491757766678273670461681099223694022755564691644672587301285547650231438839095722621873493583105878962\"\r\n        \"3693172643470461480319499969482421875e-177\"},\r\n    {0x1.fb67296e3acc2p-587, chars_format::scientific, 461,\r\n        \"3.\"\r\n        \"9129616361835474995816830113427371139394783748006906776846465564831734796400082279893725348246088077820873\"\r\n        \"3724773721727647969237518001871833488349905404751288122720075258042368323832359271430311964401334649219933\"\r\n        \"9519425305966013506257262632784489759265561057060941101640097783767987620799907927064604185859394447002994\"\r\n        \"9081905073803555079273434996212221006831413351082560112476320410824712380110268981480781210164473159999337\"\r\n        \"6480739470935077406466007232666015625e-177\"},\r\n    {0x1.3ed3dd4d0600ap-586, chars_format::scientific, 460,\r\n        \"4.\"\r\n        \"9174333185201845885701643304817719285286793119402385343997121743834215253289182597526179950619953400075056\"\r\n        \"8215327569860654293571277325952168912585808066003526425979416007658121367350545330904392662818296290555095\"\r\n        \"8363362875972718209741260985284999305425043970836369172025830193280142465849744222930368949184112590984937\"\r\n        \"2570588281489240090240019398068143537541563361531771384907078697949056986176353435518052413541351141658408\"\r\n        \"696599735776544548571109771728515625e-177\"},\r\n    {0x1.c7fc47e8e35d3p-585, chars_format::scientific, 461,\r\n        \"1.\"\r\n        \"4065772131663601624731605132771376030687013595023265826246899604517310916218342653982498273578257694903797\"\r\n        \"8468638033545923123797757358334963538697635759700073763508738768671726201090282961141287767540599357579432\"\r\n        \"6842542570723744576605062186938060430296209980469258502851293064721411956550060490555280947897869268535238\"\r\n        \"6179746516768341436744109032500119725007587257232992073560146104583620982534044853267658149002760617409663\"\r\n        \"0464731561005464754998683929443359375e-176\"},\r\n    {0x1.e55c37b92c6adp-584, chars_format::scientific, 460,\r\n        \"2.\"\r\n        \"9943788764426966743964594522375614351628056540175421741903002166035225397433156307925002196026795564333321\"\r\n        \"8608007322600239902857674736096887285429346165120286356617612333602815378437074971902704269699125569824971\"\r\n        \"8734965454790960376519785799921911505099839114997820088040932021308668960743662393965366462481244219250884\"\r\n        \"9572198239276132947860029194547765807895534142629802891987129320208281337887778316462208527447689848828560\"\r\n        \"332805182042648084461688995361328125e-176\"},\r\n    {0x1.d5f79f14558d4p-583, chars_format::scientific, 457,\r\n        \"5.\"\r\n        \"7988273284859469245975909244211226235064534468838026322900953010973310895710460351625303496060697525894981\"\r\n        \"7548467994482334725806573119794681098598188149502821244093362724432709697646779140442854709952519834481575\"\r\n        \"3552685473794970090692535724337831399571800371346050428402437303389817593443709839557440032105433568682862\"\r\n        \"4757675607836065407289464361427118285829539423788560868340267151754097473537655899023331355796062082375019\"\r\n        \"741675714612938463687896728515625e-176\"},\r\n    {0x1.02af8b4a8eee0p-582, chars_format::scientific, 453,\r\n        \"6.\"\r\n        \"3837373791831109164464429226879340089313583401475598285331493581326429673206288607877477935245231280837188\"\r\n        \"5647870091324083042948466168427797571451303935851646140779239476004716342445942378983444119379324329844134\"\r\n        \"6151467615682475506740110029481560213541664875596554901104780563157049593014023988690619684414077863454296\"\r\n        \"7876711134989798226852771797948262135736554301036508910870959205653707241544181380479035784912197892815299\"\r\n        \"83782093040645122528076171875e-176\"},\r\n    {0x1.590863ea685f4p-581, chars_format::scientific, 456,\r\n        \"1.\"\r\n        \"7029147394060241225903488954267271489892327386935164464069609449685702563324256490556157119037765012843166\"\r\n        \"7310922276302573508422178617217778935442879125612302277325623482105142657441536641590746592972611280474769\"\r\n        \"3325030138100672596616353372172516265836210204580350417097583162091337255177727535194710323672332335205952\"\r\n        \"4514418255814217675702145734323793974251426625781831584646489266954982049226992568944037760889998259217215\"\r\n        \"09303097263909876346588134765625e-175\"},\r\n    {0x1.88afc27ace629p-580, chars_format::scientific, 457,\r\n        \"3.\"\r\n        \"8762215209996964796089923759037167832249242753682372854337872650601972808271639583174726700107777427008492\"\r\n        \"5501806670174866216009677450964270651295366445299067761270362555402692011724280700725138145693269599925464\"\r\n        \"9548206525351444569181879737766662552654721137751514033505841091039998863734933754460921996873791362418981\"\r\n        \"3877322683660487034814611363469602337211596081779924811843071508227249052874980749704115988758129120184126\"\r\n        \"037429450661875307559967041015625e-175\"},\r\n    {0x1.5c7176f603643p-579, chars_format::scientific, 456,\r\n        \"6.\"\r\n        \"8789882161917508509670824126173614140304474268001492195639974058156288616291688554218622136287337053108089\"\r\n        \"3419613781966113824431849672860148904218174388005163947601938431582715382608955397928680356858042289516561\"\r\n        \"8106610762680714571764269279291838992388844607635676991533109853040114513708619359429236357658230665495532\"\r\n        \"0578191159151869528057193739314193893582637371956923500775255998034385509158645247066496985387717630344717\"\r\n        \"17901396914385259151458740234375e-175\"},\r\n    {0x1.790d4472e6dbap-578, chars_format::scientific, 455,\r\n        \"1.\"\r\n        \"4887562197711446908978121836254756656593526509585899499756689436794712354563618715575348874663612719205860\"\r\n        \"8812204683915199610533975015269320265559281666130669232952306547433129957755583211217665345578272425010678\"\r\n        \"2491820289781945266397473512670935662579443028260948228067153672789706239267967937964617523411091552992446\"\r\n        \"9346136169054560512819064301157801030140723999008663632807032826898858941509657991405075602774164128527800\"\r\n        \"6989756249822676181793212890625e-174\"},\r\n    {0x1.c378249bfd0e6p-577, chars_format::scientific, 454,\r\n        \"3.\"\r\n        \"5651743098904664145382811359911180260058861554103089185268982152317863809687513381561548742845716244486591\"\r\n        \"3339519437222363016273356520765126496768749718777737323105845875880161315828096125505939574746537095716796\"\r\n        \"8204318690266014998655565144550272896236561789845289241609388463168613747026527843760982680001585378259619\"\r\n        \"8640242466945887021327694298597975835869968250249240285430911246574479070674348728464172280055825836608818\"\r\n        \"235617945902049541473388671875e-174\"},\r\n    {0x1.012a9572308e5p-576, chars_format::scientific, 454,\r\n        \"4.\"\r\n        \"0615954239203778285980217159357064260763320100626199584318312723187831388742625072953964794756680641316452\"\r\n        \"5187049730893926840073392280738696074481503657716473125301415875810091183435586269507991482810462712565678\"\r\n        \"0885586781210885206452316190347498731570541051286629973013412217129841564336368659136736331103393064703397\"\r\n        \"9450485811165942478075559148657607681083750037261710068110348985087259076445035649476524760030822502887559\"\r\n        \"721784782595932483673095703125e-174\"},\r\n    {0x1.56195178ec146p-575, chars_format::scientific, 453,\r\n        \"1.\"\r\n        \"0805981132105149879888828194236853539061686084662780914854471675383228243117452879571122473537783026978971\"\r\n        \"8424874479211805105139792453651861428584866033364818684675278744191346541679918674777914698058883725209587\"\r\n        \"0918149265106456137485286704653323044943850364593356260109867034399495400691418744678903519925194377801076\"\r\n        \"2381486731478479183022737197451235240098008967031811463223159118911278393762876998825339197552938830249047\"\r\n        \"44161176495254039764404296875e-173\"},\r\n    {0x1.9d2601c0463a5p-574, chars_format::scientific, 453,\r\n        \"2.\"\r\n        \"6100490335909980979552265558355493219704695290513080366093465835681490016799462387973765729881171426828168\"\r\n        \"2417332590133992921463694477503388807139807845292305705181442388256835168226672308962563672964438490805297\"\r\n        \"3384732142938193798164642599720638713195222674660177386067424332816501896648413308447588486597263343965697\"\r\n        \"5571046238161474247493645115957000348819974290112611670238924589617136104709839809219214750270546265831228\"\r\n        \"53844542987644672393798828125e-173\"},\r\n    {0x1.b1a83e573f7bbp-573, chars_format::scientific, 452,\r\n        \"5.\"\r\n        \"4792243323914630975072406281613606832261951011145665036504979668985390735600110157767758785050009028843723\"\r\n        \"3069196872688278263180607019226460569942714717248153474281746765628088520324003473535650431537768304962822\"\r\n        \"6352434526342626991833896405159190457009628685312050850428276694131688178962296877209863921698707625891704\"\r\n        \"8767076718398953420167969591438265381595345439024715691196807395095536129593152744587067381250994335672999\"\r\n        \"1137399338185787200927734375e-173\"},\r\n    {0x1.9db5b347aea9fp-572, chars_format::scientific, 452,\r\n        \"1.\"\r\n        \"0454380162673489713965397325213210055216387987310910537716239241543349829428624537085690812460149858173021\"\r\n        \"5858895362945461402133653079036345203985491835929817281954592025413065471497974913996205317355421037620462\"\r\n        \"5461005863476843387305393280877162550277919224926407850550461402739010315434561658615507741623588071536234\"\r\n        \"7189767875031969711231284078903547104466269425076082101727424913763945754500035848790708990687509105654839\"\r\n        \"9137682281434535980224609375e-172\"},\r\n    {0x1.3df2e64e62b17p-571, chars_format::scientific, 451,\r\n        \"1.\"\r\n        \"6069032799845684304837025898602516055352533047665360898514249707918755589705310767056414015917650944256637\"\r\n        \"2059407021909524012789333201080366212249374842632041801829250909350915204889376556367323396385595859359363\"\r\n        \"2026744656404079205066647203536888565373193524222234484027163667384520159643669604080393032721274484448190\"\r\n        \"1820454994441082559588679931543647630524022363479603462003303851739929994528409740117298461041517310121662\"\r\n        \"376332096755504608154296875e-172\"},\r\n    {0x1.3fb9aff5a09b6p-570, chars_format::scientific, 449,\r\n        \"3.\"\r\n        \"2317634556278561328898229389131235973792702732562633280991403487915739132162432712906493266003295399869372\"\r\n        \"9842545240820838063867420776343008017269498231628387206082119219270972996042897891079135898914037979639792\"\r\n        \"2628678340369132274813716042402578734967764593771810395739266217871863837169342502454420046781060151049163\"\r\n        \"8476195268941251133713791394315017124881357339068944310325585037652194459172678551852687153095322614149154\"\r\n        \"1056893765926361083984375e-172\"},\r\n    {0x1.b756a80b08275p-569, chars_format::scientific, 449,\r\n        \"8.\"\r\n        \"8816113793007975094594031352311578123949416737178828130854708415442420035465070777620177348898079141507841\"\r\n        \"7796406238021557467994937388956410627563305885106754023883545285183176270892863135364360578393441082982527\"\r\n        \"6089987266954588114848541270166660775652880062869381533707804994144812325315805417332298566443583361231344\"\r\n        \"6487476518149284318543738637159669254492391164491862892635863291851603301999049071455106466738138593086659\"\r\n        \"9665023386478424072265625e-172\"},\r\n    {0x1.f7329a0afd825p-568, chars_format::scientific, 449,\r\n        \"2.\"\r\n        \"0345160158699940505892624292575175803854303259223972778922037104994094712540208045167546542096546399329092\"\r\n        \"5568741352851754686883111360672231989108344218909911608003767338157437940100332128954412292965650257298986\"\r\n        \"2399508197162346096661909599065879618173136942841150302867570196096215393226563365157688113883373826699019\"\r\n        \"0133804036385605415722207224450777798150430412030970963249225767509927828485208128706060882323614080746665\"\r\n        \"4223389923572540283203125e-171\"},\r\n    {0x1.0dbb0dd4c3dc6p-567, chars_format::scientific, 447,\r\n        \"2.\"\r\n        \"1811364732319512379299888562598205651832586862578556577373471722160887631668486562918227829168345226693356\"\r\n        \"4477152396005065372978045785609586439600163180898405459353425875008497418764842761473430968015877893142753\"\r\n        \"7144073637743030489800810787461796351034399996774268268113982329617709594542586517687546529900207424315352\"\r\n        \"9571645636159086028928066553000090306544475559951765315539204235148847117034688163479628705831991908326017\"\r\n        \"43750274181365966796875e-171\"},\r\n    {0x1.f37273553a82fp-566, chars_format::scientific, 447,\r\n        \"8.\"\r\n        \"0774068916080526911822864255084323152268934947928782821744873097715265550575551375438531877561394581122040\"\r\n        \"9981387823919747733730008958851185059841992813660027980133828742374911473631504963198955136372118833915445\"\r\n        \"9270356424436854717354034107500870354542325791569854174511255863352105517142777144763847882237666874762494\"\r\n        \"6628127548310914850138612320071626178258920473997347412686438015422955451063231513707035488791596833380026\"\r\n        \"50998532772064208984375e-171\"},\r\n    {0x1.948f132293c63p-565, chars_format::scientific, 447,\r\n        \"1.\"\r\n        \"3085617726519541939747154125479359905912083343808525334106458195989110396773558319983334774985646548651422\"\r\n        \"4001778904513903298081176394305764399493112846351303350353239502484610555690434248628579595201736161689146\"\r\n        \"6336607580363322588353007728783819901789415921638100352602461638880220153348552331791239223807821536185010\"\r\n        \"2983913584124516775569012523471486144188013970774833418807493808520624064940293843848631225035283875968161\"\r\n        \"73754632472991943359375e-170\"},\r\n    {0x1.1ce9174ee8dd1p-564, chars_format::scientific, 446,\r\n        \"1.\"\r\n        \"8431087174635782043252618133185158278565571369229321208308841340213027211857844123697256040862519901567725\"\r\n        \"1326726395183648543716289037081590754301619279792859862700397570904034465465726650754241810398171714853256\"\r\n        \"1992992808930081880678923005030883215333996109506247186677474230868515683431825040191371852399000466202113\"\r\n        \"7975049434489578580438315462876494403387379133295692106882124354166769411650396731530785615627010542993957\"\r\n        \"6424658298492431640625e-170\"},\r\n    {0x1.3f6d7ec03ac34p-563, chars_format::scientific, 443,\r\n        \"4.\"\r\n        \"1328064925321326743823603312867683387167979700016372758868184808065548286026722508349641027855711185659446\"\r\n        \"2152961711974203123360596743084083781406915821893135130157239833260145924419520141522508884955957878888182\"\r\n        \"0404459798243483214581582816502707353740530994471599110522744654340322094456670675212886409515158274968834\"\r\n        \"8421670736899255799425452401539295289292709073381110625359305055039988110166265680798375337090533321315888\"\r\n        \"3154392242431640625e-170\"},\r\n    {0x1.d271d5b8d56dap-562, chars_format::scientific, 444,\r\n        \"1.\"\r\n        \"2069870317233675409785921174121444821305867547484647026031802481804471906324306712077013729055445084455143\"\r\n        \"3999115380573910887578371341979222946847987949711339523886024386272732747418877700383850969235187003203291\"\r\n        \"0037612444082501641811469305197024541046308746885012559865055123703620520256489024970530609600773121721925\"\r\n        \"2509953590142701977279265426554214972769816776184129905490996033298708068601791479909982052198813562426948\"\r\n        \"91989231109619140625e-169\"},\r\n    {0x1.e5620509d2608p-561, chars_format::scientific, 441,\r\n        \"2.\"\r\n        \"5119843525307733558434594260816051677090309667396793035381864422174122683981429619725915214786050355950948\"\r\n        \"6239204789313430961464462590490736435598083042927274138263378247661251164296052912696897186466478706288935\"\r\n        \"2642748759037672326378535772807239429456532155654974325325269095690646913354309930487294342711006492165995\"\r\n        \"5315549232098416962449358057714977677229240849969698671418318066142700050605778916770760567089837422827258\"\r\n        \"70609283447265625e-169\"},\r\n    {0x1.daaeb48f4721dp-560, chars_format::scientific, 443,\r\n        \"4.\"\r\n        \"9132134419173275300225535204544729851911649970165869483463440887839418340380665622292163306488996250106549\"\r\n        \"1350976425275433250304984863280428171634552315241314266603032484551607070114757965733712324125396174103372\"\r\n        \"9226789364662827961018036133320427313617289178588424239333846712216532419601164460554698110560287829079138\"\r\n        \"8448732419818004683184996584630381592680288467103992938091395362608822911344140526874318952721409914374817\"\r\n        \"1627521514892578125e-169\"},\r\n    {0x1.79db46c531467p-559, chars_format::scientific, 442,\r\n        \"7.\"\r\n        \"8220288221977700063059894664378227368411242897337007442348771025734261062567460361432757911617862838819629\"\r\n        \"3795797162626830091814571929935183642335516230967612876521043115431354642305807169176548620989324925775808\"\r\n        \"7062177758498404099890663358857738381451506168661384596087031927979812839991222673925208238906810303540299\"\r\n        \"2951541364381739672960888215163802051676603836709312773313559283595797003584392382939671772845713348942808\"\r\n        \"806896209716796875e-169\"},\r\n    {0x1.5eec2ba1c3720p-558, chars_format::scientific, 437,\r\n        \"1.\"\r\n        \"4528932941845978123954041823161320670444209002673199194875936774636685005800572366209642420084980102688522\"\r\n        \"2284771627441317362560849791307952496665289476714272091976068922300999847479343600358850073272097152220030\"\r\n        \"2906669435860845485433716289821162240358438688669844790169613107356205858019787842075248471375056422020616\"\r\n        \"5606463372742572760669498115895300190252052394461218022126572921109385011864418429938794474765018094331026\"\r\n        \"0772705078125e-168\"},\r\n    {0x1.0484bafd678aap-557, chars_format::scientific, 440,\r\n        \"2.\"\r\n        \"1572028357831314739248769724465999741271766633293079884733473069385467128577256574275705244906939184117582\"\r\n        \"9038386984094283473151970125795043177080588238644040574776169825974122573988755713447254935101455602327279\"\r\n        \"7444385837941145779765796154296050920630528440861628624187628402654542146737760578131033795692117902664174\"\r\n        \"7620343404617522327136474787371783786459139769882545368567133405075767410255971768401339616616496641654521\"\r\n        \"2268829345703125e-168\"},\r\n    {0x1.6d5d28581864ep-556, chars_format::scientific, 439,\r\n        \"6.\"\r\n        \"0507342105712640753626842163097646809308860776311719574201719128177872342977742833188684816835118633113178\"\r\n        \"7469902672162020402460054333735597377259788893050409419567542473760275232535702628013402757453555954460066\"\r\n        \"7351435740725219890174284399124917029076743181228148661697596212430136719929459778243961595404978812094624\"\r\n        \"5720008957977972786818679608200766196761709853673787110020335195594341069592956953993034829863972845487296\"\r\n        \"581268310546875e-168\"},\r\n    {0x1.bb2a34ea37314p-555, chars_format::scientific, 438,\r\n        \"1.\"\r\n        \"4678367854256142298667827818101418425641171158235873201689619347389131481467218178604900546424188785128526\"\r\n        \"8336878307696570650647319626714281180108177890970382493324330201954352563963102778896234442647145321597454\"\r\n        \"4934864973158225723162874678222498197027137108636727761413525838697942842193364203301906166874401738418313\"\r\n        \"2646072919751818499258993671664303007808184992375802139546683974996661430648331805870476785003120312467217\"\r\n        \"44537353515625e-167\"},\r\n    {0x1.dda66275c3391p-554, chars_format::scientific, 439,\r\n        \"3.\"\r\n        \"1641143055571888721675810050989542109785465028434827969598434513594568939907735780944113164818353072371269\"\r\n        \"1472274425932244055295948253650409847772105060655087817291808653621495733409941136183312201214290111148995\"\r\n        \"8367027559058113415177240496976939184069245076394699362838845068654932477476209593443045636001585391168764\"\r\n        \"0813772856068351759540302693121233132284473037020618452899137221945934076678210757072040593129713670350611\"\r\n        \"209869384765625e-167\"},\r\n    {0x1.ae53c827abeabp-553, chars_format::scientific, 438,\r\n        \"5.\"\r\n        \"7012659962131172748331801135657757849545869452984033576198099915159574664118824194511400497947243457984780\"\r\n        \"5462116330084017885988449660823105199629138988659606033366015659128259656868559311576294716708666983658509\"\r\n        \"1151417828734600815851793300182954790630057074667385636416663954055631149802259850642458557110755505661731\"\r\n        \"8968904489469062159847604242814589351698444276015868870497315679527347144186144242694602723986463388428092\"\r\n        \"00286865234375e-167\"},\r\n    {0x1.8a5ef719cc23ep-552, chars_format::scientific, 437,\r\n        \"1.\"\r\n        \"0449784962477287548783251955237842370155156614682633486401981005538590595074075877132082832649026253806374\"\r\n        \"5178776147247109081094734941639330363553681011985727972623039202822527299326384345045236499496566530651968\"\r\n        \"8594839664257358745546726073837195205368734856443137664431116736502834299388928251796513021111914290343565\"\r\n        \"8352635759488131161489780485873740697437859266638088959535098381735367626006998759136124022006697487086057\"\r\n        \"6629638671875e-166\"},\r\n    {0x1.0a8013bce024dp-551, chars_format::scientific, 437,\r\n        \"1.\"\r\n        \"4123103050632778867079410198580307726871240292054106836891157576370049073328446726336757729842328297539268\"\r\n        \"7130135769634683967418176373335886121724564479293530828467869228845230209513050262924753268824301017453219\"\r\n        \"4011901728294090601781190078090265727142204298288503540121641833715510263559360460931322723029926320336771\"\r\n        \"7097431398505056111687252861128855861691714189014884325150929764686547454902946358012982841501070652157068\"\r\n        \"2525634765625e-166\"},\r\n    {0x1.1c9bc398428f5p-550, chars_format::scientific, 436,\r\n        \"3.\"\r\n        \"0165478216464074512212005380921449232249896009416388345909558008845922680766679989900406888605168527800772\"\r\n        \"9156847515877911950031988284153897746333486898789272568844785705133463127705015634359057096161632900627980\"\r\n        \"5162991598947429131105988549014486141475892089870149610321000309897505488330122362804139249717716232071224\"\r\n        \"3561484642920486418632362138024921480131995555150640263619194765536340598175053806517809107390348799526691\"\r\n        \"436767578125e-166\"},\r\n    {0x1.472b04c33821dp-549, chars_format::scientific, 435,\r\n        \"6.\"\r\n        \"9352686559745381219629204415882645570340784420147777997532775506263318841002038546151778930213422949524749\"\r\n        \"7247338585103033841186687904998992673315180478385844272679998694228379216159690401411169743129037832534724\"\r\n        \"3997549961343698246262935026970483997121083598418491471419947499240108314702249560972217943633149438923305\"\r\n        \"3529333671768056532410769536588940137956502217616423212346252026017570923308377950355918528657639399170875\"\r\n        \"54931640625e-166\"},\r\n    {0x1.6e2aadc8fb08ep-548, chars_format::scientific, 434,\r\n        \"1.\"\r\n        \"5523915631659218211654033359396501132440764681876474497751136639122155364971012804370210703738009265241858\"\r\n        \"1215759342693384516281140289868088753255070953848917975089495962398728196671418875605246865007097905910819\"\r\n        \"9194200320736265532747460554648315694463585924985028588151664651715814237876462229975810345451375987064856\"\r\n        \"1867718950564534290667687163868632147450459471857685230728295838544660435309036072837329811591189354658126\"\r\n        \"8310546875e-165\"},\r\n    {0x1.79e0dd8d6d77bp-547, chars_format::scientific, 434,\r\n        \"3.\"\r\n        \"2040881224406470104070105421447199363651981713125257613338523327774736749929132144470271088534670292970793\"\r\n        \"9332666973487821118966580744192703719425525128891426882244292259084076067532193285611697408370057076213402\"\r\n        \"0817519404294049135074882815764210025817010708368161243484161145536272444835580693740277441857916573303193\"\r\n        \"6560847200506946165778530591600551545348474288707176758359411167341011404587763911067099797946866601705551\"\r\n        \"1474609375e-165\"},\r\n    {0x1.50a1c6dcbee64p-546, chars_format::scientific, 431,\r\n        \"5.\"\r\n        \"7087065996614392467041253154630145625242817661293175265664196357354858848843609759764525139516246750819154\"\r\n        \"6800113857365848905498771900411790329918307580100153169495954152713830350478046241412786653023542349115414\"\r\n        \"6722690420836671854852719370789115313287766786109595137579201772327062305581861872141887474541157775863540\"\r\n        \"8998524829801519942291352361441050850385032916477495024457844951280632243145740645218211284372955560684204\"\r\n        \"1015625e-165\"},\r\n    {0x1.862c46595aae8p-545, chars_format::scientific, 430,\r\n        \"1.\"\r\n        \"3233342513427446533220846176980084180352307495935298772563684034576138699777035986613426588992064096929624\"\r\n        \"4845573413990218913068901383100060791443228776423588462888697503055590150915018973328299846328628471661195\"\r\n        \"1393315603019845988865964947204500622134618088187057959743436057427473338804629924458598854986541360321208\"\r\n        \"3717503132967830519046643299291922805519127421662183480103792153741442023939800520793141913600265979766845\"\r\n        \"703125e-164\"},\r\n    {0x1.abecaaaada1d4p-544, chars_format::scientific, 430,\r\n        \"2.\"\r\n        \"9027492682223769245463501295368700005473044084194294943260531463212751655391460399814755446587701909041474\"\r\n        \"9357432786031241406072562727822572506649901334086394861768322314208033554135758133295052719658033386416436\"\r\n        \"6820140576973418864131397514691999982985832569462960667909084778059718781902132556507382819564321302015716\"\r\n        \"3424326728187578875387306118496551002665440241638148086882173459801728850060431597057686303742229938507080\"\r\n        \"078125e-164\"},\r\n    {0x1.27363043a03aep-543, chars_format::scientific, 430,\r\n        \"4.\"\r\n        \"0050313185332246980379480793530275790838034216130234269239697945665097491937671792280674809190792923657176\"\r\n        \"8852195478275993329637976842756444979578128393305680093053021087734539543173563658797050864465135277447744\"\r\n        \"1606453018747691217753280777119448590588588328443857685929471452269672993927502101792232928640358924482952\"\r\n        \"3991254114083701145132411140665518759135223474616940250607472942846200812672119440094320452772080898284912\"\r\n        \"109375e-164\"},\r\n    {0x1.f9396910dcb42p-542, chars_format::scientific, 430,\r\n        \"1.\"\r\n        \"3708394080755749882353739878794548975711060319922576116897896423058078740860088250207940293013167382216341\"\r\n        \"9006732222086034323894484084689341216849641479224140162706297861465282366851351586406974904598321862463844\"\r\n        \"7467632641139961223891013812536479652440735884693444562940524558164549745388180146106893720295017931658690\"\r\n        \"7829620444413074029684670336457955213142348285380185813403038234527882462121528561738159623928368091583251\"\r\n        \"953125e-163\"},\r\n    {0x1.d5c5aea5e5776p-541, chars_format::scientific, 429,\r\n        \"2.\"\r\n        \"5492926252346403699480399559723131522475692333126746007271937061542803045775918073816174245595068744449375\"\r\n        \"6897045095772044904146125927159052272308828398501309068340258447459074741175325962308804749526641331075081\"\r\n        \"4215616392500626374978271647156167704249652658943675636494935189465329052215140979594908979807630334047669\"\r\n        \"7056289062895628727450248207182214063557902486967781907977747553301723845708970372925250558182597160339355\"\r\n        \"46875e-163\"},\r\n    {0x1.9eff9de8438cdp-540, chars_format::scientific, 429,\r\n        \"4.\"\r\n        \"5041091507036545799166835714074572890973281642718254791920274591194041492121447735125974303212253865292637\"\r\n        \"9956781548301884168031234796205554552277059391393411410991884557672724397409012081748646328143893420883989\"\r\n        \"3697531955943794618870985059845862267848439181439589090531245749517761564002445364628152426757015371501016\"\r\n        \"3957628881209237239059125078916075999874661387134914030492787980695630969951714916987839387729763984680175\"\r\n        \"78125e-163\"},\r\n    {0x1.35efd2c76fbddp-539, chars_format::scientific, 428,\r\n        \"6.\"\r\n        \"7276831657939996199173247920738175748428147489414967017255708514301722548148393714375353958474701042207610\"\r\n        \"6789338814555349198970333778333109059056976956517846868239691306501960145686115152454044713905123500514611\"\r\n        \"0075237349741554326342899856503196071852473843842388818767105974929475307629768643213482436875111072007913\"\r\n        \"1704627264173704339529068829140553825452116336982891479634968447435475896734047296376957092434167861938476\"\r\n        \"5625e-163\"},\r\n    {0x1.153e8699c8ec9p-538, chars_format::scientific, 428,\r\n        \"1.\"\r\n        \"2036075452964588496228569301122721156525464871926940161129067123147023586573727518394806164231402726198423\"\r\n        \"7749837183196555799200371216024834938526447430132500567697920492429156919627160529487552376377185441574529\"\r\n        \"4149576799984302279677976161507766568997846724405958600191220802794683903667424716117063509411388751879558\"\r\n        \"6940287978563712681000947575682247836826937306646431995714552203610801101030247650669480208307504653930664\"\r\n        \"0625e-162\"},\r\n    {0x1.a972fefbd352ap-537, chars_format::scientific, 426,\r\n        \"3.\"\r\n        \"6940271053456158204818523935502210337755894478159207791982138392485477834969511571329007609766637419171039\"\r\n        \"2759126610360094205450884682246809737165114335090151986083381777065321763615316038483834946612248296528505\"\r\n        \"2765157487090496645351674079514261542379781046580777315105509837747199023673206838144493261571740029835395\"\r\n        \"3756296447509425775852372321989718301071508531673976172450162203846416031360888609924586489796638488769531\"\r\n        \"25e-162\"},\r\n    {0x1.cedcd588064fdp-536, chars_format::scientific, 426,\r\n        \"8.\"\r\n        \"0377497486029463796907310997887231749986322040492207560557729723370806214523480524090767477875661565204951\"\r\n        \"7694248285106989633954680376204841270502625916650274862984725526583670182750426489618103622160278962969969\"\r\n        \"2859802003702012845796674268710432520262677389871132077322222514180605600807095690066984447887518374820105\"\r\n        \"1435419316066722225251905327148732308104216510737234667068193476021156773647646787139819934964179992675781\"\r\n        \"25e-162\"},\r\n    {0x1.cb43f5da906adp-535, chars_format::scientific, 426,\r\n        \"1.\"\r\n        \"5950567846572765244507927820377824901317858913529875732063943109841715337321381611732771703577489536903502\"\r\n        \"3493796238094804046934236086714128000654855531067412929636750704890697323743904633485510251869076888268108\"\r\n        \"4279306285811281206887100844614192075426548612302663962004264088177849786782954944307405424456628148596509\"\r\n        \"4248487469731734128190901062790141762240880188100041952915632764231981810532090548804262652993202209472656\"\r\n        \"25e-161\"},\r\n    {0x1.cf8a16d1be8a0p-534, chars_format::scientific, 420,\r\n        \"3.\"\r\n        \"2198008776677365715483088235590941078068129505484886301991581386389243298290941875520546912655676996881281\"\r\n        \"0441917229942979342204911774403664097134020776067023160848590990575248460251418985831836138485385022657308\"\r\n        \"6973362244606926901073831212122632895414679410788205226590464932818260131222656038901409342927690461162453\"\r\n        \"656396066174341396517780764483920907682608083655719332828054092543457187503008753992617130279541015625e-\"\r\n        \"161\"},\r\n    {0x1.27815078c4b63p-533, chars_format::scientific, 424,\r\n        \"4.\"\r\n        \"1052288903310634043960832987571931636234400160954032470064104477855048188571156057943012804319643271386198\"\r\n        \"9257969872076510180980285118874101869727065976609233032449496732356088241557456578015929237728817932232804\"\r\n        \"8388309232337303750030778612509711908501951809831162651603726739987027097299398843085135417047599817866157\"\r\n        \"4272744294799819204667879819235963165001435696452328267353628992418490550875276312581263482570648193359375\"\r\n        \"e-161\"},\r\n    {0x1.94cb793c06293p-532, chars_format::scientific, 424,\r\n        \"1.\"\r\n        \"1247015311011619164388570519415046282988509125973527974174792513587997406324036881610609032812580610918323\"\r\n        \"9424576993216500730132779180552061858976096213910756516933563665760090369803621666784511143304283240882248\"\r\n        \"5088788757268226486530324074227172828587904589966139213296169528291499631970170151695928941760193584329233\"\r\n        \"2629190240565533263563800574591121957879184091543084291008630540113777396271643738145940005779266357421875\"\r\n        \"e-160\"},\r\n    {0x1.fb79dd59284acp-531, chars_format::scientific, 421,\r\n        \"2.\"\r\n        \"8199919854660424181406498611767457424061948125885429858945745962442848819176197726683136969437028570888108\"\r\n        \"2830040755467647076905556002995811053078143823884675889610939027344604289894269581058754232110640784754856\"\r\n        \"3781536173906753112551553439539348939569353136479925510922455594220822191463137765761460800308028834455808\"\r\n        \"4468684208204756019731248859110647696119656846453414657236217176483616952964439406059682369232177734375e-\"\r\n        \"160\"},\r\n    {0x1.359571ef938a9p-530, chars_format::scientific, 422,\r\n        \"3.\"\r\n        \"4406501648078402345831943940992850675010433136247541593007126579014461564621507825989069421046377258353352\"\r\n        \"5266279480436005810313967603484552689107264291271767543364013759019524730559490934549343018230659686062274\"\r\n        \"2466309500895727273464880490026271211635573150397503406895568336637245126201262342174169526481361294262605\"\r\n        \"21133278102774052246731966461848087618487349311800460637664395881218926120936885126866400241851806640625e-\"\r\n        \"160\"},\r\n    {0x1.dc1506c0bf6c7p-529, chars_format::scientific, 422,\r\n        \"1.\"\r\n        \"0582157294697288713963195158371767274324188519857217198944098155515218457859889527082041394743997571994198\"\r\n        \"0782617107314884480425902230968999173789160718211219459793393266039878135868700464888388541483290580441123\"\r\n        \"4276364643529183272406529036702764173345831700785070362277638232538650696886272801586331584871705734800017\"\r\n        \"93016274242856198979073331588237555754089321977604226135305401194919294738383541698567569255828857421875e-\"\r\n        \"159\"},\r\n    {0x1.2d2b9e28a6a75p-528, chars_format::scientific, 421,\r\n        \"1.\"\r\n        \"3388582036266355541959404316699840795114375100648807498487442232547937540767560212253164334353383449534594\"\r\n        \"6743958644332602294994034082624978656972696903905477947930595101845262918336444821387696088794686692195304\"\r\n        \"0167045482466019883897788454591971526214814157238791252917209606217864777959421032096816467916409844038417\"\r\n        \"2836004474854932106579809179603391993269887733998929837348564227117453384607870248146355152130126953125e-\"\r\n        \"159\"},\r\n    {0x1.bfbb91d629252p-527, chars_format::scientific, 419,\r\n        \"3.\"\r\n        \"9808070524262983112904656865346504878132939372419465371210599523355680262235845071654587488829808528826255\"\r\n        \"3211542596573645028294042617979689261030895068039674263323248377753554749934026854747850685855751439106084\"\r\n        \"4862583279339947687017283592856642221530763984147033229022671292069654536582029312632080382570358728048793\"\r\n        \"26080897160088621835645648574210621835117584474315503701422926108310917925336980260908603668212890625e-\"\r\n        \"159\"},\r\n    {0x1.81261e2a2b58ep-526, chars_format::scientific, 418,\r\n        \"6.\"\r\n        \"8487446591097199941568879338773260958022232603308129404577395366943751087141371095291924550966687048416161\"\r\n        \"6769294776395348321020638598156727873424656596843199381833408121608182144007626543586767966079553232265060\"\r\n        \"0491832255616582246035074672018377924273775286911895790270086967708681272931741809331769970454006868479980\"\r\n        \"1126128292639790394592107549831084067660125239545389747952523762375420801618020050227642059326171875e-\"\r\n        \"159\"},\r\n    {0x1.baa3429377a6bp-525, chars_format::scientific, 419,\r\n        \"1.\"\r\n        \"5742030359655316135314019631790472127126364419477776829501394414493294958623139441874916754684678732509715\"\r\n        \"8991033070315380568522405485975093110902491134901423225555834565328486328064118867427922601658085650759434\"\r\n        \"7866705253552661370252961676208893318743217957734924116551774986936407789322905691142636861514631034901222\"\r\n        \"50101193233407172333537545750830117935069349686134489453548900017576528398421942256391048431396484375e-\"\r\n        \"158\"},\r\n    {0x1.9a907771fab1bp-524, chars_format::scientific, 418,\r\n        \"2.\"\r\n        \"9202734088397782914748976105327502984069864360599784056489683368011606263857076661142188306671405159781423\"\r\n        \"1670256843555408784320151853777095713405165964263539211094938101679106092335341904570196983657111607404300\"\r\n        \"3839001894312185913020143290160018732262249780193598708143728594996072940408519441822653019593776771607108\"\r\n        \"4536867135236252471735572482767841378465604833111435732133191744974709536109003238379955291748046875e-\"\r\n        \"158\"},\r\n    {0x1.5ce3039935233p-523, chars_format::scientific, 417,\r\n        \"4.\"\r\n        \"9631432238623663477546167552731124003328921514474820413997492211106129001776874436254409714844492300472015\"\r\n        \"9111477138859528039163853994425999126996609683227170224030873388958268153423145767609226993844753478328382\"\r\n        \"4259195277427492686885377724220076528946842969848256726439179741579269576223391510486187927658224539225843\"\r\n        \"413775535462042906286635028827134767522968000184340037184670124670304858227609656751155853271484375e-158\"},\r\n    {0x1.b45bcf37c8d61p-522, chars_format::scientific, 417,\r\n        \"1.\"\r\n        \"2414975541479182662530661958882288430785834775491841525389411874824159995097885756544225128758410546645621\"\r\n        \"7648773130036540949365023441814765140175590447946206316753149905087898914730214365332693362747497929964614\"\r\n        \"0492013260693375349748541774845381848399320823459041716554134838029493474244785198203045687110985403998184\"\r\n        \"411933091955954072991836879522317775602854761084515929797124356159798708176822401583194732666015625e-157\"},\r\n    {0x1.3a2690b025ac3p-521, chars_format::scientific, 416,\r\n        \"1.\"\r\n        \"7875996042719942144684408823686534589648628475912376125631821356837144462300068766162676042653370244492773\"\r\n        \"8923771107674341441242397371908288063262833805963550278795611140294172228349290732312168702927741365063323\"\r\n        \"5640923880607318621527226861884183570539435102743690701331486754067853858196036273816308192289028030388742\"\r\n        \"38541139810169708202329862942424051508832654330268286681747402777631350545561872422695159912109375e-157\"},\r\n    {0x1.8664d335d8f63p-520, chars_format::scientific, 415,\r\n        \"4.\"\r\n        \"4428868657860281376359178678068678828865965144798881231178035166970602687133480970061156378529524002809523\"\r\n        \"7462616854285876469189545810325410817406934099121471189600341416115425999540048866344895066961885974140878\"\r\n        \"9048876099387012441921979951172011268855276022497405913799786381336671115842409863056361279540698104879752\"\r\n        \"3362754888079179316205818081708016426963313589920827914418743898039565465296618640422821044921875e-157\"},\r\n    {0x1.a79164aa2fc1ep-519, chars_format::scientific, 413,\r\n        \"9.\"\r\n        \"6408509408080923610447309847908498668818477504064378536812604606911138032185873877406416092196184093377840\"\r\n        \"8732022497546793318629212174366316259374071673186690940671105393994035996979527549102248122127114953365994\"\r\n        \"2125679052983397494126651483669742329979687385596140269710005813496485982376814623846949071924371149153140\"\r\n        \"14743723316819620786140512242325153138109329199514885809507713787525062798522412776947021484375e-157\"},\r\n    {0x1.2bc49fa39fb10p-518, chars_format::scientific, 410,\r\n        \"1.\"\r\n        \"3646071402129266218022608455308893034728544720923587430500970464976763025029439675540553811195474237663235\"\r\n        \"9523834483010519315791469330342593252278915593622431617814522042082490158690280378293849484627353286026715\"\r\n        \"5225175793585354441642493367039247804878240514821595105922697779865504810971833579265972782223673414429052\"\r\n        \"93644749971602789648179855297617277419064627585012540456066432170700863935053348541259765625e-156\"},\r\n    {0x1.b2a37c764c384p-517, chars_format::scientific, 411,\r\n        \"3.\"\r\n        \"9571324550397298455952293967097384825358953198030980159505341889845628196675999913836798970468837187820324\"\r\n        \"8478294128925979240194223968807640915113276532656464287084729513579896441131394373033593237548328064981059\"\r\n        \"5159222317626828045607596436841049015855425001023090510787469983857446377619492592718840110454684657613648\"\r\n        \"987645086834150321214164087322605627281014744584084104339627430135806207545101642608642578125e-156\"},\r\n    {0x1.843ae1ac69ebfp-516, chars_format::scientific, 412,\r\n        \"7.\"\r\n        \"0692179366582615531567675897574671091761437361338241149656756895396177633253683272883611099990399246500443\"\r\n        \"7598258992764058950920726978683938929713281967633418748635447629975311846108340480127933613935207582106283\"\r\n        \"1418275464323041900377706185784736448842459419508045556665132399047286015752324647790319023015284540485487\"\r\n        \"1979543351655494158128079536161932019562760201123060264938313679294878966175019741058349609375e-156\"},\r\n    {0x1.4a7c9b0be349ep-515, chars_format::scientific, 411,\r\n        \"1.\"\r\n        \"2035560157157919813062745372089973915433204195518742166387275134267274407820877716584250745353852034461563\"\r\n        \"9510290947540420847412015550237264275570830129622833566341709883458286591764701770519397372432417712594848\"\r\n        \"2712272309929483096695073317289136760663753949010538916406220492776005908179269094318962119052575144800112\"\r\n        \"517791981236689550651499999859263780522026324949400565011981001362073584459722042083740234375e-155\"},\r\n    {0x1.3e27452f4c3ebp-514, chars_format::scientific, 411,\r\n        \"2.\"\r\n        \"3172816969783969551891233777943526250416932539763293520394005777040356077947428725088477967218198192385517\"\r\n        \"9173739379747918200529704692932728516243182940513018768265036831234199951980780926608738288565060565046999\"\r\n        \"2621982723809517078775790931964018019003000211754865589982252409368493331309771709369251704091173604782777\"\r\n        \"233093007760038948922133043358862285948249785523761316852198177684840629808604717254638671875e-155\"},\r\n    {0x1.b9268d67486d1p-513, chars_format::scientific, 410,\r\n        \"6.\"\r\n        \"4262723679026234613089358592151495114322567354938475729446594062899894550316581573372400318968212811428919\"\r\n        \"6470319876282149819515198919937995775425705761798674673066995193119893788442638742100166477114130792519595\"\r\n        \"0776140684380624064791666341285838548486494556094652195717677079876446559347047552594588771871315680949382\"\r\n        \"32717074211917422314413953063196922767011329619070598984098552364230272360146045684814453125e-155\"},\r\n    {0x1.4df9e0d56e886p-512, chars_format::scientific, 408,\r\n        \"9.\"\r\n        \"7301072362246582992731617268110711029353064013073350453998818620182181804740211694728963191497913793567991\"\r\n        \"1031034017939591604335701819972757665270952692642901948619176904535218754880890639319149166591492630199955\"\r\n        \"1633152928738414986716903478505634319202980484473770916202240532708166933819170785587530689982280013134565\"\r\n        \"017333638307204694287737428192204358891274416205018071845955773824243806302547454833984375e-155\"},\r\n    {0x1.7d69eb7260760p-511, chars_format::scientific, 404,\r\n        \"2.\"\r\n        \"2224325771347583865914578960158321557360842317854318621134693365709148731046280122802494349067538519750041\"\r\n        \"3130917810364898093092551411950073674123927781422093946252603565097262860073949138157458136720220464476024\"\r\n        \"9595881705742112157886504025211275233525917071227188614551772891195644263290147759646936048898544911099912\"\r\n        \"53573791105880281676020497507543159037307514518111428714064459200017154216766357421875e-154\"},\r\n    {0x1.d15b6e4b731adp-510, chars_format::scientific, 408,\r\n        \"5.\"\r\n        \"4231128112241111883705509773089298055689258334481416666694017403320776689974726528298409316165705979593427\"\r\n        \"2651133535944542041523246725633760821160380141790144506211196558566480102602131990816837498306875789723207\"\r\n        \"6504585427720559612691028995704712640626772361153715821779073508058665270716186992631855993540730057277097\"\r\n        \"798447449807118198421095187366823174718827741476630255323954088453319855034351348876953125e-154\"},\r\n    {0x1.3a5731ca0edd8p-509, chars_format::scientific, 404,\r\n        \"7.\"\r\n        \"3264353948817245453789075948016247651899446607642030711491920326112691995960046353812600332536813842352429\"\r\n        \"1656290504702564770688838031055615174036884610469534126066936299706736185979551439500161693073301855346571\"\r\n        \"2808422288445892090588535812980025454718642561058682378505086089914779359167555255668678072269653119910078\"\r\n        \"85637914963465670003796036900151548500417677915741432315144265885464847087860107421875e-154\"},\r\n    {0x1.fe9875d1d94dfp-508, chars_format::scientific, 407,\r\n        \"2.\"\r\n        \"3801222320149624687970238838551821292683756958494975634914436808747089296715116646167927695091570422907292\"\r\n        \"6369290928298137726435619308975066477116451778078282790249877308178993242493941303767119336504866436159369\"\r\n        \"4314583580741034633830247502226974735196463810986401237476592299983502726826416248447495090355412974549206\"\r\n        \"46488679466589507176571074090805100721695650319541248673971267635351978242397308349609375e-153\"},\r\n    {0x1.486c8e4f5125dp-507, chars_format::scientific, 406,\r\n        \"3.\"\r\n        \"0618730536691985545579000169222995038373293836922890489125504007146208609330137385438091876811492710859419\"\r\n        \"4560986809112016677495317703714285414101823358342697061863929398148649681794221820608430077282387116500634\"\r\n        \"0524333371725021719175453309110948816510168122988585283130771853920058975957661080754853677159756800437879\"\r\n        \"7317284169074057937506011637447702247448555836796535434274346698657609522342681884765625e-153\"},\r\n    {0x1.bfab9b8aca208p-506, chars_format::scientific, 402,\r\n        \"8.\"\r\n        \"3471948672359081870252474793852930929195495939030283177039922550551126183653446755773285874366359596754283\"\r\n        \"2502756933262416846096962919049560927597425906971808170555329109012049943787534763467415849596127066744913\"\r\n        \"5137335706245812851751344457709710650666087089376367629961851390368065008093519365610537666124040492551911\"\r\n        \"298472615483739376258107919132264624991379871332686235518849571235477924346923828125e-153\"},\r\n    {0x1.6e3eb2a2ebf2cp-505, chars_format::scientific, 403,\r\n        \"1.\"\r\n        \"3657896771381836370309182418161048341057689712493955806624448243905928334545004278697729898364093587345786\"\r\n        \"8865313130892630862358886674091915514194799331994886115738707464006492635762748605607064664260305266934879\"\r\n        \"0678316930885947176435659031006469277337966316027578384047346694343336071347790439049988766926425966011418\"\r\n        \"1565996765839548397549385581670407344110642310075487415588213480077683925628662109375e-152\"},\r\n    {0x1.6acfd1805e7f2p-504, chars_format::scientific, 403,\r\n        \"2.\"\r\n        \"7059739547586404103734020958479760826890651200741852274550973101395207195449636437564463046700627498648696\"\r\n        \"2573403237486822427240404441709874784114954462792607899085616545057563405007609306607813789573026667536278\"\r\n        \"0471635363727993881117980818158418505372787172646299938963726825437220330053205315677811360493235151514227\"\r\n        \"6147452978679714962653853072995287764931503400600565356626248103566467761993408203125e-152\"},\r\n    {0x1.fbfdc9be7c4d7p-503, chars_format::scientific, 403,\r\n        \"7.\"\r\n        \"5775452971095829834740720048137883659078221730037758958977500243027089042030315562065576850353242510972298\"\r\n        \"8908820640414600991363246465113659524874333368518080485302807469768102470893345904366988820833134850152267\"\r\n        \"9233594131683886635586807403560296348126596298935394558714901539292174038185034695148230653865497794789982\"\r\n        \"7035012684127696551603799048515935761914023675867024820718143018893897533416748046875e-152\"},\r\n    {0x1.8b6638a74b1b2p-502, chars_format::scientific, 402,\r\n        \"1.\"\r\n        \"1796090875694487081840030359311463862270589279053705811580876107483727824962666775311728890626901753646893\"\r\n        \"1733577855602836561907239918066053974196590031535933155795041615263196884064656501777212660485632917003723\"\r\n        \"5553003815414569897105068661910842231236269130833379581876621381560616120996039580011757096732043000870625\"\r\n        \"476753518672332659627018455181383888174151582106663482818476040847599506378173828125e-151\"},\r\n    {0x1.d46dbd2abc6b4p-501, chars_format::scientific, 400,\r\n        \"2.\"\r\n        \"7949604896251110474468435743440309945288120594039878056554427992195401617178448765891155578587354824245327\"\r\n        \"2163051998044291731736689754999480979232786217446696064729498506880523647341315312637248430084916512736609\"\r\n        \"2938786364110450759620750625707230523155311741574527176683116117371581754805189904683589112934565440671302\"\r\n        \"7853111244031216018263685608830589461614758717278306221487582661211490631103515625e-151\"},\r\n    {0x1.12792046e3030p-500, chars_format::scientific, 397,\r\n        \"3.\"\r\n        \"2753828239853733863446369582437710222695184799823949849189206166844715031480630276984905665029410879633325\"\r\n        \"2127316348030245611596414872858686019667951434279227319113223501530777253893140911875570729889382852881733\"\r\n        \"7051954380499856181898096431741496302183450840154663766232702257784963092897043278167953142643939679211226\"\r\n        \"3446829491223785021441382997151012842866613095083039297605864703655242919921875e-151\"},\r\n    {0x1.91f97f1e1b12cp-499, chars_format::scientific, 398,\r\n        \"9.\"\r\n        \"5938032050821536271229835447916874887997484567576901965829125696937852892456863299883609755835723653544210\"\r\n        \"2841682756532772118758908073143284830054239179665994380300567905166497888249079872424626223422076411420239\"\r\n        \"9847393492562247437513415173947998719357558940259847465774991079887176648133578620470314414244635744129631\"\r\n        \"07645174158017020074996772789705377546508324737573047968908213078975677490234375e-151\"},\r\n    {0x1.4b9aea9518c4ep-498, chars_format::scientific, 399,\r\n        \"1.\"\r\n        \"5828634475728830814843440523506683765688254183130477711430434290240840477584699481675281765446827769126533\"\r\n        \"6303593028015611137361963891710823183778865940042147787475049837402666312756010315158359598341391818527548\"\r\n        \"2488775243582874001862476692842480950276260886343365712468475565010191030391942463146663252915623226414517\"\r\n        \"974202343217299198758136604105901053848697024317715431607211939990520477294921875e-150\"},\r\n    {0x1.1106179212948p-497, chars_format::scientific, 396,\r\n        \"2.\"\r\n        \"6064697688781666463934826758520573747383519448492866680729950884307524602126143847451988424868593484060194\"\r\n        \"1716682978957613938305513748932267449077368268937442295833820496383123332506277430625866887250915854592511\"\r\n        \"1757800801345831269796185208403514964100000121598690191471297899173032180673797887355522464851068977489807\"\r\n        \"267142354958247478671324520732786021205706905590204769396223127841949462890625e-150\"},\r\n    {0x1.f48d4b7371b3cp-496, chars_format::scientific, 396,\r\n        \"9.\"\r\n        \"5572143783563679212569396386714562244314668940940271083529053255203811492473894394483995163236935273856965\"\r\n        \"1628260530221751772117369080803655866703068176768535686143790764735897463820055564420846715137456754533728\"\r\n        \"3626211301932389420934134356722717872774848179655096293845502516384809908089594305714462025397850425772483\"\r\n        \"581964588413924537744877269495840494371863282907497705309651792049407958984375e-150\"},\r\n    {0x1.38223e0cf2f9ap-495, chars_format::scientific, 397,\r\n        \"1.\"\r\n        \"1919359645157150762151885745871298169469988759647520275617530679373213681293098328176454498212756348418279\"\r\n        \"1181505556016652016850967697539824481686335844121764077022166174838198246329265529449867422827831499533947\"\r\n        \"7190052647484303927124340167358793615407569077242194702127961550080648296820459406354990529597216843845630\"\r\n        \"5496010216053623887351146977264459915664407407831504315254278481006622314453125e-149\"},\r\n    {0x1.3e9fe67fedbf6p-494, chars_format::scientific, 396,\r\n        \"2.\"\r\n        \"4334447753350621478964908361125060043278078662466547499862131283708984042278535636275983077789926684370094\"\r\n        \"7924178444565748309990660069844962338807872875732613196406804108645775952673011694052762137127630272887337\"\r\n        \"9411794872081659295112882233786679511861407738863134690326265257013513191916123647888187047926526116330566\"\r\n        \"078186068092790478450763659348438420169935536563343703164719045162200927734375e-149\"},\r\n    {0x1.bf4f6338b1c00p-493, chars_format::scientific, 386,\r\n        \"6.\"\r\n        \"8325195696222758262300152108424437528570430091504730873063246196160570278444533395376186268614032140532264\"\r\n        \"4888404804519145048373433855904839511702044902178408277990112573516429336486994559408882196722920797431871\"\r\n        \"2051202804979917404513606924385342451021231548098961032710267504632110823167822434654856228970383578198439\"\r\n        \"78777235944402878039559477534037323920301787438802421092987060546875e-149\"},\r\n    {0x1.1cdba81ed92b1p-492, chars_format::scientific, 395,\r\n        \"8.\"\r\n        \"7022316670098795959727408762827482104361505903791877283921876903868602415596437465814520086552230400500984\"\r\n        \"5672509117962584522015252416171153944623922048021811670715197632594303566335424562084952924302166284271162\"\r\n        \"0992116548640972021637094804825070765198845261168362052582156148171394464612237005333734915500968164199971\"\r\n        \"87621877146469562458463689321063101213271639977619997807778418064117431640625e-149\"},\r\n    {0x1.e8bded2bf3efbp-491, chars_format::scientific, 395,\r\n        \"2.\"\r\n        \"9861508065908777159451976047342515240826688859949110638489858234060840988973359424384553665819870965413447\"\r\n        \"6256943272501564888338028997374032133260948786678076350777407867941949730285495110740536215009936451824351\"\r\n        \"0024657283742270237945843651504136068975350045379052042474267029695327356093256084645810010718354716697542\"\r\n        \"68192542916115180944707276419549670486153214454816406941972672939300537109375e-148\"},\r\n    {0x1.8a43b5f93a8bcp-490, chars_format::scientific, 392,\r\n        \"4.\"\r\n        \"8178117758993382415252081853649016760029538206499370204986995420250082323503440516020366472603862356528682\"\r\n        \"2407474487671722791487229578768266569205598375311931512631402861579435514639874109138388148482164551601658\"\r\n        \"9991338662690181015071509492664273040280948122893995104403874967577075668844761974265722111301155846657648\"\r\n        \"10221611126794232827586086115464157619836527146617299877107143402099609375e-148\"},\r\n    {0x1.7c6fb9421797ap-489, chars_format::scientific, 392,\r\n        \"9.\"\r\n        \"2976724414783708703425137615132523255799443671421598073694843277985025047735238958873938469833101210668978\"\r\n        \"7849419886842856325526502716934419983558360032835835080894125849892846465314091581834698079153876328993648\"\r\n        \"4730102094049772932148827792590711460754459836901369343119647606860551192961236559861883261715726861152891\"\r\n        \"43456512542275199984831499038060061146371282347899978049099445343017578125e-148\"},\r\n    {0x1.fc4d97b6db260p-488, chars_format::scientific, 388,\r\n        \"2.\"\r\n        \"4845337797454605412409621847810516244910538112904300134285148151719670450247219375039112563279547871450070\"\r\n        \"8261201353671779025865604768841322168996196583909997616168972687643361674751144097063023465593797952596539\"\r\n        \"3871719212044328488997810247788723400358607298489506003722550735501161314071797972142749009847789793383658\"\r\n        \"4355771901909066274978117572734548357260564444004558026790618896484375e-147\"},\r\n    {0x1.27312209461f8p-487, chars_format::scientific, 389,\r\n        \"2.\"\r\n        \"8857361527417207852560816625809604310973138050037527355003547400669847002661975613103114130109031618794874\"\r\n        \"7123850992698667099033685561487362675009968516001114183271998961003820072099355306942878689026849858227367\"\r\n        \"0224442596264970542245334711246017142526341026122147120651448137089111639290660393218550072182078704511962\"\r\n        \"93377558772035164374411778261640681986222034538513980805873870849609375e-147\"},\r\n    {0x1.77547904a2effp-486, chars_format::scientific, 391,\r\n        \"7.\"\r\n        \"3382987425347269650466241166435692135599525604305813942337856931534257940953624331547168348337623202811632\"\r\n        \"7675134796928634170492220120827081521431892535790219564289416877103465440408362924506713267045825031797854\"\r\n        \"8465353673947500213159621357227497454897214905553162925688998444394828308276455932000197241734550930846676\"\r\n        \"6426135760102477320412501970623396496673507272134884260594844818115234375e-147\"},\r\n    {0x1.a21026147064fp-485, chars_format::scientific, 391,\r\n        \"1.\"\r\n        \"6347598189352821770450540544887874910462748993562374915104923632121430427394154917169330583508545076873765\"\r\n        \"8921710993603107178696650209105813061398573309841803393393955858839364145480190924253344292068014980758090\"\r\n        \"8718275496480021313751877719439275878875402393075928784943183580785470118572485534281639981340542519549125\"\r\n        \"8920008304407477816080785984194194415675127629583585076034069061279296875e-146\"},\r\n    {0x1.e33ffe116dfffp-484, chars_format::scientific, 390,\r\n        \"3.\"\r\n        \"7793226434705113646355980315406843842730161819232106915137928260298076813313813372642658016571660158177452\"\r\n        \"3380558558885463980900241817266548165024945160760116563363642163937498191689679806757915110601496243241433\"\r\n        \"0499266088828954939790981701152596161360776773445374142941503398715913393644403242726936741616261493580695\"\r\n        \"326300741215037921072531691842576184736657296525663696229457855224609375e-146\"},\r\n    {0x1.0d97cbfb3bcadp-483, chars_format::scientific, 389,\r\n        \"4.\"\r\n        \"2167773461430841096168944818744711307173047891677654476328304156506561188571555447146574496467644980277018\"\r\n        \"9032079619071193887326614005453208506142767585099322327607003777151774727915336623087705415153818142529084\"\r\n        \"2099630456044653627617275033231662411852557050306840891668696221622591255126538876387262079254791476225386\"\r\n        \"08157385395783430387663692794943115504935349235893227159976959228515625e-146\"},\r\n    {0x1.fc7c669e372e1p-482, chars_format::scientific, 389,\r\n        \"1.\"\r\n        \"5906736035433478795666492032411048437699973656947142198913549771963049630784995328887755327128517799168066\"\r\n        \"4449513987454305753588712869415089089334399246465373968206186757087206883763796426378897368432012105506716\"\r\n        \"9326875666687873260448935727563546153270143949896632947326143345688646515033756768437592665073003021431039\"\r\n        \"22720410241795394945083183557178740930027061040163971483707427978515625e-145\"},\r\n    {0x1.ca4a36bac00c0p-481, chars_format::scientific, 382,\r\n        \"2.\"\r\n        \"8672951771554432303752342207397704874686379593615168937776854662187877340530190070806874633750499494532240\"\r\n        \"8818988088425644366771375033162476683944430496046660877697340757485633491943820158288520141534155518743581\"\r\n        \"2767248875572624752948053776526726589546868961296725647676685932179510318584450981563941057488017848730749\"\r\n        \"7168016508884042466468421161973623156882240436971187591552734375e-145\"},\r\n    {0x1.12bf051e55395p-480, chars_format::scientific, 387,\r\n        \"3.\"\r\n        \"4379041633188433781391796667234074028435987426722232347622158962219748268262338986398326998553663730733286\"\r\n        \"9261263118140094455518050615101152124817967901873027097068416097734341519818353755672448406009788972230454\"\r\n        \"9743586116310371815207363078165968507947562208219568651368309624970888523684513951862673701624317481637524\"\r\n        \"015502112241292046885060497592168093916598081705160439014434814453125e-145\"},\r\n    {0x1.7af60d7aa5967p-479, chars_format::scientific, 386,\r\n        \"9.\"\r\n        \"4838962310135761344092396167333415391569688763220398309454881231605306514746244823307718893899616717980139\"\r\n        \"9057332623091728034184656426130519076454149994764188014351734458633392258002552377150853127295195134676491\"\r\n        \"6390419819472756495777678716502600107256209456679635005594684631820296766940686808383128006043474601256098\"\r\n        \"97815494060316512924194566440394549289294445770792663097381591796875e-145\"},\r\n    {0x1.b73357a425a97p-478, chars_format::scientific, 386,\r\n        \"2.\"\r\n        \"1982900216496951912636237517321659702670798815780532692828188834087902755885019342613033041567821756664960\"\r\n        \"2016365783841795080898673546344147158231616257438737990978384536904134112934509784794056796055102796462400\"\r\n        \"1327053575991226081531574192187674082752085759776287241663068738388351272800591961971565145686989428887852\"\r\n        \"50819213532101900745451840933630816010690978146158158779144287109375e-144\"},\r\n    {0x1.cba92c6e719eep-477, chars_format::scientific, 384,\r\n        \"4.\"\r\n        \"6013959285449562218784849796417406268924809275050240965117618538701248742081787894298428024850220631495394\"\r\n        \"8843090919478937616929128000444092637251029405884356250538030864103321329060205766394419703651516351399195\"\r\n        \"6339704480986356625598760310779666153618027622379329597990176509872185236937051592948849485535253991494778\"\r\n        \"196501116690165993113720808993516442342297523282468318939208984375e-144\"},\r\n    {0x1.8be4634ff76b9p-476, chars_format::scientific, 384,\r\n        \"7.\"\r\n        \"9260896178364885712586863338954190885910769204002578873260609825376157123972452672117034283698349000727217\"\r\n        \"8811914952940248175221547710878388778883291965540342485837401637947057005394455813653078713555099106601674\"\r\n        \"0526456787922005976420018108523974718072488216371523207019836445781599000049045968896364821326508004681718\"\r\n        \"328980102387774532495348135674451128807049826718866825103759765625e-144\"},\r\n    {0x1.195bb1128d351p-475, chars_format::scientific, 384,\r\n        \"1.\"\r\n        \"1266048743457620018132449750109616902012501552632301028746300222772300762831245282635755871042079935221433\"\r\n        \"0397304252105202227560938436270619441940232384938913439609896370609801593025643499862217542244084349248920\"\r\n        \"7365678039104096653395735733434216596882709167520981641503247868678058348447755344979159303793136769657451\"\r\n        \"566731575139884695914882679901314332937545259483158588409423828125e-143\"},\r\n    {0x1.d9582810d5991p-474, chars_format::scientific, 383,\r\n        \"3.\"\r\n        \"7906989762760977010539296420204713197961323178556125566473600056453448874348023486668990302113409067507642\"\r\n        \"5512666375287866720556532018498012991417750946868079816281685420092627374913565047968810228895304309081082\"\r\n        \"7776483853652208363091961204475009565583127525351886644817961845159699988605135294441599824142042948767636\"\r\n        \"76852096147815252970649825547955202864613966085016727447509765625e-143\"},\r\n    {0x1.91dc30400a639p-473, chars_format::scientific, 382,\r\n        \"6.\"\r\n        \"4364586827198767306358125396341809950796993470218142142343574880083891301701589050045580411828601056066543\"\r\n        \"8578613541848555355275084443348178823538223876085347005568276012166754572940813489866481451272426938454005\"\r\n        \"7688367320099074111805095744115674497205307649349993431268929194537492248042883602140585143587994761332590\"\r\n        \"5648050990408162049774727642148519635156844742596149444580078125e-143\"},\r\n    {0x1.bb4959cd66718p-472, chars_format::scientific, 379,\r\n        \"1.\"\r\n        \"4199943377251187537949675350005079423187700022228758326221521640526029521346740953695783399936936600872287\"\r\n        \"4407753705401513284671140970518928691753252515077837559669042688180179223137869737013695121637086330367906\"\r\n        \"0473230296854766707360327968674338036515155027602470266905967351968056368459849948118636405588195957644242\"\r\n        \"8067625960673098033625050273798251510015688836574554443359375e-142\"},\r\n    {0x1.cab1b98b3b707p-471, chars_format::scientific, 381,\r\n        \"2.\"\r\n        \"9387007315399001337843467140701947490646533646383646741168981933069251261075266021456186550679433594978996\"\r\n        \"7239321904345156747275229367729995831822884324397633531132361947458460677520772536493144275246577960215862\"\r\n        \"2313197512447305365216189939904546876264703794084991693455204003412709032881758809299262428136448855311663\"\r\n        \"929317040733753824545242128163380357364076189696788787841796875e-142\"},\r\n    {0x1.513f97a6beae4p-470, chars_format::scientific, 378,\r\n        \"4.\"\r\n        \"3212757508195659485508065379853979844500716301246743150152785223009553880036241184640287335154013264357096\"\r\n        \"0952043271132202966879024207483585271608519582168701354278018371563475097472078209541866054396550301840853\"\r\n        \"5752782166921273364856333578679926605858330352242829232861196385760569862934221186030844482600416992243969\"\r\n        \"322617877399178251164590935928799808607436716556549072265625e-142\"},\r\n    {0x1.23ddda4aa4f46p-469, chars_format::scientific, 378,\r\n        \"7.\"\r\n        \"4795674901009501599687387979276428028217065964050376989668893383691257823806867042515842078744474517031407\"\r\n        \"1895485469191115831640711419412290132762704670408024637792177786766340048068468354031068962246601535160186\"\r\n        \"2349167111369075434108876998189806009451657247710719467572422765836922739389375015650257781352180780599630\"\r\n        \"217854761888887876568332568893993084202520549297332763671875e-142\"},\r\n    {0x1.37ee070b3fb77p-468, chars_format::scientific, 379,\r\n        \"1.\"\r\n        \"5987439857085749128543979468421347404798369339619842909758538091544906123513224004714621004604317341155476\"\r\n        \"4830277704469716857696790698012386358199581778604043428049370268894875238346646052337439645510118935311304\"\r\n        \"5871567381746415270150272493696335723627439701097622331692153552932290372744776405111128360907502878298528\"\r\n        \"8180585511628949125194354419221554053365252912044525146484375e-141\"},\r\n    {0x1.7a3e814f7c455p-467, chars_format::scientific, 378,\r\n        \"3.\"\r\n        \"8772543479398745912495310674542245392251289103259487422362584185221005555927613777493177235835548528117811\"\r\n        \"8302432240933992624204868787463842883298566251264050405797426114438754525206002596249474935519087677964390\"\r\n        \"0013313472242863345433568164189149550863949526447244598726165343683113264168124346368742549505223090492057\"\r\n        \"351838011423203673479209729890726521261967718601226806640625e-141\"},\r\n    {0x1.b008ef4139a7dp-466, chars_format::scientific, 377,\r\n        \"8.\"\r\n        \"8572904580841789614754232711686396959759290995923259860158443209002812929627074824889999094798269835513254\"\r\n        \"0998845477274750334005664050117293551284426384679313859709553221587795313680157822564176364684723674516690\"\r\n        \"2000693415871071595853995191227910934758948131752454927512504000367582800588546292331716557590430260551314\"\r\n        \"49871016536323016683784903335663329926319420337677001953125e-141\"},\r\n    {0x1.6a3ceca142f25p-465, chars_format::scientific, 377,\r\n        \"1.\"\r\n        \"4852721614344735437292541639963060443263141102043656353372955189549517666043979043032187958942357980893037\"\r\n        \"0840252848547401622923075567638582241455382956074528344237666272700101153478685493953250306368486765749182\"\r\n        \"4332905746273268182840421417991838003237060783473024229840428934381790407194987886288409466183411626302457\"\r\n        \"65429564945800410859233497973264093161560595035552978515625e-140\"},\r\n    {0x1.879c5a128f335p-464, chars_format::scientific, 376,\r\n        \"3.\"\r\n        \"2114166221217845174327447115992392374668964402329268800963712003830340521992537289583647041045528110284263\"\r\n        \"5303499515391399834686408526191662512438001577893564043814181085298234246800586801045226636006748241313130\"\r\n        \"7522786571652361908511927539092360053210712569816779695997967844462040278748911843877424273521146041902588\"\r\n        \"5846797137206727786040705296954911318607628345489501953125e-140\"},\r\n    {0x1.a13b758752749p-463, chars_format::scientific, 375,\r\n        \"6.\"\r\n        \"8430533321006578298315622206827888634375564457496296600363690350980619762819624331006890836920053795052268\"\r\n        \"8370402495113279403328072887329458087656201260342686767845714173996590984304971343366016453921898634106206\"\r\n        \"7674396745885910406868827681945359154367703453121597743174729503689380057241534775569646829196396378247871\"\r\n        \"130136170076470499001874969735581544227898120880126953125e-140\"},\r\n    {0x1.dd22c5548b2a9p-462, chars_format::scientific, 375,\r\n        \"1.\"\r\n        \"5651071039519719751268946730433209491685269599788420485953219030692473518449901649555366566818121803846373\"\r\n        \"5680904417760697692262477792647738252648295215490091671889157286396107620561142080138411428231115221654909\"\r\n        \"9455747381869282054756781298103540835711990016306871443323392685777042535287304513633281869348053796759051\"\r\n        \"449311207979673589429925328886383795179426670074462890625e-139\"},\r\n    {0x1.3a466b3b9a35dp-461, chars_format::scientific, 374,\r\n        \"2.\"\r\n        \"0617783292012132110048484524577034708763801812806846889421937147593782421046544694512376644429350834218531\"\r\n        \"4226530713713824082127126656554247991288683437918042715199973601623635055616074512412883505084857003066123\"\r\n        \"3050190132621333636152617574413419624138051138995646737549047491952163495322980116587422304830212863807167\"\r\n        \"57918646594494906099104269969757297076284885406494140625e-139\"},\r\n    {0x1.af63dcdd336f2p-460, chars_format::scientific, 372,\r\n        \"5.\"\r\n        \"6602054122048727921826190049712048498669146495554482077926052213769892391972155107823538731408874729899034\"\r\n        \"6792194827829660599641240756981656489830070688868731818918413640802502222925430134747083688070474879030296\"\r\n        \"9738046971386503460831112186107202194534175784137625129392628895158265668499896268624088807818901523078678\"\r\n        \"889008399162559304063080389823880977928638458251953125e-139\"},\r\n    {0x1.6ec02ea745f7cp-459, chars_format::scientific, 370,\r\n        \"9.\"\r\n        \"6241634559974588550470031663368349943378831463927445452058900881064926118183848091052345386686684876344532\"\r\n        \"6161315986809133600636497090313419475443507804928279463021903686529521982727237277282770740989981019500686\"\r\n        \"5574824665465743137968830206089146401495465235722508613312222305895849308346944245441317410343774024309939\"\r\n        \"3609930015773545886048623287933878600597381591796875e-139\"},\r\n    {0x1.9e78dd35e6f36p-458, chars_format::scientific, 371,\r\n        \"2.\"\r\n        \"1752909285251191697648113699053702637727489520541042360582333721279125948156690408463090424584646923549518\"\r\n        \"0942992131659468643940147628854434370427060263285244175515322077650246922688324052450302930384427072839475\"\r\n        \"7842492386837881192332322824075015094377235565634494864419445464055485911488407505261872310932269115328920\"\r\n        \"21280816813831593403705255695967935025691986083984375e-138\"},\r\n    {0x1.9a585f80bab85p-457, chars_format::scientific, 371,\r\n        \"4.\"\r\n        \"3072629120188103249512398775746221992085610716624708892374467991779261742776439264109609536390646567234426\"\r\n        \"7525349801934937730247292561608380009185242796805519587479768507806463318749894112461752099897976376679226\"\r\n        \"5859716833133142309161784445679684796923222134468302918127430999767436216601957379453800307851317225326157\"\r\n        \"33040986549275130901293096030713059008121490478515625e-138\"},\r\n    {0x1.a6e65ba502986p-456, chars_format::scientific, 369,\r\n        \"8.\"\r\n        \"8780896980845694512355699450135667167474608494983516478858968409659482574692196941169154704757494026767065\"\r\n        \"0881004269664970292068439515226078190024902892002557556809749308704779003267551048192576495608146500136488\"\r\n        \"5058786848795066433476360168510321692410412462444936724066019551372571776922263017000926269477966339109356\"\r\n        \"079124769044186304967070100246928632259368896484375e-138\"},\r\n    {0x1.2041239e921cap-455, chars_format::scientific, 369,\r\n        \"1.\"\r\n        \"2102860505856427441863506911416438557648140836421513056577062373671144072180353513990930639340259058767237\"\r\n        \"3257099356704235139962445699680300772732754695176822292468996066789589373242949311404414022027874115262780\"\r\n        \"8785308312747064770780467959018293493486808663697190464543529527135601732353052334628323918972488583866538\"\r\n        \"415926878032025104658941927482374012470245361328125e-137\"},\r\n    {0x1.e2c2206571f8bp-454, chars_format::scientific, 369,\r\n        \"4.\"\r\n        \"0538881189604874758994800103224482110424419984906922206717025596060356483137003469609681462381640957524317\"\r\n        \"2911889262541296693730039817442824706217992206174740879595790963900654804304187742835595325686164988374589\"\r\n        \"0322213024653290007771883621311168396610036064921521154842858228344839533773793548383142400170080167454900\"\r\n        \"059158143070525692763794722850434482097625732421875e-137\"},\r\n    {0x1.264bf10d7be2cp-453, chars_format::scientific, 366,\r\n        \"4.\"\r\n        \"9426210322338252635572061070906968405888216870034632652951803647003944472039593835210475205592373220399127\"\r\n        \"7018801884718299712534752193391140108918824839767655067751800656957226981466137842744520790572580634924148\"\r\n        \"3459928010949501467461950221909399691687985514158948841431923008834959479285883564251332461521178735704628\"\r\n        \"190938091092387907110605738125741481781005859375e-137\"},\r\n    {0x1.cad3f14cb1924p-452, chars_format::scientific, 366,\r\n        \"1.\"\r\n        \"5411744957634478558732875158007911309742643791263152383028800246394250010301841139543420118207407753920760\"\r\n        \"3218589797015836084381494407933290832598692742653536345116174588473355663138399758752109216617072642962120\"\r\n        \"7135842117636071464132112769695338048041137489524235515090494741996883492492346460319710822961304962419452\"\r\n        \"460110382008284801713671186007559299468994140625e-136\"},\r\n    {0x1.4a043fb92141ep-451, chars_format::scientific, 366,\r\n        \"2.\"\r\n        \"2170106143596450609014218157804357964381470241171242549541903911649755928696395840283489106316089146427743\"\r\n        \"5062966705933777580211869707929056934148231613404163981973357636235389342669699272984120998848954292369787\"\r\n        \"2554428392780018075983672770091316945354715295754269008522521640290584844958554224663146563346799785217835\"\r\n        \"259873951636588884639422758482396602630615234375e-136\"},\r\n    {0x1.d91f605f33ee8p-450, chars_format::scientific, 363,\r\n        \"6.\"\r\n        \"3567575408975392743526724403263859606835265005008746398722782311228825240165088104697549263316148656313234\"\r\n        \"6426578332847489634158927173716225287463270003583594203279044269022582967257937898723790101285177867709597\"\r\n        \"6655741399044978428732881345094886140578723570628664975737909788927071910708005133352031145300938446489913\"\r\n        \"435412388853507081876159645617008209228515625e-136\"},\r\n    {0x1.653fd37ce380bp-449, chars_format::scientific, 365,\r\n        \"9.\"\r\n        \"5998267065455804136465170482547947366999684488969626917464974228247748059445435327953748521367236770367453\"\r\n        \"1451560088375242660031278793518034857995227061963548088366069731985696736508405628059744476431105501074451\"\r\n        \"7632659439131361488912251913663824732302366424969441750856521571686454336063947389316836480712814735548475\"\r\n        \"72435787250721972441169782541692256927490234375e-136\"},\r\n    {0x1.ea583b86883d5p-448, chars_format::scientific, 365,\r\n        \"2.\"\r\n        \"6352597315051091964713257494843957096579268453980939881002664775610008832253360604307895378781817021575772\"\r\n        \"2131262889797575381102714481443132987139497702786597756696037753098692013672145953687801073867566319294992\"\r\n        \"8316534778995707013335990382676469114470866914005971164662199459123732837094223290390067459830854578717031\"\r\n        \"59650651759893236203424748964607715606689453125e-135\"},\r\n    {0x1.9caa8f7dd9b8cp-447, chars_format::scientific, 362,\r\n        \"4.\"\r\n        \"4355852076232533703967017722389898945821857225058681977965240699080262887084660386234585786609389805397653\"\r\n        \"6231928757581244511544360492016168686756363796237882797468921698797356010241314741136892145667049203620013\"\r\n        \"8721847402285626290068242713216335744583762528489836802234047080678004035672934625936455690987526985520882\"\r\n        \"90749606525054105077288113534450531005859375e-135\"},\r\n    {0x1.0b26a7ab62a03p-446, chars_format::scientific, 363,\r\n        \"5.\"\r\n        \"7429993366141817840812479753542746382814749094420490827347512947579020362059688082352895775572141852211758\"\r\n        \"0909348864872030450848171956721649351848205979835186312573993891506062416099298516603424161994426165270037\"\r\n        \"7907106153840215329576081676331897976487016666661306584555944953024603245394667724116557668613623517681616\"\r\n        \"016498924448541174569982104003429412841796875e-135\"},\r\n    {0x1.694c9672ecb8dp-445, chars_format::scientific, 363,\r\n        \"1.\"\r\n        \"5533843624429323819438527942729951888826684224818085321658052959257745308554358873724455989172691764656869\"\r\n        \"5293047034140544314292313264389433797659762881589730183326362518440901757090487907181989255445273967251973\"\r\n        \"5593544269570691464381471936515939828758279599762414292837467494719157630828112902620254122175049117795947\"\r\n        \"993016236754471037784242071211338043212890625e-134\"},\r\n    {0x1.15ca8f95f7163p-444, chars_format::scientific, 362,\r\n        \"2.\"\r\n        \"3886940472478101815516002304586010705250369950263278520937586735205575920300597436987445133566199723253520\"\r\n        \"9056220889611772034033406268425620639481665338487162539900951615422228233639702916913751658371808451818416\"\r\n        \"1750465910278224501683266661880297864234626506047662879560009369157585287147781138669192147467158593106463\"\r\n        \"12523018774953698084573261439800262451171875e-134\"},\r\n    {0x1.1c2c03dc16238p-443, chars_format::scientific, 358,\r\n        \"4.\"\r\n        \"8871215235872988435170790037236813375378604405677194217241718090326866560500874834949274333014957336071556\"\r\n        \"9022758867015207526151988895553482901234999063630370884845462854314493655716813545090738801982175971799897\"\r\n        \"9421127360512136790705971320293037416921996157365427902453505027610932303474146785641141022275140400955070\"\r\n        \"0580088999913641600869596004486083984375e-134\"},\r\n    {0x1.5e495a5a5b735p-442, chars_format::scientific, 361,\r\n        \"1.\"\r\n        \"2048289504187995891459061440516981076638732120771659218926621650385434481812842556576460656624351028821905\"\r\n        \"8966625819337939917796520503670154154436651304901717368743143186394807699935909156584679015642358410947459\"\r\n        \"3413689541976548679931460273314635130483027907981785192792081387152832558721199653564067984309737744271471\"\r\n        \"8438765419961100633372552692890167236328125e-133\"},\r\n    {0x1.810f44c622e44p-441, chars_format::scientific, 358,\r\n        \"2.\"\r\n        \"6488657681982224362975086519642031326070653599531695491298942136575989842374130913957574220303933630452909\"\r\n        \"4287691741966627719771032423495762254409444179311243835772567386195458292994705194115642989850139200494159\"\r\n        \"0588928963306893800268427406521691881809325113789150170542748396344959084162370306735064676678771923231964\"\r\n        \"9187434862369627808220684528350830078125e-133\"},\r\n    {0x1.97653902c35a8p-440, chars_format::scientific, 356,\r\n        \"5.\"\r\n        \"6050315915746605269229572281796709012860726683120704776540492198506714810181021008440854108255765850085384\"\r\n        \"6529071987618814344910087704317888361861949507041571302535319807153374858734455612866387542618405871469146\"\r\n        \"7962651372264615689058812238015769309640382466140672015426133338338772381569455413477985178391665863290374\"\r\n        \"56071233691545785404741764068603515625e-133\"},\r\n    {0x1.d0b06982197c4p-439, chars_format::scientific, 357,\r\n        \"1.\"\r\n        \"2786580967537967393170156267226710383127074452677704468202081316753593149446278054272379462839378967644636\"\r\n        \"6320800166067176943939047031161439109805642265774803971575385755561407104084377645079662000061709133084688\"\r\n        \"8569611013370819364101411249570919954868002270900165871976213924414176953438451896858275740510024279521401\"\r\n        \"890935550227368366904556751251220703125e-132\"},\r\n    {0x1.7ad59dce3307dp-438, chars_format::scientific, 358,\r\n        \"2.\"\r\n        \"0848335483911190942323580514455303482680343446709325008703159284449727956557371856834417264871825204784953\"\r\n        \"9318713541842166242449663027334071210292408400120764346191285493915664731350155622020867542388811251124441\"\r\n        \"8594782642109557636315727983442346610806562372007733240534067389665742275872183681831213869255187963209097\"\r\n        \"8955449855902770650573074817657470703125e-132\"},\r\n    {0x1.22c47def048eap-437, chars_format::scientific, 356,\r\n        \"3.\"\r\n        \"2003528362030216678821821948371825837897558579366430203164885731689848020333537717135124881473922701620992\"\r\n        \"2888692730907506242357242214089838597240338986102464283276271560347056644198372344751496698973482209898323\"\r\n        \"6068759470619965482251995605014430152608968389315404259797294622728604564411967070087013194247143227410060\"\r\n        \"11785458440499496646225452423095703125e-132\"},\r\n    {0x1.d3be4f543da5fp-436, chars_format::scientific, 357,\r\n        \"1.\"\r\n        \"0296499233307166051409990566706604558221380043891789602456125181542044296852211953765862019485098933960139\"\r\n        \"4420734357402502486292275942333853238461193404309849063372198452914528639370611863498197972678354451284120\"\r\n        \"4496073458814758724065894241925219977128262975118574813009362420632733150442614970604109796889529120935379\"\r\n        \"002954590532681322656571865081787109375e-131\"},\r\n    {0x1.fd62fa30b36b6p-435, chars_format::scientific, 355,\r\n        \"2.\"\r\n        \"2426394767283500572344787579772127805358981710503513931978178996544410137352679575618851857302903865882730\"\r\n        \"1751992291035654960112926310959345577460789432200950261826623585506549029505895986246328713415363125428407\"\r\n        \"0821805771156523871968356216030311242150331649720790515554019625705236196928987062872353517240543707960548\"\r\n        \"3585709180260892026126384735107421875e-131\"},\r\n    {0x1.170603dbe87b6p-434, chars_format::scientific, 354,\r\n        \"2.\"\r\n        \"4568729171490546923419108015884002973420344879350156891911357332634520808703214918225650257080313080960162\"\r\n        \"1140390889672566806744097301945489507607449341174694978874620449423462236080322660186527317970438773249144\"\r\n        \"3371566819375998762229137926757890994877314033084529060250209190344653250494453969941105882736470645243131\"\r\n        \"993851193328737281262874603271484375e-131\"},\r\n    {0x1.77ea54b4399ecp-433, chars_format::scientific, 352,\r\n        \"6.\"\r\n        \"6200607960369036504168364221207739485773877228613560172975009101038528445698754193218898779976326154511917\"\r\n        \"3363842872316641841962349364203859251798613207224032137413479473949030378760712878146559509391806548214262\"\r\n        \"6133671636697690281002255506343628331447342616711548975819904164047980593449147058277505601860937669428386\"\r\n        \"3429291159263812005519866943359375e-131\"},\r\n    {0x1.93170d7796999p-432, chars_format::scientific, 354,\r\n        \"1.\"\r\n        \"4197241995605936318075317043001757935035457049201291955866575822547697829794624951982915510254185587423055\"\r\n        \"9487389305607751617582700679057839905945613876060209570099889526685608968859022154545165173060918859596578\"\r\n        \"4720429445370267692111528854939925241769500649591614777352662374519950927507309951396734409084237509869608\"\r\n        \"206969360253424383699893951416015625e-130\"},\r\n    {0x1.ff784c52bc952p-431, chars_format::scientific, 352,\r\n        \"3.\"\r\n        \"6028982430553334107374243676082305559955741670713515214432745189797018506318167441511937904497465065161068\"\r\n        \"2213475903496748485769939459318413756361660218138899061663084963748999691972507933997769029036491031713027\"\r\n        \"2509703637802374239144100499997431894236097897299940723946702573929557957332859418318120851204621000324346\"\r\n        \"2693944820784963667392730712890625e-130\"},\r\n    {0x1.5af297257d112p-430, chars_format::scientific, 351,\r\n        \"4.\"\r\n        \"8879393706963279061651865580809295809985896396271068785213668870613554247017676426461356877587014324609933\"\r\n        \"2229707765029557354523950224816865264246462861886095699349276602653803989153158999090858568594116436322403\"\r\n        \"7664050403023168762797067327883280705896601134110886320862615955338992676555453042929182604106022776158102\"\r\n        \"516319559072144329547882080078125e-130\"},\r\n    {0x1.03b2ee82074fbp-429, chars_format::scientific, 351,\r\n        \"7.\"\r\n        \"3174892255233898487807636785800529379525766260573968879990028870309082137226413786970703775409476682616810\"\r\n        \"4680726241144403907247560017629565271829849434655181507428399984635472560338317561978206370575594884945710\"\r\n        \"7129514927443108698035930496633435099731335354533972538276537731498433942868404311764137596868821065976273\"\r\n        \"843034505262039601802825927734375e-130\"},\r\n    {0x1.9fc2b88614a46p-428, chars_format::scientific, 350,\r\n        \"2.\"\r\n        \"3429620296922070165437262528679235149465662294858826443217125037749387447136789889409314083302682771001468\"\r\n        \"0222756477338010049488544385369435757883115124974928734552290063202520905298185016474992670850977943921244\"\r\n        \"0228311467969508963451461485549943141147936657095208040273361231910217912547166432836108378900052615079196\"\r\n        \"98260593577288091182708740234375e-129\"},\r\n    {0x1.1c19bcdca8429p-427, chars_format::scientific, 350,\r\n        \"3.\"\r\n        \"2020192787585524090907938204703897171601201083956022918880219758055616705464752170779213045668342297853927\"\r\n        \"6218514141557210930831458346531846588992803118289362499502577922826432688268564989495048351325555007141628\"\r\n        \"6759032612040821481599308776899597909970425095316884308438864676280665908537781294443748170602858163502624\"\r\n        \"22247396898455917835235595703125e-129\"},\r\n    {0x1.1d050f4eefbe3p-426, chars_format::scientific, 349,\r\n        \"6.\"\r\n        \"4247592636344160339866493641672423120493138167713318610601027318726114587010038633956202506757668116896117\"\r\n        \"7536260327713435210153350074908844036866886983227957128782764805685483552587503499283051807011191846971140\"\r\n        \"8579142730695650817051390788544338188841755967937911393061842504818190481891870009980858467139430006964673\"\r\n        \"2254113885574042797088623046875e-129\"},\r\n    {0x1.11c71a2da956ap-425, chars_format::scientific, 348,\r\n        \"1.\"\r\n        \"2342695551721854116452683863845499880701888817578316467000565057081031681549617905907560256885144592305226\"\r\n        \"7240083781534046249220963683438736274553173251428809235268476409175105649982640214427984817459457410804145\"\r\n        \"4897293931112550425507422822024993325841784631941211847062895362538601302639805927337145199863994993183524\"\r\n        \"684354779310524463653564453125e-128\"},\r\n    {0x1.ee81e63a1dbb5p-424, chars_format::scientific, 348,\r\n        \"4.\"\r\n        \"4587660431030845738140444950938925800210778297935183932030487301692384916913432314579352529747020633396157\"\r\n        \"6718982792226559730910116675387121867734619940500817757656699817860412688243739129436110739866715672133838\"\r\n        \"5429894258111317173503504684713165635003661117654688712321287868251005918630130709379141148930754401380482\"\r\n        \"931926962919533252716064453125e-128\"},\r\n    {0x1.dc836471938d0p-423, chars_format::scientific, 343,\r\n        \"8.\"\r\n        \"5930403540130827014185033574850155045437600585425997369866718416666609027827328902822137151134768600284621\"\r\n        \"6279124762562562326885970331685674789827255964644127407691554650046050256430460386721430959519718823793955\"\r\n        \"1008802980430695929352329472514508171419493761170181627352450560922451007920075807096848500427066497309169\"\r\n        \"7902418673038482666015625e-128\"},\r\n    {0x1.55264a312e91bp-422, chars_format::scientific, 347,\r\n        \"1.\"\r\n        \"2304010474281754010997831364457453532363710534547555388355590377279653877735542614715890519378694731622300\"\r\n        \"6782910963684928592070655580364056608821698264700123403236140552502228229389995505527297808002861636424769\"\r\n        \"2131602981552825675357276743670326242029680867553906299343023194677184192076335608358703832152999946281113\"\r\n        \"35259745828807353973388671875e-127\"},\r\n    {0x1.652956524c153p-421, chars_format::scientific, 346,\r\n        \"2.\"\r\n        \"5763001930484683121866989543781242187607596461670705046008890509721150477966409285424037614285381953347765\"\r\n        \"4997259597310460635607291805673065230273042570734235752898997793752366928544966510763348120931402869337506\"\r\n        \"0230754644492619570048227210977560174685317157897957914242825662416808322569345838414941963958465498407690\"\r\n        \"5748224817216396331787109375e-127\"},\r\n    {0x1.0a2b6e525e678p-420, chars_format::scientific, 342,\r\n        \"3.\"\r\n        \"8399042293533291316095939321676303114799213077840440281919805704609059805275974287633226980837249931736591\"\r\n        \"0044710145437381439295690008968031009068382843451057480056121258710576890301225315461825406976833128757025\"\r\n        \"0854349786862226002299989130792880255411596025381026026745679225130052848864003625387812494718087208411816\"\r\n        \"391162574291229248046875e-127\"},\r\n    {0x1.80f3cf53f1e56p-419, chars_format::scientific, 344,\r\n        \"1.\"\r\n        \"1107053483914006829775982286940992882599488872595391539303723414330261552652730527139790712226602314231212\"\r\n        \"7419956658436525690382907755165110589877692458034515109141334121688675583164152180022072392038346677920997\"\r\n        \"8618498763060489316670378435241139862270569941618445758195740528710132038842602464041533659108718090635647\"\r\n        \"96815626323223114013671875e-126\"},\r\n    {0x1.c6389b5e53ad6p-418, chars_format::scientific, 343,\r\n        \"2.\"\r\n        \"6211336846809098773276314685119387768693234190106735856477190922246722065339865398519354564344593251621915\"\r\n        \"8248983511966078734456230097679988912873164107313981697736934498486708329908151477908573290741613410601556\"\r\n        \"0829130407628536830946616731021905982268502134836446565495063653291366241897645429462270546400182169577419\"\r\n        \"6996353566646575927734375e-126\"},\r\n    {0x1.55b26db32be1ep-417, chars_format::scientific, 342,\r\n        \"3.\"\r\n        \"9436012113465104438175990673990938076352359286600886903149796902820550632115347356375237735627780655402675\"\r\n        \"8184464885274554100597829193095879346435654863845212628185087858146802889576223211174464307298442034499394\"\r\n        \"8110429433813295989818119876936942903021691744560733604484421618817074472770713269558092405053795204139532\"\r\n        \"870613038539886474609375e-126\"},\r\n    {0x1.e8a41e7181c02p-416, chars_format::scientific, 342,\r\n        \"1.\"\r\n        \"1279031828486725368285162812517936169788860166634935888590711537150219574688036629032895212853463959440650\"\r\n        \"3650154654466484722168943018596890328292712388739910978936869648015362134240447110651890664773510091035844\"\r\n        \"5188415389113650373815757025479195624246867750482014684485575007572491946959890442186741528474147600036303\"\r\n        \"629167377948760986328125e-125\"},\r\n    {0x1.2667eea0c2e95p-415, chars_format::scientific, 342,\r\n        \"1.\"\r\n        \"3591220818753578967877485753540957219846849806734534544651217267891770002384398001643363339942878637947316\"\r\n        \"6328302358041252417529977510170575717126095134299788618696349062141833073414504245591187769088276321436054\"\r\n        \"8305459034386167488920945628442896474526151212066690180059060509561977041122748851645894198336694813633584\"\r\n        \"999479353427886962890625e-125\"},\r\n    {0x1.ff118baa5e05bp-414, chars_format::scientific, 341,\r\n        \"4.\"\r\n        \"7186848778189670994069605940876219782781216914711086309942798924493013128851790778946762990913058749981445\"\r\n        \"4055147105208148185524779392795023211756732677794200342825699871430136909959253091552973875772042184950963\"\r\n        \"8515139692290002872112044140465990852885558676453756553237897954025802506482414042289106823058197903719701\"\r\n        \"57139003276824951171875e-125\"},\r\n    {0x1.fa00c13d0ddaap-413, chars_format::scientific, 339,\r\n        \"9.\"\r\n        \"3438288096510300708206359179854147909888509692470353687641927888677731435274230558789286142542238872497991\"\r\n        \"9291642304056969254290225288534313592005499287342065072705040637147124194333306505257478080943345820147523\"\r\n        \"3518790218936634917638256885277056259540461483126252396164441218119171308576411058848150414934963237101328\"\r\n        \"559219837188720703125e-125\"},\r\n    {0x1.665b3a489008ep-412, chars_format::scientific, 339,\r\n        \"1.\"\r\n        \"3234786366979427240557035972871836642676524574733744100764337150714243649312395488035954592443876672160155\"\r\n        \"2453328962421458549925648630711638265850295574292128380162020867890736183395718452916357821887276692711606\"\r\n        \"0686026545609252412900499832587222722510252054321150497353766705080322145596004049998388463205145626488956\"\r\n        \"622779369354248046875e-124\"},\r\n    {0x1.cf3a6f79862cbp-411, chars_format::scientific, 339,\r\n        \"3.\"\r\n        \"4215813214105460697767882447548971368626256994487285819832925973102312220381249502362412524582654137714631\"\r\n        \"1911755533093525433960566479878897896249684215009582527023317672508250867310488454244976076546569023883629\"\r\n        \"7191957544621034981392176942003185295012273726522451681136015314107273762726204980959797408157641029902151\"\r\n        \"785790920257568359375e-124\"},\r\n    {0x1.f2a92a57319d6p-410, chars_format::scientific, 337,\r\n        \"7.\"\r\n        \"3665992405027932576502815813307644287807305675409422460506005018551902720267819605398541423809769647828049\"\r\n        \"9866977319501776335044121496578337140066670655016184682180563483630646645866140852592448554624381952636290\"\r\n        \"6038236009913051704692368907667120951434121614917932393108410626345799351846363141934487250850338568852748\"\r\n        \"7218379974365234375e-124\"},\r\n    {0x1.b4782f812a1a6p-409, chars_format::scientific, 337,\r\n        \"1.\"\r\n        \"2895722651891137630425330384438299474095155094770258996582306778094406533114323313551750471068869202418567\"\r\n        \"6514306684322130376192414829153873010105653873073220980942636936455031716866157608940595168933427613117398\"\r\n        \"1279045829482843002519751437286808742894695158893832137633512513924892098960289256708716676413928325928281\"\r\n        \"9926738739013671875e-123\"},\r\n    {0x1.ee7af34b365e0p-408, chars_format::scientific, 332,\r\n        \"2.\"\r\n        \"9219365150591819869806878286596392558866811418403158078032655046272755506560359880667466294148560229158569\"\r\n        \"4781151191877485626592838708956568599966689642307979951883892138750321041592672907937811096196078953938914\"\r\n        \"7880920600844784042147871987802138706797121319153428637095263913657634075401623927059624463709042174741625\"\r\n        \"78582763671875e-123\"},\r\n    {0x1.14a9643bbe260p-407, chars_format::scientific, 331,\r\n        \"3.\"\r\n        \"2696466282687585616618735095593104865627521210668173946224068440449703487453341173667423751071123364783968\"\r\n        \"4085354894924673886100417360021334173102821673101378406750581340715944228625674542170598795643367302528327\"\r\n        \"5837865087998562936760655026168055781811414767475009002774837970555003650418701005575528029112319927662611\"\r\n        \"0076904296875e-123\"},\r\n    {0x1.0ec395f04cef9p-406, chars_format::scientific, 335,\r\n        \"6.\"\r\n        \"3998932062842191571304885686437603344672159589284746987272459342086482985695887045504776020852483783906536\"\r\n        \"2172506322079792471903631811738029238588537100394070287934331478185936935198191455534087534416095445119132\"\r\n        \"7942135351924917315670514758298955554619991631363968830288155815152759638969869613114860307234721403801813\"\r\n        \"72165679931640625e-123\"},\r\n    {0x1.3d46e281947e6p-405, chars_format::scientific, 334,\r\n        \"1.\"\r\n        \"4998583170769895145258239667197277367953253255810089766774812142211547445430103147393926520164148452565746\"\r\n        \"8217264380338598104855388663677112214256453366606244072120286151220936656003436396679154181835015100676359\"\r\n        \"0584348966466807600606971155966424574894203639782754137091303494195009152389539124755613030970380350481718\"\r\n        \"7786102294921875e-122\"},\r\n    {0x1.5d50c95200fb7p-404, chars_format::scientific, 334,\r\n        \"3.\"\r\n        \"3026285632030961027430781526695104834652824763749934105342216592027767938527528216746021154719645500132460\"\r\n        \"6616794372108054609285611564286855905212986858383047108185221762771718705161049816532541785396613413881621\"\r\n        \"2217761748227152819627098792981544023621850913148052426306024200164421671955248312885222716772659623529762\"\r\n        \"0296478271484375e-122\"},\r\n    {0x1.31ebbf8025802p-403, chars_format::scientific, 332,\r\n        \"5.\"\r\n        \"7847010173866356658135714751782132458915473391965410419281395217763813953559535968598835173728934249636260\"\r\n        \"1391514459957848282287968614420455369316177721591679287181702700396345255239479649102860468456508414192128\"\r\n        \"5765602981762140026015686251155088703174799414546865824038807089051963687735763777753028591632755706086754\"\r\n        \"79888916015625e-122\"},\r\n    {0x1.45f7b06a1b161p-402, chars_format::scientific, 333,\r\n        \"1.\"\r\n        \"2327531669436545124898364942880066252999983643906149889220149845403378792647983133165166313028540606985070\"\r\n        \"0818436949056057893055823679249585303051312488233045352968305435308456249734196737179082525750979594444667\"\r\n        \"7228676476284721228550824045540658730028149589335013698528738527418574216139323697360996590077775181271135\"\r\n        \"807037353515625e-121\"},\r\n    {0x1.df4f5a7e05b4cp-401, chars_format::scientific, 330,\r\n        \"3.\"\r\n        \"6253358049975739948158532959144013335613046749062970323972515958518272146127656397527061651233015893692867\"\r\n        \"0103303942817509059905956200910147442693283287995230815845232814920748801039202484840625264268960547701839\"\r\n        \"4461232562723775452393614394463284378370218080769149758857505694173512387676848456319333990904851816594600\"\r\n        \"677490234375e-121\"},\r\n    {0x1.ae574f97a96fap-400, chars_format::scientific, 330,\r\n        \"6.\"\r\n        \"5099035263477567697676239505583198082407067935910598028302046053953016881173914627929885947779143472525852\"\r\n        \"9119807135344605329826410498881079099916276669949098538219094433024528915815827831019768695616878227040110\"\r\n        \"4253286553344639621446432482400791768130297624278687916140708336692433937814041000624598609647364355623722\"\r\n        \"076416015625e-121\"},\r\n    {0x1.5682e2e154108p-399, chars_format::scientific, 328,\r\n        \"1.\"\r\n        \"0362549937904696495909186260047111788995618647637336817784404369937467772175933363337212662356207536735218\"\r\n        \"8030101548183531660454669558507451081374831816640389350098116044525532899664635039328699336476198997181098\"\r\n        \"1611054570213321448002855193018317174796322288015370915456149081441713079385774642915407639520708471536636\"\r\n        \"3525390625e-120\"},\r\n    {0x1.d4e64d894ea04p-398, chars_format::scientific, 328,\r\n        \"2.\"\r\n        \"8372763744588855358195664212326247986525884317469934762680318091318529844306906832798118576979789563617608\"\r\n        \"7880787247738178476250311898177500090645985936560651576500379515533764989527583633204112961828419907248472\"\r\n        \"3993397281384249852781206296581626131873567108627993360107656068926314295395446629655111792089883238077163\"\r\n        \"6962890625e-120\"},\r\n    {0x1.8405785281eebp-397, chars_format::scientific, 329,\r\n        \"4.\"\r\n        \"6957762796709737155545272375088190271165041022145719332035280937122606597820767289040881062663178655971790\"\r\n        \"6800163258532738477839926886177406049478443972511824178578427468672843486576511058856103122000518325560094\"\r\n        \"9669432592376902045278403406836799158321502945965980280664261537807858390208490262374141366308322176337242\"\r\n        \"12646484375e-120\"},\r\n    {0x1.7eb41af181b1fp-396, chars_format::scientific, 328,\r\n        \"9.\"\r\n        \"2628413735990423976072574727831848085171853809438809598495177277610358137788162151768704610738207393586717\"\r\n        \"6239925229724538135518882743778801921512445790917757600220464043852992967680900899632107966724376688268527\"\r\n        \"6343517164257771308795820514969012334125522761495819641199962003503392009209210788966970540059264749288558\"\r\n        \"9599609375e-120\"},\r\n    {0x1.812947dca7db4p-395, chars_format::scientific, 326,\r\n        \"1.\"\r\n        \"8644654417675819487878768291262887764232591738129708040196998864550979088967279045136490762476499773291512\"\r\n        \"9620812439715211609748176949969393845599259659318287218077670995102127035337504860737911557372641561128410\"\r\n        \"5183442729822976469520193988570188951048643143750502460453397587635942242792475020962683629477396607398986\"\r\n        \"81640625e-119\"},\r\n    {0x1.9e33a8306e02cp-394, chars_format::scientific, 325,\r\n        \"4.\"\r\n        \"0100862103638260260327403702106109516070843800804666499770138974502808794721389200773475598343085572822186\"\r\n        \"9050575652000849999783616094397321798140965240453403340309552058549632349997838495783548076103129101125761\"\r\n        \"4639151880210011426990683848939531260460233147640120904706864264441669009481072905032306152861565351486206\"\r\n        \"0546875e-119\"},\r\n    {0x1.fc59e1a319ca7p-393, chars_format::scientific, 326,\r\n        \"9.\"\r\n        \"8431817833160122601313212773122942893409910851546209354885728127108295688976875179174547748983566433413213\"\r\n        \"2025798622516539150550515346244583769585261311971860204677532235067528321744733234706537880403917023842260\"\r\n        \"7574806660943207182365054888572670670918103919236001613298781456569337992498769374094536033226177096366882\"\r\n        \"32421875e-119\"},\r\n    {0x1.ea48053546540p-392, chars_format::scientific, 320,\r\n        \"1.\"\r\n        \"8986595125046416834783391206475835197011693029669966155263156671691418830838428529139208448680176162863118\"\r\n        \"7695816852367151953603093414023513472452231891026909148753713286042719755834756149864024108431735261809022\"\r\n        \"0909719089204136527578336674363112487531886729182570991963930462755397177154748078464763239026069641113281\"\r\n        \"25e-118\"},\r\n    {0x1.c4f7cfd35c403p-391, chars_format::scientific, 325,\r\n        \"3.\"\r\n        \"5083205445088968495677101873388169021587210288068562220603066512276293052810916395438868133171298860873211\"\r\n        \"5906573028050475979768658205494632257575125878903299547717299838346765905333055749041027617447665836622709\"\r\n        \"1941304109695520879458424636283604303800109503244258137414372793865533547291724048022842907812446355819702\"\r\n        \"1484375e-118\"},\r\n    {0x1.3f1b2c8eb7534p-390, chars_format::scientific, 322,\r\n        \"4.\"\r\n        \"9430715648584051844621127511504766932271831089032969572932369896232697013659331467295126281359728019366715\"\r\n        \"0223703961334976370441319425264759617856817683619261680544917442005575369381757511402108712309881085300325\"\r\n        \"0818301375453449086706715170921583482977020013786182723813883417931808877954225067696825135499238967895507\"\r\n        \"8125e-118\"},\r\n    {0x1.d06093b0815cfp-389, chars_format::scientific, 324,\r\n        \"1.\"\r\n        \"4386748780689463441172008927045007293630513034969496905804592655018261534900625376938437377392865739866729\"\r\n        \"6615558447456358810107305126537258821495219592310542410906686690234000177678885634217857624515847833430176\"\r\n        \"1013692954086773103893646129885982191773115862652319223214584781092291281001660507854467141442000865936279\"\r\n        \"296875e-117\"},\r\n    {0x1.5f088215f30e9p-388, chars_format::scientific, 323,\r\n        \"2.\"\r\n        \"1750535480226043651063968030552837701335419048796120873289665746737982864577869182423674166128902294355190\"\r\n        \"2567578863327434873478216467219071537837824503113360190943651743419094244810729043431689094699067495426602\"\r\n        \"4495878370083247028266065338479497333757962125955769283174403691587467726820115387909027049317955970764160\"\r\n        \"15625e-117\"},\r\n    {0x1.1ee7b2b7ec4dfp-387, chars_format::scientific, 322,\r\n        \"3.\"\r\n        \"5554120237464134602694119759921381410530091439238523194592402342557057246628016063414378639043829736854188\"\r\n        \"7370053506577563972296682322952558114285158990250458154246016563621912592790284052637737715198370177263940\"\r\n        \"5405211316069492320708638950783578941509117218036792610026741347911943130766232457062869798392057418823242\"\r\n        \"1875e-117\"},\r\n    {0x1.e5212858a9ac0p-386, chars_format::scientific, 316,\r\n        \"1.\"\r\n        \"2023735450313651421171538785871176726817036060881631127943497279521174527072830335195052010261740485366509\"\r\n        \"7035885847417422710449856594985414474195173129388921911481901258066228860986222371389439608412512086611891\"\r\n        \"34406624290828135248622000380630662078487158618897919413632808909031535193889794754795730113983154296875e-\"\r\n        \"116\"},\r\n    {0x1.e5a64b660de0fp-385, chars_format::scientific, 321,\r\n        \"2.\"\r\n        \"4073250149223043677529942257093521551685293966172209099803476112751766606813967498557515485126803686976280\"\r\n        \"2509846959709723111928491817829971430314205791200580751789038145211771394494147327366858698467104394248895\"\r\n        \"4039058477399630531971831293463019719488441957560055472393256961109557490186006134536000899970531463623046\"\r\n        \"875e-116\"},\r\n    {0x1.a4a35c112380cp-384, chars_format::scientific, 318,\r\n        \"4.\"\r\n        \"1701370789218155692754228746962316110046975782997471789899742477944413513185760207420533618377892337282650\"\r\n        \"3369609111243586518876985010803989860785855249416361813452820232507673882731452960098324300662753351543989\"\r\n        \"0605798534521182860496797973742972290515095803870329475781942164640259118613130340236239135265350341796875\"\r\n        \"e-116\"},\r\n    {0x1.fd84aa058b587p-383, chars_format::scientific, 320,\r\n        \"1.\"\r\n        \"0102559419519475794201171450381673041089322627018053899889380695208263228396234959442210305668054031580026\"\r\n        \"2617175361107992065273974530599080955152985761274225519088885807436325575834309377713847614939429333357521\"\r\n        \"3736221842600597238671029059811607467346072347130676068618442925385256248027587844262598082423210144042968\"\r\n        \"75e-115\"},\r\n    {0x1.8cdbd7659dbbep-382, chars_format::scientific, 318,\r\n        \"1.\"\r\n        \"5737569358633547811206080917170425167450411520103815909249604594369345874856545245212805027522831482869727\"\r\n        \"9497837821986319825226191691030482601360852618520169586052322172410999244763978900894391063989290727442929\"\r\n        \"3647733654219928166653100454479140789463860010824500467182821754168198236101261500152759253978729248046875\"\r\n        \"e-115\"},\r\n    {0x1.c3fab70ff77d5p-381, chars_format::scientific, 318,\r\n        \"3.\"\r\n        \"5846791147293954395277110210507684652698239680639314917967800036918115365251759384633992808617776665470287\"\r\n        \"8948196800507852844357586424000876576667554483947866806149903563073606011829317396890873012538987787373457\"\r\n        \"9886342475181978767165737092606523456123743582322344239764951045502938686837524073780514299869537353515625\"\r\n        \"e-115\"},\r\n    {0x1.92f9eb50ba810p-380, chars_format::scientific, 313,\r\n        \"6.\"\r\n        \"3920642274634331751536794408261143575334629993511050648872666338672571665986021735206183246506631631027507\"\r\n        \"6674090520833858863401291192443279548090882698094889561395443424178066943634531052696735508613482077083274\"\r\n        \"38532663382585063040866730643823561567323258792113871334440201865678687909166910685598850250244140625e-\"\r\n        \"115\"},\r\n    {0x1.e5d12025f41a4p-379, chars_format::scientific, 315,\r\n        \"1.\"\r\n        \"5412187845587148647082679443541904930956627197223735714308064939313678370864379713857586412466743837378721\"\r\n        \"4477045757622973435427658211214451056290469467722605684096423425588572056824523259270347609435702307410245\"\r\n        \"0187989051299157133388192780303421949264106738071728509661029345167992943288481910713016986846923828125e-\"\r\n        \"114\"},\r\n    {0x1.70cc20b16cbc5p-378, chars_format::scientific, 316,\r\n        \"2.\"\r\n        \"3399657115069453242799372427454858441916409637026741437784068092438045672968038993507346705421009607546622\"\r\n        \"3270999126531558453930448337869948963043039837440559106704597253256508416121847397066754992986499963921290\"\r\n        \"46637675265839770011966526475548357054437982946807154687712923708808876455123026971705257892608642578125e-\"\r\n        \"114\"},\r\n    {0x1.f8f54258baa23p-377, chars_format::scientific, 315,\r\n        \"6.\"\r\n        \"4077707249453147734571294870181459497973836656567528268148064225575734467252266106733401529485664591286872\"\r\n        \"5537475815263199419956592789659795423138900495943348557937327067031684374451512495466067674240016165733527\"\r\n        \"8642566121441607503387428396992405649535766870058376239570482012231078527975114411674439907073974609375e-\"\r\n        \"114\"},\r\n    {0x1.b425d7b5baa7ep-376, chars_format::scientific, 314,\r\n        \"1.\"\r\n        \"1069178065391464118041197835859986853981823370991214279644651068058195236576781864336459899685058699818985\"\r\n        \"8389076952457334918508095427607000023790685113724227614589746900778059551210150285899771549942676809335780\"\r\n        \"216735649319371255941752281553265395319094745377493328576212587577298762653299490921199321746826171875e-\"\r\n        \"113\"},\r\n    {0x1.35f98a9945d86p-375, chars_format::scientific, 313,\r\n        \"1.\"\r\n        \"5733958801672790951911831966450540333286901510422187698245081061936132440082110172995513811552188806194750\"\r\n        \"8483008380141477614143817728347389618471096913538493454947739839883504613082714342355282868320572300743114\"\r\n        \"95047375197878671140995642548351193717183402608319281064104371015144323564527439884841442108154296875e-\"\r\n        \"113\"},\r\n    {0x1.22b6deb90a23ap-374, chars_format::scientific, 312,\r\n        \"2.\"\r\n        \"9512643039682987271607130402882275984250978924222980866335903775679967461152359642908392339478572995711210\"\r\n        \"6711158137101871047341964134538644022448223316135917805111115721985676440930948226211551129468067801597918\"\r\n        \"4580368796271490374849056743260859362475989065448386808516480217523536566659458912909030914306640625e-\"\r\n        \"113\"},\r\n    {0x1.af8b9b949bd33p-373, chars_format::scientific, 312,\r\n        \"8.\"\r\n        \"7618958399039475289411495157932994119285940106393630296173005536001515294054979103676044947610677490024580\"\r\n        \"6433762089986893052332064562978271936803143494243928200924114342896992504891165235980509540813946170682297\"\r\n        \"3867935359995281054682095411461508824847074251216971999141856775050740679944283328950405120849609375e-\"\r\n        \"113\"},\r\n    {0x1.6717d5464b378p-372, chars_format::scientific, 309,\r\n        \"1.\"\r\n        \"4581718353001727202767958474568085509641315254096668946517258054929653338668760014668801958991413536588583\"\r\n        \"2166422613380830543504451930921550793798367298723049105942703198978517102345816708317809381648497621791749\"\r\n        \"0144653395402570757209661432587925807640507185377121211582174264975719779613427817821502685546875e-112\"},\r\n    {0x1.e82648ff239bbp-371, chars_format::scientific, 311,\r\n        \"3.\"\r\n        \"9644645414828138173162257943342753791936726404197770155908477143700013008038105686863030846404367750060424\"\r\n        \"4814244967592799688033858650321919135290377962541541757670567069855566579894393167253937584463430211194847\"\r\n        \"838410815447232136167099214308805859745088063782002314890638705602299296515411697328090667724609375e-112\"},\r\n    {0x1.e51cfb8657ce3p-370, chars_format::scientific, 310,\r\n        \"7.\"\r\n        \"8796103616943104296862864926637808976384305685460046349264971296098085718108590424082442044168977749480870\"\r\n        \"2928472617532638674178490816260470459625717085681235305001720392192877266453685066566192314061292465692667\"\r\n        \"01975452020742004266052294229064688879217955185466426624822655622182310253265313804149627685546875e-112\"},\r\n    {0x1.b14f77ac7c51dp-369, chars_format::scientific, 310,\r\n        \"1.\"\r\n        \"4076373030698913279542894696649495363335439496734696510065477536845414461119135429499341627348207442652927\"\r\n        \"4935947857370618330448711125058799086304561047878820957561978470428392090947171839593614746022113900576819\"\r\n        \"12459797630302957798856517266927440740025132710425346247752609318837357932352460920810699462890625e-111\"},\r\n    {0x1.e710d0676d8ecp-368, chars_format::scientific, 307,\r\n        \"3.\"\r\n        \"1645295789429928436647975840549801301515330036544211466830277436202701723604780666991621823155867912659398\"\r\n        \"1980338448054215434328683248511272110006708490433287132241742891859869273554563583159617428780711727619231\"\r\n        \"33899979676544387692632814983780063270773577183589647492112373328154717455618083477020263671875e-111\"},\r\n    {0x1.681e2130ddae1p-367, chars_format::scientific, 308,\r\n        \"4.\"\r\n        \"6794637406214600552685009184111994631046788070673294911846952958589294261135845244842000381052918421797166\"\r\n        \"3686856630365424161431494428961656868717060092984824469137024087943584804835372179942601678375223467571832\"\r\n        \"515625537071561402276458569226060997833551855877904268772582430102602302213199436664581298828125e-111\"},\r\n    {0x1.a823fd627c74ep-366, chars_format::scientific, 307,\r\n        \"1.\"\r\n        \"1022787950727771717610943243155103519105415962234389134639983375075983585745388621128252129251831360374758\"\r\n        \"7200078501494916601004074837757884294948649378776832588867301852289741497219317204928696589057736588055220\"\r\n        \"25872507231167222528685303920977870186585482457331214116436068906068612704984843730926513671875e-110\"},\r\n    {0x1.4154d3aa34c6ap-365, chars_format::scientific, 306,\r\n        \"1.\"\r\n        \"6701855515857908584747803132448487756483101832993797232975308804071919095972790016154322704905670927038588\"\r\n        \"0494132185610153140585022535102018358801929938831640361250668541664980168293360212741724810288220079797390\"\r\n        \"6720466201397769120663869839685513950245652908075809535415334750041438383050262928009033203125e-110\"},\r\n    {0x1.3a9ba6e00a75bp-364, chars_format::scientific, 306,\r\n        \"3.\"\r\n        \"2704792321346139269395198188310864980762772459780219667337880506418288619313658795189633157901844118202961\"\r\n        \"7959899821736910033629581384546366449781130238868918794233156215017316457250215443260494499049530118568527\"\r\n        \"2846413113018197664085143742641569449064726380745830695839782009670670959167182445526123046875e-110\"},\r\n    {0x1.a63e2539171bcp-363, chars_format::scientific, 303,\r\n        \"8.\"\r\n        \"7787729275384650464205839686581567124783107846404487702633668032504537138009690656495102209028217361135521\"\r\n        \"8390388558973430219290482843591529548434600383846735395604846042341730293207372906214891355297527580963516\"\r\n        \"0087896703692795742861281764048566296912514108556450931342141075219842605292797088623046875e-110\"},\r\n    {0x1.5945227d7951cp-362, chars_format::scientific, 303,\r\n        \"1.\"\r\n        \"4356894911231067898171923164012923523397719956349474652622401817264054835179242430812570726867562039556960\"\r\n        \"9395820536576981686866835269785818676298857562755446418526260219235762960808818683579213832173570812722647\"\r\n        \"1309299601555074913893102541253974308888834531656129855914372228653519414365291595458984375e-109\"},\r\n    {0x1.82217c782aac0p-361, chars_format::scientific, 298,\r\n        \"3.\"\r\n        \"2111903570682555570830432285106056350808268235667287036759585960084214919407425089581154098784074762322198\"\r\n        \"4762123193423025747805649805390981226048331145080309572679467705818692956022292826723774128752395133008996\"\r\n        \"84678865465498234764125959913015552026947590190386616626483373693190515041351318359375e-109\"},\r\n    {0x1.098f6dbee458dp-360, chars_format::scientific, 303,\r\n        \"4.\"\r\n        \"4169724909246743271783375837700448384399037383754852175667172815642110900066699080460389447141005868057730\"\r\n        \"0512595879015513339295564000425906636050874382230874106442651414859196934264601320288039760451686440122377\"\r\n        \"9211715551095402858460824838483699891256643499837415689501796123295207507908344268798828125e-109\"},\r\n    {0x1.fc1a3e0355565p-359, chars_format::scientific, 303,\r\n        \"1.\"\r\n        \"6902188100294218634935247637485270281651549319941796535330082790416249513368727689884420951594130215709004\"\r\n        \"0184990306867018953130130856037669985663887665299573761002835240263686645156373136524713074576393774585196\"\r\n        \"6064973879549502996367695229140698130020298981164052209980042107417830266058444976806640625e-108\"},\r\n    {0x1.9d22abb8a3e58p-358, chars_format::scientific, 299,\r\n        \"2.\"\r\n        \"7486157518272163198462750357234962521840564791749654630448944205121330934304735487728385237098477486960962\"\r\n        \"5847974164498179204746922062216049657612246741906384781995063278488580462198784747628586625522717685501064\"\r\n        \"683276474702628786475061222493509474216607179307414465796455260715447366237640380859375e-108\"},\r\n    {0x1.8fe6b364f92bap-357, chars_format::scientific, 300,\r\n        \"5.\"\r\n        \"3211348201503955918326994712215674983015794087547371314733947107537140792678543657825063978585635866620708\"\r\n        \"4197313956182668385962971395188922621807236400003448458010002652773369381707765820726202495191307008424796\"\r\n        \"4985873179224173871150940905947186618917750283892786899997418004204519093036651611328125e-108\"},\r\n    {0x1.3924fbdf3f4afp-356, chars_format::scientific, 300,\r\n        \"8.\"\r\n        \"3334785623935782116298108685266686643370574881636034800871153561094144663382514150166540391974744686871180\"\r\n        \"6417987830668578413862355044420640648941380509579676293326802058743764083969551154493102801167674568470045\"\r\n        \"4921274138664102521131689349566080338539705656651646048516113296500407159328460693359375e-108\"},\r\n    {0x1.59bba3abc92e5p-355, chars_format::scientific, 300,\r\n        \"1.\"\r\n        \"8401463566583057000467205063624781534185149195807291439532371443811570882259925022763641473815090371969689\"\r\n        \"0884731353588984692080088307661553053498541608357827654845057209245110680041052095293937588746057055307668\"\r\n        \"5104080099519938253964156154017020428131091156799536978638798245810903608798980712890625e-107\"},\r\n    {0x1.f91ab28f6d8d2p-354, chars_format::scientific, 298,\r\n        \"5.\"\r\n        \"3767844238622670481304274663876506600784579490273356231591616804154663121136971131851337071593432079006723\"\r\n        \"0801406917418121743555085258692970299942364812832124045965349670231901635472698014492910758725217321403406\"\r\n        \"44845226572809529157488064473891307432846836840412141356182473828084766864776611328125e-107\"},\r\n    {0x1.29815f4575ee9p-353, chars_format::scientific, 298,\r\n        \"6.\"\r\n        \"3338293748065631419556714682364874673867676285049644451673425924784138630592498292679137715512703719066539\"\r\n        \"9099547436808253509249037923744258894826392480910340657908008256358036815594577611142878960404510461173969\"\r\n        \"42666747803151643950824239942570360031580162414599488585054132272489368915557861328125e-107\"},\r\n    {0x1.9b5549ca69f66p-352, chars_format::scientific, 297,\r\n        \"1.\"\r\n        \"7514400642486577219423056529958168455121436480387689214857689064489248433753353045222356747974792138413681\"\r\n        \"2907705310492578831489120381580810440200883241625934295912642633798054015146534242980319769381134505869389\"\r\n        \"4271570763602292963970708357409197599381992481448744314320720150135457515716552734375e-106\"},\r\n    {0x1.124b975a88735p-351, chars_format::scientific, 297,\r\n        \"2.\"\r\n        \"3358765579576565334772675826735107157872544630083091706192581114916616667385249065695562210242645649633370\"\r\n        \"6045442624764341660639114681090349749985529232191675913872702599912722915102318783709303584090894615368605\"\r\n        \"3705913497996218739612629046751784994643955963022907695858521037735044956207275390625e-106\"},\r\n    {0x1.1562e3a0ec3f5p-350, chars_format::scientific, 296,\r\n        \"4.\"\r\n        \"7243986610495878878673984778734765597249236867292989667607298760616960219054966616029202455795780518195146\"\r\n        \"5005795973444987034101304350852038218864051288571350765414212230181767935792865589673805453295871045943135\"\r\n        \"218617322658165475074435295648383851079801960815007788596631144173443317413330078125e-106\"},\r\n    {0x1.7499ec4ac4fbap-349, chars_format::scientific, 295,\r\n        \"1.\"\r\n        \"2692169671992971794859529307417627065586882159206511522850272309303557550875672875281941705264110562532404\"\r\n        \"3962157386294274558513375437279520372365842188678652778085743847538559542383103862214745631648353208671844\"\r\n        \"45964579981005077479106468489233703280283545311579729286677320487797260284423828125e-105\"},\r\n    {0x1.2027f877e5c8cp-348, chars_format::scientific, 293,\r\n        \"1.\"\r\n        \"9631316012898760223014058906912067489377912540647879826283094146946912960752087047972415846827587026831640\"\r\n        \"8529836716359055729125867701272323663315317923152316903512706305527763621084339310460970385816269376507207\"\r\n        \"732386773493842387889323502724040878468329818229420880015823058784008026123046875e-105\"},\r\n    {0x1.3ebd90e3fdeb4p-347, chars_format::scientific, 292,\r\n        \"4.\"\r\n        \"3429894872560729418193397434044195297928892591241402688768517638740285594212782549821378697599010953184725\"\r\n        \"0001479148556894299716929279968971252973761365088083456011722548856128988536198502330225503216761835636784\"\r\n        \"70959217821493701938086947191985055989095487749551693923422135412693023681640625e-105\"},\r\n    {0x1.4363389eb80c6p-346, chars_format::scientific, 292,\r\n        \"8.\"\r\n        \"8126165753911829296073940994630312372578087100698810179318575514900600400132302692737889199062390479419949\"\r\n        \"8337013660830380592269111943379641150657051580457441463012673490810863644239815703741098676074978193264928\"\r\n        \"62699285514009118677994236229754579522131796576189799452549777925014495849609375e-105\"},\r\n    {0x1.36a0109bf8851p-345, chars_format::scientific, 293,\r\n        \"1.\"\r\n        \"6929662136678211488078955588025689249252946388568113517812621468398839813210730900263559495041405947214123\"\r\n        \"3023424598961524341866409500482279716433603612382080707599516239910317980701008812896983399390264869857599\"\r\n        \"436031413554009831686140961859092949411305373264013951484230346977710723876953125e-104\"},\r\n    {0x1.852936e8160a8p-344, chars_format::scientific, 289,\r\n        \"4.\"\r\n        \"2420016230315380894459699263590074580121107948381560051483582623204545213465113172292812816818464247780754\"\r\n        \"9945914113013415578186602251423255710110678586170729782875957266034899743601335079915348892173656670268744\"\r\n        \"05553342866483389551396854187976397966564068298112033517099916934967041015625e-104\"},\r\n    {0x1.149ec7bfca2e1p-343, chars_format::scientific, 291,\r\n        \"6.\"\r\n        \"0305298093927812974371236707006850466550484837899433998791788439447945090567504761728273446428158503828027\"\r\n        \"3815680772046816887312242613127654618110699752592730180526202629349727603958501864226949792627071804458332\"\r\n        \"9530560909162178292548227844095570554690255438146095912088640034198760986328125e-104\"},\r\n    {0x1.5b2dc6b83f4d5p-342, chars_format::scientific, 291,\r\n        \"1.\"\r\n        \"5137520077480203129736786547797218619270753778448891209064918076463125636944869989096240366834149603449714\"\r\n        \"9622117214819752421125106211299219496197133556427938606464103348868389804966690375917611422685068708804532\"\r\n        \"8321041443260516963902382193582509786917988936494339213822968304157257080078125e-103\"},\r\n    {0x1.da0f73386d67dp-341, chars_format::scientific, 290,\r\n        \"4.\"\r\n        \"1339493171608475510736380563699750629156862226280416325731522075378368999604060724669971773099651206101216\"\r\n        \"1017546178458942728313191490202170666992385689982184609191280290273663347725787965403909863535334056723463\"\r\n        \"899330281266936838654482799695804640972840449109071414568461477756500244140625e-103\"},\r\n    {0x1.638d3b1ba2bd5p-340, chars_format::scientific, 289,\r\n        \"6.\"\r\n        \"2010359315134640090731319437049206220696431274480364487068426341395584546604605252648624919716507113178716\"\r\n        \"4770913020638743635294940380183735409118973050619962086116661476750520741067204022527272515483696214789128\"\r\n        \"06267420333330775690907300282423840649681512360302804154343903064727783203125e-103\"},\r\n    {0x1.906c98f786defp-339, chars_format::scientific, 289,\r\n        \"1.\"\r\n        \"3967279728811321015556380205763949708026110141846978466576526561943061094238322509857317048680101516109209\"\r\n        \"4059480169304313282251175137756521835472643562161874889067638864262324158569496198868632887339727876854190\"\r\n        \"94620032800056105071229529844130628872533872453232106636278331279754638671875e-102\"},\r\n    {0x1.758b9ef75765dp-338, chars_format::scientific, 288,\r\n        \"2.\"\r\n        \"6059428457609154486911302444167565685187311533784113372214336570808417256412519024956191525183770555440174\"\r\n        \"2351821205386265043059591636376635678882878599304488236849642358298092440065200725936048618574206149773742\"\r\n        \"6327712363547867434874089592920722198432503802223436650820076465606689453125e-102\"},\r\n    {0x1.7b53efecb0cb7p-337, chars_format::scientific, 287,\r\n        \"5.\"\r\n        \"2925657186107486696662256436218499175870505461474569242666233854160474625850779906598158267271520849939229\"\r\n        \"4202392215141578825785317356572899446095010353693470459520062697277725597854451377947127151669409262676817\"\r\n        \"805963710919477975920904905105901332162954275872834841720759868621826171875e-102\"},\r\n    {0x1.c70cdb03862e1p-336, chars_format::scientific, 287,\r\n        \"1.\"\r\n        \"2698160651847152511134198109881258456142759956828081770588497598811394283191928496354871928599416248545921\"\r\n        \"2624831316216668122250847400605418281738828454092443406664370924540263061336400427843941139863146710024305\"\r\n        \"866123781960021918923744815065946835164201189627419807948172092437744140625e-101\"},\r\n    {0x1.c8620f3a56118p-335, chars_format::scientific, 283,\r\n        \"2.\"\r\n        \"5470706341249348902221902622568371957573968152993335291114182491469056877577567806133288792502362191377384\"\r\n        \"1104198106509806681478945672264147381937969112303470510735230530092792306517987071863243310330652402455664\"\r\n        \"18482483161473301224825995891891394773409729168633930385112762451171875e-101\"},\r\n    {0x1.6de527d45ec04p-334, chars_format::scientific, 283,\r\n        \"4.\"\r\n        \"0841165079066422503311958952355012554890105582329316527378510871501269657351408619401715479431010259110172\"\r\n        \"7331888613681649927397941295691701840380977033084709459930029994062241909437403184233652851218799652841192\"\r\n        \"43738253055377647337106095646631909179546937593840993940830230712890625e-101\"},\r\n    {0x1.32f4268de3560p-333, chars_format::scientific, 279,\r\n        \"6.\"\r\n        \"8524262499820672910465946411140257927338084441301598854658498719088905756918548930722944195040062465232121\"\r\n        \"2741194099526199284333586848262300092485070516184133947332196308672745095179576985257273100178992879756211\"\r\n        \"3861611774779207012072627762389043226676221820525825023651123046875e-101\"},\r\n    {0x1.9504d4e40f114p-332, chars_format::scientific, 282,\r\n        \"1.\"\r\n        \"8083260374699234761065257773418498730106022787616035325598600451327358187952165471790323439179847122950235\"\r\n        \"8546322993371696334394192802862629454251406168400743329730917576310927470940241674403303605819271810565651\"\r\n        \"3295101069735058671395240667729986672185304996673949062824249267578125e-100\"},\r\n    {0x1.cb9bf91a5cf2ep-331, chars_format::scientific, 282,\r\n        \"4.\"\r\n        \"1041218769683543865527782587708994321977282570253751835355176353868356467589133067113662048462713562786916\"\r\n        \"3689797540950303302913366392376656159255697944455891223668807057168630685792060203335559517088803685034984\"\r\n        \"6654097283173859379552553760216182521247674230835400521755218505859375e-100\"},\r\n    {0x1.534d1a72353b2p-330, chars_format::scientific, 281,\r\n        \"6.\"\r\n        \"0596402508961119571296495219413977960985088664161517023286865497038758610911606257218864532266059908463494\"\r\n        \"3566866588930258825411622537414066336047894439146752568610278062157672883821538692535856116708042779936221\"\r\n        \"736077402161935015293480030935946434311745179002173244953155517578125e-100\"},\r\n    {0x1.8a81f0ebdd183p-329, chars_format::scientific, 282,\r\n        \"1.\"\r\n        \"4091162264655094096918422902209131451813071235940686704267979933905629962370860646608701739601729195398426\"\r\n        \"0348123961816264514026789687986440107830948993608087358064153065552612602602023499720117578184592448397117\"\r\n        \"4376577529462311334822327015502130276303205391741357743740081787109375e-99\"},\r\n    {0x1.2d8d843b6d359p-328, chars_format::scientific, 281,\r\n        \"2.\"\r\n        \"1541940438019324865167028884178297080890453228868603437885007477923378991221330760569498464981192644981579\"\r\n        \"9086766356008861141722682975426269705872292139055342559529362293475470513544579470179567050581508580483092\"\r\n        \"766000531858470043399035620014514424980234252871014177799224853515625e-99\"},\r\n    {0x1.5ae523c56234fp-327, chars_format::scientific, 280,\r\n        \"4.\"\r\n        \"9562087398984028798002675205915029145934162551746287076478264141066334902604617021355261270418382502703079\"\r\n        \"9012887618525302370636569884647253237361252245553836239316100690838738298913987463032565645940507442438449\"\r\n        \"71395465018007039720702891320847083278522404725663363933563232421875e-99\"},\r\n    {0x1.2e2fba4d55710p-326, chars_format::scientific, 275,\r\n        \"8.\"\r\n        \"6348821682352886680448613345699107777997779283593013133209274283334866227298574857315844433891549697529806\"\r\n        \"3967453807178597920834220273761421926245222790190624072541898839336096889584915861533631101787200214097731\"\r\n        \"755254463696422798459940983750726672951714135706424713134765625e-99\"},\r\n    {0x1.a8866b54f8da1p-325, chars_format::scientific, 279,\r\n        \"2.\"\r\n        \"4261340414990349785900555645144753836486017984360325092686326468941813894749700948319279369699030354562016\"\r\n        \"2128067628714222500858744515024250725224913377594619406969777600338582044025172737970786616230297899138581\"\r\n        \"5415528011949603900100570948172862273395367083139717578887939453125e-98\"},\r\n    {0x1.f1a5726eaf292p-324, chars_format::scientific, 277,\r\n        \"5.\"\r\n        \"6880342032875110801140107811674257242681040973129201120356046066242525206668362776013267547666870081864709\"\r\n        \"8697301511059933888881427408978800238200024191730958421845191572140573277862850372978086195948703239443239\"\r\n        \"55228780749141742495715752536700193786600721068680286407470703125e-98\"},\r\n    {0x1.449fb8851eff0p-323, chars_format::scientific, 273,\r\n        \"7.\"\r\n        \"4208207048148695360887516750671585448954709948122751839360897930189242396581441749888939165021423228508336\"\r\n        \"3595829634393473133215432271177697513478113798725154449792965648309451308710292572224103743993982360407449\"\r\n        \"6105070814565044206960464645561614815960638225078582763671875e-98\"},\r\n    {0x1.46c05ddbb1318p-322, chars_format::scientific, 274,\r\n        \"1.\"\r\n        \"4938910681786228098433397618427083905000278780570950467448198038274216732657666002119768524178303625459142\"\r\n        \"8113514269539148166937605854031616806544458143119642972251690661738492452061452603871892869715803063032290\"\r\n        \"16720368895964772527028274762272985753952525556087493896484375e-97\"},\r\n    {0x1.6b11a7ad03ce8p-321, chars_format::scientific, 273,\r\n        \"3.\"\r\n        \"3198659912779944591755497965186522112578908724555826481398937929092451620495530950235419850252258210723507\"\r\n        \"6103357799725303807187723552061327603203139944318751411700583753118403087341835633246108094769809451825572\"\r\n        \"8458429841924240692903336213959164524567313492298126220703125e-97\"},\r\n    {0x1.35af01f0d426cp-320, chars_format::scientific, 273,\r\n        \"5.\"\r\n        \"6634316286537580410549627430526563174209683489552393365657133589081290878698891065102827260170613964063421\"\r\n        \"7988490623562854632880516016770172038156097146354316708909596705851523980277831473118340477805634968266611\"\r\n        \"0387736739752007997066030053900931306998245418071746826171875e-97\"},\r\n    {0x1.dcbfadb8b3393p-319, chars_format::scientific, 275,\r\n        \"1.\"\r\n        \"7437369721819611306370401524320874706796587550801634394374128782974215775486231933474204434212241812954672\"\r\n        \"2253205431824225310790378426225749581112311746779383635732956570294552148059878128300037030766362232845415\"\r\n        \"610269516394232537279639083660498499739333055913448333740234375e-96\"},\r\n    {0x1.e33f175f87825p-318, chars_format::scientific, 274,\r\n        \"3.\"\r\n        \"5350054379821040281789284265976009753915056027158289663573472460364318135080456532420187970414666391602000\"\r\n        \"5749792748196365536928031655309360101630870384004441686023479759971468723814758726445507263978188305294501\"\r\n        \"66237066652626089735718395434815874978085048496723175048828125e-96\"},\r\n    {0x1.754e6b5cce5f8p-317, chars_format::scientific, 270,\r\n        \"5.\"\r\n        \"4615606193444131862109204544103266030868122735855760371810669285382344869384517529242953427788269452822158\"\r\n        \"6447733355524512940892011377262788258325539802499302096414943486531804678941620226371353010632838705878571\"\r\n        \"6076215004574612686683021678391014575026929378509521484375e-96\"},\r\n    {0x1.8467156a708c0p-316, chars_format::scientific, 267,\r\n        \"1.\"\r\n        \"1364847491964381755809073325658806539668735063951189927636831017735890051798137008661548359628176249486567\"\r\n        \"5638355075809542316572770260795609472341017048086809154108791537763758262439106114402680050430718549937605\"\r\n        \"4984664105996887417671104003602522425353527069091796875e-95\"},\r\n    {0x1.895d0eb98e49ap-315, chars_format::scientific, 271,\r\n        \"2.\"\r\n        \"3020007806568932024585160896856794015905763244531581751345471550226462732325455222444774590029231192793210\"\r\n        \"3526585809434548954819303101741588289887271759169385050668460900964752827696537189730053914236112530299498\"\r\n        \"78718850332174066138091195199422145378775894641876220703125e-95\"},\r\n    {0x1.40a747961380fp-314, chars_format::scientific, 271,\r\n        \"3.\"\r\n        \"7529890242406666427809537541355673359784524729918599611738936303969683643463506435674045097086533000435903\"\r\n        \"6833805751251437135871962069969241765350603702037415332674882077174238682833668617350553945267812311343474\"\r\n        \"50183664810112785757689746191090307547710835933685302734375e-95\"},\r\n    {0x1.3b6a90b6dd82fp-313, chars_format::scientific, 270,\r\n        \"7.\"\r\n        \"3833844812933601001626040712223208545049894159172436674233731756578183832102588069235339862415563708591953\"\r\n        \"3290144340614000151931192578763645062459485049299914120235431773959612511632269475578724910553760753162725\"\r\n        \"9035773503789072506886537183845575782470405101776123046875e-95\"},\r\n    {0x1.29a514459ca70p-312, chars_format::scientific, 266,\r\n        \"1.\"\r\n        \"3934768122159904445853290075552856512674507704664699177572841136493178162330742824621681098250948372789843\"\r\n        \"4729750251456654416423830571259374225337974011611156252922037258169533613173818100385793804677394622735141\"\r\n        \"766994054388605073224738362114294432103633880615234375e-94\"},\r\n    {0x1.0b74c8584ad3ap-311, chars_format::scientific, 268,\r\n        \"2.\"\r\n        \"5042865665627230013905293764731537341817933131283917087004920122084647344228898478210371710543160857493563\"\r\n        \"2236939001136948844407029210584627234019763143896970351150846985824258803274296439361886009001435481001665\"\r\n        \"10812608939716590594759537680147332139313220977783203125e-94\"},\r\n    {0x1.1e03e68fcf7f4p-310, chars_format::scientific, 266,\r\n        \"5.\"\r\n        \"3561230856431216215705891197384170210658872854832333041087321234180910038318181672802850047733820007628560\"\r\n        \"4182171685972328799651035840891788773709992554797907500387843891228116979454940850233766623349333385640802\"\r\n        \"273842934100485380088940701170940883457660675048828125e-94\"},\r\n    {0x1.713e883d649b0p-309, chars_format::scientific, 264,\r\n        \"1.\"\r\n        \"3829457207184735000646794778614053460940210246011933848384018350432995141075648085203697000208221493806949\"\r\n        \"6871105807765061634200805943647551922633019924217056463629491090846563741317220831180219308859755163461485\"\r\n        \"5151721147207000139900401336490176618099212646484375e-93\"},\r\n    {0x1.86281c91677fcp-308, chars_format::scientific, 265,\r\n        \"2.\"\r\n        \"9225397297013291485340291504603700336599579795115816142467807020570283454539177669728489061469790947015462\"\r\n        \"9997814087950868773198110436893831741279455750950609447941220401713815828135354829102946691124843423371622\"\r\n        \"00459380729210268068385403239517472684383392333984375e-93\"},\r\n    {0x1.45504d79391d3p-307, chars_format::scientific, 266,\r\n        \"4.\"\r\n        \"8736427954876516111588556297323223735366132652170239201846287920067706228596656189402267426246839952413216\"\r\n        \"0049764777409257875974799672905922600908337766650300092966930614776888318933855334348681166027395590583966\"\r\n        \"769997135959867351484575692666112445294857025146484375e-93\"},\r\n    {0x1.8b65fbaa5facdp-306, chars_format::scientific, 266,\r\n        \"1.\"\r\n        \"1847214117665037958349200111689262962159366411777270344855697272453913854959328881800526601044047876095253\"\r\n        \"9508884510689090450544760680794078282991730837875342801146971856602898038792043608811629235497645397056549\"\r\n        \"789557803741175956435682792289298959076404571533203125e-92\"},\r\n    {0x1.15b31d81ca8eap-305, chars_format::scientific, 264,\r\n        \"1.\"\r\n        \"6641279667471598281077652098259945521671295549362078378109870769039305816240186759177203366513405424353633\"\r\n        \"0530761980743920794284685177470701845646722007722289704781280982002937652274421398782929157293977334017839\"\r\n        \"2330593955435180664181871179607696831226348876953125e-92\"},\r\n    {0x1.eac3901bbf6abp-304, chars_format::scientific, 264,\r\n        \"5.\"\r\n        \"8818504424690985169205536700281187606567042378602631203335310164716217466374569085773532485133568172286664\"\r\n        \"4136317480410796037360933641727560690299399698464619034628147686482037707302630902387957209311928858323561\"\r\n        \"0316787898670110035226343825343064963817596435546875e-92\"},\r\n    {0x1.54d51a8657184p-303, chars_format::scientific, 261,\r\n        \"8.\"\r\n        \"1698158411107261909593405947137163967522047624097756905903111770746755936496192101549234847884183779745242\"\r\n        \"3170474746072782115324967751585643030135116010607593205418148559244337424314958917190348394072848060723705\"\r\n        \"5238019525493786687775354948826134204864501953125e-92\"},\r\n    {0x1.4254ea10b5973p-302, chars_format::scientific, 263,\r\n        \"1.\"\r\n        \"5452699464889383084423290711151957352280795463335067223992351392751481442851664811520430139228875639213995\"\r\n        \"7443372996563698494777793436879534495292022436992037556775109404800293598056714392374950920150650171867569\"\r\n        \"806873131225966044866027004900388419628143310546875e-91\"},\r\n    {0x1.7da943773f203p-301, chars_format::scientific, 262,\r\n        \"3.\"\r\n        \"6593953762901490298980465769951165569165929629731813929605504263224870936440470834287500461898098845461917\"\r\n        \"6300712475200183741800575688110181618613341186483104049336857735772610014290974319446787969336623844116806\"\r\n        \"49009906106383649415647596470080316066741943359375e-91\"},\r\n    {0x1.ae4f00acf5c6cp-300, chars_format::scientific, 259,\r\n        \"8.\"\r\n        \"2516607665957782806495449548266610202563683706678154753337492221892598865851270347456671454474309415340154\"\r\n        \"2947108353765710923663409929467862648030890496688726139045114262386812243844497274555150209350984257558006\"\r\n        \"30762397396278373662426020018756389617919921875e-91\"},\r\n    {0x1.8295f42a5103dp-299, chars_format::scientific, 261,\r\n        \"1.\"\r\n        \"4826450102010817711210930923040416160476151525185906279856054958041241077876390807571824882338445071789251\"\r\n        \"3774699575501451998966639677459705092394758161469439414273380135760573163439712286440819442904694661281541\"\r\n        \"5837368683560359983175658271647989749908447265625e-90\"},\r\n    {0x1.abb6488a3abe1p-298, chars_format::scientific, 260,\r\n        \"3.\"\r\n        \"2807475032115240062100233478393094020251354181481746915075124012767501350915592204090764547211207441234158\"\r\n        \"9250311944676967760616784054804356827548506333595288049246369690491136655894910770418537088388769788416740\"\r\n        \"388219995649965454731500358320772647857666015625e-90\"},\r\n    {0x1.48abffc61d5a3p-297, chars_format::scientific, 259,\r\n        \"5.\"\r\n        \"0421279276628866771404917521343449655818410102699411247766865670698511764154971706103933661501555850943124\"\r\n        \"6691132567436980119815055690200132903971131676335235354630998904758603124455624172088445296120063391046502\"\r\n        \"32281999711059228275189525447785854339599609375e-90\"},\r\n    {0x1.68d80a54d6153p-296, chars_format::scientific, 259,\r\n        \"1.\"\r\n        \"1071352931313987677170263865765649059990762705126667526251537731419538691260092093877617025045125993875951\"\r\n        \"8957282035594918033530304494227577752017748915004609937482099729275688967497784979892357979608435015250917\"\r\n        \"52096634223345716918629477731883525848388671875e-89\"},\r\n    {0x1.2c6b77467b856p-295, chars_format::scientific, 257,\r\n        \"1.\"\r\n        \"8434860272299224398646710148202596071649163719074503710061903300320517800432749157104831068290668987721246\"\r\n        \"8288905577843079932802656060133153397763658738705621885098366210921463101614640108441163625096848957520139\"\r\n        \"530678882078262859067763201892375946044921875e-89\"},\r\n    {0x1.6ef654b64f428p-294, chars_format::scientific, 254,\r\n        \"4.\"\r\n        \"5036297145461490155658473901364871637444212817199245336544093047170635880998585764076422564090558606666255\"\r\n        \"1938086353343001846340281510205158335022043844604870268243750850377280010291550976095751246698891426552117\"\r\n        \"424331189710073886089958250522613525390625e-89\"},\r\n    {0x1.451173235af75p-293, chars_format::scientific, 256,\r\n        \"7.\"\r\n        \"9789499766966189057432041933294408174821133119234321595322590241361258550194960490787811861606827978987534\"\r\n        \"0580669985289732544810391373789920254660051031541038369168888736649566723608062419701182989006022283778749\"\r\n        \"24371282450152875753701664507389068603515625e-89\"},\r\n    {0x1.ffacd596082c9p-292, chars_format::scientific, 256,\r\n        \"2.\"\r\n        \"5118610569922106564460984688389187692141330531682768924103863645054219481499842629645126936078591972527872\"\r\n        \"5114722222435312309709437730552329335737166622168597422045113087432814378216341861796310595179875161588614\"\r\n        \"82397368636299006539047695696353912353515625e-88\"},\r\n    {0x1.063332099741ep-291, chars_format::scientific, 254,\r\n        \"2.\"\r\n        \"5743284390384121121339828370307253704732203904243798931630246226927879139516091842410667400769648561814006\"\r\n        \"0967151854945291742251165941694548044712489711348582758259760078958923842987028079231637018004530552653017\"\r\n        \"459741047190391327603720128536224365234375e-88\"},\r\n    {0x1.96f4c617754aap-290, chars_format::scientific, 253,\r\n        \"7.\"\r\n        \"9911430601386120440060711986378002682633187804808109392328090664875747637758557400825900344026788010313343\"\r\n        \"2729113699362461043666923313670271869280829318221799503990742364295320472425956004990574429576668221347291\"\r\n        \"24604834993306212709285318851470947265625e-88\"},\r\n    {0x1.935ccb527a6a7p-289, chars_format::scientific, 254,\r\n        \"1.\"\r\n        \"5841152817579089701888246464101800895048854300815732047427000213855511213199411158696917835920060194040385\"\r\n        \"6832944195530241996774628793343986472070897672191257541684614583042669447587509362813108117841725100392066\"\r\n        \"653831601996671452070586383342742919921875e-87\"},\r\n    {0x1.3b5e38a2262e5p-288, chars_format::scientific, 253,\r\n        \"2.\"\r\n        \"4770739864851201045215521130565488910183929199437325725631421672722396652413988843021963416616140085403298\"\r\n        \"8566619651757547235989152653761825101443066623967176924256056621254930876323270126516930137333399219767881\"\r\n        \"07482736478459628415293991565704345703125e-87\"},\r\n    {0x1.484a5328dfd67p-287, chars_format::scientific, 252,\r\n        \"5.\"\r\n        \"1571453461558414690975411195843410181665902370366403386781820716480868872616970347287285000078485643033558\"\r\n        \"8701703489523571282053738369007553845016143803485386942297636126664238201721806757128415840988374615235911\"\r\n        \"1636354072061294573359191417694091796875e-87\"},\r\n    {0x1.34089c222a3bfp-286, chars_format::scientific, 251,\r\n        \"9.\"\r\n        \"6778617084384446515856594489186391560274790969791576420550050955675959857565171616414306909257785259034695\"\r\n        \"2362288345318732779856813605993054429873501524126201190913398770745075709628316629547843926599154360294018\"\r\n        \"084598377527072443626821041107177734375e-87\"},\r\n    {0x1.e6fcdd939cf07p-285, chars_format::scientific, 251,\r\n        \"3.\"\r\n        \"0600555655865200534976772197248794399591456706189630865265707040418808227552314886557434562051285553829030\"\r\n        \"0716886533358185718261901052219893727742299836868360224318883583437603674338252457160623503337061100215525\"\r\n        \"655254822368078748695552349090576171875e-86\"},\r\n    {0x1.44926d40c76ebp-284, chars_format::scientific, 250,\r\n        \"4.\"\r\n        \"0789867108393157187752948756264703859264191233331053076042708075185293288917985839904448038455228974372772\"\r\n        \"4796581245328847896234645778426859241054384479033713048023996115476263476953358964540485263635494439472470\"\r\n        \"30717306870428728871047496795654296875e-86\"},\r\n    {0x1.4e29f7527bdc8p-283, chars_format::scientific, 246,\r\n        \"8.\"\r\n        \"3990628635128793878113999378017349458345655285229811951413205941895445655212208355669760623316311014944192\"\r\n        \"4895587056060013769855374324172459834228975819398443536073706731699095978262061796216568521405087480863338\"\r\n        \"4560607737512327730655670166015625e-86\"},\r\n    {0x1.8c68f2953a6ccp-282, chars_format::scientific, 247,\r\n        \"1.\"\r\n        \"9927178266561660444642125584749374937520778851582251840153437757893208705737778210140182563707851211680549\"\r\n        \"6000088093483500136470476092352988612163262395625243307278830900372908744130530715872596772314013667190546\"\r\n        \"46381437123636715114116668701171875e-85\"},\r\n    {0x1.daa11a32d930ap-281, chars_format::scientific, 247,\r\n        \"4.\"\r\n        \"7718392311175778496834201787015006522460756370577250546037300400638004617260362478357013608710612128385322\"\r\n        \"1779947181639233169587356613212047538343034581376134935211933499518225742900654242594724446526025006878879\"\r\n        \"43087162057054229080677032470703125e-85\"},\r\n    {0x1.c877431c64f8bp-280, chars_format::scientific, 247,\r\n        \"9.\"\r\n        \"1784544610577110087548536112667514918507241599449782305683393170457359980388202548163671022362647074555117\"\r\n        \"2116019074929067384595406042749373380753064107605729164133086776553397098585026443014794176607191273850605\"\r\n        \"56179041668656282126903533935546875e-85\"},\r\n    {0x1.5319d83c3ef66p-279, chars_format::scientific, 246,\r\n        \"1.\"\r\n        \"3637044518063170854462076009090508461307355230988207158833822119619060364687943744832686726236043170915496\"\r\n        \"3514036585997359479452159849171388489220331093611734663524586436250473091482431300623345135401918559042711\"\r\n        \"0099653873476199805736541748046875e-84\"},\r\n    {0x1.df184ae5a1660p-278, chars_format::scientific, 241,\r\n        \"3.\"\r\n        \"8533883620323423714136812889341534099647891816418950569082704468822715181673302421954378737049884964815594\"\r\n        \"9225657910076871879456492908086055679238145888180249016876041212016385323048783306274907371194102245759438\"\r\n        \"57416859827935695648193359375e-84\"},\r\n    {0x1.76fe5bdd1cd6ep-277, chars_format::scientific, 244,\r\n        \"6.\"\r\n        \"0321909257448322486188799696623295177021420540236469007302485328870820788061538273852486152111947182499602\"\r\n        \"0430389313128435058945575768397789160853250945403152483495552579619178531893547143208613567133330110592304\"\r\n        \"15185083984397351741790771484375e-84\"},\r\n    {0x1.e827f6053cb84p-276, chars_format::scientific, 243,\r\n        \"1.\"\r\n        \"5705072660535393121974894551856858865391970566370239367261961889364900750033565832132944807855682429973423\"\r\n        \"1165743808838199193559492724914123351980041439654289592979913822692992177082452061483603995980466022652777\"\r\n        \"2692861617542803287506103515625e-83\"},\r\n    {0x1.57fe4f2319e0ep-275, chars_format::scientific, 243,\r\n        \"2.\"\r\n        \"2134072641839148014616350155697182746271787657512992252495965052383531821160101822839509773517719903367658\"\r\n        \"9885091166977969534942621043863491561694472421479566604474002796800759780876778117908416951915753084767501\"\r\n        \"9458620226942002773284912109375e-83\"},\r\n    {0x1.47d634f051b6dp-274, chars_format::scientific, 243,\r\n        \"4.\"\r\n        \"2188963156964790091976855129879663206858758676041114580017440270985892530256344542758502021499043746143513\"\r\n        \"2986767861064045946038194991469606398275313429723392840792584921040979778779308359876410281397596940822225\"\r\n        \"5196960759349167346954345703125e-83\"},\r\n    {0x1.ab161f2c4f9a8p-273, chars_format::scientific, 240,\r\n        \"1.\"\r\n        \"0992259537194823078078492322005134697759069190880982299089476477421890699462556853397689401906770390979778\"\r\n        \"6076941515468432802074130342767290219697959626185832487110501790388370592167474364612702816563355456835893\"\r\n        \"1646798737347126007080078125e-82\"},\r\n    {0x1.e291ca105dbf4p-272, chars_format::scientific, 240,\r\n        \"2.\"\r\n        \"4840542381260295931026824878265850213738163806945569103735598853085085998454192004270399375665114378419793\"\r\n        \"9339093426915978383823920259991198886269275880452442035925336260690735668115500978992897615927476495656378\"\r\n        \"5744947381317615509033203125e-82\"},\r\n    {0x1.05497b2f09b2cp-271, chars_format::scientific, 239,\r\n        \"2.\"\r\n        \"6899801291961049649259897509032221460182990193199573687789715730498841548008680282752621494050089364971956\"\r\n        \"1463605015707114076093509216799977300670476900145388353293690677054565291249211441112205284685587880488810\"\r\n        \"696988366544246673583984375e-82\"},\r\n    {0x1.5c2e8d0a58e74p-270, chars_format::scientific, 238,\r\n        \"7.\"\r\n        \"1691442839152966800651789754421125674555953045807849165758253326495394357218725180436693959779826838539023\"\r\n        \"5241811586085690413191170438571390570469553243783321439188124683995544413425828554208859124188824019086041\"\r\n        \"51685722172260284423828125e-82\"},\r\n    {0x1.150c7af401be8p-269, chars_format::scientific, 237,\r\n        \"1.\"\r\n        \"1408995211686882396999673277161942905911769631008359348308702974525173207061901437452806284674796790066877\"\r\n        \"9068752395048930939229325944194026364434225582687841188243409709254873786228664105033274878825411136062939\"\r\n        \"4766874611377716064453125e-81\"},\r\n    {0x1.bb30e9d725359p-268, chars_format::scientific, 239,\r\n        \"3.\"\r\n        \"6501624740693435787870241089127783673137622073205114014170416150615960587516148133472666902880108394136902\"\r\n        \"2414280357161153404157898726888077804987981004743248455675731222748902769395701614578618140506682809842686\"\r\n        \"765477992594242095947265625e-81\"},\r\n    {0x1.8e26580dfb59fp-267, chars_format::scientific, 238,\r\n        \"6.\"\r\n        \"5583965679406291322543386377247490770669733923095682391871457649122662052805566842350436869479069566624479\"\r\n        \"9577994068697065802161796337967353919150253326164238823498761305697129755079000741114120557814781697913986\"\r\n        \"13597266376018524169921875e-81\"},\r\n    {0x1.2ebd25a1e5a0ap-266, chars_format::scientific, 236,\r\n        \"9.\"\r\n        \"9735404360143309836615940606941282378612316332479673006818986372431047284827499250652587489448273074521490\"\r\n        \"7159098256425409638672402820464938454137381883658245598470175431363044393496375251856344602841009105986813\"\r\n        \"665367662906646728515625e-81\"},\r\n    {0x1.430c70559fa8ap-265, chars_format::scientific, 236,\r\n        \"2.\"\r\n        \"1285263571540235575696332659335516392967259876634974541900328449762481882645550424221520486704326122874324\"\r\n        \"5389964017346232785164042207656441873771873947372771748143644161220111890357661173789620596974447863658497\"\r\n        \"226424515247344970703125e-80\"},\r\n    {0x1.b37b4c8d42152p-264, chars_format::scientific, 235,\r\n        \"5.\"\r\n        \"7386670202301382796372027888070564929201692176971669630590876089659777060558652704543784738546830046295004\"\r\n        \"4603280725800304057600452205270691087995607476359238776203611756090465773659736699519777827771527256572881\"\r\n        \"01501762866973876953125e-80\"},\r\n    {0x1.e7df267017ba9p-263, chars_format::scientific, 236,\r\n        \"1.\"\r\n        \"2858099560631301338481970648325266446537589188919690394573293863678630154936269933032378796467868286022293\"\r\n        \"1313596145811383746152520746396771825426169624107483758544143530277325048406906936058276443024528390424165\"\r\n        \"991134941577911376953125e-79\"},\r\n    {0x1.24edec18cb7ebp-262, chars_format::scientific, 235,\r\n        \"1.\"\r\n        \"5440597737151946460972322931613150367282007839535034780293980553235893087580481701735620945314590019229682\"\r\n        \"9903029002040487140597712979475535950195881357446664740641123548932565198031098388959129683040139013883162\"\r\n        \"98834979534149169921875e-79\"},\r\n    {0x1.e259e5060f8b2p-261, chars_format::scientific, 233,\r\n        \"5.\"\r\n        \"0850413106581489843264497391468834239896808424048302785732446399420840399817211944222782861236400064717650\"\r\n        \"0292091292079844810287479922800960523182642683648046932685960291959579642015772043086609122131136473399237\"\r\n        \"729609012603759765625e-79\"},\r\n    {0x1.74c84ba4bd4a4p-260, chars_format::scientific, 231,\r\n        \"7.\"\r\n        \"8598917902586301437063592700391486067845391377030263724566219385264035315415509521990392844610347274677649\"\r\n        \"3187534013093110305784267349454320227788828198489207064733005870559642487953084957850308223115121109003666\"\r\n        \"7883396148681640625e-79\"},\r\n    {0x1.63e925b45db68p-259, chars_format::scientific, 230,\r\n        \"1.\"\r\n        \"5008325529570412331623540869231822246729874856884866752807101484418958561722149716692008029675745594666613\"\r\n        \"3503364128985836668117456388387335023474589528561716496306845300111545482800773821004114427779541074414737\"\r\n        \"522602081298828125e-78\"},\r\n    {0x1.8cfb3f3c5fcb0p-258, chars_format::scientific, 228,\r\n        \"3.\"\r\n        \"3480454826799275168273424149426024516039420592697674339471485209977799621418170443904530724423345933811752\"\r\n        \"6732740417275913568885136319985690578200693894309818221260736539715042738901337997931006995600000664126127\"\r\n        \"9582977294921875e-78\"},\r\n    {0x1.f7c87448db5fbp-257, chars_format::scientific, 231,\r\n        \"8.\"\r\n        \"4975685812240518705712137865350408669165500059723872621242165482954565097487677179811044593228751800199178\"\r\n        \"5436537587101247795788092235280018313908274894860537262681387520877021653599208068138176619399359879025723\"\r\n        \"7851619720458984375e-78\"},\r\n    {0x1.e5fc8e5d48f9bp-256, chars_format::scientific, 231,\r\n        \"1.\"\r\n        \"6394772414307022630918211937753726342439186922700005937997030738726779071510104514297590583407610112272420\"\r\n        \"1605153941665901729175616786406066510329221717620551523250096943414433377873453800532138613377242108981590\"\r\n        \"7180309295654296875e-77\"},\r\n    {0x1.ae03e4daf2ee0p-255, chars_format::scientific, 225,\r\n        \"2.\"\r\n        \"9013155013751830433627264368121165637564844007563220302732139238380508640398659878415626116750234917257035\"\r\n        \"4358021314491547644576387223565138757629841448907671848335714372372538869101956521268093069920723792165517\"\r\n        \"8070068359375e-77\"},\r\n    {0x1.1b8ab942a6426p-254, chars_format::scientific, 228,\r\n        \"3.\"\r\n        \"8261180450693601910659987374822551200498589347100111087127385186891707357059664475499120073190271709835810\"\r\n        \"2333262835696749317479762874812949441156340532185274119802689659385649761565455131279156475443414819892495\"\r\n        \"8705902099609375e-77\"},\r\n    {0x1.0c1e462c5c1cep-253, chars_format::scientific, 227,\r\n        \"7.\"\r\n        \"2359827219547880037182260980171407807010957821836862935778233916886051101359252066396988945460218716415299\"\r\n        \"8058217929659776342575854014888159205157469067456314240460661266281712378036264886327355583262033178471028\"\r\n        \"804779052734375e-77\"},\r\n    {0x1.e7b34d78e6948p-252, chars_format::scientific, 225,\r\n        \"2.\"\r\n        \"6324142915079566794044585228208590792665767389780345214640856391021186677025555855415331925777643406404267\"\r\n        \"4815827159675201972348758945269748619500474089457136522536683890735534662775902542408701378917612601071596\"\r\n        \"1456298828125e-76\"},\r\n    {0x1.19f7b9144e56ep-251, chars_format::scientific, 226,\r\n        \"3.\"\r\n        \"0439003831515615676336056485285756533835399224529189344052214824595214456119324049792258875343600293464605\"\r\n        \"0603560529499605598396432199482500999142131561233177111438702268476676808609806754168936038240644847974181\"\r\n        \"17523193359375e-76\"},\r\n    {0x1.9243a3c6aa988p-250, chars_format::scientific, 223,\r\n        \"8.\"\r\n        \"6850539709499319555594997827933889454841898663613334205733556673628208790371074675294281427261965075820622\"\r\n        \"1271882727206860063168834267557287655720959306207165641773755143610896424207282184859479912120150402188301\"\r\n        \"08642578125e-76\"},\r\n    {0x1.1fcc03dda0a29p-249, chars_format::scientific, 226,\r\n        \"1.\"\r\n        \"2427314157729456479934367418834492113980183267925625403583281509539683257573896953625230295290581867933513\"\r\n        \"9867126855919765889486660234790771255321938873431482613218900832291311030712967558575776649831823306158185\"\r\n        \"00518798828125e-75\"},\r\n    {0x1.89816794283e0p-248, chars_format::scientific, 220,\r\n        \"3.\"\r\n        \"3983797108077041005965221970144927011138697559396869782925070589033970948834132451537407163528766580562328\"\r\n        \"9119716016152060124454015265884051674568238114179095340987075753721931596282312959544924524379894137382507\"\r\n        \"32421875e-75\"},\r\n    {0x1.c60043d326280p-247, chars_format::scientific, 217,\r\n        \"7.\"\r\n        \"8416589235876873864289188382541268098206197299049393893562552331589852548698913622637238112143222399360991\"\r\n        \"5480134465272471761419124295424633425260765943378864906926742411121021916753370817332324804738163948059082\"\r\n        \"03125e-75\"},\r\n    {0x1.80c28d4967c46p-246, chars_format::scientific, 223,\r\n        \"1.\"\r\n        \"3291407760196483165741511994194910753052570869084757495085032652859082885914003067026860815170496007105388\"\r\n        \"2420687980563833583212875833639219887705559466700038838126004537916422394141710561221714215207612141966819\"\r\n        \"76318359375e-74\"},\r\n    {0x1.a40c7ce612bbdp-245, chars_format::scientific, 223,\r\n        \"2.\"\r\n        \"9020896579031938453736117362122286671352965063235487145399744925912078407328282009772735936130948465580980\"\r\n        \"3814778028095486508264623146907774784542240889474784632658103007257975695107679592332772244844818487763404\"\r\n        \"84619140625e-74\"},\r\n    {0x1.efaf47443919ap-244, chars_format::scientific, 221,\r\n        \"6.\"\r\n        \"8493063311021444285262622630853901019739233598253225435361636963656204227414135855331310041156163827176413\"\r\n        \"6297086180878976214390376525714424271780749287936058534182261326294307462493604621300846702069975435733795\"\r\n        \"166015625e-74\"},\r\n    {0x1.7500215776f19p-243, chars_format::scientific, 222,\r\n        \"1.\"\r\n        \"0308144847135353771186145298171097410301970246782425463944124259742140545264889430363986396035589042598392\"\r\n        \"9655776844273240873118061640991963182770593248030297396972216312970955988826543547887126806017477065324783\"\r\n        \"3251953125e-73\"},\r\n    {0x1.4a99b1bcecb64p-242, chars_format::scientific, 219,\r\n        \"1.\"\r\n        \"8272771233005929132884988427301378153940847425631690632810979503758848344768354506461635004842080033192263\"\r\n        \"3901401061824934045326281599520081408691385773308746157750681691937582554891017494469451776240020990371704\"\r\n        \"1015625e-73\"},\r\n    {0x1.be72480668102p-241, chars_format::scientific, 219,\r\n        \"4.\"\r\n        \"9351506696419103240061669265502256149959617111583303561219685377261392905223787116563640644769825543047758\"\r\n        \"9988217137215046802369061635078622989986340228461792966116610916308424326232051626561769808176904916763305\"\r\n        \"6640625e-73\"},\r\n    {0x1.e7a659213dfb5p-240, chars_format::scientific, 220,\r\n        \"1.\"\r\n        \"0781250168794165933748349260234324391026463879289947053114193829482841759135318917268811758748161809004643\"\r\n        \"2679611225514535349967383908198802533763640615597337848108680394109407845240622414451081567676737904548645\"\r\n        \"01953125e-72\"},\r\n    {0x1.8490c51f45e0cp-239, chars_format::scientific, 217,\r\n        \"1.\"\r\n        \"7181272168700195560600399255994575019168872251009996740322328861948515810175299840150713970748225557399786\"\r\n        \"7396379335700002769043874836031870998424017159999796374606522132792154819447283387034985935315489768981933\"\r\n        \"59375e-72\"},\r\n    {0x1.e2624233f3ae1p-238, chars_format::scientific, 218,\r\n        \"4.\"\r\n        \"2659307529076216561467963956055319316897246968344236420579031063442725355740818771410564719833709091988943\"\r\n        \"0309795900282398265726189862458374678051097719482165551080831781337690013222729845665526227094233036041259\"\r\n        \"765625e-72\"},\r\n    {0x1.d34363be146f9p-237, chars_format::scientific, 217,\r\n        \"8.\"\r\n        \"2644256896671227468821316614503358331827205136754073205926088157584837967768526931310522556079545315620199\"\r\n        \"9752392611005149405019628407058574516126059240841495119417818289946466372986044746085099177435040473937988\"\r\n        \"28125e-72\"},\r\n    {0x1.cc0d98a80a987p-236, chars_format::scientific, 217,\r\n        \"1.\"\r\n        \"6273802065732597896113817387260276341030974100457666845629201763813055943005389152933610589184732283144369\"\r\n        \"5959054192608060281009150208042269805343768362769324987082037382895216212630451479981275042518973350524902\"\r\n        \"34375e-71\"},\r\n    {0x1.0361a6687dab5p-235, chars_format::scientific, 216,\r\n        \"1.\"\r\n        \"8350586944381437658146209039595796622558843610506614077602816551920309835339246680605412417590509836746350\"\r\n        \"0907317990415345399158177353222862249035451776703642604718783418757486330941119945237005595117807388305664\"\r\n        \"0625e-71\"},\r\n    {0x1.334f6d8947b79p-234, chars_format::scientific, 215,\r\n        \"4.\"\r\n        \"3482861542842136933757337627047159251109583384931118811727977153338308729167124422446490325358280576021385\"\r\n        \"3128933592905108885143475829591672376873605604435264983395219417897960278995839189519756473600864410400390\"\r\n        \"625e-71\"},\r\n    {0x1.305f84a10441bp-233, chars_format::scientific, 214,\r\n        \"8.\"\r\n        \"6134539761559003805548061531588022181123903542512485056622016306145283431381871224850727794432398272373581\"\r\n        \"0512724266920229223820220601910535835876168753169487298805997950229204618288747496990254148840904235839843\"\r\n        \"75e-71\"},\r\n    {0x1.c9b7f3905ce9bp-232, chars_format::scientific, 214,\r\n        \"2.\"\r\n        \"5905952437250455635059237293015822897473731806321263112212662836451190738319086758301231709882273911943529\"\r\n        \"3270180444466210678654003519384812165597482919674043077699101118816990552140566705929813906550407409667968\"\r\n        \"75e-70\"},\r\n    {0x1.2cf7988d814d0p-231, chars_format::scientific, 209,\r\n        \"3.\"\r\n        \"4068276481875121106288335315725238787330858093186688658099540644480044178549555509113134844354121258224253\"\r\n        \"4525917021069896218436602993505532330186491208047744444804166320805993706244407803751528263092041015625e-\"\r\n        \"70\"},\r\n    {0x1.2439294be562ap-230, chars_format::scientific, 211,\r\n        \"6.\"\r\n        \"6157007521363805395917512221628507674702476236714185773792545977038289879884140448995517698614722807482564\"\r\n        \"316269955719701793397075413905783271318826294501086750761564164204087123977160445065237581729888916015625e\"\r\n        \"-70\"},\r\n    {0x1.7d0e7e36e5257p-229, chars_format::scientific, 212,\r\n        \"1.\"\r\n        \"7253632008143088480986275464805616259466461047557408455579172771296622170925567796958477645145988934861094\"\r\n        \"3280541592636736407336659321916801029023411688490517352222660438058887688583808994735591113567352294921875\"\r\n        \"e-69\"},\r\n    {0x1.7644d51f65057p-228, chars_format::scientific, 211,\r\n        \"3.\"\r\n        \"3892588392445132904880849439603103583240865854698042092539617889110357535583974094512848897341060231911715\"\r\n        \"668847206489491686550142284002714273859791254064651550505603955741606991836079032509587705135345458984375e\"\r\n        \"-69\"},\r\n    {0x1.10bed5717b54ap-227, chars_format::scientific, 209,\r\n        \"4.\"\r\n        \"9397904291451873909412488950158690757659293412589473529426279864502529323852039218836670325495060439451386\"\r\n        \"0826816969882247207957292424991122060599367981196290341226848470690402592708778684027493000030517578125e-\"\r\n        \"69\"},\r\n    {0x1.97ed031bcbbe9p-226, chars_format::scientific, 210,\r\n        \"1.\"\r\n        \"4776181570075499135778399888179597296465432706936910908693639807173018504138725021329993525857491897140530\"\r\n        \"58229777886958874081655166914945387334176236365795347469506899364122265438936665304936468601226806640625e-\"\r\n        \"68\"},\r\n    {0x1.e87bc17774e5fp-225, chars_format::scientific, 209,\r\n        \"3.\"\r\n        \"5388392753930521569458603056975605427089057010706444537751899483971678103585409044068753689573306449520087\"\r\n        \"3620048630042160735560641391063978204063233997161090636218434661575127364585569011978805065155029296875e-\"\r\n        \"68\"},\r\n    {0x1.4ccad3c275ebbp-224, chars_format::scientific, 208,\r\n        \"4.\"\r\n        \"8218563385773112223108708692854480026506826778318969834120319390327162934136818773749592474331651671060117\"\r\n        \"997507815882786838060737091655122402328021117440941168240798979371941612726004677824676036834716796875e-\"\r\n        \"68\"},\r\n    {0x1.5a61517ffd9c3p-223, chars_format::scientific, 208,\r\n        \"1.\"\r\n        \"0037463923948035398952377686954725695708749868243331851405077722286769296317670730594311068901851751621982\"\r\n        \"905208845752049158036704193593034774538757502752294448392761903876557738612973480485379695892333984375e-\"\r\n        \"67\"},\r\n    {0x1.3760a2aa6c254p-222, chars_format::scientific, 205,\r\n        \"1.\"\r\n        \"8046301120677577831156523273751381553004340805312555968258097633741380875846144919225810181030729661426063\"\r\n        \"465509289312072911372495984143831747178764135517056767525796712181573866473627276718616485595703125e-67\"},\r\n    {0x1.b29dcf95ce2bfp-221, chars_format::scientific, 206,\r\n        \"5.\"\r\n        \"0377562652737656740740431834806965092754376110615663711189065303770401719757724363364437831625604535900905\"\r\n        \"0665914162340930680631398943831178102597624583278594631650763868702114223196986131370067596435546875e-67\"},\r\n    {0x1.3aa4a3e7fe35ep-220, chars_format::scientific, 204,\r\n        \"7.\"\r\n        \"2942263641848924709791974333318552392922497189413454562471159916381061755863392570840931492118884350692330\"\r\n        \"28642932663345158882507360789118899600106765970543491284065751312226666414062492549419403076171875e-67\"},\r\n    {0x1.74467fb9beca1p-219, chars_format::scientific, 205,\r\n        \"1.\"\r\n        \"7260576914043516299667521604544099503136894225460607729102546218393499372203570873973193901356203104541651\"\r\n        \"858702919756674718058411944198830741320724457610150486788942736371410546780680306255817413330078125e-66\"},\r\n    {0x1.04460adf3c909p-218, chars_format::scientific, 204,\r\n        \"2.\"\r\n        \"4135211264249107986888028696130084430233119968060816832629237084810043354459709587812751305641953795863448\"\r\n        \"29510636863294535714465088337298135341399152847190355737107270162056238405057229101657867431640625e-66\"},\r\n    {0x1.4821325395af2p-217, chars_format::scientific, 202,\r\n        \"6.\"\r\n        \"0855030282997452019447514867331630657468044127645732990093511432831652591240656693499304388331948005719576\"\r\n        \"291647734019028586433069197626384835517846818553661819052591486212122617871500551700592041015625e-66\"},\r\n    {0x1.6de490a48e2fep-216, chars_format::scientific, 202,\r\n        \"1.\"\r\n        \"3571719432209208961682291759079089652207854358802144505639464668566870317288686062650570379736789869557706\"\r\n        \"865220772694797664743714525554547694672115452339483210146553471275865376810543239116668701171875e-65\"},\r\n    {0x1.9fae33750204dp-215, chars_format::scientific, 202,\r\n        \"3.\"\r\n        \"0836891319146542654621676435453427927985346471540079478265100941925579218917725745363008519792667726936509\"\r\n        \"578521025584579103122413515433971308009849425461816976347384500201087575987912714481353759765625e-65\"},\r\n    {0x1.b89a1b615d668p-214, chars_format::scientific, 198,\r\n        \"6.\"\r\n        \"5371343011973150852898838767014285054009170245914920231983714940724080952210572962111819974100627028808120\"\r\n        \"47091371176364709303433877377005013842865407407861123856296359235784620977938175201416015625e-65\"},\r\n    {0x1.1205bf14b82bdp-213, chars_format::scientific, 200,\r\n        \"8.\"\r\n        \"1312459641492482081166541589604817706874171006980185066355810432118883401318669273227828384881320643830327\"\r\n        \"7572700842855620364346413336010642698923532080491406205668969420230496325530111789703369140625e-65\"},\r\n    {0x1.38bb74b2cee28p-212, chars_format::scientific, 197,\r\n        \"1.\"\r\n        \"8559814129506473866421804012367533608804583471137464959335795734206066943305396434753643633830322823523500\"\r\n        \"5214453273509006641309435920997178527079040475538697363422357966555864550173282623291015625e-64\"},\r\n    {0x1.22a0215ce7d73p-211, chars_format::scientific, 199,\r\n        \"3.\"\r\n        \"4495677626158958674214395696919224233179649058963110430872447723008494208841922384319206038046498414808280\"\r\n        \"237161710744628525006862200491884428522247284967078805040241462620542733930051326751708984375e-64\"},\r\n    {0x1.43e2f21e78901p-210, chars_format::scientific, 198,\r\n        \"7.\"\r\n        \"6887156715407682591023832286745406614960750239691936325646278514953457227545274838167326206011205999045631\"\r\n        \"11087521684757125178339608488309602901621649250645841588980289316168637014925479888916015625e-64\"},\r\n    {0x1.a6c0fc50fb8dcp-209, chars_format::scientific, 196,\r\n        \"2.\"\r\n        \"0071439114262729837504870375731843208174931765110570173322624378508420496349832547945412094836606565794537\"\r\n        \"382968664101699765520520611518293913512915851364397379352766392912599258124828338623046875e-63\"},\r\n    {0x1.a43598a7e7224p-208, chars_format::scientific, 195,\r\n        \"3.\"\r\n        \"9901264509201541515385647530544570777756931329657382905939255041595638020778163201073900580091263032608950\"\r\n        \"62982775705487829263395483122897991853489149519963741230554887806647457182407379150390625e-63\"},\r\n    {0x1.4514380584fc6p-207, chars_format::scientific, 195,\r\n        \"6.\"\r\n        \"1736189512288787578528448418416349991749663700847809784694461643519721427376584527516757457805346764750442\"\r\n        \"95637676288210916584739439369126886970047830556322654427248153297114185988903045654296875e-63\"},\r\n    {0x1.8641944ca7d95p-206, chars_format::scientific, 196,\r\n        \"1.\"\r\n        \"4822815568311571387774347113736553185061762803960083516201697860528424266401203404618141803921229407587221\"\r\n        \"857702493025749782597434002635293362003405325086520527566591454160516150295734405517578125e-62\"},\r\n    {0x1.f6b995ecb51e2p-205, chars_format::scientific, 194,\r\n        \"3.\"\r\n        \"8189270099686453656944330386880851242990199456831493480657744929486472424859446314843153606613176940390537\"\r\n        \"7110208626473460382988566967594883564850175212447569439433436855324544012546539306640625e-62\"},\r\n    {0x1.3d552fcd337bcp-204, chars_format::scientific, 192,\r\n        \"4.\"\r\n        \"8212075626309096460733573704691029512918454861204396148089296640492675485760690343627691702192822676968815\"\r\n        \"63389639383199305786840112696187596685076424095350855481001417501829564571380615234375e-62\"},\r\n    {0x1.c5d7efd89b777p-203, chars_format::scientific, 194,\r\n        \"1.\"\r\n        \"3790405547409108597572348642030233030506653548234544771446962869832057530013194054847840729805753756239288\"\r\n        \"5414951947851272710887256062334379377993422567498515984851792381959967315196990966796875e-61\"},\r\n    {0x1.bc2f329491015p-202, chars_format::scientific, 193,\r\n        \"2.\"\r\n        \"6993809501677146778769479910183262199839109507301803802721972810548917211929893732348630965943238348446579\"\r\n        \"057907037793339112719528261592247795018823419872788793583140432019717991352081298828125e-61\"},\r\n    {0x1.ae773e40a5fc9p-201, chars_format::scientific, 192,\r\n        \"5.\"\r\n        \"2320218954487896785355755028514760124845743029055888558216867850774043141361941613159031705933056320069790\"\r\n        \"15834175581246399137582629331561177468584472767532123071987371076829731464385986328125e-61\"},\r\n    {0x1.54177621d4f18p-200, chars_format::scientific, 188,\r\n        \"8.\"\r\n        \"2671699641426339340820628302131200394314879529639688939193883369957348095154029848956018262827562450461879\"\r\n        \"9767543649932136066178729407262731386312436254737434637718251906335353851318359375e-61\"},\r\n    {0x1.8c7e3d8c73527p-199, chars_format::scientific, 191,\r\n        \"1.\"\r\n        \"9276428005917081988903274894497209583789235200873622102196547773359677427329917758697233946248094995833163\"\r\n        \"9251543454284154774391128234192554058215314342905610800471549737267196178436279296875e-60\"},\r\n    {0x1.1d175cef3afb0p-198, chars_format::scientific, 186,\r\n        \"2.\"\r\n        \"7720738716829783366211423523072899760981646584179840305538218818577604522061421136502687349701011005022293\"\r\n        \"19779605131760929109482801560084493683148998410814556336845271289348602294921875e-60\"},\r\n    {0x1.4475513c62602p-197, chars_format::scientific, 188,\r\n        \"6.\"\r\n        \"3097149258933373555396693520858956722428887774266681519521577936216995977632340581826830951793982217486997\"\r\n        \"0049426645388404390460596730442919006912917689877673410592251457273960113525390625e-60\"},\r\n    {0x1.777b0397564a0p-196, chars_format::scientific, 184,\r\n        \"1.\"\r\n        \"4603881466067395019154406506648622335799728217146120546120015685836648701405196240311851355498324046529694\"\r\n        \"693589869018846255688032266344721977514853339386036168434657156467437744140625e-59\"},\r\n    {0x1.335f347ccd407p-195, chars_format::scientific, 188,\r\n        \"2.\"\r\n        \"3909749954573929098486304712726443669214066244454384679654334105674731318682311463077318753893093869615216\"\r\n        \"2587410648990459456387497476367966217701381548277339561536791734397411346435546875e-59\"},\r\n    {0x1.cb7fe420097c3p-194, chars_format::scientific, 187,\r\n        \"7.\"\r\n        \"1486821832535713452582704014218377603862581434335880398190116453503559511534348413760937020125432455684447\"\r\n        \"563995618441814110812057986298391571637449171117140167552861385047435760498046875e-59\"},\r\n    {0x1.2b9e54a754171p-193, chars_format::scientific, 186,\r\n        \"9.\"\r\n        \"3226518683238715224399565661749611547006242370061528887320716195165308684845154101442598457938086015001409\"\r\n        \"04741554326054101316920396718331088344207391305218379784491844475269317626953125e-59\"},\r\n    {0x1.61db13efbac84p-192, chars_format::scientific, 184,\r\n        \"2.\"\r\n        \"2020498812644948762033635142117124936558159878950024605332256666966723974999759217940229530756811212534736\"\r\n        \"376207515633057521771033537451227692950672665261890870169736444950103759765625e-58\"},\r\n    {0x1.b0d988ed3cddap-191, chars_format::scientific, 184,\r\n        \"5.\"\r\n        \"3872611595972931554175099145771626677167753110603582724995579755815059161748788482588937205208507054423401\"\r\n        \"377376127275846562117768446237202968791824009286983709898777306079864501953125e-58\"},\r\n    {0x1.5aae85fd3e364p-190, chars_format::scientific, 182,\r\n        \"8.\"\r\n        \"6296228594991325157229731878859944777554471925473343599866427363221069537701112240904539206861116322405729\"\r\n        \"0877271989319006564197611655622440797464012263162658200599253177642822265625e-58\"},\r\n    {0x1.b03e8e5e29e8cp-189, chars_format::scientific, 182,\r\n        \"2.\"\r\n        \"1518906041456636649540146948591549576372380444424980691438719151181009657554823177254366549770014614706032\"\r\n        \"8618439467737562606935278910241424697724621495353858335874974727630615234375e-57\"},\r\n    {0x1.4f61610cf1a2cp-188, chars_format::scientific, 181,\r\n        \"3.\"\r\n        \"3393236367487654889340514543993395885414094092298264710390768628882191685264273016078445381612177618356717\"\r\n        \"142797177462480388287308407104197853498828152396527002565562725067138671875e-57\"},\r\n    {0x1.b36be913bc32ap-187, chars_format::scientific, 181,\r\n        \"8.\"\r\n        \"6708313720945146475351007645513441880275082684907503647662074215317905170752758954050433985625724643831520\"\r\n        \"591378420182088554349024731181705578919594046283236821182072162628173828125e-57\"},\r\n    {0x1.c8e61b78565d0p-186, chars_format::scientific, 178,\r\n        \"1.\"\r\n        \"8197046818766602603686632095754096661651615753540376705159513693924449853347371957727126685333242730655442\"\r\n        \"106873499937217143284318981587451002912558806201559491455554962158203125e-56\"},\r\n    {0x1.1775e38a634cbp-185, chars_format::scientific, 181,\r\n        \"2.\"\r\n        \"2260313359925404901383328255729970205956519425128348372731656993019288377550164061818329912332283919450786\"\r\n        \"272972464419724461788385182721742260036901228659189655445516109466552734375e-56\"},\r\n    {0x1.0e15175ca8a3cp-184, chars_format::scientific, 178,\r\n        \"4.\"\r\n        \"3026606722410031733302677078662118124311005158053603782297542165579613935866431571476014496940810383434619\"\r\n        \"138429936362412482276547319426894533389571506631909869611263275146484375e-56\"},\r\n    {0x1.4acfbe5469d34p-183, chars_format::scientific, 178,\r\n        \"1.\"\r\n        \"0540262429918153965846666776264916628183054605768575074287470826265255183716784817538128179345311968289342\"\r\n        \"157486633140791923370468402402534702222425266882055439054965972900390625e-55\"},\r\n    {0x1.e17bb356e6d2cp-182, chars_format::scientific, 177,\r\n        \"3.\"\r\n        \"0681879985386225718752955391330904327341113602244606377562999866621196092449560501454295722110444234867058\"\r\n        \"60565642117224838768142549934141161127598707025754265487194061279296875e-55\"},\r\n    {0x1.ae1fe199896b9p-181, chars_format::scientific, 178,\r\n        \"5.\"\r\n        \"4818233542942428453861995676140864431915789921130840684049211074743678696081616378159770391924796871267297\"\r\n        \"084151393359730921440980329112542535074936722594429738819599151611328125e-55\"},\r\n    {0x1.a3e5b17d50316p-180, chars_format::scientific, 177,\r\n        \"1.\"\r\n        \"0702958332703832567616253901818145919920308310633570412149764544456728717958501944115424465582180828240141\"\r\n        \"48718865247007996674714476958122089111924424287280999124050140380859375e-54\"},\r\n    {0x1.96b34187d54c0p-179, chars_format::scientific, 171,\r\n        \"2.\"\r\n        \"0733146515683786499609111229893863241245076553478564325616037441745856391159383548352298797077518654354117\"\r\n        \"66550177248096035898124699092814893219838268123567104339599609375e-54\"},\r\n    {0x1.675af8398ba55p-178, chars_format::scientific, 176,\r\n        \"3.\"\r\n        \"6639110494840281694548174991298603448018526659230862490333249247127707514516761738926902815833573835511573\"\r\n        \"0033554552298718973314046770846375000729722160031087696552276611328125e-54\"},\r\n    {0x1.5dd2845405124p-177, chars_format::scientific, 173,\r\n        \"7.\"\r\n        \"1334288244990372312224907648096701095619611996252745460578769413617469873020204065524906820710806990110295\"\r\n        \"5125093074988767111613914735646080345077280071564018726348876953125e-54\"},\r\n    {0x1.1b379a2950eacp-176, chars_format::scientific, 173,\r\n        \"1.\"\r\n        \"1550490218152729646319151841501684609404232393195007305328016237754776338400569798686076059288528676396276\"\r\n        \"3889248411112118081783719895916373587851921911351382732391357421875e-53\"},\r\n    {0x1.050c080bc80d1p-175, chars_format::scientific, 174,\r\n        \"2.\"\r\n        \"1292639261534582404213908408502234742842056862369668785710500233303706301115784477889068818329602152581373\"\r\n        \"76334762627097723751361355200295566447721284930594265460968017578125e-53\"},\r\n    {0x1.b43a3871c2fbap-174, chars_format::scientific, 172,\r\n        \"7.\"\r\n        \"1162918935221443051517621235069819357956135232874696046768179379869415044499101446193354791112976594195410\"\r\n        \"557422635999734494396452323672352946459795930422842502593994140625e-53\"},\r\n    {0x1.df22454bc74f6p-173, chars_format::scientific, 172,\r\n        \"1.\"\r\n        \"5632471909265050611068051615951617519978312479534271514571791116510630486516616104887110827559419704430548\"\r\n        \"593022161692046697459355757142684950622424366883933544158935546875e-52\"},\r\n    {0x1.b833d723fe25ap-172, chars_format::scientific, 171,\r\n        \"2.\"\r\n        \"8724553500903598028572546383001781149110271282722642567137230852108467397456216094989216899040621575989169\"\r\n        \"04794959450945984543606716299368741829312057234346866607666015625e-52\"},\r\n    {0x1.f684b3c7cc0acp-171, chars_format::scientific, 169,\r\n        \"6.\"\r\n        \"5581707069521569877856870724319603779730281282161256613335172096317790203054916032047180861903076571475476\"\r\n        \"949770983954945174541038832582984241525991819798946380615234375e-52\"},\r\n    {0x1.a5b141082f7b4p-170, chars_format::scientific, 169,\r\n        \"1.\"\r\n        \"1006685169756962680050220555041590876254318428865998856904568826933953891310864740495265959403191562163377\"\r\n        \"069746200609492539396368215864896455968846566975116729736328125e-51\"},\r\n    {0x1.4fff666a560aep-169, chars_format::scientific, 169,\r\n        \"1.\"\r\n        \"7539896072768474874561864155705114932844071436878901874932631783846705575216123230523996677805058270426469\"\r\n        \"440568499952626504620988023841476888264878652989864349365234375e-51\"},\r\n    {0x1.668bb57ef8bccp-168, chars_format::scientific, 167,\r\n        \"3.\"\r\n        \"7433921715043594589736460314331405184962182591207676516772049221533184130039279221624312002874994124075876\"\r\n        \"8607887085263453345700124241801631796988658607006072998046875e-51\"},\r\n    {0x1.dcd176deeeae3p-167, chars_format::scientific, 168,\r\n        \"9.\"\r\n        \"9564289980093796889603154154145876739448114195979055992690259022457312971712705761139632367260793438914366\"\r\n        \"37755164485333344410143696645576483206241391599178314208984375e-51\"},\r\n    {0x1.16a3865422377p-166, chars_format::scientific, 168,\r\n        \"1.\"\r\n        \"1636497924322522189729705224278622993088292323624873159489348884349299835648653258490495496200575681563301\"\r\n        \"93520858451476789898436370318535182377672754228115081787109375e-50\"},\r\n    {0x1.bce21dad63749p-165, chars_format::scientific, 167,\r\n        \"3.\"\r\n        \"7158384115949350614737820871904816925077956940869230941314885111502890909776030181321957172434491271547923\"\r\n        \"1680692485678623002316733892058664423529990017414093017578125e-50\"},\r\n    {0x1.89eeefab48d10p-164, chars_format::scientific, 162,\r\n        \"6.\"\r\n        \"5805696341773827568201073427914990313810882433786527452734017775108553768567645871412871223414498597936013\"\r\n        \"24190138180379207322179269112893962301313877105712890625e-50\"},\r\n    {0x1.8fee5ccadb200p-163, chars_format::scientific, 157,\r\n        \"1.\"\r\n        \"3361521745438592840663955655631716549469431650538517476774582035584703495979290821050139073573949863898319\"\r\n        \"932246070741721499786081039928831160068511962890625e-49\"},\r\n    {0x1.07380dad14bcap-162, chars_format::scientific, 164,\r\n        \"1.\"\r\n        \"7588058594724069068378151340006562382389089937477477155953047822519153788093489690886862546961352922261512\"\r\n        \"7616072031613314065323638857307742000557482242584228515625e-49\"},\r\n    {0x1.0b59bf6c21943p-161, chars_format::scientific, 164,\r\n        \"3.\"\r\n        \"5728259387967835757810502314748228560336702191385482390899073723989786692440757890127298326923356779924206\"\r\n        \"4063605352086812859402353836912880069576203823089599609375e-49\"},\r\n    {0x1.fa531504c2a95p-160, chars_format::scientific, 164,\r\n        \"1.\"\r\n        \"3532863609445874625424619828095184220811044476992203391714726909818173064528541715965734117428727450051983\"\r\n        \"0798601500848545205191175710979223367758095264434814453125e-48\"},\r\n    {0x1.bcfee137bb727p-159, chars_format::scientific, 163,\r\n        \"2.\"\r\n        \"3787372002095833385126791878777862375484338276605231718277360413206612063565553320217163353776596974116930\"\r\n        \"802973502625109573915818117484377580694854259490966796875e-48\"},\r\n    {0x1.151cd5ef2d805p-158, chars_format::scientific, 162,\r\n        \"2.\"\r\n        \"9626275330019588245631947287909396699745270360057415499881998525739843605313927572634283409800720682223941\"\r\n        \"17076967551033424286277551118473638780415058135986328125e-48\"},\r\n    {0x1.a50d5e23e121ep-157, chars_format::scientific, 160,\r\n        \"9.\"\r\n        \"0029880689123645099794460485807721339684096115950637844009362876227390039831564636627226957537724402162583\"\r\n        \"602570082390824379725557946585468016564846038818359375e-48\"},\r\n    {0x1.82802e4264badp-156, chars_format::scientific, 161,\r\n        \"1.\"\r\n        \"6528407152844144785500614973455273336999912777463385056299104335915202959708996003513567290694805135376868\"\r\n        \"9247248694610022134998672527217422612011432647705078125e-47\"},\r\n    {0x1.2177668084382p-155, chars_format::scientific, 159,\r\n        \"2.\"\r\n        \"4757619185369808203021240003521593381209663272308204986803350240581317601172411555122448494060667114028109\"\r\n        \"01342339011156623573839397067786194384098052978515625e-47\"},\r\n    {0x1.03b3d0af74440p-154, chars_format::scientific, 153,\r\n        \"4.\"\r\n        \"4423898749490084399433969599509826144329330591332567939146106957870737458728262016757657867649861507909368\"\r\n        \"67056336867509713783874758519232273101806640625e-47\"},\r\n    {0x1.d2d07d1f0f329p-153, chars_format::scientific, 159,\r\n        \"1.\"\r\n        \"5970369012122509593184775144635604659721100528580203484536611149954537884269829964378340152297825770815400\"\r\n        \"55113898402168459700334324224968440830707550048828125e-46\"},\r\n    {0x1.8fa32bc4d85bap-152, chars_format::scientific, 157,\r\n        \"2.\"\r\n        \"7344299616431543522432421912792718134436427057605665499943091928202467144496467783172463158734772458732489\"\r\n        \"503583523195173743403074695379473268985748291015625e-46\"},\r\n    {0x1.67c2abce8df9dp-151, chars_format::scientific, 157,\r\n        \"4.\"\r\n        \"9231615603464207242007921876013588518601290251044916876629241339050523954671848627932540076411043836705992\"\r\n        \"149190718766560426189471399993635714054107666015625e-46\"},\r\n    {0x1.73f3b6e413e35p-150, chars_format::scientific, 157,\r\n        \"1.\"\r\n        \"0179995696026282273811276434771842619116554426387226609081999306437938716096066552645975664851424917170160\"\r\n        \"429284839383179406269164246623404324054718017578125e-45\"},\r\n    {0x1.7a95dc8122d45p-149, chars_format::scientific, 156,\r\n        \"2.\"\r\n        \"0723091166540273850593168126191139912345243921985305222697460100039055010978950792132675510399982633713397\"\r\n        \"43302659321122494162636940018273890018463134765625e-45\"},\r\n    {0x1.af1bf9e405f36p-148, chars_format::scientific, 154,\r\n        \"4.\"\r\n        \"7196310508913904671194894358782925911776121787765422306796132134761227959946314353602058140317633579755078\"\r\n        \"227792840228627113674519932828843593597412109375e-45\"},\r\n    {0x1.93bd4a776ff22p-147, chars_format::scientific, 153,\r\n        \"8.\"\r\n        \"8399910274584726229868620813946972911876446658509805639346664857566354389109651130454527996512493390832109\"\r\n        \"06594691158577603573576197959482669830322265625e-45\"},\r\n    {0x1.998a4f77b7f72p-146, chars_format::scientific, 153,\r\n        \"1.\"\r\n        \"7934004954654291024566203990087592056831316726175324954536665777161166202131665464671804424276289424204482\"\r\n        \"57652650092541790627365116961300373077392578125e-44\"},\r\n    {0x1.e2ee6bf0a5651p-145, chars_format::scientific, 153,\r\n        \"4.\"\r\n        \"2295683591056470906800337028618844741657141766568221367835581227246587308429206335630344989589287675262730\"\r\n        \"91660778125078223865784821100533008575439453125e-44\"},\r\n    {0x1.80940300d356fp-144, chars_format::scientific, 152,\r\n        \"6.\"\r\n        \"7363600023840417999542393041775431286862924968647585475108908864653553304615525710316981002244346312871708\"\r\n        \"8829987280629296719780541025102138519287109375e-44\"},\r\n    {0x1.fb7e121e4f09ep-143, chars_format::scientific, 151,\r\n        \"1.\"\r\n        \"7778710260255370823068118815744034545239196175044810566452485059711823829134148938595203744881815979364219\"\r\n        \"466006546976899471701472066342830657958984375e-43\"},\r\n    {0x1.db7f5ce10385bp-142, chars_format::scientific, 151,\r\n        \"3.\"\r\n        \"3315696595658846047469585592309601760666312357714637907805304801690666734362639697081633088940864280810672\"\r\n        \"903680724754593711622874252498149871826171875e-43\"},\r\n    {0x1.1d9d22c7f3534p-141, chars_format::scientific, 148,\r\n        \"4.\"\r\n        \"0023019609904230460306129375468853345556873060242695191434355850628634523560076237997206470162408844618039\"\r\n        \"983898061251466060639359056949615478515625e-43\"},\r\n    {0x1.8e16e3aa24c6fp-140, chars_format::scientific, 150,\r\n        \"1.\"\r\n        \"1156841616796604932136274348484852039247641538297458130288766038216630495392051161520698228292050021146544\"\r\n        \"20551642655112800639471970498561859130859375e-42\"},\r\n    {0x1.87e3f754c260dp-139, chars_format::scientific, 149,\r\n        \"2.\"\r\n        \"1966221825446393623879986362588124795901767213242488227182002426802973438517357803464949551156413886798953\"\r\n        \"6864355759604450213373638689517974853515625e-42\"},\r\n    {0x1.fa5d32abaa11cp-138, chars_format::scientific, 146,\r\n        \"5.\"\r\n        \"6765373748004688332440652788786161538895277758131917477071063157004169835839984069461934543412473811103188\"\r\n        \"1204748827940420596860349178314208984375e-42\"},\r\n    {0x1.f67503a2182bbp-137, chars_format::scientific, 148,\r\n        \"1.\"\r\n        \"1265477503439072834143778179138023300408281899179844848603578440471818264924572994395463590144925447532309\"\r\n        \"702169950327288461267016828060150146484375e-41\"},\r\n    {0x1.db3ed18fbe233p-136, chars_format::scientific, 147,\r\n        \"2.\"\r\n        \"1310740108629266741825276640768152345702055957167240124922338099906733105461315720740092281151001145210075\"\r\n        \"94603485557627209345810115337371826171875e-41\"},\r\n    {0x1.8335b0765d557p-135, chars_format::scientific, 146,\r\n        \"3.\"\r\n        \"4726169049944299879453329939481586991700522073634174410762170911503198790930241004432988390365801374063802\"\r\n        \"6145557404333885642699897289276123046875e-41\"},\r\n    {0x1.4dbf09123267bp-134, chars_format::scientific, 145,\r\n        \"5.\"\r\n        \"9862794573467662440074595060500155028664274136233854601575667668611139098768423815169512058364388094422285\"\r\n        \"646611925358229200355708599090576171875e-41\"},\r\n    {0x1.5e56a8ce3c277p-133, chars_format::scientific, 145,\r\n        \"1.\"\r\n        \"2567777808329330013217753137114716276021058025597090076586824197836408715656044366011499934739896008786645\"\r\n        \"686949867695147986523807048797607421875e-40\"},\r\n    {0x1.bb079ee8f4d5cp-132, chars_format::scientific, 142,\r\n        \"3.\"\r\n        \"1785827035279190121784119339542902927547255686713026008937054510447409625558295054802900095791530292975435\"\r\n        \"312285981126478873193264007568359375e-40\"},\r\n    {0x1.4f6e275cf1a76p-131, chars_format::scientific, 142,\r\n        \"4.\"\r\n        \"8131885839189464342630285810238985752699527646604098580088304609518450064927286820639649469111945897896454\"\r\n        \"038544789000297896564006805419921875e-40\"},\r\n    {0x1.6e0c8ad2bb37cp-130, chars_format::scientific, 141,\r\n        \"1.\"\r\n        \"0505090911062820335561411705941054623172870846458893207124770055231061069218704308882579307096982170963150\"\r\n        \"87104585472843609750270843505859375e-39\"},\r\n    {0x1.98e433996597fp-129, chars_format::scientific, 142,\r\n        \"2.\"\r\n        \"3469216079446797138739112899579158124687027232331769891232554936238609927331878316423045145059373263289603\"\r\n        \"794845561424153856933116912841796875e-39\"},\r\n    {0x1.42726d8c4369ap-128, chars_format::scientific, 140,\r\n        \"3.\"\r\n        \"7015098458206448453351979822608106339451489448555898068736741171041629697322955547340351680885679134386245\"\r\n        \"7921431996510364115238189697265625e-39\"},\r\n    {0x1.486454058df80p-127, chars_format::scientific, 133,\r\n        \"7.\"\r\n        \"5395084299958847860449433646301178540543942807329687696496446852570945235346855720548050138439533096601508\"\r\n        \"077583275735378265380859375e-39\"},\r\n    {0x1.6661274c7f05cp-126, chars_format::scientific, 138,\r\n        \"1.\"\r\n        \"6455979868696783534082063751133429136529036015164918660712006211854998013425847958975152867999508163321387\"\r\n        \"14415123104117810726165771484375e-38\"},\r\n    {0x1.3aa7b44b0a502p-125, chars_format::scientific, 138,\r\n        \"2.\"\r\n        \"8896506750036806475577971922835255312815452296746498235731599185088314959519438221419769631184574013027521\"\r\n        \"74387933337129652500152587890625e-38\"},\r\n    {0x1.9fd27c3ae95f7p-124, chars_format::scientific, 138,\r\n        \"7.\"\r\n        \"6374477588979438591229722951487526821041612993472034040866978911302507182089909043356325487765306689325051\"\r\n        \"08159602968953549861907958984375e-38\"},\r\n    {0x1.da78946cc5490p-123, chars_format::scientific, 134,\r\n        \"1.\"\r\n        \"7429312422110310718977979413748775963737044267099005799918778562901268253551041976159609585717708002405856\"\r\n        \"8596956320106983184814453125e-37\"},\r\n    {0x1.f203ac3519f18p-122, chars_format::scientific, 134,\r\n        \"3.\"\r\n        \"6588315678322708272314019672027802295093711627258677622098624893717512039023793281375763542569851116681434\"\r\n        \"1777353547513484954833984375e-37\"},\r\n    {0x1.b49aae7f5cad1p-121, chars_format::scientific, 136,\r\n        \"6.\"\r\n        \"4153225021810435302055377998130934309169404574711166917674284394429969174601750224385013791146732675674257\"\r\n        \"961873081512749195098876953125e-37\"},\r\n    {0x1.b661988bbdc4bp-120, chars_format::scientific, 136,\r\n        \"1.\"\r\n        \"2882866599344565053618788391492597985347367160360079978812335056300495851823386955130707091986101697766997\"\r\n        \"631333651952445507049560546875e-36\"},\r\n    {0x1.7dc73059f4d49p-119, chars_format::scientific, 135,\r\n        \"2.\"\r\n        \"2438898905531304113205534342267833215945294680111818683410060358815191180269281387787392467074790158854113\"\r\n        \"99722215719521045684814453125e-36\"},\r\n    {0x1.cdb2f9141b525p-118, chars_format::scientific, 134,\r\n        \"5.\"\r\n        \"4272469927212228398680026288174857747043423993740677691930900376873032761152811202056904353336480584246714\"\r\n        \"8977448232471942901611328125e-36\"},\r\n    {0x1.ca41b4813a41ep-117, chars_format::scientific, 133,\r\n        \"1.\"\r\n        \"0773562313702051217542870690540839915318470195130197080844837846839614171734258592932298947107694342406603\"\r\n        \"027484379708766937255859375e-35\"},\r\n    {0x1.81c487a032056p-116, chars_format::scientific, 132,\r\n        \"1.\"\r\n        \"8138709823870134963339439770612428318675600824578467344813375616044665156285156623700098024384863570901416\"\r\n        \"09660349786281585693359375e-35\"},\r\n    {0x1.72bcb5fff535bp-115, chars_format::scientific, 132,\r\n        \"3.\"\r\n        \"4863954234406462550691749145030310991616513432575743908019034815279292363755361258808440757736568649249875\"\r\n        \"30685029923915863037109375e-35\"},\r\n    {0x1.8bd7918860dbbp-114, chars_format::scientific, 131,\r\n        \"7.\"\r\n        \"4449617683806484935384150283945931186617540420755360525592411297979559594039747096401091457779086724144690\"\r\n        \"3790347278118133544921875e-35\"},\r\n    {0x1.a7f69dcd72222p-113, chars_format::scientific, 130,\r\n        \"1.\"\r\n        \"5947728558224362995607999419897654924356426479146237070985315256260841154700059297961143613131529406246045\"\r\n        \"255102217197418212890625e-34\"},\r\n    {0x1.eb4294b46da96p-112, chars_format::scientific, 129,\r\n        \"3.\"\r\n        \"6958300841764796394552603076512147534499147838425848046122473845261325916666391709798763706706914433652855\"\r\n        \"22304475307464599609375e-34\"},\r\n    {0x1.45d8b318ecb26p-111, chars_format::scientific, 128,\r\n        \"4.\"\r\n        \"9027929571472789278384447568697681490197245669783486622993745123202427301521908282403838102991855407708499\"\r\n        \"1149604320526123046875e-34\"},\r\n    {0x1.c95d0b441f711p-110, chars_format::scientific, 129,\r\n        \"1.\"\r\n        \"3763280779744355993441768388857348578041188915187008104911491475416457823921091900787544784479088377793232\"\r\n        \"21184313297271728515625e-33\"},\r\n    {0x1.98333d0f2d03dp-109, chars_format::scientific, 128,\r\n        \"2.\"\r\n        \"4567652907408954862171758719761037178820726837148989034299592147290607067172199302776489787669689235372061\"\r\n        \"3755285739898681640625e-33\"},\r\n    {0x1.dfd8b02992707p-108, chars_format::scientific, 127,\r\n        \"5.\"\r\n        \"7759413981215069525017042272423165722552378432976327150239566602665492393820853640382627369742607470470829\"\r\n        \"866826534271240234375e-33\"},\r\n    {0x1.18e3e3b1a223ep-107, chars_format::scientific, 125,\r\n        \"6.\"\r\n        \"7621854242881406431627770947480800315291558269137007328403548746185753195763627266309109264952326157072093\"\r\n        \"3377742767333984375e-33\"},\r\n    {0x1.9658328cb8114p-106, chars_format::scientific, 124,\r\n        \"1.\"\r\n        \"9564777034032247331266106351051660587948852300059958121203145251012029185530780310726950421695846671354956\"\r\n        \"924915313720703125e-32\"},\r\n    {0x1.86c79844889d0p-105, chars_format::scientific, 121,\r\n        \"3.\"\r\n        \"7630713133101953008740171427121495587283910326243938739987716991334361642764145573780698583732373663224279\"\r\n        \"880523681640625e-32\"},\r\n    {0x1.27dcf92066d8bp-104, chars_format::scientific, 124,\r\n        \"5.\"\r\n        \"6981175081206400922391655083797863384815261135600412746592359796806200489991016465245177169407497785869054\"\r\n        \"496288299560546875e-32\"},\r\n    {0x1.b6c8ffb6a90c2p-103, chars_format::scientific, 123,\r\n        \"1.\"\r\n        \"6901389263110543181102365648652894274606301487002452251574237197576175408299383818092054276860380923608317\"\r\n        \"97122955322265625e-31\"},\r\n    {0x1.39b18e81b6f59p-102, chars_format::scientific, 123,\r\n        \"2.\"\r\n        \"4166074419571089575889751347120191547305858469115993073742053892915281348533368963385492556028566468739882\"\r\n        \"11154937744140625e-31\"},\r\n    {0x1.58ad465068c9ap-101, chars_format::scientific, 121,\r\n        \"5.\"\r\n        \"3105877964807320710292501984853581657899622371005556307571107853309782196652680426318671180752062355168163\"\r\n        \"776397705078125e-31\"},\r\n    {0x1.9d0ed395b4c84p-100, chars_format::scientific, 120,\r\n        \"1.\"\r\n        \"2728329747902230165316181540568536882833839113574207013715404328367409245034930567741504603418434271588921\"\r\n        \"54693603515625e-30\"},\r\n    {0x1.bf9c0e64057fbp-99, chars_format::scientific, 121,\r\n        \"2.\"\r\n        \"7586071091388190196112205187915629121694961798162398502469066619619835167200191071434911549431490129791200\"\r\n        \"160980224609375e-30\"},\r\n    {0x1.f3a0cebf107f8p-98, chars_format::scientific, 117,\r\n        \"6.\"\r\n        \"1583924748384136682512359017261255450407522093971748312640088161632302368340627363174633046583039686083793\"\r\n        \"64013671875e-30\"},\r\n    {0x1.8d2ccae7cd365p-97, chars_format::scientific, 119,\r\n        \"9.\"\r\n        \"7911189758325206052557743537635646483728105421101526676208264656982528338082742008774417286076641175895929\"\r\n        \"3365478515625e-30\"},\r\n    {0x1.aa0b3a331c5bcp-96, chars_format::scientific, 117,\r\n        \"2.\"\r\n        \"1005583908999635980523814595285630437648644793626080509594614990803394929735556373451288436626782640814781\"\r\n        \"18896484375e-29\"},\r\n    {0x1.4b814b3a1cb61p-95, chars_format::scientific, 118,\r\n        \"3.\"\r\n        \"2688922135094771214795507178565946598481426142285005760621407779950612653330384305139233447334845550358295\"\r\n        \"440673828125e-29\"},\r\n    {0x1.f4068960578d7p-94, chars_format::scientific, 117,\r\n        \"9.\"\r\n        \"8612648786366515414854961643790399130167377288239167225981380011826524576009841971391267634317046031355857\"\r\n        \"84912109375e-29\"},\r\n    {0x1.f62c0cec38831p-93, chars_format::scientific, 117,\r\n        \"1.\"\r\n        \"9807195772041244841383550163089449103868726897978856906267460422507129962120878130527046323550166562199592\"\r\n        \"59033203125e-28\"},\r\n    {0x1.37c69791af80ep-92, chars_format::scientific, 115,\r\n        \"2.\"\r\n        \"4594770057660368495756651818864062387955645568161205513648519067289568355676177002777649249765090644359588\"\r\n        \"623046875e-28\"},\r\n    {0x1.c42f82f902ae4p-91, chars_format::scientific, 113,\r\n        \"7.\"\r\n        \"1342307123642233045958095225167156992008276425321789727449239863317162219785716459341529116500169038772583\"\r\n        \"0078125e-28\"},\r\n    {0x1.ab5c60a4631b5p-90, chars_format::scientific, 115,\r\n        \"1.\"\r\n        \"3485130668183937590444128052855465890028802588861696634054925499593654875281345528748033757437951862812042\"\r\n        \"236328125e-27\"},\r\n    {0x1.163adde1f573ep-89, chars_format::scientific, 113,\r\n        \"1.\"\r\n        \"7558778301243823121155271808116835370371045792990942242404584251962271126273895660574453359004110097885131\"\r\n        \"8359375e-27\"},\r\n    {0x1.6cc1d8ecb558ap-88, chars_format::scientific, 112,\r\n        \"4.\"\r\n        \"6038833248427952809663776964936140725404629123882134521116254371057353346474716460079434909857809543609619\"\r\n        \"140625e-27\"},\r\n    {0x1.0cdf536fb5eefp-87, chars_format::scientific, 112,\r\n        \"6.\"\r\n        \"7872927594290552636925886720441058685794883580176619836663438543506473958621949549296914483420550823211669\"\r\n        \"921875e-27\"},\r\n    {0x1.cf43fecae092dp-86, chars_format::scientific, 112,\r\n        \"2.\"\r\n        \"3388936048665310851316745468303563301324829126576636843972225326095050641772576938137717661447823047637939\"\r\n        \"453125e-26\"},\r\n    {0x1.f45a241c9839ap-85, chars_format::scientific, 110,\r\n        \"5.\"\r\n        \"0522652313759764410835719385889967890520096634286257939712790137828674758013747236873314250260591506958007\"\r\n        \"8125e-26\"},\r\n    {0x1.0e0770a686d83p-84, chars_format::scientific, 110,\r\n        \"5.\"\r\n        \"4531934926351591660177398201938298068678042808590523162341841824872750582597902280213020276278257369995117\"\r\n        \"1875e-26\"},\r\n    {0x1.0248f281384bap-83, chars_format::scientific, 109,\r\n        \"1.\"\r\n        \"0432046065743156487678104545227567829109732926698293352119589937000883328455103082887944765388965606689453\"\r\n        \"125e-25\"},\r\n    {0x1.ac4e19937ae27p-82, chars_format::scientific, 109,\r\n        \"3.\"\r\n        \"4598208650514789897486706324846604978683020740045778389727925607329515889087900859522051177918910980224609\"\r\n        \"375e-25\"},\r\n    {0x1.3087a7746f421p-81, chars_format::scientific, 108,\r\n        \"4.\"\r\n        \"9199458656109230376671766694383649258995953059687000036237194733378455535621753824671031907200813293457031\"\r\n        \"25e-25\"},\r\n    {0x1.70783708f772ap-80, chars_format::scientific, 107,\r\n        \"1.\"\r\n        \"1905894569192662776098050199813402280754741687796493203055674863031360155574134296330157667398452758789062\"\r\n        \"5e-24\"},\r\n    {0x1.e065c19de1dc4p-79, chars_format::scientific, 105,\r\n        \"3.\"\r\n        \"104495987602903687782546492307846204182230640542680505726853422594768705522483287495560944080352783203125e\"\r\n        \"-24\"},\r\n    {0x1.c685d70ae0fe0p-78, chars_format::scientific, 101,\r\n        \"5.87456966397771796422682549439311465967828126938704643526518826834870168340785312466323375701904296875e-\"\r\n        \"24\"},\r\n    {0x1.a0780c9dec656p-77, chars_format::scientific, 105,\r\n        \"1.\"\r\n        \"076546984317854350454897139142567232421318914071250535456926162962421056334960667300038039684295654296875e\"\r\n        \"-23\"},\r\n    {0x1.3cb9bbf0aea75p-76, chars_format::scientific, 105,\r\n        \"1.\"\r\n        \"637432580904225448218479784931625372923561979340250699162731128251391243821899479371495544910430908203125e\"\r\n        \"-23\"},\r\n    {0x1.f0a2b8fd92f2fp-75, chars_format::scientific, 104,\r\n        \"5.\"\r\n        \"13509211207940396346808840622328108640224488399038307803406533218193441570065260748378932476043701171875e-\"\r\n        \"23\"},\r\n    {0x1.bb04bcebdd6ffp-74, chars_format::scientific, 103,\r\n        \"9.\"\r\n        \"1614080145176778862206576960425700831949207923387370233170279819334691495669176219962537288665771484375e-\"\r\n        \"23\"},\r\n    {0x1.0b62fe692a947p-73, chars_format::scientific, 103,\r\n        \"1.\"\r\n        \"1058854487286021576603725304903163539918366413893061214895083103904038779319307650439441204071044921875e-\"\r\n        \"22\"},\r\n    {0x1.272fe8508d433p-72, chars_format::scientific, 102,\r\n        \"2.441730781169199364855750861362078623225251480968477216777312403805932916611709515564143657684326171875e-\"\r\n        \"22\"},\r\n    {0x1.a4da532053764p-71, chars_format::scientific, 99,\r\n        \"6.962426049274538699439196410633694865008161302307608512174481874001941150709171779453754425048828125e-\"\r\n        \"22\"},\r\n    {0x1.93f477225bbbep-70, chars_format::scientific, 100,\r\n        \"1.3365747882614801032463352914308130925659506904834814518322032295127854695238056592643260955810546875e-\"\r\n        \"21\"},\r\n    {0x1.dac01e869bf58p-69, chars_format::scientific, 97,\r\n        \"3.1416350487962486701379607843901811256471115918449956111273280168205701556871645152568817138671875e-21\"},\r\n    {0x1.d259d75a5b1c3p-68, chars_format::scientific, 99,\r\n        \"6.172103329535160089255730652790336729118966059186200003960735827046590884492616169154644012451171875e-\"\r\n        \"21\"},\r\n    {0x1.21e65c14b2260p-67, chars_format::scientific, 93,\r\n        \"7.673584938657739735290448393622396219109761654559513470441611815431315335445106029510498046875e-21\"},\r\n    {0x1.247adaeef533dp-66, chars_format::scientific, 98,\r\n        \"1.54837571490893774333213229345009640160216876301445875570468591053696627568569965660572052001953125e-20\"},\r\n    {0x1.8590b3c7299d1p-65, chars_format::scientific, 97,\r\n        \"4.1246824511333552476207424120489015258619773211916720236265565535660471141454763710498809814453125e-20\"},\r\n    {0x1.c16c9cb03d8aap-64, chars_format::scientific, 95,\r\n        \"9.51692901231032540579231072092779398477634354654546553799188135513986708247102797031402587890625e-20\"},\r\n    {0x1.afab9cd6fe545p-63, chars_format::scientific, 96,\r\n        \"1.828195094563646962244514682444059838175275831433078317124485412392687067040242254734039306640625e-19\"},\r\n    {0x1.f3fa50d429d7dp-62, chars_format::scientific, 95,\r\n        \"4.23497665979731430374210700758894838217662945466715084148756620407993978005833923816680908203125e-19\"},\r\n    {0x1.28c638f71d180p-61, chars_format::scientific, 87,\r\n        \"5.027552313830036048120204027398570440831332829627331459931838253396563231945037841796875e-19\"},\r\n    {0x1.9f197cec56a5bp-60, chars_format::scientific, 94,\r\n        \"1.4064120230650801115977574752674439808505632504024500210870751715219739708118140697479248046875e-18\"},\r\n    {0x1.23514676b2275p-59, chars_format::scientific, 93,\r\n        \"1.974044039127005690154809950489990254937712867841699028448321229234352358616888523101806640625e-18\"},\r\n    {0x1.742a3899f4ebfp-58, chars_format::scientific, 92,\r\n        \"5.04377526843796603941025189601750138415420441259629479036075139219974516890943050384521484375e-18\"},\r\n    {0x1.a24fa5ce867fbp-57, chars_format::scientific, 92,\r\n        \"1.13383457288879493881896180602251467830667152418533914770559789531034766696393489837646484375e-17\"},\r\n    {0x1.cd8bd478c4055p-56, chars_format::scientific, 91,\r\n        \"2.5020470223212867241998736287413513640192596398166731408441165740441647358238697052001953125e-17\"},\r\n    {0x1.5586beb808bb7p-55, chars_format::scientific, 90,\r\n        \"3.702836080714707117409232632738353992936433317704862655528330606102827005088329315185546875e-17\"},\r\n    {0x1.1782f85ff73e4p-54, chars_format::scientific, 87,\r\n        \"6.060941731133067066111993215447123683291462078494282739171694629476405680179595947265625e-17\"},\r\n    {0x1.5241f4d37d585p-53, chars_format::scientific, 89,\r\n        \"1.46695868126617733676316434964942825427625379777242520251689938959316350519657135009765625e-16\"},\r\n    {0x1.a9145af5d709dp-52, chars_format::scientific, 88,\r\n        \"3.6869770513056370258874447534099887412925645774515459596187838542391546070575714111328125e-16\"},\r\n    {0x1.14e3531aa8734p-51, chars_format::scientific, 85,\r\n        \"4.8032409094989299117442762699440752432309049459180361196786179789341986179351806640625e-16\"},\r\n    {0x1.8d306ae29c760p-50, chars_format::scientific, 82,\r\n        \"1.3780266196844444434001720951926995236184146642610670596695854328572750091552734375e-15\"},\r\n    {0x1.34141b1c6e739p-49, chars_format::scientific, 86,\r\n        \"2.13772429398483853817359285620068290943482478168313765110042368178255856037139892578125e-15\"},\r\n    {0x1.bfaa985695d46p-48, chars_format::scientific, 84,\r\n        \"6.212619127432842815535315316465814989023408974888607048114863573573529720306396484375e-15\"},\r\n    {0x1.a1bbef9dd867ep-47, chars_format::scientific, 84,\r\n        \"1.159445109391313455470569692597092094861802556715613121696151210926473140716552734375e-14\"},\r\n    {0x1.d4c0489e284adp-46, chars_format::scientific, 84,\r\n        \"2.602091364932322080817661116014788518557084191773487447107982006855309009552001953125e-14\"},\r\n    {0x1.5256e07f25dcdp-45, chars_format::scientific, 83,\r\n        \"3.75632150992183886471662319623894115764293523407335584352040314115583896636962890625e-14\"},\r\n    {0x1.71a8a2ed2b45fp-44, chars_format::scientific, 82,\r\n        \"8.2080728005574479728778617018482662413977023196931526172193116508424282073974609375e-14\"},\r\n    {0x1.b0e4af6682317p-43, chars_format::scientific, 82,\r\n        \"1.9224324416725509019750615142710900007101508524254285248389351181685924530029296875e-13\"},\r\n    {0x1.7b8de5bf78fd4p-42, chars_format::scientific, 79,\r\n        \"3.3711192675176746235914191322624765202904673078165842525777406990528106689453125e-13\"},\r\n    {0x1.ae59a0cb674f4p-41, chars_format::scientific, 78,\r\n        \"7.644553608444342585595182827876899211462513594739220934570766985416412353515625e-13\"},\r\n    {0x1.5dd5fa7afbee1p-40, chars_format::scientific, 80,\r\n        \"1.24286662127449181887050977687219485896298609706178694978007115423679351806640625e-12\"},\r\n    {0x1.384536c7c656fp-39, chars_format::scientific, 79,\r\n        \"2.2188144095886259914737759791032178121987505914347593716229312121868133544921875e-12\"},\r\n    {0x1.a1194c27935c7p-38, chars_format::scientific, 78,\r\n        \"5.927330708414900645292509942453463927213019868389665134600363671779632568359375e-12\"},\r\n    {0x1.a02b0d1c1f1a8p-37, chars_format::scientific, 75,\r\n        \"1.182821076754492303774112659466477733005707051461286027915775775909423828125e-11\"},\r\n    {0x1.651f948c8f895p-36, chars_format::scientific, 77,\r\n        \"2.03001127618364981565507635049392808242185726186335159582085907459259033203125e-11\"},\r\n    {0x1.0658d9ac47254p-35, chars_format::scientific, 74,\r\n        \"2.98254089359250336024448739896349803990549531818032846786081790924072265625e-11\"},\r\n    {0x1.463f50c6fb1bfp-34, chars_format::scientific, 75,\r\n        \"7.418005368738489917011425132798547142642942020529517321847379207611083984375e-11\"},\r\n    {0x1.fff128a1f6814p-33, chars_format::scientific, 73,\r\n        \"2.3280428024704824536772626046771984820171752517126151360571384429931640625e-10\"},\r\n    {0x1.514274eb0bbe6p-32, chars_format::scientific, 73,\r\n        \"3.0673581616552569753443045750033145446789006882681860588490962982177734375e-10\"},\r\n    {0x1.c66e7acce03a0p-31, chars_format::scientific, 68,\r\n        \"8.26606194612068018706590240458897955733164053526706993579864501953125e-10\"},\r\n    {0x1.3f09f0d9f8a0fp-30, chars_format::scientific, 73,\r\n        \"1.1606565070959597058008216612762751596132915210546343587338924407958984375e-09\"},\r\n    {0x1.364bffd2bc2acp-29, chars_format::scientific, 70,\r\n        \"2.2577068906830200447981735699908012460213058147928677499294281005859375e-09\"},\r\n    {0x1.21d26e23a4c2cp-28, chars_format::scientific, 69,\r\n        \"4.217465074781223546467325241464407792335578051279298961162567138671875e-09\"},\r\n    {0x1.ff8816230e3aep-27, chars_format::scientific, 70,\r\n        \"1.4887528604095426785363609988553645901987465549609623849391937255859375e-08\"},\r\n    {0x1.81d69783dda8fp-26, chars_format::scientific, 70,\r\n        \"2.2458741990672780846062688334639767528955189845873974263668060302734375e-08\"},\r\n    {0x1.4c5ef6a88833bp-25, chars_format::scientific, 69,\r\n        \"3.869307125073411435703155092889760080510086481808684766292572021484375e-08\"},\r\n    {0x1.a7cdc3dfbe9a7p-24, chars_format::scientific, 68,\r\n        \"9.86745045636969746077316024100711810973507454036734998226165771484375e-08\"},\r\n    {0x1.1241321139c78p-23, chars_format::scientific, 65,\r\n        \"1.27709782783028146746994412052966794135500094853341579437255859375e-07\"},\r\n    {0x1.a5b4169e66c20p-22, chars_format::scientific, 62,\r\n        \"3.92741961530240641102713905485899203995359130203723907470703125e-07\"},\r\n    {0x1.79889fa31ee9cp-21, chars_format::scientific, 64,\r\n        \"7.0321128865744089630400275037214186113487812690436840057373046875e-07\"},\r\n    {0x1.6659647864b09p-20, chars_format::scientific, 66,\r\n        \"1.334954758379262946808873659121363886015387834049761295318603515625e-06\"},\r\n    {0x1.d26dfc62429ebp-19, chars_format::scientific, 65,\r\n        \"3.47517156840570335023048696709846439034663490019738674163818359375e-06\"},\r\n    {0x1.793d2e00a8300p-18, chars_format::scientific, 56,\r\n        \"5.62129889716887591599725482183202984742820262908935546875e-06\"},\r\n    {0x1.39585d365fddfp-17, chars_format::scientific, 63,\r\n        \"9.338413843761515393811049878802776902375626377761363983154296875e-06\"},\r\n    {0x1.db9dd5363f2bbp-16, chars_format::scientific, 63,\r\n        \"2.834895459445888963169284113785550971442717127501964569091796875e-05\"},\r\n    {0x1.996aa70581c70p-15, chars_format::scientific, 58,\r\n        \"4.8806263333083725435013189297706048819236457347869873046875e-05\"},\r\n    {0x1.24d414212635cp-14, chars_format::scientific, 59,\r\n        \"6.98157387141301578013796724775374968885444104671478271484375e-05\"},\r\n    {0x1.49743faae0bcep-13, chars_format::scientific, 60,\r\n        \"1.570959551281101199658729594688111319555900990962982177734375e-04\"},\r\n    {0x1.fd541909e34d0p-12, chars_format::scientific, 56,\r\n        \"4.85733515795794441871624513851202209480106830596923828125e-04\"},\r\n    {0x1.fc05fd5826c21p-11, chars_format::scientific, 59,\r\n        \"9.68977731662493927018708905762878202949650585651397705078125e-04\"},\r\n    {0x1.b8d7be1e07ac5p-10, chars_format::scientific, 59,\r\n        \"1.68168161281527614621389421500907701556570827960968017578125e-03\"},\r\n    {0x1.58ae5b82bc128p-9, chars_format::scientific, 55,\r\n        \"2.6297079760909843060279200699369539506733417510986328125e-03\"},\r\n    {0x1.da353b89e30a0p-8, chars_format::scientific, 52, \"7.2358389242134502072900659186416305601596832275390625e-03\"},\r\n    {0x1.523aa52ed6443p-7, chars_format::scientific, 57,\r\n        \"1.032193246435231769042584204498780309222638607025146484375e-02\"},\r\n    {0x1.b12c63dc720bbp-6, chars_format::scientific, 56,\r\n        \"2.64388060766413794666629399898738483898341655731201171875e-02\"},\r\n    {0x1.8284dd65c8bc7p-5, chars_format::scientific, 55,\r\n        \"4.7182495515037774225231004265879164449870586395263671875e-02\"},\r\n    {0x1.e78254ba42944p-4, chars_format::scientific, 53, \"1.19020777670958699534509150907979346811771392822265625e-01\"},\r\n    {0x1.a2ea8656520bap-3, chars_format::scientific, 53, \"2.04548882970135015302304282158729620277881622314453125e-01\"},\r\n    {0x1.c9baa87f5bfbbp-2, chars_format::scientific, 53, \"4.47001106999774300287953110455418936908245086669921875e-01\"},\r\n    {0x1.71b66707cac81p-1, chars_format::scientific, 52, \"7.2209474535101503267497946580988354980945587158203125e-01\"},\r\n    {0x1.61447ddf5fb3ep+0, chars_format::scientific, 51, \"1.379951350245121499682454668800346553325653076171875e+00\"},\r\n    {0x1.b56d58bd7ad8fp+1, chars_format::scientific, 51, \"3.417399494666546910792703783954493701457977294921875e+00\"},\r\n    {0x1.5201909da2346p+2, chars_format::scientific, 49, \"5.2813455142393816998946931562386453151702880859375e+00\"},\r\n    {0x1.b29512bde933ep+3, chars_format::scientific, 49, \"1.3580697413368053361182319349609315395355224609375e+01\"},\r\n    {0x1.28ba36cdc60a7p+4, chars_format::scientific, 49, \"1.8545462421229469640593379153870046138763427734375e+01\"},\r\n    {0x1.4a0f954ec75bap+5, chars_format::scientific, 47, \"4.12576090006436544399548438377678394317626953125e+01\"},\r\n    {0x1.df376fa0e3183p+6, chars_format::scientific, 48, \"1.198041367663009140187568846158683300018310546875e+02\"},\r\n    {0x1.d777fba5be5b1p+7, chars_format::scientific, 47, \"2.35734341792570859297484275884926319122314453125e+02\"},\r\n    {0x1.c36ecdbaad102p+8, chars_format::scientific, 45, \"4.514328266785161076768417842686176300048828125e+02\"},\r\n    {0x1.92271b9835605p+9, chars_format::scientific, 45, \"8.043055296192766263629891909658908843994140625e+02\"},\r\n    {0x1.3825bbeddf401p+10, chars_format::scientific, 45, \"1.248589595287339989226893521845340728759765625e+03\"},\r\n    {0x1.bb88c3b81cd97p+11, chars_format::scientific, 44, \"3.54827389150271073958720080554485321044921875e+03\"},\r\n    {0x1.0d8d78fa727c1p+12, chars_format::scientific, 43, \"4.3128420357200675425701774656772613525390625e+03\"},\r\n    {0x1.f22ae1035f4c6p+13, chars_format::scientific, 42, \"1.594135986971332386019639670848846435546875e+04\"},\r\n    {0x1.86358ae5236dep+14, chars_format::scientific, 41, \"2.49733856397186100366525352001190185546875e+04\"},\r\n    {0x1.60fac84cf570cp+15, chars_format::scientific, 39, \"4.518139121214867918752133846282958984375e+04\"},\r\n    {0x1.27022f6d4c231p+16, chars_format::scientific, 40, \"7.5522185261496124439872801303863525390625e+04\"},\r\n    {0x1.4e3d42df12170p+17, chars_format::scientific, 36, \"1.711305224325763992965221405029296875e+05\"},\r\n    {0x1.198a850ca77d0p+18, chars_format::scientific, 35, \"2.88298078897354193031787872314453125e+05\"},\r\n    {0x1.b9ed4a147a3d3p+19, chars_format::scientific, 38, \"9.05066314999694353900849819183349609375e+05\"},\r\n    {0x1.f24810bc3163fp+20, chars_format::scientific, 38, \"2.04096104594553983770310878753662109375e+06\"},\r\n    {0x1.48f2de574af19p+21, chars_format::scientific, 37, \"2.6947477926234123297035694122314453125e+06\"},\r\n    {0x1.7b69f67382652p+22, chars_format::scientific, 35, \"6.21631761280210502445697784423828125e+06\"},\r\n    {0x1.80957cacc5b6dp+23, chars_format::scientific, 36, \"1.260204633744593895971775054931640625e+07\"},\r\n    {0x1.581bf08ec083bp+24, chars_format::scientific, 35, \"2.25515365576250366866588592529296875e+07\"},\r\n    {0x1.10483fa5a32e9p+25, chars_format::scientific, 34, \"3.5688575294042415916919708251953125e+07\"},\r\n    {0x1.0ed9715f279f7p+26, chars_format::scientific, 33, \"7.100154148679338395595550537109375e+07\"},\r\n    {0x1.b72203719cba3p+27, chars_format::scientific, 33, \"2.302320915503817498683929443359375e+08\"},\r\n    {0x1.fd9abcf52a4a5p+28, chars_format::scientific, 32, \"5.34358991322824776172637939453125e+08\"},\r\n    {0x1.2fcaa4b911fc2p+29, chars_format::scientific, 30, \"6.370971111337816715240478515625e+08\"},\r\n    {0x1.15bbc0a9a86a6p+30, chars_format::scientific, 30, \"1.164898346414468288421630859375e+09\"},\r\n    {0x1.b00ca87636445p+31, chars_format::scientific, 30, \"3.624293435105989933013916015625e+09\"},\r\n    {0x1.d840bff2e1059p+32, chars_format::scientific, 29, \"7.92308939487899112701416015625e+09\"},\r\n    {0x1.6573fbd897a95p+33, chars_format::scientific, 29, \"1.19941344491848545074462890625e+10\"},\r\n    {0x1.884fb41a62589p+34, chars_format::scientific, 28, \"2.6327568489536655426025390625e+10\"},\r\n    {0x1.ac014e40dd0dap+35, chars_format::scientific, 26, \"5.74458721349079132080078125e+10\"},\r\n    {0x1.43fc6c60c1eefp+36, chars_format::scientific, 26, \"8.69693373561208343505859375e+10\"},\r\n    {0x1.2dbd32a11ddb3p+37, chars_format::scientific, 26, \"1.61994920995732025146484375e+11\"},\r\n    {0x1.b0bd32c9becf1p+38, chars_format::scientific, 25, \"4.6465002353570220947265625e+11\"},\r\n    {0x1.a4dd93186c42dp+39, chars_format::scientific, 24, \"9.038018345501304931640625e+11\"},\r\n    {0x1.e32a7f9fa538ap+40, chars_format::scientific, 23, \"2.07518221098122119140625e+12\"},\r\n    {0x1.2084411c53fa7p+41, chars_format::scientific, 23, \"2.47833888170395654296875e+12\"},\r\n    {0x1.0d5a138c14d99p+42, chars_format::scientific, 22, \"4.6274297324353994140625e+12\"},\r\n    {0x1.0ead5f7d79f3bp+43, chars_format::scientific, 21, \"9.300399090639615234375e+12\"},\r\n    {0x1.d9bdd70990201p+44, chars_format::scientific, 21, \"3.255527228032200390625e+13\"},\r\n    {0x1.b1ba144c3c6d7p+45, chars_format::scientific, 20, \"5.96109674105736796875e+13\"},\r\n    {0x1.56ef390e1980dp+46, chars_format::scientific, 19, \"9.4265107777120203125e+13\"},\r\n    {0x1.d08de26a3153dp+47, chars_format::scientific, 19, \"2.5539139214352990625e+14\"},\r\n    {0x1.96bf8d1fe67eap+48, chars_format::scientific, 17, \"4.47224427308670625e+14\"},\r\n    {0x1.095e52abc0566p+49, chars_format::scientific, 16, \"5.8355139054814075e+14\"},\r\n    {0x1.d639785501ca7p+50, chars_format::scientific, 17, \"2.06806918811012175e+15\"},\r\n    {0x1.7a69b71f7291ap+51, chars_format::scientific, 15, \"3.328555513255053e+15\"},\r\n    {0x1.6f06d69bea925p+52, chars_format::scientific, 15, \"6.456802203838757e+15\"},\r\n    {0x1.e477d245cfe2cp+53, chars_format::scientific, 16, \"1.7045704215755864e+16\"},\r\n    {0x1.94b582e6fb874p+54, chars_format::scientific, 14, \"2.84788661041812e+16\"},\r\n    {0x1.651121f05f90dp+55, chars_format::scientific, 16, \"5.0252702075045992e+16\"},\r\n    {0x1.7b487047230f8p+56, chars_format::scientific, 17, \"1.06758663240355712e+17\"},\r\n    {0x1.7784c1fbc471cp+57, chars_format::scientific, 17, \"2.11398169908011904e+17\"},\r\n    {0x1.7ac4b78ae30e4p+58, chars_format::scientific, 16, \"4.2645533513929344e+17\"},\r\n    {0x1.312f35afa81abp+59, chars_format::scientific, 16, \"6.8721420418841536e+17\"},\r\n    {0x1.06017fddf665bp+60, chars_format::scientific, 18, \"1.179969481513261824e+18\"},\r\n    {0x1.5637f72135e49p+61, chars_format::scientific, 18, \"3.082431250837574144e+18\"},\r\n    {0x1.027e9b70ce1ccp+62, chars_format::scientific, 18, \"4.656624004411895808e+18\"},\r\n    {0x1.60c83f40c3bc1p+63, chars_format::scientific, 19, \"1.2710318822043551744e+19\"},\r\n    {0x1.2689a2af0f3ddp+64, chars_format::scientific, 19, \"2.1223673591718858752e+19\"},\r\n    {0x1.6bd7cbc72e9cep+65, chars_format::scientific, 19, \"5.2435295624203190272e+19\"},\r\n    {0x1.b4618e9b7fb90p+66, chars_format::scientific, 20, \"1.25778283487165677568e+20\"},\r\n    {0x1.b700b394dae46p+67, chars_format::scientific, 20, \"2.53067849876474363904e+20\"},\r\n    {0x1.69b9336bb3625p+68, chars_format::scientific, 20, \"4.17038733696760610816e+20\"},\r\n    {0x1.2e73980401159p+69, chars_format::scientific, 20, \"6.97405765271726194688e+20\"},\r\n    {0x1.9cd16da53fb63p+70, chars_format::scientific, 21, \"1.903787364496945446912e+21\"},\r\n    {0x1.a5f63f3a815d1p+71, chars_format::scientific, 21, \"3.891911610207935397888e+21\"},\r\n    {0x1.b0e3c4047b75cp+72, chars_format::scientific, 21, \"7.985405687712874233856e+21\"},\r\n    {0x1.4d847c6eb42c0p+73, chars_format::scientific, 22, \"1.2304624807151021326336e+22\"},\r\n    {0x1.85fc1437b1734p+74, chars_format::scientific, 22, \"2.8775790596421559779328e+22\"},\r\n    {0x1.8a7019581e7fap+75, chars_format::scientific, 22, \"5.8208757994689939898368e+22\"},\r\n    {0x1.c67cb0e7b2a1cp+76, chars_format::scientific, 23, \"1.34140907927602311725056e+23\"},\r\n    {0x1.e9cf376a61382p+77, chars_format::scientific, 23, \"2.89132459907178460872704e+23\"},\r\n    {0x1.f3020a5bb1e68p+78, chars_format::scientific, 23, \"5.89124628706466797191168e+23\"},\r\n    {0x1.c5c96a4dd9bf3p+79, chars_format::scientific, 24, \"1.071473736158360648024064e+24\"},\r\n    {0x1.9c2cc74cde703p+80, chars_format::scientific, 24, \"1.946441008779422248992768e+24\"},\r\n    {0x1.aba488754df1ap+81, chars_format::scientific, 24, \"4.038971174128976945741824e+24\"},\r\n    {0x1.fad8c14ba9d89p+82, chars_format::scientific, 24, \"9.574063461859927634477056e+24\"},\r\n    {0x1.f2fda18bc958dp+83, chars_format::scientific, 25, \"1.8851337402710215888994304e+25\"},\r\n    {0x1.9d8f6c51ed693p+84, chars_format::scientific, 24, \"3.124772875373390690516992e+25\"},\r\n    {0x1.f8236511754b2p+85, chars_format::scientific, 25, \"7.6183220036477407253757952e+25\"},\r\n    {0x1.a2d213294f709p+86, chars_format::scientific, 26, \"1.26580760756294165874081792e+26\"},\r\n    {0x1.50d2867c287f9p+87, chars_format::scientific, 25, \"2.0359662658108241074978816e+26\"},\r\n    {0x1.3bf963799b446p+88, chars_format::scientific, 26, \"3.81989337423178708023246848e+26\"},\r\n    {0x1.a12dc41e72c86p+89, chars_format::scientific, 27, \"1.008676382053808460168953856e+27\"},\r\n    {0x1.832bbfda4182fp+90, chars_format::scientific, 27, \"1.872243572018953219752329216e+27\"},\r\n    {0x1.b22ef35aa515ep+91, chars_format::scientific, 27, \"4.199164189291374906487865344e+27\"},\r\n    {0x1.24632dbcf4379p+92, chars_format::scientific, 27, \"5.655595157253244734125637632e+27\"},\r\n    {0x1.5016423c09309p+93, chars_format::scientific, 27, \"1.300173405645727077842812928e+28\"},\r\n    {0x1.bbf972700d65cp+94, chars_format::scientific, 28, \"3.4350855574179920076494340096e+28\"},\r\n    {0x1.6e1f3e3e4245fp+95, chars_format::scientific, 28, \"5.6654642115107953004184076288e+28\"},\r\n    {0x1.47d35248fe09dp+96, chars_format::scientific, 29, \"1.01457070140041083705704316928e+29\"},\r\n    {0x1.d31a67ab2db51p+97, chars_format::scientific, 29, \"2.89122842438625311850965762048e+29\"},\r\n    {0x1.ab1253de2af64p+98, chars_format::scientific, 29, \"5.28689023652633609509229559808e+29\"},\r\n    {0x1.9cfdf3dc71391p+99, chars_format::scientific, 30, \"1.022518671042034182622745198592e+30\"},\r\n    {0x1.96152f2254ee0p+100, chars_format::scientific, 29, \"2.01082438422738923900836511744e+30\"},\r\n    {0x1.b4de90e5f0095p+101, chars_format::scientific, 28, \"4.3265449624459285617283432448e+30\"},\r\n    {0x1.be778d0492e6ap+102, chars_format::scientific, 30, \"8.843189919417627285369414221824e+30\"},\r\n    {0x1.ebc33e9f0f228p+103, chars_format::scientific, 31, \"1.9480726537977613039106892234752e+31\"},\r\n    {0x1.7af455437cc9bp+104, chars_format::scientific, 30, \"3.002386285018347878401204813824e+31\"},\r\n    {0x1.642a6e844551ep+105, chars_format::scientific, 31, \"5.6436715663923718161576574844928e+31\"},\r\n    {0x1.41b8b3a301a15p+106, chars_format::scientific, 32, \"1.01957610305533992485037451247616e+32\"},\r\n    {0x1.0155b96fbcde0p+107, chars_format::scientific, 32, \"1.63105345367552336552353253556224e+32\"},\r\n    {0x1.17b500de21540p+108, chars_format::scientific, 32, \"3.54570802835801091766892577685504e+32\"},\r\n    {0x1.fa3527f025531p+109, chars_format::scientific, 33, \"1.283388839036855097115531068571648e+33\"},\r\n    {0x1.12991a738b877p+110, chars_format::scientific, 33, \"1.392377581640218018121716183597056e+33\"},\r\n    {0x1.4bbcfb93f0ee4p+111, chars_format::scientific, 33, \"3.364225166474354069710570596073472e+33\"},\r\n    {0x1.15926f3d7b071p+112, chars_format::scientific, 33, \"5.629829199100141824040041065742336e+33\"},\r\n    {0x1.86dacf9db9927p+113, chars_format::scientific, 33, \"1.585495147785397376655401049653248e+34\"},\r\n    {0x1.6aa8e880f9271p+114, chars_format::scientific, 34, \"2.9422458257062697580352079193440256e+34\"},\r\n    {0x1.44db602f65a69p+115, chars_format::scientific, 34, \"5.2711051576274024231085405965910016e+34\"},\r\n    {0x1.4aa98d059f6c7p+116, chars_format::scientific, 35, \"1.07306053965661318564328070210125824e+35\"},\r\n    {0x1.ad41a77876ac0p+117, chars_format::scientific, 35, \"2.78603372165060620709063210871816192e+35\"},\r\n    {0x1.66608302c1ae0p+118, chars_format::scientific, 35, \"4.65199941604955653649793565669195776e+35\"},\r\n    {0x1.724a6060561d6p+119, chars_format::scientific, 35, \"9.61329185843412549197741860528848896e+35\"},\r\n    {0x1.d6cd57f7afd91p+120, chars_format::scientific, 36, \"2.444544386985640811823093072529457152e+36\"},\r\n    {0x1.ddc593d2d0608p+121, chars_format::scientific, 36, \"4.961465895993372192136189659616116736e+36\"},\r\n    {0x1.cb5644ce1a91fp+122, chars_format::scientific, 35, \"9.54005598637793663997028777762750464e+36\"},\r\n    {0x1.1bc54417de33cp+123, chars_format::scientific, 37, \"1.1787368324472861665867817538046394368e+37\"},\r\n    {0x1.0b7025db14e7ap+124, chars_format::scientific, 37, \"2.2217886245582567633425166223452143616e+37\"},\r\n    {0x1.c25ad8d3be06dp+125, chars_format::scientific, 37, \"7.4828037824613418029633676794849656832e+37\"},\r\n    {0x1.6fa2ef34cd8cep+126, chars_format::scientific, 38, \"1.22168169555880306340177489939782434816e+38\"},\r\n    {0x1.2154fd4e3bc1cp+127, chars_format::scientific, 38, \"1.92294090682938928866121043260519481344e+38\"},\r\n    {0x1.2b3cd0ab51216p+128, chars_format::scientific, 38, \"3.97754940865523918837358639143272316928e+38\"},\r\n    {0x1.088b103a41b0bp+129, chars_format::scientific, 38, \"7.03276498569342686920339511489517846528e+38\"},\r\n    {0x1.e53444dfa15a7p+130, chars_format::scientific, 39, \"2.579787897255990868798456303636608712704e+39\"},\r\n    {0x1.19ed8692b24fbp+131, chars_format::scientific, 39, \"2.997970965091339190918492577226091921408e+39\"},\r\n    {0x1.d6393885ae144p+132, chars_format::scientific, 40, \"1.0000548245536083788593238972941513785344e+40\"},\r\n    {0x1.6acc29897fd95p+133, chars_format::scientific, 40, \"1.5431699376188799230066746785793442840576e+40\"},\r\n    {0x1.f2f9916765d68p+134, chars_format::scientific, 40, \"4.2448087869444726132947292415438599749632e+40\"},\r\n    {0x1.a8bb1d24ff93dp+135, chars_format::scientific, 40, \"7.2264220268357129106158415886080664403968e+40\"},\r\n    {0x1.c5c3e8df3f2cfp+136, chars_format::scientific, 39, \"1.544083208152169859594847631211501715456e+41\"},\r\n    {0x1.1772e9d5da5a7p+137, chars_format::scientific, 41, \"1.90183053010164648774242281749579802083328e+41\"},\r\n    {0x1.14f6d2645603fp+138, chars_format::scientific, 41, \"3.76984063098152793892190666264816558014464e+41\"},\r\n    {0x1.24a5b6eb957c8p+139, chars_format::scientific, 40, \"7.9666178829165263796362879580362262970368e+41\"},\r\n    {0x1.2ead0eb8af7cbp+140, chars_format::scientific, 42, \"1.647924923062673765177664088659074522021888e+42\"},\r\n    {0x1.f516ab8dbd662p+141, chars_format::scientific, 42, \"5.456371187228343385170833127692803019636736e+42\"},\r\n    {0x1.855d7376918a9p+142, chars_format::scientific, 42, \"8.479619741110213809967927453284253992747008e+42\"},\r\n    {0x1.f44b558dbdfb5p+143, chars_format::scientific, 43, \"2.1790888931872989461006813529845663969312768e+43\"},\r\n    {0x1.196a6ab9ee449p+144, chars_format::scientific, 43, \"2.4514764141293366381415554359835359275122688e+43\"},\r\n    {0x1.c970123b86b86p+145, chars_format::scientific, 41, \"7.96969010621829343736169074091377888854016e+43\"},\r\n    {0x1.23fe1017a3e0ap+146, chars_format::scientific, 44, \"1.01744513270938959360968970914297622533505024e+44\"},\r\n    {0x1.547b58dbe0a82p+147, chars_format::scientific, 44, \"2.37281200493303842948982975659978497995046912e+44\"},\r\n    {0x1.6b72d270d534dp+148, chars_format::scientific, 44, \"5.06573307308778511819262316883115987825590272e+44\"},\r\n    {0x1.9bfa29a521e6cp+149, chars_format::scientific, 45, \"1.148424814894339399771081143389126450042896384e+45\"},\r\n    {0x1.088e70fa79bf2p+150, chars_format::scientific, 45, \"1.474951280394658237786084602544572869491294208e+45\"},\r\n    {0x1.1d97a9d8999d2p+151, chars_format::scientific, 45, \"3.184462066193894206844138084970587550398808064e+45\"},\r\n    {0x1.1b7ddc6783fe8p+152, chars_format::scientific, 45, \"6.322074926642195313905924879563454681421185024e+45\"},\r\n    {0x1.90f9b356e1fd1p+153, chars_format::scientific, 46, \"1.7884100129279887107935363982167269062471581696e+46\"},\r\n    {0x1.04a659aa20643p+154, chars_format::scientific, 45, \"2.325073960940094003234741315214732474508640256e+46\"},\r\n    {0x1.b45db51612c32p+155, chars_format::scientific, 46, \"7.7850303756798823507242277549769146173862445056e+46\"},\r\n    {0x1.94f1118511db0p+156, chars_format::scientific, 47, \"1.44488017324739167332291972816201226607422078976e+47\"},\r\n    {0x1.74288ae36661ep+157, chars_format::scientific, 46, \"2.6558108692875685669156873835578158454916775936e+47\"},\r\n    {0x1.3253541731259p+158, chars_format::scientific, 47, \"4.37202365761853212655650514880767316833467367424e+47\"},\r\n    {0x1.9d71f6b97eb99p+159, chars_format::scientific, 48, \"1.180177332650351500186142018418327053943445651456e+48\"},\r\n    {0x1.9c2824d021211p+160, chars_format::scientific, 48, \"2.352999434252425166009583916770268278726766624768e+48\"},\r\n    {0x1.2c37fa039529bp+161, chars_format::scientific, 48, \"3.427891103047345015228894619797641792100916789248e+48\"},\r\n    {0x1.97f764d76e448p+162, chars_format::scientific, 46, \"9.3163052493008502647057342776183447761954275328e+48\"},\r\n    {0x1.a28e124e01121p+163, chars_format::scientific, 49, \"1.9116211540697205399927873627877011998254938718208e+49\"},\r\n    {0x1.500cfed695739p+164, chars_format::scientific, 49, \"3.0696171319662410271698897460360354956718064533504e+49\"},\r\n    {0x1.2cd97b4ce81a2p+165, chars_format::scientific, 49, \"5.4961511485964129240667100065476685812465949212672e+49\"},\r\n    {0x1.d24224f1cf2bcp+166, chars_format::scientific, 50, \"1.70359345069614948406404727167574558656079671066624e+50\"},\r\n    {0x1.83b3da401d150p+167, chars_format::scientific, 50, \"2.83313955071286289178391550929804608096590893154304e+50\"},\r\n    {0x1.a3b0d2f93d673p+168, chars_format::scientific, 50, \"6.13378673285658591018762418018704374742768855023616e+50\"},\r\n    {0x1.6b5cc29017ae4p+169, chars_format::scientific, 51, \"1.062109320797658708151958249612931353686624780156928e+51\"},\r\n    {0x1.e6bf9a05045a3p+170, chars_format::scientific, 51, \"2.845534590927396736753751979474589830905163889508352e+51\"},\r\n    {0x1.cc9ed46d0d98ep+171, chars_format::scientific, 51, \"5.385580087774829124578596551004441252780605203021824e+51\"},\r\n    {0x1.bc208d2b82a15p+172, chars_format::scientific, 52,\r\n        \"1.0385481005999034803544914290611356999601747138707456e+52\"},\r\n    {0x1.6c981eeb98863p+173, chars_format::scientific, 50, \"1.70513616682002662806350067152462430298633943384064e+52\"},\r\n    {0x1.af5d7ade9c17ap+174, chars_format::scientific, 52,\r\n        \"4.0348216442512827178202027976145404001660863678251008e+52\"},\r\n    {0x1.ebfb63d8a468bp+175, chars_format::scientific, 52,\r\n        \"9.2036158369142271242411353737258443958178349337018368e+52\"},\r\n    {0x1.8165629784911p+176, chars_format::scientific, 53,\r\n        \"1.44193775900760462481135039693825192887594892339970048e+53\"},\r\n    {0x1.f561a2a30dd53p+177, chars_format::scientific, 53,\r\n        \"3.75178096298129453493805795896698130008167991753048064e+53\"},\r\n    {0x1.ce7c7938e0eb9p+178, chars_format::scientific, 53,\r\n        \"6.92146559638991570078851625625319303554674020637999104e+53\"},\r\n    {0x1.77bc8cddcf12ap+179, chars_format::scientific, 54,\r\n        \"1.124637789574368600447483337148668908930534274783772672e+54\"},\r\n    {0x1.3fc175c6f2438p+180, chars_format::scientific, 54,\r\n        \"1.914156990649081570063038235013271375259033985125187584e+54\"},\r\n    {0x1.914ec58ebe041p+181, chars_format::scientific, 54,\r\n        \"4.804705186047787763539909785825820848780520789991489536e+54\"},\r\n    {0x1.5114314b07626p+182, chars_format::scientific, 54,\r\n        \"8.071435564947532553915773674998525033942233843077480448e+54\"},\r\n    {0x1.e2f0276441399p+183, chars_format::scientific, 55,\r\n        \"2.3128140200050004179900419204722717138007627859971014656e+55\"},\r\n    {0x1.cf8d0a2eae505p+184, chars_format::scientific, 55,\r\n        \"4.4399358958425029747414170378892766455751677599478185984e+55\"},\r\n    {0x1.4dda59a8f20a2p+185, chars_format::scientific, 55,\r\n        \"6.3953515931602618386692877635154528630077627837316071424e+55\"},\r\n    {0x1.bab65f6c0e97cp+186, chars_format::scientific, 56,\r\n        \"1.69613692241034722191343016069607921350219320331459362816e+56\"},\r\n    {0x1.0db1e999e5dcep+187, chars_format::scientific, 55,\r\n        \"2.0665317001185353533780346936985121680840320873792536576e+56\"},\r\n    {0x1.16729f78118dbp+188, chars_format::scientific, 54,\r\n        \"4.267199288089498798008616016338101124507969437189537792e+56\"},\r\n    {0x1.84b2774cd6d15p+189, chars_format::scientific, 57,\r\n        \"1.191353245759245872712330749375395405217002847792663625728e+57\"},\r\n    {0x1.5e6b2eec1979ep+190, chars_format::scientific, 57,\r\n        \"2.148060287120407132486133792062303242882862510466574319616e+57\"},\r\n    {0x1.57ac5f28c5822p+191, chars_format::scientific, 57,\r\n        \"4.213422729321882403507151670457754635672165551067199700992e+57\"},\r\n    {0x1.2c1e6e57e9676p+192, chars_format::scientific, 57,\r\n        \"7.358893309664639936881070842796439426339053634941326721024e+57\"},\r\n    {0x1.f14d05585f439p+193, chars_format::scientific, 58,\r\n        \"2.4387563351268131955594715375272838644628307055389846798336e+58\"},\r\n    {0x1.18fdf7f764a16p+194, chars_format::scientific, 58,\r\n        \"2.7559621536224231764973310109769900471295096010340351082496e+58\"},\r\n    {0x1.8c82785d38820p+195, chars_format::scientific, 57,\r\n        \"7.777910645414688648548968750500929149508839351454403657728e+58\"},\r\n    {0x1.e664096512a4fp+196, chars_format::scientific, 59,\r\n        \"1.90820271006743062589068419007889919427368854321224868691968e+59\"},\r\n    {0x1.7ad7e8f87a31fp+197, chars_format::scientific, 59,\r\n        \"2.97254819348561348142059994275052781258332713659043726491648e+59\"},\r\n    {0x1.8fbcbd9143824p+198, chars_format::scientific, 59,\r\n        \"6.27297873989847920060186967507561121071724081221944431607808e+59\"},\r\n    {0x1.fffab418f559fp+199, chars_format::scientific, 60,\r\n        \"1.606873109429469790133884014121163665471467983941023660244992e+60\"},\r\n    {0x1.da1c6d063ff81p+200, chars_format::scientific, 60,\r\n        \"2.976043223039824053749757547207391812994613888441872405233664e+60\"},\r\n    {0x1.15fe8ce1e9504p+201, chars_format::scientific, 60,\r\n        \"3.489997472879308917395719419357749318529849683153472890863616e+60\"},\r\n    {0x1.a8f8f1d983703p+202, chars_format::scientific, 61,\r\n        \"1.0670380970822515728824154611513147539078615867965386421960704e+61\"},\r\n    {0x1.a7c5f2cb7fa9cp+203, chars_format::scientific, 61,\r\n        \"2.1280541721170621914318415811403250028099879746592336410312704e+61\"},\r\n    {0x1.9a069737b82f9p+204, chars_format::scientific, 61,\r\n        \"4.1180373037668160785451413693672802945556196669733887910346752e+61\"},\r\n    {0x1.d7fb39182d06bp+205, chars_format::scientific, 60,\r\n        \"9.480559641663616628696383637736174353513111344194678809427968e+61\"},\r\n    {0x1.8d79cca5204b4p+206, chars_format::scientific, 62,\r\n        \"1.59679737690547294653629880448829857591918862991885354225631232e+62\"},\r\n    {0x1.640c53e94baf0p+207, chars_format::scientific, 62,\r\n        \"2.86073663238193178122650589057504705307874404845642118712000512e+62\"},\r\n    {0x1.804d768153946p+208, chars_format::scientific, 61,\r\n        \"6.1755045156767433035176829824443396292828215618205373832364032e+62\"},\r\n    {0x1.d56e2fb92f94bp+209, chars_format::scientific, 63,\r\n        \"1.508691188244574982497059261858774337284894599380994275393142784e+63\"},\r\n    {0x1.9de8dda906a1ep+210, chars_format::scientific, 63,\r\n        \"2.660508539901083172029910702401831570415871079047501730937831424e+63\"},\r\n    {0x1.7625e5dbb3e9cp+211, chars_format::scientific, 63,\r\n        \"4.809861739392636763970911315108253399659550567331225058938978304e+63\"},\r\n    {0x1.c66583b372649p+212, chars_format::scientific, 64,\r\n        \"1.1682993418673641507770337381177220245747542216734811616358432768e+64\"},\r\n    {0x1.c7dbe2df944fcp+213, chars_format::scientific, 64,\r\n        \"2.3441185866765201891906590922363241098417108629756551288590434304e+64\"},\r\n    {0x1.52e75005b7ac3p+214, chars_format::scientific, 64,\r\n        \"3.4854210022549138065076113679839139392004906864670443177957654528e+64\"},\r\n    {0x1.61996d6b5a737p+215, chars_format::scientific, 64,\r\n        \"7.2731162770376529778347980921328038690888967732944646841598738432e+64\"},\r\n    {0x1.494416e47342cp+216, chars_format::scientific, 64,\r\n        \"1.3545216532450050573167471500475542752885489394641883762375262208e+65\"},\r\n    {0x1.d60ab6b85519cp+217, chars_format::scientific, 65,\r\n        \"3.86728003636036058641366871128252569918895873439564907057088823296e+65\"},\r\n    {0x1.33e03222aff77p+218, chars_format::scientific, 65,\r\n        \"5.06610974407740673840531052436472518619916156367111801266415599616e+65\"},\r\n    {0x1.c180013aacf42p+219, chars_format::scientific, 66,\r\n        \"1.479308658758350330944201788946768123438076335588933997743174582272e+66\"},\r\n    {0x1.a8c4ee725339fp+220, chars_format::scientific, 66,\r\n        \"2.795839034978863819877803502232039113629062617998185283225294733312e+66\"},\r\n    {0x1.e8aaf34741ab6p+221, chars_format::scientific, 66,\r\n        \"6.432840401396405792365580284144481229273342573010878029692370157568e+66\"},\r\n    {0x1.227ef7d830535p+222, chars_format::scientific, 65,\r\n        \"7.64819906204326131860049759731150371173136410489009919800981323776e+66\"},\r\n    {0x1.50d3b96e4614ap+223, chars_format::scientific, 67,\r\n        \"1.7736014170885828821631467083617455696667197990697308887351889494016e+67\"},\r\n    {0x1.8199aecb377d9p+224, chars_format::scientific, 67,\r\n        \"4.0608453724544028931786363107981702003718879833309714118046052777984e+67\"},\r\n    {0x1.19dbb35474ceep+225, chars_format::scientific, 67,\r\n        \"5.9366267010857000073898171317477288623551476762400866883285525987328e+67\"},\r\n    {0x1.dc33701787db2p+226, chars_format::scientific, 68,\r\n        \"2.00599244568418166158633240420166985299541370621581756051323713748992e+68\"},\r\n    {0x1.eff20ab8910b4p+227, chars_format::scientific, 68,\r\n        \"4.17833237036618955782462790270901274407866847161169503610707764051968e+68\"},\r\n    {0x1.bbe88a3d4104ep+228, chars_format::scientific, 68,\r\n        \"7.47984105847088632825661725590567003356199708795195209233577533243392e+68\"},\r\n    {0x1.46b387e75ac05p+229, chars_format::scientific, 69,\r\n        \"1.100981177656366596121887029311165116283765891574561058397569203306496e+69\"},\r\n    {0x1.e666f5cf254cap+230, chars_format::scientific, 69,\r\n        \"3.278344263502461615618708692041532796484309585052066932644501920940032e+69\"},\r\n    {0x1.e6e69845380cep+231, chars_format::scientific, 69,\r\n        \"6.563409273861357872055846937881366142433814631142651266800757371830272e+69\"},\r\n    {0x1.87fc0b17b39efp+232, chars_format::scientific, 70,\r\n        \"1.0567882407580982568830708317724752282141329118524865643643232472530944e+70\"},\r\n    {0x1.1d2094524e151p+233, chars_format::scientific, 70,\r\n        \"1.5374031618797994143345255818223153455446312412350835802141987662987264e+70\"},\r\n    {0x1.ef0acdf882c82p+234, chars_format::scientific, 69,\r\n        \"5.338524581842552093835408600140749961917285261972119383523602533974016e+70\"},\r\n    {0x1.fcbcd755571cbp+235, chars_format::scientific, 71,\r\n        \"1.09724321606021718480487121388084343129412917209137058037575549878009856e+71\"},\r\n    {0x1.5bc325b6842e6p+236, chars_format::scientific, 70,\r\n        \"1.5001044647337975163536052292888629019192953446259429967707981096157184e+71\"},\r\n    {0x1.4839844f3a28ep+237, chars_format::scientific, 71,\r\n        \"2.83165431565250843561226845873096957075695083997080472361101646654078976e+71\"},\r\n    {0x1.e268bea09d76dp+238, chars_format::scientific, 71,\r\n        \"8.32366412253767450473627272269736199394015241611420074982712040652537856e+71\"},\r\n    {0x1.9760fc3633170p+239, chars_format::scientific, 72,\r\n        \"1.405812739508858068375342755770185891515789882712544527098421327318482944e+72\"},\r\n    {0x1.f9780dce1dea1p+240, chars_format::scientific, 72,\r\n        \"3.488618552580639620123899659132615213727580900417550210713537290046537728e+72\"},\r\n    {0x1.06379cf942b94p+241, chars_format::scientific, 72,\r\n        \"3.619513742366401459360774923805574186193834456864238978452991001371869184e+72\"},\r\n    {0x1.54e3dfab69e89p+242, chars_format::scientific, 72,\r\n        \"9.410948883835140439259712749284374813211962760503227341524256159409635328e+72\"},\r\n    {0x1.31e863bfd9bd6p+243, chars_format::scientific, 73,\r\n        \"1.6890382785900103876754997077931661155681683793063575869750399994525908992e+73\"},\r\n    {0x1.97cf871c408f0p+244, chars_format::scientific, 73,\r\n        \"4.5033691214168135372365182321155169406467422866316271815207540483596222464e+73\"},\r\n    {0x1.1c444bdbdf9c3p+245, chars_format::scientific, 73,\r\n        \"6.2781991287502835294706934796700503444220891091676239343080273452105465856e+73\"},\r\n    {0x1.05d2dc08efe95p+246, chars_format::scientific, 74,\r\n        \"1.15650595692360812734551875859766266613142682216011370208563856535394975744e+74\"},\r\n    {0x1.ecc77551d4971p+247, chars_format::scientific, 74,\r\n        \"4.35332683162743291871502389653473442925183772482197555090046969989126160384e+74\"},\r\n    {0x1.d480cb6589e19p+248, chars_format::scientific, 74,\r\n        \"8.27773333411108944564788528429675414027959576520140010882381647552484212736e+74\"},\r\n    {0x1.8d8ef73cf87b1p+249, chars_format::scientific, 75,\r\n        \"1.404849996452092323181663448719164230590611915347499050189329189348495589376e+75\"},\r\n    {0x1.48a0c3b10a317p+250, chars_format::scientific, 75,\r\n        \"2.322541569987461897646236862872835979235153071147854369984513726383982116864e+75\"},\r\n    {0x1.4272a4c4fdd70p+251, chars_format::scientific, 75,\r\n        \"4.557727968952480904558449925323762902907761772892808327111565265849267781632e+75\"},\r\n    {0x1.ae03d804b061ep+252, chars_format::scientific, 74,\r\n        \"1.21563322709765501473251126237121602148703036382587288355792403577863929856e+76\"},\r\n    {0x1.0b5dd53c3113bp+253, chars_format::scientific, 76,\r\n        \"1.5116664880436697889619534522569417861107074808654256101389938332337600200704e+76\"},\r\n    {0x1.fdd951416069dp+254, chars_format::scientific, 76,\r\n        \"5.7652801636485908304981079853657826006611591736383711473146661351961829310464e+76\"},\r\n    {0x1.3f050c163f528p+255, chars_format::scientific, 76,\r\n        \"7.2148358177064735441715850462253186745656784598757713984413999990820116103168e+76\"},\r\n    {0x1.d281ec8a5d188p+256, chars_format::scientific, 77,\r\n        \"2.11007343253573153040916841042569198900237589785514419724926914360700078915584e+77\"},\r\n    {0x1.b1ee0f3407c41p+257, chars_format::scientific, 77,\r\n        \"3.92544155933803743324755229116691986569477877247338320380545265297625347784704e+77\"},\r\n    {0x1.6832d41e7dc1ap+258, chars_format::scientific, 76,\r\n        \"6.5168972734192971123386188207590235648755640305144385763849856436594125307904e+77\"},\r\n    {0x1.e64f563364bdep+259, chars_format::scientific, 76,\r\n        \"1.7597137621226992026876162475289352988150739628485525054187120773028919640064e+78\"},\r\n    {0x1.daa06c44fb425p+260, chars_format::scientific, 78,\r\n        \"3.434875728114804814685899568021643975684275456343249710170796956248388352868352e+78\"},\r\n    {0x1.36affe847782ap+261, chars_format::scientific, 77,\r\n        \"4.49689401318463171959207532471966088045183274122115864667263900282602867654656e+78\"},\r\n    {0x1.5a4251d5f8667p+262, chars_format::scientific, 79,\r\n        \"1.0023515028874743203760034918542228757355688414371945561530461637433189038292992e+79\"},\r\n    {0x1.61672219d801dp+263, chars_format::scientific, 77,\r\n        \"2.04606279876720469579937490350496538995031175031291773472748474159827481788416e+79\"},\r\n    {0x1.3d865b7eeb438p+264, chars_format::scientific, 79,\r\n        \"3.6766863868985022220367084943920216131061939418967080566277924324348988351315968e+79\"},\r\n    {0x1.2db506dfa8ce9p+265, chars_format::scientific, 79,\r\n        \"6.9870599261497189307442468175452786217368249333102065069521396329647863295377408e+79\"},\r\n    {0x1.8390d09306414p+266, chars_format::scientific, 80,\r\n        \"1.79508160415808704712141748605675659243941837354766083639370088277774910089068544e+80\"},\r\n    {0x1.9b58ceed26006p+267, chars_format::scientific, 80,\r\n        \"3.81045742515568238106089113337056938315639562315303996957679473250795050372169728e+80\"},\r\n    {0x1.2fbe163c69224p+268, chars_format::scientific, 80,\r\n        \"5.62735708283395761680999734220534079897036103282947406804850940523084358392741888e+80\"},\r\n    {0x1.ed623087df1bep+269, chars_format::scientific, 81,\r\n        \"1.828157196786173258110715724311801689865646019514059112947102608834558509445021696e+81\"},\r\n    {0x1.c4a8946c5378ap+270, chars_format::scientific, 81,\r\n        \"3.354513608629342758881183607515227358808179514909005943036597166005055102654611456e+81\"},\r\n    {0x1.15c4e12be427fp+271, chars_format::scientific, 81,\r\n        \"4.116922864713554962262731822113769463098264781458759029065788118035733765689442304e+81\"},\r\n    {0x1.6ad5bf3ce75d1p+272, chars_format::scientific, 82,\r\n        \"1.0755434708169830468646961963757742494547372019865450762930913468197267328525664256e+82\"},\r\n    {0x1.39e6cc7b696f2p+273, chars_format::scientific, 82,\r\n        \"1.8609826393606468152836428445460492052838500356054137125720357473673460037122523136e+82\"},\r\n    {0x1.492f9204fea8cp+274, chars_format::scientific, 81,\r\n        \"3.903192479447499033452350069520597800324534214682007651943346621675247621235539968e+82\"},\r\n    {0x1.10fdf067e1d3ap+275, chars_format::scientific, 82,\r\n        \"6.4737911159818786400194931508236873102720909642740513708334320479730693747677069312e+82\"},\r\n    {0x1.4475e6d3ffa4cp+276, chars_format::scientific, 83,\r\n        \"1.53886578090640196755690493218260429593835278923075770789252846079936296641204584448e+83\"},\r\n    {0x1.e690de58f29c9p+277, chars_format::scientific, 83,\r\n        \"4.61541222592303232645421887442495089995066619544195472117594256018529300800228818944e+83\"},\r\n    {0x1.12d15aa66324bp+278, chars_format::scientific, 82,\r\n        \"5.2136715880000982561259895823177793906237517288103170230159179545063743954880561152e+83\"},\r\n    {0x1.c6239933289ecp+279, chars_format::scientific, 84,\r\n        \"1.723128550002755437133951204996418910562653794534546195856270285892794521746348703744e+84\"},\r\n    {0x1.b6563b1fc7692p+280, chars_format::scientific, 82,\r\n        \"3.3263411825363985053471050648782104121530178846595344015068034571605091406795767808e+84\"},\r\n    {0x1.bc57fc9b4e281p+281, chars_format::scientific, 84,\r\n        \"6.743849062437124540067369460095704859176196480433913929539186007746583809206972841984e+84\"},\r\n    {0x1.f8df107311968p+282, chars_format::scientific, 85,\r\n        \"1.5324966500321058049592869611887769487534860026596133853595336640461446056900382687232e+85\"},\r\n    {0x1.de346966130bbp+283, chars_format::scientific, 85,\r\n        \"2.9031045606668695079086558896866507278227043543999063147023976978260396987770338279424e+85\"},\r\n    {0x1.4bcb7614590adp+284, chars_format::scientific, 85,\r\n        \"4.0285461203337303545331340422939720789741892918160941159647588152564951369732381999104e+85\"},\r\n    {0x1.0563f359dbcccp+285, chars_format::scientific, 85,\r\n        \"6.3474382619472774879674901098388887476421241832512569944968136076387350654165612232704e+85\"},\r\n    {0x1.31c3c51fb59f0p+286, chars_format::scientific, 86,\r\n        \"1.48499905686861542665053988630525851133259775675492961721942835140068121158861530857472e+86\"},\r\n    {0x1.43b14acd508e9p+287, chars_format::scientific, 84,\r\n        \"3.144137214709148273932932752798276942472276257047001734687113587664554987136445579264e+86\"},\r\n    {0x1.7a67288ca2338p+288, chars_format::scientific, 86,\r\n        \"7.35111663943683991924868091407140115848506284972761980234658243157821224316229105221632e+86\"},\r\n    {0x1.90ee051acce20p+289, chars_format::scientific, 87,\r\n        \"1.557747566386344816691965362482515856301711161509577196359183216260647622504160667107328e+87\"},\r\n    {0x1.2489551766274p+290, chars_format::scientific, 87,\r\n        \"2.273205881098212719172251019697290790177862652621182786611096562647157941278227203883008e+87\"},\r\n    {0x1.3e54bc6237b93p+291, chars_format::scientific, 87,\r\n        \"4.947293841380347003020105042807568353223605346291404893299918661932182932360249923862528e+87\"},\r\n    {0x1.ecf1cc571a5cdp+292, chars_format::scientific, 87,\r\n        \"1.532204788518055669527054408252775276561841237278791821067837641365410854525267664175104e+88\"},\r\n    {0x1.62c38c686058dp+293, chars_format::scientific, 87,\r\n        \"2.205403895176296498667172663255869787229707570210827621989553387899095272142052689707008e+88\"},\r\n    {0x1.1956cbeae3776p+294, chars_format::scientific, 88,\r\n        \"3.4979111598588176010555116390040342571373179418270620765845075298580332460285709028163584e+88\"},\r\n    {0x1.d245370a2c906p+295, chars_format::scientific, 89,\r\n        \"1.15943544996190933856633616414466811022505880808156492718239704433998219084021400875302912e+89\"},\r\n    {0x1.77a2ad5be5f22p+296, chars_format::scientific, 89,\r\n        \"1.86812241557541298892557723890372259123352337205389983867335838290407406167752042457595904e+89\"},\r\n    {0x1.5e27d63120bc6p+297, chars_format::scientific, 89,\r\n        \"3.48281044472571483629770428112359357931579367395984692863821844484753880315554503889780736e+89\"},\r\n    {0x1.6cd5ca4b6a049p+298, chars_format::scientific, 89,\r\n        \"7.25763926599453313576032544399461752503111043260623699604979165837300824089149573789908992e+89\"},\r\n    {0x1.21ef16216f087p+299, chars_format::scientific, 90,\r\n        \"1.153527049014772181210371929535324976526694483335493350780385752130773271127971750637207552e+90\"},\r\n    {0x1.39c791a4cdd30p+300, chars_format::scientific, 90,\r\n        \"2.496797909293860274452611679981864366431273655911171418054054946652601225349601977195036672e+90\"},\r\n    {0x1.b84f065ad9c40p+301, chars_format::scientific, 90,\r\n        \"7.007223778789100460674592112903687638288056977455315141802089640807060683661017463323099136e+90\"},\r\n    {0x1.5c980f061d930p+302, chars_format::scientific, 91,\r\n        \"1.1095288700912676850259655407944409623006326764511603357666977203703446579685558999924604928e+91\"},\r\n    {0x1.d11d295facde2p+303, chars_format::scientific, 91,\r\n        \"2.9607930405769014382601054795425097838217102889963775497642608889806414863145865310495571968e+91\"},\r\n    {0x1.bbf08598a98bbp+304, chars_format::scientific, 91,\r\n        \"5.6520050704947556744896535369107614707599849622347754280995272309160258719009203701942321152e+91\"},\r\n    {0x1.ba04cbb38e4d5p+305, chars_format::scientific, 92,\r\n        \"1.12551007727079359585097814946865173194633864244482778621517929765203808143927747684958470144e+92\"},\r\n    {0x1.54131d0e410eap+306, chars_format::scientific, 92,\r\n        \"1.73186080336662674773428302451694949383861654865608072294885374856902390005170129581872513024e+92\"},\r\n    {0x1.e30ce3214662bp+307, chars_format::scientific, 92,\r\n        \"4.91995461222250678150766955487414849320177453519696863021951432129138251603934668204877545472e+92\"},\r\n    {0x1.53b14d0307376p+308, chars_format::scientific, 92,\r\n        \"6.91966009118651520979803296576329218495201852892814426466356352573178600739540460494424899584e+92\"},\r\n    {0x1.0db459c95ae0ap+309, chars_format::scientific, 93,\r\n        \"1.098795518726438366609401980967157225074875139569724076317122730302418377716044842181188386816e+93\"},\r\n    {0x1.1c3939899abbap+310, chars_format::scientific, 93,\r\n        \"2.315894257968477114139855258593793035500513640711965686941821174621775820808713339985182326784e+93\"},\r\n    {0x1.373d598ccbedep+311, chars_format::scientific, 92,\r\n        \"5.07205087659469518714361132934952967180404131875257868675409772338932035589521892535594647552e+93\"},\r\n    {0x1.3df92e8f7f25cp+312, chars_format::scientific, 94,\r\n        \"1.0363570999985610218238902711693729605343613482930794977520814186252504820113148082355622117376e+94\"},\r\n    {0x1.e43040df434b2p+313, chars_format::scientific, 94,\r\n        \"3.1561899942152433381203488205922856539908726361744071551624952459304620181234055813806189182976e+94\"},\r\n    {0x1.bd56a038510a5p+314, chars_format::scientific, 94,\r\n        \"5.8058899603986402390979930533204289636439533662431550984437804920565671771960313337224984788992e+94\"},\r\n    {0x1.47a680f7df241p+315, chars_format::scientific, 94,\r\n        \"8.5431764922746352414815315662378944345996354389236714634151510172388323479866864189920524632064e+94\"},\r\n    {0x1.0a7083cf6add8p+316, chars_format::scientific, 95,\r\n        \"1.38943198710420748341660043617043022583822760533446236412979829417047860471831997112096984662016e+95\"},\r\n    {0x1.ca2d6c8c53bd5p+317, chars_format::scientific, 95,\r\n        \"4.77861849016998188114122579439270994768860615811890514883370859774317648442079613611698244550656e+95\"},\r\n    {0x1.e92db2529dbcfp+318, chars_format::scientific, 96,\r\n        \"1.020389588899609153532580957412143752366703719293632571694846387812362664420354081750298547716096e+96\"},\r\n    {0x1.7e9337e01fb65p+319, chars_format::scientific, 96,\r\n        \"1.596045688776375776841703068858618647181748707273854812785319263912136577406031736557627640905728e+96\"},\r\n    {0x1.856a9ca60259dp+320, chars_format::scientific, 96,\r\n        \"3.249173807353552076769227343856334408112864749547363816303721235276306516121646129315832634802176e+96\"},\r\n    {0x1.2954147067244p+321, chars_format::scientific, 96,\r\n        \"4.961638176380709527864130701814524798785240769392200382075051902521140868022699235320535724326912e+96\"},\r\n    {0x1.8a9948a3b5773p+322, chars_format::scientific, 96,\r\n        \"1.316965383848080426178721677102139575139428518210160435009232507801986304249723290592830277287936e+97\"},\r\n    {0x1.9d7f682a48e95p+323, chars_format::scientific, 97,\r\n        \"2.7600802833290057294863365648278498083682974322674559612258381363079661754043107711541518184480768e+97\"},\r\n    {0x1.1394946666649p+324, chars_format::scientific, 97,\r\n        \"3.6789758695100667984355585133798803034265640286914369787158051732884080762893646681521731009511424e+97\"},\r\n    {0x1.5cf3dcf0c210ap+325, chars_format::scientific, 97,\r\n        \"9.3169776057927388397860971692076748096813463829441115661384293210348344104809158613064035568975872e+97\"},\r\n    {0x1.edad497808d6ap+326, chars_format::scientific, 98,\r\n        \"2.63621865809578202632007715175239364465008642226141794355213814208815258090680462442156516792336384e+98\"},\r\n    {0x1.0da0103363c19p+327, chars_format::scientific, 98,\r\n        \"2.87958016292024262706195266242702522208665557458094458094772254523203474127145608787359761973641216e+98\"},\r\n    {0x1.e0e09ee6fbc77p+328, chars_format::scientific, 99,\r\n        \"1.027147944933023542626819355716472887371271886832370736047056582372410954517572846778976767599181824e+\"\r\n        \"99\"},\r\n    {0x1.9678e5f1a7d71p+329, chars_format::scientific, 99,\r\n        \"1.736438949946239757715573812462668203854228021142457473943958788246613058128755016444052964993138688e+\"\r\n        \"99\"},\r\n    {0x1.4b5b869a8b73ap+330, chars_format::scientific, 99,\r\n        \"2.831101490449813330351300092716022415336638150557587101281369589000119033315970171347397084924870656e+\"\r\n        \"99\"},\r\n    {0x1.fe2c3d2523805p+331, chars_format::scientific, 98,\r\n        \"8.71778003173501782520294586670274195486325481663656287823621692798053380434188606701697032360296448e+99\"},\r\n    {0x1.7a8e2bf190c3ep+332, chars_format::scientific, 100,\r\n        \"1.2937429393963081102936715388735517174575449745661779868560549590564554071876819476341646368012500992e+\"\r\n        \"100\"},\r\n    {0x1.c20e9fb7c28cfp+333, chars_format::scientific, 99,\r\n        \"3.076211787425003964373361588531553092466447952323893670684982577431400448345840350416908836231184384e+\"\r\n        \"100\"},\r\n    {0x1.bc64bd3fbb063p+334, chars_format::scientific, 100,\r\n        \"6.0750002047707119351020146056748996020726847090111922770368870774035039300942105887039623283718750208e+\"\r\n        \"100\"},\r\n    {0x1.6fa79bcec5d71p+335, chars_format::scientific, 101,\r\n        \"1.00519131923249665159539189045738250625445899193224853577560494867813212309547435281219657555073040384e+\"\r\n        \"101\"},\r\n    {0x1.255820e7b40dbp+336, chars_format::scientific, 101,\r\n        \"1.60404356999704584039118751697581736942407721317265568405145483828932537524402503992838476799827509248e+\"\r\n        \"101\"},\r\n    {0x1.24e8b96eea468p+337, chars_format::scientific, 101,\r\n        \"3.20332798201769959258478598390469858187503168380540831739211163523937048679598283011990104943469002752e+\"\r\n        \"101\"},\r\n    {0x1.296421957b8fcp+338, chars_format::scientific, 101,\r\n        \"6.50468980931338189749732798197360744414144439025939112265821291401038872632313877281859844571396046848e+\"\r\n        \"101\"},\r\n    {0x1.2b239b9bcb1b4p+339, chars_format::scientific, 102,\r\n        \"1.308584396599165566045730161590653878587049789341429936525191989129126795868599529420259141598822006784e+\"\r\n        \"102\"},\r\n    {0x1.ea18f74afcc08p+340, chars_format::scientific, 102,\r\n        \"4.287864653000838387576078081500217988595704090069841900641074208176801061178027675635595638576924065792e+\"\r\n        \"102\"},\r\n    {0x1.771193f9d6396p+341, chars_format::scientific, 101,\r\n        \"6.56295366062876882918926416107436715831157240075745311354357615353582042989302783876335181380573986816e+\"\r\n        \"102\"},\r\n    {0x1.5da5e2bf67261p+342, chars_format::scientific, 103,\r\n        \"1.\"\r\n        \"2236285152807307624643628388698918410797745423679381645265829552143290625157094290629079953916645343232e+\"\r\n        \"103\"},\r\n    {0x1.58fcd12ad7c3ep+343, chars_format::scientific, 103,\r\n        \"2.\"\r\n        \"4146377765621171182079586051573746443023029345082834585424128063094779334007517592308658607782004523008e+\"\r\n        \"103\"},\r\n    {0x1.b981dd551031dp+344, chars_format::scientific, 103,\r\n        \"6.\"\r\n        \"1803976055027187805645727187356890583048090549637147591363651473300874743076219960394574930078255284224e+\"\r\n        \"103\"},\r\n    {0x1.3fc3743a41034p+345, chars_format::scientific, 102,\r\n        \"8.952357506110560823804694357950163920534386086340839327084956631888740764686521452344790633972229996544e+\"\r\n        \"103\"},\r\n    {0x1.dd8d36aaec71ap+346, chars_format::scientific, 104,\r\n        \"2.\"\r\n        \"67398429934638135811565547800662171127722207675507363429204836809480442600041268010451262282407276969984e+\"\r\n        \"104\"},\r\n    {0x1.b602d12c2da7dp+347, chars_format::scientific, 104,\r\n        \"4.\"\r\n        \"90516421859048735586262432552927537804652667466774102274094051591440656755245550064055546651491847634944e+\"\r\n        \"104\"},\r\n    {0x1.fc12bf0bef890p+348, chars_format::scientific, 105,\r\n        \"1.\"\r\n        \"137954340248294860423380000818100997225882123662443049443669733096271165751582178114456678003518298128384e\"\r\n        \"+105\"},\r\n    {0x1.3b58efef7ec92p+349, chars_format::scientific, 104,\r\n        \"1.\"\r\n        \"41259541205595997693021666042884440773661567606819789980115193551404322394471748056362736136713555410944e+\"\r\n        \"105\"},\r\n    {0x1.5b4c0eded4f79p+350, chars_format::scientific, 105,\r\n        \"3.\"\r\n        \"111427431860026306405776387343100771890312921613335110339967675955518358836576017275894982577915909111808e\"\r\n        \"+105\"},\r\n    {0x1.e85ac6ef41497p+351, chars_format::scientific, 104,\r\n        \"8.\"\r\n        \"75031714552777887225807383376825846159238826560043847494035938723501665994908088640458130401929788915712e+\"\r\n        \"105\"},\r\n    {0x1.3f23aec99600fp+352, chars_format::scientific, 106,\r\n        \"1.\"\r\n        \"1436652181690534377916969838950952681644685698247142823509585599288898244633450308347520694943066435354624\"\r\n        \"e+106\"},\r\n    {0x1.dbfc913a56c60p+353, chars_format::scientific, 106,\r\n        \"3.\"\r\n        \"4114830865381290718001185426163995046141306436854142946803189625447986280993214823051741417052475697922048\"\r\n        \"e+106\"},\r\n    {0x1.1c2ebe7ec1836p+354, chars_format::scientific, 106,\r\n        \"4.\"\r\n        \"0735774158992452259605808606588504989866811990087038965595192924870048908044819867508613381642465662992384\"\r\n        \"e+106\"},\r\n    {0x1.938cd43ae03ccp+355, chars_format::scientific, 107,\r\n        \"1.\"\r\n        \"1569270331282534059969068327328876565308650356045145204600968251326236704641136451976395157408107677823795\"\r\n        \"2e+107\"},\r\n    {0x1.3b62009235fd5p+356, chars_format::scientific, 106,\r\n        \"1.\"\r\n        \"8083251599082482702871408072496160530674776660225822272659505156433465172981994959191303658607609326338048\"\r\n        \"e+107\"},\r\n    {0x1.4aa1b1e151343p+357, chars_format::scientific, 107,\r\n        \"3.\"\r\n        \"7915158199315730208700932089897195490537797203507832684798974061156166230255562088474361040176159786847436\"\r\n        \"8e+107\"},\r\n    {0x1.9e1c89c676ae4p+358, chars_format::scientific, 107,\r\n        \"9.\"\r\n        \"4976410001520505339336923527708275328860082974903541021837498139408575557376218156577936301953315195007795\"\r\n        \"2e+107\"},\r\n    {0x1.3c53f9e9b8734p+359, chars_format::scientific, 108,\r\n        \"1.\"\r\n        \"4509958077289753006583745539523455423321886826191606256195412037965739791079509759759293075504939731643269\"\r\n        \"12e+108\"},\r\n    {0x1.e2406d2cc3bf2p+360, chars_format::scientific, 108,\r\n        \"4.\"\r\n        \"4241741129837741663461680635414788924903961539225781403536940590382123291201216260256233875042401766625771\"\r\n        \"52e+108\"},\r\n    {0x1.965c4e0d723edp+361, chars_format::scientific, 108,\r\n        \"7.\"\r\n        \"4558991654731428914104079934452871426783695817576025114432418056082590624526774397193747962910439748728258\"\r\n        \"56e+108\"},\r\n    {0x1.f33c9e28b3fdep+362, chars_format::scientific, 109,\r\n        \"1.\"\r\n        \"8319982128819878475874631798176252605838592272956747638693247379538573339418939590416398806892687983611215\"\r\n        \"872e+109\"},\r\n    {0x1.9f22e896506fdp+363, chars_format::scientific, 107,\r\n        \"3.\"\r\n        \"0467669457405912680374116492410644952689237372714665865235539240041221305708088530307721560995413077105049\"\r\n        \"6e+109\"},\r\n    {0x1.b237a63060f12p+364, chars_format::scientific, 109,\r\n        \"6.\"\r\n        \"3736125384602496542925846716945019597567502625082164758543137289627204851036875242571151015244816059499282\"\r\n        \"432e+109\"},\r\n    {0x1.1dc76d7407d6dp+365, chars_format::scientific, 109,\r\n        \"8.\"\r\n        \"3895522918267103904361494200392714874087254625614035884417862680704246630517746609334588660429723489456357\"\r\n        \"376e+109\"},\r\n    {0x1.e7fd5979d3140p+366, chars_format::scientific, 110,\r\n        \"2.\"\r\n        \"8651611621506035093444741868330375337353333541754848851992800934603776249499947751100608389065176163402802\"\r\n        \"7904e+110\"},\r\n    {0x1.ff1435c531fe7p+367, chars_format::scientific, 110,\r\n        \"6.\"\r\n        \"0014533329722189329734118423159496255075495318058115363305083019617613945172917917423988971723427568413363\"\r\n        \"4048e+110\"},\r\n    {0x1.5982e576be2d3p+368, chars_format::scientific, 109,\r\n        \"8.\"\r\n        \"1144803338413104318522071061957326245737083351442942911782670679984495024861321317439248085744036645749915\"\r\n        \"648e+110\"},\r\n    {0x1.e0c0dbb472726p+369, chars_format::scientific, 110,\r\n        \"2.\"\r\n        \"2581394399876124280153365057814815764302068078753638901090175766989876139196030042285098363557295576667337\"\r\n        \"5232e+111\"},\r\n    {0x1.4debd3de5d8eep+370, chars_format::scientific, 110,\r\n        \"3.\"\r\n        \"1369126450743351223644868042070675972090081159686147607453289681648331706776244444631548245507008496724973\"\r\n        \"9776e+111\"},\r\n    {0x1.d1c493d286bdap+371, chars_format::scientific, 111,\r\n        \"8.\"\r\n        \"7510056100378395690784980624038829114601832136779682652828503892083478742480986973358649610777828405911675\"\r\n        \"20768e+111\"},\r\n    {0x1.cd72d6d8a7970p+372, chars_format::scientific, 112,\r\n        \"1.\"\r\n        \"7339706643869121258726938974735603064835059619375884365102866734218900584708555459322587759993837647617461\"\r\n        \"321728e+112\"},\r\n    {0x1.01627039cb9a4p+373, chars_format::scientific, 110,\r\n        \"1.\"\r\n        \"9343312542187018384535981752172379437374967713524355748898830982683829822839502209431730310975458370694991\"\r\n        \"0528e+112\"},\r\n    {0x1.a01e0e84d9fcdp+374, chars_format::scientific, 112,\r\n        \"6.\"\r\n        \"2545245092335882126108305965771766597669444535111067555804870482886040056811988312399155986378436981153821\"\r\n        \"884416e+112\"},\r\n    {0x1.37e20c15e4800p+375, chars_format::scientific, 112,\r\n        \"9.\"\r\n        \"3756223883151274037776724128790650140133888300427596011365023775012865413735920483562596969561373256776918\"\r\n        \"499328e+112\"},\r\n    {0x1.92565f524e5acp+376, chars_format::scientific, 112,\r\n        \"2.\"\r\n        \"4189606341952683163954956898091435430652584365332337819227907179820798920177370025314491683238577112989546\"\r\n        \"053632e+113\"},\r\n    {0x1.b27b47d7ee854p+377, chars_format::scientific, 113,\r\n        \"5.\"\r\n        \"2244400989180613708016642369319182679190202045827186553245087278546335559625166994733343152362652931456245\"\r\n        \"5371776e+113\"},\r\n    {0x1.1a868033c3960p+378, chars_format::scientific, 111,\r\n        \"6.\"\r\n        \"7944746787200907808603242384755872832913064104675448489356275041550002402856992454666698062568933721142691\"\r\n        \"10272e+113\"},\r\n    {0x1.a98ac07f11c9fp+379, chars_format::scientific, 113,\r\n        \"2.\"\r\n        \"0467783827424351314753295564603510293706201890375250515969705111536696782068891131403276581805836580797857\"\r\n        \"7133568e+114\"},\r\n    {0x1.b41b1012636e1p+380, chars_format::scientific, 114,\r\n        \"4.\"\r\n        \"1951757921839292213759825458518138580350363545315758818513021797966832710089891213192425152837196142758511\"\r\n        \"89747712e+114\"},\r\n    {0x1.999b23d856f1ep+381, chars_format::scientific, 114,\r\n        \"7.\"\r\n        \"8805169769477226984395501914952674333569036724903321387668001616095460959550982116058583249541808618961273\"\r\n        \"74426112e+114\"},\r\n    {0x1.305a3f8fdcff6p+382, chars_format::scientific, 115,\r\n        \"1.\"\r\n        \"1711035514327281549569479949647964640917578793955961246965709191416705947065939295227543589878996722369308\"\r\n        \"020178944e+115\"},\r\n    {0x1.2fd99084e7c85p+383, chars_format::scientific, 115,\r\n        \"2.\"\r\n        \"3383386959238677954878784167726164592108668182912101860698293836127081479738719391011173946982487947813847\"\r\n        \"224549376e+115\"},\r\n    {0x1.5dec261193077p+384, chars_format::scientific, 115,\r\n        \"5.\"\r\n        \"3857995214454247079845670802965140023858333719204363366340740225260425158789455385343584022277219076052133\"\r\n        \"007589376e+115\"},\r\n    {0x1.a60cf45de0593p+385, chars_format::scientific, 116,\r\n        \"1.\"\r\n        \"2991906643558943497776765144933401250407988823770730810837676141094927055248128228359441124695444705145614\"\r\n        \"5233281024e+116\"},\r\n    {0x1.206f40c937d33p+386, chars_format::scientific, 116,\r\n        \"1.\"\r\n        \"7757658123869845357629737099847397447653687701530379687300816584667928918967996853131360707771162482916206\"\r\n        \"3377989632e+116\"},\r\n    {0x1.f728c980c890fp+387, chars_format::scientific, 116,\r\n        \"6.\"\r\n        \"1954646341609976085673971120649779342699001513849840231358690997934347214984119446504411488896637852182451\"\r\n        \"6257087488e+116\"},\r\n    {0x1.51e04772f1442p+388, chars_format::scientific, 116,\r\n        \"8.\"\r\n        \"3206223754149984905262009476365485915766118890208584807835460259921682480854584795055699327086777320143406\"\r\n        \"8744404992e+116\"},\r\n    {0x1.0912df6441979p+389, chars_format::scientific, 117,\r\n        \"1.\"\r\n        \"3055545505825232086506744135488604281383304022944946031545563740443859815673730758680222956937027900408944\"\r\n        \"93689905152e+117\"},\r\n    {0x1.857ce22ca5331p+390, chars_format::scientific, 116,\r\n        \"3.\"\r\n        \"8366504348199781380991738809085235392423352317101826308761234478383352326472236353090210178395092413399713\"\r\n        \"5095922688e+117\"},\r\n    {0x1.bc467f73b801fp+391, chars_format::scientific, 117,\r\n        \"8.\"\r\n        \"7526706824277039804869639245253352271037282619434215254665000654758996864632114043366545497170167003892468\"\r\n        \"19052290048e+117\"},\r\n    {0x1.5bfa6323e5cacp+392, chars_format::scientific, 118,\r\n        \"1.\"\r\n        \"3711034277595369451570589073470256687658486148188112798860899459323262624831806105873306826350434346072337\"\r\n        \"605128617984e+118\"},\r\n    {0x1.82a929b1cf7e9p+393, chars_format::scientific, 117,\r\n        \"3.\"\r\n        \"0470421880719791602243842186576186831668322594660054521032291978571860787539774239209841117297370413955572\"\r\n        \"37497266176e+118\"},\r\n    {0x1.e182eb353c038p+394, chars_format::scientific, 117,\r\n        \"7.\"\r\n        \"5890060900329810907778135069349980508477554859344923632527216513475121169687165679512398393358954773663216\"\r\n        \"86314483712e+118\"},\r\n    {0x1.4c41f45ceb5f1p+395, chars_format::scientific, 119,\r\n        \"1.\"\r\n        \"0473293912342298987927246042991799310231168245309594826043341824105346363795733309621096687761084862433196\"\r\n        \"1409430618112e+119\"},\r\n    {0x1.4ce2d62a959bap+396, chars_format::scientific, 119,\r\n        \"2.\"\r\n        \"0986207045386187035799822440645799479070868059612701038836836380807719120666384981860675905079915949244389\"\r\n        \"9741222207488e+119\"},\r\n    {0x1.00a9e2d3e2ec1p+397, chars_format::scientific, 118,\r\n        \"3.\"\r\n        \"2361796613868836525379806150950870022180432502860960693384846782308777259801858316206937444651533852177335\"\r\n        \"846776602624e+119\"},\r\n    {0x1.3c23db7779f4dp+398, chars_format::scientific, 119,\r\n        \"7.\"\r\n        \"9721938562445268040649779405182935693865706103206722247447720994088701755123003496336677691442819314314554\"\r\n        \"4747212341248e+119\"},\r\n    {0x1.6ad531cf6c4f6p+399, chars_format::scientific, 120,\r\n        \"1.\"\r\n        \"8299315060253445306822233068116074307732330134667370038475622918226677729850029074390245769729323917420193\"\r\n        \"04962257846272e+120\"},\r\n    {0x1.c98a8c0cc02abp+400, chars_format::scientific, 120,\r\n        \"4.\"\r\n        \"6151785414218586084275351425717484666160584024314001571165866826527327623500176415071801918580197955917500\"\r\n        \"03286534520832e+120\"},\r\n    {0x1.2599b4edfd3a2p+401, chars_format::scientific, 120,\r\n        \"5.\"\r\n        \"9230440706966047717326163349200388918611422161526449532524396598065679686912294908338576147662067326812164\"\r\n        \"89965037289472e+120\"},\r\n    {0x1.516e7c40f57a3p+402, chars_format::scientific, 120,\r\n        \"1.\"\r\n        \"3614572894634939353142377534464507149983196785530379090825385582763759726965237412732356418889923433893291\"\r\n        \"96566586589184e+121\"},\r\n    {0x1.554ae9a6c9824p+403, chars_format::scientific, 121,\r\n        \"2.\"\r\n        \"7540713949104843243302627542794727706292756358581474088345811708780298515935733700113910390877013926695327\"\r\n        \"834062687567872e+121\"},\r\n    {0x1.9f90524b6d626p+404, chars_format::scientific, 121,\r\n        \"6.\"\r\n        \"7068091096020020505776863609624159835496159279383022951686130797028480366726992103594952376070018327492179\"\r\n        \"668721922473984e+121\"},\r\n    {0x1.f8c257fe070b8p+405, chars_format::scientific, 121,\r\n        \"1.\"\r\n        \"6292678335806154630688166360914362590126745415634992847446511649792612396156901611908157238175191592424439\"\r\n        \"211776934936576e+122\"},\r\n    {0x1.5063a56cc31c9p+406, chars_format::scientific, 121,\r\n        \"2.\"\r\n        \"1716027038832320074453150446374026503717287483078072472301776792170195683193847483635855535294750821428190\"\r\n        \"165824465534976e+122\"},\r\n    {0x1.bb50c0252104cp+407, chars_format::scientific, 122,\r\n        \"5.\"\r\n        \"7237560998963261164051475899051612535051551295856297249862290579139114947796469709121788745828899583108208\"\r\n        \"8581314451079168e+122\"},\r\n    {0x1.0b03b69a2e2b0p+408, chars_format::scientific, 121,\r\n        \"6.\"\r\n        \"8949817308561794549773992006993513829524212638254346703503829281462167149828570295031646850093094407936155\"\r\n        \"968718596210688e+122\"},\r\n    {0x1.9d8bbd0e57606p+409, chars_format::scientific, 123,\r\n        \"2.\"\r\n        \"1357574596497743245860643997782974152312583530928288914224621653851840906558437370562946768094258527345206\"\r\n        \"20544272774463488e+123\"},\r\n    {0x1.1eafceb2b72f1p+410, chars_format::scientific, 123,\r\n        \"2.\"\r\n        \"9611872773222930848265894941833298594051480342864701926761084411127391592246266694592950694937066266564299\"\r\n        \"36634490345488384e+123\"},\r\n    {0x1.b82d31fcfdc41p+411, chars_format::scientific, 123,\r\n        \"9.\"\r\n        \"0931666168547726710852599333169027626752891656307580547988405863720028970181687484382687622774816982835218\"\r\n        \"76304509982998528e+123\"},\r\n    {0x1.29779ec1c6410p+412, chars_format::scientific, 122,\r\n        \"1.\"\r\n        \"2290156989602754537188673668770576138329717434120236431962501631025557907262224101324928918849724892961105\"\r\n        \"9352012297601024e+124\"},\r\n    {0x1.8e05bee28280bp+413, chars_format::scientific, 124,\r\n        \"3.\"\r\n        \"2889389033303796449610654007165182953567964772463647692693215012898721719963971688537999284434771305893464\"\r\n        \"950312791814701056e+124\"},\r\n    {0x1.cd14abd1e732dp+414, chars_format::scientific, 123,\r\n        \"7.\"\r\n        \"6200044935673398642622195088614903967300342277550390461020413082744224194474257008465422235137871949221256\"\r\n        \"83888888047730688e+124\"},\r\n    {0x1.f2ef51feb4de6p+415, chars_format::scientific, 123,\r\n        \"1.\"\r\n        \"6491192862717743459504613539680569605439580112970832661186872894477331119766635885443857313224050612361945\"\r\n        \"47001764989632512e+125\"},\r\n    {0x1.413ce3f0889cfp+416, chars_format::scientific, 124,\r\n        \"2.\"\r\n        \"1235620018124725762823525254067453590318834283041039191040578016476648938361158060769801016374834626942712\"\r\n        \"350029888538804224e+125\"},\r\n    {0x1.80779e1506fc3p+417, chars_format::scientific, 125,\r\n        \"5.\"\r\n        \"0830874862362334487451129733251317057747109313328626544800449217083767630732412027666136584929422598750310\"\r\n        \"3152602026665312256e+125\"},\r\n    {0x1.f4593e67fd929p+418, chars_format::scientific, 126,\r\n        \"1.\"\r\n        \"3230337364814056119849144104483197847048392528104234116224062666811174319203483085958637551302540391438025\"\r\n        \"71352312329397075968e+126\"},\r\n    {0x1.5e1972e7208f0p+419, chars_format::scientific, 124,\r\n        \"1.\"\r\n        \"8514824347085014041034982349366075446352413910270634757929615930906113455566549359084851716055947436562390\"\r\n        \"414624100043456512e+126\"},\r\n    {0x1.96497bf3d6e91p+420, chars_format::scientific, 126,\r\n        \"4.\"\r\n        \"2972556458892421007071921590288958039713385593786669880815207200398101594477491672457613092647411327609206\"\r\n        \"31315371878690848768e+126\"},\r\n    {0x1.b393f1a1dd519p+421, chars_format::scientific, 125,\r\n        \"9.\"\r\n        \"2141239833535442307495264704767013470628707238636280750414584559225026149348200036806199690531376531707581\"\r\n        \"0956198895278882816e+126\"},\r\n    {0x1.7a530210739cfp+422, chars_format::scientific, 126,\r\n        \"1.\"\r\n        \"6005984240937531553977123570777698478974555023476350130842071714976647285213117935899888129628035947633907\"\r\n        \"59168408062720475136e+127\"},\r\n    {0x1.e3afa67c26cadp+423, chars_format::scientific, 127,\r\n        \"4.\"\r\n        \"0927181564650245664684010226800985508274931575889090496315744789588249190795251849188275548896093477913352\"\r\n        \"511764494291847610368e+127\"},\r\n    {0x1.9c6025d074da1p+424, chars_format::scientific, 127,\r\n        \"6.\"\r\n        \"9786454159176674864700637406796740953505985859818133214098100802723756933031499786749130394936305869987683\"\r\n        \"275467906968807538688e+127\"},\r\n    {0x1.065f9b19a0340p+425, chars_format::scientific, 127,\r\n        \"8.\"\r\n        \"8803093525901790594982236846498580271914853355874023243258275639983018618600818017364376548834290227200203\"\r\n        \"210514836291613360128e+127\"},\r\n    {0x1.28065949e7553p+426, chars_format::scientific, 128,\r\n        \"2.\"\r\n        \"0038549597024574338594732478616631677568333105265167477289796063542021264807661101295192553137929339912243\"\r\n        \"3770669620377086328832e+128\"},\r\n    {0x1.dbade2e06f07dp+427, chars_format::scientific, 128,\r\n        \"6.\"\r\n        \"4399483471848686999328022709529943105219847426826425963616573474166235421197828954939077104844009424956504\"\r\n        \"2561286390284027953152e+128\"},\r\n    {0x1.67ec7d8c1da11p+428, chars_format::scientific, 128,\r\n        \"9.\"\r\n        \"7456033854245786907306605750937459421920460271523533041156858959899772921310171261122772021520178944401570\"\r\n        \"3751438749985539096576e+128\"},\r\n    {0x1.36a68148c8217p+429, chars_format::scientific, 129,\r\n        \"1.\"\r\n        \"6822870661885090958385346032176857964800605455135588888859748256350036651024576361188290442850767472967245\"\r\n        \"64008491547307408359424e+129\"},\r\n    {0x1.dc66b421571e7p+430, chars_format::scientific, 128,\r\n        \"5.\"\r\n        \"1597778549120001229289458271163044652451269262060879726520252526449648716471874100678026909960298060927595\"\r\n        \"8445716698126369161216e+129\"},\r\n    {0x1.e15c9d78ea3edp+431, chars_format::scientific, 130,\r\n        \"1.\"\r\n        \"0427009479036797635591813366203348981474741136468047501540682552044326004263090661138730742715935642137479\"\r\n        \"038773324522255424684032e+130\"},\r\n    {0x1.ae724dbf30ac9p+432, chars_format::scientific, 130,\r\n        \"1.\"\r\n        \"8648218159777694177481503600699806145043094305377350786229177843605334855672050247798038788160317453858732\"\r\n        \"791008998841995499667456e+130\"},\r\n    {0x1.430c116f28682p+433, chars_format::scientific, 130,\r\n        \"2.\"\r\n        \"7990719302881792634700208092144765627066028833203628809049595452520597537685450205232172055768615049488552\"\r\n        \"388925979796926720114688e+130\"},\r\n    {0x1.b320abff3a613p+434, chars_format::scientific, 130,\r\n        \"7.\"\r\n        \"5404073589427982521492145814481406113541244937512463581995784007627029840880320602509298790920487878388844\"\r\n        \"654553206928916206321664e+130\"},\r\n    {0x1.18baac522a7acp+435, chars_format::scientific, 130,\r\n        \"9.\"\r\n        \"7296165332704723045704171191722918884493939736170883951246761040671035725057112924877995355372000233079961\"\r\n        \"207242515380010313842688e+130\"},\r\n    {0x1.4fbbb115a5ca8p+436, chars_format::scientific, 130,\r\n        \"2.\"\r\n        \"3271929702892176037363768624801721835810256036604734587782097015027264419314374804953369595074041437169634\"\r\n        \"435618542541666787524608e+131\"},\r\n    {0x1.5d9b4105ffe61p+437, chars_format::scientific, 130,\r\n        \"4.\"\r\n        \"8467161954318765570206772089452679519024878853690657983280010268378541784588648092071300919466243785467023\"\r\n        \"587557836850971723956224e+131\"},\r\n    {0x1.382005bbee766p+438, chars_format::scientific, 131,\r\n        \"8.\"\r\n        \"6541977087367826921470113849963863869585467375989900445327495698166495057215393260668100684145346758054415\"\r\n        \"8666736089780468257390592e+131\"},\r\n    {0x1.c059a164fbd82p+439, chars_format::scientific, 132,\r\n        \"2.\"\r\n        \"4862535742483091390191909586457946706024424055353263778438466175657794451813458472398193755926372662623451\"\r\n        \"83038540336851637686501376e+132\"},\r\n    {0x1.979cf64e101fdp+440, chars_format::scientific, 132,\r\n        \"4.\"\r\n        \"5207063266727990659368929644998212413214149738920414291494058222664431815342298802512144646301868226085980\"\r\n        \"50594119641896654588608512e+132\"},\r\n    {0x1.83251647fd9bfp+441, chars_format::scientific, 131,\r\n        \"8.\"\r\n        \"5873988136460143134983733826396094677529073230527739927893738680563947508807847000923691955914241843467770\"\r\n        \"2372087294487581239017472e+132\"},\r\n    {0x1.955ba92aaabeep+442, chars_format::scientific, 133,\r\n        \"1.\"\r\n        \"7982783689310961422227501310791755104585871964598378773168639232069183211020640286592664999710754396217634\"\r\n        \"910130253608134690434187264e+133\"},\r\n    {0x1.8bb4dd0dfbad4p+443, chars_format::scientific, 133,\r\n        \"3.\"\r\n        \"5109229274973699347864490677759997223881087663817023913545612763146947306489437899751559803448131425726260\"\r\n        \"143262853014497255579713536e+133\"},\r\n    {0x1.f2ffa36c6b9eep+444, chars_format::scientific, 133,\r\n        \"8.\"\r\n        \"8547728683465430818848616424135997758540156493969637657019447732001527537631411528969363199598954727491766\"\r\n        \"342717137006267941580177408e+133\"},\r\n    {0x1.632ab9a3bbcbap+445, chars_format::scientific, 132,\r\n        \"1.\"\r\n        \"2604934227155402813818790481090371090896480259008670745003764210449531315889057203384400641053527209665997\"\r\n        \"31195389894188478482087936e+134\"},\r\n    {0x1.7d9bd6980a8cfp+446, chars_format::scientific, 134,\r\n        \"2.\"\r\n        \"7086719929942504183980874941517960977139696239895794732813024870408238539671003001155194987629524329723486\"\r\n        \"9643886677394157405489594368e+134\"},\r\n    {0x1.a0ffc9a223266p+447, chars_format::scientific, 134,\r\n        \"5.\"\r\n        \"9197489271133585844975485777857856224444082386611780564812362396421052336042330739080175933534182879047767\"\r\n        \"6111442443375110521989627904e+134\"},\r\n    {0x1.2f2d555f5fce4p+448, chars_format::scientific, 134,\r\n        \"8.\"\r\n        \"6078455047134678604434818618455571588162294805214457729391162123838507816170041687711921610823738459963116\"\r\n        \"4804764816415732192769998848e+134\"},\r\n    {0x1.a65f9697c0d52p+449, chars_format::scientific, 134,\r\n        \"2.\"\r\n        \"3984166963813072130304254866815544719778779058112414594148507465903882624211291997549855045437187950977197\"\r\n        \"1753138721689172308884717568e+135\"},\r\n    {0x1.1e2be5c1a5196p+450, chars_format::scientific, 135,\r\n        \"3.\"\r\n        \"2500079608629177786469594361062615885964978686442183195525824456070734494611472398735816156518917726424812\"\r\n        \"39481297672424409886179196928e+135\"},\r\n    {0x1.47b6e3f5377a9p+451, chars_format::scientific, 135,\r\n        \"7.\"\r\n        \"4436102486817026391330384910904960377209366279201460342224886867177126680907304411140987558975509995313169\"\r\n        \"63156312332013839122343919616e+135\"},\r\n    {0x1.aad9cc8c1c972p+452, chars_format::scientific, 136,\r\n        \"1.\"\r\n        \"9390729656615215196506812000617451479776711512449142787848459303341260609191028331093673283435440617925958\"\r\n        \"437747265492354517993099624448e+136\"},\r\n    {0x1.8cc0ea5310fdep+453, chars_format::scientific, 136,\r\n        \"3.\"\r\n        \"6046982835224656412915754976920501824030544272349863266164621223344701329058249574603030560264745117993137\"\r\n        \"684398776063481336351546146816e+136\"},\r\n    {0x1.e8e380e2826ccp+454, chars_format::scientific, 136,\r\n        \"8.\"\r\n        \"8835807100315059364957572853053758885118262053119958231473714438599572821951098669770374248448262038769401\"\r\n        \"918432797048903756272554213376e+136\"},\r\n    {0x1.2033b9d066e11p+455, chars_format::scientific, 136,\r\n        \"1.\"\r\n        \"0473820665170048878755154408578719330325269921188949224604166784423321269440809970793883543719137433912200\"\r\n        \"960322988368687585762606055424e+137\"},\r\n    {0x1.7564b97a79d61p+456, chars_format::scientific, 137,\r\n        \"2.\"\r\n        \"7139682262053297241988392724437792044208285211247000447865789047411414826976478691092595194217736809420582\"\r\n        \"8453389512306293635710562861056e+137\"},\r\n    {0x1.2b82c2280c26fp+457, chars_format::scientific, 137,\r\n        \"4.\"\r\n        \"3539205936145104705820726228284843445060921065728394032721829835221039495244642053528782260776415870011292\"\r\n        \"0667363070863633573415250558976e+137\"},\r\n    {0x1.bf1f7396a6e57p+458, chars_format::scientific, 137,\r\n        \"1.\"\r\n        \"2999448293666169914859805985488601512306519687598179446463228767237657957150042169876476045654460534381097\"\r\n        \"3852347955449052461046878437376e+138\"},\r\n    {0x1.a657699d2c0dfp+459, chars_format::scientific, 138,\r\n        \"2.\"\r\n        \"4557929966471053199872649466981740356692231404103633543942219010330417450053674332463696723123550304578318\"\r\n        \"75446589644026555749761133051904e+138\"},\r\n    {0x1.288594faed777p+460, chars_format::scientific, 136,\r\n        \"3.\"\r\n        \"4483764818218847425999970317030640238793097206477624197384500971308224538523438179692769564897834190472272\"\r\n        \"984703422288615432778015571968e+138\"},\r\n    {0x1.2375adab19290p+461, chars_format::scientific, 138,\r\n        \"6.\"\r\n        \"7790138521807316420628038773287438668644664004594370167025452117781647057165800982402225795850370051610486\"\r\n        \"65824473078182953740522326327296e+138\"},\r\n    {0x1.83324c05e70f4p+462, chars_format::scientific, 139,\r\n        \"1.\"\r\n        \"8011480968834750196365369192967420715415862985071604121776057399720459471533740960032406448817837519216226\"\r\n        \"379536264641695755986389226749952e+139\"},\r\n    {0x1.97873666d985cp+463, chars_format::scientific, 138,\r\n        \"3.\"\r\n        \"7914529023902069557105004428400868367552071861042286022257178185224413635321720588745810122575048414255517\"\r\n        \"01851829776853108766540296093696e+139\"},\r\n    {0x1.5bfa9fa8f352fp+464, chars_format::scientific, 139,\r\n        \"6.\"\r\n        \"4748700546465721232888949688272095534998009840175105196292202572473650907793490793699624888993654341347901\"\r\n        \"931540117631355075040339017334784e+139\"},\r\n    {0x1.b42b6a79cf7afp+465, chars_format::scientific, 139,\r\n        \"1.\"\r\n        \"6231677484748647738284246889132703021787090536862881417070276086241812776564227608785040979834680452730627\"\r\n        \"673951299390073462133082170589184e+140\"},\r\n    {0x1.da02be394de37p+466, chars_format::scientific, 140,\r\n        \"3.\"\r\n        \"5279804769813379877739625265790221988342974868955307215219678257545606581258685003954570507986505945443644\"\r\n        \"9176466265315274091295259079213056e+140\"},\r\n    {0x1.3eeed2ed5a952p+467, chars_format::scientific, 140,\r\n        \"4.\"\r\n        \"7475258680916253745897531734514044938760808711217428348829658546005624616624979279156129711124921701243923\"\r\n        \"0326495036221766234765211123843072e+140\"},\r\n    {0x1.3666a3d10b839p+468, chars_format::scientific, 139,\r\n        \"9.\"\r\n        \"2410438112435489734379685774435069421261232157650793824990530192357729924647916137217180562449829723923226\"\r\n        \"838139416593417420331177274769408e+140\"},\r\n    {0x1.2570fb22b2de6p+469, chars_format::scientific, 141,\r\n        \"1.\"\r\n        \"7472268158903567970489376394874270060913393878056825078725374417255330239774644537653308699459602551618379\"\r\n        \"02768182371165254880871258817298432e+141\"},\r\n    {0x1.b07e20dfa1d42p+470, chars_format::scientific, 141,\r\n        \"5.\"\r\n        \"1503502855445633918124843079814372660247218165154922786481877126700784289698976045903050168159110788693854\"\r\n        \"75223702592482681568973998545436672e+141\"},\r\n    {0x1.c0fecaa34903bp+471, chars_format::scientific, 142,\r\n        \"1.\"\r\n        \"0693743613454128344229738507659554069041113104116305538551763636641133000749164190535494572802701842844775\"\r\n        \"713873914174897214881753809553457152e+142\"},\r\n    {0x1.6a93c2fdb14e2p+472, chars_format::scientific, 142,\r\n        \"1.\"\r\n        \"7271039275900878702320064613161114211734760062020379022350617158951989967269777650968393695346424676919360\"\r\n        \"350528737280818370651311134702829568e+142\"},\r\n    {0x1.ed356c6ec0f02p+473, chars_format::scientific, 142,\r\n        \"4.\"\r\n        \"6987106320234365309357865348526617076295430864840940367700909254686103875433346901774408206734975670041416\"\r\n        \"172724241468670572852355997846470656e+142\"},\r\n    {0x1.fa2a9a922005bp+474, chars_format::scientific, 142,\r\n        \"9.\"\r\n        \"6443133006154375629544673773217995571737351906051889965372169517032873570684626710445723256193599631347074\"\r\n        \"349343808996878649261861384554020864e+142\"},\r\n    {0x1.7779f5e06053dp+475, chars_format::scientific, 143,\r\n        \"1.\"\r\n        \"4308385405721830409588986842341221217630751607519642205768203476726949608471686240173850875709383849977420\"\r\n        \"4490512832595931739164387055612461056e+143\"},\r\n    {0x1.2ae00f64ca014p+476, chars_format::scientific, 143,\r\n        \"2.\"\r\n        \"2778645782254102124024170465292525325953086411923614498725917672177361290237337288215777392459244097224025\"\r\n        \"7516688035006692022253572705950367744e+143\"},\r\n    {0x1.14617f48912ccp+477, chars_format::scientific, 143,\r\n        \"4.\"\r\n        \"2128491843628015690123491447499183775579140689758554402383290954566150779370440635482704842123528539898814\"\r\n        \"6300675184394950248081186488630378496e+143\"},\r\n    {0x1.0e36f018afe63p+478, chars_format::scientific, 143,\r\n        \"8.\"\r\n        \"2377152265461927468904475031209979234555951818796497236476191970051849571112509654722312234611809959811641\"\r\n        \"4799396399785995085176935884420808704e+143\"},\r\n    {0x1.b52a83911a3c4p+479, chars_format::scientific, 143,\r\n        \"2.\"\r\n        \"6654737215359226174536865647606054602172499959987706988316732285249892439427281825776876900401158871819657\"\r\n        \"3169689339585153422638164295314046976e+144\"},\r\n    {0x1.ed98b659547bdp+480, chars_format::scientific, 144,\r\n        \"6.\"\r\n        \"0190791388121617864043227714242098900748708658128288053595523523236653831506983860037384561642314883951698\"\r\n        \"44387225601064643184790911958453846016e+144\"},\r\n    {0x1.fcce356c4ec85p+481, chars_format::scientific, 145,\r\n        \"1.\"\r\n        \"2409084690292541652527613045437775018048935473224778548554214581456588840011339733629203404858897924037517\"\r\n        \"041939851403445857567862463857852153856e+145\"},\r\n    {0x1.3dc01483d63ddp+482, chars_format::scientific, 145,\r\n        \"1.\"\r\n        \"5499009048061588814641526995523600939707388795282617174767697160344249266869043729431751617061601018589761\"\r\n        \"944702337982434466462060034234811154432e+145\"},\r\n    {0x1.4557a7b0057d8p+483, chars_format::scientific, 145,\r\n        \"3.\"\r\n        \"1738661663567816264285516822801972971728151651206469963506380696188890277837365396682106309758742282006353\"\r\n        \"922475242220366972514288404986230472704e+145\"},\r\n    {0x1.669d69cbaf0ddp+484, chars_format::scientific, 145,\r\n        \"6.\"\r\n        \"9969095646663514806564458838233472693358039320736641847439538782518050931122329603176958512021576452086116\"\r\n        \"368782676471010501175026121646448574464e+145\"},\r\n    {0x1.6a4308943f906p+485, chars_format::scientific, 146,\r\n        \"1.\"\r\n        \"4136130050003495275965580705190245360273003406456889860795577433714410287964689565247783341979195424013701\"\r\n        \"3541670491478732029287175906702745665536e+146\"},\r\n    {0x1.7e7001ab289dap+486, chars_format::scientific, 146,\r\n        \"2.\"\r\n        \"9846844767329699730804823460088397797510887741980731170544140686250237048357484822927489181913790614021254\"\r\n        \"7533066937938143958203611335491240067072e+146\"},\r\n    {0x1.44fa24aa8c90fp+487, chars_format::scientific, 146,\r\n        \"5.\"\r\n        \"0724842971646726557538500759842253464019052289835282388395679467419407983799647286830871888227794990888424\"\r\n        \"5889023882897106195080463734761662185472e+146\"},\r\n    {0x1.25d657eccb0e9p+488, chars_format::scientific, 146,\r\n        \"9.\"\r\n        \"1728610014857275568630794658652531231738100002919045253200249494512141469153567046655808833763172390263394\"\r\n        \"9642595917883820840553955755394812870656e+146\"},\r\n    {0x1.fdc48127436c0p+489, chars_format::scientific, 147,\r\n        \"3.\"\r\n        \"1827325058993567033331233752691212903377352608036310991356332821822901954914663377518977669960782647885876\"\r\n        \"42034976623676783849309720668272859283456e+147\"},\r\n    {0x1.50cc21e5e879dp+490, chars_format::scientific, 147,\r\n        \"4.\"\r\n        \"2055870839470368973611151678893166078089637115801651589474584679020395433716298683315313593307964143156245\"\r\n        \"28062235406626283210983955984299738529792e+147\"},\r\n    {0x1.5a4e10fb478ccp+491, chars_format::scientific, 147,\r\n        \"8.\"\r\n        \"6486157205772329602600102378606658784899216279777069711674137164731822935624882824299743209883343812966340\"\r\n        \"69075898792649120978628662820343688200192e+147\"},\r\n    {0x1.e6b342df1851fp+492, chars_format::scientific, 148,\r\n        \"2.\"\r\n        \"4309692254959332536450538679079560253529415066541042380383420527274189578274453585054569384583992487731455\"\r\n        \"483906898199659271966077737111144370274304e+148\"},\r\n    {0x1.bf189fba46a51p+493, chars_format::scientific, 148,\r\n        \"4.\"\r\n        \"4663099980821111700735062823707061081964579432094161222504349764876114111980602434939174729613231975280697\"\r\n        \"191542952742623676348156107248907356995584e+148\"},\r\n    {0x1.7744c67ce2733p+494, chars_format::scientific, 148,\r\n        \"7.\"\r\n        \"4975640039478889368046232138806074105698824731102334281006775249643928390949836346608458092165052666069303\"\r\n        \"519645320456702179748989546565091612164096e+148\"},\r\n    {0x1.dc39acc6db7a8p+495, chars_format::scientific, 149,\r\n        \"1.\"\r\n        \"9029191895593582513042254429613933892519819466440008181362475451661449874055230966283314835362517622544618\"\r\n        \"4345874717099016754240440378652340420345856e+149\"},\r\n    {0x1.db93ed9dfa8dcp+496, chars_format::scientific, 149,\r\n        \"3.\"\r\n        \"8006641833677102492887824906118725961379661738962189610447881646688988112543794681781941996783845042196323\"\r\n        \"6989721829537772787957124251662568730394624e+149\"},\r\n    {0x1.b0906aca51c5dp+497, chars_format::scientific, 147,\r\n        \"6.\"\r\n        \"9138249940821013776040341733524915351912661776644830548370675524262798977629271437574440357029271950983009\"\r\n        \"12889719993286829251194606517019647934464e+149\"},\r\n    {0x1.108f1f5365715p+498, chars_format::scientific, 149,\r\n        \"8.\"\r\n        \"7128154838017157392572522860918668800672134186008534463400197915073924087965859797620971620007008411202092\"\r\n        \"2177725097537079407027753889855794306875392e+149\"},\r\n    {0x1.73f5a2326daefp+499, chars_format::scientific, 150,\r\n        \"2.\"\r\n        \"3780639727460606718971338187316809987528213181384630599789933496032265252598793205389604654238668756538754\"\r\n        \"31703645955198350097511963193717040609230848e+150\"},\r\n    {0x1.5d60e9bc96714p+500, chars_format::scientific, 150,\r\n        \"4.\"\r\n        \"4673926496387289708030095900258305973038660116707814882439878055497811702692322213460750885548964045810631\"\r\n        \"90784109692968975073166801707596473568329728e+150\"},\r\n    {0x1.3b69dd2b0a7b8p+501, chars_format::scientific, 148,\r\n        \"8.\"\r\n        \"0661850781591161677122954721172068591732257201798966036585171037261748611696578597260945643403701202524424\"\r\n        \"416735637962153511596447310123657955639296e+150\"},\r\n    {0x1.70986ba3519c3p+502, chars_format::scientific, 150,\r\n        \"1.\"\r\n        \"8852448369964825428928236009439861167135645949955343442728306696583016816237354048060006184106295445822087\"\r\n        \"64698138596718695789572228160443206070173696e+151\"},\r\n    {0x1.5c9ead10d3adep+503, chars_format::scientific, 151,\r\n        \"3.\"\r\n        \"5661527237397952344670186371555605241594133611593918425171554010625322731432466488798805829069196773260339\"\r\n        \"528369728020651143141594374865566386412847104e+151\"},\r\n    {0x1.2199c7c3b4ea1p+504, chars_format::scientific, 151,\r\n        \"5.\"\r\n        \"9248514116816446405034179271903794942228235937785654591274434436685914444005512695452376722135010343543480\"\r\n        \"884465555148433997142511793829160779635490816e+151\"},\r\n    {0x1.7012b5d2cf305p+505, chars_format::scientific, 152,\r\n        \"1.\"\r\n        \"5060587321219466553012870351093686397249916401759472434092827544464856133318187035806973362924090662903749\"\r\n        \"1671355128894869419427983062506453820908765184e+152\"},\r\n    {0x1.5d488913a6d62p+506, chars_format::scientific, 152,\r\n        \"2.\"\r\n        \"8583520249281916338866314327559210987065565190673533620469014785587813138788138839992315111228424039110187\"\r\n        \"8885418173061097660244197201776411569329012736e+152\"},\r\n    {0x1.151c3720960e0p+507, chars_format::scientific, 152,\r\n        \"4.\"\r\n        \"5354498949077742169034443406216049299770028918272764456328676932798016382716888496031992258428716623824999\"\r\n        \"2218941837638686010641196013298349788803104768e+152\"},\r\n    {0x1.3557fa79ed04ap+508, chars_format::scientific, 153,\r\n        \"1.\"\r\n        \"0126026499623770044576994423798637012002417501464985878117760782996493012648396817497758322250050492041349\"\r\n        \"01434458455631896130313812311189422436650057728e+153\"},\r\n    {0x1.34632efda2f08p+509, chars_format::scientific, 153,\r\n        \"2.\"\r\n        \"0189450716998492213121147666474166009392711045094381728529008061117293669417942835283009277823392486547470\"\r\n        \"13008590709252183660814342129605380010212851712e+153\"},\r\n    {0x1.d18dd31d25525p+510, chars_format::scientific, 152,\r\n        \"6.\"\r\n        \"0957603982087232982909513121211465815599741588204415820396298222851596266515550801404820224265065922278874\"\r\n        \"3115865057982121845872416589866036396684214272e+153\"},\r\n    {0x1.9deef9f325dcdp+511, chars_format::scientific, 154,\r\n        \"1.\"\r\n        \"0839728287028179041104779394402998431149044866332968906003742365561718883404305927813627842460928319702403\"\r\n        \"984206679307763828828827451150213226478513946624e+154\"},\r\n    {0x1.80ef70407b9d2p+512, chars_format::scientific, 154,\r\n        \"2.\"\r\n        \"0160697875193073281058350414245510320201644882796531994091425667271465650234996404676918103588204703802980\"\r\n        \"632898021029981572024314647222500081978631520256e+154\"},\r\n    {0x1.b15f90e524369p+513, chars_format::scientific, 153,\r\n        \"4.\"\r\n        \"5395203367398852029035305208109368042694923882699028139843273249770514204350231474300282943704322434188173\"\r\n        \"61739058201501829021491250719502352274386059264e+154\"},\r\n    {0x1.7d04016826a78p+514, chars_format::scientific, 154,\r\n        \"7.\"\r\n        \"9821634470750785005816307052453796709151400402439168637259226600219936117575503983393755774577473554235475\"\r\n        \"350529315775591347087019497446187187442089459712e+154\"},\r\n    {0x1.09207e9aeb4cep+515, chars_format::scientific, 155,\r\n        \"1.\"\r\n        \"1108659309948223232073721981058486015639763921196063562755246502603396586456380455178355920137319345651353\"\r\n        \"1979239601685059643816826533951965329199816769536e+155\"},\r\n    {0x1.5eb84ec7e3693p+516, chars_format::scientific, 155,\r\n        \"2.\"\r\n        \"9389910968456540497145308817665722993724686326666865780387846928243089920830213473101442296898483553295520\"\r\n        \"8915016266000487049786013109396266423674162118656e+155\"},\r\n    {0x1.cd831a4414f7bp+517, chars_format::scientific, 155,\r\n        \"7.\"\r\n        \"7348323201078494069759154153148452216906433545612171796327606278267578531935859682519963528897995839751164\"\r\n        \"7543570671668790057093880969098511595082212179968e+155\"},\r\n    {0x1.3c41b73edbcf8p+518, chars_format::scientific, 154,\r\n        \"1.\"\r\n        \"0600772804334341824498673238754643000590112296311638116693641098492271731881033950635386567714769641582038\"\r\n        \"129703645750077658115580500414849678160462610432e+156\"},\r\n    {0x1.7de6915655786p+519, chars_format::scientific, 156,\r\n        \"2.\"\r\n        \"5602253164214019794228034929986330634069568667913627567267961346885683499448441433864914716779614560756659\"\r\n        \"03377049407345319868363294328606411349469066952704e+156\"},\r\n    {0x1.e47a65469d029p+520, chars_format::scientific, 153,\r\n        \"6.\"\r\n        \"4957894162689224015531687169668567969940639978728659196460226175437163963971643262151792036582074933138652\"\r\n        \"50447186614103438727429420216590467896398839808e+156\"},\r\n    {0x1.866eb1b2a52cdp+521, chars_format::scientific, 157,\r\n        \"1.\"\r\n        \"0469685229597165679242472867781707564232232115066593897597547823552733586500623731175655852654661036675944\"\r\n        \"667470248283335770956666084386262948697191024164864e+157\"},\r\n    {0x1.508c027c49129p+522, chars_format::scientific, 157,\r\n        \"1.\"\r\n        \"8049425471684503811692336471805744340392676090966559914158167829693248936857451772455022819546651020419395\"\r\n        \"086693907597563666097234994451590506212471517216768e+157\"},\r\n    {0x1.61ee1b28cecdep+523, chars_format::scientific, 157,\r\n        \"3.\"\r\n        \"7963414617308415787809596904160555114321348252647420762121034631479538120026400394885418700946009320148869\"\r\n        \"300117380342424037408264379528162055292585638887424e+157\"},\r\n    {0x1.a7da0d015e36cp+524, chars_format::scientific, 156,\r\n        \"9.\"\r\n        \"0926768024467341820333176481577483392918662852566121383240080801535518391810171083632685627972390044164430\"\r\n        \"68688466546996181994685113127876888475052825116672e+157\"},\r\n    {0x1.f343d287ffc8dp+525, chars_format::scientific, 158,\r\n        \"2.\"\r\n        \"1420954571874796181867803558173897390873628203612099816299639538188847181871424707442829555039446305144765\"\r\n        \"1015663758672875883679550666916401541316002057289728e+158\"},\r\n    {0x1.9c9c3a3327bfep+526, chars_format::scientific, 158,\r\n        \"3.\"\r\n        \"5406074604903996493796486071626953502852438595335202338839222961489306095343149732156950905287112321360780\"\r\n        \"8354960582121162245411977647195367953750953520267264e+158\"},\r\n    {0x1.610edb058ff32p+527, chars_format::scientific, 158,\r\n        \"6.\"\r\n        \"0591798371136819507430990360066620553732791972857074064150285578732374423137313166606132376705119733187389\"\r\n        \"5394455715612868333780052349810329711384825746685952e+158\"},\r\n    {0x1.f30c74ca208cap+528, chars_format::scientific, 159,\r\n        \"1.\"\r\n        \"7129340266632834749953577858343993939516249529867835081849172692553781768247897374384734210875421524426627\"\r\n        \"95936288492656745381512223241233513801086791472644096e+159\"},\r\n    {0x1.1c138fed7032dp+529, chars_format::scientific, 159,\r\n        \"1.\"\r\n        \"9501271083673802659787898406127054138324463280765738674858806150954364373930724252610104418333259637179348\"\r\n        \"62664034468096428283397061878573723884854136941838336e+159\"},\r\n    {0x1.78c95f77c873ep+530, chars_format::scientific, 158,\r\n        \"5.\"\r\n        \"1731277182329399807450239014797118750746786034562901386123351160720955621307415583371062151381510556778868\"\r\n        \"4863245902366518485000140068796841840045365854732288e+159\"},\r\n    {0x1.6459f93baec50p+531, chars_format::scientific, 159,\r\n        \"9.\"\r\n        \"7851226544599463771564921368556921827542040445585447659018246369324390402047706431276015403214773792169641\"\r\n        \"53369345749073097713940190208348710065187772895854592e+159\"},\r\n    {0x1.7906aa9a30611p+532, chars_format::scientific, 160,\r\n        \"2.\"\r\n        \"0705659855195211460286170209038937641731272422289152825858212496294807163297965180604186403154243179767907\"\r\n        \"958537137222057332190533942595916677783931001302417408e+160\"},\r\n    {0x1.fa515f09e2725p+533, chars_format::scientific, 160,\r\n        \"5.\"\r\n        \"5612314177003026122910357232767009218623136419014789426089817048220952364784685334500211032736310921113172\"\r\n        \"928546161625907053067205424290791219411580020307525632e+160\"},\r\n    {0x1.54d8573fb9596p+534, chars_format::scientific, 160,\r\n        \"7.\"\r\n        \"4874640533241470730279851562518649602012685564108538483392983178670598698623549235703802716601073988953860\"\r\n        \"606902557706179876262726589838088595804228576518078464e+160\"},\r\n    {0x1.87e0d2f66b2bfp+535, chars_format::scientific, 161,\r\n        \"1.\"\r\n        \"7217053958890400852304842901770937001126359565588473543908015592102961364884006330645313689960462043380825\"\r\n        \"1320307524080356734627614383764502179134363483408171008e+161\"},\r\n    {0x1.60fc1327a06edp+536, chars_format::scientific, 160,\r\n        \"3.\"\r\n        \"1016554470379008022068644346655257519265668288613794968614902119460294276336894661044455582708231625230426\"\r\n        \"882579521337832334896604900954598995797437634695921664e+161\"},\r\n    {0x1.992c8531ab31fp+537, chars_format::scientific, 160,\r\n        \"7.\"\r\n        \"1907739698299548544761759553441263855094547256115006468689749065750269245670602987652747097354199309800064\"\r\n        \"670851825256317768108233601492032587469380109538951168e+161\"},\r\n    {0x1.cddee01e85f4ap+538, chars_format::scientific, 162,\r\n        \"1.\"\r\n        \"6233719112674834819250602540832248747933195166025444180503928859570585646532467134263435983989542489214476\"\r\n        \"20240933830255782920769862417050715330898449264684302336e+162\"},\r\n    {0x1.99388c768c3b8p+539, chars_format::scientific, 161,\r\n        \"2.\"\r\n        \"8766398779168217186821712748845526998862701568704494700659767166699492968678738103971887270801356246232898\"\r\n        \"4464635950443836780167505221033916869036529710130003968e+162\"},\r\n    {0x1.6c2ad6bba6ed8p+540, chars_format::scientific, 162,\r\n        \"5.\"\r\n        \"1198670788912167528683009615591842433917743580431308732145221701765414223358769100615506655778167511446878\"\r\n        \"84279178798057513594382918680535607030620295902798020608e+162\"},\r\n    {0x1.8121da546cf38p+541, chars_format::scientific, 163,\r\n        \"1.\"\r\n        \"0829229605647497287491811471725340667019982382295287441998766070027220247968289288736829697687593326874916\"\r\n        \"164752948106530119043799024142733614166064793545183592448e+163\"},\r\n    {0x1.cc5c0ae184fdep+542, chars_format::scientific, 163,\r\n        \"2.\"\r\n        \"5888973619862410055297953386823285447975896175369247744210466527341086214689620755203843473222529430068506\"\r\n        \"678735966744366849758761825149394672284437121408260112384e+163\"},\r\n    {0x1.afe092d15aefbp+543, chars_format::scientific, 162,\r\n        \"4.\"\r\n        \"8574461844070456592452814669711010322733557031362825853413619938116374692585676530060249181278323860055817\"\r\n        \"10108947627014752518519314486521054019823200748024365056e+163\"},\r\n    {0x1.5f1a1433b9174p+544, chars_format::scientific, 162,\r\n        \"7.\"\r\n        \"8978852482314809765725691489425494641108478398257497378847509387658904871074579765532782187266445909935288\"\r\n        \"39354232570725767224692678438531015988394836852670988288e+163\"},\r\n    {0x1.8ab67f98bb5f2p+545, chars_format::scientific, 164,\r\n        \"1.\"\r\n        \"7757792408248608219840650290884562103331609396064383190252928684474923426996907505463604471391579602571928\"\r\n        \"3383611834930550575178173514581572666518402542001715150848e+164\"},\r\n    {0x1.f62458acb73c6p+546, chars_format::scientific, 164,\r\n        \"4.\"\r\n        \"5181869438995584155942879986161607327235800888084626274207935286368186289977681849743093295766921622231766\"\r\n        \"8812532970018869401576788745672335158605915636428814942208e+164\"},\r\n    {0x1.4fe1a6ba1c0e3p+547, chars_format::scientific, 164,\r\n        \"6.\"\r\n        \"0444067603790198680770375784082738739903558248297596449563137728373742577949182284564959980474547207384645\"\r\n        \"3804398133039311346050607936591463621343012361379329867776e+164\"},\r\n    {0x1.063123904b927p+548, chars_format::scientific, 164,\r\n        \"9.\"\r\n        \"4366318060930614275042036245009185089291734679507684985639516919954063657248120231594112076454245476674772\"\r\n        \"9956337135685250388333452322276527666526976611670460203008e+164\"},\r\n    {0x1.c3e4c9bc47a76p+549, chars_format::scientific, 165,\r\n        \"3.\"\r\n        \"2528493042703321141413309200996676555863097235776172037843793780326803925005135657769958248885096410603987\"\r\n        \"58716325831107713950320367933304627208668064052102524043264e+165\"},\r\n    {0x1.594ccd81bd096p+550, chars_format::scientific, 165,\r\n        \"4.\"\r\n        \"9711199416816592464299002776950161898639000113245240977386824261505093729352843986582700405277078306324888\"\r\n        \"68641461825918412782352354477687969196944687248446058397696e+165\"},\r\n    {0x1.0c6555b87dfb8p+551, chars_format::scientific, 165,\r\n        \"7.\"\r\n        \"7279343588562495407126280049885300491080229351189365823501345364553687726140552946628389981545368743987276\"\r\n        \"85060343548384620139502630275174727089552646218700654903296e+165\"},\r\n    {0x1.b1efe87fe7322p+552, chars_format::scientific, 166,\r\n        \"2.\"\r\n        \"4988746130766798376827800199823813953256757708767876517238281997487181991551985565303552676809021792458092\"\r\n        \"123757308008963935169221303180214415444334488294696842952704e+166\"},\r\n    {0x1.674a2eb4f0902p+553, chars_format::scientific, 165,\r\n        \"4.\"\r\n        \"1380191381421080895240587023700110588669580856565936068294303762090684154630617939500552507881452379030122\"\r\n        \"57564369266702609329281301036802867992107269395537054400512e+166\"},\r\n    {0x1.4d10ab628902cp+554, chars_format::scientific, 166,\r\n        \"7.\"\r\n        \"6719679535199355279888354227234517257428645312697123534388363324410221239158316740528269628364865341052173\"\r\n        \"890153833114361977767211690942890884469581914980429066141696e+166\"},\r\n    {0x1.348910101b05bp+555, chars_format::scientific, 166,\r\n        \"1.\"\r\n        \"4213879533988812988801489499892461314159660165902092759593012160198840631550914331540618549869245720943038\"\r\n        \"591573264165447412080305585107256403832151644381045298561024e+167\"},\r\n    {0x1.f9213f77afaa5p+556, chars_format::scientific, 166,\r\n        \"4.\"\r\n        \"6541532390763673825077519098739600416173657505928203777805647482615365710172842479112509262117196395261215\"\r\n        \"492125122729032007120120133249597715368097561405386982948864e+167\"},\r\n    {0x1.39148decde7a0p+557, chars_format::scientific, 167,\r\n        \"5.\"\r\n        \"7693029917278790835343693446228541151083246279328989491902151468261054433974865155786482743975400685885796\"\r\n        \"8022384319234650521865502886831850045752670251564620807405568e+167\"},\r\n    {0x1.dbecf9a36abebp+558, chars_format::scientific, 167,\r\n        \"1.\"\r\n        \"7540289541978554536679278449080898961110674955967170960958625902039261628279839229960204922512068948500088\"\r\n        \"8111062907960551667913609284846202035011913824495680054362112e+168\"},\r\n    {0x1.d4b8e3838c0c9p+559, chars_format::scientific, 168,\r\n        \"3.\"\r\n        \"4549610389534939614163292665079261900985718205569253011397072055313397970532490532749071748873309501615887\"\r\n        \"68433100280033360041954344387894356034343704057173414445580288e+168\"},\r\n    {0x1.0a21e645d2c72p+560, chars_format::scientific, 168,\r\n        \"3.\"\r\n        \"9233349720899516225653006419073082111151059390156664403365001807815842714755260514950130149946827232025161\"\r\n        \"76590662854806987645471308169316788500685330937565504795049984e+168\"},\r\n    {0x1.af01dfd28918fp+561, chars_format::scientific, 169,\r\n        \"1.\"\r\n        \"2707854970292210593587573885875803437251996278109312071923766373553351738675154455717211273888077203914132\"\r\n        \"749180314815054893523728069064065041255302851675835296773046272e+169\"},\r\n    {0x1.92f36b46cac74p+562, chars_format::scientific, 169,\r\n        \"2.\"\r\n        \"3761271692350110891980215212946227422808590277003177300689353935734267394985067115490384266663644635321905\"\r\n        \"607600207437156411377406544504086631781775691133562731288854528e+169\"},\r\n    {0x1.bfe04dfec51e0p+563, chars_format::scientific, 169,\r\n        \"5.\"\r\n        \"2820872264243582355340332232481921609272763546174111866258873749725898989610965360460037699636411260012718\"\r\n        \"784674393928472275175596068580609021329456130597064239797501952e+169\"},\r\n    {0x1.94670a2ba70e6p+564, chars_format::scientific, 169,\r\n        \"9.\"\r\n        \"5387489718917882102948269594473215622857013680481211269007794315939403812083737122286688310471818933068612\"\r\n        \"563309998840782226852329612567449648252694634073100841335652352e+169\"},\r\n    {0x1.bf6363fec4e21p+565, chars_format::scientific, 170,\r\n        \"2.\"\r\n        \"1105330303243356951146447438805265173253179909270544813724232524968355202014726255584317008254777069021908\"\r\n        \"6744514884262890299095847660667744123821425839198582550323789824e+170\"},\r\n    {0x1.130ebe426a4a0p+566, chars_format::scientific, 169,\r\n        \"2.\"\r\n        \"5951425292354768078033905586616956725006215370952637745135245417861224604987531981214225200701240175108930\"\r\n        \"840201983359378046439994040914451391630102167656335065688834048e+170\"},\r\n    {0x1.4846fccf0db5fp+567, chars_format::scientific, 170,\r\n        \"6.\"\r\n        \"1945308823207183058683537468760738258329716957097993465302851964798828559561781466290211511455975152392126\"\r\n        \"1814494546071943712322858477374811036408749349113740468449968128e+170\"},\r\n    {0x1.cce40bc89d5a7p+568, chars_format::scientific, 171,\r\n        \"1.\"\r\n        \"7393845792769813157591485334728289421339191017476114033077639490417559171554638668857619030907317254081420\"\r\n        \"81878718092529513244534671322128694195746568199203839343494955008e+171\"},\r\n    {0x1.4cbb8d52adc91p+569, chars_format::scientific, 171,\r\n        \"2.\"\r\n        \"5114408497872504889849608236610231700159606941723791669619088524835085024738028008402272439623076576729481\"\r\n        \"04995738811198515357386384926071278483707177078191869448614313984e+171\"},\r\n    {0x1.cd56ecd7c5ed1p+570, chars_format::scientific, 171,\r\n        \"6.\"\r\n        \"9643125288033973128155017170856729588410994800848488875781660527415029309190846451750710704827305435019690\"\r\n        \"67430731268878668278955626743849683963257233143847666633043607552e+171\"},\r\n    {0x1.974548f633393p+571, chars_format::scientific, 171,\r\n        \"1.\"\r\n        \"2296192874342279398035503660585874984268215640415692614185754893612306440618721946387877459034366883413609\"\r\n        \"36918152006779286929596814740431079796422442812171122552998985728e+172\"},\r\n    {0x1.785df63f7e7e1p+572, chars_format::scientific, 172,\r\n        \"2.\"\r\n        \"2726320991720393806082142485686217558330202638077848150550875230011082976612969886981829508930227201207417\"\r\n        \"730127845908876453052097589780463041422857268424951597133270614016e+172\"},\r\n    {0x1.fa98d2372e253p+573, chars_format::scientific, 172,\r\n        \"6.\"\r\n        \"1180092244552894479108133503846936836371359233960903288151843139474694399086289881596960660601999690274170\"\r\n        \"051304615631465749824618705719721448275602824998439000878232895488e+172\"},\r\n    {0x1.44f76f3ef0c7ap+574, chars_format::scientific, 172,\r\n        \"7.\"\r\n        \"8490337018587336573333382241289679251882281880347544433206317733805938361518095340765276962431841975064047\"\r\n        \"569375644124507699361497786620173012597660819648747164399097085952e+172\"},\r\n    {0x1.845aee96c611dp+575, chars_format::scientific, 173,\r\n        \"1.\"\r\n        \"8760165681953460413072829118958732692270564661286131167055983545979791077034420925197352908458387625197641\"\r\n        \"2473853052506364697656419609232890365789316383760219161065634660352e+173\"},\r\n    {0x1.6abc94e260cffp+576, chars_format::scientific, 173,\r\n        \"3.\"\r\n        \"5045234562719050444563289817930312119606725049565642471521942232460177946069408153684540504194597258990573\"\r\n        \"1168807151668054670532129843180363278721230005822552578189869187072e+173\"},\r\n    {0x1.77e7f7ab33101p+577, chars_format::scientific, 173,\r\n        \"7.\"\r\n        \"2635165849153785494563747540191483129521644872733745237579476633099320088983835423243815213775349593473393\"\r\n        \"6104514254970171070110867729784675843986648873395065583346126946304e+173\"},\r\n    {0x1.ec2c8c72e6720p+578, chars_format::scientific, 174,\r\n        \"1.\"\r\n        \"9020249607206747490383578565711176171590073672334887637643049626295328537660038412541458277654513402022486\"\r\n        \"56704594513309856716357813392938070159279476826318762074068165328896e+174\"},\r\n    {0x1.ffa5d013ee4f4p+579, chars_format::scientific, 174,\r\n        \"3.\"\r\n        \"9545635188621041668458681519635092022565038577625047050999641589933335359562218991630738088787131211935609\"\r\n        \"93015277645286678140294132386511219265217225137785123722280327708672e+174\"},\r\n    {0x1.0e5c252b8b844p+580, chars_format::scientific, 174,\r\n        \"4.\"\r\n        \"1792645649574566918909157878760712130302228913462470260602194485414931164079583288497776163194723846747926\"\r\n        \"67771126097789471772132138304456722148757124945602576369254706184192e+174\"},\r\n    {0x1.b285d8728f853p+581, chars_format::scientific, 175,\r\n        \"1.\"\r\n        \"3433838372088608392759541865783165685150864489372534049853049621196819773114326777373607298582831758073273\"\r\n        \"139400905288866876199471807470183600176123459886516500946100328333312e+175\"},\r\n    {0x1.830d570659ed5p+582, chars_format::scientific, 175,\r\n        \"2.\"\r\n        \"3932438386350752398906060480134131184426749382780138750338631150127979246477473949125606039841210188441858\"\r\n        \"566259800113585445368689288040865119179350881451516413561225814736896e+175\"},\r\n    {0x1.5b7cf521730bap+583, chars_format::scientific, 174,\r\n        \"4.\"\r\n        \"2972187544143624764586854064545662595041257012005724100970207585455769895698007795217153843862284368740788\"\r\n        \"37417713457309033640069443709571991834451783158215011561194532110336e+175\"},\r\n    {0x1.5f8ba5e3fe8cdp+584, chars_format::scientific, 175,\r\n        \"8.\"\r\n        \"6947889660886424315517334917379237681473389004555025287147425576180688651377619113503080210808097080248303\"\r\n        \"065713994383176911387666854498724374888010555657160403443732556283904e+175\"},\r\n    {0x1.3c656382359c3p+585, chars_format::scientific, 176,\r\n        \"1.\"\r\n        \"5650872395957953309347511865374635720208636296528844086575068893754566789157942879574612175260545187823033\"\r\n        \"6009199988423048858224043380759941961868932909470130132231537427480576e+176\"},\r\n    {0x1.0cf69f601cbcbp+586, chars_format::scientific, 176,\r\n        \"2.\"\r\n        \"6609127251749555037344451329716993732732872523015958386211791209911418856092668804225952579441453946598216\"\r\n        \"1018353954777170666779903498891261251335885914232419435941537077264384e+176\"},\r\n    {0x1.712601f59010fp+587, chars_format::scientific, 176,\r\n        \"7.\"\r\n        \"3041310915282277318283127156341286263678327106712574565671678562056257118035892836027777300336909382959943\"\r\n        \"9489279348564634343854478223995096490083834564122961187316938125082624e+176\"},\r\n    {0x1.d9cb25c6870d5p+588, chars_format::scientific, 177,\r\n        \"1.\"\r\n        \"8749367638301195110882726444350992935900646090447817670758440898890197572172958410652798401071911495348057\"\r\n        \"11539366541500871745028252870081743197260064203842403729644908114345984e+177\"},\r\n    {0x1.3f0bce2a16035p+589, chars_format::scientific, 177,\r\n        \"2.\"\r\n        \"5251137153536482125661277313165311760764103743192046445514228495477898656364587565420879026668975210962336\"\r\n        \"21580712956165193248559493345236489976046311451102680851980278768336896e+177\"},\r\n    {0x1.4e046f64ace9fp+590, chars_format::scientific, 177,\r\n        \"5.\"\r\n        \"2872088975059578152905008327011014369021532127587373171513246370679335597730248232687171558021787964992854\"\r\n        \"69008136051884913289117970821444349734733325693898128129470005715664896e+177\"},\r\n    {0x1.81c96c18da3b8p+591, chars_format::scientific, 178,\r\n        \"1.\"\r\n        \"2213351108095343900087303306426544285718316496416974886789244650584122979327515475219578337262395376593353\"\r\n        \"901364495415734234777395486829707907374874417711021037161711853711130624e+178\"},\r\n    {0x1.4d6f7e4292164p+592, chars_format::scientific, 178,\r\n        \"2.\"\r\n        \"1111997723509844240784743048023317235372730114142490466670077948439063027728542870283482437925492280294038\"\r\n        \"014573739362326768950393557886221693829978829496324438880160656306208768e+178\"},\r\n    {0x1.8c09c58dce2d5p+593, chars_format::scientific, 178,\r\n        \"5.\"\r\n        \"0151567233983766888518548233001321491315735325442193958423073461431568869675027140356293231317677337543096\"\r\n        \"676819898009801602967325844127445604533459507481195933684935651668000768e+178\"},\r\n    {0x1.35c34702001c9p+594, chars_format::scientific, 178,\r\n        \"7.\"\r\n        \"8452488438025278621303101815654925040904759740554180738663377954039378219664965548160988021330044581544086\"\r\n        \"790884596615125296396497742047656667223884572601517271224748933535236096e+178\"},\r\n    {0x1.29c65d36b40dep+595, chars_format::scientific, 179,\r\n        \"1.\"\r\n        \"5083269248992404848075529200220437643877343516690908500051239020473880544003670069908347719938640019293547\"\r\n        \"9514139200504582847173176153264857561337534047601980885310892466243633152e+179\"},\r\n    {0x1.f096b560fea30p+596, chars_format::scientific, 178,\r\n        \"5.\"\r\n        \"0307679766475297900643310003785978353718376020933985994442740062831046797865169439521465673311238868838693\"\r\n        \"647148360650272015676569826847440171961764782606079881578285720137629696e+179\"},\r\n    {0x1.2ebc1ebd45cb7p+597, chars_format::scientific, 179,\r\n        \"6.\"\r\n        \"1338034600015482533548856700137120559493090645959837325747342847008896961430122182715729832578195313705013\"\r\n        \"4105978358652455249997921465483648671250142659113169108289945909053095936e+179\"},\r\n    {0x1.bb1e534cd7220p+598, chars_format::scientific, 180,\r\n        \"1.\"\r\n        \"7956317799329456455556916318367385720663341620756711043034998103313297163597767928062472500586846121139556\"\r\n        \"14358367020579719652520207053724496150314508797330293943336699424736804864e+180\"},\r\n    {0x1.5a25ad40029b8p+599, chars_format::scientific, 178,\r\n        \"2.\"\r\n        \"8053575998151829095892405225520007274617104914173229276735386248671927242112453507121141969275457163272893\"\r\n        \"568975905848289848712880545718807596992132248150509100180221916786720768e+180\"},\r\n    {0x1.920574253404cp+600, chars_format::scientific, 180,\r\n        \"6.\"\r\n        \"5163814759421788677873530796634949212285583652947416245608362680831586176277421534822610398383052946554843\"\r\n        \"94073977159925482307630138907365278448422568005135582757883527066002915328e+180\"},\r\n    {0x1.4b2834aafe474p+601, chars_format::scientific, 181,\r\n        \"1.\"\r\n        \"0735479295792078221461462578241925997159828607487053072465046193583974474108661842779443009354436634868004\"\r\n        \"476810418060601519121547906362418385449487160625577520457386019933969711104e+181\"},\r\n    {0x1.1a6d55bf92261p+602, chars_format::scientific, 181,\r\n        \"1.\"\r\n        \"8311493838142103542752617036118103707188503450539135538038071480595467067235490012901451567915485547679396\"\r\n        \"737058601282328571489161236550988761960486022562870032145767653310556274688e+181\"},\r\n    {0x1.939b15b62b48fp+603, chars_format::scientific, 181,\r\n        \"5.\"\r\n        \"2336517217744578289301435473972599375000619053808222966759646632373279789584915010138199152881101065506532\"\r\n        \"687557038424526575845468735889436101248308704643094047464453357888117669888e+181\"},\r\n    {0x1.3323559810654p+604, chars_format::scientific, 180,\r\n        \"7.\"\r\n        \"9654625984234070560843023786733559173357314848891567332176073939266324781282852488889033232328603190512864\"\r\n        \"44191994975384433871139554376806544439859313015268722153010942162317082624e+181\"},\r\n    {0x1.333eb164f7174p+605, chars_format::scientific, 181,\r\n        \"1.\"\r\n        \"5936468405690222963015531213681703950991673640841216359315071491413902278799067753246551939525046278107613\"\r\n        \"643503941029543247825376095531505645583899358762232671530237175811966763008e+182\"},\r\n    {0x1.d0f59fe9d68e5p+606, chars_format::scientific, 182,\r\n        \"4.\"\r\n        \"8233914130112407863285003710689803483456665401306521852174982975280526545361901381877410799671323400152340\"\r\n        \"9728884313284382907823478860910903091121695170799862320491542129699840851968e+182\"},\r\n    {0x1.84e2b5e2c9a1ep+607, chars_format::scientific, 182,\r\n        \"8.\"\r\n        \"0684340066596766544572556506252731538802478458154108454504290436861404376208516321210832553563313969262818\"\r\n        \"9202172627621495205007691501867201659515859130020754039123809607454929453056e+182\"},\r\n    {0x1.18d12c4dbc048p+608, chars_format::scientific, 182,\r\n        \"1.\"\r\n        \"1652548548873181294322533416118492440051287407763628764843419162381374460114342887075602927194584640147378\"\r\n        \"9496291184726619357044089201921845860679578715643022102228246746338923905024e+183\"},\r\n    {0x1.7af5d345c6d23p+609, chars_format::scientific, 183,\r\n        \"3.\"\r\n        \"1450029563312949921705252567556012692518149027203291202593080093166670468850095010731506130052674674120157\"\r\n        \"74348292634459749772960881227292173172198041386149418679539742007941742460928e+183\"},\r\n    {0x1.975ab947edb1dp+610, chars_format::scientific, 182,\r\n        \"6.\"\r\n        \"7612935278386641398204727194074041846069648507123655157571111694919617576544597129796919213184659654005698\"\r\n        \"0488537620239095371500607042229531833011357071487127295321565416010266181632e+183\"},\r\n    {0x1.c1d0737b292d5p+611, chars_format::scientific, 184,\r\n        \"1.\"\r\n        \"4932090269565783294588036135586081051149351045134466442617688566006012001837540168458670172917118701768786\"\r\n        \"867474604627194399095522425450416452953980195186577171892642417347609543835648e+184\"},\r\n    {0x1.aa02efe9f3794p+612, chars_format::scientific, 184,\r\n        \"2.\"\r\n        \"8283859855362886467396009253302481873061245217643500392666314561635040318327151542442172699585268930632622\"\r\n        \"241589973221227709826283976490647011264056279643437090782685578260187550056448e+184\"},\r\n    {0x1.3d7dc9ffbee8cp+613, chars_format::scientific, 184,\r\n        \"4.\"\r\n        \"2157931387871262015926870950749405384817650455950174689016344420098137969750444915728016112509860277150060\"\r\n        \"601492917876180907845520932017756677408045726864238056988978424999333691654144e+184\"},\r\n    {0x1.c6879a9f1b649p+614, chars_format::scientific, 185,\r\n        \"1.\"\r\n        \"2070899708662365098038931357762390307929244909436176101222504931129437932282921093676660906910327987840252\"\r\n        \"7125214963888503868333527614117931372209142616050590653014235608250452260421632e+185\"},\r\n    {0x1.ab65674d500bdp+615, chars_format::scientific, 185,\r\n        \"2.\"\r\n        \"2700631068240273397489316576657874824412711298635064825657580646809427730859321650511948212330668025354305\"\r\n        \"6092075426388221410551611143867357719504542651007243174106278126401989803769856e+185\"},\r\n    {0x1.7c53e1b833ab0p+616, chars_format::scientific, 185,\r\n        \"4.\"\r\n        \"0401294303115836967321430079576857543043077310822923673457308264270695997048570907605829914857916971516317\"\r\n        \"3120245949614126178698831517102780044385664344470114797725850999704214300524544e+185\"},\r\n    {0x1.2e77c927411a0p+617, chars_format::scientific, 185,\r\n        \"6.\"\r\n        \"4260880103511173776965782050887475772203573881104807170026375206902625094758600314000230697855968658781415\"\r\n        \"2496590594469715368836313131660803069753435961872139875035538111189185036550144e+185\"},\r\n    {0x1.91af529276bf6p+618, chars_format::scientific, 186,\r\n        \"1.\"\r\n        \"7068006955155920436381787742211206889900022505144975960971613468630206721351184202513546521873931642016016\"\r\n        \"70059306842801510185352447629065196450702180793164841642105280807255981179273216e+186\"},\r\n    {0x1.e2ffeafa53641p+619, chars_format::scientific, 185,\r\n        \"4.\"\r\n        \"1046316824941888643699353613767678576433840888755738142654597510056334162946180327973010169901435079539597\"\r\n        \"8893668127655560216486714958133476458975838842621122712984278755617826565783552e+186\"},\r\n    {0x1.5650db2b156bfp+620, chars_format::scientific, 186,\r\n        \"5.\"\r\n        \"8181424134557963372623500529012147039265491223350309547526266523128141272229618057337628218595609572301124\"\r\n        \"71018315948488391977542573706585784859374641921502790939786006178741349999706112e+186\"},\r\n    {0x1.bf7ae95e29007p+621, chars_format::scientific, 187,\r\n        \"1.\"\r\n        \"5211116452704720220916932480545333836293750506976740282478412134006158837478732993126688286547314481305113\"\r\n        \"926160400673257953300679831181284416307088159652747412468645675852976258440757248e+187\"},\r\n    {0x1.7f3b57b7768f3p+622, chars_format::scientific, 187,\r\n        \"2.\"\r\n        \"6054268526041418370124758261736181886009351044292952840979842879191012038670747908928720486777477687495442\"\r\n        \"139696169653926332331688473761049756433252163195764050763466390084322743208116224e+187\"},\r\n    {0x1.2df5ab759d94ap+623, chars_format::scientific, 187,\r\n        \"4.\"\r\n        \"1057853719527927979235446097813905937787889019654170253288837621067841097808464938435949456711502629198845\"\r\n        \"047066360505800379087691836395031068487812569438457407732512474227630214523912192e+187\"},\r\n    {0x1.f86e4bfeb9a95p+624, chars_format::scientific, 188,\r\n        \"1.\"\r\n        \"3717626247132139356031030212904093976490026571768063884666249174145828633729237056208500152497070476103697\"\r\n        \"9181678894768420162515624483582843225609804010781295565639720290288781607684800512e+188\"},\r\n    {0x1.f40819bbe6e34p+625, chars_format::scientific, 188,\r\n        \"2.\"\r\n        \"7195986230515427628289312046628293937926660068197292410651314639082215733474435689052778088764971396921622\"\r\n        \"0975232992872917430431261712729880546657888244648604349740292101232975795214876672e+188\"},\r\n    {0x1.bb810fa7ba591p+626, chars_format::scientific, 187,\r\n        \"4.\"\r\n        \"8243077416927025812147489698712574130435213134316928233651561721184336878749918494519101017806378515809278\"\r\n        \"608335558400157584055536387755052350186843738994172820141734602267502813567254528e+188\"},\r\n    {0x1.b49cba268e605p+627, chars_format::scientific, 188,\r\n        \"9.\"\r\n        \"4986787120868551354856124828173860354847443999782529857627384188101971308874000269574276015142574067770537\"\r\n        \"1858937491969553131423202713212361520698537802948066370938491409647594429525000192e+188\"},\r\n    {0x1.6794724f38a2dp+628, chars_format::scientific, 189,\r\n        \"1.\"\r\n        \"5645616537346161531395584770690175816359049861537004504171534275505852346677701254291437480648523612687972\"\r\n        \"06642428914737885631574981113215615320879524124007390426980020724645404028254027776e+189\"},\r\n    {0x1.d885c64ec1963p+629, chars_format::scientific, 189,\r\n        \"4.\"\r\n        \"1119691994497879656531133766660971874902845844085983857408328096666520143100236614121035494123196391236682\"\r\n        \"77588476017765557295002078594048079978501293546557091940850855608591393411787915264e+189\"},\r\n    {0x1.d4b6a8ce4e210p+630, chars_format::scientific, 188,\r\n        \"8.\"\r\n        \"1576445426427843228244475508275094424655570327245201459047094099930186877082150505147571440436295280323845\"\r\n        \"3225443621893877167039809549667445315862497012784573780315757858692039887497986048e+189\"},\r\n    {0x1.0dfc30c10a8f6p+631, chars_format::scientific, 189,\r\n        \"9.\"\r\n        \"3978200740875525823346709967358851145517458783872627113059769085886366674405289187962996521127962302157367\"\r\n        \"62416233629290695818905123073123846308612952343782071766983440677059709153069498368e+189\"},\r\n    {0x1.b0ee3365acf4bp+632, chars_format::scientific, 190,\r\n        \"3.\"\r\n        \"0139458754847524660871282757055906655014101750771082954413410089116657906300272279625269622507839996028131\"\r\n        \"322069003748345377672125070777019272622112701902180304760314555069924255238207832064e+190\"},\r\n    {0x1.e8516d69c2517p+633, chars_format::scientific, 189,\r\n        \"6.\"\r\n        \"7990790502150547755817441151088834982046097343185039910037887278994580105885199523166160292480282346294010\"\r\n        \"87279124575596835993625675652177630757887466880278880084355993616847248021962883072e+190\"},\r\n    {0x1.678bfe66c299ap+634, chars_format::scientific, 191,\r\n        \"1.\"\r\n        \"0012275116878428832695316266386275059577472848203452848888799575054312857576278375094172990255241396253407\"\r\n        \"8869424254770151616712433286627933649089597511713238066169913296314718460937108455424e+191\"},\r\n    {0x1.04700a1049e6bp+635, chars_format::scientific, 191,\r\n        \"1.\"\r\n        \"4504776964779739227622461272137780904566626980139278483809734254823562877295798245295460035152617301251406\"\r\n        \"7058098025582676058384729733566966350382985119197142132911172845321643870781582606336e+191\"},\r\n    {0x1.42ccf6b7f926ap+636, chars_format::scientific, 191,\r\n        \"3.\"\r\n        \"5956024160941395496724152481406517830405700080895194171603810345955158609958585945435113191220307312485239\"\r\n        \"7179554337917085081215107409583937953090530652396114892869575308843675129211185528832e+191\"},\r\n    {0x1.62da3942f3ba2p+637, chars_format::scientific, 191,\r\n        \"7.\"\r\n        \"9052400799365436508456422997397376779163961087508758356552926026529470568515992308471246008516852855949960\"\r\n        \"4255099654858809141476957078618577590864095604243342920714026320377441054472831762432e+191\"},\r\n    {0x1.6617ede33b7d7p+638, chars_format::scientific, 192,\r\n        \"1.\"\r\n        \"5954884853337538467930960161959379373574226963181525647757921151382491570533826044106708021096634523722806\"\r\n        \"22563873071483865155214731195109515482575780647056162170021909878210640606642688753664e+192\"},\r\n    {0x1.5c71e4b115269p+639, chars_format::scientific, 192,\r\n        \"3.\"\r\n        \"1049983313309457947153108285698834046740671768845565652182843514446382696929913134966819032936095111895758\"\r\n        \"08859645677809012205688992155876799240651615710401257329009039104082564451422481416192e+192\"},\r\n    {0x1.f38de0551cfd8p+640, chars_format::scientific, 192,\r\n        \"8.\"\r\n        \"9030718451768592943551952273335458583767299556603325749125904384894163964056658026424350130332560793911830\"\r\n        \"97998040901449719178200967412709547407175233106220746691802662083191769493569324187648e+192\"},\r\n    {0x1.7d3104213fa96p+641, chars_format::scientific, 191,\r\n        \"1.\"\r\n        \"3587214394332287831636967409123474173198677781114610688477509240066767270036304396583002007338361488342434\"\r\n        \"7018261468570862106382590370866270622706678119119636711532234507923360885265009737728e+193\"},\r\n    {0x1.05c12199a4ce0p+642, chars_format::scientific, 192,\r\n        \"1.\"\r\n        \"8659984263282701095961910661127105662619442340071089999966335247066716008995363420012904517869156065414943\"\r\n        \"28827181417719388414731396372446871312890174002675142689682184688568477822869533884416e+193\"},\r\n    {0x1.e7c493c1e5eb2p+643, chars_format::scientific, 193,\r\n        \"6.\"\r\n        \"9544124557966781465283601740528161468657156016270358219352828875152455546920314538120334360214601895748468\"\r\n        \"949215676482982196512810670940274921427074192952089823830554753893672379339452513779712e+193\"},\r\n    {0x1.7be4b24c3e84ap+644, chars_format::scientific, 193,\r\n        \"1.\"\r\n        \"0832755189816973686838400117394925117567150074253168671073010357437082908429802511685738145825384022747200\"\r\n        \"287129426299695238571771855677246949457702575625558892201737640633820907147368494792704e+194\"},\r\n    {0x1.2de39fee556c2p+645, chars_format::scientific, 193,\r\n        \"1.\"\r\n        \"7216892018906268022068471537387743260557559590398031258749108351094204150589638814169822851978176186111763\"\r\n        \"517875372144231247461814054561524289109891363206828212023676515423816653474344871133184e+194\"},\r\n    {0x1.064ef464f3256p+646, chars_format::scientific, 193,\r\n        \"2.\"\r\n        \"9919164363027123692749619660627210889271275295150022237744720119394566288350377104728121689125089876410120\"\r\n        \"207077019582026591233089745125850338025814467578902594716196084232119044216662467280896e+194\"},\r\n    {0x1.53c83ee0f3068p+647, chars_format::scientific, 194,\r\n        \"7.\"\r\n        \"7511807677676666668993801298197495853096204934459746619627314359135066593918034347577125781457452161330722\"\r\n        \"2499090718182469027512595486412104282224089391808118934952932553489010283810329970343936e+194\"},\r\n    {0x1.3d245fcdf38e0p+648, chars_format::scientific, 195,\r\n        \"1.\"\r\n        \"4469419386503595028127075501484846217979200970571120241086108986167836029091721153208882052204284176158696\"\r\n        \"92393014844961294938705227221973480785926757243856237171772712052212742533379530998939648e+195\"},\r\n    {0x1.e08347f6d354fp+649, chars_format::scientific, 195,\r\n        \"4.\"\r\n        \"3846223856409726487843137745345240016233497677184702838745534071583111769816970967562226232827874998014451\"\r\n        \"84284881420975108036710110563126305622808224088979432579122289231488107948520961449394176e+195\"},\r\n    {0x1.26dd41c959944p+650, chars_format::scientific, 195,\r\n        \"5.\"\r\n        \"3812031636068901652580768033108735321385002279585405149633570661783421571708940731919720466896227207390799\"\r\n        \"61349180699018841380453909336296408176168776915809695465869463868037226981151032054120448e+195\"},\r\n    {0x1.32a46cf0469cdp+651, chars_format::scientific, 196,\r\n        \"1.\"\r\n        \"1192297812198031453672538904878583920546310057787196919680564602804006021635275052904716578393230705549792\"\r\n        \"391736916811871536801023058717321491817885637178624494387092346840642879252645460150583296e+196\"},\r\n    {0x1.f735cacad6b34p+652, chars_format::scientific, 196,\r\n        \"3.\"\r\n        \"6733861060912076889136215696794553894081750048069183817920228793292867367172061721225671283257865149059762\"\r\n        \"373032895575586250199621890834068293240362884267618309008853943697973367517798399718981632e+196\"},\r\n    {0x1.6f9e96b3a07d3p+653, chars_format::scientific, 196,\r\n        \"5.\"\r\n        \"3671746541827261011203354087624108922878597080912646222922380862668287491802597137523711347734694456137577\"\r\n        \"512510066286097290894101024991650054347426329814100070532676175900514872055547324115451904e+196\"},\r\n    {0x1.9a7be8fdf7d97p+654, chars_format::scientific, 197,\r\n        \"1.\"\r\n        \"1985977495349634490908878417576139133664292427414882677483198175172572179357980016926770715944365796704257\"\r\n        \"4692923571443314746208884004956936450441535729663397603260741070812981369093068197195677696e+197\"},\r\n    {0x1.da6e03fe5ee66p+655, chars_format::scientific, 197,\r\n        \"2.\"\r\n        \"7706336697369672079558112275729991989663502537476696645641921462599178276995772930464951641470258493038336\"\r\n        \"9099948172126078628543391675565516869571467232515617030599512982766562717569725701405278208e+197\"},\r\n    {0x1.46bfd17446d76p+656, chars_format::scientific, 197,\r\n        \"3.\"\r\n        \"8163820324215302078655052581105169362206077889882490668181955965331335612783576990462419110014762802040842\"\r\n        \"8932624183905960507058168406385765800174407011359638209862028651785169944480326048859291648e+197\"},\r\n    {0x1.4da5bdbbe28e6p+657, chars_format::scientific, 197,\r\n        \"7.\"\r\n        \"7939024383475144406401810111134781235714299871416468725265537823786477278170640693706900927390244735770402\"\r\n        \"3377635205357481997520059613138340462342666890730126616251260546972142434062110654323490816e+197\"},\r\n    {0x1.794508278de11p+658, chars_format::scientific, 197,\r\n        \"1.\"\r\n        \"7625808904819878814252834571355017129723543975578058942872687731253785660005190276333451440607991123766321\"\r\n        \"9689293395397374284887817353554283069192904339275976476169251134939185478796513753207668736e+198\"},\r\n    {0x1.eb532e6f9d7d9p+659, chars_format::scientific, 198,\r\n        \"4.\"\r\n        \"5908803682224108657912189982052113878795247700619664483730988082961059233697555687474423301586558704416284\"\r\n        \"05972833885899442431367846953537758531668062429844500799658848386004026176785845424421339136e+198\"},\r\n    {0x1.de74ebce4a37fp+660, chars_format::scientific, 198,\r\n        \"8.\"\r\n        \"9412828663695769157133701994384037245199508662333984038697424700510180989698512292550728723512369532416908\"\r\n        \"59581044027690123952861405038640439793801150984027335811429652593548499275325847981191593984e+198\"},\r\n    {0x1.f37efe81f6078p+661, chars_format::scientific, 199,\r\n        \"1.\"\r\n        \"8668922163822093102670212590302724412138160772937315443551988535235327269727004283188067685097993915779967\"\r\n        \"857553550469160341100795009241978760744022819053953305820738316178892052108850291867761246208e+199\"},\r\n    {0x1.b9ac64ed3cc40p+662, chars_format::scientific, 199,\r\n        \"3.\"\r\n        \"3015541406240127652827901285317994654252259108292724627854632423431112225291832993714601701837092532228984\"\r\n        \"666842289569788469418213910100041040541661269705317791388661975141778219886098547588248633344e+199\"},\r\n    {0x1.be00282b03f5ep+663, chars_format::scientific, 199,\r\n        \"6.\"\r\n        \"6678007786700799562127526307310207752308193470392815502671838863546949841784370697415483868452623924662465\"\r\n        \"852932499279515268041523524885590999171088727718673563969761030301929187013508451729059872768e+199\"},\r\n    {0x1.1f0bfd13ebd68p+664, chars_format::scientific, 199,\r\n        \"8.\"\r\n        \"5828181572124633107524119616284657291987779794200781158316572344105215247476409691264332650248636862250587\"\r\n        \"399330494835558065432909058158755560573757532140879843155127845886935663226690006104546476032e+199\"},\r\n    {0x1.214942705de21p+665, chars_format::scientific, 199,\r\n        \"1.\"\r\n        \"7299550663482325854298152774838811504666813994210021794440510040084666159982357767709979637162725720121837\"\r\n        \"143146658029599367447831227389091111211511620184940759881374673800216802576052457772066799616e+200\"},\r\n    {0x1.09671a2b2cb1dp+666, chars_format::scientific, 200,\r\n        \"3.\"\r\n        \"1742604212395941520160807475694587693442023879310826245397503160636389502214271931668375341320279482228936\"\r\n        \"5003537922894512928901216347580242808688118038808320342245310580635968754349465019243816812544e+200\"},\r\n    {0x1.ba3141cf23cb4p+667, chars_format::scientific, 200,\r\n        \"1.\"\r\n        \"0577387790503057845523967882965492655922506699517901184690541395251648923255536765968073123452432831189428\"\r\n        \"3139610900523923729546826141802983594855809190686087313938155503860877149671068608237095878656e+201\"},\r\n    {0x1.86d43f758f915p+668, chars_format::scientific, 200,\r\n        \"1.\"\r\n        \"8697520727929860202205333481871092634806068636093040001347476582997186350991014749554566585582449517827852\"\r\n        \"1742514396415318804969082463925672708648283454644927469172901217309139068598188157479893860352e+201\"},\r\n    {0x1.34d8186824c10p+669, chars_format::scientific, 201,\r\n        \"2.\"\r\n        \"9550611658398537729812084104233279581886197422995997439739248023584633751063077706969826068002328821902558\"\r\n        \"35984668412855709756751449286828670454146045729913364117793350552523245031469165393183309299712e+201\"},\r\n    {0x1.e78ec2e502b07p+670, chars_format::scientific, 201,\r\n        \"9.\"\r\n        \"3300316023279546564429734710131486172165480903897679792851861579776405133194991445173294823171591618519733\"\r\n        \"82886503720740495065769351149280072967849485120060333190450091919271255293415847165484888752128e+201\"},\r\n    {0x1.f9eb8df3b3791p+671, chars_format::scientific, 200,\r\n        \"1.\"\r\n        \"9362841443169071617725977338146969813068537694630772833789523535940605386959607587391035584155361991571477\"\r\n        \"2188643495718476877510953230360136475999837927583418408929771467314748864760171734164102447104e+202\"},\r\n    {0x1.f3bf2b7fd9993p+672, chars_format::scientific, 202,\r\n        \"3.\"\r\n        \"8253141404124239087553445135078230149218171629835915005900468691055157253177028433475181721888031353474143\"\r\n        \"805960645601659788841709440240831940652256561820866616777441445506068582195950276620332646268928e+202\"},\r\n    {0x1.7028723b0868bp+673, chars_format::scientific, 202,\r\n        \"5.\"\r\n        \"6361345240426447996243602793477311715051878330229375094900655201745476339178578234692042783203586674400814\"\r\n        \"536523693629016758628762237700239395376218700185658748567853569033785027091761965807224097865728e+202\"},\r\n    {0x1.557c7c726b2c5p+674, chars_format::scientific, 203,\r\n        \"1.\"\r\n        \"0455633800468254373659208108812590394043317042707529535320591653457158166384116723919640391533814902130197\"\r\n        \"3914820975343519675720107557611312716650944578510886085691231275003492219818521525260187846311936e+203\"},\r\n    {0x1.871a220cf573fp+675, chars_format::scientific, 203,\r\n        \"2.\"\r\n        \"3949543282776258275094826997800475448163929702581969665721781303410329417447832451577436710001122472324600\"\r\n        \"4426134549707543279835675223903160643688382643597490008860447048746541065340198566551705264062464e+203\"},\r\n    {0x1.7ab1f57987853p+676, chars_format::scientific, 203,\r\n        \"4.\"\r\n        \"6379583986380873399377611822272310491249212463996866783107484973790663759579721670387297986704230593188127\"\r\n        \"7246512300341294333647657347794641948475142092198438521343984711625050786905805143040315550072832e+203\"},\r\n    {0x1.5d3ddba3b5f62p+677, chars_format::scientific, 203,\r\n        \"8.\"\r\n        \"5544700286806899054573744398898783238737967644664671325775421780413312594622618697018203609322621774586335\"\r\n        \"7936953692366755947421731246318689169626782187431645178224405902434053217838696105015610359939072e+203\"},\r\n    {0x1.ca1c22f39b22bp+678, chars_format::scientific, 204,\r\n        \"2.\"\r\n        \"2442269843101122827421442194256344003422365531162259447063619663210238536932202342459756070387395904494366\"\r\n        \"08778953178834695527378455121099232622455529116651588866259062455701860787333589107721957541937152e+204\"},\r\n    {0x1.5571570a3d877p+679, chars_format::scientific, 204,\r\n        \"3.\"\r\n        \"3453762259499943095906115508134893420044494808114889576882963983309648533878483611515604738427366970549017\"\r\n        \"54178011537224573858899467011609733043254823463231975478542474685169259633176067748962831236595712e+204\"},\r\n    {0x1.4094b51955758p+680, chars_format::scientific, 204,\r\n        \"6.\"\r\n        \"2819534546304202022756189930697394173859142240118070438830404805760551238633453033097751606807688513643796\"\r\n        \"33566498059922977393145681190563895952411661162198926892429054001662376306285334661068344151506944e+204\"},\r\n    {0x1.9048c53155909p+681, chars_format::scientific, 205,\r\n        \"1.\"\r\n        \"5687567004414429430445580613907672440297999372236541850109777310656966630289380682512901660984243147818164\"\r\n        \"720305606372514460855651668937589154968441803492390245562381549787491329484096179468977774843133952e+205\"},\r\n    {0x1.648fda1b8573dp+682, chars_format::scientific, 203,\r\n        \"2.\"\r\n        \"7948083967253507158270892062204304924669010291504288163313261458526456348819707571820654705254002837820095\"\r\n        \"4036929834214012069157615233165507943405007539518079954737799050720625737596053702318674937905152e+205\"},\r\n    {0x1.43618fcb01bb4p+683, chars_format::scientific, 205,\r\n        \"5.\"\r\n        \"0694600816666434831915046957006568969768474107310483569746183545377953584217498572022390666824444206906802\"\r\n        \"716110058524003006214659535848234793606862153660055012848214798236108687160590757085244967798964224e+205\"},\r\n    {0x1.e3c671ad8c424p+684, chars_format::scientific, 206,\r\n        \"1.\"\r\n        \"5167731946556582358338545363873641520855604073445893638689603884306082276318367477947295080031043819110440\"\r\n        \"8642304100789891065969740635351032828526812314484068150876373570965277810326480540295924136407990272e+\"\r\n        \"206\"},\r\n    {0x1.0083712d8f528p+685, chars_format::scientific, 206,\r\n        \"1.\"\r\n        \"6084856808214641304016171526904209487654525042104056698492786865015541204817201677687479571049677306897371\"\r\n        \"9496544120901191625200109058676087802871541264829133196190867040924564024017823724146856414240833536e+\"\r\n        \"206\"},\r\n    {0x1.1b815b8ce81ebp+686, chars_format::scientific, 206,\r\n        \"3.\"\r\n        \"5554800597042668911521270198442508184743882300104078763439099936805058397629458498314099957433687022418916\"\r\n        \"3184788239468910565398744819870703830959835692636607007655630104135189425612387037272246775462232064e+\"\r\n        \"206\"},\r\n    {0x1.3cb5cc09f23b0p+687, chars_format::scientific, 206,\r\n        \"7.\"\r\n        \"9438133343858630565423242979694274909564237766705840868790151212521658489271471983804739253095661366761029\"\r\n        \"4102333273655557547426416548788317016668008395432111323108190919984834221381915705192746329317572608e+\"\r\n        \"206\"},\r\n    {0x1.0eb891e353010p+688, chars_format::scientific, 205,\r\n        \"1.\"\r\n        \"3580600028505664375690662207424245293630538367773374329113241542710551072241261271590612227940725191575525\"\r\n        \"142268316641921315280475966244961988464253867196651973305962369993832829015492388706895940085088256e+207\"},\r\n    {0x1.fe4392ee89698p+689, chars_format::scientific, 207,\r\n        \"5.\"\r\n        \"1194339355719443065155494183071752754181073170581919459310323849856827865354540376178837362522389907879317\"\r\n        \"21861923842646425087948083052097162063136700891783482967154133027296156365640453753060081736636956672e+\"\r\n        \"207\"},\r\n    {0x1.2dcb28f24e477p+690, chars_format::scientific, 207,\r\n        \"6.\"\r\n        \"0557377481791783775123253767073183006050784328448801194330172256192676385019587449505858703818171834796158\"\r\n        \"88079777486184355096973374331860638106502031077122796354840154902424520732833513406609567524824547328e+\"\r\n        \"207\"},\r\n    {0x1.7ef16a0343a29p+691, chars_format::scientific, 207,\r\n        \"1.\"\r\n        \"5368136201009418151075746612212978086078021684377175933956334114584860950199106026892088552308405826859681\"\r\n        \"19867342497053313630101310880690361388894132852824665771671576281871878218340553013779839607256383488e+\"\r\n        \"208\"},\r\n    {0x1.2a242729206abp+692, chars_format::scientific, 208,\r\n        \"2.\"\r\n        \"3929799628231874533559162595675700688225267190446002583051852996326657712936124491324505265077653846814113\"\r\n        \"912468376263785578115495854111182179778355706863388202457043252998698055736229924100641739854177107968e+\"\r\n        \"208\"},\r\n    {0x1.6fdb131897c76p+693, chars_format::scientific, 207,\r\n        \"5.\"\r\n        \"9050637526432229460046672429152018512276157466161011681361188012855653217247623948526824848762046607051117\"\r\n        \"42291766960934780667277783068480199263888364083681949480234545468896885660308486627900438301487661056e+\"\r\n        \"208\"},\r\n    {0x1.828b9edabf8bcp+694, chars_format::scientific, 209,\r\n        \"1.\"\r\n        \"2410164169914756986987721184858525130751854228863394397493695090758186348224795318834728620444604824617592\"\r\n        \"6376358164303658206374976185443979610307101254760486194833808768397406617592883545020705987606790275072e+\"\r\n        \"209\"},\r\n    {0x1.561155e6ffb7ap+695, chars_format::scientific, 209,\r\n        \"2.\"\r\n        \"1964388171812186376913149993916068915104358033266046539265645670705967141474979810589471961997724112800703\"\r\n        \"8529115316543316991123904985184012949857407673490871091790599594254663632479001321411805904083076775936e+\"\r\n        \"209\"},\r\n    {0x1.b770da1a7923bp+696, chars_format::scientific, 209,\r\n        \"5.\"\r\n        \"6433556541432481398269867824506950137257397824592518950158176095072875138674793491115526889401777780967879\"\r\n        \"6605880934558431966021135949322020945206483833796818557605415476191440013445527768217391316223846776832e+\"\r\n        \"209\"},\r\n    {0x1.f39e870744604p+697, chars_format::scientific, 210,\r\n        \"1.\"\r\n        \"2832349330194718344755964910746649476665600600204568207096392756190966107514967070128127995587125525057357\"\r\n        \"87164435029468024484426208026189599769787674284875448040738059630647364948722154118121000407966494490624e+\"\r\n        \"210\"},\r\n    {0x1.e0e0a24f508c7p+698, chars_format::scientific, 210,\r\n        \"2.\"\r\n        \"4701961710739764361583234915146397646495281382968205066282530980797542323891939027864029319111708327424737\"\r\n        \"68191802838701448254783534537720497984389637555995723528330666991979915889480651222080857795966332305408e+\"\r\n        \"210\"},\r\n    {0x1.8ac9f3659f1e2p+699, chars_format::scientific, 209,\r\n        \"4.\"\r\n        \"0559435735022988739506375950055455133208181539729336854703561923650777379009124468556720173111749862578532\"\r\n        \"2257531748255933833911596322305908820799861570096445826119055025147325835330550150749374733298534711296e+\"\r\n        \"210\"},\r\n    {0x1.c6c3610ba0783p+700, chars_format::scientific, 209,\r\n        \"9.\"\r\n        \"3442040337209647890991669685854348061912336916202770110402696196597648891199334466408278208881547182645564\"\r\n        \"8106587676761185019235392954314227170622662103422697806457896662312360195041629483904435021403511586816e+\"\r\n        \"210\"},\r\n    {0x1.7ab499967a977p+701, chars_format::scientific, 211,\r\n        \"1.\"\r\n        \"5562829932078268382920536644832525295632207422782065245582452948588014426345451647662593332343942693359043\"\r\n        \"673038241481043843956079532596179836219776720544331309338107673956968832112826761500035796845304502812672e\"\r\n        \"+211\"},\r\n    {0x1.f024a7d24b0d3p+702, chars_format::scientific, 210,\r\n        \"4.\"\r\n        \"0777821620060193266334318275592853491355664469989449372681167607339409531079735731049874447275001327926030\"\r\n        \"16716647774810946339317774614675085229067529724067990247981819516824938089923609051324757764430419197952e+\"\r\n        \"211\"},\r\n    {0x1.d17a4e72d8ab9p+703, chars_format::scientific, 210,\r\n        \"7.\"\r\n        \"6514883571278532762421327618640364228144540224715301472189205747128557339867683312189234312699991722304801\"\r\n        \"87508384059736711183902958629060763487777480969265193074898840268978802200642734863912959964269495975936e+\"\r\n        \"211\"},\r\n    {0x1.bdb5292735f65p+704, chars_format::scientific, 210,\r\n        \"1.\"\r\n        \"4653017873373998692763635837240196213052567229127080389032808605177662267440004448203826088699878670265716\"\r\n        \"11989504059022347366241536256218557754548387791868248488507236771978085661342065341924858769713800413184e+\"\r\n        \"212\"},\r\n    {0x1.d857daf79aa6dp+705, chars_format::scientific, 212,\r\n        \"3.\"\r\n        \"1057366810904797804142405560221570986848449184775478721300104610661909324364621635260801637633691297730614\"\r\n        \"2606261334956001762657343815208008386132632164433439367427753003032269836143809760867436748508642739748864\"\r\n        \"e+212\"},\r\n    {0x1.09c435c527cc1p+706, chars_format::scientific, 211,\r\n        \"3.\"\r\n        \"4949190530723091756757484452691047713061764919333405631459771571062584286466108807102940821362269244897933\"\r\n        \"428086956552905322744082047362472421201551180358972335992195302859220811917676779815344923699394346221568e\"\r\n        \"+212\"},\r\n    {0x1.9eeba5c11bf2dp+707, chars_format::scientific, 213,\r\n        \"1.\"\r\n        \"0912691038049117803356178427580267592987920737973863462643914057428289444459726293430782464645172800567106\"\r\n        \"4614068269963034242382343536692249482905554535118294035276777785242668121575530849252887857652227101635379\"\r\n        \"2e+213\"},\r\n    {0x1.711ce33669c35p+708, chars_format::scientific, 213,\r\n        \"1.\"\r\n        \"9415837118656972047462560151565189440197415599082992072290088348446257818753305865264569453441155760209275\"\r\n        \"6420682215115366352429937129978148876672274612581009221511800214540957300015697763603036114999165026356428\"\r\n        \"8e+213\"},\r\n    {0x1.e1545d8e4756cp+709, chars_format::scientific, 213,\r\n        \"5.\"\r\n        \"0637177196663439781619561019870795438871709899611245250407090659243999851279716213705961203818418561930515\"\r\n        \"7538837474992269641194547319074000476778106214165601301321107197389998286966901034850873709850498110901452\"\r\n        \"8e+213\"},\r\n    {0x1.87047e172162ep+710, chars_format::scientific, 213,\r\n        \"8.\"\r\n        \"2272217902289806712574994697052872917307680452424732799593585823465113857834013351649821539394746533212326\"\r\n        \"2635474976739710004492416534995515409682723302715699955709445835135054280029223866567934693473678102469017\"\r\n        \"6e+213\"},\r\n    {0x1.23af3f8b0f756p+711, chars_format::scientific, 214,\r\n        \"1.\"\r\n        \"2274403548516689934568399779688998694687353455201679256515032382815821350964662324319252582154195626101911\"\r\n        \"1914744444851247443732162368380389190137963362909858689711281895410242314171242275664220904763668035618734\"\r\n        \"08e+214\"},\r\n    {0x1.15ac6c4e78557p+712, chars_format::scientific, 214,\r\n        \"2.\"\r\n        \"3369607865235239602595370981188181022701331236283783740952780871356122483291807368512694950185999530278521\"\r\n        \"8100126394977849717535313389040668586244128270959371681379343662763181550943073897157616708891762610006917\"\r\n        \"12e+214\"},\r\n    {0x1.0c56bc2aeaa8dp+713, chars_format::scientific, 214,\r\n        \"4.\"\r\n        \"5167955247237233591793390194916065252734234001920207621805423206174532999832050143387049477371885758341774\"\r\n        \"0490893500888204453060916632880059929997600758692057070711667533170230016542638615516838907173350677550202\"\r\n        \"88e+214\"},\r\n    {0x1.1d43438f94121p+714, chars_format::scientific, 214,\r\n        \"9.\"\r\n        \"6033333170660723713494533665995506845145565126757011999790859821923401078678587263615504964380651064813268\"\r\n        \"8455104405640138686956488690833735843738678692699173055317848403275010733688269013616014923336044532790722\"\r\n        \"56e+214\"},\r\n    {0x1.22061a1f36b39p+715, chars_format::scientific, 213,\r\n        \"1.\"\r\n        \"9527229344211296204832748491391970313659298630157789538676930343069033760208197589599879702873928992499523\"\r\n        \"6608990695697929287475783764523709178533697748688667795727026551385542208539829149904757164785331242375577\"\r\n        \"6e+215\"},\r\n    {0x1.b4c6aa9857545p+716, chars_format::scientific, 215,\r\n        \"5.\"\r\n        \"8816034098212943144905329698612653757733245362298585094671457030843981001076903239943736481752491562668854\"\r\n        \"3227615161426933453966662664614700683592817343221033633872435463082384646592207974116998811001000733528031\"\r\n        \"232e+215\"},\r\n    {0x1.fc44623e54a39p+717, chars_format::scientific, 216,\r\n        \"1.\"\r\n        \"3688597232290091037311686146350196929925090931949605314752704983267092895217454050659460182543204061174764\"\r\n        \"9483581360902654275978940750604387256349655240483869060528558314415186446869377979192991730046835020867724\"\r\n        \"9024e+216\"},\r\n    {0x1.aa3773f76d3c6p+718, chars_format::scientific, 216,\r\n        \"2.\"\r\n        \"2957642846592151435765755376177922244530341123122404553904849253141951496886105258870876064851615036434469\"\r\n        \"4876401229921882367852535894131740355268022752724962483511347088356991204389511796637049601111311107797234\"\r\n        \"4832e+216\"},\r\n    {0x1.678f5a3aaf4abp+719, chars_format::scientific, 215,\r\n        \"3.\"\r\n        \"8734526664526530409778005021032912808303761236039323145190007542532559613671226628041536207090554119549294\"\r\n        \"8061656426937652467936129275838297803985174029589992670722287010428685443582031439938587866795108684422709\"\r\n        \"248e+216\"},\r\n    {0x1.75d7f7f1fed35p+720, chars_format::scientific, 216,\r\n        \"8.\"\r\n        \"0546540930957455718578031318299747350402171557957209729965273827492992431872786346244627211565631606648257\"\r\n        \"0059867837651906784602547892574447433749380278807687112313000367428241145025552940533962926786779921134492\"\r\n        \"0576e+216\"},\r\n    {0x1.ecd6547f3a750p+721, chars_format::scientific, 217,\r\n        \"2.\"\r\n        \"1236865355155595622735285863955058003135144833957450752980851351717987352331092233045600746747001260561937\"\r\n        \"2911589467181738965692960395316048567332841520376860127492605292078243192501350963954953525169159449927630\"\r\n        \"19264e+217\"},\r\n    {0x1.0a596dfac622cp+722, chars_format::scientific, 217,\r\n        \"2.\"\r\n        \"2954536079504795363105284856238370047575863823791914884578812032736986505844047299679977544958888864887442\"\r\n        \"9510566699520717810527904738260292999530216887681158564123053793542338149495936402987037020460274422393832\"\r\n        \"73472e+217\"},\r\n    {0x1.2787de7be85a1p+723, chars_format::scientific, 217,\r\n        \"5.\"\r\n        \"0938899596925395761826195681293982864054105837836524441779452341587353365337241463927684760423605672503136\"\r\n        \"4648194990232587849895833426496657214318262747057343259849722485166677259967720461632129749176545382576989\"\r\n        \"14304e+217\"},\r\n    {0x1.017035217c70ap+724, chars_format::scientific, 217,\r\n        \"8.\"\r\n        \"8746262567900002440763362220696400774677132584164637737173476368159373848157173276824865316031383654057511\"\r\n        \"6917032676271566593822293172772155148908084084969174804166746324003981364028953399391198999657379974601464\"\r\n        \"87296e+217\"},\r\n    {0x1.520d5af29b2e0p+725, chars_format::scientific, 218,\r\n        \"2.\"\r\n        \"3307227637493685583257214726151633279014217575879330885292007999084782247996596715050756662255030139058859\"\r\n        \"6805856504093577362456677740310187436887298551656600563966070226993167637974428618236660886457382117786735\"\r\n        \"607808e+218\"},\r\n    {0x1.07577e25bec05p+726, chars_format::scientific, 216,\r\n        \"3.\"\r\n        \"6312540549690454783945385341080739270186260535143481461780731546205459439009501621586362243663050889964457\"\r\n        \"8717521317394394155770001048893530262964476221970496769199098222896949679062427442307345916471566141482441\"\r\n        \"1136e+218\"},\r\n    {0x1.8e96d600a22cfp+727, chars_format::scientific, 219,\r\n        \"1.\"\r\n        \"0992397195630485393048029745193332487200099886126458682210102475632557765838176879102348740864174816753457\"\r\n        \"4339747390248704045938396673455756529493017948310435328593259601916775929373246975163112018310484034276469\"\r\n        \"1390464e+219\"},\r\n    {0x1.d58382d6bdbc0p+728, chars_format::scientific, 219,\r\n        \"2.\"\r\n        \"5896743857569934926023999906114602656980022031372964101642331196453139149010796064718269338584040985180989\"\r\n        \"5930383540586547536756864433922834466516142024080331685331856698277183140964794565531695307462460862905731\"\r\n        \"0949376e+219\"},\r\n    {0x1.dadcdbd4e3d3dp+729, chars_format::scientific, 219,\r\n        \"5.\"\r\n        \"2383553757590476797184448014939985757228795670010900864934417139896450486005364935750934931766668175207059\"\r\n        \"8627645866228627698205946727047137855285251500317423726214002802575650572352763973306837696764851555496791\"\r\n        \"0612992e+219\"},\r\n    {0x1.9368fd03b4a42p+730, chars_format::scientific, 219,\r\n        \"8.\"\r\n        \"9002795600414906199791927232216323476110578835375549513066389953710242169294374458723035137744671493186722\"\r\n        \"2344623964801905532168998413337259450227971247100831382850577108376403193310208004637163414879706007669134\"\r\n        \"9569536e+219\"},\r\n    {0x1.f845eb76e5443p+731, chars_format::scientific, 220,\r\n        \"2.\"\r\n        \"2251161587610877663633489139428920395198020363761713051397678295470620772059695788415149018775345563562555\"\r\n        \"7627774951186652618328217813712607566387789838837146661464469054252780012796887062198095184322259987517487\"\r\n        \"84652288e+220\"},\r\n    {0x1.2f3e996a88e6fp+732, chars_format::scientific, 219,\r\n        \"2.\"\r\n        \"6761461913428335040343012953219131824126168324500202272744678701909318477813814911852898730651873743175101\"\r\n        \"4250819778000778777707356970388797186374553268449512982574137361618840218361257083422429020750694479963974\"\r\n        \"5855488e+220\"},\r\n    {0x1.4a45683f62e2cp+733, chars_format::scientific, 220,\r\n        \"5.\"\r\n        \"8293141157683540715974834887298766485149159985000963569603230281649379368678672979104626030220017706653109\"\r\n        \"7808656147432158208325750276074188178479042973760179434028275087758081085312960935039135142298997141271698\"\r\n        \"72461824e+220\"},\r\n    {0x1.271f30e62182bp+734, chars_format::scientific, 221,\r\n        \"1.\"\r\n        \"0417852442068363814820825698485384800961524522909120908757655752739304052271730075835437967141175704897236\"\r\n        \"2556410412871574621805445900358411362726064828184470316985190862842986536825941080903916401459795872989632\"\r\n        \"111050752e+221\"},\r\n    {0x1.320dd43436bdcp+735, chars_format::scientific, 221,\r\n        \"2.\"\r\n        \"1607520560286884617436832975764987909020968782350630804332132448446669047539163848254962584133413017581187\"\r\n        \"8995110154484414359156320577338034565894700334587682265129267139733146651731675519638135463201585312678518\"\r\n        \"261284864e+221\"},\r\n    {0x1.d4492eadb2bbdp+736, chars_format::scientific, 221,\r\n        \"6.\"\r\n        \"6122291466551174411687116860944445324369100982280262642756357833303477524497604895010840854773188953050254\"\r\n        \"9525240799150634144193389565746980986114542904894941248987392023302371786537801869556014854016254502551654\"\r\n        \"684950528e+221\"},\r\n    {0x1.7244f0d2e016fp+737, chars_format::scientific, 222,\r\n        \"1.\"\r\n        \"0456456707732716372836616903450010002831154494297396647575080631941006542008515084980501674726954118373840\"\r\n        \"9735521916163104123960166329964470337072588711874356885215999169285494689746624286548178297048743319157036\"\r\n        \"0707842048e+222\"},\r\n    {0x1.79783032b55c8p+738, chars_format::scientific, 222,\r\n        \"2.\"\r\n        \"1319581917624134663539889420808770033902782634131428805803621274487985682111331673510171714173211779661091\"\r\n        \"1039629829277554336401367654542736793095757758840646818278190119418471508961695567736328280225796749325291\"\r\n        \"4289311744e+222\"},\r\n    {0x1.0b80e405b47b0p+739, chars_format::scientific, 222,\r\n        \"3.\"\r\n        \"0217342386813301969860860986751309707281313502487263088112402249089284054700529175250024750860114807369896\"\r\n        \"6248431572910876790362634732708648184340418996248893299378516377325328005094981174420298805174626877720830\"\r\n        \"1410582528e+222\"},\r\n    {0x1.8c7da56899335p+740, chars_format::scientific, 222,\r\n        \"8.\"\r\n        \"9575645467295136187005193467472727461077360558615067094573133419410373043926814649879385622594635237376400\"\r\n        \"9489966183043631980224259182358063657298096645467156548473441179528400778016541967929795075170853359231309\"\r\n        \"1309174784e+222\"},\r\n    {0x1.642033bd8f523p+741, chars_format::scientific, 223,\r\n        \"1.\"\r\n        \"6091267209523207841500022910819655037186962930388881490129343819406509425737191896112868244974277012096011\"\r\n        \"1038467987996264830181742307740591777712020726286133123519809683141290064198294007482197011860262930053752\"\r\n        \"28012920832e+223\"},\r\n    {0x1.9bc991377fc41p+742, chars_format::scientific, 223,\r\n        \"3.\"\r\n        \"7212585176976675247766032687923578065346254909866031007251748946253430087753480170571456754955495909624074\"\r\n        \"9651478094351885683772686198754775408289071997059939634841840773532728510497337830251876570543429013738299\"\r\n        \"94915037184e+223\"},\r\n    {0x1.84a5ddbd8f438p+743, chars_format::scientific, 223,\r\n        \"7.\"\r\n        \"0243016720094258380256629121268145953304708681155416711569265396443279458019573583115401564863133375895579\"\r\n        \"6859096569951771745018753431225852318075313303115723130792925295433351462461646612188904437861868080430293\"\r\n        \"85978052608e+223\"},\r\n    {0x1.812a1f8314ee5p+744, chars_format::scientific, 224,\r\n        \"1.\"\r\n        \"3922688598771825923497467733635356583331381499542930429409135947927645522102501156000547692907375069729725\"\r\n        \"3424086286852391418475312237447199829780274705926539967622748047191727176699933588455209360496819723139752\"\r\n        \"620522995712e+224\"},\r\n    {0x1.7c836a459d446p+745, chars_format::scientific, 224,\r\n        \"2.\"\r\n        \"7509119604975913078844457489452846297586538028776489989683293722626191306788427967352108424504310704212292\"\r\n        \"1510358887509501308820023222099507333400854507964230709783428734264017318871243935903761542528456933532980\"\r\n        \"757779185664e+224\"},\r\n    {0x1.c6fd7c21c37e9p+746, chars_format::scientific, 224,\r\n        \"6.\"\r\n        \"5786808641025772557077870195899834765281585648313448823239221916239976768108478547517814419358983494868812\"\r\n        \"1961792138548213478053349624498031839007814676289536377130610928273664129421374065334016220842662500981104\"\r\n        \"964844650496e+224\"},\r\n    {0x1.1910872193e4ap+747, chars_format::scientific, 223,\r\n        \"8.\"\r\n        \"1277977211993122424091609085648747668771481082427919683807484929612071497922264732986002271464649933855497\"\r\n        \"5692723623437402191674871832522296720935189472508557921192974362413118660403885429515640962582691368617721\"\r\n        \"56520890368e+224\"},\r\n    {0x1.e7a0dc9273731p+748, chars_format::scientific, 225,\r\n        \"2.\"\r\n        \"8202379495294703177628908917234915516770485003946069942560364371093102020788444507236665052677625643822941\"\r\n        \"6169845844057611904319010796043241408830954687945583175717139104067419835881477508963222172390156601957893\"\r\n        \"5599446360064e+225\"},\r\n    {0x1.2e360651c6029p+749, chars_format::scientific, 225,\r\n        \"3.\"\r\n        \"4957237382552114527444821786045279558301101694570507155653230518370750977939158690454197498146827073453937\"\r\n        \"9357041460767046371899223744833323015008806175316949664357009319736636567971463779695812041226637688151746\"\r\n        \"1737018753024e+225\"},\r\n    {0x1.228638d331517p+750, chars_format::scientific, 225,\r\n        \"6.\"\r\n        \"7210829125928928841973058964356798018780827825223815966852813461948177069149360555141393983156164735751723\"\r\n        \"5823818387673642184234289003869236885546152556635441516644651051801943950188162055930855976973404579926200\"\r\n        \"1243453652992e+225\"},\r\n    {0x1.daad7920d9184p+751, chars_format::scientific, 225,\r\n        \"2.\"\r\n        \"1962690587113569953311452822660049421250275405789941183600119604625335444037052147400073579549578682185130\"\r\n        \"5152933370080751805332495292333508751983579807351914859852157598709561299138622150754860897482836680616912\"\r\n        \"0536099028992e+226\"},\r\n    {0x1.fc367b64a56a0p+752, chars_format::scientific, 226,\r\n        \"4.\"\r\n        \"7028636831137251940639609734997478916542490894502589016068679868179283595091571311071666311276887443785237\"\r\n        \"1869111339313056178387759693383276951003950803279301146070858225448179998833261120984944413090840062524150\"\r\n        \"55825045815296e+226\"},\r\n    {0x1.f6e5591a0bc39p+753, chars_format::scientific, 226,\r\n        \"9.\"\r\n        \"3073245175425146975822441451765732106763977056834211888571665521455385715741928365989145250785190410896620\"\r\n        \"8744529206415406616189034448656245464907780501706412364806538156020642668889309046124343486486605786818551\"\r\n        \"08771838164992e+226\"},\r\n    {0x1.0816210e741d9p+754, chars_format::scientific, 226,\r\n        \"9.\"\r\n        \"7751374002327882454619792493289953471219690074481970634484616771549473550854791181283295264817782922352706\"\r\n        \"0613265512877596875929151767224750454913626387325900591615071953953614788294221399314042063755887285735218\"\r\n        \"07551598952448e+226\"},\r\n    {0x1.bf4ddbb28ff78p+755, chars_format::scientific, 227,\r\n        \"3.\"\r\n        \"3113849645859590322659629554085610294468426876665362529283613898266559089354337883713337939831576365351236\"\r\n        \"0939528196193498528380921939458491007462238558163393032268756159540201736116486880617747362901481164602465\"\r\n        \"147231123013632e+227\"},\r\n    {0x1.22340a9f27993p+756, chars_format::scientific, 227,\r\n        \"4.\"\r\n        \"2967400896826536936196852047787877842228795494777580547365027410425875181924576423119919483371532282787556\"\r\n        \"2232455935151361784331881438598361263038663101257927399418034873919694038118043368561692189760672875642217\"\r\n        \"165115690582016e+227\"},\r\n    {0x1.c854c0ff61dd4p+757, chars_format::scientific, 228,\r\n        \"1.\"\r\n        \"3512844888942568633431706707369991062805896299407273613528709190217372828138600035487313614110546506130175\"\r\n        \"9796936623799549072454757775050349217072188653452631708762957644242007121213071284462310050544450739174836\"\r\n        \"8719761509449728e+228\"},\r\n    {0x1.a7ae27d0d4485p+758, chars_format::scientific, 228,\r\n        \"2.\"\r\n        \"5091984687837548077310743346070326057115446256710579709952705124606433752646975200990447388088323383562163\"\r\n        \"1791334030723843800987709897669729364377875079217964383322434056974132347179670171459221776205857678918119\"\r\n        \"2769609255616512e+228\"},\r\n    {0x1.63661358f7264p+759, chars_format::scientific, 228,\r\n        \"4.\"\r\n        \"2096173288585500632051722258218722470145623127596758211743914667597744472316325964343315995556084458514941\"\r\n        \"1748410894323120068197403508126028905912753730931116082740279064580499643254386503570744343955198820880052\"\r\n        \"0321808449142784e+228\"},\r\n    {0x1.0300bf26fd68ep+760, chars_format::scientific, 228,\r\n        \"6.\"\r\n        \"1356615328552858693888999090215849979187700860450814688847091714791407873355306852037699120732258617281579\"\r\n        \"9763661313927450726589049261192700026203286795204601573021551354084951812528474694748915250828796925349007\"\r\n        \"9718987125489664e+228\"},\r\n    {0x1.838123317bff2p+761, chars_format::scientific, 228,\r\n        \"1.\"\r\n        \"8359608734240248755170094893268138007948817195962710840103000502154170370457597688022569251293279952823745\"\r\n        \"1289290613961419291935917276298318231224132928876145371187143351232976843971969552091754284038251401659784\"\r\n        \"6683942400294912e+229\"},\r\n    {0x1.e3927b4212b34p+762, chars_format::scientific, 229,\r\n        \"4.\"\r\n        \"5822423033700377725172658938850396114672469752451147750170962585518435834434687897863209300864827416894321\"\r\n        \"6215347383783451339038810851986217331962212638964904591583480945245942892560066540573272482646939275681829\"\r\n        \"07234209828438016e+229\"},\r\n    {0x1.08cedaf963229p+763, chars_format::scientific, 229,\r\n        \"5.\"\r\n        \"0185456014215323482120364143447038175745222379826156921731023733604628540256614889772841814066930008300327\"\r\n        \"3602910676234466758021841379319937225524242500601759755633396331540614052726360755893861226672066982543099\"\r\n        \"97744334718369792e+229\"},\r\n    {0x1.91fca0dbce025p+764, chars_format::scientific, 229,\r\n        \"1.\"\r\n        \"5236616837822261183594983552804621208103872014884446947072618527095687605227859507741200359812256479924153\"\r\n        \"2689156481633910812569880086596174896168270019967462909809080424290632874693002515466863422011218075068746\"\r\n        \"26551770689568768e+230\"},\r\n    {0x1.5297454425c1bp+765, chars_format::scientific, 230,\r\n        \"2.\"\r\n        \"5667407186328552576827203298721081448834674879829348839914553768737074771050151832434114399565319657282046\"\r\n        \"5081841530375765042480824934041898171446714864392159245126640241641295485518295845301454553991993419235944\"\r\n        \"180577661756637184e+230\"},\r\n    {0x1.b0f443954c717p+766, chars_format::scientific, 230,\r\n        \"6.\"\r\n        \"5641519599209613942307145023783310917380706370901865075235561351321476204433688375582146368946539399641323\"\r\n        \"7573577183096836484536070806868174940599051696594494416938549052440323251272405635299695291423546052625569\"\r\n        \"523937164155420672e+230\"},\r\n    {0x1.393f28adab23bp+767, chars_format::scientific, 230,\r\n        \"9.\"\r\n        \"4984607723057801580828156622001837886199969801689635785008855370806264451372807995278722828203588180680316\"\r\n        \"2319437032081291932870713261870296357782603566084402478282838349746893860544685330407950273115161626125911\"\r\n        \"382367174150586368e+230\"},\r\n    {0x1.6ccee9de5f09bp+768, chars_format::scientific, 230,\r\n        \"2.\"\r\n        \"2123883505536182924204250993128741492319926155984738095126263216900091278131730034956679001909437190714141\"\r\n        \"7470461265484571124755535821405407453375268326715135026269092158112467360893312363210642700024821136157707\"\r\n        \"781468541960585216e+231\"},\r\n    {0x1.aa7e5f5e5358cp+769, chars_format::scientific, 231,\r\n        \"5.\"\r\n        \"1729616918294319332482875790573450340137448584291350718627223414058673740038801795890236140282159619607098\"\r\n        \"5515906823203449053186707426569450398359311206667015703761833975688951025632779587529078016359349709485099\"\r\n        \"7541669026700197888e+231\"},\r\n    {0x1.cfc195e85b968p+770, chars_format::scientific, 232,\r\n        \"1.\"\r\n        \"1249841891755881470307288574633491096320821816061087251084879090444810632807379547386169351345276341424639\"\r\n        \"9499235117872522039812782433931100318509086417351386739093630575176672353913163070368040519097536895401722\"\r\n        \"98591886940406022144e+232\"},\r\n    {0x1.09d290fc51ebap+771, chars_format::scientific, 232,\r\n        \"1.\"\r\n        \"2896696221903865795055215082983141009246370690618565325493632504690915915499930832192286164683816102053362\"\r\n        \"7949425734201881702075904632943241830210311449479218601195277680189168934407630942804219498765833001560982\"\r\n        \"52472908447697862656e+232\"},\r\n    {0x1.ec76d7e7f32e2p+772, chars_format::scientific, 232,\r\n        \"4.\"\r\n        \"7784976871034017657828998291078668236623487242644644914264847523004671605405345205060382664131477986646772\"\r\n        \"2581936925994293581013028451474231026238972770111773752319751131971234336498412185333726667594294627984138\"\r\n        \"99670124201699704832e+232\"},\r\n    {0x1.d3759f7354154p+773, chars_format::scientific, 232,\r\n        \"9.\"\r\n        \"0717409462351582512879207312640879225431123157848376459340362691044319863360475833972671151727153309116995\"\r\n        \"3613299761397581849446381550581035600067671862940836812139863996838391322873371913400669773299857668038200\"\r\n        \"23594898696504868864e+232\"},\r\n    {0x1.60b6f9a6cb668p+774, chars_format::scientific, 233,\r\n        \"1.\"\r\n        \"3689900648819599419991078858656869356050765416475088609781162654859485781989429631408630164550721129967664\"\r\n        \"6675163827600656199755269975930968054801793732987317632393636500462380441458195075095212933235225588518841\"\r\n        \"565183013015978508288e+233\"},\r\n    {0x1.a3c77db35f695p+775, chars_format::scientific, 233,\r\n        \"3.\"\r\n        \"2585744935086660180085537685216732331026663391625900061588234651372494329208446661750343881062028179841303\"\r\n        \"5000393796104926802636017982724900777294096366223520808626483957189965149721621399989255737668072734392114\"\r\n        \"018704118688163823616e+233\"},\r\n    {0x1.eef5de3f62c58p+776, chars_format::scientific, 233,\r\n        \"7.\"\r\n        \"6843501087185603259794811375183224825835123024830390834443345796985216905971043462468467825065825145047912\"\r\n        \"1257386904850155677148759667711046827420670638625636122992849194055661087738240939909807864958747679917006\"\r\n        \"112904357735921876992e+233\"},\r\n    {0x1.51ba28979a120p+777, chars_format::scientific, 234,\r\n        \"1.\"\r\n        \"0486551202848853375181699262277440337923945323242630048499280070068758124711990691937553067092163306379919\"\r\n        \"0422222904119665181775876352024680491963078704811585628707843147629411479151750523561295059610495989927852\"\r\n        \"8033246763355767570432e+234\"},\r\n    {0x1.9fd38f9f73f2bp+778, chars_format::scientific, 234,\r\n        \"2.\"\r\n        \"5823121007464567046885104979832409380872880762161596664634031051456893788764672118543197766647423252524717\"\r\n        \"0307633255407546495228163592433100635899361801211866063496903835777314254112040433160116491010111385123689\"\r\n        \"1366615266610552766464e+234\"},\r\n    {0x1.2fd85095f4029p+779, chars_format::scientific, 234,\r\n        \"3.\"\r\n        \"7737986251795181095835920164939564313633089884412570875383489848740579279500977251032489962612862718014459\"\r\n        \"5041934451207574079071891443012396619181365931939022192089253926699566323452121788658413861452700408983211\"\r\n        \"6221541501954953314304e+234\"},\r\n    {0x1.53a0df58b1308p+780, chars_format::scientific, 234,\r\n        \"8.\"\r\n        \"4364679691797806256313772114875593122899646244438036914347789201255815561109009718495350779943521128881259\"\r\n        \"8661124923431217585862647327109933253121360196158567686349248544337235420003592506010834170882608023751747\"\r\n        \"7068626899846633095168e+234\"},\r\n    {0x1.7853413f16c1bp+781, chars_format::scientific, 235,\r\n        \"1.\"\r\n        \"8696054522844013509664557489900659356572827490676017450916178967106311547779856491307188349542101112658005\"\r\n        \"3098413303218486048823934732760541446158555795168870076775230759271001968117088989630442719457652896597455\"\r\n        \"96271845019699344572416e+235\"},\r\n    {0x1.290f64c0a0f5ep+782, chars_format::scientific, 235,\r\n        \"2.\"\r\n        \"9516238595214877391019012136241245927442169099813764219039877773719979680097489392174641389610352922713862\"\r\n        \"8902868757290932493840034681749848237707039012241717603398087699376749157835378926747231022224572282910928\"\r\n        \"54470262186353488822272e+235\"},\r\n    {0x1.20679eb9f303dp+783, chars_format::scientific, 235,\r\n        \"5.\"\r\n        \"7312462936233849305925187920881714268750677533351388440477657151051809265440304245372238020717328177593142\"\r\n        \"9064721353299156284133767944100816062524710379859644110856014276632780205150657944504841760675017542719552\"\r\n        \"22237400714209314996224e+235\"},\r\n    {0x1.0ae6422a72abbp+784, chars_format::scientific, 235,\r\n        \"1.\"\r\n        \"0607775243868115711926825104702485099576960722191170461588016074972416686189135822557494910590354927785656\"\r\n        \"7083850395248216549451922015356056518653041712884366536987636471349052017628975047519627186995177400422200\"\r\n        \"23553187720638060560384e+236\"},\r\n    {0x1.1fae68f6d3324p+785, chars_format::scientific, 236,\r\n        \"2.\"\r\n        \"2867476796644975342055548204548289275435560183835346401207452752101236086799245334489159236317267957184623\"\r\n        \"4879581744011427460271415601344757392670319978490800104037484315382074503549454151575728513063134043673357\"\r\n        \"388907554946695678656512e+236\"},\r\n    {0x1.82f324bb4860dp+786, chars_format::scientific, 236,\r\n        \"6.\"\r\n        \"1516444985886181727357453221116535473763949845453173834960261690368544010549543489487454308312467023024447\"\r\n        \"0967757706399429039098458006133041212560333975577682232332306318262042874572315900263924809244346215012040\"\r\n        \"747327614291824074555392e+236\"},\r\n    {0x1.e9086a4bb3d72p+787, chars_format::scientific, 237,\r\n        \"1.\"\r\n        \"5549079171535267166568033413417870991744231184791835809719299710986005512799425681538276698346509703305805\"\r\n        \"4617203537691090821963960692442929762603678178038455360528641178678620670023850492270840173539406323710317\"\r\n        \"8254440605458957894418432e+237\"},\r\n    {0x1.d652f229fd243p+788, chars_format::scientific, 237,\r\n        \"2.\"\r\n        \"9908440313383278368912373533975367049717676756972612940984767586749475466860589818042252470421233810163668\"\r\n        \"3749783560695211165711422320509360631385450815428687040737896708577856392117557493106122006893865207379782\"\r\n        \"6470503447254389439332352e+237\"},\r\n    {0x1.4c659adeeaf67p+789, chars_format::scientific, 237,\r\n        \"4.\"\r\n        \"2274995598601972032222337678751235842978225817536418737171989377903748469688843485647399209132115179868048\"\r\n        \"9240050082237999694500369311211906203822141019030006735614618819688608441342428976843756087051623925917957\"\r\n        \"8450042045898033696079872e+237\"},\r\n    {0x1.101c96a3868a6p+790, chars_format::scientific, 237,\r\n        \"6.\"\r\n        \"9215567271733196558872063527194708064680481237227097579729986091275194772991933509554387747175408105228081\"\r\n        \"6233796919158801743026047613067889494775889443810654472404347304752284383575581614991240505067988050840315\"\r\n        \"1299257176295521537490944e+237\"},\r\n    {0x1.2feaa8c33880fp+791, chars_format::scientific, 238,\r\n        \"1.\"\r\n        \"5461124618479105464453483545545961077350335978041066308476434140961798663738305852609528577253177541004264\"\r\n        \"0674921875366981747217115434254049147564405886187748105641346990648763559992836126028859532577309470093173\"\r\n        \"81536957859327362761490432e+238\"},\r\n    {0x1.1c3506245949bp+792, chars_format::scientific, 238,\r\n        \"2.\"\r\n        \"8916888598976405055845467699371144108721910078547909542725979622689182053188545464466646296396805653806317\"\r\n        \"0836036200471157333970893400057175239052338998950252682537126124003318313408027335611478030392005373128576\"\r\n        \"18649039581864838165430272e+238\"},\r\n    {0x1.a53b315cae3e6p+793, chars_format::scientific, 238,\r\n        \"8.\"\r\n        \"5717036974323367762593030056611124249261619721065331924115997871817897838109316309892238746944064174685523\"\r\n        \"2984150458218061427298439892262170298880469338557863138712770368068789767923621713438853252396510913427465\"\r\n        \"63574845645114888312324096e+238\"},\r\n    {0x1.745bcebb9e730p+794, chars_format::scientific, 239,\r\n        \"1.\"\r\n        \"5154374230926382629786617926068462189415932748214593100290129423498906597965529492278922108386430582250567\"\r\n        \"9230720413708559249356818004688086218479660300094476630990188973104196131751327920959159056462338543462652\"\r\n        \"696067619761155130246823936e+239\"},\r\n    {0x1.ea5c1c862f610p+795, chars_format::scientific, 239,\r\n        \"3.\"\r\n        \"9913651025539569774148436777915199443437437903111488693940333966405933913450275851962963503672699904713354\"\r\n        \"5044278747331448497501833332967880884570497477720375620658674167625733285219550009450498956408406531707921\"\r\n        \"573265195554001334403334144e+239\"},\r\n    {0x1.fe4e1de13002cp+796, chars_format::scientific, 239,\r\n        \"8.\"\r\n        \"3074269080682828035403659469788418623579020747406133262410756205289227611748578907682329529854919761832672\"\r\n        \"8676047997399722106302513181726459927428568219275795529707364568555469545316952865939501666657645380373164\"\r\n        \"457301122656345267900514304e+239\"},\r\n    {0x1.7cd4c04d040c6p+797, chars_format::scientific, 240,\r\n        \"1.\"\r\n        \"2399350584739398620370668363277739542438309813212305563315742903024940157069213691930769271579472323729116\"\r\n        \"2131263255507441554972403061556545670837455397804297967092115183139920246349041107552795320281845170460877\"\r\n        \"1159860186649204109959233536e+240\"},\r\n    {0x1.5f73b78bc87a6p+798, chars_format::scientific, 240,\r\n        \"2.\"\r\n        \"2885616582924816530784070073813311039250987450317110713303432962050972937344928770752692668293089194605529\"\r\n        \"0608211137899351314019622136717256892539500984709059963064994229906613395884507758858205052191954459822151\"\r\n        \"1781291374084313853894590464e+240\"},\r\n    {0x1.b69a2039b5067p+799, chars_format::scientific, 239,\r\n        \"5.\"\r\n        \"7121188043661456678328008872506093548138903663377281285041608520095637609485982476407075424240402729445877\"\r\n        \"4339604678663923908333018208735883952749660808133865118239612527062177749104161441575379075297379081293147\"\r\n        \"900960085778554829588660224e+240\"},\r\n    {0x1.c9318f56346cep+800, chars_format::scientific, 241,\r\n        \"1.\"\r\n        \"1908490153821644619283158093528109987426655170996365765458354656665026592260831211660273736320197228824006\"\r\n        \"8807963045425342397876010784789085355187514744433409506006637286593902764710295855833163921908212729191008\"\r\n        \"90475871653745707435922817024e+241\"},\r\n    {0x1.3401abd9cab1ap+801, chars_format::scientific, 241,\r\n        \"1.\"\r\n        \"6045249823083895881361713712860563391171156578164991575414289295334729737454938352044948456680926597969686\"\r\n        \"3050925745120889688762125639047773240430867525918502288211250081770600066608865761538925445119403248848218\"\r\n        \"31835718200815935339827822592e+241\"},\r\n    {0x1.9451509f4d594p+802, chars_format::scientific, 241,\r\n        \"4.\"\r\n        \"2124934926639872820698705164077561033150645322246951472983374360250084754509456140452771893891811650082700\"\r\n        \"8476703202083427652946465999321227644609061896995232601668165659507537285142883393178871950813985101339523\"\r\n        \"80834671272890871310960295936e+241\"},\r\n    {0x1.693311304ae2fp+803, chars_format::scientific, 241,\r\n        \"7.\"\r\n        \"5265104770080295332178367065129652045456275043609132847824336608669067826017952400204955940094293124054257\"\r\n        \"4852475785253445301600099905150226104745436671874010092945098510190008435762604016218987540554515377647101\"\r\n        \"33944076096837889877193261056e+241\"},\r\n    {0x1.df089519e462bp+804, chars_format::scientific, 242,\r\n        \"1.\"\r\n        \"9963765370119968481634926026034374951277940085239248593420718947575091589129383509024279171159858004359286\"\r\n        \"3504688558306636678159262921707469490960871925725729662377046505733704375416744931077775146683786618929534\"\r\n        \"332115383984329784377263259648e+242\"},\r\n    {0x1.ab89beb8aabe9p+805, chars_format::scientific, 242,\r\n        \"3.\"\r\n        \"5635374969254025430568585517027217792799444908420355818342861726178161794532723410749195781712690824031079\"\r\n        \"4310017343869812907100148774183849097884081288715289464770501559880487864305271735159038213120854399040209\"\r\n        \"060513455780040766296470585344e+242\"},\r\n    {0x1.46cc5273da02bp+806, chars_format::scientific, 242,\r\n        \"5.\"\r\n        \"4477366708058466566655134611672790509037546172460934890613623870129442401676517206783993128970039181958036\"\r\n        \"2426384544674351131359326804752571414576642144329305895853634962921675886002767155811657977044320345585688\"\r\n        \"095697352462571132700896264192e+242\"},\r\n    {0x1.4ea090983d564p+807, chars_format::scientific, 243,\r\n        \"1.\"\r\n        \"1156495207540661418253164809185472162272891713234991494380662613296616531540865244596484276497868309719437\"\r\n        \"3617177643665645519840787000240301424692793361517832839191225386853868937776276743037203564445163231623308\"\r\n        \"9241962428253771093052393259008e+243\"},\r\n    {0x1.629961b8658adp+808, chars_format::scientific, 242,\r\n        \"2.\"\r\n        \"3644722323729202530632376908724461464007109597368741902538920716759797234401817824648073587323994699955712\"\r\n        \"5648264452732032858395869340884384877054134253129761707648394212187240812816821311542228673662308704897899\"\r\n        \"583239538170340844922017415168e+243\"},\r\n    {0x1.6fa68b72c2677p+809, chars_format::scientific, 241,\r\n        \"4.\"\r\n        \"9029985515120054991219793866924216920750872251953397307190125386871656376547215435820610121121629918570469\"\r\n        \"2932229965036512490045144581731082612773985577453660692576488506973338654493547303963526703015702844647889\"\r\n        \"92102255616474420568439914496e+243\"},\r\n    {0x1.1d5ddcb816159p+810, chars_format::scientific, 243,\r\n        \"7.\"\r\n        \"6113157409388193238729532718952114744786351715842762343118286303360666708027503785066003043952596584492730\"\r\n        \"8041709547073320956899512551777237915036724122719137575454507464793196061695217074073096327096395937968822\"\r\n        \"3847143281208387082485955035136e+243\"},\r\n    {0x1.19fad786740bfp+811, chars_format::scientific, 244,\r\n        \"1.\"\r\n        \"5041965738192946200722212939761911313149957245913376893384443835763146165414530116096641460821289392931044\"\r\n        \"0630078704558810797169674663860330303705781820921368183064402339199493404910007111083399854517304573251517\"\r\n        \"69785159894859363338510334427136e+244\"},\r\n    {0x1.3ae2c0e08d1efp+812, chars_format::scientific, 244,\r\n        \"3.\"\r\n        \"3594604205776399571547735562723174528528296198287880206491449261321063694267756459118569069896694466315807\"\r\n        \"9060394196735833929677656923702443863850476515869528665652443334766758399236901631693454061508781940650430\"\r\n        \"83480115234578972233121652539392e+244\"},\r\n    {0x1.07a5540e2223ap+813, chars_format::scientific, 242,\r\n        \"5.\"\r\n        \"6255810937325722364168544190599919919944988115599126260371359454766948641453922395581588351836311443942717\"\r\n        \"0074877286708288570679911572171655245727999618768162781235182605194711519538182992458325101322631274257458\"\r\n        \"626935171995388819171019063296e+244\"},\r\n    {0x1.956e83e8c51e2p+814, chars_format::scientific, 245,\r\n        \"1.\"\r\n        \"7301916345499639352289638577061978996058784043095091824698294699979622683284037830111746691503650855841047\"\r\n        \"6999939726846771500166314131694028889035553778607001781013613472061022354416879057893328192437062066419536\"\r\n        \"392847325840865191718208676036608e+245\"},\r\n    {0x1.b8b498637dbdap+815, chars_format::scientific, 244,\r\n        \"3.\"\r\n        \"7614467878694320040847306920809823505948332555470424652166458420295692303534588660807141398391045858309584\"\r\n        \"1413967874817042173260887173028178444373791701703929714447150030566240591625957163983380294595179856309594\"\r\n        \"72307970883902414984099829645312e+245\"},\r\n    {0x1.f84238ea4240fp+816, chars_format::scientific, 244,\r\n        \"8.\"\r\n        \"6077546560347295614272909918464340647673924012472192336720324021049311703284577534957499927813020888938512\"\r\n        \"8773917946855872595697344028186679078946097028129784645488986749964802103215644921535921267141777871369472\"\r\n        \"69800165590575130107216339664896e+245\"},\r\n    {0x1.52ad71035d8cbp+817, chars_format::scientific, 246,\r\n        \"1.\"\r\n        \"1562529259815605130236730296100290106123624875586685093423585578874668718454767210057255513612992306754618\"\r\n        \"7342013693230898318163998173292325928633817009622432686125928501176669069326632568840932966409440904636285\"\r\n        \"6182501376346373114543815180419072e+246\"},\r\n    {0x1.48fec7d03fd3dp+818, chars_format::scientific, 246,\r\n        \"2.\"\r\n        \"2463948643754039805273266514856692451977272866202583855569230043159032686041759389714588747353194691583147\"\r\n        \"4452902908475707849749179375503315481022788227755493105616171789512052603092214593918819436824445346786518\"\r\n        \"3485659375409167115085108199030784e+246\"},\r\n    {0x1.cf3c351de21d2p+819, chars_format::scientific, 246,\r\n        \"6.\"\r\n        \"3259830327537269189044662519669296931261791172364221329361593637019414071398195080337671514053830368262017\"\r\n        \"9485254074733712535986358581460970535047746807357544820196076947637608204117489620214881737780122049288515\"\r\n        \"5229266752654874064585229395296256e+246\"},\r\n    {0x1.04cfee010a1b0p+820, chars_format::scientific, 246,\r\n        \"7.\"\r\n        \"1233523026483118129409774865992293632616547759253418297613685912737518499550086903830721434337398871647481\"\r\n        \"6681062540280955271611695843215620922951427058580870118796718799201266852043478989988290818085278143313409\"\r\n        \"0565968448841286218356104624078848e+246\"},\r\n    {0x1.16ff034ddceb6p+821, chars_format::scientific, 247,\r\n        \"1.\"\r\n        \"5239989788883321238503418080232313766405266685350202354474518823147319501930684180240795371555272910032577\"\r\n        \"9049954354848675448536122534205586842891052665122265107971822539494506600965187819614128128697568579627352\"\r\n        \"33879680013030703241961011578667008e+247\"},\r\n    {0x1.87edf8de5b8c5p+822, chars_format::scientific, 247,\r\n        \"4.\"\r\n        \"2817815958852792009690939837540692667657942500261648858225755618432069627819656317285479347915329201974236\"\r\n        \"1774090371005988644354729115809575512603753519692608035351355704445179917631181514402455534288096929879543\"\r\n        \"01004090162477967508729042667831296e+247\"},\r\n    {0x1.669c114e230f8p+823, chars_format::scientific, 247,\r\n        \"7.\"\r\n        \"8355308511237709530930810281471556447977784106662035440600564389370223232176896921185631429562490325760418\"\r\n        \"4040678795337449978775441323897003748541667506968239033335149617631780016082197756792118648804974130157841\"\r\n        \"59154833577142573195961256835547136e+247\"},\r\n    {0x1.58d031c626c98p+824, chars_format::scientific, 248,\r\n        \"1.\"\r\n        \"5068166821885369761241532108175293171326902216427944067512350661456054766473593312346835595474357273106155\"\r\n        \"0443352975975022048534417756037602834654175485189498865510882476319162081279903462387165411735576127964682\"\r\n        \"682475050190476626348021385449701376e+248\"},\r\n    {0x1.e34e95fb1fd7cp+825, chars_format::scientific, 248,\r\n        \"4.\"\r\n        \"2240545805625662788005553229538307210864857630306634011231079027836776827258668243309661298916332821350400\"\r\n        \"9899722075244068756374649547572873002969477945909958513824369325732383525908290312550258447997151554563028\"\r\n        \"850116547816966945718645194204643328e+248\"},\r\n    {0x1.63711d42e8969p+826, chars_format::scientific, 248,\r\n        \"6.\"\r\n        \"2130524104674504312709824639557523483551730337458850149335416915855240137673709836071529680319293067420338\"\r\n        \"4312317758999145612684331260582769097598430580201878319065162034573403657954549033776399570698036990728014\"\r\n        \"309370022216068485544971660370640896e+248\"},\r\n    {0x1.badc307c28bf7p+827, chars_format::scientific, 249,\r\n        \"1.\"\r\n        \"5482212253078290137323515076998672008506438386926224329269661187742030679492468266492921375476288647815377\"\r\n        \"0979107822881541818928344505816759457570487597227978430112594020575530604815278455258654123939844316414811\"\r\n        \"2432800361003761689682808487570046976e+249\"},\r\n    {0x1.0a9ffb84993f8p+828, chars_format::scientific, 249,\r\n        \"1.\"\r\n        \"8642201656825735032487045445737131264202090391740882730526180997719415020580181710931406700397570032582529\"\r\n        \"1725810794370004636502368683142428033504081712262310941760777903706494337172156236906134798389170572882188\"\r\n        \"1800728029892690586075143474451054592e+249\"},\r\n    {0x1.b4b37e4289e69p+829, chars_format::scientific, 249,\r\n        \"6.\"\r\n        \"1067588584012951929907635132587529022793422163084759285705466684191965135342417650787056752222825478137672\"\r\n        \"2272607455634492474756781990175669040977221401874388780115943698876864915101026751851198210499562900472675\"\r\n        \"3068810448767555137722058562680651776e+249\"},\r\n    {0x1.cb3dec22a459bp+830, chars_format::scientific, 250,\r\n        \"1.\"\r\n        \"2843929885114427205223509904897308175928651557268642545106012550730315214169113727124053496729076859906621\"\r\n        \"7058048465589552560767724767960979474433908542662650232168843419395326916423547105760665888316678476707804\"\r\n        \"15959665868837863306341265182751195136e+250\"},\r\n    {0x1.540046039353bp+831, chars_format::scientific, 250,\r\n        \"1.\"\r\n        \"9018081890692326060832549932962923793803050200930597137121291666343311907659231774649708656240141439885377\"\r\n        \"2995852889168534092009700171523193933546858525442546217623145476647138397975513103720466511762535730409839\"\r\n        \"44733060790144155006131906575106834432e+250\"},\r\n    {0x1.ba087c8abd72fp+832, chars_format::scientific, 248,\r\n        \"4.\"\r\n        \"9450566101263624434421552691226627188006160690582878226879528430254220763518819638978711170059796369024989\"\r\n        \"9822324647556645340449063345238710759902438168656167462547098730749436504815208438476002132344287060560190\"\r\n        \"686566675986547104771240121885261824e+250\"},\r\n    {0x1.c630424f784bfp+833, chars_format::scientific, 251,\r\n        \"1.\"\r\n        \"0162079024060941902752986278592898244854037810570970835536347253884184405811222585986918355510523699760710\"\r\n        \"8720562738620020129036885402684555944864458354638982574226703061602498417867883983480388401527947236142554\"\r\n        \"900694304483602071758702926508016533504e+251\"},\r\n    {0x1.85e91d57faa7fp+834, chars_format::scientific, 250,\r\n        \"1.\"\r\n        \"7447831757371135971868471755808753449591436173823296107480817640339909863589495003745228117499203382520206\"\r\n        \"9539324151967771977343828509557409552448094340742113501911628551355358681804381630523888669439044433379659\"\r\n        \"77036968476816664586097351991475830784e+251\"},\r\n    {0x1.dd2774ff825b7p+835, chars_format::scientific, 250,\r\n        \"4.\"\r\n        \"2703660170962130244303048163026444835147574558041973970175978956362702386703322527155179489291238033872231\"\r\n        \"9202066539552047310868912136192587125219809728800730236760671881009425615956313883933879641516247520243538\"\r\n        \"50540715761104916193393419547242921984e+251\"},\r\n    {0x1.7fb49456f0d6fp+836, chars_format::scientific, 251,\r\n        \"6.\"\r\n        \"8680635961010054778547732613484647985247018036381086963058134686484342338181759398735578464286990961512242\"\r\n        \"3860524082353077746568202335565206880392172011863842924238725950600524821099164719063099983937577502742978\"\r\n        \"451517889868589043980171636988524363776e+251\"},\r\n    {0x1.fd01873113f1bp+837, chars_format::scientific, 251,\r\n        \"1.\"\r\n        \"8221716304153650272213764159000693884485126489166324070442650059724346984915036736532717255211886200617045\"\r\n        \"1559140970097704185891051060148919646916253880568664978507007421126009924560566886603966798872120047504227\"\r\n        \"498682957727850164695377954464654688256e+252\"},\r\n    {0x1.16ae49bfdd770p+838, chars_format::scientific, 252,\r\n        \"1.\"\r\n        \"9952782556234112235618388114000024419696976918884012985196883706080092405613980858524205835778745894133321\"\r\n        \"0868285436775919750725736172285506109646439824434030650330008589013231883176343982203914391073596652430291\"\r\n        \"7790375371341763162002626475342277115904e+252\"},\r\n    {0x1.f3ef2c4210cacp+839, chars_format::scientific, 252,\r\n        \"7.\"\r\n        \"1587847487893079499698458355959164784160549019709356298631985163802186160082258587785870869537220428341295\"\r\n        \"9154953762325391374645796181723015336842060030080570448235415608409317273087473499964688536725010673884928\"\r\n        \"8705506701643342594415108812000139935744e+252\"},\r\n    {0x1.ad8a77a22e9ccp+840, chars_format::scientific, 253,\r\n        \"1.\"\r\n        \"2301580219420288258750710073967242803603244157181759807205724391294942735957066782958529919353781927634981\"\r\n        \"0332178857663060811072852430571703413531625861496620272515219238779208406942710051992836031567349036998627\"\r\n        \"60042508068641111106629716312501667233792e+253\"},\r\n    {0x1.ee0e5ceddd957p+841, chars_format::scientific, 253,\r\n        \"2.\"\r\n        \"8298450670726808039569020713611370769752247693265877738977218776671815871966890797048229309787176096732913\"\r\n        \"1557575024724858315121232799546498374424641272691542726135168215216303393892641064985962692205494753902395\"\r\n        \"25928386877340201687282618195535303016448e+253\"},\r\n    {0x1.5b0d6e76dda47p+842, chars_format::scientific, 252,\r\n        \"3.\"\r\n        \"9756809005620167673963500063290061375743826936924843916067298983960768988309298922372333125861749340072060\"\r\n        \"3193814599385110267978592875000662237114376052227737122342324525293468477254761924145161645921032961639161\"\r\n        \"0300989215056042850046033283650733211648e+253\"},\r\n    {0x1.7c22aee81fa83p+843, chars_format::scientific, 253,\r\n        \"8.\"\r\n        \"7093308214511152528107680123068762354482351630940844953037898917744938205727100690119337533031598012932830\"\r\n        \"5899183516041902309269864529394908188602588257391769221874838167307939441021963369847794051919452848913192\"\r\n        \"07064962654856171425270750844538014662656e+253\"},\r\n    {0x1.b84441e72b707p+844, chars_format::scientific, 254,\r\n        \"2.\"\r\n        \"0174005971626055001082205847662126781792713876424713491426107135200153377636963327796919425670606854013876\"\r\n        \"9188228169130929018386056603499673065740489029850179269264269221606509548886182752766216275942511240393316\"\r\n        \"495487843867292364651919029871904141869056e+254\"},\r\n    {0x1.0552b62c8e128p+845, chars_format::scientific, 254,\r\n        \"2.\"\r\n        \"3948822178489890559980219012723484849467341938240490533083040081270350965283979484566831974206206564200097\"\r\n        \"7813391908034755444058999987765739175366039266476547129613207191807837450381143027634960650298481158853128\"\r\n        \"823296817588537874887085684399549987160064e+254\"},\r\n    {0x1.81940cda93532p+846, chars_format::scientific, 253,\r\n        \"7.\"\r\n        \"0672259148746032781953096787839027889529056934666995406469164252062383501495468316183615878862193250089894\"\r\n        \"2824729667688989026764849833220049830460614235982996258221917434939821706769386936014308325931527289971326\"\r\n        \"51595911203444205265762564863624413708288e+254\"},\r\n    {0x1.feca14e0d5431p+847, chars_format::scientific, 255,\r\n        \"1.\"\r\n        \"8724413449264554000912479366013655429391738786825257650857219360436405508576111348384928174760062323641767\"\r\n        \"8355963928202928363122166407384529802017781834605348048825483579470507214795788114765647102370549369679820\"\r\n        \"3822670734824380038945947831900155722858496e+255\"},\r\n    {0x1.8827ec23206d4p+848, chars_format::scientific, 255,\r\n        \"2.\"\r\n        \"8751146201193473147511048914580957805762968774039920973219195905081640980452976049063596877710504384456337\"\r\n        \"8942133482080646288612528269588423761555820470966805352165440971982693782996962226116197358314589774284203\"\r\n        \"1555441896836579508527488730801254267092992e+255\"},\r\n    {0x1.b5f64571e8768p+849, chars_format::scientific, 255,\r\n        \"6.\"\r\n        \"4218887967767973147050111402854431025976259585437744180673244997762152424757771170884317557489625383493538\"\r\n        \"8361393226475356050594915067079552993583324564851489103509456327285189214338400599281283635090488306320315\"\r\n        \"4505532895528456078517711521452946616221696e+255\"},\r\n    {0x1.008a415b3183ap+850, chars_format::scientific, 254,\r\n        \"7.\"\r\n        \"5233547495587533813215041264189804683273644679977334152418586391745637517690648136494502205349178507544930\"\r\n        \"4982226958672016967506014326702860578746451776174964112417893379382667476706170679989555178879302805753091\"\r\n        \"108683336905960853244568321779433883041792e+255\"},\r\n    {0x1.80ce08985395dp+851, chars_format::scientific, 254,\r\n        \"2.\"\r\n        \"2569755092325086975203493724033279385000107408412293275710347345297410075316635764407052156717311305034067\"\r\n        \"6514647322222782299508751884380960970986935005936264995993547014912920456411557793138937542233075945826841\"\r\n        \"792852744388221269309269296056441948340224e+256\"},\r\n    {0x1.c93e2e3575dd3p+852, chars_format::scientific, 256,\r\n        \"5.\"\r\n        \"3636854859010334156927466175684003738394714128573400526327089603309985356772629772564613094187950836011490\"\r\n        \"7981918758305409650123299920242433241170318463532135276196145928454218679932889499527926234187310919488675\"\r\n        \"05567571032101385441229409672592337764614144e+256\"},\r\n    {0x1.3585fd503289fp+853, chars_format::scientific, 256,\r\n        \"7.\"\r\n        \"2617253380026673444035579620762527314882508741575498105068925220256457780553521247639040403375622083543231\"\r\n        \"6486550264499628730776026761628843667046600384317735951023059613456072596871655802663640764044923285549142\"\r\n        \"62493008301528885911022370188177304688001024e+256\"},\r\n    {0x1.9437b5f9e6b1dp+854, chars_format::scientific, 257,\r\n        \"1.\"\r\n        \"8966691176866934017770214207713233840154439494884324292130780115404111263157917885413943878915831820762225\"\r\n        \"0583303348187654531921298414600764621002789059760464627013274391530347087973710882160208775617821106882488\"\r\n        \"293831053109873906677004142654823373750665216e+257\"},\r\n    {0x1.da62d2c072d77p+855, chars_format::scientific, 256,\r\n        \"4.\"\r\n        \"4518263636702483965495053856865406170236863462890282079194516118432973996711016751060886266308495383903464\"\r\n        \"2746150586093362335739021603552694829648595836492021186657012662450405162755427498833201023318739340117695\"\r\n        \"42527011418624873181894562270229605954617344e+257\"},\r\n    {0x1.ed1dc3f094314p+856, chars_format::scientific, 257,\r\n        \"9.\"\r\n        \"2551967587286591706284322222810649405226651345273042856895913250378153451345197355495763043221473190696946\"\r\n        \"0611860955463662896675534000088606972814085114676199268097264054120326412981252636237720041559537499349640\"\r\n        \"773600892533856516647510713166368494906769408e+257\"},\r\n    {0x1.ef52edd00039ap+857, chars_format::scientific, 258,\r\n        \"1.\"\r\n        \"8593264122501495174403183867678233836361455504181472606197270931819321323497564161749153365807154991322567\"\r\n        \"2390476030417331932845704484326216214934527954763403077000110171731127369920811460830859516485802752602017\"\r\n        \"3336192319696495016121803920946730655041978368e+258\"},\r\n    {0x1.e3bb125744a76p+858, chars_format::scientific, 258,\r\n        \"3.\"\r\n        \"6316167357983087714844824037018917492844360826517442957456966973425494059948116922878230830137295968794133\"\r\n        \"6015957431917607400275062474387002683489057752768415445554866083398760065152355237788926587402650325283626\"\r\n        \"7137258982023926052809172133449146986873749504e+258\"},\r\n    {0x1.ca0a9344ec42dp+859, chars_format::scientific, 258,\r\n        \"6.\"\r\n        \"8775056809719936773562239947664051518174519882815181477860548157748963568061643541510085655252472888900274\"\r\n        \"6169928864401679954432098644991193402932567830206563234050230289011829876954220287981867426303858627431151\"\r\n        \"5637490526902098135179090001625391964633432064e+258\"},\r\n    {0x1.2411970d3d9abp+860, chars_format::scientific, 258,\r\n        \"8.\"\r\n        \"7708430554932495543370037977511351939308693383512112665323264941874463770609190130161570455198577258604133\"\r\n        \"4636679907937258218577041989632331153050988708602551653751196950259687810167099278093778665549710623277951\"\r\n        \"8706602377059819914819060153907843977606856704e+258\"},\r\n    {0x1.1ec5847492eb6p+861, chars_format::scientific, 259,\r\n        \"1.\"\r\n        \"7223538042831239341548853561863193983642495213487394348170048026198592090336204240078770738165496044637111\"\r\n        \"2342217250321051024454736362963000514473798185873133075921137741486035081623276812829601351743319683570519\"\r\n        \"09828327505871566528836256883770889417414148096e+259\"},\r\n    {0x1.1cea572360825p+862, chars_format::scientific, 259,\r\n        \"3.\"\r\n        \"4224113618416387660983968909127780621102150832355912954774258704013837006241377937016098367433894097044239\"\r\n        \"9548559312156546552455940215868211600940072182151265581465924724472562938954641277540870592656137399445957\"\r\n        \"77869883504853717504448659641688579757020545024e+259\"},\r\n    {0x1.24cde6b8208dep+863, chars_format::scientific, 259,\r\n        \"7.\"\r\n        \"0343463133020690622080363520915250368134172380431222412466942091558376798359445012434068235562476291266919\"\r\n        \"2263483493964563327850244971569130974664971468010256534095152179979912990687755183256723803192619430204631\"\r\n        \"97815031497056680470826442214372237094403702784e+259\"},\r\n    {0x1.b585d7749984ep+864, chars_format::scientific, 258,\r\n        \"2.\"\r\n        \"1022143522712642534927702470363833595361742788098251565939808660957882314655047911950792006855166244834767\"\r\n        \"9742384528807478336575531155237574537062478111192313055661179917070288035713865139698150878247481139550834\"\r\n        \"5057190337375468415342190739196099429459296256e+260\"},\r\n    {0x1.9d037445325cdp+865, chars_format::scientific, 260,\r\n        \"3.\"\r\n        \"9689033579839333586087273329545497202552025223101557954368170073685594346508353881665191789733101162600963\"\r\n        \"3832666126630950368714500596474244775837396509928744970487499110108854614051229977132244291177899594800898\"\r\n        \"868953265027415713662233602012993288552077852672e+260\"},\r\n    {0x1.164c006e21d01p+866, chars_format::scientific, 260,\r\n        \"5.\"\r\n        \"3486554156761041122966272313360276147722474552229895173187242042125351415357870740578477470191391604587784\"\r\n        \"7544762046104950012172421985090219541563083951673230860935981090927118350656495882735065989904791768286592\"\r\n        \"793842156241914783340450390835867251603190841344e+260\"},\r\n    {0x1.b1ad1c32ca51ep+867, chars_format::scientific, 261,\r\n        \"1.\"\r\n        \"6669857056073904295877757328423769453449385938496074603048454391418528215175463715315403787528483878921026\"\r\n        \"9734985247684352986127262307989667303704374626967638897389849285583351959286670587460222313677004843462283\"\r\n        \"3020129626133155057078829236175711168725220589568e+261\"},\r\n    {0x1.48aec4c5297d8p+868, chars_format::scientific, 261,\r\n        \"2.\"\r\n        \"5268130061515183896672541083193819962814958369017161861916462692004818230105550952960108454257383922547725\"\r\n        \"9430047285044243142322797421645388825477485111128620457670266244438408508981040669938314329656372612659262\"\r\n        \"6063461209454637519696384115499033283572944338944e+261\"},\r\n    {0x1.c82791a9d61b3p+869, chars_format::scientific, 261,\r\n        \"7.\"\r\n        \"0135563955506447327134376779608858242321794549199409417336758439247473329704075211614864504298236856709108\"\r\n        \"9491580123853294665804589087607528139845738395671479742204503115659932020873035669822478208917777517363066\"\r\n        \"9756457138689042468036550644721521533789925277696e+261\"},\r\n    {0x1.6aa8c3fa4676cp+870, chars_format::scientific, 261,\r\n        \"1.\"\r\n        \"1152057754767969643018536779865322527240533916315230067839324867956406896271582112257557870903391509215809\"\r\n        \"1956327894126813093730344747664064030616933374758815912702205423104102393081857574217568447918712081463529\"\r\n        \"1478507530630185498829253348514286180823709253632e+262\"},\r\n    {0x1.283c03e3922cap+871, chars_format::scientific, 262,\r\n        \"1.\"\r\n        \"8218885128879403050907701841700254353705385323409708627633550805724582437371113678359942756580855059619909\"\r\n        \"5387096660000020113210681570207177994891885681937114934287699917995965873657954921553898263299260585869319\"\r\n        \"43076794661977482279539782871784104567717178114048e+262\"},\r\n    {0x1.8cea9120f82c5p+872, chars_format::scientific, 262,\r\n        \"4.\"\r\n        \"8821954627592468297034144101052902316423641419746580555012088510975847917374634573939724055978958532505445\"\r\n        \"8910824834864704440551871917541689058272749866358635949227602996538977376206298893196919077990415442432746\"\r\n        \"80302980924347818100188562495929432829251712712704e+262\"},\r\n    {0x1.d973ddd6f5b77p+873, chars_format::scientific, 263,\r\n        \"1.\"\r\n        \"1647232869439797144128612526951735538946998095578708442740497215499916303005982058096215134648677496022778\"\r\n        \"3588644046610606860532249494006024946027982640278803787353469535819812520682463463954423986471436740424759\"\r\n        \"351730369993756319745282998559730184772104807776256e+263\"},\r\n    {0x1.f6b246aa65daap+874, chars_format::scientific, 263,\r\n        \"2.\"\r\n        \"4733296974221883796778661362827342887970759082625185925539120429912050329008686714438091418672145986492174\"\r\n        \"7123831207566139995773072740794784173590930118904914778018952948323351202355867513511555638275356370863058\"\r\n        \"697535795005475738555744173010248664718303031197696e+263\"},\r\n    {0x1.84c43fcdfd3c9p+875, chars_format::scientific, 263,\r\n        \"3.\"\r\n        \"8255614772231619409090663562751720549695664441740645381704259047208036365622208250797489037403777801687502\"\r\n        \"1251820705911738604051395984150068267867571861969188371719006695794892970741841549480519926689507865382895\"\r\n        \"043590951293226573743254266501415406206108651487232e+263\"},\r\n    {0x1.0d0cf61c34917p+876, chars_format::scientific, 263,\r\n        \"5.\"\r\n        \"2950522530435664148148531050362284907601275172048568844087760323458796487612851879945690043513677305823631\"\r\n        \"1027963509478254881181136917908166870711973901108220565960964083875886854518680826821014422246633900470942\"\r\n        \"204464313973177246167132074412483179319922517868544e+263\"},\r\n    {0x1.b7470f572ca34p+877, chars_format::scientific, 264,\r\n        \"1.\"\r\n        \"7290409059596491160392660629780224120987670924600492127521833122544559638181938355651161578571122937908200\"\r\n        \"4736562726151156355066947256957893503527892947890490864878566555947580613942211204717040529195486299636201\"\r\n        \"4302506768477688217193036724104566863122371314712576e+264\"},\r\n    {0x1.6f579373cf416p+878, chars_format::scientific, 264,\r\n        \"2.\"\r\n        \"8917911522817363012645491894345880877959140658748164626457215144933567697478848748246557694041140147148397\"\r\n        \"3773154689131883953422212476453709028316632368941627329032791514854112432586368236522512126676854020608788\"\r\n        \"8147820900177311817262558184006103887903947191484416e+264\"},\r\n    {0x1.53e61c25b3dd6p+879, chars_format::scientific, 263,\r\n        \"5.\"\r\n        \"3515050581631755036520580325118687673947236845337125650051164727089722015319573279603673205642180581633918\"\r\n        \"2827247492806189852021233450786795459652269420367267283626129052088926393182523919980423037030122018430228\"\r\n        \"265381645243737717520975191570311770107321052561408e+264\"},\r\n    {0x1.58f3a1aff6692p+880, chars_format::scientific, 265,\r\n        \"1.\"\r\n        \"0862117360156828711782018083715567701140855006689768849211310756691923390150596155361509757423012122662014\"\r\n        \"7543606621525575325168914047694766792472765528962462244301048456879469093164518615503952892850670680855784\"\r\n        \"38933939908261673483684160060573765056449123499114496e+265\"},\r\n    {0x1.6f410a840c9f6p+881, chars_format::scientific, 265,\r\n        \"2.\"\r\n        \"3128785488546931489272260574369394166074818677610901547355806177242180002180697086090725045491064466731356\"\r\n        \"0127553031593838481376225630920940311878815089733830843845396846155751065465312595061542938566927311228508\"\r\n        \"35008617650833500338712484495998333181450026401923072e+265\"},\r\n    {0x1.c55ec45991240p+882, chars_format::scientific, 265,\r\n        \"5.\"\r\n        \"7104346407744366879442524026328321873829311834849605463322151469516209295387639527101327649590792421651782\"\r\n        \"9514315747910569800251356318437826344953522781497302877730755704197328949288706415489347212482536070831297\"\r\n        \"69835264604896319470976595601519978424881761413496832e+265\"},\r\n    {0x1.c4390577e353fp+883, chars_format::scientific, 266,\r\n        \"1.\"\r\n        \"1391963969865947573314488432655043746990076042479005580857991691371729105469208930334011603031931765527660\"\r\n        \"0917805873430073523272197714955603390704189230682334970513371435191967474393169903239028641874533354488266\"\r\n        \"172291445223237400317190676258012429832003316365656064e+266\"},\r\n    {0x1.80024108442cep+884, chars_format::scientific, 265,\r\n        \"1.\"\r\n        \"9347167157285601303774915232697415595562286652874494078992920448925138324939113354855246958541500385382314\"\r\n        \"1416650002056326762170466471434812679273445318398594637346034345659552218437003750926311120682080530960525\"\r\n        \"91460233395247230558816996364387719414973408389103616e+266\"},\r\n    {0x1.d3b49d281769fp+885, chars_format::scientific, 266,\r\n        \"4.\"\r\n        \"7127965925819099014644056539795354030893985157309915619565784136091723470489083161162051111812262902453425\"\r\n        \"2262801742043035998900246742774977786010211977964487997955922525106556091069988389010083332747065934945098\"\r\n        \"638325018724512951515441851702692596765254267021819904e+266\"},\r\n    {0x1.e1d71a9ff3f96p+886, chars_format::scientific, 266,\r\n        \"9.\"\r\n        \"7104480347680526724388655440563722229957272133761493078196799014479854048146499410022289577832223787658711\"\r\n        \"0622082427832522414467935051386635148225548368445563790964504191323587209199839274129077851038873657848234\"\r\n        \"049424161572976854377951240964017540898697569732919296e+266\"},\r\n    {0x1.a7027ae520191p+887, chars_format::scientific, 267,\r\n        \"1.\"\r\n        \"7049690600947821370125168065492658748824492222019128137338447696856596238790064614116696201248482964846722\"\r\n        \"5184628076677445407056663027092528425760141456580472815946048919674298043627948451671861971785724528256343\"\r\n        \"9952765212043058091006226485989331945084763383877599232e+267\"},\r\n    {0x1.07cadff975a25p+888, chars_format::scientific, 267,\r\n        \"2.\"\r\n        \"1264667446960466843185764124801368452628993903514278513168587197748772998239803298839293111491786165979697\"\r\n        \"6630982545509082578930304252710488146559865458098358329640035523049333552971483963136440119661263615817430\"\r\n        \"8868271748374352726432722496121159510184514510133395456e+267\"},\r\n    {0x1.cae05e4bb900cp+889, chars_format::scientific, 267,\r\n        \"7.\"\r\n        \"3981296724233212368915462203134618633827781348288599081204473928605382035734896070754821747025697168204777\"\r\n        \"5831164644939498894759068631892579557932411831268566497011835763566862033238415369736821458656129565314617\"\r\n        \"8255710476500506024135400500117736967485460947838959616e+267\"},\r\n    {0x1.2eca1796b7a01p+890, chars_format::scientific, 267,\r\n        \"9.\"\r\n        \"7633054173860787578411930441342299812581938383096906442189245136120952178871210673264010432571176704977342\"\r\n        \"5144875507166490525658553295176797506420287263697491032818297518673506315051096497540547092110494724301159\"\r\n        \"8819166228787969713283529575588634229583035259655553024e+267\"},\r\n    {0x1.406a4282d1f80p+891, chars_format::scientific, 268,\r\n        \"2.\"\r\n        \"0663273080075777668338994648180231590952022821837453038885287279067698313592069654163912058841010723048508\"\r\n        \"4956016466783712260016983074067762455585111313554422858547193254983943038061713540787691125397501471732455\"\r\n        \"71337587193911747858038040870387038252781816931388751872e+268\"},\r\n    {0x1.c19ff8bce5676p+892, chars_format::scientific, 268,\r\n        \"5.\"\r\n        \"7991789555885803138323063424220372329352634074389977280603810320972219404232779295106348205917934689394522\"\r\n        \"6968684544645340888018484272478339697145259214282893355358872397623678216624402157855548818728918426167134\"\r\n        \"32471899850352776136551900415744006197797151659494735872e+268\"},\r\n    {0x1.1fe38d5e73e29p+893, chars_format::scientific, 268,\r\n        \"7.\"\r\n        \"4262753269739863071097258410894263038106306114820869566206729774587639804770146725844918946518744734031143\"\r\n        \"0212086497566770910828541707679614353259556721899264745050804359726236597577003220048795740807701689255561\"\r\n        \"62933649281172853594080068740031755532479512733798105088e+268\"},\r\n    {0x1.9c33b1b47ba39p+894, chars_format::scientific, 268,\r\n        \"2.\"\r\n        \"1266018116022865411879381930967069790650798465621914648129213144859095777763598456618525330801709641460962\"\r\n        \"0283984888529353757272520111093436834836026317167197256918208615548851093068000261067283457692229986020108\"\r\n        \"92382509460090260457040044765667150887352245110542696448e+269\"},\r\n    {0x1.a26d55f602cabp+895, chars_format::scientific, 269,\r\n        \"4.\"\r\n        \"3174364231170401202551735299747722543232356757700271552533167886073035283977844894207602162776571084158010\"\r\n        \"6637487827981321272123315762352293798979542062159013795203284222229869402422626555139587775055186134834731\"\r\n        \"324943467913151240603384480045011193118883243399917338624e+269\"},\r\n    {0x1.9dbb95083d899p+896, chars_format::scientific, 269,\r\n        \"8.\"\r\n        \"5379978661479379320868346870429258696342415203889512925623464380466473704249833165653284702162353335262430\"\r\n        \"2307718738124555968647710529467983770429635871301993423689601725064452486406011335898739997113633529929962\"\r\n        \"577600432036682866890623144100588419524680589002758160384e+269\"},\r\n    {0x1.6af76358f5a1dp+897, chars_format::scientific, 268,\r\n        \"1.\"\r\n        \"4980714281344640077800324391631747631672023321820143802880940360267132634221480283784766939394893412549743\"\r\n        \"3151756991181766902713336944094229312003649709735112045122838057934124138596703039110082058592770254239274\"\r\n        \"54742902981302864610102076457909707158804960722041176064e+270\"},\r\n    {0x1.158ee8ababa48p+898, chars_format::scientific, 269,\r\n        \"2.\"\r\n        \"2911327982233443224255282606251683954818178224101142096814170593799078226053624816860825230410849307401794\"\r\n        \"9387270640396091306344102882935763609967168275344632506117759911529139873832889312080415806425530984667493\"\r\n        \"141882202135810556985477247500496099082247955662411661312e+270\"},\r\n    {0x1.e6e6e63b2d752p+899, chars_format::scientific, 270,\r\n        \"8.\"\r\n        \"0383636773183965563279950292424708434270709791957562856743978678069397060540636573407544654392197003659831\"\r\n        \"0384498916233030138783388753183256314274108920183065336069113265406239709403032217045311711966041684929643\"\r\n        \"7886880687688620940240142624597135728868058798902940270592e+270\"},\r\n    {0x1.efb1c88f1b917p+900, chars_format::scientific, 271,\r\n        \"1.\"\r\n        \"6367042236629718729268402905374296656046770255365947397612805585584577853260684216085805613577865939803054\"\r\n        \"0017828458853352846712273689458592461038336716933341640440422893827137366319492868172331188522757035612448\"\r\n        \"66825763146062984617418588471703105453076171109553535975424e+271\"},\r\n    {0x1.09f8f19708f4bp+901, chars_format::scientific, 271,\r\n        \"1.\"\r\n        \"7563972945923824150525176891612462671316782210660684679553841323870503209610405498092263311262830620848698\"\r\n        \"1665909632003524215493513538752535250736701221979553770233146160642843021918667772131483618387627906645341\"\r\n        \"51448437648021580687531829596950159719152557277080794955776e+271\"},\r\n    {0x1.4baeba8c6048ap+902, chars_format::scientific, 271,\r\n        \"4.\"\r\n        \"3806517196597018427536671187880965481198827304651513198477564882433011473589151224194298825916010573320122\"\r\n        \"5609468413588284017169338273312525874904100588433697308517750041713396596008724468325763195854907398850846\"\r\n        \"27694863349688275377814547997028444578550781519051836358656e+271\"},\r\n    {0x1.8cd2d20b35045p+903, chars_format::scientific, 272,\r\n        \"1.\"\r\n        \"0481984706425230890135303927487114643980806409793254758292517423408650454004004690410386164020024921406758\"\r\n        \"0233261931631992081782639072972543258522686672291340682053372574758989506104340886674614134885461225788767\"\r\n        \"794959454342911064675144442738585353876408558614225881137152e+272\"},\r\n    {0x1.8d927eecfed2cp+904, chars_format::scientific, 272,\r\n        \"2.\"\r\n        \"1003524500133662840062505751219054791731938233584420309293263329740744737213481017895065823059205657074688\"\r\n        \"0495003915982871650202221554392121175674180533011917736497246381453282842769636604896153823898456077059993\"\r\n        \"174472058950185123299125702872712090700453722243307694718976e+272\"},\r\n    {0x1.de6575ee0f842p+905, chars_format::scientific, 272,\r\n        \"5.\"\r\n        \"0546833046720616928644353045604638530577598414714986252992662226709325284346824803889505568642104307349610\"\r\n        \"7456864923351748471226817911054373931071993953305772937720049829944021694539009473977809362995695360293075\"\r\n        \"326737012260339556128535967312245217254998376141704004632576e+272\"},\r\n    {0x1.02c1c5af5c860p+906, chars_format::scientific, 272,\r\n        \"5.\"\r\n        \"4679946858938374499976093477651454227758162651854337179090133937645556976337514121554834083379163511523367\"\r\n        \"8815555279040921759101244136392626043168966853295239988637028313028438110232397895920842852413186318437631\"\r\n        \"699837025581837989426185144833604274121548536678718694752256e+272\"},\r\n    {0x1.2768e4c0016e5p+907, chars_format::scientific, 272,\r\n        \"1.\"\r\n        \"2485068025844775960002963813255958238990842988066318183410805756654220701045964459693999153819613426900795\"\r\n        \"3835901620646121933168654246197946439033027346268505733120081821047015798725629926657488742079842818172233\"\r\n        \"730531858978327745494162155720720998081562069703878674219008e+273\"},\r\n    {0x1.4e3237606f16cp+908, chars_format::scientific, 272,\r\n        \"2.\"\r\n        \"8248640371828672657868329395057769266301903582528250762504229181498738699765492883442629604378488105536677\"\r\n        \"3049664084859301174542831369333256493187132550588644734495208565407517304624328179771024064881746101714668\"\r\n        \"858926752177144909757882154154206792562438451054311169327104e+273\"},\r\n    {0x1.f05eff930a17ep+909, chars_format::scientific, 273,\r\n        \"8.\"\r\n        \"3913641859492810787304674784341053014693270446678981564276345206432838412584894683772323627106734331361054\"\r\n        \"1416581936570159334220486914190086840257940612625606332369702794070260260363486788238523036201758835057677\"\r\n        \"5298560150181764281568949818405610899480408885000428278775808e+273\"},\r\n    {0x1.a23308e004343p+910, chars_format::scientific, 273,\r\n        \"1.\"\r\n        \"4139675630970964068757427171450653642480984699223731129945891669323413302498586940624987482328347106006806\"\r\n        \"4846263217980807891598990769975307425626751189318159967805770045501337306828952847948820905736086031581277\"\r\n        \"8238270061183253086797412098465350022320714292528734678286336e+274\"},\r\n    {0x1.adec4218e0233p+911, chars_format::scientific, 274,\r\n        \"2.\"\r\n        \"9072116249125091042939641046412524813869995898197412985742610942841277694000191408581191975005336470406860\"\r\n        \"8670999527092918316192574758132203457803702842095218262638389308959004912152377412018312352260096133426289\"\r\n        \"29616172359221046711196391821853929650939211266126599721844736e+274\"},\r\n    {0x1.43575d8295151p+912, chars_format::scientific, 274,\r\n        \"4.\"\r\n        \"3729772786894278772365021639725627716998749940973044545992005554096377244645619407904548756693601776261605\"\r\n        \"6152952004922597898719595364079241320185751107634778684879091923536788821539360129388400052441674499939002\"\r\n        \"25872455306119622800921723936421051368987504900833416633647104e+274\"},\r\n    {0x1.be237fd05844bp+913, chars_format::scientific, 275,\r\n        \"1.\"\r\n        \"2067462091729204821705996332843518364549184819962054996414528185176897061805656617790934688110747687253529\"\r\n        \"5544306710936939451090047765146059368821612654865459656462252966998392455236514266859434922735356209088047\"\r\n        \"813317803540270554003913049746492043246213723402668101888638976e+275\"},\r\n    {0x1.9b2ed63fe7c22p+914, chars_format::scientific, 275,\r\n        \"2.\"\r\n        \"2243912429104520893942654928612862245652916790922677520426543135574633357874274265454057414544428592629568\"\r\n        \"3796964658643810060103302362801047962335174283932176205460605605005617307935818958118860615338703168794392\"\r\n        \"925077735391135331507600083390485205139796785562476991788089344e+275\"},\r\n    {0x1.8f0f2f60d3781p+915, chars_format::scientific, 275,\r\n        \"4.\"\r\n        \"3176111022712280167867660225316851001302201103025801779751953430446989655794342643320229462126147375696598\"\r\n        \"6057754614071827730076422192135164453903891238489923349099709102388438790681497597224304990926662001012579\"\r\n        \"367979653974531063520144552196830827397549438193507868325445632e+275\"},\r\n    {0x1.0f15d62fc5633p+916, chars_format::scientific, 275,\r\n        \"5.\"\r\n        \"8659996133632342527001688155338604828401105070265177949168444721384708318888625799190903763436682845675922\"\r\n        \"7306284715963508222892046333736999261786975277280777429050552743479409111642363144164702524788373433324848\"\r\n        \"215428458862120335468197775176023691718933345373884546130378752e+275\"},\r\n    {0x1.a13ca388420aep+917, chars_format::scientific, 276,\r\n        \"1.\"\r\n        \"8057130538588834061048515934756534390995822489129192711153743070686906337113213930488158590783023451845083\"\r\n        \"4651614746589574435978102564052687814920235501288032606984645988911873437050795965137276804729122742273770\"\r\n        \"9200512048695849494656431906847973487558358759169627465021652992e+276\"},\r\n    {0x1.362f096e14122p+918, chars_format::scientific, 276,\r\n        \"2.\"\r\n        \"6848194108224777937082562383506307368133432936919747599586612304240456657094417970576945341505202731025352\"\r\n        \"0632752982342719728088743709847151084657234962263380932275542718077487586432626777649283951018672398397489\"\r\n        \"3363047437618046657896564635520646493576084143889699133523492864e+276\"},\r\n    {0x1.8fa644035b86cp+919, chars_format::scientific, 276,\r\n        \"6.\"\r\n        \"9183940909811462267856874429532960053214473707563125892325174523868752693267436284447579323441695765517285\"\r\n        \"6461752013313380421614617466134738839127312838144728166026552309098455007679065231380711981036221944925591\"\r\n        \"6170496306109571246026337759461802379014512053313539039259787264e+276\"},\r\n    {0x1.15b58f82ad041p+920, chars_format::scientific, 276,\r\n        \"9.\"\r\n        \"6149348499063526743580344354791228259201017811104329003387392966700402965231618105168720685759553521422977\"\r\n        \"2969122421092284303078177102786518853954107198000838782620800583313899806099610317077183204555144851614542\"\r\n        \"1691615264016637411219377961498887240480935611881565575031291904e+276\"},\r\n    {0x1.f7e12b4722058p+921, chars_format::scientific, 277,\r\n        \"3.\"\r\n        \"4890949511765381917564489227625018979093213131187560258974574296412643868128154485421838312923799775150875\"\r\n        \"9003316961232195921638521029189519961907126691803128371022641904028323108603719958360190246770869300997950\"\r\n        \"38164349707939106070027734238634052910612717651260495359532597248e+277\"},\r\n    {0x1.b833396267bb9p+922, chars_format::scientific, 276,\r\n        \"6.\"\r\n        \"0962977207855186085746743770786866262858276275147849851959864674542242692534585216614320573201966495522684\"\r\n        \"4025068473917567647785710745382815112116621538896778982052242681474360748602092434215393751764209878376730\"\r\n        \"6117947376901223073177337953389454932670330342413819437144604672e+277\"},\r\n    {0x1.14ff9cd90c1c8p+923, chars_format::scientific, 277,\r\n        \"7.\"\r\n        \"6722620777448847130061796967153409035280000143520385310098455611892015953736303672977253557984136122161764\"\r\n        \"1855280039261746154536109173275027345666993959003781623111625182923681709420935853242720927515701234022138\"\r\n        \"97816199751137235767500308035447734094150706669707498282849140736e+277\"},\r\n    {0x1.3b1721167a5c2p+924, chars_format::scientific, 278,\r\n        \"1.\"\r\n        \"7454649363112346458114019774333177916866258109488378818436939429302078045906152707336731339732354531371694\"\r\n        \"1228055475050043477580785364864935817555122130690642448975527407028574117711690510070820468159098253463861\"\r\n        \"923710066771866278518787343952413380888028548678629320352600162304e+278\"},\r\n    {0x1.8a85c622c377ep+925, chars_format::scientific, 278,\r\n        \"4.\"\r\n        \"3709703490882645460547143745214997008005362476756005415933050867512306390155350060744401126622118183385628\"\r\n        \"8935916341301053038413513553972091488238540498015095359572244498057448525080787377489166010463475091450891\"\r\n        \"077867871890421144700651238367267845567414870002937756298860560384e+278\"},\r\n    {0x1.e4116b8770eb9p+926, chars_format::scientific, 279,\r\n        \"1.\"\r\n        \"0726114671866102551956995063181805410834259689461649311344404290995629835609285447093274145176968382209577\"\r\n        \"6917302675169618383427699560030805008762564142832457663950285524391007167921681697164854346295152420849109\"\r\n        \"2988143024833061601691689500187256255660717629109506653574802702336e+279\"},\r\n    {0x1.2a7f9aaaa274cp+927, chars_format::scientific, 279,\r\n        \"1.\"\r\n        \"3228423831361687349286227308475220689391231854842087295811247105913948608236089430096611789280877039362419\"\r\n        \"3685744676257728697617300128153225560718497346830092449123962427997239392877784320723478193203713049316253\"\r\n        \"3391015168714982268831422978156810759831148502703022726522467254272e+279\"},\r\n    {0x1.a112cefbcbd73p+928, chars_format::scientific, 279,\r\n        \"3.\"\r\n        \"6966520737709448562733517100815008461375735122478974319844006900499629823014306882648742396218913673903183\"\r\n        \"5461596068574474985809396613938975088998218789612590775661930938869393235058776456670475387448381842545651\"\r\n        \"4513165432860037804808051299109674905178839116525770357448709767168e+279\"},\r\n    {0x1.36a61081043f2p+929, chars_format::scientific, 278,\r\n        \"5.\"\r\n        \"5067521766553316365405027111879142061254413625271933177107069898070693174397408489738092892207866286482884\"\r\n        \"5554683734104354555516180291558086314950736248180147530492954485185572182609677010072096843339571865071862\"\r\n        \"178828666956936942499956139255069398138943922537089722379860443136e+279\"},\r\n    {0x1.98a5de28ff8fbp+930, chars_format::scientific, 280,\r\n        \"1.\"\r\n        \"4487895211141177065279488132777108116369718048416908124269709876510583237549918320826970379166384928483716\"\r\n        \"1019967289695505122642072428382029305751309173352444213166148718207712764857116771438695299098448134310869\"\r\n        \"65217307420056734039126102817769912404692662944189803753694493147136e+280\"},\r\n    {0x1.a53cb3ab922ddp+931, chars_format::scientific, 279,\r\n        \"2.\"\r\n        \"9868446101560017108642363680724015778812195311497478659672452525980171949720889266701711072171369061987837\"\r\n        \"0719397873902392998888281790588552992933134932269907085753375411494921811461160297454476748326154204304000\"\r\n        \"2632972792550636638956325947677509230573449759918627641766761725952e+280\"},\r\n    {0x1.6b6f105002edfp+932, chars_format::scientific, 280,\r\n        \"5.\"\r\n        \"1539637484359395145169998086608752414201287314052389550098572221666968199721428219163097111568025636009928\"\r\n        \"9868974947747462738997782687742154327301151940704590687700939863040862556558535022961081423132129579761964\"\r\n        \"34291429763959675488362249598031403354267911828901663515648043515904e+280\"},\r\n    {0x1.e1d1de4ed51d6p+933, chars_format::scientific, 281,\r\n        \"1.\"\r\n        \"3665660611345062300699415815156476698279049368362851304007368637846199054342285443988800802553372187636752\"\r\n        \"3248917337453828432049841686697470139687419077855970402061884421298998636269755090181183266935109407044815\"\r\n        \"321573786764986943900426058733725257337715070032077314544904538423296e+281\"},\r\n    {0x1.e13c425396dcfp+934, chars_format::scientific, 280,\r\n        \"2.\"\r\n        \"7298170376572543250595176058691059999798358983466020300175306241793194709984671670486033298460259585304738\"\r\n        \"5017283331124297567037148310322911306994303912107766046694422982692238154811689038581436612976816696375957\"\r\n        \"55239772226573822083165523805843885336942248086072157383512333221888e+281\"},\r\n    {0x1.68969e0aaf976p+935, chars_format::scientific, 280,\r\n        \"4.\"\r\n        \"0908887634365658052312311982281239969243017093157788635282062623784275846881594265651752794514038606902310\"\r\n        \"6800674077822316855396294054170407702247910519199947866095197666860418768314483510897116866758790077807822\"\r\n        \"28895035770669972426241339275644547073552005426085299679806831460352e+281\"},\r\n    {0x1.3b22da0fe1911p+936, chars_format::scientific, 281,\r\n        \"7.\"\r\n        \"1504633857438940571491623978721892914354286180332274833165835417359788838288174535897662032205925659473829\"\r\n        \"1254467838197118759246342696315600723602737684766259628091374865649497230897798288966582459879507593177766\"\r\n        \"553940950035435273202528651698676033968867504991057070045076471676928e+281\"},\r\n    {0x1.4e66e432f39f8p+937, chars_format::scientific, 282,\r\n        \"1.\"\r\n        \"5175210833272951397317171771093120533028700691071470081130010387044118657798964008191234121591053953108259\"\r\n        \"6955862088695509774556450307706532410525408486178691764933071097832767619332513618102282556325062955506942\"\r\n        \"7362782422201363564357317874795808595718985906746009234596759127195648e+282\"},\r\n    {0x1.cd42a1d8134ddp+938, chars_format::scientific, 282,\r\n        \"4.\"\r\n        \"1864125891654217678987160154326130560240863001735941095698054511092958063809530574780247432322632198663136\"\r\n        \"5418302622171023894401032790833087273703184694721039596481868281280184720918524292021207074674806905103125\"\r\n        \"4669662460887222261960281257747458512455969074216563763504450258337792e+282\"},\r\n    {0x1.5f2cf251a2c3cp+939, chars_format::scientific, 282,\r\n        \"6.\"\r\n        \"3745607194970414607011473297486321194408851855271826405209841375673158509178230157700838425649741315965153\"\r\n        \"1787490773156272736941819746003947498415541918165918216258592523898070563734402123829915274799568966211125\"\r\n        \"1632663075464418798824836792784408317689148157466121016089825903640576e+282\"},\r\n    {0x1.adc9e02b49a66p+940, chars_format::scientific, 283,\r\n        \"1.\"\r\n        \"5603097675062574896758887904284580014666588747292929902329386364783921519940435619097399070201464392502002\"\r\n        \"5028890715059060477997149439060211939278134179325873422500374642911646757317084990080920453639258554845618\"\r\n        \"13254903791863073045978225400887637841137225271718710407150443264212992e+283\"},\r\n    {0x1.3d3363cbf2d84p+941, chars_format::scientific, 283,\r\n        \"2.\"\r\n        \"3031389942941909352268527198234496379577068396336203317744876815161576479976171983520659455831024723099078\"\r\n        \"3953912653441338360925646235294520011231816869933421886686303955035200196869516409069207975791230779110053\"\r\n        \"11195074484622555449838749756095271033619639701182005144598929173643264e+283\"},\r\n    {0x1.d766f62bf7f84p+942, chars_format::scientific, 283,\r\n        \"6.\"\r\n        \"8455374301622028192436355472823846238656305230521706558129242344936800002020518868868064296400530352191789\"\r\n        \"1034466226790547106518246010636997952128991451178947162684434339703836656537748396801799020313050219717687\"\r\n        \"76346231778021269958063780588872346431583200394283187585456728088510464e+283\"},\r\n    {0x1.184991c55d18cp+943, chars_format::scientific, 283,\r\n        \"8.\"\r\n        \"1404701971339317344287383067486540221247016756955967093290383812811465088446107352280408680080482428195443\"\r\n        \"2859846301022972599343792584032105393017442786371538959565030349794777528390097804778412027245663634510470\"\r\n        \"78458089708094639868097495758509389693820290367400727907449779154583552e+283\"},\r\n    {0x1.e8b3dcebeba57p+944, chars_format::scientific, 284,\r\n        \"2.\"\r\n        \"8387070865957636043552264602157883541550621494567563701536179579776139163837320944226018566214448421682813\"\r\n        \"9146714994229625209180111000906234680917576834864249534875261446994701128847388085608386018003065108691566\"\r\n        \"848732851954616351985795075190456971406831718621827217641148650350444544e+284\"},\r\n    {0x1.967cd81cba730p+945, chars_format::scientific, 283,\r\n        \"4.\"\r\n        \"7222972051563224519350338009022716573803303881667812490788444725311840770556623092940989186835112772635211\"\r\n        \"2743224783831438285150919074036999996137779134053001098115781992438186495543489249860281381207407832543648\"\r\n        \"17662303876106820974135357911697797680185476906504157324030340042326016e+284\"},\r\n    {0x1.4cf2067674a05p+946, chars_format::scientific, 284,\r\n        \"7.\"\r\n        \"7358664988354629632820980491003531438355880596056791221819587355464733593010437851133428000986535843768202\"\r\n        \"8813397315792428439760217722967556525317392550436423184707427411650596408077787470781836258444845657566221\"\r\n        \"704456125209427655591152156570845479024339183607328000005037882486030336e+284\"},\r\n    {0x1.396e85b33c0bdp+947, chars_format::scientific, 285,\r\n        \"1.\"\r\n        \"4564946206181580844592084594207704222149275365767779002797711189323700501615565216897882479344696601965798\"\r\n        \"7214001805314729196086011578252425814811977188275322843971098040849936431617543662738225046601518261128113\"\r\n        \"2374308583508656325781250344038137418380156687680087240907535210346708992e+285\"},\r\n    {0x1.95206484ce576p+948, chars_format::scientific, 285,\r\n        \"3.\"\r\n        \"7651875364112937676079826373638285134656210548344094794627244719878759497617868910191518550757132648757165\"\r\n        \"9033638473170496163259718929694674503055426759572449412069792075432533362901496572181167769653683164853916\"\r\n        \"6571141383041739341196077037239708754641370459694088122009910159310061568e+285\"},\r\n    {0x1.22e9ba39c791ap+949, chars_format::scientific, 284,\r\n        \"5.\"\r\n        \"4074068333403965226750981237644983456668479689930940152267176801225028318769667357940376329074605916431061\"\r\n        \"4179228438454115201658468909272669836435242142312208547792943910580280672735394813258979591343794568202162\"\r\n        \"709802027713568619488866942294475102931728455399763827049938587391885312e+285\"},\r\n    {0x1.c10015e885bf5p+950, chars_format::scientific, 286,\r\n        \"1.\"\r\n        \"6691777225183442734155493695184638662590904633258100472470488533590977930515304351989064823049973327477126\"\r\n        \"1895692018476435316799054399140695210497503507401916469005762783991428636380155890236982018335960721659795\"\r\n        \"82528813031375076284990869886696245331704707225600453047248955585985511424e+286\"},\r\n    {0x1.7e47eb8f41b03p+951, chars_format::scientific, 285,\r\n        \"2.\"\r\n        \"8422910937483828159205881733190611988529916891665780536131260943457118685939406072581634351428299546320576\"\r\n        \"0396749473544096221941676146479809429276884413946649887699651566840160395628585821920358023898327822565882\"\r\n        \"8951550681268637687054413812030526818138559282485013293056231248488300544e+286\"},\r\n    {0x1.09d0d2a526197p+952, chars_format::scientific, 286,\r\n        \"3.\"\r\n        \"9527246153864665566951087294778578304623889883636970224893978854523038111797720316090827413947493083212896\"\r\n        \"7844722249273717902614128985252239037734888348980268366864611317692974660014186053407372696445748574503415\"\r\n        \"78296133621137927482641494123749218905855394522144524531019546018141175808e+286\"},\r\n    {0x1.329393888f7bep+953, chars_format::scientific, 286,\r\n        \"9.\"\r\n        \"1176878905953285118279701136005401786587902760102270865436829998885338329626092321640853120778010712669451\"\r\n        \"0373698460188081841557295489700487987719867168096915145773718173158124223634025462177100914945077372091161\"\r\n        \"00467436142545614804211132806327613747648211271222880398152942507767365632e+286\"},\r\n    {0x1.bbe7721540300p+954, chars_format::scientific, 287,\r\n        \"2.\"\r\n        \"6403715176860095022699449053141968576100424161884093294931549571262319776369831347356407500008594345868578\"\r\n        \"3886670603935896834566016848681232358712602776606616349498486554151807746433631049948801957261905070980866\"\r\n        \"218863512709255609194971921954793897583681193907186498977864992248177885184e+287\"},\r\n    {0x1.88cbea96e97dbp+955, chars_format::scientific, 287,\r\n        \"4.\"\r\n        \"6727608713307191811731595008960375298221325983796687233226799622196366586451734089583832057742414188524729\"\r\n        \"9790823561171069651344832529105954322176333404979396460587010550966330585217753352905079690163268052230294\"\r\n        \"873047744394947965285062467179754729677808277337626448692513961219618504704e+287\"},\r\n    {0x1.92de904946e55p+956, chars_format::scientific, 285,\r\n        \"9.\"\r\n        \"5851774967886283871424703550157422124862389173600706586104269250302149909771530581521764503566496817903367\"\r\n        \"9520425155234935074360538133315694704204458222491239262475671332493078637032333046742899762907560886122978\"\r\n        \"5621372421990248839692190711668885475704463446705424081679053506515828736e+287\"},\r\n    {0x1.7f42451f5dfadp+957, chars_format::scientific, 287,\r\n        \"1.\"\r\n        \"8237197308454679352521332889696823507212561832000261520249663849022474903193953062064507777750007282782305\"\r\n        \"5844688987995889659167464398927070015579969304644214140035552340033653858384364990460291650066492163131472\"\r\n        \"465999824312979406250066151215209790239504641334422284329371377930367664128e+288\"},\r\n    {0x1.5bcb0fe12ff45p+958, chars_format::scientific, 288,\r\n        \"3.\"\r\n        \"3099160671433535093084224672514360647394401123276052039350234673929255835025285679433814704400572813252037\"\r\n        \"6316165403379745915463564399008817557713505803494239077292826673093202008184035941299826077797306915047648\"\r\n        \"4721278024806918523029143876241835657869581941341018295520569998556732063744e+288\"},\r\n    {0x1.b90465a9c592cp+959, chars_format::scientific, 287,\r\n        \"8.\"\r\n        \"3942399746957991372869078281942404020217477793793748903487486836539875121518532182385048730991315535450129\"\r\n        \"6066292673473655572134735382616456106780997318254265930532381881591026489637996542676756178814917207512248\"\r\n        \"505680859658549636395147348969378726384175323964145648049041264030901075968e+288\"},\r\n    {0x1.69983d358fd5ep+960, chars_format::scientific, 289,\r\n        \"1.\"\r\n        \"3765053672754182859184546827995562817441803667851159142923805357904082337163005923613594490300620268879646\"\r\n        \"4427657272680934322903126085125682986499564607354990434217242316960377563197108819664566707746439333948168\"\r\n        \"39437145361195475585915790038086938448416859756069308137927266057545163210752e+289\"},\r\n    {0x1.de946c1935bebp+961, chars_format::scientific, 289,\r\n        \"3.\"\r\n        \"6436798293267568549903218347518137574726651717741644105751763536191250266712661451258775255635605998228834\"\r\n        \"2012901246006434091445910044776272477500560046621628838893089250628068867605857325914011568299359415141634\"\r\n        \"37151042307371112230166232390702102964620484295971653304142427375365317984256e+289\"},\r\n    {0x1.b5842f82a9de7p+962, chars_format::scientific, 289,\r\n        \"6.\"\r\n        \"6620847115568887370739473756442065065681196769911331682611092496715336718715155596977883617162878523841449\"\r\n        \"1195244228805399554716468352898840685630426142198562600629075173101466368672042990656845441262776494523381\"\r\n        \"27010045221858188132828582061277352981469985490408290156135533130942236327936e+289\"},\r\n    {0x1.e8b22ed3af96bp+963, chars_format::scientific, 290,\r\n        \"1.\"\r\n        \"4882800748283324399977058469272645928472632851629916206349194579268135708884744967243751899545815918258106\"\r\n        \"3564764212811724201905328910445324121906120166169993601247788259189151502783772871311029419856354319292938\"\r\n        \"359404923519710627910962261670847242925348963282404187971202996261023196905472e+290\"},\r\n    {0x1.29a2da729cdddp+964, chars_format::scientific, 290,\r\n        \"1.\"\r\n        \"8128485634074353186651032710851418799765830191648044920796289939797839866554628583160057708287641508147835\"\r\n        \"3416991660757155282539462744077357077960029596847454004479999761152595114534845500036614198015631414265590\"\r\n        \"188431157433539282197161887547513163560678186514777300223161756952567350296576e+290\"},\r\n    {0x1.276a30d060d86p+965, chars_format::scientific, 289,\r\n        \"3.\"\r\n        \"5986375764585901118401173857435431665393344228134043195993090267211557335482517408403998911271835938466563\"\r\n        \"4578973486033515015557618769168149115430241202530067649619624893103124735795226961094794333422439468435787\"\r\n        \"86100004426152086227134028234892112366944314773819711221653221244284711206912e+290\"},\r\n    {0x1.d01246917497dp+966, chars_format::scientific, 291,\r\n        \"1.\"\r\n        \"1306303530723757551379347540230283878801067046195789878544591357589053690252198317196318305608292471048042\"\r\n        \"6573510425649333447216391174783435354024431883709870993191165042801828493609577800703214958208640517708896\"\r\n        \"5595898416550699038646583977157339794314844188021211564490649717795032156602368e+291\"},\r\n    {0x1.980e6a27628afp+967, chars_format::scientific, 291,\r\n        \"1.\"\r\n        \"9883184243838976730410932296903215043773257347722139793282731020043769627897711427696892214094944056155874\"\r\n        \"5773532880255610721204868508010113425199198024425077564874975290911000083831287880616319091923858196094459\"\r\n        \"8491001794144386958052292241630342045252697101128134565354695877741983337283584e+291\"},\r\n    {0x1.437c0e85d91f7p+968, chars_format::scientific, 291,\r\n        \"3.\"\r\n        \"1524589717279720882715225845768415950174764083504840242130204263516013060098749586913055034958731403449344\"\r\n        \"1208372093650396142197066540459113834187404379707141906158973632298825086025212231018442536491262443437671\"\r\n        \"2560730512038580641775599869341924017562703624377521765695489143064395748737024e+291\"},\r\n    {0x1.1ceddebc11368p+969, chars_format::scientific, 289,\r\n        \"5.\"\r\n        \"5534486584838894985815395255332155554599222908321054704554473957783188087561644658289781622997765571377498\"\r\n        \"0254860361303679922893002057120030214741484590883308892758826467544136194783289890892705217436463378669760\"\r\n        \"85508090123985182923026778461906662147231685595323631215481030751756287475712e+291\"},\r\n    {0x1.f13408b3aaf95p+970, chars_format::scientific, 291,\r\n        \"1.\"\r\n        \"9381607498203373586175696557817944812659064403065108683262190633961372055872685840153949035085668045580572\"\r\n        \"7271684831698888135449531590096565801574266515822704900761718432653313668573988087518548683433349503352718\"\r\n        \"6285257259315270330716435545570478575822448445079861238076872636591806374477824e+292\"},\r\n    {0x1.af9922dbfa336p+971, chars_format::scientific, 292,\r\n        \"3.\"\r\n        \"3648478963002968698620423749283072504492485899019735249110361788561863970431143842896181333838683458814612\"\r\n        \"4598595569278258609624938998649618367547993361532806816462567203005806179903282570174127495161186670335196\"\r\n        \"17412877924128534588246437115544693678681843960583893836646823695670362570227712e+292\"},\r\n    {0x1.b6d988f35196fp+972, chars_format::scientific, 291,\r\n        \"6.\"\r\n        \"8427657249419059479161154927363270143292784372199950777274871522771499071305503708562954470769408862138873\"\r\n        \"1474802374325885362173627703481269107443722893324474773474281616910266293515997961386896447706754207733557\"\r\n        \"5352545540331475643945411254688238428244331792556297094231236390216163573891072e+292\"},\r\n    {0x1.90c721972c4a2p+973, chars_format::scientific, 293,\r\n        \"1.\"\r\n        \"2498259387089929987544604729229201047461183081001696695911791985667564169201445962180218662664297173257224\"\r\n        \"0783416001704506170068124680312031816753145674679063100504319414514800555672293921190439313027282851410416\"\r\n        \"527131226964653068028871701489323868875661390179301613620908627438519900539191296e+293\"},\r\n    {0x1.7fa5032ebc8e7p+974, chars_format::scientific, 293,\r\n        \"2.\"\r\n        \"3927916153858261394393006439111464375589591262939067880984703699387029997954416886187764975960375716663774\"\r\n        \"7324929334133616973952797666607621630538557419287541059322652029872252214901040277415927729164527443341573\"\r\n        \"258308076333446631106547639938187560726465677882789688970890598968747947810881536e+293\"},\r\n    {0x1.4ce903c008152p+975, chars_format::scientific, 293,\r\n        \"4.\"\r\n        \"1527226468994149805883120008216062805649376308762924758560595432241225459535095755829722726323538761681810\"\r\n        \"0109244911505753906925022700052492277437591209390165152181173369747026248798037383291310666381029548454305\"\r\n        \"977457986611411122735356736460608954225433970661515041585228932440487179403132928e+293\"},\r\n    {0x1.1033cfd825bfep+976, chars_format::scientific, 293,\r\n        \"6.\"\r\n        \"7909062839788017161866710428443273408843243572583256912137828809643937252536360566057575321962392476516410\"\r\n        \"9295373824489237150025478824159009080880441253418086991920551877762452038557858218260332182171547242362745\"\r\n        \"152998922247516579175346880356048429165046724254554702021353471037187691525439488e+293\"},\r\n    {0x1.0fcd0f994c6c3p+977, chars_format::scientific, 294,\r\n        \"1.\"\r\n        \"3561785760749323678669787265688365565689640949708619714054160129767110601805174279033805933291173229630234\"\r\n        \"9694534389824422263920901953135120658800068583587102352433525536899095571443676695780068738425864348615998\"\r\n        \"0898573992763548701523679724999841102526974236295406990913753746951524692055293952e+294\"},\r\n    {0x1.4ecd6004d6052p+978, chars_format::scientific, 293,\r\n        \"3.\"\r\n        \"3410590952598420317059089548905939025834628916093972522457623516814235244321423895949768406189130633668431\"\r\n        \"7368760484815919204021605264468860090297189981381875925188997129387661959794324528266148926422168602715973\"\r\n        \"167909073172803760343055337031341509508280546224566941805289330430780015789473792e+294\"},\r\n    {0x1.f3efb39a62b6fp+979, chars_format::scientific, 294,\r\n        \"9.\"\r\n        \"9779308814775026726545238938108225391742620151815475280043733999141726516502805101140500365178512807293103\"\r\n        \"4832702879081724884796354724298523912059135271846012848441298235332887232423280512468585693898553460251806\"\r\n        \"5129004909212362943512437101234020643757629011735714458250584381888822081044348928e+294\"},\r\n    {0x1.7b90e1f7acd5fp+980, chars_format::scientific, 294,\r\n        \"1.\"\r\n        \"5151060382509119303230072696616085397824006138244852698231578717068386499638092085604311976614167334172105\"\r\n        \"9067485352359019807084574101981846207880933834777632827789527523390586536598629711121476163740733404587356\"\r\n        \"2403590243000174027968021709791613049945818271254046076631622631725402432573800448e+295\"},\r\n    {0x1.780e24e541603p+981, chars_format::scientific, 295,\r\n        \"3.\"\r\n        \"0021849100893520243358225574670889620815156554449574573250051912654326113987284835353145201676673525718887\"\r\n        \"5042697881806641218419106412453534354493043518552141426433358045973160321134894604670081881182357987680597\"\r\n        \"51952649200503215287587191207086694028505970883124170608147640357927402985570172928e+295\"},\r\n    {0x1.700d3d3809014p+982, chars_format::scientific, 295,\r\n        \"5.\"\r\n        \"8765795963279930227848103637865601003943787056531376360036302905273752521105567528286745985028255384875457\"\r\n        \"1490356367965241471404199068974466219719536013881180506072840356357417288376476202174117730455929024377704\"\r\n        \"51522858269571663877746249378744932425279354599869012839882446798078904889967116288e+295\"},\r\n    {0x1.b688d558b5f6cp+983, chars_format::scientific, 296,\r\n        \"1.\"\r\n        \"4003917488295084275613719898286286543900946543796852786205748340103098176869027454271933921365124713506242\"\r\n        \"4840043468664495636032046706208223098253951876889452581163756835639997767859551976134817039860523484461440\"\r\n        \"124895585825179963559084955205686769325898379507940166327523415178499971301572083712e+296\"},\r\n    {0x1.f01912b454894p+984, chars_format::scientific, 296,\r\n        \"3.\"\r\n        \"1684232621942047385277264101507039556067440169362731047612881416017992423437710611846555322044158342722398\"\r\n        \"8915277579013362002270444501078942736494131042992360048146233701817979552518486745549641868940508520247278\"\r\n        \"182505289084695487280862714932759338066051522762627957622658669625057321641956081664e+296\"},\r\n    {0x1.1006d98e085bcp+985, chars_format::scientific, 296,\r\n        \"3.\"\r\n        \"4747005896842154056766241710224939253278957494279764707850526147334614495212661112229513392271233912156854\"\r\n        \"4761851073506353853083647800598515099405732155724640228045952982796489208783132715430406627983166405192131\"\r\n        \"258940257292542957476413248506076428650670534137201954640611227376407648222278844416e+296\"},\r\n    {0x1.2c3916e2ff373p+986, chars_format::scientific, 296,\r\n        \"7.\"\r\n        \"6697238550212685960832609911276146098915770657253390727731460462378114517962252738218713388984402744753410\"\r\n        \"0644055244350474871367482438375619745138608308231095636232712461705478444271712793592166311581253206635330\"\r\n        \"061153560207434566610596179623433497342212224379877437918600098792472693553791762432e+296\"},\r\n    {0x1.0a7487f857db1p+987, chars_format::scientific, 297,\r\n        \"1.\"\r\n        \"3614131925096533227358277304297327605620010964674273390519175146101981086716462390034963821779924748785739\"\r\n        \"5620080532481805188047066315188930747903484713798353770585361867802872024778497522376969002439422146205889\"\r\n        \"8780565314051488693571227506727823926105057168671455333801700670110926825836349751296e+297\"},\r\n    {0x1.3857c488fe8b8p+988, chars_format::scientific, 297,\r\n        \"3.\"\r\n        \"1917385509472622401741963902741798316020842891467372871639114279968501540720074385793183473550289230847540\"\r\n        \"6531346952631945194501572201677681050736517236364445893621440519858256212122392536962698668571902046039673\"\r\n        \"8617495507842843305566526087166039077960918279884459165757255575108034221542182223872e+297\"},\r\n    {0x1.b2e84c3dce473p+989, chars_format::scientific, 297,\r\n        \"8.\"\r\n        \"8883788439875624185164207745360558758802155875037125198532849056736078250163752904409270711399254253418185\"\r\n        \"9444469734700030661866983137618978336282843998992322962605942456269502254865698961974528361768428078473937\"\r\n        \"6094743421421524562002257540912448826271782010926639892392033944710549976982451388416e+297\"},\r\n    {0x1.71b76b7215201p+990, chars_format::scientific, 298,\r\n        \"1.\"\r\n        \"5112090835975456482691048470324136676461824411038137830875000839223319169242464768082370414035660254169158\"\r\n        \"8669702780170871475227529225060662017601645192869668212722869526766762356560983217401072411526986055426607\"\r\n        \"99442146505061129659657887076900042124590387275392937317008374397153245502302047961088e+298\"},\r\n    {0x1.21b184ed36242p+991, chars_format::scientific, 298,\r\n        \"2.\"\r\n        \"3682327923940455929074855404731835885200530396635967368041051592757206624858645698626710713225571745269233\"\r\n        \"5729523644634975306222812534323302164949695407936710130084944345102224029476194227517181154705890457539653\"\r\n        \"96355529469848408434057376579487220386627111660172302509770187382123275691926545760256e+298\"},\r\n    {0x1.37ea2520488ccp+992, chars_format::scientific, 298,\r\n        \"5.\"\r\n        \"0997804211457324301727969780021784932196577737124651974461574335281416292911140537078513800349516058166230\"\r\n        \"6651023989265093968050976665439213325512154024914749918341591104687603878557877081517277860278457895962747\"\r\n        \"15728449794070641109346128933556201664107191668445099152331696871514428213048815648768e+298\"},\r\n    {0x1.4664dbcd00eb0p+993, chars_format::scientific, 298,\r\n        \"1.\"\r\n        \"0673033377644725582076128279562256890020762752598912707261862612904605628388963403061314485035461507019337\"\r\n        \"4438490926195154270158138687327359040657179392440930707711924166182794806470598924879805421312001727703958\"\r\n        \"91921169134687535785461810688709659897643411981471381983104303837230721690128649027584e+299\"},\r\n    {0x1.6b9cbc489e09ap+994, chars_format::scientific, 299,\r\n        \"2.\"\r\n        \"3780130211770008635428798028054955143428405559792922085924082125222001207510564662620683226057796019174145\"\r\n        \"2640417453863555219098122994555479241353169993047264294675297170597532090280617800437689617268886207229285\"\r\n        \"482891877778657703920272278134074512640642342772726595535234502682602103798938923433984e+299\"},\r\n    {0x1.f513bbd25d6dep+995, chars_format::scientific, 299,\r\n        \"6.\"\r\n        \"5540577282820882734089899386704195345627846540047499645059907995983845109119849454543083195868777805712470\"\r\n        \"7092461551987548003257290398700713345661594829621158366035617643372206998716563232961936757003882276959122\"\r\n        \"708936001833829616557908400458109782703568488107962693518959628276723172599697604870144e+299\"},\r\n    {0x1.3e00e64a007e5p+996, chars_format::scientific, 299,\r\n        \"8.\"\r\n        \"3189331614742082391382447830313932954296861496924533518176874062021378195713696724616314709052435687480452\"\r\n        \"3449453858407989081548890726447004714405286583963998060346441841261849601799117052047643487147092979557556\"\r\n        \"891805175387244452772540164096096030738843539931931830599736589422869440330138761822208e+299\"},\r\n    {0x1.04358f2000393p+997, chars_format::scientific, 300,\r\n        \"1.\"\r\n        \"3614082701057758282991605516975489579288117474695742577033267689441829157997449528962630396276072567771846\"\r\n        \"6563277978974992105381629734827673730338773434105077041481826605239116869440810337790164272971883723549343\"\r\n        \"4622743766811503326558480996563151364510469225186261976905322157612487935439550111809536e+300\"},\r\n    {0x1.ff5ca45dac07fp+998, chars_format::scientific, 300,\r\n        \"5.\"\r\n        \"3508658110149902849421928428493905625870487322421898497682154406090765637213244572176099715326655431494367\"\r\n        \"6929591673829631099980279628704586394230462593528555533852816968992662893077336730158326155001020626526239\"\r\n        \"8738807874995959199986290114910339936114860975870138690918797206511003398780232983904256e+300\"},\r\n    {0x1.95dfb7963208bp+999, chars_format::scientific, 299,\r\n        \"8.\"\r\n        \"4940892966758526585494849182126227433166616658121716121221756680064677734611539033378080479693086528432595\"\r\n        \"4264187555897655767726624817103774897165687722073995863869146194224654264271815412764432183860307112674231\"\r\n        \"109279315205969947330246145602344386623802171762035716381797595664546003263242377363456e+300\"},\r\n    {0x1.042ea27af2ccfp+1000, chars_format::scientific, 301,\r\n        \"1.\"\r\n        \"0890134027784214313930348009402099228804786388308427577549589000490524838171536880083316594376503360923820\"\r\n        \"3927956167113377874488765241234494902547691411017945498443986695825206736398283043101155534160891992194911\"\r\n        \"53554556979108530787196381372092387340130982723560970359575450657479047437786029202866176e+301\"},\r\n    {0x1.19cacda6d507cp+1001, chars_format::scientific, 301,\r\n        \"2.\"\r\n        \"3589278771025920045285827982461236796817036300877185977488554279335842158782244191985990632926121503077907\"\r\n        \"6520003666559211241592367336689930498536187798295766946194279734738125370727052729831736723306360154337779\"\r\n        \"50412177760641174727204088780046261172088405036986621286405986734378144157024874903109632e+301\"},\r\n    {0x1.e4dc48c30aebdp+1002, chars_format::scientific, 301,\r\n        \"8.\"\r\n        \"1176903631052648655337080884157138757428798522929058319900963020890052053982712181300446346333787829121700\"\r\n        \"3535527368462203251795552837011494935291596633256317483032620863293740739496732466044546947952666250308674\"\r\n        \"72373502272570181905030453820398128968285453872513665526905113335684193781314404248190976e+301\"},\r\n    {0x1.16fa9da90f9d8p+1003, chars_format::scientific, 301,\r\n        \"9.\"\r\n        \"3415114267945876208367248131098341912085530505203943017270044503863132197893962771450745275333290347854810\"\r\n        \"9960600140509742566153709652479468336022888542206366778998821244811822003682844389359377244112197477553800\"\r\n        \"16760116417262780962600310403215068957481809727018548258602677622354836648271052026150912e+301\"},\r\n    {0x1.8a86318c46281p+1004, chars_format::scientific, 302,\r\n        \"2.\"\r\n        \"6421004320193599222220643359148420883281556097189074913758318124048616315511138834598140417187849490396791\"\r\n        \"2440800658786078681336731143970379155380439690121456355674188789241410064996533294508126717933561959185778\"\r\n        \"192754757376080092862115085847862393689963492786526884623762776875632820851286300067627008e+302\"},\r\n    {0x1.ff462fd806bd7p+1005, chars_format::scientific, 302,\r\n        \"6.\"\r\n        \"8479333893788643349951954373428706271337676580677545656111124234548678899530140198122640316703808141324695\"\r\n        \"4111790004996031828015000205150715078148983240637243871500082888421342977620123039374551681737977878655788\"\r\n        \"295179567168650606205377274978890097754212420262333936960341237630114805596678852383342592e+302\"},\r\n    {0x1.9abb3e1c6258dp+1006, chars_format::scientific, 303,\r\n        \"1.\"\r\n        \"1002556200184007023081438741792890947080762576000821563629014332834749679952244487757753483300298253507845\"\r\n        \"5879206419534204227221954043005542510983229083842379647414279802190829035747238306982534802408454663553709\"\r\n        \"1282385282353501007663737911321641626869306594390707034645320031413007213532753781288075264e+303\"},\r\n    {0x1.de0bd3c1f52abp+1007, chars_format::scientific, 303,\r\n        \"2.\"\r\n        \"5611530892094994514501088831871358384319448903452892325625676707904740327849930775175514338249741969657883\"\r\n        \"8592308971003886423987684696984845619865591327523895036972469545643509680781096997879244741733146429164959\"\r\n        \"3820790500115221658520513179659203340914713114632244088248136782610390183342216645609259008e+303\"},\r\n    {0x1.d9c1bbc9b76a1p+1008, chars_format::scientific, 303,\r\n        \"5.\"\r\n        \"0763445855374758137611513292718315449629948838655962307071284681337573494863787181114031880088015506956421\"\r\n        \"0919814812869947242304860161660008686121237187656925137779489232921913748608997417433611598970782898218677\"\r\n        \"0681263550628277966122021347502889218558140981978778760709565257654468755221733041969823744e+303\"},\r\n    {0x1.838389973dca2p+1009, chars_format::scientific, 303,\r\n        \"8.\"\r\n        \"3044878325009487636657872605880027931451341062254646176493301760411427870881245765778811788634335139822887\"\r\n        \"7791768181558515981788246801785667173521110223595293418389986293158864840334067858751178794788759593463864\"\r\n        \"3446637560952598376682571125723765484978607914917947356221830413431528356893552064082214912e+303\"},\r\n    {0x1.060853e168c00p+1010, chars_format::scientific, 304,\r\n        \"1.\"\r\n        \"1230804446665463017778789639347990996643965714634023343815009161240780246270947713147897725931947017335623\"\r\n        \"7630191092159383150643994991146787024266771551963955625126256769736294908917256990486304395382712939541329\"\r\n        \"44471985636790260821195763195960709126795406948190820263635402442656971341237103098326941696e+304\"},\r\n    {0x1.f308c45ea73d7p+1011, chars_format::scientific, 304,\r\n        \"4.\"\r\n        \"2777559220816042653857310038704146366752118155285251665154411932831735245152145261165776711742388354156016\"\r\n        \"9871993219430699069531917092009858059914736544226777968630260462041311221406320891386198960782539433597799\"\r\n        \"67819804460846041770466218522657499957662378458077745646242495542457900501384540282123452416e+304\"},\r\n    {0x1.6e7f0598d9a7ap+1012, chars_format::scientific, 304,\r\n        \"6.\"\r\n        \"2832609674393123217939414786004721368347810148169532603823847060388742916702683157570030369865385378061695\"\r\n        \"0423422570163256408545609818970072287306016643092924903391807737646611595942820189227413388395855318648545\"\r\n        \"96993614806461429966237140466546002145002610631737886461529165004165330118612673778600116224e+304\"},\r\n    {0x1.90ee34c61a4e4p+1013, chars_format::scientific, 305,\r\n        \"1.\"\r\n        \"3747215164191864557360328902417183080909502773980053305016024875594667249734748345961089521445251491076760\"\r\n        \"1613710309461048505454382577543819736591536450997080647994948699299372710947086154466989750285286987223010\"\r\n        \"010358709717485396216234719231061846048602963736424188145247774330747094015196695990582116352e+305\"},\r\n    {0x1.e2a0a3d09f949p+1014, chars_format::scientific, 305,\r\n        \"3.\"\r\n        \"3096929273918683614869679916049042345119516535338947195012264325212922683474532459406639062854253866258135\"\r\n        \"7719151111687362183898117765879272408632912053460554027589018196032181403643752217046446854545876459118270\"\r\n        \"311328170300273241053563917737426045554632200608705001740820709150305846610578306477689143296e+305\"},\r\n    {0x1.c1f1e31fb56a1p+1015, chars_format::scientific, 305,\r\n        \"6.\"\r\n        \"1711334781978492823905176274313064600948013598950259705624044810976578137635336099364396791518714662842370\"\r\n        \"9280516241948225398658063408258944026475600604367395551060529895388440736389998513454247897588963927412199\"\r\n        \"886596463797584431228714343905526280539044788020033342657437500226579170692177128139530436608e+305\"},\r\n    {0x1.c021a05af3889p+1016, chars_format::scientific, 306,\r\n        \"1.\"\r\n        \"2292521010494213202208392120910347371974932861996362652215354683626354286778450977056457988823406607851862\"\r\n        \"6637132565769582888977482809648230361989943269158655634268614343814815368836427061857244021348551127969781\"\r\n        \"1055580445126773330393578734970725834547100511308555559785816417647601996123490828625750523904e+306\"},\r\n    {0x1.a0ba4fb02d02bp+1017, chars_format::scientific, 305,\r\n        \"2.\"\r\n        \"2862202954633178261723536509649685641707279850300290869803982420258862461647313576454922281065116456219182\"\r\n        \"9590977426811173756270658087196535714508685519454569812805651039956703238427854607968636622055258647292634\"\r\n        \"684121390540222150085347564627967335399432454801846311963425999483985877313898405284846501888e+306\"},\r\n    {0x1.3f966b0ddcfd7p+1018, chars_format::scientific, 306,\r\n        \"3.\"\r\n        \"5065941308845354984753464542431391007674227604335612148522065748017825104538844307057550895580408416179424\"\r\n        \"7118416307944385786855208364451666760483209546178608196510513690039018180918045791524606584522427293544334\"\r\n        \"6243739881419482228334516326372503115386643937845878401903583322133727281304761523559911653376e+306\"},\r\n    {0x1.f28cb9c6710a9p+1019, chars_format::scientific, 307,\r\n        \"1.\"\r\n        \"0940422247589227743316285257523446771149121608626559253104638931006152289125664762418837487890517285868544\"\r\n        \"1970842686935351143015218862511720392429343778632449186329279729720913087020406559756094832031600186601946\"\r\n        \"42090669215782471906632775672148557149263319590356475272060941885997193903260433671483161575424e+307\"},\r\n    {0x1.c941430ebe2afp+1020, chars_format::scientific, 306,\r\n        \"2.\"\r\n        \"0068458193014485659233690965046541577150222922448876802079698749594927659484925364079051863693079922549962\"\r\n        \"3702340752679075101040300153750541846589137823389048924711303393882024589282733583930812172225616249563429\"\r\n        \"7868168967936674133963531031634950024920744675243356304584274649234115658663895314346773839872e+307\"},\r\n    {0x1.3e04900b4e89ep+1021, chars_format::scientific, 307,\r\n        \"2.\"\r\n        \"7914963723745636433327098668092909811147302243780506069948228182283265947810001627803239111045172778906393\"\r\n        \"0987072447572980908861942482392189431390905934840154072184967491283583766051866632563025027572585713651756\"\r\n        \"30215388510334525743239925811352693280111872637884811742138711874263709333351600610928924557312e+307\"},\r\n    {0x1.5cd1470a36d2ep+1022, chars_format::scientific, 307,\r\n        \"6.\"\r\n        \"1236992921041949817714041891928528839786938336942322084137095186042961819813936048028926723548660468971278\"\r\n        \"4969654586939917432251493887838173965737887781285740992515883352944011799461643423393002121460091055587179\"\r\n        \"85452576260185887979241983673503558946414035103004649802078842226017422195444929429676453003264e+307\"},\r\n    {0x1.e4ed787bb244bp+1023, chars_format::scientific, 308,\r\n        \"1.\"\r\n        \"7026387749989901049352803345551957967504365590849171315485933257848664869760810216798351071186594668551262\"\r\n        \"9849272947937037080011581203332426168619415862460756069100292337181478478510557557506918137532825769631310\"\r\n        \"693972479511748662180221113394836543075210717029725044946195117678217681054268005181200990732288e+308\"},\r\n};\r\n\r\n#endif // DOUBLE_SCIENTIFIC_PRECISION_TO_CHARS_TEST_CASES_3_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/double_scientific_precision_to_chars_test_cases_4.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef DOUBLE_SCIENTIFIC_PRECISION_TO_CHARS_TEST_CASES_4_HPP\r\n#define DOUBLE_SCIENTIFIC_PRECISION_TO_CHARS_TEST_CASES_4_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\ninline constexpr DoublePrecisionToCharsTestCase double_scientific_precision_to_chars_test_cases_4[] = {\r\n    // Test the maximum mantissa, which generates the most digits for each exponent.\r\n    {0x0.fffffffffffffp-1022, chars_format::scientific, 766,\r\n        \"2.\"\r\n        \"2250738585072008890245868760858598876504231122409594654935248025624400092282356951787758888037591552642309\"\r\n        \"7809504343120858773871583572918219930202943792242235598198275012420417889695713117910822610439719796040004\"\r\n        \"5489739193807919893608152561311337614984204327175103362739154978273159414382813627511383860409424946494228\"\r\n        \"6316695429105080201815926642134996606517803095075913058719846423906068637102005108723282784678843631944515\"\r\n        \"8661350412234790147923695852083215976210663754016137365830441936037147783553066828345356340050740730401356\"\r\n        \"0296804637591858316312422452159926254649430083685186171942241764645513713542013221703137049658321015465406\"\r\n        \"8035397417906022589503023501937519773030945763173210852507299305089761582519159720757232455434770912461317\"\r\n        \"493580281734466552734375e-308\"},\r\n    {0x1.fffffffffffffp-1022, chars_format::scientific, 766,\r\n        \"4.\"\r\n        \"4501477170144022721148195934182639518696390927032912960468522194496444440421538910330590478162701758282983\"\r\n        \"1782607924221374017287738918929105531441481564124348675997628212653465850710457376274429802596224490290377\"\r\n        \"9698114444614570510266311510031828794952795966823603998647925096578034214163701381261333311989876551545144\"\r\n        \"0315261253813266652951306000184917766328660755595837392240989947807556594098101021612198814605258742579179\"\r\n        \"0000716759993441450860872056815779154359230189103349648694206140521828924314457976051636509036065141403772\"\r\n        \"1744226256159024466852576737244643007551333245007965068671949137768847800530996396770975896584413789443379\"\r\n        \"6621993967316936280457084866613206797017728916080020698679408551343728867675409720757232455434770912461317\"\r\n        \"493580281734466552734375e-308\"},\r\n    {0x1.fffffffffffffp-1021, chars_format::scientific, 765,\r\n        \"8.\"\r\n        \"9002954340288045442296391868365279037392781854065825920937044388992888880843077820661180956325403516565966\"\r\n        \"3565215848442748034575477837858211062882963128248697351995256425306931701420914752548859605192448980580755\"\r\n        \"9396228889229141020532623020063657589905591933647207997295850193156068428327402762522666623979753103090288\"\r\n        \"0630522507626533305902612000369835532657321511191674784481979895615113188196202043224397629210517485158358\"\r\n        \"0001433519986882901721744113631558308718460378206699297388412281043657848628915952103273018072130282807544\"\r\n        \"3488452512318048933705153474489286015102666490015930137343898275537695601061992793541951793168827578886759\"\r\n        \"3243987934633872560914169733226413594035457832160041397358817102687457735350819441514464910869541824922634\"\r\n        \"98716056346893310546875e-308\"},\r\n    {0x1.fffffffffffffp-1020, chars_format::scientific, 765,\r\n        \"1.\"\r\n        \"7800590868057609088459278373673055807478556370813165184187408877798577776168615564132236191265080703313193\"\r\n        \"2713043169688549606915095567571642212576592625649739470399051285061386340284182950509771921038489796116151\"\r\n        \"1879245777845828204106524604012731517981118386729441599459170038631213685665480552504533324795950620618057\"\r\n        \"6126104501525306661180522400073967106531464302238334956896395979123022637639240408644879525842103497031671\"\r\n        \"6000286703997376580344348822726311661743692075641339859477682456208731569725783190420654603614426056561508\"\r\n        \"8697690502463609786741030694897857203020533298003186027468779655107539120212398558708390358633765515777351\"\r\n        \"8648797586926774512182833946645282718807091566432008279471763420537491547070163888302892982173908364984526\"\r\n        \"99743211269378662109375e-307\"},\r\n    {0x1.fffffffffffffp-1019, chars_format::scientific, 764,\r\n        \"3.\"\r\n        \"5601181736115218176918556747346111614957112741626330368374817755597155552337231128264472382530161406626386\"\r\n        \"5426086339377099213830191135143284425153185251299478940798102570122772680568365901019543842076979592232302\"\r\n        \"3758491555691656408213049208025463035962236773458883198918340077262427371330961105009066649591901241236115\"\r\n        \"2252209003050613322361044800147934213062928604476669913792791958246045275278480817289759051684206994063343\"\r\n        \"2000573407994753160688697645452623323487384151282679718955364912417463139451566380841309207228852113123017\"\r\n        \"7395381004927219573482061389795714406041066596006372054937559310215078240424797117416780717267531031554703\"\r\n        \"7297595173853549024365667893290565437614183132864016558943526841074983094140327776605785964347816729969053\"\r\n        \"9948642253875732421875e-307\"},\r\n    {0x1.fffffffffffffp-1018, chars_format::scientific, 763,\r\n        \"7.\"\r\n        \"1202363472230436353837113494692223229914225483252660736749635511194311104674462256528944765060322813252773\"\r\n        \"0852172678754198427660382270286568850306370502598957881596205140245545361136731802039087684153959184464604\"\r\n        \"7516983111383312816426098416050926071924473546917766397836680154524854742661922210018133299183802482472230\"\r\n        \"4504418006101226644722089600295868426125857208953339827585583916492090550556961634579518103368413988126686\"\r\n        \"4001146815989506321377395290905246646974768302565359437910729824834926278903132761682618414457704226246035\"\r\n        \"4790762009854439146964122779591428812082133192012744109875118620430156480849594234833561434535062063109407\"\r\n        \"4595190347707098048731335786581130875228366265728033117887053682149966188280655553211571928695633459938107\"\r\n        \"989728450775146484375e-307\"},\r\n    {0x1.fffffffffffffp-1017, chars_format::scientific, 763,\r\n        \"1.\"\r\n        \"4240472694446087270767422698938444645982845096650532147349927102238862220934892451305788953012064562650554\"\r\n        \"6170434535750839685532076454057313770061274100519791576319241028049109072227346360407817536830791836892920\"\r\n        \"9503396622276662563285219683210185214384894709383553279567336030904970948532384442003626659836760496494446\"\r\n        \"0900883601220245328944417920059173685225171441790667965517116783298418110111392326915903620673682797625337\"\r\n        \"2800229363197901264275479058181049329394953660513071887582145964966985255780626552336523682891540845249207\"\r\n        \"0958152401970887829392824555918285762416426638402548821975023724086031296169918846966712286907012412621881\"\r\n        \"4919038069541419609746267157316226175045673253145606623577410736429993237656131110642314385739126691987621\"\r\n        \"597945690155029296875e-306\"},\r\n    {0x1.fffffffffffffp-1016, chars_format::scientific, 762,\r\n        \"2.\"\r\n        \"8480945388892174541534845397876889291965690193301064294699854204477724441869784902611577906024129125301109\"\r\n        \"2340869071501679371064152908114627540122548201039583152638482056098218144454692720815635073661583673785841\"\r\n        \"9006793244553325126570439366420370428769789418767106559134672061809941897064768884007253319673520992988892\"\r\n        \"1801767202440490657888835840118347370450342883581335931034233566596836220222784653831807241347365595250674\"\r\n        \"5600458726395802528550958116362098658789907321026143775164291929933970511561253104673047365783081690498414\"\r\n        \"1916304803941775658785649111836571524832853276805097643950047448172062592339837693933424573814024825243762\"\r\n        \"9838076139082839219492534314632452350091346506291213247154821472859986475312262221284628771478253383975243\"\r\n        \"19589138031005859375e-306\"},\r\n    {0x1.fffffffffffffp-1015, chars_format::scientific, 761,\r\n        \"5.\"\r\n        \"6961890777784349083069690795753778583931380386602128589399708408955448883739569805223155812048258250602218\"\r\n        \"4681738143003358742128305816229255080245096402079166305276964112196436288909385441631270147323167347571683\"\r\n        \"8013586489106650253140878732840740857539578837534213118269344123619883794129537768014506639347041985977784\"\r\n        \"3603534404880981315777671680236694740900685767162671862068467133193672440445569307663614482694731190501349\"\r\n        \"1200917452791605057101916232724197317579814642052287550328583859867941023122506209346094731566163380996828\"\r\n        \"3832609607883551317571298223673143049665706553610195287900094896344125184679675387866849147628049650487525\"\r\n        \"9676152278165678438985068629264904700182693012582426494309642945719972950624524442569257542956506767950486\"\r\n        \"3917827606201171875e-306\"},\r\n    {0x1.fffffffffffffp-1014, chars_format::scientific, 761,\r\n        \"1.\"\r\n        \"1392378155556869816613938159150755716786276077320425717879941681791089776747913961044631162409651650120443\"\r\n        \"6936347628600671748425661163245851016049019280415833261055392822439287257781877088326254029464633469514336\"\r\n        \"7602717297821330050628175746568148171507915767506842623653868824723976758825907553602901327869408397195556\"\r\n        \"8720706880976196263155534336047338948180137153432534372413693426638734488089113861532722896538946238100269\"\r\n        \"8240183490558321011420383246544839463515962928410457510065716771973588204624501241869218946313232676199365\"\r\n        \"6766521921576710263514259644734628609933141310722039057580018979268825036935935077573369829525609930097505\"\r\n        \"1935230455633135687797013725852980940036538602516485298861928589143994590124904888513851508591301353590097\"\r\n        \"2783565521240234375e-305\"},\r\n    {0x1.fffffffffffffp-1013, chars_format::scientific, 760,\r\n        \"2.\"\r\n        \"2784756311113739633227876318301511433572552154640851435759883363582179553495827922089262324819303300240887\"\r\n        \"3872695257201343496851322326491702032098038560831666522110785644878574515563754176652508058929266939028673\"\r\n        \"5205434595642660101256351493136296343015831535013685247307737649447953517651815107205802655738816794391113\"\r\n        \"7441413761952392526311068672094677896360274306865068744827386853277468976178227723065445793077892476200539\"\r\n        \"6480366981116642022840766493089678927031925856820915020131433543947176409249002483738437892626465352398731\"\r\n        \"3533043843153420527028519289469257219866282621444078115160037958537650073871870155146739659051219860195010\"\r\n        \"3870460911266271375594027451705961880073077205032970597723857178287989180249809777027703017182602707180194\"\r\n        \"556713104248046875e-305\"},\r\n    {0x1.fffffffffffffp-1012, chars_format::scientific, 759,\r\n        \"4.\"\r\n        \"5569512622227479266455752636603022867145104309281702871519766727164359106991655844178524649638606600481774\"\r\n        \"7745390514402686993702644652983404064196077121663333044221571289757149031127508353305016117858533878057347\"\r\n        \"0410869191285320202512702986272592686031663070027370494615475298895907035303630214411605311477633588782227\"\r\n        \"4882827523904785052622137344189355792720548613730137489654773706554937952356455446130891586155784952401079\"\r\n        \"2960733962233284045681532986179357854063851713641830040262867087894352818498004967476875785252930704797462\"\r\n        \"7066087686306841054057038578938514439732565242888156230320075917075300147743740310293479318102439720390020\"\r\n        \"7740921822532542751188054903411923760146154410065941195447714356575978360499619554055406034365205414360389\"\r\n        \"11342620849609375e-305\"},\r\n    {0x1.fffffffffffffp-1011, chars_format::scientific, 758,\r\n        \"9.\"\r\n        \"1139025244454958532911505273206045734290208618563405743039533454328718213983311688357049299277213200963549\"\r\n        \"5490781028805373987405289305966808128392154243326666088443142579514298062255016706610032235717067756114694\"\r\n        \"0821738382570640405025405972545185372063326140054740989230950597791814070607260428823210622955267177564454\"\r\n        \"9765655047809570105244274688378711585441097227460274979309547413109875904712910892261783172311569904802158\"\r\n        \"5921467924466568091363065972358715708127703427283660080525734175788705636996009934953751570505861409594925\"\r\n        \"4132175372613682108114077157877028879465130485776312460640151834150600295487480620586958636204879440780041\"\r\n        \"5481843645065085502376109806823847520292308820131882390895428713151956720999239108110812068730410828720778\"\r\n        \"2268524169921875e-305\"},\r\n    {0x1.fffffffffffffp-1010, chars_format::scientific, 758,\r\n        \"1.\"\r\n        \"8227805048890991706582301054641209146858041723712681148607906690865743642796662337671409859855442640192709\"\r\n        \"9098156205761074797481057861193361625678430848665333217688628515902859612451003341322006447143413551222938\"\r\n        \"8164347676514128081005081194509037074412665228010948197846190119558362814121452085764642124591053435512890\"\r\n        \"9953131009561914021048854937675742317088219445492054995861909482621975180942582178452356634462313980960431\"\r\n        \"7184293584893313618272613194471743141625540685456732016105146835157741127399201986990750314101172281918985\"\r\n        \"0826435074522736421622815431575405775893026097155262492128030366830120059097496124117391727240975888156008\"\r\n        \"3096368729013017100475221961364769504058461764026376478179085742630391344199847821622162413746082165744155\"\r\n        \"6453704833984375e-304\"},\r\n    {0x1.fffffffffffffp-1009, chars_format::scientific, 757,\r\n        \"3.\"\r\n        \"6455610097781983413164602109282418293716083447425362297215813381731487285593324675342819719710885280385419\"\r\n        \"8196312411522149594962115722386723251356861697330666435377257031805719224902006682644012894286827102445877\"\r\n        \"6328695353028256162010162389018074148825330456021896395692380239116725628242904171529284249182106871025781\"\r\n        \"9906262019123828042097709875351484634176438890984109991723818965243950361885164356904713268924627961920863\"\r\n        \"4368587169786627236545226388943486283251081370913464032210293670315482254798403973981500628202344563837970\"\r\n        \"1652870149045472843245630863150811551786052194310524984256060733660240118194992248234783454481951776312016\"\r\n        \"6192737458026034200950443922729539008116923528052752956358171485260782688399695643244324827492164331488311\"\r\n        \"290740966796875e-304\"},\r\n    {0x1.fffffffffffffp-1008, chars_format::scientific, 756,\r\n        \"7.\"\r\n        \"2911220195563966826329204218564836587432166894850724594431626763462974571186649350685639439421770560770839\"\r\n        \"6392624823044299189924231444773446502713723394661332870754514063611438449804013365288025788573654204891755\"\r\n        \"2657390706056512324020324778036148297650660912043792791384760478233451256485808343058568498364213742051563\"\r\n        \"9812524038247656084195419750702969268352877781968219983447637930487900723770328713809426537849255923841726\"\r\n        \"8737174339573254473090452777886972566502162741826928064420587340630964509596807947963001256404689127675940\"\r\n        \"3305740298090945686491261726301623103572104388621049968512121467320480236389984496469566908963903552624033\"\r\n        \"2385474916052068401900887845459078016233847056105505912716342970521565376799391286488649654984328662976622\"\r\n        \"58148193359375e-304\"},\r\n    {0x1.fffffffffffffp-1007, chars_format::scientific, 756,\r\n        \"1.\"\r\n        \"4582244039112793365265840843712967317486433378970144918886325352692594914237329870137127887884354112154167\"\r\n        \"9278524964608859837984846288954689300542744678932266574150902812722287689960802673057605157714730840978351\"\r\n        \"0531478141211302464804064955607229659530132182408758558276952095646690251297161668611713699672842748410312\"\r\n        \"7962504807649531216839083950140593853670575556393643996689527586097580144754065742761885307569851184768345\"\r\n        \"3747434867914650894618090555577394513300432548365385612884117468126192901919361589592600251280937825535188\"\r\n        \"0661148059618189137298252345260324620714420877724209993702424293464096047277996899293913381792780710524806\"\r\n        \"6477094983210413680380177569091815603246769411221101182543268594104313075359878257297729930996865732595324\"\r\n        \"51629638671875e-303\"},\r\n    {0x1.fffffffffffffp-1006, chars_format::scientific, 755,\r\n        \"2.\"\r\n        \"9164488078225586730531681687425934634972866757940289837772650705385189828474659740274255775768708224308335\"\r\n        \"8557049929217719675969692577909378601085489357864533148301805625444575379921605346115210315429461681956702\"\r\n        \"1062956282422604929608129911214459319060264364817517116553904191293380502594323337223427399345685496820625\"\r\n        \"5925009615299062433678167900281187707341151112787287993379055172195160289508131485523770615139702369536690\"\r\n        \"7494869735829301789236181111154789026600865096730771225768234936252385803838723179185200502561875651070376\"\r\n        \"1322296119236378274596504690520649241428841755448419987404848586928192094555993798587826763585561421049613\"\r\n        \"2954189966420827360760355138183631206493538822442202365086537188208626150719756514595459861993731465190649\"\r\n        \"0325927734375e-303\"},\r\n    {0x1.fffffffffffffp-1005, chars_format::scientific, 754,\r\n        \"5.\"\r\n        \"8328976156451173461063363374851869269945733515880579675545301410770379656949319480548511551537416448616671\"\r\n        \"7114099858435439351939385155818757202170978715729066296603611250889150759843210692230420630858923363913404\"\r\n        \"2125912564845209859216259822428918638120528729635034233107808382586761005188646674446854798691370993641251\"\r\n        \"1850019230598124867356335800562375414682302225574575986758110344390320579016262971047541230279404739073381\"\r\n        \"4989739471658603578472362222309578053201730193461542451536469872504771607677446358370401005123751302140752\"\r\n        \"2644592238472756549193009381041298482857683510896839974809697173856384189111987597175653527171122842099226\"\r\n        \"5908379932841654721520710276367262412987077644884404730173074376417252301439513029190919723987462930381298\"\r\n        \"065185546875e-303\"},\r\n    {0x1.fffffffffffffp-1004, chars_format::scientific, 754,\r\n        \"1.\"\r\n        \"1665795231290234692212672674970373853989146703176115935109060282154075931389863896109702310307483289723334\"\r\n        \"3422819971687087870387877031163751440434195743145813259320722250177830151968642138446084126171784672782680\"\r\n        \"8425182512969041971843251964485783727624105745927006846621561676517352201037729334889370959738274198728250\"\r\n        \"2370003846119624973471267160112475082936460445114915197351622068878064115803252594209508246055880947814676\"\r\n        \"2997947894331720715694472444461915610640346038692308490307293974500954321535489271674080201024750260428150\"\r\n        \"4528918447694551309838601876208259696571536702179367994961939434771276837822397519435130705434224568419845\"\r\n        \"3181675986568330944304142055273452482597415528976880946034614875283450460287902605838183944797492586076259\"\r\n        \"613037109375e-302\"},\r\n    {0x1.fffffffffffffp-1003, chars_format::scientific, 753,\r\n        \"2.\"\r\n        \"3331590462580469384425345349940747707978293406352231870218120564308151862779727792219404620614966579446668\"\r\n        \"6845639943374175740775754062327502880868391486291626518641444500355660303937284276892168252343569345565361\"\r\n        \"6850365025938083943686503928971567455248211491854013693243123353034704402075458669778741919476548397456500\"\r\n        \"4740007692239249946942534320224950165872920890229830394703244137756128231606505188419016492111761895629352\"\r\n        \"5995895788663441431388944888923831221280692077384616980614587949001908643070978543348160402049500520856300\"\r\n        \"9057836895389102619677203752416519393143073404358735989923878869542553675644795038870261410868449136839690\"\r\n        \"6363351973136661888608284110546904965194831057953761892069229750566900920575805211676367889594985172152519\"\r\n        \"22607421875e-302\"},\r\n    {0x1.fffffffffffffp-1002, chars_format::scientific, 752,\r\n        \"4.\"\r\n        \"6663180925160938768850690699881495415956586812704463740436241128616303725559455584438809241229933158893337\"\r\n        \"3691279886748351481551508124655005761736782972583253037282889000711320607874568553784336504687138691130723\"\r\n        \"3700730051876167887373007857943134910496422983708027386486246706069408804150917339557483838953096794913000\"\r\n        \"9480015384478499893885068640449900331745841780459660789406488275512256463213010376838032984223523791258705\"\r\n        \"1991791577326882862777889777847662442561384154769233961229175898003817286141957086696320804099001041712601\"\r\n        \"8115673790778205239354407504833038786286146808717471979847757739085107351289590077740522821736898273679381\"\r\n        \"2726703946273323777216568221093809930389662115907523784138459501133801841151610423352735779189970344305038\"\r\n        \"4521484375e-302\"},\r\n    {0x1.fffffffffffffp-1001, chars_format::scientific, 751,\r\n        \"9.\"\r\n        \"3326361850321877537701381399762990831913173625408927480872482257232607451118911168877618482459866317786674\"\r\n        \"7382559773496702963103016249310011523473565945166506074565778001422641215749137107568673009374277382261446\"\r\n        \"7401460103752335774746015715886269820992845967416054772972493412138817608301834679114967677906193589826001\"\r\n        \"8960030768956999787770137280899800663491683560919321578812976551024512926426020753676065968447047582517410\"\r\n        \"3983583154653765725555779555695324885122768309538467922458351796007634572283914173392641608198002083425203\"\r\n        \"6231347581556410478708815009666077572572293617434943959695515478170214702579180155481045643473796547358762\"\r\n        \"5453407892546647554433136442187619860779324231815047568276919002267603682303220846705471558379940688610076\"\r\n        \"904296875e-302\"},\r\n    {0x1.fffffffffffffp-1000, chars_format::scientific, 751,\r\n        \"1.\"\r\n        \"8665272370064375507540276279952598166382634725081785496174496451446521490223782233775523696491973263557334\"\r\n        \"9476511954699340592620603249862002304694713189033301214913155600284528243149827421513734601874855476452289\"\r\n        \"3480292020750467154949203143177253964198569193483210954594498682427763521660366935822993535581238717965200\"\r\n        \"3792006153791399957554027456179960132698336712183864315762595310204902585285204150735213193689409516503482\"\r\n        \"0796716630930753145111155911139064977024553661907693584491670359201526914456782834678528321639600416685040\"\r\n        \"7246269516311282095741763001933215514514458723486988791939103095634042940515836031096209128694759309471752\"\r\n        \"5090681578509329510886627288437523972155864846363009513655383800453520736460644169341094311675988137722015\"\r\n        \"380859375e-301\"},\r\n    {0x1.fffffffffffffp-999, chars_format::scientific, 750,\r\n        \"3.\"\r\n        \"7330544740128751015080552559905196332765269450163570992348992902893042980447564467551047392983946527114669\"\r\n        \"8953023909398681185241206499724004609389426378066602429826311200569056486299654843027469203749710952904578\"\r\n        \"6960584041500934309898406286354507928397138386966421909188997364855527043320733871645987071162477435930400\"\r\n        \"7584012307582799915108054912359920265396673424367728631525190620409805170570408301470426387378819033006964\"\r\n        \"1593433261861506290222311822278129954049107323815387168983340718403053828913565669357056643279200833370081\"\r\n        \"4492539032622564191483526003866431029028917446973977583878206191268085881031672062192418257389518618943505\"\r\n        \"0181363157018659021773254576875047944311729692726019027310767600907041472921288338682188623351976275444030\"\r\n        \"76171875e-301\"},\r\n    {0x1.fffffffffffffp-998, chars_format::scientific, 749,\r\n        \"7.\"\r\n        \"4661089480257502030161105119810392665530538900327141984697985805786085960895128935102094785967893054229339\"\r\n        \"7906047818797362370482412999448009218778852756133204859652622401138112972599309686054938407499421905809157\"\r\n        \"3921168083001868619796812572709015856794276773932843818377994729711054086641467743291974142324954871860801\"\r\n        \"5168024615165599830216109824719840530793346848735457263050381240819610341140816602940852774757638066013928\"\r\n        \"3186866523723012580444623644556259908098214647630774337966681436806107657827131338714113286558401666740162\"\r\n        \"8985078065245128382967052007732862058057834893947955167756412382536171762063344124384836514779037237887010\"\r\n        \"0362726314037318043546509153750095888623459385452038054621535201814082945842576677364377246703952550888061\"\r\n        \"5234375e-301\"},\r\n    {0x1.fffffffffffffp-997, chars_format::scientific, 749,\r\n        \"1.\"\r\n        \"4932217896051500406032221023962078533106107780065428396939597161157217192179025787020418957193578610845867\"\r\n        \"9581209563759472474096482599889601843755770551226640971930524480227622594519861937210987681499884381161831\"\r\n        \"4784233616600373723959362514541803171358855354786568763675598945942210817328293548658394828464990974372160\"\r\n        \"3033604923033119966043221964943968106158669369747091452610076248163922068228163320588170554951527613202785\"\r\n        \"6637373304744602516088924728911251981619642929526154867593336287361221531565426267742822657311680333348032\"\r\n        \"5797015613049025676593410401546572411611566978789591033551282476507234352412668824876967302955807447577402\"\r\n        \"0072545262807463608709301830750019177724691877090407610924307040362816589168515335472875449340790510177612\"\r\n        \"3046875e-300\"},\r\n    {0x1.fffffffffffffp-996, chars_format::scientific, 748,\r\n        \"2.\"\r\n        \"9864435792103000812064442047924157066212215560130856793879194322314434384358051574040837914387157221691735\"\r\n        \"9162419127518944948192965199779203687511541102453281943861048960455245189039723874421975362999768762323662\"\r\n        \"9568467233200747447918725029083606342717710709573137527351197891884421634656587097316789656929981948744320\"\r\n        \"6067209846066239932086443929887936212317338739494182905220152496327844136456326641176341109903055226405571\"\r\n        \"3274746609489205032177849457822503963239285859052309735186672574722443063130852535485645314623360666696065\"\r\n        \"1594031226098051353186820803093144823223133957579182067102564953014468704825337649753934605911614895154804\"\r\n        \"0145090525614927217418603661500038355449383754180815221848614080725633178337030670945750898681581020355224\"\r\n        \"609375e-300\"},\r\n    {0x1.fffffffffffffp-995, chars_format::scientific, 747,\r\n        \"5.\"\r\n        \"9728871584206001624128884095848314132424431120261713587758388644628868768716103148081675828774314443383471\"\r\n        \"8324838255037889896385930399558407375023082204906563887722097920910490378079447748843950725999537524647325\"\r\n        \"9136934466401494895837450058167212685435421419146275054702395783768843269313174194633579313859963897488641\"\r\n        \"2134419692132479864172887859775872424634677478988365810440304992655688272912653282352682219806110452811142\"\r\n        \"6549493218978410064355698915645007926478571718104619470373345149444886126261705070971290629246721333392130\"\r\n        \"3188062452196102706373641606186289646446267915158364134205129906028937409650675299507869211823229790309608\"\r\n        \"0290181051229854434837207323000076710898767508361630443697228161451266356674061341891501797363162040710449\"\r\n        \"21875e-300\"},\r\n    {0x1.fffffffffffffp-994, chars_format::scientific, 747,\r\n        \"1.\"\r\n        \"1945774316841200324825776819169662826484886224052342717551677728925773753743220629616335165754862888676694\"\r\n        \"3664967651007577979277186079911681475004616440981312777544419584182098075615889549768790145199907504929465\"\r\n        \"1827386893280298979167490011633442537087084283829255010940479156753768653862634838926715862771992779497728\"\r\n        \"2426883938426495972834577571955174484926935495797673162088060998531137654582530656470536443961222090562228\"\r\n        \"5309898643795682012871139783129001585295714343620923894074669029888977225252341014194258125849344266678426\"\r\n        \"0637612490439220541274728321237257929289253583031672826841025981205787481930135059901573842364645958061921\"\r\n        \"6058036210245970886967441464600015342179753501672326088739445632290253271334812268378300359472632408142089\"\r\n        \"84375e-299\"},\r\n    {0x1.fffffffffffffp-993, chars_format::scientific, 746,\r\n        \"2.\"\r\n        \"3891548633682400649651553638339325652969772448104685435103355457851547507486441259232670331509725777353388\"\r\n        \"7329935302015155958554372159823362950009232881962625555088839168364196151231779099537580290399815009858930\"\r\n        \"3654773786560597958334980023266885074174168567658510021880958313507537307725269677853431725543985558995456\"\r\n        \"4853767876852991945669155143910348969853870991595346324176121997062275309165061312941072887922444181124457\"\r\n        \"0619797287591364025742279566258003170591428687241847788149338059777954450504682028388516251698688533356852\"\r\n        \"1275224980878441082549456642474515858578507166063345653682051962411574963860270119803147684729291916123843\"\r\n        \"2116072420491941773934882929200030684359507003344652177478891264580506542669624536756600718945264816284179\"\r\n        \"6875e-299\"},\r\n    {0x1.fffffffffffffp-992, chars_format::scientific, 745,\r\n        \"4.\"\r\n        \"7783097267364801299303107276678651305939544896209370870206710915703095014972882518465340663019451554706777\"\r\n        \"4659870604030311917108744319646725900018465763925251110177678336728392302463558199075160580799630019717860\"\r\n        \"7309547573121195916669960046533770148348337135317020043761916627015074615450539355706863451087971117990912\"\r\n        \"9707535753705983891338310287820697939707741983190692648352243994124550618330122625882145775844888362248914\"\r\n        \"1239594575182728051484559132516006341182857374483695576298676119555908901009364056777032503397377066713704\"\r\n        \"2550449961756882165098913284949031717157014332126691307364103924823149927720540239606295369458583832247686\"\r\n        \"4232144840983883547869765858400061368719014006689304354957782529161013085339249073513201437890529632568359\"\r\n        \"375e-299\"},\r\n    {0x1.fffffffffffffp-991, chars_format::scientific, 744,\r\n        \"9.\"\r\n        \"5566194534729602598606214553357302611879089792418741740413421831406190029945765036930681326038903109413554\"\r\n        \"9319741208060623834217488639293451800036931527850502220355356673456784604927116398150321161599260039435721\"\r\n        \"4619095146242391833339920093067540296696674270634040087523833254030149230901078711413726902175942235981825\"\r\n        \"9415071507411967782676620575641395879415483966381385296704487988249101236660245251764291551689776724497828\"\r\n        \"2479189150365456102969118265032012682365714748967391152597352239111817802018728113554065006794754133427408\"\r\n        \"5100899923513764330197826569898063434314028664253382614728207849646299855441080479212590738917167664495372\"\r\n        \"8464289681967767095739531716800122737438028013378608709915565058322026170678498147026402875781059265136718\"\r\n        \"75e-299\"},\r\n    {0x1.fffffffffffffp-990, chars_format::scientific, 744,\r\n        \"1.\"\r\n        \"9113238906945920519721242910671460522375817958483748348082684366281238005989153007386136265207780621882710\"\r\n        \"9863948241612124766843497727858690360007386305570100444071071334691356920985423279630064232319852007887144\"\r\n        \"2923819029248478366667984018613508059339334854126808017504766650806029846180215742282745380435188447196365\"\r\n        \"1883014301482393556535324115128279175883096793276277059340897597649820247332049050352858310337955344899565\"\r\n        \"6495837830073091220593823653006402536473142949793478230519470447822363560403745622710813001358950826685481\"\r\n        \"7020179984702752866039565313979612686862805732850676522945641569929259971088216095842518147783433532899074\"\r\n        \"5692857936393553419147906343360024547487605602675721741983113011664405234135699629405280575156211853027343\"\r\n        \"75e-298\"},\r\n    {0x1.fffffffffffffp-989, chars_format::scientific, 743,\r\n        \"3.\"\r\n        \"8226477813891841039442485821342921044751635916967496696165368732562476011978306014772272530415561243765421\"\r\n        \"9727896483224249533686995455717380720014772611140200888142142669382713841970846559260128464639704015774288\"\r\n        \"5847638058496956733335968037227016118678669708253616035009533301612059692360431484565490760870376894392730\"\r\n        \"3766028602964787113070648230256558351766193586552554118681795195299640494664098100705716620675910689799131\"\r\n        \"2991675660146182441187647306012805072946285899586956461038940895644727120807491245421626002717901653370963\"\r\n        \"4040359969405505732079130627959225373725611465701353045891283139858519942176432191685036295566867065798149\"\r\n        \"1385715872787106838295812686720049094975211205351443483966226023328810468271399258810561150312423706054687\"\r\n        \"5e-298\"},\r\n    {0x1.fffffffffffffp-988, chars_format::scientific, 742,\r\n        \"7.\"\r\n        \"6452955627783682078884971642685842089503271833934993392330737465124952023956612029544545060831122487530843\"\r\n        \"9455792966448499067373990911434761440029545222280401776284285338765427683941693118520256929279408031548577\"\r\n        \"1695276116993913466671936074454032237357339416507232070019066603224119384720862969130981521740753788785460\"\r\n        \"7532057205929574226141296460513116703532387173105108237363590390599280989328196201411433241351821379598262\"\r\n        \"5983351320292364882375294612025610145892571799173912922077881791289454241614982490843252005435803306741926\"\r\n        \"8080719938811011464158261255918450747451222931402706091782566279717039884352864383370072591133734131596298\"\r\n        \"2771431745574213676591625373440098189950422410702886967932452046657620936542798517621122300624847412109375\"\r\n        \"e-298\"},\r\n    {0x1.fffffffffffffp-987, chars_format::scientific, 742,\r\n        \"1.\"\r\n        \"5290591125556736415776994328537168417900654366786998678466147493024990404791322405908909012166224497506168\"\r\n        \"7891158593289699813474798182286952288005909044456080355256857067753085536788338623704051385855881606309715\"\r\n        \"4339055223398782693334387214890806447471467883301446414003813320644823876944172593826196304348150757757092\"\r\n        \"1506411441185914845228259292102623340706477434621021647472718078119856197865639240282286648270364275919652\"\r\n        \"5196670264058472976475058922405122029178514359834782584415576358257890848322996498168650401087160661348385\"\r\n        \"3616143987762202292831652251183690149490244586280541218356513255943407976870572876674014518226746826319259\"\r\n        \"6554286349114842735318325074688019637990084482140577393586490409331524187308559703524224460124969482421875\"\r\n        \"e-297\"},\r\n    {0x1.fffffffffffffp-986, chars_format::scientific, 741,\r\n        \"3.\"\r\n        \"0581182251113472831553988657074336835801308733573997356932294986049980809582644811817818024332448995012337\"\r\n        \"5782317186579399626949596364573904576011818088912160710513714135506171073576677247408102771711763212619430\"\r\n        \"8678110446797565386668774429781612894942935766602892828007626641289647753888345187652392608696301515514184\"\r\n        \"3012822882371829690456518584205246681412954869242043294945436156239712395731278480564573296540728551839305\"\r\n        \"0393340528116945952950117844810244058357028719669565168831152716515781696645992996337300802174321322696770\"\r\n        \"7232287975524404585663304502367380298980489172561082436713026511886815953741145753348029036453493652638519\"\r\n        \"310857269822968547063665014937603927598016896428115478717298081866304837461711940704844892024993896484375e\"\r\n        \"-297\"},\r\n    {0x1.fffffffffffffp-985, chars_format::scientific, 740,\r\n        \"6.\"\r\n        \"1162364502226945663107977314148673671602617467147994713864589972099961619165289623635636048664897990024675\"\r\n        \"1564634373158799253899192729147809152023636177824321421027428271012342147153354494816205543423526425238861\"\r\n        \"7356220893595130773337548859563225789885871533205785656015253282579295507776690375304785217392603031028368\"\r\n        \"6025645764743659380913037168410493362825909738484086589890872312479424791462556961129146593081457103678610\"\r\n        \"0786681056233891905900235689620488116714057439339130337662305433031563393291985992674601604348642645393541\"\r\n        \"4464575951048809171326609004734760597960978345122164873426053023773631907482291506696058072906987305277038\"\r\n        \"62171453964593709412733002987520785519603379285623095743459616373260967492342388140968978404998779296875e-\"\r\n        \"297\"},\r\n    {0x1.fffffffffffffp-984, chars_format::scientific, 740,\r\n        \"1.\"\r\n        \"2232472900445389132621595462829734734320523493429598942772917994419992323833057924727127209732979598004935\"\r\n        \"0312926874631759850779838545829561830404727235564864284205485654202468429430670898963241108684705285047772\"\r\n        \"3471244178719026154667509771912645157977174306641157131203050656515859101555338075060957043478520606205673\"\r\n        \"7205129152948731876182607433682098672565181947696817317978174462495884958292511392225829318616291420735722\"\r\n        \"0157336211246778381180047137924097623342811487867826067532461086606312678658397198534920320869728529078708\"\r\n        \"2892915190209761834265321800946952119592195669024432974685210604754726381496458301339211614581397461055407\"\r\n        \"72434290792918741882546600597504157103920675857124619148691923274652193498468477628193795680999755859375e-\"\r\n        \"296\"},\r\n    {0x1.fffffffffffffp-983, chars_format::scientific, 739,\r\n        \"2.\"\r\n        \"4464945800890778265243190925659469468641046986859197885545835988839984647666115849454254419465959196009870\"\r\n        \"0625853749263519701559677091659123660809454471129728568410971308404936858861341797926482217369410570095544\"\r\n        \"6942488357438052309335019543825290315954348613282314262406101313031718203110676150121914086957041212411347\"\r\n        \"4410258305897463752365214867364197345130363895393634635956348924991769916585022784451658637232582841471444\"\r\n        \"0314672422493556762360094275848195246685622975735652135064922173212625357316794397069840641739457058157416\"\r\n        \"5785830380419523668530643601893904239184391338048865949370421209509452762992916602678423229162794922110815\"\r\n        \"4486858158583748376509320119500831420784135171424923829738384654930438699693695525638759136199951171875e-\"\r\n        \"296\"},\r\n    {0x1.fffffffffffffp-982, chars_format::scientific, 738,\r\n        \"4.\"\r\n        \"8929891601781556530486381851318938937282093973718395771091671977679969295332231698908508838931918392019740\"\r\n        \"1251707498527039403119354183318247321618908942259457136821942616809873717722683595852964434738821140191089\"\r\n        \"3884976714876104618670039087650580631908697226564628524812202626063436406221352300243828173914082424822694\"\r\n        \"8820516611794927504730429734728394690260727790787269271912697849983539833170045568903317274465165682942888\"\r\n        \"0629344844987113524720188551696390493371245951471304270129844346425250714633588794139681283478914116314833\"\r\n        \"1571660760839047337061287203787808478368782676097731898740842419018905525985833205356846458325589844221630\"\r\n        \"897371631716749675301864023900166284156827034284984765947676930986087739938739105127751827239990234375e-\"\r\n        \"296\"},\r\n    {0x1.fffffffffffffp-981, chars_format::scientific, 737,\r\n        \"9.\"\r\n        \"7859783203563113060972763702637877874564187947436791542183343955359938590664463397817017677863836784039480\"\r\n        \"2503414997054078806238708366636494643237817884518914273643885233619747435445367191705928869477642280382178\"\r\n        \"7769953429752209237340078175301161263817394453129257049624405252126872812442704600487656347828164849645389\"\r\n        \"7641033223589855009460859469456789380521455581574538543825395699967079666340091137806634548930331365885776\"\r\n        \"1258689689974227049440377103392780986742491902942608540259688692850501429267177588279362566957828232629666\"\r\n        \"3143321521678094674122574407575616956737565352195463797481684838037811051971666410713692916651179688443261\"\r\n        \"79474326343349935060372804780033256831365406856996953189535386197217547987747821025550365447998046875e-\"\r\n        \"296\"},\r\n    {0x1.fffffffffffffp-980, chars_format::scientific, 737,\r\n        \"1.\"\r\n        \"9571956640712622612194552740527575574912837589487358308436668791071987718132892679563403535572767356807896\"\r\n        \"0500682999410815761247741673327298928647563576903782854728777046723949487089073438341185773895528456076435\"\r\n        \"7553990685950441847468015635060232252763478890625851409924881050425374562488540920097531269565632969929077\"\r\n        \"9528206644717971001892171893891357876104291116314907708765079139993415933268018227561326909786066273177155\"\r\n        \"2251737937994845409888075420678556197348498380588521708051937738570100285853435517655872513391565646525933\"\r\n        \"2628664304335618934824514881515123391347513070439092759496336967607562210394333282142738583330235937688652\"\r\n        \"35894865268669987012074560956006651366273081371399390637907077239443509597549564205110073089599609375e-\"\r\n        \"295\"},\r\n    {0x1.fffffffffffffp-979, chars_format::scientific, 736,\r\n        \"3.\"\r\n        \"9143913281425245224389105481055151149825675178974716616873337582143975436265785359126807071145534713615792\"\r\n        \"1001365998821631522495483346654597857295127153807565709457554093447898974178146876682371547791056912152871\"\r\n        \"5107981371900883694936031270120464505526957781251702819849762100850749124977081840195062539131265939858155\"\r\n        \"9056413289435942003784343787782715752208582232629815417530158279986831866536036455122653819572132546354310\"\r\n        \"4503475875989690819776150841357112394696996761177043416103875477140200571706871035311745026783131293051866\"\r\n        \"5257328608671237869649029763030246782695026140878185518992673935215124420788666564285477166660471875377304\"\r\n        \"7178973053733997402414912191201330273254616274279878127581415447888701919509912841022014617919921875e-\"\r\n        \"295\"},\r\n    {0x1.fffffffffffffp-978, chars_format::scientific, 735,\r\n        \"7.\"\r\n        \"8287826562850490448778210962110302299651350357949433233746675164287950872531570718253614142291069427231584\"\r\n        \"2002731997643263044990966693309195714590254307615131418915108186895797948356293753364743095582113824305743\"\r\n        \"0215962743801767389872062540240929011053915562503405639699524201701498249954163680390125078262531879716311\"\r\n        \"8112826578871884007568687575565431504417164465259630835060316559973663733072072910245307639144265092708620\"\r\n        \"9006951751979381639552301682714224789393993522354086832207750954280401143413742070623490053566262586103733\"\r\n        \"0514657217342475739298059526060493565390052281756371037985347870430248841577333128570954333320943750754609\"\r\n        \"435794610746799480482982438240266054650923254855975625516283089577740383901982568204402923583984375e-295\"},\r\n    {0x1.fffffffffffffp-977, chars_format::scientific, 735,\r\n        \"1.\"\r\n        \"5657565312570098089755642192422060459930270071589886646749335032857590174506314143650722828458213885446316\"\r\n        \"8400546399528652608998193338661839142918050861523026283783021637379159589671258750672948619116422764861148\"\r\n        \"6043192548760353477974412508048185802210783112500681127939904840340299649990832736078025015652506375943262\"\r\n        \"3622565315774376801513737515113086300883432893051926167012063311994732746614414582049061527828853018541724\"\r\n        \"1801390350395876327910460336542844957878798704470817366441550190856080228682748414124698010713252517220746\"\r\n        \"6102931443468495147859611905212098713078010456351274207597069574086049768315466625714190866664188750150921\"\r\n        \"887158922149359896096596487648053210930184650971195125103256617915548076780396513640880584716796875e-294\"},\r\n    {0x1.fffffffffffffp-976, chars_format::scientific, 734,\r\n        \"3.\"\r\n        \"1315130625140196179511284384844120919860540143179773293498670065715180349012628287301445656916427770892633\"\r\n        \"6801092799057305217996386677323678285836101723046052567566043274758319179342517501345897238232845529722297\"\r\n        \"2086385097520706955948825016096371604421566225001362255879809680680599299981665472156050031305012751886524\"\r\n        \"7245130631548753603027475030226172601766865786103852334024126623989465493228829164098123055657706037083448\"\r\n        \"3602780700791752655820920673085689915757597408941634732883100381712160457365496828249396021426505034441493\"\r\n        \"2205862886936990295719223810424197426156020912702548415194139148172099536630933251428381733328377500301843\"\r\n        \"77431784429871979219319297529610642186036930194239025020651323583109615356079302728176116943359375e-294\"},\r\n    {0x1.fffffffffffffp-975, chars_format::scientific, 733,\r\n        \"6.\"\r\n        \"2630261250280392359022568769688241839721080286359546586997340131430360698025256574602891313832855541785267\"\r\n        \"3602185598114610435992773354647356571672203446092105135132086549516638358685035002691794476465691059444594\"\r\n        \"4172770195041413911897650032192743208843132450002724511759619361361198599963330944312100062610025503773049\"\r\n        \"4490261263097507206054950060452345203533731572207704668048253247978930986457658328196246111315412074166896\"\r\n        \"7205561401583505311641841346171379831515194817883269465766200763424320914730993656498792042853010068882986\"\r\n        \"4411725773873980591438447620848394852312041825405096830388278296344199073261866502856763466656755000603687\"\r\n        \"5486356885974395843863859505922128437207386038847805004130264716621923071215860545635223388671875e-294\"},\r\n    {0x1.fffffffffffffp-974, chars_format::scientific, 733,\r\n        \"1.\"\r\n        \"2526052250056078471804513753937648367944216057271909317399468026286072139605051314920578262766571108357053\"\r\n        \"4720437119622922087198554670929471314334440689218421027026417309903327671737007000538358895293138211888918\"\r\n        \"8834554039008282782379530006438548641768626490000544902351923872272239719992666188862420012522005100754609\"\r\n        \"8898052252619501441210990012090469040706746314441540933609650649595786197291531665639249222263082414833379\"\r\n        \"3441112280316701062328368269234275966303038963576653893153240152684864182946198731299758408570602013776597\"\r\n        \"2882345154774796118287689524169678970462408365081019366077655659268839814652373300571352693331351000120737\"\r\n        \"5097271377194879168772771901184425687441477207769561000826052943324384614243172109127044677734375e-293\"},\r\n    {0x1.fffffffffffffp-973, chars_format::scientific, 732,\r\n        \"2.\"\r\n        \"5052104500112156943609027507875296735888432114543818634798936052572144279210102629841156525533142216714106\"\r\n        \"9440874239245844174397109341858942628668881378436842054052834619806655343474014001076717790586276423777837\"\r\n        \"7669108078016565564759060012877097283537252980001089804703847744544479439985332377724840025044010201509219\"\r\n        \"7796104505239002882421980024180938081413492628883081867219301299191572394583063331278498444526164829666758\"\r\n        \"6882224560633402124656736538468551932606077927153307786306480305369728365892397462599516817141204027553194\"\r\n        \"5764690309549592236575379048339357940924816730162038732155311318537679629304746601142705386662702000241475\"\r\n        \"019454275438975833754554380236885137488295441553912200165210588664876922848634421825408935546875e-293\"},\r\n    {0x1.fffffffffffffp-972, chars_format::scientific, 731,\r\n        \"5.\"\r\n        \"0104209000224313887218055015750593471776864229087637269597872105144288558420205259682313051066284433428213\"\r\n        \"8881748478491688348794218683717885257337762756873684108105669239613310686948028002153435581172552847555675\"\r\n        \"5338216156033131129518120025754194567074505960002179609407695489088958879970664755449680050088020403018439\"\r\n        \"5592209010478005764843960048361876162826985257766163734438602598383144789166126662556996889052329659333517\"\r\n        \"3764449121266804249313473076937103865212155854306615572612960610739456731784794925199033634282408055106389\"\r\n        \"1529380619099184473150758096678715881849633460324077464310622637075359258609493202285410773325404000482950\"\r\n        \"03890855087795166750910876047377027497659088310782440033042117732975384569726884365081787109375e-293\"},\r\n    {0x1.fffffffffffffp-971, chars_format::scientific, 731,\r\n        \"1.\"\r\n        \"0020841800044862777443611003150118694355372845817527453919574421028857711684041051936462610213256886685642\"\r\n        \"7776349695698337669758843736743577051467552551374736821621133847922662137389605600430687116234510569511135\"\r\n        \"1067643231206626225903624005150838913414901192000435921881539097817791775994132951089936010017604080603687\"\r\n        \"9118441802095601152968792009672375232565397051553232746887720519676628957833225332511399377810465931866703\"\r\n        \"4752889824253360849862694615387420773042431170861323114522592122147891346356958985039806726856481611021277\"\r\n        \"8305876123819836894630151619335743176369926692064815492862124527415071851721898640457082154665080800096590\"\r\n        \"00778171017559033350182175209475405499531817662156488006608423546595076913945376873016357421875e-292\"},\r\n    {0x1.fffffffffffffp-970, chars_format::scientific, 730,\r\n        \"2.\"\r\n        \"0041683600089725554887222006300237388710745691635054907839148842057715423368082103872925220426513773371285\"\r\n        \"5552699391396675339517687473487154102935105102749473643242267695845324274779211200861374232469021139022270\"\r\n        \"2135286462413252451807248010301677826829802384000871843763078195635583551988265902179872020035208161207375\"\r\n        \"8236883604191202305937584019344750465130794103106465493775441039353257915666450665022798755620931863733406\"\r\n        \"9505779648506721699725389230774841546084862341722646229045184244295782692713917970079613453712963222042555\"\r\n        \"6611752247639673789260303238671486352739853384129630985724249054830143703443797280914164309330161600193180\"\r\n        \"0155634203511806670036435041895081099906363532431297601321684709319015382789075374603271484375e-292\"},\r\n    {0x1.fffffffffffffp-969, chars_format::scientific, 729,\r\n        \"4.\"\r\n        \"0083367200179451109774444012600474777421491383270109815678297684115430846736164207745850440853027546742571\"\r\n        \"1105398782793350679035374946974308205870210205498947286484535391690648549558422401722748464938042278044540\"\r\n        \"4270572924826504903614496020603355653659604768001743687526156391271167103976531804359744040070416322414751\"\r\n        \"6473767208382404611875168038689500930261588206212930987550882078706515831332901330045597511241863727466813\"\r\n        \"9011559297013443399450778461549683092169724683445292458090368488591565385427835940159226907425926444085111\"\r\n        \"3223504495279347578520606477342972705479706768259261971448498109660287406887594561828328618660323200386360\"\r\n        \"031126840702361334007287008379016219981272706486259520264336941863803076557815074920654296875e-292\"},\r\n    {0x1.fffffffffffffp-968, chars_format::scientific, 728,\r\n        \"8.\"\r\n        \"0166734400358902219548888025200949554842982766540219631356595368230861693472328415491700881706055093485142\"\r\n        \"2210797565586701358070749893948616411740420410997894572969070783381297099116844803445496929876084556089080\"\r\n        \"8541145849653009807228992041206711307319209536003487375052312782542334207953063608719488080140832644829503\"\r\n        \"2947534416764809223750336077379001860523176412425861975101764157413031662665802660091195022483727454933627\"\r\n        \"8023118594026886798901556923099366184339449366890584916180736977183130770855671880318453814851852888170222\"\r\n        \"6447008990558695157041212954685945410959413536518523942896996219320574813775189123656657237320646400772720\"\r\n        \"06225368140472266801457401675803243996254541297251904052867388372760615311563014984130859375e-292\"},\r\n    {0x1.fffffffffffffp-967, chars_format::scientific, 728,\r\n        \"1.\"\r\n        \"6033346880071780443909777605040189910968596553308043926271319073646172338694465683098340176341211018697028\"\r\n        \"4442159513117340271614149978789723282348084082199578914593814156676259419823368960689099385975216911217816\"\r\n        \"1708229169930601961445798408241342261463841907200697475010462556508466841590612721743897616028166528965900\"\r\n        \"6589506883352961844750067215475800372104635282485172395020352831482606332533160532018239004496745490986725\"\r\n        \"5604623718805377359780311384619873236867889873378116983236147395436626154171134376063690762970370577634044\"\r\n        \"5289401798111739031408242590937189082191882707303704788579399243864114962755037824731331447464129280154544\"\r\n        \"01245073628094453360291480335160648799250908259450380810573477674552123062312602996826171875e-291\"},\r\n    {0x1.fffffffffffffp-966, chars_format::scientific, 727,\r\n        \"3.\"\r\n        \"2066693760143560887819555210080379821937193106616087852542638147292344677388931366196680352682422037394056\"\r\n        \"8884319026234680543228299957579446564696168164399157829187628313352518839646737921378198771950433822435632\"\r\n        \"3416458339861203922891596816482684522927683814401394950020925113016933683181225443487795232056333057931801\"\r\n        \"3179013766705923689500134430951600744209270564970344790040705662965212665066321064036478008993490981973451\"\r\n        \"1209247437610754719560622769239746473735779746756233966472294790873252308342268752127381525940741155268089\"\r\n        \"0578803596223478062816485181874378164383765414607409577158798487728229925510075649462662894928258560309088\"\r\n        \"0249014725618890672058296067032129759850181651890076162114695534910424612462520599365234375e-291\"},\r\n    {0x1.fffffffffffffp-965, chars_format::scientific, 726,\r\n        \"6.\"\r\n        \"4133387520287121775639110420160759643874386213232175705085276294584689354777862732393360705364844074788113\"\r\n        \"7768638052469361086456599915158893129392336328798315658375256626705037679293475842756397543900867644871264\"\r\n        \"6832916679722407845783193632965369045855367628802789900041850226033867366362450886975590464112666115863602\"\r\n        \"6358027533411847379000268861903201488418541129940689580081411325930425330132642128072956017986981963946902\"\r\n        \"2418494875221509439121245538479492947471559493512467932944589581746504616684537504254763051881482310536178\"\r\n        \"1157607192446956125632970363748756328767530829214819154317596975456459851020151298925325789856517120618176\"\r\n        \"049802945123778134411659213406425951970036330378015232422939106982084922492504119873046875e-291\"},\r\n    {0x1.fffffffffffffp-964, chars_format::scientific, 726,\r\n        \"1.\"\r\n        \"2826677504057424355127822084032151928774877242646435141017055258916937870955572546478672141072968814957622\"\r\n        \"7553727610493872217291319983031778625878467265759663131675051325341007535858695168551279508780173528974252\"\r\n        \"9366583335944481569156638726593073809171073525760557980008370045206773473272490177395118092822533223172720\"\r\n        \"5271605506682369475800053772380640297683708225988137916016282265186085066026528425614591203597396392789380\"\r\n        \"4483698975044301887824249107695898589494311898702493586588917916349300923336907500850952610376296462107235\"\r\n        \"6231521438489391225126594072749751265753506165842963830863519395091291970204030259785065157971303424123635\"\r\n        \"209960589024755626882331842681285190394007266075603046484587821396416984498500823974609375e-290\"},\r\n    {0x1.fffffffffffffp-963, chars_format::scientific, 725,\r\n        \"2.\"\r\n        \"5653355008114848710255644168064303857549754485292870282034110517833875741911145092957344282145937629915245\"\r\n        \"5107455220987744434582639966063557251756934531519326263350102650682015071717390337102559017560347057948505\"\r\n        \"8733166671888963138313277453186147618342147051521115960016740090413546946544980354790236185645066446345441\"\r\n        \"0543211013364738951600107544761280595367416451976275832032564530372170132053056851229182407194792785578760\"\r\n        \"8967397950088603775648498215391797178988623797404987173177835832698601846673815001701905220752592924214471\"\r\n        \"2463042876978782450253188145499502531507012331685927661727038790182583940408060519570130315942606848247270\"\r\n        \"41992117804951125376466368536257038078801453215120609296917564279283396899700164794921875e-290\"},\r\n    {0x1.fffffffffffffp-962, chars_format::scientific, 724,\r\n        \"5.\"\r\n        \"1306710016229697420511288336128607715099508970585740564068221035667751483822290185914688564291875259830491\"\r\n        \"0214910441975488869165279932127114503513869063038652526700205301364030143434780674205118035120694115897011\"\r\n        \"7466333343777926276626554906372295236684294103042231920033480180827093893089960709580472371290132892690882\"\r\n        \"1086422026729477903200215089522561190734832903952551664065129060744340264106113702458364814389585571157521\"\r\n        \"7934795900177207551296996430783594357977247594809974346355671665397203693347630003403810441505185848428942\"\r\n        \"4926085753957564900506376290999005063014024663371855323454077580365167880816121039140260631885213696494540\"\r\n        \"8398423560990225075293273707251407615760290643024121859383512855856679379940032958984375e-290\"},\r\n    {0x1.fffffffffffffp-961, chars_format::scientific, 724,\r\n        \"1.\"\r\n        \"0261342003245939484102257667225721543019901794117148112813644207133550296764458037182937712858375051966098\"\r\n        \"2042982088395097773833055986425422900702773812607730505340041060272806028686956134841023607024138823179402\"\r\n        \"3493266668755585255325310981274459047336858820608446384006696036165418778617992141916094474258026578538176\"\r\n        \"4217284405345895580640043017904512238146966580790510332813025812148868052821222740491672962877917114231504\"\r\n        \"3586959180035441510259399286156718871595449518961994869271134333079440738669526000680762088301037169685788\"\r\n        \"4985217150791512980101275258199801012602804932674371064690815516073033576163224207828052126377042739298908\"\r\n        \"1679684712198045015058654741450281523152058128604824371876702571171335875988006591796875e-289\"},\r\n    {0x1.fffffffffffffp-960, chars_format::scientific, 723,\r\n        \"2.\"\r\n        \"0522684006491878968204515334451443086039803588234296225627288414267100593528916074365875425716750103932196\"\r\n        \"4085964176790195547666111972850845801405547625215461010680082120545612057373912269682047214048277646358804\"\r\n        \"6986533337511170510650621962548918094673717641216892768013392072330837557235984283832188948516053157076352\"\r\n        \"8434568810691791161280086035809024476293933161581020665626051624297736105642445480983345925755834228463008\"\r\n        \"7173918360070883020518798572313437743190899037923989738542268666158881477339052001361524176602074339371576\"\r\n        \"9970434301583025960202550516399602025205609865348742129381631032146067152326448415656104252754085478597816\"\r\n        \"335936942439609003011730948290056304630411625720964874375340514234267175197601318359375e-289\"},\r\n    {0x1.fffffffffffffp-959, chars_format::scientific, 722,\r\n        \"4.\"\r\n        \"1045368012983757936409030668902886172079607176468592451254576828534201187057832148731750851433500207864392\"\r\n        \"8171928353580391095332223945701691602811095250430922021360164241091224114747824539364094428096555292717609\"\r\n        \"3973066675022341021301243925097836189347435282433785536026784144661675114471968567664377897032106314152705\"\r\n        \"6869137621383582322560172071618048952587866323162041331252103248595472211284890961966691851511668456926017\"\r\n        \"4347836720141766041037597144626875486381798075847979477084537332317762954678104002723048353204148678743153\"\r\n        \"9940868603166051920405101032799204050411219730697484258763262064292134304652896831312208505508170957195632\"\r\n        \"67187388487921800602346189658011260926082325144192974875068102846853435039520263671875e-289\"},\r\n    {0x1.fffffffffffffp-958, chars_format::scientific, 721,\r\n        \"8.\"\r\n        \"2090736025967515872818061337805772344159214352937184902509153657068402374115664297463501702867000415728785\"\r\n        \"6343856707160782190664447891403383205622190500861844042720328482182448229495649078728188856193110585435218\"\r\n        \"7946133350044682042602487850195672378694870564867571072053568289323350228943937135328755794064212628305411\"\r\n        \"3738275242767164645120344143236097905175732646324082662504206497190944422569781923933383703023336913852034\"\r\n        \"8695673440283532082075194289253750972763596151695958954169074664635525909356208005446096706408297357486307\"\r\n        \"9881737206332103840810202065598408100822439461394968517526524128584268609305793662624417011016341914391265\"\r\n        \"3437477697584360120469237931602252185216465028838594975013620569370687007904052734375e-289\"},\r\n    {0x1.fffffffffffffp-957, chars_format::scientific, 721,\r\n        \"1.\"\r\n        \"6418147205193503174563612267561154468831842870587436980501830731413680474823132859492700340573400083145757\"\r\n        \"1268771341432156438132889578280676641124438100172368808544065696436489645899129815745637771238622117087043\"\r\n        \"7589226670008936408520497570039134475738974112973514214410713657864670045788787427065751158812842525661082\"\r\n        \"2747655048553432929024068828647219581035146529264816532500841299438188884513956384786676740604667382770406\"\r\n        \"9739134688056706416415038857850750194552719230339191790833814932927105181871241601089219341281659471497261\"\r\n        \"5976347441266420768162040413119681620164487892278993703505304825716853721861158732524883402203268382878253\"\r\n        \"0687495539516872024093847586320450437043293005767718995002724113874137401580810546875e-288\"},\r\n    {0x1.fffffffffffffp-956, chars_format::scientific, 720,\r\n        \"3.\"\r\n        \"2836294410387006349127224535122308937663685741174873961003661462827360949646265718985400681146800166291514\"\r\n        \"2537542682864312876265779156561353282248876200344737617088131392872979291798259631491275542477244234174087\"\r\n        \"5178453340017872817040995140078268951477948225947028428821427315729340091577574854131502317625685051322164\"\r\n        \"5495310097106865858048137657294439162070293058529633065001682598876377769027912769573353481209334765540813\"\r\n        \"9478269376113412832830077715701500389105438460678383581667629865854210363742483202178438682563318942994523\"\r\n        \"1952694882532841536324080826239363240328975784557987407010609651433707443722317465049766804406536765756506\"\r\n        \"137499107903374404818769517264090087408658601153543799000544822774827480316162109375e-288\"},\r\n    {0x1.fffffffffffffp-955, chars_format::scientific, 719,\r\n        \"6.\"\r\n        \"5672588820774012698254449070244617875327371482349747922007322925654721899292531437970801362293600332583028\"\r\n        \"5075085365728625752531558313122706564497752400689475234176262785745958583596519262982551084954488468348175\"\r\n        \"0356906680035745634081990280156537902955896451894056857642854631458680183155149708263004635251370102644329\"\r\n        \"0990620194213731716096275314588878324140586117059266130003365197752755538055825539146706962418669531081627\"\r\n        \"8956538752226825665660155431403000778210876921356767163335259731708420727484966404356877365126637885989046\"\r\n        \"3905389765065683072648161652478726480657951569115974814021219302867414887444634930099533608813073531513012\"\r\n        \"27499821580674880963753903452818017481731720230708759800108964554965496063232421875e-288\"},\r\n    {0x1.fffffffffffffp-954, chars_format::scientific, 719,\r\n        \"1.\"\r\n        \"3134517764154802539650889814048923575065474296469949584401464585130944379858506287594160272458720066516605\"\r\n        \"7015017073145725150506311662624541312899550480137895046835252557149191716719303852596510216990897693669635\"\r\n        \"0071381336007149126816398056031307580591179290378811371528570926291736036631029941652600927050274020528865\"\r\n        \"8198124038842746343219255062917775664828117223411853226000673039550551107611165107829341392483733906216325\"\r\n        \"5791307750445365133132031086280600155642175384271353432667051946341684145496993280871375473025327577197809\"\r\n        \"2781077953013136614529632330495745296131590313823194962804243860573482977488926986019906721762614706302602\"\r\n        \"45499964316134976192750780690563603496346344046141751960021792910993099212646484375e-287\"},\r\n    {0x1.fffffffffffffp-953, chars_format::scientific, 718,\r\n        \"2.\"\r\n        \"6269035528309605079301779628097847150130948592939899168802929170261888759717012575188320544917440133033211\"\r\n        \"4030034146291450301012623325249082625799100960275790093670505114298383433438607705193020433981795387339270\"\r\n        \"0142762672014298253632796112062615161182358580757622743057141852583472073262059883305201854100548041057731\"\r\n        \"6396248077685492686438510125835551329656234446823706452001346079101102215222330215658682784967467812432651\"\r\n        \"1582615500890730266264062172561200311284350768542706865334103892683368290993986561742750946050655154395618\"\r\n        \"5562155906026273229059264660991490592263180627646389925608487721146965954977853972039813443525229412605204\"\r\n        \"9099992863226995238550156138112720699269268809228350392004358582198619842529296875e-287\"},\r\n    {0x1.fffffffffffffp-952, chars_format::scientific, 717,\r\n        \"5.\"\r\n        \"2538071056619210158603559256195694300261897185879798337605858340523777519434025150376641089834880266066422\"\r\n        \"8060068292582900602025246650498165251598201920551580187341010228596766866877215410386040867963590774678540\"\r\n        \"0285525344028596507265592224125230322364717161515245486114283705166944146524119766610403708201096082115463\"\r\n        \"2792496155370985372877020251671102659312468893647412904002692158202204430444660431317365569934935624865302\"\r\n        \"3165231001781460532528124345122400622568701537085413730668207785366736581987973123485501892101310308791237\"\r\n        \"1124311812052546458118529321982981184526361255292779851216975442293931909955707944079626887050458825210409\"\r\n        \"819998572645399047710031227622544139853853761845670078400871716439723968505859375e-287\"},\r\n    {0x1.fffffffffffffp-951, chars_format::scientific, 717,\r\n        \"1.\"\r\n        \"0507614211323842031720711851239138860052379437175959667521171668104755503886805030075328217966976053213284\"\r\n        \"5612013658516580120405049330099633050319640384110316037468202045719353373375443082077208173592718154935708\"\r\n        \"0057105068805719301453118444825046064472943432303049097222856741033388829304823953322080741640219216423092\"\r\n        \"6558499231074197074575404050334220531862493778729482580800538431640440886088932086263473113986987124973060\"\r\n        \"4633046200356292106505624869024480124513740307417082746133641557073347316397594624697100378420262061758247\"\r\n        \"4224862362410509291623705864396596236905272251058555970243395088458786381991141588815925377410091765042081\"\r\n        \"963999714529079809542006245524508827970770752369134015680174343287944793701171875e-286\"},\r\n    {0x1.fffffffffffffp-950, chars_format::scientific, 716,\r\n        \"2.\"\r\n        \"1015228422647684063441423702478277720104758874351919335042343336209511007773610060150656435933952106426569\"\r\n        \"1224027317033160240810098660199266100639280768220632074936404091438706746750886164154416347185436309871416\"\r\n        \"0114210137611438602906236889650092128945886864606098194445713482066777658609647906644161483280438432846185\"\r\n        \"3116998462148394149150808100668441063724987557458965161601076863280881772177864172526946227973974249946120\"\r\n        \"9266092400712584213011249738048960249027480614834165492267283114146694632795189249394200756840524123516494\"\r\n        \"8449724724821018583247411728793192473810544502117111940486790176917572763982283177631850754820183530084163\"\r\n        \"92799942905815961908401249104901765594154150473826803136034868657588958740234375e-286\"},\r\n    {0x1.fffffffffffffp-949, chars_format::scientific, 715,\r\n        \"4.\"\r\n        \"2030456845295368126882847404956555440209517748703838670084686672419022015547220120301312871867904212853138\"\r\n        \"2448054634066320481620197320398532201278561536441264149872808182877413493501772328308832694370872619742832\"\r\n        \"0228420275222877205812473779300184257891773729212196388891426964133555317219295813288322966560876865692370\"\r\n        \"6233996924296788298301616201336882127449975114917930323202153726561763544355728345053892455947948499892241\"\r\n        \"8532184801425168426022499476097920498054961229668330984534566228293389265590378498788401513681048247032989\"\r\n        \"6899449449642037166494823457586384947621089004234223880973580353835145527964566355263701509640367060168327\"\r\n        \"8559988581163192381680249820980353118830830094765360627206973731517791748046875e-286\"},\r\n    {0x1.fffffffffffffp-948, chars_format::scientific, 714,\r\n        \"8.\"\r\n        \"4060913690590736253765694809913110880419035497407677340169373344838044031094440240602625743735808425706276\"\r\n        \"4896109268132640963240394640797064402557123072882528299745616365754826987003544656617665388741745239485664\"\r\n        \"0456840550445754411624947558600368515783547458424392777782853928267110634438591626576645933121753731384741\"\r\n        \"2467993848593576596603232402673764254899950229835860646404307453123527088711456690107784911895896999784483\"\r\n        \"7064369602850336852044998952195840996109922459336661969069132456586778531180756997576803027362096494065979\"\r\n        \"3798898899284074332989646915172769895242178008468447761947160707670291055929132710527403019280734120336655\"\r\n        \"711997716232638476336049964196070623766166018953072125441394746303558349609375e-286\"},\r\n    {0x1.fffffffffffffp-947, chars_format::scientific, 714,\r\n        \"1.\"\r\n        \"6812182738118147250753138961982622176083807099481535468033874668967608806218888048120525148747161685141255\"\r\n        \"2979221853626528192648078928159412880511424614576505659949123273150965397400708931323533077748349047897132\"\r\n        \"8091368110089150882324989511720073703156709491684878555556570785653422126887718325315329186624350746276948\"\r\n        \"2493598769718715319320646480534752850979990045967172129280861490624705417742291338021556982379179399956896\"\r\n        \"7412873920570067370408999790439168199221984491867332393813826491317355706236151399515360605472419298813195\"\r\n        \"8759779779856814866597929383034553979048435601693689552389432141534058211185826542105480603856146824067331\"\r\n        \"142399543246527695267209992839214124753233203790614425088278949260711669921875e-285\"},\r\n    {0x1.fffffffffffffp-946, chars_format::scientific, 713,\r\n        \"3.\"\r\n        \"3624365476236294501506277923965244352167614198963070936067749337935217612437776096241050297494323370282510\"\r\n        \"5958443707253056385296157856318825761022849229153011319898246546301930794801417862647066155496698095794265\"\r\n        \"6182736220178301764649979023440147406313418983369757111113141571306844253775436650630658373248701492553896\"\r\n        \"4987197539437430638641292961069505701959980091934344258561722981249410835484582676043113964758358799913793\"\r\n        \"4825747841140134740817999580878336398443968983734664787627652982634711412472302799030721210944838597626391\"\r\n        \"7519559559713629733195858766069107958096871203387379104778864283068116422371653084210961207712293648134662\"\r\n        \"28479908649305539053441998567842824950646640758122885017655789852142333984375e-285\"},\r\n    {0x1.fffffffffffffp-945, chars_format::scientific, 712,\r\n        \"6.\"\r\n        \"7248730952472589003012555847930488704335228397926141872135498675870435224875552192482100594988646740565021\"\r\n        \"1916887414506112770592315712637651522045698458306022639796493092603861589602835725294132310993396191588531\"\r\n        \"2365472440356603529299958046880294812626837966739514222226283142613688507550873301261316746497402985107792\"\r\n        \"9974395078874861277282585922139011403919960183868688517123445962498821670969165352086227929516717599827586\"\r\n        \"9651495682280269481635999161756672796887937967469329575255305965269422824944605598061442421889677195252783\"\r\n        \"5039119119427259466391717532138215916193742406774758209557728566136232844743306168421922415424587296269324\"\r\n        \"5695981729861107810688399713568564990129328151624577003531157970428466796875e-285\"},\r\n    {0x1.fffffffffffffp-944, chars_format::scientific, 712,\r\n        \"1.\"\r\n        \"3449746190494517800602511169586097740867045679585228374427099735174087044975110438496420118997729348113004\"\r\n        \"2383377482901222554118463142527530304409139691661204527959298618520772317920567145058826462198679238317706\"\r\n        \"2473094488071320705859991609376058962525367593347902844445256628522737701510174660252263349299480597021558\"\r\n        \"5994879015774972255456517184427802280783992036773737703424689192499764334193833070417245585903343519965517\"\r\n        \"3930299136456053896327199832351334559377587593493865915051061193053884564988921119612288484377935439050556\"\r\n        \"7007823823885451893278343506427643183238748481354951641911545713227246568948661233684384483084917459253864\"\r\n        \"9139196345972221562137679942713712998025865630324915400706231594085693359375e-284\"},\r\n    {0x1.fffffffffffffp-943, chars_format::scientific, 711,\r\n        \"2.\"\r\n        \"6899492380989035601205022339172195481734091359170456748854199470348174089950220876992840237995458696226008\"\r\n        \"4766754965802445108236926285055060608818279383322409055918597237041544635841134290117652924397358476635412\"\r\n        \"4946188976142641411719983218752117925050735186695805688890513257045475403020349320504526698598961194043117\"\r\n        \"1989758031549944510913034368855604561567984073547475406849378384999528668387666140834491171806687039931034\"\r\n        \"7860598272912107792654399664702669118755175186987731830102122386107769129977842239224576968755870878101113\"\r\n        \"4015647647770903786556687012855286366477496962709903283823091426454493137897322467368768966169834918507729\"\r\n        \"827839269194444312427535988542742599605173126064983080141246318817138671875e-284\"},\r\n    {0x1.fffffffffffffp-942, chars_format::scientific, 710,\r\n        \"5.\"\r\n        \"3798984761978071202410044678344390963468182718340913497708398940696348179900441753985680475990917392452016\"\r\n        \"9533509931604890216473852570110121217636558766644818111837194474083089271682268580235305848794716953270824\"\r\n        \"9892377952285282823439966437504235850101470373391611377781026514090950806040698641009053397197922388086234\"\r\n        \"3979516063099889021826068737711209123135968147094950813698756769999057336775332281668982343613374079862069\"\r\n        \"5721196545824215585308799329405338237510350373975463660204244772215538259955684478449153937511741756202226\"\r\n        \"8031295295541807573113374025710572732954993925419806567646182852908986275794644934737537932339669837015459\"\r\n        \"65567853838888862485507197708548519921034625212996616028249263763427734375e-284\"},\r\n    {0x1.fffffffffffffp-941, chars_format::scientific, 710,\r\n        \"1.\"\r\n        \"0759796952395614240482008935668878192693636543668182699541679788139269635980088350797136095198183478490403\"\r\n        \"3906701986320978043294770514022024243527311753328963622367438894816617854336453716047061169758943390654164\"\r\n        \"9978475590457056564687993287500847170020294074678322275556205302818190161208139728201810679439584477617246\"\r\n        \"8795903212619977804365213747542241824627193629418990162739751353999811467355066456333796468722674815972413\"\r\n        \"9144239309164843117061759865881067647502070074795092732040848954443107651991136895689830787502348351240445\"\r\n        \"3606259059108361514622674805142114546590998785083961313529236570581797255158928986947507586467933967403091\"\r\n        \"93113570767777772497101439541709703984206925042599323205649852752685546875e-283\"},\r\n    {0x1.fffffffffffffp-940, chars_format::scientific, 709,\r\n        \"2.\"\r\n        \"1519593904791228480964017871337756385387273087336365399083359576278539271960176701594272190396366956980806\"\r\n        \"7813403972641956086589541028044048487054623506657927244734877789633235708672907432094122339517886781308329\"\r\n        \"9956951180914113129375986575001694340040588149356644551112410605636380322416279456403621358879168955234493\"\r\n        \"7591806425239955608730427495084483649254387258837980325479502707999622934710132912667592937445349631944827\"\r\n        \"8288478618329686234123519731762135295004140149590185464081697908886215303982273791379661575004696702480890\"\r\n        \"7212518118216723029245349610284229093181997570167922627058473141163594510317857973895015172935867934806183\"\r\n        \"8622714153555554499420287908341940796841385008519864641129970550537109375e-283\"},\r\n    {0x1.fffffffffffffp-939, chars_format::scientific, 708,\r\n        \"4.\"\r\n        \"3039187809582456961928035742675512770774546174672730798166719152557078543920353403188544380792733913961613\"\r\n        \"5626807945283912173179082056088096974109247013315854489469755579266471417345814864188244679035773562616659\"\r\n        \"9913902361828226258751973150003388680081176298713289102224821211272760644832558912807242717758337910468987\"\r\n        \"5183612850479911217460854990168967298508774517675960650959005415999245869420265825335185874890699263889655\"\r\n        \"6576957236659372468247039463524270590008280299180370928163395817772430607964547582759323150009393404961781\"\r\n        \"4425036236433446058490699220568458186363995140335845254116946282327189020635715947790030345871735869612367\"\r\n        \"724542830711110899884057581668388159368277001703972928225994110107421875e-283\"},\r\n    {0x1.fffffffffffffp-938, chars_format::scientific, 707,\r\n        \"8.\"\r\n        \"6078375619164913923856071485351025541549092349345461596333438305114157087840706806377088761585467827923227\"\r\n        \"1253615890567824346358164112176193948218494026631708978939511158532942834691629728376489358071547125233319\"\r\n        \"9827804723656452517503946300006777360162352597426578204449642422545521289665117825614485435516675820937975\"\r\n        \"0367225700959822434921709980337934597017549035351921301918010831998491738840531650670371749781398527779311\"\r\n        \"3153914473318744936494078927048541180016560598360741856326791635544861215929095165518646300018786809923562\"\r\n        \"8850072472866892116981398441136916372727990280671690508233892564654378041271431895580060691743471739224735\"\r\n        \"44908566142222179976811516333677631873655400340794585645198822021484375e-283\"},\r\n    {0x1.fffffffffffffp-937, chars_format::scientific, 707,\r\n        \"1.\"\r\n        \"7215675123832982784771214297070205108309818469869092319266687661022831417568141361275417752317093565584645\"\r\n        \"4250723178113564869271632822435238789643698805326341795787902231706588566938325945675297871614309425046663\"\r\n        \"9965560944731290503500789260001355472032470519485315640889928484509104257933023565122897087103335164187595\"\r\n        \"0073445140191964486984341996067586919403509807070384260383602166399698347768106330134074349956279705555862\"\r\n        \"2630782894663748987298815785409708236003312119672148371265358327108972243185819033103729260003757361984712\"\r\n        \"5770014494573378423396279688227383274545598056134338101646778512930875608254286379116012138348694347844947\"\r\n        \"08981713228444435995362303266735526374731080068158917129039764404296875e-282\"},\r\n    {0x1.fffffffffffffp-936, chars_format::scientific, 706,\r\n        \"3.\"\r\n        \"4431350247665965569542428594140410216619636939738184638533375322045662835136282722550835504634187131169290\"\r\n        \"8501446356227129738543265644870477579287397610652683591575804463413177133876651891350595743228618850093327\"\r\n        \"9931121889462581007001578520002710944064941038970631281779856969018208515866047130245794174206670328375190\"\r\n        \"0146890280383928973968683992135173838807019614140768520767204332799396695536212660268148699912559411111724\"\r\n        \"5261565789327497974597631570819416472006624239344296742530716654217944486371638066207458520007514723969425\"\r\n        \"1540028989146756846792559376454766549091196112268676203293557025861751216508572758232024276697388695689894\"\r\n        \"1796342645688887199072460653347105274946216013631783425807952880859375e-282\"},\r\n    {0x1.fffffffffffffp-935, chars_format::scientific, 705,\r\n        \"6.\"\r\n        \"8862700495331931139084857188280820433239273879476369277066750644091325670272565445101671009268374262338581\"\r\n        \"7002892712454259477086531289740955158574795221305367183151608926826354267753303782701191486457237700186655\"\r\n        \"9862243778925162014003157040005421888129882077941262563559713938036417031732094260491588348413340656750380\"\r\n        \"0293780560767857947937367984270347677614039228281537041534408665598793391072425320536297399825118822223449\"\r\n        \"0523131578654995949195263141638832944013248478688593485061433308435888972743276132414917040015029447938850\"\r\n        \"3080057978293513693585118752909533098182392224537352406587114051723502433017145516464048553394777391379788\"\r\n        \"359268529137777439814492130669421054989243202726356685161590576171875e-282\"},\r\n    {0x1.fffffffffffffp-934, chars_format::scientific, 705,\r\n        \"1.\"\r\n        \"3772540099066386227816971437656164086647854775895273855413350128818265134054513089020334201853674852467716\"\r\n        \"3400578542490851895417306257948191031714959044261073436630321785365270853550660756540238297291447540037331\"\r\n        \"1972448755785032402800631408001084377625976415588252512711942787607283406346418852098317669682668131350076\"\r\n        \"0058756112153571589587473596854069535522807845656307408306881733119758678214485064107259479965023764444689\"\r\n        \"8104626315730999189839052628327766588802649695737718697012286661687177794548655226482983408003005889587770\"\r\n        \"0616011595658702738717023750581906619636478444907470481317422810344700486603429103292809710678955478275957\"\r\n        \"671853705827555487962898426133884210997848640545271337032318115234375e-281\"},\r\n    {0x1.fffffffffffffp-933, chars_format::scientific, 704,\r\n        \"2.\"\r\n        \"7545080198132772455633942875312328173295709551790547710826700257636530268109026178040668403707349704935432\"\r\n        \"6801157084981703790834612515896382063429918088522146873260643570730541707101321513080476594582895080074662\"\r\n        \"3944897511570064805601262816002168755251952831176505025423885575214566812692837704196635339365336262700152\"\r\n        \"0117512224307143179174947193708139071045615691312614816613763466239517356428970128214518959930047528889379\"\r\n        \"6209252631461998379678105256655533177605299391475437394024573323374355589097310452965966816006011779175540\"\r\n        \"1232023191317405477434047501163813239272956889814940962634845620689400973206858206585619421357910956551915\"\r\n        \"34370741165511097592579685226776842199569728109054267406463623046875e-281\"},\r\n    {0x1.fffffffffffffp-932, chars_format::scientific, 703,\r\n        \"5.\"\r\n        \"5090160396265544911267885750624656346591419103581095421653400515273060536218052356081336807414699409870865\"\r\n        \"3602314169963407581669225031792764126859836177044293746521287141461083414202643026160953189165790160149324\"\r\n        \"7889795023140129611202525632004337510503905662353010050847771150429133625385675408393270678730672525400304\"\r\n        \"0235024448614286358349894387416278142091231382625229633227526932479034712857940256429037919860095057778759\"\r\n        \"2418505262923996759356210513311066355210598782950874788049146646748711178194620905931933632012023558351080\"\r\n        \"2464046382634810954868095002327626478545913779629881925269691241378801946413716413171238842715821913103830\"\r\n        \"6874148233102219518515937045355368439913945621810853481292724609375e-281\"},\r\n    {0x1.fffffffffffffp-931, chars_format::scientific, 703,\r\n        \"1.\"\r\n        \"1018032079253108982253577150124931269318283820716219084330680103054612107243610471216267361482939881974173\"\r\n        \"0720462833992681516333845006358552825371967235408858749304257428292216682840528605232190637833158032029864\"\r\n        \"9577959004628025922240505126400867502100781132470602010169554230085826725077135081678654135746134505080060\"\r\n        \"8047004889722857271669978877483255628418246276525045926645505386495806942571588051285807583972019011555751\"\r\n        \"8483701052584799351871242102662213271042119756590174957609829329349742235638924181186386726402404711670216\"\r\n        \"0492809276526962190973619000465525295709182755925976385053938248275760389282743282634247768543164382620766\"\r\n        \"1374829646620443903703187409071073687982789124362170696258544921875e-280\"},\r\n    {0x1.fffffffffffffp-930, chars_format::scientific, 702,\r\n        \"2.\"\r\n        \"2036064158506217964507154300249862538636567641432438168661360206109224214487220942432534722965879763948346\"\r\n        \"1440925667985363032667690012717105650743934470817717498608514856584433365681057210464381275666316064059729\"\r\n        \"9155918009256051844481010252801735004201562264941204020339108460171653450154270163357308271492269010160121\"\r\n        \"6094009779445714543339957754966511256836492553050091853291010772991613885143176102571615167944038023111503\"\r\n        \"6967402105169598703742484205324426542084239513180349915219658658699484471277848362372773452804809423340432\"\r\n        \"0985618553053924381947238000931050591418365511851952770107876496551520778565486565268495537086328765241532\"\r\n        \"274965929324088780740637481814214737596557824872434139251708984375e-280\"},\r\n    {0x1.fffffffffffffp-929, chars_format::scientific, 701,\r\n        \"4.\"\r\n        \"4072128317012435929014308600499725077273135282864876337322720412218448428974441884865069445931759527896692\"\r\n        \"2881851335970726065335380025434211301487868941635434997217029713168866731362114420928762551332632128119459\"\r\n        \"8311836018512103688962020505603470008403124529882408040678216920343306900308540326714616542984538020320243\"\r\n        \"2188019558891429086679915509933022513672985106100183706582021545983227770286352205143230335888076046223007\"\r\n        \"3934804210339197407484968410648853084168479026360699830439317317398968942555696724745546905609618846680864\"\r\n        \"1971237106107848763894476001862101182836731023703905540215752993103041557130973130536991074172657530483064\"\r\n        \"54993185864817756148127496362842947519311564974486827850341796875e-280\"},\r\n    {0x1.fffffffffffffp-928, chars_format::scientific, 700,\r\n        \"8.\"\r\n        \"8144256634024871858028617200999450154546270565729752674645440824436896857948883769730138891863519055793384\"\r\n        \"5763702671941452130670760050868422602975737883270869994434059426337733462724228841857525102665264256238919\"\r\n        \"6623672037024207377924041011206940016806249059764816081356433840686613800617080653429233085969076040640486\"\r\n        \"4376039117782858173359831019866045027345970212200367413164043091966455540572704410286460671776152092446014\"\r\n        \"7869608420678394814969936821297706168336958052721399660878634634797937885111393449491093811219237693361728\"\r\n        \"3942474212215697527788952003724202365673462047407811080431505986206083114261946261073982148345315060966129\"\r\n        \"0998637172963551229625499272568589503862312994897365570068359375e-280\"},\r\n    {0x1.fffffffffffffp-927, chars_format::scientific, 700,\r\n        \"1.\"\r\n        \"7628851326804974371605723440199890030909254113145950534929088164887379371589776753946027778372703811158676\"\r\n        \"9152740534388290426134152010173684520595147576654173998886811885267546692544845768371505020533052851247783\"\r\n        \"9324734407404841475584808202241388003361249811952963216271286768137322760123416130685846617193815208128097\"\r\n        \"2875207823556571634671966203973209005469194042440073482632808618393291108114540882057292134355230418489202\"\r\n        \"9573921684135678962993987364259541233667391610544279932175726926959587577022278689898218762243847538672345\"\r\n        \"6788494842443139505557790400744840473134692409481562216086301197241216622852389252214796429669063012193225\"\r\n        \"8199727434592710245925099854513717900772462598979473114013671875e-279\"},\r\n    {0x1.fffffffffffffp-926, chars_format::scientific, 699,\r\n        \"3.\"\r\n        \"5257702653609948743211446880399780061818508226291901069858176329774758743179553507892055556745407622317353\"\r\n        \"8305481068776580852268304020347369041190295153308347997773623770535093385089691536743010041066105702495567\"\r\n        \"8649468814809682951169616404482776006722499623905926432542573536274645520246832261371693234387630416256194\"\r\n        \"5750415647113143269343932407946418010938388084880146965265617236786582216229081764114584268710460836978405\"\r\n        \"9147843368271357925987974728519082467334783221088559864351453853919175154044557379796437524487695077344691\"\r\n        \"3576989684886279011115580801489680946269384818963124432172602394482433245704778504429592859338126024386451\"\r\n        \"639945486918542049185019970902743580154492519795894622802734375e-279\"},\r\n    {0x1.fffffffffffffp-925, chars_format::scientific, 698,\r\n        \"7.\"\r\n        \"0515405307219897486422893760799560123637016452583802139716352659549517486359107015784111113490815244634707\"\r\n        \"6610962137553161704536608040694738082380590306616695995547247541070186770179383073486020082132211404991135\"\r\n        \"7298937629619365902339232808965552013444999247811852865085147072549291040493664522743386468775260832512389\"\r\n        \"1500831294226286538687864815892836021876776169760293930531234473573164432458163528229168537420921673956811\"\r\n        \"8295686736542715851975949457038164934669566442177119728702907707838350308089114759592875048975390154689382\"\r\n        \"7153979369772558022231161602979361892538769637926248864345204788964866491409557008859185718676252048772903\"\r\n        \"27989097383708409837003994180548716030898503959178924560546875e-279\"},\r\n    {0x1.fffffffffffffp-924, chars_format::scientific, 698,\r\n        \"1.\"\r\n        \"4103081061443979497284578752159912024727403290516760427943270531909903497271821403156822222698163048926941\"\r\n        \"5322192427510632340907321608138947616476118061323339199109449508214037354035876614697204016426442280998227\"\r\n        \"1459787525923873180467846561793110402688999849562370573017029414509858208098732904548677293755052166502477\"\r\n        \"8300166258845257307737572963178567204375355233952058786106246894714632886491632705645833707484184334791362\"\r\n        \"3659137347308543170395189891407632986933913288435423945740581541567670061617822951918575009795078030937876\"\r\n        \"5430795873954511604446232320595872378507753927585249772869040957792973298281911401771837143735250409754580\"\r\n        \"65597819476741681967400798836109743206179700791835784912109375e-278\"},\r\n    {0x1.fffffffffffffp-923, chars_format::scientific, 697,\r\n        \"2.\"\r\n        \"8206162122887958994569157504319824049454806581033520855886541063819806994543642806313644445396326097853883\"\r\n        \"0644384855021264681814643216277895232952236122646678398218899016428074708071753229394408032852884561996454\"\r\n        \"2919575051847746360935693123586220805377999699124741146034058829019716416197465809097354587510104333004955\"\r\n        \"6600332517690514615475145926357134408750710467904117572212493789429265772983265411291667414968368669582724\"\r\n        \"7318274694617086340790379782815265973867826576870847891481163083135340123235645903837150019590156061875753\"\r\n        \"0861591747909023208892464641191744757015507855170499545738081915585946596563822803543674287470500819509161\"\r\n        \"3119563895348336393480159767221948641235940158367156982421875e-278\"},\r\n    {0x1.fffffffffffffp-922, chars_format::scientific, 696,\r\n        \"5.\"\r\n        \"6412324245775917989138315008639648098909613162067041711773082127639613989087285612627288890792652195707766\"\r\n        \"1288769710042529363629286432555790465904472245293356796437798032856149416143506458788816065705769123992908\"\r\n        \"5839150103695492721871386247172441610755999398249482292068117658039432832394931618194709175020208666009911\"\r\n        \"3200665035381029230950291852714268817501420935808235144424987578858531545966530822583334829936737339165449\"\r\n        \"4636549389234172681580759565630531947735653153741695782962326166270680246471291807674300039180312123751506\"\r\n        \"1723183495818046417784929282383489514031015710340999091476163831171893193127645607087348574941001639018322\"\r\n        \"623912779069667278696031953444389728247188031673431396484375e-278\"},\r\n    {0x1.fffffffffffffp-921, chars_format::scientific, 696,\r\n        \"1.\"\r\n        \"1282464849155183597827663001727929619781922632413408342354616425527922797817457122525457778158530439141553\"\r\n        \"2257753942008505872725857286511158093180894449058671359287559606571229883228701291757763213141153824798581\"\r\n        \"7167830020739098544374277249434488322151199879649896458413623531607886566478986323638941835004041733201982\"\r\n        \"2640133007076205846190058370542853763500284187161647028884997515771706309193306164516666965987347467833089\"\r\n        \"8927309877846834536316151913126106389547130630748339156592465233254136049294258361534860007836062424750301\"\r\n        \"2344636699163609283556985856476697902806203142068199818295232766234378638625529121417469714988200327803664\"\r\n        \"524782555813933455739206390688877945649437606334686279296875e-277\"},\r\n    {0x1.fffffffffffffp-920, chars_format::scientific, 695,\r\n        \"2.\"\r\n        \"2564929698310367195655326003455859239563845264826816684709232851055845595634914245050915556317060878283106\"\r\n        \"4515507884017011745451714573022316186361788898117342718575119213142459766457402583515526426282307649597163\"\r\n        \"4335660041478197088748554498868976644302399759299792916827247063215773132957972647277883670008083466403964\"\r\n        \"5280266014152411692380116741085707527000568374323294057769995031543412618386612329033333931974694935666179\"\r\n        \"7854619755693669072632303826252212779094261261496678313184930466508272098588516723069720015672124849500602\"\r\n        \"4689273398327218567113971712953395805612406284136399636590465532468757277251058242834939429976400655607329\"\r\n        \"04956511162786691147841278137775589129887521266937255859375e-277\"},\r\n    {0x1.fffffffffffffp-919, chars_format::scientific, 694,\r\n        \"4.\"\r\n        \"5129859396620734391310652006911718479127690529653633369418465702111691191269828490101831112634121756566212\"\r\n        \"9031015768034023490903429146044632372723577796234685437150238426284919532914805167031052852564615299194326\"\r\n        \"8671320082956394177497108997737953288604799518599585833654494126431546265915945294555767340016166932807929\"\r\n        \"0560532028304823384760233482171415054001136748646588115539990063086825236773224658066667863949389871332359\"\r\n        \"5709239511387338145264607652504425558188522522993356626369860933016544197177033446139440031344249699001204\"\r\n        \"9378546796654437134227943425906791611224812568272799273180931064937514554502116485669878859952801311214658\"\r\n        \"0991302232557338229568255627555117825977504253387451171875e-277\"},\r\n    {0x1.fffffffffffffp-918, chars_format::scientific, 693,\r\n        \"9.\"\r\n        \"0259718793241468782621304013823436958255381059307266738836931404223382382539656980203662225268243513132425\"\r\n        \"8062031536068046981806858292089264745447155592469370874300476852569839065829610334062105705129230598388653\"\r\n        \"7342640165912788354994217995475906577209599037199171667308988252863092531831890589111534680032333865615858\"\r\n        \"1121064056609646769520466964342830108002273497293176231079980126173650473546449316133335727898779742664719\"\r\n        \"1418479022774676290529215305008851116377045045986713252739721866033088394354066892278880062688499398002409\"\r\n        \"8757093593308874268455886851813583222449625136545598546361862129875029109004232971339757719905602622429316\"\r\n        \"198260446511467645913651125511023565195500850677490234375e-277\"},\r\n    {0x1.fffffffffffffp-917, chars_format::scientific, 693,\r\n        \"1.\"\r\n        \"8051943758648293756524260802764687391651076211861453347767386280844676476507931396040732445053648702626485\"\r\n        \"1612406307213609396361371658417852949089431118493874174860095370513967813165922066812421141025846119677730\"\r\n        \"7468528033182557670998843599095181315441919807439834333461797650572618506366378117822306936006466773123171\"\r\n        \"6224212811321929353904093392868566021600454699458635246215996025234730094709289863226667145579755948532943\"\r\n        \"8283695804554935258105843061001770223275409009197342650547944373206617678870813378455776012537699879600481\"\r\n        \"9751418718661774853691177370362716644489925027309119709272372425975005821800846594267951543981120524485863\"\r\n        \"239652089302293529182730225102204713039100170135498046875e-276\"},\r\n    {0x1.fffffffffffffp-916, chars_format::scientific, 692,\r\n        \"3.\"\r\n        \"6103887517296587513048521605529374783302152423722906695534772561689352953015862792081464890107297405252970\"\r\n        \"3224812614427218792722743316835705898178862236987748349720190741027935626331844133624842282051692239355461\"\r\n        \"4937056066365115341997687198190362630883839614879668666923595301145237012732756235644613872012933546246343\"\r\n        \"2448425622643858707808186785737132043200909398917270492431992050469460189418579726453334291159511897065887\"\r\n        \"6567391609109870516211686122003540446550818018394685301095888746413235357741626756911552025075399759200963\"\r\n        \"9502837437323549707382354740725433288979850054618239418544744851950011643601693188535903087962241048971726\"\r\n        \"47930417860458705836546045020440942607820034027099609375e-276\"},\r\n    {0x1.fffffffffffffp-915, chars_format::scientific, 691,\r\n        \"7.\"\r\n        \"2207775034593175026097043211058749566604304847445813391069545123378705906031725584162929780214594810505940\"\r\n        \"6449625228854437585445486633671411796357724473975496699440381482055871252663688267249684564103384478710922\"\r\n        \"9874112132730230683995374396380725261767679229759337333847190602290474025465512471289227744025867092492686\"\r\n        \"4896851245287717415616373571474264086401818797834540984863984100938920378837159452906668582319023794131775\"\r\n        \"3134783218219741032423372244007080893101636036789370602191777492826470715483253513823104050150799518401927\"\r\n        \"9005674874647099414764709481450866577959700109236478837089489703900023287203386377071806175924482097943452\"\r\n        \"9586083572091741167309209004088188521564006805419921875e-276\"},\r\n    {0x1.fffffffffffffp-914, chars_format::scientific, 691,\r\n        \"1.\"\r\n        \"4441555006918635005219408642211749913320860969489162678213909024675741181206345116832585956042918962101188\"\r\n        \"1289925045770887517089097326734282359271544894795099339888076296411174250532737653449936912820676895742184\"\r\n        \"5974822426546046136799074879276145052353535845951867466769438120458094805093102494257845548805173418498537\"\r\n        \"2979370249057543483123274714294852817280363759566908196972796820187784075767431890581333716463804758826355\"\r\n        \"0626956643643948206484674448801416178620327207357874120438355498565294143096650702764620810030159903680385\"\r\n        \"5801134974929419882952941896290173315591940021847295767417897940780004657440677275414361235184896419588690\"\r\n        \"5917216714418348233461841800817637704312801361083984375e-275\"},\r\n    {0x1.fffffffffffffp-913, chars_format::scientific, 690,\r\n        \"2.\"\r\n        \"8883110013837270010438817284423499826641721938978325356427818049351482362412690233665171912085837924202376\"\r\n        \"2579850091541775034178194653468564718543089789590198679776152592822348501065475306899873825641353791484369\"\r\n        \"1949644853092092273598149758552290104707071691903734933538876240916189610186204988515691097610346836997074\"\r\n        \"5958740498115086966246549428589705634560727519133816393945593640375568151534863781162667432927609517652710\"\r\n        \"1253913287287896412969348897602832357240654414715748240876710997130588286193301405529241620060319807360771\"\r\n        \"1602269949858839765905883792580346631183880043694591534835795881560009314881354550828722470369792839177381\"\r\n        \"183443342883669646692368360163527540862560272216796875e-275\"},\r\n    {0x1.fffffffffffffp-912, chars_format::scientific, 689,\r\n        \"5.\"\r\n        \"7766220027674540020877634568846999653283443877956650712855636098702964724825380467330343824171675848404752\"\r\n        \"5159700183083550068356389306937129437086179579180397359552305185644697002130950613799747651282707582968738\"\r\n        \"3899289706184184547196299517104580209414143383807469867077752481832379220372409977031382195220693673994149\"\r\n        \"1917480996230173932493098857179411269121455038267632787891187280751136303069727562325334865855219035305420\"\r\n        \"2507826574575792825938697795205664714481308829431496481753421994261176572386602811058483240120639614721542\"\r\n        \"3204539899717679531811767585160693262367760087389183069671591763120018629762709101657444940739585678354762\"\r\n        \"36688668576733929338473672032705508172512054443359375e-275\"},\r\n    {0x1.fffffffffffffp-911, chars_format::scientific, 689,\r\n        \"1.\"\r\n        \"1553244005534908004175526913769399930656688775591330142571127219740592944965076093466068764834335169680950\"\r\n        \"5031940036616710013671277861387425887417235915836079471910461037128939400426190122759949530256541516593747\"\r\n        \"6779857941236836909439259903420916041882828676761493973415550496366475844074481995406276439044138734798829\"\r\n        \"8383496199246034786498619771435882253824291007653526557578237456150227260613945512465066973171043807061084\"\r\n        \"0501565314915158565187739559041132942896261765886299296350684398852235314477320562211696648024127922944308\"\r\n        \"4640907979943535906362353517032138652473552017477836613934318352624003725952541820331488988147917135670952\"\r\n        \"47337733715346785867694734406541101634502410888671875e-274\"},\r\n    {0x1.fffffffffffffp-910, chars_format::scientific, 688,\r\n        \"2.\"\r\n        \"3106488011069816008351053827538799861313377551182660285142254439481185889930152186932137529668670339361901\"\r\n        \"0063880073233420027342555722774851774834471831672158943820922074257878800852380245519899060513083033187495\"\r\n        \"3559715882473673818878519806841832083765657353522987946831100992732951688148963990812552878088277469597659\"\r\n        \"6766992398492069572997239542871764507648582015307053115156474912300454521227891024930133946342087614122168\"\r\n        \"1003130629830317130375479118082265885792523531772598592701368797704470628954641124423393296048255845888616\"\r\n        \"9281815959887071812724707034064277304947104034955673227868636705248007451905083640662977976295834271341904\"\r\n        \"9467546743069357173538946881308220326900482177734375e-274\"},\r\n    {0x1.fffffffffffffp-909, chars_format::scientific, 687,\r\n        \"4.\"\r\n        \"6212976022139632016702107655077599722626755102365320570284508878962371779860304373864275059337340678723802\"\r\n        \"0127760146466840054685111445549703549668943663344317887641844148515757601704760491039798121026166066374990\"\r\n        \"7119431764947347637757039613683664167531314707045975893662201985465903376297927981625105756176554939195319\"\r\n        \"3533984796984139145994479085743529015297164030614106230312949824600909042455782049860267892684175228244336\"\r\n        \"2006261259660634260750958236164531771585047063545197185402737595408941257909282248846786592096511691777233\"\r\n        \"8563631919774143625449414068128554609894208069911346455737273410496014903810167281325955952591668542683809\"\r\n        \"893509348613871434707789376261644065380096435546875e-274\"},\r\n    {0x1.fffffffffffffp-908, chars_format::scientific, 686,\r\n        \"9.\"\r\n        \"2425952044279264033404215310155199445253510204730641140569017757924743559720608747728550118674681357447604\"\r\n        \"0255520292933680109370222891099407099337887326688635775283688297031515203409520982079596242052332132749981\"\r\n        \"4238863529894695275514079227367328335062629414091951787324403970931806752595855963250211512353109878390638\"\r\n        \"7067969593968278291988958171487058030594328061228212460625899649201818084911564099720535785368350456488672\"\r\n        \"4012522519321268521501916472329063543170094127090394370805475190817882515818564497693573184193023383554467\"\r\n        \"7127263839548287250898828136257109219788416139822692911474546820992029807620334562651911905183337085367619\"\r\n        \"78701869722774286941557875252328813076019287109375e-274\"},\r\n    {0x1.fffffffffffffp-907, chars_format::scientific, 686,\r\n        \"1.\"\r\n        \"8485190408855852806680843062031039889050702040946128228113803551584948711944121749545710023734936271489520\"\r\n        \"8051104058586736021874044578219881419867577465337727155056737659406303040681904196415919248410466426549996\"\r\n        \"2847772705978939055102815845473465667012525882818390357464880794186361350519171192650042302470621975678127\"\r\n        \"7413593918793655658397791634297411606118865612245642492125179929840363616982312819944107157073670091297734\"\r\n        \"4802504503864253704300383294465812708634018825418078874161095038163576503163712899538714636838604676710893\"\r\n        \"5425452767909657450179765627251421843957683227964538582294909364198405961524066912530382381036667417073523\"\r\n        \"95740373944554857388311575050465762615203857421875e-273\"},\r\n    {0x1.fffffffffffffp-906, chars_format::scientific, 685,\r\n        \"3.\"\r\n        \"6970380817711705613361686124062079778101404081892256456227607103169897423888243499091420047469872542979041\"\r\n        \"6102208117173472043748089156439762839735154930675454310113475318812606081363808392831838496820932853099992\"\r\n        \"5695545411957878110205631690946931334025051765636780714929761588372722701038342385300084604941243951356255\"\r\n        \"4827187837587311316795583268594823212237731224491284984250359859680727233964625639888214314147340182595468\"\r\n        \"9605009007728507408600766588931625417268037650836157748322190076327153006327425799077429273677209353421787\"\r\n        \"0850905535819314900359531254502843687915366455929077164589818728396811923048133825060764762073334834147047\"\r\n        \"9148074788910971477662315010093152523040771484375e-273\"},\r\n    {0x1.fffffffffffffp-905, chars_format::scientific, 684,\r\n        \"7.\"\r\n        \"3940761635423411226723372248124159556202808163784512912455214206339794847776486998182840094939745085958083\"\r\n        \"2204416234346944087496178312879525679470309861350908620226950637625212162727616785663676993641865706199985\"\r\n        \"1391090823915756220411263381893862668050103531273561429859523176745445402076684770600169209882487902712510\"\r\n        \"9654375675174622633591166537189646424475462448982569968500719719361454467929251279776428628294680365190937\"\r\n        \"9210018015457014817201533177863250834536075301672315496644380152654306012654851598154858547354418706843574\"\r\n        \"1701811071638629800719062509005687375830732911858154329179637456793623846096267650121529524146669668294095\"\r\n        \"829614957782194295532463002018630504608154296875e-273\"},\r\n    {0x1.fffffffffffffp-904, chars_format::scientific, 684,\r\n        \"1.\"\r\n        \"4788152327084682245344674449624831911240561632756902582491042841267958969555297399636568018987949017191616\"\r\n        \"6440883246869388817499235662575905135894061972270181724045390127525042432545523357132735398728373141239997\"\r\n        \"0278218164783151244082252676378772533610020706254712285971904635349089080415336954120033841976497580542502\"\r\n        \"1930875135034924526718233307437929284895092489796513993700143943872290893585850255955285725658936073038187\"\r\n        \"5842003603091402963440306635572650166907215060334463099328876030530861202530970319630971709470883741368714\"\r\n        \"8340362214327725960143812501801137475166146582371630865835927491358724769219253530024305904829333933658819\"\r\n        \"165922991556438859106492600403726100921630859375e-272\"},\r\n    {0x1.fffffffffffffp-903, chars_format::scientific, 683,\r\n        \"2.\"\r\n        \"9576304654169364490689348899249663822481123265513805164982085682535917939110594799273136037975898034383233\"\r\n        \"2881766493738777634998471325151810271788123944540363448090780255050084865091046714265470797456746282479994\"\r\n        \"0556436329566302488164505352757545067220041412509424571943809270698178160830673908240067683952995161085004\"\r\n        \"3861750270069849053436466614875858569790184979593027987400287887744581787171700511910571451317872146076375\"\r\n        \"1684007206182805926880613271145300333814430120668926198657752061061722405061940639261943418941767482737429\"\r\n        \"6680724428655451920287625003602274950332293164743261731671854982717449538438507060048611809658667867317638\"\r\n        \"33184598311287771821298520080745220184326171875e-272\"},\r\n    {0x1.fffffffffffffp-902, chars_format::scientific, 682,\r\n        \"5.\"\r\n        \"9152609308338728981378697798499327644962246531027610329964171365071835878221189598546272075951796068766466\"\r\n        \"5763532987477555269996942650303620543576247889080726896181560510100169730182093428530941594913492564959988\"\r\n        \"1112872659132604976329010705515090134440082825018849143887618541396356321661347816480135367905990322170008\"\r\n        \"7723500540139698106872933229751717139580369959186055974800575775489163574343401023821142902635744292152750\"\r\n        \"3368014412365611853761226542290600667628860241337852397315504122123444810123881278523886837883534965474859\"\r\n        \"3361448857310903840575250007204549900664586329486523463343709965434899076877014120097223619317335734635276\"\r\n        \"6636919662257554364259704016149044036865234375e-272\"},\r\n    {0x1.fffffffffffffp-901, chars_format::scientific, 682,\r\n        \"1.\"\r\n        \"1830521861667745796275739559699865528992449306205522065992834273014367175644237919709254415190359213753293\"\r\n        \"3152706597495511053999388530060724108715249577816145379236312102020033946036418685706188318982698512991997\"\r\n        \"6222574531826520995265802141103018026888016565003769828777523708279271264332269563296027073581198064434001\"\r\n        \"7544700108027939621374586645950343427916073991837211194960115155097832714868680204764228580527148858430550\"\r\n        \"0673602882473122370752245308458120133525772048267570479463100824424688962024776255704777367576706993094971\"\r\n        \"8672289771462180768115050001440909980132917265897304692668741993086979815375402824019444723863467146927055\"\r\n        \"3327383932451510872851940803229808807373046875e-271\"},\r\n    {0x1.fffffffffffffp-900, chars_format::scientific, 681,\r\n        \"2.\"\r\n        \"3661043723335491592551479119399731057984898612411044131985668546028734351288475839418508830380718427506586\"\r\n        \"6305413194991022107998777060121448217430499155632290758472624204040067892072837371412376637965397025983995\"\r\n        \"2445149063653041990531604282206036053776033130007539657555047416558542528664539126592054147162396128868003\"\r\n        \"5089400216055879242749173291900686855832147983674422389920230310195665429737360409528457161054297716861100\"\r\n        \"1347205764946244741504490616916240267051544096535140958926201648849377924049552511409554735153413986189943\"\r\n        \"7344579542924361536230100002881819960265834531794609385337483986173959630750805648038889447726934293854110\"\r\n        \"665476786490302174570388160645961761474609375e-271\"},\r\n    {0x1.fffffffffffffp-899, chars_format::scientific, 680,\r\n        \"4.\"\r\n        \"7322087446670983185102958238799462115969797224822088263971337092057468702576951678837017660761436855013173\"\r\n        \"2610826389982044215997554120242896434860998311264581516945248408080135784145674742824753275930794051967990\"\r\n        \"4890298127306083981063208564412072107552066260015079315110094833117085057329078253184108294324792257736007\"\r\n        \"0178800432111758485498346583801373711664295967348844779840460620391330859474720819056914322108595433722200\"\r\n        \"2694411529892489483008981233832480534103088193070281917852403297698755848099105022819109470306827972379887\"\r\n        \"4689159085848723072460200005763639920531669063589218770674967972347919261501611296077778895453868587708221\"\r\n        \"33095357298060434914077632129192352294921875e-271\"},\r\n    {0x1.fffffffffffffp-898, chars_format::scientific, 679,\r\n        \"9.\"\r\n        \"4644174893341966370205916477598924231939594449644176527942674184114937405153903357674035321522873710026346\"\r\n        \"5221652779964088431995108240485792869721996622529163033890496816160271568291349485649506551861588103935980\"\r\n        \"9780596254612167962126417128824144215104132520030158630220189666234170114658156506368216588649584515472014\"\r\n        \"0357600864223516970996693167602747423328591934697689559680921240782661718949441638113828644217190867444400\"\r\n        \"5388823059784978966017962467664961068206176386140563835704806595397511696198210045638218940613655944759774\"\r\n        \"9378318171697446144920400011527279841063338127178437541349935944695838523003222592155557790907737175416442\"\r\n        \"6619071459612086982815526425838470458984375e-271\"},\r\n    {0x1.fffffffffffffp-897, chars_format::scientific, 679,\r\n        \"1.\"\r\n        \"8928834978668393274041183295519784846387918889928835305588534836822987481030780671534807064304574742005269\"\r\n        \"3044330555992817686399021648097158573944399324505832606778099363232054313658269897129901310372317620787196\"\r\n        \"1956119250922433592425283425764828843020826504006031726044037933246834022931631301273643317729916903094402\"\r\n        \"8071520172844703394199338633520549484665718386939537911936184248156532343789888327622765728843438173488880\"\r\n        \"1077764611956995793203592493532992213641235277228112767140961319079502339239642009127643788122731188951954\"\r\n        \"9875663634339489228984080002305455968212667625435687508269987188939167704600644518431111558181547435083288\"\r\n        \"5323814291922417396563105285167694091796875e-270\"},\r\n    {0x1.fffffffffffffp-896, chars_format::scientific, 678,\r\n        \"3.\"\r\n        \"7857669957336786548082366591039569692775837779857670611177069673645974962061561343069614128609149484010538\"\r\n        \"6088661111985635372798043296194317147888798649011665213556198726464108627316539794259802620744635241574392\"\r\n        \"3912238501844867184850566851529657686041653008012063452088075866493668045863262602547286635459833806188805\"\r\n        \"6143040345689406788398677267041098969331436773879075823872368496313064687579776655245531457686876346977760\"\r\n        \"2155529223913991586407184987065984427282470554456225534281922638159004678479284018255287576245462377903909\"\r\n        \"9751327268678978457968160004610911936425335250871375016539974377878335409201289036862223116363094870166577\"\r\n        \"064762858384483479312621057033538818359375e-270\"},\r\n    {0x1.fffffffffffffp-895, chars_format::scientific, 677,\r\n        \"7.\"\r\n        \"5715339914673573096164733182079139385551675559715341222354139347291949924123122686139228257218298968021077\"\r\n        \"2177322223971270745596086592388634295777597298023330427112397452928217254633079588519605241489270483148784\"\r\n        \"7824477003689734369701133703059315372083306016024126904176151732987336091726525205094573270919667612377611\"\r\n        \"2286080691378813576797354534082197938662873547758151647744736992626129375159553310491062915373752693955520\"\r\n        \"4311058447827983172814369974131968854564941108912451068563845276318009356958568036510575152490924755807819\"\r\n        \"9502654537357956915936320009221823872850670501742750033079948755756670818402578073724446232726189740333154\"\r\n        \"12952571676896695862524211406707763671875e-270\"},\r\n    {0x1.fffffffffffffp-894, chars_format::scientific, 677,\r\n        \"1.\"\r\n        \"5143067982934714619232946636415827877110335111943068244470827869458389984824624537227845651443659793604215\"\r\n        \"4435464444794254149119217318477726859155519459604666085422479490585643450926615917703921048297854096629756\"\r\n        \"9564895400737946873940226740611863074416661203204825380835230346597467218345305041018914654183933522475522\"\r\n        \"2457216138275762715359470906816439587732574709551630329548947398525225875031910662098212583074750538791104\"\r\n        \"0862211689565596634562873994826393770912988221782490213712769055263601871391713607302115030498184951161563\"\r\n        \"9900530907471591383187264001844364774570134100348550006615989751151334163680515614744889246545237948066630\"\r\n        \"82590514335379339172504842281341552734375e-269\"},\r\n    {0x1.fffffffffffffp-893, chars_format::scientific, 676,\r\n        \"3.\"\r\n        \"0286135965869429238465893272831655754220670223886136488941655738916779969649249074455691302887319587208430\"\r\n        \"8870928889588508298238434636955453718311038919209332170844958981171286901853231835407842096595708193259513\"\r\n        \"9129790801475893747880453481223726148833322406409650761670460693194934436690610082037829308367867044951044\"\r\n        \"4914432276551525430718941813632879175465149419103260659097894797050451750063821324196425166149501077582208\"\r\n        \"1724423379131193269125747989652787541825976443564980427425538110527203742783427214604230060996369902323127\"\r\n        \"9801061814943182766374528003688729549140268200697100013231979502302668327361031229489778493090475896133261\"\r\n        \"6518102867075867834500968456268310546875e-269\"},\r\n    {0x1.fffffffffffffp-892, chars_format::scientific, 675,\r\n        \"6.\"\r\n        \"0572271931738858476931786545663311508441340447772272977883311477833559939298498148911382605774639174416861\"\r\n        \"7741857779177016596476869273910907436622077838418664341689917962342573803706463670815684193191416386519027\"\r\n        \"8259581602951787495760906962447452297666644812819301523340921386389868873381220164075658616735734089902088\"\r\n        \"9828864553103050861437883627265758350930298838206521318195789594100903500127642648392850332299002155164416\"\r\n        \"3448846758262386538251495979305575083651952887129960854851076221054407485566854429208460121992739804646255\"\r\n        \"9602123629886365532749056007377459098280536401394200026463959004605336654722062458979556986180951792266523\"\r\n        \"303620573415173566900193691253662109375e-269\"},\r\n    {0x1.fffffffffffffp-891, chars_format::scientific, 675,\r\n        \"1.\"\r\n        \"2114454386347771695386357309132662301688268089554454595576662295566711987859699629782276521154927834883372\"\r\n        \"3548371555835403319295373854782181487324415567683732868337983592468514760741292734163136838638283277303805\"\r\n        \"5651916320590357499152181392489490459533328962563860304668184277277973774676244032815131723347146817980417\"\r\n        \"7965772910620610172287576725453151670186059767641304263639157918820180700025528529678570066459800431032883\"\r\n        \"2689769351652477307650299195861115016730390577425992170970215244210881497113370885841692024398547960929251\"\r\n        \"1920424725977273106549811201475491819656107280278840005292791800921067330944412491795911397236190358453304\"\r\n        \"660724114683034713380038738250732421875e-268\"},\r\n    {0x1.fffffffffffffp-890, chars_format::scientific, 674,\r\n        \"2.\"\r\n        \"4228908772695543390772714618265324603376536179108909191153324591133423975719399259564553042309855669766744\"\r\n        \"7096743111670806638590747709564362974648831135367465736675967184937029521482585468326273677276566554607611\"\r\n        \"1303832641180714998304362784978980919066657925127720609336368554555947549352488065630263446694293635960835\"\r\n        \"5931545821241220344575153450906303340372119535282608527278315837640361400051057059357140132919600862065766\"\r\n        \"5379538703304954615300598391722230033460781154851984341940430488421762994226741771683384048797095921858502\"\r\n        \"3840849451954546213099622402950983639312214560557680010585583601842134661888824983591822794472380716906609\"\r\n        \"32144822936606942676007747650146484375e-268\"},\r\n    {0x1.fffffffffffffp-889, chars_format::scientific, 673,\r\n        \"4.\"\r\n        \"8457817545391086781545429236530649206753072358217818382306649182266847951438798519129106084619711339533489\"\r\n        \"4193486223341613277181495419128725949297662270734931473351934369874059042965170936652547354553133109215222\"\r\n        \"2607665282361429996608725569957961838133315850255441218672737109111895098704976131260526893388587271921671\"\r\n        \"1863091642482440689150306901812606680744239070565217054556631675280722800102114118714280265839201724131533\"\r\n        \"0759077406609909230601196783444460066921562309703968683880860976843525988453483543366768097594191843717004\"\r\n        \"7681698903909092426199244805901967278624429121115360021171167203684269323777649967183645588944761433813218\"\r\n        \"6428964587321388535201549530029296875e-268\"},\r\n    {0x1.fffffffffffffp-888, chars_format::scientific, 672,\r\n        \"9.\"\r\n        \"6915635090782173563090858473061298413506144716435636764613298364533695902877597038258212169239422679066978\"\r\n        \"8386972446683226554362990838257451898595324541469862946703868739748118085930341873305094709106266218430444\"\r\n        \"5215330564722859993217451139915923676266631700510882437345474218223790197409952262521053786777174543843342\"\r\n        \"3726183284964881378300613803625213361488478141130434109113263350561445600204228237428560531678403448263066\"\r\n        \"1518154813219818461202393566888920133843124619407937367761721953687051976906967086733536195188383687434009\"\r\n        \"5363397807818184852398489611803934557248858242230720042342334407368538647555299934367291177889522867626437\"\r\n        \"285792917464277707040309906005859375e-268\"},\r\n    {0x1.fffffffffffffp-887, chars_format::scientific, 672,\r\n        \"1.\"\r\n        \"9383127018156434712618171694612259682701228943287127352922659672906739180575519407651642433847884535813395\"\r\n        \"7677394489336645310872598167651490379719064908293972589340773747949623617186068374661018941821253243686088\"\r\n        \"9043066112944571998643490227983184735253326340102176487469094843644758039481990452504210757355434908768668\"\r\n        \"4745236656992976275660122760725042672297695628226086821822652670112289120040845647485712106335680689652613\"\r\n        \"2303630962643963692240478713377784026768624923881587473552344390737410395381393417346707239037676737486801\"\r\n        \"9072679561563636970479697922360786911449771648446144008468466881473707729511059986873458235577904573525287\"\r\n        \"457158583492855541408061981201171875e-267\"},\r\n    {0x1.fffffffffffffp-886, chars_format::scientific, 671,\r\n        \"3.\"\r\n        \"8766254036312869425236343389224519365402457886574254705845319345813478361151038815303284867695769071626791\"\r\n        \"5354788978673290621745196335302980759438129816587945178681547495899247234372136749322037883642506487372177\"\r\n        \"8086132225889143997286980455966369470506652680204352974938189687289516078963980905008421514710869817537336\"\r\n        \"9490473313985952551320245521450085344595391256452173643645305340224578240081691294971424212671361379305226\"\r\n        \"4607261925287927384480957426755568053537249847763174947104688781474820790762786834693414478075353474973603\"\r\n        \"8145359123127273940959395844721573822899543296892288016936933762947415459022119973746916471155809147050574\"\r\n        \"91431716698571108281612396240234375e-267\"},\r\n    {0x1.fffffffffffffp-885, chars_format::scientific, 670,\r\n        \"7.\"\r\n        \"7532508072625738850472686778449038730804915773148509411690638691626956722302077630606569735391538143253583\"\r\n        \"0709577957346581243490392670605961518876259633175890357363094991798494468744273498644075767285012974744355\"\r\n        \"6172264451778287994573960911932738941013305360408705949876379374579032157927961810016843029421739635074673\"\r\n        \"8980946627971905102640491042900170689190782512904347287290610680449156480163382589942848425342722758610452\"\r\n        \"9214523850575854768961914853511136107074499695526349894209377562949641581525573669386828956150706949947207\"\r\n        \"6290718246254547881918791689443147645799086593784576033873867525894830918044239947493832942311618294101149\"\r\n        \"8286343339714221656322479248046875e-267\"},\r\n    {0x1.fffffffffffffp-884, chars_format::scientific, 670,\r\n        \"1.\"\r\n        \"5506501614525147770094537355689807746160983154629701882338127738325391344460415526121313947078307628650716\"\r\n        \"6141915591469316248698078534121192303775251926635178071472618998359698893748854699728815153457002594948871\"\r\n        \"1234452890355657598914792182386547788202661072081741189975275874915806431585592362003368605884347927014934\"\r\n        \"7796189325594381020528098208580034137838156502580869457458122136089831296032676517988569685068544551722090\"\r\n        \"5842904770115170953792382970702227221414899939105269978841875512589928316305114733877365791230141389989441\"\r\n        \"5258143649250909576383758337888629529159817318756915206774773505178966183608847989498766588462323658820229\"\r\n        \"9657268667942844331264495849609375e-266\"},\r\n    {0x1.fffffffffffffp-883, chars_format::scientific, 669,\r\n        \"3.\"\r\n        \"1013003229050295540189074711379615492321966309259403764676255476650782688920831052242627894156615257301433\"\r\n        \"2283831182938632497396157068242384607550503853270356142945237996719397787497709399457630306914005189897742\"\r\n        \"2468905780711315197829584364773095576405322144163482379950551749831612863171184724006737211768695854029869\"\r\n        \"5592378651188762041056196417160068275676313005161738914916244272179662592065353035977139370137089103444181\"\r\n        \"1685809540230341907584765941404454442829799878210539957683751025179856632610229467754731582460282779978883\"\r\n        \"0516287298501819152767516675777259058319634637513830413549547010357932367217695978997533176924647317640459\"\r\n        \"931453733588568866252899169921875e-266\"},\r\n    {0x1.fffffffffffffp-882, chars_format::scientific, 668,\r\n        \"6.\"\r\n        \"2026006458100591080378149422759230984643932618518807529352510953301565377841662104485255788313230514602866\"\r\n        \"4567662365877264994792314136484769215101007706540712285890475993438795574995418798915260613828010379795484\"\r\n        \"4937811561422630395659168729546191152810644288326964759901103499663225726342369448013474423537391708059739\"\r\n        \"1184757302377524082112392834320136551352626010323477829832488544359325184130706071954278740274178206888362\"\r\n        \"3371619080460683815169531882808908885659599756421079915367502050359713265220458935509463164920565559957766\"\r\n        \"1032574597003638305535033351554518116639269275027660827099094020715864734435391957995066353849294635280919\"\r\n        \"86290746717713773250579833984375e-266\"},\r\n    {0x1.fffffffffffffp-881, chars_format::scientific, 668,\r\n        \"1.\"\r\n        \"2405201291620118216075629884551846196928786523703761505870502190660313075568332420897051157662646102920573\"\r\n        \"2913532473175452998958462827296953843020201541308142457178095198687759114999083759783052122765602075959096\"\r\n        \"8987562312284526079131833745909238230562128857665392951980220699932645145268473889602694884707478341611947\"\r\n        \"8236951460475504816422478566864027310270525202064695565966497708871865036826141214390855748054835641377672\"\r\n        \"4674323816092136763033906376561781777131919951284215983073500410071942653044091787101892632984113111991553\"\r\n        \"2206514919400727661107006670310903623327853855005532165419818804143172946887078391599013270769858927056183\"\r\n        \"97258149343542754650115966796875e-265\"},\r\n    {0x1.fffffffffffffp-880, chars_format::scientific, 667,\r\n        \"2.\"\r\n        \"4810402583240236432151259769103692393857573047407523011741004381320626151136664841794102315325292205841146\"\r\n        \"5827064946350905997916925654593907686040403082616284914356190397375518229998167519566104245531204151918193\"\r\n        \"7975124624569052158263667491818476461124257715330785903960441399865290290536947779205389769414956683223895\"\r\n        \"6473902920951009632844957133728054620541050404129391131932995417743730073652282428781711496109671282755344\"\r\n        \"9348647632184273526067812753123563554263839902568431966147000820143885306088183574203785265968226223983106\"\r\n        \"4413029838801455322214013340621807246655707710011064330839637608286345893774156783198026541539717854112367\"\r\n        \"9451629868708550930023193359375e-265\"},\r\n    {0x1.fffffffffffffp-879, chars_format::scientific, 666,\r\n        \"4.\"\r\n        \"9620805166480472864302519538207384787715146094815046023482008762641252302273329683588204630650584411682293\"\r\n        \"1654129892701811995833851309187815372080806165232569828712380794751036459996335039132208491062408303836387\"\r\n        \"5950249249138104316527334983636952922248515430661571807920882799730580581073895558410779538829913366447791\"\r\n        \"2947805841902019265689914267456109241082100808258782263865990835487460147304564857563422992219342565510689\"\r\n        \"8697295264368547052135625506247127108527679805136863932294001640287770612176367148407570531936452447966212\"\r\n        \"8826059677602910644428026681243614493311415420022128661679275216572691787548313566396053083079435708224735\"\r\n        \"890325973741710186004638671875e-265\"},\r\n    {0x1.fffffffffffffp-878, chars_format::scientific, 665,\r\n        \"9.\"\r\n        \"9241610332960945728605039076414769575430292189630092046964017525282504604546659367176409261301168823364586\"\r\n        \"3308259785403623991667702618375630744161612330465139657424761589502072919992670078264416982124816607672775\"\r\n        \"1900498498276208633054669967273905844497030861323143615841765599461161162147791116821559077659826732895582\"\r\n        \"5895611683804038531379828534912218482164201616517564527731981670974920294609129715126845984438685131021379\"\r\n        \"7394590528737094104271251012494254217055359610273727864588003280575541224352734296815141063872904895932425\"\r\n        \"7652119355205821288856053362487228986622830840044257323358550433145383575096627132792106166158871416449471\"\r\n        \"78065194748342037200927734375e-265\"},\r\n    {0x1.fffffffffffffp-877, chars_format::scientific, 665,\r\n        \"1.\"\r\n        \"9848322066592189145721007815282953915086058437926018409392803505056500920909331873435281852260233764672917\"\r\n        \"2661651957080724798333540523675126148832322466093027931484952317900414583998534015652883396424963321534555\"\r\n        \"0380099699655241726610933993454781168899406172264628723168353119892232232429558223364311815531965346579116\"\r\n        \"5179122336760807706275965706982443696432840323303512905546396334194984058921825943025369196887737026204275\"\r\n        \"9478918105747418820854250202498850843411071922054745572917600656115108244870546859363028212774580979186485\"\r\n        \"1530423871041164257771210672497445797324566168008851464671710086629076715019325426558421233231774283289894\"\r\n        \"35613038949668407440185546875e-264\"},\r\n    {0x1.fffffffffffffp-876, chars_format::scientific, 664,\r\n        \"3.\"\r\n        \"9696644133184378291442015630565907830172116875852036818785607010113001841818663746870563704520467529345834\"\r\n        \"5323303914161449596667081047350252297664644932186055862969904635800829167997068031305766792849926643069110\"\r\n        \"0760199399310483453221867986909562337798812344529257446336706239784464464859116446728623631063930693158233\"\r\n        \"0358244673521615412551931413964887392865680646607025811092792668389968117843651886050738393775474052408551\"\r\n        \"8957836211494837641708500404997701686822143844109491145835201312230216489741093718726056425549161958372970\"\r\n        \"3060847742082328515542421344994891594649132336017702929343420173258153430038650853116842466463548566579788\"\r\n        \"7122607789933681488037109375e-264\"},\r\n    {0x1.fffffffffffffp-875, chars_format::scientific, 663,\r\n        \"7.\"\r\n        \"9393288266368756582884031261131815660344233751704073637571214020226003683637327493741127409040935058691669\"\r\n        \"0646607828322899193334162094700504595329289864372111725939809271601658335994136062611533585699853286138220\"\r\n        \"1520398798620966906443735973819124675597624689058514892673412479568928929718232893457247262127861386316466\"\r\n        \"0716489347043230825103862827929774785731361293214051622185585336779936235687303772101476787550948104817103\"\r\n        \"7915672422989675283417000809995403373644287688218982291670402624460432979482187437452112851098323916745940\"\r\n        \"6121695484164657031084842689989783189298264672035405858686840346516306860077301706233684932927097133159577\"\r\n        \"424521557986736297607421875e-264\"},\r\n    {0x1.fffffffffffffp-874, chars_format::scientific, 663,\r\n        \"1.\"\r\n        \"5878657653273751316576806252226363132068846750340814727514242804045200736727465498748225481808187011738333\"\r\n        \"8129321565664579838666832418940100919065857972874422345187961854320331667198827212522306717139970657227644\"\r\n        \"0304079759724193381288747194763824935119524937811702978534682495913785785943646578691449452425572277263293\"\r\n        \"2143297869408646165020772565585954957146272258642810324437117067355987247137460754420295357510189620963420\"\r\n        \"7583134484597935056683400161999080674728857537643796458334080524892086595896437487490422570219664783349188\"\r\n        \"1224339096832931406216968537997956637859652934407081171737368069303261372015460341246736986585419426631915\"\r\n        \"484904311597347259521484375e-263\"},\r\n    {0x1.fffffffffffffp-873, chars_format::scientific, 662,\r\n        \"3.\"\r\n        \"1757315306547502633153612504452726264137693500681629455028485608090401473454930997496450963616374023476667\"\r\n        \"6258643131329159677333664837880201838131715945748844690375923708640663334397654425044613434279941314455288\"\r\n        \"0608159519448386762577494389527649870239049875623405957069364991827571571887293157382898904851144554526586\"\r\n        \"4286595738817292330041545131171909914292544517285620648874234134711974494274921508840590715020379241926841\"\r\n        \"5166268969195870113366800323998161349457715075287592916668161049784173191792874974980845140439329566698376\"\r\n        \"2448678193665862812433937075995913275719305868814162343474736138606522744030920682493473973170838853263830\"\r\n        \"96980862319469451904296875e-263\"},\r\n    {0x1.fffffffffffffp-872, chars_format::scientific, 661,\r\n        \"6.\"\r\n        \"3514630613095005266307225008905452528275387001363258910056971216180802946909861994992901927232748046953335\"\r\n        \"2517286262658319354667329675760403676263431891497689380751847417281326668795308850089226868559882628910576\"\r\n        \"1216319038896773525154988779055299740478099751246811914138729983655143143774586314765797809702289109053172\"\r\n        \"8573191477634584660083090262343819828585089034571241297748468269423948988549843017681181430040758483853683\"\r\n        \"0332537938391740226733600647996322698915430150575185833336322099568346383585749949961690280878659133396752\"\r\n        \"4897356387331725624867874151991826551438611737628324686949472277213045488061841364986947946341677706527661\"\r\n        \"9396172463893890380859375e-263\"},\r\n    {0x1.fffffffffffffp-871, chars_format::scientific, 661,\r\n        \"1.\"\r\n        \"2702926122619001053261445001781090505655077400272651782011394243236160589381972398998580385446549609390667\"\r\n        \"0503457252531663870933465935152080735252686378299537876150369483456265333759061770017845373711976525782115\"\r\n        \"2243263807779354705030997755811059948095619950249362382827745996731028628754917262953159561940457821810634\"\r\n        \"5714638295526916932016618052468763965717017806914248259549693653884789797709968603536236286008151696770736\"\r\n        \"6066507587678348045346720129599264539783086030115037166667264419913669276717149989992338056175731826679350\"\r\n        \"4979471277466345124973574830398365310287722347525664937389894455442609097612368272997389589268335541305532\"\r\n        \"3879234492778778076171875e-262\"},\r\n    {0x1.fffffffffffffp-870, chars_format::scientific, 660,\r\n        \"2.\"\r\n        \"5405852245238002106522890003562181011310154800545303564022788486472321178763944797997160770893099218781334\"\r\n        \"1006914505063327741866931870304161470505372756599075752300738966912530667518123540035690747423953051564230\"\r\n        \"4486527615558709410061995511622119896191239900498724765655491993462057257509834525906319123880915643621269\"\r\n        \"1429276591053833864033236104937527931434035613828496519099387307769579595419937207072472572016303393541473\"\r\n        \"2133015175356696090693440259198529079566172060230074333334528839827338553434299979984676112351463653358700\"\r\n        \"9958942554932690249947149660796730620575444695051329874779788910885218195224736545994779178536671082611064\"\r\n        \"775846898555755615234375e-262\"},\r\n    {0x1.fffffffffffffp-869, chars_format::scientific, 659,\r\n        \"5.\"\r\n        \"0811704490476004213045780007124362022620309601090607128045576972944642357527889595994321541786198437562668\"\r\n        \"2013829010126655483733863740608322941010745513198151504601477933825061335036247080071381494847906103128460\"\r\n        \"8973055231117418820123991023244239792382479800997449531310983986924114515019669051812638247761831287242538\"\r\n        \"2858553182107667728066472209875055862868071227656993038198774615539159190839874414144945144032606787082946\"\r\n        \"4266030350713392181386880518397058159132344120460148666669057679654677106868599959969352224702927306717401\"\r\n        \"9917885109865380499894299321593461241150889390102659749559577821770436390449473091989558357073342165222129\"\r\n        \"55169379711151123046875e-262\"},\r\n    {0x1.fffffffffffffp-868, chars_format::scientific, 659,\r\n        \"1.\"\r\n        \"0162340898095200842609156001424872404524061920218121425609115394588928471505577919198864308357239687512533\"\r\n        \"6402765802025331096746772748121664588202149102639630300920295586765012267007249416014276298969581220625692\"\r\n        \"1794611046223483764024798204648847958476495960199489906262196797384822903003933810362527649552366257448507\"\r\n        \"6571710636421533545613294441975011172573614245531398607639754923107831838167974882828989028806521357416589\"\r\n        \"2853206070142678436277376103679411631826468824092029733333811535930935421373719991993870444940585461343480\"\r\n        \"3983577021973076099978859864318692248230177878020531949911915564354087278089894618397911671414668433044425\"\r\n        \"91033875942230224609375e-261\"},\r\n    {0x1.fffffffffffffp-867, chars_format::scientific, 658,\r\n        \"2.\"\r\n        \"0324681796190401685218312002849744809048123840436242851218230789177856943011155838397728616714479375025067\"\r\n        \"2805531604050662193493545496243329176404298205279260601840591173530024534014498832028552597939162441251384\"\r\n        \"3589222092446967528049596409297695916952991920398979812524393594769645806007867620725055299104732514897015\"\r\n        \"3143421272843067091226588883950022345147228491062797215279509846215663676335949765657978057613042714833178\"\r\n        \"5706412140285356872554752207358823263652937648184059466667623071861870842747439983987740889881170922686960\"\r\n        \"7967154043946152199957719728637384496460355756041063899823831128708174556179789236795823342829336866088851\"\r\n        \"8206775188446044921875e-261\"},\r\n    {0x1.fffffffffffffp-866, chars_format::scientific, 657,\r\n        \"4.\"\r\n        \"0649363592380803370436624005699489618096247680872485702436461578355713886022311676795457233428958750050134\"\r\n        \"5611063208101324386987090992486658352808596410558521203681182347060049068028997664057105195878324882502768\"\r\n        \"7178444184893935056099192818595391833905983840797959625048787189539291612015735241450110598209465029794030\"\r\n        \"6286842545686134182453177767900044690294456982125594430559019692431327352671899531315956115226085429666357\"\r\n        \"1412824280570713745109504414717646527305875296368118933335246143723741685494879967975481779762341845373921\"\r\n        \"5934308087892304399915439457274768992920711512082127799647662257416349112359578473591646685658673732177703\"\r\n        \"641355037689208984375e-261\"},\r\n    {0x1.fffffffffffffp-865, chars_format::scientific, 656,\r\n        \"8.\"\r\n        \"1298727184761606740873248011398979236192495361744971404872923156711427772044623353590914466857917500100269\"\r\n        \"1222126416202648773974181984973316705617192821117042407362364694120098136057995328114210391756649765005537\"\r\n        \"4356888369787870112198385637190783667811967681595919250097574379078583224031470482900221196418930059588061\"\r\n        \"2573685091372268364906355535800089380588913964251188861118039384862654705343799062631912230452170859332714\"\r\n        \"2825648561141427490219008829435293054611750592736237866670492287447483370989759935950963559524683690747843\"\r\n        \"1868616175784608799830878914549537985841423024164255599295324514832698224719156947183293371317347464355407\"\r\n        \"28271007537841796875e-261\"},\r\n    {0x1.fffffffffffffp-864, chars_format::scientific, 656,\r\n        \"1.\"\r\n        \"6259745436952321348174649602279795847238499072348994280974584631342285554408924670718182893371583500020053\"\r\n        \"8244425283240529754794836396994663341123438564223408481472472938824019627211599065622842078351329953001107\"\r\n        \"4871377673957574022439677127438156733562393536319183850019514875815716644806294096580044239283786011917612\"\r\n        \"2514737018274453672981271107160017876117782792850237772223607876972530941068759812526382446090434171866542\"\r\n        \"8565129712228285498043801765887058610922350118547247573334098457489496674197951987190192711904936738149568\"\r\n        \"6373723235156921759966175782909907597168284604832851119859064902966539644943831389436658674263469492871081\"\r\n        \"45654201507568359375e-260\"},\r\n    {0x1.fffffffffffffp-863, chars_format::scientific, 655,\r\n        \"3.\"\r\n        \"2519490873904642696349299204559591694476998144697988561949169262684571108817849341436365786743167000040107\"\r\n        \"6488850566481059509589672793989326682246877128446816962944945877648039254423198131245684156702659906002214\"\r\n        \"9742755347915148044879354254876313467124787072638367700039029751631433289612588193160088478567572023835224\"\r\n        \"5029474036548907345962542214320035752235565585700475544447215753945061882137519625052764892180868343733085\"\r\n        \"7130259424456570996087603531774117221844700237094495146668196914978993348395903974380385423809873476299137\"\r\n        \"2747446470313843519932351565819815194336569209665702239718129805933079289887662778873317348526938985742162\"\r\n        \"9130840301513671875e-260\"},\r\n    {0x1.fffffffffffffp-862, chars_format::scientific, 654,\r\n        \"6.\"\r\n        \"5038981747809285392698598409119183388953996289395977123898338525369142217635698682872731573486334000080215\"\r\n        \"2977701132962119019179345587978653364493754256893633925889891755296078508846396262491368313405319812004429\"\r\n        \"9485510695830296089758708509752626934249574145276735400078059503262866579225176386320176957135144047670449\"\r\n        \"0058948073097814691925084428640071504471131171400951088894431507890123764275039250105529784361736687466171\"\r\n        \"4260518848913141992175207063548234443689400474188990293336393829957986696791807948760770847619746952598274\"\r\n        \"5494892940627687039864703131639630388673138419331404479436259611866158579775325557746634697053877971484325\"\r\n        \"826168060302734375e-260\"},\r\n    {0x1.fffffffffffffp-861, chars_format::scientific, 654,\r\n        \"1.\"\r\n        \"3007796349561857078539719681823836677790799257879195424779667705073828443527139736574546314697266800016043\"\r\n        \"0595540226592423803835869117595730672898750851378726785177978351059215701769279252498273662681063962400885\"\r\n        \"9897102139166059217951741701950525386849914829055347080015611900652573315845035277264035391427028809534089\"\r\n        \"8011789614619562938385016885728014300894226234280190217778886301578024752855007850021105956872347337493234\"\r\n        \"2852103769782628398435041412709646888737880094837798058667278765991597339358361589752154169523949390519654\"\r\n        \"9098978588125537407972940626327926077734627683866280895887251922373231715955065111549326939410775594296865\"\r\n        \"165233612060546875e-259\"},\r\n    {0x1.fffffffffffffp-860, chars_format::scientific, 653,\r\n        \"2.\"\r\n        \"6015592699123714157079439363647673355581598515758390849559335410147656887054279473149092629394533600032086\"\r\n        \"1191080453184847607671738235191461345797501702757453570355956702118431403538558504996547325362127924801771\"\r\n        \"9794204278332118435903483403901050773699829658110694160031223801305146631690070554528070782854057619068179\"\r\n        \"6023579229239125876770033771456028601788452468560380435557772603156049505710015700042211913744694674986468\"\r\n        \"5704207539565256796870082825419293777475760189675596117334557531983194678716723179504308339047898781039309\"\r\n        \"8197957176251074815945881252655852155469255367732561791774503844746463431910130223098653878821551188593730\"\r\n        \"33046722412109375e-259\"},\r\n    {0x1.fffffffffffffp-859, chars_format::scientific, 652,\r\n        \"5.\"\r\n        \"2031185398247428314158878727295346711163197031516781699118670820295313774108558946298185258789067200064172\"\r\n        \"2382160906369695215343476470382922691595003405514907140711913404236862807077117009993094650724255849603543\"\r\n        \"9588408556664236871806966807802101547399659316221388320062447602610293263380141109056141565708115238136359\"\r\n        \"2047158458478251753540067542912057203576904937120760871115545206312099011420031400084423827489389349972937\"\r\n        \"1408415079130513593740165650838587554951520379351192234669115063966389357433446359008616678095797562078619\"\r\n        \"6395914352502149631891762505311704310938510735465123583549007689492926863820260446197307757643102377187460\"\r\n        \"6609344482421875e-259\"},\r\n    {0x1.fffffffffffffp-858, chars_format::scientific, 652,\r\n        \"1.\"\r\n        \"0406237079649485662831775745459069342232639406303356339823734164059062754821711789259637051757813440012834\"\r\n        \"4476432181273939043068695294076584538319000681102981428142382680847372561415423401998618930144851169920708\"\r\n        \"7917681711332847374361393361560420309479931863244277664012489520522058652676028221811228313141623047627271\"\r\n        \"8409431691695650350708013508582411440715380987424152174223109041262419802284006280016884765497877869994587\"\r\n        \"4281683015826102718748033130167717510990304075870238446933823012793277871486689271801723335619159512415723\"\r\n        \"9279182870500429926378352501062340862187702147093024716709801537898585372764052089239461551528620475437492\"\r\n        \"1321868896484375e-258\"},\r\n    {0x1.fffffffffffffp-857, chars_format::scientific, 651,\r\n        \"2.\"\r\n        \"0812474159298971325663551490918138684465278812606712679647468328118125509643423578519274103515626880025668\"\r\n        \"8952864362547878086137390588153169076638001362205962856284765361694745122830846803997237860289702339841417\"\r\n        \"5835363422665694748722786723120840618959863726488555328024979041044117305352056443622456626283246095254543\"\r\n        \"6818863383391300701416027017164822881430761974848304348446218082524839604568012560033769530995755739989174\"\r\n        \"8563366031652205437496066260335435021980608151740476893867646025586555742973378543603446671238319024831447\"\r\n        \"8558365741000859852756705002124681724375404294186049433419603075797170745528104178478923103057240950874984\"\r\n        \"264373779296875e-258\"},\r\n    {0x1.fffffffffffffp-856, chars_format::scientific, 650,\r\n        \"4.\"\r\n        \"1624948318597942651327102981836277368930557625213425359294936656236251019286847157038548207031253760051337\"\r\n        \"7905728725095756172274781176306338153276002724411925712569530723389490245661693607994475720579404679682835\"\r\n        \"1670726845331389497445573446241681237919727452977110656049958082088234610704112887244913252566492190509087\"\r\n        \"3637726766782601402832054034329645762861523949696608696892436165049679209136025120067539061991511479978349\"\r\n        \"7126732063304410874992132520670870043961216303480953787735292051173111485946757087206893342476638049662895\"\r\n        \"7116731482001719705513410004249363448750808588372098866839206151594341491056208356957846206114481901749968\"\r\n        \"52874755859375e-258\"},\r\n    {0x1.fffffffffffffp-855, chars_format::scientific, 649,\r\n        \"8.\"\r\n        \"3249896637195885302654205963672554737861115250426850718589873312472502038573694314077096414062507520102675\"\r\n        \"5811457450191512344549562352612676306552005448823851425139061446778980491323387215988951441158809359365670\"\r\n        \"3341453690662778994891146892483362475839454905954221312099916164176469221408225774489826505132984381018174\"\r\n        \"7275453533565202805664108068659291525723047899393217393784872330099358418272050240135078123983022959956699\"\r\n        \"4253464126608821749984265041341740087922432606961907575470584102346222971893514174413786684953276099325791\"\r\n        \"4233462964003439411026820008498726897501617176744197733678412303188682982112416713915692412228963803499937\"\r\n        \"0574951171875e-258\"},\r\n    {0x1.fffffffffffffp-854, chars_format::scientific, 649,\r\n        \"1.\"\r\n        \"6649979327439177060530841192734510947572223050085370143717974662494500407714738862815419282812501504020535\"\r\n        \"1162291490038302468909912470522535261310401089764770285027812289355796098264677443197790288231761871873134\"\r\n        \"0668290738132555798978229378496672495167890981190844262419983232835293844281645154897965301026596876203634\"\r\n        \"9455090706713040561132821613731858305144609579878643478756974466019871683654410048027015624796604591991339\"\r\n        \"8850692825321764349996853008268348017584486521392381515094116820469244594378702834882757336990655219865158\"\r\n        \"2846692592800687882205364001699745379500323435348839546735682460637736596422483342783138482445792760699987\"\r\n        \"4114990234375e-257\"},\r\n    {0x1.fffffffffffffp-853, chars_format::scientific, 648,\r\n        \"3.\"\r\n        \"3299958654878354121061682385469021895144446100170740287435949324989000815429477725630838565625003008041070\"\r\n        \"2324582980076604937819824941045070522620802179529540570055624578711592196529354886395580576463523743746268\"\r\n        \"1336581476265111597956458756993344990335781962381688524839966465670587688563290309795930602053193752407269\"\r\n        \"8910181413426081122265643227463716610289219159757286957513948932039743367308820096054031249593209183982679\"\r\n        \"7701385650643528699993706016536696035168973042784763030188233640938489188757405669765514673981310439730316\"\r\n        \"5693385185601375764410728003399490759000646870697679093471364921275473192844966685566276964891585521399974\"\r\n        \"822998046875e-257\"},\r\n    {0x1.fffffffffffffp-852, chars_format::scientific, 647,\r\n        \"6.\"\r\n        \"6599917309756708242123364770938043790288892200341480574871898649978001630858955451261677131250006016082140\"\r\n        \"4649165960153209875639649882090141045241604359059081140111249157423184393058709772791161152927047487492536\"\r\n        \"2673162952530223195912917513986689980671563924763377049679932931341175377126580619591861204106387504814539\"\r\n        \"7820362826852162244531286454927433220578438319514573915027897864079486734617640192108062499186418367965359\"\r\n        \"5402771301287057399987412033073392070337946085569526060376467281876978377514811339531029347962620879460633\"\r\n        \"1386770371202751528821456006798981518001293741395358186942729842550946385689933371132553929783171042799949\"\r\n        \"64599609375e-257\"},\r\n    {0x1.fffffffffffffp-851, chars_format::scientific, 647,\r\n        \"1.\"\r\n        \"3319983461951341648424672954187608758057778440068296114974379729995600326171791090252335426250001203216428\"\r\n        \"0929833192030641975127929976418028209048320871811816228022249831484636878611741954558232230585409497498507\"\r\n        \"2534632590506044639182583502797337996134312784952675409935986586268235075425316123918372240821277500962907\"\r\n        \"9564072565370432448906257290985486644115687663902914783005579572815897346923528038421612499837283673593071\"\r\n        \"9080554260257411479997482406614678414067589217113905212075293456375395675502962267906205869592524175892126\"\r\n        \"6277354074240550305764291201359796303600258748279071637388545968510189277137986674226510785956634208559989\"\r\n        \"92919921875e-256\"},\r\n    {0x1.fffffffffffffp-850, chars_format::scientific, 646,\r\n        \"2.\"\r\n        \"6639966923902683296849345908375217516115556880136592229948759459991200652343582180504670852500002406432856\"\r\n        \"1859666384061283950255859952836056418096641743623632456044499662969273757223483909116464461170818994997014\"\r\n        \"5069265181012089278365167005594675992268625569905350819871973172536470150850632247836744481642555001925815\"\r\n        \"9128145130740864897812514581970973288231375327805829566011159145631794693847056076843224999674567347186143\"\r\n        \"8161108520514822959994964813229356828135178434227810424150586912750791351005924535812411739185048351784253\"\r\n        \"2554708148481100611528582402719592607200517496558143274777091937020378554275973348453021571913268417119979\"\r\n        \"8583984375e-256\"},\r\n    {0x1.fffffffffffffp-849, chars_format::scientific, 645,\r\n        \"5.\"\r\n        \"3279933847805366593698691816750435032231113760273184459897518919982401304687164361009341705000004812865712\"\r\n        \"3719332768122567900511719905672112836193283487247264912088999325938547514446967818232928922341637989994029\"\r\n        \"0138530362024178556730334011189351984537251139810701639743946345072940301701264495673488963285110003851631\"\r\n        \"8256290261481729795625029163941946576462750655611659132022318291263589387694112153686449999349134694372287\"\r\n        \"6322217041029645919989929626458713656270356868455620848301173825501582702011849071624823478370096703568506\"\r\n        \"5109416296962201223057164805439185214401034993116286549554183874040757108551946696906043143826536834239959\"\r\n        \"716796875e-256\"},\r\n    {0x1.fffffffffffffp-848, chars_format::scientific, 645,\r\n        \"1.\"\r\n        \"0655986769561073318739738363350087006446222752054636891979503783996480260937432872201868341000000962573142\"\r\n        \"4743866553624513580102343981134422567238656697449452982417799865187709502889393563646585784468327597998805\"\r\n        \"8027706072404835711346066802237870396907450227962140327948789269014588060340252899134697792657022000770326\"\r\n        \"3651258052296345959125005832788389315292550131122331826404463658252717877538822430737289999869826938874457\"\r\n        \"5264443408205929183997985925291742731254071373691124169660234765100316540402369814324964695674019340713701\"\r\n        \"3021883259392440244611432961087837042880206998623257309910836774808151421710389339381208628765307366847991\"\r\n        \"943359375e-255\"},\r\n    {0x1.fffffffffffffp-847, chars_format::scientific, 644,\r\n        \"2.\"\r\n        \"1311973539122146637479476726700174012892445504109273783959007567992960521874865744403736682000001925146284\"\r\n        \"9487733107249027160204687962268845134477313394898905964835599730375419005778787127293171568936655195997611\"\r\n        \"6055412144809671422692133604475740793814900455924280655897578538029176120680505798269395585314044001540652\"\r\n        \"7302516104592691918250011665576778630585100262244663652808927316505435755077644861474579999739653877748915\"\r\n        \"0528886816411858367995971850583485462508142747382248339320469530200633080804739628649929391348038681427402\"\r\n        \"6043766518784880489222865922175674085760413997246514619821673549616302843420778678762417257530614733695983\"\r\n        \"88671875e-255\"},\r\n    {0x1.fffffffffffffp-846, chars_format::scientific, 643,\r\n        \"4.\"\r\n        \"2623947078244293274958953453400348025784891008218547567918015135985921043749731488807473364000003850292569\"\r\n        \"8975466214498054320409375924537690268954626789797811929671199460750838011557574254586343137873310391995223\"\r\n        \"2110824289619342845384267208951481587629800911848561311795157076058352241361011596538791170628088003081305\"\r\n        \"4605032209185383836500023331153557261170200524489327305617854633010871510155289722949159999479307755497830\"\r\n        \"1057773632823716735991943701166970925016285494764496678640939060401266161609479257299858782696077362854805\"\r\n        \"2087533037569760978445731844351348171520827994493029239643347099232605686841557357524834515061229467391967\"\r\n        \"7734375e-255\"},\r\n    {0x1.fffffffffffffp-845, chars_format::scientific, 642,\r\n        \"8.\"\r\n        \"5247894156488586549917906906800696051569782016437095135836030271971842087499462977614946728000007700585139\"\r\n        \"7950932428996108640818751849075380537909253579595623859342398921501676023115148509172686275746620783990446\"\r\n        \"4221648579238685690768534417902963175259601823697122623590314152116704482722023193077582341256176006162610\"\r\n        \"9210064418370767673000046662307114522340401048978654611235709266021743020310579445898319998958615510995660\"\r\n        \"2115547265647433471983887402333941850032570989528993357281878120802532323218958514599717565392154725709610\"\r\n        \"4175066075139521956891463688702696343041655988986058479286694198465211373683114715049669030122458934783935\"\r\n        \"546875e-255\"},\r\n    {0x1.fffffffffffffp-844, chars_format::scientific, 642,\r\n        \"1.\"\r\n        \"7049578831297717309983581381360139210313956403287419027167206054394368417499892595522989345600001540117027\"\r\n        \"9590186485799221728163750369815076107581850715919124771868479784300335204623029701834537255149324156798089\"\r\n        \"2844329715847737138153706883580592635051920364739424524718062830423340896544404638615516468251235201232522\"\r\n        \"1842012883674153534600009332461422904468080209795730922247141853204348604062115889179663999791723102199132\"\r\n        \"0423109453129486694396777480466788370006514197905798671456375624160506464643791702919943513078430945141922\"\r\n        \"0835013215027904391378292737740539268608331197797211695857338839693042274736622943009933806024491786956787\"\r\n        \"109375e-254\"},\r\n    {0x1.fffffffffffffp-843, chars_format::scientific, 641,\r\n        \"3.\"\r\n        \"4099157662595434619967162762720278420627912806574838054334412108788736834999785191045978691200003080234055\"\r\n        \"9180372971598443456327500739630152215163701431838249543736959568600670409246059403669074510298648313596178\"\r\n        \"5688659431695474276307413767161185270103840729478849049436125660846681793088809277231032936502470402465044\"\r\n        \"3684025767348307069200018664922845808936160419591461844494283706408697208124231778359327999583446204398264\"\r\n        \"0846218906258973388793554960933576740013028395811597342912751248321012929287583405839887026156861890283844\"\r\n        \"1670026430055808782756585475481078537216662395594423391714677679386084549473245886019867612048983573913574\"\r\n        \"21875e-254\"},\r\n    {0x1.fffffffffffffp-842, chars_format::scientific, 640,\r\n        \"6.\"\r\n        \"8198315325190869239934325525440556841255825613149676108668824217577473669999570382091957382400006160468111\"\r\n        \"8360745943196886912655001479260304430327402863676499087473919137201340818492118807338149020597296627192357\"\r\n        \"1377318863390948552614827534322370540207681458957698098872251321693363586177618554462065873004940804930088\"\r\n        \"7368051534696614138400037329845691617872320839182923688988567412817394416248463556718655999166892408796528\"\r\n        \"1692437812517946777587109921867153480026056791623194685825502496642025858575166811679774052313723780567688\"\r\n        \"3340052860111617565513170950962157074433324791188846783429355358772169098946491772039735224097967147827148\"\r\n        \"4375e-254\"},\r\n    {0x1.fffffffffffffp-841, chars_format::scientific, 640,\r\n        \"1.\"\r\n        \"3639663065038173847986865105088111368251165122629935221733764843515494733999914076418391476480001232093622\"\r\n        \"3672149188639377382531000295852060886065480572735299817494783827440268163698423761467629804119459325438471\"\r\n        \"4275463772678189710522965506864474108041536291791539619774450264338672717235523710892413174600988160986017\"\r\n        \"7473610306939322827680007465969138323574464167836584737797713482563478883249692711343731199833378481759305\"\r\n        \"6338487562503589355517421984373430696005211358324638937165100499328405171715033362335954810462744756113537\"\r\n        \"6668010572022323513102634190192431414886664958237769356685871071754433819789298354407947044819593429565429\"\r\n        \"6875e-253\"},\r\n    {0x1.fffffffffffffp-840, chars_format::scientific, 639,\r\n        \"2.\"\r\n        \"7279326130076347695973730210176222736502330245259870443467529687030989467999828152836782952960002464187244\"\r\n        \"7344298377278754765062000591704121772130961145470599634989567654880536327396847522935259608238918650876942\"\r\n        \"8550927545356379421045931013728948216083072583583079239548900528677345434471047421784826349201976321972035\"\r\n        \"4947220613878645655360014931938276647148928335673169475595426965126957766499385422687462399666756963518611\"\r\n        \"2676975125007178711034843968746861392010422716649277874330200998656810343430066724671909620925489512227075\"\r\n        \"3336021144044647026205268380384862829773329916475538713371742143508867639578596708815894089639186859130859\"\r\n        \"375e-253\"},\r\n    {0x1.fffffffffffffp-839, chars_format::scientific, 638,\r\n        \"5.\"\r\n        \"4558652260152695391947460420352445473004660490519740886935059374061978935999656305673565905920004928374489\"\r\n        \"4688596754557509530124001183408243544261922290941199269979135309761072654793695045870519216477837301753885\"\r\n        \"7101855090712758842091862027457896432166145167166158479097801057354690868942094843569652698403952643944070\"\r\n        \"9894441227757291310720029863876553294297856671346338951190853930253915532998770845374924799333513927037222\"\r\n        \"5353950250014357422069687937493722784020845433298555748660401997313620686860133449343819241850979024454150\"\r\n        \"6672042288089294052410536760769725659546659832951077426743484287017735279157193417631788179278373718261718\"\r\n        \"75e-253\"},\r\n    {0x1.fffffffffffffp-838, chars_format::scientific, 638,\r\n        \"1.\"\r\n        \"0911730452030539078389492084070489094600932098103948177387011874812395787199931261134713181184000985674897\"\r\n        \"8937719350911501906024800236681648708852384458188239853995827061952214530958739009174103843295567460350777\"\r\n        \"1420371018142551768418372405491579286433229033433231695819560211470938173788418968713930539680790528788814\"\r\n        \"1978888245551458262144005972775310658859571334269267790238170786050783106599754169074984959866702785407444\"\r\n        \"5070790050002871484413937587498744556804169086659711149732080399462724137372026689868763848370195804890830\"\r\n        \"1334408457617858810482107352153945131909331966590215485348696857403547055831438683526357635855674743652343\"\r\n        \"75e-252\"},\r\n    {0x1.fffffffffffffp-837, chars_format::scientific, 637,\r\n        \"2.\"\r\n        \"1823460904061078156778984168140978189201864196207896354774023749624791574399862522269426362368001971349795\"\r\n        \"7875438701823003812049600473363297417704768916376479707991654123904429061917478018348207686591134920701554\"\r\n        \"2840742036285103536836744810983158572866458066866463391639120422941876347576837937427861079361581057577628\"\r\n        \"3957776491102916524288011945550621317719142668538535580476341572101566213199508338149969919733405570814889\"\r\n        \"0141580100005742968827875174997489113608338173319422299464160798925448274744053379737527696740391609781660\"\r\n        \"2668816915235717620964214704307890263818663933180430970697393714807094111662877367052715271711349487304687\"\r\n        \"5e-252\"},\r\n    {0x1.fffffffffffffp-836, chars_format::scientific, 636,\r\n        \"4.\"\r\n        \"3646921808122156313557968336281956378403728392415792709548047499249583148799725044538852724736003942699591\"\r\n        \"5750877403646007624099200946726594835409537832752959415983308247808858123834956036696415373182269841403108\"\r\n        \"5681484072570207073673489621966317145732916133732926783278240845883752695153675874855722158723162115155256\"\r\n        \"7915552982205833048576023891101242635438285337077071160952683144203132426399016676299939839466811141629778\"\r\n        \"0283160200011485937655750349994978227216676346638844598928321597850896549488106759475055393480783219563320\"\r\n        \"5337633830471435241928429408615780527637327866360861941394787429614188223325754734105430543422698974609375\"\r\n        \"e-252\"},\r\n    {0x1.fffffffffffffp-835, chars_format::scientific, 635,\r\n        \"8.\"\r\n        \"7293843616244312627115936672563912756807456784831585419096094998499166297599450089077705449472007885399183\"\r\n        \"1501754807292015248198401893453189670819075665505918831966616495617716247669912073392830746364539682806217\"\r\n        \"1362968145140414147346979243932634291465832267465853566556481691767505390307351749711444317446324230310513\"\r\n        \"5831105964411666097152047782202485270876570674154142321905366288406264852798033352599879678933622283259556\"\r\n        \"0566320400022971875311500699989956454433352693277689197856643195701793098976213518950110786961566439126641\"\r\n        \"067526766094287048385685881723156105527465573272172388278957485922837644665150946821086108684539794921875e\"\r\n        \"-252\"},\r\n    {0x1.fffffffffffffp-834, chars_format::scientific, 635,\r\n        \"1.\"\r\n        \"7458768723248862525423187334512782551361491356966317083819218999699833259519890017815541089894401577079836\"\r\n        \"6300350961458403049639680378690637934163815133101183766393323299123543249533982414678566149272907936561243\"\r\n        \"4272593629028082829469395848786526858293166453493170713311296338353501078061470349942288863489264846062102\"\r\n        \"7166221192882333219430409556440497054175314134830828464381073257681252970559606670519975935786724456651911\"\r\n        \"2113264080004594375062300139997991290886670538655537839571328639140358619795242703790022157392313287825328\"\r\n        \"213505353218857409677137176344631221105493114654434477655791497184567528933030189364217221736907958984375e\"\r\n        \"-251\"},\r\n    {0x1.fffffffffffffp-833, chars_format::scientific, 634,\r\n        \"3.\"\r\n        \"4917537446497725050846374669025565102722982713932634167638437999399666519039780035631082179788803154159673\"\r\n        \"2600701922916806099279360757381275868327630266202367532786646598247086499067964829357132298545815873122486\"\r\n        \"8545187258056165658938791697573053716586332906986341426622592676707002156122940699884577726978529692124205\"\r\n        \"4332442385764666438860819112880994108350628269661656928762146515362505941119213341039951871573448913303822\"\r\n        \"4226528160009188750124600279995982581773341077311075679142657278280717239590485407580044314784626575650656\"\r\n        \"42701070643771481935427435268926244221098622930886895531158299436913505786606037872843444347381591796875e-\"\r\n        \"251\"},\r\n    {0x1.fffffffffffffp-832, chars_format::scientific, 633,\r\n        \"6.\"\r\n        \"9835074892995450101692749338051130205445965427865268335276875998799333038079560071262164359577606308319346\"\r\n        \"5201403845833612198558721514762551736655260532404735065573293196494172998135929658714264597091631746244973\"\r\n        \"7090374516112331317877583395146107433172665813972682853245185353414004312245881399769155453957059384248410\"\r\n        \"8664884771529332877721638225761988216701256539323313857524293030725011882238426682079903743146897826607644\"\r\n        \"8453056320018377500249200559991965163546682154622151358285314556561434479180970815160088629569253151301312\"\r\n        \"8540214128754296387085487053785248844219724586177379106231659887382701157321207574568688869476318359375e-\"\r\n        \"251\"},\r\n    {0x1.fffffffffffffp-831, chars_format::scientific, 633,\r\n        \"1.\"\r\n        \"3967014978599090020338549867610226041089193085573053667055375199759866607615912014252432871915521261663869\"\r\n        \"3040280769166722439711744302952510347331052106480947013114658639298834599627185931742852919418326349248994\"\r\n        \"7418074903222466263575516679029221486634533162794536570649037070682800862449176279953831090791411876849682\"\r\n        \"1732976954305866575544327645152397643340251307864662771504858606145002376447685336415980748629379565321528\"\r\n        \"9690611264003675500049840111998393032709336430924430271657062911312286895836194163032017725913850630260262\"\r\n        \"5708042825750859277417097410757049768843944917235475821246331977476540231464241514913737773895263671875e-\"\r\n        \"250\"},\r\n    {0x1.fffffffffffffp-830, chars_format::scientific, 632,\r\n        \"2.\"\r\n        \"7934029957198180040677099735220452082178386171146107334110750399519733215231824028504865743831042523327738\"\r\n        \"6080561538333444879423488605905020694662104212961894026229317278597669199254371863485705838836652698497989\"\r\n        \"4836149806444932527151033358058442973269066325589073141298074141365601724898352559907662181582823753699364\"\r\n        \"3465953908611733151088655290304795286680502615729325543009717212290004752895370672831961497258759130643057\"\r\n        \"9381222528007351000099680223996786065418672861848860543314125822624573791672388326064035451827701260520525\"\r\n        \"141608565150171855483419482151409953768788983447095164249266395495308046292848302982747554779052734375e-\"\r\n        \"250\"},\r\n    {0x1.fffffffffffffp-829, chars_format::scientific, 631,\r\n        \"5.\"\r\n        \"5868059914396360081354199470440904164356772342292214668221500799039466430463648057009731487662085046655477\"\r\n        \"2161123076666889758846977211810041389324208425923788052458634557195338398508743726971411677673305396995978\"\r\n        \"9672299612889865054302066716116885946538132651178146282596148282731203449796705119815324363165647507398728\"\r\n        \"6931907817223466302177310580609590573361005231458651086019434424580009505790741345663922994517518261286115\"\r\n        \"8762445056014702000199360447993572130837345723697721086628251645249147583344776652128070903655402521041050\"\r\n        \"28321713030034371096683896430281990753757796689419032849853279099061609258569660596549510955810546875e-\"\r\n        \"250\"},\r\n    {0x1.fffffffffffffp-828, chars_format::scientific, 631,\r\n        \"1.\"\r\n        \"1173611982879272016270839894088180832871354468458442933644300159807893286092729611401946297532417009331095\"\r\n        \"4432224615333377951769395442362008277864841685184757610491726911439067679701748745394282335534661079399195\"\r\n        \"7934459922577973010860413343223377189307626530235629256519229656546240689959341023963064872633129501479745\"\r\n        \"7386381563444693260435462116121918114672201046291730217203886884916001901158148269132784598903503652257223\"\r\n        \"1752489011202940400039872089598714426167469144739544217325650329049829516668955330425614180731080504208210\"\r\n        \"05664342606006874219336779286056398150751559337883806569970655819812321851713932119309902191162109375e-\"\r\n        \"249\"},\r\n    {0x1.fffffffffffffp-827, chars_format::scientific, 630,\r\n        \"2.\"\r\n        \"2347223965758544032541679788176361665742708936916885867288600319615786572185459222803892595064834018662190\"\r\n        \"8864449230666755903538790884724016555729683370369515220983453822878135359403497490788564671069322158798391\"\r\n        \"5868919845155946021720826686446754378615253060471258513038459313092481379918682047926129745266259002959491\"\r\n        \"4772763126889386520870924232243836229344402092583460434407773769832003802316296538265569197807007304514446\"\r\n        \"3504978022405880800079744179197428852334938289479088434651300658099659033337910660851228361462161008416420\"\r\n        \"1132868521201374843867355857211279630150311867576761313994131163962464370342786423861980438232421875e-\"\r\n        \"249\"},\r\n    {0x1.fffffffffffffp-826, chars_format::scientific, 629,\r\n        \"4.\"\r\n        \"4694447931517088065083359576352723331485417873833771734577200639231573144370918445607785190129668037324381\"\r\n        \"7728898461333511807077581769448033111459366740739030441966907645756270718806994981577129342138644317596783\"\r\n        \"1737839690311892043441653372893508757230506120942517026076918626184962759837364095852259490532518005918982\"\r\n        \"9545526253778773041741848464487672458688804185166920868815547539664007604632593076531138395614014609028892\"\r\n        \"7009956044811761600159488358394857704669876578958176869302601316199318066675821321702456722924322016832840\"\r\n        \"226573704240274968773471171442255926030062373515352262798826232792492874068557284772396087646484375e-249\"},\r\n    {0x1.fffffffffffffp-825, chars_format::scientific, 628,\r\n        \"8.\"\r\n        \"9388895863034176130166719152705446662970835747667543469154401278463146288741836891215570380259336074648763\"\r\n        \"5457796922667023614155163538896066222918733481478060883933815291512541437613989963154258684277288635193566\"\r\n        \"3475679380623784086883306745787017514461012241885034052153837252369925519674728191704518981065036011837965\"\r\n        \"9091052507557546083483696928975344917377608370333841737631095079328015209265186153062276791228029218057785\"\r\n        \"4019912089623523200318976716789715409339753157916353738605202632398636133351642643404913445848644033665680\"\r\n        \"45314740848054993754694234288451185206012474703070452559765246558498574813711456954479217529296875e-249\"},\r\n    {0x1.fffffffffffffp-824, chars_format::scientific, 628,\r\n        \"1.\"\r\n        \"7877779172606835226033343830541089332594167149533508693830880255692629257748367378243114076051867214929752\"\r\n        \"7091559384533404722831032707779213244583746696295612176786763058302508287522797992630851736855457727038713\"\r\n        \"2695135876124756817376661349157403502892202448377006810430767450473985103934945638340903796213007202367593\"\r\n        \"1818210501511509216696739385795068983475521674066768347526219015865603041853037230612455358245605843611557\"\r\n        \"0803982417924704640063795343357943081867950631583270747721040526479727226670328528680982689169728806733136\"\r\n        \"09062948169610998750938846857690237041202494940614090511953049311699714962742291390895843505859375e-248\"},\r\n    {0x1.fffffffffffffp-823, chars_format::scientific, 627,\r\n        \"3.\"\r\n        \"5755558345213670452066687661082178665188334299067017387661760511385258515496734756486228152103734429859505\"\r\n        \"4183118769066809445662065415558426489167493392591224353573526116605016575045595985261703473710915454077426\"\r\n        \"5390271752249513634753322698314807005784404896754013620861534900947970207869891276681807592426014404735186\"\r\n        \"3636421003023018433393478771590137966951043348133536695052438031731206083706074461224910716491211687223114\"\r\n        \"1607964835849409280127590686715886163735901263166541495442081052959454453340657057361965378339457613466272\"\r\n        \"1812589633922199750187769371538047408240498988122818102390609862339942992548458278179168701171875e-248\"},\r\n    {0x1.fffffffffffffp-822, chars_format::scientific, 626,\r\n        \"7.\"\r\n        \"1511116690427340904133375322164357330376668598134034775323521022770517030993469512972456304207468859719010\"\r\n        \"8366237538133618891324130831116852978334986785182448707147052233210033150091191970523406947421830908154853\"\r\n        \"0780543504499027269506645396629614011568809793508027241723069801895940415739782553363615184852028809470372\"\r\n        \"7272842006046036866786957543180275933902086696267073390104876063462412167412148922449821432982423374446228\"\r\n        \"3215929671698818560255181373431772327471802526333082990884162105918908906681314114723930756678915226932544\"\r\n        \"362517926784439950037553874307609481648099797624563620478121972467988598509691655635833740234375e-248\"},\r\n    {0x1.fffffffffffffp-821, chars_format::scientific, 626,\r\n        \"1.\"\r\n        \"4302223338085468180826675064432871466075333719626806955064704204554103406198693902594491260841493771943802\"\r\n        \"1673247507626723778264826166223370595666997357036489741429410446642006630018238394104681389484366181630970\"\r\n        \"6156108700899805453901329079325922802313761958701605448344613960379188083147956510672723036970405761894074\"\r\n        \"5454568401209207373357391508636055186780417339253414678020975212692482433482429784489964286596484674889245\"\r\n        \"6643185934339763712051036274686354465494360505266616598176832421183781781336262822944786151335783045386508\"\r\n        \"872503585356887990007510774861521896329619959524912724095624394493597719701938331127166748046875e-247\"},\r\n    {0x1.fffffffffffffp-820, chars_format::scientific, 625,\r\n        \"2.\"\r\n        \"8604446676170936361653350128865742932150667439253613910129408409108206812397387805188982521682987543887604\"\r\n        \"3346495015253447556529652332446741191333994714072979482858820893284013260036476788209362778968732363261941\"\r\n        \"2312217401799610907802658158651845604627523917403210896689227920758376166295913021345446073940811523788149\"\r\n        \"0909136802418414746714783017272110373560834678506829356041950425384964866964859568979928573192969349778491\"\r\n        \"3286371868679527424102072549372708930988721010533233196353664842367563562672525645889572302671566090773017\"\r\n        \"74500717071377598001502154972304379265923991904982544819124878898719543940387666225433349609375e-247\"},\r\n    {0x1.fffffffffffffp-819, chars_format::scientific, 624,\r\n        \"5.\"\r\n        \"7208893352341872723306700257731485864301334878507227820258816818216413624794775610377965043365975087775208\"\r\n        \"6692990030506895113059304664893482382667989428145958965717641786568026520072953576418725557937464726523882\"\r\n        \"4624434803599221815605316317303691209255047834806421793378455841516752332591826042690892147881623047576298\"\r\n        \"1818273604836829493429566034544220747121669357013658712083900850769929733929719137959857146385938699556982\"\r\n        \"6572743737359054848204145098745417861977442021066466392707329684735127125345051291779144605343132181546035\"\r\n        \"4900143414275519600300430994460875853184798380996508963824975779743908788077533245086669921875e-247\"},\r\n    {0x1.fffffffffffffp-818, chars_format::scientific, 624,\r\n        \"1.\"\r\n        \"1441778670468374544661340051546297172860266975701445564051763363643282724958955122075593008673195017555041\"\r\n        \"7338598006101379022611860932978696476533597885629191793143528357313605304014590715283745111587492945304776\"\r\n        \"4924886960719844363121063263460738241851009566961284358675691168303350466518365208538178429576324609515259\"\r\n        \"6363654720967365898685913206908844149424333871402731742416780170153985946785943827591971429277187739911396\"\r\n        \"5314548747471810969640829019749083572395488404213293278541465936947025425069010258355828921068626436309207\"\r\n        \"0980028682855103920060086198892175170636959676199301792764995155948781757615506649017333984375e-246\"},\r\n    {0x1.fffffffffffffp-817, chars_format::scientific, 623,\r\n        \"2.\"\r\n        \"2883557340936749089322680103092594345720533951402891128103526727286565449917910244151186017346390035110083\"\r\n        \"4677196012202758045223721865957392953067195771258383586287056714627210608029181430567490223174985890609552\"\r\n        \"9849773921439688726242126526921476483702019133922568717351382336606700933036730417076356859152649219030519\"\r\n        \"2727309441934731797371826413817688298848667742805463484833560340307971893571887655183942858554375479822793\"\r\n        \"0629097494943621939281658039498167144790976808426586557082931873894050850138020516711657842137252872618414\"\r\n        \"196005736571020784012017239778435034127391935239860358552999031189756351523101329803466796875e-246\"},\r\n    {0x1.fffffffffffffp-816, chars_format::scientific, 622,\r\n        \"4.\"\r\n        \"5767114681873498178645360206185188691441067902805782256207053454573130899835820488302372034692780070220166\"\r\n        \"9354392024405516090447443731914785906134391542516767172574113429254421216058362861134980446349971781219105\"\r\n        \"9699547842879377452484253053842952967404038267845137434702764673213401866073460834152713718305298438061038\"\r\n        \"5454618883869463594743652827635376597697335485610926969667120680615943787143775310367885717108750959645586\"\r\n        \"1258194989887243878563316078996334289581953616853173114165863747788101700276041033423315684274505745236828\"\r\n        \"39201147314204156802403447955687006825478387047972071710599806237951270304620265960693359375e-246\"},\r\n    {0x1.fffffffffffffp-815, chars_format::scientific, 621,\r\n        \"9.\"\r\n        \"1534229363746996357290720412370377382882135805611564512414106909146261799671640976604744069385560140440333\"\r\n        \"8708784048811032180894887463829571812268783085033534345148226858508842432116725722269960892699943562438211\"\r\n        \"9399095685758754904968506107685905934808076535690274869405529346426803732146921668305427436610596876122077\"\r\n        \"0909237767738927189487305655270753195394670971221853939334241361231887574287550620735771434217501919291172\"\r\n        \"2516389979774487757126632157992668579163907233706346228331727495576203400552082066846631368549011490473656\"\r\n        \"7840229462840831360480689591137401365095677409594414342119961247590254060924053192138671875e-246\"},\r\n    {0x1.fffffffffffffp-814, chars_format::scientific, 621,\r\n        \"1.\"\r\n        \"8306845872749399271458144082474075476576427161122312902482821381829252359934328195320948813877112028088066\"\r\n        \"7741756809762206436178977492765914362453756617006706869029645371701768486423345144453992178539988712487642\"\r\n        \"3879819137151750980993701221537181186961615307138054973881105869285360746429384333661085487322119375224415\"\r\n        \"4181847553547785437897461131054150639078934194244370787866848272246377514857510124147154286843500383858234\"\r\n        \"4503277995954897551425326431598533715832781446741269245666345499115240680110416413369326273709802298094731\"\r\n        \"3568045892568166272096137918227480273019135481918882868423992249518050812184810638427734375e-245\"},\r\n    {0x1.fffffffffffffp-813, chars_format::scientific, 620,\r\n        \"3.\"\r\n        \"6613691745498798542916288164948150953152854322244625804965642763658504719868656390641897627754224056176133\"\r\n        \"5483513619524412872357954985531828724907513234013413738059290743403536972846690288907984357079977424975284\"\r\n        \"7759638274303501961987402443074362373923230614276109947762211738570721492858768667322170974644238750448830\"\r\n        \"8363695107095570875794922262108301278157868388488741575733696544492755029715020248294308573687000767716468\"\r\n        \"9006555991909795102850652863197067431665562893482538491332690998230481360220832826738652547419604596189462\"\r\n        \"713609178513633254419227583645496054603827096383776573684798449903610162436962127685546875e-245\"},\r\n    {0x1.fffffffffffffp-812, chars_format::scientific, 619,\r\n        \"7.\"\r\n        \"3227383490997597085832576329896301906305708644489251609931285527317009439737312781283795255508448112352267\"\r\n        \"0967027239048825744715909971063657449815026468026827476118581486807073945693380577815968714159954849950569\"\r\n        \"5519276548607003923974804886148724747846461228552219895524423477141442985717537334644341949288477500897661\"\r\n        \"6727390214191141751589844524216602556315736776977483151467393088985510059430040496588617147374001535432937\"\r\n        \"8013111983819590205701305726394134863331125786965076982665381996460962720441665653477305094839209192378925\"\r\n        \"42721835702726650883845516729099210920765419276755314736959689980722032487392425537109375e-245\"},\r\n    {0x1.fffffffffffffp-811, chars_format::scientific, 619,\r\n        \"1.\"\r\n        \"4645476698199519417166515265979260381261141728897850321986257105463401887947462556256759051101689622470453\"\r\n        \"4193405447809765148943181994212731489963005293605365495223716297361414789138676115563193742831990969990113\"\r\n        \"9103855309721400784794960977229744949569292245710443979104884695428288597143507466928868389857695500179532\"\r\n        \"3345478042838228350317968904843320511263147355395496630293478617797102011886008099317723429474800307086587\"\r\n        \"5602622396763918041140261145278826972666225157393015396533076399292192544088333130695461018967841838475785\"\r\n        \"08544367140545330176769103345819842184153083855351062947391937996144406497478485107421875e-244\"},\r\n    {0x1.fffffffffffffp-810, chars_format::scientific, 618,\r\n        \"2.\"\r\n        \"9290953396399038834333030531958520762522283457795700643972514210926803775894925112513518102203379244940906\"\r\n        \"8386810895619530297886363988425462979926010587210730990447432594722829578277352231126387485663981939980227\"\r\n        \"8207710619442801569589921954459489899138584491420887958209769390856577194287014933857736779715391000359064\"\r\n        \"6690956085676456700635937809686641022526294710790993260586957235594204023772016198635446858949600614173175\"\r\n        \"1205244793527836082280522290557653945332450314786030793066152798584385088176666261390922037935683676951570\"\r\n        \"1708873428109066035353820669163968436830616771070212589478387599228881299495697021484375e-244\"},\r\n    {0x1.fffffffffffffp-809, chars_format::scientific, 617,\r\n        \"5.\"\r\n        \"8581906792798077668666061063917041525044566915591401287945028421853607551789850225027036204406758489881813\"\r\n        \"6773621791239060595772727976850925959852021174421461980894865189445659156554704462252774971327963879960455\"\r\n        \"6415421238885603139179843908918979798277168982841775916419538781713154388574029867715473559430782000718129\"\r\n        \"3381912171352913401271875619373282045052589421581986521173914471188408047544032397270893717899201228346350\"\r\n        \"2410489587055672164561044581115307890664900629572061586132305597168770176353332522781844075871367353903140\"\r\n        \"341774685621813207070764133832793687366123354214042517895677519845776259899139404296875e-244\"},\r\n    {0x1.fffffffffffffp-808, chars_format::scientific, 617,\r\n        \"1.\"\r\n        \"1716381358559615533733212212783408305008913383118280257589005684370721510357970045005407240881351697976362\"\r\n        \"7354724358247812119154545595370185191970404234884292396178973037889131831310940892450554994265592775992091\"\r\n        \"1283084247777120627835968781783795959655433796568355183283907756342630877714805973543094711886156400143625\"\r\n        \"8676382434270582680254375123874656409010517884316397304234782894237681609508806479454178743579840245669270\"\r\n        \"0482097917411134432912208916223061578132980125914412317226461119433754035270666504556368815174273470780628\"\r\n        \"068354937124362641414152826766558737473224670842808503579135503969155251979827880859375e-243\"},\r\n    {0x1.fffffffffffffp-807, chars_format::scientific, 616,\r\n        \"2.\"\r\n        \"3432762717119231067466424425566816610017826766236560515178011368741443020715940090010814481762703395952725\"\r\n        \"4709448716495624238309091190740370383940808469768584792357946075778263662621881784901109988531185551984182\"\r\n        \"2566168495554241255671937563567591919310867593136710366567815512685261755429611947086189423772312800287251\"\r\n        \"7352764868541165360508750247749312818021035768632794608469565788475363219017612958908357487159680491338540\"\r\n        \"0964195834822268865824417832446123156265960251828824634452922238867508070541333009112737630348546941561256\"\r\n        \"13670987424872528282830565353311747494644934168561700715827100793831050395965576171875e-243\"},\r\n    {0x1.fffffffffffffp-806, chars_format::scientific, 615,\r\n        \"4.\"\r\n        \"6865525434238462134932848851133633220035653532473121030356022737482886041431880180021628963525406791905450\"\r\n        \"9418897432991248476618182381480740767881616939537169584715892151556527325243763569802219977062371103968364\"\r\n        \"5132336991108482511343875127135183838621735186273420733135631025370523510859223894172378847544625600574503\"\r\n        \"4705529737082330721017500495498625636042071537265589216939131576950726438035225917816714974319360982677080\"\r\n        \"1928391669644537731648835664892246312531920503657649268905844477735016141082666018225475260697093883122512\"\r\n        \"2734197484974505656566113070662349498928986833712340143165420158766210079193115234375e-243\"},\r\n    {0x1.fffffffffffffp-805, chars_format::scientific, 614,\r\n        \"9.\"\r\n        \"3731050868476924269865697702267266440071307064946242060712045474965772082863760360043257927050813583810901\"\r\n        \"8837794865982496953236364762961481535763233879074339169431784303113054650487527139604439954124742207936729\"\r\n        \"0264673982216965022687750254270367677243470372546841466271262050741047021718447788344757695089251201149006\"\r\n        \"9411059474164661442035000990997251272084143074531178433878263153901452876070451835633429948638721965354160\"\r\n        \"3856783339289075463297671329784492625063841007315298537811688955470032282165332036450950521394187766245024\"\r\n        \"546839496994901131313222614132469899785797366742468028633084031753242015838623046875e-243\"},\r\n    {0x1.fffffffffffffp-804, chars_format::scientific, 614,\r\n        \"1.\"\r\n        \"8746210173695384853973139540453453288014261412989248412142409094993154416572752072008651585410162716762180\"\r\n        \"3767558973196499390647272952592296307152646775814867833886356860622610930097505427920887990824948441587345\"\r\n        \"8052934796443393004537550050854073535448694074509368293254252410148209404343689557668951539017850240229801\"\r\n        \"3882211894832932288407000198199450254416828614906235686775652630780290575214090367126685989727744393070832\"\r\n        \"0771356667857815092659534265956898525012768201463059707562337791094006456433066407290190104278837553249004\"\r\n        \"909367899398980226262644522826493979957159473348493605726616806350648403167724609375e-242\"},\r\n    {0x1.fffffffffffffp-803, chars_format::scientific, 613,\r\n        \"3.\"\r\n        \"7492420347390769707946279080906906576028522825978496824284818189986308833145504144017303170820325433524360\"\r\n        \"7535117946392998781294545905184592614305293551629735667772713721245221860195010855841775981649896883174691\"\r\n        \"6105869592886786009075100101708147070897388149018736586508504820296418808687379115337903078035700480459602\"\r\n        \"7764423789665864576814000396398900508833657229812471373551305261560581150428180734253371979455488786141664\"\r\n        \"1542713335715630185319068531913797050025536402926119415124675582188012912866132814580380208557675106498009\"\r\n        \"81873579879796045252528904565298795991431894669698721145323361270129680633544921875e-242\"},\r\n    {0x1.fffffffffffffp-802, chars_format::scientific, 612,\r\n        \"7.\"\r\n        \"4984840694781539415892558161813813152057045651956993648569636379972617666291008288034606341640650867048721\"\r\n        \"5070235892785997562589091810369185228610587103259471335545427442490443720390021711683551963299793766349383\"\r\n        \"2211739185773572018150200203416294141794776298037473173017009640592837617374758230675806156071400960919205\"\r\n        \"5528847579331729153628000792797801017667314459624942747102610523121162300856361468506743958910977572283328\"\r\n        \"3085426671431260370638137063827594100051072805852238830249351164376025825732265629160760417115350212996019\"\r\n        \"6374715975959209050505780913059759198286378933939744229064672254025936126708984375e-242\"},\r\n    {0x1.fffffffffffffp-801, chars_format::scientific, 612,\r\n        \"1.\"\r\n        \"4996968138956307883178511632362762630411409130391398729713927275994523533258201657606921268328130173409744\"\r\n        \"3014047178557199512517818362073837045722117420651894267109085488498088744078004342336710392659958753269876\"\r\n        \"6442347837154714403630040040683258828358955259607494634603401928118567523474951646135161231214280192183841\"\r\n        \"1105769515866345830725600158559560203533462891924988549420522104624232460171272293701348791782195514456665\"\r\n        \"6617085334286252074127627412765518820010214561170447766049870232875205165146453125832152083423070042599203\"\r\n        \"9274943195191841810101156182611951839657275786787948845812934450805187225341796875e-241\"},\r\n    {0x1.fffffffffffffp-800, chars_format::scientific, 611,\r\n        \"2.\"\r\n        \"9993936277912615766357023264725525260822818260782797459427854551989047066516403315213842536656260346819488\"\r\n        \"6028094357114399025035636724147674091444234841303788534218170976996177488156008684673420785319917506539753\"\r\n        \"2884695674309428807260080081366517656717910519214989269206803856237135046949903292270322462428560384367682\"\r\n        \"2211539031732691661451200317119120407066925783849977098841044209248464920342544587402697583564391028913331\"\r\n        \"3234170668572504148255254825531037640020429122340895532099740465750410330292906251664304166846140085198407\"\r\n        \"854988639038368362020231236522390367931455157357589769162586890161037445068359375e-241\"},\r\n    {0x1.fffffffffffffp-799, chars_format::scientific, 610,\r\n        \"5.\"\r\n        \"9987872555825231532714046529451050521645636521565594918855709103978094133032806630427685073312520693638977\"\r\n        \"2056188714228798050071273448295348182888469682607577068436341953992354976312017369346841570639835013079506\"\r\n        \"5769391348618857614520160162733035313435821038429978538413607712474270093899806584540644924857120768735364\"\r\n        \"4423078063465383322902400634238240814133851567699954197682088418496929840685089174805395167128782057826662\"\r\n        \"6468341337145008296510509651062075280040858244681791064199480931500820660585812503328608333692280170396815\"\r\n        \"70997727807673672404046247304478073586291031471517953832517378032207489013671875e-241\"},\r\n    {0x1.fffffffffffffp-798, chars_format::scientific, 610,\r\n        \"1.\"\r\n        \"1997574511165046306542809305890210104329127304313118983771141820795618826606561326085537014662504138727795\"\r\n        \"4411237742845759610014254689659069636577693936521515413687268390798470995262403473869368314127967002615901\"\r\n        \"3153878269723771522904032032546607062687164207685995707682721542494854018779961316908128984971424153747072\"\r\n        \"8884615612693076664580480126847648162826770313539990839536417683699385968137017834961079033425756411565332\"\r\n        \"5293668267429001659302101930212415056008171648936358212839896186300164132117162500665721666738456034079363\"\r\n        \"14199545561534734480809249460895614717258206294303590766503475606441497802734375e-240\"},\r\n    {0x1.fffffffffffffp-797, chars_format::scientific, 609,\r\n        \"2.\"\r\n        \"3995149022330092613085618611780420208658254608626237967542283641591237653213122652171074029325008277455590\"\r\n        \"8822475485691519220028509379318139273155387873043030827374536781596941990524806947738736628255934005231802\"\r\n        \"6307756539447543045808064065093214125374328415371991415365443084989708037559922633816257969942848307494145\"\r\n        \"7769231225386153329160960253695296325653540627079981679072835367398771936274035669922158066851512823130665\"\r\n        \"0587336534858003318604203860424830112016343297872716425679792372600328264234325001331443333476912068158726\"\r\n        \"2839909112306946896161849892179122943451641258860718153300695121288299560546875e-240\"},\r\n    {0x1.fffffffffffffp-796, chars_format::scientific, 608,\r\n        \"4.\"\r\n        \"7990298044660185226171237223560840417316509217252475935084567283182475306426245304342148058650016554911181\"\r\n        \"7644950971383038440057018758636278546310775746086061654749073563193883981049613895477473256511868010463605\"\r\n        \"2615513078895086091616128130186428250748656830743982830730886169979416075119845267632515939885696614988291\"\r\n        \"5538462450772306658321920507390592651307081254159963358145670734797543872548071339844316133703025646261330\"\r\n        \"1174673069716006637208407720849660224032686595745432851359584745200656528468650002662886666953824136317452\"\r\n        \"567981822461389379232369978435824588690328251772143630660139024257659912109375e-240\"},\r\n    {0x1.fffffffffffffp-795, chars_format::scientific, 607,\r\n        \"9.\"\r\n        \"5980596089320370452342474447121680834633018434504951870169134566364950612852490608684296117300033109822363\"\r\n        \"5289901942766076880114037517272557092621551492172123309498147126387767962099227790954946513023736020927210\"\r\n        \"5231026157790172183232256260372856501497313661487965661461772339958832150239690535265031879771393229976583\"\r\n        \"1076924901544613316643841014781185302614162508319926716291341469595087745096142679688632267406051292522660\"\r\n        \"2349346139432013274416815441699320448065373191490865702719169490401313056937300005325773333907648272634905\"\r\n        \"13596364492277875846473995687164917738065650354428726132027804851531982421875e-240\"},\r\n    {0x1.fffffffffffffp-794, chars_format::scientific, 607,\r\n        \"1.\"\r\n        \"9196119217864074090468494889424336166926603686900990374033826913272990122570498121736859223460006621964472\"\r\n        \"7057980388553215376022807503454511418524310298434424661899629425277553592419845558190989302604747204185442\"\r\n        \"1046205231558034436646451252074571300299462732297593132292354467991766430047938107053006375954278645995316\"\r\n        \"6215384980308922663328768202956237060522832501663985343258268293919017549019228535937726453481210258504532\"\r\n        \"0469869227886402654883363088339864089613074638298173140543833898080262611387460001065154666781529654526981\"\r\n        \"02719272898455575169294799137432983547613130070885745226405560970306396484375e-239\"},\r\n    {0x1.fffffffffffffp-793, chars_format::scientific, 606,\r\n        \"3.\"\r\n        \"8392238435728148180936989778848672333853207373801980748067653826545980245140996243473718446920013243928945\"\r\n        \"4115960777106430752045615006909022837048620596868849323799258850555107184839691116381978605209494408370884\"\r\n        \"2092410463116068873292902504149142600598925464595186264584708935983532860095876214106012751908557291990633\"\r\n        \"2430769960617845326657536405912474121045665003327970686516536587838035098038457071875452906962420517009064\"\r\n        \"0939738455772805309766726176679728179226149276596346281087667796160525222774920002130309333563059309053962\"\r\n        \"0543854579691115033858959827486596709522626014177149045281112194061279296875e-239\"},\r\n    {0x1.fffffffffffffp-792, chars_format::scientific, 605,\r\n        \"7.\"\r\n        \"6784476871456296361873979557697344667706414747603961496135307653091960490281992486947436893840026487857890\"\r\n        \"8231921554212861504091230013818045674097241193737698647598517701110214369679382232763957210418988816741768\"\r\n        \"4184820926232137746585805008298285201197850929190372529169417871967065720191752428212025503817114583981266\"\r\n        \"4861539921235690653315072811824948242091330006655941373033073175676070196076914143750905813924841034018128\"\r\n        \"1879476911545610619533452353359456358452298553192692562175335592321050445549840004260618667126118618107924\"\r\n        \"108770915938223006771791965497319341904525202835429809056222438812255859375e-239\"},\r\n    {0x1.fffffffffffffp-791, chars_format::scientific, 605,\r\n        \"1.\"\r\n        \"5356895374291259272374795911539468933541282949520792299227061530618392098056398497389487378768005297571578\"\r\n        \"1646384310842572300818246002763609134819448238747539729519703540222042873935876446552791442083797763348353\"\r\n        \"6836964185246427549317161001659657040239570185838074505833883574393413144038350485642405100763422916796253\"\r\n        \"2972307984247138130663014562364989648418266001331188274606614635135214039215382828750181162784968206803625\"\r\n        \"6375895382309122123906690470671891271690459710638538512435067118464210089109968000852123733425223723621584\"\r\n        \"821754183187644601354358393099463868380905040567085961811244487762451171875e-238\"},\r\n    {0x1.fffffffffffffp-790, chars_format::scientific, 604,\r\n        \"3.\"\r\n        \"0713790748582518544749591823078937867082565899041584598454123061236784196112796994778974757536010595143156\"\r\n        \"3292768621685144601636492005527218269638896477495079459039407080444085747871752893105582884167595526696707\"\r\n        \"3673928370492855098634322003319314080479140371676149011667767148786826288076700971284810201526845833592506\"\r\n        \"5944615968494276261326029124729979296836532002662376549213229270270428078430765657500362325569936413607251\"\r\n        \"2751790764618244247813380941343782543380919421277077024870134236928420178219936001704247466850447447243169\"\r\n        \"64350836637528920270871678619892773676181008113417192362248897552490234375e-238\"},\r\n    {0x1.fffffffffffffp-789, chars_format::scientific, 603,\r\n        \"6.\"\r\n        \"1427581497165037089499183646157875734165131798083169196908246122473568392225593989557949515072021190286312\"\r\n        \"6585537243370289203272984011054436539277792954990158918078814160888171495743505786211165768335191053393414\"\r\n        \"7347856740985710197268644006638628160958280743352298023335534297573652576153401942569620403053691667185013\"\r\n        \"1889231936988552522652058249459958593673064005324753098426458540540856156861531315000724651139872827214502\"\r\n        \"5503581529236488495626761882687565086761838842554154049740268473856840356439872003408494933700894894486339\"\r\n        \"2870167327505784054174335723978554735236201622683438472449779510498046875e-238\"},\r\n    {0x1.fffffffffffffp-788, chars_format::scientific, 603,\r\n        \"1.\"\r\n        \"2285516299433007417899836729231575146833026359616633839381649224494713678445118797911589903014404238057262\"\r\n        \"5317107448674057840654596802210887307855558590998031783615762832177634299148701157242233153667038210678682\"\r\n        \"9469571348197142039453728801327725632191656148670459604667106859514730515230680388513924080610738333437002\"\r\n        \"6377846387397710504530411649891991718734612801064950619685291708108171231372306263000144930227974565442900\"\r\n        \"5100716305847297699125352376537513017352367768510830809948053694771368071287974400681698986740178978897267\"\r\n        \"8574033465501156810834867144795710947047240324536687694489955902099609375e-237\"},\r\n    {0x1.fffffffffffffp-787, chars_format::scientific, 602,\r\n        \"2.\"\r\n        \"4571032598866014835799673458463150293666052719233267678763298448989427356890237595823179806028808476114525\"\r\n        \"0634214897348115681309193604421774615711117181996063567231525664355268598297402314484466307334076421357365\"\r\n        \"8939142696394284078907457602655451264383312297340919209334213719029461030461360777027848161221476666874005\"\r\n        \"2755692774795421009060823299783983437469225602129901239370583416216342462744612526000289860455949130885801\"\r\n        \"0201432611694595398250704753075026034704735537021661619896107389542736142575948801363397973480357957794535\"\r\n        \"714806693100231362166973428959142189409448064907337538897991180419921875e-237\"},\r\n    {0x1.fffffffffffffp-786, chars_format::scientific, 601,\r\n        \"4.\"\r\n        \"9142065197732029671599346916926300587332105438466535357526596897978854713780475191646359612057616952229050\"\r\n        \"1268429794696231362618387208843549231422234363992127134463051328710537196594804628968932614668152842714731\"\r\n        \"7878285392788568157814915205310902528766624594681838418668427438058922060922721554055696322442953333748010\"\r\n        \"5511385549590842018121646599567966874938451204259802478741166832432684925489225052000579720911898261771602\"\r\n        \"0402865223389190796501409506150052069409471074043323239792214779085472285151897602726795946960715915589071\"\r\n        \"42961338620046272433394685791828437881889612981467507779598236083984375e-237\"},\r\n    {0x1.fffffffffffffp-785, chars_format::scientific, 600,\r\n        \"9.\"\r\n        \"8284130395464059343198693833852601174664210876933070715053193795957709427560950383292719224115233904458100\"\r\n        \"2536859589392462725236774417687098462844468727984254268926102657421074393189609257937865229336305685429463\"\r\n        \"5756570785577136315629830410621805057533249189363676837336854876117844121845443108111392644885906667496021\"\r\n        \"1022771099181684036243293199135933749876902408519604957482333664865369850978450104001159441823796523543204\"\r\n        \"0805730446778381593002819012300104138818942148086646479584429558170944570303795205453591893921431831178142\"\r\n        \"8592267724009254486678937158365687576377922596293501555919647216796875e-237\"},\r\n    {0x1.fffffffffffffp-784, chars_format::scientific, 600,\r\n        \"1.\"\r\n        \"9656826079092811868639738766770520234932842175386614143010638759191541885512190076658543844823046780891620\"\r\n        \"0507371917878492545047354883537419692568893745596850853785220531484214878637921851587573045867261137085892\"\r\n        \"7151314157115427263125966082124361011506649837872735367467370975223568824369088621622278528977181333499204\"\r\n        \"2204554219836336807248658639827186749975380481703920991496466732973073970195690020800231888364759304708640\"\r\n        \"8161146089355676318600563802460020827763788429617329295916885911634188914060759041090718378784286366235628\"\r\n        \"5718453544801850897335787431673137515275584519258700311183929443359375e-236\"},\r\n    {0x1.fffffffffffffp-783, chars_format::scientific, 599,\r\n        \"3.\"\r\n        \"9313652158185623737279477533541040469865684350773228286021277518383083771024380153317087689646093561783240\"\r\n        \"1014743835756985090094709767074839385137787491193701707570441062968429757275843703175146091734522274171785\"\r\n        \"4302628314230854526251932164248722023013299675745470734934741950447137648738177243244557057954362666998408\"\r\n        \"4409108439672673614497317279654373499950760963407841982992933465946147940391380041600463776729518609417281\"\r\n        \"6322292178711352637201127604920041655527576859234658591833771823268377828121518082181436757568572732471257\"\r\n        \"143690708960370179467157486334627503055116903851740062236785888671875e-236\"},\r\n    {0x1.fffffffffffffp-782, chars_format::scientific, 598,\r\n        \"7.\"\r\n        \"8627304316371247474558955067082080939731368701546456572042555036766167542048760306634175379292187123566480\"\r\n        \"2029487671513970180189419534149678770275574982387403415140882125936859514551687406350292183469044548343570\"\r\n        \"8605256628461709052503864328497444046026599351490941469869483900894275297476354486489114115908725333996816\"\r\n        \"8818216879345347228994634559308746999901521926815683965985866931892295880782760083200927553459037218834563\"\r\n        \"2644584357422705274402255209840083311055153718469317183667543646536755656243036164362873515137145464942514\"\r\n        \"28738141792074035893431497266925500611023380770348012447357177734375e-236\"},\r\n    {0x1.fffffffffffffp-781, chars_format::scientific, 598,\r\n        \"1.\"\r\n        \"5725460863274249494911791013416416187946273740309291314408511007353233508409752061326835075858437424713296\"\r\n        \"0405897534302794036037883906829935754055114996477480683028176425187371902910337481270058436693808909668714\"\r\n        \"1721051325692341810500772865699488809205319870298188293973896780178855059495270897297822823181745066799363\"\r\n        \"3763643375869069445798926911861749399980304385363136793197173386378459176156552016640185510691807443766912\"\r\n        \"6528916871484541054880451041968016662211030743693863436733508729307351131248607232872574703027429092988502\"\r\n        \"85747628358414807178686299453385100122204676154069602489471435546875e-235\"},\r\n    {0x1.fffffffffffffp-780, chars_format::scientific, 597,\r\n        \"3.\"\r\n        \"1450921726548498989823582026832832375892547480618582628817022014706467016819504122653670151716874849426592\"\r\n        \"0811795068605588072075767813659871508110229992954961366056352850374743805820674962540116873387617819337428\"\r\n        \"3442102651384683621001545731398977618410639740596376587947793560357710118990541794595645646363490133598726\"\r\n        \"7527286751738138891597853823723498799960608770726273586394346772756918352313104033280371021383614887533825\"\r\n        \"3057833742969082109760902083936033324422061487387726873467017458614702262497214465745149406054858185977005\"\r\n        \"7149525671682961435737259890677020024440935230813920497894287109375e-235\"},\r\n    {0x1.fffffffffffffp-779, chars_format::scientific, 596,\r\n        \"6.\"\r\n        \"2901843453096997979647164053665664751785094961237165257634044029412934033639008245307340303433749698853184\"\r\n        \"1623590137211176144151535627319743016220459985909922732112705700749487611641349925080233746775235638674856\"\r\n        \"6884205302769367242003091462797955236821279481192753175895587120715420237981083589191291292726980267197453\"\r\n        \"5054573503476277783195707647446997599921217541452547172788693545513836704626208066560742042767229775067650\"\r\n        \"6115667485938164219521804167872066648844122974775453746934034917229404524994428931490298812109716371954011\"\r\n        \"429905134336592287147451978135404004888187046162784099578857421875e-235\"},\r\n    {0x1.fffffffffffffp-778, chars_format::scientific, 596,\r\n        \"1.\"\r\n        \"2580368690619399595929432810733132950357018992247433051526808805882586806727801649061468060686749939770636\"\r\n        \"8324718027442235228830307125463948603244091997181984546422541140149897522328269985016046749355047127734971\"\r\n        \"3376841060553873448400618292559591047364255896238550635179117424143084047596216717838258258545396053439490\"\r\n        \"7010914700695255556639141529489399519984243508290509434557738709102767340925241613312148408553445955013530\"\r\n        \"1223133497187632843904360833574413329768824594955090749386806983445880904998885786298059762421943274390802\"\r\n        \"285981026867318457429490395627080800977637409232556819915771484375e-234\"},\r\n    {0x1.fffffffffffffp-777, chars_format::scientific, 595,\r\n        \"2.\"\r\n        \"5160737381238799191858865621466265900714037984494866103053617611765173613455603298122936121373499879541273\"\r\n        \"6649436054884470457660614250927897206488183994363969092845082280299795044656539970032093498710094255469942\"\r\n        \"6753682121107746896801236585119182094728511792477101270358234848286168095192433435676516517090792106878981\"\r\n        \"4021829401390511113278283058978799039968487016581018869115477418205534681850483226624296817106891910027060\"\r\n        \"2446266994375265687808721667148826659537649189910181498773613966891761809997771572596119524843886548781604\"\r\n        \"57196205373463691485898079125416160195527481846511363983154296875e-234\"},\r\n    {0x1.fffffffffffffp-776, chars_format::scientific, 594,\r\n        \"5.\"\r\n        \"0321474762477598383717731242932531801428075968989732206107235223530347226911206596245872242746999759082547\"\r\n        \"3298872109768940915321228501855794412976367988727938185690164560599590089313079940064186997420188510939885\"\r\n        \"3507364242215493793602473170238364189457023584954202540716469696572336190384866871353033034181584213757962\"\r\n        \"8043658802781022226556566117957598079936974033162037738230954836411069363700966453248593634213783820054120\"\r\n        \"4892533988750531375617443334297653319075298379820362997547227933783523619995543145192239049687773097563209\"\r\n        \"1439241074692738297179615825083232039105496369302272796630859375e-234\"},\r\n    {0x1.fffffffffffffp-775, chars_format::scientific, 594,\r\n        \"1.\"\r\n        \"0064294952495519676743546248586506360285615193797946441221447044706069445382241319249174448549399951816509\"\r\n        \"4659774421953788183064245700371158882595273597745587637138032912119918017862615988012837399484037702187977\"\r\n        \"0701472848443098758720494634047672837891404716990840508143293939314467238076973374270606606836316842751592\"\r\n        \"5608731760556204445311313223591519615987394806632407547646190967282213872740193290649718726842756764010824\"\r\n        \"0978506797750106275123488666859530663815059675964072599509445586756704723999108629038447809937554619512641\"\r\n        \"8287848214938547659435923165016646407821099273860454559326171875e-233\"},\r\n    {0x1.fffffffffffffp-774, chars_format::scientific, 593,\r\n        \"2.\"\r\n        \"0128589904991039353487092497173012720571230387595892882442894089412138890764482638498348897098799903633018\"\r\n        \"9319548843907576366128491400742317765190547195491175274276065824239836035725231976025674798968075404375954\"\r\n        \"1402945696886197517440989268095345675782809433981681016286587878628934476153946748541213213672633685503185\"\r\n        \"1217463521112408890622626447183039231974789613264815095292381934564427745480386581299437453685513528021648\"\r\n        \"1957013595500212550246977333719061327630119351928145199018891173513409447998217258076895619875109239025283\"\r\n        \"657569642987709531887184633003329281564219854772090911865234375e-233\"},\r\n    {0x1.fffffffffffffp-773, chars_format::scientific, 592,\r\n        \"4.\"\r\n        \"0257179809982078706974184994346025441142460775191785764885788178824277781528965276996697794197599807266037\"\r\n        \"8639097687815152732256982801484635530381094390982350548552131648479672071450463952051349597936150808751908\"\r\n        \"2805891393772395034881978536190691351565618867963362032573175757257868952307893497082426427345267371006370\"\r\n        \"2434927042224817781245252894366078463949579226529630190584763869128855490960773162598874907371027056043296\"\r\n        \"3914027191000425100493954667438122655260238703856290398037782347026818895996434516153791239750218478050567\"\r\n        \"31513928597541906377436926600665856312843970954418182373046875e-233\"},\r\n    {0x1.fffffffffffffp-772, chars_format::scientific, 591,\r\n        \"8.\"\r\n        \"0514359619964157413948369988692050882284921550383571529771576357648555563057930553993395588395199614532075\"\r\n        \"7278195375630305464513965602969271060762188781964701097104263296959344142900927904102699195872301617503816\"\r\n        \"5611782787544790069763957072381382703131237735926724065146351514515737904615786994164852854690534742012740\"\r\n        \"4869854084449635562490505788732156927899158453059260381169527738257710981921546325197749814742054112086592\"\r\n        \"7828054382000850200987909334876245310520477407712580796075564694053637791992869032307582479500436956101134\"\r\n        \"6302785719508381275487385320133171262568794190883636474609375e-233\"},\r\n    {0x1.fffffffffffffp-771, chars_format::scientific, 591,\r\n        \"1.\"\r\n        \"6102871923992831482789673997738410176456984310076714305954315271529711112611586110798679117679039922906415\"\r\n        \"1455639075126061092902793120593854212152437756392940219420852659391868828580185580820539839174460323500763\"\r\n        \"3122356557508958013952791414476276540626247547185344813029270302903147580923157398832970570938106948402548\"\r\n        \"0973970816889927112498101157746431385579831690611852076233905547651542196384309265039549962948410822417318\"\r\n        \"5565610876400170040197581866975249062104095481542516159215112938810727558398573806461516495900087391220226\"\r\n        \"9260557143901676255097477064026634252513758838176727294921875e-232\"},\r\n    {0x1.fffffffffffffp-770, chars_format::scientific, 590,\r\n        \"3.\"\r\n        \"2205743847985662965579347995476820352913968620153428611908630543059422225223172221597358235358079845812830\"\r\n        \"2911278150252122185805586241187708424304875512785880438841705318783737657160371161641079678348920647001526\"\r\n        \"6244713115017916027905582828952553081252495094370689626058540605806295161846314797665941141876213896805096\"\r\n        \"1947941633779854224996202315492862771159663381223704152467811095303084392768618530079099925896821644834637\"\r\n        \"1131221752800340080395163733950498124208190963085032318430225877621455116797147612923032991800174782440453\"\r\n        \"852111428780335251019495412805326850502751767635345458984375e-232\"},\r\n    {0x1.fffffffffffffp-769, chars_format::scientific, 589,\r\n        \"6.\"\r\n        \"4411487695971325931158695990953640705827937240306857223817261086118844450446344443194716470716159691625660\"\r\n        \"5822556300504244371611172482375416848609751025571760877683410637567475314320742323282159356697841294003053\"\r\n        \"2489426230035832055811165657905106162504990188741379252117081211612590323692629595331882283752427793610192\"\r\n        \"3895883267559708449992404630985725542319326762447408304935622190606168785537237060158199851793643289669274\"\r\n        \"2262443505600680160790327467900996248416381926170064636860451755242910233594295225846065983600349564880907\"\r\n        \"70422285756067050203899082561065370100550353527069091796875e-232\"},\r\n    {0x1.fffffffffffffp-768, chars_format::scientific, 589,\r\n        \"1.\"\r\n        \"2882297539194265186231739198190728141165587448061371444763452217223768890089268888638943294143231938325132\"\r\n        \"1164511260100848874322234496475083369721950205114352175536682127513495062864148464656431871339568258800610\"\r\n        \"6497885246007166411162233131581021232500998037748275850423416242322518064738525919066376456750485558722038\"\r\n        \"4779176653511941689998480926197145108463865352489481660987124438121233757107447412031639970358728657933854\"\r\n        \"8452488701120136032158065493580199249683276385234012927372090351048582046718859045169213196720069912976181\"\r\n        \"54084457151213410040779816512213074020110070705413818359375e-231\"},\r\n    {0x1.fffffffffffffp-767, chars_format::scientific, 588,\r\n        \"2.\"\r\n        \"5764595078388530372463478396381456282331174896122742889526904434447537780178537777277886588286463876650264\"\r\n        \"2329022520201697748644468992950166739443900410228704351073364255026990125728296929312863742679136517601221\"\r\n        \"2995770492014332822324466263162042465001996075496551700846832484645036129477051838132752913500971117444076\"\r\n        \"9558353307023883379996961852394290216927730704978963321974248876242467514214894824063279940717457315867709\"\r\n        \"6904977402240272064316130987160398499366552770468025854744180702097164093437718090338426393440139825952363\"\r\n        \"0816891430242682008155963302442614804022014141082763671875e-231\"},\r\n    {0x1.fffffffffffffp-766, chars_format::scientific, 587,\r\n        \"5.\"\r\n        \"1529190156777060744926956792762912564662349792245485779053808868895075560357075554555773176572927753300528\"\r\n        \"4658045040403395497288937985900333478887800820457408702146728510053980251456593858625727485358273035202442\"\r\n        \"5991540984028665644648932526324084930003992150993103401693664969290072258954103676265505827001942234888153\"\r\n        \"9116706614047766759993923704788580433855461409957926643948497752484935028429789648126559881434914631735419\"\r\n        \"3809954804480544128632261974320796998733105540936051709488361404194328186875436180676852786880279651904726\"\r\n        \"163378286048536401631192660488522960804402828216552734375e-231\"},\r\n    {0x1.fffffffffffffp-765, chars_format::scientific, 587,\r\n        \"1.\"\r\n        \"0305838031355412148985391358552582512932469958449097155810761773779015112071415110911154635314585550660105\"\r\n        \"6931609008080679099457787597180066695777560164091481740429345702010796050291318771725145497071654607040488\"\r\n        \"5198308196805733128929786505264816986000798430198620680338732993858014451790820735253101165400388446977630\"\r\n        \"7823341322809553351998784740957716086771092281991585328789699550496987005685957929625311976286982926347083\"\r\n        \"8761990960896108825726452394864159399746621108187210341897672280838865637375087236135370557376055930380945\"\r\n        \"232675657209707280326238532097704592160880565643310546875e-230\"},\r\n    {0x1.fffffffffffffp-764, chars_format::scientific, 586,\r\n        \"2.\"\r\n        \"0611676062710824297970782717105165025864939916898194311621523547558030224142830221822309270629171101320211\"\r\n        \"3863218016161358198915575194360133391555120328182963480858691404021592100582637543450290994143309214080977\"\r\n        \"0396616393611466257859573010529633972001596860397241360677465987716028903581641470506202330800776893955261\"\r\n        \"5646682645619106703997569481915432173542184563983170657579399100993974011371915859250623952573965852694167\"\r\n        \"7523981921792217651452904789728318799493242216374420683795344561677731274750174472270741114752111860761890\"\r\n        \"46535131441941456065247706419540918432176113128662109375e-230\"},\r\n    {0x1.fffffffffffffp-763, chars_format::scientific, 585,\r\n        \"4.\"\r\n        \"1223352125421648595941565434210330051729879833796388623243047095116060448285660443644618541258342202640422\"\r\n        \"7726436032322716397831150388720266783110240656365926961717382808043184201165275086900581988286618428161954\"\r\n        \"0793232787222932515719146021059267944003193720794482721354931975432057807163282941012404661601553787910523\"\r\n        \"1293365291238213407995138963830864347084369127966341315158798201987948022743831718501247905147931705388335\"\r\n        \"5047963843584435302905809579456637598986484432748841367590689123355462549500348944541482229504223721523780\"\r\n        \"9307026288388291213049541283908183686435222625732421875e-230\"},\r\n    {0x1.fffffffffffffp-762, chars_format::scientific, 584,\r\n        \"8.\"\r\n        \"2446704250843297191883130868420660103459759667592777246486094190232120896571320887289237082516684405280845\"\r\n        \"5452872064645432795662300777440533566220481312731853923434765616086368402330550173801163976573236856323908\"\r\n        \"1586465574445865031438292042118535888006387441588965442709863950864115614326565882024809323203107575821046\"\r\n        \"2586730582476426815990277927661728694168738255932682630317596403975896045487663437002495810295863410776671\"\r\n        \"0095927687168870605811619158913275197972968865497682735181378246710925099000697889082964459008447443047561\"\r\n        \"861405257677658242609908256781636737287044525146484375e-230\"},\r\n    {0x1.fffffffffffffp-761, chars_format::scientific, 584,\r\n        \"1.\"\r\n        \"6489340850168659438376626173684132020691951933518555449297218838046424179314264177457847416503336881056169\"\r\n        \"1090574412929086559132460155488106713244096262546370784686953123217273680466110034760232795314647371264781\"\r\n        \"6317293114889173006287658408423707177601277488317793088541972790172823122865313176404961864640621515164209\"\r\n        \"2517346116495285363198055585532345738833747651186536526063519280795179209097532687400499162059172682155334\"\r\n        \"2019185537433774121162323831782655039594593773099536547036275649342185019800139577816592891801689488609512\"\r\n        \"372281051535531648521981651356327347457408905029296875e-229\"},\r\n    {0x1.fffffffffffffp-760, chars_format::scientific, 583,\r\n        \"3.\"\r\n        \"2978681700337318876753252347368264041383903867037110898594437676092848358628528354915694833006673762112338\"\r\n        \"2181148825858173118264920310976213426488192525092741569373906246434547360932220069520465590629294742529563\"\r\n        \"2634586229778346012575316816847414355202554976635586177083945580345646245730626352809923729281243030328418\"\r\n        \"5034692232990570726396111171064691477667495302373073052127038561590358418195065374800998324118345364310668\"\r\n        \"4038371074867548242324647663565310079189187546199073094072551298684370039600279155633185783603378977219024\"\r\n        \"74456210307106329704396330271265469491481781005859375e-229\"},\r\n    {0x1.fffffffffffffp-759, chars_format::scientific, 582,\r\n        \"6.\"\r\n        \"5957363400674637753506504694736528082767807734074221797188875352185696717257056709831389666013347524224676\"\r\n        \"4362297651716346236529840621952426852976385050185483138747812492869094721864440139040931181258589485059126\"\r\n        \"5269172459556692025150633633694828710405109953271172354167891160691292491461252705619847458562486060656837\"\r\n        \"0069384465981141452792222342129382955334990604746146104254077123180716836390130749601996648236690728621336\"\r\n        \"8076742149735096484649295327130620158378375092398146188145102597368740079200558311266371567206757954438049\"\r\n        \"4891242061421265940879266054253093898296356201171875e-229\"},\r\n    {0x1.fffffffffffffp-758, chars_format::scientific, 582,\r\n        \"1.\"\r\n        \"3191472680134927550701300938947305616553561546814844359437775070437139343451411341966277933202669504844935\"\r\n        \"2872459530343269247305968124390485370595277010037096627749562498573818944372888027808186236251717897011825\"\r\n        \"3053834491911338405030126726738965742081021990654234470833578232138258498292250541123969491712497212131367\"\r\n        \"4013876893196228290558444468425876591066998120949229220850815424636143367278026149920399329647338145724267\"\r\n        \"3615348429947019296929859065426124031675675018479629237629020519473748015840111662253274313441351590887609\"\r\n        \"8978248412284253188175853210850618779659271240234375e-228\"},\r\n    {0x1.fffffffffffffp-757, chars_format::scientific, 581,\r\n        \"2.\"\r\n        \"6382945360269855101402601877894611233107123093629688718875550140874278686902822683932555866405339009689870\"\r\n        \"5744919060686538494611936248780970741190554020074193255499124997147637888745776055616372472503435794023650\"\r\n        \"6107668983822676810060253453477931484162043981308468941667156464276516996584501082247938983424994424262734\"\r\n        \"8027753786392456581116888936851753182133996241898458441701630849272286734556052299840798659294676291448534\"\r\n        \"7230696859894038593859718130852248063351350036959258475258041038947496031680223324506548626882703181775219\"\r\n        \"795649682456850637635170642170123755931854248046875e-228\"},\r\n    {0x1.fffffffffffffp-756, chars_format::scientific, 580,\r\n        \"5.\"\r\n        \"2765890720539710202805203755789222466214246187259377437751100281748557373805645367865111732810678019379741\"\r\n        \"1489838121373076989223872497561941482381108040148386510998249994295275777491552111232744945006871588047301\"\r\n        \"2215337967645353620120506906955862968324087962616937883334312928553033993169002164495877966849988848525469\"\r\n        \"6055507572784913162233777873703506364267992483796916883403261698544573469112104599681597318589352582897069\"\r\n        \"4461393719788077187719436261704496126702700073918516950516082077894992063360446649013097253765406363550439\"\r\n        \"59129936491370127527034128434024751186370849609375e-228\"},\r\n    {0x1.fffffffffffffp-755, chars_format::scientific, 580,\r\n        \"1.\"\r\n        \"0553178144107942040561040751157844493242849237451875487550220056349711474761129073573022346562135603875948\"\r\n        \"2297967624274615397844774499512388296476221608029677302199649998859055155498310422246548989001374317609460\"\r\n        \"2443067593529070724024101381391172593664817592523387576666862585710606798633800432899175593369997769705093\"\r\n        \"9211101514556982632446755574740701272853598496759383376680652339708914693822420919936319463717870516579413\"\r\n        \"8892278743957615437543887252340899225340540014783703390103216415578998412672089329802619450753081272710087\"\r\n        \"91825987298274025505406825686804950237274169921875e-227\"},\r\n    {0x1.fffffffffffffp-754, chars_format::scientific, 579,\r\n        \"2.\"\r\n        \"1106356288215884081122081502315688986485698474903750975100440112699422949522258147146044693124271207751896\"\r\n        \"4595935248549230795689548999024776592952443216059354604399299997718110310996620844493097978002748635218920\"\r\n        \"4886135187058141448048202762782345187329635185046775153333725171421213597267600865798351186739995539410187\"\r\n        \"8422203029113965264893511149481402545707196993518766753361304679417829387644841839872638927435741033158827\"\r\n        \"7784557487915230875087774504681798450681080029567406780206432831157996825344178659605238901506162545420175\"\r\n        \"8365197459654805101081365137360990047454833984375e-227\"},\r\n    {0x1.fffffffffffffp-753, chars_format::scientific, 578,\r\n        \"4.\"\r\n        \"2212712576431768162244163004631377972971396949807501950200880225398845899044516294292089386248542415503792\"\r\n        \"9191870497098461591379097998049553185904886432118709208798599995436220621993241688986195956005497270437840\"\r\n        \"9772270374116282896096405525564690374659270370093550306667450342842427194535201731596702373479991078820375\"\r\n        \"6844406058227930529787022298962805091414393987037533506722609358835658775289683679745277854871482066317655\"\r\n        \"5569114975830461750175549009363596901362160059134813560412865662315993650688357319210477803012325090840351\"\r\n        \"673039491930961020216273027472198009490966796875e-227\"},\r\n    {0x1.fffffffffffffp-752, chars_format::scientific, 577,\r\n        \"8.\"\r\n        \"4425425152863536324488326009262755945942793899615003900401760450797691798089032588584178772497084831007585\"\r\n        \"8383740994196923182758195996099106371809772864237418417597199990872441243986483377972391912010994540875681\"\r\n        \"9544540748232565792192811051129380749318540740187100613334900685684854389070403463193404746959982157640751\"\r\n        \"3688812116455861059574044597925610182828787974075067013445218717671317550579367359490555709742964132635311\"\r\n        \"1138229951660923500351098018727193802724320118269627120825731324631987301376714638420955606024650181680703\"\r\n        \"34607898386192204043254605494439601898193359375e-227\"},\r\n    {0x1.fffffffffffffp-751, chars_format::scientific, 577,\r\n        \"1.\"\r\n        \"6885085030572707264897665201852551189188558779923000780080352090159538359617806517716835754499416966201517\"\r\n        \"1676748198839384636551639199219821274361954572847483683519439998174488248797296675594478382402198908175136\"\r\n        \"3908908149646513158438562210225876149863708148037420122666980137136970877814080692638680949391996431528150\"\r\n        \"2737762423291172211914808919585122036565757594815013402689043743534263510115873471898111141948592826527062\"\r\n        \"2227645990332184700070219603745438760544864023653925424165146264926397460275342927684191121204930036336140\"\r\n        \"66921579677238440808650921098887920379638671875e-226\"},\r\n    {0x1.fffffffffffffp-750, chars_format::scientific, 576,\r\n        \"3.\"\r\n        \"3770170061145414529795330403705102378377117559846001560160704180319076719235613035433671508998833932403034\"\r\n        \"3353496397678769273103278398439642548723909145694967367038879996348976497594593351188956764804397816350272\"\r\n        \"7817816299293026316877124420451752299727416296074840245333960274273941755628161385277361898783992863056300\"\r\n        \"5475524846582344423829617839170244073131515189630026805378087487068527020231746943796222283897185653054124\"\r\n        \"4455291980664369400140439207490877521089728047307850848330292529852794920550685855368382242409860072672281\"\r\n        \"3384315935447688161730184219777584075927734375e-226\"},\r\n    {0x1.fffffffffffffp-749, chars_format::scientific, 575,\r\n        \"6.\"\r\n        \"7540340122290829059590660807410204756754235119692003120321408360638153438471226070867343017997667864806068\"\r\n        \"6706992795357538546206556796879285097447818291389934734077759992697952995189186702377913529608795632700545\"\r\n        \"5635632598586052633754248840903504599454832592149680490667920548547883511256322770554723797567985726112601\"\r\n        \"0951049693164688847659235678340488146263030379260053610756174974137054040463493887592444567794371306108248\"\r\n        \"8910583961328738800280878414981755042179456094615701696660585059705589841101371710736764484819720145344562\"\r\n        \"676863187089537632346036843955516815185546875e-226\"},\r\n    {0x1.fffffffffffffp-748, chars_format::scientific, 575,\r\n        \"1.\"\r\n        \"3508068024458165811918132161482040951350847023938400624064281672127630687694245214173468603599533572961213\"\r\n        \"7341398559071507709241311359375857019489563658277986946815551998539590599037837340475582705921759126540109\"\r\n        \"1127126519717210526750849768180700919890966518429936098133584109709576702251264554110944759513597145222520\"\r\n        \"2190209938632937769531847135668097629252606075852010722151234994827410808092698777518488913558874261221649\"\r\n        \"7782116792265747760056175682996351008435891218923140339332117011941117968220274342147352896963944029068912\"\r\n        \"535372637417907526469207368791103363037109375e-225\"},\r\n    {0x1.fffffffffffffp-747, chars_format::scientific, 574,\r\n        \"2.\"\r\n        \"7016136048916331623836264322964081902701694047876801248128563344255261375388490428346937207199067145922427\"\r\n        \"4682797118143015418482622718751714038979127316555973893631103997079181198075674680951165411843518253080218\"\r\n        \"2254253039434421053501699536361401839781933036859872196267168219419153404502529108221889519027194290445040\"\r\n        \"4380419877265875539063694271336195258505212151704021444302469989654821616185397555036977827117748522443299\"\r\n        \"5564233584531495520112351365992702016871782437846280678664234023882235936440548684294705793927888058137825\"\r\n        \"07074527483581505293841473758220672607421875e-225\"},\r\n    {0x1.fffffffffffffp-746, chars_format::scientific, 573,\r\n        \"5.\"\r\n        \"4032272097832663247672528645928163805403388095753602496257126688510522750776980856693874414398134291844854\"\r\n        \"9365594236286030836965245437503428077958254633111947787262207994158362396151349361902330823687036506160436\"\r\n        \"4508506078868842107003399072722803679563866073719744392534336438838306809005058216443779038054388580890080\"\r\n        \"8760839754531751078127388542672390517010424303408042888604939979309643232370795110073955654235497044886599\"\r\n        \"1128467169062991040224702731985404033743564875692561357328468047764471872881097368589411587855776116275650\"\r\n        \"1414905496716301058768294751644134521484375e-225\"},\r\n    {0x1.fffffffffffffp-745, chars_format::scientific, 573,\r\n        \"1.\"\r\n        \"0806454419566532649534505729185632761080677619150720499251425337702104550155396171338774882879626858368970\"\r\n        \"9873118847257206167393049087500685615591650926622389557452441598831672479230269872380466164737407301232087\"\r\n        \"2901701215773768421400679814544560735912773214743948878506867287767661361801011643288755807610877716178016\"\r\n        \"1752167950906350215625477708534478103402084860681608577720987995861928646474159022014791130847099408977319\"\r\n        \"8225693433812598208044940546397080806748712975138512271465693609552894374576219473717882317571155223255130\"\r\n        \"0282981099343260211753658950328826904296875e-224\"},\r\n    {0x1.fffffffffffffp-744, chars_format::scientific, 572,\r\n        \"2.\"\r\n        \"1612908839133065299069011458371265522161355238301440998502850675404209100310792342677549765759253716737941\"\r\n        \"9746237694514412334786098175001371231183301853244779114904883197663344958460539744760932329474814602464174\"\r\n        \"5803402431547536842801359629089121471825546429487897757013734575535322723602023286577511615221755432356032\"\r\n        \"3504335901812700431250955417068956206804169721363217155441975991723857292948318044029582261694198817954639\"\r\n        \"6451386867625196416089881092794161613497425950277024542931387219105788749152438947435764635142310446510260\"\r\n        \"056596219868652042350731790065765380859375e-224\"},\r\n    {0x1.fffffffffffffp-743, chars_format::scientific, 571,\r\n        \"4.\"\r\n        \"3225817678266130598138022916742531044322710476602881997005701350808418200621584685355099531518507433475883\"\r\n        \"9492475389028824669572196350002742462366603706489558229809766395326689916921079489521864658949629204928349\"\r\n        \"1606804863095073685602719258178242943651092858975795514027469151070645447204046573155023230443510864712064\"\r\n        \"7008671803625400862501910834137912413608339442726434310883951983447714585896636088059164523388397635909279\"\r\n        \"2902773735250392832179762185588323226994851900554049085862774438211577498304877894871529270284620893020520\"\r\n        \"11319243973730408470146358013153076171875e-224\"},\r\n    {0x1.fffffffffffffp-742, chars_format::scientific, 570,\r\n        \"8.\"\r\n        \"6451635356532261196276045833485062088645420953205763994011402701616836401243169370710199063037014866951767\"\r\n        \"8984950778057649339144392700005484924733207412979116459619532790653379833842158979043729317899258409856698\"\r\n        \"3213609726190147371205438516356485887302185717951591028054938302141290894408093146310046460887021729424129\"\r\n        \"4017343607250801725003821668275824827216678885452868621767903966895429171793272176118329046776795271818558\"\r\n        \"5805547470500785664359524371176646453989703801108098171725548876423154996609755789743058540569241786041040\"\r\n        \"2263848794746081694029271602630615234375e-224\"},\r\n    {0x1.fffffffffffffp-741, chars_format::scientific, 570,\r\n        \"1.\"\r\n        \"7290327071306452239255209166697012417729084190641152798802280540323367280248633874142039812607402973390353\"\r\n        \"5796990155611529867828878540001096984946641482595823291923906558130675966768431795808745863579851681971339\"\r\n        \"6642721945238029474241087703271297177460437143590318205610987660428258178881618629262009292177404345884825\"\r\n        \"8803468721450160345000764333655164965443335777090573724353580793379085834358654435223665809355359054363711\"\r\n        \"7161109494100157132871904874235329290797940760221619634345109775284630999321951157948611708113848357208208\"\r\n        \"0452769758949216338805854320526123046875e-223\"},\r\n    {0x1.fffffffffffffp-740, chars_format::scientific, 569,\r\n        \"3.\"\r\n        \"4580654142612904478510418333394024835458168381282305597604561080646734560497267748284079625214805946780707\"\r\n        \"1593980311223059735657757080002193969893282965191646583847813116261351933536863591617491727159703363942679\"\r\n        \"3285443890476058948482175406542594354920874287180636411221975320856516357763237258524018584354808691769651\"\r\n        \"7606937442900320690001528667310329930886671554181147448707161586758171668717308870447331618710718108727423\"\r\n        \"4322218988200314265743809748470658581595881520443239268690219550569261998643902315897223416227696714416416\"\r\n        \"090553951789843267761170864105224609375e-223\"},\r\n    {0x1.fffffffffffffp-739, chars_format::scientific, 568,\r\n        \"6.\"\r\n        \"9161308285225808957020836666788049670916336762564611195209122161293469120994535496568159250429611893561414\"\r\n        \"3187960622446119471315514160004387939786565930383293167695626232522703867073727183234983454319406727885358\"\r\n        \"6570887780952117896964350813085188709841748574361272822443950641713032715526474517048037168709617383539303\"\r\n        \"5213874885800641380003057334620659861773343108362294897414323173516343337434617740894663237421436217454846\"\r\n        \"8644437976400628531487619496941317163191763040886478537380439101138523997287804631794446832455393428832832\"\r\n        \"18110790357968653552234172821044921875e-223\"},\r\n    {0x1.fffffffffffffp-738, chars_format::scientific, 568,\r\n        \"1.\"\r\n        \"3832261657045161791404167333357609934183267352512922239041824432258693824198907099313631850085922378712282\"\r\n        \"8637592124489223894263102832000877587957313186076658633539125246504540773414745436646996690863881345577071\"\r\n        \"7314177556190423579392870162617037741968349714872254564488790128342606543105294903409607433741923476707860\"\r\n        \"7042774977160128276000611466924131972354668621672458979482864634703268667486923548178932647484287243490969\"\r\n        \"3728887595280125706297523899388263432638352608177295707476087820227704799457560926358889366491078685766566\"\r\n        \"43622158071593730710446834564208984375e-222\"},\r\n    {0x1.fffffffffffffp-737, chars_format::scientific, 567,\r\n        \"2.\"\r\n        \"7664523314090323582808334666715219868366534705025844478083648864517387648397814198627263700171844757424565\"\r\n        \"7275184248978447788526205664001755175914626372153317267078250493009081546829490873293993381727762691154143\"\r\n        \"4628355112380847158785740325234075483936699429744509128977580256685213086210589806819214867483846953415721\"\r\n        \"4085549954320256552001222933848263944709337243344917958965729269406537334973847096357865294968574486981938\"\r\n        \"7457775190560251412595047798776526865276705216354591414952175640455409598915121852717778732982157371533132\"\r\n        \"8724431614318746142089366912841796875e-222\"},\r\n    {0x1.fffffffffffffp-736, chars_format::scientific, 566,\r\n        \"5.\"\r\n        \"5329046628180647165616669333430439736733069410051688956167297729034775296795628397254527400343689514849131\"\r\n        \"4550368497956895577052411328003510351829252744306634534156500986018163093658981746587986763455525382308286\"\r\n        \"9256710224761694317571480650468150967873398859489018257955160513370426172421179613638429734967693906831442\"\r\n        \"8171099908640513104002445867696527889418674486689835917931458538813074669947694192715730589937148973963877\"\r\n        \"4915550381120502825190095597553053730553410432709182829904351280910819197830243705435557465964314743066265\"\r\n        \"744886322863749228417873382568359375e-222\"},\r\n    {0x1.fffffffffffffp-735, chars_format::scientific, 566,\r\n        \"1.\"\r\n        \"1065809325636129433123333866686087947346613882010337791233459545806955059359125679450905480068737902969826\"\r\n        \"2910073699591379115410482265600702070365850548861326906831300197203632618731796349317597352691105076461657\"\r\n        \"3851342044952338863514296130093630193574679771897803651591032102674085234484235922727685946993538781366288\"\r\n        \"5634219981728102620800489173539305577883734897337967183586291707762614933989538838543146117987429794792775\"\r\n        \"4983110076224100565038019119510610746110682086541836565980870256182163839566048741087111493192862948613253\"\r\n        \"148977264572749845683574676513671875e-221\"},\r\n    {0x1.fffffffffffffp-734, chars_format::scientific, 565,\r\n        \"2.\"\r\n        \"2131618651272258866246667733372175894693227764020675582466919091613910118718251358901810960137475805939652\"\r\n        \"5820147399182758230820964531201404140731701097722653813662600394407265237463592698635194705382210152923314\"\r\n        \"7702684089904677727028592260187260387149359543795607303182064205348170468968471845455371893987077562732577\"\r\n        \"1268439963456205241600978347078611155767469794675934367172583415525229867979077677086292235974859589585550\"\r\n        \"9966220152448201130076038239021221492221364173083673131961740512364327679132097482174222986385725897226506\"\r\n        \"29795452914549969136714935302734375e-221\"},\r\n    {0x1.fffffffffffffp-733, chars_format::scientific, 564,\r\n        \"4.\"\r\n        \"4263237302544517732493335466744351789386455528041351164933838183227820237436502717803621920274951611879305\"\r\n        \"1640294798365516461641929062402808281463402195445307627325200788814530474927185397270389410764420305846629\"\r\n        \"5405368179809355454057184520374520774298719087591214606364128410696340937936943690910743787974155125465154\"\r\n        \"2536879926912410483201956694157222311534939589351868734345166831050459735958155354172584471949719179171101\"\r\n        \"9932440304896402260152076478042442984442728346167346263923481024728655358264194964348445972771451794453012\"\r\n        \"5959090582909993827342987060546875e-221\"},\r\n    {0x1.fffffffffffffp-732, chars_format::scientific, 563,\r\n        \"8.\"\r\n        \"8526474605089035464986670933488703578772911056082702329867676366455640474873005435607243840549903223758610\"\r\n        \"3280589596731032923283858124805616562926804390890615254650401577629060949854370794540778821528840611693259\"\r\n        \"0810736359618710908114369040749041548597438175182429212728256821392681875873887381821487575948310250930308\"\r\n        \"5073759853824820966403913388314444623069879178703737468690333662100919471916310708345168943899438358342203\"\r\n        \"9864880609792804520304152956084885968885456692334692527846962049457310716528389928696891945542903588906025\"\r\n        \"191818116581998765468597412109375e-221\"},\r\n    {0x1.fffffffffffffp-731, chars_format::scientific, 563,\r\n        \"1.\"\r\n        \"7705294921017807092997334186697740715754582211216540465973535273291128094974601087121448768109980644751722\"\r\n        \"0656117919346206584656771624961123312585360878178123050930080315525812189970874158908155764305768122338651\"\r\n        \"8162147271923742181622873808149808309719487635036485842545651364278536375174777476364297515189662050186061\"\r\n        \"7014751970764964193280782677662888924613975835740747493738066732420183894383262141669033788779887671668440\"\r\n        \"7972976121958560904060830591216977193777091338466938505569392409891462143305677985739378389108580717781205\"\r\n        \"038363623316399753093719482421875e-220\"},\r\n    {0x1.fffffffffffffp-730, chars_format::scientific, 562,\r\n        \"3.\"\r\n        \"5410589842035614185994668373395481431509164422433080931947070546582256189949202174242897536219961289503444\"\r\n        \"1312235838692413169313543249922246625170721756356246101860160631051624379941748317816311528611536244677303\"\r\n        \"6324294543847484363245747616299616619438975270072971685091302728557072750349554952728595030379324100372123\"\r\n        \"4029503941529928386561565355325777849227951671481494987476133464840367788766524283338067577559775343336881\"\r\n        \"5945952243917121808121661182433954387554182676933877011138784819782924286611355971478756778217161435562410\"\r\n        \"07672724663279950618743896484375e-220\"},\r\n    {0x1.fffffffffffffp-729, chars_format::scientific, 561,\r\n        \"7.\"\r\n        \"0821179684071228371989336746790962863018328844866161863894141093164512379898404348485795072439922579006888\"\r\n        \"2624471677384826338627086499844493250341443512712492203720321262103248759883496635632623057223072489354607\"\r\n        \"2648589087694968726491495232599233238877950540145943370182605457114145500699109905457190060758648200744246\"\r\n        \"8059007883059856773123130710651555698455903342962989974952266929680735577533048566676135155119550686673763\"\r\n        \"1891904487834243616243322364867908775108365353867754022277569639565848573222711942957513556434322871124820\"\r\n        \"1534544932655990123748779296875e-220\"},\r\n    {0x1.fffffffffffffp-728, chars_format::scientific, 561,\r\n        \"1.\"\r\n        \"4164235936814245674397867349358192572603665768973232372778828218632902475979680869697159014487984515801377\"\r\n        \"6524894335476965267725417299968898650068288702542498440744064252420649751976699327126524611444614497870921\"\r\n        \"4529717817538993745298299046519846647775590108029188674036521091422829100139821981091438012151729640148849\"\r\n        \"3611801576611971354624626142130311139691180668592597994990453385936147115506609713335227031023910137334752\"\r\n        \"6378380897566848723248664472973581755021673070773550804455513927913169714644542388591502711286864574224964\"\r\n        \"0306908986531198024749755859375e-219\"},\r\n    {0x1.fffffffffffffp-727, chars_format::scientific, 560,\r\n        \"2.\"\r\n        \"8328471873628491348795734698716385145207331537946464745557656437265804951959361739394318028975969031602755\"\r\n        \"3049788670953930535450834599937797300136577405084996881488128504841299503953398654253049222889228995741842\"\r\n        \"9059435635077987490596598093039693295551180216058377348073042182845658200279643962182876024303459280297698\"\r\n        \"7223603153223942709249252284260622279382361337185195989980906771872294231013219426670454062047820274669505\"\r\n        \"2756761795133697446497328945947163510043346141547101608911027855826339429289084777183005422573729148449928\"\r\n        \"061381797306239604949951171875e-219\"},\r\n    {0x1.fffffffffffffp-726, chars_format::scientific, 559,\r\n        \"5.\"\r\n        \"6656943747256982697591469397432770290414663075892929491115312874531609903918723478788636057951938063205510\"\r\n        \"6099577341907861070901669199875594600273154810169993762976257009682599007906797308506098445778457991483685\"\r\n        \"8118871270155974981193196186079386591102360432116754696146084365691316400559287924365752048606918560595397\"\r\n        \"4447206306447885418498504568521244558764722674370391979961813543744588462026438853340908124095640549339010\"\r\n        \"5513523590267394892994657891894327020086692283094203217822055711652678858578169554366010845147458296899856\"\r\n        \"12276359461247920989990234375e-219\"},\r\n    {0x1.fffffffffffffp-725, chars_format::scientific, 559,\r\n        \"1.\"\r\n        \"1331388749451396539518293879486554058082932615178585898223062574906321980783744695757727211590387612641102\"\r\n        \"1219915468381572214180333839975118920054630962033998752595251401936519801581359461701219689155691598296737\"\r\n        \"1623774254031194996238639237215877318220472086423350939229216873138263280111857584873150409721383712119079\"\r\n        \"4889441261289577083699700913704248911752944534874078395992362708748917692405287770668181624819128109867802\"\r\n        \"1102704718053478978598931578378865404017338456618840643564411142330535771715633910873202169029491659379971\"\r\n        \"22455271892249584197998046875e-218\"},\r\n    {0x1.fffffffffffffp-724, chars_format::scientific, 558,\r\n        \"2.\"\r\n        \"2662777498902793079036587758973108116165865230357171796446125149812643961567489391515454423180775225282204\"\r\n        \"2439830936763144428360667679950237840109261924067997505190502803873039603162718923402439378311383196593474\"\r\n        \"3247548508062389992477278474431754636440944172846701878458433746276526560223715169746300819442767424238158\"\r\n        \"9778882522579154167399401827408497823505889069748156791984725417497835384810575541336363249638256219735604\"\r\n        \"2205409436106957957197863156757730808034676913237681287128822284661071543431267821746404338058983318759942\"\r\n        \"4491054378449916839599609375e-218\"},\r\n    {0x1.fffffffffffffp-723, chars_format::scientific, 557,\r\n        \"4.\"\r\n        \"5325554997805586158073175517946216232331730460714343592892250299625287923134978783030908846361550450564408\"\r\n        \"4879661873526288856721335359900475680218523848135995010381005607746079206325437846804878756622766393186948\"\r\n        \"6495097016124779984954556948863509272881888345693403756916867492553053120447430339492601638885534848476317\"\r\n        \"9557765045158308334798803654816995647011778139496313583969450834995670769621151082672726499276512439471208\"\r\n        \"4410818872213915914395726313515461616069353826475362574257644569322143086862535643492808676117966637519884\"\r\n        \"898210875689983367919921875e-218\"},\r\n    {0x1.fffffffffffffp-722, chars_format::scientific, 556,\r\n        \"9.\"\r\n        \"0651109995611172316146351035892432464663460921428687185784500599250575846269957566061817692723100901128816\"\r\n        \"9759323747052577713442670719800951360437047696271990020762011215492158412650875693609757513245532786373897\"\r\n        \"2990194032249559969909113897727018545763776691386807513833734985106106240894860678985203277771069696952635\"\r\n        \"9115530090316616669597607309633991294023556278992627167938901669991341539242302165345452998553024878942416\"\r\n        \"8821637744427831828791452627030923232138707652950725148515289138644286173725071286985617352235933275039769\"\r\n        \"79642175137996673583984375e-218\"},\r\n    {0x1.fffffffffffffp-721, chars_format::scientific, 556,\r\n        \"1.\"\r\n        \"8130221999122234463229270207178486492932692184285737437156900119850115169253991513212363538544620180225763\"\r\n        \"3951864749410515542688534143960190272087409539254398004152402243098431682530175138721951502649106557274779\"\r\n        \"4598038806449911993981822779545403709152755338277361502766746997021221248178972135797040655554213939390527\"\r\n        \"1823106018063323333919521461926798258804711255798525433587780333998268307848460433069090599710604975788483\"\r\n        \"3764327548885566365758290525406184646427741530590145029703057827728857234745014257397123470447186655007953\"\r\n        \"95928435027599334716796875e-217\"},\r\n    {0x1.fffffffffffffp-720, chars_format::scientific, 555,\r\n        \"3.\"\r\n        \"6260443998244468926458540414356972985865384368571474874313800239700230338507983026424727077089240360451526\"\r\n        \"7903729498821031085377068287920380544174819078508796008304804486196863365060350277443903005298213114549558\"\r\n        \"9196077612899823987963645559090807418305510676554723005533493994042442496357944271594081311108427878781054\"\r\n        \"3646212036126646667839042923853596517609422511597050867175560667996536615696920866138181199421209951576966\"\r\n        \"7528655097771132731516581050812369292855483061180290059406115655457714469490028514794246940894373310015907\"\r\n        \"9185687005519866943359375e-217\"},\r\n    {0x1.fffffffffffffp-719, chars_format::scientific, 554,\r\n        \"7.\"\r\n        \"2520887996488937852917080828713945971730768737142949748627600479400460677015966052849454154178480720903053\"\r\n        \"5807458997642062170754136575840761088349638157017592016609608972393726730120700554887806010596426229099117\"\r\n        \"8392155225799647975927291118181614836611021353109446011066987988084884992715888543188162622216855757562108\"\r\n        \"7292424072253293335678085847707193035218845023194101734351121335993073231393841732276362398842419903153933\"\r\n        \"5057310195542265463033162101624738585710966122360580118812231310915428938980057029588493881788746620031815\"\r\n        \"837137401103973388671875e-217\"},\r\n    {0x1.fffffffffffffp-718, chars_format::scientific, 554,\r\n        \"1.\"\r\n        \"4504177599297787570583416165742789194346153747428589949725520095880092135403193210569890830835696144180610\"\r\n        \"7161491799528412434150827315168152217669927631403518403321921794478745346024140110977561202119285245819823\"\r\n        \"5678431045159929595185458223636322967322204270621889202213397597616976998543177708637632524443371151512421\"\r\n        \"7458484814450658667135617169541438607043769004638820346870224267198614646278768346455272479768483980630786\"\r\n        \"7011462039108453092606632420324947717142193224472116023762446262183085787796011405917698776357749324006363\"\r\n        \"167427480220794677734375e-216\"},\r\n    {0x1.fffffffffffffp-717, chars_format::scientific, 553,\r\n        \"2.\"\r\n        \"9008355198595575141166832331485578388692307494857179899451040191760184270806386421139781661671392288361221\"\r\n        \"4322983599056824868301654630336304435339855262807036806643843588957490692048280221955122404238570491639647\"\r\n        \"1356862090319859190370916447272645934644408541243778404426795195233953997086355417275265048886742303024843\"\r\n        \"4916969628901317334271234339082877214087538009277640693740448534397229292557536692910544959536967961261573\"\r\n        \"4022924078216906185213264840649895434284386448944232047524892524366171575592022811835397552715498648012726\"\r\n        \"33485496044158935546875e-216\"},\r\n    {0x1.fffffffffffffp-716, chars_format::scientific, 552,\r\n        \"5.\"\r\n        \"8016710397191150282333664662971156777384614989714359798902080383520368541612772842279563323342784576722442\"\r\n        \"8645967198113649736603309260672608870679710525614073613287687177914981384096560443910244808477140983279294\"\r\n        \"2713724180639718380741832894545291869288817082487556808853590390467907994172710834550530097773484606049686\"\r\n        \"9833939257802634668542468678165754428175076018555281387480897068794458585115073385821089919073935922523146\"\r\n        \"8045848156433812370426529681299790868568772897888464095049785048732343151184045623670795105430997296025452\"\r\n        \"6697099208831787109375e-216\"},\r\n    {0x1.fffffffffffffp-715, chars_format::scientific, 552,\r\n        \"1.\"\r\n        \"1603342079438230056466732932594231355476922997942871959780416076704073708322554568455912664668556915344488\"\r\n        \"5729193439622729947320661852134521774135942105122814722657537435582996276819312088782048961695428196655858\"\r\n        \"8542744836127943676148366578909058373857763416497511361770718078093581598834542166910106019554696921209937\"\r\n        \"3966787851560526933708493735633150885635015203711056277496179413758891717023014677164217983814787184504629\"\r\n        \"3609169631286762474085305936259958173713754579577692819009957009746468630236809124734159021086199459205090\"\r\n        \"5339419841766357421875e-215\"},\r\n    {0x1.fffffffffffffp-714, chars_format::scientific, 551,\r\n        \"2.\"\r\n        \"3206684158876460112933465865188462710953845995885743919560832153408147416645109136911825329337113830688977\"\r\n        \"1458386879245459894641323704269043548271884210245629445315074871165992553638624177564097923390856393311717\"\r\n        \"7085489672255887352296733157818116747715526832995022723541436156187163197669084333820212039109393842419874\"\r\n        \"7933575703121053867416987471266301771270030407422112554992358827517783434046029354328435967629574369009258\"\r\n        \"7218339262573524948170611872519916347427509159155385638019914019492937260473618249468318042172398918410181\"\r\n        \"067883968353271484375e-215\"},\r\n    {0x1.fffffffffffffp-713, chars_format::scientific, 550,\r\n        \"4.\"\r\n        \"6413368317752920225866931730376925421907691991771487839121664306816294833290218273823650658674227661377954\"\r\n        \"2916773758490919789282647408538087096543768420491258890630149742331985107277248355128195846781712786623435\"\r\n        \"4170979344511774704593466315636233495431053665990045447082872312374326395338168667640424078218787684839749\"\r\n        \"5867151406242107734833974942532603542540060814844225109984717655035566868092058708656871935259148738018517\"\r\n        \"4436678525147049896341223745039832694855018318310771276039828038985874520947236498936636084344797836820362\"\r\n        \"13576793670654296875e-215\"},\r\n    {0x1.fffffffffffffp-712, chars_format::scientific, 549,\r\n        \"9.\"\r\n        \"2826736635505840451733863460753850843815383983542975678243328613632589666580436547647301317348455322755908\"\r\n        \"5833547516981839578565294817076174193087536840982517781260299484663970214554496710256391693563425573246870\"\r\n        \"8341958689023549409186932631272466990862107331980090894165744624748652790676337335280848156437575369679499\"\r\n        \"1734302812484215469667949885065207085080121629688450219969435310071133736184117417313743870518297476037034\"\r\n        \"8873357050294099792682447490079665389710036636621542552079656077971749041894472997873272168689595673640724\"\r\n        \"2715358734130859375e-215\"},\r\n    {0x1.fffffffffffffp-711, chars_format::scientific, 549,\r\n        \"1.\"\r\n        \"8565347327101168090346772692150770168763076796708595135648665722726517933316087309529460263469691064551181\"\r\n        \"7166709503396367915713058963415234838617507368196503556252059896932794042910899342051278338712685114649374\"\r\n        \"1668391737804709881837386526254493398172421466396018178833148924949730558135267467056169631287515073935899\"\r\n        \"8346860562496843093933589977013041417016024325937690043993887062014226747236823483462748774103659495207406\"\r\n        \"9774671410058819958536489498015933077942007327324308510415931215594349808378894599574654433737919134728144\"\r\n        \"8543071746826171875e-214\"},\r\n    {0x1.fffffffffffffp-710, chars_format::scientific, 548,\r\n        \"3.\"\r\n        \"7130694654202336180693545384301540337526153593417190271297331445453035866632174619058920526939382129102363\"\r\n        \"4333419006792735831426117926830469677235014736393007112504119793865588085821798684102556677425370229298748\"\r\n        \"3336783475609419763674773052508986796344842932792036357666297849899461116270534934112339262575030147871799\"\r\n        \"6693721124993686187867179954026082834032048651875380087987774124028453494473646966925497548207318990414813\"\r\n        \"9549342820117639917072978996031866155884014654648617020831862431188699616757789199149308867475838269456289\"\r\n        \"708614349365234375e-214\"},\r\n    {0x1.fffffffffffffp-709, chars_format::scientific, 547,\r\n        \"7.\"\r\n        \"4261389308404672361387090768603080675052307186834380542594662890906071733264349238117841053878764258204726\"\r\n        \"8666838013585471662852235853660939354470029472786014225008239587731176171643597368205113354850740458597496\"\r\n        \"6673566951218839527349546105017973592689685865584072715332595699798922232541069868224678525150060295743599\"\r\n        \"3387442249987372375734359908052165668064097303750760175975548248056906988947293933850995096414637980829627\"\r\n        \"9098685640235279834145957992063732311768029309297234041663724862377399233515578398298617734951676538912579\"\r\n        \"41722869873046875e-214\"},\r\n    {0x1.fffffffffffffp-708, chars_format::scientific, 547,\r\n        \"1.\"\r\n        \"4852277861680934472277418153720616135010461437366876108518932578181214346652869847623568210775752851640945\"\r\n        \"3733367602717094332570447170732187870894005894557202845001647917546235234328719473641022670970148091719499\"\r\n        \"3334713390243767905469909221003594718537937173116814543066519139959784446508213973644935705030012059148719\"\r\n        \"8677488449997474475146871981610433133612819460750152035195109649611381397789458786770199019282927596165925\"\r\n        \"5819737128047055966829191598412746462353605861859446808332744972475479846703115679659723546990335307782515\"\r\n        \"88344573974609375e-213\"},\r\n    {0x1.fffffffffffffp-707, chars_format::scientific, 546,\r\n        \"2.\"\r\n        \"9704555723361868944554836307441232270020922874733752217037865156362428693305739695247136421551505703281890\"\r\n        \"7466735205434188665140894341464375741788011789114405690003295835092470468657438947282045341940296183438998\"\r\n        \"6669426780487535810939818442007189437075874346233629086133038279919568893016427947289871410060024118297439\"\r\n        \"7354976899994948950293743963220866267225638921500304070390219299222762795578917573540398038565855192331851\"\r\n        \"1639474256094111933658383196825492924707211723718893616665489944950959693406231359319447093980670615565031\"\r\n        \"7668914794921875e-213\"},\r\n    {0x1.fffffffffffffp-706, chars_format::scientific, 545,\r\n        \"5.\"\r\n        \"9409111446723737889109672614882464540041845749467504434075730312724857386611479390494272843103011406563781\"\r\n        \"4933470410868377330281788682928751483576023578228811380006591670184940937314877894564090683880592366877997\"\r\n        \"3338853560975071621879636884014378874151748692467258172266076559839137786032855894579742820120048236594879\"\r\n        \"4709953799989897900587487926441732534451277843000608140780438598445525591157835147080796077131710384663702\"\r\n        \"3278948512188223867316766393650985849414423447437787233330979889901919386812462718638894187961341231130063\"\r\n        \"533782958984375e-213\"},\r\n    {0x1.fffffffffffffp-705, chars_format::scientific, 545,\r\n        \"1.\"\r\n        \"1881822289344747577821934522976492908008369149893500886815146062544971477322295878098854568620602281312756\"\r\n        \"2986694082173675466056357736585750296715204715645762276001318334036988187462975578912818136776118473375599\"\r\n        \"4667770712195014324375927376802875774830349738493451634453215311967827557206571178915948564024009647318975\"\r\n        \"8941990759997979580117497585288346506890255568600121628156087719689105118231567029416159215426342076932740\"\r\n        \"4655789702437644773463353278730197169882884689487557446666195977980383877362492543727778837592268246226012\"\r\n        \"706756591796875e-212\"},\r\n    {0x1.fffffffffffffp-704, chars_format::scientific, 544,\r\n        \"2.\"\r\n        \"3763644578689495155643869045952985816016738299787001773630292125089942954644591756197709137241204562625512\"\r\n        \"5973388164347350932112715473171500593430409431291524552002636668073976374925951157825636273552236946751198\"\r\n        \"9335541424390028648751854753605751549660699476986903268906430623935655114413142357831897128048019294637951\"\r\n        \"7883981519995959160234995170576693013780511137200243256312175439378210236463134058832318430852684153865480\"\r\n        \"9311579404875289546926706557460394339765769378975114893332391955960767754724985087455557675184536492452025\"\r\n        \"41351318359375e-212\"},\r\n    {0x1.fffffffffffffp-703, chars_format::scientific, 543,\r\n        \"4.\"\r\n        \"7527289157378990311287738091905971632033476599574003547260584250179885909289183512395418274482409125251025\"\r\n        \"1946776328694701864225430946343001186860818862583049104005273336147952749851902315651272547104473893502397\"\r\n        \"8671082848780057297503709507211503099321398953973806537812861247871310228826284715663794256096038589275903\"\r\n        \"5767963039991918320469990341153386027561022274400486512624350878756420472926268117664636861705368307730961\"\r\n        \"8623158809750579093853413114920788679531538757950229786664783911921535509449970174911115350369072984904050\"\r\n        \"8270263671875e-212\"},\r\n    {0x1.fffffffffffffp-702, chars_format::scientific, 542,\r\n        \"9.\"\r\n        \"5054578314757980622575476183811943264066953199148007094521168500359771818578367024790836548964818250502050\"\r\n        \"3893552657389403728450861892686002373721637725166098208010546672295905499703804631302545094208947787004795\"\r\n        \"7342165697560114595007419014423006198642797907947613075625722495742620457652569431327588512192077178551807\"\r\n        \"1535926079983836640939980682306772055122044548800973025248701757512840945852536235329273723410736615461923\"\r\n        \"7246317619501158187706826229841577359063077515900459573329567823843071018899940349822230700738145969808101\"\r\n        \"654052734375e-212\"},\r\n    {0x1.fffffffffffffp-701, chars_format::scientific, 542,\r\n        \"1.\"\r\n        \"9010915662951596124515095236762388652813390639829601418904233700071954363715673404958167309792963650100410\"\r\n        \"0778710531477880745690172378537200474744327545033219641602109334459181099940760926260509018841789557400959\"\r\n        \"1468433139512022919001483802884601239728559581589522615125144499148524091530513886265517702438415435710361\"\r\n        \"4307185215996767328187996136461354411024408909760194605049740351502568189170507247065854744682147323092384\"\r\n        \"7449263523900231637541365245968315471812615503180091914665913564768614203779988069964446140147629193961620\"\r\n        \"330810546875e-211\"},\r\n    {0x1.fffffffffffffp-700, chars_format::scientific, 541,\r\n        \"3.\"\r\n        \"8021831325903192249030190473524777305626781279659202837808467400143908727431346809916334619585927300200820\"\r\n        \"1557421062955761491380344757074400949488655090066439283204218668918362199881521852521018037683579114801918\"\r\n        \"2936866279024045838002967605769202479457119163179045230250288998297048183061027772531035404876830871420722\"\r\n        \"8614370431993534656375992272922708822048817819520389210099480703005136378341014494131709489364294646184769\"\r\n        \"4898527047800463275082730491936630943625231006360183829331827129537228407559976139928892280295258387923240\"\r\n        \"66162109375e-211\"},\r\n    {0x1.fffffffffffffp-699, chars_format::scientific, 540,\r\n        \"7.\"\r\n        \"6043662651806384498060380947049554611253562559318405675616934800287817454862693619832669239171854600401640\"\r\n        \"3114842125911522982760689514148801898977310180132878566408437337836724399763043705042036075367158229603836\"\r\n        \"5873732558048091676005935211538404958914238326358090460500577996594096366122055545062070809753661742841445\"\r\n        \"7228740863987069312751984545845417644097635639040778420198961406010272756682028988263418978728589292369538\"\r\n        \"9797054095600926550165460983873261887250462012720367658663654259074456815119952279857784560590516775846481\"\r\n        \"3232421875e-211\"},\r\n    {0x1.fffffffffffffp-698, chars_format::scientific, 540,\r\n        \"1.\"\r\n        \"5208732530361276899612076189409910922250712511863681135123386960057563490972538723966533847834370920080328\"\r\n        \"0622968425182304596552137902829760379795462036026575713281687467567344879952608741008407215073431645920767\"\r\n        \"3174746511609618335201187042307680991782847665271618092100115599318819273224411109012414161950732348568289\"\r\n        \"1445748172797413862550396909169083528819527127808155684039792281202054551336405797652683795745717858473907\"\r\n        \"7959410819120185310033092196774652377450092402544073531732730851814891363023990455971556912118103355169296\"\r\n        \"2646484375e-210\"},\r\n    {0x1.fffffffffffffp-697, chars_format::scientific, 539,\r\n        \"3.\"\r\n        \"0417465060722553799224152378819821844501425023727362270246773920115126981945077447933067695668741840160656\"\r\n        \"1245936850364609193104275805659520759590924072053151426563374935134689759905217482016814430146863291841534\"\r\n        \"6349493023219236670402374084615361983565695330543236184200231198637638546448822218024828323901464697136578\"\r\n        \"2891496345594827725100793818338167057639054255616311368079584562404109102672811595305367591491435716947815\"\r\n        \"5918821638240370620066184393549304754900184805088147063465461703629782726047980911943113824236206710338592\"\r\n        \"529296875e-210\"},\r\n    {0x1.fffffffffffffp-696, chars_format::scientific, 538,\r\n        \"6.\"\r\n        \"0834930121445107598448304757639643689002850047454724540493547840230253963890154895866135391337483680321312\"\r\n        \"2491873700729218386208551611319041519181848144106302853126749870269379519810434964033628860293726583683069\"\r\n        \"2698986046438473340804748169230723967131390661086472368400462397275277092897644436049656647802929394273156\"\r\n        \"5782992691189655450201587636676334115278108511232622736159169124808218205345623190610735182982871433895631\"\r\n        \"1837643276480741240132368787098609509800369610176294126930923407259565452095961823886227648472413420677185\"\r\n        \"05859375e-210\"},\r\n    {0x1.fffffffffffffp-695, chars_format::scientific, 538,\r\n        \"1.\"\r\n        \"2166986024289021519689660951527928737800570009490944908098709568046050792778030979173227078267496736064262\"\r\n        \"4498374740145843677241710322263808303836369628821260570625349974053875903962086992806725772058745316736613\"\r\n        \"8539797209287694668160949633846144793426278132217294473680092479455055418579528887209931329560585878854631\"\r\n        \"3156598538237931090040317527335266823055621702246524547231833824961643641069124638122147036596574286779126\"\r\n        \"2367528655296148248026473757419721901960073922035258825386184681451913090419192364777245529694482684135437\"\r\n        \"01171875e-209\"},\r\n    {0x1.fffffffffffffp-694, chars_format::scientific, 537,\r\n        \"2.\"\r\n        \"4333972048578043039379321903055857475601140018981889816197419136092101585556061958346454156534993472128524\"\r\n        \"8996749480291687354483420644527616607672739257642521141250699948107751807924173985613451544117490633473227\"\r\n        \"7079594418575389336321899267692289586852556264434588947360184958910110837159057774419862659121171757709262\"\r\n        \"6313197076475862180080635054670533646111243404493049094463667649923287282138249276244294073193148573558252\"\r\n        \"4735057310592296496052947514839443803920147844070517650772369362903826180838384729554491059388965368270874\"\r\n        \"0234375e-209\"},\r\n    {0x1.fffffffffffffp-693, chars_format::scientific, 536,\r\n        \"4.\"\r\n        \"8667944097156086078758643806111714951202280037963779632394838272184203171112123916692908313069986944257049\"\r\n        \"7993498960583374708966841289055233215345478515285042282501399896215503615848347971226903088234981266946455\"\r\n        \"4159188837150778672643798535384579173705112528869177894720369917820221674318115548839725318242343515418525\"\r\n        \"2626394152951724360161270109341067292222486808986098188927335299846574564276498552488588146386297147116504\"\r\n        \"9470114621184592992105895029678887607840295688141035301544738725807652361676769459108982118777930736541748\"\r\n        \"046875e-209\"},\r\n    {0x1.fffffffffffffp-692, chars_format::scientific, 535,\r\n        \"9.\"\r\n        \"7335888194312172157517287612223429902404560075927559264789676544368406342224247833385816626139973888514099\"\r\n        \"5986997921166749417933682578110466430690957030570084565002799792431007231696695942453806176469962533892910\"\r\n        \"8318377674301557345287597070769158347410225057738355789440739835640443348636231097679450636484687030837050\"\r\n        \"5252788305903448720322540218682134584444973617972196377854670599693149128552997104977176292772594294233009\"\r\n        \"8940229242369185984211790059357775215680591376282070603089477451615304723353538918217964237555861473083496\"\r\n        \"09375e-209\"},\r\n    {0x1.fffffffffffffp-691, chars_format::scientific, 535,\r\n        \"1.\"\r\n        \"9467177638862434431503457522444685980480912015185511852957935308873681268444849566677163325227994777702819\"\r\n        \"9197399584233349883586736515622093286138191406114016913000559958486201446339339188490761235293992506778582\"\r\n        \"1663675534860311469057519414153831669482045011547671157888147967128088669727246219535890127296937406167410\"\r\n        \"1050557661180689744064508043736426916888994723594439275570934119938629825710599420995435258554518858846601\"\r\n        \"9788045848473837196842358011871555043136118275256414120617895490323060944670707783643592847511172294616699\"\r\n        \"21875e-208\"},\r\n    {0x1.fffffffffffffp-690, chars_format::scientific, 534,\r\n        \"3.\"\r\n        \"8934355277724868863006915044889371960961824030371023705915870617747362536889699133354326650455989555405639\"\r\n        \"8394799168466699767173473031244186572276382812228033826001119916972402892678678376981522470587985013557164\"\r\n        \"3327351069720622938115038828307663338964090023095342315776295934256177339454492439071780254593874812334820\"\r\n        \"2101115322361379488129016087472853833777989447188878551141868239877259651421198841990870517109037717693203\"\r\n        \"9576091696947674393684716023743110086272236550512828241235790980646121889341415567287185695022344589233398\"\r\n        \"4375e-208\"},\r\n    {0x1.fffffffffffffp-689, chars_format::scientific, 533,\r\n        \"7.\"\r\n        \"7868710555449737726013830089778743921923648060742047411831741235494725073779398266708653300911979110811279\"\r\n        \"6789598336933399534346946062488373144552765624456067652002239833944805785357356753963044941175970027114328\"\r\n        \"6654702139441245876230077656615326677928180046190684631552591868512354678908984878143560509187749624669640\"\r\n        \"4202230644722758976258032174945707667555978894377757102283736479754519302842397683981741034218075435386407\"\r\n        \"9152183393895348787369432047486220172544473101025656482471581961292243778682831134574371390044689178466796\"\r\n        \"875e-208\"},\r\n    {0x1.fffffffffffffp-688, chars_format::scientific, 533,\r\n        \"1.\"\r\n        \"5573742111089947545202766017955748784384729612148409482366348247098945014755879653341730660182395822162255\"\r\n        \"9357919667386679906869389212497674628910553124891213530400447966788961157071471350792608988235194005422865\"\r\n        \"7330940427888249175246015531323065335585636009238136926310518373702470935781796975628712101837549924933928\"\r\n        \"0840446128944551795251606434989141533511195778875551420456747295950903860568479536796348206843615087077281\"\r\n        \"5830436678779069757473886409497244034508894620205131296494316392258448755736566226914874278008937835693359\"\r\n        \"375e-207\"},\r\n    {0x1.fffffffffffffp-687, chars_format::scientific, 532,\r\n        \"3.\"\r\n        \"1147484222179895090405532035911497568769459224296818964732696494197890029511759306683461320364791644324511\"\r\n        \"8715839334773359813738778424995349257821106249782427060800895933577922314142942701585217976470388010845731\"\r\n        \"4661880855776498350492031062646130671171272018476273852621036747404941871563593951257424203675099849867856\"\r\n        \"1680892257889103590503212869978283067022391557751102840913494591901807721136959073592696413687230174154563\"\r\n        \"1660873357558139514947772818994488069017789240410262592988632784516897511473132453829748556017875671386718\"\r\n        \"75e-207\"},\r\n    {0x1.fffffffffffffp-686, chars_format::scientific, 531,\r\n        \"6.\"\r\n        \"2294968444359790180811064071822995137538918448593637929465392988395780059023518613366922640729583288649023\"\r\n        \"7431678669546719627477556849990698515642212499564854121601791867155844628285885403170435952940776021691462\"\r\n        \"9323761711552996700984062125292261342342544036952547705242073494809883743127187902514848407350199699735712\"\r\n        \"3361784515778207181006425739956566134044783115502205681826989183803615442273918147185392827374460348309126\"\r\n        \"3321746715116279029895545637988976138035578480820525185977265569033795022946264907659497112035751342773437\"\r\n        \"5e-207\"},\r\n    {0x1.fffffffffffffp-685, chars_format::scientific, 531,\r\n        \"1.\"\r\n        \"2458993688871958036162212814364599027507783689718727585893078597679156011804703722673384528145916657729804\"\r\n        \"7486335733909343925495511369998139703128442499912970824320358373431168925657177080634087190588155204338292\"\r\n        \"5864752342310599340196812425058452268468508807390509541048414698961976748625437580502969681470039939947142\"\r\n        \"4672356903155641436201285147991313226808956623100441136365397836760723088454783629437078565474892069661825\"\r\n        \"2664349343023255805979109127597795227607115696164105037195453113806759004589252981531899422407150268554687\"\r\n        \"5e-206\"},\r\n    {0x1.fffffffffffffp-684, chars_format::scientific, 530,\r\n        \"2.\"\r\n        \"4917987377743916072324425628729198055015567379437455171786157195358312023609407445346769056291833315459609\"\r\n        \"4972671467818687850991022739996279406256884999825941648640716746862337851314354161268174381176310408676585\"\r\n        \"1729504684621198680393624850116904536937017614781019082096829397923953497250875161005939362940079879894284\"\r\n        \"9344713806311282872402570295982626453617913246200882272730795673521446176909567258874157130949784139323650\"\r\n        \"5328698686046511611958218255195590455214231392328210074390906227613518009178505963063798844814300537109375\"\r\n        \"e-206\"},\r\n    {0x1.fffffffffffffp-683, chars_format::scientific, 529,\r\n        \"4.\"\r\n        \"9835974755487832144648851257458396110031134758874910343572314390716624047218814890693538112583666630919218\"\r\n        \"9945342935637375701982045479992558812513769999651883297281433493724675702628708322536348762352620817353170\"\r\n        \"3459009369242397360787249700233809073874035229562038164193658795847906994501750322011878725880159759788569\"\r\n        \"8689427612622565744805140591965252907235826492401764545461591347042892353819134517748314261899568278647301\"\r\n        \"065739737209302322391643651039118091042846278465642014878181245522703601835701192612759768962860107421875e\"\r\n        \"-206\"},\r\n    {0x1.fffffffffffffp-682, chars_format::scientific, 528,\r\n        \"9.\"\r\n        \"9671949510975664289297702514916792220062269517749820687144628781433248094437629781387076225167333261838437\"\r\n        \"9890685871274751403964090959985117625027539999303766594562866987449351405257416645072697524705241634706340\"\r\n        \"6918018738484794721574499400467618147748070459124076328387317591695813989003500644023757451760319519577139\"\r\n        \"7378855225245131489610281183930505814471652984803529090923182694085784707638269035496628523799136557294602\"\r\n        \"13147947441860464478328730207823618208569255693128402975636249104540720367140238522551953792572021484375e-\"\r\n        \"206\"},\r\n    {0x1.fffffffffffffp-681, chars_format::scientific, 528,\r\n        \"1.\"\r\n        \"9934389902195132857859540502983358444012453903549964137428925756286649618887525956277415245033466652367687\"\r\n        \"5978137174254950280792818191997023525005507999860753318912573397489870281051483329014539504941048326941268\"\r\n        \"1383603747696958944314899880093523629549614091824815265677463518339162797800700128804751490352063903915427\"\r\n        \"9475771045049026297922056236786101162894330596960705818184636538817156941527653807099325704759827311458920\"\r\n        \"42629589488372092895665746041564723641713851138625680595127249820908144073428047704510390758514404296875e-\"\r\n        \"205\"},\r\n    {0x1.fffffffffffffp-680, chars_format::scientific, 527,\r\n        \"3.\"\r\n        \"9868779804390265715719081005966716888024907807099928274857851512573299237775051912554830490066933304735375\"\r\n        \"1956274348509900561585636383994047050011015999721506637825146794979740562102966658029079009882096653882536\"\r\n        \"2767207495393917888629799760187047259099228183649630531354927036678325595601400257609502980704127807830855\"\r\n        \"8951542090098052595844112473572202325788661193921411636369273077634313883055307614198651409519654622917840\"\r\n        \"8525917897674418579133149208312944728342770227725136119025449964181628814685609540902078151702880859375e-\"\r\n        \"205\"},\r\n    {0x1.fffffffffffffp-679, chars_format::scientific, 526,\r\n        \"7.\"\r\n        \"9737559608780531431438162011933433776049815614199856549715703025146598475550103825109660980133866609470750\"\r\n        \"3912548697019801123171272767988094100022031999443013275650293589959481124205933316058158019764193307765072\"\r\n        \"5534414990787835777259599520374094518198456367299261062709854073356651191202800515219005961408255615661711\"\r\n        \"7903084180196105191688224947144404651577322387842823272738546155268627766110615228397302819039309245835681\"\r\n        \"705183579534883715826629841662588945668554045545027223805089992836325762937121908180415630340576171875e-\"\r\n        \"205\"},\r\n    {0x1.fffffffffffffp-678, chars_format::scientific, 526,\r\n        \"1.\"\r\n        \"5947511921756106286287632402386686755209963122839971309943140605029319695110020765021932196026773321894150\"\r\n        \"0782509739403960224634254553597618820004406399888602655130058717991896224841186663211631603952838661553014\"\r\n        \"5106882998157567155451919904074818903639691273459852212541970814671330238240560103043801192281651123132342\"\r\n        \"3580616836039221038337644989428880930315464477568564654547709231053725553222123045679460563807861849167136\"\r\n        \"341036715906976743165325968332517789133710809109005444761017998567265152587424381636083126068115234375e-\"\r\n        \"204\"},\r\n    {0x1.fffffffffffffp-677, chars_format::scientific, 525,\r\n        \"3.\"\r\n        \"1895023843512212572575264804773373510419926245679942619886281210058639390220041530043864392053546643788300\"\r\n        \"1565019478807920449268509107195237640008812799777205310260117435983792449682373326423263207905677323106029\"\r\n        \"0213765996315134310903839808149637807279382546919704425083941629342660476481120206087602384563302246264684\"\r\n        \"7161233672078442076675289978857761860630928955137129309095418462107451106444246091358921127615723698334272\"\r\n        \"68207343181395348633065193666503557826742161821801088952203599713453030517484876327216625213623046875e-\"\r\n        \"204\"},\r\n    {0x1.fffffffffffffp-676, chars_format::scientific, 524,\r\n        \"6.\"\r\n        \"3790047687024425145150529609546747020839852491359885239772562420117278780440083060087728784107093287576600\"\r\n        \"3130038957615840898537018214390475280017625599554410620520234871967584899364746652846526415811354646212058\"\r\n        \"0427531992630268621807679616299275614558765093839408850167883258685320952962240412175204769126604492529369\"\r\n        \"4322467344156884153350579957715523721261857910274258618190836924214902212888492182717842255231447396668545\"\r\n        \"3641468636279069726613038733300711565348432364360217790440719942690606103496975265443325042724609375e-\"\r\n        \"204\"},\r\n    {0x1.fffffffffffffp-675, chars_format::scientific, 524,\r\n        \"1.\"\r\n        \"2758009537404885029030105921909349404167970498271977047954512484023455756088016612017545756821418657515320\"\r\n        \"0626007791523168179707403642878095056003525119910882124104046974393516979872949330569305283162270929242411\"\r\n        \"6085506398526053724361535923259855122911753018767881770033576651737064190592448082435040953825320898505873\"\r\n        \"8864493468831376830670115991543104744252371582054851723638167384842980442577698436543568451046289479333709\"\r\n        \"0728293727255813945322607746660142313069686472872043558088143988538121220699395053088665008544921875e-\"\r\n        \"203\"},\r\n    {0x1.fffffffffffffp-674, chars_format::scientific, 523,\r\n        \"2.\"\r\n        \"5516019074809770058060211843818698808335940996543954095909024968046911512176033224035091513642837315030640\"\r\n        \"1252015583046336359414807285756190112007050239821764248208093948787033959745898661138610566324541858484823\"\r\n        \"2171012797052107448723071846519710245823506037535763540067153303474128381184896164870081907650641797011747\"\r\n        \"7728986937662753661340231983086209488504743164109703447276334769685960885155396873087136902092578958667418\"\r\n        \"145658745451162789064521549332028462613937294574408711617628797707624244139879010617733001708984375e-203\"},\r\n    {0x1.fffffffffffffp-673, chars_format::scientific, 522,\r\n        \"5.\"\r\n        \"1032038149619540116120423687637397616671881993087908191818049936093823024352066448070183027285674630061280\"\r\n        \"2504031166092672718829614571512380224014100479643528496416187897574067919491797322277221132649083716969646\"\r\n        \"4342025594104214897446143693039420491647012075071527080134306606948256762369792329740163815301283594023495\"\r\n        \"5457973875325507322680463966172418977009486328219406894552669539371921770310793746174273804185157917334836\"\r\n        \"29131749090232557812904309866405692522787458914881742323525759541524848827975802123546600341796875e-203\"},\r\n    {0x1.fffffffffffffp-672, chars_format::scientific, 522,\r\n        \"1.\"\r\n        \"0206407629923908023224084737527479523334376398617581638363609987218764604870413289614036605457134926012256\"\r\n        \"0500806233218534543765922914302476044802820095928705699283237579514813583898359464455444226529816743393929\"\r\n        \"2868405118820842979489228738607884098329402415014305416026861321389651352473958465948032763060256718804699\"\r\n        \"1091594775065101464536092793234483795401897265643881378910533907874384354062158749234854760837031583466967\"\r\n        \"25826349818046511562580861973281138504557491782976348464705151908304969765595160424709320068359375e-202\"},\r\n    {0x1.fffffffffffffp-671, chars_format::scientific, 521,\r\n        \"2.\"\r\n        \"0412815259847816046448169475054959046668752797235163276727219974437529209740826579228073210914269852024512\"\r\n        \"1001612466437069087531845828604952089605640191857411398566475159029627167796718928910888453059633486787858\"\r\n        \"5736810237641685958978457477215768196658804830028610832053722642779302704947916931896065526120513437609398\"\r\n        \"2183189550130202929072185586468967590803794531287762757821067815748768708124317498469709521674063166933934\"\r\n        \"5165269963609302312516172394656227700911498356595269692941030381660993953119032084941864013671875e-202\"},\r\n    {0x1.fffffffffffffp-670, chars_format::scientific, 520,\r\n        \"4.\"\r\n        \"0825630519695632092896338950109918093337505594470326553454439948875058419481653158456146421828539704049024\"\r\n        \"2003224932874138175063691657209904179211280383714822797132950318059254335593437857821776906119266973575717\"\r\n        \"1473620475283371917956914954431536393317609660057221664107445285558605409895833863792131052241026875218796\"\r\n        \"4366379100260405858144371172937935181607589062575525515642135631497537416248634996939419043348126333867869\"\r\n        \"033053992721860462503234478931245540182299671319053938588206076332198790623806416988372802734375e-202\"},\r\n    {0x1.fffffffffffffp-669, chars_format::scientific, 519,\r\n        \"8.\"\r\n        \"1651261039391264185792677900219836186675011188940653106908879897750116838963306316912292843657079408098048\"\r\n        \"4006449865748276350127383314419808358422560767429645594265900636118508671186875715643553812238533947151434\"\r\n        \"2947240950566743835913829908863072786635219320114443328214890571117210819791667727584262104482053750437592\"\r\n        \"8732758200520811716288742345875870363215178125151051031284271262995074832497269993878838086696252667735738\"\r\n        \"06610798544372092500646895786249108036459934263810787717641215266439758124761283397674560546875e-202\"},\r\n    {0x1.fffffffffffffp-668, chars_format::scientific, 519,\r\n        \"1.\"\r\n        \"6330252207878252837158535580043967237335002237788130621381775979550023367792661263382458568731415881619609\"\r\n        \"6801289973149655270025476662883961671684512153485929118853180127223701734237375143128710762447706789430286\"\r\n        \"8589448190113348767182765981772614557327043864022888665642978114223442163958333545516852420896410750087518\"\r\n        \"5746551640104162343257748469175174072643035625030210206256854252599014966499453998775767617339250533547147\"\r\n        \"61322159708874418500129379157249821607291986852762157543528243053287951624952256679534912109375e-201\"},\r\n    {0x1.fffffffffffffp-667, chars_format::scientific, 518,\r\n        \"3.\"\r\n        \"2660504415756505674317071160087934474670004475576261242763551959100046735585322526764917137462831763239219\"\r\n        \"3602579946299310540050953325767923343369024306971858237706360254447403468474750286257421524895413578860573\"\r\n        \"7178896380226697534365531963545229114654087728045777331285956228446884327916667091033704841792821500175037\"\r\n        \"1493103280208324686515496938350348145286071250060420412513708505198029932998907997551535234678501067094295\"\r\n        \"2264431941774883700025875831449964321458397370552431508705648610657590324990451335906982421875e-201\"},\r\n    {0x1.fffffffffffffp-666, chars_format::scientific, 517,\r\n        \"6.\"\r\n        \"5321008831513011348634142320175868949340008951152522485527103918200093471170645053529834274925663526478438\"\r\n        \"7205159892598621080101906651535846686738048613943716475412720508894806936949500572514843049790827157721147\"\r\n        \"4357792760453395068731063927090458229308175456091554662571912456893768655833334182067409683585643000350074\"\r\n        \"2986206560416649373030993876700696290572142500120840825027417010396059865997815995103070469357002134188590\"\r\n        \"452886388354976740005175166289992864291679474110486301741129722131518064998090267181396484375e-201\"},\r\n    {0x1.fffffffffffffp-665, chars_format::scientific, 517,\r\n        \"1.\"\r\n        \"3064201766302602269726828464035173789868001790230504497105420783640018694234129010705966854985132705295687\"\r\n        \"7441031978519724216020381330307169337347609722788743295082544101778961387389900114502968609958165431544229\"\r\n        \"4871558552090679013746212785418091645861635091218310932514382491378753731166666836413481936717128600070014\"\r\n        \"8597241312083329874606198775340139258114428500024168165005483402079211973199563199020614093871400426837718\"\r\n        \"090577277670995348001035033257998572858335894822097260348225944426303612999618053436279296875e-200\"},\r\n    {0x1.fffffffffffffp-664, chars_format::scientific, 516,\r\n        \"2.\"\r\n        \"6128403532605204539453656928070347579736003580461008994210841567280037388468258021411933709970265410591375\"\r\n        \"4882063957039448432040762660614338674695219445577486590165088203557922774779800229005937219916330863088458\"\r\n        \"9743117104181358027492425570836183291723270182436621865028764982757507462333333672826963873434257200140029\"\r\n        \"7194482624166659749212397550680278516228857000048336330010966804158423946399126398041228187742800853675436\"\r\n        \"18115455534199069600207006651599714571667178964419452069645188885260722599923610687255859375e-200\"},\r\n    {0x1.fffffffffffffp-663, chars_format::scientific, 515,\r\n        \"5.\"\r\n        \"2256807065210409078907313856140695159472007160922017988421683134560074776936516042823867419940530821182750\"\r\n        \"9764127914078896864081525321228677349390438891154973180330176407115845549559600458011874439832661726176917\"\r\n        \"9486234208362716054984851141672366583446540364873243730057529965515014924666667345653927746868514400280059\"\r\n        \"4388965248333319498424795101360557032457714000096672660021933608316847892798252796082456375485601707350872\"\r\n        \"3623091106839813920041401330319942914333435792883890413929037777052144519984722137451171875e-200\"},\r\n    {0x1.fffffffffffffp-662, chars_format::scientific, 515,\r\n        \"1.\"\r\n        \"0451361413042081815781462771228139031894401432184403597684336626912014955387303208564773483988106164236550\"\r\n        \"1952825582815779372816305064245735469878087778230994636066035281423169109911920091602374887966532345235383\"\r\n        \"5897246841672543210996970228334473316689308072974648746011505993103002984933333469130785549373702880056011\"\r\n        \"8877793049666663899684959020272111406491542800019334532004386721663369578559650559216491275097120341470174\"\r\n        \"4724618221367962784008280266063988582866687158576778082785807555410428903996944427490234375e-199\"},\r\n    {0x1.fffffffffffffp-661, chars_format::scientific, 514,\r\n        \"2.\"\r\n        \"0902722826084163631562925542456278063788802864368807195368673253824029910774606417129546967976212328473100\"\r\n        \"3905651165631558745632610128491470939756175556461989272132070562846338219823840183204749775933064690470767\"\r\n        \"1794493683345086421993940456668946633378616145949297492023011986206005969866666938261571098747405760112023\"\r\n        \"7755586099333327799369918040544222812983085600038669064008773443326739157119301118432982550194240682940348\"\r\n        \"944923644273592556801656053212797716573337431715355616557161511082085780799388885498046875e-199\"},\r\n    {0x1.fffffffffffffp-660, chars_format::scientific, 513,\r\n        \"4.\"\r\n        \"1805445652168327263125851084912556127577605728737614390737346507648059821549212834259093935952424656946200\"\r\n        \"7811302331263117491265220256982941879512351112923978544264141125692676439647680366409499551866129380941534\"\r\n        \"3588987366690172843987880913337893266757232291898594984046023972412011939733333876523142197494811520224047\"\r\n        \"5511172198666655598739836081088445625966171200077338128017546886653478314238602236865965100388481365880697\"\r\n        \"88984728854718511360331210642559543314667486343071123311432302216417156159877777099609375e-199\"},\r\n    {0x1.fffffffffffffp-659, chars_format::scientific, 512,\r\n        \"8.\"\r\n        \"3610891304336654526251702169825112255155211457475228781474693015296119643098425668518187871904849313892401\"\r\n        \"5622604662526234982530440513965883759024702225847957088528282251385352879295360732818999103732258761883068\"\r\n        \"7177974733380345687975761826675786533514464583797189968092047944824023879466667753046284394989623040448095\"\r\n        \"1022344397333311197479672162176891251932342400154676256035093773306956628477204473731930200776962731761395\"\r\n        \"7796945770943702272066242128511908662933497268614224662286460443283431231975555419921875e-199\"},\r\n    {0x1.fffffffffffffp-658, chars_format::scientific, 512,\r\n        \"1.\"\r\n        \"6722178260867330905250340433965022451031042291495045756294938603059223928619685133703637574380969862778480\"\r\n        \"3124520932505246996506088102793176751804940445169591417705656450277070575859072146563799820746451752376613\"\r\n        \"7435594946676069137595152365335157306702892916759437993618409588964804775893333550609256878997924608089619\"\r\n        \"0204468879466662239495934432435378250386468480030935251207018754661391325695440894746386040155392546352279\"\r\n        \"1559389154188740454413248425702381732586699453722844932457292088656686246395111083984375e-198\"},\r\n    {0x1.fffffffffffffp-657, chars_format::scientific, 511,\r\n        \"3.\"\r\n        \"3444356521734661810500680867930044902062084582990091512589877206118447857239370267407275148761939725556960\"\r\n        \"6249041865010493993012176205586353503609880890339182835411312900554141151718144293127599641492903504753227\"\r\n        \"4871189893352138275190304730670314613405785833518875987236819177929609551786667101218513757995849216179238\"\r\n        \"0408937758933324478991868864870756500772936960061870502414037509322782651390881789492772080310785092704558\"\r\n        \"311877830837748090882649685140476346517339890744568986491458417731337249279022216796875e-198\"},\r\n    {0x1.fffffffffffffp-656, chars_format::scientific, 510,\r\n        \"6.\"\r\n        \"6888713043469323621001361735860089804124169165980183025179754412236895714478740534814550297523879451113921\"\r\n        \"2498083730020987986024352411172707007219761780678365670822625801108282303436288586255199282985807009506454\"\r\n        \"9742379786704276550380609461340629226811571667037751974473638355859219103573334202437027515991698432358476\"\r\n        \"0817875517866648957983737729741513001545873920123741004828075018645565302781763578985544160621570185409116\"\r\n        \"62375566167549618176529937028095269303467978148913797298291683546267449855804443359375e-198\"},\r\n    {0x1.fffffffffffffp-655, chars_format::scientific, 510,\r\n        \"1.\"\r\n        \"3377742608693864724200272347172017960824833833196036605035950882447379142895748106962910059504775890222784\"\r\n        \"2499616746004197597204870482234541401443952356135673134164525160221656460687257717251039856597161401901290\"\r\n        \"9948475957340855310076121892268125845362314333407550394894727671171843820714666840487405503198339686471695\"\r\n        \"2163575103573329791596747545948302600309174784024748200965615003729113060556352715797108832124314037081823\"\r\n        \"32475113233509923635305987405619053860693595629782759459658336709253489971160888671875e-197\"},\r\n    {0x1.fffffffffffffp-654, chars_format::scientific, 509,\r\n        \"2.\"\r\n        \"6755485217387729448400544694344035921649667666392073210071901764894758285791496213925820119009551780445568\"\r\n        \"4999233492008395194409740964469082802887904712271346268329050320443312921374515434502079713194322803802581\"\r\n        \"9896951914681710620152243784536251690724628666815100789789455342343687641429333680974811006396679372943390\"\r\n        \"4327150207146659583193495091896605200618349568049496401931230007458226121112705431594217664248628074163646\"\r\n        \"6495022646701984727061197481123810772138719125956551891931667341850697994232177734375e-197\"},\r\n    {0x1.fffffffffffffp-653, chars_format::scientific, 508,\r\n        \"5.\"\r\n        \"3510970434775458896801089388688071843299335332784146420143803529789516571582992427851640238019103560891136\"\r\n        \"9998466984016790388819481928938165605775809424542692536658100640886625842749030869004159426388645607605163\"\r\n        \"9793903829363421240304487569072503381449257333630201579578910684687375282858667361949622012793358745886780\"\r\n        \"8654300414293319166386990183793210401236699136098992803862460014916452242225410863188435328497256148327293\"\r\n        \"299004529340396945412239496224762154427743825191310378386333468370139598846435546875e-197\"},\r\n    {0x1.fffffffffffffp-652, chars_format::scientific, 508,\r\n        \"1.\"\r\n        \"0702194086955091779360217877737614368659867066556829284028760705957903314316598485570328047603820712178227\"\r\n        \"3999693396803358077763896385787633121155161884908538507331620128177325168549806173800831885277729121521032\"\r\n        \"7958780765872684248060897513814500676289851466726040315915782136937475056571733472389924402558671749177356\"\r\n        \"1730860082858663833277398036758642080247339827219798560772492002983290448445082172637687065699451229665458\"\r\n        \"659800905868079389082447899244952430885548765038262075677266693674027919769287109375e-196\"},\r\n    {0x1.fffffffffffffp-651, chars_format::scientific, 507,\r\n        \"2.\"\r\n        \"1404388173910183558720435755475228737319734133113658568057521411915806628633196971140656095207641424356454\"\r\n        \"7999386793606716155527792771575266242310323769817077014663240256354650337099612347601663770555458243042065\"\r\n        \"5917561531745368496121795027629001352579702933452080631831564273874950113143466944779848805117343498354712\"\r\n        \"3461720165717327666554796073517284160494679654439597121544984005966580896890164345275374131398902459330917\"\r\n        \"31960181173615877816489579848990486177109753007652415135453338734805583953857421875e-196\"},\r\n    {0x1.fffffffffffffp-650, chars_format::scientific, 506,\r\n        \"4.\"\r\n        \"2808776347820367117440871510950457474639468266227317136115042823831613257266393942281312190415282848712909\"\r\n        \"5998773587213432311055585543150532484620647539634154029326480512709300674199224695203327541110916486084131\"\r\n        \"1835123063490736992243590055258002705159405866904161263663128547749900226286933889559697610234686996709424\"\r\n        \"6923440331434655333109592147034568320989359308879194243089968011933161793780328690550748262797804918661834\"\r\n        \"6392036234723175563297915969798097235421950601530483027090667746961116790771484375e-196\"},\r\n    {0x1.fffffffffffffp-649, chars_format::scientific, 505,\r\n        \"8.\"\r\n        \"5617552695640734234881743021900914949278936532454634272230085647663226514532787884562624380830565697425819\"\r\n        \"1997547174426864622111171086301064969241295079268308058652961025418601348398449390406655082221832972168262\"\r\n        \"3670246126981473984487180110516005410318811733808322527326257095499800452573867779119395220469373993418849\"\r\n        \"3846880662869310666219184294069136641978718617758388486179936023866323587560657381101496525595609837323669\"\r\n        \"278407246944635112659583193959619447084390120306096605418133549392223358154296875e-196\"},\r\n    {0x1.fffffffffffffp-648, chars_format::scientific, 505,\r\n        \"1.\"\r\n        \"7123510539128146846976348604380182989855787306490926854446017129532645302906557576912524876166113139485163\"\r\n        \"8399509434885372924422234217260212993848259015853661611730592205083720269679689878081331016444366594433652\"\r\n        \"4734049225396294796897436022103201082063762346761664505465251419099960090514773555823879044093874798683769\"\r\n        \"8769376132573862133243836858813827328395743723551677697235987204773264717512131476220299305119121967464733\"\r\n        \"855681449388927022531916638791923889416878024061219321083626709878444671630859375e-195\"},\r\n    {0x1.fffffffffffffp-647, chars_format::scientific, 504,\r\n        \"3.\"\r\n        \"4247021078256293693952697208760365979711574612981853708892034259065290605813115153825049752332226278970327\"\r\n        \"6799018869770745848844468434520425987696518031707323223461184410167440539359379756162662032888733188867304\"\r\n        \"9468098450792589593794872044206402164127524693523329010930502838199920181029547111647758088187749597367539\"\r\n        \"7538752265147724266487673717627654656791487447103355394471974409546529435024262952440598610238243934929467\"\r\n        \"71136289877785404506383327758384777883375604812243864216725341975688934326171875e-195\"},\r\n    {0x1.fffffffffffffp-646, chars_format::scientific, 503,\r\n        \"6.\"\r\n        \"8494042156512587387905394417520731959423149225963707417784068518130581211626230307650099504664452557940655\"\r\n        \"3598037739541491697688936869040851975393036063414646446922368820334881078718759512325324065777466377734609\"\r\n        \"8936196901585179187589744088412804328255049387046658021861005676399840362059094223295516176375499194735079\"\r\n        \"5077504530295448532975347435255309313582974894206710788943948819093058870048525904881197220476487869858935\"\r\n        \"4227257975557080901276665551676955576675120962448772843345068395137786865234375e-195\"},\r\n    {0x1.fffffffffffffp-645, chars_format::scientific, 503,\r\n        \"1.\"\r\n        \"3698808431302517477581078883504146391884629845192741483556813703626116242325246061530019900932890511588131\"\r\n        \"0719607547908298339537787373808170395078607212682929289384473764066976215743751902465064813155493275546921\"\r\n        \"9787239380317035837517948817682560865651009877409331604372201135279968072411818844659103235275099838947015\"\r\n        \"9015500906059089706595069487051061862716594978841342157788789763818611774009705180976239444095297573971787\"\r\n        \"0845451595111416180255333110335391115335024192489754568669013679027557373046875e-194\"},\r\n    {0x1.fffffffffffffp-644, chars_format::scientific, 502,\r\n        \"2.\"\r\n        \"7397616862605034955162157767008292783769259690385482967113627407252232484650492123060039801865781023176262\"\r\n        \"1439215095816596679075574747616340790157214425365858578768947528133952431487503804930129626310986551093843\"\r\n        \"9574478760634071675035897635365121731302019754818663208744402270559936144823637689318206470550199677894031\"\r\n        \"8031001812118179413190138974102123725433189957682684315577579527637223548019410361952478888190595147943574\"\r\n        \"169090319022283236051066622067078223067004838497950913733802735805511474609375e-194\"},\r\n    {0x1.fffffffffffffp-643, chars_format::scientific, 501,\r\n        \"5.\"\r\n        \"4795233725210069910324315534016585567538519380770965934227254814504464969300984246120079603731562046352524\"\r\n        \"2878430191633193358151149495232681580314428850731717157537895056267904862975007609860259252621973102187687\"\r\n        \"9148957521268143350071795270730243462604039509637326417488804541119872289647275378636412941100399355788063\"\r\n        \"6062003624236358826380277948204247450866379915365368631155159055274447096038820723904957776381190295887148\"\r\n        \"33818063804456647210213324413415644613400967699590182746760547161102294921875e-194\"},\r\n    {0x1.fffffffffffffp-642, chars_format::scientific, 501,\r\n        \"1.\"\r\n        \"0959046745042013982064863106803317113507703876154193186845450962900892993860196849224015920746312409270504\"\r\n        \"8575686038326638671630229899046536316062885770146343431507579011253580972595001521972051850524394620437537\"\r\n        \"5829791504253628670014359054146048692520807901927465283497760908223974457929455075727282588220079871157612\"\r\n        \"7212400724847271765276055589640849490173275983073073726231031811054889419207764144780991555276238059177429\"\r\n        \"66763612760891329442042664882683128922680193539918036549352109432220458984375e-193\"},\r\n    {0x1.fffffffffffffp-641, chars_format::scientific, 500,\r\n        \"2.\"\r\n        \"1918093490084027964129726213606634227015407752308386373690901925801785987720393698448031841492624818541009\"\r\n        \"7151372076653277343260459798093072632125771540292686863015158022507161945190003043944103701048789240875075\"\r\n        \"1659583008507257340028718108292097385041615803854930566995521816447948915858910151454565176440159742315225\"\r\n        \"4424801449694543530552111179281698980346551966146147452462063622109778838415528289561983110552476118354859\"\r\n        \"3352722552178265888408532976536625784536038707983607309870421886444091796875e-193\"},\r\n    {0x1.fffffffffffffp-640, chars_format::scientific, 499,\r\n        \"4.\"\r\n        \"3836186980168055928259452427213268454030815504616772747381803851603571975440787396896063682985249637082019\"\r\n        \"4302744153306554686520919596186145264251543080585373726030316045014323890380006087888207402097578481750150\"\r\n        \"3319166017014514680057436216584194770083231607709861133991043632895897831717820302909130352880319484630450\"\r\n        \"8849602899389087061104222358563397960693103932292294904924127244219557676831056579123966221104952236709718\"\r\n        \"670544510435653177681706595307325156907207741596721461974084377288818359375e-193\"},\r\n    {0x1.fffffffffffffp-639, chars_format::scientific, 498,\r\n        \"8.\"\r\n        \"7672373960336111856518904854426536908061631009233545494763607703207143950881574793792127365970499274164038\"\r\n        \"8605488306613109373041839192372290528503086161170747452060632090028647780760012175776414804195156963500300\"\r\n        \"6638332034029029360114872433168389540166463215419722267982087265791795663435640605818260705760638969260901\"\r\n        \"7699205798778174122208444717126795921386207864584589809848254488439115353662113158247932442209904473419437\"\r\n        \"34108902087130635536341319061465031381441548319344292394816875457763671875e-193\"},\r\n    {0x1.fffffffffffffp-638, chars_format::scientific, 498,\r\n        \"1.\"\r\n        \"7534474792067222371303780970885307381612326201846709098952721540641428790176314958758425473194099854832807\"\r\n        \"7721097661322621874608367838474458105700617232234149490412126418005729556152002435155282960839031392700060\"\r\n        \"1327666406805805872022974486633677908033292643083944453596417453158359132687128121163652141152127793852180\"\r\n        \"3539841159755634824441688943425359184277241572916917961969650897687823070732422631649586488441980894683887\"\r\n        \"46821780417426127107268263812293006276288309663868858478963375091552734375e-192\"},\r\n    {0x1.fffffffffffffp-637, chars_format::scientific, 497,\r\n        \"3.\"\r\n        \"5068949584134444742607561941770614763224652403693418197905443081282857580352629917516850946388199709665615\"\r\n        \"5442195322645243749216735676948916211401234464468298980824252836011459112304004870310565921678062785400120\"\r\n        \"2655332813611611744045948973267355816066585286167888907192834906316718265374256242327304282304255587704360\"\r\n        \"7079682319511269648883377886850718368554483145833835923939301795375646141464845263299172976883961789367774\"\r\n        \"9364356083485225421453652762458601255257661932773771695792675018310546875e-192\"},\r\n    {0x1.fffffffffffffp-636, chars_format::scientific, 496,\r\n        \"7.\"\r\n        \"0137899168268889485215123883541229526449304807386836395810886162565715160705259835033701892776399419331231\"\r\n        \"0884390645290487498433471353897832422802468928936597961648505672022918224608009740621131843356125570800240\"\r\n        \"5310665627223223488091897946534711632133170572335777814385669812633436530748512484654608564608511175408721\"\r\n        \"4159364639022539297766755773701436737108966291667671847878603590751292282929690526598345953767923578735549\"\r\n        \"872871216697045084290730552491720251051532386554754339158535003662109375e-192\"},\r\n    {0x1.fffffffffffffp-635, chars_format::scientific, 496,\r\n        \"1.\"\r\n        \"4027579833653777897043024776708245905289860961477367279162177232513143032141051967006740378555279883866246\"\r\n        \"2176878129058097499686694270779566484560493785787319592329701134404583644921601948124226368671225114160048\"\r\n        \"1062133125444644697618379589306942326426634114467155562877133962526687306149702496930921712921702235081744\"\r\n        \"2831872927804507859553351154740287347421793258333534369575720718150258456585938105319669190753584715747109\"\r\n        \"974574243339409016858146110498344050210306477310950867831707000732421875e-191\"},\r\n    {0x1.fffffffffffffp-634, chars_format::scientific, 495,\r\n        \"2.\"\r\n        \"8055159667307555794086049553416491810579721922954734558324354465026286064282103934013480757110559767732492\"\r\n        \"4353756258116194999373388541559132969120987571574639184659402268809167289843203896248452737342450228320096\"\r\n        \"2124266250889289395236759178613884652853268228934311125754267925053374612299404993861843425843404470163488\"\r\n        \"5663745855609015719106702309480574694843586516667068739151441436300516913171876210639338381507169431494219\"\r\n        \"94914848667881803371629222099668810042061295462190173566341400146484375e-191\"},\r\n    {0x1.fffffffffffffp-633, chars_format::scientific, 494,\r\n        \"5.\"\r\n        \"6110319334615111588172099106832983621159443845909469116648708930052572128564207868026961514221119535464984\"\r\n        \"8707512516232389998746777083118265938241975143149278369318804537618334579686407792496905474684900456640192\"\r\n        \"4248532501778578790473518357227769305706536457868622251508535850106749224598809987723686851686808940326977\"\r\n        \"1327491711218031438213404618961149389687173033334137478302882872601033826343752421278676763014338862988439\"\r\n        \"8982969733576360674325844419933762008412259092438034713268280029296875e-191\"},\r\n    {0x1.fffffffffffffp-632, chars_format::scientific, 494,\r\n        \"1.\"\r\n        \"1222063866923022317634419821366596724231888769181893823329741786010514425712841573605392302844223907092996\"\r\n        \"9741502503246477999749355416623653187648395028629855673863760907523666915937281558499381094936980091328038\"\r\n        \"4849706500355715758094703671445553861141307291573724450301707170021349844919761997544737370337361788065395\"\r\n        \"4265498342243606287642680923792229877937434606666827495660576574520206765268750484255735352602867772597687\"\r\n        \"9796593946715272134865168883986752401682451818487606942653656005859375e-190\"},\r\n    {0x1.fffffffffffffp-631, chars_format::scientific, 493,\r\n        \"2.\"\r\n        \"2444127733846044635268839642733193448463777538363787646659483572021028851425683147210784605688447814185993\"\r\n        \"9483005006492955999498710833247306375296790057259711347727521815047333831874563116998762189873960182656076\"\r\n        \"9699413000711431516189407342891107722282614583147448900603414340042699689839523995089474740674723576130790\"\r\n        \"8530996684487212575285361847584459755874869213333654991321153149040413530537500968511470705205735545195375\"\r\n        \"959318789343054426973033776797350480336490363697521388530731201171875e-190\"},\r\n    {0x1.fffffffffffffp-630, chars_format::scientific, 492,\r\n        \"4.\"\r\n        \"4888255467692089270537679285466386896927555076727575293318967144042057702851366294421569211376895628371987\"\r\n        \"8966010012985911998997421666494612750593580114519422695455043630094667663749126233997524379747920365312153\"\r\n        \"9398826001422863032378814685782215444565229166294897801206828680085399379679047990178949481349447152261581\"\r\n        \"7061993368974425150570723695168919511749738426667309982642306298080827061075001937022941410411471090390751\"\r\n        \"91863757868610885394606755359470096067298072739504277706146240234375e-190\"},\r\n    {0x1.fffffffffffffp-629, chars_format::scientific, 491,\r\n        \"8.\"\r\n        \"9776510935384178541075358570932773793855110153455150586637934288084115405702732588843138422753791256743975\"\r\n        \"7932020025971823997994843332989225501187160229038845390910087260189335327498252467995048759495840730624307\"\r\n        \"8797652002845726064757629371564430889130458332589795602413657360170798759358095980357898962698894304523163\"\r\n        \"4123986737948850301141447390337839023499476853334619965284612596161654122150003874045882820822942180781503\"\r\n        \"8372751573722177078921351071894019213459614547900855541229248046875e-190\"},\r\n    {0x1.fffffffffffffp-628, chars_format::scientific, 491,\r\n        \"1.\"\r\n        \"7955302187076835708215071714186554758771022030691030117327586857616823081140546517768627684550758251348795\"\r\n        \"1586404005194364799598968666597845100237432045807769078182017452037867065499650493599009751899168146124861\"\r\n        \"5759530400569145212951525874312886177826091666517959120482731472034159751871619196071579792539778860904632\"\r\n        \"6824797347589770060228289478067567804699895370666923993056922519232330824430000774809176564164588436156300\"\r\n        \"7674550314744435415784270214378803842691922909580171108245849609375e-189\"},\r\n    {0x1.fffffffffffffp-627, chars_format::scientific, 490,\r\n        \"3.\"\r\n        \"5910604374153671416430143428373109517542044061382060234655173715233646162281093035537255369101516502697590\"\r\n        \"3172808010388729599197937333195690200474864091615538156364034904075734130999300987198019503798336292249723\"\r\n        \"1519060801138290425903051748625772355652183333035918240965462944068319503743238392143159585079557721809265\"\r\n        \"3649594695179540120456578956135135609399790741333847986113845038464661648860001549618353128329176872312601\"\r\n        \"534910062948887083156854042875760768538384581916034221649169921875e-189\"},\r\n    {0x1.fffffffffffffp-626, chars_format::scientific, 489,\r\n        \"7.\"\r\n        \"1821208748307342832860286856746219035084088122764120469310347430467292324562186071074510738203033005395180\"\r\n        \"6345616020777459198395874666391380400949728183231076312728069808151468261998601974396039007596672584499446\"\r\n        \"3038121602276580851806103497251544711304366666071836481930925888136639007486476784286319170159115443618530\"\r\n        \"7299189390359080240913157912270271218799581482667695972227690076929323297720003099236706256658353744625203\"\r\n        \"06982012589777416631370808575152153707676916383206844329833984375e-189\"},\r\n    {0x1.fffffffffffffp-625, chars_format::scientific, 489,\r\n        \"1.\"\r\n        \"4364241749661468566572057371349243807016817624552824093862069486093458464912437214214902147640606601079036\"\r\n        \"1269123204155491839679174933278276080189945636646215262545613961630293652399720394879207801519334516899889\"\r\n        \"2607624320455316170361220699450308942260873333214367296386185177627327801497295356857263834031823088723706\"\r\n        \"1459837878071816048182631582454054243759916296533539194445538015385864659544000619847341251331670748925040\"\r\n        \"61396402517955483326274161715030430741535383276641368865966796875e-188\"},\r\n    {0x1.fffffffffffffp-624, chars_format::scientific, 488,\r\n        \"2.\"\r\n        \"8728483499322937133144114742698487614033635249105648187724138972186916929824874428429804295281213202158072\"\r\n        \"2538246408310983679358349866556552160379891273292430525091227923260587304799440789758415603038669033799778\"\r\n        \"5215248640910632340722441398900617884521746666428734592772370355254655602994590713714527668063646177447412\"\r\n        \"2919675756143632096365263164908108487519832593067078388891076030771729319088001239694682502663341497850081\"\r\n        \"2279280503591096665254832343006086148307076655328273773193359375e-188\"},\r\n    {0x1.fffffffffffffp-623, chars_format::scientific, 487,\r\n        \"5.\"\r\n        \"7456966998645874266288229485396975228067270498211296375448277944373833859649748856859608590562426404316144\"\r\n        \"5076492816621967358716699733113104320759782546584861050182455846521174609598881579516831206077338067599557\"\r\n        \"0430497281821264681444882797801235769043493332857469185544740710509311205989181427429055336127292354894824\"\r\n        \"5839351512287264192730526329816216975039665186134156777782152061543458638176002479389365005326682995700162\"\r\n        \"455856100718219333050966468601217229661415331065654754638671875e-188\"},\r\n    {0x1.fffffffffffffp-622, chars_format::scientific, 487,\r\n        \"1.\"\r\n        \"1491393399729174853257645897079395045613454099642259275089655588874766771929949771371921718112485280863228\"\r\n        \"9015298563324393471743339946622620864151956509316972210036491169304234921919776315903366241215467613519911\"\r\n        \"4086099456364252936288976559560247153808698666571493837108948142101862241197836285485811067225458470978964\"\r\n        \"9167870302457452838546105265963243395007933037226831355556430412308691727635200495877873001065336599140032\"\r\n        \"491171220143643866610193293720243445932283066213130950927734375e-187\"},\r\n    {0x1.fffffffffffffp-621, chars_format::scientific, 486,\r\n        \"2.\"\r\n        \"2982786799458349706515291794158790091226908199284518550179311177749533543859899542743843436224970561726457\"\r\n        \"8030597126648786943486679893245241728303913018633944420072982338608469843839552631806732482430935227039822\"\r\n        \"8172198912728505872577953119120494307617397333142987674217896284203724482395672570971622134450916941957929\"\r\n        \"8335740604914905677092210531926486790015866074453662711112860824617383455270400991755746002130673198280064\"\r\n        \"98234244028728773322038658744048689186456613242626190185546875e-187\"},\r\n    {0x1.fffffffffffffp-620, chars_format::scientific, 485,\r\n        \"4.\"\r\n        \"5965573598916699413030583588317580182453816398569037100358622355499067087719799085487686872449941123452915\"\r\n        \"6061194253297573886973359786490483456607826037267888840145964677216939687679105263613464964861870454079645\"\r\n        \"6344397825457011745155906238240988615234794666285975348435792568407448964791345141943244268901833883915859\"\r\n        \"6671481209829811354184421063852973580031732148907325422225721649234766910540801983511492004261346396560129\"\r\n        \"9646848805745754664407731748809737837291322648525238037109375e-187\"},\r\n    {0x1.fffffffffffffp-619, chars_format::scientific, 484,\r\n        \"9.\"\r\n        \"1931147197833398826061167176635160364907632797138074200717244710998134175439598170975373744899882246905831\"\r\n        \"2122388506595147773946719572980966913215652074535777680291929354433879375358210527226929929723740908159291\"\r\n        \"2688795650914023490311812476481977230469589332571950696871585136814897929582690283886488537803667767831719\"\r\n        \"3342962419659622708368842127705947160063464297814650844451443298469533821081603967022984008522692793120259\"\r\n        \"929369761149150932881546349761947567458264529705047607421875e-187\"},\r\n    {0x1.fffffffffffffp-618, chars_format::scientific, 484,\r\n        \"1.\"\r\n        \"8386229439566679765212233435327032072981526559427614840143448942199626835087919634195074748979976449381166\"\r\n        \"2424477701319029554789343914596193382643130414907155536058385870886775875071642105445385985944748181631858\"\r\n        \"2537759130182804698062362495296395446093917866514390139374317027362979585916538056777297707560733553566343\"\r\n        \"8668592483931924541673768425541189432012692859562930168890288659693906764216320793404596801704538558624051\"\r\n        \"985873952229830186576309269952389513491652905941009521484375e-186\"},\r\n    {0x1.fffffffffffffp-617, chars_format::scientific, 483,\r\n        \"3.\"\r\n        \"6772458879133359530424466870654064145963053118855229680286897884399253670175839268390149497959952898762332\"\r\n        \"4848955402638059109578687829192386765286260829814311072116771741773551750143284210890771971889496363263716\"\r\n        \"5075518260365609396124724990592790892187835733028780278748634054725959171833076113554595415121467107132687\"\r\n        \"7337184967863849083347536851082378864025385719125860337780577319387813528432641586809193603409077117248103\"\r\n        \"97174790445966037315261853990477902698330581188201904296875e-186\"},\r\n    {0x1.fffffffffffffp-616, chars_format::scientific, 482,\r\n        \"7.\"\r\n        \"3544917758266719060848933741308128291926106237710459360573795768798507340351678536780298995919905797524664\"\r\n        \"9697910805276118219157375658384773530572521659628622144233543483547103500286568421781543943778992726527433\"\r\n        \"0151036520731218792249449981185581784375671466057560557497268109451918343666152227109190830242934214265375\"\r\n        \"4674369935727698166695073702164757728050771438251720675561154638775627056865283173618387206818154234496207\"\r\n        \"9434958089193207463052370798095580539666116237640380859375e-186\"},\r\n    {0x1.fffffffffffffp-615, chars_format::scientific, 482,\r\n        \"1.\"\r\n        \"4708983551653343812169786748261625658385221247542091872114759153759701468070335707356059799183981159504932\"\r\n        \"9939582161055223643831475131676954706114504331925724428846708696709420700057313684356308788755798545305486\"\r\n        \"6030207304146243758449889996237116356875134293211512111499453621890383668733230445421838166048586842853075\"\r\n        \"0934873987145539633339014740432951545610154287650344135112230927755125411373056634723677441363630846899241\"\r\n        \"5886991617838641492610474159619116107933223247528076171875e-185\"},\r\n    {0x1.fffffffffffffp-614, chars_format::scientific, 481,\r\n        \"2.\"\r\n        \"9417967103306687624339573496523251316770442495084183744229518307519402936140671414712119598367962319009865\"\r\n        \"9879164322110447287662950263353909412229008663851448857693417393418841400114627368712617577511597090610973\"\r\n        \"2060414608292487516899779992474232713750268586423024222998907243780767337466460890843676332097173685706150\"\r\n        \"1869747974291079266678029480865903091220308575300688270224461855510250822746113269447354882727261693798483\"\r\n        \"177398323567728298522094831923823221586644649505615234375e-185\"},\r\n    {0x1.fffffffffffffp-613, chars_format::scientific, 480,\r\n        \"5.\"\r\n        \"8835934206613375248679146993046502633540884990168367488459036615038805872281342829424239196735924638019731\"\r\n        \"9758328644220894575325900526707818824458017327702897715386834786837682800229254737425235155023194181221946\"\r\n        \"4120829216584975033799559984948465427500537172846048445997814487561534674932921781687352664194347371412300\"\r\n        \"3739495948582158533356058961731806182440617150601376540448923711020501645492226538894709765454523387596966\"\r\n        \"35479664713545659704418966384764644317328929901123046875e-185\"},\r\n    {0x1.fffffffffffffp-612, chars_format::scientific, 480,\r\n        \"1.\"\r\n        \"1767186841322675049735829398609300526708176998033673497691807323007761174456268565884847839347184927603946\"\r\n        \"3951665728844178915065180105341563764891603465540579543077366957367536560045850947485047031004638836244389\"\r\n        \"2824165843316995006759911996989693085500107434569209689199562897512306934986584356337470532838869474282460\"\r\n        \"0747899189716431706671211792346361236488123430120275308089784742204100329098445307778941953090904677519393\"\r\n        \"27095932942709131940883793276952928863465785980224609375e-184\"},\r\n    {0x1.fffffffffffffp-611, chars_format::scientific, 479,\r\n        \"2.\"\r\n        \"3534373682645350099471658797218601053416353996067346995383614646015522348912537131769695678694369855207892\"\r\n        \"7903331457688357830130360210683127529783206931081159086154733914735073120091701894970094062009277672488778\"\r\n        \"5648331686633990013519823993979386171000214869138419378399125795024613869973168712674941065677738948564920\"\r\n        \"1495798379432863413342423584692722472976246860240550616179569484408200658196890615557883906181809355038786\"\r\n        \"5419186588541826388176758655390585772693157196044921875e-184\"},\r\n    {0x1.fffffffffffffp-610, chars_format::scientific, 478,\r\n        \"4.\"\r\n        \"7068747365290700198943317594437202106832707992134693990767229292031044697825074263539391357388739710415785\"\r\n        \"5806662915376715660260720421366255059566413862162318172309467829470146240183403789940188124018555344977557\"\r\n        \"1296663373267980027039647987958772342000429738276838756798251590049227739946337425349882131355477897129840\"\r\n        \"2991596758865726826684847169385444945952493720481101232359138968816401316393781231115767812363618710077573\"\r\n        \"083837317708365277635351731078117154538631439208984375e-184\"},\r\n    {0x1.fffffffffffffp-609, chars_format::scientific, 477,\r\n        \"9.\"\r\n        \"4137494730581400397886635188874404213665415984269387981534458584062089395650148527078782714777479420831571\"\r\n        \"1613325830753431320521440842732510119132827724324636344618935658940292480366807579880376248037110689955114\"\r\n        \"2593326746535960054079295975917544684000859476553677513596503180098455479892674850699764262710955794259680\"\r\n        \"5983193517731453653369694338770889891904987440962202464718277937632802632787562462231535624727237420155146\"\r\n        \"16767463541673055527070346215623430907726287841796875e-184\"},\r\n    {0x1.fffffffffffffp-608, chars_format::scientific, 477,\r\n        \"1.\"\r\n        \"8827498946116280079577327037774880842733083196853877596306891716812417879130029705415756542955495884166314\"\r\n        \"2322665166150686264104288168546502023826565544864927268923787131788058496073361515976075249607422137991022\"\r\n        \"8518665349307192010815859195183508936800171895310735502719300636019691095978534970139952852542191158851936\"\r\n        \"1196638703546290730673938867754177978380997488192440492943655587526560526557512492446307124945447484031029\"\r\n        \"23353492708334611105414069243124686181545257568359375e-183\"},\r\n    {0x1.fffffffffffffp-607, chars_format::scientific, 476,\r\n        \"3.\"\r\n        \"7654997892232560159154654075549761685466166393707755192613783433624835758260059410831513085910991768332628\"\r\n        \"4645330332301372528208576337093004047653131089729854537847574263576116992146723031952150499214844275982045\"\r\n        \"7037330698614384021631718390367017873600343790621471005438601272039382191957069940279905705084382317703872\"\r\n        \"2393277407092581461347877735508355956761994976384880985887311175053121053115024984892614249890894968062058\"\r\n        \"4670698541666922221082813848624937236309051513671875e-183\"},\r\n    {0x1.fffffffffffffp-606, chars_format::scientific, 475,\r\n        \"7.\"\r\n        \"5309995784465120318309308151099523370932332787415510385227566867249671516520118821663026171821983536665256\"\r\n        \"9290660664602745056417152674186008095306262179459709075695148527152233984293446063904300998429688551964091\"\r\n        \"4074661397228768043263436780734035747200687581242942010877202544078764383914139880559811410168764635407744\"\r\n        \"4786554814185162922695755471016711913523989952769761971774622350106242106230049969785228499781789936124116\"\r\n        \"934139708333384444216562769724987447261810302734375e-183\"},\r\n    {0x1.fffffffffffffp-605, chars_format::scientific, 475,\r\n        \"1.\"\r\n        \"5061999156893024063661861630219904674186466557483102077045513373449934303304023764332605234364396707333051\"\r\n        \"3858132132920549011283430534837201619061252435891941815139029705430446796858689212780860199685937710392818\"\r\n        \"2814932279445753608652687356146807149440137516248588402175440508815752876782827976111962282033752927081548\"\r\n        \"8957310962837032584539151094203342382704797990553952394354924470021248421246009993957045699956357987224823\"\r\n        \"386827941666676888843312553944997489452362060546875e-182\"},\r\n    {0x1.fffffffffffffp-604, chars_format::scientific, 474,\r\n        \"3.\"\r\n        \"0123998313786048127323723260439809348372933114966204154091026746899868606608047528665210468728793414666102\"\r\n        \"7716264265841098022566861069674403238122504871783883630278059410860893593717378425561720399371875420785636\"\r\n        \"5629864558891507217305374712293614298880275032497176804350881017631505753565655952223924564067505854163097\"\r\n        \"7914621925674065169078302188406684765409595981107904788709848940042496842492019987914091399912715974449646\"\r\n        \"77365588333335377768662510788999497890472412109375e-182\"},\r\n    {0x1.fffffffffffffp-603, chars_format::scientific, 473,\r\n        \"6.\"\r\n        \"0247996627572096254647446520879618696745866229932408308182053493799737213216095057330420937457586829332205\"\r\n        \"5432528531682196045133722139348806476245009743567767260556118821721787187434756851123440798743750841571273\"\r\n        \"1259729117783014434610749424587228597760550064994353608701762035263011507131311904447849128135011708326195\"\r\n        \"5829243851348130338156604376813369530819191962215809577419697880084993684984039975828182799825431948899293\"\r\n        \"5473117666667075553732502157799899578094482421875e-182\"},\r\n    {0x1.fffffffffffffp-602, chars_format::scientific, 473,\r\n        \"1.\"\r\n        \"2049599325514419250929489304175923739349173245986481661636410698759947442643219011466084187491517365866441\"\r\n        \"1086505706336439209026744427869761295249001948713553452111223764344357437486951370224688159748750168314254\"\r\n        \"6251945823556602886922149884917445719552110012998870721740352407052602301426262380889569825627002341665239\"\r\n        \"1165848770269626067631320875362673906163838392443161915483939576016998736996807995165636559965086389779858\"\r\n        \"7094623533333415110746500431559979915618896484375e-181\"},\r\n    {0x1.fffffffffffffp-601, chars_format::scientific, 472,\r\n        \"2.\"\r\n        \"4099198651028838501858978608351847478698346491972963323272821397519894885286438022932168374983034731732882\"\r\n        \"2173011412672878418053488855739522590498003897427106904222447528688714874973902740449376319497500336628509\"\r\n        \"2503891647113205773844299769834891439104220025997741443480704814105204602852524761779139651254004683330478\"\r\n        \"2331697540539252135262641750725347812327676784886323830967879152033997473993615990331273119930172779559717\"\r\n        \"418924706666683022149300086311995983123779296875e-181\"},\r\n    {0x1.fffffffffffffp-600, chars_format::scientific, 471,\r\n        \"4.\"\r\n        \"8198397302057677003717957216703694957396692983945926646545642795039789770572876045864336749966069463465764\"\r\n        \"4346022825345756836106977711479045180996007794854213808444895057377429749947805480898752638995000673257018\"\r\n        \"5007783294226411547688599539669782878208440051995482886961409628210409205705049523558279302508009366660956\"\r\n        \"4663395081078504270525283501450695624655353569772647661935758304067994947987231980662546239860345559119434\"\r\n        \"83784941333336604429860017262399196624755859375e-181\"},\r\n    {0x1.fffffffffffffp-599, chars_format::scientific, 470,\r\n        \"9.\"\r\n        \"6396794604115354007435914433407389914793385967891853293091285590079579541145752091728673499932138926931528\"\r\n        \"8692045650691513672213955422958090361992015589708427616889790114754859499895610961797505277990001346514037\"\r\n        \"0015566588452823095377199079339565756416880103990965773922819256420818411410099047116558605016018733321912\"\r\n        \"9326790162157008541050567002901391249310707139545295323871516608135989895974463961325092479720691118238869\"\r\n        \"6756988266667320885972003452479839324951171875e-181\"},\r\n    {0x1.fffffffffffffp-598, chars_format::scientific, 470,\r\n        \"1.\"\r\n        \"9279358920823070801487182886681477982958677193578370658618257118015915908229150418345734699986427785386305\"\r\n        \"7738409130138302734442791084591618072398403117941685523377958022950971899979122192359501055598000269302807\"\r\n        \"4003113317690564619075439815867913151283376020798193154784563851284163682282019809423311721003203746664382\"\r\n        \"5865358032431401708210113400580278249862141427909059064774303321627197979194892792265018495944138223647773\"\r\n        \"9351397653333464177194400690495967864990234375e-180\"},\r\n    {0x1.fffffffffffffp-597, chars_format::scientific, 469,\r\n        \"3.\"\r\n        \"8558717841646141602974365773362955965917354387156741317236514236031831816458300836691469399972855570772611\"\r\n        \"5476818260276605468885582169183236144796806235883371046755916045901943799958244384719002111196000538605614\"\r\n        \"8006226635381129238150879631735826302566752041596386309569127702568327364564039618846623442006407493328765\"\r\n        \"1730716064862803416420226801160556499724282855818118129548606643254395958389785584530036991888276447295547\"\r\n        \"870279530666692835438880138099193572998046875e-180\"},\r\n    {0x1.fffffffffffffp-596, chars_format::scientific, 468,\r\n        \"7.\"\r\n        \"7117435683292283205948731546725911931834708774313482634473028472063663632916601673382938799945711141545223\"\r\n        \"0953636520553210937771164338366472289593612471766742093511832091803887599916488769438004222392001077211229\"\r\n        \"6012453270762258476301759263471652605133504083192772619138255405136654729128079237693246884012814986657530\"\r\n        \"3461432129725606832840453602321112999448565711636236259097213286508791916779571169060073983776552894591095\"\r\n        \"74055906133338567087776027619838714599609375e-180\"},\r\n    {0x1.fffffffffffffp-595, chars_format::scientific, 468,\r\n        \"1.\"\r\n        \"5423487136658456641189746309345182386366941754862696526894605694412732726583320334676587759989142228309044\"\r\n        \"6190727304110642187554232867673294457918722494353348418702366418360777519983297753887600844478400215442245\"\r\n        \"9202490654152451695260351852694330521026700816638554523827651081027330945825615847538649376802562997331506\"\r\n        \"0692286425945121366568090720464222599889713142327247251819442657301758383355914233812014796755310578918219\"\r\n        \"14811181226667713417555205523967742919921875e-179\"},\r\n    {0x1.fffffffffffffp-594, chars_format::scientific, 467,\r\n        \"3.\"\r\n        \"0846974273316913282379492618690364772733883509725393053789211388825465453166640669353175519978284456618089\"\r\n        \"2381454608221284375108465735346588915837444988706696837404732836721555039966595507775201688956800430884491\"\r\n        \"8404981308304903390520703705388661042053401633277109047655302162054661891651231695077298753605125994663012\"\r\n        \"1384572851890242733136181440928445199779426284654494503638885314603516766711828467624029593510621157836438\"\r\n        \"2962236245333542683511041104793548583984375e-179\"},\r\n    {0x1.fffffffffffffp-593, chars_format::scientific, 466,\r\n        \"6.\"\r\n        \"1693948546633826564758985237380729545467767019450786107578422777650930906333281338706351039956568913236178\"\r\n        \"4762909216442568750216931470693177831674889977413393674809465673443110079933191015550403377913600861768983\"\r\n        \"6809962616609806781041407410777322084106803266554218095310604324109323783302463390154597507210251989326024\"\r\n        \"2769145703780485466272362881856890399558852569308989007277770629207033533423656935248059187021242315672876\"\r\n        \"592447249066708536702208220958709716796875e-179\"},\r\n    {0x1.fffffffffffffp-592, chars_format::scientific, 466,\r\n        \"1.\"\r\n        \"2338789709326765312951797047476145909093553403890157221515684555530186181266656267741270207991313782647235\"\r\n        \"6952581843288513750043386294138635566334977995482678734961893134688622015986638203110080675582720172353796\"\r\n        \"7361992523321961356208281482155464416821360653310843619062120864821864756660492678030919501442050397865204\"\r\n        \"8553829140756097093254472576371378079911770513861797801455554125841406706684731387049611837404248463134575\"\r\n        \"318489449813341707340441644191741943359375e-178\"},\r\n    {0x1.fffffffffffffp-591, chars_format::scientific, 465,\r\n        \"2.\"\r\n        \"4677579418653530625903594094952291818187106807780314443031369111060372362533312535482540415982627565294471\"\r\n        \"3905163686577027500086772588277271132669955990965357469923786269377244031973276406220161351165440344707593\"\r\n        \"4723985046643922712416562964310928833642721306621687238124241729643729513320985356061839002884100795730409\"\r\n        \"7107658281512194186508945152742756159823541027723595602911108251682813413369462774099223674808496926269150\"\r\n        \"63697889962668341468088328838348388671875e-178\"},\r\n    {0x1.fffffffffffffp-590, chars_format::scientific, 464,\r\n        \"4.\"\r\n        \"9355158837307061251807188189904583636374213615560628886062738222120744725066625070965080831965255130588942\"\r\n        \"7810327373154055000173545176554542265339911981930714939847572538754488063946552812440322702330880689415186\"\r\n        \"9447970093287845424833125928621857667285442613243374476248483459287459026641970712123678005768201591460819\"\r\n        \"4215316563024388373017890305485512319647082055447191205822216503365626826738925548198447349616993852538301\"\r\n        \"2739577992533668293617665767669677734375e-178\"},\r\n    {0x1.fffffffffffffp-589, chars_format::scientific, 463,\r\n        \"9.\"\r\n        \"8710317674614122503614376379809167272748427231121257772125476444241489450133250141930161663930510261177885\"\r\n        \"5620654746308110000347090353109084530679823963861429879695145077508976127893105624880645404661761378830373\"\r\n        \"8895940186575690849666251857243715334570885226486748952496966918574918053283941424247356011536403182921638\"\r\n        \"8430633126048776746035780610971024639294164110894382411644433006731253653477851096396894699233987705076602\"\r\n        \"547915598506733658723533153533935546875e-178\"},\r\n    {0x1.fffffffffffffp-588, chars_format::scientific, 463,\r\n        \"1.\"\r\n        \"9742063534922824500722875275961833454549685446224251554425095288848297890026650028386032332786102052235577\"\r\n        \"1124130949261622000069418070621816906135964792772285975939029015501795225578621124976129080932352275766074\"\r\n        \"7779188037315138169933250371448743066914177045297349790499393383714983610656788284849471202307280636584327\"\r\n        \"7686126625209755349207156122194204927858832822178876482328886601346250730695570219279378939846797541015320\"\r\n        \"509583119701346731744706630706787109375e-177\"},\r\n    {0x1.fffffffffffffp-587, chars_format::scientific, 462,\r\n        \"3.\"\r\n        \"9484127069845649001445750551923666909099370892448503108850190577696595780053300056772064665572204104471154\"\r\n        \"2248261898523244000138836141243633812271929585544571951878058031003590451157242249952258161864704551532149\"\r\n        \"5558376074630276339866500742897486133828354090594699580998786767429967221313576569698942404614561273168655\"\r\n        \"5372253250419510698414312244388409855717665644357752964657773202692501461391140438558757879693595082030641\"\r\n        \"01916623940269346348941326141357421875e-177\"},\r\n    {0x1.fffffffffffffp-586, chars_format::scientific, 461,\r\n        \"7.\"\r\n        \"8968254139691298002891501103847333818198741784897006217700381155393191560106600113544129331144408208942308\"\r\n        \"4496523797046488000277672282487267624543859171089143903756116062007180902314484499904516323729409103064299\"\r\n        \"1116752149260552679733001485794972267656708181189399161997573534859934442627153139397884809229122546337311\"\r\n        \"0744506500839021396828624488776819711435331288715505929315546405385002922782280877117515759387190164061282\"\r\n        \"0383324788053869269788265228271484375e-177\"},\r\n    {0x1.fffffffffffffp-585, chars_format::scientific, 461,\r\n        \"1.\"\r\n        \"5793650827938259600578300220769466763639748356979401243540076231078638312021320022708825866228881641788461\"\r\n        \"6899304759409297600055534456497453524908771834217828780751223212401436180462896899980903264745881820612859\"\r\n        \"8223350429852110535946600297158994453531341636237879832399514706971986888525430627879576961845824509267462\"\r\n        \"2148901300167804279365724897755363942287066257743101185863109281077000584556456175423503151877438032812256\"\r\n        \"4076664957610773853957653045654296875e-176\"},\r\n    {0x1.fffffffffffffp-584, chars_format::scientific, 460,\r\n        \"3.\"\r\n        \"1587301655876519201156600441538933527279496713958802487080152462157276624042640045417651732457763283576923\"\r\n        \"3798609518818595200111068912994907049817543668435657561502446424802872360925793799961806529491763641225719\"\r\n        \"6446700859704221071893200594317988907062683272475759664799029413943973777050861255759153923691649018534924\"\r\n        \"4297802600335608558731449795510727884574132515486202371726218562154001169112912350847006303754876065624512\"\r\n        \"815332991522154770791530609130859375e-176\"},\r\n    {0x1.fffffffffffffp-583, chars_format::scientific, 459,\r\n        \"6.\"\r\n        \"3174603311753038402313200883077867054558993427917604974160304924314553248085280090835303464915526567153846\"\r\n        \"7597219037637190400222137825989814099635087336871315123004892849605744721851587599923613058983527282451439\"\r\n        \"2893401719408442143786401188635977814125366544951519329598058827887947554101722511518307847383298037069848\"\r\n        \"8595605200671217117462899591021455769148265030972404743452437124308002338225824701694012607509752131249025\"\r\n        \"63066598304430954158306121826171875e-176\"},\r\n    {0x1.fffffffffffffp-582, chars_format::scientific, 459,\r\n        \"1.\"\r\n        \"2634920662350607680462640176615573410911798685583520994832060984862910649617056018167060692983105313430769\"\r\n        \"3519443807527438080044427565197962819927017467374263024600978569921148944370317519984722611796705456490287\"\r\n        \"8578680343881688428757280237727195562825073308990303865919611765577589510820344502303661569476659607413969\"\r\n        \"7719121040134243423492579918204291153829653006194480948690487424861600467645164940338802521501950426249805\"\r\n        \"12613319660886190831661224365234375e-175\"},\r\n    {0x1.fffffffffffffp-581, chars_format::scientific, 458,\r\n        \"2.\"\r\n        \"5269841324701215360925280353231146821823597371167041989664121969725821299234112036334121385966210626861538\"\r\n        \"7038887615054876160088855130395925639854034934748526049201957139842297888740635039969445223593410912980575\"\r\n        \"7157360687763376857514560475454391125650146617980607731839223531155179021640689004607323138953319214827939\"\r\n        \"5438242080268486846985159836408582307659306012388961897380974849723200935290329880677605043003900852499610\"\r\n        \"2522663932177238166332244873046875e-175\"},\r\n    {0x1.fffffffffffffp-580, chars_format::scientific, 457,\r\n        \"5.\"\r\n        \"0539682649402430721850560706462293643647194742334083979328243939451642598468224072668242771932421253723077\"\r\n        \"4077775230109752320177710260791851279708069869497052098403914279684595777481270079938890447186821825961151\"\r\n        \"4314721375526753715029120950908782251300293235961215463678447062310358043281378009214646277906638429655879\"\r\n        \"0876484160536973693970319672817164615318612024777923794761949699446401870580659761355210086007801704999220\"\r\n        \"504532786435447633266448974609375e-175\"},\r\n    {0x1.fffffffffffffp-579, chars_format::scientific, 457,\r\n        \"1.\"\r\n        \"0107936529880486144370112141292458728729438948466816795865648787890328519693644814533648554386484250744615\"\r\n        \"4815555046021950464035542052158370255941613973899410419680782855936919155496254015987778089437364365192230\"\r\n        \"2862944275105350743005824190181756450260058647192243092735689412462071608656275601842929255581327685931175\"\r\n        \"8175296832107394738794063934563432923063722404955584758952389939889280374116131952271042017201560340999844\"\r\n        \"100906557287089526653289794921875e-174\"},\r\n    {0x1.fffffffffffffp-578, chars_format::scientific, 456,\r\n        \"2.\"\r\n        \"0215873059760972288740224282584917457458877896933633591731297575780657039387289629067297108772968501489230\"\r\n        \"9631110092043900928071084104316740511883227947798820839361565711873838310992508031975556178874728730384460\"\r\n        \"5725888550210701486011648380363512900520117294384486185471378824924143217312551203685858511162655371862351\"\r\n        \"6350593664214789477588127869126865846127444809911169517904779879778560748232263904542084034403120681999688\"\r\n        \"20181311457417905330657958984375e-174\"},\r\n    {0x1.fffffffffffffp-577, chars_format::scientific, 455,\r\n        \"4.\"\r\n        \"0431746119521944577480448565169834914917755793867267183462595151561314078774579258134594217545937002978461\"\r\n        \"9262220184087801856142168208633481023766455895597641678723131423747676621985016063951112357749457460768921\"\r\n        \"1451777100421402972023296760727025801040234588768972370942757649848286434625102407371717022325310743724703\"\r\n        \"2701187328429578955176255738253731692254889619822339035809559759557121496464527809084168068806241363999376\"\r\n        \"4036262291483581066131591796875e-174\"},\r\n    {0x1.fffffffffffffp-576, chars_format::scientific, 454,\r\n        \"8.\"\r\n        \"0863492239043889154960897130339669829835511587734534366925190303122628157549158516269188435091874005956923\"\r\n        \"8524440368175603712284336417266962047532911791195283357446262847495353243970032127902224715498914921537842\"\r\n        \"2903554200842805944046593521454051602080469177537944741885515299696572869250204814743434044650621487449406\"\r\n        \"5402374656859157910352511476507463384509779239644678071619119519114242992929055618168336137612482727998752\"\r\n        \"807252458296716213226318359375e-174\"},\r\n    {0x1.fffffffffffffp-575, chars_format::scientific, 454,\r\n        \"1.\"\r\n        \"6172698447808777830992179426067933965967102317546906873385038060624525631509831703253837687018374801191384\"\r\n        \"7704888073635120742456867283453392409506582358239056671489252569499070648794006425580444943099782984307568\"\r\n        \"4580710840168561188809318704290810320416093835507588948377103059939314573850040962948686808930124297489881\"\r\n        \"3080474931371831582070502295301492676901955847928935614323823903822848598585811123633667227522496545599750\"\r\n        \"561450491659343242645263671875e-173\"},\r\n    {0x1.fffffffffffffp-574, chars_format::scientific, 453,\r\n        \"3.\"\r\n        \"2345396895617555661984358852135867931934204635093813746770076121249051263019663406507675374036749602382769\"\r\n        \"5409776147270241484913734566906784819013164716478113342978505138998141297588012851160889886199565968615136\"\r\n        \"9161421680337122377618637408581620640832187671015177896754206119878629147700081925897373617860248594979762\"\r\n        \"6160949862743663164141004590602985353803911695857871228647647807645697197171622247267334455044993091199501\"\r\n        \"12290098331868648529052734375e-173\"},\r\n    {0x1.fffffffffffffp-573, chars_format::scientific, 452,\r\n        \"6.\"\r\n        \"4690793791235111323968717704271735863868409270187627493540152242498102526039326813015350748073499204765539\"\r\n        \"0819552294540482969827469133813569638026329432956226685957010277996282595176025702321779772399131937230273\"\r\n        \"8322843360674244755237274817163241281664375342030355793508412239757258295400163851794747235720497189959525\"\r\n        \"2321899725487326328282009181205970707607823391715742457295295615291394394343244494534668910089986182399002\"\r\n        \"2458019666373729705810546875e-173\"},\r\n    {0x1.fffffffffffffp-572, chars_format::scientific, 452,\r\n        \"1.\"\r\n        \"2938158758247022264793743540854347172773681854037525498708030448499620505207865362603070149614699840953107\"\r\n        \"8163910458908096593965493826762713927605265886591245337191402055599256519035205140464355954479826387446054\"\r\n        \"7664568672134848951047454963432648256332875068406071158701682447951451659080032770358949447144099437991905\"\r\n        \"0464379945097465265656401836241194141521564678343148491459059123058278878868648898906933782017997236479800\"\r\n        \"4491603933274745941162109375e-172\"},\r\n    {0x1.fffffffffffffp-571, chars_format::scientific, 451,\r\n        \"2.\"\r\n        \"5876317516494044529587487081708694345547363708075050997416060896999241010415730725206140299229399681906215\"\r\n        \"6327820917816193187930987653525427855210531773182490674382804111198513038070410280928711908959652774892109\"\r\n        \"5329137344269697902094909926865296512665750136812142317403364895902903318160065540717898894288198875983810\"\r\n        \"0928759890194930531312803672482388283043129356686296982918118246116557757737297797813867564035994472959600\"\r\n        \"898320786654949188232421875e-172\"},\r\n    {0x1.fffffffffffffp-570, chars_format::scientific, 450,\r\n        \"5.\"\r\n        \"1752635032988089059174974163417388691094727416150101994832121793998482020831461450412280598458799363812431\"\r\n        \"2655641835632386375861975307050855710421063546364981348765608222397026076140820561857423817919305549784219\"\r\n        \"0658274688539395804189819853730593025331500273624284634806729791805806636320131081435797788576397751967620\"\r\n        \"1857519780389861062625607344964776566086258713372593965836236492233115515474595595627735128071988945919201\"\r\n        \"79664157330989837646484375e-172\"},\r\n    {0x1.fffffffffffffp-569, chars_format::scientific, 450,\r\n        \"1.\"\r\n        \"0350527006597617811834994832683477738218945483230020398966424358799696404166292290082456119691759872762486\"\r\n        \"2531128367126477275172395061410171142084212709272996269753121644479405215228164112371484763583861109956843\"\r\n        \"8131654937707879160837963970746118605066300054724856926961345958361161327264026216287159557715279550393524\"\r\n        \"0371503956077972212525121468992955313217251742674518793167247298446623103094919119125547025614397789183840\"\r\n        \"35932831466197967529296875e-171\"},\r\n    {0x1.fffffffffffffp-568, chars_format::scientific, 449,\r\n        \"2.\"\r\n        \"0701054013195235623669989665366955476437890966460040797932848717599392808332584580164912239383519745524972\"\r\n        \"5062256734252954550344790122820342284168425418545992539506243288958810430456328224742969527167722219913687\"\r\n        \"6263309875415758321675927941492237210132600109449713853922691916722322654528052432574319115430559100787048\"\r\n        \"0743007912155944425050242937985910626434503485349037586334494596893246206189838238251094051228795578367680\"\r\n        \"7186566293239593505859375e-171\"},\r\n    {0x1.fffffffffffffp-567, chars_format::scientific, 448,\r\n        \"4.\"\r\n        \"1402108026390471247339979330733910952875781932920081595865697435198785616665169160329824478767039491049945\"\r\n        \"0124513468505909100689580245640684568336850837091985079012486577917620860912656449485939054335444439827375\"\r\n        \"2526619750831516643351855882984474420265200218899427707845383833444645309056104865148638230861118201574096\"\r\n        \"1486015824311888850100485875971821252869006970698075172668989193786492412379676476502188102457591156735361\"\r\n        \"437313258647918701171875e-171\"},\r\n    {0x1.fffffffffffffp-566, chars_format::scientific, 447,\r\n        \"8.\"\r\n        \"2804216052780942494679958661467821905751563865840163191731394870397571233330338320659648957534078982099890\"\r\n        \"0249026937011818201379160491281369136673701674183970158024973155835241721825312898971878108670888879654750\"\r\n        \"5053239501663033286703711765968948840530400437798855415690767666889290618112209730297276461722236403148192\"\r\n        \"2972031648623777700200971751943642505738013941396150345337978387572984824759352953004376204915182313470722\"\r\n        \"87462651729583740234375e-171\"},\r\n    {0x1.fffffffffffffp-565, chars_format::scientific, 447,\r\n        \"1.\"\r\n        \"6560843210556188498935991732293564381150312773168032638346278974079514246666067664131929791506815796419978\"\r\n        \"0049805387402363640275832098256273827334740334836794031604994631167048344365062579794375621734177775930950\"\r\n        \"1010647900332606657340742353193789768106080087559771083138153533377858123622441946059455292344447280629638\"\r\n        \"4594406329724755540040194350388728501147602788279230069067595677514596964951870590600875240983036462694144\"\r\n        \"57492530345916748046875e-170\"},\r\n    {0x1.fffffffffffffp-564, chars_format::scientific, 446,\r\n        \"3.\"\r\n        \"3121686421112376997871983464587128762300625546336065276692557948159028493332135328263859583013631592839956\"\r\n        \"0099610774804727280551664196512547654669480669673588063209989262334096688730125159588751243468355551861900\"\r\n        \"2021295800665213314681484706387579536212160175119542166276307066755716247244883892118910584688894561259276\"\r\n        \"9188812659449511080080388700777457002295205576558460138135191355029193929903741181201750481966072925388289\"\r\n        \"1498506069183349609375e-170\"},\r\n    {0x1.fffffffffffffp-563, chars_format::scientific, 445,\r\n        \"6.\"\r\n        \"6243372842224753995743966929174257524601251092672130553385115896318056986664270656527719166027263185679912\"\r\n        \"0199221549609454561103328393025095309338961339347176126419978524668193377460250319177502486936711103723800\"\r\n        \"4042591601330426629362969412775159072424320350239084332552614133511432494489767784237821169377789122518553\"\r\n        \"8377625318899022160160777401554914004590411153116920276270382710058387859807482362403500963932145850776578\"\r\n        \"299701213836669921875e-170\"},\r\n    {0x1.fffffffffffffp-562, chars_format::scientific, 445,\r\n        \"1.\"\r\n        \"3248674568444950799148793385834851504920250218534426110677023179263611397332854131305543833205452637135982\"\r\n        \"4039844309921890912220665678605019061867792267869435225283995704933638675492050063835500497387342220744760\"\r\n        \"0808518320266085325872593882555031814484864070047816866510522826702286498897953556847564233875557824503710\"\r\n        \"7675525063779804432032155480310982800918082230623384055254076542011677571961496472480700192786429170155315\"\r\n        \"659940242767333984375e-169\"},\r\n    {0x1.fffffffffffffp-561, chars_format::scientific, 444,\r\n        \"2.\"\r\n        \"6497349136889901598297586771669703009840500437068852221354046358527222794665708262611087666410905274271964\"\r\n        \"8079688619843781824441331357210038123735584535738870450567991409867277350984100127671000994774684441489520\"\r\n        \"1617036640532170651745187765110063628969728140095633733021045653404572997795907113695128467751115649007421\"\r\n        \"5351050127559608864064310960621965601836164461246768110508153084023355143922992944961400385572858340310631\"\r\n        \"31988048553466796875e-169\"},\r\n    {0x1.fffffffffffffp-560, chars_format::scientific, 443,\r\n        \"5.\"\r\n        \"2994698273779803196595173543339406019681000874137704442708092717054445589331416525222175332821810548543929\"\r\n        \"6159377239687563648882662714420076247471169071477740901135982819734554701968200255342001989549368882979040\"\r\n        \"3234073281064341303490375530220127257939456280191267466042091306809145995591814227390256935502231298014843\"\r\n        \"0702100255119217728128621921243931203672328922493536221016306168046710287845985889922800771145716680621262\"\r\n        \"6397609710693359375e-169\"},\r\n    {0x1.fffffffffffffp-559, chars_format::scientific, 443,\r\n        \"1.\"\r\n        \"0598939654755960639319034708667881203936200174827540888541618543410889117866283305044435066564362109708785\"\r\n        \"9231875447937512729776532542884015249494233814295548180227196563946910940393640051068400397909873776595808\"\r\n        \"0646814656212868260698075106044025451587891256038253493208418261361829199118362845478051387100446259602968\"\r\n        \"6140420051023843545625724384248786240734465784498707244203261233609342057569197177984560154229143336124252\"\r\n        \"5279521942138671875e-168\"},\r\n    {0x1.fffffffffffffp-558, chars_format::scientific, 442,\r\n        \"2.\"\r\n        \"1197879309511921278638069417335762407872400349655081777083237086821778235732566610088870133128724219417571\"\r\n        \"8463750895875025459553065085768030498988467628591096360454393127893821880787280102136800795819747553191616\"\r\n        \"1293629312425736521396150212088050903175782512076506986416836522723658398236725690956102774200892519205937\"\r\n        \"2280840102047687091251448768497572481468931568997414488406522467218684115138394355969120308458286672248505\"\r\n        \"055904388427734375e-168\"},\r\n    {0x1.fffffffffffffp-557, chars_format::scientific, 441,\r\n        \"4.\"\r\n        \"2395758619023842557276138834671524815744800699310163554166474173643556471465133220177740266257448438835143\"\r\n        \"6927501791750050919106130171536060997976935257182192720908786255787643761574560204273601591639495106383232\"\r\n        \"2587258624851473042792300424176101806351565024153013972833673045447316796473451381912205548401785038411874\"\r\n        \"4561680204095374182502897536995144962937863137994828976813044934437368230276788711938240616916573344497010\"\r\n        \"11180877685546875e-168\"},\r\n    {0x1.fffffffffffffp-556, chars_format::scientific, 440,\r\n        \"8.\"\r\n        \"4791517238047685114552277669343049631489601398620327108332948347287112942930266440355480532514896877670287\"\r\n        \"3855003583500101838212260343072121995953870514364385441817572511575287523149120408547203183278990212766464\"\r\n        \"5174517249702946085584600848352203612703130048306027945667346090894633592946902763824411096803570076823748\"\r\n        \"9123360408190748365005795073990289925875726275989657953626089868874736460553577423876481233833146688994020\"\r\n        \"2236175537109375e-168\"},\r\n    {0x1.fffffffffffffp-555, chars_format::scientific, 440,\r\n        \"1.\"\r\n        \"6958303447609537022910455533868609926297920279724065421666589669457422588586053288071096106502979375534057\"\r\n        \"4771000716700020367642452068614424399190774102872877088363514502315057504629824081709440636655798042553292\"\r\n        \"9034903449940589217116920169670440722540626009661205589133469218178926718589380552764882219360714015364749\"\r\n        \"7824672081638149673001159014798057985175145255197931590725217973774947292110715484775296246766629337798804\"\r\n        \"0447235107421875e-167\"},\r\n    {0x1.fffffffffffffp-554, chars_format::scientific, 439,\r\n        \"3.\"\r\n        \"3916606895219074045820911067737219852595840559448130843333179338914845177172106576142192213005958751068114\"\r\n        \"9542001433400040735284904137228848798381548205745754176727029004630115009259648163418881273311596085106585\"\r\n        \"8069806899881178434233840339340881445081252019322411178266938436357853437178761105529764438721428030729499\"\r\n        \"5649344163276299346002318029596115970350290510395863181450435947549894584221430969550592493533258675597608\"\r\n        \"089447021484375e-167\"},\r\n    {0x1.fffffffffffffp-553, chars_format::scientific, 438,\r\n        \"6.\"\r\n        \"7833213790438148091641822135474439705191681118896261686666358677829690354344213152284384426011917502136229\"\r\n        \"9084002866800081470569808274457697596763096411491508353454058009260230018519296326837762546623192170213171\"\r\n        \"6139613799762356868467680678681762890162504038644822356533876872715706874357522211059528877442856061458999\"\r\n        \"1298688326552598692004636059192231940700581020791726362900871895099789168442861939101184987066517351195216\"\r\n        \"17889404296875e-167\"},\r\n    {0x1.fffffffffffffp-552, chars_format::scientific, 438,\r\n        \"1.\"\r\n        \"3566642758087629618328364427094887941038336223779252337333271735565938070868842630456876885202383500427245\"\r\n        \"9816800573360016294113961654891539519352619282298301670690811601852046003703859265367552509324638434042634\"\r\n        \"3227922759952471373693536135736352578032500807728964471306775374543141374871504442211905775488571212291799\"\r\n        \"8259737665310519738400927211838446388140116204158345272580174379019957833688572387820236997413303470239043\"\r\n        \"23577880859375e-166\"},\r\n    {0x1.fffffffffffffp-551, chars_format::scientific, 437,\r\n        \"2.\"\r\n        \"7133285516175259236656728854189775882076672447558504674666543471131876141737685260913753770404767000854491\"\r\n        \"9633601146720032588227923309783079038705238564596603341381623203704092007407718530735105018649276868085268\"\r\n        \"6455845519904942747387072271472705156065001615457928942613550749086282749743008884423811550977142424583599\"\r\n        \"6519475330621039476801854423676892776280232408316690545160348758039915667377144775640473994826606940478086\"\r\n        \"4715576171875e-166\"},\r\n    {0x1.fffffffffffffp-550, chars_format::scientific, 436,\r\n        \"5.\"\r\n        \"4266571032350518473313457708379551764153344895117009349333086942263752283475370521827507540809534001708983\"\r\n        \"9267202293440065176455846619566158077410477129193206682763246407408184014815437061470210037298553736170537\"\r\n        \"2911691039809885494774144542945410312130003230915857885227101498172565499486017768847623101954284849167199\"\r\n        \"3038950661242078953603708847353785552560464816633381090320697516079831334754289551280947989653213880956172\"\r\n        \"943115234375e-166\"},\r\n    {0x1.fffffffffffffp-549, chars_format::scientific, 436,\r\n        \"1.\"\r\n        \"0853314206470103694662691541675910352830668979023401869866617388452750456695074104365501508161906800341796\"\r\n        \"7853440458688013035291169323913231615482095425838641336552649281481636802963087412294042007459710747234107\"\r\n        \"4582338207961977098954828908589082062426000646183171577045420299634513099897203553769524620390856969833439\"\r\n        \"8607790132248415790720741769470757110512092963326676218064139503215966266950857910256189597930642776191234\"\r\n        \"588623046875e-165\"},\r\n    {0x1.fffffffffffffp-548, chars_format::scientific, 435,\r\n        \"2.\"\r\n        \"1706628412940207389325383083351820705661337958046803739733234776905500913390148208731003016323813600683593\"\r\n        \"5706880917376026070582338647826463230964190851677282673105298562963273605926174824588084014919421494468214\"\r\n        \"9164676415923954197909657817178164124852001292366343154090840599269026199794407107539049240781713939666879\"\r\n        \"7215580264496831581441483538941514221024185926653352436128279006431932533901715820512379195861285552382469\"\r\n        \"17724609375e-165\"},\r\n    {0x1.fffffffffffffp-547, chars_format::scientific, 434,\r\n        \"4.\"\r\n        \"3413256825880414778650766166703641411322675916093607479466469553811001826780296417462006032647627201367187\"\r\n        \"1413761834752052141164677295652926461928381703354565346210597125926547211852349649176168029838842988936429\"\r\n        \"8329352831847908395819315634356328249704002584732686308181681198538052399588814215078098481563427879333759\"\r\n        \"4431160528993663162882967077883028442048371853306704872256558012863865067803431641024758391722571104764938\"\r\n        \"3544921875e-165\"},\r\n    {0x1.fffffffffffffp-546, chars_format::scientific, 433,\r\n        \"8.\"\r\n        \"6826513651760829557301532333407282822645351832187214958932939107622003653560592834924012065295254402734374\"\r\n        \"2827523669504104282329354591305852923856763406709130692421194251853094423704699298352336059677685977872859\"\r\n        \"6658705663695816791638631268712656499408005169465372616363362397076104799177628430156196963126855758667518\"\r\n        \"8862321057987326325765934155766056884096743706613409744513116025727730135606863282049516783445142209529876\"\r\n        \"708984375e-165\"},\r\n    {0x1.fffffffffffffp-545, chars_format::scientific, 433,\r\n        \"1.\"\r\n        \"7365302730352165911460306466681456564529070366437442991786587821524400730712118566984802413059050880546874\"\r\n        \"8565504733900820856465870918261170584771352681341826138484238850370618884740939859670467211935537195574571\"\r\n        \"9331741132739163358327726253742531299881601033893074523272672479415220959835525686031239392625371151733503\"\r\n        \"7772464211597465265153186831153211376819348741322681948902623205145546027121372656409903356689028441905975\"\r\n        \"341796875e-164\"},\r\n    {0x1.fffffffffffffp-544, chars_format::scientific, 432,\r\n        \"3.\"\r\n        \"4730605460704331822920612933362913129058140732874885983573175643048801461424237133969604826118101761093749\"\r\n        \"7131009467801641712931741836522341169542705362683652276968477700741237769481879719340934423871074391149143\"\r\n        \"8663482265478326716655452507485062599763202067786149046545344958830441919671051372062478785250742303467007\"\r\n        \"5544928423194930530306373662306422753638697482645363897805246410291092054242745312819806713378056883811950\"\r\n        \"68359375e-164\"},\r\n    {0x1.fffffffffffffp-543, chars_format::scientific, 431,\r\n        \"6.\"\r\n        \"9461210921408663645841225866725826258116281465749771967146351286097602922848474267939209652236203522187499\"\r\n        \"4262018935603283425863483673044682339085410725367304553936955401482475538963759438681868847742148782298287\"\r\n        \"7326964530956653433310905014970125199526404135572298093090689917660883839342102744124957570501484606934015\"\r\n        \"1089856846389861060612747324612845507277394965290727795610492820582184108485490625639613426756113767623901\"\r\n        \"3671875e-164\"},\r\n    {0x1.fffffffffffffp-542, chars_format::scientific, 431,\r\n        \"1.\"\r\n        \"3892242184281732729168245173345165251623256293149954393429270257219520584569694853587841930447240704437499\"\r\n        \"8852403787120656685172696734608936467817082145073460910787391080296495107792751887736373769548429756459657\"\r\n        \"5465392906191330686662181002994025039905280827114459618618137983532176767868420548824991514100296921386803\"\r\n        \"0217971369277972212122549464922569101455478993058145559122098564116436821697098125127922685351222753524780\"\r\n        \"2734375e-163\"},\r\n    {0x1.fffffffffffffp-541, chars_format::scientific, 430,\r\n        \"2.\"\r\n        \"7784484368563465458336490346690330503246512586299908786858540514439041169139389707175683860894481408874999\"\r\n        \"7704807574241313370345393469217872935634164290146921821574782160592990215585503775472747539096859512919315\"\r\n        \"0930785812382661373324362005988050079810561654228919237236275967064353535736841097649983028200593842773606\"\r\n        \"0435942738555944424245098929845138202910957986116291118244197128232873643394196250255845370702445507049560\"\r\n        \"546875e-163\"},\r\n    {0x1.fffffffffffffp-540, chars_format::scientific, 429,\r\n        \"5.\"\r\n        \"5568968737126930916672980693380661006493025172599817573717081028878082338278779414351367721788962817749999\"\r\n        \"5409615148482626740690786938435745871268328580293843643149564321185980431171007550945495078193719025838630\"\r\n        \"1861571624765322746648724011976100159621123308457838474472551934128707071473682195299966056401187685547212\"\r\n        \"0871885477111888848490197859690276405821915972232582236488394256465747286788392500511690741404891014099121\"\r\n        \"09375e-163\"},\r\n    {0x1.fffffffffffffp-539, chars_format::scientific, 429,\r\n        \"1.\"\r\n        \"1113793747425386183334596138676132201298605034519963514743416205775616467655755882870273544357792563549999\"\r\n        \"9081923029696525348138157387687149174253665716058768728629912864237196086234201510189099015638743805167726\"\r\n        \"0372314324953064549329744802395220031924224661691567694894510386825741414294736439059993211280237537109442\"\r\n        \"4174377095422377769698039571938055281164383194446516447297678851293149457357678500102338148280978202819824\"\r\n        \"21875e-162\"},\r\n    {0x1.fffffffffffffp-538, chars_format::scientific, 428,\r\n        \"2.\"\r\n        \"2227587494850772366669192277352264402597210069039927029486832411551232935311511765740547088715585127099999\"\r\n        \"8163846059393050696276314775374298348507331432117537457259825728474392172468403020378198031277487610335452\"\r\n        \"0744628649906129098659489604790440063848449323383135389789020773651482828589472878119986422560475074218884\"\r\n        \"8348754190844755539396079143876110562328766388893032894595357702586298914715357000204676296561956405639648\"\r\n        \"4375e-162\"},\r\n    {0x1.fffffffffffffp-537, chars_format::scientific, 427,\r\n        \"4.\"\r\n        \"4455174989701544733338384554704528805194420138079854058973664823102465870623023531481094177431170254199999\"\r\n        \"6327692118786101392552629550748596697014662864235074914519651456948784344936806040756396062554975220670904\"\r\n        \"1489257299812258197318979209580880127696898646766270779578041547302965657178945756239972845120950148437769\"\r\n        \"6697508381689511078792158287752221124657532777786065789190715405172597829430714000409352593123912811279296\"\r\n        \"875e-162\"},\r\n    {0x1.fffffffffffffp-536, chars_format::scientific, 426,\r\n        \"8.\"\r\n        \"8910349979403089466676769109409057610388840276159708117947329646204931741246047062962188354862340508399999\"\r\n        \"2655384237572202785105259101497193394029325728470149829039302913897568689873612081512792125109950441341808\"\r\n        \"2978514599624516394637958419161760255393797293532541559156083094605931314357891512479945690241900296875539\"\r\n        \"3395016763379022157584316575504442249315065555572131578381430810345195658861428000818705186247825622558593\"\r\n        \"75e-162\"},\r\n    {0x1.fffffffffffffp-535, chars_format::scientific, 426,\r\n        \"1.\"\r\n        \"7782069995880617893335353821881811522077768055231941623589465929240986348249209412592437670972468101679999\"\r\n        \"8531076847514440557021051820299438678805865145694029965807860582779513737974722416302558425021990088268361\"\r\n        \"6595702919924903278927591683832352051078759458706508311831216618921186262871578302495989138048380059375107\"\r\n        \"8679003352675804431516863315100888449863013111114426315676286162069039131772285600163741037249565124511718\"\r\n        \"75e-161\"},\r\n    {0x1.fffffffffffffp-534, chars_format::scientific, 425,\r\n        \"3.\"\r\n        \"5564139991761235786670707643763623044155536110463883247178931858481972696498418825184875341944936203359999\"\r\n        \"7062153695028881114042103640598877357611730291388059931615721165559027475949444832605116850043980176536723\"\r\n        \"3191405839849806557855183367664704102157518917413016623662433237842372525743156604991978276096760118750215\"\r\n        \"7358006705351608863033726630201776899726026222228852631352572324138078263544571200327482074499130249023437\"\r\n        \"5e-161\"},\r\n    {0x1.fffffffffffffp-533, chars_format::scientific, 424,\r\n        \"7.\"\r\n        \"1128279983522471573341415287527246088311072220927766494357863716963945392996837650369750683889872406719999\"\r\n        \"4124307390057762228084207281197754715223460582776119863231442331118054951898889665210233700087960353073446\"\r\n        \"6382811679699613115710366735329408204315037834826033247324866475684745051486313209983956552193520237500431\"\r\n        \"4716013410703217726067453260403553799452052444457705262705144648276156527089142400654964148998260498046875\"\r\n        \"e-161\"},\r\n    {0x1.fffffffffffffp-532, chars_format::scientific, 424,\r\n        \"1.\"\r\n        \"4225655996704494314668283057505449217662214444185553298871572743392789078599367530073950136777974481343999\"\r\n        \"8824861478011552445616841456239550943044692116555223972646288466223610990379777933042046740017592070614689\"\r\n        \"3276562335939922623142073347065881640863007566965206649464973295136949010297262641996791310438704047500086\"\r\n        \"2943202682140643545213490652080710759890410488891541052541028929655231305417828480130992829799652099609375\"\r\n        \"e-160\"},\r\n    {0x1.fffffffffffffp-531, chars_format::scientific, 423,\r\n        \"2.\"\r\n        \"8451311993408988629336566115010898435324428888371106597743145486785578157198735060147900273555948962687999\"\r\n        \"7649722956023104891233682912479101886089384233110447945292576932447221980759555866084093480035184141229378\"\r\n        \"6553124671879845246284146694131763281726015133930413298929946590273898020594525283993582620877408095000172\"\r\n        \"588640536428128709042698130416142151978082097778308210508205785931046261083565696026198565959930419921875e\"\r\n        \"-160\"},\r\n    {0x1.fffffffffffffp-530, chars_format::scientific, 422,\r\n        \"5.\"\r\n        \"6902623986817977258673132230021796870648857776742213195486290973571156314397470120295800547111897925375999\"\r\n        \"5299445912046209782467365824958203772178768466220895890585153864894443961519111732168186960070368282458757\"\r\n        \"3106249343759690492568293388263526563452030267860826597859893180547796041189050567987165241754816190000345\"\r\n        \"17728107285625741808539626083228430395616419555661642101641157186209252216713139205239713191986083984375e-\"\r\n        \"160\"},\r\n    {0x1.fffffffffffffp-529, chars_format::scientific, 422,\r\n        \"1.\"\r\n        \"1380524797363595451734626446004359374129771555348442639097258194714231262879494024059160109422379585075199\"\r\n        \"9059889182409241956493473164991640754435753693244179178117030772978888792303822346433637392014073656491751\"\r\n        \"4621249868751938098513658677652705312690406053572165319571978636109559208237810113597433048350963238000069\"\r\n        \"03545621457125148361707925216645686079123283911132328420328231437241850443342627841047942638397216796875e-\"\r\n        \"159\"},\r\n    {0x1.fffffffffffffp-528, chars_format::scientific, 421,\r\n        \"2.\"\r\n        \"2761049594727190903469252892008718748259543110696885278194516389428462525758988048118320218844759170150399\"\r\n        \"8119778364818483912986946329983281508871507386488358356234061545957777584607644692867274784028147312983502\"\r\n        \"9242499737503876197027317355305410625380812107144330639143957272219118416475620227194866096701926476000138\"\r\n        \"0709124291425029672341585043329137215824656782226465684065646287448370088668525568209588527679443359375e-\"\r\n        \"159\"},\r\n    {0x1.fffffffffffffp-527, chars_format::scientific, 420,\r\n        \"4.\"\r\n        \"5522099189454381806938505784017437496519086221393770556389032778856925051517976096236640437689518340300799\"\r\n        \"6239556729636967825973892659966563017743014772976716712468123091915555169215289385734549568056294625967005\"\r\n        \"8484999475007752394054634710610821250761624214288661278287914544438236832951240454389732193403852952000276\"\r\n        \"141824858285005934468317008665827443164931356445293136813129257489674017733705113641917705535888671875e-\"\r\n        \"159\"},\r\n    {0x1.fffffffffffffp-526, chars_format::scientific, 419,\r\n        \"9.\"\r\n        \"1044198378908763613877011568034874993038172442787541112778065557713850103035952192473280875379036680601599\"\r\n        \"2479113459273935651947785319933126035486029545953433424936246183831110338430578771469099136112589251934011\"\r\n        \"6969998950015504788109269421221642501523248428577322556575829088876473665902480908779464386807705904000552\"\r\n        \"28364971657001186893663401733165488632986271289058627362625851497934803546741022728383541107177734375e-\"\r\n        \"159\"},\r\n    {0x1.fffffffffffffp-525, chars_format::scientific, 419,\r\n        \"1.\"\r\n        \"8208839675781752722775402313606974998607634488557508222555613111542770020607190438494656175075807336120319\"\r\n        \"8495822691854787130389557063986625207097205909190686684987249236766222067686115754293819827222517850386802\"\r\n        \"3393999790003100957621853884244328500304649685715464511315165817775294733180496181755892877361541180800110\"\r\n        \"45672994331400237378732680346633097726597254257811725472525170299586960709348204545676708221435546875e-\"\r\n        \"158\"},\r\n    {0x1.fffffffffffffp-524, chars_format::scientific, 418,\r\n        \"3.\"\r\n        \"6417679351563505445550804627213949997215268977115016445111226223085540041214380876989312350151614672240639\"\r\n        \"6991645383709574260779114127973250414194411818381373369974498473532444135372231508587639654445035700773604\"\r\n        \"6787999580006201915243707768488657000609299371430929022630331635550589466360992363511785754723082361600220\"\r\n        \"9134598866280047475746536069326619545319450851562345094505034059917392141869640909135341644287109375e-\"\r\n        \"158\"},\r\n    {0x1.fffffffffffffp-523, chars_format::scientific, 417,\r\n        \"7.\"\r\n        \"2835358703127010891101609254427899994430537954230032890222452446171080082428761753978624700303229344481279\"\r\n        \"3983290767419148521558228255946500828388823636762746739948996947064888270744463017175279308890071401547209\"\r\n        \"3575999160012403830487415536977314001218598742861858045260663271101178932721984727023571509446164723200441\"\r\n        \"826919773256009495149307213865323909063890170312469018901006811983478428373928181827068328857421875e-158\"},\r\n    {0x1.fffffffffffffp-522, chars_format::scientific, 417,\r\n        \"1.\"\r\n        \"4567071740625402178220321850885579998886107590846006578044490489234216016485752350795724940060645868896255\"\r\n        \"8796658153483829704311645651189300165677764727352549347989799389412977654148892603435055861778014280309441\"\r\n        \"8715199832002480766097483107395462800243719748572371609052132654220235786544396945404714301889232944640088\"\r\n        \"365383954651201899029861442773064781812778034062493803780201362396695685674785636365413665771484375e-157\"},\r\n    {0x1.fffffffffffffp-521, chars_format::scientific, 416,\r\n        \"2.\"\r\n        \"9134143481250804356440643701771159997772215181692013156088980978468432032971504701591449880121291737792511\"\r\n        \"7593316306967659408623291302378600331355529454705098695979598778825955308297785206870111723556028560618883\"\r\n        \"7430399664004961532194966214790925600487439497144743218104265308440471573088793890809428603778465889280176\"\r\n        \"73076790930240379805972288554612956362555606812498760756040272479339137134957127273082733154296875e-157\"},\r\n    {0x1.fffffffffffffp-520, chars_format::scientific, 415,\r\n        \"5.\"\r\n        \"8268286962501608712881287403542319995544430363384026312177961956936864065943009403182899760242583475585023\"\r\n        \"5186632613935318817246582604757200662711058909410197391959197557651910616595570413740223447112057121237767\"\r\n        \"4860799328009923064389932429581851200974878994289486436208530616880943146177587781618857207556931778560353\"\r\n        \"4615358186048075961194457710922591272511121362499752151208054495867827426991425454616546630859375e-157\"},\r\n    {0x1.fffffffffffffp-519, chars_format::scientific, 415,\r\n        \"1.\"\r\n        \"1653657392500321742576257480708463999108886072676805262435592391387372813188601880636579952048516695117004\"\r\n        \"7037326522787063763449316520951440132542211781882039478391839511530382123319114082748044689422411424247553\"\r\n        \"4972159865601984612877986485916370240194975798857897287241706123376188629235517556323771441511386355712070\"\r\n        \"6923071637209615192238891542184518254502224272499950430241610899173565485398285090923309326171875e-156\"},\r\n    {0x1.fffffffffffffp-518, chars_format::scientific, 414,\r\n        \"2.\"\r\n        \"3307314785000643485152514961416927998217772145353610524871184782774745626377203761273159904097033390234009\"\r\n        \"4074653045574127526898633041902880265084423563764078956783679023060764246638228165496089378844822848495106\"\r\n        \"9944319731203969225755972971832740480389951597715794574483412246752377258471035112647542883022772711424141\"\r\n        \"384614327441923038447778308436903650900444854499990086048322179834713097079657018184661865234375e-156\"},\r\n    {0x1.fffffffffffffp-517, chars_format::scientific, 413,\r\n        \"4.\"\r\n        \"6614629570001286970305029922833855996435544290707221049742369565549491252754407522546319808194066780468018\"\r\n        \"8149306091148255053797266083805760530168847127528157913567358046121528493276456330992178757689645696990213\"\r\n        \"9888639462407938451511945943665480960779903195431589148966824493504754516942070225295085766045545422848282\"\r\n        \"76922865488384607689555661687380730180088970899998017209664435966942619415931403636932373046875e-156\"},\r\n    {0x1.fffffffffffffp-516, chars_format::scientific, 412,\r\n        \"9.\"\r\n        \"3229259140002573940610059845667711992871088581414442099484739131098982505508815045092639616388133560936037\"\r\n        \"6298612182296510107594532167611521060337694255056315827134716092243056986552912661984357515379291393980427\"\r\n        \"9777278924815876903023891887330961921559806390863178297933648987009509033884140450590171532091090845696565\"\r\n        \"5384573097676921537911132337476146036017794179999603441932887193388523883186280727386474609375e-156\"},\r\n    {0x1.fffffffffffffp-515, chars_format::scientific, 412,\r\n        \"1.\"\r\n        \"8645851828000514788122011969133542398574217716282888419896947826219796501101763009018527923277626712187207\"\r\n        \"5259722436459302021518906433522304212067538851011263165426943218448611397310582532396871503075858278796085\"\r\n        \"5955455784963175380604778377466192384311961278172635659586729797401901806776828090118034306418218169139313\"\r\n        \"1076914619535384307582226467495229207203558835999920688386577438677704776637256145477294921875e-155\"},\r\n    {0x1.fffffffffffffp-514, chars_format::scientific, 411,\r\n        \"3.\"\r\n        \"7291703656001029576244023938267084797148435432565776839793895652439593002203526018037055846555253424374415\"\r\n        \"0519444872918604043037812867044608424135077702022526330853886436897222794621165064793743006151716557592171\"\r\n        \"1910911569926350761209556754932384768623922556345271319173459594803803613553656180236068612836436338278626\"\r\n        \"215382923907076861516445293499045841440711767199984137677315487735540955327451229095458984375e-155\"},\r\n    {0x1.fffffffffffffp-513, chars_format::scientific, 410,\r\n        \"7.\"\r\n        \"4583407312002059152488047876534169594296870865131553679587791304879186004407052036074111693110506848748830\"\r\n        \"1038889745837208086075625734089216848270155404045052661707772873794445589242330129587486012303433115184342\"\r\n        \"3821823139852701522419113509864769537247845112690542638346919189607607227107312360472137225672872676557252\"\r\n        \"43076584781415372303289058699809168288142353439996827535463097547108191065490245819091796875e-155\"},\r\n    {0x1.fffffffffffffp-512, chars_format::scientific, 410,\r\n        \"1.\"\r\n        \"4916681462400411830497609575306833918859374173026310735917558260975837200881410407214822338622101369749766\"\r\n        \"0207777949167441617215125146817843369654031080809010532341554574758889117848466025917497202460686623036868\"\r\n        \"4764364627970540304483822701972953907449569022538108527669383837921521445421462472094427445134574535311450\"\r\n        \"48615316956283074460657811739961833657628470687999365507092619509421638213098049163818359375e-154\"},\r\n    {0x1.fffffffffffffp-511, chars_format::scientific, 409,\r\n        \"2.\"\r\n        \"9833362924800823660995219150613667837718748346052621471835116521951674401762820814429644677244202739499532\"\r\n        \"0415555898334883234430250293635686739308062161618021064683109149517778235696932051834994404921373246073736\"\r\n        \"9528729255941080608967645403945907814899138045076217055338767675843042890842924944188854890269149070622900\"\r\n        \"9723063391256614892131562347992366731525694137599873101418523901884327642619609832763671875e-154\"},\r\n    {0x1.fffffffffffffp-510, chars_format::scientific, 408,\r\n        \"5.\"\r\n        \"9666725849601647321990438301227335675437496692105242943670233043903348803525641628859289354488405478999064\"\r\n        \"0831111796669766468860500587271373478616124323236042129366218299035556471393864103669988809842746492147473\"\r\n        \"9057458511882161217935290807891815629798276090152434110677535351686085781685849888377709780538298141245801\"\r\n        \"944612678251322978426312469598473346305138827519974620283704780376865528523921966552734375e-154\"},\r\n    {0x1.fffffffffffffp-509, chars_format::scientific, 408,\r\n        \"1.\"\r\n        \"1933345169920329464398087660245467135087499338421048588734046608780669760705128325771857870897681095799812\"\r\n        \"8166222359333953293772100117454274695723224864647208425873243659807111294278772820733997761968549298429494\"\r\n        \"7811491702376432243587058161578363125959655218030486822135507070337217156337169977675541956107659628249160\"\r\n        \"388922535650264595685262493919694669261027765503994924056740956075373105704784393310546875e-153\"},\r\n    {0x1.fffffffffffffp-508, chars_format::scientific, 407,\r\n        \"2.\"\r\n        \"3866690339840658928796175320490934270174998676842097177468093217561339521410256651543715741795362191599625\"\r\n        \"6332444718667906587544200234908549391446449729294416851746487319614222588557545641467995523937098596858989\"\r\n        \"5622983404752864487174116323156726251919310436060973644271014140674434312674339955351083912215319256498320\"\r\n        \"77784507130052919137052498783938933852205553100798984811348191215074621140956878662109375e-153\"},\r\n    {0x1.fffffffffffffp-507, chars_format::scientific, 406,\r\n        \"4.\"\r\n        \"7733380679681317857592350640981868540349997353684194354936186435122679042820513303087431483590724383199251\"\r\n        \"2664889437335813175088400469817098782892899458588833703492974639228445177115091282935991047874197193717979\"\r\n        \"1245966809505728974348232646313452503838620872121947288542028281348868625348679910702167824430638512996641\"\r\n        \"5556901426010583827410499756787786770441110620159796962269638243014924228191375732421875e-153\"},\r\n    {0x1.fffffffffffffp-506, chars_format::scientific, 405,\r\n        \"9.\"\r\n        \"5466761359362635715184701281963737080699994707368388709872372870245358085641026606174862967181448766398502\"\r\n        \"5329778874671626350176800939634197565785798917177667406985949278456890354230182565871982095748394387435958\"\r\n        \"2491933619011457948696465292626905007677241744243894577084056562697737250697359821404335648861277025993283\"\r\n        \"111380285202116765482099951357557354088222124031959392453927648602984845638275146484375e-153\"},\r\n    {0x1.fffffffffffffp-505, chars_format::scientific, 405,\r\n        \"1.\"\r\n        \"9093352271872527143036940256392747416139998941473677741974474574049071617128205321234972593436289753279700\"\r\n        \"5065955774934325270035360187926839513157159783435533481397189855691378070846036513174396419149678877487191\"\r\n        \"6498386723802291589739293058525381001535448348848778915416811312539547450139471964280867129772255405198656\"\r\n        \"622276057040423353096419990271511470817644424806391878490785529720596969127655029296875e-152\"},\r\n    {0x1.fffffffffffffp-504, chars_format::scientific, 404,\r\n        \"3.\"\r\n        \"8186704543745054286073880512785494832279997882947355483948949148098143234256410642469945186872579506559401\"\r\n        \"0131911549868650540070720375853679026314319566871066962794379711382756141692073026348792838299357754974383\"\r\n        \"2996773447604583179478586117050762003070896697697557830833622625079094900278943928561734259544510810397313\"\r\n        \"24455211408084670619283998054302294163528884961278375698157105944119393825531005859375e-152\"},\r\n    {0x1.fffffffffffffp-503, chars_format::scientific, 403,\r\n        \"7.\"\r\n        \"6373409087490108572147761025570989664559995765894710967897898296196286468512821284939890373745159013118802\"\r\n        \"0263823099737301080141440751707358052628639133742133925588759422765512283384146052697585676598715509948766\"\r\n        \"5993546895209166358957172234101524006141793395395115661667245250158189800557887857123468519089021620794626\"\r\n        \"4891042281616934123856799610860458832705776992255675139631421188823878765106201171875e-152\"},\r\n    {0x1.fffffffffffffp-502, chars_format::scientific, 403,\r\n        \"1.\"\r\n        \"5274681817498021714429552205114197932911999153178942193579579659239257293702564256987978074749031802623760\"\r\n        \"4052764619947460216028288150341471610525727826748426785117751884553102456676829210539517135319743101989753\"\r\n        \"3198709379041833271791434446820304801228358679079023132333449050031637960111577571424693703817804324158925\"\r\n        \"2978208456323386824771359922172091766541155398451135027926284237764775753021240234375e-151\"},\r\n    {0x1.fffffffffffffp-501, chars_format::scientific, 402,\r\n        \"3.\"\r\n        \"0549363634996043428859104410228395865823998306357884387159159318478514587405128513975956149498063605247520\"\r\n        \"8105529239894920432056576300682943221051455653496853570235503769106204913353658421079034270639486203979506\"\r\n        \"6397418758083666543582868893640609602456717358158046264666898100063275920223155142849387407635608648317850\"\r\n        \"595641691264677364954271984434418353308231079690227005585256847552955150604248046875e-151\"},\r\n    {0x1.fffffffffffffp-500, chars_format::scientific, 401,\r\n        \"6.\"\r\n        \"1098727269992086857718208820456791731647996612715768774318318636957029174810257027951912298996127210495041\"\r\n        \"6211058479789840864113152601365886442102911306993707140471007538212409826707316842158068541278972407959013\"\r\n        \"2794837516167333087165737787281219204913434716316092529333796200126551840446310285698774815271217296635701\"\r\n        \"19128338252935472990854396886883670661646215938045401117051369510591030120849609375e-151\"},\r\n    {0x1.fffffffffffffp-499, chars_format::scientific, 401,\r\n        \"1.\"\r\n        \"2219745453998417371543641764091358346329599322543153754863663727391405834962051405590382459799225442099008\"\r\n        \"3242211695957968172822630520273177288420582261398741428094201507642481965341463368431613708255794481591802\"\r\n        \"6558967503233466617433147557456243840982686943263218505866759240025310368089262057139754963054243459327140\"\r\n        \"23825667650587094598170879377376734132329243187609080223410273902118206024169921875e-150\"},\r\n    {0x1.fffffffffffffp-498, chars_format::scientific, 400,\r\n        \"2.\"\r\n        \"4439490907996834743087283528182716692659198645086307509727327454782811669924102811180764919598450884198016\"\r\n        \"6484423391915936345645261040546354576841164522797482856188403015284963930682926736863227416511588963183605\"\r\n        \"3117935006466933234866295114912487681965373886526437011733518480050620736178524114279509926108486918654280\"\r\n        \"4765133530117418919634175875475346826465848637521816044682054780423641204833984375e-150\"},\r\n    {0x1.fffffffffffffp-497, chars_format::scientific, 399,\r\n        \"4.\"\r\n        \"8878981815993669486174567056365433385318397290172615019454654909565623339848205622361529839196901768396033\"\r\n        \"2968846783831872691290522081092709153682329045594965712376806030569927861365853473726454833023177926367210\"\r\n        \"6235870012933866469732590229824975363930747773052874023467036960101241472357048228559019852216973837308560\"\r\n        \"953026706023483783926835175095069365293169727504363208936410956084728240966796875e-150\"},\r\n    {0x1.fffffffffffffp-496, chars_format::scientific, 398,\r\n        \"9.\"\r\n        \"7757963631987338972349134112730866770636794580345230038909309819131246679696411244723059678393803536792066\"\r\n        \"5937693567663745382581044162185418307364658091189931424753612061139855722731706947452909666046355852734421\"\r\n        \"2471740025867732939465180459649950727861495546105748046934073920202482944714096457118039704433947674617121\"\r\n        \"90605341204696756785367035019013873058633945500872641787282191216945648193359375e-150\"},\r\n    {0x1.fffffffffffffp-495, chars_format::scientific, 398,\r\n        \"1.\"\r\n        \"9551592726397467794469826822546173354127358916069046007781861963826249335939282248944611935678760707358413\"\r\n        \"3187538713532749076516208832437083661472931618237986284950722412227971144546341389490581933209271170546884\"\r\n        \"2494348005173546587893036091929990145572299109221149609386814784040496588942819291423607940886789534923424\"\r\n        \"38121068240939351357073407003802774611726789100174528357456438243389129638671875e-149\"},\r\n    {0x1.fffffffffffffp-494, chars_format::scientific, 397,\r\n        \"3.\"\r\n        \"9103185452794935588939653645092346708254717832138092015563723927652498671878564497889223871357521414716826\"\r\n        \"6375077427065498153032417664874167322945863236475972569901444824455942289092682778981163866418542341093768\"\r\n        \"4988696010347093175786072183859980291144598218442299218773629568080993177885638582847215881773579069846848\"\r\n        \"7624213648187870271414681400760554922345357820034905671491287648677825927734375e-149\"},\r\n    {0x1.fffffffffffffp-493, chars_format::scientific, 396,\r\n        \"7.\"\r\n        \"8206370905589871177879307290184693416509435664276184031127447855304997343757128995778447742715042829433653\"\r\n        \"2750154854130996306064835329748334645891726472951945139802889648911884578185365557962327732837084682187536\"\r\n        \"9977392020694186351572144367719960582289196436884598437547259136161986355771277165694431763547158139693697\"\r\n        \"524842729637574054282936280152110984469071564006981134298257529735565185546875e-149\"},\r\n    {0x1.fffffffffffffp-492, chars_format::scientific, 396,\r\n        \"1.\"\r\n        \"5641274181117974235575861458036938683301887132855236806225489571060999468751425799155689548543008565886730\"\r\n        \"6550030970826199261212967065949666929178345294590389027960577929782376915637073111592465546567416936437507\"\r\n        \"3995478404138837270314428873543992116457839287376919687509451827232397271154255433138886352709431627938739\"\r\n        \"504968545927514810856587256030422196893814312801396226859651505947113037109375e-148\"},\r\n    {0x1.fffffffffffffp-491, chars_format::scientific, 395,\r\n        \"3.\"\r\n        \"1282548362235948471151722916073877366603774265710473612450979142121998937502851598311379097086017131773461\"\r\n        \"3100061941652398522425934131899333858356690589180778055921155859564753831274146223184931093134833872875014\"\r\n        \"7990956808277674540628857747087984232915678574753839375018903654464794542308510866277772705418863255877479\"\r\n        \"00993709185502962171317451206084439378762862560279245371930301189422607421875e-148\"},\r\n    {0x1.fffffffffffffp-490, chars_format::scientific, 394,\r\n        \"6.\"\r\n        \"2565096724471896942303445832147754733207548531420947224901958284243997875005703196622758194172034263546922\"\r\n        \"6200123883304797044851868263798667716713381178361556111842311719129507662548292446369862186269667745750029\"\r\n        \"5981913616555349081257715494175968465831357149507678750037807308929589084617021732555545410837726511754958\"\r\n        \"0198741837100592434263490241216887875752572512055849074386060237884521484375e-148\"},\r\n    {0x1.fffffffffffffp-489, chars_format::scientific, 394,\r\n        \"1.\"\r\n        \"2513019344894379388460689166429550946641509706284189444980391656848799575001140639324551638834406852709384\"\r\n        \"5240024776660959408970373652759733543342676235672311222368462343825901532509658489273972437253933549150005\"\r\n        \"9196382723311069816251543098835193693166271429901535750007561461785917816923404346511109082167545302350991\"\r\n        \"6039748367420118486852698048243377575150514502411169814877212047576904296875e-147\"},\r\n    {0x1.fffffffffffffp-488, chars_format::scientific, 393,\r\n        \"2.\"\r\n        \"5026038689788758776921378332859101893283019412568378889960783313697599150002281278649103277668813705418769\"\r\n        \"0480049553321918817940747305519467086685352471344622444736924687651803065019316978547944874507867098300011\"\r\n        \"8392765446622139632503086197670387386332542859803071500015122923571835633846808693022218164335090604701983\"\r\n        \"207949673484023697370539609648675515030102900482233962975442409515380859375e-147\"},\r\n    {0x1.fffffffffffffp-487, chars_format::scientific, 392,\r\n        \"5.\"\r\n        \"0052077379577517553842756665718203786566038825136757779921566627395198300004562557298206555337627410837538\"\r\n        \"0960099106643837635881494611038934173370704942689244889473849375303606130038633957095889749015734196600023\"\r\n        \"6785530893244279265006172395340774772665085719606143000030245847143671267693617386044436328670181209403966\"\r\n        \"41589934696804739474107921929735103006020580096446792595088481903076171875e-147\"},\r\n    {0x1.fffffffffffffp-486, chars_format::scientific, 392,\r\n        \"1.\"\r\n        \"0010415475915503510768551333143640757313207765027351555984313325479039660000912511459641311067525482167507\"\r\n        \"6192019821328767527176298922207786834674140988537848977894769875060721226007726791419177949803146839320004\"\r\n        \"7357106178648855853001234479068154954533017143921228600006049169428734253538723477208887265734036241880793\"\r\n        \"28317986939360947894821584385947020601204116019289358519017696380615234375e-146\"},\r\n    {0x1.fffffffffffffp-485, chars_format::scientific, 391,\r\n        \"2.\"\r\n        \"0020830951831007021537102666287281514626415530054703111968626650958079320001825022919282622135050964335015\"\r\n        \"2384039642657535054352597844415573669348281977075697955789539750121442452015453582838355899606293678640009\"\r\n        \"4714212357297711706002468958136309909066034287842457200012098338857468507077446954417774531468072483761586\"\r\n        \"5663597387872189578964316877189404120240823203857871703803539276123046875e-146\"},\r\n    {0x1.fffffffffffffp-484, chars_format::scientific, 390,\r\n        \"4.\"\r\n        \"0041661903662014043074205332574563029252831060109406223937253301916158640003650045838565244270101928670030\"\r\n        \"4768079285315070108705195688831147338696563954151395911579079500242884904030907165676711799212587357280018\"\r\n        \"9428424714595423412004937916272619818132068575684914400024196677714937014154893908835549062936144967523173\"\r\n        \"132719477574437915792863375437880824048164640771574340760707855224609375e-146\"},\r\n    {0x1.fffffffffffffp-483, chars_format::scientific, 389,\r\n        \"8.\"\r\n        \"0083323807324028086148410665149126058505662120218812447874506603832317280007300091677130488540203857340060\"\r\n        \"9536158570630140217410391377662294677393127908302791823158159000485769808061814331353423598425174714560037\"\r\n        \"8856849429190846824009875832545239636264137151369828800048393355429874028309787817671098125872289935046346\"\r\n        \"26543895514887583158572675087576164809632928154314868152141571044921875e-146\"},\r\n    {0x1.fffffffffffffp-482, chars_format::scientific, 389,\r\n        \"1.\"\r\n        \"6016664761464805617229682133029825211701132424043762489574901320766463456001460018335426097708040771468012\"\r\n        \"1907231714126028043482078275532458935478625581660558364631631800097153961612362866270684719685034942912007\"\r\n        \"5771369885838169364801975166509047927252827430273965760009678671085974805661957563534219625174457987009269\"\r\n        \"25308779102977516631714535017515232961926585630862973630428314208984375e-145\"},\r\n    {0x1.fffffffffffffp-481, chars_format::scientific, 388,\r\n        \"3.\"\r\n        \"2033329522929611234459364266059650423402264848087524979149802641532926912002920036670852195416081542936024\"\r\n        \"3814463428252056086964156551064917870957251163321116729263263600194307923224725732541369439370069885824015\"\r\n        \"1542739771676338729603950333018095854505654860547931520019357342171949611323915127068439250348915974018538\"\r\n        \"5061755820595503326342907003503046592385317126172594726085662841796875e-145\"},\r\n    {0x1.fffffffffffffp-480, chars_format::scientific, 387,\r\n        \"6.\"\r\n        \"4066659045859222468918728532119300846804529696175049958299605283065853824005840073341704390832163085872048\"\r\n        \"7628926856504112173928313102129835741914502326642233458526527200388615846449451465082738878740139771648030\"\r\n        \"3085479543352677459207900666036191709011309721095863040038714684343899222647830254136878500697831948037077\"\r\n        \"012351164119100665268581400700609318477063425234518945217132568359375e-145\"},\r\n    {0x1.fffffffffffffp-479, chars_format::scientific, 387,\r\n        \"1.\"\r\n        \"2813331809171844493783745706423860169360905939235009991659921056613170764801168014668340878166432617174409\"\r\n        \"7525785371300822434785662620425967148382900465328446691705305440077723169289890293016547775748027954329606\"\r\n        \"0617095908670535491841580133207238341802261944219172608007742936868779844529566050827375700139566389607415\"\r\n        \"402470232823820133053716280140121863695412685046903789043426513671875e-144\"},\r\n    {0x1.fffffffffffffp-478, chars_format::scientific, 386,\r\n        \"2.\"\r\n        \"5626663618343688987567491412847720338721811878470019983319842113226341529602336029336681756332865234348819\"\r\n        \"5051570742601644869571325240851934296765800930656893383410610880155446338579780586033095551496055908659212\"\r\n        \"1234191817341070983683160266414476683604523888438345216015485873737559689059132101654751400279132779214830\"\r\n        \"80494046564764026610743256028024372739082537009380757808685302734375e-144\"},\r\n    {0x1.fffffffffffffp-477, chars_format::scientific, 385,\r\n        \"5.\"\r\n        \"1253327236687377975134982825695440677443623756940039966639684226452683059204672058673363512665730468697639\"\r\n        \"0103141485203289739142650481703868593531601861313786766821221760310892677159561172066191102992111817318424\"\r\n        \"2468383634682141967366320532828953367209047776876690432030971747475119378118264203309502800558265558429661\"\r\n        \"6098809312952805322148651205604874547816507401876151561737060546875e-144\"},\r\n    {0x1.fffffffffffffp-476, chars_format::scientific, 385,\r\n        \"1.\"\r\n        \"0250665447337475595026996565139088135488724751388007993327936845290536611840934411734672702533146093739527\"\r\n        \"8020628297040657947828530096340773718706320372262757353364244352062178535431912234413238220598422363463684\"\r\n        \"8493676726936428393473264106565790673441809555375338086406194349495023875623652840661900560111653111685932\"\r\n        \"3219761862590561064429730241120974909563301480375230312347412109375e-143\"},\r\n    {0x1.fffffffffffffp-475, chars_format::scientific, 384,\r\n        \"2.\"\r\n        \"0501330894674951190053993130278176270977449502776015986655873690581073223681868823469345405066292187479055\"\r\n        \"6041256594081315895657060192681547437412640744525514706728488704124357070863824468826476441196844726927369\"\r\n        \"6987353453872856786946528213131581346883619110750676172812388698990047751247305681323801120223306223371864\"\r\n        \"643952372518112212885946048224194981912660296075046062469482421875e-143\"},\r\n    {0x1.fffffffffffffp-474, chars_format::scientific, 383,\r\n        \"4.\"\r\n        \"1002661789349902380107986260556352541954899005552031973311747381162146447363737646938690810132584374958111\"\r\n        \"2082513188162631791314120385363094874825281489051029413456977408248714141727648937652952882393689453854739\"\r\n        \"3974706907745713573893056426263162693767238221501352345624777397980095502494611362647602240446612446743729\"\r\n        \"28790474503622442577189209644838996382532059215009212493896484375e-143\"},\r\n    {0x1.fffffffffffffp-473, chars_format::scientific, 382,\r\n        \"8.\"\r\n        \"2005323578699804760215972521112705083909798011104063946623494762324292894727475293877381620265168749916222\"\r\n        \"4165026376325263582628240770726189749650562978102058826913954816497428283455297875305905764787378907709478\"\r\n        \"7949413815491427147786112852526325387534476443002704691249554795960191004989222725295204480893224893487458\"\r\n        \"5758094900724488515437841928967799276506411843001842498779296875e-143\"},\r\n    {0x1.fffffffffffffp-472, chars_format::scientific, 382,\r\n        \"1.\"\r\n        \"6401064715739960952043194504222541016781959602220812789324698952464858578945495058775476324053033749983244\"\r\n        \"4833005275265052716525648154145237949930112595620411765382790963299485656691059575061181152957475781541895\"\r\n        \"7589882763098285429557222570505265077506895288600540938249910959192038200997844545059040896178644978697491\"\r\n        \"7151618980144897703087568385793559855301282368600368499755859375e-142\"},\r\n    {0x1.fffffffffffffp-471, chars_format::scientific, 381,\r\n        \"3.\"\r\n        \"2802129431479921904086389008445082033563919204441625578649397904929717157890990117550952648106067499966488\"\r\n        \"9666010550530105433051296308290475899860225191240823530765581926598971313382119150122362305914951563083791\"\r\n        \"5179765526196570859114445141010530155013790577201081876499821918384076401995689090118081792357289957394983\"\r\n        \"430323796028979540617513677158711971060256473720073699951171875e-142\"},\r\n    {0x1.fffffffffffffp-470, chars_format::scientific, 380,\r\n        \"6.\"\r\n        \"5604258862959843808172778016890164067127838408883251157298795809859434315781980235101905296212134999932977\"\r\n        \"9332021101060210866102592616580951799720450382481647061531163853197942626764238300244724611829903126167583\"\r\n        \"0359531052393141718228890282021060310027581154402163752999643836768152803991378180236163584714579914789966\"\r\n        \"86064759205795908123502735431742394212051294744014739990234375e-142\"},\r\n    {0x1.fffffffffffffp-469, chars_format::scientific, 380,\r\n        \"1.\"\r\n        \"3120851772591968761634555603378032813425567681776650231459759161971886863156396047020381059242426999986595\"\r\n        \"5866404220212042173220518523316190359944090076496329412306232770639588525352847660048944922365980625233516\"\r\n        \"6071906210478628343645778056404212062005516230880432750599928767353630560798275636047232716942915982957993\"\r\n        \"37212951841159181624700547086348478842410258948802947998046875e-141\"},\r\n    {0x1.fffffffffffffp-468, chars_format::scientific, 379,\r\n        \"2.\"\r\n        \"6241703545183937523269111206756065626851135363553300462919518323943773726312792094040762118484853999973191\"\r\n        \"1732808440424084346441037046632380719888180152992658824612465541279177050705695320097889844731961250467033\"\r\n        \"2143812420957256687291556112808424124011032461760865501199857534707261121596551272094465433885831965915986\"\r\n        \"7442590368231836324940109417269695768482051789760589599609375e-141\"},\r\n    {0x1.fffffffffffffp-467, chars_format::scientific, 378,\r\n        \"5.\"\r\n        \"2483407090367875046538222413512131253702270727106600925839036647887547452625584188081524236969707999946382\"\r\n        \"3465616880848168692882074093264761439776360305985317649224931082558354101411390640195779689463922500934066\"\r\n        \"4287624841914513374583112225616848248022064923521731002399715069414522243193102544188930867771663931831973\"\r\n        \"488518073646367264988021883453939153696410357952117919921875e-141\"},\r\n    {0x1.fffffffffffffp-466, chars_format::scientific, 378,\r\n        \"1.\"\r\n        \"0496681418073575009307644482702426250740454145421320185167807329577509490525116837616304847393941599989276\"\r\n        \"4693123376169633738576414818652952287955272061197063529844986216511670820282278128039155937892784500186813\"\r\n        \"2857524968382902674916622445123369649604412984704346200479943013882904448638620508837786173554332786366394\"\r\n        \"697703614729273452997604376690787830739282071590423583984375e-140\"},\r\n    {0x1.fffffffffffffp-465, chars_format::scientific, 377,\r\n        \"2.\"\r\n        \"0993362836147150018615288965404852501480908290842640370335614659155018981050233675232609694787883199978552\"\r\n        \"9386246752339267477152829637305904575910544122394127059689972433023341640564556256078311875785569000373626\"\r\n        \"5715049936765805349833244890246739299208825969408692400959886027765808897277241017675572347108665572732789\"\r\n        \"39540722945854690599520875338157566147856414318084716796875e-140\"},\r\n    {0x1.fffffffffffffp-464, chars_format::scientific, 376,\r\n        \"4.\"\r\n        \"1986725672294300037230577930809705002961816581685280740671229318310037962100467350465219389575766399957105\"\r\n        \"8772493504678534954305659274611809151821088244788254119379944866046683281129112512156623751571138000747253\"\r\n        \"1430099873531610699666489780493478598417651938817384801919772055531617794554482035351144694217331145465578\"\r\n        \"7908144589170938119904175067631513229571282863616943359375e-140\"},\r\n    {0x1.fffffffffffffp-463, chars_format::scientific, 375,\r\n        \"8.\"\r\n        \"3973451344588600074461155861619410005923633163370561481342458636620075924200934700930438779151532799914211\"\r\n        \"7544987009357069908611318549223618303642176489576508238759889732093366562258225024313247503142276001494506\"\r\n        \"2860199747063221399332979560986957196835303877634769603839544111063235589108964070702289388434662290931157\"\r\n        \"581628917834187623980835013526302645914256572723388671875e-140\"},\r\n    {0x1.fffffffffffffp-462, chars_format::scientific, 375,\r\n        \"1.\"\r\n        \"6794690268917720014892231172323882001184726632674112296268491727324015184840186940186087755830306559982842\"\r\n        \"3508997401871413981722263709844723660728435297915301647751977946418673312451645004862649500628455200298901\"\r\n        \"2572039949412644279866595912197391439367060775526953920767908822212647117821792814140457877686932458186231\"\r\n        \"516325783566837524796167002705260529182851314544677734375e-139\"},\r\n    {0x1.fffffffffffffp-461, chars_format::scientific, 374,\r\n        \"3.\"\r\n        \"3589380537835440029784462344647764002369453265348224592536983454648030369680373880372175511660613119965684\"\r\n        \"7017994803742827963444527419689447321456870595830603295503955892837346624903290009725299001256910400597802\"\r\n        \"5144079898825288559733191824394782878734121551053907841535817644425294235643585628280915755373864916372463\"\r\n        \"03265156713367504959233400541052105836570262908935546875e-139\"},\r\n    {0x1.fffffffffffffp-460, chars_format::scientific, 373,\r\n        \"6.\"\r\n        \"7178761075670880059568924689295528004738906530696449185073966909296060739360747760744351023321226239931369\"\r\n        \"4035989607485655926889054839378894642913741191661206591007911785674693249806580019450598002513820801195605\"\r\n        \"0288159797650577119466383648789565757468243102107815683071635288850588471287171256561831510747729832744926\"\r\n        \"0653031342673500991846680108210421167314052581787109375e-139\"},\r\n    {0x1.fffffffffffffp-459, chars_format::scientific, 373,\r\n        \"1.\"\r\n        \"3435752215134176011913784937859105600947781306139289837014793381859212147872149552148870204664245247986273\"\r\n        \"8807197921497131185377810967875778928582748238332241318201582357134938649961316003890119600502764160239121\"\r\n        \"0057631959530115423893276729757913151493648620421563136614327057770117694257434251312366302149545966548985\"\r\n        \"2130606268534700198369336021642084233462810516357421875e-138\"},\r\n    {0x1.fffffffffffffp-458, chars_format::scientific, 372,\r\n        \"2.\"\r\n        \"6871504430268352023827569875718211201895562612278579674029586763718424295744299104297740409328490495972547\"\r\n        \"7614395842994262370755621935751557857165496476664482636403164714269877299922632007780239201005528320478242\"\r\n        \"0115263919060230847786553459515826302987297240843126273228654115540235388514868502624732604299091933097970\"\r\n        \"426121253706940039673867204328416846692562103271484375e-138\"},\r\n    {0x1.fffffffffffffp-457, chars_format::scientific, 371,\r\n        \"5.\"\r\n        \"3743008860536704047655139751436422403791125224557159348059173527436848591488598208595480818656980991945095\"\r\n        \"5228791685988524741511243871503115714330992953328965272806329428539754599845264015560478402011056640956484\"\r\n        \"0230527838120461695573106919031652605974594481686252546457308231080470777029737005249465208598183866195940\"\r\n        \"85224250741388007934773440865683369338512420654296875e-138\"},\r\n    {0x1.fffffffffffffp-456, chars_format::scientific, 371,\r\n        \"1.\"\r\n        \"0748601772107340809531027950287284480758225044911431869611834705487369718297719641719096163731396198389019\"\r\n        \"1045758337197704948302248774300623142866198590665793054561265885707950919969052803112095680402211328191296\"\r\n        \"8046105567624092339114621383806330521194918896337250509291461646216094155405947401049893041719636773239188\"\r\n        \"17044850148277601586954688173136673867702484130859375e-137\"},\r\n    {0x1.fffffffffffffp-455, chars_format::scientific, 370,\r\n        \"2.\"\r\n        \"1497203544214681619062055900574568961516450089822863739223669410974739436595439283438192327462792396778038\"\r\n        \"2091516674395409896604497548601246285732397181331586109122531771415901839938105606224191360804422656382593\"\r\n        \"6092211135248184678229242767612661042389837792674501018582923292432188310811894802099786083439273546478376\"\r\n        \"3408970029655520317390937634627334773540496826171875e-137\"},\r\n    {0x1.fffffffffffffp-454, chars_format::scientific, 369,\r\n        \"4.\"\r\n        \"2994407088429363238124111801149137923032900179645727478447338821949478873190878566876384654925584793556076\"\r\n        \"4183033348790819793208995097202492571464794362663172218245063542831803679876211212448382721608845312765187\"\r\n        \"2184422270496369356458485535225322084779675585349002037165846584864376621623789604199572166878547092956752\"\r\n        \"681794005931104063478187526925466954708099365234375e-137\"},\r\n    {0x1.fffffffffffffp-453, chars_format::scientific, 368,\r\n        \"8.\"\r\n        \"5988814176858726476248223602298275846065800359291454956894677643898957746381757133752769309851169587112152\"\r\n        \"8366066697581639586417990194404985142929588725326344436490127085663607359752422424896765443217690625530374\"\r\n        \"4368844540992738712916971070450644169559351170698004074331693169728753243247579208399144333757094185913505\"\r\n        \"36358801186220812695637505385093390941619873046875e-137\"},\r\n    {0x1.fffffffffffffp-452, chars_format::scientific, 368,\r\n        \"1.\"\r\n        \"7197762835371745295249644720459655169213160071858290991378935528779791549276351426750553861970233917422430\"\r\n        \"5673213339516327917283598038880997028585917745065268887298025417132721471950484484979353088643538125106074\"\r\n        \"8873768908198547742583394214090128833911870234139600814866338633945750648649515841679828866751418837182701\"\r\n        \"07271760237244162539127501077018678188323974609375e-136\"},\r\n    {0x1.fffffffffffffp-451, chars_format::scientific, 367,\r\n        \"3.\"\r\n        \"4395525670743490590499289440919310338426320143716581982757871057559583098552702853501107723940467834844861\"\r\n        \"1346426679032655834567196077761994057171835490130537774596050834265442943900968969958706177287076250212149\"\r\n        \"7747537816397095485166788428180257667823740468279201629732677267891501297299031683359657733502837674365402\"\r\n        \"1454352047448832507825500215403735637664794921875e-136\"},\r\n    {0x1.fffffffffffffp-450, chars_format::scientific, 366,\r\n        \"6.\"\r\n        \"8791051341486981180998578881838620676852640287433163965515742115119166197105405707002215447880935669689722\"\r\n        \"2692853358065311669134392155523988114343670980261075549192101668530885887801937939917412354574152500424299\"\r\n        \"5495075632794190970333576856360515335647480936558403259465354535783002594598063366719315467005675348730804\"\r\n        \"290870409489766501565100043080747127532958984375e-136\"},\r\n    {0x1.fffffffffffffp-449, chars_format::scientific, 366,\r\n        \"1.\"\r\n        \"3758210268297396236199715776367724135370528057486632793103148423023833239421081141400443089576187133937944\"\r\n        \"4538570671613062333826878431104797622868734196052215109838420333706177177560387587983482470914830500084859\"\r\n        \"9099015126558838194066715371272103067129496187311680651893070907156600518919612673343863093401135069746160\"\r\n        \"858174081897953300313020008616149425506591796875e-135\"},\r\n    {0x1.fffffffffffffp-448, chars_format::scientific, 365,\r\n        \"2.\"\r\n        \"7516420536594792472399431552735448270741056114973265586206296846047666478842162282800886179152374267875888\"\r\n        \"9077141343226124667653756862209595245737468392104430219676840667412354355120775175966964941829661000169719\"\r\n        \"8198030253117676388133430742544206134258992374623361303786141814313201037839225346687726186802270139492321\"\r\n        \"71634816379590660062604001723229885101318359375e-135\"},\r\n    {0x1.fffffffffffffp-447, chars_format::scientific, 364,\r\n        \"5.\"\r\n        \"5032841073189584944798863105470896541482112229946531172412593692095332957684324565601772358304748535751777\"\r\n        \"8154282686452249335307513724419190491474936784208860439353681334824708710241550351933929883659322000339439\"\r\n        \"6396060506235352776266861485088412268517984749246722607572283628626402075678450693375452373604540278984643\"\r\n        \"4326963275918132012520800344645977020263671875e-135\"},\r\n    {0x1.fffffffffffffp-446, chars_format::scientific, 364,\r\n        \"1.\"\r\n        \"1006568214637916988959772621094179308296422445989306234482518738419066591536864913120354471660949707150355\"\r\n        \"5630856537290449867061502744883838098294987356841772087870736266964941742048310070386785976731864400067887\"\r\n        \"9279212101247070555253372297017682453703596949849344521514456725725280415135690138675090474720908055796928\"\r\n        \"6865392655183626402504160068929195404052734375e-134\"},\r\n    {0x1.fffffffffffffp-445, chars_format::scientific, 363,\r\n        \"2.\"\r\n        \"2013136429275833977919545242188358616592844891978612468965037476838133183073729826240708943321899414300711\"\r\n        \"1261713074580899734123005489767676196589974713683544175741472533929883484096620140773571953463728800135775\"\r\n        \"8558424202494141110506744594035364907407193899698689043028913451450560830271380277350180949441816111593857\"\r\n        \"373078531036725280500832013785839080810546875e-134\"},\r\n    {0x1.fffffffffffffp-444, chars_format::scientific, 362,\r\n        \"4.\"\r\n        \"4026272858551667955839090484376717233185689783957224937930074953676266366147459652481417886643798828601422\"\r\n        \"2523426149161799468246010979535352393179949427367088351482945067859766968193240281547143906927457600271551\"\r\n        \"7116848404988282221013489188070729814814387799397378086057826902901121660542760554700361898883632223187714\"\r\n        \"74615706207345056100166402757167816162109375e-134\"},\r\n    {0x1.fffffffffffffp-443, chars_format::scientific, 361,\r\n        \"8.\"\r\n        \"8052545717103335911678180968753434466371379567914449875860149907352532732294919304962835773287597657202844\"\r\n        \"5046852298323598936492021959070704786359898854734176702965890135719533936386480563094287813854915200543103\"\r\n        \"4233696809976564442026978376141459629628775598794756172115653805802243321085521109400723797767264446375429\"\r\n        \"4923141241469011220033280551433563232421875e-134\"},\r\n    {0x1.fffffffffffffp-442, chars_format::scientific, 361,\r\n        \"1.\"\r\n        \"7610509143420667182335636193750686893274275913582889975172029981470506546458983860992567154657519531440568\"\r\n        \"9009370459664719787298404391814140957271979770946835340593178027143906787277296112618857562770983040108620\"\r\n        \"6846739361995312888405395675228291925925755119758951234423130761160448664217104221880144759553452889275085\"\r\n        \"8984628248293802244006656110286712646484375e-133\"},\r\n    {0x1.fffffffffffffp-441, chars_format::scientific, 360,\r\n        \"3.\"\r\n        \"5221018286841334364671272387501373786548551827165779950344059962941013092917967721985134309315039062881137\"\r\n        \"8018740919329439574596808783628281914543959541893670681186356054287813574554592225237715125541966080217241\"\r\n        \"3693478723990625776810791350456583851851510239517902468846261522320897328434208443760289519106905778550171\"\r\n        \"796925649658760448801331222057342529296875e-133\"},\r\n    {0x1.fffffffffffffp-440, chars_format::scientific, 359,\r\n        \"7.\"\r\n        \"0442036573682668729342544775002747573097103654331559900688119925882026185835935443970268618630078125762275\"\r\n        \"6037481838658879149193617567256563829087919083787341362372712108575627149109184450475430251083932160434482\"\r\n        \"7386957447981251553621582700913167703703020479035804937692523044641794656868416887520579038213811557100343\"\r\n        \"59385129931752089760266244411468505859375e-133\"},\r\n    {0x1.fffffffffffffp-439, chars_format::scientific, 359,\r\n        \"1.\"\r\n        \"4088407314736533745868508955000549514619420730866311980137623985176405237167187088794053723726015625152455\"\r\n        \"1207496367731775829838723513451312765817583816757468272474542421715125429821836890095086050216786432086896\"\r\n        \"5477391489596250310724316540182633540740604095807160987538504608928358931373683377504115807642762311420068\"\r\n        \"71877025986350417952053248882293701171875e-132\"},\r\n    {0x1.fffffffffffffp-438, chars_format::scientific, 358,\r\n        \"2.\"\r\n        \"8176814629473067491737017910001099029238841461732623960275247970352810474334374177588107447452031250304910\"\r\n        \"2414992735463551659677447026902625531635167633514936544949084843430250859643673780190172100433572864173793\"\r\n        \"0954782979192500621448633080365267081481208191614321975077009217856717862747366755008231615285524622840137\"\r\n        \"4375405197270083590410649776458740234375e-132\"},\r\n    {0x1.fffffffffffffp-437, chars_format::scientific, 357,\r\n        \"5.\"\r\n        \"6353629258946134983474035820002198058477682923465247920550495940705620948668748355176214894904062500609820\"\r\n        \"4829985470927103319354894053805251063270335267029873089898169686860501719287347560380344200867145728347586\"\r\n        \"1909565958385001242897266160730534162962416383228643950154018435713435725494733510016463230571049245680274\"\r\n        \"875081039454016718082129955291748046875e-132\"},\r\n    {0x1.fffffffffffffp-436, chars_format::scientific, 357,\r\n        \"1.\"\r\n        \"1270725851789226996694807164000439611695536584693049584110099188141124189733749671035242978980812500121964\"\r\n        \"0965997094185420663870978810761050212654067053405974617979633937372100343857469512076068840173429145669517\"\r\n        \"2381913191677000248579453232146106832592483276645728790030803687142687145098946702003292646114209849136054\"\r\n        \"975016207890803343616425991058349609375e-131\"},\r\n    {0x1.fffffffffffffp-435, chars_format::scientific, 356,\r\n        \"2.\"\r\n        \"2541451703578453993389614328000879223391073169386099168220198376282248379467499342070485957961625000243928\"\r\n        \"1931994188370841327741957621522100425308134106811949235959267874744200687714939024152137680346858291339034\"\r\n        \"4763826383354000497158906464292213665184966553291457580061607374285374290197893404006585292228419698272109\"\r\n        \"95003241578160668723285198211669921875e-131\"},\r\n    {0x1.fffffffffffffp-434, chars_format::scientific, 355,\r\n        \"4.\"\r\n        \"5082903407156907986779228656001758446782146338772198336440396752564496758934998684140971915923250000487856\"\r\n        \"3863988376741682655483915243044200850616268213623898471918535749488401375429878048304275360693716582678068\"\r\n        \"9527652766708000994317812928584427330369933106582915160123214748570748580395786808013170584456839396544219\"\r\n        \"9000648315632133744657039642333984375e-131\"},\r\n    {0x1.fffffffffffffp-433, chars_format::scientific, 354,\r\n        \"9.\"\r\n        \"0165806814313815973558457312003516893564292677544396672880793505128993517869997368281943831846500000975712\"\r\n        \"7727976753483365310967830486088401701232536427247796943837071498976802750859756096608550721387433165356137\"\r\n        \"9055305533416001988635625857168854660739866213165830320246429497141497160791573616026341168913678793088439\"\r\n        \"800129663126426748931407928466796875e-131\"},\r\n    {0x1.fffffffffffffp-432, chars_format::scientific, 354,\r\n        \"1.\"\r\n        \"8033161362862763194711691462400703378712858535508879334576158701025798703573999473656388766369300000195142\"\r\n        \"5545595350696673062193566097217680340246507285449559388767414299795360550171951219321710144277486633071227\"\r\n        \"5811061106683200397727125171433770932147973242633166064049285899428299432158314723205268233782735758617687\"\r\n        \"960025932625285349786281585693359375e-130\"},\r\n    {0x1.fffffffffffffp-431, chars_format::scientific, 353,\r\n        \"3.\"\r\n        \"6066322725725526389423382924801406757425717071017758669152317402051597407147998947312777532738600000390285\"\r\n        \"1091190701393346124387132194435360680493014570899118777534828599590721100343902438643420288554973266142455\"\r\n        \"1622122213366400795454250342867541864295946485266332128098571798856598864316629446410536467565471517235375\"\r\n        \"92005186525057069957256317138671875e-130\"},\r\n    {0x1.fffffffffffffp-430, chars_format::scientific, 352,\r\n        \"7.\"\r\n        \"2132645451451052778846765849602813514851434142035517338304634804103194814295997894625555065477200000780570\"\r\n        \"2182381402786692248774264388870721360986029141798237555069657199181442200687804877286840577109946532284910\"\r\n        \"3244244426732801590908500685735083728591892970532664256197143597713197728633258892821072935130943034470751\"\r\n        \"8401037305011413991451263427734375e-130\"},\r\n    {0x1.fffffffffffffp-429, chars_format::scientific, 352,\r\n        \"1.\"\r\n        \"4426529090290210555769353169920562702970286828407103467660926960820638962859199578925111013095440000156114\"\r\n        \"0436476280557338449754852877774144272197205828359647511013931439836288440137560975457368115421989306456982\"\r\n        \"0648848885346560318181700137147016745718378594106532851239428719542639545726651778564214587026188606894150\"\r\n        \"3680207461002282798290252685546875e-129\"},\r\n    {0x1.fffffffffffffp-428, chars_format::scientific, 351,\r\n        \"2.\"\r\n        \"8853058180580421111538706339841125405940573656814206935321853921641277925718399157850222026190880000312228\"\r\n        \"0872952561114676899509705755548288544394411656719295022027862879672576880275121950914736230843978612913964\"\r\n        \"1297697770693120636363400274294033491436757188213065702478857439085279091453303557128429174052377213788300\"\r\n        \"736041492200456559658050537109375e-129\"},\r\n    {0x1.fffffffffffffp-427, chars_format::scientific, 350,\r\n        \"5.\"\r\n        \"7706116361160842223077412679682250811881147313628413870643707843282555851436798315700444052381760000624456\"\r\n        \"1745905122229353799019411511096577088788823313438590044055725759345153760550243901829472461687957225827928\"\r\n        \"2595395541386241272726800548588066982873514376426131404957714878170558182906607114256858348104754427576601\"\r\n        \"47208298440091311931610107421875e-129\"},\r\n    {0x1.fffffffffffffp-426, chars_format::scientific, 350,\r\n        \"1.\"\r\n        \"1541223272232168444615482535936450162376229462725682774128741568656511170287359663140088810476352000124891\"\r\n        \"2349181024445870759803882302219315417757764662687718008811145151869030752110048780365894492337591445165585\"\r\n        \"6519079108277248254545360109717613396574702875285226280991542975634111636581321422851371669620950885515320\"\r\n        \"29441659688018262386322021484375e-128\"},\r\n    {0x1.fffffffffffffp-425, chars_format::scientific, 349,\r\n        \"2.\"\r\n        \"3082446544464336889230965071872900324752458925451365548257483137313022340574719326280177620952704000249782\"\r\n        \"4698362048891741519607764604438630835515529325375436017622290303738061504220097560731788984675182890331171\"\r\n        \"3038158216554496509090720219435226793149405750570452561983085951268223273162642845702743339241901771030640\"\r\n        \"5888331937603652477264404296875e-128\"},\r\n    {0x1.fffffffffffffp-424, chars_format::scientific, 348,\r\n        \"4.\"\r\n        \"6164893088928673778461930143745800649504917850902731096514966274626044681149438652560355241905408000499564\"\r\n        \"9396724097783483039215529208877261671031058650750872035244580607476123008440195121463577969350365780662342\"\r\n        \"6076316433108993018181440438870453586298811501140905123966171902536446546325285691405486678483803542061281\"\r\n        \"177666387520730495452880859375e-128\"},\r\n    {0x1.fffffffffffffp-423, chars_format::scientific, 347,\r\n        \"9.\"\r\n        \"2329786177857347556923860287491601299009835701805462193029932549252089362298877305120710483810816000999129\"\r\n        \"8793448195566966078431058417754523342062117301501744070489161214952246016880390242927155938700731561324685\"\r\n        \"2152632866217986036362880877740907172597623002281810247932343805072893092650571382810973356967607084122562\"\r\n        \"35533277504146099090576171875e-128\"},\r\n    {0x1.fffffffffffffp-422, chars_format::scientific, 347,\r\n        \"1.\"\r\n        \"8465957235571469511384772057498320259801967140361092438605986509850417872459775461024142096762163200199825\"\r\n        \"9758689639113393215686211683550904668412423460300348814097832242990449203376078048585431187740146312264937\"\r\n        \"0430526573243597207272576175548181434519524600456362049586468761014578618530114276562194671393521416824512\"\r\n        \"47106655500829219818115234375e-127\"},\r\n    {0x1.fffffffffffffp-421, chars_format::scientific, 346,\r\n        \"3.\"\r\n        \"6931914471142939022769544114996640519603934280722184877211973019700835744919550922048284193524326400399651\"\r\n        \"9517379278226786431372423367101809336824846920600697628195664485980898406752156097170862375480292624529874\"\r\n        \"0861053146487194414545152351096362869039049200912724099172937522029157237060228553124389342787042833649024\"\r\n        \"9421331100165843963623046875e-127\"},\r\n    {0x1.fffffffffffffp-420, chars_format::scientific, 345,\r\n        \"7.\"\r\n        \"3863828942285878045539088229993281039207868561444369754423946039401671489839101844096568387048652800799303\"\r\n        \"9034758556453572862744846734203618673649693841201395256391328971961796813504312194341724750960585249059748\"\r\n        \"1722106292974388829090304702192725738078098401825448198345875044058314474120457106248778685574085667298049\"\r\n        \"884266220033168792724609375e-127\"},\r\n    {0x1.fffffffffffffp-419, chars_format::scientific, 345,\r\n        \"1.\"\r\n        \"4772765788457175609107817645998656207841573712288873950884789207880334297967820368819313677409730560159860\"\r\n        \"7806951711290714572548969346840723734729938768240279051278265794392359362700862438868344950192117049811949\"\r\n        \"6344421258594877765818060940438545147615619680365089639669175008811662894824091421249755737114817133459609\"\r\n        \"976853244006633758544921875e-126\"},\r\n    {0x1.fffffffffffffp-418, chars_format::scientific, 344,\r\n        \"2.\"\r\n        \"9545531576914351218215635291997312415683147424577747901769578415760668595935640737638627354819461120319721\"\r\n        \"5613903422581429145097938693681447469459877536480558102556531588784718725401724877736689900384234099623899\"\r\n        \"2688842517189755531636121880877090295231239360730179279338350017623325789648182842499511474229634266919219\"\r\n        \"95370648801326751708984375e-126\"},\r\n    {0x1.fffffffffffffp-417, chars_format::scientific, 343,\r\n        \"5.\"\r\n        \"9091063153828702436431270583994624831366294849155495803539156831521337191871281475277254709638922240639443\"\r\n        \"1227806845162858290195877387362894938919755072961116205113063177569437450803449755473379800768468199247798\"\r\n        \"5377685034379511063272243761754180590462478721460358558676700035246651579296365684999022948459268533838439\"\r\n        \"9074129760265350341796875e-126\"},\r\n    {0x1.fffffffffffffp-416, chars_format::scientific, 343,\r\n        \"1.\"\r\n        \"1818212630765740487286254116798924966273258969831099160707831366304267438374256295055450941927784448127888\"\r\n        \"6245561369032571658039175477472578987783951014592223241022612635513887490160689951094675960153693639849559\"\r\n        \"7075537006875902212654448752350836118092495744292071711735340007049330315859273136999804589691853706767687\"\r\n        \"9814825952053070068359375e-125\"},\r\n    {0x1.fffffffffffffp-415, chars_format::scientific, 342,\r\n        \"2.\"\r\n        \"3636425261531480974572508233597849932546517939662198321415662732608534876748512590110901883855568896255777\"\r\n        \"2491122738065143316078350954945157975567902029184446482045225271027774980321379902189351920307387279699119\"\r\n        \"4151074013751804425308897504701672236184991488584143423470680014098660631718546273999609179383707413535375\"\r\n        \"962965190410614013671875e-125\"},\r\n    {0x1.fffffffffffffp-414, chars_format::scientific, 341,\r\n        \"4.\"\r\n        \"7272850523062961949145016467195699865093035879324396642831325465217069753497025180221803767711137792511554\"\r\n        \"4982245476130286632156701909890315951135804058368892964090450542055549960642759804378703840614774559398238\"\r\n        \"8302148027503608850617795009403344472369982977168286846941360028197321263437092547999218358767414827070751\"\r\n        \"92593038082122802734375e-125\"},\r\n    {0x1.fffffffffffffp-413, chars_format::scientific, 340,\r\n        \"9.\"\r\n        \"4545701046125923898290032934391399730186071758648793285662650930434139506994050360443607535422275585023108\"\r\n        \"9964490952260573264313403819780631902271608116737785928180901084111099921285519608757407681229549118796477\"\r\n        \"6604296055007217701235590018806688944739965954336573693882720056394642526874185095998436717534829654141503\"\r\n        \"8518607616424560546875e-125\"},\r\n    {0x1.fffffffffffffp-412, chars_format::scientific, 340,\r\n        \"1.\"\r\n        \"8909140209225184779658006586878279946037214351729758657132530186086827901398810072088721507084455117004621\"\r\n        \"7992898190452114652862680763956126380454321623347557185636180216822219984257103921751481536245909823759295\"\r\n        \"5320859211001443540247118003761337788947993190867314738776544011278928505374837019199687343506965930828300\"\r\n        \"7703721523284912109375e-124\"},\r\n    {0x1.fffffffffffffp-411, chars_format::scientific, 339,\r\n        \"3.\"\r\n        \"7818280418450369559316013173756559892074428703459517314265060372173655802797620144177443014168910234009243\"\r\n        \"5985796380904229305725361527912252760908643246695114371272360433644439968514207843502963072491819647518591\"\r\n        \"0641718422002887080494236007522675577895986381734629477553088022557857010749674038399374687013931861656601\"\r\n        \"540744304656982421875e-124\"},\r\n    {0x1.fffffffffffffp-410, chars_format::scientific, 338,\r\n        \"7.\"\r\n        \"5636560836900739118632026347513119784148857406919034628530120744347311605595240288354886028337820468018487\"\r\n        \"1971592761808458611450723055824505521817286493390228742544720867288879937028415687005926144983639295037182\"\r\n        \"1283436844005774160988472015045351155791972763469258955106176045115714021499348076798749374027863723313203\"\r\n        \"08148860931396484375e-124\"},\r\n    {0x1.fffffffffffffp-409, chars_format::scientific, 338,\r\n        \"1.\"\r\n        \"5127312167380147823726405269502623956829771481383806925706024148869462321119048057670977205667564093603697\"\r\n        \"4394318552361691722290144611164901104363457298678045748508944173457775987405683137401185228996727859007436\"\r\n        \"4256687368801154832197694403009070231158394552693851791021235209023142804299869615359749874805572744662640\"\r\n        \"61629772186279296875e-123\"},\r\n    {0x1.fffffffffffffp-408, chars_format::scientific, 337,\r\n        \"3.\"\r\n        \"0254624334760295647452810539005247913659542962767613851412048297738924642238096115341954411335128187207394\"\r\n        \"8788637104723383444580289222329802208726914597356091497017888346915551974811366274802370457993455718014872\"\r\n        \"8513374737602309664395388806018140462316789105387703582042470418046285608599739230719499749611145489325281\"\r\n        \"2325954437255859375e-123\"},\r\n    {0x1.fffffffffffffp-407, chars_format::scientific, 336,\r\n        \"6.\"\r\n        \"0509248669520591294905621078010495827319085925535227702824096595477849284476192230683908822670256374414789\"\r\n        \"7577274209446766889160578444659604417453829194712182994035776693831103949622732549604740915986911436029745\"\r\n        \"7026749475204619328790777612036280924633578210775407164084940836092571217199478461438999499222290978650562\"\r\n        \"465190887451171875e-123\"},\r\n    {0x1.fffffffffffffp-406, chars_format::scientific, 336,\r\n        \"1.\"\r\n        \"2101849733904118258981124215602099165463817185107045540564819319095569856895238446136781764534051274882957\"\r\n        \"9515454841889353377832115688931920883490765838942436598807155338766220789924546509920948183197382287205949\"\r\n        \"1405349895040923865758155522407256184926715642155081432816988167218514243439895692287799899844458195730112\"\r\n        \"493038177490234375e-122\"},\r\n    {0x1.fffffffffffffp-405, chars_format::scientific, 335,\r\n        \"2.\"\r\n        \"4203699467808236517962248431204198330927634370214091081129638638191139713790476892273563529068102549765915\"\r\n        \"9030909683778706755664231377863841766981531677884873197614310677532441579849093019841896366394764574411898\"\r\n        \"2810699790081847731516311044814512369853431284310162865633976334437028486879791384575599799688916391460224\"\r\n        \"98607635498046875e-122\"},\r\n    {0x1.fffffffffffffp-404, chars_format::scientific, 334,\r\n        \"4.\"\r\n        \"8407398935616473035924496862408396661855268740428182162259277276382279427580953784547127058136205099531831\"\r\n        \"8061819367557413511328462755727683533963063355769746395228621355064883159698186039683792732789529148823796\"\r\n        \"5621399580163695463032622089629024739706862568620325731267952668874056973759582769151199599377832782920449\"\r\n        \"9721527099609375e-122\"},\r\n    {0x1.fffffffffffffp-403, chars_format::scientific, 333,\r\n        \"9.\"\r\n        \"6814797871232946071848993724816793323710537480856364324518554552764558855161907569094254116272410199063663\"\r\n        \"6123638735114827022656925511455367067926126711539492790457242710129766319396372079367585465579058297647593\"\r\n        \"1242799160327390926065244179258049479413725137240651462535905337748113947519165538302399198755665565840899\"\r\n        \"944305419921875e-122\"},\r\n    {0x1.fffffffffffffp-402, chars_format::scientific, 333,\r\n        \"1.\"\r\n        \"9362959574246589214369798744963358664742107496171272864903710910552911771032381513818850823254482039812732\"\r\n        \"7224727747022965404531385102291073413585225342307898558091448542025953263879274415873517093115811659529518\"\r\n        \"6248559832065478185213048835851609895882745027448130292507181067549622789503833107660479839751133113168179\"\r\n        \"988861083984375e-121\"},\r\n    {0x1.fffffffffffffp-401, chars_format::scientific, 332,\r\n        \"3.\"\r\n        \"8725919148493178428739597489926717329484214992342545729807421821105823542064763027637701646508964079625465\"\r\n        \"4449455494045930809062770204582146827170450684615797116182897084051906527758548831747034186231623319059037\"\r\n        \"2497119664130956370426097671703219791765490054896260585014362135099245579007666215320959679502266226336359\"\r\n        \"97772216796875e-121\"},\r\n    {0x1.fffffffffffffp-400, chars_format::scientific, 331,\r\n        \"7.\"\r\n        \"7451838296986356857479194979853434658968429984685091459614843642211647084129526055275403293017928159250930\"\r\n        \"8898910988091861618125540409164293654340901369231594232365794168103813055517097663494068372463246638118074\"\r\n        \"4994239328261912740852195343406439583530980109792521170028724270198491158015332430641919359004532452672719\"\r\n        \"9554443359375e-121\"},\r\n    {0x1.fffffffffffffp-399, chars_format::scientific, 331,\r\n        \"1.\"\r\n        \"5490367659397271371495838995970686931793685996937018291922968728442329416825905211055080658603585631850186\"\r\n        \"1779782197618372323625108081832858730868180273846318846473158833620762611103419532698813674492649327623614\"\r\n        \"8998847865652382548170439068681287916706196021958504234005744854039698231603066486128383871800906490534543\"\r\n        \"9910888671875e-120\"},\r\n    {0x1.fffffffffffffp-398, chars_format::scientific, 330,\r\n        \"3.\"\r\n        \"0980735318794542742991677991941373863587371993874036583845937456884658833651810422110161317207171263700372\"\r\n        \"3559564395236744647250216163665717461736360547692637692946317667241525222206839065397627348985298655247229\"\r\n        \"7997695731304765096340878137362575833412392043917008468011489708079396463206132972256767743601812981069087\"\r\n        \"982177734375e-120\"},\r\n    {0x1.fffffffffffffp-397, chars_format::scientific, 329,\r\n        \"6.\"\r\n        \"1961470637589085485983355983882747727174743987748073167691874913769317667303620844220322634414342527400744\"\r\n        \"7119128790473489294500432327331434923472721095385275385892635334483050444413678130795254697970597310494459\"\r\n        \"5995391462609530192681756274725151666824784087834016936022979416158792926412265944513535487203625962138175\"\r\n        \"96435546875e-120\"},\r\n    {0x1.fffffffffffffp-396, chars_format::scientific, 329,\r\n        \"1.\"\r\n        \"2392294127517817097196671196776549545434948797549614633538374982753863533460724168844064526882868505480148\"\r\n        \"9423825758094697858900086465466286984694544219077055077178527066896610088882735626159050939594119462098891\"\r\n        \"9199078292521906038536351254945030333364956817566803387204595883231758585282453188902707097440725192427635\"\r\n        \"19287109375e-119\"},\r\n    {0x1.fffffffffffffp-395, chars_format::scientific, 328,\r\n        \"2.\"\r\n        \"4784588255035634194393342393553099090869897595099229267076749965507727066921448337688129053765737010960297\"\r\n        \"8847651516189395717800172930932573969389088438154110154357054133793220177765471252318101879188238924197783\"\r\n        \"8398156585043812077072702509890060666729913635133606774409191766463517170564906377805414194881450384855270\"\r\n        \"3857421875e-119\"},\r\n    {0x1.fffffffffffffp-394, chars_format::scientific, 327,\r\n        \"4.\"\r\n        \"9569176510071268388786684787106198181739795190198458534153499931015454133842896675376258107531474021920595\"\r\n        \"7695303032378791435600345861865147938778176876308220308714108267586440355530942504636203758376477848395567\"\r\n        \"6796313170087624154145405019780121333459827270267213548818383532927034341129812755610828389762900769710540\"\r\n        \"771484375e-119\"},\r\n    {0x1.fffffffffffffp-393, chars_format::scientific, 326,\r\n        \"9.\"\r\n        \"9138353020142536777573369574212396363479590380396917068306999862030908267685793350752516215062948043841191\"\r\n        \"5390606064757582871200691723730295877556353752616440617428216535172880711061885009272407516752955696791135\"\r\n        \"3592626340175248308290810039560242666919654540534427097636767065854068682259625511221656779525801539421081\"\r\n        \"54296875e-119\"},\r\n    {0x1.fffffffffffffp-392, chars_format::scientific, 326,\r\n        \"1.\"\r\n        \"9827670604028507355514673914842479272695918076079383413661399972406181653537158670150503243012589608768238\"\r\n        \"3078121212951516574240138344746059175511270750523288123485643307034576142212377001854481503350591139358227\"\r\n        \"0718525268035049661658162007912048533383930908106885419527353413170813736451925102244331355905160307884216\"\r\n        \"30859375e-118\"},\r\n    {0x1.fffffffffffffp-391, chars_format::scientific, 325,\r\n        \"3.\"\r\n        \"9655341208057014711029347829684958545391836152158766827322799944812363307074317340301006486025179217536476\"\r\n        \"6156242425903033148480276689492118351022541501046576246971286614069152284424754003708963006701182278716454\"\r\n        \"1437050536070099323316324015824097066767861816213770839054706826341627472903850204488662711810320615768432\"\r\n        \"6171875e-118\"},\r\n    {0x1.fffffffffffffp-390, chars_format::scientific, 324,\r\n        \"7.\"\r\n        \"9310682416114029422058695659369917090783672304317533654645599889624726614148634680602012972050358435072953\"\r\n        \"2312484851806066296960553378984236702045083002093152493942573228138304568849508007417926013402364557432908\"\r\n        \"2874101072140198646632648031648194133535723632427541678109413652683254945807700408977325423620641231536865\"\r\n        \"234375e-118\"},\r\n    {0x1.fffffffffffffp-389, chars_format::scientific, 324,\r\n        \"1.\"\r\n        \"5862136483222805884411739131873983418156734460863506730929119977924945322829726936120402594410071687014590\"\r\n        \"6462496970361213259392110675796847340409016600418630498788514645627660913769901601483585202680472911486581\"\r\n        \"6574820214428039729326529606329638826707144726485508335621882730536650989161540081795465084724128246307373\"\r\n        \"046875e-117\"},\r\n    {0x1.fffffffffffffp-388, chars_format::scientific, 323,\r\n        \"3.\"\r\n        \"1724272966445611768823478263747966836313468921727013461858239955849890645659453872240805188820143374029181\"\r\n        \"2924993940722426518784221351593694680818033200837260997577029291255321827539803202967170405360945822973163\"\r\n        \"3149640428856079458653059212659277653414289452971016671243765461073301978323080163590930169448256492614746\"\r\n        \"09375e-117\"},\r\n    {0x1.fffffffffffffp-387, chars_format::scientific, 322,\r\n        \"6.\"\r\n        \"3448545932891223537646956527495933672626937843454026923716479911699781291318907744481610377640286748058362\"\r\n        \"5849987881444853037568442703187389361636066401674521995154058582510643655079606405934340810721891645946326\"\r\n        \"6299280857712158917306118425318555306828578905942033342487530922146603956646160327181860338896512985229492\"\r\n        \"1875e-117\"},\r\n    {0x1.fffffffffffffp-386, chars_format::scientific, 322,\r\n        \"1.\"\r\n        \"2689709186578244707529391305499186734525387568690805384743295982339956258263781548896322075528057349611672\"\r\n        \"5169997576288970607513688540637477872327213280334904399030811716502128731015921281186868162144378329189265\"\r\n        \"3259856171542431783461223685063711061365715781188406668497506184429320791329232065436372067779302597045898\"\r\n        \"4375e-116\"},\r\n    {0x1.fffffffffffffp-385, chars_format::scientific, 321,\r\n        \"2.\"\r\n        \"5379418373156489415058782610998373469050775137381610769486591964679912516527563097792644151056114699223345\"\r\n        \"0339995152577941215027377081274955744654426560669808798061623433004257462031842562373736324288756658378530\"\r\n        \"6519712343084863566922447370127422122731431562376813336995012368858641582658464130872744135558605194091796\"\r\n        \"875e-116\"},\r\n    {0x1.fffffffffffffp-384, chars_format::scientific, 320,\r\n        \"5.\"\r\n        \"0758836746312978830117565221996746938101550274763221538973183929359825033055126195585288302112229398446690\"\r\n        \"0679990305155882430054754162549911489308853121339617596123246866008514924063685124747472648577513316757061\"\r\n        \"3039424686169727133844894740254844245462863124753626673990024737717283165316928261745488271117210388183593\"\r\n        \"75e-116\"},\r\n    {0x1.fffffffffffffp-383, chars_format::scientific, 320,\r\n        \"1.\"\r\n        \"0151767349262595766023513044399349387620310054952644307794636785871965006611025239117057660422445879689338\"\r\n        \"0135998061031176486010950832509982297861770624267923519224649373201702984812737024949494529715502663351412\"\r\n        \"2607884937233945426768978948050968849092572624950725334798004947543456633063385652349097654223442077636718\"\r\n        \"75e-115\"},\r\n    {0x1.fffffffffffffp-382, chars_format::scientific, 319,\r\n        \"2.\"\r\n        \"0303534698525191532047026088798698775240620109905288615589273571743930013222050478234115320844891759378676\"\r\n        \"0271996122062352972021901665019964595723541248535847038449298746403405969625474049898989059431005326702824\"\r\n        \"5215769874467890853537957896101937698185145249901450669596009895086913266126771304698195308446884155273437\"\r\n        \"5e-115\"},\r\n    {0x1.fffffffffffffp-381, chars_format::scientific, 318,\r\n        \"4.\"\r\n        \"0607069397050383064094052177597397550481240219810577231178547143487860026444100956468230641689783518757352\"\r\n        \"0543992244124705944043803330039929191447082497071694076898597492806811939250948099797978118862010653405649\"\r\n        \"0431539748935781707075915792203875396370290499802901339192019790173826532253542609396390616893768310546875\"\r\n        \"e-115\"},\r\n    {0x1.fffffffffffffp-380, chars_format::scientific, 317,\r\n        \"8.\"\r\n        \"1214138794100766128188104355194795100962480439621154462357094286975720052888201912936461283379567037514704\"\r\n        \"1087984488249411888087606660079858382894164994143388153797194985613623878501896199595956237724021306811298\"\r\n        \"086307949787156341415183158440775079274058099960580267838403958034765306450708521879278123378753662109375e\"\r\n        \"-115\"},\r\n    {0x1.fffffffffffffp-379, chars_format::scientific, 317,\r\n        \"1.\"\r\n        \"6242827758820153225637620871038959020192496087924230892471418857395144010577640382587292256675913407502940\"\r\n        \"8217596897649882377617521332015971676578832998828677630759438997122724775700379239919191247544804261362259\"\r\n        \"617261589957431268283036631688155015854811619992116053567680791606953061290141704375855624675750732421875e\"\r\n        \"-114\"},\r\n    {0x1.fffffffffffffp-378, chars_format::scientific, 316,\r\n        \"3.\"\r\n        \"2485655517640306451275241742077918040384992175848461784942837714790288021155280765174584513351826815005881\"\r\n        \"6435193795299764755235042664031943353157665997657355261518877994245449551400758479838382495089608522724519\"\r\n        \"23452317991486253656607326337631003170962323998423210713536158321390612258028340875171124935150146484375e-\"\r\n        \"114\"},\r\n    {0x1.fffffffffffffp-377, chars_format::scientific, 315,\r\n        \"6.\"\r\n        \"4971311035280612902550483484155836080769984351696923569885675429580576042310561530349169026703653630011763\"\r\n        \"2870387590599529510470085328063886706315331995314710523037755988490899102801516959676764990179217045449038\"\r\n        \"4690463598297250731321465267526200634192464799684642142707231664278122451605668175034224987030029296875e-\"\r\n        \"114\"},\r\n    {0x1.fffffffffffffp-376, chars_format::scientific, 315,\r\n        \"1.\"\r\n        \"2994262207056122580510096696831167216153996870339384713977135085916115208462112306069833805340730726002352\"\r\n        \"6574077518119905902094017065612777341263066399062942104607551197698179820560303391935352998035843409089807\"\r\n        \"6938092719659450146264293053505240126838492959936928428541446332855624490321133635006844997406005859375e-\"\r\n        \"113\"},\r\n    {0x1.fffffffffffffp-375, chars_format::scientific, 314,\r\n        \"2.\"\r\n        \"5988524414112245161020193393662334432307993740678769427954270171832230416924224612139667610681461452004705\"\r\n        \"3148155036239811804188034131225554682526132798125884209215102395396359641120606783870705996071686818179615\"\r\n        \"387618543931890029252858610701048025367698591987385685708289266571124898064226727001368999481201171875e-\"\r\n        \"113\"},\r\n    {0x1.fffffffffffffp-374, chars_format::scientific, 313,\r\n        \"5.\"\r\n        \"1977048828224490322040386787324668864615987481357538855908540343664460833848449224279335221362922904009410\"\r\n        \"6296310072479623608376068262451109365052265596251768418430204790792719282241213567741411992143373636359230\"\r\n        \"77523708786378005850571722140209605073539718397477137141657853314224979612845345400273799896240234375e-\"\r\n        \"113\"},\r\n    {0x1.fffffffffffffp-373, chars_format::scientific, 313,\r\n        \"1.\"\r\n        \"0395409765644898064408077357464933772923197496271507771181708068732892166769689844855867044272584580801882\"\r\n        \"1259262014495924721675213652490221873010453119250353683686040958158543856448242713548282398428674727271846\"\r\n        \"15504741757275601170114344428041921014707943679495427428331570662844995922569069080054759979248046875e-\"\r\n        \"112\"},\r\n    {0x1.fffffffffffffp-372, chars_format::scientific, 312,\r\n        \"2.\"\r\n        \"0790819531289796128816154714929867545846394992543015542363416137465784333539379689711734088545169161603764\"\r\n        \"2518524028991849443350427304980443746020906238500707367372081916317087712896485427096564796857349454543692\"\r\n        \"3100948351455120234022868885608384202941588735899085485666314132568999184513813816010951995849609375e-\"\r\n        \"112\"},\r\n    {0x1.fffffffffffffp-371, chars_format::scientific, 311,\r\n        \"4.\"\r\n        \"1581639062579592257632309429859735091692789985086031084726832274931568667078759379423468177090338323207528\"\r\n        \"5037048057983698886700854609960887492041812477001414734744163832634175425792970854193129593714698909087384\"\r\n        \"620189670291024046804573777121676840588317747179817097133262826513799836902762763202190399169921875e-112\"},\r\n    {0x1.fffffffffffffp-370, chars_format::scientific, 310,\r\n        \"8.\"\r\n        \"3163278125159184515264618859719470183385579970172062169453664549863137334157518758846936354180676646415057\"\r\n        \"0074096115967397773401709219921774984083624954002829469488327665268350851585941708386259187429397818174769\"\r\n        \"24037934058204809360914755424335368117663549435963419426652565302759967380552552640438079833984375e-112\"},\r\n    {0x1.fffffffffffffp-369, chars_format::scientific, 310,\r\n        \"1.\"\r\n        \"6632655625031836903052923771943894036677115994034412433890732909972627466831503751769387270836135329283011\"\r\n        \"4014819223193479554680341843984354996816724990800565893897665533053670170317188341677251837485879563634953\"\r\n        \"84807586811640961872182951084867073623532709887192683885330513060551993476110510528087615966796875e-111\"},\r\n    {0x1.fffffffffffffp-368, chars_format::scientific, 309,\r\n        \"3.\"\r\n        \"3265311250063673806105847543887788073354231988068824867781465819945254933663007503538774541672270658566022\"\r\n        \"8029638446386959109360683687968709993633449981601131787795331066107340340634376683354503674971759127269907\"\r\n        \"6961517362328192374436590216973414724706541977438536777066102612110398695222102105617523193359375e-111\"},\r\n    {0x1.fffffffffffffp-367, chars_format::scientific, 308,\r\n        \"6.\"\r\n        \"6530622500127347612211695087775576146708463976137649735562931639890509867326015007077549083344541317132045\"\r\n        \"6059276892773918218721367375937419987266899963202263575590662132214680681268753366709007349943518254539815\"\r\n        \"392303472465638474887318043394682944941308395487707355413220522422079739044420421123504638671875e-111\"},\r\n    {0x1.fffffffffffffp-366, chars_format::scientific, 308,\r\n        \"1.\"\r\n        \"3306124500025469522442339017555115229341692795227529947112586327978101973465203001415509816668908263426409\"\r\n        \"1211855378554783643744273475187483997453379992640452715118132426442936136253750673341801469988703650907963\"\r\n        \"078460694493127694977463608678936588988261679097541471082644104484415947808884084224700927734375e-110\"},\r\n    {0x1.fffffffffffffp-365, chars_format::scientific, 307,\r\n        \"2.\"\r\n        \"6612249000050939044884678035110230458683385590455059894225172655956203946930406002831019633337816526852818\"\r\n        \"2423710757109567287488546950374967994906759985280905430236264852885872272507501346683602939977407301815926\"\r\n        \"15692138898625538995492721735787317797652335819508294216528820896883189561776816844940185546875e-110\"},\r\n    {0x1.fffffffffffffp-364, chars_format::scientific, 306,\r\n        \"5.\"\r\n        \"3224498000101878089769356070220460917366771180910119788450345311912407893860812005662039266675633053705636\"\r\n        \"4847421514219134574977093900749935989813519970561810860472529705771744545015002693367205879954814603631852\"\r\n        \"3138427779725107799098544347157463559530467163901658843305764179376637912355363368988037109375e-110\"},\r\n    {0x1.fffffffffffffp-363, chars_format::scientific, 306,\r\n        \"1.\"\r\n        \"0644899600020375617953871214044092183473354236182023957690069062382481578772162401132407853335126610741127\"\r\n        \"2969484302843826914995418780149987197962703994112362172094505941154348909003000538673441175990962920726370\"\r\n        \"4627685555945021559819708869431492711906093432780331768661152835875327582471072673797607421875e-109\"},\r\n    {0x1.fffffffffffffp-362, chars_format::scientific, 305,\r\n        \"2.\"\r\n        \"1289799200040751235907742428088184366946708472364047915380138124764963157544324802264815706670253221482254\"\r\n        \"5938968605687653829990837560299974395925407988224724344189011882308697818006001077346882351981925841452740\"\r\n        \"925537111189004311963941773886298542381218686556066353732230567175065516494214534759521484375e-109\"},\r\n    {0x1.fffffffffffffp-361, chars_format::scientific, 304,\r\n        \"4.\"\r\n        \"2579598400081502471815484856176368733893416944728095830760276249529926315088649604529631413340506442964509\"\r\n        \"1877937211375307659981675120599948791850815976449448688378023764617395636012002154693764703963851682905481\"\r\n        \"85107422237800862392788354777259708476243737311213270746446113435013103298842906951904296875e-109\"},\r\n    {0x1.fffffffffffffp-360, chars_format::scientific, 303,\r\n        \"8.\"\r\n        \"5159196800163004943630969712352737467786833889456191661520552499059852630177299209059262826681012885929018\"\r\n        \"3755874422750615319963350241199897583701631952898897376756047529234791272024004309387529407927703365810963\"\r\n        \"7021484447560172478557670955451941695248747462242654149289222687002620659768581390380859375e-109\"},\r\n    {0x1.fffffffffffffp-359, chars_format::scientific, 303,\r\n        \"1.\"\r\n        \"7031839360032600988726193942470547493557366777891238332304110499811970526035459841811852565336202577185803\"\r\n        \"6751174884550123063992670048239979516740326390579779475351209505846958254404800861877505881585540673162192\"\r\n        \"7404296889512034495711534191090388339049749492448530829857844537400524131953716278076171875e-108\"},\r\n    {0x1.fffffffffffffp-358, chars_format::scientific, 302,\r\n        \"3.\"\r\n        \"4063678720065201977452387884941094987114733555782476664608220999623941052070919683623705130672405154371607\"\r\n        \"3502349769100246127985340096479959033480652781159558950702419011693916508809601723755011763171081346324385\"\r\n        \"480859377902406899142306838218077667809949898489706165971568907480104826390743255615234375e-108\"},\r\n    {0x1.fffffffffffffp-357, chars_format::scientific, 301,\r\n        \"6.\"\r\n        \"8127357440130403954904775769882189974229467111564953329216441999247882104141839367247410261344810308743214\"\r\n        \"7004699538200492255970680192959918066961305562319117901404838023387833017619203447510023526342162692648770\"\r\n        \"96171875580481379828461367643615533561989979697941233194313781496020965278148651123046875e-108\"},\r\n    {0x1.fffffffffffffp-356, chars_format::scientific, 301,\r\n        \"1.\"\r\n        \"3625471488026080790980955153976437994845893422312990665843288399849576420828367873449482052268962061748642\"\r\n        \"9400939907640098451194136038591983613392261112463823580280967604677566603523840689502004705268432538529754\"\r\n        \"19234375116096275965692273528723106712397995939588246638862756299204193055629730224609375e-107\"},\r\n    {0x1.fffffffffffffp-355, chars_format::scientific, 300,\r\n        \"2.\"\r\n        \"7250942976052161581961910307952875989691786844625981331686576799699152841656735746898964104537924123497285\"\r\n        \"8801879815280196902388272077183967226784522224927647160561935209355133207047681379004009410536865077059508\"\r\n        \"3846875023219255193138454705744621342479599187917649327772551259840838611125946044921875e-107\"},\r\n    {0x1.fffffffffffffp-354, chars_format::scientific, 299,\r\n        \"5.\"\r\n        \"4501885952104323163923820615905751979383573689251962663373153599398305683313471493797928209075848246994571\"\r\n        \"7603759630560393804776544154367934453569044449855294321123870418710266414095362758008018821073730154119016\"\r\n        \"769375004643851038627690941148924268495919837583529865554510251968167722225189208984375e-107\"},\r\n    {0x1.fffffffffffffp-353, chars_format::scientific, 299,\r\n        \"1.\"\r\n        \"0900377190420864632784764123181150395876714737850392532674630719879661136662694298759585641815169649398914\"\r\n        \"3520751926112078760955308830873586890713808889971058864224774083742053282819072551601603764214746030823803\"\r\n        \"353875000928770207725538188229784853699183967516705973110902050393633544445037841796875e-106\"},\r\n    {0x1.fffffffffffffp-352, chars_format::scientific, 298,\r\n        \"2.\"\r\n        \"1800754380841729265569528246362300791753429475700785065349261439759322273325388597519171283630339298797828\"\r\n        \"7041503852224157521910617661747173781427617779942117728449548167484106565638145103203207528429492061647606\"\r\n        \"70775000185754041545107637645956970739836793503341194622180410078726708889007568359375e-106\"},\r\n    {0x1.fffffffffffffp-351, chars_format::scientific, 297,\r\n        \"4.\"\r\n        \"3601508761683458531139056492724601583506858951401570130698522879518644546650777195038342567260678597595657\"\r\n        \"4083007704448315043821235323494347562855235559884235456899096334968213131276290206406415056858984123295213\"\r\n        \"4155000037150808309021527529191394147967358700668238924436082015745341777801513671875e-106\"},\r\n    {0x1.fffffffffffffp-350, chars_format::scientific, 296,\r\n        \"8.\"\r\n        \"7203017523366917062278112985449203167013717902803140261397045759037289093301554390076685134521357195191314\"\r\n        \"8166015408896630087642470646988695125710471119768470913798192669936426262552580412812830113717968246590426\"\r\n        \"831000007430161661804305505838278829593471740133647784887216403149068355560302734375e-106\"},\r\n    {0x1.fffffffffffffp-349, chars_format::scientific, 296,\r\n        \"1.\"\r\n        \"7440603504673383412455622597089840633402743580560628052279409151807457818660310878015337026904271439038262\"\r\n        \"9633203081779326017528494129397739025142094223953694182759638533987285252510516082562566022743593649318085\"\r\n        \"366200001486032332360861101167655765918694348026729556977443280629813671112060546875e-105\"},\r\n    {0x1.fffffffffffffp-348, chars_format::scientific, 295,\r\n        \"3.\"\r\n        \"4881207009346766824911245194179681266805487161121256104558818303614915637320621756030674053808542878076525\"\r\n        \"9266406163558652035056988258795478050284188447907388365519277067974570505021032165125132045487187298636170\"\r\n        \"73240000297206466472172220233531153183738869605345911395488656125962734222412109375e-105\"},\r\n    {0x1.fffffffffffffp-347, chars_format::scientific, 294,\r\n        \"6.\"\r\n        \"9762414018693533649822490388359362533610974322242512209117636607229831274641243512061348107617085756153051\"\r\n        \"8532812327117304070113976517590956100568376895814776731038554135949141010042064330250264090974374597272341\"\r\n        \"4648000059441293294434444046706230636747773921069182279097731225192546844482421875e-105\"},\r\n    {0x1.fffffffffffffp-346, chars_format::scientific, 294,\r\n        \"1.\"\r\n        \"3952482803738706729964498077671872506722194864448502441823527321445966254928248702412269621523417151230610\"\r\n        \"3706562465423460814022795303518191220113675379162955346207710827189828202008412866050052818194874919454468\"\r\n        \"2929600011888258658886888809341246127349554784213836455819546245038509368896484375e-104\"},\r\n    {0x1.fffffffffffffp-345, chars_format::scientific, 293,\r\n        \"2.\"\r\n        \"7904965607477413459928996155343745013444389728897004883647054642891932509856497404824539243046834302461220\"\r\n        \"7413124930846921628045590607036382440227350758325910692415421654379656404016825732100105636389749838908936\"\r\n        \"585920002377651731777377761868249225469910956842767291163909249007701873779296875e-104\"},\r\n    {0x1.fffffffffffffp-344, chars_format::scientific, 292,\r\n        \"5.\"\r\n        \"5809931214954826919857992310687490026888779457794009767294109285783865019712994809649078486093668604922441\"\r\n        \"4826249861693843256091181214072764880454701516651821384830843308759312808033651464200211272779499677817873\"\r\n        \"17184000475530346355475552373649845093982191368553458232781849801540374755859375e-104\"},\r\n    {0x1.fffffffffffffp-343, chars_format::scientific, 292,\r\n        \"1.\"\r\n        \"1161986242990965383971598462137498005377755891558801953458821857156773003942598961929815697218733720984488\"\r\n        \"2965249972338768651218236242814552976090940303330364276966168661751862561606730292840042254555899935563574\"\r\n        \"63436800095106069271095110474729969018796438273710691646556369960308074951171875e-103\"},\r\n    {0x1.fffffffffffffp-342, chars_format::scientific, 291,\r\n        \"2.\"\r\n        \"2323972485981930767943196924274996010755511783117603906917643714313546007885197923859631394437467441968976\"\r\n        \"5930499944677537302436472485629105952181880606660728553932337323503725123213460585680084509111799871127149\"\r\n        \"2687360019021213854219022094945993803759287654742138329311273992061614990234375e-103\"},\r\n    {0x1.fffffffffffffp-341, chars_format::scientific, 290,\r\n        \"4.\"\r\n        \"4647944971963861535886393848549992021511023566235207813835287428627092015770395847719262788874934883937953\"\r\n        \"1860999889355074604872944971258211904363761213321457107864674647007450246426921171360169018223599742254298\"\r\n        \"537472003804242770843804418989198760751857530948427665862254798412322998046875e-103\"},\r\n    {0x1.fffffffffffffp-340, chars_format::scientific, 289,\r\n        \"8.\"\r\n        \"9295889943927723071772787697099984043022047132470415627670574857254184031540791695438525577749869767875906\"\r\n        \"3721999778710149209745889942516423808727522426642914215729349294014900492853842342720338036447199484508597\"\r\n        \"07494400760848554168760883797839752150371506189685533172450959682464599609375e-103\"},\r\n    {0x1.fffffffffffffp-339, chars_format::scientific, 289,\r\n        \"1.\"\r\n        \"7859177988785544614354557539419996808604409426494083125534114971450836806308158339087705115549973953575181\"\r\n        \"2744399955742029841949177988503284761745504485328582843145869858802980098570768468544067607289439896901719\"\r\n        \"41498880152169710833752176759567950430074301237937106634490191936492919921875e-102\"},\r\n    {0x1.fffffffffffffp-338, chars_format::scientific, 288,\r\n        \"3.\"\r\n        \"5718355977571089228709115078839993617208818852988166251068229942901673612616316678175410231099947907150362\"\r\n        \"5488799911484059683898355977006569523491008970657165686291739717605960197141536937088135214578879793803438\"\r\n        \"8299776030433942166750435351913590086014860247587421326898038387298583984375e-102\"},\r\n    {0x1.fffffffffffffp-337, chars_format::scientific, 287,\r\n        \"7.\"\r\n        \"1436711955142178457418230157679987234417637705976332502136459885803347225232633356350820462199895814300725\"\r\n        \"0977599822968119367796711954013139046982017941314331372583479435211920394283073874176270429157759587606877\"\r\n        \"659955206086788433350087070382718017202972049517484265379607677459716796875e-102\"},\r\n    {0x1.fffffffffffffp-336, chars_format::scientific, 287,\r\n        \"1.\"\r\n        \"4287342391028435691483646031535997446883527541195266500427291977160669445046526671270164092439979162860145\"\r\n        \"0195519964593623873559342390802627809396403588262866274516695887042384078856614774835254085831551917521375\"\r\n        \"531991041217357686670017414076543603440594409903496853075921535491943359375e-101\"},\r\n    {0x1.fffffffffffffp-335, chars_format::scientific, 286,\r\n        \"2.\"\r\n        \"8574684782056871382967292063071994893767055082390533000854583954321338890093053342540328184879958325720290\"\r\n        \"0391039929187247747118684781605255618792807176525732549033391774084768157713229549670508171663103835042751\"\r\n        \"06398208243471537334003482815308720688118881980699370615184307098388671875e-101\"},\r\n    {0x1.fffffffffffffp-334, chars_format::scientific, 285,\r\n        \"5.\"\r\n        \"7149369564113742765934584126143989787534110164781066001709167908642677780186106685080656369759916651440580\"\r\n        \"0782079858374495494237369563210511237585614353051465098066783548169536315426459099341016343326207670085502\"\r\n        \"1279641648694307466800696563061744137623776396139874123036861419677734375e-101\"},\r\n    {0x1.fffffffffffffp-333, chars_format::scientific, 285,\r\n        \"1.\"\r\n        \"1429873912822748553186916825228797957506822032956213200341833581728535556037221337016131273951983330288116\"\r\n        \"0156415971674899098847473912642102247517122870610293019613356709633907263085291819868203268665241534017100\"\r\n        \"4255928329738861493360139312612348827524755279227974824607372283935546875e-100\"},\r\n    {0x1.fffffffffffffp-332, chars_format::scientific, 284,\r\n        \"2.\"\r\n        \"2859747825645497106373833650457595915013644065912426400683667163457071112074442674032262547903966660576232\"\r\n        \"0312831943349798197694947825284204495034245741220586039226713419267814526170583639736406537330483068034200\"\r\n        \"851185665947772298672027862522469765504951055845594964921474456787109375e-100\"},\r\n    {0x1.fffffffffffffp-331, chars_format::scientific, 283,\r\n        \"4.\"\r\n        \"5719495651290994212747667300915191830027288131824852801367334326914142224148885348064525095807933321152464\"\r\n        \"0625663886699596395389895650568408990068491482441172078453426838535629052341167279472813074660966136068401\"\r\n        \"70237133189554459734405572504493953100990211169118992984294891357421875e-100\"},\r\n    {0x1.fffffffffffffp-330, chars_format::scientific, 282,\r\n        \"9.\"\r\n        \"1438991302581988425495334601830383660054576263649705602734668653828284448297770696129050191615866642304928\"\r\n        \"1251327773399192790779791301136817980136982964882344156906853677071258104682334558945626149321932272136803\"\r\n        \"4047426637910891946881114500898790620198042233823798596858978271484375e-100\"},\r\n    {0x1.fffffffffffffp-329, chars_format::scientific, 282,\r\n        \"1.\"\r\n        \"8287798260516397685099066920366076732010915252729941120546933730765656889659554139225810038323173328460985\"\r\n        \"6250265554679838558155958260227363596027396592976468831381370735414251620936466911789125229864386454427360\"\r\n        \"6809485327582178389376222900179758124039608446764759719371795654296875e-99\"},\r\n    {0x1.fffffffffffffp-328, chars_format::scientific, 281,\r\n        \"3.\"\r\n        \"6575596521032795370198133840732153464021830505459882241093867461531313779319108278451620076646346656921971\"\r\n        \"2500531109359677116311916520454727192054793185952937662762741470828503241872933823578250459728772908854721\"\r\n        \"361897065516435677875244580035951624807921689352951943874359130859375e-99\"},\r\n    {0x1.fffffffffffffp-327, chars_format::scientific, 280,\r\n        \"7.\"\r\n        \"3151193042065590740396267681464306928043661010919764482187734923062627558638216556903240153292693313843942\"\r\n        \"5001062218719354232623833040909454384109586371905875325525482941657006483745867647156500919457545817709442\"\r\n        \"72379413103287135575048916007190324961584337870590388774871826171875e-99\"},\r\n    {0x1.fffffffffffffp-326, chars_format::scientific, 280,\r\n        \"1.\"\r\n        \"4630238608413118148079253536292861385608732202183952896437546984612525511727643311380648030658538662768788\"\r\n        \"5000212443743870846524766608181890876821917274381175065105096588331401296749173529431300183891509163541888\"\r\n        \"54475882620657427115009783201438064992316867574118077754974365234375e-98\"},\r\n    {0x1.fffffffffffffp-325, chars_format::scientific, 279,\r\n        \"2.\"\r\n        \"9260477216826236296158507072585722771217464404367905792875093969225051023455286622761296061317077325537577\"\r\n        \"0000424887487741693049533216363781753643834548762350130210193176662802593498347058862600367783018327083777\"\r\n        \"0895176524131485423001956640287612998463373514823615550994873046875e-98\"},\r\n    {0x1.fffffffffffffp-324, chars_format::scientific, 278,\r\n        \"5.\"\r\n        \"8520954433652472592317014145171445542434928808735811585750187938450102046910573245522592122634154651075154\"\r\n        \"0000849774975483386099066432727563507287669097524700260420386353325605186996694117725200735566036654167554\"\r\n        \"179035304826297084600391328057522599692674702964723110198974609375e-98\"},\r\n    {0x1.fffffffffffffp-323, chars_format::scientific, 278,\r\n        \"1.\"\r\n        \"1704190886730494518463402829034289108486985761747162317150037587690020409382114649104518424526830930215030\"\r\n        \"8000169954995096677219813286545512701457533819504940052084077270665121037399338823545040147113207330833510\"\r\n        \"835807060965259416920078265611504519938534940592944622039794921875e-97\"},\r\n    {0x1.fffffffffffffp-322, chars_format::scientific, 277,\r\n        \"2.\"\r\n        \"3408381773460989036926805658068578216973971523494324634300075175380040818764229298209036849053661860430061\"\r\n        \"6000339909990193354439626573091025402915067639009880104168154541330242074798677647090080294226414661667021\"\r\n        \"67161412193051883384015653122300903987706988118588924407958984375e-97\"},\r\n    {0x1.fffffffffffffp-321, chars_format::scientific, 276,\r\n        \"4.\"\r\n        \"6816763546921978073853611316137156433947943046988649268600150350760081637528458596418073698107323720860123\"\r\n        \"2000679819980386708879253146182050805830135278019760208336309082660484149597355294180160588452829323334043\"\r\n        \"3432282438610376676803130624460180797541397623717784881591796875e-97\"},\r\n    {0x1.fffffffffffffp-320, chars_format::scientific, 275,\r\n        \"9.\"\r\n        \"3633527093843956147707222632274312867895886093977298537200300701520163275056917192836147396214647441720246\"\r\n        \"4001359639960773417758506292364101611660270556039520416672618165320968299194710588360321176905658646668086\"\r\n        \"686456487722075335360626124892036159508279524743556976318359375e-97\"},\r\n    {0x1.fffffffffffffp-319, chars_format::scientific, 275,\r\n        \"1.\"\r\n        \"8726705418768791229541444526454862573579177218795459707440060140304032655011383438567229479242929488344049\"\r\n        \"2800271927992154683551701258472820322332054111207904083334523633064193659838942117672064235381131729333617\"\r\n        \"337291297544415067072125224978407231901655904948711395263671875e-96\"},\r\n    {0x1.fffffffffffffp-318, chars_format::scientific, 274,\r\n        \"3.\"\r\n        \"7453410837537582459082889052909725147158354437590919414880120280608065310022766877134458958485858976688098\"\r\n        \"5600543855984309367103402516945640644664108222415808166669047266128387319677884235344128470762263458667234\"\r\n        \"67458259508883013414425044995681446380331180989742279052734375e-96\"},\r\n    {0x1.fffffffffffffp-317, chars_format::scientific, 273,\r\n        \"7.\"\r\n        \"4906821675075164918165778105819450294316708875181838829760240561216130620045533754268917916971717953376197\"\r\n        \"1201087711968618734206805033891281289328216444831616333338094532256774639355768470688256941524526917334469\"\r\n        \"3491651901776602682885008999136289276066236197948455810546875e-96\"},\r\n    {0x1.fffffffffffffp-316, chars_format::scientific, 273,\r\n        \"1.\"\r\n        \"4981364335015032983633155621163890058863341775036367765952048112243226124009106750853783583394343590675239\"\r\n        \"4240217542393723746841361006778256257865643288966323266667618906451354927871153694137651388304905383466893\"\r\n        \"8698330380355320536577001799827257855213247239589691162109375e-95\"},\r\n    {0x1.fffffffffffffp-315, chars_format::scientific, 272,\r\n        \"2.\"\r\n        \"9962728670030065967266311242327780117726683550072735531904096224486452248018213501707567166788687181350478\"\r\n        \"8480435084787447493682722013556512515731286577932646533335237812902709855742307388275302776609810766933787\"\r\n        \"739666076071064107315400359965451571042649447917938232421875e-95\"},\r\n    {0x1.fffffffffffffp-314, chars_format::scientific, 271,\r\n        \"5.\"\r\n        \"9925457340060131934532622484655560235453367100145471063808192448972904496036427003415134333577374362700957\"\r\n        \"6960870169574894987365444027113025031462573155865293066670475625805419711484614776550605553219621533867575\"\r\n        \"47933215214212821463080071993090314208529889583587646484375e-95\"},\r\n    {0x1.fffffffffffffp-313, chars_format::scientific, 271,\r\n        \"1.\"\r\n        \"1985091468012026386906524496931112047090673420029094212761638489794580899207285400683026866715474872540191\"\r\n        \"5392174033914978997473088805422605006292514631173058613334095125161083942296922955310121110643924306773515\"\r\n        \"09586643042842564292616014398618062841705977916717529296875e-94\"},\r\n    {0x1.fffffffffffffp-312, chars_format::scientific, 270,\r\n        \"2.\"\r\n        \"3970182936024052773813048993862224094181346840058188425523276979589161798414570801366053733430949745080383\"\r\n        \"0784348067829957994946177610845210012585029262346117226668190250322167884593845910620242221287848613547030\"\r\n        \"1917328608568512858523202879723612568341195583343505859375e-94\"},\r\n    {0x1.fffffffffffffp-311, chars_format::scientific, 269,\r\n        \"4.\"\r\n        \"7940365872048105547626097987724448188362693680116376851046553959178323596829141602732107466861899490160766\"\r\n        \"1568696135659915989892355221690420025170058524692234453336380500644335769187691821240484442575697227094060\"\r\n        \"383465721713702571704640575944722513668239116668701171875e-94\"},\r\n    {0x1.fffffffffffffp-310, chars_format::scientific, 268,\r\n        \"9.\"\r\n        \"5880731744096211095252195975448896376725387360232753702093107918356647193658283205464214933723798980321532\"\r\n        \"3137392271319831979784710443380840050340117049384468906672761001288671538375383642480968885151394454188120\"\r\n        \"76693144342740514340928115188944502733647823333740234375e-94\"},\r\n    {0x1.fffffffffffffp-309, chars_format::scientific, 268,\r\n        \"1.\"\r\n        \"9176146348819242219050439195089779275345077472046550740418621583671329438731656641092842986744759796064306\"\r\n        \"4627478454263966395956942088676168010068023409876893781334552200257734307675076728496193777030278890837624\"\r\n        \"15338628868548102868185623037788900546729564666748046875e-93\"},\r\n    {0x1.fffffffffffffp-308, chars_format::scientific, 267,\r\n        \"3.\"\r\n        \"8352292697638484438100878390179558550690154944093101480837243167342658877463313282185685973489519592128612\"\r\n        \"9254956908527932791913884177352336020136046819753787562669104400515468615350153456992387554060557781675248\"\r\n        \"3067725773709620573637124607557780109345912933349609375e-93\"},\r\n    {0x1.fffffffffffffp-307, chars_format::scientific, 266,\r\n        \"7.\"\r\n        \"6704585395276968876201756780359117101380309888186202961674486334685317754926626564371371946979039184257225\"\r\n        \"8509913817055865583827768354704672040272093639507575125338208801030937230700306913984775108121115563350496\"\r\n        \"613545154741924114727424921511556021869182586669921875e-93\"},\r\n    {0x1.fffffffffffffp-306, chars_format::scientific, 266,\r\n        \"1.\"\r\n        \"5340917079055393775240351356071823420276061977637240592334897266937063550985325312874274389395807836851445\"\r\n        \"1701982763411173116765553670940934408054418727901515025067641760206187446140061382796955021624223112670099\"\r\n        \"322709030948384822945484984302311204373836517333984375e-92\"},\r\n    {0x1.fffffffffffffp-305, chars_format::scientific, 265,\r\n        \"3.\"\r\n        \"0681834158110787550480702712143646840552123955274481184669794533874127101970650625748548778791615673702890\"\r\n        \"3403965526822346233531107341881868816108837455803030050135283520412374892280122765593910043248446225340198\"\r\n        \"64541806189676964589096996860462240874767303466796875e-92\"},\r\n    {0x1.fffffffffffffp-304, chars_format::scientific, 264,\r\n        \"6.\"\r\n        \"1363668316221575100961405424287293681104247910548962369339589067748254203941301251497097557583231347405780\"\r\n        \"6807931053644692467062214683763737632217674911606060100270567040824749784560245531187820086496892450680397\"\r\n        \"2908361237935392917819399372092448174953460693359375e-92\"},\r\n    {0x1.fffffffffffffp-303, chars_format::scientific, 264,\r\n        \"1.\"\r\n        \"2272733663244315020192281084857458736220849582109792473867917813549650840788260250299419511516646269481156\"\r\n        \"1361586210728938493412442936752747526443534982321212020054113408164949956912049106237564017299378490136079\"\r\n        \"4581672247587078583563879874418489634990692138671875e-91\"},\r\n    {0x1.fffffffffffffp-302, chars_format::scientific, 263,\r\n        \"2.\"\r\n        \"4545467326488630040384562169714917472441699164219584947735835627099301681576520500598839023033292538962312\"\r\n        \"2723172421457876986824885873505495052887069964642424040108226816329899913824098212475128034598756980272158\"\r\n        \"916334449517415716712775974883697926998138427734375e-91\"},\r\n    {0x1.fffffffffffffp-301, chars_format::scientific, 262,\r\n        \"4.\"\r\n        \"9090934652977260080769124339429834944883398328439169895471671254198603363153041001197678046066585077924624\"\r\n        \"5446344842915753973649771747010990105774139929284848080216453632659799827648196424950256069197513960544317\"\r\n        \"83266889903483143342555194976739585399627685546875e-91\"},\r\n    {0x1.fffffffffffffp-300, chars_format::scientific, 261,\r\n        \"9.\"\r\n        \"8181869305954520161538248678859669889766796656878339790943342508397206726306082002395356092133170155849249\"\r\n        \"0892689685831507947299543494021980211548279858569696160432907265319599655296392849900512138395027921088635\"\r\n        \"6653377980696628668511038995347917079925537109375e-91\"},\r\n    {0x1.fffffffffffffp-299, chars_format::scientific, 261,\r\n        \"1.\"\r\n        \"9636373861190904032307649735771933977953359331375667958188668501679441345261216400479071218426634031169849\"\r\n        \"8178537937166301589459908698804396042309655971713939232086581453063919931059278569980102427679005584217727\"\r\n        \"1330675596139325733702207799069583415985107421875e-90\"},\r\n    {0x1.fffffffffffffp-298, chars_format::scientific, 260,\r\n        \"3.\"\r\n        \"9272747722381808064615299471543867955906718662751335916377337003358882690522432800958142436853268062339699\"\r\n        \"6357075874332603178919817397608792084619311943427878464173162906127839862118557139960204855358011168435454\"\r\n        \"266135119227865146740441559813916683197021484375e-90\"},\r\n    {0x1.fffffffffffffp-297, chars_format::scientific, 259,\r\n        \"7.\"\r\n        \"8545495444763616129230598943087735911813437325502671832754674006717765381044865601916284873706536124679399\"\r\n        \"2714151748665206357839634795217584169238623886855756928346325812255679724237114279920409710716022336870908\"\r\n        \"53227023845573029348088311962783336639404296875e-90\"},\r\n    {0x1.fffffffffffffp-296, chars_format::scientific, 259,\r\n        \"1.\"\r\n        \"5709099088952723225846119788617547182362687465100534366550934801343553076208973120383256974741307224935879\"\r\n        \"8542830349733041271567926959043516833847724777371151385669265162451135944847422855984081942143204467374181\"\r\n        \"70645404769114605869617662392556667327880859375e-89\"},\r\n    {0x1.fffffffffffffp-295, chars_format::scientific, 258,\r\n        \"3.\"\r\n        \"1418198177905446451692239577235094364725374930201068733101869602687106152417946240766513949482614449871759\"\r\n        \"7085660699466082543135853918087033667695449554742302771338530324902271889694845711968163884286408934748363\"\r\n        \"4129080953822921173923532478511333465576171875e-89\"},\r\n    {0x1.fffffffffffffp-294, chars_format::scientific, 257,\r\n        \"6.\"\r\n        \"2836396355810892903384479154470188729450749860402137466203739205374212304835892481533027898965228899743519\"\r\n        \"4171321398932165086271707836174067335390899109484605542677060649804543779389691423936327768572817869496726\"\r\n        \"825816190764584234784706495702266693115234375e-89\"},\r\n    {0x1.fffffffffffffp-293, chars_format::scientific, 257,\r\n        \"1.\"\r\n        \"2567279271162178580676895830894037745890149972080427493240747841074842460967178496306605579793045779948703\"\r\n        \"8834264279786433017254341567234813467078179821896921108535412129960908755877938284787265553714563573899345\"\r\n        \"365163238152916846956941299140453338623046875e-88\"},\r\n    {0x1.fffffffffffffp-292, chars_format::scientific, 256,\r\n        \"2.\"\r\n        \"5134558542324357161353791661788075491780299944160854986481495682149684921934356992613211159586091559897407\"\r\n        \"7668528559572866034508683134469626934156359643793842217070824259921817511755876569574531107429127147798690\"\r\n        \"73032647630583369391388259828090667724609375e-88\"},\r\n    {0x1.fffffffffffffp-291, chars_format::scientific, 255,\r\n        \"5.\"\r\n        \"0269117084648714322707583323576150983560599888321709972962991364299369843868713985226422319172183119794815\"\r\n        \"5337057119145732069017366268939253868312719287587684434141648519843635023511753139149062214858254295597381\"\r\n        \"4606529526116673878277651965618133544921875e-88\"},\r\n    {0x1.fffffffffffffp-290, chars_format::scientific, 255,\r\n        \"1.\"\r\n        \"0053823416929742864541516664715230196712119977664341994592598272859873968773742797045284463834436623958963\"\r\n        \"1067411423829146413803473253787850773662543857517536886828329703968727004702350627829812442971650859119476\"\r\n        \"2921305905223334775655530393123626708984375e-87\"},\r\n    {0x1.fffffffffffffp-289, chars_format::scientific, 254,\r\n        \"2.\"\r\n        \"0107646833859485729083033329430460393424239955328683989185196545719747937547485594090568927668873247917926\"\r\n        \"2134822847658292827606946507575701547325087715035073773656659407937454009404701255659624885943301718238952\"\r\n        \"584261181044666955131106078624725341796875e-87\"},\r\n    {0x1.fffffffffffffp-288, chars_format::scientific, 253,\r\n        \"4.\"\r\n        \"0215293667718971458166066658860920786848479910657367978370393091439495875094971188181137855337746495835852\"\r\n        \"4269645695316585655213893015151403094650175430070147547313318815874908018809402511319249771886603436477905\"\r\n        \"16852236208933391026221215724945068359375e-87\"},\r\n    {0x1.fffffffffffffp-287, chars_format::scientific, 252,\r\n        \"8.\"\r\n        \"0430587335437942916332133317721841573696959821314735956740786182878991750189942376362275710675492991671704\"\r\n        \"8539291390633171310427786030302806189300350860140295094626637631749816037618805022638499543773206872955810\"\r\n        \"3370447241786678205244243144989013671875e-87\"},\r\n    {0x1.fffffffffffffp-286, chars_format::scientific, 252,\r\n        \"1.\"\r\n        \"6086117467087588583266426663544368314739391964262947191348157236575798350037988475272455142135098598334340\"\r\n        \"9707858278126634262085557206060561237860070172028059018925327526349963207523761004527699908754641374591162\"\r\n        \"0674089448357335641048848628997802734375e-86\"},\r\n    {0x1.fffffffffffffp-285, chars_format::scientific, 251,\r\n        \"3.\"\r\n        \"2172234934175177166532853327088736629478783928525894382696314473151596700075976950544910284270197196668681\"\r\n        \"9415716556253268524171114412121122475720140344056118037850655052699926415047522009055399817509282749182324\"\r\n        \"134817889671467128209769725799560546875e-86\"},\r\n    {0x1.fffffffffffffp-284, chars_format::scientific, 250,\r\n        \"6.\"\r\n        \"4344469868350354333065706654177473258957567857051788765392628946303193400151953901089820568540394393337363\"\r\n        \"8831433112506537048342228824242244951440280688112236075701310105399852830095044018110799635018565498364648\"\r\n        \"26963577934293425641953945159912109375e-86\"},\r\n    {0x1.fffffffffffffp-283, chars_format::scientific, 250,\r\n        \"1.\"\r\n        \"2868893973670070866613141330835494651791513571410357753078525789260638680030390780217964113708078878667472\"\r\n        \"7766286622501307409668445764848448990288056137622447215140262021079970566019008803622159927003713099672929\"\r\n        \"65392715586858685128390789031982421875e-85\"},\r\n    {0x1.fffffffffffffp-282, chars_format::scientific, 249,\r\n        \"2.\"\r\n        \"5737787947340141733226282661670989303583027142820715506157051578521277360060781560435928227416157757334945\"\r\n        \"5532573245002614819336891529696897980576112275244894430280524042159941132038017607244319854007426199345859\"\r\n        \"3078543117371737025678157806396484375e-85\"},\r\n    {0x1.fffffffffffffp-281, chars_format::scientific, 248,\r\n        \"5.\"\r\n        \"1475575894680283466452565323341978607166054285641431012314103157042554720121563120871856454832315514669891\"\r\n        \"1065146490005229638673783059393795961152224550489788860561048084319882264076035214488639708014852398691718\"\r\n        \"615708623474347405135631561279296875e-85\"},\r\n    {0x1.fffffffffffffp-280, chars_format::scientific, 248,\r\n        \"1.\"\r\n        \"0295115178936056693290513064668395721433210857128286202462820631408510944024312624174371290966463102933978\"\r\n        \"2213029298001045927734756611878759192230444910097957772112209616863976452815207042897727941602970479738343\"\r\n        \"723141724694869481027126312255859375e-84\"},\r\n    {0x1.fffffffffffffp-279, chars_format::scientific, 247,\r\n        \"2.\"\r\n        \"0590230357872113386581026129336791442866421714256572404925641262817021888048625248348742581932926205867956\"\r\n        \"4426058596002091855469513223757518384460889820195915544224419233727952905630414085795455883205940959476687\"\r\n        \"44628344938973896205425262451171875e-84\"},\r\n    {0x1.fffffffffffffp-278, chars_format::scientific, 246,\r\n        \"4.\"\r\n        \"1180460715744226773162052258673582885732843428513144809851282525634043776097250496697485163865852411735912\"\r\n        \"8852117192004183710939026447515036768921779640391831088448838467455905811260828171590911766411881918953374\"\r\n        \"8925668987794779241085052490234375e-84\"},\r\n    {0x1.fffffffffffffp-277, chars_format::scientific, 245,\r\n        \"8.\"\r\n        \"2360921431488453546324104517347165771465686857026289619702565051268087552194500993394970327731704823471825\"\r\n        \"7704234384008367421878052895030073537843559280783662176897676934911811622521656343181823532823763837906749\"\r\n        \"785133797558955848217010498046875e-84\"},\r\n    {0x1.fffffffffffffp-276, chars_format::scientific, 245,\r\n        \"1.\"\r\n        \"6472184286297690709264820903469433154293137371405257923940513010253617510438900198678994065546340964694365\"\r\n        \"1540846876801673484375610579006014707568711856156732435379535386982362324504331268636364706564752767581349\"\r\n        \"957026759511791169643402099609375e-83\"},\r\n    {0x1.fffffffffffffp-275, chars_format::scientific, 244,\r\n        \"3.\"\r\n        \"2944368572595381418529641806938866308586274742810515847881026020507235020877800397357988131092681929388730\"\r\n        \"3081693753603346968751221158012029415137423712313464870759070773964724649008662537272729413129505535162699\"\r\n        \"91405351902358233928680419921875e-83\"},\r\n    {0x1.fffffffffffffp-274, chars_format::scientific, 243,\r\n        \"6.\"\r\n        \"5888737145190762837059283613877732617172549485621031695762052041014470041755600794715976262185363858777460\"\r\n        \"6163387507206693937502442316024058830274847424626929741518141547929449298017325074545458826259011070325399\"\r\n        \"8281070380471646785736083984375e-83\"},\r\n    {0x1.fffffffffffffp-273, chars_format::scientific, 243,\r\n        \"1.\"\r\n        \"3177747429038152567411856722775546523434509897124206339152410408202894008351120158943195252437072771755492\"\r\n        \"1232677501441338787500488463204811766054969484925385948303628309585889859603465014909091765251802214065079\"\r\n        \"9656214076094329357147216796875e-82\"},\r\n    {0x1.fffffffffffffp-272, chars_format::scientific, 242,\r\n        \"2.\"\r\n        \"6355494858076305134823713445551093046869019794248412678304820816405788016702240317886390504874145543510984\"\r\n        \"2465355002882677575000976926409623532109938969850771896607256619171779719206930029818183530503604428130159\"\r\n        \"931242815218865871429443359375e-82\"},\r\n    {0x1.fffffffffffffp-271, chars_format::scientific, 241,\r\n        \"5.\"\r\n        \"2710989716152610269647426891102186093738039588496825356609641632811576033404480635772781009748291087021968\"\r\n        \"4930710005765355150001953852819247064219877939701543793214513238343559438413860059636367061007208856260319\"\r\n        \"86248563043773174285888671875e-82\"},\r\n    {0x1.fffffffffffffp-270, chars_format::scientific, 241,\r\n        \"1.\"\r\n        \"0542197943230522053929485378220437218747607917699365071321928326562315206680896127154556201949658217404393\"\r\n        \"6986142001153071030000390770563849412843975587940308758642902647668711887682772011927273412201441771252063\"\r\n        \"97249712608754634857177734375e-81\"},\r\n    {0x1.fffffffffffffp-269, chars_format::scientific, 240,\r\n        \"2.\"\r\n        \"1084395886461044107858970756440874437495215835398730142643856653124630413361792254309112403899316434808787\"\r\n        \"3972284002306142060000781541127698825687951175880617517285805295337423775365544023854546824402883542504127\"\r\n        \"9449942521750926971435546875e-81\"},\r\n    {0x1.fffffffffffffp-268, chars_format::scientific, 239,\r\n        \"4.\"\r\n        \"2168791772922088215717941512881748874990431670797460285287713306249260826723584508618224807798632869617574\"\r\n        \"7944568004612284120001563082255397651375902351761235034571610590674847550731088047709093648805767085008255\"\r\n        \"889988504350185394287109375e-81\"},\r\n    {0x1.fffffffffffffp-267, chars_format::scientific, 238,\r\n        \"8.\"\r\n        \"4337583545844176431435883025763497749980863341594920570575426612498521653447169017236449615597265739235149\"\r\n        \"5889136009224568240003126164510795302751804703522470069143221181349695101462176095418187297611534170016511\"\r\n        \"77997700870037078857421875e-81\"},\r\n    {0x1.fffffffffffffp-266, chars_format::scientific, 238,\r\n        \"1.\"\r\n        \"6867516709168835286287176605152699549996172668318984114115085322499704330689433803447289923119453147847029\"\r\n        \"9177827201844913648000625232902159060550360940704494013828644236269939020292435219083637459522306834003302\"\r\n        \"35599540174007415771484375e-80\"},\r\n    {0x1.fffffffffffffp-265, chars_format::scientific, 237,\r\n        \"3.\"\r\n        \"3735033418337670572574353210305399099992345336637968228230170644999408661378867606894579846238906295694059\"\r\n        \"8355654403689827296001250465804318121100721881408988027657288472539878040584870438167274919044613668006604\"\r\n        \"7119908034801483154296875e-80\"},\r\n    {0x1.fffffffffffffp-264, chars_format::scientific, 236,\r\n        \"6.\"\r\n        \"7470066836675341145148706420610798199984690673275936456460341289998817322757735213789159692477812591388119\"\r\n        \"6711308807379654592002500931608636242201443762817976055314576945079756081169740876334549838089227336013209\"\r\n        \"423981606960296630859375e-80\"},\r\n    {0x1.fffffffffffffp-263, chars_format::scientific, 236,\r\n        \"1.\"\r\n        \"3494013367335068229029741284122159639996938134655187291292068257999763464551547042757831938495562518277623\"\r\n        \"9342261761475930918400500186321727248440288752563595211062915389015951216233948175266909967617845467202641\"\r\n        \"884796321392059326171875e-79\"},\r\n    {0x1.fffffffffffffp-262, chars_format::scientific, 235,\r\n        \"2.\"\r\n        \"6988026734670136458059482568244319279993876269310374582584136515999526929103094085515663876991125036555247\"\r\n        \"8684523522951861836801000372643454496880577505127190422125830778031902432467896350533819935235690934405283\"\r\n        \"76959264278411865234375e-79\"},\r\n    {0x1.fffffffffffffp-261, chars_format::scientific, 234,\r\n        \"5.\"\r\n        \"3976053469340272916118965136488638559987752538620749165168273031999053858206188171031327753982250073110495\"\r\n        \"7369047045903723673602000745286908993761155010254380844251661556063804864935792701067639870471381868810567\"\r\n        \"5391852855682373046875e-79\"},\r\n    {0x1.fffffffffffffp-260, chars_format::scientific, 234,\r\n        \"1.\"\r\n        \"0795210693868054583223793027297727711997550507724149833033654606399810771641237634206265550796450014622099\"\r\n        \"1473809409180744734720400149057381798752231002050876168850332311212760972987158540213527974094276373762113\"\r\n        \"5078370571136474609375e-78\"},\r\n    {0x1.fffffffffffffp-259, chars_format::scientific, 233,\r\n        \"2.\"\r\n        \"1590421387736109166447586054595455423995101015448299666067309212799621543282475268412531101592900029244198\"\r\n        \"2947618818361489469440800298114763597504462004101752337700664622425521945974317080427055948188552747524227\"\r\n        \"015674114227294921875e-78\"},\r\n    {0x1.fffffffffffffp-258, chars_format::scientific, 232,\r\n        \"4.\"\r\n        \"3180842775472218332895172109190910847990202030896599332134618425599243086564950536825062203185800058488396\"\r\n        \"5895237636722978938881600596229527195008924008203504675401329244851043891948634160854111896377105495048454\"\r\n        \"03134822845458984375e-78\"},\r\n    {0x1.fffffffffffffp-257, chars_format::scientific, 231,\r\n        \"8.\"\r\n        \"6361685550944436665790344218381821695980404061793198664269236851198486173129901073650124406371600116976793\"\r\n        \"1790475273445957877763201192459054390017848016407009350802658489702087783897268321708223792754210990096908\"\r\n        \"0626964569091796875e-78\"},\r\n    {0x1.fffffffffffffp-256, chars_format::scientific, 231,\r\n        \"1.\"\r\n        \"7272337110188887333158068843676364339196080812358639732853847370239697234625980214730024881274320023395358\"\r\n        \"6358095054689191575552640238491810878003569603281401870160531697940417556779453664341644758550842198019381\"\r\n        \"6125392913818359375e-77\"},\r\n    {0x1.fffffffffffffp-255, chars_format::scientific, 230,\r\n        \"3.\"\r\n        \"4544674220377774666316137687352728678392161624717279465707694740479394469251960429460049762548640046790717\"\r\n        \"2716190109378383151105280476983621756007139206562803740321063395880835113558907328683289517101684396038763\"\r\n        \"225078582763671875e-77\"},\r\n    {0x1.fffffffffffffp-254, chars_format::scientific, 229,\r\n        \"6.\"\r\n        \"9089348440755549332632275374705457356784323249434558931415389480958788938503920858920099525097280093581434\"\r\n        \"5432380218756766302210560953967243512014278413125607480642126791761670227117814657366579034203368792077526\"\r\n        \"45015716552734375e-77\"},\r\n    {0x1.fffffffffffffp-253, chars_format::scientific, 229,\r\n        \"1.\"\r\n        \"3817869688151109866526455074941091471356864649886911786283077896191757787700784171784019905019456018716286\"\r\n        \"9086476043751353260442112190793448702402855682625121496128425358352334045423562931473315806840673758415505\"\r\n        \"29003143310546875e-76\"},\r\n    {0x1.fffffffffffffp-252, chars_format::scientific, 228,\r\n        \"2.\"\r\n        \"7635739376302219733052910149882182942713729299773823572566155792383515575401568343568039810038912037432573\"\r\n        \"8172952087502706520884224381586897404805711365250242992256850716704668090847125862946631613681347516831010\"\r\n        \"5800628662109375e-76\"},\r\n    {0x1.fffffffffffffp-251, chars_format::scientific, 227,\r\n        \"5.\"\r\n        \"5271478752604439466105820299764365885427458599547647145132311584767031150803136687136079620077824074865147\"\r\n        \"6345904175005413041768448763173794809611422730500485984513701433409336181694251725893263227362695033662021\"\r\n        \"160125732421875e-76\"},\r\n    {0x1.fffffffffffffp-250, chars_format::scientific, 227,\r\n        \"1.\"\r\n        \"1054295750520887893221164059952873177085491719909529429026462316953406230160627337427215924015564814973029\"\r\n        \"5269180835001082608353689752634758961922284546100097196902740286681867236338850345178652645472539006732404\"\r\n        \"232025146484375e-75\"},\r\n    {0x1.fffffffffffffp-249, chars_format::scientific, 226,\r\n        \"2.\"\r\n        \"2108591501041775786442328119905746354170983439819058858052924633906812460321254674854431848031129629946059\"\r\n        \"0538361670002165216707379505269517923844569092200194393805480573363734472677700690357305290945078013464808\"\r\n        \"46405029296875e-75\"},\r\n    {0x1.fffffffffffffp-248, chars_format::scientific, 225,\r\n        \"4.\"\r\n        \"4217183002083551572884656239811492708341966879638117716105849267813624920642509349708863696062259259892118\"\r\n        \"1076723340004330433414759010539035847689138184400388787610961146727468945355401380714610581890156026929616\"\r\n        \"9281005859375e-75\"},\r\n    {0x1.fffffffffffffp-247, chars_format::scientific, 224,\r\n        \"8.\"\r\n        \"8434366004167103145769312479622985416683933759276235432211698535627249841285018699417727392124518519784236\"\r\n        \"2153446680008660866829518021078071695378276368800777575221922293454937890710802761429221163780312053859233\"\r\n        \"856201171875e-75\"},\r\n    {0x1.fffffffffffffp-246, chars_format::scientific, 224,\r\n        \"1.\"\r\n        \"7686873200833420629153862495924597083336786751855247086442339707125449968257003739883545478424903703956847\"\r\n        \"2430689336001732173365903604215614339075655273760155515044384458690987578142160552285844232756062410771846\"\r\n        \"771240234375e-74\"},\r\n    {0x1.fffffffffffffp-245, chars_format::scientific, 223,\r\n        \"3.\"\r\n        \"5373746401666841258307724991849194166673573503710494172884679414250899936514007479767090956849807407913694\"\r\n        \"4861378672003464346731807208431228678151310547520311030088768917381975156284321104571688465512124821543693\"\r\n        \"54248046875e-74\"},\r\n    {0x1.fffffffffffffp-244, chars_format::scientific, 222,\r\n        \"7.\"\r\n        \"0747492803333682516615449983698388333347147007420988345769358828501799873028014959534181913699614815827388\"\r\n        \"9722757344006928693463614416862457356302621095040622060177537834763950312568642209143376931024249643087387\"\r\n        \"0849609375e-74\"},\r\n    {0x1.fffffffffffffp-243, chars_format::scientific, 222,\r\n        \"1.\"\r\n        \"4149498560666736503323089996739677666669429401484197669153871765700359974605602991906836382739922963165477\"\r\n        \"7944551468801385738692722883372491471260524219008124412035507566952790062513728441828675386204849928617477\"\r\n        \"4169921875e-73\"},\r\n    {0x1.fffffffffffffp-242, chars_format::scientific, 221,\r\n        \"2.\"\r\n        \"8298997121333473006646179993479355333338858802968395338307743531400719949211205983813672765479845926330955\"\r\n        \"5889102937602771477385445766744982942521048438016248824071015133905580125027456883657350772409699857234954\"\r\n        \"833984375e-73\"},\r\n    {0x1.fffffffffffffp-241, chars_format::scientific, 220,\r\n        \"5.\"\r\n        \"6597994242666946013292359986958710666677717605936790676615487062801439898422411967627345530959691852661911\"\r\n        \"1778205875205542954770891533489965885042096876032497648142030267811160250054913767314701544819399714469909\"\r\n        \"66796875e-73\"},\r\n    {0x1.fffffffffffffp-240, chars_format::scientific, 220,\r\n        \"1.\"\r\n        \"1319598848533389202658471997391742133335543521187358135323097412560287979684482393525469106191938370532382\"\r\n        \"2355641175041108590954178306697993177008419375206499529628406053562232050010982753462940308963879942893981\"\r\n        \"93359375e-72\"},\r\n    {0x1.fffffffffffffp-239, chars_format::scientific, 219,\r\n        \"2.\"\r\n        \"2639197697066778405316943994783484266671087042374716270646194825120575959368964787050938212383876741064764\"\r\n        \"4711282350082217181908356613395986354016838750412999059256812107124464100021965506925880617927759885787963\"\r\n        \"8671875e-72\"},\r\n    {0x1.fffffffffffffp-238, chars_format::scientific, 218,\r\n        \"4.\"\r\n        \"5278395394133556810633887989566968533342174084749432541292389650241151918737929574101876424767753482129528\"\r\n        \"9422564700164434363816713226791972708033677500825998118513624214248928200043931013851761235855519771575927\"\r\n        \"734375e-72\"},\r\n    {0x1.fffffffffffffp-237, chars_format::scientific, 217,\r\n        \"9.\"\r\n        \"0556790788267113621267775979133937066684348169498865082584779300482303837475859148203752849535506964259057\"\r\n        \"8845129400328868727633426453583945416067355001651996237027248428497856400087862027703522471711039543151855\"\r\n        \"46875e-72\"},\r\n    {0x1.fffffffffffffp-236, chars_format::scientific, 217,\r\n        \"1.\"\r\n        \"8111358157653422724253555195826787413336869633899773016516955860096460767495171829640750569907101392851811\"\r\n        \"5769025880065773745526685290716789083213471000330399247405449685699571280017572405540704494342207908630371\"\r\n        \"09375e-71\"},\r\n    {0x1.fffffffffffffp-235, chars_format::scientific, 216,\r\n        \"3.\"\r\n        \"6222716315306845448507110391653574826673739267799546033033911720192921534990343659281501139814202785703623\"\r\n        \"1538051760131547491053370581433578166426942000660798494810899371399142560035144811081408988684415817260742\"\r\n        \"1875e-71\"},\r\n    {0x1.fffffffffffffp-234, chars_format::scientific, 215,\r\n        \"7.\"\r\n        \"2445432630613690897014220783307149653347478535599092066067823440385843069980687318563002279628405571407246\"\r\n        \"3076103520263094982106741162867156332853884001321596989621798742798285120070289622162817977368831634521484\"\r\n        \"375e-71\"},\r\n    {0x1.fffffffffffffp-233, chars_format::scientific, 215,\r\n        \"1.\"\r\n        \"4489086526122738179402844156661429930669495707119818413213564688077168613996137463712600455925681114281449\"\r\n        \"2615220704052618996421348232573431266570776800264319397924359748559657024014057924432563595473766326904296\"\r\n        \"875e-70\"},\r\n    {0x1.fffffffffffffp-232, chars_format::scientific, 214,\r\n        \"2.\"\r\n        \"8978173052245476358805688313322859861338991414239636826427129376154337227992274927425200911851362228562898\"\r\n        \"5230441408105237992842696465146862533141553600528638795848719497119314048028115848865127190947532653808593\"\r\n        \"75e-70\"},\r\n    {0x1.fffffffffffffp-231, chars_format::scientific, 213,\r\n        \"5.\"\r\n        \"7956346104490952717611376626645719722677982828479273652854258752308674455984549854850401823702724457125797\"\r\n        \"0460882816210475985685392930293725066283107201057277591697438994238628096056231697730254381895065307617187\"\r\n        \"5e-70\"},\r\n    {0x1.fffffffffffffp-230, chars_format::scientific, 213,\r\n        \"1.\"\r\n        \"1591269220898190543522275325329143944535596565695854730570851750461734891196909970970080364740544891425159\"\r\n        \"4092176563242095197137078586058745013256621440211455518339487798847725619211246339546050876379013061523437\"\r\n        \"5e-69\"},\r\n    {0x1.fffffffffffffp-229, chars_format::scientific, 212,\r\n        \"2.\"\r\n        \"3182538441796381087044550650658287889071193131391709461141703500923469782393819941940160729481089782850318\"\r\n        \"8184353126484190394274157172117490026513242880422911036678975597695451238422492679092101752758026123046875\"\r\n        \"e-69\"},\r\n    {0x1.fffffffffffffp-228, chars_format::scientific, 211,\r\n        \"4.\"\r\n        \"6365076883592762174089101301316575778142386262783418922283407001846939564787639883880321458962179565700637\"\r\n        \"636870625296838078854831434423498005302648576084582207335795119539090247684498535818420350551605224609375e\"\r\n        \"-69\"},\r\n    {0x1.fffffffffffffp-227, chars_format::scientific, 210,\r\n        \"9.\"\r\n        \"2730153767185524348178202602633151556284772525566837844566814003693879129575279767760642917924359131401275\"\r\n        \"27374125059367615770966286884699601060529715216916441467159023907818049536899707163684070110321044921875e-\"\r\n        \"69\"},\r\n    {0x1.fffffffffffffp-226, chars_format::scientific, 210,\r\n        \"1.\"\r\n        \"8546030753437104869635640520526630311256954505113367568913362800738775825915055953552128583584871826280255\"\r\n        \"05474825011873523154193257376939920212105943043383288293431804781563609907379941432736814022064208984375e-\"\r\n        \"68\"},\r\n    {0x1.fffffffffffffp-225, chars_format::scientific, 209,\r\n        \"3.\"\r\n        \"7092061506874209739271281041053260622513909010226735137826725601477551651830111907104257167169743652560510\"\r\n        \"1094965002374704630838651475387984042421188608676657658686360956312721981475988286547362804412841796875e-\"\r\n        \"68\"},\r\n    {0x1.fffffffffffffp-224, chars_format::scientific, 208,\r\n        \"7.\"\r\n        \"4184123013748419478542562082106521245027818020453470275653451202955103303660223814208514334339487305121020\"\r\n        \"218993000474940926167730295077596808484237721735331531737272191262544396295197657309472560882568359375e-\"\r\n        \"68\"},\r\n    {0x1.fffffffffffffp-223, chars_format::scientific, 208,\r\n        \"1.\"\r\n        \"4836824602749683895708512416421304249005563604090694055130690240591020660732044762841702866867897461024204\"\r\n        \"043798600094988185233546059015519361696847544347066306347454438252508879259039531461894512176513671875e-\"\r\n        \"67\"},\r\n    {0x1.fffffffffffffp-222, chars_format::scientific, 207,\r\n        \"2.\"\r\n        \"9673649205499367791417024832842608498011127208181388110261380481182041321464089525683405733735794922048408\"\r\n        \"08759720018997637046709211803103872339369508869413261269490887650501775851807906292378902435302734375e-\"\r\n        \"67\"},\r\n    {0x1.fffffffffffffp-221, chars_format::scientific, 206,\r\n        \"5.\"\r\n        \"9347298410998735582834049665685216996022254416362776220522760962364082642928179051366811467471589844096816\"\r\n        \"1751944003799527409341842360620774467873901773882652253898177530100355170361581258475780487060546875e-67\"},\r\n    {0x1.fffffffffffffp-220, chars_format::scientific, 206,\r\n        \"1.\"\r\n        \"1869459682199747116566809933137043399204450883272555244104552192472816528585635810273362293494317968819363\"\r\n        \"2350388800759905481868368472124154893574780354776530450779635506020071034072316251695156097412109375e-66\"},\r\n    {0x1.fffffffffffffp-219, chars_format::scientific, 205,\r\n        \"2.\"\r\n        \"3738919364399494233133619866274086798408901766545110488209104384945633057171271620546724586988635937638726\"\r\n        \"470077760151981096373673694424830978714956070955306090155927101204014206814463250339031219482421875e-66\"},\r\n    {0x1.fffffffffffffp-218, chars_format::scientific, 204,\r\n        \"4.\"\r\n        \"7477838728798988466267239732548173596817803533090220976418208769891266114342543241093449173977271875277452\"\r\n        \"94015552030396219274734738884966195742991214191061218031185420240802841362892650067806243896484375e-66\"},\r\n    {0x1.fffffffffffffp-217, chars_format::scientific, 203,\r\n        \"9.\"\r\n        \"4955677457597976932534479465096347193635607066180441952836417539782532228685086482186898347954543750554905\"\r\n        \"8803110406079243854946947776993239148598242838212243606237084048160568272578530013561248779296875e-66\"},\r\n    {0x1.fffffffffffffp-216, chars_format::scientific, 203,\r\n        \"1.\"\r\n        \"8991135491519595386506895893019269438727121413236088390567283507956506445737017296437379669590908750110981\"\r\n        \"1760622081215848770989389555398647829719648567642448721247416809632113654515706002712249755859375e-65\"},\r\n    {0x1.fffffffffffffp-215, chars_format::scientific, 202,\r\n        \"3.\"\r\n        \"7982270983039190773013791786038538877454242826472176781134567015913012891474034592874759339181817500221962\"\r\n        \"352124416243169754197877911079729565943929713528489744249483361926422730903141200542449951171875e-65\"},\r\n    {0x1.fffffffffffffp-214, chars_format::scientific, 201,\r\n        \"7.\"\r\n        \"5964541966078381546027583572077077754908485652944353562269134031826025782948069185749518678363635000443924\"\r\n        \"70424883248633950839575582215945913188785942705697948849896672385284546180628240108489990234375e-65\"},\r\n    {0x1.fffffffffffffp-213, chars_format::scientific, 201,\r\n        \"1.\"\r\n        \"5192908393215676309205516714415415550981697130588870712453826806365205156589613837149903735672727000088784\"\r\n        \"94084976649726790167915116443189182637757188541139589769979334477056909236125648021697998046875e-64\"},\r\n    {0x1.fffffffffffffp-212, chars_format::scientific, 200,\r\n        \"3.\"\r\n        \"0385816786431352618411033428830831101963394261177741424907653612730410313179227674299807471345454000177569\"\r\n        \"8816995329945358033583023288637836527551437708227917953995866895411381847225129604339599609375e-64\"},\r\n    {0x1.fffffffffffffp-211, chars_format::scientific, 199,\r\n        \"6.\"\r\n        \"0771633572862705236822066857661662203926788522355482849815307225460820626358455348599614942690908000355139\"\r\n        \"763399065989071606716604657727567305510287541645583590799173379082276369445025920867919921875e-64\"},\r\n    {0x1.fffffffffffffp-210, chars_format::scientific, 199,\r\n        \"1.\"\r\n        \"2154326714572541047364413371532332440785357704471096569963061445092164125271691069719922988538181600071027\"\r\n        \"952679813197814321343320931545513461102057508329116718159834675816455273889005184173583984375e-63\"},\r\n    {0x1.fffffffffffffp-209, chars_format::scientific, 198,\r\n        \"2.\"\r\n        \"4308653429145082094728826743064664881570715408942193139926122890184328250543382139439845977076363200142055\"\r\n        \"90535962639562864268664186309102692220411501665823343631966935163291054777801036834716796875e-63\"},\r\n    {0x1.fffffffffffffp-208, chars_format::scientific, 197,\r\n        \"4.\"\r\n        \"8617306858290164189457653486129329763141430817884386279852245780368656501086764278879691954152726400284111\"\r\n        \"8107192527912572853732837261820538444082300333164668726393387032658210955560207366943359375e-63\"},\r\n    {0x1.fffffffffffffp-207, chars_format::scientific, 196,\r\n        \"9.\"\r\n        \"7234613716580328378915306972258659526282861635768772559704491560737313002173528557759383908305452800568223\"\r\n        \"621438505582514570746567452364107688816460066632933745278677406531642191112041473388671875e-63\"},\r\n    {0x1.fffffffffffffp-206, chars_format::scientific, 196,\r\n        \"1.\"\r\n        \"9446922743316065675783061394451731905256572327153754511940898312147462600434705711551876781661090560113644\"\r\n        \"724287701116502914149313490472821537763292013326586749055735481306328438222408294677734375e-62\"},\r\n    {0x1.fffffffffffffp-205, chars_format::scientific, 195,\r\n        \"3.\"\r\n        \"8893845486632131351566122788903463810513144654307509023881796624294925200869411423103753563322181120227289\"\r\n        \"44857540223300582829862698094564307552658402665317349811147096261265687644481658935546875e-62\"},\r\n    {0x1.fffffffffffffp-204, chars_format::scientific, 194,\r\n        \"7.\"\r\n        \"7787690973264262703132245577806927621026289308615018047763593248589850401738822846207507126644362240454578\"\r\n        \"8971508044660116565972539618912861510531680533063469962229419252253137528896331787109375e-62\"},\r\n    {0x1.fffffffffffffp-203, chars_format::scientific, 194,\r\n        \"1.\"\r\n        \"5557538194652852540626449115561385524205257861723003609552718649717970080347764569241501425328872448090915\"\r\n        \"7794301608932023313194507923782572302106336106612693992445883850450627505779266357421875e-61\"},\r\n    {0x1.fffffffffffffp-202, chars_format::scientific, 193,\r\n        \"3.\"\r\n        \"1115076389305705081252898231122771048410515723446007219105437299435940160695529138483002850657744896181831\"\r\n        \"558860321786404662638901584756514460421267221322538798489176770090125501155853271484375e-61\"},\r\n    {0x1.fffffffffffffp-201, chars_format::scientific, 192,\r\n        \"6.\"\r\n        \"2230152778611410162505796462245542096821031446892014438210874598871880321391058276966005701315489792363663\"\r\n        \"11772064357280932527780316951302892084253444264507759697835354018025100231170654296875e-61\"},\r\n    {0x1.fffffffffffffp-200, chars_format::scientific, 192,\r\n        \"1.\"\r\n        \"2446030555722282032501159292449108419364206289378402887642174919774376064278211655393201140263097958472732\"\r\n        \"62354412871456186505556063390260578416850688852901551939567070803605020046234130859375e-60\"},\r\n    {0x1.fffffffffffffp-199, chars_format::scientific, 191,\r\n        \"2.\"\r\n        \"4892061111444564065002318584898216838728412578756805775284349839548752128556423310786402280526195916945465\"\r\n        \"2470882574291237301111212678052115683370137770580310387913414160721004009246826171875e-60\"},\r\n    {0x1.fffffffffffffp-198, chars_format::scientific, 190,\r\n        \"4.\"\r\n        \"9784122222889128130004637169796433677456825157513611550568699679097504257112846621572804561052391833890930\"\r\n        \"494176514858247460222242535610423136674027554116062077582682832144200801849365234375e-60\"},\r\n    {0x1.fffffffffffffp-197, chars_format::scientific, 189,\r\n        \"9.\"\r\n        \"9568244445778256260009274339592867354913650315027223101137399358195008514225693243145609122104783667781860\"\r\n        \"98835302971649492044448507122084627334805510823212415516536566428840160369873046875e-60\"},\r\n    {0x1.fffffffffffffp-196, chars_format::scientific, 189,\r\n        \"1.\"\r\n        \"9913648889155651252001854867918573470982730063005444620227479871639001702845138648629121824420956733556372\"\r\n        \"19767060594329898408889701424416925466961102164642483103307313285768032073974609375e-59\"},\r\n    {0x1.fffffffffffffp-195, chars_format::scientific, 188,\r\n        \"3.\"\r\n        \"9827297778311302504003709735837146941965460126010889240454959743278003405690277297258243648841913467112744\"\r\n        \"3953412118865979681777940284883385093392220432928496620661462657153606414794921875e-59\"},\r\n    {0x1.fffffffffffffp-194, chars_format::scientific, 187,\r\n        \"7.\"\r\n        \"9654595556622605008007419471674293883930920252021778480909919486556006811380554594516487297683826934225488\"\r\n        \"790682423773195936355588056976677018678444086585699324132292531430721282958984375e-59\"},\r\n    {0x1.fffffffffffffp-193, chars_format::scientific, 187,\r\n        \"1.\"\r\n        \"5930919111324521001601483894334858776786184050404355696181983897311201362276110918903297459536765386845097\"\r\n        \"758136484754639187271117611395335403735688817317139864826458506286144256591796875e-58\"},\r\n    {0x1.fffffffffffffp-192, chars_format::scientific, 186,\r\n        \"3.\"\r\n        \"1861838222649042003202967788669717553572368100808711392363967794622402724552221837806594919073530773690195\"\r\n        \"51627296950927837454223522279067080747137763463427972965291701257228851318359375e-58\"},\r\n    {0x1.fffffffffffffp-191, chars_format::scientific, 185,\r\n        \"6.\"\r\n        \"3723676445298084006405935577339435107144736201617422784727935589244805449104443675613189838147061547380391\"\r\n        \"0325459390185567490844704455813416149427552692685594593058340251445770263671875e-58\"},\r\n    {0x1.fffffffffffffp-190, chars_format::scientific, 185,\r\n        \"1.\"\r\n        \"2744735289059616801281187115467887021428947240323484556945587117848961089820888735122637967629412309476078\"\r\n        \"2065091878037113498168940891162683229885510538537118918611668050289154052734375e-57\"},\r\n    {0x1.fffffffffffffp-189, chars_format::scientific, 184,\r\n        \"2.\"\r\n        \"5489470578119233602562374230935774042857894480646969113891174235697922179641777470245275935258824618952156\"\r\n        \"413018375607422699633788178232536645977102107707423783722333610057830810546875e-57\"},\r\n    {0x1.fffffffffffffp-188, chars_format::scientific, 183,\r\n        \"5.\"\r\n        \"0978941156238467205124748461871548085715788961293938227782348471395844359283554940490551870517649237904312\"\r\n        \"82603675121484539926757635646507329195420421541484756744466722011566162109375e-57\"},\r\n    {0x1.fffffffffffffp-187, chars_format::scientific, 183,\r\n        \"1.\"\r\n        \"0195788231247693441024949692374309617143157792258787645556469694279168871856710988098110374103529847580862\"\r\n        \"56520735024296907985351527129301465839084084308296951348893344402313232421875e-56\"},\r\n    {0x1.fffffffffffffp-186, chars_format::scientific, 182,\r\n        \"2.\"\r\n        \"0391576462495386882049899384748619234286315584517575291112939388558337743713421976196220748207059695161725\"\r\n        \"1304147004859381597070305425860293167816816861659390269778668880462646484375e-56\"},\r\n    {0x1.fffffffffffffp-185, chars_format::scientific, 181,\r\n        \"4.\"\r\n        \"0783152924990773764099798769497238468572631169035150582225878777116675487426843952392441496414119390323450\"\r\n        \"260829400971876319414061085172058633563363372331878053955733776092529296875e-56\"},\r\n    {0x1.fffffffffffffp-184, chars_format::scientific, 180,\r\n        \"8.\"\r\n        \"1566305849981547528199597538994476937145262338070301164451757554233350974853687904784882992828238780646900\"\r\n        \"52165880194375263882812217034411726712672674466375610791146755218505859375e-56\"},\r\n    {0x1.fffffffffffffp-183, chars_format::scientific, 180,\r\n        \"1.\"\r\n        \"6313261169996309505639919507798895387429052467614060232890351510846670194970737580956976598565647756129380\"\r\n        \"10433176038875052776562443406882345342534534893275122158229351043701171875e-55\"},\r\n    {0x1.fffffffffffffp-182, chars_format::scientific, 179,\r\n        \"3.\"\r\n        \"2626522339992619011279839015597790774858104935228120465780703021693340389941475161913953197131295512258760\"\r\n        \"2086635207775010555312488681376469068506906978655024431645870208740234375e-55\"},\r\n    {0x1.fffffffffffffp-181, chars_format::scientific, 178,\r\n        \"6.\"\r\n        \"5253044679985238022559678031195581549716209870456240931561406043386680779882950323827906394262591024517520\"\r\n        \"417327041555002111062497736275293813701381395731004886329174041748046875e-55\"},\r\n    {0x1.fffffffffffffp-180, chars_format::scientific, 178,\r\n        \"1.\"\r\n        \"3050608935997047604511935606239116309943241974091248186312281208677336155976590064765581278852518204903504\"\r\n        \"083465408311000422212499547255058762740276279146200977265834808349609375e-54\"},\r\n    {0x1.fffffffffffffp-179, chars_format::scientific, 177,\r\n        \"2.\"\r\n        \"6101217871994095209023871212478232619886483948182496372624562417354672311953180129531162557705036409807008\"\r\n        \"16693081662200084442499909451011752548055255829240195453166961669921875e-54\"},\r\n    {0x1.fffffffffffffp-178, chars_format::scientific, 176,\r\n        \"5.\"\r\n        \"2202435743988190418047742424956465239772967896364992745249124834709344623906360259062325115410072819614016\"\r\n        \"3338616332440016888499981890202350509611051165848039090633392333984375e-54\"},\r\n    {0x1.fffffffffffffp-177, chars_format::scientific, 176,\r\n        \"1.\"\r\n        \"0440487148797638083609548484991293047954593579272998549049824966941868924781272051812465023082014563922803\"\r\n        \"2667723266488003377699996378040470101922210233169607818126678466796875e-53\"},\r\n    {0x1.fffffffffffffp-176, chars_format::scientific, 175,\r\n        \"2.\"\r\n        \"0880974297595276167219096969982586095909187158545997098099649933883737849562544103624930046164029127845606\"\r\n        \"533544653297600675539999275608094020384442046633921563625335693359375e-53\"},\r\n    {0x1.fffffffffffffp-175, chars_format::scientific, 174,\r\n        \"4.\"\r\n        \"1761948595190552334438193939965172191818374317091994196199299867767475699125088207249860092328058255691213\"\r\n        \"06708930659520135107999855121618804076888409326784312725067138671875e-53\"},\r\n    {0x1.fffffffffffffp-174, chars_format::scientific, 173,\r\n        \"8.\"\r\n        \"3523897190381104668876387879930344383636748634183988392398599735534951398250176414499720184656116511382426\"\r\n        \"1341786131904027021599971024323760815377681865356862545013427734375e-53\"},\r\n    {0x1.fffffffffffffp-173, chars_format::scientific, 173,\r\n        \"1.\"\r\n        \"6704779438076220933775277575986068876727349726836797678479719947106990279650035282899944036931223302276485\"\r\n        \"2268357226380805404319994204864752163075536373071372509002685546875e-52\"},\r\n    {0x1.fffffffffffffp-172, chars_format::scientific, 172,\r\n        \"3.\"\r\n        \"3409558876152441867550555151972137753454699453673595356959439894213980559300070565799888073862446604552970\"\r\n        \"453671445276161080863998840972950432615107274614274501800537109375e-52\"},\r\n    {0x1.fffffffffffffp-171, chars_format::scientific, 171,\r\n        \"6.\"\r\n        \"6819117752304883735101110303944275506909398907347190713918879788427961118600141131599776147724893209105940\"\r\n        \"90734289055232216172799768194590086523021454922854900360107421875e-52\"},\r\n    {0x1.fffffffffffffp-170, chars_format::scientific, 171,\r\n        \"1.\"\r\n        \"3363823550460976747020222060788855101381879781469438142783775957685592223720028226319955229544978641821188\"\r\n        \"18146857811046443234559953638918017304604290984570980072021484375e-51\"},\r\n    {0x1.fffffffffffffp-169, chars_format::scientific, 170,\r\n        \"2.\"\r\n        \"6727647100921953494040444121577710202763759562938876285567551915371184447440056452639910459089957283642376\"\r\n        \"3629371562209288646911990727783603460920858196914196014404296875e-51\"},\r\n    {0x1.fffffffffffffp-168, chars_format::scientific, 169,\r\n        \"5.\"\r\n        \"3455294201843906988080888243155420405527519125877752571135103830742368894880112905279820918179914567284752\"\r\n        \"725874312441857729382398145556720692184171639382839202880859375e-51\"},\r\n    {0x1.fffffffffffffp-167, chars_format::scientific, 169,\r\n        \"1.\"\r\n        \"0691058840368781397616177648631084081105503825175550514227020766148473778976022581055964183635982913456950\"\r\n        \"545174862488371545876479629111344138436834327876567840576171875e-50\"},\r\n    {0x1.fffffffffffffp-166, chars_format::scientific, 168,\r\n        \"2.\"\r\n        \"1382117680737562795232355297262168162211007650351101028454041532296947557952045162111928367271965826913901\"\r\n        \"09034972497674309175295925822268827687366865575313568115234375e-50\"},\r\n    {0x1.fffffffffffffp-165, chars_format::scientific, 167,\r\n        \"4.\"\r\n        \"2764235361475125590464710594524336324422015300702202056908083064593895115904090324223856734543931653827802\"\r\n        \"1806994499534861835059185164453765537473373115062713623046875e-50\"},\r\n    {0x1.fffffffffffffp-164, chars_format::scientific, 166,\r\n        \"8.\"\r\n        \"5528470722950251180929421189048672648844030601404404113816166129187790231808180648447713469087863307655604\"\r\n        \"361398899906972367011837032890753107494674623012542724609375e-50\"},\r\n    {0x1.fffffffffffffp-163, chars_format::scientific, 166,\r\n        \"1.\"\r\n        \"7105694144590050236185884237809734529768806120280880822763233225837558046361636129689542693817572661531120\"\r\n        \"872279779981394473402367406578150621498934924602508544921875e-49\"},\r\n    {0x1.fffffffffffffp-162, chars_format::scientific, 165,\r\n        \"3.\"\r\n        \"4211388289180100472371768475619469059537612240561761645526466451675116092723272259379085387635145323062241\"\r\n        \"74455955996278894680473481315630124299786984920501708984375e-49\"},\r\n    {0x1.fffffffffffffp-161, chars_format::scientific, 164,\r\n        \"6.\"\r\n        \"8422776578360200944743536951238938119075224481123523291052932903350232185446544518758170775270290646124483\"\r\n        \"4891191199255778936094696263126024859957396984100341796875e-49\"},\r\n    {0x1.fffffffffffffp-160, chars_format::scientific, 164,\r\n        \"1.\"\r\n        \"3684555315672040188948707390247787623815044896224704658210586580670046437089308903751634155054058129224896\"\r\n        \"6978238239851155787218939252625204971991479396820068359375e-48\"},\r\n    {0x1.fffffffffffffp-159, chars_format::scientific, 163,\r\n        \"2.\"\r\n        \"7369110631344080377897414780495575247630089792449409316421173161340092874178617807503268310108116258449793\"\r\n        \"395647647970231157443787850525040994398295879364013671875e-48\"},\r\n    {0x1.fffffffffffffp-158, chars_format::scientific, 162,\r\n        \"5.\"\r\n        \"4738221262688160755794829560991150495260179584898818632842346322680185748357235615006536620216232516899586\"\r\n        \"79129529594046231488757570105008198879659175872802734375e-48\"},\r\n    {0x1.fffffffffffffp-157, chars_format::scientific, 162,\r\n        \"1.\"\r\n        \"0947644252537632151158965912198230099052035916979763726568469264536037149671447123001307324043246503379917\"\r\n        \"35825905918809246297751514021001639775931835174560546875e-47\"},\r\n    {0x1.fffffffffffffp-156, chars_format::scientific, 161,\r\n        \"2.\"\r\n        \"1895288505075264302317931824396460198104071833959527453136938529072074299342894246002614648086493006759834\"\r\n        \"7165181183761849259550302804200327955186367034912109375e-47\"},\r\n    {0x1.fffffffffffffp-155, chars_format::scientific, 160,\r\n        \"4.\"\r\n        \"3790577010150528604635863648792920396208143667919054906273877058144148598685788492005229296172986013519669\"\r\n        \"433036236752369851910060560840065591037273406982421875e-47\"},\r\n    {0x1.fffffffffffffp-154, chars_format::scientific, 159,\r\n        \"8.\"\r\n        \"7581154020301057209271727297585840792416287335838109812547754116288297197371576984010458592345972027039338\"\r\n        \"86607247350473970382012112168013118207454681396484375e-47\"},\r\n    {0x1.fffffffffffffp-153, chars_format::scientific, 159,\r\n        \"1.\"\r\n        \"7516230804060211441854345459517168158483257467167621962509550823257659439474315396802091718469194405407867\"\r\n        \"77321449470094794076402422433602623641490936279296875e-46\"},\r\n    {0x1.fffffffffffffp-152, chars_format::scientific, 158,\r\n        \"3.\"\r\n        \"5032461608120422883708690919034336316966514934335243925019101646515318878948630793604183436938388810815735\"\r\n        \"5464289894018958815280484486720524728298187255859375e-46\"},\r\n    {0x1.fffffffffffffp-151, chars_format::scientific, 157,\r\n        \"7.\"\r\n        \"0064923216240845767417381838068672633933029868670487850038203293030637757897261587208366873876777621631471\"\r\n        \"092857978803791763056096897344104945659637451171875e-46\"},\r\n    {0x1.fffffffffffffp-150, chars_format::scientific, 157,\r\n        \"1.\"\r\n        \"4012984643248169153483476367613734526786605973734097570007640658606127551579452317441673374775355524326294\"\r\n        \"218571595760758352611219379468820989131927490234375e-45\"},\r\n    {0x1.fffffffffffffp-149, chars_format::scientific, 156,\r\n        \"2.\"\r\n        \"8025969286496338306966952735227469053573211947468195140015281317212255103158904634883346749550711048652588\"\r\n        \"43714319152151670522243875893764197826385498046875e-45\"},\r\n    {0x1.fffffffffffffp-148, chars_format::scientific, 155,\r\n        \"5.\"\r\n        \"6051938572992676613933905470454938107146423894936390280030562634424510206317809269766693499101422097305176\"\r\n        \"8742863830430334104448775178752839565277099609375e-45\"},\r\n    {0x1.fffffffffffffp-147, chars_format::scientific, 155,\r\n        \"1.\"\r\n        \"1210387714598535322786781094090987621429284778987278056006112526884902041263561853953338699820284419461035\"\r\n        \"3748572766086066820889755035750567913055419921875e-44\"},\r\n    {0x1.fffffffffffffp-146, chars_format::scientific, 154,\r\n        \"2.\"\r\n        \"2420775429197070645573562188181975242858569557974556112012225053769804082527123707906677399640568838922070\"\r\n        \"749714553217213364177951007150113582611083984375e-44\"},\r\n    {0x1.fffffffffffffp-145, chars_format::scientific, 153,\r\n        \"4.\"\r\n        \"4841550858394141291147124376363950485717139115949112224024450107539608165054247415813354799281137677844141\"\r\n        \"49942910643442672835590201430022716522216796875e-44\"},\r\n    {0x1.fffffffffffffp-144, chars_format::scientific, 152,\r\n        \"8.\"\r\n        \"9683101716788282582294248752727900971434278231898224448048900215079216330108494831626709598562275355688282\"\r\n        \"9988582128688534567118040286004543304443359375e-44\"},\r\n    {0x1.fffffffffffffp-143, chars_format::scientific, 152,\r\n        \"1.\"\r\n        \"7936620343357656516458849750545580194286855646379644889609780043015843266021698966325341919712455071137656\"\r\n        \"5997716425737706913423608057200908660888671875e-43\"},\r\n    {0x1.fffffffffffffp-142, chars_format::scientific, 151,\r\n        \"3.\"\r\n        \"5873240686715313032917699501091160388573711292759289779219560086031686532043397932650683839424910142275313\"\r\n        \"199543285147541382684721611440181732177734375e-43\"},\r\n    {0x1.fffffffffffffp-141, chars_format::scientific, 150,\r\n        \"7.\"\r\n        \"1746481373430626065835399002182320777147422585518579558439120172063373064086795865301367678849820284550626\"\r\n        \"39908657029508276536944322288036346435546875e-43\"},\r\n    {0x1.fffffffffffffp-140, chars_format::scientific, 150,\r\n        \"1.\"\r\n        \"4349296274686125213167079800436464155429484517103715911687824034412674612817359173060273535769964056910125\"\r\n        \"27981731405901655307388864457607269287109375e-42\"},\r\n    {0x1.fffffffffffffp-139, chars_format::scientific, 149,\r\n        \"2.\"\r\n        \"8698592549372250426334159600872928310858969034207431823375648068825349225634718346120547071539928113820250\"\r\n        \"5596346281180331061477772891521453857421875e-42\"},\r\n    {0x1.fffffffffffffp-138, chars_format::scientific, 148,\r\n        \"5.\"\r\n        \"7397185098744500852668319201745856621717938068414863646751296137650698451269436692241094143079856227640501\"\r\n        \"119269256236066212295554578304290771484375e-42\"},\r\n    {0x1.fffffffffffffp-137, chars_format::scientific, 148,\r\n        \"1.\"\r\n        \"1479437019748900170533663840349171324343587613682972729350259227530139690253887338448218828615971245528100\"\r\n        \"223853851247213242459110915660858154296875e-41\"},\r\n    {0x1.fffffffffffffp-136, chars_format::scientific, 147,\r\n        \"2.\"\r\n        \"2958874039497800341067327680698342648687175227365945458700518455060279380507774676896437657231942491056200\"\r\n        \"44770770249442648491822183132171630859375e-41\"},\r\n    {0x1.fffffffffffffp-135, chars_format::scientific, 146,\r\n        \"4.\"\r\n        \"5917748078995600682134655361396685297374350454731890917401036910120558761015549353792875314463884982112400\"\r\n        \"8954154049888529698364436626434326171875e-41\"},\r\n    {0x1.fffffffffffffp-134, chars_format::scientific, 145,\r\n        \"9.\"\r\n        \"1835496157991201364269310722793370594748700909463781834802073820241117522031098707585750628927769964224801\"\r\n        \"790830809977705939672887325286865234375e-41\"},\r\n    {0x1.fffffffffffffp-133, chars_format::scientific, 145,\r\n        \"1.\"\r\n        \"8367099231598240272853862144558674118949740181892756366960414764048223504406219741517150125785553992844960\"\r\n        \"358166161995541187934577465057373046875e-40\"},\r\n    {0x1.fffffffffffffp-132, chars_format::scientific, 144,\r\n        \"3.\"\r\n        \"6734198463196480545707724289117348237899480363785512733920829528096447008812439483034300251571107985689920\"\r\n        \"71633232399108237586915493011474609375e-40\"},\r\n    {0x1.fffffffffffffp-131, chars_format::scientific, 143,\r\n        \"7.\"\r\n        \"3468396926392961091415448578234696475798960727571025467841659056192894017624878966068600503142215971379841\"\r\n        \"4326646479821647517383098602294921875e-40\"},\r\n    {0x1.fffffffffffffp-130, chars_format::scientific, 143,\r\n        \"1.\"\r\n        \"4693679385278592218283089715646939295159792145514205093568331811238578803524975793213720100628443194275968\"\r\n        \"2865329295964329503476619720458984375e-39\"},\r\n    {0x1.fffffffffffffp-129, chars_format::scientific, 142,\r\n        \"2.\"\r\n        \"9387358770557184436566179431293878590319584291028410187136663622477157607049951586427440201256886388551936\"\r\n        \"573065859192865900695323944091796875e-39\"},\r\n    {0x1.fffffffffffffp-128, chars_format::scientific, 141,\r\n        \"5.\"\r\n        \"8774717541114368873132358862587757180639168582056820374273327244954315214099903172854880402513772777103873\"\r\n        \"14613171838573180139064788818359375e-39\"},\r\n    {0x1.fffffffffffffp-127, chars_format::scientific, 141,\r\n        \"1.\"\r\n        \"1754943508222873774626471772517551436127833716411364074854665448990863042819980634570976080502754555420774\"\r\n        \"62922634367714636027812957763671875e-38\"},\r\n    {0x1.fffffffffffffp-126, chars_format::scientific, 140,\r\n        \"2.\"\r\n        \"3509887016445747549252943545035102872255667432822728149709330897981726085639961269141952161005509110841549\"\r\n        \"2584526873542927205562591552734375e-38\"},\r\n    {0x1.fffffffffffffp-125, chars_format::scientific, 139,\r\n        \"4.\"\r\n        \"7019774032891495098505887090070205744511334865645456299418661795963452171279922538283904322011018221683098\"\r\n        \"516905374708585441112518310546875e-38\"},\r\n    {0x1.fffffffffffffp-124, chars_format::scientific, 138,\r\n        \"9.\"\r\n        \"4039548065782990197011774180140411489022669731290912598837323591926904342559845076567808644022036443366197\"\r\n        \"03381074941717088222503662109375e-38\"},\r\n    {0x1.fffffffffffffp-123, chars_format::scientific, 138,\r\n        \"1.\"\r\n        \"8807909613156598039402354836028082297804533946258182519767464718385380868511969015313561728804407288673239\"\r\n        \"40676214988343417644500732421875e-37\"},\r\n    {0x1.fffffffffffffp-122, chars_format::scientific, 137,\r\n        \"3.\"\r\n        \"7615819226313196078804709672056164595609067892516365039534929436770761737023938030627123457608814577346478\"\r\n        \"8135242997668683528900146484375e-37\"},\r\n    {0x1.fffffffffffffp-121, chars_format::scientific, 136,\r\n        \"7.\"\r\n        \"5231638452626392157609419344112329191218135785032730079069858873541523474047876061254246915217629154692957\"\r\n        \"627048599533736705780029296875e-37\"},\r\n    {0x1.fffffffffffffp-120, chars_format::scientific, 136,\r\n        \"1.\"\r\n        \"5046327690525278431521883868822465838243627157006546015813971774708304694809575212250849383043525830938591\"\r\n        \"525409719906747341156005859375e-36\"},\r\n    {0x1.fffffffffffffp-119, chars_format::scientific, 135,\r\n        \"3.\"\r\n        \"0092655381050556863043767737644931676487254314013092031627943549416609389619150424501698766087051661877183\"\r\n        \"05081943981349468231201171875e-36\"},\r\n    {0x1.fffffffffffffp-118, chars_format::scientific, 134,\r\n        \"6.\"\r\n        \"0185310762101113726087535475289863352974508628026184063255887098833218779238300849003397532174103323754366\"\r\n        \"1016388796269893646240234375e-36\"},\r\n    {0x1.fffffffffffffp-117, chars_format::scientific, 134,\r\n        \"1.\"\r\n        \"2037062152420222745217507095057972670594901725605236812651177419766643755847660169800679506434820664750873\"\r\n        \"2203277759253978729248046875e-35\"},\r\n    {0x1.fffffffffffffp-116, chars_format::scientific, 133,\r\n        \"2.\"\r\n        \"4074124304840445490435014190115945341189803451210473625302354839533287511695320339601359012869641329501746\"\r\n        \"440655551850795745849609375e-35\"},\r\n    {0x1.fffffffffffffp-115, chars_format::scientific, 132,\r\n        \"4.\"\r\n        \"8148248609680890980870028380231890682379606902420947250604709679066575023390640679202718025739282659003492\"\r\n        \"88131110370159149169921875e-35\"},\r\n    {0x1.fffffffffffffp-114, chars_format::scientific, 131,\r\n        \"9.\"\r\n        \"6296497219361781961740056760463781364759213804841894501209419358133150046781281358405436051478565318006985\"\r\n        \"7626222074031829833984375e-35\"},\r\n    {0x1.fffffffffffffp-113, chars_format::scientific, 131,\r\n        \"1.\"\r\n        \"9259299443872356392348011352092756272951842760968378900241883871626630009356256271681087210295713063601397\"\r\n        \"1525244414806365966796875e-34\"},\r\n    {0x1.fffffffffffffp-112, chars_format::scientific, 130,\r\n        \"3.\"\r\n        \"8518598887744712784696022704185512545903685521936757800483767743253260018712512543362174420591426127202794\"\r\n        \"305048882961273193359375e-34\"},\r\n    {0x1.fffffffffffffp-111, chars_format::scientific, 129,\r\n        \"7.\"\r\n        \"7037197775489425569392045408371025091807371043873515600967535486506520037425025086724348841182852254405588\"\r\n        \"61009776592254638671875e-34\"},\r\n    {0x1.fffffffffffffp-110, chars_format::scientific, 129,\r\n        \"1.\"\r\n        \"5407439555097885113878409081674205018361474208774703120193507097301304007485005017344869768236570450881117\"\r\n        \"72201955318450927734375e-33\"},\r\n    {0x1.fffffffffffffp-109, chars_format::scientific, 128,\r\n        \"3.\"\r\n        \"0814879110195770227756818163348410036722948417549406240387014194602608014970010034689739536473140901762235\"\r\n        \"4440391063690185546875e-33\"},\r\n    {0x1.fffffffffffffp-108, chars_format::scientific, 127,\r\n        \"6.\"\r\n        \"1629758220391540455513636326696820073445896835098812480774028389205216029940020069379479072946281803524470\"\r\n        \"888078212738037109375e-33\"},\r\n    {0x1.fffffffffffffp-107, chars_format::scientific, 127,\r\n        \"1.\"\r\n        \"2325951644078308091102727265339364014689179367019762496154805677841043205988004013875895814589256360704894\"\r\n        \"177615642547607421875e-32\"},\r\n    {0x1.fffffffffffffp-106, chars_format::scientific, 126,\r\n        \"2.\"\r\n        \"4651903288156616182205454530678728029378358734039524992309611355682086411976008027751791629178512721409788\"\r\n        \"35523128509521484375e-32\"},\r\n    {0x1.fffffffffffffp-105, chars_format::scientific, 125,\r\n        \"4.\"\r\n        \"9303806576313232364410909061357456058756717468079049984619222711364172823952016055503583258357025442819576\"\r\n        \"7104625701904296875e-32\"},\r\n    {0x1.fffffffffffffp-104, chars_format::scientific, 124,\r\n        \"9.\"\r\n        \"8607613152626464728821818122714912117513434936158099969238445422728345647904032111007166516714050885639153\"\r\n        \"420925140380859375e-32\"},\r\n    {0x1.fffffffffffffp-103, chars_format::scientific, 124,\r\n        \"1.\"\r\n        \"9721522630525292945764363624542982423502686987231619993847689084545669129580806422201433303342810177127830\"\r\n        \"684185028076171875e-31\"},\r\n    {0x1.fffffffffffffp-102, chars_format::scientific, 123,\r\n        \"3.\"\r\n        \"9443045261050585891528727249085964847005373974463239987695378169091338259161612844402866606685620354255661\"\r\n        \"36837005615234375e-31\"},\r\n    {0x1.fffffffffffffp-101, chars_format::scientific, 122,\r\n        \"7.\"\r\n        \"8886090522101171783057454498171929694010747948926479975390756338182676518323225688805733213371240708511322\"\r\n        \"7367401123046875e-31\"},\r\n    {0x1.fffffffffffffp-100, chars_format::scientific, 122,\r\n        \"1.\"\r\n        \"5777218104420234356611490899634385938802149589785295995078151267636535303664645137761146642674248141702264\"\r\n        \"5473480224609375e-30\"},\r\n    {0x1.fffffffffffffp-99, chars_format::scientific, 121,\r\n        \"3.\"\r\n        \"1554436208840468713222981799268771877604299179570591990156302535273070607329290275522293285348496283404529\"\r\n        \"094696044921875e-30\"},\r\n    {0x1.fffffffffffffp-98, chars_format::scientific, 120,\r\n        \"6.\"\r\n        \"3108872417680937426445963598537543755208598359141183980312605070546141214658580551044586570696992566809058\"\r\n        \"18939208984375e-30\"},\r\n    {0x1.fffffffffffffp-97, chars_format::scientific, 120,\r\n        \"1.\"\r\n        \"2621774483536187485289192719707508751041719671828236796062521014109228242931716110208917314139398513361811\"\r\n        \"63787841796875e-29\"},\r\n    {0x1.fffffffffffffp-96, chars_format::scientific, 119,\r\n        \"2.\"\r\n        \"5243548967072374970578385439415017502083439343656473592125042028218456485863432220417834628278797026723623\"\r\n        \"2757568359375e-29\"},\r\n    {0x1.fffffffffffffp-95, chars_format::scientific, 118,\r\n        \"5.\"\r\n        \"0487097934144749941156770878830035004166878687312947184250084056436912971726864440835669256557594053447246\"\r\n        \"551513671875e-29\"},\r\n    {0x1.fffffffffffffp-94, chars_format::scientific, 118,\r\n        \"1.\"\r\n        \"0097419586828949988231354175766007000833375737462589436850016811287382594345372888167133851311518810689449\"\r\n        \"310302734375e-28\"},\r\n    {0x1.fffffffffffffp-93, chars_format::scientific, 117,\r\n        \"2.\"\r\n        \"0194839173657899976462708351532014001666751474925178873700033622574765188690745776334267702623037621378898\"\r\n        \"62060546875e-28\"},\r\n    {0x1.fffffffffffffp-92, chars_format::scientific, 116,\r\n        \"4.\"\r\n        \"0389678347315799952925416703064028003333502949850357747400067245149530377381491552668535405246075242757797\"\r\n        \"2412109375e-28\"},\r\n    {0x1.fffffffffffffp-91, chars_format::scientific, 115,\r\n        \"8.\"\r\n        \"0779356694631599905850833406128056006667005899700715494800134490299060754762983105337070810492150485515594\"\r\n        \"482421875e-28\"},\r\n    {0x1.fffffffffffffp-90, chars_format::scientific, 115,\r\n        \"1.\"\r\n        \"6155871338926319981170166681225611201333401179940143098960026898059812150952596621067414162098430097103118\"\r\n        \"896484375e-27\"},\r\n    {0x1.fffffffffffffp-89, chars_format::scientific, 114,\r\n        \"3.\"\r\n        \"2311742677852639962340333362451222402666802359880286197920053796119624301905193242134828324196860194206237\"\r\n        \"79296875e-27\"},\r\n    {0x1.fffffffffffffp-88, chars_format::scientific, 113,\r\n        \"6.\"\r\n        \"4623485355705279924680666724902444805333604719760572395840107592239248603810386484269656648393720388412475\"\r\n        \"5859375e-27\"},\r\n    {0x1.fffffffffffffp-87, chars_format::scientific, 113,\r\n        \"1.\"\r\n        \"2924697071141055984936133344980488961066720943952114479168021518447849720762077296853931329678744077682495\"\r\n        \"1171875e-26\"},\r\n    {0x1.fffffffffffffp-86, chars_format::scientific, 112,\r\n        \"2.\"\r\n        \"5849394142282111969872266689960977922133441887904228958336043036895699441524154593707862659357488155364990\"\r\n        \"234375e-26\"},\r\n    {0x1.fffffffffffffp-85, chars_format::scientific, 111,\r\n        \"5.\"\r\n        \"1698788284564223939744533379921955844266883775808457916672086073791398883048309187415725318714976310729980\"\r\n        \"46875e-26\"},\r\n    {0x1.fffffffffffffp-84, chars_format::scientific, 111,\r\n        \"1.\"\r\n        \"0339757656912844787948906675984391168853376755161691583334417214758279776609661837483145063742995262145996\"\r\n        \"09375e-25\"},\r\n    {0x1.fffffffffffffp-83, chars_format::scientific, 110,\r\n        \"2.\"\r\n        \"0679515313825689575897813351968782337706753510323383166668834429516559553219323674966290127485990524291992\"\r\n        \"1875e-25\"},\r\n    {0x1.fffffffffffffp-82, chars_format::scientific, 109,\r\n        \"4.\"\r\n        \"1359030627651379151795626703937564675413507020646766333337668859033119106438647349932580254971981048583984\"\r\n        \"375e-25\"},\r\n    {0x1.fffffffffffffp-81, chars_format::scientific, 108,\r\n        \"8.\"\r\n        \"2718061255302758303591253407875129350827014041293532666675337718066238212877294699865160509943962097167968\"\r\n        \"75e-25\"},\r\n    {0x1.fffffffffffffp-80, chars_format::scientific, 108,\r\n        \"1.\"\r\n        \"6543612251060551660718250681575025870165402808258706533335067543613247642575458939973032101988792419433593\"\r\n        \"75e-24\"},\r\n    {0x1.fffffffffffffp-79, chars_format::scientific, 107,\r\n        \"3.\"\r\n        \"3087224502121103321436501363150051740330805616517413066670135087226495285150917879946064203977584838867187\"\r\n        \"5e-24\"},\r\n    {0x1.fffffffffffffp-78, chars_format::scientific, 106,\r\n        \"6.\"\r\n        \"6174449004242206642873002726300103480661611233034826133340270174452990570301835759892128407955169677734375\"\r\n        \"e-24\"},\r\n    {0x1.fffffffffffffp-77, chars_format::scientific, 106,\r\n        \"1.\"\r\n        \"3234889800848441328574600545260020696132322246606965226668054034890598114060367151978425681591033935546875\"\r\n        \"e-23\"},\r\n    {0x1.fffffffffffffp-76, chars_format::scientific, 105,\r\n        \"2.\"\r\n        \"646977960169688265714920109052004139226464449321393045333610806978119622812073430395685136318206787109375e\"\r\n        \"-23\"},\r\n    {0x1.fffffffffffffp-75, chars_format::scientific, 104,\r\n        \"5.\"\r\n        \"29395592033937653142984021810400827845292889864278609066722161395623924562414686079137027263641357421875e-\"\r\n        \"23\"},\r\n    {0x1.fffffffffffffp-74, chars_format::scientific, 104,\r\n        \"1.\"\r\n        \"05879118406787530628596804362080165569058577972855721813344432279124784912482937215827405452728271484375e-\"\r\n        \"22\"},\r\n    {0x1.fffffffffffffp-73, chars_format::scientific, 103,\r\n        \"2.\"\r\n        \"1175823681357506125719360872416033113811715594571144362668886455824956982496587443165481090545654296875e-\"\r\n        \"22\"},\r\n    {0x1.fffffffffffffp-72, chars_format::scientific, 102,\r\n        \"4.235164736271501225143872174483206622762343118914228872533777291164991396499317488633096218109130859375e-\"\r\n        \"22\"},\r\n    {0x1.fffffffffffffp-71, chars_format::scientific, 101,\r\n        \"8.47032947254300245028774434896641324552468623782845774506755458232998279299863497726619243621826171875e-\"\r\n        \"22\"},\r\n    {0x1.fffffffffffffp-70, chars_format::scientific, 101,\r\n        \"1.69406589450860049005754886979328264910493724756569154901351091646599655859972699545323848724365234375e-\"\r\n        \"21\"},\r\n    {0x1.fffffffffffffp-69, chars_format::scientific, 100,\r\n        \"3.3881317890172009801150977395865652982098744951313830980270218329319931171994539909064769744873046875e-\"\r\n        \"21\"},\r\n    {0x1.fffffffffffffp-68, chars_format::scientific, 99,\r\n        \"6.776263578034401960230195479173130596419748990262766196054043665863986234398907981812953948974609375e-\"\r\n        \"21\"},\r\n    {0x1.fffffffffffffp-67, chars_format::scientific, 99,\r\n        \"1.355252715606880392046039095834626119283949798052553239210808733172797246879781596362590789794921875e-\"\r\n        \"20\"},\r\n    {0x1.fffffffffffffp-66, chars_format::scientific, 98,\r\n        \"2.71050543121376078409207819166925223856789959610510647842161746634559449375956319272518157958984375e-20\"},\r\n    {0x1.fffffffffffffp-65, chars_format::scientific, 97,\r\n        \"5.4210108624275215681841563833385044771357991922102129568432349326911889875191263854503631591796875e-20\"},\r\n    {0x1.fffffffffffffp-64, chars_format::scientific, 97,\r\n        \"1.0842021724855043136368312766677008954271598384420425913686469865382377975038252770900726318359375e-19\"},\r\n    {0x1.fffffffffffffp-63, chars_format::scientific, 96,\r\n        \"2.168404344971008627273662553335401790854319676884085182737293973076475595007650554180145263671875e-19\"},\r\n    {0x1.fffffffffffffp-62, chars_format::scientific, 95,\r\n        \"4.33680868994201725454732510667080358170863935376817036547458794615295119001530110836029052734375e-19\"},\r\n    {0x1.fffffffffffffp-61, chars_format::scientific, 94,\r\n        \"8.6736173798840345090946502133416071634172787075363407309491758923059023800306022167205810546875e-19\"},\r\n    {0x1.fffffffffffffp-60, chars_format::scientific, 94,\r\n        \"1.7347234759768069018189300426683214326834557415072681461898351784611804760061204433441162109375e-18\"},\r\n    {0x1.fffffffffffffp-59, chars_format::scientific, 93,\r\n        \"3.469446951953613803637860085336642865366911483014536292379670356922360952012240886688232421875e-18\"},\r\n    {0x1.fffffffffffffp-58, chars_format::scientific, 92,\r\n        \"6.93889390390722760727572017067328573073382296602907258475934071384472190402448177337646484375e-18\"},\r\n    {0x1.fffffffffffffp-57, chars_format::scientific, 92,\r\n        \"1.38777878078144552145514403413465714614676459320581451695186814276894438080489635467529296875e-17\"},\r\n    {0x1.fffffffffffffp-56, chars_format::scientific, 91,\r\n        \"2.7755575615628910429102880682693142922935291864116290339037362855378887616097927093505859375e-17\"},\r\n    {0x1.fffffffffffffp-55, chars_format::scientific, 90,\r\n        \"5.551115123125782085820576136538628584587058372823258067807472571075777523219585418701171875e-17\"},\r\n    {0x1.fffffffffffffp-54, chars_format::scientific, 90,\r\n        \"1.110223024625156417164115227307725716917411674564651613561494514215155504643917083740234375e-16\"},\r\n    {0x1.fffffffffffffp-53, chars_format::scientific, 89,\r\n        \"2.22044604925031283432823045461545143383482334912930322712298902843031100928783416748046875e-16\"},\r\n    {0x1.fffffffffffffp-52, chars_format::scientific, 88,\r\n        \"4.4408920985006256686564609092309028676696466982586064542459780568606220185756683349609375e-16\"},\r\n    {0x1.fffffffffffffp-51, chars_format::scientific, 87,\r\n        \"8.881784197001251337312921818461805735339293396517212908491956113721244037151336669921875e-16\"},\r\n    {0x1.fffffffffffffp-50, chars_format::scientific, 87,\r\n        \"1.776356839400250267462584363692361147067858679303442581698391222744248807430267333984375e-15\"},\r\n    {0x1.fffffffffffffp-49, chars_format::scientific, 86,\r\n        \"3.55271367880050053492516872738472229413571735860688516339678244548849761486053466796875e-15\"},\r\n    {0x1.fffffffffffffp-48, chars_format::scientific, 85,\r\n        \"7.1054273576010010698503374547694445882714347172137703267935648909769952297210693359375e-15\"},\r\n    {0x1.fffffffffffffp-47, chars_format::scientific, 85,\r\n        \"1.4210854715202002139700674909538889176542869434427540653587129781953990459442138671875e-14\"},\r\n    {0x1.fffffffffffffp-46, chars_format::scientific, 84,\r\n        \"2.842170943040400427940134981907777835308573886885508130717425956390798091888427734375e-14\"},\r\n    {0x1.fffffffffffffp-45, chars_format::scientific, 83,\r\n        \"5.68434188608080085588026996381555567061714777377101626143485191278159618377685546875e-14\"},\r\n    {0x1.fffffffffffffp-44, chars_format::scientific, 83,\r\n        \"1.13686837721616017117605399276311113412342955475420325228697038255631923675537109375e-13\"},\r\n    {0x1.fffffffffffffp-43, chars_format::scientific, 82,\r\n        \"2.2737367544323203423521079855262222682468591095084065045739407651126384735107421875e-13\"},\r\n    {0x1.fffffffffffffp-42, chars_format::scientific, 81,\r\n        \"4.547473508864640684704215971052444536493718219016813009147881530225276947021484375e-13\"},\r\n    {0x1.fffffffffffffp-41, chars_format::scientific, 80,\r\n        \"9.09494701772928136940843194210488907298743643803362601829576306045055389404296875e-13\"},\r\n    {0x1.fffffffffffffp-40, chars_format::scientific, 80,\r\n        \"1.81898940354585627388168638842097781459748728760672520365915261209011077880859375e-12\"},\r\n    {0x1.fffffffffffffp-39, chars_format::scientific, 79,\r\n        \"3.6379788070917125477633727768419556291949745752134504073183052241802215576171875e-12\"},\r\n    {0x1.fffffffffffffp-38, chars_format::scientific, 78,\r\n        \"7.275957614183425095526745553683911258389949150426900814636610448360443115234375e-12\"},\r\n    {0x1.fffffffffffffp-37, chars_format::scientific, 78,\r\n        \"1.455191522836685019105349110736782251677989830085380162927322089672088623046875e-11\"},\r\n    {0x1.fffffffffffffp-36, chars_format::scientific, 77,\r\n        \"2.91038304567337003821069822147356450335597966017076032585464417934417724609375e-11\"},\r\n    {0x1.fffffffffffffp-35, chars_format::scientific, 76,\r\n        \"5.8207660913467400764213964429471290067119593203415206517092883586883544921875e-11\"},\r\n    {0x1.fffffffffffffp-34, chars_format::scientific, 76,\r\n        \"1.1641532182693480152842792885894258013423918640683041303418576717376708984375e-10\"},\r\n    {0x1.fffffffffffffp-33, chars_format::scientific, 75,\r\n        \"2.328306436538696030568558577178851602684783728136608260683715343475341796875e-10\"},\r\n    {0x1.fffffffffffffp-32, chars_format::scientific, 74,\r\n        \"4.65661287307739206113711715435770320536956745627321652136743068695068359375e-10\"},\r\n    {0x1.fffffffffffffp-31, chars_format::scientific, 73,\r\n        \"9.3132257461547841222742343087154064107391349125464330427348613739013671875e-10\"},\r\n    {0x1.fffffffffffffp-30, chars_format::scientific, 73,\r\n        \"1.8626451492309568244548468617430812821478269825092866085469722747802734375e-09\"},\r\n    {0x1.fffffffffffffp-29, chars_format::scientific, 72,\r\n        \"3.725290298461913648909693723486162564295653965018573217093944549560546875e-09\"},\r\n    {0x1.fffffffffffffp-28, chars_format::scientific, 71,\r\n        \"7.45058059692382729781938744697232512859130793003714643418788909912109375e-09\"},\r\n    {0x1.fffffffffffffp-27, chars_format::scientific, 71,\r\n        \"1.49011611938476545956387748939446502571826158600742928683757781982421875e-08\"},\r\n    {0x1.fffffffffffffp-26, chars_format::scientific, 70,\r\n        \"2.9802322387695309191277549787889300514365231720148585736751556396484375e-08\"},\r\n    {0x1.fffffffffffffp-25, chars_format::scientific, 69,\r\n        \"5.960464477539061838255509957577860102873046344029717147350311279296875e-08\"},\r\n    {0x1.fffffffffffffp-24, chars_format::scientific, 69,\r\n        \"1.192092895507812367651101991515572020574609268805943429470062255859375e-07\"},\r\n    {0x1.fffffffffffffp-23, chars_format::scientific, 68,\r\n        \"2.38418579101562473530220398303114404114921853761188685894012451171875e-07\"},\r\n    {0x1.fffffffffffffp-22, chars_format::scientific, 67,\r\n        \"4.7683715820312494706044079660622880822984370752237737178802490234375e-07\"},\r\n    {0x1.fffffffffffffp-21, chars_format::scientific, 66,\r\n        \"9.536743164062498941208815932124576164596874150447547435760498046875e-07\"},\r\n    {0x1.fffffffffffffp-20, chars_format::scientific, 66,\r\n        \"1.907348632812499788241763186424915232919374830089509487152099609375e-06\"},\r\n    {0x1.fffffffffffffp-19, chars_format::scientific, 65,\r\n        \"3.81469726562499957648352637284983046583874966017901897430419921875e-06\"},\r\n    {0x1.fffffffffffffp-18, chars_format::scientific, 64,\r\n        \"7.6293945312499991529670527456996609316774993203580379486083984375e-06\"},\r\n    {0x1.fffffffffffffp-17, chars_format::scientific, 64,\r\n        \"1.5258789062499998305934105491399321863354998640716075897216796875e-05\"},\r\n    {0x1.fffffffffffffp-16, chars_format::scientific, 63,\r\n        \"3.051757812499999661186821098279864372670999728143215179443359375e-05\"},\r\n    {0x1.fffffffffffffp-15, chars_format::scientific, 62,\r\n        \"6.10351562499999932237364219655972874534199945628643035888671875e-05\"},\r\n    {0x1.fffffffffffffp-14, chars_format::scientific, 62,\r\n        \"1.22070312499999986447472843931194574906839989125728607177734375e-04\"},\r\n    {0x1.fffffffffffffp-13, chars_format::scientific, 61,\r\n        \"2.4414062499999997289494568786238914981367997825145721435546875e-04\"},\r\n    {0x1.fffffffffffffp-12, chars_format::scientific, 60,\r\n        \"4.882812499999999457898913757247782996273599565029144287109375e-04\"},\r\n    {0x1.fffffffffffffp-11, chars_format::scientific, 59,\r\n        \"9.76562499999999891579782751449556599254719913005828857421875e-04\"},\r\n    {0x1.fffffffffffffp-10, chars_format::scientific, 59,\r\n        \"1.95312499999999978315956550289911319850943982601165771484375e-03\"},\r\n    {0x1.fffffffffffffp-9, chars_format::scientific, 58,\r\n        \"3.9062499999999995663191310057982263970188796520233154296875e-03\"},\r\n    {0x1.fffffffffffffp-8, chars_format::scientific, 57,\r\n        \"7.812499999999999132638262011596452794037759304046630859375e-03\"},\r\n    {0x1.fffffffffffffp-7, chars_format::scientific, 57,\r\n        \"1.562499999999999826527652402319290558807551860809326171875e-02\"},\r\n    {0x1.fffffffffffffp-6, chars_format::scientific, 56,\r\n        \"3.12499999999999965305530480463858111761510372161865234375e-02\"},\r\n    {0x1.fffffffffffffp-5, chars_format::scientific, 55,\r\n        \"6.2499999999999993061106096092771622352302074432373046875e-02\"},\r\n    {0x1.fffffffffffffp-4, chars_format::scientific, 55,\r\n        \"1.2499999999999998612221219218554324470460414886474609375e-01\"},\r\n    {0x1.fffffffffffffp-3, chars_format::scientific, 54,\r\n        \"2.499999999999999722444243843710864894092082977294921875e-01\"},\r\n    {0x1.fffffffffffffp-2, chars_format::scientific, 53, \"4.99999999999999944488848768742172978818416595458984375e-01\"},\r\n    {0x1.fffffffffffffp-1, chars_format::scientific, 52, \"9.9999999999999988897769753748434595763683319091796875e-01\"},\r\n    {0x1.fffffffffffffp+0, chars_format::scientific, 52, \"1.9999999999999997779553950749686919152736663818359375e+00\"},\r\n    {0x1.fffffffffffffp+1, chars_format::scientific, 51, \"3.999999999999999555910790149937383830547332763671875e+00\"},\r\n    {0x1.fffffffffffffp+2, chars_format::scientific, 50, \"7.99999999999999911182158029987476766109466552734375e+00\"},\r\n    {0x1.fffffffffffffp+3, chars_format::scientific, 50, \"1.59999999999999982236431605997495353221893310546875e+01\"},\r\n    {0x1.fffffffffffffp+4, chars_format::scientific, 49, \"3.1999999999999996447286321199499070644378662109375e+01\"},\r\n    {0x1.fffffffffffffp+5, chars_format::scientific, 48, \"6.399999999999999289457264239899814128875732421875e+01\"},\r\n    {0x1.fffffffffffffp+6, chars_format::scientific, 48, \"1.279999999999999857891452847979962825775146484375e+02\"},\r\n    {0x1.fffffffffffffp+7, chars_format::scientific, 47, \"2.55999999999999971578290569595992565155029296875e+02\"},\r\n    {0x1.fffffffffffffp+8, chars_format::scientific, 46, \"5.1199999999999994315658113919198513031005859375e+02\"},\r\n    {0x1.fffffffffffffp+9, chars_format::scientific, 46, \"1.0239999999999998863131622783839702606201171875e+03\"},\r\n    {0x1.fffffffffffffp+10, chars_format::scientific, 45, \"2.047999999999999772626324556767940521240234375e+03\"},\r\n    {0x1.fffffffffffffp+11, chars_format::scientific, 44, \"4.09599999999999954525264911353588104248046875e+03\"},\r\n    {0x1.fffffffffffffp+12, chars_format::scientific, 43, \"8.1919999999999990905052982270717620849609375e+03\"},\r\n    {0x1.fffffffffffffp+13, chars_format::scientific, 43, \"1.6383999999999998181010596454143524169921875e+04\"},\r\n    {0x1.fffffffffffffp+14, chars_format::scientific, 42, \"3.276799999999999636202119290828704833984375e+04\"},\r\n    {0x1.fffffffffffffp+15, chars_format::scientific, 41, \"6.55359999999999927240423858165740966796875e+04\"},\r\n    {0x1.fffffffffffffp+16, chars_format::scientific, 41, \"1.31071999999999985448084771633148193359375e+05\"},\r\n    {0x1.fffffffffffffp+17, chars_format::scientific, 40, \"2.6214399999999997089616954326629638671875e+05\"},\r\n    {0x1.fffffffffffffp+18, chars_format::scientific, 39, \"5.242879999999999417923390865325927734375e+05\"},\r\n    {0x1.fffffffffffffp+19, chars_format::scientific, 39, \"1.048575999999999883584678173065185546875e+06\"},\r\n    {0x1.fffffffffffffp+20, chars_format::scientific, 38, \"2.09715199999999976716935634613037109375e+06\"},\r\n    {0x1.fffffffffffffp+21, chars_format::scientific, 37, \"4.1943039999999995343387126922607421875e+06\"},\r\n    {0x1.fffffffffffffp+22, chars_format::scientific, 36, \"8.388607999999999068677425384521484375e+06\"},\r\n    {0x1.fffffffffffffp+23, chars_format::scientific, 36, \"1.677721599999999813735485076904296875e+07\"},\r\n    {0x1.fffffffffffffp+24, chars_format::scientific, 35, \"3.35544319999999962747097015380859375e+07\"},\r\n    {0x1.fffffffffffffp+25, chars_format::scientific, 34, \"6.7108863999999992549419403076171875e+07\"},\r\n    {0x1.fffffffffffffp+26, chars_format::scientific, 34, \"1.3421772799999998509883880615234375e+08\"},\r\n    {0x1.fffffffffffffp+27, chars_format::scientific, 33, \"2.684354559999999701976776123046875e+08\"},\r\n    {0x1.fffffffffffffp+28, chars_format::scientific, 32, \"5.36870911999999940395355224609375e+08\"},\r\n    {0x1.fffffffffffffp+29, chars_format::scientific, 32, \"1.07374182399999988079071044921875e+09\"},\r\n    {0x1.fffffffffffffp+30, chars_format::scientific, 31, \"2.1474836479999997615814208984375e+09\"},\r\n    {0x1.fffffffffffffp+31, chars_format::scientific, 30, \"4.294967295999999523162841796875e+09\"},\r\n    {0x1.fffffffffffffp+32, chars_format::scientific, 29, \"8.58993459199999904632568359375e+09\"},\r\n    {0x1.fffffffffffffp+33, chars_format::scientific, 29, \"1.71798691839999980926513671875e+10\"},\r\n    {0x1.fffffffffffffp+34, chars_format::scientific, 28, \"3.4359738367999996185302734375e+10\"},\r\n    {0x1.fffffffffffffp+35, chars_format::scientific, 27, \"6.871947673599999237060546875e+10\"},\r\n    {0x1.fffffffffffffp+36, chars_format::scientific, 27, \"1.374389534719999847412109375e+11\"},\r\n    {0x1.fffffffffffffp+37, chars_format::scientific, 26, \"2.74877906943999969482421875e+11\"},\r\n    {0x1.fffffffffffffp+38, chars_format::scientific, 25, \"5.4975581388799993896484375e+11\"},\r\n    {0x1.fffffffffffffp+39, chars_format::scientific, 25, \"1.0995116277759998779296875e+12\"},\r\n    {0x1.fffffffffffffp+40, chars_format::scientific, 24, \"2.199023255551999755859375e+12\"},\r\n    {0x1.fffffffffffffp+41, chars_format::scientific, 23, \"4.39804651110399951171875e+12\"},\r\n    {0x1.fffffffffffffp+42, chars_format::scientific, 22, \"8.7960930222079990234375e+12\"},\r\n    {0x1.fffffffffffffp+43, chars_format::scientific, 22, \"1.7592186044415998046875e+13\"},\r\n    {0x1.fffffffffffffp+44, chars_format::scientific, 21, \"3.518437208883199609375e+13\"},\r\n    {0x1.fffffffffffffp+45, chars_format::scientific, 20, \"7.03687441776639921875e+13\"},\r\n    {0x1.fffffffffffffp+46, chars_format::scientific, 20, \"1.40737488355327984375e+14\"},\r\n    {0x1.fffffffffffffp+47, chars_format::scientific, 19, \"2.8147497671065596875e+14\"},\r\n    {0x1.fffffffffffffp+48, chars_format::scientific, 18, \"5.629499534213119375e+14\"},\r\n    {0x1.fffffffffffffp+49, chars_format::scientific, 18, \"1.125899906842623875e+15\"},\r\n    {0x1.fffffffffffffp+50, chars_format::scientific, 17, \"2.25179981368524775e+15\"},\r\n    {0x1.fffffffffffffp+51, chars_format::scientific, 16, \"4.5035996273704955e+15\"},\r\n    {0x1.fffffffffffffp+52, chars_format::scientific, 15, \"9.007199254740991e+15\"},\r\n    {0x1.fffffffffffffp+53, chars_format::scientific, 16, \"1.8014398509481982e+16\"},\r\n    {0x1.fffffffffffffp+54, chars_format::scientific, 16, \"3.6028797018963964e+16\"},\r\n    {0x1.fffffffffffffp+55, chars_format::scientific, 16, \"7.2057594037927928e+16\"},\r\n    {0x1.fffffffffffffp+56, chars_format::scientific, 17, \"1.44115188075855856e+17\"},\r\n    {0x1.fffffffffffffp+57, chars_format::scientific, 17, \"2.88230376151711712e+17\"},\r\n    {0x1.fffffffffffffp+58, chars_format::scientific, 17, \"5.76460752303423424e+17\"},\r\n    {0x1.fffffffffffffp+59, chars_format::scientific, 18, \"1.152921504606846848e+18\"},\r\n    {0x1.fffffffffffffp+60, chars_format::scientific, 18, \"2.305843009213693696e+18\"},\r\n    {0x1.fffffffffffffp+61, chars_format::scientific, 18, \"4.611686018427387392e+18\"},\r\n    {0x1.fffffffffffffp+62, chars_format::scientific, 18, \"9.223372036854774784e+18\"},\r\n    {0x1.fffffffffffffp+63, chars_format::scientific, 19, \"1.8446744073709549568e+19\"},\r\n    {0x1.fffffffffffffp+64, chars_format::scientific, 19, \"3.6893488147419099136e+19\"},\r\n    {0x1.fffffffffffffp+65, chars_format::scientific, 19, \"7.3786976294838198272e+19\"},\r\n    {0x1.fffffffffffffp+66, chars_format::scientific, 20, \"1.47573952589676396544e+20\"},\r\n    {0x1.fffffffffffffp+67, chars_format::scientific, 20, \"2.95147905179352793088e+20\"},\r\n    {0x1.fffffffffffffp+68, chars_format::scientific, 20, \"5.90295810358705586176e+20\"},\r\n    {0x1.fffffffffffffp+69, chars_format::scientific, 21, \"1.180591620717411172352e+21\"},\r\n    {0x1.fffffffffffffp+70, chars_format::scientific, 21, \"2.361183241434822344704e+21\"},\r\n    {0x1.fffffffffffffp+71, chars_format::scientific, 21, \"4.722366482869644689408e+21\"},\r\n    {0x1.fffffffffffffp+72, chars_format::scientific, 21, \"9.444732965739289378816e+21\"},\r\n    {0x1.fffffffffffffp+73, chars_format::scientific, 22, \"1.8889465931478578757632e+22\"},\r\n    {0x1.fffffffffffffp+74, chars_format::scientific, 22, \"3.7778931862957157515264e+22\"},\r\n    {0x1.fffffffffffffp+75, chars_format::scientific, 22, \"7.5557863725914315030528e+22\"},\r\n    {0x1.fffffffffffffp+76, chars_format::scientific, 23, \"1.51115727451828630061056e+23\"},\r\n    {0x1.fffffffffffffp+77, chars_format::scientific, 23, \"3.02231454903657260122112e+23\"},\r\n    {0x1.fffffffffffffp+78, chars_format::scientific, 23, \"6.04462909807314520244224e+23\"},\r\n    {0x1.fffffffffffffp+79, chars_format::scientific, 24, \"1.208925819614629040488448e+24\"},\r\n    {0x1.fffffffffffffp+80, chars_format::scientific, 24, \"2.417851639229258080976896e+24\"},\r\n    {0x1.fffffffffffffp+81, chars_format::scientific, 24, \"4.835703278458516161953792e+24\"},\r\n    {0x1.fffffffffffffp+82, chars_format::scientific, 24, \"9.671406556917032323907584e+24\"},\r\n    {0x1.fffffffffffffp+83, chars_format::scientific, 25, \"1.9342813113834064647815168e+25\"},\r\n    {0x1.fffffffffffffp+84, chars_format::scientific, 25, \"3.8685626227668129295630336e+25\"},\r\n    {0x1.fffffffffffffp+85, chars_format::scientific, 25, \"7.7371252455336258591260672e+25\"},\r\n    {0x1.fffffffffffffp+86, chars_format::scientific, 26, \"1.54742504910672517182521344e+26\"},\r\n    {0x1.fffffffffffffp+87, chars_format::scientific, 26, \"3.09485009821345034365042688e+26\"},\r\n    {0x1.fffffffffffffp+88, chars_format::scientific, 26, \"6.18970019642690068730085376e+26\"},\r\n    {0x1.fffffffffffffp+89, chars_format::scientific, 27, \"1.237940039285380137460170752e+27\"},\r\n    {0x1.fffffffffffffp+90, chars_format::scientific, 27, \"2.475880078570760274920341504e+27\"},\r\n    {0x1.fffffffffffffp+91, chars_format::scientific, 27, \"4.951760157141520549840683008e+27\"},\r\n    {0x1.fffffffffffffp+92, chars_format::scientific, 27, \"9.903520314283041099681366016e+27\"},\r\n    {0x1.fffffffffffffp+93, chars_format::scientific, 28, \"1.9807040628566082199362732032e+28\"},\r\n    {0x1.fffffffffffffp+94, chars_format::scientific, 28, \"3.9614081257132164398725464064e+28\"},\r\n    {0x1.fffffffffffffp+95, chars_format::scientific, 28, \"7.9228162514264328797450928128e+28\"},\r\n    {0x1.fffffffffffffp+96, chars_format::scientific, 29, \"1.58456325028528657594901856256e+29\"},\r\n    {0x1.fffffffffffffp+97, chars_format::scientific, 29, \"3.16912650057057315189803712512e+29\"},\r\n    {0x1.fffffffffffffp+98, chars_format::scientific, 29, \"6.33825300114114630379607425024e+29\"},\r\n    {0x1.fffffffffffffp+99, chars_format::scientific, 30, \"1.267650600228229260759214850048e+30\"},\r\n    {0x1.fffffffffffffp+100, chars_format::scientific, 30, \"2.535301200456458521518429700096e+30\"},\r\n    {0x1.fffffffffffffp+101, chars_format::scientific, 30, \"5.070602400912917043036859400192e+30\"},\r\n    {0x1.fffffffffffffp+102, chars_format::scientific, 31, \"1.0141204801825834086073718800384e+31\"},\r\n    {0x1.fffffffffffffp+103, chars_format::scientific, 31, \"2.0282409603651668172147437600768e+31\"},\r\n    {0x1.fffffffffffffp+104, chars_format::scientific, 31, \"4.0564819207303336344294875201536e+31\"},\r\n    {0x1.fffffffffffffp+105, chars_format::scientific, 31, \"8.1129638414606672688589750403072e+31\"},\r\n    {0x1.fffffffffffffp+106, chars_format::scientific, 32, \"1.62259276829213345377179500806144e+32\"},\r\n    {0x1.fffffffffffffp+107, chars_format::scientific, 32, \"3.24518553658426690754359001612288e+32\"},\r\n    {0x1.fffffffffffffp+108, chars_format::scientific, 32, \"6.49037107316853381508718003224576e+32\"},\r\n    {0x1.fffffffffffffp+109, chars_format::scientific, 33, \"1.298074214633706763017436006449152e+33\"},\r\n    {0x1.fffffffffffffp+110, chars_format::scientific, 33, \"2.596148429267413526034872012898304e+33\"},\r\n    {0x1.fffffffffffffp+111, chars_format::scientific, 33, \"5.192296858534827052069744025796608e+33\"},\r\n    {0x1.fffffffffffffp+112, chars_format::scientific, 34, \"1.0384593717069654104139488051593216e+34\"},\r\n    {0x1.fffffffffffffp+113, chars_format::scientific, 34, \"2.0769187434139308208278976103186432e+34\"},\r\n    {0x1.fffffffffffffp+114, chars_format::scientific, 34, \"4.1538374868278616416557952206372864e+34\"},\r\n    {0x1.fffffffffffffp+115, chars_format::scientific, 34, \"8.3076749736557232833115904412745728e+34\"},\r\n    {0x1.fffffffffffffp+116, chars_format::scientific, 35, \"1.66153499473114465666231808825491456e+35\"},\r\n    {0x1.fffffffffffffp+117, chars_format::scientific, 35, \"3.32306998946228931332463617650982912e+35\"},\r\n    {0x1.fffffffffffffp+118, chars_format::scientific, 35, \"6.64613997892457862664927235301965824e+35\"},\r\n    {0x1.fffffffffffffp+119, chars_format::scientific, 36, \"1.329227995784915725329854470603931648e+36\"},\r\n    {0x1.fffffffffffffp+120, chars_format::scientific, 36, \"2.658455991569831450659708941207863296e+36\"},\r\n    {0x1.fffffffffffffp+121, chars_format::scientific, 36, \"5.316911983139662901319417882415726592e+36\"},\r\n    {0x1.fffffffffffffp+122, chars_format::scientific, 37, \"1.0633823966279325802638835764831453184e+37\"},\r\n    {0x1.fffffffffffffp+123, chars_format::scientific, 37, \"2.1267647932558651605277671529662906368e+37\"},\r\n    {0x1.fffffffffffffp+124, chars_format::scientific, 37, \"4.2535295865117303210555343059325812736e+37\"},\r\n    {0x1.fffffffffffffp+125, chars_format::scientific, 37, \"8.5070591730234606421110686118651625472e+37\"},\r\n    {0x1.fffffffffffffp+126, chars_format::scientific, 38, \"1.70141183460469212842221372237303250944e+38\"},\r\n    {0x1.fffffffffffffp+127, chars_format::scientific, 38, \"3.40282366920938425684442744474606501888e+38\"},\r\n    {0x1.fffffffffffffp+128, chars_format::scientific, 38, \"6.80564733841876851368885488949213003776e+38\"},\r\n    {0x1.fffffffffffffp+129, chars_format::scientific, 39, \"1.361129467683753702737770977898426007552e+39\"},\r\n    {0x1.fffffffffffffp+130, chars_format::scientific, 39, \"2.722258935367507405475541955796852015104e+39\"},\r\n    {0x1.fffffffffffffp+131, chars_format::scientific, 39, \"5.444517870735014810951083911593704030208e+39\"},\r\n    {0x1.fffffffffffffp+132, chars_format::scientific, 40, \"1.0889035741470029621902167823187408060416e+40\"},\r\n    {0x1.fffffffffffffp+133, chars_format::scientific, 40, \"2.1778071482940059243804335646374816120832e+40\"},\r\n    {0x1.fffffffffffffp+134, chars_format::scientific, 40, \"4.3556142965880118487608671292749632241664e+40\"},\r\n    {0x1.fffffffffffffp+135, chars_format::scientific, 40, \"8.7112285931760236975217342585499264483328e+40\"},\r\n    {0x1.fffffffffffffp+136, chars_format::scientific, 41, \"1.74224571863520473950434685170998528966656e+41\"},\r\n    {0x1.fffffffffffffp+137, chars_format::scientific, 41, \"3.48449143727040947900869370341997057933312e+41\"},\r\n    {0x1.fffffffffffffp+138, chars_format::scientific, 41, \"6.96898287454081895801738740683994115866624e+41\"},\r\n    {0x1.fffffffffffffp+139, chars_format::scientific, 42, \"1.393796574908163791603477481367988231733248e+42\"},\r\n    {0x1.fffffffffffffp+140, chars_format::scientific, 42, \"2.787593149816327583206954962735976463466496e+42\"},\r\n    {0x1.fffffffffffffp+141, chars_format::scientific, 42, \"5.575186299632655166413909925471952926932992e+42\"},\r\n    {0x1.fffffffffffffp+142, chars_format::scientific, 43, \"1.1150372599265310332827819850943905853865984e+43\"},\r\n    {0x1.fffffffffffffp+143, chars_format::scientific, 43, \"2.2300745198530620665655639701887811707731968e+43\"},\r\n    {0x1.fffffffffffffp+144, chars_format::scientific, 43, \"4.4601490397061241331311279403775623415463936e+43\"},\r\n    {0x1.fffffffffffffp+145, chars_format::scientific, 43, \"8.9202980794122482662622558807551246830927872e+43\"},\r\n    {0x1.fffffffffffffp+146, chars_format::scientific, 44, \"1.78405961588244965325245117615102493661855744e+44\"},\r\n    {0x1.fffffffffffffp+147, chars_format::scientific, 44, \"3.56811923176489930650490235230204987323711488e+44\"},\r\n    {0x1.fffffffffffffp+148, chars_format::scientific, 44, \"7.13623846352979861300980470460409974647422976e+44\"},\r\n    {0x1.fffffffffffffp+149, chars_format::scientific, 45, \"1.427247692705959722601960940920819949294845952e+45\"},\r\n    {0x1.fffffffffffffp+150, chars_format::scientific, 45, \"2.854495385411919445203921881841639898589691904e+45\"},\r\n    {0x1.fffffffffffffp+151, chars_format::scientific, 45, \"5.708990770823838890407843763683279797179383808e+45\"},\r\n    {0x1.fffffffffffffp+152, chars_format::scientific, 46, \"1.1417981541647677780815687527366559594358767616e+46\"},\r\n    {0x1.fffffffffffffp+153, chars_format::scientific, 46, \"2.2835963083295355561631375054733119188717535232e+46\"},\r\n    {0x1.fffffffffffffp+154, chars_format::scientific, 46, \"4.5671926166590711123262750109466238377435070464e+46\"},\r\n    {0x1.fffffffffffffp+155, chars_format::scientific, 46, \"9.1343852333181422246525500218932476754870140928e+46\"},\r\n    {0x1.fffffffffffffp+156, chars_format::scientific, 47, \"1.82687704666362844493051000437864953509740281856e+47\"},\r\n    {0x1.fffffffffffffp+157, chars_format::scientific, 47, \"3.65375409332725688986102000875729907019480563712e+47\"},\r\n    {0x1.fffffffffffffp+158, chars_format::scientific, 47, \"7.30750818665451377972204001751459814038961127424e+47\"},\r\n    {0x1.fffffffffffffp+159, chars_format::scientific, 48, \"1.461501637330902755944408003502919628077922254848e+48\"},\r\n    {0x1.fffffffffffffp+160, chars_format::scientific, 48, \"2.923003274661805511888816007005839256155844509696e+48\"},\r\n    {0x1.fffffffffffffp+161, chars_format::scientific, 48, \"5.846006549323611023777632014011678512311689019392e+48\"},\r\n    {0x1.fffffffffffffp+162, chars_format::scientific, 49, \"1.1692013098647222047555264028023357024623378038784e+49\"},\r\n    {0x1.fffffffffffffp+163, chars_format::scientific, 49, \"2.3384026197294444095110528056046714049246756077568e+49\"},\r\n    {0x1.fffffffffffffp+164, chars_format::scientific, 49, \"4.6768052394588888190221056112093428098493512155136e+49\"},\r\n    {0x1.fffffffffffffp+165, chars_format::scientific, 49, \"9.3536104789177776380442112224186856196987024310272e+49\"},\r\n    {0x1.fffffffffffffp+166, chars_format::scientific, 50, \"1.87072209578355552760884224448373712393974048620544e+50\"},\r\n    {0x1.fffffffffffffp+167, chars_format::scientific, 50, \"3.74144419156711105521768448896747424787948097241088e+50\"},\r\n    {0x1.fffffffffffffp+168, chars_format::scientific, 50, \"7.48288838313422211043536897793494849575896194482176e+50\"},\r\n    {0x1.fffffffffffffp+169, chars_format::scientific, 51, \"1.496577676626844422087073795586989699151792388964352e+51\"},\r\n    {0x1.fffffffffffffp+170, chars_format::scientific, 51, \"2.993155353253688844174147591173979398303584777928704e+51\"},\r\n    {0x1.fffffffffffffp+171, chars_format::scientific, 51, \"5.986310706507377688348295182347958796607169555857408e+51\"},\r\n    {0x1.fffffffffffffp+172, chars_format::scientific, 52,\r\n        \"1.1972621413014755376696590364695917593214339111714816e+52\"},\r\n    {0x1.fffffffffffffp+173, chars_format::scientific, 52,\r\n        \"2.3945242826029510753393180729391835186428678223429632e+52\"},\r\n    {0x1.fffffffffffffp+174, chars_format::scientific, 52,\r\n        \"4.7890485652059021506786361458783670372857356446859264e+52\"},\r\n    {0x1.fffffffffffffp+175, chars_format::scientific, 52,\r\n        \"9.5780971304118043013572722917567340745714712893718528e+52\"},\r\n    {0x1.fffffffffffffp+176, chars_format::scientific, 53,\r\n        \"1.91561942608236086027145445835134681491429425787437056e+53\"},\r\n    {0x1.fffffffffffffp+177, chars_format::scientific, 53,\r\n        \"3.83123885216472172054290891670269362982858851574874112e+53\"},\r\n    {0x1.fffffffffffffp+178, chars_format::scientific, 53,\r\n        \"7.66247770432944344108581783340538725965717703149748224e+53\"},\r\n    {0x1.fffffffffffffp+179, chars_format::scientific, 54,\r\n        \"1.532495540865888688217163566681077451931435406299496448e+54\"},\r\n    {0x1.fffffffffffffp+180, chars_format::scientific, 54,\r\n        \"3.064991081731777376434327133362154903862870812598992896e+54\"},\r\n    {0x1.fffffffffffffp+181, chars_format::scientific, 54,\r\n        \"6.129982163463554752868654266724309807725741625197985792e+54\"},\r\n    {0x1.fffffffffffffp+182, chars_format::scientific, 55,\r\n        \"1.2259964326927109505737308533448619615451483250395971584e+55\"},\r\n    {0x1.fffffffffffffp+183, chars_format::scientific, 55,\r\n        \"2.4519928653854219011474617066897239230902966500791943168e+55\"},\r\n    {0x1.fffffffffffffp+184, chars_format::scientific, 55,\r\n        \"4.9039857307708438022949234133794478461805933001583886336e+55\"},\r\n    {0x1.fffffffffffffp+185, chars_format::scientific, 55,\r\n        \"9.8079714615416876045898468267588956923611866003167772672e+55\"},\r\n    {0x1.fffffffffffffp+186, chars_format::scientific, 56,\r\n        \"1.96159429230833752091796936535177913847223732006335545344e+56\"},\r\n    {0x1.fffffffffffffp+187, chars_format::scientific, 56,\r\n        \"3.92318858461667504183593873070355827694447464012671090688e+56\"},\r\n    {0x1.fffffffffffffp+188, chars_format::scientific, 56,\r\n        \"7.84637716923335008367187746140711655388894928025342181376e+56\"},\r\n    {0x1.fffffffffffffp+189, chars_format::scientific, 57,\r\n        \"1.569275433846670016734375492281423310777789856050684362752e+57\"},\r\n    {0x1.fffffffffffffp+190, chars_format::scientific, 57,\r\n        \"3.138550867693340033468750984562846621555579712101368725504e+57\"},\r\n    {0x1.fffffffffffffp+191, chars_format::scientific, 57,\r\n        \"6.277101735386680066937501969125693243111159424202737451008e+57\"},\r\n    {0x1.fffffffffffffp+192, chars_format::scientific, 58,\r\n        \"1.2554203470773360133875003938251386486222318848405474902016e+58\"},\r\n    {0x1.fffffffffffffp+193, chars_format::scientific, 58,\r\n        \"2.5108406941546720267750007876502772972444637696810949804032e+58\"},\r\n    {0x1.fffffffffffffp+194, chars_format::scientific, 58,\r\n        \"5.0216813883093440535500015753005545944889275393621899608064e+58\"},\r\n    {0x1.fffffffffffffp+195, chars_format::scientific, 59,\r\n        \"1.00433627766186881071000031506011091889778550787243799216128e+59\"},\r\n    {0x1.fffffffffffffp+196, chars_format::scientific, 59,\r\n        \"2.00867255532373762142000063012022183779557101574487598432256e+59\"},\r\n    {0x1.fffffffffffffp+197, chars_format::scientific, 59,\r\n        \"4.01734511064747524284000126024044367559114203148975196864512e+59\"},\r\n    {0x1.fffffffffffffp+198, chars_format::scientific, 59,\r\n        \"8.03469022129495048568000252048088735118228406297950393729024e+59\"},\r\n    {0x1.fffffffffffffp+199, chars_format::scientific, 60,\r\n        \"1.606938044258990097136000504096177470236456812595900787458048e+60\"},\r\n    {0x1.fffffffffffffp+200, chars_format::scientific, 60,\r\n        \"3.213876088517980194272001008192354940472913625191801574916096e+60\"},\r\n    {0x1.fffffffffffffp+201, chars_format::scientific, 60,\r\n        \"6.427752177035960388544002016384709880945827250383603149832192e+60\"},\r\n    {0x1.fffffffffffffp+202, chars_format::scientific, 61,\r\n        \"1.2855504354071920777088004032769419761891654500767206299664384e+61\"},\r\n    {0x1.fffffffffffffp+203, chars_format::scientific, 61,\r\n        \"2.5711008708143841554176008065538839523783309001534412599328768e+61\"},\r\n    {0x1.fffffffffffffp+204, chars_format::scientific, 61,\r\n        \"5.1422017416287683108352016131077679047566618003068825198657536e+61\"},\r\n    {0x1.fffffffffffffp+205, chars_format::scientific, 62,\r\n        \"1.02844034832575366216704032262155358095133236006137650397315072e+62\"},\r\n    {0x1.fffffffffffffp+206, chars_format::scientific, 62,\r\n        \"2.05688069665150732433408064524310716190266472012275300794630144e+62\"},\r\n    {0x1.fffffffffffffp+207, chars_format::scientific, 62,\r\n        \"4.11376139330301464866816129048621432380532944024550601589260288e+62\"},\r\n    {0x1.fffffffffffffp+208, chars_format::scientific, 62,\r\n        \"8.22752278660602929733632258097242864761065888049101203178520576e+62\"},\r\n    {0x1.fffffffffffffp+209, chars_format::scientific, 63,\r\n        \"1.645504557321205859467264516194485729522131776098202406357041152e+63\"},\r\n    {0x1.fffffffffffffp+210, chars_format::scientific, 63,\r\n        \"3.291009114642411718934529032388971459044263552196404812714082304e+63\"},\r\n    {0x1.fffffffffffffp+211, chars_format::scientific, 63,\r\n        \"6.582018229284823437869058064777942918088527104392809625428164608e+63\"},\r\n    {0x1.fffffffffffffp+212, chars_format::scientific, 64,\r\n        \"1.3164036458569646875738116129555885836177054208785619250856329216e+64\"},\r\n    {0x1.fffffffffffffp+213, chars_format::scientific, 64,\r\n        \"2.6328072917139293751476232259111771672354108417571238501712658432e+64\"},\r\n    {0x1.fffffffffffffp+214, chars_format::scientific, 64,\r\n        \"5.2656145834278587502952464518223543344708216835142477003425316864e+64\"},\r\n    {0x1.fffffffffffffp+215, chars_format::scientific, 65,\r\n        \"1.05312291668557175005904929036447086689416433670284954006850633728e+65\"},\r\n    {0x1.fffffffffffffp+216, chars_format::scientific, 65,\r\n        \"2.10624583337114350011809858072894173378832867340569908013701267456e+65\"},\r\n    {0x1.fffffffffffffp+217, chars_format::scientific, 65,\r\n        \"4.21249166674228700023619716145788346757665734681139816027402534912e+65\"},\r\n    {0x1.fffffffffffffp+218, chars_format::scientific, 65,\r\n        \"8.42498333348457400047239432291576693515331469362279632054805069824e+65\"},\r\n    {0x1.fffffffffffffp+219, chars_format::scientific, 66,\r\n        \"1.684996666696914800094478864583153387030662938724559264109610139648e+66\"},\r\n    {0x1.fffffffffffffp+220, chars_format::scientific, 66,\r\n        \"3.369993333393829600188957729166306774061325877449118528219220279296e+66\"},\r\n    {0x1.fffffffffffffp+221, chars_format::scientific, 66,\r\n        \"6.739986666787659200377915458332613548122651754898237056438440558592e+66\"},\r\n    {0x1.fffffffffffffp+222, chars_format::scientific, 67,\r\n        \"1.3479973333575318400755830916665227096245303509796474112876881117184e+67\"},\r\n    {0x1.fffffffffffffp+223, chars_format::scientific, 67,\r\n        \"2.6959946667150636801511661833330454192490607019592948225753762234368e+67\"},\r\n    {0x1.fffffffffffffp+224, chars_format::scientific, 67,\r\n        \"5.3919893334301273603023323666660908384981214039185896451507524468736e+67\"},\r\n    {0x1.fffffffffffffp+225, chars_format::scientific, 68,\r\n        \"1.07839786668602547206046647333321816769962428078371792903015048937472e+68\"},\r\n    {0x1.fffffffffffffp+226, chars_format::scientific, 68,\r\n        \"2.15679573337205094412093294666643633539924856156743585806030097874944e+68\"},\r\n    {0x1.fffffffffffffp+227, chars_format::scientific, 68,\r\n        \"4.31359146674410188824186589333287267079849712313487171612060195749888e+68\"},\r\n    {0x1.fffffffffffffp+228, chars_format::scientific, 68,\r\n        \"8.62718293348820377648373178666574534159699424626974343224120391499776e+68\"},\r\n    {0x1.fffffffffffffp+229, chars_format::scientific, 69,\r\n        \"1.725436586697640755296746357333149068319398849253948686448240782999552e+69\"},\r\n    {0x1.fffffffffffffp+230, chars_format::scientific, 69,\r\n        \"3.450873173395281510593492714666298136638797698507897372896481565999104e+69\"},\r\n    {0x1.fffffffffffffp+231, chars_format::scientific, 69,\r\n        \"6.901746346790563021186985429332596273277595397015794745792963131998208e+69\"},\r\n    {0x1.fffffffffffffp+232, chars_format::scientific, 70,\r\n        \"1.3803492693581126042373970858665192546555190794031589491585926263996416e+70\"},\r\n    {0x1.fffffffffffffp+233, chars_format::scientific, 70,\r\n        \"2.7606985387162252084747941717330385093110381588063178983171852527992832e+70\"},\r\n    {0x1.fffffffffffffp+234, chars_format::scientific, 70,\r\n        \"5.5213970774324504169495883434660770186220763176126357966343705055985664e+70\"},\r\n    {0x1.fffffffffffffp+235, chars_format::scientific, 71,\r\n        \"1.10427941548649008338991766869321540372441526352252715932687410111971328e+71\"},\r\n    {0x1.fffffffffffffp+236, chars_format::scientific, 71,\r\n        \"2.20855883097298016677983533738643080744883052704505431865374820223942656e+71\"},\r\n    {0x1.fffffffffffffp+237, chars_format::scientific, 71,\r\n        \"4.41711766194596033355967067477286161489766105409010863730749640447885312e+71\"},\r\n    {0x1.fffffffffffffp+238, chars_format::scientific, 71,\r\n        \"8.83423532389192066711934134954572322979532210818021727461499280895770624e+71\"},\r\n    {0x1.fffffffffffffp+239, chars_format::scientific, 72,\r\n        \"1.766847064778384133423868269909144645959064421636043454922998561791541248e+72\"},\r\n    {0x1.fffffffffffffp+240, chars_format::scientific, 72,\r\n        \"3.533694129556768266847736539818289291918128843272086909845997123583082496e+72\"},\r\n    {0x1.fffffffffffffp+241, chars_format::scientific, 72,\r\n        \"7.067388259113536533695473079636578583836257686544173819691994247166164992e+72\"},\r\n    {0x1.fffffffffffffp+242, chars_format::scientific, 73,\r\n        \"1.4134776518227073067390946159273157167672515373088347639383988494332329984e+73\"},\r\n    {0x1.fffffffffffffp+243, chars_format::scientific, 73,\r\n        \"2.8269553036454146134781892318546314335345030746176695278767976988664659968e+73\"},\r\n    {0x1.fffffffffffffp+244, chars_format::scientific, 73,\r\n        \"5.6539106072908292269563784637092628670690061492353390557535953977329319936e+73\"},\r\n    {0x1.fffffffffffffp+245, chars_format::scientific, 74,\r\n        \"1.13078212145816584539127569274185257341380122984706781115071907954658639872e+74\"},\r\n    {0x1.fffffffffffffp+246, chars_format::scientific, 74,\r\n        \"2.26156424291633169078255138548370514682760245969413562230143815909317279744e+74\"},\r\n    {0x1.fffffffffffffp+247, chars_format::scientific, 74,\r\n        \"4.52312848583266338156510277096741029365520491938827124460287631818634559488e+74\"},\r\n    {0x1.fffffffffffffp+248, chars_format::scientific, 74,\r\n        \"9.04625697166532676313020554193482058731040983877654248920575263637269118976e+74\"},\r\n    {0x1.fffffffffffffp+249, chars_format::scientific, 75,\r\n        \"1.809251394333065352626041108386964117462081967755308497841150527274538237952e+75\"},\r\n    {0x1.fffffffffffffp+250, chars_format::scientific, 75,\r\n        \"3.618502788666130705252082216773928234924163935510616995682301054549076475904e+75\"},\r\n    {0x1.fffffffffffffp+251, chars_format::scientific, 75,\r\n        \"7.237005577332261410504164433547856469848327871021233991364602109098152951808e+75\"},\r\n    {0x1.fffffffffffffp+252, chars_format::scientific, 76,\r\n        \"1.4474011154664522821008328867095712939696655742042467982729204218196305903616e+76\"},\r\n    {0x1.fffffffffffffp+253, chars_format::scientific, 76,\r\n        \"2.8948022309329045642016657734191425879393311484084935965458408436392611807232e+76\"},\r\n    {0x1.fffffffffffffp+254, chars_format::scientific, 76,\r\n        \"5.7896044618658091284033315468382851758786622968169871930916816872785223614464e+76\"},\r\n    {0x1.fffffffffffffp+255, chars_format::scientific, 77,\r\n        \"1.15792089237316182568066630936765703517573245936339743861833633745570447228928e+77\"},\r\n    {0x1.fffffffffffffp+256, chars_format::scientific, 77,\r\n        \"2.31584178474632365136133261873531407035146491872679487723667267491140894457856e+77\"},\r\n    {0x1.fffffffffffffp+257, chars_format::scientific, 77,\r\n        \"4.63168356949264730272266523747062814070292983745358975447334534982281788915712e+77\"},\r\n    {0x1.fffffffffffffp+258, chars_format::scientific, 77,\r\n        \"9.26336713898529460544533047494125628140585967490717950894669069964563577831424e+77\"},\r\n    {0x1.fffffffffffffp+259, chars_format::scientific, 78,\r\n        \"1.852673427797058921089066094988251256281171934981435901789338139929127155662848e+78\"},\r\n    {0x1.fffffffffffffp+260, chars_format::scientific, 78,\r\n        \"3.705346855594117842178132189976502512562343869962871803578676279858254311325696e+78\"},\r\n    {0x1.fffffffffffffp+261, chars_format::scientific, 78,\r\n        \"7.410693711188235684356264379953005025124687739925743607157352559716508622651392e+78\"},\r\n    {0x1.fffffffffffffp+262, chars_format::scientific, 79,\r\n        \"1.4821387422376471368712528759906010050249375479851487214314705119433017245302784e+79\"},\r\n    {0x1.fffffffffffffp+263, chars_format::scientific, 79,\r\n        \"2.9642774844752942737425057519812020100498750959702974428629410238866034490605568e+79\"},\r\n    {0x1.fffffffffffffp+264, chars_format::scientific, 79,\r\n        \"5.9285549689505885474850115039624040200997501919405948857258820477732068981211136e+79\"},\r\n    {0x1.fffffffffffffp+265, chars_format::scientific, 80,\r\n        \"1.18571099379011770949700230079248080401995003838811897714517640955464137962422272e+80\"},\r\n    {0x1.fffffffffffffp+266, chars_format::scientific, 80,\r\n        \"2.37142198758023541899400460158496160803990007677623795429035281910928275924844544e+80\"},\r\n    {0x1.fffffffffffffp+267, chars_format::scientific, 80,\r\n        \"4.74284397516047083798800920316992321607980015355247590858070563821856551849689088e+80\"},\r\n    {0x1.fffffffffffffp+268, chars_format::scientific, 80,\r\n        \"9.48568795032094167597601840633984643215960030710495181716141127643713103699378176e+80\"},\r\n    {0x1.fffffffffffffp+269, chars_format::scientific, 81,\r\n        \"1.897137590064188335195203681267969286431920061420990363432282255287426207398756352e+81\"},\r\n    {0x1.fffffffffffffp+270, chars_format::scientific, 81,\r\n        \"3.794275180128376670390407362535938572863840122841980726864564510574852414797512704e+81\"},\r\n    {0x1.fffffffffffffp+271, chars_format::scientific, 81,\r\n        \"7.588550360256753340780814725071877145727680245683961453729129021149704829595025408e+81\"},\r\n    {0x1.fffffffffffffp+272, chars_format::scientific, 82,\r\n        \"1.5177100720513506681561629450143754291455360491367922907458258042299409659190050816e+82\"},\r\n    {0x1.fffffffffffffp+273, chars_format::scientific, 82,\r\n        \"3.0354201441027013363123258900287508582910720982735845814916516084598819318380101632e+82\"},\r\n    {0x1.fffffffffffffp+274, chars_format::scientific, 82,\r\n        \"6.0708402882054026726246517800575017165821441965471691629833032169197638636760203264e+82\"},\r\n    {0x1.fffffffffffffp+275, chars_format::scientific, 83,\r\n        \"1.21416805764108053452493035601150034331642883930943383259666064338395277273520406528e+83\"},\r\n    {0x1.fffffffffffffp+276, chars_format::scientific, 83,\r\n        \"2.42833611528216106904986071202300068663285767861886766519332128676790554547040813056e+83\"},\r\n    {0x1.fffffffffffffp+277, chars_format::scientific, 83,\r\n        \"4.85667223056432213809972142404600137326571535723773533038664257353581109094081626112e+83\"},\r\n    {0x1.fffffffffffffp+278, chars_format::scientific, 83,\r\n        \"9.71334446112864427619944284809200274653143071447547066077328514707162218188163252224e+83\"},\r\n    {0x1.fffffffffffffp+279, chars_format::scientific, 84,\r\n        \"1.942668892225728855239888569618400549306286142895094132154657029414324436376326504448e+84\"},\r\n    {0x1.fffffffffffffp+280, chars_format::scientific, 84,\r\n        \"3.885337784451457710479777139236801098612572285790188264309314058828648872752653008896e+84\"},\r\n    {0x1.fffffffffffffp+281, chars_format::scientific, 84,\r\n        \"7.770675568902915420959554278473602197225144571580376528618628117657297745505306017792e+84\"},\r\n    {0x1.fffffffffffffp+282, chars_format::scientific, 85,\r\n        \"1.5541351137805830841919108556947204394450289143160753057237256235314595491010612035584e+85\"},\r\n    {0x1.fffffffffffffp+283, chars_format::scientific, 85,\r\n        \"3.1082702275611661683838217113894408788900578286321506114474512470629190982021224071168e+85\"},\r\n    {0x1.fffffffffffffp+284, chars_format::scientific, 85,\r\n        \"6.2165404551223323367676434227788817577801156572643012228949024941258381964042448142336e+85\"},\r\n    {0x1.fffffffffffffp+285, chars_format::scientific, 86,\r\n        \"1.24330809102446646735352868455577635155602313145286024457898049882516763928084896284672e+86\"},\r\n    {0x1.fffffffffffffp+286, chars_format::scientific, 86,\r\n        \"2.48661618204893293470705736911155270311204626290572048915796099765033527856169792569344e+86\"},\r\n    {0x1.fffffffffffffp+287, chars_format::scientific, 86,\r\n        \"4.97323236409786586941411473822310540622409252581144097831592199530067055712339585138688e+86\"},\r\n    {0x1.fffffffffffffp+288, chars_format::scientific, 86,\r\n        \"9.94646472819573173882822947644621081244818505162288195663184399060134111424679170277376e+86\"},\r\n    {0x1.fffffffffffffp+289, chars_format::scientific, 87,\r\n        \"1.989292945639146347765645895289242162489637010324576391326368798120268222849358340554752e+87\"},\r\n    {0x1.fffffffffffffp+290, chars_format::scientific, 87,\r\n        \"3.978585891278292695531291790578484324979274020649152782652737596240536445698716681109504e+87\"},\r\n    {0x1.fffffffffffffp+291, chars_format::scientific, 87,\r\n        \"7.957171782556585391062583581156968649958548041298305565305475192481072891397433362219008e+87\"},\r\n    {0x1.fffffffffffffp+292, chars_format::scientific, 88,\r\n        \"1.5914343565113170782125167162313937299917096082596611130610950384962145782794866724438016e+88\"},\r\n    {0x1.fffffffffffffp+293, chars_format::scientific, 88,\r\n        \"3.1828687130226341564250334324627874599834192165193222261221900769924291565589733448876032e+88\"},\r\n    {0x1.fffffffffffffp+294, chars_format::scientific, 88,\r\n        \"6.3657374260452683128500668649255749199668384330386444522443801539848583131179466897752064e+88\"},\r\n    {0x1.fffffffffffffp+295, chars_format::scientific, 89,\r\n        \"1.27314748520905366257001337298511498399336768660772889044887603079697166262358933795504128e+89\"},\r\n    {0x1.fffffffffffffp+296, chars_format::scientific, 89,\r\n        \"2.54629497041810732514002674597022996798673537321545778089775206159394332524717867591008256e+89\"},\r\n    {0x1.fffffffffffffp+297, chars_format::scientific, 89,\r\n        \"5.09258994083621465028005349194045993597347074643091556179550412318788665049435735182016512e+89\"},\r\n    {0x1.fffffffffffffp+298, chars_format::scientific, 90,\r\n        \"1.018517988167242930056010698388091987194694149286183112359100824637577330098871470364033024e+90\"},\r\n    {0x1.fffffffffffffp+299, chars_format::scientific, 90,\r\n        \"2.037035976334485860112021396776183974389388298572366224718201649275154660197742940728066048e+90\"},\r\n    {0x1.fffffffffffffp+300, chars_format::scientific, 90,\r\n        \"4.074071952668971720224042793552367948778776597144732449436403298550309320395485881456132096e+90\"},\r\n    {0x1.fffffffffffffp+301, chars_format::scientific, 90,\r\n        \"8.148143905337943440448085587104735897557553194289464898872806597100618640790971762912264192e+90\"},\r\n    {0x1.fffffffffffffp+302, chars_format::scientific, 91,\r\n        \"1.6296287810675886880896171174209471795115106388578929797745613194201237281581943525824528384e+91\"},\r\n    {0x1.fffffffffffffp+303, chars_format::scientific, 91,\r\n        \"3.2592575621351773761792342348418943590230212777157859595491226388402474563163887051649056768e+91\"},\r\n    {0x1.fffffffffffffp+304, chars_format::scientific, 91,\r\n        \"6.5185151242703547523584684696837887180460425554315719190982452776804949126327774103298113536e+91\"},\r\n    {0x1.fffffffffffffp+305, chars_format::scientific, 92,\r\n        \"1.30370302485407095047169369393675774360920851108631438381964905553609898252655548206596227072e+92\"},\r\n    {0x1.fffffffffffffp+306, chars_format::scientific, 92,\r\n        \"2.60740604970814190094338738787351548721841702217262876763929811107219796505311096413192454144e+92\"},\r\n    {0x1.fffffffffffffp+307, chars_format::scientific, 92,\r\n        \"5.21481209941628380188677477574703097443683404434525753527859622214439593010622192826384908288e+92\"},\r\n    {0x1.fffffffffffffp+308, chars_format::scientific, 93,\r\n        \"1.042962419883256760377354955149406194887366808869051507055719244428879186021244385652769816576e+93\"},\r\n    {0x1.fffffffffffffp+309, chars_format::scientific, 93,\r\n        \"2.085924839766513520754709910298812389774733617738103014111438488857758372042488771305539633152e+93\"},\r\n    {0x1.fffffffffffffp+310, chars_format::scientific, 93,\r\n        \"4.171849679533027041509419820597624779549467235476206028222876977715516744084977542611079266304e+93\"},\r\n    {0x1.fffffffffffffp+311, chars_format::scientific, 93,\r\n        \"8.343699359066054083018839641195249559098934470952412056445753955431033488169955085222158532608e+93\"},\r\n    {0x1.fffffffffffffp+312, chars_format::scientific, 94,\r\n        \"1.6687398718132108166037679282390499118197868941904824112891507910862066976339910170444317065216e+94\"},\r\n    {0x1.fffffffffffffp+313, chars_format::scientific, 94,\r\n        \"3.3374797436264216332075358564780998236395737883809648225783015821724133952679820340888634130432e+94\"},\r\n    {0x1.fffffffffffffp+314, chars_format::scientific, 94,\r\n        \"6.6749594872528432664150717129561996472791475767619296451566031643448267905359640681777268260864e+94\"},\r\n    {0x1.fffffffffffffp+315, chars_format::scientific, 95,\r\n        \"1.33499189745056865328301434259123992945582951535238592903132063286896535810719281363554536521728e+95\"},\r\n    {0x1.fffffffffffffp+316, chars_format::scientific, 95,\r\n        \"2.66998379490113730656602868518247985891165903070477185806264126573793071621438562727109073043456e+95\"},\r\n    {0x1.fffffffffffffp+317, chars_format::scientific, 95,\r\n        \"5.33996758980227461313205737036495971782331806140954371612528253147586143242877125454218146086912e+95\"},\r\n    {0x1.fffffffffffffp+318, chars_format::scientific, 96,\r\n        \"1.067993517960454922626411474072991943564663612281908743225056506295172286485754250908436292173824e+96\"},\r\n    {0x1.fffffffffffffp+319, chars_format::scientific, 96,\r\n        \"2.135987035920909845252822948145983887129327224563817486450113012590344572971508501816872584347648e+96\"},\r\n    {0x1.fffffffffffffp+320, chars_format::scientific, 96,\r\n        \"4.271974071841819690505645896291967774258654449127634972900226025180689145943017003633745168695296e+96\"},\r\n    {0x1.fffffffffffffp+321, chars_format::scientific, 96,\r\n        \"8.543948143683639381011291792583935548517308898255269945800452050361378291886034007267490337390592e+96\"},\r\n    {0x1.fffffffffffffp+322, chars_format::scientific, 97,\r\n        \"1.7087896287367278762022583585167871097034617796510539891600904100722756583772068014534980674781184e+97\"},\r\n    {0x1.fffffffffffffp+323, chars_format::scientific, 97,\r\n        \"3.4175792574734557524045167170335742194069235593021079783201808201445513167544136029069961349562368e+97\"},\r\n    {0x1.fffffffffffffp+324, chars_format::scientific, 97,\r\n        \"6.8351585149469115048090334340671484388138471186042159566403616402891026335088272058139922699124736e+97\"},\r\n    {0x1.fffffffffffffp+325, chars_format::scientific, 98,\r\n        \"1.36703170298938230096180668681342968776276942372084319132807232805782052670176544116279845398249472e+98\"},\r\n    {0x1.fffffffffffffp+326, chars_format::scientific, 98,\r\n        \"2.73406340597876460192361337362685937552553884744168638265614465611564105340353088232559690796498944e+98\"},\r\n    {0x1.fffffffffffffp+327, chars_format::scientific, 98,\r\n        \"5.46812681195752920384722674725371875105107769488337276531228931223128210680706176465119381592997888e+98\"},\r\n    {0x1.fffffffffffffp+328, chars_format::scientific, 99,\r\n        \"1.093625362391505840769445349450743750210215538976674553062457862446256421361412352930238763185995776e+\"\r\n        \"99\"},\r\n    {0x1.fffffffffffffp+329, chars_format::scientific, 99,\r\n        \"2.187250724783011681538890698901487500420431077953349106124915724892512842722824705860477526371991552e+\"\r\n        \"99\"},\r\n    {0x1.fffffffffffffp+330, chars_format::scientific, 99,\r\n        \"4.374501449566023363077781397802975000840862155906698212249831449785025685445649411720955052743983104e+\"\r\n        \"99\"},\r\n    {0x1.fffffffffffffp+331, chars_format::scientific, 99,\r\n        \"8.749002899132046726155562795605950001681724311813396424499662899570051370891298823441910105487966208e+\"\r\n        \"99\"},\r\n    {0x1.fffffffffffffp+332, chars_format::scientific, 100,\r\n        \"1.7498005798264093452311125591211900003363448623626792848999325799140102741782597646883820210975932416e+\"\r\n        \"100\"},\r\n    {0x1.fffffffffffffp+333, chars_format::scientific, 100,\r\n        \"3.4996011596528186904622251182423800006726897247253585697998651598280205483565195293767640421951864832e+\"\r\n        \"100\"},\r\n    {0x1.fffffffffffffp+334, chars_format::scientific, 100,\r\n        \"6.9992023193056373809244502364847600013453794494507171395997303196560410967130390587535280843903729664e+\"\r\n        \"100\"},\r\n    {0x1.fffffffffffffp+335, chars_format::scientific, 101,\r\n        \"1.39984046386112747618489004729695200026907588989014342791994606393120821934260781175070561687807459328e+\"\r\n        \"101\"},\r\n    {0x1.fffffffffffffp+336, chars_format::scientific, 101,\r\n        \"2.79968092772225495236978009459390400053815177978028685583989212786241643868521562350141123375614918656e+\"\r\n        \"101\"},\r\n    {0x1.fffffffffffffp+337, chars_format::scientific, 101,\r\n        \"5.59936185544450990473956018918780800107630355956057371167978425572483287737043124700282246751229837312e+\"\r\n        \"101\"},\r\n    {0x1.fffffffffffffp+338, chars_format::scientific, 102,\r\n        \"1.119872371088901980947912037837561600215260711912114742335956851144966575474086249400564493502459674624e+\"\r\n        \"102\"},\r\n    {0x1.fffffffffffffp+339, chars_format::scientific, 102,\r\n        \"2.239744742177803961895824075675123200430521423824229484671913702289933150948172498801128987004919349248e+\"\r\n        \"102\"},\r\n    {0x1.fffffffffffffp+340, chars_format::scientific, 102,\r\n        \"4.479489484355607923791648151350246400861042847648458969343827404579866301896344997602257974009838698496e+\"\r\n        \"102\"},\r\n    {0x1.fffffffffffffp+341, chars_format::scientific, 102,\r\n        \"8.958978968711215847583296302700492801722085695296917938687654809159732603792689995204515948019677396992e+\"\r\n        \"102\"},\r\n    {0x1.fffffffffffffp+342, chars_format::scientific, 103,\r\n        \"1.\"\r\n        \"7917957937422431695166592605400985603444171390593835877375309618319465207585379990409031896039354793984e+\"\r\n        \"103\"},\r\n    {0x1.fffffffffffffp+343, chars_format::scientific, 103,\r\n        \"3.\"\r\n        \"5835915874844863390333185210801971206888342781187671754750619236638930415170759980818063792078709587968e+\"\r\n        \"103\"},\r\n    {0x1.fffffffffffffp+344, chars_format::scientific, 103,\r\n        \"7.\"\r\n        \"1671831749689726780666370421603942413776685562375343509501238473277860830341519961636127584157419175936e+\"\r\n        \"103\"},\r\n    {0x1.fffffffffffffp+345, chars_format::scientific, 104,\r\n        \"1.\"\r\n        \"43343663499379453561332740843207884827553371124750687019002476946555721660683039923272255168314838351872e+\"\r\n        \"104\"},\r\n    {0x1.fffffffffffffp+346, chars_format::scientific, 104,\r\n        \"2.\"\r\n        \"86687326998758907122665481686415769655106742249501374038004953893111443321366079846544510336629676703744e+\"\r\n        \"104\"},\r\n    {0x1.fffffffffffffp+347, chars_format::scientific, 104,\r\n        \"5.\"\r\n        \"73374653997517814245330963372831539310213484499002748076009907786222886642732159693089020673259353407488e+\"\r\n        \"104\"},\r\n    {0x1.fffffffffffffp+348, chars_format::scientific, 105,\r\n        \"1.\"\r\n        \"146749307995035628490661926745663078620426968998005496152019815572445773285464319386178041346518706814976e\"\r\n        \"+105\"},\r\n    {0x1.fffffffffffffp+349, chars_format::scientific, 105,\r\n        \"2.\"\r\n        \"293498615990071256981323853491326157240853937996010992304039631144891546570928638772356082693037413629952e\"\r\n        \"+105\"},\r\n    {0x1.fffffffffffffp+350, chars_format::scientific, 105,\r\n        \"4.\"\r\n        \"586997231980142513962647706982652314481707875992021984608079262289783093141857277544712165386074827259904e\"\r\n        \"+105\"},\r\n    {0x1.fffffffffffffp+351, chars_format::scientific, 105,\r\n        \"9.\"\r\n        \"173994463960285027925295413965304628963415751984043969216158524579566186283714555089424330772149654519808e\"\r\n        \"+105\"},\r\n    {0x1.fffffffffffffp+352, chars_format::scientific, 106,\r\n        \"1.\"\r\n        \"8347988927920570055850590827930609257926831503968087938432317049159132372567429110178848661544299309039616\"\r\n        \"e+106\"},\r\n    {0x1.fffffffffffffp+353, chars_format::scientific, 106,\r\n        \"3.\"\r\n        \"6695977855841140111701181655861218515853663007936175876864634098318264745134858220357697323088598618079232\"\r\n        \"e+106\"},\r\n    {0x1.fffffffffffffp+354, chars_format::scientific, 106,\r\n        \"7.\"\r\n        \"3391955711682280223402363311722437031707326015872351753729268196636529490269716440715394646177197236158464\"\r\n        \"e+106\"},\r\n    {0x1.fffffffffffffp+355, chars_format::scientific, 107,\r\n        \"1.\"\r\n        \"4678391142336456044680472662344487406341465203174470350745853639327305898053943288143078929235439447231692\"\r\n        \"8e+107\"},\r\n    {0x1.fffffffffffffp+356, chars_format::scientific, 107,\r\n        \"2.\"\r\n        \"9356782284672912089360945324688974812682930406348940701491707278654611796107886576286157858470878894463385\"\r\n        \"6e+107\"},\r\n    {0x1.fffffffffffffp+357, chars_format::scientific, 107,\r\n        \"5.\"\r\n        \"8713564569345824178721890649377949625365860812697881402983414557309223592215773152572315716941757788926771\"\r\n        \"2e+107\"},\r\n    {0x1.fffffffffffffp+358, chars_format::scientific, 108,\r\n        \"1.\"\r\n        \"1742712913869164835744378129875589925073172162539576280596682911461844718443154630514463143388351557785354\"\r\n        \"24e+108\"},\r\n    {0x1.fffffffffffffp+359, chars_format::scientific, 108,\r\n        \"2.\"\r\n        \"3485425827738329671488756259751179850146344325079152561193365822923689436886309261028926286776703115570708\"\r\n        \"48e+108\"},\r\n    {0x1.fffffffffffffp+360, chars_format::scientific, 108,\r\n        \"4.\"\r\n        \"6970851655476659342977512519502359700292688650158305122386731645847378873772618522057852573553406231141416\"\r\n        \"96e+108\"},\r\n    {0x1.fffffffffffffp+361, chars_format::scientific, 108,\r\n        \"9.\"\r\n        \"3941703310953318685955025039004719400585377300316610244773463291694757747545237044115705147106812462282833\"\r\n        \"92e+108\"},\r\n    {0x1.fffffffffffffp+362, chars_format::scientific, 109,\r\n        \"1.\"\r\n        \"8788340662190663737191005007800943880117075460063322048954692658338951549509047408823141029421362492456566\"\r\n        \"784e+109\"},\r\n    {0x1.fffffffffffffp+363, chars_format::scientific, 109,\r\n        \"3.\"\r\n        \"7576681324381327474382010015601887760234150920126644097909385316677903099018094817646282058842724984913133\"\r\n        \"568e+109\"},\r\n    {0x1.fffffffffffffp+364, chars_format::scientific, 109,\r\n        \"7.\"\r\n        \"5153362648762654948764020031203775520468301840253288195818770633355806198036189635292564117685449969826267\"\r\n        \"136e+109\"},\r\n    {0x1.fffffffffffffp+365, chars_format::scientific, 110,\r\n        \"1.\"\r\n        \"5030672529752530989752804006240755104093660368050657639163754126671161239607237927058512823537089993965253\"\r\n        \"4272e+110\"},\r\n    {0x1.fffffffffffffp+366, chars_format::scientific, 110,\r\n        \"3.\"\r\n        \"0061345059505061979505608012481510208187320736101315278327508253342322479214475854117025647074179987930506\"\r\n        \"8544e+110\"},\r\n    {0x1.fffffffffffffp+367, chars_format::scientific, 110,\r\n        \"6.\"\r\n        \"0122690119010123959011216024963020416374641472202630556655016506684644958428951708234051294148359975861013\"\r\n        \"7088e+110\"},\r\n    {0x1.fffffffffffffp+368, chars_format::scientific, 111,\r\n        \"1.\"\r\n        \"2024538023802024791802243204992604083274928294440526111331003301336928991685790341646810258829671995172202\"\r\n        \"74176e+111\"},\r\n    {0x1.fffffffffffffp+369, chars_format::scientific, 111,\r\n        \"2.\"\r\n        \"4049076047604049583604486409985208166549856588881052222662006602673857983371580683293620517659343990344405\"\r\n        \"48352e+111\"},\r\n    {0x1.fffffffffffffp+370, chars_format::scientific, 111,\r\n        \"4.\"\r\n        \"8098152095208099167208972819970416333099713177762104445324013205347715966743161366587241035318687980688810\"\r\n        \"96704e+111\"},\r\n    {0x1.fffffffffffffp+371, chars_format::scientific, 111,\r\n        \"9.\"\r\n        \"6196304190416198334417945639940832666199426355524208890648026410695431933486322733174482070637375961377621\"\r\n        \"93408e+111\"},\r\n    {0x1.fffffffffffffp+372, chars_format::scientific, 112,\r\n        \"1.\"\r\n        \"9239260838083239666883589127988166533239885271104841778129605282139086386697264546634896414127475192275524\"\r\n        \"386816e+112\"},\r\n    {0x1.fffffffffffffp+373, chars_format::scientific, 112,\r\n        \"3.\"\r\n        \"8478521676166479333767178255976333066479770542209683556259210564278172773394529093269792828254950384551048\"\r\n        \"773632e+112\"},\r\n    {0x1.fffffffffffffp+374, chars_format::scientific, 112,\r\n        \"7.\"\r\n        \"6957043352332958667534356511952666132959541084419367112518421128556345546789058186539585656509900769102097\"\r\n        \"547264e+112\"},\r\n    {0x1.fffffffffffffp+375, chars_format::scientific, 113,\r\n        \"1.\"\r\n        \"5391408670466591733506871302390533226591908216883873422503684225711269109357811637307917131301980153820419\"\r\n        \"5094528e+113\"},\r\n    {0x1.fffffffffffffp+376, chars_format::scientific, 113,\r\n        \"3.\"\r\n        \"0782817340933183467013742604781066453183816433767746845007368451422538218715623274615834262603960307640839\"\r\n        \"0189056e+113\"},\r\n    {0x1.fffffffffffffp+377, chars_format::scientific, 113,\r\n        \"6.\"\r\n        \"1565634681866366934027485209562132906367632867535493690014736902845076437431246549231668525207920615281678\"\r\n        \"0378112e+113\"},\r\n    {0x1.fffffffffffffp+378, chars_format::scientific, 114,\r\n        \"1.\"\r\n        \"2313126936373273386805497041912426581273526573507098738002947380569015287486249309846333705041584123056335\"\r\n        \"60756224e+114\"},\r\n    {0x1.fffffffffffffp+379, chars_format::scientific, 114,\r\n        \"2.\"\r\n        \"4626253872746546773610994083824853162547053147014197476005894761138030574972498619692667410083168246112671\"\r\n        \"21512448e+114\"},\r\n    {0x1.fffffffffffffp+380, chars_format::scientific, 114,\r\n        \"4.\"\r\n        \"9252507745493093547221988167649706325094106294028394952011789522276061149944997239385334820166336492225342\"\r\n        \"43024896e+114\"},\r\n    {0x1.fffffffffffffp+381, chars_format::scientific, 114,\r\n        \"9.\"\r\n        \"8505015490986187094443976335299412650188212588056789904023579044552122299889994478770669640332672984450684\"\r\n        \"86049792e+114\"},\r\n    {0x1.fffffffffffffp+382, chars_format::scientific, 115,\r\n        \"1.\"\r\n        \"9701003098197237418888795267059882530037642517611357980804715808910424459977998895754133928066534596890136\"\r\n        \"972099584e+115\"},\r\n    {0x1.fffffffffffffp+383, chars_format::scientific, 115,\r\n        \"3.\"\r\n        \"9402006196394474837777590534119765060075285035222715961609431617820848919955997791508267856133069193780273\"\r\n        \"944199168e+115\"},\r\n    {0x1.fffffffffffffp+384, chars_format::scientific, 115,\r\n        \"7.\"\r\n        \"8804012392788949675555181068239530120150570070445431923218863235641697839911995583016535712266138387560547\"\r\n        \"888398336e+115\"},\r\n    {0x1.fffffffffffffp+385, chars_format::scientific, 116,\r\n        \"1.\"\r\n        \"5760802478557789935111036213647906024030114014089086384643772647128339567982399116603307142453227677512109\"\r\n        \"5776796672e+116\"},\r\n    {0x1.fffffffffffffp+386, chars_format::scientific, 116,\r\n        \"3.\"\r\n        \"1521604957115579870222072427295812048060228028178172769287545294256679135964798233206614284906455355024219\"\r\n        \"1553593344e+116\"},\r\n    {0x1.fffffffffffffp+387, chars_format::scientific, 116,\r\n        \"6.\"\r\n        \"3043209914231159740444144854591624096120456056356345538575090588513358271929596466413228569812910710048438\"\r\n        \"3107186688e+116\"},\r\n    {0x1.fffffffffffffp+388, chars_format::scientific, 117,\r\n        \"1.\"\r\n        \"2608641982846231948088828970918324819224091211271269107715018117702671654385919293282645713962582142009687\"\r\n        \"66214373376e+117\"},\r\n    {0x1.fffffffffffffp+389, chars_format::scientific, 117,\r\n        \"2.\"\r\n        \"5217283965692463896177657941836649638448182422542538215430036235405343308771838586565291427925164284019375\"\r\n        \"32428746752e+117\"},\r\n    {0x1.fffffffffffffp+390, chars_format::scientific, 117,\r\n        \"5.\"\r\n        \"0434567931384927792355315883673299276896364845085076430860072470810686617543677173130582855850328568038750\"\r\n        \"64857493504e+117\"},\r\n    {0x1.fffffffffffffp+391, chars_format::scientific, 118,\r\n        \"1.\"\r\n        \"0086913586276985558471063176734659855379272969017015286172014494162137323508735434626116571170065713607750\"\r\n        \"129714987008e+118\"},\r\n    {0x1.fffffffffffffp+392, chars_format::scientific, 118,\r\n        \"2.\"\r\n        \"0173827172553971116942126353469319710758545938034030572344028988324274647017470869252233142340131427215500\"\r\n        \"259429974016e+118\"},\r\n    {0x1.fffffffffffffp+393, chars_format::scientific, 118,\r\n        \"4.\"\r\n        \"0347654345107942233884252706938639421517091876068061144688057976648549294034941738504466284680262854431000\"\r\n        \"518859948032e+118\"},\r\n    {0x1.fffffffffffffp+394, chars_format::scientific, 118,\r\n        \"8.\"\r\n        \"0695308690215884467768505413877278843034183752136122289376115953297098588069883477008932569360525708862001\"\r\n        \"037719896064e+118\"},\r\n    {0x1.fffffffffffffp+395, chars_format::scientific, 119,\r\n        \"1.\"\r\n        \"6139061738043176893553701082775455768606836750427224457875223190659419717613976695401786513872105141772400\"\r\n        \"2075439792128e+119\"},\r\n    {0x1.fffffffffffffp+396, chars_format::scientific, 119,\r\n        \"3.\"\r\n        \"2278123476086353787107402165550911537213673500854448915750446381318839435227953390803573027744210283544800\"\r\n        \"4150879584256e+119\"},\r\n    {0x1.fffffffffffffp+397, chars_format::scientific, 119,\r\n        \"6.\"\r\n        \"4556246952172707574214804331101823074427347001708897831500892762637678870455906781607146055488420567089600\"\r\n        \"8301759168512e+119\"},\r\n    {0x1.fffffffffffffp+398, chars_format::scientific, 120,\r\n        \"1.\"\r\n        \"2911249390434541514842960866220364614885469400341779566300178552527535774091181356321429211097684113417920\"\r\n        \"16603518337024e+120\"},\r\n    {0x1.fffffffffffffp+399, chars_format::scientific, 120,\r\n        \"2.\"\r\n        \"5822498780869083029685921732440729229770938800683559132600357105055071548182362712642858422195368226835840\"\r\n        \"33207036674048e+120\"},\r\n    {0x1.fffffffffffffp+400, chars_format::scientific, 120,\r\n        \"5.\"\r\n        \"1644997561738166059371843464881458459541877601367118265200714210110143096364725425285716844390736453671680\"\r\n        \"66414073348096e+120\"},\r\n    {0x1.fffffffffffffp+401, chars_format::scientific, 121,\r\n        \"1.\"\r\n        \"0328999512347633211874368692976291691908375520273423653040142842022028619272945085057143368878147290734336\"\r\n        \"132828146696192e+121\"},\r\n    {0x1.fffffffffffffp+402, chars_format::scientific, 121,\r\n        \"2.\"\r\n        \"0657999024695266423748737385952583383816751040546847306080285684044057238545890170114286737756294581468672\"\r\n        \"265656293392384e+121\"},\r\n    {0x1.fffffffffffffp+403, chars_format::scientific, 121,\r\n        \"4.\"\r\n        \"1315998049390532847497474771905166767633502081093694612160571368088114477091780340228573475512589162937344\"\r\n        \"531312586784768e+121\"},\r\n    {0x1.fffffffffffffp+404, chars_format::scientific, 121,\r\n        \"8.\"\r\n        \"2631996098781065694994949543810333535267004162187389224321142736176228954183560680457146951025178325874689\"\r\n        \"062625173569536e+121\"},\r\n    {0x1.fffffffffffffp+405, chars_format::scientific, 122,\r\n        \"1.\"\r\n        \"6526399219756213138998989908762066707053400832437477844864228547235245790836712136091429390205035665174937\"\r\n        \"8125250347139072e+122\"},\r\n    {0x1.fffffffffffffp+406, chars_format::scientific, 122,\r\n        \"3.\"\r\n        \"3052798439512426277997979817524133414106801664874955689728457094470491581673424272182858780410071330349875\"\r\n        \"6250500694278144e+122\"},\r\n    {0x1.fffffffffffffp+407, chars_format::scientific, 122,\r\n        \"6.\"\r\n        \"6105596879024852555995959635048266828213603329749911379456914188940983163346848544365717560820142660699751\"\r\n        \"2501001388556288e+122\"},\r\n    {0x1.fffffffffffffp+408, chars_format::scientific, 123,\r\n        \"1.\"\r\n        \"3221119375804970511199191927009653365642720665949982275891382837788196632669369708873143512164028532139950\"\r\n        \"25002002777112576e+123\"},\r\n    {0x1.fffffffffffffp+409, chars_format::scientific, 123,\r\n        \"2.\"\r\n        \"6442238751609941022398383854019306731285441331899964551782765675576393265338739417746287024328057064279900\"\r\n        \"50004005554225152e+123\"},\r\n    {0x1.fffffffffffffp+410, chars_format::scientific, 123,\r\n        \"5.\"\r\n        \"2884477503219882044796767708038613462570882663799929103565531351152786530677478835492574048656114128559801\"\r\n        \"00008011108450304e+123\"},\r\n    {0x1.fffffffffffffp+411, chars_format::scientific, 124,\r\n        \"1.\"\r\n        \"0576895500643976408959353541607722692514176532759985820713106270230557306135495767098514809731222825711960\"\r\n        \"200016022216900608e+124\"},\r\n    {0x1.fffffffffffffp+412, chars_format::scientific, 124,\r\n        \"2.\"\r\n        \"1153791001287952817918707083215445385028353065519971641426212540461114612270991534197029619462445651423920\"\r\n        \"400032044433801216e+124\"},\r\n    {0x1.fffffffffffffp+413, chars_format::scientific, 124,\r\n        \"4.\"\r\n        \"2307582002575905635837414166430890770056706131039943282852425080922229224541983068394059238924891302847840\"\r\n        \"800064088867602432e+124\"},\r\n    {0x1.fffffffffffffp+414, chars_format::scientific, 124,\r\n        \"8.\"\r\n        \"4615164005151811271674828332861781540113412262079886565704850161844458449083966136788118477849782605695681\"\r\n        \"600128177735204864e+124\"},\r\n    {0x1.fffffffffffffp+415, chars_format::scientific, 125,\r\n        \"1.\"\r\n        \"6923032801030362254334965666572356308022682452415977313140970032368891689816793227357623695569956521139136\"\r\n        \"3200256355470409728e+125\"},\r\n    {0x1.fffffffffffffp+416, chars_format::scientific, 125,\r\n        \"3.\"\r\n        \"3846065602060724508669931333144712616045364904831954626281940064737783379633586454715247391139913042278272\"\r\n        \"6400512710940819456e+125\"},\r\n    {0x1.fffffffffffffp+417, chars_format::scientific, 125,\r\n        \"6.\"\r\n        \"7692131204121449017339862666289425232090729809663909252563880129475566759267172909430494782279826084556545\"\r\n        \"2801025421881638912e+125\"},\r\n    {0x1.fffffffffffffp+418, chars_format::scientific, 126,\r\n        \"1.\"\r\n        \"3538426240824289803467972533257885046418145961932781850512776025895113351853434581886098956455965216911309\"\r\n        \"05602050843763277824e+126\"},\r\n    {0x1.fffffffffffffp+419, chars_format::scientific, 126,\r\n        \"2.\"\r\n        \"7076852481648579606935945066515770092836291923865563701025552051790226703706869163772197912911930433822618\"\r\n        \"11204101687526555648e+126\"},\r\n    {0x1.fffffffffffffp+420, chars_format::scientific, 126,\r\n        \"5.\"\r\n        \"4153704963297159213871890133031540185672583847731127402051104103580453407413738327544395825823860867645236\"\r\n        \"22408203375053111296e+126\"},\r\n    {0x1.fffffffffffffp+421, chars_format::scientific, 127,\r\n        \"1.\"\r\n        \"0830740992659431842774378026606308037134516769546225480410220820716090681482747665508879165164772173529047\"\r\n        \"244816406750106222592e+127\"},\r\n    {0x1.fffffffffffffp+422, chars_format::scientific, 127,\r\n        \"2.\"\r\n        \"1661481985318863685548756053212616074269033539092450960820441641432181362965495331017758330329544347058094\"\r\n        \"489632813500212445184e+127\"},\r\n    {0x1.fffffffffffffp+423, chars_format::scientific, 127,\r\n        \"4.\"\r\n        \"3322963970637727371097512106425232148538067078184901921640883282864362725930990662035516660659088694116188\"\r\n        \"979265627000424890368e+127\"},\r\n    {0x1.fffffffffffffp+424, chars_format::scientific, 127,\r\n        \"8.\"\r\n        \"6645927941275454742195024212850464297076134156369803843281766565728725451861981324071033321318177388232377\"\r\n        \"958531254000849780736e+127\"},\r\n    {0x1.fffffffffffffp+425, chars_format::scientific, 128,\r\n        \"1.\"\r\n        \"7329185588255090948439004842570092859415226831273960768656353313145745090372396264814206664263635477646475\"\r\n        \"5917062508001699561472e+128\"},\r\n    {0x1.fffffffffffffp+426, chars_format::scientific, 128,\r\n        \"3.\"\r\n        \"4658371176510181896878009685140185718830453662547921537312706626291490180744792529628413328527270955292951\"\r\n        \"1834125016003399122944e+128\"},\r\n    {0x1.fffffffffffffp+427, chars_format::scientific, 128,\r\n        \"6.\"\r\n        \"9316742353020363793756019370280371437660907325095843074625413252582980361489585059256826657054541910585902\"\r\n        \"3668250032006798245888e+128\"},\r\n    {0x1.fffffffffffffp+428, chars_format::scientific, 129,\r\n        \"1.\"\r\n        \"3863348470604072758751203874056074287532181465019168614925082650516596072297917011851365331410908382117180\"\r\n        \"47336500064013596491776e+129\"},\r\n    {0x1.fffffffffffffp+429, chars_format::scientific, 129,\r\n        \"2.\"\r\n        \"7726696941208145517502407748112148575064362930038337229850165301033192144595834023702730662821816764234360\"\r\n        \"94673000128027192983552e+129\"},\r\n    {0x1.fffffffffffffp+430, chars_format::scientific, 129,\r\n        \"5.\"\r\n        \"5453393882416291035004815496224297150128725860076674459700330602066384289191668047405461325643633528468721\"\r\n        \"89346000256054385967104e+129\"},\r\n    {0x1.fffffffffffffp+431, chars_format::scientific, 130,\r\n        \"1.\"\r\n        \"1090678776483258207000963099244859430025745172015334891940066120413276857838333609481092265128726705693744\"\r\n        \"378692000512108771934208e+130\"},\r\n    {0x1.fffffffffffffp+432, chars_format::scientific, 130,\r\n        \"2.\"\r\n        \"2181357552966516414001926198489718860051490344030669783880132240826553715676667218962184530257453411387488\"\r\n        \"757384001024217543868416e+130\"},\r\n    {0x1.fffffffffffffp+433, chars_format::scientific, 130,\r\n        \"4.\"\r\n        \"4362715105933032828003852396979437720102980688061339567760264481653107431353334437924369060514906822774977\"\r\n        \"514768002048435087736832e+130\"},\r\n    {0x1.fffffffffffffp+434, chars_format::scientific, 130,\r\n        \"8.\"\r\n        \"8725430211866065656007704793958875440205961376122679135520528963306214862706668875848738121029813645549955\"\r\n        \"029536004096870175473664e+130\"},\r\n    {0x1.fffffffffffffp+435, chars_format::scientific, 131,\r\n        \"1.\"\r\n        \"7745086042373213131201540958791775088041192275224535827104105792661242972541333775169747624205962729109991\"\r\n        \"0059072008193740350947328e+131\"},\r\n    {0x1.fffffffffffffp+436, chars_format::scientific, 131,\r\n        \"3.\"\r\n        \"5490172084746426262403081917583550176082384550449071654208211585322485945082667550339495248411925458219982\"\r\n        \"0118144016387480701894656e+131\"},\r\n    {0x1.fffffffffffffp+437, chars_format::scientific, 131,\r\n        \"7.\"\r\n        \"0980344169492852524806163835167100352164769100898143308416423170644971890165335100678990496823850916439964\"\r\n        \"0236288032774961403789312e+131\"},\r\n    {0x1.fffffffffffffp+438, chars_format::scientific, 132,\r\n        \"1.\"\r\n        \"4196068833898570504961232767033420070432953820179628661683284634128994378033067020135798099364770183287992\"\r\n        \"80472576065549922807578624e+132\"},\r\n    {0x1.fffffffffffffp+439, chars_format::scientific, 132,\r\n        \"2.\"\r\n        \"8392137667797141009922465534066840140865907640359257323366569268257988756066134040271596198729540366575985\"\r\n        \"60945152131099845615157248e+132\"},\r\n    {0x1.fffffffffffffp+440, chars_format::scientific, 132,\r\n        \"5.\"\r\n        \"6784275335594282019844931068133680281731815280718514646733138536515977512132268080543192397459080733151971\"\r\n        \"21890304262199691230314496e+132\"},\r\n    {0x1.fffffffffffffp+441, chars_format::scientific, 133,\r\n        \"1.\"\r\n        \"1356855067118856403968986213626736056346363056143702929346627707303195502426453616108638479491816146630394\"\r\n        \"243780608524399382460628992e+133\"},\r\n    {0x1.fffffffffffffp+442, chars_format::scientific, 133,\r\n        \"2.\"\r\n        \"2713710134237712807937972427253472112692726112287405858693255414606391004852907232217276958983632293260788\"\r\n        \"487561217048798764921257984e+133\"},\r\n    {0x1.fffffffffffffp+443, chars_format::scientific, 133,\r\n        \"4.\"\r\n        \"5427420268475425615875944854506944225385452224574811717386510829212782009705814464434553917967264586521576\"\r\n        \"975122434097597529842515968e+133\"},\r\n    {0x1.fffffffffffffp+444, chars_format::scientific, 133,\r\n        \"9.\"\r\n        \"0854840536950851231751889709013888450770904449149623434773021658425564019411628928869107835934529173043153\"\r\n        \"950244868195195059685031936e+133\"},\r\n    {0x1.fffffffffffffp+445, chars_format::scientific, 134,\r\n        \"1.\"\r\n        \"8170968107390170246350377941802777690154180889829924686954604331685112803882325785773821567186905834608630\"\r\n        \"7900489736390390119370063872e+134\"},\r\n    {0x1.fffffffffffffp+446, chars_format::scientific, 134,\r\n        \"3.\"\r\n        \"6341936214780340492700755883605555380308361779659849373909208663370225607764651571547643134373811669217261\"\r\n        \"5800979472780780238740127744e+134\"},\r\n    {0x1.fffffffffffffp+447, chars_format::scientific, 134,\r\n        \"7.\"\r\n        \"2683872429560680985401511767211110760616723559319698747818417326740451215529303143095286268747623338434523\"\r\n        \"1601958945561560477480255488e+134\"},\r\n    {0x1.fffffffffffffp+448, chars_format::scientific, 135,\r\n        \"1.\"\r\n        \"4536774485912136197080302353442222152123344711863939749563683465348090243105860628619057253749524667686904\"\r\n        \"63203917891123120954960510976e+135\"},\r\n    {0x1.fffffffffffffp+449, chars_format::scientific, 135,\r\n        \"2.\"\r\n        \"9073548971824272394160604706884444304246689423727879499127366930696180486211721257238114507499049335373809\"\r\n        \"26407835782246241909921021952e+135\"},\r\n    {0x1.fffffffffffffp+450, chars_format::scientific, 135,\r\n        \"5.\"\r\n        \"8147097943648544788321209413768888608493378847455758998254733861392360972423442514476229014998098670747618\"\r\n        \"52815671564492483819842043904e+135\"},\r\n    {0x1.fffffffffffffp+451, chars_format::scientific, 136,\r\n        \"1.\"\r\n        \"1629419588729708957664241882753777721698675769491151799650946772278472194484688502895245802999619734149523\"\r\n        \"705631343128984967639684087808e+136\"},\r\n    {0x1.fffffffffffffp+452, chars_format::scientific, 136,\r\n        \"2.\"\r\n        \"3258839177459417915328483765507555443397351538982303599301893544556944388969377005790491605999239468299047\"\r\n        \"411262686257969935279368175616e+136\"},\r\n    {0x1.fffffffffffffp+453, chars_format::scientific, 136,\r\n        \"4.\"\r\n        \"6517678354918835830656967531015110886794703077964607198603787089113888777938754011580983211998478936598094\"\r\n        \"822525372515939870558736351232e+136\"},\r\n    {0x1.fffffffffffffp+454, chars_format::scientific, 136,\r\n        \"9.\"\r\n        \"3035356709837671661313935062030221773589406155929214397207574178227777555877508023161966423996957873196189\"\r\n        \"645050745031879741117472702464e+136\"},\r\n    {0x1.fffffffffffffp+455, chars_format::scientific, 137,\r\n        \"1.\"\r\n        \"8607071341967534332262787012406044354717881231185842879441514835645555511175501604632393284799391574639237\"\r\n        \"9290101490063759482234945404928e+137\"},\r\n    {0x1.fffffffffffffp+456, chars_format::scientific, 137,\r\n        \"3.\"\r\n        \"7214142683935068664525574024812088709435762462371685758883029671291111022351003209264786569598783149278475\"\r\n        \"8580202980127518964469890809856e+137\"},\r\n    {0x1.fffffffffffffp+457, chars_format::scientific, 137,\r\n        \"7.\"\r\n        \"4428285367870137329051148049624177418871524924743371517766059342582222044702006418529573139197566298556951\"\r\n        \"7160405960255037928939781619712e+137\"},\r\n    {0x1.fffffffffffffp+458, chars_format::scientific, 138,\r\n        \"1.\"\r\n        \"4885657073574027465810229609924835483774304984948674303553211868516444408940401283705914627839513259711390\"\r\n        \"34320811920510075857879563239424e+138\"},\r\n    {0x1.fffffffffffffp+459, chars_format::scientific, 138,\r\n        \"2.\"\r\n        \"9771314147148054931620459219849670967548609969897348607106423737032888817880802567411829255679026519422780\"\r\n        \"68641623841020151715759126478848e+138\"},\r\n    {0x1.fffffffffffffp+460, chars_format::scientific, 138,\r\n        \"5.\"\r\n        \"9542628294296109863240918439699341935097219939794697214212847474065777635761605134823658511358053038845561\"\r\n        \"37283247682040303431518252957696e+138\"},\r\n    {0x1.fffffffffffffp+461, chars_format::scientific, 139,\r\n        \"1.\"\r\n        \"1908525658859221972648183687939868387019443987958939442842569494813155527152321026964731702271610607769112\"\r\n        \"274566495364080606863036505915392e+139\"},\r\n    {0x1.fffffffffffffp+462, chars_format::scientific, 139,\r\n        \"2.\"\r\n        \"3817051317718443945296367375879736774038887975917878885685138989626311054304642053929463404543221215538224\"\r\n        \"549132990728161213726073011830784e+139\"},\r\n    {0x1.fffffffffffffp+463, chars_format::scientific, 139,\r\n        \"4.\"\r\n        \"7634102635436887890592734751759473548077775951835757771370277979252622108609284107858926809086442431076449\"\r\n        \"098265981456322427452146023661568e+139\"},\r\n    {0x1.fffffffffffffp+464, chars_format::scientific, 139,\r\n        \"9.\"\r\n        \"5268205270873775781185469503518947096155551903671515542740555958505244217218568215717853618172884862152898\"\r\n        \"196531962912644854904292047323136e+139\"},\r\n    {0x1.fffffffffffffp+465, chars_format::scientific, 140,\r\n        \"1.\"\r\n        \"9053641054174755156237093900703789419231110380734303108548111191701048843443713643143570723634576972430579\"\r\n        \"6393063925825289709808584094646272e+140\"},\r\n    {0x1.fffffffffffffp+466, chars_format::scientific, 140,\r\n        \"3.\"\r\n        \"8107282108349510312474187801407578838462220761468606217096222383402097686887427286287141447269153944861159\"\r\n        \"2786127851650579419617168189292544e+140\"},\r\n    {0x1.fffffffffffffp+467, chars_format::scientific, 140,\r\n        \"7.\"\r\n        \"6214564216699020624948375602815157676924441522937212434192444766804195373774854572574282894538307889722318\"\r\n        \"5572255703301158839234336378585088e+140\"},\r\n    {0x1.fffffffffffffp+468, chars_format::scientific, 141,\r\n        \"1.\"\r\n        \"5242912843339804124989675120563031535384888304587442486838488953360839074754970914514856578907661577944463\"\r\n        \"71144511406602317678468672757170176e+141\"},\r\n    {0x1.fffffffffffffp+469, chars_format::scientific, 141,\r\n        \"3.\"\r\n        \"0485825686679608249979350241126063070769776609174884973676977906721678149509941829029713157815323155888927\"\r\n        \"42289022813204635356937345514340352e+141\"},\r\n    {0x1.fffffffffffffp+470, chars_format::scientific, 141,\r\n        \"6.\"\r\n        \"0971651373359216499958700482252126141539553218349769947353955813443356299019883658059426315630646311777854\"\r\n        \"84578045626409270713874691028680704e+141\"},\r\n    {0x1.fffffffffffffp+471, chars_format::scientific, 142,\r\n        \"1.\"\r\n        \"2194330274671843299991740096450425228307910643669953989470791162688671259803976731611885263126129262355570\"\r\n        \"969156091252818541427749382057361408e+142\"},\r\n    {0x1.fffffffffffffp+472, chars_format::scientific, 142,\r\n        \"2.\"\r\n        \"4388660549343686599983480192900850456615821287339907978941582325377342519607953463223770526252258524711141\"\r\n        \"938312182505637082855498764114722816e+142\"},\r\n    {0x1.fffffffffffffp+473, chars_format::scientific, 142,\r\n        \"4.\"\r\n        \"8777321098687373199966960385801700913231642574679815957883164650754685039215906926447541052504517049422283\"\r\n        \"876624365011274165710997528229445632e+142\"},\r\n    {0x1.fffffffffffffp+474, chars_format::scientific, 142,\r\n        \"9.\"\r\n        \"7554642197374746399933920771603401826463285149359631915766329301509370078431813852895082105009034098844567\"\r\n        \"753248730022548331421995056458891264e+142\"},\r\n    {0x1.fffffffffffffp+475, chars_format::scientific, 143,\r\n        \"1.\"\r\n        \"9510928439474949279986784154320680365292657029871926383153265860301874015686362770579016421001806819768913\"\r\n        \"5506497460045096662843990112917782528e+143\"},\r\n    {0x1.fffffffffffffp+476, chars_format::scientific, 143,\r\n        \"3.\"\r\n        \"9021856878949898559973568308641360730585314059743852766306531720603748031372725541158032842003613639537827\"\r\n        \"1012994920090193325687980225835565056e+143\"},\r\n    {0x1.fffffffffffffp+477, chars_format::scientific, 143,\r\n        \"7.\"\r\n        \"8043713757899797119947136617282721461170628119487705532613063441207496062745451082316065684007227279075654\"\r\n        \"2025989840180386651375960451671130112e+143\"},\r\n    {0x1.fffffffffffffp+478, chars_format::scientific, 144,\r\n        \"1.\"\r\n        \"5608742751579959423989427323456544292234125623897541106522612688241499212549090216463213136801445455815130\"\r\n        \"84051979680360773302751920903342260224e+144\"},\r\n    {0x1.fffffffffffffp+479, chars_format::scientific, 144,\r\n        \"3.\"\r\n        \"1217485503159918847978854646913088584468251247795082213045225376482998425098180432926426273602890911630261\"\r\n        \"68103959360721546605503841806684520448e+144\"},\r\n    {0x1.fffffffffffffp+480, chars_format::scientific, 144,\r\n        \"6.\"\r\n        \"2434971006319837695957709293826177168936502495590164426090450752965996850196360865852852547205781823260523\"\r\n        \"36207918721443093211007683613369040896e+144\"},\r\n    {0x1.fffffffffffffp+481, chars_format::scientific, 145,\r\n        \"1.\"\r\n        \"2486994201263967539191541858765235433787300499118032885218090150593199370039272173170570509441156364652104\"\r\n        \"672415837442886186422015367226738081792e+145\"},\r\n    {0x1.fffffffffffffp+482, chars_format::scientific, 145,\r\n        \"2.\"\r\n        \"4973988402527935078383083717530470867574600998236065770436180301186398740078544346341141018882312729304209\"\r\n        \"344831674885772372844030734453476163584e+145\"},\r\n    {0x1.fffffffffffffp+483, chars_format::scientific, 145,\r\n        \"4.\"\r\n        \"9947976805055870156766167435060941735149201996472131540872360602372797480157088692682282037764625458608418\"\r\n        \"689663349771544745688061468906952327168e+145\"},\r\n    {0x1.fffffffffffffp+484, chars_format::scientific, 145,\r\n        \"9.\"\r\n        \"9895953610111740313532334870121883470298403992944263081744721204745594960314177385364564075529250917216837\"\r\n        \"379326699543089491376122937813904654336e+145\"},\r\n    {0x1.fffffffffffffp+485, chars_format::scientific, 146,\r\n        \"1.\"\r\n        \"9979190722022348062706466974024376694059680798588852616348944240949118992062835477072912815105850183443367\"\r\n        \"4758653399086178982752245875627809308672e+146\"},\r\n    {0x1.fffffffffffffp+486, chars_format::scientific, 146,\r\n        \"3.\"\r\n        \"9958381444044696125412933948048753388119361597177705232697888481898237984125670954145825630211700366886734\"\r\n        \"9517306798172357965504491751255618617344e+146\"},\r\n    {0x1.fffffffffffffp+487, chars_format::scientific, 146,\r\n        \"7.\"\r\n        \"9916762888089392250825867896097506776238723194355410465395776963796475968251341908291651260423400733773469\"\r\n        \"9034613596344715931008983502511237234688e+146\"},\r\n    {0x1.fffffffffffffp+488, chars_format::scientific, 147,\r\n        \"1.\"\r\n        \"5983352577617878450165173579219501355247744638871082093079155392759295193650268381658330252084680146754693\"\r\n        \"98069227192689431862017967005022474469376e+147\"},\r\n    {0x1.fffffffffffffp+489, chars_format::scientific, 147,\r\n        \"3.\"\r\n        \"1966705155235756900330347158439002710495489277742164186158310785518590387300536763316660504169360293509387\"\r\n        \"96138454385378863724035934010044948938752e+147\"},\r\n    {0x1.fffffffffffffp+490, chars_format::scientific, 147,\r\n        \"6.\"\r\n        \"3933410310471513800660694316878005420990978555484328372316621571037180774601073526633321008338720587018775\"\r\n        \"92276908770757727448071868020089897877504e+147\"},\r\n    {0x1.fffffffffffffp+491, chars_format::scientific, 148,\r\n        \"1.\"\r\n        \"2786682062094302760132138863375601084198195711096865674463324314207436154920214705326664201667744117403755\"\r\n        \"184553817541515454896143736040179795755008e+148\"},\r\n    {0x1.fffffffffffffp+492, chars_format::scientific, 148,\r\n        \"2.\"\r\n        \"5573364124188605520264277726751202168396391422193731348926648628414872309840429410653328403335488234807510\"\r\n        \"369107635083030909792287472080359591510016e+148\"},\r\n    {0x1.fffffffffffffp+493, chars_format::scientific, 148,\r\n        \"5.\"\r\n        \"1146728248377211040528555453502404336792782844387462697853297256829744619680858821306656806670976469615020\"\r\n        \"738215270166061819584574944160719183020032e+148\"},\r\n    {0x1.fffffffffffffp+494, chars_format::scientific, 149,\r\n        \"1.\"\r\n        \"0229345649675442208105711090700480867358556568877492539570659451365948923936171764261331361334195293923004\"\r\n        \"1476430540332123639169149888321438366040064e+149\"},\r\n    {0x1.fffffffffffffp+495, chars_format::scientific, 149,\r\n        \"2.\"\r\n        \"0458691299350884416211422181400961734717113137754985079141318902731897847872343528522662722668390587846008\"\r\n        \"2952861080664247278338299776642876732080128e+149\"},\r\n    {0x1.fffffffffffffp+496, chars_format::scientific, 149,\r\n        \"4.\"\r\n        \"0917382598701768832422844362801923469434226275509970158282637805463795695744687057045325445336781175692016\"\r\n        \"5905722161328494556676599553285753464160256e+149\"},\r\n    {0x1.fffffffffffffp+497, chars_format::scientific, 149,\r\n        \"8.\"\r\n        \"1834765197403537664845688725603846938868452551019940316565275610927591391489374114090650890673562351384033\"\r\n        \"1811444322656989113353199106571506928320512e+149\"},\r\n    {0x1.fffffffffffffp+498, chars_format::scientific, 150,\r\n        \"1.\"\r\n        \"6366953039480707532969137745120769387773690510203988063313055122185518278297874822818130178134712470276806\"\r\n        \"63622888645313978226706398213143013856641024e+150\"},\r\n    {0x1.fffffffffffffp+499, chars_format::scientific, 150,\r\n        \"3.\"\r\n        \"2733906078961415065938275490241538775547381020407976126626110244371036556595749645636260356269424940553613\"\r\n        \"27245777290627956453412796426286027713282048e+150\"},\r\n    {0x1.fffffffffffffp+500, chars_format::scientific, 150,\r\n        \"6.\"\r\n        \"5467812157922830131876550980483077551094762040815952253252220488742073113191499291272520712538849881107226\"\r\n        \"54491554581255912906825592852572055426564096e+150\"},\r\n    {0x1.fffffffffffffp+501, chars_format::scientific, 151,\r\n        \"1.\"\r\n        \"3093562431584566026375310196096615510218952408163190450650444097748414622638299858254504142507769976221445\"\r\n        \"308983109162511825813651185705144110853128192e+151\"},\r\n    {0x1.fffffffffffffp+502, chars_format::scientific, 151,\r\n        \"2.\"\r\n        \"6187124863169132052750620392193231020437904816326380901300888195496829245276599716509008285015539952442890\"\r\n        \"617966218325023651627302371410288221706256384e+151\"},\r\n    {0x1.fffffffffffffp+503, chars_format::scientific, 151,\r\n        \"5.\"\r\n        \"2374249726338264105501240784386462040875809632652761802601776390993658490553199433018016570031079904885781\"\r\n        \"235932436650047303254604742820576443412512768e+151\"},\r\n    {0x1.fffffffffffffp+504, chars_format::scientific, 152,\r\n        \"1.\"\r\n        \"0474849945267652821100248156877292408175161926530552360520355278198731698110639886603603314006215980977156\"\r\n        \"2471864873300094606509209485641152886825025536e+152\"},\r\n    {0x1.fffffffffffffp+505, chars_format::scientific, 152,\r\n        \"2.\"\r\n        \"0949699890535305642200496313754584816350323853061104721040710556397463396221279773207206628012431961954312\"\r\n        \"4943729746600189213018418971282305773650051072e+152\"},\r\n    {0x1.fffffffffffffp+506, chars_format::scientific, 152,\r\n        \"4.\"\r\n        \"1899399781070611284400992627509169632700647706122209442081421112794926792442559546414413256024863923908624\"\r\n        \"9887459493200378426036837942564611547300102144e+152\"},\r\n    {0x1.fffffffffffffp+507, chars_format::scientific, 152,\r\n        \"8.\"\r\n        \"3798799562141222568801985255018339265401295412244418884162842225589853584885119092828826512049727847817249\"\r\n        \"9774918986400756852073675885129223094600204288e+152\"},\r\n    {0x1.fffffffffffffp+508, chars_format::scientific, 153,\r\n        \"1.\"\r\n        \"6759759912428244513760397051003667853080259082448883776832568445117970716977023818565765302409945569563449\"\r\n        \"99549837972801513704147351770258446189200408576e+153\"},\r\n    {0x1.fffffffffffffp+509, chars_format::scientific, 153,\r\n        \"3.\"\r\n        \"3519519824856489027520794102007335706160518164897767553665136890235941433954047637131530604819891139126899\"\r\n        \"99099675945603027408294703540516892378400817152e+153\"},\r\n    {0x1.fffffffffffffp+510, chars_format::scientific, 153,\r\n        \"6.\"\r\n        \"7039039649712978055041588204014671412321036329795535107330273780471882867908095274263061209639782278253799\"\r\n        \"98199351891206054816589407081033784756801634304e+153\"},\r\n    {0x1.fffffffffffffp+511, chars_format::scientific, 154,\r\n        \"1.\"\r\n        \"3407807929942595611008317640802934282464207265959107021466054756094376573581619054852612241927956455650759\"\r\n        \"996398703782412109633178814162067569513603268608e+154\"},\r\n    {0x1.fffffffffffffp+512, chars_format::scientific, 154,\r\n        \"2.\"\r\n        \"6815615859885191222016635281605868564928414531918214042932109512188753147163238109705224483855912911301519\"\r\n        \"992797407564824219266357628324135139027206537216e+154\"},\r\n    {0x1.fffffffffffffp+513, chars_format::scientific, 154,\r\n        \"5.\"\r\n        \"3631231719770382444033270563211737129856829063836428085864219024377506294326476219410448967711825822603039\"\r\n        \"985594815129648438532715256648270278054413074432e+154\"},\r\n    {0x1.fffffffffffffp+514, chars_format::scientific, 155,\r\n        \"1.\"\r\n        \"0726246343954076488806654112642347425971365812767285617172843804875501258865295243882089793542365164520607\"\r\n        \"9971189630259296877065430513296540556108826148864e+155\"},\r\n    {0x1.fffffffffffffp+515, chars_format::scientific, 155,\r\n        \"2.\"\r\n        \"1452492687908152977613308225284694851942731625534571234345687609751002517730590487764179587084730329041215\"\r\n        \"9942379260518593754130861026593081112217652297728e+155\"},\r\n    {0x1.fffffffffffffp+516, chars_format::scientific, 155,\r\n        \"4.\"\r\n        \"2904985375816305955226616450569389703885463251069142468691375219502005035461180975528359174169460658082431\"\r\n        \"9884758521037187508261722053186162224435304595456e+155\"},\r\n    {0x1.fffffffffffffp+517, chars_format::scientific, 155,\r\n        \"8.\"\r\n        \"5809970751632611910453232901138779407770926502138284937382750439004010070922361951056718348338921316164863\"\r\n        \"9769517042074375016523444106372324448870609190912e+155\"},\r\n    {0x1.fffffffffffffp+518, chars_format::scientific, 156,\r\n        \"1.\"\r\n        \"7161994150326522382090646580227755881554185300427656987476550087800802014184472390211343669667784263232972\"\r\n        \"79539034084148750033046888212744648897741218381824e+156\"},\r\n    {0x1.fffffffffffffp+519, chars_format::scientific, 156,\r\n        \"3.\"\r\n        \"4323988300653044764181293160455511763108370600855313974953100175601604028368944780422687339335568526465945\"\r\n        \"59078068168297500066093776425489297795482436763648e+156\"},\r\n    {0x1.fffffffffffffp+520, chars_format::scientific, 156,\r\n        \"6.\"\r\n        \"8647976601306089528362586320911023526216741201710627949906200351203208056737889560845374678671137052931891\"\r\n        \"18156136336595000132187552850978595590964873527296e+156\"},\r\n    {0x1.fffffffffffffp+521, chars_format::scientific, 157,\r\n        \"1.\"\r\n        \"3729595320261217905672517264182204705243348240342125589981240070240641611347577912169074935734227410586378\"\r\n        \"236312272673190000264375105701957191181929747054592e+157\"},\r\n    {0x1.fffffffffffffp+522, chars_format::scientific, 157,\r\n        \"2.\"\r\n        \"7459190640522435811345034528364409410486696480684251179962480140481283222695155824338149871468454821172756\"\r\n        \"472624545346380000528750211403914382363859494109184e+157\"},\r\n    {0x1.fffffffffffffp+523, chars_format::scientific, 157,\r\n        \"5.\"\r\n        \"4918381281044871622690069056728818820973392961368502359924960280962566445390311648676299742936909642345512\"\r\n        \"945249090692760001057500422807828764727718988218368e+157\"},\r\n    {0x1.fffffffffffffp+524, chars_format::scientific, 158,\r\n        \"1.\"\r\n        \"0983676256208974324538013811345763764194678592273700471984992056192513289078062329735259948587381928469102\"\r\n        \"5890498181385520002115000845615657529455437976436736e+158\"},\r\n    {0x1.fffffffffffffp+525, chars_format::scientific, 158,\r\n        \"2.\"\r\n        \"1967352512417948649076027622691527528389357184547400943969984112385026578156124659470519897174763856938205\"\r\n        \"1780996362771040004230001691231315058910875952873472e+158\"},\r\n    {0x1.fffffffffffffp+526, chars_format::scientific, 158,\r\n        \"4.\"\r\n        \"3934705024835897298152055245383055056778714369094801887939968224770053156312249318941039794349527713876410\"\r\n        \"3561992725542080008460003382462630117821751905746944e+158\"},\r\n    {0x1.fffffffffffffp+527, chars_format::scientific, 158,\r\n        \"8.\"\r\n        \"7869410049671794596304110490766110113557428738189603775879936449540106312624498637882079588699055427752820\"\r\n        \"7123985451084160016920006764925260235643503811493888e+158\"},\r\n    {0x1.fffffffffffffp+528, chars_format::scientific, 159,\r\n        \"1.\"\r\n        \"7573882009934358919260822098153222022711485747637920755175987289908021262524899727576415917739811085550564\"\r\n        \"14247970902168320033840013529850520471287007622987776e+159\"},\r\n    {0x1.fffffffffffffp+529, chars_format::scientific, 159,\r\n        \"3.\"\r\n        \"5147764019868717838521644196306444045422971495275841510351974579816042525049799455152831835479622171101128\"\r\n        \"28495941804336640067680027059701040942574015245975552e+159\"},\r\n    {0x1.fffffffffffffp+530, chars_format::scientific, 159,\r\n        \"7.\"\r\n        \"0295528039737435677043288392612888090845942990551683020703949159632085050099598910305663670959244342202256\"\r\n        \"56991883608673280135360054119402081885148030491951104e+159\"},\r\n    {0x1.fffffffffffffp+531, chars_format::scientific, 160,\r\n        \"1.\"\r\n        \"4059105607947487135408657678522577618169188598110336604140789831926417010019919782061132734191848868440451\"\r\n        \"313983767217346560270720108238804163770296060983902208e+160\"},\r\n    {0x1.fffffffffffffp+532, chars_format::scientific, 160,\r\n        \"2.\"\r\n        \"8118211215894974270817315357045155236338377196220673208281579663852834020039839564122265468383697736880902\"\r\n        \"627967534434693120541440216477608327540592121967804416e+160\"},\r\n    {0x1.fffffffffffffp+533, chars_format::scientific, 160,\r\n        \"5.\"\r\n        \"6236422431789948541634630714090310472676754392441346416563159327705668040079679128244530936767395473761805\"\r\n        \"255935068869386241082880432955216655081184243935608832e+160\"},\r\n    {0x1.fffffffffffffp+534, chars_format::scientific, 161,\r\n        \"1.\"\r\n        \"1247284486357989708326926142818062094535350878488269283312631865541133608015935825648906187353479094752361\"\r\n        \"0511870137738772482165760865910433310162368487871217664e+161\"},\r\n    {0x1.fffffffffffffp+535, chars_format::scientific, 161,\r\n        \"2.\"\r\n        \"2494568972715979416653852285636124189070701756976538566625263731082267216031871651297812374706958189504722\"\r\n        \"1023740275477544964331521731820866620324736975742435328e+161\"},\r\n    {0x1.fffffffffffffp+536, chars_format::scientific, 161,\r\n        \"4.\"\r\n        \"4989137945431958833307704571272248378141403513953077133250527462164534432063743302595624749413916379009444\"\r\n        \"2047480550955089928663043463641733240649473951484870656e+161\"},\r\n    {0x1.fffffffffffffp+537, chars_format::scientific, 161,\r\n        \"8.\"\r\n        \"9978275890863917666615409142544496756282807027906154266501054924329068864127486605191249498827832758018888\"\r\n        \"4094961101910179857326086927283466481298947902969741312e+161\"},\r\n    {0x1.fffffffffffffp+538, chars_format::scientific, 162,\r\n        \"1.\"\r\n        \"7995655178172783533323081828508899351256561405581230853300210984865813772825497321038249899765566551603777\"\r\n        \"68189922203820359714652173854566932962597895805939482624e+162\"},\r\n    {0x1.fffffffffffffp+539, chars_format::scientific, 162,\r\n        \"3.\"\r\n        \"5991310356345567066646163657017798702513122811162461706600421969731627545650994642076499799531133103207555\"\r\n        \"36379844407640719429304347709133865925195791611878965248e+162\"},\r\n    {0x1.fffffffffffffp+540, chars_format::scientific, 162,\r\n        \"7.\"\r\n        \"1982620712691134133292327314035597405026245622324923413200843939463255091301989284152999599062266206415110\"\r\n        \"72759688815281438858608695418267731850391583223757930496e+162\"},\r\n    {0x1.fffffffffffffp+541, chars_format::scientific, 163,\r\n        \"1.\"\r\n        \"4396524142538226826658465462807119481005249124464984682640168787892651018260397856830599919812453241283022\"\r\n        \"145519377630562877717217390836535463700783166447515860992e+163\"},\r\n    {0x1.fffffffffffffp+542, chars_format::scientific, 163,\r\n        \"2.\"\r\n        \"8793048285076453653316930925614238962010498248929969365280337575785302036520795713661199839624906482566044\"\r\n        \"291038755261125755434434781673070927401566332895031721984e+163\"},\r\n    {0x1.fffffffffffffp+543, chars_format::scientific, 163,\r\n        \"5.\"\r\n        \"7586096570152907306633861851228477924020996497859938730560675151570604073041591427322399679249812965132088\"\r\n        \"582077510522251510868869563346141854803132665790063443968e+163\"},\r\n    {0x1.fffffffffffffp+544, chars_format::scientific, 164,\r\n        \"1.\"\r\n        \"1517219314030581461326772370245695584804199299571987746112135030314120814608318285464479935849962593026417\"\r\n        \"7164155021044503021737739126692283709606265331580126887936e+164\"},\r\n    {0x1.fffffffffffffp+545, chars_format::scientific, 164,\r\n        \"2.\"\r\n        \"3034438628061162922653544740491391169608398599143975492224270060628241629216636570928959871699925186052835\"\r\n        \"4328310042089006043475478253384567419212530663160253775872e+164\"},\r\n    {0x1.fffffffffffffp+546, chars_format::scientific, 164,\r\n        \"4.\"\r\n        \"6068877256122325845307089480982782339216797198287950984448540121256483258433273141857919743399850372105670\"\r\n        \"8656620084178012086950956506769134838425061326320507551744e+164\"},\r\n    {0x1.fffffffffffffp+547, chars_format::scientific, 164,\r\n        \"9.\"\r\n        \"2137754512244651690614178961965564678433594396575901968897080242512966516866546283715839486799700744211341\"\r\n        \"7313240168356024173901913013538269676850122652641015103488e+164\"},\r\n    {0x1.fffffffffffffp+548, chars_format::scientific, 165,\r\n        \"1.\"\r\n        \"8427550902448930338122835792393112935686718879315180393779416048502593303373309256743167897359940148842268\"\r\n        \"34626480336712048347803826027076539353700245305282030206976e+165\"},\r\n    {0x1.fffffffffffffp+549, chars_format::scientific, 165,\r\n        \"3.\"\r\n        \"6855101804897860676245671584786225871373437758630360787558832097005186606746618513486335794719880297684536\"\r\n        \"69252960673424096695607652054153078707400490610564060413952e+165\"},\r\n    {0x1.fffffffffffffp+550, chars_format::scientific, 165,\r\n        \"7.\"\r\n        \"3710203609795721352491343169572451742746875517260721575117664194010373213493237026972671589439760595369073\"\r\n        \"38505921346848193391215304108306157414800981221128120827904e+165\"},\r\n    {0x1.fffffffffffffp+551, chars_format::scientific, 166,\r\n        \"1.\"\r\n        \"4742040721959144270498268633914490348549375103452144315023532838802074642698647405394534317887952119073814\"\r\n        \"677011842693696386782430608216612314829601962442256241655808e+166\"},\r\n    {0x1.fffffffffffffp+552, chars_format::scientific, 166,\r\n        \"2.\"\r\n        \"9484081443918288540996537267828980697098750206904288630047065677604149285397294810789068635775904238147629\"\r\n        \"354023685387392773564861216433224629659203924884512483311616e+166\"},\r\n    {0x1.fffffffffffffp+553, chars_format::scientific, 166,\r\n        \"5.\"\r\n        \"8968162887836577081993074535657961394197500413808577260094131355208298570794589621578137271551808476295258\"\r\n        \"708047370774785547129722432866449259318407849769024966623232e+166\"},\r\n    {0x1.fffffffffffffp+554, chars_format::scientific, 167,\r\n        \"1.\"\r\n        \"1793632577567315416398614907131592278839500082761715452018826271041659714158917924315627454310361695259051\"\r\n        \"7416094741549571094259444865732898518636815699538049933246464e+167\"},\r\n    {0x1.fffffffffffffp+555, chars_format::scientific, 167,\r\n        \"2.\"\r\n        \"3587265155134630832797229814263184557679000165523430904037652542083319428317835848631254908620723390518103\"\r\n        \"4832189483099142188518889731465797037273631399076099866492928e+167\"},\r\n    {0x1.fffffffffffffp+556, chars_format::scientific, 167,\r\n        \"4.\"\r\n        \"7174530310269261665594459628526369115358000331046861808075305084166638856635671697262509817241446781036206\"\r\n        \"9664378966198284377037779462931594074547262798152199732985856e+167\"},\r\n    {0x1.fffffffffffffp+557, chars_format::scientific, 167,\r\n        \"9.\"\r\n        \"4349060620538523331188919257052738230716000662093723616150610168333277713271343394525019634482893562072413\"\r\n        \"9328757932396568754075558925863188149094525596304399465971712e+167\"},\r\n    {0x1.fffffffffffffp+558, chars_format::scientific, 168,\r\n        \"1.\"\r\n        \"8869812124107704666237783851410547646143200132418744723230122033666655542654268678905003926896578712414482\"\r\n        \"78657515864793137508151117851726376298189051192608798931943424e+168\"},\r\n    {0x1.fffffffffffffp+559, chars_format::scientific, 168,\r\n        \"3.\"\r\n        \"7739624248215409332475567702821095292286400264837489446460244067333311085308537357810007853793157424828965\"\r\n        \"57315031729586275016302235703452752596378102385217597863886848e+168\"},\r\n    {0x1.fffffffffffffp+560, chars_format::scientific, 168,\r\n        \"7.\"\r\n        \"5479248496430818664951135405642190584572800529674978892920488134666622170617074715620015707586314849657931\"\r\n        \"14630063459172550032604471406905505192756204770435195727773696e+168\"},\r\n    {0x1.fffffffffffffp+561, chars_format::scientific, 169,\r\n        \"1.\"\r\n        \"5095849699286163732990227081128438116914560105934995778584097626933324434123414943124003141517262969931586\"\r\n        \"229260126918345100065208942813811010385512409540870391455547392e+169\"},\r\n    {0x1.fffffffffffffp+562, chars_format::scientific, 169,\r\n        \"3.\"\r\n        \"0191699398572327465980454162256876233829120211869991557168195253866648868246829886248006283034525939863172\"\r\n        \"458520253836690200130417885627622020771024819081740782911094784e+169\"},\r\n    {0x1.fffffffffffffp+563, chars_format::scientific, 169,\r\n        \"6.\"\r\n        \"0383398797144654931960908324513752467658240423739983114336390507733297736493659772496012566069051879726344\"\r\n        \"917040507673380400260835771255244041542049638163481565822189568e+169\"},\r\n    {0x1.fffffffffffffp+564, chars_format::scientific, 170,\r\n        \"1.\"\r\n        \"2076679759428930986392181664902750493531648084747996622867278101546659547298731954499202513213810375945268\"\r\n        \"9834081015346760800521671542510488083084099276326963131644379136e+170\"},\r\n    {0x1.fffffffffffffp+565, chars_format::scientific, 170,\r\n        \"2.\"\r\n        \"4153359518857861972784363329805500987063296169495993245734556203093319094597463908998405026427620751890537\"\r\n        \"9668162030693521601043343085020976166168198552653926263288758272e+170\"},\r\n    {0x1.fffffffffffffp+566, chars_format::scientific, 170,\r\n        \"4.\"\r\n        \"8306719037715723945568726659611001974126592338991986491469112406186638189194927817996810052855241503781075\"\r\n        \"9336324061387043202086686170041952332336397105307852526577516544e+170\"},\r\n    {0x1.fffffffffffffp+567, chars_format::scientific, 170,\r\n        \"9.\"\r\n        \"6613438075431447891137453319222003948253184677983972982938224812373276378389855635993620105710483007562151\"\r\n        \"8672648122774086404173372340083904664672794210615705053155033088e+170\"},\r\n    {0x1.fffffffffffffp+568, chars_format::scientific, 171,\r\n        \"1.\"\r\n        \"9322687615086289578227490663844400789650636935596794596587644962474655275677971127198724021142096601512430\"\r\n        \"37345296245548172808346744680167809329345588421231410106310066176e+171\"},\r\n    {0x1.fffffffffffffp+569, chars_format::scientific, 171,\r\n        \"3.\"\r\n        \"8645375230172579156454981327688801579301273871193589193175289924949310551355942254397448042284193203024860\"\r\n        \"74690592491096345616693489360335618658691176842462820212620132352e+171\"},\r\n    {0x1.fffffffffffffp+570, chars_format::scientific, 171,\r\n        \"7.\"\r\n        \"7290750460345158312909962655377603158602547742387178386350579849898621102711884508794896084568386406049721\"\r\n        \"49381184982192691233386978720671237317382353684925640425240264704e+171\"},\r\n    {0x1.fffffffffffffp+571, chars_format::scientific, 172,\r\n        \"1.\"\r\n        \"5458150092069031662581992531075520631720509548477435677270115969979724220542376901758979216913677281209944\"\r\n        \"298762369964385382466773957441342474634764707369851280850480529408e+172\"},\r\n    {0x1.fffffffffffffp+572, chars_format::scientific, 172,\r\n        \"3.\"\r\n        \"0916300184138063325163985062151041263441019096954871354540231939959448441084753803517958433827354562419888\"\r\n        \"597524739928770764933547914882684949269529414739702561700961058816e+172\"},\r\n    {0x1.fffffffffffffp+573, chars_format::scientific, 172,\r\n        \"6.\"\r\n        \"1832600368276126650327970124302082526882038193909742709080463879918896882169507607035916867654709124839777\"\r\n        \"195049479857541529867095829765369898539058829479405123401922117632e+172\"},\r\n    {0x1.fffffffffffffp+574, chars_format::scientific, 173,\r\n        \"1.\"\r\n        \"2366520073655225330065594024860416505376407638781948541816092775983779376433901521407183373530941824967955\"\r\n        \"4390098959715083059734191659530739797078117658958810246803844235264e+173\"},\r\n    {0x1.fffffffffffffp+575, chars_format::scientific, 173,\r\n        \"2.\"\r\n        \"4733040147310450660131188049720833010752815277563897083632185551967558752867803042814366747061883649935910\"\r\n        \"8780197919430166119468383319061479594156235317917620493607688470528e+173\"},\r\n    {0x1.fffffffffffffp+576, chars_format::scientific, 173,\r\n        \"4.\"\r\n        \"9466080294620901320262376099441666021505630555127794167264371103935117505735606085628733494123767299871821\"\r\n        \"7560395838860332238936766638122959188312470635835240987215376941056e+173\"},\r\n    {0x1.fffffffffffffp+577, chars_format::scientific, 173,\r\n        \"9.\"\r\n        \"8932160589241802640524752198883332043011261110255588334528742207870235011471212171257466988247534599743643\"\r\n        \"5120791677720664477873533276245918376624941271670481974430753882112e+173\"},\r\n    {0x1.fffffffffffffp+578, chars_format::scientific, 174,\r\n        \"1.\"\r\n        \"9786432117848360528104950439776666408602252222051117666905748441574047002294242434251493397649506919948728\"\r\n        \"70241583355441328955747066552491836753249882543340963948861507764224e+174\"},\r\n    {0x1.fffffffffffffp+579, chars_format::scientific, 174,\r\n        \"3.\"\r\n        \"9572864235696721056209900879553332817204504444102235333811496883148094004588484868502986795299013839897457\"\r\n        \"40483166710882657911494133104983673506499765086681927897723015528448e+174\"},\r\n    {0x1.fffffffffffffp+580, chars_format::scientific, 174,\r\n        \"7.\"\r\n        \"9145728471393442112419801759106665634409008888204470667622993766296188009176969737005973590598027679794914\"\r\n        \"80966333421765315822988266209967347012999530173363855795446031056896e+174\"},\r\n    {0x1.fffffffffffffp+581, chars_format::scientific, 175,\r\n        \"1.\"\r\n        \"5829145694278688422483960351821333126881801777640894133524598753259237601835393947401194718119605535958982\"\r\n        \"961932666843530631645976532419934694025999060346727711590892062113792e+175\"},\r\n    {0x1.fffffffffffffp+582, chars_format::scientific, 175,\r\n        \"3.\"\r\n        \"1658291388557376844967920703642666253763603555281788267049197506518475203670787894802389436239211071917965\"\r\n        \"923865333687061263291953064839869388051998120693455423181784124227584e+175\"},\r\n    {0x1.fffffffffffffp+583, chars_format::scientific, 175,\r\n        \"6.\"\r\n        \"3316582777114753689935841407285332507527207110563576534098395013036950407341575789604778872478422143835931\"\r\n        \"847730667374122526583906129679738776103996241386910846363568248455168e+175\"},\r\n    {0x1.fffffffffffffp+584, chars_format::scientific, 176,\r\n        \"1.\"\r\n        \"2663316555422950737987168281457066501505441422112715306819679002607390081468315157920955774495684428767186\"\r\n        \"3695461334748245053167812259359477552207992482773821692727136496910336e+176\"},\r\n    {0x1.fffffffffffffp+585, chars_format::scientific, 176,\r\n        \"2.\"\r\n        \"5326633110845901475974336562914133003010882844225430613639358005214780162936630315841911548991368857534372\"\r\n        \"7390922669496490106335624518718955104415984965547643385454272993820672e+176\"},\r\n    {0x1.fffffffffffffp+586, chars_format::scientific, 176,\r\n        \"5.\"\r\n        \"0653266221691802951948673125828266006021765688450861227278716010429560325873260631683823097982737715068745\"\r\n        \"4781845338992980212671249037437910208831969931095286770908545987641344e+176\"},\r\n    {0x1.fffffffffffffp+587, chars_format::scientific, 177,\r\n        \"1.\"\r\n        \"0130653244338360590389734625165653201204353137690172245455743202085912065174652126336764619596547543013749\"\r\n        \"09563690677985960425342498074875820417663939862190573541817091975282688e+177\"},\r\n    {0x1.fffffffffffffp+588, chars_format::scientific, 177,\r\n        \"2.\"\r\n        \"0261306488676721180779469250331306402408706275380344490911486404171824130349304252673529239193095086027498\"\r\n        \"19127381355971920850684996149751640835327879724381147083634183950565376e+177\"},\r\n    {0x1.fffffffffffffp+589, chars_format::scientific, 177,\r\n        \"4.\"\r\n        \"0522612977353442361558938500662612804817412550760688981822972808343648260698608505347058478386190172054996\"\r\n        \"38254762711943841701369992299503281670655759448762294167268367901130752e+177\"},\r\n    {0x1.fffffffffffffp+590, chars_format::scientific, 177,\r\n        \"8.\"\r\n        \"1045225954706884723117877001325225609634825101521377963645945616687296521397217010694116956772380344109992\"\r\n        \"76509525423887683402739984599006563341311518897524588334536735802261504e+177\"},\r\n    {0x1.fffffffffffffp+591, chars_format::scientific, 178,\r\n        \"1.\"\r\n        \"6209045190941376944623575400265045121926965020304275592729189123337459304279443402138823391354476068821998\"\r\n        \"553019050847775366805479969198013126682623037795049176669073471604523008e+178\"},\r\n    {0x1.fffffffffffffp+592, chars_format::scientific, 178,\r\n        \"3.\"\r\n        \"2418090381882753889247150800530090243853930040608551185458378246674918608558886804277646782708952137643997\"\r\n        \"106038101695550733610959938396026253365246075590098353338146943209046016e+178\"},\r\n    {0x1.fffffffffffffp+593, chars_format::scientific, 178,\r\n        \"6.\"\r\n        \"4836180763765507778494301601060180487707860081217102370916756493349837217117773608555293565417904275287994\"\r\n        \"212076203391101467221919876792052506730492151180196706676293886418092032e+178\"},\r\n    {0x1.fffffffffffffp+594, chars_format::scientific, 179,\r\n        \"1.\"\r\n        \"2967236152753101555698860320212036097541572016243420474183351298669967443423554721711058713083580855057598\"\r\n        \"8424152406782202934443839753584105013460984302360393413352587772836184064e+179\"},\r\n    {0x1.fffffffffffffp+595, chars_format::scientific, 179,\r\n        \"2.\"\r\n        \"5934472305506203111397720640424072195083144032486840948366702597339934886847109443422117426167161710115197\"\r\n        \"6848304813564405868887679507168210026921968604720786826705175545672368128e+179\"},\r\n    {0x1.fffffffffffffp+596, chars_format::scientific, 179,\r\n        \"5.\"\r\n        \"1868944611012406222795441280848144390166288064973681896733405194679869773694218886844234852334323420230395\"\r\n        \"3696609627128811737775359014336420053843937209441573653410351091344736256e+179\"},\r\n    {0x1.fffffffffffffp+597, chars_format::scientific, 180,\r\n        \"1.\"\r\n        \"0373788922202481244559088256169628878033257612994736379346681038935973954738843777368846970466864684046079\"\r\n        \"07393219254257623475550718028672840107687874418883147306820702182689472512e+180\"},\r\n    {0x1.fffffffffffffp+598, chars_format::scientific, 180,\r\n        \"2.\"\r\n        \"0747577844404962489118176512339257756066515225989472758693362077871947909477687554737693940933729368092158\"\r\n        \"14786438508515246951101436057345680215375748837766294613641404365378945024e+180\"},\r\n    {0x1.fffffffffffffp+599, chars_format::scientific, 180,\r\n        \"4.\"\r\n        \"1495155688809924978236353024678515512133030451978945517386724155743895818955375109475387881867458736184316\"\r\n        \"29572877017030493902202872114691360430751497675532589227282808730757890048e+180\"},\r\n    {0x1.fffffffffffffp+600, chars_format::scientific, 180,\r\n        \"8.\"\r\n        \"2990311377619849956472706049357031024266060903957891034773448311487791637910750218950775763734917472368632\"\r\n        \"59145754034060987804405744229382720861502995351065178454565617461515780096e+180\"},\r\n    {0x1.fffffffffffffp+601, chars_format::scientific, 181,\r\n        \"1.\"\r\n        \"6598062275523969991294541209871406204853212180791578206954689662297558327582150043790155152746983494473726\"\r\n        \"518291508068121975608811488458765441723005990702130356909131234923031560192e+181\"},\r\n    {0x1.fffffffffffffp+602, chars_format::scientific, 181,\r\n        \"3.\"\r\n        \"3196124551047939982589082419742812409706424361583156413909379324595116655164300087580310305493966988947453\"\r\n        \"036583016136243951217622976917530883446011981404260713818262469846063120384e+181\"},\r\n    {0x1.fffffffffffffp+603, chars_format::scientific, 181,\r\n        \"6.\"\r\n        \"6392249102095879965178164839485624819412848723166312827818758649190233310328600175160620610987933977894906\"\r\n        \"073166032272487902435245953835061766892023962808521427636524939692126240768e+181\"},\r\n    {0x1.fffffffffffffp+604, chars_format::scientific, 182,\r\n        \"1.\"\r\n        \"3278449820419175993035632967897124963882569744633262565563751729838046662065720035032124122197586795578981\"\r\n        \"2146332064544975804870491907670123533784047925617042855273049879384252481536e+182\"},\r\n    {0x1.fffffffffffffp+605, chars_format::scientific, 182,\r\n        \"2.\"\r\n        \"6556899640838351986071265935794249927765139489266525131127503459676093324131440070064248244395173591157962\"\r\n        \"4292664129089951609740983815340247067568095851234085710546099758768504963072e+182\"},\r\n    {0x1.fffffffffffffp+606, chars_format::scientific, 182,\r\n        \"5.\"\r\n        \"3113799281676703972142531871588499855530278978533050262255006919352186648262880140128496488790347182315924\"\r\n        \"8585328258179903219481967630680494135136191702468171421092199517537009926144e+182\"},\r\n    {0x1.fffffffffffffp+607, chars_format::scientific, 183,\r\n        \"1.\"\r\n        \"0622759856335340794428506374317699971106055795706610052451001383870437329652576028025699297758069436463184\"\r\n        \"97170656516359806438963935261360988270272383404936342842184399035074019852288e+183\"},\r\n    {0x1.fffffffffffffp+608, chars_format::scientific, 183,\r\n        \"2.\"\r\n        \"1245519712670681588857012748635399942212111591413220104902002767740874659305152056051398595516138872926369\"\r\n        \"94341313032719612877927870522721976540544766809872685684368798070148039704576e+183\"},\r\n    {0x1.fffffffffffffp+609, chars_format::scientific, 183,\r\n        \"4.\"\r\n        \"2491039425341363177714025497270799884424223182826440209804005535481749318610304112102797191032277745852739\"\r\n        \"88682626065439225755855741045443953081089533619745371368737596140296079409152e+183\"},\r\n    {0x1.fffffffffffffp+610, chars_format::scientific, 183,\r\n        \"8.\"\r\n        \"4982078850682726355428050994541599768848446365652880419608011070963498637220608224205594382064555491705479\"\r\n        \"77365252130878451511711482090887906162179067239490742737475192280592158818304e+183\"},\r\n    {0x1.fffffffffffffp+611, chars_format::scientific, 184,\r\n        \"1.\"\r\n        \"6996415770136545271085610198908319953769689273130576083921602214192699727444121644841118876412911098341095\"\r\n        \"954730504261756903023422964181775812324358134478981485474950384561184317636608e+184\"},\r\n    {0x1.fffffffffffffp+612, chars_format::scientific, 184,\r\n        \"3.\"\r\n        \"3992831540273090542171220397816639907539378546261152167843204428385399454888243289682237752825822196682191\"\r\n        \"909461008523513806046845928363551624648716268957962970949900769122368635273216e+184\"},\r\n    {0x1.fffffffffffffp+613, chars_format::scientific, 184,\r\n        \"6.\"\r\n        \"7985663080546181084342440795633279815078757092522304335686408856770798909776486579364475505651644393364383\"\r\n        \"818922017047027612093691856727103249297432537915925941899801538244737270546432e+184\"},\r\n    {0x1.fffffffffffffp+614, chars_format::scientific, 185,\r\n        \"1.\"\r\n        \"3597132616109236216868488159126655963015751418504460867137281771354159781955297315872895101130328878672876\"\r\n        \"7637844034094055224187383713454206498594865075831851883799603076489474541092864e+185\"},\r\n    {0x1.fffffffffffffp+615, chars_format::scientific, 185,\r\n        \"2.\"\r\n        \"7194265232218472433736976318253311926031502837008921734274563542708319563910594631745790202260657757345753\"\r\n        \"5275688068188110448374767426908412997189730151663703767599206152978949082185728e+185\"},\r\n    {0x1.fffffffffffffp+616, chars_format::scientific, 185,\r\n        \"5.\"\r\n        \"4388530464436944867473952636506623852063005674017843468549127085416639127821189263491580404521315514691507\"\r\n        \"0551376136376220896749534853816825994379460303327407535198412305957898164371456e+185\"},\r\n    {0x1.fffffffffffffp+617, chars_format::scientific, 186,\r\n        \"1.\"\r\n        \"0877706092887388973494790527301324770412601134803568693709825417083327825564237852698316080904263102938301\"\r\n        \"41102752272752441793499069707633651988758920606654815070396824611915796328742912e+186\"},\r\n    {0x1.fffffffffffffp+618, chars_format::scientific, 186,\r\n        \"2.\"\r\n        \"1755412185774777946989581054602649540825202269607137387419650834166655651128475705396632161808526205876602\"\r\n        \"82205504545504883586998139415267303977517841213309630140793649223831592657485824e+186\"},\r\n    {0x1.fffffffffffffp+619, chars_format::scientific, 186,\r\n        \"4.\"\r\n        \"3510824371549555893979162109205299081650404539214274774839301668333311302256951410793264323617052411753205\"\r\n        \"64411009091009767173996278830534607955035682426619260281587298447663185314971648e+186\"},\r\n    {0x1.fffffffffffffp+620, chars_format::scientific, 186,\r\n        \"8.\"\r\n        \"7021648743099111787958324218410598163300809078428549549678603336666622604513902821586528647234104823506411\"\r\n        \"28822018182019534347992557661069215910071364853238520563174596895326370629943296e+186\"},\r\n    {0x1.fffffffffffffp+621, chars_format::scientific, 187,\r\n        \"1.\"\r\n        \"7404329748619822357591664843682119632660161815685709909935720667333324520902780564317305729446820964701282\"\r\n        \"257644036364039068695985115322138431820142729706477041126349193790652741259886592e+187\"},\r\n    {0x1.fffffffffffffp+622, chars_format::scientific, 187,\r\n        \"3.\"\r\n        \"4808659497239644715183329687364239265320323631371419819871441334666649041805561128634611458893641929402564\"\r\n        \"515288072728078137391970230644276863640285459412954082252698387581305482519773184e+187\"},\r\n    {0x1.fffffffffffffp+623, chars_format::scientific, 187,\r\n        \"6.\"\r\n        \"9617318994479289430366659374728478530640647262742839639742882669333298083611122257269222917787283858805129\"\r\n        \"030576145456156274783940461288553727280570918825908164505396775162610965039546368e+187\"},\r\n    {0x1.fffffffffffffp+624, chars_format::scientific, 188,\r\n        \"1.\"\r\n        \"3923463798895857886073331874945695706128129452548567927948576533866659616722224451453844583557456771761025\"\r\n        \"8061152290912312549567880922577107454561141837651816329010793550325221930079092736e+188\"},\r\n    {0x1.fffffffffffffp+625, chars_format::scientific, 188,\r\n        \"2.\"\r\n        \"7846927597791715772146663749891391412256258905097135855897153067733319233444448902907689167114913543522051\"\r\n        \"6122304581824625099135761845154214909122283675303632658021587100650443860158185472e+188\"},\r\n    {0x1.fffffffffffffp+626, chars_format::scientific, 188,\r\n        \"5.\"\r\n        \"5693855195583431544293327499782782824512517810194271711794306135466638466888897805815378334229827087044103\"\r\n        \"2244609163649250198271523690308429818244567350607265316043174201300887720316370944e+188\"},\r\n    {0x1.fffffffffffffp+627, chars_format::scientific, 189,\r\n        \"1.\"\r\n        \"1138771039116686308858665499956556564902503562038854342358861227093327693377779561163075666845965417408820\"\r\n        \"64489218327298500396543047380616859636489134701214530632086348402601775440632741888e+189\"},\r\n    {0x1.fffffffffffffp+628, chars_format::scientific, 189,\r\n        \"2.\"\r\n        \"2277542078233372617717330999913113129805007124077708684717722454186655386755559122326151333691930834817641\"\r\n        \"28978436654597000793086094761233719272978269402429061264172696805203550881265483776e+189\"},\r\n    {0x1.fffffffffffffp+629, chars_format::scientific, 189,\r\n        \"4.\"\r\n        \"4555084156466745235434661999826226259610014248155417369435444908373310773511118244652302667383861669635282\"\r\n        \"57956873309194001586172189522467438545956538804858122528345393610407101762530967552e+189\"},\r\n    {0x1.fffffffffffffp+630, chars_format::scientific, 189,\r\n        \"8.\"\r\n        \"9110168312933490470869323999652452519220028496310834738870889816746621547022236489304605334767723339270565\"\r\n        \"15913746618388003172344379044934877091913077609716245056690787220814203525061935104e+189\"},\r\n    {0x1.fffffffffffffp+631, chars_format::scientific, 190,\r\n        \"1.\"\r\n        \"7822033662586698094173864799930490503844005699262166947774177963349324309404447297860921066953544667854113\"\r\n        \"031827493236776006344688758089869754183826155219432490113381574441628407050123870208e+190\"},\r\n    {0x1.fffffffffffffp+632, chars_format::scientific, 190,\r\n        \"3.\"\r\n        \"5644067325173396188347729599860981007688011398524333895548355926698648618808894595721842133907089335708226\"\r\n        \"063654986473552012689377516179739508367652310438864980226763148883256814100247740416e+190\"},\r\n    {0x1.fffffffffffffp+633, chars_format::scientific, 190,\r\n        \"7.\"\r\n        \"1288134650346792376695459199721962015376022797048667791096711853397297237617789191443684267814178671416452\"\r\n        \"127309972947104025378755032359479016735304620877729960453526297766513628200495480832e+190\"},\r\n    {0x1.fffffffffffffp+634, chars_format::scientific, 191,\r\n        \"1.\"\r\n        \"4257626930069358475339091839944392403075204559409733558219342370679459447523557838288736853562835734283290\"\r\n        \"4254619945894208050757510064718958033470609241755459920907052595533027256400990961664e+191\"},\r\n    {0x1.fffffffffffffp+635, chars_format::scientific, 191,\r\n        \"2.\"\r\n        \"8515253860138716950678183679888784806150409118819467116438684741358918895047115676577473707125671468566580\"\r\n        \"8509239891788416101515020129437916066941218483510919841814105191066054512801981923328e+191\"},\r\n    {0x1.fffffffffffffp+636, chars_format::scientific, 191,\r\n        \"5.\"\r\n        \"7030507720277433901356367359777569612300818237638934232877369482717837790094231353154947414251342937133161\"\r\n        \"7018479783576832203030040258875832133882436967021839683628210382132109025603963846656e+191\"},\r\n    {0x1.fffffffffffffp+637, chars_format::scientific, 192,\r\n        \"1.\"\r\n        \"1406101544055486780271273471955513922460163647527786846575473896543567558018846270630989482850268587426632\"\r\n        \"34036959567153664406060080517751664267764873934043679367256420764264218051207927693312e+192\"},\r\n    {0x1.fffffffffffffp+638, chars_format::scientific, 192,\r\n        \"2.\"\r\n        \"2812203088110973560542546943911027844920327295055573693150947793087135116037692541261978965700537174853264\"\r\n        \"68073919134307328812120161035503328535529747868087358734512841528528436102415855386624e+192\"},\r\n    {0x1.fffffffffffffp+639, chars_format::scientific, 192,\r\n        \"4.\"\r\n        \"5624406176221947121085093887822055689840654590111147386301895586174270232075385082523957931401074349706529\"\r\n        \"36147838268614657624240322071006657071059495736174717469025683057056872204831710773248e+192\"},\r\n    {0x1.fffffffffffffp+640, chars_format::scientific, 192,\r\n        \"9.\"\r\n        \"1248812352443894242170187775644111379681309180222294772603791172348540464150770165047915862802148699413058\"\r\n        \"72295676537229315248480644142013314142118991472349434938051366114113744409663421546496e+192\"},\r\n    {0x1.fffffffffffffp+641, chars_format::scientific, 193,\r\n        \"1.\"\r\n        \"8249762470488778848434037555128822275936261836044458954520758234469708092830154033009583172560429739882611\"\r\n        \"744591353074458630496961288284026628284237982944698869876102732228227488819326843092992e+193\"},\r\n    {0x1.fffffffffffffp+642, chars_format::scientific, 193,\r\n        \"3.\"\r\n        \"6499524940977557696868075110257644551872523672088917909041516468939416185660308066019166345120859479765223\"\r\n        \"489182706148917260993922576568053256568475965889397739752205464456454977638653686185984e+193\"},\r\n    {0x1.fffffffffffffp+643, chars_format::scientific, 193,\r\n        \"7.\"\r\n        \"2999049881955115393736150220515289103745047344177835818083032937878832371320616132038332690241718959530446\"\r\n        \"978365412297834521987845153136106513136951931778795479504410928912909955277307372371968e+193\"},\r\n    {0x1.fffffffffffffp+644, chars_format::scientific, 194,\r\n        \"1.\"\r\n        \"4599809976391023078747230044103057820749009468835567163616606587575766474264123226407666538048343791906089\"\r\n        \"3956730824595669043975690306272213026273903863557590959008821857825819910554614744743936e+194\"},\r\n    {0x1.fffffffffffffp+645, chars_format::scientific, 194,\r\n        \"2.\"\r\n        \"9199619952782046157494460088206115641498018937671134327233213175151532948528246452815333076096687583812178\"\r\n        \"7913461649191338087951380612544426052547807727115181918017643715651639821109229489487872e+194\"},\r\n    {0x1.fffffffffffffp+646, chars_format::scientific, 194,\r\n        \"5.\"\r\n        \"8399239905564092314988920176412231282996037875342268654466426350303065897056492905630666152193375167624357\"\r\n        \"5826923298382676175902761225088852105095615454230363836035287431303279642218458978975744e+194\"},\r\n    {0x1.fffffffffffffp+647, chars_format::scientific, 195,\r\n        \"1.\"\r\n        \"1679847981112818462997784035282446256599207575068453730893285270060613179411298581126133230438675033524871\"\r\n        \"51653846596765352351805522450177704210191230908460727672070574862606559284436917957951488e+195\"},\r\n    {0x1.fffffffffffffp+648, chars_format::scientific, 195,\r\n        \"2.\"\r\n        \"3359695962225636925995568070564892513198415150136907461786570540121226358822597162252266460877350067049743\"\r\n        \"03307693193530704703611044900355408420382461816921455344141149725213118568873835915902976e+195\"},\r\n    {0x1.fffffffffffffp+649, chars_format::scientific, 195,\r\n        \"4.\"\r\n        \"6719391924451273851991136141129785026396830300273814923573141080242452717645194324504532921754700134099486\"\r\n        \"06615386387061409407222089800710816840764923633842910688282299450426237137747671831805952e+195\"},\r\n    {0x1.fffffffffffffp+650, chars_format::scientific, 195,\r\n        \"9.\"\r\n        \"3438783848902547703982272282259570052793660600547629847146282160484905435290388649009065843509400268198972\"\r\n        \"13230772774122818814444179601421633681529847267685821376564598900852474275495343663611904e+195\"},\r\n    {0x1.fffffffffffffp+651, chars_format::scientific, 196,\r\n        \"1.\"\r\n        \"8687756769780509540796454456451914010558732120109525969429256432096981087058077729801813168701880053639794\"\r\n        \"426461545548245637628888359202843267363059694535371642753129197801704948550990687327223808e+196\"},\r\n    {0x1.fffffffffffffp+652, chars_format::scientific, 196,\r\n        \"3.\"\r\n        \"7375513539561019081592908912903828021117464240219051938858512864193962174116155459603626337403760107279588\"\r\n        \"852923091096491275257776718405686534726119389070743285506258395603409897101981374654447616e+196\"},\r\n    {0x1.fffffffffffffp+653, chars_format::scientific, 196,\r\n        \"7.\"\r\n        \"4751027079122038163185817825807656042234928480438103877717025728387924348232310919207252674807520214559177\"\r\n        \"705846182192982550515553436811373069452238778141486571012516791206819794203962749308895232e+196\"},\r\n    {0x1.fffffffffffffp+654, chars_format::scientific, 197,\r\n        \"1.\"\r\n        \"4950205415824407632637163565161531208446985696087620775543405145677584869646462183841450534961504042911835\"\r\n        \"5411692364385965101031106873622746138904477556282973142025033582413639588407925498617790464e+197\"},\r\n    {0x1.fffffffffffffp+655, chars_format::scientific, 197,\r\n        \"2.\"\r\n        \"9900410831648815265274327130323062416893971392175241551086810291355169739292924367682901069923008085823671\"\r\n        \"0823384728771930202062213747245492277808955112565946284050067164827279176815850997235580928e+197\"},\r\n    {0x1.fffffffffffffp+656, chars_format::scientific, 197,\r\n        \"5.\"\r\n        \"9800821663297630530548654260646124833787942784350483102173620582710339478585848735365802139846016171647342\"\r\n        \"1646769457543860404124427494490984555617910225131892568100134329654558353631701994471161856e+197\"},\r\n    {0x1.fffffffffffffp+657, chars_format::scientific, 198,\r\n        \"1.\"\r\n        \"1960164332659526106109730852129224966757588556870096620434724116542067895717169747073160427969203234329468\"\r\n        \"43293538915087720808248854988981969111235820450263785136200268659309116707263403988942323712e+198\"},\r\n    {0x1.fffffffffffffp+658, chars_format::scientific, 198,\r\n        \"2.\"\r\n        \"3920328665319052212219461704258449933515177113740193240869448233084135791434339494146320855938406468658936\"\r\n        \"86587077830175441616497709977963938222471640900527570272400537318618233414526807977884647424e+198\"},\r\n    {0x1.fffffffffffffp+659, chars_format::scientific, 198,\r\n        \"4.\"\r\n        \"7840657330638104424438923408516899867030354227480386481738896466168271582868678988292641711876812937317873\"\r\n        \"73174155660350883232995419955927876444943281801055140544801074637236466829053615955769294848e+198\"},\r\n    {0x1.fffffffffffffp+660, chars_format::scientific, 198,\r\n        \"9.\"\r\n        \"5681314661276208848877846817033799734060708454960772963477792932336543165737357976585283423753625874635747\"\r\n        \"46348311320701766465990839911855752889886563602110281089602149274472933658107231911538589696e+198\"},\r\n    {0x1.fffffffffffffp+661, chars_format::scientific, 199,\r\n        \"1.\"\r\n        \"9136262932255241769775569363406759946812141690992154592695558586467308633147471595317056684750725174927149\"\r\n        \"492696622641403532931981679823711505779773127204220562179204298548945867316214463823077179392e+199\"},\r\n    {0x1.fffffffffffffp+662, chars_format::scientific, 199,\r\n        \"3.\"\r\n        \"8272525864510483539551138726813519893624283381984309185391117172934617266294943190634113369501450349854298\"\r\n        \"985393245282807065863963359647423011559546254408441124358408597097891734632428927646154358784e+199\"},\r\n    {0x1.fffffffffffffp+663, chars_format::scientific, 199,\r\n        \"7.\"\r\n        \"6545051729020967079102277453627039787248566763968618370782234345869234532589886381268226739002900699708597\"\r\n        \"970786490565614131727926719294846023119092508816882248716817194195783469264857855292308717568e+199\"},\r\n    {0x1.fffffffffffffp+664, chars_format::scientific, 200,\r\n        \"1.\"\r\n        \"5309010345804193415820455490725407957449713352793723674156446869173846906517977276253645347800580139941719\"\r\n        \"5941572981131228263455853438589692046238185017633764497433634388391566938529715710584617435136e+200\"},\r\n    {0x1.fffffffffffffp+665, chars_format::scientific, 200,\r\n        \"3.\"\r\n        \"0618020691608386831640910981450815914899426705587447348312893738347693813035954552507290695601160279883439\"\r\n        \"1883145962262456526911706877179384092476370035267528994867268776783133877059431421169234870272e+200\"},\r\n    {0x1.fffffffffffffp+666, chars_format::scientific, 200,\r\n        \"6.\"\r\n        \"1236041383216773663281821962901631829798853411174894696625787476695387626071909105014581391202320559766878\"\r\n        \"3766291924524913053823413754358768184952740070535057989734537553566267754118862842338469740544e+200\"},\r\n    {0x1.fffffffffffffp+667, chars_format::scientific, 201,\r\n        \"1.\"\r\n        \"2247208276643354732656364392580326365959770682234978939325157495339077525214381821002916278240464111953375\"\r\n        \"67532583849049826107646827508717536369905480141070115979469075107132535508237725684676939481088e+201\"},\r\n    {0x1.fffffffffffffp+668, chars_format::scientific, 201,\r\n        \"2.\"\r\n        \"4494416553286709465312728785160652731919541364469957878650314990678155050428763642005832556480928223906751\"\r\n        \"35065167698099652215293655017435072739810960282140231958938150214265071016475451369353878962176e+201\"},\r\n    {0x1.fffffffffffffp+669, chars_format::scientific, 201,\r\n        \"4.\"\r\n        \"8988833106573418930625457570321305463839082728939915757300629981356310100857527284011665112961856447813502\"\r\n        \"70130335396199304430587310034870145479621920564280463917876300428530142032950902738707757924352e+201\"},\r\n    {0x1.fffffffffffffp+670, chars_format::scientific, 201,\r\n        \"9.\"\r\n        \"7977666213146837861250915140642610927678165457879831514601259962712620201715054568023330225923712895627005\"\r\n        \"40260670792398608861174620069740290959243841128560927835752600857060284065901805477415515848704e+201\"},\r\n    {0x1.fffffffffffffp+671, chars_format::scientific, 202,\r\n        \"1.\"\r\n        \"9595533242629367572250183028128522185535633091575966302920251992542524040343010913604666045184742579125401\"\r\n        \"080521341584797217722349240139480581918487682257121855671505201714120568131803610954831031697408e+202\"},\r\n    {0x1.fffffffffffffp+672, chars_format::scientific, 202,\r\n        \"3.\"\r\n        \"9191066485258735144500366056257044371071266183151932605840503985085048080686021827209332090369485158250802\"\r\n        \"161042683169594435444698480278961163836975364514243711343010403428241136263607221909662063394816e+202\"},\r\n    {0x1.fffffffffffffp+673, chars_format::scientific, 202,\r\n        \"7.\"\r\n        \"8382132970517470289000732112514088742142532366303865211681007970170096161372043654418664180738970316501604\"\r\n        \"322085366339188870889396960557922327673950729028487422686020806856482272527214443819324126789632e+202\"},\r\n    {0x1.fffffffffffffp+674, chars_format::scientific, 203,\r\n        \"1.\"\r\n        \"5676426594103494057800146422502817748428506473260773042336201594034019232274408730883732836147794063300320\"\r\n        \"8644170732678377741778793921115844655347901458056974845372041613712964545054428887638648253579264e+203\"},\r\n    {0x1.fffffffffffffp+675, chars_format::scientific, 203,\r\n        \"3.\"\r\n        \"1352853188206988115600292845005635496857012946521546084672403188068038464548817461767465672295588126600641\"\r\n        \"7288341465356755483557587842231689310695802916113949690744083227425929090108857775277296507158528e+203\"},\r\n    {0x1.fffffffffffffp+676, chars_format::scientific, 203,\r\n        \"6.\"\r\n        \"2705706376413976231200585690011270993714025893043092169344806376136076929097634923534931344591176253201283\"\r\n        \"4576682930713510967115175684463378621391605832227899381488166454851858180217715550554593014317056e+203\"},\r\n    {0x1.fffffffffffffp+677, chars_format::scientific, 204,\r\n        \"1.\"\r\n        \"2541141275282795246240117138002254198742805178608618433868961275227215385819526984706986268918235250640256\"\r\n        \"69153365861427021934230351368926757242783211664455798762976332909703716360435431101109186028634112e+204\"},\r\n    {0x1.fffffffffffffp+678, chars_format::scientific, 204,\r\n        \"2.\"\r\n        \"5082282550565590492480234276004508397485610357217236867737922550454430771639053969413972537836470501280513\"\r\n        \"38306731722854043868460702737853514485566423328911597525952665819407432720870862202218372057268224e+204\"},\r\n    {0x1.fffffffffffffp+679, chars_format::scientific, 204,\r\n        \"5.\"\r\n        \"0164565101131180984960468552009016794971220714434473735475845100908861543278107938827945075672941002561026\"\r\n        \"76613463445708087736921405475707028971132846657823195051905331638814865441741724404436744114536448e+204\"},\r\n    {0x1.fffffffffffffp+680, chars_format::scientific, 205,\r\n        \"1.\"\r\n        \"0032913020226236196992093710401803358994244142886894747095169020181772308655621587765589015134588200512205\"\r\n        \"353226926891416175473842810951414057942265693315646390103810663277629730883483448808873488229072896e+205\"},\r\n    {0x1.fffffffffffffp+681, chars_format::scientific, 205,\r\n        \"2.\"\r\n        \"0065826040452472393984187420803606717988488285773789494190338040363544617311243175531178030269176401024410\"\r\n        \"706453853782832350947685621902828115884531386631292780207621326555259461766966897617746976458145792e+205\"},\r\n    {0x1.fffffffffffffp+682, chars_format::scientific, 205,\r\n        \"4.\"\r\n        \"0131652080904944787968374841607213435976976571547578988380676080727089234622486351062356060538352802048821\"\r\n        \"412907707565664701895371243805656231769062773262585560415242653110518923533933795235493952916291584e+205\"},\r\n    {0x1.fffffffffffffp+683, chars_format::scientific, 205,\r\n        \"8.\"\r\n        \"0263304161809889575936749683214426871953953143095157976761352161454178469244972702124712121076705604097642\"\r\n        \"825815415131329403790742487611312463538125546525171120830485306221037847067867590470987905832583168e+205\"},\r\n    {0x1.fffffffffffffp+684, chars_format::scientific, 206,\r\n        \"1.\"\r\n        \"6052660832361977915187349936642885374390790628619031595352270432290835693848994540424942424215341120819528\"\r\n        \"5651630830262658807581484975222624927076251093050342241660970612442075694135735180941975811665166336e+\"\r\n        \"206\"},\r\n    {0x1.fffffffffffffp+685, chars_format::scientific, 206,\r\n        \"3.\"\r\n        \"2105321664723955830374699873285770748781581257238063190704540864581671387697989080849884848430682241639057\"\r\n        \"1303261660525317615162969950445249854152502186100684483321941224884151388271470361883951623330332672e+\"\r\n        \"206\"},\r\n    {0x1.fffffffffffffp+686, chars_format::scientific, 206,\r\n        \"6.\"\r\n        \"4210643329447911660749399746571541497563162514476126381409081729163342775395978161699769696861364483278114\"\r\n        \"2606523321050635230325939900890499708305004372201368966643882449768302776542940723767903246660665344e+\"\r\n        \"206\"},\r\n    {0x1.fffffffffffffp+687, chars_format::scientific, 207,\r\n        \"1.\"\r\n        \"2842128665889582332149879949314308299512632502895225276281816345832668555079195632339953939372272896655622\"\r\n        \"85213046642101270460651879801780999416610008744402737933287764899536605553085881447535806493321330688e+\"\r\n        \"207\"},\r\n    {0x1.fffffffffffffp+688, chars_format::scientific, 207,\r\n        \"2.\"\r\n        \"5684257331779164664299759898628616599025265005790450552563632691665337110158391264679907878744545793311245\"\r\n        \"70426093284202540921303759603561998833220017488805475866575529799073211106171762895071612986642661376e+\"\r\n        \"207\"},\r\n    {0x1.fffffffffffffp+689, chars_format::scientific, 207,\r\n        \"5.\"\r\n        \"1368514663558329328599519797257233198050530011580901105127265383330674220316782529359815757489091586622491\"\r\n        \"40852186568405081842607519207123997666440034977610951733151059598146422212343525790143225973285322752e+\"\r\n        \"207\"},\r\n    {0x1.fffffffffffffp+690, chars_format::scientific, 208,\r\n        \"1.\"\r\n        \"0273702932711665865719903959451446639610106002316180221025453076666134844063356505871963151497818317324498\"\r\n        \"281704373136810163685215038414247995332880069955221903466302119196292844424687051580286451946570645504e+\"\r\n        \"208\"},\r\n    {0x1.fffffffffffffp+691, chars_format::scientific, 208,\r\n        \"2.\"\r\n        \"0547405865423331731439807918902893279220212004632360442050906153332269688126713011743926302995636634648996\"\r\n        \"563408746273620327370430076828495990665760139910443806932604238392585688849374103160572903893141291008e+\"\r\n        \"208\"},\r\n    {0x1.fffffffffffffp+692, chars_format::scientific, 208,\r\n        \"4.\"\r\n        \"1094811730846663462879615837805786558440424009264720884101812306664539376253426023487852605991273269297993\"\r\n        \"126817492547240654740860153656991981331520279820887613865208476785171377698748206321145807786282582016e+\"\r\n        \"208\"},\r\n    {0x1.fffffffffffffp+693, chars_format::scientific, 208,\r\n        \"8.\"\r\n        \"2189623461693326925759231675611573116880848018529441768203624613329078752506852046975705211982546538595986\"\r\n        \"253634985094481309481720307313983962663040559641775227730416953570342755397496412642291615572565164032e+\"\r\n        \"208\"},\r\n    {0x1.fffffffffffffp+694, chars_format::scientific, 209,\r\n        \"1.\"\r\n        \"6437924692338665385151846335122314623376169603705888353640724922665815750501370409395141042396509307719197\"\r\n        \"2507269970188962618963440614627967925326081119283550455460833907140685510794992825284583231145130328064e+\"\r\n        \"209\"},\r\n    {0x1.fffffffffffffp+695, chars_format::scientific, 209,\r\n        \"3.\"\r\n        \"2875849384677330770303692670244629246752339207411776707281449845331631501002740818790282084793018615438394\"\r\n        \"5014539940377925237926881229255935850652162238567100910921667814281371021589985650569166462290260656128e+\"\r\n        \"209\"},\r\n    {0x1.fffffffffffffp+696, chars_format::scientific, 209,\r\n        \"6.\"\r\n        \"5751698769354661540607385340489258493504678414823553414562899690663263002005481637580564169586037230876789\"\r\n        \"0029079880755850475853762458511871701304324477134201821843335628562742043179971301138332924580521312256e+\"\r\n        \"209\"},\r\n    {0x1.fffffffffffffp+697, chars_format::scientific, 210,\r\n        \"1.\"\r\n        \"3150339753870932308121477068097851698700935682964710682912579938132652600401096327516112833917207446175357\"\r\n        \"80058159761511700951707524917023743402608648954268403643686671257125484086359942602276665849161042624512e+\"\r\n        \"210\"},\r\n    {0x1.fffffffffffffp+698, chars_format::scientific, 210,\r\n        \"2.\"\r\n        \"6300679507741864616242954136195703397401871365929421365825159876265305200802192655032225667834414892350715\"\r\n        \"60116319523023401903415049834047486805217297908536807287373342514250968172719885204553331698322085249024e+\"\r\n        \"210\"},\r\n    {0x1.fffffffffffffp+699, chars_format::scientific, 210,\r\n        \"5.\"\r\n        \"2601359015483729232485908272391406794803742731858842731650319752530610401604385310064451335668829784701431\"\r\n        \"20232639046046803806830099668094973610434595817073614574746685028501936345439770409106663396644170498048e+\"\r\n        \"210\"},\r\n    {0x1.fffffffffffffp+700, chars_format::scientific, 211,\r\n        \"1.\"\r\n        \"0520271803096745846497181654478281358960748546371768546330063950506122080320877062012890267133765956940286\"\r\n        \"240465278092093607613660199336189947220869191634147229149493370057003872690879540818213326793288340996096e\"\r\n        \"+211\"},\r\n    {0x1.fffffffffffffp+701, chars_format::scientific, 211,\r\n        \"2.\"\r\n        \"1040543606193491692994363308956562717921497092743537092660127901012244160641754124025780534267531913880572\"\r\n        \"480930556184187215227320398672379894441738383268294458298986740114007745381759081636426653586576681992192e\"\r\n        \"+211\"},\r\n    {0x1.fffffffffffffp+702, chars_format::scientific, 211,\r\n        \"4.\"\r\n        \"2081087212386983385988726617913125435842994185487074185320255802024488321283508248051561068535063827761144\"\r\n        \"961861112368374430454640797344759788883476766536588916597973480228015490763518163272853307173153363984384e\"\r\n        \"+211\"},\r\n    {0x1.fffffffffffffp+703, chars_format::scientific, 211,\r\n        \"8.\"\r\n        \"4162174424773966771977453235826250871685988370974148370640511604048976642567016496103122137070127655522289\"\r\n        \"923722224736748860909281594689519577766953533073177833195946960456030981527036326545706614346306727968768e\"\r\n        \"+211\"},\r\n    {0x1.fffffffffffffp+704, chars_format::scientific, 212,\r\n        \"1.\"\r\n        \"6832434884954793354395490647165250174337197674194829674128102320809795328513403299220624427414025531104457\"\r\n        \"9847444449473497721818563189379039155533907066146355666391893920912061963054072653091413228692613455937536\"\r\n        \"e+212\"},\r\n    {0x1.fffffffffffffp+705, chars_format::scientific, 212,\r\n        \"3.\"\r\n        \"3664869769909586708790981294330500348674395348389659348256204641619590657026806598441248854828051062208915\"\r\n        \"9694888898946995443637126378758078311067814132292711332783787841824123926108145306182826457385226911875072\"\r\n        \"e+212\"},\r\n    {0x1.fffffffffffffp+706, chars_format::scientific, 212,\r\n        \"6.\"\r\n        \"7329739539819173417581962588661000697348790696779318696512409283239181314053613196882497709656102124417831\"\r\n        \"9389777797893990887274252757516156622135628264585422665567575683648247852216290612365652914770453823750144\"\r\n        \"e+212\"},\r\n    {0x1.fffffffffffffp+707, chars_format::scientific, 213,\r\n        \"1.\"\r\n        \"3465947907963834683516392517732200139469758139355863739302481856647836262810722639376499541931220424883566\"\r\n        \"3877955559578798177454850551503231324427125652917084533113515136729649570443258122473130582954090764750028\"\r\n        \"8e+213\"},\r\n    {0x1.fffffffffffffp+708, chars_format::scientific, 213,\r\n        \"2.\"\r\n        \"6931895815927669367032785035464400278939516278711727478604963713295672525621445278752999083862440849767132\"\r\n        \"7755911119157596354909701103006462648854251305834169066227030273459299140886516244946261165908181529500057\"\r\n        \"6e+213\"},\r\n    {0x1.fffffffffffffp+709, chars_format::scientific, 213,\r\n        \"5.\"\r\n        \"3863791631855338734065570070928800557879032557423454957209927426591345051242890557505998167724881699534265\"\r\n        \"5511822238315192709819402206012925297708502611668338132454060546918598281773032489892522331816363059000115\"\r\n        \"2e+213\"},\r\n    {0x1.fffffffffffffp+710, chars_format::scientific, 214,\r\n        \"1.\"\r\n        \"0772758326371067746813114014185760111575806511484690991441985485318269010248578111501199633544976339906853\"\r\n        \"1102364447663038541963880441202585059541700522333667626490812109383719656354606497978504466363272611800023\"\r\n        \"04e+214\"},\r\n    {0x1.fffffffffffffp+711, chars_format::scientific, 214,\r\n        \"2.\"\r\n        \"1545516652742135493626228028371520223151613022969381982883970970636538020497156223002399267089952679813706\"\r\n        \"2204728895326077083927760882405170119083401044667335252981624218767439312709212995957008932726545223600046\"\r\n        \"08e+214\"},\r\n    {0x1.fffffffffffffp+712, chars_format::scientific, 214,\r\n        \"4.\"\r\n        \"3091033305484270987252456056743040446303226045938763965767941941273076040994312446004798534179905359627412\"\r\n        \"4409457790652154167855521764810340238166802089334670505963248437534878625418425991914017865453090447200092\"\r\n        \"16e+214\"},\r\n    {0x1.fffffffffffffp+713, chars_format::scientific, 214,\r\n        \"8.\"\r\n        \"6182066610968541974504912113486080892606452091877527931535883882546152081988624892009597068359810719254824\"\r\n        \"8818915581304308335711043529620680476333604178669341011926496875069757250836851983828035730906180894400184\"\r\n        \"32e+214\"},\r\n    {0x1.fffffffffffffp+714, chars_format::scientific, 215,\r\n        \"1.\"\r\n        \"7236413322193708394900982422697216178521290418375505586307176776509230416397724978401919413671962143850964\"\r\n        \"9763783116260861667142208705924136095266720835733868202385299375013951450167370396765607146181236178880036\"\r\n        \"864e+215\"},\r\n    {0x1.fffffffffffffp+715, chars_format::scientific, 215,\r\n        \"3.\"\r\n        \"4472826644387416789801964845394432357042580836751011172614353553018460832795449956803838827343924287701929\"\r\n        \"9527566232521723334284417411848272190533441671467736404770598750027902900334740793531214292362472357760073\"\r\n        \"728e+215\"},\r\n    {0x1.fffffffffffffp+716, chars_format::scientific, 215,\r\n        \"6.\"\r\n        \"8945653288774833579603929690788864714085161673502022345228707106036921665590899913607677654687848575403859\"\r\n        \"9055132465043446668568834823696544381066883342935472809541197500055805800669481587062428584724944715520147\"\r\n        \"456e+215\"},\r\n    {0x1.fffffffffffffp+717, chars_format::scientific, 216,\r\n        \"1.\"\r\n        \"3789130657754966715920785938157772942817032334700404469045741421207384333118179982721535530937569715080771\"\r\n        \"9811026493008689333713766964739308876213376668587094561908239500011161160133896317412485716944988943104029\"\r\n        \"4912e+216\"},\r\n    {0x1.fffffffffffffp+718, chars_format::scientific, 216,\r\n        \"2.\"\r\n        \"7578261315509933431841571876315545885634064669400808938091482842414768666236359965443071061875139430161543\"\r\n        \"9622052986017378667427533929478617752426753337174189123816479000022322320267792634824971433889977886208058\"\r\n        \"9824e+216\"},\r\n    {0x1.fffffffffffffp+719, chars_format::scientific, 216,\r\n        \"5.\"\r\n        \"5156522631019866863683143752631091771268129338801617876182965684829537332472719930886142123750278860323087\"\r\n        \"9244105972034757334855067858957235504853506674348378247632958000044644640535585269649942867779955772416117\"\r\n        \"9648e+216\"},\r\n    {0x1.fffffffffffffp+720, chars_format::scientific, 217,\r\n        \"1.\"\r\n        \"1031304526203973372736628750526218354253625867760323575236593136965907466494543986177228424750055772064617\"\r\n        \"5848821194406951466971013571791447100970701334869675649526591600008928928107117053929988573555991154483223\"\r\n        \"59296e+217\"},\r\n    {0x1.fffffffffffffp+721, chars_format::scientific, 217,\r\n        \"2.\"\r\n        \"2062609052407946745473257501052436708507251735520647150473186273931814932989087972354456849500111544129235\"\r\n        \"1697642388813902933942027143582894201941402669739351299053183200017857856214234107859977147111982308966447\"\r\n        \"18592e+217\"},\r\n    {0x1.fffffffffffffp+722, chars_format::scientific, 217,\r\n        \"4.\"\r\n        \"4125218104815893490946515002104873417014503471041294300946372547863629865978175944708913699000223088258470\"\r\n        \"3395284777627805867884054287165788403882805339478702598106366400035715712428468215719954294223964617932894\"\r\n        \"37184e+217\"},\r\n    {0x1.fffffffffffffp+723, chars_format::scientific, 217,\r\n        \"8.\"\r\n        \"8250436209631786981893030004209746834029006942082588601892745095727259731956351889417827398000446176516940\"\r\n        \"6790569555255611735768108574331576807765610678957405196212732800071431424856936431439908588447929235865788\"\r\n        \"74368e+217\"},\r\n    {0x1.fffffffffffffp+724, chars_format::scientific, 218,\r\n        \"1.\"\r\n        \"7650087241926357396378606000841949366805801388416517720378549019145451946391270377883565479600089235303388\"\r\n        \"1358113911051122347153621714866315361553122135791481039242546560014286284971387286287981717689585847173157\"\r\n        \"748736e+218\"},\r\n    {0x1.fffffffffffffp+725, chars_format::scientific, 218,\r\n        \"3.\"\r\n        \"5300174483852714792757212001683898733611602776833035440757098038290903892782540755767130959200178470606776\"\r\n        \"2716227822102244694307243429732630723106244271582962078485093120028572569942774572575963435379171694346315\"\r\n        \"497472e+218\"},\r\n    {0x1.fffffffffffffp+726, chars_format::scientific, 218,\r\n        \"7.\"\r\n        \"0600348967705429585514424003367797467223205553666070881514196076581807785565081511534261918400356941213552\"\r\n        \"5432455644204489388614486859465261446212488543165924156970186240057145139885549145151926870758343388692630\"\r\n        \"994944e+218\"},\r\n    {0x1.fffffffffffffp+727, chars_format::scientific, 219,\r\n        \"1.\"\r\n        \"4120069793541085917102884800673559493444641110733214176302839215316361557113016302306852383680071388242710\"\r\n        \"5086491128840897877722897371893052289242497708633184831394037248011429027977109829030385374151668677738526\"\r\n        \"1989888e+219\"},\r\n    {0x1.fffffffffffffp+728, chars_format::scientific, 219,\r\n        \"2.\"\r\n        \"8240139587082171834205769601347118986889282221466428352605678430632723114226032604613704767360142776485421\"\r\n        \"0172982257681795755445794743786104578484995417266369662788074496022858055954219658060770748303337355477052\"\r\n        \"3979776e+219\"},\r\n    {0x1.fffffffffffffp+729, chars_format::scientific, 219,\r\n        \"5.\"\r\n        \"6480279174164343668411539202694237973778564442932856705211356861265446228452065209227409534720285552970842\"\r\n        \"0345964515363591510891589487572209156969990834532739325576148992045716111908439316121541496606674710954104\"\r\n        \"7959552e+219\"},\r\n    {0x1.fffffffffffffp+730, chars_format::scientific, 220,\r\n        \"1.\"\r\n        \"1296055834832868733682307840538847594755712888586571341042271372253089245690413041845481906944057110594168\"\r\n        \"4069192903072718302178317897514441831393998166906547865115229798409143222381687863224308299321334942190820\"\r\n        \"95919104e+220\"},\r\n    {0x1.fffffffffffffp+731, chars_format::scientific, 220,\r\n        \"2.\"\r\n        \"2592111669665737467364615681077695189511425777173142682084542744506178491380826083690963813888114221188336\"\r\n        \"8138385806145436604356635795028883662787996333813095730230459596818286444763375726448616598642669884381641\"\r\n        \"91838208e+220\"},\r\n    {0x1.fffffffffffffp+732, chars_format::scientific, 220,\r\n        \"4.\"\r\n        \"5184223339331474934729231362155390379022851554346285364169085489012356982761652167381927627776228442376673\"\r\n        \"6276771612290873208713271590057767325575992667626191460460919193636572889526751452897233197285339768763283\"\r\n        \"83676416e+220\"},\r\n    {0x1.fffffffffffffp+733, chars_format::scientific, 220,\r\n        \"9.\"\r\n        \"0368446678662949869458462724310780758045703108692570728338170978024713965523304334763855255552456884753347\"\r\n        \"2553543224581746417426543180115534651151985335252382920921838387273145779053502905794466394570679537526567\"\r\n        \"67352832e+220\"},\r\n    {0x1.fffffffffffffp+734, chars_format::scientific, 221,\r\n        \"1.\"\r\n        \"8073689335732589973891692544862156151609140621738514145667634195604942793104660866952771051110491376950669\"\r\n        \"4510708644916349283485308636023106930230397067050476584184367677454629155810700581158893278914135907505313\"\r\n        \"534705664e+221\"},\r\n    {0x1.fffffffffffffp+735, chars_format::scientific, 221,\r\n        \"3.\"\r\n        \"6147378671465179947783385089724312303218281243477028291335268391209885586209321733905542102220982753901338\"\r\n        \"9021417289832698566970617272046213860460794134100953168368735354909258311621401162317786557828271815010627\"\r\n        \"069411328e+221\"},\r\n    {0x1.fffffffffffffp+736, chars_format::scientific, 221,\r\n        \"7.\"\r\n        \"2294757342930359895566770179448624606436562486954056582670536782419771172418643467811084204441965507802677\"\r\n        \"8042834579665397133941234544092427720921588268201906336737470709818516623242802324635573115656543630021254\"\r\n        \"138822656e+221\"},\r\n    {0x1.fffffffffffffp+737, chars_format::scientific, 222,\r\n        \"1.\"\r\n        \"4458951468586071979113354035889724921287312497390811316534107356483954234483728693562216840888393101560535\"\r\n        \"5608566915933079426788246908818485544184317653640381267347494141963703324648560464927114623131308726004250\"\r\n        \"8277645312e+222\"},\r\n    {0x1.fffffffffffffp+738, chars_format::scientific, 222,\r\n        \"2.\"\r\n        \"8917902937172143958226708071779449842574624994781622633068214712967908468967457387124433681776786203121071\"\r\n        \"1217133831866158853576493817636971088368635307280762534694988283927406649297120929854229246262617452008501\"\r\n        \"6555290624e+222\"},\r\n    {0x1.fffffffffffffp+739, chars_format::scientific, 222,\r\n        \"5.\"\r\n        \"7835805874344287916453416143558899685149249989563245266136429425935816937934914774248867363553572406242142\"\r\n        \"2434267663732317707152987635273942176737270614561525069389976567854813298594241859708458492525234904017003\"\r\n        \"3110581248e+222\"},\r\n    {0x1.fffffffffffffp+740, chars_format::scientific, 223,\r\n        \"1.\"\r\n        \"1567161174868857583290683228711779937029849997912649053227285885187163387586982954849773472710714481248428\"\r\n        \"4486853532746463541430597527054788435347454122912305013877995313570962659718848371941691698505046980803400\"\r\n        \"66221162496e+223\"},\r\n    {0x1.fffffffffffffp+741, chars_format::scientific, 223,\r\n        \"2.\"\r\n        \"3134322349737715166581366457423559874059699995825298106454571770374326775173965909699546945421428962496856\"\r\n        \"8973707065492927082861195054109576870694908245824610027755990627141925319437696743883383397010093961606801\"\r\n        \"32442324992e+223\"},\r\n    {0x1.fffffffffffffp+742, chars_format::scientific, 223,\r\n        \"4.\"\r\n        \"6268644699475430333162732914847119748119399991650596212909143540748653550347931819399093890842857924993713\"\r\n        \"7947414130985854165722390108219153741389816491649220055511981254283850638875393487766766794020187923213602\"\r\n        \"64884649984e+223\"},\r\n    {0x1.fffffffffffffp+743, chars_format::scientific, 223,\r\n        \"9.\"\r\n        \"2537289398950860666325465829694239496238799983301192425818287081497307100695863638798187781685715849987427\"\r\n        \"5894828261971708331444780216438307482779632983298440111023962508567701277750786975533533588040375846427205\"\r\n        \"29769299968e+223\"},\r\n    {0x1.fffffffffffffp+744, chars_format::scientific, 224,\r\n        \"1.\"\r\n        \"8507457879790172133265093165938847899247759996660238485163657416299461420139172727759637556337143169997485\"\r\n        \"5178965652394341666288956043287661496555926596659688022204792501713540255550157395106706717608075169285441\"\r\n        \"059538599936e+224\"},\r\n    {0x1.fffffffffffffp+745, chars_format::scientific, 224,\r\n        \"3.\"\r\n        \"7014915759580344266530186331877695798495519993320476970327314832598922840278345455519275112674286339994971\"\r\n        \"0357931304788683332577912086575322993111853193319376044409585003427080511100314790213413435216150338570882\"\r\n        \"119077199872e+224\"},\r\n    {0x1.fffffffffffffp+746, chars_format::scientific, 224,\r\n        \"7.\"\r\n        \"4029831519160688533060372663755391596991039986640953940654629665197845680556690911038550225348572679989942\"\r\n        \"0715862609577366665155824173150645986223706386638752088819170006854161022200629580426826870432300677141764\"\r\n        \"238154399744e+224\"},\r\n    {0x1.fffffffffffffp+747, chars_format::scientific, 225,\r\n        \"1.\"\r\n        \"4805966303832137706612074532751078319398207997328190788130925933039569136111338182207710045069714535997988\"\r\n        \"4143172521915473333031164834630129197244741277327750417763834001370832204440125916085365374086460135428352\"\r\n        \"8476308799488e+225\"},\r\n    {0x1.fffffffffffffp+748, chars_format::scientific, 225,\r\n        \"2.\"\r\n        \"9611932607664275413224149065502156638796415994656381576261851866079138272222676364415420090139429071995976\"\r\n        \"8286345043830946666062329669260258394489482554655500835527668002741664408880251832170730748172920270856705\"\r\n        \"6952617598976e+225\"},\r\n    {0x1.fffffffffffffp+749, chars_format::scientific, 225,\r\n        \"5.\"\r\n        \"9223865215328550826448298131004313277592831989312763152523703732158276544445352728830840180278858143991953\"\r\n        \"6572690087661893332124659338520516788978965109311001671055336005483328817760503664341461496345840541713411\"\r\n        \"3905235197952e+225\"},\r\n    {0x1.fffffffffffffp+750, chars_format::scientific, 226,\r\n        \"1.\"\r\n        \"1844773043065710165289659626200862655518566397862552630504740746431655308889070545766168036055771628798390\"\r\n        \"7314538017532378666424931867704103357795793021862200334211067201096665763552100732868292299269168108342682\"\r\n        \"27810470395904e+226\"},\r\n    {0x1.fffffffffffffp+751, chars_format::scientific, 226,\r\n        \"2.\"\r\n        \"3689546086131420330579319252401725311037132795725105261009481492863310617778141091532336072111543257596781\"\r\n        \"4629076035064757332849863735408206715591586043724400668422134402193331527104201465736584598538336216685364\"\r\n        \"55620940791808e+226\"},\r\n    {0x1.fffffffffffffp+752, chars_format::scientific, 226,\r\n        \"4.\"\r\n        \"7379092172262840661158638504803450622074265591450210522018962985726621235556282183064672144223086515193562\"\r\n        \"9258152070129514665699727470816413431183172087448801336844268804386663054208402931473169197076672433370729\"\r\n        \"11241881583616e+226\"},\r\n    {0x1.fffffffffffffp+753, chars_format::scientific, 226,\r\n        \"9.\"\r\n        \"4758184344525681322317277009606901244148531182900421044037925971453242471112564366129344288446173030387125\"\r\n        \"8516304140259029331399454941632826862366344174897602673688537608773326108416805862946338394153344866741458\"\r\n        \"22483763167232e+226\"},\r\n    {0x1.fffffffffffffp+754, chars_format::scientific, 227,\r\n        \"1.\"\r\n        \"8951636868905136264463455401921380248829706236580084208807585194290648494222512873225868857689234606077425\"\r\n        \"1703260828051805866279890988326565372473268834979520534737707521754665221683361172589267678830668973348291\"\r\n        \"644967526334464e+227\"},\r\n    {0x1.fffffffffffffp+755, chars_format::scientific, 227,\r\n        \"3.\"\r\n        \"7903273737810272528926910803842760497659412473160168417615170388581296988445025746451737715378469212154850\"\r\n        \"3406521656103611732559781976653130744946537669959041069475415043509330443366722345178535357661337946696583\"\r\n        \"289935052668928e+227\"},\r\n    {0x1.fffffffffffffp+756, chars_format::scientific, 227,\r\n        \"7.\"\r\n        \"5806547475620545057853821607685520995318824946320336835230340777162593976890051492903475430756938424309700\"\r\n        \"6813043312207223465119563953306261489893075339918082138950830087018660886733444690357070715322675893393166\"\r\n        \"579870105337856e+227\"},\r\n    {0x1.fffffffffffffp+757, chars_format::scientific, 228,\r\n        \"1.\"\r\n        \"5161309495124109011570764321537104199063764989264067367046068155432518795378010298580695086151387684861940\"\r\n        \"1362608662441444693023912790661252297978615067983616427790166017403732177346688938071414143064535178678633\"\r\n        \"3159740210675712e+228\"},\r\n    {0x1.fffffffffffffp+758, chars_format::scientific, 228,\r\n        \"3.\"\r\n        \"0322618990248218023141528643074208398127529978528134734092136310865037590756020597161390172302775369723880\"\r\n        \"2725217324882889386047825581322504595957230135967232855580332034807464354693377876142828286129070357357266\"\r\n        \"6319480421351424e+228\"},\r\n    {0x1.fffffffffffffp+759, chars_format::scientific, 228,\r\n        \"6.\"\r\n        \"0645237980496436046283057286148416796255059957056269468184272621730075181512041194322780344605550739447760\"\r\n        \"5450434649765778772095651162645009191914460271934465711160664069614928709386755752285656572258140714714533\"\r\n        \"2638960842702848e+228\"},\r\n    {0x1.fffffffffffffp+760, chars_format::scientific, 229,\r\n        \"1.\"\r\n        \"2129047596099287209256611457229683359251011991411253893636854524346015036302408238864556068921110147889552\"\r\n        \"1090086929953155754419130232529001838382892054386893142232132813922985741877351150457131314451628142942906\"\r\n        \"65277921685405696e+229\"},\r\n    {0x1.fffffffffffffp+761, chars_format::scientific, 229,\r\n        \"2.\"\r\n        \"4258095192198574418513222914459366718502023982822507787273709048692030072604816477729112137842220295779104\"\r\n        \"2180173859906311508838260465058003676765784108773786284464265627845971483754702300914262628903256285885813\"\r\n        \"30555843370811392e+229\"},\r\n    {0x1.fffffffffffffp+762, chars_format::scientific, 229,\r\n        \"4.\"\r\n        \"8516190384397148837026445828918733437004047965645015574547418097384060145209632955458224275684440591558208\"\r\n        \"4360347719812623017676520930116007353531568217547572568928531255691942967509404601828525257806512571771626\"\r\n        \"61111686741622784e+229\"},\r\n    {0x1.fffffffffffffp+763, chars_format::scientific, 229,\r\n        \"9.\"\r\n        \"7032380768794297674052891657837466874008095931290031149094836194768120290419265910916448551368881183116416\"\r\n        \"8720695439625246035353041860232014707063136435095145137857062511383885935018809203657050515613025143543253\"\r\n        \"22223373483245568e+229\"},\r\n    {0x1.fffffffffffffp+764, chars_format::scientific, 230,\r\n        \"1.\"\r\n        \"9406476153758859534810578331567493374801619186258006229818967238953624058083853182183289710273776236623283\"\r\n        \"3744139087925049207070608372046402941412627287019029027571412502276777187003761840731410103122605028708650\"\r\n        \"644446746966491136e+230\"},\r\n    {0x1.fffffffffffffp+765, chars_format::scientific, 230,\r\n        \"3.\"\r\n        \"8812952307517719069621156663134986749603238372516012459637934477907248116167706364366579420547552473246566\"\r\n        \"7488278175850098414141216744092805882825254574038058055142825004553554374007523681462820206245210057417301\"\r\n        \"288893493932982272e+230\"},\r\n    {0x1.fffffffffffffp+766, chars_format::scientific, 230,\r\n        \"7.\"\r\n        \"7625904615035438139242313326269973499206476745032024919275868955814496232335412728733158841095104946493133\"\r\n        \"4976556351700196828282433488185611765650509148076116110285650009107108748015047362925640412490420114834602\"\r\n        \"577786987865964544e+230\"},\r\n    {0x1.fffffffffffffp+767, chars_format::scientific, 231,\r\n        \"1.\"\r\n        \"5525180923007087627848462665253994699841295349006404983855173791162899246467082545746631768219020989298626\"\r\n        \"6995311270340039365656486697637122353130101829615223222057130001821421749603009472585128082498084022966920\"\r\n        \"5155573975731929088e+231\"},\r\n    {0x1.fffffffffffffp+768, chars_format::scientific, 231,\r\n        \"3.\"\r\n        \"1050361846014175255696925330507989399682590698012809967710347582325798492934165091493263536438041978597253\"\r\n        \"3990622540680078731312973395274244706260203659230446444114260003642843499206018945170256164996168045933841\"\r\n        \"0311147951463858176e+231\"},\r\n    {0x1.fffffffffffffp+769, chars_format::scientific, 231,\r\n        \"6.\"\r\n        \"2100723692028350511393850661015978799365181396025619935420695164651596985868330182986527072876083957194506\"\r\n        \"7981245081360157462625946790548489412520407318460892888228520007285686998412037890340512329992336091867682\"\r\n        \"0622295902927716352e+231\"},\r\n    {0x1.fffffffffffffp+770, chars_format::scientific, 232,\r\n        \"1.\"\r\n        \"2420144738405670102278770132203195759873036279205123987084139032930319397173666036597305414575216791438901\"\r\n        \"3596249016272031492525189358109697882504081463692178577645704001457137399682407578068102465998467218373536\"\r\n        \"41244591805855432704e+232\"},\r\n    {0x1.fffffffffffffp+771, chars_format::scientific, 232,\r\n        \"2.\"\r\n        \"4840289476811340204557540264406391519746072558410247974168278065860638794347332073194610829150433582877802\"\r\n        \"7192498032544062985050378716219395765008162927384357155291408002914274799364815156136204931996934436747072\"\r\n        \"82489183611710865408e+232\"},\r\n    {0x1.fffffffffffffp+772, chars_format::scientific, 232,\r\n        \"4.\"\r\n        \"9680578953622680409115080528812783039492145116820495948336556131721277588694664146389221658300867165755605\"\r\n        \"4384996065088125970100757432438791530016325854768714310582816005828549598729630312272409863993868873494145\"\r\n        \"64978367223421730816e+232\"},\r\n    {0x1.fffffffffffffp+773, chars_format::scientific, 232,\r\n        \"9.\"\r\n        \"9361157907245360818230161057625566078984290233640991896673112263442555177389328292778443316601734331511210\"\r\n        \"8769992130176251940201514864877583060032651709537428621165632011657099197459260624544819727987737746988291\"\r\n        \"29956734446843461632e+232\"},\r\n    {0x1.fffffffffffffp+774, chars_format::scientific, 233,\r\n        \"1.\"\r\n        \"9872231581449072163646032211525113215796858046728198379334622452688511035477865658555688663320346866302242\"\r\n        \"1753998426035250388040302972975516612006530341907485724233126402331419839491852124908963945597547549397658\"\r\n        \"259913468893686923264e+233\"},\r\n    {0x1.fffffffffffffp+775, chars_format::scientific, 233,\r\n        \"3.\"\r\n        \"9744463162898144327292064423050226431593716093456396758669244905377022070955731317111377326640693732604484\"\r\n        \"3507996852070500776080605945951033224013060683814971448466252804662839678983704249817927891195095098795316\"\r\n        \"519826937787373846528e+233\"},\r\n    {0x1.fffffffffffffp+776, chars_format::scientific, 233,\r\n        \"7.\"\r\n        \"9488926325796288654584128846100452863187432186912793517338489810754044141911462634222754653281387465208968\"\r\n        \"7015993704141001552161211891902066448026121367629942896932505609325679357967408499635855782390190197590633\"\r\n        \"039653875574747693056e+233\"},\r\n    {0x1.fffffffffffffp+777, chars_format::scientific, 234,\r\n        \"1.\"\r\n        \"5897785265159257730916825769220090572637486437382558703467697962150808828382292526844550930656277493041793\"\r\n        \"7403198740828200310432242378380413289605224273525988579386501121865135871593481699927171156478038039518126\"\r\n        \"6079307751149495386112e+234\"},\r\n    {0x1.fffffffffffffp+778, chars_format::scientific, 234,\r\n        \"3.\"\r\n        \"1795570530318515461833651538440181145274972874765117406935395924301617656764585053689101861312554986083587\"\r\n        \"4806397481656400620864484756760826579210448547051977158773002243730271743186963399854342312956076079036253\"\r\n        \"2158615502298990772224e+234\"},\r\n    {0x1.fffffffffffffp+779, chars_format::scientific, 234,\r\n        \"6.\"\r\n        \"3591141060637030923667303076880362290549945749530234813870791848603235313529170107378203722625109972167174\"\r\n        \"9612794963312801241728969513521653158420897094103954317546004487460543486373926799708684625912152158072506\"\r\n        \"4317231004597981544448e+234\"},\r\n    {0x1.fffffffffffffp+780, chars_format::scientific, 235,\r\n        \"1.\"\r\n        \"2718228212127406184733460615376072458109989149906046962774158369720647062705834021475640744525021994433434\"\r\n        \"9922558992662560248345793902704330631684179418820790863509200897492108697274785359941736925182430431614501\"\r\n        \"28634462009195963088896e+235\"},\r\n    {0x1.fffffffffffffp+781, chars_format::scientific, 235,\r\n        \"2.\"\r\n        \"5436456424254812369466921230752144916219978299812093925548316739441294125411668042951281489050043988866869\"\r\n        \"9845117985325120496691587805408661263368358837641581727018401794984217394549570719883473850364860863229002\"\r\n        \"57268924018391926177792e+235\"},\r\n    {0x1.fffffffffffffp+782, chars_format::scientific, 235,\r\n        \"5.\"\r\n        \"0872912848509624738933842461504289832439956599624187851096633478882588250823336085902562978100087977733739\"\r\n        \"9690235970650240993383175610817322526736717675283163454036803589968434789099141439766947700729721726458005\"\r\n        \"14537848036783852355584e+235\"},\r\n    {0x1.fffffffffffffp+783, chars_format::scientific, 236,\r\n        \"1.\"\r\n        \"0174582569701924947786768492300857966487991319924837570219326695776517650164667217180512595620017595546747\"\r\n        \"9938047194130048198676635122163464505347343535056632690807360717993686957819828287953389540145944345291601\"\r\n        \"029075696073567704711168e+236\"},\r\n    {0x1.fffffffffffffp+784, chars_format::scientific, 236,\r\n        \"2.\"\r\n        \"0349165139403849895573536984601715932975982639849675140438653391553035300329334434361025191240035191093495\"\r\n        \"9876094388260096397353270244326929010694687070113265381614721435987373915639656575906779080291888690583202\"\r\n        \"058151392147135409422336e+236\"},\r\n    {0x1.fffffffffffffp+785, chars_format::scientific, 236,\r\n        \"4.\"\r\n        \"0698330278807699791147073969203431865951965279699350280877306783106070600658668868722050382480070382186991\"\r\n        \"9752188776520192794706540488653858021389374140226530763229442871974747831279313151813558160583777381166404\"\r\n        \"116302784294270818844672e+236\"},\r\n    {0x1.fffffffffffffp+786, chars_format::scientific, 236,\r\n        \"8.\"\r\n        \"1396660557615399582294147938406863731903930559398700561754613566212141201317337737444100764960140764373983\"\r\n        \"9504377553040385589413080977307716042778748280453061526458885743949495662558626303627116321167554762332808\"\r\n        \"232605568588541637689344e+236\"},\r\n    {0x1.fffffffffffffp+787, chars_format::scientific, 237,\r\n        \"1.\"\r\n        \"6279332111523079916458829587681372746380786111879740112350922713242428240263467547488820152992028152874796\"\r\n        \"7900875510608077117882616195461543208555749656090612305291777148789899132511725260725423264233510952466561\"\r\n        \"6465211137177083275378688e+237\"},\r\n    {0x1.fffffffffffffp+788, chars_format::scientific, 237,\r\n        \"3.\"\r\n        \"2558664223046159832917659175362745492761572223759480224701845426484856480526935094977640305984056305749593\"\r\n        \"5801751021216154235765232390923086417111499312181224610583554297579798265023450521450846528467021904933123\"\r\n        \"2930422274354166550757376e+237\"},\r\n    {0x1.fffffffffffffp+789, chars_format::scientific, 237,\r\n        \"6.\"\r\n        \"5117328446092319665835318350725490985523144447518960449403690852969712961053870189955280611968112611499187\"\r\n        \"1603502042432308471530464781846172834222998624362449221167108595159596530046901042901693056934043809866246\"\r\n        \"5860844548708333101514752e+237\"},\r\n    {0x1.fffffffffffffp+790, chars_format::scientific, 238,\r\n        \"1.\"\r\n        \"3023465689218463933167063670145098197104628889503792089880738170593942592210774037991056122393622522299837\"\r\n        \"4320700408486461694306092956369234566844599724872489844233421719031919306009380208580338611386808761973249\"\r\n        \"31721689097416666203029504e+238\"},\r\n    {0x1.fffffffffffffp+791, chars_format::scientific, 238,\r\n        \"2.\"\r\n        \"6046931378436927866334127340290196394209257779007584179761476341187885184421548075982112244787245044599674\"\r\n        \"8641400816972923388612185912738469133689199449744979688466843438063838612018760417160677222773617523946498\"\r\n        \"63443378194833332406059008e+238\"},\r\n    {0x1.fffffffffffffp+792, chars_format::scientific, 238,\r\n        \"5.\"\r\n        \"2093862756873855732668254680580392788418515558015168359522952682375770368843096151964224489574490089199349\"\r\n        \"7282801633945846777224371825476938267378398899489959376933686876127677224037520834321354445547235047892997\"\r\n        \"26886756389666664812118016e+238\"},\r\n    {0x1.fffffffffffffp+793, chars_format::scientific, 239,\r\n        \"1.\"\r\n        \"0418772551374771146533650936116078557683703111603033671904590536475154073768619230392844897914898017839869\"\r\n        \"9456560326789169355444874365095387653475679779897991875386737375225535444807504166864270889109447009578599\"\r\n        \"453773512779333329624236032e+239\"},\r\n    {0x1.fffffffffffffp+794, chars_format::scientific, 239,\r\n        \"2.\"\r\n        \"0837545102749542293067301872232157115367406223206067343809181072950308147537238460785689795829796035679739\"\r\n        \"8913120653578338710889748730190775306951359559795983750773474750451070889615008333728541778218894019157198\"\r\n        \"907547025558666659248472064e+239\"},\r\n    {0x1.fffffffffffffp+795, chars_format::scientific, 239,\r\n        \"4.\"\r\n        \"1675090205499084586134603744464314230734812446412134687618362145900616295074476921571379591659592071359479\"\r\n        \"7826241307156677421779497460381550613902719119591967501546949500902141779230016667457083556437788038314397\"\r\n        \"815094051117333318496944128e+239\"},\r\n    {0x1.fffffffffffffp+796, chars_format::scientific, 239,\r\n        \"8.\"\r\n        \"3350180410998169172269207488928628461469624892824269375236724291801232590148953843142759183319184142718959\"\r\n        \"5652482614313354843558994920763101227805438239183935003093899001804283558460033334914167112875576076628795\"\r\n        \"630188102234666636993888256e+239\"},\r\n    {0x1.fffffffffffffp+797, chars_format::scientific, 240,\r\n        \"1.\"\r\n        \"6670036082199633834453841497785725692293924978564853875047344858360246518029790768628551836663836828543791\"\r\n        \"9130496522862670968711798984152620245561087647836787000618779800360856711692006666982833422575115215325759\"\r\n        \"1260376204469333273987776512e+240\"},\r\n    {0x1.fffffffffffffp+798, chars_format::scientific, 240,\r\n        \"3.\"\r\n        \"3340072164399267668907682995571451384587849957129707750094689716720493036059581537257103673327673657087583\"\r\n        \"8260993045725341937423597968305240491122175295673574001237559600721713423384013333965666845150230430651518\"\r\n        \"2520752408938666547975553024e+240\"},\r\n    {0x1.fffffffffffffp+799, chars_format::scientific, 240,\r\n        \"6.\"\r\n        \"6680144328798535337815365991142902769175699914259415500189379433440986072119163074514207346655347314175167\"\r\n        \"6521986091450683874847195936610480982244350591347148002475119201443426846768026667931333690300460861303036\"\r\n        \"5041504817877333095951106048e+240\"},\r\n    {0x1.fffffffffffffp+800, chars_format::scientific, 241,\r\n        \"1.\"\r\n        \"3336028865759707067563073198228580553835139982851883100037875886688197214423832614902841469331069462835033\"\r\n        \"5304397218290136774969439187322096196448870118269429600495023840288685369353605333586266738060092172260607\"\r\n        \"30083009635754666191902212096e+241\"},\r\n    {0x1.fffffffffffffp+801, chars_format::scientific, 241,\r\n        \"2.\"\r\n        \"6672057731519414135126146396457161107670279965703766200075751773376394428847665229805682938662138925670067\"\r\n        \"0608794436580273549938878374644192392897740236538859200990047680577370738707210667172533476120184344521214\"\r\n        \"60166019271509332383804424192e+241\"},\r\n    {0x1.fffffffffffffp+802, chars_format::scientific, 241,\r\n        \"5.\"\r\n        \"3344115463038828270252292792914322215340559931407532400151503546752788857695330459611365877324277851340134\"\r\n        \"1217588873160547099877756749288384785795480473077718401980095361154741477414421334345066952240368689042429\"\r\n        \"20332038543018664767608848384e+241\"},\r\n    {0x1.fffffffffffffp+803, chars_format::scientific, 242,\r\n        \"1.\"\r\n        \"0668823092607765654050458558582864443068111986281506480030300709350557771539066091922273175464855570268026\"\r\n        \"8243517774632109419975551349857676957159096094615543680396019072230948295482884266869013390448073737808485\"\r\n        \"840664077086037329535217696768e+242\"},\r\n    {0x1.fffffffffffffp+804, chars_format::scientific, 242,\r\n        \"2.\"\r\n        \"1337646185215531308100917117165728886136223972563012960060601418701115543078132183844546350929711140536053\"\r\n        \"6487035549264218839951102699715353914318192189231087360792038144461896590965768533738026780896147475616971\"\r\n        \"681328154172074659070435393536e+242\"},\r\n    {0x1.fffffffffffffp+805, chars_format::scientific, 242,\r\n        \"4.\"\r\n        \"2675292370431062616201834234331457772272447945126025920121202837402231086156264367689092701859422281072107\"\r\n        \"2974071098528437679902205399430707828636384378462174721584076288923793181931537067476053561792294951233943\"\r\n        \"362656308344149318140870787072e+242\"},\r\n    {0x1.fffffffffffffp+806, chars_format::scientific, 242,\r\n        \"8.\"\r\n        \"5350584740862125232403668468662915544544895890252051840242405674804462172312528735378185403718844562144214\"\r\n        \"5948142197056875359804410798861415657272768756924349443168152577847586363863074134952107123584589902467886\"\r\n        \"725312616688298636281741574144e+242\"},\r\n    {0x1.fffffffffffffp+807, chars_format::scientific, 243,\r\n        \"1.\"\r\n        \"7070116948172425046480733693732583108908979178050410368048481134960892434462505747075637080743768912428842\"\r\n        \"9189628439411375071960882159772283131454553751384869888633630515569517272772614826990421424716917980493577\"\r\n        \"3450625233376597272563483148288e+243\"},\r\n    {0x1.fffffffffffffp+808, chars_format::scientific, 243,\r\n        \"3.\"\r\n        \"4140233896344850092961467387465166217817958356100820736096962269921784868925011494151274161487537824857685\"\r\n        \"8379256878822750143921764319544566262909107502769739777267261031139034545545229653980842849433835960987154\"\r\n        \"6901250466753194545126966296576e+243\"},\r\n    {0x1.fffffffffffffp+809, chars_format::scientific, 243,\r\n        \"6.\"\r\n        \"8280467792689700185922934774930332435635916712201641472193924539843569737850022988302548322975075649715371\"\r\n        \"6758513757645500287843528639089132525818215005539479554534522062278069091090459307961685698867671921974309\"\r\n        \"3802500933506389090253932593152e+243\"},\r\n    {0x1.fffffffffffffp+810, chars_format::scientific, 244,\r\n        \"1.\"\r\n        \"3656093558537940037184586954986066487127183342440328294438784907968713947570004597660509664595015129943074\"\r\n        \"3351702751529100057568705727817826505163643001107895910906904412455613818218091861592337139773534384394861\"\r\n        \"87605001867012778180507865186304e+244\"},\r\n    {0x1.fffffffffffffp+811, chars_format::scientific, 244,\r\n        \"2.\"\r\n        \"7312187117075880074369173909972132974254366684880656588877569815937427895140009195321019329190030259886148\"\r\n        \"6703405503058200115137411455635653010327286002215791821813808824911227636436183723184674279547068768789723\"\r\n        \"75210003734025556361015730372608e+244\"},\r\n    {0x1.fffffffffffffp+812, chars_format::scientific, 244,\r\n        \"5.\"\r\n        \"4624374234151760148738347819944265948508733369761313177755139631874855790280018390642038658380060519772297\"\r\n        \"3406811006116400230274822911271306020654572004431583643627617649822455272872367446369348559094137537579447\"\r\n        \"50420007468051112722031460745216e+244\"},\r\n    {0x1.fffffffffffffp+813, chars_format::scientific, 245,\r\n        \"1.\"\r\n        \"0924874846830352029747669563988853189701746673952262635551027926374971158056003678128407731676012103954459\"\r\n        \"4681362201223280046054964582254261204130914400886316728725523529964491054574473489273869711818827507515889\"\r\n        \"500840014936102225444062921490432e+245\"},\r\n    {0x1.fffffffffffffp+814, chars_format::scientific, 245,\r\n        \"2.\"\r\n        \"1849749693660704059495339127977706379403493347904525271102055852749942316112007356256815463352024207908918\"\r\n        \"9362724402446560092109929164508522408261828801772633457451047059928982109148946978547739423637655015031779\"\r\n        \"001680029872204450888125842980864e+245\"},\r\n    {0x1.fffffffffffffp+815, chars_format::scientific, 245,\r\n        \"4.\"\r\n        \"3699499387321408118990678255955412758806986695809050542204111705499884632224014712513630926704048415817837\"\r\n        \"8725448804893120184219858329017044816523657603545266914902094119857964218297893957095478847275310030063558\"\r\n        \"003360059744408901776251685961728e+245\"},\r\n    {0x1.fffffffffffffp+816, chars_format::scientific, 245,\r\n        \"8.\"\r\n        \"7398998774642816237981356511910825517613973391618101084408223410999769264448029425027261853408096831635675\"\r\n        \"7450897609786240368439716658034089633047315207090533829804188239715928436595787914190957694550620060127116\"\r\n        \"006720119488817803552503371923456e+245\"},\r\n    {0x1.fffffffffffffp+817, chars_format::scientific, 246,\r\n        \"1.\"\r\n        \"7479799754928563247596271302382165103522794678323620216881644682199953852889605885005452370681619366327135\"\r\n        \"1490179521957248073687943331606817926609463041418106765960837647943185687319157582838191538910124012025423\"\r\n        \"2013440238977635607105006743846912e+246\"},\r\n    {0x1.fffffffffffffp+818, chars_format::scientific, 246,\r\n        \"3.\"\r\n        \"4959599509857126495192542604764330207045589356647240433763289364399907705779211770010904741363238732654270\"\r\n        \"2980359043914496147375886663213635853218926082836213531921675295886371374638315165676383077820248024050846\"\r\n        \"4026880477955271214210013487693824e+246\"},\r\n    {0x1.fffffffffffffp+819, chars_format::scientific, 246,\r\n        \"6.\"\r\n        \"9919199019714252990385085209528660414091178713294480867526578728799815411558423540021809482726477465308540\"\r\n        \"5960718087828992294751773326427271706437852165672427063843350591772742749276630331352766155640496048101692\"\r\n        \"8053760955910542428420026975387648e+246\"},\r\n    {0x1.fffffffffffffp+820, chars_format::scientific, 247,\r\n        \"1.\"\r\n        \"3983839803942850598077017041905732082818235742658896173505315745759963082311684708004361896545295493061708\"\r\n        \"1192143617565798458950354665285454341287570433134485412768670118354548549855326066270553231128099209620338\"\r\n        \"56107521911821084856840053950775296e+247\"},\r\n    {0x1.fffffffffffffp+821, chars_format::scientific, 247,\r\n        \"2.\"\r\n        \"7967679607885701196154034083811464165636471485317792347010631491519926164623369416008723793090590986123416\"\r\n        \"2384287235131596917900709330570908682575140866268970825537340236709097099710652132541106462256198419240677\"\r\n        \"12215043823642169713680107901550592e+247\"},\r\n    {0x1.fffffffffffffp+822, chars_format::scientific, 247,\r\n        \"5.\"\r\n        \"5935359215771402392308068167622928331272942970635584694021262983039852329246738832017447586181181972246832\"\r\n        \"4768574470263193835801418661141817365150281732537941651074680473418194199421304265082212924512396838481354\"\r\n        \"24430087647284339427360215803101184e+247\"},\r\n    {0x1.fffffffffffffp+823, chars_format::scientific, 248,\r\n        \"1.\"\r\n        \"1187071843154280478461613633524585666254588594127116938804252596607970465849347766403489517236236394449366\"\r\n        \"4953714894052638767160283732228363473030056346507588330214936094683638839884260853016442584902479367696270\"\r\n        \"848860175294568678854720431606202368e+248\"},\r\n    {0x1.fffffffffffffp+824, chars_format::scientific, 248,\r\n        \"2.\"\r\n        \"2374143686308560956923227267049171332509177188254233877608505193215940931698695532806979034472472788898732\"\r\n        \"9907429788105277534320567464456726946060112693015176660429872189367277679768521706032885169804958735392541\"\r\n        \"697720350589137357709440863212404736e+248\"},\r\n    {0x1.fffffffffffffp+825, chars_format::scientific, 248,\r\n        \"4.\"\r\n        \"4748287372617121913846454534098342665018354376508467755217010386431881863397391065613958068944945577797465\"\r\n        \"9814859576210555068641134928913453892120225386030353320859744378734555359537043412065770339609917470785083\"\r\n        \"395440701178274715418881726424809472e+248\"},\r\n    {0x1.fffffffffffffp+826, chars_format::scientific, 248,\r\n        \"8.\"\r\n        \"9496574745234243827692909068196685330036708753016935510434020772863763726794782131227916137889891155594931\"\r\n        \"9629719152421110137282269857826907784240450772060706641719488757469110719074086824131540679219834941570166\"\r\n        \"790881402356549430837763452849618944e+248\"},\r\n    {0x1.fffffffffffffp+827, chars_format::scientific, 249,\r\n        \"1.\"\r\n        \"7899314949046848765538581813639337066007341750603387102086804154572752745358956426245583227577978231118986\"\r\n        \"3925943830484222027456453971565381556848090154412141328343897751493822143814817364826308135843966988314033\"\r\n        \"3581762804713098861675526905699237888e+249\"},\r\n    {0x1.fffffffffffffp+828, chars_format::scientific, 249,\r\n        \"3.\"\r\n        \"5798629898093697531077163627278674132014683501206774204173608309145505490717912852491166455155956462237972\"\r\n        \"7851887660968444054912907943130763113696180308824282656687795502987644287629634729652616271687933976628066\"\r\n        \"7163525609426197723351053811398475776e+249\"},\r\n    {0x1.fffffffffffffp+829, chars_format::scientific, 249,\r\n        \"7.\"\r\n        \"1597259796187395062154327254557348264029367002413548408347216618291010981435825704982332910311912924475945\"\r\n        \"5703775321936888109825815886261526227392360617648565313375591005975288575259269459305232543375867953256133\"\r\n        \"4327051218852395446702107622796951552e+249\"},\r\n    {0x1.fffffffffffffp+830, chars_format::scientific, 250,\r\n        \"1.\"\r\n        \"4319451959237479012430865450911469652805873400482709681669443323658202196287165140996466582062382584895189\"\r\n        \"1140755064387377621965163177252305245478472123529713062675118201195057715051853891861046508675173590651226\"\r\n        \"68654102437704790893404215245593903104e+250\"},\r\n    {0x1.fffffffffffffp+831, chars_format::scientific, 250,\r\n        \"2.\"\r\n        \"8638903918474958024861730901822939305611746800965419363338886647316404392574330281992933164124765169790378\"\r\n        \"2281510128774755243930326354504610490956944247059426125350236402390115430103707783722093017350347181302453\"\r\n        \"37308204875409581786808430491187806208e+250\"},\r\n    {0x1.fffffffffffffp+832, chars_format::scientific, 250,\r\n        \"5.\"\r\n        \"7277807836949916049723461803645878611223493601930838726677773294632808785148660563985866328249530339580756\"\r\n        \"4563020257549510487860652709009220981913888494118852250700472804780230860207415567444186034700694362604906\"\r\n        \"74616409750819163573616860982375612416e+250\"},\r\n    {0x1.fffffffffffffp+833, chars_format::scientific, 251,\r\n        \"1.\"\r\n        \"1455561567389983209944692360729175722244698720386167745335554658926561757029732112797173265649906067916151\"\r\n        \"2912604051509902097572130541801844196382777698823770450140094560956046172041483113488837206940138872520981\"\r\n        \"349232819501638327147233721964751224832e+251\"},\r\n    {0x1.fffffffffffffp+834, chars_format::scientific, 251,\r\n        \"2.\"\r\n        \"2911123134779966419889384721458351444489397440772335490671109317853123514059464225594346531299812135832302\"\r\n        \"5825208103019804195144261083603688392765555397647540900280189121912092344082966226977674413880277745041962\"\r\n        \"698465639003276654294467443929502449664e+251\"},\r\n    {0x1.fffffffffffffp+835, chars_format::scientific, 251,\r\n        \"4.\"\r\n        \"5822246269559932839778769442916702888978794881544670981342218635706247028118928451188693062599624271664605\"\r\n        \"1650416206039608390288522167207376785531110795295081800560378243824184688165932453955348827760555490083925\"\r\n        \"396931278006553308588934887859004899328e+251\"},\r\n    {0x1.fffffffffffffp+836, chars_format::scientific, 251,\r\n        \"9.\"\r\n        \"1644492539119865679557538885833405777957589763089341962684437271412494056237856902377386125199248543329210\"\r\n        \"3300832412079216780577044334414753571062221590590163601120756487648369376331864907910697655521110980167850\"\r\n        \"793862556013106617177869775718009798656e+251\"},\r\n    {0x1.fffffffffffffp+837, chars_format::scientific, 252,\r\n        \"1.\"\r\n        \"8328898507823973135911507777166681155591517952617868392536887454282498811247571380475477225039849708665842\"\r\n        \"0660166482415843356115408866882950714212444318118032720224151297529673875266372981582139531104222196033570\"\r\n        \"1587725112026213234355739551436019597312e+252\"},\r\n    {0x1.fffffffffffffp+838, chars_format::scientific, 252,\r\n        \"3.\"\r\n        \"6657797015647946271823015554333362311183035905235736785073774908564997622495142760950954450079699417331684\"\r\n        \"1320332964831686712230817733765901428424888636236065440448302595059347750532745963164279062208444392067140\"\r\n        \"3175450224052426468711479102872039194624e+252\"},\r\n    {0x1.fffffffffffffp+839, chars_format::scientific, 252,\r\n        \"7.\"\r\n        \"3315594031295892543646031108666724622366071810471473570147549817129995244990285521901908900159398834663368\"\r\n        \"2640665929663373424461635467531802856849777272472130880896605190118695501065491926328558124416888784134280\"\r\n        \"6350900448104852937422958205744078389248e+252\"},\r\n    {0x1.fffffffffffffp+840, chars_format::scientific, 253,\r\n        \"1.\"\r\n        \"4663118806259178508729206221733344924473214362094294714029509963425999048998057104380381780031879766932673\"\r\n        \"6528133185932674684892327093506360571369955454494426176179321038023739100213098385265711624883377756826856\"\r\n        \"12701800896209705874845916411488156778496e+253\"},\r\n    {0x1.fffffffffffffp+841, chars_format::scientific, 253,\r\n        \"2.\"\r\n        \"9326237612518357017458412443466689848946428724188589428059019926851998097996114208760763560063759533865347\"\r\n        \"3056266371865349369784654187012721142739910908988852352358642076047478200426196770531423249766755513653712\"\r\n        \"25403601792419411749691832822976313556992e+253\"},\r\n    {0x1.fffffffffffffp+842, chars_format::scientific, 253,\r\n        \"5.\"\r\n        \"8652475225036714034916824886933379697892857448377178856118039853703996195992228417521527120127519067730694\"\r\n        \"6112532743730698739569308374025442285479821817977704704717284152094956400852393541062846499533511027307424\"\r\n        \"50807203584838823499383665645952627113984e+253\"},\r\n    {0x1.fffffffffffffp+843, chars_format::scientific, 254,\r\n        \"1.\"\r\n        \"1730495045007342806983364977386675939578571489675435771223607970740799239198445683504305424025503813546138\"\r\n        \"9222506548746139747913861674805088457095964363595540940943456830418991280170478708212569299906702205461484\"\r\n        \"901614407169677646998767331291905254227968e+254\"},\r\n    {0x1.fffffffffffffp+844, chars_format::scientific, 254,\r\n        \"2.\"\r\n        \"3460990090014685613966729954773351879157142979350871542447215941481598478396891367008610848051007627092277\"\r\n        \"8445013097492279495827723349610176914191928727191081881886913660837982560340957416425138599813404410922969\"\r\n        \"803228814339355293997534662583810508455936e+254\"},\r\n    {0x1.fffffffffffffp+845, chars_format::scientific, 254,\r\n        \"4.\"\r\n        \"6921980180029371227933459909546703758314285958701743084894431882963196956793782734017221696102015254184555\"\r\n        \"6890026194984558991655446699220353828383857454382163763773827321675965120681914832850277199626808821845939\"\r\n        \"606457628678710587995069325167621016911872e+254\"},\r\n    {0x1.fffffffffffffp+846, chars_format::scientific, 254,\r\n        \"9.\"\r\n        \"3843960360058742455866919819093407516628571917403486169788863765926393913587565468034443392204030508369111\"\r\n        \"3780052389969117983310893398440707656767714908764327527547654643351930241363829665700554399253617643691879\"\r\n        \"212915257357421175990138650335242033823744e+254\"},\r\n    {0x1.fffffffffffffp+847, chars_format::scientific, 255,\r\n        \"1.\"\r\n        \"8768792072011748491173383963818681503325714383480697233957772753185278782717513093606888678440806101673822\"\r\n        \"2756010477993823596662178679688141531353542981752865505509530928670386048272765933140110879850723528738375\"\r\n        \"8425830514714842351980277300670484067647488e+255\"},\r\n    {0x1.fffffffffffffp+848, chars_format::scientific, 255,\r\n        \"3.\"\r\n        \"7537584144023496982346767927637363006651428766961394467915545506370557565435026187213777356881612203347644\"\r\n        \"5512020955987647193324357359376283062707085963505731011019061857340772096545531866280221759701447057476751\"\r\n        \"6851661029429684703960554601340968135294976e+255\"},\r\n    {0x1.fffffffffffffp+849, chars_format::scientific, 255,\r\n        \"7.\"\r\n        \"5075168288046993964693535855274726013302857533922788935831091012741115130870052374427554713763224406695289\"\r\n        \"1024041911975294386648714718752566125414171927011462022038123714681544193091063732560443519402894114953503\"\r\n        \"3703322058859369407921109202681936270589952e+255\"},\r\n    {0x1.fffffffffffffp+850, chars_format::scientific, 256,\r\n        \"1.\"\r\n        \"5015033657609398792938707171054945202660571506784557787166218202548223026174010474885510942752644881339057\"\r\n        \"8204808382395058877329742943750513225082834385402292404407624742936308838618212746512088703880578822990700\"\r\n        \"67406644117718738815842218405363872541179904e+256\"},\r\n    {0x1.fffffffffffffp+851, chars_format::scientific, 256,\r\n        \"3.\"\r\n        \"0030067315218797585877414342109890405321143013569115574332436405096446052348020949771021885505289762678115\"\r\n        \"6409616764790117754659485887501026450165668770804584808815249485872617677236425493024177407761157645981401\"\r\n        \"34813288235437477631684436810727745082359808e+256\"},\r\n    {0x1.fffffffffffffp+852, chars_format::scientific, 256,\r\n        \"6.\"\r\n        \"0060134630437595171754828684219780810642286027138231148664872810192892104696041899542043771010579525356231\"\r\n        \"2819233529580235509318971775002052900331337541609169617630498971745235354472850986048354815522315291962802\"\r\n        \"69626576470874955263368873621455490164719616e+256\"},\r\n    {0x1.fffffffffffffp+853, chars_format::scientific, 257,\r\n        \"1.\"\r\n        \"2012026926087519034350965736843956162128457205427646229732974562038578420939208379908408754202115905071246\"\r\n        \"2563846705916047101863794355000410580066267508321833923526099794349047070894570197209670963104463058392560\"\r\n        \"539253152941749910526737747242910980329439232e+257\"},\r\n    {0x1.fffffffffffffp+854, chars_format::scientific, 257,\r\n        \"2.\"\r\n        \"4024053852175038068701931473687912324256914410855292459465949124077156841878416759816817508404231810142492\"\r\n        \"5127693411832094203727588710000821160132535016643667847052199588698094141789140394419341926208926116785121\"\r\n        \"078506305883499821053475494485821960658878464e+257\"},\r\n    {0x1.fffffffffffffp+855, chars_format::scientific, 257,\r\n        \"4.\"\r\n        \"8048107704350076137403862947375824648513828821710584918931898248154313683756833519633635016808463620284985\"\r\n        \"0255386823664188407455177420001642320265070033287335694104399177396188283578280788838683852417852233570242\"\r\n        \"157012611766999642106950988971643921317756928e+257\"},\r\n    {0x1.fffffffffffffp+856, chars_format::scientific, 257,\r\n        \"9.\"\r\n        \"6096215408700152274807725894751649297027657643421169837863796496308627367513667039267270033616927240569970\"\r\n        \"0510773647328376814910354840003284640530140066574671388208798354792376567156561577677367704835704467140484\"\r\n        \"314025223533999284213901977943287842635513856e+257\"},\r\n    {0x1.fffffffffffffp+857, chars_format::scientific, 258,\r\n        \"1.\"\r\n        \"9219243081740030454961545178950329859405531528684233967572759299261725473502733407853454006723385448113994\"\r\n        \"0102154729465675362982070968000656928106028013314934277641759670958475313431312315535473540967140893428096\"\r\n        \"8628050447067998568427803955886575685271027712e+258\"},\r\n    {0x1.fffffffffffffp+858, chars_format::scientific, 258,\r\n        \"3.\"\r\n        \"8438486163480060909923090357900659718811063057368467935145518598523450947005466815706908013446770896227988\"\r\n        \"0204309458931350725964141936001313856212056026629868555283519341916950626862624631070947081934281786856193\"\r\n        \"7256100894135997136855607911773151370542055424e+258\"},\r\n    {0x1.fffffffffffffp+859, chars_format::scientific, 258,\r\n        \"7.\"\r\n        \"6876972326960121819846180715801319437622126114736935870291037197046901894010933631413816026893541792455976\"\r\n        \"0408618917862701451928283872002627712424112053259737110567038683833901253725249262141894163868563573712387\"\r\n        \"4512201788271994273711215823546302741084110848e+258\"},\r\n    {0x1.fffffffffffffp+860, chars_format::scientific, 259,\r\n        \"1.\"\r\n        \"5375394465392024363969236143160263887524425222947387174058207439409380378802186726282763205378708358491195\"\r\n        \"2081723783572540290385656774400525542484822410651947422113407736766780250745049852428378832773712714742477\"\r\n        \"49024403576543988547422431647092605482168221696e+259\"},\r\n    {0x1.fffffffffffffp+861, chars_format::scientific, 259,\r\n        \"3.\"\r\n        \"0750788930784048727938472286320527775048850445894774348116414878818760757604373452565526410757416716982390\"\r\n        \"4163447567145080580771313548801051084969644821303894844226815473533560501490099704856757665547425429484954\"\r\n        \"98048807153087977094844863294185210964336443392e+259\"},\r\n    {0x1.fffffffffffffp+862, chars_format::scientific, 259,\r\n        \"6.\"\r\n        \"1501577861568097455876944572641055550097700891789548696232829757637521515208746905131052821514833433964780\"\r\n        \"8326895134290161161542627097602102169939289642607789688453630947067121002980199409713515331094850858969909\"\r\n        \"96097614306175954189689726588370421928672886784e+259\"},\r\n    {0x1.fffffffffffffp+863, chars_format::scientific, 260,\r\n        \"1.\"\r\n        \"2300315572313619491175388914528211110019540178357909739246565951527504303041749381026210564302966686792956\"\r\n        \"1665379026858032232308525419520420433987857928521557937690726189413424200596039881942703066218970171793981\"\r\n        \"992195228612351908379379453176740843857345773568e+260\"},\r\n    {0x1.fffffffffffffp+864, chars_format::scientific, 260,\r\n        \"2.\"\r\n        \"4600631144627238982350777829056422220039080356715819478493131903055008606083498762052421128605933373585912\"\r\n        \"3330758053716064464617050839040840867975715857043115875381452378826848401192079763885406132437940343587963\"\r\n        \"984390457224703816758758906353481687714691547136e+260\"},\r\n    {0x1.fffffffffffffp+865, chars_format::scientific, 260,\r\n        \"4.\"\r\n        \"9201262289254477964701555658112844440078160713431638956986263806110017212166997524104842257211866747171824\"\r\n        \"6661516107432128929234101678081681735951431714086231750762904757653696802384159527770812264875880687175927\"\r\n        \"968780914449407633517517812706963375429383094272e+260\"},\r\n    {0x1.fffffffffffffp+866, chars_format::scientific, 260,\r\n        \"9.\"\r\n        \"8402524578508955929403111316225688880156321426863277913972527612220034424333995048209684514423733494343649\"\r\n        \"3323032214864257858468203356163363471902863428172463501525809515307393604768319055541624529751761374351855\"\r\n        \"937561828898815267035035625413926750858766188544e+260\"},\r\n    {0x1.fffffffffffffp+867, chars_format::scientific, 261,\r\n        \"1.\"\r\n        \"9680504915701791185880622263245137776031264285372655582794505522444006884866799009641936902884746698868729\"\r\n        \"8664606442972851571693640671232672694380572685634492700305161903061478720953663811108324905950352274870371\"\r\n        \"1875123657797630534070071250827853501717532377088e+261\"},\r\n    {0x1.fffffffffffffp+868, chars_format::scientific, 261,\r\n        \"3.\"\r\n        \"9361009831403582371761244526490275552062528570745311165589011044888013769733598019283873805769493397737459\"\r\n        \"7329212885945703143387281342465345388761145371268985400610323806122957441907327622216649811900704549740742\"\r\n        \"3750247315595261068140142501655707003435064754176e+261\"},\r\n    {0x1.fffffffffffffp+869, chars_format::scientific, 261,\r\n        \"7.\"\r\n        \"8722019662807164743522489052980551104125057141490622331178022089776027539467196038567747611538986795474919\"\r\n        \"4658425771891406286774562684930690777522290742537970801220647612245914883814655244433299623801409099481484\"\r\n        \"7500494631190522136280285003311414006870129508352e+261\"},\r\n    {0x1.fffffffffffffp+870, chars_format::scientific, 262,\r\n        \"1.\"\r\n        \"5744403932561432948704497810596110220825011428298124466235604417955205507893439207713549522307797359094983\"\r\n        \"8931685154378281257354912536986138155504458148507594160244129522449182976762931048886659924760281819896296\"\r\n        \"95000989262381044272560570006622828013740259016704e+262\"},\r\n    {0x1.fffffffffffffp+871, chars_format::scientific, 262,\r\n        \"3.\"\r\n        \"1488807865122865897408995621192220441650022856596248932471208835910411015786878415427099044615594718189967\"\r\n        \"7863370308756562514709825073972276311008916297015188320488259044898365953525862097773319849520563639792593\"\r\n        \"90001978524762088545121140013245656027480518033408e+262\"},\r\n    {0x1.fffffffffffffp+872, chars_format::scientific, 262,\r\n        \"6.\"\r\n        \"2977615730245731794817991242384440883300045713192497864942417671820822031573756830854198089231189436379935\"\r\n        \"5726740617513125029419650147944552622017832594030376640976518089796731907051724195546639699041127279585187\"\r\n        \"80003957049524177090242280026491312054961036066816e+262\"},\r\n    {0x1.fffffffffffffp+873, chars_format::scientific, 263,\r\n        \"1.\"\r\n        \"2595523146049146358963598248476888176660009142638499572988483534364164406314751366170839617846237887275987\"\r\n        \"1145348123502625005883930029588910524403566518806075328195303617959346381410344839109327939808225455917037\"\r\n        \"560007914099048354180484560052982624109922072133632e+263\"},\r\n    {0x1.fffffffffffffp+874, chars_format::scientific, 263,\r\n        \"2.\"\r\n        \"5191046292098292717927196496953776353320018285276999145976967068728328812629502732341679235692475774551974\"\r\n        \"2290696247005250011767860059177821048807133037612150656390607235918692762820689678218655879616450911834075\"\r\n        \"120015828198096708360969120105965248219844144267264e+263\"},\r\n    {0x1.fffffffffffffp+875, chars_format::scientific, 263,\r\n        \"5.\"\r\n        \"0382092584196585435854392993907552706640036570553998291953934137456657625259005464683358471384951549103948\"\r\n        \"4581392494010500023535720118355642097614266075224301312781214471837385525641379356437311759232901823668150\"\r\n        \"240031656396193416721938240211930496439688288534528e+263\"},\r\n    {0x1.fffffffffffffp+876, chars_format::scientific, 264,\r\n        \"1.\"\r\n        \"0076418516839317087170878598781510541328007314110799658390786827491331525051801092936671694276990309820789\"\r\n        \"6916278498802100004707144023671128419522853215044860262556242894367477105128275871287462351846580364733630\"\r\n        \"0480063312792386833443876480423860992879376577069056e+264\"},\r\n    {0x1.fffffffffffffp+877, chars_format::scientific, 264,\r\n        \"2.\"\r\n        \"0152837033678634174341757197563021082656014628221599316781573654982663050103602185873343388553980619641579\"\r\n        \"3832556997604200009414288047342256839045706430089720525112485788734954210256551742574924703693160729467260\"\r\n        \"0960126625584773666887752960847721985758753154138112e+264\"},\r\n    {0x1.fffffffffffffp+878, chars_format::scientific, 264,\r\n        \"4.\"\r\n        \"0305674067357268348683514395126042165312029256443198633563147309965326100207204371746686777107961239283158\"\r\n        \"7665113995208400018828576094684513678091412860179441050224971577469908420513103485149849407386321458934520\"\r\n        \"1920253251169547333775505921695443971517506308276224e+264\"},\r\n    {0x1.fffffffffffffp+879, chars_format::scientific, 264,\r\n        \"8.\"\r\n        \"0611348134714536697367028790252084330624058512886397267126294619930652200414408743493373554215922478566317\"\r\n        \"5330227990416800037657152189369027356182825720358882100449943154939816841026206970299698814772642917869040\"\r\n        \"3840506502339094667551011843390887943035012616552448e+264\"},\r\n    {0x1.fffffffffffffp+880, chars_format::scientific, 265,\r\n        \"1.\"\r\n        \"6122269626942907339473405758050416866124811702577279453425258923986130440082881748698674710843184495713263\"\r\n        \"5066045598083360007531430437873805471236565144071776420089988630987963368205241394059939762954528583573808\"\r\n        \"07681013004678189335102023686781775886070025233104896e+265\"},\r\n    {0x1.fffffffffffffp+881, chars_format::scientific, 265,\r\n        \"3.\"\r\n        \"2244539253885814678946811516100833732249623405154558906850517847972260880165763497397349421686368991426527\"\r\n        \"0132091196166720015062860875747610942473130288143552840179977261975926736410482788119879525909057167147616\"\r\n        \"15362026009356378670204047373563551772140050466209792e+265\"},\r\n    {0x1.fffffffffffffp+882, chars_format::scientific, 265,\r\n        \"6.\"\r\n        \"4489078507771629357893623032201667464499246810309117813701035695944521760331526994794698843372737982853054\"\r\n        \"0264182392333440030125721751495221884946260576287105680359954523951853472820965576239759051818114334295232\"\r\n        \"30724052018712757340408094747127103544280100932419584e+265\"},\r\n    {0x1.fffffffffffffp+883, chars_format::scientific, 266,\r\n        \"1.\"\r\n        \"2897815701554325871578724606440333492899849362061823562740207139188904352066305398958939768674547596570610\"\r\n        \"8052836478466688006025144350299044376989252115257421136071990904790370694564193115247951810363622866859046\"\r\n        \"461448104037425514680816189494254207088560201864839168e+266\"},\r\n    {0x1.fffffffffffffp+884, chars_format::scientific, 266,\r\n        \"2.\"\r\n        \"5795631403108651743157449212880666985799698724123647125480414278377808704132610797917879537349095193141221\"\r\n        \"6105672956933376012050288700598088753978504230514842272143981809580741389128386230495903620727245733718092\"\r\n        \"922896208074851029361632378988508414177120403729678336e+266\"},\r\n    {0x1.fffffffffffffp+885, chars_format::scientific, 266,\r\n        \"5.\"\r\n        \"1591262806217303486314898425761333971599397448247294250960828556755617408265221595835759074698190386282443\"\r\n        \"2211345913866752024100577401196177507957008461029684544287963619161482778256772460991807241454491467436185\"\r\n        \"845792416149702058723264757977016828354240807459356672e+266\"},\r\n    {0x1.fffffffffffffp+886, chars_format::scientific, 267,\r\n        \"1.\"\r\n        \"0318252561243460697262979685152266794319879489649458850192165711351123481653044319167151814939638077256488\"\r\n        \"6442269182773350404820115480239235501591401692205936908857592723832296555651354492198361448290898293487237\"\r\n        \"1691584832299404117446529515954033656708481614918713344e+267\"},\r\n    {0x1.fffffffffffffp+887, chars_format::scientific, 267,\r\n        \"2.\"\r\n        \"0636505122486921394525959370304533588639758979298917700384331422702246963306088638334303629879276154512977\"\r\n        \"2884538365546700809640230960478471003182803384411873817715185447664593111302708984396722896581796586974474\"\r\n        \"3383169664598808234893059031908067313416963229837426688e+267\"},\r\n    {0x1.fffffffffffffp+888, chars_format::scientific, 267,\r\n        \"4.\"\r\n        \"1273010244973842789051918740609067177279517958597835400768662845404493926612177276668607259758552309025954\"\r\n        \"5769076731093401619280461920956942006365606768823747635430370895329186222605417968793445793163593173948948\"\r\n        \"6766339329197616469786118063816134626833926459674853376e+267\"},\r\n    {0x1.fffffffffffffp+889, chars_format::scientific, 267,\r\n        \"8.\"\r\n        \"2546020489947685578103837481218134354559035917195670801537325690808987853224354553337214519517104618051909\"\r\n        \"1538153462186803238560923841913884012731213537647495270860741790658372445210835937586891586327186347897897\"\r\n        \"3532678658395232939572236127632269253667852919349706752e+267\"},\r\n    {0x1.fffffffffffffp+890, chars_format::scientific, 268,\r\n        \"1.\"\r\n        \"6509204097989537115620767496243626870911807183439134160307465138161797570644870910667442903903420923610381\"\r\n        \"8307630692437360647712184768382776802546242707529499054172148358131674489042167187517378317265437269579579\"\r\n        \"47065357316790465879144472255264538507335705838699413504e+268\"},\r\n    {0x1.fffffffffffffp+891, chars_format::scientific, 268,\r\n        \"3.\"\r\n        \"3018408195979074231241534992487253741823614366878268320614930276323595141289741821334885807806841847220763\"\r\n        \"6615261384874721295424369536765553605092485415058998108344296716263348978084334375034756634530874539159158\"\r\n        \"94130714633580931758288944510529077014671411677398827008e+268\"},\r\n    {0x1.fffffffffffffp+892, chars_format::scientific, 268,\r\n        \"6.\"\r\n        \"6036816391958148462483069984974507483647228733756536641229860552647190282579483642669771615613683694441527\"\r\n        \"3230522769749442590848739073531107210184970830117996216688593432526697956168668750069513269061749078318317\"\r\n        \"88261429267161863516577889021058154029342823354797654016e+268\"},\r\n    {0x1.fffffffffffffp+893, chars_format::scientific, 269,\r\n        \"1.\"\r\n        \"3207363278391629692496613996994901496729445746751307328245972110529438056515896728533954323122736738888305\"\r\n        \"4646104553949888518169747814706221442036994166023599243337718686505339591233733750013902653812349815663663\"\r\n        \"576522858534323727033155778042116308058685646709595308032e+269\"},\r\n    {0x1.fffffffffffffp+894, chars_format::scientific, 269,\r\n        \"2.\"\r\n        \"6414726556783259384993227993989802993458891493502614656491944221058876113031793457067908646245473477776610\"\r\n        \"9292209107899777036339495629412442884073988332047198486675437373010679182467467500027805307624699631327327\"\r\n        \"153045717068647454066311556084232616117371293419190616064e+269\"},\r\n    {0x1.fffffffffffffp+895, chars_format::scientific, 269,\r\n        \"5.\"\r\n        \"2829453113566518769986455987979605986917782987005229312983888442117752226063586914135817292490946955553221\"\r\n        \"8584418215799554072678991258824885768147976664094396973350874746021358364934935000055610615249399262654654\"\r\n        \"306091434137294908132623112168465232234742586838381232128e+269\"},\r\n    {0x1.fffffffffffffp+896, chars_format::scientific, 270,\r\n        \"1.\"\r\n        \"0565890622713303753997291197595921197383556597401045862596777688423550445212717382827163458498189391110644\"\r\n        \"3716883643159910814535798251764977153629595332818879394670174949204271672986987000011122123049879852530930\"\r\n        \"8612182868274589816265246224336930464469485173676762464256e+270\"},\r\n    {0x1.fffffffffffffp+897, chars_format::scientific, 270,\r\n        \"2.\"\r\n        \"1131781245426607507994582395191842394767113194802091725193555376847100890425434765654326916996378782221288\"\r\n        \"7433767286319821629071596503529954307259190665637758789340349898408543345973974000022244246099759705061861\"\r\n        \"7224365736549179632530492448673860928938970347353524928512e+270\"},\r\n    {0x1.fffffffffffffp+898, chars_format::scientific, 270,\r\n        \"4.\"\r\n        \"2263562490853215015989164790383684789534226389604183450387110753694201780850869531308653833992757564442577\"\r\n        \"4867534572639643258143193007059908614518381331275517578680699796817086691947948000044488492199519410123723\"\r\n        \"4448731473098359265060984897347721857877940694707049857024e+270\"},\r\n    {0x1.fffffffffffffp+899, chars_format::scientific, 270,\r\n        \"8.\"\r\n        \"4527124981706430031978329580767369579068452779208366900774221507388403561701739062617307667985515128885154\"\r\n        \"9735069145279286516286386014119817229036762662551035157361399593634173383895896000088976984399038820247446\"\r\n        \"8897462946196718530121969794695443715755881389414099714048e+270\"},\r\n    {0x1.fffffffffffffp+900, chars_format::scientific, 271,\r\n        \"1.\"\r\n        \"6905424996341286006395665916153473915813690555841673380154844301477680712340347812523461533597103025777030\"\r\n        \"9947013829055857303257277202823963445807352532510207031472279918726834676779179200017795396879807764049489\"\r\n        \"37794925892393437060243939589390887431511762778828199428096e+271\"},\r\n    {0x1.fffffffffffffp+901, chars_format::scientific, 271,\r\n        \"3.\"\r\n        \"3810849992682572012791331832306947831627381111683346760309688602955361424680695625046923067194206051554061\"\r\n        \"9894027658111714606514554405647926891614705065020414062944559837453669353558358400035590793759615528098978\"\r\n        \"75589851784786874120487879178781774863023525557656398856192e+271\"},\r\n    {0x1.fffffffffffffp+902, chars_format::scientific, 271,\r\n        \"6.\"\r\n        \"7621699985365144025582663664613895663254762223366693520619377205910722849361391250093846134388412103108123\"\r\n        \"9788055316223429213029108811295853783229410130040828125889119674907338707116716800071181587519231056197957\"\r\n        \"51179703569573748240975758357563549726047051115312797712384e+271\"},\r\n    {0x1.fffffffffffffp+903, chars_format::scientific, 272,\r\n        \"1.\"\r\n        \"3524339997073028805116532732922779132650952444673338704123875441182144569872278250018769226877682420621624\"\r\n        \"7957611063244685842605821762259170756645882026008165625177823934981467741423343360014236317503846211239591\"\r\n        \"502359407139147496481951516715127099452094102230625595424768e+272\"},\r\n    {0x1.fffffffffffffp+904, chars_format::scientific, 272,\r\n        \"2.\"\r\n        \"7048679994146057610233065465845558265301904889346677408247750882364289139744556500037538453755364841243249\"\r\n        \"5915222126489371685211643524518341513291764052016331250355647869962935482846686720028472635007692422479183\"\r\n        \"004718814278294992963903033430254198904188204461251190849536e+272\"},\r\n    {0x1.fffffffffffffp+905, chars_format::scientific, 272,\r\n        \"5.\"\r\n        \"4097359988292115220466130931691116530603809778693354816495501764728578279489113000075076907510729682486499\"\r\n        \"1830444252978743370423287049036683026583528104032662500711295739925870965693373440056945270015384844958366\"\r\n        \"009437628556589985927806066860508397808376408922502381699072e+272\"},\r\n    {0x1.fffffffffffffp+906, chars_format::scientific, 273,\r\n        \"1.\"\r\n        \"0819471997658423044093226186338223306120761955738670963299100352945715655897822600015015381502145936497299\"\r\n        \"8366088850595748674084657409807336605316705620806532500142259147985174193138674688011389054003076968991673\"\r\n        \"2018875257113179971855612133721016795616752817845004763398144e+273\"},\r\n    {0x1.fffffffffffffp+907, chars_format::scientific, 273,\r\n        \"2.\"\r\n        \"1638943995316846088186452372676446612241523911477341926598200705891431311795645200030030763004291872994599\"\r\n        \"6732177701191497348169314819614673210633411241613065000284518295970348386277349376022778108006153937983346\"\r\n        \"4037750514226359943711224267442033591233505635690009526796288e+273\"},\r\n    {0x1.fffffffffffffp+908, chars_format::scientific, 273,\r\n        \"4.\"\r\n        \"3277887990633692176372904745352893224483047822954683853196401411782862623591290400060061526008583745989199\"\r\n        \"3464355402382994696338629639229346421266822483226130000569036591940696772554698752045556216012307875966692\"\r\n        \"8075501028452719887422448534884067182467011271380019053592576e+273\"},\r\n    {0x1.fffffffffffffp+909, chars_format::scientific, 273,\r\n        \"8.\"\r\n        \"6555775981267384352745809490705786448966095645909367706392802823565725247182580800120123052017167491978398\"\r\n        \"6928710804765989392677259278458692842533644966452260001138073183881393545109397504091112432024615751933385\"\r\n        \"6151002056905439774844897069768134364934022542760038107185152e+273\"},\r\n    {0x1.fffffffffffffp+910, chars_format::scientific, 274,\r\n        \"1.\"\r\n        \"7311155196253476870549161898141157289793219129181873541278560564713145049436516160024024610403433498395679\"\r\n        \"7385742160953197878535451855691738568506728993290452000227614636776278709021879500818222486404923150386677\"\r\n        \"12302004113810879549689794139536268729868045085520076214370304e+274\"},\r\n    {0x1.fffffffffffffp+911, chars_format::scientific, 274,\r\n        \"3.\"\r\n        \"4622310392506953741098323796282314579586438258363747082557121129426290098873032320048049220806866996791359\"\r\n        \"4771484321906395757070903711383477137013457986580904000455229273552557418043759001636444972809846300773354\"\r\n        \"24604008227621759099379588279072537459736090171040152428740608e+274\"},\r\n    {0x1.fffffffffffffp+912, chars_format::scientific, 274,\r\n        \"6.\"\r\n        \"9244620785013907482196647592564629159172876516727494165114242258852580197746064640096098441613733993582718\"\r\n        \"9542968643812791514141807422766954274026915973161808000910458547105114836087518003272889945619692601546708\"\r\n        \"49208016455243518198759176558145074919472180342080304857481216e+274\"},\r\n    {0x1.fffffffffffffp+913, chars_format::scientific, 275,\r\n        \"1.\"\r\n        \"3848924157002781496439329518512925831834575303345498833022848451770516039549212928019219688322746798716543\"\r\n        \"7908593728762558302828361484553390854805383194632361600182091709421022967217503600654577989123938520309341\"\r\n        \"698416032910487036397518353116290149838944360684160609714962432e+275\"},\r\n    {0x1.fffffffffffffp+914, chars_format::scientific, 275,\r\n        \"2.\"\r\n        \"7697848314005562992878659037025851663669150606690997666045696903541032079098425856038439376645493597433087\"\r\n        \"5817187457525116605656722969106781709610766389264723200364183418842045934435007201309155978247877040618683\"\r\n        \"396832065820974072795036706232580299677888721368321219429924864e+275\"},\r\n    {0x1.fffffffffffffp+915, chars_format::scientific, 275,\r\n        \"5.\"\r\n        \"5395696628011125985757318074051703327338301213381995332091393807082064158196851712076878753290987194866175\"\r\n        \"1634374915050233211313445938213563419221532778529446400728366837684091868870014402618311956495754081237366\"\r\n        \"793664131641948145590073412465160599355777442736642438859849728e+275\"},\r\n    {0x1.fffffffffffffp+916, chars_format::scientific, 276,\r\n        \"1.\"\r\n        \"1079139325602225197151463614810340665467660242676399066418278761416412831639370342415375750658197438973235\"\r\n        \"0326874983010046642262689187642712683844306555705889280145673367536818373774002880523662391299150816247473\"\r\n        \"3587328263283896291180146824930321198711554885473284877719699456e+276\"},\r\n    {0x1.fffffffffffffp+917, chars_format::scientific, 276,\r\n        \"2.\"\r\n        \"2158278651204450394302927229620681330935320485352798132836557522832825663278740684830751501316394877946470\"\r\n        \"0653749966020093284525378375285425367688613111411778560291346735073636747548005761047324782598301632494946\"\r\n        \"7174656526567792582360293649860642397423109770946569755439398912e+276\"},\r\n    {0x1.fffffffffffffp+918, chars_format::scientific, 276,\r\n        \"4.\"\r\n        \"4316557302408900788605854459241362661870640970705596265673115045665651326557481369661503002632789755892940\"\r\n        \"1307499932040186569050756750570850735377226222823557120582693470147273495096011522094649565196603264989893\"\r\n        \"4349313053135585164720587299721284794846219541893139510878797824e+276\"},\r\n    {0x1.fffffffffffffp+919, chars_format::scientific, 276,\r\n        \"8.\"\r\n        \"8633114604817801577211708918482725323741281941411192531346230091331302653114962739323006005265579511785880\"\r\n        \"2614999864080373138101513501141701470754452445647114241165386940294546990192023044189299130393206529979786\"\r\n        \"8698626106271170329441174599442569589692439083786279021757595648e+276\"},\r\n    {0x1.fffffffffffffp+920, chars_format::scientific, 277,\r\n        \"1.\"\r\n        \"7726622920963560315442341783696545064748256388282238506269246018266260530622992547864601201053115902357176\"\r\n        \"0522999972816074627620302700228340294150890489129422848233077388058909398038404608837859826078641305995957\"\r\n        \"37397252212542340658882349198885139179384878167572558043515191296e+277\"},\r\n    {0x1.fffffffffffffp+921, chars_format::scientific, 277,\r\n        \"3.\"\r\n        \"5453245841927120630884683567393090129496512776564477012538492036532521061245985095729202402106231804714352\"\r\n        \"1045999945632149255240605400456680588301780978258845696466154776117818796076809217675719652157282611991914\"\r\n        \"74794504425084681317764698397770278358769756335145116087030382592e+277\"},\r\n    {0x1.fffffffffffffp+922, chars_format::scientific, 277,\r\n        \"7.\"\r\n        \"0906491683854241261769367134786180258993025553128954025076984073065042122491970191458404804212463609428704\"\r\n        \"2091999891264298510481210800913361176603561956517691392932309552235637592153618435351439304314565223983829\"\r\n        \"49589008850169362635529396795540556717539512670290232174060765184e+277\"},\r\n    {0x1.fffffffffffffp+923, chars_format::scientific, 278,\r\n        \"1.\"\r\n        \"4181298336770848252353873426957236051798605110625790805015396814613008424498394038291680960842492721885740\"\r\n        \"8418399978252859702096242160182672235320712391303538278586461910447127518430723687070287860862913044796765\"\r\n        \"899178017700338725271058793591081113435079025340580464348121530368e+278\"},\r\n    {0x1.fffffffffffffp+924, chars_format::scientific, 278,\r\n        \"2.\"\r\n        \"8362596673541696504707746853914472103597210221251581610030793629226016848996788076583361921684985443771481\"\r\n        \"6836799956505719404192484320365344470641424782607076557172923820894255036861447374140575721725826089593531\"\r\n        \"798356035400677450542117587182162226870158050681160928696243060736e+278\"},\r\n    {0x1.fffffffffffffp+925, chars_format::scientific, 278,\r\n        \"5.\"\r\n        \"6725193347083393009415493707828944207194420442503163220061587258452033697993576153166723843369970887542963\"\r\n        \"3673599913011438808384968640730688941282849565214153114345847641788510073722894748281151443451652179187063\"\r\n        \"596712070801354901084235174364324453740316101362321857392486121472e+278\"},\r\n    {0x1.fffffffffffffp+926, chars_format::scientific, 279,\r\n        \"1.\"\r\n        \"1345038669416678601883098741565788841438884088500632644012317451690406739598715230633344768673994177508592\"\r\n        \"6734719982602287761676993728146137788256569913042830622869169528357702014744578949656230288690330435837412\"\r\n        \"7193424141602709802168470348728648907480632202724643714784972242944e+279\"},\r\n    {0x1.fffffffffffffp+927, chars_format::scientific, 279,\r\n        \"2.\"\r\n        \"2690077338833357203766197483131577682877768177001265288024634903380813479197430461266689537347988355017185\"\r\n        \"3469439965204575523353987456292275576513139826085661245738339056715404029489157899312460577380660871674825\"\r\n        \"4386848283205419604336940697457297814961264405449287429569944485888e+279\"},\r\n    {0x1.fffffffffffffp+928, chars_format::scientific, 279,\r\n        \"4.\"\r\n        \"5380154677666714407532394966263155365755536354002530576049269806761626958394860922533379074695976710034370\"\r\n        \"6938879930409151046707974912584551153026279652171322491476678113430808058978315798624921154761321743349650\"\r\n        \"8773696566410839208673881394914595629922528810898574859139888971776e+279\"},\r\n    {0x1.fffffffffffffp+929, chars_format::scientific, 279,\r\n        \"9.\"\r\n        \"0760309355333428815064789932526310731511072708005061152098539613523253916789721845066758149391953420068741\"\r\n        \"3877759860818302093415949825169102306052559304342644982953356226861616117956631597249842309522643486699301\"\r\n        \"7547393132821678417347762789829191259845057621797149718279777943552e+279\"},\r\n    {0x1.fffffffffffffp+930, chars_format::scientific, 280,\r\n        \"1.\"\r\n        \"8152061871066685763012957986505262146302214541601012230419707922704650783357944369013351629878390684013748\"\r\n        \"2775551972163660418683189965033820461210511860868528996590671245372323223591326319449968461904528697339860\"\r\n        \"35094786265643356834695525579658382519690115243594299436559555887104e+280\"},\r\n    {0x1.fffffffffffffp+931, chars_format::scientific, 280,\r\n        \"3.\"\r\n        \"6304123742133371526025915973010524292604429083202024460839415845409301566715888738026703259756781368027496\"\r\n        \"5551103944327320837366379930067640922421023721737057993181342490744646447182652638899936923809057394679720\"\r\n        \"70189572531286713669391051159316765039380230487188598873119111774208e+280\"},\r\n    {0x1.fffffffffffffp+932, chars_format::scientific, 280,\r\n        \"7.\"\r\n        \"2608247484266743052051831946021048585208858166404048921678831690818603133431777476053406519513562736054993\"\r\n        \"1102207888654641674732759860135281844842047443474115986362684981489292894365305277799873847618114789359441\"\r\n        \"40379145062573427338782102318633530078760460974377197746238223548416e+280\"},\r\n    {0x1.fffffffffffffp+933, chars_format::scientific, 281,\r\n        \"1.\"\r\n        \"4521649496853348610410366389204209717041771633280809784335766338163720626686355495210681303902712547210998\"\r\n        \"6220441577730928334946551972027056368968409488694823197272536996297858578873061055559974769523622957871888\"\r\n        \"280758290125146854677564204637267060157520921948754395492476447096832e+281\"},\r\n    {0x1.fffffffffffffp+934, chars_format::scientific, 281,\r\n        \"2.\"\r\n        \"9043298993706697220820732778408419434083543266561619568671532676327441253372710990421362607805425094421997\"\r\n        \"2440883155461856669893103944054112737936818977389646394545073992595717157746122111119949539047245915743776\"\r\n        \"561516580250293709355128409274534120315041843897508790984952894193664e+281\"},\r\n    {0x1.fffffffffffffp+935, chars_format::scientific, 281,\r\n        \"5.\"\r\n        \"8086597987413394441641465556816838868167086533123239137343065352654882506745421980842725215610850188843994\"\r\n        \"4881766310923713339786207888108225475873637954779292789090147985191434315492244222239899078094491831487553\"\r\n        \"123033160500587418710256818549068240630083687795017581969905788387328e+281\"},\r\n    {0x1.fffffffffffffp+936, chars_format::scientific, 282,\r\n        \"1.\"\r\n        \"1617319597482678888328293111363367773633417306624647827468613070530976501349084396168545043122170037768798\"\r\n        \"8976353262184742667957241577621645095174727590955858557818029597038286863098448844447979815618898366297510\"\r\n        \"6246066321001174837420513637098136481260167375590035163939811576774656e+282\"},\r\n    {0x1.fffffffffffffp+937, chars_format::scientific, 282,\r\n        \"2.\"\r\n        \"3234639194965357776656586222726735547266834613249295654937226141061953002698168792337090086244340075537597\"\r\n        \"7952706524369485335914483155243290190349455181911717115636059194076573726196897688895959631237796732595021\"\r\n        \"2492132642002349674841027274196272962520334751180070327879623153549312e+282\"},\r\n    {0x1.fffffffffffffp+938, chars_format::scientific, 282,\r\n        \"4.\"\r\n        \"6469278389930715553313172445453471094533669226498591309874452282123906005396337584674180172488680151075195\"\r\n        \"5905413048738970671828966310486580380698910363823434231272118388153147452393795377791919262475593465190042\"\r\n        \"4984265284004699349682054548392545925040669502360140655759246307098624e+282\"},\r\n    {0x1.fffffffffffffp+939, chars_format::scientific, 282,\r\n        \"9.\"\r\n        \"2938556779861431106626344890906942189067338452997182619748904564247812010792675169348360344977360302150391\"\r\n        \"1810826097477941343657932620973160761397820727646868462544236776306294904787590755583838524951186930380084\"\r\n        \"9968530568009398699364109096785091850081339004720281311518492614197248e+282\"},\r\n    {0x1.fffffffffffffp+940, chars_format::scientific, 283,\r\n        \"1.\"\r\n        \"8587711355972286221325268978181388437813467690599436523949780912849562402158535033869672068995472060430078\"\r\n        \"2362165219495588268731586524194632152279564145529373692508847355261258980957518151116767704990237386076016\"\r\n        \"99937061136018797398728218193570183700162678009440562623036985228394496e+283\"},\r\n    {0x1.fffffffffffffp+941, chars_format::scientific, 283,\r\n        \"3.\"\r\n        \"7175422711944572442650537956362776875626935381198873047899561825699124804317070067739344137990944120860156\"\r\n        \"4724330438991176537463173048389264304559128291058747385017694710522517961915036302233535409980474772152033\"\r\n        \"99874122272037594797456436387140367400325356018881125246073970456788992e+283\"},\r\n    {0x1.fffffffffffffp+942, chars_format::scientific, 283,\r\n        \"7.\"\r\n        \"4350845423889144885301075912725553751253870762397746095799123651398249608634140135478688275981888241720312\"\r\n        \"9448660877982353074926346096778528609118256582117494770035389421045035923830072604467070819960949544304067\"\r\n        \"99748244544075189594912872774280734800650712037762250492147940913577984e+283\"},\r\n    {0x1.fffffffffffffp+943, chars_format::scientific, 284,\r\n        \"1.\"\r\n        \"4870169084777828977060215182545110750250774152479549219159824730279649921726828027095737655196377648344062\"\r\n        \"5889732175596470614985269219355705721823651316423498954007077884209007184766014520893414163992189908860813\"\r\n        \"599496489088150379189825745548561469601301424075524500984295881827155968e+284\"},\r\n    {0x1.fffffffffffffp+944, chars_format::scientific, 284,\r\n        \"2.\"\r\n        \"9740338169555657954120430365090221500501548304959098438319649460559299843453656054191475310392755296688125\"\r\n        \"1779464351192941229970538438711411443647302632846997908014155768418014369532029041786828327984379817721627\"\r\n        \"198992978176300758379651491097122939202602848151049001968591763654311936e+284\"},\r\n    {0x1.fffffffffffffp+945, chars_format::scientific, 284,\r\n        \"5.\"\r\n        \"9480676339111315908240860730180443001003096609918196876639298921118599686907312108382950620785510593376250\"\r\n        \"3558928702385882459941076877422822887294605265693995816028311536836028739064058083573656655968759635443254\"\r\n        \"397985956352601516759302982194245878405205696302098003937183527308623872e+284\"},\r\n    {0x1.fffffffffffffp+946, chars_format::scientific, 285,\r\n        \"1.\"\r\n        \"1896135267822263181648172146036088600200619321983639375327859784223719937381462421676590124157102118675250\"\r\n        \"0711785740477176491988215375484564577458921053138799163205662307367205747812811616714731331193751927088650\"\r\n        \"8795971912705203033518605964388491756810411392604196007874367054617247744e+285\"},\r\n    {0x1.fffffffffffffp+947, chars_format::scientific, 285,\r\n        \"2.\"\r\n        \"3792270535644526363296344292072177200401238643967278750655719568447439874762924843353180248314204237350500\"\r\n        \"1423571480954352983976430750969129154917842106277598326411324614734411495625623233429462662387503854177301\"\r\n        \"7591943825410406067037211928776983513620822785208392015748734109234495488e+285\"},\r\n    {0x1.fffffffffffffp+948, chars_format::scientific, 285,\r\n        \"4.\"\r\n        \"7584541071289052726592688584144354400802477287934557501311439136894879749525849686706360496628408474701000\"\r\n        \"2847142961908705967952861501938258309835684212555196652822649229468822991251246466858925324775007708354603\"\r\n        \"5183887650820812134074423857553967027241645570416784031497468218468990976e+285\"},\r\n    {0x1.fffffffffffffp+949, chars_format::scientific, 285,\r\n        \"9.\"\r\n        \"5169082142578105453185377168288708801604954575869115002622878273789759499051699373412720993256816949402000\"\r\n        \"5694285923817411935905723003876516619671368425110393305645298458937645982502492933717850649550015416709207\"\r\n        \"0367775301641624268148847715107934054483291140833568062994936436937981952e+285\"},\r\n    {0x1.fffffffffffffp+950, chars_format::scientific, 286,\r\n        \"1.\"\r\n        \"9033816428515621090637075433657741760320990915173823000524575654757951899810339874682544198651363389880400\"\r\n        \"1138857184763482387181144600775303323934273685022078661129059691787529196500498586743570129910003083341841\"\r\n        \"40735550603283248536297695430215868108966582281667136125989872873875963904e+286\"},\r\n    {0x1.fffffffffffffp+951, chars_format::scientific, 286,\r\n        \"3.\"\r\n        \"8067632857031242181274150867315483520641981830347646001049151309515903799620679749365088397302726779760800\"\r\n        \"2277714369526964774362289201550606647868547370044157322258119383575058393000997173487140259820006166683682\"\r\n        \"81471101206566497072595390860431736217933164563334272251979745747751927808e+286\"},\r\n    {0x1.fffffffffffffp+952, chars_format::scientific, 286,\r\n        \"7.\"\r\n        \"6135265714062484362548301734630967041283963660695292002098302619031807599241359498730176794605453559521600\"\r\n        \"4555428739053929548724578403101213295737094740088314644516238767150116786001994346974280519640012333367365\"\r\n        \"62942202413132994145190781720863472435866329126668544503959491495503855616e+286\"},\r\n    {0x1.fffffffffffffp+953, chars_format::scientific, 287,\r\n        \"1.\"\r\n        \"5227053142812496872509660346926193408256792732139058400419660523806361519848271899746035358921090711904320\"\r\n        \"0911085747810785909744915680620242659147418948017662928903247753430023357200398869394856103928002466673473\"\r\n        \"125884404826265988290381563441726944871732658253337089007918982991007711232e+287\"},\r\n    {0x1.fffffffffffffp+954, chars_format::scientific, 287,\r\n        \"3.\"\r\n        \"0454106285624993745019320693852386816513585464278116800839321047612723039696543799492070717842181423808640\"\r\n        \"1822171495621571819489831361240485318294837896035325857806495506860046714400797738789712207856004933346946\"\r\n        \"251768809652531976580763126883453889743465316506674178015837965982015422464e+287\"},\r\n    {0x1.fffffffffffffp+955, chars_format::scientific, 287,\r\n        \"6.\"\r\n        \"0908212571249987490038641387704773633027170928556233601678642095225446079393087598984141435684362847617280\"\r\n        \"3644342991243143638979662722480970636589675792070651715612991013720093428801595477579424415712009866693892\"\r\n        \"503537619305063953161526253766907779486930633013348356031675931964030844928e+287\"},\r\n    {0x1.fffffffffffffp+956, chars_format::scientific, 288,\r\n        \"1.\"\r\n        \"2181642514249997498007728277540954726605434185711246720335728419045089215878617519796828287136872569523456\"\r\n        \"0728868598248628727795932544496194127317935158414130343122598202744018685760319095515884883142401973338778\"\r\n        \"5007075238610127906323052507533815558973861266026696712063351863928061689856e+288\"},\r\n    {0x1.fffffffffffffp+957, chars_format::scientific, 288,\r\n        \"2.\"\r\n        \"4363285028499994996015456555081909453210868371422493440671456838090178431757235039593656574273745139046912\"\r\n        \"1457737196497257455591865088992388254635870316828260686245196405488037371520638191031769766284803946677557\"\r\n        \"0014150477220255812646105015067631117947722532053393424126703727856123379712e+288\"},\r\n    {0x1.fffffffffffffp+958, chars_format::scientific, 288,\r\n        \"4.\"\r\n        \"8726570056999989992030913110163818906421736742844986881342913676180356863514470079187313148547490278093824\"\r\n        \"2915474392994514911183730177984776509271740633656521372490392810976074743041276382063539532569607893355114\"\r\n        \"0028300954440511625292210030135262235895445064106786848253407455712246759424e+288\"},\r\n    {0x1.fffffffffffffp+959, chars_format::scientific, 288,\r\n        \"9.\"\r\n        \"7453140113999979984061826220327637812843473485689973762685827352360713727028940158374626297094980556187648\"\r\n        \"5830948785989029822367460355969553018543481267313042744980785621952149486082552764127079065139215786710228\"\r\n        \"0056601908881023250584420060270524471790890128213573696506814911424493518848e+288\"},\r\n    {0x1.fffffffffffffp+960, chars_format::scientific, 289,\r\n        \"1.\"\r\n        \"9490628022799995996812365244065527562568694697137994752537165470472142745405788031674925259418996111237529\"\r\n        \"7166189757197805964473492071193910603708696253462608548996157124390429897216510552825415813027843157342045\"\r\n        \"60113203817762046501168840120541048943581780256427147393013629822848987037696e+289\"},\r\n    {0x1.fffffffffffffp+961, chars_format::scientific, 289,\r\n        \"3.\"\r\n        \"8981256045599991993624730488131055125137389394275989505074330940944285490811576063349850518837992222475059\"\r\n        \"4332379514395611928946984142387821207417392506925217097992314248780859794433021105650831626055686314684091\"\r\n        \"20226407635524093002337680241082097887163560512854294786027259645697974075392e+289\"},\r\n    {0x1.fffffffffffffp+962, chars_format::scientific, 289,\r\n        \"7.\"\r\n        \"7962512091199983987249460976262110250274778788551979010148661881888570981623152126699701037675984444950118\"\r\n        \"8664759028791223857893968284775642414834785013850434195984628497561719588866042211301663252111372629368182\"\r\n        \"40452815271048186004675360482164195774327121025708589572054519291395948150784e+289\"},\r\n    {0x1.fffffffffffffp+963, chars_format::scientific, 290,\r\n        \"1.\"\r\n        \"5592502418239996797449892195252422050054955757710395802029732376377714196324630425339940207535196888990023\"\r\n        \"7732951805758244771578793656955128482966957002770086839196925699512343917773208442260332650422274525873636\"\r\n        \"480905630542096372009350720964328391548654242051417179144109038582791896301568e+290\"},\r\n    {0x1.fffffffffffffp+964, chars_format::scientific, 290,\r\n        \"3.\"\r\n        \"1185004836479993594899784390504844100109911515420791604059464752755428392649260850679880415070393777980047\"\r\n        \"5465903611516489543157587313910256965933914005540173678393851399024687835546416884520665300844549051747272\"\r\n        \"961811261084192744018701441928656783097308484102834358288218077165583792603136e+290\"},\r\n    {0x1.fffffffffffffp+965, chars_format::scientific, 290,\r\n        \"6.\"\r\n        \"2370009672959987189799568781009688200219823030841583208118929505510856785298521701359760830140787555960095\"\r\n        \"0931807223032979086315174627820513931867828011080347356787702798049375671092833769041330601689098103494545\"\r\n        \"923622522168385488037402883857313566194616968205668716576436154331167585206272e+290\"},\r\n    {0x1.fffffffffffffp+966, chars_format::scientific, 291,\r\n        \"1.\"\r\n        \"2474001934591997437959913756201937640043964606168316641623785901102171357059704340271952166028157511192019\"\r\n        \"0186361444606595817263034925564102786373565602216069471357540559609875134218566753808266120337819620698909\"\r\n        \"1847245044336770976074805767714627132389233936411337433152872308662335170412544e+291\"},\r\n    {0x1.fffffffffffffp+967, chars_format::scientific, 291,\r\n        \"2.\"\r\n        \"4948003869183994875919827512403875280087929212336633283247571802204342714119408680543904332056315022384038\"\r\n        \"0372722889213191634526069851128205572747131204432138942715081119219750268437133507616532240675639241397818\"\r\n        \"3694490088673541952149611535429254264778467872822674866305744617324670340825088e+291\"},\r\n    {0x1.fffffffffffffp+968, chars_format::scientific, 291,\r\n        \"4.\"\r\n        \"9896007738367989751839655024807750560175858424673266566495143604408685428238817361087808664112630044768076\"\r\n        \"0745445778426383269052139702256411145494262408864277885430162238439500536874267015233064481351278482795636\"\r\n        \"7388980177347083904299223070858508529556935745645349732611489234649340681650176e+291\"},\r\n    {0x1.fffffffffffffp+969, chars_format::scientific, 291,\r\n        \"9.\"\r\n        \"9792015476735979503679310049615501120351716849346533132990287208817370856477634722175617328225260089536152\"\r\n        \"1490891556852766538104279404512822290988524817728555770860324476879001073748534030466128962702556965591273\"\r\n        \"4777960354694167808598446141717017059113871491290699465222978469298681363300352e+291\"},\r\n    {0x1.fffffffffffffp+970, chars_format::scientific, 292,\r\n        \"1.\"\r\n        \"9958403095347195900735862009923100224070343369869306626598057441763474171295526944435123465645052017907230\"\r\n        \"4298178311370553307620855880902564458197704963545711154172064895375800214749706806093225792540511393118254\"\r\n        \"69555920709388335617196892283434034118227742982581398930445956938597362726600704e+292\"},\r\n    {0x1.fffffffffffffp+971, chars_format::scientific, 292,\r\n        \"3.\"\r\n        \"9916806190694391801471724019846200448140686739738613253196114883526948342591053888870246931290104035814460\"\r\n        \"8596356622741106615241711761805128916395409927091422308344129790751600429499413612186451585081022786236509\"\r\n        \"39111841418776671234393784566868068236455485965162797860891913877194725453201408e+292\"},\r\n    {0x1.fffffffffffffp+972, chars_format::scientific, 292,\r\n        \"7.\"\r\n        \"9833612381388783602943448039692400896281373479477226506392229767053896685182107777740493862580208071628921\"\r\n        \"7192713245482213230483423523610257832790819854182844616688259581503200858998827224372903170162045572473018\"\r\n        \"78223682837553342468787569133736136472910971930325595721783827754389450906402816e+292\"},\r\n    {0x1.fffffffffffffp+973, chars_format::scientific, 293,\r\n        \"1.\"\r\n        \"5966722476277756720588689607938480179256274695895445301278445953410779337036421555548098772516041614325784\"\r\n        \"3438542649096442646096684704722051566558163970836568923337651916300640171799765444874580634032409114494603\"\r\n        \"756447365675106684937575138267472272945821943860651191443567655508778901812805632e+293\"},\r\n    {0x1.fffffffffffffp+974, chars_format::scientific, 293,\r\n        \"3.\"\r\n        \"1933444952555513441177379215876960358512549391790890602556891906821558674072843111096197545032083228651568\"\r\n        \"6877085298192885292193369409444103133116327941673137846675303832601280343599530889749161268064818228989207\"\r\n        \"512894731350213369875150276534944545891643887721302382887135311017557803625611264e+293\"},\r\n    {0x1.fffffffffffffp+975, chars_format::scientific, 293,\r\n        \"6.\"\r\n        \"3866889905111026882354758431753920717025098783581781205113783813643117348145686222192395090064166457303137\"\r\n        \"3754170596385770584386738818888206266232655883346275693350607665202560687199061779498322536129636457978415\"\r\n        \"025789462700426739750300553069889091783287775442604765774270622035115607251222528e+293\"},\r\n    {0x1.fffffffffffffp+976, chars_format::scientific, 294,\r\n        \"1.\"\r\n        \"2773377981022205376470951686350784143405019756716356241022756762728623469629137244438479018012833291460627\"\r\n        \"4750834119277154116877347763777641253246531176669255138670121533040512137439812355899664507225927291595683\"\r\n        \"0051578925400853479500601106139778183566575550885209531548541244070231214502445056e+294\"},\r\n    {0x1.fffffffffffffp+977, chars_format::scientific, 294,\r\n        \"2.\"\r\n        \"5546755962044410752941903372701568286810039513432712482045513525457246939258274488876958036025666582921254\"\r\n        \"9501668238554308233754695527555282506493062353338510277340243066081024274879624711799329014451854583191366\"\r\n        \"0103157850801706959001202212279556367133151101770419063097082488140462429004890112e+294\"},\r\n    {0x1.fffffffffffffp+978, chars_format::scientific, 294,\r\n        \"5.\"\r\n        \"1093511924088821505883806745403136573620079026865424964091027050914493878516548977753916072051333165842509\"\r\n        \"9003336477108616467509391055110565012986124706677020554680486132162048549759249423598658028903709166382732\"\r\n        \"0206315701603413918002404424559112734266302203540838126194164976280924858009780224e+294\"},\r\n    {0x1.fffffffffffffp+979, chars_format::scientific, 295,\r\n        \"1.\"\r\n        \"0218702384817764301176761349080627314724015805373084992818205410182898775703309795550783214410266633168501\"\r\n        \"9800667295421723293501878211022113002597224941335404110936097226432409709951849884719731605780741833276546\"\r\n        \"40412631403206827836004808849118225468532604407081676252388329952561849716019560448e+295\"},\r\n    {0x1.fffffffffffffp+980, chars_format::scientific, 295,\r\n        \"2.\"\r\n        \"0437404769635528602353522698161254629448031610746169985636410820365797551406619591101566428820533266337003\"\r\n        \"9601334590843446587003756422044226005194449882670808221872194452864819419903699769439463211561483666553092\"\r\n        \"80825262806413655672009617698236450937065208814163352504776659905123699432039120896e+295\"},\r\n    {0x1.fffffffffffffp+981, chars_format::scientific, 295,\r\n        \"4.\"\r\n        \"0874809539271057204707045396322509258896063221492339971272821640731595102813239182203132857641066532674007\"\r\n        \"9202669181686893174007512844088452010388899765341616443744388905729638839807399538878926423122967333106185\"\r\n        \"61650525612827311344019235396472901874130417628326705009553319810247398864078241792e+295\"},\r\n    {0x1.fffffffffffffp+982, chars_format::scientific, 295,\r\n        \"8.\"\r\n        \"1749619078542114409414090792645018517792126442984679942545643281463190205626478364406265715282133065348015\"\r\n        \"8405338363373786348015025688176904020777799530683232887488777811459277679614799077757852846245934666212371\"\r\n        \"23301051225654622688038470792945803748260835256653410019106639620494797728156483584e+295\"},\r\n    {0x1.fffffffffffffp+983, chars_format::scientific, 296,\r\n        \"1.\"\r\n        \"6349923815708422881882818158529003703558425288596935988509128656292638041125295672881253143056426613069603\"\r\n        \"1681067672674757269603005137635380804155559906136646577497755562291855535922959815551570569249186933242474\"\r\n        \"246602102451309245376076941585891607496521670513306820038213279240989595456312967168e+296\"},\r\n    {0x1.fffffffffffffp+984, chars_format::scientific, 296,\r\n        \"3.\"\r\n        \"2699847631416845763765636317058007407116850577193871977018257312585276082250591345762506286112853226139206\"\r\n        \"3362135345349514539206010275270761608311119812273293154995511124583711071845919631103141138498373866484948\"\r\n        \"493204204902618490752153883171783214993043341026613640076426558481979190912625934336e+296\"},\r\n    {0x1.fffffffffffffp+985, chars_format::scientific, 296,\r\n        \"6.\"\r\n        \"5399695262833691527531272634116014814233701154387743954036514625170552164501182691525012572225706452278412\"\r\n        \"6724270690699029078412020550541523216622239624546586309991022249167422143691839262206282276996747732969896\"\r\n        \"986408409805236981504307766343566429986086682053227280152853116963958381825251868672e+296\"},\r\n    {0x1.fffffffffffffp+986, chars_format::scientific, 297,\r\n        \"1.\"\r\n        \"3079939052566738305506254526823202962846740230877548790807302925034110432900236538305002514445141290455682\"\r\n        \"5344854138139805815682404110108304643324447924909317261998204449833484428738367852441256455399349546593979\"\r\n        \"3972816819610473963008615532687132859972173364106454560305706233927916763650503737344e+297\"},\r\n    {0x1.fffffffffffffp+987, chars_format::scientific, 297,\r\n        \"2.\"\r\n        \"6159878105133476611012509053646405925693480461755097581614605850068220865800473076610005028890282580911365\"\r\n        \"0689708276279611631364808220216609286648895849818634523996408899666968857476735704882512910798699093187958\"\r\n        \"7945633639220947926017231065374265719944346728212909120611412467855833527301007474688e+297\"},\r\n    {0x1.fffffffffffffp+988, chars_format::scientific, 297,\r\n        \"5.\"\r\n        \"2319756210266953222025018107292811851386960923510195163229211700136441731600946153220010057780565161822730\"\r\n        \"1379416552559223262729616440433218573297791699637269047992817799333937714953471409765025821597398186375917\"\r\n        \"5891267278441895852034462130748531439888693456425818241222824935711667054602014949376e+297\"},\r\n    {0x1.fffffffffffffp+989, chars_format::scientific, 298,\r\n        \"1.\"\r\n        \"0463951242053390644405003621458562370277392184702039032645842340027288346320189230644002011556113032364546\"\r\n        \"0275883310511844652545923288086643714659558339927453809598563559866787542990694281953005164319479637275183\"\r\n        \"51782534556883791704068924261497062879777386912851636482445649871423334109204029898752e+298\"},\r\n    {0x1.fffffffffffffp+990, chars_format::scientific, 298,\r\n        \"2.\"\r\n        \"0927902484106781288810007242917124740554784369404078065291684680054576692640378461288004023112226064729092\"\r\n        \"0551766621023689305091846576173287429319116679854907619197127119733575085981388563906010328638959274550367\"\r\n        \"03565069113767583408137848522994125759554773825703272964891299742846668218408059797504e+298\"},\r\n    {0x1.fffffffffffffp+991, chars_format::scientific, 298,\r\n        \"4.\"\r\n        \"1855804968213562577620014485834249481109568738808156130583369360109153385280756922576008046224452129458184\"\r\n        \"1103533242047378610183693152346574858638233359709815238394254239467150171962777127812020657277918549100734\"\r\n        \"07130138227535166816275697045988251519109547651406545929782599485693336436816119595008e+298\"},\r\n    {0x1.fffffffffffffp+992, chars_format::scientific, 298,\r\n        \"8.\"\r\n        \"3711609936427125155240028971668498962219137477616312261166738720218306770561513845152016092448904258916368\"\r\n        \"2207066484094757220367386304693149717276466719419630476788508478934300343925554255624041314555837098201468\"\r\n        \"14260276455070333632551394091976503038219095302813091859565198971386672873632239190016e+298\"},\r\n    {0x1.fffffffffffffp+993, chars_format::scientific, 299,\r\n        \"1.\"\r\n        \"6742321987285425031048005794333699792443827495523262452233347744043661354112302769030403218489780851783273\"\r\n        \"6441413296818951444073477260938629943455293343883926095357701695786860068785110851124808262911167419640293\"\r\n        \"628520552910140667265102788183953006076438190605626183719130397942773345747264478380032e+299\"},\r\n    {0x1.fffffffffffffp+994, chars_format::scientific, 299,\r\n        \"3.\"\r\n        \"3484643974570850062096011588667399584887654991046524904466695488087322708224605538060806436979561703566547\"\r\n        \"2882826593637902888146954521877259886910586687767852190715403391573720137570221702249616525822334839280587\"\r\n        \"257041105820281334530205576367906012152876381211252367438260795885546691494528956760064e+299\"},\r\n    {0x1.fffffffffffffp+995, chars_format::scientific, 299,\r\n        \"6.\"\r\n        \"6969287949141700124192023177334799169775309982093049808933390976174645416449211076121612873959123407133094\"\r\n        \"5765653187275805776293909043754519773821173375535704381430806783147440275140443404499233051644669678561174\"\r\n        \"514082211640562669060411152735812024305752762422504734876521591771093382989057913520128e+299\"},\r\n    {0x1.fffffffffffffp+996, chars_format::scientific, 300,\r\n        \"1.\"\r\n        \"3393857589828340024838404635466959833955061996418609961786678195234929083289842215224322574791824681426618\"\r\n        \"9153130637455161155258781808750903954764234675107140876286161356629488055028088680899846610328933935712234\"\r\n        \"9028164423281125338120822305471624048611505524845009469753043183542186765978115827040256e+300\"},\r\n    {0x1.fffffffffffffp+997, chars_format::scientific, 300,\r\n        \"2.\"\r\n        \"6787715179656680049676809270933919667910123992837219923573356390469858166579684430448645149583649362853237\"\r\n        \"8306261274910322310517563617501807909528469350214281752572322713258976110056177361799693220657867871424469\"\r\n        \"8056328846562250676241644610943248097223011049690018939506086367084373531956231654080512e+300\"},\r\n    {0x1.fffffffffffffp+998, chars_format::scientific, 300,\r\n        \"5.\"\r\n        \"3575430359313360099353618541867839335820247985674439847146712780939716333159368860897290299167298725706475\"\r\n        \"6612522549820644621035127235003615819056938700428563505144645426517952220112354723599386441315735742848939\"\r\n        \"6112657693124501352483289221886496194446022099380037879012172734168747063912463308161024e+300\"},\r\n    {0x1.fffffffffffffp+999, chars_format::scientific, 301,\r\n        \"1.\"\r\n        \"0715086071862672019870723708373567867164049597134887969429342556187943266631873772179458059833459745141295\"\r\n        \"1322504509964128924207025447000723163811387740085712701028929085303590444022470944719877288263147148569787\"\r\n        \"92225315386249002704966578443772992388892044198760075758024345468337494127824926616322048e+301\"},\r\n    {0x1.fffffffffffffp+1000, chars_format::scientific, 301,\r\n        \"2.\"\r\n        \"1430172143725344039741447416747135734328099194269775938858685112375886533263747544358916119666919490282590\"\r\n        \"2645009019928257848414050894001446327622775480171425402057858170607180888044941889439754576526294297139575\"\r\n        \"84450630772498005409933156887545984777784088397520151516048690936674988255649853232644096e+301\"},\r\n    {0x1.fffffffffffffp+1001, chars_format::scientific, 301,\r\n        \"4.\"\r\n        \"2860344287450688079482894833494271468656198388539551877717370224751773066527495088717832239333838980565180\"\r\n        \"5290018039856515696828101788002892655245550960342850804115716341214361776089883778879509153052588594279151\"\r\n        \"68901261544996010819866313775091969555568176795040303032097381873349976511299706465288192e+301\"},\r\n    {0x1.fffffffffffffp+1002, chars_format::scientific, 301,\r\n        \"8.\"\r\n        \"5720688574901376158965789666988542937312396777079103755434740449503546133054990177435664478667677961130361\"\r\n        \"0580036079713031393656203576005785310491101920685701608231432682428723552179767557759018306105177188558303\"\r\n        \"37802523089992021639732627550183939111136353590080606064194763746699953022599412930576384e+301\"},\r\n    {0x1.fffffffffffffp+1003, chars_format::scientific, 302,\r\n        \"1.\"\r\n        \"7144137714980275231793157933397708587462479355415820751086948089900709226610998035487132895733535592226072\"\r\n        \"2116007215942606278731240715201157062098220384137140321646286536485744710435953511551803661221035437711660\"\r\n        \"675605046179984043279465255100367878222272707180161212128389527493399906045198825861152768e+302\"},\r\n    {0x1.fffffffffffffp+1004, chars_format::scientific, 302,\r\n        \"3.\"\r\n        \"4288275429960550463586315866795417174924958710831641502173896179801418453221996070974265791467071184452144\"\r\n        \"4232014431885212557462481430402314124196440768274280643292573072971489420871907023103607322442070875423321\"\r\n        \"351210092359968086558930510200735756444545414360322424256779054986799812090397651722305536e+302\"},\r\n    {0x1.fffffffffffffp+1005, chars_format::scientific, 302,\r\n        \"6.\"\r\n        \"8576550859921100927172631733590834349849917421663283004347792359602836906443992141948531582934142368904288\"\r\n        \"8464028863770425114924962860804628248392881536548561286585146145942978841743814046207214644884141750846642\"\r\n        \"702420184719936173117861020401471512889090828720644848513558109973599624180795303444611072e+302\"},\r\n    {0x1.fffffffffffffp+1006, chars_format::scientific, 303,\r\n        \"1.\"\r\n        \"3715310171984220185434526346718166869969983484332656600869558471920567381288798428389706316586828473780857\"\r\n        \"7692805772754085022984992572160925649678576307309712257317029229188595768348762809241442928976828350169328\"\r\n        \"5404840369439872346235722040802943025778181657441289697027116219947199248361590606889222144e+303\"},\r\n    {0x1.fffffffffffffp+1007, chars_format::scientific, 303,\r\n        \"2.\"\r\n        \"7430620343968440370869052693436333739939966968665313201739116943841134762577596856779412633173656947561715\"\r\n        \"5385611545508170045969985144321851299357152614619424514634058458377191536697525618482885857953656700338657\"\r\n        \"0809680738879744692471444081605886051556363314882579394054232439894398496723181213778444288e+303\"},\r\n    {0x1.fffffffffffffp+1008, chars_format::scientific, 303,\r\n        \"5.\"\r\n        \"4861240687936880741738105386872667479879933937330626403478233887682269525155193713558825266347313895123431\"\r\n        \"0771223091016340091939970288643702598714305229238849029268116916754383073395051236965771715907313400677314\"\r\n        \"1619361477759489384942888163211772103112726629765158788108464879788796993446362427556888576e+303\"},\r\n    {0x1.fffffffffffffp+1009, chars_format::scientific, 304,\r\n        \"1.\"\r\n        \"0972248137587376148347621077374533495975986787466125280695646777536453905031038742711765053269462779024686\"\r\n        \"2154244618203268018387994057728740519742861045847769805853623383350876614679010247393154343181462680135462\"\r\n        \"83238722955518978769885776326423544206225453259530317576216929759577593986892724855113777152e+304\"},\r\n    {0x1.fffffffffffffp+1010, chars_format::scientific, 304,\r\n        \"2.\"\r\n        \"1944496275174752296695242154749066991951973574932250561391293555072907810062077485423530106538925558049372\"\r\n        \"4308489236406536036775988115457481039485722091695539611707246766701753229358020494786308686362925360270925\"\r\n        \"66477445911037957539771552652847088412450906519060635152433859519155187973785449710227554304e+304\"},\r\n    {0x1.fffffffffffffp+1011, chars_format::scientific, 304,\r\n        \"4.\"\r\n        \"3888992550349504593390484309498133983903947149864501122782587110145815620124154970847060213077851116098744\"\r\n        \"8616978472813072073551976230914962078971444183391079223414493533403506458716040989572617372725850720541851\"\r\n        \"32954891822075915079543105305694176824901813038121270304867719038310375947570899420455108608e+304\"},\r\n    {0x1.fffffffffffffp+1012, chars_format::scientific, 304,\r\n        \"8.\"\r\n        \"7777985100699009186780968618996267967807894299729002245565174220291631240248309941694120426155702232197489\"\r\n        \"7233956945626144147103952461829924157942888366782158446828987066807012917432081979145234745451701441083702\"\r\n        \"65909783644151830159086210611388353649803626076242540609735438076620751895141798840910217216e+304\"},\r\n    {0x1.fffffffffffffp+1013, chars_format::scientific, 305,\r\n        \"1.\"\r\n        \"7555597020139801837356193723799253593561578859945800449113034844058326248049661988338824085231140446439497\"\r\n        \"9446791389125228829420790492365984831588577673356431689365797413361402583486416395829046949090340288216740\"\r\n        \"531819567288303660318172421222776707299607252152485081219470876153241503790283597681820434432e+305\"},\r\n    {0x1.fffffffffffffp+1014, chars_format::scientific, 305,\r\n        \"3.\"\r\n        \"5111194040279603674712387447598507187123157719891600898226069688116652496099323976677648170462280892878995\"\r\n        \"8893582778250457658841580984731969663177155346712863378731594826722805166972832791658093898180680576433481\"\r\n        \"063639134576607320636344842445553414599214504304970162438941752306483007580567195363640868864e+305\"},\r\n    {0x1.fffffffffffffp+1015, chars_format::scientific, 305,\r\n        \"7.\"\r\n        \"0222388080559207349424774895197014374246315439783201796452139376233304992198647953355296340924561785757991\"\r\n        \"7787165556500915317683161969463939326354310693425726757463189653445610333945665583316187796361361152866962\"\r\n        \"127278269153214641272689684891106829198429008609940324877883504612966015161134390727281737728e+305\"},\r\n    {0x1.fffffffffffffp+1016, chars_format::scientific, 306,\r\n        \"1.\"\r\n        \"4044477616111841469884954979039402874849263087956640359290427875246660998439729590671059268184912357151598\"\r\n        \"3557433111300183063536632393892787865270862138685145351492637930689122066789133116663237559272272230573392\"\r\n        \"4254556538306429282545379369782213658396858017219880649755767009225932030322268781454563475456e+306\"},\r\n    {0x1.fffffffffffffp+1017, chars_format::scientific, 306,\r\n        \"2.\"\r\n        \"8088955232223682939769909958078805749698526175913280718580855750493321996879459181342118536369824714303196\"\r\n        \"7114866222600366127073264787785575730541724277370290702985275861378244133578266233326475118544544461146784\"\r\n        \"8509113076612858565090758739564427316793716034439761299511534018451864060644537562909126950912e+306\"},\r\n    {0x1.fffffffffffffp+1018, chars_format::scientific, 306,\r\n        \"5.\"\r\n        \"6177910464447365879539819916157611499397052351826561437161711500986643993758918362684237072739649428606393\"\r\n        \"4229732445200732254146529575571151461083448554740581405970551722756488267156532466652950237089088922293569\"\r\n        \"7018226153225717130181517479128854633587432068879522599023068036903728121289075125818253901824e+306\"},\r\n    {0x1.fffffffffffffp+1019, chars_format::scientific, 307,\r\n        \"1.\"\r\n        \"1235582092889473175907963983231522299879410470365312287432342300197328798751783672536847414547929885721278\"\r\n        \"6845946489040146450829305915114230292216689710948116281194110344551297653431306493330590047417817784458713\"\r\n        \"94036452306451434260363034958257709267174864137759045198046136073807456242578150251636507803648e+307\"},\r\n    {0x1.fffffffffffffp+1020, chars_format::scientific, 307,\r\n        \"2.\"\r\n        \"2471164185778946351815927966463044599758820940730624574864684600394657597503567345073694829095859771442557\"\r\n        \"3691892978080292901658611830228460584433379421896232562388220689102595306862612986661180094835635568917427\"\r\n        \"88072904612902868520726069916515418534349728275518090396092272147614912485156300503273015607296e+307\"},\r\n    {0x1.fffffffffffffp+1021, chars_format::scientific, 307,\r\n        \"4.\"\r\n        \"4942328371557892703631855932926089199517641881461249149729369200789315195007134690147389658191719542885114\"\r\n        \"7383785956160585803317223660456921168866758843792465124776441378205190613725225973322360189671271137834855\"\r\n        \"76145809225805737041452139833030837068699456551036180792184544295229824970312601006546031214592e+307\"},\r\n    {0x1.fffffffffffffp+1022, chars_format::scientific, 307,\r\n        \"8.\"\r\n        \"9884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229\"\r\n        \"4767571912321171606634447320913842337733517687584930249552882756410381227450451946644720379342542275669711\"\r\n        \"52291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184e+307\"},\r\n    {0x1.fffffffffffffp+1023, chars_format::scientific, 308,\r\n        \"1.\"\r\n        \"7976931348623157081452742373170435679807056752584499659891747680315726078002853876058955863276687817154045\"\r\n        \"8953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942\"\r\n        \"304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368e+308\"},\r\n};\r\n\r\n#endif // DOUBLE_SCIENTIFIC_PRECISION_TO_CHARS_TEST_CASES_4_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/double_to_chars_test_cases.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception AND BSL-1.0\r\n\r\n\r\n// Copyright 2018 Ulf Adams\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n// Boost Software License - Version 1.0 - August 17th, 2003\r\n\r\n// Permission is hereby granted, free of charge, to any person or organization\r\n// obtaining a copy of the software and accompanying documentation covered by\r\n// this license (the \"Software\") to use, reproduce, display, distribute,\r\n// execute, and transmit the Software, and to prepare derivative works of the\r\n// Software, and to permit third-parties to whom the Software is furnished to\r\n// do so, all subject to the following:\r\n\r\n// The copyright notices in the Software and this entire statement, including\r\n// the above license grant, this restriction and the following disclaimer,\r\n// must be included in all copies of the Software, in whole or in part, and\r\n// all derivative works of the Software, unless such copies or derivative\r\n// works are solely in the form of machine-executable object code generated by\r\n// a source language processor.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r\n// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r\n// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r\n// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\n// DEALINGS IN THE SOFTWARE.\r\n\r\n\r\n// This file contains test cases derived from:\r\n// https://github.com/ulfjack/ryu\r\n// See xcharconv_ryu.h for the exact commit.\r\n// (Keep the cgmanifest.json commitHash in sync.)\r\n\r\n\r\n#ifndef DOUBLE_TO_CHARS_TEST_CASES_HPP\r\n#define DOUBLE_TO_CHARS_TEST_CASES_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\ninline constexpr DoubleToCharsTestCase double_to_chars_test_cases[] = {\r\n    // Test special cases (zero, inf, nan) and an ordinary case. Also test negative signs.\r\n    {0.0, chars_format::scientific, \"0e+00\"},\r\n    {-0.0, chars_format::scientific, \"-0e+00\"},\r\n    {double_inf, chars_format::scientific, \"inf\"},\r\n    {-double_inf, chars_format::scientific, \"-inf\"},\r\n    {double_nan, chars_format::scientific, \"nan\"},\r\n    {-double_nan, chars_format::scientific, \"-nan(ind)\"},\r\n    {double_nan_payload, chars_format::scientific, \"nan\"},\r\n    {-double_nan_payload, chars_format::scientific, \"-nan\"},\r\n    {2.018, chars_format::scientific, \"2.018e+00\"},\r\n    {-2.018, chars_format::scientific, \"-2.018e+00\"},\r\n\r\n    // Ditto for fixed, which doesn't emit exponents.\r\n    {0.0, chars_format::fixed, \"0\"},\r\n    {-0.0, chars_format::fixed, \"-0\"},\r\n    {double_inf, chars_format::fixed, \"inf\"},\r\n    {-double_inf, chars_format::fixed, \"-inf\"},\r\n    {double_nan, chars_format::fixed, \"nan\"},\r\n    {-double_nan, chars_format::fixed, \"-nan(ind)\"},\r\n    {double_nan_payload, chars_format::fixed, \"nan\"},\r\n    {-double_nan_payload, chars_format::fixed, \"-nan\"},\r\n    {2.018, chars_format::fixed, \"2.018\"},\r\n    {-2.018, chars_format::fixed, \"-2.018\"},\r\n\r\n    // Ditto for general, which selects fixed for the scientific exponent 0.\r\n    {0.0, chars_format::general, \"0\"},\r\n    {-0.0, chars_format::general, \"-0\"},\r\n    {double_inf, chars_format::general, \"inf\"},\r\n    {-double_inf, chars_format::general, \"-inf\"},\r\n    {double_nan, chars_format::general, \"nan\"},\r\n    {-double_nan, chars_format::general, \"-nan(ind)\"},\r\n    {double_nan_payload, chars_format::general, \"nan\"},\r\n    {-double_nan_payload, chars_format::general, \"-nan\"},\r\n    {2.018, chars_format::general, \"2.018\"},\r\n    {-2.018, chars_format::general, \"-2.018\"},\r\n\r\n    // Ditto for plain, which selects fixed because it's shorter for these values.\r\n    {0.0, chars_format{}, \"0\"},\r\n    {-0.0, chars_format{}, \"-0\"},\r\n    {double_inf, chars_format{}, \"inf\"},\r\n    {-double_inf, chars_format{}, \"-inf\"},\r\n    {double_nan, chars_format{}, \"nan\"},\r\n    {-double_nan, chars_format{}, \"-nan(ind)\"},\r\n    {double_nan_payload, chars_format{}, \"nan\"},\r\n    {-double_nan_payload, chars_format{}, \"-nan\"},\r\n    {2.018, chars_format{}, \"2.018\"},\r\n    {-2.018, chars_format{}, \"-2.018\"},\r\n\r\n    // Ditto for hex.\r\n    {0.0, chars_format::hex, \"0p+0\"},\r\n    {-0.0, chars_format::hex, \"-0p+0\"},\r\n    {double_inf, chars_format::hex, \"inf\"},\r\n    {-double_inf, chars_format::hex, \"-inf\"},\r\n    {double_nan, chars_format::hex, \"nan\"},\r\n    {-double_nan, chars_format::hex, \"-nan(ind)\"},\r\n    {double_nan_payload, chars_format::hex, \"nan\"},\r\n    {-double_nan_payload, chars_format::hex, \"-nan\"},\r\n    {0x1.729p+0, chars_format::hex, \"1.729p+0\"},\r\n    {-0x1.729p+0, chars_format::hex, \"-1.729p+0\"},\r\n\r\n    // Ryu d2s_test.cc SwitchToSubnormal\r\n    {2.2250738585072014e-308, chars_format::scientific, \"2.2250738585072014e-308\"},\r\n\r\n    // Ryu d2s_test.cc MinAndMax\r\n    {0x1.fffffffffffffp+1023, chars_format::scientific, \"1.7976931348623157e+308\"},\r\n    {0x0.0000000000001p-1022, chars_format::scientific, \"5e-324\"},\r\n\r\n    // Ryu d2s_test.cc LotsOfTrailingZeros\r\n    {2.98023223876953125e-8, chars_format::scientific, \"2.9802322387695312e-08\"},\r\n\r\n    // Ryu d2s_test.cc Regression\r\n    {-2.109808898695963e16, chars_format::scientific, \"-2.109808898695963e+16\"},\r\n    {4.940656e-318, chars_format::scientific, \"4.940656e-318\"},\r\n    {1.18575755e-316, chars_format::scientific, \"1.18575755e-316\"},\r\n    {2.989102097996e-312, chars_format::scientific, \"2.989102097996e-312\"},\r\n    {9.0608011534336e15, chars_format::scientific, \"9.0608011534336e+15\"},\r\n    {4.708356024711512e18, chars_format::scientific, \"4.708356024711512e+18\"},\r\n    {9.409340012568248e18, chars_format::scientific, \"9.409340012568248e+18\"},\r\n\r\n    // Ryu d2s_test.cc LooksLikePow5\r\n    {0x1.0f0cf064dd592p+132, chars_format::scientific, \"5.764607523034235e+39\"},\r\n    {0x1.0f0cf064dd592p+133, chars_format::scientific, \"1.152921504606847e+40\"},\r\n    {0x1.0f0cf064dd592p+134, chars_format::scientific, \"2.305843009213694e+40\"},\r\n\r\n    // Ryu d2s_test.cc OutputLength\r\n    {1.0, chars_format::scientific, \"1e+00\"},\r\n    {1.2, chars_format::scientific, \"1.2e+00\"},\r\n    {1.23, chars_format::scientific, \"1.23e+00\"},\r\n    {1.234, chars_format::scientific, \"1.234e+00\"},\r\n    {1.2345, chars_format::scientific, \"1.2345e+00\"},\r\n    {1.23456, chars_format::scientific, \"1.23456e+00\"},\r\n    {1.234567, chars_format::scientific, \"1.234567e+00\"},\r\n    {1.2345678, chars_format::scientific, \"1.2345678e+00\"},\r\n    {1.23456789, chars_format::scientific, \"1.23456789e+00\"},\r\n    {1.234567895, chars_format::scientific, \"1.234567895e+00\"},\r\n    {1.2345678901, chars_format::scientific, \"1.2345678901e+00\"},\r\n    {1.23456789012, chars_format::scientific, \"1.23456789012e+00\"},\r\n    {1.234567890123, chars_format::scientific, \"1.234567890123e+00\"},\r\n    {1.2345678901234, chars_format::scientific, \"1.2345678901234e+00\"},\r\n    {1.23456789012345, chars_format::scientific, \"1.23456789012345e+00\"},\r\n    {1.234567890123456, chars_format::scientific, \"1.234567890123456e+00\"},\r\n    {1.2345678901234567, chars_format::scientific, \"1.2345678901234567e+00\"},\r\n\r\n    // Ryu d2s_test.cc 32-bit Chunking\r\n    {4.294967294, chars_format::scientific, \"4.294967294e+00\"},\r\n    {4.294967295, chars_format::scientific, \"4.294967295e+00\"},\r\n    {4.294967296, chars_format::scientific, \"4.294967296e+00\"},\r\n    {4.294967297, chars_format::scientific, \"4.294967297e+00\"},\r\n    {4.294967298, chars_format::scientific, \"4.294967298e+00\"},\r\n\r\n    // Ryu d2s_test.cc MinMaxShift\r\n    {0x1.0000000000000p-1019, chars_format::scientific, \"1.7800590868057611e-307\"},\r\n    {0x1.fffffffffffffp-1016, chars_format::scientific, \"2.8480945388892175e-306\"},\r\n    {0x1.0000000000000p-982, chars_format::scientific, \"2.446494580089078e-296\"},\r\n    {0x1.fffffffffffffp-982, chars_format::scientific, \"4.8929891601781557e-296\"},\r\n    {0x1.0000000000000p+54, chars_format::scientific, \"1.8014398509481984e+16\"},\r\n    {0x1.fffffffffffffp+54, chars_format::scientific, \"3.6028797018963964e+16\"},\r\n    {0x1.0000000000000p-716, chars_format::scientific, \"2.900835519859558e-216\"},\r\n    {0x1.fffffffffffffp-716, chars_format::scientific, \"5.801671039719115e-216\"},\r\n    {0x1.fa7161a4d6e0cp-89, chars_format::scientific, \"3.196104012172126e-27\"},\r\n\r\n    // Ryu d2s_test.cc SmallIntegers\r\n    {9007199254740991.0, chars_format::scientific, \"9.007199254740991e+15\"},\r\n    {9007199254740992.0, chars_format::scientific, \"9.007199254740992e+15\"},\r\n\r\n    {1.0, chars_format::scientific, \"1e+00\"},\r\n    {12.0, chars_format::scientific, \"1.2e+01\"},\r\n    {123.0, chars_format::scientific, \"1.23e+02\"},\r\n    {1234.0, chars_format::scientific, \"1.234e+03\"},\r\n    {12345.0, chars_format::scientific, \"1.2345e+04\"},\r\n    {123456.0, chars_format::scientific, \"1.23456e+05\"},\r\n    {1234567.0, chars_format::scientific, \"1.234567e+06\"},\r\n    {12345678.0, chars_format::scientific, \"1.2345678e+07\"},\r\n    {123456789.0, chars_format::scientific, \"1.23456789e+08\"},\r\n    {1234567890.0, chars_format::scientific, \"1.23456789e+09\"},\r\n    {1234567895.0, chars_format::scientific, \"1.234567895e+09\"},\r\n    {12345678901.0, chars_format::scientific, \"1.2345678901e+10\"},\r\n    {123456789012.0, chars_format::scientific, \"1.23456789012e+11\"},\r\n    {1234567890123.0, chars_format::scientific, \"1.234567890123e+12\"},\r\n    {12345678901234.0, chars_format::scientific, \"1.2345678901234e+13\"},\r\n    {123456789012345.0, chars_format::scientific, \"1.23456789012345e+14\"},\r\n    {1234567890123456.0, chars_format::scientific, \"1.234567890123456e+15\"},\r\n\r\n    {1.0, chars_format::scientific, \"1e+00\"},\r\n    {10.0, chars_format::scientific, \"1e+01\"},\r\n    {100.0, chars_format::scientific, \"1e+02\"},\r\n    {1000.0, chars_format::scientific, \"1e+03\"},\r\n    {10000.0, chars_format::scientific, \"1e+04\"},\r\n    {100000.0, chars_format::scientific, \"1e+05\"},\r\n    {1000000.0, chars_format::scientific, \"1e+06\"},\r\n    {10000000.0, chars_format::scientific, \"1e+07\"},\r\n    {100000000.0, chars_format::scientific, \"1e+08\"},\r\n    {1000000000.0, chars_format::scientific, \"1e+09\"},\r\n    {10000000000.0, chars_format::scientific, \"1e+10\"},\r\n    {100000000000.0, chars_format::scientific, \"1e+11\"},\r\n    {1000000000000.0, chars_format::scientific, \"1e+12\"},\r\n    {10000000000000.0, chars_format::scientific, \"1e+13\"},\r\n    {100000000000000.0, chars_format::scientific, \"1e+14\"},\r\n    {1000000000000000.0, chars_format::scientific, \"1e+15\"},\r\n\r\n    {1000000000000001.0, chars_format::scientific, \"1.000000000000001e+15\"},\r\n    {1000000000000010.0, chars_format::scientific, \"1.00000000000001e+15\"},\r\n    {1000000000000100.0, chars_format::scientific, \"1.0000000000001e+15\"},\r\n    {1000000000001000.0, chars_format::scientific, \"1.000000000001e+15\"},\r\n    {1000000000010000.0, chars_format::scientific, \"1.00000000001e+15\"},\r\n    {1000000000100000.0, chars_format::scientific, \"1.0000000001e+15\"},\r\n    {1000000001000000.0, chars_format::scientific, \"1.000000001e+15\"},\r\n    {1000000010000000.0, chars_format::scientific, \"1.00000001e+15\"},\r\n    {1000000100000000.0, chars_format::scientific, \"1.0000001e+15\"},\r\n    {1000001000000000.0, chars_format::scientific, \"1.000001e+15\"},\r\n    {1000010000000000.0, chars_format::scientific, \"1.00001e+15\"},\r\n    {1000100000000000.0, chars_format::scientific, \"1.0001e+15\"},\r\n    {1001000000000000.0, chars_format::scientific, \"1.001e+15\"},\r\n    {1010000000000000.0, chars_format::scientific, \"1.01e+15\"},\r\n    {1100000000000000.0, chars_format::scientific, \"1.1e+15\"},\r\n\r\n    {8.0, chars_format::scientific, \"8e+00\"},\r\n    {64.0, chars_format::scientific, \"6.4e+01\"},\r\n    {512.0, chars_format::scientific, \"5.12e+02\"},\r\n    {8192.0, chars_format::scientific, \"8.192e+03\"},\r\n    {65536.0, chars_format::scientific, \"6.5536e+04\"},\r\n    {524288.0, chars_format::scientific, \"5.24288e+05\"},\r\n    {8388608.0, chars_format::scientific, \"8.388608e+06\"},\r\n    {67108864.0, chars_format::scientific, \"6.7108864e+07\"},\r\n    {536870912.0, chars_format::scientific, \"5.36870912e+08\"},\r\n    {8589934592.0, chars_format::scientific, \"8.589934592e+09\"},\r\n    {68719476736.0, chars_format::scientific, \"6.8719476736e+10\"},\r\n    {549755813888.0, chars_format::scientific, \"5.49755813888e+11\"},\r\n    {8796093022208.0, chars_format::scientific, \"8.796093022208e+12\"},\r\n    {70368744177664.0, chars_format::scientific, \"7.0368744177664e+13\"},\r\n    {562949953421312.0, chars_format::scientific, \"5.62949953421312e+14\"},\r\n    {9007199254740992.0, chars_format::scientific, \"9.007199254740992e+15\"},\r\n\r\n    {8000.0, chars_format::scientific, \"8e+03\"},\r\n    {64000.0, chars_format::scientific, \"6.4e+04\"},\r\n    {512000.0, chars_format::scientific, \"5.12e+05\"},\r\n    {8192000.0, chars_format::scientific, \"8.192e+06\"},\r\n    {65536000.0, chars_format::scientific, \"6.5536e+07\"},\r\n    {524288000.0, chars_format::scientific, \"5.24288e+08\"},\r\n    {8388608000.0, chars_format::scientific, \"8.388608e+09\"},\r\n    {67108864000.0, chars_format::scientific, \"6.7108864e+10\"},\r\n    {536870912000.0, chars_format::scientific, \"5.36870912e+11\"},\r\n    {8589934592000.0, chars_format::scientific, \"8.589934592e+12\"},\r\n    {68719476736000.0, chars_format::scientific, \"6.8719476736e+13\"},\r\n    {549755813888000.0, chars_format::scientific, \"5.49755813888e+14\"},\r\n    {8796093022208000.0, chars_format::scientific, \"8.796093022208e+15\"},\r\n\r\n    // Test all exponents.\r\n    {7.29e-324, chars_format::scientific, \"5e-324\"}, // 1.729e-324 would be too small\r\n    {1.729e-323, chars_format::scientific, \"1.5e-323\"},\r\n    {1.729e-322, chars_format::scientific, \"1.73e-322\"},\r\n    {1.729e-321, chars_format::scientific, \"1.73e-321\"},\r\n    {1.729e-320, chars_format::scientific, \"1.729e-320\"},\r\n    {1.729e-319, chars_format::scientific, \"1.729e-319\"},\r\n    {1.729e-318, chars_format::scientific, \"1.729e-318\"},\r\n    {1.729e-317, chars_format::scientific, \"1.729e-317\"},\r\n    {1.729e-316, chars_format::scientific, \"1.729e-316\"},\r\n    {1.729e-315, chars_format::scientific, \"1.729e-315\"},\r\n    {1.729e-314, chars_format::scientific, \"1.729e-314\"},\r\n    {1.729e-313, chars_format::scientific, \"1.729e-313\"},\r\n    {1.729e-312, chars_format::scientific, \"1.729e-312\"},\r\n    {1.729e-311, chars_format::scientific, \"1.729e-311\"},\r\n    {1.729e-310, chars_format::scientific, \"1.729e-310\"},\r\n    {1.729e-309, chars_format::scientific, \"1.729e-309\"},\r\n    {1.729e-308, chars_format::scientific, \"1.729e-308\"},\r\n    {1.729e-307, chars_format::scientific, \"1.729e-307\"},\r\n    {1.729e-306, chars_format::scientific, \"1.729e-306\"},\r\n    {1.729e-305, chars_format::scientific, \"1.729e-305\"},\r\n    {1.729e-304, chars_format::scientific, \"1.729e-304\"},\r\n    {1.729e-303, chars_format::scientific, \"1.729e-303\"},\r\n    {1.729e-302, chars_format::scientific, \"1.729e-302\"},\r\n    {1.729e-301, chars_format::scientific, \"1.729e-301\"},\r\n    {1.729e-300, chars_format::scientific, \"1.729e-300\"},\r\n    {1.729e-299, chars_format::scientific, \"1.729e-299\"},\r\n    {1.729e-298, chars_format::scientific, \"1.729e-298\"},\r\n    {1.729e-297, chars_format::scientific, \"1.729e-297\"},\r\n    {1.729e-296, chars_format::scientific, \"1.729e-296\"},\r\n    {1.729e-295, chars_format::scientific, \"1.729e-295\"},\r\n    {1.729e-294, chars_format::scientific, \"1.729e-294\"},\r\n    {1.729e-293, chars_format::scientific, \"1.729e-293\"},\r\n    {1.729e-292, chars_format::scientific, \"1.729e-292\"},\r\n    {1.729e-291, chars_format::scientific, \"1.729e-291\"},\r\n    {1.729e-290, chars_format::scientific, \"1.729e-290\"},\r\n    {1.729e-289, chars_format::scientific, \"1.729e-289\"},\r\n    {1.729e-288, chars_format::scientific, \"1.729e-288\"},\r\n    {1.729e-287, chars_format::scientific, \"1.729e-287\"},\r\n    {1.729e-286, chars_format::scientific, \"1.729e-286\"},\r\n    {1.729e-285, chars_format::scientific, \"1.729e-285\"},\r\n    {1.729e-284, chars_format::scientific, \"1.729e-284\"},\r\n    {1.729e-283, chars_format::scientific, \"1.729e-283\"},\r\n    {1.729e-282, chars_format::scientific, \"1.729e-282\"},\r\n    {1.729e-281, chars_format::scientific, \"1.729e-281\"},\r\n    {1.729e-280, chars_format::scientific, \"1.729e-280\"},\r\n    {1.729e-279, chars_format::scientific, \"1.729e-279\"},\r\n    {1.729e-278, chars_format::scientific, \"1.729e-278\"},\r\n    {1.729e-277, chars_format::scientific, \"1.729e-277\"},\r\n    {1.729e-276, chars_format::scientific, \"1.729e-276\"},\r\n    {1.729e-275, chars_format::scientific, \"1.729e-275\"},\r\n    {1.729e-274, chars_format::scientific, \"1.729e-274\"},\r\n    {1.729e-273, chars_format::scientific, \"1.729e-273\"},\r\n    {1.729e-272, chars_format::scientific, \"1.729e-272\"},\r\n    {1.729e-271, chars_format::scientific, \"1.729e-271\"},\r\n    {1.729e-270, chars_format::scientific, \"1.729e-270\"},\r\n    {1.729e-269, chars_format::scientific, \"1.729e-269\"},\r\n    {1.729e-268, chars_format::scientific, \"1.729e-268\"},\r\n    {1.729e-267, chars_format::scientific, \"1.729e-267\"},\r\n    {1.729e-266, chars_format::scientific, \"1.729e-266\"},\r\n    {1.729e-265, chars_format::scientific, \"1.729e-265\"},\r\n    {1.729e-264, chars_format::scientific, \"1.729e-264\"},\r\n    {1.729e-263, chars_format::scientific, \"1.729e-263\"},\r\n    {1.729e-262, chars_format::scientific, \"1.729e-262\"},\r\n    {1.729e-261, chars_format::scientific, \"1.729e-261\"},\r\n    {1.729e-260, chars_format::scientific, \"1.729e-260\"},\r\n    {1.729e-259, chars_format::scientific, \"1.729e-259\"},\r\n    {1.729e-258, chars_format::scientific, \"1.729e-258\"},\r\n    {1.729e-257, chars_format::scientific, \"1.729e-257\"},\r\n    {1.729e-256, chars_format::scientific, \"1.729e-256\"},\r\n    {1.729e-255, chars_format::scientific, \"1.729e-255\"},\r\n    {1.729e-254, chars_format::scientific, \"1.729e-254\"},\r\n    {1.729e-253, chars_format::scientific, \"1.729e-253\"},\r\n    {1.729e-252, chars_format::scientific, \"1.729e-252\"},\r\n    {1.729e-251, chars_format::scientific, \"1.729e-251\"},\r\n    {1.729e-250, chars_format::scientific, \"1.729e-250\"},\r\n    {1.729e-249, chars_format::scientific, \"1.729e-249\"},\r\n    {1.729e-248, chars_format::scientific, \"1.729e-248\"},\r\n    {1.729e-247, chars_format::scientific, \"1.729e-247\"},\r\n    {1.729e-246, chars_format::scientific, \"1.729e-246\"},\r\n    {1.729e-245, chars_format::scientific, \"1.729e-245\"},\r\n    {1.729e-244, chars_format::scientific, \"1.729e-244\"},\r\n    {1.729e-243, chars_format::scientific, \"1.729e-243\"},\r\n    {1.729e-242, chars_format::scientific, \"1.729e-242\"},\r\n    {1.729e-241, chars_format::scientific, \"1.729e-241\"},\r\n    {1.729e-240, chars_format::scientific, \"1.729e-240\"},\r\n    {1.729e-239, chars_format::scientific, \"1.729e-239\"},\r\n    {1.729e-238, chars_format::scientific, \"1.729e-238\"},\r\n    {1.729e-237, chars_format::scientific, \"1.729e-237\"},\r\n    {1.729e-236, chars_format::scientific, \"1.729e-236\"},\r\n    {1.729e-235, chars_format::scientific, \"1.729e-235\"},\r\n    {1.729e-234, chars_format::scientific, \"1.729e-234\"},\r\n    {1.729e-233, chars_format::scientific, \"1.729e-233\"},\r\n    {1.729e-232, chars_format::scientific, \"1.729e-232\"},\r\n    {1.729e-231, chars_format::scientific, \"1.729e-231\"},\r\n    {1.729e-230, chars_format::scientific, \"1.729e-230\"},\r\n    {1.729e-229, chars_format::scientific, \"1.729e-229\"},\r\n    {1.729e-228, chars_format::scientific, \"1.729e-228\"},\r\n    {1.729e-227, chars_format::scientific, \"1.729e-227\"},\r\n    {1.729e-226, chars_format::scientific, \"1.729e-226\"},\r\n    {1.729e-225, chars_format::scientific, \"1.729e-225\"},\r\n    {1.729e-224, chars_format::scientific, \"1.729e-224\"},\r\n    {1.729e-223, chars_format::scientific, \"1.729e-223\"},\r\n    {1.729e-222, chars_format::scientific, \"1.729e-222\"},\r\n    {1.729e-221, chars_format::scientific, \"1.729e-221\"},\r\n    {1.729e-220, chars_format::scientific, \"1.729e-220\"},\r\n    {1.729e-219, chars_format::scientific, \"1.729e-219\"},\r\n    {1.729e-218, chars_format::scientific, \"1.729e-218\"},\r\n    {1.729e-217, chars_format::scientific, \"1.729e-217\"},\r\n    {1.729e-216, chars_format::scientific, \"1.729e-216\"},\r\n    {1.729e-215, chars_format::scientific, \"1.729e-215\"},\r\n    {1.729e-214, chars_format::scientific, \"1.729e-214\"},\r\n    {1.729e-213, chars_format::scientific, \"1.729e-213\"},\r\n    {1.729e-212, chars_format::scientific, \"1.729e-212\"},\r\n    {1.729e-211, chars_format::scientific, \"1.729e-211\"},\r\n    {1.729e-210, chars_format::scientific, \"1.729e-210\"},\r\n    {1.729e-209, chars_format::scientific, \"1.729e-209\"},\r\n    {1.729e-208, chars_format::scientific, \"1.729e-208\"},\r\n    {1.729e-207, chars_format::scientific, \"1.729e-207\"},\r\n    {1.729e-206, chars_format::scientific, \"1.729e-206\"},\r\n    {1.729e-205, chars_format::scientific, \"1.729e-205\"},\r\n    {1.729e-204, chars_format::scientific, \"1.729e-204\"},\r\n    {1.729e-203, chars_format::scientific, \"1.729e-203\"},\r\n    {1.729e-202, chars_format::scientific, \"1.729e-202\"},\r\n    {1.729e-201, chars_format::scientific, \"1.729e-201\"},\r\n    {1.729e-200, chars_format::scientific, \"1.729e-200\"},\r\n    {1.729e-199, chars_format::scientific, \"1.729e-199\"},\r\n    {1.729e-198, chars_format::scientific, \"1.729e-198\"},\r\n    {1.729e-197, chars_format::scientific, \"1.729e-197\"},\r\n    {1.729e-196, chars_format::scientific, \"1.729e-196\"},\r\n    {1.729e-195, chars_format::scientific, \"1.729e-195\"},\r\n    {1.729e-194, chars_format::scientific, \"1.729e-194\"},\r\n    {1.729e-193, chars_format::scientific, \"1.729e-193\"},\r\n    {1.729e-192, chars_format::scientific, \"1.729e-192\"},\r\n    {1.729e-191, chars_format::scientific, \"1.729e-191\"},\r\n    {1.729e-190, chars_format::scientific, \"1.729e-190\"},\r\n    {1.729e-189, chars_format::scientific, \"1.729e-189\"},\r\n    {1.729e-188, chars_format::scientific, \"1.729e-188\"},\r\n    {1.729e-187, chars_format::scientific, \"1.729e-187\"},\r\n    {1.729e-186, chars_format::scientific, \"1.729e-186\"},\r\n    {1.729e-185, chars_format::scientific, \"1.729e-185\"},\r\n    {1.729e-184, chars_format::scientific, \"1.729e-184\"},\r\n    {1.729e-183, chars_format::scientific, \"1.729e-183\"},\r\n    {1.729e-182, chars_format::scientific, \"1.729e-182\"},\r\n    {1.729e-181, chars_format::scientific, \"1.729e-181\"},\r\n    {1.729e-180, chars_format::scientific, \"1.729e-180\"},\r\n    {1.729e-179, chars_format::scientific, \"1.729e-179\"},\r\n    {1.729e-178, chars_format::scientific, \"1.729e-178\"},\r\n    {1.729e-177, chars_format::scientific, \"1.729e-177\"},\r\n    {1.729e-176, chars_format::scientific, \"1.729e-176\"},\r\n    {1.729e-175, chars_format::scientific, \"1.729e-175\"},\r\n    {1.729e-174, chars_format::scientific, \"1.729e-174\"},\r\n    {1.729e-173, chars_format::scientific, \"1.729e-173\"},\r\n    {1.729e-172, chars_format::scientific, \"1.729e-172\"},\r\n    {1.729e-171, chars_format::scientific, \"1.729e-171\"},\r\n    {1.729e-170, chars_format::scientific, \"1.729e-170\"},\r\n    {1.729e-169, chars_format::scientific, \"1.729e-169\"},\r\n    {1.729e-168, chars_format::scientific, \"1.729e-168\"},\r\n    {1.729e-167, chars_format::scientific, \"1.729e-167\"},\r\n    {1.729e-166, chars_format::scientific, \"1.729e-166\"},\r\n    {1.729e-165, chars_format::scientific, \"1.729e-165\"},\r\n    {1.729e-164, chars_format::scientific, \"1.729e-164\"},\r\n    {1.729e-163, chars_format::scientific, \"1.729e-163\"},\r\n    {1.729e-162, chars_format::scientific, \"1.729e-162\"},\r\n    {1.729e-161, chars_format::scientific, \"1.729e-161\"},\r\n    {1.729e-160, chars_format::scientific, \"1.729e-160\"},\r\n    {1.729e-159, chars_format::scientific, \"1.729e-159\"},\r\n    {1.729e-158, chars_format::scientific, \"1.729e-158\"},\r\n    {1.729e-157, chars_format::scientific, \"1.729e-157\"},\r\n    {1.729e-156, chars_format::scientific, \"1.729e-156\"},\r\n    {1.729e-155, chars_format::scientific, \"1.729e-155\"},\r\n    {1.729e-154, chars_format::scientific, \"1.729e-154\"},\r\n    {1.729e-153, chars_format::scientific, \"1.729e-153\"},\r\n    {1.729e-152, chars_format::scientific, \"1.729e-152\"},\r\n    {1.729e-151, chars_format::scientific, \"1.729e-151\"},\r\n    {1.729e-150, chars_format::scientific, \"1.729e-150\"},\r\n    {1.729e-149, chars_format::scientific, \"1.729e-149\"},\r\n    {1.729e-148, chars_format::scientific, \"1.729e-148\"},\r\n    {1.729e-147, chars_format::scientific, \"1.729e-147\"},\r\n    {1.729e-146, chars_format::scientific, \"1.729e-146\"},\r\n    {1.729e-145, chars_format::scientific, \"1.729e-145\"},\r\n    {1.729e-144, chars_format::scientific, \"1.729e-144\"},\r\n    {1.729e-143, chars_format::scientific, \"1.729e-143\"},\r\n    {1.729e-142, chars_format::scientific, \"1.729e-142\"},\r\n    {1.729e-141, chars_format::scientific, \"1.729e-141\"},\r\n    {1.729e-140, chars_format::scientific, \"1.729e-140\"},\r\n    {1.729e-139, chars_format::scientific, \"1.729e-139\"},\r\n    {1.729e-138, chars_format::scientific, \"1.729e-138\"},\r\n    {1.729e-137, chars_format::scientific, \"1.729e-137\"},\r\n    {1.729e-136, chars_format::scientific, \"1.729e-136\"},\r\n    {1.729e-135, chars_format::scientific, \"1.729e-135\"},\r\n    {1.729e-134, chars_format::scientific, \"1.729e-134\"},\r\n    {1.729e-133, chars_format::scientific, \"1.729e-133\"},\r\n    {1.729e-132, chars_format::scientific, \"1.729e-132\"},\r\n    {1.729e-131, chars_format::scientific, \"1.729e-131\"},\r\n    {1.729e-130, chars_format::scientific, \"1.729e-130\"},\r\n    {1.729e-129, chars_format::scientific, \"1.729e-129\"},\r\n    {1.729e-128, chars_format::scientific, \"1.729e-128\"},\r\n    {1.729e-127, chars_format::scientific, \"1.729e-127\"},\r\n    {1.729e-126, chars_format::scientific, \"1.729e-126\"},\r\n    {1.729e-125, chars_format::scientific, \"1.729e-125\"},\r\n    {1.729e-124, chars_format::scientific, \"1.729e-124\"},\r\n    {1.729e-123, chars_format::scientific, \"1.729e-123\"},\r\n    {1.729e-122, chars_format::scientific, \"1.729e-122\"},\r\n    {1.729e-121, chars_format::scientific, \"1.729e-121\"},\r\n    {1.729e-120, chars_format::scientific, \"1.729e-120\"},\r\n    {1.729e-119, chars_format::scientific, \"1.729e-119\"},\r\n    {1.729e-118, chars_format::scientific, \"1.729e-118\"},\r\n    {1.729e-117, chars_format::scientific, \"1.729e-117\"},\r\n    {1.729e-116, chars_format::scientific, \"1.729e-116\"},\r\n    {1.729e-115, chars_format::scientific, \"1.729e-115\"},\r\n    {1.729e-114, chars_format::scientific, \"1.729e-114\"},\r\n    {1.729e-113, chars_format::scientific, \"1.729e-113\"},\r\n    {1.729e-112, chars_format::scientific, \"1.729e-112\"},\r\n    {1.729e-111, chars_format::scientific, \"1.729e-111\"},\r\n    {1.729e-110, chars_format::scientific, \"1.729e-110\"},\r\n    {1.729e-109, chars_format::scientific, \"1.729e-109\"},\r\n    {1.729e-108, chars_format::scientific, \"1.729e-108\"},\r\n    {1.729e-107, chars_format::scientific, \"1.729e-107\"},\r\n    {1.729e-106, chars_format::scientific, \"1.729e-106\"},\r\n    {1.729e-105, chars_format::scientific, \"1.729e-105\"},\r\n    {1.729e-104, chars_format::scientific, \"1.729e-104\"},\r\n    {1.729e-103, chars_format::scientific, \"1.729e-103\"},\r\n    {1.729e-102, chars_format::scientific, \"1.729e-102\"},\r\n    {1.729e-101, chars_format::scientific, \"1.729e-101\"},\r\n    {1.729e-100, chars_format::scientific, \"1.729e-100\"},\r\n    {1.729e-99, chars_format::scientific, \"1.729e-99\"},\r\n    {1.729e-98, chars_format::scientific, \"1.729e-98\"},\r\n    {1.729e-97, chars_format::scientific, \"1.729e-97\"},\r\n    {1.729e-96, chars_format::scientific, \"1.729e-96\"},\r\n    {1.729e-95, chars_format::scientific, \"1.729e-95\"},\r\n    {1.729e-94, chars_format::scientific, \"1.729e-94\"},\r\n    {1.729e-93, chars_format::scientific, \"1.729e-93\"},\r\n    {1.729e-92, chars_format::scientific, \"1.729e-92\"},\r\n    {1.729e-91, chars_format::scientific, \"1.729e-91\"},\r\n    {1.729e-90, chars_format::scientific, \"1.729e-90\"},\r\n    {1.729e-89, chars_format::scientific, \"1.729e-89\"},\r\n    {1.729e-88, chars_format::scientific, \"1.729e-88\"},\r\n    {1.729e-87, chars_format::scientific, \"1.729e-87\"},\r\n    {1.729e-86, chars_format::scientific, \"1.729e-86\"},\r\n    {1.729e-85, chars_format::scientific, \"1.729e-85\"},\r\n    {1.729e-84, chars_format::scientific, \"1.729e-84\"},\r\n    {1.729e-83, chars_format::scientific, \"1.729e-83\"},\r\n    {1.729e-82, chars_format::scientific, \"1.729e-82\"},\r\n    {1.729e-81, chars_format::scientific, \"1.729e-81\"},\r\n    {1.729e-80, chars_format::scientific, \"1.729e-80\"},\r\n    {1.729e-79, chars_format::scientific, \"1.729e-79\"},\r\n    {1.729e-78, chars_format::scientific, \"1.729e-78\"},\r\n    {1.729e-77, chars_format::scientific, \"1.729e-77\"},\r\n    {1.729e-76, chars_format::scientific, \"1.729e-76\"},\r\n    {1.729e-75, chars_format::scientific, \"1.729e-75\"},\r\n    {1.729e-74, chars_format::scientific, \"1.729e-74\"},\r\n    {1.729e-73, chars_format::scientific, \"1.729e-73\"},\r\n    {1.729e-72, chars_format::scientific, \"1.729e-72\"},\r\n    {1.729e-71, chars_format::scientific, \"1.729e-71\"},\r\n    {1.729e-70, chars_format::scientific, \"1.729e-70\"},\r\n    {1.729e-69, chars_format::scientific, \"1.729e-69\"},\r\n    {1.729e-68, chars_format::scientific, \"1.729e-68\"},\r\n    {1.729e-67, chars_format::scientific, \"1.729e-67\"},\r\n    {1.729e-66, chars_format::scientific, \"1.729e-66\"},\r\n    {1.729e-65, chars_format::scientific, \"1.729e-65\"},\r\n    {1.729e-64, chars_format::scientific, \"1.729e-64\"},\r\n    {1.729e-63, chars_format::scientific, \"1.729e-63\"},\r\n    {1.729e-62, chars_format::scientific, \"1.729e-62\"},\r\n    {1.729e-61, chars_format::scientific, \"1.729e-61\"},\r\n    {1.729e-60, chars_format::scientific, \"1.729e-60\"},\r\n    {1.729e-59, chars_format::scientific, \"1.729e-59\"},\r\n    {1.729e-58, chars_format::scientific, \"1.729e-58\"},\r\n    {1.729e-57, chars_format::scientific, \"1.729e-57\"},\r\n    {1.729e-56, chars_format::scientific, \"1.729e-56\"},\r\n    {1.729e-55, chars_format::scientific, \"1.729e-55\"},\r\n    {1.729e-54, chars_format::scientific, \"1.729e-54\"},\r\n    {1.729e-53, chars_format::scientific, \"1.729e-53\"},\r\n    {1.729e-52, chars_format::scientific, \"1.729e-52\"},\r\n    {1.729e-51, chars_format::scientific, \"1.729e-51\"},\r\n    {1.729e-50, chars_format::scientific, \"1.729e-50\"},\r\n    {1.729e-49, chars_format::scientific, \"1.729e-49\"},\r\n    {1.729e-48, chars_format::scientific, \"1.729e-48\"},\r\n    {1.729e-47, chars_format::scientific, \"1.729e-47\"},\r\n    {1.729e-46, chars_format::scientific, \"1.729e-46\"},\r\n    {1.729e-45, chars_format::scientific, \"1.729e-45\"},\r\n    {1.729e-44, chars_format::scientific, \"1.729e-44\"},\r\n    {1.729e-43, chars_format::scientific, \"1.729e-43\"},\r\n    {1.729e-42, chars_format::scientific, \"1.729e-42\"},\r\n    {1.729e-41, chars_format::scientific, \"1.729e-41\"},\r\n    {1.729e-40, chars_format::scientific, \"1.729e-40\"},\r\n    {1.729e-39, chars_format::scientific, \"1.729e-39\"},\r\n    {1.729e-38, chars_format::scientific, \"1.729e-38\"},\r\n    {1.729e-37, chars_format::scientific, \"1.729e-37\"},\r\n    {1.729e-36, chars_format::scientific, \"1.729e-36\"},\r\n    {1.729e-35, chars_format::scientific, \"1.729e-35\"},\r\n    {1.729e-34, chars_format::scientific, \"1.729e-34\"},\r\n    {1.729e-33, chars_format::scientific, \"1.729e-33\"},\r\n    {1.729e-32, chars_format::scientific, \"1.729e-32\"},\r\n    {1.729e-31, chars_format::scientific, \"1.729e-31\"},\r\n    {1.729e-30, chars_format::scientific, \"1.729e-30\"},\r\n    {1.729e-29, chars_format::scientific, \"1.729e-29\"},\r\n    {1.729e-28, chars_format::scientific, \"1.729e-28\"},\r\n    {1.729e-27, chars_format::scientific, \"1.729e-27\"},\r\n    {1.729e-26, chars_format::scientific, \"1.729e-26\"},\r\n    {1.729e-25, chars_format::scientific, \"1.729e-25\"},\r\n    {1.729e-24, chars_format::scientific, \"1.729e-24\"},\r\n    {1.729e-23, chars_format::scientific, \"1.729e-23\"},\r\n    {1.729e-22, chars_format::scientific, \"1.729e-22\"},\r\n    {1.729e-21, chars_format::scientific, \"1.729e-21\"},\r\n    {1.729e-20, chars_format::scientific, \"1.729e-20\"},\r\n    {1.729e-19, chars_format::scientific, \"1.729e-19\"},\r\n    {1.729e-18, chars_format::scientific, \"1.729e-18\"},\r\n    {1.729e-17, chars_format::scientific, \"1.729e-17\"},\r\n    {1.729e-16, chars_format::scientific, \"1.729e-16\"},\r\n    {1.729e-15, chars_format::scientific, \"1.729e-15\"},\r\n    {1.729e-14, chars_format::scientific, \"1.729e-14\"},\r\n    {1.729e-13, chars_format::scientific, \"1.729e-13\"},\r\n    {1.729e-12, chars_format::scientific, \"1.729e-12\"},\r\n    {1.729e-11, chars_format::scientific, \"1.729e-11\"},\r\n    {1.729e-10, chars_format::scientific, \"1.729e-10\"},\r\n    {1.729e-9, chars_format::scientific, \"1.729e-09\"},\r\n    {1.729e-8, chars_format::scientific, \"1.729e-08\"},\r\n    {1.729e-7, chars_format::scientific, \"1.729e-07\"},\r\n    {1.729e-6, chars_format::scientific, \"1.729e-06\"},\r\n    {1.729e-5, chars_format::scientific, \"1.729e-05\"},\r\n    {1.729e-4, chars_format::scientific, \"1.729e-04\"},\r\n    {1.729e-3, chars_format::scientific, \"1.729e-03\"},\r\n    {1.729e-2, chars_format::scientific, \"1.729e-02\"},\r\n    {1.729e-1, chars_format::scientific, \"1.729e-01\"},\r\n    {1.729e0, chars_format::scientific, \"1.729e+00\"},\r\n    {1.729e1, chars_format::scientific, \"1.729e+01\"},\r\n    {1.729e2, chars_format::scientific, \"1.729e+02\"},\r\n    {1.729e3, chars_format::scientific, \"1.729e+03\"},\r\n    {1.729e4, chars_format::scientific, \"1.729e+04\"},\r\n    {1.729e5, chars_format::scientific, \"1.729e+05\"},\r\n    {1.729e6, chars_format::scientific, \"1.729e+06\"},\r\n    {1.729e7, chars_format::scientific, \"1.729e+07\"},\r\n    {1.729e8, chars_format::scientific, \"1.729e+08\"},\r\n    {1.729e9, chars_format::scientific, \"1.729e+09\"},\r\n    {1.729e10, chars_format::scientific, \"1.729e+10\"},\r\n    {1.729e11, chars_format::scientific, \"1.729e+11\"},\r\n    {1.729e12, chars_format::scientific, \"1.729e+12\"},\r\n    {1.729e13, chars_format::scientific, \"1.729e+13\"},\r\n    {1.729e14, chars_format::scientific, \"1.729e+14\"},\r\n    {1.729e15, chars_format::scientific, \"1.729e+15\"},\r\n    {1.729e16, chars_format::scientific, \"1.729e+16\"},\r\n    {1.729e17, chars_format::scientific, \"1.729e+17\"},\r\n    {1.729e18, chars_format::scientific, \"1.729e+18\"},\r\n    {1.729e19, chars_format::scientific, \"1.729e+19\"},\r\n    {1.729e20, chars_format::scientific, \"1.729e+20\"},\r\n    {1.729e21, chars_format::scientific, \"1.729e+21\"},\r\n    {1.729e22, chars_format::scientific, \"1.729e+22\"},\r\n    {1.729e23, chars_format::scientific, \"1.729e+23\"},\r\n    {1.729e24, chars_format::scientific, \"1.729e+24\"},\r\n    {1.729e25, chars_format::scientific, \"1.729e+25\"},\r\n    {1.729e26, chars_format::scientific, \"1.729e+26\"},\r\n    {1.729e27, chars_format::scientific, \"1.729e+27\"},\r\n    {1.729e28, chars_format::scientific, \"1.729e+28\"},\r\n    {1.729e29, chars_format::scientific, \"1.729e+29\"},\r\n    {1.729e30, chars_format::scientific, \"1.729e+30\"},\r\n    {1.729e31, chars_format::scientific, \"1.729e+31\"},\r\n    {1.729e32, chars_format::scientific, \"1.729e+32\"},\r\n    {1.729e33, chars_format::scientific, \"1.729e+33\"},\r\n    {1.729e34, chars_format::scientific, \"1.729e+34\"},\r\n    {1.729e35, chars_format::scientific, \"1.729e+35\"},\r\n    {1.729e36, chars_format::scientific, \"1.729e+36\"},\r\n    {1.729e37, chars_format::scientific, \"1.729e+37\"},\r\n    {1.729e38, chars_format::scientific, \"1.729e+38\"},\r\n    {1.729e39, chars_format::scientific, \"1.729e+39\"},\r\n    {1.729e40, chars_format::scientific, \"1.729e+40\"},\r\n    {1.729e41, chars_format::scientific, \"1.729e+41\"},\r\n    {1.729e42, chars_format::scientific, \"1.729e+42\"},\r\n    {1.729e43, chars_format::scientific, \"1.729e+43\"},\r\n    {1.729e44, chars_format::scientific, \"1.729e+44\"},\r\n    {1.729e45, chars_format::scientific, \"1.729e+45\"},\r\n    {1.729e46, chars_format::scientific, \"1.729e+46\"},\r\n    {1.729e47, chars_format::scientific, \"1.729e+47\"},\r\n    {1.729e48, chars_format::scientific, \"1.729e+48\"},\r\n    {1.729e49, chars_format::scientific, \"1.729e+49\"},\r\n    {1.729e50, chars_format::scientific, \"1.729e+50\"},\r\n    {1.729e51, chars_format::scientific, \"1.729e+51\"},\r\n    {1.729e52, chars_format::scientific, \"1.729e+52\"},\r\n    {1.729e53, chars_format::scientific, \"1.729e+53\"},\r\n    {1.729e54, chars_format::scientific, \"1.729e+54\"},\r\n    {1.729e55, chars_format::scientific, \"1.729e+55\"},\r\n    {1.729e56, chars_format::scientific, \"1.729e+56\"},\r\n    {1.729e57, chars_format::scientific, \"1.729e+57\"},\r\n    {1.729e58, chars_format::scientific, \"1.729e+58\"},\r\n    {1.729e59, chars_format::scientific, \"1.729e+59\"},\r\n    {1.729e60, chars_format::scientific, \"1.729e+60\"},\r\n    {1.729e61, chars_format::scientific, \"1.729e+61\"},\r\n    {1.729e62, chars_format::scientific, \"1.729e+62\"},\r\n    {1.729e63, chars_format::scientific, \"1.729e+63\"},\r\n    {1.729e64, chars_format::scientific, \"1.729e+64\"},\r\n    {1.729e65, chars_format::scientific, \"1.729e+65\"},\r\n    {1.729e66, chars_format::scientific, \"1.729e+66\"},\r\n    {1.729e67, chars_format::scientific, \"1.729e+67\"},\r\n    {1.729e68, chars_format::scientific, \"1.729e+68\"},\r\n    {1.729e69, chars_format::scientific, \"1.729e+69\"},\r\n    {1.729e70, chars_format::scientific, \"1.729e+70\"},\r\n    {1.729e71, chars_format::scientific, \"1.729e+71\"},\r\n    {1.729e72, chars_format::scientific, \"1.729e+72\"},\r\n    {1.729e73, chars_format::scientific, \"1.729e+73\"},\r\n    {1.729e74, chars_format::scientific, \"1.729e+74\"},\r\n    {1.729e75, chars_format::scientific, \"1.729e+75\"},\r\n    {1.729e76, chars_format::scientific, \"1.729e+76\"},\r\n    {1.729e77, chars_format::scientific, \"1.729e+77\"},\r\n    {1.729e78, chars_format::scientific, \"1.729e+78\"},\r\n    {1.729e79, chars_format::scientific, \"1.729e+79\"},\r\n    {1.729e80, chars_format::scientific, \"1.729e+80\"},\r\n    {1.729e81, chars_format::scientific, \"1.729e+81\"},\r\n    {1.729e82, chars_format::scientific, \"1.729e+82\"},\r\n    {1.729e83, chars_format::scientific, \"1.729e+83\"},\r\n    {1.729e84, chars_format::scientific, \"1.729e+84\"},\r\n    {1.729e85, chars_format::scientific, \"1.729e+85\"},\r\n    {1.729e86, chars_format::scientific, \"1.729e+86\"},\r\n    {1.729e87, chars_format::scientific, \"1.729e+87\"},\r\n    {1.729e88, chars_format::scientific, \"1.729e+88\"},\r\n    {1.729e89, chars_format::scientific, \"1.729e+89\"},\r\n    {1.729e90, chars_format::scientific, \"1.729e+90\"},\r\n    {1.729e91, chars_format::scientific, \"1.729e+91\"},\r\n    {1.729e92, chars_format::scientific, \"1.729e+92\"},\r\n    {1.729e93, chars_format::scientific, \"1.729e+93\"},\r\n    {1.729e94, chars_format::scientific, \"1.729e+94\"},\r\n    {1.729e95, chars_format::scientific, \"1.729e+95\"},\r\n    {1.729e96, chars_format::scientific, \"1.729e+96\"},\r\n    {1.729e97, chars_format::scientific, \"1.729e+97\"},\r\n    {1.729e98, chars_format::scientific, \"1.729e+98\"},\r\n    {1.729e99, chars_format::scientific, \"1.729e+99\"},\r\n    {1.729e100, chars_format::scientific, \"1.729e+100\"},\r\n    {1.729e101, chars_format::scientific, \"1.729e+101\"},\r\n    {1.729e102, chars_format::scientific, \"1.729e+102\"},\r\n    {1.729e103, chars_format::scientific, \"1.729e+103\"},\r\n    {1.729e104, chars_format::scientific, \"1.729e+104\"},\r\n    {1.729e105, chars_format::scientific, \"1.729e+105\"},\r\n    {1.729e106, chars_format::scientific, \"1.729e+106\"},\r\n    {1.729e107, chars_format::scientific, \"1.729e+107\"},\r\n    {1.729e108, chars_format::scientific, \"1.729e+108\"},\r\n    {1.729e109, chars_format::scientific, \"1.729e+109\"},\r\n    {1.729e110, chars_format::scientific, \"1.729e+110\"},\r\n    {1.729e111, chars_format::scientific, \"1.729e+111\"},\r\n    {1.729e112, chars_format::scientific, \"1.729e+112\"},\r\n    {1.729e113, chars_format::scientific, \"1.729e+113\"},\r\n    {1.729e114, chars_format::scientific, \"1.729e+114\"},\r\n    {1.729e115, chars_format::scientific, \"1.729e+115\"},\r\n    {1.729e116, chars_format::scientific, \"1.729e+116\"},\r\n    {1.729e117, chars_format::scientific, \"1.729e+117\"},\r\n    {1.729e118, chars_format::scientific, \"1.729e+118\"},\r\n    {1.729e119, chars_format::scientific, \"1.729e+119\"},\r\n    {1.729e120, chars_format::scientific, \"1.729e+120\"},\r\n    {1.729e121, chars_format::scientific, \"1.729e+121\"},\r\n    {1.729e122, chars_format::scientific, \"1.729e+122\"},\r\n    {1.729e123, chars_format::scientific, \"1.729e+123\"},\r\n    {1.729e124, chars_format::scientific, \"1.729e+124\"},\r\n    {1.729e125, chars_format::scientific, \"1.729e+125\"},\r\n    {1.729e126, chars_format::scientific, \"1.729e+126\"},\r\n    {1.729e127, chars_format::scientific, \"1.729e+127\"},\r\n    {1.729e128, chars_format::scientific, \"1.729e+128\"},\r\n    {1.729e129, chars_format::scientific, \"1.729e+129\"},\r\n    {1.729e130, chars_format::scientific, \"1.729e+130\"},\r\n    {1.729e131, chars_format::scientific, \"1.729e+131\"},\r\n    {1.729e132, chars_format::scientific, \"1.729e+132\"},\r\n    {1.729e133, chars_format::scientific, \"1.729e+133\"},\r\n    {1.729e134, chars_format::scientific, \"1.729e+134\"},\r\n    {1.729e135, chars_format::scientific, \"1.729e+135\"},\r\n    {1.729e136, chars_format::scientific, \"1.729e+136\"},\r\n    {1.729e137, chars_format::scientific, \"1.729e+137\"},\r\n    {1.729e138, chars_format::scientific, \"1.729e+138\"},\r\n    {1.729e139, chars_format::scientific, \"1.729e+139\"},\r\n    {1.729e140, chars_format::scientific, \"1.729e+140\"},\r\n    {1.729e141, chars_format::scientific, \"1.729e+141\"},\r\n    {1.729e142, chars_format::scientific, \"1.729e+142\"},\r\n    {1.729e143, chars_format::scientific, \"1.729e+143\"},\r\n    {1.729e144, chars_format::scientific, \"1.729e+144\"},\r\n    {1.729e145, chars_format::scientific, \"1.729e+145\"},\r\n    {1.729e146, chars_format::scientific, \"1.729e+146\"},\r\n    {1.729e147, chars_format::scientific, \"1.729e+147\"},\r\n    {1.729e148, chars_format::scientific, \"1.729e+148\"},\r\n    {1.729e149, chars_format::scientific, \"1.729e+149\"},\r\n    {1.729e150, chars_format::scientific, \"1.729e+150\"},\r\n    {1.729e151, chars_format::scientific, \"1.729e+151\"},\r\n    {1.729e152, chars_format::scientific, \"1.729e+152\"},\r\n    {1.729e153, chars_format::scientific, \"1.729e+153\"},\r\n    {1.729e154, chars_format::scientific, \"1.729e+154\"},\r\n    {1.729e155, chars_format::scientific, \"1.729e+155\"},\r\n    {1.729e156, chars_format::scientific, \"1.729e+156\"},\r\n    {1.729e157, chars_format::scientific, \"1.729e+157\"},\r\n    {1.729e158, chars_format::scientific, \"1.729e+158\"},\r\n    {1.729e159, chars_format::scientific, \"1.729e+159\"},\r\n    {1.729e160, chars_format::scientific, \"1.729e+160\"},\r\n    {1.729e161, chars_format::scientific, \"1.729e+161\"},\r\n    {1.729e162, chars_format::scientific, \"1.729e+162\"},\r\n    {1.729e163, chars_format::scientific, \"1.729e+163\"},\r\n    {1.729e164, chars_format::scientific, \"1.729e+164\"},\r\n    {1.729e165, chars_format::scientific, \"1.729e+165\"},\r\n    {1.729e166, chars_format::scientific, \"1.729e+166\"},\r\n    {1.729e167, chars_format::scientific, \"1.729e+167\"},\r\n    {1.729e168, chars_format::scientific, \"1.729e+168\"},\r\n    {1.729e169, chars_format::scientific, \"1.729e+169\"},\r\n    {1.729e170, chars_format::scientific, \"1.729e+170\"},\r\n    {1.729e171, chars_format::scientific, \"1.729e+171\"},\r\n    {1.729e172, chars_format::scientific, \"1.729e+172\"},\r\n    {1.729e173, chars_format::scientific, \"1.729e+173\"},\r\n    {1.729e174, chars_format::scientific, \"1.729e+174\"},\r\n    {1.729e175, chars_format::scientific, \"1.729e+175\"},\r\n    {1.729e176, chars_format::scientific, \"1.729e+176\"},\r\n    {1.729e177, chars_format::scientific, \"1.729e+177\"},\r\n    {1.729e178, chars_format::scientific, \"1.729e+178\"},\r\n    {1.729e179, chars_format::scientific, \"1.729e+179\"},\r\n    {1.729e180, chars_format::scientific, \"1.729e+180\"},\r\n    {1.729e181, chars_format::scientific, \"1.729e+181\"},\r\n    {1.729e182, chars_format::scientific, \"1.729e+182\"},\r\n    {1.729e183, chars_format::scientific, \"1.729e+183\"},\r\n    {1.729e184, chars_format::scientific, \"1.729e+184\"},\r\n    {1.729e185, chars_format::scientific, \"1.729e+185\"},\r\n    {1.729e186, chars_format::scientific, \"1.729e+186\"},\r\n    {1.729e187, chars_format::scientific, \"1.729e+187\"},\r\n    {1.729e188, chars_format::scientific, \"1.729e+188\"},\r\n    {1.729e189, chars_format::scientific, \"1.729e+189\"},\r\n    {1.729e190, chars_format::scientific, \"1.729e+190\"},\r\n    {1.729e191, chars_format::scientific, \"1.729e+191\"},\r\n    {1.729e192, chars_format::scientific, \"1.729e+192\"},\r\n    {1.729e193, chars_format::scientific, \"1.729e+193\"},\r\n    {1.729e194, chars_format::scientific, \"1.729e+194\"},\r\n    {1.729e195, chars_format::scientific, \"1.729e+195\"},\r\n    {1.729e196, chars_format::scientific, \"1.729e+196\"},\r\n    {1.729e197, chars_format::scientific, \"1.729e+197\"},\r\n    {1.729e198, chars_format::scientific, \"1.729e+198\"},\r\n    {1.729e199, chars_format::scientific, \"1.729e+199\"},\r\n    {1.729e200, chars_format::scientific, \"1.729e+200\"},\r\n    {1.729e201, chars_format::scientific, \"1.729e+201\"},\r\n    {1.729e202, chars_format::scientific, \"1.729e+202\"},\r\n    {1.729e203, chars_format::scientific, \"1.729e+203\"},\r\n    {1.729e204, chars_format::scientific, \"1.729e+204\"},\r\n    {1.729e205, chars_format::scientific, \"1.729e+205\"},\r\n    {1.729e206, chars_format::scientific, \"1.729e+206\"},\r\n    {1.729e207, chars_format::scientific, \"1.729e+207\"},\r\n    {1.729e208, chars_format::scientific, \"1.729e+208\"},\r\n    {1.729e209, chars_format::scientific, \"1.729e+209\"},\r\n    {1.729e210, chars_format::scientific, \"1.729e+210\"},\r\n    {1.729e211, chars_format::scientific, \"1.729e+211\"},\r\n    {1.729e212, chars_format::scientific, \"1.729e+212\"},\r\n    {1.729e213, chars_format::scientific, \"1.729e+213\"},\r\n    {1.729e214, chars_format::scientific, \"1.729e+214\"},\r\n    {1.729e215, chars_format::scientific, \"1.729e+215\"},\r\n    {1.729e216, chars_format::scientific, \"1.729e+216\"},\r\n    {1.729e217, chars_format::scientific, \"1.729e+217\"},\r\n    {1.729e218, chars_format::scientific, \"1.729e+218\"},\r\n    {1.729e219, chars_format::scientific, \"1.729e+219\"},\r\n    {1.729e220, chars_format::scientific, \"1.729e+220\"},\r\n    {1.729e221, chars_format::scientific, \"1.729e+221\"},\r\n    {1.729e222, chars_format::scientific, \"1.729e+222\"},\r\n    {1.729e223, chars_format::scientific, \"1.729e+223\"},\r\n    {1.729e224, chars_format::scientific, \"1.729e+224\"},\r\n    {1.729e225, chars_format::scientific, \"1.729e+225\"},\r\n    {1.729e226, chars_format::scientific, \"1.729e+226\"},\r\n    {1.729e227, chars_format::scientific, \"1.729e+227\"},\r\n    {1.729e228, chars_format::scientific, \"1.729e+228\"},\r\n    {1.729e229, chars_format::scientific, \"1.729e+229\"},\r\n    {1.729e230, chars_format::scientific, \"1.729e+230\"},\r\n    {1.729e231, chars_format::scientific, \"1.729e+231\"},\r\n    {1.729e232, chars_format::scientific, \"1.729e+232\"},\r\n    {1.729e233, chars_format::scientific, \"1.729e+233\"},\r\n    {1.729e234, chars_format::scientific, \"1.729e+234\"},\r\n    {1.729e235, chars_format::scientific, \"1.729e+235\"},\r\n    {1.729e236, chars_format::scientific, \"1.729e+236\"},\r\n    {1.729e237, chars_format::scientific, \"1.729e+237\"},\r\n    {1.729e238, chars_format::scientific, \"1.729e+238\"},\r\n    {1.729e239, chars_format::scientific, \"1.729e+239\"},\r\n    {1.729e240, chars_format::scientific, \"1.729e+240\"},\r\n    {1.729e241, chars_format::scientific, \"1.729e+241\"},\r\n    {1.729e242, chars_format::scientific, \"1.729e+242\"},\r\n    {1.729e243, chars_format::scientific, \"1.729e+243\"},\r\n    {1.729e244, chars_format::scientific, \"1.729e+244\"},\r\n    {1.729e245, chars_format::scientific, \"1.729e+245\"},\r\n    {1.729e246, chars_format::scientific, \"1.729e+246\"},\r\n    {1.729e247, chars_format::scientific, \"1.729e+247\"},\r\n    {1.729e248, chars_format::scientific, \"1.729e+248\"},\r\n    {1.729e249, chars_format::scientific, \"1.729e+249\"},\r\n    {1.729e250, chars_format::scientific, \"1.729e+250\"},\r\n    {1.729e251, chars_format::scientific, \"1.729e+251\"},\r\n    {1.729e252, chars_format::scientific, \"1.729e+252\"},\r\n    {1.729e253, chars_format::scientific, \"1.729e+253\"},\r\n    {1.729e254, chars_format::scientific, \"1.729e+254\"},\r\n    {1.729e255, chars_format::scientific, \"1.729e+255\"},\r\n    {1.729e256, chars_format::scientific, \"1.729e+256\"},\r\n    {1.729e257, chars_format::scientific, \"1.729e+257\"},\r\n    {1.729e258, chars_format::scientific, \"1.729e+258\"},\r\n    {1.729e259, chars_format::scientific, \"1.729e+259\"},\r\n    {1.729e260, chars_format::scientific, \"1.729e+260\"},\r\n    {1.729e261, chars_format::scientific, \"1.729e+261\"},\r\n    {1.729e262, chars_format::scientific, \"1.729e+262\"},\r\n    {1.729e263, chars_format::scientific, \"1.729e+263\"},\r\n    {1.729e264, chars_format::scientific, \"1.729e+264\"},\r\n    {1.729e265, chars_format::scientific, \"1.729e+265\"},\r\n    {1.729e266, chars_format::scientific, \"1.729e+266\"},\r\n    {1.729e267, chars_format::scientific, \"1.729e+267\"},\r\n    {1.729e268, chars_format::scientific, \"1.729e+268\"},\r\n    {1.729e269, chars_format::scientific, \"1.729e+269\"},\r\n    {1.729e270, chars_format::scientific, \"1.729e+270\"},\r\n    {1.729e271, chars_format::scientific, \"1.729e+271\"},\r\n    {1.729e272, chars_format::scientific, \"1.729e+272\"},\r\n    {1.729e273, chars_format::scientific, \"1.729e+273\"},\r\n    {1.729e274, chars_format::scientific, \"1.729e+274\"},\r\n    {1.729e275, chars_format::scientific, \"1.729e+275\"},\r\n    {1.729e276, chars_format::scientific, \"1.729e+276\"},\r\n    {1.729e277, chars_format::scientific, \"1.729e+277\"},\r\n    {1.729e278, chars_format::scientific, \"1.729e+278\"},\r\n    {1.729e279, chars_format::scientific, \"1.729e+279\"},\r\n    {1.729e280, chars_format::scientific, \"1.729e+280\"},\r\n    {1.729e281, chars_format::scientific, \"1.729e+281\"},\r\n    {1.729e282, chars_format::scientific, \"1.729e+282\"},\r\n    {1.729e283, chars_format::scientific, \"1.729e+283\"},\r\n    {1.729e284, chars_format::scientific, \"1.729e+284\"},\r\n    {1.729e285, chars_format::scientific, \"1.729e+285\"},\r\n    {1.729e286, chars_format::scientific, \"1.729e+286\"},\r\n    {1.729e287, chars_format::scientific, \"1.729e+287\"},\r\n    {1.729e288, chars_format::scientific, \"1.729e+288\"},\r\n    {1.729e289, chars_format::scientific, \"1.729e+289\"},\r\n    {1.729e290, chars_format::scientific, \"1.729e+290\"},\r\n    {1.729e291, chars_format::scientific, \"1.729e+291\"},\r\n    {1.729e292, chars_format::scientific, \"1.729e+292\"},\r\n    {1.729e293, chars_format::scientific, \"1.729e+293\"},\r\n    {1.729e294, chars_format::scientific, \"1.729e+294\"},\r\n    {1.729e295, chars_format::scientific, \"1.729e+295\"},\r\n    {1.729e296, chars_format::scientific, \"1.729e+296\"},\r\n    {1.729e297, chars_format::scientific, \"1.729e+297\"},\r\n    {1.729e298, chars_format::scientific, \"1.729e+298\"},\r\n    {1.729e299, chars_format::scientific, \"1.729e+299\"},\r\n    {1.729e300, chars_format::scientific, \"1.729e+300\"},\r\n    {1.729e301, chars_format::scientific, \"1.729e+301\"},\r\n    {1.729e302, chars_format::scientific, \"1.729e+302\"},\r\n    {1.729e303, chars_format::scientific, \"1.729e+303\"},\r\n    {1.729e304, chars_format::scientific, \"1.729e+304\"},\r\n    {1.729e305, chars_format::scientific, \"1.729e+305\"},\r\n    {1.729e306, chars_format::scientific, \"1.729e+306\"},\r\n    {1.729e307, chars_format::scientific, \"1.729e+307\"},\r\n    {1.729e308, chars_format::scientific, \"1.729e+308\"},\r\n\r\n    // Test all of the cases for fixed notation, including the non-Ryu fallback for large integers.\r\n    {1.729e-4, chars_format::fixed, \"0.0001729\"},\r\n    {1.729e-3, chars_format::fixed, \"0.001729\"},\r\n    {1.729e-2, chars_format::fixed, \"0.01729\"},\r\n    {1.729e-1, chars_format::fixed, \"0.1729\"},\r\n    {1.729e0, chars_format::fixed, \"1.729\"},\r\n    {1.729e1, chars_format::fixed, \"17.29\"},\r\n    {1.729e2, chars_format::fixed, \"172.9\"},\r\n    {1.729e3, chars_format::fixed, \"1729\"},\r\n    {1.729e4, chars_format::fixed, \"17290\"},\r\n    {1.729e5, chars_format::fixed, \"172900\"},\r\n    {1.729e6, chars_format::fixed, \"1729000\"},\r\n    {1.729e7, chars_format::fixed, \"17290000\"},\r\n    {1.729e8, chars_format::fixed, \"172900000\"},\r\n    {1.729e9, chars_format::fixed, \"1729000000\"},\r\n    {1.729e10, chars_format::fixed, \"17290000000\"},\r\n    {1.729e11, chars_format::fixed, \"172900000000\"},\r\n    {1.729e12, chars_format::fixed, \"1729000000000\"},\r\n    {1.729e13, chars_format::fixed, \"17290000000000\"},\r\n    {1.729e14, chars_format::fixed, \"172900000000000\"},\r\n    {1.729e15, chars_format::fixed, \"1729000000000000\"},\r\n    {1.729e16, chars_format::fixed, \"17290000000000000\"},\r\n    {1.729e17, chars_format::fixed, \"172900000000000000\"},\r\n    {1.729e18, chars_format::fixed, \"1729000000000000000\"},\r\n    {1.729e19, chars_format::fixed, \"17290000000000000000\"},\r\n    {1.729e20, chars_format::fixed, \"172900000000000000000\"},\r\n    {1.729e21, chars_format::fixed, \"1729000000000000000000\"},\r\n    {1.729e22, chars_format::fixed, \"17289999999999999475712\"},\r\n    {1.729e23, chars_format::fixed, \"172900000000000015728640\"},\r\n    {1.729e24, chars_format::fixed, \"1728999999999999888850944\"},\r\n    {1.729e25, chars_format::fixed, \"17290000000000000499122176\"},\r\n    {1.729e26, chars_format::fixed, \"172899999999999987811352576\"},\r\n    {1.729e27, chars_format::fixed, \"1729000000000000084271955968\"},\r\n    {1.729e28, chars_format::fixed, \"17290000000000000842719559680\"},\r\n    {1.729e29, chars_format::fixed, \"172900000000000004029149085696\"},\r\n    {1.729e30, chars_format::fixed, \"1728999999999999969922746679296\"},\r\n    {1.729e31, chars_format::fixed, \"17290000000000000825127373635584\"},\r\n    {1.729e32, chars_format::fixed, \"172899999999999994740474854244352\"},\r\n    {1.729e33, chars_format::fixed, \"1729000000000000019462342580371456\"},\r\n    {1.729e34, chars_format::fixed, \"17290000000000000771084178107138048\"},\r\n    {1.729e35, chars_format::fixed, \"172900000000000003099155762643992576\"},\r\n    {1.729e36, chars_format::fixed, \"1728999999999999957204581331601719296\"},\r\n    {1.729e37, chars_format::fixed, \"17289999999999998981750002957311541248\"},\r\n    {1.729e38, chars_format::fixed, \"172900000000000018151698926790986694656\"},\r\n    {1.729e39, chars_format::fixed, \"1728999999999999879285534364252573270016\"},\r\n    {1.729e40, chars_format::fixed, \"17289999999999999397318253449840320053248\"},\r\n    {1.729e41, chars_format::fixed, \"172899999999999993973182534498403200532480\"},\r\n    {1.729e42, chars_format::fixed, \"1728999999999999978417451572652165595922432\"},\r\n    {1.729e43, chars_format::fixed, \"17290000000000001022114555011901930858348544\"},\r\n    {1.729e44, chars_format::fixed, \"172899999999999995365865078694456009793994752\"},\r\n    {1.729e45, chars_format::fixed, \"1729000000000000112114975815473235285027848192\"},\r\n    {1.729e46, chars_format::fixed, \"17289999999999999853499157926502951353575276544\"},\r\n    {1.729e47, chars_format::fixed, \"172900000000000003605593980177947119522565586944\"},\r\n    {1.729e48, chars_format::fixed, \"1728999999999999914361482179869448651542148153344\"},\r\n    {1.729e49, chars_format::fixed, \"17290000000000001090726143749254847214357604990976\"},\r\n    {1.729e50, chars_format::fixed, \"172900000000000000522667720422893215082583391469568\"},\r\n    {1.729e51, chars_format::fixed, \"1729000000000000046765052072507553179069804548456448\"},\r\n    {1.729e52, chars_format::fixed, \"17289999999999999138422524940159658886890985204219904\"},\r\n    {1.729e53, chars_format::fixed, \"172899999999999991384225249401596588868909852042199040\"},\r\n    {1.729e54, chars_format::fixed, \"1729000000000000083983435954485197620376402236306096128\"},\r\n    {1.729e55, chars_format::fixed, \"17289999999999999478704891861098122350265592635988115456\"},\r\n    {1.729e56, chars_format::fixed, \"172899999999999994787048918610981223502655926359881154560\"},\r\n    {1.729e57, chars_format::fixed, \"1729000000000000122095061049630305528274358268664135811072\"},\r\n    {1.729e58, chars_format::fixed, \"17289999999999999130255748134057135763769994625857466925056\"},\r\n    {1.729e59, chars_format::fixed, \"172900000000000002452930080605882928405559082582755422240768\"},\r\n    {1.729e60, chars_format::fixed, \"1728999999999999846123339217813844151769844644640662174564352\"},\r\n    {1.729e61, chars_format::fixed, \"17290000000000000602104931237078263105127400620649326319763456\"},\r\n    {1.729e62, chars_format::fixed, \"172899999999999994603067770723103582584986250610532172135661568\"},\r\n    {1.729e63, chars_format::fixed, \"1728999999999999991702603873821752019715013528489166085604507648\"},\r\n    {1.729e64, chars_format::fixed, \"17289999999999999917026038738217520197150135284891660856045076480\"},\r\n    {1.729e65, chars_format::fixed, \"172899999999999999170260387382175201971501352848916608560450764800\"},\r\n    {1.729e66, chars_format::fixed, \"1728999999999999898166499084643965254679184234647052827624824897536\"},\r\n    {1.729e67, chars_format::fixed, \"17290000000000000478242667473284240787365111047944340403923172982784\"},\r\n    {1.729e68, chars_format::fixed, \"172899999999999992809805261718085701949064960867652907017832337768448\"},\r\n    {1.729e69, chars_format::fixed, \"1729000000000000167550480877475991137982372600912339010606311218872320\"},\r\n    {1.729e70, chars_format::fixed, \"17289999999999998610513727042982194663129671708505022868584867821518848\"},\r\n    {1.729e71, chars_format::fixed, \"172900000000000010625065924284043680364849151489997166585674633152823296\"},\r\n    {1.729e72, chars_format::fixed, \"1729000000000000008170944627423549868714281777280183914257442511777693696\"},\r\n    {1.729e73, chars_format::fixed, \"17290000000000000081709446274235498687142817772801839142574425117776936960\"},\r\n    {1.729e74, chars_format::fixed, \"172900000000000000817094462742354986871428177728018391425744251177769369600\"},\r\n    {1.729e75, chars_format::fixed, \"1728999999999999957954130744330103758027966391618852585438598956065417592832\"},\r\n    {1.729e76, chars_format::fixed, \"17289999999999999981275818508048606465770187001479176484936738006352384753664\"},\r\n    {1.729e77, chars_format::fixed, \"172899999999999993385006008044524962489853500650141354760555404932352506331136\"},\r\n    {1.729e78, chars_format::fixed, \"1728999999999999933850060080445249624898535006501413547605554049323525063311360\"},\r\n    {1.729e79, chars_format::fixed, \"17289999999999998515748322143849475171500758786338882984687607676445318958809088\"},\r\n    {1.729e80, chars_format::fixed,\r\n        \"172900000000000004903537909292967257574637778551594889639706464367411549771399168\"},\r\n    {1.729e81, chars_format::fixed,\r\n        \"1728999999999999996379233258651079226787363943680732736949516943399559870558502912\"},\r\n    {1.729e82, chars_format::fixed,\r\n        \"17289999999999999121293999238053298684529417967443868818334406229602708671097208832\"},\r\n    {1.729e83, chars_format::fixed,\r\n        \"172900000000000011432899992743512832845555494939161693411202379201456447538679775232\"},\r\n    {1.729e84, chars_format::fixed,\r\n        \"1728999999999999898649426590230009971119434253234571545014868411689984626557915758592\"},\r\n    {1.729e85, chars_format::fixed,\r\n        \"17289999999999998555135119227889862996522101140031624671954373356250686567921393598464\"},\r\n    {1.729e86, chars_format::fixed,\r\n        \"172899999999999992453097539069462417399976873677341699170652705732893420841738159783936\"},\r\n    {1.729e87, chars_format::fixed,\r\n        \"1729000000000000034958916939343644772955862533205824230924270612055119091017769178628096\"},\r\n    {1.729e88, chars_format::fixed,\r\n        \"17289999999999999907877403198840365333734250146328613352371731901646451379776141463126016\"},\r\n    {1.729e89, chars_format::fixed,\r\n        \"172900000000000013213550550215478290003722507406634260143588494021416178770611024972218368\"},\r\n    {1.729e90, chars_format::fixed,\r\n        \"1729000000000000019057293356338185806706185026519557588476915540174548467923313366994518016\"},\r\n    {1.729e91, chars_format::fixed,\r\n        \"17289999999999998833634387813582692947089369694634155729261522601270124841839571077213192192\"},\r\n    {1.729e92, chars_format::fixed,\r\n        \"172900000000000002810355032800351357417266823032330038951363309217771753350593711761273126912\"},\r\n    {1.729e93, chars_format::fixed,\r\n        \"1728999999999999912311461090687318150601683221635392536243648426537153494048353109699601629184\"},\r\n    {1.729e94, chars_format::fixed,\r\n        \"17289999999999999586282967856137963200300772251105556775516422927933791098313867128648534851584\"},\r\n    {1.729e95, chars_format::fixed,\r\n        \"172900000000000003273523389749616139111550763067081670364443247880334009508424047792925645471744\"},\r\n    {1.729e96, chars_format::fixed,\r\n        \"1729000000000000032735233897496161391115507630670816703644432478803340095084240477929256454717440\"},\r\n    {1.729e97, chars_format::fixed,\r\n        \"17290000000000001275921134007055886821048585497879508170432039168960901562078932972116922557530112\"},\r\n    {1.729e98, chars_format::fixed,\r\n        \"172899999999999997582110619557050501652189707920053623560516961594769005841004878635979497409609728\"},\r\n    {1.729e99, chars_format::fixed,\r\n        \"1729000000000000097237911959678571948988266255670467900755597056706410136648324395041312799421628416\"},\r\n    {1.729e100, chars_format::fixed,\r\n        \"17290000000000000001044673483921184030151709144945225686352551040994340740577039080960985391612035072\"},\r\n    {1.729e101, chars_format::fixed,\r\n        \"172900000000000007781122303742128123979364718743527883433152866618501492413020029765226994736954343424\"},\r\n    {1.729e102, chars_format::fixed,\r\n        \"1729000000000000015645818486197950970370866169082673821774509816516550244072203186007332820802871492608\"},\r\n    {1.729e103, chars_format::fixed,\r\n        \"17290000000000000653781421271766151859090909837647578318201248962513219881186008753232825220562090459136\"},\r\n    {1.729e104, chars_format::fixed,\r\n        \"17289999999999999062347064760448896961867715767820889996741566411000524071701282695122434780455288753356\"\r\n        \"8\"},\r\n    {1.729e105, chars_format::fixed,\r\n        \"172899999999999990623470647604488969618677157678208899967415664110005240717012826951224347804552887533568\"\r\n        \"0\"},\r\n    {1.729e106, chars_format::fixed,\r\n        \"1728999999999999957160605884407041852897913787016543025960866482748458673073639503371775972128946529920614\"\r\n        \"4\"},\r\n    {1.729e107, chars_format::fixed,\r\n        \"1729000000000000079382764464476207029004655091579232689048970102704633711242066464634653957929148900924456\"\r\n        \"96\"},\r\n    {1.729e108, chars_format::fixed,\r\n        \"1729000000000000079382764464476207029004655091579232689048970102704633711242066464634653957929148900924456\"\r\n        \"960\"},\r\n    {1.729e109, chars_format::fixed,\r\n        \"1728999999999999922938401481987675603588026221738989920296197469160729662386479954218170136104889866039538\"\r\n        \"4832\"},\r\n    {1.729e110, chars_format::fixed,\r\n        \"1729000000000000006375395072648225697143561618987119396964342873717478488442792759773628174411161351311495\"\r\n        \"00416\"},\r\n    {1.729e111, chars_format::fixed,\r\n        \"1729000000000000073124989945176665771987989936785622978298859197362877549287843004217994605056178539529060\"\r\n        \"220928\"},\r\n    {1.729e112, chars_format::fixed,\r\n        \"1729000000000000019725314047153913712112447282546820113231246138446558300611802808662501460540164788955008\"\r\n        \"0475136\"},\r\n    {1.729e113, chars_format::fixed,\r\n        \"1729000000000000062445054765572115360012881405937862405285336585579613699552634965106895976152975789414249\"\r\n        \"78624512\"},\r\n    {1.729e114, chars_format::fixed,\r\n        \"1728999999999999994093469616102992723372186808512194737998791870166725061247303514795864751172478188679463\"\r\n        \"004274688\"},\r\n    {1.729e115, chars_format::fixed,\r\n        \"1729000000000000048774737735678290832684742486452728871828027642497035971891568675044689731156876269267292\"\r\n        \"4298510336\"},\r\n    {1.729e116, chars_format::fixed,\r\n        \"1729000000000000136264766726998767807584831571157583485954804878225533428922392931442809699131913198207819\"\r\n        \"51077318656\"},\r\n    {1.729e117, chars_format::fixed,\r\n        \"1728999999999999996280720340886004647744689035629816103351961301059937497673074121205817750371854111902976\"\r\n        \"181297741824\"},\r\n    {1.729e118, chars_format::fixed,\r\n        \"1729000000000000108267957449776215175616803064052030009434236162792414242672529169395411309379901380946850\"\r\n        \"8448780976128\"},\r\n    {1.729e119, chars_format::fixed,\r\n        \"1728999999999999884293483231995794119872575007207602197269686439327460752673619073016224191363806842859101\"\r\n        \"51771738603520\"},\r\n    {1.729e120, chars_format::fixed,\r\n        \"1729000000000000099308978481064998333387033941778252896947654173853816103072572765540243824659257599423340\"\r\n        \"871791669149696\"},\r\n    {1.729e121, chars_format::fixed,\r\n        \"1729000000000000041971513081313210543116511559226079377033529444646788009632851780867171922447137397672877\"\r\n        \"0440385269858304\"},\r\n    {1.729e122, chars_format::fixed,\r\n        \"1728999999999999904361596121908919846467257841100862929239630094549920585377521417651799357138048913471763\"\r\n        \"85743098579255296\"},\r\n    {1.729e123, chars_format::fixed,\r\n        \"1728999999999999977753551833591208218013526490767645034729709747934916544980364278033331391969562771712357\"\r\n        \"556955007762300928\"},\r\n    {1.729e124, chars_format::fixed,\r\n        \"1729000000000000095180680972282869612487556330234496403513837193350910080344912854643782647699984944897307\"\r\n        \"4761934429138976768\"},\r\n    {1.729e125, chars_format::fixed,\r\n        \"1729000000000000048209829316806205054697944394447755856000186215184512666199093423999602145407816075623327\"\r\n        \"50849806885325897728\"},\r\n    {1.729e126, chars_format::fixed,\r\n        \"1729000000000000048209829316806205054697944394447755856000186215184512666199093423999602145407816075623327\"\r\n        \"508498068853258977280\"},\r\n    {1.729e127, chars_format::fixed,\r\n        \"1728999999999999927964449078785943786756537838833700054365239711078535285985795681550500059539863770281938\"\r\n        \"7911979112580239065088\"},\r\n    {1.729e128, chars_format::fixed,\r\n        \"1728999999999999927964449078785943786756537838833700054365239711078535285985795681550500059539863770281938\"\r\n        \"79119791125802390650880\"},\r\n    {1.729e129, chars_format::fixed,\r\n        \"1729000000000000120357057459618361815462788327816189336981154117648099094327072069469063396928587458828160\"\r\n        \"738878163410400019742720\"},\r\n    {1.729e130, chars_format::fixed,\r\n        \"1728999999999999997225788095885614277090788014867396196106968897443578256988655181201182860999804298158578\"\r\n        \"6923628020328793072730112\"},\r\n    {1.729e131, chars_format::fixed,\r\n        \"1728999999999999997225788095885614277090788014867396196106968897443578256988655181201182860999804298158578\"\r\n        \"69236280203287930727301120\"},\r\n    {1.729e132, chars_format::fixed,\r\n        \"1729000000000000036627794292280093489369828115011010001186708167909024924936948585446904632497014909572844\"\r\n        \"947247717673685935263318016\"},\r\n    {1.729e133, chars_format::fixed,\r\n        \"1729000000000000099671004206511260229016292275240792089314291000653739593654218032240059466892551887835670\"\r\n        \"9550635826989765400478089216\"},\r\n    {1.729e134, chars_format::fixed,\r\n        \"1728999999999999948367300412356460053864778290689315077808092202066424388732771359936487864343263140004888\"\r\n        \"53630550663827908856503074816\"},\r\n    {1.729e135, chars_format::fixed,\r\n        \"1728999999999999988714954757464406767238515353236375614209745215023041776711823805884106958356406806093097\"\r\n        \"181307660254465075627104927744\"},\r\n    {1.729e136, chars_format::fixed,\r\n        \"1728999999999999924158707805291692025840536053161078755967100394292453955945339892367916407935376940351963\"\r\n        \"3493042144685674963277862404096\"},\r\n    {1.729e137, chars_format::fixed,\r\n        \"1728999999999999975803705367029863818958919493221316242561216250876924212558527023180868848272200832944870\"\r\n        \"41490697109728555976724119027712\"},\r\n    {1.729e138, chars_format::fixed,\r\n        \"1729000000000000099751699515201476122443039749365886210387094306679652828430176137131954705080578175167847\"\r\n        \"372353587006208912021933069959168\"},\r\n    {1.729e139, chars_format::fixed,\r\n        \"1729000000000000099751699515201476122443039749365886210387094306679652828430176137131954705080578175167847\"\r\n        \"3723535870062089120219330699591680\"},\r\n    {1.729e140, chars_format::fixed,\r\n        \"1728999999999999993982744508761700290136590464122519837842345032394657742886368893227028107270762843137573\"\r\n        \"70199914143059431809792933263048704\"},\r\n    {1.729e141, chars_format::fixed,\r\n        \"1729000000000000036290326511337610623059170178219866386860244742108655777103891790788998746394688975949683\"\r\n        \"170140919660840155667530827561959424\"},\r\n    {1.729e142, chars_format::fixed,\r\n        \"1729000000000000036290326511337610623059170178219866386860244742108655777103891790788998746394688975949683\"\r\n        \"1701409196608401556675308275619594240\"},\r\n    {1.729e143, chars_format::fixed,\r\n        \"1729000000000000090444031474634775849200072212264469969603156370542573260902321099668321164473314425949183\"\r\n        \"28936239579555482775662074107424407552\"},\r\n    {1.729e144, chars_format::fixed,\r\n        \"1728999999999999873829211621446114944636464076086055638631509856806903325708603864151031492158812625951182\"\r\n        \"812476491256696139400261087025105469440\"},\r\n    {1.729e145, chars_format::fixed,\r\n        \"1728999999999999943145953974466486434096818679663148224542436741202317704970593379516564187299453201950542\"\r\n        \"9650799807091309196742961763208298233856\"},\r\n    {1.729e146, chars_format::fixed,\r\n        \"1728999999999999943145953974466486434096818679663148224542436741202317704970593379516564187299453201950542\"\r\n        \"96507998070913091967429617632082982338560\"},\r\n    {1.729e147, chars_format::fixed,\r\n        \"1729000000000000031871384186332561940606072572241826734508423153228448110425939959184446037079473139229723\"\r\n        \"960412447208247438425061090619356996435968\"},\r\n    {1.729e148, chars_format::fixed,\r\n        \"1728999999999999889910695847346841130191266344115941118562844893986639461697385431715835077431441239583034\"\r\n        \"3678805008096610084238372277417135195553792\"},\r\n    {1.729e149, chars_format::fixed,\r\n        \"1728999999999999946694971182941129454357188835366295364941076197683362921188807242703279461290653999441710\"\r\n        \"20489327936909558042432677289277091030761472\"},\r\n    {1.729e150, chars_format::fixed,\r\n        \"1728999999999999946694971182941129454357188835366295364941076197683362921188807242703279461290653999441710\"\r\n        \"204893279369095580424326772892770910307614720\"},\r\n    {1.729e151, chars_format::fixed,\r\n        \"1728999999999999946694971182941129454357188835366295364941076197683362921188807242703279461290653999441710\"\r\n        \"2048932793690955804243267728927709103076147200\"},\r\n    {1.729e152, chars_format::fixed,\r\n        \"1729000000000000062989167070238231942248998097447020861523693907654252566227239111605565559434321731632278\"\r\n        \"31909544985881758388132936136213644656819306496\"},\r\n    {1.729e153, chars_format::fixed,\r\n        \"1729000000000000156024523780075913932562445507111601258789788075630964282257984606727394437949255917384732\"\r\n        \"810457186250595186646931432137628875576655740928\"},\r\n    {1.729e154, chars_format::fixed,\r\n        \"1728999999999999932739667676465477155810171723916608305351162072486856163784195418435005129513413871578842\"\r\n        \"0311890189103289400094864622764470459563453186048\"},\r\n    {1.729e155, chars_format::fixed,\r\n        \"1728999999999999932739667676465477155810171723916608305351162072486856163784195418435005129513413871578842\"\r\n        \"03118901891032894000948646227644704595634531860480\"},\r\n    {1.729e156, chars_format::fixed,\r\n        \"1728999999999999885105565041028583976769686650168343141950921858482779765176453724932628743713767568473585\"\r\n        \"331611809877738807393498202039394922304012428509184\"},\r\n    {1.729e157, chars_format::fixed,\r\n        \"1728999999999999961320129257727613063234462768165567403391306200889302002948840434536430960993201653441996\"\r\n        \"0509353443298830195790794184186783201477450526621696\"},\r\n    {1.729e158, chars_format::fixed,\r\n        \"1729000000000000022291780631086836332406283662563346812543613674814519793166749802219472734816748921416724\"\r\n        \"62639417189159838932754439152210503842273115198455808\"},\r\n    {1.729e159, chars_format::fixed,\r\n        \"1729000000000000071069101729774214947743740378081570339865459653954694025341077296365906153875586735796507\"\r\n        \"486761233940970685126316370004846413042720031442468864\"},\r\n    {1.729e160, chars_format::fixed,\r\n        \"1728999999999999875959817335024700486393913516008676230578075737393997096643767319780172477640235478277376\"\r\n        \"0452929857434815019312284560738809145627645136108257280\"},\r\n    {1.729e161, chars_format::fixed,\r\n        \"1729000000000000000829759347664389741657802707735328460522001443992843131010045704795042030430860283089620\"\r\n        \"16783266458987457917608472098969883358993604502307733504\"},\r\n    {1.729e162, chars_format::fixed,\r\n        \"1729000000000000050777736152720265443763358384425989352499571726632381544756557058800989851547110205014517\"\r\n        \"816848536128431810074027226956026001200804657587977977856\"},\r\n    {1.729e163, chars_format::fixed,\r\n        \"1728999999999999970860973264630864320394469301720931925335459274409120082762138892391473337761110329934681\"\r\n        \"5784231416667402406373192174099025330234148774841369493504\"},\r\n    {1.729e164, chars_format::fixed,\r\n        \"1728999999999999970860973264630864320394469301720931925335459274409120082762138892391473337761110329934681\"\r\n        \"57842314166674024063731921740990253302341487748413694935040\"},\r\n    {1.729e165, chars_format::fixed,\r\n        \"1728999999999999919714245016253647601438380288789695171950427304986232747085711265889382768938070409883586\"\r\n        \"385830889211257636197826091300383513389885418217678691106816\"},\r\n    {1.729e166, chars_format::fixed,\r\n        \"1728999999999999837879479818850100851108637868099716366534376153909613010003427063486037858821206537801834\"\r\n        \"0776832852824854690946370895251530819762382833913454779170816\"},\r\n    {1.729e167, chars_format::fixed,\r\n        \"1729000000000000099750728450541450452163813614307648543865739837354796168666736511176741571195170928463441\"\r\n        \"46375561785455640382484189520589046249990911483561176012423168\"},\r\n    {1.729e168, chars_format::fixed,\r\n        \"1729000000000000047376478724203180531952778465066062108399467100665759536934074621638600828720378050331119\"\r\n        \"986541151340142216878800934069742986395174948546758503682801664\"},\r\n    {1.729e169, chars_format::fixed,\r\n        \"1729000000000000005477078943132564595783950345672792960026448911314530231547945110008088234740543747825262\"\r\n        \"8047695781286108673219681651608250055113876155156758985296576512\"},\r\n    {1.729e170, chars_format::fixed,\r\n        \"1729000000000000072516118592845550093654075336702023597423278014276497120165752328616908385108278631834634\"\r\n        \"29560409526706102661290059541509377492544734836540806677468807168\"},\r\n    {1.729e171, chars_format::fixed,\r\n        \"1728999999999999911622423433534384898765775358231870067670888167167776587483015003955740024225714910212142\"\r\n        \"717601254134780644314662762804848728331703989526050862986615062528\"},\r\n    {1.729e172, chars_format::fixed,\r\n        \"1729000000000000126147350312615938491950175329525408107340741296646070631059998103503964505402466539042131\"\r\n        \"4882717089778211540456465396185087904566951346451938013707124080640\"},\r\n    {1.729e173, chars_format::fixed,\r\n        \"1729000000000000057499373711309841342131167338711475934646388295213016537115363511648532671425906017816535\"\r\n        \"08165716342804819093173173103813757057669796820706806108780125749248\"},\r\n    {1.729e174, chars_format::fixed,\r\n        \"1728999999999999892744229868175208182565548160758038720179941091773686711648240491195496269882160766875103\"\r\n        \"705782254108593079458336190445246642864704768755566284408814496120832\"},\r\n    {1.729e175, chars_format::fixed,\r\n        \"1729000000000000112417754992354719061986373731362621672801870696359459812271071185132878138607154434797012\"\r\n        \"2069487998678665614228635779024345464806957013575686533141301779496960\"},\r\n    {1.729e176, chars_format::fixed,\r\n        \"1728999999999999901531170873142388617742381183582222038284818275957117635673153718952991544631160513591980\"\r\n        \"04582891593896401873691728594353415900934440605964637916502712339398656\"},\r\n    {1.729e177, chars_format::fixed,\r\n        \"1729000000000000014004015736722298188005843875731768510027246233505033463192043034248931061418357271567997\"\r\n        \"198426187367712041502755308321614365660731763551871592044548752490364928\"},\r\n    {1.729e178, chars_format::fixed,\r\n        \"1729000000000000103982291627586225844216614029451405687421188599543366125207154486485682674848114677948810\"\r\n        \"9205040045107104597154257262240785309818416495456517623481660557674676224\"},\r\n    {1.729e179, chars_format::fixed,\r\n        \"1729000000000000103982291627586225844216614029451405687421188599543366125207154486485682674848114677948810\"\r\n        \"92050400451071045971542572622407853098184164954565176234816605576746762240\"},\r\n    {1.729e180, chars_format::fixed,\r\n        \"1729000000000000103982291627586225844216614029451405687421188599543366125207154486485682674848114677948810\"\r\n        \"920504004510710459715425726224078530981841649545651762348166055767467622400\"},\r\n    {1.729e181, chars_format::fixed,\r\n        \"1729000000000000057913414371463894884236699710746951452595490108131739802255417422940465848772078885881834\"\r\n        \"2948001621334952695905384722580168783374333879168363151527139964895910428672\"},\r\n    {1.729e182, chars_format::fixed,\r\n        \"1729000000000000131623617981259624420204562620674078228316607694390341918978196724612812770493736153188996\"\r\n        \"89592630993703957379035807860371552256848660652294103066543729133419357011968\"},\r\n    {1.729e183, chars_format::fixed,\r\n        \"1728999999999999954719129317749873533881691636848973966585925487369696838843526400599180158361758711651806\"\r\n        \"653223555208533243710791023374038776413958881868289713434901383707147504713728\"},\r\n    {1.729e184, chars_format::fixed,\r\n        \"1728999999999999813195538386942072824823394849788890557201379721753180774735790141388274068656176758422054\"\r\n        \"4590613514257281796471373791902973794903367021445686596504726576055106523889664\"},\r\n    {1.729e185, chars_format::fixed,\r\n        \"1729000000000000115112532372665381004147761328850401830555077355068415044832294161038207060028084925312192\"\r\n        \"47327405282904564964959848678227902626073068555517357439058727328900260401512448\"},\r\n    {1.729e186, chars_format::fixed,\r\n        \"1728999999999999933962335981231396096553141441413495066542858775079274482774391749248247265204940025178109\"\r\n        \"664746431987055167648121822227090038198494295508810625546518503878907433039429632\"},\r\n    {1.729e187, chars_format::fixed,\r\n        \"1729000000000000078882493094378584022628837351363020477752633639070586932420713678680215101063455945285375\"\r\n        \"9115685286606475532493031538712412286482834075459009846217735194069835698199855104\"},\r\n    {1.729e188, chars_format::fixed,\r\n        \"1729000000000000001591742634033417128721799532723273591774087044941886959276008649649832255272247454561500\"\r\n        \"57993007710139828092867311032769392707506254779278612644830417779200963020368904192\"},\r\n    {1.729e189, chars_format::fixed,\r\n        \"1729000000000000001591742634033417128721799532723273591774087044941886959276008649649832255272247454561500\"\r\n        \"579930077101398280928673110327693927075062547792786126448304177792009630203689041920\"},\r\n    {1.729e190, chars_format::fixed,\r\n        \"1728999999999999952125662339412510316621295328793835584747817224699518976463397431070387233965874020498220\"\r\n        \"3676814681034787466434698824598236540682011975507926172172837991584263088492593020928\"},\r\n    {1.729e191, chars_format::fixed,\r\n        \"1729000000000000070844255046502686665662505418224486801610864793281202135213664355661055285101170262250092\"\r\n        \"87707812969848562892795762934271230928466843813157703937173270787902628009989067767808\"},\r\n    {1.729e192, chars_format::fixed,\r\n        \"1728999999999999880894506715158404507196569275135444854629988683550509081213237276315986403284696275447096\"\r\n        \"862043471146474617272777234330090460938320853202321963924614453926066326098880476741632\"},\r\n    {1.729e193, chars_format::fixed,\r\n        \"1729000000000000032854305380233830233969318189606678412214689571335063524413578939792041508737875464889493\"\r\n        \"6740711979880834265969215503401879396153989211457260242823090570884342892996886374907904\"},\r\n    {1.729e194, chars_format::fixed,\r\n        \"1729000000000000032854305380233830233969318189606678412214689571335063524413578939792041508737875464889493\"\r\n        \"67407119798808342659692155034018793961539892114572602428230905708843428929968863749079040\"},\r\n    {1.729e195, chars_format::fixed,\r\n        \"1729000000000000097690486143999345210725691059781071396784161950123140086845724716208491687064565252384916\"\r\n        \"313869694773836518575223125171162863850952230134911756701592087771044620265366786077097984\"},\r\n    {1.729e196, chars_format::fixed,\r\n        \"1728999999999999942083652310962109266510396171362528233817428241031756337008574852809011259080509762395901\"\r\n        \"9783533024880290978272993455768230456856242885608659988953128141327798259477392294699597824\"},\r\n    {1.729e197, chars_format::fixed,\r\n        \"1728999999999999900588496622152179681386317534450916723692965918607387337052001555902483144951428298398831\"\r\n        \"48888226454514711896118633768499909417487017080778713014697167449590921412970521437472292864\"},\r\n    {1.729e198, chars_format::fixed,\r\n        \"1728999999999999900588496622152179681386317534450916723692965918607387337052001555902483144951428298398831\"\r\n        \"488882264545147118961186337684999094174870170807787130146971674495909214129705214374722928640\"},\r\n    {1.729e199, chars_format::fixed,\r\n        \"1729000000000000006816095185505599419303958844944642189611589464013771976940829195983195117121876846231331\"\r\n        \"9419281216789249848584356378880684100424007122556690341427249919662979803838722930185292742656\"},\r\n    {1.729e200, chars_format::fixed,\r\n        \"1729000000000000049307134610846967314471015369142132375979038882176325832896360252015479905990056265364332\"\r\n        \"12314646453243613121733535796929613638941292883482179574102631895445348688553912447605181251584\"},\r\n    {1.729e201, chars_format::fixed,\r\n        \"1729000000000000117292797691393155946738305807858116674166957951236412002425209941667135568179143335977132\"\r\n        \"413095813098053965391574910099260498544632475361466214298308442135502297288206054808087873716224\"},\r\n    {1.729e202, chars_format::fixed,\r\n        \"1728999999999999954127206298082303229296808754939754358515952185492205195555970686503161978925334366506411\"\r\n        \"7172173765405711633733999849873460293721055636975196097608313465009851523218054220112013268353024\"},\r\n    {1.729e203, chars_format::fixed,\r\n        \"1728999999999999867105557554983181779994676993383294456835415777095294898559043083749042731323302916122027\"\r\n        \"34608221037658033563037335826099164581342454414341475400751022882924267500639175118619516849881088\"},\r\n    {1.729e204, chars_format::fixed,\r\n        \"1728999999999999867105557554983181779994676993383294456835415777095294898559043083749042731323302916122027\"\r\n        \"346082210376580335630373358260991645813424544143414754007510228829242675006391751186195168498810880\"},\r\n    {1.729e205, chars_format::fixed,\r\n        \"1728999999999999978493267946150057235101405648175563130986502379843340078715110415274315368253903172614039\"\r\n        \"3411352230664885951414474404707252567685362491726689693717612594490730459701212498422030511695200256\"},\r\n    {1.729e206, chars_format::fixed,\r\n        \"1729000000000000023048352102616807417144097110092470600646937020942558150777537347884424423026143275210844\"\r\n        \"13915642814245189894587707335461870115058093118437065551746167169700519435561304930460620423780368384\"},\r\n    {1.729e207, chars_format::fixed,\r\n        \"1728999999999999951760217452270007125875790771025418649190241595183809235477654255708249935390559111055956\"\r\n        \"462322500020910612858789660740389190139309439965647957684341012100313756938826170164761159328549830656\"},\r\n    {1.729e208, chars_format::fixed,\r\n        \"1729000000000000065821232892824887591905080913532701771520954276397807499957467203190129115607493773703776\"\r\n        \"7452567850153766705981295209231564077573438259156042742173340674550200568056851767885132311833559957504\"},\r\n    {1.729e209, chars_format::fixed,\r\n        \"1728999999999999974572420540380983219081648799526875273656384131426608888373616845204625771433946043585520\"\r\n        \"51890935701980382440665763277694263366291631715563922099093962317125501691219797148951157369951106367488\"},\r\n    {1.729e210, chars_format::fixed,\r\n        \"1729000000000000047571470422336106717340394490731536471948040247403567777640697131593028446772784227680125\"\r\n        \"49998729941626210135983514329391365293845832416361126357205517859826704882698773572871289968658700933529\"\r\n        \"6\"},\r\n    {1.729e211, chars_format::fixed,\r\n        \"1728999999999999930772990611207909120126401384804078554681390461840433554813368673371584166230643133128757\"\r\n        \"530262591581928858234751126466760022097591112950855995442270289915047797763324112945990778107265496278630\"\r\n        \"4\"},\r\n    {1.729e212, chars_format::fixed,\r\n        \"1729000000000000024211774460110467197897595869546044888494710290290940933075231439948739590664356008769851\"\r\n        \"9060423578493954527348183399284829267702848819210602099460982008616231986142550111721684753707227067239628\"\r\n        \"8\"},\r\n    {1.729e213, chars_format::fixed,\r\n        \"1729000000000000098962801539232513660114551457339617955545366153051346835684721653210463930211326309282727\"\r\n        \"4066661708633687283348721106978612505084398970972235815491605296188835192949997297531106331814884750802288\"\r\n        \"64\"},\r\n    {1.729e214, chars_format::fixed,\r\n        \"1729000000000000098962801539232513660114551457339617955545366153051346835684721653210463930211326309282727\"\r\n        \"4066661708633687283348721106978612505084398970972235815491605296188835192949997297531106331814884750802288\"\r\n        \"640\"},\r\n    {1.729e215, chars_format::fixed,\r\n        \"1728999999999999859759514886041964981020293576400184140983267392218047947334352970772946043661021347641525\"\r\n        \"8046699692186542464147000442358506145463438485335007924193610775956504931166166302940957281870380163401777\"\r\n        \"1520\"},\r\n    {1.729e216, chars_format::fixed,\r\n        \"1728999999999999859759514886041964981020293576400184140983267392218047947334352970772946043661021347641525\"\r\n        \"8046699692186542464147000442358506145463438485335007924193610775956504931166166302940957281870380163401777\"\r\n        \"15200\"},\r\n    {1.729e217, chars_format::fixed,\r\n        \"1729000000000000104703680418909086828412813646482164367094856523311346009005130501588964359488533628362116\"\r\n        \"2451140797028418759009562402929495057715302022627529284882757164674411119232809241401269909013552860899900\"\r\n        \"915712\"},\r\n    {1.729e218, chars_format::fixed,\r\n        \"1728999999999999908748347992615389350498797590416580186205585218436707559668508476936149706826523803785643\"\r\n        \"8927587913154917723119512834472703927913811192793512196331440053700086168779494890633019807299014702901401\"\r\n        \"9047424\"},\r\n    {1.729e219, chars_format::fixed,\r\n        \"1728999999999999947939414477874128846081600801629697022383439479411635249535832881866712637358925768700938\"\r\n        \"3632298489929617930297522748164062153874109358760315614041703475894951158870157760786669827641922334501101\"\r\n        \"70693632\"},\r\n    {1.729e220, chars_format::fixed,\r\n        \"1729000000000000073350827230702095231946571077511670898152573114531403857111270977644514015062612056429880\"\r\n        \"6687372335608658593267154471976408476947063489854086550714546426918519127160278945278349892739226755620141\"\r\n        \"073956864\"},\r\n    {1.729e221, chars_format::fixed,\r\n        \"1728999999999999973021697028439722123254594856806091797537266206435588971050920501022272912899663026246726\"\r\n        \"8243313259065426062891449092926531418488700184979069801376272066099664752528181997685005840661383218724909\"\r\n        \"5803404288\"},\r\n    {1.729e222, chars_format::fixed,\r\n        \"1728999999999999852626740785724874392824223391959396876798897916720611107778499929075583590304124190026942\"\r\n        \"2110442367213547026440602638066678948338664219129049702170342833117039502969665660572992978167970974450631\"\r\n        \"78800070656\"},\r\n    {1.729e223, chars_format::fixed,\r\n        \"1729000000000000109469314103516549551075682516965679374374083601445897216092997149228520811841273707295816\"\r\n        \"0527233603164222304202408408434364217992074279609092580476325196813306702027833846411953751487250428902424\"\r\n        \"411658780672\"},\r\n    {1.729e224, chars_format::fixed,\r\n        \"1728999999999999955363770112841544456124807041961909875828972190610725551104298817136758478918983996934491\"\r\n        \"7477158861593817137545324946213753056200028243321066853492735778595546382592932934908577287495682756231348\"\r\n        \"8374639362048\"},\r\n    {1.729e225, chars_format::fixed,\r\n        \"1728999999999999955363770112841544456124807041961909875828972190610725551104298817136758478918983996934491\"\r\n        \"7477158861593817137545324946213753056200028243321066853492735778595546382592932934908577287495682756231348\"\r\n        \"83746393620480\"},\r\n    {1.729e226, chars_format::fixed,\r\n        \"1729000000000000086867167651550882137149554113965126514587467261190072038561321393855062336346004549776155\"\r\n        \"1546555974400562879759369500642007914262574194286848807185398748808035188510715046058125203435153836910666\"\r\n        \"660776870150144\"},\r\n    {1.729e227, chars_format::fixed,\r\n        \"1728999999999999929063090605099676919919857627561266548077273176494856253612894301793097707433579886366159\"\r\n        \"0663279439032467989102516035328102084587519053127910462754203184553048621409376512678667704307788540095485\"\r\n        \"2728013494157312\"},\r\n    {1.729e228, chars_format::fixed,\r\n        \"1729000000000000097387439454647629151631533879725383845688146866836419757557883199992526644940166194003488\"\r\n        \"2272107743425102539136493064996268302907577870364111363480811786425034292984137614950089036710311523365012\"\r\n        \"08664190486577152\"},\r\n    {1.729e229, chars_format::fixed,\r\n        \"1729000000000000097387439454647629151631533879725383845688146866836419757557883199992526644940166194003488\"\r\n        \"2272107743425102539136493064996268302907577870364111363480811786425034292984137614950089036710311523365012\"\r\n        \"086641904865771520\"},\r\n    {1.729e230, chars_format::fixed,\r\n        \"1729000000000000043523647822792284437483797479032866310452667285927119436295486752568709384938058575559542\"\r\n        \"8957282686019459483125620415502455113045159048848527075248297033825998878080214062223234210341504168718763\"\r\n        \"5062129271217586176\"},\r\n    {1.729e231, chars_format::fixed,\r\n        \"1728999999999999828068481295370905580892851876262796169510748962289918151245900962873440344929628101783761\"\r\n        \"5697982456396887259082129817527202353595483762786189922318238023429857218464519851315814904866274750133769\"\r\n        \"18449701614570700800\"},\r\n    {1.729e232, chars_format::fixed,\r\n        \"1728999999999999897014134584145746815001954469149218614612162825853822562461768415575926437732325853392011\"\r\n        \"5940958529876110370776046808879283236619379854326137811255856906756622549541541998806189082618348164080967\"\r\n        \"367446107658043523072\"},\r\n    {1.729e233, chars_format::fixed,\r\n        \"1729000000000000062483702477205365776863800692076632482855556098407193149379850302061893060458800457251811\"\r\n        \"6524101106226245838841447588124277355876730474022012744706142226740859344126395152783087109223324357554243\"\r\n        \"0065239272876511592448\"},\r\n    {1.729e234, chars_format::fixed,\r\n        \"1729000000000000106608920582021264166693626351523942847720460971088091972558005471791484159852527018281091\"\r\n        \"6679605793252948630325554462589609121012023972607579393626218312069989156015689327176926582984651342480449\"\r\n        \"84361134585554652889088\"},\r\n    {1.729e235, chars_format::fixed,\r\n        \"1728999999999999894807873678904951895510463186176853096368917582219777621302860657089446882762639525340547\"\r\n        \"5933183295524775231201841465156016648362615179396859478809853102490166058947077290086497108930281814834657\"\r\n        \"025591736729648754589696\"},\r\n    {1.729e236, chars_format::fixed,\r\n        \"1729000000000000007768432027233651773474816874361967630423074056282878608638937891597200097210579521575504\"\r\n        \"4331275294313134377401155063787265967108966535775910100045247880932738377383670376534726161759278896245746\"\r\n        \"5285355282634609008836608\"},\r\n    {1.729e237, chars_format::fixed,\r\n        \"1728999999999999827031538669907731968731850973265784375936423697781917028901214316384794954093875527599573\"\r\n        \"4894328096251759743482253305977267057114804365569429106068616235424622667885121438217559677232883565988003\"\r\n        \"32382546180936146681331712\"},\r\n    {1.729e238, chars_format::fixed,\r\n        \"1729000000000000043915810698698835734423410054581204281320404127983070924586482606639681125833920320370690\"\r\n        \"6218664733925409304184935415349265749107798969817206298840574210034361519283380164198159458664557962297295\"\r\n        \"169477541554280787697729536\"},\r\n    {1.729e239, chars_format::fixed,\r\n        \"1729000000000000043915810698698835734423410054581204281320404127983070924586482606639681125833920320370690\"\r\n        \"6218664733925409304184935415349265749107798969817206298840574210034361519283380164198159458664557962297295\"\r\n        \"1694775415542807876977295360\"},\r\n    {1.729e240, chars_format::fixed,\r\n        \"1728999999999999905109876600272529324380812242539335541874656652654332431347910900876553975920291652997175\"\r\n        \"6571089285814273585335218865351186586232282423098628895466521106284128654388494579570575598548286348659348\"\r\n        \"38826021051753242233170558976\"},\r\n    {1.729e241, chars_format::fixed,\r\n        \"1729000000000000053169539638593922828426249908717328863950120626338320157469054053690556269161495564862258\"\r\n        \"2861836430466151685441583185349137693299500072931778125732177750284377043609705869839998382672309403206491\"\r\n        \"621558696956730678722131132416\"},\r\n    {1.729e242, chars_format::fixed,\r\n        \"1729000000000000112393404853922480230044424975188526192780306215811915247917511314816157186457977129608291\"\r\n        \"3378135288326902925484128913348318136126387132865037817838440407884476399298190385947767496321918625025348\"\r\n        \"9148780915324099812783013494784\"},\r\n    {1.729e243, chars_format::fixed,\r\n        \"1728999999999999828118851820345404702277184656126779014395415386338658813764916461413272783434865618827332\"\r\n        \"6899900770595296973279909418952252010557329245185391295728379651403999491993464708630475750803794360294833\"\r\n        \"90694499756914932900868430757888\"},\r\n    {1.729e244, chars_format::fixed,\r\n        \"1728999999999999979731946771586511650419712826293044176200690495391062245312967049894811131713858424577177\"\r\n        \"3021625846718820147788826482630153944194160118614536107520412054860253842555985069866364681746793968151108\"\r\n        \"577842647682888343552480063258624\"},\r\n    {1.729e245, chars_format::fixed,\r\n        \"1729000000000000040377184752082954429676724094359550240922800539012023617932187285287426471025455546877115\"\r\n        \"1470315877168229417592393308101314717648892467986194032237225016242755582780993214360720254123993811293618\"\r\n        \"4462017077283839493699983655305216\"},\r\n    {1.729e246, chars_format::fixed,\r\n        \"1729000000000000040377184752082954429676724094359550240922800539012023617932187285287426471025455546877115\"\r\n        \"1470315877168229417592393308101314717648892467986194032237225016242755582780993214360720254123993811293618\"\r\n        \"44620170772838394936999836553052160\"},\r\n    {1.729e247, chars_format::fixed,\r\n        \"1729000000000000079190137059600677808401211305922114122344950966929438896408488235938700288184877705149075\"\r\n        \"3677477496655851350266676076402857612659921171584055104055985311527556696524998426837107820445401710904824\"\r\n        \"761951506157501137093210078984536064\"},\r\n    {1.729e248, chars_format::fixed,\r\n        \"1728999999999999954988689675543962996482852228921909701794069597593710005284325193854624073274726798678802\"\r\n        \"6614560314295461165708971217837920348624629320070899674235952366616193132544181746912667608216896432148964\"\r\n        \"5515521511843261363789325959316897792\"},\r\n    {1.729e249, chars_format::fixed,\r\n        \"1729000000000000054349847582789334846017539490522073238234774693062293118183655627521885045202847523855020\"\r\n        \"8264894060183773313355135104689870159852862801281424018091978722545283983728835090852219777999700655153652\"\r\n        \"71987163516286613695035458237396680704\"},\r\n    {1.729e250, chars_format::fixed,\r\n        \"1728999999999999974860921256993037366389789681241942409082210616687426627864191280588076267660350943714046\"\r\n        \"2944627063473123595238203995208310310870276016313004543007157637802011302781112415700578042173457276749902\"\r\n        \"185216047980034136493216993220145184768\"},\r\n    {1.729e251, chars_format::fixed,\r\n        \"1728999999999999974860921256993037366389789681241942409082210616687426627864191280588076267660350943714046\"\r\n        \"2944627063473123595238203995208310310870276016313004543007157637802011302781112415700578042173457276749902\"\r\n        \"1852160479800341364932169932201451847680\"},\r\n    {1.729e252, chars_format::fixed,\r\n        \"1729000000000000025733834105502667753351549559181226139739851625567341181668648462625713885287548755004269\"\r\n        \"9949597941367939414833039905276508614219131558692793007061443132037705818587654927797628753102253038928302\"\r\n        \"52739562377704661678578505027859102302208\"},\r\n    {1.729e253, chars_format::fixed,\r\n        \"1728999999999999985035503826694963443782141656829799155213738818463409538625082716995603791185790505972091\"\r\n        \"0345621239052086759157171177221949971540047124788962235818014736649150205942420918119988184359216429185582\"\r\n        \"253651963139436632551730604631834352418816\"},\r\n    {1.729e254, chars_format::fixed,\r\n        \"1729000000000000115270160718879617234404246944354365505697299801195990796364493103011956092311416902875063\"\r\n        \"7078346686462815257319951106996537628113117313281220703796985601892528166407169749088438004336933580362287\"\r\n        \"1296316771797885821007048307014556983492608\"},\r\n    {1.729e255, chars_format::fixed,\r\n        \"1729000000000000011082435205131894201906562714334712425310451015009925790172964794198874251410915785352685\"\r\n        \"5692166328534232458789727163176867502854661162487413929413808909697825798035370684313678148354759859420923\"\r\n        \"22884790594750702246152544984575862160490496\"},\r\n    {1.729e256, chars_format::fixed,\r\n        \"1729000000000000052757525410630983414905636406342573657465190529484351792649576117724106987771116232361636\"\r\n        \"8246638471705665578201816740704735552958043622804936639167079586575706745384090310223582090747629347797468\"\r\n        \"789161414440419646317197202188037452302647296\"},\r\n    {1.729e257, chars_format::fixed,\r\n        \"1729000000000000052757525410630983414905636406342573657465190529484351792649576117724106987771116232361636\"\r\n        \"8246638471705665578201816740704735552958043622804936639167079586575706745384090310223582090747629347797468\"\r\n        \"7891614144404196463171972021880374523026472960\"},\r\n    {1.729e258, chars_format::fixed,\r\n        \"1728999999999999999413409947592149222266822080572511280307123950957086509479513623611809085230059660190179\"\r\n        \"2176914128446231185354342081469064448825714073598507570682893120172019132777729189058905044484756402675490\"\r\n        \"47196012356949148778193735918992054900953710592\"},\r\n    {1.729e259, chars_format::fixed,\r\n        \"1728999999999999871387532836298947159933667698724361575127764162491649829871363637742294119131523886978680\"\r\n        \"9609575704623588642520402899303453798908123155503077806320845600803168862522462498263680133453861334382742\"\r\n        \"510677025479263907297313735994439981106072649728\"},\r\n    {1.729e260, chars_format::fixed,\r\n        \"1729000000000000007948468421678362693089032372695721260652414603521448954786723622669776749636628711737612\"\r\n        \"4348070023367740688209938026946771825486886801471536221640362954796609150794746968445253371886816073895007\"\r\n        \"0027123301088399931475789340696192535364347363328\"},\r\n    {1.729e261, chars_format::fixed,\r\n        \"1729000000000000062572842655830128906351178242284265134862274779933368604752867616640769801838670641641185\"\r\n        \"0243467750865401506485752078004099036118392259858919587768169896393985266103660756517882667259997969699912\"\r\n        \"79952645196067042748768501329969096250857957097472\"},\r\n    {1.729e262, chars_format::fixed,\r\n        \"1728999999999999844075345719223064053302594763930089638022834074285690004888291640756797593030502922026894\"\r\n        \"6661876840874758233382495873774790193592370426309386123256942130004480804868005604227365485767270386480289\"\r\n        \"612269964553348690127260696379404126620000232407040\"},\r\n    {1.729e263, chars_format::fixed,\r\n        \"1728999999999999913994544738937324806278141477003425797011455100092947156844955953039668699849116592303467\"\r\n        \"5807985932071764080775537859128169023200697413045236831900535015249122232463415252960330983844943213110569\"\r\n        \"0321920405236916460825964777938959141043456207486976\"},\r\n    {1.729e264, chars_format::fixed,\r\n        \"1728999999999999913994544738937324806278141477003425797011455100092947156844955953039668699849116592303467\"\r\n        \"5807985932071764080775537859128169023200697413045236831900535015249122232463415252960330983844943213110569\"\r\n        \"03219204052369164608259647779389591410434562074869760\"},\r\n    {1.729e265, chars_format::fixed,\r\n        \"1729000000000000048239406856788705451991191166104231222269607469642880888601751432622781224940854839234487\"\r\n        \"5768515387170015307770178471006656376048685227578070192496233354918833773446601778527624740154075040240705\"\r\n        \"518442426386750121516841178109720146074288766364680192\"},\r\n    {1.729e266, chars_format::fixed,\r\n        \"1728999999999999905044887264413899429897271497730038768660911608789618241394502921067461198176334042508066\"\r\n        \"2477283968398547332309228485002936533010831558743047941194155125937808129731202817922511400091001091301893\"\r\n        \"2664420147994877477203134977728409653063494110409654272\"},\r\n    {1.729e267, chars_format::fixed,\r\n        \"1729000000000000076878310775263666656409975099779069712991346641813533418043201134933845230293758998579771\"\r\n        \"8426761670924308902862368468207400344656255961345074642756649000715038902189681570648647408166689830028467\"\r\n        \"96884250870420259627614671417709598222787663742942314496\"},\r\n    {1.729e268, chars_format::fixed,\r\n        \"1728999999999999985233818236143790802269866512019586542681781290867445323830562087538440413164465688674862\"\r\n        \"1920373562910569398567360477165019645112029613290660401923318934167182490211826235861374870526322502707628\"\r\n        \"127562245288354677046368998761493306536395450022245695488\"},\r\n    {1.729e269, chars_format::fixed,\r\n        \"1728999999999999911918224204847890118957779641812000006434129010110574848460450849622116559461031040750934\"\r\n        \"4715263076499577795131354084331115085476648534847129009256654880928897360629541968031556840414028640850956\"\r\n        \"2545380345556763416625468264290111659832105000965037359104\"},\r\n    {1.729e270, chars_format::fixed,\r\n        \"1728999999999999970570699429884610665607449137978069235432250834716071228756539839955175642423778759090076\"\r\n        \"6479351465628371077880159198598238733184953397601954123389986123519525464295369382295411264503863730336293\"\r\n        \"75295740314181900996960456429499687842575846003709730357248\"},\r\n    {1.729e271, chars_format::fixed,\r\n        \"1728999999999999829804758889796481353648242347179503085836758455662879916045926263155833843313184235076135\"\r\n        \"4245539331719267199283026924357141978685021726990373849469991141302018015497383588062160646688259515571483\"\r\n        \"756750918535076606032665993416631168563643356179672741183488\"},\r\n    {1.729e272, chars_format::fixed,\r\n        \"1728999999999999979955095465890485953071396257364640312071950326652950649603914078408465095697818394024339\"\r\n        \"3961605607888978003119968016880978516818282175642726141651319122334025960881901768577627972358237344653947\"\r\n        \"7527045021156018368987338023535545924165661336275922743984128\"},\r\n    {1.729e273, chars_format::fixed,\r\n        \"1728999999999999979955095465890485953071396257364640312071950326652950649603914078408465095697818394024339\"\r\n        \"3961605607888978003119968016880978516818282175642726141651319122334025960881901768577627972358237344653947\"\r\n        \"75270450211560183689873380235355459241656613362759227439841280\"},\r\n    {1.729e274, chars_format::fixed,\r\n        \"1728999999999999931906987761540404481255987006105396399676688927936128014865357977527623094934735463160914\"\r\n        \"1252464399514670545892146867273350824615638832073973408153294168403783418358855950812678428143844439347559\"\r\n        \"273999355369833763021592103493739096783630844844258023769636864\"},\r\n    {1.729e275, chars_format::fixed,\r\n        \"1728999999999999893468501598060339303803659605098001269760479808962669907074513096822949494324269118470173\"\r\n        \"9085151432815224580109889947587248670853524157218971221354874205259589384340419296600718792772330115102448\"\r\n        \"4910352379732193039198787444058867002772826138175906232666161152\"},\r\n    {1.729e276, chars_format::fixed,\r\n        \"1729000000000000077973235182764652155574831129933497893358283580035268824470568524205382777254507572985726\"\r\n        \"9488253672972565215864723162080539008911674596522981717987290028351720747628915236818125042555598871478980\"\r\n        \"24926300147696870760810286802757820350775412274559414568111570944\"},\r\n    {1.729e277, chars_format::fixed,\r\n        \"1728999999999999979570710604255685301296872983354566360772788235463216068526005629601418359691713730577431\"\r\n        \"9939932478221983543462145447684117495280661028894176119783334922702584020541717402035508376004522201411496\"\r\n        \"644874860941635692307716668762676068451502651317325600393382592512\"},\r\n    {1.729e278, chars_format::fixed,\r\n        \"1729000000000000058292730267062858784719239500617711586841184511120858273281655945284589893741948804504067\"\r\n        \"9578589434022448881384207619201254706185471882997220598346499007221893402211475669861601709245383537465483\"\r\n        \"5283853733699021045480256281745977764965038284599404366235690860544\"},\r\n    {1.729e279, chars_format::fixed,\r\n        \"1729000000000000058292730267062858784719239500617711586841184511120858273281655945284589893741948804504067\"\r\n        \"9578589434022448881384207619201254706185471882997220598346499007221893402211475669861601709245383537465483\"\r\n        \"52838537336990210454802562817459777649650382845994043662356908605440\"},\r\n    {1.729e280, chars_format::fixed,\r\n        \"1729000000000000058292730267062858784719239500617711586841184511120858273281655945284589893741948804504067\"\r\n        \"9578589434022448881384207619201254706185471882997220598346499007221893402211475669861601709245383537465483\"\r\n        \"528385373369902104548025628174597776496503828459940436623569086054400\"},\r\n    {1.729e281, chars_format::fixed,\r\n        \"1729000000000000098598404334420131608231491157456441942588203404257571082116548906914373719175669162354505\"\r\n        \"5713581795392287134400303451018028958168735040297979371370839018495779805626391902988561495864704541525124\"\r\n        \"8127427557331745076150638153935016910155444311569592327734245707481088\"},\r\n    {1.729e282, chars_format::fixed,\r\n        \"1729000000000000034109325826648495090611888506514473373392973175238830587980720168306719598481716589793805\"\r\n        \"3897594017200545929574550120111190154995513988616765334531895000457561560162525929985425837273790935029698\"\r\n        \"75777094395193866270780271584325542778507946684172915893365579523817472\"},\r\n    {1.729e283, chars_format::fixed,\r\n        \"1729000000000000034109325826648495090611888506514473373392973175238830587980720168306719598481716589793805\"\r\n        \"3897594017200545929574550120111190154995513988616765334531895000457561560162525929985425837273790935029698\"\r\n        \"757770943951938662707802715843255427785079466841729158933655795238174720\"},\r\n    {1.729e284, chars_format::fixed,\r\n        \"1729000000000000034109325826648495090611888506514473373392973175238830587980720168306719598481716589793805\"\r\n        \"3897594017200545929574550120111190154995513988616765334531895000457561560162525929985425837273790935029698\"\r\n        \"7577709439519386627078027158432554277850794668417291589336557952381747200\"},\r\n    {1.729e285, chars_format::fixed,\r\n        \"1728999999999999968072509434690339296569415391949897558537057420723640321985631539972481778891109155491648\"\r\n        \"4038022532332202935832978709262587220546135631695202160808816325986426076807527173630214922876695401978382\"\r\n        \"47747980868795315752276734990380325423708334338293356332173256911600222208\"},\r\n    {1.729e286, chars_format::fixed,\r\n        \"1729000000000000020901962548256863931803393883601558210421790024335792534781702442639872034563595102933373\"\r\n        \"9925679720226877330826235837941469568105638317232452699787279265563334463491526178714383654394371828419435\"\r\n        \"501712716899141561670795642655364993075480242149970039811271150013740220416\"},\r\n    {1.729e287, chars_format::fixed,\r\n        \"1729000000000000105429087529963303348177759470244215253437362190115236075255415886907696443639572618840134\"\r\n        \"9345931220858356362815447243827681324200842614092053562152819968886387882185924586849053624822654110725120\"\r\n        \"3404853700370430083076409110578637752169152801772284021945328794501210177536\"},\r\n    {1.729e288, chars_format::fixed,\r\n        \"1729000000000000105429087529963303348177759470244215253437362190115236075255415886907696443639572618840134\"\r\n        \"9345931220858356362815447243827681324200842614092053562152819968886387882185924586849053624822654110725120\"\r\n        \"34048537003704300830764091105786377521691528017722840219453287945012101775360\"},\r\n    {1.729e289, chars_format::fixed,\r\n        \"1728999999999999943137007565086939668738977543890313730847463631818704477545886073913473578213695788299153\"\r\n        \"9259048339645916621396161344526154752498050364121619906410981818506125318292679643230487281600352128698205\"\r\n        \"450041876012272230764897995725066113505360007164892346418670358932269886865408\"},\r\n    {1.729e290, chars_format::fixed,\r\n        \"1729000000000000159526447518255424574657353445695515760967328376214079941158592491239104065448198229020461\"\r\n        \"9374892181262502943288542543594856848101773364082198114066766019013142070150339568055242405896754771400758\"\r\n        \"6372998680452999341552218828354629957874337045146737541198203862894047280496640\"},\r\n    {1.729e291, chars_format::fixed,\r\n        \"1729000000000000090281826733241509404763473157117851111328971658007559792802526437694902309533157447989643\"\r\n        \"3737822151945195320282980559892872177508582004094813087616915074850896709555888392111320766121905925735941\"\r\n        \"61737731059473106907031823896013599345717012136274370365545237753512157887070208\"},\r\n    {1.729e292, chars_format::fixed,\r\n        \"1729000000000000034886130105230377268848368926255719391618286283442343674117673594859540904801124823164988\"\r\n        \"5228166128491349221878530972931284441034028916104905066457034319521100421080327451356183454302026849204088\"\r\n        \"001439264634275977002395323859874391592959254841199663283957970531695059527532544\"},\r\n    {1.729e293, chars_format::fixed,\r\n        \"1729000000000000123519244710048188686312535695635130143155382882746689464013438143396119152372377022884436\"\r\n        \"2843615766017502979325650312069824819393313856888757900312843528048774482641224956564403153213833371655053\"\r\n        \"7869401381710041243110719880202929545756966412756701278783490217371774904766038016\"},\r\n    {1.729e294, chars_format::fixed,\r\n        \"1729000000000000052612753026193939552341202280131601541925705603303212832096826504566856554315375263108878\"\r\n        \"0751256055996579973367954840758992516705885904261675633228196161226635233392506952397827394084388153694281\"\r\n        \"15853943934162160646413065669195810418950673212809375620283618077279154571734679552\"},\r\n    {1.729e295, chars_format::fixed,\r\n        \"1728999999999999995887559679110540245164135547728778660941963779748431526563537193503446475869773855288431\"\r\n        \"5077368287979841568601798463710326674555943542160009819560478267768923833993532549064566786780831979325663\"\r\n        \"055818880278115592186577591629290223880554804810032658862425908001282789909941190656\"},\r\n    {1.729e296, chars_format::fixed,\r\n        \"1729000000000000041267714356777259690905788933651036965728957238592256570990168642354174538626254981544788\"\r\n        \"7616478502393232292414723565349259348275897431841342470494652582535092953512712071731175272623676918820557\"\r\n        \"5379953275289204036086200436794245281277163466644815367347541262184897945558656745472\"},\r\n    {1.729e297, chars_format::fixed,\r\n        \"1728999999999999968659466872510508577719143516175423678069767704442136499907558324193009638215885179534617\"\r\n        \"1553902159331807134314043402726967070323971208351210228999973678909222362282024835464601695275125015628726\"\r\n        \"36651301192763270533335212039920964133225787969736333213902897707095858712238650032128\"},\r\n    {1.729e298, chars_format::fixed,\r\n        \"1729000000000000084832662847337310358817776184136404938324470959082328613639734833250873478872476862750891\"\r\n        \"7254024308230087387275131662922634715047053165935421815391459924710615308251124413491119419032808060735656\"\r\n        \"240884716889693022573780797647553460204991426844752459492189215707008519015953179082752\"},\r\n    {1.729e299, chars_format::fixed,\r\n        \"1729000000000000084832662847337310358817776184136404938324470959082328613639734833250873478872476862750891\"\r\n        \"7254024308230087387275131662922634715047053165935421815391459924710615308251124413491119419032808060735656\"\r\n        \"2408847168896930225737807976475534602049914268447524594921892157070085190159531790827520\"},\r\n    {1.729e300, chars_format::fixed,\r\n        \"1729000000000000010481817423448157218914651276641376931761460876112605660851141867453840620852258185492476\"\r\n        \"0005946132935188025380035176397407422424280713081526400100908727397723822830900683554148075827890911867221\"\r\n        \"12128682571397441953990644420861341612644195667042341798616666297993656260407050467540992\"},\r\n    {1.729e301, chars_format::fixed,\r\n        \"1729000000000000010481817423448157218914651276641376931761460876112605660851141867453840620852258185492476\"\r\n        \"0005946132935188025380035176397407422424280713081526400100908727397723822830900683554148075827890911867221\"\r\n        \"121286825713974419539906444208613416126441956670423417986166662979936562604070504675409920\"},\r\n    {1.729e302, chars_format::fixed,\r\n        \"1728999999999999915312735280870041199838651395047741083360807969911360281281742871233638562586378278601703\"\r\n        \"8728406068557716842154311673645116487867131973428540268529003194837222721493014309234824756525596961315624\"\r\n        \"1682015250090546076565472718067701597058986348472822448584577954892844583968606814340120576\"},\r\n    {1.729e303, chars_format::fixed,\r\n        \"1728999999999999991448000994932534015099451300322649762081330294872356584937262068209800209199082204114321\"\r\n        \"5750438120059693788734890475846949235512850965150929173786527620885623602563323408690283411967432121756901\"\r\n        \"73066976557299045716323460972824476484233329230579518336062488948180614176262854002713034752\"},\r\n    {1.729e304, chars_format::fixed,\r\n        \"1729000000000000113264426137432522519516731148762503648034166014809950670786092783371658843779408484934509\"\r\n        \"8985689402462856903263816559369881631746001351906751422198566702563065012275817967819017260674368378462945\"\r\n        \"830618950475287816373934350402604133060628744239415884964092239869840835147857113776119611392\"},\r\n    {1.729e305, chars_format::fixed,\r\n        \"1729000000000000064537856080432527117749819209386562093653031726834913036446560497306915389947277972606434\"\r\n        \"5691588889501591657452246125960708673252741197204422522833751069892088448390820144167523721191593875780528\"\r\n        \"1906392765143688726896544541328603857733105634659676043227052997146269577937656842765239058432\"},\r\n    {1.729e306, chars_format::fixed,\r\n        \"1728999999999999908612831898032541832095701003383549119633402005314792606560057181899736337684460333156593\"\r\n        \"5150467248025542870855220739051355206074308702156970044866341045344963443958827108482744394846715467196791\"\r\n        \"74270431983942825289995878606968039445389238499093310627026709121794255026067310987781764808704\"},\r\n    {1.729e307, chars_format::fixed,\r\n        \"1729000000000000033352851243952530060618995568185959498849105782530888950469259834225479579494714444716466\"\r\n        \"3583364561206381900132841048578837979817054698194932027240269064982663447504421537030567855922618194063780\"\r\n        \"901052285179380748731715320520224387509426927770960704712217658015290076287147169396782654291968\"},\r\n    {1.729e308, chars_format::fixed,\r\n        \"1729000000000000033352851243952530060618995568185959498849105782530888950469259834225479579494714444716466\"\r\n        \"3583364561206381900132841048578837979817054698194932027240269064982663447504421537030567855922618194063780\"\r\n        \"9010522851793807487317153205202243875094269277709607047122176580152900762871471693967826542919680\"},\r\n\r\n    // Also test one-digit cases, where the decimal point can't appear between digits like \"17.29\".\r\n    {7e-3, chars_format::fixed, \"0.007\"},\r\n    {7e-2, chars_format::fixed, \"0.07\"},\r\n    {7e-1, chars_format::fixed, \"0.7\"},\r\n    {7e0, chars_format::fixed, \"7\"},\r\n    {7e1, chars_format::fixed, \"70\"},\r\n    {7e2, chars_format::fixed, \"700\"},\r\n    {7e3, chars_format::fixed, \"7000\"},\r\n\r\n    // Test the maximum value in fixed notation.\r\n    {0x1.fffffffffffffp+1023, chars_format::fixed,\r\n        \"1797693134862315708145274237317043567980705675258449965989174768031572607800285387605895586327668781715404\"\r\n        \"5895351438246423432132688946418276846754670353751698604991057655128207624549009038932894407586850845513394\"\r\n        \"2304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368\"},\r\n\r\n    // Test highly-trimmed powers of 2.\r\n    {0x1p959, chars_format::fixed,\r\n        \"4872657005699999540176691193937594155438113428797503763433953228606474345383213051232807532941005129612652\"\r\n        \"4581157043340917295849326015470232889936481563267097656388499782365149353948277450268241763997967396091894\"\r\n        \"36842798962697437472873181807734482806413869401552138773540914294995957055488\"},\r\n    {0x1p959, chars_format::scientific, \"4.8726570057e+288\"},\r\n    {0x1p960, chars_format::fixed,\r\n        \"9745314011399999080353382387875188310876226857595007526867906457212948690766426102465615065882010259225304\"\r\n        \"9162314086681834591698652030940465779872963126534195312776999564730298707896554900536483527995934792183788\"\r\n        \"73685597925394874945746363615468965612827738803104277547081828589991914110976\"},\r\n    {0x1p960, chars_format::scientific, \"9.7453140114e+288\"},\r\n\r\n    // Test powers of 10 that are exactly representable.\r\n    {1e0, chars_format::fixed, \"1\"},\r\n    {1e1, chars_format::fixed, \"10\"},\r\n    {1e2, chars_format::fixed, \"100\"},\r\n    {1e3, chars_format::fixed, \"1000\"},\r\n    {1e4, chars_format::fixed, \"10000\"},\r\n    {1e5, chars_format::fixed, \"100000\"},\r\n    {1e6, chars_format::fixed, \"1000000\"},\r\n    {1e7, chars_format::fixed, \"10000000\"},\r\n    {1e8, chars_format::fixed, \"100000000\"},\r\n    {1e9, chars_format::fixed, \"1000000000\"},\r\n    {1e10, chars_format::fixed, \"10000000000\"},\r\n    {1e11, chars_format::fixed, \"100000000000\"},\r\n    {1e12, chars_format::fixed, \"1000000000000\"},\r\n    {1e13, chars_format::fixed, \"10000000000000\"},\r\n    {1e14, chars_format::fixed, \"100000000000000\"},\r\n    {1e15, chars_format::fixed, \"1000000000000000\"},\r\n    {1e16, chars_format::fixed, \"10000000000000000\"},\r\n    {1e17, chars_format::fixed, \"100000000000000000\"},\r\n    {1e18, chars_format::fixed, \"1000000000000000000\"},\r\n    {1e19, chars_format::fixed, \"10000000000000000000\"},\r\n    {1e20, chars_format::fixed, \"100000000000000000000\"},\r\n    {1e21, chars_format::fixed, \"1000000000000000000000\"},\r\n    {1e22, chars_format::fixed, \"10000000000000000000000\"},\r\n\r\n    // Test powers of 10 that aren't exactly representable.\r\n    // This exercises the \"adjustment\" code.\r\n    {1e23, chars_format::fixed, \"99999999999999991611392\"},\r\n    {1e24, chars_format::fixed, \"999999999999999983222784\"},\r\n    {1e25, chars_format::fixed, \"10000000000000000905969664\"},\r\n    {1e26, chars_format::fixed, \"100000000000000004764729344\"},\r\n    {1e27, chars_format::fixed, \"1000000000000000013287555072\"},\r\n    {1e28, chars_format::fixed, \"9999999999999999583119736832\"},\r\n    {1e29, chars_format::fixed, \"99999999999999991433150857216\"},\r\n    {1e30, chars_format::fixed, \"1000000000000000019884624838656\"},\r\n    {1e31, chars_format::fixed, \"9999999999999999635896294965248\"},\r\n    {1e32, chars_format::fixed, \"100000000000000005366162204393472\"},\r\n    {1e33, chars_format::fixed, \"999999999999999945575230987042816\"},\r\n    {1e34, chars_format::fixed, \"9999999999999999455752309870428160\"},\r\n    {1e35, chars_format::fixed, \"99999999999999996863366107917975552\"},\r\n    {1e36, chars_format::fixed, \"1000000000000000042420637374017961984\"},\r\n    {1e37, chars_format::fixed, \"9999999999999999538762658202121142272\"},\r\n    {1e38, chars_format::fixed, \"99999999999999997748809823456034029568\"},\r\n    {1e39, chars_format::fixed, \"999999999999999939709166371603178586112\"},\r\n    {1e40, chars_format::fixed, \"10000000000000000303786028427003666890752\"},\r\n    {1e41, chars_format::fixed, \"100000000000000000620008645040778319495168\"},\r\n    {1e42, chars_format::fixed, \"1000000000000000044885712678075916785549312\"},\r\n    {1e43, chars_format::fixed, \"10000000000000000139372116959414099130712064\"},\r\n    {1e44, chars_format::fixed, \"100000000000000008821361405306422640701865984\"},\r\n    {1e45, chars_format::fixed, \"999999999999999929757289024535551219930759168\"},\r\n    {1e46, chars_format::fixed, \"9999999999999999931398190359470212947659194368\"},\r\n    {1e47, chars_format::fixed, \"100000000000000004384584304507619735463404765184\"},\r\n    {1e48, chars_format::fixed, \"1000000000000000043845843045076197354634047651840\"},\r\n    {1e49, chars_format::fixed, \"9999999999999999464902769475481793196872414789632\"},\r\n    {1e50, chars_format::fixed, \"100000000000000007629769841091887003294964970946560\"},\r\n    {1e51, chars_format::fixed, \"999999999999999993220948674361627976461708441944064\"},\r\n    {1e52, chars_format::fixed, \"9999999999999999932209486743616279764617084419440640\"},\r\n    {1e53, chars_format::fixed, \"99999999999999999322094867436162797646170844194406400\"},\r\n    {1e54, chars_format::fixed, \"1000000000000000078291540404596243842305360299886116864\"},\r\n    {1e55, chars_format::fixed, \"10000000000000000102350670204085511496304388135324745728\"},\r\n    {1e56, chars_format::fixed, \"100000000000000009190283508143378238084034459715684532224\"},\r\n    {1e57, chars_format::fixed, \"1000000000000000048346692115553659057528394845890514255872\"},\r\n    {1e58, chars_format::fixed, \"9999999999999999438119489974413630815797154428513196965888\"},\r\n    {1e59, chars_format::fixed, \"99999999999999997168788049560464200849936328366177157906432\"},\r\n    {1e60, chars_format::fixed, \"999999999999999949387135297074018866963645011013410073083904\"},\r\n    {1e61, chars_format::fixed, \"9999999999999999493871352970740188669636450110134100730839040\"},\r\n    {1e62, chars_format::fixed, \"100000000000000003502199685943161173046080317798311825604870144\"},\r\n    {1e63, chars_format::fixed, \"1000000000000000057857959942726969827393378689175040438172647424\"},\r\n    {1e64, chars_format::fixed, \"10000000000000000213204190094543968723012578712679649467743338496\"},\r\n    {1e65, chars_format::fixed, \"99999999999999999209038626283633850822756121694230455365568299008\"},\r\n    {1e66, chars_format::fixed, \"999999999999999945322333868247445125709646570021247924665841614848\"},\r\n    {1e67, chars_format::fixed, \"9999999999999999827367757839185598317239782875580932278577147150336\"},\r\n    {1e68, chars_format::fixed, \"99999999999999995280522225138166806691251291352861698530421623488512\"},\r\n    {1e69, chars_format::fixed, \"1000000000000000072531436381529235126158374409646521955518210155479040\"},\r\n    {1e70, chars_format::fixed, \"10000000000000000725314363815292351261583744096465219555182101554790400\"},\r\n    {1e71, chars_format::fixed, \"100000000000000004188152556421145795899143386664033828314342771180699648\"},\r\n    {1e72, chars_format::fixed, \"999999999999999943801810948794571024057224129020550531544123892056457216\"},\r\n    {1e73, chars_format::fixed, \"9999999999999999830336967949613257980309080240684656321838454199566729216\"},\r\n    {1e74, chars_format::fixed, \"99999999999999995164818811802792197885196090803013355167206819763650035712\"},\r\n    {1e75, chars_format::fixed, \"999999999999999926539781176481198923508803215199467887262646419780362305536\"},\r\n    {1e76, chars_format::fixed, \"10000000000000000470601344959054695891559601407866630764278709534898249531392\"},\r\n    {1e77, chars_format::fixed, \"99999999999999998278261272554585856747747644714015897553975120217811154108416\"},\r\n    {1e78, chars_format::fixed, \"1000000000000000008493621433689702976148869924598760615894999102702796905906176\"},\r\n    {1e79, chars_format::fixed, \"9999999999999999673560075006595519222746403606649979913266024618633003221909504\"},\r\n    {1e80, chars_format::fixed, \"100000000000000000026609864708367276537402401181200809098131977453489758916313088\"},\r\n    {1e81, chars_format::fixed, \"999999999999999921281879895665782741935503249059183851809998224123064148429897728\"},\r\n    {1e82, chars_format::fixed, \"9999999999999999634067965630886574211027143225273567793680363843427086501542887424\"},\r\n    {1e83, chars_format::fixed, \"100000000000000003080666323096525690777025204007643346346089744069413985291331436544\"},\r\n    {1e84, chars_format::fixed,\r\n        \"1000000000000000057766609898115896702437267127096064137098041863234712334016924614656\"},\r\n    {1e85, chars_format::fixed,\r\n        \"10000000000000000146306952306748730309700429878646550592786107871697963642511482159104\"},\r\n    {1e86, chars_format::fixed,\r\n        \"100000000000000001463069523067487303097004298786465505927861078716979636425114821591040\"},\r\n    {1e87, chars_format::fixed,\r\n        \"999999999999999959416724456350362731491996089648451439669739009806703922950954425516032\"},\r\n    {1e88, chars_format::fixed,\r\n        \"9999999999999999594167244563503627314919960896484514396697390098067039229509544255160320\"},\r\n    {1e89, chars_format::fixed,\r\n        \"99999999999999999475366575191804932315794610450682175621941694731908308538307845136842752\"},\r\n    {1e90, chars_format::fixed,\r\n        \"999999999999999966484112715463900049825186092620125502979674597309179755437379230686511104\"},\r\n    {1e91, chars_format::fixed,\r\n        \"10000000000000000795623248612804971431562261401669105159386439973487930752201761134141767680\"},\r\n    {1e92, chars_format::fixed,\r\n        \"100000000000000004337729697461918607329029332495193931179177378933611681288968111094132375552\"},\r\n    {1e93, chars_format::fixed,\r\n        \"1000000000000000043377296974619186073290293324951939311791773789336116812889681110941323755520\"},\r\n    {1e94, chars_format::fixed,\r\n        \"10000000000000000202188791271559469885760963232143577411377768562080040049981643093586978275328\"},\r\n    {1e95, chars_format::fixed,\r\n        \"100000000000000002021887912715594698857609632321435774113777685620800400499816430935869782753280\"},\r\n    {1e96, chars_format::fixed,\r\n        \"1000000000000000049861653971908893017010268485438462151574892930611988399099305815384459015356416\"},\r\n    {1e97, chars_format::fixed,\r\n        \"10000000000000000735758738477112498397576062152177456799245857901351759143802190202050679656153088\"},\r\n    {1e98, chars_format::fixed,\r\n        \"99999999999999999769037024514370800696612547992403838920556863966097586548129676477911932478685184\"},\r\n    {1e99, chars_format::fixed,\r\n        \"999999999999999967336168804116691273849533185806555472917961779471295845921727862608739868455469056\"},\r\n    {1e100, chars_format::fixed,\r\n        \"10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104\"},\r\n    {1e101, chars_format::fixed,\r\n        \"99999999999999997704951326524533662844684271992415000612999597473199345218078991130326129448151154688\"},\r\n    {1e102, chars_format::fixed,\r\n        \"999999999999999977049513265245336628446842719924150006129995974731993452180789911303261294481511546880\"},\r\n    {1e103, chars_format::fixed,\r\n        \"10000000000000000019156750857346687362159551272651920111528035145993793242039887559612361451081803235328\"},\r\n    {1e104, chars_format::fixed,\r\n        \"10000000000000000019156750857346687362159551272651920111528035145993793242039887559612361451081803235328\"\r\n        \"0\"},\r\n    {1e105, chars_format::fixed,\r\n        \"99999999999999993825830082528197854032702736447212447829441621253887149182459971363682052750390825530163\"\r\n        \"2\"},\r\n    {1e106, chars_format::fixed,\r\n        \"1000000000000000091035999050368435010460453995175486557154545737484090289535133415215418009754161219056435\"\r\n        \"2\"},\r\n    {1e107, chars_format::fixed,\r\n        \"9999999999999999688138404702992698343537126906127968940664421175279152513667064539525400239539588480525926\"\r\n        \"4\"},\r\n    {1e108, chars_format::fixed,\r\n        \"1000000000000000033998991713002824594943974719712898047713430714837875271723200833292741616380733445921308\"\r\n        \"672\"},\r\n    {1e109, chars_format::fixed,\r\n        \"9999999999999999818508707188399807864717650964328171247958398369899072554380053298205803424393137676263358\"\r\n        \"464\"},\r\n    {1e110, chars_format::fixed,\r\n        \"1000000000000000023569367514170255833249532795056881863129912539268281668466161732598309361592449510262314\"\r\n        \"10688\"},\r\n    {1e111, chars_format::fixed,\r\n        \"9999999999999999568197726416418157584051044772583782817953962156228826076211114881539429309474323220447488\"\r\n        \"90112\"},\r\n    {1e112, chars_format::fixed,\r\n        \"9999999999999999301199346926304397284673331501389768492615896861647229832830913903761963586894254467577228\"\r\n        \"034048\"},\r\n    {1e113, chars_format::fixed,\r\n        \"1000000000000000015559416129466843024268201396921061433369770580430833781164755703264985389915047447676206\"\r\n        \"28086784\"},\r\n    {1e114, chars_format::fixed,\r\n        \"1000000000000000015559416129466843024268201396921061433369770580430833781164755703264985389915047447676206\"\r\n        \"280867840\"},\r\n    {1e115, chars_format::fixed,\r\n        \"1000000000000000015559416129466843024268201396921061433369770580430833781164755703264985389915047447676206\"\r\n        \"2808678400\"},\r\n    {1e116, chars_format::fixed,\r\n        \"1000000000000000015559416129466843024268201396921061433369770580430833781164755703264985389915047447676206\"\r\n        \"28086784000\"},\r\n    {1e117, chars_format::fixed,\r\n        \"1000000000000000050555427725995033814228237030803003279020481474722232763977085405824233377105062219252417\"\r\n        \"113236701184\"},\r\n    {1e118, chars_format::fixed,\r\n        \"9999999999999999665649998943273759183241515094863428494587753284228752052274941196820382078490267674695111\"\r\n        \"155514343424\"},\r\n    {1e119, chars_format::fixed,\r\n        \"9999999999999999441675524725493338127497287038019000682423203560763798562276031100441194960474173136607361\"\r\n        \"8283536318464\"},\r\n    {1e120, chars_format::fixed,\r\n        \"9999999999999999800034683473942011816688051928970085181886483118307724146274287254647894349299924397547760\"\r\n        \"75181077037056\"},\r\n    {1e121, chars_format::fixed,\r\n        \"1000000000000000037340933747145988971939327575449182038102773041037800508067149710137861337142112641505239\"\r\n        \"9029342192009216\"},\r\n    {1e122, chars_format::fixed,\r\n        \"1000000000000000014405947587245273855831118622428312630137123149354989270691261316268632576257264560805054\"\r\n        \"37183296233537536\"},\r\n    {1e123, chars_format::fixed,\r\n        \"9999999999999999777099697314041296700579842975949215773920833226624912908898398860778665588415076316847575\"\r\n        \"22070951350501376\"},\r\n    {1e124, chars_format::fixed,\r\n        \"9999999999999999483531874467312143214394768377282087351960514613084929070487027419252537449089020883885200\"\r\n        \"422613425626021888\"},\r\n    {1e125, chars_format::fixed,\r\n        \"9999999999999999248677616189928820425446708698348384614392259722252941999757930266031634937628176537515300\"\r\n        \"5841365553228283904\"},\r\n    {1e126, chars_format::fixed,\r\n        \"9999999999999999248677616189928820425446708698348384614392259722252941999757930266031634937628176537515300\"\r\n        \"58413655532282839040\"},\r\n    {1e127, chars_format::fixed,\r\n        \"9999999999999999549291066784979473595300225087383524118479625982517885450291174622154390152298057300868772\"\r\n        \"377386949310916067328\"},\r\n    {1e128, chars_format::fixed,\r\n        \"1000000000000000075174486916518208627471429064352408213482909102357765925242415204664541101097758035428265\"\r\n        \"95503885252632667750400\"},\r\n    {1e129, chars_format::fixed,\r\n        \"9999999999999999982174435641852414159889288687594125004365433397299404019059046494971157661422685600097771\"\r\n        \"75966751665376232210432\"},\r\n    {1e130, chars_format::fixed,\r\n        \"1000000000000000059783078246051615185174929025233809070873635949832200820575113093631056034106660140344568\"\r\n        \"1992244323541365884452864\"},\r\n    {1e131, chars_format::fixed,\r\n        \"9999999999999999120255550095723181391285286496952573018246136855867758157690128277095993909921203475410697\"\r\n        \"4340599870111173348163584\"},\r\n    {1e132, chars_format::fixed,\r\n        \"9999999999999999908295674023612765636866088499824849119840922265176691516655996362010429339865415703696022\"\r\n        \"53175829982724989462249472\"},\r\n    {1e133, chars_format::fixed,\r\n        \"1000000000000000022351172359476859933509840930097375956047883642890026486024234359597620351184310059501015\"\r\n        \"2570837624953702918544949248\"},\r\n    {1e134, chars_format::fixed,\r\n        \"9999999999999999214820364967069931500754982737297246150437511104984830160766032447285726161514508942804936\"\r\n        \"4457837845490532419930947584\"},\r\n    {1e135, chars_format::fixed,\r\n        \"9999999999999999618296908418149398634492353362767851514454041234551004040556556906761917101645945603687022\"\r\n        \"89580532071091311261383655424\"},\r\n    {1e136, chars_format::fixed,\r\n        \"1000000000000000058664061270074011975546204286389730438809371354550982135205381560950477535796139358980403\"\r\n        \"0375857007499376802103616864256\"},\r\n    {1e137, chars_format::fixed,\r\n        \"1000000000000000032841562489204926078987012566359611695512313426258747006898787995544001315627727412683949\"\r\n        \"50478432243557864849063421149184\"},\r\n    {1e138, chars_format::fixed,\r\n        \"1000000000000000032841562489204926078987012566359611695512313426258747006898787995544001315627727412683949\"\r\n        \"504784322435578648490634211491840\"},\r\n    {1e139, chars_format::fixed,\r\n        \"1000000000000000032841562489204926078987012566359611695512313426258747006898787995544001315627727412683949\"\r\n        \"5047843224355786484906342114918400\"},\r\n    {1e140, chars_format::fixed,\r\n        \"1000000000000000059283801240814870037063624887670453288648500744829995778284739806520232965080181245691517\"\r\n        \"92237293382948229697163514582401024\"},\r\n    {1e141, chars_format::fixed,\r\n        \"1000000000000000016976219238238959704141045173573106739630601035115997744067216908958262325956255112879408\"\r\n        \"454231155599236459402033650892537856\"},\r\n    {1e142, chars_format::fixed,\r\n        \"1000000000000000050822284840299687970479108944850983978844920802887196171441235227007838837255396019129096\"\r\n        \"0287445781834331294577148468377157632\"},\r\n    {1e143, chars_format::fixed,\r\n        \"1000000000000000023745432358651105357408657927828682187473464988670237429542020572568177628216083294129345\"\r\n        \"96913384011607579341316989008157343744\"},\r\n    {1e144, chars_format::fixed,\r\n        \"1000000000000000023745432358651105357408657927828682187473464988670237429542020572568177628216083294129345\"\r\n        \"969133840116075793413169890081573437440\"},\r\n    {1e145, chars_format::fixed,\r\n        \"9999999999999999890870611821409196126784806260401358945180015464725302399110258148854112806457630061296658\"\r\n        \"928320953898584032761523454337112604672\"},\r\n    {1e146, chars_format::fixed,\r\n        \"9999999999999999336336672997246224211101969431784618257892600389561987365014342025929851245332505453301777\"\r\n        \"7074930382791057905692427399713177731072\"},\r\n    {1e147, chars_format::fixed,\r\n        \"9999999999999999779963824056576601743648238894678010807722532449692639392291074924269260494232605139697682\"\r\n        \"68415537077468838432306731146395363835904\"},\r\n    {1e148, chars_format::fixed,\r\n        \"1000000000000000048976726575150520579572227003530743888745042374590168263593384756161231529247276463793113\"\r\n        \"0646815102767620534329186625852171022761984\"},\r\n    {1e149, chars_format::fixed,\r\n        \"1000000000000000048976726575150520579572227003530743888745042374590168263593384756161231529247276463793113\"\r\n        \"06468151027676205343291866258521710227619840\"},\r\n    {1e150, chars_format::fixed,\r\n        \"9999999999999999808355961724373745905731200140303187930911648101541001122036785829762982686162211519627020\"\r\n        \"60266176005440567032331208403948233373515776\"},\r\n    {1e151, chars_format::fixed,\r\n        \"1000000000000000017177532387217719118039310408430545510773232844520003126278188542008262674286117318272254\"\r\n        \"5959543542834786931126445173006249634549465088\"},\r\n    {1e152, chars_format::fixed,\r\n        \"1000000000000000046251081359041994740012262723950726884918887272012725537537796509233834198822034251319896\"\r\n        \"62450489690590919397689516441796634752009109504\"},\r\n    {1e153, chars_format::fixed,\r\n        \"9999999999999999997334030041231537448555390191184366862858401880243696795224237616729197595645671584436693\"\r\n        \"78824028710020392594094129030220133015859757056\"},\r\n    {1e154, chars_format::fixed,\r\n        \"1000000000000000036947545688058226540980917982984268845192277855215054365934721959721651310970540832744651\"\r\n        \"1753687232667314337003349573404171046192448274432\"},\r\n    {1e155, chars_format::fixed,\r\n        \"1000000000000000007176231540910168304080614811891603118067127721462506616804883401282666069845761893303865\"\r\n        \"73813296762136260081534229469225952733653677113344\"},\r\n    {1e156, chars_format::fixed,\r\n        \"9999999999999999833591802231917217145603722750174705363670076144604684175010125545314778769459387417512373\"\r\n        \"88344363105067534507348164573733465510370326085632\"},\r\n    {1e157, chars_format::fixed,\r\n        \"9999999999999999833591802231917217145603722750174705363670076144604684175010125545314778769459387417512373\"\r\n        \"883443631050675345073481645737334655103703260856320\"},\r\n    {1e158, chars_format::fixed,\r\n        \"9999999999999999528733545365121100799744618278185808317908538774978595223920578706899569900341651077638731\"\r\n        \"0061494932420984963311567802202010637287727642443776\"},\r\n    {1e159, chars_format::fixed,\r\n        \"9999999999999999284846939871684207723057334700594690681299308879277724063048941236167402805047462005739816\"\r\n        \"70431418299523701733729688780649419062882836695482368\"},\r\n    {1e160, chars_format::fixed,\r\n        \"1000000000000000006528407745068226556845664214888626711844884454552051177783818114251033750998886703581634\"\r\n        \"2470187175785193750117648543530356184548650438281396224\"},\r\n    {1e161, chars_format::fixed,\r\n        \"1000000000000000037745893248228148870661636512820289769330865881201762686375387710504751139196542904784695\"\r\n        \"27765363729011764432297892058199009821165792668120252416\"},\r\n    {1e162, chars_format::fixed,\r\n        \"9999999999999999378499396381163974664505251594389679853757253159226858588823650024928554969640430609348999\"\r\n        \"79621894213003182527093908649335762989920701551401238528\"},\r\n    {1e163, chars_format::fixed,\r\n        \"9999999999999999378499396381163974664505251594389679853757253159226858588823650024928554969640430609348999\"\r\n        \"796218942130031825270939086493357629899207015514012385280\"},\r\n    {1e164, chars_format::fixed,\r\n        \"1000000000000000001783349948587918365145636425603013927107015277701295028477899535620468707992842960998768\"\r\n        \"97036220978235643807646031628623453753183252563447406133248\"},\r\n    {1e165, chars_format::fixed,\r\n        \"9999999999999998994898934518334849272334583997405404203369513388555203571250442826162875703467631208965785\"\r\n        \"85177704871391229197474064067196498264773607101557544845312\"},\r\n    {1e166, chars_format::fixed,\r\n        \"9999999999999999404072760505352583023983296100855298230449769143938302256661863838179600254051950569374547\"\r\n        \"392515068357773127490685649548117139715971745147241514401792\"},\r\n    {1e167, chars_format::fixed,\r\n        \"1000000000000000038608994287419514402794020514913504389544238295685773910164927426701973917545431703435557\"\r\n        \"50902863155030391327289536708508823166797373630632400726786048\"},\r\n    {1e168, chars_format::fixed,\r\n        \"9999999999999999338604948347429745623719502164303315186116928223077006466996036476256924325958459471709145\"\r\n        \"54599698521475539380813444812793279458505403728617494385000448\"},\r\n    {1e169, chars_format::fixed,\r\n        \"9999999999999999338604948347429745623719502164303315186116928223077006466996036476256924325958459471709145\"\r\n        \"545996985214755393808134448127932794585054037286174943850004480\"},\r\n    {1e170, chars_format::fixed,\r\n        \"1000000000000000034419054309312452809177137702974177474706936476750650979626314475538922658147448273184971\"\r\n        \"79085147422915077831721209019419643357959500300321574675254607872\"},\r\n    {1e171, chars_format::fixed,\r\n        \"9999999999999999539722067296568702117329877137391007098307415531962907132849458132083384777061664123737260\"\r\n        \"01850053663010587168093173889073910282723323583537144858509574144\"},\r\n    {1e172, chars_format::fixed,\r\n        \"1000000000000000082687162857105802367643627696515223533632653430883267139431135672937273166412217389671719\"\r\n        \"2642523265688348930066834399772699475577180106550229078889679814656\"},\r\n    {1e173, chars_format::fixed,\r\n        \"1000000000000000014039186255799705217824619705701291360938300429450213045486501081081841332435656868446122\"\r\n        \"85763778101906192989276863139689872767772084421689716760605683089408\"},\r\n    {1e174, chars_format::fixed,\r\n        \"1000000000000000068957567536844582937679826098352437099093782830596656320642208754566186799616905285426599\"\r\n        \"982929417458880300383900478261195703581718577367397759832385751351296\"},\r\n    {1e175, chars_format::fixed,\r\n        \"9999999999999999371534524623368764100273307559896873275206250678451924602685103382037576783819090846734548\"\r\n        \"822294900033162112051840457868829614121240178061963384891963422539776\"},\r\n    {1e176, chars_format::fixed,\r\n        \"1000000000000000007448980502074319891441994938583153872359642541312639852467816160263719876373907058408465\"\r\n        \"60260278464628372543383280977318309056924111623883709653889736043921408\"},\r\n    {1e177, chars_format::fixed,\r\n        \"1000000000000000007448980502074319891441994938583153872359642541312639852467816160263719876373907058408465\"\r\n        \"602602784646283725433832809773183090569241116238837096538897360439214080\"},\r\n    {1e178, chars_format::fixed,\r\n        \"1000000000000000052438118447506283719547380015442972461056613724331806183475371886382095683088785761598872\"\r\n        \"4636416932177829345401680187244151732297960592357271816907060120777654272\"},\r\n    {1e179, chars_format::fixed,\r\n        \"9999999999999999804554977348151415945787638924672627191414598315011400538632827245926943923449798364942214\"\r\n        \"8597943950338419997003168440244384097290815044070304544781216945608327168\"},\r\n    {1e180, chars_format::fixed,\r\n        \"1000000000000000009248546019891598444566210341657546615907521388633406505708118389308454908642502206536081\"\r\n        \"877044340989143693798086218131232373875663313958712699944969706504756133888\"},\r\n    {1e181, chars_format::fixed,\r\n        \"9999999999999999171107915076469365246063817042486381462561244058101538598046442622180212564904306224021286\"\r\n        \"256366562347133135483117101991090685868467907010818055540655879490029748224\"},\r\n    {1e182, chars_format::fixed,\r\n        \"1000000000000000064531198727238395596542107524102891697698359578327358093250202865562715099933745157016453\"\r\n        \"82788895184180192194795092289050635704895322791329123657951217763820802932736\"},\r\n    {1e183, chars_format::fixed,\r\n        \"9999999999999999465948729515652283389935268682194888565445714403135947064937559828869600251790935293249936\"\r\n        \"66087115356131035228239552737388526279268078143523691759154905886843985723392\"},\r\n    {1e184, chars_format::fixed,\r\n        \"1000000000000000017356668416969128693522675261749530561236844323121852738547624112492413070031884505939869\"\r\n        \"7631682172475335672600663748292592247410791680053842186513692689376624118857728\"},\r\n    {1e185, chars_format::fixed,\r\n        \"9999999999999999796170441687537151711071294518668416520676321189574484547855611100361714461103959850786025\"\r\n        \"1139162957211888350975873638026151889477992007905860430885494197722591793250304\"},\r\n    {1e186, chars_format::fixed,\r\n        \"9999999999999999796170441687537151711071294518668416520676321189574484547855611100361714461103959850786025\"\r\n        \"11391629572118883509758736380261518894779920079058604308854941977225917932503040\"},\r\n    {1e187, chars_format::fixed,\r\n        \"9999999999999999071569656121801212080692814968920789464627446869617922299624001453201875281811380250249693\"\r\n        \"879805812353226907091680705581859236698853640605134247712274342131878495422251008\"},\r\n    {1e188, chars_format::fixed,\r\n        \"1000000000000000023093091302697871548929838224851699275430564578154842189679457688865761796867950761110782\"\r\n        \"38543825857419659919011313587350687602971665369018571203143144663564875896666980352\"},\r\n    {1e189, chars_format::fixed,\r\n        \"1000000000000000023093091302697871548929838224851699275430564578154842189679457688865761796867950761110782\"\r\n        \"385438258574196599190113135873506876029716653690185712031431446635648758966669803520\"},\r\n    {1e190, chars_format::fixed,\r\n        \"1000000000000000072559171597318778361030342428781137282456834398397210172492068907445206818174324195174062\"\r\n        \"5976868675721161334753163637413771490365780039321792212624518252692320803210995433472\"},\r\n    {1e191, chars_format::fixed,\r\n        \"1000000000000000072559171597318778361030342428781137282456834398397210172492068907445206818174324195174062\"\r\n        \"59768686757211613347531636374137714903657800393217922126245182526923208032109954334720\"},\r\n    {1e192, chars_format::fixed,\r\n        \"1000000000000000040900880208761398001286019738266296957960021713442094663491997727554362004538245197373563\"\r\n        \"261847757813447631532786297905940174312186739777303375354598782943738754654264509857792\"},\r\n    {1e193, chars_format::fixed,\r\n        \"1000000000000000066227513319607302289081477890678169217557471861406187070692054671467037855447108395613962\"\r\n        \"7305190456203824330868103505742897540916997511012040520808812168041334151877325366493184\"},\r\n    {1e194, chars_format::fixed,\r\n        \"9999999999999999446596743875469617076632787591011823714897111511785435161317813406861937710845650440600452\"\r\n        \"8089686414709538562749489776621177115003729674648080379472553427423904462708600804999168\"},\r\n    {1e195, chars_format::fixed,\r\n        \"9999999999999999770777647694297191960414651941883788637744473405725817973478542288944188602479099378077566\"\r\n        \"00796112539971931616645685181699233267813951241073670004367049615544210109925082343145472\"},\r\n    {1e196, chars_format::fixed,\r\n        \"9999999999999999511432924639235132053389160461186216699466583890573511723749959183278387889172340228095875\"\r\n        \"448767138256706948253250552493092635735926276453993770366538373425000777236538229086224384\"},\r\n    {1e197, chars_format::fixed,\r\n        \"9999999999999999511432924639235132053389160461186216699466583890573511723749959183278387889172340228095875\"\r\n        \"4487671382567069482532505524930926357359262764539937703665383734250007772365382290862243840\"},\r\n    {1e198, chars_format::fixed,\r\n        \"1000000000000000017535541566019400541537441865177200086145798104936341572305513193378283771523764365204900\"\r\n        \"328030374534281861011105867876227585990799216050325567033999660761493056632508247061001404416\"},\r\n    {1e199, chars_format::fixed,\r\n        \"1000000000000000097206240488534465344975672848047494185584765763991130052222133923438817750651600776079275\"\r\n        \"6678147673846152604340428430285295728914471221362369950308146488642846313231335560438561636352\"},\r\n    {1e200, chars_format::fixed,\r\n        \"9999999999999999697331222125103616594745032754550236264824175095034684843555407553419633840470625186802751\"\r\n        \"2415973882408182135734368278484639385041047239877871023591066789981811181813306167128854888448\"},\r\n    {1e201, chars_format::fixed,\r\n        \"1000000000000000037718785293056550291741793714171007924670336578563554653884390444993619046236149589293075\"\r\n        \"414109087389699655531583234914810756005630018925423128793192791080866922220799992003324610084864\"},\r\n    {1e202, chars_format::fixed,\r\n        \"9999999999999999017474591319641730272072128367390393282944984404433823148266910656903077218579754480674748\"\r\n        \"342103902584639871831041306548820316951909258721342916786285447187693014154661313392524876840960\"},\r\n    {1e203, chars_format::fixed,\r\n        \"9999999999999999887691078750632944765093445982954992299750348488402926118236186684444269694600068984518592\"\r\n        \"0534555642245481492613075738123641525387194542623914743194966239051177873087980216425864602058752\"},\r\n    {1e204, chars_format::fixed,\r\n        \"9999999999999999887691078750632944765093445982954992299750348488402926118236186684444269694600068984518592\"\r\n        \"05345556422454814926130757381236415253871945426239147431949662390511778730879802164258646020587520\"},\r\n    {1e205, chars_format::fixed,\r\n        \"1000000000000000016616035472855013340286026761993566398512806499527303906862635501325745128692656962574862\"\r\n        \"2041088095949318798038992779336698179926498716835527012730124200454693714718121768282606166882648064\"},\r\n    {1e206, chars_format::fixed,\r\n        \"1000000000000000038893577551088388431307372492952020133343023820076912942893848967630799656078777013873264\"\r\n        \"60311941213291353170611409437561654018367221268940354434586262616943544566455807655946219322240663552\"},\r\n    {1e207, chars_format::fixed,\r\n        \"1000000000000000038893577551088388431307372492952020133343023820076912942893848967630799656078777013873264\"\r\n        \"603119412132913531706114094375616540183672212689403544345862626169435445664558076559462193222406635520\"},\r\n    {1e208, chars_format::fixed,\r\n        \"9999999999999999818630698308109481982927274216983785721776674794699138106539424938898600659703096825493544\"\r\n        \"616522696356805028364441642842329313746550197144253860793660984920822957311285732475861572950035529728\"},\r\n    {1e209, chars_format::fixed,\r\n        \"1000000000000000073111882183254852571116159535704205070042237624441112422237792851875363410143857412667610\"\r\n        \"68799969763125334902791605243044670546908252847439043930576054277584733562461577854658781477884848504832\"},\r\n    {1e210, chars_format::fixed,\r\n        \"9999999999999999271137824193446055745986681532948826734589253924871946437036322790985580594661810444784007\"\r\n        \"25843812838336795121561031396504666917998514458446354143529431921823271795036250068185162804696593727488\"},\r\n    {1e211, chars_format::fixed,\r\n        \"9999999999999999563134023721266549739021664297767471527755878388779781994104643936539191296017163181162427\"\r\n        \"18274989796920105902832035603293074628215317261635171175975654092628084560952155763865693199526971991654\"\r\n        \"4\"},\r\n    {1e212, chars_format::fixed,\r\n        \"9999999999999999095940104476753759350165691874057639858689279246527245102795330103653414173848598802956955\"\r\n        \"303851066631868086527984288724316222918684327765330639240616986193403841354867066507768445677983667689881\"\r\n        \"6\"},\r\n    {1e213, chars_format::fixed,\r\n        \"9999999999999999843450375267974223972335247751993370529195837874131304128890232236270657569318301808085710\"\r\n        \"3100891967716008425285219964180994603002344795269643552712402737660070481623142523171900237856413512525414\"\r\n        \"4\"},\r\n    {1e214, chars_format::fixed,\r\n        \"9999999999999999544446266951486038123467425400819078260993214423089680518452271383223760211130420606034208\"\r\n        \"3075939447157077401283069133405861653476144188223108688589909587369657654393353779934213925425782778274775\"\r\n        \"04\"},\r\n    {1e215, chars_format::fixed,\r\n        \"9999999999999999066039693645104940765278909638940210631869016901423082741751534018348724438029810682751805\"\r\n        \"1036015414262787762879627804165648934234223216948652905993920546904997130825691790753915825536773603473752\"\r\n        \"064\"},\r\n    {1e216, chars_format::fixed,\r\n        \"1000000000000000021421546958041957442493134746744949294176709095342291740583330369404881029347127449862957\"\r\n        \"2793183309320908289504788699434215946041483354800734678422429424402018238738808056478663126527039562299620\"\r\n        \"72064\"},\r\n    {1e217, chars_format::fixed,\r\n        \"9999999999999999601855055748251769806450047292244542376488118125689672251656359867008764503902493796828096\"\r\n        \"6920730331104392157891482092914687179785174704776043382501428272225416917221473218635849697412463879250897\"\r\n        \"79712\"},\r\n    {1e218, chars_format::fixed,\r\n        \"1000000000000000082657588341258737904341264764265444350704606378115616256001024752108885608304005520043104\"\r\n        \"8894293585531377363220429189576963174104449239123865018594716021581494785755468791093741283312832736674151\"\r\n        \"6615680\"},\r\n    {1e219, chars_format::fixed,\r\n        \"9999999999999999650843888854825194175928551306260938421710435951908331863990515373171968167067996252972214\"\r\n        \"7801618552072767416863994485028884962235547412234547654639257549968998154834801806327912222841098418750522\"\r\n        \"5498624\"},\r\n    {1e220, chars_format::fixed,\r\n        \"9999999999999999964372420736895110140590976995965873111133270039707753382929110612616471611327211972294570\"\r\n        \"5439303166270369074288073794559750769917932739968974996321364927527918075560104767557112385584359471548120\"\r\n        \"96741376\"},\r\n    {1e221, chars_format::fixed,\r\n        \"1000000000000000046601807174820697568405085809949376861420980458018682781323086299572767712214195712321033\"\r\n        \"9765959854898653172616660068980913606220974926434405874301273673162218994872058950552383264597357715602427\"\r\n        \"8435495936\"},\r\n    {1e222, chars_format::fixed,\r\n        \"1000000000000000046601807174820697568405085809949376861420980458018682781323086299572767712214195712321033\"\r\n        \"9765959854898653172616660068980913606220974926434405874301273673162218994872058950552383264597357715602427\"\r\n        \"84354959360\"},\r\n    {1e223, chars_format::fixed,\r\n        \"1000000000000000046601807174820697568405085809949376861420980458018682781323086299572767712214195712321033\"\r\n        \"9765959854898653172616660068980913606220974926434405874301273673162218994872058950552383264597357715602427\"\r\n        \"843549593600\"},\r\n    {1e224, chars_format::fixed,\r\n        \"9999999999999999695490351794831950209296480724474921121484247526010969488287371335268865457530508571403718\"\r\n        \"2409224841134505892881183378706080253249519082903930108094789640533388351546084948006950326015738792668900\"\r\n        \"564521713664\"},\r\n    {1e225, chars_format::fixed,\r\n        \"9999999999999999284542234486365269956094146124464869125363950430450511714984175783024165903071069343773520\"\r\n        \"0942358863613425448462294146117783821804062986135861502805217858619360833053015850664613088704891665546032\"\r\n        \"3666687950848\"},\r\n    {1e226, chars_format::fixed,\r\n        \"9999999999999999613300728333138614158656013804472910722260188106898877933626732224819925546638620725877678\"\r\n        \"6115851645630289803997405532188420966960427863550316387036875284150582847847471128538482878553569367244326\"\r\n        \"92495112994816\"},\r\n    {1e227, chars_format::fixed,\r\n        \"1000000000000000092833470372023199096890348452450507710984513881269234280819695799200296412090882625429431\"\r\n        \"2680982277369774722613785107647096954758588737320813592396350498627547090702529224003396203794828017403750\"\r\n        \"5158080469401600\"},\r\n    {1e228, chars_format::fixed,\r\n        \"9999999999999999245091215224752468651786722002863904133736401909276707768747069010008674745842963177921021\"\r\n        \"0721539729771401725798080779789307364385299200846126916697418967555614191277681217319748713923050341342237\"\r\n        \"0196749149011968\"},\r\n    {1e229, chars_format::fixed,\r\n        \"9999999999999999918388610622944277578633427011520373324179896670642961784527024602806390495869308408470337\"\r\n        \"7156852947341939925933988898461972237665534469790930519603853375043556877576725626405434043533142274420344\"\r\n        \"27503713670135808\"},\r\n    {1e230, chars_format::fixed,\r\n        \"1000000000000000099566444326005117186158815502537072402888948828882896820977495355128273569591146077734924\"\r\n        \"4345335409545480104615144188833823603491391090010261628425414842702426517565519668094253057090928936734531\"\r\n        \"5883616691581616128\"},\r\n    {1e231, chars_format::fixed,\r\n        \"1000000000000000056475411020520841414840626381983058374700565164155456563967578197189219761589459982979768\"\r\n        \"1693475363620965659806446069238773051601456032797794197839403040623198185642380825912769195995883053017532\"\r\n        \"72401848696295129088\"},\r\n    {1e232, chars_format::fixed,\r\n        \"1000000000000000056475411020520841414840626381983058374700565164155456563967578197189219761589459982979768\"\r\n        \"1693475363620965659806446069238773051601456032797794197839403040623198185642380825912769195995883053017532\"\r\n        \"724018486962951290880\"},\r\n    {1e233, chars_format::fixed,\r\n        \"9999999999999999737406270739910319339097032705193514405788685278787712705085372539462364502262226810498681\"\r\n        \"4019040754458979257737456796162759919727807229498567311142603806310797883499542489243201826933949562808949\"\r\n        \"044795771481474727936\"},\r\n    {1e234, chars_format::fixed,\r\n        \"1000000000000000017865845178806930323739528929966661805443773400559670093686692423675827549619949242079148\"\r\n        \"1557408762472600717257852554081607757108074221535423380034336465960209600239248423318159656454721941207101\"\r\n        \"74156699571604284243968\"},\r\n    {1e235, chars_format::fixed,\r\n        \"1000000000000000053166019662659649035603389457524510097335697298704389152229216559459500429134930490902572\"\r\n        \"1681812512093962950445138053653873169216309020403876699170397334223513449750683762833231235463783529148067\"\r\n        \"211236930570359138156544\"},\r\n    {1e236, chars_format::fixed,\r\n        \"1000000000000000053166019662659649035603389457524510097335697298704389152229216559459500429134930490902572\"\r\n        \"1681812512093962950445138053653873169216309020403876699170397334223513449750683762833231235463783529148067\"\r\n        \"2112369305703591381565440\"},\r\n    {1e237, chars_format::fixed,\r\n        \"9999999999999999402054613143309491576390357693393955632815408246412881648931393249517472146869904946676153\"\r\n        \"2837205133056038042458244550226238504699576640248260779350025557809411313140906763850021826347864477369777\"\r\n        \"0829313903654699186257920\"},\r\n    {1e238, chars_format::fixed,\r\n        \"1000000000000000048647597328726501040484815309997105515973531039741865112735773470079190300557012891053173\"\r\n        \"8945888832142428584597165509708623196466454966148714674320981543085810557013220039375302073350623645891623\"\r\n        \"631119178909006652304785408\"},\r\n    {1e239, chars_format::fixed,\r\n        \"9999999999999999908117914543822067029670662216463268745378029250215574072197019260112206547596676129808759\"\r\n        \"9260657287627887017431169472094235452683230716826407562484594165232135299736843791138087983021771402091458\"\r\n        \"056119576436948334022754304\"},\r\n    {1e240, chars_format::fixed,\r\n        \"1000000000000000013946113804119924437974165856986638331112094170909680489426130543638408513078605724209795\"\r\n        \"1533994970114644654884736372209103405747575829469070323477468267148252340789498643218406108321555742482136\"\r\n        \"93581484614981956096327942144\"},\r\n    {1e241, chars_format::fixed,\r\n        \"1000000000000000050961029563700272813985525273531136661630960164330677420956416331841909086388906702176065\"\r\n        \"8106681756277614179911327452208591182514380241927357631043882428148314438094801465785761804352561506118922\"\r\n        \"744139467759619125060885807104\"},\r\n    {1e242, chars_format::fixed,\r\n        \"1000000000000000050961029563700272813985525273531136661630960164330677420956416331841909086388906702176065\"\r\n        \"8106681756277614179911327452208591182514380241927357631043882428148314438094801465785761804352561506118922\"\r\n        \"7441394677596191250608858071040\"},\r\n    {1e243, chars_format::fixed,\r\n        \"1000000000000000074650575649831695774632795300119615593163034400120115457135799236292149453307499328074479\"\r\n        \"0313201299421914675928345743408263359645135065900661507886387491188354180370195272228869449812405194846465\"\r\n        \"66146722558989084608335389392896\"},\r\n    {1e244, chars_format::fixed,\r\n        \"1000000000000000074650575649831695774632795300119615593163034400120115457135799236292149453307499328074479\"\r\n        \"0313201299421914675928345743408263359645135065900661507886387491188354180370195272228869449812405194846465\"\r\n        \"661467225589890846083353893928960\"},\r\n    {1e245, chars_format::fixed,\r\n        \"1000000000000000044327956659583474385004289666086362560801979378309634770826189118595841783651700766924510\"\r\n        \"1088856284197210041026562330672682972917768891214832545527981010497103310257691199981691663623805273275210\"\r\n        \"7272876955671430431745947427930112\"},\r\n    {1e246, chars_format::fixed,\r\n        \"1000000000000000068586051851782051496707094173312964986690823395758019319873877212752887919376339615844485\"\r\n        \"2468332296376973748947989060861147282299661830963495715414706195050104006347694457779433892574685210532214\"\r\n        \"67463131958534128550160206370177024\"},\r\n    {1e247, chars_format::fixed,\r\n        \"9999999999999999521471949292288813605336325386252733424243721120057734844449743607990664678980731410286045\"\r\n        \"8468474379141079509251407559565185972665757201699124999584253091957006651156788203502711936104615116985957\"\r\n        \"27381924297989722331966923339726848\"},\r\n    {1e248, chars_format::fixed,\r\n        \"1000000000000000045298280467271417469472401846375426657837533139007570152788096642362123629080686320881309\"\r\n        \"1144035324684400589343419399880221545293044608804779072323450017879223338101291330293601352781840470765490\"\r\n        \"8851814405278709728676750356293615616\"},\r\n    {1e249, chars_format::fixed,\r\n        \"9999999999999999210968330832147026575540427693752222372866517696718412616639336002780474141705354144110364\"\r\n        \"0811181423240104047857145413152842812577527572916236425034170729678597741204746503691611405533351920096306\"\r\n        \"7478208555469597215339755257651527680\"},\r\n    {1e250, chars_format::fixed,\r\n        \"9999999999999999210968330832147026575540427693752222372866517696718412616639336002780474141705354144110364\"\r\n        \"0811181423240104047857145413152842812577527572916236425034170729678597741204746503691611405533351920096306\"\r\n        \"74782085554695972153397552576515276800\"},\r\n    {1e251, chars_format::fixed,\r\n        \"1000000000000000048279115204488778624958442464223431563930754291871627646175076555372141458238529942636595\"\r\n        \"6593545337061049953772804316485780039629891613241094802639130808557096063636830930611787917875324597455631\"\r\n        \"5302310250472271728848176952226298724352\"},\r\n    {1e252, chars_format::fixed,\r\n        \"1000000000000000099152028052998409011920202342162715294588395300751542199979533737409779075865727753926819\"\r\n        \"3598516214955865773367640226553978342978747155620883266693416302792790579443373442708838628804120359634031\"\r\n        \"87241060084423965317738575228107571068928\"},\r\n    {1e253, chars_format::fixed,\r\n        \"9999999999999999363587069377675917736425707327570073564839440723358156278052707548893386994586947577981035\"\r\n        \"1826094056924551506641653143357437722624094200055601817197027212385681288624374039982763538319739206631507\"\r\n        \"77435958293799716241167969694049028276224\"},\r\n    {1e254, chars_format::fixed,\r\n        \"9999999999999999363587069377675917736425707327570073564839440723358156278052707548893386994586947577981035\"\r\n        \"1826094056924551506641653143357437722624094200055601817197027212385681288624374039982763538319739206631507\"\r\n        \"774359582937997162411679696940490282762240\"},\r\n    {1e255, chars_format::fixed,\r\n        \"9999999999999999884525696946414532898914128477668338966773684654288481309010349092958796199089453165592925\"\r\n        \"8756995846567465499292772862455788348916374954024635689112910673359193130483369363856562818230607811338327\"\r\n        \"2782784390994049606075766012189756664840192\"},\r\n    {1e256, chars_format::fixed,\r\n        \"1000000000000000030127659900140542502890486539774695128832107979903274133377646232821112356269145763568243\"\r\n        \"8430171727828179669341366863773446884995019955719986278664561744213800260397056562295560224215930269510378\"\r\n        \"288141352402853119916429412464176397346144256\"},\r\n    {1e257, chars_format::fixed,\r\n        \"1000000000000000030127659900140542502890486539774695128832107979903274133377646232821112356269145763568243\"\r\n        \"8430171727828179669341366863773446884995019955719986278664561744213800260397056562295560224215930269510378\"\r\n        \"2881413524028531199164294124641763973461442560\"},\r\n    {1e258, chars_format::fixed,\r\n        \"1000000000000000056799717631659959599209893702659726317411141269166906774962677479877261307539674049653972\"\r\n        \"6465033899457896865765104193391282437061184730323200812906654977415644066700237122877898747347366742071367\"\r\n        \"44674199783831719918405933396323484899269935104\"},\r\n    {1e259, chars_format::fixed,\r\n        \"9999999999999999287738405203667575368767393208115766122317814807014700953545274940077463414411382764424743\"\r\n        \"8976954756352543229311650112256717871435938122277710485446074580467937964449704320826738363164716737786194\"\r\n        \"85458899748089618699435710767754281089234894848\"},\r\n    {1e260, chars_format::fixed,\r\n        \"1000000000000000065334776105746173070032103994782936297756431921731269220269887478935228971946243101201405\"\r\n        \"8636189794379406368620700138868989813722357458196229463864124812040234084717254902264247074749426413290883\"\r\n        \"9774942043776657045497009088429335535195969814528\"},\r\n    {1e261, chars_format::fixed,\r\n        \"9999999999999999287738405203667575368767393208115766122317814807014700953545274940077463414411382764424743\"\r\n        \"8976954756352543229311650112256717871435938122277710485446074580467937964449704320826738363164716737786194\"\r\n        \"8545889974808961869943571076775428108923489484800\"},\r\n    {1e262, chars_format::fixed,\r\n        \"1000000000000000016172839295009583478096172712153246810967557762960541535300357884361335224964405364288190\"\r\n        \"5330331839631511632172467492917395324154002545647584434349098564602595580939232492998880708913562707066468\"\r\n        \"760361494711018313643605437535869015444666630275072\"},\r\n    {1e263, chars_format::fixed,\r\n        \"1000000000000000016172839295009583478096172712153246810967557762960541535300357884361335224964405364288190\"\r\n        \"5330331839631511632172467492917395324154002545647584434349098564602595580939232492998880708913562707066468\"\r\n        \"7603614947110183136436054375358690154446666302750720\"},\r\n    {1e264, chars_format::fixed,\r\n        \"1000000000000000044140518902895287779286391397382581274563006173283444396083023609274483667691850832398819\"\r\n        \"6988775476110313971129684287058746855997333340341924717806535718700452151977396352492066908144631837718580\"\r\n        \"52833032509915549602573975010166573043840478561173504\"},\r\n    {1e265, chars_format::fixed,\r\n        \"1000000000000000066514662589203851220238566345566048845439364901541766684709156189205002421873807206887323\"\r\n        \"0315530385293355842295457722371828081471997976097396944572485441978737408807927440086615867529487142240269\"\r\n        \"942705389409665241931447200154303102433395309881065472\"},\r\n    {1e266, chars_format::fixed,\r\n        \"1000000000000000030716032691110149714715086428472500732037190936328451022907344061316172415182677007705717\"\r\n        \"6992722530600488848430220225870898120712534558888641381746965884733480997879077699935337532513718655005566\"\r\n        \"8797052865128496484823152800700833072414104710501367808\"},\r\n    {1e267, chars_format::fixed,\r\n        \"9999999999999999734382248541602273058775185611228237505937125919871459640244446566940444044768686890151491\"\r\n        \"6762299630919016582458402314694101834973930913546324812261345931410707403929181156932921964884890754300419\"\r\n        \"7890512187794469896370420793533163493423472892065087488\"},\r\n    {1e268, chars_format::fixed,\r\n        \"9999999999999999734382248541602273058775185611228237505937125919871459640244446566940444044768686890151491\"\r\n        \"6762299630919016582458402314694101834973930913546324812261345931410707403929181156932921964884890754300419\"\r\n        \"78905121877944698963704207935331634934234728920650874880\"},\r\n    {1e269, chars_format::fixed,\r\n        \"1000000000000000046753818885456127989189605431330410286841364872744016439394555894610368258180303336939076\"\r\n        \"8881340449502893261681846624303314743132774169798163873892798646379355869975202383523110226600782937286713\"\r\n        \"8519293326106230343475263802678137754874196788463928344576\"},\r\n    {1e270, chars_format::fixed,\r\n        \"1000000000000000046753818885456127989189605431330410286841364872744016439394555894610368258180303336939076\"\r\n        \"8881340449502893261681846624303314743132774169798163873892798646379355869975202383523110226600782937286713\"\r\n        \"85192933261062303434752638026781377548741967884639283445760\"},\r\n    {1e271, chars_format::fixed,\r\n        \"9999999999999999529098585253973751145501342374646995204443699533752222309208135100774737254399069875964494\"\r\n        \"0587990268968240092837584414759169067994863893904436912794686582343509041098785207009431480570467941101738\"\r\n        \"54458342872794765056233999682236635579342942941443126198272\"},\r\n    {1e272, chars_format::fixed,\r\n        \"1000000000000000065522610957467878564117499670103552440120763856617775281089304371516947164728382606807602\"\r\n        \"3845848734024107112161464260868794310399431725879707910415464644008356863148267156087543642309530165922021\"\r\n        \"8514235305581886882057848563849292034690350260273827761094656\"},\r\n    {1e273, chars_format::fixed,\r\n        \"9999999999999999454023416965926748845789765419554426591326103598257186942429141193148421628206752796490392\"\r\n        \"0729957130883384690919113868497250798928233669578260766704022591827505068406526116751697817735479026560506\"\r\n        \"5466066369376850351293060923539046438669680406904714953752576\"},\r\n    {1e274, chars_format::fixed,\r\n        \"9999999999999999213782878444176341486712719163258207029349796604673073768736360688744211624391338142173265\"\r\n        \"7184251089011847404780008120459112337915016951734497099213897822176292355791297027926950096663514500028564\"\r\n        \"15308090320884466574359759805482716570229159677380024223137792\"},\r\n    {1e275, chars_format::fixed,\r\n        \"9999999999999999598167740078976993261235993173332158328511887794407654846644809495790947630496001589080667\"\r\n        \"8857380756006307062602577317320133875536163700284518967198097453618232695975663570046546450378657742479671\"\r\n        \"982722077174989256760731188933351130765773907040474247261585408\"},\r\n    {1e276, chars_format::fixed,\r\n        \"1000000000000000052069140800249855752009185079750964144650090664977064943362508663270311404514719386165843\"\r\n        \"3087289195679301024137674338978658556582691589680457145036017656907888951241814327113357769929500152436233\"\r\n        \"07738608946937362752018518070418086469181314516804918593340833792\"},\r\n    {1e277, chars_format::fixed,\r\n        \"1000000000000000002867878510995372324870206006461498378357342992691038565390227215968329195733322464961695\"\r\n        \"8313128598304010187936385481780447799767184805866054345934040104083320587698215409722049436653961817402491\"\r\n        \"275192019201707119869992081071729797163687409453914913289541779456\"},\r\n    {1e278, chars_format::fixed,\r\n        \"9999999999999999635068686795917855831590227478299257653231448548622174630124020581267434287082049279983778\"\r\n        \"4938001204037775189753543960218791943147793788145321066524580618236658968633362758090027700335311493754978\"\r\n        \"334367629875739137498376013657689431411868208826074951744485326848\"},\r\n    {1e279, chars_format::fixed,\r\n        \"1000000000000000057973292274960393763265862568545700036605220385651388108719182436946549269568487016710341\"\r\n        \"0060188467364335924481829001842443847400552403738185480928254963246837154867046197200314769922564752640282\"\r\n        \"09364937790149360843820835266007499279518823345374529865067232493568\"},\r\n    {1e280, chars_format::fixed,\r\n        \"1000000000000000032782245982862098248570705283021493564263333577440942603197374335927934378672411793053817\"\r\n        \"4975818241508187016346769106956959939911012930425211247788042456200658152732723551495964903285489125103006\"\r\n        \"290926013924448356521309485648260046220787856768108551057012647002112\"},\r\n    {1e281, chars_format::fixed,\r\n        \"1000000000000000032782245982862098248570705283021493564263333577440942603197374335927934378672411793053817\"\r\n        \"4975818241508187016346769106956959939911012930425211247788042456200658152732723551495964903285489125103006\"\r\n        \"2909260139244483565213094856482600462207878567681085510570126470021120\"},\r\n    {1e282, chars_format::fixed,\r\n        \"1000000000000000032782245982862098248570705283021493564263333577440942603197374335927934378672411793053817\"\r\n        \"4975818241508187016346769106956959939911012930425211247788042456200658152732723551495964903285489125103006\"\r\n        \"29092601392444835652130948564826004622078785676810855105701264700211200\"},\r\n    {1e283, chars_format::fixed,\r\n        \"9999999999999999553953517735361344274271821018911312812290573026184540102343798495987494338396687059809772\"\r\n        \"7966329076780975705558651098687533761031476684077544035813096345547962581760843838922021129763927973084950\"\r\n        \"24959839786965342632596166187964530344229899589832462449290116390191104\"},\r\n    {1e284, chars_format::fixed,\r\n        \"1000000000000000079214382508457676541256819191699710934083899342334435758975171027725445345572057645297521\"\r\n        \"6283329441806240683821311505209883878195732087635685354312082149188175289466707052058222577470946921779713\"\r\n        \"0505057184069381648545374773244373557467226310750742042216461653692645376\"},\r\n    {1e285, chars_format::fixed,\r\n        \"9999999999999999801591579205204428501931095198528472118000257105616503599825380852240886161861464938442861\"\r\n        \"4939722145037261932089543889369794765216645522533405937274641374814720644342089175254062058753036222027386\"\r\n        \"3006901551095990707698442841525909542472844588688081080376132618600579072\"},\r\n    {1e286, chars_format::fixed,\r\n        \"1000000000000000032988611034086967485427088011504507863684758314173802572778608987891478871858632441286011\"\r\n        \"7381629402398400588202211517615861824081167237790591132705927077058380451118207922609574937392980048643791\"\r\n        \"654301923722148311225012721166820834263125344653917287293299907083743789056\"},\r\n    {1e287, chars_format::fixed,\r\n        \"1000000000000000075252173524940187193614270804825836385192544397063524343015465710025391076396621199239392\"\r\n        \"2091755152714140104196817220558967702128769386220391563888697428719907160465407126676909922607121189796634\"\r\n        \"0736882502910990345434353553680702253338428636675464684849307718019341877248\"},\r\n    {1e288, chars_format::fixed,\r\n        \"1000000000000000007630473539575035660514778335511710750780086664439969510636494954611131549135839186513983\"\r\n        \"4555553952208956878605448095849998297252605948732710873996264866061464425509888400169173946264495363952086\"\r\n        \"20267012778077787723395914064607119962069483324573977857832138825282954985472\"},\r\n    {1e289, chars_format::fixed,\r\n        \"1000000000000000061727833527867156886994372310963011258310052850538813376539671558942539170944464796694310\"\r\n        \"4584514912613103459078543395617173821153536698722855425910210916188218613474303381375362727338596024627724\"\r\n        \"499484625789034803081540112423670420191213257583185130503608895092113260150784\"},\r\n    {1e290, chars_format::fixed,\r\n        \"1000000000000000061727833527867156886994372310963011258310052850538813376539671558942539170944464796694310\"\r\n        \"4584514912613103459078543395617173821153536698722855425910210916188218613474303381375362727338596024627724\"\r\n        \"4994846257890348030815401124236704201912132575831851305036088950921132601507840\"},\r\n    {1e291, chars_format::fixed,\r\n        \"9999999999999999578609023503462841321535518780965142838525177732290331540055724786262365370719036251480826\"\r\n        \"1289098686371420245702004200641968152637496587417778862354344999448505725826266174594802676763227561304989\"\r\n        \"6960078961318150545418464661067991669581788285529005480705688196068853638234112\"},\r\n    {1e292, chars_format::fixed,\r\n        \"1000000000000000013256598978357416268068656108958646003563203147794249272690425321461597941803936249972737\"\r\n        \"4638565892090988122974650007025784551738302746731685907395315255274646861058187558214617579496201832662352\"\r\n        \"585538835573636597522107561710941518560028749376834095178551288964115055725510656\"},\r\n    {1e293, chars_format::fixed,\r\n        \"9999999999999999246234843735396048506044893395792352520261065484899034827946607729250196942326840502532897\"\r\n        \"0231162545648343655275306678872441733790178059478330735395060467469727994972900530063978805843953102113868\"\r\n        \"000379620369084502134308975505229555772913629423636305841602377586326247764393984\"},\r\n    {1e294, chars_format::fixed,\r\n        \"1000000000000000066436467741248103118547156170586292454485461107376856746627884050583544890346687569804406\"\r\n        \"1207835674606680377442921610508908778753873711201997607708800780391251297994726061339549398843285746132932\"\r\n        \"05683935969567348590731356020719265634967118123751637393518591968740451429495341056\"},\r\n    {1e295, chars_format::fixed,\r\n        \"9999999999999999813486777206230041577815560719820581330098483720446847883279500839884297726782854580737362\"\r\n        \"6970040225815727702936870449359100155289601680494988872072239402046841988962644563396584878879514845800049\"\r\n        \"02758521100414464490983962613190835886243290260424727924570510530141380583845003264\"},\r\n    {1e296, chars_format::fixed,\r\n        \"9999999999999999813486777206230041577815560719820581330098483720446847883279500839884297726782854580737362\"\r\n        \"6970040225815727702936870449359100155289601680494988872072239402046841988962644563396584878879514845800049\"\r\n        \"027585211004144644909839626131908358862432902604247279245705105301413805838450032640\"},\r\n    {1e297, chars_format::fixed,\r\n        \"1000000000000000017652801462756379714374878780719864776839443139119744823869255243069012222883470359078822\"\r\n        \"0728292194112285349344027126247056154504923279794565007954563392017619494511608074472945276562227436175920\"\r\n        \"48849967890105831362861792425329827928397252374398383022243308510390698430058459037696\"},\r\n    {1e298, chars_format::fixed,\r\n        \"9999999999999999595662034753429788238255624467393741467120915117996487670031669885400803025551745174706847\"\r\n        \"8782311196631452228634829961492223321433823010024592147588202691169230215270582854596864146833859136224555\"\r\n        \"51313826420028155008403585629126369847605750170289266545852965785882018353801250996224\"},\r\n    {1e299, chars_format::fixed,\r\n        \"1000000000000000052504760255204420248704468581108159154915854115511802457988908195786371375080447864043704\"\r\n        \"4438328838781769425232353604305756447921847867069828483872009265758037378302337947880900593689532349707999\"\r\n        \"4508111903896764088007465274278014249457925878882005684283811566947219638686545940054016\"},\r\n    {1e300, chars_format::fixed,\r\n        \"1000000000000000052504760255204420248704468581108159154915854115511802457988908195786371375080447864043704\"\r\n        \"4438328838781769425232353604305756447921847867069828483872009265758037378302337947880900593689532349707999\"\r\n        \"45081119038967640880074652742780142494579258788820056842838115669472196386865459400540160\"},\r\n    {1e301, chars_format::fixed,\r\n        \"1000000000000000052504760255204420248704468581108159154915854115511802457988908195786371375080447864043704\"\r\n        \"4438328838781769425232353604305756447921847867069828483872009265758037378302337947880900593689532349707999\"\r\n        \"450811190389676408800746527427801424945792587888200568428381156694721963868654594005401600\"},\r\n    {1e302, chars_format::fixed,\r\n        \"1000000000000000076297030790848949253473468551506568117016017342062113802881257944841421889646917840766397\"\r\n        \"4757713854876137221038784479993829181561135051983075016764985648898162653636809541460731423515105837345898\"\r\n        \"6890825155659063617715863205282622390509284183439858617103083735673849899204570498157510656\"},\r\n    {1e303, chars_format::fixed,\r\n        \"1000000000000000000161765076786456438212668646231659438295495017101117499225738747865260243034213915253779\"\r\n        \"7735681803374160274458205677791996433915416060260686111507461222849761772566500442005272768073270676904621\"\r\n        \"12661427500197051226489898260678763391449376088547292320814127957486330655468919122263277568\"},\r\n    {1e304, chars_format::fixed,\r\n        \"9999999999999999392535525055364621860040287220117324953190771571323204563013233902843309257440507748436856\"\r\n        \"1180561621725787171937426360305302357988408668827749873014416820110410677102531624409058437198025485515990\"\r\n        \"76639682550821832659549112269607949805346034918662572406407604380845959862074904348138143744\"},\r\n    {1e305, chars_format::fixed,\r\n        \"9999999999999999392535525055364621860040287220117324953190771571323204563013233902843309257440507748436856\"\r\n        \"1180561621725787171937426360305302357988408668827749873014416820110410677102531624409058437198025485515990\"\r\n        \"766396825508218326595491122696079498053460349186625724064076043808459598620749043481381437440\"},\r\n    {1e306, chars_format::fixed,\r\n        \"1000000000000000017216064596736454828831087825013238982328892017892380671244575047987920451875459594568606\"\r\n        \"1388616982910603110492255329485206969388057114406501226285146694284603569926249680283295506892241752843467\"\r\n        \"30060716088829214255439694630119794546505512415617982143262670862918816362862119154749127262208\"},\r\n    {1e307, chars_format::fixed,\r\n        \"9999999999999999860310597602564577717002641838126363875249660735883565852672743849064846414228960666786379\"\r\n        \"2803926546153933531728502521033362759523706153970107306916646893751785690398510731463396416232660711267200\"\r\n        \"11020169553304018596457812688561947201171488461172921822139066929851282122002676667750021070848\"},\r\n    {1e308, chars_format::fixed,\r\n        \"1000000000000000010979063629440455417404923096773118463368106829031575854049114915371633289784946888990612\"\r\n        \"4966972117251561159028374314008832830700919814604603127166450293302718569748969958855904333838446616500117\"\r\n        \"8426897626212945177628091195786707458122783970171784415105291802893207873272974885715430223118336\"},\r\n\r\n    // These numbers have odd mantissas (unaffected by shifting)\r\n    // that are barely within the \"max shifted mantissa\" limit.\r\n    // They're exactly-representable multiples of powers of 10, and can use Ryu with zero-filling.\r\n    {1801439850948197e1, chars_format::fixed, \"18014398509481970\"},\r\n    {360287970189639e2, chars_format::fixed, \"36028797018963900\"},\r\n    {72057594037927e3, chars_format::fixed, \"72057594037927000\"},\r\n    {14411518807585e4, chars_format::fixed, \"144115188075850000\"},\r\n    {2882303761517e5, chars_format::fixed, \"288230376151700000\"},\r\n    {576460752303e6, chars_format::fixed, \"576460752303000000\"},\r\n    {115292150459e7, chars_format::fixed, \"1152921504590000000\"},\r\n    {23058430091e8, chars_format::fixed, \"2305843009100000000\"},\r\n    {4611686017e9, chars_format::fixed, \"4611686017000000000\"},\r\n    {922337203e10, chars_format::fixed, \"9223372030000000000\"},\r\n    {184467439e11, chars_format::fixed, \"18446743900000000000\"},\r\n    {36893487e12, chars_format::fixed, \"36893487000000000000\"},\r\n    {7378697e13, chars_format::fixed, \"73786970000000000000\"},\r\n    {1475739e14, chars_format::fixed, \"147573900000000000000\"},\r\n    {295147e15, chars_format::fixed, \"295147000000000000000\"},\r\n    {59029e16, chars_format::fixed, \"590290000000000000000\"},\r\n    {11805e17, chars_format::fixed, \"1180500000000000000000\"},\r\n    {2361e18, chars_format::fixed, \"2361000000000000000000\"},\r\n    {471e19, chars_format::fixed, \"4710000000000000000000\"},\r\n    {93e20, chars_format::fixed, \"9300000000000000000000\"},\r\n    {17e21, chars_format::fixed, \"17000000000000000000000\"},\r\n    {3e22, chars_format::fixed, \"30000000000000000000000\"},\r\n\r\n    // These numbers have odd mantissas (unaffected by shifting)\r\n    // that are barely above the \"max shifted mantissa\" limit.\r\n    // This activates the non-Ryu fallback for large integers.\r\n    {1801439850948199e1, chars_format::fixed, \"18014398509481992\"},\r\n    {360287970189641e2, chars_format::fixed, \"36028797018964096\"},\r\n    {72057594037929e3, chars_format::fixed, \"72057594037928992\"},\r\n    {14411518807587e4, chars_format::fixed, \"144115188075870016\"},\r\n    {2882303761519e5, chars_format::fixed, \"288230376151900032\"},\r\n    {576460752305e6, chars_format::fixed, \"576460752304999936\"},\r\n    {115292150461e7, chars_format::fixed, \"1152921504609999872\"},\r\n    {23058430093e8, chars_format::fixed, \"2305843009299999744\"},\r\n    {4611686019e9, chars_format::fixed, \"4611686019000000512\"},\r\n    {922337205e10, chars_format::fixed, \"9223372049999998976\"},\r\n    {184467441e11, chars_format::fixed, \"18446744099999997952\"},\r\n    {36893489e12, chars_format::fixed, \"36893488999999995904\"},\r\n    {7378699e13, chars_format::fixed, \"73786990000000008192\"},\r\n    {1475741e14, chars_format::fixed, \"147574099999999983616\"},\r\n    {295149e15, chars_format::fixed, \"295148999999999967232\"},\r\n    {59031e16, chars_format::fixed, \"590310000000000065536\"},\r\n    {11807e17, chars_format::fixed, \"1180700000000000131072\"},\r\n    {2363e18, chars_format::fixed, \"2363000000000000262144\"},\r\n    {473e19, chars_format::fixed, \"4729999999999999475712\"},\r\n    {95e20, chars_format::fixed, \"9500000000000001048576\"},\r\n    {19e21, chars_format::fixed, \"19000000000000002097152\"},\r\n    {5e22, chars_format::fixed, \"49999999999999995805696\"},\r\n\r\n    // Test the mantissa shifting logic.\r\n    // Also test a large shift, because 32-bit platforms need to simulate _BitScanForward64().\r\n    {302230528e15, chars_format::fixed, \"302230528000000000000000\"}, // 295147 * 2^10\r\n    {302232576e15, chars_format::fixed, \"302232575999999966445568\"}, // 295149 * 2^10\r\n    {81123342286848e18, chars_format::fixed, \"81123342286848000000000000000000\"}, // 2361 * 2^35\r\n    {81192061763584e18, chars_format::fixed, \"81192061763584009007199254740992\"}, // 2363 * 2^35\r\n\r\n    // Inspect all of those numbers in scientific notation.\r\n    // For the within-limit numbers, this verifies that Ryu is actually being used with zero-filling above.\r\n    // For the above-limit numbers, this tests Ryu's trimming.\r\n    {1801439850948197e1, chars_format::scientific, \"1.801439850948197e+16\"},\r\n    {360287970189639e2, chars_format::scientific, \"3.60287970189639e+16\"},\r\n    {72057594037927e3, chars_format::scientific, \"7.2057594037927e+16\"},\r\n    {14411518807585e4, chars_format::scientific, \"1.4411518807585e+17\"},\r\n    {2882303761517e5, chars_format::scientific, \"2.882303761517e+17\"},\r\n    {576460752303e6, chars_format::scientific, \"5.76460752303e+17\"},\r\n    {115292150459e7, chars_format::scientific, \"1.15292150459e+18\"},\r\n    {23058430091e8, chars_format::scientific, \"2.3058430091e+18\"},\r\n    {4611686017e9, chars_format::scientific, \"4.611686017e+18\"},\r\n    {922337203e10, chars_format::scientific, \"9.22337203e+18\"},\r\n    {184467439e11, chars_format::scientific, \"1.84467439e+19\"},\r\n    {36893487e12, chars_format::scientific, \"3.6893487e+19\"},\r\n    {7378697e13, chars_format::scientific, \"7.378697e+19\"},\r\n    {1475739e14, chars_format::scientific, \"1.475739e+20\"},\r\n    {295147e15, chars_format::scientific, \"2.95147e+20\"},\r\n    {59029e16, chars_format::scientific, \"5.9029e+20\"},\r\n    {11805e17, chars_format::scientific, \"1.1805e+21\"},\r\n    {2361e18, chars_format::scientific, \"2.361e+21\"},\r\n    {471e19, chars_format::scientific, \"4.71e+21\"},\r\n    {93e20, chars_format::scientific, \"9.3e+21\"},\r\n    {17e21, chars_format::scientific, \"1.7e+22\"},\r\n    {3e22, chars_format::scientific, \"3e+22\"},\r\n    {1801439850948199e1, chars_format::scientific, \"1.801439850948199e+16\"},\r\n    {360287970189641e2, chars_format::scientific, \"3.60287970189641e+16\"},\r\n    {72057594037929e3, chars_format::scientific, \"7.2057594037929e+16\"},\r\n    {14411518807587e4, chars_format::scientific, \"1.4411518807587e+17\"},\r\n    {2882303761519e5, chars_format::scientific, \"2.882303761519e+17\"},\r\n    {576460752305e6, chars_format::scientific, \"5.76460752305e+17\"},\r\n    {115292150461e7, chars_format::scientific, \"1.15292150461e+18\"},\r\n    {23058430093e8, chars_format::scientific, \"2.3058430093e+18\"},\r\n    {4611686019e9, chars_format::scientific, \"4.611686019e+18\"},\r\n    {922337205e10, chars_format::scientific, \"9.22337205e+18\"},\r\n    {184467441e11, chars_format::scientific, \"1.84467441e+19\"},\r\n    {36893489e12, chars_format::scientific, \"3.6893489e+19\"},\r\n    {7378699e13, chars_format::scientific, \"7.378699e+19\"},\r\n    {1475741e14, chars_format::scientific, \"1.475741e+20\"},\r\n    {295149e15, chars_format::scientific, \"2.95149e+20\"},\r\n    {59031e16, chars_format::scientific, \"5.9031e+20\"},\r\n    {11807e17, chars_format::scientific, \"1.1807e+21\"},\r\n    {2363e18, chars_format::scientific, \"2.363e+21\"},\r\n    {473e19, chars_format::scientific, \"4.73e+21\"},\r\n    {95e20, chars_format::scientific, \"9.5e+21\"},\r\n    {19e21, chars_format::scientific, \"1.9e+22\"},\r\n    {5e22, chars_format::scientific, \"5e+22\"},\r\n    {302230528e15, chars_format::scientific, \"3.02230528e+23\"},\r\n    {302232576e15, chars_format::scientific, \"3.02232576e+23\"},\r\n    {81123342286848e18, chars_format::scientific, \"8.1123342286848e+31\"},\r\n    {81192061763584e18, chars_format::scientific, \"8.1192061763584e+31\"},\r\n\r\n    // Test the switching logic of chars_format::general.\r\n    // C11 7.21.6.1 \"The fprintf function\"/8:\r\n    // \"Let P equal [...] 6 if the precision is omitted [...].\r\n    // Then, if a conversion with style E would have an exponent of X:\r\n    // - if P > X >= -4, the conversion is with style f [...].\r\n    // - otherwise, the conversion is with style e [...].\"\r\n    {1e-6, chars_format::general, \"1e-06\"},\r\n    {1e-5, chars_format::general, \"1e-05\"},\r\n    {1e-4, chars_format::general, \"0.0001\"},\r\n    {1e-3, chars_format::general, \"0.001\"},\r\n    {1e-2, chars_format::general, \"0.01\"},\r\n    {1e-1, chars_format::general, \"0.1\"},\r\n    {1e0, chars_format::general, \"1\"},\r\n    {1e1, chars_format::general, \"10\"},\r\n    {1e2, chars_format::general, \"100\"},\r\n    {1e3, chars_format::general, \"1000\"},\r\n    {1e4, chars_format::general, \"10000\"},\r\n    {1e5, chars_format::general, \"100000\"},\r\n    {1e6, chars_format::general, \"1e+06\"},\r\n    {1e7, chars_format::general, \"1e+07\"},\r\n    {1.234e-6, chars_format::general, \"1.234e-06\"},\r\n    {1.234e-5, chars_format::general, \"1.234e-05\"},\r\n    {1.234e-4, chars_format::general, \"0.0001234\"},\r\n    {1.234e-3, chars_format::general, \"0.001234\"},\r\n    {1.234e-2, chars_format::general, \"0.01234\"},\r\n    {1.234e-1, chars_format::general, \"0.1234\"},\r\n    {1.234e0, chars_format::general, \"1.234\"},\r\n    {1.234e1, chars_format::general, \"12.34\"},\r\n    {1.234e2, chars_format::general, \"123.4\"},\r\n    {1.234e3, chars_format::general, \"1234\"},\r\n    {1.234e4, chars_format::general, \"12340\"},\r\n    {1.234e5, chars_format::general, \"123400\"},\r\n    {1.234e6, chars_format::general, \"1.234e+06\"},\r\n    {1.234e7, chars_format::general, \"1.234e+07\"},\r\n    {1.234e8, chars_format::general, \"1.234e+08\"},\r\n    {1.234e9, chars_format::general, \"1.234e+09\"},\r\n    {1.234e10, chars_format::general, \"1.234e+10\"},\r\n\r\n    // Test the switching logic of the plain overload.\r\n    // N4762 19.19.2 [charconv.to.chars]/8:\r\n    // \"The conversion specifier is f or e, chosen according to the requirement\r\n    // for a shortest representation (see above); a tie is resolved in favor of f.\"\r\n    {1e-6, chars_format{}, \"1e-06\"},\r\n    {1e-5, chars_format{}, \"1e-05\"},\r\n    {1e-4, chars_format{}, \"1e-04\"},\r\n    {1e-3, chars_format{}, \"0.001\"},\r\n    {1e-2, chars_format{}, \"0.01\"},\r\n    {1e-1, chars_format{}, \"0.1\"},\r\n    {1e0, chars_format{}, \"1\"},\r\n    {1e1, chars_format{}, \"10\"},\r\n    {1e2, chars_format{}, \"100\"},\r\n    {1e3, chars_format{}, \"1000\"},\r\n    {1e4, chars_format{}, \"10000\"},\r\n    {1e5, chars_format{}, \"1e+05\"},\r\n    {1e6, chars_format{}, \"1e+06\"},\r\n    {1e7, chars_format{}, \"1e+07\"},\r\n    {1.234e-6, chars_format{}, \"1.234e-06\"},\r\n    {1.234e-5, chars_format{}, \"1.234e-05\"},\r\n    {1.234e-4, chars_format{}, \"0.0001234\"},\r\n    {1.234e-3, chars_format{}, \"0.001234\"},\r\n    {1.234e-2, chars_format{}, \"0.01234\"},\r\n    {1.234e-1, chars_format{}, \"0.1234\"},\r\n    {1.234e0, chars_format{}, \"1.234\"},\r\n    {1.234e1, chars_format{}, \"12.34\"},\r\n    {1.234e2, chars_format{}, \"123.4\"},\r\n    {1.234e3, chars_format{}, \"1234\"},\r\n    {1.234e4, chars_format{}, \"12340\"},\r\n    {1.234e5, chars_format{}, \"123400\"},\r\n    {1.234e6, chars_format{}, \"1234000\"},\r\n    {1.234e7, chars_format{}, \"12340000\"},\r\n    {1.234e8, chars_format{}, \"123400000\"},\r\n    {1.234e9, chars_format{}, \"1.234e+09\"},\r\n    {1.234e10, chars_format{}, \"1.234e+10\"},\r\n\r\n    // GH-331 \"<charconv>: Test plain shortest's large integer fallback\"\r\n    // The exactly-representable integer 123456789012345683968 is 21 digits, but scientific shortest needs 22\r\n    // characters. Therefore, the plain overload must select fixed notation. Because this 21-digit number exceeds the\r\n    // 17-digit round-trip limit, we can't use Ryu - we need to activate the large integer fallback (Ryu Printf for\r\n    // double).\r\n    {123456789012345683968.0, chars_format::scientific, \"1.2345678901234568e+20\"},\r\n    {123456789012345683968.0, chars_format{}, \"123456789012345683968\"},\r\n\r\n    // Exact value is 1.9156918820264798304697...e-56, incorrectly rounded by dtoa_milo() (Grisu2).\r\n    {0x1.e0ffed391517ep-186, chars_format::scientific, \"1.9156918820264798e-56\"},\r\n\r\n    // Exact value is 6.6564021122018745286598...e+264, incorrectly rounded by dtoa_milo() (Grisu2).\r\n    {0x1.a6c767640cd71p+879, chars_format::scientific, \"6.6564021122018745e+264\"},\r\n\r\n    // Incorrectly handled by dtoa_milo() (Grisu2), which doesn't achieve shortest round-trip.\r\n    {4.91e-6, chars_format::scientific, \"4.91e-06\"},\r\n    {5.547e-6, chars_format::scientific, \"5.547e-06\"},\r\n\r\n    // Test hexfloat corner cases.\r\n    {0x1.728p+0, chars_format::hex, \"1.728p+0\"}, // instead of \"2.e5p-1\"\r\n    {0x0.0000000000001p-1022, chars_format::hex, \"0.0000000000001p-1022\"}, // instead of \"1p-1074\", min subnormal\r\n    {0x0.fffffffffffffp-1022, chars_format::hex, \"0.fffffffffffffp-1022\"}, // max subnormal\r\n    {0x1p-1022, chars_format::hex, \"1p-1022\"}, // min normal\r\n    {0x1.fffffffffffffp+1023, chars_format::hex, \"1.fffffffffffffp+1023\"}, // max normal\r\n\r\n    // Test hexfloat exponents.\r\n    {0x1p-1009, chars_format::hex, \"1p-1009\"},\r\n    {0x1p-999, chars_format::hex, \"1p-999\"},\r\n    {0x1p-99, chars_format::hex, \"1p-99\"},\r\n    {0x1p-9, chars_format::hex, \"1p-9\"},\r\n    {0x1p+0, chars_format::hex, \"1p+0\"},\r\n    {0x1p+9, chars_format::hex, \"1p+9\"},\r\n    {0x1p+99, chars_format::hex, \"1p+99\"},\r\n    {0x1p+999, chars_format::hex, \"1p+999\"},\r\n    {0x1p+1009, chars_format::hex, \"1p+1009\"},\r\n\r\n    // Test hexfloat hexits.\r\n    {0x1.01234567p+0, chars_format::hex, \"1.01234567p+0\"},\r\n    {0x1.89abcdefp+0, chars_format::hex, \"1.89abcdefp+0\"},\r\n\r\n    // Test hexfloat trimming.\r\n    {0x1.000000000000ap+0, chars_format::hex, \"1.000000000000ap+0\"},\r\n    {0x1.00000000000ap+0, chars_format::hex, \"1.00000000000ap+0\"},\r\n    {0x1.0000000000ap+0, chars_format::hex, \"1.0000000000ap+0\"},\r\n    {0x1.000000000ap+0, chars_format::hex, \"1.000000000ap+0\"},\r\n    {0x1.00000000ap+0, chars_format::hex, \"1.00000000ap+0\"},\r\n    {0x1.0000000ap+0, chars_format::hex, \"1.0000000ap+0\"},\r\n    {0x1.000000ap+0, chars_format::hex, \"1.000000ap+0\"},\r\n    {0x1.00000ap+0, chars_format::hex, \"1.00000ap+0\"},\r\n    {0x1.0000ap+0, chars_format::hex, \"1.0000ap+0\"},\r\n    {0x1.000ap+0, chars_format::hex, \"1.000ap+0\"},\r\n    {0x1.00ap+0, chars_format::hex, \"1.00ap+0\"},\r\n    {0x1.0ap+0, chars_format::hex, \"1.0ap+0\"},\r\n    {0x1.ap+0, chars_format::hex, \"1.ap+0\"},\r\n    {0x1p+0, chars_format::hex, \"1p+0\"},\r\n\r\n    // https://www.exploringbinary.com/the-shortest-decimal-string-that-round-trips-may-not-be-the-nearest/\r\n    // This is an exhaustive list of anomalous values.\r\n\r\n    // Because math, these values have shortest-round-trip decimal representations containing 16 significant digits,\r\n    // but those decimal digits aren't what would be printed by \"%.15e\". For ordinary values, shortest-round-trip\r\n    // behaves as if it can magically pick a precision for \"%.*e\", finding the smallest precision that round-trips.\r\n    // (That is, start with the exact decimal representation, and then round it as much as possible.) These anomalous\r\n    // values demonstrate an exception to that mental model. They aren't being \"incorrectly rounded\"; instead, having\r\n    // the shortest output that round-trips is being prioritized. (This differs by 1 in the least significant decimal\r\n    // digit printed, so it's a very small difference.)\r\n\r\n    // N4835 20.19.2 [charconv.to.chars]/2 demands this behavior:\r\n    // \"The functions that take a floating-point value but not a precision parameter ensure that the string\r\n    // representation consists of the smallest number of characters such that there is at least one digit before the\r\n    // radix point (if present) and parsing the representation using the corresponding from_chars function recovers\r\n    // value exactly. [...] If there are several such representations, the representation with the smallest difference\r\n    // from the floating-point argument value is chosen, resolving any remaining ties using rounding according to\r\n    // round_to_nearest (17.3.4.1).\"\r\n    {0x1p976, chars_format::scientific, \"6.386688990511104e+293\"},\r\n    {0x1p896, chars_format::scientific, \"5.282945311356653e+269\"},\r\n    {0x1p863, chars_format::scientific, \"6.150157786156811e+259\"},\r\n    {0x1p803, chars_format::scientific, \"5.334411546303884e+241\"},\r\n    {0x1p710, chars_format::scientific, \"5.386379163185535e+213\"},\r\n    {0x1p594, chars_format::scientific, \"6.483618076376552e+178\"},\r\n    {0x1p574, chars_format::scientific, \"6.183260036827614e+172\"},\r\n    {0x1p554, chars_format::scientific, \"5.896816288783659e+166\"},\r\n    {0x1p544, chars_format::scientific, \"5.758609657015292e+163\"},\r\n    {0x1p534, chars_format::scientific, \"5.623642243178996e+160\"},\r\n    {0x1p481, chars_format::scientific, \"6.243497100631985e+144\"},\r\n    {0x1p405, chars_format::scientific, \"8.263199609878108e+121\"},\r\n    {0x1p398, chars_format::scientific, \"6.455624695217272e+119\"},\r\n    {0x1p378, chars_format::scientific, \"6.156563468186638e+113\"},\r\n    {0x1p345, chars_format::scientific, \"7.167183174968974e+103\"},\r\n    {0x1p305, chars_format::scientific, \"6.518515124270356e+91\"},\r\n    {0x1p275, chars_format::scientific, \"6.070840288205404e+82\"},\r\n    {0x1p182, chars_format::scientific, \"6.129982163463556e+54\"},\r\n    {0x1p172, chars_format::scientific, \"5.986310706507379e+51\"},\r\n    {0x1p132, chars_format::scientific, \"5.444517870735016e+39\"},\r\n    {0x1p122, chars_format::scientific, \"5.316911983139664e+36\"},\r\n    {0x1p89, chars_format::scientific, \"6.189700196426902e+26\"},\r\n    {0x1p-24, chars_format::scientific, \"5.960464477539063e-08\"},\r\n    {0x1p-44, chars_format::scientific, \"5.684341886080802e-14\"},\r\n    {0x1p-77, chars_format::scientific, \"6.617444900424222e-24\"},\r\n    {0x1p-97, chars_format::scientific, \"6.310887241768095e-30\"},\r\n    {0x1p-140, chars_format::scientific, \"7.174648137343064e-43\"},\r\n    {0x1p-296, chars_format::scientific, \"7.854549544476363e-90\"},\r\n    {0x1p-366, chars_format::scientific, \"6.653062250012736e-111\"},\r\n    {0x1p-383, chars_format::scientific, \"5.075883674631299e-116\"},\r\n    {0x1p-489, chars_format::scientific, \"6.256509672447191e-148\"},\r\n    {0x1p-496, chars_format::scientific, \"4.887898181599368e-150\"},\r\n    {0x1p-509, chars_format::scientific, \"5.966672584960166e-154\"},\r\n    {0x1p-549, chars_format::scientific, \"5.426657103235053e-166\"},\r\n    {0x1p-652, chars_format::scientific, \"5.351097043477547e-197\"},\r\n    {0x1p-662, chars_format::scientific, \"5.225680706521042e-200\"},\r\n    {0x1p-695, chars_format::scientific, \"6.083493012144512e-210\"},\r\n    {0x1p-705, chars_format::scientific, \"5.940911144672375e-213\"},\r\n    {0x1p-778, chars_format::scientific, \"6.290184345309701e-235\"},\r\n    {0x1p-788, chars_format::scientific, \"6.142758149716505e-238\"},\r\n    {0x1p-791, chars_format::scientific, \"7.678447687145631e-239\"},\r\n    {0x1p-808, chars_format::scientific, \"5.858190679279809e-244\"},\r\n    {0x1p-921, chars_format::scientific, \"5.641232424577593e-278\"},\r\n    {0x1p-957, chars_format::scientific, \"8.209073602596753e-289\"},\r\n    {0x1p-1007, chars_format::scientific, \"7.291122019556398e-304\"},\r\n    {0x1p-1017, chars_format::scientific, \"7.120236347223045e-307\"},\r\n\r\n    // This is an exhaustive list of almost-but-not-quite-anomalous values.\r\n    {0x1p966, chars_format::scientific, \"6.237000967296e+290\"},\r\n    {0x1p956, chars_format::scientific, \"6.090821257125e+287\"},\r\n    {0x1p890, chars_format::scientific, \"8.25460204899477e+267\"},\r\n    {0x1p740, chars_format::scientific, \"5.78358058743443e+222\"},\r\n    {0x1p149, chars_format::scientific, \"7.1362384635298e+44\"},\r\n    {0x1p-499, chars_format::scientific, \"6.10987272699921e-151\"},\r\n    {0x1p-569, chars_format::scientific, \"5.17526350329881e-172\"},\r\n    {0x1p-645, chars_format::scientific, \"6.84940421565126e-195\"},\r\n};\r\n\r\n#endif // DOUBLE_TO_CHARS_TEST_CASES_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/O2 /wd4793\"\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/float_fixed_precision_to_chars_test_cases.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception AND BSL-1.0\r\n\r\n\r\n// Copyright 2018 Ulf Adams\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n// Boost Software License - Version 1.0 - August 17th, 2003\r\n\r\n// Permission is hereby granted, free of charge, to any person or organization\r\n// obtaining a copy of the software and accompanying documentation covered by\r\n// this license (the \"Software\") to use, reproduce, display, distribute,\r\n// execute, and transmit the Software, and to prepare derivative works of the\r\n// Software, and to permit third-parties to whom the Software is furnished to\r\n// do so, all subject to the following:\r\n\r\n// The copyright notices in the Software and this entire statement, including\r\n// the above license grant, this restriction and the following disclaimer,\r\n// must be included in all copies of the Software, in whole or in part, and\r\n// all derivative works of the Software, unless such copies or derivative\r\n// works are solely in the form of machine-executable object code generated by\r\n// a source language processor.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r\n// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r\n// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r\n// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\n// DEALINGS IN THE SOFTWARE.\r\n\r\n\r\n// This file contains test cases derived from:\r\n// https://github.com/ulfjack/ryu\r\n// See xcharconv_ryu.h for the exact commit.\r\n// (Keep the cgmanifest.json commitHash in sync.)\r\n\r\n\r\n#ifndef FLOAT_FIXED_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n#define FLOAT_FIXED_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\ninline constexpr FloatPrecisionToCharsTestCase float_fixed_precision_to_chars_test_cases[] = {\r\n    // Test special cases (zero, inf, nan) and an ordinary case. Also test negative signs.\r\n    {0.0f, chars_format::fixed, 4, \"0.0000\"},\r\n    {-0.0f, chars_format::fixed, 4, \"-0.0000\"},\r\n    {float_inf, chars_format::fixed, 4, \"inf\"},\r\n    {-float_inf, chars_format::fixed, 4, \"-inf\"},\r\n    {float_nan, chars_format::fixed, 4, \"nan\"},\r\n    {-float_nan, chars_format::fixed, 4, \"-nan(ind)\"},\r\n    {float_nan_payload, chars_format::fixed, 4, \"nan\"},\r\n    {-float_nan_payload, chars_format::fixed, 4, \"-nan\"},\r\n    {1.729f, chars_format::fixed, 4, \"1.7290\"},\r\n    {-1.729f, chars_format::fixed, 4, \"-1.7290\"},\r\n\r\n    // Ryu Printf Zero\r\n    {0.0f, chars_format::fixed, 4, \"0.0000\"},\r\n    {0.0f, chars_format::fixed, 3, \"0.000\"},\r\n    {0.0f, chars_format::fixed, 2, \"0.00\"},\r\n    {0.0f, chars_format::fixed, 1, \"0.0\"},\r\n    {0.0f, chars_format::fixed, 0, \"0\"},\r\n\r\n    // Test corner cases.\r\n    {0x0.000002p-126f, chars_format::fixed, 149, // min subnormal\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000014012984643248170709237295832899161312802619418765157717570682\"\r\n        \"8388979108268586060148663818836212158203125\"},\r\n    {0x0.fffffep-126f, chars_format::fixed, 149, // max subnormal\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000117549421069244107548702944484928734882705242874589333385717453057158\"\r\n        \"8870475618904265502351336181163787841796875\"},\r\n    {0x1p-126f, chars_format::fixed, 126, // min normal\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000117549435082228750796873653722224567781866555677208752150875170627841\"\r\n        \"72594547271728515625\"},\r\n    {0x1.fffffep+127f, chars_format::fixed, 0, // max normal\r\n        \"340282346638528859811704183484516925440\"},\r\n\r\n    // Ryu Printf AllPowersOfTen\r\n    // These values test every power of ten that's within the range of floats.\r\n    {1e-44f, chars_format::fixed, 149,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000098090892502737194964661070830294129189618335931356104022994779\"\r\n        \"8722853757880102421040646731853485107421875\"},\r\n    {1e-43f, chars_format::fixed, 149,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000000994921909670620120355848004135840453208985978732326197947518481\"\r\n        \"5617516687069610270555131137371063232421875\"},\r\n    {1e-42f, chars_format::fixed, 148,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000010005271035279193886395429224690001177341070264998322610345467546\"\r\n        \"973108330377044694614596664905548095703125\"},\r\n    {1e-41f, chars_format::fixed, 144,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000099996658414218946181117343063568415128159492172308165472584392738\"\r\n        \"37549166046301252208650112152099609375\"},\r\n    {1e-40f, chars_format::fixed, 148,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000000999994610111475958152591905227349949604220526961919185041279068749\"\r\n        \"432712426283842432894743978977203369140625\"},\r\n    {1e-39f, chars_format::fixed, 146,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000010000002153053332574208756001456831092687456480096866911043660970225\"\r\n        \"6827159061458587530069053173065185546875\"},\r\n    {1e-38f, chars_format::fixed, 148,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000099999993504564039245746141539976645128551939195729831580121174560891\"\r\n        \"149363239804870318039320409297943115234375\"},\r\n    {1e-37f, chars_format::fixed, 145,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000999999991097578965450144252348949782882164643167775990861842615891642\"\r\n        \"849224041356137604452669620513916015625\"},\r\n    {1e-36f, chars_format::fixed, 143,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000010000000359391298238442905219082964481594808441361581309103473121178279\"\r\n        \"3369735600208514370024204254150390625\"},\r\n    {1e-35f, chars_format::fixed, 139,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000100000001800250948048663201408455778204855436374880527489094543362735389\"\r\n        \"990803014370612800121307373046875\"},\r\n    {1e-34f, chars_format::fixed, 136,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000001000000046701102029858885626602539647826036732368569844521988439212112353\"\r\n        \"970951517112553119659423828125\"},\r\n    {1e-33f, chars_format::fixed, 131,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000010000000237422279903610827365881541552040508374727581888171540347443055907\"\r\n        \"2061441838741302490234375\"},\r\n    {1e-32f, chars_format::fixed, 130,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000100000002374222799036108273658815415520405083747275818881715403474430559072\"\r\n        \"061441838741302490234375\"},\r\n    {1e-31f, chars_format::fixed, 126,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000999999979661189834525301187760534009369837919272799809863871978166116605279\"\r\n        \"96718883514404296875\"},\r\n    {1e-30f, chars_format::fixed, 118,\r\n        \"0.\"\r\n        \"0000000000000000000000000000010000000031710768509710513471352647538147514756461109453056224083411507308483\"\r\n        \"123779296875\"},\r\n    {1e-29f, chars_format::fixed, 117,\r\n        \"0.\"\r\n        \"0000000000000000000000000000100000000317107685097105134713526475381475147564611094530562240834115073084831\"\r\n        \"23779296875\"},\r\n    {1e-28f, chars_format::fixed, 116,\r\n        \"0.\"\r\n        \"0000000000000000000000000001000000003171076850971051347135264753814751475646110945305622408341150730848312\"\r\n        \"3779296875\"},\r\n    {1e-27f, chars_format::fixed, 112,\r\n        \"0.\"\r\n        \"0000000000000000000000000010000000272452011558114995103349890361263429573723815479979748488403856754302978\"\r\n        \"515625\"},\r\n    {1e-26f, chars_format::fixed, 109,\r\n        \"0.\"\r\n        \"0000000000000000000000000099999998872660226806678244921543018442779658661034858369021094404160976409912109\"\r\n        \"375\"},\r\n    {1e-25f, chars_format::fixed, 104,\r\n        \"0.\"\r\n        \"00000000000000000000000010000000195414813782625560981110772657866336832199749551364220678806304931640625\"},\r\n    {1e-24f, chars_format::fixed, 103,\r\n        \"0.\"\r\n        \"0000000000000000000000010000000195414813782625560981110772657866336832199749551364220678806304931640625\"},\r\n    {1e-23f, chars_format::fixed, 99,\r\n        \"0.000000000000000000000009999999998199587477372609628178631337169779413898140774108469486236572265625\"},\r\n    {1e-22f, chars_format::fixed, 97,\r\n        \"0.0000000000000000000001000000031374394956577733179287005745028427128318071481771767139434814453125\"},\r\n    {1e-21f, chars_format::fixed, 88,\r\n        \"0.0000000000000000000009999999682655225388967887463487205224055287544615566730499267578125\"},\r\n    {1e-20f, chars_format::fixed, 87,\r\n        \"0.000000000000000000009999999682655225388967887463487205224055287544615566730499267578125\"},\r\n    {1e-19f, chars_format::fixed, 86,\r\n        \"0.00000000000000000009999999682655225388967887463487205224055287544615566730499267578125\"},\r\n    {1e-18f, chars_format::fixed, 83,\r\n        \"0.00000000000000000100000004581370496574313326554328540396454627625644207000732421875\"},\r\n    {1e-17f, chars_format::fixed, 79,\r\n        \"0.0000000000000000099999998377515902426605765018763349871733225882053375244140625\"},\r\n    {1e-16f, chars_format::fixed, 77,\r\n        \"0.00000000000000010000000168623835263871646450439811815158464014530181884765625\"},\r\n    {1e-15f, chars_format::fixed, 73, \"0.0000000000000010000000036274937255387218471014421083964407444000244140625\"},\r\n    {1e-14f, chars_format::fixed, 68, \"0.00000000000000999999982451670044181213370393379591405391693115234375\"},\r\n    {1e-13f, chars_format::fixed, 67, \"0.0000000000000999999982451670044181213370393379591405391693115234375\"},\r\n    {1e-12f, chars_format::fixed, 61, \"0.0000000000009999999960041972002500187954865396022796630859375\"},\r\n    {1e-11f, chars_format::fixed, 60, \"0.000000000009999999960041972002500187954865396022796630859375\"},\r\n    {1e-10f, chars_format::fixed, 57, \"0.000000000100000001335143196001808973960578441619873046875\"},\r\n    {1e-09f, chars_format::fixed, 53, \"0.00000000099999997171806853657471947371959686279296875\"},\r\n    {1e-08f, chars_format::fixed, 50, \"0.00000000999999993922529029077850282192230224609375\"},\r\n    {1e-07f, chars_format::fixed, 47, \"0.00000010000000116860974230803549289703369140625\"},\r\n    {1e-06f, chars_format::fixed, 43, \"0.0000009999999974752427078783512115478515625\"},\r\n    {1e-05f, chars_format::fixed, 38, \"0.00000999999974737875163555145263671875\"},\r\n    {1e-04f, chars_format::fixed, 37, \"0.0000999999974737875163555145263671875\"},\r\n    {1e-03f, chars_format::fixed, 33, \"0.001000000047497451305389404296875\"},\r\n    {1e-02f, chars_format::fixed, 29, \"0.00999999977648258209228515625\"},\r\n    {1e-01f, chars_format::fixed, 27, \"0.100000001490116119384765625\"},\r\n    {1e+00f, chars_format::fixed, 0, \"1\"},\r\n    {1e+01f, chars_format::fixed, 0, \"10\"},\r\n    {1e+02f, chars_format::fixed, 0, \"100\"},\r\n    {1e+03f, chars_format::fixed, 0, \"1000\"},\r\n    {1e+04f, chars_format::fixed, 0, \"10000\"},\r\n    {1e+05f, chars_format::fixed, 0, \"100000\"},\r\n    {1e+06f, chars_format::fixed, 0, \"1000000\"},\r\n    {1e+07f, chars_format::fixed, 0, \"10000000\"},\r\n    {1e+08f, chars_format::fixed, 0, \"100000000\"},\r\n    {1e+09f, chars_format::fixed, 0, \"1000000000\"},\r\n    {1e+10f, chars_format::fixed, 0, \"10000000000\"},\r\n    {1e+11f, chars_format::fixed, 0, \"99999997952\"},\r\n    {1e+12f, chars_format::fixed, 0, \"999999995904\"},\r\n    {1e+13f, chars_format::fixed, 0, \"9999999827968\"},\r\n    {1e+14f, chars_format::fixed, 0, \"100000000376832\"},\r\n    {1e+15f, chars_format::fixed, 0, \"999999986991104\"},\r\n    {1e+16f, chars_format::fixed, 0, \"10000000272564224\"},\r\n    {1e+17f, chars_format::fixed, 0, \"99999998430674944\"},\r\n    {1e+18f, chars_format::fixed, 0, \"999999984306749440\"},\r\n    {1e+19f, chars_format::fixed, 0, \"9999999980506447872\"},\r\n    {1e+20f, chars_format::fixed, 0, \"100000002004087734272\"},\r\n    {1e+21f, chars_format::fixed, 0, \"1000000020040877342720\"},\r\n    {1e+22f, chars_format::fixed, 0, \"9999999778196308361216\"},\r\n    {1e+23f, chars_format::fixed, 0, \"99999997781963083612160\"},\r\n    {1e+24f, chars_format::fixed, 0, \"1000000013848427855085568\"},\r\n    {1e+25f, chars_format::fixed, 0, \"9999999562023526247432192\"},\r\n    {1e+26f, chars_format::fixed, 0, \"100000002537764290115403776\"},\r\n    {1e+27f, chars_format::fixed, 0, \"999999988484154753734934528\"},\r\n    {1e+28f, chars_format::fixed, 0, \"9999999442119689768320106496\"},\r\n    {1e+29f, chars_format::fixed, 0, \"100000001504746621987668885504\"},\r\n    {1e+30f, chars_format::fixed, 0, \"1000000015047466219876688855040\"},\r\n    {1e+31f, chars_format::fixed, 0, \"9999999848243207295109594873856\"},\r\n    {1e+32f, chars_format::fixed, 0, \"100000003318135351409612647563264\"},\r\n    {1e+33f, chars_format::fixed, 0, \"999999994495727286427992885035008\"},\r\n    {1e+34f, chars_format::fixed, 0, \"9999999790214767953607394487959552\"},\r\n    {1e+35f, chars_format::fixed, 0, \"100000004091847875962975319375216640\"},\r\n    {1e+36f, chars_format::fixed, 0, \"999999961690316245365415600208216064\"},\r\n    {1e+37f, chars_format::fixed, 0, \"9999999933815812510711506376257961984\"},\r\n    {1e+38f, chars_format::fixed, 0, \"99999996802856924650656260769173209088\"},\r\n\r\n    // Ryu Printf RoundToEven\r\n    {0.125f, chars_format::fixed, 3, \"0.125\"},\r\n    {0.125f, chars_format::fixed, 2, \"0.12\"},\r\n    {0.375f, chars_format::fixed, 3, \"0.375\"},\r\n    {0.375f, chars_format::fixed, 2, \"0.38\"},\r\n\r\n    // Ryu Printf RoundToEvenInteger\r\n    {2.5f, chars_format::fixed, 1, \"2.5\"},\r\n    {2.5f, chars_format::fixed, 0, \"2\"},\r\n    {3.5f, chars_format::fixed, 1, \"3.5\"},\r\n    {3.5f, chars_format::fixed, 0, \"4\"},\r\n\r\n    // Ryu Printf NonRoundToEvenScenarios\r\n    {0.748046875f, chars_format::fixed, 3, \"0.748\"},\r\n    {0.748046875f, chars_format::fixed, 2, \"0.75\"},\r\n    {0.748046875f, chars_format::fixed, 1, \"0.7\"}, // 0.75 would round to \"0.8\", but this is smaller\r\n\r\n    {0.2509765625f, chars_format::fixed, 3, \"0.251\"},\r\n    {0.2509765625f, chars_format::fixed, 2, \"0.25\"},\r\n    {0.2509765625f, chars_format::fixed, 1, \"0.3\"}, // 0.25 would round to \"0.2\", but this is larger\r\n\r\n    {0x1.000002p-2f, chars_format::fixed, 25, \"0.2500000298023223876953125\"},\r\n    {0x1.000002p-2f, chars_format::fixed, 3, \"0.250\"},\r\n    {0x1.000002p-2f, chars_format::fixed, 2, \"0.25\"},\r\n    {0x1.000002p-2f, chars_format::fixed, 1, \"0.3\"}, // 0.25 would round to \"0.2\", but this is larger (again)\r\n\r\n    // More rounding tests.\r\n    {9.5f, chars_format::fixed, 1, \"9.5\"},\r\n    {9.5f, chars_format::fixed, 0, \"10\"},\r\n    {10.5f, chars_format::fixed, 1, \"10.5\"},\r\n    {10.5f, chars_format::fixed, 0, \"10\"},\r\n\r\n    {1.241f, chars_format::fixed, 3, \"1.241\"},\r\n    {1.241f, chars_format::fixed, 1, \"1.2\"},\r\n    {1.251f, chars_format::fixed, 3, \"1.251\"},\r\n    {1.251f, chars_format::fixed, 1, \"1.3\"},\r\n    {1.261f, chars_format::fixed, 3, \"1.261\"},\r\n    {1.261f, chars_format::fixed, 1, \"1.3\"},\r\n    {1.341f, chars_format::fixed, 3, \"1.341\"},\r\n    {1.341f, chars_format::fixed, 1, \"1.3\"},\r\n    {1.351f, chars_format::fixed, 3, \"1.351\"},\r\n    {1.351f, chars_format::fixed, 1, \"1.4\"},\r\n    {1.361f, chars_format::fixed, 3, \"1.361\"},\r\n    {1.361f, chars_format::fixed, 1, \"1.4\"},\r\n\r\n    {2.41f, chars_format::fixed, 2, \"2.41\"},\r\n    {2.41f, chars_format::fixed, 0, \"2\"},\r\n    {2.51f, chars_format::fixed, 2, \"2.51\"},\r\n    {2.51f, chars_format::fixed, 0, \"3\"},\r\n    {2.61f, chars_format::fixed, 2, \"2.61\"},\r\n    {2.61f, chars_format::fixed, 0, \"3\"},\r\n    {3.41f, chars_format::fixed, 2, \"3.41\"},\r\n    {3.41f, chars_format::fixed, 0, \"3\"},\r\n    {3.51f, chars_format::fixed, 2, \"3.51\"},\r\n    {3.51f, chars_format::fixed, 0, \"4\"},\r\n    {3.61f, chars_format::fixed, 2, \"3.61\"},\r\n    {3.61f, chars_format::fixed, 0, \"4\"},\r\n\r\n    // Ryu Printf VaryingPrecision\r\n    {1.142857f, chars_format::fixed, 28, \"1.1428569555282592773437500000\"},\r\n    {1.142857f, chars_format::fixed, 27, \"1.142856955528259277343750000\"},\r\n    {1.142857f, chars_format::fixed, 26, \"1.14285695552825927734375000\"},\r\n    {1.142857f, chars_format::fixed, 25, \"1.1428569555282592773437500\"},\r\n    {1.142857f, chars_format::fixed, 24, \"1.142856955528259277343750\"},\r\n    {1.142857f, chars_format::fixed, 23, \"1.14285695552825927734375\"},\r\n    {1.142857f, chars_format::fixed, 22, \"1.1428569555282592773438\"},\r\n    {1.142857f, chars_format::fixed, 21, \"1.142856955528259277344\"},\r\n    {1.142857f, chars_format::fixed, 20, \"1.14285695552825927734\"},\r\n    {1.142857f, chars_format::fixed, 19, \"1.1428569555282592773\"},\r\n    {1.142857f, chars_format::fixed, 18, \"1.142856955528259277\"},\r\n    {1.142857f, chars_format::fixed, 17, \"1.14285695552825928\"},\r\n    {1.142857f, chars_format::fixed, 16, \"1.1428569555282593\"},\r\n    {1.142857f, chars_format::fixed, 15, \"1.142856955528259\"},\r\n    {1.142857f, chars_format::fixed, 14, \"1.14285695552826\"},\r\n    {1.142857f, chars_format::fixed, 13, \"1.1428569555283\"},\r\n    {1.142857f, chars_format::fixed, 12, \"1.142856955528\"},\r\n    {1.142857f, chars_format::fixed, 11, \"1.14285695553\"},\r\n    {1.142857f, chars_format::fixed, 10, \"1.1428569555\"},\r\n    {1.142857f, chars_format::fixed, 9, \"1.142856956\"},\r\n    {1.142857f, chars_format::fixed, 8, \"1.14285696\"},\r\n    {1.142857f, chars_format::fixed, 7, \"1.1428570\"},\r\n    {1.142857f, chars_format::fixed, 6, \"1.142857\"},\r\n    {1.142857f, chars_format::fixed, 5, \"1.14286\"},\r\n    {1.142857f, chars_format::fixed, 4, \"1.1429\"},\r\n    {1.142857f, chars_format::fixed, 3, \"1.143\"},\r\n    {1.142857f, chars_format::fixed, 2, \"1.14\"},\r\n    {1.142857f, chars_format::fixed, 1, \"1.1\"},\r\n    {1.142857f, chars_format::fixed, 0, \"1\"},\r\n\r\n    // Negative precision requests 6 digits of precision.\r\n    {1.142857f, chars_format::fixed, -1, \"1.142857\"},\r\n    {1.142857f, chars_format::fixed, -2, \"1.142857\"},\r\n    {1.142857f, chars_format::fixed, -3, \"1.142857\"},\r\n\r\n    // Ryu Printf Carrying\r\n    {0.0009f, chars_format::fixed, 4, \"0.0009\"},\r\n    {0.0009f, chars_format::fixed, 3, \"0.001\"},\r\n    {0.0029f, chars_format::fixed, 4, \"0.0029\"},\r\n    {0.0029f, chars_format::fixed, 3, \"0.003\"},\r\n    {0.0099f, chars_format::fixed, 4, \"0.0099\"},\r\n    {0.0099f, chars_format::fixed, 3, \"0.010\"},\r\n    {0.0299f, chars_format::fixed, 4, \"0.0299\"},\r\n    {0.0299f, chars_format::fixed, 3, \"0.030\"},\r\n    {0.0999f, chars_format::fixed, 4, \"0.0999\"},\r\n    {0.0999f, chars_format::fixed, 3, \"0.100\"},\r\n    {0.2999f, chars_format::fixed, 4, \"0.2999\"},\r\n    {0.2999f, chars_format::fixed, 3, \"0.300\"},\r\n    {0.9999f, chars_format::fixed, 4, \"0.9999\"},\r\n    {0.9999f, chars_format::fixed, 3, \"1.000\"},\r\n    {2.9999f, chars_format::fixed, 4, \"2.9999\"},\r\n    {2.9999f, chars_format::fixed, 3, \"3.000\"},\r\n    {9.9999f, chars_format::fixed, 4, \"9.9999\"},\r\n    {9.9999f, chars_format::fixed, 3, \"10.000\"},\r\n    {29.9999f, chars_format::fixed, 4, \"29.9999\"},\r\n    {29.9999f, chars_format::fixed, 3, \"30.000\"},\r\n    {99.9999f, chars_format::fixed, 4, \"99.9999\"},\r\n    {99.9999f, chars_format::fixed, 3, \"100.000\"},\r\n    {299.9999f, chars_format::fixed, 4, \"299.9999\"},\r\n    {299.9999f, chars_format::fixed, 3, \"300.000\"},\r\n\r\n    {0.09f, chars_format::fixed, 2, \"0.09\"},\r\n    {0.09f, chars_format::fixed, 1, \"0.1\"},\r\n    {0.29f, chars_format::fixed, 2, \"0.29\"},\r\n    {0.29f, chars_format::fixed, 1, \"0.3\"},\r\n    {0.99f, chars_format::fixed, 2, \"0.99\"},\r\n    {0.99f, chars_format::fixed, 1, \"1.0\"},\r\n    {2.99f, chars_format::fixed, 2, \"2.99\"},\r\n    {2.99f, chars_format::fixed, 1, \"3.0\"},\r\n    {9.99f, chars_format::fixed, 2, \"9.99\"},\r\n    {9.99f, chars_format::fixed, 1, \"10.0\"},\r\n    {29.99f, chars_format::fixed, 2, \"29.99\"},\r\n    {29.99f, chars_format::fixed, 1, \"30.0\"},\r\n    {99.99f, chars_format::fixed, 2, \"99.99\"},\r\n    {99.99f, chars_format::fixed, 1, \"100.0\"},\r\n    {299.99f, chars_format::fixed, 2, \"299.99\"},\r\n    {299.99f, chars_format::fixed, 1, \"300.0\"},\r\n\r\n    {0.9f, chars_format::fixed, 1, \"0.9\"},\r\n    {0.9f, chars_format::fixed, 0, \"1\"},\r\n    {2.9f, chars_format::fixed, 1, \"2.9\"},\r\n    {2.9f, chars_format::fixed, 0, \"3\"},\r\n    {9.9f, chars_format::fixed, 1, \"9.9\"},\r\n    {9.9f, chars_format::fixed, 0, \"10\"},\r\n    {29.9f, chars_format::fixed, 1, \"29.9\"},\r\n    {29.9f, chars_format::fixed, 0, \"30\"},\r\n    {99.9f, chars_format::fixed, 1, \"99.9\"},\r\n    {99.9f, chars_format::fixed, 0, \"100\"},\r\n    {299.9f, chars_format::fixed, 1, \"299.9\"},\r\n    {299.9f, chars_format::fixed, 0, \"300\"},\r\n\r\n    // Ryu Printf RoundingResultZero\r\n    {0.004f, chars_format::fixed, 3, \"0.004\"},\r\n    {0.004f, chars_format::fixed, 2, \"0.00\"},\r\n    {0.4f, chars_format::fixed, 1, \"0.4\"},\r\n    {0.4f, chars_format::fixed, 0, \"0\"},\r\n    {0.5f, chars_format::fixed, 1, \"0.5\"},\r\n    {0.5f, chars_format::fixed, 0, \"0\"},\r\n\r\n    // Ryu Printf AllBinaryExponents\r\n    // These values test every binary exponent.\r\n    // The mantissas were randomly generated.\r\n    {0x0.bafab0p-126f, chars_format::fixed, 146,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000085856660078164374052571520381239855817217629811131320365461649230225\"\r\n        \"8101698697601023013703525066375732421875\"},\r\n    {0x1.2c4906p-126f, chars_format::fixed, 149,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000137884223604447257991705553959882023830165636017936204355992973751997\"\r\n        \"2013648494879589634365402162075042724609375\"},\r\n    {0x1.da6c8cp-125f, chars_format::fixed, 147,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000435689644606144922962341034916717454461784748180572306511365470365953\"\r\n        \"68653788540314053534530103206634521484375\"},\r\n    {0x1.094fd8p-124f, chars_format::fixed, 145,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000487300980449569406486898593097235018686258578182781609022211792895361\"\r\n        \"293087574949822737835347652435302734375\"},\r\n    {0x1.1fba2ap-123f, chars_format::fixed, 146,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000001056942819182250793988103906000418825212997860175004035399177620979400\"\r\n        \"2661102041429330711252987384796142578125\"},\r\n    {0x1.05c066p-122f, chars_format::fixed, 145,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000001923046724143804860574903666495417184272104431219282642086921032167044\"\r\n        \"776084452450959361158311367034912109375\"},\r\n    {0x1.aa97aep-121f, chars_format::fixed, 144,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000006268213405227838203431757007863521825324812101203856469220875149766722\"\r\n        \"40063493291017948649823665618896484375\"},\r\n    {0x1.dd39a8p-120f, chars_format::fixed, 141,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000014024388746462477508516570165943074639858849697711014853285027082288594\"\r\n        \"08023936339304782450199127197265625\"},\r\n    {0x1.d47ee4p-119f, chars_format::fixed, 141,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000027535700468003209195416842287342046227746219166975594715835834154840644\"\r\n        \"49429979504202492535114288330078125\"},\r\n    {0x1.3d3c36p-118f, chars_format::fixed, 141,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000037290818427663765497432907740725131368928567215367442737882934305701509\"\r\n        \"99159295679419301450252532958984375\"},\r\n    {0x1.1661f4p-117f, chars_format::fixed, 139,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000065447441644065192772010189083715139205202243608571574700187600294454259\"\r\n        \"852727773250080645084381103515625\"},\r\n    {0x1.b68df4p-116f, chars_format::fixed, 138,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000206207336977375818320192367186588031181149116107584831794039036470533865\"\r\n        \"49714559805579483509063720703125\"},\r\n    {0x1.d99cbcp-115f, chars_format::fixed, 137,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000445382813514879099167344241437088992337862296399353856123689687079858501\"\r\n        \"3062620419077575206756591796875\"},\r\n    {0x1.fd046ep-114f, chars_format::fixed, 137,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000957355143513621934625335631305232671680527244248210039119495722709229923\"\r\n        \"4527672524563968181610107421875\"},\r\n    {0x1.89834cp-113f, chars_format::fixed, 135,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000001480230929779647770398330978023641189899501899250006144284413575618053471\"\r\n        \"31667076610028743743896484375\"},\r\n    {0x1.44f9f6p-112f, chars_format::fixed, 135,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000002444850777614032698558632186222413041911856813461843446368257012912827974\"\r\n        \"56005937419831752777099609375\"},\r\n    {0x1.610156p-111f, chars_format::fixed, 134,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000005311432194104638958491823018983379637847618995394862767718806989547530861\"\r\n        \"2731168977916240692138671875\"},\r\n    {0x1.1c4ce0p-110f, chars_format::fixed, 129,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000008555350741040305433153411782350510989661057055423470539198826934068620175\"\r\n        \"82170665264129638671875\"},\r\n    {0x1.c8846ap-109f, chars_format::fixed, 132,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000027475632104005746766942313987412370292282555616009485081234833825369889837\"\r\n        \"02030964195728302001953125\"},\r\n    {0x1.49aaa6p-108f, chars_format::fixed, 131,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000039682172991165697309827799919973022713504068615668209476284727932338114442\"\r\n        \"2455690801143646240234375\"},\r\n    {0x1.f5603cp-107f, chars_format::fixed, 129,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000120701861138584576157150361758540470962569680234040676814963322094342856871\"\r\n        \"66266143321990966796875\"},\r\n    {0x1.b7bbf8p-106f, chars_format::fixed, 127,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000211724341322508937840915176712265363597160619557838059749677039889093066449\"\r\n        \"277102947235107421875\"},\r\n    {0x1.6d305cp-105f, chars_format::fixed, 127,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000351664122601460292174574136500884378151845989294218826175242309517443572985\"\r\n        \"939681529998779296875\"},\r\n    {0x1.dd9944p-104f, chars_format::fixed, 126,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000919821625881433083724268012282371631728046815243377909779298740033937065163\"\r\n        \"62726688385009765625\"},\r\n    {0x1.0f4254p-103f, chars_format::fixed, 125,\r\n        \"0.\"\r\n        \"0000000000000000000000000000001044852024561729954450605502201132293228119140390439904125807757395705266389\"\r\n        \"9958133697509765625\"},\r\n    {0x1.049450p-102f, chars_format::fixed, 122,\r\n        \"0.\"\r\n        \"0000000000000000000000000000002007430259113927348388472759172849833669167623529955984951200775867619086056\"\r\n        \"9477081298828125\"},\r\n    {0x1.28d030p-101f, chars_format::fixed, 121,\r\n        \"0.\"\r\n        \"0000000000000000000000000000004573131937693259427041496124538667251427229422876784281637441154089174233376\"\r\n        \"979827880859375\"},\r\n    {0x1.28a2bep-100f, chars_format::fixed, 123,\r\n        \"0.\"\r\n        \"0000000000000000000000000000009140793594875532256935908936727717060368161903718573976784789181238011224195\"\r\n        \"36113739013671875\"},\r\n    {0x1.e674d2p-99f, chars_format::fixed, 122,\r\n        \"0.\"\r\n        \"0000000000000000000000000000029980185962354845050897219390986524441297232842758378051906120731473492924124\"\r\n        \"0024566650390625\"},\r\n    {0x1.227314p-98f, chars_format::fixed, 120,\r\n        \"0.\"\r\n        \"0000000000000000000000000000035800667869547456776694564979794758804336827210561614021067100566142471507191\"\r\n        \"65802001953125\"},\r\n    {0x1.735b6cp-97f, chars_format::fixed, 119,\r\n        \"0.\"\r\n        \"0000000000000000000000000000091546597262378319603799081529207906703837108826262575211885064163652714341878\"\r\n        \"8909912109375\"},\r\n    {0x1.ef60b4p-96f, chars_format::fixed, 118,\r\n        \"0.\"\r\n        \"0000000000000000000000000000244240085996903849216356078751341022854748745722804070812372856380534358322620\"\r\n        \"391845703125\"},\r\n    {0x1.f58d34p-95f, chars_format::fixed, 117,\r\n        \"0.\"\r\n        \"0000000000000000000000000000494568036548015750964222103779193000963396430755616983709899159293854609131813\"\r\n        \"04931640625\"},\r\n    {0x1.a9fa8ap-94f, chars_format::fixed, 117,\r\n        \"0.\"\r\n        \"0000000000000000000000000000840094794528154864080325730507983995095850536733231295194457288744160905480384\"\r\n        \"82666015625\"},\r\n    {0x1.2ebd9ap-93f, chars_format::fixed, 116,\r\n        \"0.\"\r\n        \"0000000000000000000000000001194101241497498690354073604120044306874891791320908440710013564967084676027297\"\r\n        \"9736328125\"},\r\n    {0x1.1c25bep-92f, chars_format::fixed, 115,\r\n        \"0.\"\r\n        \"0000000000000000000000000002241527991772840369420073304083191365256388471842441401093992681126110255718231\"\r\n        \"201171875\"},\r\n    {0x1.80d526p-91f, chars_format::fixed, 114,\r\n        \"0.\"\r\n        \"0000000000000000000000000006071588038765549904506806942923684386898144178454361785668425000039860606193542\"\r\n        \"48046875\"},\r\n    {0x1.16cdd0p-90f, chars_format::fixed, 110,\r\n        \"0.\"\r\n        \"0000000000000000000000000008797501615285119946834874987404311536605839433322628906353202182799577713012695\"\r\n        \"3125\"},\r\n    {0x1.be00c0p-89f, chars_format::fixed, 107,\r\n        \"0.\"\r\n        \"0000000000000000000000000028146741987560362391732368583172300827762585262448169487470295280218124389648437\"\r\n        \"5\"},\r\n    {0x1.dbe376p-88f, chars_format::fixed, 111,\r\n        \"0.\"\r\n        \"0000000000000000000000000060065575697458565955014820557088473772922162727261330417150020366534590721130371\"\r\n        \"09375\"},\r\n    {0x1.75b358p-87f, chars_format::fixed, 108,\r\n        \"0.\"\r\n        \"0000000000000000000000000094335284238393382638914933670753282739891362740358715655020205304026603698730468\"\r\n        \"75\"},\r\n    {0x1.5e56fap-86f, chars_format::fixed, 109,\r\n        \"0.\"\r\n        \"0000000000000000000000000176876373794073549186243776242822499413496518949617808402763330377638339996337890\"\r\n        \"625\"},\r\n    {0x1.1542e6p-85f, chars_format::fixed, 108,\r\n        \"0.\"\r\n        \"0000000000000000000000000279962390364982552136537973532622361314990341862873890477203531190752983093261718\"\r\n        \"75\"},\r\n    {0x1.37b7a6p-84f, chars_format::fixed, 107,\r\n        \"0.\"\r\n        \"0000000000000000000000000629508229027247503098930994487426088983880040350626927647681441158056259155273437\"\r\n        \"5\"},\r\n    {0x1.31f62ap-83f, chars_format::fixed, 106,\r\n        \"0.\"\r\n        \"000000000000000000000000123576897369666466985856753932114511864998745993560191891447175294160842895507812\"\r\n        \"5\"},\r\n    {0x1.ac3560p-82f, chars_format::fixed, 101,\r\n        \"0.00000000000000000000000034590406845628797200186450581230516131137076030199750675819814205169677734375\"},\r\n    {0x1.a7db5cp-81f, chars_format::fixed, 103,\r\n        \"0.\"\r\n        \"0000000000000000000000006847777099176331341674240101847394713956151957034990118700079619884490966796875\"},\r\n    {0x1.40189cp-80f, chars_format::fixed, 102,\r\n        \"0.000000000000000000000001034286379672715366987641733210033664035198963659922810620628297328948974609375\"},\r\n    {0x1.aad1eep-79f, chars_format::fixed, 102,\r\n        \"0.000000000000000000000002758259846499093682487211692864773559218105614121441249153576791286468505859375\"},\r\n    {0x1.49824cp-78f, chars_format::fixed, 100,\r\n        \"0.0000000000000000000000042588036474940459085811637121780459484809977510622047702781856060028076171875\"},\r\n    {0x1.955292p-77f, chars_format::fixed, 100,\r\n        \"0.0000000000000000000000104773420985315373838626628182169411331037256474019159213639795780181884765625\"},\r\n    {0x1.d8ca0cp-76f, chars_format::fixed, 98,\r\n        \"0.00000000000000000000002444263111177596802332967266437459101513507420122550684027373790740966796875\"},\r\n    {0x1.28b5aap-75f, chars_format::fixed, 98,\r\n        \"0.00000000000000000000003067905619497844072028707730390270809472941238027487997896969318389892578125\"},\r\n    {0x1.e5fda8p-74f, chars_format::fixed, 95,\r\n        \"0.00000000000000000000010050055115902033206854316793794380802129495577901252545416355133056640625\"},\r\n    {0x1.fd929cp-73f, chars_format::fixed, 95,\r\n        \"0.00000000000000000000021075432611470358337541921610390309449467594049565377645194530487060546875\"},\r\n    {0x1.c0b84cp-72f, chars_format::fixed, 94,\r\n        \"0.0000000000000000000003711724097438896357340602997067040280665395357573288492858409881591796875\"},\r\n    {0x1.5cfeaep-71f, chars_format::fixed, 94,\r\n        \"0.0000000000000000000005773635352424624465965559338086719731730767080080113373696804046630859375\"},\r\n    {0x1.bcce4ap-70f, chars_format::fixed, 93,\r\n        \"0.000000000000000000001471738991536079335112024613790339400143380998997599817812442779541015625\"},\r\n    {0x1.edf106p-69f, chars_format::fixed, 92,\r\n        \"0.00000000000000000000326863064574260634910627773444362353938430487687583081424236297607421875\"},\r\n    {0x1.30b422p-68f, chars_format::fixed, 91,\r\n        \"0.0000000000000000000040327191475944672156035895296995186232180685692583210766315460205078125\"},\r\n    {0x1.7aa8d8p-67f, chars_format::fixed, 88,\r\n        \"0.0000000000000000000100230347240102665385544432156972316505516573670320212841033935546875\"},\r\n    {0x1.4ad4e0p-66f, chars_format::fixed, 85,\r\n        \"0.0000000000000000000175140760553442509348562143578487138029231573455035686492919921875\"},\r\n    {0x1.dde636p-65f, chars_format::fixed, 88,\r\n        \"0.0000000000000000000505995524921864861016965251964971894693690046551637351512908935546875\"},\r\n    {0x1.5df870p-64f, chars_format::fixed, 84,\r\n        \"0.000000000000000000074109127331368847396687003781234892585416673682630062103271484375\"},\r\n    {0x1.c346fap-63f, chars_format::fixed, 86,\r\n        \"0.00000000000000000019112335047873604296656620434025075638828639057464897632598876953125\"},\r\n    {0x1.58d2eap-62f, chars_format::fixed, 85,\r\n        \"0.0000000000000000002920771899491385068938311721231659845443573431111872196197509765625\"},\r\n    {0x1.0d4824p-61f, chars_format::fixed, 83,\r\n        \"0.00000000000000000045618111223383324851561766710705825289551285095512866973876953125\"},\r\n    {0x1.04585cp-60f, chars_format::fixed, 82,\r\n        \"0.0000000000000000008820836917354691955064048547452415505176759324967861175537109375\"},\r\n    {0x1.55cf7ap-59f, chars_format::fixed, 82,\r\n        \"0.0000000000000000023161977389916240139687737820128887733517331071197986602783203125\"},\r\n    {0x1.1fd8ecp-58f, chars_format::fixed, 80,\r\n        \"0.00000000000000000390105904223582084021197668999292318403604440391063690185546875\"},\r\n    {0x1.0bc866p-57f, chars_format::fixed, 80,\r\n        \"0.00000000000000000725826751123333980988787395016714754092390649020671844482421875\"},\r\n    {0x1.4dfa86p-56f, chars_format::fixed, 79,\r\n        \"0.0000000000000000181050165732891247031242920595417444928898476064205169677734375\"},\r\n    {0x1.335daep-55f, chars_format::fixed, 78,\r\n        \"0.000000000000000033324681586205479543426333233213654239079914987087249755859375\"},\r\n    {0x1.5bc756p-54f, chars_format::fixed, 77,\r\n        \"0.00000000000000007541247487712833172911197632259927559061907231807708740234375\"},\r\n    {0x1.9eb052p-53f, chars_format::fixed, 76,\r\n        \"0.0000000000000001798425779915148827771409489884035792783834040164947509765625\"},\r\n    {0x1.13b6d2p-52f, chars_format::fixed, 75,\r\n        \"0.000000000000000239143897259270284301468922905087310937233269214630126953125\"},\r\n    {0x1.260438p-51f, chars_format::fixed, 72,\r\n        \"0.000000000000000510037289299151118393549353413618518970906734466552734375\"},\r\n    {0x1.9e6b44p-50f, chars_format::fixed, 72,\r\n        \"0.000000000000001437804758404521467129999479084290214814245700836181640625\"},\r\n    {0x1.89c0bcp-49f, chars_format::fixed, 71,\r\n        \"0.00000000000000273220937993773164975674916377101908437907695770263671875\"},\r\n    {0x1.e30610p-48f, chars_format::fixed, 68,\r\n        \"0.00000000000000670330015995791728133923470522859133780002593994140625\"},\r\n    {0x1.48b6e8p-47f, chars_format::fixed, 68,\r\n        \"0.00000000000000912365953728740131101204724473063834011554718017578125\"},\r\n    {0x1.41382ep-46f, chars_format::fixed, 69,\r\n        \"0.000000000000017831261573081173821275768887062440626323223114013671875\"},\r\n    {0x1.383b8ep-45f, chars_format::fixed, 68,\r\n        \"0.00000000000003466478609693256218715617933412431739270687103271484375\"},\r\n    {0x1.1e6564p-44f, chars_format::fixed, 66, \"0.000000000000063592699357274684590635160930105485022068023681640625\"},\r\n    {0x1.c35e62p-43f, chars_format::fixed, 66, \"0.000000000000200447961722950707130763703389675356447696685791015625\"},\r\n    {0x1.2a2f4ep-42f, chars_format::fixed, 65, \"0.00000000000026484129017449731247069166784058324992656707763671875\"},\r\n    {0x1.69fae2p-41f, chars_format::fixed, 64, \"0.0000000000006430056682417417679431537180789746344089508056640625\"},\r\n    {0x1.4ccefep-40f, chars_format::fixed, 63, \"0.000000000001182373535017766652543969030375592410564422607421875\"},\r\n    {0x1.aa9bf6p-39f, chars_format::fixed, 62, \"0.00000000000303124083993189241681420753593556582927703857421875\"},\r\n    {0x1.3b9744p-38f, chars_format::fixed, 60, \"0.000000000004484816164274096905728583806194365024566650390625\"},\r\n    {0x1.b2fc6ap-37f, chars_format::fixed, 60, \"0.000000000012363045483188006556929394719190895557403564453125\"},\r\n    {0x1.7bc418p-36f, chars_format::fixed, 57, \"0.000000000021587197307493255493682227097451686859130859375\"},\r\n    {0x1.f4a74cp-35f, chars_format::fixed, 57, \"0.000000000056917713597837149563929415307939052581787109375\"},\r\n    {0x1.89f248p-34f, chars_format::fixed, 55, \"0.0000000000895730434269381703416001982986927032470703125\"},\r\n    {0x1.60ac54p-33f, chars_format::fixed, 55, \"0.0000000001603771837555001411601551808416843414306640625\"},\r\n    {0x1.2f6d0ep-32f, chars_format::fixed, 55, \"0.0000000002759643347172158200919511727988719940185546875\"},\r\n    {0x1.748684p-31f, chars_format::fixed, 53, \"0.00000000067761984912095840627443976700305938720703125\"},\r\n    {0x1.b4fa00p-30f, chars_format::fixed, 45, \"0.000000001589711473570787347853183746337890625\"},\r\n    {0x1.c204d8p-29f, chars_format::fixed, 50, \"0.00000000327431859403759517590515315532684326171875\"},\r\n    {0x1.50029ep-28f, chars_format::fixed, 51, \"0.000000004889592286616561978007666766643524169921875\"},\r\n    {0x1.56cf38p-27f, chars_format::fixed, 48, \"0.000000009977068060607052757404744625091552734375\"},\r\n    {0x1.0b5a5cp-26f, chars_format::fixed, 48, \"0.000000015561990807100301026366651058197021484375\"},\r\n    {0x1.fc8250p-25f, chars_format::fixed, 45, \"0.000000059198242752245278097689151763916015625\"},\r\n    {0x1.c66674p-24f, chars_format::fixed, 46, \"0.0000001057982927932243910618126392364501953125\"},\r\n    {0x1.4da57ep-23f, chars_format::fixed, 46, \"0.0000001553662372089092968963086605072021484375\"},\r\n    {0x1.4fcdacp-22f, chars_format::fixed, 44, \"0.00000031274129241865011863410472869873046875\"},\r\n    {0x1.5eaff4p-21f, chars_format::fixed, 43, \"0.0000006532060297104180790483951568603515625\"},\r\n    {0x1.d2f696p-20f, chars_format::fixed, 43, \"0.0000017395735767422593198716640472412109375\"},\r\n    {0x1.e4400cp-19f, chars_format::fixed, 41, \"0.00000360794501830241642892360687255859375\"},\r\n    {0x1.03e624p-18f, chars_format::fixed, 40, \"0.0000038727966966689564287662506103515625\"},\r\n    {0x1.bdb65ep-17f, chars_format::fixed, 40, \"0.0000132832637973478995263576507568359375\"},\r\n    {0x1.57fb84p-16f, chars_format::fixed, 38, \"0.00002050295370281673967838287353515625\"},\r\n    {0x1.fd2d62p-15f, chars_format::fixed, 38, \"0.00006069866140023805201053619384765625\"},\r\n    {0x1.ca0c58p-14f, chars_format::fixed, 35, \"0.00010920720524154603481292724609375\"},\r\n    {0x1.988f70p-13f, chars_format::fixed, 33, \"0.000194816733710467815399169921875\"},\r\n    {0x1.032dd6p-12f, chars_format::fixed, 35, \"0.00024717240012250840663909912109375\"},\r\n    {0x1.571b08p-11f, chars_format::fixed, 32, \"0.00065442197956144809722900390625\"},\r\n    {0x1.53bedap-10f, chars_format::fixed, 33, \"0.001296026282943785190582275390625\"},\r\n    {0x1.ab2f36p-9f, chars_format::fixed, 32, \"0.00325915846042335033416748046875\"},\r\n    {0x1.7293dap-8f, chars_format::fixed, 31, \"0.0056545645929872989654541015625\"},\r\n    {0x1.825eb6p-7f, chars_format::fixed, 30, \"0.011791075579822063446044921875\"},\r\n    {0x1.f45aa0p-6f, chars_format::fixed, 25, \"0.0305391848087310791015625\"},\r\n    {0x1.854d96p-5f, chars_format::fixed, 28, \"0.0475223474204540252685546875\"},\r\n    {0x1.5650cep-4f, chars_format::fixed, 27, \"0.083573155105113983154296875\"},\r\n    {0x1.03acdap-3f, chars_format::fixed, 26, \"0.12679453194141387939453125\"},\r\n    {0x1.6b9416p-2f, chars_format::fixed, 25, \"0.3550570905208587646484375\"},\r\n    {0x1.a8544ap-1f, chars_format::fixed, 24, \"0.828768074512481689453125\"},\r\n    {0x1.0693f6p+0f, chars_format::fixed, 23, \"1.02569520473480224609375\"},\r\n    {0x1.b9476ep+1f, chars_format::fixed, 22, \"3.4474923610687255859375\"},\r\n    {0x1.3cb752p+2f, chars_format::fixed, 21, \"4.948688983917236328125\"},\r\n    {0x1.bb8a64p+3f, chars_format::fixed, 19, \"13.8606433868408203125\"},\r\n    {0x1.1de906p+4f, chars_format::fixed, 19, \"17.8693904876708984375\"},\r\n    {0x1.d8e834p+5f, chars_format::fixed, 17, \"59.11338043212890625\"},\r\n    {0x1.27cd38p+6f, chars_format::fixed, 15, \"73.950408935546875\"},\r\n    {0x1.3cdcd6p+7f, chars_format::fixed, 16, \"158.4313201904296875\"},\r\n    {0x1.392656p+8f, chars_format::fixed, 15, \"313.149749755859375\"},\r\n    {0x1.c96aa8p+9f, chars_format::fixed, 12, \"914.833251953125\"},\r\n    {0x1.28b6b2p+10f, chars_format::fixed, 13, \"1186.8546142578125\"},\r\n    {0x1.786090p+11f, chars_format::fixed, 9, \"3011.017578125\"},\r\n    {0x1.79c6f6p+12f, chars_format::fixed, 11, \"6044.43505859375\"},\r\n    {0x1.ef1840p+13f, chars_format::fixed, 5, \"15843.03125\"},\r\n    {0x1.539fd0p+14f, chars_format::fixed, 6, \"21735.953125\"},\r\n    {0x1.b31804p+15f, chars_format::fixed, 7, \"55692.0078125\"},\r\n    {0x1.ad4a9cp+16f, chars_format::fixed, 6, \"109898.609375\"},\r\n    {0x1.4c43a6p+17f, chars_format::fixed, 6, \"170119.296875\"},\r\n    {0x1.5598c6p+18f, chars_format::fixed, 5, \"349795.09375\"},\r\n    {0x1.73695ep+19f, chars_format::fixed, 4, \"760650.9375\"},\r\n    {0x1.234f2ap+20f, chars_format::fixed, 3, \"1193202.625\"},\r\n    {0x1.0a4cc8p+21f, chars_format::fixed, 0, \"2181529\"},\r\n    {0x1.90abd2p+22f, chars_format::fixed, 1, \"6564596.5\"},\r\n    {0x1.62dde8p+23f, chars_format::fixed, 0, \"11628276\"},\r\n    {0x1.9e3a8cp+24f, chars_format::fixed, 0, \"27146892\"},\r\n    {0x1.53a3eap+25f, chars_format::fixed, 0, \"44517332\"},\r\n    {0x1.41a1cep+26f, chars_format::fixed, 0, \"84313912\"},\r\n    {0x1.8fdda4p+27f, chars_format::fixed, 0, \"209644832\"},\r\n    {0x1.d0322ap+28f, chars_format::fixed, 0, \"486744736\"},\r\n    {0x1.cdb764p+29f, chars_format::fixed, 0, \"968289408\"},\r\n    {0x1.7620d8p+30f, chars_format::fixed, 0, \"1569207808\"},\r\n    {0x1.c18df6p+31f, chars_format::fixed, 0, \"3771136768\"},\r\n    {0x1.240cf8p+32f, chars_format::fixed, 0, \"4899796992\"},\r\n    {0x1.81669ap+33f, chars_format::fixed, 0, \"12931904512\"},\r\n    {0x1.3be30cp+34f, chars_format::fixed, 0, \"21198811136\"},\r\n    {0x1.d1e6e4p+35f, chars_format::fixed, 0, \"62532296704\"},\r\n    {0x1.06b274p+36f, chars_format::fixed, 0, \"70517211136\"},\r\n    {0x1.a74284p+37f, chars_format::fixed, 0, \"227235889152\"},\r\n    {0x1.9fd3e6p+38f, chars_format::fixed, 0, \"446491623424\"},\r\n    {0x1.e2cec4p+39f, chars_format::fixed, 0, \"1036821594112\"},\r\n    {0x1.3d5d32p+40f, chars_format::fixed, 0, \"1363068190720\"},\r\n    {0x1.accccap+41f, chars_format::fixed, 0, \"3683363586048\"},\r\n    {0x1.a120ccp+42f, chars_format::fixed, 0, \"7166206410752\"},\r\n    {0x1.55a028p+43f, chars_format::fixed, 0, \"11738166591488\"},\r\n    {0x1.035296p+44f, chars_format::fixed, 0, \"17820513468416\"},\r\n    {0x1.22d1aap+45f, chars_format::fixed, 0, \"39969859043328\"},\r\n    {0x1.eb8eaep+46f, chars_format::fixed, 0, \"135118253457408\"},\r\n    {0x1.490d0ep+47f, chars_format::fixed, 0, \"180897697497088\"},\r\n    {0x1.9da088p+48f, chars_format::fixed, 0, \"454787778740224\"},\r\n    {0x1.e7fab4p+49f, chars_format::fixed, 0, \"1073077848899584\"},\r\n    {0x1.98a534p+50f, chars_format::fixed, 0, \"1797241144606720\"},\r\n    {0x1.93aeeap+51f, chars_format::fixed, 0, \"3550835489374208\"},\r\n    {0x1.3df680p+52f, chars_format::fixed, 0, \"5593662327095296\"},\r\n    {0x1.c763f6p+53f, chars_format::fixed, 0, \"16022627827056640\"},\r\n    {0x1.8b669ep+54f, chars_format::fixed, 0, \"27823861147893760\"},\r\n    {0x1.73e5b6p+55f, chars_format::fixed, 0, \"52339893103230976\"},\r\n    {0x1.a13d18p+56f, chars_format::fixed, 0, \"117442238576852992\"},\r\n    {0x1.a0797ep+57f, chars_format::fixed, 0, \"234454344768946176\"},\r\n    {0x1.c07a80p+58f, chars_format::fixed, 0, \"504941918963105792\"},\r\n    {0x1.729388p+59f, chars_format::fixed, 0, \"834463629662224384\"},\r\n    {0x1.edfb70p+60f, chars_format::fixed, 0, \"2224697951572197376\"},\r\n    {0x1.3d6782p+61f, chars_format::fixed, 0, \"2858924021141995520\"},\r\n    {0x1.b121e8p+62f, chars_format::fixed, 0, \"7802620494837972992\"},\r\n    {0x1.0efc5ap+63f, chars_format::fixed, 0, \"9763290520209063936\"},\r\n    {0x1.b7dba0p+64f, chars_format::fixed, 0, \"31695102724410441728\"},\r\n    {0x1.ec2306p+65f, chars_format::fixed, 0, \"70924388975830368256\"},\r\n    {0x1.2e2d28p+66f, chars_format::fixed, 0, \"87096415015485308928\"},\r\n    {0x1.e02208p+67f, chars_format::fixed, 0, \"276777792668052750336\"},\r\n    {0x1.402636p+68f, chars_format::fixed, 0, \"369106968238077509632\"},\r\n    {0x1.11f97cp+69f, chars_format::fixed, 0, \"631742296991907971072\"},\r\n    {0x1.74db2ap+70f, chars_format::fixed, 0, \"1719495307615820316672\"},\r\n    {0x1.94a32ap+71f, chars_format::fixed, 0, \"3732120907777931476992\"},\r\n    {0x1.c272dcp+72f, chars_format::fixed, 0, \"8309311323384498356224\"},\r\n    {0x1.36ca40p+73f, chars_format::fixed, 0, \"11466128622488263852032\"},\r\n    {0x1.5f6fbep+74f, chars_format::fixed, 0, \"25931436172223350571008\"},\r\n    {0x1.95ec4ep+75f, chars_format::fixed, 0, \"59903671176748022628352\"},\r\n    {0x1.6b3912p+76f, chars_format::fixed, 0, \"107204487170660958732288\"},\r\n    {0x1.10992ap+77f, chars_format::fixed, 0, \"160913632700346331561984\"},\r\n    {0x1.74a25ep+78f, chars_format::fixed, 0, \"439928869395322133020672\"},\r\n    {0x1.43f462p+79f, chars_format::fixed, 0, \"764916220582548125777920\"},\r\n    {0x1.f12ca2p+80f, chars_format::fixed, 0, \"2347839472055691035803648\"},\r\n    {0x1.2b7f18p+81f, chars_format::fixed, 0, \"2828664088515283884441600\"},\r\n    {0x1.a40704p+82f, chars_format::fixed, 0, \"7934093352976572433301504\"},\r\n    {0x1.35d5f8p+83f, chars_format::fixed, 0, \"11705266159821935293235200\"},\r\n    {0x1.c2c9d2p+84f, chars_format::fixed, 0, \"34060605519118462894473216\"},\r\n    {0x1.47bf20p+85f, chars_format::fixed, 0, \"49527663163502775133798400\"},\r\n    {0x1.60b728p+86f, chars_format::fixed, 0, \"106601704860119390738186240\"},\r\n    {0x1.3354c8p+87f, chars_format::fixed, 0, \"185770297377533474371534848\"},\r\n    {0x1.e9e512p+88f, chars_format::fixed, 0, \"592246479757524141957185536\"},\r\n    {0x1.c4b6cap+89f, chars_format::fixed, 0, \"1094595334815995103451021312\"},\r\n    {0x1.799cb8p+90f, chars_format::fixed, 0, \"1826020469467809704300249088\"},\r\n    {0x1.1afa36p+91f, chars_format::fixed, 0, \"2736789351009782551090823168\"},\r\n    {0x1.80c214p+92f, chars_format::fixed, 0, \"7442304364233212615194574848\"},\r\n    {0x1.657890p+93f, chars_format::fixed, 0, \"13828987453168434783077793792\"},\r\n    {0x1.5ce17cp+94f, chars_format::fixed, 0, \"26993344325171312829134798848\"},\r\n    {0x1.3f1e9ap+95f, chars_format::fixed, 0, \"49381356576017938861904625664\"},\r\n    {0x1.874612p+96f, chars_format::fixed, 0, \"121093348650115637567232671744\"},\r\n    {0x1.5f4d5ep+97f, chars_format::fixed, 0, \"217445539275703670631001227264\"},\r\n    {0x1.45b1bep+98f, chars_format::fixed, 0, \"403190021246562727728269754368\"},\r\n    {0x1.a570f4p+99f, chars_format::fixed, 0, \"1043437928672039460753056464896\"},\r\n    {0x1.f5106ep+100f, chars_format::fixed, 0, \"2481149635102733266542145830912\"},\r\n    {0x1.d84424p+101f, chars_format::fixed, 0, \"4677097651091265616934539886592\"},\r\n    {0x1.3d6c56p+102f, chars_format::fixed, 0, \"6287213966425746785671183335424\"},\r\n    {0x1.9d8cf0p+103f, chars_format::fixed, 0, \"16382424580981433623378525159424\"},\r\n    {0x1.e2e73ep+104f, chars_format::fixed, 0, \"38259540322544957537972440268800\"},\r\n    {0x1.2d6594p+105f, chars_format::fixed, 0, \"47758227647613648865431576903680\"},\r\n    {0x1.ce43bap+106f, chars_format::fixed, 0, \"146497485749802409635393442938880\"},\r\n    {0x1.b3ea00p+107f, chars_format::fixed, 0, \"276293361488025452794185737306112\"},\r\n    {0x1.03a052p+108f, chars_format::fixed, 0, \"329115373194929392757058784198656\"},\r\n    {0x1.6f59e0p+109f, chars_format::fixed, 0, \"931345619455766569116232623063040\"},\r\n    {0x1.05adacp+110f, chars_format::fixed, 0, \"1326867152522435745601434087849984\"},\r\n    {0x1.2cdef0p+111f, chars_format::fixed, 0, \"3051192904788012466473218045116416\"},\r\n    {0x1.e81552p+112f, chars_format::fixed, 0, \"9899505055765620068271358482579456\"},\r\n    {0x1.bfa8f4p+113f, chars_format::fixed, 0, \"18159245876954178992833811110166528\"},\r\n    {0x1.a14810p+114f, chars_format::fixed, 0, \"33853896736735722962455354188759040\"},\r\n    {0x1.f18b10p+115f, chars_format::fixed, 0, \"80731001914916160681187088757948416\"},\r\n    {0x1.8d6e30p+116f, chars_format::fixed, 0, \"128973545052908058560090358153216000\"},\r\n    {0x1.9480c2p+117f, chars_format::fixed, 0, \"262537431192608192877759864086986752\"},\r\n    {0x1.60975cp+118f, chars_format::fixed, 0, \"457689606761340509948952337218273280\"},\r\n    {0x1.ab1bb2p+119f, chars_format::fixed, 0, \"1108836243133298765768030079592431616\"},\r\n    {0x1.6a0c80p+120f, chars_format::fixed, 0, \"1879864992909653247408339011818749952\"},\r\n    {0x1.2cac2cp+121f, chars_format::fixed, 0, \"3122362236102854007005843883842076672\"},\r\n    {0x1.0baaf6p+122f, chars_format::fixed, 0, \"5559243043957593079267046257728684032\"},\r\n    {0x1.098282p+123f, chars_format::fixed, 0, \"11028845443370647144636654644992409600\"},\r\n    {0x1.122f8ap+124f, chars_format::fixed, 0, \"22778456735621461875293910785310326784\"},\r\n    {0x1.57f4c6p+125f, chars_format::fixed, 0, \"57149517363101270672263900542030315520\"},\r\n    {0x1.05e028p+126f, chars_format::fixed, 0, \"87023098173139747570875357950241669120\"},\r\n    {0x1.9d8424p+127f, chars_format::fixed, 0, \"274828637805621292108186801756142829568\"},\r\n\r\n    // Test the maximum mantissa, which generates the most digits for each exponent.\r\n    {0x0.fffffep-126f, chars_format::fixed, 149,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000117549421069244107548702944484928734882705242874589333385717453057158\"\r\n        \"8870475618904265502351336181163787841796875\"},\r\n    {0x1.fffffep-126f, chars_format::fixed, 149,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000235098856151472858345576598207153302664571798551798085536592623685000\"\r\n        \"6129930346077117064851336181163787841796875\"},\r\n    {0x1.fffffep-125f, chars_format::fixed, 148,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000470197712302945716691153196414306605329143597103596171073185247370001\"\r\n        \"225986069215423412970267236232757568359375\"},\r\n    {0x1.fffffep-124f, chars_format::fixed, 147,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000000940395424605891433382306392828613210658287194207192342146370494740002\"\r\n        \"45197213843084682594053447246551513671875\"},\r\n    {0x1.fffffep-123f, chars_format::fixed, 146,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000001880790849211782866764612785657226421316574388414384684292740989480004\"\r\n        \"9039442768616936518810689449310302734375\"},\r\n    {0x1.fffffep-122f, chars_format::fixed, 145,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000003761581698423565733529225571314452842633148776828769368585481978960009\"\r\n        \"807888553723387303762137889862060546875\"},\r\n    {0x1.fffffep-121f, chars_format::fixed, 144,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000007523163396847131467058451142628905685266297553657538737170963957920019\"\r\n        \"61577710744677460752427577972412109375\"},\r\n    {0x1.fffffep-120f, chars_format::fixed, 143,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000015046326793694262934116902285257811370532595107315077474341927915840039\"\r\n        \"2315542148935492150485515594482421875\"},\r\n    {0x1.fffffep-119f, chars_format::fixed, 142,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000030092653587388525868233804570515622741065190214630154948683855831680078\"\r\n        \"463108429787098430097103118896484375\"},\r\n    {0x1.fffffep-118f, chars_format::fixed, 141,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000060185307174777051736467609141031245482130380429260309897367711663360156\"\r\n        \"92621685957419686019420623779296875\"},\r\n    {0x1.fffffep-117f, chars_format::fixed, 140,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000120370614349554103472935218282062490964260760858520619794735423326720313\"\r\n        \"8524337191483937203884124755859375\"},\r\n    {0x1.fffffep-116f, chars_format::fixed, 139,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000240741228699108206945870436564124981928521521717041239589470846653440627\"\r\n        \"704867438296787440776824951171875\"},\r\n    {0x1.fffffep-115f, chars_format::fixed, 138,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000481482457398216413891740873128249963857043043434082479178941693306881255\"\r\n        \"40973487659357488155364990234375\"},\r\n    {0x1.fffffep-114f, chars_format::fixed, 137,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000000962964914796432827783481746256499927714086086868164958357883386613762510\"\r\n        \"8194697531871497631072998046875\"},\r\n    {0x1.fffffep-113f, chars_format::fixed, 136,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000001925929829592865655566963492512999855428172173736329916715766773227525021\"\r\n        \"638939506374299526214599609375\"},\r\n    {0x1.fffffep-112f, chars_format::fixed, 135,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000003851859659185731311133926985025999710856344347472659833431533546455050043\"\r\n        \"27787901274859905242919921875\"},\r\n    {0x1.fffffep-111f, chars_format::fixed, 134,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000007703719318371462622267853970051999421712688694945319666863067092910100086\"\r\n        \"5557580254971981048583984375\"},\r\n    {0x1.fffffep-110f, chars_format::fixed, 133,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000015407438636742925244535707940103998843425377389890639333726134185820200173\"\r\n        \"111516050994396209716796875\"},\r\n    {0x1.fffffep-109f, chars_format::fixed, 132,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000030814877273485850489071415880207997686850754779781278667452268371640400346\"\r\n        \"22303210198879241943359375\"},\r\n    {0x1.fffffep-108f, chars_format::fixed, 131,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000061629754546971700978142831760415995373701509559562557334904536743280800692\"\r\n        \"4460642039775848388671875\"},\r\n    {0x1.fffffep-107f, chars_format::fixed, 130,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000123259509093943401956285663520831990747403019119125114669809073486561601384\"\r\n        \"892128407955169677734375\"},\r\n    {0x1.fffffep-106f, chars_format::fixed, 129,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000246519018187886803912571327041663981494806038238250229339618146973123202769\"\r\n        \"78425681591033935546875\"},\r\n    {0x1.fffffep-105f, chars_format::fixed, 128,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000493038036375773607825142654083327962989612076476500458679236293946246405539\"\r\n        \"5685136318206787109375\"},\r\n    {0x1.fffffep-104f, chars_format::fixed, 127,\r\n        \"0.\"\r\n        \"0000000000000000000000000000000986076072751547215650285308166655925979224152953000917358472587892492811079\"\r\n        \"137027263641357421875\"},\r\n    {0x1.fffffep-103f, chars_format::fixed, 126,\r\n        \"0.\"\r\n        \"0000000000000000000000000000001972152145503094431300570616333311851958448305906001834716945175784985622158\"\r\n        \"27405452728271484375\"},\r\n    {0x1.fffffep-102f, chars_format::fixed, 125,\r\n        \"0.\"\r\n        \"0000000000000000000000000000003944304291006188862601141232666623703916896611812003669433890351569971244316\"\r\n        \"5481090545654296875\"},\r\n    {0x1.fffffep-101f, chars_format::fixed, 124,\r\n        \"0.\"\r\n        \"0000000000000000000000000000007888608582012377725202282465333247407833793223624007338867780703139942488633\"\r\n        \"096218109130859375\"},\r\n    {0x1.fffffep-100f, chars_format::fixed, 123,\r\n        \"0.\"\r\n        \"0000000000000000000000000000015777217164024755450404564930666494815667586447248014677735561406279884977266\"\r\n        \"19243621826171875\"},\r\n    {0x1.fffffep-99f, chars_format::fixed, 122,\r\n        \"0.\"\r\n        \"0000000000000000000000000000031554434328049510900809129861332989631335172894496029355471122812559769954532\"\r\n        \"3848724365234375\"},\r\n    {0x1.fffffep-98f, chars_format::fixed, 121,\r\n        \"0.\"\r\n        \"0000000000000000000000000000063108868656099021801618259722665979262670345788992058710942245625119539909064\"\r\n        \"769744873046875\"},\r\n    {0x1.fffffep-97f, chars_format::fixed, 120,\r\n        \"0.\"\r\n        \"0000000000000000000000000000126217737312198043603236519445331958525340691577984117421884491250239079818129\"\r\n        \"53948974609375\"},\r\n    {0x1.fffffep-96f, chars_format::fixed, 119,\r\n        \"0.\"\r\n        \"0000000000000000000000000000252435474624396087206473038890663917050681383155968234843768982500478159636259\"\r\n        \"0789794921875\"},\r\n    {0x1.fffffep-95f, chars_format::fixed, 118,\r\n        \"0.\"\r\n        \"0000000000000000000000000000504870949248792174412946077781327834101362766311936469687537965000956319272518\"\r\n        \"157958984375\"},\r\n    {0x1.fffffep-94f, chars_format::fixed, 117,\r\n        \"0.\"\r\n        \"0000000000000000000000000001009741898497584348825892155562655668202725532623872939375075930001912638545036\"\r\n        \"31591796875\"},\r\n    {0x1.fffffep-93f, chars_format::fixed, 116,\r\n        \"0.\"\r\n        \"0000000000000000000000000002019483796995168697651784311125311336405451065247745878750151860003825277090072\"\r\n        \"6318359375\"},\r\n    {0x1.fffffep-92f, chars_format::fixed, 115,\r\n        \"0.\"\r\n        \"0000000000000000000000000004038967593990337395303568622250622672810902130495491757500303720007650554180145\"\r\n        \"263671875\"},\r\n    {0x1.fffffep-91f, chars_format::fixed, 114,\r\n        \"0.\"\r\n        \"0000000000000000000000000008077935187980674790607137244501245345621804260990983515000607440015301108360290\"\r\n        \"52734375\"},\r\n    {0x1.fffffep-90f, chars_format::fixed, 113,\r\n        \"0.\"\r\n        \"0000000000000000000000000016155870375961349581214274489002490691243608521981967030001214880030602216720581\"\r\n        \"0546875\"},\r\n    {0x1.fffffep-89f, chars_format::fixed, 112,\r\n        \"0.\"\r\n        \"0000000000000000000000000032311740751922699162428548978004981382487217043963934060002429760061204433441162\"\r\n        \"109375\"},\r\n    {0x1.fffffep-88f, chars_format::fixed, 111,\r\n        \"0.\"\r\n        \"0000000000000000000000000064623481503845398324857097956009962764974434087927868120004859520122408866882324\"\r\n        \"21875\"},\r\n    {0x1.fffffep-87f, chars_format::fixed, 110,\r\n        \"0.\"\r\n        \"0000000000000000000000000129246963007690796649714195912019925529948868175855736240009719040244817733764648\"\r\n        \"4375\"},\r\n    {0x1.fffffep-86f, chars_format::fixed, 109,\r\n        \"0.\"\r\n        \"0000000000000000000000000258493926015381593299428391824039851059897736351711472480019438080489635467529296\"\r\n        \"875\"},\r\n    {0x1.fffffep-85f, chars_format::fixed, 108,\r\n        \"0.\"\r\n        \"0000000000000000000000000516987852030763186598856783648079702119795472703422944960038876160979270935058593\"\r\n        \"75\"},\r\n    {0x1.fffffep-84f, chars_format::fixed, 107,\r\n        \"0.\"\r\n        \"0000000000000000000000001033975704061526373197713567296159404239590945406845889920077752321958541870117187\"\r\n        \"5\"},\r\n    {0x1.fffffep-83f, chars_format::fixed, 106,\r\n        \"0.\"\r\n        \"000000000000000000000000206795140812305274639542713459231880847918189081369177984015550464391708374023437\"\r\n        \"5\"},\r\n    {0x1.fffffep-82f, chars_format::fixed, 105,\r\n        \"0.\"\r\n        \"00000000000000000000000041359028162461054927908542691846376169583637816273835596803110092878341674804687\"\r\n        \"5\"},\r\n    {0x1.fffffep-81f, chars_format::fixed, 104,\r\n        \"0.\"\r\n        \"00000000000000000000000082718056324922109855817085383692752339167275632547671193606220185756683349609375\"},\r\n    {0x1.fffffep-80f, chars_format::fixed, 103,\r\n        \"0.\"\r\n        \"0000000000000000000000016543611264984421971163417076738550467833455126509534238721244037151336669921875\"},\r\n    {0x1.fffffep-79f, chars_format::fixed, 102,\r\n        \"0.000000000000000000000003308722252996884394232683415347710093566691025301906847744248807430267333984375\"},\r\n    {0x1.fffffep-78f, chars_format::fixed, 101,\r\n        \"0.00000000000000000000000661744450599376878846536683069542018713338205060381369548849761486053466796875\"},\r\n    {0x1.fffffep-77f, chars_format::fixed, 100,\r\n        \"0.0000000000000000000000132348890119875375769307336613908403742667641012076273909769952297210693359375\"},\r\n    {0x1.fffffep-76f, chars_format::fixed, 99,\r\n        \"0.000000000000000000000026469778023975075153861467322781680748533528202415254781953990459442138671875\"},\r\n    {0x1.fffffep-75f, chars_format::fixed, 98,\r\n        \"0.00000000000000000000005293955604795015030772293464556336149706705640483050956390798091888427734375\"},\r\n    {0x1.fffffep-74f, chars_format::fixed, 97,\r\n        \"0.0000000000000000000001058791120959003006154458692911267229941341128096610191278159618377685546875\"},\r\n    {0x1.fffffep-73f, chars_format::fixed, 96,\r\n        \"0.000000000000000000000211758224191800601230891738582253445988268225619322038255631923675537109375\"},\r\n    {0x1.fffffep-72f, chars_format::fixed, 95,\r\n        \"0.00000000000000000000042351644838360120246178347716450689197653645123864407651126384735107421875\"},\r\n    {0x1.fffffep-71f, chars_format::fixed, 94,\r\n        \"0.0000000000000000000008470328967672024049235669543290137839530729024772881530225276947021484375\"},\r\n    {0x1.fffffep-70f, chars_format::fixed, 93,\r\n        \"0.000000000000000000001694065793534404809847133908658027567906145804954576306045055389404296875\"},\r\n    {0x1.fffffep-69f, chars_format::fixed, 92,\r\n        \"0.00000000000000000000338813158706880961969426781731605513581229160990915261209011077880859375\"},\r\n    {0x1.fffffep-68f, chars_format::fixed, 91,\r\n        \"0.0000000000000000000067762631741376192393885356346321102716245832198183052241802215576171875\"},\r\n    {0x1.fffffep-67f, chars_format::fixed, 90,\r\n        \"0.000000000000000000013552526348275238478777071269264220543249166439636610448360443115234375\"},\r\n    {0x1.fffffep-66f, chars_format::fixed, 89,\r\n        \"0.00000000000000000002710505269655047695755414253852844108649833287927322089672088623046875\"},\r\n    {0x1.fffffep-65f, chars_format::fixed, 88,\r\n        \"0.0000000000000000000542101053931009539151082850770568821729966657585464417934417724609375\"},\r\n    {0x1.fffffep-64f, chars_format::fixed, 87,\r\n        \"0.000000000000000000108420210786201907830216570154113764345993331517092883586883544921875\"},\r\n    {0x1.fffffep-63f, chars_format::fixed, 86,\r\n        \"0.00000000000000000021684042157240381566043314030822752869198666303418576717376708984375\"},\r\n    {0x1.fffffep-62f, chars_format::fixed, 85,\r\n        \"0.0000000000000000004336808431448076313208662806164550573839733260683715343475341796875\"},\r\n    {0x1.fffffep-61f, chars_format::fixed, 84,\r\n        \"0.000000000000000000867361686289615262641732561232910114767946652136743068695068359375\"},\r\n    {0x1.fffffep-60f, chars_format::fixed, 83,\r\n        \"0.00000000000000000173472337257923052528346512246582022953589330427348613739013671875\"},\r\n    {0x1.fffffep-59f, chars_format::fixed, 82,\r\n        \"0.0000000000000000034694467451584610505669302449316404590717866085469722747802734375\"},\r\n    {0x1.fffffep-58f, chars_format::fixed, 81,\r\n        \"0.000000000000000006938893490316922101133860489863280918143573217093944549560546875\"},\r\n    {0x1.fffffep-57f, chars_format::fixed, 80,\r\n        \"0.00000000000000001387778698063384420226772097972656183628714643418788909912109375\"},\r\n    {0x1.fffffep-56f, chars_format::fixed, 79,\r\n        \"0.0000000000000000277555739612676884045354419594531236725742928683757781982421875\"},\r\n    {0x1.fffffep-55f, chars_format::fixed, 78,\r\n        \"0.000000000000000055511147922535376809070883918906247345148585736751556396484375\"},\r\n    {0x1.fffffep-54f, chars_format::fixed, 77,\r\n        \"0.00000000000000011102229584507075361814176783781249469029717147350311279296875\"},\r\n    {0x1.fffffep-53f, chars_format::fixed, 76,\r\n        \"0.0000000000000002220445916901415072362835356756249893805943429470062255859375\"},\r\n    {0x1.fffffep-52f, chars_format::fixed, 75,\r\n        \"0.000000000000000444089183380283014472567071351249978761188685894012451171875\"},\r\n    {0x1.fffffep-51f, chars_format::fixed, 74,\r\n        \"0.00000000000000088817836676056602894513414270249995752237737178802490234375\"},\r\n    {0x1.fffffep-50f, chars_format::fixed, 73,\r\n        \"0.0000000000000017763567335211320578902682854049999150447547435760498046875\"},\r\n    {0x1.fffffep-49f, chars_format::fixed, 72,\r\n        \"0.000000000000003552713467042264115780536570809999830089509487152099609375\"},\r\n    {0x1.fffffep-48f, chars_format::fixed, 71,\r\n        \"0.00000000000000710542693408452823156107314161999966017901897430419921875\"},\r\n    {0x1.fffffep-47f, chars_format::fixed, 70,\r\n        \"0.0000000000000142108538681690564631221462832399993203580379486083984375\"},\r\n    {0x1.fffffep-46f, chars_format::fixed, 69,\r\n        \"0.000000000000028421707736338112926244292566479998640716075897216796875\"},\r\n    {0x1.fffffep-45f, chars_format::fixed, 68,\r\n        \"0.00000000000005684341547267622585248858513295999728143215179443359375\"},\r\n    {0x1.fffffep-44f, chars_format::fixed, 67, \"0.0000000000001136868309453524517049771702659199945628643035888671875\"},\r\n    {0x1.fffffep-43f, chars_format::fixed, 66, \"0.000000000000227373661890704903409954340531839989125728607177734375\"},\r\n    {0x1.fffffep-42f, chars_format::fixed, 65, \"0.00000000000045474732378140980681990868106367997825145721435546875\"},\r\n    {0x1.fffffep-41f, chars_format::fixed, 64, \"0.0000000000009094946475628196136398173621273599565029144287109375\"},\r\n    {0x1.fffffep-40f, chars_format::fixed, 63, \"0.000000000001818989295125639227279634724254719913005828857421875\"},\r\n    {0x1.fffffep-39f, chars_format::fixed, 62, \"0.00000000000363797859025127845455926944850943982601165771484375\"},\r\n    {0x1.fffffep-38f, chars_format::fixed, 61, \"0.0000000000072759571805025569091185388970188796520233154296875\"},\r\n    {0x1.fffffep-37f, chars_format::fixed, 60, \"0.000000000014551914361005113818237077794037759304046630859375\"},\r\n    {0x1.fffffep-36f, chars_format::fixed, 59, \"0.00000000002910382872201022763647415558807551860809326171875\"},\r\n    {0x1.fffffep-35f, chars_format::fixed, 58, \"0.0000000000582076574440204552729483111761510372161865234375\"},\r\n    {0x1.fffffep-34f, chars_format::fixed, 57, \"0.000000000116415314888040910545896622352302074432373046875\"},\r\n    {0x1.fffffep-33f, chars_format::fixed, 56, \"0.00000000023283062977608182109179324470460414886474609375\"},\r\n    {0x1.fffffep-32f, chars_format::fixed, 55, \"0.0000000004656612595521636421835864894092082977294921875\"},\r\n    {0x1.fffffep-31f, chars_format::fixed, 54, \"0.000000000931322519104327284367172978818416595458984375\"},\r\n    {0x1.fffffep-30f, chars_format::fixed, 53, \"0.00000000186264503820865456873434595763683319091796875\"},\r\n    {0x1.fffffep-29f, chars_format::fixed, 52, \"0.0000000037252900764173091374686919152736663818359375\"},\r\n    {0x1.fffffep-28f, chars_format::fixed, 51, \"0.000000007450580152834618274937383830547332763671875\"},\r\n    {0x1.fffffep-27f, chars_format::fixed, 50, \"0.00000001490116030566923654987476766109466552734375\"},\r\n    {0x1.fffffep-26f, chars_format::fixed, 49, \"0.0000000298023206113384730997495353221893310546875\"},\r\n    {0x1.fffffep-25f, chars_format::fixed, 48, \"0.000000059604641222676946199499070644378662109375\"},\r\n    {0x1.fffffep-24f, chars_format::fixed, 47, \"0.00000011920928244535389239899814128875732421875\"},\r\n    {0x1.fffffep-23f, chars_format::fixed, 46, \"0.0000002384185648907077847979962825775146484375\"},\r\n    {0x1.fffffep-22f, chars_format::fixed, 45, \"0.000000476837129781415569595992565155029296875\"},\r\n    {0x1.fffffep-21f, chars_format::fixed, 44, \"0.00000095367425956283113919198513031005859375\"},\r\n    {0x1.fffffep-20f, chars_format::fixed, 43, \"0.0000019073485191256622783839702606201171875\"},\r\n    {0x1.fffffep-19f, chars_format::fixed, 42, \"0.000003814697038251324556767940521240234375\"},\r\n    {0x1.fffffep-18f, chars_format::fixed, 41, \"0.00000762939407650264911353588104248046875\"},\r\n    {0x1.fffffep-17f, chars_format::fixed, 40, \"0.0000152587881530052982270717620849609375\"},\r\n    {0x1.fffffep-16f, chars_format::fixed, 39, \"0.000030517576306010596454143524169921875\"},\r\n    {0x1.fffffep-15f, chars_format::fixed, 38, \"0.00006103515261202119290828704833984375\"},\r\n    {0x1.fffffep-14f, chars_format::fixed, 37, \"0.0001220703052240423858165740966796875\"},\r\n    {0x1.fffffep-13f, chars_format::fixed, 36, \"0.000244140610448084771633148193359375\"},\r\n    {0x1.fffffep-12f, chars_format::fixed, 35, \"0.00048828122089616954326629638671875\"},\r\n    {0x1.fffffep-11f, chars_format::fixed, 34, \"0.0009765624417923390865325927734375\"},\r\n    {0x1.fffffep-10f, chars_format::fixed, 33, \"0.001953124883584678173065185546875\"},\r\n    {0x1.fffffep-9f, chars_format::fixed, 32, \"0.00390624976716935634613037109375\"},\r\n    {0x1.fffffep-8f, chars_format::fixed, 31, \"0.0078124995343387126922607421875\"},\r\n    {0x1.fffffep-7f, chars_format::fixed, 30, \"0.015624999068677425384521484375\"},\r\n    {0x1.fffffep-6f, chars_format::fixed, 29, \"0.03124999813735485076904296875\"},\r\n    {0x1.fffffep-5f, chars_format::fixed, 28, \"0.0624999962747097015380859375\"},\r\n    {0x1.fffffep-4f, chars_format::fixed, 27, \"0.124999992549419403076171875\"},\r\n    {0x1.fffffep-3f, chars_format::fixed, 26, \"0.24999998509883880615234375\"},\r\n    {0x1.fffffep-2f, chars_format::fixed, 25, \"0.4999999701976776123046875\"},\r\n    {0x1.fffffep-1f, chars_format::fixed, 24, \"0.999999940395355224609375\"},\r\n    {0x1.fffffep+0f, chars_format::fixed, 23, \"1.99999988079071044921875\"},\r\n    {0x1.fffffep+1f, chars_format::fixed, 22, \"3.9999997615814208984375\"},\r\n    {0x1.fffffep+2f, chars_format::fixed, 21, \"7.999999523162841796875\"},\r\n    {0x1.fffffep+3f, chars_format::fixed, 20, \"15.99999904632568359375\"},\r\n    {0x1.fffffep+4f, chars_format::fixed, 19, \"31.9999980926513671875\"},\r\n    {0x1.fffffep+5f, chars_format::fixed, 18, \"63.999996185302734375\"},\r\n    {0x1.fffffep+6f, chars_format::fixed, 17, \"127.99999237060546875\"},\r\n    {0x1.fffffep+7f, chars_format::fixed, 16, \"255.9999847412109375\"},\r\n    {0x1.fffffep+8f, chars_format::fixed, 15, \"511.999969482421875\"},\r\n    {0x1.fffffep+9f, chars_format::fixed, 14, \"1023.99993896484375\"},\r\n    {0x1.fffffep+10f, chars_format::fixed, 13, \"2047.9998779296875\"},\r\n    {0x1.fffffep+11f, chars_format::fixed, 12, \"4095.999755859375\"},\r\n    {0x1.fffffep+12f, chars_format::fixed, 11, \"8191.99951171875\"},\r\n    {0x1.fffffep+13f, chars_format::fixed, 10, \"16383.9990234375\"},\r\n    {0x1.fffffep+14f, chars_format::fixed, 9, \"32767.998046875\"},\r\n    {0x1.fffffep+15f, chars_format::fixed, 8, \"65535.99609375\"},\r\n    {0x1.fffffep+16f, chars_format::fixed, 7, \"131071.9921875\"},\r\n    {0x1.fffffep+17f, chars_format::fixed, 6, \"262143.984375\"},\r\n    {0x1.fffffep+18f, chars_format::fixed, 5, \"524287.96875\"},\r\n    {0x1.fffffep+19f, chars_format::fixed, 4, \"1048575.9375\"},\r\n    {0x1.fffffep+20f, chars_format::fixed, 3, \"2097151.875\"},\r\n    {0x1.fffffep+21f, chars_format::fixed, 2, \"4194303.75\"},\r\n    {0x1.fffffep+22f, chars_format::fixed, 1, \"8388607.5\"},\r\n    {0x1.fffffep+23f, chars_format::fixed, 0, \"16777215\"},\r\n    {0x1.fffffep+24f, chars_format::fixed, 0, \"33554430\"},\r\n    {0x1.fffffep+25f, chars_format::fixed, 0, \"67108860\"},\r\n    {0x1.fffffep+26f, chars_format::fixed, 0, \"134217720\"},\r\n    {0x1.fffffep+27f, chars_format::fixed, 0, \"268435440\"},\r\n    {0x1.fffffep+28f, chars_format::fixed, 0, \"536870880\"},\r\n    {0x1.fffffep+29f, chars_format::fixed, 0, \"1073741760\"},\r\n    {0x1.fffffep+30f, chars_format::fixed, 0, \"2147483520\"},\r\n    {0x1.fffffep+31f, chars_format::fixed, 0, \"4294967040\"},\r\n    {0x1.fffffep+32f, chars_format::fixed, 0, \"8589934080\"},\r\n    {0x1.fffffep+33f, chars_format::fixed, 0, \"17179868160\"},\r\n    {0x1.fffffep+34f, chars_format::fixed, 0, \"34359736320\"},\r\n    {0x1.fffffep+35f, chars_format::fixed, 0, \"68719472640\"},\r\n    {0x1.fffffep+36f, chars_format::fixed, 0, \"137438945280\"},\r\n    {0x1.fffffep+37f, chars_format::fixed, 0, \"274877890560\"},\r\n    {0x1.fffffep+38f, chars_format::fixed, 0, \"549755781120\"},\r\n    {0x1.fffffep+39f, chars_format::fixed, 0, \"1099511562240\"},\r\n    {0x1.fffffep+40f, chars_format::fixed, 0, \"2199023124480\"},\r\n    {0x1.fffffep+41f, chars_format::fixed, 0, \"4398046248960\"},\r\n    {0x1.fffffep+42f, chars_format::fixed, 0, \"8796092497920\"},\r\n    {0x1.fffffep+43f, chars_format::fixed, 0, \"17592184995840\"},\r\n    {0x1.fffffep+44f, chars_format::fixed, 0, \"35184369991680\"},\r\n    {0x1.fffffep+45f, chars_format::fixed, 0, \"70368739983360\"},\r\n    {0x1.fffffep+46f, chars_format::fixed, 0, \"140737479966720\"},\r\n    {0x1.fffffep+47f, chars_format::fixed, 0, \"281474959933440\"},\r\n    {0x1.fffffep+48f, chars_format::fixed, 0, \"562949919866880\"},\r\n    {0x1.fffffep+49f, chars_format::fixed, 0, \"1125899839733760\"},\r\n    {0x1.fffffep+50f, chars_format::fixed, 0, \"2251799679467520\"},\r\n    {0x1.fffffep+51f, chars_format::fixed, 0, \"4503599358935040\"},\r\n    {0x1.fffffep+52f, chars_format::fixed, 0, \"9007198717870080\"},\r\n    {0x1.fffffep+53f, chars_format::fixed, 0, \"18014397435740160\"},\r\n    {0x1.fffffep+54f, chars_format::fixed, 0, \"36028794871480320\"},\r\n    {0x1.fffffep+55f, chars_format::fixed, 0, \"72057589742960640\"},\r\n    {0x1.fffffep+56f, chars_format::fixed, 0, \"144115179485921280\"},\r\n    {0x1.fffffep+57f, chars_format::fixed, 0, \"288230358971842560\"},\r\n    {0x1.fffffep+58f, chars_format::fixed, 0, \"576460717943685120\"},\r\n    {0x1.fffffep+59f, chars_format::fixed, 0, \"1152921435887370240\"},\r\n    {0x1.fffffep+60f, chars_format::fixed, 0, \"2305842871774740480\"},\r\n    {0x1.fffffep+61f, chars_format::fixed, 0, \"4611685743549480960\"},\r\n    {0x1.fffffep+62f, chars_format::fixed, 0, \"9223371487098961920\"},\r\n    {0x1.fffffep+63f, chars_format::fixed, 0, \"18446742974197923840\"},\r\n    {0x1.fffffep+64f, chars_format::fixed, 0, \"36893485948395847680\"},\r\n    {0x1.fffffep+65f, chars_format::fixed, 0, \"73786971896791695360\"},\r\n    {0x1.fffffep+66f, chars_format::fixed, 0, \"147573943793583390720\"},\r\n    {0x1.fffffep+67f, chars_format::fixed, 0, \"295147887587166781440\"},\r\n    {0x1.fffffep+68f, chars_format::fixed, 0, \"590295775174333562880\"},\r\n    {0x1.fffffep+69f, chars_format::fixed, 0, \"1180591550348667125760\"},\r\n    {0x1.fffffep+70f, chars_format::fixed, 0, \"2361183100697334251520\"},\r\n    {0x1.fffffep+71f, chars_format::fixed, 0, \"4722366201394668503040\"},\r\n    {0x1.fffffep+72f, chars_format::fixed, 0, \"9444732402789337006080\"},\r\n    {0x1.fffffep+73f, chars_format::fixed, 0, \"18889464805578674012160\"},\r\n    {0x1.fffffep+74f, chars_format::fixed, 0, \"37778929611157348024320\"},\r\n    {0x1.fffffep+75f, chars_format::fixed, 0, \"75557859222314696048640\"},\r\n    {0x1.fffffep+76f, chars_format::fixed, 0, \"151115718444629392097280\"},\r\n    {0x1.fffffep+77f, chars_format::fixed, 0, \"302231436889258784194560\"},\r\n    {0x1.fffffep+78f, chars_format::fixed, 0, \"604462873778517568389120\"},\r\n    {0x1.fffffep+79f, chars_format::fixed, 0, \"1208925747557035136778240\"},\r\n    {0x1.fffffep+80f, chars_format::fixed, 0, \"2417851495114070273556480\"},\r\n    {0x1.fffffep+81f, chars_format::fixed, 0, \"4835702990228140547112960\"},\r\n    {0x1.fffffep+82f, chars_format::fixed, 0, \"9671405980456281094225920\"},\r\n    {0x1.fffffep+83f, chars_format::fixed, 0, \"19342811960912562188451840\"},\r\n    {0x1.fffffep+84f, chars_format::fixed, 0, \"38685623921825124376903680\"},\r\n    {0x1.fffffep+85f, chars_format::fixed, 0, \"77371247843650248753807360\"},\r\n    {0x1.fffffep+86f, chars_format::fixed, 0, \"154742495687300497507614720\"},\r\n    {0x1.fffffep+87f, chars_format::fixed, 0, \"309484991374600995015229440\"},\r\n    {0x1.fffffep+88f, chars_format::fixed, 0, \"618969982749201990030458880\"},\r\n    {0x1.fffffep+89f, chars_format::fixed, 0, \"1237939965498403980060917760\"},\r\n    {0x1.fffffep+90f, chars_format::fixed, 0, \"2475879930996807960121835520\"},\r\n    {0x1.fffffep+91f, chars_format::fixed, 0, \"4951759861993615920243671040\"},\r\n    {0x1.fffffep+92f, chars_format::fixed, 0, \"9903519723987231840487342080\"},\r\n    {0x1.fffffep+93f, chars_format::fixed, 0, \"19807039447974463680974684160\"},\r\n    {0x1.fffffep+94f, chars_format::fixed, 0, \"39614078895948927361949368320\"},\r\n    {0x1.fffffep+95f, chars_format::fixed, 0, \"79228157791897854723898736640\"},\r\n    {0x1.fffffep+96f, chars_format::fixed, 0, \"158456315583795709447797473280\"},\r\n    {0x1.fffffep+97f, chars_format::fixed, 0, \"316912631167591418895594946560\"},\r\n    {0x1.fffffep+98f, chars_format::fixed, 0, \"633825262335182837791189893120\"},\r\n    {0x1.fffffep+99f, chars_format::fixed, 0, \"1267650524670365675582379786240\"},\r\n    {0x1.fffffep+100f, chars_format::fixed, 0, \"2535301049340731351164759572480\"},\r\n    {0x1.fffffep+101f, chars_format::fixed, 0, \"5070602098681462702329519144960\"},\r\n    {0x1.fffffep+102f, chars_format::fixed, 0, \"10141204197362925404659038289920\"},\r\n    {0x1.fffffep+103f, chars_format::fixed, 0, \"20282408394725850809318076579840\"},\r\n    {0x1.fffffep+104f, chars_format::fixed, 0, \"40564816789451701618636153159680\"},\r\n    {0x1.fffffep+105f, chars_format::fixed, 0, \"81129633578903403237272306319360\"},\r\n    {0x1.fffffep+106f, chars_format::fixed, 0, \"162259267157806806474544612638720\"},\r\n    {0x1.fffffep+107f, chars_format::fixed, 0, \"324518534315613612949089225277440\"},\r\n    {0x1.fffffep+108f, chars_format::fixed, 0, \"649037068631227225898178450554880\"},\r\n    {0x1.fffffep+109f, chars_format::fixed, 0, \"1298074137262454451796356901109760\"},\r\n    {0x1.fffffep+110f, chars_format::fixed, 0, \"2596148274524908903592713802219520\"},\r\n    {0x1.fffffep+111f, chars_format::fixed, 0, \"5192296549049817807185427604439040\"},\r\n    {0x1.fffffep+112f, chars_format::fixed, 0, \"10384593098099635614370855208878080\"},\r\n    {0x1.fffffep+113f, chars_format::fixed, 0, \"20769186196199271228741710417756160\"},\r\n    {0x1.fffffep+114f, chars_format::fixed, 0, \"41538372392398542457483420835512320\"},\r\n    {0x1.fffffep+115f, chars_format::fixed, 0, \"83076744784797084914966841671024640\"},\r\n    {0x1.fffffep+116f, chars_format::fixed, 0, \"166153489569594169829933683342049280\"},\r\n    {0x1.fffffep+117f, chars_format::fixed, 0, \"332306979139188339659867366684098560\"},\r\n    {0x1.fffffep+118f, chars_format::fixed, 0, \"664613958278376679319734733368197120\"},\r\n    {0x1.fffffep+119f, chars_format::fixed, 0, \"1329227916556753358639469466736394240\"},\r\n    {0x1.fffffep+120f, chars_format::fixed, 0, \"2658455833113506717278938933472788480\"},\r\n    {0x1.fffffep+121f, chars_format::fixed, 0, \"5316911666227013434557877866945576960\"},\r\n    {0x1.fffffep+122f, chars_format::fixed, 0, \"10633823332454026869115755733891153920\"},\r\n    {0x1.fffffep+123f, chars_format::fixed, 0, \"21267646664908053738231511467782307840\"},\r\n    {0x1.fffffep+124f, chars_format::fixed, 0, \"42535293329816107476463022935564615680\"},\r\n    {0x1.fffffep+125f, chars_format::fixed, 0, \"85070586659632214952926045871129231360\"},\r\n    {0x1.fffffep+126f, chars_format::fixed, 0, \"170141173319264429905852091742258462720\"},\r\n    {0x1.fffffep+127f, chars_format::fixed, 0, \"340282346638528859811704183484516925440\"},\r\n};\r\n\r\n#endif // FLOAT_FIXED_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/float_from_chars_test_cases.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef FLOAT_FROM_CHARS_TEST_CASES_HPP\r\n#define FLOAT_FROM_CHARS_TEST_CASES_HPP\r\n\r\n#include <charconv>\r\n#include <cstddef>\r\n#include <system_error>\r\nusing namespace std;\r\n\r\ninline constexpr FloatFromCharsTestCase float_from_chars_test_cases[] = {\r\n    {\"1.a0000400\", chars_format::hex, 10, errc{}, 0x1.a00004p0f}, // exact\r\n    {\"1.a0000401\", chars_format::hex, 10, errc{}, 0x1.a00004p0f}, // below midpoint, round down\r\n    {\"1.a0000500\", chars_format::hex, 10, errc{}, 0x1.a00004p0f}, // midpoint, round down to even\r\n    {\"1.a0000501\", chars_format::hex, 10, errc{}, 0x1.a00006p0f}, // above midpoint, round up\r\n    {\"1.a0000600\", chars_format::hex, 10, errc{}, 0x1.a00006p0f}, // exact\r\n    {\"1.a0000601\", chars_format::hex, 10, errc{}, 0x1.a00006p0f}, // below midpoint, round down\r\n    {\"1.a0000700\", chars_format::hex, 10, errc{}, 0x1.a00008p0f}, // midpoint, round up to even\r\n    {\"1.a0000701\", chars_format::hex, 10, errc{}, 0x1.a00008p0f}, // above midpoint, round up\r\n\r\n    {\"1.0000040\", chars_format::hex, 9, errc{}, 0x1.000004p0f}, // exact\r\n    {\"1.0000041\", chars_format::hex, 9, errc{}, 0x1.000004p0f}, // below midpoint, round down\r\n    {\"1.0000050\", chars_format::hex, 9, errc{}, 0x1.000004p0f}, // midpoint, round down to even\r\n    {\"1.0000051\", chars_format::hex, 9, errc{}, 0x1.000006p0f}, // above midpoint, round up\r\n    {\"1.0000060\", chars_format::hex, 9, errc{}, 0x1.000006p0f}, // exact\r\n    {\"1.0000061\", chars_format::hex, 9, errc{}, 0x1.000006p0f}, // below midpoint, round down\r\n    {\"1.0000070\", chars_format::hex, 9, errc{}, 0x1.000008p0f}, // midpoint, round up to even\r\n    {\"1.0000071\", chars_format::hex, 9, errc{}, 0x1.000008p0f}, // above midpoint, round up\r\n\r\n    {\"1.0000002384185791015625000000\", chars_format::general, 30, errc{}, 0x1.000004p0f}, // exact\r\n    {\"1.0000002421438694000244140625\", chars_format::general, 30, errc{}, 0x1.000004p0f}, // below midpoint, round down\r\n    {\"1.0000002980232238769531249999\", chars_format::general, 30, errc{}, 0x1.000004p0f}, // below midpoint, round down\r\n    {\"1.0000002980232238769531250000\", chars_format::general, 30, errc{},\r\n        0x1.000004p0f}, // midpoint, round down to even\r\n    {\"1.0000002980232238769531250001\", chars_format::general, 30, errc{}, 0x1.000006p0f}, // above midpoint, round up\r\n    {\"1.0000003017485141754150390625\", chars_format::general, 30, errc{}, 0x1.000006p0f}, // above midpoint, round up\r\n    {\"1.0000003576278686523437500000\", chars_format::general, 30, errc{}, 0x1.000006p0f}, // exact\r\n    {\"1.0000003613531589508056640625\", chars_format::general, 30, errc{}, 0x1.000006p0f}, // below midpoint, round down\r\n    {\"1.0000004172325134277343749999\", chars_format::general, 30, errc{}, 0x1.000006p0f}, // below midpoint, round down\r\n    {\"1.0000004172325134277343750000\", chars_format::general, 30, errc{}, 0x1.000008p0f}, // midpoint, round up to even\r\n    {\"1.0000004172325134277343750001\", chars_format::general, 30, errc{}, 0x1.000008p0f}, // above midpoint, round up\r\n    {\"1.0000004209578037261962890625\", chars_format::general, 30, errc{}, 0x1.000008p0f}, // above midpoint, round up\r\n\r\n    // VSO-838635 \"<charconv>: from_chars() mishandles certain subnormals\"\r\n    // This bug didn't actually affect float, but we should have similar test cases.\r\n    // These values change on half-ulp boundaries:\r\n    // 1 * 2^-150 ~= 7.01e-46 (half-ulp between zero and min subnormal)\r\n    // 2 * 2^-150 ~= 1.40e-45 (min subnormal)\r\n    // 3 * 2^-150 ~= 2.10e-45 (half-ulp between min subnormal and next subnormal)\r\n    // 4 * 2^-150 ~= 2.80e-45 (next subnormal)\r\n    {\"6.\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666\"\r\n     \"6666666666666666666e-46\",\r\n        chars_format::scientific, 1006, errc::result_out_of_range, 0x0.000000p+0f},\r\n    {\"7.\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777\"\r\n     \"7777777777777777777e-46\",\r\n        chars_format::scientific, 1006, errc{}, 0x0.000002p-126f},\r\n    {\"8.\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888\"\r\n     \"8888888888888888888e-46\",\r\n        chars_format::scientific, 1006, errc{}, 0x0.000002p-126f},\r\n    {\"9.\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999\"\r\n     \"9999999999999999999e-46\",\r\n        chars_format::scientific, 1006, errc{}, 0x0.000002p-126f},\r\n    {\"1.\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\"\r\n     \"1111111111111111111e-45\",\r\n        chars_format::scientific, 1006, errc{}, 0x0.000002p-126f},\r\n    {\"2.\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\"\r\n     \"2222222222222222222e-45\",\r\n        chars_format::scientific, 1006, errc{}, 0x0.000004p-126f},\r\n\r\n    // VSO-733765 \"<charconv>: [Feedback] double std::from_chars behavior on exponent out of range\"\r\n    // LWG-3081 \"Floating point from_chars API does not distinguish between overflow and underflow\"\r\n    // These test cases exercise every overflow/underflow codepath.\r\n    {\"1e+1000\", chars_format::scientific, 7, errc::result_out_of_range, float_inf},\r\n    {\"1e-1000\", chars_format::scientific, 7, errc::result_out_of_range, 0.0f},\r\n    {\"1.ffffffp+127\", chars_format::hex, 13, errc::result_out_of_range, float_inf},\r\n    {\"1e+2000\", chars_format::scientific, 7, errc::result_out_of_range, float_inf},\r\n    {\"1e-2000\", chars_format::scientific, 7, errc::result_out_of_range, 0.0f},\r\n    {\"1e+9999\", chars_format::scientific, 7, errc::result_out_of_range, float_inf},\r\n    {\"1e-9999\", chars_format::scientific, 7, errc::result_out_of_range, 0.0f},\r\n    {\"10e+5199\", chars_format::scientific, 8, errc::result_out_of_range, float_inf},\r\n    {\"0.001e-5199\", chars_format::scientific, 11, errc::result_out_of_range, 0.0f},\r\n\r\n    // GH-931 \"<charconv>: hex from_chars(\\\"0.fffffffffffff8p-1022\\\") is incorrect\"\r\n    // Test cases for values close to std::numeric_limits<float>::min() and std::numeric_limits<float>::max()\r\n    {\"7.fffffp-129\", chars_format::hex, 12, errc{}, 0x0.fffffep-126f},\r\n    {\"8.00000p-129\", chars_format::hex, 12, errc{}, 0x1.000000p-126f},\r\n\r\n    {\"0.fffffep-126\", chars_format::hex, 13, errc{}, 0x0.fffffep-126f},\r\n    {\"0.ffffffp-126\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n    {\"1.000000p-126\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n\r\n    {\"1.fffffcp-127\", chars_format::hex, 13, errc{}, 0x0.fffffep-126f},\r\n    {\"1.fffffdp-127\", chars_format::hex, 13, errc{}, 0x0.fffffep-126f},\r\n    {\"1.fffffep-127\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n    {\"1.ffffffp-127\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n    {\"2.000000p-127\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n\r\n    {\"3.fffff8p-128\", chars_format::hex, 13, errc{}, 0x0.fffffep-126f},\r\n    {\"3.fffff9p-128\", chars_format::hex, 13, errc{}, 0x0.fffffep-126f},\r\n    {\"3.fffffbp-128\", chars_format::hex, 13, errc{}, 0x0.fffffep-126f},\r\n    {\"3.fffffcp-128\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n    {\"3.fffffdp-128\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n    {\"3.fffffep-128\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n    {\"3.ffffffp-128\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n    {\"4.000000p-128\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n\r\n    {\"7.fffff0p-129\", chars_format::hex, 13, errc{}, 0x0.fffffep-126f},\r\n    {\"7.fffff1p-129\", chars_format::hex, 13, errc{}, 0x0.fffffep-126f},\r\n    {\"7.fffff7p-129\", chars_format::hex, 13, errc{}, 0x0.fffffep-126f},\r\n    {\"7.fffff8p-129\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n    {\"7.fffff9p-129\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n    {\"7.fffffbp-129\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n    {\"7.fffffcp-129\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n    {\"7.fffffdp-129\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n    {\"7.ffffffp-129\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n    {\"8.000000p-129\", chars_format::hex, 13, errc{}, 0x1.000000p-126f},\r\n\r\n    {\"0.fffffe0p-126\", chars_format::hex, 14, errc{}, 0x0.fffffep-126f},\r\n    {\"0.fffffe1p-126\", chars_format::hex, 14, errc{}, 0x0.fffffep-126f},\r\n    {\"0.fffffefp-126\", chars_format::hex, 14, errc{}, 0x0.fffffep-126f},\r\n    {\"0.ffffff0p-126\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"0.ffffff1p-126\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"0.ffffff7p-126\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"0.ffffff8p-126\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"0.ffffff9p-126\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"0.fffffffp-126\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"1.0000000p-126\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n\r\n    {\"1.fffffc0p-127\", chars_format::hex, 14, errc{}, 0x0.fffffep-126f},\r\n    {\"1.fffffc1p-127\", chars_format::hex, 14, errc{}, 0x0.fffffep-126f},\r\n    {\"1.fffffdfp-127\", chars_format::hex, 14, errc{}, 0x0.fffffep-126f},\r\n    {\"1.fffffe0p-127\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"1.fffffe1p-127\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"1.fffffefp-127\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"1.ffffff0p-127\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"1.ffffff1p-127\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"1.fffffffp-127\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"2.0000000p-127\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n\r\n    {\"3.fffff80p-128\", chars_format::hex, 14, errc{}, 0x0.fffffep-126f},\r\n    {\"3.fffff81p-128\", chars_format::hex, 14, errc{}, 0x0.fffffep-126f},\r\n    {\"3.fffffbfp-128\", chars_format::hex, 14, errc{}, 0x0.fffffep-126f},\r\n    {\"3.fffffc0p-128\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"3.fffffc1p-128\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"3.fffffdfp-128\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"3.fffffe0p-128\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"3.fffffe1p-128\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"3.fffffffp-128\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n    {\"4.0000000p-128\", chars_format::hex, 14, errc{}, 0x1.000000p-126f},\r\n\r\n    {\"0.ffffffp+128\", chars_format::hex, 13, errc{}, 0x1.fffffep+127f},\r\n    {\"1.000000p+128\", chars_format::hex, 13, errc::result_out_of_range, float_inf},\r\n\r\n    {\"1.fffffep+127\", chars_format::hex, 13, errc{}, 0x1.fffffep+127f},\r\n    {\"1.ffffffp+127\", chars_format::hex, 13, errc::result_out_of_range, float_inf},\r\n    {\"2.000000p+127\", chars_format::hex, 13, errc::result_out_of_range, float_inf},\r\n\r\n    {\"3.fffffcp+126\", chars_format::hex, 13, errc{}, 0x1.fffffep+127f},\r\n    {\"3.fffffdp+126\", chars_format::hex, 13, errc{}, 0x1.fffffep+127f},\r\n    {\"3.fffffep+126\", chars_format::hex, 13, errc::result_out_of_range, float_inf},\r\n    {\"3.ffffffp+126\", chars_format::hex, 13, errc::result_out_of_range, float_inf},\r\n    {\"4.000000p+126\", chars_format::hex, 13, errc::result_out_of_range, float_inf},\r\n\r\n    {\"7.fffff8p+125\", chars_format::hex, 13, errc{}, 0x1.fffffep+127f},\r\n    {\"7.fffff9p+125\", chars_format::hex, 13, errc{}, 0x1.fffffep+127f},\r\n    {\"7.fffffbp+125\", chars_format::hex, 13, errc{}, 0x1.fffffep+127f},\r\n    {\"7.fffffcp+125\", chars_format::hex, 13, errc::result_out_of_range, float_inf},\r\n    {\"7.fffffdp+125\", chars_format::hex, 13, errc::result_out_of_range, float_inf},\r\n    {\"7.ffffffp+125\", chars_format::hex, 13, errc::result_out_of_range, float_inf},\r\n    {\"8.000000p+125\", chars_format::hex, 13, errc::result_out_of_range, float_inf},\r\n\r\n    {\"0.ffffff0p+128\", chars_format::hex, 14, errc{}, 0x1.fffffep+127f},\r\n    {\"0.ffffff1p+128\", chars_format::hex, 14, errc{}, 0x1.fffffep+127f},\r\n    {\"0.ffffff7p+128\", chars_format::hex, 14, errc{}, 0x1.fffffep+127f},\r\n    {\"0.ffffff8p+128\", chars_format::hex, 14, errc::result_out_of_range, float_inf},\r\n    {\"0.ffffff9p+128\", chars_format::hex, 14, errc::result_out_of_range, float_inf},\r\n    {\"0.fffffffp+128\", chars_format::hex, 14, errc::result_out_of_range, float_inf},\r\n    {\"1.0000000p+128\", chars_format::hex, 14, errc::result_out_of_range, float_inf},\r\n\r\n    {\"1.fffffe0p+127\", chars_format::hex, 14, errc{}, 0x1.fffffep+127f},\r\n    {\"1.fffffe1p+127\", chars_format::hex, 14, errc{}, 0x1.fffffep+127f},\r\n    {\"1.fffffefp+127\", chars_format::hex, 14, errc{}, 0x1.fffffep+127f},\r\n    {\"1.ffffff0p+127\", chars_format::hex, 14, errc::result_out_of_range, float_inf},\r\n    {\"1.ffffff1p+127\", chars_format::hex, 14, errc::result_out_of_range, float_inf},\r\n    {\"1.fffffffp+127\", chars_format::hex, 14, errc::result_out_of_range, float_inf},\r\n    {\"2.0000000p+127\", chars_format::hex, 14, errc::result_out_of_range, float_inf},\r\n\r\n    {\"3.fffffc0p+126\", chars_format::hex, 14, errc{}, 0x1.fffffep+127f},\r\n    {\"3.fffffc1p+126\", chars_format::hex, 14, errc{}, 0x1.fffffep+127f},\r\n    {\"3.fffffdfp+126\", chars_format::hex, 14, errc{}, 0x1.fffffep+127f},\r\n    {\"3.fffffe0p+126\", chars_format::hex, 14, errc::result_out_of_range, float_inf},\r\n    {\"3.fffffe1p+126\", chars_format::hex, 14, errc::result_out_of_range, float_inf},\r\n    {\"3.fffffffp+126\", chars_format::hex, 14, errc::result_out_of_range, float_inf},\r\n    {\"4.0000000p+126\", chars_format::hex, 14, errc::result_out_of_range, float_inf},\r\n\r\n    {\"7.fffff80p+125\", chars_format::hex, 14, errc{}, 0x1.fffffep+127f},\r\n    {\"7.fffff81p+125\", chars_format::hex, 14, errc{}, 0x1.fffffep+127f},\r\n    {\"7.fffffbfp+125\", chars_format::hex, 14, errc{}, 0x1.fffffep+127f},\r\n    {\"7.fffffc0p+125\", chars_format::hex, 14, errc::result_out_of_range, float_inf},\r\n    {\"7.fffffc1p+125\", chars_format::hex, 14, errc::result_out_of_range, float_inf},\r\n    {\"7.fffffffp+125\", chars_format::hex, 14, errc::result_out_of_range, float_inf},\r\n    {\"8.0000000p+125\", chars_format::hex, 14, errc::result_out_of_range, float_inf},\r\n\r\n    // GH-2363 \"<charconv>: from_chars() incorrectly tiebreaks floats\"\r\n\r\n    // Exhaustive testing found all affected tiebreaker values, which were in a narrow range of exponents.\r\n    // Let's test the smallest, the largest, and 20 randomly selected values in between.\r\n    {/* 0x1.000005p+15 in decimal: */ \"32768.009765625\", chars_format::general, 15, errc{}, 0x1.000004p+15f},\r\n    {/* 0x1.016d75p+15 in decimal: */ \"32950.728515625\", chars_format::general, 15, errc{}, 0x1.016d74p+15f},\r\n    {/* 0x1.372ad9p+15 in decimal: */ \"39829.423828125\", chars_format::general, 15, errc{}, 0x1.372ad8p+15f},\r\n    {/* 0x1.464ad5p+15 in decimal: */ \"41765.416015625\", chars_format::general, 15, errc{}, 0x1.464ad4p+15f},\r\n    {/* 0x1.4aff95p+15 in decimal: */ \"42367.791015625\", chars_format::general, 15, errc{}, 0x1.4aff94p+15f},\r\n    {/* 0x1.83c87dp+15 in decimal: */ \"49636.244140625\", chars_format::general, 15, errc{}, 0x1.83c87cp+15f},\r\n    {/* 0x1.861e69p+15 in decimal: */ \"49935.205078125\", chars_format::general, 15, errc{}, 0x1.861e68p+15f},\r\n    {/* 0x1.96a091p+15 in decimal: */ \"52048.283203125\", chars_format::general, 15, errc{}, 0x1.96a090p+15f},\r\n    {/* 0x1.d472b9p+15 in decimal: */ \"59961.361328125\", chars_format::general, 15, errc{}, 0x1.d472b8p+15f},\r\n    {/* 0x1.d9baa1p+15 in decimal: */ \"60637.314453125\", chars_format::general, 15, errc{}, 0x1.d9baa0p+15f},\r\n    {/* 0x1.ecfe65p+15 in decimal: */ \"63103.197265625\", chars_format::general, 15, errc{}, 0x1.ecfe64p+15f},\r\n    {/* 0x1.fc8e3dp+15 in decimal: */ \"65095.119140625\", chars_format::general, 15, errc{}, 0x1.fc8e3cp+15f},\r\n    {/* 0x1.fd1359p+15 in decimal: */ \"65161.673828125\", chars_format::general, 15, errc{}, 0x1.fd1358p+15f},\r\n    {/* 0x1.0adaa5p+16 in decimal: */ \"68314.64453125\", chars_format::general, 14, errc{}, 0x1.0adaa4p+16f},\r\n    {/* 0x1.1e315dp+16 in decimal: */ \"73265.36328125\", chars_format::general, 14, errc{}, 0x1.1e315cp+16f},\r\n    {/* 0x1.28a1f5p+16 in decimal: */ \"75937.95703125\", chars_format::general, 14, errc{}, 0x1.28a1f4p+16f},\r\n    {/* 0x1.32aca9p+16 in decimal: */ \"78508.66015625\", chars_format::general, 14, errc{}, 0x1.32aca8p+16f},\r\n    {/* 0x1.3464b5p+16 in decimal: */ \"78948.70703125\", chars_format::general, 14, errc{}, 0x1.3464b4p+16f},\r\n    {/* 0x1.a7bd5dp+16 in decimal: */ \"108477.36328125\", chars_format::general, 15, errc{}, 0x1.a7bd5cp+16f},\r\n    {/* 0x1.b85e8dp+16 in decimal: */ \"112734.55078125\", chars_format::general, 15, errc{}, 0x1.b85e8cp+16f},\r\n    {/* 0x1.dd5e49p+16 in decimal: */ \"122206.28515625\", chars_format::general, 15, errc{}, 0x1.dd5e48p+16f},\r\n    {/* 0x1.fffffdp+16 in decimal: */ \"131071.98828125\", chars_format::general, 15, errc{}, 0x1.fffffcp+16f},\r\n\r\n    // Let's also test unaffected tiebreaker values, randomly selected for each exponent.\r\n    {/* 0x0.799f73p-127 in decimal: */ \"2.\"\r\n                                       \"7923236592830528266962495740723380649230754633916493372624425609233151344967804\"\r\n                                       \"874386274605058133602142333984375e-39\",\r\n        chars_format::general, 118, errc{}, 0x0.799f74p-127f},\r\n    {/* 0x1.5b6b41p-127 in decimal: */ \"7.\"\r\n                                       \"9763481546894792284140799767319269123329871825641034117366124028155574716969500\"\r\n                                       \"315144614432938396930694580078125e-39\",\r\n        chars_format::general, 118, errc{}, 0x1.5b6b40p-127f},\r\n    {/* 0x1.9eea7bp-126 in decimal: */ \"1.\"\r\n                                       \"9052005576163193690090080545739076218779912192716113693014974768909805362404608\"\r\n                                       \"075621581519953906536102294921875e-38\",\r\n        chars_format::general, 118, errc{}, 0x1.9eea7cp-126f},\r\n    {/* 0x1.cc3a7dp-125 in decimal: */ \"4.\"\r\n                                       \"2265309874582292803629410309475053960841952808552612374871283027795302103535313\"\r\n                                       \"16513908677734434604644775390625e-38\",\r\n        chars_format::general, 117, errc{}, 0x1.cc3a7cp-125f},\r\n    {/* 0x1.13100dp-124 in decimal: */ \"5.\"\r\n                                       \"0521038757674987704720499293483845499537646835188976896441474466307747920312820\"\r\n                                       \"6108885933645069599151611328125e-38\",\r\n        chars_format::general, 116, errc{}, 0x1.13100cp-124f},\r\n    {/* 0x1.edfadfp-123 in decimal: */ \"1.\"\r\n                                       \"8145958078865600010341721150591273787373501139097227567208027653410367524555724\"\r\n                                       \"1169080953113734722137451171875e-37\",\r\n        chars_format::general, 116, errc{}, 0x1.edfae0p-123f},\r\n    {/* 0x1.ab296bp-122 in decimal: */ \"3.\"\r\n                                       \"1382891861663586697238059780935979911377608740250859087647163317316527375577805\"\r\n                                       \"969442124478518962860107421875e-37\",\r\n        chars_format::general, 115, errc{}, 0x1.ab296cp-122f},\r\n    {/* 0x1.db050dp-121 in decimal: */ \"6.\"\r\n                                       \"9797876086336315967200058909332747298975660039248050725410743583146735979916286\"\r\n                                       \"39647387899458408355712890625e-37\",\r\n        chars_format::general, 114, errc{}, 0x1.db050cp-121f},\r\n    {/* 0x1.ab219fp-120 in decimal: */ \"1.\"\r\n                                       \"2552261707310301131735683507814953029319672167192828266905128652272324862870789\"\r\n                                       \"27489346824586391448974609375e-36\",\r\n        chars_format::general, 114, errc{}, 0x1.ab21a0p-120f},\r\n    {/* 0x1.fedb07p-119 in decimal: */ \"3.\"\r\n                                       \"0025392157931951816712390941704640072310061660787724992609610478577070180605801\"\r\n                                       \"3971778564155101776123046875e-36\",\r\n        chars_format::general, 113, errc{}, 0x1.fedb08p-119f},\r\n    {/* 0x1.06fc5dp-118 in decimal: */ \"3.\"\r\n                                       \"0913831527272194861570692538875246399375580080555006409365282411989828137421909\"\r\n                                       \"559634514153003692626953125e-36\",\r\n        chars_format::general, 112, errc{}, 0x1.06fc5cp-118f},\r\n    {/* 0x1.505a0fp-117 in decimal: */ \"7.\"\r\n                                       \"9075926131660942698878670560324347031415391499103386907449834237679442416890651\"\r\n                                       \"65701322257518768310546875e-36\",\r\n        chars_format::general, 111, errc{}, 0x1.505a10p-117f},\r\n    {/* 0x1.cfa54dp-116 in decimal: */ \"2.\"\r\n                                       \"1800516335751559288984023755321342596236508175851387819513764855863802161195508\"\r\n                                       \"23350436985492706298828125e-35\",\r\n        chars_format::general, 111, errc{}, 0x1.cfa54cp-116f},\r\n    {/* 0x1.587015p-115 in decimal: */ \"3.\"\r\n                                       \"2390776970430309122944828427039938718649816467607669767768809130498164350342449\"\r\n                                       \"3246711790561676025390625e-35\",\r\n        chars_format::general, 110, errc{}, 0x1.587014p-115f},\r\n    {/* 0x1.15d717p-114 in decimal: */\r\n        \"5.2255932688598390793241011093237458992089588485788678365369526977735059602991896099410951137542724609375e-35\",\r\n        chars_format::general, 109, errc{}, 0x1.15d718p-114f},\r\n    {/* 0x1.7c8469p-113 in decimal: */\r\n        \"1.4313467229831937522513906733248592628671955253540919930841626879491901291885369573719799518585205078125e-34\",\r\n        chars_format::general, 109, errc{}, 0x1.7c8468p-113f},\r\n    {/* 0x1.925f4bp-112 in decimal: */\r\n        \"3.027112274456549045009474867635856246621392661089931372514201350643059384992739069275557994842529296875e-34\",\r\n        chars_format::general, 108, errc{}, 0x1.925f4cp-112f},\r\n    {/* 0x1.f46529p-111 in decimal: */\r\n        \"7.52910950487264879701434086363339665372666073168583801862173594809934940030871075578033924102783203125e-34\",\r\n        chars_format::general, 107, errc{}, 0x1.f46528p-111f},\r\n    {/* 0x1.7c2ffdp-110 in decimal: */\r\n        \"1.14408500401507174876899455686135431757543544372026740870503143387981737078007427044212818145751953125e-33\",\r\n        chars_format::general, 107, errc{}, 0x1.7c2ffcp-110f},\r\n    {/* 0x1.474a3fp-109 in decimal: */\r\n        \"1.9698051791961815762996994737792056679747397605386597391609153351321737090984242968261241912841796875e-33\",\r\n        chars_format::general, 106, errc{}, 0x1.474a40p-109f},\r\n    {/* 0x1.b5b0ebp-108 in decimal: */\r\n        \"5.268514803520621083584672887951853477662515936333867229489184846880078794129076413810253143310546875e-33\",\r\n        chars_format::general, 105, errc{}, 0x1.b5b0ecp-108f},\r\n    {/* 0x1.37b391p-107 in decimal: */\r\n        \"7.50393900249692617077193139238627039193050960649333913751908575751059515823726542294025421142578125e-33\",\r\n        chars_format::general, 104, errc{}, 0x1.37b390p-107f},\r\n    {/* 0x1.c0279dp-106 in decimal: */\r\n        \"2.15778658072693470652383973052161677135134628896443638739095771672538148777675814926624298095703125e-32\",\r\n        chars_format::general, 104, errc{}, 0x1.c0279cp-106f},\r\n    {/* 0x1.1aed1fp-105 in decimal: */\r\n        \"2.7244807257832482176334571757971227665613016308952893588905819211021253067883662879467010498046875e-32\",\r\n        chars_format::general, 103, errc{}, 0x1.1aed20p-105f},\r\n    {/* 0x1.7b06a7p-104 in decimal: */\r\n        \"7.299774955947486471988674091977596908356736543597116976221650386236206031753681600093841552734375e-32\",\r\n        chars_format::general, 102, errc{}, 0x1.7b06a8p-104f},\r\n    {/* 0x1.b1ee17p-103 in decimal: */\r\n        \"1.671437709648194711041387021312558712669432301572066952403960993223108744132332503795623779296875e-31\",\r\n        chars_format::general, 102, errc{}, 0x1.b1ee18p-103f},\r\n    {/* 0x1.517dd9p-102 in decimal: */\r\n        \"2.59994065518403809358388114510645093428958941661859592155148224179583849036134779453277587890625e-31\",\r\n        chars_format::general, 101, errc{}, 0x1.517dd8p-102f},\r\n    {/* 0x1.399b9dp-101 in decimal: */\r\n        \"4.8318942144363800695431588797193225258328589630883579709996755724432659917511045932769775390625e-31\",\r\n        chars_format::general, 100, errc{}, 0x1.399b9cp-101f},\r\n    {/* 0x1.e64a5dp-100 in decimal: */\r\n        \"1.4984982401937787548278964816524034785339731991004566698244548916818530415184795856475830078125e-30\",\r\n        chars_format::general, 100, errc{}, 0x1.e64a5cp-100f},\r\n    {/* 0x1.ccf2a7p-99 in decimal: */\r\n        \"2.840810520824309549915000327081469707228919041030741447773078078853359329514205455780029296875e-30\",\r\n        chars_format::general, 99, errc{}, 0x1.ccf2a8p-99f},\r\n    {/* 0x1.fa99f9p-98 in decimal: */\r\n        \"6.24434504563584252360873555936105890961500091202091879127866747012376436032354831695556640625e-30\",\r\n        chars_format::general, 98, errc{}, 0x1.fa99f8p-98f},\r\n    {/* 0x1.cfe385p-97 in decimal: */\r\n        \"1.14357405563248806830394721780106763644256610240970174763308619958479539491236209869384765625e-29\",\r\n        chars_format::general, 98, errc{}, 0x1.cfe384p-97f},\r\n    {/* 0x1.9fd427p-96 in decimal: */\r\n        \"2.0501938784329999627247695294069037358553918019474747447272733325007720850408077239990234375e-29\",\r\n        chars_format::general, 97, errc{}, 0x1.9fd428p-96f},\r\n    {/* 0x1.27ed4fp-95 in decimal: */\r\n        \"2.918065382537752045370514999791991168758113433623173349484858363211969844996929168701171875e-29\",\r\n        chars_format::general, 96, errc{}, 0x1.27ed50p-95f},\r\n    {/* 0x1.c7d9afp-94 in decimal: */\r\n        \"8.99006253095320733224329531803019808826400019788858963831756909712566994130611419677734375e-29\",\r\n        chars_format::general, 95, errc{}, 0x1.c7d9b0p-94f},\r\n    {/* 0x1.5dd31bp-93 in decimal: */\r\n        \"1.37981487436018183129367585316693438412586256137069840033149148439406417310237884521484375e-28\",\r\n        chars_format::general, 95, errc{}, 0x1.5dd31cp-93f},\r\n    {/* 0x1.944a29p-92 in decimal: */\r\n        \"3.1892832933425246734052751375699547957011568640774135108273412697599269449710845947265625e-28\",\r\n        chars_format::general, 94, errc{}, 0x1.944a28p-92f},\r\n    {/* 0x1.0aba31p-91 in decimal: */\r\n        \"4.208214947125685004407385115883586561941223061662775695168647871469147503376007080078125e-28\",\r\n        chars_format::general, 93, errc{}, 0x1.0aba30p-91f},\r\n    {/* 0x1.2e0653p-90 in decimal: */\r\n        \"9.53021925521481334308520547568831890378451203275911307599699284764938056468963623046875e-28\",\r\n        chars_format::general, 92, errc{}, 0x1.2e0654p-90f},\r\n    {/* 0x1.fc13d5p-89 in decimal: */\r\n        \"3.20641961613457467701456314930996842119172184938646896767977523268200457096099853515625e-27\",\r\n        chars_format::general, 92, errc{}, 0x1.fc13d4p-89f},\r\n    {/* 0x1.f77519p-88 in decimal: */\r\n        \"6.3545259254129926268702973984743504130327470570682724115840755985118448734283447265625e-27\",\r\n        chars_format::general, 91, errc{}, 0x1.f77518p-88f},\r\n    {/* 0x1.03ca9bp-87 in decimal: */\r\n        \"6.558057624156852395650497230653342756577658077821180171440573758445680141448974609375e-27\",\r\n        chars_format::general, 90, errc{}, 0x1.03ca9cp-87f},\r\n    {/* 0x1.4dd65dp-86 in decimal: */\r\n        \"1.685447931509345893369802034392883334937914170670314462086025741882622241973876953125e-26\",\r\n        chars_format::general, 90, errc{}, 0x1.4dd65cp-86f},\r\n    {/* 0x1.84523dp-85 in decimal: */\r\n        \"3.92104252793916778850995974691044876903598705164544213630506419576704502105712890625e-26\",\r\n        chars_format::general, 89, errc{}, 0x1.84523cp-85f},\r\n    {/* 0x1.67e04bp-84 in decimal: */\r\n        \"7.2676408587794702077274095979725639958611387025921857230059686116874217987060546875e-26\",\r\n        chars_format::general, 88, errc{}, 0x1.67e04cp-84f},\r\n    {/* 0x1.69a8e5p-83 in decimal: */\r\n        \"1.4607320741942756095091207439691928681086731389715538398377248086035251617431640625e-25\",\r\n        chars_format::general, 88, errc{}, 0x1.69a8e4p-83f},\r\n    {/* 0x1.8e5021p-82 in decimal: */\r\n        \"3.217546818907087816811047188015620590059197303478555340916500426828861236572265625e-25\",\r\n        chars_format::general, 87, errc{}, 0x1.8e5020p-82f},\r\n    {/* 0x1.67d5edp-81 in decimal: */\r\n        \"5.81345842551030848951581432599921978585967574648663003245019353926181793212890625e-25\", chars_format::general,\r\n        86, errc{}, 0x1.67d5ecp-81f},\r\n    {/* 0x1.bc4d5bp-80 in decimal: */\r\n        \"1.43561773817828810465400997910748526263484403653336585193756036460399627685546875e-24\", chars_format::general,\r\n        86, errc{}, 0x1.bc4d5cp-80f},\r\n    {/* 0x1.830155p-79 in decimal: */\r\n        \"2.5009625084618796563722303923603734938409248744761725902208127081394195556640625e-24\", chars_format::general,\r\n        85, errc{}, 0x1.830154p-79f},\r\n    {/* 0x1.f228bbp-78 in decimal: */\r\n        \"6.438555504592931467616905908606949357313176118822184434975497424602508544921875e-24\", chars_format::general,\r\n        84, errc{}, 0x1.f228bcp-78f},\r\n    {/* 0x1.205c01p-77 in decimal: */\r\n        \"7.45391553342758431936910945007871841412605551369097156566567718982696533203125e-24\", chars_format::general,\r\n        83, errc{}, 0x1.205c00p-77f},\r\n    {/* 0x1.613789p-76 in decimal: */\r\n        \"1.82608874999407002016879928138061808286229936726385858491994440555572509765625e-23\", chars_format::general,\r\n        83, errc{}, 0x1.613788p-76f},\r\n    {/* 0x1.2557d9p-75 in decimal: */ \"3.0330971320549669261149152074471678670886110040783023578114807605743408203125e-\"\r\n                                      \"23\",\r\n        chars_format::general, 82, errc{}, 0x1.2557d8p-75f},\r\n    {/* 0x1.b5840fp-74 in decimal: */ \"9.047615800390950046412361683906950236833122147572794347070157527923583984375e-\"\r\n                                      \"23\",\r\n        chars_format::general, 81, errc{}, 0x1.b58410p-74f},\r\n    {/* 0x1.8a1713p-73 in decimal: */ \"1.629918590838835760835440489828636854985344228907706565223634243011474609375e-\"\r\n                                      \"22\",\r\n        chars_format::general, 81, errc{}, 0x1.8a1714p-73f},\r\n    {/* 0x1.dc6007p-72 in decimal: */ \"3.94048252657369943370189521798427866039471467729526921175420284271240234375e-\"\r\n                                      \"22\",\r\n        chars_format::general, 80, errc{}, 0x1.dc6008p-72f},\r\n    {/* 0x1.14c34dp-71 in decimal: */ \"4.5786579984697799420054304420112968598832736688564182259142398834228515625e-22\",\r\n        chars_format::general, 79, errc{}, 0x1.14c34cp-71f},\r\n    {/* 0x1.0e62a9p-70 in decimal: */ \"8.946302141897925829519555652514541110864598749685683287680149078369140625e-22\",\r\n        chars_format::general, 78, errc{}, 0x1.0e62a8p-70f},\r\n    {/* 0x1.0de299p-69 in decimal: */ \"1.785950090342239162572248012514526671612458130766754038631916046142578125e-21\",\r\n        chars_format::general, 78, errc{}, 0x1.0de298p-69f},\r\n    {/* 0x1.799ce9p-68 in decimal: */ \"4.99766551986752957756650266409916005816427286845282651484012603759765625e-21\",\r\n        chars_format::general, 77, errc{}, 0x1.799ce8p-68f},\r\n    {/* 0x1.7699a3p-67 in decimal: */ \"9.9155832354254179919041673591482977112576691069989465177059173583984375e-21\",\r\n        chars_format::general, 76, errc{}, 0x1.7699a4p-67f},\r\n    {/* 0x1.d0120bp-66 in decimal: */ \"2.4567686668860434866995250016534491077635493638808839023113250732421875e-20\",\r\n        chars_format::general, 76, errc{}, 0x1.d0120cp-66f},\r\n    {/* 0x1.4c97cdp-65 in decimal: */ \"3.521465064266366565038455919457727194554763627820648252964019775390625e-20\",\r\n        chars_format::general, 75, errc{}, 0x1.4c97ccp-65f},\r\n    {/* 0x1.ecb09bp-64 in decimal: */ \"1.043311371320997812921560553116318015298702448490075767040252685546875e-19\",\r\n        chars_format::general, 75, errc{}, 0x1.ecb09cp-64f},\r\n    {/* 0x1.f34fabp-63 in decimal: */ \"2.11466519938330895530585545015467285878685288480482995510101318359375e-19\",\r\n        chars_format::general, 74, errc{}, 0x1.f34facp-63f},\r\n    {/* 0x1.bc3793p-62 in decimal: */ \"3.7626650824614047437024762048085602117453163373284041881561279296875e-19\",\r\n        chars_format::general, 73, errc{}, 0x1.bc3794p-62f},\r\n    {/* 0x1.35e485p-61 in decimal: */ \"5.249785768098752555444624391667307605757741839624941349029541015625e-19\",\r\n        chars_format::general, 72, errc{}, 0x1.35e484p-61f},\r\n    {/* 0x1.4d2243p-60 in decimal: */ \"1.128701335814771964497524141257667196214242721907794475555419921875e-18\",\r\n        chars_format::general, 72, errc{}, 0x1.4d2244p-60f},\r\n    {/* 0x1.dd0c7fp-59 in decimal: */ \"3.23260849556985473582620786714425520358417998068034648895263671875e-18\",\r\n        chars_format::general, 71, errc{}, 0x1.dd0c80p-59f},\r\n    {/* 0x1.2b6729p-58 in decimal: */ \"4.0576668728638010490692746012886260587038123048841953277587890625e-18\",\r\n        chars_format::general, 70, errc{}, 0x1.2b6728p-58f},\r\n    {/* 0x1.092477p-57 in decimal: */ \"7.186700258225558131971837105833600389814819209277629852294921875e-18\",\r\n        chars_format::general, 69, errc{}, 0x1.092478p-57f},\r\n    {/* 0x1.8a701fp-56 in decimal: */ \"2.138252536308654690329865422082633585887379013001918792724609375e-17\",\r\n        chars_format::general, 69, errc{}, 0x1.8a7020p-56f},\r\n    {/* 0x1.36725fp-55 in decimal: */ \"3.36587053893605176488161567771584259389783255755901336669921875e-17\",\r\n        chars_format::general, 68, errc{}, 0x1.367260p-55f},\r\n    {/* 0x1.ce168dp-54 in decimal: */ \"1.00199381992365684217356769369899893717956729233264923095703125e-16\",\r\n        chars_format::general, 68, errc{}, 0x1.ce168cp-54f},\r\n    {/* 0x1.b88fbfp-53 in decimal: */ \"1.9106309771233949130857243670078560171532444655895233154296875e-16\",\r\n        chars_format::general, 67, errc{}, 0x1.b88fc0p-53f},\r\n    {/* 0x1.03a4a5p-52 in decimal: */ \"2.252045275092124797418347004196448324364610016345977783203125e-16\",\r\n        chars_format::general, 66, errc{}, 0x1.03a4a4p-52f},\r\n    {/* 0x1.68bd9fp-51 in decimal: */ \"6.25785373862855725905773862649539296398870646953582763671875e-16\",\r\n        chars_format::general, 65, errc{}, 0x1.68bda0p-51f},\r\n    {/* 0x1.7ed3e9p-50 in decimal: */ \"1.32820065379350552882409264299212736659683287143707275390625e-15\",\r\n        chars_format::general, 65, errc{}, 0x1.7ed3e8p-50f},\r\n    {/* 0x1.e28397p-49 in decimal: */ \"3.3481136115450535299664647226336455787532031536102294921875e-15\",\r\n        chars_format::general, 64, errc{}, 0x1.e28398p-49f},\r\n    {/* 0x1.26d23dp-48 in decimal: */ \"4.091466655560993710694095426561034400947391986846923828125e-15\",\r\n        chars_format::general, 63, errc{}, 0x1.26d23cp-48f},\r\n    {/* 0x1.fb5971p-47 in decimal: */ \"1.408177409382050000730135508320017834194004535675048828125e-14\",\r\n        chars_format::general, 63, errc{}, 0x1.fb5970p-47f},\r\n    {/* 0x1.f732b1p-46 in decimal: */ \"2.79331010158792060471544260735754505731165409088134765625e-14\",\r\n        chars_format::general, 62, errc{}, 0x1.f732b0p-46f},\r\n    {/* 0x1.2ed21dp-45 in decimal: */ \"3.3619857454079450642669968374320887960493564605712890625e-14\",\r\n        chars_format::general, 61, errc{}, 0x1.2ed21cp-45f},\r\n    {/* 0x1.93dbddp-44 in decimal: */ \"8.967467678253245033648255457592313177883625030517578125e-14\",\r\n        chars_format::general, 60, errc{}, 0x1.93dbdcp-44f},\r\n    {/* 0x1.593589p-43 in decimal: */ \"1.533036460906085640676366210755077190697193145751953125e-13\",\r\n        chars_format::general, 60, errc{}, 0x1.593588p-43f},\r\n    {/* 0x1.22a9f5p-42 in decimal: */ \"2.58161398617069715033522925295983441174030303955078125e-13\",\r\n        chars_format::general, 59, errc{}, 0x1.22a9f4p-42f},\r\n    {/* 0x1.7213d5p-41 in decimal: */ \"6.5738964293883539458107634345651604235172271728515625e-13\",\r\n        chars_format::general, 58, errc{}, 0x1.7213d4p-41f},\r\n    {/* 0x1.ea12ebp-40 in decimal: */ \"1.7410922421683128202829493602621369063854217529296875e-12\",\r\n        chars_format::general, 58, errc{}, 0x1.ea12ecp-40f},\r\n    {/* 0x1.82499fp-39 in decimal: */ \"2.744738355868470147669313519145362079143524169921875e-12\",\r\n        chars_format::general, 57, errc{}, 0x1.8249a0p-39f},\r\n    {/* 0x1.ce1b23p-38 in decimal: */ \"6.56692126892177707730979818734340369701385498046875e-12\", chars_format::general,\r\n        56, errc{}, 0x1.ce1b24p-38f},\r\n    {/* 0x1.fce121p-37 in decimal: */ \"1.44632227201679786077193057280965149402618408203125e-11\", chars_format::general,\r\n        56, errc{}, 0x1.fce120p-37f},\r\n    {/* 0x1.9a078fp-36 in decimal: */ \"2.3307480077894293657436719513498246669769287109375e-11\", chars_format::general,\r\n        55, errc{}, 0x1.9a0790p-36f},\r\n    {/* 0x1.71a5b7p-35 in decimal: */ \"4.202403529329767906119741383008658885955810546875e-11\", chars_format::general,\r\n        54, errc{}, 0x1.71a5b8p-35f},\r\n    {/* 0x1.0f6261p-34 in decimal: */ \"6.17056440666008398920894251205027103424072265625e-11\", chars_format::general,\r\n        53, errc{}, 0x1.0f6260p-34f},\r\n    {/* 0x1.4c4a83p-33 in decimal: */ \"1.51108479895523117875200114212930202484130859375e-10\", chars_format::general,\r\n        53, errc{}, 0x1.4c4a84p-33f},\r\n    {/* 0x1.ecaaddp-32 in decimal: */ \"4.4807842158878230520713259465992450714111328125e-10\", chars_format::general, 52,\r\n        errc{}, 0x1.ecaadcp-32f},\r\n    {/* 0x1.d7136bp-31 in decimal: */ \"8.568819820364836914450279437005519866943359375e-10\", chars_format::general, 51,\r\n        errc{}, 0x1.d7136cp-31f},\r\n    {/* 0x1.f66321p-30 in decimal: */ \"1.827674067644835531609714962542057037353515625e-09\", chars_format::general, 51,\r\n        errc{}, 0x1.f66320p-30f},\r\n    {/* 0x1.e90f7bp-29 in decimal: */ \"3.55838325472035421626060269773006439208984375e-09\", chars_format::general, 50,\r\n        errc{}, 0x1.e90f7cp-29f},\r\n    {/* 0x1.d441ddp-28 in decimal: */ \"6.8140402209593275983934290707111358642578125e-09\", chars_format::general, 49,\r\n        errc{}, 0x1.d441dcp-28f},\r\n    {/* 0x1.68c41fp-27 in decimal: */ \"1.0499675351383075394551269710063934326171875e-08\", chars_format::general, 49,\r\n        errc{}, 0x1.68c420p-27f},\r\n    {/* 0x1.73daffp-26 in decimal: */ \"2.164483614564005620195530354976654052734375e-08\", chars_format::general, 48,\r\n        errc{}, 0x1.73db00p-26f},\r\n    {/* 0x1.2231c1p-25 in decimal: */ \"3.37830687868745371815748512744903564453125e-08\", chars_format::general, 47,\r\n        errc{}, 0x1.2231c0p-25f},\r\n    {/* 0x1.8ba059p-24 in decimal: */ \"9.2113939587079585180617868900299072265625e-08\", chars_format::general, 46,\r\n        errc{}, 0x1.8ba058p-24f},\r\n    {/* 0x1.f22fc5p-23 in decimal: */ \"2.3198621335041025304235517978668212890625e-07\", chars_format::general, 46,\r\n        errc{}, 0x1.f22fc4p-23f},\r\n    {/* 0x1.eea199p-22 in decimal: */ \"4.606612407087595784105360507965087890625e-07\", chars_format::general, 45,\r\n        errc{}, 0x1.eea198p-22f},\r\n    {/* 0x1.a7aa29p-21 in decimal: */ \"7.89136976209192653186619281768798828125e-07\", chars_format::general, 44, errc{},\r\n        0x1.a7aa28p-21f},\r\n    {/* 0x1.b1b287p-20 in decimal: */ \"1.61564861400620429776608943939208984375e-06\", chars_format::general, 44, errc{},\r\n        0x1.b1b288p-20f},\r\n    {/* 0x1.df0cc5p-19 in decimal: */ \"3.5691997481990256346762180328369140625e-06\", chars_format::general, 43, errc{},\r\n        0x1.df0cc4p-19f},\r\n    {/* 0x1.ba305bp-18 in decimal: */ \"6.589127906408975832164287567138671875e-06\", chars_format::general, 42, errc{},\r\n        0x1.ba305cp-18f},\r\n    {/* 0x1.35f055p-17 in decimal: */ \"9.23689594856114126741886138916015625e-06\", chars_format::general, 41, errc{},\r\n        0x1.35f054p-17f},\r\n    {/* 0x1.28b507p-16 in decimal: */ \"1.76851235664798878133296966552734375e-05\", chars_format::general, 41, errc{},\r\n        0x1.28b508p-16f},\r\n    {/* 0x1.7bf969p-15 in decimal: */ \"4.5296461394173093140125274658203125e-05\", chars_format::general, 40, errc{},\r\n        0x1.7bf968p-15f},\r\n    {/* 0x1.56d069p-14 in decimal: */ \"8.173325113602913916110992431640625e-05\", chars_format::general, 39, errc{},\r\n        0x1.56d068p-14f},\r\n    {/* 0x1.94fbffp-13 in decimal: */ \"0.0001931115912157110869884490966796875\", chars_format::general, 39, errc{},\r\n        0x1.94fc00p-13f},\r\n    {/* 0x1.9370a9p-12 in decimal: */ \"0.000384750441298820078372955322265625\", chars_format::general, 38, errc{},\r\n        0x1.9370a8p-12f},\r\n    {/* 0x1.af2d51p-11 in decimal: */ \"0.00082240489427931606769561767578125\", chars_format::general, 37, errc{},\r\n        0x1.af2d50p-11f},\r\n    {/* 0x1.549d27p-10 in decimal: */ \"0.0012993388227187097072601318359375\", chars_format::general, 36, errc{},\r\n        0x1.549d28p-10f},\r\n    {/* 0x1.448f29p-9 in decimal: */ \"0.002476190333254635334014892578125\", chars_format::general, 35, errc{},\r\n        0x1.448f28p-9f},\r\n    {/* 0x1.b0b13bp-8 in decimal: */ \"0.00660236063413321971893310546875\", chars_format::general, 34, errc{},\r\n        0x1.b0b13cp-8f},\r\n    {/* 0x1.6db90dp-7 in decimal: */ \"0.0111609757877886295318603515625\", chars_format::general, 33, errc{},\r\n        0x1.6db90cp-7f},\r\n    {/* 0x1.d3d659p-6 in decimal: */ \"0.028554522432386875152587890625\", chars_format::general, 32, errc{},\r\n        0x1.d3d658p-6f},\r\n    {/* 0x1.0004a1p-5 in decimal: */ \"0.03125220723450183868408203125\", chars_format::general, 31, errc{},\r\n        0x1.0004a0p-5f},\r\n    {/* 0x1.0717cdp-4 in decimal: */ \"0.0642316825687885284423828125\", chars_format::general, 30, errc{},\r\n        0x1.0717ccp-4f},\r\n    {/* 0x1.6fbc2bp-3 in decimal: */ \"0.179558120667934417724609375\", chars_format::general, 29, errc{},\r\n        0x1.6fbc2cp-3f},\r\n    {/* 0x1.52282fp-2 in decimal: */ \"0.33023141324520111083984375\", chars_format::general, 28, errc{}, 0x1.522830p-2f},\r\n    {/* 0x1.73fdf7p-1 in decimal: */ \"0.7265469729900360107421875\", chars_format::general, 27, errc{}, 0x1.73fdf8p-1f},\r\n    {/* 0x1.12b187p+0 in decimal: */ \"1.073021352291107177734375\", chars_format::general, 26, errc{}, 0x1.12b188p+0f},\r\n    {/* 0x1.8672e3p+1 in decimal: */ \"3.05038106441497802734375\", chars_format::general, 25, errc{}, 0x1.8672e4p+1f},\r\n    {/* 0x1.7722bdp+2 in decimal: */ \"5.8614952564239501953125\", chars_format::general, 24, errc{}, 0x1.7722bcp+2f},\r\n    {/* 0x1.b00fedp+3 in decimal: */ \"13.501944065093994140625\", chars_format::general, 24, errc{}, 0x1.b00fecp+3f},\r\n    {/* 0x1.1ebb99p+4 in decimal: */ \"17.92080020904541015625\", chars_format::general, 23, errc{}, 0x1.1ebb98p+4f},\r\n    {/* 0x1.26c1abp+5 in decimal: */ \"36.8445644378662109375\", chars_format::general, 22, errc{}, 0x1.26c1acp+5f},\r\n    {/* 0x1.495441p+6 in decimal: */ \"82.332279205322265625\", chars_format::general, 21, errc{}, 0x1.495440p+6f},\r\n    {/* 0x1.c5ea61p+7 in decimal: */ \"226.95777130126953125\", chars_format::general, 21, errc{}, 0x1.c5ea60p+7f},\r\n    {/* 0x1.b2f6a1p+8 in decimal: */ \"434.9633941650390625\", chars_format::general, 20, errc{}, 0x1.b2f6a0p+8f},\r\n    {/* 0x1.a0db29p+9 in decimal: */ \"833.712188720703125\", chars_format::general, 19, errc{}, 0x1.a0db28p+9f},\r\n    {/* 0x1.4a944fp+10 in decimal: */ \"1322.31732177734375\", chars_format::general, 19, errc{}, 0x1.4a9450p+10f},\r\n    {/* 0x1.2741c5p+11 in decimal: */ \"2362.0552978515625\", chars_format::general, 18, errc{}, 0x1.2741c4p+11f},\r\n    {/* 0x1.520bb5p+12 in decimal: */ \"5408.731689453125\", chars_format::general, 17, errc{}, 0x1.520bb4p+12f},\r\n    {/* 0x1.c988cfp+13 in decimal: */ \"14641.10107421875\", chars_format::general, 17, errc{}, 0x1.c988d0p+13f},\r\n    {/* 0x1.870e67p+14 in decimal: */ \"25027.6005859375\", chars_format::general, 16, errc{}, 0x1.870e68p+14f},\r\n    {/* 0x1.a93953p+15 in decimal: */ \"54428.662109375\", chars_format::general, 15, errc{}, 0x1.a93954p+15f},\r\n    {/* 0x1.1b3127p+16 in decimal: */ \"72497.15234375\", chars_format::general, 14, errc{}, 0x1.1b3128p+16f},\r\n    {/* 0x1.cccddbp+17 in decimal: */ \"235931.7109375\", chars_format::general, 14, errc{}, 0x1.cccddcp+17f},\r\n    {/* 0x1.2c3e23p+18 in decimal: */ \"307448.546875\", chars_format::general, 13, errc{}, 0x1.2c3e24p+18f},\r\n    {/* 0x1.7043d5p+19 in decimal: */ \"754206.65625\", chars_format::general, 12, errc{}, 0x1.7043d4p+19f},\r\n    {/* 0x1.ec3171p+20 in decimal: */ \"2016023.0625\", chars_format::general, 12, errc{}, 0x1.ec3170p+20f},\r\n    {/* 0x1.c2c4c3p+21 in decimal: */ \"3692696.375\", chars_format::general, 11, errc{}, 0x1.c2c4c4p+21f},\r\n    {/* 0x1.62efbfp+22 in decimal: */ \"5815279.75\", chars_format::general, 10, errc{}, 0x1.62efc0p+22f},\r\n    {/* 0x1.12e7b9p+23 in decimal: */ \"9008092.5\", chars_format::general, 9, errc{}, 0x1.12e7b8p+23f},\r\n    {/* 0x1.71e537p+24 in decimal: */ \"24241463\", chars_format::general, 8, errc{}, 0x1.71e538p+24f},\r\n    {/* 0x1.6e14b3p+25 in decimal: */ \"47982950\", chars_format::general, 8, errc{}, 0x1.6e14b4p+25f},\r\n    {/* 0x1.2ddcb1p+26 in decimal: */ \"79131332\", chars_format::general, 8, errc{}, 0x1.2ddcb0p+26f},\r\n    {/* 0x1.f8e071p+27 in decimal: */ \"264700808\", chars_format::general, 9, errc{}, 0x1.f8e070p+27f},\r\n    {/* 0x1.ed182dp+28 in decimal: */ \"517046992\", chars_format::general, 9, errc{}, 0x1.ed182cp+28f},\r\n    {/* 0x1.f3f655p+29 in decimal: */ \"1048496800\", chars_format::general, 10, errc{}, 0x1.f3f654p+29f},\r\n    {/* 0x1.968721p+30 in decimal: */ \"1705101376\", chars_format::general, 10, errc{}, 0x1.968720p+30f},\r\n    {/* 0x1.753579p+31 in decimal: */ \"3130702976\", chars_format::general, 10, errc{}, 0x1.753578p+31f},\r\n    {/* 0x1.074e6fp+32 in decimal: */ \"4417548032\", chars_format::general, 10, errc{}, 0x1.074e70p+32f},\r\n    {/* 0x1.32e079p+33 in decimal: */ \"10297078272\", chars_format::general, 11, errc{}, 0x1.32e078p+33f},\r\n    {/* 0x1.6b8addp+34 in decimal: */ \"24396919808\", chars_format::general, 11, errc{}, 0x1.6b8adcp+34f},\r\n    {/* 0x1.9a1087p+35 in decimal: */ \"55037933568\", chars_format::general, 11, errc{}, 0x1.9a1088p+35f},\r\n    {/* 0x1.196afbp+36 in decimal: */ \"75542540288\", chars_format::general, 11, errc{}, 0x1.196afcp+36f},\r\n    {/* 0x1.628433p+37 in decimal: */ \"190329544704\", chars_format::general, 12, errc{}, 0x1.628434p+37f},\r\n    {/* 0x1.0bd82dp+38 in decimal: */ \"287595773952\", chars_format::general, 12, errc{}, 0x1.0bd82cp+38f},\r\n    {/* 0x1.2fc49fp+39 in decimal: */ \"652336922624\", chars_format::general, 12, errc{}, 0x1.2fc4a0p+39f},\r\n    {/* 0x1.50b97bp+40 in decimal: */ \"1446220857344\", chars_format::general, 13, errc{}, 0x1.50b97cp+40f},\r\n    {/* 0x1.6306a9p+41 in decimal: */ \"3049650257920\", chars_format::general, 13, errc{}, 0x1.6306a8p+41f},\r\n    {/* 0x1.51dcbfp+42 in decimal: */ \"5804429934592\", chars_format::general, 13, errc{}, 0x1.51dcc0p+42f},\r\n    {/* 0x1.5ac8f9p+43 in decimal: */ \"11915443568640\", chars_format::general, 14, errc{}, 0x1.5ac8f8p+43f},\r\n    {/* 0x1.4f94cdp+44 in decimal: */ \"23060968112128\", chars_format::general, 14, errc{}, 0x1.4f94ccp+44f},\r\n    {/* 0x1.3b3c25p+45 in decimal: */ \"43325560193024\", chars_format::general, 14, errc{}, 0x1.3b3c24p+45f},\r\n    {/* 0x1.a0dccbp+46 in decimal: */ \"114586283933696\", chars_format::general, 15, errc{}, 0x1.a0dcccp+46f},\r\n    {/* 0x1.2db2b3p+47 in decimal: */ \"165860253630464\", chars_format::general, 15, errc{}, 0x1.2db2b4p+47f},\r\n    {/* 0x1.ed97bfp+48 in decimal: */ \"542710977003520\", chars_format::general, 15, errc{}, 0x1.ed97c0p+48f},\r\n    {/* 0x1.b6fe61p+49 in decimal: */ \"965357284098048\", chars_format::general, 15, errc{}, 0x1.b6fe60p+49f},\r\n    {/* 0x1.e39d93p+50 in decimal: */ \"2126963569328128\", chars_format::general, 16, errc{}, 0x1.e39d94p+50f},\r\n    {/* 0x1.c83801p+51 in decimal: */ \"4012942697693184\", chars_format::general, 16, errc{}, 0x1.c83800p+51f},\r\n    {/* 0x1.6f6693p+52 in decimal: */ \"6463381124939776\", chars_format::general, 16, errc{}, 0x1.6f6694p+52f},\r\n    {/* 0x1.e75311p+53 in decimal: */ \"17146205767204864\", chars_format::general, 17, errc{}, 0x1.e75310p+53f},\r\n    {/* 0x1.3248b9p+54 in decimal: */ \"21552825569902592\", chars_format::general, 17, errc{}, 0x1.3248b8p+54f},\r\n    {/* 0x1.66c585p+55 in decimal: */ \"50492608341868544\", chars_format::general, 17, errc{}, 0x1.66c584p+55f},\r\n    {/* 0x1.004ae3p+56 in decimal: */ \"72139932855959552\", chars_format::general, 17, errc{}, 0x1.004ae4p+56f},\r\n    {/* 0x1.0954b7p+57 in decimal: */ \"149368027568144384\", chars_format::general, 18, errc{}, 0x1.0954b8p+57f},\r\n    {/* 0x1.5fd4dfp+58 in decimal: */ \"396127084272943104\", chars_format::general, 18, errc{}, 0x1.5fd4e0p+58f},\r\n    {/* 0x1.c84d97p+59 in decimal: */ \"1027503202523676672\", chars_format::general, 19, errc{}, 0x1.c84d98p+59f},\r\n    {/* 0x1.a387c3p+60 in decimal: */ \"1889396589282197504\", chars_format::general, 19, errc{}, 0x1.a387c4p+60f},\r\n    {/* 0x1.e3d705p+61 in decimal: */ \"4358042567233765376\", chars_format::general, 19, errc{}, 0x1.e3d704p+61f},\r\n    {/* 0x1.71cd7bp+62 in decimal: */ \"6661772452537827328\", chars_format::general, 19, errc{}, 0x1.71cd7cp+62f},\r\n    {/* 0x1.b2a203p+63 in decimal: */ \"15659299028611366912\", chars_format::general, 20, errc{}, 0x1.b2a204p+63f},\r\n    {/* 0x1.e1d3f5p+64 in decimal: */ \"34719363332678090752\", chars_format::general, 20, errc{}, 0x1.e1d3f4p+64f},\r\n    {/* 0x1.84a0fdp+65 in decimal: */ \"56007321318863142912\", chars_format::general, 20, errc{}, 0x1.84a0fcp+65f},\r\n    {/* 0x1.7c30adp+66 in decimal: */ \"109582346995225329664\", chars_format::general, 21, errc{}, 0x1.7c30acp+66f},\r\n    {/* 0x1.64a58dp+67 in decimal: */ \"205592815038392958976\", chars_format::general, 21, errc{}, 0x1.64a58cp+67f},\r\n    {/* 0x1.9ce943p+68 in decimal: */ \"476054177287663255552\", chars_format::general, 21, errc{}, 0x1.9ce944p+68f},\r\n    {/* 0x1.c81229p+69 in decimal: */ \"1051627984347285422080\", chars_format::general, 22, errc{}, 0x1.c81228p+69f},\r\n    {/* 0x1.ab6e69p+70 in decimal: */ \"1971178902422676307968\", chars_format::general, 22, errc{}, 0x1.ab6e68p+70f},\r\n    {/* 0x1.f472edp+71 in decimal: */ \"4615826656072290009088\", chars_format::general, 22, errc{}, 0x1.f472ecp+71f},\r\n    {/* 0x1.329c43p+72 in decimal: */ \"5655963530048479166464\", chars_format::general, 22, errc{}, 0x1.329c44p+72f},\r\n    {/* 0x1.449e0bp+73 in decimal: */ \"11976266551929262309376\", chars_format::general, 23, errc{}, 0x1.449e0cp+73f},\r\n    {/* 0x1.f0a57bp+74 in decimal: */ \"36646036739993324486656\", chars_format::general, 23, errc{}, 0x1.f0a57cp+74f},\r\n    {/* 0x1.f1d3ebp+75 in decimal: */ \"73466416828761415614464\", chars_format::general, 23, errc{}, 0x1.f1d3ecp+75f},\r\n    {/* 0x1.8c7125p+76 in decimal: */ \"117009017214230505455616\", chars_format::general, 24, errc{}, 0x1.8c7124p+76f},\r\n    {/* 0x1.ba8913p+77 in decimal: */ \"261226819807596014206976\", chars_format::general, 24, errc{}, 0x1.ba8914p+77f},\r\n    {/* 0x1.8c9acfp+78 in decimal: */ \"468228210431424156663808\", chars_format::general, 24, errc{}, 0x1.8c9ad0p+78f},\r\n    {/* 0x1.3addbbp+79 in decimal: */ \"743456640415721750265856\", chars_format::general, 24, errc{}, 0x1.3addbcp+79f},\r\n    {/* 0x1.2388e1p+80 in decimal: */ \"1376733616667749789990912\", chars_format::general, 25, errc{}, 0x1.2388e0p+80f},\r\n    {/* 0x1.763dadp+81 in decimal: */ \"3534605563891024308207616\", chars_format::general, 25, errc{}, 0x1.763dacp+81f},\r\n    {/* 0x1.06c3e1p+82 in decimal: */ \"4963493386259515769356288\", chars_format::general, 25, errc{}, 0x1.06c3e0p+82f},\r\n    {/* 0x1.c6f137p+83 in decimal: */ \"17187232093698040119951360\", chars_format::general, 26, errc{}, 0x1.c6f138p+83f},\r\n    {/* 0x1.e552a5p+84 in decimal: */ \"36669956267341413919752192\", chars_format::general, 26, errc{}, 0x1.e552a4p+84f},\r\n    {/* 0x1.16ddebp+85 in decimal: */ \"42141169478804802988146688\", chars_format::general, 26, errc{}, 0x1.16ddecp+85f},\r\n    {/* 0x1.c626f5p+86 in decimal: */ \"137259072870922187668717568\", chars_format::general, 27, errc{},\r\n        0x1.c626f4p+86f},\r\n    {/* 0x1.3404a1p+87 in decimal: */ \"186185505916516565814083584\", chars_format::general, 27, errc{},\r\n        0x1.3404a0p+87f},\r\n    {/* 0x1.653319p+88 in decimal: */ \"431827819461650810014793728\", chars_format::general, 27, errc{},\r\n        0x1.653318p+88f},\r\n    {/* 0x1.f4ee0dp+89 in decimal: */ \"1211174145675821042276237312\", chars_format::general, 28, errc{},\r\n        0x1.f4ee0cp+89f},\r\n    {/* 0x1.164573p+90 in decimal: */ \"1345637370063013570745991168\", chars_format::general, 28, errc{},\r\n        0x1.164574p+90f},\r\n    {/* 0x1.ec0f05p+91 in decimal: */ \"4758899447850887737451216896\", chars_format::general, 28, errc{},\r\n        0x1.ec0f04p+91f},\r\n    {/* 0x1.1fcd01p+92 in decimal: */ \"5566877020882094785904508928\", chars_format::general, 28, errc{},\r\n        0x1.1fcd00p+92f},\r\n    {/* 0x1.c96155p+93 in decimal: */ \"17694039586751044919626825728\", chars_format::general, 29, errc{},\r\n        0x1.c96154p+93f},\r\n    {/* 0x1.f2cfc5p+94 in decimal: */ \"38593678210471799446053060608\", chars_format::general, 29, errc{},\r\n        0x1.f2cfc4p+94f},\r\n    {/* 0x1.23d719p+95 in decimal: */ \"45160087484195316006301728768\", chars_format::general, 29, errc{},\r\n        0x1.23d718p+95f},\r\n    {/* 0x1.a12f23p+96 in decimal: */ \"129112233891849681667027369984\", chars_format::general, 30, errc{},\r\n        0x1.a12f24p+96f},\r\n    {/* 0x1.5e0715p+97 in decimal: */ \"216656630175808433440891600896\", chars_format::general, 30, errc{},\r\n        0x1.5e0714p+97f},\r\n    {/* 0x1.54e25fp+98 in decimal: */ \"421994276797224408704817823744\", chars_format::general, 30, errc{},\r\n        0x1.54e260p+98f},\r\n    {/* 0x1.61449dp+99 in decimal: */ \"874649254673651316624210264064\", chars_format::general, 30, errc{},\r\n        0x1.61449cp+99f},\r\n    {/* 0x1.b5720dp+100 in decimal: */ \"2166125251618050241024537657344\", chars_format::general, 31, errc{},\r\n        0x1.b5720cp+100f},\r\n    {/* 0x1.8d6ba3p+101 in decimal: */ \"3935861558640302891443247120384\", chars_format::general, 31, errc{},\r\n        0x1.8d6ba4p+101f},\r\n    {/* 0x1.731b17p+102 in decimal: */ \"7350508048337774175132848226304\", chars_format::general, 31, errc{},\r\n        0x1.731b18p+102f},\r\n    {/* 0x1.c07785p+103 in decimal: */ \"17765603154846586025383087308800\", chars_format::general, 32, errc{},\r\n        0x1.c07784p+103f},\r\n    {/* 0x1.f4cb37p+104 in decimal: */ \"39676973205045980650327714562048\", chars_format::general, 32, errc{},\r\n        0x1.f4cb38p+104f},\r\n    {/* 0x1.e4820fp+105 in decimal: */ \"76773363684136016947294228185088\", chars_format::general, 32, errc{},\r\n        0x1.e48210p+105f},\r\n    {/* 0x1.fc14cbp+106 in decimal: */ \"161017366677536368674469150982144\", chars_format::general, 33, errc{},\r\n        0x1.fc14ccp+106f},\r\n    {/* 0x1.a87125p+107 in decimal: */ \"269022059539305734989663994642432\", chars_format::general, 33, errc{},\r\n        0x1.a87124p+107f},\r\n    {/* 0x1.38ff8fp+108 in decimal: */ \"396772452133553939418920234516480\", chars_format::general, 33, errc{},\r\n        0x1.38ff90p+108f},\r\n    {/* 0x1.13c1b5p+109 in decimal: */ \"699126211644530005899810908930048\", chars_format::general, 33, errc{},\r\n        0x1.13c1b4p+109f},\r\n    {/* 0x1.55eee7p+110 in decimal: */ \"1733807367140220814406037893283840\", chars_format::general, 34, errc{},\r\n        0x1.55eee8p+110f},\r\n    {/* 0x1.68ea01p+111 in decimal: */ \"3660103578413974514481484236062720\", chars_format::general, 34, errc{},\r\n        0x1.68ea00p+111f},\r\n    {/* 0x1.a20bfdp+112 in decimal: */ \"8478997023821539945225867390615552\", chars_format::general, 34, errc{},\r\n        0x1.a20bfcp+112f},\r\n    {/* 0x1.58562fp+113 in decimal: */ \"13967954142855725924178258573656064\", chars_format::general, 35, errc{},\r\n        0x1.585630p+113f},\r\n    {/* 0x1.8e458dp+114 in decimal: */ \"32311637611412935510718602954145792\", chars_format::general, 35, errc{},\r\n        0x1.8e458cp+114f},\r\n    {/* 0x1.635bb5p+115 in decimal: */ \"57660169510975349749437807131099136\", chars_format::general, 35, errc{},\r\n        0x1.635bb4p+115f},\r\n    {/* 0x1.019409p+116 in decimal: */ \"83588925144890861008382505730965504\", chars_format::general, 35, errc{},\r\n        0x1.019408p+116f},\r\n    {/* 0x1.b0eb7bp+117 in decimal: */ \"280981044275986616573540753022648320\", chars_format::general, 36, errc{},\r\n        0x1.b0eb7cp+117f},\r\n    {/* 0x1.a072a1p+118 in decimal: */ \"540580110894867345113842255044542464\", chars_format::general, 36, errc{},\r\n        0x1.a072a0p+118f},\r\n    {/* 0x1.211b6fp+119 in decimal: */ \"750565105750951431544116449153908736\", chars_format::general, 36, errc{},\r\n        0x1.211b70p+119f},\r\n    {/* 0x1.e54565p+120 in decimal: */ \"2519671464696457305794640027949465600\", chars_format::general, 37, errc{},\r\n        0x1.e54564p+120f},\r\n    {/* 0x1.93c0a7p+121 in decimal: */ \"4192806175473153074327132029524639744\", chars_format::general, 37, errc{},\r\n        0x1.93c0a8p+121f},\r\n    {/* 0x1.f33db1p+122 in decimal: */ \"10368829531117867053281330031553937408\", chars_format::general, 38, errc{},\r\n        0x1.f33db0p+122f},\r\n    {/* 0x1.f97c0fp+123 in decimal: */ \"20997008966187027788044272068598956032\", chars_format::general, 38, errc{},\r\n        0x1.f97c10p+123f},\r\n    {/* 0x1.46fa2fp+124 in decimal: */ \"27164209632110478318892728203406737408\", chars_format::general, 38, errc{},\r\n        0x1.46fa30p+124f},\r\n    {/* 0x1.73d8d9p+125 in decimal: */ \"61783690480066413003444625390581055488\", chars_format::general, 38, errc{},\r\n        0x1.73d8d8p+125f},\r\n    {/* 0x1.a19fe7p+126 in decimal: */ \"138779583669858850032422956217074188288\", chars_format::general, 39, errc{},\r\n        0x1.a19fe8p+126f},\r\n    {/* 0x1.f0b0b5p+127 in decimal: */ \"330107300636279331787628201852738207744\", chars_format::general, 39, errc{},\r\n        0x1.f0b0b4p+127f},\r\n};\r\n\r\n#endif // FLOAT_FROM_CHARS_TEST_CASES_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/float_general_precision_to_chars_test_cases.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef FLOAT_GENERAL_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n#define FLOAT_GENERAL_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\n// C11 7.21.6.1 \"The fprintf function\"/8:\r\n\r\n// \"Then, if a conversion with style E would have an exponent of X:\r\n// - if P > X >= -4, the conversion is with style f (or F) and precision P - (X + 1).\r\n// - otherwise, the conversion is with style e (or E) and precision P - 1.\"\r\n\r\n// \"Finally, [...] any trailing zeros are removed from the fractional portion of the result\r\n// and the decimal-point character is removed if there is no fractional portion remaining.\"\r\n\r\ninline constexpr FloatPrecisionToCharsTestCase float_general_precision_to_chars_test_cases[] = {\r\n    // Test special cases (zero, inf, nan) and an ordinary case. Also test negative signs.\r\n    {0.0f, chars_format::general, 4, \"0\"},\r\n    {-0.0f, chars_format::general, 4, \"-0\"},\r\n    {float_inf, chars_format::general, 4, \"inf\"},\r\n    {-float_inf, chars_format::general, 4, \"-inf\"},\r\n    {float_nan, chars_format::general, 4, \"nan\"},\r\n    {-float_nan, chars_format::general, 4, \"-nan(ind)\"},\r\n    {float_nan_payload, chars_format::general, 4, \"nan\"},\r\n    {-float_nan_payload, chars_format::general, 4, \"-nan\"},\r\n    {1.729f, chars_format::general, 4, \"1.729\"},\r\n    {-1.729f, chars_format::general, 4, \"-1.729\"},\r\n\r\n    // Test corner cases.\r\n    {0x0.000002p-126f, chars_format::general, 1000,\r\n        \"1.40129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125\"\r\n        \"e-45\"}, // min subnormal\r\n    {0x0.fffffep-126f, chars_format::general, 1000,\r\n        \"1.\"\r\n        \"17549421069244107548702944484928734882705242874589333385717453057158887047561890426550235133618116378784179687\"\r\n        \"5e-38\"}, // max subnormal\r\n    {0x1p-126f, chars_format::general, 1000,\r\n        \"1.1754943508222875079687365372222456778186655567720875215087517062784172594547271728515625e-38\"}, // min normal\r\n    {0x1.fffffep+127f, chars_format::general, 1000, \"340282346638528859811704183484516925440\"}, // max normal\r\n\r\n    {0x0.000002p-126f, chars_format::general, 6, \"1.4013e-45\"}, // min subnormal\r\n    {0x0.fffffep-126f, chars_format::general, 6, \"1.17549e-38\"}, // max subnormal\r\n    {0x1p-126f, chars_format::general, 6, \"1.17549e-38\"}, // min normal\r\n    {0x1.fffffep+127f, chars_format::general, 6, \"3.40282e+38\"}, // max normal\r\n\r\n    // Test maximum-length output (excluding minus signs).\r\n    {0x1.fffffep-126f, chars_format::general, 1000,\r\n        \"2.\"\r\n        \"35098856151472858345576598207153302664571798551798085536592623685000612993034607711706485133618116378784179687\"\r\n        \"5e-38\"}, // scientific, happens to be the same length as max subnormal\r\n    {0x1.fffffep-14f, chars_format::general, 1000, \"0.0001220703052240423858165740966796875\"}, // fixed\r\n\r\n    // Test varying precision. Negative precision requests P == 6. Zero precision requests P == 1.\r\n    // Here, the scientific exponent X is 0.\r\n    // Therefore, fixed notation is always chosen with precision P - (X + 1) == P - 1.\r\n    {0x1.b04p0f, chars_format::general, -2, \"1.68848\"},\r\n    {0x1.b04p0f, chars_format::general, -1, \"1.68848\"},\r\n    {0x1.b04p0f, chars_format::general, 0, \"2\"},\r\n    {0x1.b04p0f, chars_format::general, 1, \"2\"}, // fixed notation trims decimal point\r\n    {0x1.b04p0f, chars_format::general, 2, \"1.7\"},\r\n    {0x1.b04p0f, chars_format::general, 3, \"1.69\"},\r\n    {0x1.b04p0f, chars_format::general, 4, \"1.688\"},\r\n    {0x1.b04p0f, chars_format::general, 5, \"1.6885\"},\r\n    {0x1.b04p0f, chars_format::general, 6, \"1.68848\"},\r\n    {0x1.b04p0f, chars_format::general, 7, \"1.688477\"},\r\n    {0x1.b04p0f, chars_format::general, 8, \"1.6884766\"},\r\n    {0x1.b04p0f, chars_format::general, 9, \"1.68847656\"},\r\n    {0x1.b04p0f, chars_format::general, 10, \"1.688476562\"}, // round to even\r\n    {0x1.b04p0f, chars_format::general, 11, \"1.6884765625\"}, // exact\r\n    {0x1.b04p0f, chars_format::general, 12, \"1.6884765625\"}, // trim trailing zeros\r\n    {0x1.b04p0f, chars_format::general, 13, \"1.6884765625\"},\r\n\r\n    // Here, the scientific exponent X is -5.\r\n    // Therefore, scientific notation is always chosen with precision P - 1.\r\n    {0x1.8p-15f, chars_format::general, -2, \"4.57764e-05\"},\r\n    {0x1.8p-15f, chars_format::general, -1, \"4.57764e-05\"},\r\n    {0x1.8p-15f, chars_format::general, 0, \"5e-05\"},\r\n    {0x1.8p-15f, chars_format::general, 1, \"5e-05\"}, // scientific notation trims decimal point\r\n    {0x1.8p-15f, chars_format::general, 2, \"4.6e-05\"},\r\n    {0x1.8p-15f, chars_format::general, 3, \"4.58e-05\"},\r\n    {0x1.8p-15f, chars_format::general, 4, \"4.578e-05\"},\r\n    {0x1.8p-15f, chars_format::general, 5, \"4.5776e-05\"},\r\n    {0x1.8p-15f, chars_format::general, 6, \"4.57764e-05\"},\r\n    {0x1.8p-15f, chars_format::general, 7, \"4.577637e-05\"},\r\n    {0x1.8p-15f, chars_format::general, 8, \"4.5776367e-05\"},\r\n    {0x1.8p-15f, chars_format::general, 9, \"4.57763672e-05\"},\r\n    {0x1.8p-15f, chars_format::general, 10, \"4.577636719e-05\"},\r\n    {0x1.8p-15f, chars_format::general, 11, \"4.5776367188e-05\"}, // round to even\r\n    {0x1.8p-15f, chars_format::general, 12, \"4.57763671875e-05\"}, // exact\r\n    {0x1.8p-15f, chars_format::general, 13, \"4.57763671875e-05\"}, // trim trailing zeros\r\n    {0x1.8p-15f, chars_format::general, 14, \"4.57763671875e-05\"},\r\n\r\n    // Trim trailing zeros.\r\n    {0x1.80015p0f, chars_format::general, 1, \"2\"}, // fixed notation trims decimal point\r\n    {0x1.80015p0f, chars_format::general, 2, \"1.5\"},\r\n    {0x1.80015p0f, chars_format::general, 3, \"1.5\"}, // general trims trailing zeros\r\n    {0x1.80015p0f, chars_format::general, 4, \"1.5\"},\r\n    {0x1.80015p0f, chars_format::general, 5, \"1.5\"},\r\n    {0x1.80015p0f, chars_format::general, 6, \"1.50002\"},\r\n    {0x1.80015p0f, chars_format::general, 7, \"1.50002\"},\r\n    {0x1.80015p0f, chars_format::general, 8, \"1.50002\"},\r\n    {0x1.80015p0f, chars_format::general, 9, \"1.50002003\"},\r\n    {0x1.80015p0f, chars_format::general, 10, \"1.500020027\"},\r\n    {0x1.80015p0f, chars_format::general, 11, \"1.5000200272\"},\r\n    {0x1.80015p0f, chars_format::general, 12, \"1.50002002716\"},\r\n    {0x1.80015p0f, chars_format::general, 13, \"1.500020027161\"},\r\n    {0x1.80015p0f, chars_format::general, 14, \"1.5000200271606\"},\r\n    {0x1.80015p0f, chars_format::general, 15, \"1.50002002716064\"},\r\n    {0x1.80015p0f, chars_format::general, 16, \"1.500020027160645\"},\r\n    {0x1.80015p0f, chars_format::general, 17, \"1.5000200271606445\"},\r\n    {0x1.80015p0f, chars_format::general, 18, \"1.50002002716064453\"},\r\n    {0x1.80015p0f, chars_format::general, 19, \"1.500020027160644531\"},\r\n    {0x1.80015p0f, chars_format::general, 20, \"1.5000200271606445312\"}, // round to even\r\n    {0x1.80015p0f, chars_format::general, 21, \"1.50002002716064453125\"}, // exact\r\n\r\n    // Trim trailing zeros and decimal point.\r\n    {0x1.00015p0f, chars_format::general, 1, \"1\"}, // fixed notation trims decimal point\r\n    {0x1.00015p0f, chars_format::general, 2, \"1\"}, // general trims decimal point and trailing zeros\r\n    {0x1.00015p0f, chars_format::general, 3, \"1\"},\r\n    {0x1.00015p0f, chars_format::general, 4, \"1\"},\r\n    {0x1.00015p0f, chars_format::general, 5, \"1\"},\r\n    {0x1.00015p0f, chars_format::general, 6, \"1.00002\"},\r\n    {0x1.00015p0f, chars_format::general, 7, \"1.00002\"},\r\n    {0x1.00015p0f, chars_format::general, 8, \"1.00002\"},\r\n    {0x1.00015p0f, chars_format::general, 9, \"1.00002003\"},\r\n    {0x1.00015p0f, chars_format::general, 10, \"1.000020027\"},\r\n    {0x1.00015p0f, chars_format::general, 11, \"1.0000200272\"},\r\n    {0x1.00015p0f, chars_format::general, 12, \"1.00002002716\"},\r\n    {0x1.00015p0f, chars_format::general, 13, \"1.000020027161\"},\r\n    {0x1.00015p0f, chars_format::general, 14, \"1.0000200271606\"},\r\n    {0x1.00015p0f, chars_format::general, 15, \"1.00002002716064\"},\r\n    {0x1.00015p0f, chars_format::general, 16, \"1.000020027160645\"},\r\n    {0x1.00015p0f, chars_format::general, 17, \"1.0000200271606445\"},\r\n    {0x1.00015p0f, chars_format::general, 18, \"1.00002002716064453\"},\r\n    {0x1.00015p0f, chars_format::general, 19, \"1.000020027160644531\"},\r\n    {0x1.00015p0f, chars_format::general, 20, \"1.0000200271606445312\"}, // round to even\r\n    {0x1.00015p0f, chars_format::general, 21, \"1.00002002716064453125\"}, // exact\r\n\r\n    // Trim trailing zeros, scientific notation.\r\n    {0x1.5cf752p-20f, chars_format::general, 1, \"1e-06\"}, // scientific notation trims decimal point\r\n    {0x1.5cf752p-20f, chars_format::general, 2, \"1.3e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 3, \"1.3e-06\"}, // general trims trailing zeros\r\n    {0x1.5cf752p-20f, chars_format::general, 4, \"1.3e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 5, \"1.3e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 6, \"1.3e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 7, \"1.3e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 8, \"1.3e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 9, \"1.30000001e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 10, \"1.300000008e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 11, \"1.3000000081e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 12, \"1.30000000809e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 13, \"1.300000008086e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 14, \"1.3000000080865e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 15, \"1.3000000080865e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 16, \"1.300000008086499e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 17, \"1.3000000080864993e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 18, \"1.30000000808649929e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 19, \"1.300000008086499292e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 20, \"1.3000000080864992924e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 21, \"1.3000000080864992924e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 22, \"1.300000008086499292403e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 23, \"1.3000000080864992924035e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 24, \"1.30000000808649929240346e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 25, \"1.30000000808649929240346e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 26, \"1.3000000080864992924034595e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 27, \"1.30000000808649929240345955e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 28, \"1.300000008086499292403459549e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 29, \"1.300000008086499292403459549e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 30, \"1.30000000808649929240345954895e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 31, \"1.30000000808649929240345954895e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 32, \"1.3000000080864992924034595489502e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 33, \"1.3000000080864992924034595489502e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 34, \"1.300000008086499292403459548950195e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 35, \"1.3000000080864992924034595489501953e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 36, \"1.30000000808649929240345954895019531e-06\"},\r\n    {0x1.5cf752p-20f, chars_format::general, 37, \"1.300000008086499292403459548950195312e-06\"}, // round to even\r\n    {0x1.5cf752p-20f, chars_format::general, 38, \"1.3000000080864992924034595489501953125e-06\"}, // exact\r\n\r\n    // Trim trailing zeros and decimal point, scientific notation.\r\n    {0x1.92a738p-19f, chars_format::general, 1, \"3e-06\"}, // scientific notation trims decimal point\r\n    {0x1.92a738p-19f, chars_format::general, 2, \"3e-06\"}, // general trims decimal point and trailing zeros\r\n    {0x1.92a738p-19f, chars_format::general, 3, \"3e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 4, \"3e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 5, \"3e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 6, \"3e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 7, \"3e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 8, \"3.0000001e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 9, \"3.00000011e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 10, \"3.000000106e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 11, \"3.0000001061e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 12, \"3.00000010611e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 13, \"3.000000106113e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 14, \"3.0000001061126e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 15, \"3.00000010611257e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 16, \"3.000000106112566e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 17, \"3.0000001061125658e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 18, \"3.00000010611256585e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 19, \"3.000000106112565845e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 20, \"3.0000001061125658453e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 21, \"3.00000010611256584525e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 22, \"3.000000106112565845251e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 23, \"3.0000001061125658452511e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 24, \"3.00000010611256584525108e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 25, \"3.000000106112565845251083e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 26, \"3.0000001061125658452510834e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 27, \"3.00000010611256584525108337e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 28, \"3.000000106112565845251083374e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 29, \"3.000000106112565845251083374e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 30, \"3.00000010611256584525108337402e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 31, \"3.000000106112565845251083374023e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 32, \"3.0000001061125658452510833740234e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 33, \"3.00000010611256584525108337402344e-06\"},\r\n    {0x1.92a738p-19f, chars_format::general, 34, \"3.000000106112565845251083374023438e-06\"}, // round to even\r\n    {0x1.92a738p-19f, chars_format::general, 35, \"3.0000001061125658452510833740234375e-06\"}, // exact\r\n\r\n    // Test a large precision with fixed notation and scientific notation,\r\n    // verifying that we remain within the bounds of any lookup tables.\r\n    {0x1.ba9fbep+0f, chars_format::general, 5000, \"1.72899997234344482421875\"},\r\n    {0x1.d01ffap-20f, chars_format::general, 5000, \"1.7290000187131226994097232818603515625e-06\"},\r\n\r\n    // Test the transitions between fixed notation and scientific notation.\r\n    {5555555.0f, chars_format::general, 1, \"6e+06\"},\r\n    {555555.0f, chars_format::general, 1, \"6e+05\"},\r\n    {55555.0f, chars_format::general, 1, \"6e+04\"},\r\n    {5555.0f, chars_format::general, 1, \"6e+03\"},\r\n    {555.0f, chars_format::general, 1, \"6e+02\"},\r\n    {55.0f, chars_format::general, 1, \"6e+01\"}, // round to even\r\n    {5.0f, chars_format::general, 1, \"5\"},\r\n    {0x1p-3f, chars_format::general, 1, \"0.1\"}, // 0.125\r\n    {0x1p-6f, chars_format::general, 1, \"0.02\"}, // 0.015625\r\n    {0x1p-9f, chars_format::general, 1, \"0.002\"}, // 0.001953125\r\n    {0x1p-13f, chars_format::general, 1, \"0.0001\"}, // 0.0001220703125\r\n    {0x1p-16f, chars_format::general, 1, \"2e-05\"}, // 1.52587890625e-05\r\n    {0x1p-19f, chars_format::general, 1, \"2e-06\"}, // 1.9073486328125e-06\r\n\r\n    {5555555.0f, chars_format::general, 2, \"5.6e+06\"},\r\n    {555555.0f, chars_format::general, 2, \"5.6e+05\"},\r\n    {55555.0f, chars_format::general, 2, \"5.6e+04\"},\r\n    {5555.0f, chars_format::general, 2, \"5.6e+03\"},\r\n    {555.0f, chars_format::general, 2, \"5.6e+02\"}, // round to even\r\n    {55.0f, chars_format::general, 2, \"55\"},\r\n    {5.0f, chars_format::general, 2, \"5\"},\r\n    {0x1p-3f, chars_format::general, 2, \"0.12\"}, // round to even\r\n    {0x1p-6f, chars_format::general, 2, \"0.016\"},\r\n    {0x1p-9f, chars_format::general, 2, \"0.002\"},\r\n    {0x1p-13f, chars_format::general, 2, \"0.00012\"},\r\n    {0x1p-16f, chars_format::general, 2, \"1.5e-05\"},\r\n    {0x1p-19f, chars_format::general, 2, \"1.9e-06\"},\r\n\r\n    {5555555.0f, chars_format::general, 3, \"5.56e+06\"},\r\n    {555555.0f, chars_format::general, 3, \"5.56e+05\"},\r\n    {55555.0f, chars_format::general, 3, \"5.56e+04\"},\r\n    {5555.0f, chars_format::general, 3, \"5.56e+03\"}, // round to even\r\n    {555.0f, chars_format::general, 3, \"555\"},\r\n    {55.0f, chars_format::general, 3, \"55\"},\r\n    {5.0f, chars_format::general, 3, \"5\"},\r\n    {0x1p-3f, chars_format::general, 3, \"0.125\"},\r\n    {0x1p-6f, chars_format::general, 3, \"0.0156\"},\r\n    {0x1p-9f, chars_format::general, 3, \"0.00195\"},\r\n    {0x1p-13f, chars_format::general, 3, \"0.000122\"},\r\n    {0x1p-16f, chars_format::general, 3, \"1.53e-05\"},\r\n    {0x1p-19f, chars_format::general, 3, \"1.91e-06\"},\r\n\r\n    {5555555.0f, chars_format::general, 4, \"5.556e+06\"},\r\n    {555555.0f, chars_format::general, 4, \"5.556e+05\"},\r\n    {55555.0f, chars_format::general, 4, \"5.556e+04\"}, // round to even\r\n    {5555.0f, chars_format::general, 4, \"5555\"},\r\n    {555.0f, chars_format::general, 4, \"555\"},\r\n    {55.0f, chars_format::general, 4, \"55\"},\r\n    {5.0f, chars_format::general, 4, \"5\"},\r\n    {0x1p-3f, chars_format::general, 4, \"0.125\"},\r\n    {0x1p-6f, chars_format::general, 4, \"0.01562\"}, // round to even\r\n    {0x1p-9f, chars_format::general, 4, \"0.001953\"},\r\n    {0x1p-13f, chars_format::general, 4, \"0.0001221\"},\r\n    {0x1p-16f, chars_format::general, 4, \"1.526e-05\"},\r\n    {0x1p-19f, chars_format::general, 4, \"1.907e-06\"},\r\n\r\n    {5555555.0f, chars_format::general, 5, \"5.5556e+06\"},\r\n    {555555.0f, chars_format::general, 5, \"5.5556e+05\"}, // round to even\r\n    {55555.0f, chars_format::general, 5, \"55555\"},\r\n    {5555.0f, chars_format::general, 5, \"5555\"},\r\n    {555.0f, chars_format::general, 5, \"555\"},\r\n    {55.0f, chars_format::general, 5, \"55\"},\r\n    {5.0f, chars_format::general, 5, \"5\"},\r\n    {0x1p-3f, chars_format::general, 5, \"0.125\"},\r\n    {0x1p-6f, chars_format::general, 5, \"0.015625\"},\r\n    {0x1p-9f, chars_format::general, 5, \"0.0019531\"},\r\n    {0x1p-13f, chars_format::general, 5, \"0.00012207\"},\r\n    {0x1p-16f, chars_format::general, 5, \"1.5259e-05\"},\r\n    {0x1p-19f, chars_format::general, 5, \"1.9073e-06\"},\r\n\r\n    // Tricky corner cases.\r\n    // In these scenarios, rounding can adjust the scientific exponent X,\r\n    // which affects the transition between fixed notation and scientific notation.\r\n    {999.999f, chars_format::general, 1, \"1e+03\"}, // \"%.0e\" is \"1e+03\"; X == 3\r\n    {999.999f, chars_format::general, 2, \"1e+03\"}, // \"%.1e\" is \"1.0e+03\"; X == 3\r\n    {999.999f, chars_format::general, 3, \"1e+03\"}, // \"%.2e\" is \"1.00e+03\"; X == 3\r\n    {999.999f, chars_format::general, 4, \"1000\"}, // \"%.3e\" is \"1.000e+03\"; X == 3\r\n    {999.999f, chars_format::general, 5, \"1000\"}, // \"%.4e\" is \"1.0000e+03\"; X == 3\r\n    {999.999f, chars_format::general, 6, \"999.999\"}, // \"%.5e\" is \"9.99999e+02\"; X == 2\r\n\r\n    {999.99f, chars_format::general, 1, \"1e+03\"},\r\n    {999.99f, chars_format::general, 2, \"1e+03\"},\r\n    {999.99f, chars_format::general, 3, \"1e+03\"},\r\n    {999.99f, chars_format::general, 4, \"1000\"},\r\n    {999.99f, chars_format::general, 5, \"999.99\"},\r\n    {999.99f, chars_format::general, 6, \"999.99\"},\r\n\r\n    // C11's Standardese is slightly vague about how to perform the trial formatting in scientific notation,\r\n    // but the intention is to use precision P - 1, which is what's used when scientific notation is actually chosen.\r\n    // This example verifies this behavior. Here, P == 3 performs trial formatting with \"%.2e\", triggering rounding.\r\n    // That increases X to 3, forcing scientific notation to be chosen.\r\n    // If P == 3 performed trial formatting with \"%.3e\", rounding wouldn't happen,\r\n    // X would be 2, and fixed notation would be chosen.\r\n    {999.9f, chars_format::general, 1, \"1e+03\"}, // \"%.0e\" is \"1e+03\"; X == 3\r\n    {999.9f, chars_format::general, 2, \"1e+03\"}, // \"%.1e\" is \"1.0e+03\"; X == 3\r\n    {999.9f, chars_format::general, 3, \"1e+03\"}, // \"%.2e\" is \"1.00e+03\"; X == 3; SPECIAL CORNER CASE\r\n    {999.9f, chars_format::general, 4, \"999.9\"}, // \"%.3e\" is \"9.999e+02\"; X == 2\r\n    {999.9f, chars_format::general, 5, \"999.9\"}, // \"%.4e\" is \"9.9990e+02\"; X == 2\r\n    {999.9f, chars_format::general, 6, \"999.9\"}, // \"%.5e\" is \"9.99900e+02\"; X == 2\r\n\r\n    {999.0f, chars_format::general, 1, \"1e+03\"},\r\n    {999.0f, chars_format::general, 2, \"1e+03\"},\r\n    {999.0f, chars_format::general, 3, \"999\"},\r\n    {999.0f, chars_format::general, 4, \"999\"},\r\n    {999.0f, chars_format::general, 5, \"999\"},\r\n    {999.0f, chars_format::general, 6, \"999\"},\r\n\r\n    {99.9999f, chars_format::general, 1, \"1e+02\"},\r\n    {99.9999f, chars_format::general, 2, \"1e+02\"},\r\n    {99.9999f, chars_format::general, 3, \"100\"},\r\n    {99.9999f, chars_format::general, 4, \"100\"},\r\n    {99.9999f, chars_format::general, 5, \"100\"},\r\n    {99.9999f, chars_format::general, 6, \"99.9999\"},\r\n\r\n    {99.999f, chars_format::general, 1, \"1e+02\"},\r\n    {99.999f, chars_format::general, 2, \"1e+02\"},\r\n    {99.999f, chars_format::general, 3, \"100\"},\r\n    {99.999f, chars_format::general, 4, \"100\"},\r\n    {99.999f, chars_format::general, 5, \"99.999\"},\r\n    {99.999f, chars_format::general, 6, \"99.999\"},\r\n\r\n    {99.99f, chars_format::general, 1, \"1e+02\"},\r\n    {99.99f, chars_format::general, 2, \"1e+02\"},\r\n    {99.99f, chars_format::general, 3, \"100\"},\r\n    {99.99f, chars_format::general, 4, \"99.99\"},\r\n    {99.99f, chars_format::general, 5, \"99.99\"},\r\n    {99.99f, chars_format::general, 6, \"99.99\"},\r\n\r\n    {99.9f, chars_format::general, 1, \"1e+02\"},\r\n    {99.9f, chars_format::general, 2, \"1e+02\"},\r\n    {99.9f, chars_format::general, 3, \"99.9\"},\r\n    {99.9f, chars_format::general, 4, \"99.9\"},\r\n    {99.9f, chars_format::general, 5, \"99.9\"},\r\n    {99.9f, chars_format::general, 6, \"99.9\"},\r\n\r\n    {99.0f, chars_format::general, 1, \"1e+02\"},\r\n    {99.0f, chars_format::general, 2, \"99\"},\r\n    {99.0f, chars_format::general, 3, \"99\"},\r\n    {99.0f, chars_format::general, 4, \"99\"},\r\n    {99.0f, chars_format::general, 5, \"99\"},\r\n    {99.0f, chars_format::general, 6, \"99\"},\r\n\r\n    {9.99999f, chars_format::general, 1, \"1e+01\"},\r\n    {9.99999f, chars_format::general, 2, \"10\"},\r\n    {9.99999f, chars_format::general, 3, \"10\"},\r\n    {9.99999f, chars_format::general, 4, \"10\"},\r\n    {9.99999f, chars_format::general, 5, \"10\"},\r\n    {9.99999f, chars_format::general, 6, \"9.99999\"},\r\n\r\n    {9.9999f, chars_format::general, 1, \"1e+01\"},\r\n    {9.9999f, chars_format::general, 2, \"10\"},\r\n    {9.9999f, chars_format::general, 3, \"10\"},\r\n    {9.9999f, chars_format::general, 4, \"10\"},\r\n    {9.9999f, chars_format::general, 5, \"9.9999\"},\r\n    {9.9999f, chars_format::general, 6, \"9.9999\"},\r\n\r\n    {9.999f, chars_format::general, 1, \"1e+01\"},\r\n    {9.999f, chars_format::general, 2, \"10\"},\r\n    {9.999f, chars_format::general, 3, \"10\"},\r\n    {9.999f, chars_format::general, 4, \"9.999\"},\r\n    {9.999f, chars_format::general, 5, \"9.999\"},\r\n    {9.999f, chars_format::general, 6, \"9.999\"},\r\n\r\n    {9.99f, chars_format::general, 1, \"1e+01\"},\r\n    {9.99f, chars_format::general, 2, \"10\"},\r\n    {9.99f, chars_format::general, 3, \"9.99\"},\r\n    {9.99f, chars_format::general, 4, \"9.99\"},\r\n    {9.99f, chars_format::general, 5, \"9.99\"},\r\n    {9.99f, chars_format::general, 6, \"9.99\"},\r\n\r\n    {9.9f, chars_format::general, 1, \"1e+01\"},\r\n    {9.9f, chars_format::general, 2, \"9.9\"},\r\n    {9.9f, chars_format::general, 3, \"9.9\"},\r\n    {9.9f, chars_format::general, 4, \"9.9\"},\r\n    {9.9f, chars_format::general, 5, \"9.9\"},\r\n    {9.9f, chars_format::general, 6, \"9.9\"},\r\n\r\n    {9.0f, chars_format::general, 1, \"9\"},\r\n    {9.0f, chars_format::general, 2, \"9\"},\r\n    {9.0f, chars_format::general, 3, \"9\"},\r\n    {9.0f, chars_format::general, 4, \"9\"},\r\n    {9.0f, chars_format::general, 5, \"9\"},\r\n    {9.0f, chars_format::general, 6, \"9\"},\r\n\r\n    {0.999999f, chars_format::general, 1, \"1\"},\r\n    {0.999999f, chars_format::general, 2, \"1\"},\r\n    {0.999999f, chars_format::general, 3, \"1\"},\r\n    {0.999999f, chars_format::general, 4, \"1\"},\r\n    {0.999999f, chars_format::general, 5, \"1\"},\r\n    {0.999999f, chars_format::general, 6, \"0.999999\"},\r\n\r\n    {0.99999f, chars_format::general, 1, \"1\"},\r\n    {0.99999f, chars_format::general, 2, \"1\"},\r\n    {0.99999f, chars_format::general, 3, \"1\"},\r\n    {0.99999f, chars_format::general, 4, \"1\"},\r\n    {0.99999f, chars_format::general, 5, \"0.99999\"},\r\n    {0.99999f, chars_format::general, 6, \"0.99999\"},\r\n\r\n    {0.9999f, chars_format::general, 1, \"1\"},\r\n    {0.9999f, chars_format::general, 2, \"1\"},\r\n    {0.9999f, chars_format::general, 3, \"1\"},\r\n    {0.9999f, chars_format::general, 4, \"0.9999\"},\r\n    {0.9999f, chars_format::general, 5, \"0.9999\"},\r\n    {0.9999f, chars_format::general, 6, \"0.9999\"},\r\n\r\n    {0.999f, chars_format::general, 1, \"1\"},\r\n    {0.999f, chars_format::general, 2, \"1\"},\r\n    {0.999f, chars_format::general, 3, \"0.999\"},\r\n    {0.999f, chars_format::general, 4, \"0.999\"},\r\n    {0.999f, chars_format::general, 5, \"0.999\"},\r\n    {0.999f, chars_format::general, 6, \"0.999\"},\r\n\r\n    {0.99f, chars_format::general, 1, \"1\"},\r\n    {0.99f, chars_format::general, 2, \"0.99\"},\r\n    {0.99f, chars_format::general, 3, \"0.99\"},\r\n    {0.99f, chars_format::general, 4, \"0.99\"},\r\n    {0.99f, chars_format::general, 5, \"0.99\"},\r\n    {0.99f, chars_format::general, 6, \"0.99\"},\r\n\r\n    {0.9f, chars_format::general, 1, \"0.9\"},\r\n    {0.9f, chars_format::general, 2, \"0.9\"},\r\n    {0.9f, chars_format::general, 3, \"0.9\"},\r\n    {0.9f, chars_format::general, 4, \"0.9\"},\r\n    {0.9f, chars_format::general, 5, \"0.9\"},\r\n    {0.9f, chars_format::general, 6, \"0.9\"},\r\n\r\n    {0.0999999f, chars_format::general, 1, \"0.1\"},\r\n    {0.0999999f, chars_format::general, 2, \"0.1\"},\r\n    {0.0999999f, chars_format::general, 3, \"0.1\"},\r\n    {0.0999999f, chars_format::general, 4, \"0.1\"},\r\n    {0.0999999f, chars_format::general, 5, \"0.1\"},\r\n    {0.0999999f, chars_format::general, 6, \"0.0999999\"},\r\n\r\n    {0.099999f, chars_format::general, 1, \"0.1\"},\r\n    {0.099999f, chars_format::general, 2, \"0.1\"},\r\n    {0.099999f, chars_format::general, 3, \"0.1\"},\r\n    {0.099999f, chars_format::general, 4, \"0.1\"},\r\n    {0.099999f, chars_format::general, 5, \"0.099999\"},\r\n    {0.099999f, chars_format::general, 6, \"0.099999\"},\r\n\r\n    {0.09999f, chars_format::general, 1, \"0.1\"},\r\n    {0.09999f, chars_format::general, 2, \"0.1\"},\r\n    {0.09999f, chars_format::general, 3, \"0.1\"},\r\n    {0.09999f, chars_format::general, 4, \"0.09999\"},\r\n    {0.09999f, chars_format::general, 5, \"0.09999\"},\r\n    {0.09999f, chars_format::general, 6, \"0.09999\"},\r\n\r\n    {0.0999f, chars_format::general, 1, \"0.1\"},\r\n    {0.0999f, chars_format::general, 2, \"0.1\"},\r\n    {0.0999f, chars_format::general, 3, \"0.0999\"},\r\n    {0.0999f, chars_format::general, 4, \"0.0999\"},\r\n    {0.0999f, chars_format::general, 5, \"0.0999\"},\r\n    {0.0999f, chars_format::general, 6, \"0.0999\"},\r\n\r\n    {0.099f, chars_format::general, 1, \"0.1\"},\r\n    {0.099f, chars_format::general, 2, \"0.099\"},\r\n    {0.099f, chars_format::general, 3, \"0.099\"},\r\n    {0.099f, chars_format::general, 4, \"0.099\"},\r\n    {0.099f, chars_format::general, 5, \"0.099\"},\r\n    {0.099f, chars_format::general, 6, \"0.099\"},\r\n\r\n    {0.09f, chars_format::general, 1, \"0.09\"},\r\n    {0.09f, chars_format::general, 2, \"0.09\"},\r\n    {0.09f, chars_format::general, 3, \"0.09\"},\r\n    {0.09f, chars_format::general, 4, \"0.09\"},\r\n    {0.09f, chars_format::general, 5, \"0.09\"},\r\n    {0.09f, chars_format::general, 6, \"0.09\"},\r\n\r\n    {0.00999999f, chars_format::general, 1, \"0.01\"},\r\n    {0.00999999f, chars_format::general, 2, \"0.01\"},\r\n    {0.00999999f, chars_format::general, 3, \"0.01\"},\r\n    {0.00999999f, chars_format::general, 4, \"0.01\"},\r\n    {0.00999999f, chars_format::general, 5, \"0.01\"},\r\n    {0.00999999f, chars_format::general, 6, \"0.00999999\"},\r\n\r\n    {0.0099999f, chars_format::general, 1, \"0.01\"},\r\n    {0.0099999f, chars_format::general, 2, \"0.01\"},\r\n    {0.0099999f, chars_format::general, 3, \"0.01\"},\r\n    {0.0099999f, chars_format::general, 4, \"0.01\"},\r\n    {0.0099999f, chars_format::general, 5, \"0.0099999\"},\r\n    {0.0099999f, chars_format::general, 6, \"0.0099999\"},\r\n\r\n    {0.009999f, chars_format::general, 1, \"0.01\"},\r\n    {0.009999f, chars_format::general, 2, \"0.01\"},\r\n    {0.009999f, chars_format::general, 3, \"0.01\"},\r\n    {0.009999f, chars_format::general, 4, \"0.009999\"},\r\n    {0.009999f, chars_format::general, 5, \"0.009999\"},\r\n    {0.009999f, chars_format::general, 6, \"0.009999\"},\r\n\r\n    {0.00999f, chars_format::general, 1, \"0.01\"},\r\n    {0.00999f, chars_format::general, 2, \"0.01\"},\r\n    {0.00999f, chars_format::general, 3, \"0.00999\"},\r\n    {0.00999f, chars_format::general, 4, \"0.00999\"},\r\n    {0.00999f, chars_format::general, 5, \"0.00999\"},\r\n    {0.00999f, chars_format::general, 6, \"0.00999\"},\r\n\r\n    {0.0099f, chars_format::general, 1, \"0.01\"},\r\n    {0.0099f, chars_format::general, 2, \"0.0099\"},\r\n    {0.0099f, chars_format::general, 3, \"0.0099\"},\r\n    {0.0099f, chars_format::general, 4, \"0.0099\"},\r\n    {0.0099f, chars_format::general, 5, \"0.0099\"},\r\n    {0.0099f, chars_format::general, 6, \"0.0099\"},\r\n\r\n    {0.009f, chars_format::general, 1, \"0.009\"},\r\n    {0.009f, chars_format::general, 2, \"0.009\"},\r\n    {0.009f, chars_format::general, 3, \"0.009\"},\r\n    {0.009f, chars_format::general, 4, \"0.009\"},\r\n    {0.009f, chars_format::general, 5, \"0.009\"},\r\n    {0.009f, chars_format::general, 6, \"0.009\"},\r\n\r\n    {0.000999999f, chars_format::general, 1, \"0.001\"},\r\n    {0.000999999f, chars_format::general, 2, \"0.001\"},\r\n    {0.000999999f, chars_format::general, 3, \"0.001\"},\r\n    {0.000999999f, chars_format::general, 4, \"0.001\"},\r\n    {0.000999999f, chars_format::general, 5, \"0.001\"},\r\n    {0.000999999f, chars_format::general, 6, \"0.000999999\"},\r\n\r\n    {0.00099999f, chars_format::general, 1, \"0.001\"},\r\n    {0.00099999f, chars_format::general, 2, \"0.001\"},\r\n    {0.00099999f, chars_format::general, 3, \"0.001\"},\r\n    {0.00099999f, chars_format::general, 4, \"0.001\"},\r\n    {0.00099999f, chars_format::general, 5, \"0.00099999\"},\r\n    {0.00099999f, chars_format::general, 6, \"0.00099999\"},\r\n\r\n    {0.0009999f, chars_format::general, 1, \"0.001\"},\r\n    {0.0009999f, chars_format::general, 2, \"0.001\"},\r\n    {0.0009999f, chars_format::general, 3, \"0.001\"},\r\n    {0.0009999f, chars_format::general, 4, \"0.0009999\"},\r\n    {0.0009999f, chars_format::general, 5, \"0.0009999\"},\r\n    {0.0009999f, chars_format::general, 6, \"0.0009999\"},\r\n\r\n    {0.000999f, chars_format::general, 1, \"0.001\"},\r\n    {0.000999f, chars_format::general, 2, \"0.001\"},\r\n    {0.000999f, chars_format::general, 3, \"0.000999\"},\r\n    {0.000999f, chars_format::general, 4, \"0.000999\"},\r\n    {0.000999f, chars_format::general, 5, \"0.000999\"},\r\n    {0.000999f, chars_format::general, 6, \"0.000999\"},\r\n\r\n    {0.00099f, chars_format::general, 1, \"0.001\"},\r\n    {0.00099f, chars_format::general, 2, \"0.00099\"},\r\n    {0.00099f, chars_format::general, 3, \"0.00099\"},\r\n    {0.00099f, chars_format::general, 4, \"0.00099\"},\r\n    {0.00099f, chars_format::general, 5, \"0.00099\"},\r\n    {0.00099f, chars_format::general, 6, \"0.00099\"},\r\n\r\n    {0.0009f, chars_format::general, 1, \"0.0009\"},\r\n    {0.0009f, chars_format::general, 2, \"0.0009\"},\r\n    {0.0009f, chars_format::general, 3, \"0.0009\"},\r\n    {0.0009f, chars_format::general, 4, \"0.0009\"},\r\n    {0.0009f, chars_format::general, 5, \"0.0009\"},\r\n    {0.0009f, chars_format::general, 6, \"0.0009\"},\r\n\r\n    // Having a scientific exponent X == -5 triggers scientific notation.\r\n    // If rounding adjusts this to X == -4, then fixed notation will be selected.\r\n    {0.0000999999f, chars_format::general, 1, \"0.0001\"},\r\n    {0.0000999999f, chars_format::general, 2, \"0.0001\"},\r\n    {0.0000999999f, chars_format::general, 3, \"0.0001\"},\r\n    {0.0000999999f, chars_format::general, 4, \"0.0001\"},\r\n    {0.0000999999f, chars_format::general, 5, \"0.0001\"},\r\n    {0.0000999999f, chars_format::general, 6, \"9.99999e-05\"},\r\n\r\n    {0.000099999f, chars_format::general, 1, \"0.0001\"},\r\n    {0.000099999f, chars_format::general, 2, \"0.0001\"},\r\n    {0.000099999f, chars_format::general, 3, \"0.0001\"},\r\n    {0.000099999f, chars_format::general, 4, \"0.0001\"},\r\n    {0.000099999f, chars_format::general, 5, \"9.9999e-05\"},\r\n    {0.000099999f, chars_format::general, 6, \"9.9999e-05\"},\r\n\r\n    {0.00009999f, chars_format::general, 1, \"0.0001\"},\r\n    {0.00009999f, chars_format::general, 2, \"0.0001\"},\r\n    {0.00009999f, chars_format::general, 3, \"0.0001\"},\r\n    {0.00009999f, chars_format::general, 4, \"9.999e-05\"},\r\n    {0.00009999f, chars_format::general, 5, \"9.999e-05\"},\r\n    {0.00009999f, chars_format::general, 6, \"9.999e-05\"},\r\n\r\n    {0.0000999f, chars_format::general, 1, \"0.0001\"},\r\n    {0.0000999f, chars_format::general, 2, \"0.0001\"},\r\n    {0.0000999f, chars_format::general, 3, \"9.99e-05\"},\r\n    {0.0000999f, chars_format::general, 4, \"9.99e-05\"},\r\n    {0.0000999f, chars_format::general, 5, \"9.99e-05\"},\r\n    {0.0000999f, chars_format::general, 6, \"9.99e-05\"},\r\n\r\n    {0.000099f, chars_format::general, 1, \"0.0001\"},\r\n    {0.000099f, chars_format::general, 2, \"9.9e-05\"},\r\n    {0.000099f, chars_format::general, 3, \"9.9e-05\"},\r\n    {0.000099f, chars_format::general, 4, \"9.9e-05\"},\r\n    {0.000099f, chars_format::general, 5, \"9.9e-05\"},\r\n    {0.000099f, chars_format::general, 6, \"9.9e-05\"},\r\n\r\n    {0.00009f, chars_format::general, 1, \"9e-05\"},\r\n    {0.00009f, chars_format::general, 2, \"9e-05\"},\r\n    {0.00009f, chars_format::general, 3, \"9e-05\"},\r\n    {0.00009f, chars_format::general, 4, \"9e-05\"},\r\n    {0.00009f, chars_format::general, 5, \"9e-05\"},\r\n    {0.00009f, chars_format::general, 6, \"9e-05\"},\r\n\r\n    // Rounding test cases without exponent-adjusting behavior.\r\n    {2999.999f, chars_format::general, 1, \"3e+03\"},\r\n    {2999.999f, chars_format::general, 2, \"3e+03\"},\r\n    {2999.999f, chars_format::general, 3, \"3e+03\"},\r\n    {2999.999f, chars_format::general, 4, \"3000\"},\r\n    {2999.999f, chars_format::general, 5, \"3000\"},\r\n    {2999.999f, chars_format::general, 6, \"3000\"},\r\n\r\n    {2999.99f, chars_format::general, 1, \"3e+03\"},\r\n    {2999.99f, chars_format::general, 2, \"3e+03\"},\r\n    {2999.99f, chars_format::general, 3, \"3e+03\"},\r\n    {2999.99f, chars_format::general, 4, \"3000\"},\r\n    {2999.99f, chars_format::general, 5, \"3000\"},\r\n    {2999.99f, chars_format::general, 6, \"2999.99\"},\r\n\r\n    {2999.9f, chars_format::general, 1, \"3e+03\"},\r\n    {2999.9f, chars_format::general, 2, \"3e+03\"},\r\n    {2999.9f, chars_format::general, 3, \"3e+03\"},\r\n    {2999.9f, chars_format::general, 4, \"3000\"},\r\n    {2999.9f, chars_format::general, 5, \"2999.9\"},\r\n    {2999.9f, chars_format::general, 6, \"2999.9\"},\r\n\r\n    {2999.0f, chars_format::general, 1, \"3e+03\"},\r\n    {2999.0f, chars_format::general, 2, \"3e+03\"},\r\n    {2999.0f, chars_format::general, 3, \"3e+03\"},\r\n    {2999.0f, chars_format::general, 4, \"2999\"},\r\n    {2999.0f, chars_format::general, 5, \"2999\"},\r\n    {2999.0f, chars_format::general, 6, \"2999\"},\r\n\r\n    {299.999f, chars_format::general, 1, \"3e+02\"},\r\n    {299.999f, chars_format::general, 2, \"3e+02\"},\r\n    {299.999f, chars_format::general, 3, \"300\"},\r\n    {299.999f, chars_format::general, 4, \"300\"},\r\n    {299.999f, chars_format::general, 5, \"300\"},\r\n    {299.999f, chars_format::general, 6, \"299.999\"},\r\n\r\n    {299.99f, chars_format::general, 1, \"3e+02\"},\r\n    {299.99f, chars_format::general, 2, \"3e+02\"},\r\n    {299.99f, chars_format::general, 3, \"300\"},\r\n    {299.99f, chars_format::general, 4, \"300\"},\r\n    {299.99f, chars_format::general, 5, \"299.99\"},\r\n    {299.99f, chars_format::general, 6, \"299.99\"},\r\n\r\n    {299.9f, chars_format::general, 1, \"3e+02\"},\r\n    {299.9f, chars_format::general, 2, \"3e+02\"},\r\n    {299.9f, chars_format::general, 3, \"300\"},\r\n    {299.9f, chars_format::general, 4, \"299.9\"},\r\n    {299.9f, chars_format::general, 5, \"299.9\"},\r\n    {299.9f, chars_format::general, 6, \"299.9\"},\r\n\r\n    {299.0f, chars_format::general, 1, \"3e+02\"},\r\n    {299.0f, chars_format::general, 2, \"3e+02\"},\r\n    {299.0f, chars_format::general, 3, \"299\"},\r\n    {299.0f, chars_format::general, 4, \"299\"},\r\n    {299.0f, chars_format::general, 5, \"299\"},\r\n    {299.0f, chars_format::general, 6, \"299\"},\r\n\r\n    {29.999f, chars_format::general, 1, \"3e+01\"},\r\n    {29.999f, chars_format::general, 2, \"30\"},\r\n    {29.999f, chars_format::general, 3, \"30\"},\r\n    {29.999f, chars_format::general, 4, \"30\"},\r\n    {29.999f, chars_format::general, 5, \"29.999\"},\r\n    {29.999f, chars_format::general, 6, \"29.999\"},\r\n\r\n    {29.99f, chars_format::general, 1, \"3e+01\"},\r\n    {29.99f, chars_format::general, 2, \"30\"},\r\n    {29.99f, chars_format::general, 3, \"30\"},\r\n    {29.99f, chars_format::general, 4, \"29.99\"},\r\n    {29.99f, chars_format::general, 5, \"29.99\"},\r\n    {29.99f, chars_format::general, 6, \"29.99\"},\r\n\r\n    {29.9f, chars_format::general, 1, \"3e+01\"},\r\n    {29.9f, chars_format::general, 2, \"30\"},\r\n    {29.9f, chars_format::general, 3, \"29.9\"},\r\n    {29.9f, chars_format::general, 4, \"29.9\"},\r\n    {29.9f, chars_format::general, 5, \"29.9\"},\r\n    {29.9f, chars_format::general, 6, \"29.9\"},\r\n\r\n    {29.0f, chars_format::general, 1, \"3e+01\"},\r\n    {29.0f, chars_format::general, 2, \"29\"},\r\n    {29.0f, chars_format::general, 3, \"29\"},\r\n    {29.0f, chars_format::general, 4, \"29\"},\r\n    {29.0f, chars_format::general, 5, \"29\"},\r\n    {29.0f, chars_format::general, 6, \"29\"},\r\n\r\n    {2.999f, chars_format::general, 1, \"3\"},\r\n    {2.999f, chars_format::general, 2, \"3\"},\r\n    {2.999f, chars_format::general, 3, \"3\"},\r\n    {2.999f, chars_format::general, 4, \"2.999\"},\r\n    {2.999f, chars_format::general, 5, \"2.999\"},\r\n    {2.999f, chars_format::general, 6, \"2.999\"},\r\n\r\n    {2.99f, chars_format::general, 1, \"3\"},\r\n    {2.99f, chars_format::general, 2, \"3\"},\r\n    {2.99f, chars_format::general, 3, \"2.99\"},\r\n    {2.99f, chars_format::general, 4, \"2.99\"},\r\n    {2.99f, chars_format::general, 5, \"2.99\"},\r\n    {2.99f, chars_format::general, 6, \"2.99\"},\r\n\r\n    {2.9f, chars_format::general, 1, \"3\"},\r\n    {2.9f, chars_format::general, 2, \"2.9\"},\r\n    {2.9f, chars_format::general, 3, \"2.9\"},\r\n    {2.9f, chars_format::general, 4, \"2.9\"},\r\n    {2.9f, chars_format::general, 5, \"2.9\"},\r\n    {2.9f, chars_format::general, 6, \"2.9\"},\r\n\r\n    {2.0f, chars_format::general, 1, \"2\"},\r\n    {2.0f, chars_format::general, 2, \"2\"},\r\n    {2.0f, chars_format::general, 3, \"2\"},\r\n    {2.0f, chars_format::general, 4, \"2\"},\r\n    {2.0f, chars_format::general, 5, \"2\"},\r\n    {2.0f, chars_format::general, 6, \"2\"},\r\n\r\n    {0.2999f, chars_format::general, 1, \"0.3\"},\r\n    {0.2999f, chars_format::general, 2, \"0.3\"},\r\n    {0.2999f, chars_format::general, 3, \"0.3\"},\r\n    {0.2999f, chars_format::general, 4, \"0.2999\"},\r\n    {0.2999f, chars_format::general, 5, \"0.2999\"},\r\n    {0.2999f, chars_format::general, 6, \"0.2999\"},\r\n\r\n    {0.299f, chars_format::general, 1, \"0.3\"},\r\n    {0.299f, chars_format::general, 2, \"0.3\"},\r\n    {0.299f, chars_format::general, 3, \"0.299\"},\r\n    {0.299f, chars_format::general, 4, \"0.299\"},\r\n    {0.299f, chars_format::general, 5, \"0.299\"},\r\n    {0.299f, chars_format::general, 6, \"0.299\"},\r\n\r\n    {0.29f, chars_format::general, 1, \"0.3\"},\r\n    {0.29f, chars_format::general, 2, \"0.29\"},\r\n    {0.29f, chars_format::general, 3, \"0.29\"},\r\n    {0.29f, chars_format::general, 4, \"0.29\"},\r\n    {0.29f, chars_format::general, 5, \"0.29\"},\r\n    {0.29f, chars_format::general, 6, \"0.29\"},\r\n\r\n    {0.2f, chars_format::general, 1, \"0.2\"},\r\n    {0.2f, chars_format::general, 2, \"0.2\"},\r\n    {0.2f, chars_format::general, 3, \"0.2\"},\r\n    {0.2f, chars_format::general, 4, \"0.2\"},\r\n    {0.2f, chars_format::general, 5, \"0.2\"},\r\n    {0.2f, chars_format::general, 6, \"0.2\"},\r\n\r\n    {0.02999f, chars_format::general, 1, \"0.03\"},\r\n    {0.02999f, chars_format::general, 2, \"0.03\"},\r\n    {0.02999f, chars_format::general, 3, \"0.03\"},\r\n    {0.02999f, chars_format::general, 4, \"0.02999\"},\r\n    {0.02999f, chars_format::general, 5, \"0.02999\"},\r\n    {0.02999f, chars_format::general, 6, \"0.02999\"},\r\n\r\n    {0.0299f, chars_format::general, 1, \"0.03\"},\r\n    {0.0299f, chars_format::general, 2, \"0.03\"},\r\n    {0.0299f, chars_format::general, 3, \"0.0299\"},\r\n    {0.0299f, chars_format::general, 4, \"0.0299\"},\r\n    {0.0299f, chars_format::general, 5, \"0.0299\"},\r\n    {0.0299f, chars_format::general, 6, \"0.0299\"},\r\n\r\n    {0.029f, chars_format::general, 1, \"0.03\"},\r\n    {0.029f, chars_format::general, 2, \"0.029\"},\r\n    {0.029f, chars_format::general, 3, \"0.029\"},\r\n    {0.029f, chars_format::general, 4, \"0.029\"},\r\n    {0.029f, chars_format::general, 5, \"0.029\"},\r\n    {0.029f, chars_format::general, 6, \"0.029\"},\r\n\r\n    {0.02f, chars_format::general, 1, \"0.02\"},\r\n    {0.02f, chars_format::general, 2, \"0.02\"},\r\n    {0.02f, chars_format::general, 3, \"0.02\"},\r\n    {0.02f, chars_format::general, 4, \"0.02\"},\r\n    {0.02f, chars_format::general, 5, \"0.02\"},\r\n    {0.02f, chars_format::general, 6, \"0.02\"},\r\n\r\n    {0.002999f, chars_format::general, 1, \"0.003\"},\r\n    {0.002999f, chars_format::general, 2, \"0.003\"},\r\n    {0.002999f, chars_format::general, 3, \"0.003\"},\r\n    {0.002999f, chars_format::general, 4, \"0.002999\"},\r\n    {0.002999f, chars_format::general, 5, \"0.002999\"},\r\n    {0.002999f, chars_format::general, 6, \"0.002999\"},\r\n\r\n    {0.00299f, chars_format::general, 1, \"0.003\"},\r\n    {0.00299f, chars_format::general, 2, \"0.003\"},\r\n    {0.00299f, chars_format::general, 3, \"0.00299\"},\r\n    {0.00299f, chars_format::general, 4, \"0.00299\"},\r\n    {0.00299f, chars_format::general, 5, \"0.00299\"},\r\n    {0.00299f, chars_format::general, 6, \"0.00299\"},\r\n\r\n    {0.0029f, chars_format::general, 1, \"0.003\"},\r\n    {0.0029f, chars_format::general, 2, \"0.0029\"},\r\n    {0.0029f, chars_format::general, 3, \"0.0029\"},\r\n    {0.0029f, chars_format::general, 4, \"0.0029\"},\r\n    {0.0029f, chars_format::general, 5, \"0.0029\"},\r\n    {0.0029f, chars_format::general, 6, \"0.0029\"},\r\n\r\n    {0.002f, chars_format::general, 1, \"0.002\"},\r\n    {0.002f, chars_format::general, 2, \"0.002\"},\r\n    {0.002f, chars_format::general, 3, \"0.002\"},\r\n    {0.002f, chars_format::general, 4, \"0.002\"},\r\n    {0.002f, chars_format::general, 5, \"0.002\"},\r\n    {0.002f, chars_format::general, 6, \"0.002\"},\r\n\r\n    {0.0002999f, chars_format::general, 1, \"0.0003\"},\r\n    {0.0002999f, chars_format::general, 2, \"0.0003\"},\r\n    {0.0002999f, chars_format::general, 3, \"0.0003\"},\r\n    {0.0002999f, chars_format::general, 4, \"0.0002999\"},\r\n    {0.0002999f, chars_format::general, 5, \"0.0002999\"},\r\n    {0.0002999f, chars_format::general, 6, \"0.0002999\"},\r\n\r\n    {0.000299f, chars_format::general, 1, \"0.0003\"},\r\n    {0.000299f, chars_format::general, 2, \"0.0003\"},\r\n    {0.000299f, chars_format::general, 3, \"0.000299\"},\r\n    {0.000299f, chars_format::general, 4, \"0.000299\"},\r\n    {0.000299f, chars_format::general, 5, \"0.000299\"},\r\n    {0.000299f, chars_format::general, 6, \"0.000299\"},\r\n\r\n    {0.00029f, chars_format::general, 1, \"0.0003\"},\r\n    {0.00029f, chars_format::general, 2, \"0.00029\"},\r\n    {0.00029f, chars_format::general, 3, \"0.00029\"},\r\n    {0.00029f, chars_format::general, 4, \"0.00029\"},\r\n    {0.00029f, chars_format::general, 5, \"0.00029\"},\r\n    {0.00029f, chars_format::general, 6, \"0.00029\"},\r\n\r\n    {0.0002f, chars_format::general, 1, \"0.0002\"},\r\n    {0.0002f, chars_format::general, 2, \"0.0002\"},\r\n    {0.0002f, chars_format::general, 3, \"0.0002\"},\r\n    {0.0002f, chars_format::general, 4, \"0.0002\"},\r\n    {0.0002f, chars_format::general, 5, \"0.0002\"},\r\n    {0.0002f, chars_format::general, 6, \"0.0002\"},\r\n\r\n    {0.00002999f, chars_format::general, 1, \"3e-05\"},\r\n    {0.00002999f, chars_format::general, 2, \"3e-05\"},\r\n    {0.00002999f, chars_format::general, 3, \"3e-05\"},\r\n    {0.00002999f, chars_format::general, 4, \"2.999e-05\"},\r\n    {0.00002999f, chars_format::general, 5, \"2.999e-05\"},\r\n    {0.00002999f, chars_format::general, 6, \"2.999e-05\"},\r\n\r\n    {0.0000299f, chars_format::general, 1, \"3e-05\"},\r\n    {0.0000299f, chars_format::general, 2, \"3e-05\"},\r\n    {0.0000299f, chars_format::general, 3, \"2.99e-05\"},\r\n    {0.0000299f, chars_format::general, 4, \"2.99e-05\"},\r\n    {0.0000299f, chars_format::general, 5, \"2.99e-05\"},\r\n    {0.0000299f, chars_format::general, 6, \"2.99e-05\"},\r\n\r\n    {0.000029f, chars_format::general, 1, \"3e-05\"},\r\n    {0.000029f, chars_format::general, 2, \"2.9e-05\"},\r\n    {0.000029f, chars_format::general, 3, \"2.9e-05\"},\r\n    {0.000029f, chars_format::general, 4, \"2.9e-05\"},\r\n    {0.000029f, chars_format::general, 5, \"2.9e-05\"},\r\n    {0.000029f, chars_format::general, 6, \"2.9e-05\"},\r\n\r\n    {0.00002f, chars_format::general, 1, \"2e-05\"},\r\n    {0.00002f, chars_format::general, 2, \"2e-05\"},\r\n    {0.00002f, chars_format::general, 3, \"2e-05\"},\r\n    {0.00002f, chars_format::general, 4, \"2e-05\"},\r\n    {0.00002f, chars_format::general, 5, \"2e-05\"},\r\n    {0.00002f, chars_format::general, 6, \"2e-05\"},\r\n\r\n    // Test the transitions between values of the scientific exponent X.\r\n    // For brevity, we avoid testing all possible combinations of P and X. Instead, we test:\r\n    // * All values of P where some X can be affected by rounding. (For float, this is [1, 7].)\r\n    // * P == 25, which is arbitrary.\r\n    // * P == numeric_limits::max_exponent10 + 1. This selects fixed notation for numeric_limits::max(),\r\n    //   so it's the largest interesting value of P.\r\n    // * Finally, we test the transitions around X == P - 1, ensuring that we can recognize every value of X.\r\n    {0x1.8e7578p-14f, chars_format::general, 1, \"9e-05\"},\r\n    {0x1.8e757ap-14f, chars_format::general, 1, \"0.0001\"},\r\n    {0x1.f212d6p-11f, chars_format::general, 1, \"0.0009\"},\r\n    {0x1.f212d8p-11f, chars_format::general, 1, \"0.001\"},\r\n    {0x1.374bc6p-7f, chars_format::general, 1, \"0.009\"},\r\n    {0x1.374bc8p-7f, chars_format::general, 1, \"0.01\"},\r\n    {0x1.851eb8p-4f, chars_format::general, 1, \"0.09\"},\r\n    {0x1.851ebap-4f, chars_format::general, 1, \"0.1\"},\r\n    {0x1.e66666p-1f, chars_format::general, 1, \"0.9\"},\r\n    {0x1.e66668p-1f, chars_format::general, 1, \"1\"},\r\n    {0x1.2ffffep+3f, chars_format::general, 1, \"9\"},\r\n    {0x1.300000p+3f, chars_format::general, 1, \"1e+01\"},\r\n    {0x1.a1554ep-14f, chars_format::general, 2, \"9.9e-05\"},\r\n    {0x1.a15550p-14f, chars_format::general, 2, \"0.0001\"},\r\n    {0x1.04d550p-10f, chars_format::general, 2, \"0.00099\"},\r\n    {0x1.04d552p-10f, chars_format::general, 2, \"0.001\"},\r\n    {0x1.460aa6p-7f, chars_format::general, 2, \"0.0099\"},\r\n    {0x1.460aa8p-7f, chars_format::general, 2, \"0.01\"},\r\n    {0x1.978d4ep-4f, chars_format::general, 2, \"0.099\"},\r\n    {0x1.978d50p-4f, chars_format::general, 2, \"0.1\"},\r\n    {0x1.fd70a2p-1f, chars_format::general, 2, \"0.99\"},\r\n    {0x1.fd70a4p-1f, chars_format::general, 2, \"1\"},\r\n    {0x1.3e6666p+3f, chars_format::general, 2, \"9.9\"},\r\n    {0x1.3e6668p+3f, chars_format::general, 2, \"10\"},\r\n    {0x1.8dfffep+6f, chars_format::general, 2, \"99\"},\r\n    {0x1.8e0000p+6f, chars_format::general, 2, \"1e+02\"},\r\n    {0x1.a3387ep-14f, chars_format::general, 3, \"9.99e-05\"},\r\n    {0x1.a33880p-14f, chars_format::general, 3, \"0.0001\"},\r\n    {0x1.06034ep-10f, chars_format::general, 3, \"0.000999\"},\r\n    {0x1.060350p-10f, chars_format::general, 3, \"0.001\"},\r\n    {0x1.478422p-7f, chars_format::general, 3, \"0.00999\"},\r\n    {0x1.478424p-7f, chars_format::general, 3, \"0.01\"},\r\n    {0x1.99652ap-4f, chars_format::general, 3, \"0.0999\"},\r\n    {0x1.99652cp-4f, chars_format::general, 3, \"0.1\"},\r\n    {0x1.ffbe76p-1f, chars_format::general, 3, \"0.999\"},\r\n    {0x1.ffbe78p-1f, chars_format::general, 3, \"1\"},\r\n    {0x1.3fd70ap+3f, chars_format::general, 3, \"9.99\"},\r\n    {0x1.3fd70cp+3f, chars_format::general, 3, \"10\"},\r\n    {0x1.8fccccp+6f, chars_format::general, 3, \"99.9\"},\r\n    {0x1.8fcccep+6f, chars_format::general, 3, \"100\"},\r\n    {0x1.f3bffep+9f, chars_format::general, 3, \"999\"},\r\n    {0x1.f3c000p+9f, chars_format::general, 3, \"1e+03\"},\r\n    {0x1.a368d0p-14f, chars_format::general, 4, \"9.999e-05\"},\r\n    {0x1.a368d2p-14f, chars_format::general, 4, \"0.0001\"},\r\n    {0x1.062182p-10f, chars_format::general, 4, \"0.0009999\"},\r\n    {0x1.062184p-10f, chars_format::general, 4, \"0.001\"},\r\n    {0x1.47a9e2p-7f, chars_format::general, 4, \"0.009999\"},\r\n    {0x1.47a9e4p-7f, chars_format::general, 4, \"0.01\"},\r\n    {0x1.99945ap-4f, chars_format::general, 4, \"0.09999\"},\r\n    {0x1.99945cp-4f, chars_format::general, 4, \"0.1\"},\r\n    {0x1.fff972p-1f, chars_format::general, 4, \"0.9999\"},\r\n    {0x1.fff974p-1f, chars_format::general, 4, \"1\"},\r\n    {0x1.3ffbe6p+3f, chars_format::general, 4, \"9.999\"},\r\n    {0x1.3ffbe8p+3f, chars_format::general, 4, \"10\"},\r\n    {0x1.8ffae0p+6f, chars_format::general, 4, \"99.99\"},\r\n    {0x1.8ffae2p+6f, chars_format::general, 4, \"100\"},\r\n    {0x1.f3f998p+9f, chars_format::general, 4, \"999.9\"},\r\n    {0x1.f3f99ap+9f, chars_format::general, 4, \"1000\"},\r\n    {0x1.387bfep+13f, chars_format::general, 4, \"9999\"},\r\n    {0x1.387c00p+13f, chars_format::general, 4, \"1e+04\"},\r\n    {0x1.a36da4p-14f, chars_format::general, 5, \"9.9999e-05\"},\r\n    {0x1.a36da6p-14f, chars_format::general, 5, \"0.0001\"},\r\n    {0x1.062486p-10f, chars_format::general, 5, \"0.00099999\"},\r\n    {0x1.062488p-10f, chars_format::general, 5, \"0.001\"},\r\n    {0x1.47ada8p-7f, chars_format::general, 5, \"0.0099999\"},\r\n    {0x1.47adaap-7f, chars_format::general, 5, \"0.01\"},\r\n    {0x1.999912p-4f, chars_format::general, 5, \"0.099999\"},\r\n    {0x1.999914p-4f, chars_format::general, 5, \"0.1\"},\r\n    {0x1.ffff58p-1f, chars_format::general, 5, \"0.99999\"},\r\n    {0x1.ffff5ap-1f, chars_format::general, 5, \"1\"},\r\n    {0x1.3fff96p+3f, chars_format::general, 5, \"9.9999\"},\r\n    {0x1.3fff98p+3f, chars_format::general, 5, \"10\"},\r\n    {0x1.8fff7cp+6f, chars_format::general, 5, \"99.999\"},\r\n    {0x1.8fff7ep+6f, chars_format::general, 5, \"100\"},\r\n    {0x1.f3ff5cp+9f, chars_format::general, 5, \"999.99\"},\r\n    {0x1.f3ff5ep+9f, chars_format::general, 5, \"1000\"},\r\n    {0x1.387f98p+13f, chars_format::general, 5, \"9999.9\"},\r\n    {0x1.387f9ap+13f, chars_format::general, 5, \"10000\"},\r\n    {0x1.869f7ep+16f, chars_format::general, 5, \"99999\"},\r\n    {0x1.869f80p+16f, chars_format::general, 5, \"1e+05\"},\r\n    {0x1.a36e20p-14f, chars_format::general, 6, \"9.99999e-05\"},\r\n    {0x1.a36e22p-14f, chars_format::general, 6, \"0.0001\"},\r\n    {0x1.0624d4p-10f, chars_format::general, 6, \"0.000999999\"},\r\n    {0x1.0624d6p-10f, chars_format::general, 6, \"0.001\"},\r\n    {0x1.47ae08p-7f, chars_format::general, 6, \"0.00999999\"},\r\n    {0x1.47ae0ap-7f, chars_format::general, 6, \"0.01\"},\r\n    {0x1.99998cp-4f, chars_format::general, 6, \"0.0999999\"},\r\n    {0x1.99998ep-4f, chars_format::general, 6, \"0.1\"},\r\n    {0x1.ffffeep-1f, chars_format::general, 6, \"0.999999\"},\r\n    {0x1.fffff0p-1f, chars_format::general, 6, \"1\"},\r\n    {0x1.3ffff4p+3f, chars_format::general, 6, \"9.99999\"},\r\n    {0x1.3ffff6p+3f, chars_format::general, 6, \"10\"},\r\n    {0x1.8ffff2p+6f, chars_format::general, 6, \"99.9999\"},\r\n    {0x1.8ffff4p+6f, chars_format::general, 6, \"100\"},\r\n    {0x1.f3ffeep+9f, chars_format::general, 6, \"999.999\"},\r\n    {0x1.f3fff0p+9f, chars_format::general, 6, \"1000\"},\r\n    {0x1.387ff4p+13f, chars_format::general, 6, \"9999.99\"},\r\n    {0x1.387ff6p+13f, chars_format::general, 6, \"10000\"},\r\n    {0x1.869ff2p+16f, chars_format::general, 6, \"99999.9\"},\r\n    {0x1.869ff4p+16f, chars_format::general, 6, \"100000\"},\r\n    {0x1.e847eep+19f, chars_format::general, 6, \"999999\"},\r\n    {0x1.e847f0p+19f, chars_format::general, 6, \"1e+06\"},\r\n    {0x1.a36e2cp-14f, chars_format::general, 7, \"9.999999e-05\"},\r\n    {0x1.a36e2ep-14f, chars_format::general, 7, \"0.0001\"},\r\n    {0x1.0624dcp-10f, chars_format::general, 7, \"0.0009999999\"},\r\n    {0x1.0624dep-10f, chars_format::general, 7, \"0.001\"},\r\n    {0x1.47ae12p-7f, chars_format::general, 7, \"0.009999999\"},\r\n    {0x1.47ae14p-7f, chars_format::general, 7, \"0.01\"},\r\n    {0x1.999998p-4f, chars_format::general, 7, \"0.09999999\"},\r\n    {0x1.99999ap-4f, chars_format::general, 7, \"0.1\"},\r\n    {0x1.fffffep-1f, chars_format::general, 7, \"0.9999999\"},\r\n    {0x1.000000p+0f, chars_format::general, 7, \"1\"},\r\n    {0x1.3ffffep+3f, chars_format::general, 7, \"9.999999\"},\r\n    {0x1.400000p+3f, chars_format::general, 7, \"10\"},\r\n    {0x1.8ffffep+6f, chars_format::general, 7, \"99.99999\"},\r\n    {0x1.900000p+6f, chars_format::general, 7, \"100\"},\r\n    {0x1.f3fffep+9f, chars_format::general, 7, \"999.9999\"},\r\n    {0x1.f40000p+9f, chars_format::general, 7, \"1000\"},\r\n    {0x1.387ffep+13f, chars_format::general, 7, \"9999.999\"},\r\n    {0x1.388000p+13f, chars_format::general, 7, \"10000\"},\r\n    {0x1.869ffep+16f, chars_format::general, 7, \"99999.99\"},\r\n    {0x1.86a000p+16f, chars_format::general, 7, \"100000\"},\r\n    {0x1.e847fep+19f, chars_format::general, 7, \"999999.9\"},\r\n    {0x1.e84800p+19f, chars_format::general, 7, \"1000000\"},\r\n    {0x1.312cfep+23f, chars_format::general, 7, \"9999999\"},\r\n    {0x1.312d00p+23f, chars_format::general, 7, \"1e+07\"},\r\n    {0x1.7d783ep+26f, chars_format::general, 8, \"99999992\"},\r\n    {0x1.7d7840p+26f, chars_format::general, 8, \"1e+08\"},\r\n    {0x1.dcd64ep+29f, chars_format::general, 9, \"999999936\"},\r\n    {0x1.dcd650p+29f, chars_format::general, 9, \"1e+09\"},\r\n    {0x1.2a05f0p+33f, chars_format::general, 10, \"9999998976\"},\r\n    {0x1.2a05f2p+33f, chars_format::general, 10, \"1e+10\"},\r\n    {0x1.74876ep+36f, chars_format::general, 11, \"99999997952\"},\r\n    {0x1.748770p+36f, chars_format::general, 11, \"1.0000000614e+11\"},\r\n    {0x1.d1a94ap+39f, chars_format::general, 12, \"999999995904\"},\r\n    {0x1.d1a94cp+39f, chars_format::general, 12, \"1.00000006144e+12\"},\r\n    {0x1.2309cep+43f, chars_format::general, 13, \"9999999827968\"},\r\n    {0x1.2309d0p+43f, chars_format::general, 13, \"1.000000087654e+13\"},\r\n    {0x1.6bcc40p+46f, chars_format::general, 14, \"99999991988224\"},\r\n    {0x1.6bcc42p+46f, chars_format::general, 14, \"1.0000000037683e+14\"},\r\n    {0x1.c6bf52p+49f, chars_format::general, 15, \"999999986991104\"},\r\n    {0x1.c6bf54p+49f, chars_format::general, 15, \"1.00000005409997e+15\"},\r\n    {0x1.1c3792p+53f, chars_format::general, 16, \"9999999198822400\"},\r\n    {0x1.1c3794p+53f, chars_format::general, 16, \"1.000000027256422e+16\"},\r\n    {0x1.634578p+56f, chars_format::general, 17, \"99999998430674944\"},\r\n    {0x1.63457ap+56f, chars_format::general, 17, \"1.0000000702060954e+17\"},\r\n    {0x1.bc16d6p+59f, chars_format::general, 18, \"999999984306749440\"},\r\n    {0x1.bc16d8p+59f, chars_format::general, 18, \"1.00000005302622618e+18\"},\r\n    {0x1.158e46p+63f, chars_format::general, 19, \"9999999980506447872\"},\r\n    {0x1.158e48p+63f, chars_format::general, 19, \"1.000000108001807565e+19\"},\r\n    {0x1.5af1d6p+66f, chars_format::general, 20, \"99999993207994712064\"},\r\n    {0x1.5af1d8p+66f, chars_format::general, 20, \"1.0000000200408773427e+20\"},\r\n    {0x1.b1ae4cp+69f, chars_format::general, 21, \"999999949672133165056\"},\r\n    {0x1.b1ae4ep+69f, chars_format::general, 21, \"1.00000002004087734272e+21\"},\r\n    {0x1.0f0cf0p+73f, chars_format::general, 22, \"9999999778196308361216\"},\r\n    {0x1.0f0cf2p+73f, chars_format::general, 22, \"1.000000090409621520384e+22\"},\r\n    {0x1.52d02cp+76f, chars_format::general, 23, \"99999997781963083612160\"},\r\n    {0x1.52d02ep+76f, chars_format::general, 23, \"1.0000000678916233835315e+23\"},\r\n    {0x1.a78436p+79f, chars_format::general, 24, \"999999941790833817157632\"},\r\n    {0x1.a78438p+79f, chars_format::general, 24, \"1.00000001384842785508557e+24\"},\r\n    {0x1.a36e2ep-14f, chars_format::general, 25, \"9.999999747378751635551453e-05\"},\r\n    {0x1.a36e30p-14f, chars_format::general, 25, \"0.0001000000047497451305389404\"},\r\n    {0x1.0624dcp-10f, chars_format::general, 25, \"0.0009999999310821294784545898\"},\r\n    {0x1.0624dep-10f, chars_format::general, 25, \"0.001000000047497451305389404\"},\r\n    {0x1.47ae14p-7f, chars_format::general, 25, \"0.009999999776482582092285156\"},\r\n    {0x1.47ae16p-7f, chars_format::general, 25, \"0.01000000070780515670776367\"},\r\n    {0x1.999998p-4f, chars_format::general, 25, \"0.0999999940395355224609375\"},\r\n    {0x1.99999ap-4f, chars_format::general, 25, \"0.1000000014901161193847656\"},\r\n    {0x1.fffffep-1f, chars_format::general, 25, \"0.999999940395355224609375\"},\r\n    {0x1.000000p+0f, chars_format::general, 25, \"1\"},\r\n    {0x1.3ffffep+3f, chars_format::general, 25, \"9.99999904632568359375\"},\r\n    {0x1.400000p+3f, chars_format::general, 25, \"10\"},\r\n    {0x1.8ffffep+6f, chars_format::general, 25, \"99.99999237060546875\"},\r\n    {0x1.900000p+6f, chars_format::general, 25, \"100\"},\r\n    {0x1.f3fffep+9f, chars_format::general, 25, \"999.99993896484375\"},\r\n    {0x1.f40000p+9f, chars_format::general, 25, \"1000\"},\r\n    {0x1.387ffep+13f, chars_format::general, 25, \"9999.9990234375\"},\r\n    {0x1.388000p+13f, chars_format::general, 25, \"10000\"},\r\n    {0x1.869ffep+16f, chars_format::general, 25, \"99999.9921875\"},\r\n    {0x1.86a000p+16f, chars_format::general, 25, \"100000\"},\r\n    {0x1.e847fep+19f, chars_format::general, 25, \"999999.9375\"},\r\n    {0x1.e84800p+19f, chars_format::general, 25, \"1000000\"},\r\n    {0x1.312cfep+23f, chars_format::general, 25, \"9999999\"},\r\n    {0x1.312d00p+23f, chars_format::general, 25, \"10000000\"},\r\n    {0x1.7d783ep+26f, chars_format::general, 25, \"99999992\"},\r\n    {0x1.7d7840p+26f, chars_format::general, 25, \"100000000\"},\r\n    {0x1.dcd64ep+29f, chars_format::general, 25, \"999999936\"},\r\n    {0x1.dcd650p+29f, chars_format::general, 25, \"1000000000\"},\r\n    {0x1.2a05f0p+33f, chars_format::general, 25, \"9999998976\"},\r\n    {0x1.2a05f2p+33f, chars_format::general, 25, \"10000000000\"},\r\n    {0x1.74876ep+36f, chars_format::general, 25, \"99999997952\"},\r\n    {0x1.748770p+36f, chars_format::general, 25, \"100000006144\"},\r\n    {0x1.d1a94ap+39f, chars_format::general, 25, \"999999995904\"},\r\n    {0x1.d1a94cp+39f, chars_format::general, 25, \"1000000061440\"},\r\n    {0x1.2309cep+43f, chars_format::general, 25, \"9999999827968\"},\r\n    {0x1.2309d0p+43f, chars_format::general, 25, \"10000000876544\"},\r\n    {0x1.6bcc40p+46f, chars_format::general, 25, \"99999991988224\"},\r\n    {0x1.6bcc42p+46f, chars_format::general, 25, \"100000000376832\"},\r\n    {0x1.c6bf52p+49f, chars_format::general, 25, \"999999986991104\"},\r\n    {0x1.c6bf54p+49f, chars_format::general, 25, \"1000000054099968\"},\r\n    {0x1.1c3792p+53f, chars_format::general, 25, \"9999999198822400\"},\r\n    {0x1.1c3794p+53f, chars_format::general, 25, \"10000000272564224\"},\r\n    {0x1.634578p+56f, chars_format::general, 25, \"99999998430674944\"},\r\n    {0x1.63457ap+56f, chars_format::general, 25, \"100000007020609536\"},\r\n    {0x1.bc16d6p+59f, chars_format::general, 25, \"999999984306749440\"},\r\n    {0x1.bc16d8p+59f, chars_format::general, 25, \"1000000053026226176\"},\r\n    {0x1.158e46p+63f, chars_format::general, 25, \"9999999980506447872\"},\r\n    {0x1.158e48p+63f, chars_format::general, 25, \"10000001080018075648\"},\r\n    {0x1.5af1d6p+66f, chars_format::general, 25, \"99999993207994712064\"},\r\n    {0x1.5af1d8p+66f, chars_format::general, 25, \"100000002004087734272\"},\r\n    {0x1.b1ae4cp+69f, chars_format::general, 25, \"999999949672133165056\"},\r\n    {0x1.b1ae4ep+69f, chars_format::general, 25, \"1000000020040877342720\"},\r\n    {0x1.0f0cf0p+73f, chars_format::general, 25, \"9999999778196308361216\"},\r\n    {0x1.0f0cf2p+73f, chars_format::general, 25, \"10000000904096215203840\"},\r\n    {0x1.52d02cp+76f, chars_format::general, 25, \"99999997781963083612160\"},\r\n    {0x1.52d02ep+76f, chars_format::general, 25, \"100000006789162338353152\"},\r\n    {0x1.a78436p+79f, chars_format::general, 25, \"999999941790833817157632\"},\r\n    {0x1.a78438p+79f, chars_format::general, 25, \"1000000013848427855085568\"},\r\n    {0x1.08b2a2p+83f, chars_format::general, 25, \"9999999562023526247432192\"},\r\n    {0x1.08b2a4p+83f, chars_format::general, 25, \"1.000000071494503085427917e+25\"},\r\n    {0x1.4adf4ap+86f, chars_format::general, 26, \"99999993314392253260627968\"},\r\n    {0x1.4adf4cp+86f, chars_format::general, 26, \"1.0000000253776429011540378e+26\"},\r\n    {0x1.9d971ep+89f, chars_format::general, 27, \"999999988484154753734934528\"},\r\n    {0x1.9d9720p+89f, chars_format::general, 27, \"1.00000006227113104857314099e+27\"},\r\n    {0x1.027e72p+93f, chars_format::general, 28, \"9999999442119689768320106496\"},\r\n    {0x1.027e74p+93f, chars_format::general, 28, \"1.000000062271131048573140992e+28\"},\r\n    {0x1.431e0ep+96f, chars_format::general, 29, \"99999992060013656248378458112\"},\r\n    {0x1.431e10p+96f, chars_format::general, 29, \"1.000000015047466219876688855e+29\"},\r\n    {0x1.93e592p+99f, chars_format::general, 30, \"999999939489602493962365435904\"},\r\n    {0x1.93e594p+99f, chars_format::general, 30, \"1.00000001504746621987668885504e+30\"},\r\n    {0x1.f8def8p+102f, chars_format::general, 31, \"9999999848243207295109594873856\"},\r\n    {0x1.f8defap+102f, chars_format::general, 31, \"1.000000045270611710242418222694e+31\"},\r\n    {0x1.3b8b5ap+106f, chars_format::general, 32, \"99999993646728794492579249913856\"},\r\n    {0x1.3b8b5cp+106f, chars_format::general, 32, \"1.0000000331813535140961264756326e+32\"},\r\n    {0x1.8a6e32p+109f, chars_format::general, 33, \"999999994495727286427992885035008\"},\r\n    {0x1.8a6e34p+109f, chars_format::general, 33, \"1.00000007186697974176426006623027e+33\"},\r\n    {0x1.ed09bep+112f, chars_format::general, 34, \"9999999790214767953607394487959552\"},\r\n    {0x1.ed09c0p+112f, chars_format::general, 34, \"1.000000040918478759629753193752166e+34\"},\r\n    {0x1.342616p+116f, chars_format::general, 35, \"99999994188327561679933120182222848\"},\r\n    {0x1.342618p+116f, chars_format::general, 35, \"1.0000000409184787596297531937521664e+35\"},\r\n    {0x1.812f9cp+119f, chars_format::general, 36, \"999999961690316245365415600208216064\"},\r\n    {0x1.812f9ep+119f, chars_format::general, 36, \"1.0000000409184787596297531937521664e+36\"},\r\n    {0x1.e17b84p+122f, chars_format::general, 37, \"9999999933815812510711506376257961984\"},\r\n    {0x1.e17b86p+122f, chars_format::general, 37, \"1.000000056764111262482620712460956467e+37\"},\r\n    {0x1.2ced32p+126f, chars_format::general, 38, \"99999996802856924650656260769173209088\"},\r\n    {0x1.2ced34p+126f, chars_format::general, 38, \"1.000000069440617264764914727427988521e+38\"},\r\n    {0x1.a36e2ep-14f, chars_format::general, 39, \"9.99999974737875163555145263671875e-05\"},\r\n    {0x1.a36e30p-14f, chars_format::general, 39, \"0.0001000000047497451305389404296875\"},\r\n    {0x1.0624dcp-10f, chars_format::general, 39, \"0.00099999993108212947845458984375\"},\r\n    {0x1.0624dep-10f, chars_format::general, 39, \"0.001000000047497451305389404296875\"},\r\n    {0x1.47ae14p-7f, chars_format::general, 39, \"0.00999999977648258209228515625\"},\r\n    {0x1.47ae16p-7f, chars_format::general, 39, \"0.010000000707805156707763671875\"},\r\n    {0x1.999998p-4f, chars_format::general, 39, \"0.0999999940395355224609375\"},\r\n    {0x1.99999ap-4f, chars_format::general, 39, \"0.100000001490116119384765625\"},\r\n    {0x1.fffffep-1f, chars_format::general, 39, \"0.999999940395355224609375\"},\r\n    {0x1.000000p+0f, chars_format::general, 39, \"1\"},\r\n    {0x1.3ffffep+3f, chars_format::general, 39, \"9.99999904632568359375\"},\r\n    {0x1.400000p+3f, chars_format::general, 39, \"10\"},\r\n    {0x1.8ffffep+6f, chars_format::general, 39, \"99.99999237060546875\"},\r\n    {0x1.900000p+6f, chars_format::general, 39, \"100\"},\r\n    {0x1.f3fffep+9f, chars_format::general, 39, \"999.99993896484375\"},\r\n    {0x1.f40000p+9f, chars_format::general, 39, \"1000\"},\r\n    {0x1.387ffep+13f, chars_format::general, 39, \"9999.9990234375\"},\r\n    {0x1.388000p+13f, chars_format::general, 39, \"10000\"},\r\n    {0x1.869ffep+16f, chars_format::general, 39, \"99999.9921875\"},\r\n    {0x1.86a000p+16f, chars_format::general, 39, \"100000\"},\r\n    {0x1.e847fep+19f, chars_format::general, 39, \"999999.9375\"},\r\n    {0x1.e84800p+19f, chars_format::general, 39, \"1000000\"},\r\n    {0x1.312cfep+23f, chars_format::general, 39, \"9999999\"},\r\n    {0x1.312d00p+23f, chars_format::general, 39, \"10000000\"},\r\n    {0x1.7d783ep+26f, chars_format::general, 39, \"99999992\"},\r\n    {0x1.7d7840p+26f, chars_format::general, 39, \"100000000\"},\r\n    {0x1.dcd64ep+29f, chars_format::general, 39, \"999999936\"},\r\n    {0x1.dcd650p+29f, chars_format::general, 39, \"1000000000\"},\r\n    {0x1.2a05f0p+33f, chars_format::general, 39, \"9999998976\"},\r\n    {0x1.2a05f2p+33f, chars_format::general, 39, \"10000000000\"},\r\n    {0x1.74876ep+36f, chars_format::general, 39, \"99999997952\"},\r\n    {0x1.748770p+36f, chars_format::general, 39, \"100000006144\"},\r\n    {0x1.d1a94ap+39f, chars_format::general, 39, \"999999995904\"},\r\n    {0x1.d1a94cp+39f, chars_format::general, 39, \"1000000061440\"},\r\n    {0x1.2309cep+43f, chars_format::general, 39, \"9999999827968\"},\r\n    {0x1.2309d0p+43f, chars_format::general, 39, \"10000000876544\"},\r\n    {0x1.6bcc40p+46f, chars_format::general, 39, \"99999991988224\"},\r\n    {0x1.6bcc42p+46f, chars_format::general, 39, \"100000000376832\"},\r\n    {0x1.c6bf52p+49f, chars_format::general, 39, \"999999986991104\"},\r\n    {0x1.c6bf54p+49f, chars_format::general, 39, \"1000000054099968\"},\r\n    {0x1.1c3792p+53f, chars_format::general, 39, \"9999999198822400\"},\r\n    {0x1.1c3794p+53f, chars_format::general, 39, \"10000000272564224\"},\r\n    {0x1.634578p+56f, chars_format::general, 39, \"99999998430674944\"},\r\n    {0x1.63457ap+56f, chars_format::general, 39, \"100000007020609536\"},\r\n    {0x1.bc16d6p+59f, chars_format::general, 39, \"999999984306749440\"},\r\n    {0x1.bc16d8p+59f, chars_format::general, 39, \"1000000053026226176\"},\r\n    {0x1.158e46p+63f, chars_format::general, 39, \"9999999980506447872\"},\r\n    {0x1.158e48p+63f, chars_format::general, 39, \"10000001080018075648\"},\r\n    {0x1.5af1d6p+66f, chars_format::general, 39, \"99999993207994712064\"},\r\n    {0x1.5af1d8p+66f, chars_format::general, 39, \"100000002004087734272\"},\r\n    {0x1.b1ae4cp+69f, chars_format::general, 39, \"999999949672133165056\"},\r\n    {0x1.b1ae4ep+69f, chars_format::general, 39, \"1000000020040877342720\"},\r\n    {0x1.0f0cf0p+73f, chars_format::general, 39, \"9999999778196308361216\"},\r\n    {0x1.0f0cf2p+73f, chars_format::general, 39, \"10000000904096215203840\"},\r\n    {0x1.52d02cp+76f, chars_format::general, 39, \"99999997781963083612160\"},\r\n    {0x1.52d02ep+76f, chars_format::general, 39, \"100000006789162338353152\"},\r\n    {0x1.a78436p+79f, chars_format::general, 39, \"999999941790833817157632\"},\r\n    {0x1.a78438p+79f, chars_format::general, 39, \"1000000013848427855085568\"},\r\n    {0x1.08b2a2p+83f, chars_format::general, 39, \"9999999562023526247432192\"},\r\n    {0x1.08b2a4p+83f, chars_format::general, 39, \"10000000714945030854279168\"},\r\n    {0x1.4adf4ap+86f, chars_format::general, 39, \"99999993314392253260627968\"},\r\n    {0x1.4adf4cp+86f, chars_format::general, 39, \"100000002537764290115403776\"},\r\n    {0x1.9d971ep+89f, chars_format::general, 39, \"999999988484154753734934528\"},\r\n    {0x1.9d9720p+89f, chars_format::general, 39, \"1000000062271131048573140992\"},\r\n    {0x1.027e72p+93f, chars_format::general, 39, \"9999999442119689768320106496\"},\r\n    {0x1.027e74p+93f, chars_format::general, 39, \"10000000622711310485731409920\"},\r\n    {0x1.431e0ep+96f, chars_format::general, 39, \"99999992060013656248378458112\"},\r\n    {0x1.431e10p+96f, chars_format::general, 39, \"100000001504746621987668885504\"},\r\n    {0x1.93e592p+99f, chars_format::general, 39, \"999999939489602493962365435904\"},\r\n    {0x1.93e594p+99f, chars_format::general, 39, \"1000000015047466219876688855040\"},\r\n    {0x1.f8def8p+102f, chars_format::general, 39, \"9999999848243207295109594873856\"},\r\n    {0x1.f8defap+102f, chars_format::general, 39, \"10000000452706117102424182226944\"},\r\n    {0x1.3b8b5ap+106f, chars_format::general, 39, \"99999993646728794492579249913856\"},\r\n    {0x1.3b8b5cp+106f, chars_format::general, 39, \"100000003318135351409612647563264\"},\r\n    {0x1.8a6e32p+109f, chars_format::general, 39, \"999999994495727286427992885035008\"},\r\n    {0x1.8a6e34p+109f, chars_format::general, 39, \"1000000071866979741764260066230272\"},\r\n    {0x1.ed09bep+112f, chars_format::general, 39, \"9999999790214767953607394487959552\"},\r\n    {0x1.ed09c0p+112f, chars_format::general, 39, \"10000000409184787596297531937521664\"},\r\n    {0x1.342616p+116f, chars_format::general, 39, \"99999994188327561679933120182222848\"},\r\n    {0x1.342618p+116f, chars_format::general, 39, \"100000004091847875962975319375216640\"},\r\n    {0x1.812f9cp+119f, chars_format::general, 39, \"999999961690316245365415600208216064\"},\r\n    {0x1.812f9ep+119f, chars_format::general, 39, \"1000000040918478759629753193752166400\"},\r\n    {0x1.e17b84p+122f, chars_format::general, 39, \"9999999933815812510711506376257961984\"},\r\n    {0x1.e17b86p+122f, chars_format::general, 39, \"10000000567641112624826207124609564672\"},\r\n    {0x1.2ced32p+126f, chars_format::general, 39, \"99999996802856924650656260769173209088\"},\r\n    {0x1.2ced34p+126f, chars_format::general, 39, \"100000006944061726476491472742798852096\"},\r\n    {0x1.fffffep+127f, chars_format::general, 39, \"340282346638528859811704183484516925440\"},\r\n};\r\n\r\n#endif // FLOAT_GENERAL_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/float_hex_precision_to_chars_test_cases.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef FLOAT_HEX_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n#define FLOAT_HEX_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\ninline constexpr FloatPrecisionToCharsTestCase float_hex_precision_to_chars_test_cases[] = {\r\n    // Test special cases (zero, inf, nan) and an ordinary case. Also test negative signs.\r\n    {0.0f, chars_format::hex, 4, \"0.0000p+0\"},\r\n    {-0.0f, chars_format::hex, 4, \"-0.0000p+0\"},\r\n    {float_inf, chars_format::hex, 4, \"inf\"},\r\n    {-float_inf, chars_format::hex, 4, \"-inf\"},\r\n    {float_nan, chars_format::hex, 4, \"nan\"},\r\n    {-float_nan, chars_format::hex, 4, \"-nan(ind)\"},\r\n    {float_nan_payload, chars_format::hex, 4, \"nan\"},\r\n    {-float_nan_payload, chars_format::hex, 4, \"-nan\"},\r\n    {0x1.729p+0f, chars_format::hex, 4, \"1.7290p+0\"},\r\n    {-0x1.729p+0f, chars_format::hex, 4, \"-1.7290p+0\"},\r\n\r\n    // Test hexfloat corner cases.\r\n    {0x1.728p+0f, chars_format::hex, 6, \"1.728000p+0\"},\r\n    {0x0.000002p-126f, chars_format::hex, 6, \"0.000002p-126\"}, // min subnormal\r\n    {0x0.fffffep-126f, chars_format::hex, 6, \"0.fffffep-126\"}, // max subnormal\r\n    {0x1p-126f, chars_format::hex, 6, \"1.000000p-126\"}, // min normal\r\n    {0x1.fffffep+127f, chars_format::hex, 6, \"1.fffffep+127\"}, // max normal\r\n\r\n    // Test hexfloat exponents.\r\n    {0x1p-109f, chars_format::hex, 0, \"1p-109\"},\r\n    {0x1p-99f, chars_format::hex, 0, \"1p-99\"},\r\n    {0x1p-9f, chars_format::hex, 0, \"1p-9\"},\r\n    {0x1p+0f, chars_format::hex, 0, \"1p+0\"},\r\n    {0x1p+9f, chars_format::hex, 0, \"1p+9\"},\r\n    {0x1p+99f, chars_format::hex, 0, \"1p+99\"},\r\n    {0x1p+109f, chars_format::hex, 0, \"1p+109\"},\r\n\r\n    // Test hexfloat hexits.\r\n    {0x1.0123p+0f, chars_format::hex, 4, \"1.0123p+0\"},\r\n    {0x1.4567p+0f, chars_format::hex, 4, \"1.4567p+0\"},\r\n    {0x1.89abp+0f, chars_format::hex, 4, \"1.89abp+0\"},\r\n    {0x1.cdefp+0f, chars_format::hex, 4, \"1.cdefp+0\"},\r\n\r\n    // Test varying precision. Negative precision requests full precision, not shortest round-trip.\r\n    {0x1.123456p+0f, chars_format::hex, -2, \"1.123456p+0\"},\r\n    {0x1.123456p+0f, chars_format::hex, -1, \"1.123456p+0\"},\r\n    {0x1.123456p+0f, chars_format::hex, 0, \"1p+0\"},\r\n    {0x1.123456p+0f, chars_format::hex, 1, \"1.1p+0\"},\r\n    {0x1.123456p+0f, chars_format::hex, 2, \"1.12p+0\"},\r\n    {0x1.123456p+0f, chars_format::hex, 3, \"1.123p+0\"},\r\n    {0x1.123456p+0f, chars_format::hex, 4, \"1.1234p+0\"},\r\n    {0x1.123456p+0f, chars_format::hex, 5, \"1.12345p+0\"},\r\n    {0x1.123456p+0f, chars_format::hex, 6, \"1.123456p+0\"},\r\n    {0x1.123456p+0f, chars_format::hex, 7, \"1.1234560p+0\"},\r\n    {0x1.123456p+0f, chars_format::hex, 8, \"1.12345600p+0\"},\r\n    {0x1.123456p+0f, chars_format::hex, 9, \"1.123456000p+0\"},\r\n\r\n    // Test rounding at every position.\r\n    {0x1.ccccccp+0f, chars_format::hex, 0, \"2p+0\"},\r\n    {0x1.ccccccp+0f, chars_format::hex, 1, \"1.dp+0\"},\r\n    {0x1.ccccccp+0f, chars_format::hex, 2, \"1.cdp+0\"},\r\n    {0x1.ccccccp+0f, chars_format::hex, 3, \"1.ccdp+0\"},\r\n    {0x1.ccccccp+0f, chars_format::hex, 4, \"1.cccdp+0\"},\r\n    {0x1.ccccccp+0f, chars_format::hex, 5, \"1.ccccdp+0\"},\r\n    {0x1.ccccccp+0f, chars_format::hex, 6, \"1.ccccccp+0\"},\r\n\r\n    // Test all combinations of least significant bit, round bit, and trailing bits.\r\n    {0x1.04000p+0f, chars_format::hex, 2, \"1.04p+0\"}, // Lsb 0, Round 0, Trailing 0\r\n    {0x1.04001p+0f, chars_format::hex, 2, \"1.04p+0\"}, // Lsb 0, Round 0 and Trailing 1 in different hexits\r\n    {0x1.04200p+0f, chars_format::hex, 2, \"1.04p+0\"}, // Lsb 0, Round 0 and Trailing 1 in same hexit\r\n    {0x1.04800p+0f, chars_format::hex, 2, \"1.04p+0\"}, // Lsb 0, Round 1, Trailing 0\r\n    {0x1.04801p+0f, chars_format::hex, 2, \"1.05p+0\"}, // Lsb 0, Round 1 and Trailing 1 in different hexits\r\n    {0x1.04900p+0f, chars_format::hex, 2, \"1.05p+0\"}, // Lsb 0, Round 1 and Trailing 1 in same hexit\r\n    {0x1.05000p+0f, chars_format::hex, 2, \"1.05p+0\"}, // Lsb 1, Round 0, Trailing 0\r\n    {0x1.05001p+0f, chars_format::hex, 2, \"1.05p+0\"}, // Lsb 1, Round 0 and Trailing 1 in different hexits\r\n    {0x1.05200p+0f, chars_format::hex, 2, \"1.05p+0\"}, // Lsb 1, Round 0 and Trailing 1 in same hexit\r\n    {0x1.05800p+0f, chars_format::hex, 2, \"1.06p+0\"}, // Lsb 1, Round 1, Trailing 0\r\n    {0x1.05801p+0f, chars_format::hex, 2, \"1.06p+0\"}, // Lsb 1, Round 1 and Trailing 1 in different hexits\r\n    {0x1.05900p+0f, chars_format::hex, 2, \"1.06p+0\"}, // Lsb 1, Round 1 and Trailing 1 in same hexit\r\n\r\n    // Test carry propagation.\r\n    {0x1.0afffep+0f, chars_format::hex, 5, \"1.0b000p+0\"},\r\n\r\n    // Test carry propagation into the leading hexit.\r\n    {0x0.fffffep-126f, chars_format::hex, 5, \"1.00000p-126\"},\r\n    {0x1.fffffep+127f, chars_format::hex, 5, \"2.00000p+127\"},\r\n\r\n    // Test how the leading hexit participates in the rounding decision.\r\n    {0x0.000p+0f, chars_format::hex, 0, \"0p+0\"},\r\n    {0x0.001p-126f, chars_format::hex, 0, \"0p-126\"},\r\n    {0x0.200p-126f, chars_format::hex, 0, \"0p-126\"},\r\n    {0x0.800p-126f, chars_format::hex, 0, \"0p-126\"},\r\n    {0x0.801p-126f, chars_format::hex, 0, \"1p-126\"},\r\n    {0x0.900p-126f, chars_format::hex, 0, \"1p-126\"},\r\n    {0x1.000p+0f, chars_format::hex, 0, \"1p+0\"},\r\n    {0x1.001p+0f, chars_format::hex, 0, \"1p+0\"},\r\n    {0x1.200p+0f, chars_format::hex, 0, \"1p+0\"},\r\n    {0x1.800p+0f, chars_format::hex, 0, \"2p+0\"},\r\n    {0x1.801p+0f, chars_format::hex, 0, \"2p+0\"},\r\n    {0x1.900p+0f, chars_format::hex, 0, \"2p+0\"},\r\n};\r\n\r\n#endif // FLOAT_HEX_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/float_scientific_precision_to_chars_test_cases.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception AND BSL-1.0\r\n\r\n\r\n// Copyright 2018 Ulf Adams\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n// Boost Software License - Version 1.0 - August 17th, 2003\r\n\r\n// Permission is hereby granted, free of charge, to any person or organization\r\n// obtaining a copy of the software and accompanying documentation covered by\r\n// this license (the \"Software\") to use, reproduce, display, distribute,\r\n// execute, and transmit the Software, and to prepare derivative works of the\r\n// Software, and to permit third-parties to whom the Software is furnished to\r\n// do so, all subject to the following:\r\n\r\n// The copyright notices in the Software and this entire statement, including\r\n// the above license grant, this restriction and the following disclaimer,\r\n// must be included in all copies of the Software, in whole or in part, and\r\n// all derivative works of the Software, unless such copies or derivative\r\n// works are solely in the form of machine-executable object code generated by\r\n// a source language processor.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r\n// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r\n// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r\n// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\n// DEALINGS IN THE SOFTWARE.\r\n\r\n\r\n// This file contains test cases derived from:\r\n// https://github.com/ulfjack/ryu\r\n// See xcharconv_ryu.h for the exact commit.\r\n// (Keep the cgmanifest.json commitHash in sync.)\r\n\r\n\r\n#ifndef FLOAT_SCIENTIFIC_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n#define FLOAT_SCIENTIFIC_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\ninline constexpr FloatPrecisionToCharsTestCase float_scientific_precision_to_chars_test_cases[] = {\r\n    // Test special cases (zero, inf, nan) and an ordinary case. Also test negative signs.\r\n    {0.0f, chars_format::scientific, 4, \"0.0000e+00\"},\r\n    {-0.0f, chars_format::scientific, 4, \"-0.0000e+00\"},\r\n    {float_inf, chars_format::scientific, 4, \"inf\"},\r\n    {-float_inf, chars_format::scientific, 4, \"-inf\"},\r\n    {float_nan, chars_format::scientific, 4, \"nan\"},\r\n    {-float_nan, chars_format::scientific, 4, \"-nan(ind)\"},\r\n    {float_nan_payload, chars_format::scientific, 4, \"nan\"},\r\n    {-float_nan_payload, chars_format::scientific, 4, \"-nan\"},\r\n    {1.729f, chars_format::scientific, 4, \"1.7290e+00\"},\r\n    {-1.729f, chars_format::scientific, 4, \"-1.7290e+00\"},\r\n\r\n    // Ryu Printf Zero\r\n    {0.0f, chars_format::scientific, 4, \"0.0000e+00\"},\r\n    {0.0f, chars_format::scientific, 3, \"0.000e+00\"},\r\n    {0.0f, chars_format::scientific, 2, \"0.00e+00\"},\r\n    {0.0f, chars_format::scientific, 1, \"0.0e+00\"},\r\n    {0.0f, chars_format::scientific, 0, \"0e+00\"},\r\n\r\n    // Test corner cases.\r\n    {0x0.000002p-126f, chars_format::scientific, 104, // min subnormal\r\n        \"1.\"\r\n        \"40129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125e-\"\r\n        \"45\"},\r\n    {0x0.fffffep-126f, chars_format::scientific, 111, // max subnormal\r\n        \"1.\"\r\n        \"1754942106924410754870294448492873488270524287458933338571745305715888704756189042655023513361811637878417\"\r\n        \"96875e-38\"},\r\n    {0x1p-126f, chars_format::scientific, 88, // min normal\r\n        \"1.1754943508222875079687365372222456778186655567720875215087517062784172594547271728515625e-38\"},\r\n    {0x1.fffffep+127f, chars_format::scientific, 37, // max normal\r\n        \"3.4028234663852885981170418348451692544e+38\"},\r\n\r\n    // Ryu Printf AllPowersOfTen\r\n    // These values test every power of ten that's within the range of floats.\r\n    {1e-44f, chars_format::scientific, 104,\r\n        \"9.\"\r\n        \"80908925027371949646610708302941291896183359313561040229947798722853757880102421040646731853485107421875e-\"\r\n        \"45\"},\r\n    {1e-43f, chars_format::scientific, 105,\r\n        \"9.\"\r\n        \"949219096706201203558480041358404532089859787323261979475184815617516687069610270555131137371063232421875e\"\r\n        \"-44\"},\r\n    {1e-42f, chars_format::scientific, 106,\r\n        \"1.\"\r\n        \"0005271035279193886395429224690001177341070264998322610345467546973108330377044694614596664905548095703125\"\r\n        \"e-42\"},\r\n    {1e-41f, chars_format::scientific, 102,\r\n        \"9.999665841421894618111734306356841512815949217230816547258439273837549166046301252208650112152099609375e-\"\r\n        \"42\"},\r\n    {1e-40f, chars_format::scientific, 107,\r\n        \"9.\"\r\n        \"9999461011147595815259190522734994960422052696191918504127906874943271242628384243289474397897720336914062\"\r\n        \"5e-41\"},\r\n    {1e-39f, chars_format::scientific, 107,\r\n        \"1.\"\r\n        \"0000002153053332574208756001456831092687456480096866911043660970225682715906145858753006905317306518554687\"\r\n        \"5e-39\"},\r\n    {1e-38f, chars_format::scientific, 109,\r\n        \"9.\"\r\n        \"9999993504564039245746141539976645128551939195729831580121174560891149363239804870318039320409297943115234\"\r\n        \"375e-39\"},\r\n    {1e-37f, chars_format::scientific, 107,\r\n        \"9.\"\r\n        \"9999999109757896545014425234894978288216464316777599086184261589164284922404135613760445266962051391601562\"\r\n        \"5e-38\"},\r\n    {1e-36f, chars_format::scientific, 107,\r\n        \"1.\"\r\n        \"0000000359391298238442905219082964481594808441361581309103473121178279336973560020851437002420425415039062\"\r\n        \"5e-36\"},\r\n    {1e-35f, chars_format::scientific, 104,\r\n        \"1.\"\r\n        \"00000001800250948048663201408455778204855436374880527489094543362735389990803014370612800121307373046875e-\"\r\n        \"35\"},\r\n    {1e-34f, chars_format::scientific, 102,\r\n        \"1.000000046701102029858885626602539647826036732368569844521988439212112353970951517112553119659423828125e-\"\r\n        \"34\"},\r\n    {1e-33f, chars_format::scientific, 98,\r\n        \"1.00000002374222799036108273658815415520405083747275818881715403474430559072061441838741302490234375e-33\"},\r\n    {1e-32f, chars_format::scientific, 98,\r\n        \"1.00000002374222799036108273658815415520405083747275818881715403474430559072061441838741302490234375e-32\"},\r\n    {1e-31f, chars_format::scientific, 94,\r\n        \"9.9999997966118983452530118776053400936983791927279980986387197816611660527996718883514404296875e-32\"},\r\n    {1e-30f, chars_format::scientific, 88,\r\n        \"1.0000000031710768509710513471352647538147514756461109453056224083411507308483123779296875e-30\"},\r\n    {1e-29f, chars_format::scientific, 88,\r\n        \"1.0000000031710768509710513471352647538147514756461109453056224083411507308483123779296875e-29\"},\r\n    {1e-28f, chars_format::scientific, 88,\r\n        \"1.0000000031710768509710513471352647538147514756461109453056224083411507308483123779296875e-28\"},\r\n    {1e-27f, chars_format::scientific, 85,\r\n        \"1.0000000272452011558114995103349890361263429573723815479979748488403856754302978515625e-27\"},\r\n    {1e-26f, chars_format::scientific, 82,\r\n        \"9.9999998872660226806678244921543018442779658661034858369021094404160976409912109375e-27\"},\r\n    {1e-25f, chars_format::scientific, 79,\r\n        \"1.0000000195414813782625560981110772657866336832199749551364220678806304931640625e-25\"},\r\n    {1e-24f, chars_format::scientific, 79,\r\n        \"1.0000000195414813782625560981110772657866336832199749551364220678806304931640625e-24\"},\r\n    {1e-23f, chars_format::scientific, 75,\r\n        \"9.999999998199587477372609628178631337169779413898140774108469486236572265625e-24\"},\r\n    {1e-22f, chars_format::scientific, 75,\r\n        \"1.000000031374394956577733179287005745028427128318071481771767139434814453125e-22\"},\r\n    {1e-21f, chars_format::scientific, 66, \"9.999999682655225388967887463487205224055287544615566730499267578125e-22\"},\r\n    {1e-20f, chars_format::scientific, 66, \"9.999999682655225388967887463487205224055287544615566730499267578125e-21\"},\r\n    {1e-19f, chars_format::scientific, 66, \"9.999999682655225388967887463487205224055287544615566730499267578125e-20\"},\r\n    {1e-18f, chars_format::scientific, 65, \"1.00000004581370496574313326554328540396454627625644207000732421875e-18\"},\r\n    {1e-17f, chars_format::scientific, 61, \"9.9999998377515902426605765018763349871733225882053375244140625e-18\"},\r\n    {1e-16f, chars_format::scientific, 61, \"1.0000000168623835263871646450439811815158464014530181884765625e-16\"},\r\n    {1e-15f, chars_format::scientific, 58, \"1.0000000036274937255387218471014421083964407444000244140625e-15\"},\r\n    {1e-14f, chars_format::scientific, 53, \"9.99999982451670044181213370393379591405391693115234375e-15\"},\r\n    {1e-13f, chars_format::scientific, 53, \"9.99999982451670044181213370393379591405391693115234375e-14\"},\r\n    {1e-12f, chars_format::scientific, 48, \"9.999999960041972002500187954865396022796630859375e-13\"},\r\n    {1e-11f, chars_format::scientific, 48, \"9.999999960041972002500187954865396022796630859375e-12\"},\r\n    {1e-10f, chars_format::scientific, 47, \"1.00000001335143196001808973960578441619873046875e-10\"},\r\n    {1e-09f, chars_format::scientific, 43, \"9.9999997171806853657471947371959686279296875e-10\"},\r\n    {1e-08f, chars_format::scientific, 41, \"9.99999993922529029077850282192230224609375e-09\"},\r\n    {1e-07f, chars_format::scientific, 40, \"1.0000000116860974230803549289703369140625e-07\"},\r\n    {1e-06f, chars_format::scientific, 36, \"9.999999974752427078783512115478515625e-07\"},\r\n    {1e-05f, chars_format::scientific, 32, \"9.99999974737875163555145263671875e-06\"},\r\n    {1e-04f, chars_format::scientific, 32, \"9.99999974737875163555145263671875e-05\"},\r\n    {1e-03f, chars_format::scientific, 30, \"1.000000047497451305389404296875e-03\"},\r\n    {1e-02f, chars_format::scientific, 26, \"9.99999977648258209228515625e-03\"},\r\n    {1e-01f, chars_format::scientific, 26, \"1.00000001490116119384765625e-01\"},\r\n    {1e+00f, chars_format::scientific, 0, \"1e+00\"},\r\n    {1e+01f, chars_format::scientific, 0, \"1e+01\"},\r\n    {1e+02f, chars_format::scientific, 0, \"1e+02\"},\r\n    {1e+03f, chars_format::scientific, 0, \"1e+03\"},\r\n    {1e+04f, chars_format::scientific, 0, \"1e+04\"},\r\n    {1e+05f, chars_format::scientific, 0, \"1e+05\"},\r\n    {1e+06f, chars_format::scientific, 0, \"1e+06\"},\r\n    {1e+07f, chars_format::scientific, 0, \"1e+07\"},\r\n    {1e+08f, chars_format::scientific, 0, \"1e+08\"},\r\n    {1e+09f, chars_format::scientific, 0, \"1e+09\"},\r\n    {1e+10f, chars_format::scientific, 0, \"1e+10\"},\r\n    {1e+11f, chars_format::scientific, 10, \"9.9999997952e+10\"},\r\n    {1e+12f, chars_format::scientific, 11, \"9.99999995904e+11\"},\r\n    {1e+13f, chars_format::scientific, 12, \"9.999999827968e+12\"},\r\n    {1e+14f, chars_format::scientific, 14, \"1.00000000376832e+14\"},\r\n    {1e+15f, chars_format::scientific, 14, \"9.99999986991104e+14\"},\r\n    {1e+16f, chars_format::scientific, 16, \"1.0000000272564224e+16\"},\r\n    {1e+17f, chars_format::scientific, 16, \"9.9999998430674944e+16\"},\r\n    {1e+18f, chars_format::scientific, 16, \"9.9999998430674944e+17\"},\r\n    {1e+19f, chars_format::scientific, 18, \"9.999999980506447872e+18\"},\r\n    {1e+20f, chars_format::scientific, 20, \"1.00000002004087734272e+20\"},\r\n    {1e+21f, chars_format::scientific, 20, \"1.00000002004087734272e+21\"},\r\n    {1e+22f, chars_format::scientific, 21, \"9.999999778196308361216e+21\"},\r\n    {1e+23f, chars_format::scientific, 21, \"9.999999778196308361216e+22\"},\r\n    {1e+24f, chars_format::scientific, 24, \"1.000000013848427855085568e+24\"},\r\n    {1e+25f, chars_format::scientific, 24, \"9.999999562023526247432192e+24\"},\r\n    {1e+26f, chars_format::scientific, 26, \"1.00000002537764290115403776e+26\"},\r\n    {1e+27f, chars_format::scientific, 26, \"9.99999988484154753734934528e+26\"},\r\n    {1e+28f, chars_format::scientific, 27, \"9.999999442119689768320106496e+27\"},\r\n    {1e+29f, chars_format::scientific, 29, \"1.00000001504746621987668885504e+29\"},\r\n    {1e+30f, chars_format::scientific, 29, \"1.00000001504746621987668885504e+30\"},\r\n    {1e+31f, chars_format::scientific, 30, \"9.999999848243207295109594873856e+30\"},\r\n    {1e+32f, chars_format::scientific, 32, \"1.00000003318135351409612647563264e+32\"},\r\n    {1e+33f, chars_format::scientific, 32, \"9.99999994495727286427992885035008e+32\"},\r\n    {1e+34f, chars_format::scientific, 33, \"9.999999790214767953607394487959552e+33\"},\r\n    {1e+35f, chars_format::scientific, 34, \"1.0000000409184787596297531937521664e+35\"},\r\n    {1e+36f, chars_format::scientific, 35, \"9.99999961690316245365415600208216064e+35\"},\r\n    {1e+37f, chars_format::scientific, 36, \"9.999999933815812510711506376257961984e+36\"},\r\n    {1e+38f, chars_format::scientific, 37, \"9.9999996802856924650656260769173209088e+37\"},\r\n\r\n    // Ryu Printf RoundToEven\r\n    {0.125f, chars_format::scientific, 2, \"1.25e-01\"},\r\n    {0.125f, chars_format::scientific, 1, \"1.2e-01\"},\r\n    {0.375f, chars_format::scientific, 2, \"3.75e-01\"},\r\n    {0.375f, chars_format::scientific, 1, \"3.8e-01\"},\r\n\r\n    // Ryu Printf RoundToEvenInteger\r\n    {2.5f, chars_format::scientific, 1, \"2.5e+00\"},\r\n    {2.5f, chars_format::scientific, 0, \"2e+00\"},\r\n    {3.5f, chars_format::scientific, 1, \"3.5e+00\"},\r\n    {3.5f, chars_format::scientific, 0, \"4e+00\"},\r\n\r\n    // Ryu Printf NonRoundToEvenScenarios\r\n    {0.748046875f, chars_format::scientific, 2, \"7.48e-01\"},\r\n    {0.748046875f, chars_format::scientific, 1, \"7.5e-01\"},\r\n    {0.748046875f, chars_format::scientific, 0, \"7e-01\"}, // 0.75 would round to \"8e-01\", but this is smaller\r\n\r\n    {0.2509765625f, chars_format::scientific, 2, \"2.51e-01\"},\r\n    {0.2509765625f, chars_format::scientific, 1, \"2.5e-01\"},\r\n    {0.2509765625f, chars_format::scientific, 0, \"3e-01\"}, // 0.25 would round to \"2e-01\", but this is larger\r\n\r\n    {0x1.000002p-2f, chars_format::scientific, 24, \"2.500000298023223876953125e-01\"},\r\n    {0x1.000002p-2f, chars_format::scientific, 2, \"2.50e-01\"},\r\n    {0x1.000002p-2f, chars_format::scientific, 1, \"2.5e-01\"},\r\n    {0x1.000002p-2f, chars_format::scientific, 0, \"3e-01\"}, // 0.25 would round to \"2e-01\", but this is larger (again)\r\n\r\n    // More rounding tests.\r\n    {9.5f, chars_format::scientific, 1, \"9.5e+00\"},\r\n    {9.5f, chars_format::scientific, 0, \"1e+01\"},\r\n    {10.5f, chars_format::scientific, 2, \"1.05e+01\"},\r\n    {10.5f, chars_format::scientific, 1, \"1.0e+01\"},\r\n\r\n    {1.241f, chars_format::scientific, 3, \"1.241e+00\"},\r\n    {1.241f, chars_format::scientific, 1, \"1.2e+00\"},\r\n    {1.251f, chars_format::scientific, 3, \"1.251e+00\"},\r\n    {1.251f, chars_format::scientific, 1, \"1.3e+00\"},\r\n    {1.261f, chars_format::scientific, 3, \"1.261e+00\"},\r\n    {1.261f, chars_format::scientific, 1, \"1.3e+00\"},\r\n    {1.341f, chars_format::scientific, 3, \"1.341e+00\"},\r\n    {1.341f, chars_format::scientific, 1, \"1.3e+00\"},\r\n    {1.351f, chars_format::scientific, 3, \"1.351e+00\"},\r\n    {1.351f, chars_format::scientific, 1, \"1.4e+00\"},\r\n    {1.361f, chars_format::scientific, 3, \"1.361e+00\"},\r\n    {1.361f, chars_format::scientific, 1, \"1.4e+00\"},\r\n\r\n    {2.41f, chars_format::scientific, 2, \"2.41e+00\"},\r\n    {2.41f, chars_format::scientific, 0, \"2e+00\"},\r\n    {2.51f, chars_format::scientific, 2, \"2.51e+00\"},\r\n    {2.51f, chars_format::scientific, 0, \"3e+00\"},\r\n    {2.61f, chars_format::scientific, 2, \"2.61e+00\"},\r\n    {2.61f, chars_format::scientific, 0, \"3e+00\"},\r\n    {3.41f, chars_format::scientific, 2, \"3.41e+00\"},\r\n    {3.41f, chars_format::scientific, 0, \"3e+00\"},\r\n    {3.51f, chars_format::scientific, 2, \"3.51e+00\"},\r\n    {3.51f, chars_format::scientific, 0, \"4e+00\"},\r\n    {3.61f, chars_format::scientific, 2, \"3.61e+00\"},\r\n    {3.61f, chars_format::scientific, 0, \"4e+00\"},\r\n\r\n    // Ryu Printf VaryingPrecision\r\n    {1.142857f, chars_format::scientific, 28, \"1.1428569555282592773437500000e+00\"},\r\n    {1.142857f, chars_format::scientific, 27, \"1.142856955528259277343750000e+00\"},\r\n    {1.142857f, chars_format::scientific, 26, \"1.14285695552825927734375000e+00\"},\r\n    {1.142857f, chars_format::scientific, 25, \"1.1428569555282592773437500e+00\"},\r\n    {1.142857f, chars_format::scientific, 24, \"1.142856955528259277343750e+00\"},\r\n    {1.142857f, chars_format::scientific, 23, \"1.14285695552825927734375e+00\"},\r\n    {1.142857f, chars_format::scientific, 22, \"1.1428569555282592773438e+00\"},\r\n    {1.142857f, chars_format::scientific, 21, \"1.142856955528259277344e+00\"},\r\n    {1.142857f, chars_format::scientific, 20, \"1.14285695552825927734e+00\"},\r\n    {1.142857f, chars_format::scientific, 19, \"1.1428569555282592773e+00\"},\r\n    {1.142857f, chars_format::scientific, 18, \"1.142856955528259277e+00\"},\r\n    {1.142857f, chars_format::scientific, 17, \"1.14285695552825928e+00\"},\r\n    {1.142857f, chars_format::scientific, 16, \"1.1428569555282593e+00\"},\r\n    {1.142857f, chars_format::scientific, 15, \"1.142856955528259e+00\"},\r\n    {1.142857f, chars_format::scientific, 14, \"1.14285695552826e+00\"},\r\n    {1.142857f, chars_format::scientific, 13, \"1.1428569555283e+00\"},\r\n    {1.142857f, chars_format::scientific, 12, \"1.142856955528e+00\"},\r\n    {1.142857f, chars_format::scientific, 11, \"1.14285695553e+00\"},\r\n    {1.142857f, chars_format::scientific, 10, \"1.1428569555e+00\"},\r\n    {1.142857f, chars_format::scientific, 9, \"1.142856956e+00\"},\r\n    {1.142857f, chars_format::scientific, 8, \"1.14285696e+00\"},\r\n    {1.142857f, chars_format::scientific, 7, \"1.1428570e+00\"},\r\n    {1.142857f, chars_format::scientific, 6, \"1.142857e+00\"},\r\n    {1.142857f, chars_format::scientific, 5, \"1.14286e+00\"},\r\n    {1.142857f, chars_format::scientific, 4, \"1.1429e+00\"},\r\n    {1.142857f, chars_format::scientific, 3, \"1.143e+00\"},\r\n    {1.142857f, chars_format::scientific, 2, \"1.14e+00\"},\r\n    {1.142857f, chars_format::scientific, 1, \"1.1e+00\"},\r\n    {1.142857f, chars_format::scientific, 0, \"1e+00\"},\r\n\r\n    // Negative precision requests 6 digits of precision.\r\n    {1.142857f, chars_format::scientific, -1, \"1.142857e+00\"},\r\n    {1.142857f, chars_format::scientific, -2, \"1.142857e+00\"},\r\n    {1.142857f, chars_format::scientific, -3, \"1.142857e+00\"},\r\n\r\n    // Ryu Printf Carrying\r\n    {2.0009f, chars_format::scientific, 4, \"2.0009e+00\"},\r\n    {2.0009f, chars_format::scientific, 3, \"2.001e+00\"},\r\n    {2.0029f, chars_format::scientific, 4, \"2.0029e+00\"},\r\n    {2.0029f, chars_format::scientific, 3, \"2.003e+00\"},\r\n    {2.0099f, chars_format::scientific, 4, \"2.0099e+00\"},\r\n    {2.0099f, chars_format::scientific, 3, \"2.010e+00\"},\r\n    {2.0299f, chars_format::scientific, 4, \"2.0299e+00\"},\r\n    {2.0299f, chars_format::scientific, 3, \"2.030e+00\"},\r\n    {2.0999f, chars_format::scientific, 4, \"2.0999e+00\"},\r\n    {2.0999f, chars_format::scientific, 3, \"2.100e+00\"},\r\n    {2.2999f, chars_format::scientific, 4, \"2.2999e+00\"},\r\n    {2.2999f, chars_format::scientific, 3, \"2.300e+00\"},\r\n    {2.9999f, chars_format::scientific, 4, \"2.9999e+00\"},\r\n    {2.9999f, chars_format::scientific, 3, \"3.000e+00\"},\r\n    {9.9999f, chars_format::scientific, 4, \"9.9999e+00\"},\r\n    {9.9999f, chars_format::scientific, 3, \"1.000e+01\"},\r\n\r\n    {2.09f, chars_format::scientific, 2, \"2.09e+00\"},\r\n    {2.09f, chars_format::scientific, 1, \"2.1e+00\"},\r\n    {2.29f, chars_format::scientific, 2, \"2.29e+00\"},\r\n    {2.29f, chars_format::scientific, 1, \"2.3e+00\"},\r\n    {2.99f, chars_format::scientific, 2, \"2.99e+00\"},\r\n    {2.99f, chars_format::scientific, 1, \"3.0e+00\"},\r\n    {9.99f, chars_format::scientific, 2, \"9.99e+00\"},\r\n    {9.99f, chars_format::scientific, 1, \"1.0e+01\"},\r\n\r\n    {2.9f, chars_format::scientific, 1, \"2.9e+00\"},\r\n    {2.9f, chars_format::scientific, 0, \"3e+00\"},\r\n    {9.9f, chars_format::scientific, 1, \"9.9e+00\"},\r\n    {9.9f, chars_format::scientific, 0, \"1e+01\"},\r\n\r\n    // Ryu Printf Exponents\r\n    {9.99e-10f, chars_format::scientific, 2, \"9.99e-10\"},\r\n    {9.99e-09f, chars_format::scientific, 2, \"9.99e-09\"},\r\n    {9.99e-01f, chars_format::scientific, 2, \"9.99e-01\"},\r\n    {9.99e+00f, chars_format::scientific, 2, \"9.99e+00\"},\r\n    {9.99e+01f, chars_format::scientific, 2, \"9.99e+01\"},\r\n    {9.99e+09f, chars_format::scientific, 2, \"9.99e+09\"},\r\n    {9.99e+10f, chars_format::scientific, 2, \"9.99e+10\"},\r\n\r\n    {9.99e-10f, chars_format::scientific, 1, \"1.0e-09\"},\r\n    {9.99e-09f, chars_format::scientific, 1, \"1.0e-08\"},\r\n    {9.99e-01f, chars_format::scientific, 1, \"1.0e+00\"},\r\n    {9.99e+00f, chars_format::scientific, 1, \"1.0e+01\"},\r\n    {9.99e+01f, chars_format::scientific, 1, \"1.0e+02\"},\r\n    {9.99e+09f, chars_format::scientific, 1, \"1.0e+10\"},\r\n    {9.99e+10f, chars_format::scientific, 1, \"1.0e+11\"},\r\n\r\n    // Ryu Printf AllBinaryExponents\r\n    // These values test every binary exponent.\r\n    // The mantissas were randomly generated.\r\n    {0x0.bafab0p-126f, chars_format::scientific, 107,\r\n        \"8.\"\r\n        \"5856660078164374052571520381239855817217629811131320365461649230225810169869760102301370352506637573242187\"\r\n        \"5e-39\"},\r\n    {0x1.2c4906p-126f, chars_format::scientific, 111,\r\n        \"1.\"\r\n        \"3788422360444725799170555395988202383016563601793620435599297375199720136484948795896343654021620750427246\"\r\n        \"09375e-38\"},\r\n    {0x1.da6c8cp-125f, chars_format::scientific, 109,\r\n        \"4.\"\r\n        \"3568964460614492296234103491671745446178474818057230651136547036595368653788540314053534530103206634521484\"\r\n        \"375e-38\"},\r\n    {0x1.094fd8p-124f, chars_format::scientific, 107,\r\n        \"4.\"\r\n        \"8730098044956940648689859309723501868625857818278160902221179289536129308757494982273783534765243530273437\"\r\n        \"5e-38\"},\r\n    {0x1.1fba2ap-123f, chars_format::scientific, 109,\r\n        \"1.\"\r\n        \"0569428191822507939881039060004188252129978601750040353991776209794002661102041429330711252987384796142578\"\r\n        \"125e-37\"},\r\n    {0x1.05c066p-122f, chars_format::scientific, 108,\r\n        \"1.\"\r\n        \"9230467241438048605749036664954171842721044312192826420869210321670447760844524509593611583113670349121093\"\r\n        \"75e-37\"},\r\n    {0x1.aa97aep-121f, chars_format::scientific, 107,\r\n        \"6.\"\r\n        \"2682134052278382034317570078635218253248121012038564692208751497667224006349329101794864982366561889648437\"\r\n        \"5e-37\"},\r\n    {0x1.dd39a8p-120f, chars_format::scientific, 105,\r\n        \"1.\"\r\n        \"402438874646247750851657016594307463985884969771101485328502708228859408023936339304782450199127197265625e\"\r\n        \"-36\"},\r\n    {0x1.d47ee4p-119f, chars_format::scientific, 105,\r\n        \"2.\"\r\n        \"753570046800320919541684228734204622774621916697559471583583415484064449429979504202492535114288330078125e\"\r\n        \"-36\"},\r\n    {0x1.3d3c36p-118f, chars_format::scientific, 105,\r\n        \"3.\"\r\n        \"729081842766376549743290774072513136892856721536744273788293430570150999159295679419301450252532958984375e\"\r\n        \"-36\"},\r\n    {0x1.1661f4p-117f, chars_format::scientific, 103,\r\n        \"6.\"\r\n        \"5447441644065192772010189083715139205202243608571574700187600294454259852727773250080645084381103515625e-\"\r\n        \"36\"},\r\n    {0x1.b68df4p-116f, chars_format::scientific, 103,\r\n        \"2.\"\r\n        \"0620733697737581832019236718658803118114911610758483179403903647053386549714559805579483509063720703125e-\"\r\n        \"35\"},\r\n    {0x1.d99cbcp-115f, chars_format::scientific, 102,\r\n        \"4.453828135148790991673442414370889923378622963993538561236896870798585013062620419077575206756591796875e-\"\r\n        \"35\"},\r\n    {0x1.fd046ep-114f, chars_format::scientific, 102,\r\n        \"9.573551435136219346253356313052326716805272442482100391194957227092299234527672524563968181610107421875e-\"\r\n        \"35\"},\r\n    {0x1.89834cp-113f, chars_format::scientific, 101,\r\n        \"1.48023092977964777039833097802364118989950189925000614428441357561805347131667076610028743743896484375e-\"\r\n        \"34\"},\r\n    {0x1.44f9f6p-112f, chars_format::scientific, 101,\r\n        \"2.44485077761403269855863218622241304191185681346184344636825701291282797456005937419831752777099609375e-\"\r\n        \"34\"},\r\n    {0x1.610156p-111f, chars_format::scientific, 100,\r\n        \"5.3114321941046389584918230189833796378476189953948627677188069895475308612731168977916240692138671875e-\"\r\n        \"34\"},\r\n    {0x1.1c4ce0p-110f, chars_format::scientific, 95,\r\n        \"8.55535074104030543315341178235051098966105705542347053919882693406862017582170665264129638671875e-34\"},\r\n    {0x1.c8846ap-109f, chars_format::scientific, 99,\r\n        \"2.747563210400574676694231398741237029228255561600948508123483382536988983702030964195728302001953125e-\"\r\n        \"33\"},\r\n    {0x1.49aaa6p-108f, chars_format::scientific, 98,\r\n        \"3.96821729911656973098277999199730227135040686156682094762847279323381144422455690801143646240234375e-33\"},\r\n    {0x1.f5603cp-107f, chars_format::scientific, 97,\r\n        \"1.2070186113858457615715036175854047096256968023404067681496332209434285687166266143321990966796875e-32\"},\r\n    {0x1.b7bbf8p-106f, chars_format::scientific, 95,\r\n        \"2.11724341322508937840915176712265363597160619557838059749677039889093066449277102947235107421875e-32\"},\r\n    {0x1.6d305cp-105f, chars_format::scientific, 95,\r\n        \"3.51664122601460292174574136500884378151845989294218826175242309517443572985939681529998779296875e-32\"},\r\n    {0x1.dd9944p-104f, chars_format::scientific, 94,\r\n        \"9.1982162588143308372426801228237163172804681524337790977929874003393706516362726688385009765625e-32\"},\r\n    {0x1.0f4254p-103f, chars_format::scientific, 94,\r\n        \"1.0448520245617299544506055022011322932281191403904399041258077573957052663899958133697509765625e-31\"},\r\n    {0x1.049450p-102f, chars_format::scientific, 91,\r\n        \"2.0074302591139273483884727591728498336691676235299559849512007758676190860569477081298828125e-31\"},\r\n    {0x1.28d030p-101f, chars_format::scientific, 90,\r\n        \"4.573131937693259427041496124538667251427229422876784281637441154089174233376979827880859375e-31\"},\r\n    {0x1.28a2bep-100f, chars_format::scientific, 92,\r\n        \"9.14079359487553225693590893672771706036816190371857397678478918123801122419536113739013671875e-31\"},\r\n    {0x1.e674d2p-99f, chars_format::scientific, 92,\r\n        \"2.99801859623548450508972193909865244412972328427583780519061207314734929241240024566650390625e-30\"},\r\n    {0x1.227314p-98f, chars_format::scientific, 90,\r\n        \"3.580066786954745677669456497979475880433682721056161402106710056614247150719165802001953125e-30\"},\r\n    {0x1.735b6cp-97f, chars_format::scientific, 89,\r\n        \"9.15465972623783196037990815292079067038371088262625752118850641636527143418788909912109375e-30\"},\r\n    {0x1.ef60b4p-96f, chars_format::scientific, 89,\r\n        \"2.44240085996903849216356078751341022854748745722804070812372856380534358322620391845703125e-29\"},\r\n    {0x1.f58d34p-95f, chars_format::scientific, 88,\r\n        \"4.9456803654801575096422210377919300096339643075561698370989915929385460913181304931640625e-29\"},\r\n    {0x1.a9fa8ap-94f, chars_format::scientific, 88,\r\n        \"8.4009479452815486408032573050798399509585053673323129519445728874416090548038482666015625e-29\"},\r\n    {0x1.2ebd9ap-93f, chars_format::scientific, 88,\r\n        \"1.1941012414974986903540736041200443068748917913209084407100135649670846760272979736328125e-28\"},\r\n    {0x1.1c25bep-92f, chars_format::scientific, 87,\r\n        \"2.241527991772840369420073304083191365256388471842441401093992681126110255718231201171875e-28\"},\r\n    {0x1.80d526p-91f, chars_format::scientific, 86,\r\n        \"6.07158803876554990450680694292368438689814417845436178566842500003986060619354248046875e-28\"},\r\n    {0x1.16cdd0p-90f, chars_format::scientific, 82,\r\n        \"8.7975016152851199468348749874043115366058394333226289063532021827995777130126953125e-28\"},\r\n    {0x1.be00c0p-89f, chars_format::scientific, 80,\r\n        \"2.81467419875603623917323685831723008277625852624481694874702952802181243896484375e-27\"},\r\n    {0x1.dbe376p-88f, chars_format::scientific, 84,\r\n        \"6.006557569745856595501482055708847377292216272726133041715002036653459072113037109375e-27\"},\r\n    {0x1.75b358p-87f, chars_format::scientific, 81,\r\n        \"9.433528423839338263891493367075328273989136274035871565502020530402660369873046875e-27\"},\r\n    {0x1.5e56fap-86f, chars_format::scientific, 83,\r\n        \"1.76876373794073549186243776242822499413496518949617808402763330377638339996337890625e-26\"},\r\n    {0x1.1542e6p-85f, chars_format::scientific, 82,\r\n        \"2.7996239036498255213653797353262236131499034186287389047720353119075298309326171875e-26\"},\r\n    {0x1.37b7a6p-84f, chars_format::scientific, 81,\r\n        \"6.295082290272475030989309944874260889838800403506269276476814411580562591552734375e-26\"},\r\n    {0x1.31f62ap-83f, chars_format::scientific, 81,\r\n        \"1.235768973696664669858567539321145118649987459935601918914471752941608428955078125e-25\"},\r\n    {0x1.ac3560p-82f, chars_format::scientific, 76,\r\n        \"3.4590406845628797200186450581230516131137076030199750675819814205169677734375e-25\"},\r\n    {0x1.a7db5cp-81f, chars_format::scientific, 78,\r\n        \"6.847777099176331341674240101847394713956151957034990118700079619884490966796875e-25\"},\r\n    {0x1.40189cp-80f, chars_format::scientific, 78,\r\n        \"1.034286379672715366987641733210033664035198963659922810620628297328948974609375e-24\"},\r\n    {0x1.aad1eep-79f, chars_format::scientific, 78,\r\n        \"2.758259846499093682487211692864773559218105614121441249153576791286468505859375e-24\"},\r\n    {0x1.49824cp-78f, chars_format::scientific, 76,\r\n        \"4.2588036474940459085811637121780459484809977510622047702781856060028076171875e-24\"},\r\n    {0x1.955292p-77f, chars_format::scientific, 77,\r\n        \"1.04773420985315373838626628182169411331037256474019159213639795780181884765625e-23\"},\r\n    {0x1.d8ca0cp-76f, chars_format::scientific, 75,\r\n        \"2.444263111177596802332967266437459101513507420122550684027373790740966796875e-23\"},\r\n    {0x1.28b5aap-75f, chars_format::scientific, 75,\r\n        \"3.067905619497844072028707730390270809472941238027487997896969318389892578125e-23\"},\r\n    {0x1.e5fda8p-74f, chars_format::scientific, 73,\r\n        \"1.0050055115902033206854316793794380802129495577901252545416355133056640625e-22\"},\r\n    {0x1.fd929cp-73f, chars_format::scientific, 73,\r\n        \"2.1075432611470358337541921610390309449467594049565377645194530487060546875e-22\"},\r\n    {0x1.c0b84cp-72f, chars_format::scientific, 72,\r\n        \"3.711724097438896357340602997067040280665395357573288492858409881591796875e-22\"},\r\n    {0x1.5cfeaep-71f, chars_format::scientific, 72,\r\n        \"5.773635352424624465965559338086719731730767080080113373696804046630859375e-22\"},\r\n    {0x1.bcce4ap-70f, chars_format::scientific, 72,\r\n        \"1.471738991536079335112024613790339400143380998997599817812442779541015625e-21\"},\r\n    {0x1.edf106p-69f, chars_format::scientific, 71,\r\n        \"3.26863064574260634910627773444362353938430487687583081424236297607421875e-21\"},\r\n    {0x1.30b422p-68f, chars_format::scientific, 70,\r\n        \"4.0327191475944672156035895296995186232180685692583210766315460205078125e-21\"},\r\n    {0x1.7aa8d8p-67f, chars_format::scientific, 68,\r\n        \"1.00230347240102665385544432156972316505516573670320212841033935546875e-20\"},\r\n    {0x1.4ad4e0p-66f, chars_format::scientific, 65,\r\n        \"1.75140760553442509348562143578487138029231573455035686492919921875e-20\"},\r\n    {0x1.dde636p-65f, chars_format::scientific, 68,\r\n        \"5.05995524921864861016965251964971894693690046551637351512908935546875e-20\"},\r\n    {0x1.5df870p-64f, chars_format::scientific, 64,\r\n        \"7.4109127331368847396687003781234892585416673682630062103271484375e-20\"},\r\n    {0x1.c346fap-63f, chars_format::scientific, 67,\r\n        \"1.9112335047873604296656620434025075638828639057464897632598876953125e-19\"},\r\n    {0x1.58d2eap-62f, chars_format::scientific, 66,\r\n        \"2.920771899491385068938311721231659845443573431111872196197509765625e-19\"},\r\n    {0x1.0d4824p-61f, chars_format::scientific, 64,\r\n        \"4.5618111223383324851561766710705825289551285095512866973876953125e-19\"},\r\n    {0x1.04585cp-60f, chars_format::scientific, 63,\r\n        \"8.820836917354691955064048547452415505176759324967861175537109375e-19\"},\r\n    {0x1.55cf7ap-59f, chars_format::scientific, 64,\r\n        \"2.3161977389916240139687737820128887733517331071197986602783203125e-18\"},\r\n    {0x1.1fd8ecp-58f, chars_format::scientific, 62,\r\n        \"3.90105904223582084021197668999292318403604440391063690185546875e-18\"},\r\n    {0x1.0bc866p-57f, chars_format::scientific, 62,\r\n        \"7.25826751123333980988787395016714754092390649020671844482421875e-18\"},\r\n    {0x1.4dfa86p-56f, chars_format::scientific, 62,\r\n        \"1.81050165732891247031242920595417444928898476064205169677734375e-17\"},\r\n    {0x1.335daep-55f, chars_format::scientific, 61,\r\n        \"3.3324681586205479543426333233213654239079914987087249755859375e-17\"},\r\n    {0x1.5bc756p-54f, chars_format::scientific, 60,\r\n        \"7.541247487712833172911197632259927559061907231807708740234375e-17\"},\r\n    {0x1.9eb052p-53f, chars_format::scientific, 60,\r\n        \"1.798425779915148827771409489884035792783834040164947509765625e-16\"},\r\n    {0x1.13b6d2p-52f, chars_format::scientific, 59,\r\n        \"2.39143897259270284301468922905087310937233269214630126953125e-16\"},\r\n    {0x1.260438p-51f, chars_format::scientific, 56, \"5.10037289299151118393549353413618518970906734466552734375e-16\"},\r\n    {0x1.9e6b44p-50f, chars_format::scientific, 57, \"1.437804758404521467129999479084290214814245700836181640625e-15\"},\r\n    {0x1.89c0bcp-49f, chars_format::scientific, 56, \"2.73220937993773164975674916377101908437907695770263671875e-15\"},\r\n    {0x1.e30610p-48f, chars_format::scientific, 53, \"6.70330015995791728133923470522859133780002593994140625e-15\"},\r\n    {0x1.48b6e8p-47f, chars_format::scientific, 53, \"9.12365953728740131101204724473063834011554718017578125e-15\"},\r\n    {0x1.41382ep-46f, chars_format::scientific, 55, \"1.7831261573081173821275768887062440626323223114013671875e-14\"},\r\n    {0x1.383b8ep-45f, chars_format::scientific, 54, \"3.466478609693256218715617933412431739270687103271484375e-14\"},\r\n    {0x1.1e6564p-44f, chars_format::scientific, 52, \"6.3592699357274684590635160930105485022068023681640625e-14\"},\r\n    {0x1.c35e62p-43f, chars_format::scientific, 53, \"2.00447961722950707130763703389675356447696685791015625e-13\"},\r\n    {0x1.2a2f4ep-42f, chars_format::scientific, 52, \"2.6484129017449731247069166784058324992656707763671875e-13\"},\r\n    {0x1.69fae2p-41f, chars_format::scientific, 51, \"6.430056682417417679431537180789746344089508056640625e-13\"},\r\n    {0x1.4ccefep-40f, chars_format::scientific, 51, \"1.182373535017766652543969030375592410564422607421875e-12\"},\r\n    {0x1.aa9bf6p-39f, chars_format::scientific, 50, \"3.03124083993189241681420753593556582927703857421875e-12\"},\r\n    {0x1.3b9744p-38f, chars_format::scientific, 48, \"4.484816164274096905728583806194365024566650390625e-12\"},\r\n    {0x1.b2fc6ap-37f, chars_format::scientific, 49, \"1.2363045483188006556929394719190895557403564453125e-11\"},\r\n    {0x1.7bc418p-36f, chars_format::scientific, 46, \"2.1587197307493255493682227097451686859130859375e-11\"},\r\n    {0x1.f4a74cp-35f, chars_format::scientific, 46, \"5.6917713597837149563929415307939052581787109375e-11\"},\r\n    {0x1.89f248p-34f, chars_format::scientific, 44, \"8.95730434269381703416001982986927032470703125e-11\"},\r\n    {0x1.60ac54p-33f, chars_format::scientific, 45, \"1.603771837555001411601551808416843414306640625e-10\"},\r\n    {0x1.2f6d0ep-32f, chars_format::scientific, 45, \"2.759643347172158200919511727988719940185546875e-10\"},\r\n    {0x1.748684p-31f, chars_format::scientific, 43, \"6.7761984912095840627443976700305938720703125e-10\"},\r\n    {0x1.b4fa00p-30f, chars_format::scientific, 36, \"1.589711473570787347853183746337890625e-09\"},\r\n    {0x1.c204d8p-29f, chars_format::scientific, 41, \"3.27431859403759517590515315532684326171875e-09\"},\r\n    {0x1.50029ep-28f, chars_format::scientific, 42, \"4.889592286616561978007666766643524169921875e-09\"},\r\n    {0x1.56cf38p-27f, chars_format::scientific, 39, \"9.977068060607052757404744625091552734375e-09\"},\r\n    {0x1.0b5a5cp-26f, chars_format::scientific, 40, \"1.5561990807100301026366651058197021484375e-08\"},\r\n    {0x1.fc8250p-25f, chars_format::scientific, 37, \"5.9198242752245278097689151763916015625e-08\"},\r\n    {0x1.c66674p-24f, chars_format::scientific, 39, \"1.057982927932243910618126392364501953125e-07\"},\r\n    {0x1.4da57ep-23f, chars_format::scientific, 39, \"1.553662372089092968963086605072021484375e-07\"},\r\n    {0x1.4fcdacp-22f, chars_format::scientific, 37, \"3.1274129241865011863410472869873046875e-07\"},\r\n    {0x1.5eaff4p-21f, chars_format::scientific, 36, \"6.532060297104180790483951568603515625e-07\"},\r\n    {0x1.d2f696p-20f, chars_format::scientific, 37, \"1.7395735767422593198716640472412109375e-06\"},\r\n    {0x1.e4400cp-19f, chars_format::scientific, 35, \"3.60794501830241642892360687255859375e-06\"},\r\n    {0x1.03e624p-18f, chars_format::scientific, 34, \"3.8727966966689564287662506103515625e-06\"},\r\n    {0x1.bdb65ep-17f, chars_format::scientific, 35, \"1.32832637973478995263576507568359375e-05\"},\r\n    {0x1.57fb84p-16f, chars_format::scientific, 33, \"2.050295370281673967838287353515625e-05\"},\r\n    {0x1.fd2d62p-15f, chars_format::scientific, 33, \"6.069866140023805201053619384765625e-05\"},\r\n    {0x1.ca0c58p-14f, chars_format::scientific, 31, \"1.0920720524154603481292724609375e-04\"},\r\n    {0x1.988f70p-13f, chars_format::scientific, 29, \"1.94816733710467815399169921875e-04\"},\r\n    {0x1.032dd6p-12f, chars_format::scientific, 31, \"2.4717240012250840663909912109375e-04\"},\r\n    {0x1.571b08p-11f, chars_format::scientific, 28, \"6.5442197956144809722900390625e-04\"},\r\n    {0x1.53bedap-10f, chars_format::scientific, 30, \"1.296026282943785190582275390625e-03\"},\r\n    {0x1.ab2f36p-9f, chars_format::scientific, 29, \"3.25915846042335033416748046875e-03\"},\r\n    {0x1.7293dap-8f, chars_format::scientific, 28, \"5.6545645929872989654541015625e-03\"},\r\n    {0x1.825eb6p-7f, chars_format::scientific, 28, \"1.1791075579822063446044921875e-02\"},\r\n    {0x1.f45aa0p-6f, chars_format::scientific, 23, \"3.05391848087310791015625e-02\"},\r\n    {0x1.854d96p-5f, chars_format::scientific, 26, \"4.75223474204540252685546875e-02\"},\r\n    {0x1.5650cep-4f, chars_format::scientific, 25, \"8.3573155105113983154296875e-02\"},\r\n    {0x1.03acdap-3f, chars_format::scientific, 25, \"1.2679453194141387939453125e-01\"},\r\n    {0x1.6b9416p-2f, chars_format::scientific, 24, \"3.550570905208587646484375e-01\"},\r\n    {0x1.a8544ap-1f, chars_format::scientific, 23, \"8.28768074512481689453125e-01\"},\r\n    {0x1.0693f6p+0f, chars_format::scientific, 23, \"1.02569520473480224609375e+00\"},\r\n    {0x1.b9476ep+1f, chars_format::scientific, 22, \"3.4474923610687255859375e+00\"},\r\n    {0x1.3cb752p+2f, chars_format::scientific, 21, \"4.948688983917236328125e+00\"},\r\n    {0x1.bb8a64p+3f, chars_format::scientific, 20, \"1.38606433868408203125e+01\"},\r\n    {0x1.1de906p+4f, chars_format::scientific, 20, \"1.78693904876708984375e+01\"},\r\n    {0x1.d8e834p+5f, chars_format::scientific, 18, \"5.911338043212890625e+01\"},\r\n    {0x1.27cd38p+6f, chars_format::scientific, 16, \"7.3950408935546875e+01\"},\r\n    {0x1.3cdcd6p+7f, chars_format::scientific, 18, \"1.584313201904296875e+02\"},\r\n    {0x1.392656p+8f, chars_format::scientific, 17, \"3.13149749755859375e+02\"},\r\n    {0x1.c96aa8p+9f, chars_format::scientific, 14, \"9.14833251953125e+02\"},\r\n    {0x1.28b6b2p+10f, chars_format::scientific, 16, \"1.1868546142578125e+03\"},\r\n    {0x1.786090p+11f, chars_format::scientific, 12, \"3.011017578125e+03\"},\r\n    {0x1.79c6f6p+12f, chars_format::scientific, 14, \"6.04443505859375e+03\"},\r\n    {0x1.ef1840p+13f, chars_format::scientific, 9, \"1.584303125e+04\"},\r\n    {0x1.539fd0p+14f, chars_format::scientific, 10, \"2.1735953125e+04\"},\r\n    {0x1.b31804p+15f, chars_format::scientific, 11, \"5.56920078125e+04\"},\r\n    {0x1.ad4a9cp+16f, chars_format::scientific, 11, \"1.09898609375e+05\"},\r\n    {0x1.4c43a6p+17f, chars_format::scientific, 11, \"1.70119296875e+05\"},\r\n    {0x1.5598c6p+18f, chars_format::scientific, 10, \"3.4979509375e+05\"},\r\n    {0x1.73695ep+19f, chars_format::scientific, 9, \"7.606509375e+05\"},\r\n    {0x1.234f2ap+20f, chars_format::scientific, 9, \"1.193202625e+06\"},\r\n    {0x1.0a4cc8p+21f, chars_format::scientific, 6, \"2.181529e+06\"},\r\n    {0x1.90abd2p+22f, chars_format::scientific, 7, \"6.5645965e+06\"},\r\n    {0x1.62dde8p+23f, chars_format::scientific, 7, \"1.1628276e+07\"},\r\n    {0x1.9e3a8cp+24f, chars_format::scientific, 7, \"2.7146892e+07\"},\r\n    {0x1.53a3eap+25f, chars_format::scientific, 7, \"4.4517332e+07\"},\r\n    {0x1.41a1cep+26f, chars_format::scientific, 7, \"8.4313912e+07\"},\r\n    {0x1.8fdda4p+27f, chars_format::scientific, 8, \"2.09644832e+08\"},\r\n    {0x1.d0322ap+28f, chars_format::scientific, 8, \"4.86744736e+08\"},\r\n    {0x1.cdb764p+29f, chars_format::scientific, 8, \"9.68289408e+08\"},\r\n    {0x1.7620d8p+30f, chars_format::scientific, 9, \"1.569207808e+09\"},\r\n    {0x1.c18df6p+31f, chars_format::scientific, 9, \"3.771136768e+09\"},\r\n    {0x1.240cf8p+32f, chars_format::scientific, 9, \"4.899796992e+09\"},\r\n    {0x1.81669ap+33f, chars_format::scientific, 10, \"1.2931904512e+10\"},\r\n    {0x1.3be30cp+34f, chars_format::scientific, 10, \"2.1198811136e+10\"},\r\n    {0x1.d1e6e4p+35f, chars_format::scientific, 10, \"6.2532296704e+10\"},\r\n    {0x1.06b274p+36f, chars_format::scientific, 10, \"7.0517211136e+10\"},\r\n    {0x1.a74284p+37f, chars_format::scientific, 11, \"2.27235889152e+11\"},\r\n    {0x1.9fd3e6p+38f, chars_format::scientific, 11, \"4.46491623424e+11\"},\r\n    {0x1.e2cec4p+39f, chars_format::scientific, 12, \"1.036821594112e+12\"},\r\n    {0x1.3d5d32p+40f, chars_format::scientific, 11, \"1.36306819072e+12\"},\r\n    {0x1.accccap+41f, chars_format::scientific, 12, \"3.683363586048e+12\"},\r\n    {0x1.a120ccp+42f, chars_format::scientific, 12, \"7.166206410752e+12\"},\r\n    {0x1.55a028p+43f, chars_format::scientific, 13, \"1.1738166591488e+13\"},\r\n    {0x1.035296p+44f, chars_format::scientific, 13, \"1.7820513468416e+13\"},\r\n    {0x1.22d1aap+45f, chars_format::scientific, 13, \"3.9969859043328e+13\"},\r\n    {0x1.eb8eaep+46f, chars_format::scientific, 14, \"1.35118253457408e+14\"},\r\n    {0x1.490d0ep+47f, chars_format::scientific, 14, \"1.80897697497088e+14\"},\r\n    {0x1.9da088p+48f, chars_format::scientific, 14, \"4.54787778740224e+14\"},\r\n    {0x1.e7fab4p+49f, chars_format::scientific, 15, \"1.073077848899584e+15\"},\r\n    {0x1.98a534p+50f, chars_format::scientific, 14, \"1.79724114460672e+15\"},\r\n    {0x1.93aeeap+51f, chars_format::scientific, 15, \"3.550835489374208e+15\"},\r\n    {0x1.3df680p+52f, chars_format::scientific, 15, \"5.593662327095296e+15\"},\r\n    {0x1.c763f6p+53f, chars_format::scientific, 15, \"1.602262782705664e+16\"},\r\n    {0x1.8b669ep+54f, chars_format::scientific, 15, \"2.782386114789376e+16\"},\r\n    {0x1.73e5b6p+55f, chars_format::scientific, 16, \"5.2339893103230976e+16\"},\r\n    {0x1.a13d18p+56f, chars_format::scientific, 17, \"1.17442238576852992e+17\"},\r\n    {0x1.a0797ep+57f, chars_format::scientific, 17, \"2.34454344768946176e+17\"},\r\n    {0x1.c07a80p+58f, chars_format::scientific, 17, \"5.04941918963105792e+17\"},\r\n    {0x1.729388p+59f, chars_format::scientific, 17, \"8.34463629662224384e+17\"},\r\n    {0x1.edfb70p+60f, chars_format::scientific, 18, \"2.224697951572197376e+18\"},\r\n    {0x1.3d6782p+61f, chars_format::scientific, 17, \"2.85892402114199552e+18\"},\r\n    {0x1.b121e8p+62f, chars_format::scientific, 18, \"7.802620494837972992e+18\"},\r\n    {0x1.0efc5ap+63f, chars_format::scientific, 18, \"9.763290520209063936e+18\"},\r\n    {0x1.b7dba0p+64f, chars_format::scientific, 19, \"3.1695102724410441728e+19\"},\r\n    {0x1.ec2306p+65f, chars_format::scientific, 19, \"7.0924388975830368256e+19\"},\r\n    {0x1.2e2d28p+66f, chars_format::scientific, 19, \"8.7096415015485308928e+19\"},\r\n    {0x1.e02208p+67f, chars_format::scientific, 20, \"2.76777792668052750336e+20\"},\r\n    {0x1.402636p+68f, chars_format::scientific, 20, \"3.69106968238077509632e+20\"},\r\n    {0x1.11f97cp+69f, chars_format::scientific, 20, \"6.31742296991907971072e+20\"},\r\n    {0x1.74db2ap+70f, chars_format::scientific, 21, \"1.719495307615820316672e+21\"},\r\n    {0x1.94a32ap+71f, chars_format::scientific, 21, \"3.732120907777931476992e+21\"},\r\n    {0x1.c272dcp+72f, chars_format::scientific, 21, \"8.309311323384498356224e+21\"},\r\n    {0x1.36ca40p+73f, chars_format::scientific, 22, \"1.1466128622488263852032e+22\"},\r\n    {0x1.5f6fbep+74f, chars_format::scientific, 22, \"2.5931436172223350571008e+22\"},\r\n    {0x1.95ec4ep+75f, chars_format::scientific, 22, \"5.9903671176748022628352e+22\"},\r\n    {0x1.6b3912p+76f, chars_format::scientific, 23, \"1.07204487170660958732288e+23\"},\r\n    {0x1.10992ap+77f, chars_format::scientific, 23, \"1.60913632700346331561984e+23\"},\r\n    {0x1.74a25ep+78f, chars_format::scientific, 23, \"4.39928869395322133020672e+23\"},\r\n    {0x1.43f462p+79f, chars_format::scientific, 22, \"7.6491622058254812577792e+23\"},\r\n    {0x1.f12ca2p+80f, chars_format::scientific, 24, \"2.347839472055691035803648e+24\"},\r\n    {0x1.2b7f18p+81f, chars_format::scientific, 22, \"2.8286640885152838844416e+24\"},\r\n    {0x1.a40704p+82f, chars_format::scientific, 24, \"7.934093352976572433301504e+24\"},\r\n    {0x1.35d5f8p+83f, chars_format::scientific, 23, \"1.17052661598219352932352e+25\"},\r\n    {0x1.c2c9d2p+84f, chars_format::scientific, 25, \"3.4060605519118462894473216e+25\"},\r\n    {0x1.47bf20p+85f, chars_format::scientific, 23, \"4.95276631635027751337984e+25\"},\r\n    {0x1.60b728p+86f, chars_format::scientific, 25, \"1.0660170486011939073818624e+26\"},\r\n    {0x1.3354c8p+87f, chars_format::scientific, 26, \"1.85770297377533474371534848e+26\"},\r\n    {0x1.e9e512p+88f, chars_format::scientific, 26, \"5.92246479757524141957185536e+26\"},\r\n    {0x1.c4b6cap+89f, chars_format::scientific, 27, \"1.094595334815995103451021312e+27\"},\r\n    {0x1.799cb8p+90f, chars_format::scientific, 27, \"1.826020469467809704300249088e+27\"},\r\n    {0x1.1afa36p+91f, chars_format::scientific, 27, \"2.736789351009782551090823168e+27\"},\r\n    {0x1.80c214p+92f, chars_format::scientific, 27, \"7.442304364233212615194574848e+27\"},\r\n    {0x1.657890p+93f, chars_format::scientific, 28, \"1.3828987453168434783077793792e+28\"},\r\n    {0x1.5ce17cp+94f, chars_format::scientific, 28, \"2.6993344325171312829134798848e+28\"},\r\n    {0x1.3f1e9ap+95f, chars_format::scientific, 28, \"4.9381356576017938861904625664e+28\"},\r\n    {0x1.874612p+96f, chars_format::scientific, 29, \"1.21093348650115637567232671744e+29\"},\r\n    {0x1.5f4d5ep+97f, chars_format::scientific, 29, \"2.17445539275703670631001227264e+29\"},\r\n    {0x1.45b1bep+98f, chars_format::scientific, 29, \"4.03190021246562727728269754368e+29\"},\r\n    {0x1.a570f4p+99f, chars_format::scientific, 30, \"1.043437928672039460753056464896e+30\"},\r\n    {0x1.f5106ep+100f, chars_format::scientific, 30, \"2.481149635102733266542145830912e+30\"},\r\n    {0x1.d84424p+101f, chars_format::scientific, 30, \"4.677097651091265616934539886592e+30\"},\r\n    {0x1.3d6c56p+102f, chars_format::scientific, 30, \"6.287213966425746785671183335424e+30\"},\r\n    {0x1.9d8cf0p+103f, chars_format::scientific, 31, \"1.6382424580981433623378525159424e+31\"},\r\n    {0x1.e2e73ep+104f, chars_format::scientific, 29, \"3.82595403225449575379724402688e+31\"},\r\n    {0x1.2d6594p+105f, chars_format::scientific, 30, \"4.775822764761364886543157690368e+31\"},\r\n    {0x1.ce43bap+106f, chars_format::scientific, 31, \"1.4649748574980240963539344293888e+32\"},\r\n    {0x1.b3ea00p+107f, chars_format::scientific, 32, \"2.76293361488025452794185737306112e+32\"},\r\n    {0x1.03a052p+108f, chars_format::scientific, 32, \"3.29115373194929392757058784198656e+32\"},\r\n    {0x1.6f59e0p+109f, chars_format::scientific, 31, \"9.3134561945576656911623262306304e+32\"},\r\n    {0x1.05adacp+110f, chars_format::scientific, 33, \"1.326867152522435745601434087849984e+33\"},\r\n    {0x1.2cdef0p+111f, chars_format::scientific, 33, \"3.051192904788012466473218045116416e+33\"},\r\n    {0x1.e81552p+112f, chars_format::scientific, 33, \"9.899505055765620068271358482579456e+33\"},\r\n    {0x1.bfa8f4p+113f, chars_format::scientific, 34, \"1.8159245876954178992833811110166528e+34\"},\r\n    {0x1.a14810p+114f, chars_format::scientific, 33, \"3.385389673673572296245535418875904e+34\"},\r\n    {0x1.f18b10p+115f, chars_format::scientific, 34, \"8.0731001914916160681187088757948416e+34\"},\r\n    {0x1.8d6e30p+116f, chars_format::scientific, 32, \"1.28973545052908058560090358153216e+35\"},\r\n    {0x1.9480c2p+117f, chars_format::scientific, 35, \"2.62537431192608192877759864086986752e+35\"},\r\n    {0x1.60975cp+118f, chars_format::scientific, 34, \"4.5768960676134050994895233721827328e+35\"},\r\n    {0x1.ab1bb2p+119f, chars_format::scientific, 36, \"1.108836243133298765768030079592431616e+36\"},\r\n    {0x1.6a0c80p+120f, chars_format::scientific, 36, \"1.879864992909653247408339011818749952e+36\"},\r\n    {0x1.2cac2cp+121f, chars_format::scientific, 36, \"3.122362236102854007005843883842076672e+36\"},\r\n    {0x1.0baaf6p+122f, chars_format::scientific, 36, \"5.559243043957593079267046257728684032e+36\"},\r\n    {0x1.098282p+123f, chars_format::scientific, 35, \"1.10288454433706471446366546449924096e+37\"},\r\n    {0x1.122f8ap+124f, chars_format::scientific, 37, \"2.2778456735621461875293910785310326784e+37\"},\r\n    {0x1.57f4c6p+125f, chars_format::scientific, 36, \"5.714951736310127067226390054203031552e+37\"},\r\n    {0x1.05e028p+126f, chars_format::scientific, 36, \"8.702309817313974757087535795024166912e+37\"},\r\n    {0x1.9d8424p+127f, chars_format::scientific, 38, \"2.74828637805621292108186801756142829568e+38\"},\r\n\r\n    // Ryu Printf PrintDecimalPoint\r\n    // These values exercise each codepath.\r\n    {0x1.59bc8cp+92f, chars_format::scientific, 0, \"7e+27\"},\r\n    {0x1.59bc8cp+92f, chars_format::scientific, 1, \"6.7e+27\"},\r\n    {0x1.37da7cp-30f, chars_format::scientific, 0, \"1e-09\"},\r\n    {0x1.37da7cp-30f, chars_format::scientific, 1, \"1.1e-09\"},\r\n    {0x1.834c98p+29f, chars_format::scientific, 0, \"8e+08\"},\r\n    {0x1.834c98p+29f, chars_format::scientific, 1, \"8.1e+08\"},\r\n\r\n    // Test the maximum mantissa, which generates the most digits for each exponent.\r\n    {0x0.fffffep-126f, chars_format::scientific, 111,\r\n        \"1.\"\r\n        \"1754942106924410754870294448492873488270524287458933338571745305715888704756189042655023513361811637878417\"\r\n        \"96875e-38\"},\r\n    {0x1.fffffep-126f, chars_format::scientific, 111,\r\n        \"2.\"\r\n        \"3509885615147285834557659820715330266457179855179808553659262368500061299303460771170648513361811637878417\"\r\n        \"96875e-38\"},\r\n    {0x1.fffffep-125f, chars_format::scientific, 110,\r\n        \"4.\"\r\n        \"7019771230294571669115319641430660532914359710359617107318524737000122598606921542341297026723623275756835\"\r\n        \"9375e-38\"},\r\n    {0x1.fffffep-124f, chars_format::scientific, 109,\r\n        \"9.\"\r\n        \"4039542460589143338230639282861321065828719420719234214637049474000245197213843084682594053447246551513671\"\r\n        \"875e-38\"},\r\n    {0x1.fffffep-123f, chars_format::scientific, 109,\r\n        \"1.\"\r\n        \"8807908492117828667646127856572264213165743884143846842927409894800049039442768616936518810689449310302734\"\r\n        \"375e-37\"},\r\n    {0x1.fffffep-122f, chars_format::scientific, 108,\r\n        \"3.\"\r\n        \"7615816984235657335292255713144528426331487768287693685854819789600098078885537233873037621378898620605468\"\r\n        \"75e-37\"},\r\n    {0x1.fffffep-121f, chars_format::scientific, 107,\r\n        \"7.\"\r\n        \"5231633968471314670584511426289056852662975536575387371709639579200196157771074467746075242757797241210937\"\r\n        \"5e-37\"},\r\n    {0x1.fffffep-120f, chars_format::scientific, 107,\r\n        \"1.\"\r\n        \"5046326793694262934116902285257811370532595107315077474341927915840039231554214893549215048551559448242187\"\r\n        \"5e-36\"},\r\n    {0x1.fffffep-119f, chars_format::scientific, 106,\r\n        \"3.\"\r\n        \"0092653587388525868233804570515622741065190214630154948683855831680078463108429787098430097103118896484375\"\r\n        \"e-36\"},\r\n    {0x1.fffffep-118f, chars_format::scientific, 105,\r\n        \"6.\"\r\n        \"018530717477705173646760914103124548213038042926030989736771166336015692621685957419686019420623779296875e\"\r\n        \"-36\"},\r\n    {0x1.fffffep-117f, chars_format::scientific, 105,\r\n        \"1.\"\r\n        \"203706143495541034729352182820624909642607608585206197947354233267203138524337191483937203884124755859375e\"\r\n        \"-35\"},\r\n    {0x1.fffffep-116f, chars_format::scientific, 104,\r\n        \"2.\"\r\n        \"40741228699108206945870436564124981928521521717041239589470846653440627704867438296787440776824951171875e-\"\r\n        \"35\"},\r\n    {0x1.fffffep-115f, chars_format::scientific, 103,\r\n        \"4.\"\r\n        \"8148245739821641389174087312824996385704304343408247917894169330688125540973487659357488155364990234375e-\"\r\n        \"35\"},\r\n    {0x1.fffffep-114f, chars_format::scientific, 102,\r\n        \"9.629649147964328277834817462564999277140860868681649583578833866137625108194697531871497631072998046875e-\"\r\n        \"35\"},\r\n    {0x1.fffffep-113f, chars_format::scientific, 102,\r\n        \"1.925929829592865655566963492512999855428172173736329916715766773227525021638939506374299526214599609375e-\"\r\n        \"34\"},\r\n    {0x1.fffffep-112f, chars_format::scientific, 101,\r\n        \"3.85185965918573131113392698502599971085634434747265983343153354645505004327787901274859905242919921875e-\"\r\n        \"34\"},\r\n    {0x1.fffffep-111f, chars_format::scientific, 100,\r\n        \"7.7037193183714626222678539700519994217126886949453196668630670929101000865557580254971981048583984375e-\"\r\n        \"34\"},\r\n    {0x1.fffffep-110f, chars_format::scientific, 100,\r\n        \"1.5407438636742925244535707940103998843425377389890639333726134185820200173111516050994396209716796875e-\"\r\n        \"33\"},\r\n    {0x1.fffffep-109f, chars_format::scientific, 99,\r\n        \"3.081487727348585048907141588020799768685075477978127866745226837164040034622303210198879241943359375e-\"\r\n        \"33\"},\r\n    {0x1.fffffep-108f, chars_format::scientific, 98,\r\n        \"6.16297545469717009781428317604159953737015095595625573349045367432808006924460642039775848388671875e-33\"},\r\n    {0x1.fffffep-107f, chars_format::scientific, 98,\r\n        \"1.23259509093943401956285663520831990747403019119125114669809073486561601384892128407955169677734375e-32\"},\r\n    {0x1.fffffep-106f, chars_format::scientific, 97,\r\n        \"2.4651901818788680391257132704166398149480603823825022933961814697312320276978425681591033935546875e-32\"},\r\n    {0x1.fffffep-105f, chars_format::scientific, 96,\r\n        \"4.930380363757736078251426540833279629896120764765004586792362939462464055395685136318206787109375e-32\"},\r\n    {0x1.fffffep-104f, chars_format::scientific, 95,\r\n        \"9.86076072751547215650285308166655925979224152953000917358472587892492811079137027263641357421875e-32\"},\r\n    {0x1.fffffep-103f, chars_format::scientific, 95,\r\n        \"1.97215214550309443130057061633331185195844830590600183471694517578498562215827405452728271484375e-31\"},\r\n    {0x1.fffffep-102f, chars_format::scientific, 94,\r\n        \"3.9443042910061888626011412326666237039168966118120036694338903515699712443165481090545654296875e-31\"},\r\n    {0x1.fffffep-101f, chars_format::scientific, 93,\r\n        \"7.888608582012377725202282465333247407833793223624007338867780703139942488633096218109130859375e-31\"},\r\n    {0x1.fffffep-100f, chars_format::scientific, 93,\r\n        \"1.577721716402475545040456493066649481566758644724801467773556140627988497726619243621826171875e-30\"},\r\n    {0x1.fffffep-99f, chars_format::scientific, 92,\r\n        \"3.15544343280495109008091298613329896313351728944960293554711228125597699545323848724365234375e-30\"},\r\n    {0x1.fffffep-98f, chars_format::scientific, 91,\r\n        \"6.3108868656099021801618259722665979262670345788992058710942245625119539909064769744873046875e-30\"},\r\n    {0x1.fffffep-97f, chars_format::scientific, 91,\r\n        \"1.2621773731219804360323651944533195852534069157798411742188449125023907981812953948974609375e-29\"},\r\n    {0x1.fffffep-96f, chars_format::scientific, 90,\r\n        \"2.524354746243960872064730388906639170506813831559682348437689825004781596362590789794921875e-29\"},\r\n    {0x1.fffffep-95f, chars_format::scientific, 89,\r\n        \"5.04870949248792174412946077781327834101362766311936469687537965000956319272518157958984375e-29\"},\r\n    {0x1.fffffep-94f, chars_format::scientific, 89,\r\n        \"1.00974189849758434882589215556265566820272553262387293937507593000191263854503631591796875e-28\"},\r\n    {0x1.fffffep-93f, chars_format::scientific, 88,\r\n        \"2.0194837969951686976517843111253113364054510652477458787501518600038252770900726318359375e-28\"},\r\n    {0x1.fffffep-92f, chars_format::scientific, 87,\r\n        \"4.038967593990337395303568622250622672810902130495491757500303720007650554180145263671875e-28\"},\r\n    {0x1.fffffep-91f, chars_format::scientific, 86,\r\n        \"8.07793518798067479060713724450124534562180426099098351500060744001530110836029052734375e-28\"},\r\n    {0x1.fffffep-90f, chars_format::scientific, 86,\r\n        \"1.61558703759613495812142744890024906912436085219819670300012148800306022167205810546875e-27\"},\r\n    {0x1.fffffep-89f, chars_format::scientific, 85,\r\n        \"3.2311740751922699162428548978004981382487217043963934060002429760061204433441162109375e-27\"},\r\n    {0x1.fffffep-88f, chars_format::scientific, 84,\r\n        \"6.462348150384539832485709795600996276497443408792786812000485952012240886688232421875e-27\"},\r\n    {0x1.fffffep-87f, chars_format::scientific, 84,\r\n        \"1.292469630076907966497141959120199255299488681758557362400097190402448177337646484375e-26\"},\r\n    {0x1.fffffep-86f, chars_format::scientific, 83,\r\n        \"2.58493926015381593299428391824039851059897736351711472480019438080489635467529296875e-26\"},\r\n    {0x1.fffffep-85f, chars_format::scientific, 82,\r\n        \"5.1698785203076318659885678364807970211979547270342294496003887616097927093505859375e-26\"},\r\n    {0x1.fffffep-84f, chars_format::scientific, 82,\r\n        \"1.0339757040615263731977135672961594042395909454068458899200777523219585418701171875e-25\"},\r\n    {0x1.fffffep-83f, chars_format::scientific, 81,\r\n        \"2.067951408123052746395427134592318808479181890813691779840155504643917083740234375e-25\"},\r\n    {0x1.fffffep-82f, chars_format::scientific, 80,\r\n        \"4.13590281624610549279085426918463761695836378162738355968031100928783416748046875e-25\"},\r\n    {0x1.fffffep-81f, chars_format::scientific, 79,\r\n        \"8.2718056324922109855817085383692752339167275632547671193606220185756683349609375e-25\"},\r\n    {0x1.fffffep-80f, chars_format::scientific, 79,\r\n        \"1.6543611264984421971163417076738550467833455126509534238721244037151336669921875e-24\"},\r\n    {0x1.fffffep-79f, chars_format::scientific, 78,\r\n        \"3.308722252996884394232683415347710093566691025301906847744248807430267333984375e-24\"},\r\n    {0x1.fffffep-78f, chars_format::scientific, 77,\r\n        \"6.61744450599376878846536683069542018713338205060381369548849761486053466796875e-24\"},\r\n    {0x1.fffffep-77f, chars_format::scientific, 77,\r\n        \"1.32348890119875375769307336613908403742667641012076273909769952297210693359375e-23\"},\r\n    {0x1.fffffep-76f, chars_format::scientific, 76,\r\n        \"2.6469778023975075153861467322781680748533528202415254781953990459442138671875e-23\"},\r\n    {0x1.fffffep-75f, chars_format::scientific, 75,\r\n        \"5.293955604795015030772293464556336149706705640483050956390798091888427734375e-23\"},\r\n    {0x1.fffffep-74f, chars_format::scientific, 75,\r\n        \"1.058791120959003006154458692911267229941341128096610191278159618377685546875e-22\"},\r\n    {0x1.fffffep-73f, chars_format::scientific, 74,\r\n        \"2.11758224191800601230891738582253445988268225619322038255631923675537109375e-22\"},\r\n    {0x1.fffffep-72f, chars_format::scientific, 73,\r\n        \"4.2351644838360120246178347716450689197653645123864407651126384735107421875e-22\"},\r\n    {0x1.fffffep-71f, chars_format::scientific, 72,\r\n        \"8.470328967672024049235669543290137839530729024772881530225276947021484375e-22\"},\r\n    {0x1.fffffep-70f, chars_format::scientific, 72,\r\n        \"1.694065793534404809847133908658027567906145804954576306045055389404296875e-21\"},\r\n    {0x1.fffffep-69f, chars_format::scientific, 71,\r\n        \"3.38813158706880961969426781731605513581229160990915261209011077880859375e-21\"},\r\n    {0x1.fffffep-68f, chars_format::scientific, 70,\r\n        \"6.7762631741376192393885356346321102716245832198183052241802215576171875e-21\"},\r\n    {0x1.fffffep-67f, chars_format::scientific, 70,\r\n        \"1.3552526348275238478777071269264220543249166439636610448360443115234375e-20\"},\r\n    {0x1.fffffep-66f, chars_format::scientific, 69,\r\n        \"2.710505269655047695755414253852844108649833287927322089672088623046875e-20\"},\r\n    {0x1.fffffep-65f, chars_format::scientific, 68,\r\n        \"5.42101053931009539151082850770568821729966657585464417934417724609375e-20\"},\r\n    {0x1.fffffep-64f, chars_format::scientific, 68,\r\n        \"1.08420210786201907830216570154113764345993331517092883586883544921875e-19\"},\r\n    {0x1.fffffep-63f, chars_format::scientific, 67,\r\n        \"2.1684042157240381566043314030822752869198666303418576717376708984375e-19\"},\r\n    {0x1.fffffep-62f, chars_format::scientific, 66,\r\n        \"4.336808431448076313208662806164550573839733260683715343475341796875e-19\"},\r\n    {0x1.fffffep-61f, chars_format::scientific, 65,\r\n        \"8.67361686289615262641732561232910114767946652136743068695068359375e-19\"},\r\n    {0x1.fffffep-60f, chars_format::scientific, 65,\r\n        \"1.73472337257923052528346512246582022953589330427348613739013671875e-18\"},\r\n    {0x1.fffffep-59f, chars_format::scientific, 64,\r\n        \"3.4694467451584610505669302449316404590717866085469722747802734375e-18\"},\r\n    {0x1.fffffep-58f, chars_format::scientific, 63,\r\n        \"6.938893490316922101133860489863280918143573217093944549560546875e-18\"},\r\n    {0x1.fffffep-57f, chars_format::scientific, 63,\r\n        \"1.387778698063384420226772097972656183628714643418788909912109375e-17\"},\r\n    {0x1.fffffep-56f, chars_format::scientific, 62,\r\n        \"2.77555739612676884045354419594531236725742928683757781982421875e-17\"},\r\n    {0x1.fffffep-55f, chars_format::scientific, 61,\r\n        \"5.5511147922535376809070883918906247345148585736751556396484375e-17\"},\r\n    {0x1.fffffep-54f, chars_format::scientific, 61,\r\n        \"1.1102229584507075361814176783781249469029717147350311279296875e-16\"},\r\n    {0x1.fffffep-53f, chars_format::scientific, 60,\r\n        \"2.220445916901415072362835356756249893805943429470062255859375e-16\"},\r\n    {0x1.fffffep-52f, chars_format::scientific, 59,\r\n        \"4.44089183380283014472567071351249978761188685894012451171875e-16\"},\r\n    {0x1.fffffep-51f, chars_format::scientific, 58, \"8.8817836676056602894513414270249995752237737178802490234375e-16\"},\r\n    {0x1.fffffep-50f, chars_format::scientific, 58, \"1.7763567335211320578902682854049999150447547435760498046875e-15\"},\r\n    {0x1.fffffep-49f, chars_format::scientific, 57, \"3.552713467042264115780536570809999830089509487152099609375e-15\"},\r\n    {0x1.fffffep-48f, chars_format::scientific, 56, \"7.10542693408452823156107314161999966017901897430419921875e-15\"},\r\n    {0x1.fffffep-47f, chars_format::scientific, 56, \"1.42108538681690564631221462832399993203580379486083984375e-14\"},\r\n    {0x1.fffffep-46f, chars_format::scientific, 55, \"2.8421707736338112926244292566479998640716075897216796875e-14\"},\r\n    {0x1.fffffep-45f, chars_format::scientific, 54, \"5.684341547267622585248858513295999728143215179443359375e-14\"},\r\n    {0x1.fffffep-44f, chars_format::scientific, 54, \"1.136868309453524517049771702659199945628643035888671875e-13\"},\r\n    {0x1.fffffep-43f, chars_format::scientific, 53, \"2.27373661890704903409954340531839989125728607177734375e-13\"},\r\n    {0x1.fffffep-42f, chars_format::scientific, 52, \"4.5474732378140980681990868106367997825145721435546875e-13\"},\r\n    {0x1.fffffep-41f, chars_format::scientific, 51, \"9.094946475628196136398173621273599565029144287109375e-13\"},\r\n    {0x1.fffffep-40f, chars_format::scientific, 51, \"1.818989295125639227279634724254719913005828857421875e-12\"},\r\n    {0x1.fffffep-39f, chars_format::scientific, 50, \"3.63797859025127845455926944850943982601165771484375e-12\"},\r\n    {0x1.fffffep-38f, chars_format::scientific, 49, \"7.2759571805025569091185388970188796520233154296875e-12\"},\r\n    {0x1.fffffep-37f, chars_format::scientific, 49, \"1.4551914361005113818237077794037759304046630859375e-11\"},\r\n    {0x1.fffffep-36f, chars_format::scientific, 48, \"2.910382872201022763647415558807551860809326171875e-11\"},\r\n    {0x1.fffffep-35f, chars_format::scientific, 47, \"5.82076574440204552729483111761510372161865234375e-11\"},\r\n    {0x1.fffffep-34f, chars_format::scientific, 47, \"1.16415314888040910545896622352302074432373046875e-10\"},\r\n    {0x1.fffffep-33f, chars_format::scientific, 46, \"2.3283062977608182109179324470460414886474609375e-10\"},\r\n    {0x1.fffffep-32f, chars_format::scientific, 45, \"4.656612595521636421835864894092082977294921875e-10\"},\r\n    {0x1.fffffep-31f, chars_format::scientific, 44, \"9.31322519104327284367172978818416595458984375e-10\"},\r\n    {0x1.fffffep-30f, chars_format::scientific, 44, \"1.86264503820865456873434595763683319091796875e-09\"},\r\n    {0x1.fffffep-29f, chars_format::scientific, 43, \"3.7252900764173091374686919152736663818359375e-09\"},\r\n    {0x1.fffffep-28f, chars_format::scientific, 42, \"7.450580152834618274937383830547332763671875e-09\"},\r\n    {0x1.fffffep-27f, chars_format::scientific, 42, \"1.490116030566923654987476766109466552734375e-08\"},\r\n    {0x1.fffffep-26f, chars_format::scientific, 41, \"2.98023206113384730997495353221893310546875e-08\"},\r\n    {0x1.fffffep-25f, chars_format::scientific, 40, \"5.9604641222676946199499070644378662109375e-08\"},\r\n    {0x1.fffffep-24f, chars_format::scientific, 40, \"1.1920928244535389239899814128875732421875e-07\"},\r\n    {0x1.fffffep-23f, chars_format::scientific, 39, \"2.384185648907077847979962825775146484375e-07\"},\r\n    {0x1.fffffep-22f, chars_format::scientific, 38, \"4.76837129781415569595992565155029296875e-07\"},\r\n    {0x1.fffffep-21f, chars_format::scientific, 37, \"9.5367425956283113919198513031005859375e-07\"},\r\n    {0x1.fffffep-20f, chars_format::scientific, 37, \"1.9073485191256622783839702606201171875e-06\"},\r\n    {0x1.fffffep-19f, chars_format::scientific, 36, \"3.814697038251324556767940521240234375e-06\"},\r\n    {0x1.fffffep-18f, chars_format::scientific, 35, \"7.62939407650264911353588104248046875e-06\"},\r\n    {0x1.fffffep-17f, chars_format::scientific, 35, \"1.52587881530052982270717620849609375e-05\"},\r\n    {0x1.fffffep-16f, chars_format::scientific, 34, \"3.0517576306010596454143524169921875e-05\"},\r\n    {0x1.fffffep-15f, chars_format::scientific, 33, \"6.103515261202119290828704833984375e-05\"},\r\n    {0x1.fffffep-14f, chars_format::scientific, 33, \"1.220703052240423858165740966796875e-04\"},\r\n    {0x1.fffffep-13f, chars_format::scientific, 32, \"2.44140610448084771633148193359375e-04\"},\r\n    {0x1.fffffep-12f, chars_format::scientific, 31, \"4.8828122089616954326629638671875e-04\"},\r\n    {0x1.fffffep-11f, chars_format::scientific, 30, \"9.765624417923390865325927734375e-04\"},\r\n    {0x1.fffffep-10f, chars_format::scientific, 30, \"1.953124883584678173065185546875e-03\"},\r\n    {0x1.fffffep-9f, chars_format::scientific, 29, \"3.90624976716935634613037109375e-03\"},\r\n    {0x1.fffffep-8f, chars_format::scientific, 28, \"7.8124995343387126922607421875e-03\"},\r\n    {0x1.fffffep-7f, chars_format::scientific, 28, \"1.5624999068677425384521484375e-02\"},\r\n    {0x1.fffffep-6f, chars_format::scientific, 27, \"3.124999813735485076904296875e-02\"},\r\n    {0x1.fffffep-5f, chars_format::scientific, 26, \"6.24999962747097015380859375e-02\"},\r\n    {0x1.fffffep-4f, chars_format::scientific, 26, \"1.24999992549419403076171875e-01\"},\r\n    {0x1.fffffep-3f, chars_format::scientific, 25, \"2.4999998509883880615234375e-01\"},\r\n    {0x1.fffffep-2f, chars_format::scientific, 24, \"4.999999701976776123046875e-01\"},\r\n    {0x1.fffffep-1f, chars_format::scientific, 23, \"9.99999940395355224609375e-01\"},\r\n    {0x1.fffffep+0f, chars_format::scientific, 23, \"1.99999988079071044921875e+00\"},\r\n    {0x1.fffffep+1f, chars_format::scientific, 22, \"3.9999997615814208984375e+00\"},\r\n    {0x1.fffffep+2f, chars_format::scientific, 21, \"7.999999523162841796875e+00\"},\r\n    {0x1.fffffep+3f, chars_format::scientific, 21, \"1.599999904632568359375e+01\"},\r\n    {0x1.fffffep+4f, chars_format::scientific, 20, \"3.19999980926513671875e+01\"},\r\n    {0x1.fffffep+5f, chars_format::scientific, 19, \"6.3999996185302734375e+01\"},\r\n    {0x1.fffffep+6f, chars_format::scientific, 19, \"1.2799999237060546875e+02\"},\r\n    {0x1.fffffep+7f, chars_format::scientific, 18, \"2.559999847412109375e+02\"},\r\n    {0x1.fffffep+8f, chars_format::scientific, 17, \"5.11999969482421875e+02\"},\r\n    {0x1.fffffep+9f, chars_format::scientific, 17, \"1.02399993896484375e+03\"},\r\n    {0x1.fffffep+10f, chars_format::scientific, 16, \"2.0479998779296875e+03\"},\r\n    {0x1.fffffep+11f, chars_format::scientific, 15, \"4.095999755859375e+03\"},\r\n    {0x1.fffffep+12f, chars_format::scientific, 14, \"8.19199951171875e+03\"},\r\n    {0x1.fffffep+13f, chars_format::scientific, 14, \"1.63839990234375e+04\"},\r\n    {0x1.fffffep+14f, chars_format::scientific, 13, \"3.2767998046875e+04\"},\r\n    {0x1.fffffep+15f, chars_format::scientific, 12, \"6.553599609375e+04\"},\r\n    {0x1.fffffep+16f, chars_format::scientific, 12, \"1.310719921875e+05\"},\r\n    {0x1.fffffep+17f, chars_format::scientific, 11, \"2.62143984375e+05\"},\r\n    {0x1.fffffep+18f, chars_format::scientific, 10, \"5.2428796875e+05\"},\r\n    {0x1.fffffep+19f, chars_format::scientific, 10, \"1.0485759375e+06\"},\r\n    {0x1.fffffep+20f, chars_format::scientific, 9, \"2.097151875e+06\"},\r\n    {0x1.fffffep+21f, chars_format::scientific, 8, \"4.19430375e+06\"},\r\n    {0x1.fffffep+22f, chars_format::scientific, 7, \"8.3886075e+06\"},\r\n    {0x1.fffffep+23f, chars_format::scientific, 7, \"1.6777215e+07\"},\r\n    {0x1.fffffep+24f, chars_format::scientific, 6, \"3.355443e+07\"},\r\n    {0x1.fffffep+25f, chars_format::scientific, 6, \"6.710886e+07\"},\r\n    {0x1.fffffep+26f, chars_format::scientific, 7, \"1.3421772e+08\"},\r\n    {0x1.fffffep+27f, chars_format::scientific, 7, \"2.6843544e+08\"},\r\n    {0x1.fffffep+28f, chars_format::scientific, 7, \"5.3687088e+08\"},\r\n    {0x1.fffffep+29f, chars_format::scientific, 8, \"1.07374176e+09\"},\r\n    {0x1.fffffep+30f, chars_format::scientific, 8, \"2.14748352e+09\"},\r\n    {0x1.fffffep+31f, chars_format::scientific, 8, \"4.29496704e+09\"},\r\n    {0x1.fffffep+32f, chars_format::scientific, 8, \"8.58993408e+09\"},\r\n    {0x1.fffffep+33f, chars_format::scientific, 9, \"1.717986816e+10\"},\r\n    {0x1.fffffep+34f, chars_format::scientific, 9, \"3.435973632e+10\"},\r\n    {0x1.fffffep+35f, chars_format::scientific, 9, \"6.871947264e+10\"},\r\n    {0x1.fffffep+36f, chars_format::scientific, 10, \"1.3743894528e+11\"},\r\n    {0x1.fffffep+37f, chars_format::scientific, 10, \"2.7487789056e+11\"},\r\n    {0x1.fffffep+38f, chars_format::scientific, 10, \"5.4975578112e+11\"},\r\n    {0x1.fffffep+39f, chars_format::scientific, 11, \"1.09951156224e+12\"},\r\n    {0x1.fffffep+40f, chars_format::scientific, 11, \"2.19902312448e+12\"},\r\n    {0x1.fffffep+41f, chars_format::scientific, 11, \"4.39804624896e+12\"},\r\n    {0x1.fffffep+42f, chars_format::scientific, 11, \"8.79609249792e+12\"},\r\n    {0x1.fffffep+43f, chars_format::scientific, 12, \"1.759218499584e+13\"},\r\n    {0x1.fffffep+44f, chars_format::scientific, 12, \"3.518436999168e+13\"},\r\n    {0x1.fffffep+45f, chars_format::scientific, 12, \"7.036873998336e+13\"},\r\n    {0x1.fffffep+46f, chars_format::scientific, 13, \"1.4073747996672e+14\"},\r\n    {0x1.fffffep+47f, chars_format::scientific, 13, \"2.8147495993344e+14\"},\r\n    {0x1.fffffep+48f, chars_format::scientific, 13, \"5.6294991986688e+14\"},\r\n    {0x1.fffffep+49f, chars_format::scientific, 14, \"1.12589983973376e+15\"},\r\n    {0x1.fffffep+50f, chars_format::scientific, 14, \"2.25179967946752e+15\"},\r\n    {0x1.fffffep+51f, chars_format::scientific, 14, \"4.50359935893504e+15\"},\r\n    {0x1.fffffep+52f, chars_format::scientific, 14, \"9.00719871787008e+15\"},\r\n    {0x1.fffffep+53f, chars_format::scientific, 15, \"1.801439743574016e+16\"},\r\n    {0x1.fffffep+54f, chars_format::scientific, 15, \"3.602879487148032e+16\"},\r\n    {0x1.fffffep+55f, chars_format::scientific, 15, \"7.205758974296064e+16\"},\r\n    {0x1.fffffep+56f, chars_format::scientific, 16, \"1.4411517948592128e+17\"},\r\n    {0x1.fffffep+57f, chars_format::scientific, 16, \"2.8823035897184256e+17\"},\r\n    {0x1.fffffep+58f, chars_format::scientific, 16, \"5.7646071794368512e+17\"},\r\n    {0x1.fffffep+59f, chars_format::scientific, 17, \"1.15292143588737024e+18\"},\r\n    {0x1.fffffep+60f, chars_format::scientific, 17, \"2.30584287177474048e+18\"},\r\n    {0x1.fffffep+61f, chars_format::scientific, 17, \"4.61168574354948096e+18\"},\r\n    {0x1.fffffep+62f, chars_format::scientific, 17, \"9.22337148709896192e+18\"},\r\n    {0x1.fffffep+63f, chars_format::scientific, 18, \"1.844674297419792384e+19\"},\r\n    {0x1.fffffep+64f, chars_format::scientific, 18, \"3.689348594839584768e+19\"},\r\n    {0x1.fffffep+65f, chars_format::scientific, 18, \"7.378697189679169536e+19\"},\r\n    {0x1.fffffep+66f, chars_format::scientific, 19, \"1.4757394379358339072e+20\"},\r\n    {0x1.fffffep+67f, chars_format::scientific, 19, \"2.9514788758716678144e+20\"},\r\n    {0x1.fffffep+68f, chars_format::scientific, 19, \"5.9029577517433356288e+20\"},\r\n    {0x1.fffffep+69f, chars_format::scientific, 20, \"1.18059155034866712576e+21\"},\r\n    {0x1.fffffep+70f, chars_format::scientific, 20, \"2.36118310069733425152e+21\"},\r\n    {0x1.fffffep+71f, chars_format::scientific, 20, \"4.72236620139466850304e+21\"},\r\n    {0x1.fffffep+72f, chars_format::scientific, 20, \"9.44473240278933700608e+21\"},\r\n    {0x1.fffffep+73f, chars_format::scientific, 21, \"1.888946480557867401216e+22\"},\r\n    {0x1.fffffep+74f, chars_format::scientific, 21, \"3.777892961115734802432e+22\"},\r\n    {0x1.fffffep+75f, chars_format::scientific, 21, \"7.555785922231469604864e+22\"},\r\n    {0x1.fffffep+76f, chars_format::scientific, 22, \"1.5111571844462939209728e+23\"},\r\n    {0x1.fffffep+77f, chars_format::scientific, 22, \"3.0223143688925878419456e+23\"},\r\n    {0x1.fffffep+78f, chars_format::scientific, 22, \"6.0446287377851756838912e+23\"},\r\n    {0x1.fffffep+79f, chars_format::scientific, 23, \"1.20892574755703513677824e+24\"},\r\n    {0x1.fffffep+80f, chars_format::scientific, 23, \"2.41785149511407027355648e+24\"},\r\n    {0x1.fffffep+81f, chars_format::scientific, 23, \"4.83570299022814054711296e+24\"},\r\n    {0x1.fffffep+82f, chars_format::scientific, 23, \"9.67140598045628109422592e+24\"},\r\n    {0x1.fffffep+83f, chars_format::scientific, 24, \"1.934281196091256218845184e+25\"},\r\n    {0x1.fffffep+84f, chars_format::scientific, 24, \"3.868562392182512437690368e+25\"},\r\n    {0x1.fffffep+85f, chars_format::scientific, 24, \"7.737124784365024875380736e+25\"},\r\n    {0x1.fffffep+86f, chars_format::scientific, 25, \"1.5474249568730049750761472e+26\"},\r\n    {0x1.fffffep+87f, chars_format::scientific, 25, \"3.0948499137460099501522944e+26\"},\r\n    {0x1.fffffep+88f, chars_format::scientific, 25, \"6.1896998274920199003045888e+26\"},\r\n    {0x1.fffffep+89f, chars_format::scientific, 26, \"1.23793996549840398006091776e+27\"},\r\n    {0x1.fffffep+90f, chars_format::scientific, 26, \"2.47587993099680796012183552e+27\"},\r\n    {0x1.fffffep+91f, chars_format::scientific, 26, \"4.95175986199361592024367104e+27\"},\r\n    {0x1.fffffep+92f, chars_format::scientific, 26, \"9.90351972398723184048734208e+27\"},\r\n    {0x1.fffffep+93f, chars_format::scientific, 27, \"1.980703944797446368097468416e+28\"},\r\n    {0x1.fffffep+94f, chars_format::scientific, 27, \"3.961407889594892736194936832e+28\"},\r\n    {0x1.fffffep+95f, chars_format::scientific, 27, \"7.922815779189785472389873664e+28\"},\r\n    {0x1.fffffep+96f, chars_format::scientific, 28, \"1.5845631558379570944779747328e+29\"},\r\n    {0x1.fffffep+97f, chars_format::scientific, 28, \"3.1691263116759141889559494656e+29\"},\r\n    {0x1.fffffep+98f, chars_format::scientific, 28, \"6.3382526233518283779118989312e+29\"},\r\n    {0x1.fffffep+99f, chars_format::scientific, 29, \"1.26765052467036567558237978624e+30\"},\r\n    {0x1.fffffep+100f, chars_format::scientific, 29, \"2.53530104934073135116475957248e+30\"},\r\n    {0x1.fffffep+101f, chars_format::scientific, 29, \"5.07060209868146270232951914496e+30\"},\r\n    {0x1.fffffep+102f, chars_format::scientific, 30, \"1.014120419736292540465903828992e+31\"},\r\n    {0x1.fffffep+103f, chars_format::scientific, 30, \"2.028240839472585080931807657984e+31\"},\r\n    {0x1.fffffep+104f, chars_format::scientific, 30, \"4.056481678945170161863615315968e+31\"},\r\n    {0x1.fffffep+105f, chars_format::scientific, 30, \"8.112963357890340323727230631936e+31\"},\r\n    {0x1.fffffep+106f, chars_format::scientific, 31, \"1.6225926715780680647454461263872e+32\"},\r\n    {0x1.fffffep+107f, chars_format::scientific, 31, \"3.2451853431561361294908922527744e+32\"},\r\n    {0x1.fffffep+108f, chars_format::scientific, 31, \"6.4903706863122722589817845055488e+32\"},\r\n    {0x1.fffffep+109f, chars_format::scientific, 32, \"1.29807413726245445179635690110976e+33\"},\r\n    {0x1.fffffep+110f, chars_format::scientific, 32, \"2.59614827452490890359271380221952e+33\"},\r\n    {0x1.fffffep+111f, chars_format::scientific, 32, \"5.19229654904981780718542760443904e+33\"},\r\n    {0x1.fffffep+112f, chars_format::scientific, 33, \"1.038459309809963561437085520887808e+34\"},\r\n    {0x1.fffffep+113f, chars_format::scientific, 33, \"2.076918619619927122874171041775616e+34\"},\r\n    {0x1.fffffep+114f, chars_format::scientific, 33, \"4.153837239239854245748342083551232e+34\"},\r\n    {0x1.fffffep+115f, chars_format::scientific, 33, \"8.307674478479708491496684167102464e+34\"},\r\n    {0x1.fffffep+116f, chars_format::scientific, 34, \"1.6615348956959416982993368334204928e+35\"},\r\n    {0x1.fffffep+117f, chars_format::scientific, 34, \"3.3230697913918833965986736668409856e+35\"},\r\n    {0x1.fffffep+118f, chars_format::scientific, 34, \"6.6461395827837667931973473336819712e+35\"},\r\n    {0x1.fffffep+119f, chars_format::scientific, 35, \"1.32922791655675335863946946673639424e+36\"},\r\n    {0x1.fffffep+120f, chars_format::scientific, 35, \"2.65845583311350671727893893347278848e+36\"},\r\n    {0x1.fffffep+121f, chars_format::scientific, 35, \"5.31691166622701343455787786694557696e+36\"},\r\n    {0x1.fffffep+122f, chars_format::scientific, 36, \"1.063382333245402686911575573389115392e+37\"},\r\n    {0x1.fffffep+123f, chars_format::scientific, 36, \"2.126764666490805373823151146778230784e+37\"},\r\n    {0x1.fffffep+124f, chars_format::scientific, 36, \"4.253529332981610747646302293556461568e+37\"},\r\n    {0x1.fffffep+125f, chars_format::scientific, 36, \"8.507058665963221495292604587112923136e+37\"},\r\n    {0x1.fffffep+126f, chars_format::scientific, 37, \"1.7014117331926442990585209174225846272e+38\"},\r\n    {0x1.fffffep+127f, chars_format::scientific, 37, \"3.4028234663852885981170418348451692544e+38\"},\r\n};\r\n\r\n#endif // FLOAT_SCIENTIFIC_PRECISION_TO_CHARS_TEST_CASES_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/float_to_chars_test_cases.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception AND BSL-1.0\r\n\r\n\r\n// Copyright 2018 Ulf Adams\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n// Boost Software License - Version 1.0 - August 17th, 2003\r\n\r\n// Permission is hereby granted, free of charge, to any person or organization\r\n// obtaining a copy of the software and accompanying documentation covered by\r\n// this license (the \"Software\") to use, reproduce, display, distribute,\r\n// execute, and transmit the Software, and to prepare derivative works of the\r\n// Software, and to permit third-parties to whom the Software is furnished to\r\n// do so, all subject to the following:\r\n\r\n// The copyright notices in the Software and this entire statement, including\r\n// the above license grant, this restriction and the following disclaimer,\r\n// must be included in all copies of the Software, in whole or in part, and\r\n// all derivative works of the Software, unless such copies or derivative\r\n// works are solely in the form of machine-executable object code generated by\r\n// a source language processor.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\r\n// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\r\n// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\r\n// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r\n// DEALINGS IN THE SOFTWARE.\r\n\r\n\r\n// This file contains test cases derived from:\r\n// https://github.com/ulfjack/ryu\r\n// See xcharconv_ryu.h for the exact commit.\r\n// (Keep the cgmanifest.json commitHash in sync.)\r\n\r\n\r\n#ifndef FLOAT_TO_CHARS_TEST_CASES_HPP\r\n#define FLOAT_TO_CHARS_TEST_CASES_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\ninline constexpr FloatToCharsTestCase float_to_chars_test_cases[] = {\r\n    // Test special cases (zero, inf, nan) and an ordinary case. Also test negative signs.\r\n    {0.0f, chars_format::scientific, \"0e+00\"},\r\n    {-0.0f, chars_format::scientific, \"-0e+00\"},\r\n    {float_inf, chars_format::scientific, \"inf\"},\r\n    {-float_inf, chars_format::scientific, \"-inf\"},\r\n    {float_nan, chars_format::scientific, \"nan\"},\r\n    {-float_nan, chars_format::scientific, \"-nan(ind)\"},\r\n    {float_nan_payload, chars_format::scientific, \"nan\"},\r\n    {-float_nan_payload, chars_format::scientific, \"-nan\"},\r\n    {2.018f, chars_format::scientific, \"2.018e+00\"},\r\n    {-2.018f, chars_format::scientific, \"-2.018e+00\"},\r\n\r\n    // Ditto for fixed, which doesn't emit exponents.\r\n    {0.0f, chars_format::fixed, \"0\"},\r\n    {-0.0f, chars_format::fixed, \"-0\"},\r\n    {float_inf, chars_format::fixed, \"inf\"},\r\n    {-float_inf, chars_format::fixed, \"-inf\"},\r\n    {float_nan, chars_format::fixed, \"nan\"},\r\n    {-float_nan, chars_format::fixed, \"-nan(ind)\"},\r\n    {float_nan_payload, chars_format::fixed, \"nan\"},\r\n    {-float_nan_payload, chars_format::fixed, \"-nan\"},\r\n    {2.018f, chars_format::fixed, \"2.018\"},\r\n    {-2.018f, chars_format::fixed, \"-2.018\"},\r\n\r\n    // Ditto for general, which selects fixed for the scientific exponent 0.\r\n    {0.0f, chars_format::general, \"0\"},\r\n    {-0.0f, chars_format::general, \"-0\"},\r\n    {float_inf, chars_format::general, \"inf\"},\r\n    {-float_inf, chars_format::general, \"-inf\"},\r\n    {float_nan, chars_format::general, \"nan\"},\r\n    {-float_nan, chars_format::general, \"-nan(ind)\"},\r\n    {float_nan_payload, chars_format::general, \"nan\"},\r\n    {-float_nan_payload, chars_format::general, \"-nan\"},\r\n    {2.018f, chars_format::general, \"2.018\"},\r\n    {-2.018f, chars_format::general, \"-2.018\"},\r\n\r\n    // Ditto for plain, which selects fixed because it's shorter for these values.\r\n    {0.0f, chars_format{}, \"0\"},\r\n    {-0.0f, chars_format{}, \"-0\"},\r\n    {float_inf, chars_format{}, \"inf\"},\r\n    {-float_inf, chars_format{}, \"-inf\"},\r\n    {float_nan, chars_format{}, \"nan\"},\r\n    {-float_nan, chars_format{}, \"-nan(ind)\"},\r\n    {float_nan_payload, chars_format{}, \"nan\"},\r\n    {-float_nan_payload, chars_format{}, \"-nan\"},\r\n    {2.018f, chars_format{}, \"2.018\"},\r\n    {-2.018f, chars_format{}, \"-2.018\"},\r\n\r\n    // Ditto for hex.\r\n    {0.0f, chars_format::hex, \"0p+0\"},\r\n    {-0.0f, chars_format::hex, \"-0p+0\"},\r\n    {float_inf, chars_format::hex, \"inf\"},\r\n    {-float_inf, chars_format::hex, \"-inf\"},\r\n    {float_nan, chars_format::hex, \"nan\"},\r\n    {-float_nan, chars_format::hex, \"-nan(ind)\"},\r\n    {float_nan_payload, chars_format::hex, \"nan\"},\r\n    {-float_nan_payload, chars_format::hex, \"-nan\"},\r\n    {0x1.729p+0f, chars_format::hex, \"1.729p+0\"},\r\n    {-0x1.729p+0f, chars_format::hex, \"-1.729p+0\"},\r\n\r\n    // Ryu f2s_test.cc SwitchToSubnormal\r\n    {1.1754944e-38f, chars_format::scientific, \"1.1754944e-38\"},\r\n\r\n    // Ryu f2s_test.cc MinAndMax\r\n    {0x1.fffffep+127f, chars_format::scientific, \"3.4028235e+38\"},\r\n    {0x1.000000p-149f, chars_format::scientific, \"1e-45\"},\r\n\r\n    // Ryu f2s_test.cc BoundaryRoundEven\r\n    {3.355445e7f, chars_format::scientific, \"3.355445e+07\"},\r\n    {8.999999e9f, chars_format::scientific, \"9e+09\"},\r\n    {3.4366717e10f, chars_format::scientific, \"3.436672e+10\"},\r\n\r\n    // Ryu f2s_test.cc ExactValueRoundEven\r\n    {3.0540412e5f, chars_format::scientific, \"3.0540412e+05\"},\r\n    {8.0990312e3f, chars_format::scientific, \"8.0990312e+03\"},\r\n\r\n    // Ryu f2s_test.cc LotsOfTrailingZeros\r\n    {2.4414062e-4f, chars_format::scientific, \"2.4414062e-04\"},\r\n    {2.4414062e-3f, chars_format::scientific, \"2.4414062e-03\"},\r\n    {4.3945312e-3f, chars_format::scientific, \"4.3945312e-03\"},\r\n    {6.3476562e-3f, chars_format::scientific, \"6.3476562e-03\"},\r\n\r\n    // Ryu f2s_test.cc Regression\r\n    {4.7223665e21f, chars_format::scientific, \"4.7223665e+21\"},\r\n    {8388608.0f, chars_format::scientific, \"8.388608e+06\"},\r\n    {1.6777216e7f, chars_format::scientific, \"1.6777216e+07\"},\r\n    {3.3554436e7f, chars_format::scientific, \"3.3554436e+07\"},\r\n    {6.7131496e7f, chars_format::scientific, \"6.7131496e+07\"},\r\n    {1.9310392e-38f, chars_format::scientific, \"1.9310392e-38\"},\r\n    {-2.47e-43f, chars_format::scientific, \"-2.47e-43\"},\r\n    {1.993244e-38f, chars_format::scientific, \"1.993244e-38\"},\r\n    {4103.9003f, chars_format::scientific, \"4.1039004e+03\"},\r\n    {5.3399997e9f, chars_format::scientific, \"5.3399997e+09\"},\r\n    {6.0898e-39f, chars_format::scientific, \"6.0898e-39\"},\r\n    {0.0010310042f, chars_format::scientific, \"1.0310042e-03\"},\r\n    {2.8823261e17f, chars_format::scientific, \"2.882326e+17\"},\r\n    {7.038531e-26f, chars_format::scientific, \"7.038531e-26\"},\r\n    {9.2234038e17f, chars_format::scientific, \"9.223404e+17\"},\r\n    {6.7108872e7f, chars_format::scientific, \"6.710887e+07\"},\r\n    {1.0e-44f, chars_format::scientific, \"1e-44\"},\r\n    {2.816025e14f, chars_format::scientific, \"2.816025e+14\"},\r\n    {9.223372e18f, chars_format::scientific, \"9.223372e+18\"},\r\n    {1.5846085e29f, chars_format::scientific, \"1.5846086e+29\"},\r\n    {1.1811161e19f, chars_format::scientific, \"1.1811161e+19\"},\r\n    {5.368709e18f, chars_format::scientific, \"5.368709e+18\"},\r\n    {4.6143165e18f, chars_format::scientific, \"4.6143166e+18\"},\r\n    {0.007812537f, chars_format::scientific, \"7.812537e-03\"},\r\n    {1.4e-45f, chars_format::scientific, \"1e-45\"},\r\n    {1.18697724e20f, chars_format::scientific, \"1.18697725e+20\"},\r\n    {1.00014165e-36f, chars_format::scientific, \"1.00014165e-36\"},\r\n    {200.0f, chars_format::scientific, \"2e+02\"},\r\n    {3.3554432e7f, chars_format::scientific, \"3.3554432e+07\"},\r\n\r\n    // Ryu f2s_test.cc LooksLikePow5\r\n    {0x1.2a05f2p+59f, chars_format::scientific, \"6.7108864e+17\"},\r\n    {0x1.2a05f2p+60f, chars_format::scientific, \"1.3421773e+18\"},\r\n    {0x1.2a05f2p+61f, chars_format::scientific, \"2.6843546e+18\"},\r\n\r\n    // Ryu f2s_test.cc OutputLength\r\n    {1.0f, chars_format::scientific, \"1e+00\"},\r\n    {1.2f, chars_format::scientific, \"1.2e+00\"},\r\n    {1.23f, chars_format::scientific, \"1.23e+00\"},\r\n    {1.234f, chars_format::scientific, \"1.234e+00\"},\r\n    {1.2345f, chars_format::scientific, \"1.2345e+00\"},\r\n    {1.23456f, chars_format::scientific, \"1.23456e+00\"},\r\n    {1.234567f, chars_format::scientific, \"1.234567e+00\"},\r\n    {1.2345678f, chars_format::scientific, \"1.2345678e+00\"},\r\n    {1.23456735e-36f, chars_format::scientific, \"1.23456735e-36\"},\r\n\r\n    // Test all exponents.\r\n    {1.729e-45f, chars_format::scientific, \"1e-45\"},\r\n    {1.729e-44f, chars_format::scientific, \"1.7e-44\"},\r\n    {1.729e-43f, chars_format::scientific, \"1.72e-43\"},\r\n    {1.729e-42f, chars_format::scientific, \"1.729e-42\"},\r\n    {1.729e-41f, chars_format::scientific, \"1.729e-41\"},\r\n    {1.729e-40f, chars_format::scientific, \"1.729e-40\"},\r\n    {1.729e-39f, chars_format::scientific, \"1.729e-39\"},\r\n    {1.729e-38f, chars_format::scientific, \"1.729e-38\"},\r\n    {1.729e-37f, chars_format::scientific, \"1.729e-37\"},\r\n    {1.729e-36f, chars_format::scientific, \"1.729e-36\"},\r\n    {1.729e-35f, chars_format::scientific, \"1.729e-35\"},\r\n    {1.729e-34f, chars_format::scientific, \"1.729e-34\"},\r\n    {1.729e-33f, chars_format::scientific, \"1.729e-33\"},\r\n    {1.729e-32f, chars_format::scientific, \"1.729e-32\"},\r\n    {1.729e-31f, chars_format::scientific, \"1.729e-31\"},\r\n    {1.729e-30f, chars_format::scientific, \"1.729e-30\"},\r\n    {1.729e-29f, chars_format::scientific, \"1.729e-29\"},\r\n    {1.729e-28f, chars_format::scientific, \"1.729e-28\"},\r\n    {1.729e-27f, chars_format::scientific, \"1.729e-27\"},\r\n    {1.729e-26f, chars_format::scientific, \"1.729e-26\"},\r\n    {1.729e-25f, chars_format::scientific, \"1.729e-25\"},\r\n    {1.729e-24f, chars_format::scientific, \"1.729e-24\"},\r\n    {1.729e-23f, chars_format::scientific, \"1.729e-23\"},\r\n    {1.729e-22f, chars_format::scientific, \"1.729e-22\"},\r\n    {1.729e-21f, chars_format::scientific, \"1.729e-21\"},\r\n    {1.729e-20f, chars_format::scientific, \"1.729e-20\"},\r\n    {1.729e-19f, chars_format::scientific, \"1.729e-19\"},\r\n    {1.729e-18f, chars_format::scientific, \"1.729e-18\"},\r\n    {1.729e-17f, chars_format::scientific, \"1.729e-17\"},\r\n    {1.729e-16f, chars_format::scientific, \"1.729e-16\"},\r\n    {1.729e-15f, chars_format::scientific, \"1.729e-15\"},\r\n    {1.729e-14f, chars_format::scientific, \"1.729e-14\"},\r\n    {1.729e-13f, chars_format::scientific, \"1.729e-13\"},\r\n    {1.729e-12f, chars_format::scientific, \"1.729e-12\"},\r\n    {1.729e-11f, chars_format::scientific, \"1.729e-11\"},\r\n    {1.729e-10f, chars_format::scientific, \"1.729e-10\"},\r\n    {1.729e-9f, chars_format::scientific, \"1.729e-09\"},\r\n    {1.729e-8f, chars_format::scientific, \"1.729e-08\"},\r\n    {1.729e-7f, chars_format::scientific, \"1.729e-07\"},\r\n    {1.729e-6f, chars_format::scientific, \"1.729e-06\"},\r\n    {1.729e-5f, chars_format::scientific, \"1.729e-05\"},\r\n    {1.729e-4f, chars_format::scientific, \"1.729e-04\"},\r\n    {1.729e-3f, chars_format::scientific, \"1.729e-03\"},\r\n    {1.729e-2f, chars_format::scientific, \"1.729e-02\"},\r\n    {1.729e-1f, chars_format::scientific, \"1.729e-01\"},\r\n    {1.729e0f, chars_format::scientific, \"1.729e+00\"},\r\n    {1.729e1f, chars_format::scientific, \"1.729e+01\"},\r\n    {1.729e2f, chars_format::scientific, \"1.729e+02\"},\r\n    {1.729e3f, chars_format::scientific, \"1.729e+03\"},\r\n    {1.729e4f, chars_format::scientific, \"1.729e+04\"},\r\n    {1.729e5f, chars_format::scientific, \"1.729e+05\"},\r\n    {1.729e6f, chars_format::scientific, \"1.729e+06\"},\r\n    {1.729e7f, chars_format::scientific, \"1.729e+07\"},\r\n    {1.729e8f, chars_format::scientific, \"1.729e+08\"},\r\n    {1.729e9f, chars_format::scientific, \"1.729e+09\"},\r\n    {1.729e10f, chars_format::scientific, \"1.729e+10\"},\r\n    {1.729e11f, chars_format::scientific, \"1.729e+11\"},\r\n    {1.729e12f, chars_format::scientific, \"1.729e+12\"},\r\n    {1.729e13f, chars_format::scientific, \"1.729e+13\"},\r\n    {1.729e14f, chars_format::scientific, \"1.729e+14\"},\r\n    {1.729e15f, chars_format::scientific, \"1.729e+15\"},\r\n    {1.729e16f, chars_format::scientific, \"1.729e+16\"},\r\n    {1.729e17f, chars_format::scientific, \"1.729e+17\"},\r\n    {1.729e18f, chars_format::scientific, \"1.729e+18\"},\r\n    {1.729e19f, chars_format::scientific, \"1.729e+19\"},\r\n    {1.729e20f, chars_format::scientific, \"1.729e+20\"},\r\n    {1.729e21f, chars_format::scientific, \"1.729e+21\"},\r\n    {1.729e22f, chars_format::scientific, \"1.729e+22\"},\r\n    {1.729e23f, chars_format::scientific, \"1.729e+23\"},\r\n    {1.729e24f, chars_format::scientific, \"1.729e+24\"},\r\n    {1.729e25f, chars_format::scientific, \"1.729e+25\"},\r\n    {1.729e26f, chars_format::scientific, \"1.729e+26\"},\r\n    {1.729e27f, chars_format::scientific, \"1.729e+27\"},\r\n    {1.729e28f, chars_format::scientific, \"1.729e+28\"},\r\n    {1.729e29f, chars_format::scientific, \"1.729e+29\"},\r\n    {1.729e30f, chars_format::scientific, \"1.729e+30\"},\r\n    {1.729e31f, chars_format::scientific, \"1.729e+31\"},\r\n    {1.729e32f, chars_format::scientific, \"1.729e+32\"},\r\n    {1.729e33f, chars_format::scientific, \"1.729e+33\"},\r\n    {1.729e34f, chars_format::scientific, \"1.729e+34\"},\r\n    {1.729e35f, chars_format::scientific, \"1.729e+35\"},\r\n    {1.729e36f, chars_format::scientific, \"1.729e+36\"},\r\n    {1.729e37f, chars_format::scientific, \"1.729e+37\"},\r\n    {1.729e38f, chars_format::scientific, \"1.729e+38\"},\r\n\r\n    // Test all of the cases for fixed notation, including the non-Ryu fallback for large integers.\r\n    {1.729e-4f, chars_format::fixed, \"0.0001729\"},\r\n    {1.729e-3f, chars_format::fixed, \"0.001729\"},\r\n    {1.729e-2f, chars_format::fixed, \"0.01729\"},\r\n    {1.729e-1f, chars_format::fixed, \"0.1729\"},\r\n    {1.729e0f, chars_format::fixed, \"1.729\"},\r\n    {1.729e1f, chars_format::fixed, \"17.29\"},\r\n    {1.729e2f, chars_format::fixed, \"172.9\"},\r\n    {1.729e3f, chars_format::fixed, \"1729\"},\r\n    {1.729e4f, chars_format::fixed, \"17290\"},\r\n    {1.729e5f, chars_format::fixed, \"172900\"},\r\n    {1.729e6f, chars_format::fixed, \"1729000\"},\r\n    {1.729e7f, chars_format::fixed, \"17290000\"},\r\n    {1.729e8f, chars_format::fixed, \"172900000\"},\r\n    {1.729e9f, chars_format::fixed, \"1728999936\"},\r\n    {1.729e10f, chars_format::fixed, \"17290000384\"},\r\n    {1.729e11f, chars_format::fixed, \"172900007936\"},\r\n    {1.729e12f, chars_format::fixed, \"1728999981056\"},\r\n    {1.729e13f, chars_format::fixed, \"17290000072704\"},\r\n    {1.729e14f, chars_format::fixed, \"172899998629888\"},\r\n    {1.729e15f, chars_format::fixed, \"1729000019853312\"},\r\n    {1.729e16f, chars_format::fixed, \"17289999661662208\"},\r\n    {1.729e17f, chars_format::fixed, \"172900007354040320\"},\r\n    {1.729e18f, chars_format::fixed, \"1729000039180664832\"},\r\n    {1.729e19f, chars_format::fixed, \"17289999567172927488\"},\r\n    {1.729e20f, chars_format::fixed, \"172899997870752530432\"},\r\n    {1.729e21f, chars_format::fixed, \"1729000013891897393152\"},\r\n    {1.729e22f, chars_format::fixed, \"17290000138918973931520\"},\r\n    {1.729e23f, chars_format::fixed, \"172899999137389925629952\"},\r\n    {1.729e24f, chars_format::fixed, \"1729000063431493294227456\"},\r\n    {1.729e25f, chars_format::fixed, \"17289999481393428335427584\"},\r\n    {1.729e26f, chars_format::fixed, \"172900004037306320209051648\"},\r\n    {1.729e27f, chars_format::fixed, \"1729000040373063202090516480\"},\r\n    {1.729e28f, chars_format::fixed, \"17290000403730632020905164800\"},\r\n    {1.729e29f, chars_format::fixed, \"172900004037306320209051648000\"},\r\n    {1.729e30f, chars_format::fixed, \"1728999964815199476176193060864\"},\r\n    {1.729e31f, chars_format::fixed, \"17290000252614904569076517961728\"},\r\n    {1.729e32f, chars_format::fixed, \"172899990436890849544473432555520\"},\r\n    {1.729e33f, chars_format::fixed, \"1729000059111413406117268687945728\"},\r\n    {1.729e34f, chars_format::fixed, \"17290000281629124239827618154676224\"},\r\n    {1.729e35f, chars_format::fixed, \"172899995388651006685994532152016896\"},\r\n    {1.729e36f, chars_format::fixed, \"1728999993500591323992114118292144128\"},\r\n    {1.729e37f, chars_format::fixed, \"17289999935005913239921141182921441280\"},\r\n    {1.729e38f, chars_format::fixed, \"172899996814757931942752608835808002048\"},\r\n\r\n    // Also test one-digit cases, where the decimal point can't appear between digits like \"17.29\".\r\n    {7e-3f, chars_format::fixed, \"0.007\"},\r\n    {7e-2f, chars_format::fixed, \"0.07\"},\r\n    {7e-1f, chars_format::fixed, \"0.7\"},\r\n    {7e0f, chars_format::fixed, \"7\"},\r\n    {7e1f, chars_format::fixed, \"70\"},\r\n    {7e2f, chars_format::fixed, \"700\"},\r\n    {7e3f, chars_format::fixed, \"7000\"},\r\n\r\n    // Test the maximum value in fixed notation.\r\n    {0x1.fffffep+127f, chars_format::fixed, \"340282346638528859811704183484516925440\"},\r\n\r\n    // Test highly-trimmed powers of 2.\r\n    {0x1p118f, chars_format::fixed, \"332306998946228968225951765070086144\"},\r\n    {0x1p118f, chars_format::scientific, \"3.32307e+35\"},\r\n    {0x1p119f, chars_format::fixed, \"664613997892457936451903530140172288\"},\r\n    {0x1p119f, chars_format::scientific, \"6.64614e+35\"},\r\n\r\n    // Test powers of 10 that are exactly representable.\r\n    {1e0f, chars_format::fixed, \"1\"},\r\n    {1e1f, chars_format::fixed, \"10\"},\r\n    {1e2f, chars_format::fixed, \"100\"},\r\n    {1e3f, chars_format::fixed, \"1000\"},\r\n    {1e4f, chars_format::fixed, \"10000\"},\r\n    {1e5f, chars_format::fixed, \"100000\"},\r\n    {1e6f, chars_format::fixed, \"1000000\"},\r\n    {1e7f, chars_format::fixed, \"10000000\"},\r\n    {1e8f, chars_format::fixed, \"100000000\"},\r\n    {1e9f, chars_format::fixed, \"1000000000\"},\r\n    {1e10f, chars_format::fixed, \"10000000000\"},\r\n\r\n    // Test powers of 10 that aren't exactly representable.\r\n    // This exercises the \"adjustment\" code.\r\n    {1e11f, chars_format::fixed, \"99999997952\"},\r\n    {1e12f, chars_format::fixed, \"999999995904\"},\r\n    {1e13f, chars_format::fixed, \"9999999827968\"},\r\n    {1e14f, chars_format::fixed, \"100000000376832\"},\r\n    {1e15f, chars_format::fixed, \"999999986991104\"},\r\n    {1e16f, chars_format::fixed, \"10000000272564224\"},\r\n    {1e17f, chars_format::fixed, \"99999998430674944\"},\r\n    {1e18f, chars_format::fixed, \"999999984306749440\"},\r\n    {1e19f, chars_format::fixed, \"9999999980506447872\"},\r\n    {1e20f, chars_format::fixed, \"100000002004087734272\"},\r\n    {1e21f, chars_format::fixed, \"1000000020040877342720\"},\r\n    {1e22f, chars_format::fixed, \"9999999778196308361216\"},\r\n    {1e23f, chars_format::fixed, \"99999997781963083612160\"},\r\n    {1e24f, chars_format::fixed, \"1000000013848427855085568\"},\r\n    {1e25f, chars_format::fixed, \"9999999562023526247432192\"},\r\n    {1e26f, chars_format::fixed, \"100000002537764290115403776\"},\r\n    {1e27f, chars_format::fixed, \"999999988484154753734934528\"},\r\n    {1e28f, chars_format::fixed, \"9999999442119689768320106496\"},\r\n    {1e29f, chars_format::fixed, \"100000001504746621987668885504\"},\r\n    {1e30f, chars_format::fixed, \"1000000015047466219876688855040\"},\r\n    {1e31f, chars_format::fixed, \"9999999848243207295109594873856\"},\r\n    {1e32f, chars_format::fixed, \"100000003318135351409612647563264\"},\r\n    {1e33f, chars_format::fixed, \"999999994495727286427992885035008\"},\r\n    {1e34f, chars_format::fixed, \"9999999790214767953607394487959552\"},\r\n    {1e35f, chars_format::fixed, \"100000004091847875962975319375216640\"},\r\n    {1e36f, chars_format::fixed, \"999999961690316245365415600208216064\"},\r\n    {1e37f, chars_format::fixed, \"9999999933815812510711506376257961984\"},\r\n    {1e38f, chars_format::fixed, \"99999996802856924650656260769173209088\"},\r\n\r\n    // These numbers have odd mantissas (unaffected by shifting)\r\n    // that are barely within the \"max shifted mantissa\" limit.\r\n    // They're exactly-representable multiples of powers of 10, and can use Ryu with zero-filling.\r\n    {3355443e1f, chars_format::fixed, \"33554430\"},\r\n    {671087e2f, chars_format::fixed, \"67108700\"},\r\n    {134217e3f, chars_format::fixed, \"134217000\"},\r\n    {26843e4f, chars_format::fixed, \"268430000\"},\r\n    {5367e5f, chars_format::fixed, \"536700000\"},\r\n    {1073e6f, chars_format::fixed, \"1073000000\"},\r\n    {213e7f, chars_format::fixed, \"2130000000\"},\r\n    {41e8f, chars_format::fixed, \"4100000000\"},\r\n    {7e9f, chars_format::fixed, \"7000000000\"},\r\n    {1e10f, chars_format::fixed, \"10000000000\"},\r\n\r\n    // These numbers have odd mantissas (unaffected by shifting)\r\n    // that are barely above the \"max shifted mantissa\" limit.\r\n    // This activates the non-Ryu fallback for large integers.\r\n    {3355445e1f, chars_format::fixed, \"33554448\"},\r\n    {671089e2f, chars_format::fixed, \"67108896\"},\r\n    {134219e3f, chars_format::fixed, \"134219008\"},\r\n    {26845e4f, chars_format::fixed, \"268449984\"},\r\n    {5369e5f, chars_format::fixed, \"536899968\"},\r\n    {1075e6f, chars_format::fixed, \"1075000064\"},\r\n    {215e7f, chars_format::fixed, \"2150000128\"},\r\n    {43e8f, chars_format::fixed, \"4300000256\"},\r\n    {9e9f, chars_format::fixed, \"8999999488\"},\r\n    {3e10f, chars_format::fixed, \"30000001024\"},\r\n\r\n    // Test the mantissa shifting logic.\r\n    {5495808e5f, chars_format::fixed, \"549580800000\"}, // 5367 * 2^10\r\n    {5497856e5f, chars_format::fixed, \"549785567232\"}, // 5369 * 2^10\r\n\r\n    // Inspect all of those numbers in scientific notation.\r\n    // For the within-limit numbers, this verifies that Ryu is actually being used with zero-filling above.\r\n    // For the above-limit numbers, this tests Ryu's trimming.\r\n    {3355443e1f, chars_format::scientific, \"3.355443e+07\"},\r\n    {671087e2f, chars_format::scientific, \"6.71087e+07\"},\r\n    {134217e3f, chars_format::scientific, \"1.34217e+08\"},\r\n    {26843e4f, chars_format::scientific, \"2.6843e+08\"},\r\n    {5367e5f, chars_format::scientific, \"5.367e+08\"},\r\n    {1073e6f, chars_format::scientific, \"1.073e+09\"},\r\n    {213e7f, chars_format::scientific, \"2.13e+09\"},\r\n    {41e8f, chars_format::scientific, \"4.1e+09\"},\r\n    {7e9f, chars_format::scientific, \"7e+09\"},\r\n    {1e10f, chars_format::scientific, \"1e+10\"},\r\n    {3355445e1f, chars_format::scientific, \"3.355445e+07\"},\r\n    {671089e2f, chars_format::scientific, \"6.71089e+07\"},\r\n    {134219e3f, chars_format::scientific, \"1.34219e+08\"},\r\n    {26845e4f, chars_format::scientific, \"2.6845e+08\"},\r\n    {5369e5f, chars_format::scientific, \"5.369e+08\"},\r\n    {1075e6f, chars_format::scientific, \"1.075e+09\"},\r\n    {215e7f, chars_format::scientific, \"2.15e+09\"},\r\n    {43e8f, chars_format::scientific, \"4.3e+09\"},\r\n    {9e9f, chars_format::scientific, \"9e+09\"},\r\n    {3e10f, chars_format::scientific, \"3e+10\"},\r\n    {5495808e5f, chars_format::scientific, \"5.495808e+11\"},\r\n    {5497856e5f, chars_format::scientific, \"5.497856e+11\"},\r\n\r\n    // Test the switching logic of chars_format::general.\r\n    // C11 7.21.6.1 \"The fprintf function\"/8:\r\n    // \"Let P equal [...] 6 if the precision is omitted [...].\r\n    // Then, if a conversion with style E would have an exponent of X:\r\n    // - if P > X >= -4, the conversion is with style f [...].\r\n    // - otherwise, the conversion is with style e [...].\"\r\n    {1e-6f, chars_format::general, \"1e-06\"},\r\n    {1e-5f, chars_format::general, \"1e-05\"},\r\n    {1e-4f, chars_format::general, \"0.0001\"},\r\n    {1e-3f, chars_format::general, \"0.001\"},\r\n    {1e-2f, chars_format::general, \"0.01\"},\r\n    {1e-1f, chars_format::general, \"0.1\"},\r\n    {1e0f, chars_format::general, \"1\"},\r\n    {1e1f, chars_format::general, \"10\"},\r\n    {1e2f, chars_format::general, \"100\"},\r\n    {1e3f, chars_format::general, \"1000\"},\r\n    {1e4f, chars_format::general, \"10000\"},\r\n    {1e5f, chars_format::general, \"100000\"},\r\n    {1e6f, chars_format::general, \"1e+06\"},\r\n    {1e7f, chars_format::general, \"1e+07\"},\r\n    {1.234e-6f, chars_format::general, \"1.234e-06\"},\r\n    {1.234e-5f, chars_format::general, \"1.234e-05\"},\r\n    {1.234e-4f, chars_format::general, \"0.0001234\"},\r\n    {1.234e-3f, chars_format::general, \"0.001234\"},\r\n    {1.234e-2f, chars_format::general, \"0.01234\"},\r\n    {1.234e-1f, chars_format::general, \"0.1234\"},\r\n    {1.234e0f, chars_format::general, \"1.234\"},\r\n    {1.234e1f, chars_format::general, \"12.34\"},\r\n    {1.234e2f, chars_format::general, \"123.4\"},\r\n    {1.234e3f, chars_format::general, \"1234\"},\r\n    {1.234e4f, chars_format::general, \"12340\"},\r\n    {1.234e5f, chars_format::general, \"123400\"},\r\n    {1.234e6f, chars_format::general, \"1.234e+06\"},\r\n    {1.234e7f, chars_format::general, \"1.234e+07\"},\r\n    {1.234e8f, chars_format::general, \"1.234e+08\"},\r\n    {1.234e9f, chars_format::general, \"1.234e+09\"},\r\n    {1.234e10f, chars_format::general, \"1.234e+10\"},\r\n\r\n    // Test the switching logic of the plain overload.\r\n    // N4762 19.19.2 [charconv.to.chars]/8:\r\n    // \"The conversion specifier is f or e, chosen according to the requirement\r\n    // for a shortest representation (see above); a tie is resolved in favor of f.\"\r\n    {1e-6f, chars_format{}, \"1e-06\"},\r\n    {1e-5f, chars_format{}, \"1e-05\"},\r\n    {1e-4f, chars_format{}, \"1e-04\"},\r\n    {1e-3f, chars_format{}, \"0.001\"},\r\n    {1e-2f, chars_format{}, \"0.01\"},\r\n    {1e-1f, chars_format{}, \"0.1\"},\r\n    {1e0f, chars_format{}, \"1\"},\r\n    {1e1f, chars_format{}, \"10\"},\r\n    {1e2f, chars_format{}, \"100\"},\r\n    {1e3f, chars_format{}, \"1000\"},\r\n    {1e4f, chars_format{}, \"10000\"},\r\n    {1e5f, chars_format{}, \"1e+05\"},\r\n    {1e6f, chars_format{}, \"1e+06\"},\r\n    {1e7f, chars_format{}, \"1e+07\"},\r\n    {1.234e-6f, chars_format{}, \"1.234e-06\"},\r\n    {1.234e-5f, chars_format{}, \"1.234e-05\"},\r\n    {1.234e-4f, chars_format{}, \"0.0001234\"},\r\n    {1.234e-3f, chars_format{}, \"0.001234\"},\r\n    {1.234e-2f, chars_format{}, \"0.01234\"},\r\n    {1.234e-1f, chars_format{}, \"0.1234\"},\r\n    {1.234e0f, chars_format{}, \"1.234\"},\r\n    {1.234e1f, chars_format{}, \"12.34\"},\r\n    {1.234e2f, chars_format{}, \"123.4\"},\r\n    {1.234e3f, chars_format{}, \"1234\"},\r\n    {1.234e4f, chars_format{}, \"12340\"},\r\n    {1.234e5f, chars_format{}, \"123400\"},\r\n    {1.234e6f, chars_format{}, \"1234000\"},\r\n    {1.234e7f, chars_format{}, \"12340000\"},\r\n    {1.234e8f, chars_format{}, \"123400000\"},\r\n    {1.234e9f, chars_format{}, \"1.234e+09\"},\r\n    {1.234e10f, chars_format{}, \"1.234e+10\"},\r\n\r\n    // GH-331 \"<charconv>: Test plain shortest's large integer fallback\"\r\n    // The exactly-representable integer 123456790528 is 12 digits, but scientific shortest needs 13 characters.\r\n    // Therefore, the plain overload must select fixed notation. Because this 12-digit number exceeds the 9-digit\r\n    // round-trip limit, we can't use Ryu - we need to activate the large integer fallback (currently, long division for\r\n    // float).\r\n    {123456790528.0f, chars_format::scientific, \"1.2345679e+11\"},\r\n    {123456790528.0f, chars_format{}, \"123456790528\"},\r\n\r\n    // Test hexfloat corner cases.\r\n    {0x1.728p+0f, chars_format::hex, \"1.728p+0\"}, // instead of \"2.e5p-1\"\r\n    {0x0.000002p-126f, chars_format::hex, \"0.000002p-126\"}, // instead of \"1p-149\", min subnormal\r\n    {0x0.fffffep-126f, chars_format::hex, \"0.fffffep-126\"}, // max subnormal\r\n    {0x1p-126f, chars_format::hex, \"1p-126\"}, // min normal\r\n    {0x1.fffffep+127f, chars_format::hex, \"1.fffffep+127\"}, // max normal\r\n\r\n    // Test hexfloat exponents.\r\n    {0x1p-109f, chars_format::hex, \"1p-109\"},\r\n    {0x1p-99f, chars_format::hex, \"1p-99\"},\r\n    {0x1p-9f, chars_format::hex, \"1p-9\"},\r\n    {0x1p+0f, chars_format::hex, \"1p+0\"},\r\n    {0x1p+9f, chars_format::hex, \"1p+9\"},\r\n    {0x1p+99f, chars_format::hex, \"1p+99\"},\r\n    {0x1p+109f, chars_format::hex, \"1p+109\"},\r\n\r\n    // Test hexfloat hexits.\r\n    {0x1.0123p+0f, chars_format::hex, \"1.0123p+0\"},\r\n    {0x1.4567p+0f, chars_format::hex, \"1.4567p+0\"},\r\n    {0x1.89abp+0f, chars_format::hex, \"1.89abp+0\"},\r\n    {0x1.cdefp+0f, chars_format::hex, \"1.cdefp+0\"},\r\n\r\n    // Test hexfloat trimming.\r\n    {0x1.00000ap+0f, chars_format::hex, \"1.00000ap+0\"},\r\n    {0x1.0000ap+0f, chars_format::hex, \"1.0000ap+0\"},\r\n    {0x1.000ap+0f, chars_format::hex, \"1.000ap+0\"},\r\n    {0x1.00ap+0f, chars_format::hex, \"1.00ap+0\"},\r\n    {0x1.0ap+0f, chars_format::hex, \"1.0ap+0\"},\r\n    {0x1.ap+0f, chars_format::hex, \"1.ap+0\"},\r\n    {0x1p+0f, chars_format::hex, \"1p+0\"},\r\n\r\n    // https://www.exploringbinary.com/the-shortest-decimal-string-that-round-trips-may-not-be-the-nearest/\r\n    // This is an exhaustive list of anomalous values.\r\n    // (See double_to_chars_test_cases.hpp for more details.)\r\n    {0x1p90f, chars_format::scientific, \"1.2379401e+27\"},\r\n    {0x1p87f, chars_format::scientific, \"1.5474251e+26\"},\r\n    {0x1p-96f, chars_format::scientific, \"1.2621775e-29\"},\r\n};\r\n\r\n#endif // FLOAT_TO_CHARS_TEST_CASES_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include \"test.hpp\"\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <charconv>\r\n#include <chrono>\r\n#include <cmath>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <fstream>\r\n#include <functional>\r\n#include <limits>\r\n#include <locale>\r\n#include <optional>\r\n#include <random>\r\n#include <set>\r\n#include <string>\r\n#include <string_view>\r\n#include <system_error>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include \"double_fixed_precision_to_chars_test_cases_1.hpp\"\r\n#include \"double_fixed_precision_to_chars_test_cases_2.hpp\"\r\n#include \"double_fixed_precision_to_chars_test_cases_3.hpp\"\r\n#include \"double_fixed_precision_to_chars_test_cases_4.hpp\"\r\n#include \"double_from_chars_test_cases.hpp\"\r\n#include \"double_general_precision_to_chars_test_cases.hpp\"\r\n#include \"double_hex_precision_to_chars_test_cases.hpp\"\r\n#include \"double_scientific_precision_to_chars_test_cases_1.hpp\"\r\n#include \"double_scientific_precision_to_chars_test_cases_2.hpp\"\r\n#include \"double_scientific_precision_to_chars_test_cases_3.hpp\"\r\n#include \"double_scientific_precision_to_chars_test_cases_4.hpp\"\r\n#include \"double_to_chars_test_cases.hpp\"\r\n#include \"float_fixed_precision_to_chars_test_cases.hpp\"\r\n#include \"float_from_chars_test_cases.hpp\"\r\n#include \"float_general_precision_to_chars_test_cases.hpp\"\r\n#include \"float_hex_precision_to_chars_test_cases.hpp\"\r\n#include \"float_scientific_precision_to_chars_test_cases.hpp\"\r\n#include \"float_to_chars_test_cases.hpp\"\r\n#include \"wchar_test_cases.hpp\"\r\n#include <floating_point_test_cases.hpp>\r\n\r\nusing namespace std;\r\n\r\nconstexpr auto int8_min   = numeric_limits<int8_t>::min();\r\nconstexpr auto int8_max   = numeric_limits<int8_t>::max();\r\nconstexpr auto int16_min  = numeric_limits<int16_t>::min();\r\nconstexpr auto int16_max  = numeric_limits<int16_t>::max();\r\nconstexpr auto int32_min  = numeric_limits<int32_t>::min();\r\nconstexpr auto int32_max  = numeric_limits<int32_t>::max();\r\nconstexpr auto int64_min  = numeric_limits<int64_t>::min();\r\nconstexpr auto int64_max  = numeric_limits<int64_t>::max();\r\nconstexpr auto uint8_max  = numeric_limits<uint8_t>::max();\r\nconstexpr auto uint16_max = numeric_limits<uint16_t>::max();\r\nconstexpr auto uint32_max = numeric_limits<uint32_t>::max();\r\nconstexpr auto uint64_max = numeric_limits<uint64_t>::max();\r\n\r\nvoid initialize_randomness(mt19937_64& mt64, const int argc, char** const argv) {\r\n    constexpr size_t n = mt19937_64::state_size;\r\n    constexpr size_t w = mt19937_64::word_size;\r\n    static_assert(w % 32 == 0);\r\n    constexpr size_t k = w / 32;\r\n\r\n    vector<uint32_t> vec(n * k);\r\n\r\n    puts(\"USAGE:\");\r\n    puts(\"test.exe              : generates seed data from random_device.\");\r\n    puts(\"test.exe filename.txt : loads seed data from a given text file.\");\r\n\r\n    if (argc == 1) {\r\n        random_device rd;\r\n        generate(vec.begin(), vec.end(), ref(rd));\r\n        puts(\"Generated seed data.\");\r\n    } else if (argc == 2) {\r\n        const char* const filename = argv[1];\r\n\r\n        ifstream file(filename);\r\n\r\n        if (!file) {\r\n            printf(\"ERROR: Can't open %s.\\n\", filename);\r\n            abort();\r\n        }\r\n\r\n        for (auto& elem : vec) {\r\n            file >> elem;\r\n\r\n            if (!file) {\r\n                printf(\"ERROR: Can't read seed data from %s.\\n\", filename);\r\n                abort();\r\n            }\r\n        }\r\n\r\n        printf(\"Loaded seed data from %s.\\n\", filename);\r\n    } else {\r\n        puts(\"ERROR: Too many command-line arguments.\");\r\n        abort();\r\n    }\r\n\r\n    puts(\"SEED DATA:\");\r\n    for (const auto& elem : vec) {\r\n        printf(\"%u \", elem);\r\n    }\r\n    printf(\"\\n\");\r\n\r\n    seed_seq seq(vec.cbegin(), vec.cend());\r\n\r\n    mt64.seed(seq);\r\n\r\n    puts(\"Successfully seeded mt64. First three values:\");\r\n    for (int i = 0; i < 3; ++i) {\r\n        // libc++ uses long for 64-bit values.\r\n        printf(\"0x%016llX\\n\", static_cast<unsigned long long>(mt64()));\r\n    }\r\n}\r\n\r\nstatic_assert((chars_format::scientific & chars_format::fixed) == chars_format{});\r\nstatic_assert((chars_format::scientific & chars_format::hex) == chars_format{});\r\nstatic_assert((chars_format::fixed & chars_format::hex) == chars_format{});\r\nstatic_assert(chars_format::general == (chars_format::fixed | chars_format::scientific));\r\n\r\ntemplate <typename T, typename Optional>\r\nvoid test_common_to_chars(\r\n    const T value, const Optional opt_arg, const optional<int> opt_precision, const string_view correct) {\r\n\r\n    // Important: Test every effective buffer size from 0 through correct.size() and slightly beyond. For the sizes\r\n    // less than correct.size(), this verifies that the too-small buffer is correctly detected, and that we don't\r\n    // attempt to write outside of it, even by a single char. (This exhaustive validation is necessary because the\r\n    // implementation must check whenever it attempts to write. Sometimes we can calculate the total size and perform\r\n    // a single check, but sometimes we need to check when writing each part of the result.) Testing correct.size()\r\n    // verifies that we can succeed without overrunning, and testing slightly larger sizes verifies that we can succeed\r\n    // without attempting to write to extra chars even when they're available. Finally, we also verify that we aren't\r\n    // underrunning the buffer. This is a concern because sometimes we walk backwards when rounding.\r\n\r\n    constexpr size_t BufferPrefix = 20; // detect buffer underruns (specific value isn't important)\r\n\r\n    constexpr size_t Space = is_integral_v<T> ? 1 + 64 // worst case: -2^63 in binary\r\n                           : is_same_v<T, float>\r\n                               ? 1 + 151 // worst case: negative min subnormal float, fixed notation\r\n                               : 1 + 1076; // worst case: negative min subnormal double, fixed notation\r\n\r\n    constexpr size_t BufferSuffix = 30; // detect buffer overruns (specific value isn't important)\r\n\r\n    array<char, BufferPrefix + Space + BufferSuffix> buff;\r\n\r\n    char* const buff_begin = buff.data();\r\n    char* const first      = buff_begin + BufferPrefix;\r\n    char* const buff_end   = buff_begin + buff.size();\r\n\r\n    constexpr size_t ExtraChars = 3;\r\n    static_assert(ExtraChars + 10 < BufferSuffix,\r\n        \"The specific values aren't important, but there should be plenty of room to detect buffer overruns.\");\r\n\r\n    for (size_t n = 0; n <= correct.size() + ExtraChars; ++n) {\r\n        assert(n <= static_cast<size_t>(buff_end - first));\r\n        char* const last = first + n;\r\n\r\n        buff.fill('@');\r\n        const auto is_fill_char = [](const char c) { return c == '@'; };\r\n\r\n        to_chars_result result{};\r\n        if (opt_precision.has_value()) {\r\n            assert(opt_arg.has_value());\r\n\r\n            if constexpr (is_floating_point_v<T>) {\r\n                result = to_chars(first, last, value, opt_arg.value(), opt_precision.value());\r\n            } else {\r\n                abort();\r\n            }\r\n        } else if (opt_arg.has_value()) {\r\n            result = to_chars(first, last, value, opt_arg.value());\r\n        } else {\r\n            result = to_chars(first, last, value);\r\n        }\r\n\r\n        if (n < correct.size()) {\r\n            assert(result.ptr == last);\r\n            assert(result.ec == errc::value_too_large);\r\n            assert(all_of(buff_begin, first, is_fill_char));\r\n            // [first, last) is unspecified\r\n            assert(all_of(last, buff_end, is_fill_char));\r\n        } else {\r\n            assert(result.ptr == first + correct.size());\r\n            assert(result.ec == errc{});\r\n            assert(all_of(buff_begin, first, is_fill_char));\r\n            assert(equal(first, result.ptr, correct.begin(), correct.end()));\r\n            assert(all_of(result.ptr, buff_end, is_fill_char));\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <typename T>\r\n_CONSTEXPR23 void test_integer_to_chars(const T value, const optional<int> opt_base, const string_view correct) {\r\n    // This reaches the constexpr step limit too quickly\r\n    if (!_Is_constant_evaluated()) {\r\n        test_common_to_chars(value, opt_base, nullopt, correct);\r\n    }\r\n\r\n    { // Also test successful from_chars() scenarios.\r\n        const char* const correct_first = correct.data();\r\n        const char* const correct_last  = correct_first + correct.size();\r\n\r\n        T dest = 0;\r\n\r\n        const from_chars_result from_res =\r\n            (opt_base.has_value() ? from_chars(correct_first, correct_last, dest, opt_base.value())\r\n                                  : from_chars(correct_first, correct_last, dest));\r\n\r\n        assert(from_res.ptr == correct_last);\r\n        assert(from_res.ec == errc{});\r\n        assert(dest == value);\r\n    }\r\n}\r\n\r\n// https://www.wolframalpha.com : Table[BaseForm[n * 2 - 1, n], {n, 2, 36}]\r\nconstexpr const char* output_max_digit[] = {\"skip0\", \"skip1\", \"11\", \"12\", \"13\", \"14\", \"15\", \"16\", \"17\", \"18\", \"19\",\r\n    \"1a\", \"1b\", \"1c\", \"1d\", \"1e\", \"1f\", \"1g\", \"1h\", \"1i\", \"1j\", \"1k\", \"1l\", \"1m\", \"1n\", \"1o\", \"1p\", \"1q\", \"1r\", \"1s\",\r\n    \"1t\", \"1u\", \"1v\", \"1w\", \"1x\", \"1y\", \"1z\"};\r\n\r\n// https://www.wolframalpha.com : Table[BaseForm[k, n], {k, {MEOW, MEOW, MEOW}}, {n, 2, 36}]\r\nconstexpr uint64_t stress_chunks_positive                          = 12000000345000678900ULL;\r\nconstexpr pair<uint64_t, array<const char*, 37>> output_positive[] = {\r\n    {123U, {{\"skip0\", \"skip1\", \"1111011\", \"11120\", \"1323\", \"443\", \"323\", \"234\", \"173\", \"146\", \"123\", \"102\", \"a3\", \"96\",\r\n               \"8b\", \"83\", \"7b\", \"74\", \"6f\", \"69\", \"63\", \"5i\", \"5d\", \"58\", \"53\", \"4n\", \"4j\", \"4f\", \"4b\", \"47\", \"43\",\r\n               \"3u\", \"3r\", \"3o\", \"3l\", \"3i\", \"3f\"}}},\r\n    {uint64_t{int8_max}, {{\"skip0\", \"skip1\", \"1111111\", \"11201\", \"1333\", \"1002\", \"331\", \"241\", \"177\", \"151\", \"127\",\r\n                             \"106\", \"a7\", \"9a\", \"91\", \"87\", \"7f\", \"78\", \"71\", \"6d\", \"67\", \"61\", \"5h\", \"5c\", \"57\", \"52\",\r\n                             \"4n\", \"4j\", \"4f\", \"4b\", \"47\", \"43\", \"3v\", \"3s\", \"3p\", \"3m\", \"3j\"}}},\r\n    {161U, {{\"skip0\", \"skip1\", \"10100001\", \"12222\", \"2201\", \"1121\", \"425\", \"320\", \"241\", \"188\", \"161\", \"137\", \"115\",\r\n               \"c5\", \"b7\", \"ab\", \"a1\", \"98\", \"8h\", \"89\", \"81\", \"7e\", \"77\", \"70\", \"6h\", \"6b\", \"65\", \"5q\", \"5l\", \"5g\",\r\n               \"5b\", \"56\", \"51\", \"4t\", \"4p\", \"4l\", \"4h\"}}},\r\n    {uint8_max, {{\"skip0\", \"skip1\", \"11111111\", \"100110\", \"3333\", \"2010\", \"1103\", \"513\", \"377\", \"313\", \"255\", \"212\",\r\n                    \"193\", \"168\", \"143\", \"120\", \"ff\", \"f0\", \"e3\", \"d8\", \"cf\", \"c3\", \"bd\", \"b2\", \"af\", \"a5\", \"9l\", \"9c\",\r\n                    \"93\", \"8n\", \"8f\", \"87\", \"7v\", \"7o\", \"7h\", \"7a\", \"73\"}}},\r\n    {1729U, {{\"skip0\", \"skip1\", \"11011000001\", \"2101001\", \"123001\", \"23404\", \"12001\", \"5020\", \"3301\", \"2331\", \"1729\",\r\n                \"1332\", \"1001\", \"a30\", \"8b7\", \"7a4\", \"6c1\", \"5gc\", \"561\", \"4f0\", \"469\", \"3j7\", \"3cd\", \"364\", \"301\",\r\n                \"2j4\", \"2ed\", \"2a1\", \"25l\", \"21i\", \"1rj\", \"1oo\", \"1m1\", \"1jd\", \"1gt\", \"1ee\", \"1c1\"}}},\r\n    {uint64_t{int16_max}, {{\"skip0\", \"skip1\", \"111111111111111\", \"1122221121\", \"13333333\", \"2022032\", \"411411\",\r\n                              \"164350\", \"77777\", \"48847\", \"32767\", \"22689\", \"16b67\", \"11bb7\", \"bd27\", \"9a97\", \"7fff\",\r\n                              \"6b68\", \"5b27\", \"4eeb\", \"41i7\", \"3b67\", \"31f9\", \"2flf\", \"28l7\", \"22ah\", \"1mc7\", \"1hpg\",\r\n                              \"1dm7\", \"19rq\", \"16c7\", \"1330\", \"vvv\", \"u2v\", \"sbp\", \"qq7\", \"pa7\"}}},\r\n    {57494U, {{\"skip0\", \"skip1\", \"1110000010010110\", \"2220212102\", \"32002112\", \"3314434\", \"1122102\", \"326423\", \"160226\",\r\n                 \"86772\", \"57494\", \"3a218\", \"29332\", \"20228\", \"16d4a\", \"1207e\", \"e096\", \"bbg0\", \"9f82\", \"8750\", \"73ee\",\r\n                 \"647h\", \"58h8\", \"4gfh\", \"43je\", \"3goj\", \"3718\", \"2onb\", \"2h9a\", \"2aag\", \"23qe\", \"1spk\", \"1o4m\", \"1jq8\",\r\n                 \"1fp0\", \"1bwo\", \"18d2\"}}},\r\n    {uint16_max, {{\"skip0\", \"skip1\", \"1111111111111111\", \"10022220020\", \"33333333\", \"4044120\", \"1223223\", \"362031\",\r\n                     \"177777\", \"108806\", \"65535\", \"45268\", \"31b13\", \"23aa2\", \"19c51\", \"14640\", \"ffff\", \"d5d0\", \"b44f\",\r\n                     \"9aa4\", \"83gf\", \"71cf\", \"638j\", \"58k8\", \"4hif\", \"44la\", \"3iof\", \"38o6\", \"2rgf\", \"2jqo\", \"2cof\",\r\n                     \"2661\", \"1vvv\", \"1r5u\", \"1mnh\", \"1ihf\", \"1ekf\"}}},\r\n    {71125478U, {{\"skip0\", \"skip1\", \"100001111010100100111100110\", \"11221211112210222\", \"10033110213212\",\r\n                    \"121202003403\", \"11020244342\", \"1522361624\", \"417244746\", \"157745728\", \"71125478\", \"3716a696\",\r\n                    \"1b9a06b2\", \"11973ba8\", \"9636514\", \"639e338\", \"43d49e6\", \"2g19gfb\", \"21b9d18\", \"19dec94\", \"124addi\",\r\n                    \"h8f25b\", \"dhdfa6\", \"b13hg2\", \"8m91he\", \"7720j3\", \"5pgj58\", \"4pmelq\", \"43k17i\", \"3dg8ek\", \"2ro898\",\r\n                    \"2f0et8\", \"23qif6\", \"1qw5lh\", \"1j7l7s\", \"1cdvli\", \"16cgrq\"}}},\r\n    {uint64_t{int32_max},\r\n        {{\"skip0\", \"skip1\", \"1111111111111111111111111111111\", \"12112122212110202101\", \"1333333333333333\",\r\n            \"13344223434042\", \"553032005531\", \"104134211161\", \"17777777777\", \"5478773671\", \"2147483647\", \"a02220281\",\r\n            \"4bb2308a7\", \"282ba4aaa\", \"1652ca931\", \"c87e66b7\", \"7fffffff\", \"53g7f548\", \"3928g3h1\", \"27c57h32\",\r\n            \"1db1f927\", \"140h2d91\", \"ikf5bf1\", \"ebelf95\", \"b5gge57\", \"8jmdnkm\", \"6oj8ion\", \"5ehncka\", \"4clm98f\",\r\n            \"3hk7987\", \"2sb6cs7\", \"2d09uc1\", \"1vvvvvv\", \"1lsqtl1\", \"1d8xqrp\", \"15v22um\", \"zik0zj\"}}},\r\n    {3522553278ULL,\r\n        {{\"skip0\", \"skip1\", \"11010001111101011110010110111110\", \"100002111022020200020\", \"3101331132112332\",\r\n            \"24203233201103\", \"1341312313010\", \"153202131426\", \"32175362676\", \"10074266606\", \"3522553278\", \"1548431462\",\r\n            \"823842766\", \"441a34c6a\", \"255b8d486\", \"1593b4753\", \"d1f5e5be\", \"89ffb3b6\", \"5da3e606\", \"3hgbfb5i\",\r\n            \"2f0fj33i\", \"1k1ac536\", \"191b46e2\", \"10i6fmk8\", \"ia967l6\", \"eahia63\", \"baca9ga\", \"92d86i6\", \"78iq4i6\",\r\n            \"5qlc1dc\", \"4osos2i\", \"3u1862s\", \"38vbpdu\", \"2o0a7ro\", \"29hx9e6\", \"1w2dnod\", \"1m98ji6\"}}},\r\n    {uint32_max,\r\n        {{\"skip0\", \"skip1\", \"11111111111111111111111111111111\", \"102002022201221111210\", \"3333333333333333\",\r\n            \"32244002423140\", \"1550104015503\", \"211301422353\", \"37777777777\", \"12068657453\", \"4294967295\", \"1904440553\",\r\n            \"9ba461593\", \"535a79888\", \"2ca5b7463\", \"1a20dcd80\", \"ffffffff\", \"a7ffda90\", \"704he7g3\", \"4f5aff65\",\r\n            \"3723ai4f\", \"281d55i3\", \"1fj8b183\", \"1606k7ib\", \"mb994af\", \"hek2mgk\", \"dnchbnl\", \"b28jpdl\", \"8pfgih3\",\r\n            \"76beigf\", \"5qmcpqf\", \"4q0jto3\", \"3vvvvvv\", \"3aokq93\", \"2qhxjlh\", \"2br45qa\", \"1z141z3\"}}},\r\n    {545890816626160ULL,\r\n        {{\"skip0\", \"skip1\", \"1111100000111110000011100001101100000110111110000\", \"2122120211122121121021010202111\",\r\n            \"1330013300130031200313300\", \"1033022333343024014120\", \"5213002440142255104\", \"222661211220253465\",\r\n            \"17407603415406760\", \"2576748547233674\", \"545890816626160\", \"148a34aa4706535\", \"51285369b87494\",\r\n            \"1a57a38b045a95\", \"98b3383b9766c\", \"4319d1601875a\", \"1f07c1c360df0\", \"ffd471f34f13\", \"88g09ff9dh84\",\r\n            \"4d0d5e232c53\", \"2d63h403i580\", \"1bf5h8185hdj\", \"kc3g550fkcg\", \"d41id5k9984\", \"8ef5n0him4g\", \"5i2dijfe1la\",\r\n            \"3me22fm5fhi\", \"2hfmhgg73kd\", \"1ngpfabr53c\", \"18i7220bh11\", \"rm0lcjngpa\", \"kk1elesni1\", \"fgfge3c3fg\",\r\n            \"bp4q5l6bjg\", \"8xna46jp0k\", \"6wejomvji5\", \"5di2s1qhv4\"}}},\r\n    {uint64_t{int64_max},\r\n        {{\"skip0\", \"skip1\", \"111111111111111111111111111111111111111111111111111111111111111\",\r\n            \"2021110011022210012102010021220101220221\", \"13333333333333333333333333333333\",\r\n            \"1104332401304422434310311212\", \"1540241003031030222122211\", \"22341010611245052052300\",\r\n            \"777777777777777777777\", \"67404283172107811827\", \"9223372036854775807\", \"1728002635214590697\",\r\n            \"41a792678515120367\", \"10b269549075433c37\", \"4340724c6c71dc7a7\", \"160e2ad3246366807\", \"7fffffffffffffff\",\r\n            \"33d3d8307b214008\", \"16agh595df825fa7\", \"ba643dci0ffeehh\", \"5cbfjia3fh26ja7\", \"2heiciiie82dh97\",\r\n            \"1adaibb21dckfa7\", \"i6k448cf4192c2\", \"acd772jnc9l0l7\", \"64ie1focnn5g77\", \"3igoecjbmca687\", \"27c48l5b37oaop\",\r\n            \"1bk39f3ah3dmq7\", \"q1se8f0m04isb\", \"hajppbc1fc207\", \"bm03i95hia437\", \"7vvvvvvvvvvvv\", \"5hg4ck9jd4u37\",\r\n            \"3tdtk1v8j6tpp\", \"2pijmikexrxp7\", \"1y2p0ij32e8e7\"}}},\r\n    {stress_chunks_positive,\r\n        {{\"skip0\", \"skip1\", \"1010011010001000100100001011110000101100010101001001010111110100\",\r\n            \"2221221122020020011022001202200200202200\", \"22122020210023300230111021113310\",\r\n            \"1301130403021123030133211100\", \"2311004450342244200504500\", \"30325064311430214266301\",\r\n            \"1232104413605425112764\", \"87848206138052620680\", \"12000000345000678900\", \"2181782a1686924456a\",\r\n            \"54aa47a9058877b130\", \"150593a5b002c87b16\", \"571cad2b93c7760a8\", \"1c60d2676d4e53e00\", \"a68890bc2c5495f4\",\r\n            \"43499224707a4f4g\", \"1e052gdga1d26f40\", \"f06dh4g564c8a91\", \"769df0d9ace4h50\", \"3ee7bcj1ajghi4f\",\r\n            \"1k9agc4gfl0l43a\", \"10id7dakdlcjd22\", \"dge08fe0l5hl7c\", \"8184326d31ib60\", \"4ljbglf3cpim76\",\r\n            \"2pph66481kiiki\", \"1niph2ao132e58\", \"14qgbgk3c3iffg\", \"mhc35an1bhb00\", \"f78o8ur705ln5\", \"ad24gngm595fk\",\r\n            \"76e1n5i5v0ivl\", \"50wu8jsnks82g\", \"3ja41smfvqb1f\", \"2j64t3qgq0ut0\"}}},\r\n    {14454900944617508688ULL,\r\n        {{\"skip0\", \"skip1\", \"1100100010011010000111111101001011100011011000101000111101010000\",\r\n            \"10120022020112011211121221212101012220210\", \"30202122013331023203120220331100\",\r\n            \"1432224030234034034040234223\", \"3014532424232535441404120\", \"34610451042001242144165\",\r\n            \"1442320775134330507520\", \"116266464747855335823\", \"14454900944617508688\", \"266642a9a9471339935\",\r\n            \"662251403263939640\", \"1895280092bc310481\", \"68cb9c8292557406c\", \"23023deab20002893\", \"c89a1fd2e3628f50\",\r\n            \"50e7147a7db8ef84\", \"22a34a05086f78ec\", \"i1dgef04357g7i1\", \"8g90b882jcj8be8\", \"49c1kk35i0k24ic\",\r\n            \"272a16i54ebkacg\", \"15fdih7l3m7k8md\", \"gbj7303eg9nge0\", \"9hckfdkj3kkdmd\", \"5lc7hifdkl4nne\",\r\n            \"3f86e4mgpna5ol\", \"266pj428na273c\", \"1bomgjbnlg4m3f\", \"r5tf1f7f009ji\", \"iarsig29iqhhm\", \"ch6gvqbhm53qg\",\r\n            \"8lwtvcdj6rlqr\", \"61w23lajggp44\", \"49p1f3dsqqcdx\", \"31tkqqkxypopc\"}}},\r\n    {uint64_max,\r\n        {{\"skip0\", \"skip1\", \"1111111111111111111111111111111111111111111111111111111111111111\",\r\n            \"11112220022122120101211020120210210211220\", \"33333333333333333333333333333333\",\r\n            \"2214220303114400424121122430\", \"3520522010102100444244423\", \"45012021522523134134601\",\r\n            \"1777777777777777777777\", \"145808576354216723756\", \"18446744073709551615\", \"335500516a429071284\",\r\n            \"839365134a2a240713\", \"219505a9511a867b72\", \"8681049adb03db171\", \"2c1d56b648c6cd110\", \"ffffffffffffffff\",\r\n            \"67979g60f5428010\", \"2d3fgb0b9cg4bd2f\", \"141c8786h1ccaagg\", \"b53bjh07be4dj0f\", \"5e8g4ggg7g56dif\",\r\n            \"2l4lf104353j8kf\", \"1ddh88h2782i515\", \"l12ee5fn0ji1if\", \"c9c336o0mlb7ef\", \"7b7n2pcniokcgf\",\r\n            \"4eo8hfam6fllmo\", \"2nc6j26l66rhof\", \"1n3rsh11f098rn\", \"14l9lkmo30o40f\", \"nd075ib45k86f\", \"fvvvvvvvvvvvv\",\r\n            \"b1w8p7j5q9r6f\", \"7orp63sh4dphh\", \"5g24a25twkwff\", \"3w5e11264sgsf\"}}},\r\n};\r\n\r\n// https://www.wolframalpha.com : Table[BaseForm[k, n], {k, {MEOW, MEOW, MEOW}}, {n, 2, 36}]\r\nconstexpr int64_t stress_chunks_negative                          = -9000876000000054321LL;\r\nconstexpr pair<int64_t, array<const char*, 37>> output_negative[] = {\r\n    {-85, {{\"skip0\", \"skip1\", \"-1010101\", \"-10011\", \"-1111\", \"-320\", \"-221\", \"-151\", \"-125\", \"-104\", \"-85\", \"-78\",\r\n              \"-71\", \"-67\", \"-61\", \"-5a\", \"-55\", \"-50\", \"-4d\", \"-49\", \"-45\", \"-41\", \"-3j\", \"-3g\", \"-3d\", \"-3a\", \"-37\",\r\n              \"-34\", \"-31\", \"-2r\", \"-2p\", \"-2n\", \"-2l\", \"-2j\", \"-2h\", \"-2f\", \"-2d\"}}},\r\n    {int8_min, {{\"skip0\", \"skip1\", \"-10000000\", \"-11202\", \"-2000\", \"-1003\", \"-332\", \"-242\", \"-200\", \"-152\", \"-128\",\r\n                   \"-107\", \"-a8\", \"-9b\", \"-92\", \"-88\", \"-80\", \"-79\", \"-72\", \"-6e\", \"-68\", \"-62\", \"-5i\", \"-5d\", \"-58\",\r\n                   \"-53\", \"-4o\", \"-4k\", \"-4g\", \"-4c\", \"-48\", \"-44\", \"-40\", \"-3t\", \"-3q\", \"-3n\", \"-3k\"}}},\r\n    {-1591, {{\"skip0\", \"skip1\", \"-11000110111\", \"-2011221\", \"-120313\", \"-22331\", \"-11211\", \"-4432\", \"-3067\", \"-2157\",\r\n                \"-1591\", \"-1217\", \"-b07\", \"-955\", \"-819\", \"-711\", \"-637\", \"-58a\", \"-4g7\", \"-47e\", \"-3jb\", \"-3cg\",\r\n                \"-367\", \"-304\", \"-2i7\", \"-2dg\", \"-295\", \"-24p\", \"-20n\", \"-1pp\", \"-1n1\", \"-1ka\", \"-1hn\", \"-1f7\", \"-1cr\",\r\n                \"-1ag\", \"-187\"}}},\r\n    {int16_min, {{\"skip0\", \"skip1\", \"-1000000000000000\", \"-1122221122\", \"-20000000\", \"-2022033\", \"-411412\", \"-164351\",\r\n                    \"-100000\", \"-48848\", \"-32768\", \"-2268a\", \"-16b68\", \"-11bb8\", \"-bd28\", \"-9a98\", \"-8000\", \"-6b69\",\r\n                    \"-5b28\", \"-4eec\", \"-41i8\", \"-3b68\", \"-31fa\", \"-2flg\", \"-28l8\", \"-22ai\", \"-1mc8\", \"-1hph\", \"-1dm8\",\r\n                    \"-19rr\", \"-16c8\", \"-1331\", \"-1000\", \"-u2w\", \"-sbq\", \"-qq8\", \"-pa8\"}}},\r\n    {-66748412,\r\n        {{\"skip0\", \"skip1\", \"-11111110100111111111111100\", \"-11122121011121102\", \"-3332213333330\", \"-114041422122\",\r\n            \"-10342352232\", \"-1440231533\", \"-376477774\", \"-148534542\", \"-66748412\", \"-34750085\", \"-1a42b678\",\r\n            \"-10aa0803\", \"-8c1731a\", \"-5cd7492\", \"-3fa7ffc\", \"-2d03163\", \"-1h5f3b2\", \"-17i39c6\", \"-10h3b0c\", \"-g749jh\",\r\n            \"-ckkdkg\", \"-a8c0ak\", \"-894afk\", \"-6klmbc\", \"-5g1i6g\", \"-4hg4gb\", \"-3ogi7o\", \"-37anqb\", \"-2mc4r2\",\r\n            \"-2a8h7i\", \"-1vkvvs\", \"-1n9ca5\", \"-1fw8sk\", \"-19gshh\", \"-13qnek\"}}},\r\n    {int32_min, {{\"skip0\", \"skip1\", \"-10000000000000000000000000000000\", \"-12112122212110202102\", \"-2000000000000000\",\r\n                    \"-13344223434043\", \"-553032005532\", \"-104134211162\", \"-20000000000\", \"-5478773672\", \"-2147483648\",\r\n                    \"-a02220282\", \"-4bb2308a8\", \"-282ba4aab\", \"-1652ca932\", \"-c87e66b8\", \"-80000000\", \"-53g7f549\",\r\n                    \"-3928g3h2\", \"-27c57h33\", \"-1db1f928\", \"-140h2d92\", \"-ikf5bf2\", \"-ebelf96\", \"-b5gge58\", \"-8jmdnkn\",\r\n                    \"-6oj8ioo\", \"-5ehnckb\", \"-4clm98g\", \"-3hk7988\", \"-2sb6cs8\", \"-2d09uc2\", \"-2000000\", \"-1lsqtl2\",\r\n                    \"-1d8xqrq\", \"-15v22un\", \"-zik0zk\"}}},\r\n    {-297139747082649553LL,\r\n        {{\"skip0\", \"skip1\", \"-10000011111101001110000011010010001100000101011111111010001\",\r\n            \"-1222110012002112101210012211022102101\", \"-100133221300122101200223333101\", \"-4443033200104011124241203\",\r\n            \"-21313431255203203120401\", \"-350320603201030412545\", \"-20375160322140537721\", \"-1873162471705738371\",\r\n            \"-297139747082649553\", \"-65150976074a24025\", \"-173522497b5373101\", \"-5a60a99bc3b71654\", \"-1ca51a06cc38ba25\",\r\n            \"-a2a25babe62241d\", \"-41fa7069182bfd1\", \"-1d00134fba1769g\", \"-e4f799fc5f7e81\", \"-714ebbh8388188\",\r\n            \"-3cahb17836b3hd\", \"-1j8659jf5hbg3j\", \"-112bbb2jege5c5\", \"-dcjfmk2kjb4cc\", \"-836bm4klbgl61\",\r\n            \"-4ofia1416ee73\", \"-32ommgjef1l2h\", \"-1qc52eal5m8ba\", \"-17n53r05a4r15\", \"-oa88m2qiqjik\", \"-gn67qoat5r8d\",\r\n            \"-blgd6n5s90al\", \"-87t70q8o5fuh\", \"-5t09hwaqu9qg\", \"-47vssihaoa4x\", \"-32p24fbjye7x\", \"-299r8zck3841\"}}},\r\n    {stress_chunks_negative,\r\n        {{\"skip0\", \"skip1\", \"-111110011101001100010010000100010000111010101111001010000110001\",\r\n            \"-2012222010200021010000112111002001111200\", \"-13303221202100202013111321100301\",\r\n            \"-1101001100304341000003214241\", \"-1522150121302454031001413\", \"-22054250360123016161454\",\r\n            \"-763514220420725712061\", \"-65863607100474061450\", \"-9000876000000054321\", \"-1689813530958833498\",\r\n            \"-408258185a67069269\", \"-106b01597a47ba2948\", \"-41c02922bc776d49b\", \"-1584cd10979dc84b6\",\r\n            \"-7ce9890887579431\", \"-327cf6cbc67023c3\", \"-1604b5f6a0de8129\", \"-b50d3ef02f124a4\", \"-59h9bfif0006fg1\",\r\n            \"-2g5d8ekh05d2dfi\", \"-19i418c38g1chfj\", \"-hjgf7d0k0gla9a\", \"-a6b21ncehfa3f9\", \"-61060fnl003bml\",\r\n            \"-3g88bakondgf8l\", \"-25q3i730ed21di\", \"-1al84glo518iip\", \"-pcli8ig7pjhbo\", \"-gs31q8id2jnkl\",\r\n            \"-bd7kaglgdrbgk\", \"-7pqc9123lf51h\", \"-5d2sd1r5ms7su\", \"-3q833s8kdrun3\", \"-2n7vmqigfueqb\",\r\n            \"-1wdu892toj0a9\"}}},\r\n    {int64_min, {{\"skip0\", \"skip1\", \"-1000000000000000000000000000000000000000000000000000000000000000\",\r\n                    \"-2021110011022210012102010021220101220222\", \"-20000000000000000000000000000000\",\r\n                    \"-1104332401304422434310311213\", \"-1540241003031030222122212\", \"-22341010611245052052301\",\r\n                    \"-1000000000000000000000\", \"-67404283172107811828\", \"-9223372036854775808\", \"-1728002635214590698\",\r\n                    \"-41a792678515120368\", \"-10b269549075433c38\", \"-4340724c6c71dc7a8\", \"-160e2ad3246366808\",\r\n                    \"-8000000000000000\", \"-33d3d8307b214009\", \"-16agh595df825fa8\", \"-ba643dci0ffeehi\",\r\n                    \"-5cbfjia3fh26ja8\", \"-2heiciiie82dh98\", \"-1adaibb21dckfa8\", \"-i6k448cf4192c3\", \"-acd772jnc9l0l8\",\r\n                    \"-64ie1focnn5g78\", \"-3igoecjbmca688\", \"-27c48l5b37oaoq\", \"-1bk39f3ah3dmq8\", \"-q1se8f0m04isc\",\r\n                    \"-hajppbc1fc208\", \"-bm03i95hia438\", \"-8000000000000\", \"-5hg4ck9jd4u38\", \"-3tdtk1v8j6tpq\",\r\n                    \"-2pijmikexrxp8\", \"-1y2p0ij32e8e8\"}}},\r\n};\r\n\r\ntemplate <typename T>\r\n_CONSTEXPR23 bool test_integer_to_chars() {\r\n    for (int base = 2; base <= 36; ++base) {\r\n        test_integer_to_chars(static_cast<T>(0), base, \"0\");\r\n        test_integer_to_chars(static_cast<T>(1), base, \"1\");\r\n\r\n        // tests [3, 71]\r\n        test_integer_to_chars(static_cast<T>(base * 2 - 1), base, output_max_digit[base]);\r\n\r\n        for (const auto& p : output_positive) {\r\n            if (p.first <= static_cast<uint64_t>(numeric_limits<T>::max())) {\r\n                test_integer_to_chars(static_cast<T>(p.first), base, p.second[static_cast<size_t>(base)]);\r\n            }\r\n        }\r\n\r\n        if constexpr (is_signed_v<T>) {\r\n            test_integer_to_chars(static_cast<T>(-1), base, \"-1\");\r\n\r\n            for (const auto& p : output_negative) {\r\n                if (p.first >= static_cast<int64_t>(numeric_limits<T>::min())) {\r\n                    test_integer_to_chars(static_cast<T>(p.first), base, p.second[static_cast<size_t>(base)]);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    test_integer_to_chars(static_cast<T>(42), nullopt, \"42\");\r\n\r\n    return true;\r\n}\r\n\r\nenum class TestFromCharsMode { Normal, SignalingNaN };\r\n\r\ntemplate <typename T, typename BaseOrFmt>\r\n_CONSTEXPR23 void test_from_chars(const string_view input, const BaseOrFmt base_or_fmt, const size_t correct_idx,\r\n    const errc correct_ec, const optional<T> opt_correct = nullopt,\r\n    const TestFromCharsMode mode = TestFromCharsMode::Normal) {\r\n\r\n    if constexpr (is_integral_v<T>) {\r\n        assert(mode == TestFromCharsMode::Normal);\r\n    }\r\n\r\n    constexpr T unmodified = 111;\r\n\r\n    T dest = unmodified;\r\n\r\n    const from_chars_result result = from_chars(input.data(), input.data() + input.size(), dest, base_or_fmt);\r\n\r\n    assert(result.ptr == input.data() + correct_idx);\r\n    assert(result.ec == correct_ec);\r\n\r\n    if (correct_ec == errc{} || (is_floating_point_v<T> && correct_ec == errc::result_out_of_range)) {\r\n        if constexpr (is_floating_point_v<T>) {\r\n            if (mode == TestFromCharsMode::Normal) {\r\n                using Uint = conditional_t<is_same_v<T, float>, uint32_t, uint64_t>;\r\n                assert(opt_correct.has_value());\r\n                assert(_Bit_cast<Uint>(dest) == _Bit_cast<Uint>(opt_correct.value()));\r\n            } else {\r\n                assert(mode == TestFromCharsMode::SignalingNaN);\r\n                assert(!opt_correct.has_value());\r\n                assert(isnan(dest));\r\n            }\r\n        } else {\r\n            assert(opt_correct.has_value());\r\n            assert(dest == opt_correct.value());\r\n        }\r\n    } else {\r\n        assert(!opt_correct.has_value());\r\n        assert(dest == unmodified);\r\n    }\r\n}\r\n\r\nconstexpr errc inv_arg = errc::invalid_argument;\r\nconstexpr errc out_ran = errc::result_out_of_range;\r\n\r\ntemplate <typename T>\r\n_CONSTEXPR23 bool test_integer_from_chars() {\r\n    const string hundred_zeroes(100, '0');\r\n    const string hundred_zeroes_and_11       = hundred_zeroes + \"11\"s;\r\n    const string minus_hundred_zeroes        = \"-\"s + hundred_zeroes;\r\n    const string minus_hundred_zeroes_and_11 = \"-\"s + hundred_zeroes_and_11;\r\n\r\n    const string hundred_ones(100, '1');\r\n    const string hundred_ones_and_atatat       = hundred_ones + \"@@@\"s;\r\n    const string minus_hundred_ones            = \"-\"s + hundred_ones;\r\n    const string minus_hundred_ones_and_atatat = \"-\"s + hundred_ones_and_atatat;\r\n\r\n    for (int base = 2; base <= 36; ++base) {\r\n        test_from_chars<T>(\"\", base, 0, inv_arg); // no characters\r\n        test_from_chars<T>(\"@1\", base, 0, inv_arg); // '@' is bogus\r\n        test_from_chars<T>(\".1\", base, 0, inv_arg); // '.' is bogus, for integers\r\n        test_from_chars<T>(\"+1\", base, 0, inv_arg); // '+' is bogus, N4713 23.20.3 [charconv.from.chars]/3\r\n                                                    // \"a minus sign is the only sign that may appear\"\r\n        test_from_chars<T>(\" 1\", base, 0, inv_arg); // ' ' is bogus, no whitespace in subject sequence\r\n\r\n        if constexpr (is_unsigned_v<T>) { // N4713 23.20.3 [charconv.from.chars]/3\r\n            test_from_chars<T>(\"-1\", base, 0, inv_arg); // \"and only if value has a signed type\"\r\n        }\r\n\r\n        // N4713 23.20.3 [charconv.from.chars]/1 \"[ Note: If the pattern allows for an optional sign,\r\n        // but the string has no digit characters following the sign, no characters match the pattern. -end note ]\"\r\n        test_from_chars<T>(\"-\", base, 0, inv_arg); // '-' followed by no characters\r\n        test_from_chars<T>(\"-@1\", base, 0, inv_arg); // '-' followed by bogus '@'\r\n        test_from_chars<T>(\"-.1\", base, 0, inv_arg); // '-' followed by bogus '.'\r\n        test_from_chars<T>(\"-+1\", base, 0, inv_arg); // '-' followed by bogus '+'\r\n        test_from_chars<T>(\"- 1\", base, 0, inv_arg); // '-' followed by bogus ' '\r\n        test_from_chars<T>(\"--1\", base, 0, inv_arg); // '-' can't be repeated\r\n\r\n        vector<char> bogus_digits;\r\n\r\n        if (base < 10) {\r\n            bogus_digits = {static_cast<char>('0' + base), 'A', 'a'};\r\n        } else {\r\n            // '[' and '{' are bogus for base 36\r\n            bogus_digits = {static_cast<char>('A' + (base - 10)), static_cast<char>('a' + (base - 10))};\r\n        }\r\n\r\n        for (const auto& bogus : bogus_digits) {\r\n            test_from_chars<T>(bogus + \"1\"s, base, 0, inv_arg); // bogus digit (for this base)\r\n            test_from_chars<T>(\"-\"s + bogus + \"1\"s, base, 0, inv_arg); // '-' followed by bogus digit\r\n        }\r\n\r\n        // Test leading zeroes.\r\n        test_from_chars<T>(hundred_zeroes, base, 100, errc{}, static_cast<T>(0));\r\n        test_from_chars<T>(hundred_zeroes_and_11, base, 102, errc{}, static_cast<T>(base + 1));\r\n\r\n        // Test negative zero and negative leading zeroes.\r\n        if constexpr (is_signed_v<T>) {\r\n            test_from_chars<T>(\"-0\", base, 2, errc{}, static_cast<T>(0));\r\n            test_from_chars<T>(minus_hundred_zeroes, base, 101, errc{}, static_cast<T>(0));\r\n            test_from_chars<T>(minus_hundred_zeroes_and_11, base, 103, errc{}, static_cast<T>(-base - 1));\r\n        }\r\n\r\n        // N4713 23.20.3 [charconv.from.chars]/1 \"The member ptr of the return value points to the\r\n        // first character not matching the pattern, or has the value last if all characters match.\"\r\n        test_from_chars<T>(\"11\", base, 2, errc{}, static_cast<T>(base + 1));\r\n        test_from_chars<T>(\"11@@@\", base, 2, errc{}, static_cast<T>(base + 1));\r\n\r\n        // When overflowing, we need to keep consuming valid digits, in order to return ptr correctly.\r\n        test_from_chars<T>(hundred_ones, base, 100, out_ran);\r\n        test_from_chars<T>(hundred_ones_and_atatat, base, 100, out_ran);\r\n\r\n        if constexpr (is_signed_v<T>) {\r\n            test_from_chars<T>(minus_hundred_ones, base, 101, out_ran);\r\n            test_from_chars<T>(minus_hundred_ones_and_atatat, base, 101, out_ran);\r\n        }\r\n    }\r\n\r\n    // N4713 23.20.3 [charconv.from.chars]/3 \"The pattern is the expected form of the subject sequence\r\n    // in the \"C\" locale for the given nonzero base, as described for strtol\"\r\n    // C11 7.22.1.4/3 \"The letters from a (or A) through z (or Z) are ascribed the values 10 through 35\"\r\n    for (int i = 0; i < 26; ++i) {\r\n        test_from_chars<T>(string(1, static_cast<char>('A' + i)), 36, 1, errc{}, static_cast<T>(10 + i));\r\n        test_from_chars<T>(string(1, static_cast<char>('a' + i)), 36, 1, errc{}, static_cast<T>(10 + i));\r\n    }\r\n\r\n    // N4713 23.20.3 [charconv.from.chars]/3 \"no \"0x\" or \"0X\" prefix shall appear if the value of base is 16\"\r\n    test_from_chars<T>(\"0x1729\", 16, 1, errc{}, static_cast<T>(0)); // reads '0', stops at 'x'\r\n    test_from_chars<T>(\"0X1729\", 16, 1, errc{}, static_cast<T>(0)); // reads '0', stops at 'X'\r\n\r\n    if constexpr (is_signed_v<T>) {\r\n        test_from_chars<T>(\"-0x1729\", 16, 2, errc{}, static_cast<T>(0)); // reads \"-0\", stops at 'x'\r\n        test_from_chars<T>(\"-0X1729\", 16, 2, errc{}, static_cast<T>(0)); // reads \"-0\", stops at 'X'\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <typename T>\r\nvoid test_integer() {\r\n    test_integer_to_chars<T>();\r\n    test_integer_from_chars<T>();\r\n\r\n#if _HAS_CXX23\r\n    static_assert(test_integer_to_chars<T>());\r\n    static_assert(test_integer_from_chars<T>());\r\n#endif // _HAS_CXX23\r\n}\r\n\r\n_CONSTEXPR23 bool test_integer_overflow_scenarios() {\r\n    // Test overflow scenarios.\r\n    test_from_chars<unsigned int>(\"4294967289\", 10, 10, errc{}, 4294967289U); // not risky\r\n    test_from_chars<unsigned int>(\"4294967294\", 10, 10, errc{}, 4294967294U); // risky with good digit\r\n    test_from_chars<unsigned int>(\"4294967295\", 10, 10, errc{}, 4294967295U); // risky with max digit\r\n    test_from_chars<unsigned int>(\"4294967296\", 10, 10, out_ran); // risky with bad digit\r\n    test_from_chars<unsigned int>(\"4294967300\", 10, 10, out_ran); // beyond risky\r\n\r\n    test_from_chars<int>(\"2147483639\", 10, 10, errc{}, 2147483639); // not risky\r\n    test_from_chars<int>(\"2147483646\", 10, 10, errc{}, 2147483646); // risky with good digit\r\n    test_from_chars<int>(\"2147483647\", 10, 10, errc{}, 2147483647); // risky with max digit\r\n    test_from_chars<int>(\"2147483648\", 10, 10, out_ran); // risky with bad digit\r\n    test_from_chars<int>(\"2147483650\", 10, 10, out_ran); // beyond risky\r\n\r\n    test_from_chars<int>(\"-2147483639\", 10, 11, errc{}, -2147483639); // not risky\r\n    test_from_chars<int>(\"-2147483647\", 10, 11, errc{}, -2147483647); // risky with good digit\r\n    test_from_chars<int>(\"-2147483648\", 10, 11, errc{}, -2147483647 - 1); // risky with max digit\r\n    test_from_chars<int>(\"-2147483649\", 10, 11, out_ran); // risky with bad digit\r\n    test_from_chars<int>(\"-2147483650\", 10, 11, out_ran); // beyond risky\r\n\r\n    return true;\r\n}\r\n\r\nvoid all_integer_tests() {\r\n    test_integer<char>();\r\n    test_integer<signed char>();\r\n    test_integer<unsigned char>();\r\n    test_integer<short>();\r\n    test_integer<unsigned short>();\r\n    test_integer<int>();\r\n    test_integer<unsigned int>();\r\n    test_integer<long>();\r\n    test_integer<unsigned long>();\r\n    test_integer<long long>();\r\n    test_integer<unsigned long long>();\r\n\r\n    test_integer_overflow_scenarios();\r\n#if _HAS_CXX23\r\n    static_assert(test_integer_overflow_scenarios());\r\n#endif // _HAS_CXX23\r\n}\r\n\r\nvoid assert_message_bits(const bool b, const char* const msg, const uint32_t bits) {\r\n    if (!b) {\r\n        fprintf(stderr, \"%s failed for 0x%08X\\n\", msg, bits);\r\n        fprintf(stderr, \"This is a randomized test.\\n\");\r\n        fprintf(stderr, \"DO NOT IGNORE/RERUN THIS FAILURE.\\n\");\r\n        fprintf(stderr, \"You must report it to the STL maintainers.\\n\");\r\n        abort();\r\n    }\r\n}\r\n\r\nvoid assert_message_bits(const bool b, const char* const msg, const uint64_t bits) {\r\n    if (!b) {\r\n        // libc++ uses long for 64-bit values.\r\n        fprintf(stderr, \"%s failed for 0x%016llX\\n\", msg, static_cast<unsigned long long>(bits));\r\n        fprintf(stderr, \"This is a randomized test.\\n\");\r\n        fprintf(stderr, \"DO NOT IGNORE/RERUN THIS FAILURE.\\n\");\r\n        fprintf(stderr, \"You must report it to the STL maintainers.\\n\");\r\n        abort();\r\n    }\r\n}\r\n\r\nconstexpr uint32_t FractionBits = 10; // Tunable for test coverage vs. performance.\r\nstatic_assert(FractionBits >= 1, \"Must test at least 1 fraction bit.\");\r\nstatic_assert(FractionBits <= 23, \"There are only 23 fraction bits in a float.\");\r\n\r\nconstexpr uint32_t Fractions = 1U << FractionBits;\r\nconstexpr uint32_t Mask32    = ~((1U << FractionBits) - 1U);\r\nconstexpr uint64_t Mask64    = ~((1ULL << FractionBits) - 1ULL);\r\n\r\nconstexpr uint32_t PrefixesToTest = 100; // Tunable for test coverage vs. performance.\r\nstatic_assert(PrefixesToTest >= 1, \"Must test at least 1 prefix.\");\r\n\r\nconstexpr uint32_t PrefixLimit = 2 // sign bit\r\n                               * 255 // non-INF/NAN exponents for float\r\n                               * (1U << (23 - FractionBits)); // fraction bits in prefix\r\nstatic_assert(PrefixesToTest <= PrefixLimit, \"Too many prefixes.\");\r\n\r\ntemplate <bool IsDouble>\r\nvoid test_floating_prefix(const conditional_t<IsDouble, uint64_t, uint32_t> prefix) {\r\n\r\n    using UIntType     = conditional_t<IsDouble, uint64_t, uint32_t>;\r\n    using FloatingType = conditional_t<IsDouble, double, float>;\r\n\r\n    // \"-1.2345678901234567e-100\" or \"-1.23456789e-10\"\r\n    constexpr size_t buffer_size = IsDouble ? 24 : 15;\r\n    char buffer[buffer_size];\r\n    FloatingType val;\r\n\r\n    // Exact sizes are difficult to prove for fixed notation.\r\n    // This must be at least (IsDouble ? 327 : 48), and I suspect that that's exact.\r\n    // Here's a loose upper bound:\r\n    // 1 character for a negative sign\r\n    // + 325 (for double; 46 for float) characters in the \"0.000~~~000\" prefix of the min subnormal\r\n    // + 17 (for double; 9 for float) characters for round-trip digits\r\n    constexpr size_t fixed_buffer_size = IsDouble ? 1 + 325 + 17 : 1 + 46 + 9;\r\n    char fixed_buffer[fixed_buffer_size];\r\n\r\n    // worst case: negative sign + max normal + null terminator\r\n    constexpr size_t stdio_buffer_size = 1 + (IsDouble ? 309 : 39) + 1;\r\n    char stdio_buffer[stdio_buffer_size];\r\n\r\n    for (uint32_t frac = 0; frac < Fractions; ++frac) {\r\n        const UIntType bits      = prefix + frac;\r\n        const FloatingType input = _Bit_cast<FloatingType>(bits);\r\n\r\n        {\r\n            const auto to_result = to_chars(buffer, end(buffer), input, chars_format::scientific);\r\n            assert_message_bits(to_result.ec == errc{}, \"to_result.ec\", bits);\r\n            const char* const last = to_result.ptr;\r\n\r\n            const auto from_result = from_chars(buffer, last, val);\r\n\r\n            assert_message_bits(from_result.ptr == last, \"from_result.ptr\", bits);\r\n            assert_message_bits(from_result.ec == errc{}, \"from_result.ec\", bits);\r\n            assert_message_bits(_Bit_cast<UIntType>(val) == bits, \"round-trip\", bits);\r\n        }\r\n\r\n        {\r\n            // Also verify that to_chars() and sprintf_s() emit the same output for integers in fixed notation.\r\n            const auto fixed_result = to_chars(fixed_buffer, end(fixed_buffer), input, chars_format::fixed);\r\n            assert_message_bits(fixed_result.ec == errc{}, \"fixed_result.ec\", bits);\r\n            const string_view fixed_sv(fixed_buffer, static_cast<size_t>(fixed_result.ptr - fixed_buffer));\r\n\r\n            if (find(fixed_sv.begin(), fixed_sv.end(), '.') == fixed_sv.end()) {\r\n                const int stdio_ret = sprintf_s(stdio_buffer, size(stdio_buffer), \"%.0f\", input);\r\n                assert_message_bits(stdio_ret != -1, \"stdio_ret\", bits);\r\n                const string_view stdio_sv(stdio_buffer);\r\n                assert_message_bits(fixed_sv == stdio_sv, \"fixed_sv\", bits);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <bool IsDouble>\r\nvoid test_floating_hex_prefix(const conditional_t<IsDouble, uint64_t, uint32_t> prefix) {\r\n\r\n    using UIntType     = conditional_t<IsDouble, uint64_t, uint32_t>;\r\n    using FloatingType = conditional_t<IsDouble, double, float>;\r\n\r\n    // The precision is the number of hexits after the decimal point.\r\n    // These hexits correspond to the explicitly stored fraction bits.\r\n    // double explicitly stores 52 fraction bits. 52 / 4 == 13, so we need 13 hexits.\r\n    // float explicitly stores 23 fraction bits. 23 / 4 == 5.75, so we need 6 hexits.\r\n\r\n    // \"-1.fffffffffffffp+1023\" or \"-1.fffffep+127\"\r\n    constexpr size_t buffer_size = IsDouble ? 22 : 14;\r\n    char buffer[buffer_size];\r\n    FloatingType val;\r\n\r\n    for (uint32_t frac = 0; frac < Fractions; ++frac) {\r\n        const UIntType bits      = prefix + frac;\r\n        const FloatingType input = _Bit_cast<FloatingType>(bits);\r\n\r\n        const auto to_result = to_chars(buffer, end(buffer), input, chars_format::hex);\r\n        assert_message_bits(to_result.ec == errc{}, \"(hex) to_result.ec\", bits);\r\n        const char* const last = to_result.ptr;\r\n\r\n        const auto from_result = from_chars(buffer, last, val, chars_format::hex);\r\n\r\n        assert_message_bits(from_result.ptr == last, \"(hex) from_result.ptr\", bits);\r\n        assert_message_bits(from_result.ec == errc{}, \"(hex) from_result.ec\", bits);\r\n        assert_message_bits(_Bit_cast<UIntType>(val) == bits, \"(hex) round-trip\", bits);\r\n    }\r\n}\r\n\r\ntemplate <bool IsDouble>\r\nvoid test_floating_precision_prefix(const conditional_t<IsDouble, uint64_t, uint32_t> prefix) {\r\n\r\n    using UIntType     = conditional_t<IsDouble, uint64_t, uint32_t>;\r\n    using FloatingType = conditional_t<IsDouble, double, float>;\r\n\r\n    // Precision for min subnormal in fixed notation. (More than enough for scientific notation.)\r\n    constexpr int precision = IsDouble ? 1074 : 149;\r\n\r\n    // Number of digits for max normal in fixed notation.\r\n    constexpr int max_integer_length = IsDouble ? 309 : 39;\r\n\r\n    // Size for fixed notation. (More than enough for scientific notation.)\r\n    constexpr size_t charconv_buffer_size = 1 // negative sign\r\n                                          + max_integer_length // integer digits\r\n                                          + 1 // decimal point\r\n                                          + precision; // fractional digits\r\n    char charconv_buffer[charconv_buffer_size];\r\n\r\n    constexpr size_t stdio_buffer_size = charconv_buffer_size + 1; // null terminator\r\n    char stdio_buffer[stdio_buffer_size];\r\n\r\n    // 1 character for a negative sign\r\n    // + worst cases: 0x1.fffffffffffffp-1022 and 0x1.fffffep-126f\r\n    constexpr size_t general_buffer_size = 1 + (IsDouble ? 773 : 117);\r\n    char general_buffer[general_buffer_size];\r\n    char general_stdio_buffer[general_buffer_size + 1]; // + null terminator\r\n\r\n    for (uint32_t frac = 0; frac < Fractions; ++frac) {\r\n        const UIntType bits      = prefix + frac;\r\n        const FloatingType input = _Bit_cast<FloatingType>(bits);\r\n\r\n        auto result = to_chars(charconv_buffer, end(charconv_buffer), input, chars_format::fixed, precision);\r\n        assert_message_bits(result.ec == errc{}, \"to_chars fixed precision\", bits);\r\n        string_view charconv_sv(charconv_buffer, static_cast<size_t>(result.ptr - charconv_buffer));\r\n\r\n        int stdio_ret = sprintf_s(stdio_buffer, size(stdio_buffer), \"%.*f\", precision, input);\r\n        assert_message_bits(stdio_ret != -1, \"sprintf_s fixed precision\", bits);\r\n        string_view stdio_sv(stdio_buffer);\r\n\r\n        assert_message_bits(charconv_sv == stdio_sv, \"fixed precision output\", bits);\r\n\r\n\r\n        result = to_chars(charconv_buffer, end(charconv_buffer), input, chars_format::scientific, precision);\r\n        assert_message_bits(result.ec == errc{}, \"to_chars scientific precision\", bits);\r\n        charconv_sv = string_view(charconv_buffer, static_cast<size_t>(result.ptr - charconv_buffer));\r\n\r\n        stdio_ret = sprintf_s(stdio_buffer, size(stdio_buffer), \"%.*e\", precision, input);\r\n        assert_message_bits(stdio_ret != -1, \"sprintf_s scientific precision\", bits);\r\n        stdio_sv = stdio_buffer;\r\n\r\n        assert_message_bits(charconv_sv == stdio_sv, \"scientific precision output\", bits);\r\n\r\n\r\n        result = to_chars(general_buffer, end(general_buffer), input, chars_format::general, 5000);\r\n        assert_message_bits(result.ec == errc{}, \"to_chars general precision\", bits);\r\n        charconv_sv = string_view(general_buffer, static_cast<size_t>(result.ptr - general_buffer));\r\n\r\n        stdio_ret = sprintf_s(general_stdio_buffer, size(general_stdio_buffer), \"%.5000g\", input);\r\n        assert_message_bits(stdio_ret != -1, \"sprintf_s general precision\", bits);\r\n        stdio_sv = general_stdio_buffer;\r\n\r\n        assert_message_bits(charconv_sv == stdio_sv, \"general precision output\", bits);\r\n    }\r\n}\r\n\r\nvoid test_floating_prefixes(mt19937_64& mt64) {\r\n    {\r\n        set<uint64_t> prefixes64;\r\n\r\n        while (prefixes64.size() < PrefixesToTest) {\r\n            const uint64_t val = mt64();\r\n\r\n            if ((val & 0x7FF0000000000000ULL) != 0x7FF0000000000000ULL) { // skip INF/NAN\r\n                prefixes64.insert(val & Mask64);\r\n            }\r\n        }\r\n\r\n        for (const auto& prefix : prefixes64) {\r\n            test_floating_prefix<true>(prefix);\r\n            test_floating_precision_prefix<true>(prefix);\r\n        }\r\n\r\n        test_floating_hex_prefix<true>(*prefixes64.begin()); // save time by testing fewer hexfloats\r\n    }\r\n\r\n    {\r\n        set<uint32_t> prefixes32;\r\n\r\n        while (prefixes32.size() < PrefixesToTest) {\r\n            const uint32_t val = static_cast<uint32_t>(mt64());\r\n\r\n            if ((val & 0x7F800000U) != 0x7F800000U) { // skip INF/NAN\r\n                prefixes32.insert(val & Mask32);\r\n            }\r\n        }\r\n\r\n        for (const auto& prefix : prefixes32) {\r\n            test_floating_prefix<false>(prefix);\r\n            test_floating_precision_prefix<false>(prefix);\r\n        }\r\n\r\n        test_floating_hex_prefix<false>(*prefixes32.begin()); // save time by testing fewer hexfloats\r\n    }\r\n}\r\n\r\ntemplate <typename T>\r\nvoid test_floating_from_chars(const chars_format fmt) {\r\n    test_from_chars<T>(\"\", fmt, 0, inv_arg); // no characters\r\n    test_from_chars<T>(\"@1\", fmt, 0, inv_arg); // '@' is bogus\r\n    test_from_chars<T>(\"z1\", fmt, 0, inv_arg); // 'z' is bogus\r\n    test_from_chars<T>(\".\", fmt, 0, inv_arg); // '.' without digits is bogus\r\n    test_from_chars<T>(\"+1\", fmt, 0, inv_arg); // '+' is bogus\r\n    test_from_chars<T>(\" 1\", fmt, 0, inv_arg); // ' ' is bogus\r\n    test_from_chars<T>(\"p5\", fmt, 0, inv_arg); // binary-exponent-part without digits is bogus\r\n    test_from_chars<T>(\"in\", fmt, 0, inv_arg); // incomplete inf is bogus\r\n    test_from_chars<T>(\"na\", fmt, 0, inv_arg); // incomplete nan is bogus\r\n\r\n    test_from_chars<T>(\"-\", fmt, 0, inv_arg); // '-' followed by no characters\r\n    test_from_chars<T>(\"-@1\", fmt, 0, inv_arg); // '-' followed by bogus '@'\r\n    test_from_chars<T>(\"-z1\", fmt, 0, inv_arg); // '-' followed by bogus 'z'\r\n    test_from_chars<T>(\"-.\", fmt, 0, inv_arg); // '-' followed by bogus '.'\r\n    test_from_chars<T>(\"-+1\", fmt, 0, inv_arg); // '-' followed by bogus '+'\r\n    test_from_chars<T>(\"- 1\", fmt, 0, inv_arg); // '-' followed by bogus ' '\r\n    test_from_chars<T>(\"-p5\", fmt, 0, inv_arg); // '-' followed by bogus binary-exponent-part\r\n    test_from_chars<T>(\"-in\", fmt, 0, inv_arg); // '-' followed by bogus incomplete inf\r\n    test_from_chars<T>(\"-na\", fmt, 0, inv_arg); // '-' followed by bogus incomplete nan\r\n    test_from_chars<T>(\"--1\", fmt, 0, inv_arg); // '-' can't be repeated\r\n\r\n    if (fmt != chars_format::hex) { // \"e5\" are valid hexits\r\n        test_from_chars<T>(\"e5\", fmt, 0, inv_arg); // exponent-part without digits is bogus\r\n        test_from_chars<T>(\"-e5\", fmt, 0, inv_arg); // '-' followed by bogus exponent-part\r\n    }\r\n\r\n    constexpr T inf  = numeric_limits<T>::infinity();\r\n    constexpr T qnan = numeric_limits<T>::quiet_NaN();\r\n\r\n    test_from_chars<T>(\"InF\", fmt, 3, errc{}, inf);\r\n    test_from_chars<T>(\"infinite\", fmt, 3, errc{}, inf);\r\n    test_from_chars<T>(\"iNfInItY\", fmt, 8, errc{}, inf);\r\n    test_from_chars<T>(\"InfinityMeow\", fmt, 8, errc{}, inf);\r\n\r\n    test_from_chars<T>(\"-InF\", fmt, 4, errc{}, -inf);\r\n    test_from_chars<T>(\"-infinite\", fmt, 4, errc{}, -inf);\r\n    test_from_chars<T>(\"-iNfInItY\", fmt, 9, errc{}, -inf);\r\n    test_from_chars<T>(\"-InfinityMeow\", fmt, 9, errc{}, -inf);\r\n\r\n    test_from_chars<T>(\"NaN\", fmt, 3, errc{}, qnan);\r\n    test_from_chars<T>(\"nanotech\", fmt, 3, errc{}, qnan);\r\n    test_from_chars<T>(\"nan(\", fmt, 3, errc{}, qnan);\r\n    test_from_chars<T>(\"nan(@)\", fmt, 3, errc{}, qnan);\r\n    test_from_chars<T>(\"nan(()\", fmt, 3, errc{}, qnan);\r\n    test_from_chars<T>(\"nan(abc\", fmt, 3, errc{}, qnan);\r\n    test_from_chars<T>(\"nan()\", fmt, 5, errc{}, qnan);\r\n    test_from_chars<T>(\"nan(abc)def\", fmt, 8, errc{}, qnan);\r\n    test_from_chars<T>(\"nan(_09AZaz)\", fmt, 12, errc{}, qnan);\r\n    test_from_chars<T>(\"nan(int)\", fmt, 8, errc{}, qnan);\r\n    test_from_chars<T>(\"nan(snap)\", fmt, 9, errc{}, qnan);\r\n\r\n    test_from_chars<T>(\"-NaN\", fmt, 4, errc{}, -qnan);\r\n    test_from_chars<T>(\"-nanotech\", fmt, 4, errc{}, -qnan);\r\n    test_from_chars<T>(\"-nan(\", fmt, 4, errc{}, -qnan);\r\n    test_from_chars<T>(\"-nan(@)\", fmt, 4, errc{}, -qnan);\r\n    test_from_chars<T>(\"-nan(()\", fmt, 4, errc{}, -qnan);\r\n    test_from_chars<T>(\"-nan(abc\", fmt, 4, errc{}, -qnan);\r\n    test_from_chars<T>(\"-nan()\", fmt, 6, errc{}, -qnan);\r\n    test_from_chars<T>(\"-nan(abc)def\", fmt, 9, errc{}, -qnan);\r\n    test_from_chars<T>(\"-nan(_09AZaz)\", fmt, 13, errc{}, -qnan);\r\n    test_from_chars<T>(\"-nan(int)\", fmt, 9, errc{}, -qnan);\r\n    test_from_chars<T>(\"-nan(snap)\", fmt, 10, errc{}, -qnan);\r\n\r\n    // The UCRT considers indeterminate NaN to be negative quiet NaN with no payload bits set.\r\n    // It parses \"nan(ind)\" and \"-nan(ind)\" identically.\r\n    test_from_chars<T>(\"nan(InD)\", fmt, 8, errc{}, -qnan);\r\n    test_from_chars<T>(\"-nan(InD)\", fmt, 9, errc{}, -qnan);\r\n\r\n    test_from_chars<T>(\"nan(SnAn)\", fmt, 9, errc{}, nullopt, TestFromCharsMode::SignalingNaN);\r\n    test_from_chars<T>(\"-nan(SnAn)\", fmt, 10, errc{}, nullopt, TestFromCharsMode::SignalingNaN);\r\n\r\n    switch (fmt) {\r\n    case chars_format::general:\r\n        test_from_chars<T>(\"1729\", fmt, 4, errc{}, T{1729});\r\n        test_from_chars<T>(\"1729e3\", fmt, 6, errc{}, T{1729000});\r\n        test_from_chars<T>(\"10\", fmt, 2, errc{}, T{10});\r\n        test_from_chars<T>(\"11.\", fmt, 3, errc{}, T{11});\r\n        test_from_chars<T>(\"12.13\", fmt, 5, errc{}, static_cast<T>(12.13)); // avoid truncation warning\r\n        test_from_chars<T>(\".14\", fmt, 3, errc{}, static_cast<T>(.14)); // avoid truncation warning\r\n        test_from_chars<T>(\"20e5\", fmt, 4, errc{}, T{2000000});\r\n        test_from_chars<T>(\"21.e5\", fmt, 5, errc{}, T{2100000});\r\n        test_from_chars<T>(\"22.23e5\", fmt, 7, errc{}, T{2223000});\r\n        test_from_chars<T>(\".24e5\", fmt, 5, errc{}, T{24000});\r\n        test_from_chars<T>(\"33e+5\", fmt, 5, errc{}, T{3300000});\r\n        test_from_chars<T>(\"33e-5\", fmt, 5, errc{}, static_cast<T>(.00033)); // avoid truncation warning\r\n        test_from_chars<T>(\"4E7\", fmt, 3, errc{}, T{40000000});\r\n        test_from_chars<T>(\"-00123abc\", fmt, 6, errc{}, T{-123});\r\n        test_from_chars<T>(\".0045000\", fmt, 8, errc{}, static_cast<T>(.0045)); // avoid truncation warning\r\n        test_from_chars<T>(\"000\", fmt, 3, errc{}, T{0});\r\n        test_from_chars<T>(\"0e9999\", fmt, 6, errc{}, T{0});\r\n        test_from_chars<T>(\"0e-9999\", fmt, 7, errc{}, T{0});\r\n        test_from_chars<T>(\"-000\", fmt, 4, errc{}, T{-0.0});\r\n        test_from_chars<T>(\"-0e9999\", fmt, 7, errc{}, T{-0.0});\r\n        test_from_chars<T>(\"-0e-9999\", fmt, 8, errc{}, T{-0.0});\r\n        test_from_chars<T>(\"1\" + string(10000, '0') + \"e-10000\", fmt, 10008, errc{}, T{1.0});\r\n        test_from_chars<T>(\"0.\" + string(9999, '0') + \"1e10000\", fmt, 10008, errc{}, T{1.0});\r\n        test_from_chars<T>(\"1\" + string(1280000, '0') + \"e-1280000\", fmt, 1280010, errc{}, T{1.0});\r\n        test_from_chars<T>(\"0.\" + string(1279999, '0') + \"1e1280000\", fmt, 1280010, errc{}, T{1.0});\r\n        test_from_chars<T>(\"1e9999\", fmt, 6, errc::result_out_of_range, inf);\r\n        test_from_chars<T>(\"-1e9999\", fmt, 7, errc::result_out_of_range, -inf);\r\n        test_from_chars<T>(\"1e-9999\", fmt, 7, errc::result_out_of_range, T{0});\r\n        test_from_chars<T>(\"-1e-9999\", fmt, 8, errc::result_out_of_range, T{-0.0});\r\n        test_from_chars<T>(\"1\" + string(6000, '0'), fmt, 6001, errc::result_out_of_range, inf);\r\n        test_from_chars<T>(\"-1\" + string(6000, '0'), fmt, 6002, errc::result_out_of_range, -inf);\r\n        test_from_chars<T>(\".\" + string(6000, '0') + \"1\", fmt, 6002, errc::result_out_of_range, T{0});\r\n        test_from_chars<T>(\"-.\" + string(6000, '0') + \"1\", fmt, 6003, errc::result_out_of_range, T{-0.0});\r\n        test_from_chars<T>(\"1\" + string(500, '0'), fmt, 501, errc::result_out_of_range, inf);\r\n        test_from_chars<T>(\"-1\" + string(500, '0'), fmt, 502, errc::result_out_of_range, -inf);\r\n        test_from_chars<T>(\".\" + string(500, '0') + \"1\", fmt, 502, errc::result_out_of_range, T{0});\r\n        test_from_chars<T>(\"-.\" + string(500, '0') + \"1\", fmt, 503, errc::result_out_of_range, T{-0.0});\r\n        break;\r\n    case chars_format::scientific:\r\n        test_from_chars<T>(\"1729\", fmt, 0, inv_arg);\r\n        test_from_chars<T>(\"1729e3\", fmt, 6, errc{}, T{1729000});\r\n        break;\r\n    case chars_format::fixed:\r\n        test_from_chars<T>(\"1729\", fmt, 4, errc{}, T{1729});\r\n        test_from_chars<T>(\"1729e3\", fmt, 4, errc{}, T{1729});\r\n        break;\r\n    case chars_format::hex:\r\n        test_from_chars<T>(\"0x123\", fmt, 1, errc{}, T{0});\r\n        test_from_chars<T>(\"a0\", fmt, 2, errc{}, T{160});\r\n        test_from_chars<T>(\"a1.\", fmt, 3, errc{}, T{161});\r\n        test_from_chars<T>(\"a2.a3\", fmt, 5, errc{}, T{162.63671875});\r\n        test_from_chars<T>(\".a4\", fmt, 3, errc{}, T{0.640625});\r\n        test_from_chars<T>(\"a0p5\", fmt, 4, errc{}, T{5120});\r\n        test_from_chars<T>(\"a1.p5\", fmt, 5, errc{}, T{5152});\r\n        test_from_chars<T>(\"a2.a3p5\", fmt, 7, errc{}, T{5204.375});\r\n        test_from_chars<T>(\".a4p5\", fmt, 5, errc{}, T{20.5});\r\n        test_from_chars<T>(\"a0p+5\", fmt, 5, errc{}, T{5120});\r\n        test_from_chars<T>(\"a0p-5\", fmt, 5, errc{}, T{5});\r\n        test_from_chars<T>(\"ABCDEFP3\", fmt, 8, errc{}, T{90075000});\r\n        test_from_chars<T>(\"-00cdrom\", fmt, 5, errc{}, T{-205});\r\n        test_from_chars<T>(\".00ef000\", fmt, 8, errc{}, T{0.0036468505859375});\r\n        test_from_chars<T>(\"000\", fmt, 3, errc{}, T{0});\r\n        test_from_chars<T>(\"0p9999\", fmt, 6, errc{}, T{0});\r\n        test_from_chars<T>(\"0p-9999\", fmt, 7, errc{}, T{0});\r\n        test_from_chars<T>(\"-000\", fmt, 4, errc{}, T{-0.0});\r\n        test_from_chars<T>(\"-0p9999\", fmt, 7, errc{}, T{-0.0});\r\n        test_from_chars<T>(\"-0p-9999\", fmt, 8, errc{}, T{-0.0});\r\n        test_from_chars<T>(\"1\" + string(2500, '0') + \"p-10000\", fmt, 2508, errc{}, T{1.0});\r\n        test_from_chars<T>(\"0.\" + string(2499, '0') + \"1p10000\", fmt, 2508, errc{}, T{1.0});\r\n        test_from_chars<T>(\"1\" + string(320000, '0') + \"p-1280000\", fmt, 320010, errc{}, T{1.0});\r\n        test_from_chars<T>(\"0.\" + string(319999, '0') + \"1p1280000\", fmt, 320010, errc{}, T{1.0});\r\n        test_from_chars<T>(\"1p9999\", fmt, 6, errc::result_out_of_range, inf);\r\n        test_from_chars<T>(\"-1p9999\", fmt, 7, errc::result_out_of_range, -inf);\r\n        test_from_chars<T>(\"1p-9999\", fmt, 7, errc::result_out_of_range, T{0});\r\n        test_from_chars<T>(\"-1p-9999\", fmt, 8, errc::result_out_of_range, T{-0.0});\r\n        test_from_chars<T>(\"1\" + string(2000, '0'), fmt, 2001, errc::result_out_of_range, inf);\r\n        test_from_chars<T>(\"-1\" + string(2000, '0'), fmt, 2002, errc::result_out_of_range, -inf);\r\n        test_from_chars<T>(\".\" + string(2000, '0') + \"1\", fmt, 2002, errc::result_out_of_range, T{0});\r\n        test_from_chars<T>(\"-.\" + string(2000, '0') + \"1\", fmt, 2003, errc::result_out_of_range, T{-0.0});\r\n        test_from_chars<T>(\"1\" + string(300, '0'), fmt, 301, errc::result_out_of_range, inf);\r\n        test_from_chars<T>(\"-1\" + string(300, '0'), fmt, 302, errc::result_out_of_range, -inf);\r\n        test_from_chars<T>(\".\" + string(300, '0') + \"1\", fmt, 302, errc::result_out_of_range, T{0});\r\n        test_from_chars<T>(\"-.\" + string(300, '0') + \"1\", fmt, 303, errc::result_out_of_range, T{-0.0});\r\n        break;\r\n    }\r\n}\r\n\r\ntemplate <typename T>\r\nvoid test_floating_to_chars(\r\n    const T value, const optional<chars_format> opt_fmt, const optional<int> opt_precision, const string_view correct) {\r\n\r\n    test_common_to_chars(value, opt_fmt, opt_precision, correct);\r\n}\r\n\r\nvoid all_floating_tests(mt19937_64& mt64) {\r\n    test_floating_prefixes(mt64);\r\n\r\n    for (const auto& fmt : {chars_format::general, chars_format::scientific, chars_format::fixed, chars_format::hex}) {\r\n        test_floating_from_chars<float>(fmt);\r\n        test_floating_from_chars<double>(fmt);\r\n    }\r\n\r\n    // Test rounding.\r\n\r\n    // See float_from_chars_test_cases.hpp in this directory.\r\n    for (const auto& t : float_from_chars_test_cases) {\r\n        test_from_chars<float>(t.input, t.fmt, t.correct_idx, t.correct_ec, t.correct_value);\r\n    }\r\n\r\n    // See double_from_chars_test_cases.hpp in this directory.\r\n    for (const auto& t : double_from_chars_test_cases) {\r\n        test_from_chars<double>(t.input, t.fmt, t.correct_idx, t.correct_ec, t.correct_value);\r\n    }\r\n\r\n    {\r\n        // See LWG-2403. This number (exactly 0x1.fffffd00000004 in infinite precision) behaves differently\r\n        // when parsed as double and converted to float, versus being parsed as float directly.\r\n        const char* const lwg_2403          = \"1.999999821186065729339276231257827021181583404541015625\";\r\n        constexpr float correct_float       = 0x1.fffffep0f;\r\n        constexpr double correct_double     = 0x1.fffffdp0;\r\n        constexpr float twice_rounded_float = 0x1.fffffcp0f;\r\n\r\n        test_from_chars<float>(lwg_2403, chars_format::general, 56, errc{}, correct_float);\r\n        test_from_chars<double>(lwg_2403, chars_format::general, 56, errc{}, correct_double);\r\n        static_assert(static_cast<float>(correct_double) == twice_rounded_float);\r\n    }\r\n\r\n    // See floating_point_test_cases.hpp.\r\n    for (const auto& p : floating_point_test_cases_float) {\r\n        test_from_chars<float>(p.first, chars_format::general, strlen(p.first), errc{}, _Bit_cast<float>(p.second));\r\n    }\r\n\r\n    for (const auto& p : floating_point_test_cases_double) {\r\n        test_from_chars<double>(p.first, chars_format::general, strlen(p.first), errc{}, _Bit_cast<double>(p.second));\r\n    }\r\n\r\n    // See float_to_chars_test_cases.hpp in this directory.\r\n    for (const auto& t : float_to_chars_test_cases) {\r\n        if (t.fmt == chars_format{}) {\r\n            test_floating_to_chars(t.value, nullopt, nullopt, t.correct);\r\n        } else {\r\n            test_floating_to_chars(t.value, t.fmt, nullopt, t.correct);\r\n        }\r\n    }\r\n\r\n    // See double_to_chars_test_cases.hpp in this directory.\r\n    for (const auto& t : double_to_chars_test_cases) {\r\n        if (t.fmt == chars_format{}) {\r\n            test_floating_to_chars(t.value, nullopt, nullopt, t.correct);\r\n        } else {\r\n            test_floating_to_chars(t.value, t.fmt, nullopt, t.correct);\r\n        }\r\n    }\r\n\r\n    // See corresponding headers in this directory.\r\n    for (const auto& t : float_hex_precision_to_chars_test_cases) {\r\n        test_floating_to_chars(t.value, t.fmt, t.precision, t.correct);\r\n    }\r\n    for (const auto& t : float_fixed_precision_to_chars_test_cases) {\r\n        test_floating_to_chars(t.value, t.fmt, t.precision, t.correct);\r\n    }\r\n    for (const auto& t : float_scientific_precision_to_chars_test_cases) {\r\n        test_floating_to_chars(t.value, t.fmt, t.precision, t.correct);\r\n    }\r\n    for (const auto& t : float_general_precision_to_chars_test_cases) {\r\n        test_floating_to_chars(t.value, t.fmt, t.precision, t.correct);\r\n    }\r\n    for (const auto& t : double_hex_precision_to_chars_test_cases) {\r\n        test_floating_to_chars(t.value, t.fmt, t.precision, t.correct);\r\n    }\r\n    for (const auto& t : double_fixed_precision_to_chars_test_cases_1) {\r\n        test_floating_to_chars(t.value, t.fmt, t.precision, t.correct);\r\n    }\r\n    for (const auto& t : double_fixed_precision_to_chars_test_cases_2) {\r\n        test_floating_to_chars(t.value, t.fmt, t.precision, t.correct);\r\n    }\r\n    for (const auto& t : double_fixed_precision_to_chars_test_cases_3) {\r\n        test_floating_to_chars(t.value, t.fmt, t.precision, t.correct);\r\n    }\r\n    for (const auto& t : double_fixed_precision_to_chars_test_cases_4) {\r\n        test_floating_to_chars(t.value, t.fmt, t.precision, t.correct);\r\n    }\r\n    for (const auto& t : double_scientific_precision_to_chars_test_cases_1) {\r\n        test_floating_to_chars(t.value, t.fmt, t.precision, t.correct);\r\n    }\r\n    for (const auto& t : double_scientific_precision_to_chars_test_cases_2) {\r\n        test_floating_to_chars(t.value, t.fmt, t.precision, t.correct);\r\n    }\r\n    for (const auto& t : double_scientific_precision_to_chars_test_cases_3) {\r\n        test_floating_to_chars(t.value, t.fmt, t.precision, t.correct);\r\n    }\r\n    for (const auto& t : double_scientific_precision_to_chars_test_cases_4) {\r\n        test_floating_to_chars(t.value, t.fmt, t.precision, t.correct);\r\n    }\r\n    for (const auto& t : double_general_precision_to_chars_test_cases) {\r\n        test_floating_to_chars(t.value, t.fmt, t.precision, t.correct);\r\n    }\r\n}\r\n\r\nvoid test_right_shift_64_bits_with_rounding() {\r\n    // Directly test _Right_shift_with_rounding for the case of _Shift == 64 && _Value >= 2^63.\r\n    // We were unable to actually exercise this codepath with the public interface of from_chars,\r\n    // but were equally unable to prove that it can never ever be executed.\r\n    assert(_Right_shift_with_rounding(0x0000'0000'0000'0000ULL, 64, true) == 0);\r\n    assert(_Right_shift_with_rounding(0x0000'0000'0000'0000ULL, 64, false) == 0);\r\n    assert(_Right_shift_with_rounding(0x0000'0000'0000'0001ULL, 64, true) == 0);\r\n    assert(_Right_shift_with_rounding(0x0000'0000'0000'0001ULL, 64, false) == 0);\r\n    assert(_Right_shift_with_rounding(0x7fff'ffff'ffff'ffffULL, 64, true) == 0);\r\n    assert(_Right_shift_with_rounding(0x7fff'ffff'ffff'ffffULL, 64, false) == 0);\r\n    assert(_Right_shift_with_rounding(0x8000'0000'0000'0000ULL, 64, true) == 0);\r\n    assert(_Right_shift_with_rounding(0x8000'0000'0000'0000ULL, 64, false) == 1);\r\n    assert(_Right_shift_with_rounding(0x8000'0000'0000'0001ULL, 64, true) == 1);\r\n    assert(_Right_shift_with_rounding(0x8000'0000'0000'0001ULL, 64, false) == 1);\r\n    assert(_Right_shift_with_rounding(0xffff'ffff'ffff'ffffULL, 64, true) == 1);\r\n    assert(_Right_shift_with_rounding(0xffff'ffff'ffff'ffffULL, 64, false) == 1);\r\n}\r\n\r\nvoid wchar_tests() {\r\n    static_assert(size(__DIGIT_TABLE<char>) == size(__DIGIT_TABLE<wchar_t>));\r\n    auto& fac = use_facet<ctype<wchar_t>>(locale{});\r\n    for (size_t i = 0; i < size(__DIGIT_TABLE<char>); ++i) {\r\n        assert(fac.widen(__DIGIT_TABLE<char>[i]) == __DIGIT_TABLE<wchar_t>[i]);\r\n    }\r\n\r\n    wchar_t buffer[32];\r\n    for (const auto& t : double_to_wide_test_cases) {\r\n        const auto result = __d2s_buffered_n(begin(buffer), end(buffer), t.value, t.fmt);\r\n        assert(result.second == errc{});\r\n        const wstring_view sv(t.correct);\r\n        assert(equal(buffer, result.first, sv.begin(), sv.end()));\r\n    }\r\n\r\n    for (const auto& t : float_to_wide_test_cases) {\r\n        const auto result = __f2s_buffered_n(begin(buffer), end(buffer), t.value, t.fmt);\r\n        assert(result.second == errc{});\r\n        const wstring_view sv(t.correct);\r\n        assert(equal(buffer, result.first, sv.begin(), sv.end()));\r\n    }\r\n\r\n    for (const auto& t : wide_digit_pairs_test_cases) {\r\n        const auto result =\r\n            __d2fixed_buffered_n(begin(buffer), end(buffer), t.value, static_cast<uint32_t>(t.precision));\r\n        assert(result.second == errc{});\r\n        const wstring_view sv(t.correct);\r\n        assert(equal(buffer, result.first, sv.begin(), sv.end()));\r\n    }\r\n}\r\n\r\n// GH-1569 - Test instantiation of wchar_t helpers.\r\ntemplate pair<wchar_t*, errc> std::__to_chars(\r\n    wchar_t* const, wchar_t* const, const __floating_decimal_32, chars_format, const uint32_t, const uint32_t);\r\ntemplate pair<wchar_t*, errc> std::__to_chars(\r\n    wchar_t* const, wchar_t* const, const __floating_decimal_64, chars_format, const double);\r\ntemplate pair<wchar_t*, errc> std::__d2fixed_buffered_n(wchar_t*, wchar_t* const, const double, const uint32_t);\r\n\r\nint main(int argc, char** argv) {\r\n    const auto start = chrono::steady_clock::now();\r\n\r\n    mt19937_64 mt64;\r\n\r\n    initialize_randomness(mt64, argc, argv);\r\n\r\n    all_integer_tests();\r\n\r\n    all_floating_tests(mt64);\r\n\r\n    test_right_shift_64_bits_with_rounding();\r\n\r\n    wchar_tests();\r\n\r\n    const auto finish  = chrono::steady_clock::now();\r\n    const long long ms = chrono::duration_cast<chrono::milliseconds>(finish - start).count();\r\n\r\n    puts(\"PASS\");\r\n    printf(\"Randomized test cases: %u\\n\", PrefixesToTest * Fractions);\r\n    printf(\"Total time: %lld ms\\n\", ms);\r\n\r\n    if (ms < 3'000) {\r\n        puts(\"That was fast. Consider tuning PrefixesToTest and FractionBits to test more cases.\");\r\n    } else if (ms > 30'000) {\r\n        puts(\"That was slow. Consider tuning PrefixesToTest and FractionBits to test fewer cases.\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/test.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef TEST_HPP\r\n#define TEST_HPP\r\n\r\n#include <charconv>\r\n#include <cstddef>\r\n#include <limits>\r\n#include <system_error>\r\nusing namespace std;\r\n\r\ninline constexpr float float_inf         = numeric_limits<float>::infinity();\r\ninline constexpr float float_nan         = numeric_limits<float>::quiet_NaN();\r\ninline constexpr float float_nan_payload = __builtin_nanf(\"1729\");\r\n\r\ninline constexpr double double_inf         = numeric_limits<double>::infinity();\r\ninline constexpr double double_nan         = numeric_limits<double>::quiet_NaN();\r\ninline constexpr double double_nan_payload = __builtin_nan(\"1729\");\r\n\r\nstruct FloatFromCharsTestCase {\r\n    const char* input;\r\n    chars_format fmt;\r\n    size_t correct_idx;\r\n    errc correct_ec;\r\n    float correct_value;\r\n};\r\n\r\nstruct FloatToCharsTestCase {\r\n    float value;\r\n    chars_format fmt;\r\n    const char* correct;\r\n};\r\n\r\nstruct FloatToWideTestCase {\r\n    float value;\r\n    chars_format fmt;\r\n    const wchar_t* correct;\r\n};\r\n\r\nstruct FloatPrecisionToCharsTestCase {\r\n    float value;\r\n    chars_format fmt;\r\n    int precision;\r\n    const char* correct;\r\n};\r\n\r\nstruct DoubleFromCharsTestCase {\r\n    const char* input;\r\n    chars_format fmt;\r\n    size_t correct_idx;\r\n    errc correct_ec;\r\n    double correct_value;\r\n};\r\n\r\nstruct DoubleToCharsTestCase {\r\n    double value;\r\n    chars_format fmt;\r\n    const char* correct;\r\n};\r\n\r\nstruct DoubleToWideTestCase {\r\n    double value;\r\n    chars_format fmt;\r\n    const wchar_t* correct;\r\n};\r\n\r\nstruct DoublePrecisionToCharsTestCase {\r\n    double value;\r\n    chars_format fmt;\r\n    int precision;\r\n    const char* correct;\r\n};\r\n\r\nstruct DoublePrecisionToWideTestCase {\r\n    double value;\r\n    chars_format fmt;\r\n    int precision;\r\n    const wchar_t* correct;\r\n};\r\n\r\n#endif // TEST_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0067R5_charconv/wchar_test_cases.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef WCHAR_TEST_CASES_HPP\r\n#define WCHAR_TEST_CASES_HPP\r\n\r\n#include <charconv>\r\n\r\n#include \"test.hpp\"\r\nusing namespace std;\r\n\r\n// The wchar_t machinery is currently limited to a subset of the Ryu code. It is known to not handle: negative numbers,\r\n// infinity, NaN, or hex formatting.\r\n\r\ninline constexpr DoublePrecisionToWideTestCase wide_digit_pairs_test_cases[] = {\r\n    {0.0001020304, chars_format::fixed, 10, L\"0.0001020304\"},\r\n    {0.0506070809, chars_format::fixed, 10, L\"0.0506070809\"},\r\n    {0.1011121314, chars_format::fixed, 10, L\"0.1011121314\"},\r\n    {0.1516171819, chars_format::fixed, 10, L\"0.1516171819\"},\r\n    {0.2021222324, chars_format::fixed, 10, L\"0.2021222324\"},\r\n    {0.2526272829, chars_format::fixed, 10, L\"0.2526272829\"},\r\n    {0.3031323334, chars_format::fixed, 10, L\"0.3031323334\"},\r\n    {0.3536373839, chars_format::fixed, 10, L\"0.3536373839\"},\r\n    {0.4041424344, chars_format::fixed, 10, L\"0.4041424344\"},\r\n    {0.4546474849, chars_format::fixed, 10, L\"0.4546474849\"},\r\n    {0.5051525354, chars_format::fixed, 10, L\"0.5051525354\"},\r\n    {0.5556575859, chars_format::fixed, 10, L\"0.5556575859\"},\r\n    {0.6061626364, chars_format::fixed, 10, L\"0.6061626364\"},\r\n    {0.6566676869, chars_format::fixed, 10, L\"0.6566676869\"},\r\n    {0.7071727374, chars_format::fixed, 10, L\"0.7071727374\"},\r\n    {0.7576777879, chars_format::fixed, 10, L\"0.7576777879\"},\r\n    {0.8081828384, chars_format::fixed, 10, L\"0.8081828384\"},\r\n    {0.8586878889, chars_format::fixed, 10, L\"0.8586878889\"},\r\n    {0.9091929394, chars_format::fixed, 10, L\"0.9091929394\"},\r\n    {0.9596979899, chars_format::fixed, 10, L\"0.9596979899\"},\r\n};\r\n\r\ninline constexpr DoubleToWideTestCase double_to_wide_test_cases[] = {\r\n    // Test special cases (zero, inf, nan) and an ordinary case. Also test negative signs.\r\n    {0.0, chars_format::scientific, L\"0e+00\"},\r\n    // {-0.0, chars_format::scientific, L\"-0e+00\"},\r\n    // {double_inf, chars_format::scientific, L\"inf\"},\r\n    // {-double_inf, chars_format::scientific, L\"-inf\"},\r\n    // {double_nan, chars_format::scientific, L\"nan\"},\r\n    // {-double_nan, chars_format::scientific, L\"-nan(ind)\"},\r\n    // {double_nan_payload, chars_format::scientific, L\"nan\"},\r\n    // {-double_nan_payload, chars_format::scientific, L\"-nan\"},\r\n    {2.018, chars_format::scientific, L\"2.018e+00\"},\r\n    // {-2.018, chars_format::scientific, L\"-2.018e+00\"},\r\n    {0.2018, chars_format::scientific, L\"2.018e-01\"},\r\n    // {-0.2018, chars_format::scientific, L\"-2.018e-01\"},\r\n\r\n    // Ditto for fixed, which doesn't emit exponents.\r\n    {0.0, chars_format::fixed, L\"0\"},\r\n    // {-0.0, chars_format::fixed, L\"-0\"},\r\n    // {double_inf, chars_format::fixed, L\"inf\"},\r\n    // {-double_inf, chars_format::fixed, L\"-inf\"},\r\n    // {double_nan, chars_format::fixed, L\"nan\"},\r\n    // {-double_nan, chars_format::fixed, L\"-nan(ind)\"},\r\n    // {double_nan_payload, chars_format::fixed, L\"nan\"},\r\n    // {-double_nan_payload, chars_format::fixed, L\"-nan\"},\r\n    {2.018, chars_format::fixed, L\"2.018\"},\r\n    // {-2.018, chars_format::fixed, L\"-2.018\"},\r\n\r\n    // Ditto for general, which selects fixed for the scientific exponent 0.\r\n    {0.0, chars_format::general, L\"0\"},\r\n    // {-0.0, chars_format::general, L\"-0\"},\r\n    // {double_inf, chars_format::general, L\"inf\"},\r\n    // {-double_inf, chars_format::general, L\"-inf\"},\r\n    // {double_nan, chars_format::general, L\"nan\"},\r\n    // {-double_nan, chars_format::general, L\"-nan(ind)\"},\r\n    // {double_nan_payload, chars_format::general, L\"nan\"},\r\n    // {-double_nan_payload, chars_format::general, L\"-nan\"},\r\n    {2.018, chars_format::general, L\"2.018\"},\r\n    // {-2.018, chars_format::general, L\"-2.018\"},\r\n\r\n    // Ditto for plain, which selects fixed because it's shorter for these values.\r\n    {0.0, chars_format{}, L\"0\"},\r\n    // {-0.0, chars_format{}, L\"-0\"},\r\n    // {double_inf, chars_format{}, L\"inf\"},\r\n    // {-double_inf, chars_format{}, L\"-inf\"},\r\n    // {double_nan, chars_format{}, L\"nan\"},\r\n    // {-double_nan, chars_format{}, L\"-nan(ind)\"},\r\n    // {double_nan_payload, chars_format{}, L\"nan\"},\r\n    // {-double_nan_payload, chars_format{}, L\"-nan\"},\r\n    {2.018, chars_format{}, L\"2.018\"},\r\n    // {-2.018, chars_format{}, L\"-2.018\"},\r\n\r\n    // Ditto for hex.\r\n    // {0.0, chars_format::hex, L\"0p+0\"},\r\n    // {-0.0, chars_format::hex, L\"-0p+0\"},\r\n    // {double_inf, chars_format::hex, L\"inf\"},\r\n    // {-double_inf, chars_format::hex, L\"-inf\"},\r\n    // {double_nan, chars_format::hex, L\"nan\"},\r\n    // {-double_nan, chars_format::hex, L\"-nan(ind)\"},\r\n    // {double_nan_payload, chars_format::hex, L\"nan\"},\r\n    // {-double_nan_payload, chars_format::hex, L\"-nan\"},\r\n    // {0x1.729p+0, chars_format::hex, L\"1.729p+0\"},\r\n    // {-0x1.729p+0, chars_format::hex, L\"-1.729p+0\"},\r\n    // {0x1.729p-1, chars_format::hex, L\"1.729p-1\"},\r\n    // {-0x1.729p-1, chars_format::hex, L\"-1.729p-1\"},\r\n};\r\n\r\ninline constexpr FloatToWideTestCase float_to_wide_test_cases[] = {\r\n    // Test special cases (zero, inf, nan) and an ordinary case. Also test negative signs.\r\n    {0.0f, chars_format::scientific, L\"0e+00\"},\r\n    // {-0.0f, chars_format::scientific, L\"-0e+00\"},\r\n    // {float_inf, chars_format::scientific, L\"inf\"},\r\n    // {-float_inf, chars_format::scientific, L\"-inf\"},\r\n    // {float_nan, chars_format::scientific, L\"nan\"},\r\n    // {-float_nan, chars_format::scientific, L\"-nan(ind)\"},\r\n    // {float_nan_payload, chars_format::scientific, L\"nan\"},\r\n    // {-float_nan_payload, chars_format::scientific, L\"-nan\"},\r\n    {2.018f, chars_format::scientific, L\"2.018e+00\"},\r\n    // {-2.018f, chars_format::scientific, L\"-2.018e+00\"},\r\n    {0.2018f, chars_format::scientific, L\"2.018e-01\"},\r\n    // {-0.2018f, chars_format::scientific, L\"-2.018e-01\"},\r\n\r\n    // Ditto for fixed, which doesn't emit exponents.\r\n    {0.0f, chars_format::fixed, L\"0\"},\r\n    // {-0.0f, chars_format::fixed, L\"-0\"},\r\n    // {float_inf, chars_format::fixed, L\"inf\"},\r\n    // {-float_inf, chars_format::fixed, L\"-inf\"},\r\n    // {float_nan, chars_format::fixed, L\"nan\"},\r\n    // {-float_nan, chars_format::fixed, L\"-nan(ind)\"},\r\n    // {float_nan_payload, chars_format::fixed, L\"nan\"},\r\n    // {-float_nan_payload, chars_format::fixed, L\"-nan\"},\r\n    {2.018f, chars_format::fixed, L\"2.018\"},\r\n    // {-2.018f, chars_format::fixed, L\"-2.018\"},\r\n\r\n    // Ditto for general, which selects fixed for the scientific exponent 0.\r\n    {0.0f, chars_format::general, L\"0\"},\r\n    // {-0.0f, chars_format::general, L\"-0\"},\r\n    // {float_inf, chars_format::general, L\"inf\"},\r\n    // {-float_inf, chars_format::general, L\"-inf\"},\r\n    // {float_nan, chars_format::general, L\"nan\"},\r\n    // {-float_nan, chars_format::general, L\"-nan(ind)\"},\r\n    // {float_nan_payload, chars_format::general, L\"nan\"},\r\n    // {-float_nan_payload, chars_format::general, L\"-nan\"},\r\n    {2.018f, chars_format::general, L\"2.018\"},\r\n    // {-2.018f, chars_format::general, L\"-2.018\"},\r\n\r\n    // Ditto for plain, which selects fixed because it's shorter for these values.\r\n    {0.0f, chars_format{}, L\"0\"},\r\n    // {-0.0f, chars_format{}, L\"-0\"},\r\n    // {float_inf, chars_format{}, L\"inf\"},\r\n    // {-float_inf, chars_format{}, L\"-inf\"},\r\n    // {float_nan, chars_format{}, L\"nan\"},\r\n    // {-float_nan, chars_format{}, L\"-nan(ind)\"},\r\n    // {float_nan_payload, chars_format{}, L\"nan\"},\r\n    // {-float_nan_payload, chars_format{}, L\"-nan\"},\r\n    {2.018f, chars_format{}, L\"2.018\"},\r\n    // {-2.018f, chars_format{}, L\"-2.018\"},\r\n\r\n    // Ditto for hex.\r\n    // {0.0f, chars_format::hex, L\"0p+0\"},\r\n    // {-0.0f, chars_format::hex, L\"-0p+0\"},\r\n    // {float_inf, chars_format::hex, L\"inf\"},\r\n    // {-float_inf, chars_format::hex, L\"-inf\"},\r\n    // {float_nan, chars_format::hex, L\"nan\"},\r\n    // {-float_nan, chars_format::hex, L\"-nan(ind)\"},\r\n    // {float_nan_payload, chars_format::hex, L\"nan\"},\r\n    // {-float_nan_payload, chars_format::hex, L\"-nan\"},\r\n    // {0x1.729p+0f, chars_format::hex, L\"1.729p+0\"},\r\n    // {-0x1.729p+0f, chars_format::hex, L\"-1.729p+0\"},\r\n    // {0x1.729p-1f, chars_format::hex, L\"1.729p-1\"},\r\n    // {-0x1.729p-1f, chars_format::hex, L\"-1.729p-1\"},\r\n};\r\n\r\n#endif // WCHAR_TEST_CASES_HPP\r\n"
  },
  {
    "path": "tests/std/tests/P0083R3_splicing_maps_and_sets/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0083R3_splicing_maps_and_sets/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdio>\r\n#include <functional>\r\n#include <initializer_list>\r\n#include <iterator>\r\n#include <map>\r\n#include <memory>\r\n#include <set>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n\r\n#define STRINGIFY2(X) #X\r\n#define STRINGIFY(X)  STRINGIFY2(X)\r\n\r\ntemplate <class NH>\r\nbool empty_test(NH&& nh) {\r\n    return nh.empty() && !nh;\r\n}\r\n\r\ntemplate <class NH>\r\nbool not_empty_test(NH&& nh) {\r\n    return !nh.empty() && nh;\r\n}\r\n\r\n#define CHECK_EMPTY(...)     assert(empty_test(__VA_ARGS__))\r\n#define CHECK_NOT_EMPTY(...) assert(not_empty_test(__VA_ARGS__))\r\n\r\ntemplate <template <class...> class, template <class...> class>\r\nconstexpr bool same_t = false;\r\ntemplate <template <class...> class C>\r\nconstexpr bool same_t<C, C> = true;\r\n\r\ntemplate <template <class...> class Actual, template <class...> class... Potentials>\r\nconstexpr bool is_one_of_t = (same_t<Actual, Potentials> || ...);\r\n\r\ntemplate <template <class...> class C>\r\nconstexpr bool mappish = is_one_of_t<C, std::map, std::multimap, std::unordered_map, std::unordered_multimap>;\r\n\r\ntemplate <template <class...> class C>\r\nconstexpr bool ordered = is_one_of_t<C, std::map, std::multimap, std::set, std::multiset>;\r\n\r\nlong long allocation_count = 0;\r\nbool allocation_allowed    = false;\r\n\r\nstruct allocation_guard {\r\n    bool value_ = allocation_allowed;\r\n\r\n    allocation_guard() = default;\r\n    explicit allocation_guard(bool const new_value) : value_{std::exchange(allocation_allowed, new_value)} {}\r\n\r\n    ~allocation_guard() {\r\n        allocation_allowed = value_;\r\n    }\r\n};\r\n\r\nbool construct_destroy_exact = false;\r\n\r\ntemplate <class T>\r\nstruct tracked_allocator {\r\n    using value_type = T;\r\n\r\n    constexpr tracked_allocator() noexcept = default;\r\n    template <class U>\r\n    constexpr tracked_allocator(tracked_allocator<U> const&) noexcept {}\r\n\r\n    T* allocate(size_t n) {\r\n        assert(allocation_allowed);\r\n        T* ptr = std::allocator<T>{}.allocate(n);\r\n        ++allocation_count;\r\n        return ptr;\r\n    }\r\n\r\n    void deallocate(T* ptr, size_t n) noexcept {\r\n        assert(allocation_allowed);\r\n        std::allocator<T>{}.deallocate(ptr, n);\r\n        --allocation_count;\r\n    }\r\n\r\n    template <class U, class... Args>\r\n    void construct(U* ptr, Args&&... args) {\r\n        if constexpr (!std::is_same_v<U, value_type>) {\r\n            assert(!construct_destroy_exact);\r\n            printf(\"construct\\n\");\r\n        }\r\n        std::allocator<T> alloc;\r\n        std::allocator_traits<std::allocator<T>>::construct(alloc, ptr, std::forward<Args>(args)...);\r\n    }\r\n\r\n    template <class U>\r\n    void destroy(U* ptr) {\r\n        if constexpr (!std::is_same_v<U, value_type>) {\r\n            assert(!construct_destroy_exact);\r\n            printf(\"destroy\\n\");\r\n        }\r\n        std::allocator<T> alloc;\r\n        std::allocator_traits<std::allocator<T>>::destroy(alloc, ptr);\r\n    }\r\n\r\n    template <class U>\r\n    bool operator==(tracked_allocator<U> const&) const noexcept {\r\n        return true;\r\n    }\r\n    template <class U>\r\n    bool operator!=(tracked_allocator<U> const&) const noexcept {\r\n        return false;\r\n    }\r\n};\r\n\r\ntemplate <class Container, class Key>\r\nauto test_extract(Container& cont, Key const& absent, Key const& present) {\r\n    allocation_guard guard{false};\r\n    auto const size = cont.size();\r\n    auto nh         = cont.extract(absent);\r\n    CHECK_EMPTY(nh);\r\n    nh = cont.extract(present);\r\n    CHECK_NOT_EMPTY(nh);\r\n    assert(cont.size() == size - 1);\r\n    return nh;\r\n}\r\n\r\ntemplate <class Container>\r\nauto test_extract(Container& cont, typename Container::const_iterator pos) {\r\n    allocation_guard guard{false};\r\n    auto const size = cont.size();\r\n    auto nh         = cont.extract(pos);\r\n    CHECK_NOT_EMPTY(nh);\r\n    assert(cont.size() == size - 1);\r\n    return nh;\r\n}\r\n\r\ntemplate <class NodeHandle, class Validator1, class Validator2>\r\nvoid test_node_handle(NodeHandle& nh1, NodeHandle& nh2, Validator1 v1, Validator2 v2) {\r\n    allocation_guard guard{false};\r\n\r\n    using ATraits = std::allocator_traits<typename NodeHandle::allocator_type>;\r\n\r\n    // empty and operator bool do not throw\r\n    static_assert(noexcept(nh1.empty()));\r\n    static_assert(noexcept(static_cast<bool>(nh1)));\r\n\r\n    // Nothrow destruction\r\n    static_assert(std::is_nothrow_destructible_v<NodeHandle>);\r\n\r\n    assert(v1(nh1));\r\n    assert(v2(nh2));\r\n\r\n    // Nothrow/constexpr default construction\r\n    static_assert(std::is_nothrow_default_constructible_v<NodeHandle>);\r\n    CHECK_EMPTY(NodeHandle{});\r\n#ifndef _M_CEE // TRANSITION, VSO-1664382\r\n#if _HAS_CXX20\r\n#pragma warning(push)\r\n#pragma warning(disable : 4640) // C4640 emitted by MSVC because 'NodeHandle' type has non-trivial dtor\r\n    {\r\n        static constinit NodeHandle static_handle{};\r\n    }\r\n#pragma warning(pop)\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    // No copies!\r\n    static_assert(!std::is_copy_constructible_v<NodeHandle>);\r\n    static_assert(!std::is_copy_assignable_v<NodeHandle>);\r\n\r\n    // Nothrow move construction (empty)\r\n    static_assert(std::is_nothrow_move_constructible_v<NodeHandle>);\r\n    {\r\n        NodeHandle empty_nh;\r\n        NodeHandle nh = std::move(empty_nh);\r\n        CHECK_EMPTY(nh);\r\n    }\r\n\r\n    // Move assignment (self, empty)\r\n    static_assert(std::is_nothrow_move_assignable_v<NodeHandle>); // Extension (strengthened)\r\n    {\r\n        NodeHandle empty_nh;\r\n        empty_nh = std::move(empty_nh);\r\n        CHECK_EMPTY(empty_nh);\r\n    }\r\n\r\n    // Move construction (!empty)\r\n    auto nh3 = std::move(nh1);\r\n    CHECK_EMPTY(nh1);\r\n    assert(v1(nh3));\r\n\r\n    // Move assignment (empty = empty)\r\n    nh1 = NodeHandle{};\r\n    CHECK_EMPTY(nh1);\r\n\r\n    // Move assignment (empty = !empty)\r\n    nh1 = std::move(nh3);\r\n    CHECK_EMPTY(nh3);\r\n    assert(v1(nh1));\r\n\r\n    using std::swap;\r\n\r\n    // \"Conditionally\" nothrow swap\r\n    constexpr bool should_not_throw = ATraits::propagate_on_container_swap::value || ATraits::is_always_equal::value;\r\n    static_assert(!should_not_throw || std::is_nothrow_swappable_v<NodeHandle>);\r\n    static_assert(!should_not_throw || noexcept(nh1.swap(nh3)));\r\n    static_assert(std::is_nothrow_swappable_v<NodeHandle>); // Extension (strengthened)\r\n    static_assert(noexcept(nh1.swap(nh3))); // Extension (strengthened)\r\n\r\n    // non-member swap (!empty, empty)\r\n    swap(nh1, nh3);\r\n    CHECK_EMPTY(nh1);\r\n    assert(v1(nh3));\r\n    // member swap (empty, !empty)\r\n    nh1.swap(nh3);\r\n    CHECK_EMPTY(nh3);\r\n    assert(v1(nh1));\r\n\r\n    // member swap (!empty, empty)\r\n    nh1.swap(nh3);\r\n    CHECK_EMPTY(nh1);\r\n    assert(v1(nh3));\r\n    // non-member swap (empty, !empty)\r\n    swap(nh1, nh3);\r\n    CHECK_EMPTY(nh3);\r\n    assert(v1(nh1));\r\n\r\n    {\r\n        NodeHandle empty_nh;\r\n        CHECK_EMPTY(empty_nh);\r\n\r\n        // non-member swap (empty, empty)\r\n        swap(nh3, empty_nh);\r\n        CHECK_EMPTY(empty_nh);\r\n        CHECK_EMPTY(nh3);\r\n\r\n        // member swap (empty, empty)\r\n        nh3.swap(empty_nh);\r\n        CHECK_EMPTY(empty_nh);\r\n        CHECK_EMPTY(nh3);\r\n    }\r\n\r\n    // non-member swap (!empty, !empty)\r\n    swap(nh1, nh2);\r\n    assert(v1(nh2));\r\n    assert(v2(nh1));\r\n    // member swap (!empty, !empty)\r\n    nh1.swap(nh2);\r\n    assert(v1(nh1));\r\n    assert(v2(nh2));\r\n\r\n    // Move assignment (self, !empty)\r\n    auto const count   = allocation_count;\r\n    allocation_allowed = true;\r\n    nh2                = std::move(nh2);\r\n    allocation_allowed = false;\r\n    CHECK_EMPTY(nh2);\r\n    assert(allocation_count == count - 1);\r\n\r\n    // Move assignment (self, empty)\r\n    nh2 = std::move(nh2);\r\n    CHECK_EMPTY(nh2);\r\n}\r\n\r\ntemplate <template <class...> class C, class Order = std::less<>>\r\nauto init_from(std::initializer_list<std::pair<int, int>> il) {\r\n    allocation_guard guard{true};\r\n    if constexpr (mappish<C>) {\r\n        using A = tracked_allocator<std::pair<int const, int>>;\r\n        if constexpr (ordered<C>) {\r\n            return C<int, int, Order, A>(il.begin(), il.end());\r\n        } else {\r\n            return C<int, int, std::hash<int>, std::equal_to<>, A>(il.begin(), il.end());\r\n        }\r\n    } else {\r\n        using A = tracked_allocator<int>;\r\n\r\n        auto settish = [] {\r\n            if constexpr (ordered<C>) {\r\n                return C<int, Order, A>{};\r\n            } else {\r\n                return C<int, std::hash<int>, std::equal_to<>, A>{};\r\n            }\r\n        }();\r\n\r\n        for (auto const& pr : il) {\r\n            settish.emplace(pr.first);\r\n        }\r\n        return settish;\r\n    }\r\n}\r\n\r\ntemplate <class P, class F = decltype(P::first)>\r\nconstexpr bool is_int_pair = std::is_same_v<int, std::remove_cv_t<F>>;\r\n\r\nstruct projected_less {\r\n    constexpr bool operator()(int i, int j) const {\r\n        return i < j;\r\n    }\r\n    template <class P, std::enable_if_t<is_int_pair<P>, int> = 0>\r\n    constexpr bool operator()(P const& p, int j) const {\r\n        return p.first < j;\r\n    }\r\n    template <class P, std::enable_if_t<is_int_pair<P>, int> = 0>\r\n    constexpr bool operator()(int j, P const& p) const {\r\n        return j < p.first;\r\n    }\r\n    template <class P1, class P2, std::enable_if_t<is_int_pair<P1> && is_int_pair<P2>, int> = 0>\r\n    constexpr bool operator()(P1 const& p1, P2 const& p2) const {\r\n        return p1.first < p2.first;\r\n    }\r\n\r\n    using is_transparent = std::true_type;\r\n};\r\n\r\nstruct projected_greater {\r\n    template <class T, class U>\r\n    constexpr auto operator()(T const& t, U const& u) const -> decltype(projected_less{}(u, t)) {\r\n        return projected_less{}(u, t);\r\n    }\r\n\r\n    using is_transparent = std::true_type;\r\n};\r\n\r\nstruct projected_hash {\r\n    size_t operator()(int i) const {\r\n        return std::hash<int>{}(i);\r\n    }\r\n    template <class P, std::enable_if_t<is_int_pair<P>, int> = 0>\r\n    size_t operator()(P const& p) const {\r\n        return std::hash<int>{}(p.first);\r\n    }\r\n};\r\n\r\nstruct projected_equal {\r\n    constexpr bool operator()(int i, int j) const {\r\n        return i == j;\r\n    }\r\n    template <class P, std::enable_if_t<is_int_pair<P>, int> = 0>\r\n    constexpr bool operator()(P const& p, int j) const {\r\n        return p.first == j;\r\n    }\r\n    template <class P, std::enable_if_t<is_int_pair<P>, int> = 0>\r\n    constexpr bool operator()(int j, P const& p) const {\r\n        return j == p.first;\r\n    }\r\n    template <class P1, class P2, std::enable_if_t<is_int_pair<P1> && is_int_pair<P2>, int> = 0>\r\n    constexpr bool operator()(P1 const& p1, P2 const& p2) const {\r\n        return p1.first == p2.first;\r\n    }\r\n\r\n    using is_transparent = std::true_type;\r\n};\r\n\r\ntemplate <template <class...> class C, bool Reverse = false, bool = ordered<C>, bool = mappish<C>>\r\nstruct extended_merge_ctype_;\r\n\r\ntemplate <template <class...> class C, bool Reverse>\r\nstruct extended_merge_ctype_<C, Reverse, true, true> {\r\n    using type = C<int, int, std::conditional_t<Reverse, std::greater<>, std::less<>>>;\r\n};\r\ntemplate <template <class...> class C, bool Reverse>\r\nstruct extended_merge_ctype_<C, Reverse, false, true> {\r\n    using type = C<int, int, std::hash<int>, std::equal_to<>>;\r\n};\r\ntemplate <template <class...> class C, bool Reverse>\r\nstruct extended_merge_ctype_<C, Reverse, true, false> {\r\n    using type = C<std::pair<int const, int>, std::conditional_t<Reverse, projected_greater, projected_less>>;\r\n};\r\ntemplate <template <class...> class C, bool Reverse>\r\nstruct extended_merge_ctype_<C, Reverse, false, false> {\r\n    using type = C<std::pair<int const, int>, projected_hash, projected_equal>;\r\n};\r\ntemplate <template <class...> class C, bool Reverse = false>\r\nusing extended_merge_ctype = typename extended_merge_ctype_<C, Reverse>::type;\r\n\r\nenum class should_move : bool { no, yes };\r\nenum class should_reverse : bool { no, yes };\r\n\r\ntemplate <template <class...> class C1, template <class...> class C2, should_reverse Reverse, should_move Move>\r\nvoid test_merge_single() {\r\n    auto const count = allocation_count;\r\n    {\r\n        allocation_guard guard{true};\r\n        auto c1        = extended_merge_ctype<C1>{{1, -1}, {2, -2}, {3, -3}};\r\n        auto const key = [&](int i) {\r\n            if constexpr (mappish<C1>) {\r\n                return i;\r\n            } else {\r\n                return std::pair<int const, int>{i, 99999};\r\n            }\r\n        }(1);\r\n        auto const pos     = std::as_const(c1).find(key);\r\n        auto c2            = extended_merge_ctype<C2, (Reverse == should_reverse::yes)>{{0, 0}, {3, 3}};\r\n        allocation_allowed = false;\r\n        assert(c1.get_allocator() == c2.get_allocator());\r\n        if constexpr (Move == should_move::yes) {\r\n            c2.merge(std::move(c1));\r\n        } else {\r\n            c2.merge(c1);\r\n        }\r\n        assert(c1.size() <= 1u);\r\n        assert(4 <= c2.size() && c2.size() <= 5);\r\n#if _ITERATOR_DEBUG_LEVEL != 1 // merge invalidates iterators under IDL1\r\n        auto const d = std::distance(c2.cbegin(), pos);\r\n        if constexpr (ordered<C2>) {\r\n            assert(d == (Reverse == should_reverse::yes ? static_cast<decltype(d)>(c2.size()) - 2 : 1));\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL != 1\r\n        allocation_allowed = true;\r\n    }\r\n    assert(allocation_count == count);\r\n}\r\n\r\ntemplate <template <class...> class C1, template <class...> class C2>\r\nvoid test_merge() {\r\n    test_merge_single<C1, C2, should_reverse::no, should_move::no>();\r\n    test_merge_single<C1, C2, should_reverse::no, should_move::yes>();\r\n    if constexpr (ordered<C2>) {\r\n        test_merge_single<C1, C2, should_reverse::yes, should_move::no>();\r\n        test_merge_single<C1, C2, should_reverse::yes, should_move::yes>();\r\n    }\r\n}\r\n\r\ntemplate <template <class...> class C>\r\nvoid test_key_mutation() {\r\n    auto const count = allocation_count;\r\n    {\r\n        allocation_guard guard{true};\r\n        auto m             = init_from<C>({{1, -1}, {2, -2}, {3, -3}});\r\n        allocation_allowed = false;\r\n        auto nh            = m.extract(1);\r\n        if constexpr (mappish<C>) {\r\n            nh.key() = 42;\r\n        } else {\r\n            nh.value() = 42;\r\n        }\r\n        m.insert(std::move(nh));\r\n        auto const pos = m.find(42);\r\n        assert(pos != m.end());\r\n        if constexpr (mappish<C>) {\r\n            assert(pos->second == -1);\r\n        }\r\n        allocation_allowed = true;\r\n    }\r\n    assert(allocation_count == count);\r\n}\r\n\r\ntemplate <template <class...> class Map>\r\nvoid test_map() {\r\n    auto const count = allocation_count;\r\n    {\r\n        using A = tracked_allocator<std::pair<int const, char>>;\r\n        using M = Map<int, char, std::less<>, A>;\r\n        allocation_guard guard{true};\r\n        M m{{0, 'x'}, {1, 'y'}};\r\n        allocation_allowed = false;\r\n\r\n        auto nh1 = test_extract(m, 42, 0);\r\n        using NH = decltype(nh1);\r\n        static_assert(std::is_same_v<typename NH::allocator_type, typename M::allocator_type>);\r\n        static_assert(std::is_same_v<typename NH::key_type, typename M::key_type>);\r\n        static_assert(std::is_same_v<typename NH::mapped_type, typename M::mapped_type>);\r\n\r\n        auto nh2 = test_extract(m, m.begin());\r\n        static_assert(std::is_same_v<NH, decltype(nh2)>);\r\n\r\n        test_node_handle(\r\n            nh1, nh2,\r\n            [&m](NH& h) {\r\n                return static_cast<bool>(h) && !h.empty() && h.key() == 0 && h.mapped() == 'x'\r\n                    && h.get_allocator() == m.get_allocator();\r\n            },\r\n            [&m](NH& h) {\r\n                return static_cast<bool>(h) && !h.empty() && h.key() == 1 && h.mapped() == 'y'\r\n                    && h.get_allocator() == m.get_allocator();\r\n            });\r\n\r\n        allocation_allowed = true;\r\n        m.clear();\r\n        M m2{{0, 'x'}, {1, 'y'}};\r\n        allocation_allowed = false;\r\n        m.insert(m2.extract(m2.begin()));\r\n        m.insert(m.end(), m2.extract(m2.begin()));\r\n        assert(m2.empty());\r\n        assert(m.size() == 2u);\r\n        assert(m.begin()->first == 0);\r\n        assert(m.begin()->second == 'x');\r\n        assert(std::next(m.begin())->first == 1);\r\n        assert(std::next(m.begin())->second == 'y');\r\n\r\n        allocation_allowed = true;\r\n    }\r\n    assert(allocation_count == count);\r\n\r\n    test_key_mutation<Map>();\r\n\r\n    test_merge<Map, std::map>();\r\n    test_merge<Map, std::multimap>();\r\n    test_merge<Map, std::set>(); // Extension (standard doesn't require map<->set node compatibility)\r\n    test_merge<Map, std::multiset>(); // Extension (ditto)\r\n}\r\n\r\ntemplate <template <class...> class Set>\r\nvoid test_set() {\r\n    auto const count = allocation_count;\r\n    {\r\n        using S = Set<int, std::less<>, tracked_allocator<int>>;\r\n        allocation_guard guard{true};\r\n        S s{0, 1};\r\n        allocation_allowed = false;\r\n\r\n        auto nh1 = test_extract(s, 42, 0);\r\n        using NH = decltype(nh1);\r\n        static_assert(std::is_same_v<typename NH::allocator_type, typename S::allocator_type>);\r\n        static_assert(std::is_same_v<typename NH::value_type, typename S::value_type>);\r\n\r\n        auto nh2 = test_extract(s, s.begin());\r\n        static_assert(std::is_same_v<NH, decltype(nh2)>);\r\n\r\n        test_node_handle(\r\n            nh1, nh2,\r\n            [&s](NH& h) {\r\n                return static_cast<bool>(h) && !h.empty() && h.value() == 0 && h.get_allocator() == s.get_allocator();\r\n            },\r\n            [&s](NH& h) {\r\n                return static_cast<bool>(h) && !h.empty() && h.value() == 1 && h.get_allocator() == s.get_allocator();\r\n            });\r\n\r\n        allocation_allowed = true;\r\n        s.clear();\r\n        S m2{{0, 1}};\r\n        allocation_allowed = false;\r\n        s.insert(m2.extract(m2.begin()));\r\n        s.insert(s.end(), m2.extract(m2.begin()));\r\n        assert(m2.empty());\r\n        assert(s.size() == 2u);\r\n        assert(*s.begin() == 0);\r\n        assert(*std::next(s.begin()) == 1);\r\n        allocation_allowed = true;\r\n    }\r\n    assert(allocation_count == count);\r\n\r\n    test_key_mutation<Set>();\r\n\r\n    test_merge<Set, std::map>(); // Extension (standard doesn't require map<->set node compatibility)\r\n    test_merge<Set, std::multimap>(); // Extension (ditto)\r\n    test_merge<Set, std::set>();\r\n    test_merge<Set, std::multiset>();\r\n}\r\n\r\ntemplate <template <class...> class Map>\r\nvoid test_unordered_map() {\r\n    auto const count = allocation_count;\r\n    {\r\n        using A = tracked_allocator<std::pair<int const, char>>;\r\n        using M = Map<int, char, std::hash<int>, std::equal_to<>, A>;\r\n        allocation_guard guard{true};\r\n        M m{{0, 'x'}, {1, 'y'}};\r\n        allocation_allowed = false;\r\n\r\n        auto nh1 = test_extract(m, 42, 0);\r\n        using NH = decltype(nh1);\r\n        static_assert(std::is_same_v<typename NH::allocator_type, typename decltype(m)::allocator_type>);\r\n        static_assert(std::is_same_v<typename NH::key_type, int>);\r\n        static_assert(std::is_same_v<typename NH::mapped_type, char>);\r\n\r\n        auto nh2 = test_extract(m, m.begin());\r\n        static_assert(std::is_same_v<NH, decltype(nh2)>);\r\n\r\n        test_node_handle(\r\n            nh1, nh2,\r\n            [&m](NH& h) {\r\n                return static_cast<bool>(h) && !h.empty() && h.key() == 0 && h.mapped() == 'x'\r\n                    && h.get_allocator() == m.get_allocator();\r\n            },\r\n            [&m](NH& h) {\r\n                return static_cast<bool>(h) && !h.empty() && h.key() == 1 && h.mapped() == 'y'\r\n                    && h.get_allocator() == m.get_allocator();\r\n            });\r\n\r\n        allocation_allowed = true;\r\n        m.clear();\r\n        M m2{{0, 'x'}, {1, 'y'}};\r\n        allocation_allowed = false;\r\n        m.insert(m2.extract(m2.begin()));\r\n        m.insert(m.end(), m2.extract(m2.begin()));\r\n        assert(m2.empty());\r\n        assert(m.size() == 2u);\r\n        if (m.begin()->first == 0) {\r\n            assert(m.begin()->second == 'x');\r\n            assert(std::next(m.begin())->first == 1);\r\n            assert(std::next(m.begin())->second == 'y');\r\n        } else {\r\n            assert(m.begin()->first == 1);\r\n            assert(m.begin()->second == 'y');\r\n            assert(std::next(m.begin())->first == 0);\r\n            assert(std::next(m.begin())->second == 'x');\r\n        }\r\n\r\n        allocation_allowed = true;\r\n    }\r\n    assert(allocation_count == count);\r\n\r\n    test_key_mutation<Map>();\r\n\r\n    test_merge<Map, std::unordered_map>();\r\n    test_merge<Map, std::unordered_multimap>();\r\n    test_merge<Map, std::unordered_set>(); // Extension (standard doesn't require map<->set node compatibility)\r\n    test_merge<Map, std::unordered_multiset>(); // Extension (ditto)\r\n}\r\n\r\ntemplate <template <class...> class Set>\r\nvoid test_unordered_set() {\r\n    auto const count = allocation_count;\r\n    {\r\n        using S = Set<int, std::hash<int>, std::equal_to<>, tracked_allocator<int>>;\r\n        allocation_guard guard{true};\r\n        S s{0, 1};\r\n        allocation_allowed = false;\r\n\r\n        auto nh1 = test_extract(s, 42, 0);\r\n        using NH = decltype(nh1);\r\n        static_assert(std::is_same_v<typename NH::allocator_type, typename decltype(s)::allocator_type>);\r\n        static_assert(std::is_same_v<typename NH::value_type, int>);\r\n\r\n        auto nh2 = test_extract(s, s.begin());\r\n        static_assert(std::is_same_v<NH, decltype(nh2)>);\r\n\r\n        test_node_handle(\r\n            nh1, nh2,\r\n            [&s](NH& h) {\r\n                return static_cast<bool>(h) && !h.empty() && h.value() == 0 && h.get_allocator() == s.get_allocator();\r\n            },\r\n            [&s](NH& h) {\r\n                return static_cast<bool>(h) && !h.empty() && h.value() == 1 && h.get_allocator() == s.get_allocator();\r\n            });\r\n\r\n        allocation_allowed = true;\r\n        s.clear();\r\n        S m2{{0, 1}};\r\n        allocation_allowed = false;\r\n        s.insert(m2.extract(m2.begin()));\r\n        s.insert(s.end(), m2.extract(m2.begin()));\r\n        assert(m2.empty());\r\n        assert(s.size() == 2u);\r\n        if (*s.begin() == 0) {\r\n            assert(*std::next(s.begin()) == 1);\r\n        } else {\r\n            assert(*s.begin() == 1);\r\n            assert(*std::next(s.begin()) == 0);\r\n        }\r\n\r\n        allocation_allowed = true;\r\n    }\r\n    assert(allocation_count == count);\r\n\r\n    test_key_mutation<Set>();\r\n\r\n    test_merge<Set, std::unordered_map>(); // Extension (standard doesn't require map<->set node compatibility)\r\n    test_merge<Set, std::unordered_multimap>(); // Extension (ditto)\r\n    test_merge<Set, std::unordered_set>();\r\n    test_merge<Set, std::unordered_multiset>();\r\n}\r\n\r\nvoid test_gh_1309() {\r\n    // Guard against regression of GH-1309, in which node handles were incorrectly destroying the user value with a node\r\n    // allocator rather than a value_type allocator as the Standard requires.\r\n\r\n    allocation_guard guard{true};\r\n\r\n    {\r\n        using A  = tracked_allocator<std::pair<int const, char>>;\r\n        using M  = std::map<int, char, std::less<>, A>;\r\n        using NH = M::node_type;\r\n        NH nh1;\r\n        NH nh2;\r\n        {\r\n            M m{{0, 'x'}, {1, 'y'}};\r\n            nh1 = m.extract(0);\r\n            nh2 = m.extract(1);\r\n        }\r\n        construct_destroy_exact = true;\r\n        nh1                     = std::move(nh2);\r\n    }\r\n    construct_destroy_exact = false;\r\n\r\n    {\r\n        using A  = tracked_allocator<std::pair<int const, char>>;\r\n        using M  = std::multimap<int, char, std::less<>, A>;\r\n        using NH = M::node_type;\r\n        NH nh1;\r\n        NH nh2;\r\n        {\r\n            M m{{0, 'x'}, {0, 'y'}};\r\n            nh1 = m.extract(0);\r\n            nh2 = m.extract(0);\r\n        }\r\n        construct_destroy_exact = true;\r\n        nh1                     = std::move(nh2);\r\n    }\r\n    construct_destroy_exact = false;\r\n\r\n    {\r\n        using S  = std::set<int, std::less<>, tracked_allocator<int>>;\r\n        using NH = S::node_type;\r\n        NH nh1;\r\n        NH nh2;\r\n        {\r\n            S s{0, 1};\r\n            nh1 = s.extract(0);\r\n            nh2 = s.extract(s.begin());\r\n        }\r\n        construct_destroy_exact = true;\r\n        nh1                     = std::move(nh2);\r\n    }\r\n    construct_destroy_exact = false;\r\n\r\n    {\r\n        using S  = std::multiset<int, std::less<>, tracked_allocator<int>>;\r\n        using NH = S::node_type;\r\n        NH nh1;\r\n        NH nh2;\r\n        {\r\n            S s{0, 0};\r\n            nh1 = s.extract(0);\r\n            nh2 = s.extract(s.begin());\r\n        }\r\n        construct_destroy_exact = true;\r\n        nh1                     = std::move(nh2);\r\n    }\r\n    construct_destroy_exact = false;\r\n\r\n    {\r\n        using A  = tracked_allocator<std::pair<int const, char>>;\r\n        using M  = std::unordered_map<int, char, std::hash<int>, std::equal_to<>, A>;\r\n        using NH = M::node_type;\r\n        NH nh1;\r\n        NH nh2;\r\n        {\r\n            M m{{0, 'x'}, {1, 'y'}};\r\n            nh1 = m.extract(0);\r\n            nh2 = m.extract(m.begin());\r\n        }\r\n        construct_destroy_exact = true;\r\n        nh1                     = std::move(nh2);\r\n    }\r\n    construct_destroy_exact = false;\r\n\r\n    {\r\n        using A  = tracked_allocator<std::pair<int const, char>>;\r\n        using M  = std::unordered_multimap<int, char, std::hash<int>, std::equal_to<>, A>;\r\n        using NH = M::node_type;\r\n        NH nh1;\r\n        NH nh2;\r\n        {\r\n            M m{{0, 'x'}, {0, 'y'}};\r\n            nh1 = m.extract(0);\r\n            nh2 = m.extract(m.begin());\r\n        }\r\n        construct_destroy_exact = true;\r\n        nh1                     = std::move(nh2);\r\n    }\r\n    construct_destroy_exact = false;\r\n\r\n    {\r\n        using S  = std::unordered_set<int, std::hash<int>, std::equal_to<>, tracked_allocator<int>>;\r\n        using NH = S::node_type;\r\n        NH nh1;\r\n        NH nh2;\r\n        {\r\n            S s{0, 1};\r\n            nh1 = s.extract(0);\r\n            nh2 = s.extract(s.begin());\r\n        }\r\n        construct_destroy_exact = true;\r\n        nh1                     = std::move(nh2);\r\n    }\r\n    construct_destroy_exact = false;\r\n\r\n    {\r\n        using S  = std::unordered_multiset<int, std::hash<int>, std::equal_to<>, tracked_allocator<int>>;\r\n        using NH = S::node_type;\r\n        NH nh1;\r\n        NH nh2;\r\n        {\r\n            S s{0, 0};\r\n            nh1 = s.extract(0);\r\n            nh2 = s.extract(s.begin());\r\n        }\r\n        construct_destroy_exact = true;\r\n        nh1                     = std::move(nh2);\r\n    }\r\n    construct_destroy_exact = false;\r\n}\r\n\r\nint main() {\r\n    test_map<std::map>();\r\n    test_map<std::multimap>();\r\n\r\n    test_set<std::set>();\r\n    test_set<std::multiset>();\r\n\r\n    test_unordered_map<std::unordered_map>();\r\n    test_unordered_map<std::unordered_multimap>();\r\n\r\n    test_unordered_set<std::unordered_set>();\r\n    test_unordered_set<std::unordered_multiset>();\r\n\r\n    test_gh_1309();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0088R3_variant/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0088R3_variant/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Organization of this file:\r\n// * a short header (including this comment)\r\n// * `// LLVM SOURCES BEGIN`\r\n// * The contents of several libc++ test files, each delimited by `// -- BEGIN/END: <filename>`\r\n//   comments. These contents have been modified to merge many tests into one by:\r\n//     (1) changing `int main(int, char**)` to `int run_test()`, and\r\n//     (2) wrapping everything other than comments and includes in a unique namespace per-file, using namespace nesting\r\n//         to reflect the hierarchical structure of the upstream sources.\r\n// * `// LLVM SOURCES END`\r\n// * Several more MSVC-STL-specific test cases laid out in a nested namespace structure within `msvc`.\r\n// * The `main` function, which simply calls each of the `run_test` functions in both the adapted libc++ test cases and\r\n//   the MSVC-specific test cases.\r\n//\r\n// The LLVM sources are updated manually:\r\n// 1. Navigate a bash prompt to `llvm-project/libcxx`.\r\n// 2. Redirect the output of:\r\n//      ../../tools/scripts/transform_llvm.sh test/std/utilities/variant\r\n//    into a file.\r\n// 3. Replicate the namespace structure from here into that file, use its content to replace everything between the\r\n//    \"LLVM SOURCES BEGIN\"/\"END\" delimiters, and ensure that `main` properly calls each of the `run_test` functions.\r\n// 4. Fix the specializations of std::hash and std::get by closing/reopening namespaces and qualifying types.\r\n// 5. Restore the TRANSITION-commented workarounds.\r\n// 6. Restore the _HAS_CXX20 guards for relops::three_way and visit::return_type.\r\n// 7. Restore the guards for P2637R3 Member visit.\r\n// 8. Restore the is_permissive workarounds.\r\n//\r\n// Yes, this is an awkward hand process; notably the required headers can change without notice. We should investigate\r\n// running the libc++ tests directly in all of our configurations so we needn't replicate this subset of files.\r\n\r\n#if !defined(_PREFAST_) || !defined(_M_IX86) // TRANSITION, VSO-1639191\r\n\r\n#define _SILENCE_CXX20_VOLATILE_DEPRECATION_WARNING\r\n#define _LIBCXX_IN_DEVCRT\r\n#include <msvc_stdlib_force_include.h> // Must precede any other libc++ headers\r\n\r\n#include <is_permissive.hpp>\r\n\r\n// clang-format off: avoid diverging from external code\r\n// LLVM SOURCES BEGIN\r\n// -- BEGIN: test/std/utilities/variant/variant.bad_variant_access/bad_variant_access.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n/*\r\n\r\n class bad_variant_access : public exception {\r\npublic:\r\n  bad_variant_access() noexcept;\r\n  virtual const char* what() const noexcept;\r\n};\r\n\r\n*/\r\n\r\n#include <cassert>\r\n#include <exception>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace bad_variant_access {\r\nint run_test() {\r\n  static_assert(std::is_base_of<std::exception, std::bad_variant_access>::value,\r\n                \"\");\r\n  static_assert(noexcept(std::bad_variant_access{}), \"must be noexcept\");\r\n  static_assert(noexcept(std::bad_variant_access{}.what()), \"must be noexcept\");\r\n  std::bad_variant_access ex;\r\n  assert(ex.what());\r\n\r\n  return 0;\r\n}\r\n} // namespace bad_variant_access\r\n// -- END: test/std/utilities/variant/variant.bad_variant_access/bad_variant_access.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.get/get_if_index.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <size_t I, class... Types>\r\n//  constexpr add_pointer_t<variant_alternative_t<I, variant<Types...>>>\r\n//   get_if(variant<Types...>* v) noexcept;\r\n// template <size_t I, class... Types>\r\n//  constexpr add_pointer_t<const variant_alternative_t<I, variant<Types...>>>\r\n//   get_if(const variant<Types...>* v) noexcept;\r\n\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n#include <cassert>\r\n#include <memory>\r\n#include <variant>\r\n\r\nnamespace get::get_if_index {\r\nvoid test_const_get_if() {\r\n  {\r\n    using V = std::variant<int>;\r\n    constexpr const V *v = nullptr;\r\n    static_assert(std::get_if<0>(v) == nullptr, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    constexpr V v(42);\r\n    ASSERT_NOEXCEPT(std::get_if<0>(&v));\r\n    ASSERT_SAME_TYPE(decltype(std::get_if<0>(&v)), const int *);\r\n    static_assert(*std::get_if<0>(&v) == 42, \"\");\r\n    static_assert(std::get_if<1>(&v) == nullptr, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    constexpr V v(42l);\r\n    ASSERT_SAME_TYPE(decltype(std::get_if<1>(&v)), const long *);\r\n    static_assert(*std::get_if<1>(&v) == 42, \"\");\r\n    static_assert(std::get_if<0>(&v) == nullptr, \"\");\r\n  }\r\n}\r\n\r\nvoid test_get_if() {\r\n  {\r\n    using V = std::variant<int>;\r\n    V *v = nullptr;\r\n    assert(std::get_if<0>(v) == nullptr);\r\n  }\r\n  {\r\n    using V = std::variant<int, long>;\r\n    V v(42);\r\n    ASSERT_NOEXCEPT(std::get_if<0>(&v));\r\n    ASSERT_SAME_TYPE(decltype(std::get_if<0>(&v)), int *);\r\n    assert(*std::get_if<0>(&v) == 42);\r\n    assert(std::get_if<1>(&v) == nullptr);\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    V v(42l);\r\n    ASSERT_SAME_TYPE(decltype(std::get_if<1>(&v)), const long *);\r\n    assert(*std::get_if<1>(&v) == 42);\r\n    assert(std::get_if<0>(&v) == nullptr);\r\n  }\r\n}\r\n\r\nint run_test() {\r\n  test_const_get_if();\r\n  test_get_if();\r\n\r\n  return 0;\r\n}\r\n} // namespace get::get_if_index\r\n// -- END: test/std/utilities/variant/variant.get/get_if_index.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.get/get_if_type.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n//  template <class T, class... Types>\r\n//  constexpr add_pointer_t<T> get_if(variant<Types...>* v) noexcept;\r\n// template <class T, class... Types>\r\n//  constexpr add_pointer_t<const T> get_if(const variant<Types...>* v)\r\n//  noexcept;\r\n\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n#include <cassert>\r\n#include <variant>\r\n\r\nnamespace get::get_if_type {\r\nvoid test_const_get_if() {\r\n  {\r\n    using V = std::variant<int>;\r\n    constexpr const V *v = nullptr;\r\n    static_assert(std::get_if<int>(v) == nullptr, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    constexpr V v(42);\r\n    ASSERT_NOEXCEPT(std::get_if<int>(&v));\r\n    ASSERT_SAME_TYPE(decltype(std::get_if<int>(&v)), const int *);\r\n    static_assert(*std::get_if<int>(&v) == 42, \"\");\r\n    static_assert(std::get_if<const long>(&v) == nullptr, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    constexpr V v(42l);\r\n    ASSERT_SAME_TYPE(decltype(std::get_if<const long>(&v)), const long *);\r\n    static_assert(*std::get_if<const long>(&v) == 42, \"\");\r\n    static_assert(std::get_if<int>(&v) == nullptr, \"\");\r\n  }\r\n}\r\n\r\nvoid test_get_if() {\r\n  {\r\n    using V = std::variant<int>;\r\n    V *v = nullptr;\r\n    assert(std::get_if<int>(v) == nullptr);\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    V v(42);\r\n    ASSERT_NOEXCEPT(std::get_if<int>(&v));\r\n    ASSERT_SAME_TYPE(decltype(std::get_if<int>(&v)), int *);\r\n    assert(*std::get_if<int>(&v) == 42);\r\n    assert(std::get_if<const long>(&v) == nullptr);\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    V v(42l);\r\n    ASSERT_SAME_TYPE(decltype(std::get_if<const long>(&v)), const long *);\r\n    assert(*std::get_if<const long>(&v) == 42);\r\n    assert(std::get_if<int>(&v) == nullptr);\r\n  }\r\n}\r\n\r\nint run_test() {\r\n  test_const_get_if();\r\n  test_get_if();\r\n\r\n  return 0;\r\n}\r\n} // namespace get::get_if_type\r\n// -- END: test/std/utilities/variant/variant.get/get_if_type.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.get/get_index.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <size_t I, class... Types>\r\n//   constexpr variant_alternative_t<I, variant<Types...>>&\r\n//   get(variant<Types...>& v);\r\n// template <size_t I, class... Types>\r\n//   constexpr variant_alternative_t<I, variant<Types...>>&&\r\n//   get(variant<Types...>&& v);\r\n// template <size_t I, class... Types>\r\n//   constexpr variant_alternative_t<I, variant<Types...>> const& get(const\r\n//   variant<Types...>& v);\r\n// template <size_t I, class... Types>\r\n//  constexpr variant_alternative_t<I, variant<Types...>> const&& get(const\r\n//  variant<Types...>&& v);\r\n\r\n#include \"test_macros.h\"\r\n#include \"test_workarounds.h\"\r\n#include \"variant_test_helpers.h\"\r\n#include <cassert>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <variant>\r\n\r\nnamespace get::get_index {\r\nvoid test_const_lvalue_get() {\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    constexpr V v(42);\r\n    ASSERT_NOT_NOEXCEPT(std::get<0>(v));\r\n    ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &);\r\n    static_assert(std::get<0>(v) == 42, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    const V v(42);\r\n    ASSERT_NOT_NOEXCEPT(std::get<0>(v));\r\n    ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &);\r\n    assert(std::get<0>(v) == 42);\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    constexpr V v(42l);\r\n    ASSERT_NOT_NOEXCEPT(std::get<1>(v));\r\n    ASSERT_SAME_TYPE(decltype(std::get<1>(v)), const long &);\r\n    static_assert(std::get<1>(v) == 42, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    const V v(42l);\r\n    ASSERT_NOT_NOEXCEPT(std::get<1>(v));\r\n    ASSERT_SAME_TYPE(decltype(std::get<1>(v)), const long &);\r\n    assert(std::get<1>(v) == 42);\r\n  }\r\n}\r\n\r\nvoid test_lvalue_get() {\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    V v(42);\r\n    ASSERT_NOT_NOEXCEPT(std::get<0>(v));\r\n    ASSERT_SAME_TYPE(decltype(std::get<0>(v)), int &);\r\n    assert(std::get<0>(v) == 42);\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    V v(42l);\r\n    ASSERT_SAME_TYPE(decltype(std::get<1>(v)), const long &);\r\n    assert(std::get<1>(v) == 42);\r\n  }\r\n}\r\n\r\nvoid test_rvalue_get() {\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    V v(42);\r\n    ASSERT_NOT_NOEXCEPT(std::get<0>(std::move(v)));\r\n    ASSERT_SAME_TYPE(decltype(std::get<0>(std::move(v))), int &&);\r\n    assert(std::get<0>(std::move(v)) == 42);\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    V v(42l);\r\n    ASSERT_SAME_TYPE(decltype(std::get<1>(std::move(v))), const long &&);\r\n    assert(std::get<1>(std::move(v)) == 42);\r\n  }\r\n}\r\n\r\nvoid test_const_rvalue_get() {\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    const V v(42);\r\n    ASSERT_NOT_NOEXCEPT(std::get<0>(std::move(v)));\r\n    ASSERT_SAME_TYPE(decltype(std::get<0>(std::move(v))), const int &&);\r\n    assert(std::get<0>(std::move(v)) == 42);\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    const V v(42l);\r\n    ASSERT_SAME_TYPE(decltype(std::get<1>(std::move(v))), const long &&);\r\n    assert(std::get<1>(std::move(v)) == 42);\r\n  }\r\n}\r\n\r\ntemplate <std::size_t I> using Idx = std::integral_constant<std::size_t, I>;\r\n\r\nvoid test_throws_for_all_value_categories() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  using V = std::variant<int, long>;\r\n  V v0(42);\r\n  const V &cv0 = v0;\r\n  assert(v0.index() == 0);\r\n  V v1(42l);\r\n  const V &cv1 = v1;\r\n  assert(v1.index() == 1);\r\n  std::integral_constant<std::size_t, 0> zero;\r\n  std::integral_constant<std::size_t, 1> one;\r\n  auto test = [](auto idx, auto &&v) {\r\n    using Idx = decltype(idx);\r\n    try {\r\n      TEST_IGNORE_NODISCARD std::get<Idx::value>(std::forward<decltype(v)>(v));\r\n    } catch (const std::bad_variant_access &) {\r\n      return true;\r\n    } catch (...) { /* ... */\r\n    }\r\n    return false;\r\n  };\r\n  { // lvalue test cases\r\n    assert(test(one, v0));\r\n    assert(test(zero, v1));\r\n  }\r\n  { // const lvalue test cases\r\n    assert(test(one, cv0));\r\n    assert(test(zero, cv1));\r\n  }\r\n  { // rvalue test cases\r\n    assert(test(one, std::move(v0)));\r\n    assert(test(zero, std::move(v1)));\r\n  }\r\n  { // const rvalue test cases\r\n    assert(test(one, std::move(cv0)));\r\n    assert(test(zero, std::move(cv1)));\r\n  }\r\n#endif\r\n}\r\n\r\nint run_test() {\r\n  test_const_lvalue_get();\r\n  test_lvalue_get();\r\n  test_rvalue_get();\r\n  test_const_rvalue_get();\r\n  test_throws_for_all_value_categories();\r\n\r\n  return 0;\r\n}\r\n} // namespace get::get_index\r\n// -- END: test/std/utilities/variant/variant.get/get_index.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.get/get_type.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class T, class... Types> constexpr T& get(variant<Types...>& v);\r\n// template <class T, class... Types> constexpr T&& get(variant<Types...>&& v);\r\n// template <class T, class... Types> constexpr const T& get(const\r\n// variant<Types...>& v);\r\n// template <class T, class... Types> constexpr const T&& get(const\r\n// variant<Types...>&& v);\r\n\r\n#include \"test_macros.h\"\r\n#include \"test_workarounds.h\"\r\n#include \"variant_test_helpers.h\"\r\n#include <cassert>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <variant>\r\n\r\nnamespace get::get_type {\r\nvoid test_const_lvalue_get() {\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    constexpr V v(42);\r\n    ASSERT_NOT_NOEXCEPT(std::get<int>(v));\r\n    ASSERT_SAME_TYPE(decltype(std::get<int>(v)), const int &);\r\n    static_assert(std::get<int>(v) == 42, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    const V v(42);\r\n    ASSERT_NOT_NOEXCEPT(std::get<int>(v));\r\n    ASSERT_SAME_TYPE(decltype(std::get<int>(v)), const int &);\r\n    assert(std::get<int>(v) == 42);\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    constexpr V v(42l);\r\n    ASSERT_NOT_NOEXCEPT(std::get<const long>(v));\r\n    ASSERT_SAME_TYPE(decltype(std::get<const long>(v)), const long &);\r\n    static_assert(std::get<const long>(v) == 42, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    const V v(42l);\r\n    ASSERT_NOT_NOEXCEPT(std::get<const long>(v));\r\n    ASSERT_SAME_TYPE(decltype(std::get<const long>(v)), const long &);\r\n    assert(std::get<const long>(v) == 42);\r\n  }\r\n}\r\n\r\nvoid test_lvalue_get() {\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    V v(42);\r\n    ASSERT_NOT_NOEXCEPT(std::get<int>(v));\r\n    ASSERT_SAME_TYPE(decltype(std::get<int>(v)), int &);\r\n    assert(std::get<int>(v) == 42);\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    V v(42l);\r\n    ASSERT_SAME_TYPE(decltype(std::get<const long>(v)), const long &);\r\n    assert(std::get<const long>(v) == 42);\r\n  }\r\n}\r\n\r\nvoid test_rvalue_get() {\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    V v(42);\r\n    ASSERT_NOT_NOEXCEPT(std::get<int>(std::move(v)));\r\n    ASSERT_SAME_TYPE(decltype(std::get<int>(std::move(v))), int &&);\r\n    assert(std::get<int>(std::move(v)) == 42);\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    V v(42l);\r\n    ASSERT_SAME_TYPE(decltype(std::get<const long>(std::move(v))),\r\n                     const long &&);\r\n    assert(std::get<const long>(std::move(v)) == 42);\r\n  }\r\n}\r\n\r\nvoid test_const_rvalue_get() {\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    const V v(42);\r\n    ASSERT_NOT_NOEXCEPT(std::get<int>(std::move(v)));\r\n    ASSERT_SAME_TYPE(decltype(std::get<int>(std::move(v))), const int &&);\r\n    assert(std::get<int>(std::move(v)) == 42);\r\n  }\r\n  {\r\n    using V = std::variant<int, const long>;\r\n    const V v(42l);\r\n    ASSERT_SAME_TYPE(decltype(std::get<const long>(std::move(v))),\r\n                     const long &&);\r\n    assert(std::get<const long>(std::move(v)) == 42);\r\n  }\r\n}\r\n\r\ntemplate <class Tp> struct identity { using type = Tp; };\r\n\r\nvoid test_throws_for_all_value_categories() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  using V = std::variant<int, long>;\r\n  V v0(42);\r\n  const V &cv0 = v0;\r\n  assert(v0.index() == 0);\r\n  V v1(42l);\r\n  const V &cv1 = v1;\r\n  assert(v1.index() == 1);\r\n  identity<int> zero;\r\n  identity<long> one;\r\n  auto test = [](auto idx, auto &&v) {\r\n    using Idx = decltype(idx);\r\n    try {\r\n      TEST_IGNORE_NODISCARD std::get<typename Idx::type>(std::forward<decltype(v)>(v));\r\n    } catch (const std::bad_variant_access &) {\r\n      return true;\r\n    } catch (...) { /* ... */\r\n    }\r\n    return false;\r\n  };\r\n  { // lvalue test cases\r\n    assert(test(one, v0));\r\n    assert(test(zero, v1));\r\n  }\r\n  { // const lvalue test cases\r\n    assert(test(one, cv0));\r\n    assert(test(zero, cv1));\r\n  }\r\n  { // rvalue test cases\r\n    assert(test(one, std::move(v0)));\r\n    assert(test(zero, std::move(v1)));\r\n  }\r\n  { // const rvalue test cases\r\n    assert(test(one, std::move(cv0)));\r\n    assert(test(zero, std::move(cv1)));\r\n  }\r\n#endif\r\n}\r\n\r\nint run_test() {\r\n  test_const_lvalue_get();\r\n  test_lvalue_get();\r\n  test_rvalue_get();\r\n  test_const_rvalue_get();\r\n  test_throws_for_all_value_categories();\r\n\r\n  return 0;\r\n}\r\n} // namespace get::get_type\r\n// -- END: test/std/utilities/variant/variant.get/get_type.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.get/holds_alternative.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class T, class... Types>\r\n// constexpr bool holds_alternative(const variant<Types...>& v) noexcept;\r\n\r\n#include \"test_macros.h\"\r\n#include <variant>\r\n\r\nnamespace get::holds_alternative {\r\nint run_test() {\r\n  {\r\n    using V = std::variant<int>;\r\n    constexpr V v;\r\n    static_assert(std::holds_alternative<int>(v), \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, long>;\r\n    constexpr V v;\r\n    static_assert(std::holds_alternative<int>(v), \"\");\r\n    static_assert(!std::holds_alternative<long>(v), \"\");\r\n  }\r\n  { // noexcept test\r\n    using V = std::variant<int>;\r\n    const V v;\r\n    ASSERT_NOEXCEPT(std::holds_alternative<int>(v));\r\n  }\r\n\r\n  return 0;\r\n}\r\n} // namespace get::holds_alternative\r\n// -- END: test/std/utilities/variant/variant.get/holds_alternative.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.hash/enabled_hash.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// Test that <variant> provides all of the arithmetic, enum, and pointer\r\n// hash specializations.\r\n\r\n#include <variant>\r\n\r\n#include \"poisoned_hash_helper.h\"\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace hash::enabled_hash {\r\nint run_test() {\r\n  test_library_hash_specializations_available();\r\n\r\n  return 0;\r\n}\r\n} // namespace hash::enabled_hash\r\n// -- END: test/std/utilities/variant/variant.hash/enabled_hash.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.hash/hash.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class... Types> struct hash<variant<Types...>>;\r\n// template <> struct hash<monostate>;\r\n\r\n#include <cassert>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n#include \"poisoned_hash_helper.h\"\r\n\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\nnamespace std {\r\ntemplate <> struct hash<::MakeEmptyT> {\r\n  std::size_t operator()(const ::MakeEmptyT &) const {\r\n    assert(false);\r\n    return 0;\r\n  }\r\n};\r\n}\r\n#endif\r\n\r\nnamespace hash {\r\nvoid test_hash_variant() {\r\n  {\r\n    using V = std::variant<int, long, int>;\r\n    using H = std::hash<V>;\r\n    const V v(std::in_place_index<0>, 42);\r\n    const V v_copy = v;\r\n    V v2(std::in_place_index<0>, 100);\r\n    const H h{};\r\n    assert(h(v) == h(v));\r\n    assert(h(v) != h(v2));\r\n    assert(h(v) == h(v_copy));\r\n    {\r\n      ASSERT_SAME_TYPE(decltype(h(v)), std::size_t);\r\n      static_assert(std::is_copy_constructible<H>::value, \"\");\r\n    }\r\n  }\r\n  {\r\n    using V = std::variant<std::monostate, int, long, const char *>;\r\n    using H = std::hash<V>;\r\n    const char *str = \"hello\";\r\n    const V v0;\r\n    const V v0_other;\r\n    const V v1(42);\r\n    const V v1_other(100);\r\n    V v2(100l);\r\n    V v2_other(999l);\r\n    V v3(str);\r\n    V v3_other(\"not hello\");\r\n    const H h{};\r\n    assert(h(v0) == h(v0));\r\n    assert(h(v0) == h(v0_other));\r\n    assert(h(v1) == h(v1));\r\n    assert(h(v1) != h(v1_other));\r\n    assert(h(v2) == h(v2));\r\n    assert(h(v2) != h(v2_other));\r\n    assert(h(v3) == h(v3));\r\n    assert(h(v3) != h(v3_other));\r\n    assert(h(v0) != h(v1));\r\n    assert(h(v0) != h(v2));\r\n    assert(h(v0) != h(v3));\r\n    assert(h(v1) != h(v2));\r\n    assert(h(v1) != h(v3));\r\n    assert(h(v2) != h(v3));\r\n  }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    using H = std::hash<V>;\r\n    V v;\r\n    makeEmpty(v);\r\n    V v2;\r\n    makeEmpty(v2);\r\n    const H h{};\r\n    assert(h(v) == h(v2));\r\n  }\r\n#endif\r\n}\r\n\r\nvoid test_hash_monostate() {\r\n  using H = std::hash<std::monostate>;\r\n  const H h{};\r\n  std::monostate m1{};\r\n  const std::monostate m2{};\r\n  assert(h(m1) == h(m1));\r\n  assert(h(m2) == h(m2));\r\n  assert(h(m1) == h(m2));\r\n  {\r\n    ASSERT_SAME_TYPE(decltype(h(m1)), std::size_t);\r\n    ASSERT_NOEXCEPT(h(m1));\r\n    static_assert(std::is_copy_constructible<H>::value, \"\");\r\n  }\r\n  {\r\n    test_hash_enabled<std::monostate>();\r\n  }\r\n}\r\n\r\nvoid test_hash_variant_duplicate_elements() {\r\n    // Test that the index of the alternative participates in the hash value.\r\n    using V = std::variant<std::monostate, std::monostate>;\r\n    using H = std::hash<V>;\r\n    H h{};\r\n    const V v1(std::in_place_index<0>);\r\n    const V v2(std::in_place_index<1>);\r\n    assert(h(v1) == h(v1));\r\n    assert(h(v2) == h(v2));\r\n    LIBCPP_ASSERT(h(v1) != h(v2));\r\n}\r\n\r\nstruct A {};\r\nstruct B {};\r\n} // namespace hash\r\n\r\nnamespace std {\r\n\r\ntemplate <>\r\nstruct hash<::hash::B> {\r\n  std::size_t operator()(::hash::B const&) const {\r\n    return 0;\r\n  }\r\n};\r\n\r\n}\r\n\r\nnamespace hash {\r\nvoid test_hash_variant_enabled() {\r\n  {\r\n    test_hash_enabled<std::variant<int> >();\r\n    test_hash_enabled<std::variant<int*, long, double, const int> >();\r\n  }\r\n  {\r\n    test_hash_disabled<std::variant<int, A>>();\r\n    test_hash_disabled<std::variant<const A, void*>>();\r\n  }\r\n  {\r\n    test_hash_enabled<std::variant<int, B>>();\r\n    test_hash_enabled<std::variant<const B, int>>();\r\n  }\r\n}\r\n\r\nint run_test() {\r\n  test_hash_variant();\r\n  test_hash_variant_duplicate_elements();\r\n  test_hash_monostate();\r\n  test_hash_variant_enabled();\r\n\r\n  return 0;\r\n}\r\n} // namespace hash\r\n// -- END: test/std/utilities/variant/variant.hash/hash.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.helpers/variant_alternative.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <size_t I, class T> struct variant_alternative; // undefined\r\n// template <size_t I, class T> struct variant_alternative<I, const T>;\r\n// template <size_t I, class T> struct variant_alternative<I, volatile T>;\r\n// template <size_t I, class T> struct variant_alternative<I, const volatile T>;\r\n// template <size_t I, class T>\r\n//   using variant_alternative_t = typename variant_alternative<I, T>::type;\r\n//\r\n// template <size_t I, class... Types>\r\n//    struct variant_alternative<I, variant<Types...>>;\r\n\r\n#include <memory>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n\r\nnamespace helpers::variant_alternative {\r\ntemplate <class V, std::size_t I, class E> void test() {\r\n  static_assert(\r\n      std::is_same_v<typename std::variant_alternative<I, V>::type, E>, \"\");\r\n  static_assert(\r\n      std::is_same_v<typename std::variant_alternative<I, const V>::type,\r\n                     const E>,\r\n      \"\");\r\n  static_assert(\r\n      std::is_same_v<typename std::variant_alternative<I, volatile V>::type,\r\n                     volatile E>,\r\n      \"\");\r\n  static_assert(\r\n      std::is_same_v<\r\n          typename std::variant_alternative<I, const volatile V>::type,\r\n          const volatile E>,\r\n      \"\");\r\n  static_assert(std::is_same_v<std::variant_alternative_t<I, V>, E>, \"\");\r\n  static_assert(std::is_same_v<std::variant_alternative_t<I, const V>, const E>,\r\n                \"\");\r\n  static_assert(\r\n      std::is_same_v<std::variant_alternative_t<I, volatile V>, volatile E>,\r\n      \"\");\r\n  static_assert(std::is_same_v<std::variant_alternative_t<I, const volatile V>,\r\n                               const volatile E>,\r\n                \"\");\r\n}\r\n\r\nint run_test() {\r\n  {\r\n    using V = std::variant<int, void *, const void *, long double>;\r\n    test<V, 0, int>();\r\n    test<V, 1, void *>();\r\n    test<V, 2, const void *>();\r\n    test<V, 3, long double>();\r\n  }\r\n\r\n  return 0;\r\n}\r\n} // namespace helpers::variant_alternative\r\n// -- END: test/std/utilities/variant/variant.helpers/variant_alternative.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.helpers/variant_size.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class T> struct variant_size; // undefined\r\n// template <class T> struct variant_size<const T>;\r\n// template <class T> struct variant_size<volatile T>;\r\n// template <class T> struct variant_size<const volatile T>;\r\n// template <class T> constexpr size_t variant_size_v\r\n//     = variant_size<T>::value;\r\n\r\n#include <memory>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace helpers::variant_size {\r\ntemplate <class V, std::size_t E> void test() {\r\n  static_assert(std::variant_size<V>::value == E, \"\");\r\n  static_assert(std::variant_size<const V>::value == E, \"\");\r\n  static_assert(std::variant_size<volatile V>::value == E, \"\");\r\n  static_assert(std::variant_size<const volatile V>::value == E, \"\");\r\n  static_assert(std::variant_size_v<V> == E, \"\");\r\n  static_assert(std::variant_size_v<const V> == E, \"\");\r\n  static_assert(std::variant_size_v<volatile V> == E, \"\");\r\n  static_assert(std::variant_size_v<const volatile V> == E, \"\");\r\n  static_assert(std::is_base_of<std::integral_constant<std::size_t, E>,\r\n                                std::variant_size<V>>::value,\r\n                \"\");\r\n};\r\n\r\nint run_test() {\r\n  test<std::variant<>, 0>();\r\n  test<std::variant<void *>, 1>();\r\n  test<std::variant<long, long, void *, double>, 4>();\r\n\r\n  return 0;\r\n}\r\n} // namespace helpers::variant_size\r\n// -- END: test/std/utilities/variant/variant.helpers/variant_size.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.monostate/monostate.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// struct monostate {};\r\n\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace monostate::properties {\r\nint run_test() {\r\n  using M = std::monostate;\r\n  static_assert(std::is_trivially_default_constructible<M>::value, \"\");\r\n  static_assert(std::is_trivially_copy_constructible<M>::value, \"\");\r\n  static_assert(std::is_trivially_copy_assignable<M>::value, \"\");\r\n  static_assert(std::is_trivially_destructible<M>::value, \"\");\r\n  constexpr M m{};\r\n  ((void)m);\r\n\r\n  return 0;\r\n}\r\n} // namespace monostate::properties\r\n// -- END: test/std/utilities/variant/variant.monostate/monostate.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.monostate.relops/relops.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// constexpr bool operator<(monostate, monostate) noexcept { return false; }\r\n// constexpr bool operator>(monostate, monostate) noexcept { return false; }\r\n// constexpr bool operator<=(monostate, monostate) noexcept { return true; }\r\n// constexpr bool operator>=(monostate, monostate) noexcept { return true; }\r\n// constexpr bool operator==(monostate, monostate) noexcept { return true; }\r\n// constexpr bool operator!=(monostate, monostate) noexcept { return false; }\r\n// constexpr strong_ordering operator<=>(monostate, monostate) noexcept { return strong_ordering::equal; } // C++20\r\n\r\n#include <cassert>\r\n#include <variant>\r\n\r\n#include \"test_comparisons.h\"\r\n#include \"test_macros.h\"\r\n\r\nnamespace monostate::relops {\r\nconstexpr bool test() {\r\n  using M = std::monostate;\r\n  constexpr M m1{};\r\n  constexpr M m2{};\r\n  assert(testComparisons(m1, m2, /*isEqual*/ true, /*isLess*/ false));\r\n  AssertComparisonsAreNoexcept<M>();\r\n\r\n#if TEST_STD_VER > 17\r\n  assert(testOrder(m1, m2, std::strong_ordering::equal));\r\n  AssertOrderAreNoexcept<M>();\r\n#endif // TEST_STD_VER > 17\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  test();\r\n  static_assert(test());\r\n\r\n  return 0;\r\n}\r\n} // namespace monostate::relops\r\n// -- END: test/std/utilities/variant/variant.monostate.relops/relops.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.relops/relops.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types>\r\n// constexpr bool\r\n// operator==(variant<Types...> const&, variant<Types...> const&) noexcept;\r\n//\r\n// template <class ...Types>\r\n// constexpr bool\r\n// operator!=(variant<Types...> const&, variant<Types...> const&) noexcept;\r\n//\r\n// template <class ...Types>\r\n// constexpr bool\r\n// operator<(variant<Types...> const&, variant<Types...> const&) noexcept;\r\n//\r\n// template <class ...Types>\r\n// constexpr bool\r\n// operator>(variant<Types...> const&, variant<Types...> const&) noexcept;\r\n//\r\n// template <class ...Types>\r\n// constexpr bool\r\n// operator<=(variant<Types...> const&, variant<Types...> const&) noexcept;\r\n//\r\n// template <class ...Types>\r\n// constexpr bool\r\n// operator>=(variant<Types...> const&, variant<Types...> const&) noexcept;\r\n\r\n#include <cassert>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace relops::relops {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\nstruct MakeEmptyT {\r\n  MakeEmptyT() = default;\r\n  MakeEmptyT(MakeEmptyT &&) { throw 42; }\r\n  MakeEmptyT &operator=(MakeEmptyT &&) { throw 42; }\r\n};\r\ninline bool operator==(const MakeEmptyT &, const MakeEmptyT &) {\r\n  assert(false);\r\n  return false;\r\n}\r\ninline bool operator!=(const MakeEmptyT &, const MakeEmptyT &) {\r\n  assert(false);\r\n  return false;\r\n}\r\ninline bool operator<(const MakeEmptyT &, const MakeEmptyT &) {\r\n  assert(false);\r\n  return false;\r\n}\r\ninline bool operator<=(const MakeEmptyT &, const MakeEmptyT &) {\r\n  assert(false);\r\n  return false;\r\n}\r\ninline bool operator>(const MakeEmptyT &, const MakeEmptyT &) {\r\n  assert(false);\r\n  return false;\r\n}\r\ninline bool operator>=(const MakeEmptyT &, const MakeEmptyT &) {\r\n  assert(false);\r\n  return false;\r\n}\r\n\r\ntemplate <class Variant> void makeEmpty(Variant &v) {\r\n  Variant v2(std::in_place_type<MakeEmptyT>);\r\n  try {\r\n    v = std::move(v2);\r\n    assert(false);\r\n  } catch (...) {\r\n    assert(v.valueless_by_exception());\r\n  }\r\n}\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n\r\nstruct MyBool {\r\n  bool value;\r\n  constexpr explicit MyBool(bool v) : value(v) {}\r\n  constexpr operator bool() const noexcept { return value; }\r\n};\r\n\r\nstruct ComparesToMyBool {\r\n  int value = 0;\r\n};\r\ninline constexpr MyBool operator==(const ComparesToMyBool& LHS, const ComparesToMyBool& RHS) noexcept {\r\n  return MyBool(LHS.value == RHS.value);\r\n}\r\ninline constexpr MyBool operator!=(const ComparesToMyBool& LHS, const ComparesToMyBool& RHS) noexcept {\r\n  return MyBool(LHS.value != RHS.value);\r\n}\r\ninline constexpr MyBool operator<(const ComparesToMyBool& LHS, const ComparesToMyBool& RHS) noexcept {\r\n  return MyBool(LHS.value < RHS.value);\r\n}\r\ninline constexpr MyBool operator<=(const ComparesToMyBool& LHS, const ComparesToMyBool& RHS) noexcept {\r\n  return MyBool(LHS.value <= RHS.value);\r\n}\r\ninline constexpr MyBool operator>(const ComparesToMyBool& LHS, const ComparesToMyBool& RHS) noexcept {\r\n  return MyBool(LHS.value > RHS.value);\r\n}\r\ninline constexpr MyBool operator>=(const ComparesToMyBool& LHS, const ComparesToMyBool& RHS) noexcept {\r\n  return MyBool(LHS.value >= RHS.value);\r\n}\r\n\r\ntemplate <class T1, class T2>\r\nvoid test_equality_basic() {\r\n  {\r\n    using V = std::variant<T1, T2>;\r\n    constexpr V v1(std::in_place_index<0>, T1{42});\r\n    constexpr V v2(std::in_place_index<0>, T1{42});\r\n    static_assert(v1 == v2, \"\");\r\n    static_assert(v2 == v1, \"\");\r\n    static_assert(!(v1 != v2), \"\");\r\n    static_assert(!(v2 != v1), \"\");\r\n  }\r\n  {\r\n    using V = std::variant<T1, T2>;\r\n    constexpr V v1(std::in_place_index<0>, T1{42});\r\n    constexpr V v2(std::in_place_index<0>, T1{43});\r\n    static_assert(!(v1 == v2), \"\");\r\n    static_assert(!(v2 == v1), \"\");\r\n    static_assert(v1 != v2, \"\");\r\n    static_assert(v2 != v1, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<T1, T2>;\r\n    constexpr V v1(std::in_place_index<0>, T1{42});\r\n    constexpr V v2(std::in_place_index<1>, T2{42});\r\n    static_assert(!(v1 == v2), \"\");\r\n    static_assert(!(v2 == v1), \"\");\r\n    static_assert(v1 != v2, \"\");\r\n    static_assert(v2 != v1, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<T1, T2>;\r\n    constexpr V v1(std::in_place_index<1>, T2{42});\r\n    constexpr V v2(std::in_place_index<1>, T2{42});\r\n    static_assert(v1 == v2, \"\");\r\n    static_assert(v2 == v1, \"\");\r\n    static_assert(!(v1 != v2), \"\");\r\n    static_assert(!(v2 != v1), \"\");\r\n  }\r\n}\r\n\r\nvoid test_equality() {\r\n  test_equality_basic<int, long>();\r\n  test_equality_basic<ComparesToMyBool, int>();\r\n  test_equality_basic<int, ComparesToMyBool>();\r\n  test_equality_basic<ComparesToMyBool, ComparesToMyBool>();\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    V v1;\r\n    V v2;\r\n    makeEmpty(v2);\r\n    assert(!(v1 == v2));\r\n    assert(!(v2 == v1));\r\n    assert(v1 != v2);\r\n    assert(v2 != v1);\r\n  }\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    V v1;\r\n    makeEmpty(v1);\r\n    V v2;\r\n    assert(!(v1 == v2));\r\n    assert(!(v2 == v1));\r\n    assert(v1 != v2);\r\n    assert(v2 != v1);\r\n  }\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    V v1;\r\n    makeEmpty(v1);\r\n    V v2;\r\n    makeEmpty(v2);\r\n    assert(v1 == v2);\r\n    assert(v2 == v1);\r\n    assert(!(v1 != v2));\r\n    assert(!(v2 != v1));\r\n  }\r\n#endif\r\n}\r\n\r\ntemplate <class Var>\r\nconstexpr bool test_less(const Var &l, const Var &r, bool expect_less,\r\n                         bool expect_greater) {\r\n  static_assert(std::is_same_v<decltype(l < r), bool>, \"\");\r\n  static_assert(std::is_same_v<decltype(l <= r), bool>, \"\");\r\n  static_assert(std::is_same_v<decltype(l > r), bool>, \"\");\r\n  static_assert(std::is_same_v<decltype(l >= r), bool>, \"\");\r\n\r\n  return ((l < r) == expect_less) && (!(l >= r) == expect_less) &&\r\n         ((l > r) == expect_greater) && (!(l <= r) == expect_greater);\r\n}\r\n\r\ntemplate <class T1, class T2>\r\nvoid test_relational_basic() {\r\n  { // same index, same value\r\n    using V = std::variant<T1, T2>;\r\n    constexpr V v1(std::in_place_index<0>, T1{1});\r\n    constexpr V v2(std::in_place_index<0>, T1{1});\r\n    static_assert(test_less(v1, v2, false, false), \"\");\r\n  }\r\n  { // same index, value < other_value\r\n    using V = std::variant<T1, T2>;\r\n    constexpr V v1(std::in_place_index<0>, T1{0});\r\n    constexpr V v2(std::in_place_index<0>, T1{1});\r\n    static_assert(test_less(v1, v2, true, false), \"\");\r\n  }\r\n  { // same index, value > other_value\r\n    using V = std::variant<T1, T2>;\r\n    constexpr V v1(std::in_place_index<0>, T1{1});\r\n    constexpr V v2(std::in_place_index<0>, T1{0});\r\n    static_assert(test_less(v1, v2, false, true), \"\");\r\n  }\r\n  { // LHS.index() < RHS.index()\r\n    using V = std::variant<T1, T2>;\r\n    constexpr V v1(std::in_place_index<0>, T1{0});\r\n    constexpr V v2(std::in_place_index<1>, T2{0});\r\n    static_assert(test_less(v1, v2, true, false), \"\");\r\n  }\r\n  { // LHS.index() > RHS.index()\r\n    using V = std::variant<T1, T2>;\r\n    constexpr V v1(std::in_place_index<1>, T2{0});\r\n    constexpr V v2(std::in_place_index<0>, T1{0});\r\n    static_assert(test_less(v1, v2, false, true), \"\");\r\n  }\r\n}\r\n\r\nvoid test_relational() {\r\n  test_relational_basic<int, long>();\r\n  test_relational_basic<ComparesToMyBool, int>();\r\n  test_relational_basic<int, ComparesToMyBool>();\r\n  test_relational_basic<ComparesToMyBool, ComparesToMyBool>();\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  { // LHS.index() < RHS.index(), RHS is empty\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    V v1;\r\n    V v2;\r\n    makeEmpty(v2);\r\n    assert(test_less(v1, v2, false, true));\r\n  }\r\n  { // LHS.index() > RHS.index(), LHS is empty\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    V v1;\r\n    makeEmpty(v1);\r\n    V v2;\r\n    assert(test_less(v1, v2, true, false));\r\n  }\r\n  { // LHS.index() == RHS.index(), LHS and RHS are empty\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    V v1;\r\n    makeEmpty(v1);\r\n    V v2;\r\n    makeEmpty(v2);\r\n    assert(test_less(v1, v2, false, false));\r\n  }\r\n#endif\r\n}\r\n\r\nint run_test() {\r\n  test_equality();\r\n  test_relational();\r\n\r\n  return 0;\r\n}\r\n} // namespace relops::relops\r\n// -- END: test/std/utilities/variant/variant.relops/relops.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.relops/three_way.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class... Types> class variant;\r\n\r\n// template <class... Types> requires (three_way_comparable<Types> && ...)\r\n//   constexpr std::common_comparison_category_t<\r\n//     std::compare_three_way_result_t<Types>...>\r\n//   operator<=>(const variant<Types...>& t, const variant<Types...>& u);\r\n\r\n#include <cassert>\r\n#include <limits>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n#include \"test_comparisons.h\"\r\n\r\nnamespace relops::three_way {\r\n#if _HAS_CXX20\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n// MakeEmptyT throws in operator=(&&), so we can move to it to create valueless-by-exception variants.\r\nstruct MakeEmptyT {\r\n  MakeEmptyT() = default;\r\n  MakeEmptyT(MakeEmptyT&&) { throw 42; }\r\n  MakeEmptyT& operator=(MakeEmptyT&&) { throw 42; }\r\n};\r\ninline bool operator==(const MakeEmptyT&, const MakeEmptyT&) {\r\n  assert(false);\r\n  return false;\r\n}\r\ninline std::weak_ordering operator<=>(const MakeEmptyT&, const MakeEmptyT&) {\r\n  assert(false);\r\n  return std::weak_ordering::equivalent;\r\n}\r\n\r\ntemplate <class Variant>\r\nvoid makeEmpty(Variant& v) {\r\n  Variant v2(std::in_place_type<MakeEmptyT>);\r\n  try {\r\n    v = std::move(v2);\r\n    assert(false);\r\n  } catch (...) {\r\n    assert(v.valueless_by_exception());\r\n  }\r\n}\r\n\r\nvoid test_empty() {\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    V v1;\r\n    V v2;\r\n    makeEmpty(v2);\r\n    assert(testOrder(v1, v2, std::weak_ordering::greater));\r\n  }\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    V v1;\r\n    makeEmpty(v1);\r\n    V v2;\r\n    assert(testOrder(v1, v2, std::weak_ordering::less));\r\n  }\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    V v1;\r\n    makeEmpty(v1);\r\n    V v2;\r\n    makeEmpty(v2);\r\n    assert(testOrder(v1, v2, std::weak_ordering::equivalent));\r\n  }\r\n}\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n\r\ntemplate <class T1, class T2, class Order>\r\nconstexpr bool test_with_types() {\r\n  using V = std::variant<T1, T2>;\r\n  AssertOrderReturn<Order, V>();\r\n  { // same index, same value\r\n    constexpr V v1(std::in_place_index<0>, T1{1});\r\n    constexpr V v2(std::in_place_index<0>, T1{1});\r\n    assert(testOrder(v1, v2, Order::equivalent));\r\n  }\r\n  { // same index, value < other_value\r\n    constexpr V v1(std::in_place_index<0>, T1{0});\r\n    constexpr V v2(std::in_place_index<0>, T1{1});\r\n    assert(testOrder(v1, v2, Order::less));\r\n  }\r\n  { // same index, value > other_value\r\n    constexpr V v1(std::in_place_index<0>, T1{1});\r\n    constexpr V v2(std::in_place_index<0>, T1{0});\r\n    assert(testOrder(v1, v2, Order::greater));\r\n  }\r\n  { // LHS.index() < RHS.index()\r\n    constexpr V v1(std::in_place_index<0>, T1{0});\r\n    constexpr V v2(std::in_place_index<1>, T2{0});\r\n    assert(testOrder(v1, v2, Order::less));\r\n  }\r\n  { // LHS.index() > RHS.index()\r\n    constexpr V v1(std::in_place_index<1>, T2{0});\r\n    constexpr V v2(std::in_place_index<0>, T1{0});\r\n    assert(testOrder(v1, v2, Order::greater));\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\nconstexpr bool test_three_way() {\r\n  assert((test_with_types<int, double, std::partial_ordering>()));\r\n  assert((test_with_types<int, long, std::strong_ordering>()));\r\n\r\n  {\r\n    using V              = std::variant<int, double>;\r\n    constexpr double nan = std::numeric_limits<double>::quiet_NaN();\r\n    {\r\n      constexpr V v1(std::in_place_type<int>, 1);\r\n      constexpr V v2(std::in_place_type<double>, nan);\r\n      assert(testOrder(v1, v2, std::partial_ordering::less));\r\n    }\r\n    {\r\n      constexpr V v1(std::in_place_type<double>, nan);\r\n      constexpr V v2(std::in_place_type<int>, 2);\r\n      assert(testOrder(v1, v2, std::partial_ordering::greater));\r\n    }\r\n#if !defined(__clang__) // TRANSITION, DevCom-1626139 (MSVC), EDG says \"floating-point values cannot be compared\"\r\n    if (!std::is_constant_evaluated())\r\n#endif // ^^^ workaround ^^^\r\n    {\r\n      constexpr V v1(std::in_place_type<double>, nan);\r\n      constexpr V v2(std::in_place_type<double>, nan);\r\n      assert(testOrder(v1, v2, std::partial_ordering::unordered));\r\n    }\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\n// SFINAE tests\r\ntemplate <class T, class U = T>\r\nconcept has_three_way_op = requires (T& t, U& u) { t <=> u; };\r\n\r\n// std::three_way_comparable is a more stringent requirement that demands\r\n// operator== and a few other things.\r\nusing std::three_way_comparable;\r\n\r\nstruct HasSimpleOrdering {\r\n  constexpr bool operator==(const HasSimpleOrdering&) const;\r\n  constexpr bool operator<(const HasSimpleOrdering&) const;\r\n};\r\n\r\nstruct HasOnlySpaceship {\r\n  constexpr bool operator==(const HasOnlySpaceship&) const = delete;\r\n  constexpr std::weak_ordering operator<=>(const HasOnlySpaceship&) const;\r\n};\r\n\r\n#ifdef __clang__ // TRANSITION, not yet investigated\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wundefined-inline\"\r\n#endif // ^^^ workaround ^^^\r\n\r\nstruct HasFullOrdering {\r\n  constexpr bool operator==(const HasFullOrdering&) const;\r\n  constexpr std::weak_ordering operator<=>(const HasFullOrdering&) const;\r\n};\r\n\r\n#ifdef __clang__ // TRANSITION, not yet investigated\r\n#pragma clang diagnostic pop\r\n#endif // ^^^ workaround ^^^\r\n\r\n// operator<=> must resolve the return types of all its union types'\r\n// operator<=>s to determine its own return type, so it is detectable by SFINAE\r\nstatic_assert(!has_three_way_op<HasSimpleOrdering>);\r\nstatic_assert(!has_three_way_op<std::variant<int, HasSimpleOrdering>>);\r\n\r\nstatic_assert(!three_way_comparable<HasSimpleOrdering>);\r\nstatic_assert(!three_way_comparable<std::variant<int, HasSimpleOrdering>>);\r\n\r\nstatic_assert(has_three_way_op<HasOnlySpaceship>);\r\nstatic_assert(!has_three_way_op<std::variant<int, HasOnlySpaceship>>);\r\n\r\nstatic_assert(!three_way_comparable<HasOnlySpaceship>);\r\nstatic_assert(!three_way_comparable<std::variant<int, HasOnlySpaceship>>);\r\n\r\nstatic_assert( has_three_way_op<HasFullOrdering>);\r\nstatic_assert( has_three_way_op<std::variant<int, HasFullOrdering>>);\r\n\r\nstatic_assert( three_way_comparable<HasFullOrdering>);\r\nstatic_assert( three_way_comparable<std::variant<int, HasFullOrdering>>);\r\n\r\nint run_test() {\r\n  test_three_way();\r\n  static_assert(test_three_way());\r\n\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  test_empty();\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n\r\n  return 0;\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\nint run_test() {\r\n  return 0;\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n} // namespace relops::three_way\r\n// -- END: test/std/utilities/variant/variant.relops/three_way.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.synopsis/variant_npos.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// constexpr size_t variant_npos = -1;\r\n\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace npos {\r\nint run_test() {\r\n  static_assert(std::variant_npos == static_cast<std::size_t>(-1), \"\");\r\n\r\n  return 0;\r\n}\r\n} // namespace npos\r\n// -- END: test/std/utilities/variant/variant.synopsis/variant_npos.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/implicit_ctad.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// Make sure that the implicitly-generated CTAD works.\r\n\r\n// We make sure that it is not ill-formed, however we still produce a warning for\r\n// this one because explicit construction from a variant using CTAD is ambiguous\r\n// (in the sense that the programmer intent is not clear).\r\n// ADDITIONAL_COMPILE_FLAGS(gcc-style-warnings): -Wno-ctad-maybe-unsupported\r\n\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace implicit_ctad {\r\nint run_test() {\r\n  // This is the motivating example from P0739R0\r\n  {\r\n    std::variant<int, double> v1(3);\r\n    std::variant v2 = v1;\r\n    ASSERT_SAME_TYPE(decltype(v2), std::variant<int, double>);\r\n  }\r\n\r\n  {\r\n    std::variant<int, double> v1(3);\r\n    std::variant v2 = std::variant(v1); // Technically valid, but intent is ambiguous!\r\n    ASSERT_SAME_TYPE(decltype(v2), std::variant<int, double>);\r\n  }\r\n\r\n  return 0;\r\n}\r\n} // namespace implicit_ctad\r\n// -- END: test/std/utilities/variant/variant.variant/implicit_ctad.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.assign/conv.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// template <class T>\r\n// variant& operator=(T&&) noexcept(see below);\r\n\r\n#include <variant>\r\n#include <string>\r\n#include <memory>\r\n\r\n#include \"variant_test_helpers.h\"\r\n\r\nnamespace assign::conv {\r\nint run_test()\r\n{\r\n  static_assert(!std::is_assignable<std::variant<int, int>, int>::value, \"\");\r\n  static_assert(!std::is_assignable<std::variant<long, long long>, int>::value, \"\");\r\n  static_assert(!std::is_assignable<std::variant<char>, int>::value, \"\");\r\n\r\n  static_assert(!std::is_assignable<std::variant<std::string, float>, int>::value, \"\");\r\n  static_assert(!std::is_assignable<std::variant<std::string, double>, int>::value, \"\");\r\n  static_assert(!std::is_assignable<std::variant<std::string, bool>, int>::value, \"\");\r\n\r\n  static_assert(!std::is_assignable<std::variant<int, bool>, decltype(\"meow\")>::value, \"\");\r\n  static_assert(!std::is_assignable<std::variant<int, const bool>, decltype(\"meow\")>::value, \"\");\r\n\r\n  static_assert(std::is_assignable<std::variant<bool>, std::true_type>::value, \"\");\r\n  static_assert(!std::is_assignable<std::variant<bool>, std::unique_ptr<char> >::value, \"\");\r\n  static_assert(std::is_assignable<std::variant<bool>, decltype(nullptr)>::value == is_permissive, \"\");\r\n\r\n  return 0;\r\n}\r\n} // namespace assign::conv\r\n// -- END: test/std/utilities/variant/variant.variant/variant.assign/conv.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.assign/copy.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// constexpr variant& operator=(variant const&);\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace assign::copy {\r\nstruct NoCopy {\r\n  NoCopy(const NoCopy&)            = delete;\r\n  NoCopy& operator=(const NoCopy&) = default;\r\n};\r\n\r\nstruct CopyOnly {\r\n  CopyOnly(const CopyOnly&)            = default;\r\n  CopyOnly(CopyOnly&&)                 = delete;\r\n  CopyOnly& operator=(const CopyOnly&) = default;\r\n  CopyOnly& operator=(CopyOnly&&)      = delete;\r\n};\r\n\r\nstruct MoveOnly {\r\n  MoveOnly(const MoveOnly&)            = delete;\r\n  MoveOnly(MoveOnly&&)                 = default;\r\n  MoveOnly& operator=(const MoveOnly&) = default;\r\n};\r\n\r\nstruct MoveOnlyNT {\r\n  MoveOnlyNT(const MoveOnlyNT&) = delete;\r\n  MoveOnlyNT(MoveOnlyNT&&) {}\r\n  MoveOnlyNT& operator=(const MoveOnlyNT&) = default;\r\n};\r\n\r\nstruct CopyAssign {\r\n  constexpr CopyAssign(int v, int* alv, int* cpy_ctr, int* cpy_assi, int* move_ctr, int* move_assi)\r\n      : value(v),\r\n        alive(alv),\r\n        copy_construct(cpy_ctr),\r\n        copy_assign(cpy_assi),\r\n        move_construct(move_ctr),\r\n        move_assign(move_assi) {\r\n    ++*alive;\r\n  }\r\n  constexpr CopyAssign(const CopyAssign& o)\r\n      : value(o.value),\r\n        alive(o.alive),\r\n        copy_construct(o.copy_construct),\r\n        copy_assign(o.copy_assign),\r\n        move_construct(o.move_construct),\r\n        move_assign(o.move_assign) {\r\n    ++*alive;\r\n    ++*copy_construct;\r\n  }\r\n  constexpr CopyAssign(CopyAssign&& o) noexcept\r\n      : value(o.value),\r\n        alive(o.alive),\r\n        copy_construct(o.copy_construct),\r\n        copy_assign(o.copy_assign),\r\n        move_construct(o.move_construct),\r\n        move_assign(o.move_assign) {\r\n    o.value = -1;\r\n    ++*alive;\r\n    ++*move_construct;\r\n  }\r\n  constexpr CopyAssign& operator=(const CopyAssign& o) {\r\n    value          = o.value;\r\n    alive          = o.alive;\r\n    copy_construct = o.copy_construct;\r\n    copy_assign    = o.copy_assign;\r\n    move_construct = o.move_construct;\r\n    move_assign    = o.move_assign;\r\n    ++*copy_assign;\r\n    return *this;\r\n  }\r\n  constexpr CopyAssign& operator=(CopyAssign&& o) noexcept {\r\n    value          = o.value;\r\n    alive          = o.alive;\r\n    copy_construct = o.copy_construct;\r\n    copy_assign    = o.copy_assign;\r\n    move_construct = o.move_construct;\r\n    move_assign    = o.move_assign;\r\n    o.value        = -1;\r\n    ++*move_assign;\r\n    return *this;\r\n  }\r\n  TEST_CONSTEXPR_CXX20 ~CopyAssign() { --*alive; }\r\n  int value;\r\n  int* alive;\r\n  int* copy_construct;\r\n  int* copy_assign;\r\n  int* move_construct;\r\n  int* move_assign;\r\n};\r\n\r\nstruct CopyMaybeThrows {\r\n  CopyMaybeThrows(const CopyMaybeThrows&);\r\n  CopyMaybeThrows& operator=(const CopyMaybeThrows&);\r\n};\r\nstruct CopyDoesThrow {\r\n  CopyDoesThrow(const CopyDoesThrow&) noexcept(false);\r\n  CopyDoesThrow& operator=(const CopyDoesThrow&) noexcept(false);\r\n};\r\n\r\nstruct NTCopyAssign {\r\n  constexpr NTCopyAssign(int v) : value(v) {}\r\n  NTCopyAssign(const NTCopyAssign&) = default;\r\n  NTCopyAssign(NTCopyAssign&&)      = default;\r\n  NTCopyAssign& operator=(const NTCopyAssign& that) {\r\n    value = that.value;\r\n    return *this;\r\n  };\r\n  NTCopyAssign& operator=(NTCopyAssign&&) = delete;\r\n  int value;\r\n};\r\n\r\nstatic_assert(!std::is_trivially_copy_assignable<NTCopyAssign>::value, \"\");\r\nstatic_assert(std::is_copy_assignable<NTCopyAssign>::value, \"\");\r\n\r\nstruct TCopyAssign {\r\n  constexpr TCopyAssign(int v) : value(v) {}\r\n  TCopyAssign(const TCopyAssign&)            = default;\r\n  TCopyAssign(TCopyAssign&&)                 = default;\r\n  TCopyAssign& operator=(const TCopyAssign&) = default;\r\n  TCopyAssign& operator=(TCopyAssign&&)      = delete;\r\n  int value;\r\n};\r\n\r\nstatic_assert(std::is_trivially_copy_assignable<TCopyAssign>::value, \"\");\r\n\r\nstruct TCopyAssignNTMoveAssign {\r\n  constexpr TCopyAssignNTMoveAssign(int v) : value(v) {}\r\n  TCopyAssignNTMoveAssign(const TCopyAssignNTMoveAssign&)            = default;\r\n  TCopyAssignNTMoveAssign(TCopyAssignNTMoveAssign&&)                 = default;\r\n  TCopyAssignNTMoveAssign& operator=(const TCopyAssignNTMoveAssign&) = default;\r\n  TCopyAssignNTMoveAssign& operator=(TCopyAssignNTMoveAssign&& that) {\r\n    value      = that.value;\r\n    that.value = -1;\r\n    return *this;\r\n  }\r\n  int value;\r\n};\r\n\r\nstatic_assert(std::is_trivially_copy_assignable_v<TCopyAssignNTMoveAssign>, \"\");\r\n\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\nstruct CopyThrows {\r\n  CopyThrows() = default;\r\n  CopyThrows(const CopyThrows&) { throw 42; }\r\n  CopyThrows& operator=(const CopyThrows&) { throw 42; }\r\n};\r\n\r\nstruct CopyCannotThrow {\r\n  static int alive;\r\n  CopyCannotThrow() { ++alive; }\r\n  CopyCannotThrow(const CopyCannotThrow&) noexcept { ++alive; }\r\n  CopyCannotThrow(CopyCannotThrow&&) noexcept { assert(false); }\r\n  CopyCannotThrow& operator=(const CopyCannotThrow&) noexcept = default;\r\n  CopyCannotThrow& operator=(CopyCannotThrow&&) noexcept {\r\n    assert(false);\r\n    return *this;\r\n  }\r\n};\r\n\r\nint CopyCannotThrow::alive = 0;\r\n\r\nstruct MoveThrows {\r\n  static int alive;\r\n  MoveThrows() { ++alive; }\r\n  MoveThrows(const MoveThrows&) { ++alive; }\r\n  MoveThrows(MoveThrows&&) { throw 42; }\r\n  MoveThrows& operator=(const MoveThrows&) { return *this; }\r\n  MoveThrows& operator=(MoveThrows&&) { throw 42; }\r\n  ~MoveThrows() { --alive; }\r\n};\r\n\r\nint MoveThrows::alive = 0;\r\n\r\nstruct MakeEmptyT {\r\n  static int alive;\r\n  MakeEmptyT() { ++alive; }\r\n  MakeEmptyT(const MakeEmptyT&) {\r\n    ++alive;\r\n    // Don't throw from the copy constructor since variant's assignment\r\n    // operator performs a copy before committing to the assignment.\r\n  }\r\n  MakeEmptyT(MakeEmptyT&&) { throw 42; }\r\n  MakeEmptyT& operator=(const MakeEmptyT&) { throw 42; }\r\n  MakeEmptyT& operator=(MakeEmptyT&&) { throw 42; }\r\n  ~MakeEmptyT() { --alive; }\r\n};\r\n\r\nint MakeEmptyT::alive = 0;\r\n\r\ntemplate <class Variant>\r\nvoid makeEmpty(Variant& v) {\r\n  Variant v2(std::in_place_type<MakeEmptyT>);\r\n  try {\r\n    v = std::move(v2);\r\n    assert(false);\r\n  } catch (...) {\r\n    assert(v.valueless_by_exception());\r\n  }\r\n}\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n\r\nconstexpr void test_copy_assignment_not_noexcept() {\r\n  {\r\n    using V = std::variant<CopyMaybeThrows>;\r\n    static_assert(!std::is_nothrow_copy_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, CopyDoesThrow>;\r\n    static_assert(!std::is_nothrow_copy_assignable<V>::value, \"\");\r\n  }\r\n}\r\n\r\nconstexpr void test_copy_assignment_sfinae() {\r\n  {\r\n    using V = std::variant<int, long>;\r\n    static_assert(std::is_copy_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, CopyOnly>;\r\n    static_assert(std::is_copy_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, NoCopy>;\r\n    static_assert(!std::is_copy_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, MoveOnly>;\r\n    static_assert(!std::is_copy_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, MoveOnlyNT>;\r\n    static_assert(!std::is_copy_assignable<V>::value, \"\");\r\n  }\r\n\r\n  // Make sure we properly propagate triviality (see P0602R4).\r\n  {\r\n    using V = std::variant<int, long>;\r\n    static_assert(std::is_trivially_copy_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, NTCopyAssign>;\r\n    static_assert(!std::is_trivially_copy_assignable<V>::value, \"\");\r\n    static_assert(std::is_copy_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, TCopyAssign>;\r\n    static_assert(std::is_trivially_copy_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, TCopyAssignNTMoveAssign>;\r\n    static_assert(std::is_trivially_copy_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, CopyOnly>;\r\n    static_assert(std::is_trivially_copy_assignable<V>::value, \"\");\r\n  }\r\n}\r\n\r\nvoid test_copy_assignment_empty_empty() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  using MET = MakeEmptyT;\r\n  {\r\n    using V = std::variant<int, long, MET>;\r\n    V v1(std::in_place_index<0>);\r\n    makeEmpty(v1);\r\n    V v2(std::in_place_index<0>);\r\n    makeEmpty(v2);\r\n    V& vref = (v1 = v2);\r\n    assert(&vref == &v1);\r\n    assert(v1.valueless_by_exception());\r\n    assert(v1.index() == std::variant_npos);\r\n  }\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n}\r\n\r\nvoid test_copy_assignment_non_empty_empty() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  using MET = MakeEmptyT;\r\n  {\r\n    using V = std::variant<int, MET>;\r\n    V v1(std::in_place_index<0>, 42);\r\n    V v2(std::in_place_index<0>);\r\n    makeEmpty(v2);\r\n    V& vref = (v1 = v2);\r\n    assert(&vref == &v1);\r\n    assert(v1.valueless_by_exception());\r\n    assert(v1.index() == std::variant_npos);\r\n  }\r\n  {\r\n    using V = std::variant<int, MET, std::string>;\r\n    V v1(std::in_place_index<2>, \"hello\");\r\n    V v2(std::in_place_index<0>);\r\n    makeEmpty(v2);\r\n    V& vref = (v1 = v2);\r\n    assert(&vref == &v1);\r\n    assert(v1.valueless_by_exception());\r\n    assert(v1.index() == std::variant_npos);\r\n  }\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n}\r\n\r\nvoid test_copy_assignment_empty_non_empty() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  using MET = MakeEmptyT;\r\n  {\r\n    using V = std::variant<int, MET>;\r\n    V v1(std::in_place_index<0>);\r\n    makeEmpty(v1);\r\n    V v2(std::in_place_index<0>, 42);\r\n    V& vref = (v1 = v2);\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 0);\r\n    assert(std::get<0>(v1) == 42);\r\n  }\r\n  {\r\n    using V = std::variant<int, MET, std::string>;\r\n    V v1(std::in_place_index<0>);\r\n    makeEmpty(v1);\r\n    V v2(std::in_place_type<std::string>, \"hello\");\r\n    V& vref = (v1 = v2);\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 2);\r\n    assert(std::get<2>(v1) == \"hello\");\r\n  }\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n}\r\n\r\ntemplate <typename T>\r\nstruct Result {\r\n  std::size_t index;\r\n  T value;\r\n};\r\n\r\nTEST_CONSTEXPR_CXX20 void test_copy_assignment_same_index() {\r\n  {\r\n    using V = std::variant<int>;\r\n    V v1(43);\r\n    V v2(42);\r\n    V& vref = (v1 = v2);\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 0);\r\n    assert(std::get<0>(v1) == 42);\r\n  }\r\n  {\r\n    using V = std::variant<int, long, unsigned>;\r\n    V v1(43l);\r\n    V v2(42l);\r\n    V& vref = (v1 = v2);\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 1);\r\n    assert(std::get<1>(v1) == 42);\r\n  }\r\n  {\r\n    using V            = std::variant<int, CopyAssign, unsigned>;\r\n    int alive          = 0;\r\n    int copy_construct = 0;\r\n    int copy_assign    = 0;\r\n    int move_construct = 0;\r\n    int move_assign    = 0;\r\n    V v1(std::in_place_type<CopyAssign>, 43, &alive, &copy_construct, &copy_assign, &move_construct, &move_assign);\r\n    V v2(std::in_place_type<CopyAssign>, 42, &alive, &copy_construct, &copy_assign, &move_construct, &move_assign);\r\n    V& vref = (v1 = v2);\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 1);\r\n    assert(std::get<1>(v1).value == 42);\r\n    assert(copy_construct == 0);\r\n    assert(move_construct == 0);\r\n    assert(copy_assign == 1);\r\n  }\r\n\r\n  // Make sure we properly propagate triviality, which implies constexpr-ness (see P0602R4).\r\n  {\r\n    struct {\r\n      constexpr Result<int> operator()() const {\r\n        using V = std::variant<int>;\r\n        V v(43);\r\n        V v2(42);\r\n        v = v2;\r\n        return {v.index(), std::get<0>(v)};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 0, \"\");\r\n    static_assert(result.value == 42, \"\");\r\n  }\r\n  {\r\n    struct {\r\n      constexpr Result<long> operator()() const {\r\n        using V = std::variant<int, long, unsigned>;\r\n        V v(43l);\r\n        V v2(42l);\r\n        v = v2;\r\n        return {v.index(), std::get<1>(v)};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 1, \"\");\r\n    static_assert(result.value == 42l, \"\");\r\n  }\r\n  {\r\n    struct {\r\n      constexpr Result<int> operator()() const {\r\n        using V = std::variant<int, TCopyAssign, unsigned>;\r\n        V v(std::in_place_type<TCopyAssign>, 43);\r\n        V v2(std::in_place_type<TCopyAssign>, 42);\r\n        v = v2;\r\n        return {v.index(), std::get<1>(v).value};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 1, \"\");\r\n    static_assert(result.value == 42, \"\");\r\n  }\r\n  {\r\n    struct {\r\n      constexpr Result<int> operator()() const {\r\n        using V = std::variant<int, TCopyAssignNTMoveAssign, unsigned>;\r\n        V v(std::in_place_type<TCopyAssignNTMoveAssign>, 43);\r\n        V v2(std::in_place_type<TCopyAssignNTMoveAssign>, 42);\r\n        v = v2;\r\n        return {v.index(), std::get<1>(v).value};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 1, \"\");\r\n    static_assert(result.value == 42, \"\");\r\n  }\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 void test_copy_assignment_different_index() {\r\n  {\r\n    using V = std::variant<int, long, unsigned>;\r\n    V v1(43);\r\n    V v2(42l);\r\n    V& vref = (v1 = v2);\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 1);\r\n    assert(std::get<1>(v1) == 42);\r\n  }\r\n  {\r\n    using V            = std::variant<int, CopyAssign, unsigned>;\r\n    int alive          = 0;\r\n    int copy_construct = 0;\r\n    int copy_assign    = 0;\r\n    int move_construct = 0;\r\n    int move_assign    = 0;\r\n    V v1(std::in_place_type<unsigned>, 43u);\r\n    V v2(std::in_place_type<CopyAssign>, 42, &alive, &copy_construct, &copy_assign, &move_construct, &move_assign);\r\n    assert(copy_construct == 0);\r\n    assert(move_construct == 0);\r\n    assert(alive == 1);\r\n    V& vref = (v1 = v2);\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 1);\r\n    assert(std::get<1>(v1).value == 42);\r\n    assert(alive == 2);\r\n    assert(copy_construct == 1);\r\n    assert(move_construct == 1);\r\n    assert(copy_assign == 0);\r\n  }\r\n\r\n  // Make sure we properly propagate triviality, which implies constexpr-ness (see P0602R4).\r\n  {\r\n    struct {\r\n      constexpr Result<long> operator()() const {\r\n        using V = std::variant<int, long, unsigned>;\r\n        V v(43);\r\n        V v2(42l);\r\n        v = v2;\r\n        return {v.index(), std::get<1>(v)};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 1, \"\");\r\n    static_assert(result.value == 42l, \"\");\r\n  }\r\n  {\r\n    struct {\r\n      constexpr Result<int> operator()() const {\r\n        using V = std::variant<int, TCopyAssign, unsigned>;\r\n        V v(std::in_place_type<unsigned>, 43u);\r\n        V v2(std::in_place_type<TCopyAssign>, 42);\r\n        v = v2;\r\n        return {v.index(), std::get<1>(v).value};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 1, \"\");\r\n    static_assert(result.value == 42, \"\");\r\n  }\r\n}\r\n\r\nvoid test_assignment_throw() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  using MET = MakeEmptyT;\r\n  // same index\r\n  {\r\n    using V = std::variant<int, MET, std::string>;\r\n    V v1(std::in_place_type<MET>);\r\n    MET& mref = std::get<1>(v1);\r\n    V v2(std::in_place_type<MET>);\r\n    try {\r\n      v1 = v2;\r\n      assert(false);\r\n    } catch (...) {\r\n    }\r\n    assert(v1.index() == 1);\r\n    assert(&std::get<1>(v1) == &mref);\r\n  }\r\n\r\n  // difference indices\r\n  {\r\n    using V = std::variant<int, CopyThrows, std::string>;\r\n    V v1(std::in_place_type<std::string>, \"hello\");\r\n    V v2(std::in_place_type<CopyThrows>);\r\n    try {\r\n      v1 = v2;\r\n      assert(false);\r\n    } catch (...) { /* ... */\r\n    }\r\n    // Test that copy construction is used directly if move construction may throw,\r\n    // resulting in a valueless variant if copy throws.\r\n    assert(v1.valueless_by_exception());\r\n  }\r\n  {\r\n    using V = std::variant<int, MoveThrows, std::string>;\r\n    V v1(std::in_place_type<std::string>, \"hello\");\r\n    V v2(std::in_place_type<MoveThrows>);\r\n    assert(MoveThrows::alive == 1);\r\n    // Test that copy construction is used directly if move construction may throw.\r\n    v1 = v2;\r\n    assert(v1.index() == 1);\r\n    assert(v2.index() == 1);\r\n    assert(MoveThrows::alive == 2);\r\n  }\r\n  {\r\n    // Test that direct copy construction is preferred when it cannot throw.\r\n    using V = std::variant<int, CopyCannotThrow, std::string>;\r\n    V v1(std::in_place_type<std::string>, \"hello\");\r\n    V v2(std::in_place_type<CopyCannotThrow>);\r\n    assert(CopyCannotThrow::alive == 1);\r\n    v1 = v2;\r\n    assert(v1.index() == 1);\r\n    assert(v2.index() == 1);\r\n    assert(CopyCannotThrow::alive == 2);\r\n  }\r\n  {\r\n    using V = std::variant<int, CopyThrows, std::string>;\r\n    V v1(std::in_place_type<CopyThrows>);\r\n    V v2(std::in_place_type<std::string>, \"hello\");\r\n    V& vref = (v1 = v2);\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 2);\r\n    assert(std::get<2>(v1) == \"hello\");\r\n    assert(v2.index() == 2);\r\n    assert(std::get<2>(v2) == \"hello\");\r\n  }\r\n  {\r\n    using V = std::variant<int, MoveThrows, std::string>;\r\n    V v1(std::in_place_type<MoveThrows>);\r\n    V v2(std::in_place_type<std::string>, \"hello\");\r\n    V& vref = (v1 = v2);\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 2);\r\n    assert(std::get<2>(v1) == \"hello\");\r\n    assert(v2.index() == 2);\r\n    assert(std::get<2>(v2) == \"hello\");\r\n  }\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n}\r\n\r\ntemplate <std::size_t NewIdx, class T, class ValueType>\r\nconstexpr void test_constexpr_assign_imp(T&& v, ValueType&& new_value) {\r\n  using Variant = std::decay_t<T>;\r\n  const Variant cp(std::forward<ValueType>(new_value));\r\n  v = cp;\r\n  assert(v.index() == NewIdx);\r\n  assert(std::get<NewIdx>(v) == std::get<NewIdx>(cp));\r\n}\r\n\r\nconstexpr void test_constexpr_copy_assignment_trivial() {\r\n  // Make sure we properly propagate triviality, which implies constexpr-ness (see P0602R4).\r\n  using V = std::variant<long, void*, int>;\r\n  static_assert(std::is_trivially_copyable<V>::value, \"\");\r\n  static_assert(std::is_trivially_copy_assignable<V>::value, \"\");\r\n  test_constexpr_assign_imp<0>(V(42l), 101l);\r\n  test_constexpr_assign_imp<0>(V(nullptr), 101l);\r\n  test_constexpr_assign_imp<1>(V(42l), nullptr);\r\n  test_constexpr_assign_imp<2>(V(42l), 101);\r\n}\r\n\r\nstruct NonTrivialCopyAssign {\r\n  int i = 0;\r\n  constexpr NonTrivialCopyAssign(int ii) : i(ii) {}\r\n  constexpr NonTrivialCopyAssign(const NonTrivialCopyAssign& other) : i(other.i) {}\r\n  constexpr NonTrivialCopyAssign& operator=(const NonTrivialCopyAssign& o) {\r\n    i = o.i;\r\n    return *this;\r\n  }\r\n  TEST_CONSTEXPR_CXX20 ~NonTrivialCopyAssign() = default;\r\n  friend constexpr bool operator==(const NonTrivialCopyAssign& x, const NonTrivialCopyAssign& y) { return x.i == y.i; }\r\n};\r\n\r\nconstexpr void test_constexpr_copy_assignment_non_trivial() {\r\n  // Make sure we properly propagate triviality, which implies constexpr-ness (see P0602R4).\r\n  using V = std::variant<long, void*, NonTrivialCopyAssign>;\r\n  static_assert(!std::is_trivially_copyable<V>::value, \"\");\r\n  static_assert(!std::is_trivially_copy_assignable<V>::value, \"\");\r\n  test_constexpr_assign_imp<0>(V(42l), 101l);\r\n  test_constexpr_assign_imp<0>(V(nullptr), 101l);\r\n  test_constexpr_assign_imp<1>(V(42l), nullptr);\r\n  test_constexpr_assign_imp<2>(V(42l), NonTrivialCopyAssign(5));\r\n  test_constexpr_assign_imp<2>(V(NonTrivialCopyAssign(3)), NonTrivialCopyAssign(5));\r\n}\r\n\r\nvoid non_constexpr_test() {\r\n  test_copy_assignment_empty_empty();\r\n  test_copy_assignment_non_empty_empty();\r\n  test_copy_assignment_empty_non_empty();\r\n  test_assignment_throw();\r\n}\r\n\r\nconstexpr bool cxx17_constexpr_test() {\r\n  test_copy_assignment_sfinae();\r\n  test_copy_assignment_not_noexcept();\r\n  test_constexpr_copy_assignment_trivial();\r\n\r\n  return true;\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 bool cxx20_constexpr_test() {\r\n  test_copy_assignment_same_index();\r\n  test_copy_assignment_different_index();\r\n  test_constexpr_copy_assignment_non_trivial();\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  non_constexpr_test();\r\n  cxx17_constexpr_test();\r\n  cxx20_constexpr_test();\r\n\r\n  static_assert(cxx17_constexpr_test());\r\n#if TEST_STD_VER >= 20\r\n  static_assert(cxx20_constexpr_test());\r\n#endif\r\n  return 0;\r\n}\r\n} // namespace assign::copy\r\n// -- END: test/std/utilities/variant/variant.variant/variant.assign/copy.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.assign/move.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// constexpr variant& operator=(variant&&) noexcept(see below);\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n\r\nnamespace assign::move {\r\nstruct NoCopy {\r\n  NoCopy(const NoCopy&)            = delete;\r\n  NoCopy& operator=(const NoCopy&) = default;\r\n};\r\n\r\nstruct CopyOnly {\r\n  CopyOnly(const CopyOnly&)            = default;\r\n  CopyOnly(CopyOnly&&)                 = delete;\r\n  CopyOnly& operator=(const CopyOnly&) = default;\r\n  CopyOnly& operator=(CopyOnly&&)      = delete;\r\n};\r\n\r\nstruct MoveOnly {\r\n  MoveOnly(const MoveOnly&)            = delete;\r\n  MoveOnly(MoveOnly&&)                 = default;\r\n  MoveOnly& operator=(const MoveOnly&) = delete;\r\n  MoveOnly& operator=(MoveOnly&&)      = default;\r\n};\r\n\r\nstruct MoveOnlyNT {\r\n  MoveOnlyNT(const MoveOnlyNT&) = delete;\r\n  MoveOnlyNT(MoveOnlyNT&&) {}\r\n  MoveOnlyNT& operator=(const MoveOnlyNT&) = delete;\r\n  MoveOnlyNT& operator=(MoveOnlyNT&&)      = default;\r\n};\r\n\r\nstruct MoveOnlyOddNothrow {\r\n  MoveOnlyOddNothrow(MoveOnlyOddNothrow&&) noexcept(false) {}\r\n  MoveOnlyOddNothrow(const MoveOnlyOddNothrow&)                = delete;\r\n  MoveOnlyOddNothrow& operator=(MoveOnlyOddNothrow&&) noexcept = default;\r\n  MoveOnlyOddNothrow& operator=(const MoveOnlyOddNothrow&)     = delete;\r\n};\r\n\r\nstruct MoveAssignOnly {\r\n  MoveAssignOnly(MoveAssignOnly&&)            = delete;\r\n  MoveAssignOnly& operator=(MoveAssignOnly&&) = default;\r\n};\r\n\r\nstruct MoveAssign {\r\n  constexpr MoveAssign(int v, int* move_ctor, int* move_assi)\r\n      : value(v), move_construct(move_ctor), move_assign(move_assi) {}\r\n  constexpr MoveAssign(MoveAssign&& o) : value(o.value), move_construct(o.move_construct), move_assign(o.move_assign) {\r\n    ++*move_construct;\r\n    o.value = -1;\r\n  }\r\n  constexpr MoveAssign& operator=(MoveAssign&& o) {\r\n    value          = o.value;\r\n    move_construct = o.move_construct;\r\n    move_assign    = o.move_assign;\r\n    ++*move_assign;\r\n    o.value = -1;\r\n    return *this;\r\n  }\r\n  int value;\r\n  int* move_construct;\r\n  int* move_assign;\r\n};\r\n\r\nstruct NTMoveAssign {\r\n  constexpr NTMoveAssign(int v) : value(v) {}\r\n  NTMoveAssign(const NTMoveAssign&)                 = default;\r\n  NTMoveAssign(NTMoveAssign&&)                      = default;\r\n  NTMoveAssign& operator=(const NTMoveAssign& that) = default;\r\n  NTMoveAssign& operator=(NTMoveAssign&& that) {\r\n    value      = that.value;\r\n    that.value = -1;\r\n    return *this;\r\n  };\r\n  int value;\r\n};\r\n\r\nstatic_assert(!std::is_trivially_move_assignable<NTMoveAssign>::value, \"\");\r\nstatic_assert(std::is_move_assignable<NTMoveAssign>::value, \"\");\r\n\r\nstruct TMoveAssign {\r\n  constexpr TMoveAssign(int v) : value(v) {}\r\n  TMoveAssign(const TMoveAssign&)            = delete;\r\n  TMoveAssign(TMoveAssign&&)                 = default;\r\n  TMoveAssign& operator=(const TMoveAssign&) = delete;\r\n  TMoveAssign& operator=(TMoveAssign&&)      = default;\r\n  int value;\r\n};\r\n\r\nstatic_assert(std::is_trivially_move_assignable<TMoveAssign>::value, \"\");\r\n\r\nstruct TMoveAssignNTCopyAssign {\r\n  constexpr TMoveAssignNTCopyAssign(int v) : value(v) {}\r\n  TMoveAssignNTCopyAssign(const TMoveAssignNTCopyAssign&) = default;\r\n  TMoveAssignNTCopyAssign(TMoveAssignNTCopyAssign&&)      = default;\r\n  TMoveAssignNTCopyAssign& operator=(const TMoveAssignNTCopyAssign& that) {\r\n    value = that.value;\r\n    return *this;\r\n  }\r\n  TMoveAssignNTCopyAssign& operator=(TMoveAssignNTCopyAssign&&) = default;\r\n  int value;\r\n};\r\n\r\nstatic_assert(std::is_trivially_move_assignable_v<TMoveAssignNTCopyAssign>, \"\");\r\n\r\nstruct TrivialCopyNontrivialMove {\r\n  TrivialCopyNontrivialMove(TrivialCopyNontrivialMove const&) = default;\r\n  TrivialCopyNontrivialMove(TrivialCopyNontrivialMove&&) noexcept {}\r\n  TrivialCopyNontrivialMove& operator=(TrivialCopyNontrivialMove const&) = default;\r\n  TrivialCopyNontrivialMove& operator=(TrivialCopyNontrivialMove&&) noexcept { return *this; }\r\n};\r\n\r\nstatic_assert(std::is_trivially_copy_assignable_v<TrivialCopyNontrivialMove>, \"\");\r\nstatic_assert(!std::is_trivially_move_assignable_v<TrivialCopyNontrivialMove>, \"\");\r\n\r\nconstexpr void test_move_assignment_noexcept() {\r\n  {\r\n    using V = std::variant<int>;\r\n    static_assert(std::is_nothrow_move_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<MoveOnly>;\r\n    static_assert(std::is_nothrow_move_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, long>;\r\n    static_assert(std::is_nothrow_move_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, MoveOnly>;\r\n    static_assert(std::is_nothrow_move_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<MoveOnlyNT>;\r\n    static_assert(!std::is_nothrow_move_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<MoveOnlyOddNothrow>;\r\n    static_assert(!std::is_nothrow_move_assignable<V>::value, \"\");\r\n  }\r\n}\r\n\r\nconstexpr void test_move_assignment_sfinae() {\r\n  {\r\n    using V = std::variant<int, long>;\r\n    static_assert(std::is_move_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, CopyOnly>;\r\n    static_assert(std::is_move_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, NoCopy>;\r\n    static_assert(!std::is_move_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, MoveOnly>;\r\n    static_assert(std::is_move_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, MoveOnlyNT>;\r\n    static_assert(std::is_move_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    // variant only provides move assignment when the types also provide\r\n    // a move constructor.\r\n    using V = std::variant<int, MoveAssignOnly>;\r\n    static_assert(!std::is_move_assignable<V>::value, \"\");\r\n  }\r\n\r\n  // Make sure we properly propagate triviality (see P0602R4).\r\n  {\r\n    using V = std::variant<int, long>;\r\n    static_assert(std::is_trivially_move_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, NTMoveAssign>;\r\n    static_assert(!std::is_trivially_move_assignable<V>::value, \"\");\r\n    static_assert(std::is_move_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, TMoveAssign>;\r\n    static_assert(std::is_trivially_move_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, TMoveAssignNTCopyAssign>;\r\n    static_assert(std::is_trivially_move_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, TrivialCopyNontrivialMove>;\r\n    static_assert(!std::is_trivially_move_assignable<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, CopyOnly>;\r\n    static_assert(std::is_trivially_move_assignable<V>::value, \"\");\r\n  }\r\n}\r\n\r\nvoid test_move_assignment_empty_empty() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  using MET = MakeEmptyT;\r\n  {\r\n    using V = std::variant<int, long, MET>;\r\n    V v1(std::in_place_index<0>);\r\n    makeEmpty(v1);\r\n    V v2(std::in_place_index<0>);\r\n    makeEmpty(v2);\r\n    V& vref = (v1 = std::move(v2));\r\n    assert(&vref == &v1);\r\n    assert(v1.valueless_by_exception());\r\n    assert(v1.index() == std::variant_npos);\r\n  }\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n}\r\n\r\nvoid test_move_assignment_non_empty_empty() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  using MET = MakeEmptyT;\r\n  {\r\n    using V = std::variant<int, MET>;\r\n    V v1(std::in_place_index<0>, 42);\r\n    V v2(std::in_place_index<0>);\r\n    makeEmpty(v2);\r\n    V& vref = (v1 = std::move(v2));\r\n    assert(&vref == &v1);\r\n    assert(v1.valueless_by_exception());\r\n    assert(v1.index() == std::variant_npos);\r\n  }\r\n  {\r\n    using V = std::variant<int, MET, std::string>;\r\n    V v1(std::in_place_index<2>, \"hello\");\r\n    V v2(std::in_place_index<0>);\r\n    makeEmpty(v2);\r\n    V& vref = (v1 = std::move(v2));\r\n    assert(&vref == &v1);\r\n    assert(v1.valueless_by_exception());\r\n    assert(v1.index() == std::variant_npos);\r\n  }\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n}\r\n\r\nvoid test_move_assignment_empty_non_empty() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  using MET = MakeEmptyT;\r\n  {\r\n    using V = std::variant<int, MET>;\r\n    V v1(std::in_place_index<0>);\r\n    makeEmpty(v1);\r\n    V v2(std::in_place_index<0>, 42);\r\n    V& vref = (v1 = std::move(v2));\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 0);\r\n    assert(std::get<0>(v1) == 42);\r\n  }\r\n  {\r\n    using V = std::variant<int, MET, std::string>;\r\n    V v1(std::in_place_index<0>);\r\n    makeEmpty(v1);\r\n    V v2(std::in_place_type<std::string>, \"hello\");\r\n    V& vref = (v1 = std::move(v2));\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 2);\r\n    assert(std::get<2>(v1) == \"hello\");\r\n  }\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n}\r\n\r\ntemplate <typename T>\r\nstruct Result {\r\n  std::size_t index;\r\n  T value;\r\n};\r\n\r\nTEST_CONSTEXPR_CXX20 void test_move_assignment_same_index() {\r\n  {\r\n    using V = std::variant<int>;\r\n    V v1(43);\r\n    V v2(42);\r\n    V& vref = (v1 = std::move(v2));\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 0);\r\n    assert(std::get<0>(v1) == 42);\r\n  }\r\n  {\r\n    using V = std::variant<int, long, unsigned>;\r\n    V v1(43l);\r\n    V v2(42l);\r\n    V& vref = (v1 = std::move(v2));\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 1);\r\n    assert(std::get<1>(v1) == 42);\r\n  }\r\n  {\r\n    using V            = std::variant<int, MoveAssign, unsigned>;\r\n    int move_construct = 0;\r\n    int move_assign    = 0;\r\n    V v1(std::in_place_type<MoveAssign>, 43, &move_construct, &move_assign);\r\n    V v2(std::in_place_type<MoveAssign>, 42, &move_construct, &move_assign);\r\n    V& vref = (v1 = std::move(v2));\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 1);\r\n    assert(std::get<1>(v1).value == 42);\r\n    assert(move_construct == 0);\r\n    assert(move_assign == 1);\r\n  }\r\n\r\n  // Make sure we properly propagate triviality, which implies constexpr-ness (see P0602R4).\r\n  {\r\n    struct {\r\n      constexpr Result<int> operator()() const {\r\n        using V = std::variant<int>;\r\n        V v(43);\r\n        V v2(42);\r\n        v = std::move(v2);\r\n        return {v.index(), std::get<0>(v)};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 0, \"\");\r\n    static_assert(result.value == 42, \"\");\r\n  }\r\n  {\r\n    struct {\r\n      constexpr Result<long> operator()() const {\r\n        using V = std::variant<int, long, unsigned>;\r\n        V v(43l);\r\n        V v2(42l);\r\n        v = std::move(v2);\r\n        return {v.index(), std::get<1>(v)};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 1, \"\");\r\n    static_assert(result.value == 42l, \"\");\r\n  }\r\n  {\r\n    struct {\r\n      constexpr Result<int> operator()() const {\r\n        using V = std::variant<int, TMoveAssign, unsigned>;\r\n        V v(std::in_place_type<TMoveAssign>, 43);\r\n        V v2(std::in_place_type<TMoveAssign>, 42);\r\n        v = std::move(v2);\r\n        return {v.index(), std::get<1>(v).value};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 1, \"\");\r\n    static_assert(result.value == 42, \"\");\r\n  }\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 void test_move_assignment_different_index() {\r\n  {\r\n    using V = std::variant<int, long, unsigned>;\r\n    V v1(43);\r\n    V v2(42l);\r\n    V& vref = (v1 = std::move(v2));\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 1);\r\n    assert(std::get<1>(v1) == 42);\r\n  }\r\n  {\r\n    using V            = std::variant<int, MoveAssign, unsigned>;\r\n    int move_construct = 0;\r\n    int move_assign    = 0;\r\n    V v1(std::in_place_type<unsigned>, 43u);\r\n    V v2(std::in_place_type<MoveAssign>, 42, &move_construct, &move_assign);\r\n    V& vref = (v1 = std::move(v2));\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 1);\r\n    assert(std::get<1>(v1).value == 42);\r\n    assert(move_construct == 1);\r\n    assert(move_assign == 0);\r\n  }\r\n\r\n  // Make sure we properly propagate triviality, which implies constexpr-ness (see P0602R4).\r\n  {\r\n    struct {\r\n      constexpr Result<long> operator()() const {\r\n        using V = std::variant<int, long, unsigned>;\r\n        V v(43);\r\n        V v2(42l);\r\n        v = std::move(v2);\r\n        return {v.index(), std::get<1>(v)};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 1, \"\");\r\n    static_assert(result.value == 42l, \"\");\r\n  }\r\n  {\r\n    struct {\r\n      constexpr Result<long> operator()() const {\r\n        using V = std::variant<int, TMoveAssign, unsigned>;\r\n        V v(std::in_place_type<unsigned>, 43u);\r\n        V v2(std::in_place_type<TMoveAssign>, 42);\r\n        v = std::move(v2);\r\n        return {v.index(), std::get<1>(v).value};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 1, \"\");\r\n    static_assert(result.value == 42, \"\");\r\n  }\r\n}\r\n\r\nvoid test_assignment_throw() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  using MET = MakeEmptyT;\r\n  // same index\r\n  {\r\n    using V = std::variant<int, MET, std::string>;\r\n    V v1(std::in_place_type<MET>);\r\n    MET& mref = std::get<1>(v1);\r\n    V v2(std::in_place_type<MET>);\r\n    try {\r\n      v1 = std::move(v2);\r\n      assert(false);\r\n    } catch (...) {\r\n    }\r\n    assert(v1.index() == 1);\r\n    assert(&std::get<1>(v1) == &mref);\r\n  }\r\n\r\n  // different indices\r\n  {\r\n    using V = std::variant<int, MET, std::string>;\r\n    V v1(std::in_place_type<int>);\r\n    V v2(std::in_place_type<MET>);\r\n    try {\r\n      v1 = std::move(v2);\r\n      assert(false);\r\n    } catch (...) {\r\n    }\r\n    assert(v1.valueless_by_exception());\r\n    assert(v1.index() == std::variant_npos);\r\n  }\r\n  {\r\n    using V = std::variant<int, MET, std::string>;\r\n    V v1(std::in_place_type<MET>);\r\n    V v2(std::in_place_type<std::string>, \"hello\");\r\n    V& vref = (v1 = std::move(v2));\r\n    assert(&vref == &v1);\r\n    assert(v1.index() == 2);\r\n    assert(std::get<2>(v1) == \"hello\");\r\n  }\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n}\r\n\r\ntemplate <std::size_t NewIdx, class T, class ValueType>\r\nconstexpr void test_constexpr_assign_imp(T&& v, ValueType&& new_value) {\r\n  using Variant = std::decay_t<T>;\r\n  Variant v2(std::forward<ValueType>(new_value));\r\n  const auto cp = v2;\r\n  v             = std::move(v2);\r\n  assert(v.index() == NewIdx);\r\n  assert(std::get<NewIdx>(v) == std::get<NewIdx>(cp));\r\n}\r\n\r\nconstexpr void test_constexpr_move_assignment_trivial() {\r\n  // Make sure we properly propagate triviality, which implies constexpr-ness (see P0602R4).\r\n  using V = std::variant<long, void*, int>;\r\n  static_assert(std::is_trivially_copyable<V>::value, \"\");\r\n  static_assert(std::is_trivially_move_assignable<V>::value, \"\");\r\n  test_constexpr_assign_imp<0>(V(42l), 101l);\r\n  test_constexpr_assign_imp<0>(V(nullptr), 101l);\r\n  test_constexpr_assign_imp<1>(V(42l), nullptr);\r\n  test_constexpr_assign_imp<2>(V(42l), 101);\r\n}\r\n\r\nstruct NonTrivialMoveAssign {\r\n  int i = 0;\r\n  constexpr NonTrivialMoveAssign(int ii) : i(ii) {}\r\n  constexpr NonTrivialMoveAssign(const NonTrivialMoveAssign& other) = default;\r\n  constexpr NonTrivialMoveAssign(NonTrivialMoveAssign&& other) : i(other.i) {}\r\n  constexpr NonTrivialMoveAssign& operator=(const NonTrivialMoveAssign&) = default;\r\n  constexpr NonTrivialMoveAssign& operator=(NonTrivialMoveAssign&& o) {\r\n    i = o.i;\r\n    return *this;\r\n  }\r\n  TEST_CONSTEXPR_CXX20 ~NonTrivialMoveAssign() = default;\r\n  friend constexpr bool operator==(const NonTrivialMoveAssign& x, const NonTrivialMoveAssign& y) { return x.i == y.i; }\r\n};\r\n\r\nTEST_CONSTEXPR_CXX20 void test_constexpr_move_assignment_non_trivial() {\r\n  using V = std::variant<long, void*, NonTrivialMoveAssign>;\r\n  static_assert(!std::is_trivially_copyable<V>::value);\r\n  static_assert(!std::is_trivially_move_assignable<V>::value);\r\n  test_constexpr_assign_imp<0>(V(42l), 101l);\r\n  test_constexpr_assign_imp<0>(V(nullptr), 101l);\r\n  test_constexpr_assign_imp<1>(V(42l), nullptr);\r\n  test_constexpr_assign_imp<2>(V(42l), NonTrivialMoveAssign(5));\r\n  test_constexpr_assign_imp<2>(V(NonTrivialMoveAssign(3)), NonTrivialMoveAssign(5));\r\n}\r\n\r\nvoid non_constexpr_test() {\r\n  test_move_assignment_empty_empty();\r\n  test_move_assignment_non_empty_empty();\r\n  test_move_assignment_empty_non_empty();\r\n  test_assignment_throw();\r\n}\r\n\r\nconstexpr bool cxx17_constexpr_test() {\r\n  test_move_assignment_sfinae();\r\n  test_move_assignment_noexcept();\r\n  test_constexpr_move_assignment_trivial();\r\n\r\n  return true;\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 bool cxx20_constexpr_test() {\r\n  test_move_assignment_same_index();\r\n  test_move_assignment_different_index();\r\n  test_constexpr_move_assignment_non_trivial();\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  non_constexpr_test();\r\n  cxx17_constexpr_test();\r\n  cxx20_constexpr_test();\r\n\r\n  static_assert(cxx17_constexpr_test());\r\n#if TEST_STD_VER >= 20\r\n  static_assert(cxx20_constexpr_test());\r\n#endif\r\n  return 0;\r\n}\r\n} // namespace assign::move\r\n// -- END: test/std/utilities/variant/variant.variant/variant.assign/move.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.assign/T.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// template <class T>\r\n// variant& operator=(T&&) noexcept(see below);\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <type_traits>\r\n#include <variant>\r\n#include <vector>\r\n#include <memory>\r\n\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n\r\nnamespace assign::T {\r\nnamespace MetaHelpers {\r\n\r\nstruct Dummy {\r\n  Dummy() = default;\r\n};\r\n\r\nstruct ThrowsCtorT {\r\n  ThrowsCtorT(int) noexcept(false) {}\r\n  ThrowsCtorT& operator=(int) noexcept { return *this; }\r\n};\r\n\r\nstruct ThrowsAssignT {\r\n  ThrowsAssignT(int) noexcept {}\r\n  ThrowsAssignT& operator=(int) noexcept(false) { return *this; }\r\n};\r\n\r\nstruct NoThrowT {\r\n  NoThrowT(int) noexcept {}\r\n  NoThrowT& operator=(int) noexcept { return *this; }\r\n};\r\n\r\n} // namespace MetaHelpers\r\n\r\nnamespace RuntimeHelpers {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n\r\nstruct ThrowsCtorT {\r\n  int value;\r\n  ThrowsCtorT() : value(0) {}\r\n  ThrowsCtorT(int) noexcept(false) { throw 42; }\r\n  ThrowsCtorT& operator=(int v) noexcept {\r\n    value = v;\r\n    return *this;\r\n  }\r\n};\r\n\r\nstruct MoveCrashes {\r\n  int value;\r\n  MoveCrashes(int v = 0) noexcept : value{v} {}\r\n  MoveCrashes(MoveCrashes&&) noexcept { assert(false); }\r\n  MoveCrashes& operator=(MoveCrashes&&) noexcept {\r\n    assert(false);\r\n    return *this;\r\n  }\r\n  MoveCrashes& operator=(int v) noexcept {\r\n    value = v;\r\n    return *this;\r\n  }\r\n};\r\n\r\nstruct ThrowsCtorTandMove {\r\n  int value;\r\n  ThrowsCtorTandMove() : value(0) {}\r\n  ThrowsCtorTandMove(int) noexcept(false) { throw 42; }\r\n  ThrowsCtorTandMove(ThrowsCtorTandMove&&) noexcept(false) { assert(false); }\r\n  ThrowsCtorTandMove& operator=(int v) noexcept {\r\n    value = v;\r\n    return *this;\r\n  }\r\n};\r\n\r\nstruct ThrowsAssignT {\r\n  int value;\r\n  ThrowsAssignT() : value(0) {}\r\n  ThrowsAssignT(int v) noexcept : value(v) {}\r\n  ThrowsAssignT& operator=(int) noexcept(false) { throw 42; }\r\n};\r\n\r\nstruct NoThrowT {\r\n  int value;\r\n  NoThrowT() : value(0) {}\r\n  NoThrowT(int v) noexcept : value(v) {}\r\n  NoThrowT& operator=(int v) noexcept {\r\n    value = v;\r\n    return *this;\r\n  }\r\n};\r\n\r\n#endif // !defined(TEST_HAS_NO_EXCEPTIONS)\r\n} // namespace RuntimeHelpers\r\n\r\nconstexpr void test_T_assignment_noexcept() {\r\n  using namespace MetaHelpers;\r\n  {\r\n    using V = std::variant<Dummy, NoThrowT>;\r\n    static_assert(std::is_nothrow_assignable<V, int>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<Dummy, ThrowsCtorT>;\r\n    static_assert(!std::is_nothrow_assignable<V, int>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<Dummy, ThrowsAssignT>;\r\n    static_assert(!std::is_nothrow_assignable<V, int>::value, \"\");\r\n  }\r\n}\r\n\r\nconstexpr void test_T_assignment_sfinae() {\r\n  {\r\n    using V = std::variant<long, long long>;\r\n    static_assert(!std::is_assignable<V, int>::value, \"ambiguous\");\r\n  }\r\n  {\r\n    using V = std::variant<std::string, std::string>;\r\n    static_assert(!std::is_assignable<V, const char*>::value, \"ambiguous\");\r\n  }\r\n  {\r\n    using V = std::variant<std::string, void*>;\r\n    static_assert(!std::is_assignable<V, int>::value, \"no matching operator=\");\r\n  }\r\n  {\r\n    using V = std::variant<std::string, float>;\r\n    static_assert(!std::is_assignable<V, int>::value, \"no matching operator=\");\r\n  }\r\n  {\r\n    using V = std::variant<std::unique_ptr<int>, bool>;\r\n    static_assert(!std::is_assignable<V, std::unique_ptr<char>>::value, \"no explicit bool in operator=\");\r\n    struct X {\r\n      operator void*();\r\n    };\r\n#ifndef __EDG__ // TRANSITION, VSO-1327220\r\n    static_assert(!std::is_assignable<V, X>::value, \"no boolean conversion in operator=\");\r\n#endif // ^^^ no workaround ^^^\r\n    static_assert(std::is_assignable<V, std::false_type>::value, \"converted to bool in operator=\");\r\n  }\r\n  {\r\n    struct X {};\r\n    struct Y {\r\n      operator X();\r\n    };\r\n    using V = std::variant<X>;\r\n    static_assert(std::is_assignable<V, Y>::value, \"regression on user-defined conversions in operator=\");\r\n  }\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 void test_T_assignment_basic() {\r\n  {\r\n    std::variant<int> v(43);\r\n    v = 42;\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v) == 42);\r\n  }\r\n  {\r\n    std::variant<int, long> v(43l);\r\n    v = 42;\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v) == 42);\r\n    v = 43l;\r\n    assert(v.index() == 1);\r\n    assert(std::get<1>(v) == 43);\r\n  }\r\n  {\r\n    std::variant<unsigned, long> v;\r\n    v = 42;\r\n    assert(v.index() == 1);\r\n    assert(std::get<1>(v) == 42);\r\n    v = 43u;\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v) == 43);\r\n  }\r\n  {\r\n    std::variant<std::string, bool> v = true;\r\n    v                                 = \"bar\";\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v) == \"bar\");\r\n  }\r\n}\r\n\r\nvoid test_T_assignment_basic_no_constexpr() {\r\n  std::variant<bool, std::unique_ptr<int>> v;\r\n  v = nullptr;\r\n  if constexpr (is_permissive) {\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v) == false);\r\n  } else {\r\n    assert(v.index() == 1);\r\n    assert(std::get<1>(v) == nullptr);\r\n  }\r\n}\r\n\r\nstruct TraceStat {\r\n  int construct      = 0;\r\n  int copy_construct = 0;\r\n  int copy_assign    = 0;\r\n  int move_construct = 0;\r\n  int move_assign    = 0;\r\n  int T_copy_assign  = 0;\r\n  int T_move_assign  = 0;\r\n  int destroy        = 0;\r\n};\r\n\r\ntemplate <bool CtorNoexcept, bool MoveCtorNoexcept>\r\nstruct Trace {\r\n  struct T {};\r\n\r\n  constexpr Trace(TraceStat* s) noexcept(CtorNoexcept) : stat(s) { ++s->construct; }\r\n  constexpr Trace(T) noexcept(CtorNoexcept) : stat(nullptr) {}\r\n  constexpr Trace(const Trace& o) : stat(o.stat) { ++stat->copy_construct; }\r\n  constexpr Trace(Trace&& o) noexcept(MoveCtorNoexcept) : stat(o.stat) { ++stat->move_construct; }\r\n  constexpr Trace& operator=(const Trace&) {\r\n    ++stat->copy_assign;\r\n    return *this;\r\n  }\r\n  constexpr Trace& operator=(Trace&&) noexcept {\r\n    ++stat->move_assign;\r\n    return *this;\r\n  }\r\n\r\n  constexpr Trace& operator=(const T&) {\r\n    ++stat->T_copy_assign;\r\n    return *this;\r\n  }\r\n  constexpr Trace& operator=(T&&) noexcept {\r\n    ++stat->T_move_assign;\r\n    return *this;\r\n  }\r\n  TEST_CONSTEXPR_CXX20 ~Trace() { ++stat->destroy; }\r\n\r\n  TraceStat* stat;\r\n};\r\n\r\nTEST_CONSTEXPR_CXX20 void test_T_assignment_performs_construction() {\r\n  {\r\n    using V = std::variant<int, Trace<false, false>>;\r\n    TraceStat stat;\r\n    V v{1};\r\n    v = &stat;\r\n    assert(stat.construct == 1);\r\n    assert(stat.copy_construct == 0);\r\n    assert(stat.move_construct == 0);\r\n    assert(stat.copy_assign == 0);\r\n    assert(stat.move_assign == 0);\r\n    assert(stat.destroy == 0);\r\n  }\r\n  {\r\n    using V = std::variant<int, Trace<false, true>>;\r\n    TraceStat stat;\r\n    V v{1};\r\n    v = &stat;\r\n    assert(stat.construct == 1);\r\n    assert(stat.copy_construct == 0);\r\n    assert(stat.move_construct == 1);\r\n    assert(stat.copy_assign == 0);\r\n    assert(stat.move_assign == 0);\r\n    assert(stat.destroy == 1);\r\n  }\r\n\r\n  {\r\n    using V = std::variant<int, Trace<true, false>>;\r\n    TraceStat stat;\r\n    V v{1};\r\n    v = &stat;\r\n    assert(stat.construct == 1);\r\n    assert(stat.copy_construct == 0);\r\n    assert(stat.move_construct == 0);\r\n    assert(stat.copy_assign == 0);\r\n    assert(stat.move_assign == 0);\r\n    assert(stat.destroy == 0);\r\n  }\r\n\r\n  {\r\n    using V = std::variant<int, Trace<true, true>>;\r\n    TraceStat stat;\r\n    V v{1};\r\n    v = &stat;\r\n    assert(stat.construct == 1);\r\n    assert(stat.copy_construct == 0);\r\n    assert(stat.move_construct == 0);\r\n    assert(stat.copy_assign == 0);\r\n    assert(stat.move_assign == 0);\r\n    assert(stat.destroy == 0);\r\n  }\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 void test_T_assignment_performs_assignment() {\r\n  {\r\n    using V = std::variant<int, Trace<false, false>>;\r\n    TraceStat stat;\r\n    V v{&stat};\r\n    v = Trace<false, false>::T{};\r\n    assert(stat.construct == 1);\r\n    assert(stat.copy_construct == 0);\r\n    assert(stat.move_construct == 0);\r\n    assert(stat.copy_assign == 0);\r\n    assert(stat.move_assign == 0);\r\n    assert(stat.T_copy_assign == 0);\r\n    assert(stat.T_move_assign == 1);\r\n    assert(stat.destroy == 0);\r\n  }\r\n  {\r\n    using V = std::variant<int, Trace<false, false>>;\r\n    TraceStat stat;\r\n    V v{&stat};\r\n    Trace<false, false>::T t;\r\n    v = t;\r\n    assert(stat.construct == 1);\r\n    assert(stat.copy_construct == 0);\r\n    assert(stat.move_construct == 0);\r\n    assert(stat.copy_assign == 0);\r\n    assert(stat.move_assign == 0);\r\n    assert(stat.T_copy_assign == 1);\r\n    assert(stat.T_move_assign == 0);\r\n    assert(stat.destroy == 0);\r\n  }\r\n}\r\n\r\nvoid test_T_assignment_performs_construction_throw() {\r\n  using namespace RuntimeHelpers;\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  {\r\n    using V = std::variant<std::string, ThrowsCtorT>;\r\n    V v(std::in_place_type<std::string>, \"hello\");\r\n    try {\r\n      v = 42;\r\n      assert(false);\r\n    } catch (...) { /* ... */\r\n    }\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v) == \"hello\");\r\n  }\r\n  {\r\n    using V = std::variant<ThrowsAssignT, std::string>;\r\n    V v(std::in_place_type<std::string>, \"hello\");\r\n    v = 42;\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v).value == 42);\r\n  }\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n}\r\n\r\nvoid test_T_assignment_performs_assignment_throw() {\r\n  using namespace RuntimeHelpers;\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  {\r\n    using V = std::variant<ThrowsCtorT>;\r\n    V v;\r\n    v = 42;\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v).value == 42);\r\n  }\r\n  {\r\n    using V = std::variant<ThrowsCtorT, std::string>;\r\n    V v;\r\n    v = 42;\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v).value == 42);\r\n  }\r\n  {\r\n    using V = std::variant<ThrowsAssignT>;\r\n    V v(100);\r\n    try {\r\n      v = 42;\r\n      assert(false);\r\n    } catch (...) { /* ... */\r\n    }\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v).value == 100);\r\n  }\r\n  {\r\n    using V = std::variant<std::string, ThrowsAssignT>;\r\n    V v(100);\r\n    try {\r\n      v = 42;\r\n      assert(false);\r\n    } catch (...) { /* ... */\r\n    }\r\n    assert(v.index() == 1);\r\n    assert(std::get<1>(v).value == 100);\r\n  }\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 void test_T_assignment_vector_bool() {\r\n  std::vector<bool> vec = {true};\r\n  std::variant<bool, int> v;\r\n  v = vec[0];\r\n  assert(v.index() == 0);\r\n  assert(std::get<0>(v) == true);\r\n}\r\n\r\nvoid non_constexpr_test() {\r\n  test_T_assignment_basic_no_constexpr();\r\n  test_T_assignment_performs_construction_throw();\r\n  test_T_assignment_performs_assignment_throw();\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 bool test() {\r\n  test_T_assignment_basic();\r\n  test_T_assignment_performs_construction();\r\n  test_T_assignment_performs_assignment();\r\n  test_T_assignment_noexcept();\r\n  test_T_assignment_sfinae();\r\n  test_T_assignment_vector_bool();\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  test();\r\n  non_constexpr_test();\r\n\r\n#if TEST_STD_VER >= 20\r\n  static_assert(test());\r\n#endif\r\n  return 0;\r\n}\r\n} // namespace assign::T\r\n// -- END: test/std/utilities/variant/variant.variant/variant.assign/T.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.ctor/conv.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// template <class T> constexpr variant(T&&) noexcept(see below);\r\n\r\n#include <variant>\r\n#include <string>\r\n#include <memory>\r\n\r\n#include \"variant_test_helpers.h\"\r\n\r\nnamespace ctor::conv {\r\nint run_test()\r\n{\r\n  static_assert(!std::is_constructible<std::variant<int, int>, int>::value, \"\");\r\n  static_assert(!std::is_constructible<std::variant<long, long long>, int>::value, \"\");\r\n  static_assert(!std::is_constructible<std::variant<char>, int>::value, \"\");\r\n\r\n  static_assert(!std::is_constructible<std::variant<std::string, float>, int>::value, \"\");\r\n  static_assert(!std::is_constructible<std::variant<std::string, double>, int>::value, \"\");\r\n  static_assert(!std::is_constructible<std::variant<std::string, bool>, int>::value, \"\");\r\n\r\n  static_assert(!std::is_constructible<std::variant<int, bool>, decltype(\"meow\")>::value, \"\");\r\n  static_assert(!std::is_constructible<std::variant<int, const bool>, decltype(\"meow\")>::value, \"\");\r\n\r\n  static_assert(std::is_constructible<std::variant<bool>, std::true_type>::value, \"\");\r\n  static_assert(!std::is_constructible<std::variant<bool>, std::unique_ptr<char> >::value, \"\");\r\n  static_assert(std::is_constructible<std::variant<bool>, decltype(nullptr)>::value == is_permissive, \"\");\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::conv\r\n// -- END: test/std/utilities/variant/variant.variant/variant.ctor/conv.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.ctor/copy.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// constexpr variant(variant const&);\r\n\r\n#include <cassert>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n#include \"test_workarounds.h\"\r\n\r\nnamespace ctor::copy {\r\nstruct NonT {\r\n  constexpr NonT(int v) : value(v) {}\r\n  constexpr NonT(const NonT& o) : value(o.value) {}\r\n  int value;\r\n};\r\nstatic_assert(!std::is_trivially_copy_constructible<NonT>::value, \"\");\r\n\r\nstruct NoCopy {\r\n  NoCopy(const NoCopy&) = delete;\r\n};\r\n\r\nstruct MoveOnly {\r\n  MoveOnly(const MoveOnly&) = delete;\r\n  MoveOnly(MoveOnly&&)      = default;\r\n};\r\n\r\nstruct MoveOnlyNT {\r\n  MoveOnlyNT(const MoveOnlyNT&) = delete;\r\n  MoveOnlyNT(MoveOnlyNT&&) {}\r\n};\r\n\r\nstruct NTCopy {\r\n  constexpr NTCopy(int v) : value(v) {}\r\n  NTCopy(const NTCopy& that) : value(that.value) {}\r\n  NTCopy(NTCopy&&) = delete;\r\n  int value;\r\n};\r\n\r\nstatic_assert(!std::is_trivially_copy_constructible<NTCopy>::value, \"\");\r\nstatic_assert(std::is_copy_constructible<NTCopy>::value, \"\");\r\n\r\nstruct TCopy {\r\n  constexpr TCopy(int v) : value(v) {}\r\n  TCopy(TCopy const&) = default;\r\n  TCopy(TCopy&&)      = delete;\r\n  int value;\r\n};\r\n\r\nstatic_assert(std::is_trivially_copy_constructible<TCopy>::value, \"\");\r\n\r\nstruct TCopyNTMove {\r\n  constexpr TCopyNTMove(int v) : value(v) {}\r\n  TCopyNTMove(const TCopyNTMove&) = default;\r\n  TCopyNTMove(TCopyNTMove&& that) : value(that.value) { that.value = -1; }\r\n  int value;\r\n};\r\n\r\nstatic_assert(std::is_trivially_copy_constructible<TCopyNTMove>::value, \"\");\r\n\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\nstruct MakeEmptyT {\r\n  static int alive;\r\n  MakeEmptyT() { ++alive; }\r\n  MakeEmptyT(const MakeEmptyT&) {\r\n    ++alive;\r\n    // Don't throw from the copy constructor since variant's assignment\r\n    // operator performs a copy before committing to the assignment.\r\n  }\r\n  MakeEmptyT(MakeEmptyT&&) { throw 42; }\r\n  MakeEmptyT& operator=(const MakeEmptyT&) { throw 42; }\r\n  MakeEmptyT& operator=(MakeEmptyT&&) { throw 42; }\r\n  ~MakeEmptyT() { --alive; }\r\n};\r\n\r\nint MakeEmptyT::alive = 0;\r\n\r\ntemplate <class Variant>\r\nvoid makeEmpty(Variant& v) {\r\n  Variant v2(std::in_place_type<MakeEmptyT>);\r\n  try {\r\n    v = std::move(v2);\r\n    assert(false);\r\n  } catch (...) {\r\n    assert(v.valueless_by_exception());\r\n  }\r\n}\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n\r\nconstexpr void test_copy_ctor_sfinae() {\r\n  {\r\n    using V = std::variant<int, long>;\r\n    static_assert(std::is_copy_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, NoCopy>;\r\n    static_assert(!std::is_copy_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, MoveOnly>;\r\n    static_assert(!std::is_copy_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, MoveOnlyNT>;\r\n    static_assert(!std::is_copy_constructible<V>::value, \"\");\r\n  }\r\n\r\n  // Make sure we properly propagate triviality (see P0602R4).\r\n  {\r\n    using V = std::variant<int, long>;\r\n    static_assert(std::is_trivially_copy_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, NTCopy>;\r\n    static_assert(!std::is_trivially_copy_constructible<V>::value, \"\");\r\n    static_assert(std::is_copy_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, TCopy>;\r\n    static_assert(std::is_trivially_copy_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, TCopyNTMove>;\r\n    static_assert(std::is_trivially_copy_constructible<V>::value, \"\");\r\n  }\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 void test_copy_ctor_basic() {\r\n  {\r\n    std::variant<int> v(std::in_place_index<0>, 42);\r\n    std::variant<int> v2 = v;\r\n    assert(v2.index() == 0);\r\n    assert(std::get<0>(v2) == 42);\r\n  }\r\n  {\r\n    std::variant<int, long> v(std::in_place_index<1>, 42);\r\n    std::variant<int, long> v2 = v;\r\n    assert(v2.index() == 1);\r\n    assert(std::get<1>(v2) == 42);\r\n  }\r\n  {\r\n    std::variant<NonT> v(std::in_place_index<0>, 42);\r\n    assert(v.index() == 0);\r\n    std::variant<NonT> v2(v);\r\n    assert(v2.index() == 0);\r\n    assert(std::get<0>(v2).value == 42);\r\n  }\r\n  {\r\n    std::variant<int, NonT> v(std::in_place_index<1>, 42);\r\n    assert(v.index() == 1);\r\n    std::variant<int, NonT> v2(v);\r\n    assert(v2.index() == 1);\r\n    assert(std::get<1>(v2).value == 42);\r\n  }\r\n\r\n  // Make sure we properly propagate triviality, which implies constexpr-ness (see P0602R4).\r\n  {\r\n    constexpr std::variant<int> v(std::in_place_index<0>, 42);\r\n    static_assert(v.index() == 0, \"\");\r\n    constexpr std::variant<int> v2 = v;\r\n    static_assert(v2.index() == 0, \"\");\r\n    static_assert(std::get<0>(v2) == 42, \"\");\r\n  }\r\n  {\r\n    constexpr std::variant<int, long> v(std::in_place_index<1>, 42);\r\n    static_assert(v.index() == 1, \"\");\r\n    constexpr std::variant<int, long> v2 = v;\r\n    static_assert(v2.index() == 1, \"\");\r\n    static_assert(std::get<1>(v2) == 42, \"\");\r\n  }\r\n  {\r\n    constexpr std::variant<TCopy> v(std::in_place_index<0>, 42);\r\n    static_assert(v.index() == 0, \"\");\r\n    constexpr std::variant<TCopy> v2(v);\r\n    static_assert(v2.index() == 0, \"\");\r\n    static_assert(std::get<0>(v2).value == 42, \"\");\r\n  }\r\n  {\r\n    constexpr std::variant<int, TCopy> v(std::in_place_index<1>, 42);\r\n    static_assert(v.index() == 1, \"\");\r\n    constexpr std::variant<int, TCopy> v2(v);\r\n    static_assert(v2.index() == 1, \"\");\r\n    static_assert(std::get<1>(v2).value == 42, \"\");\r\n  }\r\n  {\r\n    constexpr std::variant<TCopyNTMove> v(std::in_place_index<0>, 42);\r\n    static_assert(v.index() == 0, \"\");\r\n    constexpr std::variant<TCopyNTMove> v2(v);\r\n    static_assert(v2.index() == 0, \"\");\r\n    static_assert(std::get<0>(v2).value == 42, \"\");\r\n  }\r\n  {\r\n    constexpr std::variant<int, TCopyNTMove> v(std::in_place_index<1>, 42);\r\n    static_assert(v.index() == 1, \"\");\r\n    constexpr std::variant<int, TCopyNTMove> v2(v);\r\n    static_assert(v2.index() == 1, \"\");\r\n    static_assert(std::get<1>(v2).value == 42, \"\");\r\n  }\r\n}\r\n\r\nvoid test_copy_ctor_valueless_by_exception() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  using V = std::variant<int, MakeEmptyT>;\r\n  V v1;\r\n  makeEmpty(v1);\r\n  const V& cv1 = v1;\r\n  V v(cv1);\r\n  assert(v.valueless_by_exception());\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n}\r\n\r\ntemplate <std::size_t Idx, class T>\r\nconstexpr void test_constexpr_copy_ctor_imp(const T& v) {\r\n  auto v2 = v;\r\n  assert(v2.index() == v.index());\r\n  assert(v2.index() == Idx);\r\n  assert(std::get<Idx>(v2) == std::get<Idx>(v));\r\n}\r\n\r\nconstexpr void test_constexpr_copy_ctor_trivial() {\r\n  // Make sure we properly propagate triviality, which implies constexpr-ness (see P0602R4).\r\n  using V = std::variant<long, void*, const int>;\r\n#ifdef TEST_WORKAROUND_MSVC_BROKEN_IS_TRIVIALLY_COPYABLE\r\n  static_assert(std::is_trivially_destructible<V>::value, \"\");\r\n  static_assert(std::is_trivially_copy_constructible<V>::value, \"\");\r\n  static_assert(std::is_trivially_move_constructible<V>::value, \"\");\r\n  static_assert(!std::is_copy_assignable<V>::value, \"\");\r\n  static_assert(!std::is_move_assignable<V>::value, \"\");\r\n#else  // TEST_WORKAROUND_MSVC_BROKEN_IS_TRIVIALLY_COPYABLE\r\n  static_assert(std::is_trivially_copyable<V>::value, \"\");\r\n#endif // TEST_WORKAROUND_MSVC_BROKEN_IS_TRIVIALLY_COPYABLE\r\n  static_assert(std::is_trivially_copy_constructible<V>::value, \"\");\r\n  test_constexpr_copy_ctor_imp<0>(V(42l));\r\n  test_constexpr_copy_ctor_imp<1>(V(nullptr));\r\n  test_constexpr_copy_ctor_imp<2>(V(101));\r\n}\r\n\r\nstruct NonTrivialCopyCtor {\r\n  int i = 0;\r\n  constexpr NonTrivialCopyCtor(int ii) : i(ii) {}\r\n  constexpr NonTrivialCopyCtor(const NonTrivialCopyCtor& other) : i(other.i) {}\r\n  constexpr NonTrivialCopyCtor(NonTrivialCopyCtor&& other) = default;\r\n  TEST_CONSTEXPR_CXX20 ~NonTrivialCopyCtor()               = default;\r\n  friend constexpr bool operator==(const NonTrivialCopyCtor& x, const NonTrivialCopyCtor& y) { return x.i == y.i; }\r\n};\r\n\r\nTEST_CONSTEXPR_CXX20 void test_constexpr_copy_ctor_non_trivial() {\r\n  // Test !is_trivially_move_constructible\r\n  using V = std::variant<long, NonTrivialCopyCtor, void*>;\r\n  static_assert(!std::is_trivially_copy_constructible<V>::value, \"\");\r\n  test_constexpr_copy_ctor_imp<0>(V(42l));\r\n  test_constexpr_copy_ctor_imp<1>(V(NonTrivialCopyCtor(5)));\r\n  test_constexpr_copy_ctor_imp<2>(V(nullptr));\r\n}\r\n\r\nvoid non_constexpr_test() { test_copy_ctor_valueless_by_exception(); }\r\n\r\nconstexpr bool cxx17_constexpr_test() {\r\n  test_copy_ctor_sfinae();\r\n  test_constexpr_copy_ctor_trivial();\r\n\r\n  return true;\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 bool cxx20_constexpr_test() {\r\n  test_copy_ctor_basic();\r\n  test_constexpr_copy_ctor_non_trivial();\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  non_constexpr_test();\r\n  cxx17_constexpr_test();\r\n  cxx20_constexpr_test();\r\n\r\n  static_assert(cxx17_constexpr_test());\r\n#if TEST_STD_VER >= 20\r\n  static_assert(cxx20_constexpr_test());\r\n#endif\r\n  return 0;\r\n}\r\n} // namespace ctor::copy\r\n// -- END: test/std/utilities/variant/variant.variant/variant.ctor/copy.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.ctor/default.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// constexpr variant() noexcept(see below);\r\n\r\n#include <cassert>\r\n#include <type_traits>\r\n#include <variant>\r\n#include <string>\r\n\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n\r\nnamespace ctor::default_ {\r\nstruct NonDefaultConstructible {\r\n  constexpr NonDefaultConstructible(int) {}\r\n};\r\n\r\nstruct NotNoexcept {\r\n  NotNoexcept() noexcept(false) {}\r\n};\r\n\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\nstruct DefaultCtorThrows {\r\n  DefaultCtorThrows() { throw 42; }\r\n};\r\n#endif\r\n\r\nconstexpr void test_default_ctor_sfinae() {\r\n  {\r\n    using V = std::variant<std::monostate, int>;\r\n    static_assert(std::is_default_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<NonDefaultConstructible, int>;\r\n    static_assert(!std::is_default_constructible<V>::value, \"\");\r\n  }\r\n}\r\n\r\nconstexpr void test_default_ctor_noexcept() {\r\n  {\r\n    using V = std::variant<int>;\r\n    static_assert(std::is_nothrow_default_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<NotNoexcept>;\r\n    static_assert(!std::is_nothrow_default_constructible<V>::value, \"\");\r\n  }\r\n}\r\n\r\nvoid test_default_ctor_throws() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  using V = std::variant<DefaultCtorThrows, int>;\r\n  try {\r\n    V v;\r\n    assert(false);\r\n  } catch (const int& ex) {\r\n    assert(ex == 42);\r\n  } catch (...) {\r\n    assert(false);\r\n  }\r\n#endif\r\n}\r\n\r\nconstexpr void test_default_ctor_basic() {\r\n  {\r\n    std::variant<int> v;\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v) == 0);\r\n  }\r\n  {\r\n    std::variant<int, long> v;\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v) == 0);\r\n  }\r\n  {\r\n    std::variant<int, NonDefaultConstructible> v;\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v) == 0);\r\n  }\r\n  {\r\n    using V = std::variant<int, long>;\r\n    constexpr V v;\r\n    static_assert(v.index() == 0, \"\");\r\n    static_assert(std::get<0>(v) == 0, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, long>;\r\n    constexpr V v;\r\n    static_assert(v.index() == 0, \"\");\r\n    static_assert(std::get<0>(v) == 0, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, NonDefaultConstructible>;\r\n    constexpr V v;\r\n    static_assert(v.index() == 0, \"\");\r\n    static_assert(std::get<0>(v) == 0, \"\");\r\n  }\r\n}\r\n\r\nconstexpr void issue_86686() {\r\n#if TEST_STD_VER >= 20\r\n  static_assert(std::variant<std::string>{}.index() == 0);\r\n#endif\r\n}\r\n\r\nconstexpr bool test() {\r\n  test_default_ctor_basic();\r\n  test_default_ctor_sfinae();\r\n  test_default_ctor_noexcept();\r\n  issue_86686();\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  test();\r\n  test_default_ctor_throws();\r\n  static_assert(test());\r\n  return 0;\r\n}\r\n} // namespace ctor::default_\r\n// -- END: test/std/utilities/variant/variant.variant/variant.ctor/default.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.ctor/in_place_index_args.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// template <size_t I, class ...Args>\r\n// constexpr explicit variant(in_place_index_t<I>, Args&&...);\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"test_convertible.h\"\r\n#include \"test_macros.h\"\r\n\r\nnamespace ctor::in_place_index_args {\r\nvoid test_ctor_sfinae() {\r\n  {\r\n    using V = std::variant<int>;\r\n    static_assert(\r\n        std::is_constructible<V, std::in_place_index_t<0>, int>::value, \"\");\r\n    static_assert(!test_convertible<V, std::in_place_index_t<0>, int>(), \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, long, long long>;\r\n    static_assert(\r\n        std::is_constructible<V, std::in_place_index_t<1>, int>::value, \"\");\r\n    static_assert(!test_convertible<V, std::in_place_index_t<1>, int>(), \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, long, int *>;\r\n    static_assert(\r\n        std::is_constructible<V, std::in_place_index_t<2>, int *>::value, \"\");\r\n    static_assert(!test_convertible<V, std::in_place_index_t<2>, int *>(), \"\");\r\n  }\r\n  { // args not convertible to type\r\n    using V = std::variant<int, long, int *>;\r\n    static_assert(\r\n        !std::is_constructible<V, std::in_place_index_t<0>, int *>::value, \"\");\r\n    static_assert(!test_convertible<V, std::in_place_index_t<0>, int *>(), \"\");\r\n  }\r\n  { // index not in variant\r\n    using V = std::variant<int, long, int *>;\r\n    static_assert(\r\n        !std::is_constructible<V, std::in_place_index_t<3>, int>::value, \"\");\r\n    static_assert(!test_convertible<V, std::in_place_index_t<3>, int>(), \"\");\r\n  }\r\n}\r\n\r\nvoid test_ctor_basic() {\r\n  {\r\n    constexpr std::variant<int> v(std::in_place_index<0>, 42);\r\n    static_assert(v.index() == 0, \"\");\r\n    static_assert(std::get<0>(v) == 42, \"\");\r\n  }\r\n  {\r\n    constexpr std::variant<int, long, long> v(std::in_place_index<1>, 42);\r\n    static_assert(v.index() == 1, \"\");\r\n    static_assert(std::get<1>(v) == 42, \"\");\r\n  }\r\n  {\r\n    constexpr std::variant<int, const int, long> v(std::in_place_index<1>, 42);\r\n    static_assert(v.index() == 1, \"\");\r\n    static_assert(std::get<1>(v) == 42, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<const int, volatile int, int>;\r\n    int x = 42;\r\n    V v(std::in_place_index<0>, x);\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v) == x);\r\n  }\r\n  {\r\n    using V = std::variant<const int, volatile int, int>;\r\n    int x = 42;\r\n    V v(std::in_place_index<1>, x);\r\n    assert(v.index() == 1);\r\n    assert(std::get<1>(v) == x);\r\n  }\r\n  {\r\n    using V = std::variant<const int, volatile int, int>;\r\n    int x = 42;\r\n    V v(std::in_place_index<2>, x);\r\n    assert(v.index() == 2);\r\n    assert(std::get<2>(v) == x);\r\n  }\r\n}\r\n\r\nint run_test() {\r\n  test_ctor_basic();\r\n  test_ctor_sfinae();\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::in_place_index_args\r\n// -- END: test/std/utilities/variant/variant.variant/variant.ctor/in_place_index_args.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.ctor/in_place_index_init_list_args.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// template <size_t I, class Up, class ...Args>\r\n// constexpr explicit\r\n// variant(in_place_index_t<I>, initializer_list<Up>, Args&&...);\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"test_convertible.h\"\r\n#include \"test_macros.h\"\r\n\r\nnamespace ctor::in_place_index_init_list_args {\r\nstruct InitList {\r\n  std::size_t size;\r\n  constexpr InitList(std::initializer_list<int> il) : size(il.size()) {}\r\n};\r\n\r\nstruct InitListArg {\r\n  std::size_t size;\r\n  int value;\r\n  constexpr InitListArg(std::initializer_list<int> il, int v)\r\n      : size(il.size()), value(v) {}\r\n};\r\n\r\nvoid test_ctor_sfinae() {\r\n  using IL = std::initializer_list<int>;\r\n  { // just init list\r\n    using V = std::variant<InitList, InitListArg, int>;\r\n    static_assert(std::is_constructible<V, std::in_place_index_t<0>, IL>::value,\r\n                  \"\");\r\n    static_assert(!test_convertible<V, std::in_place_index_t<0>, IL>(), \"\");\r\n  }\r\n  { // too many arguments\r\n    using V = std::variant<InitList, InitListArg, int>;\r\n    static_assert(\r\n        !std::is_constructible<V, std::in_place_index_t<0>, IL, int>::value,\r\n        \"\");\r\n    static_assert(!test_convertible<V, std::in_place_index_t<0>, IL, int>(),\r\n                  \"\");\r\n  }\r\n  { // too few arguments\r\n    using V = std::variant<InitList, InitListArg, int>;\r\n    static_assert(\r\n        !std::is_constructible<V, std::in_place_index_t<1>, IL>::value, \"\");\r\n    static_assert(!test_convertible<V, std::in_place_index_t<1>, IL>(), \"\");\r\n  }\r\n  { // init list and arguments\r\n    using V = std::variant<InitList, InitListArg, int>;\r\n    static_assert(\r\n        std::is_constructible<V, std::in_place_index_t<1>, IL, int>::value, \"\");\r\n    static_assert(!test_convertible<V, std::in_place_index_t<1>, IL, int>(),\r\n                  \"\");\r\n  }\r\n  { // not constructible from arguments\r\n    using V = std::variant<InitList, InitListArg, int>;\r\n    static_assert(\r\n        !std::is_constructible<V, std::in_place_index_t<2>, IL>::value, \"\");\r\n    static_assert(!test_convertible<V, std::in_place_index_t<2>, IL>(), \"\");\r\n  }\r\n  { // index not in variant\r\n    using V = std::variant<InitList, InitListArg, int>;\r\n    static_assert(\r\n        !std::is_constructible<V, std::in_place_index_t<3>, IL>::value, \"\");\r\n    static_assert(!test_convertible<V, std::in_place_index_t<3>, IL>(), \"\");\r\n  }\r\n}\r\n\r\nvoid test_ctor_basic() {\r\n  {\r\n    constexpr std::variant<InitList, InitListArg, InitList> v(\r\n        std::in_place_index<0>, {1, 2, 3});\r\n    static_assert(v.index() == 0, \"\");\r\n    static_assert(std::get<0>(v).size == 3, \"\");\r\n  }\r\n  {\r\n    constexpr std::variant<InitList, InitListArg, InitList> v(\r\n        std::in_place_index<2>, {1, 2, 3});\r\n    static_assert(v.index() == 2, \"\");\r\n    static_assert(std::get<2>(v).size == 3, \"\");\r\n  }\r\n  {\r\n    constexpr std::variant<InitList, InitListArg, InitListArg> v(\r\n        std::in_place_index<1>, {1, 2, 3, 4}, 42);\r\n    static_assert(v.index() == 1, \"\");\r\n    static_assert(std::get<1>(v).size == 4, \"\");\r\n    static_assert(std::get<1>(v).value == 42, \"\");\r\n  }\r\n}\r\n\r\nint run_test() {\r\n  test_ctor_basic();\r\n  test_ctor_sfinae();\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::in_place_index_init_list_args\r\n// -- END: test/std/utilities/variant/variant.variant/variant.ctor/in_place_index_init_list_args.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.ctor/in_place_type_args.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// template <class Tp, class ...Args>\r\n// constexpr explicit variant(in_place_type_t<Tp>, Args&&...);\r\n\r\n#include <cassert>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"test_convertible.h\"\r\n#include \"test_macros.h\"\r\n\r\nnamespace ctor::in_place_type_args {\r\nvoid test_ctor_sfinae() {\r\n  {\r\n    using V = std::variant<int>;\r\n    static_assert(\r\n        std::is_constructible<V, std::in_place_type_t<int>, int>::value, \"\");\r\n    static_assert(!test_convertible<V, std::in_place_type_t<int>, int>(), \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, long, long long>;\r\n    static_assert(\r\n        std::is_constructible<V, std::in_place_type_t<long>, int>::value, \"\");\r\n    static_assert(!test_convertible<V, std::in_place_type_t<long>, int>(), \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, long, int *>;\r\n    static_assert(\r\n        std::is_constructible<V, std::in_place_type_t<int *>, int *>::value,\r\n        \"\");\r\n    static_assert(!test_convertible<V, std::in_place_type_t<int *>, int *>(),\r\n                  \"\");\r\n  }\r\n  { // duplicate type\r\n    using V = std::variant<int, long, int>;\r\n    static_assert(\r\n        !std::is_constructible<V, std::in_place_type_t<int>, int>::value, \"\");\r\n    static_assert(!test_convertible<V, std::in_place_type_t<int>, int>(), \"\");\r\n  }\r\n  { // args not convertible to type\r\n    using V = std::variant<int, long, int *>;\r\n    static_assert(\r\n        !std::is_constructible<V, std::in_place_type_t<int>, int *>::value, \"\");\r\n    static_assert(!test_convertible<V, std::in_place_type_t<int>, int *>(), \"\");\r\n  }\r\n  { // type not in variant\r\n    using V = std::variant<int, long, int *>;\r\n    static_assert(\r\n        !std::is_constructible<V, std::in_place_type_t<long long>, int>::value,\r\n        \"\");\r\n    static_assert(!test_convertible<V, std::in_place_type_t<long long>, int>(),\r\n                  \"\");\r\n  }\r\n}\r\n\r\nvoid test_ctor_basic() {\r\n  {\r\n    constexpr std::variant<int> v(std::in_place_type<int>, 42);\r\n    static_assert(v.index() == 0, \"\");\r\n    static_assert(std::get<0>(v) == 42, \"\");\r\n  }\r\n  {\r\n    constexpr std::variant<int, long> v(std::in_place_type<long>, 42);\r\n    static_assert(v.index() == 1, \"\");\r\n    static_assert(std::get<1>(v) == 42, \"\");\r\n  }\r\n  {\r\n    constexpr std::variant<int, const int, long> v(\r\n        std::in_place_type<const int>, 42);\r\n    static_assert(v.index() == 1, \"\");\r\n    static_assert(std::get<1>(v) == 42, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<const int, volatile int, int>;\r\n    int x = 42;\r\n    V v(std::in_place_type<const int>, x);\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v) == x);\r\n  }\r\n  {\r\n    using V = std::variant<const int, volatile int, int>;\r\n    int x = 42;\r\n    V v(std::in_place_type<volatile int>, x);\r\n    assert(v.index() == 1);\r\n    assert(std::get<1>(v) == x);\r\n  }\r\n  {\r\n    using V = std::variant<const int, volatile int, int>;\r\n    int x = 42;\r\n    V v(std::in_place_type<int>, x);\r\n    assert(v.index() == 2);\r\n    assert(std::get<2>(v) == x);\r\n  }\r\n}\r\n\r\nint run_test() {\r\n  test_ctor_basic();\r\n  test_ctor_sfinae();\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::in_place_type_args\r\n// -- END: test/std/utilities/variant/variant.variant/variant.ctor/in_place_type_args.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.ctor/in_place_type_init_list_args.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// template <class Tp, class Up, class ...Args>\r\n// constexpr explicit\r\n// variant(in_place_type_t<Tp>, initializer_list<Up>, Args&&...);\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"test_convertible.h\"\r\n#include \"test_macros.h\"\r\n\r\nnamespace ctor::in_place_type_init_list_args {\r\nstruct InitList {\r\n  std::size_t size;\r\n  constexpr InitList(std::initializer_list<int> il) : size(il.size()) {}\r\n};\r\n\r\nstruct InitListArg {\r\n  std::size_t size;\r\n  int value;\r\n  constexpr InitListArg(std::initializer_list<int> il, int v)\r\n      : size(il.size()), value(v) {}\r\n};\r\n\r\nvoid test_ctor_sfinae() {\r\n  using IL = std::initializer_list<int>;\r\n  { // just init list\r\n    using V = std::variant<InitList, InitListArg, int>;\r\n    static_assert(\r\n        std::is_constructible<V, std::in_place_type_t<InitList>, IL>::value,\r\n        \"\");\r\n    static_assert(!test_convertible<V, std::in_place_type_t<InitList>, IL>(),\r\n                  \"\");\r\n  }\r\n  { // too many arguments\r\n    using V = std::variant<InitList, InitListArg, int>;\r\n    static_assert(!std::is_constructible<V, std::in_place_type_t<InitList>, IL,\r\n                                         int>::value,\r\n                  \"\");\r\n    static_assert(\r\n        !test_convertible<V, std::in_place_type_t<InitList>, IL, int>(), \"\");\r\n  }\r\n  { // too few arguments\r\n    using V = std::variant<InitList, InitListArg, int>;\r\n    static_assert(\r\n        !std::is_constructible<V, std::in_place_type_t<InitListArg>, IL>::value,\r\n        \"\");\r\n    static_assert(!test_convertible<V, std::in_place_type_t<InitListArg>, IL>(),\r\n                  \"\");\r\n  }\r\n  { // init list and arguments\r\n    using V = std::variant<InitList, InitListArg, int>;\r\n    static_assert(std::is_constructible<V, std::in_place_type_t<InitListArg>,\r\n                                        IL, int>::value,\r\n                  \"\");\r\n    static_assert(\r\n        !test_convertible<V, std::in_place_type_t<InitListArg>, IL, int>(), \"\");\r\n  }\r\n  { // not constructible from arguments\r\n    using V = std::variant<InitList, InitListArg, int>;\r\n    static_assert(\r\n        !std::is_constructible<V, std::in_place_type_t<int>, IL>::value, \"\");\r\n    static_assert(!test_convertible<V, std::in_place_type_t<int>, IL>(), \"\");\r\n  }\r\n  { // duplicate types in variant\r\n    using V = std::variant<InitListArg, InitListArg, int>;\r\n    static_assert(!std::is_constructible<V, std::in_place_type_t<InitListArg>,\r\n                                         IL, int>::value,\r\n                  \"\");\r\n    static_assert(\r\n        !test_convertible<V, std::in_place_type_t<InitListArg>, IL, int>(), \"\");\r\n  }\r\n}\r\n\r\nvoid test_ctor_basic() {\r\n  {\r\n    constexpr std::variant<InitList, InitListArg> v(\r\n        std::in_place_type<InitList>, {1, 2, 3});\r\n    static_assert(v.index() == 0, \"\");\r\n    static_assert(std::get<0>(v).size == 3, \"\");\r\n  }\r\n  {\r\n    constexpr std::variant<InitList, InitListArg> v(\r\n        std::in_place_type<InitListArg>, {1, 2, 3, 4}, 42);\r\n    static_assert(v.index() == 1, \"\");\r\n    static_assert(std::get<1>(v).size == 4, \"\");\r\n    static_assert(std::get<1>(v).value == 42, \"\");\r\n  }\r\n}\r\n\r\nint run_test() {\r\n  test_ctor_basic();\r\n  test_ctor_sfinae();\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::in_place_type_init_list_args\r\n// -- END: test/std/utilities/variant/variant.variant/variant.ctor/in_place_type_init_list_args.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.ctor/move.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// constexpr variant(variant&&) noexcept(see below);\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n#include \"test_workarounds.h\"\r\n\r\nnamespace ctor::move {\r\nstruct ThrowsMove {\r\n  ThrowsMove(ThrowsMove&&) noexcept(false) {}\r\n};\r\n\r\nstruct NoCopy {\r\n  NoCopy(const NoCopy&) = delete;\r\n};\r\n\r\nstruct MoveOnly {\r\n  int value;\r\n  constexpr MoveOnly(int v) : value(v) {}\r\n  MoveOnly(const MoveOnly&) = delete;\r\n  MoveOnly(MoveOnly&&)      = default;\r\n};\r\n\r\nstruct MoveOnlyNT {\r\n  int value;\r\n  constexpr MoveOnlyNT(int v) : value(v) {}\r\n  MoveOnlyNT(const MoveOnlyNT&) = delete;\r\n  constexpr MoveOnlyNT(MoveOnlyNT&& other) : value(other.value) { other.value = -1; }\r\n};\r\n\r\nstruct NTMove {\r\n  constexpr NTMove(int v) : value(v) {}\r\n  NTMove(const NTMove&) = delete;\r\n  NTMove(NTMove&& that) : value(that.value) { that.value = -1; }\r\n  int value;\r\n};\r\n\r\nstatic_assert(!std::is_trivially_move_constructible<NTMove>::value, \"\");\r\nstatic_assert(std::is_move_constructible<NTMove>::value, \"\");\r\n\r\nstruct TMove {\r\n  constexpr TMove(int v) : value(v) {}\r\n  TMove(const TMove&) = delete;\r\n  TMove(TMove&&)      = default;\r\n  int value;\r\n};\r\n\r\nstatic_assert(std::is_trivially_move_constructible<TMove>::value, \"\");\r\n\r\nstruct TMoveNTCopy {\r\n  constexpr TMoveNTCopy(int v) : value(v) {}\r\n  TMoveNTCopy(const TMoveNTCopy& that) : value(that.value) {}\r\n  TMoveNTCopy(TMoveNTCopy&&) = default;\r\n  int value;\r\n};\r\n\r\nstatic_assert(std::is_trivially_move_constructible<TMoveNTCopy>::value, \"\");\r\n\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\nstruct MakeEmptyT {\r\n  static int alive;\r\n  MakeEmptyT() { ++alive; }\r\n  MakeEmptyT(const MakeEmptyT&) {\r\n    ++alive;\r\n    // Don't throw from the copy constructor since variant's assignment\r\n    // operator performs a copy before committing to the assignment.\r\n  }\r\n  MakeEmptyT(MakeEmptyT&&) { throw 42; }\r\n  MakeEmptyT& operator=(const MakeEmptyT&) { throw 42; }\r\n  MakeEmptyT& operator=(MakeEmptyT&&) { throw 42; }\r\n  ~MakeEmptyT() { --alive; }\r\n};\r\n\r\nint MakeEmptyT::alive = 0;\r\n\r\ntemplate <class Variant>\r\nvoid makeEmpty(Variant& v) {\r\n  Variant v2(std::in_place_type<MakeEmptyT>);\r\n  try {\r\n    v = std::move(v2);\r\n    assert(false);\r\n  } catch (...) {\r\n    assert(v.valueless_by_exception());\r\n  }\r\n}\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n\r\nconstexpr void test_move_noexcept() {\r\n  {\r\n    using V = std::variant<int, long>;\r\n    static_assert(std::is_nothrow_move_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, MoveOnly>;\r\n    static_assert(std::is_nothrow_move_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, MoveOnlyNT>;\r\n    static_assert(!std::is_nothrow_move_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, ThrowsMove>;\r\n    static_assert(!std::is_nothrow_move_constructible<V>::value, \"\");\r\n  }\r\n}\r\n\r\nconstexpr void test_move_ctor_sfinae() {\r\n  {\r\n    using V = std::variant<int, long>;\r\n    static_assert(std::is_move_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, MoveOnly>;\r\n    static_assert(std::is_move_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, MoveOnlyNT>;\r\n    static_assert(std::is_move_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, NoCopy>;\r\n    static_assert(!std::is_move_constructible<V>::value, \"\");\r\n  }\r\n\r\n  // Make sure we properly propagate triviality (see P0602R4).\r\n  {\r\n    using V = std::variant<int, long>;\r\n    static_assert(std::is_trivially_move_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, NTMove>;\r\n    static_assert(!std::is_trivially_move_constructible<V>::value, \"\");\r\n    static_assert(std::is_move_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, TMove>;\r\n    static_assert(std::is_trivially_move_constructible<V>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, TMoveNTCopy>;\r\n    static_assert(std::is_trivially_move_constructible<V>::value, \"\");\r\n  }\r\n}\r\n\r\ntemplate <typename T>\r\nstruct Result {\r\n  std::size_t index;\r\n  T value;\r\n};\r\n\r\nTEST_CONSTEXPR_CXX20 void test_move_ctor_basic() {\r\n  {\r\n    std::variant<int> v(std::in_place_index<0>, 42);\r\n    std::variant<int> v2 = std::move(v);\r\n    assert(v2.index() == 0);\r\n    assert(std::get<0>(v2) == 42);\r\n  }\r\n  {\r\n    std::variant<int, long> v(std::in_place_index<1>, 42);\r\n    std::variant<int, long> v2 = std::move(v);\r\n    assert(v2.index() == 1);\r\n    assert(std::get<1>(v2) == 42);\r\n  }\r\n  {\r\n    std::variant<MoveOnly> v(std::in_place_index<0>, 42);\r\n    assert(v.index() == 0);\r\n    std::variant<MoveOnly> v2(std::move(v));\r\n    assert(v2.index() == 0);\r\n    assert(std::get<0>(v2).value == 42);\r\n  }\r\n  {\r\n    std::variant<int, MoveOnly> v(std::in_place_index<1>, 42);\r\n    assert(v.index() == 1);\r\n    std::variant<int, MoveOnly> v2(std::move(v));\r\n    assert(v2.index() == 1);\r\n    assert(std::get<1>(v2).value == 42);\r\n  }\r\n  {\r\n    std::variant<MoveOnlyNT> v(std::in_place_index<0>, 42);\r\n    assert(v.index() == 0);\r\n    std::variant<MoveOnlyNT> v2(std::move(v));\r\n    assert(v2.index() == 0);\r\n    assert(std::get<0>(v).value == -1);\r\n    assert(std::get<0>(v2).value == 42);\r\n  }\r\n  {\r\n    std::variant<int, MoveOnlyNT> v(std::in_place_index<1>, 42);\r\n    assert(v.index() == 1);\r\n    std::variant<int, MoveOnlyNT> v2(std::move(v));\r\n    assert(v2.index() == 1);\r\n    assert(std::get<1>(v).value == -1);\r\n    assert(std::get<1>(v2).value == 42);\r\n  }\r\n\r\n  // Make sure we properly propagate triviality, which implies constexpr-ness (see P0602R4).\r\n  {\r\n    struct {\r\n      constexpr Result<int> operator()() const {\r\n        std::variant<int> v(std::in_place_index<0>, 42);\r\n        std::variant<int> v2 = std::move(v);\r\n        return {v2.index(), std::get<0>(std::move(v2))};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 0, \"\");\r\n    static_assert(result.value == 42, \"\");\r\n  }\r\n  {\r\n    struct {\r\n      constexpr Result<long> operator()() const {\r\n        std::variant<int, long> v(std::in_place_index<1>, 42);\r\n        std::variant<int, long> v2 = std::move(v);\r\n        return {v2.index(), std::get<1>(std::move(v2))};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 1, \"\");\r\n    static_assert(result.value == 42, \"\");\r\n  }\r\n  {\r\n    struct {\r\n      constexpr Result<TMove> operator()() const {\r\n        std::variant<TMove> v(std::in_place_index<0>, 42);\r\n        std::variant<TMove> v2(std::move(v));\r\n        return {v2.index(), std::get<0>(std::move(v2))};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 0, \"\");\r\n    static_assert(result.value.value == 42, \"\");\r\n  }\r\n  {\r\n    struct {\r\n      constexpr Result<TMove> operator()() const {\r\n        std::variant<int, TMove> v(std::in_place_index<1>, 42);\r\n        std::variant<int, TMove> v2(std::move(v));\r\n        return {v2.index(), std::get<1>(std::move(v2))};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 1, \"\");\r\n    static_assert(result.value.value == 42, \"\");\r\n  }\r\n  {\r\n    struct {\r\n      constexpr Result<TMoveNTCopy> operator()() const {\r\n        std::variant<TMoveNTCopy> v(std::in_place_index<0>, 42);\r\n        std::variant<TMoveNTCopy> v2(std::move(v));\r\n        return {v2.index(), std::get<0>(std::move(v2))};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 0, \"\");\r\n    static_assert(result.value.value == 42, \"\");\r\n  }\r\n  {\r\n    struct {\r\n      constexpr Result<TMoveNTCopy> operator()() const {\r\n        std::variant<int, TMoveNTCopy> v(std::in_place_index<1>, 42);\r\n        std::variant<int, TMoveNTCopy> v2(std::move(v));\r\n        return {v2.index(), std::get<1>(std::move(v2))};\r\n      }\r\n    } test;\r\n    constexpr auto result = test();\r\n    static_assert(result.index == 1, \"\");\r\n    static_assert(result.value.value == 42, \"\");\r\n  }\r\n}\r\n\r\nvoid test_move_ctor_valueless_by_exception() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  using V = std::variant<int, MakeEmptyT>;\r\n  V v1;\r\n  makeEmpty(v1);\r\n  V v(std::move(v1));\r\n  assert(v.valueless_by_exception());\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n}\r\n\r\ntemplate <std::size_t Idx, class T>\r\nconstexpr void test_constexpr_ctor_imp(const T& v) {\r\n  auto copy = v;\r\n  auto v2   = std::move(copy);\r\n  assert(v2.index() == v.index());\r\n  assert(v2.index() == Idx);\r\n  assert(std::get<Idx>(v2) == std::get<Idx>(v));\r\n}\r\n\r\nconstexpr void test_constexpr_move_ctor_trivial() {\r\n  // Make sure we properly propagate triviality, which implies constexpr-ness (see P0602R4).\r\n  using V = std::variant<long, void*, const int>;\r\n#ifdef TEST_WORKAROUND_MSVC_BROKEN_IS_TRIVIALLY_COPYABLE\r\n  static_assert(std::is_trivially_destructible<V>::value, \"\");\r\n  static_assert(std::is_trivially_copy_constructible<V>::value, \"\");\r\n  static_assert(std::is_trivially_move_constructible<V>::value, \"\");\r\n  static_assert(!std::is_copy_assignable<V>::value, \"\");\r\n  static_assert(!std::is_move_assignable<V>::value, \"\");\r\n#else  // TEST_WORKAROUND_MSVC_BROKEN_IS_TRIVIALLY_COPYABLE\r\n  static_assert(std::is_trivially_copyable<V>::value, \"\");\r\n#endif // TEST_WORKAROUND_MSVC_BROKEN_IS_TRIVIALLY_COPYABLE\r\n  static_assert(std::is_trivially_move_constructible<V>::value, \"\");\r\n  test_constexpr_ctor_imp<0>(V(42l));\r\n  test_constexpr_ctor_imp<1>(V(nullptr));\r\n  test_constexpr_ctor_imp<2>(V(101));\r\n}\r\n\r\nstruct NonTrivialMoveCtor {\r\n  int i = 0;\r\n  constexpr NonTrivialMoveCtor(int ii) : i(ii) {}\r\n  constexpr NonTrivialMoveCtor(const NonTrivialMoveCtor& other) = default;\r\n  constexpr NonTrivialMoveCtor(NonTrivialMoveCtor&& other) : i(other.i) {}\r\n  TEST_CONSTEXPR_CXX20 ~NonTrivialMoveCtor() = default;\r\n  friend constexpr bool operator==(const NonTrivialMoveCtor& x, const NonTrivialMoveCtor& y) { return x.i == y.i; }\r\n};\r\n\r\nTEST_CONSTEXPR_CXX20 void test_constexpr_move_ctor_non_trivial() {\r\n  using V = std::variant<long, NonTrivialMoveCtor, void*>;\r\n  static_assert(!std::is_trivially_move_constructible<V>::value, \"\");\r\n  test_constexpr_ctor_imp<0>(V(42l));\r\n  test_constexpr_ctor_imp<1>(V(NonTrivialMoveCtor(5)));\r\n  test_constexpr_ctor_imp<2>(V(nullptr));\r\n}\r\n\r\nvoid non_constexpr_test() { test_move_ctor_valueless_by_exception(); }\r\n\r\nconstexpr bool cxx17_constexpr_test() {\r\n  test_move_noexcept();\r\n  test_move_ctor_sfinae();\r\n  test_constexpr_move_ctor_trivial();\r\n\r\n  return true;\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 bool cxx20_constexpr_test() {\r\n  test_move_ctor_basic();\r\n  test_constexpr_move_ctor_non_trivial();\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  non_constexpr_test();\r\n  cxx17_constexpr_test();\r\n  cxx20_constexpr_test();\r\n\r\n  static_assert(cxx17_constexpr_test());\r\n#if TEST_STD_VER >= 20\r\n  static_assert(cxx20_constexpr_test());\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::move\r\n// -- END: test/std/utilities/variant/variant.variant/variant.ctor/move.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.ctor/T.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// template <class T> constexpr variant(T&&) noexcept(see below);\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <type_traits>\r\n#include <variant>\r\n#include <memory>\r\n#include <vector>\r\n\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n\r\nnamespace ctor::T {\r\nstruct Dummy {\r\n  Dummy() = default;\r\n};\r\n\r\nstruct ThrowsT {\r\n  ThrowsT(int) noexcept(false) {}\r\n};\r\n\r\nstruct NoThrowT {\r\n  NoThrowT(int) noexcept(true) {}\r\n};\r\n\r\nstruct AnyConstructible {\r\n  template <typename T>\r\n  AnyConstructible(T&&) {}\r\n};\r\nstruct NoConstructible {\r\n  NoConstructible() = delete;\r\n};\r\ntemplate <class T>\r\nstruct RValueConvertibleFrom {\r\n  RValueConvertibleFrom(T&&) {}\r\n};\r\n\r\nvoid test_T_ctor_noexcept() {\r\n  {\r\n    using V = std::variant<Dummy, NoThrowT>;\r\n    static_assert(std::is_nothrow_constructible<V, int>::value, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<Dummy, ThrowsT>;\r\n    static_assert(!std::is_nothrow_constructible<V, int>::value, \"\");\r\n  }\r\n}\r\n\r\nvoid test_T_ctor_sfinae() {\r\n  {\r\n    using V = std::variant<long, long long>;\r\n    static_assert(!std::is_constructible<V, int>::value, \"ambiguous\");\r\n  }\r\n  {\r\n    using V = std::variant<std::string, std::string>;\r\n    static_assert(!std::is_constructible<V, const char*>::value, \"ambiguous\");\r\n  }\r\n  {\r\n    using V = std::variant<std::string, void*>;\r\n    static_assert(!std::is_constructible<V, int>::value, \"no matching constructor\");\r\n  }\r\n  {\r\n    using V = std::variant<std::string, float>;\r\n    static_assert(!std::is_constructible<V, int>::value, \"no matching constructor\");\r\n  }\r\n  {\r\n    using V = std::variant<std::unique_ptr<int>, bool>;\r\n    static_assert(!std::is_constructible<V, std::unique_ptr<char>>::value, \"no explicit bool in constructor\");\r\n    struct X {\r\n      operator void*();\r\n    };\r\n#ifndef __EDG__ // TRANSITION, VSO-1327220\r\n    static_assert(!std::is_constructible<V, X>::value, \"no boolean conversion in constructor\");\r\n#endif // ^^^ no workaround ^^^\r\n    static_assert(std::is_constructible<V, std::false_type>::value, \"converted to bool in constructor\");\r\n  }\r\n  {\r\n    struct X {};\r\n    struct Y {\r\n      operator X();\r\n    };\r\n    using V = std::variant<X>;\r\n    static_assert(std::is_constructible<V, Y>::value, \"regression on user-defined conversions in constructor\");\r\n  }\r\n  {\r\n    using V = std::variant<AnyConstructible, NoConstructible>;\r\n    static_assert(!std::is_constructible<V, std::in_place_type_t<NoConstructible>>::value, \"no matching constructor\");\r\n    static_assert(!std::is_constructible<V, std::in_place_index_t<1>>::value, \"no matching constructor\");\r\n  }\r\n}\r\n\r\nvoid test_T_ctor_basic() {\r\n  {\r\n    constexpr std::variant<int> v(42);\r\n    static_assert(v.index() == 0, \"\");\r\n    static_assert(std::get<0>(v) == 42, \"\");\r\n  }\r\n  {\r\n    constexpr std::variant<int, long> v(42l);\r\n    static_assert(v.index() == 1, \"\");\r\n    static_assert(std::get<1>(v) == 42, \"\");\r\n  }\r\n  {\r\n    constexpr std::variant<unsigned, long> v(42);\r\n    static_assert(v.index() == 1, \"\");\r\n    static_assert(std::get<1>(v) == 42, \"\");\r\n  }\r\n  {\r\n    std::variant<std::string, bool const> v = \"foo\";\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v) == \"foo\");\r\n  }\r\n  {\r\n    std::variant<bool, std::unique_ptr<int>> v = nullptr;\r\n    if constexpr (is_permissive) {\r\n      assert(v.index() == 0);\r\n      assert(std::get<0>(v) == false);\r\n    } else {\r\n      assert(v.index() == 1);\r\n      assert(std::get<1>(v) == nullptr);\r\n    }\r\n  }\r\n  {\r\n    std::variant<bool const, int> v = true;\r\n    assert(v.index() == 0);\r\n    assert(std::get<0>(v));\r\n  }\r\n  {\r\n    std::variant<RValueConvertibleFrom<int>> v1 = 42;\r\n    assert(v1.index() == 0);\r\n\r\n    int x                                                         = 42;\r\n    std::variant<RValueConvertibleFrom<int>, AnyConstructible> v2 = x;\r\n    assert(v2.index() == 1);\r\n  }\r\n}\r\n\r\nstruct BoomOnAnything {\r\n  template <class T>\r\n  constexpr BoomOnAnything(T) {\r\n    static_assert(!std::is_same<T, T>::value, \"\");\r\n  }\r\n};\r\n\r\nvoid test_no_narrowing_check_for_class_types() {\r\n#ifndef __clang__ // TRANSITION, not yet investigated\r\n  using V = std::variant<int, BoomOnAnything>;\r\n  V v(42);\r\n  assert(v.index() == 0);\r\n  assert(std::get<0>(v) == 42);\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n\r\nstruct Bar {};\r\nstruct Baz {};\r\nvoid test_construction_with_repeated_types() {\r\n  using V = std::variant<int, Bar, Baz, int, Baz, int, int>;\r\n  static_assert(!std::is_constructible<V, int>::value, \"\");\r\n  static_assert(!std::is_constructible<V, Baz>::value, \"\");\r\n  // OK, the selected type appears only once and so it shouldn't\r\n  // be affected by the duplicate types.\r\n  static_assert(std::is_constructible<V, Bar>::value, \"\");\r\n}\r\n\r\nvoid test_vector_bool() {\r\n  std::vector<bool> vec = {true};\r\n  std::variant<bool, int> v = vec[0];\r\n  assert(v.index() == 0);\r\n  assert(std::get<0>(v) == true);\r\n}\r\n\r\nint run_test() {\r\n  test_T_ctor_basic();\r\n  test_T_ctor_noexcept();\r\n  test_T_ctor_sfinae();\r\n  test_no_narrowing_check_for_class_types();\r\n  test_construction_with_repeated_types();\r\n  test_vector_bool();\r\n  return 0;\r\n}\r\n} // namespace ctor::T\r\n// -- END: test/std/utilities/variant/variant.variant/variant.ctor/T.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.dtor/dtor.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// ~variant();\r\n\r\n#include <cassert>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace dtor {\r\nstruct NonTDtor {\r\n  int* count;\r\n  constexpr NonTDtor(int* a, int*) : count(a) {}\r\n  TEST_CONSTEXPR_CXX20 ~NonTDtor() { ++*count; }\r\n};\r\nstatic_assert(!std::is_trivially_destructible<NonTDtor>::value, \"\");\r\n\r\nstruct NonTDtor1 {\r\n  int* count;\r\n  constexpr NonTDtor1(int*, int* b) : count(b) {}\r\n  TEST_CONSTEXPR_CXX20 ~NonTDtor1() { ++*count; }\r\n};\r\nstatic_assert(!std::is_trivially_destructible<NonTDtor1>::value, \"\");\r\n\r\nstruct TDtor {\r\n  constexpr TDtor() = default;\r\n  constexpr TDtor(const TDtor&) {} // non-trivial copy\r\n  TEST_CONSTEXPR_CXX20 ~TDtor() = default;\r\n};\r\nstatic_assert(!std::is_trivially_copy_constructible<TDtor>::value, \"\");\r\nstatic_assert(std::is_trivially_destructible<TDtor>::value, \"\");\r\n\r\nTEST_CONSTEXPR_CXX20 bool test() {\r\n  {\r\n    using V = std::variant<int, long, TDtor>;\r\n    static_assert(std::is_trivially_destructible<V>::value, \"\");\r\n    [[maybe_unused]] V v(std::in_place_index<2>);\r\n  }\r\n  {\r\n    using V = std::variant<NonTDtor, int, NonTDtor1>;\r\n    static_assert(!std::is_trivially_destructible<V>::value, \"\");\r\n    {\r\n      int count0 = 0;\r\n      int count1 = 0;\r\n      {\r\n        V v(std::in_place_index<0>, &count0, &count1);\r\n        assert(count0 == 0);\r\n        assert(count1 == 0);\r\n      }\r\n      assert(count0 == 1);\r\n      assert(count1 == 0);\r\n    }\r\n    {\r\n      int count0 = 0;\r\n      int count1 = 0;\r\n      { V v(std::in_place_index<1>); }\r\n      assert(count0 == 0);\r\n      assert(count1 == 0);\r\n    }\r\n    {\r\n      int count0 = 0;\r\n      int count1 = 0;\r\n      {\r\n        V v(std::in_place_index<2>, &count0, &count1);\r\n        assert(count0 == 0);\r\n        assert(count1 == 0);\r\n      }\r\n      assert(count0 == 0);\r\n      assert(count1 == 1);\r\n    }\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  test();\r\n\r\n#if TEST_STD_VER >= 20\r\n  static_assert(test());\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace dtor\r\n// -- END: test/std/utilities/variant/variant.variant/variant.dtor/dtor.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.mod/emplace_index_args.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// template <size_t I, class ...Args>\r\n//   variant_alternative_t<I, variant<Types...>>& emplace(Args&&... args);\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"archetypes.h\"\r\n#include \"test_convertible.h\"\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n\r\nnamespace emplace::index_args {\r\ntemplate <class Var, std::size_t I, class... Args>\r\nconstexpr auto test_emplace_exists_imp(int)\r\n    -> decltype(std::declval<Var>().template emplace<I>(std::declval<Args>()...), true) {\r\n  return true;\r\n}\r\n\r\ntemplate <class, std::size_t, class...>\r\nconstexpr auto test_emplace_exists_imp(long) -> bool {\r\n  return false;\r\n}\r\n\r\ntemplate <class Var, std::size_t I, class... Args>\r\nconstexpr bool emplace_exists() {\r\n  return test_emplace_exists_imp<Var, I, Args...>(0);\r\n}\r\n\r\nconstexpr void test_emplace_sfinae() {\r\n  {\r\n    using V = std::variant<int, void*, const void*, TestTypes::NoCtors>;\r\n    static_assert(emplace_exists<V, 0>(), \"\");\r\n    static_assert(emplace_exists<V, 0, int>(), \"\");\r\n    static_assert(!emplace_exists<V, 0, decltype(nullptr)>(), \"cannot construct\");\r\n    static_assert(emplace_exists<V, 1, decltype(nullptr)>(), \"\");\r\n    static_assert(emplace_exists<V, 1, int*>(), \"\");\r\n    static_assert(!emplace_exists<V, 1, const int*>(), \"\");\r\n    static_assert(!emplace_exists<V, 1, int>(), \"cannot construct\");\r\n    static_assert(emplace_exists<V, 2, const int*>(), \"\");\r\n    static_assert(emplace_exists<V, 2, int*>(), \"\");\r\n    static_assert(!emplace_exists<V, 3>(), \"cannot construct\");\r\n  }\r\n}\r\n\r\nstruct NoCtor {\r\n  NoCtor() = delete;\r\n};\r\n\r\nTEST_CONSTEXPR_CXX20 void test_basic() {\r\n  {\r\n    using V = std::variant<int>;\r\n    V v(42);\r\n    auto& ref1 = v.emplace<0>();\r\n    static_assert(std::is_same_v<int&, decltype(ref1)>, \"\");\r\n    assert(std::get<0>(v) == 0);\r\n    assert(&ref1 == &std::get<0>(v));\r\n    auto& ref2 = v.emplace<0>(42);\r\n    static_assert(std::is_same_v<int&, decltype(ref2)>, \"\");\r\n    assert(std::get<0>(v) == 42);\r\n    assert(&ref2 == &std::get<0>(v));\r\n  }\r\n\r\n  {\r\n    using V     = std::variant<int, long, const void*, NoCtor, std::string>;\r\n    const int x = 100;\r\n    V v(std::in_place_index<0>, -1);\r\n    // default emplace a value\r\n    auto& ref1 = v.emplace<1>();\r\n    static_assert(std::is_same_v<long&, decltype(ref1)>, \"\");\r\n    assert(std::get<1>(v) == 0);\r\n    assert(&ref1 == &std::get<1>(v));\r\n    auto& ref2 = v.emplace<2>(&x);\r\n    static_assert(std::is_same_v<const void*&, decltype(ref2)>, \"\");\r\n    assert(std::get<2>(v) == &x);\r\n    assert(&ref2 == &std::get<2>(v));\r\n    // emplace with multiple args\r\n    auto& ref3 = v.emplace<4>(3u, 'a');\r\n    static_assert(std::is_same_v<std::string&, decltype(ref3)>, \"\");\r\n    assert(std::get<4>(v) == \"aaa\");\r\n    assert(&ref3 == &std::get<4>(v));\r\n  }\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 bool test() {\r\n  test_basic();\r\n  test_emplace_sfinae();\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  test();\r\n\r\n#if TEST_STD_VER >= 20\r\n  static_assert(test());\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace emplace::index_args\r\n// -- END: test/std/utilities/variant/variant.variant/variant.mod/emplace_index_args.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.mod/emplace_index_init_list_args.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// template <size_t I, class U, class ...Args>\r\n//   variant_alternative_t<I, variant<Types...>>& emplace(initializer_list<U> il,Args&&... args);\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"archetypes.h\"\r\n#include \"test_convertible.h\"\r\n#include \"test_macros.h\"\r\n\r\nnamespace emplace::index_init_list_args {\r\nstruct InitList {\r\n  std::size_t size;\r\n  constexpr InitList(std::initializer_list<int> il) : size(il.size()) {}\r\n};\r\n\r\nstruct InitListArg {\r\n  std::size_t size;\r\n  int value;\r\n  constexpr InitListArg(std::initializer_list<int> il, int v) : size(il.size()), value(v) {}\r\n};\r\n\r\ntemplate <class Var, std::size_t I, class... Args>\r\nconstexpr auto test_emplace_exists_imp(int)\r\n    -> decltype(std::declval<Var>().template emplace<I>(std::declval<Args>()...), true) {\r\n  return true;\r\n}\r\n\r\ntemplate <class, std::size_t, class...>\r\nconstexpr auto test_emplace_exists_imp(long) -> bool {\r\n  return false;\r\n}\r\n\r\ntemplate <class Var, std::size_t I, class... Args>\r\nconstexpr bool emplace_exists() {\r\n  return test_emplace_exists_imp<Var, I, Args...>(0);\r\n}\r\n\r\nconstexpr void test_emplace_sfinae() {\r\n  using V  = std::variant<int, TestTypes::NoCtors, InitList, InitListArg, long, long>;\r\n  using IL = std::initializer_list<int>;\r\n  static_assert(!emplace_exists<V, 1, IL>(), \"no such constructor\");\r\n  static_assert(emplace_exists<V, 2, IL>(), \"\");\r\n  static_assert(!emplace_exists<V, 2, int>(), \"args don't match\");\r\n  static_assert(!emplace_exists<V, 2, IL, int>(), \"too many args\");\r\n  static_assert(emplace_exists<V, 3, IL, int>(), \"\");\r\n  static_assert(!emplace_exists<V, 3, int>(), \"args don't match\");\r\n  static_assert(!emplace_exists<V, 3, IL>(), \"too few args\");\r\n  static_assert(!emplace_exists<V, 3, IL, int, int>(), \"too many args\");\r\n}\r\n\r\nstruct NoCtor {\r\n  NoCtor() = delete;\r\n};\r\n\r\nTEST_CONSTEXPR_CXX20 void test_basic() {\r\n  using V = std::variant<int, InitList, InitListArg, NoCtor>;\r\n  V v;\r\n  auto& ref1 = v.emplace<1>({1, 2, 3});\r\n  static_assert(std::is_same_v<InitList&, decltype(ref1)>, \"\");\r\n  assert(std::get<1>(v).size == 3);\r\n  assert(&ref1 == &std::get<1>(v));\r\n  auto& ref2 = v.emplace<2>({1, 2, 3, 4}, 42);\r\n  static_assert(std::is_same_v<InitListArg&, decltype(ref2)>, \"\");\r\n  assert(std::get<2>(v).size == 4);\r\n  assert(std::get<2>(v).value == 42);\r\n  assert(&ref2 == &std::get<2>(v));\r\n  auto& ref3 = v.emplace<1>({1});\r\n  static_assert(std::is_same_v<InitList&, decltype(ref3)>, \"\");\r\n  assert(std::get<1>(v).size == 1);\r\n  assert(&ref3 == &std::get<1>(v));\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 bool test() {\r\n  test_basic();\r\n  test_emplace_sfinae();\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  test();\r\n\r\n#if TEST_STD_VER >= 20\r\n  static_assert(test());\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace emplace::index_init_list_args\r\n// -- END: test/std/utilities/variant/variant.variant/variant.mod/emplace_index_init_list_args.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.mod/emplace_type_args.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// template <class T, class ...Args> T& emplace(Args&&... args);\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"archetypes.h\"\r\n#include \"test_convertible.h\"\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n\r\nnamespace emplace::type_args {\r\ntemplate <class Var, class T, class... Args>\r\nconstexpr auto test_emplace_exists_imp(int)\r\n    -> decltype(std::declval<Var>().template emplace<T>(std::declval<Args>()...), true) {\r\n  return true;\r\n}\r\n\r\ntemplate <class, class, class...>\r\nconstexpr auto test_emplace_exists_imp(long) -> bool {\r\n  return false;\r\n}\r\n\r\ntemplate <class... Args>\r\nconstexpr bool emplace_exists() {\r\n  return test_emplace_exists_imp<Args...>(0);\r\n}\r\n\r\nconstexpr void test_emplace_sfinae() {\r\n  {\r\n    using V = std::variant<int, void*, const void*, TestTypes::NoCtors>;\r\n    static_assert(emplace_exists<V, int>(), \"\");\r\n    static_assert(emplace_exists<V, int, int>(), \"\");\r\n    static_assert(!emplace_exists<V, int, decltype(nullptr)>(), \"cannot construct\");\r\n    static_assert(emplace_exists<V, void*, decltype(nullptr)>(), \"\");\r\n    static_assert(!emplace_exists<V, void*, int>(), \"cannot construct\");\r\n    static_assert(emplace_exists<V, void*, int*>(), \"\");\r\n    static_assert(!emplace_exists<V, void*, const int*>(), \"\");\r\n    static_assert(emplace_exists<V, const void*, const int*>(), \"\");\r\n    static_assert(emplace_exists<V, const void*, int*>(), \"\");\r\n    static_assert(!emplace_exists<V, TestTypes::NoCtors>(), \"cannot construct\");\r\n  }\r\n}\r\n\r\nstruct NoCtor {\r\n  NoCtor() = delete;\r\n};\r\n\r\nTEST_CONSTEXPR_CXX20 void test_basic() {\r\n  {\r\n    using V = std::variant<int>;\r\n    V v(42);\r\n    auto& ref1 = v.emplace<int>();\r\n    static_assert(std::is_same_v<int&, decltype(ref1)>, \"\");\r\n    assert(std::get<0>(v) == 0);\r\n    assert(&ref1 == &std::get<0>(v));\r\n    auto& ref2 = v.emplace<int>(42);\r\n    static_assert(std::is_same_v<int&, decltype(ref2)>, \"\");\r\n    assert(std::get<0>(v) == 42);\r\n    assert(&ref2 == &std::get<0>(v));\r\n  }\r\n  {\r\n    using V     = std::variant<int, long, const void*, NoCtor, std::string>;\r\n    const int x = 100;\r\n    V v(std::in_place_type<int>, -1);\r\n    // default emplace a value\r\n    auto& ref1 = v.emplace<long>();\r\n    static_assert(std::is_same_v<long&, decltype(ref1)>, \"\");\r\n    assert(std::get<1>(v) == 0);\r\n    assert(&ref1 == &std::get<1>(v));\r\n    auto& ref2 = v.emplace<const void*>(&x);\r\n    static_assert(std::is_same_v<const void*&, decltype(ref2)>, \"\");\r\n    assert(std::get<2>(v) == &x);\r\n    assert(&ref2 == &std::get<2>(v));\r\n    // emplace with multiple args\r\n    auto& ref3 = v.emplace<std::string>(3u, 'a');\r\n    static_assert(std::is_same_v<std::string&, decltype(ref3)>, \"\");\r\n    assert(std::get<4>(v) == \"aaa\");\r\n    assert(&ref3 == &std::get<4>(v));\r\n  }\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 bool test() {\r\n  test_basic();\r\n  test_emplace_sfinae();\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  test();\r\n\r\n#if TEST_STD_VER >= 20\r\n  static_assert(test());\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace emplace::type_args\r\n// -- END: test/std/utilities/variant/variant.variant/variant.mod/emplace_type_args.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.mod/emplace_type_init_list_args.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// template <class T, class U, class ...Args>\r\n//   T& emplace(initializer_list<U> il,Args&&... args);\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"archetypes.h\"\r\n#include \"test_convertible.h\"\r\n#include \"test_macros.h\"\r\n\r\nnamespace emplace::type_init_list_args {\r\nstruct InitList {\r\n  std::size_t size;\r\n  constexpr InitList(std::initializer_list<int> il) : size(il.size()) {}\r\n};\r\n\r\nstruct InitListArg {\r\n  std::size_t size;\r\n  int value;\r\n  constexpr InitListArg(std::initializer_list<int> il, int v) : size(il.size()), value(v) {}\r\n};\r\n\r\ntemplate <class Var, class T, class... Args>\r\nconstexpr auto test_emplace_exists_imp(int)\r\n    -> decltype(std::declval<Var>().template emplace<T>(std::declval<Args>()...), true) {\r\n  return true;\r\n}\r\n\r\ntemplate <class, class, class...>\r\nconstexpr auto test_emplace_exists_imp(long) -> bool {\r\n  return false;\r\n}\r\n\r\ntemplate <class... Args>\r\nconstexpr bool emplace_exists() {\r\n  return test_emplace_exists_imp<Args...>(0);\r\n}\r\n\r\nconstexpr void test_emplace_sfinae() {\r\n  using V  = std::variant<int, TestTypes::NoCtors, InitList, InitListArg, long, long>;\r\n  using IL = std::initializer_list<int>;\r\n  static_assert(emplace_exists<V, InitList, IL>(), \"\");\r\n  static_assert(!emplace_exists<V, InitList, int>(), \"args don't match\");\r\n  static_assert(!emplace_exists<V, InitList, IL, int>(), \"too many args\");\r\n  static_assert(emplace_exists<V, InitListArg, IL, int>(), \"\");\r\n  static_assert(!emplace_exists<V, InitListArg, int>(), \"args don't match\");\r\n  static_assert(!emplace_exists<V, InitListArg, IL>(), \"too few args\");\r\n  static_assert(!emplace_exists<V, InitListArg, IL, int, int>(), \"too many args\");\r\n}\r\n\r\nstruct NoCtor {\r\n  NoCtor() = delete;\r\n};\r\n\r\nTEST_CONSTEXPR_CXX20 void test_basic() {\r\n  using V = std::variant<int, InitList, InitListArg, NoCtor>;\r\n  V v;\r\n  auto& ref1 = v.emplace<InitList>({1, 2, 3});\r\n  static_assert(std::is_same_v<InitList&, decltype(ref1)>, \"\");\r\n  assert(std::get<InitList>(v).size == 3);\r\n  assert(&ref1 == &std::get<InitList>(v));\r\n  auto& ref2 = v.emplace<InitListArg>({1, 2, 3, 4}, 42);\r\n  static_assert(std::is_same_v<InitListArg&, decltype(ref2)>, \"\");\r\n  assert(std::get<InitListArg>(v).size == 4);\r\n  assert(std::get<InitListArg>(v).value == 42);\r\n  assert(&ref2 == &std::get<InitListArg>(v));\r\n  auto& ref3 = v.emplace<InitList>({1});\r\n  static_assert(std::is_same_v<InitList&, decltype(ref3)>, \"\");\r\n  assert(std::get<InitList>(v).size == 1);\r\n  assert(&ref3 == &std::get<InitList>(v));\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 bool test() {\r\n  test_basic();\r\n  test_emplace_sfinae();\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  test();\r\n\r\n#if TEST_STD_VER >= 20\r\n  static_assert(test());\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace emplace::type_init_list_args\r\n// -- END: test/std/utilities/variant/variant.variant/variant.mod/emplace_type_init_list_args.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.status/index.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// constexpr size_t index() const noexcept;\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"archetypes.h\"\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n\r\n\r\nnamespace status::index {\r\nint run_test() {\r\n  {\r\n    using V = std::variant<int, long>;\r\n    constexpr V v;\r\n    static_assert(v.index() == 0, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, long>;\r\n    V v;\r\n    assert(v.index() == 0);\r\n  }\r\n  {\r\n    using V = std::variant<int, long>;\r\n    constexpr V v(std::in_place_index<1>);\r\n    static_assert(v.index() == 1, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, std::string>;\r\n    V v(\"abc\");\r\n    assert(v.index() == 1);\r\n    v = 42;\r\n    assert(v.index() == 0);\r\n  }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    V v;\r\n    assert(v.index() == 0);\r\n    makeEmpty(v);\r\n    assert(v.index() == std::variant_npos);\r\n  }\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace status::index\r\n// -- END: test/std/utilities/variant/variant.variant/variant.status/index.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.status/valueless_by_exception.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// constexpr bool valueless_by_exception() const noexcept;\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"archetypes.h\"\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n\r\n\r\nnamespace status::valueless_by_exception {\r\nint run_test() {\r\n  {\r\n    using V = std::variant<int, long>;\r\n    constexpr V v;\r\n    static_assert(!v.valueless_by_exception(), \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, long>;\r\n    V v;\r\n    assert(!v.valueless_by_exception());\r\n  }\r\n  {\r\n    using V = std::variant<int, long, std::string>;\r\n    const V v(\"abc\");\r\n    assert(!v.valueless_by_exception());\r\n  }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    V v;\r\n    assert(!v.valueless_by_exception());\r\n    makeEmpty(v);\r\n    assert(v.valueless_by_exception());\r\n  }\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace status::valueless_by_exception\r\n// -- END: test/std/utilities/variant/variant.variant/variant.status/valueless_by_exception.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.variant/variant.swap/swap.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// template <class ...Types> class variant;\r\n\r\n// void swap(variant& rhs) noexcept(see below)\r\n\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <string>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include \"test_convertible.h\"\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n\r\nnamespace member_swap {\r\nstruct NotSwappable {};\r\nvoid swap(NotSwappable&, NotSwappable&) = delete;\r\n\r\nstruct NotCopyable {\r\n  NotCopyable()                              = default;\r\n  NotCopyable(const NotCopyable&)            = delete;\r\n  NotCopyable& operator=(const NotCopyable&) = delete;\r\n};\r\n\r\nstruct NotCopyableWithSwap {\r\n  NotCopyableWithSwap()                                      = default;\r\n  NotCopyableWithSwap(const NotCopyableWithSwap&)            = delete;\r\n  NotCopyableWithSwap& operator=(const NotCopyableWithSwap&) = delete;\r\n};\r\nconstexpr void swap(NotCopyableWithSwap&, NotCopyableWithSwap) {}\r\n\r\nstruct NotMoveAssignable {\r\n  NotMoveAssignable()                               = default;\r\n  NotMoveAssignable(NotMoveAssignable&&)            = default;\r\n  NotMoveAssignable& operator=(NotMoveAssignable&&) = delete;\r\n};\r\n\r\nstruct NotMoveAssignableWithSwap {\r\n  NotMoveAssignableWithSwap()                                       = default;\r\n  NotMoveAssignableWithSwap(NotMoveAssignableWithSwap&&)            = default;\r\n  NotMoveAssignableWithSwap& operator=(NotMoveAssignableWithSwap&&) = delete;\r\n};\r\nconstexpr void swap(NotMoveAssignableWithSwap&, NotMoveAssignableWithSwap&) noexcept {}\r\n\r\ntemplate <bool Throws>\r\nconstexpr void do_throw() {}\r\n\r\ntemplate <>\r\nvoid do_throw<true>() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  throw 42;\r\n#else\r\n  std::abort();\r\n#endif\r\n}\r\n\r\ntemplate <bool NT_Copy, bool NT_Move, bool NT_CopyAssign, bool NT_MoveAssign, bool NT_Swap, bool EnableSwap = true>\r\nstruct NothrowTypeImp {\r\n  int value;\r\n  int* move_called;\r\n  int* move_assign_called;\r\n  int* swap_called;\r\n\r\n  constexpr NothrowTypeImp(int v, int* mv_ctr, int* mv_assign, int* swap)\r\n      : value(v), move_called(mv_ctr), move_assign_called(mv_assign), swap_called(swap) {}\r\n\r\n  NothrowTypeImp(const NothrowTypeImp& o) noexcept(NT_Copy) : value(o.value) { assert(false); } // never called by test\r\n\r\n  constexpr NothrowTypeImp(NothrowTypeImp&& o) noexcept(NT_Move)\r\n      : value(o.value),\r\n        move_called(o.move_called),\r\n        move_assign_called(o.move_assign_called),\r\n        swap_called(o.swap_called) {\r\n    ++*move_called;\r\n    do_throw<!NT_Move>();\r\n    o.value = -1;\r\n  }\r\n\r\n  NothrowTypeImp& operator=(const NothrowTypeImp&) noexcept(NT_CopyAssign) {\r\n    assert(false);\r\n    return *this;\r\n  } // never called by the tests\r\n\r\n  constexpr NothrowTypeImp& operator=(NothrowTypeImp&& o) noexcept(NT_MoveAssign) {\r\n    ++*move_assign_called;\r\n    do_throw<!NT_MoveAssign>();\r\n    value   = o.value;\r\n    o.value = -1;\r\n    return *this;\r\n  }\r\n};\r\n\r\ntemplate <bool NT_Copy, bool NT_Move, bool NT_CopyAssign, bool NT_MoveAssign, bool NT_Swap>\r\nconstexpr void\r\nswap(NothrowTypeImp<NT_Copy, NT_Move, NT_CopyAssign, NT_MoveAssign, NT_Swap, true>& lhs,\r\n     NothrowTypeImp<NT_Copy, NT_Move, NT_CopyAssign, NT_MoveAssign, NT_Swap, true>& rhs) noexcept(NT_Swap) {\r\n  ++*lhs.swap_called;\r\n  do_throw<!NT_Swap>();\r\n  std::swap(lhs.value, rhs.value);\r\n}\r\n\r\n// throwing copy, nothrow move ctor/assign, no swap provided\r\nusing NothrowMoveable = NothrowTypeImp<false, true, false, true, false, false>;\r\n// throwing copy and move assign, nothrow move ctor, no swap provided\r\nusing NothrowMoveCtor = NothrowTypeImp<false, true, false, false, false, false>;\r\n// nothrow move ctor, throwing move assignment, swap provided\r\nusing NothrowMoveCtorWithThrowingSwap = NothrowTypeImp<false, true, false, false, false, true>;\r\n// throwing move ctor, nothrow move assignment, no swap provided\r\nusing ThrowingMoveCtor = NothrowTypeImp<false, false, false, true, false, false>;\r\n// throwing special members, nothrowing swap\r\nusing ThrowingTypeWithNothrowSwap = NothrowTypeImp<false, false, false, false, true, true>;\r\nusing NothrowTypeWithThrowingSwap = NothrowTypeImp<true, true, true, true, false, true>;\r\n// throwing move assign with nothrow move and nothrow swap\r\nusing ThrowingMoveAssignNothrowMoveCtorWithSwap = NothrowTypeImp<false, true, false, false, true, true>;\r\n// throwing move assign with nothrow move but no swap.\r\nusing ThrowingMoveAssignNothrowMoveCtor = NothrowTypeImp<false, true, false, false, false, false>;\r\n\r\nstruct NonThrowingNonNoexceptType {\r\n  int value;\r\n  int* move_called;\r\n  constexpr NonThrowingNonNoexceptType(int v, int* mv_called) : value(v), move_called(mv_called) {}\r\n  constexpr NonThrowingNonNoexceptType(NonThrowingNonNoexceptType&& o) noexcept(false)\r\n      : value(o.value), move_called(o.move_called) {\r\n    ++*move_called;\r\n    o.value = -1;\r\n  }\r\n  NonThrowingNonNoexceptType& operator=(NonThrowingNonNoexceptType&&) noexcept(false) {\r\n    assert(false); // never called by the tests.\r\n    return *this;\r\n  }\r\n};\r\n\r\nstruct ThrowsOnSecondMove {\r\n  int value;\r\n  int move_count;\r\n  ThrowsOnSecondMove(int v) : value(v), move_count(0) {}\r\n  ThrowsOnSecondMove(ThrowsOnSecondMove&& o) noexcept(false) : value(o.value), move_count(o.move_count + 1) {\r\n    if (move_count == 2)\r\n      do_throw<true>();\r\n    o.value = -1;\r\n  }\r\n  ThrowsOnSecondMove& operator=(ThrowsOnSecondMove&&) {\r\n    assert(false); // not called by test\r\n    return *this;\r\n  }\r\n};\r\n\r\nvoid test_swap_valueless_by_exception() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  using V = std::variant<int, MakeEmptyT>;\r\n  { // both empty\r\n    V v1;\r\n    makeEmpty(v1);\r\n    V v2;\r\n    makeEmpty(v2);\r\n    assert(MakeEmptyT::alive == 0);\r\n    { // member swap\r\n      v1.swap(v2);\r\n      assert(v1.valueless_by_exception());\r\n      assert(v2.valueless_by_exception());\r\n      assert(MakeEmptyT::alive == 0);\r\n    }\r\n    { // non-member swap\r\n      swap(v1, v2);\r\n      assert(v1.valueless_by_exception());\r\n      assert(v2.valueless_by_exception());\r\n      assert(MakeEmptyT::alive == 0);\r\n    }\r\n  }\r\n  { // only one empty\r\n    V v1(42);\r\n    V v2;\r\n    makeEmpty(v2);\r\n    { // member swap\r\n      v1.swap(v2);\r\n      assert(v1.valueless_by_exception());\r\n      assert(std::get<0>(v2) == 42);\r\n      // swap again\r\n      v2.swap(v1);\r\n      assert(v2.valueless_by_exception());\r\n      assert(std::get<0>(v1) == 42);\r\n    }\r\n    { // non-member swap\r\n      swap(v1, v2);\r\n      assert(v1.valueless_by_exception());\r\n      assert(std::get<0>(v2) == 42);\r\n      // swap again\r\n      swap(v1, v2);\r\n      assert(v2.valueless_by_exception());\r\n      assert(std::get<0>(v1) == 42);\r\n    }\r\n  }\r\n#endif\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 void test_swap_same_alternative() {\r\n  {\r\n    using V                = std::variant<ThrowingTypeWithNothrowSwap, int>;\r\n    int move_called        = 0;\r\n    int move_assign_called = 0;\r\n    int swap_called        = 0;\r\n    V v1(std::in_place_index<0>, 42, &move_called, &move_assign_called, &swap_called);\r\n    V v2(std::in_place_index<0>, 100, &move_called, &move_assign_called, &swap_called);\r\n    v1.swap(v2);\r\n    assert(swap_called == 1);\r\n    assert(std::get<0>(v1).value == 100);\r\n    assert(std::get<0>(v2).value == 42);\r\n    swap(v1, v2);\r\n    assert(swap_called == 2);\r\n    assert(std::get<0>(v1).value == 42);\r\n    assert(std::get<0>(v2).value == 100);\r\n\r\n    assert(move_called == 0);\r\n    assert(move_assign_called == 0);\r\n  }\r\n  {\r\n    using V                = std::variant<NothrowMoveable, int>;\r\n    int move_called        = 0;\r\n    int move_assign_called = 0;\r\n    int swap_called        = 0;\r\n    V v1(std::in_place_index<0>, 42, &move_called, &move_assign_called, &swap_called);\r\n    V v2(std::in_place_index<0>, 100, &move_called, &move_assign_called, &swap_called);\r\n    v1.swap(v2);\r\n    assert(swap_called == 0);\r\n    assert(move_called == 1);\r\n    assert(move_assign_called == 2);\r\n    assert(std::get<0>(v1).value == 100);\r\n    assert(std::get<0>(v2).value == 42);\r\n\r\n    move_called        = 0;\r\n    move_assign_called = 0;\r\n    swap_called        = 0;\r\n\r\n    swap(v1, v2);\r\n    assert(swap_called == 0);\r\n    assert(move_called == 1);\r\n    assert(move_assign_called == 2);\r\n    assert(std::get<0>(v1).value == 42);\r\n    assert(std::get<0>(v2).value == 100);\r\n  }\r\n}\r\n\r\nvoid test_swap_same_alternative_throws(){\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {using V = std::variant<NothrowTypeWithThrowingSwap, int>;\r\nint move_called        = 0;\r\nint move_assign_called = 0;\r\nint swap_called        = 0;\r\nV v1(std::in_place_index<0>, 42, &move_called, &move_assign_called, &swap_called);\r\nV v2(std::in_place_index<0>, 100, &move_called, &move_assign_called, &swap_called);\r\ntry {\r\n  v1.swap(v2);\r\n  assert(false);\r\n} catch (int) {\r\n}\r\nassert(swap_called == 1);\r\nassert(move_called == 0);\r\nassert(move_assign_called == 0);\r\nassert(std::get<0>(v1).value == 42);\r\nassert(std::get<0>(v2).value == 100);\r\n}\r\n\r\n{\r\n  using V                = std::variant<ThrowingMoveCtor, int>;\r\n  int move_called        = 0;\r\n  int move_assign_called = 0;\r\n  int swap_called        = 0;\r\n  V v1(std::in_place_index<0>, 42, &move_called, &move_assign_called, &swap_called);\r\n  V v2(std::in_place_index<0>, 100, &move_called, &move_assign_called, &swap_called);\r\n  try {\r\n    v1.swap(v2);\r\n    assert(false);\r\n  } catch (int) {\r\n  }\r\n  assert(move_called == 1); // call threw\r\n  assert(move_assign_called == 0);\r\n  assert(swap_called == 0);\r\n  assert(std::get<0>(v1).value == 42); // throw happened before v1 was moved from\r\n  assert(std::get<0>(v2).value == 100);\r\n}\r\n{\r\n  using V                = std::variant<ThrowingMoveAssignNothrowMoveCtor, int>;\r\n  int move_called        = 0;\r\n  int move_assign_called = 0;\r\n  int swap_called        = 0;\r\n  V v1(std::in_place_index<0>, 42, &move_called, &move_assign_called, &swap_called);\r\n  V v2(std::in_place_index<0>, 100, &move_called, &move_assign_called, &swap_called);\r\n  try {\r\n    v1.swap(v2);\r\n    assert(false);\r\n  } catch (int) {\r\n  }\r\n  assert(move_called == 1);\r\n  assert(move_assign_called == 1); // call threw and didn't complete\r\n  assert(swap_called == 0);\r\n  assert(std::get<0>(v1).value == -1); // v1 was moved from\r\n  assert(std::get<0>(v2).value == 100);\r\n}\r\n#endif\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 void test_swap_different_alternatives() {\r\n  {\r\n    using V                = std::variant<NothrowMoveCtorWithThrowingSwap, int>;\r\n    int move_called        = 0;\r\n    int move_assign_called = 0;\r\n    int swap_called        = 0;\r\n    V v1(std::in_place_index<0>, 42, &move_called, &move_assign_called, &swap_called);\r\n    V v2(std::in_place_index<1>, 100);\r\n    v1.swap(v2);\r\n    assert(swap_called == 0);\r\n    // The libc++ implementation double copies the argument, and not\r\n    // the variant swap is called on.\r\n    LIBCPP_ASSERT(move_called == 1);\r\n    assert(move_called <= 2);\r\n    assert(move_assign_called == 0);\r\n    assert(std::get<1>(v1) == 100);\r\n    assert(std::get<0>(v2).value == 42);\r\n\r\n    move_called        = 0;\r\n    move_assign_called = 0;\r\n    swap_called        = 0;\r\n\r\n    swap(v1, v2);\r\n    assert(swap_called == 0);\r\n    LIBCPP_ASSERT(move_called == 2);\r\n    assert(move_called <= 2);\r\n    assert(move_assign_called == 0);\r\n    assert(std::get<0>(v1).value == 42);\r\n    assert(std::get<1>(v2) == 100);\r\n  }\r\n}\r\n\r\nvoid test_swap_different_alternatives_throws() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  {\r\n    using V                 = std::variant<ThrowingTypeWithNothrowSwap, NonThrowingNonNoexceptType>;\r\n    int move_called1        = 0;\r\n    int move_assign_called1 = 0;\r\n    int swap_called1        = 0;\r\n    int move_called2        = 0;\r\n    V v1(std::in_place_index<0>, 42, &move_called1, &move_assign_called1, &swap_called1);\r\n    V v2(std::in_place_index<1>, 100, &move_called2);\r\n    try {\r\n      v1.swap(v2);\r\n      assert(false);\r\n    } catch (int) {\r\n    }\r\n    assert(swap_called1 == 0);\r\n    assert(move_called1 == 1); // throws\r\n    assert(move_assign_called1 == 0);\r\n    // TODO: libc++ shouldn't move from T2 here.\r\n    LIBCPP_ASSERT(move_called2 == 1);\r\n    assert(move_called2 <= 1);\r\n    assert(std::get<0>(v1).value == 42);\r\n    if (move_called2 != 0)\r\n      assert(v2.valueless_by_exception());\r\n    else\r\n      assert(std::get<1>(v2).value == 100);\r\n  }\r\n  {\r\n    using V                 = std::variant<NonThrowingNonNoexceptType, ThrowingTypeWithNothrowSwap>;\r\n    int move_called1        = 0;\r\n    int move_called2        = 0;\r\n    int move_assign_called2 = 0;\r\n    int swap_called2        = 0;\r\n    V v1(std::in_place_index<0>, 42, &move_called1);\r\n    V v2(std::in_place_index<1>, 100, &move_called2, &move_assign_called2, &swap_called2);\r\n    try {\r\n      v1.swap(v2);\r\n      assert(false);\r\n    } catch (int) {\r\n    }\r\n    LIBCPP_ASSERT(move_called1 == 0);\r\n    assert(move_called1 <= 1);\r\n    assert(swap_called2 == 0);\r\n    assert(move_called2 == 1); // throws\r\n    assert(move_assign_called2 == 0);\r\n    if (move_called1 != 0)\r\n      assert(v1.valueless_by_exception());\r\n    else\r\n      assert(std::get<0>(v1).value == 42);\r\n    assert(std::get<1>(v2).value == 100);\r\n  }\r\n// TODO: The tests below are just very libc++ specific\r\n#  ifdef _LIBCPP_VERSION\r\n  {\r\n    using V         = std::variant<ThrowsOnSecondMove, NonThrowingNonNoexceptType>;\r\n    int move_called = 0;\r\n    V v1(std::in_place_index<0>, 42);\r\n    V v2(std::in_place_index<1>, 100, &move_called);\r\n    v1.swap(v2);\r\n    assert(move_called == 2);\r\n    assert(std::get<1>(v1).value == 100);\r\n    assert(std::get<0>(v2).value == 42);\r\n    assert(std::get<0>(v2).move_count == 1);\r\n  }\r\n  {\r\n    using V         = std::variant<NonThrowingNonNoexceptType, ThrowsOnSecondMove>;\r\n    int move_called = 0;\r\n    V v1(std::in_place_index<0>, 42, &move_called);\r\n    V v2(std::in_place_index<1>, 100);\r\n    try {\r\n      v1.swap(v2);\r\n      assert(false);\r\n    } catch (int) {\r\n    }\r\n    assert(move_called == 1);\r\n    assert(v1.valueless_by_exception());\r\n    assert(std::get<0>(v2).value == 42);\r\n  }\r\n#  endif\r\n  // testing libc++ extension. If either variant stores a nothrow move\r\n  // constructible type v1.swap(v2) provides the strong exception safety\r\n  // guarantee.\r\n#  ifdef _LIBCPP_VERSION\r\n  {\r\n    using V                 = std::variant<ThrowingTypeWithNothrowSwap, NothrowMoveable>;\r\n    int move_called1        = 0;\r\n    int move_assign_called1 = 0;\r\n    int swap_called1        = 0;\r\n    int move_called2        = 0;\r\n    int move_assign_called2 = 0;\r\n    int swap_called2        = 0;\r\n    V v1(std::in_place_index<0>, 42, &move_called1, &move_assign_called1, &swap_called1);\r\n    V v2(std::in_place_index<1>, 100, &move_called2, &move_assign_called2, &swap_called2);\r\n    try {\r\n      v1.swap(v2);\r\n      assert(false);\r\n    } catch (int) {\r\n    }\r\n    assert(swap_called1 == 0);\r\n    assert(move_called1 == 1);\r\n    assert(move_assign_called1 == 0);\r\n    assert(swap_called2 == 0);\r\n    assert(move_called2 == 2);\r\n    assert(move_assign_called2 == 0);\r\n    assert(std::get<0>(v1).value == 42);\r\n    assert(std::get<1>(v2).value == 100);\r\n    // swap again, but call v2's swap.\r\n\r\n    move_called1        = 0;\r\n    move_assign_called1 = 0;\r\n    swap_called1        = 0;\r\n    move_called2        = 0;\r\n    move_assign_called2 = 0;\r\n    swap_called2        = 0;\r\n\r\n    try {\r\n      v2.swap(v1);\r\n      assert(false);\r\n    } catch (int) {\r\n    }\r\n    assert(swap_called1 == 0);\r\n    assert(move_called1 == 1);\r\n    assert(move_assign_called1 == 0);\r\n    assert(swap_called2 == 0);\r\n    assert(move_called2 == 2);\r\n    assert(move_assign_called2 == 0);\r\n    assert(std::get<0>(v1).value == 42);\r\n    assert(std::get<1>(v2).value == 100);\r\n  }\r\n#  endif // _LIBCPP_VERSION\r\n#endif\r\n}\r\n\r\ntemplate <class Var>\r\nconstexpr auto has_swap_member_imp(int) -> decltype(std::declval<Var&>().swap(std::declval<Var&>()), true) {\r\n  return true;\r\n}\r\n\r\ntemplate <class Var>\r\nconstexpr auto has_swap_member_imp(long) -> bool {\r\n  return false;\r\n}\r\n\r\ntemplate <class Var>\r\nconstexpr bool has_swap_member() {\r\n  return has_swap_member_imp<Var>(0);\r\n}\r\n\r\nconstexpr void test_swap_sfinae() {\r\n  {\r\n    // This variant type does not provide either a member or non-member swap\r\n    // but is still swappable via the generic swap algorithm, since the\r\n    // variant is move constructible and move assignable.\r\n    using V = std::variant<int, NotSwappable>;\r\n    LIBCPP_STATIC_ASSERT(!has_swap_member<V>(), \"\");\r\n    static_assert(std::is_swappable_v<V>, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, NotCopyable>;\r\n    LIBCPP_STATIC_ASSERT(!has_swap_member<V>(), \"\");\r\n    static_assert(!std::is_swappable_v<V>, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, NotCopyableWithSwap>;\r\n    LIBCPP_STATIC_ASSERT(!has_swap_member<V>(), \"\");\r\n    static_assert(!std::is_swappable_v<V>, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, NotMoveAssignable>;\r\n    LIBCPP_STATIC_ASSERT(!has_swap_member<V>(), \"\");\r\n    static_assert(!std::is_swappable_v<V>, \"\");\r\n  }\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 void test_swap_noexcept() {\r\n  {\r\n    using V = std::variant<int, NothrowMoveable>;\r\n    static_assert(std::is_swappable_v<V> && has_swap_member<V>(), \"\");\r\n    static_assert(std::is_nothrow_swappable_v<V>, \"\");\r\n    // instantiate swap\r\n    V v1, v2;\r\n    v1.swap(v2);\r\n    swap(v1, v2);\r\n  }\r\n  {\r\n    using V = std::variant<int, NothrowMoveCtor>;\r\n    static_assert(std::is_swappable_v<V> && has_swap_member<V>(), \"\");\r\n    static_assert(!std::is_nothrow_swappable_v<V>, \"\");\r\n    // instantiate swap\r\n    V v1, v2;\r\n    v1.swap(v2);\r\n    swap(v1, v2);\r\n  }\r\n  {\r\n    using V = std::variant<int, ThrowingTypeWithNothrowSwap>;\r\n    static_assert(std::is_swappable_v<V> && has_swap_member<V>(), \"\");\r\n    static_assert(!std::is_nothrow_swappable_v<V>, \"\");\r\n    // instantiate swap\r\n    V v1, v2;\r\n    v1.swap(v2);\r\n    swap(v1, v2);\r\n  }\r\n  {\r\n    using V = std::variant<int, ThrowingMoveAssignNothrowMoveCtor>;\r\n    static_assert(std::is_swappable_v<V> && has_swap_member<V>(), \"\");\r\n    static_assert(!std::is_nothrow_swappable_v<V>, \"\");\r\n    // instantiate swap\r\n    V v1, v2;\r\n    v1.swap(v2);\r\n    swap(v1, v2);\r\n  }\r\n  {\r\n    using V = std::variant<int, ThrowingMoveAssignNothrowMoveCtorWithSwap>;\r\n    static_assert(std::is_swappable_v<V> && has_swap_member<V>(), \"\");\r\n    static_assert(std::is_nothrow_swappable_v<V>, \"\");\r\n    // instantiate swap\r\n    V v1, v2;\r\n    v1.swap(v2);\r\n    swap(v1, v2);\r\n  }\r\n  {\r\n    using V = std::variant<int, NotMoveAssignableWithSwap>;\r\n    static_assert(std::is_swappable_v<V> && has_swap_member<V>(), \"\");\r\n    static_assert(std::is_nothrow_swappable_v<V>, \"\");\r\n    // instantiate swap\r\n    V v1, v2;\r\n    v1.swap(v2);\r\n    swap(v1, v2);\r\n  }\r\n  {\r\n    // This variant type does not provide either a member or non-member swap\r\n    // but is still swappable via the generic swap algorithm, since the\r\n    // variant is move constructible and move assignable.\r\n    using V = std::variant<int, NotSwappable>;\r\n    LIBCPP_STATIC_ASSERT(!has_swap_member<V>(), \"\");\r\n    static_assert(std::is_swappable_v<V>, \"\");\r\n    static_assert(std::is_nothrow_swappable_v<V>, \"\");\r\n    V v1, v2;\r\n    swap(v1, v2);\r\n  }\r\n}\r\n\r\n#ifdef _LIBCPP_VERSION\r\n// This is why variant should SFINAE member swap. :-)\r\ntemplate class std::variant<int, NotSwappable>;\r\n#endif\r\n\r\nvoid non_constexpr_test() {\r\n  test_swap_valueless_by_exception();\r\n  test_swap_same_alternative_throws();\r\n  test_swap_different_alternatives_throws();\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 bool test() {\r\n  test_swap_same_alternative();\r\n  test_swap_different_alternatives();\r\n  test_swap_sfinae();\r\n  test_swap_noexcept();\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  non_constexpr_test();\r\n  test();\r\n\r\n#if TEST_STD_VER >= 20\r\n  static_assert(test());\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace member_swap\r\n// -- END: test/std/utilities/variant/variant.variant/variant.swap/swap.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.visit/robust_against_adl.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n// template <class Visitor, class... Variants>\r\n// constexpr see below visit(Visitor&& vis, Variants&&... vars);\r\n\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace visit::robust_against_adl {\r\nstruct Incomplete;\r\ntemplate<class T> struct Holder { T t; };\r\n\r\nconstexpr bool test(bool do_it)\r\n{\r\n    if (do_it) {\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n        std::variant<Holder<Incomplete>*, int> v = nullptr;\r\n        std::visit([](auto){}, v);\r\n        std::visit([](auto) -> Holder<Incomplete>* { return nullptr; }, v);\r\n#if TEST_STD_VER > 17\r\n        std::visit<void>([](auto){}, v);\r\n        std::visit<void*>([](auto) -> Holder<Incomplete>* { return nullptr; }, v);\r\n#endif\r\n#endif // ^^^ no workaround ^^^\r\n    }\r\n    return true;\r\n}\r\n\r\nint run_test()\r\n{\r\n    test(true);\r\n#if TEST_STD_VER > 17\r\n    static_assert(test(true));\r\n#endif\r\n    return 0;\r\n}\r\n} // namespace visit::robust_against_adl\r\n// -- END: test/std/utilities/variant/variant.visit/robust_against_adl.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.visit/visit.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n// template <class Visitor, class... Variants>\r\n// constexpr see below visit(Visitor&& vis, Variants&&... vars);\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <string>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n\r\nnamespace visit {\r\nvoid test_call_operator_forwarding() {\r\n  using Fn = ForwardingCallObject;\r\n  Fn obj{};\r\n  const Fn &cobj = obj;\r\n  { // test call operator forwarding - no variant\r\n    std::visit(obj);\r\n    assert(Fn::check_call<>(CT_NonConst | CT_LValue));\r\n    std::visit(cobj);\r\n    assert(Fn::check_call<>(CT_Const | CT_LValue));\r\n    std::visit(std::move(obj));\r\n    assert(Fn::check_call<>(CT_NonConst | CT_RValue));\r\n    std::visit(std::move(cobj));\r\n    assert(Fn::check_call<>(CT_Const | CT_RValue));\r\n  }\r\n  { // test call operator forwarding - single variant, single arg\r\n    using V = std::variant<int>;\r\n    V v(42);\r\n    std::visit(obj, v);\r\n    assert(Fn::check_call<int &>(CT_NonConst | CT_LValue));\r\n    std::visit(cobj, v);\r\n    assert(Fn::check_call<int &>(CT_Const | CT_LValue));\r\n    std::visit(std::move(obj), v);\r\n    assert(Fn::check_call<int &>(CT_NonConst | CT_RValue));\r\n    std::visit(std::move(cobj), v);\r\n    assert(Fn::check_call<int &>(CT_Const | CT_RValue));\r\n  }\r\n  { // test call operator forwarding - single variant, multi arg\r\n    using V = std::variant<int, long, double>;\r\n    V v(42l);\r\n    std::visit(obj, v);\r\n    assert(Fn::check_call<long &>(CT_NonConst | CT_LValue));\r\n    std::visit(cobj, v);\r\n    assert(Fn::check_call<long &>(CT_Const | CT_LValue));\r\n    std::visit(std::move(obj), v);\r\n    assert(Fn::check_call<long &>(CT_NonConst | CT_RValue));\r\n    std::visit(std::move(cobj), v);\r\n    assert(Fn::check_call<long &>(CT_Const | CT_RValue));\r\n  }\r\n  { // test call operator forwarding - multi variant, multi arg\r\n    using V = std::variant<int, long, double>;\r\n    using V2 = std::variant<int *, std::string>;\r\n    V v(42l);\r\n    V2 v2(\"hello\");\r\n    std::visit(obj, v, v2);\r\n    assert((Fn::check_call<long &, std::string &>(CT_NonConst | CT_LValue)));\r\n    std::visit(cobj, v, v2);\r\n    assert((Fn::check_call<long &, std::string &>(CT_Const | CT_LValue)));\r\n    std::visit(std::move(obj), v, v2);\r\n    assert((Fn::check_call<long &, std::string &>(CT_NonConst | CT_RValue)));\r\n    std::visit(std::move(cobj), v, v2);\r\n    assert((Fn::check_call<long &, std::string &>(CT_Const | CT_RValue)));\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, std::string>;\r\n    V v1(42l), v2(\"hello\"), v3(101), v4(1.1);\r\n    std::visit(obj, v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int &, double &>(CT_NonConst | CT_LValue)));\r\n    std::visit(cobj, v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int &, double &>(CT_Const | CT_LValue)));\r\n    std::visit(std::move(obj), v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int &, double &>(CT_NonConst | CT_RValue)));\r\n    std::visit(std::move(cobj), v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int &, double &>(CT_Const | CT_RValue)));\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, int*, std::string>;\r\n    V v1(42l), v2(\"hello\"), v3(nullptr), v4(1.1);\r\n    std::visit(obj, v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int *&, double &>(CT_NonConst | CT_LValue)));\r\n    std::visit(cobj, v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int *&, double &>(CT_Const | CT_LValue)));\r\n    std::visit(std::move(obj), v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int *&, double &>(CT_NonConst | CT_RValue)));\r\n    std::visit(std::move(cobj), v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int *&, double &>(CT_Const | CT_RValue)));\r\n  }\r\n}\r\n\r\nvoid test_argument_forwarding() {\r\n  using Fn = ForwardingCallObject;\r\n  Fn obj{};\r\n  const auto Val = CT_LValue | CT_NonConst;\r\n  { // single argument - value type\r\n    using V = std::variant<int>;\r\n    V v(42);\r\n    const V &cv = v;\r\n    std::visit(obj, v);\r\n    assert(Fn::check_call<int &>(Val));\r\n    std::visit(obj, cv);\r\n    assert(Fn::check_call<const int &>(Val));\r\n    std::visit(obj, std::move(v));\r\n    assert(Fn::check_call<int &&>(Val));\r\n    std::visit(obj, std::move(cv));\r\n    assert(Fn::check_call<const int &&>(Val));\r\n  }\r\n  { // multi argument - multi variant\r\n    using V = std::variant<int, std::string, long>;\r\n    V v1(42), v2(\"hello\"), v3(43l);\r\n    std::visit(obj, v1, v2, v3);\r\n    assert((Fn::check_call<int &, std::string &, long &>(Val)));\r\n    std::visit(obj, std::as_const(v1), std::as_const(v2), std::move(v3));\r\n    assert((Fn::check_call<const int &, const std::string &, long &&>(Val)));\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, std::string>;\r\n    V v1(42l), v2(\"hello\"), v3(101), v4(1.1);\r\n    std::visit(obj, v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int &, double &>(Val)));\r\n    std::visit(obj, std::as_const(v1), std::as_const(v2), std::move(v3), std::move(v4));\r\n    assert((Fn::check_call<const long &, const std::string &, int &&, double &&>(Val)));\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, int*, std::string>;\r\n    V v1(42l), v2(\"hello\"), v3(nullptr), v4(1.1);\r\n    std::visit(obj, v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int *&, double &>(Val)));\r\n    std::visit(obj, std::as_const(v1), std::as_const(v2), std::move(v3), std::move(v4));\r\n    assert((Fn::check_call<const long &, const std::string &, int *&&, double &&>(Val)));\r\n  }\r\n}\r\n\r\nvoid test_return_type() {\r\n  using Fn = ForwardingCallObject;\r\n  Fn obj{};\r\n  const Fn &cobj = obj;\r\n  { // test call operator forwarding - no variant\r\n    static_assert(std::is_same_v<decltype(std::visit(obj)), Fn&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(cobj)), const Fn&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(std::move(obj))), Fn&&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(std::move(cobj))), const Fn&&>);\r\n  }\r\n  { // test call operator forwarding - single variant, single arg\r\n    using V = std::variant<int>;\r\n    V v(42);\r\n    static_assert(std::is_same_v<decltype(std::visit(obj, v)), Fn&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(cobj, v)), const Fn&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(std::move(obj), v)), Fn&&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(std::move(cobj), v)), const Fn&&>);\r\n  }\r\n  { // test call operator forwarding - single variant, multi arg\r\n    using V = std::variant<int, long, double>;\r\n    V v(42l);\r\n    static_assert(std::is_same_v<decltype(std::visit(obj, v)), Fn&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(cobj, v)), const Fn&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(std::move(obj), v)), Fn&&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(std::move(cobj), v)), const Fn&&>);\r\n  }\r\n  { // test call operator forwarding - multi variant, multi arg\r\n    using V = std::variant<int, long, double>;\r\n    using V2 = std::variant<int *, std::string>;\r\n    V v(42l);\r\n    V2 v2(\"hello\");\r\n    static_assert(std::is_same_v<decltype(std::visit(obj, v, v2)), Fn&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(cobj, v, v2)), const Fn&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(std::move(obj), v, v2)), Fn&&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(std::move(cobj), v, v2)), const Fn&&>);\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, std::string>;\r\n    V v1(42l), v2(\"hello\"), v3(101), v4(1.1);\r\n    static_assert(std::is_same_v<decltype(std::visit(obj, v1, v2, v3, v4)), Fn&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(cobj, v1, v2, v3, v4)), const Fn&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(std::move(obj), v1, v2, v3, v4)), Fn&&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(std::move(cobj), v1, v2, v3, v4)), const Fn&&>);\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, int*, std::string>;\r\n    V v1(42l), v2(\"hello\"), v3(nullptr), v4(1.1);\r\n    static_assert(std::is_same_v<decltype(std::visit(obj, v1, v2, v3, v4)), Fn&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(cobj, v1, v2, v3, v4)), const Fn&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(std::move(obj), v1, v2, v3, v4)), Fn&&>);\r\n    static_assert(std::is_same_v<decltype(std::visit(std::move(cobj), v1, v2, v3, v4)), const Fn&&>);\r\n  }\r\n}\r\n\r\nvoid test_constexpr() {\r\n  constexpr ReturnFirst obj{};\r\n  constexpr ReturnArity aobj{};\r\n  {\r\n    using V = std::variant<int>;\r\n    constexpr V v(42);\r\n    static_assert(std::visit(obj, v) == 42, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<short, long, char>;\r\n    constexpr V v(42l);\r\n    static_assert(std::visit(obj, v) == 42, \"\");\r\n  }\r\n  {\r\n    using V1 = std::variant<int>;\r\n    using V2 = std::variant<int, char *, long long>;\r\n    using V3 = std::variant<bool, int, int>;\r\n    constexpr V1 v1;\r\n    constexpr V2 v2(nullptr);\r\n    constexpr V3 v3;\r\n    static_assert(std::visit(aobj, v1, v2, v3) == 3, \"\");\r\n  }\r\n  {\r\n    using V1 = std::variant<int>;\r\n    using V2 = std::variant<int, char *, long long>;\r\n    using V3 = std::variant<void *, int, int>;\r\n    constexpr V1 v1;\r\n    constexpr V2 v2(nullptr);\r\n    constexpr V3 v3;\r\n    static_assert(std::visit(aobj, v1, v2, v3) == 3, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, int *>;\r\n    constexpr V v1(42l), v2(101), v3(nullptr), v4(1.1);\r\n    static_assert(std::visit(aobj, v1, v2, v3, v4) == 4, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, long long, int *>;\r\n    constexpr V v1(42l), v2(101), v3(nullptr), v4(1.1);\r\n    static_assert(std::visit(aobj, v1, v2, v3, v4) == 4, \"\");\r\n  }\r\n}\r\n\r\nvoid test_exceptions() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  ReturnArity obj{};\r\n  auto test = [&](auto &&... args) {\r\n    try {\r\n      std::visit(obj, args...);\r\n    } catch (const std::bad_variant_access &) {\r\n      return true;\r\n    } catch (...) {\r\n    }\r\n    return false;\r\n  };\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    V v;\r\n    makeEmpty(v);\r\n    assert(test(v));\r\n  }\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    using V2 = std::variant<long, std::string, void *>;\r\n    V v;\r\n    makeEmpty(v);\r\n    V2 v2(\"hello\");\r\n    assert(test(v, v2));\r\n  }\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    using V2 = std::variant<long, std::string, void *>;\r\n    V v;\r\n    makeEmpty(v);\r\n    V2 v2(\"hello\");\r\n    assert(test(v2, v));\r\n  }\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    using V2 = std::variant<long, std::string, void *, MakeEmptyT>;\r\n    V v;\r\n    makeEmpty(v);\r\n    V2 v2;\r\n    makeEmpty(v2);\r\n    assert(test(v, v2));\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, MakeEmptyT>;\r\n    V v1(42l), v2(101), v3(202), v4(1.1);\r\n    makeEmpty(v1);\r\n    assert(test(v1, v2, v3, v4));\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, long long, MakeEmptyT>;\r\n    V v1(42l), v2(101), v3(202), v4(1.1);\r\n    makeEmpty(v1);\r\n    makeEmpty(v2);\r\n    makeEmpty(v3);\r\n    makeEmpty(v4);\r\n    assert(test(v1, v2, v3, v4));\r\n  }\r\n#endif\r\n}\r\n\r\n// See https://llvm.org/PR31916\r\nvoid test_caller_accepts_nonconst() {\r\n  struct A {};\r\n  struct Visitor {\r\n    void operator()(A&) {}\r\n  };\r\n  std::variant<A> v;\r\n  std::visit(Visitor{}, v);\r\n}\r\n\r\nstruct MyVariant : std::variant<short, long, float> {};\r\n} // namespace visit\r\n\r\nnamespace std {\r\ntemplate <std::size_t Index>\r\nvoid get(const ::visit::MyVariant&) {\r\n  assert(false);\r\n}\r\n} // namespace std\r\n\r\nnamespace visit {\r\nvoid test_derived_from_variant() {\r\n  auto v1 = MyVariant{42};\r\n  const auto cv1 = MyVariant{142};\r\n  std::visit([](auto x) { assert(x == 42); }, v1);\r\n  std::visit([](auto x) { assert(x == 142); }, cv1);\r\n  std::visit([](auto x) { assert(x == -1.25f); }, MyVariant{-1.25f});\r\n  std::visit([](auto x) { assert(x == 42); }, std::move(v1));\r\n  std::visit([](auto x) { assert(x == 142); }, std::move(cv1));\r\n\r\n  // Check that visit does not take index nor valueless_by_exception members from the base class.\r\n  struct EvilVariantBase {\r\n    int index;\r\n    char valueless_by_exception;\r\n  };\r\n\r\n  struct EvilVariant1 : std::variant<int, long, double>,\r\n                        std::tuple<int>,\r\n                        EvilVariantBase {\r\n    using std::variant<int, long, double>::variant;\r\n  };\r\n\r\n  std::visit([](auto x) { assert(x == 12); }, EvilVariant1{12});\r\n  std::visit([](auto x) { assert(x == 12.3); }, EvilVariant1{12.3});\r\n\r\n  // Check that visit unambiguously picks the variant, even if the other base has __impl member.\r\n  struct ImplVariantBase {\r\n    struct Callable {\r\n      bool operator()() const { assert(false); return false; }\r\n    };\r\n\r\n    Callable __impl;\r\n  };\r\n\r\n  struct EvilVariant2 : std::variant<int, long, double>, ImplVariantBase {\r\n    using std::variant<int, long, double>::variant;\r\n  };\r\n\r\n  std::visit([](auto x) { assert(x == 12); }, EvilVariant2{12});\r\n  std::visit([](auto x) { assert(x == 12.3); }, EvilVariant2{12.3});\r\n}\r\n\r\nstruct any_visitor {\r\n  template <typename T>\r\n  void operator()(const T&) const {}\r\n};\r\n\r\ntemplate <typename T, typename = decltype(std::visit(\r\n                          std::declval<any_visitor&>(), std::declval<T>()))>\r\nconstexpr bool has_visit(int) {\r\n  return true;\r\n}\r\n\r\ntemplate <typename T>\r\nconstexpr bool has_visit(...) {\r\n  return false;\r\n}\r\n\r\nvoid test_sfinae() {\r\n  struct BadVariant : std::variant<short>, std::variant<long, float> {};\r\n  struct BadVariant2 : private std::variant<long, float> {};\r\n  struct GoodVariant : std::variant<long, float> {};\r\n  struct GoodVariant2 : GoodVariant {};\r\n\r\n  static_assert(!has_visit<int>(0));\r\n  static_assert(has_visit<BadVariant>(0) == is_permissive);\r\n  static_assert(!has_visit<BadVariant2>(0));\r\n  static_assert(has_visit<std::variant<int>>(0));\r\n  static_assert(has_visit<GoodVariant>(0));\r\n  static_assert(has_visit<GoodVariant2>(0));\r\n}\r\n\r\nint run_test() {\r\n  test_call_operator_forwarding();\r\n  test_argument_forwarding();\r\n  test_return_type();\r\n  test_constexpr();\r\n  test_exceptions();\r\n  test_caller_accepts_nonconst();\r\n  test_derived_from_variant();\r\n  test_sfinae();\r\n\r\n  return 0;\r\n}\r\n} // namespace visit\r\n// -- END: test/std/utilities/variant/variant.visit/visit.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.visit/visit_return_type.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <variant>\r\n// template <class R, class Visitor, class... Variants>\r\n// constexpr R visit(Visitor&& vis, Variants&&... vars);\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <string>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n\r\nnamespace visit::return_type {\r\n#if _HAS_CXX20\r\ntemplate <typename ReturnType>\r\nvoid test_call_operator_forwarding() {\r\n  using Fn = ForwardingCallObject;\r\n  Fn obj{};\r\n  const Fn &cobj = obj;\r\n  { // test call operator forwarding - no variant\r\n    std::visit<ReturnType>(obj);\r\n    assert(Fn::check_call<>(CT_NonConst | CT_LValue));\r\n    std::visit<ReturnType>(cobj);\r\n    assert(Fn::check_call<>(CT_Const | CT_LValue));\r\n    std::visit<ReturnType>(std::move(obj));\r\n    assert(Fn::check_call<>(CT_NonConst | CT_RValue));\r\n    std::visit<ReturnType>(std::move(cobj));\r\n    assert(Fn::check_call<>(CT_Const | CT_RValue));\r\n  }\r\n  { // test call operator forwarding - single variant, single arg\r\n    using V = std::variant<int>;\r\n    V v(42);\r\n    std::visit<ReturnType>(obj, v);\r\n    assert(Fn::check_call<int &>(CT_NonConst | CT_LValue));\r\n    std::visit<ReturnType>(cobj, v);\r\n    assert(Fn::check_call<int &>(CT_Const | CT_LValue));\r\n    std::visit<ReturnType>(std::move(obj), v);\r\n    assert(Fn::check_call<int &>(CT_NonConst | CT_RValue));\r\n    std::visit<ReturnType>(std::move(cobj), v);\r\n    assert(Fn::check_call<int &>(CT_Const | CT_RValue));\r\n  }\r\n  { // test call operator forwarding - single variant, multi arg\r\n    using V = std::variant<int, long, double>;\r\n    V v(42l);\r\n    std::visit<ReturnType>(obj, v);\r\n    assert(Fn::check_call<long &>(CT_NonConst | CT_LValue));\r\n    std::visit<ReturnType>(cobj, v);\r\n    assert(Fn::check_call<long &>(CT_Const | CT_LValue));\r\n    std::visit<ReturnType>(std::move(obj), v);\r\n    assert(Fn::check_call<long &>(CT_NonConst | CT_RValue));\r\n    std::visit<ReturnType>(std::move(cobj), v);\r\n    assert(Fn::check_call<long &>(CT_Const | CT_RValue));\r\n  }\r\n  { // test call operator forwarding - multi variant, multi arg\r\n    using V = std::variant<int, long, double>;\r\n    using V2 = std::variant<int *, std::string>;\r\n    V v(42l);\r\n    V2 v2(\"hello\");\r\n    std::visit<int>(obj, v, v2);\r\n    assert((Fn::check_call<long &, std::string &>(CT_NonConst | CT_LValue)));\r\n    std::visit<ReturnType>(cobj, v, v2);\r\n    assert((Fn::check_call<long &, std::string &>(CT_Const | CT_LValue)));\r\n    std::visit<ReturnType>(std::move(obj), v, v2);\r\n    assert((Fn::check_call<long &, std::string &>(CT_NonConst | CT_RValue)));\r\n    std::visit<ReturnType>(std::move(cobj), v, v2);\r\n    assert((Fn::check_call<long &, std::string &>(CT_Const | CT_RValue)));\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, std::string>;\r\n    V v1(42l), v2(\"hello\"), v3(101), v4(1.1);\r\n    std::visit<ReturnType>(obj, v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int &, double &>(CT_NonConst | CT_LValue)));\r\n    std::visit<ReturnType>(cobj, v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int &, double &>(CT_Const | CT_LValue)));\r\n    std::visit<ReturnType>(std::move(obj), v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int &, double &>(CT_NonConst | CT_RValue)));\r\n    std::visit<ReturnType>(std::move(cobj), v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int &, double &>(CT_Const | CT_RValue)));\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, int*, std::string>;\r\n    V v1(42l), v2(\"hello\"), v3(nullptr), v4(1.1);\r\n    std::visit<ReturnType>(obj, v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int *&, double &>(CT_NonConst | CT_LValue)));\r\n    std::visit<ReturnType>(cobj, v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int *&, double &>(CT_Const | CT_LValue)));\r\n    std::visit<ReturnType>(std::move(obj), v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int *&, double &>(CT_NonConst | CT_RValue)));\r\n    std::visit<ReturnType>(std::move(cobj), v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int *&, double &>(CT_Const | CT_RValue)));\r\n  }\r\n}\r\n\r\ntemplate <typename ReturnType>\r\nvoid test_argument_forwarding() {\r\n  using Fn = ForwardingCallObject;\r\n  Fn obj{};\r\n  const auto Val = CT_LValue | CT_NonConst;\r\n  { // single argument - value type\r\n    using V = std::variant<int>;\r\n    V v(42);\r\n    const V &cv = v;\r\n    std::visit<ReturnType>(obj, v);\r\n    assert(Fn::check_call<int &>(Val));\r\n    std::visit<ReturnType>(obj, cv);\r\n    assert(Fn::check_call<const int &>(Val));\r\n    std::visit<ReturnType>(obj, std::move(v));\r\n    assert(Fn::check_call<int &&>(Val));\r\n    std::visit<ReturnType>(obj, std::move(cv));\r\n    assert(Fn::check_call<const int &&>(Val));\r\n  }\r\n  { // multi argument - multi variant\r\n    using V = std::variant<int, std::string, long>;\r\n    V v1(42), v2(\"hello\"), v3(43l);\r\n    std::visit<ReturnType>(obj, v1, v2, v3);\r\n    assert((Fn::check_call<int &, std::string &, long &>(Val)));\r\n    std::visit<ReturnType>(obj, std::as_const(v1), std::as_const(v2), std::move(v3));\r\n    assert((Fn::check_call<const int &, const std::string &, long &&>(Val)));\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, std::string>;\r\n    V v1(42l), v2(\"hello\"), v3(101), v4(1.1);\r\n    std::visit<ReturnType>(obj, v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int &, double &>(Val)));\r\n    std::visit<ReturnType>(obj, std::as_const(v1), std::as_const(v2), std::move(v3), std::move(v4));\r\n    assert((Fn::check_call<const long &, const std::string &, int &&, double &&>(Val)));\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, int*, std::string>;\r\n    V v1(42l), v2(\"hello\"), v3(nullptr), v4(1.1);\r\n    std::visit<ReturnType>(obj, v1, v2, v3, v4);\r\n    assert((Fn::check_call<long &, std::string &, int *&, double &>(Val)));\r\n    std::visit<ReturnType>(obj, std::as_const(v1), std::as_const(v2), std::move(v3), std::move(v4));\r\n    assert((Fn::check_call<const long &, const std::string &, int *&&, double &&>(Val)));\r\n  }\r\n}\r\n\r\ntemplate <typename ReturnType>\r\nvoid test_return_type() {\r\n  using Fn = ForwardingCallObject;\r\n  Fn obj{};\r\n  const Fn &cobj = obj;\r\n  { // test call operator forwarding - no variant\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(obj)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(cobj)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(std::move(obj))), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(std::move(cobj))), ReturnType>);\r\n  }\r\n  { // test call operator forwarding - single variant, single arg\r\n    using V = std::variant<int>;\r\n    V v(42);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(obj, v)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(cobj, v)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(std::move(obj), v)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(std::move(cobj), v)), ReturnType>);\r\n  }\r\n  { // test call operator forwarding - single variant, multi arg\r\n    using V = std::variant<int, long, double>;\r\n    V v(42l);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(obj, v)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(cobj, v)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(std::move(obj), v)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(std::move(cobj), v)), ReturnType>);\r\n  }\r\n  { // test call operator forwarding - multi variant, multi arg\r\n    using V = std::variant<int, long, double>;\r\n    using V2 = std::variant<int *, std::string>;\r\n    V v(42l);\r\n    V2 v2(\"hello\");\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(obj, v, v2)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(cobj, v, v2)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(std::move(obj), v, v2)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(std::move(cobj), v, v2)), ReturnType>);\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, std::string>;\r\n    V v1(42l), v2(\"hello\"), v3(101), v4(1.1);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(obj, v1, v2, v3, v4)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(cobj, v1, v2, v3, v4)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(std::move(obj), v1, v2, v3, v4)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(std::move(cobj), v1, v2, v3, v4)), ReturnType>);\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, int*, std::string>;\r\n    V v1(42l), v2(\"hello\"), v3(nullptr), v4(1.1);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(obj, v1, v2, v3, v4)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(cobj, v1, v2, v3, v4)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(std::move(obj), v1, v2, v3, v4)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(std::visit<ReturnType>(std::move(cobj), v1, v2, v3, v4)), ReturnType>);\r\n  }\r\n}\r\n\r\nvoid test_constexpr_void() {\r\n  constexpr ReturnFirst obj{};\r\n  constexpr ReturnArity aobj{};\r\n  {\r\n    using V = std::variant<int>;\r\n    constexpr V v(42);\r\n    static_assert((std::visit<void>(obj, v), 42) == 42, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<short, long, char>;\r\n    constexpr V v(42l);\r\n    static_assert((std::visit<void>(obj, v), 42) == 42, \"\");\r\n  }\r\n  {\r\n    using V1 = std::variant<int>;\r\n    using V2 = std::variant<int, char *, long long>;\r\n    using V3 = std::variant<bool, int, int>;\r\n    constexpr V1 v1;\r\n    constexpr V2 v2(nullptr);\r\n    constexpr V3 v3;\r\n    static_assert((std::visit<void>(aobj, v1, v2, v3), 3) == 3, \"\");\r\n  }\r\n  {\r\n    using V1 = std::variant<int>;\r\n    using V2 = std::variant<int, char *, long long>;\r\n    using V3 = std::variant<void *, int, int>;\r\n    constexpr V1 v1;\r\n    constexpr V2 v2(nullptr);\r\n    constexpr V3 v3;\r\n    static_assert((std::visit<void>(aobj, v1, v2, v3), 3) == 3, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, int *>;\r\n    constexpr V v1(42l), v2(101), v3(nullptr), v4(1.1);\r\n    static_assert((std::visit<void>(aobj, v1, v2, v3, v4), 4) == 4, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, long long, int *>;\r\n    constexpr V v1(42l), v2(101), v3(nullptr), v4(1.1);\r\n    static_assert((std::visit<void>(aobj, v1, v2, v3, v4), 4) == 4, \"\");\r\n  }\r\n}\r\n\r\nvoid test_constexpr_int() {\r\n  constexpr ReturnFirst obj{};\r\n  constexpr ReturnArity aobj{};\r\n  {\r\n    using V = std::variant<int>;\r\n    constexpr V v(42);\r\n    static_assert(std::visit<int>(obj, v) == 42, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<short, long, char>;\r\n    constexpr V v(42l);\r\n    static_assert(std::visit<int>(obj, v) == 42, \"\");\r\n  }\r\n  {\r\n    using V1 = std::variant<int>;\r\n    using V2 = std::variant<int, char *, long long>;\r\n    using V3 = std::variant<bool, int, int>;\r\n    constexpr V1 v1;\r\n    constexpr V2 v2(nullptr);\r\n    constexpr V3 v3;\r\n    static_assert(std::visit<int>(aobj, v1, v2, v3) == 3, \"\");\r\n  }\r\n  {\r\n    using V1 = std::variant<int>;\r\n    using V2 = std::variant<int, char *, long long>;\r\n    using V3 = std::variant<void *, int, int>;\r\n    constexpr V1 v1;\r\n    constexpr V2 v2(nullptr);\r\n    constexpr V3 v3;\r\n    static_assert(std::visit<int>(aobj, v1, v2, v3) == 3, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, int *>;\r\n    constexpr V v1(42l), v2(101), v3(nullptr), v4(1.1);\r\n    static_assert(std::visit<int>(aobj, v1, v2, v3, v4) == 4, \"\");\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, long long, int *>;\r\n    constexpr V v1(42l), v2(101), v3(nullptr), v4(1.1);\r\n    static_assert(std::visit<int>(aobj, v1, v2, v3, v4) == 4, \"\");\r\n  }\r\n}\r\n\r\ntemplate <typename ReturnType>\r\nvoid test_exceptions() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  ReturnArity obj{};\r\n  auto test = [&](auto &&... args) {\r\n    try {\r\n      std::visit<ReturnType>(obj, args...);\r\n    } catch (const std::bad_variant_access &) {\r\n      return true;\r\n    } catch (...) {\r\n    }\r\n    return false;\r\n  };\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    V v;\r\n    makeEmpty(v);\r\n    assert(test(v));\r\n  }\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    using V2 = std::variant<long, std::string, void *>;\r\n    V v;\r\n    makeEmpty(v);\r\n    V2 v2(\"hello\");\r\n    assert(test(v, v2));\r\n  }\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    using V2 = std::variant<long, std::string, void *>;\r\n    V v;\r\n    makeEmpty(v);\r\n    V2 v2(\"hello\");\r\n    assert(test(v2, v));\r\n  }\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    using V2 = std::variant<long, std::string, void *, MakeEmptyT>;\r\n    V v;\r\n    makeEmpty(v);\r\n    V2 v2;\r\n    makeEmpty(v2);\r\n    assert(test(v, v2));\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, MakeEmptyT>;\r\n    V v1(42l), v2(101), v3(202), v4(1.1);\r\n    makeEmpty(v1);\r\n    assert(test(v1, v2, v3, v4));\r\n  }\r\n  {\r\n    using V = std::variant<int, long, double, long long, MakeEmptyT>;\r\n    V v1(42l), v2(101), v3(202), v4(1.1);\r\n    makeEmpty(v1);\r\n    makeEmpty(v2);\r\n    makeEmpty(v3);\r\n    makeEmpty(v4);\r\n    assert(test(v1, v2, v3, v4));\r\n  }\r\n#endif\r\n}\r\n\r\n// See https://bugs.llvm.org/show_bug.cgi?id=31916\r\ntemplate <typename ReturnType>\r\nvoid test_caller_accepts_nonconst() {\r\n  struct A {};\r\n  struct Visitor {\r\n    auto operator()(A&) {\r\n      if constexpr (!std::is_void_v<ReturnType>)\r\n      {\r\n        return ReturnType{};\r\n      }\r\n    }\r\n  };\r\n  std::variant<A> v;\r\n  std::visit<ReturnType>(Visitor{}, v);\r\n}\r\n\r\nvoid test_constexpr_explicit_side_effect() {\r\n  auto test_lambda = [](int arg) constexpr {\r\n    std::variant<int> v = 101;\r\n    std::visit<void>([arg](int& x) constexpr { x = arg; }, v);\r\n    return std::get<int>(v);\r\n  };\r\n\r\n  static_assert(test_lambda(202) == 202, \"\");\r\n}\r\n\r\nvoid test_derived_from_variant() {\r\n  struct MyVariant : std::variant<short, long, float> {};\r\n\r\n  std::visit<bool>(\r\n      [](auto x) {\r\n        assert(x == 42);\r\n        return true;\r\n      },\r\n      MyVariant{42});\r\n  std::visit<bool>(\r\n      [](auto x) {\r\n        assert(x == -1.3f);\r\n        return true;\r\n      },\r\n      MyVariant{-1.3f});\r\n\r\n  // Check that visit does not take index nor valueless_by_exception members from the base class.\r\n  struct EvilVariantBase {\r\n    int index;\r\n    char valueless_by_exception;\r\n  };\r\n\r\n  struct EvilVariant1 : std::variant<int, long, double>,\r\n                        std::tuple<int>,\r\n                        EvilVariantBase {\r\n    using std::variant<int, long, double>::variant;\r\n  };\r\n\r\n  std::visit<bool>(\r\n      [](auto x) {\r\n        assert(x == 12);\r\n        return true;\r\n      },\r\n      EvilVariant1{12});\r\n  std::visit<bool>(\r\n      [](auto x) {\r\n        assert(x == 12.3);\r\n        return true;\r\n      },\r\n      EvilVariant1{12.3});\r\n\r\n  // Check that visit unambiguously picks the variant, even if the other base has __impl member.\r\n  struct ImplVariantBase {\r\n    struct Callable {\r\n      bool operator()() const { assert(false); return false; }\r\n    };\r\n\r\n    Callable __impl;\r\n  };\r\n\r\n  struct EvilVariant2 : std::variant<int, long, double>, ImplVariantBase {\r\n    using std::variant<int, long, double>::variant;\r\n  };\r\n\r\n  std::visit<bool>(\r\n      [](auto x) {\r\n        assert(x == 12);\r\n        return true;\r\n      },\r\n      EvilVariant2{12});\r\n  std::visit<bool>(\r\n      [](auto x) {\r\n        assert(x == 12.3);\r\n        return true;\r\n      },\r\n      EvilVariant2{12.3});\r\n}\r\n\r\nstruct any_visitor {\r\n  template <typename T>\r\n  bool operator()(const T&) {\r\n    return true;\r\n  }\r\n};\r\n\r\ntemplate <typename T, typename = decltype(std::visit<bool>(\r\n                          std::declval<any_visitor&>(), std::declval<T>()))>\r\nconstexpr bool has_visit(int) {\r\n  return true;\r\n}\r\n\r\ntemplate <typename T>\r\nconstexpr bool has_visit(...) {\r\n  return false;\r\n}\r\n\r\nvoid test_sfinae() {\r\n  struct BadVariant : std::variant<short>, std::variant<long, float> {};\r\n\r\n  static_assert(has_visit<std::variant<int> >(int()));\r\n  static_assert(has_visit<BadVariant>(int()) == is_permissive);\r\n}\r\n\r\nint run_test() {\r\n  test_call_operator_forwarding<void>();\r\n  test_argument_forwarding<void>();\r\n  test_return_type<void>();\r\n  test_constexpr_void();\r\n  test_exceptions<void>();\r\n  test_caller_accepts_nonconst<void>();\r\n  test_call_operator_forwarding<int>();\r\n  test_argument_forwarding<int>();\r\n  test_return_type<int>();\r\n  test_constexpr_int();\r\n  test_exceptions<int>();\r\n  test_caller_accepts_nonconst<int>();\r\n  test_constexpr_explicit_side_effect();\r\n  test_derived_from_variant();\r\n  test_sfinae();\r\n\r\n  return 0;\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\nint run_test() {\r\n  return 0;\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n} // namespace visit::return_type\r\n// -- END: test/std/utilities/variant/variant.visit/visit_return_type.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.visit.member/robust_against_adl.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// The tested functionality needs deducing this.\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// class variant;\r\n// template<class Self, class Visitor>\r\n//   constexpr decltype(auto) visit(this Self&&, Visitor&&); // since C++26\r\n// template<class R, class Self, class Visitor>\r\n//   constexpr R visit(this Self&&, Visitor&&);              // since C++26\r\n\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace member_visit::robust_against_adl {\r\n#if __cpp_lib_variant >= 202306L\r\nstruct Incomplete;\r\ntemplate <class T>\r\nstruct Holder {\r\n  T t;\r\n};\r\n\r\nconstexpr bool test(bool do_it) {\r\n  if (do_it) {\r\n    std::variant<Holder<Incomplete>*, int> v = nullptr;\r\n\r\n    v.visit([](auto) {});\r\n    v.visit([](auto) -> Holder<Incomplete>* { return nullptr; });\r\n    v.visit<void>([](auto) {});\r\n    v.visit<void*>([](auto) -> Holder<Incomplete>* { return nullptr; });\r\n  }\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  test(true);\r\n  static_assert(test(true));\r\n\r\n  return 0;\r\n}\r\n#else // ^^^ P2637R3 available / P2637R3 unavailable vvv\r\nint run_test() {\r\n  return 0;\r\n}\r\n#endif // ^^^ P2637R3 unavailable ^^^\r\n} // namespace member_visit::robust_against_adl\r\n// -- END: test/std/utilities/variant/variant.visit.member/robust_against_adl.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.visit.member/visit.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// The tested functionality needs deducing this.\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// class variant;\r\n\r\n// template<class Self, class Visitor>\r\n//   constexpr decltype(auto) visit(this Self&&, Visitor&&); // since C++26\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <string>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n\r\nnamespace member_visit {\r\n#if __cpp_lib_variant >= 202306L\r\nvoid test_call_operator_forwarding() {\r\n  using Fn = ForwardingCallObject;\r\n  Fn obj{};\r\n  const Fn& cobj = obj;\r\n\r\n  { // test call operator forwarding - single variant, single arg\r\n    using V = std::variant<int>;\r\n    V v(42);\r\n\r\n    v.visit(obj);\r\n    assert(Fn::check_call<int&>(CT_NonConst | CT_LValue));\r\n    v.visit(cobj);\r\n    assert(Fn::check_call<int&>(CT_Const | CT_LValue));\r\n    v.visit(std::move(obj));\r\n    assert(Fn::check_call<int&>(CT_NonConst | CT_RValue));\r\n    v.visit(std::move(cobj));\r\n    assert(Fn::check_call<int&>(CT_Const | CT_RValue));\r\n  }\r\n  { // test call operator forwarding - single variant, multi arg\r\n    using V = std::variant<int, long, double>;\r\n    V v(42L);\r\n\r\n    v.visit(obj);\r\n    assert(Fn::check_call<long&>(CT_NonConst | CT_LValue));\r\n    v.visit(cobj);\r\n    assert(Fn::check_call<long&>(CT_Const | CT_LValue));\r\n    v.visit(std::move(obj));\r\n    assert(Fn::check_call<long&>(CT_NonConst | CT_RValue));\r\n    v.visit(std::move(cobj));\r\n    assert(Fn::check_call<long&>(CT_Const | CT_RValue));\r\n  }\r\n}\r\n\r\n// Applies to non-member `std::visit` only.\r\nvoid test_argument_forwarding() {\r\n  using Fn = ForwardingCallObject;\r\n  Fn obj{};\r\n  const auto val = CT_LValue | CT_NonConst;\r\n\r\n  { // single argument - value type\r\n    using V = std::variant<int>;\r\n    V v(42);\r\n    const V& cv = v;\r\n\r\n    v.visit(obj);\r\n    assert(Fn::check_call<int&>(val));\r\n    cv.visit(obj);\r\n    assert(Fn::check_call<const int&>(val));\r\n    std::move(v).visit(obj);\r\n    assert(Fn::check_call<int&&>(val));\r\n    std::move(cv).visit(obj);\r\n    assert(Fn::check_call<const int&&>(val));\r\n  }\r\n}\r\n\r\nvoid test_return_type() {\r\n  using Fn = ForwardingCallObject;\r\n  Fn obj{};\r\n  const Fn& cobj = obj;\r\n\r\n  { // test call operator forwarding - single variant, single arg\r\n    using V = std::variant<int>;\r\n    V v(42);\r\n\r\n    static_assert(std::is_same_v<decltype(v.visit(obj)), Fn&>);\r\n    static_assert(std::is_same_v<decltype(v.visit(cobj)), const Fn&>);\r\n    static_assert(std::is_same_v<decltype(v.visit(std::move(obj))), Fn&&>);\r\n    static_assert(std::is_same_v<decltype(v.visit(std::move(cobj))), const Fn&&>);\r\n  }\r\n  { // test call operator forwarding - single variant, multi arg\r\n    using V = std::variant<int, long, double>;\r\n    V v(42L);\r\n\r\n    static_assert(std::is_same_v<decltype(v.visit(obj)), Fn&>);\r\n    static_assert(std::is_same_v<decltype(v.visit(cobj)), const Fn&>);\r\n    static_assert(std::is_same_v<decltype(v.visit(std::move(obj))), Fn&&>);\r\n    static_assert(std::is_same_v<decltype(v.visit(std::move(cobj))), const Fn&&>);\r\n  }\r\n}\r\n\r\nvoid test_constexpr() {\r\n  constexpr ReturnFirst obj{};\r\n\r\n  {\r\n    using V = std::variant<int>;\r\n    constexpr V v(42);\r\n\r\n    static_assert(v.visit(obj) == 42);\r\n  }\r\n  {\r\n    using V = std::variant<short, long, char>;\r\n    constexpr V v(42L);\r\n\r\n    static_assert(v.visit(obj) == 42);\r\n  }\r\n}\r\n\r\nvoid test_exceptions() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  ReturnArity obj{};\r\n\r\n  auto test = [&](auto&& v) {\r\n    try {\r\n      v.visit(obj);\r\n    } catch (const std::bad_variant_access&) {\r\n      return true;\r\n    } catch (...) {\r\n    }\r\n    return false;\r\n  };\r\n\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    V v;\r\n    makeEmpty(v);\r\n\r\n    assert(test(v));\r\n  }\r\n#endif\r\n}\r\n\r\n// See https://llvm.org/PR31916\r\nvoid test_caller_accepts_nonconst() {\r\n  struct A {};\r\n  struct Visitor {\r\n    void operator()(A&) {}\r\n  };\r\n  std::variant<A> v;\r\n\r\n  v.visit(Visitor{});\r\n}\r\n\r\nstruct MyVariant : std::variant<short, long, float> {};\r\n} // namespace member_visit\r\n\r\nnamespace std {\r\ntemplate <std::size_t Index>\r\nvoid get(const ::member_visit::MyVariant&) {\r\n  assert(false);\r\n}\r\n} // namespace std\r\n\r\nnamespace member_visit {\r\nvoid test_derived_from_variant() {\r\n  auto v1        = MyVariant{42};\r\n  const auto cv1 = MyVariant{142};\r\n\r\n  v1.visit([](auto x) { assert(x == 42); });\r\n  cv1.visit([](auto x) { assert(x == 142); });\r\n  MyVariant{-1.25f}.visit([](auto x) { assert(x == -1.25f); });\r\n  std::move(v1).visit([](auto x) { assert(x == 42); });\r\n  std::move(cv1).visit([](auto x) { assert(x == 142); });\r\n\r\n  // Check that visit does not take index nor valueless_by_exception members from the base class.\r\n  struct EvilVariantBase {\r\n    int index;\r\n    char valueless_by_exception;\r\n  };\r\n\r\n  struct EvilVariant1 : std::variant<int, long, double>, std::tuple<int>, EvilVariantBase {\r\n    using std::variant<int, long, double>::variant;\r\n  };\r\n\r\n  EvilVariant1{12}.visit([](auto x) { assert(x == 12); });\r\n  EvilVariant1{12.3}.visit([](auto x) { assert(x == 12.3); });\r\n\r\n  // Check that visit unambiguously picks the variant, even if the other base has __impl member.\r\n  struct ImplVariantBase {\r\n    struct Callable {\r\n      bool operator()() const {\r\n        assert(false);\r\n        return false;\r\n      }\r\n    };\r\n\r\n    Callable __impl;\r\n  };\r\n\r\n  struct EvilVariant2 : std::variant<int, long, double>, ImplVariantBase {\r\n    using std::variant<int, long, double>::variant;\r\n  };\r\n\r\n  EvilVariant2{12}.visit([](auto x) { assert(x == 12); });\r\n  EvilVariant2{12.3}.visit([](auto x) { assert(x == 12.3); });\r\n}\r\n\r\nint run_test() {\r\n  test_call_operator_forwarding();\r\n  test_argument_forwarding();\r\n  test_return_type();\r\n  test_constexpr();\r\n  test_exceptions();\r\n  test_caller_accepts_nonconst();\r\n  test_derived_from_variant();\r\n\r\n  return 0;\r\n}\r\n#else // ^^^ P2637R3 available / P2637R3 unavailable vvv\r\nint run_test() {\r\n  return 0;\r\n}\r\n#endif // ^^^ P2637R3 unavailable ^^^\r\n} // namespace member_visit\r\n// -- END: test/std/utilities/variant/variant.visit.member/visit.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/variant/variant.visit.member/visit_return_type.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// The tested functionality needs deducing this.\r\n\r\n\r\n\r\n// <variant>\r\n\r\n// class variant;\r\n\r\n// template<class R, class Self, class Visitor>\r\n//   constexpr R visit(this Self&&, Visitor&&);              // since C++26\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <string>\r\n#include <type_traits>\r\n#include <tuple>\r\n#include <utility>\r\n#include <variant>\r\n\r\n#include \"test_macros.h\"\r\n#include \"variant_test_helpers.h\"\r\n\r\nnamespace member_visit::return_type {\r\n#if __cpp_lib_variant >= 202306L\r\ntemplate <class... Ts>\r\nstruct overloaded : Ts... {\r\n  using Ts::operator()...;\r\n};\r\n\r\ntemplate <class... Ts>\r\noverloaded(Ts...) -> overloaded<Ts...>;\r\n\r\nvoid test_overload_ambiguity() {\r\n  using V = std::variant<float, long, std::string>;\r\n  using namespace std::string_literals;\r\n  V v{\"baba\"s};\r\n\r\n  v.visit(\r\n      overloaded{[]([[maybe_unused]] auto x) { assert(false); }, [](const std::string& x) { assert(x == \"baba\"s); }});\r\n  assert(std::get<std::string>(v) == \"baba\"s);\r\n\r\n  // Test the constraint.\r\n  v = std::move(v).visit<V>(overloaded{\r\n      []([[maybe_unused]] auto x) {\r\n        assert(false);\r\n        return 0;\r\n      },\r\n      [](const std::string& x) {\r\n        assert(x == \"baba\"s);\r\n        return x + \" zmt\"s;\r\n      }});\r\n  assert(std::get<std::string>(v) == \"baba zmt\"s);\r\n}\r\n\r\ntemplate <typename ReturnType>\r\nvoid test_call_operator_forwarding() {\r\n  using Fn = ForwardingCallObject;\r\n  Fn obj{};\r\n  const Fn& cobj = obj;\r\n\r\n  { // test call operator forwarding - single variant, single arg\r\n    using V = std::variant<int>;\r\n    V v(42);\r\n\r\n    v.visit<ReturnType>(obj);\r\n    assert(Fn::check_call<int&>(CT_NonConst | CT_LValue));\r\n    v.visit<ReturnType>(cobj);\r\n    assert(Fn::check_call<int&>(CT_Const | CT_LValue));\r\n    v.visit<ReturnType>(std::move(obj));\r\n    assert(Fn::check_call<int&>(CT_NonConst | CT_RValue));\r\n    v.visit<ReturnType>(std::move(cobj));\r\n    assert(Fn::check_call<int&>(CT_Const | CT_RValue));\r\n  }\r\n  { // test call operator forwarding - single variant, multi arg\r\n    using V = std::variant<int, long, double>;\r\n    V v(42L);\r\n\r\n    v.visit<ReturnType>(obj);\r\n    assert(Fn::check_call<long&>(CT_NonConst | CT_LValue));\r\n    v.visit<ReturnType>(cobj);\r\n    assert(Fn::check_call<long&>(CT_Const | CT_LValue));\r\n    v.visit<ReturnType>(std::move(obj));\r\n    assert(Fn::check_call<long&>(CT_NonConst | CT_RValue));\r\n    v.visit<ReturnType>(std::move(cobj));\r\n    assert(Fn::check_call<long&>(CT_Const | CT_RValue));\r\n  }\r\n}\r\n\r\ntemplate <typename ReturnType>\r\nvoid test_argument_forwarding() {\r\n  using Fn = ForwardingCallObject;\r\n  Fn obj{};\r\n  const auto val = CT_LValue | CT_NonConst;\r\n\r\n  { // single argument - value type\r\n    using V = std::variant<int>;\r\n    V v(42);\r\n    const V& cv = v;\r\n\r\n    v.visit<ReturnType>(obj);\r\n    assert(Fn::check_call<int&>(val));\r\n    cv.visit<ReturnType>(obj);\r\n    assert(Fn::check_call<const int&>(val));\r\n    std::move(v).visit<ReturnType>(obj);\r\n    assert(Fn::check_call<int&&>(val));\r\n    std::move(cv).visit<ReturnType>(obj);\r\n    assert(Fn::check_call<const int&&>(val));\r\n  }\r\n}\r\n\r\ntemplate <typename ReturnType>\r\nvoid test_return_type() {\r\n  using Fn = ForwardingCallObject;\r\n  Fn obj{};\r\n  const Fn& cobj = obj;\r\n\r\n  { // test call operator forwarding - no variant\r\n    // non-member\r\n    {\r\n      static_assert(std::is_same_v<decltype(std::visit<ReturnType>(obj)), ReturnType>);\r\n      static_assert(std::is_same_v<decltype(std::visit<ReturnType>(cobj)), ReturnType>);\r\n      static_assert(std::is_same_v<decltype(std::visit<ReturnType>(std::move(obj))), ReturnType>);\r\n      static_assert(std::is_same_v<decltype(std::visit<ReturnType>(std::move(cobj))), ReturnType>);\r\n    }\r\n  }\r\n  { // test call operator forwarding - single variant, single arg\r\n    using V = std::variant<int>;\r\n    V v(42);\r\n\r\n    static_assert(std::is_same_v<decltype(v.visit<ReturnType>(obj)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(v.visit<ReturnType>(cobj)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(v.visit<ReturnType>(std::move(obj))), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(v.visit<ReturnType>(std::move(cobj))), ReturnType>);\r\n  }\r\n  { // test call operator forwarding - single variant, multi arg\r\n    using V = std::variant<int, long, double>;\r\n    V v(42L);\r\n\r\n    static_assert(std::is_same_v<decltype(v.visit<ReturnType>(obj)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(v.visit<ReturnType>(cobj)), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(v.visit<ReturnType>(std::move(obj))), ReturnType>);\r\n    static_assert(std::is_same_v<decltype(v.visit<ReturnType>(std::move(cobj))), ReturnType>);\r\n  }\r\n}\r\n\r\nvoid test_constexpr_void() {\r\n  constexpr ReturnFirst obj{};\r\n\r\n  {\r\n    using V = std::variant<int>;\r\n    constexpr V v(42);\r\n\r\n    static_assert((v.visit<void>(obj), 42) == 42);\r\n  }\r\n  {\r\n    using V = std::variant<short, long, char>;\r\n    constexpr V v(42L);\r\n\r\n    static_assert((v.visit<void>(obj), 42) == 42);\r\n  }\r\n}\r\n\r\nvoid test_constexpr_int() {\r\n  constexpr ReturnFirst obj{};\r\n\r\n  {\r\n    using V = std::variant<int>;\r\n    constexpr V v(42);\r\n\r\n    static_assert(v.visit<int>(obj) == 42);\r\n  }\r\n  {\r\n    using V = std::variant<short, long, char>;\r\n    constexpr V v(42L);\r\n\r\n    static_assert(v.visit<int>(obj) == 42);\r\n  }\r\n}\r\n\r\ntemplate <typename ReturnType>\r\nvoid test_exceptions() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n  ReturnArity obj{};\r\n\r\n  auto test = [&](auto&& v) {\r\n    try {\r\n      v.template visit<ReturnType>(obj);\r\n    } catch (const std::bad_variant_access&) {\r\n      return true;\r\n    } catch (...) {\r\n    }\r\n    return false;\r\n  };\r\n\r\n  {\r\n    using V = std::variant<int, MakeEmptyT>;\r\n    V v;\r\n    makeEmpty(v);\r\n\r\n    assert(test(v));\r\n  }\r\n#endif\r\n}\r\n\r\n// See https://bugs.llvm.org/show_bug.cgi?id=31916\r\ntemplate <typename ReturnType>\r\nvoid test_caller_accepts_nonconst() {\r\n  struct A {};\r\n  struct Visitor {\r\n    auto operator()(A&) {\r\n      if constexpr (!std::is_void_v<ReturnType>) {\r\n        return ReturnType{};\r\n      }\r\n    }\r\n  };\r\n  std::variant<A> v;\r\n\r\n  v.template visit<ReturnType>(Visitor{});\r\n}\r\n\r\nvoid test_constexpr_explicit_side_effect() {\r\n  auto test_lambda = [](int arg) constexpr {\r\n    std::variant<int> v = 101;\r\n\r\n    {\r\n      v.template visit<void>([arg](int& x) constexpr { x = arg; });\r\n    }\r\n\r\n    return std::get<int>(v);\r\n  };\r\n\r\n  static_assert(test_lambda(202) == 202);\r\n}\r\n\r\nvoid test_derived_from_variant() {\r\n  struct MyVariant : std::variant<short, long, float> {};\r\n\r\n  MyVariant{42}.template visit<bool>([](auto x) {\r\n    assert(x == 42);\r\n    return true;\r\n  });\r\n  MyVariant{-1.3f}.template visit<bool>([](auto x) {\r\n    assert(x == -1.3f);\r\n    return true;\r\n  });\r\n\r\n  // Check that visit does not take index nor valueless_by_exception members from the base class.\r\n  struct EvilVariantBase {\r\n    int index;\r\n    char valueless_by_exception;\r\n  };\r\n\r\n  struct EvilVariant1 : std::variant<int, long, double>, std::tuple<int>, EvilVariantBase {\r\n    using std::variant<int, long, double>::variant;\r\n  };\r\n\r\n  EvilVariant1{12}.template visit<bool>([](auto x) {\r\n    assert(x == 12);\r\n    return true;\r\n  });\r\n  EvilVariant1{12.3}.template visit<bool>([](auto x) {\r\n    assert(x == 12.3);\r\n    return true;\r\n  });\r\n\r\n  // Check that visit unambiguously picks the variant, even if the other base has __impl member.\r\n  struct ImplVariantBase {\r\n    struct Callable {\r\n      bool operator()() const {\r\n        assert(false);\r\n        return false;\r\n      }\r\n    };\r\n\r\n    Callable __impl;\r\n  };\r\n\r\n  struct EvilVariant2 : std::variant<int, long, double>, ImplVariantBase {\r\n    using std::variant<int, long, double>::variant;\r\n  };\r\n\r\n  EvilVariant2{12}.template visit<bool>([](auto x) {\r\n    assert(x == 12);\r\n    return true;\r\n  });\r\n  EvilVariant2{12.3}.template visit<bool>([](auto x) {\r\n    assert(x == 12.3);\r\n    return true;\r\n  });\r\n}\r\n\r\nint run_test() {\r\n  test_overload_ambiguity();\r\n  test_call_operator_forwarding<void>();\r\n  test_argument_forwarding<void>();\r\n  test_return_type<void>();\r\n  test_constexpr_void();\r\n  test_exceptions<void>();\r\n  test_caller_accepts_nonconst<void>();\r\n  test_call_operator_forwarding<int>();\r\n  test_argument_forwarding<int>();\r\n  test_return_type<int>();\r\n  test_constexpr_int();\r\n  test_exceptions<int>();\r\n  test_caller_accepts_nonconst<int>();\r\n  test_constexpr_explicit_side_effect();\r\n  test_derived_from_variant();\r\n\r\n  return 0;\r\n}\r\n#else // ^^^ P2637R3 available / P2637R3 unavailable vvv\r\nint run_test() {\r\n  return 0;\r\n}\r\n#endif // ^^^ P2637R3 unavailable ^^^\r\n} // namespace member_visit::return_type\r\n// -- END: test/std/utilities/variant/variant.visit.member/visit_return_type.pass.cpp\r\n// LLVM SOURCES END\r\n// clang-format on\r\n\r\nint main() {\r\n    bad_variant_access::run_test();\r\n\r\n    get::get_if_index::run_test();\r\n    get::get_if_type::run_test();\r\n    get::get_index::run_test();\r\n    get::get_type::run_test();\r\n    get::holds_alternative::run_test();\r\n\r\n    hash::enabled_hash::run_test();\r\n    hash::run_test();\r\n\r\n    helpers::variant_alternative::run_test();\r\n    helpers::variant_size::run_test();\r\n\r\n    monostate::properties::run_test();\r\n    monostate::relops::run_test();\r\n\r\n    relops::relops::run_test();\r\n    relops::three_way::run_test();\r\n\r\n    npos::run_test();\r\n\r\n    implicit_ctad::run_test();\r\n\r\n    assign::conv::run_test();\r\n    assign::copy::run_test();\r\n    assign::move::run_test();\r\n    assign::T::run_test();\r\n\r\n    ctor::conv::run_test();\r\n    ctor::copy::run_test();\r\n    ctor::default_::run_test();\r\n    ctor::in_place_index_args::run_test();\r\n    ctor::in_place_index_init_list_args::run_test();\r\n    ctor::in_place_type_args::run_test();\r\n    ctor::in_place_type_init_list_args::run_test();\r\n    ctor::move::run_test();\r\n    ctor::T::run_test();\r\n\r\n    dtor::run_test();\r\n\r\n    emplace::index_args::run_test();\r\n    emplace::index_init_list_args::run_test();\r\n    emplace::type_args::run_test();\r\n    emplace::type_init_list_args::run_test();\r\n\r\n    status::index::run_test();\r\n    status::valueless_by_exception::run_test();\r\n\r\n    member_swap::run_test();\r\n\r\n    visit::robust_against_adl::run_test();\r\n    visit::run_test();\r\n    visit::return_type::run_test();\r\n\r\n    member_visit::robust_against_adl::run_test();\r\n    member_visit::run_test();\r\n    member_visit::return_type::run_test();\r\n}\r\n#else // ^^^ not x86 or not /analyze / x86 /analyze vvv\r\nint main() {}\r\n#endif // !defined(_PREFAST_) || !defined(_M_IX86)\r\n"
  },
  {
    "path": "tests/std/tests/P0088R3_variant_msvc/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0088R3_variant_msvc/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_CXX23_ALIGNED_UNION_DEPRECATION_WARNING\r\n#define _LIBCXX_IN_DEVCRT\r\n#include <msvc_stdlib_force_include.h> // Must precede any other libc++ headers\r\n\r\n// Include Standard headers:\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <limits>\r\n#include <memory>\r\n#include <optional>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <variant>\r\n\r\n// Include llvm-project/libcxx/test/support headers:\r\n#include <test_macros.h>\r\n#include <type_id.h>\r\n#include <variant_test_helpers.h>\r\n\r\n#if _HAS_CXX20\r\n#define CONSTEXPR20 constexpr\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n#define CONSTEXPR20 inline\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\nnamespace msvc {\r\n    namespace size {\r\n        template <class T>\r\n        using element =\r\n            std::conditional<std::is_reference<T>::value, std::reference_wrapper<std::remove_reference_t<T>>, T>;\r\n\r\n        template <std::size_t N>\r\n        using index_t =\r\n            std::conditional_t<(N < static_cast<std::size_t>(std::numeric_limits<signed char>::max())), signed char,\r\n                std::conditional_t<(N < static_cast<std::size_t>(std::numeric_limits<short>::max())), short, int>>;\r\n\r\n        template <class... Ts>\r\n        struct fake_variant {\r\n            std::aligned_union_t<0, typename element<Ts>::type...> data_;\r\n            index_t<sizeof...(Ts)> index_;\r\n        };\r\n\r\n        template <class... Ts>\r\n        constexpr bool check_size = sizeof(std::variant<Ts...>) == sizeof(fake_variant<Ts...>);\r\n\r\n        template <int>\r\n        struct empty {};\r\n\r\n        struct not_empty {\r\n            int i;\r\n        };\r\n        struct __declspec(empty_bases) many_bases : empty<0>, empty<1>, empty<2>, empty<3> {};\r\n\r\n        static_assert(check_size<bool>);\r\n        static_assert(check_size<char>);\r\n        static_assert(check_size<unsigned char>);\r\n        static_assert(check_size<int>);\r\n        static_assert(check_size<unsigned int>);\r\n        static_assert(check_size<long>);\r\n        static_assert(check_size<long long>);\r\n        static_assert(check_size<float>);\r\n        static_assert(check_size<double>);\r\n        static_assert(check_size<void*>);\r\n        static_assert(check_size<empty<0>>);\r\n        static_assert(check_size<not_empty>);\r\n        static_assert(check_size<many_bases>);\r\n\r\n        static_assert(check_size<bool, char, short, int, long, long long, float, double, long double, void*, empty<0>,\r\n            empty<1>, not_empty, many_bases>);\r\n    } // namespace size\r\n\r\n    namespace big_variant {\r\n#ifdef __EDG__\r\n        constexpr std::size_t big = 20;\r\n#else // C1XX and Clang\r\n        constexpr std::size_t big = 64;\r\n#endif // tune value of \"big\" to a bit less than the largest variant the front-end can handle\r\n        constexpr std::size_t n = 16;\r\n\r\n        template <std::size_t Size, std::size_t I, std::size_t N>\r\n        void test_gets() {\r\n            using V = std::_Meta_repeat_n_c<Size, std::string, std::variant>;\r\n            V v{std::in_place_index<I>, \"Hello, world!\"};\r\n            assert(std::get<I>(v) == \"Hello, world!\");\r\n            if constexpr (N != 0) {\r\n                test_gets<Size, I + (Size - I - 1) / N, N - 1>();\r\n            }\r\n        }\r\n\r\n        template <std::size_t Size>\r\n        void test_size() {\r\n            if constexpr (Size <= big) {\r\n                using V = std::_Meta_repeat_n_c<Size, std::string, std::variant>;\r\n                // test 0, and n equally spaced indices including big - 1\r\n                test_gets < Size, 0, n<Size ? n : Size>();\r\n                constexpr std::size_t i = Size / 2;\r\n                V v1{std::in_place_index<i>, \"Hello, world!\"};\r\n                V v2 = v1;\r\n                assert(std::get<i>(v2) == \"Hello, world!\");\r\n                V v3 = std::move(v1);\r\n                assert(std::get<i>(v3) == \"Hello, world!\");\r\n                constexpr std::size_t j = Size <= 2 ? 0 : i + 1;\r\n                v2.template emplace<j>(\"Goodbye, world!\");\r\n                v1 = v2;\r\n                assert(std::get<j>(v1) == \"Goodbye, world!\");\r\n                v2 = std::move(v3);\r\n                assert(std::get<i>(v2) == \"Hello, world!\");\r\n                v1.swap(v2);\r\n                assert(std::get<j>(v2) == \"Goodbye, world!\");\r\n                assert(std::get<i>(v1) == \"Hello, world!\");\r\n                auto visitor = [](const std::string& s) { return s; };\r\n                assert(std::visit(visitor, v1) == \"Hello, world!\");\r\n            }\r\n        }\r\n\r\n        void run_test() {\r\n            // test with all of the power-of-four sizes used for the switch blocks in visit and _Variant_raw_visit\r\n            test_size<1>();\r\n            test_size<3>();\r\n            test_size<15>();\r\n            test_size<63>();\r\n            test_size<255>();\r\n            test_size<big>();\r\n        }\r\n    } // namespace big_variant\r\n\r\n    namespace derived_variant {\r\n        void run_test() {\r\n            // Extension: std::visit accepts types derived from a specialization of variant.\r\n            {\r\n                struct my_variant : std::variant<int, char, double> {\r\n                    using std::variant<int, char, double>::variant;\r\n                };\r\n\r\n                my_variant v1{42};\r\n                my_variant v2{3.14};\r\n                auto visitor1 = [](auto&& x) { return static_cast<double>(x); };\r\n                assert(std::visit(visitor1, v1) == 42.0);\r\n                assert(std::visit(visitor1, v2) == 3.14);\r\n                auto visitor2 = [](auto&& x, auto&& y) { return static_cast<double>(x + y); };\r\n                assert(std::visit(visitor2, v1, v2) == 45.14);\r\n            }\r\n            {\r\n                struct MakeEmptyT {\r\n                    MakeEmptyT() = default;\r\n                    MakeEmptyT(MakeEmptyT&&) {\r\n                        throw 42;\r\n                    }\r\n                    MakeEmptyT& operator=(MakeEmptyT&&) {\r\n                        throw 42;\r\n                    }\r\n                };\r\n                struct my_variant : std::variant<int, MakeEmptyT> {\r\n                    using std::variant<int, MakeEmptyT>::variant;\r\n                };\r\n\r\n                my_variant v{42};\r\n                try {\r\n                    v = my_variant{std::in_place_type<MakeEmptyT>};\r\n                    abort();\r\n                } catch (int) {\r\n                    assert(v.valueless_by_exception());\r\n                }\r\n\r\n                auto very_useful_visitor = [](auto&&...) { abort(); };\r\n                try {\r\n                    std::visit(very_useful_visitor, v);\r\n                    abort();\r\n                } catch (const std::bad_variant_access&) {\r\n                }\r\n                try {\r\n                    std::visit(very_useful_visitor, my_variant{42}, v);\r\n                    abort();\r\n                } catch (const std::bad_variant_access&) {\r\n                }\r\n                try {\r\n                    std::visit(very_useful_visitor, v, my_variant{42});\r\n                    abort();\r\n                } catch (const std::bad_variant_access&) {\r\n                }\r\n            }\r\n        }\r\n    } // namespace derived_variant\r\n\r\n    template <class Fn>\r\n    struct mobile_visitor {\r\n        mobile_visitor() = default;\r\n\r\n        mobile_visitor(const mobile_visitor&) {\r\n            abort();\r\n        }\r\n        mobile_visitor(mobile_visitor&&) {\r\n            abort();\r\n        }\r\n        mobile_visitor& operator=(const mobile_visitor&) {\r\n            abort();\r\n            return *this;\r\n        }\r\n        mobile_visitor& operator=(mobile_visitor&&) {\r\n            abort();\r\n            return *this;\r\n        }\r\n\r\n        template <class... Args>\r\n        constexpr decltype(auto) operator()(Args&&... args) const {\r\n            return Fn{}(std::forward<Args>(args)...);\r\n        }\r\n    };\r\n\r\n    template <class Fn>\r\n    struct immobile_visitor : mobile_visitor<Fn> {\r\n        immobile_visitor()                                   = default;\r\n        immobile_visitor(const immobile_visitor&)            = delete;\r\n        immobile_visitor& operator=(const immobile_visitor&) = delete;\r\n    };\r\n\r\n    template <class T>\r\n    struct convert_to {\r\n        template <class U, std::enable_if_t<std::is_convertible_v<U, T>, int> = 0>\r\n        constexpr T operator()(U&& u) const {\r\n            return std::forward<U>(u);\r\n        }\r\n    };\r\n\r\n    namespace visit {\r\n        void test_immobile_function() {\r\n            {\r\n                // Validate that visit need not copy or move the visitor\r\n                using V = std::variant<int, double>;\r\n                immobile_visitor<convert_to<double>> visitor{};\r\n                assert(std::visit(visitor, V{42}) == 42.0);\r\n                assert(std::visit(std::as_const(visitor), V{3.14}) == 3.14);\r\n                assert(std::visit(std::move(visitor), V{1729}) == 1729.0);\r\n                assert(std::visit(std::move(std::as_const(visitor)), V{1.414}) == 1.414);\r\n            }\r\n            {\r\n                // Validate that visit does not copy or move the visitor\r\n                using V = std::variant<int, double>;\r\n                mobile_visitor<convert_to<double>> visitor{};\r\n                assert(std::visit(visitor, V{42}) == 42.0);\r\n                assert(std::visit(std::as_const(visitor), V{3.14}) == 3.14);\r\n                assert(std::visit(std::move(visitor), V{1729}) == 1729.0);\r\n                assert(std::visit(std::move(std::as_const(visitor)), V{1.414}) == 1.414);\r\n            }\r\n        }\r\n\r\n        void run_test() {\r\n            test_immobile_function();\r\n        }\r\n    } // namespace visit\r\n\r\n    namespace visit_R {\r\n#if _HAS_CXX20\r\n        //===----------------------------------------------------------------------===//\r\n        //\r\n        // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n        // See https://llvm.org/LICENSE.txt for license information.\r\n        // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n        //\r\n        //===----------------------------------------------------------------------===//\r\n\r\n        enum CallType : unsigned int { CT_None, CT_NonConst = 1, CT_Const = 2, CT_LValue = 4, CT_RValue = 8 };\r\n\r\n        constexpr CallType operator|(CallType LHS, CallType RHS) {\r\n            return static_cast<CallType>(static_cast<unsigned int>(LHS) | static_cast<unsigned int>(RHS));\r\n        }\r\n\r\n        struct ForwardingCallObject {\r\n            template <class... Args>\r\n            bool operator()(Args&&...) & {\r\n                set_call<Args&&...>(CT_NonConst | CT_LValue);\r\n                return {};\r\n            }\r\n\r\n            template <class... Args>\r\n            char operator()(Args&&...) const& {\r\n                set_call<Args&&...>(CT_Const | CT_LValue);\r\n                return {};\r\n            }\r\n\r\n            // Don't allow the call operator to be invoked as an rvalue.\r\n            template <class... Args>\r\n            short operator()(Args&&...) && {\r\n                set_call<Args&&...>(CT_NonConst | CT_RValue);\r\n                return {};\r\n            }\r\n\r\n            template <class... Args>\r\n            int operator()(Args&&...) const&& {\r\n                set_call<Args&&...>(CT_Const | CT_RValue);\r\n                return {};\r\n            }\r\n\r\n            template <class... Args>\r\n            static void set_call(CallType type) {\r\n                assert(last_call_type == CT_None);\r\n                assert(last_call_args == nullptr);\r\n                last_call_type = type;\r\n                last_call_args = std::addressof(makeArgumentID<Args...>());\r\n            }\r\n\r\n            template <class... Args>\r\n            static bool check_call(CallType type) {\r\n                bool result = last_call_type == type && last_call_args && *last_call_args == makeArgumentID<Args...>();\r\n                last_call_type = CT_None;\r\n                last_call_args = nullptr;\r\n                return result;\r\n            }\r\n\r\n            static CallType last_call_type;\r\n            static const TypeID* last_call_args;\r\n        };\r\n\r\n        CallType ForwardingCallObject::last_call_type      = CT_None;\r\n        const TypeID* ForwardingCallObject::last_call_args = nullptr;\r\n\r\n        template <class R>\r\n        void test_call_operator_forwarding() {\r\n            using Fn = ForwardingCallObject;\r\n            Fn obj{};\r\n            const Fn& cobj = obj;\r\n            { // test call operator forwarding - no variant\r\n                std::visit<R>(obj);\r\n                assert(Fn::check_call<>(CT_NonConst | CT_LValue));\r\n                std::visit<R>(cobj);\r\n                assert(Fn::check_call<>(CT_Const | CT_LValue));\r\n                std::visit<R>(std::move(obj));\r\n                assert(Fn::check_call<>(CT_NonConst | CT_RValue));\r\n                std::visit<R>(std::move(cobj));\r\n                assert(Fn::check_call<>(CT_Const | CT_RValue));\r\n            }\r\n            { // test call operator forwarding - single variant, single arg\r\n                using V = std::variant<int>;\r\n                V v(42);\r\n                std::visit<R>(obj, v);\r\n                assert(Fn::check_call<int&>(CT_NonConst | CT_LValue));\r\n                std::visit<R>(cobj, v);\r\n                assert(Fn::check_call<int&>(CT_Const | CT_LValue));\r\n                std::visit<R>(std::move(obj), v);\r\n                assert(Fn::check_call<int&>(CT_NonConst | CT_RValue));\r\n                std::visit<R>(std::move(cobj), v);\r\n                assert(Fn::check_call<int&>(CT_Const | CT_RValue));\r\n            }\r\n            { // test call operator forwarding - single variant, multi arg\r\n                using V = std::variant<int, long, double>;\r\n                V v(42l);\r\n                std::visit<R>(obj, v);\r\n                assert(Fn::check_call<long&>(CT_NonConst | CT_LValue));\r\n                std::visit<R>(cobj, v);\r\n                assert(Fn::check_call<long&>(CT_Const | CT_LValue));\r\n                std::visit<R>(std::move(obj), v);\r\n                assert(Fn::check_call<long&>(CT_NonConst | CT_RValue));\r\n                std::visit<R>(std::move(cobj), v);\r\n                assert(Fn::check_call<long&>(CT_Const | CT_RValue));\r\n            }\r\n            { // test call operator forwarding - multi variant, multi arg\r\n                using V  = std::variant<int, long, double>;\r\n                using V2 = std::variant<int*, std::string>;\r\n                V v(42l);\r\n                V2 v2(\"hello\");\r\n                std::visit<R>(obj, v, v2);\r\n                assert((Fn::check_call<long&, std::string&>(CT_NonConst | CT_LValue)));\r\n                std::visit<R>(cobj, v, v2);\r\n                assert((Fn::check_call<long&, std::string&>(CT_Const | CT_LValue)));\r\n                std::visit<R>(std::move(obj), v, v2);\r\n                assert((Fn::check_call<long&, std::string&>(CT_NonConst | CT_RValue)));\r\n                std::visit<R>(std::move(cobj), v, v2);\r\n                assert((Fn::check_call<long&, std::string&>(CT_Const | CT_RValue)));\r\n            }\r\n        }\r\n\r\n        template <class R>\r\n        void test_argument_forwarding() {\r\n            using Fn = ForwardingCallObject;\r\n            Fn obj{};\r\n            const auto Val = CT_LValue | CT_NonConst;\r\n            { // single argument - value type\r\n                using V = std::variant<int>;\r\n                V v(42);\r\n                const V& cv = v;\r\n                std::visit<R>(obj, v);\r\n                assert(Fn::check_call<int&>(Val));\r\n                std::visit<R>(obj, cv);\r\n                assert(Fn::check_call<const int&>(Val));\r\n                std::visit<R>(obj, std::move(v));\r\n                assert(Fn::check_call<int&&>(Val));\r\n                std::visit<R>(obj, std::move(cv));\r\n                assert(Fn::check_call<const int&&>(Val));\r\n            }\r\n        }\r\n\r\n        struct ReturnFirst {\r\n            template <class F, class... Args>\r\n            constexpr F operator()(F f, Args&&...) const {\r\n                return f;\r\n            }\r\n        };\r\n\r\n        struct ReturnArity {\r\n            template <class... Args>\r\n            constexpr int operator()(Args&&...) const {\r\n                return sizeof...(Args);\r\n            }\r\n        };\r\n\r\n        struct simple_base {\r\n            int x;\r\n\r\n            constexpr explicit simple_base(int i) noexcept : x{i} {}\r\n        };\r\n\r\n        template <int>\r\n        struct simple_derived : simple_base {\r\n            using simple_base::simple_base;\r\n        };\r\n\r\n        constexpr bool test_constexpr() {\r\n            constexpr ReturnFirst obj{};\r\n            constexpr ReturnArity aobj{};\r\n            {\r\n                using V = std::variant<int>;\r\n                constexpr V v(42);\r\n                static_assert(std::visit<int>(obj, v) == 42);\r\n            }\r\n            {\r\n                using V = std::variant<short, long, char>;\r\n                constexpr V v(42l);\r\n                static_assert(std::visit<long>(obj, v) == 42);\r\n            }\r\n            {\r\n                using V1 = std::variant<int>;\r\n                using V2 = std::variant<int, char*, long long>;\r\n                using V3 = std::variant<bool, int, int>;\r\n                constexpr V1 v1;\r\n                constexpr V2 v2(nullptr);\r\n                constexpr V3 v3;\r\n                static_assert(std::visit<double>(aobj, v1, v2, v3) == 3.0);\r\n            }\r\n            {\r\n                using V1 = std::variant<int>;\r\n                using V2 = std::variant<int, char*, long long>;\r\n                using V3 = std::variant<void*, int, int>;\r\n                constexpr V1 v1;\r\n                constexpr V2 v2(nullptr);\r\n                constexpr V3 v3;\r\n                static_assert(std::visit<long long>(aobj, v1, v2, v3) == 3LL);\r\n            }\r\n            {\r\n                using V = std::variant<simple_derived<0>, simple_derived<1>, simple_derived<2>>;\r\n                V v{simple_derived<1>{42}};\r\n                auto&& b = std::visit<simple_base&>(std::identity{}, v);\r\n                ASSERT_SAME_TYPE(decltype(b), simple_base&);\r\n                assert(b.x == 42);\r\n                auto&& cb = std::visit<const simple_base&>(std::identity{}, std::as_const(v));\r\n                ASSERT_SAME_TYPE(decltype(cb), const simple_base&);\r\n                assert(cb.x == 42);\r\n                auto&& rb = std::visit<simple_base&&>(std::identity{}, std::move(v));\r\n                ASSERT_SAME_TYPE(decltype(rb), simple_base&&);\r\n                assert(rb.x == 42);\r\n                auto&& crb = std::visit<const simple_base&&>(std::identity{}, std::move(std::as_const(v)));\r\n                ASSERT_SAME_TYPE(decltype(crb), const simple_base&&);\r\n                assert(crb.x == 42);\r\n            }\r\n            return true;\r\n        }\r\n\r\n        void test_exceptions() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n            ReturnArity obj{};\r\n            auto test = [&](auto&&... args) {\r\n                try {\r\n                    std::visit<void>(obj, args...);\r\n                } catch (const std::bad_variant_access&) {\r\n                    return true;\r\n                } catch (...) {\r\n                }\r\n                return false;\r\n            };\r\n            {\r\n                using V = std::variant<int, MakeEmptyT>;\r\n                V v;\r\n                makeEmpty(v);\r\n                assert(test(v));\r\n            }\r\n            {\r\n                using V  = std::variant<int, MakeEmptyT>;\r\n                using V2 = std::variant<long, std::string, void*>;\r\n                V v;\r\n                makeEmpty(v);\r\n                V2 v2(\"hello\");\r\n                assert(test(v, v2));\r\n            }\r\n            {\r\n                using V  = std::variant<int, MakeEmptyT>;\r\n                using V2 = std::variant<long, std::string, void*>;\r\n                V v;\r\n                makeEmpty(v);\r\n                V2 v2(\"hello\");\r\n                assert(test(v2, v));\r\n            }\r\n            {\r\n                using V  = std::variant<int, MakeEmptyT>;\r\n                using V2 = std::variant<long, std::string, void*, MakeEmptyT>;\r\n                V v;\r\n                makeEmpty(v);\r\n                V2 v2;\r\n                makeEmpty(v2);\r\n                assert(test(v, v2));\r\n            }\r\n#endif\r\n        }\r\n\r\n        // See LLVM-31916\r\n        void test_caller_accepts_nonconst() {\r\n            struct A {};\r\n            struct Visitor {\r\n                void operator()(A&) {}\r\n            };\r\n            std::variant<A> v;\r\n            std::visit<void>(Visitor{}, v);\r\n        }\r\n\r\n        struct mobile_data {\r\n            int x;\r\n\r\n            /* implicit */ mobile_data(int i) : x{i} {}\r\n            mobile_data(const mobile_data&) {\r\n                abort();\r\n            }\r\n            mobile_data(mobile_data&&) {\r\n                abort();\r\n            }\r\n            mobile_data& operator=(const mobile_data&) {\r\n                abort();\r\n                return *this;\r\n            }\r\n            mobile_data& operator=(mobile_data&&) {\r\n                abort();\r\n                return *this;\r\n            }\r\n        };\r\n\r\n        struct immobile_data : mobile_data {\r\n            using mobile_data::mobile_data;\r\n            immobile_data(const immobile_data&)            = delete;\r\n            immobile_data& operator=(const immobile_data&) = delete;\r\n        };\r\n\r\n        void test_perfect_return() {\r\n            {\r\n                // Verify that a return object need not be copied/moved\r\n                using R = immobile_data;\r\n                assert(std::visit<R>(std::identity{}, std::variant<int, short>{13}).x == 13);\r\n                assert(std::visit<R>(std::identity{}, std::variant<int, short>{short{42}}).x == 42);\r\n\r\n                // Verify that conversions to an object that can't be copied/moved are correctly handled\r\n                struct convertible_to_immobile_one {\r\n                    operator immobile_data() const {\r\n                        return immobile_data{1729};\r\n                    }\r\n                };\r\n\r\n                struct convertible_to_immobile_other {\r\n                    operator immobile_data() const {\r\n                        return immobile_data{1138};\r\n                    }\r\n                };\r\n\r\n                using VarTestConv = std::variant<convertible_to_immobile_one, convertible_to_immobile_other>;\r\n                assert(std::visit<R>(std::identity{}, VarTestConv{convertible_to_immobile_one{}}).x == 1729);\r\n                assert(std::visit<R>(std::identity{}, VarTestConv{convertible_to_immobile_other{}}).x == 1138);\r\n                auto immobile_converter = [](auto src) -> immobile_data { return src; };\r\n                assert(std::visit<R>(immobile_converter, VarTestConv{convertible_to_immobile_one{}}).x == 1729);\r\n                assert(std::visit<R>(immobile_converter, VarTestConv{convertible_to_immobile_other{}}).x == 1138);\r\n            }\r\n            {\r\n                // Verify that a returned object is not copied/moved/modified\r\n                using R = mobile_data;\r\n                assert(std::visit<R>(std::identity{}, std::variant<int, short>{13}).x == 13);\r\n                assert(std::visit<R>(std::identity{}, std::variant<int, short>{short{42}}).x == 42);\r\n\r\n                // Verify that a returned reference is not copied/moved/modified\r\n                auto visitor1 = [x = R{1729}](auto) mutable -> R& { return x; };\r\n                assert(std::visit<R&>(visitor1, std::variant<int, short>{13}).x == 1729);\r\n                auto visitor2 = [x = R{1138}](auto) mutable -> R&& { return std::move(x); };\r\n                assert(std::visit<R&&>(visitor2, std::variant<int, short>{13}).x == 1138);\r\n            }\r\n        }\r\n\r\n        void test_immobile_function() {\r\n            {\r\n                // Validate that visit need not copy or move the visitor\r\n                using V = std::variant<int, double>;\r\n                immobile_visitor<std::identity> visitor{};\r\n                assert(std::visit<double>(visitor, V{42}) == 42.0);\r\n                assert(std::visit<double>(std::as_const(visitor), V{3.14}) == 3.14);\r\n                assert(std::visit<double>(std::move(visitor), V{1729}) == 1729.0);\r\n                assert(std::visit<double>(std::move(std::as_const(visitor)), V{1.414}) == 1.414);\r\n            }\r\n            {\r\n                // Validate that visit does not copy or move the visitor\r\n                using V = std::variant<int, double>;\r\n                mobile_visitor<std::identity> visitor{};\r\n                assert(std::visit<double>(visitor, V{42}) == 42.0);\r\n                assert(std::visit<double>(std::as_const(visitor), V{3.14}) == 3.14);\r\n                assert(std::visit<double>(std::move(visitor), V{1729}) == 1729.0);\r\n                assert(std::visit<double>(std::move(std::as_const(visitor)), V{1.414}) == 1.414);\r\n            }\r\n        }\r\n\r\n        void run_test() {\r\n            test_call_operator_forwarding<void>();\r\n            test_call_operator_forwarding<const void>();\r\n            test_call_operator_forwarding<long>();\r\n            test_argument_forwarding<void>();\r\n            test_argument_forwarding<const void>();\r\n            test_argument_forwarding<long long>();\r\n            test_constexpr();\r\n            static_assert(test_constexpr());\r\n            test_exceptions();\r\n            test_caller_accepts_nonconst();\r\n            test_perfect_return();\r\n            test_immobile_function();\r\n        }\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n        void run_test() {}\r\n#endif // _HAS_CXX20\r\n    } // namespace visit_R\r\n\r\n    namespace visit_pointer_to_member {\r\n        struct base {\r\n            int x;\r\n\r\n            int f() const {\r\n                return x;\r\n            }\r\n        };\r\n        struct derived : base {\r\n            int y;\r\n        };\r\n\r\n        void run_test() {\r\n            using V = std::variant<base, derived>;\r\n            assert(std::visit(&base::x, V{base{13}}) == 13);\r\n            assert(std::visit(&base::x, V{derived{{42}, 29}}) == 42);\r\n\r\n            assert(std::visit(&base::f, V{base{13}}) == 13);\r\n            assert(std::visit(&base::f, V{derived{{42}, 29}}) == 42);\r\n        }\r\n    } // namespace visit_pointer_to_member\r\n\r\n    template <class, class = void>\r\n    constexpr bool has_type = false;\r\n    template <class T>\r\n    constexpr bool has_type<T, std::void_t<typename T::type>> = true;\r\n\r\n    // Verify that `_Meta_at_<_Meta_list<>, size_t(-1)>` has no member named `type`, and that instantiating it doesn't\r\n    // consume the entire compiler heap.\r\n    static_assert(!has_type<std::_Meta_at_<std::_Meta_list<>, static_cast<std::size_t>(-1)>>);\r\n\r\n    namespace vso468746 {\r\n        // Defend against regression of VSO-468746\r\n        // \"std::function's converting constructor/assignment should be unusable for performing copy/move assignments\"\r\n\r\n        void run_test() {\r\n            struct S {\r\n                std::variant<std::function<S()>> member;\r\n            };\r\n\r\n            static_assert(\r\n                sizeof(std::variant<std::function<S()>>) == sizeof(std::function<S()>) + alignof(std::function<S()>));\r\n            static_assert(sizeof(S::member) == sizeof(std::variant<std::function<S()>>));\r\n            static_assert(sizeof(S) >= sizeof(S::member));\r\n        }\r\n    } // namespace vso468746\r\n\r\n    namespace vso492097 {\r\n        // Defend against regression of VSO-492097\r\n        // The compiler was not correctly emitting constant data for variants constructed from the address of static\r\n        // duration variables with a constexpr operator& due to mishandling initialization of nested classes with\r\n        // anonymous union members.\r\n        template <class T>\r\n        struct wrap {\r\n            T val_;\r\n            constexpr T* operator&() {\r\n                return &val_;\r\n            }\r\n        };\r\n\r\n        void run_test() {\r\n            static wrap<int> intVar       = {42};\r\n            static wrap<double> doubleVar = {3.14};\r\n\r\n            using V = std::variant<int*, double*>;\r\n            static constexpr V v1(&intVar);\r\n            static constexpr V v2(&doubleVar);\r\n\r\n            static_assert(v1.index() == 0);\r\n            assert(*std::get<0>(v1) == 42);\r\n            static_assert(v2.index() == 1);\r\n            assert(*std::get<1>(v2) == 3.14);\r\n        }\r\n    } // namespace vso492097\r\n\r\n    namespace vso508126 {\r\n        void run_test() {\r\n            struct S {};\r\n            static_assert(!std::is_copy_constructible_v<volatile S>);\r\n            static_assert(!std::is_copy_constructible_v<std::variant<volatile S>>);\r\n        }\r\n    } // namespace vso508126\r\n\r\n    namespace DevCom1031281 {\r\n        // Compilers may warn when initializing a variant from a \"weird\" argument, e.g., std::variant<short>{some_int}\r\n        // is potentially narrowing. Compilers should not, however, emit such diagnostics from the metaprogramming that\r\n        // determines which alternative a variant initialization would activate. We don't want to emit warnings when\r\n        // determining implicit conversion sequences early in overload resolution.\r\n\r\n        void Overload(int) {}\r\n        void Overload(std::variant<unsigned short>) {}\r\n\r\n        void run_test() {\r\n            Overload(42);\r\n        }\r\n    } // namespace DevCom1031281\r\n\r\n    namespace gh2770 {\r\n        // Previous metaprogramming to validate the type requirements for std::visit required typelists too long for\r\n        // Clang.\r\n        struct S {\r\n            template <class T0, class T1, class T2, class T3, class T4>\r\n            int operator()(T0, T1, T2, T3, T4) const {\r\n                return 1729;\r\n            }\r\n        };\r\n\r\n        void run_test() {\r\n            using V = std::variant<char, int, long, long long>;\r\n            assert(std::visit(S{}, V{'a'}, V{'b'}, V{10}, V{20L}, V{30LL}) == 1729);\r\n#if _HAS_CXX20\r\n            assert(std::visit<int>(S{}, V{'a'}, V{'b'}, V{10}, V{20L}, V{30LL}) == 1729);\r\n#endif // _HAS_CXX20\r\n        }\r\n    } // namespace gh2770\r\n\r\n    namespace gh4901 {\r\n        struct X {\r\n            CONSTEXPR20 ~X() {}\r\n        };\r\n\r\n        struct Y {\r\n            X _;\r\n        };\r\n\r\n        struct ZA {\r\n            std::variant<Y, int> z;\r\n        };\r\n\r\n        struct ZB {\r\n            std::variant<int, Y> z;\r\n        };\r\n\r\n#if _HAS_CXX20\r\n        static_assert(ZA{0}.z.index() == 1);\r\n        static_assert(ZA{Y{}}.z.index() == 0);\r\n        static_assert(ZB{0}.z.index() == 0);\r\n        static_assert(ZB{Y{}}.z.index() == 1);\r\n#endif // _HAS_CXX20\r\n\r\n        static_assert(std::is_nothrow_destructible_v<X>);\r\n        static_assert(std::is_nothrow_destructible_v<Y>);\r\n        static_assert(std::is_nothrow_destructible_v<std::variant<Y, int>>);\r\n        static_assert(std::is_nothrow_destructible_v<std::variant<int, Y>>);\r\n        static_assert(std::is_nothrow_destructible_v<ZA>);\r\n        static_assert(std::is_nothrow_destructible_v<ZB>);\r\n\r\n        // Verify that variant::~variant is noexcept even when an alternative has a potentially-throwing destructor,\r\n        // per N4988 [res.on.exception.handling]/3.\r\n        struct X2 {\r\n            CONSTEXPR20 ~X2() noexcept(false) {}\r\n        };\r\n\r\n        struct Y2 {\r\n            X2 _;\r\n        };\r\n\r\n        struct ZA2 {\r\n            std::variant<Y2, int> z;\r\n        };\r\n\r\n        struct ZB2 {\r\n            std::variant<int, Y2> z;\r\n        };\r\n\r\n#if _HAS_CXX20\r\n        static_assert(ZA2{0}.z.index() == 1);\r\n        static_assert(ZA2{Y2{}}.z.index() == 0);\r\n        static_assert(ZB2{0}.z.index() == 0);\r\n        static_assert(ZB2{Y2{}}.z.index() == 1);\r\n#endif // _HAS_CXX20\r\n\r\n        static_assert(!std::is_nothrow_destructible_v<X2>);\r\n        static_assert(!std::is_nothrow_destructible_v<Y2>);\r\n        static_assert(std::is_nothrow_destructible_v<std::variant<Y2, int>>);\r\n        static_assert(std::is_nothrow_destructible_v<std::variant<int, Y2>>);\r\n        static_assert(std::is_nothrow_destructible_v<ZA2>);\r\n        static_assert(std::is_nothrow_destructible_v<ZB2>);\r\n\r\n        struct ZC {\r\n            std::variant<Y, int, Y2> z;\r\n        };\r\n\r\n#if _HAS_CXX20\r\n        static_assert(ZC{Y{}}.z.index() == 0);\r\n        static_assert(ZC{0}.z.index() == 1);\r\n        static_assert(ZC{Y2{}}.z.index() == 2);\r\n#endif // _HAS_CXX20\r\n\r\n        static_assert(std::is_nothrow_destructible_v<std::variant<Y, int, Y2>>);\r\n        static_assert(std::is_nothrow_destructible_v<ZC>);\r\n    } // namespace gh4901\r\n\r\n    namespace assign_cv {\r\n        template <class T>\r\n        struct TypeIdentityImpl {\r\n            using type = T;\r\n        };\r\n        template <class T>\r\n        using TypeIdentity = typename TypeIdentityImpl<T>::type;\r\n\r\n        struct CvAssignable {\r\n            CvAssignable()                               = default;\r\n            CvAssignable(const CvAssignable&)            = default;\r\n            CvAssignable(CvAssignable&&)                 = default;\r\n            CvAssignable& operator=(const CvAssignable&) = default;\r\n            CvAssignable& operator=(CvAssignable&&)      = default;\r\n\r\n            template <class T = CvAssignable>\r\n            CvAssignable(const volatile TypeIdentity<T>&) noexcept {}\r\n            template <class T = CvAssignable>\r\n            CvAssignable(const volatile TypeIdentity<T>&&) noexcept {}\r\n\r\n            template <class T = CvAssignable>\r\n            constexpr CvAssignable& operator=(const volatile TypeIdentity<T>&) noexcept {\r\n                return *this;\r\n            }\r\n            template <class T = CvAssignable>\r\n            constexpr CvAssignable& operator=(const volatile TypeIdentity<T>&&) noexcept {\r\n                return *this;\r\n            }\r\n\r\n            template <class T = CvAssignable>\r\n            constexpr const volatile CvAssignable& operator=(const volatile TypeIdentity<T>&) const volatile noexcept {\r\n                return *this;\r\n            }\r\n            template <class T = CvAssignable>\r\n            constexpr const volatile CvAssignable& operator=(const volatile TypeIdentity<T>&&) const volatile noexcept {\r\n                return *this;\r\n            }\r\n        };\r\n\r\n        void run_test() {\r\n            using std::swap;\r\n            {\r\n                std::variant<const int> oc{};\r\n                oc.emplace<0>(0);\r\n                static_assert(!std::is_copy_assignable_v<decltype(oc)>);\r\n                static_assert(!std::is_move_assignable_v<decltype(oc)>);\r\n                static_assert(!std::is_swappable_v<decltype(oc)>);\r\n\r\n                std::variant<volatile int> ov{};\r\n                std::variant<volatile int> ov2{};\r\n                ov.emplace<0>(0);\r\n                swap(ov, ov);\r\n                ov = ov2;\r\n                ov = std::move(ov2);\r\n\r\n                std::variant<const volatile int> ocv{};\r\n                ocv.emplace<0>(0);\r\n                static_assert(!std::is_copy_assignable_v<decltype(ocv)>);\r\n                static_assert(!std::is_move_assignable_v<decltype(ocv)>);\r\n                static_assert(!std::is_swappable_v<decltype(ocv)>);\r\n            }\r\n            {\r\n                std::variant<const CvAssignable> oc{};\r\n                std::variant<const CvAssignable> oc2{};\r\n                oc.emplace<0>(CvAssignable{});\r\n                swap(oc, oc);\r\n                oc = oc2;\r\n                oc = std::move(oc2);\r\n\r\n                std::variant<volatile CvAssignable> ov{};\r\n                std::variant<volatile CvAssignable> ov2{};\r\n                ov.emplace<0>(CvAssignable{});\r\n                swap(ov, ov);\r\n                ov = ov2;\r\n                ov = std::move(ov2);\r\n\r\n                std::variant<const volatile CvAssignable> ocv{};\r\n                std::variant<const volatile CvAssignable> ocv2{};\r\n                ocv.emplace<0>(CvAssignable{});\r\n                swap(ocv, ocv);\r\n                ocv = ocv2;\r\n                ocv = std::move(ocv2);\r\n            }\r\n        }\r\n    } // namespace assign_cv\r\n\r\n    namespace gh4959 {\r\n        // Test GH-4959 \"P0608R3 breaks flang build with Clang\"\r\n        // Constraints on variant's converting constructor and assignment operator templates reject arguments of the\r\n        // variant's type, but did not short-circuit to avoid evaluating the constructibility constraint. For this\r\n        // program, the constructibility constraint is ill-formed outside the immediate context when determining if\r\n        // variant<optional<GenericSpec>> can be initialized from an rvalue of the same type.\r\n\r\n        template <typename... RvRef>\r\n        using NoLvalue = std::enable_if_t<(... && !std::is_lvalue_reference_v<RvRef>)>;\r\n\r\n        struct Name {};\r\n\r\n        struct GenericSpec {\r\n            template <typename A, typename = NoLvalue<A>>\r\n            GenericSpec(A&& x) : u(std::move(x)) {}\r\n            GenericSpec(GenericSpec&&) = default;\r\n            std::variant<Name> u;\r\n        };\r\n\r\n        struct InterfaceStmt {\r\n            template <typename A, typename = NoLvalue<A>>\r\n            InterfaceStmt(A&& x) : u(std::move(x)) {}\r\n            InterfaceStmt(InterfaceStmt&&) = default;\r\n            std::variant<std::optional<GenericSpec>> u;\r\n        };\r\n    } // namespace gh4959\r\n\r\n    namespace gh6085 {\r\n        struct WeirdlyCopyConstructible {\r\n            WeirdlyCopyConstructible() = default;\r\n            // potentially-throwing and explicit\r\n            explicit WeirdlyCopyConstructible(const WeirdlyCopyConstructible&) noexcept(false) = default;\r\n            WeirdlyCopyConstructible(WeirdlyCopyConstructible&&) noexcept                      = default;\r\n\r\n            CONSTEXPR20 WeirdlyCopyConstructible& operator=(const WeirdlyCopyConstructible&) noexcept { // non-trivial\r\n                return *this;\r\n            }\r\n        };\r\n\r\n        CONSTEXPR20 bool run_test() {\r\n            std::variant<int, WeirdlyCopyConstructible> a = 12;\r\n            std::variant<int, WeirdlyCopyConstructible> b = WeirdlyCopyConstructible{};\r\n\r\n            assert(a.index() == 0);\r\n            assert(std::get<0>(a) == 12);\r\n            assert(b.index() == 1);\r\n\r\n            a = b;\r\n            assert(a.index() == 1);\r\n\r\n            return true;\r\n        }\r\n    } // namespace gh6085\r\n} // namespace msvc\r\n\r\nint main() {\r\n#if _HAS_CXX20\r\n    static_assert(msvc::gh6085::run_test());\r\n#endif // _HAS_CXX20\r\n\r\n    msvc::big_variant::run_test();\r\n    msvc::derived_variant::run_test();\r\n    msvc::visit::run_test();\r\n    msvc::visit_R::run_test();\r\n    msvc::visit_pointer_to_member::run_test();\r\n\r\n    msvc::vso468746::run_test();\r\n    msvc::vso508126::run_test();\r\n    msvc::vso492097::run_test();\r\n    msvc::DevCom1031281::run_test();\r\n    msvc::gh2770::run_test();\r\n    msvc::gh6085::run_test();\r\n    msvc::assign_cv::run_test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0092R1_polishing_chrono/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0092R1_polishing_chrono/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//\r\n// Tests the new functions added as part of P0092R1, \"Polishing Chrono\"\r\n//\r\n\r\n#include <__msvc_int128.hpp> // an integer-class type should emulate an arithmetic type, see also GH-1909\r\n#include <cassert>\r\n#include <chrono>\r\n#include <cstdint>\r\n#include <ratio>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntypedef duration<double> double_s;\r\ntypedef duration<double, milli> double_ms;\r\ntypedef duration<float> float_s;\r\ntypedef duration<float, milli> float_ms;\r\n\r\nnamespace ties_to_even_towards_zero_positive {\r\n    constexpr milliseconds d1(2500);\r\n    STATIC_ASSERT(floor<seconds>(d1).count() == 2);\r\n    STATIC_ASSERT(ceil<seconds>(d1).count() == 3);\r\n    STATIC_ASSERT(round<seconds>(d1).count() == 2);\r\n    constexpr double_ms d2(2500.0);\r\n    STATIC_ASSERT(floor<double_s>(d2).count() == 2.5);\r\n    STATIC_ASSERT(ceil<double_s>(d2).count() == 2.5);\r\n} // namespace ties_to_even_towards_zero_positive\r\n\r\nnamespace rounds_away_from_zero_positive {\r\n    constexpr milliseconds d1(1729);\r\n    STATIC_ASSERT(floor<seconds>(d1).count() == 1);\r\n    STATIC_ASSERT(ceil<seconds>(d1).count() == 2);\r\n    STATIC_ASSERT(round<seconds>(d1).count() == 2);\r\n    constexpr double_ms d2(1875.0);\r\n    STATIC_ASSERT(floor<double_s>(d2).count() == 1.875);\r\n    STATIC_ASSERT(ceil<double_s>(d2).count() == 1.875);\r\n} // namespace rounds_away_from_zero_positive\r\n\r\nnamespace ties_to_even_away_from_zero_positive {\r\n    constexpr milliseconds d1(1500);\r\n    STATIC_ASSERT(floor<seconds>(d1).count() == 1);\r\n    STATIC_ASSERT(ceil<seconds>(d1).count() == 2);\r\n    STATIC_ASSERT(round<seconds>(d1).count() == 2);\r\n    constexpr double_ms d2(1500.0);\r\n    STATIC_ASSERT(floor<double_s>(d2).count() == 1.5);\r\n    STATIC_ASSERT(ceil<double_s>(d2).count() == 1.5);\r\n} // namespace ties_to_even_away_from_zero_positive\r\n\r\nnamespace rounds_toward_zero_positive {\r\n    constexpr milliseconds d1(1229);\r\n    STATIC_ASSERT(floor<seconds>(d1).count() == 1);\r\n    STATIC_ASSERT(ceil<seconds>(d1).count() == 2);\r\n    STATIC_ASSERT(round<seconds>(d1).count() == 1);\r\n    constexpr double_ms d2(1250.0);\r\n    STATIC_ASSERT(floor<double_s>(d2).count() == 1.250);\r\n    STATIC_ASSERT(ceil<double_s>(d2).count() == 1.250);\r\n} // namespace rounds_toward_zero_positive\r\n\r\nnamespace exact_positive {\r\n    constexpr milliseconds d1(1000);\r\n    STATIC_ASSERT(floor<seconds>(d1).count() == 1);\r\n    STATIC_ASSERT(ceil<seconds>(d1).count() == 1);\r\n    STATIC_ASSERT(round<seconds>(d1).count() == 1);\r\n    constexpr double_ms d2(1000.0);\r\n    STATIC_ASSERT(floor<double_s>(d2).count() == 1.0);\r\n    STATIC_ASSERT(ceil<double_s>(d2).count() == 1.0);\r\n} // namespace exact_positive\r\n\r\nnamespace zero {\r\n    constexpr milliseconds d1(0);\r\n    STATIC_ASSERT(floor<seconds>(d1).count() == 0);\r\n    STATIC_ASSERT(ceil<seconds>(d1).count() == 0);\r\n    STATIC_ASSERT(round<seconds>(d1).count() == 0);\r\n    constexpr double_ms d2(0.0);\r\n    STATIC_ASSERT(floor<double_s>(d2).count() == 0.0);\r\n    STATIC_ASSERT(ceil<double_s>(d2).count() == 0.0);\r\n} // namespace zero\r\n\r\nnamespace exact_negative {\r\n    constexpr milliseconds d1(-1000);\r\n    STATIC_ASSERT(floor<seconds>(d1).count() == -1);\r\n    STATIC_ASSERT(ceil<seconds>(d1).count() == -1);\r\n    STATIC_ASSERT(round<seconds>(d1).count() == -1);\r\n    constexpr double_ms d2(-1000.0);\r\n    STATIC_ASSERT(floor<double_s>(d2).count() == -1.0);\r\n    STATIC_ASSERT(ceil<double_s>(d2).count() == -1.0);\r\n} // namespace exact_negative\r\n\r\nnamespace rounds_toward_zero_negative {\r\n    constexpr milliseconds d1(-1229);\r\n    STATIC_ASSERT(floor<seconds>(d1).count() == -2);\r\n    STATIC_ASSERT(ceil<seconds>(d1).count() == -1);\r\n    STATIC_ASSERT(round<seconds>(d1).count() == -1);\r\n    constexpr double_ms d2(-1250.0);\r\n    STATIC_ASSERT(floor<double_s>(d2).count() == -1.250);\r\n    STATIC_ASSERT(ceil<double_s>(d2).count() == -1.250);\r\n} // namespace rounds_toward_zero_negative\r\n\r\nnamespace ties_to_even_away_from_zero_negative {\r\n    constexpr milliseconds d1(-1500);\r\n    STATIC_ASSERT(floor<seconds>(d1).count() == -2);\r\n    STATIC_ASSERT(ceil<seconds>(d1).count() == -1);\r\n    STATIC_ASSERT(round<seconds>(d1).count() == -2);\r\n    constexpr double_ms d2(-1500.0);\r\n    STATIC_ASSERT(floor<double_s>(d2).count() == -1.5);\r\n    STATIC_ASSERT(ceil<double_s>(d2).count() == -1.5);\r\n} // namespace ties_to_even_away_from_zero_negative\r\n\r\nnamespace rounds_away_from_zero_negative {\r\n    constexpr milliseconds d1(-1729);\r\n    STATIC_ASSERT(floor<seconds>(d1).count() == -2);\r\n    STATIC_ASSERT(ceil<seconds>(d1).count() == -1);\r\n    STATIC_ASSERT(round<seconds>(d1).count() == -2);\r\n    constexpr double_ms d2(-1875.0);\r\n    STATIC_ASSERT(floor<double_s>(d2).count() == -1.875);\r\n    STATIC_ASSERT(ceil<double_s>(d2).count() == -1.875);\r\n} // namespace rounds_away_from_zero_negative\r\n\r\nnamespace ties_to_even_towards_zero_negative {\r\n    constexpr milliseconds d1(-2500);\r\n    STATIC_ASSERT(floor<seconds>(d1).count() == -3);\r\n    STATIC_ASSERT(ceil<seconds>(d1).count() == -2);\r\n    STATIC_ASSERT(round<seconds>(d1).count() == -2);\r\n    constexpr double_ms d2(-2500.0);\r\n    STATIC_ASSERT(floor<double_s>(d2).count() == -2.5);\r\n    STATIC_ASSERT(ceil<double_s>(d2).count() == -2.5);\r\n} // namespace ties_to_even_towards_zero_negative\r\n\r\nnamespace identical_types {\r\n    constexpr milliseconds d1(-2500);\r\n    STATIC_ASSERT(floor<milliseconds>(d1).count() == -2500);\r\n    STATIC_ASSERT(ceil<milliseconds>(d1).count() == -2500);\r\n    STATIC_ASSERT(round<milliseconds>(d1).count() == -2500);\r\n    constexpr double_ms d2(-2500.0);\r\n    STATIC_ASSERT(floor<double_ms>(d2).count() == -2500.0);\r\n    STATIC_ASSERT(ceil<double_ms>(d2).count() == -2500.0);\r\n} // namespace identical_types\r\n\r\nnamespace increasing_precision {\r\n    constexpr seconds d1(2);\r\n    STATIC_ASSERT(floor<milliseconds>(d1).count() == 2000);\r\n    STATIC_ASSERT(ceil<milliseconds>(d1).count() == 2000);\r\n    STATIC_ASSERT(round<milliseconds>(d1).count() == 2000);\r\n    constexpr double_s d2(2.0);\r\n    STATIC_ASSERT(floor<double_ms>(d2).count() == 2000.0);\r\n    STATIC_ASSERT(ceil<double_ms>(d2).count() == 2000.0);\r\n} // namespace increasing_precision\r\n\r\nnamespace floating_point_conversions {\r\n    // double -> integral\r\n    constexpr double_ms d1(1329.0);\r\n    STATIC_ASSERT(floor<seconds>(d1).count() == 1);\r\n    STATIC_ASSERT(ceil<seconds>(d1).count() == 2);\r\n    STATIC_ASSERT(round<seconds>(d1).count() == 1);\r\n    // float -> integral\r\n    constexpr float_ms d2(1329.0f);\r\n    STATIC_ASSERT(floor<seconds>(d2).count() == 1);\r\n    STATIC_ASSERT(ceil<seconds>(d2).count() == 2);\r\n    STATIC_ASSERT(round<seconds>(d2).count() == 1);\r\n} // namespace floating_point_conversions\r\n\r\n// Make sure round() handles cases where taking half the divisor itself\r\n// truncates.\r\nusing odd_divisor = duration<intmax_t, ratio<1, 7>>;\r\nconstexpr odd_divisor operator\"\"_odd(unsigned long long val) {\r\n    return odd_divisor(val);\r\n}\r\n\r\n// 10/7 ~= 1.42, which is closer to 1. It should *NOT* tie to even\r\nSTATIC_ASSERT(round<seconds>(10_odd).count() == 1);\r\n\r\n// Test abs\r\nSTATIC_ASSERT(abs(1729ms).count() == 1729);\r\nSTATIC_ASSERT(abs(-1729ms).count() == 1729);\r\nSTATIC_ASSERT(abs(1329.0ms).count() == 1329.0);\r\nSTATIC_ASSERT(abs(-1329.0ms).count() == 1329.0);\r\nSTATIC_ASSERT(abs(1s).count() == 1);\r\nSTATIC_ASSERT(abs(-1s).count() == 1);\r\nSTATIC_ASSERT(abs(0s).count() == 0);\r\n\r\n// Test time_point versions\r\nconstexpr time_point<system_clock, milliseconds> tp1(1729ms);\r\nSTATIC_ASSERT(floor<seconds>(tp1).time_since_epoch().count() == 1);\r\nSTATIC_ASSERT(ceil<seconds>(tp1).time_since_epoch().count() == 2);\r\nSTATIC_ASSERT(round<seconds>(tp1).time_since_epoch().count() == 2);\r\n\r\n// Test LWG-3090 \"What is [time.duration.cons]/4's \"no overflow is induced in the conversion\" intended to mean?\"\r\nconstexpr bool test_lwg_3090() {\r\n    STATIC_ASSERT(is_constructible_v<duration<_Signed128>, seconds>);\r\n    STATIC_ASSERT(is_constructible_v<duration<_Signed128>, const seconds&>);\r\n    STATIC_ASSERT(is_convertible_v<seconds, duration<_Signed128>>);\r\n    STATIC_ASSERT(is_convertible_v<const seconds&, duration<_Signed128>>);\r\n\r\n    STATIC_ASSERT(!is_constructible_v<seconds, duration<_Signed128>>);\r\n    STATIC_ASSERT(!is_constructible_v<seconds, const duration<_Signed128>&>);\r\n    STATIC_ASSERT(!is_convertible_v<duration<_Signed128>, seconds>);\r\n    STATIC_ASSERT(!is_convertible_v<const duration<_Signed128>&, seconds>);\r\n\r\n    STATIC_ASSERT(is_constructible_v<duration<_Signed128>, minutes>);\r\n    STATIC_ASSERT(is_constructible_v<duration<_Signed128>, const minutes&>);\r\n    STATIC_ASSERT(is_convertible_v<minutes, duration<_Signed128>>);\r\n    STATIC_ASSERT(is_convertible_v<const minutes&, duration<_Signed128>>);\r\n\r\n    STATIC_ASSERT(!is_constructible_v<minutes, duration<_Signed128>>);\r\n    STATIC_ASSERT(!is_constructible_v<minutes, const duration<_Signed128>&>);\r\n    STATIC_ASSERT(!is_convertible_v<duration<_Signed128>, minutes>);\r\n    STATIC_ASSERT(!is_convertible_v<const duration<_Signed128>&, minutes>);\r\n\r\n    STATIC_ASSERT(!is_constructible_v<duration<_Signed128>, milliseconds>);\r\n    STATIC_ASSERT(!is_constructible_v<duration<_Signed128>, const milliseconds&>);\r\n    STATIC_ASSERT(!is_convertible_v<milliseconds, duration<_Signed128>>);\r\n    STATIC_ASSERT(!is_convertible_v<const milliseconds&, duration<_Signed128>>);\r\n\r\n    STATIC_ASSERT(!is_constructible_v<milliseconds, duration<_Signed128>>);\r\n    STATIC_ASSERT(!is_constructible_v<milliseconds, const duration<_Signed128>&>);\r\n    STATIC_ASSERT(!is_convertible_v<duration<_Signed128>, milliseconds>);\r\n    STATIC_ASSERT(!is_convertible_v<const duration<_Signed128>&, milliseconds>);\r\n\r\n    STATIC_ASSERT(is_constructible_v<duration<_Unsigned128>, seconds>);\r\n    STATIC_ASSERT(is_constructible_v<duration<_Unsigned128>, const seconds&>);\r\n    STATIC_ASSERT(is_convertible_v<seconds, duration<_Unsigned128>>);\r\n    STATIC_ASSERT(is_convertible_v<const seconds&, duration<_Unsigned128>>);\r\n\r\n    STATIC_ASSERT(!is_constructible_v<seconds, duration<_Unsigned128>>);\r\n    STATIC_ASSERT(!is_constructible_v<seconds, const duration<_Unsigned128>&>);\r\n    STATIC_ASSERT(!is_convertible_v<duration<_Unsigned128>, seconds>);\r\n    STATIC_ASSERT(!is_convertible_v<const duration<_Unsigned128>&, seconds>);\r\n\r\n    STATIC_ASSERT(is_constructible_v<duration<_Unsigned128>, minutes>);\r\n    STATIC_ASSERT(is_constructible_v<duration<_Unsigned128>, const minutes&>);\r\n    STATIC_ASSERT(is_convertible_v<minutes, duration<_Unsigned128>>);\r\n    STATIC_ASSERT(is_convertible_v<const minutes&, duration<_Unsigned128>>);\r\n\r\n    STATIC_ASSERT(!is_constructible_v<minutes, duration<_Unsigned128>>);\r\n    STATIC_ASSERT(!is_constructible_v<minutes, const duration<_Unsigned128>&>);\r\n    STATIC_ASSERT(!is_convertible_v<duration<_Unsigned128>, minutes>);\r\n    STATIC_ASSERT(!is_convertible_v<const duration<_Unsigned128>&, minutes>);\r\n\r\n    STATIC_ASSERT(!is_constructible_v<duration<_Unsigned128>, milliseconds>);\r\n    STATIC_ASSERT(!is_constructible_v<duration<_Unsigned128>, const milliseconds&>);\r\n    STATIC_ASSERT(!is_convertible_v<milliseconds, duration<_Unsigned128>>);\r\n    STATIC_ASSERT(!is_convertible_v<const milliseconds&, duration<_Unsigned128>>);\r\n\r\n    STATIC_ASSERT(!is_constructible_v<milliseconds, duration<_Unsigned128>>);\r\n    STATIC_ASSERT(!is_constructible_v<milliseconds, const duration<_Unsigned128>&>);\r\n    STATIC_ASSERT(!is_convertible_v<duration<_Unsigned128>, milliseconds>);\r\n    STATIC_ASSERT(!is_convertible_v<const duration<_Unsigned128>&, milliseconds>);\r\n\r\n    assert(duration<_Signed128>{seconds{1}}.count() == 1);\r\n    assert(duration<_Signed128>{minutes{12}}.count() == 720);\r\n    assert(duration<_Unsigned128>{seconds{123}}.count() == 123);\r\n    assert(duration<_Unsigned128>{minutes{1234}}.count() == 74040);\r\n\r\n    return true;\r\n}\r\n\r\nint overloaded(milliseconds) {\r\n    return 11;\r\n}\r\n\r\nint overloaded(seconds) {\r\n    return 22;\r\n}\r\n\r\nint overloaded(duration<int, exa>) {\r\n    return 33;\r\n}\r\n\r\nint main() {\r\n    // DevDiv-453376 \"std::chrono::duration_cast lacks double support\"\r\n    duration<double> d(17.29);\r\n\r\n    assert(duration_cast<duration<long long>>(d).count() == 17);\r\n\r\n\r\n    // DevDiv-742944 \"non-conforming return value for std::chrono::duration::operator%()\"\r\n    assert((milliseconds(1050) % seconds(1)).count() == 50);\r\n\r\n    assert((milliseconds(1729) / 10).count() == 172);\r\n    assert(minutes(4) / milliseconds(1729) == 138);\r\n    assert((milliseconds(1729) % 10).count() == 9);\r\n    assert((minutes(4) % milliseconds(1729)).count() == 1398);\r\n\r\n\r\n    // DevDiv-1134356 \"[STL]Test failed with std::chrono::milliseconds\"\r\n    // LWG-2094 \"duration conversion overflow shouldn't participate in overload resolution\"\r\n    assert(overloaded(40ms) == 11);\r\n    assert(overloaded(50s) == 22);\r\n    assert(overloaded(duration<int, exa>(60)) == 33);\r\n\r\n    STATIC_ASSERT(test_lwg_3090());\r\n    test_lwg_3090();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0122R7_span/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0122R7_span/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <iterator>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nstatic_assert(is_same_v<decltype(dynamic_extent), const size_t>);\r\nstatic_assert(dynamic_extent == static_cast<size_t>(-1));\r\n\r\nstatic_assert(is_same_v<decltype(span<int>::extent), const size_t>);\r\nstatic_assert(span<int>::extent == dynamic_extent);\r\n\r\nstatic_assert(is_same_v<decltype(span<int, 3>::extent), const size_t>);\r\nstatic_assert(span<int, 3>::extent == 3);\r\n\r\nstatic_assert(is_same_v<span<int>::element_type, int>);\r\nstatic_assert(is_same_v<span<int>::value_type, int>);\r\nstatic_assert(is_same_v<span<int>::size_type, size_t>);\r\nstatic_assert(is_same_v<span<int>::difference_type, ptrdiff_t>);\r\nstatic_assert(is_same_v<span<int>::pointer, int*>);\r\nstatic_assert(is_same_v<span<int>::const_pointer, const int*>);\r\nstatic_assert(is_same_v<span<int>::reference, int&>);\r\nstatic_assert(is_same_v<span<int>::const_reference, const int&>);\r\n\r\nstatic_assert(is_same_v<span<int, 3>::element_type, int>);\r\nstatic_assert(is_same_v<span<int, 3>::value_type, int>);\r\nstatic_assert(is_same_v<span<int, 3>::size_type, size_t>);\r\nstatic_assert(is_same_v<span<int, 3>::difference_type, ptrdiff_t>);\r\nstatic_assert(is_same_v<span<int, 3>::pointer, int*>);\r\nstatic_assert(is_same_v<span<int, 3>::const_pointer, const int*>);\r\nstatic_assert(is_same_v<span<int, 3>::reference, int&>);\r\nstatic_assert(is_same_v<span<int, 3>::const_reference, const int&>);\r\n\r\nstatic_assert(is_same_v<span<const int>::element_type, const int>);\r\nstatic_assert(is_same_v<span<const int>::value_type, int>);\r\nstatic_assert(is_same_v<span<const int>::size_type, size_t>);\r\nstatic_assert(is_same_v<span<const int>::difference_type, ptrdiff_t>);\r\nstatic_assert(is_same_v<span<const int>::pointer, const int*>);\r\nstatic_assert(is_same_v<span<const int>::const_pointer, const int*>);\r\nstatic_assert(is_same_v<span<const int>::reference, const int&>);\r\nstatic_assert(is_same_v<span<const int>::const_reference, const int&>);\r\n\r\nstatic_assert(is_same_v<span<const int, 3>::element_type, const int>);\r\nstatic_assert(is_same_v<span<const int, 3>::value_type, int>);\r\nstatic_assert(is_same_v<span<const int, 3>::size_type, size_t>);\r\nstatic_assert(is_same_v<span<const int, 3>::difference_type, ptrdiff_t>);\r\nstatic_assert(is_same_v<span<const int, 3>::pointer, const int*>);\r\nstatic_assert(is_same_v<span<const int, 3>::const_pointer, const int*>);\r\nstatic_assert(is_same_v<span<const int, 3>::reference, const int&>);\r\nstatic_assert(is_same_v<span<const int, 3>::const_reference, const int&>);\r\n\r\n// The iterators are thoroughly tested by P0896R4_ranges_range_machinery\r\nstatic_assert(is_same_v<iterator_traits<span<int>::iterator>::pointer, int*>);\r\nstatic_assert(is_same_v<span<int>::reverse_iterator, reverse_iterator<span<int>::iterator>>);\r\n\r\nstatic_assert(is_same_v<iterator_traits<span<int, 3>::iterator>::pointer, int*>);\r\nstatic_assert(is_same_v<span<int, 3>::reverse_iterator, reverse_iterator<span<int, 3>::iterator>>);\r\n\r\nstatic_assert(is_same_v<iterator_traits<span<const int>::iterator>::pointer, const int*>);\r\nstatic_assert(is_same_v<span<const int>::reverse_iterator, reverse_iterator<span<const int>::iterator>>);\r\n\r\nstatic_assert(is_same_v<iterator_traits<span<const int, 3>::iterator>::pointer, const int*>);\r\nstatic_assert(is_same_v<span<const int, 3>::reverse_iterator, reverse_iterator<span<const int, 3>::iterator>>);\r\n\r\nstatic_assert(ranges::enable_borrowed_range<span<int>>);\r\nstatic_assert(ranges::enable_borrowed_range<span<int, 3>>);\r\n\r\n// N4901 [span.overview]/3\r\nstatic_assert(is_trivially_copyable_v<span<int>>);\r\nstatic_assert(is_trivially_copyable_v<span<int, 3>>);\r\nstatic_assert(is_trivially_copyable_v<span<const int>>);\r\nstatic_assert(is_trivially_copyable_v<span<const int, 3>>);\r\n\r\n// Our implementation provides additional guarantees beyond the Standard\r\n// that span and its iterators are standard-layout, and that the iterators are trivially copyable.\r\nstatic_assert(is_standard_layout_v<span<int>>);\r\nstatic_assert(is_standard_layout_v<span<int>::iterator>);\r\nstatic_assert(is_standard_layout_v<span<int, 3>>);\r\nstatic_assert(is_standard_layout_v<span<int, 3>::iterator>);\r\nstatic_assert(is_standard_layout_v<span<const int>>);\r\nstatic_assert(is_standard_layout_v<span<const int>::iterator>);\r\nstatic_assert(is_standard_layout_v<span<const int, 3>>);\r\nstatic_assert(is_standard_layout_v<span<const int, 3>::iterator>);\r\nstatic_assert(is_trivially_copyable_v<span<int>::iterator>);\r\nstatic_assert(is_trivially_copyable_v<span<int, 3>::iterator>);\r\nstatic_assert(is_trivially_copyable_v<span<const int>::iterator>);\r\nstatic_assert(is_trivially_copyable_v<span<const int, 3>::iterator>);\r\n\r\n// For performance, our implementation provides an additional guarantee beyond the Standard\r\n// that fixed-size span has only the size of a pointer.\r\nstatic_assert(sizeof(span<int, 4>) == sizeof(void*));\r\nstatic_assert(sizeof(span<int>) == sizeof(void*) + sizeof(size_t));\r\n\r\nstruct Base {};\r\nstruct Derived : Base {};\r\nstatic_assert(is_convertible_v<Derived*, Base*>);\r\nstatic_assert(!is_convertible_v<Derived (*)[], Base (*)[]>);\r\n\r\nstruct NonRange {};\r\n\r\ntemplate <typename T, bool Borrowed = false>\r\nstruct BasicRange {\r\n    T elements[3]{};\r\n\r\n    constexpr size_t size() const {\r\n        return 3;\r\n    }\r\n\r\n    constexpr T* data() {\r\n        return elements;\r\n    }\r\n\r\n    constexpr const T* data() const {\r\n        return elements;\r\n    }\r\n\r\n    constexpr T* begin() {\r\n        return elements;\r\n    }\r\n\r\n    constexpr const T* begin() const {\r\n        return elements;\r\n    }\r\n\r\n    constexpr T* end() {\r\n        return elements + 3;\r\n    }\r\n\r\n    constexpr const T* end() const {\r\n        return elements + 3;\r\n    }\r\n};\r\n\r\nnamespace std::ranges {\r\n    template <typename T, bool Borrowed>\r\n    constexpr bool enable_borrowed_range<BasicRange<T, Borrowed>> = Borrowed;\r\n}\r\n\r\nusing ContiguousSizedRange = BasicRange<int>;\r\n\r\n// Not truly a model of borrowed_range; this is a convenient fiction for testing purposes.\r\nusing BorrowedContiguousSizedRange = BasicRange<int, true>;\r\n\r\ntemplate <typename T, size_t Extent = dynamic_extent>\r\nconstexpr void FunctionTakingSpan(type_identity_t<span<T, Extent>>) {}\r\n\r\ntemplate <typename U>\r\nconstexpr bool AsBytesCompilesFor = requires { as_bytes(declval<U>()); };\r\n\r\ntemplate <typename U>\r\nconstexpr bool AsWritableBytesCompilesFor = requires { as_writable_bytes(declval<U>()); };\r\n\r\nconstexpr bool test() {\r\n    {\r\n        static_assert(is_nothrow_default_constructible_v<span<int>>);\r\n        static_assert(is_nothrow_default_constructible_v<span<int, 0>>);\r\n        static_assert(!is_default_constructible_v<span<int, 3>>);\r\n\r\n        span<int> sp_dyn;\r\n        assert(sp_dyn.data() == nullptr);\r\n        assert(sp_dyn.size() == 0);\r\n        assert(sp_dyn.empty());\r\n\r\n        span<int, 0> sp_zero;\r\n        assert(sp_zero.data() == nullptr);\r\n        assert(sp_zero.size() == 0);\r\n        assert(sp_zero.empty());\r\n\r\n        FunctionTakingSpan<int>({});\r\n        FunctionTakingSpan<int, 0>({});\r\n    }\r\n\r\n    int arr[3]{10, 20, 30};\r\n    array<int, 3> stl{{100, 200, 300}};\r\n    array<int*, 3> stl_nullptr{{nullptr, nullptr, nullptr}};\r\n\r\n    {\r\n        static_assert(is_nothrow_constructible_v<span<int>, int*, size_t>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<span<int>, int*, uint16_t>); // strengthened\r\n        static_assert(!is_constructible_v<span<int>, const int*, size_t>);\r\n        static_assert(!is_constructible_v<span<int>, double*, size_t>);\r\n        static_assert(!is_constructible_v<span<int>, size_t, size_t>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<int, 3>, int*, size_t>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<span<int, 3>, int*, uint16_t>); // strengthened\r\n        static_assert(!is_constructible_v<span<int, 3>, const int*, size_t>);\r\n        static_assert(!is_constructible_v<span<int, 3>, double*, size_t>);\r\n        static_assert(!is_constructible_v<span<int, 3>, size_t, size_t>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<const int>, int*, size_t>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<span<const int>, const int*, size_t>); // strengthened\r\n\r\n        span<int> sp_dyn_a(arr, 3);\r\n        span<int> sp_dyn_b(begin(arr), 3);\r\n        assert(sp_dyn_a.data() == begin(arr));\r\n        assert(sp_dyn_b.data() == begin(arr));\r\n        assert(sp_dyn_a.size() == 3);\r\n        assert(sp_dyn_b.size() == 3);\r\n\r\n        span<int, 3> sp_three_a(arr, 3);\r\n        span<int, 3> sp_three_b(begin(arr), 3);\r\n        assert(sp_three_a.data() == begin(arr));\r\n        assert(sp_three_b.data() == begin(arr));\r\n        assert(sp_three_a.size() == 3);\r\n        assert(sp_three_b.size() == 3);\r\n\r\n        span<const int> sp_const_a(arr, 3);\r\n        span<const int> sp_const_b(begin(arr), 3);\r\n        assert(sp_const_a.data() == begin(arr));\r\n        assert(sp_const_b.data() == begin(arr));\r\n        assert(sp_const_a.size() == 3);\r\n        assert(sp_const_b.size() == 3);\r\n\r\n        span<const int> sp_const_c(as_const(arr), 3);\r\n        span<const int> sp_const_d(cbegin(arr), 3);\r\n        assert(sp_const_c.data() == begin(arr));\r\n        assert(sp_const_d.data() == begin(arr));\r\n        assert(sp_const_c.size() == 3);\r\n        assert(sp_const_d.size() == 3);\r\n\r\n        FunctionTakingSpan<int>({arr, 3});\r\n        FunctionTakingSpan<int>({begin(arr), 3});\r\n        FunctionTakingSpan<const int>({arr, 3});\r\n        FunctionTakingSpan<const int>({begin(arr), 3});\r\n        FunctionTakingSpan<const int>({as_const(arr), 3});\r\n        FunctionTakingSpan<const int>({cbegin(arr), 3});\r\n\r\n        static_assert(is_same_v<decltype(span{arr, 3}), span<int>>);\r\n        static_assert(is_same_v<decltype(span{begin(arr), 3}), span<int>>);\r\n\r\n        static_assert(is_same_v<decltype(span{as_const(arr), 3}), span<const int>>);\r\n        static_assert(is_same_v<decltype(span{cbegin(arr), 3}), span<const int>>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<int>, array<int, 3>::iterator, size_t>); // strengthened\r\n        static_assert(!is_constructible_v<span<int>, array<int, 3>::const_iterator, size_t>);\r\n        static_assert(!is_constructible_v<span<int>, array<double, 3>::iterator, size_t>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<int, 3>, array<int, 3>::iterator, size_t>); // strengthened\r\n        static_assert(!is_constructible_v<span<int, 3>, array<int, 3>::const_iterator, size_t>);\r\n        static_assert(!is_constructible_v<span<int, 3>, array<double, 3>::iterator, size_t>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<const int>, array<int, 3>::iterator, size_t>); // strengthened\r\n        static_assert(\r\n            is_nothrow_constructible_v<span<const int>, array<int, 3>::const_iterator, size_t>); // strengthened\r\n\r\n        static_assert(is_nothrow_constructible_v<span<Base>, Base*, size_t>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<span<Base, 3>, Base*, size_t>); // strengthened\r\n        static_assert(!is_constructible_v<span<Base>, Derived*, size_t>);\r\n        static_assert(!is_constructible_v<span<Base, 3>, Derived*, size_t>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<Base>, array<Base, 3>::iterator, size_t>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<span<Base, 3>, array<Base, 3>::iterator, size_t>); // strengthened\r\n        static_assert(!is_constructible_v<span<Base>, array<Derived, 3>::iterator, size_t>);\r\n        static_assert(!is_constructible_v<span<Base, 3>, array<Derived, 3>::iterator, size_t>);\r\n\r\n        span<int> sp_dyn_x(stl.begin(), 3);\r\n        assert(sp_dyn_x.data() == stl.data());\r\n        assert(sp_dyn_x.size() == 3);\r\n\r\n        span<int, 3> sp_three_x(stl.begin(), 3);\r\n        assert(sp_three_x.data() == stl.data());\r\n        assert(sp_three_x.size() == 3);\r\n\r\n        span<const int> sp_const_x(stl.begin(), 3);\r\n        assert(sp_const_x.data() == stl.data());\r\n        assert(sp_const_x.size() == 3);\r\n\r\n        span<const int> sp_const_y(stl.cbegin(), 3);\r\n        assert(sp_const_y.data() == stl.data());\r\n        assert(sp_const_y.size() == 3);\r\n\r\n        FunctionTakingSpan<int>({stl.begin(), 3});\r\n        FunctionTakingSpan<const int>({stl.begin(), 3});\r\n        FunctionTakingSpan<const int>({stl.cbegin(), 3});\r\n\r\n        static_assert(is_same_v<decltype(span{stl.begin(), 3}), span<int>>);\r\n        static_assert(is_same_v<decltype(span{stl.cbegin(), 3}), span<const int>>);\r\n    }\r\n\r\n    {\r\n        static_assert(is_nothrow_constructible_v<span<int>, int*, int*>); // strengthened\r\n        static_assert(!is_constructible_v<span<int>, int*, double*>);\r\n        static_assert(!is_constructible_v<span<int>, const int*, int*>);\r\n        static_assert(!is_constructible_v<span<int>, const int*, const int*>);\r\n        static_assert(!is_constructible_v<span<int>, const int*, double*>);\r\n        static_assert(!is_constructible_v<span<int>, double*, int*>);\r\n        static_assert(!is_constructible_v<span<int>, double*, const int*>);\r\n        static_assert(!is_constructible_v<span<int>, double*, double*>);\r\n        static_assert(!is_constructible_v<span<int>, size_t, int*>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<int, 3>, int*, int*>); // strengthened\r\n        static_assert(!is_constructible_v<span<int, 3>, int*, double*>);\r\n        static_assert(!is_constructible_v<span<int, 3>, const int*, int*>);\r\n        static_assert(!is_constructible_v<span<int, 3>, const int*, const int*>);\r\n        static_assert(!is_constructible_v<span<int, 3>, const int*, double*>);\r\n        static_assert(!is_constructible_v<span<int, 3>, double*, int*>);\r\n        static_assert(!is_constructible_v<span<int, 3>, double*, const int*>);\r\n        static_assert(!is_constructible_v<span<int, 3>, double*, double*>);\r\n        static_assert(!is_constructible_v<span<int, 3>, size_t, int*>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<const int>, int*, int*>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<span<const int>, int*, const int*>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<span<const int>, const int*, int*>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<span<const int>, const int*, const int*>); // strengthened\r\n\r\n        span<int> sp_dyn_a(begin(arr), end(arr));\r\n        assert(sp_dyn_a.data() == begin(arr));\r\n        assert(sp_dyn_a.size() == 3);\r\n\r\n        span<int, 3> sp_three_a(begin(arr), end(arr));\r\n        assert(sp_three_a.data() == begin(arr));\r\n        assert(sp_three_a.size() == 3);\r\n\r\n        span<const int> sp_const_a(begin(arr), end(arr));\r\n        span<const int> sp_const_b(begin(arr), cend(arr));\r\n        span<const int> sp_const_c(cbegin(arr), end(arr));\r\n        span<const int> sp_const_d(cbegin(arr), cend(arr));\r\n        assert(sp_const_a.data() == begin(arr));\r\n        assert(sp_const_b.data() == begin(arr));\r\n        assert(sp_const_c.data() == begin(arr));\r\n        assert(sp_const_d.data() == begin(arr));\r\n        assert(sp_const_a.size() == 3);\r\n        assert(sp_const_b.size() == 3);\r\n        assert(sp_const_c.size() == 3);\r\n        assert(sp_const_d.size() == 3);\r\n\r\n        FunctionTakingSpan<int>({begin(arr), end(arr)});\r\n        FunctionTakingSpan<const int>({begin(arr), end(arr)});\r\n        FunctionTakingSpan<const int>({begin(arr), cend(arr)});\r\n        FunctionTakingSpan<const int>({cbegin(arr), end(arr)});\r\n        FunctionTakingSpan<const int>({cbegin(arr), cend(arr)});\r\n\r\n        static_assert(is_same_v<decltype(span{begin(arr), end(arr)}), span<int>>);\r\n        static_assert(is_same_v<decltype(span{cbegin(arr), cend(arr)}), span<const int>>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<int>, int*, const int*>); // strengthened\r\n\r\n        static_assert(is_nothrow_constructible_v<span<int, 3>, int*, const int*>); // strengthened\r\n\r\n        // The types int* and unreachable_sentinel_t are a contiguous_iterator and sentinel\r\n        // that model sentinel_for but not sized_sentinel_for.\r\n        static_assert(!is_constructible_v<span<int>, int*, unreachable_sentinel_t>);\r\n        static_assert(!is_constructible_v<span<int, 3>, int*, unreachable_sentinel_t>);\r\n\r\n        span<int> sp_dyn_b(begin(arr), cend(arr));\r\n        assert(sp_dyn_b.data() == begin(arr));\r\n        assert(sp_dyn_b.size() == 3);\r\n\r\n        span<int, 3> sp_three_b(begin(arr), cend(arr));\r\n        assert(sp_three_b.data() == begin(arr));\r\n        assert(sp_three_b.size() == 3);\r\n\r\n        FunctionTakingSpan<int>({begin(arr), cend(arr)});\r\n\r\n        static_assert(is_same_v<decltype(span{begin(arr), cend(arr)}), span<int>>);\r\n        static_assert(is_same_v<decltype(span{cbegin(arr), end(arr)}), span<const int>>);\r\n\r\n        using I = array<int, 3>::iterator;\r\n        using C = array<int, 3>::const_iterator;\r\n        using Z = array<double, 3>::iterator;\r\n\r\n        static_assert(is_nothrow_constructible_v<span<int>, I, I>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<span<int>, I, C>); // strengthened\r\n        static_assert(!is_constructible_v<span<int>, I, Z>);\r\n        static_assert(!is_constructible_v<span<int>, C, I>);\r\n        static_assert(!is_constructible_v<span<int>, C, C>);\r\n        static_assert(!is_constructible_v<span<int>, C, Z>);\r\n        static_assert(!is_constructible_v<span<int>, Z, I>);\r\n        static_assert(!is_constructible_v<span<int>, Z, C>);\r\n        static_assert(!is_constructible_v<span<int>, Z, Z>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<int, 3>, I, I>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<span<int, 3>, I, C>); // strengthened\r\n        static_assert(!is_constructible_v<span<int, 3>, I, Z>);\r\n        static_assert(!is_constructible_v<span<int, 3>, C, I>);\r\n        static_assert(!is_constructible_v<span<int, 3>, C, C>);\r\n        static_assert(!is_constructible_v<span<int, 3>, C, Z>);\r\n        static_assert(!is_constructible_v<span<int, 3>, Z, I>);\r\n        static_assert(!is_constructible_v<span<int, 3>, Z, C>);\r\n        static_assert(!is_constructible_v<span<int, 3>, Z, Z>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<const int>, I, I>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<span<const int>, I, C>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<span<const int>, C, I>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<span<const int>, C, C>); // strengthened\r\n\r\n        static_assert(!is_constructible_v<span<int>, I, int*>);\r\n        static_assert(!is_constructible_v<span<int>, int*, I>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<Base>, Base*, Base*>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<span<Base, 3>, Base*, Base*>); // strengthened\r\n        static_assert(!is_constructible_v<span<Base>, Derived*, Derived*>);\r\n        static_assert(!is_constructible_v<span<Base, 3>, Derived*, Derived*>);\r\n\r\n        using B = array<Base, 3>::iterator;\r\n        using D = array<Derived, 3>::iterator;\r\n        static_assert(is_nothrow_constructible_v<span<Base>, B, B>); // strengthened\r\n        static_assert(is_nothrow_constructible_v<span<Base, 3>, B, B>); // strengthened\r\n        static_assert(!is_constructible_v<span<Base>, D, D>);\r\n        static_assert(!is_constructible_v<span<Base, 3>, D, D>);\r\n\r\n        span<int> sp_dyn_w(stl.begin(), stl.end());\r\n        span<int> sp_dyn_x(stl.begin(), stl.cend());\r\n        assert(sp_dyn_w.data() == stl.data());\r\n        assert(sp_dyn_x.data() == stl.data());\r\n        assert(sp_dyn_w.size() == 3);\r\n        assert(sp_dyn_x.size() == 3);\r\n\r\n        span<int, 3> sp_three_w(stl.begin(), stl.end());\r\n        span<int, 3> sp_three_x(stl.begin(), stl.cend());\r\n        assert(sp_three_w.data() == stl.data());\r\n        assert(sp_three_x.data() == stl.data());\r\n        assert(sp_three_w.size() == 3);\r\n        assert(sp_three_x.size() == 3);\r\n\r\n        span<const int> sp_const_w(stl.begin(), stl.end());\r\n        span<const int> sp_const_x(stl.begin(), stl.cend());\r\n        span<const int> sp_const_y(stl.cbegin(), stl.end());\r\n        span<const int> sp_const_z(stl.cbegin(), stl.cend());\r\n        assert(sp_const_w.data() == stl.data());\r\n        assert(sp_const_x.data() == stl.data());\r\n        assert(sp_const_y.data() == stl.data());\r\n        assert(sp_const_z.data() == stl.data());\r\n        assert(sp_const_w.size() == 3);\r\n        assert(sp_const_x.size() == 3);\r\n        assert(sp_const_y.size() == 3);\r\n        assert(sp_const_z.size() == 3);\r\n\r\n        FunctionTakingSpan<int>({stl.begin(), stl.end()});\r\n        FunctionTakingSpan<int>({stl.begin(), stl.cend()});\r\n        FunctionTakingSpan<const int>({stl.begin(), stl.end()});\r\n        FunctionTakingSpan<const int>({stl.begin(), stl.cend()});\r\n        FunctionTakingSpan<const int>({stl.cbegin(), stl.end()});\r\n        FunctionTakingSpan<const int>({stl.cbegin(), stl.cend()});\r\n\r\n        static_assert(is_same_v<decltype(span{stl.begin(), stl.end()}), span<int>>);\r\n        static_assert(is_same_v<decltype(span{stl.begin(), stl.cend()}), span<int>>);\r\n        static_assert(is_same_v<decltype(span{stl.cbegin(), stl.end()}), span<const int>>);\r\n        static_assert(is_same_v<decltype(span{stl.cbegin(), stl.cend()}), span<const int>>);\r\n    }\r\n\r\n    {\r\n        static_assert(is_nothrow_constructible_v<span<int>, int (&)[3]>);\r\n        static_assert(!is_constructible_v<span<int>, const int (&)[3]>);\r\n        static_assert(!is_constructible_v<span<int>, double (&)[3]>);\r\n        static_assert(is_nothrow_constructible_v<span<int>, array<int, 3>&>);\r\n        static_assert(!is_constructible_v<span<int>, const array<int, 3>&>);\r\n        static_assert(!is_constructible_v<span<int>, array<double, 3>&>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<int, 3>, int (&)[3]>);\r\n        static_assert(!is_constructible_v<span<int, 3>, const int (&)[3]>);\r\n        static_assert(!is_constructible_v<span<int, 3>, double (&)[3]>);\r\n        static_assert(is_nothrow_constructible_v<span<int, 3>, array<int, 3>&>);\r\n        static_assert(!is_constructible_v<span<int, 3>, const array<int, 3>&>);\r\n        static_assert(!is_constructible_v<span<int, 3>, array<double, 3>&>);\r\n        static_assert(!is_constructible_v<span<int, 3>, int (&)[500]>);\r\n        static_assert(!is_constructible_v<span<int, 3>, array<int, 500>&>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<const int>, int (&)[3]>);\r\n        static_assert(is_nothrow_constructible_v<span<const int>, const int (&)[3]>);\r\n        static_assert(!is_constructible_v<span<const int>, double (&)[3]>);\r\n        static_assert(is_nothrow_constructible_v<span<const int>, array<int, 3>&>);\r\n        static_assert(is_nothrow_constructible_v<span<const int>, const array<int, 3>&>);\r\n        static_assert(!is_constructible_v<span<const int>, array<double, 3>&>);\r\n\r\n        static_assert(is_nothrow_convertible_v<int (&)[3], span<int>>);\r\n        static_assert(is_nothrow_convertible_v<array<int, 3>&, span<int>>);\r\n        static_assert(is_nothrow_convertible_v<int (&)[3], span<int, 3>>);\r\n        static_assert(is_nothrow_convertible_v<array<int, 3>&, span<int, 3>>);\r\n        static_assert(is_nothrow_convertible_v<int (&)[3], span<const int>>);\r\n        static_assert(is_nothrow_convertible_v<const int (&)[3], span<const int>>);\r\n        static_assert(is_nothrow_convertible_v<array<int, 3>&, span<const int>>);\r\n        static_assert(is_nothrow_convertible_v<const array<int, 3>&, span<const int>>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<Base>, Base(&)[3]>);\r\n        static_assert(is_nothrow_constructible_v<span<Base>, array<Base, 3>&>);\r\n        static_assert(is_nothrow_constructible_v<span<Base, 3>, Base(&)[3]>);\r\n        static_assert(is_nothrow_constructible_v<span<Base, 3>, array<Base, 3>&>);\r\n        static_assert(is_nothrow_constructible_v<span<const Base>, Base(&)[3]>);\r\n        static_assert(is_nothrow_constructible_v<span<const Base>, const Base(&)[3]>);\r\n        static_assert(is_nothrow_constructible_v<span<const Base>, array<Base, 3>&>);\r\n        static_assert(is_nothrow_constructible_v<span<const Base>, const array<Base, 3>&>);\r\n        static_assert(!is_constructible_v<span<Base>, Derived(&)[3]>);\r\n        static_assert(!is_constructible_v<span<Base>, array<Derived, 3>&>);\r\n        static_assert(!is_constructible_v<span<Base, 3>, Derived(&)[3]>);\r\n        static_assert(!is_constructible_v<span<Base, 3>, array<Derived, 3>&>);\r\n        static_assert(!is_constructible_v<span<const Base>, Derived(&)[3]>);\r\n        static_assert(!is_constructible_v<span<const Base>, const Derived(&)[3]>);\r\n        static_assert(!is_constructible_v<span<const Base>, array<Derived, 3>&>);\r\n        static_assert(!is_constructible_v<span<const Base>, const array<Derived, 3>&>);\r\n\r\n        span<int> sp_dyn_a(arr);\r\n        span<int> sp_dyn_b(stl);\r\n        assert(sp_dyn_a.data() == begin(arr));\r\n        assert(sp_dyn_b.data() == stl.data());\r\n        assert(sp_dyn_a.size() == 3);\r\n        assert(sp_dyn_b.size() == 3);\r\n\r\n        span<int, 3> sp_three_a(arr);\r\n        span<int, 3> sp_three_b(stl);\r\n        assert(sp_three_a.data() == begin(arr));\r\n        assert(sp_three_b.data() == stl.data());\r\n        assert(sp_three_a.size() == 3);\r\n        assert(sp_three_b.size() == 3);\r\n\r\n        span<const int> sp_const_w(arr);\r\n        span<const int> sp_const_x(as_const(arr));\r\n        span<const int> sp_const_y(stl);\r\n        span<const int> sp_const_z(as_const(stl));\r\n        span<const int* const> sp_const_nullptr_1{stl_nullptr};\r\n        span<const int* const> sp_const_nullptr_2{as_const(stl_nullptr)};\r\n        assert(sp_const_w.data() == begin(arr));\r\n        assert(sp_const_x.data() == begin(arr));\r\n        assert(sp_const_y.data() == stl.data());\r\n        assert(sp_const_z.data() == stl.data());\r\n        assert(sp_const_nullptr_1.data() == stl_nullptr.data());\r\n        assert(sp_const_nullptr_2.data() == stl_nullptr.data());\r\n        assert(sp_const_w.size() == 3);\r\n        assert(sp_const_x.size() == 3);\r\n        assert(sp_const_y.size() == 3);\r\n        assert(sp_const_z.size() == 3);\r\n        assert(sp_const_nullptr_1.size() == 3);\r\n        assert(sp_const_nullptr_2.size() == 3);\r\n\r\n        FunctionTakingSpan<int>(arr);\r\n        FunctionTakingSpan<int>(stl);\r\n        FunctionTakingSpan<int*>(stl_nullptr);\r\n        FunctionTakingSpan<int, 3>(arr);\r\n        FunctionTakingSpan<int, 3>(stl);\r\n        FunctionTakingSpan<int*, 3>(stl_nullptr);\r\n        FunctionTakingSpan<const int>(arr);\r\n        FunctionTakingSpan<const int>(as_const(arr));\r\n        FunctionTakingSpan<const int>(stl);\r\n        FunctionTakingSpan<const int>(as_const(stl));\r\n        FunctionTakingSpan<const int* const>(stl_nullptr);\r\n        FunctionTakingSpan<const int* const>(as_const(stl_nullptr));\r\n\r\n        static_assert(is_same_v<decltype(span{arr}), span<int, 3>>);\r\n        static_assert(is_same_v<decltype(span{as_const(arr)}), span<const int, 3>>);\r\n        static_assert(is_same_v<decltype(span{stl}), span<int, 3>>);\r\n        static_assert(is_same_v<decltype(span{as_const(stl)}), span<const int, 3>>);\r\n        static_assert(is_same_v<decltype(span{stl_nullptr}), span<int*, 3>>);\r\n        static_assert(is_same_v<decltype(span{as_const(stl_nullptr)}), span<int* const, 3>>);\r\n    }\r\n\r\n    {\r\n        static_assert(is_constructible_v<span<int>, ContiguousSizedRange&>);\r\n        static_assert(is_constructible_v<span<int, 3>, ContiguousSizedRange&>);\r\n\r\n        static_assert(!is_constructible_v<span<int>, NonRange&>);\r\n        static_assert(!is_constructible_v<span<int, 3>, NonRange&>);\r\n\r\n        static_assert(!is_constructible_v<span<int>, const ContiguousSizedRange&>);\r\n        static_assert(!is_constructible_v<span<int, 3>, const ContiguousSizedRange&>);\r\n        static_assert(is_constructible_v<span<const int>, ContiguousSizedRange&>);\r\n        static_assert(is_constructible_v<span<const int, 3>, ContiguousSizedRange&>);\r\n        static_assert(is_constructible_v<span<const int>, const ContiguousSizedRange&>);\r\n        static_assert(is_constructible_v<span<const int, 3>, const ContiguousSizedRange&>);\r\n        static_assert(!is_constructible_v<span<double>, ContiguousSizedRange&>);\r\n        static_assert(!is_constructible_v<span<double, 3>, ContiguousSizedRange&>);\r\n\r\n        static_assert(is_convertible_v<ContiguousSizedRange&, span<int>>);\r\n        static_assert(!is_convertible_v<ContiguousSizedRange&, span<int, 3>>);\r\n        static_assert(is_convertible_v<ContiguousSizedRange&, span<const int>>);\r\n        static_assert(!is_convertible_v<ContiguousSizedRange&, span<const int, 3>>);\r\n        static_assert(is_convertible_v<const ContiguousSizedRange&, span<const int>>);\r\n        static_assert(!is_convertible_v<const ContiguousSizedRange&, span<const int, 3>>);\r\n\r\n        static_assert(is_constructible_v<span<Base>, BasicRange<Base>&>);\r\n        static_assert(is_constructible_v<span<Base, 3>, BasicRange<Base>&>);\r\n        static_assert(!is_constructible_v<span<Base>, BasicRange<Derived>&>);\r\n        static_assert(!is_constructible_v<span<Base, 3>, BasicRange<Derived>&>);\r\n\r\n        ContiguousSizedRange user_range;\r\n\r\n        span<int> sp_1(user_range);\r\n        span<const int> sp_2(user_range);\r\n        span<const int> sp_3(as_const(user_range));\r\n\r\n        span<int, 3> sp_4(user_range);\r\n        span<const int, 3> sp_5(user_range);\r\n        span<const int, 3> sp_6(as_const(user_range));\r\n\r\n        assert(sp_1.data() == user_range.data());\r\n        assert(sp_2.data() == user_range.data());\r\n        assert(sp_3.data() == user_range.data());\r\n        assert(sp_4.data() == user_range.data());\r\n        assert(sp_5.data() == user_range.data());\r\n        assert(sp_6.data() == user_range.data());\r\n\r\n        assert(sp_1.size() == 3);\r\n        assert(sp_2.size() == 3);\r\n        assert(sp_3.size() == 3);\r\n        assert(sp_4.size() == 3);\r\n        assert(sp_5.size() == 3);\r\n        assert(sp_6.size() == 3);\r\n\r\n        FunctionTakingSpan<int>(user_range);\r\n        FunctionTakingSpan<const int>(user_range);\r\n        FunctionTakingSpan<const int>(as_const(user_range));\r\n\r\n        static_assert(!is_constructible_v<span<int>, ContiguousSizedRange>);\r\n        static_assert(!is_constructible_v<span<int, 3>, ContiguousSizedRange>);\r\n        static_assert(is_constructible_v<span<int>, BorrowedContiguousSizedRange>);\r\n        static_assert(is_constructible_v<span<int, 3>, BorrowedContiguousSizedRange>);\r\n        static_assert(is_constructible_v<span<const int>, ContiguousSizedRange>);\r\n        static_assert(is_constructible_v<span<const int, 3>, ContiguousSizedRange>);\r\n\r\n        static_assert(is_convertible_v<BorrowedContiguousSizedRange, span<int>>);\r\n        static_assert(!is_convertible_v<BorrowedContiguousSizedRange, span<int, 3>>);\r\n        static_assert(is_convertible_v<ContiguousSizedRange, span<const int>>);\r\n        static_assert(!is_convertible_v<ContiguousSizedRange, span<const int, 3>>);\r\n\r\n        BorrowedContiguousSizedRange borrowed_user_range;\r\n\r\n        span<int> sp_7(move(borrowed_user_range));\r\n        span<int, 3> sp_8(move(borrowed_user_range));\r\n        span<const int> sp_9(move(user_range));\r\n        span<const int, 3> sp_10(move(user_range));\r\n\r\n        assert(sp_7.data() == borrowed_user_range.data());\r\n        assert(sp_8.data() == borrowed_user_range.data());\r\n        assert(sp_9.data() == user_range.data());\r\n        assert(sp_10.data() == user_range.data());\r\n\r\n        assert(sp_7.size() == 3);\r\n        assert(sp_8.size() == 3);\r\n        assert(sp_9.size() == 3);\r\n        assert(sp_10.size() == 3);\r\n\r\n        FunctionTakingSpan<int>(move(borrowed_user_range));\r\n        FunctionTakingSpan<const int>(move(user_range));\r\n\r\n        static_assert(is_same_v<decltype(span{user_range}), span<int>>);\r\n        static_assert(is_same_v<decltype(span{as_const(user_range)}), span<const int>>);\r\n    }\r\n\r\n    {\r\n        static_assert(is_nothrow_copy_constructible_v<span<int>>);\r\n        static_assert(is_nothrow_copy_constructible_v<span<int, 3>>);\r\n        static_assert(is_nothrow_copy_constructible_v<span<const int>>);\r\n        static_assert(is_nothrow_copy_constructible_v<span<const int, 3>>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<int>, const span<int>&>);\r\n        static_assert(is_nothrow_constructible_v<span<int>, const span<int, 3>&>);\r\n        static_assert(is_nothrow_constructible_v<span<int>, const span<int, 500>&>);\r\n        static_assert(!is_constructible_v<span<int>, const span<const int>&>);\r\n        static_assert(!is_constructible_v<span<int>, const span<const int, 3>&>);\r\n        static_assert(!is_constructible_v<span<int>, const span<const int, 500>&>);\r\n        static_assert(!is_constructible_v<span<int>, const span<double, 3>&>);\r\n\r\n        static_assert(is_constructible_v<span<int, 3>, const span<int>&>);\r\n        static_assert(is_nothrow_constructible_v<span<int, 3>, const span<int, 3>&>);\r\n        static_assert(!is_constructible_v<span<int, 3>, const span<int, 500>&>);\r\n        static_assert(!is_constructible_v<span<int, 3>, const span<const int>&>);\r\n        static_assert(!is_constructible_v<span<int, 3>, const span<const int, 3>&>);\r\n        static_assert(!is_constructible_v<span<int, 3>, const span<const int, 500>&>);\r\n        static_assert(!is_constructible_v<span<int, 3>, const span<double, 3>&>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<const int>, const span<int>&>);\r\n        static_assert(is_nothrow_constructible_v<span<const int>, const span<int, 3>&>);\r\n        static_assert(is_nothrow_constructible_v<span<const int>, const span<int, 500>&>);\r\n        static_assert(is_nothrow_constructible_v<span<const int>, const span<const int>&>);\r\n        static_assert(is_nothrow_constructible_v<span<const int>, const span<const int, 3>&>);\r\n        static_assert(is_nothrow_constructible_v<span<const int>, const span<const int, 500>&>);\r\n        static_assert(!is_constructible_v<span<const int>, const span<double, 3>&>);\r\n\r\n        static_assert(is_constructible_v<span<const int, 3>, const span<int>&>);\r\n        static_assert(is_nothrow_constructible_v<span<const int, 3>, const span<int, 3>&>);\r\n        static_assert(!is_constructible_v<span<const int, 3>, const span<int, 500>&>);\r\n        static_assert(is_constructible_v<span<const int, 3>, const span<const int>&>);\r\n        static_assert(is_nothrow_constructible_v<span<const int, 3>, const span<const int, 3>&>);\r\n        static_assert(!is_constructible_v<span<const int, 3>, const span<const int, 500>&>);\r\n        static_assert(!is_constructible_v<span<const int, 3>, const span<double, 3>&>);\r\n\r\n        static_assert(is_nothrow_convertible_v<const span<int>&, span<int>>);\r\n        static_assert(is_nothrow_convertible_v<const span<int, 3>&, span<int>>);\r\n        static_assert(is_nothrow_convertible_v<const span<int, 500>&, span<int>>);\r\n        static_assert(is_nothrow_convertible_v<const span<int, 3>&, span<int, 3>>);\r\n        static_assert(is_nothrow_convertible_v<const span<int>&, span<const int>>);\r\n        static_assert(is_nothrow_convertible_v<const span<int, 3>&, span<const int>>);\r\n        static_assert(is_nothrow_convertible_v<const span<int, 500>&, span<const int>>);\r\n        static_assert(is_nothrow_convertible_v<const span<const int>&, span<const int>>);\r\n        static_assert(is_nothrow_convertible_v<const span<const int, 3>&, span<const int>>);\r\n        static_assert(is_nothrow_convertible_v<const span<const int, 500>&, span<const int>>);\r\n        static_assert(is_nothrow_convertible_v<const span<int, 3>&, span<const int, 3>>);\r\n        static_assert(is_nothrow_convertible_v<const span<const int, 3>&, span<const int, 3>>);\r\n\r\n        static_assert(is_nothrow_constructible_v<span<Base>, const span<Base>&>);\r\n        static_assert(is_nothrow_constructible_v<span<Base>, const span<Base, 3>&>);\r\n        static_assert(is_nothrow_constructible_v<span<Base, 3>, const span<Base, 3>&>);\r\n        static_assert(is_nothrow_constructible_v<span<const Base>, const span<Base>&>);\r\n        static_assert(is_nothrow_constructible_v<span<const Base>, const span<Base, 3>&>);\r\n        static_assert(is_nothrow_constructible_v<span<const Base>, const span<const Base>&>);\r\n        static_assert(is_nothrow_constructible_v<span<const Base>, const span<const Base, 3>&>);\r\n        static_assert(is_nothrow_constructible_v<span<const Base, 3>, const span<Base, 3>&>);\r\n        static_assert(is_nothrow_constructible_v<span<const Base, 3>, const span<const Base, 3>&>);\r\n        static_assert(!is_constructible_v<span<Base>, const span<Derived>&>);\r\n        static_assert(!is_constructible_v<span<Base>, const span<Derived, 3>&>);\r\n        static_assert(!is_constructible_v<span<Base, 3>, const span<Derived, 3>&>);\r\n        static_assert(!is_constructible_v<span<const Base>, const span<Derived>&>);\r\n        static_assert(!is_constructible_v<span<const Base>, const span<Derived, 3>&>);\r\n        static_assert(!is_constructible_v<span<const Base>, const span<const Derived>&>);\r\n        static_assert(!is_constructible_v<span<const Base>, const span<const Derived, 3>&>);\r\n        static_assert(!is_constructible_v<span<const Base, 3>, const span<Derived, 3>&>);\r\n        static_assert(!is_constructible_v<span<const Base, 3>, const span<const Derived, 3>&>);\r\n\r\n        const span<int> orig_dyn(arr);\r\n        const span<int, 3> orig_three(arr);\r\n        const span<const int> orig_const_dyn(arr);\r\n        const span<const int, 3> orig_const_three(arr);\r\n\r\n        span<int> sp_a(orig_dyn);\r\n        span<int> sp_b(orig_three);\r\n\r\n        span<int, 3> sp_c(orig_three);\r\n\r\n        span<const int> sp_d(orig_dyn);\r\n        span<const int> sp_e(orig_three);\r\n        span<const int> sp_f(orig_const_dyn);\r\n        span<const int> sp_g(orig_const_three);\r\n\r\n        span<const int, 3> sp_h(orig_three);\r\n        span<const int, 3> sp_i(orig_const_three);\r\n\r\n        assert(sp_a.data() == begin(arr));\r\n        assert(sp_b.data() == begin(arr));\r\n        assert(sp_c.data() == begin(arr));\r\n        assert(sp_d.data() == begin(arr));\r\n        assert(sp_e.data() == begin(arr));\r\n        assert(sp_f.data() == begin(arr));\r\n        assert(sp_g.data() == begin(arr));\r\n        assert(sp_h.data() == begin(arr));\r\n        assert(sp_i.data() == begin(arr));\r\n        assert(sp_a.size() == 3);\r\n        assert(sp_b.size() == 3);\r\n        assert(sp_c.size() == 3);\r\n        assert(sp_d.size() == 3);\r\n        assert(sp_e.size() == 3);\r\n        assert(sp_f.size() == 3);\r\n        assert(sp_g.size() == 3);\r\n        assert(sp_h.size() == 3);\r\n        assert(sp_i.size() == 3);\r\n\r\n        FunctionTakingSpan<int>(orig_dyn);\r\n        FunctionTakingSpan<int>(orig_three);\r\n        FunctionTakingSpan<int, 3>(orig_three);\r\n        FunctionTakingSpan<const int>(orig_dyn);\r\n        FunctionTakingSpan<const int>(orig_three);\r\n        FunctionTakingSpan<const int>(orig_const_dyn);\r\n        FunctionTakingSpan<const int>(orig_const_three);\r\n        FunctionTakingSpan<const int, 3>(orig_three);\r\n        FunctionTakingSpan<const int, 3>(orig_const_three);\r\n\r\n        static_assert(is_same_v<decltype(span{orig_dyn}), span<int>>);\r\n        static_assert(is_same_v<decltype(span{orig_three}), span<int, 3>>);\r\n        static_assert(is_same_v<decltype(span{orig_const_dyn}), span<const int>>);\r\n        static_assert(is_same_v<decltype(span{orig_const_three}), span<const int, 3>>);\r\n    }\r\n\r\n    {\r\n        static_assert(is_nothrow_copy_assignable_v<span<int>>);\r\n        static_assert(is_nothrow_copy_assignable_v<span<int, 3>>);\r\n        static_assert(is_nothrow_copy_assignable_v<span<const int>>);\r\n        static_assert(is_nothrow_copy_assignable_v<span<const int, 3>>);\r\n\r\n        span<int> sp_dyn(arr);\r\n        span<int, 3> sp_three(arr);\r\n        span<const int> sp_const_dyn(arr);\r\n        span<const int, 3> sp_const_three(arr);\r\n\r\n        assert(sp_dyn.data() == begin(arr));\r\n        assert(sp_three.data() == begin(arr));\r\n        assert(sp_const_dyn.data() == begin(arr));\r\n        assert(sp_const_three.data() == begin(arr));\r\n        assert(sp_dyn.size() == 3);\r\n        assert(sp_three.size() == 3);\r\n        assert(sp_const_dyn.size() == 3);\r\n        assert(sp_const_three.size() == 3);\r\n\r\n        int other[4]{12, 34, 56, 78};\r\n\r\n        sp_dyn         = span<int>{other};\r\n        sp_three       = span<int, 3>{stl};\r\n        sp_const_dyn   = span<const int>{other};\r\n        sp_const_three = span<const int, 3>{stl};\r\n\r\n        assert(sp_dyn.data() == begin(other));\r\n        assert(sp_three.data() == stl.data());\r\n        assert(sp_const_dyn.data() == begin(other));\r\n        assert(sp_const_three.data() == stl.data());\r\n        assert(sp_dyn.size() == 4);\r\n        assert(sp_three.size() == 3);\r\n        assert(sp_const_dyn.size() == 4);\r\n        assert(sp_const_three.size() == 3);\r\n    }\r\n\r\n    {\r\n        static_assert(is_nothrow_destructible_v<span<int>>);\r\n        static_assert(is_nothrow_destructible_v<span<int, 3>>);\r\n        static_assert(is_nothrow_destructible_v<span<const int>>);\r\n\r\n        span<int>::iterator it_dyn{};\r\n\r\n        {\r\n            span<int> sp_dyn(arr);\r\n            it_dyn = sp_dyn.begin();\r\n        }\r\n\r\n        assert(*it_dyn == arr[0]);\r\n        assert(it_dyn[2] == arr[2]);\r\n\r\n        span<int, 3>::iterator it_three{};\r\n\r\n        {\r\n            span<int, 3> sp_three(stl);\r\n            it_three = sp_three.begin();\r\n        }\r\n\r\n        assert(*it_three == stl[0]);\r\n        assert(it_three[2] == stl[2]);\r\n    }\r\n\r\n    {\r\n        int sequence[9]{10, 20, 30, 40, 50, 60, 70, 80, 90};\r\n\r\n        const span<int> sp_dyn(sequence);\r\n        const span<int, 9> sp_nine(sequence);\r\n\r\n        auto first_3 = sp_dyn.first<3>();\r\n        auto first_4 = sp_nine.first<4>();\r\n        auto first_5 = sp_dyn.first(5);\r\n        auto first_6 = sp_nine.first(6);\r\n        static_assert(noexcept(sp_dyn.first<3>())); // strengthened\r\n        static_assert(noexcept(sp_nine.first<4>())); // strengthened\r\n        static_assert(noexcept(sp_dyn.first(5))); // strengthened\r\n        static_assert(noexcept(sp_nine.first(6))); // strengthened\r\n        static_assert(is_same_v<decltype(first_3), span<int, 3>>);\r\n        static_assert(is_same_v<decltype(first_4), span<int, 4>>);\r\n        static_assert(is_same_v<decltype(first_5), span<int>>);\r\n        static_assert(is_same_v<decltype(first_6), span<int>>);\r\n        assert(first_3.data() == begin(sequence));\r\n        assert(first_4.data() == begin(sequence));\r\n        assert(first_5.data() == begin(sequence));\r\n        assert(first_6.data() == begin(sequence));\r\n        assert(first_3.size() == 3);\r\n        assert(first_4.size() == 4);\r\n        assert(first_5.size() == 5);\r\n        assert(first_6.size() == 6);\r\n\r\n        auto last_3 = sp_dyn.last<3>();\r\n        auto last_4 = sp_nine.last<4>();\r\n        auto last_5 = sp_dyn.last(5);\r\n        auto last_6 = sp_nine.last(6);\r\n        static_assert(noexcept(sp_dyn.last<3>())); // strengthened\r\n        static_assert(noexcept(sp_nine.last<4>())); // strengthened\r\n        static_assert(noexcept(sp_dyn.last(5))); // strengthened\r\n        static_assert(noexcept(sp_nine.last(6))); // strengthened\r\n        static_assert(is_same_v<decltype(last_3), span<int, 3>>);\r\n        static_assert(is_same_v<decltype(last_4), span<int, 4>>);\r\n        static_assert(is_same_v<decltype(last_5), span<int>>);\r\n        static_assert(is_same_v<decltype(last_6), span<int>>);\r\n        assert(last_3.data() == begin(sequence) + 6);\r\n        assert(last_4.data() == begin(sequence) + 5);\r\n        assert(last_5.data() == begin(sequence) + 4);\r\n        assert(last_6.data() == begin(sequence) + 3);\r\n        assert(last_3.size() == 3);\r\n        assert(last_4.size() == 4);\r\n        assert(last_5.size() == 5);\r\n        assert(last_6.size() == 6);\r\n\r\n        auto offset_3 = sp_dyn.subspan<3>();\r\n        auto offset_4 = sp_nine.subspan<4>();\r\n        auto offset_5 = sp_dyn.subspan(5);\r\n        auto offset_6 = sp_nine.subspan(6);\r\n        static_assert(noexcept(sp_dyn.subspan<3>())); // strengthened\r\n        static_assert(noexcept(sp_nine.subspan<4>())); // strengthened\r\n        static_assert(noexcept(sp_dyn.subspan(5))); // strengthened\r\n        static_assert(noexcept(sp_nine.subspan(6))); // strengthened\r\n        static_assert(is_same_v<decltype(offset_3), span<int>>);\r\n        static_assert(is_same_v<decltype(offset_4), span<int, 5>>);\r\n        static_assert(is_same_v<decltype(offset_5), span<int>>);\r\n        static_assert(is_same_v<decltype(offset_6), span<int>>);\r\n        assert(offset_3.data() == begin(sequence) + 3);\r\n        assert(offset_4.data() == begin(sequence) + 4);\r\n        assert(offset_5.data() == begin(sequence) + 5);\r\n        assert(offset_6.data() == begin(sequence) + 6);\r\n        assert(offset_3.size() == 6);\r\n        assert(offset_4.size() == 5);\r\n        assert(offset_5.size() == 4);\r\n        assert(offset_6.size() == 3);\r\n\r\n        auto subspan_3 = sp_dyn.subspan<3, 2>();\r\n        auto subspan_4 = sp_nine.subspan<4, 2>();\r\n        auto subspan_5 = sp_dyn.subspan(5, 2);\r\n        auto subspan_6 = sp_nine.subspan(6, 2);\r\n        static_assert(noexcept(sp_dyn.subspan<3, 2>())); // strengthened\r\n        static_assert(noexcept(sp_nine.subspan<4, 2>())); // strengthened\r\n        static_assert(noexcept(sp_dyn.subspan(5, 2))); // strengthened\r\n        static_assert(noexcept(sp_nine.subspan(6, 2))); // strengthened\r\n        static_assert(is_same_v<decltype(subspan_3), span<int, 2>>);\r\n        static_assert(is_same_v<decltype(subspan_4), span<int, 2>>);\r\n        static_assert(is_same_v<decltype(subspan_5), span<int>>);\r\n        static_assert(is_same_v<decltype(subspan_6), span<int>>);\r\n        assert(subspan_3.data() == begin(sequence) + 3);\r\n        assert(subspan_4.data() == begin(sequence) + 4);\r\n        assert(subspan_5.data() == begin(sequence) + 5);\r\n        assert(subspan_6.data() == begin(sequence) + 6);\r\n        assert(subspan_3.size() == 2);\r\n        assert(subspan_4.size() == 2);\r\n        assert(subspan_5.size() == 2);\r\n        assert(subspan_6.size() == 2);\r\n\r\n        static_assert(noexcept(sp_dyn.size()));\r\n        static_assert(noexcept(sp_dyn.size_bytes()));\r\n        static_assert(noexcept(sp_dyn.empty()));\r\n        static_assert(noexcept(sp_dyn[0])); // strengthened\r\n        static_assert(noexcept(sp_dyn.front())); // strengthened\r\n        static_assert(noexcept(sp_dyn.back())); // strengthened\r\n        static_assert(noexcept(sp_dyn.data()));\r\n        static_assert(noexcept(sp_dyn.begin()));\r\n        static_assert(noexcept(sp_dyn.end()));\r\n        static_assert(noexcept(sp_dyn.rbegin()));\r\n        static_assert(noexcept(sp_dyn.rend()));\r\n\r\n        static_assert(noexcept(sp_nine.size()));\r\n        static_assert(noexcept(sp_nine.size_bytes()));\r\n        static_assert(noexcept(sp_nine.empty()));\r\n        static_assert(noexcept(sp_nine[0])); // strengthened\r\n        static_assert(noexcept(sp_nine.front())); // strengthened\r\n        static_assert(noexcept(sp_nine.back())); // strengthened\r\n        static_assert(noexcept(sp_nine.data()));\r\n        static_assert(noexcept(sp_nine.begin()));\r\n        static_assert(noexcept(sp_nine.end()));\r\n        static_assert(noexcept(sp_nine.rbegin()));\r\n        static_assert(noexcept(sp_nine.rend()));\r\n\r\n        assert(sp_dyn.size() == 9);\r\n        assert(sp_nine.size() == 9);\r\n\r\n        assert(sp_dyn.size_bytes() == 9 * sizeof(int));\r\n        assert(sp_nine.size_bytes() == 9 * sizeof(int));\r\n\r\n        assert(!sp_dyn.empty());\r\n        assert(!sp_nine.empty());\r\n\r\n        assert(sp_dyn[0] == 10);\r\n        assert(sp_nine[0] == 10);\r\n        assert(sp_dyn[8] == 90);\r\n        assert(sp_nine[8] == 90);\r\n\r\n        assert(sp_dyn.front() == 10);\r\n        assert(sp_nine.front() == 10);\r\n\r\n        assert(sp_dyn.back() == 90);\r\n        assert(sp_nine.back() == 90);\r\n\r\n        assert(&sp_dyn.front() == begin(sequence));\r\n        assert(&sp_nine.front() == begin(sequence));\r\n        assert(&sp_dyn[4] == begin(sequence) + 4);\r\n        assert(&sp_nine[4] == begin(sequence) + 4);\r\n        assert(&sp_dyn.back() == begin(sequence) + 8);\r\n        assert(&sp_nine.back() == begin(sequence) + 8);\r\n\r\n        assert(sp_dyn.data() == begin(sequence));\r\n        assert(sp_nine.data() == begin(sequence));\r\n\r\n        assert(*sp_dyn.begin() == 10);\r\n        assert(*sp_nine.begin() == 10);\r\n\r\n        assert(sp_dyn.end()[-2] == 80);\r\n        assert(sp_nine.end()[-2] == 80);\r\n\r\n        assert(*sp_dyn.rbegin() == 90);\r\n        assert(*sp_nine.rbegin() == 90);\r\n\r\n        assert(sp_dyn.rend()[-2] == 20);\r\n        assert(sp_nine.rend()[-2] == 20);\r\n\r\n        static_assert(is_same_v<decltype(sp_dyn.begin()), span<int>::iterator>);\r\n        static_assert(is_same_v<decltype(sp_nine.begin()), span<int, 9>::iterator>);\r\n        static_assert(is_same_v<decltype(sp_dyn.end()), span<int>::iterator>);\r\n        static_assert(is_same_v<decltype(sp_nine.end()), span<int, 9>::iterator>);\r\n        static_assert(is_same_v<decltype(sp_dyn.rbegin()), span<int>::reverse_iterator>);\r\n        static_assert(is_same_v<decltype(sp_nine.rbegin()), span<int, 9>::reverse_iterator>);\r\n        static_assert(is_same_v<decltype(sp_dyn.rend()), span<int>::reverse_iterator>);\r\n        static_assert(is_same_v<decltype(sp_nine.rend()), span<int, 9>::reverse_iterator>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_non_constexpr() {\r\n    int sequence[9]{10, 20, 30, 40, 50, 60, 70, 80, 90};\r\n\r\n    constexpr size_t SizeBytes = sizeof(sequence);\r\n\r\n    const span<int> sp_dyn(sequence);\r\n    const span<int, 9> sp_nine(sequence);\r\n    const span<const int> sp_const_dyn(sequence);\r\n    const span<const int, 9> sp_const_nine(sequence);\r\n\r\n    static_assert(noexcept(as_bytes(sp_dyn)));\r\n    static_assert(noexcept(as_bytes(sp_nine)));\r\n    static_assert(noexcept(as_bytes(sp_const_dyn)));\r\n    static_assert(noexcept(as_bytes(sp_const_nine)));\r\n    static_assert(noexcept(as_writable_bytes(sp_dyn)));\r\n    static_assert(noexcept(as_writable_bytes(sp_nine)));\r\n\r\n    static_assert(AsBytesCompilesFor<span<int>>);\r\n    static_assert(AsBytesCompilesFor<span<int, 5>>);\r\n    static_assert(AsBytesCompilesFor<span<const int>>);\r\n    static_assert(AsBytesCompilesFor<span<const int, 6>>);\r\n    static_assert(!AsBytesCompilesFor<span<volatile int>>);\r\n    static_assert(!AsBytesCompilesFor<span<volatile int, 7>>);\r\n    static_assert(!AsBytesCompilesFor<span<const volatile int>>);\r\n    static_assert(!AsBytesCompilesFor<span<const volatile int, 8>>);\r\n\r\n    static_assert(AsWritableBytesCompilesFor<span<int>>);\r\n    static_assert(AsWritableBytesCompilesFor<span<int, 9>>);\r\n    static_assert(!AsWritableBytesCompilesFor<span<const int>>);\r\n    static_assert(!AsWritableBytesCompilesFor<span<const int, 10>>);\r\n    static_assert(!AsWritableBytesCompilesFor<span<volatile int>>);\r\n    static_assert(!AsWritableBytesCompilesFor<span<volatile int, 11>>);\r\n    static_assert(!AsWritableBytesCompilesFor<span<const volatile int>>);\r\n    static_assert(!AsWritableBytesCompilesFor<span<const volatile int, 12>>);\r\n\r\n    auto sp_1 = as_bytes(sp_dyn);\r\n    auto sp_2 = as_bytes(sp_nine);\r\n    auto sp_3 = as_bytes(sp_const_dyn);\r\n    auto sp_4 = as_bytes(sp_const_nine);\r\n    auto sp_5 = as_writable_bytes(sp_dyn);\r\n    auto sp_6 = as_writable_bytes(sp_nine);\r\n\r\n    static_assert(is_same_v<decltype(sp_1), span<const byte>>);\r\n    static_assert(is_same_v<decltype(sp_2), span<const byte, SizeBytes>>);\r\n    static_assert(is_same_v<decltype(sp_3), span<const byte>>);\r\n    static_assert(is_same_v<decltype(sp_4), span<const byte, SizeBytes>>);\r\n    static_assert(is_same_v<decltype(sp_5), span<byte>>);\r\n    static_assert(is_same_v<decltype(sp_6), span<byte, SizeBytes>>);\r\n\r\n    assert(sp_1.data() == reinterpret_cast<const byte*>(begin(sequence)));\r\n    assert(sp_2.data() == reinterpret_cast<const byte*>(begin(sequence)));\r\n    assert(sp_3.data() == reinterpret_cast<const byte*>(begin(sequence)));\r\n    assert(sp_4.data() == reinterpret_cast<const byte*>(begin(sequence)));\r\n    assert(sp_5.data() == reinterpret_cast<byte*>(begin(sequence)));\r\n    assert(sp_6.data() == reinterpret_cast<byte*>(begin(sequence)));\r\n\r\n    assert(sp_1.size() == SizeBytes);\r\n    assert(sp_2.size() == SizeBytes);\r\n    assert(sp_3.size() == SizeBytes);\r\n    assert(sp_4.size() == SizeBytes);\r\n    assert(sp_5.size() == SizeBytes);\r\n    assert(sp_6.size() == SizeBytes);\r\n}\r\n\r\n#if !_HAS_CXX23 // TRANSITION, ABI, const_iterator<_Span_iterator<holder<incomplete>*>> is ill-formed due to ADL in\r\n                // constraints checking\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n// GH-1596: \"<algorithm>: unqualified calls to _Adl_verify_range incorrectly cause instantiation\"\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\n\r\nvoid test_adl_proof_span_constructors() { // COMPILE-ONLY\r\n    using validator = holder<incomplete>*;\r\n    validator varr[1]{};\r\n\r\n    [[maybe_unused]] span<validator> s1{varr, varr + 1};\r\n    [[maybe_unused]] span<validator> s2{varr, 1};\r\n}\r\n#endif // ^^^ no workaround ^^^\r\n#endif // !_HAS_CXX23\r\n\r\nint main() {\r\n    static_assert(test());\r\n    assert(test());\r\n\r\n    test_non_constexpr();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0122R7_span_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0122R7_span_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cstddef>\r\n#include <span>\r\n#include <vector>\r\n\r\n#include <test_death.hpp>\r\nusing namespace std;\r\n\r\nint globalArray[5]{10, 20, 30, 40, 50};\r\nint otherArray[5]{10, 20, 30, 40, 50};\r\n\r\nvoid test_case_operator_dereference_value_initialized_iterator() {\r\n    span<int>::iterator it; // note: for IDL to work correctly, default-init and value-init are equivalent\r\n    (void) *it; // cannot dereference value-initialized span iterator\r\n}\r\n\r\nvoid test_case_operator_dereference_end_iterator() {\r\n    span<int> sp(globalArray);\r\n    span<int>::iterator it = sp.end();\r\n    (void) *it; // cannot dereference end span iterator\r\n}\r\n\r\nvoid test_case_operator_arrow_value_initialized_iterator() {\r\n    span<int>::iterator it;\r\n    (void) it.operator->(); // cannot dereference value-initialized span iterator\r\n}\r\n\r\nvoid test_case_operator_arrow_end_iterator() {\r\n    span<int> sp(globalArray);\r\n    span<int>::iterator it = sp.end();\r\n    (void) it.operator->(); // cannot dereference end span iterator\r\n}\r\n\r\nvoid test_case_operator_preincrement_value_initialized_iterator() {\r\n    span<int>::iterator it;\r\n    ++it; // cannot increment value-initialized span iterator\r\n}\r\n\r\nvoid test_case_operator_preincrement_after_end() {\r\n    span<int> sp(globalArray);\r\n    span<int>::iterator it = sp.end();\r\n    ++it; // cannot increment span iterator past end\r\n}\r\n\r\nvoid test_case_operator_predecrement_value_initialized_iterator() {\r\n    span<int>::iterator it;\r\n    --it; // cannot decrement value-initialized span iterator\r\n}\r\n\r\nvoid test_case_operator_predecrement_before_begin() {\r\n    span<int> sp(globalArray);\r\n    span<int>::iterator it = sp.begin();\r\n    --it; // cannot decrement span iterator before begin\r\n}\r\n\r\nvoid test_case_operator_advance_value_initialized_iterator() {\r\n    span<int>::iterator it;\r\n    it += 1; // cannot seek value-initialized span iterator\r\n}\r\n\r\nvoid test_case_operator_advance_value_initialized_iterator_zero() {\r\n    span<int>::iterator it;\r\n    it += 0; // OK\r\n}\r\n\r\nvoid test_case_operator_advance_before_begin() {\r\n    span<int> sp(globalArray);\r\n    span<int>::iterator it = sp.begin();\r\n    it += -1; // cannot seek span iterator before begin\r\n}\r\n\r\nvoid test_case_operator_advance_after_end() {\r\n    span<int> sp(globalArray);\r\n    span<int>::iterator it = sp.end();\r\n    it += 1; // cannot seek span iterator after end\r\n}\r\n\r\nvoid test_case_operator_retreat_value_initialized_iterator() {\r\n    span<int>::iterator it;\r\n    it -= 1; // cannot seek value-initialized span iterator\r\n}\r\n\r\nvoid test_case_operator_retreat_value_initialized_iterator_zero() {\r\n    span<int>::iterator it;\r\n    it -= 0; // OK\r\n}\r\n\r\nvoid test_case_operator_retreat_before_begin() {\r\n    span<int> sp(globalArray);\r\n    span<int>::iterator it = sp.begin();\r\n    it -= 1; // cannot seek span iterator before begin\r\n}\r\n\r\nvoid test_case_operator_retreat_after_end() {\r\n    span<int> sp(globalArray);\r\n    span<int>::iterator it = sp.end();\r\n    it -= -1; // cannot seek span iterator after end\r\n}\r\n\r\nvoid test_case_operator_subtract_incompatible_different_data() {\r\n    span<int> sp1(globalArray);\r\n    span<int> sp2(otherArray);\r\n    (void) (sp1.begin() - sp2.begin()); // cannot subtract incompatible span iterators\r\n}\r\n\r\nvoid test_case_operator_subtract_incompatible_different_size() {\r\n    span<int> sp1(globalArray, 3);\r\n    span<int> sp2(globalArray, 4);\r\n    (void) (sp1.begin() - sp2.begin()); // cannot subtract incompatible span iterators\r\n}\r\n\r\nvoid test_case_operator_subtract_incompatible_value_initialized() {\r\n    span<int> sp(globalArray);\r\n    (void) (sp.begin() - span<int>::iterator{}); // cannot subtract incompatible span iterators\r\n}\r\n\r\nvoid test_case_operator_equal_incompatible_different_data() {\r\n    span<int> sp1(globalArray);\r\n    span<int> sp2(otherArray);\r\n    (void) (sp1.begin() == sp2.begin()); // cannot compare incompatible span iterators for equality\r\n}\r\n\r\nvoid test_case_operator_equal_incompatible_different_size() {\r\n    span<int> sp1(globalArray, 3);\r\n    span<int> sp2(globalArray, 4);\r\n    (void) (sp1.begin() == sp2.begin()); // cannot compare incompatible span iterators for equality\r\n}\r\n\r\nvoid test_case_operator_equal_incompatible_value_initialized() {\r\n    span<int> sp(globalArray);\r\n    (void) (sp.begin() == span<int>::iterator{}); // cannot compare incompatible span iterators for equality\r\n}\r\n\r\nvoid test_case_operator_less_incompatible_different_data() {\r\n    span<int> sp1(globalArray);\r\n    span<int> sp2(otherArray);\r\n    (void) (sp1.begin() < sp2.begin()); // cannot compare incompatible span iterators\r\n}\r\n\r\nvoid test_case_operator_less_incompatible_different_size() {\r\n    span<int> sp1(globalArray, 3);\r\n    span<int> sp2(globalArray, 4);\r\n    (void) (sp1.begin() < sp2.begin()); // cannot compare incompatible span iterators\r\n}\r\n\r\nvoid test_case_operator_less_incompatible_value_initialized() {\r\n    span<int> sp(globalArray);\r\n    (void) (sp.begin() < span<int>::iterator{}); // cannot compare incompatible span iterators\r\n}\r\n\r\nvoid test_case_algorithm_incompatible_different_data() {\r\n    span<int> sp1(globalArray);\r\n    span<int> sp2(otherArray);\r\n    (void) find(sp1.begin(), sp2.begin(), -1); // span iterators from different views do not form a range\r\n}\r\n\r\nvoid test_case_algorithm_incompatible_different_size() {\r\n    span<int> sp1(globalArray, 3);\r\n    span<int> sp2(globalArray, 4);\r\n    (void) find(sp1.begin(), sp2.begin(), -1); // span iterators from different views do not form a range\r\n}\r\n\r\nvoid test_case_algorithm_incompatible_value_initialized() {\r\n    span<int> sp(globalArray);\r\n    (void) find(sp.begin(), span<int>::iterator{}, -1); // span iterators from different views do not form a range\r\n}\r\n\r\nvoid test_case_algorithm_incompatible_transposed() {\r\n    span<int> sp(globalArray);\r\n    (void) find(sp.end(), sp.begin(), -1); // span iterator range transposed\r\n}\r\n\r\nvoid test_case_constructor_first_count_incompatible_extent() {\r\n    span<int, 3> sp(begin(globalArray),\r\n        size(globalArray)); // Cannot construct span with static extent from range [first, first + count) as count !=\r\n                            // extent\r\n    (void) sp;\r\n}\r\n\r\nvoid test_case_constructor_first_last_incompatible_extent() {\r\n    span<int, 3> sp(begin(globalArray), end(globalArray)); // Cannot construct span with static extent from range\r\n                                                           // [first, last) as last - first != extent\r\n    (void) sp;\r\n}\r\n\r\nvoid test_case_constructor_range_incompatible_extent() {\r\n    vector<int> v(begin(globalArray), end(globalArray));\r\n    span<int, 3> sp(v); // Cannot construct span with static extent from range r as std::ranges::size(r) != extent\r\n    (void) sp;\r\n}\r\n\r\nvoid test_case_constructor_span_incompatible_extent() {\r\n    span<int> sp(begin(globalArray), end(globalArray));\r\n    span<int, 3> sp2(sp); // Cannot construct span with static extent from other span as other.size() != extent\r\n    (void) sp2;\r\n}\r\n\r\nvoid test_case_first_excessive_compiletime_count() {\r\n    span<int> sp(globalArray);\r\n    (void) sp.first<6>(); // Count out of range in span::first()\r\n}\r\n\r\nvoid test_case_first_excessive_runtime_count_dynamic_extent() {\r\n    span<int> sp(globalArray);\r\n    (void) sp.first(6); // Count out of range in span::first(count)\r\n}\r\n\r\nvoid test_case_first_excessive_runtime_count_static_extent() {\r\n    span<int, 5> sp(globalArray);\r\n    (void) sp.first(6); // Count out of range in span::first(count)\r\n}\r\n\r\nvoid test_case_last_excessive_compiletime_count() {\r\n    span<int> sp(globalArray);\r\n    (void) sp.last<6>(); // Count out of range in span::last()\r\n}\r\n\r\nvoid test_case_last_excessive_runtime_count_dynamic_extent() {\r\n    span<int> sp(globalArray);\r\n    (void) sp.last(6); // Count out of range in span::last(count)\r\n}\r\n\r\nvoid test_case_last_excessive_runtime_count_static_extent() {\r\n    span<int, 5> sp(globalArray);\r\n    (void) sp.last(6); // Count out of range in span::last(count)\r\n}\r\n\r\nvoid test_case_subspan_excessive_compiletime_offset() {\r\n    span<int> sp(globalArray);\r\n    (void) sp.subspan<6>(); // Offset out of range in span::subspan()\r\n}\r\n\r\nvoid test_case_subspan_excessive_compiletime_count() {\r\n    span<int> sp(globalArray);\r\n    (void) sp.subspan<2, 4>(); // Count out of range in span::subspan()\r\n}\r\n\r\nvoid test_case_subspan_excessive_runtime_offset_dynamic_extent() {\r\n    span<int> sp(globalArray);\r\n    (void) sp.subspan(6); // Offset out of range in span::subspan(offset, count)\r\n}\r\n\r\nvoid test_case_subspan_excessive_runtime_count_dynamic_extent() {\r\n    span<int> sp(globalArray);\r\n    (void) sp.subspan(2, 4); // Count out of range in span::subspan(offset, count)\r\n}\r\n\r\nvoid test_case_subspan_excessive_runtime_offset_static_extent() {\r\n    span<int, 5> sp(globalArray);\r\n    (void) sp.subspan(6); // Offset out of range in span::subspan(offset, count)\r\n}\r\n\r\nvoid test_case_subspan_excessive_runtime_count_static_extent() {\r\n    span<int, 5> sp(globalArray);\r\n    (void) sp.subspan(2, 4); // Count out of range in span::subspan(offset, count)\r\n}\r\n\r\nvoid test_case_size_bytes_overflow() {\r\n    span<int> sp(begin(globalArray), static_cast<size_t>(-2)); // undefined behavior is detected here\r\n    (void) sp.size_bytes(); // size of span in bytes exceeds std::numeric_limits<size_t>::max()\r\n}\r\n\r\nvoid test_case_operator_subscript_out_of_range_dynamic_extent() {\r\n    span<int> sp(globalArray);\r\n    (void) sp[5]; // span index out of range\r\n}\r\n\r\nvoid test_case_operator_subscript_out_of_range_static_extent() {\r\n    span<int, 5> sp(globalArray);\r\n    (void) sp[5]; // span index out of range\r\n}\r\n\r\nvoid test_case_front_empty_dynamic_extent() {\r\n    span<int> sp;\r\n    (void) sp.front(); // front of empty span\r\n}\r\n\r\nvoid test_case_back_empty_dynamic_extent() {\r\n    span<int> sp;\r\n    (void) sp.back(); // back of empty span\r\n}\r\n\r\nvoid test_case_front_empty_static_extent() {\r\n    span<int, 0> sp;\r\n    (void) sp.front(); // front of empty span\r\n}\r\n\r\nvoid test_case_back_empty_static_extent() {\r\n    span<int, 0> sp;\r\n    (void) sp.back(); // back of empty span\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec([] {\r\n        test_case_operator_advance_value_initialized_iterator_zero();\r\n        test_case_operator_retreat_value_initialized_iterator_zero();\r\n    });\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_case_operator_dereference_value_initialized_iterator,\r\n        test_case_operator_dereference_end_iterator,\r\n        test_case_operator_arrow_value_initialized_iterator,\r\n        test_case_operator_arrow_end_iterator,\r\n        test_case_operator_preincrement_value_initialized_iterator,\r\n        test_case_operator_preincrement_after_end,\r\n        test_case_operator_predecrement_value_initialized_iterator,\r\n        test_case_operator_predecrement_before_begin,\r\n        test_case_operator_advance_value_initialized_iterator,\r\n        test_case_operator_advance_before_begin,\r\n        test_case_operator_advance_after_end,\r\n        test_case_operator_retreat_value_initialized_iterator,\r\n        test_case_operator_retreat_before_begin,\r\n        test_case_operator_retreat_after_end,\r\n        test_case_operator_subtract_incompatible_different_data,\r\n        test_case_operator_subtract_incompatible_different_size,\r\n        test_case_operator_subtract_incompatible_value_initialized,\r\n        test_case_operator_equal_incompatible_different_data,\r\n        test_case_operator_equal_incompatible_different_size,\r\n        test_case_operator_equal_incompatible_value_initialized,\r\n        test_case_operator_less_incompatible_different_data,\r\n        test_case_operator_less_incompatible_different_size,\r\n        test_case_operator_less_incompatible_value_initialized,\r\n        test_case_algorithm_incompatible_different_data,\r\n        test_case_algorithm_incompatible_different_size,\r\n        test_case_algorithm_incompatible_value_initialized,\r\n        test_case_algorithm_incompatible_transposed,\r\n        test_case_constructor_first_count_incompatible_extent,\r\n        test_case_constructor_first_last_incompatible_extent,\r\n        test_case_constructor_range_incompatible_extent,\r\n        test_case_constructor_span_incompatible_extent,\r\n        test_case_first_excessive_compiletime_count,\r\n        test_case_first_excessive_runtime_count_dynamic_extent,\r\n        test_case_first_excessive_runtime_count_static_extent,\r\n        test_case_last_excessive_compiletime_count,\r\n        test_case_last_excessive_runtime_count_dynamic_extent,\r\n        test_case_last_excessive_runtime_count_static_extent,\r\n        test_case_subspan_excessive_compiletime_offset,\r\n        test_case_subspan_excessive_compiletime_count,\r\n        test_case_subspan_excessive_runtime_offset_dynamic_extent,\r\n        test_case_subspan_excessive_runtime_count_dynamic_extent,\r\n        test_case_subspan_excessive_runtime_offset_static_extent,\r\n        test_case_subspan_excessive_runtime_count_static_extent,\r\n        test_case_size_bytes_overflow,\r\n        test_case_operator_subscript_out_of_range_dynamic_extent,\r\n        test_case_operator_subscript_out_of_range_static_extent,\r\n        test_case_front_empty_dynamic_extent,\r\n        test_case_back_empty_dynamic_extent,\r\n        test_case_front_empty_static_extent,\r\n        test_case_back_empty_static_extent,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0137R1_launder/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\fast_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0137R1_launder/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <new>\r\n\r\nusing namespace std;\r\n\r\nstruct X {\r\n    const int n;\r\n};\r\n\r\nunion U {\r\n    X x;\r\n    float f;\r\n};\r\n\r\nvoid test_intro_object() {\r\n    // N4727 6.6.2 [intro.object]/2\r\n    U u = {{1}};\r\n    assert(u.x.n == 1);\r\n    u.f = 5.f;\r\n    assert(u.f == 5.f);\r\n    X* p = new (&u.x) X{2};\r\n    assert(p->n == 2);\r\n    assert(*launder(&u.x.n) == 2);\r\n}\r\n\r\nvoid test_ptr_launder() {\r\n    // N4727 21.6.4 [ptr.launder]/5\r\n    X* p        = new X{3};\r\n    const int a = p->n;\r\n    new (p) X{5};\r\n    const int c = launder(p)->n;\r\n    delete p;\r\n    assert(a == 3);\r\n    assert(c == 5);\r\n}\r\n\r\nint main() {\r\n    test_intro_object();\r\n    test_ptr_launder();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0156R2_scoped_lock/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0156R2_scoped_lock/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <atomic>\r\n#include <cstdlib>\r\n#include <iostream>\r\n#include <mutex>\r\n#include <thread>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nusing namespace std;\r\n\r\n// nothrow-destructibility required by N4928 [res.on.exception.handling]/3\r\nSTATIC_ASSERT(is_nothrow_destructible_v<lock_guard<mutex>>);\r\nSTATIC_ASSERT(is_nothrow_destructible_v<unique_lock<mutex>>);\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(is_nothrow_destructible_v<scoped_lock<>>);\r\nSTATIC_ASSERT(is_nothrow_destructible_v<scoped_lock<mutex>>);\r\nSTATIC_ASSERT(is_nothrow_destructible_v<scoped_lock<mutex, recursive_mutex>>);\r\n#endif // _HAS_CXX17\r\n\r\n// Test mandatory and strengthened exception specification for default construction\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<unique_lock<mutex>>);\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(is_nothrow_default_constructible_v<scoped_lock<>>); // strengthened\r\n#endif // _HAS_CXX17\r\n\r\n// Test strengthened exception specification for adopt_lock construction\r\nSTATIC_ASSERT(is_nothrow_constructible_v<lock_guard<mutex>, mutex&, adopt_lock_t>);\r\nSTATIC_ASSERT(is_nothrow_constructible_v<lock_guard<mutex>, mutex&, const adopt_lock_t&>);\r\nSTATIC_ASSERT(is_nothrow_constructible_v<unique_lock<mutex>, mutex&, adopt_lock_t>);\r\nSTATIC_ASSERT(is_nothrow_constructible_v<unique_lock<mutex>, mutex&, const adopt_lock_t&>);\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(is_nothrow_constructible_v<scoped_lock<>, adopt_lock_t>);\r\nSTATIC_ASSERT(is_nothrow_constructible_v<scoped_lock<>, const adopt_lock_t&>);\r\nSTATIC_ASSERT(is_nothrow_constructible_v<scoped_lock<mutex>, adopt_lock_t, mutex&>);\r\nSTATIC_ASSERT(is_nothrow_constructible_v<scoped_lock<mutex>, const adopt_lock_t&, mutex&>);\r\nSTATIC_ASSERT(is_nothrow_constructible_v<scoped_lock<mutex, recursive_mutex>, adopt_lock_t, mutex&, recursive_mutex&>);\r\nSTATIC_ASSERT(\r\n    is_nothrow_constructible_v<scoped_lock<mutex, recursive_mutex>, const adopt_lock_t&, mutex&, recursive_mutex&>);\r\n#endif // _HAS_CXX17\r\n\r\n// LOCK ORDERING: g_coutMutex is locked after all other locks and synchronizes\r\n// access to cout.\r\nusing TestMutex = mutex;\r\n\r\nTestMutex g_coutMutex;\r\n\r\natomic<int> g_testResult(0);\r\n\r\nvoid verify(bool b, const char* msg) {\r\n    if (!b) {\r\n        lock_guard<TestMutex> lck(g_coutMutex);\r\n        cout << \"FAIL: \" << msg << endl;\r\n        abort();\r\n    }\r\n}\r\n\r\nclass ownership_tracking_mutex {\r\n    TestMutex mtx;\r\n    atomic<thread::id> owningId;\r\n    const char* name;\r\n\r\npublic:\r\n    explicit ownership_tracking_mutex(const char* name) : mtx(), owningId(thread::id()), name(name) {\r\n        // Purposely empty\r\n    }\r\n\r\n    void lock() {\r\n        this->mtx.lock();\r\n        this->owningId = this_thread::get_id();\r\n    }\r\n\r\n    void unlock() {\r\n        this->owningId = thread::id();\r\n        this->mtx.unlock();\r\n    }\r\n\r\n    bool try_lock() {\r\n        bool lockTaken = this->mtx.try_lock();\r\n        if (lockTaken) {\r\n            this->owningId = this_thread::get_id();\r\n        }\r\n\r\n        return lockTaken;\r\n    }\r\n\r\n    void verify_unowned(int line) const {\r\n        thread::id owner = this->owningId;\r\n        if (owner != thread::id()) {\r\n            lock_guard<TestMutex> lck(g_coutMutex);\r\n            cout << \"FAIL (\" << line << \"): Expected mutex \" << this->name << \" to be unowned but \" << owner\r\n                 << \" owns it.\" << endl;\r\n            abort();\r\n        }\r\n    }\r\n\r\n    void verify_owns(int line) const {\r\n        thread::id owner   = this->owningId;\r\n        thread::id current = this_thread::get_id();\r\n        if (owner == thread::id()) {\r\n            lock_guard<TestMutex> lck(g_coutMutex);\r\n            cout << \"FAIL (\" << line << \"): Expected mutex \" << this->name << \" to be owned by \" << current\r\n                 << \" but it was unowned.\" << endl;\r\n            abort();\r\n        }\r\n\r\n        if (owner != current) {\r\n            lock_guard<TestMutex> lck(g_coutMutex);\r\n            cout << \"FAIL (\" << line << \"): Expected mutex \" << this->name << \" to be owned by \" << current << \" but \"\r\n                 << owner << \" owns it.\" << endl;\r\n            abort();\r\n        }\r\n    }\r\n};\r\n\r\n#define VERIFY_UNOWNED(m) ((m).verify_unowned(__LINE__))\r\n#define VERIFY_OWNS(m)    ((m).verify_owns(__LINE__))\r\n\r\nownership_tracking_mutex g_mutexA(\"A\");\r\nownership_tracking_mutex g_mutexB(\"B\");\r\nownership_tracking_mutex g_mutexC(\"C\");\r\nownership_tracking_mutex g_mutexD(\"D\");\r\n\r\nclass logging_thread {\r\n    thread t;\r\n\r\npublic:\r\n    template <class FuncT, class... Args>\r\n    explicit logging_thread(FuncT&& f, Args&&... args) : t(forward<FuncT>(f), forward<Args>(args)...) {\r\n        lock_guard<TestMutex> lck(g_coutMutex);\r\n        cout << \"Started thread \" << this->t.get_id() << endl;\r\n    }\r\n\r\n    logging_thread(logging_thread const&)            = delete;\r\n    logging_thread& operator=(logging_thread const&) = delete;\r\n\r\n    ~logging_thread() {\r\n        {\r\n            lock_guard<TestMutex> lck(g_coutMutex);\r\n            cout << \"Terminating thread \" << this->t.get_id() << endl;\r\n        }\r\n\r\n        this->t.join();\r\n    }\r\n};\r\n\r\nstatic_assert(is_same_v<TestMutex, lock_guard<TestMutex>::mutex_type>, \"lock_guard should expose mutex_type\");\r\n\r\ntemplate <typename LockTested>\r\nvoid exec_test_lock_operates_with_one_mutex() {\r\n    VERIFY_UNOWNED(g_mutexA);\r\n    {\r\n        LockTested lck(g_mutexA);\r\n        VERIFY_OWNS(g_mutexA);\r\n        VERIFY_UNOWNED(g_mutexB);\r\n        VERIFY_UNOWNED(g_mutexC);\r\n        VERIFY_UNOWNED(g_mutexD);\r\n    }\r\n\r\n    VERIFY_UNOWNED(g_mutexA);\r\n}\r\n\r\ntemplate <typename LockTested>\r\nvoid exec_test_lock_guard_adopts_one_mutex() {\r\n    VERIFY_UNOWNED(g_mutexA);\r\n    {\r\n        g_mutexA.lock();\r\n        VERIFY_OWNS(g_mutexA);\r\n        LockTested lckAdopt(g_mutexA, adopt_lock);\r\n        VERIFY_OWNS(g_mutexA);\r\n    }\r\n\r\n    VERIFY_UNOWNED(g_mutexA);\r\n}\r\n\r\ntemplate <typename LockTested>\r\nvoid exec_test_scoped_lock_adopts_one_mutex() {\r\n    VERIFY_UNOWNED(g_mutexA);\r\n    {\r\n        g_mutexA.lock();\r\n        VERIFY_OWNS(g_mutexA);\r\n        LockTested lckAdopt(adopt_lock, g_mutexA);\r\n        VERIFY_OWNS(g_mutexA);\r\n    }\r\n\r\n    VERIFY_UNOWNED(g_mutexA);\r\n}\r\n\r\n#if _HAS_CXX17\r\n// Special case for 0 mutex types.\r\nvoid exec_test_scoped_lock_compiles_with_no_mutexes() {\r\n    [[maybe_unused]] scoped_lock<> takeNoLocks;\r\n    VERIFY_UNOWNED(g_mutexA);\r\n    VERIFY_UNOWNED(g_mutexB);\r\n    VERIFY_UNOWNED(g_mutexC);\r\n    VERIFY_UNOWNED(g_mutexD);\r\n\r\n    scoped_lock<> takeNoAdoptedLocks(adopt_lock);\r\n    VERIFY_UNOWNED(g_mutexA);\r\n    VERIFY_UNOWNED(g_mutexB);\r\n    VERIFY_UNOWNED(g_mutexC);\r\n    VERIFY_UNOWNED(g_mutexD);\r\n}\r\n\r\n// Special case for 1 mutex type.\r\nstatic_assert(is_same_v<TestMutex, scoped_lock<TestMutex>::mutex_type>,\r\n    \"scoped_lock should expose mutex_type when there is one mutex.\");\r\n\r\n// General case\r\nvoid exec_test_scoped_lock_operates_with_multiple_mutexes() {\r\n    using tested_type = scoped_lock<ownership_tracking_mutex, ownership_tracking_mutex, ownership_tracking_mutex,\r\n        ownership_tracking_mutex>;\r\n    atomic<bool> start(false);\r\n    bool xDone = false;\r\n    bool yDone = false;\r\n    bool zDone = false;\r\n\r\n    {\r\n        logging_thread xThread([&]() {\r\n            while (!start) {\r\n                // Wait for other threads to be constructed for greater chance\r\n                // of real lock contention.\r\n            }\r\n\r\n            tested_type lck(g_mutexA, g_mutexB, g_mutexC, g_mutexD);\r\n            VERIFY_OWNS(g_mutexA);\r\n            VERIFY_OWNS(g_mutexB);\r\n            VERIFY_OWNS(g_mutexC);\r\n            VERIFY_OWNS(g_mutexD);\r\n            xDone = true;\r\n        });\r\n\r\n        logging_thread yThread([&]() {\r\n            while (!start) {\r\n                // Ditto\r\n            }\r\n\r\n            // Note different mutex acquire order\r\n            tested_type lck(g_mutexA, g_mutexC, g_mutexD, g_mutexB);\r\n            VERIFY_OWNS(g_mutexA);\r\n            VERIFY_OWNS(g_mutexB);\r\n            VERIFY_OWNS(g_mutexC);\r\n            VERIFY_OWNS(g_mutexD);\r\n            yDone = true;\r\n        });\r\n\r\n        logging_thread zThread([&]() {\r\n            while (!start) {\r\n                // Ditto\r\n            }\r\n\r\n            // Note still different mutex acquire order\r\n            tested_type lck(g_mutexD, g_mutexC, g_mutexB, g_mutexA);\r\n            VERIFY_OWNS(g_mutexA);\r\n            VERIFY_OWNS(g_mutexB);\r\n            VERIFY_OWNS(g_mutexC);\r\n            VERIFY_OWNS(g_mutexD);\r\n            zDone = true;\r\n        });\r\n\r\n        start = true;\r\n    } // synchronize with xThread, yThread, and zThread\r\n\r\n    verify(xDone, \"Thread X didn't complete work\");\r\n    verify(yDone, \"Thread Y didn't complete work\");\r\n    verify(zDone, \"Thread Z didn't complete work\");\r\n    VERIFY_UNOWNED(g_mutexA);\r\n    VERIFY_UNOWNED(g_mutexB);\r\n    VERIFY_UNOWNED(g_mutexC);\r\n    VERIFY_UNOWNED(g_mutexD);\r\n}\r\n\r\nvoid exec_test_scoped_lock_adopts_multiple_mutexes() {\r\n    VERIFY_UNOWNED(g_mutexA);\r\n    VERIFY_UNOWNED(g_mutexB);\r\n    {\r\n        lock(g_mutexA, g_mutexB);\r\n        VERIFY_OWNS(g_mutexA);\r\n        VERIFY_OWNS(g_mutexB);\r\n        scoped_lock<ownership_tracking_mutex, ownership_tracking_mutex> lckAdopt(adopt_lock, g_mutexA, g_mutexB);\r\n        VERIFY_OWNS(g_mutexA);\r\n        VERIFY_OWNS(g_mutexB);\r\n    }\r\n\r\n    VERIFY_UNOWNED(g_mutexA);\r\n    VERIFY_UNOWNED(g_mutexB);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\nint main() {\r\n    exec_test_lock_operates_with_one_mutex<lock_guard<ownership_tracking_mutex>>();\r\n    exec_test_lock_guard_adopts_one_mutex<lock_guard<ownership_tracking_mutex>>();\r\n\r\n#if _HAS_CXX17\r\n    exec_test_scoped_lock_compiles_with_no_mutexes();\r\n    exec_test_lock_operates_with_one_mutex<scoped_lock<ownership_tracking_mutex>>();\r\n    exec_test_scoped_lock_adopts_one_mutex<scoped_lock<ownership_tracking_mutex>>();\r\n    exec_test_scoped_lock_operates_with_multiple_mutexes();\r\n    exec_test_scoped_lock_adopts_multiple_mutexes();\r\n#endif // _HAS_CXX17\r\n\r\n    return g_testResult;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0202R3_constexpr_algorithm_and_exchange/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0202R3_constexpr_algorithm_and_exchange/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <iterator>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nstruct input_pointer {\r\n    using iterator_category = input_iterator_tag;\r\n    using reference         = T&;\r\n    using value_type        = T;\r\n    using pointer           = T*;\r\n    using difference_type   = ptrdiff_t;\r\n\r\n    constexpr explicit input_pointer(T* const ptr_) : ptr(ptr_) {}\r\n\r\n    constexpr T& operator*() const {\r\n        return *ptr;\r\n    }\r\n    constexpr T* operator->() const {\r\n        return ptr;\r\n    }\r\n    constexpr input_pointer& operator++() {\r\n        ++ptr;\r\n        return *this;\r\n    }\r\n    void operator++(int) = delete; // avoid postincrement\r\n    constexpr bool operator==(const input_pointer& o) const {\r\n        return ptr == o.ptr;\r\n    }\r\n    constexpr bool operator!=(const input_pointer& o) const {\r\n        return ptr != o.ptr;\r\n    }\r\n\r\n    T* ptr;\r\n};\r\n\r\ntemplate <class T>\r\nstruct forward_pointer {\r\n    using iterator_category = forward_iterator_tag;\r\n    using reference         = T&;\r\n    using value_type        = T;\r\n    using pointer           = T*;\r\n    using difference_type   = ptrdiff_t;\r\n\r\n    constexpr forward_pointer() : ptr{} {}\r\n    constexpr explicit forward_pointer(T* const ptr_) : ptr(ptr_) {}\r\n\r\n    constexpr T& operator*() const {\r\n        return *ptr;\r\n    }\r\n    constexpr T* operator->() const {\r\n        return ptr;\r\n    }\r\n    constexpr forward_pointer& operator++() {\r\n        ++ptr;\r\n        return *this;\r\n    }\r\n    void operator++(int) = delete; // avoid postincrement\r\n    constexpr bool operator==(const forward_pointer& o) const {\r\n        return ptr == o.ptr;\r\n    }\r\n    constexpr bool operator!=(const forward_pointer& o) const {\r\n        return ptr != o.ptr;\r\n    }\r\n\r\n    T* ptr;\r\n};\r\n\r\ntemplate <class T>\r\nstruct bidirectional_pointer {\r\n    using iterator_category = bidirectional_iterator_tag;\r\n    using reference         = T&;\r\n    using value_type        = T;\r\n    using pointer           = T*;\r\n    using difference_type   = ptrdiff_t;\r\n\r\n    constexpr bidirectional_pointer() : ptr{} {}\r\n    constexpr explicit bidirectional_pointer(T* const ptr_) : ptr(ptr_) {}\r\n\r\n    constexpr T& operator*() const {\r\n        return *ptr;\r\n    }\r\n    constexpr T* operator->() const {\r\n        return ptr;\r\n    }\r\n    constexpr bidirectional_pointer& operator++() {\r\n        ++ptr;\r\n        return *this;\r\n    }\r\n    void operator++(int) = delete; // avoid postincrement\r\n\r\n    constexpr bidirectional_pointer& operator--() {\r\n        --ptr;\r\n        return *this;\r\n    }\r\n    void operator--(int) = delete; // avoid postdecrement\r\n\r\n    constexpr bool operator==(const bidirectional_pointer& o) const {\r\n        return ptr == o.ptr;\r\n    }\r\n    constexpr bool operator!=(const bidirectional_pointer& o) const {\r\n        return ptr != o.ptr;\r\n    }\r\n\r\n    T* ptr;\r\n};\r\n\r\ntemplate <class T>\r\nstruct output_pointer {\r\n    using iterator_category = output_iterator_tag;\r\n    using reference         = T&;\r\n    using value_type        = T;\r\n    using pointer           = T*;\r\n    using difference_type   = ptrdiff_t;\r\n\r\n    constexpr explicit output_pointer(T* const ptr_) : ptr(ptr_) {}\r\n\r\n    constexpr T& operator*() const {\r\n        return *ptr;\r\n    }\r\n    constexpr T* operator->() const {\r\n        return ptr;\r\n    }\r\n    constexpr output_pointer& operator++() {\r\n        ++ptr;\r\n        return *this;\r\n    }\r\n    void operator++(int) = delete; // avoid postincrement\r\n\r\n    // note: output iterators aren't required to be comparable but we need to compare them for test\r\n    // purposes\r\n    constexpr bool operator==(const output_pointer& o) const {\r\n        return ptr == o.ptr;\r\n    }\r\n    constexpr bool operator!=(const output_pointer& o) const {\r\n        return ptr != o.ptr;\r\n    }\r\n\r\n    T* ptr;\r\n};\r\n\r\n// test all the algorithms that have is_constant_evaluated() calls\r\n\r\ntemplate <class I, class O>\r\nconstexpr void test_copy() {\r\n    const int a[] = {10, 20, 30};\r\n    int b[3]{};\r\n    assert(copy(I{begin(a)}, I{end(a)}, O{begin(b)}) == O{end(b)});\r\n    assert(a[0] == 10);\r\n    assert(a[1] == 20);\r\n    assert(a[2] == 30);\r\n    assert(b[0] == 10);\r\n    assert(b[1] == 20);\r\n    assert(b[2] == 30);\r\n}\r\n\r\ntemplate <class I, class O>\r\nconstexpr void test_copy_n() {\r\n    const int a[] = {10, 20, 30};\r\n    int b[3]{};\r\n    assert(copy_n(I{begin(a)}, 3, O{begin(b)}) == O{end(b)});\r\n    assert(a[0] == 10);\r\n    assert(a[1] == 20);\r\n    assert(a[2] == 30);\r\n    assert(b[0] == 10);\r\n    assert(b[1] == 20);\r\n    assert(b[2] == 30);\r\n}\r\n\r\ntemplate <class I, class O>\r\nconstexpr void test_copy_backward() {\r\n    const int a[] = {10, 20, 30};\r\n    int b[3]{};\r\n    assert(copy_backward(I{begin(a)}, I{end(a)}, O{end(b)}) == O{begin(b)});\r\n    assert(a[0] == 10);\r\n    assert(a[1] == 20);\r\n    assert(a[2] == 30);\r\n    assert(b[0] == 10);\r\n    assert(b[1] == 20);\r\n    assert(b[2] == 30);\r\n}\r\n\r\ntemplate <class I, class O>\r\nconstexpr void test_move() {\r\n    const int a[] = {10, 20, 30};\r\n    int b[3]{};\r\n    assert(move(I{begin(a)}, I{end(a)}, O{begin(b)}) == O{end(b)});\r\n    assert(a[0] == 10);\r\n    assert(a[1] == 20);\r\n    assert(a[2] == 30);\r\n    assert(b[0] == 10);\r\n    assert(b[1] == 20);\r\n    assert(b[2] == 30);\r\n}\r\n\r\ntemplate <class I, class O>\r\nconstexpr void test_move_backward() {\r\n    const int a[] = {10, 20, 30};\r\n    int b[3]{};\r\n    assert(move_backward(I{begin(a)}, I{end(a)}, O{end(b)}) == O{begin(b)});\r\n    assert(a[0] == 10);\r\n    assert(a[1] == 20);\r\n    assert(a[2] == 30);\r\n    assert(b[0] == 10);\r\n    assert(b[1] == 20);\r\n    assert(b[2] == 30);\r\n}\r\n\r\ntemplate <class O>\r\nconstexpr void test_fill() {\r\n    int a[] = {10, 20, 30};\r\n    fill(O{begin(a)}, O{end(a)}, 20);\r\n    assert(all_of(begin(a), end(a), [](int i) { return i == 20; }));\r\n}\r\n\r\ntemplate <class O>\r\nconstexpr void test_fill_n() {\r\n    int a[] = {10, 20, 30};\r\n    fill_n(O{begin(a)}, size(a), 20);\r\n    assert(all_of(begin(a), end(a), [](int i) { return i == 20; }));\r\n}\r\n\r\ntemplate <class I>\r\nconstexpr void test_equal() {\r\n    const int a[] = {10, 20, 30};\r\n    const int b[] = {10, 20, 30};\r\n    const int c[] = {40, 50, 60};\r\n    assert(equal(I{begin(a)}, I{end(a)}, I{begin(a)}));\r\n    assert(equal(I{begin(a)}, I{end(a)}, I{begin(b)}));\r\n    assert(equal(I{begin(a)}, I{end(a)}, I{begin(c)}, not_equal_to{}));\r\n    assert(equal(I{begin(a)}, I{end(a)}, I{begin(a)}, I{end(a)}));\r\n    assert(equal(I{begin(a)}, I{end(a)}, I{begin(b)}, I{end(b)}));\r\n    assert(equal(I{begin(a)}, I{end(a)}, I{begin(c)}, I{end(c)}, not_equal_to{}));\r\n\r\n    assert(!equal(I{begin(a)}, I{end(a)}, I{begin(c)}));\r\n    assert(!equal(I{begin(a)}, I{end(a)}, I{begin(c)}, I{end(c)}));\r\n    assert(!equal(I{begin(a)}, I{end(a)}, I{begin(a)}, I{begin(a)}));\r\n    assert(!equal(I{begin(a)}, I{end(a)}, I{begin(b)}, I{end(b)}, not_equal_to{}));\r\n    assert(!equal(I{begin(a)}, I{end(a)}, I{begin(a)}, I{end(a)}, not_equal_to{}));\r\n}\r\n\r\ntemplate <class IntPtr, class CharPtr>\r\nconstexpr void test_find() {\r\n    const int a[] = {10, 20, 30};\r\n    assert(find(IntPtr{begin(a)}, IntPtr{end(a)}, 20) == IntPtr{a + 1});\r\n\r\n    const char b[] = {'\\x0A', '\\x14', '\\x1E'};\r\n    assert(find(CharPtr{begin(b)}, CharPtr{end(b)}, 20) == CharPtr{b + 1});\r\n}\r\n\r\ntemplate <class V, class IO>\r\nconstexpr void test_reverse() {\r\n    V a[] = {10, 20, 30};\r\n    reverse(IO{begin(a)}, IO{end(a)});\r\n    assert(a[0] == 30);\r\n    assert(a[1] == 20);\r\n    assert(a[2] == 10);\r\n}\r\n\r\n// test remaining algorithms that had nothing tested by libcxx as of 2020-01-21\r\n\r\ntemplate <class I, class O>\r\nconstexpr void test_rotate_copy() {\r\n    const int a[] = {10, 20, 30};\r\n    int b[3]{};\r\n    assert(rotate_copy(I{begin(a)}, I{next(a)}, I{end(a)}, O{begin(b)}) == O{end(b)});\r\n    assert(a[0] == 10);\r\n    assert(a[1] == 20);\r\n    assert(a[2] == 30);\r\n    assert(b[0] == 20);\r\n    assert(b[1] == 30);\r\n    assert(b[2] == 10);\r\n}\r\n\r\ntemplate <class I, class O>\r\nconstexpr void test_merge() {\r\n    const int a[]        = {10, 20, 30, 40, 50, 60};\r\n    const int b[]        = {20, 40, 60, 80, 100, 120};\r\n    const int expected[] = {10, 20, 20, 30, 40, 40, 50, 60, 60, 80, 100, 120};\r\n    int r[size(expected)]{};\r\n    assert(merge(I{begin(a)}, I{end(a)}, I{begin(b)}, I{end(b)}, O{begin(r)}) == O{end(r)});\r\n    assert(equal(begin(r), end(r), begin(expected), end(expected)));\r\n}\r\n\r\ntemplate <class I, class O>\r\nconstexpr void test_set_union() {\r\n    const int a[]        = {10, 20, 30, 40, 50, 60};\r\n    const int b[]        = {20, 40, 60, 80, 100, 120};\r\n    const int expected[] = {10, 20, 30, 40, 50, 60, 80, 100, 120};\r\n    int r[size(expected)]{};\r\n    assert(set_union(I{begin(a)}, I{end(a)}, I{begin(b)}, I{end(b)}, O{begin(r)}) == O{end(r)});\r\n    assert(equal(begin(r), end(r), begin(expected), end(expected)));\r\n}\r\n\r\ntemplate <class I, class O>\r\nconstexpr void test_set_difference() {\r\n    const int a[] = {10, 20, 30, 40, 50, 60};\r\n    const int b[] = {20, 40, 60, 80, 100, 120};\r\n    int r[3]{};\r\n    assert(set_difference(I{begin(a)}, I{end(a)}, I{begin(b)}, I{end(b)}, O{begin(r)}) == O{end(r)});\r\n    assert(r[0] == 10);\r\n    assert(r[1] == 30);\r\n    assert(r[2] == 50);\r\n}\r\n\r\ntemplate <class I, class O>\r\nconstexpr void test_set_symmetric_difference() {\r\n    const int a[] = {10, 20, 30, 40, 50, 60};\r\n    const int b[] = {20, 40, 60, 80, 100, 120};\r\n    int r[6]{};\r\n    assert(set_symmetric_difference(I{begin(a)}, I{end(a)}, I{begin(b)}, I{end(b)}, O{begin(r)}) == O{end(r)});\r\n    assert(r[0] == 10);\r\n    assert(r[1] == 30);\r\n    assert(r[2] == 50);\r\n    assert(r[3] == 80);\r\n    assert(r[4] == 100);\r\n    assert(r[5] == 120);\r\n}\r\n\r\n// Also test P0879R0 constexpr for swapping functions\r\n\r\ntemplate <class IO>\r\nconstexpr void test_rotate() {\r\n    int a[] = {50, 60, 10, 20, 30, 40};\r\n    assert(rotate(IO{begin(a)}, next(IO{begin(a)}, 2), IO{end(a)}) == IO{a + 4});\r\n    assert(is_sorted(begin(a), end(a)));\r\n}\r\n\r\ntemplate <class IO>\r\nconstexpr void test_partition() {\r\n    const auto isNegative     = [](int b) { return b < 0; };\r\n    int a[]                   = {10, 20, -10, -20, 100, 450, -1000};\r\n    const auto partitionPoint = partition(IO{begin(a)}, IO{end(a)}, isNegative);\r\n    assert(is_partitioned(begin(a), end(a), isNegative));\r\n    assert(partitionPoint == IO{a + 3});\r\n    assert(all_of(IO{begin(a)}, partitionPoint, isNegative));\r\n    assert(none_of(partitionPoint, IO{end(a)}, isNegative));\r\n}\r\n\r\nconstexpr void test_sort() {\r\n    int a[] = {10, 20, -10, -20, 100, 450, -1000};\r\n    sort(begin(a), end(a));\r\n    assert(is_sorted(begin(a), end(a)));\r\n}\r\n\r\nconstexpr void test_partial_sort() {\r\n    int a[] = {1000, 10000, 2000, 20, 60, 80};\r\n    partial_sort(begin(a), a + 3, end(a));\r\n    assert(a[0] == 20);\r\n    assert(a[1] == 60);\r\n    assert(a[2] == 80);\r\n}\r\n\r\ntemplate <class I>\r\nconstexpr void test_partial_sort_copy() {\r\n    const int a[] = {1000, 10000, 2000, 20, 60, 80};\r\n    int b[size(a) + 1]{};\r\n    assert(partial_sort_copy(I{begin(a)}, I{end(a)}, begin(b), begin(b) + 3) == begin(b) + 3);\r\n    assert(b[0] == 20);\r\n    assert(b[1] == 60);\r\n    assert(b[2] == 80);\r\n    assert(partial_sort_copy(I{begin(a)}, I{end(a)}, begin(b), end(b)) == begin(b) + 6);\r\n    assert(b[0] == 20);\r\n    assert(b[1] == 60);\r\n    assert(b[2] == 80);\r\n    assert(b[3] == 1000);\r\n    assert(b[4] == 2000);\r\n    assert(b[5] == 10000);\r\n}\r\n\r\nconstexpr void test_nth_element() {\r\n    const auto isNegative = [](int b) { return b < 0; };\r\n    int a[]               = {10, 20, -10, -20, 100, 450, -1000};\r\n    nth_element(begin(a), begin(a) + 3, end(a));\r\n    assert(all_of(begin(a), a + 2, isNegative));\r\n    assert(a[2] == -10);\r\n    assert(none_of(a + 4, end(a), isNegative));\r\n}\r\n\r\nconstexpr void test_is_heap() {\r\n    int buff[] = {\r\n        1668617627,\r\n        1429106719,\r\n        -47163201,\r\n        -441494788,\r\n        -1200257975,\r\n        -1459960308,\r\n        -912489821,\r\n        -2095681771,\r\n        -1298559576,\r\n        -1260655766,\r\n    };\r\n\r\n    assert(is_heap(begin(buff), end(buff)));\r\n    swap(buff[0], buff[1]);\r\n    assert(!is_heap(begin(buff), end(buff)));\r\n}\r\n\r\nconstexpr void test_make_heap_and_sort_heap() {\r\n    int buff[] = {\r\n        -1200257975,\r\n        -1260655766,\r\n        -1298559576,\r\n        -1459960308,\r\n        -2095681771,\r\n        -441494788,\r\n        -47163201,\r\n        -912489821,\r\n        1429106719,\r\n        1668617627,\r\n    };\r\n\r\n    make_heap(begin(buff), end(buff));\r\n    assert(is_heap(begin(buff), end(buff)));\r\n    sort_heap(begin(buff), end(buff));\r\n    assert(is_sorted(begin(buff), end(buff)));\r\n}\r\n\r\nconstexpr void test_pop_heap_and_push_heap() {\r\n    int buff[] = {\r\n        1668617627,\r\n        1429106719,\r\n        -47163201,\r\n        -441494788,\r\n        -1200257975,\r\n        -1459960308,\r\n        -912489821,\r\n        -2095681771,\r\n        -1298559576,\r\n        -1260655766,\r\n    };\r\n\r\n    pop_heap(begin(buff), end(buff));\r\n    const int expectedPopped[] = {\r\n        1429106719,\r\n        -441494788,\r\n        -47163201,\r\n        -1260655766,\r\n        -1200257975,\r\n        -1459960308,\r\n        -912489821,\r\n        -2095681771,\r\n        -1298559576,\r\n        1668617627,\r\n    };\r\n\r\n    assert(is_heap(begin(expectedPopped), end(expectedPopped) - 1));\r\n    assert(equal(begin(buff), end(buff), begin(expectedPopped), end(expectedPopped)));\r\n\r\n    push_heap(begin(buff), end(buff));\r\n    const int expectedPushed[] = {\r\n        1668617627,\r\n        1429106719,\r\n        -47163201,\r\n        -1260655766,\r\n        -441494788,\r\n        -1459960308,\r\n        -912489821,\r\n        -2095681771,\r\n        -1298559576,\r\n        -1200257975,\r\n    };\r\n    assert(is_heap(begin(expectedPushed), end(expectedPushed)));\r\n    assert(equal(begin(buff), end(buff), begin(expectedPushed), end(expectedPushed)));\r\n}\r\n\r\nconstexpr void test_permutations() {\r\n    int buff[] = {10, 20, 30, 40};\r\n\r\n    constexpr int expected[24][4] = {\r\n        {10, 20, 30, 40},\r\n        {10, 20, 40, 30},\r\n        {10, 30, 20, 40},\r\n        {10, 30, 40, 20},\r\n        {10, 40, 20, 30},\r\n        {10, 40, 30, 20},\r\n        {20, 10, 30, 40},\r\n        {20, 10, 40, 30},\r\n        {20, 30, 10, 40},\r\n        {20, 30, 40, 10},\r\n        {20, 40, 10, 30},\r\n        {20, 40, 30, 10},\r\n        {30, 10, 20, 40},\r\n        {30, 10, 40, 20},\r\n        {30, 20, 10, 40},\r\n        {30, 20, 40, 10},\r\n        {30, 40, 10, 20},\r\n        {30, 40, 20, 10},\r\n        {40, 10, 20, 30},\r\n        {40, 10, 30, 20},\r\n        {40, 20, 10, 30},\r\n        {40, 20, 30, 10},\r\n        {40, 30, 10, 20},\r\n        {40, 30, 20, 10},\r\n    };\r\n\r\n    for (size_t i = 0; i < size(expected); ++i) {\r\n        assert(is_permutation(begin(buff), end(buff), begin(expected[i]), end(expected[i])));\r\n    }\r\n\r\n    size_t cursor = 0;\r\n    do {\r\n        assert(equal(begin(buff), end(buff), begin(expected[cursor]), end(expected[cursor])));\r\n        ++cursor;\r\n    } while (next_permutation(begin(buff), end(buff)));\r\n\r\n    assert(cursor == 24);\r\n    assert(equal(begin(buff), end(buff), begin(expected[0]), end(expected[0])));\r\n\r\n    assert(!prev_permutation(begin(buff), end(buff)));\r\n\r\n    do {\r\n        --cursor;\r\n        assert(equal(begin(buff), end(buff), begin(expected[cursor]), end(expected[cursor])));\r\n    } while (prev_permutation(begin(buff), end(buff)));\r\n\r\n    assert(cursor == 0);\r\n    assert(equal(begin(buff), end(buff), begin(expected[23]), end(expected[23])));\r\n\r\n    {\r\n        int arr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\r\n        int arr2[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};\r\n        assert(is_permutation(begin(arr1), end(arr1), begin(arr2), end(arr2)));\r\n    }\r\n    {\r\n        int arr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\r\n        int arr2[] = {9, 8, 7, 3, 4, 5, 6, 2, 1, 0};\r\n        assert(is_permutation(begin(arr1), end(arr1), begin(arr2), end(arr2)));\r\n    }\r\n    {\r\n        int arr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\r\n        int arr2[] = {9, 1, 7, 3, 5, 4, 6, 2, 8, 0};\r\n        assert(is_permutation(begin(arr1), end(arr1), begin(arr2), end(arr2)));\r\n    }\r\n    {\r\n        int arr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\r\n        int arr2[] = {9, 1, 7, 5, 6, 3, 4, 2, 8, 0};\r\n        assert(is_permutation(begin(arr1), end(arr1), begin(arr2), end(arr2)));\r\n    }\r\n    {\r\n        int arr1[] = {0, 1, 2, 3, 4, 10, 5, 6, 7, 8, 9};\r\n        int arr2[] = {9, 1, 7, 3, 5, 11, 4, 6, 2, 8, 0};\r\n        assert(!is_permutation(begin(arr1), end(arr1), begin(arr2), end(arr2)));\r\n    }\r\n}\r\n\r\nconstexpr void test_adjacent_swap_ranges() {\r\n    int arr[8]            = {10, 20, 30, 40, 50, 60, 70, 80};\r\n    const int original[8] = {10, 20, 30, 40, 50, 60, 70, 80};\r\n    const int modified[8] = {10, 50, 60, 70, 20, 30, 40, 80};\r\n\r\n    int* const first = arr + 1;\r\n    int* const mid   = arr + 4;\r\n    int* const last  = arr + 7;\r\n\r\n    swap_ranges(first, mid, mid);\r\n    assert(equal(begin(arr), end(arr), begin(modified), end(modified)));\r\n    swap_ranges(mid, last, first);\r\n    assert(equal(begin(arr), end(arr), begin(original), end(original)));\r\n}\r\n\r\nconstexpr bool test() {\r\n    test_copy<input_pointer<const int>, output_pointer<int>>();\r\n    test_copy<const int*, int*>();\r\n    test_copy_n<input_pointer<const int>, output_pointer<int>>();\r\n    test_copy_n<const int*, int*>();\r\n    test_copy_backward<bidirectional_pointer<const int>, bidirectional_pointer<int>>();\r\n    test_copy_backward<const int*, int*>();\r\n    test_move<input_pointer<const int>, output_pointer<int>>();\r\n    test_move<const int*, int*>();\r\n    test_move_backward<bidirectional_pointer<const int>, bidirectional_pointer<int>>();\r\n    test_move_backward<const int*, int*>();\r\n    test_fill<forward_pointer<int>>();\r\n    test_fill<int*>();\r\n    test_fill_n<forward_pointer<int>>();\r\n    test_fill_n<int*>();\r\n    test_equal<input_pointer<const int>>();\r\n    test_equal<const int*>();\r\n    test_find<input_pointer<const int>, input_pointer<const char>>();\r\n    test_find<const int*, const char*>();\r\n    test_reverse<char, bidirectional_pointer<char>>();\r\n    test_reverse<char, char*>();\r\n    test_reverse<short, bidirectional_pointer<short>>();\r\n    test_reverse<short, short*>();\r\n    test_reverse<int, bidirectional_pointer<int>>();\r\n    test_reverse<int, int*>();\r\n    test_reverse<long, bidirectional_pointer<long>>();\r\n    test_reverse<long, long*>();\r\n    test_reverse<long long, bidirectional_pointer<long long>>();\r\n    test_reverse<long long, long long*>();\r\n    test_rotate_copy<input_pointer<const int>, output_pointer<int>>();\r\n    test_rotate_copy<const int*, int*>();\r\n    test_merge<input_pointer<const int>, output_pointer<int>>();\r\n    test_merge<const int*, int*>();\r\n    test_set_union<input_pointer<const int>, output_pointer<int>>();\r\n    test_set_union<const int*, int*>();\r\n    test_set_difference<input_pointer<const int>, output_pointer<int>>();\r\n    test_set_difference<const int*, int*>();\r\n    test_set_symmetric_difference<input_pointer<const int>, output_pointer<int>>();\r\n    test_set_symmetric_difference<const int*, int*>();\r\n    test_rotate<bidirectional_pointer<int>>();\r\n    test_rotate<int*>();\r\n    test_partition<forward_pointer<int>>();\r\n    test_partition<bidirectional_pointer<int>>();\r\n    test_partition<int*>();\r\n    test_sort();\r\n    test_partial_sort();\r\n    test_partial_sort_copy<input_pointer<const int>>();\r\n    test_partial_sort_copy<const int*>();\r\n    test_nth_element();\r\n    test_is_heap();\r\n    test_make_heap_and_sort_heap();\r\n    test_pop_heap_and_push_heap();\r\n    test_permutations();\r\n    test_adjacent_swap_ranges();\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test();\r\n    static_assert(test());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0218R1_filesystem/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0218R1_filesystem/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING\r\n#define _SILENCE_CXX20_U8PATH_DEPRECATION_WARNING\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <chrono>\r\n#include <codecvt>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <filesystem>\r\n#include <forward_list>\r\n#include <fstream>\r\n#include <iostream>\r\n#include <iterator>\r\n#include <locale>\r\n#include <memory>\r\n#include <optional>\r\n#include <sstream>\r\n#include <string>\r\n#include <string_view>\r\n#include <system_error>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <test_filesystem_support.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\nusing namespace std::filesystem;\r\n\r\nconstexpr wstring_view badPath = L\"// ?? ?? ///// ?? ?? ? ////\"sv;\r\nconst path nonexistentPaths[]  = {\r\n    L\"C:/This/Path/Should/Not/Exist\"sv,\r\n    L\"//this_path_does_not_exist_on_the_network_e9da301701f70ead24c65bd30f600d15/docs\"sv,\r\n};\r\nconstexpr wstring_view longSuffix =\r\n    LR\"(really\\long\\path\\longer\\than\\max_path\\goes\\here\\and it just goes)\"\r\n    LR\"( on and on\\and it just goes on and on\\and it just goes on and on\\and it just goes on and on)\"\r\n    LR\"(\\and it just goes on and on\\and it just goes on and on\\and it just goes on and on\\and it)\"\r\n    LR\"( just goes on and on\\and it just goes on and on)\"sv;\r\nconstexpr uintmax_t bad_file_size      = static_cast<uintmax_t>(-1);\r\nconstexpr file_time_type bad_file_time = file_time_type::min();\r\n\r\ntemplate <typename Elem, typename Traits>\r\n[[nodiscard]] constexpr bool starts_with(\r\n    const basic_string_view<Elem, Traits> str, const basic_string_view<Elem, Traits> prefix) noexcept {\r\n    // test if str begins with prefix\r\n    return str.size() >= prefix.size() && Traits::compare(str.data(), prefix.data(), prefix.size()) == 0;\r\n}\r\n\r\nbool pass = true;\r\n\r\nbool expect(const bool b, const char* const func, const int line, const char* const message) {\r\n    if (!b) {\r\n        wcerr << func << L\" @ \" << line << L\": check failed: \" << message << L'\\n';\r\n        pass = false;\r\n    }\r\n    return b;\r\n}\r\n\r\n#define EXPECT(Expr) expect(Expr, __func__, __LINE__, #Expr)\r\n\r\nbool good(const error_code& ec) {\r\n    bool overall = true;\r\n    if (ec.value() != 0) {\r\n        wcerr << L\"Unexpected error \" << ec.value() << L\" \" << ec.message().c_str() << L\"\\n\";\r\n        overall = false;\r\n    }\r\n\r\n    if (ec.category() != system_category()) {\r\n        wcerr << L\"Unexpected category \" << ec.category().name() << L\"\\n\";\r\n        overall = false;\r\n    }\r\n\r\n    return overall;\r\n}\r\n\r\nbool bad(const error_code& ec) {\r\n    return ec.value() != 0 && ec.category() == system_category();\r\n}\r\n\r\ntemplate <class R1, class R2>\r\nbool narrow_equal(R1&& r1, R2&& r2) {\r\n    if (r1.size() != r2.size()) {\r\n        return false;\r\n    }\r\n\r\n    auto first1 = begin(r1);\r\n    static_assert(sizeof(*first1) == 1);\r\n    const auto last1 = end(r1);\r\n    auto first2      = begin(r2);\r\n    static_assert(sizeof(*first2) == 1);\r\n\r\n    for (; first1 != last1; ++first1, (void) ++first2) {\r\n        const auto x = static_cast<unsigned char>(*first1);\r\n        const auto y = static_cast<unsigned char>(*first2);\r\n        if (x != y) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <typename Lambda>\r\nbool throws_system_error(Lambda lambda) {\r\n    try {\r\n        lambda();\r\n        return false;\r\n    } catch (const system_error&) {\r\n        // Good!\r\n        return true;\r\n    }\r\n}\r\n\r\ntemplate <typename Lambda>\r\nbool throws_filesystem_error(Lambda lambda, string_view functionName, const path& p1 = {}, const path& p2 = {}) {\r\n    try {\r\n        lambda();\r\n        return false;\r\n    } catch (const filesystem_error& err) {\r\n        // Good!\r\n        return string_view(err.what()).find(functionName) != string_view::npos && bad(err.code())\r\n            && err.path1().native() == p1.native() && err.path2().native() == p2.native();\r\n    }\r\n}\r\n\r\nvoid create_file_containing(const path& filename, const wchar_t* const contents) {\r\n    wofstream f(filename, wofstream::trunc);\r\n    f << contents;\r\n}\r\n\r\n[[nodiscard]] wstring read_file_contents(const path& filename) {\r\n    wifstream f(filename);\r\n    if (!f) {\r\n        return L\"OPEN FAILURE\";\r\n    }\r\n\r\n    wostringstream str;\r\n    str << f.rdbuf();\r\n    return str.str();\r\n}\r\n\r\nvoid write_file_data(const path& fileName, const vector<char>& data) {\r\n    ofstream result(fileName, ofstream::trunc | ofstream::binary | ofstream::out);\r\n    EXPECT(static_cast<bool>(result.write(data.data(), static_cast<streamsize>(data.size()))));\r\n}\r\n\r\nvector<char> read_file_data(const path& fileName) {\r\n    constexpr size_t chunkSize = 4096;\r\n    vector<char> ret;\r\n\r\n    for (ifstream f(fileName, ios_base::binary); f;) {\r\n        const size_t oldSize = ret.size();\r\n        ret.resize(oldSize + chunkSize);\r\n        f.read(ret.data() + oldSize, chunkSize);\r\n        ret.resize(oldSize + static_cast<size_t>(f.gcount()));\r\n    }\r\n\r\n    return ret;\r\n}\r\n\r\nstruct decomposition_test_case {\r\n    wstring_view inputPath;\r\n    wstring_view rootName;\r\n    wstring_view rootDirectory;\r\n    wstring_view relativePath;\r\n    wstring_view parentPath;\r\n    wstring_view filename;\r\n    bool absolute;\r\n\r\n    friend wostream& operator<<(wostream& wos, const decomposition_test_case& testCase) {\r\n        wos << boolalpha << L\"Input path:              \" << testCase.inputPath << L\"\\n\"\r\n            << L\"Expected root_name:      \" << testCase.rootName << L\"\\n\"\r\n            << L\"Expected root_directory: \" << testCase.rootDirectory << L\"\\n\"\r\n            << L\"Expected relative_path:  \" << testCase.relativePath << L\"\\n\"\r\n            << L\"Expected parent_path:    \" << testCase.parentPath << L\"\\n\"\r\n            << L\"Expected filename:       \" << testCase.filename << L\"\\n\"\r\n            << L\"Expected absolute:       \" << testCase.absolute << L\"\\n\";\r\n\r\n        return wos;\r\n    }\r\n};\r\n\r\nconstexpr decomposition_test_case decompTestCases[] = {\r\n    // These cases aim to provide decision coverage for all the inter-element decomposition functions:\r\n    {L\"\"sv, L\"\"sv, L\"\"sv, L\"\"sv, L\"\"sv, L\"\"sv, false}, // basic empty path\r\n    {L\"h\"sv, L\"\"sv, L\"\"sv, L\"h\"sv, L\"\"sv, L\"h\"sv, false}, // basic short relative path\r\n    {L\"hi\"sv, L\"\"sv, L\"\"sv, L\"hi\"sv, L\"\"sv, L\"hi\"sv, false}, // basic relative path\r\n    {L\"c:\"sv, L\"c:\"sv, L\"\"sv, L\"\"sv, L\"c:\"sv, L\"\"sv, false}, // empty drive-relative path\r\n    {L\"c:dog\"sv, L\"c:\"sv, L\"\"sv, L\"dog\"sv, L\"c:\"sv, L\"dog\"sv, false}, // non-empty drive-relative path\r\n    {L\"C:\"sv, L\"C:\"sv, L\"\"sv, L\"\"sv, L\"C:\"sv, L\"\"sv, false}, // also test uppercase version\r\n    {L\"cc:dog\"sv, L\"\"sv, L\"\"sv, L\"cc:dog\"sv, L\"\"sv, L\"cc:dog\"sv, false}, // malformed drive (more follow)\r\n    {L\"::dog\"sv, L\"\"sv, L\"\"sv, L\"::dog\"sv, L\"\"sv, L\"::dog\"sv, false},\r\n    {L\" :dog\"sv, L\"\"sv, L\"\"sv, L\" :dog\"sv, L\"\"sv, L\" :dog\"sv, false},\r\n    {L\":dog\"sv, L\"\"sv, L\"\"sv, L\":dog\"sv, L\"\"sv, L\":dog\"sv, false},\r\n    {LR\"(\\:dog)\"sv, L\"\"sv, LR\"(\\)\"sv, L\":dog\"sv, LR\"(\\)\"sv, L\":dog\"sv, false},\r\n    {LR\"(\\:\\dog)\"sv, L\"\"sv, LR\"(\\)\"sv, LR\"(:\\dog)\"sv, LR\"(\\:)\"sv, L\"dog\"sv, false},\r\n    {LR\"(1:\\dog)\"sv, L\"\"sv, L\"\"sv, LR\"(1:\\dog)\"sv, LR\"(1:)\"sv, L\"dog\"sv, false},\r\n    {LR\"(\\Dev\\msvc)\"sv, L\"\"sv, LR\"(\\)\"sv, LR\"(Dev\\msvc)\"sv, LR\"(\\Dev)\"sv, L\"msvc\"sv,\r\n        false}, // current drive root relative path\r\n    {LR\"(c:\\)\"sv, L\"c:\"sv, LR\"(\\)\"sv, L\"\"sv, LR\"(c:\\)\"sv, L\"\"sv, true}, // absolute Win32 path\r\n    {L\"c:/\"sv, L\"c:\"sv, L\"/\"sv, L\"\"sv, L\"c:/\"sv, L\"\"sv, true},\r\n    {LR\"(c:\\cat\\dog\\elk)\"sv, L\"c:\"sv, LR\"(\\)\"sv, LR\"(cat\\dog\\elk)\"sv, LR\"(c:\\cat\\dog)\"sv, L\"elk\"sv,\r\n        true}, // usual path form\r\n    {LR\"(c:\\cat\\dog\\elk\\)\"sv, L\"c:\"sv, LR\"(\\)\"sv, LR\"(cat\\dog\\elk\\)\"sv, LR\"(c:\\cat\\dog\\elk)\"sv, L\"\"sv,\r\n        true}, // with trailing backslash\r\n    {LR\"(c:/cat\\dog\\elk)\"sv, L\"c:\"sv, LR\"(/)\"sv, LR\"(cat\\dog\\elk)\"sv, LR\"(c:/cat\\dog)\"sv, L\"elk\"sv,\r\n        true}, // also with some /s\r\n    {LR\"(c:\\cat\\dog/elk/)\"sv, L\"c:\"sv, LR\"(\\)\"sv, LR\"(cat\\dog/elk/)\"sv, LR\"(c:\\cat\\dog/elk)\"sv, L\"\"sv, true},\r\n    // with extra long root-directory:\r\n    {LR\"(c:\\\\\\\\\\cat\\dog\\elk)\"sv, L\"c:\"sv, LR\"(\\\\\\\\\\)\"sv, LR\"(cat\\dog\\elk)\"sv, LR\"(c:\\\\\\\\\\cat\\dog)\"sv, L\"elk\"sv, true},\r\n    {LR\"(\\\\?\\x)\"sv, LR\"(\\\\?)\"sv, LR\"(\\)\"sv, L\"x\"sv, LR\"(\\\\?\\)\"sv, L\"x\"sv, true}, // special case \\\\?\\ prefix\r\n    {LR\"(\\\\?\\)\"sv, LR\"(\\\\?)\"sv, LR\"(\\)\"sv, L\"\"sv, LR\"(\\\\?\\)\"sv, L\"\"sv, true}, // special case \\\\?\\ prefix with no suffix\r\n    // with extra trailing \\, not the special prefix any longer, but becomes the \\\\server form:\r\n    {LR\"(\\\\?\\\\)\"sv, LR\"(\\\\?)\"sv, LR\"(\\\\)\"sv, L\"\"sv, LR\"(\\\\?\\\\)\"sv, L\"\"sv, true},\r\n    {LR\"(\\\\.\\x)\"sv, LR\"(\\\\.)\"sv, LR\"(\\)\"sv, L\"x\"sv, LR\"(\\\\.\\)\"sv, L\"x\"sv, true}, // also \\\\.\\ special prefix\r\n    {LR\"(\\??\\x)\"sv, LR\"(\\??)\"sv, LR\"(\\)\"sv, L\"x\"sv, LR\"(\\??\\)\"sv, L\"x\"sv, true}, // also \\??\\ special prefix\r\n    // adding an extra trailing \\ to this one makes it become a root relative path:\r\n    {LR\"(\\??\\\\)\"sv, L\"\"sv, LR\"(\\)\"sv, LR\"(??\\\\)\"sv, LR\"(\\??)\"sv, L\"\"sv, false},\r\n    {LR\"(\\x?\\x)\"sv, L\"\"sv, LR\"(\\)\"sv, LR\"(x?\\x)\"sv, LR\"(\\x?)\"sv, L\"x\"sv, false}, // not special (more follow)\r\n    {LR\"(\\?x\\x)\"sv, L\"\"sv, LR\"(\\)\"sv, LR\"(?x\\x)\"sv, LR\"(\\?x)\"sv, L\"x\"sv, false},\r\n    {LR\"(\\\\x\\x)\"sv, LR\"(\\\\x)\"sv, LR\"(\\)\"sv, LR\"(x)\"sv, LR\"(\\\\x\\)\"sv, L\"x\"sv, true},\r\n    {LR\"(\\??)\"sv, LR\"()\"sv, LR\"(\\)\"sv, LR\"(??)\"sv, LR\"(\\)\"sv, L\"??\"sv, false},\r\n    {LR\"(\\???)\"sv, LR\"()\"sv, LR\"(\\)\"sv, LR\"(???)\"sv, LR\"(\\)\"sv, L\"???\"sv, false},\r\n    {LR\"(\\????)\"sv, LR\"()\"sv, LR\"(\\)\"sv, LR\"(????)\"sv, LR\"(\\)\"sv, L\"????\"sv, false},\r\n    {LR\"(\\\\.xx)\"sv, LR\"(\\\\.xx)\"sv, L\"\"sv, L\"\"sv, LR\"(\\\\.xx)\"sv, L\"\"sv, true}, // became \\\\server form\r\n    {LR\"(\\\\server\\share)\"sv, LR\"(\\\\server)\"sv, LR\"(\\)\"sv, L\"share\"sv, LR\"(\\\\server\\)\"sv, L\"share\"sv,\r\n        true}, // network path\r\n    {LR\"(/\\server\\share)\"sv, LR\"(/\\server)\"sv, LR\"(\\)\"sv, L\"share\"sv, LR\"(/\\server\\)\"sv, L\"share\"sv, true},\r\n    {LR\"(/\\server/share)\"sv, LR\"(/\\server)\"sv, LR\"(/)\"sv, L\"share\"sv, LR\"(/\\server/)\"sv, L\"share\"sv, true},\r\n    {LR\"(//server\\share)\"sv, LR\"(//server)\"sv, LR\"(\\)\"sv, L\"share\"sv, LR\"(//server\\)\"sv, L\"share\"sv, true},\r\n    {LR\"(//server/share)\"sv, LR\"(//server)\"sv, LR\"(/)\"sv, L\"share\"sv, LR\"(//server/)\"sv, L\"share\"sv, true},\r\n    {LR\"(\\/server\\share)\"sv, LR\"(\\/server)\"sv, LR\"(\\)\"sv, L\"share\"sv, LR\"(\\/server\\)\"sv, L\"share\"sv, true},\r\n    {LR\"(\\/server/share)\"sv, LR\"(\\/server)\"sv, LR\"(/)\"sv, L\"share\"sv, LR\"(\\/server/)\"sv, L\"share\"sv, true},\r\n    // \\\\\\ doesn't fall into \\\\server, becomes a current drive root relative path:\r\n    {LR\"(\\\\\\\\)\"sv, L\"\"sv, LR\"(\\\\\\\\)\"sv, L\"\"sv, LR\"(\\\\\\\\)\"sv, L\"\"sv, false},\r\n    {LR\"(\\\\\\dog)\"sv, L\"\"sv, LR\"(\\\\\\)\"sv, L\"dog\"sv, LR\"(\\\\\\)\"sv, L\"dog\"sv, false},\r\n    // document that we don't treat \\\\?\\UNC special even if MSDN does:\r\n    {LR\"(\\\\?\\UNC\\server\\share)\"sv, LR\"(\\\\?)\"sv, LR\"(\\)\"sv, LR\"(UNC\\server\\share)\"sv, LR\"(\\\\?\\UNC\\server)\"sv, L\"share\"sv,\r\n        true},\r\n    {LR\"(\\\\?\\UNC)\"sv, LR\"(\\\\?)\"sv, LR\"(\\)\"sv, LR\"(UNC)\"sv, LR\"(\\\\?\\)\"sv, L\"UNC\"sv, true}, // other similar cases\r\n    {LR\"(\\\\?\\UNC\\server)\"sv, LR\"(\\\\?)\"sv, LR\"(\\)\"sv, LR\"(UNC\\server)\"sv, LR\"(\\\\?\\UNC)\"sv, L\"server\"sv, true},\r\n    {LR\"(\\\\?\\UNC\\server\\)\"sv, LR\"(\\\\?)\"sv, LR\"(\\)\"sv, LR\"(UNC\\server\\)\"sv, LR\"(\\\\?\\UNC\\server)\"sv, L\"\"sv, true},\r\n    {LR\"(\\\\?\\UNC\\\\)\"sv, LR\"(\\\\?)\"sv, LR\"(\\)\"sv, LR\"(UNC\\\\)\"sv, LR\"(\\\\?\\UNC)\"sv, L\"\"sv, true},\r\n    // document that drive letters aren't special with special prefixes:\r\n    {LR\"(\\\\.\\C:attempt_at_relative)\"sv, LR\"(\\\\.)\"sv, LR\"(\\)\"sv, LR\"(C:attempt_at_relative)\"sv, LR\"(\\\\.\\)\"sv,\r\n        L\"C:attempt_at_relative\"sv, true},\r\n    // other interesting user-submitted test cases:\r\n    {LR\"(\\)\"sv, L\"\"sv, LR\"(\\)\"sv, L\"\"sv, LR\"(\\)\"sv, L\"\"sv, false},\r\n    {LR\"(\\\\)\"sv, L\"\"sv, LR\"(\\\\)\"sv, L\"\"sv, LR\"(\\\\)\"sv, L\"\"sv, false},\r\n    {LR\"(\\\\\\)\"sv, L\"\"sv, LR\"(\\\\\\)\"sv, L\"\"sv, LR\"(\\\\\\)\"sv, L\"\"sv, false},\r\n    {LR\"(\\\\\\.)\"sv, L\"\"sv, LR\"(\\\\\\)\"sv, L\".\"sv, LR\"(\\\\\\)\"sv, L\".\"sv, false},\r\n    {LR\"(\\\\\\..)\"sv, L\"\"sv, LR\"(\\\\\\)\"sv, L\"..\"sv, LR\"(\\\\\\)\"sv, L\"..\"sv, false},\r\n    {LR\"(\\\\\\.\\)\"sv, L\"\"sv, LR\"(\\\\\\)\"sv, LR\"(.\\)\"sv, LR\"(\\\\\\.)\"sv, L\"\"sv, false},\r\n    {LR\"(\\\\\\..\\)\"sv, L\"\"sv, LR\"(\\\\\\)\"sv, LR\"(..\\)\"sv, LR\"(\\\\\\..)\"sv, L\"\"sv, false},\r\n    {L\"/\"sv, L\"\"sv, L\"/\"sv, L\"\"sv, L\"/\"sv, L\"\"sv, false}, {L\"//\"sv, L\"\"sv, L\"//\"sv, L\"\"sv, L\"//\"sv, L\"\"sv, false},\r\n    {L\"///\"sv, L\"\"sv, L\"///\"sv, L\"\"sv, L\"///\"sv, L\"\"sv, false},\r\n    {LR\"(\\/)\"sv, L\"\"sv, LR\"(\\/)\"sv, L\"\"sv, LR\"(\\/)\"sv, L\"\"sv, false},\r\n    {L\"/c\"sv, L\"\"sv, L\"/\"sv, L\"c\"sv, L\"/\"sv, L\"c\"sv, false}, {L\"/c:\"sv, L\"\"sv, L\"/\"sv, L\"c:\"sv, L\"/\"sv, L\"c:\"sv, false},\r\n    {L\"..\"sv, L\"\"sv, L\"\"sv, L\"..\"sv, L\"\"sv, L\"..\"sv, false},\r\n    {LR\"(\\.)\"sv, L\"\"sv, LR\"(\\)\"sv, L\".\"sv, LR\"(\\)\"sv, L\".\"sv, false},\r\n    {L\"/.\"sv, L\"\"sv, L\"/\"sv, L\".\"sv, L\"/\"sv, L\".\"sv, false},\r\n    {LR\"(\\..)\"sv, L\"\"sv, LR\"(\\)\"sv, L\"..\"sv, LR\"(\\)\"sv, L\"..\"sv, false},\r\n    {LR\"(\\..\\..)\"sv, L\"\"sv, LR\"(\\)\"sv, LR\"(..\\..)\"sv, LR\"(\\..)\"sv, L\"..\"sv, false},\r\n    {LR\"(c:\\..)\"sv, L\"c:\"sv, LR\"(\\)\"sv, L\"..\"sv, LR\"(c:\\)\"sv, L\"..\"sv, true},\r\n    {L\"c:..\"sv, L\"c:\"sv, L\"\"sv, L\"..\"sv, L\"c:\"sv, L\"..\"sv, false},\r\n    {LR\"(c:..\\..)\"sv, L\"c:\"sv, L\"\"sv, LR\"(..\\..)\"sv, LR\"(c:..)\"sv, L\"..\"sv, false},\r\n    {LR\"(c:\\..\\..)\"sv, L\"c:\"sv, LR\"(\\)\"sv, LR\"(..\\..)\"sv, LR\"(c:\\..)\"sv, L\"..\"sv, true},\r\n    {LR\"(\\\\server\\..)\"sv, LR\"(\\\\server)\"sv, LR\"(\\)\"sv, LR\"(..)\"sv, LR\"(\\\\server\\)\"sv, L\"..\"sv, true},\r\n    {LR\"(\\\\server\\share\\..\\..)\"sv, LR\"(\\\\server)\"sv, LR\"(\\)\"sv, LR\"(share\\..\\..)\"sv, LR\"(\\\\server\\share\\..)\"sv, L\"..\"sv,\r\n        true},\r\n    {LR\"(\\\\server\\.\\share)\"sv, LR\"(\\\\server)\"sv, LR\"(\\)\"sv, LR\"(.\\share)\"sv, LR\"(\\\\server\\.)\"sv, L\"share\"sv, true},\r\n    {LR\"(\\\\server\\.\\..\\share)\"sv, LR\"(\\\\server)\"sv, LR\"(\\)\"sv, LR\"(.\\..\\share)\"sv, LR\"(\\\\server\\.\\..)\"sv, L\"share\"sv,\r\n        true},\r\n    {LR\"(\\..\\../)\"sv, L\"\"sv, LR\"(\\)\"sv, LR\"(..\\../)\"sv, LR\"(\\..\\..)\"sv, L\"\"sv, false},\r\n    {LR\"(\\\\..\\../)\"sv, LR\"(\\\\..)\"sv, LR\"(\\)\"sv, LR\"(../)\"sv, LR\"(\\\\..\\..)\"sv, L\"\"sv, true},\r\n    {LR\"(\\\\\\..\\../)\"sv, L\"\"sv, LR\"(\\\\\\)\"sv, LR\"(..\\../)\"sv, LR\"(\\\\\\..\\..)\"sv, L\"\"sv, false},\r\n    {LR\"(\\\\?/)\"sv, LR\"(\\\\?)\"sv, LR\"(/)\"sv, L\"\"sv, LR\"(\\\\?/)\"sv, L\"\"sv, true},\r\n    {LR\"(\\/?/)\"sv, LR\"(\\/?)\"sv, LR\"(/)\"sv, L\"\"sv, LR\"(\\/?/)\"sv, L\"\"sv, true},\r\n    {L\"//?/\"sv, L\"//?\"sv, L\"/\"sv, L\"\"sv, L\"//?/\"sv, L\"\"sv, true},\r\n    {L\"//server\"sv, L\"//server\"sv, L\"\"sv, L\"\"sv, L\"//server\"sv, L\"\"sv, true},\r\n    {L\"[:/abc\"sv, L\"\"sv, L\"\"sv, L\"[:/abc\"sv, L\"[:\"sv, L\"abc\"sv, false}, // bug where [ was considered a drive letter\r\n};\r\n\r\nstruct decomposition_test_result {\r\n    path rootName;\r\n    bool hasRootName;\r\n    path rootDirectory;\r\n    bool hasRootDirectory;\r\n    path rootPath;\r\n    bool hasRootPath;\r\n    path relativePath;\r\n    bool hasRelativePath;\r\n    path parentPath;\r\n    bool hasParentPath;\r\n    path filename;\r\n    bool hasFilename;\r\n    bool absolute;\r\n\r\n    explicit decomposition_test_result(const path& p)\r\n        : rootName(p.root_name()), hasRootName(p.has_root_name()), rootDirectory(p.root_directory()),\r\n          hasRootDirectory(p.has_root_directory()), rootPath(p.root_path()), hasRootPath(p.has_root_path()),\r\n          relativePath(p.relative_path()), hasRelativePath(p.has_relative_path()), parentPath(p.parent_path()),\r\n          hasParentPath(p.has_parent_path()), filename(p.filename()), hasFilename(p.has_filename()),\r\n          absolute(p.is_absolute()) {\r\n        EXPECT(absolute == !p.is_relative());\r\n    }\r\n\r\n    friend wostream& operator<<(wostream& wos, const decomposition_test_result& testCase) {\r\n        wos << boolalpha << L\"Actual root_name:      \" << testCase.rootName.native() << L\"\\n\"\r\n            << L\"Actual root_directory: \" << testCase.rootDirectory.native() << L\"\\n\"\r\n            << L\"Actual root_path:      \" << testCase.rootPath.native() << L\"\\n\"\r\n            << L\"Actual relative_path:  \" << testCase.relativePath.native() << L\"\\n\"\r\n            << L\"Actual parent_path:    \" << testCase.parentPath.native() << L\"\\n\"\r\n            << L\"Actual filename:       \" << testCase.filename.native() << L\"\\n\"\r\n            << L\"Actual absolute:       \" << testCase.absolute << L\"\\n\";\r\n\r\n        return wos;\r\n    }\r\n};\r\n\r\nbool run_decomp_test_case(const decomposition_test_case& testCase) {\r\n    const decomposition_test_result actual(testCase.inputPath);\r\n    if (actual.rootName.native() == testCase.rootName && actual.hasRootName != testCase.rootName.empty()\r\n        && actual.rootDirectory.native() == testCase.rootDirectory\r\n        && actual.hasRootDirectory != testCase.rootDirectory.empty()\r\n        && actual.rootPath.native()\r\n               == static_cast<wstring>(testCase.rootName) + static_cast<wstring>(testCase.rootDirectory)\r\n        && actual.hasRootPath != (testCase.rootName.empty() && testCase.rootDirectory.empty())\r\n        && actual.relativePath.native() == testCase.relativePath\r\n        && actual.hasRelativePath != testCase.relativePath.empty() && actual.parentPath.native() == testCase.parentPath\r\n        && actual.hasParentPath != testCase.parentPath.empty() && actual.filename.native() == testCase.filename\r\n        && actual.hasFilename != testCase.filename.empty() && actual.absolute == testCase.absolute) {\r\n        return true;\r\n    }\r\n\r\n    wcerr << L\"Test failure:\\n\" << testCase << actual;\r\n\r\n    return false;\r\n}\r\n\r\nstruct stem_test_case {\r\n    wstring_view input;\r\n    wstring_view stem;\r\n    wstring_view extension;\r\n};\r\n\r\nconstexpr stem_test_case stemTestCases[] = {\r\n    {L\".\"sv, L\".\"sv, L\"\"sv}, // . and .. special cases\r\n    {L\"..\"sv, L\"..\"sv, L\"\"sv},\r\n    {L\".config\"sv, L\".config\"sv, L\"\"sv}, // filenames with 1 leading period are special\r\n    {L\"..config\"sv, L\".\"sv, L\".config\"sv}, // 2 periods aren't special anymore\r\n    {L\"...config\"sv, L\"..\"sv, L\".config\"sv},\r\n    {L\"classic_textfile.txt\"sv, L\"classic_textfile\"sv, L\".txt\"sv},\r\n    {L\"cat.dog.elk.tar\"sv, L\"cat.dog.elk\"sv, L\".tar\"sv},\r\n    {L\"cat.dog.elk\"sv, L\"cat.dog\"sv, L\".elk\"sv},\r\n    {L\"cat.dog\"sv, L\"cat\"sv, L\".dog\"sv},\r\n    {L\"cat\"sv, L\"cat\"sv, L\"\"sv},\r\n    {L\"cat.\"sv, L\"cat\"sv, L\".\"sv},\r\n\r\n    // all of the above with alternate data streams\r\n    {L\".:alternate_meow\"sv, L\".\"sv, L\"\"sv},\r\n    {L\"..:alternate_dog\"sv, L\"..\"sv, L\"\"sv},\r\n    {L\".config:alternate_elk\"sv, L\".config\"sv, L\"\"sv},\r\n    {L\"..config:alternate_other_things\"sv, L\".\"sv, L\".config\"sv},\r\n    {L\"...config:alternate_other_things\"sv, L\"..\"sv, L\".config\"sv},\r\n    {L\"classic_textfile.txt:$DATA\"sv, L\"classic_textfile\"sv, L\".txt\"sv},\r\n    {L\"cat.dog.elk.tar:pay_no_attention\"sv, L\"cat.dog.elk\"sv, L\".tar\"sv},\r\n    {L\"cat.dog.elk:to behind this curtain\"sv, L\"cat.dog\"sv, L\".elk\"sv},\r\n    {L\"cat.dog:even:if:this:curtain:is:malformed\"sv, L\"cat\"sv, L\".dog\"sv},\r\n    {L\"cat:what?\"sv, L\"cat\"sv, L\"\"sv},\r\n    {L\"cat.:alternate_fun\"sv, L\"cat\"sv, L\".\"sv},\r\n};\r\n\r\nbool run_stem_test_case(const stem_test_case& testCase) {\r\n    const path p(testCase.input);\r\n    if (p.stem() == testCase.stem && p.extension() == testCase.extension) {\r\n        return true;\r\n    }\r\n\r\n    wcerr << L\"Expected \" << p.native() << L\" to have stem() \" << testCase.stem << L\" and extension() \"\r\n          << testCase.extension << L\", but it actually has stem() \" << p.stem().native() << L\" and extension() \"\r\n          << p.extension().native() << L\"\\n\";\r\n\r\n    return false;\r\n}\r\n\r\nenum class compare_result { less, equal, greater };\r\n\r\nwostream& operator<<(wostream& wos, const compare_result c) {\r\n    switch (c) {\r\n    case compare_result::less:\r\n        return wos << L\"less\";\r\n    case compare_result::equal:\r\n        return wos << L\"equal\";\r\n    case compare_result::greater:\r\n        return wos << L\"greater\";\r\n    default:\r\n        abort();\r\n    }\r\n}\r\n\r\nstruct compare_test_case {\r\n    wstring_view left;\r\n    wstring_view right;\r\n    compare_result expected;\r\n};\r\n\r\nconstexpr compare_test_case compareTestCases[] = {\r\n    // basic tests:\r\n    {L\"\"sv, L\"\"sv, compare_result::equal},\r\n    {L\"\"sv, L\"anything\"sv, compare_result::less},\r\n    {L\"anything\"sv, L\"\"sv, compare_result::greater},\r\n    {L\"c:\"sv, L\"c:\"sv, compare_result::equal},\r\n    // different root_directory values compare equal:\r\n    {L\"/\"sv, L\"//\"sv, compare_result::equal},\r\n    {L\"//////\"sv, L\"//\"sv, compare_result::equal},\r\n    // different counts of /s and different kinds compare equal:\r\n    {L\"c://a/b\"sv, L\"c:/a//b\"sv, compare_result::equal},\r\n    {L\"c://a/b\"sv, LR\"(c:/a/\\b)\"sv, compare_result::equal},\r\n    {L\"c:/a/b///c\"sv, L\"c:/a///b/c\"sv, compare_result::equal},\r\n    {LR\"(c:/a/b\\//c)\"sv, LR\"(c:/a//\\b/c)\"sv, compare_result::equal},\r\n    // comparing root_name:\r\n    {LR\"(\\\\server\\share)\"sv, L\"C:/a\"sv, compare_result::greater},\r\n    {LR\"(//server\\share)\"sv, L\"C:/a\"sv, compare_result::less},\r\n    // doesn't actually get to has_root_name test, since root_name comparison differs:\r\n    {LR\"(c:a)\"sv, LR\"(C:\\a)\"sv, compare_result::greater},\r\n    // different values of has_root_directory():\r\n    {L\"c:/\"sv, L\"c:\"sv, compare_result::greater},\r\n    {L\"c:\"sv, L\"c:/\"sv, compare_result::less},\r\n    {L\"c:////\"sv, L\"c://\"sv, compare_result::equal},\r\n    {LR\"(c:\\a)\"sv, LR\"(c:a)\"sv, compare_result::greater},\r\n    {LR\"(c:a)\"sv, LR\"(c:\\a)\"sv, compare_result::less},\r\n    // fewer path elements compare less:\r\n    {L\"c:/a\"sv, L\"c:/a/b\"sv, compare_result::less},\r\n    {L\"c:/a/b\"sv, L\"c:/a\"sv, compare_result::greater},\r\n    {L\"c:/a/\"sv, L\"c:/a/b\"sv, compare_result::less},\r\n    {L\"c:/a/b\"sv, L\"c:/a/\"sv, compare_result::greater},\r\n    {L\"c:/a/b\"sv, L\"c:/a/b/\"sv, compare_result::less}, // trailing empty element\r\n    {L\"c:/a/b/\"sv, L\"c:/a/b\"sv, compare_result::greater},\r\n    // comparisons inside path elements, note assumption L'A' < L'a':\r\n    {L\"c:/CASEMATTERS\"sv, L\"c:/casematters\"sv, compare_result::less},\r\n    {L\"c:/abcdefg\"sv, L\"c:/hijklmn\"sv, compare_result::less},\r\n    {L\"c:/casematters\"sv, L\"c:/CASEMATTERS\"sv, compare_result::greater},\r\n    {L\"c:/hijklmn\"sv, L\"c:/abcdefg\"sv, compare_result::greater},\r\n    // differ only in where the / goes:\r\n    {L\"c:/ap/ple\"sv, L\"c:/app/le\"sv, compare_result::less},\r\n    {LR\"(c:/ap\\ple)\"sv, LR\"(c:/app\\le)\"sv, compare_result::less},\r\n    {L\"c:/ap/ple\"sv, LR\"(c:/app\\le)\"sv, compare_result::less},\r\n    {LR\"(c:/ap\\ple)\"sv, L\"c:/app/le\"sv, compare_result::less},\r\n};\r\n\r\nbool run_compare_test_case(const compare_test_case& testCase) {\r\n    const path leftPath(testCase.left);\r\n    const path rightPath(testCase.right);\r\n    const int actualCmp        = leftPath.compare(testCase.right); // string_view\r\n    const size_t leftPathHash  = hash_value(leftPath);\r\n    const size_t rightPathHash = hash_value(rightPath);\r\n    // technically the standard only requires that these agree in sign, but our implementation\r\n    // wants to always return the same value\r\n    EXPECT(leftPath.compare(rightPath) == actualCmp); // const path&\r\n    EXPECT(leftPath.compare(rightPath.native()) == actualCmp); // const string_type&\r\n    EXPECT(leftPath.compare(rightPath.c_str()) == actualCmp); // const value_type *\r\n    // LWG-3657: hash<filesystem::path>::operator() returns the same value as filesystem::hash_value\r\n    EXPECT(hash<path>{}(leftPath) == leftPathHash);\r\n    EXPECT(hash<path>{}(rightPath) == rightPathHash);\r\n    compare_result actual;\r\n    if (actualCmp < 0) {\r\n        actual = compare_result::less;\r\n        EXPECT(rightPath.compare(testCase.left) > 0);\r\n        EXPECT(!(leftPath == rightPath));\r\n        EXPECT(leftPath != rightPath);\r\n        EXPECT(leftPath < rightPath);\r\n        EXPECT(!(leftPath > rightPath));\r\n        EXPECT(leftPath <= rightPath);\r\n        EXPECT(!(leftPath >= rightPath));\r\n        EXPECT(leftPathHash != rightPathHash); // not required, but desirable\r\n    } else if (actualCmp > 0) {\r\n        actual = compare_result::greater;\r\n        EXPECT(rightPath.compare(testCase.left) < 0);\r\n        EXPECT(!(leftPath == rightPath));\r\n        EXPECT(leftPath != rightPath);\r\n        EXPECT(!(leftPath < rightPath));\r\n        EXPECT(leftPath > rightPath);\r\n        EXPECT(!(leftPath <= rightPath));\r\n        EXPECT(leftPath >= rightPath);\r\n        EXPECT(leftPathHash != rightPathHash); // not required, but desirable\r\n    } else {\r\n        actual = compare_result::equal;\r\n        EXPECT(leftPath == rightPath);\r\n        EXPECT(!(leftPath != rightPath));\r\n        EXPECT(!(leftPath < rightPath));\r\n        EXPECT(!(leftPath > rightPath));\r\n        EXPECT(leftPath <= rightPath);\r\n        EXPECT(leftPath >= rightPath);\r\n        EXPECT(leftPathHash == rightPathHash);\r\n    }\r\n\r\n    if (testCase.expected == actual) {\r\n        return true;\r\n    }\r\n\r\n    wcerr << L\"Unexpected comparison result:\\nLeft:  \" << testCase.left << L\"\\nRight: \" << testCase.right\r\n          << L\"\\nExpected: \" << testCase.expected << L\"\\n Actual: \" << actual << L\"\\n\";\r\n\r\n    return false;\r\n}\r\n\r\nstruct slash_test_case {\r\n    wstring_view a;\r\n    wstring_view b;\r\n    wstring_view expected;\r\n};\r\n\r\nconstexpr slash_test_case slashTestCases[] = {\r\n    {L\"\"sv, L\"\"sv, L\"\"sv},\r\n    {L\"relative\"sv, L\"other\"sv, LR\"(relative\\other)\"sv},\r\n    {L\"//server\"sv, L\"share\"sv, LR\"(//server\\share)\"sv},\r\n    {L\"//server/\"sv, L\"share\"sv, LR\"(//server/share)\"sv},\r\n    {L\"cat\"sv, L\"c:/dog\"sv, L\"c:/dog\"sv},\r\n    {L\"cat\"sv, L\"c:\"sv, L\"c:\"sv},\r\n    {L\"cat\"sv, L\"\"sv, LR\"(cat\\)\"sv}, // note addition of \"magic empty path\" in decomposition\r\n    // for the empty path on the left, when testing (!is_root_directory && is_absolute) || has_filename\r\n    // is_absolute is false, and has_filename is false, so no / should be added\r\n    {L\"\"sv, L\"cat\"sv, L\"cat\"sv},\r\n    {L\"./\"sv, L\"cat\"sv, L\"./cat\"sv}, // original test case catching a bug in the above\r\n    {L\"c:\"sv, L\"\"sv, L\"c:\"sv},\r\n    {L\"c:\"sv, L\"dog\"sv, L\"c:dog\"sv},\r\n    {L\"c:cat\"sv, L\"/dog\"sv, L\"c:/dog\"sv},\r\n    {L\"c:/cat\"sv, L\"/dog\"sv, L\"c:/dog\"sv},\r\n    {L\"c:cat\"sv, L\"c:dog\"sv, LR\"(c:cat\\dog)\"sv},\r\n    {L\"c:cat\"sv, L\"d:dog\"sv, L\"d:dog\"sv},\r\n    {L\"c:abc\"sv, L\"def\"sv, LR\"(c:abc\\def)\"sv},\r\n    {L\"c:abc\"sv, L\"dog/def\"sv, LR\"(c:abc\\dog/def)\"sv},\r\n    {L\"//?/frobinate\"sv, LR\"(\\that's strange)\"sv, LR\"(//?\\that's strange)\"sv},\r\n    {L\"//?/\"sv, LR\"(\\that's strange)\"sv, LR\"(//?\\that's strange)\"sv},\r\n};\r\n\r\nbool run_slash_test_case(const slash_test_case& testCase) {\r\n    path p(testCase.a);\r\n    p /= testCase.b;\r\n\r\n    if (p.native() != testCase.expected) {\r\n        wcerr << L\"With operator/=, expected \" << testCase.a << L\" / \" << testCase.b << L\" to be \" << testCase.expected\r\n              << L\" but it was \" << p.native() << L\"\\n\";\r\n        return false;\r\n    }\r\n\r\n    // Also test operator/, which was optimized by GH-4136.\r\n    p = path{testCase.a} / path{testCase.b};\r\n\r\n    if (p.native() != testCase.expected) {\r\n        wcerr << L\"With operator/, expected \" << testCase.a << L\" / \" << testCase.b << L\" to be \" << testCase.expected\r\n              << L\" but it was \" << p.native() << L\"\\n\";\r\n        return false;\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_iterators() {\r\n    static_assert(is_same_v<path::iterator::iterator_category, input_iterator_tag>);\r\n    static_assert(is_same_v<path::iterator::value_type, path>);\r\n    static_assert(is_same_v<path::iterator::difference_type, ptrdiff_t>);\r\n    static_assert(is_same_v<path::iterator::pointer, const path*>);\r\n    static_assert(is_same_v<path::iterator::reference, const path&>);\r\n\r\n    const path::iterator a;\r\n    const path::iterator b;\r\n    EXPECT(a == b);\r\n    EXPECT(!(a != b));\r\n\r\n    const path emptyPath{};\r\n    EXPECT(emptyPath.begin() == emptyPath.end());\r\n\r\n    const path firstRootName(L\"c:/cat\"sv);\r\n    auto firstRootNameIter = firstRootName.begin();\r\n    EXPECT(firstRootName.begin()->native() == L\"c:\");\r\n    EXPECT((*firstRootName.begin()).native() == L\"c:\"); // also test op* once\r\n    ++firstRootNameIter;\r\n    EXPECT(firstRootNameIter->native() == L\"/\");\r\n    ++firstRootNameIter;\r\n    EXPECT(firstRootNameIter->native() == L\"cat\");\r\n    ++firstRootNameIter;\r\n    EXPECT(firstRootNameIter == firstRootName.end());\r\n    --firstRootNameIter;\r\n    EXPECT(firstRootNameIter->native() == L\"cat\");\r\n    --firstRootNameIter;\r\n    EXPECT(firstRootNameIter->native() == L\"/\");\r\n    --firstRootNameIter;\r\n    EXPECT(firstRootNameIter->native() == L\"c:\");\r\n    EXPECT(firstRootNameIter == firstRootName.begin());\r\n\r\n    const path noRootDirectory(L\"c:cat/dog\"sv);\r\n    auto noRootDirectoryiter = noRootDirectory.begin();\r\n    EXPECT(noRootDirectoryiter->native() == L\"c:\");\r\n    ++noRootDirectoryiter;\r\n    EXPECT(noRootDirectoryiter->native() == L\"cat\");\r\n    ++noRootDirectoryiter;\r\n    EXPECT(noRootDirectoryiter->native() == L\"dog\");\r\n    ++noRootDirectoryiter;\r\n    EXPECT(noRootDirectoryiter == noRootDirectory.end());\r\n    --noRootDirectoryiter;\r\n    EXPECT(noRootDirectoryiter->native() == L\"dog\");\r\n    --noRootDirectoryiter;\r\n    EXPECT(noRootDirectoryiter->native() == L\"cat\");\r\n    --noRootDirectoryiter;\r\n    EXPECT(noRootDirectoryiter->native() == L\"c:\");\r\n    EXPECT(noRootDirectoryiter == noRootDirectory.begin());\r\n\r\n    const path firstRootDirectory(L\"/cat\"sv);\r\n    auto firstRootDirectoryIter = firstRootDirectory.begin();\r\n    EXPECT(firstRootDirectoryIter->native() == L\"/\");\r\n    ++firstRootDirectoryIter;\r\n    EXPECT(firstRootDirectoryIter->native() == L\"cat\");\r\n    ++firstRootDirectoryIter;\r\n    EXPECT(firstRootDirectoryIter == firstRootDirectory.end());\r\n    --firstRootDirectoryIter;\r\n    EXPECT(firstRootDirectoryIter->native() == L\"cat\");\r\n    --firstRootDirectoryIter;\r\n    EXPECT(firstRootDirectoryIter->native() == L\"/\");\r\n    EXPECT(firstRootDirectoryIter == firstRootDirectory.begin());\r\n\r\n    const path completelyRelative(L\"hello world\"sv);\r\n    auto completelyRelativeIter = completelyRelative.begin();\r\n    EXPECT(completelyRelative.begin()->native() == L\"hello world\");\r\n    ++completelyRelativeIter;\r\n    EXPECT(completelyRelativeIter == completelyRelative.end());\r\n    --completelyRelativeIter;\r\n    EXPECT(completelyRelative.begin()->native() == L\"hello world\");\r\n    EXPECT(completelyRelativeIter == completelyRelative.begin());\r\n\r\n    const path slashesTest(L\"a/b//c////d////e///\"sv);\r\n    auto slashesIter = slashesTest.begin();\r\n    EXPECT(slashesIter->native() == L\"a\");\r\n    ++slashesIter;\r\n    EXPECT(slashesIter->native() == L\"b\");\r\n    ++slashesIter;\r\n    EXPECT(slashesIter->native() == L\"c\");\r\n    ++slashesIter;\r\n    EXPECT(slashesIter->native() == L\"d\");\r\n    ++slashesIter;\r\n    EXPECT(slashesIter->native() == L\"e\");\r\n    ++slashesIter;\r\n    EXPECT(slashesIter->native() == L\"\");\r\n    ++slashesIter;\r\n    EXPECT(slashesIter == slashesTest.end());\r\n    --slashesIter;\r\n    EXPECT(slashesIter->native() == L\"\");\r\n    --slashesIter;\r\n    EXPECT(slashesIter->native() == L\"e\");\r\n    --slashesIter;\r\n    EXPECT(slashesIter->native() == L\"d\");\r\n    --slashesIter;\r\n    EXPECT(slashesIter->native() == L\"c\");\r\n    --slashesIter;\r\n    EXPECT(slashesIter->native() == L\"b\");\r\n    --slashesIter;\r\n    EXPECT(slashesIter->native() == L\"a\");\r\n    EXPECT(slashesIter == slashesTest.begin());\r\n\r\n    // Also test postincrement and postdecrement:\r\n    EXPECT(slashesIter++ == slashesTest.begin());\r\n    const auto oldSlashesIter = slashesIter;\r\n    EXPECT(slashesIter-- == oldSlashesIter);\r\n    EXPECT(slashesIter == slashesTest.begin());\r\n\r\n    // Also test algorithms:\r\n    vector<path> vec;\r\n    copy(slashesTest.begin(), slashesTest.end(), back_inserter(vec)); // algorithm uses op++\r\n    EXPECT(vec == vector<path>({L\"a\", L\"b\", L\"c\", L\"d\", L\"e\", L\"\"}));\r\n    EXPECT(equal(vec.begin(), vec.end(), slashesTest.begin())); // algorithm warns about unchecked iterators\r\n    vec.clear();\r\n    reverse_copy(slashesTest.begin(), slashesTest.end(), back_inserter(vec)); // algorithm uses op--\r\n    EXPECT(vec == vector<path>({L\"\", L\"e\", L\"d\", L\"c\", L\"b\", L\"a\"}));\r\n\r\n    const path justSlash(L\"/\"sv);\r\n    auto justSlashIter = justSlash.begin();\r\n    EXPECT(justSlashIter->native() == L\"/\");\r\n    ++justSlashIter;\r\n    EXPECT(justSlashIter == justSlash.end());\r\n    --justSlashIter;\r\n    EXPECT(justSlashIter->native() == L\"/\");\r\n    EXPECT(justSlashIter == justSlash.begin());\r\n\r\n    const path slashRootTest(L\"//?/x:/a\"sv);\r\n    auto slashRootIter = slashRootTest.begin();\r\n    EXPECT(slashRootIter->native() == L\"//?\");\r\n    ++slashRootIter;\r\n    EXPECT(slashRootIter->native() == L\"/\");\r\n    ++slashRootIter;\r\n    EXPECT(slashRootIter->native() == L\"x:\");\r\n    ++slashRootIter;\r\n    EXPECT(slashRootIter->native() == L\"a\");\r\n    ++slashRootIter;\r\n    EXPECT(slashRootIter == slashRootTest.end());\r\n    --slashRootIter;\r\n    EXPECT(slashRootIter->native() == L\"a\");\r\n    --slashRootIter;\r\n    EXPECT(slashRootIter->native() == L\"x:\");\r\n    --slashRootIter;\r\n    EXPECT(slashRootIter->native() == L\"/\");\r\n    --slashRootIter;\r\n    EXPECT(slashRootIter->native() == L\"//?\");\r\n    EXPECT(slashRootIter == slashRootTest.begin());\r\n}\r\n\r\nvoid test_other_path_interface() {\r\n    // exhaustive parsing tested elsewhere\r\n    static_assert(is_same_v<wchar_t, path::value_type>);\r\n    static_assert(is_same_v<wstring, path::string_type>);\r\n    path constructed_from_temporary_wstring(L\"abc\"s);\r\n    EXPECT(constructed_from_temporary_wstring.native() == L\"abc\");\r\n    const path constructed_from_temporary_wstring_and_auto_format(L\"abc\"s, path::auto_format);\r\n    EXPECT(constructed_from_temporary_wstring_and_auto_format.native() == L\"abc\");\r\n    const path constructed_from_temporary_wstring_and_native_format(L\"abc\"s, path::native_format);\r\n    EXPECT(constructed_from_temporary_wstring_and_native_format.native() == L\"abc\");\r\n    const path constructed_from_temporary_wstring_and_generic_format(L\"abc\"s, path::generic_format);\r\n    EXPECT(constructed_from_temporary_wstring_and_generic_format.native() == L\"abc\");\r\n    const path constructed_from_wstring_view(L\"abc\"sv);\r\n    EXPECT(constructed_from_wstring_view.native() == L\"abc\");\r\n\r\n    constructed_from_temporary_wstring = L\"also assignable\"s;\r\n    EXPECT(constructed_from_temporary_wstring.native() == L\"also assignable\");\r\n    constructed_from_temporary_wstring.assign(L\"also assign()able\"s);\r\n    EXPECT(constructed_from_temporary_wstring.native() == L\"also assign()able\");\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wself-assign-overloaded\"\r\n#endif // __clang__\r\n\r\n    const auto shortName = L\"a\"sv;\r\n    const auto longName  = L\"some extremely long path that certainly won't trigger the small string optimization\"sv;\r\n    path selfAssignPath(shortName);\r\n    selfAssignPath = selfAssignPath;\r\n    EXPECT(selfAssignPath.native() == shortName);\r\n    selfAssignPath = longName;\r\n    selfAssignPath = selfAssignPath;\r\n    EXPECT(selfAssignPath.native() == longName);\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // __clang__\r\n\r\n    path p;\r\n    p += path(L\"abc\"sv);\r\n    EXPECT(p.native() == L\"abc\");\r\n    p += L\"def\"s;\r\n    EXPECT(p.native() == L\"abcdef\");\r\n    p += L\"hij\"sv;\r\n    EXPECT(p.native() == L\"abcdefhij\");\r\n    p += L\"klm\";\r\n    EXPECT(p.native() == L\"abcdefhijklm\");\r\n    p += L'n';\r\n    EXPECT(p.native() == L\"abcdefhijklmn\");\r\n\r\n    EXPECT(!p.empty());\r\n    p.clear();\r\n    EXPECT(p.empty());\r\n    EXPECT(p.native().empty());\r\n\r\n    p = L\"//?/a/b/c/\"sv;\r\n    EXPECT(p.make_preferred().native() == LR\"(\\\\?\\a\\b\\c\\)\");\r\n    EXPECT(p.remove_filename().native() == LR\"(\\\\?\\a\\b\\c\\)\");\r\n    p = L\"//?/a/b/c\"sv;\r\n    EXPECT(p.remove_filename().native() == L\"//?/a/b/\");\r\n    EXPECT(p.replace_filename(L\"c:a/b/c/d\"sv).native() == L\"c:a/b/c/d\");\r\n\r\n    p = L\"cat.txt\"sv;\r\n    EXPECT(p.replace_extension().native() == L\"cat\");\r\n    p = L\"cat.txt\"sv;\r\n    EXPECT(p.replace_extension(path{}).native() == L\"cat\");\r\n\r\n    p = L\"cat.txt\"sv;\r\n    EXPECT(p.replace_extension(L\"doc\"sv).native() == L\"cat.doc\");\r\n\r\n    p = L\"cat.txt\"sv;\r\n    EXPECT(p.replace_extension(L\".doc\"sv).native() == L\"cat.doc\");\r\n\r\n    path other(L\"swap me!\"sv);\r\n    p.swap(other);\r\n    EXPECT(p.native() == L\"swap me!\" && other.native() == L\"cat.doc\");\r\n    swap(p, other);\r\n    EXPECT(p.native() == L\"cat.doc\" && other.native() == L\"swap me!\");\r\n    static_assert(noexcept(p.swap(other)));\r\n    static_assert(noexcept(swap(p, other)));\r\n\r\n    EXPECT(p.c_str() == p.native());\r\n    EXPECT(p.c_str() == static_cast<wstring>(p));\r\n    EXPECT(p.c_str() == p.wstring());\r\n\r\n    // document that we don't remove alternate data streams here\r\n    p = LR\"(c:\\a\\b\\c:ads\\d\\e\\f:ads)\"sv;\r\n    EXPECT(p.generic_wstring() == LR\"(c:/a/b/c:ads/d/e/f:ads)\");\r\n}\r\n\r\nvoid test_remove_filename_and_sep() {\r\n    auto f = [](wstring_view before, wstring_view after) {\r\n        path p{before};\r\n        p._Remove_filename_and_separator();\r\n        if (p.native() != after) { // look for exact match\r\n            wcerr << L\"_Remove_filename_and_separator('\" << before << L\"') => '\" << p.native() << L\"' expected '\"\r\n                  << after << L\"'\\n\";\r\n            pass = false;\r\n        }\r\n    };\r\n    f(LR\"(c:/cat)\"sv, LR\"(c:/)\"sv);\r\n    f(LR\"(\\\\share\\cat)\"sv, LR\"(\\\\share\\)\"sv);\r\n    f(LR\"(c:/cat/dog)\"sv, LR\"(c:/cat)\"sv);\r\n    f(LR\"(c:/cat//////dog)\"sv, LR\"(c:/cat)\"sv);\r\n    f(LR\"(c:///////dog)\"sv, LR\"(c:/)\"sv);\r\n    f(LR\"(\\\\share\\cat\\dog)\"sv, LR\"(\\\\share\\cat)\"sv);\r\n    f(LR\"(\\\\share\\)\"sv, LR\"(\\\\share\\)\"sv);\r\n    f(LR\"(\\\\)\"sv, LR\"(\\)\"sv);\r\n    f(LR\"(\\\\share\\\\\\\\\\\\)\"sv, LR\"(\\\\share\\)\"sv);\r\n    f(LR\"(c:/fname/)\"sv, LR\"(c:/fname)\"sv);\r\n    f(LR\"()\"sv, LR\"()\"sv);\r\n    f(LR\"(cat)\"sv, LR\"()\"sv);\r\n    f(LR\"(cat/dog)\"sv, LR\"(cat)\"sv);\r\n}\r\n\r\nvoid check_fs_error(const filesystem_error& e, const char* const msg, const string& p1, const string& p2,\r\n    optional<error_code> ec = nullopt) {\r\n    EXPECT(strstr(e.what(), msg) != nullptr);\r\n    EXPECT(strstr(e.what(), p1.c_str()) != nullptr);\r\n    EXPECT(strstr(e.what(), p2.c_str()) != nullptr);\r\n    if (p1.empty()) {\r\n        EXPECT(e.path1().empty());\r\n    } else {\r\n        EXPECT(e.path1() == p1);\r\n    }\r\n\r\n    if (p2.empty()) {\r\n        EXPECT(e.path2().empty());\r\n    } else {\r\n        EXPECT(e.path2() == p2);\r\n    }\r\n\r\n    if (ec.has_value()) {\r\n        EXPECT(e.code() == ec.value());\r\n    }\r\n}\r\n\r\nvoid test_filesystem_error() {\r\n    error_code ec1(22, system_category());\r\n    filesystem_error fsWhatEc(\"cute fluffy kittens\", ec1);\r\n    check_fs_error(fsWhatEc, \"cute fluffy kittens\", \"\", \"\", ec1);\r\n\r\n    error_code ec2 = make_error_code(errc::address_family_not_supported);\r\n    filesystem_error fsWhatPathEc(\"hungry EVIL zombies\", path(L\"abc\"sv), ec2);\r\n    check_fs_error(fsWhatPathEc, \"hungry EVIL zombies\", \"abc\"s, \"\", ec2);\r\n    EXPECT(fsWhatPathEc.path1().native() == L\"abc\"sv);\r\n\r\n    error_code ec3(7, system_category());\r\n    filesystem_error fsWhatPathPathEc(\"BRAINS!\", path(L\"1729\"sv), path(L\"42\"sv), ec3);\r\n    check_fs_error(fsWhatPathPathEc, \"BRAINS!\", \"1729\"s, \"42\"s, ec3);\r\n    EXPECT(fsWhatPathPathEc.path1().native() == L\"1729\"sv);\r\n    EXPECT(fsWhatPathPathEc.path2().native() == L\"42\"sv);\r\n\r\n    error_code ec4(19, system_category());\r\n    path p1(L\"\\u00E9\"sv);\r\n    string p1Str = p1.string();\r\n    filesystem_error fs(\"hello\", p1, ec4);\r\n    EXPECT(string_view(fs.what()).find(p1Str) != string_view::npos);\r\n}\r\n\r\nvoid test_file_status() {\r\n    auto check = [](const file_status& x, file_type ft, perms p, const char* name) {\r\n        if (x.type() != ft || x.permissions() != p) {\r\n            wcerr << L\"test_file_status failed: \" << name << L'\\n';\r\n            pass = false;\r\n        }\r\n    };\r\n#define CHECK(x, y, z) check(x, y, z, #x \" != {\" #y \", \" #z \"}\")\r\n\r\n    // file_status() noexcept : file_status(file_type::none) {}\r\n    {\r\n        file_status defaulted;\r\n        CHECK(defaulted, file_type::none, perms::unknown);\r\n    }\r\n\r\n    // explicit file_status(file_type ft, perms prms = perms::unknown) noexcept;\r\n    {\r\n        file_status one_arg_ctor(file_type::block);\r\n        CHECK(one_arg_ctor, file_type::block, perms::unknown);\r\n\r\n        file_status two_arg_ctor(file_type::socket, perms::group_write);\r\n        CHECK(two_arg_ctor, file_type::socket, perms::group_write);\r\n    }\r\n\r\n    // file_status(const file_status&) noexcept = default;\r\n    {\r\n        const file_status copy_source(file_type::character, perms::group_all);\r\n        file_status copied(copy_source);\r\n        CHECK(copied, file_type::character, perms::group_all);\r\n    }\r\n\r\n    // file_status(file_status&&) noexcept = default;\r\n    {\r\n        file_status move_source(file_type::fifo, perms::group_exec);\r\n        file_status moved(move(move_source));\r\n        CHECK(moved, file_type::fifo, perms::group_exec);\r\n    }\r\n\r\n    // ~file_status(); -- tested throughout this function\r\n\r\n    // file_status& operator=(const file_status&) noexcept = default;\r\n    {\r\n        const file_status copy_source(file_type::junction, perms::owner_read);\r\n        file_status copy_assign;\r\n        copy_assign = copy_source;\r\n        CHECK(copy_assign, file_type::junction, perms::owner_read);\r\n    }\r\n    // file_status& operator=(file_status&&) noexcept = default;\r\n    {\r\n        file_status move_source(file_type::symlink, perms::owner_write);\r\n        file_status move_assign;\r\n        move_assign = move(move_source);\r\n        CHECK(move_assign, file_type::symlink, perms::owner_write);\r\n    }\r\n\r\n    file_status x;\r\n    x.type(file_type::directory);\r\n    CHECK(x, file_type::directory, perms::unknown);\r\n    x.type(file_type::regular);\r\n    CHECK(x, file_type::regular, perms::unknown);\r\n\r\n    x.permissions(perms::none);\r\n    CHECK(x, file_type::regular, perms::none);\r\n    x.permissions(perms::others_exec);\r\n    CHECK(x, file_type::regular, perms::others_exec);\r\n\r\n#undef CHECK\r\n}\r\n\r\nvoid check_symlink_permissions(const error_code& ec, const wchar_t* const function_id) {\r\n    if (ec.category() != system_category()) {\r\n        wcerr << L\"Incorrect error category from \" << function_id << L\"\\n\";\r\n        pass = false;\r\n    }\r\n\r\n    if (ec.value() != 1314) {\r\n        wcerr << L\"Expected ERROR_PRIVILEGE_NOT_HELD from \" << function_id << L\" but it returned \"\r\n              << ec.message().c_str() << L\"\\n\";\r\n        pass = false;\r\n    }\r\n\r\n    wcerr << L\"Warning: could not test \" << function_id\r\n          << L\" due to symlink creation failure, do you have admin rights?\\n\";\r\n}\r\n\r\nvoid test_directory_entry() {\r\n    error_code ec;\r\n    const path filePath(L\"test_directory_entry.txt\"sv);\r\n    const path filePath2(L\"test_directory_entry2.txt\"sv);\r\n    const path dirPath(L\"test_directory_entry.dir\"sv);\r\n    const path linkPath(L\"test_directory_entry.link\"sv);\r\n    const path cachePath(L\"test_directory_entry_cache.txt\"sv);\r\n    create_file_containing(filePath, L\"hello world\");\r\n    create_file_containing(filePath2, L\"goodbye world\");\r\n    create_directory(dirPath, ec);\r\n    EXPECT(good(ec));\r\n\r\n    const directory_entry default_entry;\r\n    EXPECT(default_entry.path().empty());\r\n    // Test VSO-892890 \"std::filesystem::directory_entry constructor initializes wrong state\"\r\n    EXPECT(!default_entry.exists());\r\n\r\n    for (auto&& nonexistent : nonexistentPaths) {\r\n        directory_entry nonexistentEntry(nonexistent);\r\n        EXPECT(nonexistentEntry.path() == nonexistent);\r\n        // Test VSO-892890 \"std::filesystem::directory_entry constructor initializes wrong state\"\r\n        EXPECT(!nonexistentEntry.exists());\r\n\r\n        directory_entry nonexistentEntryEc(nonexistent, ec);\r\n        EXPECT(nonexistentEntryEc.path() == nonexistent);\r\n        // Test VSO-892890 \"std::filesystem::directory_entry constructor initializes wrong state\"\r\n        EXPECT(!nonexistentEntryEc.exists());\r\n        EXPECT(good(ec));\r\n\r\n        // Also test GH-232 \"<filesystem>: directory_entry(const path& p, error_code& ec) does not return error code\"\r\n        nonexistentEntry.refresh();\r\n\r\n        nonexistentEntryEc.refresh(ec);\r\n        EXPECT(good(ec));\r\n    }\r\n\r\n    directory_entry goodEntry(filePath, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(filePath == goodEntry); // also tests conversion to path\r\n    EXPECT(filePath == goodEntry.path());\r\n\r\n    const directory_entry goodEntry2(filePath);\r\n    EXPECT(filePath == goodEntry2); // also tests conversion to path\r\n    EXPECT(goodEntry == goodEntry2);\r\n\r\n    const auto ftime = goodEntry.last_write_time(ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(ftime != bad_file_time);\r\n    EXPECT(goodEntry.last_write_time() == ftime);\r\n\r\n    const directory_entry copiedEntry(goodEntry);\r\n    EXPECT(copiedEntry == goodEntry);\r\n    EXPECT(copiedEntry.file_size() == goodEntry.file_size());\r\n\r\n    directory_entry assignedEntry;\r\n    assignedEntry = goodEntry;\r\n    EXPECT(assignedEntry == goodEntry);\r\n    EXPECT(assignedEntry.file_size() == goodEntry.file_size());\r\n\r\n    directory_entry dirEntry(dirPath, ec);\r\n    EXPECT(good(ec));\r\n\r\n    EXPECT(goodEntry.exists());\r\n    EXPECT(!goodEntry.is_block_file());\r\n    EXPECT(!goodEntry.is_character_file());\r\n    EXPECT(!goodEntry.is_directory());\r\n    EXPECT(!goodEntry.is_fifo());\r\n    EXPECT(!goodEntry.is_other());\r\n    EXPECT(goodEntry.is_regular_file());\r\n    EXPECT(!goodEntry.is_socket());\r\n    EXPECT(!goodEntry.is_symlink());\r\n    const auto goodStatus = goodEntry.status();\r\n    EXPECT(goodStatus.type() == file_type::regular);\r\n    EXPECT(goodStatus.permissions() == perms::all);\r\n    const auto goodSymlinkStatus = goodEntry.symlink_status();\r\n    EXPECT(goodSymlinkStatus.type() == file_type::regular);\r\n    EXPECT(goodSymlinkStatus.permissions() == perms::all);\r\n\r\n    ec = make_error_code(errc::executable_format_error); // bad chosen at random, totally random\r\n    EXPECT(dirEntry.exists(ec));\r\n    EXPECT(good(ec));\r\n    ec = make_error_code(errc::executable_format_error);\r\n    EXPECT(!dirEntry.is_block_file(ec));\r\n    EXPECT(good(ec));\r\n    ec = make_error_code(errc::executable_format_error);\r\n    EXPECT(!dirEntry.is_character_file(ec));\r\n    EXPECT(good(ec));\r\n    ec = make_error_code(errc::executable_format_error);\r\n    EXPECT(dirEntry.is_directory(ec));\r\n    EXPECT(good(ec));\r\n    ec = make_error_code(errc::executable_format_error);\r\n    EXPECT(!dirEntry.is_fifo(ec));\r\n    EXPECT(good(ec));\r\n    ec = make_error_code(errc::executable_format_error);\r\n    EXPECT(!dirEntry.is_other(ec));\r\n    EXPECT(good(ec));\r\n    ec = make_error_code(errc::executable_format_error);\r\n    EXPECT(!dirEntry.is_regular_file(ec));\r\n    EXPECT(good(ec));\r\n    ec = make_error_code(errc::executable_format_error);\r\n    EXPECT(!dirEntry.is_socket(ec));\r\n    EXPECT(good(ec));\r\n    ec = make_error_code(errc::executable_format_error);\r\n    EXPECT(!dirEntry.is_symlink(ec));\r\n    EXPECT(good(ec));\r\n    const auto dirStatus = dirEntry.status();\r\n    EXPECT(dirStatus.type() == file_type::directory);\r\n    EXPECT(dirStatus.permissions() == perms::all);\r\n    const auto dirSymlinkStatus = dirEntry.symlink_status();\r\n    EXPECT(dirSymlinkStatus.type() == file_type::directory);\r\n    EXPECT(dirSymlinkStatus.permissions() == perms::all);\r\n\r\n    create_directory_symlink(dirPath, linkPath, ec);\r\n    if (ec) {\r\n        check_symlink_permissions(ec, L\"directory_entry\");\r\n    } else {\r\n        const directory_entry linkEntry(linkPath);\r\n        EXPECT(linkEntry.exists());\r\n        EXPECT(!linkEntry.is_block_file());\r\n        EXPECT(!linkEntry.is_character_file());\r\n        EXPECT(linkEntry.is_directory());\r\n        EXPECT(!linkEntry.is_fifo());\r\n        EXPECT(!linkEntry.is_other());\r\n        EXPECT(!linkEntry.is_regular_file());\r\n        EXPECT(!linkEntry.is_socket());\r\n        EXPECT(linkEntry.is_symlink());\r\n        const auto linkStatus = linkEntry.status();\r\n        EXPECT(linkStatus.type() == file_type::directory);\r\n        EXPECT(linkStatus.permissions() == perms::all);\r\n        const auto linkSymlinkStatus = linkEntry.symlink_status();\r\n        EXPECT(linkSymlinkStatus.type() == file_type::symlink);\r\n        EXPECT(linkSymlinkStatus.permissions() == perms::all);\r\n        remove(linkPath, ec);\r\n        EXPECT(good(ec));\r\n    }\r\n\r\n    goodEntry.assign(dirPath);\r\n    EXPECT(goodEntry.is_directory());\r\n    goodEntry.assign(filePath, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(goodEntry.is_regular_file());\r\n\r\n    goodEntry.replace_filename(dirPath);\r\n    EXPECT(goodEntry.is_directory());\r\n    goodEntry.replace_filename(filePath, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(goodEntry.is_regular_file());\r\n\r\n    const path changingPath(L\"test_directory_entry.both\"sv);\r\n    create_directory(changingPath, ec);\r\n    EXPECT(good(ec));\r\n    directory_entry changingEntry(changingPath, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(changingEntry.is_directory());\r\n    remove(changingPath, ec);\r\n    EXPECT(good(ec));\r\n    create_file_containing(changingPath, L\"Hello\");\r\n    EXPECT(changingEntry.is_directory()); // cached\r\n    changingEntry.refresh();\r\n    EXPECT(!changingEntry.is_directory()); // updated\r\n    EXPECT(changingEntry.is_regular_file());\r\n\r\n    create_hard_link(changingPath, linkPath, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(changingEntry.hard_link_count() == 1); // cached\r\n    changingEntry.refresh(ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(changingEntry.hard_link_count(ec) == 2); // updated\r\n    EXPECT(good(ec));\r\n\r\n    const directory_entry aEntry(filePath, ec);\r\n    const directory_entry bEntry(filePath2, ec);\r\n    EXPECT(aEntry < bEntry);\r\n    EXPECT(!(bEntry < aEntry));\r\n    EXPECT(!(aEntry < aEntry));\r\n\r\n    EXPECT(aEntry == aEntry);\r\n    EXPECT(!(aEntry == bEntry));\r\n\r\n    EXPECT(!(aEntry != aEntry));\r\n    EXPECT(aEntry != bEntry);\r\n\r\n    EXPECT(aEntry <= bEntry);\r\n    EXPECT(!(bEntry <= aEntry));\r\n    EXPECT(aEntry <= aEntry);\r\n\r\n    EXPECT(!(aEntry > bEntry));\r\n    EXPECT(bEntry > aEntry);\r\n    EXPECT(!(aEntry > aEntry));\r\n\r\n    EXPECT(!(aEntry >= bEntry));\r\n    EXPECT(bEntry >= aEntry);\r\n    EXPECT(aEntry >= aEntry);\r\n\r\n    directory_entry cachingEntry(cachePath);\r\n    // here, we are not cached:\r\n    EXPECT(cachingEntry.file_size(ec) == static_cast<uintmax_t>(-1));\r\n    EXPECT(bad(ec));\r\n    // assert that the above error was not cached:\r\n    create_file_containing(cachePath, L\"abcdef\");\r\n    EXPECT(cachingEntry.file_size(ec) == 6);\r\n    EXPECT(good(ec));\r\n    EXPECT(cachingEntry.last_write_time(ec) != file_time_type::min());\r\n    EXPECT(good(ec));\r\n    EXPECT(cachingEntry.hard_link_count(ec) != static_cast<uintmax_t>(-1));\r\n    EXPECT(good(ec));\r\n    EXPECT(cachingEntry.is_regular_file(ec));\r\n    EXPECT(good(ec));\r\n    // assert that none of the above accesses restored caching:\r\n    remove(cachePath, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(cachingEntry.file_size(ec) == static_cast<uintmax_t>(-1));\r\n    EXPECT(bad(ec));\r\n    EXPECT(cachingEntry.last_write_time(ec) == file_time_type::min());\r\n    EXPECT(bad(ec));\r\n    EXPECT(cachingEntry.hard_link_count(ec) == static_cast<uintmax_t>(-1));\r\n    EXPECT(bad(ec));\r\n    EXPECT(!cachingEntry.is_regular_file(ec));\r\n    EXPECT(bad(ec));\r\n    // restore caching:\r\n    create_file_containing(cachePath, L\"abcdef\");\r\n    cachingEntry.refresh();\r\n    remove(cachePath, ec);\r\n    EXPECT(good(ec));\r\n    // assert that the following succeed because the values are cached, even though the file is gone\r\n    EXPECT(cachingEntry.file_size(ec) == 6);\r\n    EXPECT(good(ec));\r\n    EXPECT(cachingEntry.last_write_time(ec) != file_time_type::min());\r\n    EXPECT(good(ec));\r\n    EXPECT(cachingEntry.hard_link_count(ec) != static_cast<uintmax_t>(-1));\r\n    EXPECT(good(ec));\r\n    EXPECT(cachingEntry.is_regular_file(ec));\r\n    EXPECT(good(ec));\r\n\r\n    // assert that mutating the path doesn't fail even though the target doesn't exist\r\n    for (auto&& nonexistent : nonexistentPaths) {\r\n        cachingEntry.assign(nonexistent); // no fail\r\n        cachingEntry.assign(nonexistent, ec);\r\n        EXPECT(good(ec));\r\n        cachingEntry.replace_filename(L\"Exist2\"sv); // no fail\r\n        cachingEntry.replace_filename(L\"Exist2\"sv, ec);\r\n        EXPECT(good(ec));\r\n    }\r\n\r\n    remove(changingPath, ec);\r\n    EXPECT(good(ec));\r\n    remove(linkPath, ec);\r\n    EXPECT(good(ec));\r\n    remove(filePath2, ec);\r\n    EXPECT(good(ec));\r\n    remove(filePath, ec);\r\n    EXPECT(good(ec));\r\n    remove(dirPath, ec);\r\n    EXPECT(good(ec));\r\n\r\n    // LWG-3171 \"LWG-2989 breaks directory_entry stream insertion\"\r\n    const directory_entry iostreamEntry{path{R\"(one\\two\\three)\"}};\r\n    ostringstream oss;\r\n    oss << iostreamEntry;\r\n    EXPECT(oss.str() == R\"(\"one\\\\two\\\\three\")\");\r\n}\r\n\r\ntemplate <typename DirectoryIterator>\r\nvoid test_directory_iterator_common_parts(const string_view typeName) {\r\n    const test_temp_directory tempDir(typeName);\r\n    const path tempFile = tempDir.directoryPath / L\"example.txt\"sv;\r\n    create_file_containing(tempFile, L\"Hi\");\r\n\r\n    // using iterator_category = input_iterator_tag;\r\n    // using value_type        = directory_entry;\r\n    // using difference_type   = ptrdiff_t;\r\n    // using pointer           = const directory_entry*;\r\n    // using reference         = const directory_entry&;\r\n\r\n    static_assert(is_same_v<typename DirectoryIterator::iterator_category, input_iterator_tag>);\r\n    static_assert(is_same_v<typename DirectoryIterator::value_type, directory_entry>);\r\n    static_assert(is_same_v<typename DirectoryIterator::difference_type, ptrdiff_t>);\r\n    static_assert(is_same_v<typename DirectoryIterator::pointer, const directory_entry*>);\r\n    static_assert(is_same_v<typename DirectoryIterator::reference, const directory_entry&>);\r\n\r\n    // [fs.dir.itr.members], member functions\r\n\r\n    // DirectoryIterator() noexcept;\r\n    // ~DirectoryIterator();\r\n    {\r\n        DirectoryIterator default_ctor;\r\n    }\r\n\r\n    // explicit DirectoryIterator(const path& _Path_arg);\r\n    // DirectoryIterator(const path& _Path_arg, directory_options _Options_arg);\r\n    // DirectoryIterator(const path& _Path_arg, error_code& _Ec) noexcept;\r\n    // bool operator==(const DirectoryIterator& _Rhs) const;\r\n    {\r\n        error_code ec;\r\n        for (auto&& nonexistent : nonexistentPaths) {\r\n            DirectoryIterator bad_dir(nonexistent, ec);\r\n            EXPECT(bad(ec));\r\n            EXPECT(bad_dir == DirectoryIterator{});\r\n            EXPECT(bad_dir == bad_dir);\r\n            EXPECT(!(bad_dir != bad_dir));\r\n\r\n            EXPECT(throws_filesystem_error([&] { DirectoryIterator bad_dir{nonexistent}; }, typeName, nonexistent));\r\n            EXPECT(throws_filesystem_error(\r\n                [&] { DirectoryIterator bad_dir{nonexistent, directory_options::none}; }, typeName, nonexistent));\r\n        }\r\n\r\n        // Test VSO-844835 \"directory_iterator constructed with empty path iterates over the current directory\"\r\n        DirectoryIterator empty_dir(path{}, ec);\r\n        EXPECT(ec == error_condition(2 /* ERROR_FILE_NOT_FOUND */, system_category()));\r\n        EXPECT(empty_dir == DirectoryIterator{});\r\n\r\n        // Test VSO-583725 \"recursive_directory_iterator blows up (memory leak + infinite loop) with embedded nulls\"\r\n        DirectoryIterator embedded_null_dir(L\".\\0\"sv, ec);\r\n        EXPECT(ec == error_condition(2 /* ERROR_FILE_NOT_FOUND */, system_category()));\r\n        EXPECT(embedded_null_dir == DirectoryIterator{});\r\n    }\r\n\r\n    // DirectoryIterator(const path& _Path_arg, directory_options _Options_arg, error_code& _Ec) noexcept;\r\n    // const directory_entry& operator*() const;\r\n    // const directory_entry* operator->() const;\r\n    // DirectoryIterator& increment(error_code& _Ec) noexcept;\r\n    // bool operator!=(const DirectoryIterator& _Rhs) const;\r\n    {\r\n        error_code ec;\r\n        DirectoryIterator good_dir(tempDir.directoryPath, directory_options::none, ec);\r\n\r\n        if (!EXPECT(good(ec))) {\r\n            return;\r\n        }\r\n        EXPECT(good_dir != DirectoryIterator{}); // should have at least one file\r\n        EXPECT(good_dir == good_dir);\r\n        EXPECT(!(good_dir != good_dir));\r\n\r\n        auto& first_entry = *good_dir;\r\n        EXPECT(first_entry.path() == good_dir->path());\r\n\r\n        bool found_ourselves = false;\r\n\r\n        do {\r\n            found_ourselves = found_ourselves || good_dir->path() == tempFile;\r\n            good_dir.increment(ec);\r\n            EXPECT(good(ec));\r\n        } while (good_dir != DirectoryIterator{});\r\n\r\n        EXPECT(found_ourselves);\r\n    }\r\n\r\n    // DirectoryIterator(const DirectoryIterator& _Rhs);\r\n    // DirectoryIterator& operator=(const DirectoryIterator& _Rhs);\r\n    {\r\n        error_code ec;\r\n        const DirectoryIterator copy_source_dir_iter(tempDir.directoryPath, directory_options::none, ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(copy_source_dir_iter != DirectoryIterator{});\r\n        const DirectoryIterator copy_constructed(copy_source_dir_iter);\r\n        EXPECT(copy_source_dir_iter == copy_constructed);\r\n        EXPECT(!(copy_source_dir_iter != copy_constructed));\r\n        DirectoryIterator assignment_dest;\r\n        assignment_dest = copy_source_dir_iter;\r\n        EXPECT(copy_source_dir_iter == assignment_dest);\r\n        EXPECT(!(copy_source_dir_iter != assignment_dest));\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wself-assign-overloaded\"\r\n#endif // __clang__\r\n\r\n        // test self-assignment\r\n        assignment_dest = assignment_dest;\r\n        EXPECT(copy_source_dir_iter == assignment_dest);\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // __clang__\r\n    }\r\n\r\n    // DirectoryIterator(DirectoryIterator&& _Rhs) noexcept;\r\n    // DirectoryIterator& operator=(DirectoryIterator&& _Rhs) noexcept;\r\n    {\r\n        error_code ec;\r\n        DirectoryIterator move_source_dir_iter(tempDir.directoryPath, directory_options::none, ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(move_source_dir_iter != DirectoryIterator{});\r\n        const path first_entry = move_source_dir_iter->path();\r\n\r\n        DirectoryIterator move_constructed(move(move_source_dir_iter));\r\n        EXPECT(move_constructed != DirectoryIterator{});\r\n        EXPECT(move_source_dir_iter == DirectoryIterator{});\r\n        EXPECT(first_entry == move_constructed->path());\r\n\r\n        DirectoryIterator move_dest;\r\n        move_dest = move(move_constructed);\r\n        EXPECT(move_dest != DirectoryIterator{});\r\n        EXPECT(move_constructed == DirectoryIterator{});\r\n        EXPECT(first_entry == move_dest->path());\r\n\r\n        // test self-move-assignment\r\n        move_dest = move(move_dest);\r\n        EXPECT(move_dest != DirectoryIterator{});\r\n        EXPECT(first_entry == move_dest->path());\r\n    }\r\n\r\n    // NB: we cannot test that ++ throws without introducing failure injection code into DirectoryIterator\r\n    // DirectoryIterator& operator++();\r\n    // _Directory_entry_proxy operator++(int);\r\n    {\r\n        error_code ec;\r\n        create_file_containing(tempDir.directoryPath / L\"a.txt\"sv, L\"a\");\r\n        create_file_containing(tempDir.directoryPath / L\"b.txt\"sv, L\"b\");\r\n        DirectoryIterator it(tempDir.directoryPath, directory_options::none, ec);\r\n        EXPECT(good(ec));\r\n\r\n        const path first_path = it->path();\r\n        directory_entry entry = *it++;\r\n\r\n        EXPECT(first_path == entry.path());\r\n\r\n        while (++it != DirectoryIterator{}) {\r\n            EXPECT(first_path != it->path());\r\n        }\r\n    }\r\n\r\n    // [fs.dir.itr.members]/Effects\r\n    // if (options & directory_options::skip_permission_denied) != directory_options::none\r\n    // and construction encounters an error indicating that permission to access p is denied, constructs the\r\n    // end iterator and does not report an error.\r\n\r\n    // Tested by hand with interactive tests\r\n    //   -(rec)dir:AccessDeniedDir => failure\r\n    //   -(rec)dir:!AccessDeniedDir => empty dir\r\n}\r\n\r\nvoid test_directory_iterator() {\r\n    test_directory_iterator_common_parts<directory_iterator>(\"directory_iterator\"sv);\r\n}\r\n\r\nvoid test_recursive_directory_iterator() {\r\n    test_directory_iterator_common_parts<recursive_directory_iterator>(\"recursive_directory_iterator\"sv);\r\n\r\n    {\r\n        const test_temp_directory tempDir(\"recursive_directory_iterator-specific\"sv);\r\n        create_file_containing(tempDir.directoryPath / L\"a.txt\"sv, L\"hello\");\r\n\r\n        // _NODISCARD directory_options  options() const;\r\n        // _NODISCARD int                depth() const;\r\n        // _NODISCARD bool               recursion_pending() const;\r\n        // void pop(error_code& _Ec);\r\n        // void disable_recursion_pending();\r\n        {\r\n            error_code ec;\r\n            recursive_directory_iterator good_dir(tempDir.directoryPath, directory_options::none, ec);\r\n            if (!EXPECT(good(ec))) {\r\n                return;\r\n            }\r\n\r\n            EXPECT(good_dir.options() == directory_options::none);\r\n\r\n            recursive_directory_iterator good_dir2(\r\n                tempDir.directoryPath, directory_options::skip_permission_denied, ec);\r\n            EXPECT(good_dir2.options() == directory_options::skip_permission_denied);\r\n\r\n            recursive_directory_iterator good_dir3(\r\n                tempDir.directoryPath, directory_options::follow_directory_symlink, ec);\r\n            EXPECT(good_dir3.options() == directory_options::follow_directory_symlink);\r\n\r\n            EXPECT(good_dir.depth() == 0);\r\n            EXPECT(good_dir.recursion_pending());\r\n\r\n            good_dir.disable_recursion_pending();\r\n            EXPECT(!good_dir.recursion_pending());\r\n\r\n            EXPECT(good_dir != recursive_directory_iterator{});\r\n\r\n            good_dir.pop(ec);\r\n            EXPECT(good(ec));\r\n\r\n            EXPECT(good_dir == recursive_directory_iterator{});\r\n        }\r\n\r\n        // void pop();\r\n        {\r\n            recursive_directory_iterator good_dir(tempDir.directoryPath, directory_options::none);\r\n            good_dir.pop();\r\n            EXPECT(good_dir == recursive_directory_iterator{});\r\n        }\r\n\r\n        // Tests for following symlinks and junctions\r\n\r\n        // Tested by hand with interactive tests\r\n        //   -recdir:DirWithSymLinks => skipping directory symlinks\r\n        //   -recdir:~DirWithSymLinks => going into directory symlinks\r\n\r\n        // Tests for access denied during recursive enumeration\r\n\r\n        // Tested by hand with interactive tests\r\n        //   -recdir:DirWithAccessDeniedEntries => Access Denied in operator++\r\n        //   -recdir:!DirWithAccessDeniedEntries => Skip subdirs that return Access Denied\r\n    }\r\n\r\n    // Also test VSO-649431 <filesystem> follow_directory_symlinks with a broken symlink causes iteration to break\r\n    {\r\n        const test_temp_directory tempDir(\"recursive_directory_iterator-VSO-649431\"sv);\r\n        const path aaa = tempDir.directoryPath / L\"aaa\"sv;\r\n        const path bbb = tempDir.directoryPath / L\"bbb\"sv;\r\n        const path ccc = tempDir.directoryPath / L\"ccc\"sv;\r\n        error_code ec;\r\n        create_directory_symlink(nonexistentPaths[0], bbb, ec);\r\n        if (ec) {\r\n            check_symlink_permissions(ec, L\"recursive_directory_iterator\");\r\n        } else {\r\n            create_directory(aaa);\r\n            create_directory(ccc);\r\n            static constexpr directory_options options[] = {directory_options::none,\r\n                directory_options::follow_directory_symlink, directory_options::skip_permission_denied,\r\n                directory_options::follow_directory_symlink | directory_options::skip_permission_denied};\r\n            for (const auto& option : options) {\r\n                recursive_directory_iterator first(tempDir.directoryPath, option);\r\n                assert(first != recursive_directory_iterator{});\r\n                EXPECT(first->is_directory());\r\n                EXPECT(!first->is_symlink());\r\n                EXPECT(first->exists());\r\n                EXPECT(first->path().native() == aaa.native());\r\n                ++first;\r\n                assert(first != recursive_directory_iterator{});\r\n                EXPECT(!first->is_directory());\r\n                EXPECT(first->is_symlink());\r\n                EXPECT(!first->exists());\r\n                EXPECT(first->path().native() == bbb.native());\r\n                ++first;\r\n                assert(first != recursive_directory_iterator{});\r\n                EXPECT(first->is_directory());\r\n                EXPECT(!first->is_symlink());\r\n                EXPECT(first->exists());\r\n                EXPECT(first->path().native() == ccc.native());\r\n                ++first;\r\n                EXPECT(first == recursive_directory_iterator{});\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nvoid expect_absolute(const path& input, const wstring_view expected) {\r\n    error_code ec(-1, generic_category());\r\n    const path actual = absolute(input, ec);\r\n    if (actual.native() != expected || ec || ec.category() != system_category()) {\r\n        wcerr << L\"Expected absolute(\" << input.native() << L\") to be \" << expected << L\"\\n\";\r\n        if (actual.native() != expected) {\r\n            wcerr << L\"Actual result: \" << actual.native() << L\"\\n\";\r\n        }\r\n\r\n        if (ec) {\r\n            wcerr << L\"The call failed.\\n\";\r\n        }\r\n\r\n        pass = false;\r\n    }\r\n}\r\n\r\nvoid test_absolute() {\r\n    expect_absolute(L\"x:/cat/dog/../elk\"sv, LR\"(x:\\cat\\elk)\"sv);\r\n\r\n    wstring longPath(LR\"(\\\\?\\x:\\some\\)\");\r\n    longPath += longSuffix;\r\n    assert(longPath.size() > 260);\r\n    expect_absolute(longPath, longPath);\r\n\r\n    error_code ec(-1, generic_category());\r\n    longPath.push_back(L'\\\\');\r\n    longPath.resize(40'000, L'a');\r\n    EXPECT(throws_filesystem_error([&] { return absolute(longPath); }, \"absolute\"sv, longPath));\r\n    EXPECT(absolute(longPath, ec).empty());\r\n    if (ec.value() != 206) {\r\n        wcerr << L\"Warning: Expected absolute on a >32k long path to report ERROR_FILENAME_EXCED_RANGE, \"\r\n                 L\"but it reported \"\r\n              << ec.value() << L\"\\n\";\r\n    }\r\n    EXPECT(ec.category() == system_category());\r\n\r\n    longPath.resize(260);\r\n    expect_absolute(longPath, longPath);\r\n\r\n    expect_absolute({}, {});\r\n}\r\n\r\nvoid test_canonical() {\r\n    // test that !exists(p) is an error\r\n    EXPECT(throws_filesystem_error([] { return canonical(L\"nonexistent\"sv); }, \"canonical\", L\"nonexistent\"sv));\r\n    error_code ec(-1, generic_category());\r\n    EXPECT(canonical(L\"nonexistent.txt\"sv, ec).empty());\r\n    EXPECT(bad(ec));\r\n\r\n    // test that canonical on a directory is not an error\r\n    (void) canonical(L\".\"sv, ec); // == canonical(current_path())?\r\n    EXPECT(good(ec));\r\n\r\n    // test that canonical on an ordinary file returns that file's DOS path\r\n    const auto filename = L\"test_canonical.txt\"sv;\r\n    remove(L\"test_canonical.txt\", ec);\r\n    EXPECT(good(ec));\r\n    create_file_containing(L\"test_canonical.txt\", L\"Hello world\\n\");\r\n    const path p(canonical(filename, ec));\r\n    EXPECT(good(ec));\r\n    const auto& text = p.native();\r\n    assert(text.size() > filename.size() + 1);\r\n    EXPECT(text[1] == L':'); // this test assumes that the test directory is mapped to a drive letter\r\n    const auto diffSize = static_cast<ptrdiff_t>(filename.size());\r\n    EXPECT(*(text.end() - diffSize - 1) == L'\\\\');\r\n    EXPECT(equal(text.end() - diffSize, text.end(), filename.begin(), filename.end()));\r\n    EXPECT(remove(L\"test_canonical.txt\", ec));\r\n    EXPECT(good(ec));\r\n}\r\n\r\nvoid test_copy() {\r\n    error_code ec;\r\n    const recursive_directory_iterator endIter;\r\n    const test_temp_directory tempDir(\"copy\"sv);\r\n    const auto& basePath = tempDir.directoryPath;\r\n\r\n    // examples from the standard, N4727 [fs.op.copy]/7:\r\n    const auto createStandardBaseline = [=] {\r\n        remove_all(basePath);\r\n        create_directories(basePath / L\"dir1/dir2\"sv);\r\n        create_file_containing(basePath / L\"dir1/file1\"sv, L\"file1\");\r\n        create_file_containing(basePath / L\"dir1/file2\"sv, L\"file2\");\r\n        create_file_containing(basePath / L\"dir1/dir2/file3\"sv, L\"file3\");\r\n    };\r\n\r\n    createStandardBaseline();\r\n    copy(basePath / L\"dir1\"sv, basePath / L\"dir3\"sv);\r\n    {\r\n        recursive_directory_iterator verifier(basePath);\r\n        EXPECT(verifier != endIter);\r\n\r\n        EXPECT(verifier->path() == basePath / L\"dir1\"sv);\r\n        EXPECT(verifier->is_directory());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir1/dir2\"sv);\r\n        EXPECT(verifier->is_directory());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir1/dir2/file3\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir1/file1\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir1/file2\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir3\"sv);\r\n        EXPECT(verifier->is_directory());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir3/file1\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir3/file2\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier == endIter);\r\n    }\r\n\r\n    copy(basePath / L\"dir1\"sv, basePath / L\"dir3\"sv, ec);\r\n    EXPECT(bad(ec)); // targets already exist\r\n    copy(basePath / L\"dir1\"sv, basePath / L\"dir3\"sv, copy_options::overwrite_existing, ec);\r\n    EXPECT(good(ec)); // targets already exist\r\n\r\n    createStandardBaseline();\r\n    copy(basePath / L\"dir1\"sv, basePath / L\"dir3\"sv, copy_options::recursive);\r\n    {\r\n        recursive_directory_iterator verifier(basePath);\r\n        EXPECT(verifier != endIter);\r\n\r\n        EXPECT(verifier->path() == basePath / L\"dir1\"sv);\r\n        EXPECT(verifier->is_directory());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir1/dir2\"sv);\r\n        EXPECT(verifier->is_directory());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir1/dir2/file3\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir1/file1\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir1/file2\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir3\"sv);\r\n        EXPECT(verifier->is_directory());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir3/dir2\"sv);\r\n        EXPECT(verifier->is_directory());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir3/dir2/file3\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir3/file1\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir3/file2\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier == endIter);\r\n    }\r\n\r\n    createStandardBaseline();\r\n    copy(basePath / L\"dir1\"sv, basePath / L\"dir3\"sv, copy_options::directories_only);\r\n    {\r\n        recursive_directory_iterator verifier(basePath);\r\n        EXPECT(verifier != endIter);\r\n\r\n        EXPECT(verifier->path() == basePath / L\"dir1\"sv);\r\n        EXPECT(verifier->is_directory());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir1/dir2\"sv);\r\n        EXPECT(verifier->is_directory());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir1/dir2/file3\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir1/file1\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir1/file2\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir3\"sv);\r\n        EXPECT(verifier->is_directory());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier == endIter);\r\n    }\r\n\r\n    createStandardBaseline();\r\n    copy(basePath / L\"dir1\"sv, basePath / L\"dir3\"sv, copy_options::create_hard_links);\r\n    {\r\n        recursive_directory_iterator verifier(basePath);\r\n        EXPECT(verifier != endIter);\r\n\r\n        EXPECT(verifier->path() == basePath / L\"dir1\"sv);\r\n        EXPECT(verifier->is_directory());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir1/dir2\"sv);\r\n        EXPECT(verifier->is_directory());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir1/dir2/file3\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir1/file1\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n        EXPECT(verifier->hard_link_count() == 2);\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir1/file2\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n        EXPECT(verifier->hard_link_count() == 2);\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir3\"sv);\r\n        EXPECT(verifier->is_directory());\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir3/file1\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n        EXPECT(verifier->hard_link_count() == 2);\r\n\r\n        ++verifier;\r\n        EXPECT(verifier != endIter);\r\n        EXPECT(verifier->path() == basePath / L\"dir3/file2\"sv);\r\n        EXPECT(verifier->is_regular_file());\r\n        EXPECT(verifier->hard_link_count() == 2);\r\n\r\n        EXPECT(equivalent(basePath / L\"dir1/file1\"sv, basePath / L\"dir3/file1\"sv));\r\n        EXPECT(equivalent(basePath / L\"dir1/file2\"sv, basePath / L\"dir3/file2\"sv));\r\n\r\n        ++verifier;\r\n        EXPECT(verifier == endIter);\r\n    }\r\n\r\n    remove_all(basePath);\r\n\r\n    for (auto&& nonexistent : nonexistentPaths) {\r\n        EXPECT(throws_filesystem_error([&] { copy(nonexistent, basePath); }, \"copy\"sv, nonexistent, basePath));\r\n    }\r\n\r\n    EXPECT(throws_filesystem_error([&] { copy(basePath, basePath); }, \"copy\"sv, basePath, basePath));\r\n}\r\n\r\nvoid setup_copy_file_tests(const path& directoryPath) {\r\n    error_code ec;\r\n    create_file_containing(directoryPath / L\"older.txt\"sv, L\"older file\");\r\n    last_write_time(directoryPath / L\"older.txt\"sv, file_time_type::clock::now() - 1h, ec);\r\n    EXPECT(good(ec));\r\n    create_file_containing(directoryPath / L\"newer.txt\"sv, L\"newer file\");\r\n}\r\n\r\nvoid expect_copy_file_bad_all_options(const path& from, const path& to) {\r\n    error_code ec;\r\n    EXPECT(!copy_file(from, to, ec));\r\n    EXPECT(bad(ec));\r\n    EXPECT(throws_filesystem_error([&] { return copy_file(from, to); }, \"copy_file\"sv, from, to));\r\n    EXPECT(!copy_file(from, to, copy_options::none, ec));\r\n    EXPECT(bad(ec));\r\n    EXPECT(throws_filesystem_error([&] { return copy_file(from, to, copy_options::none); }, \"copy_file\"sv, from, to));\r\n    EXPECT(!copy_file(from, to, copy_options::skip_existing, ec));\r\n    EXPECT(bad(ec));\r\n    EXPECT(!copy_file(from, to, copy_options::overwrite_existing, ec));\r\n    EXPECT(bad(ec));\r\n    EXPECT(!copy_file(from, to, copy_options::update_existing, ec));\r\n    EXPECT(bad(ec));\r\n}\r\n\r\nvoid test_copy_file() {\r\n    const test_temp_directory tempDir(\"copy_file\"sv);\r\n    const auto& directoryPath = tempDir.directoryPath;\r\n\r\n    error_code ec;\r\n    // test error cases\r\n    // !is_regular_file(from)\r\n    create_directory(directoryPath / L\"dir\"sv, ec);\r\n    EXPECT(good(ec));\r\n    expect_copy_file_bad_all_options(directoryPath / L\"dir\"sv, directoryPath / L\"dir2\"sv);\r\n\r\n    setup_copy_file_tests(directoryPath);\r\n\r\n    // exists(to) is true and is_regular_file(to) is false\r\n    expect_copy_file_bad_all_options(directoryPath / L\"older.txt\"sv, directoryPath / L\"dir\"sv);\r\n\r\n    // exists(to) is true and equivalent(from, to) is true\r\n    expect_copy_file_bad_all_options(directoryPath / L\"older.txt\"sv, directoryPath / L\"older.txt\"sv);\r\n\r\n    // exists(to) is true and no update option tested below\r\n\r\n    // basic tests for success\r\n    EXPECT(copy_file(directoryPath / L\"older.txt\"sv, directoryPath / L\"success.txt\"sv, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(read_file_contents(directoryPath / L\"success.txt\"sv) == L\"older file\");\r\n\r\n    EXPECT(copy_file(directoryPath / L\"older.txt\"sv, directoryPath / L\"success_none.txt\"sv, copy_options::none, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(read_file_contents(directoryPath / L\"success_none.txt\"sv) == L\"older file\");\r\n\r\n    EXPECT(copy_file(\r\n        directoryPath / L\"older.txt\"sv, directoryPath / L\"success_skip.txt\"sv, copy_options::skip_existing, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(read_file_contents(directoryPath / L\"success_skip.txt\"sv) == L\"older file\");\r\n\r\n    EXPECT(copy_file(directoryPath / L\"older.txt\"sv, directoryPath / L\"success_overwrite.txt\"sv,\r\n        copy_options::overwrite_existing, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(read_file_contents(directoryPath / L\"success_overwrite.txt\"sv) == L\"older file\");\r\n\r\n    EXPECT(copy_file(\r\n        directoryPath / L\"older.txt\"sv, directoryPath / L\"success_update.txt\"sv, copy_options::update_existing, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(read_file_contents(directoryPath / L\"success_update.txt\"sv) == L\"older file\");\r\n\r\n    // test that none fails for any exists(to)\r\n    EXPECT(!copy_file(directoryPath / L\"older.txt\"sv, directoryPath / L\"newer.txt\"sv, ec));\r\n    EXPECT(bad(ec));\r\n    EXPECT(!copy_file(directoryPath / L\"older.txt\"sv, directoryPath / L\"newer.txt\"sv, copy_options::none, ec));\r\n    EXPECT(bad(ec));\r\n    EXPECT(!copy_file(directoryPath / L\"newer.txt\"sv, directoryPath / L\"older.txt\"sv, ec));\r\n    EXPECT(bad(ec));\r\n    EXPECT(!copy_file(directoryPath / L\"newer.txt\"sv, directoryPath / L\"older.txt\"sv, copy_options::none, ec));\r\n    EXPECT(bad(ec));\r\n\r\n    // test that skip_existing succeeds for any exists(to) and does nothing\r\n    EXPECT(!copy_file(directoryPath / L\"older.txt\"sv, directoryPath / L\"newer.txt\"sv, copy_options::skip_existing, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(read_file_contents(directoryPath / L\"newer.txt\"sv) == L\"newer file\");\r\n    EXPECT(!copy_file(directoryPath / L\"newer.txt\"sv, directoryPath / L\"older.txt\"sv, copy_options::skip_existing, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(read_file_contents(directoryPath / L\"older.txt\"sv) == L\"older file\");\r\n\r\n    // test that overwrite_existing succeeds for any exists(to) and overwrites\r\n    EXPECT(copy_file(\r\n        directoryPath / L\"older.txt\"sv, directoryPath / L\"newer.txt\"sv, copy_options::overwrite_existing, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(read_file_contents(directoryPath / L\"newer.txt\"sv) == L\"older file\");\r\n    setup_copy_file_tests(directoryPath);\r\n    EXPECT(copy_file(\r\n        directoryPath / L\"newer.txt\"sv, directoryPath / L\"older.txt\"sv, copy_options::overwrite_existing, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(read_file_contents(directoryPath / L\"older.txt\"sv) == L\"newer file\");\r\n\r\n    // test that update_existing succeeds for any exists(to) and overwrites if and only if the source is newer\r\n    setup_copy_file_tests(directoryPath);\r\n    EXPECT(\r\n        !copy_file(directoryPath / L\"older.txt\"sv, directoryPath / L\"newer.txt\"sv, copy_options::update_existing, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(read_file_contents(directoryPath / L\"newer.txt\"sv) == L\"newer file\");\r\n    EXPECT(\r\n        copy_file(directoryPath / L\"newer.txt\"sv, directoryPath / L\"older.txt\"sv, copy_options::update_existing, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(read_file_contents(directoryPath / L\"older.txt\"sv) == L\"newer file\");\r\n}\r\n\r\nvoid test_create_symlink_cleanup() {\r\n    // internal unit-level test of CreateSymbolicLinkW fixup\r\n    const pair<wstring_view, wstring_view> testCases[] = {\r\n        {LR\"(test/\\/dir)\"sv, LR\"(test\\dir)\"sv},\r\n        {LR\"(test/dir)\"sv, LR\"(test\\dir)\"sv},\r\n        {LR\"(C:////////a)\"sv, LR\"(C:\\a)\"sv},\r\n        {LR\"(//server/a////////b////////c////////d)\"sv, LR\"(\\\\server\\a\\b\\c\\d)\"sv},\r\n        {LR\"(\\\\.\\\\\\\\\\\\\\device)\"sv, LR\"(\\\\.\\device)\"sv},\r\n        // note /// gets interpreted as root-directory:\r\n        {LR\"(///server/a////////b////////c////////d)\"sv, LR\"(\\server\\a\\b\\c\\d)\"sv},\r\n    };\r\n\r\n    for (const auto& [input, expected] : testCases) {\r\n        const auto actual = _Get_cleaned_symlink_target(input);\r\n        assert(expected == actual.get());\r\n    }\r\n}\r\n\r\nvoid test_create_directory_symlink() {\r\n    const auto filename = L\"test_create_directory_symlink\"sv;\r\n    const auto linkname = L\"test_create_directory_symlink_link\"sv;\r\n\r\n    error_code ec;\r\n    create_directory_symlink(filename, linkname, ec); // can create symlink to nonexistent thing\r\n    create_directory(filename); // make the thing exist later\r\n    if (ec) {\r\n        check_symlink_permissions(ec, L\"create_directory_symlink\");\r\n        EXPECT(remove(filename, ec));\r\n        EXPECT(good(ec));\r\n        EXPECT(!remove(linkname, ec));\r\n        EXPECT(good(ec));\r\n    } else {\r\n        EXPECT(equivalent(filename, linkname, ec));\r\n        EXPECT(good(ec));\r\n\r\n        EXPECT(remove(filename, ec));\r\n        EXPECT(good(ec));\r\n        EXPECT(remove(linkname, ec));\r\n        EXPECT(good(ec));\r\n\r\n        // Also test VSO-649249 create_symlink and create_directory_symlink create malformed symlinks\r\n        // when the target contains /s (rather than \\s) and the target does not exist\r\n        create_directory_symlink(L\"test_create_directory_symlink_dir/cat.dir\"sv, linkname);\r\n        EXPECT(status(linkname, ec).type() == file_type::not_found);\r\n        EXPECT(ec == error_condition(3, system_category())); // ERROR_PATH_NOT_FOUND\r\n        EXPECT(remove(linkname, ec));\r\n        EXPECT(good(ec));\r\n\r\n        create_directory_symlink(L\"test_create_directory_symlink_dir/cat.dir\"sv, linkname, ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(status(linkname, ec).type() == file_type::not_found);\r\n        EXPECT(ec == error_condition(3, system_category())); // ERROR_PATH_NOT_FOUND\r\n        EXPECT(remove(linkname, ec));\r\n        EXPECT(good(ec));\r\n    }\r\n\r\n    // example error: malformed source\r\n    EXPECT(throws_filesystem_error(\r\n        [&] { create_directory_symlink(filename, badPath); }, \"create_directory_symlink\", filename, badPath));\r\n    create_directory_symlink(filename, badPath, ec);\r\n    EXPECT(bad(ec));\r\n}\r\n\r\nvoid test_create_hard_link() {\r\n    error_code ec;\r\n    const auto filename = L\"test_create_hard_link.txt\";\r\n    remove(filename, ec);\r\n    EXPECT(good(ec));\r\n    const auto linkname = L\"test_create_hard_link_link.txt\";\r\n    remove(linkname, ec);\r\n    EXPECT(good(ec));\r\n\r\n    create_file_containing(filename, L\"hello\\n\");\r\n    create_hard_link(filename, linkname, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(equivalent(filename, linkname, ec));\r\n    EXPECT(good(ec));\r\n\r\n    // example error: self link\r\n    EXPECT(\r\n        throws_filesystem_error([&] { create_hard_link(filename, filename); }, \"create_hard_link\", filename, filename));\r\n    create_hard_link(filename, filename, ec);\r\n    EXPECT(bad(ec));\r\n\r\n    remove(filename, ec);\r\n    EXPECT(good(ec));\r\n    remove(linkname, ec);\r\n    EXPECT(good(ec));\r\n}\r\n\r\nvoid test_create_symlink() {\r\n    const auto filename = L\"test_create_symlink.txt\"sv;\r\n    const auto linkname = L\"test_create_symlink_link.txt\"sv;\r\n\r\n    error_code ec;\r\n    create_symlink(filename, linkname, ec); // can create symlink to nonexistent thing\r\n    create_file_containing(filename, L\"hello\\n\"); // make the thing exist later\r\n    if (ec) {\r\n        check_symlink_permissions(ec, L\"create_symlink\");\r\n        EXPECT(remove(filename, ec));\r\n        EXPECT(good(ec));\r\n        EXPECT(!remove(linkname, ec));\r\n        EXPECT(good(ec));\r\n    } else {\r\n        EXPECT(equivalent(filename, linkname, ec));\r\n        EXPECT(good(ec));\r\n\r\n        EXPECT(remove(filename, ec));\r\n        EXPECT(good(ec));\r\n        EXPECT(remove(linkname, ec));\r\n        EXPECT(good(ec));\r\n\r\n        // Also test VSO-649249 create_symlink and create_directory_symlink create malformed\r\n        // symlinks when the target contains /s (rather than \\s) and the target does not exist\r\n        create_symlink(L\"test_create_symlink_dir/cat.txt\"sv, linkname);\r\n        EXPECT(status(linkname, ec).type() == file_type::not_found);\r\n        EXPECT(ec == error_condition(3, system_category())); // ERROR_PATH_NOT_FOUND\r\n        EXPECT(remove(linkname, ec));\r\n        EXPECT(good(ec));\r\n\r\n        create_symlink(L\"test_create_symlink_dir/cat.txt\"sv, linkname, ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(status(linkname, ec).type() == file_type::not_found);\r\n        EXPECT(ec == error_condition(3, system_category())); // ERROR_PATH_NOT_FOUND\r\n        EXPECT(remove(linkname, ec));\r\n        EXPECT(good(ec));\r\n    }\r\n\r\n    // example error: malformed source\r\n    EXPECT(throws_filesystem_error([&] { create_symlink(filename, badPath); }, \"create_symlink\", filename, badPath));\r\n    create_symlink(filename, badPath, ec);\r\n    EXPECT(bad(ec));\r\n}\r\n\r\nvoid test_read_symlink() {\r\n\r\n    { // Success case\r\n        error_code ec;\r\n        const path filepath = L\"test_read_symlink.txt\";\r\n        remove(filepath, ec);\r\n        EXPECT(good(ec));\r\n        const path linkpath = L\"test_read_symlink_link.txt\";\r\n        remove(linkpath, ec);\r\n        EXPECT(good(ec));\r\n\r\n        create_file_containing(filepath, L\"helloworld\\n\");\r\n        create_symlink(filepath, linkpath, ec);\r\n        if (ec) {\r\n            check_symlink_permissions(ec, L\"read_symlink\");\r\n        } else {\r\n            EXPECT(equivalent(filepath, linkpath, ec));\r\n            EXPECT(good(ec));\r\n\r\n            const auto actual_ec = read_symlink(linkpath, ec);\r\n            EXPECT(good(ec));\r\n            EXPECT(filepath == actual_ec);\r\n\r\n            const auto actual = read_symlink(linkpath);\r\n            EXPECT(filepath == actual);\r\n\r\n            remove(filepath, ec);\r\n            EXPECT(good(ec));\r\n            remove(linkpath, ec);\r\n            EXPECT(good(ec));\r\n        }\r\n    }\r\n\r\n    {\r\n        // TODO: Also test junctions\r\n    }\r\n\r\n    { // File is not a symlink\r\n        error_code ec;\r\n        const path not_a_reparse_point = L\"test_read_symlink_not_a_reparse_point.txt\";\r\n        remove(not_a_reparse_point, ec);\r\n        EXPECT(good(ec));\r\n\r\n        create_file_containing(not_a_reparse_point, L\"helloworld\\n\");\r\n        const auto actual = read_symlink(not_a_reparse_point, ec);\r\n        EXPECT(ec.value() == 4390); // ERROR_NOT_A_REPARSE_POINT\r\n\r\n        EXPECT(throws_filesystem_error(\r\n            [&]() { return read_symlink(not_a_reparse_point); }, \"read_symlink\", not_a_reparse_point.native()));\r\n\r\n        remove(not_a_reparse_point, ec);\r\n        EXPECT(good(ec));\r\n    }\r\n\r\n    { // File does not exist\r\n        error_code ec;\r\n        const path non_existent = L\"test_read_symlink_non_existent.txt\";\r\n        remove(non_existent, ec);\r\n        EXPECT(good(ec));\r\n\r\n        const auto actual = read_symlink(non_existent, ec);\r\n        EXPECT(ec.value() == 2); // ERROR_FILE_NOT_FOUND\r\n\r\n        EXPECT(throws_filesystem_error(\r\n            [&]() { return read_symlink(non_existent); }, \"read_symlink\", non_existent.native()));\r\n    }\r\n}\r\n\r\nvoid test_copy_symlink() {\r\n    { // Success case for file\r\n        error_code ec;\r\n        const path filepath = L\"test_copy_symlink.txt\";\r\n        remove(filepath, ec);\r\n        EXPECT(good(ec));\r\n        const path linkpath_original = L\"test_copy_symlink_link_theoriginal.txt\";\r\n        remove(linkpath_original, ec);\r\n        EXPECT(good(ec));\r\n        const path linkpath_copy = L\"test_copy_symlink_link_thecopy.txt\";\r\n        remove(linkpath_copy, ec);\r\n        EXPECT(good(ec));\r\n\r\n        create_file_containing(filepath, L\"helloworld\\n\");\r\n        EXPECT(!is_directory(filepath, ec));\r\n        EXPECT(good(ec));\r\n        create_symlink(filepath, linkpath_original, ec);\r\n        if (ec) {\r\n            check_symlink_permissions(ec, L\"copy_symlink 1\");\r\n        } else {\r\n            EXPECT(equivalent(filepath, linkpath_original, ec));\r\n            EXPECT(good(ec));\r\n            EXPECT(is_regular_file(linkpath_original, ec));\r\n            EXPECT(good(ec));\r\n\r\n            copy_symlink(linkpath_original, linkpath_copy, ec);\r\n            EXPECT(good(ec));\r\n            EXPECT(equivalent(linkpath_original, linkpath_copy, ec));\r\n            EXPECT(good(ec));\r\n            EXPECT(is_regular_file(linkpath_copy, ec));\r\n            EXPECT(good(ec));\r\n            remove(linkpath_copy, ec);\r\n            EXPECT(good(ec));\r\n\r\n            copy_symlink(linkpath_original, linkpath_copy);\r\n            EXPECT(equivalent(linkpath_original, linkpath_copy));\r\n            EXPECT(!is_directory(linkpath_copy));\r\n            remove(linkpath_copy, ec);\r\n            EXPECT(good(ec));\r\n\r\n            remove(linkpath_original, ec);\r\n            EXPECT(good(ec));\r\n            remove(filepath, ec);\r\n            EXPECT(good(ec));\r\n        }\r\n    }\r\n\r\n    { // Success case for directory\r\n        error_code ec;\r\n        const path filepath = L\"test_copy_symlink.dir\";\r\n        remove(filepath, ec);\r\n        EXPECT(good(ec));\r\n        const path linkpath_original = L\"test_copy_symlink_link_theoriginal.dir\";\r\n        remove(linkpath_original, ec);\r\n        EXPECT(good(ec));\r\n        const path linkpath_copy = L\"test_copy_symlink_link_thecopy.dir\";\r\n        remove(linkpath_copy, ec);\r\n        EXPECT(good(ec));\r\n\r\n        create_directory(filepath);\r\n        EXPECT(is_directory(filepath, ec));\r\n        EXPECT(good(ec));\r\n        create_directory_symlink(filepath, linkpath_original, ec);\r\n        if (ec) {\r\n            check_symlink_permissions(ec, L\"copy_symlink 2\");\r\n        } else {\r\n            EXPECT(equivalent(filepath, linkpath_original, ec));\r\n            EXPECT(good(ec));\r\n            EXPECT(is_directory(linkpath_original, ec));\r\n            EXPECT(good(ec));\r\n\r\n            copy_symlink(linkpath_original, linkpath_copy, ec);\r\n            EXPECT(good(ec));\r\n            EXPECT(equivalent(linkpath_original, linkpath_copy, ec));\r\n            EXPECT(good(ec));\r\n            EXPECT(is_directory(linkpath_copy, ec));\r\n            EXPECT(good(ec));\r\n            remove(linkpath_copy, ec);\r\n            EXPECT(good(ec));\r\n\r\n            copy_symlink(linkpath_original, linkpath_copy);\r\n            EXPECT(equivalent(linkpath_original, linkpath_copy));\r\n            EXPECT(is_directory(linkpath_copy, ec));\r\n            EXPECT(good(ec));\r\n            remove(linkpath_copy, ec);\r\n            EXPECT(good(ec));\r\n\r\n            remove(linkpath_original, ec);\r\n            EXPECT(good(ec));\r\n            remove(filepath, ec);\r\n            EXPECT(good(ec));\r\n        }\r\n    }\r\n\r\n    { // Symlink target does not exist\r\n        error_code ec;\r\n        const path filepath = L\"test_copy_symlink_target_not_present.txt\";\r\n        remove(filepath, ec);\r\n        EXPECT(good(ec));\r\n        const path linkpath_original = L\"test_copy_symlink_target_not_present_theoriginal.txt\";\r\n        remove(linkpath_original, ec);\r\n        EXPECT(good(ec));\r\n        const path linkpath_copy = L\"test_copy_symlink_target_not_present_thecopy.txt\";\r\n        remove(linkpath_copy, ec);\r\n        EXPECT(good(ec));\r\n\r\n        create_symlink(filepath, linkpath_original, ec);\r\n        if (ec) {\r\n            check_symlink_permissions(ec, L\"copy_symlink 3\");\r\n        } else {\r\n            copy_symlink(linkpath_original, linkpath_copy, ec);\r\n            EXPECT(good(ec));\r\n            EXPECT(read_symlink(linkpath_original) == read_symlink(linkpath_copy));\r\n            EXPECT(good(ec));\r\n            remove(linkpath_copy, ec);\r\n            EXPECT(good(ec));\r\n\r\n            copy_symlink(linkpath_original, linkpath_copy);\r\n            EXPECT(read_symlink(linkpath_original) == read_symlink(linkpath_copy));\r\n            remove(linkpath_copy, ec);\r\n            EXPECT(good(ec));\r\n\r\n            remove(linkpath_original, ec);\r\n            EXPECT(good(ec));\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_copy_directory_as_symlink() {\r\n    const path dirpath{L\"./test-lwg2682-dir\"sv};\r\n    error_code ec;\r\n    create_directory(dirpath, ec);\r\n    EXPECT(good(ec));\r\n    try {\r\n        copy(dirpath, L\"./symlink\"sv, copy_options::create_symlinks);\r\n        EXPECT(false);\r\n    } catch (const filesystem_error& e) {\r\n        EXPECT(e.code().value() == static_cast<int>(errc::is_a_directory));\r\n    }\r\n    {\r\n        error_code copy_ec;\r\n        copy(dirpath, L\"./symlink\"sv, copy_options::create_symlinks, copy_ec);\r\n        EXPECT(copy_ec.value() == static_cast<int>(errc::is_a_directory));\r\n    }\r\n    remove_all(dirpath, ec);\r\n    EXPECT(good(ec));\r\n}\r\n\r\nvoid equivalent_failure_test_case(const path& left, const path& right) {\r\n    EXPECT(throws_filesystem_error([&] { EXPECT(!equivalent(left, right)); }, \"equivalent\", left, right));\r\n\r\n    error_code ec;\r\n    if (equivalent(left, right, ec)) {\r\n        wcerr << L\"Expected equivalent(\" << left << L\", \" << right << L\") to fail but it returned true\\n\";\r\n        pass = false;\r\n    } else if (!ec) {\r\n        EXPECT(ec.category() == system_category());\r\n        wcerr << L\"Expected equivalent(\" << left << L\", \" << right\r\n              << L\") to fail but it \"\r\n                 L\"returned no failure code\\n\";\r\n        pass = false;\r\n    }\r\n}\r\n\r\nvoid equivalent_test_case(const path& left, const path& right, const bool expected) {\r\n    error_code ec;\r\n    const bool actual = equivalent(left, right, ec);\r\n    EXPECT(good(ec));\r\n    if (expected != actual) {\r\n        wcerr << boolalpha << L\"Expected equivalent(\" << left << L\", \" << right << L\") to be \" << expected\r\n              << L\" but it was \" << actual << L\"\\n\";\r\n        pass = false;\r\n    }\r\n}\r\n\r\nvoid test_equivalent() {\r\n    const test_temp_directory tempDir(\"equivalent\"sv);\r\n    const path& directoryPath = tempDir.directoryPath;\r\n    error_code ec(-1, generic_category());\r\n\r\n    create_directory(directoryPath / L\"dir\"sv, ec);\r\n    EXPECT(good(ec));\r\n    create_file_containing(directoryPath / L\"a.txt\"sv, L\"a\\n\");\r\n    create_file_containing(directoryPath / L\"b.txt\"sv, L\"b\\n\");\r\n\r\n    equivalent_failure_test_case(directoryPath / L\"nonexistent.txt\"sv, directoryPath / L\"nonexistent.txt\"sv);\r\n    equivalent_failure_test_case(directoryPath / L\"a.txt\"sv, directoryPath / L\"nonexistent.txt\");\r\n    equivalent_failure_test_case(directoryPath / L\"nonexistent.txt\"sv, directoryPath / L\"b.txt\"sv);\r\n\r\n    equivalent_test_case(directoryPath / L\"a.txt\"sv, directoryPath / L\"a.txt\"sv, true);\r\n    equivalent_test_case(\r\n        directoryPath / L\"a.txt\"sv, directoryPath / L\"..\"sv / directoryPath.filename() / L\"a.txt\"sv, true);\r\n    equivalent_test_case(directoryPath / L\"a.txt\"sv, directoryPath / L\"b.txt\"sv, false);\r\n    equivalent_test_case(directoryPath, directoryPath, true);\r\n    equivalent_test_case(directoryPath / L\"dir\"sv, directoryPath / L\"dir\"sv, true);\r\n    equivalent_test_case(directoryPath, directoryPath / L\"dir\"sv, false);\r\n}\r\n\r\nvoid test_file_size_and_resize() {\r\n    const path filename(L\"file_size_test.txt\"sv);\r\n    const path dirname(L\"file_size_test.dir\"sv);\r\n    vector<char> tmp{'0', '1', '2', '3', '4'};\r\n    write_file_data(filename, tmp);\r\n\r\n    EXPECT(file_size(filename) == tmp.size());\r\n    error_code ec;\r\n    EXPECT(file_size(filename, ec) == tmp.size());\r\n    EXPECT(good(ec));\r\n\r\n    EXPECT(throws_filesystem_error([] { return file_size(badPath); }, \"file_size\"sv, badPath));\r\n    EXPECT(file_size(badPath, ec) == static_cast<uintmax_t>(-1));\r\n    EXPECT(bad(ec));\r\n\r\n    EXPECT(\r\n        throws_filesystem_error([&] { resize_file(filename, static_cast<uintmax_t>(-1)); }, \"resize_file\", filename));\r\n    ec.clear();\r\n    resize_file(filename, static_cast<uintmax_t>(-1), ec);\r\n    EXPECT(bad(ec));\r\n\r\n    resize_file(filename, 100, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(file_size(filename, ec) == 100);\r\n    EXPECT(good(ec));\r\n    tmp.resize(100);\r\n    EXPECT(tmp == read_file_data(filename));\r\n\r\n    // with the throwing interfaces\r\n    resize_file(filename, 2);\r\n    EXPECT(file_size(filename) == 2);\r\n    tmp.resize(2);\r\n    EXPECT(tmp == read_file_data(filename));\r\n\r\n    remove(filename, ec);\r\n    EXPECT(good(ec));\r\n\r\n    create_directory(dirname);\r\n    resize_file(dirname, 100, ec);\r\n    EXPECT(bad(ec));\r\n}\r\n\r\nvoid test_hard_link_count() {\r\n    error_code ec;\r\n    const path realFileName(L\"test_hard_link_count.txt\"sv);\r\n    const path link1(L\"test_hard_link_count_link_1\"sv);\r\n    const path link2(L\"test_hard_link_count_link_2\"sv);\r\n    const auto cleanup = [&] {\r\n        remove(realFileName, ec);\r\n        EXPECT(good(ec));\r\n        remove(link1, ec);\r\n        EXPECT(good(ec));\r\n        remove(link2, ec);\r\n        EXPECT(good(ec));\r\n    };\r\n\r\n    cleanup();\r\n\r\n    create_file_containing(realFileName, L\"Hello\");\r\n    EXPECT(hard_link_count(realFileName, ec) == 1);\r\n    EXPECT(good(ec));\r\n    create_hard_link(realFileName, link1, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(hard_link_count(realFileName, ec) == 2);\r\n    EXPECT(good(ec));\r\n    EXPECT(hard_link_count(link1, ec) == 2);\r\n    EXPECT(good(ec));\r\n    create_hard_link(realFileName, link2, ec);\r\n    EXPECT(good(ec));\r\n    // also test throwing versions\r\n    EXPECT(hard_link_count(realFileName) == 3);\r\n    EXPECT(hard_link_count(link1) == 3);\r\n    EXPECT(hard_link_count(link2) == 3);\r\n\r\n    cleanup();\r\n\r\n    EXPECT(throws_filesystem_error([] { return hard_link_count(badPath); }, \"hard_link_count\", badPath));\r\n    EXPECT(hard_link_count(badPath, ec) == static_cast<uintmax_t>(-1));\r\n    EXPECT(bad(ec));\r\n}\r\n\r\nvoid test_is_empty() {\r\n    error_code ec;\r\n    const test_temp_directory tempDir(\"is_empty\"sv);\r\n    const path testDir = tempDir.directoryPath / L\"dir\"sv;\r\n\r\n    EXPECT(throws_filesystem_error([&] { return filesystem::is_empty(testDir); }, \"is_empty\", testDir));\r\n    EXPECT(!filesystem::is_empty(testDir, ec));\r\n    EXPECT(bad(ec));\r\n\r\n    create_directory(testDir, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(filesystem::is_empty(testDir));\r\n    EXPECT(filesystem::is_empty(testDir, ec));\r\n    EXPECT(good(ec));\r\n\r\n    const path testFile(testDir / L\"test_file\"sv);\r\n    create_file_containing(testFile, L\"\");\r\n    EXPECT(!filesystem::is_empty(testDir));\r\n    EXPECT(!filesystem::is_empty(testDir, ec));\r\n    EXPECT(good(ec));\r\n\r\n    EXPECT(filesystem::is_empty(testFile));\r\n    EXPECT(filesystem::is_empty(testFile, ec));\r\n    EXPECT(good(ec));\r\n\r\n    resize_file(testFile, 1);\r\n    EXPECT(!filesystem::is_empty(testFile));\r\n    EXPECT(!filesystem::is_empty(testFile, ec));\r\n    EXPECT(good(ec));\r\n}\r\n\r\ntemplate <typename T>\r\nstruct MyTraits : char_traits<T> {};\r\n\r\ntemplate <typename T>\r\nstruct MyAlloc {\r\n    using value_type = T;\r\n\r\n    MyAlloc() = default;\r\n\r\n    template <typename U>\r\n    MyAlloc(const MyAlloc<U>&) {}\r\n\r\n    T* allocate(size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* p, size_t n) {\r\n        allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <typename U>\r\n    bool operator==(const MyAlloc<U>&) const {\r\n        return true;\r\n    }\r\n    template <typename U>\r\n    bool operator!=(const MyAlloc<U>&) const {\r\n        return false;\r\n    }\r\n};\r\n\r\nvoid test_conversions() {\r\n    static_assert(is_constructible_v<path, string>);\r\n    static_assert(is_constructible_v<path, wstring>);\r\n    static_assert(is_constructible_v<path, u16string>);\r\n    static_assert(is_constructible_v<path, u32string>);\r\n    static_assert(is_constructible_v<path, basic_string<char, MyTraits<char>, MyAlloc<char>>>);\r\n    static_assert(is_constructible_v<path, basic_string<wchar_t, MyTraits<wchar_t>, MyAlloc<wchar_t>>>);\r\n    static_assert(is_constructible_v<path, basic_string<char16_t, MyTraits<char16_t>, MyAlloc<char16_t>>>);\r\n    static_assert(is_constructible_v<path, basic_string<char32_t, MyTraits<char32_t>, MyAlloc<char32_t>>>);\r\n\r\n    static_assert(is_constructible_v<path, string_view>);\r\n    static_assert(is_constructible_v<path, wstring_view>);\r\n    static_assert(is_constructible_v<path, u16string_view>);\r\n    static_assert(is_constructible_v<path, u32string_view>);\r\n    static_assert(is_constructible_v<path, basic_string_view<char, MyTraits<char>>>);\r\n    static_assert(is_constructible_v<path, basic_string_view<wchar_t, MyTraits<wchar_t>>>);\r\n    static_assert(is_constructible_v<path, basic_string_view<char16_t, MyTraits<char16_t>>>);\r\n    static_assert(is_constructible_v<path, basic_string_view<char32_t, MyTraits<char32_t>>>);\r\n\r\n    static_assert(is_constructible_v<path, char (&)[5]>);\r\n    static_assert(is_constructible_v<path, wchar_t(&)[5]>);\r\n    static_assert(is_constructible_v<path, char16_t (&)[5]>);\r\n    static_assert(is_constructible_v<path, char32_t (&)[5]>);\r\n    static_assert(is_constructible_v<path, const char (&)[5]>);\r\n    static_assert(is_constructible_v<path, const wchar_t(&)[5]>);\r\n    static_assert(is_constructible_v<path, const char16_t (&)[5]>);\r\n    static_assert(is_constructible_v<path, const char32_t (&)[5]>);\r\n\r\n    static_assert(is_constructible_v<path, char*>);\r\n    static_assert(is_constructible_v<path, wchar_t*>);\r\n    static_assert(is_constructible_v<path, char16_t*>);\r\n    static_assert(is_constructible_v<path, char32_t*>);\r\n    static_assert(is_constructible_v<path, const char*>);\r\n    static_assert(is_constructible_v<path, const wchar_t*>);\r\n    static_assert(is_constructible_v<path, const char16_t*>);\r\n    static_assert(is_constructible_v<path, const char32_t*>);\r\n\r\n    static_assert(is_constructible_v<path, string::iterator>);\r\n    static_assert(is_constructible_v<path, wstring::iterator>);\r\n    static_assert(is_constructible_v<path, u16string::iterator>);\r\n    static_assert(is_constructible_v<path, u32string::iterator>);\r\n    static_assert(is_constructible_v<path, string::const_iterator>);\r\n    static_assert(is_constructible_v<path, wstring::const_iterator>);\r\n    static_assert(is_constructible_v<path, u16string::const_iterator>);\r\n    static_assert(is_constructible_v<path, u32string::const_iterator>);\r\n\r\n    static_assert(is_constructible_v<path, forward_list<char>::iterator>);\r\n    static_assert(is_constructible_v<path, forward_list<wchar_t>::iterator>);\r\n    static_assert(is_constructible_v<path, forward_list<char16_t>::iterator>);\r\n    static_assert(is_constructible_v<path, forward_list<char32_t>::iterator>);\r\n    static_assert(is_constructible_v<path, forward_list<char>::const_iterator>);\r\n    static_assert(is_constructible_v<path, forward_list<wchar_t>::const_iterator>);\r\n    static_assert(is_constructible_v<path, forward_list<char16_t>::const_iterator>);\r\n    static_assert(is_constructible_v<path, forward_list<char32_t>::const_iterator>);\r\n\r\n    static_assert(!is_constructible_v<path, basic_string<signed char>>);\r\n    static_assert(!is_constructible_v<path, basic_string_view<signed char>>);\r\n    static_assert(!is_constructible_v<path, const signed char (&)[5]>);\r\n    static_assert(!is_constructible_v<path, const signed char*>);\r\n    static_assert(!is_constructible_v<path, basic_string<unsigned char>>);\r\n    static_assert(!is_constructible_v<path, basic_string_view<unsigned char>>);\r\n    static_assert(!is_constructible_v<path, const unsigned char (&)[5]>);\r\n    static_assert(!is_constructible_v<path, const unsigned char*>);\r\n    static_assert(!is_constructible_v<path, char>);\r\n    static_assert(!is_constructible_v<path, double>);\r\n\r\n    static_assert(is_constructible_v<path, const char32_t*, path::format>);\r\n\r\n    static_assert(is_convertible_v<const char32_t*, path>);\r\n\r\n    static_assert(is_constructible_v<path, char*, char*>);\r\n    static_assert(is_constructible_v<path, wchar_t*, wchar_t*>);\r\n    static_assert(is_constructible_v<path, char16_t*, char16_t*>);\r\n    static_assert(is_constructible_v<path, char32_t*, char32_t*>);\r\n    static_assert(is_constructible_v<path, const char*, const char*>);\r\n    static_assert(is_constructible_v<path, const wchar_t*, const wchar_t*>);\r\n    static_assert(is_constructible_v<path, const char16_t*, const char16_t*>);\r\n    static_assert(is_constructible_v<path, const char32_t*, const char32_t*>);\r\n\r\n    static_assert(is_constructible_v<path, string::iterator, string::iterator>);\r\n    static_assert(is_constructible_v<path, wstring::iterator, wstring::iterator>);\r\n    static_assert(is_constructible_v<path, u16string::iterator, u16string::iterator>);\r\n    static_assert(is_constructible_v<path, u32string::iterator, u32string::iterator>);\r\n    static_assert(is_constructible_v<path, string::const_iterator, string::const_iterator>);\r\n    static_assert(is_constructible_v<path, wstring::const_iterator, wstring::const_iterator>);\r\n    static_assert(is_constructible_v<path, u16string::const_iterator, u16string::const_iterator>);\r\n    static_assert(is_constructible_v<path, u32string::const_iterator, u32string::const_iterator>);\r\n\r\n    static_assert(is_constructible_v<path, forward_list<char>::iterator, forward_list<char>::iterator>);\r\n    static_assert(is_constructible_v<path, forward_list<wchar_t>::iterator, forward_list<wchar_t>::iterator>);\r\n    static_assert(is_constructible_v<path, forward_list<char16_t>::iterator, forward_list<char16_t>::iterator>);\r\n    static_assert(is_constructible_v<path, forward_list<char32_t>::iterator, forward_list<char32_t>::iterator>);\r\n    static_assert(is_constructible_v<path, forward_list<char>::const_iterator, forward_list<char>::const_iterator>);\r\n    static_assert(\r\n        is_constructible_v<path, forward_list<wchar_t>::const_iterator, forward_list<wchar_t>::const_iterator>);\r\n    static_assert(\r\n        is_constructible_v<path, forward_list<char16_t>::const_iterator, forward_list<char16_t>::const_iterator>);\r\n    static_assert(\r\n        is_constructible_v<path, forward_list<char32_t>::const_iterator, forward_list<char32_t>::const_iterator>);\r\n\r\n    static_assert(is_constructible_v<path, const char32_t*, const char32_t*, path::format>);\r\n\r\n    const path p1(\"narrow.txt\"sv);\r\n    EXPECT(p1.native() == L\"narrow.txt\");\r\n\r\n    const path p2(L\"wide_\\xD83D\\xDC08.txt\"sv);\r\n    EXPECT(p2.native() == L\"wide_\\xD83D\\xDC08.txt\");\r\n\r\n    const path p3(u\"utf16_\\xD83D\\xDC08.txt\"sv);\r\n    EXPECT(p3.native() == L\"utf16_\\xD83D\\xDC08.txt\");\r\n\r\n    const path p4(U\"utf32_\\x1F408.txt\"sv);\r\n    EXPECT(p4.native() == L\"utf32_\\xD83D\\xDC08.txt\");\r\n\r\n    const path p5(\"basic_string.txt\"s);\r\n    EXPECT(p5.native() == L\"basic_string.txt\");\r\n\r\n    const path p6(\"array.txt\");\r\n    EXPECT(p6.native() == L\"array.txt\");\r\n\r\n    const char* const ptr = \"pointer.txt\";\r\n    const path p7(ptr);\r\n    EXPECT(p7.native() == L\"pointer.txt\");\r\n\r\n    const vector<char> vec = {'v', 'e', 'c', '.', 't', 'x', 't', '\\0'};\r\n    const path p8(vec.begin());\r\n    EXPECT(p8.native() == L\"vec.txt\");\r\n\r\n    const forward_list<char> fl = {'f', 'l', '.', 't', 'x', 't', '\\0'};\r\n    const path p9(fl.begin());\r\n    EXPECT(p9.native() == L\"fl.txt\");\r\n\r\n    const path p10(ptr + 1, ptr + 10);\r\n    EXPECT(p10.native() == L\"ointer.tx\");\r\n\r\n    const path p11(vec.begin() + 1, vec.begin() + 6);\r\n    EXPECT(p11.native() == L\"ec.tx\");\r\n\r\n    const path p12(next(fl.begin()), next(fl.begin(), 5));\r\n    EXPECT(p12.native() == L\"l.tx\");\r\n\r\n    path p(\"one\");\r\n    EXPECT(p.native() == L\"one\");\r\n    p = \"two\";\r\n    EXPECT(p.native() == L\"two\");\r\n    p.assign(\"three\");\r\n    EXPECT(p.native() == L\"three\");\r\n    p.assign(vec.rbegin() + 1, vec.rend());\r\n    EXPECT(p.native() == L\"txt.cev\");\r\n    p /= \"earth\";\r\n    EXPECT(p.native() == LR\"(txt.cev\\earth)\");\r\n    p.append(\"mars\");\r\n    EXPECT(p.native() == LR\"(txt.cev\\earth\\mars)\");\r\n    p.append(vec.begin(), vec.begin() + 3);\r\n    EXPECT(p.native() == LR\"(txt.cev\\earth\\mars\\vec)\");\r\n    p += \"tor\";\r\n    EXPECT(p.native() == LR\"(txt.cev\\earth\\mars\\vector)\");\r\n    p += U'\\U0001F408';\r\n    EXPECT(p.native()\r\n           == LR\"(txt.cev\\earth\\mars\\vector)\"\r\n              L\"\\xD83D\\xDC08\");\r\n    p.concat(\"meow\");\r\n    EXPECT(p.native()\r\n           == LR\"(txt.cev\\earth\\mars\\vector)\"\r\n              L\"\\xD83D\\xDC08\"\r\n              LR\"(meow)\");\r\n    p.concat(ptr, ptr + 5);\r\n    EXPECT(p.native()\r\n           == LR\"(txt.cev\\earth\\mars\\vector)\"\r\n              L\"\\xD83D\\xDC08\"\r\n              LR\"(meowpoint)\");\r\n\r\n    const path p13(R\"(pepper\\mint)\");\r\n    EXPECT(p13.string() == R\"(pepper\\mint)\");\r\n    EXPECT(p13.string<char>() == R\"(pepper\\mint)\");\r\n    EXPECT(p13.generic_string() == R\"(pepper/mint)\");\r\n    EXPECT(p13.generic_string<char>() == R\"(pepper/mint)\");\r\n\r\n    EXPECT(narrow_equal(u8\"\\U0001F408\"sv, \"\\xF0\\x9F\\x90\\x88\"sv)); // UTF-8 basic check\r\n    const path p14(U\"cat_\\x1F408_emoji\\\\meow\");\r\n    EXPECT(p14.wstring() == L\"cat_\\xD83D\\xDC08_emoji\\\\meow\");\r\n\r\n#ifdef __cpp_lib_char8_t\r\n    using utf8_result_t = basic_string<char8_t>;\r\n#else // ^^^ __cpp_lib_char8_t / !__cpp_lib_char8_t vvv\r\n    using utf8_result_t = basic_string<char>;\r\n#endif // __cpp_lib_char8_t\r\n\r\n    static_assert(is_same_v<decltype(p14.u8string()), utf8_result_t>);\r\n    EXPECT(narrow_equal(p14.u8string(), \"cat_\\xF0\\x9F\\x90\\x88_emoji\\\\meow\"sv));\r\n\r\n    EXPECT(p14.u16string() == u\"cat_\\xD83D\\xDC08_emoji\\\\meow\");\r\n    EXPECT(p14.u32string() == U\"cat_\\x1F408_emoji\\\\meow\");\r\n    EXPECT(p14.string<wchar_t>() == L\"cat_\\xD83D\\xDC08_emoji\\\\meow\");\r\n    EXPECT(p14.string<char16_t>() == u\"cat_\\xD83D\\xDC08_emoji\\\\meow\");\r\n    EXPECT(p14.string<char32_t>() == U\"cat_\\x1F408_emoji\\\\meow\");\r\n    const auto str1 = p14.string<char32_t, MyTraits<char32_t>, MyAlloc<char32_t>>();\r\n    const auto str2 = p14.string<char32_t, MyTraits<char32_t>>(MyAlloc<char32_t>{});\r\n    static_assert(is_same_v<decltype(str1), const basic_string<char32_t, MyTraits<char32_t>, MyAlloc<char32_t>>>);\r\n    static_assert(is_same_v<decltype(str2), const basic_string<char32_t, MyTraits<char32_t>, MyAlloc<char32_t>>>);\r\n    EXPECT(str1 == U\"cat_\\x1F408_emoji\\\\meow\");\r\n    EXPECT(str2 == U\"cat_\\x1F408_emoji\\\\meow\");\r\n\r\n    EXPECT(p14.generic_wstring() == L\"cat_\\xD83D\\xDC08_emoji/meow\");\r\n\r\n    static_assert(is_same_v<decltype(p14.generic_u8string()), utf8_result_t>);\r\n    EXPECT(narrow_equal(p14.generic_u8string(), \"cat_\\xF0\\x9F\\x90\\x88_emoji/meow\"sv));\r\n\r\n    EXPECT(p14.generic_u16string() == u\"cat_\\xD83D\\xDC08_emoji/meow\");\r\n    EXPECT(p14.generic_u32string() == U\"cat_\\x1F408_emoji/meow\");\r\n    EXPECT(p14.generic_string<wchar_t>() == L\"cat_\\xD83D\\xDC08_emoji/meow\");\r\n    EXPECT(p14.generic_string<char16_t>() == u\"cat_\\xD83D\\xDC08_emoji/meow\");\r\n    EXPECT(p14.generic_string<char32_t>() == U\"cat_\\x1F408_emoji/meow\");\r\n    const auto str3 = p14.generic_string<char32_t, MyTraits<char32_t>, MyAlloc<char32_t>>();\r\n    const auto str4 = p14.generic_string<char32_t, MyTraits<char32_t>>(MyAlloc<char32_t>{});\r\n    static_assert(is_same_v<decltype(str3), const basic_string<char32_t, MyTraits<char32_t>, MyAlloc<char32_t>>>);\r\n    static_assert(is_same_v<decltype(str4), const basic_string<char32_t, MyTraits<char32_t>, MyAlloc<char32_t>>>);\r\n    EXPECT(str3 == U\"cat_\\x1F408_emoji/meow\");\r\n    EXPECT(str4 == U\"cat_\\x1F408_emoji/meow\");\r\n\r\n    p = R\"(one\\two\\three)\";\r\n    ostringstream oss;\r\n    oss << p;\r\n    EXPECT(oss.str() == R\"(\"one\\\\two\\\\three\")\");\r\n    istringstream iss(R\"(\"four\\\\five\\\\six\")\");\r\n    iss >> p;\r\n    EXPECT(p.string() == R\"(four\\five\\six)\");\r\n\r\n    const string utf8_str(\"cat_\\xF0\\x9F\\x90\\x88_emoji\"s);\r\n    const path p15 = u8path(utf8_str);\r\n    EXPECT(p15.native() == L\"cat_\\xD83D\\xDC08_emoji\");\r\n    const path p16 = u8path(utf8_str.begin(), utf8_str.end());\r\n    EXPECT(p16.native() == L\"cat_\\xD83D\\xDC08_emoji\");\r\n\r\n#ifdef __cpp_lib_char8_t\r\n    const u8string real_utf8_str(u8\"cat_\\U0001F408_emoji\");\r\n    const path p17 = path(real_utf8_str);\r\n    EXPECT(p17.native() == L\"cat_\\xD83D\\xDC08_emoji\");\r\n    const path p18 = path(real_utf8_str.begin(), real_utf8_str.end());\r\n    EXPECT(p18.native() == L\"cat_\\xD83D\\xDC08_emoji\");\r\n#endif // __cpp_lib_char8_t\r\n}\r\n\r\nvoid test_file_size() {\r\n    const test_temp_directory tempDir(\"file_size\"sv);\r\n    const path filePath = tempDir.directoryPath / L\"example.txt\"sv;\r\n    create_file_containing(filePath, L\"hello world\");\r\n\r\n    // _NODISCARD inline uintmax_t file_size(const path& _Path);\r\n    // _NODISCARD inline uintmax_t file_size(const path& _Path, error_code& _Ec) noexcept;\r\n\r\n    // test invalid or empty path\r\n    {\r\n        error_code ec;\r\n        EXPECT(bad_file_size == file_size(L\"\"sv, ec));\r\n        EXPECT(ec == errc::no_such_file_or_directory);\r\n\r\n        for (auto&& nonexistent : nonexistentPaths) {\r\n            EXPECT(bad_file_size == file_size(nonexistent, ec));\r\n            EXPECT(ec == errc::no_such_file_or_directory);\r\n        }\r\n\r\n        EXPECT(throws_filesystem_error([] { (void) file_size(L\"\"sv); }, \"file_size\", L\"\"sv));\r\n    }\r\n\r\n    // test happy\r\n    {\r\n        error_code ec;\r\n        const auto fsize = file_size(filePath, ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(fsize > 0);\r\n        EXPECT(file_size(filePath) == fsize);\r\n    }\r\n\r\n    // _NODISCARD uintmax_t directory_entry::file_size() const;\r\n    // _NODISCARD uintmax_t directory::file_size(error_code& _Ec) const noexcept;\r\n\r\n    // test empty path\r\n    {\r\n        error_code ec;\r\n        const directory_entry default_de;\r\n        EXPECT(bad_file_size == default_de.file_size(ec));\r\n        EXPECT(ec == errc::no_such_file_or_directory);\r\n        EXPECT(throws_filesystem_error([&] { (void) default_de.file_size(); }, \"directory_entry::file_size\"));\r\n    }\r\n\r\n    // test happy file\r\n    {\r\n        error_code ec;\r\n        const directory_entry de(filePath);\r\n        const auto fsize = de.file_size(ec);\r\n        EXPECT(fsize > 0);\r\n        EXPECT(good(ec));\r\n        EXPECT(de.file_size() == fsize);\r\n    }\r\n}\r\n\r\nvoid test_last_write_time() {\r\n    // set the last write time to a very early value; this will fail implementations that attempt to adjust\r\n    // from the system_clock epoch to the NT epoch when writing to disk\r\n    error_code ec;\r\n    constexpr file_time_type testTime{file_time_type::duration{1}};\r\n\r\n    const test_temp_directory tempDir(\"last_write_time\"sv);\r\n\r\n    const auto filePath = tempDir.directoryPath / L\"test_last_write_time.txt\"sv;\r\n\r\n    // should fail because file does not exist:\r\n    EXPECT(throws_filesystem_error([&] { return last_write_time(filePath); }, \"last_write_time\", filePath));\r\n    EXPECT(throws_filesystem_error([&] { last_write_time(filePath, testTime); }, \"last_write_time\", filePath));\r\n    EXPECT(last_write_time(filePath, ec) == file_time_type::min());\r\n    EXPECT(bad(ec));\r\n    last_write_time(filePath, testTime, ec);\r\n    EXPECT(bad(ec));\r\n\r\n    create_file_containing(filePath, L\"last write time testing\");\r\n\r\n    auto actual = last_write_time(filePath, ec);\r\n    EXPECT(good(ec));\r\n    // test that the file we just created has last write time now +/- 30 minutes\r\n    auto minAcceptable = file_time_type::clock::now() - 30min;\r\n    auto maxAcceptable = minAcceptable + 1h;\r\n    EXPECT(actual >= minAcceptable && actual <= maxAcceptable);\r\n\r\n    last_write_time(filePath, testTime, ec);\r\n    EXPECT(good(ec));\r\n\r\n    actual = last_write_time(filePath, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(actual == testTime); // assumes test is running on NTFS or ReFS\r\n\r\n    // _NODISCARD inline file_time_type last_write_time(const path& _Path);\r\n    // _NODISCARD inline file_time_type last_write_time(const path& _Path, error_code& _Ec) noexcept;\r\n\r\n    // test invalid or empty path\r\n    {\r\n        EXPECT(bad_file_time == last_write_time(L\"\"sv, ec));\r\n        EXPECT(ec == errc::no_such_file_or_directory);\r\n\r\n        for (auto&& nonexistent : nonexistentPaths) {\r\n            EXPECT(bad_file_time == last_write_time(nonexistent, ec));\r\n            EXPECT(ec == errc::no_such_file_or_directory);\r\n        }\r\n\r\n        EXPECT(throws_filesystem_error([] { (void) last_write_time(L\"\"sv); }, \"last_write_time\", L\"\"sv));\r\n    }\r\n\r\n    // test happy\r\n    {\r\n        const auto ftime = last_write_time(filePath, ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(ftime != bad_file_time);\r\n        EXPECT(last_write_time(filePath) == ftime);\r\n\r\n        const auto dtime = last_write_time(tempDir.directoryPath, ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(dtime != bad_file_time);\r\n        EXPECT(last_write_time(tempDir.directoryPath) == dtime);\r\n    }\r\n\r\n    // _NODISCARD file_time_type directory_entry::last_write_time() const;\r\n    // _NODISCARD file_time_type directory::last_write_time(error_code& _Ec) const noexcept;\r\n\r\n    // test empty path\r\n    {\r\n        const directory_entry default_de;\r\n        EXPECT(bad_file_time == default_de.last_write_time(ec));\r\n        EXPECT(ec == errc::no_such_file_or_directory);\r\n        EXPECT(\r\n            throws_filesystem_error([&] { (void) default_de.last_write_time(); }, \"directory_entry::last_write_time\"));\r\n    }\r\n\r\n    // test happy file\r\n    {\r\n        const directory_entry de(filePath);\r\n        const auto ftime = de.last_write_time(ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(ftime != bad_file_time);\r\n        EXPECT(de.last_write_time() == ftime);\r\n    }\r\n\r\n    // test happy dir\r\n    {\r\n        const directory_entry de(tempDir.directoryPath);\r\n        const auto ftime = de.last_write_time(ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(ftime != bad_file_time);\r\n        EXPECT(de.last_write_time() == ftime);\r\n        const auto newTime = ftime + 1h;\r\n        last_write_time(tempDir.directoryPath, newTime);\r\n        EXPECT(last_write_time(tempDir.directoryPath) == newTime);\r\n    }\r\n}\r\n\r\nvoid test_invalid_conversions() {\r\n    // N4727 30.11.7.2.2 [fs.path.type.cvt] is vague, but we throw\r\n    // system_error to prevent silent data loss from invalid conversions.\r\n    const string_view invalid_utf8     = \"forbidden_\\xC0_byte\"sv;\r\n    const wstring_view invalid_utf16   = L\"reversed_\\xDC08\\xD83D_surrogates\"sv;\r\n    const u32string_view invalid_utf32 = U\"huge_\\x110000_codepoint\"sv;\r\n\r\n    const path invalid_path(invalid_utf16);\r\n\r\n    EXPECT(throws_system_error([&invalid_path] { (void) invalid_path.string(); }));\r\n    EXPECT(throws_system_error([&invalid_path] { (void) invalid_path.u8string(); }));\r\n    EXPECT(throws_system_error([&invalid_path] { (void) invalid_path.u32string(); }));\r\n    EXPECT(throws_system_error([&invalid_utf8] { (void) u8path(invalid_utf8); }));\r\n    EXPECT(throws_system_error([&invalid_utf32] { (void) path{invalid_utf32}; }));\r\n}\r\n\r\nvoid test_status() {\r\n    const test_temp_directory tempDir(\"status\"sv);\r\n    const path& testDir = tempDir.directoryPath;\r\n    const path testFile(testDir / L\"test_file\"sv);\r\n    const path testLink(testDir / L\"test_link\"sv);\r\n    error_code ec;\r\n    create_file_containing(testFile, L\"Hello\");\r\n\r\n    for (auto&& nonexistent : nonexistentPaths) {\r\n        EXPECT(status(nonexistent).type() == file_type::not_found); // should not throw\r\n        EXPECT(status(nonexistent, ec).type() == file_type::not_found);\r\n        EXPECT(ec.category() == system_category());\r\n        // Accept ERROR_FILE_NOT_FOUND (2), ERROR_PATH_NOT_FOUND (3), ERROR_BAD_NETPATH (53), ERROR_INVALID_NAME (123).\r\n        // This should match __std_is_file_not_found() in <xfilesystem_abi.h>.\r\n        EXPECT(ec.value() == 2 || ec.value() == 3 || ec.value() == 53 || ec.value() == 123);\r\n        EXPECT(ec == errc::no_such_file_or_directory);\r\n    }\r\n\r\n    EXPECT(!exists(file_status{}));\r\n    EXPECT(!exists(file_status{file_type::not_found}));\r\n    EXPECT(exists(file_status{file_type::regular}));\r\n    EXPECT(!is_block_file(file_status{}));\r\n    EXPECT(is_block_file(file_status{file_type::block}));\r\n    EXPECT(!is_character_file(file_status{}));\r\n    EXPECT(is_character_file(file_status{file_type::character}));\r\n    EXPECT(!is_directory(file_status{}));\r\n    EXPECT(is_directory(file_status{file_type::directory}));\r\n    EXPECT(!is_fifo(file_status{}));\r\n    EXPECT(is_fifo(file_status{file_type::fifo}));\r\n    EXPECT(!is_other(file_status{}));\r\n    EXPECT(!is_other(file_status{file_type::not_found}));\r\n    EXPECT(is_other(file_status{file_type::block}));\r\n    EXPECT(is_other(file_status{file_type::character}));\r\n    EXPECT(is_other(file_status{file_type::junction}));\r\n    EXPECT(is_other(file_status{file_type::socket}));\r\n    EXPECT(is_other(file_status{file_type::unknown}));\r\n    EXPECT(!is_regular_file(file_status{}));\r\n    EXPECT(is_regular_file(file_status{file_type::regular}));\r\n    EXPECT(!is_socket(file_status{}));\r\n    EXPECT(is_socket(file_status{file_type::socket}));\r\n    EXPECT(!is_symlink(file_status{}));\r\n    EXPECT(is_symlink(file_status{file_type::symlink}));\r\n\r\n    for (auto&& nonexistent : nonexistentPaths) {\r\n        EXPECT(!exists(nonexistent));\r\n        EXPECT(!is_block_file(nonexistent));\r\n        EXPECT(!is_character_file(nonexistent));\r\n        EXPECT(!is_directory(nonexistent));\r\n        EXPECT(!is_fifo(nonexistent));\r\n        EXPECT(!is_other(nonexistent));\r\n        EXPECT(!is_regular_file(nonexistent));\r\n        EXPECT(!is_socket(nonexistent));\r\n        EXPECT(!is_symlink(nonexistent));\r\n\r\n        EXPECT(!exists(nonexistent, ec));\r\n        EXPECT(good(ec));\r\n        EXPECT(!is_block_file(nonexistent, ec));\r\n        EXPECT(ec == errc::no_such_file_or_directory);\r\n        EXPECT(!is_character_file(nonexistent, ec));\r\n        EXPECT(ec == errc::no_such_file_or_directory);\r\n        EXPECT(!is_directory(nonexistent, ec));\r\n        EXPECT(ec == errc::no_such_file_or_directory);\r\n        EXPECT(!is_fifo(nonexistent, ec));\r\n        EXPECT(ec == errc::no_such_file_or_directory);\r\n        EXPECT(!is_other(nonexistent, ec));\r\n        EXPECT(ec == errc::no_such_file_or_directory);\r\n        EXPECT(!is_regular_file(nonexistent, ec));\r\n        EXPECT(ec == errc::no_such_file_or_directory);\r\n        EXPECT(!is_socket(nonexistent, ec));\r\n        EXPECT(ec == errc::no_such_file_or_directory);\r\n        EXPECT(!is_symlink(nonexistent, ec));\r\n        EXPECT(ec == errc::no_such_file_or_directory);\r\n    }\r\n\r\n    EXPECT(exists(testDir));\r\n    EXPECT(exists(testDir, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(!is_block_file(testDir));\r\n    EXPECT(!is_block_file(testDir, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(!is_character_file(testDir));\r\n    EXPECT(is_directory(testDir));\r\n    EXPECT(is_directory(testDir, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(!is_fifo(testDir));\r\n    EXPECT(!is_other(testDir));\r\n    EXPECT(!is_other(testDir, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(!is_regular_file(testDir));\r\n    EXPECT(!is_socket(testDir));\r\n    EXPECT(!is_symlink(testDir));\r\n\r\n    EXPECT(exists(testFile));\r\n    EXPECT(exists(testFile, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(!is_block_file(testFile));\r\n    EXPECT(!is_block_file(testFile, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(!is_character_file(testFile));\r\n    EXPECT(!is_directory(testFile));\r\n    EXPECT(!is_fifo(testFile));\r\n    EXPECT(!is_other(testFile));\r\n    EXPECT(is_regular_file(testFile));\r\n    EXPECT(is_regular_file(testFile, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(!is_socket(testFile));\r\n    EXPECT(!is_symlink(testFile));\r\n\r\n    create_symlink(testFile, testLink, ec);\r\n    if (ec) {\r\n        check_symlink_permissions(ec, L\"status functions\");\r\n    } else {\r\n        EXPECT(exists(testLink));\r\n        EXPECT(exists(testLink, ec));\r\n        EXPECT(good(ec));\r\n        EXPECT(!is_block_file(testLink));\r\n        EXPECT(!is_block_file(testLink, ec));\r\n        EXPECT(good(ec));\r\n        EXPECT(!is_character_file(testLink));\r\n        EXPECT(!is_directory(testLink));\r\n        EXPECT(!is_fifo(testLink));\r\n        EXPECT(!is_other(testLink));\r\n        EXPECT(is_regular_file(testLink)); // followed symlink\r\n        EXPECT(is_regular_file(testLink, ec));\r\n        EXPECT(good(ec));\r\n        EXPECT(!is_socket(testLink));\r\n        EXPECT(is_symlink(testLink));\r\n        EXPECT(is_symlink(testLink, ec)); // didn't follow symlink\r\n        EXPECT(good(ec));\r\n    }\r\n}\r\n\r\nvoid test_locale_conversions() {\r\n    {\r\n        const string_view utf8_koshka_cat = \"\\xD0\\xBA\\xD0\\xBE\\xD1\\x88\\xD0\\xBA\\xD0\\xB0_\\xF0\\x9F\\x90\\x88\"sv;\r\n        EXPECT(narrow_equal(utf8_koshka_cat, u8\"\\u043A\\u043E\\u0448\\u043A\\u0430_\\U0001F408\"sv)); // UTF-8 basic check\r\n        const wstring_view utf16_koshka_cat = L\"\\x043A\\x043E\\x0448\\x043A\\x0430_\\xD83D\\xDC08\"sv;\r\n        EXPECT(u8path(utf8_koshka_cat).native() == utf16_koshka_cat); // UTF-16 basic check\r\n\r\n        const locale utf8_locale(locale::classic(), new codecvt_utf8_utf16<wchar_t>());\r\n\r\n        const path p4(utf8_koshka_cat.begin(), utf8_koshka_cat.end(), utf8_locale);\r\n        EXPECT(p4.native() == utf16_koshka_cat);\r\n\r\n        EXPECT(\r\n            throws_system_error([&] { (void) path{utf8_koshka_cat.begin() + 1, utf8_koshka_cat.end(), utf8_locale}; }));\r\n    }\r\n}\r\n\r\nvoid test_lexically_normal() {\r\n    // N4727 30.11.7.4.11 [fs.path.gen]/2\r\n    EXPECT(path(\"cat/./dog/..\").lexically_normal() == \"cat/\");\r\n    EXPECT(path(\"cat/.///dog/../\").lexically_normal() == \"cat/\");\r\n\r\n    EXPECT(path(LR\"(cat/./dog/..)\"sv).lexically_normal().native() == LR\"(cat\\)\"sv);\r\n    EXPECT(path(LR\"(cat/.///dog/../)\"sv).lexically_normal().native() == LR\"(cat\\)\"sv);\r\n\r\n    EXPECT(path(LR\"()\"sv).lexically_normal().native() == LR\"()\"sv);\r\n\r\n    EXPECT(path(LR\"(X:)\"sv).lexically_normal().native() == LR\"(X:)\"sv);\r\n\r\n    EXPECT(path(LR\"(X:DriveRelative)\"sv).lexically_normal().native() == LR\"(X:DriveRelative)\"sv);\r\n\r\n    EXPECT(path(LR\"(X:\\)\"sv).lexically_normal().native() == LR\"(X:\\)\"sv);\r\n    EXPECT(path(LR\"(X:/)\"sv).lexically_normal().native() == LR\"(X:\\)\"sv);\r\n    EXPECT(path(LR\"(X:\\\\\\)\"sv).lexically_normal().native() == LR\"(X:\\)\"sv);\r\n    EXPECT(path(LR\"(X:///)\"sv).lexically_normal().native() == LR\"(X:\\)\"sv);\r\n\r\n    EXPECT(path(LR\"(X:\\DosAbsolute)\"sv).lexically_normal().native() == LR\"(X:\\DosAbsolute)\"sv);\r\n    EXPECT(path(LR\"(X:/DosAbsolute)\"sv).lexically_normal().native() == LR\"(X:\\DosAbsolute)\"sv);\r\n    EXPECT(path(LR\"(X:\\\\\\DosAbsolute)\"sv).lexically_normal().native() == LR\"(X:\\DosAbsolute)\"sv);\r\n    EXPECT(path(LR\"(X:///DosAbsolute)\"sv).lexically_normal().native() == LR\"(X:\\DosAbsolute)\"sv);\r\n\r\n    EXPECT(path(LR\"(\\RootRelative)\"sv).lexically_normal().native() == LR\"(\\RootRelative)\"sv);\r\n    EXPECT(path(LR\"(/RootRelative)\"sv).lexically_normal().native() == LR\"(\\RootRelative)\"sv);\r\n    EXPECT(path(LR\"(\\\\\\RootRelative)\"sv).lexically_normal().native() == LR\"(\\RootRelative)\"sv);\r\n    EXPECT(path(LR\"(///RootRelative)\"sv).lexically_normal().native() == LR\"(\\RootRelative)\"sv);\r\n\r\n    EXPECT(path(LR\"(\\\\server\\share)\"sv).lexically_normal().native() == LR\"(\\\\server\\share)\"sv);\r\n    EXPECT(path(LR\"(//server/share)\"sv).lexically_normal().native() == LR\"(\\\\server\\share)\"sv);\r\n    EXPECT(path(LR\"(\\\\server\\\\\\share)\"sv).lexically_normal().native() == LR\"(\\\\server\\share)\"sv);\r\n    EXPECT(path(LR\"(//server///share)\"sv).lexically_normal().native() == LR\"(\\\\server\\share)\"sv);\r\n\r\n    EXPECT(path(LR\"(\\\\?\\device)\"sv).lexically_normal().native() == LR\"(\\\\?\\device)\"sv);\r\n    EXPECT(path(LR\"(//?/device)\"sv).lexically_normal().native() == LR\"(\\\\?\\device)\"sv);\r\n\r\n    EXPECT(path(LR\"(\\??\\device)\"sv).lexically_normal().native() == LR\"(\\??\\device)\"sv);\r\n    EXPECT(path(LR\"(/??/device)\"sv).lexically_normal().native() == LR\"(\\??\\device)\"sv);\r\n\r\n    EXPECT(path(LR\"(\\\\.\\device)\"sv).lexically_normal().native() == LR\"(\\\\.\\device)\"sv);\r\n    EXPECT(path(LR\"(//./device)\"sv).lexically_normal().native() == LR\"(\\\\.\\device)\"sv);\r\n\r\n    EXPECT(path(LR\"(\\\\?\\UNC\\server\\share)\"sv).lexically_normal().native() == LR\"(\\\\?\\UNC\\server\\share)\"sv);\r\n    EXPECT(path(LR\"(//?/UNC/server/share)\"sv).lexically_normal().native() == LR\"(\\\\?\\UNC\\server\\share)\"sv);\r\n\r\n    EXPECT(path(LR\"(C:\\a/b\\\\c\\/d/\\e//f)\"sv).lexically_normal().native() == LR\"(C:\\a\\b\\c\\d\\e\\f)\"sv);\r\n\r\n    EXPECT(path(LR\"(C:\\meow\\)\"sv).lexically_normal().native() == LR\"(C:\\meow\\)\"sv);\r\n    EXPECT(path(LR\"(C:\\meow/)\"sv).lexically_normal().native() == LR\"(C:\\meow\\)\"sv);\r\n    EXPECT(path(LR\"(C:\\meow\\\\)\"sv).lexically_normal().native() == LR\"(C:\\meow\\)\"sv);\r\n    EXPECT(path(LR\"(C:\\meow\\/)\"sv).lexically_normal().native() == LR\"(C:\\meow\\)\"sv);\r\n    EXPECT(path(LR\"(C:\\meow/\\)\"sv).lexically_normal().native() == LR\"(C:\\meow\\)\"sv);\r\n    EXPECT(path(LR\"(C:\\meow//)\"sv).lexically_normal().native() == LR\"(C:\\meow\\)\"sv);\r\n\r\n    EXPECT(path(LR\"(C:\\a\\.\\b\\.\\.\\c\\.\\.\\.)\"sv).lexically_normal().native() == LR\"(C:\\a\\b\\c\\)\"sv);\r\n    EXPECT(path(LR\"(C:\\a\\.\\b\\.\\.\\c\\.\\.\\.\\)\"sv).lexically_normal().native() == LR\"(C:\\a\\b\\c\\)\"sv);\r\n\r\n    EXPECT(path(LR\"(.)\"sv).lexically_normal().native() == LR\"(.)\"sv);\r\n    EXPECT(path(LR\"(.\\)\"sv).lexically_normal().native() == LR\"(.)\"sv);\r\n    EXPECT(path(LR\"(.\\.)\"sv).lexically_normal().native() == LR\"(.)\"sv);\r\n    EXPECT(path(LR\"(.\\.\\)\"sv).lexically_normal().native() == LR\"(.)\"sv);\r\n\r\n    EXPECT(path(LR\"(C:\\a\\b\\c\\d\\e\\..\\f\\..\\..\\..\\g\\h)\"sv).lexically_normal().native() == LR\"(C:\\a\\b\\g\\h)\"sv);\r\n\r\n    EXPECT(path(LR\"(C:\\a\\b\\c\\d\\e\\..\\f\\..\\..\\..\\g\\h\\..)\"sv).lexically_normal().native() == LR\"(C:\\a\\b\\g\\)\"sv);\r\n    EXPECT(path(LR\"(C:\\a\\b\\c\\d\\e\\..\\f\\..\\..\\..\\g\\h\\..\\)\"sv).lexically_normal().native() == LR\"(C:\\a\\b\\g\\)\"sv);\r\n\r\n    EXPECT(path(LR\"(..\\..\\..)\"sv).lexically_normal().native() == LR\"(..\\..\\..)\"sv);\r\n    EXPECT(path(LR\"(..\\..\\..\\)\"sv).lexically_normal().native() == LR\"(..\\..\\..)\"sv);\r\n\r\n    EXPECT(path(LR\"(..\\..\\..\\a\\b\\c)\"sv).lexically_normal().native() == LR\"(..\\..\\..\\a\\b\\c)\"sv);\r\n\r\n    EXPECT(path(LR\"(\\..\\..\\..)\"sv).lexically_normal().native() == LR\"(\\)\"sv);\r\n    EXPECT(path(LR\"(\\..\\..\\..\\)\"sv).lexically_normal().native() == LR\"(\\)\"sv);\r\n\r\n    EXPECT(path(LR\"(\\..\\..\\..\\a\\b\\c)\"sv).lexically_normal().native() == LR\"(\\a\\b\\c)\"sv);\r\n\r\n    EXPECT(path(LR\"(a\\..)\"sv).lexically_normal().native() == LR\"(.)\"sv);\r\n    EXPECT(path(LR\"(a\\..\\)\"sv).lexically_normal().native() == LR\"(.)\"sv);\r\n\r\n    EXPECT(path(LR\"(/\\server/\\share/\\a/\\b/\\c/\\./\\./\\d/\\../\\../\\../\\../\\../\\../\\../\\other/x/y/z/.././..\\meow.txt)\"sv)\r\n               .lexically_normal()\r\n               .native()\r\n           == LR\"(\\\\server\\other\\x\\meow.txt)\"sv);\r\n}\r\n\r\nvoid test_lexically_relative() {\r\n    // N4727 30.11.7.4.11 [fs.path.gen]/5\r\n    EXPECT(path(\"/a/d\").lexically_relative(\"/a/b/c\") == \"../../d\");\r\n    EXPECT(path(\"/a/b/c\").lexically_relative(\"/a/d\") == \"../b/c\");\r\n    EXPECT(path(\"a/b/c\").lexically_relative(\"a\") == \"b/c\");\r\n    EXPECT(path(\"a/b/c\").lexically_relative(\"a/b/c/x/y\") == \"../..\");\r\n    EXPECT(path(\"a/b/c\").lexically_relative(\"a/b/c\") == \".\");\r\n    EXPECT(path(\"a/b\").lexically_relative(\"c/d\") == \"../../a/b\");\r\n\r\n    EXPECT(path(LR\"(/a/d)\"sv).lexically_relative(LR\"(/a/b/c)\"sv).native() == LR\"(..\\..\\d)\"sv);\r\n    EXPECT(path(LR\"(/a/b/c)\"sv).lexically_relative(LR\"(/a/d)\"sv).native() == LR\"(..\\b\\c)\"sv);\r\n    EXPECT(path(LR\"(a/b/c)\"sv).lexically_relative(LR\"(a)\"sv).native() == LR\"(b\\c)\"sv);\r\n    EXPECT(path(LR\"(a/b/c)\"sv).lexically_relative(LR\"(a/b/c/x/y)\"sv).native() == LR\"(..\\..)\"sv);\r\n    EXPECT(path(LR\"(a/b/c)\"sv).lexically_relative(LR\"(a/b/c)\"sv).native() == LR\"(.)\"sv);\r\n    EXPECT(path(LR\"(a/b/c)\"sv).lexically_relative(LR\"(a/b/c/)\"sv).native() == LR\"(.)\"sv);\r\n    EXPECT(path(LR\"(a/b)\"sv).lexically_relative(LR\"(c/d)\"sv).native() == LR\"(..\\..\\a\\b)\"sv);\r\n\r\n    EXPECT(path(LR\"()\"sv).lexically_relative(LR\"()\"sv).native() == LR\"(.)\"sv);\r\n\r\n    EXPECT(path(LR\"(C:\\Temp)\"sv).lexically_relative(LR\"(D:\\Temp)\"sv).native() == LR\"()\"sv);\r\n\r\n    EXPECT(path(LR\"(C:\\Temp)\"sv).lexically_relative(LR\"(Temp)\"sv).native() == LR\"()\"sv);\r\n    EXPECT(path(LR\"(Temp)\"sv).lexically_relative(LR\"(C:\\Temp)\"sv).native() == LR\"()\"sv);\r\n\r\n    EXPECT(path(LR\"(one)\"sv).lexically_relative(LR\"(\\two)\"sv).native() == LR\"()\"sv);\r\n\r\n    EXPECT(path(LR\"(cat)\"sv).lexically_relative(LR\"(..\\..\\..\\meow)\"sv).native() == LR\"()\"sv);\r\n    EXPECT(path(LR\"(cat)\"sv).lexically_relative(LR\"(..\\..\\..\\meow\\.\\.\\.\\.\\.)\"sv).native() == LR\"()\"sv);\r\n\r\n    EXPECT(path(LR\"(a\\b\\c\\x\\y\\z)\"sv).lexically_relative(LR\"(a\\b\\c\\d\\.\\e\\..\\f\\g)\"sv).native() == LR\"(..\\..\\..\\x\\y\\z)\"sv);\r\n\r\n    EXPECT(path(LR\"(a\\b\\c\\x\\y\\z)\"sv).lexically_relative(LR\"(a\\b\\c\\d\\.\\e\\..\\f\\g\\..\\..\\..)\"sv).native() == LR\"(x\\y\\z)\"sv);\r\n\r\n    // LWG-3070\r\n    EXPECT(path(LR\"(\\a:\\b:)\"sv).lexically_relative(LR\"(\\a:\\c:)\"sv).native() == LR\"()\"sv);\r\n\r\n    // LWG-3699\r\n    EXPECT(path(LR\"(\\\\?\\a:\\meow)\"sv).lexically_relative(LR\"(\\\\?\\a:\\meow)\"sv).native() == LR\"(.)\"sv);\r\n    EXPECT(path(LR\"(\\\\?\\a:\\meow\\purr\\nyan)\"sv).lexically_relative(LR\"(\\\\?\\a:\\meow)\"sv).native() == LR\"(purr\\nyan)\"sv);\r\n    EXPECT(path(LR\"(\\\\?\\a:\\meow)\"sv).lexically_relative(LR\"(\\\\?\\a:\\meow\\purr\\nyan)\"sv).native() == LR\"(..\\..)\"sv);\r\n    // UNC/DOS together should return an empty path\r\n    EXPECT(path(LR\"(a:\\meow)\"sv).lexically_relative(LR\"(\\\\?\\a:\\meow)\"sv).native().empty());\r\n    EXPECT(path(LR\"(\\\\?\\a:\\meow)\"sv).lexically_relative(LR\"(a:\\meow)\"sv).native().empty());\r\n}\r\n\r\nvoid test_lexically_proximate() {\r\n    EXPECT(path(LR\"(/a/d)\"sv).lexically_proximate(LR\"(/a/b/c)\"sv).native() == LR\"(..\\..\\d)\"sv);\r\n    EXPECT(path(LR\"(/a/b/c)\"sv).lexically_proximate(LR\"(/a/d)\"sv).native() == LR\"(..\\b\\c)\"sv);\r\n    EXPECT(path(LR\"(a/b/c)\"sv).lexically_proximate(LR\"(a)\"sv).native() == LR\"(b\\c)\"sv);\r\n    EXPECT(path(LR\"(a/b/c)\"sv).lexically_proximate(LR\"(a/b/c/x/y)\"sv).native() == LR\"(..\\..)\"sv);\r\n    EXPECT(path(LR\"(a/b/c)\"sv).lexically_proximate(LR\"(a/b/c)\"sv).native() == LR\"(.)\"sv);\r\n    EXPECT(path(LR\"(a/b)\"sv).lexically_proximate(LR\"(c/d)\"sv).native() == LR\"(..\\..\\a\\b)\"sv);\r\n\r\n    EXPECT(path(LR\"()\"sv).lexically_proximate(LR\"()\"sv).native() == LR\"(.)\"sv);\r\n\r\n    EXPECT(path(LR\"(C:\\Temp)\"sv).lexically_proximate(LR\"(D:\\Temp)\"sv).native() == LR\"(C:\\Temp)\"sv);\r\n\r\n    EXPECT(path(LR\"(C:\\Temp)\"sv).lexically_proximate(LR\"(Temp)\"sv).native() == LR\"(C:\\Temp)\"sv);\r\n    EXPECT(path(LR\"(Temp)\"sv).lexically_proximate(LR\"(C:\\Temp)\"sv).native() == LR\"(Temp)\"sv);\r\n\r\n    EXPECT(path(LR\"(one)\"sv).lexically_proximate(LR\"(\\two)\"sv).native() == LR\"(one)\"sv);\r\n\r\n    EXPECT(path(LR\"(cat)\"sv).lexically_proximate(LR\"(..\\..\\..\\meow)\"sv).native() == LR\"(cat)\"sv);\r\n    EXPECT(path(LR\"(cat)\"sv).lexically_proximate(LR\"(..\\..\\..\\meow\\.\\.\\.\\.\\.)\"sv).native() == LR\"(cat)\"sv);\r\n\r\n    EXPECT(\r\n        path(LR\"(a\\b\\c\\x\\y\\z)\"sv).lexically_proximate(LR\"(a\\b\\c\\d\\.\\e\\..\\f\\g)\"sv).native() == LR\"(..\\..\\..\\x\\y\\z)\"sv);\r\n\r\n    EXPECT(\r\n        path(LR\"(a\\b\\c\\x\\y\\z)\"sv).lexically_proximate(LR\"(a\\b\\c\\d\\.\\e\\..\\f\\g\\..\\..\\..)\"sv).native() == LR\"(x\\y\\z)\"sv);\r\n\r\n    // LWG-3070\r\n    EXPECT(path(LR\"(\\a:\\b:)\"sv).lexically_proximate(LR\"(\\a:\\c:)\"sv).native() == LR\"(\\a:\\b:)\"sv);\r\n}\r\n\r\nvoid test_weakly_canonical() {\r\n    error_code ec;\r\n\r\n    create_directories(L\"test_weakly_canonical/a/b/c\"sv, ec);\r\n    EXPECT(good(ec));\r\n\r\n    const path meow_txt(L\"test_weakly_canonical/a/b/c/meow.txt\"sv);\r\n    const wstring peppermint(L\"peppermint\"sv);\r\n    create_file_containing(meow_txt, peppermint.c_str());\r\n    EXPECT(read_file_contents(meow_txt) == peppermint);\r\n\r\n    const path p1 = weakly_canonical(meow_txt, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(!meow_txt.is_absolute());\r\n    EXPECT(p1.is_absolute());\r\n    EXPECT(meow_txt.native() != meow_txt.lexically_normal().native());\r\n    EXPECT(p1.native() == p1.lexically_normal().native());\r\n    EXPECT(read_file_contents(p1) == peppermint);\r\n\r\n    const path p2 = weakly_canonical(meow_txt);\r\n    EXPECT(p1.native() == p2.native());\r\n\r\n    const path woof_txt(L\"test_weakly_canonical/a/b/x/y/woof.txt\"sv);\r\n    const path p3 = weakly_canonical(woof_txt, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(p3.lexically_relative(p1.parent_path()).native() == LR\"(..\\x\\y\\woof.txt)\"sv);\r\n\r\n    const path p4 = weakly_canonical(L\"test_weakly_canonical/a/b/c/nonexistent.txt\"sv);\r\n    EXPECT(good(ec));\r\n    EXPECT(p4.parent_path().native() == p1.parent_path().native());\r\n    EXPECT(p4.filename().native() == L\"nonexistent.txt\"sv);\r\n\r\n    // Also test VSO-850856\r\n    // \"std::filesystem::weakly_canonical should not throw an exception when a prefix is an existing file\"\r\n    const path fileWithSuffix                = meow_txt.native() + L\"/\";\r\n    const path weaklyCanonicalFileWithSuffix = weakly_canonical(fileWithSuffix); // this should not throw\r\n    assert(weaklyCanonicalFileWithSuffix.native().back() == L'\\\\');\r\n\r\n    // Test relative()\r\n    const path p5 = relative(woof_txt, meow_txt, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(p5.native() == LR\"(..\\..\\x\\y\\woof.txt)\"sv);\r\n\r\n    const path p6 = relative(meow_txt, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(p6.native() == LR\"(test_weakly_canonical\\a\\b\\c\\meow.txt)\"sv);\r\n\r\n    const path p7 = relative(woof_txt, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(p7.native() == LR\"(test_weakly_canonical\\a\\b\\x\\y\\woof.txt)\"sv);\r\n\r\n    const path p8 = relative(woof_txt, meow_txt);\r\n    EXPECT(p8.native() == p5.native());\r\n\r\n    const path p9 = relative(meow_txt);\r\n    EXPECT(p9.native() == p6.native());\r\n\r\n    // Test proximate()\r\n    const path p10 = proximate(L\"C:/Nonexistent/a/b/c/one.txt\"sv, L\"Y:/Impossible/two.txt\"sv, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(p10.native() == LR\"(C:\\Nonexistent\\a\\b\\c\\one.txt)\"sv);\r\n\r\n    const path p11 = proximate(L\"C:/Nonexistent/a/b/c/one.txt\"sv, L\"C:/Nonexistent/a/b/x/y\"sv, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(p11.native() == LR\"(..\\..\\c\\one.txt)\"sv);\r\n\r\n    const path p12 = proximate(L\"C:/Nonexistent/a/b/c/one.txt\"sv, L\"C:/Nonexistent/a/b/x/y\"sv);\r\n    EXPECT(p12.native() == p11.native());\r\n\r\n    const path p13 = proximate(meow_txt, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(p13.native() == LR\"(test_weakly_canonical\\a\\b\\c\\meow.txt)\"sv);\r\n\r\n    const path p14 = proximate(meow_txt);\r\n    EXPECT(p14.native() == p13.native());\r\n\r\n    if (p14.root_name().native() != L\"M:\"sv) {\r\n        const path p15 = proximate(L\"M:/Imaginary/three.txt\"sv, ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(p15.native() == LR\"(M:\\Imaginary\\three.txt)\"sv);\r\n    }\r\n\r\n    remove_all(L\"test_weakly_canonical\"sv, ec);\r\n    EXPECT(good(ec));\r\n}\r\n\r\nvoid test_remove() {\r\n    const test_temp_directory tempDir(\"remove\"sv);\r\n    const path& dirname = tempDir.directoryPath;\r\n    const auto filename = dirname / L\"remove_test.txt\"sv;\r\n\r\n    error_code ec;\r\n    EXPECT(!remove(filename));\r\n    EXPECT(!remove(filename, ec));\r\n    EXPECT(good(ec));\r\n\r\n    create_file_containing(filename, L\"hello\");\r\n\r\n    // attempting to remove a non-empty directory should fail\r\n    EXPECT(!remove(dirname, ec));\r\n    EXPECT(bad(ec));\r\n\r\n    EXPECT(remove(filename, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(!exists(filename, ec));\r\n    EXPECT(good(ec));\r\n\r\n    create_file_containing(filename, L\"hello\");\r\n    permissions(filename, perms::owner_write | perms::group_write | perms::others_write, perm_options::remove);\r\n\r\n    // remove a read-only file also\r\n    EXPECT(remove(filename, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(!exists(filename, ec));\r\n    EXPECT(good(ec));\r\n\r\n    EXPECT(remove(dirname, ec));\r\n    EXPECT(good(ec));\r\n    EXPECT(!exists(dirname, ec));\r\n    EXPECT(good(ec));\r\n\r\n    remove(badPath); // we ignore invalid paths\r\n    remove(badPath, ec);\r\n    EXPECT(good(ec));\r\n}\r\n\r\nvoid test_rename() {\r\n    const test_temp_directory tempDir(\"rename\"sv);\r\n    error_code ec;\r\n    const path dir(tempDir.directoryPath / L\"dir\"sv);\r\n    const path otherDir(tempDir.directoryPath / L\"dirAfter\"sv);\r\n    const path fileA(tempDir.directoryPath / L\"filea.txt\"sv);\r\n    const path fileB(tempDir.directoryPath / L\"fileb.txt\"sv);\r\n\r\n    create_directories(dir, ec);\r\n    EXPECT(good(ec));\r\n    create_directory(otherDir, ec);\r\n    EXPECT(good(ec));\r\n    create_file_containing(fileA, L\"hello\");\r\n    create_file_containing(fileB, L\"world\");\r\n\r\n    // If old_p and new_p resolve to the same existing file, no action is taken\r\n    rename(dir, dir, ec);\r\n    EXPECT(good(ec));\r\n    rename(fileA, fileA, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(read_file_contents(fileA) == L\"hello\");\r\n\r\n#ifndef _MSVC_INTERNAL_TESTING // TRANSITION, skip this for all MSVC-internal test runs.\r\n    // As of 2024-05-09, these rename() tests sporadically fail in MSVC-internal private test runs with\r\n    // \"Access is denied\" error codes. We've never observed such failures in MSVC-internal PR/CI checks,\r\n    // MSVC-internal local test runs, GitHub PR/CI checks, or GitHub local test runs. There's no significant\r\n    // compiler interaction here, so we can live with GitHub-only test coverage. Although we don't know the\r\n    // root cause, we suspect that this is related to the physical machines that are used for MSVC-internal\r\n    // private test runs, so we should check whether they've been replaced in a year or two.\r\n\r\n    // If new_p resolves to an existing non-directory file, new_p is removed\r\n    rename(fileA, fileB, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(!exists(fileA));\r\n    EXPECT(read_file_contents(fileB) == L\"hello\");\r\n\r\n    // Standard rename where target doesn't exist\r\n    rename(fileB, fileA, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(!exists(fileB));\r\n    EXPECT(read_file_contents(fileA) == L\"hello\");\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    // Bad cases\r\n    EXPECT(throws_filesystem_error([&] { rename(dir, otherDir); }, \"rename\", dir, otherDir));\r\n    rename(dir, otherDir, ec);\r\n    EXPECT(bad(ec));\r\n}\r\n\r\nvoid test_space() {\r\n    const auto maxValue = static_cast<uintmax_t>(-1);\r\n    const path dir(L\"test_space_dir\"sv);\r\n    const path file(dir / L\"test_space_file.txt\"sv);\r\n\r\n    error_code ec;\r\n    create_directory(dir, ec);\r\n    EXPECT(good(ec));\r\n    create_file_containing(file, L\"hello\");\r\n\r\n    space_info info = space(dir);\r\n    EXPECT(info.available != maxValue);\r\n    EXPECT(info.free != maxValue);\r\n    EXPECT(info.capacity != maxValue);\r\n\r\n    info = space(file, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(info.available != maxValue);\r\n    EXPECT(info.free != maxValue);\r\n    EXPECT(info.capacity != maxValue);\r\n\r\n    EXPECT(throws_filesystem_error([] { return space(badPath); }, \"space\", badPath));\r\n    info = space(badPath, ec);\r\n    EXPECT(bad(ec));\r\n    EXPECT(info.available == maxValue);\r\n    EXPECT(info.free == maxValue);\r\n    EXPECT(info.capacity == maxValue);\r\n\r\n    info = space(path(), ec);\r\n    EXPECT(bad(ec));\r\n    EXPECT(info.available == maxValue);\r\n    EXPECT(info.free == maxValue);\r\n    EXPECT(info.capacity == maxValue);\r\n\r\n    const path nonexistent(dir / L\"nonexistent\"sv);\r\n    info = space(nonexistent, ec);\r\n    EXPECT(bad(ec));\r\n    EXPECT(info.available == maxValue);\r\n    EXPECT(info.free == maxValue);\r\n    EXPECT(info.capacity == maxValue);\r\n\r\n    info = space(LR\"(C:\\Some\\Path\\That\\Does\\Not\\Exist)\", ec);\r\n    EXPECT(bad(ec));\r\n    EXPECT(info.available == maxValue);\r\n    EXPECT(info.free == maxValue);\r\n    EXPECT(info.capacity == maxValue);\r\n\r\n    info = space(LR\"(??malformed??)\", ec);\r\n    EXPECT(bad(ec));\r\n    EXPECT(info.available == maxValue);\r\n    EXPECT(info.free == maxValue);\r\n    EXPECT(info.capacity == maxValue);\r\n\r\n    // Also test VSO-732321 [Feedback] Filesystem::space() doesn't work if the parameter is a relative path\r\n    info = space(L\".\"sv, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(info.available != maxValue);\r\n    EXPECT(info.free != maxValue);\r\n    EXPECT(info.capacity != maxValue);\r\n\r\n    const path symDirPresent(dir / L\"directory_symlink\"sv);\r\n    const path symDirAbsent(dir / L\"broken_directory_symlink\"sv);\r\n    const path symFilePresent(dir / L\"file_symlink\"sv);\r\n    const path symFileAbsent(dir / L\"broken_file_symlink\"sv);\r\n\r\n    if ((create_directory_symlink(current_path() / dir, symDirPresent, ec), ec)\r\n        || (create_directory_symlink(nonexistent, symDirAbsent, ec), ec)\r\n        || (create_symlink(current_path() / file, symFilePresent, ec), ec)\r\n        || (create_symlink(nonexistent, symFileAbsent, ec), ec)) {\r\n        check_symlink_permissions(ec, L\"space symlink edge cases\");\r\n    } else {\r\n        info = space(symDirPresent, ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(info.available != maxValue);\r\n        EXPECT(info.free != maxValue);\r\n        EXPECT(info.capacity != maxValue);\r\n\r\n        info = space(symFilePresent, ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(info.available != maxValue);\r\n        EXPECT(info.free != maxValue);\r\n        EXPECT(info.capacity != maxValue);\r\n\r\n        info = space(symDirAbsent, ec);\r\n        EXPECT(bad(ec));\r\n        EXPECT(info.available == maxValue);\r\n        EXPECT(info.free == maxValue);\r\n        EXPECT(info.capacity == maxValue);\r\n\r\n        info = space(symFileAbsent, ec);\r\n        EXPECT(bad(ec));\r\n        EXPECT(info.available == maxValue);\r\n        EXPECT(info.free == maxValue);\r\n        EXPECT(info.capacity == maxValue);\r\n    }\r\n\r\n    remove_all(dir, ec);\r\n    EXPECT(good(ec));\r\n}\r\n\r\nvoid test_status_known() {\r\n    const file_status noneStatus(file_type::none);\r\n    const file_status dirStatus(file_type::directory);\r\n    const file_status unknownStatus(file_type::unknown);\r\n    EXPECT(!status_known(noneStatus));\r\n    EXPECT(status_known(dirStatus));\r\n    EXPECT(status_known(unknownStatus)); // we've gotten this wrong before\r\n}\r\n\r\nvoid test_permissions() {\r\n    const test_temp_directory tempDir(\"permissions\"sv);\r\n    const path& dirname = tempDir.directoryPath;\r\n    const path filename(dirname / L\"file.txt\"sv);\r\n    const path linkname(dirname / L\"symlink.txt\"sv);\r\n\r\n    create_file_containing(filename, L\"hello world\");\r\n\r\n    error_code ec;\r\n    EXPECT(status(dirname, ec).permissions() == perms::all);\r\n    EXPECT(good(ec));\r\n    EXPECT(status(filename, ec).permissions() == perms::all);\r\n    EXPECT(good(ec));\r\n\r\n    permissions(filename, perms::owner_write); // has no effect because some write bits still set\r\n    EXPECT(status(filename, ec).permissions() == perms::all);\r\n    EXPECT(good(ec));\r\n\r\n    constexpr auto readonlyPerms = perms::owner_read | perms::owner_exec | perms::group_read | perms::group_exec\r\n                                 | perms::others_read | perms::others_exec;\r\n    permissions(filename, readonlyPerms, perm_options::replace);\r\n    EXPECT(status(filename, ec).permissions() == readonlyPerms);\r\n    EXPECT(good(ec));\r\n\r\n    // adding any write bit removes FILE_ATTRIBUTE_READONLY\r\n    permissions(filename, perms::owner_write, perm_options::add, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(status(filename, ec).permissions() == perms::all);\r\n    EXPECT(good(ec));\r\n    // removing any write bit but not all has no effect\r\n    permissions(filename, perms::owner_write, perm_options::remove, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(status(filename, ec).permissions() == perms::all);\r\n    EXPECT(good(ec));\r\n    // removing all write bits sets FILE_ATTRIBUTE_READONLY\r\n    permissions(filename, perms::owner_write | perms::group_write | perms::others_write, perm_options::remove, ec);\r\n    EXPECT(good(ec));\r\n    EXPECT(status(filename, ec).permissions() == readonlyPerms);\r\n    EXPECT(good(ec));\r\n\r\n    create_symlink(absolute(filename), linkname, ec);\r\n    if (ec) {\r\n        check_symlink_permissions(ec, L\"permissions\");\r\n    } else {\r\n        EXPECT(symlink_status(linkname).permissions() == perms::all);\r\n        EXPECT(good(ec));\r\n        // try to make the symlink readonly\r\n        permissions(linkname, readonlyPerms, perm_options::replace | perm_options::nofollow, ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(symlink_status(linkname).permissions() == readonlyPerms);\r\n        EXPECT(good(ec));\r\n        // try to make the symlink target not readonly\r\n        permissions(linkname, perms::all, perm_options::replace, ec);\r\n        EXPECT(good(ec));\r\n        // symlink unchanged:\r\n        EXPECT(symlink_status(linkname).permissions() == readonlyPerms);\r\n        EXPECT(good(ec));\r\n        // target changed:\r\n        EXPECT(status(linkname).permissions() == perms::all);\r\n        EXPECT(good(ec));\r\n    }\r\n\r\n    permissions(linkname, perms::all, perm_options::replace | perm_options::nofollow, ec);\r\n    // ignore ec on purpose (symlink may not have been made and that's OK)\r\n    permissions(filename, perms::all, ec);\r\n    EXPECT(good(ec));\r\n    permissions(dirname, perms::all, ec);\r\n    EXPECT(good(ec));\r\n}\r\n\r\nvoid test_temp_directory_path() {\r\n    (void) temp_directory_path(); // no meaningful assertions on result\r\n    error_code ec;\r\n    (void) temp_directory_path(ec);\r\n    EXPECT(good(ec));\r\n\r\n    // Test:\r\n    // Effects: If exists(p) is false or is_directory(p) is false, an error is reported\r\n    wchar_t* oldTemp;\r\n    size_t unused;\r\n    assert(_wdupenv_s(&oldTemp, &unused, L\"TMP\") == 0);\r\n    assert(oldTemp);\r\n\r\n    // exists(p) is false\r\n    assert(_wputenv_s(L\"TMP\", L\"nonexistent.dir\") == 0);\r\n    try {\r\n        (void) temp_directory_path();\r\n        EXPECT(false);\r\n    } catch (const filesystem_error& err) {\r\n        EXPECT(err.code() == make_error_code(errc::not_a_directory));\r\n        const auto& p1Native = err.path1().native();\r\n        EXPECT(p1Native.find(LR\"(\\nonexistent.dir\\)\") == p1Native.size() - 17);\r\n        EXPECT(err.path2().empty());\r\n    }\r\n\r\n    const auto nonexistentTemp = temp_directory_path(ec).native();\r\n    // returns path() if an error occurs. (N5008 [fs.op.temp.dir.path]/3)\r\n    EXPECT(nonexistentTemp.empty());\r\n    EXPECT(ec == make_error_code(errc::not_a_directory));\r\n\r\n    // TODO: automated test is_directory(p) is false, symlinks, after other filesystem components are implemented\r\n\r\n    assert(_wputenv_s(L\"TMP\", oldTemp) == 0);\r\n    free(oldTemp);\r\n}\r\n\r\nvoid test_create_directory() {\r\n    const test_temp_directory tempDir(\"create_directory\"sv);\r\n    const path p = tempDir.directoryPath / L\"__std.c++17.filesystem.create_directory\"sv;\r\n\r\n    // test happy\r\n    {\r\n        remove(p); // may or may not exist\r\n        EXPECT(create_directory(p) == true); // created\r\n        EXPECT(create_directory(p) == false); // already exists\r\n        remove(p);\r\n        EXPECT(create_directory(p, tempDir.directoryPath) == true); // created\r\n        EXPECT(create_directory(p, tempDir.directoryPath) == false); // already exists\r\n    }\r\n\r\n    // test happy ec\r\n    {\r\n        remove(p);\r\n        error_code ec;\r\n        EXPECT(create_directory(p, ec) == true); // created\r\n        EXPECT(good(ec));\r\n        EXPECT(create_directory(p, ec) == false); // already exists\r\n        EXPECT(good(ec));\r\n        remove(p);\r\n        EXPECT(create_directory(p, tempDir.directoryPath, ec) == true); // created\r\n        EXPECT(good(ec));\r\n        EXPECT(create_directory(p, tempDir.directoryPath, ec) == false); // already exists\r\n        EXPECT(good(ec));\r\n        remove(p);\r\n    }\r\n\r\n    // test invalid path\r\n    {\r\n        error_code ec;\r\n        for (auto&& nonexistent : nonexistentPaths) {\r\n            EXPECT(create_directory(nonexistent, ec) == false); // failed\r\n            EXPECT(bad(ec));\r\n\r\n            EXPECT(throws_filesystem_error([&] { create_directory(nonexistent); }, \"create_directory\", nonexistent));\r\n        }\r\n    }\r\n\r\n    // test VSO-654638 where create_directory(p, existing_p) was doing copy_symlink behavior\r\n    {\r\n        error_code ec;\r\n        create_directory_symlink(nonexistentPaths[0], p, ec);\r\n        if (ec) {\r\n            check_symlink_permissions(ec, L\"test_create_directory/VSO-654638\");\r\n        } else {\r\n            const path q = tempDir.directoryPath / L\"__std.c++17.filesystem.test.target\"sv;\r\n            create_directory(q, p, ec);\r\n            EXPECT(good(ec));\r\n            EXPECT(!is_symlink(q));\r\n            remove(q, ec);\r\n            EXPECT(good(ec));\r\n            remove(p, ec);\r\n            EXPECT(good(ec));\r\n        }\r\n    }\r\n\r\n    // test D1164R0 Make create_directory() Intuitive\r\n    {\r\n        error_code ec;\r\n        create_file_containing(p, L\"example\");\r\n        EXPECT(throws_filesystem_error([&p] { create_directory(p); }, \"create_directory\", p));\r\n        EXPECT(!create_directory(p, ec));\r\n        EXPECT(ec == make_error_condition(errc::file_exists));\r\n        EXPECT(ec == error_code(183 /*ERROR_ALREADY_EXISTS*/, system_category()));\r\n    }\r\n}\r\n\r\nvoid test_create_dirs_and_remove_all() {\r\n    const test_temp_directory tempDir(\"create_directories-and-remove_all\"sv);\r\n    const path& r = tempDir.directoryPath;\r\n\r\n    // test long path support\r\n    const path longRoot(LR\"(\\\\?\\)\"s + r.native());\r\n    const path longFull = longRoot / longSuffix;\r\n\r\n    auto p = r;\r\n    p /= L\"a/b/c/d/e/f/g/h/i/j\"sv;\r\n\r\n    error_code ec;\r\n    EXPECT(create_directories(p) == true); // created\r\n    EXPECT(create_directories(p) == false); // already exists\r\n\r\n    EXPECT(remove_all(r) > 0); // deleted\r\n    EXPECT(remove_all(r) == 0); // should not exist\r\n\r\n    EXPECT(create_directories(p, ec) == true); // created\r\n    EXPECT(good(ec));\r\n    EXPECT(create_directories(p, ec) == false); // already exists\r\n    EXPECT(good(ec));\r\n    remove_all(r);\r\n\r\n    EXPECT(throws_filesystem_error([] { create_directories(badPath); }, \"create_directories\", badPath));\r\n    create_directories(badPath, ec);\r\n    EXPECT(bad(ec));\r\n\r\n    remove_all(badPath); // we ignore invalid paths as in remove\r\n    remove_all(badPath, ec);\r\n    EXPECT(good(ec));\r\n\r\n    // test GH-1283 create_directories() should throw for empty paths\r\n    EXPECT(throws_filesystem_error([] { create_directories(path{}); }, \"create_directories\", path{}));\r\n    EXPECT(create_directories(path{}, ec) == false);\r\n    EXPECT(bad(ec));\r\n\r\n    // test that normalization isn't done first\r\n    auto dots = r / L\"a/../b/../c\"sv;\r\n    EXPECT(create_directories(dots));\r\n    EXPECT(is_directory(r / L\"a\"));\r\n    EXPECT(is_directory(r / L\"b\"));\r\n    EXPECT(is_directory(r / L\"c\"));\r\n\r\n    EXPECT(create_directories(longFull, ec));\r\n    EXPECT(good(ec));\r\n\r\n    remove_all(longRoot, ec);\r\n    EXPECT(good(ec));\r\n\r\n    // test D1164R0 Make create_directory() Intuitive\r\n    {\r\n        auto sub = r / L\"a\"sv;\r\n        // non-last directory:\r\n        create_file_containing(r, L\"example\");\r\n        EXPECT(throws_filesystem_error([&sub] { create_directories(sub); }, \"create_directories\", sub));\r\n        EXPECT(!create_directories(p, ec));\r\n        EXPECT(ec == make_error_condition(errc::file_exists));\r\n        EXPECT(ec == error_code(183 /*ERROR_ALREADY_EXISTS*/, system_category()));\r\n        remove(r);\r\n        // last directory:\r\n        create_directory(r);\r\n        create_file_containing(sub, L\"example\");\r\n        EXPECT(throws_filesystem_error([&sub] { create_directories(sub); }, \"create_directories\", sub));\r\n        EXPECT(!create_directories(p, ec));\r\n        EXPECT(ec == make_error_condition(errc::file_exists));\r\n        EXPECT(ec == error_code(183 /*ERROR_ALREADY_EXISTS*/, system_category()));\r\n        remove_all(r);\r\n    }\r\n}\r\n\r\nvoid test_symlink_status() {\r\n    const test_temp_directory tempDir(\"symlink_status\"sv);\r\n    const path tempFile = tempDir.directoryPath / L\"example.txt\";\r\n    create_file_containing(tempFile, L\"hello symlink world\");\r\n\r\n    {\r\n        error_code ec;\r\n        auto ft = symlink_status(tempFile, ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(ft.type() == file_type::regular);\r\n        EXPECT(ft.permissions() == perms{0555} || ft.permissions() == perms::all);\r\n\r\n        auto ft2 = symlink_status(tempFile);\r\n        EXPECT(ft.type() == ft2.type());\r\n        EXPECT(ft.permissions() == ft2.permissions());\r\n    }\r\n\r\n    {\r\n        error_code ec;\r\n        auto ft = symlink_status(tempDir.directoryPath, ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(ft.type() == file_type::directory);\r\n        EXPECT(ft.permissions() == perms{0555} || ft.permissions() == perms::all);\r\n\r\n        auto ft2 = symlink_status(tempDir.directoryPath);\r\n        EXPECT(ft.type() == ft2.type());\r\n        EXPECT(ft.permissions() == ft2.permissions());\r\n    }\r\n\r\n    for (auto&& nonexistent : nonexistentPaths) {\r\n        error_code ec;\r\n        auto ft = symlink_status(nonexistent, ec);\r\n        EXPECT(bad(ec));\r\n        EXPECT(ft.type() == file_type::not_found);\r\n        EXPECT(ft.permissions() == perms::unknown);\r\n\r\n        auto ft2 = symlink_status(nonexistent);\r\n        EXPECT(ft.type() == ft2.type());\r\n        EXPECT(ft.permissions() == ft2.permissions());\r\n    }\r\n}\r\n\r\nvoid test_current_path(const path& expected) {\r\n\r\n    // Getter\r\n    {\r\n        error_code ec;\r\n        const auto actual = current_path(ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(expected == actual);\r\n    }\r\n\r\n    {\r\n        const auto actual = current_path();\r\n        EXPECT(expected == actual);\r\n    }\r\n\r\n    // Setter\r\n    {\r\n        // We are changing current dir at the start of the test, so that is a success test case\r\n        // Dealing with a non-existent dir here\r\n        error_code ec;\r\n        const path non_existent_path = LR\"(Z:\\nonexistent.dir)\";\r\n        current_path(non_existent_path, ec);\r\n        EXPECT(bad(ec));\r\n        // Make sure the previous call didn't change dir\r\n        const auto actual = current_path(ec);\r\n        EXPECT(good(ec));\r\n        EXPECT(expected == actual);\r\n    }\r\n\r\n    {\r\n        const path non_existent_path = LR\"(Z:\\nonexistent.dir)\";\r\n        EXPECT(throws_filesystem_error(\r\n            [&]() { current_path(non_existent_path); }, \"current_path\", non_existent_path.native()));\r\n    }\r\n}\r\n\r\nvoid test_file_time_type() {\r\n    constexpr long long ticks_per_second = 10'000'000LL;\r\n    constexpr long long epoch            = 0x19DB1DED53E8000LL;\r\n\r\n    // 24h tolerance\r\n    constexpr long long tolerance = duration_cast<seconds>(24h).count() * ticks_per_second;\r\n\r\n    const auto file_time_now             = file_time_type::clock::now();\r\n    const long long file_time_tick_count = file_time_now.time_since_epoch().count() - epoch;\r\n\r\n    const auto system_clock_now             = system_clock::now();\r\n    const long long system_clock_tick_count = system_clock_now.time_since_epoch().count();\r\n\r\n    if (file_time_tick_count + tolerance < system_clock_tick_count\r\n        || file_time_tick_count - tolerance > system_clock_tick_count) {\r\n        wcerr << L\"test_file_time_type failed: \" << file_time_tick_count << L\" ticks too different from \"\r\n              << system_clock_tick_count << L\" ticks from system_clock\\n\";\r\n        pass = false;\r\n    }\r\n}\r\n\r\ntemplate <typename DirIter>\r\nvoid interactive_dir_iter(wstring_view p) {\r\n    wcerr << L\"iterate over: \\\"\" << p << L\"\\\":\\n\";\r\n\r\n    directory_options opts = {};\r\n    // ! => skip_permission_denied\r\n    // ~ => follow_directory_symlink\r\n\r\n    while (!p.empty()) {\r\n        const auto ch = p.front();\r\n        if (ch == L'!') {\r\n            opts |= directory_options::skip_permission_denied;\r\n        } else if (ch == L'~') {\r\n            opts |= directory_options::follow_directory_symlink;\r\n        } else {\r\n            break;\r\n        }\r\n        p.remove_prefix(1);\r\n    }\r\n\r\n    for (const auto& entry : DirIter(p, opts)) {\r\n        wcerr << entry.path().native() << L'\\n';\r\n    }\r\n    wcerr << L\"---- iteration complete -----\\n\";\r\n}\r\n\r\ntemplate <typename Elem, typename Traits>\r\nbasic_ostream<Elem, Traits>& operator<<(basic_ostream<Elem, Traits>& ostr, const file_type ft) {\r\n    static constexpr array<wstring_view, 11> names{{L\"none\"sv, L\"not_found\"sv, L\"regular\"sv, L\"directory\"sv,\r\n        L\"symlink\"sv, L\"block\"sv, L\"character\"sv, L\"fifo\"sv, L\"socket\"sv, L\"unknown\"sv, L\"junction\"sv}};\r\n\r\n    const size_t index = static_cast<size_t>(ft);\r\n    if (index < names.size()) {\r\n        return ostr << L\"file_type::\" << names[index];\r\n    } else {\r\n        EXPECT(false);\r\n        return ostr << L\"!!! INVALID file_type(\" << index << L\") !!!!\";\r\n    }\r\n}\r\n\r\ntemplate <typename Elem, typename Traits>\r\nbasic_ostream<Elem, Traits>& operator<<(basic_ostream<Elem, Traits>& ostr, const perms p) {\r\n    if (p == perms::owner_all) {\r\n        return ostr << L\"perms::owner_all\";\r\n    }\r\n\r\n    if (p == perms::owner_read) {\r\n        return ostr << L\"perms::owner_read\";\r\n    }\r\n    return ostr << L\"perms{\" << hex << static_cast<unsigned int>(p) << L\"}\";\r\n}\r\n\r\ntemplate <typename Elem, typename Traits>\r\nbasic_ostream<Elem, Traits>& operator<<(basic_ostream<Elem, Traits>& str, const file_status& status) {\r\n    return str << status.type() << L' ' << status.permissions();\r\n}\r\n\r\nstruct directory_entry_wrapper {\r\n    directory_entry value;\r\n};\r\n\r\ntemplate <typename Elem, typename Traits>\r\nbasic_ostream<Elem, Traits>& operator<<(basic_ostream<Elem, Traits>& str, const directory_entry_wrapper& de_wrapper) {\r\n    const directory_entry& de = de_wrapper.value;\r\n    return str << L\"\\n    symlink_status: \" << de.symlink_status() << L\"\\n             status: \" << de.status()\r\n               << L\"\\n               size: \" << de.file_size() << L\"\\n    last_write_time: \"\r\n               << de.last_write_time().time_since_epoch().count() << L\"\\n    hard_link_count: \" << de.hard_link_count();\r\n}\r\n\r\nvoid run_interactive_tests(int argc, wchar_t* argv[]) {\r\n    wstring_view the_rest;\r\n    const auto starts_with = [&](wstring_view arg, wstring_view prefix) {\r\n        if (::starts_with(arg, prefix)) {\r\n            the_rest = arg.substr(prefix.size());\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n\r\n    constexpr wstring_view usage = L\"Usage: test [-recdir:<path>] [-dir:<path>] [-lstat:<path>]\"\r\n                                   L\" [-stat:<path>] [-de:<path>] [-mkdir:<path>] [-mkdirs:<path>]\"\r\n                                   L\" [-now] [-rm:<path>] [-rmall:<path>] [-sz:<path>]\"\r\n                                   L\"\\n\"sv;\r\n    for (int i = 1; i < argc; ++i) {\r\n        const wstring_view arg = argv[i];\r\n        if (arg == L\"-?\"sv) {\r\n            wcerr << usage;\r\n        } else if (starts_with(arg, L\"-recdir:\"sv)) {\r\n            interactive_dir_iter<recursive_directory_iterator>(the_rest);\r\n        } else if (starts_with(arg, L\"-dir:\"sv)) {\r\n            interactive_dir_iter<directory_iterator>(the_rest);\r\n        } else if (starts_with(arg, L\"-lstat:\"sv)) {\r\n            wcerr << quoted(arg) << L\" => \" << symlink_status(the_rest) << \"\\n\";\r\n        } else if (starts_with(arg, L\"-stat:\"sv)) {\r\n            wcerr << quoted(arg) << L\" => \" << status(the_rest) << \"\\n\";\r\n        } else if (starts_with(arg, L\"-de:\"sv)) {\r\n            wcerr << quoted(arg) << L\" => \" << directory_entry_wrapper{directory_entry(the_rest)} << \"\\n\";\r\n        } else if (starts_with(arg, L\"-mkdir:\"sv)) {\r\n            wcerr << L\"create_directory => \" << create_directory(the_rest) << \"\\n\";\r\n        } else if (starts_with(arg, L\"-mkdirs:\"sv)) {\r\n            wcerr << L\"create_directory => \" << create_directories(the_rest) << \"\\n\";\r\n        } else if (starts_with(arg, L\"-now\"sv)) {\r\n            wcerr << L\"         system_clock: \" << system_clock::now().time_since_epoch().count() << L'\\n';\r\n            wcerr << L\"file_time_type::clock: \" << file_time_type::clock::now().time_since_epoch().count() << L'\\n';\r\n        } else if (starts_with(arg, L\"-rm:\"sv)) {\r\n            wcerr << L\"remove => \" << remove(the_rest) << \"\\n\";\r\n        } else if (starts_with(arg, L\"-rmall:\"sv)) {\r\n            wcerr << L\"remove_all => \" << remove_all(the_rest) << \"\\n\";\r\n        } else if (starts_with(arg, L\"-sz:\"sv)) {\r\n            wcerr << L\"file_size => \" << file_size(the_rest) << \"\\n\";\r\n        } else {\r\n            wcerr << usage;\r\n        }\r\n    }\r\n}\r\n\r\n// Also test DevCom-953628, which witnessed a failure of filesystem::path's \"Source\" constructor to SFINAE away when\r\n// given a non-iterator argument for which iter_value_t is valid when defining _Iter_value_t to iter_value_t in concepts\r\n// mode.\r\nvoid test_devcom_953628() { // COMPILE-ONLY\r\n    struct S : wstring {};\r\n    path{S{}};\r\n}\r\n\r\nint run_all_tests(int argc, wchar_t* argv[]) {\r\n    error_code ec;\r\n\r\n    // Store old path and change current path to a temporary path\r\n    const auto old_current_path = current_path(ec);\r\n    EXPECT(good(ec));\r\n    const test_temp_directory tempDir(\"P0218R1_filesystem\"sv);\r\n    current_path(tempDir.directoryPath, ec);\r\n    EXPECT(good(ec));\r\n\r\n\r\n    if (argc > 1) {\r\n        run_interactive_tests(argc, argv);\r\n        return 0;\r\n    }\r\n\r\n    for (const auto& testCase : decompTestCases) {\r\n        pass = pass && run_decomp_test_case(testCase);\r\n    }\r\n\r\n    for (const auto& testCase : stemTestCases) {\r\n        pass = pass && run_stem_test_case(testCase);\r\n    }\r\n\r\n    for (const auto& testCase : compareTestCases) {\r\n        pass = pass && run_compare_test_case(testCase);\r\n    }\r\n\r\n    for (const auto& testCase : slashTestCases) {\r\n        pass = pass && run_slash_test_case(testCase);\r\n    }\r\n\r\n    test_iterators();\r\n\r\n    test_other_path_interface();\r\n\r\n    test_remove_filename_and_sep();\r\n\r\n    test_filesystem_error();\r\n\r\n    test_file_status();\r\n\r\n    test_temp_directory_path();\r\n\r\n    test_directory_entry();\r\n\r\n    test_directory_iterator();\r\n\r\n    test_recursive_directory_iterator();\r\n\r\n    test_absolute();\r\n\r\n    test_canonical();\r\n\r\n    test_create_symlink_cleanup();\r\n\r\n    test_create_directory_symlink();\r\n\r\n    test_create_hard_link();\r\n\r\n    test_create_symlink();\r\n\r\n    test_read_symlink();\r\n\r\n    test_copy();\r\n\r\n    test_copy_file();\r\n\r\n    test_copy_symlink();\r\n\r\n    test_copy_directory_as_symlink(); // per LWG-2682\r\n\r\n    test_conversions();\r\n\r\n    test_file_size();\r\n\r\n    test_last_write_time();\r\n\r\n    test_invalid_conversions();\r\n\r\n    test_status();\r\n\r\n    test_locale_conversions();\r\n\r\n    test_lexically_normal();\r\n\r\n    test_lexically_relative();\r\n\r\n    test_lexically_proximate();\r\n\r\n    test_weakly_canonical();\r\n\r\n    test_equivalent();\r\n\r\n    test_file_size_and_resize();\r\n\r\n    test_hard_link_count();\r\n\r\n    test_is_empty();\r\n\r\n    test_last_write_time();\r\n\r\n    test_permissions();\r\n\r\n    test_remove();\r\n\r\n    test_create_directory();\r\n\r\n    test_rename();\r\n\r\n    test_space();\r\n\r\n    test_status_known();\r\n\r\n    test_create_dirs_and_remove_all();\r\n\r\n    test_symlink_status();\r\n\r\n    test_current_path(tempDir.directoryPath);\r\n\r\n    test_file_time_type();\r\n\r\n    // Restore old current path and cleanup\r\n    current_path(old_current_path, ec);\r\n    EXPECT(good(ec));\r\n\r\n    assert(pass);\r\n\r\n    return 0;\r\n}\r\n\r\nint wmain(int argc, wchar_t* argv[]) {\r\n    try {\r\n        return run_all_tests(argc, argv);\r\n    } catch (const filesystem_error& fe) {\r\n        cout << \"Caught filesystem_error.\" << endl;\r\n        cout << \"    what: \" << fe.what() << endl;\r\n        cout << \"   value: \" << fe.code().value() << endl;\r\n        cout << \"category: \" << fe.code().category().name() << endl;\r\n    } catch (const exception& e) {\r\n        cout << \"Caught exception.\" << endl;\r\n        cout << \"what: \" << e.what() << endl;\r\n    } catch (...) {\r\n        cout << \"Caught unknown exception.\" << endl;\r\n    }\r\n\r\n    return EXIT_FAILURE;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0220R1_any/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0220R1_any/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Organization of this file:\r\n// * a short header (including this comment)\r\n// * `// LLVM SOURCES BEGIN`\r\n// * The contents of several libc++ test files, each delimited by `// -- BEGIN/END: <filename>`\r\n//   comments. These contents have been modified to merge many tests into one by:\r\n//     (1) changing `int main(int, char**)` to `int run_test()`, and\r\n//     (2) wrapping everything other than comments and includes in a unique namespace per-file, using namespace nesting\r\n//         to reflect the hierarchical structure of the upstream sources.\r\n// * `// LLVM SOURCES END`\r\n// * Several more MSVC-STL-specific test cases laid out in a nested namespace structure within `msvc`.\r\n// * The `main` function, which simply calls each of the `run_test` functions in both the adapted libc++ test cases and\r\n//   the MSVC-specific test cases.\r\n//\r\n// The LLVM sources are updated manually:\r\n// 1. Navigate a bash prompt to `llvm-project/libcxx`.\r\n// 2. Redirect the output of:\r\n//      ../../tools/scripts/transform_llvm.sh test/std/utilities/any\r\n//    into a file.\r\n// 3. Replicate the namespace structure from here into that file, use its content to replace everything between the\r\n//    \"LLVM SOURCES BEGIN\"/\"END\" delimiters, and ensure that `main` properly calls each of the `run_test` functions.\r\n// 4. Restore the TRANSITION-commented workarounds.\r\n//\r\n// Yes, this is an awkward hand process; notably the required headers can change without notice. We should investigate\r\n// running the libc++ tests directly in all of our configurations so we needn't replicate this subset of files.\r\n\r\n#if !defined(__cpp_aligned_new)\r\n#error This test relies on libc++ machinery which assumes overaligned allocation support since C++17\r\n#endif\r\n\r\n#define _LIBCXX_IN_DEVCRT\r\n#include <msvc_stdlib_force_include.h> // Must precede any other libc++ headers\r\n#include <stdlib.h>\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4365) // 'initializing': conversion from 'int' to 'const size_t', signed/unsigned mismatch\r\n#include \"count_new.h\"\r\n#pragma warning(pop)\r\n\r\n// Silence a warning emitted by test/std/utilities/any/any.class/any.cons/default.pass.cpp below.\r\n#pragma warning(disable : 4640) // construction of local static object is not thread-safe\r\n\r\n// clang-format off: avoid diverging from external code\r\n// LLVM SOURCES BEGIN\r\n// -- BEGIN: test/std/utilities/any/any.class/any.assign/copy.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <any>\r\n\r\n// any& operator=(const any&);\r\n\r\n// Test copy assignment\r\n\r\n#include <any>\r\n#include <cassert>\r\n\r\n#include \"any_helpers.h\"\r\n#include \"count_new.h\"\r\n#include \"test_macros.h\"\r\n\r\nnamespace assign::copy {\r\ntemplate <class LHS, class RHS>\r\nvoid test_copy_assign() {\r\n    assert(LHS::count == 0);\r\n    assert(RHS::count == 0);\r\n    LHS::reset();\r\n    RHS::reset();\r\n    {\r\n        std::any lhs = LHS(1);\r\n        const std::any rhs = RHS(2);\r\n\r\n        assert(LHS::count == 1);\r\n        assert(RHS::count == 1);\r\n        assert(RHS::copied == 0);\r\n\r\n        lhs = rhs;\r\n\r\n        assert(RHS::copied == 1);\r\n        assert(LHS::count == 0);\r\n        assert(RHS::count == 2);\r\n\r\n        assertContains<RHS>(lhs, 2);\r\n        assertContains<RHS>(rhs, 2);\r\n    }\r\n    assert(LHS::count == 0);\r\n    assert(RHS::count == 0);\r\n}\r\n\r\ntemplate <class LHS>\r\nvoid test_copy_assign_empty() {\r\n    assert(LHS::count == 0);\r\n    LHS::reset();\r\n    {\r\n        std::any lhs;\r\n        const std::any rhs = LHS(42);\r\n\r\n        assert(LHS::count == 1);\r\n        assert(LHS::copied == 0);\r\n\r\n        lhs = rhs;\r\n\r\n        assert(LHS::copied == 1);\r\n        assert(LHS::count == 2);\r\n\r\n        assertContains<LHS>(lhs, 42);\r\n        assertContains<LHS>(rhs, 42);\r\n    }\r\n    assert(LHS::count == 0);\r\n    LHS::reset();\r\n    {\r\n        std::any lhs = LHS(1);\r\n        const std::any rhs;\r\n\r\n        assert(LHS::count == 1);\r\n        assert(LHS::copied == 0);\r\n\r\n        lhs = rhs;\r\n\r\n        assert(LHS::copied == 0);\r\n        assert(LHS::count == 0);\r\n\r\n        assertEmpty<LHS>(lhs);\r\n        assertEmpty(rhs);\r\n    }\r\n    assert(LHS::count == 0);\r\n}\r\n\r\nvoid test_copy_assign_self() {\r\n    // empty\r\n    {\r\n        std::any a;\r\n        a = (std::any&)a;\r\n        assertEmpty(a);\r\n        assert(globalMemCounter.checkOutstandingNewEq(0));\r\n    }\r\n    assert(globalMemCounter.checkOutstandingNewEq(0));\r\n    // small\r\n    {\r\n        std::any a = small(1);\r\n        assert(small::count == 1);\r\n\r\n        a = (std::any&)a;\r\n\r\n        assert(small::count == 1);\r\n        assertContains<small>(a, 1);\r\n        assert(globalMemCounter.checkOutstandingNewEq(0));\r\n    }\r\n    assert(small::count == 0);\r\n    assert(globalMemCounter.checkOutstandingNewEq(0));\r\n    // large\r\n    {\r\n        std::any a = large(1);\r\n        assert(large::count == 1);\r\n\r\n        a = (std::any&)a;\r\n\r\n        assert(large::count == 1);\r\n        assertContains<large>(a, 1);\r\n        assert(globalMemCounter.checkOutstandingNewEq(1));\r\n    }\r\n    assert(large::count == 0);\r\n    assert(globalMemCounter.checkOutstandingNewEq(0));\r\n}\r\n\r\ntemplate <class Tp>\r\nvoid test_copy_assign_throws()\r\n{\r\n#if !defined(TEST_HAS_NO_EXCEPTIONS)\r\n    auto try_throw =\r\n    [](std::any& lhs, const std::any& rhs) {\r\n        try {\r\n            lhs = rhs;\r\n            assert(false);\r\n        } catch (const my_any_exception&) {\r\n            // do nothing\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n    };\r\n    // const lvalue to empty\r\n    {\r\n        std::any lhs;\r\n        const std::any rhs = Tp(1);\r\n        assert(Tp::count == 1);\r\n\r\n        try_throw(lhs, rhs);\r\n\r\n        assert(Tp::count == 1);\r\n        assertEmpty<Tp>(lhs);\r\n        assertContains<Tp>(rhs, 1);\r\n    }\r\n    {\r\n        std::any lhs = small(2);\r\n        const std::any rhs = Tp(1);\r\n        assert(small::count == 1);\r\n        assert(Tp::count == 1);\r\n\r\n        try_throw(lhs, rhs);\r\n\r\n        assert(small::count == 1);\r\n        assert(Tp::count == 1);\r\n        assertContains<small>(lhs, 2);\r\n        assertContains<Tp>(rhs, 1);\r\n    }\r\n    {\r\n        std::any lhs = large(2);\r\n        const std::any rhs = Tp(1);\r\n        assert(large::count == 1);\r\n        assert(Tp::count == 1);\r\n\r\n        try_throw(lhs, rhs);\r\n\r\n        assert(large::count == 1);\r\n        assert(Tp::count == 1);\r\n        assertContains<large>(lhs, 2);\r\n        assertContains<Tp>(rhs, 1);\r\n    }\r\n#endif\r\n}\r\n\r\nint run_test() {\r\n    globalMemCounter.reset();\r\n    test_copy_assign<small1, small2>();\r\n    test_copy_assign<large1, large2>();\r\n    test_copy_assign<small, large>();\r\n    test_copy_assign<large, small>();\r\n    test_copy_assign_empty<small>();\r\n    test_copy_assign_empty<large>();\r\n    test_copy_assign_self();\r\n    test_copy_assign_throws<small_throws_on_copy>();\r\n    test_copy_assign_throws<large_throws_on_copy>();\r\n\r\n  return 0;\r\n}\r\n} // namespace assign::copy\r\n// -- END: test/std/utilities/any/any.class/any.assign/copy.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/any/any.class/any.assign/move.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <any>\r\n\r\n// any& operator=(any &&);\r\n\r\n// Test move assignment.\r\n\r\n#include <any>\r\n#include <cassert>\r\n\r\n#include \"any_helpers.h\"\r\n#include \"test_macros.h\"\r\n\r\nnamespace assign::move {\r\ntemplate <class LHS, class RHS>\r\nvoid test_move_assign() {\r\n    assert(LHS::count == 0);\r\n    assert(RHS::count == 0);\r\n    {\r\n        LHS const s1(1);\r\n        std::any a = s1;\r\n        RHS const s2(2);\r\n        std::any a2 = s2;\r\n\r\n        assert(LHS::count == 2);\r\n        assert(RHS::count == 2);\r\n\r\n        a = std::move(a2);\r\n\r\n        assert(LHS::count == 1);\r\n        assert(RHS::count == 2 + a2.has_value());\r\n        LIBCPP_ASSERT(RHS::count == 2); // libc++ leaves the object empty\r\n\r\n        assertContains<RHS>(a, 2);\r\n        if (a2.has_value())\r\n            assertContains<RHS>(a2, 0);\r\n        LIBCPP_ASSERT(!a2.has_value());\r\n    }\r\n    assert(LHS::count == 0);\r\n    assert(RHS::count == 0);\r\n}\r\n\r\ntemplate <class LHS>\r\nvoid test_move_assign_empty() {\r\n    assert(LHS::count == 0);\r\n    {\r\n        std::any a;\r\n        std::any a2 = LHS(1);\r\n\r\n        assert(LHS::count == 1);\r\n\r\n        a = std::move(a2);\r\n\r\n        assert(LHS::count == 1 + a2.has_value());\r\n        LIBCPP_ASSERT(LHS::count == 1);\r\n\r\n        assertContains<LHS>(a, 1);\r\n        if (a2.has_value())\r\n            assertContains<LHS>(a2, 0);\r\n        LIBCPP_ASSERT(!a2.has_value());\r\n    }\r\n    assert(LHS::count == 0);\r\n    {\r\n        std::any a = LHS(1);\r\n        std::any a2;\r\n\r\n        assert(LHS::count == 1);\r\n\r\n        a = std::move(a2);\r\n\r\n        assert(LHS::count == 0);\r\n\r\n        assertEmpty<LHS>(a);\r\n        assertEmpty(a2);\r\n    }\r\n    assert(LHS::count == 0);\r\n}\r\n\r\nvoid test_move_assign_noexcept() {\r\n    std::any a1;\r\n    std::any a2;\r\n    ASSERT_NOEXCEPT(a1 = std::move(a2));\r\n}\r\n\r\nint run_test() {\r\n    test_move_assign_noexcept();\r\n    test_move_assign<small1, small2>();\r\n    test_move_assign<large1, large2>();\r\n    test_move_assign<small, large>();\r\n    test_move_assign<large, small>();\r\n    test_move_assign_empty<small>();\r\n    test_move_assign_empty<large>();\r\n\r\n  return 0;\r\n}\r\n} // namespace assign::move\r\n// -- END: test/std/utilities/any/any.class/any.assign/move.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/any/any.class/any.assign/value.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <any>\r\n\r\n// template <class ValueType>\r\n// any& operator=(ValueType&&);\r\n\r\n// Test value copy and move assignment.\r\n\r\n#include <any>\r\n#include <cassert>\r\n\r\n#include \"any_helpers.h\"\r\n#include \"count_new.h\"\r\n#include \"test_macros.h\"\r\n\r\nnamespace assign::value {\r\ntemplate <class LHS, class RHS>\r\nvoid test_assign_value() {\r\n    assert(LHS::count == 0);\r\n    assert(RHS::count == 0);\r\n    LHS::reset();\r\n    RHS::reset();\r\n    {\r\n        std::any lhs = LHS(1);\r\n        const std::any rhs = RHS(2);\r\n\r\n        assert(LHS::count == 1);\r\n        assert(RHS::count == 1);\r\n        assert(RHS::copied == 0);\r\n\r\n        lhs = rhs;\r\n\r\n        assert(RHS::copied == 1);\r\n        assert(LHS::count == 0);\r\n        assert(RHS::count == 2);\r\n\r\n        assertContains<RHS>(lhs, 2);\r\n        assertContains<RHS>(rhs, 2);\r\n    }\r\n    assert(LHS::count == 0);\r\n    assert(RHS::count == 0);\r\n    LHS::reset();\r\n    RHS::reset();\r\n    {\r\n        std::any lhs = LHS(1);\r\n        std::any rhs = RHS(2);\r\n\r\n        assert(LHS::count == 1);\r\n        assert(RHS::count == 1);\r\n        assert(RHS::moved == 1);\r\n\r\n        lhs = std::move(rhs);\r\n\r\n        assert(RHS::moved >= 1);\r\n        assert(RHS::copied == 0);\r\n        assert(LHS::count == 0);\r\n        assert(RHS::count == 1 + rhs.has_value());\r\n        LIBCPP_ASSERT(!rhs.has_value());\r\n\r\n        assertContains<RHS>(lhs, 2);\r\n        if (rhs.has_value())\r\n            assertContains<RHS>(rhs, 0);\r\n    }\r\n    assert(LHS::count == 0);\r\n    assert(RHS::count == 0);\r\n}\r\n\r\ntemplate <class RHS>\r\nvoid test_assign_value_empty() {\r\n    assert(RHS::count == 0);\r\n    RHS::reset();\r\n    {\r\n        std::any lhs;\r\n        RHS rhs(42);\r\n        assert(RHS::count == 1);\r\n        assert(RHS::copied == 0);\r\n\r\n        lhs = rhs;\r\n\r\n        assert(RHS::count == 2);\r\n        assert(RHS::copied == 1);\r\n        assert(RHS::moved >= 0);\r\n        assertContains<RHS>(lhs, 42);\r\n    }\r\n    assert(RHS::count == 0);\r\n    RHS::reset();\r\n    {\r\n        std::any lhs;\r\n        RHS rhs(42);\r\n        assert(RHS::count == 1);\r\n        assert(RHS::moved == 0);\r\n\r\n        lhs = std::move(rhs);\r\n\r\n        assert(RHS::count == 2);\r\n        assert(RHS::copied == 0);\r\n        assert(RHS::moved >= 1);\r\n        assertContains<RHS>(lhs, 42);\r\n    }\r\n    assert(RHS::count == 0);\r\n    RHS::reset();\r\n}\r\n\r\n\r\ntemplate <class Tp, bool Move = false>\r\nvoid test_assign_throws() {\r\n#if !defined(TEST_HAS_NO_EXCEPTIONS)\r\n    auto try_throw =\r\n    [](std::any& lhs, Tp& rhs) {\r\n        try {\r\n            Move ? lhs = std::move(rhs)\r\n                 : lhs = rhs;\r\n            assert(false);\r\n        } catch (const my_any_exception&) {\r\n            // do nothing\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n    };\r\n    // const lvalue to empty\r\n    {\r\n        std::any lhs;\r\n        Tp rhs(1);\r\n        assert(Tp::count == 1);\r\n\r\n        try_throw(lhs, rhs);\r\n\r\n        assert(Tp::count == 1);\r\n        assertEmpty<Tp>(lhs);\r\n    }\r\n    {\r\n        std::any lhs = small(2);\r\n        Tp rhs(1);\r\n        assert(small::count == 1);\r\n        assert(Tp::count == 1);\r\n\r\n        try_throw(lhs, rhs);\r\n\r\n        assert(small::count == 1);\r\n        assert(Tp::count == 1);\r\n        assertContains<small>(lhs, 2);\r\n    }\r\n    {\r\n        std::any lhs = large(2);\r\n        Tp rhs(1);\r\n        assert(large::count == 1);\r\n        assert(Tp::count == 1);\r\n\r\n        try_throw(lhs, rhs);\r\n\r\n        assert(large::count == 1);\r\n        assert(Tp::count == 1);\r\n        assertContains<large>(lhs, 2);\r\n    }\r\n#endif\r\n}\r\n\r\n\r\n// Test that any& operator=(ValueType&&) is *never* selected for:\r\n// * std::in_place type.\r\n// * Non-copyable types\r\nvoid test_sfinae_constraints() {\r\n    { // Only the constructors are required to SFINAE on in_place_t\r\n        using Tag = std::in_place_type_t<int>;\r\n        using RawTag = std::remove_reference_t<Tag>;\r\n        static_assert(std::is_assignable<std::any, RawTag&&>::value, \"\");\r\n    }\r\n    {\r\n        struct Dummy { Dummy() = delete; };\r\n        using T = std::in_place_type_t<Dummy>;\r\n        static_assert(std::is_assignable<std::any, T>::value, \"\");\r\n    }\r\n    {\r\n        // Test that the ValueType&& constructor SFINAE's away when the\r\n        // argument is non-copyable\r\n        struct NoCopy {\r\n          NoCopy() = default;\r\n          NoCopy(NoCopy const&) = delete;\r\n          NoCopy(NoCopy&&) = default;\r\n        };\r\n        static_assert(!std::is_assignable<std::any, NoCopy>::value, \"\");\r\n        static_assert(!std::is_assignable<std::any, NoCopy&>::value, \"\");\r\n    }\r\n}\r\n\r\nint run_test() {\r\n    test_assign_value<small1, small2>();\r\n    test_assign_value<large1, large2>();\r\n    test_assign_value<small, large>();\r\n    test_assign_value<large, small>();\r\n    test_assign_value_empty<small>();\r\n    test_assign_value_empty<large>();\r\n    test_assign_throws<small_throws_on_copy>();\r\n    test_assign_throws<large_throws_on_copy>();\r\n    test_assign_throws<throws_on_move, /* Move = */ true>();\r\n    test_sfinae_constraints();\r\n\r\n  return 0;\r\n}\r\n} // namespace assign::value\r\n// -- END: test/std/utilities/any/any.class/any.assign/value.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/any/any.class/any.cons/copy.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <any>\r\n\r\n// any(any const &);\r\n\r\n#include <any>\r\n#include <cassert>\r\n\r\n#include \"any_helpers.h\"\r\n#include \"count_new.h\"\r\n#include \"test_macros.h\"\r\n\r\nnamespace ctor::copy {\r\ntemplate <class Type>\r\nvoid test_copy_throws() {\r\n#if !defined(TEST_HAS_NO_EXCEPTIONS)\r\n    assert(Type::count == 0);\r\n    {\r\n        const std::any a = Type(42);\r\n        assert(Type::count == 1);\r\n        try {\r\n            const std::any a2(a);\r\n            assert(false);\r\n        } catch (my_any_exception const &) {\r\n            // do nothing\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n        assert(Type::count == 1);\r\n        assertContains<Type>(a, 42);\r\n    }\r\n    assert(Type::count == 0);\r\n#endif\r\n}\r\n\r\nvoid test_copy_empty() {\r\n    DisableAllocationGuard g; ((void)g); // No allocations should occur.\r\n    std::any a1;\r\n    std::any a2(a1);\r\n\r\n    assertEmpty(a1);\r\n    assertEmpty(a2);\r\n}\r\n\r\ntemplate <class Type>\r\nvoid test_copy()\r\n{\r\n    // Copying small types should not perform any allocations.\r\n    DisableAllocationGuard g(isSmallType<Type>()); ((void)g);\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    {\r\n        std::any a = Type(42);\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n\r\n        std::any a2(a);\r\n\r\n        assert(Type::copied == 1);\r\n        assert(Type::count == 2);\r\n        assertContains<Type>(a, 42);\r\n        assertContains<Type>(a2, 42);\r\n\r\n        // Modify a and check that a2 is unchanged\r\n        modifyValue<Type>(a, -1);\r\n        assertContains<Type>(a, -1);\r\n        assertContains<Type>(a2, 42);\r\n\r\n        // modify a2 and check that a is unchanged\r\n        modifyValue<Type>(a2, 999);\r\n        assertContains<Type>(a, -1);\r\n        assertContains<Type>(a2, 999);\r\n\r\n        // clear a and check that a2 is unchanged\r\n        a.reset();\r\n        assertEmpty(a);\r\n        assertContains<Type>(a2, 999);\r\n    }\r\n    assert(Type::count == 0);\r\n}\r\n\r\nint run_test() {\r\n    test_copy<small>();\r\n    test_copy<large>();\r\n    test_copy_empty();\r\n    test_copy_throws<small_throws_on_copy>();\r\n    test_copy_throws<large_throws_on_copy>();\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::copy\r\n// -- END: test/std/utilities/any/any.class/any.cons/copy.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/any/any.class/any.cons/default.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <any>\r\n\r\n// any() noexcept;\r\n\r\n#include <any>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"any_helpers.h\"\r\n#include \"count_new.h\"\r\n\r\nnamespace ctor::default_ {\r\nint run_test()\r\n{\r\n    {\r\n        static_assert(\r\n            std::is_nothrow_default_constructible<std::any>::value\r\n          , \"Must be default constructible\"\r\n          );\r\n    }\r\n#ifndef _M_CEE // TRANSITION, VSO-1664382\r\n    {\r\n        struct TestConstexpr : public std::any {\r\n          constexpr TestConstexpr() : std::any() {}\r\n        };\r\n        TEST_CONSTINIT static std::any a;\r\n        (void)a;\r\n    }\r\n#endif // ^^^ no workaround ^^^\r\n    {\r\n        DisableAllocationGuard g; ((void)g);\r\n        const std::any a;\r\n        assertEmpty(a);\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::default_\r\n// -- END: test/std/utilities/any/any.class/any.cons/default.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/any/any.class/any.cons/in_place_type.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <any>\r\n\r\n// template <class T, class ...Args> any(in_place_type_t<T>, Args&&...);\r\n// template <class T, class U, class ...Args>\r\n// any(in_place_type_t<T>, initializer_list<U>, Args&&...);\r\n\r\n// Test construction from a value.\r\n// Concerns:\r\n// ---------\r\n// 1. The value is properly move/copied depending on the value category.\r\n// 2. Both small and large values are properly handled.\r\n\r\n\r\n#include <any>\r\n#include <cassert>\r\n\r\n#include \"any_helpers.h\"\r\n#include \"count_new.h\"\r\n#include \"test_macros.h\"\r\n#include \"test_convertible.h\"\r\n\r\nnamespace ctor::in_place_type {\r\ntemplate <class Type>\r\nvoid test_in_place_type() {\r\n    // constructing from a small type should perform no allocations.\r\n    DisableAllocationGuard g(isSmallType<Type>()); ((void)g);\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    {\r\n        std::any a(std::in_place_type<Type>);\r\n\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 0);\r\n        assertContains<Type>(a, 0);\r\n    }\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    { // Test that the in_place argument is properly decayed\r\n        std::any a(std::in_place_type<Type&>);\r\n\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 0);\r\n        assertContains<Type>(a, 0);\r\n    }\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    {\r\n        std::any a(std::in_place_type<Type>, 101);\r\n\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 0);\r\n        assertContains<Type>(a, 101);\r\n    }\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    {\r\n        std::any a(std::in_place_type<Type>, -1, 42, -1);\r\n\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 0);\r\n        assertContains<Type>(a, 42);\r\n    }\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n}\r\n\r\ntemplate <class Type>\r\nvoid test_in_place_type_tracked() {\r\n    // constructing from a small type should perform no allocations.\r\n    DisableAllocationGuard g(isSmallType<Type>()); ((void)g);\r\n    {\r\n        std::any a(std::in_place_type<Type>);\r\n        assertArgsMatch<Type>(a);\r\n    }\r\n    {\r\n        std::any a(std::in_place_type<Type>, -1, 42, -1);\r\n        assertArgsMatch<Type, int, int, int>(a);\r\n    }\r\n    // initializer_list constructor tests\r\n    {\r\n        std::any a(std::in_place_type<Type>, {-1, 42, -1});\r\n        assertArgsMatch<Type, std::initializer_list<int>>(a);\r\n    }\r\n    {\r\n        int x = 42;\r\n        std::any a(std::in_place_type<Type&>, {-1, 42, -1}, x);\r\n        assertArgsMatch<Type, std::initializer_list<int>, int&>(a);\r\n    }\r\n}\r\n\r\nvoid test_func() {}\r\n\r\nvoid test_in_place_type_decayed() {\r\n    {\r\n        using Type = decltype(test_func);\r\n        using DecayT = void(*)();\r\n        std::any a(std::in_place_type<Type>, test_func);\r\n        assert(containsType<DecayT>(a));\r\n        assert(std::any_cast<DecayT>(a) == test_func);\r\n    }\r\n    {\r\n        int my_arr[5];\r\n        using Type = int(&)[5];\r\n        using DecayT = int*;\r\n        std::any a(std::in_place_type<Type>, my_arr);\r\n        assert(containsType<DecayT>(a));\r\n        assert(std::any_cast<DecayT>(a) == my_arr);\r\n    }\r\n    {\r\n        using Type = int[5];\r\n        using DecayT = int*;\r\n        std::any a(std::in_place_type<Type>);\r\n        assert(containsType<DecayT>(a));\r\n        assert(std::any_cast<DecayT>(a) == nullptr);\r\n    }\r\n}\r\n\r\nvoid test_ctor_sfinae() {\r\n    {\r\n        // Test that the init-list ctor SFINAE's away properly when\r\n        // construction would be ill-formed.\r\n        using IL = std::initializer_list<int>;\r\n        static_assert(!std::is_constructible<std::any,\r\n                      std::in_place_type_t<int>, IL>::value, \"\");\r\n        static_assert(std::is_constructible<std::any,\r\n            std::in_place_type_t<small_tracked_t>, IL>::value, \"\");\r\n    }\r\n    {\r\n        // Test that the tagged dispatch constructor SFINAE's away when the\r\n        // argument is non-copyable\r\n        struct NoCopy {\r\n          NoCopy() = default;\r\n          NoCopy(NoCopy const&) = delete;\r\n          NoCopy(int) {}\r\n          NoCopy(std::initializer_list<int>, int) {}\r\n        };\r\n        using Tag = std::in_place_type_t<NoCopy>;\r\n        using RefTag = std::in_place_type_t<NoCopy&>;\r\n        using IL = std::initializer_list<int>;\r\n        static_assert(!std::is_constructible<std::any, Tag>::value, \"\");\r\n        static_assert(!std::is_constructible<std::any, Tag, int>::value, \"\");\r\n        static_assert(!std::is_constructible<std::any, Tag, IL, int>::value, \"\");\r\n        static_assert(!std::is_constructible<std::any, RefTag>::value, \"\");\r\n        static_assert(!std::is_constructible<std::any, RefTag, int>::value, \"\");\r\n        static_assert(!std::is_constructible<std::any, RefTag, IL, int>::value, \"\");\r\n    }\r\n}\r\n\r\nstruct Implicit {\r\n  Implicit(int) {}\r\n  Implicit(int, int, int) {}\r\n  Implicit(std::initializer_list<int>, int) {}\r\n};\r\n\r\nvoid test_constructor_explicit() {\r\n    using I = Implicit;\r\n    using IT = std::in_place_type_t<I>;\r\n    static_assert(!test_convertible<std::any, IT, int>(), \"\");\r\n    static_assert(std::is_constructible<std::any, IT, int>::value, \"\");\r\n    static_assert(!test_convertible<std::any, IT, int, int, int>(), \"\");\r\n    static_assert(std::is_constructible<std::any, IT, int, int, int>::value, \"\");\r\n    static_assert(!test_convertible<std::any, IT, std::initializer_list<int>&, int>(), \"\");\r\n    static_assert(std::is_constructible<std::any, IT, std::initializer_list<int>&, int>::value, \"\");\r\n}\r\n\r\nint run_test() {\r\n    test_in_place_type<small>();\r\n    test_in_place_type<large>();\r\n    test_in_place_type<small_throws_on_copy>();\r\n    test_in_place_type<large_throws_on_copy>();\r\n    test_in_place_type<throws_on_move>();\r\n    test_in_place_type_tracked<small_tracked_t>();\r\n    test_in_place_type_tracked<large_tracked_t>();\r\n    test_in_place_type_decayed();\r\n    test_ctor_sfinae();\r\n    test_constructor_explicit();\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::in_place_type\r\n// -- END: test/std/utilities/any/any.class/any.cons/in_place_type.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/any/any.class/any.cons/move.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <any>\r\n\r\n// any(any &&) noexcept;\r\n\r\n#include <any>\r\n#include <utility>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"any_helpers.h\"\r\n#include \"count_new.h\"\r\n#include \"test_macros.h\"\r\n\r\nnamespace ctor::move {\r\n// Moves are always noexcept. The throws_on_move object\r\n// must be stored dynamically so the pointer is moved and\r\n// not the stored object.\r\nvoid test_move_does_not_throw()\r\n{\r\n#if !defined(TEST_HAS_NO_EXCEPTIONS)\r\n    assert(throws_on_move::count == 0);\r\n    {\r\n        throws_on_move v(42);\r\n        std::any a = v;\r\n        assert(throws_on_move::count == 2);\r\n        // No allocations should be performed after this point.\r\n        DisableAllocationGuard g; ((void)g);\r\n        try {\r\n            const std::any a2 = std::move(a);\r\n            assertEmpty(a);\r\n            assertContains<throws_on_move>(a2, 42);\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n        assert(throws_on_move::count == 1);\r\n        assertEmpty(a);\r\n    }\r\n    assert(throws_on_move::count == 0);\r\n#endif\r\n}\r\n\r\nvoid test_move_empty() {\r\n    DisableAllocationGuard g; ((void)g); // no allocations should be performed.\r\n\r\n    std::any a1;\r\n    std::any a2 = std::move(a1);\r\n\r\n    assertEmpty(a1);\r\n    assertEmpty(a2);\r\n}\r\n\r\ntemplate <class Type>\r\nvoid test_move() {\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    {\r\n        std::any a = Type(42);\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 1);\r\n\r\n        // Moving should not perform allocations since it must be noexcept.\r\n        DisableAllocationGuard g; ((void)g);\r\n\r\n        std::any a2 = std::move(a);\r\n\r\n        assert(Type::moved == 1 || Type::moved == 2); // zero or more move operations can be performed.\r\n        assert(Type::copied == 0); // no copies can be performed.\r\n        assert(Type::count == 1 + a.has_value());\r\n        assertContains<Type>(a2, 42);\r\n        LIBCPP_ASSERT(!a.has_value()); // Moves are always destructive.\r\n        if (a.has_value())\r\n            assertContains<Type>(a, 0);\r\n    }\r\n    assert(Type::count == 0);\r\n}\r\n\r\nint run_test()\r\n{\r\n    // noexcept test\r\n    static_assert(std::is_nothrow_move_constructible<std::any>::value);\r\n\r\n    test_move<small>();\r\n    test_move<large>();\r\n    test_move_empty();\r\n    test_move_does_not_throw();\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::move\r\n// -- END: test/std/utilities/any/any.class/any.cons/move.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/any/any.class/any.cons/value.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <any>\r\n\r\n// template <class Value> any(Value &&)\r\n\r\n// Test construction from a value.\r\n// Concerns:\r\n// ---------\r\n// 1. The value is properly move/copied depending on the value category.\r\n// 2. Both small and large values are properly handled.\r\n\r\n\r\n#include <any>\r\n#include <cassert>\r\n#include <type_traits>\r\n\r\n#include \"any_helpers.h\"\r\n#include \"count_new.h\"\r\n#include \"test_macros.h\"\r\n\r\nnamespace ctor::value {\r\ntemplate <class Type>\r\nvoid test_copy_value_throws()\r\n{\r\n#if !defined(TEST_HAS_NO_EXCEPTIONS)\r\n    assert(Type::count == 0);\r\n    {\r\n        const Type t(42);\r\n        assert(Type::count == 1);\r\n        try {\r\n            std::any a2 = t;\r\n            assert(false);\r\n        } catch (const my_any_exception&) {\r\n            // do nothing\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n        assert(Type::count == 1);\r\n        assert(t.value == 42);\r\n    }\r\n    assert(Type::count == 0);\r\n#endif\r\n}\r\n\r\nvoid test_move_value_throws()\r\n{\r\n#if !defined(TEST_HAS_NO_EXCEPTIONS)\r\n    assert(throws_on_move::count == 0);\r\n    {\r\n        throws_on_move v;\r\n        assert(throws_on_move::count == 1);\r\n        try {\r\n            std::any a = std::move(v);\r\n            assert(false);\r\n        } catch (const my_any_exception&) {\r\n            // do nothing\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n        assert(throws_on_move::count == 1);\r\n    }\r\n    assert(throws_on_move::count == 0);\r\n#endif\r\n}\r\n\r\ntemplate <class Type>\r\nvoid test_copy_move_value() {\r\n    // constructing from a small type should perform no allocations.\r\n    DisableAllocationGuard g(isSmallType<Type>()); ((void)g);\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    {\r\n        Type t(42);\r\n        assert(Type::count == 1);\r\n\r\n        std::any a = t;\r\n\r\n        assert(Type::count == 2);\r\n        assert(Type::copied == 1);\r\n        assert(Type::moved == 0);\r\n        assertContains<Type>(a, 42);\r\n    }\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    {\r\n        Type t(42);\r\n        assert(Type::count == 1);\r\n\r\n        std::any a = std::move(t);\r\n\r\n        assert(Type::count == 2);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 1);\r\n        assertContains<Type>(a, 42);\r\n    }\r\n}\r\n\r\n// Test that any(ValueType&&) is *never* selected for a std::in_place_type_t specialization.\r\nvoid test_sfinae_constraints() {\r\n    using BadTag = std::in_place_type_t<int>;\r\n    using OKTag = std::in_place_t;\r\n    // Test that the tag type is properly handled in SFINAE\r\n    BadTag t = std::in_place_type<int>;\r\n    OKTag ot = std::in_place;\r\n    {\r\n        std::any a(t);\r\n        assertContains<int>(a, 0);\r\n    }\r\n    {\r\n        std::any a(std::move(t));\r\n        assertContains<int>(a, 0);\r\n    }\r\n    {\r\n        std::any a(ot);\r\n        assert(containsType<OKTag>(a));\r\n    }\r\n    {\r\n        struct Dummy { Dummy() = delete; };\r\n        using T = std::in_place_type_t<Dummy>;\r\n        static_assert(!std::is_constructible<std::any, T>::value, \"\");\r\n    }\r\n    {\r\n        // Test that the ValueType&& constructor SFINAE's away when the\r\n        // argument is non-copyable\r\n        struct NoCopy {\r\n          NoCopy() = default;\r\n          NoCopy(NoCopy const&) = delete;\r\n          NoCopy(int) {}\r\n        };\r\n        static_assert(!std::is_constructible<std::any, NoCopy>::value, \"\");\r\n        static_assert(!std::is_constructible<std::any, NoCopy&>::value, \"\");\r\n        static_assert(!std::is_convertible<NoCopy, std::any>::value, \"\");\r\n    }\r\n}\r\n\r\n// https://llvm.org/PR176877\r\n// Avoid constraint meta-recursion for a type both convertible from and to std::any.\r\ntemplate <class T, bool = std::is_copy_constructible<T>::value>\r\nvoid test_default_template_argument_is_copy_constructible(T) {}\r\n\r\ntemplate <class T, bool = std::is_copy_constructible_v<T>>\r\nvoid test_default_template_argument_is_copy_constructible_v(T) {}\r\n\r\nvoid test_no_constraint_recursion() {\r\n  struct ConvertibleFromAndToAny {\r\n    ConvertibleFromAndToAny(std::any) {}\r\n  };\r\n\r\n  ConvertibleFromAndToAny src = std::any{};\r\n  test_default_template_argument_is_copy_constructible(src);\r\n  test_default_template_argument_is_copy_constructible_v(src);\r\n}\r\n\r\nint run_test() {\r\n    test_copy_move_value<small>();\r\n    test_copy_move_value<large>();\r\n    test_copy_value_throws<small_throws_on_copy>();\r\n    test_copy_value_throws<large_throws_on_copy>();\r\n    test_move_value_throws();\r\n    test_sfinae_constraints();\r\n    test_no_constraint_recursion();\r\n\r\n    return 0;\r\n}\r\n} // namespace ctor::value\r\n// -- END: test/std/utilities/any/any.class/any.cons/value.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/any/any.class/any.modifiers/emplace.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <any>\r\n\r\n// template <class T, class ...Args> T& emplace(Args&&...);\r\n// template <class T, class U, class ...Args>\r\n// T& emplace(initializer_list<U>, Args&&...);\r\n\r\n#include <any>\r\n#include <cassert>\r\n\r\n#include \"any_helpers.h\"\r\n#include \"count_new.h\"\r\n#include \"test_macros.h\"\r\n\r\nnamespace modifiers::emplace {\r\nstruct Tracked {\r\n    static int count;\r\n    Tracked() { ++count; }\r\n    Tracked(Tracked const&) noexcept { ++count; }\r\n    Tracked& operator=(Tracked const&) = default;\r\n    ~Tracked() { --count; }\r\n};\r\nint Tracked::count = 0;\r\n\r\ntemplate <class Type>\r\nvoid test_emplace_type() {\r\n    // constructing from a small type should perform no allocations.\r\n    DisableAllocationGuard g(isSmallType<Type>()); ((void)g);\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    {\r\n        std::any a(std::in_place_type<Tracked>);\r\n        assert(Tracked::count == 1);\r\n\r\n        auto &v = a.emplace<Type>();\r\n        static_assert( std::is_same_v<Type&, decltype(v)>, \"\" );\r\n        assert(&v == std::any_cast<Type>(&a));\r\n\r\n        assert(Tracked::count == 0);\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 0);\r\n        assertContains<Type>(a, 0);\r\n    }\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    {\r\n        std::any a(std::in_place_type<Tracked>);\r\n        assert(Tracked::count == 1);\r\n\r\n        auto &v = a.emplace<Type>(101);\r\n        static_assert( std::is_same_v<Type&, decltype(v)>, \"\" );\r\n        assert(&v == std::any_cast<Type>(&a));\r\n\r\n        assert(Tracked::count == 0);\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 0);\r\n        assertContains<Type>(a, 101);\r\n    }\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    {\r\n        std::any a(std::in_place_type<Tracked>);\r\n        assert(Tracked::count == 1);\r\n\r\n        auto &v = a.emplace<Type>(-1, 42, -1);\r\n        static_assert( std::is_same_v<Type&, decltype(v)>, \"\" );\r\n        assert(&v == std::any_cast<Type>(&a));\r\n\r\n        assert(Tracked::count == 0);\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 0);\r\n        assertContains<Type>(a, 42);\r\n    }\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n}\r\n\r\ntemplate <class Type>\r\nvoid test_emplace_type_tracked() {\r\n    // constructing from a small type should perform no allocations.\r\n    DisableAllocationGuard g(isSmallType<Type>()); ((void)g);\r\n    {\r\n        std::any a(std::in_place_type<Tracked>);\r\n        assert(Tracked::count == 1);\r\n        auto &v = a.emplace<Type>();\r\n        static_assert( std::is_same_v<Type&, decltype(v)>, \"\" );\r\n        assert(&v == std::any_cast<Type>(&a));\r\n\r\n        assert(Tracked::count == 0);\r\n        assertArgsMatch<Type>(a);\r\n    }\r\n    {\r\n        std::any a(std::in_place_type<Tracked>);\r\n        assert(Tracked::count == 1);\r\n        auto &v = a.emplace<Type>(-1, 42, -1);\r\n        static_assert( std::is_same_v<Type&, decltype(v)>, \"\" );\r\n        assert(&v == std::any_cast<Type>(&a));\r\n\r\n        assert(Tracked::count == 0);\r\n        assertArgsMatch<Type, int, int, int>(a);\r\n    }\r\n    // initializer_list constructor tests\r\n    {\r\n        std::any a(std::in_place_type<Tracked>);\r\n        assert(Tracked::count == 1);\r\n        auto &v = a.emplace<Type>({-1, 42, -1});\r\n        static_assert( std::is_same_v<Type&, decltype(v)>, \"\" );\r\n        assert(&v == std::any_cast<Type>(&a));\r\n\r\n        assert(Tracked::count == 0);\r\n        assertArgsMatch<Type, std::initializer_list<int>>(a);\r\n    }\r\n    {\r\n        int x = 42;\r\n        std::any a(std::in_place_type<Tracked>);\r\n        assert(Tracked::count == 1);\r\n        auto &v = a.emplace<Type>({-1, 42, -1}, x);\r\n        static_assert( std::is_same_v<Type&, decltype(v)>, \"\" );\r\n        assert(&v == std::any_cast<Type>(&a));\r\n\r\n        assert(Tracked::count == 0);\r\n        assertArgsMatch<Type, std::initializer_list<int>, int&>(a);\r\n    }\r\n}\r\n\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n\r\nstruct SmallThrows {\r\n  SmallThrows(int) { throw 42; }\r\n  SmallThrows(std::initializer_list<int>, int) { throw 42; }\r\n};\r\nstatic_assert(IsSmallObject<SmallThrows>::value, \"\");\r\n\r\nstruct LargeThrows {\r\n  LargeThrows(int) { throw 42; }\r\n  LargeThrows(std::initializer_list<int>, int) { throw 42; }\r\n  int data[sizeof(std::any)];\r\n};\r\nstatic_assert(!IsSmallObject<LargeThrows>::value, \"\");\r\n\r\ntemplate <class Type>\r\nvoid test_emplace_throws()\r\n{\r\n    // any stores small type\r\n    {\r\n        std::any a(small{42});\r\n        assert(small::count == 1);\r\n        try {\r\n            auto &v = a.emplace<Type>(101);\r\n            static_assert( std::is_same_v<Type&, decltype(v)>, \"\" );\r\n            assert(false);\r\n        } catch (int const&) {\r\n        }\r\n        assert(small::count == 0);\r\n    }\r\n    {\r\n        std::any a(small{42});\r\n        assert(small::count == 1);\r\n        try {\r\n            auto &v = a.emplace<Type>({1, 2, 3}, 101);\r\n            static_assert( std::is_same_v<Type&, decltype(v)>, \"\" );\r\n            assert(false);\r\n        } catch (int const&) {\r\n        }\r\n        assert(small::count == 0);\r\n    }\r\n    // any stores large type\r\n    {\r\n        std::any a(large{42});\r\n        assert(large::count == 1);\r\n        try {\r\n            auto &v = a.emplace<Type>(101);\r\n            static_assert( std::is_same_v<Type&, decltype(v)>, \"\" );\r\n            assert(false);\r\n        } catch (int const&) {\r\n        }\r\n        assert(large::count == 0);\r\n    }\r\n    {\r\n        std::any a(large{42});\r\n        assert(large::count == 1);\r\n        try {\r\n            auto &v = a.emplace<Type>({1, 2, 3}, 101);\r\n            static_assert( std::is_same_v<Type&, decltype(v)>, \"\" );\r\n            assert(false);\r\n        } catch (int const&) {\r\n        }\r\n        assert(large::count == 0);\r\n    }\r\n}\r\n\r\n#endif\r\n\r\ntemplate <class T, class ...Args>\r\nconstexpr auto has_emplace(int)\r\n    -> decltype(std::any{}.emplace<T>(std::declval<Args>()...), true) { return true; }\r\n\r\ntemplate <class ...Args>\r\nconstexpr bool has_emplace(long) { return false; }\r\n\r\ntemplate <class ...Args>\r\nconstexpr bool has_emplace() { return has_emplace<Args...>(0); }\r\n\r\n\r\ntemplate <class T, class IT, class ...Args>\r\nconstexpr auto has_emplace_init_list(int)\r\n    -> decltype(std::any{}.emplace<T>(\r\n        {std::declval<IT>(), std::declval<IT>(), std::declval<IT>()},\r\n        std::declval<Args>()...), true) { return true; }\r\n\r\ntemplate <class ...Args>\r\nconstexpr bool has_emplace_init_list(long) { return false; }\r\n\r\ntemplate <class ...Args>\r\nconstexpr bool has_emplace_init_list() { return has_emplace_init_list<Args...>(0); }\r\n\r\n\r\nvoid test_emplace_sfinae_constraints() {\r\n    {\r\n        static_assert(has_emplace<int>(), \"\");\r\n        static_assert(has_emplace<int, int>(), \"\");\r\n        static_assert(!has_emplace<int, int, int>(), \"not constructible\");\r\n        static_assert(!has_emplace_init_list<int, int>(), \"not constructible from il\");\r\n    }\r\n    {\r\n        static_assert(has_emplace<small>(), \"\");\r\n        static_assert(has_emplace<large>(), \"\");\r\n        static_assert(!has_emplace<small, void*>(), \"\");\r\n        static_assert(!has_emplace<large, void*>(), \"\");\r\n\r\n        static_assert(has_emplace_init_list<small, int>(), \"\");\r\n        static_assert(has_emplace_init_list<large, int>(), \"\");\r\n        static_assert(!has_emplace_init_list<small, void*>(), \"\");\r\n        static_assert(!has_emplace_init_list<large, void*>(), \"\");\r\n    }\r\n    {\r\n        // Test that the emplace SFINAE's away when the\r\n        // argument is non-copyable\r\n        struct NoCopy {\r\n          NoCopy() = default;\r\n          NoCopy(NoCopy const&) = delete;\r\n          NoCopy(int) {}\r\n          NoCopy(std::initializer_list<int>, int, int) {}\r\n        };\r\n        static_assert(!has_emplace<NoCopy>(), \"\");\r\n        static_assert(!has_emplace<NoCopy, int>(), \"\");\r\n        static_assert(!has_emplace_init_list<NoCopy, int, int, int>(), \"\");\r\n        static_assert(!has_emplace<NoCopy&>(), \"\");\r\n        static_assert(!has_emplace<NoCopy&, int>(), \"\");\r\n        static_assert(!has_emplace_init_list<NoCopy&, int, int, int>(), \"\");\r\n        static_assert(!has_emplace<NoCopy&&>(), \"\");\r\n        static_assert(!has_emplace<NoCopy&&, int>(), \"\");\r\n        static_assert(!has_emplace_init_list<NoCopy&&, int, int, int>(), \"\");\r\n\r\n    }\r\n}\r\n\r\nint run_test() {\r\n    test_emplace_type<small>();\r\n    test_emplace_type<large>();\r\n    test_emplace_type<small_throws_on_copy>();\r\n    test_emplace_type<large_throws_on_copy>();\r\n    test_emplace_type<throws_on_move>();\r\n    test_emplace_type_tracked<small_tracked_t>();\r\n    test_emplace_type_tracked<large_tracked_t>();\r\n    test_emplace_sfinae_constraints();\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    test_emplace_throws<SmallThrows>();\r\n    test_emplace_throws<LargeThrows>();\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace modifiers::emplace\r\n// -- END: test/std/utilities/any/any.class/any.modifiers/emplace.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/any/any.class/any.modifiers/reset.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <any>\r\n\r\n// any::reset() noexcept\r\n\r\n#include <any>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"any_helpers.h\"\r\n\r\nnamespace modifiers::reset {\r\nint run_test()\r\n{\r\n    // empty\r\n    {\r\n        std::any a;\r\n        ASSERT_NOEXCEPT(a.reset());\r\n\r\n        assertEmpty(a);\r\n\r\n        a.reset();\r\n\r\n        assertEmpty(a);\r\n    }\r\n    // small object\r\n    {\r\n        std::any a = small(1);\r\n        assert(small::count == 1);\r\n        assertContains<small>(a, 1);\r\n\r\n        a.reset();\r\n\r\n        assertEmpty<small>(a);\r\n        assert(small::count == 0);\r\n    }\r\n    // large object\r\n    {\r\n        std::any a = large(1);\r\n        assert(large::count == 1);\r\n        assertContains<large>(a, 1);\r\n\r\n        a.reset();\r\n\r\n        assertEmpty<large>(a);\r\n        assert(large::count == 0);\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace modifiers::reset\r\n// -- END: test/std/utilities/any/any.class/any.modifiers/reset.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/any/any.class/any.modifiers/swap.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <any>\r\n\r\n// any::swap(any &) noexcept\r\n\r\n// Test swap(large, small) and swap(small, large)\r\n\r\n#include <any>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"any_helpers.h\"\r\n\r\nnamespace modifiers::swap_ {\r\ntemplate <class LHS, class RHS>\r\nvoid test_swap() {\r\n    assert(LHS::count == 0);\r\n    assert(RHS::count == 0);\r\n    {\r\n        std::any a1 = LHS(1);\r\n        std::any a2 = RHS(2);\r\n        assert(LHS::count == 1);\r\n        assert(RHS::count == 1);\r\n\r\n        a1.swap(a2);\r\n\r\n        assert(LHS::count == 1);\r\n        assert(RHS::count == 1);\r\n\r\n        assertContains<RHS>(a1, 2);\r\n        assertContains<LHS>(a2, 1);\r\n    }\r\n    assert(LHS::count == 0);\r\n    assert(RHS::count == 0);\r\n    assert(LHS::copied == 0);\r\n    assert(RHS::copied == 0);\r\n}\r\n\r\ntemplate <class Tp>\r\nvoid test_swap_empty() {\r\n    assert(Tp::count == 0);\r\n    {\r\n        std::any a1 = Tp(1);\r\n        std::any a2;\r\n        assert(Tp::count == 1);\r\n\r\n        a1.swap(a2);\r\n\r\n        assert(Tp::count == 1);\r\n\r\n        assertContains<Tp>(a2, 1);\r\n        assertEmpty(a1);\r\n    }\r\n    assert(Tp::count == 0);\r\n    {\r\n        std::any a1 = Tp(1);\r\n        std::any a2;\r\n        assert(Tp::count == 1);\r\n\r\n        a2.swap(a1);\r\n\r\n        assert(Tp::count == 1);\r\n\r\n        assertContains<Tp>(a2, 1);\r\n        assertEmpty(a1);\r\n    }\r\n    assert(Tp::count == 0);\r\n    assert(Tp::copied == 0);\r\n}\r\n\r\nvoid test_noexcept()\r\n{\r\n    std::any a1;\r\n    std::any a2;\r\n    ASSERT_NOEXCEPT(a1.swap(a2));\r\n}\r\n\r\nvoid test_self_swap() {\r\n    {\r\n        // empty\r\n        std::any a;\r\n        a.swap(a);\r\n        assertEmpty(a);\r\n    }\r\n    { // small\r\n        using T = small;\r\n        std::any a = T(42);\r\n        T::reset();\r\n        a.swap(a);\r\n        assertContains<T>(a, 42);\r\n        assert(T::count == 1);\r\n        assert(T::copied == 0);\r\n        LIBCPP_ASSERT(T::moved == 0);\r\n    }\r\n    assert(small::count == 0);\r\n    { // large\r\n        using T = large;\r\n        std::any a = T(42);\r\n        T::reset();\r\n        a.swap(a);\r\n        assertContains<T>(a, 42);\r\n        assert(T::count == 1);\r\n        assert(T::copied == 0);\r\n        LIBCPP_ASSERT(T::moved == 0);\r\n    }\r\n    assert(large::count == 0);\r\n}\r\n\r\nint run_test()\r\n{\r\n    test_noexcept();\r\n    test_swap_empty<small>();\r\n    test_swap_empty<large>();\r\n    test_swap<small1, small2>();\r\n    test_swap<large1, large2>();\r\n    test_swap<small, large>();\r\n    test_swap<large, small>();\r\n    test_self_swap();\r\n\r\n  return 0;\r\n}\r\n} // namespace modifiers::swap_\r\n// -- END: test/std/utilities/any/any.class/any.modifiers/swap.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/any/any.class/any.observers/has_value.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <any>\r\n\r\n// any::has_value() noexcept\r\n\r\n#include <any>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"any_helpers.h\"\r\n\r\nnamespace observers::has_value {\r\nint run_test()\r\n{\r\n    {\r\n        std::any a;\r\n        ASSERT_NOEXCEPT(a.has_value());\r\n    }\r\n    // empty\r\n    {\r\n        std::any a;\r\n        assert(!a.has_value());\r\n\r\n        a.reset();\r\n        assert(!a.has_value());\r\n\r\n        a = 42;\r\n        assert(a.has_value());\r\n    }\r\n    // small object\r\n    {\r\n        std::any a = small(1);\r\n        assert(a.has_value());\r\n\r\n        a.reset();\r\n        assert(!a.has_value());\r\n\r\n        a = small(1);\r\n        assert(a.has_value());\r\n    }\r\n    // large object\r\n    {\r\n        std::any a = large(1);\r\n        assert(a.has_value());\r\n\r\n        a.reset();\r\n        assert(!a.has_value());\r\n\r\n        a = large(1);\r\n        assert(a.has_value());\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace observers::has_value\r\n// -- END: test/std/utilities/any/any.class/any.observers/has_value.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/any/any.class/any.observers/type.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n\r\n\r\n// <any>\r\n\r\n// any::type() noexcept\r\n\r\n#include <any>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"any_helpers.h\"\r\n\r\nnamespace observers::type {\r\nint run_test()\r\n{\r\n    {\r\n        const std::any a;\r\n        assert(a.type() == typeid(void));\r\n        ASSERT_NOEXCEPT(a.type());\r\n    }\r\n    {\r\n        std::any a = small(1);\r\n        assert(a.type() == typeid(small));\r\n    }\r\n    {\r\n        std::any a = large(1);\r\n        assert(a.type() == typeid(large));\r\n    }\r\n    {\r\n        int arr[3];\r\n        std::any a = arr;\r\n        assert(a.type() == typeid(int*));  // ensure that it is decayed\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace observers::type\r\n// -- END: test/std/utilities/any/any.class/any.observers/type.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/any/any.nonmembers/any.cast/any_cast_pointer.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <any>\r\n\r\n// template <class ValueType>\r\n// ValueType const* any_cast(any const *) noexcept;\r\n//\r\n// template <class ValueType>\r\n// ValueType * any_cast(any *) noexcept;\r\n\r\n#include <any>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"any_helpers.h\"\r\n\r\nnamespace nonmembers::cast::pointer {\r\n// Test that the operators are properly noexcept.\r\nvoid test_cast_is_noexcept() {\r\n    std::any a;\r\n    ASSERT_NOEXCEPT(std::any_cast<int>(&a));\r\n\r\n    const std::any& ca = a;\r\n    ASSERT_NOEXCEPT(std::any_cast<int>(&ca));\r\n}\r\n\r\n// Test that the return type of any_cast is correct.\r\nvoid test_cast_return_type() {\r\n    std::any a;\r\n    ASSERT_SAME_TYPE(decltype(std::any_cast<int>(&a)),       int*);\r\n    ASSERT_SAME_TYPE(decltype(std::any_cast<int const>(&a)), int const*);\r\n\r\n    const std::any& ca = a;\r\n    ASSERT_SAME_TYPE(decltype(std::any_cast<int>(&ca)),       int const*);\r\n    ASSERT_SAME_TYPE(decltype(std::any_cast<int const>(&ca)), int const*);\r\n}\r\n\r\n// Test that any_cast handles null pointers.\r\nvoid test_cast_nullptr() {\r\n    std::any *a = nullptr;\r\n    assert(nullptr == std::any_cast<int>(a));\r\n    assert(nullptr == std::any_cast<int const>(a));\r\n\r\n    const std::any *ca = nullptr;\r\n    assert(nullptr == std::any_cast<int>(ca));\r\n    assert(nullptr == std::any_cast<int const>(ca));\r\n}\r\n\r\n// Test casting an empty object.\r\nvoid test_cast_empty() {\r\n    {\r\n        std::any a;\r\n        assert(nullptr == std::any_cast<int>(&a));\r\n        assert(nullptr == std::any_cast<int const>(&a));\r\n\r\n        const std::any& ca = a;\r\n        assert(nullptr == std::any_cast<int>(&ca));\r\n        assert(nullptr == std::any_cast<int const>(&ca));\r\n    }\r\n    // Create as non-empty, then make empty and run test.\r\n    {\r\n        std::any a(42);\r\n        a.reset();\r\n        assert(nullptr == std::any_cast<int>(&a));\r\n        assert(nullptr == std::any_cast<int const>(&a));\r\n\r\n        const std::any& ca = a;\r\n        assert(nullptr == std::any_cast<int>(&ca));\r\n        assert(nullptr == std::any_cast<int const>(&ca));\r\n    }\r\n}\r\n\r\ntemplate <class Type>\r\nvoid test_cast() {\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    {\r\n        std::any a = Type(42);\r\n        const std::any& ca = a;\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 1);\r\n\r\n        // Try a cast to a bad type.\r\n        // NOTE: Type cannot be an int.\r\n        assert(std::any_cast<int>(&a) == nullptr);\r\n        assert(std::any_cast<int const>(&a) == nullptr);\r\n        assert(std::any_cast<int const volatile>(&a) == nullptr);\r\n\r\n        // Try a cast to the right type, but as a pointer.\r\n        assert(std::any_cast<Type*>(&a) == nullptr);\r\n        assert(std::any_cast<Type const*>(&a) == nullptr);\r\n\r\n        // Check getting a unqualified type from a non-const any.\r\n        Type* v = std::any_cast<Type>(&a);\r\n        assert(v != nullptr);\r\n        assert(v->value == 42);\r\n\r\n        // change the stored value and later check for the new value.\r\n        v->value = 999;\r\n\r\n        // Check getting a const qualified type from a non-const any.\r\n        Type const* cv = std::any_cast<Type const>(&a);\r\n        assert(cv != nullptr);\r\n        assert(cv == v);\r\n        assert(cv->value == 999);\r\n\r\n        // Check getting a unqualified type from a const any.\r\n        cv = std::any_cast<Type>(&ca);\r\n        assert(cv != nullptr);\r\n        assert(cv == v);\r\n        assert(cv->value == 999);\r\n\r\n        // Check getting a const-qualified type from a const any.\r\n        cv = std::any_cast<Type const>(&ca);\r\n        assert(cv != nullptr);\r\n        assert(cv == v);\r\n        assert(cv->value == 999);\r\n\r\n        // Check that no more objects were created, copied or moved.\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 1);\r\n    }\r\n    assert(Type::count == 0);\r\n}\r\n\r\nvoid test_cast_non_copyable_type()\r\n{\r\n    // Even though 'any' never stores non-copyable types\r\n    // we still need to support any_cast<NoCopy>(ptr)\r\n    struct NoCopy { NoCopy(NoCopy const&) = delete; };\r\n    std::any a(42);\r\n    std::any const& ca = a;\r\n    assert(std::any_cast<NoCopy>(&a) == nullptr);\r\n    assert(std::any_cast<NoCopy>(&ca) == nullptr);\r\n}\r\n\r\nvoid test_cast_array() {\r\n    int arr[3];\r\n    std::any a(arr);\r\n    RTTI_ASSERT(a.type() == typeid(int*)); // contained value is decayed\r\n    // We can't get an array out\r\n    int (*p)[3] = std::any_cast<int[3]>(&a);\r\n    assert(p == nullptr);\r\n}\r\n\r\nvoid test_fn() {}\r\n\r\nvoid test_cast_function_pointer() {\r\n    using T = void(*)();\r\n    std::any a(test_fn);\r\n    // An any can never store a function type, but we should at least be able\r\n    // to ask.\r\n    assert(std::any_cast<void()>(&a) == nullptr);\r\n    T fn_ptr = std::any_cast<T>(a);\r\n    assert(fn_ptr == test_fn);\r\n}\r\n\r\nint run_test() {\r\n    test_cast_is_noexcept();\r\n    test_cast_return_type();\r\n    test_cast_nullptr();\r\n    test_cast_empty();\r\n    test_cast<small>();\r\n    test_cast<large>();\r\n    test_cast_non_copyable_type();\r\n    test_cast_array();\r\n    test_cast_function_pointer();\r\n\r\n  return 0;\r\n}\r\n} // namespace nonmembers::cast::pointer\r\n// -- END: test/std/utilities/any/any.nonmembers/any.cast/any_cast_pointer.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/any/any.nonmembers/any.cast/any_cast_reference.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <any>\r\n\r\n// template <class ValueType>\r\n// ValueType const any_cast(any const&);\r\n//\r\n// template <class ValueType>\r\n// ValueType any_cast(any &);\r\n//\r\n// template <class ValueType>\r\n// ValueType any_cast(any &&);\r\n\r\n#include <any>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"any_helpers.h\"\r\n#include \"count_new.h\"\r\n#include \"test_macros.h\"\r\n\r\nnamespace nonmembers::cast::reference {\r\n// Test that the operators are NOT marked noexcept.\r\nvoid test_cast_is_not_noexcept() {\r\n    std::any a;\r\n    static_assert(!noexcept(std::any_cast<int>(static_cast<std::any&>(a))), \"\");\r\n    static_assert(!noexcept(std::any_cast<int>(static_cast<std::any const&>(a))), \"\");\r\n    static_assert(!noexcept(std::any_cast<int>(static_cast<std::any &&>(a))), \"\");\r\n}\r\n\r\n// Test that the return type of any_cast is correct.\r\nvoid test_cast_return_type() {\r\n    std::any a;\r\n    static_assert(std::is_same<decltype(std::any_cast<int>(a)), int>::value, \"\");\r\n    static_assert(std::is_same<decltype(std::any_cast<int const>(a)), int>::value, \"\");\r\n    static_assert(std::is_same<decltype(std::any_cast<int&>(a)), int&>::value, \"\");\r\n    static_assert(std::is_same<decltype(std::any_cast<int const&>(a)), int const&>::value, \"\");\r\n    static_assert(std::is_same<decltype(std::any_cast<int&&>(a)), int&&>::value, \"\");\r\n    static_assert(std::is_same<decltype(std::any_cast<int const&&>(a)), int const&&>::value, \"\");\r\n\r\n    static_assert(std::is_same<decltype(std::any_cast<int>(std::move(a))), int>::value, \"\");\r\n    static_assert(std::is_same<decltype(std::any_cast<int const>(std::move(a))), int>::value, \"\");\r\n    static_assert(std::is_same<decltype(std::any_cast<int&>(std::move(a))), int&>::value, \"\");\r\n    static_assert(std::is_same<decltype(std::any_cast<int const&>(std::move(a))), int const&>::value, \"\");\r\n    static_assert(std::is_same<decltype(std::any_cast<int&&>(std::move(a))), int&&>::value, \"\");\r\n    static_assert(std::is_same<decltype(std::any_cast<int const&&>(std::move(a))), int const&&>::value, \"\");\r\n\r\n    const std::any& ca = a;\r\n    static_assert(std::is_same<decltype(std::any_cast<int>(ca)), int>::value, \"\");\r\n    static_assert(std::is_same<decltype(std::any_cast<int const>(ca)), int>::value, \"\");\r\n    static_assert(std::is_same<decltype(std::any_cast<int const&>(ca)), int const&>::value, \"\");\r\n    static_assert(std::is_same<decltype(std::any_cast<int const&&>(ca)), int const&&>::value, \"\");\r\n}\r\n\r\ntemplate <class Type, class ConstT = Type>\r\nvoid checkThrows(std::any& a)\r\n{\r\n#if !defined(TEST_HAS_NO_EXCEPTIONS)\r\n    try {\r\n        TEST_IGNORE_NODISCARD std::any_cast<Type>(a);\r\n        assert(false);\r\n    } catch (const std::bad_any_cast&) {\r\n        // do nothing\r\n    } catch (...) {\r\n        assert(false);\r\n    }\r\n\r\n    try {\r\n        TEST_IGNORE_NODISCARD std::any_cast<ConstT>(static_cast<const std::any&>(a));\r\n        assert(false);\r\n    } catch (const std::bad_any_cast&) {\r\n        // do nothing\r\n    } catch (...) {\r\n        assert(false);\r\n    }\r\n\r\n    try {\r\n        using RefType = typename std::conditional<\r\n            std::is_lvalue_reference<Type>::value,\r\n            typename std::remove_reference<Type>::type&&,\r\n            Type\r\n        >::type;\r\n        TEST_IGNORE_NODISCARD std::any_cast<RefType>(static_cast<std::any&&>(a));\r\n        assert(false);\r\n    } catch (const std::bad_any_cast&) {\r\n            // do nothing\r\n    } catch (...) {\r\n        assert(false);\r\n    }\r\n#else\r\n    (TEST_IGNORE_NODISCARD a);\r\n#endif\r\n}\r\n\r\nvoid test_cast_empty() {\r\n    // None of these operations should allocate.\r\n    DisableAllocationGuard g; (TEST_IGNORE_NODISCARD g);\r\n    std::any a;\r\n    checkThrows<int>(a);\r\n}\r\n\r\ntemplate <class Type>\r\nvoid test_cast_to_reference() {\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    {\r\n        std::any a = Type(42);\r\n        const std::any& ca = a;\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 1);\r\n\r\n        // Try a cast to a bad type.\r\n        // NOTE: Type cannot be an int.\r\n        checkThrows<int>(a);\r\n        checkThrows<int&, int const&>(a);\r\n        checkThrows<Type*, Type const*>(a);\r\n        checkThrows<Type const*>(a);\r\n\r\n        // Check getting a type by reference from a non-const lvalue any.\r\n        {\r\n            Type& v = std::any_cast<Type&>(a);\r\n            assert(v.value == 42);\r\n\r\n            Type const &cv = std::any_cast<Type const&>(a);\r\n            assert(&cv == &v);\r\n        }\r\n        // Check getting a type by reference from a const lvalue any.\r\n        {\r\n            Type const& v = std::any_cast<Type const&>(ca);\r\n            assert(v.value == 42);\r\n\r\n            Type const &cv = std::any_cast<Type const&>(ca);\r\n            assert(&cv == &v);\r\n        }\r\n        // Check getting a type by reference from a const rvalue any.\r\n        {\r\n            Type const& v = std::any_cast<Type const&>(std::move(ca));\r\n            assert(v.value == 42);\r\n\r\n            Type const &cv = std::any_cast<Type const&>(std::move(ca));\r\n            assert(&cv == &v);\r\n        }\r\n        // Check getting a type by reference from a const rvalue any.\r\n        {\r\n            Type&& v = std::any_cast<Type&&>(std::move(a));\r\n            assert(v.value == 42);\r\n            assert(std::any_cast<Type&>(a).value == 42);\r\n\r\n            Type&& cv = std::any_cast<Type&&>(std::move(a));\r\n            assert(&cv == &v);\r\n            assert(std::any_cast<Type&>(a).value == 42);\r\n        }\r\n        // Check getting a type by reference from a const rvalue any.\r\n        {\r\n            Type const&& v = std::any_cast<Type const&&>(std::move(a));\r\n            assert(v.value == 42);\r\n            assert(std::any_cast<Type&>(a).value == 42);\r\n\r\n            Type const&& cv = std::any_cast<Type const&&>(std::move(a));\r\n            assert(&cv == &v);\r\n            assert(std::any_cast<Type&>(a).value == 42);\r\n        }\r\n        // Check that the original object hasn't been changed.\r\n        assertContains<Type>(a, 42);\r\n\r\n        // Check that no objects have been created/copied/moved.\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 1);\r\n    }\r\n    assert(Type::count == 0);\r\n}\r\n\r\ntemplate <class Type>\r\nvoid test_cast_to_value() {\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    {\r\n        std::any a = Type(42);\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 1);\r\n\r\n        // Try a cast to a bad type.\r\n        // NOTE: Type cannot be an int.\r\n        checkThrows<int>(a);\r\n        checkThrows<int&, int const&>(a);\r\n        checkThrows<Type*, Type const*>(a);\r\n        checkThrows<Type const*>(a);\r\n\r\n        Type::reset(); // NOTE: reset does not modify Type::count\r\n        // Check getting Type by value from a non-const lvalue any.\r\n        // This should cause the non-const copy constructor to be called.\r\n        {\r\n            Type t = std::any_cast<Type>(a);\r\n\r\n            assert(Type::count == 2);\r\n            assert(Type::copied == 1);\r\n            assert(Type::const_copied == 0);\r\n            assert(Type::non_const_copied == 1);\r\n            assert(Type::moved == 0);\r\n            assert(t.value == 42);\r\n        }\r\n        assert(Type::count == 1);\r\n        Type::reset();\r\n        // Check getting const Type by value from a non-const lvalue any.\r\n        // This should cause the const copy constructor to be called.\r\n        {\r\n            Type t = std::any_cast<Type const>(a);\r\n\r\n            assert(Type::count == 2);\r\n            assert(Type::copied == 1);\r\n            assert(Type::const_copied == 0);\r\n            assert(Type::non_const_copied == 1);\r\n            assert(Type::moved == 0);\r\n            assert(t.value == 42);\r\n        }\r\n        assert(Type::count == 1);\r\n        Type::reset();\r\n        // Check getting Type by value from a non-const lvalue any.\r\n        // This should cause the const copy constructor to be called.\r\n        {\r\n            Type t = std::any_cast<Type>(static_cast<const std::any&>(a));\r\n\r\n            assert(Type::count == 2);\r\n            assert(Type::copied == 1);\r\n            assert(Type::const_copied == 1);\r\n            assert(Type::non_const_copied == 0);\r\n            assert(Type::moved == 0);\r\n            assert(t.value == 42);\r\n        }\r\n        assert(Type::count == 1);\r\n        Type::reset();\r\n        // Check getting Type by value from a non-const rvalue any.\r\n        // This should cause the non-const copy constructor to be called.\r\n        {\r\n            Type t = std::any_cast<Type>(static_cast<std::any&&>(a));\r\n\r\n            assert(Type::count == 2);\r\n            assert(Type::moved == 1);\r\n            assert(Type::copied == 0);\r\n            assert(Type::const_copied == 0);\r\n            assert(Type::non_const_copied == 0);\r\n            assert(t.value == 42);\r\n            assert(std::any_cast<Type&>(a).value == 0);\r\n            std::any_cast<Type&>(a).value = 42; // reset the value\r\n        }\r\n        assert(Type::count == 1);\r\n        Type::reset();\r\n        // Check getting const Type by value from a non-const rvalue any.\r\n        // This should cause the const copy constructor to be called.\r\n        {\r\n            Type t = std::any_cast<Type const>(static_cast<std::any&&>(a));\r\n\r\n            assert(Type::count == 2);\r\n            assert(Type::copied == 0);\r\n            assert(Type::const_copied == 0);\r\n            assert(Type::non_const_copied == 0);\r\n            assert(Type::moved == 1);\r\n            assert(t.value == 42);\r\n            assert(std::any_cast<Type&>(a).value == 0);\r\n            std::any_cast<Type&>(a).value = 42; // reset the value\r\n        }\r\n        assert(Type::count == 1);\r\n        Type::reset();\r\n        // Check getting Type by value from a const rvalue any.\r\n        // This should cause the const copy constructor to be called.\r\n        {\r\n            Type t = std::any_cast<Type>(static_cast<const std::any&&>(a));\r\n\r\n            assert(Type::count == 2);\r\n            assert(Type::copied == 1);\r\n            assert(Type::const_copied == 1);\r\n            assert(Type::non_const_copied == 0);\r\n            assert(Type::moved == 0);\r\n            assert(t.value == 42);\r\n            assert(std::any_cast<Type&>(a).value == 42);\r\n        }\r\n        // Ensure we still only have 1 Type object alive.\r\n        assert(Type::count == 1);\r\n\r\n        // Check that the original object hasn't been changed.\r\n        assertContains<Type>(a, 42);\r\n    }\r\n    assert(Type::count == 0);\r\n}\r\n\r\nint run_test() {\r\n    test_cast_is_not_noexcept();\r\n    test_cast_return_type();\r\n    test_cast_empty();\r\n    test_cast_to_reference<small>();\r\n    test_cast_to_reference<large>();\r\n    test_cast_to_value<small>();\r\n    test_cast_to_value<large>();\r\n\r\n  return 0;\r\n}\r\n} // namespace nonmembers::cast::reference\r\n// -- END: test/std/utilities/any/any.nonmembers/any.cast/any_cast_reference.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/any/any.nonmembers/make_any.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <any>\r\n\r\n// template <class T, class ...Args> any make_any(Args&&...);\r\n// template <class T, class U, class ...Args>\r\n// any make_any(initializer_list<U>, Args&&...);\r\n\r\n#include <any>\r\n#include <cassert>\r\n\r\n#include \"any_helpers.h\"\r\n#include \"count_new.h\"\r\n#include \"test_macros.h\"\r\n\r\nnamespace nonmembers::make_any {\r\ntemplate <class Type>\r\nvoid test_make_any_type() {\r\n    // constructing from a small type should perform no allocations.\r\n    DisableAllocationGuard g(isSmallType<Type>()); ((void)g);\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    {\r\n        std::any a = std::make_any<Type>();\r\n\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 0);\r\n        assertContains<Type>(a, 0);\r\n    }\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    {\r\n        std::any a = std::make_any<Type>(101);\r\n\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 0);\r\n        assertContains<Type>(a, 101);\r\n    }\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n    {\r\n        std::any a = std::make_any<Type>(-1, 42, -1);\r\n\r\n        assert(Type::count == 1);\r\n        assert(Type::copied == 0);\r\n        assert(Type::moved == 0);\r\n        assertContains<Type>(a, 42);\r\n    }\r\n    assert(Type::count == 0);\r\n    Type::reset();\r\n}\r\n\r\ntemplate <class Type>\r\nvoid test_make_any_type_tracked() {\r\n    // constructing from a small type should perform no allocations.\r\n    DisableAllocationGuard g(isSmallType<Type>()); ((void)g);\r\n    {\r\n        std::any a = std::make_any<Type>();\r\n        assertArgsMatch<Type>(a);\r\n    }\r\n    {\r\n        std::any a = std::make_any<Type>(-1, 42, -1);\r\n        assertArgsMatch<Type, int, int, int>(a);\r\n    }\r\n    // initializer_list constructor tests\r\n    {\r\n        std::any a = std::make_any<Type>({-1, 42, -1});\r\n        assertArgsMatch<Type, std::initializer_list<int>>(a);\r\n    }\r\n    {\r\n        int x = 42;\r\n        std::any a  = std::make_any<Type>({-1, 42, -1}, x);\r\n        assertArgsMatch<Type, std::initializer_list<int>, int&>(a);\r\n    }\r\n}\r\n\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n\r\nstruct SmallThrows {\r\n  SmallThrows(int) { throw 42; }\r\n  SmallThrows(std::initializer_list<int>, int) { throw 42; }\r\n};\r\nstatic_assert(IsSmallObject<SmallThrows>::value, \"\");\r\n\r\nstruct LargeThrows {\r\n  LargeThrows(int) { throw 42; }\r\n  LargeThrows(std::initializer_list<int>, int) { throw 42; }\r\n  int data[sizeof(std::any)];\r\n};\r\nstatic_assert(!IsSmallObject<LargeThrows>::value, \"\");\r\n\r\ntemplate <class Type>\r\nvoid test_make_any_throws()\r\n{\r\n    {\r\n        try {\r\n            TEST_IGNORE_NODISCARD std::make_any<Type>(101);\r\n            assert(false);\r\n        } catch (int const&) {\r\n        }\r\n    }\r\n    {\r\n        try {\r\n            TEST_IGNORE_NODISCARD std::make_any<Type>({1, 2, 3}, 101);\r\n            assert(false);\r\n        } catch (int const&) {\r\n        }\r\n    }\r\n}\r\n\r\n#endif\r\n\r\nint run_test() {\r\n    test_make_any_type<small>();\r\n    test_make_any_type<large>();\r\n    test_make_any_type<small_throws_on_copy>();\r\n    test_make_any_type<large_throws_on_copy>();\r\n    test_make_any_type<throws_on_move>();\r\n    test_make_any_type_tracked<small_tracked_t>();\r\n    test_make_any_type_tracked<large_tracked_t>();\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    test_make_any_throws<SmallThrows>();\r\n    test_make_any_throws<LargeThrows>();\r\n\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace nonmembers::make_any\r\n// -- END: test/std/utilities/any/any.nonmembers/make_any.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/any/any.nonmembers/swap.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <any>\r\n\r\n// void swap(any &, any &) noexcept\r\n\r\n// swap(...) just wraps any::swap(...). That function is tested elsewhere.\r\n\r\n#include <any>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace nonmembers::swap_ {\r\nint run_test()\r\n{\r\n\r\n    { // test noexcept\r\n        std::any a;\r\n        static_assert(noexcept(swap(a, a)), \"swap(any&, any&) must be noexcept\");\r\n    }\r\n    {\r\n        std::any a1 = 1;\r\n        std::any a2 = 2;\r\n\r\n        swap(a1, a2);\r\n\r\n        assert(std::any_cast<int>(a1) == 2);\r\n        assert(std::any_cast<int>(a2) == 1);\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace nonmembers::swap_\r\n// -- END: test/std/utilities/any/any.nonmembers/swap.pass.cpp\r\n// LLVM SOURCES END\r\n// clang-format on\r\n\r\n#include <any>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <functional>\r\n#include <initializer_list>\r\n#include <string>\r\n#include <type_traits>\r\n#include <typeinfo>\r\n#include <utility>\r\n#include <vector>\r\n\r\n\r\nnamespace msvc {\r\n    using std::any;\r\n    using std::any_cast;\r\n    using std::bad_any_cast;\r\n\r\n    namespace ctor {\r\n        namespace in_place {\r\n            void run_test() {\r\n                struct S {\r\n                    S(std::initializer_list<int>&) {}\r\n                };\r\n\r\n                (void) std::make_any<S>({1, 2, 3});\r\n            }\r\n        } // namespace in_place\r\n\r\n        namespace value {\r\n            struct bad_new_type {\r\n                char large[42 * sizeof(any)];\r\n\r\n                static void* operator new(std::size_t); // undefined\r\n                static void operator delete(void*, std::size_t); // undefined\r\n            };\r\n\r\n            void run_test() {\r\n                any a{std::in_place_type<bad_new_type>};\r\n            }\r\n        } // namespace value\r\n    } // namespace ctor\r\n\r\n    namespace assign {\r\n        namespace emplace {\r\n            void run_test() {\r\n                struct S {\r\n                    S(std::initializer_list<int>&) {}\r\n                };\r\n\r\n                std::any{}.emplace<S>({1, 2, 3});\r\n            }\r\n        } // namespace emplace\r\n\r\n        namespace move {\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wself-move\"\r\n#endif // __clang__\r\n            void run_test() {\r\n                // test that self-move-assignment doesn't fail\r\n                {\r\n                    // empty\r\n                    any a;\r\n                    a = std::move(a);\r\n                    assertEmpty(a);\r\n\r\n                    a = std::make_any<any>();\r\n                    a = any_cast<any&&>(std::move(a)); // extract inner any\r\n                    assertEmpty(a);\r\n                }\r\n                {\r\n                    // small\r\n                    any a{small{42}};\r\n                    a = std::move(a);\r\n                    assertContains<small>(a, 42);\r\n\r\n                    a = std::make_any<any>(small{42});\r\n                    a = any_cast<any&&>(std::move(a)); // extract inner any\r\n                    assertContains<small>(a, 42);\r\n                }\r\n                {\r\n                    // large\r\n                    any a{large{42}};\r\n                    a = std::move(a);\r\n                    assertContains<large>(a, 42);\r\n\r\n                    a = std::make_any<any>(large{42});\r\n                    a = any_cast<any&&>(std::move(a)); // extract inner any\r\n                    assertContains<large>(a, 42);\r\n                }\r\n                {\r\n                    // trivial\r\n                    any a{int{42}};\r\n                    a = std::move(a);\r\n                    assertContains<int>(a, 42);\r\n\r\n                    a = std::make_any<any>(int{42});\r\n                    a = any_cast<any&&>(std::move(a)); // extract inner any\r\n                    assertContains<int>(a, 42);\r\n                }\r\n            }\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // __clang__\r\n        } // namespace move\r\n    } // namespace assign\r\n\r\n    namespace modifiers {\r\n        namespace swap_ {\r\n            void run_test() {\r\n                // test trivial self-swap\r\n                any a{42};\r\n                swap(a, a);\r\n                assertContains<int>(a, 42);\r\n            }\r\n        } // namespace swap_\r\n    } // namespace modifiers\r\n\r\n#ifdef _M_CEE // TRANSITION, VSO-1846195\r\n#pragma warning(push)\r\n#pragma warning(disable : 5267) // definition of implicit copy constructor for 'X' is deprecated\r\n                                // because it has a user-provided destructor\r\n#endif // ^^^ workaround ^^^\r\n    namespace overaligned {\r\n        template <std::size_t shift>\r\n        void test_one_alignment() {\r\n            constexpr std::size_t align = __STDCPP_DEFAULT_NEW_ALIGNMENT__ << (1 + shift);\r\n\r\n            struct aligned_type {\r\n                alignas(align) unsigned char space[align];\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1846195\r\n                aligned_type()                               = default;\r\n                aligned_type(const aligned_type&)            = default;\r\n                aligned_type& operator=(const aligned_type&) = default;\r\n#endif // ^^^ no workaround ^^^\r\n\r\n                ~aligned_type() noexcept {\r\n                    assert(reinterpret_cast<std::uintptr_t>(this) % align == 0);\r\n                }\r\n            };\r\n\r\n            globalMemCounter.reset();\r\n\r\n            constexpr std::size_t iterations = 256;\r\n\r\n            std::vector<std::any> data(iterations);\r\n\r\n            for (std::size_t i = 0; i < iterations; ++i) {\r\n                data[i] = aligned_type{};\r\n                assert(static_cast<std::size_t>(globalMemCounter.aligned_new_called) == i + 1);\r\n                assert(globalMemCounter.last_new_size == sizeof(aligned_type));\r\n                assert(globalMemCounter.last_new_align == alignof(aligned_type));\r\n            }\r\n\r\n            for (std::size_t i = 0; i < iterations; ++i) {\r\n                data[i].reset();\r\n                assert(static_cast<std::size_t>(globalMemCounter.aligned_delete_called) == i + 1);\r\n                assert(globalMemCounter.last_delete_align == alignof(aligned_type));\r\n            }\r\n        }\r\n\r\n        void run_test() {\r\n            test_one_alignment<0>();\r\n            test_one_alignment<1>();\r\n            test_one_alignment<2>();\r\n            test_one_alignment<3>();\r\n        }\r\n    } // namespace overaligned\r\n#ifdef _M_CEE // TRANSITION, VSO-1846195\r\n#pragma warning(pop)\r\n#endif // ^^^ workaround ^^^\r\n\r\n    namespace size_and_alignment {\r\n        void run_test() {\r\n            static_assert(alignof(std::type_info) >= 4, \"Can't steal two bits from type_info*\");\r\n            static_assert(\r\n                sizeof(any) == std::_Small_object_num_ptrs * sizeof(void*), \"any has unintended internal padding\");\r\n            static_assert(\r\n                alignof(any) >= alignof(std::max_align_t), \"any should be suitably aligned for any fundamental type\");\r\n            static_assert(std::_Any_is_small<std::string>, \"any should hold a string without allocating\");\r\n        }\r\n    } // namespace size_and_alignment\r\n\r\n    namespace small_type {\r\n        constexpr std::size_t BufferSize      = sizeof(std::any) - sizeof(void*);\r\n        constexpr std::size_t BufferAlignment = alignof(std::any);\r\n\r\n        [[nodiscard]] constexpr bool is_pow2(std::size_t n) noexcept {\r\n            return n != 0 && (n & (n - 1)) == 0;\r\n        }\r\n\r\n        template <std::size_t Align>\r\n        [[nodiscard]] constexpr std::size_t align_to(std::size_t n) noexcept {\r\n            static_assert(is_pow2(Align), \"Alignment must be a power of two.\");\r\n            return n & ~(Align - 1);\r\n        }\r\n\r\n        template <std::size_t Size, std::size_t Align>\r\n        struct SizeAndAlignType {\r\n            alignas(Align) unsigned char space[align_to<Align>(Size + Align - 1)];\r\n        };\r\n\r\n        template <class T>\r\n        constexpr bool IsBig = !(std::_Any_is_small<T> || std::_Any_is_trivial<T>);\r\n\r\n        void run_test() {\r\n            static_assert(!IsBig<small>);\r\n            static_assert(!IsBig<void*>);\r\n            static_assert(IsBig<large>);\r\n            {\r\n                // Verify that a type that meets the size requirement *exactly* and has a lesser alignment requirement\r\n                // is considered small.\r\n                using T = SizeAndAlignType<BufferSize, 1>;\r\n                static_assert(sizeof(T) == BufferSize);\r\n                static_assert(alignof(T) < BufferAlignment);\r\n                static_assert(!IsBig<T>);\r\n            }\r\n            {\r\n                // Verify that a type that meets the alignment requirement *exactly* and has a lesser size is considered\r\n                // small.\r\n                using T = SizeAndAlignType<BufferAlignment, BufferAlignment>;\r\n                static_assert(sizeof(T) <= BufferSize);\r\n                static_assert(alignof(T) == BufferAlignment);\r\n                static_assert(!IsBig<T>);\r\n            }\r\n            {\r\n                // Verify that a type that meets the size and alignment requirements *exactly* is considered small.\r\n                using T = SizeAndAlignType<align_to<BufferAlignment>(BufferSize), BufferAlignment>;\r\n                static_assert(sizeof(T) <= BufferSize);\r\n                static_assert(alignof(T) == BufferAlignment);\r\n                static_assert(!IsBig<T>);\r\n            }\r\n            {\r\n                // Verify that a type that meets the alignment requirements but is over-sized is not considered small.\r\n                using T = SizeAndAlignType<BufferSize + 1, 1>;\r\n                static_assert(sizeof(T) > BufferSize);\r\n                static_assert(alignof(T) < BufferAlignment);\r\n                static_assert(IsBig<T>);\r\n            }\r\n            {\r\n                // Verify that a type that meets the size requirements but is over-aligned is not considered small.\r\n                using T = SizeAndAlignType<BufferAlignment * 2, BufferAlignment * 2>;\r\n                static_assert(alignof(T) >= BufferSize || sizeof(T) < BufferSize);\r\n                static_assert(alignof(T) > BufferAlignment);\r\n                static_assert(IsBig<T>);\r\n            }\r\n            {\r\n                // Verify that a type that exceeds both the size and alignment requirements is not considered small.\r\n                using T = SizeAndAlignType<BufferSize + 1, BufferAlignment * 2>;\r\n                static_assert(sizeof(T) > BufferSize);\r\n                static_assert(alignof(T) > BufferAlignment);\r\n                static_assert(IsBig<T>);\r\n            }\r\n        }\r\n    } // namespace small_type\r\n\r\n    namespace trivial {\r\n        template <class T>\r\n        struct wrap {\r\n            static_assert(\r\n                IsSmallObject<T>::value && std::is_trivially_copyable_v<T>, \"wrap instantiated with non-trivial type\");\r\n\r\n            T value{};\r\n\r\n            constexpr wrap() = default;\r\n            wrap(T t) : value(std::move(t)) {}\r\n            template <class U, std::enable_if_t<std::is_convertible_v<U, T>, int> = 0>\r\n            wrap(U&& u) : value(std::forward<U>(u)) {}\r\n\r\n            friend bool operator==(const wrap& x, const wrap& y) {\r\n                return x.value == y.value;\r\n            }\r\n            friend bool operator!=(const wrap& x, const wrap& y) {\r\n                return !(x == y);\r\n            }\r\n        };\r\n\r\n        template <class Type>\r\n        void test_copy() {\r\n            any a((Type(42)));\r\n\r\n            any a2(a);\r\n\r\n            assertContains<Type>(a, 42);\r\n            assertContains<Type>(a2, 42);\r\n\r\n            // Modify a and check that a2 is unchanged\r\n            modifyValue<Type>(a, -1);\r\n            assertContains<Type>(a, -1);\r\n            assertContains<Type>(a2, 42);\r\n\r\n            // modify a2 and check that a is unchanged\r\n            modifyValue<Type>(a2, 999);\r\n            assertContains<Type>(a, -1);\r\n            assertContains<Type>(a2, 999);\r\n\r\n            // clear a and check that a2 is unchanged\r\n            a.reset();\r\n            assertEmpty(a);\r\n            assertContains<Type>(a2, 999);\r\n        }\r\n\r\n        template <class Type>\r\n        void test_move() {\r\n            any a((Type(42)));\r\n            any a2(std::move(a));\r\n\r\n            assertContains<Type>(a2, 42);\r\n            assertContains<Type>(a, 42);\r\n        }\r\n\r\n        template <class Type>\r\n        void test_copy_move_value() {\r\n            {\r\n                Type t(42);\r\n                any a(t);\r\n                assertContains<Type>(a, 42);\r\n            }\r\n            {\r\n                Type t(42);\r\n                any a(std::move(t));\r\n                assertContains<Type>(a, 42);\r\n            }\r\n        }\r\n\r\n        template <class Type>\r\n        void test_in_place_type() {\r\n            {\r\n                any a(std::in_place_type<Type>);\r\n                assertContains<Type>(a, 0);\r\n            }\r\n            {\r\n                any a(std::in_place_type<Type>, 101);\r\n                assertContains<Type>(a, 101);\r\n            }\r\n        }\r\n\r\n        struct trivial_tracked_t {\r\n            trivial_tracked_t() : arg_types(&makeArgumentID<>()) {}\r\n            template <class... Args>\r\n            explicit trivial_tracked_t(Args&&...) : arg_types(&makeArgumentID<Args...>()) {}\r\n            template <class... Args>\r\n            explicit trivial_tracked_t(std::initializer_list<int>, Args&&...)\r\n                : arg_types(&makeArgumentID<std::initializer_list<int>, Args...>()) {}\r\n\r\n            TypeID const* arg_types;\r\n        };\r\n        static_assert(IsSmallObject<trivial_tracked_t>::value, \"must be small\");\r\n        static_assert(std::is_trivially_copyable_v<trivial_tracked_t>, \"must be trivially copyable\");\r\n\r\n        template <class Type>\r\n        void test_in_place_type_tracked() {\r\n            {\r\n                any a(std::in_place_type<Type>);\r\n                assertArgsMatch<Type>(a);\r\n            }\r\n            {\r\n                any a(std::in_place_type<Type>, -1, 42, -1);\r\n                assertArgsMatch<Type, int, int, int>(a);\r\n            }\r\n            // initializer_list constructor tests\r\n            {\r\n                any a(std::in_place_type<Type>, {-1, 42, -1});\r\n                assertArgsMatch<Type, std::initializer_list<int>>(a);\r\n            }\r\n            {\r\n                int x = 42;\r\n                any a(std::in_place_type<Type>, {-1, 42, -1}, x);\r\n                assertArgsMatch<Type, std::initializer_list<int>, int&>(a);\r\n            }\r\n        }\r\n\r\n        template <class LHS, class RHS>\r\n        void test_copy_assign() {\r\n            any lhs(LHS(1));\r\n            any const rhs(RHS(2));\r\n\r\n            lhs = rhs;\r\n\r\n            assertContains<RHS>(lhs, 2);\r\n            assertContains<RHS>(rhs, 2);\r\n        }\r\n\r\n        template <class LHS>\r\n        void test_copy_assign_empty() {\r\n            {\r\n                any lhs;\r\n                any const rhs(LHS(42));\r\n\r\n                lhs = rhs;\r\n\r\n                assertContains<LHS>(lhs, 42);\r\n                assertContains<LHS>(rhs, 42);\r\n            }\r\n            {\r\n                any lhs(LHS(1));\r\n                any const rhs;\r\n\r\n                lhs = rhs;\r\n\r\n                assertEmpty<LHS>(lhs);\r\n                assertEmpty(rhs);\r\n            }\r\n        }\r\n\r\n        void test_copy_assign_self() {\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wself-assign-overloaded\"\r\n#endif // __clang__\r\n\r\n            // trivial\r\n            any a(int(1));\r\n\r\n            a = a;\r\n\r\n            assertContains<int>(a, 1);\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // __clang__\r\n        }\r\n\r\n        template <class LHS, class RHS>\r\n        void test_move_assign() {\r\n            LHS const s1(1);\r\n            any a(s1);\r\n            RHS const s2(2);\r\n            any a2(s2);\r\n\r\n            a = std::move(a2);\r\n\r\n            assertContains<RHS>(a, 2);\r\n            assertContains<RHS>(a2, 2);\r\n        }\r\n\r\n        template <class LHS>\r\n        void test_move_assign_empty() {\r\n            {\r\n                any a;\r\n                any a2((LHS(1)));\r\n\r\n                a = std::move(a2);\r\n\r\n                assertContains<LHS>(a, 1);\r\n                assertContains<LHS>(a2, 1);\r\n            }\r\n            {\r\n                any a((LHS(1)));\r\n                any a2;\r\n\r\n                a = std::move(a2);\r\n\r\n                assertEmpty<LHS>(a);\r\n                assertEmpty(a2);\r\n            }\r\n        }\r\n\r\n        template <class LHS, class RHS>\r\n        void test_assign_value() {\r\n            {\r\n                any lhs(LHS(1));\r\n                any const rhs(RHS(2));\r\n\r\n                lhs = rhs;\r\n\r\n                assertContains<RHS>(lhs, 2);\r\n                assertContains<RHS>(rhs, 2);\r\n            }\r\n            {\r\n                any lhs(LHS(1));\r\n                any rhs(RHS(2));\r\n\r\n                lhs = std::move(rhs);\r\n\r\n                assertContains<RHS>(lhs, 2);\r\n                assertContains<RHS>(rhs, 2);\r\n            }\r\n        }\r\n\r\n        template <class RHS>\r\n        void test_assign_value_empty() {\r\n            {\r\n                any lhs;\r\n                RHS rhs(42);\r\n\r\n                lhs = rhs;\r\n\r\n                assertContains<RHS>(lhs, 42);\r\n            }\r\n            {\r\n                any lhs;\r\n                RHS rhs(42);\r\n\r\n                lhs = std::move(rhs);\r\n\r\n                assertContains<RHS>(lhs, 42);\r\n            }\r\n        }\r\n\r\n        struct Tracked {\r\n            static int count;\r\n            Tracked() {\r\n                ++count;\r\n            }\r\n            Tracked(Tracked const&) noexcept {\r\n                ++count;\r\n            }\r\n            Tracked& operator=(Tracked const&) = default;\r\n            ~Tracked() {\r\n                --count;\r\n            }\r\n        };\r\n        int Tracked::count = 0;\r\n\r\n        template <class Type>\r\n        void test_emplace_type() {\r\n            assert(Tracked::count == 0);\r\n            {\r\n                any a(std::in_place_type<Tracked>);\r\n                assert(Tracked::count == 1);\r\n\r\n                a.emplace<Type>();\r\n\r\n                assert(Tracked::count == 0);\r\n                assertContains<Type>(a, 0);\r\n            }\r\n            {\r\n                any a(std::in_place_type<Tracked>);\r\n                assert(Tracked::count == 1);\r\n\r\n                a.emplace<Type>(101);\r\n\r\n                assert(Tracked::count == 0);\r\n                assertContains<Type>(a, 101);\r\n            }\r\n        }\r\n\r\n        template <class Type>\r\n        void test_emplace_type_tracked() {\r\n            {\r\n                any a(std::in_place_type<Tracked>);\r\n                assert(Tracked::count == 1);\r\n                a.emplace<Type>();\r\n                assert(Tracked::count == 0);\r\n                assertArgsMatch<Type>(a);\r\n            }\r\n            // initializer_list constructor tests\r\n            {\r\n                any a(std::in_place_type<Tracked>);\r\n                assert(Tracked::count == 1);\r\n                a.emplace<Type>({-1, 42, -1});\r\n                assert(Tracked::count == 0);\r\n                assertArgsMatch<Type, std::initializer_list<int>>(a);\r\n            }\r\n        }\r\n\r\n        void test_reset() {\r\n            any a((int(1)));\r\n            assertContains<int>(a, 1);\r\n            a.reset();\r\n            assertEmpty<int>(a);\r\n        }\r\n\r\n        template <class LHS, class RHS>\r\n        void test_swap() {\r\n            any a1(LHS{1});\r\n            any a2(RHS{2});\r\n\r\n            a1.swap(a2);\r\n\r\n            assertContains<RHS>(a1, 2);\r\n            assertContains<LHS>(a2, 1);\r\n        }\r\n\r\n        template <class Tp>\r\n        void test_swap_empty() {\r\n            {\r\n                any a1((Tp(1)));\r\n                any a2;\r\n\r\n                a1.swap(a2);\r\n\r\n                assertContains<Tp>(a2, 1);\r\n                assertEmpty(a1);\r\n            }\r\n            {\r\n                any a1((Tp(1)));\r\n                any a2;\r\n\r\n                a2.swap(a1);\r\n\r\n                assertContains<Tp>(a2, 1);\r\n                assertEmpty(a1);\r\n            }\r\n        }\r\n\r\n        void test_has_value() {\r\n            int s(1);\r\n            any a(s);\r\n            assert(a.has_value());\r\n\r\n            a.reset();\r\n            assert(!a.has_value());\r\n\r\n            a = s;\r\n            assert(a.has_value());\r\n        }\r\n\r\n        template <class Tp>\r\n        void test_type() {\r\n            Tp const s(1);\r\n            any const a(s);\r\n            assert(a.type() == typeid(Tp));\r\n        }\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4242 4244) // 'initializing': conversion from '_Ty' to 'T', possible loss of data\r\n        void run_test() {\r\n            globalMemCounter.disable_allocations = true;\r\n\r\n            test_copy<wrap<int>>();\r\n            test_copy<wrap<short>>();\r\n            test_move<wrap<int>>();\r\n            test_move<wrap<short>>();\r\n            test_copy_move_value<wrap<int>>();\r\n            test_copy_move_value<wrap<short>>();\r\n            test_in_place_type<wrap<int>>();\r\n            test_in_place_type<wrap<short>>();\r\n            test_in_place_type_tracked<trivial_tracked_t>();\r\n\r\n            test_copy_assign<wrap<int>, wrap<int>>();\r\n            test_copy_assign<wrap<int>, wrap<short>>();\r\n            test_copy_assign<wrap<short>, wrap<int>>();\r\n            test_copy_assign_empty<wrap<int>>();\r\n            test_copy_assign_empty<wrap<short>>();\r\n            test_copy_assign_self();\r\n            test_move_assign<wrap<int>, wrap<int>>();\r\n            test_move_assign<wrap<int>, wrap<short>>();\r\n            test_move_assign<wrap<short>, wrap<int>>();\r\n            test_move_assign_empty<wrap<int>>();\r\n            test_move_assign_empty<wrap<short>>();\r\n            test_assign_value<wrap<int>, wrap<int>>();\r\n            test_assign_value<wrap<int>, wrap<short>>();\r\n            test_assign_value<wrap<short>, wrap<int>>();\r\n            test_assign_value_empty<wrap<int>>();\r\n            test_assign_value_empty<wrap<short>>();\r\n\r\n            test_emplace_type<wrap<int>>();\r\n            test_emplace_type<wrap<short>>();\r\n            test_emplace_type_tracked<trivial_tracked_t>();\r\n            test_reset();\r\n\r\n            test_swap<wrap<int>, wrap<int>>();\r\n            test_swap<wrap<int>, wrap<short>>();\r\n            test_swap<wrap<short>, wrap<int>>();\r\n            test_swap<wrap<int>, small>();\r\n            test_swap<small, wrap<int>>();\r\n\r\n            globalMemCounter.disable_allocations = false;\r\n            test_swap<wrap<int>, large>();\r\n            test_swap<large, wrap<int>>();\r\n            globalMemCounter.disable_allocations = true;\r\n\r\n            test_swap_empty<wrap<int>>();\r\n            test_swap_empty<wrap<short>>();\r\n\r\n            test_has_value();\r\n            test_type<wrap<int>>();\r\n            test_type<wrap<short>>();\r\n        }\r\n#pragma warning(pop)\r\n    } // namespace trivial\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n    namespace gh_140_robust_against_adl {\r\n        struct incomplete;\r\n\r\n        template <class T>\r\n        struct wrapper {\r\n            T t;\r\n        };\r\n\r\n        template <class Type>\r\n        void test_for() {\r\n            any a;\r\n            a = any{Type()};\r\n            a = any{std::in_place_type<Type>};\r\n            a = Type();\r\n            a = std::make_any<Type>();\r\n            a.emplace<Type>();\r\n            assert(any_cast<Type>(&a) != nullptr);\r\n        }\r\n\r\n        void run_test() {\r\n            using _trivial = wrapper<incomplete>*;\r\n            using _small   = std::pair<_trivial, small>;\r\n            using _large   = std::pair<_trivial, large>;\r\n\r\n            globalMemCounter.disable_allocations = true;\r\n            test_for<_trivial>();\r\n            test_for<_small>();\r\n            globalMemCounter.disable_allocations = false;\r\n            test_for<_large>();\r\n        }\r\n    } // namespace gh_140_robust_against_adl\r\n#endif // _M_CEE\r\n} // namespace msvc\r\n\r\nint main() {\r\n    assign::copy::run_test();\r\n    assign::move::run_test();\r\n    assign::value::run_test();\r\n\r\n    ctor::copy::run_test();\r\n    ctor::default_::run_test();\r\n    ctor::in_place_type::run_test();\r\n    ctor::move::run_test();\r\n    ctor::value::run_test();\r\n\r\n    modifiers::emplace::run_test();\r\n    modifiers::reset::run_test();\r\n    modifiers::swap_::run_test();\r\n\r\n    observers::has_value::run_test();\r\n    observers::type::run_test();\r\n\r\n    nonmembers::cast::pointer::run_test();\r\n    nonmembers::cast::reference::run_test();\r\n    nonmembers::make_any::run_test();\r\n    nonmembers::swap_::run_test();\r\n\r\n    msvc::ctor::in_place::run_test();\r\n    msvc::ctor::value::run_test();\r\n    msvc::assign::emplace::run_test();\r\n    msvc::assign::move::run_test();\r\n    msvc::modifiers::swap_::run_test();\r\n    msvc::overaligned::run_test();\r\n    msvc::size_and_alignment::run_test();\r\n    msvc::small_type::run_test();\r\n    msvc::trivial::run_test();\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n    msvc::gh_140_robust_against_adl::run_test();\r\n#endif // _M_CEE\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0220R1_optional/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0220R1_optional/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Organization of this file:\r\n// * a short header (including this comment)\r\n// * `// LLVM SOURCES BEGIN`\r\n// * The contents of several libc++ test files, each delimited by `// -- BEGIN/END: <filename>`\r\n//   comments. These contents have been modified to merge many tests into one by:\r\n//     (1) changing `int main(int, char**)` to `int run_test()`, and\r\n//     (2) wrapping everything other than comments and includes in a unique namespace per-file, using namespace nesting\r\n//         to reflect the hierarchical structure of the upstream sources.\r\n// * `// LLVM SOURCES END`\r\n// * Several more MSVC-STL-specific test cases laid out in a nested namespace structure within `msvc`.\r\n// * The `main` function, which simply calls each of the `run_test` functions in both the adapted libc++ test cases and\r\n//   the MSVC-specific test cases.\r\n//\r\n// The LLVM sources are updated manually:\r\n// 1. Navigate a bash prompt to `llvm-project/libcxx`.\r\n// 2. Redirect the output of:\r\n//      ../../tools/scripts/transform_llvm.sh test/std/utilities/utility/utility.inplace test/std/utilities/optional\r\n//    into a file.\r\n// 3. Replicate the namespace structure from here into that file, use its content to replace everything between the\r\n//    \"LLVM SOURCES BEGIN\"/\"END\" delimiters, and ensure that `main` properly calls each of the `run_test` functions.\r\n// 4. Fix the specialization of std::hash by closing/reopening namespaces and qualifying types.\r\n// 5. Restore the TRANSITION-commented workarounds.\r\n// 6. Restore the _HAS_CXX20 and _HAS_CXX23 guards.\r\n//\r\n// Yes, this is an awkward hand process; notably the required headers can change without notice. We should investigate\r\n// running the libc++ tests directly in all of our configurations so we needn't replicate this subset of files.\r\n\r\n#define _LIBCXX_IN_DEVCRT\r\n#include <msvc_stdlib_force_include.h> // Must precede any other libc++ headers\r\n#include <stdlib.h>\r\n\r\n// clang-format off: avoid diverging from external code\r\n// LLVM SOURCES BEGIN\r\n// -- BEGIN: test/std/utilities/utility/utility.inplace/inplace.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <utility>\r\n\r\n// struct in_place_t {\r\n//   explicit in_place_t() = default;\r\n// };\r\n// inline constexpr in_place_t in_place{};\r\n\r\n// template <class T>\r\n//   struct in_place_type_t {\r\n//     explicit in_place_type_t() = default;\r\n//   };\r\n// template <class T>\r\n//   inline constexpr in_place_type_t<T> in_place_type{};\r\n\r\n// template <size_t I>\r\n//   struct in_place_index_t {\r\n//     explicit in_place_index_t() = default;\r\n//   };\r\n// template <size_t I>\r\n//   inline constexpr in_place_index_t<I> in_place_index{};\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nnamespace utility::in_place {\r\ntemplate <class Tp, class Up>\r\nconstexpr bool check_tag(Up) {\r\n    return std::is_same<Tp, std::decay_t<Tp>>::value\r\n        && std::is_same<Tp, Up>::value;\r\n}\r\n\r\nint run_test() {\r\n    // test in_place_t\r\n    {\r\n        using T = std::in_place_t;\r\n        static_assert(check_tag<T>(std::in_place));\r\n    }\r\n    // test in_place_type_t\r\n    {\r\n        using T1 = std::in_place_type_t<void>;\r\n        using T2 = std::in_place_type_t<int>;\r\n        using T3 = std::in_place_type_t<const int>;\r\n        static_assert(!std::is_same<T1, T2>::value && !std::is_same<T1, T3>::value);\r\n        static_assert(!std::is_same<T2, T3>::value);\r\n        static_assert(check_tag<T1>(std::in_place_type<void>));\r\n        static_assert(check_tag<T2>(std::in_place_type<int>));\r\n        static_assert(check_tag<T3>(std::in_place_type<const int>));\r\n    }\r\n    // test in_place_index_t\r\n    {\r\n        using T1 = std::in_place_index_t<0>;\r\n        using T2 = std::in_place_index_t<1>;\r\n        using T3 = std::in_place_index_t<static_cast<std::size_t>(-1)>;\r\n        static_assert(!std::is_same<T1, T2>::value && !std::is_same<T1, T3>::value);\r\n        static_assert(!std::is_same<T2, T3>::value);\r\n        static_assert(check_tag<T1>(std::in_place_index<0>));\r\n        static_assert(check_tag<T2>(std::in_place_index<1>));\r\n        static_assert(check_tag<T3>(std::in_place_index<static_cast<std::size_t>(-1)>));\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace utility::in_place\r\n// -- END: test/std/utilities/utility/utility.inplace/inplace.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/iterator_concept_conformance.compile.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// optional\r\n\r\n#include <optional>\r\n\r\n#include <iterator>\r\n\r\n#if _HAS_CXX20\r\nstatic_assert(!std::indirectly_readable<std::optional<int> >);\r\nstatic_assert(!std::indirectly_writable<std::optional<int>, int>);\r\nstatic_assert(!std::weakly_incrementable<std::optional<int> >);\r\nstatic_assert(!std::indirectly_movable<std::optional<int>, std::optional<int>>);\r\nstatic_assert(!std::indirectly_movable_storable<std::optional<int>, std::optional<int>>);\r\nstatic_assert(!std::indirectly_copyable<std::optional<int>, std::optional<int>>);\r\nstatic_assert(!std::indirectly_copyable_storable<std::optional<int>, std::optional<int>>);\r\n#endif // ^^^ _HAS_CXX20 ^^^\r\n// -- END: test/std/utilities/optional/iterator_concept_conformance.compile.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.bad_optional_access/default.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n\r\n// class bad_optional_access is default constructible\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace bad_optional_access::default_ {\r\nint run_test()\r\n{\r\n    using std::bad_optional_access;\r\n    bad_optional_access ex;\r\n\r\n  return 0;\r\n}\r\n} // namespace bad_optional_access::default_\r\n// -- END: test/std/utilities/optional/optional.bad_optional_access/default.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.bad_optional_access/derive.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n\r\n// class bad_optional_access : public exception\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace bad_optional_access::derive {\r\nint run_test()\r\n{\r\n    using std::bad_optional_access;\r\n\r\n    static_assert(std::is_base_of<std::exception, bad_optional_access>::value, \"\");\r\n    static_assert(std::is_convertible<bad_optional_access*, std::exception*>::value, \"\");\r\n\r\n  return 0;\r\n}\r\n} // namespace bad_optional_access::derive\r\n// -- END: test/std/utilities/optional/optional.bad_optional_access/derive.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.comp_with_t/compare.three_way.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n\r\n// [optional.comp.with.t], comparison with T\r\n\r\n// template<class T, class U>\r\n//     requires (!is-derived-from-optional<U>) && three_way_comparable_with<T, U>\r\n//   constexpr compare_three_way_result_t<T, U>\r\n//     operator<=>(const optional<T>&, const U&);\r\n\r\n#include <cassert>\r\n#include <compare>\r\n#include <optional>\r\n\r\n#include \"test_comparisons.h\"\r\n\r\nnamespace comp_with_t::three_way {\r\n#if _HAS_CXX20\r\nstruct SomeInt {\r\n  int value_;\r\n\r\n  constexpr explicit SomeInt(int value = 0) : value_(value) {}\r\n\r\n  auto operator<=>(const SomeInt&) const = default;\r\n};\r\n\r\ntemplate <class T, class U>\r\nconcept HasSpaceship = requires(T t, U u) { t <=> u; };\r\n\r\n// SFINAE tests.\r\n\r\nstatic_assert(std::three_way_comparable_with<std::optional<int>, std::optional<int>>);\r\nstatic_assert(HasSpaceship<std::optional<int>, std::optional<int>>);\r\n\r\nstatic_assert(std::three_way_comparable_with<std::optional<SomeInt>, std::optional<SomeInt>>);\r\nstatic_assert(HasSpaceship<std::optional<SomeInt>, std::optional<SomeInt>>);\r\n\r\nstatic_assert(!HasSpaceship<std::optional<int>, std::optional<SomeInt>>);\r\n\r\n// Runtime and static tests.\r\n\r\nconstexpr void test_custom_integral() {\r\n  {\r\n    SomeInt t{3};\r\n    std::optional<SomeInt> op{3};\r\n    assert((t <=> op) == std::strong_ordering::equal);\r\n    assert(testOrder(t, op, std::strong_ordering::equal));\r\n  }\r\n  {\r\n    SomeInt t{2};\r\n    std::optional<SomeInt> op{3};\r\n    assert((t <=> op) == std::strong_ordering::less);\r\n    assert(testOrder(t, op, std::strong_ordering::less));\r\n  }\r\n  {\r\n    SomeInt t{3};\r\n    std::optional<SomeInt> op{2};\r\n    assert((t <=> op) == std::strong_ordering::greater);\r\n    assert(testOrder(t, op, std::strong_ordering::greater));\r\n  }\r\n}\r\n\r\nconstexpr void test_int() {\r\n  {\r\n    int t{3};\r\n    std::optional<int> op{3};\r\n    assert((t <=> op) == std::strong_ordering::equal);\r\n    assert(testOrder(t, op, std::strong_ordering::equal));\r\n  }\r\n  {\r\n    int t{2};\r\n    std::optional<int> op{3};\r\n    assert((t <=> op) == std::strong_ordering::less);\r\n    assert(testOrder(t, op, std::strong_ordering::less));\r\n  }\r\n  {\r\n    int t{3};\r\n    std::optional<int> op{2};\r\n    assert((t <=> op) == std::strong_ordering::greater);\r\n    assert(testOrder(t, op, std::strong_ordering::greater));\r\n  }\r\n}\r\n\r\nconstexpr bool test() {\r\n  test_custom_integral();\r\n  test_int();\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  assert(test());\r\n  static_assert(test());\r\n  return 0;\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\nint run_test() {\r\n    return 0;\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n} // namespace comp_with_t::three_way\r\n// -- END: test/std/utilities/optional/optional.comp_with_t/compare.three_way.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.comp_with_t/equal.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T, class U> constexpr bool operator==(const optional<T>& x, const U& v);\r\n// template <class T, class U> constexpr bool operator==(const U& v, const optional<T>& x);\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace comp_with_t::equal {\r\nusing std::optional;\r\n\r\nstruct X {\r\n  int i_;\r\n\r\n  constexpr X(int i) : i_(i) {}\r\n};\r\n\r\nconstexpr bool operator==(const X& lhs, const X& rhs) {\r\n  return lhs.i_ == rhs.i_;\r\n}\r\n\r\nint run_test() {\r\n  {\r\n    typedef X T;\r\n    typedef optional<T> O;\r\n\r\n    constexpr T val(2);\r\n    constexpr O o1;      // disengaged\r\n    constexpr O o2{1};   // engaged\r\n    constexpr O o3{val}; // engaged\r\n\r\n    static_assert(!(o1 == T(1)), \"\");\r\n    static_assert((o2 == T(1)), \"\");\r\n    static_assert(!(o3 == T(1)), \"\");\r\n    static_assert((o3 == T(2)), \"\");\r\n    static_assert((o3 == val), \"\");\r\n\r\n    static_assert(!(T(1) == o1), \"\");\r\n    static_assert((T(1) == o2), \"\");\r\n    static_assert(!(T(1) == o3), \"\");\r\n    static_assert((T(2) == o3), \"\");\r\n    static_assert((val == o3), \"\");\r\n  }\r\n  {\r\n    using O = optional<int>;\r\n    constexpr O o1(42);\r\n    static_assert(o1 == 42l, \"\");\r\n    static_assert(!(101l == o1), \"\");\r\n  }\r\n  {\r\n    using O = optional<const int>;\r\n    constexpr O o1(42);\r\n    static_assert(o1 == 42, \"\");\r\n    static_assert(!(101 == o1), \"\");\r\n  }\r\n\r\n  return 0;\r\n}\r\n} // namespace comp_with_t::equal\r\n// -- END: test/std/utilities/optional/optional.comp_with_t/equal.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.comp_with_t/greater.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T, class U> constexpr bool operator>(const optional<T>& x, const U& v);\r\n// template <class T, class U> constexpr bool operator>(const U& v, const optional<T>& x);\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace comp_with_t::greater_than {\r\nusing std::optional;\r\n\r\nstruct X {\r\n  int i_;\r\n\r\n  constexpr X(int i) : i_(i) {}\r\n};\r\n\r\nconstexpr bool operator>(const X& lhs, const X& rhs) { return lhs.i_ > rhs.i_; }\r\n\r\nint run_test() {\r\n  {\r\n    typedef X T;\r\n    typedef optional<T> O;\r\n\r\n    constexpr T val(2);\r\n    constexpr O o1;      // disengaged\r\n    constexpr O o2{1};   // engaged\r\n    constexpr O o3{val}; // engaged\r\n\r\n    static_assert(!(o1 > T(1)), \"\");\r\n    static_assert(!(o2 > T(1)), \"\"); // equal\r\n    static_assert((o3 > T(1)), \"\");\r\n    static_assert(!(o2 > val), \"\");\r\n    static_assert(!(o3 > val), \"\"); // equal\r\n    static_assert(!(o3 > T(3)), \"\");\r\n\r\n    static_assert((T(1) > o1), \"\");\r\n    static_assert(!(T(1) > o2), \"\"); // equal\r\n    static_assert(!(T(1) > o3), \"\");\r\n    static_assert((val > o2), \"\");\r\n    static_assert(!(val > o3), \"\"); // equal\r\n    static_assert((T(3) > o3), \"\");\r\n  }\r\n  {\r\n    using O = optional<int>;\r\n    constexpr O o1(42);\r\n    static_assert(o1 > 11l, \"\");\r\n    static_assert(!(42l > o1), \"\");\r\n  }\r\n  {\r\n    using O = optional<const int>;\r\n    constexpr O o1(42);\r\n    static_assert(o1 > 11, \"\");\r\n    static_assert(!(42 > o1), \"\");\r\n  }\r\n\r\n  return 0;\r\n}\r\n} // namespace comp_with_t::greater_than\r\n// -- END: test/std/utilities/optional/optional.comp_with_t/greater.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.comp_with_t/greater_equal.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T, class U> constexpr bool operator>=(const optional<T>& x, const U& v);\r\n// template <class T, class U> constexpr bool operator>=(const U& v, const optional<T>& x);\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace comp_with_t::greater_equal {\r\nusing std::optional;\r\n\r\nstruct X {\r\n  int i_;\r\n\r\n  constexpr X(int i) : i_(i) {}\r\n};\r\n\r\nconstexpr bool operator>=(const X& lhs, const X& rhs) {\r\n  return lhs.i_ >= rhs.i_;\r\n}\r\n\r\nint run_test() {\r\n  {\r\n    typedef X T;\r\n    typedef optional<T> O;\r\n\r\n    constexpr T val(2);\r\n    constexpr O o1;      // disengaged\r\n    constexpr O o2{1};   // engaged\r\n    constexpr O o3{val}; // engaged\r\n\r\n    static_assert(!(o1 >= T(1)), \"\");\r\n    static_assert((o2 >= T(1)), \"\"); // equal\r\n    static_assert((o3 >= T(1)), \"\");\r\n    static_assert(!(o2 >= val), \"\");\r\n    static_assert((o3 >= val), \"\"); // equal\r\n    static_assert(!(o3 >= T(3)), \"\");\r\n\r\n    static_assert((T(1) >= o1), \"\");\r\n    static_assert((T(1) >= o2), \"\"); // equal\r\n    static_assert(!(T(1) >= o3), \"\");\r\n    static_assert((val >= o2), \"\");\r\n    static_assert((val >= o3), \"\"); // equal\r\n    static_assert((T(3) >= o3), \"\");\r\n  }\r\n  {\r\n    using O = optional<int>;\r\n    constexpr O o1(42);\r\n    static_assert(o1 >= 42l, \"\");\r\n    static_assert(!(11l >= o1), \"\");\r\n  }\r\n  {\r\n    using O = optional<const int>;\r\n    constexpr O o1(42);\r\n    static_assert(o1 >= 42, \"\");\r\n    static_assert(!(11 >= o1), \"\");\r\n  }\r\n\r\n  return 0;\r\n}\r\n} // namespace comp_with_t::greater_equal\r\n// -- END: test/std/utilities/optional/optional.comp_with_t/greater_equal.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.comp_with_t/less_equal.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T, class U> constexpr bool operator<=(const optional<T>& x, const U& v);\r\n// template <class T, class U> constexpr bool operator<=(const U& v, const optional<T>& x);\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace comp_with_t::less_equal {\r\nusing std::optional;\r\n\r\nstruct X {\r\n  int i_;\r\n\r\n  constexpr X(int i) : i_(i) {}\r\n};\r\n\r\nconstexpr bool operator<=(const X& lhs, const X& rhs) {\r\n  return lhs.i_ <= rhs.i_;\r\n}\r\n\r\nint run_test() {\r\n  {\r\n    typedef X T;\r\n    typedef optional<T> O;\r\n\r\n    constexpr T val(2);\r\n    constexpr O o1;      // disengaged\r\n    constexpr O o2{1};   // engaged\r\n    constexpr O o3{val}; // engaged\r\n\r\n    static_assert((o1 <= T(1)), \"\");\r\n    static_assert((o2 <= T(1)), \"\"); // equal\r\n    static_assert(!(o3 <= T(1)), \"\");\r\n    static_assert((o2 <= val), \"\");\r\n    static_assert((o3 <= val), \"\"); // equal\r\n    static_assert((o3 <= T(3)), \"\");\r\n\r\n    static_assert(!(T(1) <= o1), \"\");\r\n    static_assert((T(1) <= o2), \"\"); // equal\r\n    static_assert((T(1) <= o3), \"\");\r\n    static_assert(!(val <= o2), \"\");\r\n    static_assert((val <= o3), \"\"); // equal\r\n    static_assert(!(T(3) <= o3), \"\");\r\n  }\r\n  {\r\n    using O = optional<int>;\r\n    constexpr O o1(42);\r\n    static_assert(o1 <= 42l, \"\");\r\n    static_assert(!(101l <= o1), \"\");\r\n  }\r\n  {\r\n    using O = optional<const int>;\r\n    constexpr O o1(42);\r\n    static_assert(o1 <= 42, \"\");\r\n    static_assert(!(101 <= o1), \"\");\r\n  }\r\n\r\n  return 0;\r\n}\r\n} // namespace comp_with_t::less_equal\r\n// -- END: test/std/utilities/optional/optional.comp_with_t/less_equal.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.comp_with_t/less_than.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T, class U> constexpr bool operator<(const optional<T>& x, const U& v);\r\n// template <class T, class U> constexpr bool operator<(const U& v, const optional<T>& x);\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace comp_with_t::less_than {\r\nusing std::optional;\r\n\r\nstruct X {\r\n  int i_;\r\n\r\n  constexpr X(int i) : i_(i) {}\r\n};\r\n\r\nconstexpr bool operator<(const X& lhs, const X& rhs) { return lhs.i_ < rhs.i_; }\r\n\r\nint run_test() {\r\n  {\r\n    typedef X T;\r\n    typedef optional<T> O;\r\n\r\n    constexpr T val(2);\r\n    constexpr O o1;      // disengaged\r\n    constexpr O o2{1};   // engaged\r\n    constexpr O o3{val}; // engaged\r\n\r\n    static_assert((o1 < T(1)), \"\");\r\n    static_assert(!(o2 < T(1)), \"\"); // equal\r\n    static_assert(!(o3 < T(1)), \"\");\r\n    static_assert((o2 < val), \"\");\r\n    static_assert(!(o3 < val), \"\"); // equal\r\n    static_assert((o3 < T(3)), \"\");\r\n\r\n    static_assert(!(T(1) < o1), \"\");\r\n    static_assert(!(T(1) < o2), \"\"); // equal\r\n    static_assert((T(1) < o3), \"\");\r\n    static_assert(!(val < o2), \"\");\r\n    static_assert(!(val < o3), \"\"); // equal\r\n    static_assert(!(T(3) < o3), \"\");\r\n  }\r\n  {\r\n    using O = optional<int>;\r\n    constexpr O o1(42);\r\n    static_assert(o1 < 101l, \"\");\r\n    static_assert(!(42l < o1), \"\");\r\n  }\r\n  {\r\n    using O = optional<const int>;\r\n    constexpr O o1(42);\r\n    static_assert(o1 < 101, \"\");\r\n    static_assert(!(42 < o1), \"\");\r\n  }\r\n\r\n  return 0;\r\n}\r\n} // namespace comp_with_t::less_than\r\n// -- END: test/std/utilities/optional/optional.comp_with_t/less_than.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.comp_with_t/not_equal.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T, class U> constexpr bool operator!=(const optional<T>& x, const U& v);\r\n// template <class T, class U> constexpr bool operator!=(const U& v, const optional<T>& x);\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace comp_with_t::not_equal {\r\nusing std::optional;\r\n\r\nstruct X {\r\n  int i_;\r\n\r\n  constexpr X(int i) : i_(i) {}\r\n};\r\n\r\nconstexpr bool operator!=(const X& lhs, const X& rhs) {\r\n  return lhs.i_ != rhs.i_;\r\n}\r\n\r\nint run_test() {\r\n  {\r\n    typedef X T;\r\n    typedef optional<T> O;\r\n\r\n    constexpr T val(2);\r\n    constexpr O o1;      // disengaged\r\n    constexpr O o2{1};   // engaged\r\n    constexpr O o3{val}; // engaged\r\n\r\n    static_assert((o1 != T(1)), \"\");\r\n    static_assert(!(o2 != T(1)), \"\");\r\n    static_assert((o3 != T(1)), \"\");\r\n    static_assert(!(o3 != T(2)), \"\");\r\n    static_assert(!(o3 != val), \"\");\r\n\r\n    static_assert((T(1) != o1), \"\");\r\n    static_assert(!(T(1) != o2), \"\");\r\n    static_assert((T(1) != o3), \"\");\r\n    static_assert(!(T(2) != o3), \"\");\r\n    static_assert(!(val != o3), \"\");\r\n  }\r\n  {\r\n    using O = optional<int>;\r\n    constexpr O o1(42);\r\n    static_assert(o1 != 101l, \"\");\r\n    static_assert(!(42l != o1), \"\");\r\n  }\r\n  {\r\n    using O = optional<const int>;\r\n    constexpr O o1(42);\r\n    static_assert(o1 != 101, \"\");\r\n    static_assert(!(42 != o1), \"\");\r\n  }\r\n\r\n  return 0;\r\n}\r\n} // namespace comp_with_t::not_equal\r\n// -- END: test/std/utilities/optional/optional.comp_with_t/not_equal.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.hash/enabled_hash.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n\r\n// Test that <optional> provides all of the arithmetic, enum, and pointer\r\n// hash specializations.\r\n\r\n#include <functional>\r\n#include <optional>\r\n\r\n#include \"poisoned_hash_helper.h\"\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace hash::enabled_hash {\r\nint run_test() {\r\n  test_library_hash_specializations_available();\r\n  {\r\n\r\n  }\r\n\r\n  return 0;\r\n}\r\n} // namespace hash::enabled_hash\r\n// -- END: test/std/utilities/optional/optional.hash/enabled_hash.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.hash/hash.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T> struct hash<optional<T>>;\r\n\r\n#include <optional>\r\n#include <string>\r\n#include <memory>\r\n#include <cassert>\r\n\r\n#include \"poisoned_hash_helper.h\"\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace hash {\r\nstruct A {};\r\nstruct B {};\r\n} // namespace hash\r\n\r\nnamespace std {\r\n\r\ntemplate <>\r\nstruct hash<::hash::B> {\r\n  std::size_t operator()(::hash::B const&) noexcept(false) { return 0; }\r\n};\r\n\r\n}\r\n\r\nnamespace hash {\r\nint run_test()\r\n{\r\n    using std::optional;\r\n    const std::size_t nullopt_hash =\r\n        std::hash<optional<double>>{}(optional<double>{});\r\n\r\n\r\n    {\r\n        optional<B> opt;\r\n        ASSERT_NOT_NOEXCEPT(std::hash<optional<B>>()(opt));\r\n        ASSERT_NOT_NOEXCEPT(std::hash<optional<const B>>()(opt));\r\n    }\r\n\r\n    {\r\n        typedef int T;\r\n        optional<T> opt;\r\n        assert(std::hash<optional<T>>{}(opt) == nullopt_hash);\r\n        opt = 2;\r\n        assert(std::hash<optional<T>>{}(opt) == std::hash<T>{}(*opt));\r\n    }\r\n    {\r\n        typedef std::string T;\r\n        optional<T> opt;\r\n        assert(std::hash<optional<T>>{}(opt) == nullopt_hash);\r\n        opt = std::string(\"123\");\r\n        assert(std::hash<optional<T>>{}(opt) == std::hash<T>{}(*opt));\r\n    }\r\n    {\r\n        typedef std::unique_ptr<int> T;\r\n        optional<T> opt;\r\n        assert(std::hash<optional<T>>{}(opt) == nullopt_hash);\r\n        opt = std::unique_ptr<int>(new int(3));\r\n        assert(std::hash<optional<T>>{}(opt) == std::hash<T>{}(*opt));\r\n    }\r\n    {\r\n      test_hash_enabled<std::optional<int> >();\r\n      test_hash_enabled<std::optional<int*> >();\r\n      test_hash_enabled<std::optional<const int> >();\r\n      test_hash_enabled<std::optional<int* const> >();\r\n\r\n      test_hash_disabled<std::optional<A>>();\r\n      test_hash_disabled<std::optional<const A>>();\r\n\r\n      test_hash_enabled<std::optional<B>>();\r\n      test_hash_enabled<std::optional<const B>>();\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace hash\r\n// -- END: test/std/utilities/optional/optional.hash/hash.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.monadic/and_then.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n\r\n// template<class F> constexpr auto and_then(F&&) &;\r\n// template<class F> constexpr auto and_then(F&&) &&;\r\n// template<class F> constexpr auto and_then(F&&) const&;\r\n// template<class F> constexpr auto and_then(F&&) const&&;\r\n\r\n#include <cassert>\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace monadic::and_then {\r\n#if _HAS_CXX23\r\nstruct LVal {\r\n  constexpr std::optional<int> operator()(int&) { return 1; }\r\n  std::optional<int> operator()(const int&) = delete;\r\n  std::optional<int> operator()(int&&) = delete;\r\n  std::optional<int> operator()(const int&&) = delete;\r\n};\r\n\r\nstruct CLVal {\r\n  std::optional<int> operator()(int&) = delete;\r\n  constexpr std::optional<int> operator()(const int&) { return 1; }\r\n  std::optional<int> operator()(int&&) = delete;\r\n  std::optional<int> operator()(const int&&) = delete;\r\n};\r\n\r\nstruct RVal {\r\n  std::optional<int> operator()(int&) = delete;\r\n  std::optional<int> operator()(const int&) = delete;\r\n  constexpr std::optional<int> operator()(int&&) { return 1; }\r\n  std::optional<int> operator()(const int&&) = delete;\r\n};\r\n\r\nstruct CRVal {\r\n  std::optional<int> operator()(int&) = delete;\r\n  std::optional<int> operator()(const int&) = delete;\r\n  std::optional<int> operator()(int&&) = delete;\r\n  constexpr std::optional<int> operator()(const int&&) { return 1; }\r\n};\r\n\r\nstruct RefQual {\r\n  constexpr std::optional<int> operator()(int) & { return 1; }\r\n  std::optional<int> operator()(int) const& = delete;\r\n  std::optional<int> operator()(int) && = delete;\r\n  std::optional<int> operator()(int) const&& = delete;\r\n};\r\n\r\nstruct CRefQual {\r\n  std::optional<int> operator()(int) & = delete;\r\n  constexpr std::optional<int> operator()(int) const& { return 1; }\r\n  std::optional<int> operator()(int) && = delete;\r\n  std::optional<int> operator()(int) const&& = delete;\r\n};\r\n\r\nstruct RVRefQual {\r\n  std::optional<int> operator()(int) & = delete;\r\n  std::optional<int> operator()(int) const& = delete;\r\n  constexpr std::optional<int> operator()(int) && { return 1; }\r\n  std::optional<int> operator()(int) const&& = delete;\r\n};\r\n\r\nstruct RVCRefQual {\r\n  std::optional<int> operator()(int) & = delete;\r\n  std::optional<int> operator()(int) const& = delete;\r\n  std::optional<int> operator()(int) && = delete;\r\n  constexpr std::optional<int> operator()(int) const&& { return 1; }\r\n};\r\n\r\nstruct NOLVal {\r\n  constexpr std::optional<int> operator()(int&) { return std::nullopt; }\r\n  std::optional<int> operator()(const int&) = delete;\r\n  std::optional<int> operator()(int&&) = delete;\r\n  std::optional<int> operator()(const int&&) = delete;\r\n};\r\n\r\nstruct NOCLVal {\r\n  std::optional<int> operator()(int&) = delete;\r\n  constexpr std::optional<int> operator()(const int&) { return std::nullopt; }\r\n  std::optional<int> operator()(int&&) = delete;\r\n  std::optional<int> operator()(const int&&) = delete;\r\n};\r\n\r\nstruct NORVal {\r\n  std::optional<int> operator()(int&) = delete;\r\n  std::optional<int> operator()(const int&) = delete;\r\n  constexpr std::optional<int> operator()(int&&) { return std::nullopt; }\r\n  std::optional<int> operator()(const int&&) = delete;\r\n};\r\n\r\nstruct NOCRVal {\r\n  std::optional<int> operator()(int&) = delete;\r\n  std::optional<int> operator()(const int&) = delete;\r\n  std::optional<int> operator()(int&&) = delete;\r\n  constexpr std::optional<int> operator()(const int&&) { return std::nullopt; }\r\n};\r\n\r\nstruct NORefQual {\r\n  constexpr std::optional<int> operator()(int) & { return std::nullopt; }\r\n  std::optional<int> operator()(int) const& = delete;\r\n  std::optional<int> operator()(int) && = delete;\r\n  std::optional<int> operator()(int) const&& = delete;\r\n};\r\n\r\nstruct NOCRefQual {\r\n  std::optional<int> operator()(int) & = delete;\r\n  constexpr std::optional<int> operator()(int) const& { return std::nullopt; }\r\n  std::optional<int> operator()(int) && = delete;\r\n  std::optional<int> operator()(int) const&& = delete;\r\n};\r\n\r\nstruct NORVRefQual {\r\n  std::optional<int> operator()(int) & = delete;\r\n  std::optional<int> operator()(int) const& = delete;\r\n  constexpr std::optional<int> operator()(int) && { return std::nullopt; }\r\n  std::optional<int> operator()(int) const&& = delete;\r\n};\r\n\r\nstruct NORVCRefQual {\r\n  std::optional<int> operator()(int) & = delete;\r\n  std::optional<int> operator()(int) const& = delete;\r\n  std::optional<int> operator()(int) && = delete;\r\n  constexpr std::optional<int> operator()(int) const&& { return std::nullopt; }\r\n};\r\n\r\nstruct NoCopy {\r\n  NoCopy() = default;\r\n  NoCopy(const NoCopy&) { assert(false); }\r\n  std::optional<int> operator()(const NoCopy&&) { return 1; }\r\n};\r\n\r\nstruct NonConst {\r\n  std::optional<int> non_const() { return 1; }\r\n};\r\n\r\nconstexpr void test_val_types() {\r\n  // Test & overload\r\n  {\r\n    // Without & qualifier on F's operator()\r\n    {\r\n      std::optional<int> i{0};\r\n      assert(i.and_then(LVal{}) == 1);\r\n      assert(i.and_then(NOLVal{}) == std::nullopt);\r\n      ASSERT_SAME_TYPE(decltype(i.and_then(LVal{})), std::optional<int>);\r\n    }\r\n\r\n    //With & qualifier on F's operator()\r\n    {\r\n      std::optional<int> i{0};\r\n      RefQual l{};\r\n      assert(i.and_then(l) == 1);\r\n      NORefQual nl{};\r\n      assert(i.and_then(nl) == std::nullopt);\r\n      ASSERT_SAME_TYPE(decltype(i.and_then(l)), std::optional<int>);\r\n    }\r\n  }\r\n\r\n  // Test const& overload\r\n  {\r\n    // Without & qualifier on F's operator()\r\n    {\r\n      const std::optional<int> i{0};\r\n      assert(i.and_then(CLVal{}) == 1);\r\n      assert(i.and_then(NOCLVal{}) == std::nullopt);\r\n      ASSERT_SAME_TYPE(decltype(i.and_then(CLVal{})), std::optional<int>);\r\n    }\r\n\r\n    //With & qualifier on F's operator()\r\n    {\r\n      const std::optional<int> i{0};\r\n      const CRefQual l{};\r\n      assert(i.and_then(l) == 1);\r\n      const NOCRefQual nl{};\r\n      assert(i.and_then(nl) == std::nullopt);\r\n      ASSERT_SAME_TYPE(decltype(i.and_then(l)), std::optional<int>);\r\n    }\r\n  }\r\n\r\n  // Test && overload\r\n  {\r\n    // Without & qualifier on F's operator()\r\n    {\r\n      std::optional<int> i{0};\r\n      assert(std::move(i).and_then(RVal{}) == 1);\r\n      assert(std::move(i).and_then(NORVal{}) == std::nullopt);\r\n      ASSERT_SAME_TYPE(decltype(std::move(i).and_then(RVal{})), std::optional<int>);\r\n    }\r\n\r\n    //With & qualifier on F's operator()\r\n    {\r\n      std::optional<int> i{0};\r\n      assert(i.and_then(RVRefQual{}) == 1);\r\n      assert(i.and_then(NORVRefQual{}) == std::nullopt);\r\n      ASSERT_SAME_TYPE(decltype(i.and_then(RVRefQual{})), std::optional<int>);\r\n    }\r\n  }\r\n\r\n  // Test const&& overload\r\n  {\r\n    // Without & qualifier on F's operator()\r\n    {\r\n      const std::optional<int> i{0};\r\n      assert(std::move(i).and_then(CRVal{}) == 1);\r\n      assert(std::move(i).and_then(NOCRVal{}) == std::nullopt);\r\n      ASSERT_SAME_TYPE(decltype(std::move(i).and_then(CRVal{})), std::optional<int>);\r\n    }\r\n\r\n    //With & qualifier on F's operator()\r\n    {\r\n      const std::optional<int> i{0};\r\n      const RVCRefQual l{};\r\n      assert(i.and_then(std::move(l)) == 1);\r\n      const NORVCRefQual nl{};\r\n      assert(i.and_then(std::move(nl)) == std::nullopt);\r\n      ASSERT_SAME_TYPE(decltype(i.and_then(std::move(l))), std::optional<int>);\r\n    }\r\n  }\r\n}\r\n\r\n// check that the lambda body is not instantiated during overload resolution\r\nconstexpr void test_sfinae() {\r\n  std::optional<NonConst> opt{};\r\n  auto l = [](auto&& x) { return x.non_const(); };\r\n  opt.and_then(l);\r\n  std::move(opt).and_then(l);\r\n}\r\n\r\nconstexpr bool test() {\r\n  test_val_types();\r\n  std::optional<int> opt{};\r\n  const auto& copt = opt;\r\n\r\n  const auto never_called = [](int) {\r\n    assert(false);\r\n    return std::optional<int>{};\r\n  };\r\n\r\n  opt.and_then(never_called);\r\n  std::move(opt).and_then(never_called);\r\n  copt.and_then(never_called);\r\n  std::move(copt).and_then(never_called);\r\n\r\n  std::optional<NoCopy> nc;\r\n  const auto& cnc = nc;\r\n  std::move(cnc).and_then(NoCopy{});\r\n  std::move(nc).and_then(NoCopy{});\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  test();\r\n  static_assert(test());\r\n  return 0;\r\n}\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\nint run_test() {\r\n    return 0;\r\n}\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n} // namespace monadic::and_then\r\n// -- END: test/std/utilities/optional/optional.monadic/and_then.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.monadic/or_else.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template<class F> constexpr optional or_else(F&&) &&;\r\n// template<class F> constexpr optional or_else(F&&) const&;\r\n\r\n#include \"MoveOnly.h\"\r\n\r\n#include <cassert>\r\n#include <optional>\r\n\r\nnamespace monadic::or_else {\r\n#if _HAS_CXX23\r\nstruct NonMovable {\r\n  NonMovable() = default;\r\n  NonMovable(NonMovable&&) = delete;\r\n};\r\n\r\ntemplate <class Opt, class F>\r\nconcept has_or_else = requires(Opt&& opt, F&& f) {\r\n  {std::forward<Opt>(opt).or_else(std::forward<F>(f))};\r\n};\r\n\r\ntemplate <class T>\r\nstd::optional<T> return_optional() {}\r\n\r\nstatic_assert(has_or_else<std::optional<int>&, decltype(return_optional<int>)>);\r\nstatic_assert(has_or_else<std::optional<int>&&, decltype(return_optional<int>)>);\r\nstatic_assert(!has_or_else<std::optional<MoveOnly>&, decltype(return_optional<MoveOnly>)>);\r\nstatic_assert(has_or_else<std::optional<MoveOnly>&&, decltype(return_optional<MoveOnly>)>);\r\nstatic_assert(!has_or_else<std::optional<NonMovable>&, decltype(return_optional<NonMovable>)>);\r\nstatic_assert(!has_or_else<std::optional<NonMovable>&&, decltype(return_optional<NonMovable>)>);\r\n\r\nstd::optional<int> take_int(int) { return 0; }\r\nvoid take_int_return_void(int) {}\r\n\r\nstatic_assert(!has_or_else<std::optional<int>, decltype(take_int)>);\r\nstatic_assert(!has_or_else<std::optional<int>, decltype(take_int_return_void)>);\r\nstatic_assert(!has_or_else<std::optional<int>, int>);\r\n\r\nconstexpr bool test() {\r\n  {\r\n    std::optional<int> opt;\r\n    assert(opt.or_else([] { return std::optional<int>{0}; }) == 0);\r\n    opt = 1;\r\n    opt.or_else([] {\r\n      assert(false);\r\n      return std::optional<int>{};\r\n    });\r\n  }\r\n  {\r\n    std::optional<MoveOnly> opt;\r\n    opt = std::move(opt).or_else([] { return std::optional<MoveOnly>{MoveOnly{}}; });\r\n    std::move(opt).or_else([] {\r\n      assert(false);\r\n      return std::optional<MoveOnly>{};\r\n    });\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  test();\r\n  static_assert(test());\r\n  return 0;\r\n}\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\nint run_test() {\r\n    return 0;\r\n}\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n} // namespace monadic::or_else\r\n// -- END: test/std/utilities/optional/optional.monadic/or_else.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.monadic/transform.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n\r\n// template<class F> constexpr auto transform(F&&) &;\r\n// template<class F> constexpr auto transform(F&&) &&;\r\n// template<class F> constexpr auto transform(F&&) const&;\r\n// template<class F> constexpr auto transform(F&&) const&&;\r\n\r\n#include \"test_macros.h\"\r\n#include <cassert>\r\n#include <optional>\r\n#include <type_traits>\r\n\r\nnamespace monadic::transform {\r\n#if _HAS_CXX23\r\nstruct LVal {\r\n  constexpr int operator()(int&) { return 1; }\r\n  int operator()(const int&) = delete;\r\n  int operator()(int&&) = delete;\r\n  int operator()(const int&&) = delete;\r\n};\r\n\r\nstruct CLVal {\r\n  int operator()(int&) = delete;\r\n  constexpr int operator()(const int&) { return 1; }\r\n  int operator()(int&&) = delete;\r\n  int operator()(const int&&) = delete;\r\n};\r\n\r\nstruct RVal {\r\n  int operator()(int&) = delete;\r\n  int operator()(const int&) = delete;\r\n  constexpr int operator()(int&&) { return 1; }\r\n  int operator()(const int&&) = delete;\r\n};\r\n\r\nstruct CRVal {\r\n  int operator()(int&) = delete;\r\n  int operator()(const int&) = delete;\r\n  int operator()(int&&) = delete;\r\n  constexpr int operator()(const int&&) { return 1; }\r\n};\r\n\r\nstruct RefQual {\r\n  constexpr int operator()(int) & { return 1; }\r\n  int operator()(int) const& = delete;\r\n  int operator()(int) && = delete;\r\n  int operator()(int) const&& = delete;\r\n};\r\n\r\nstruct CRefQual {\r\n  int operator()(int) & = delete;\r\n  constexpr int operator()(int) const& { return 1; }\r\n  int operator()(int) && = delete;\r\n  int operator()(int) const&& = delete;\r\n};\r\n\r\nstruct RVRefQual {\r\n  int operator()(int) & = delete;\r\n  int operator()(int) const& = delete;\r\n  constexpr int operator()(int) && { return 1; }\r\n  int operator()(int) const&& = delete;\r\n};\r\n\r\nstruct RVCRefQual {\r\n  int operator()(int) & = delete;\r\n  int operator()(int) const& = delete;\r\n  int operator()(int) && = delete;\r\n  constexpr int operator()(int) const&& { return 1; }\r\n};\r\n\r\nstruct NoCopy {\r\n  NoCopy() = default;\r\n  NoCopy(const NoCopy&) { assert(false); }\r\n  int operator()(const NoCopy&&) { return 1; }\r\n};\r\n\r\nstruct NoMove {\r\n  NoMove() = default;\r\n  NoMove(NoMove&&) = delete;\r\n  NoMove operator()(const NoCopy&&) { return NoMove{}; }\r\n};\r\n\r\nconstexpr void test_val_types() {\r\n  // Test & overload\r\n  {\r\n    // Without & qualifier on F's operator()\r\n    {\r\n      std::optional<int> i{0};\r\n      assert(i.transform(LVal{}) == 1);\r\n      ASSERT_SAME_TYPE(decltype(i.transform(LVal{})), std::optional<int>);\r\n    }\r\n\r\n    //With & qualifier on F's operator()\r\n    {\r\n      std::optional<int> i{0};\r\n      RefQual l{};\r\n      assert(i.transform(l) == 1);\r\n      ASSERT_SAME_TYPE(decltype(i.transform(l)), std::optional<int>);\r\n    }\r\n  }\r\n\r\n  // Test const& overload\r\n  {\r\n    // Without & qualifier on F's operator()\r\n    {\r\n      const std::optional<int> i{0};\r\n      assert(i.transform(CLVal{}) == 1);\r\n      ASSERT_SAME_TYPE(decltype(i.transform(CLVal{})), std::optional<int>);\r\n    }\r\n\r\n    //With & qualifier on F's operator()\r\n    {\r\n      const std::optional<int> i{0};\r\n      const CRefQual l{};\r\n      assert(i.transform(l) == 1);\r\n      ASSERT_SAME_TYPE(decltype(i.transform(l)), std::optional<int>);\r\n    }\r\n  }\r\n\r\n  // Test && overload\r\n  {\r\n    // Without & qualifier on F's operator()\r\n    {\r\n      std::optional<int> i{0};\r\n      assert(std::move(i).transform(RVal{}) == 1);\r\n      ASSERT_SAME_TYPE(decltype(std::move(i).transform(RVal{})), std::optional<int>);\r\n    }\r\n\r\n    //With & qualifier on F's operator()\r\n    {\r\n      std::optional<int> i{0};\r\n      assert(i.transform(RVRefQual{}) == 1);\r\n      ASSERT_SAME_TYPE(decltype(i.transform(RVRefQual{})), std::optional<int>);\r\n    }\r\n  }\r\n\r\n  // Test const&& overload\r\n  {\r\n    // Without & qualifier on F's operator()\r\n    {\r\n      const std::optional<int> i{0};\r\n      assert(std::move(i).transform(CRVal{}) == 1);\r\n      ASSERT_SAME_TYPE(decltype(std::move(i).transform(CRVal{})), std::optional<int>);\r\n    }\r\n\r\n    //With & qualifier on F's operator()\r\n    {\r\n      const std::optional<int> i{0};\r\n      const RVCRefQual l{};\r\n      assert(i.transform(std::move(l)) == 1);\r\n      ASSERT_SAME_TYPE(decltype(i.transform(std::move(l))), std::optional<int>);\r\n    }\r\n  }\r\n}\r\n\r\nstruct NonConst {\r\n  int non_const() { return 1; }\r\n};\r\n\r\n// check that the lambda body is not instantiated during overload resolution\r\nconstexpr void test_sfinae() {\r\n  std::optional<NonConst> opt{};\r\n  auto l = [](auto&& x) { return x.non_const(); };\r\n  opt.transform(l);\r\n  std::move(opt).transform(l);\r\n}\r\n\r\nconstexpr bool test() {\r\n  test_sfinae();\r\n  test_val_types();\r\n  std::optional<int> opt;\r\n  const auto& copt = opt;\r\n\r\n  const auto never_called = [](int) {\r\n    assert(false);\r\n    return 0;\r\n  };\r\n\r\n  opt.transform(never_called);\r\n  std::move(opt).transform(never_called);\r\n  copt.transform(never_called);\r\n  std::move(copt).transform(never_called);\r\n\r\n  std::optional<NoCopy> nc;\r\n  const auto& cnc = nc;\r\n  std::move(nc).transform(NoCopy{});\r\n  std::move(cnc).transform(NoCopy{});\r\n\r\n  std::move(nc).transform(NoMove{});\r\n  std::move(cnc).transform(NoMove{});\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  test();\r\n  static_assert(test());\r\n  return 0;\r\n}\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\nint run_test() {\r\n    return 0;\r\n}\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n} // namespace monadic::transform\r\n// -- END: test/std/utilities/optional/optional.monadic/transform.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.nullops/compare.three_way.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n\r\n// [optional.nullops], comparison with nullopt\r\n\r\n// template<class T>\r\n//   constexpr strong_ordering operator<=>(const optional<T>&, nullopt_t) noexcept;\r\n\r\n#include <cassert>\r\n#include <compare>\r\n#include <optional>\r\n\r\n#include \"test_comparisons.h\"\r\n\r\nnamespace nullops::three_way {\r\n#if _HAS_CXX20\r\nconstexpr bool test() {\r\n  {\r\n    std::optional<int> op;\r\n    assert((std::nullopt <=> op) == std::strong_ordering::equal);\r\n    assert(testOrder(std::nullopt, op, std::strong_ordering::equal));\r\n    assert((op <=> std::nullopt) == std::strong_ordering::equal);\r\n    assert(testOrder(op, std::nullopt, std::strong_ordering::equal));\r\n  }\r\n  {\r\n    std::optional<int> op{1};\r\n    assert((std::nullopt <=> op) == std::strong_ordering::less);\r\n    assert(testOrder(std::nullopt, op, std::strong_ordering::less));\r\n  }\r\n  {\r\n    std::optional<int> op{1};\r\n    assert((op <=> std::nullopt) == std::strong_ordering::greater);\r\n    assert(testOrder(op, std::nullopt, std::strong_ordering::greater));\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  assert(test());\r\n  static_assert(test());\r\n  return 0;\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\nint run_test() {\r\n    return 0;\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n} // namespace nullops::three_way\r\n// -- END: test/std/utilities/optional/optional.nullops/compare.three_way.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.nullops/equal.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T> constexpr bool operator==(const optional<T>& x, nullopt_t) noexcept;\r\n// template <class T> constexpr bool operator==(nullopt_t, const optional<T>& x) noexcept;\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace nullops::equal {\r\nint run_test()\r\n{\r\n    using std::optional;\r\n    using std::nullopt_t;\r\n    using std::nullopt;\r\n\r\n    {\r\n    typedef int T;\r\n    typedef optional<T> O;\r\n\r\n    constexpr O o1;     // disengaged\r\n    constexpr O o2{1};  // engaged\r\n\r\n    static_assert (  (nullopt == o1), \"\" );\r\n    static_assert ( !(nullopt == o2), \"\" );\r\n    static_assert (  (o1 == nullopt), \"\" );\r\n    static_assert ( !(o2 == nullopt), \"\" );\r\n\r\n    static_assert (noexcept(nullopt == o1), \"\");\r\n    static_assert (noexcept(o1 == nullopt), \"\");\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace nullops::equal\r\n// -- END: test/std/utilities/optional/optional.nullops/equal.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.nullops/greater.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T> constexpr bool operator>(const optional<T>& x, nullopt_t) noexcept;\r\n// template <class T> constexpr bool operator>(nullopt_t, const optional<T>& x) noexcept;\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace nullops::greater_than {\r\nint run_test()\r\n{\r\n    using std::optional;\r\n    using std::nullopt_t;\r\n    using std::nullopt;\r\n\r\n    {\r\n    typedef int T;\r\n    typedef optional<T> O;\r\n\r\n    constexpr O o1;     // disengaged\r\n    constexpr O o2{1};  // engaged\r\n\r\n    static_assert ( !(nullopt > o1), \"\" );\r\n    static_assert ( !(nullopt > o2), \"\" );\r\n    static_assert ( !(o1 > nullopt), \"\" );\r\n    static_assert (  (o2 > nullopt), \"\" );\r\n\r\n    static_assert (noexcept(nullopt > o1), \"\");\r\n    static_assert (noexcept(o1 > nullopt), \"\");\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace nullops::greater_than\r\n// -- END: test/std/utilities/optional/optional.nullops/greater.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.nullops/greater_equal.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T> constexpr bool operator>=(const optional<T>& x, nullopt_t) noexcept;\r\n// template <class T> constexpr bool operator>=(nullopt_t, const optional<T>& x) noexcept;\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace nullops::greater_equal {\r\nint run_test()\r\n{\r\n    using std::optional;\r\n    using std::nullopt_t;\r\n    using std::nullopt;\r\n\r\n    {\r\n    typedef int T;\r\n    typedef optional<T> O;\r\n\r\n    constexpr O o1;     // disengaged\r\n    constexpr O o2{1};  // engaged\r\n\r\n    static_assert (  (nullopt >= o1), \"\" );\r\n    static_assert ( !(nullopt >= o2), \"\" );\r\n    static_assert (  (o1 >= nullopt), \"\" );\r\n    static_assert (  (o2 >= nullopt), \"\" );\r\n\r\n    static_assert (noexcept(nullopt >= o1), \"\");\r\n    static_assert (noexcept(o1 >= nullopt), \"\");\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace nullops::greater_equal\r\n// -- END: test/std/utilities/optional/optional.nullops/greater_equal.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.nullops/less_equal.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T> constexpr bool operator<=(const optional<T>& x, nullopt_t) noexcept;\r\n// template <class T> constexpr bool operator<=(nullopt_t, const optional<T>& x) noexcept;\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace nullops::less_equal {\r\nint run_test()\r\n{\r\n    using std::optional;\r\n    using std::nullopt_t;\r\n    using std::nullopt;\r\n\r\n    {\r\n    typedef int T;\r\n    typedef optional<T> O;\r\n\r\n    constexpr O o1;     // disengaged\r\n    constexpr O o2{1};  // engaged\r\n\r\n    static_assert (  (nullopt <= o1), \"\" );\r\n    static_assert (  (nullopt <= o2), \"\" );\r\n    static_assert (  (o1 <= nullopt), \"\" );\r\n    static_assert ( !(o2 <= nullopt), \"\" );\r\n\r\n    static_assert (noexcept(nullopt <= o1), \"\");\r\n    static_assert (noexcept(o1 <= nullopt), \"\");\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace nullops::less_equal\r\n// -- END: test/std/utilities/optional/optional.nullops/less_equal.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.nullops/less_than.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T> constexpr bool operator<(const optional<T>& x, nullopt_t) noexcept;\r\n// template <class T> constexpr bool operator<(nullopt_t, const optional<T>& x) noexcept;\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace nullops::less_than {\r\nint run_test()\r\n{\r\n    using std::optional;\r\n    using std::nullopt_t;\r\n    using std::nullopt;\r\n\r\n    {\r\n    typedef int T;\r\n    typedef optional<T> O;\r\n\r\n    constexpr O o1;     // disengaged\r\n    constexpr O o2{1};  // engaged\r\n\r\n    static_assert ( !(nullopt < o1), \"\" );\r\n    static_assert (  (nullopt < o2), \"\" );\r\n    static_assert ( !(o1 < nullopt), \"\" );\r\n    static_assert ( !(o2 < nullopt), \"\" );\r\n\r\n    static_assert (noexcept(nullopt < o1), \"\");\r\n    static_assert (noexcept(o1 < nullopt), \"\");\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace nullops::less_than\r\n// -- END: test/std/utilities/optional/optional.nullops/less_than.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.nullops/not_equal.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T> constexpr bool operator!=(const optional<T>& x, nullopt_t) noexcept;\r\n// template <class T> constexpr bool operator!=(nullopt_t, const optional<T>& x) noexcept;\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace nullops::not_equal {\r\nint run_test()\r\n{\r\n    using std::optional;\r\n    using std::nullopt_t;\r\n    using std::nullopt;\r\n\r\n    {\r\n    typedef int T;\r\n    typedef optional<T> O;\r\n\r\n    constexpr O o1;     // disengaged\r\n    constexpr O o2{1};  // engaged\r\n\r\n    static_assert ( !(nullopt != o1), \"\" );\r\n    static_assert (  (nullopt != o2), \"\" );\r\n    static_assert ( !(o1 != nullopt), \"\" );\r\n    static_assert (  (o2 != nullopt), \"\" );\r\n\r\n    static_assert (noexcept(nullopt != o1), \"\");\r\n    static_assert (noexcept(o1 != nullopt), \"\");\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace nullops::not_equal\r\n// -- END: test/std/utilities/optional/optional.nullops/not_equal.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.nullopt/nullopt_t.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// struct nullopt_t{see below};\r\n// inline constexpr nullopt_t nullopt(unspecified);\r\n\r\n// [optional.nullopt]/2:\r\n//   Type nullopt_t shall not have a default constructor or an initializer-list\r\n//   constructor, and shall not be an aggregate.\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace nullopt {\r\nusing std::nullopt_t;\r\nusing std::nullopt;\r\n\r\nconstexpr bool test()\r\n{\r\n    nullopt_t foo{nullopt};\r\n    (void)foo;\r\n    return true;\r\n}\r\n\r\nint run_test()\r\n{\r\n    static_assert(std::is_empty_v<nullopt_t>);\r\n    static_assert(!std::is_default_constructible_v<nullopt_t>);\r\n\r\n    static_assert(std::is_same_v<const nullopt_t, decltype(nullopt)>);\r\n    static_assert(test());\r\n\r\n  return 0;\r\n}\r\n} // namespace nullopt\r\n// -- END: test/std/utilities/optional/optional.nullopt/nullopt_t.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class U> optional<T>& operator=(U&& v);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n#include <memory>\r\n\r\n#include \"test_macros.h\"\r\n#include \"archetypes.h\"\r\n\r\nnamespace assign::value {\r\nusing std::optional;\r\n\r\nstruct ThrowAssign {\r\n  static int dtor_called;\r\n  ThrowAssign() = default;\r\n  ThrowAssign(int) { TEST_THROW(42); }\r\n  ThrowAssign& operator=(int) {\r\n      TEST_THROW(42);\r\n  }\r\n  ~ThrowAssign() { ++dtor_called; }\r\n};\r\nint ThrowAssign::dtor_called = 0;\r\n\r\ntemplate <class T, class Arg = T, bool Expect = true>\r\nvoid assert_assignable() {\r\n    static_assert(std::is_assignable<optional<T>&, Arg>::value == Expect, \"\");\r\n    static_assert(!std::is_assignable<const optional<T>&, Arg>::value, \"\");\r\n}\r\n\r\nstruct MismatchType {\r\n  explicit MismatchType(int) {}\r\n  explicit MismatchType(char*) {}\r\n  explicit MismatchType(int*) = delete;\r\n  MismatchType& operator=(int) { return *this; }\r\n  MismatchType& operator=(int*) { return *this; }\r\n  MismatchType& operator=(char*) = delete;\r\n};\r\n\r\nstruct FromOptionalType {\r\n  using Opt = std::optional<FromOptionalType>;\r\n  FromOptionalType() = default;\r\n  FromOptionalType(FromOptionalType const&) = delete;\r\n  template <class Dummy = void>\r\n  constexpr FromOptionalType(Opt&) { Dummy::BARK; }\r\n  template <class Dummy = void>\r\n  constexpr FromOptionalType& operator=(Opt&) { Dummy::BARK; return *this; }\r\n};\r\n\r\nvoid test_sfinae() {\r\n    using I = TestTypes::TestType;\r\n    using E = ExplicitTestTypes::TestType;\r\n    assert_assignable<int>();\r\n    assert_assignable<int, int&>();\r\n    assert_assignable<int, int const&>();\r\n    // Implicit test type\r\n    assert_assignable<I, I const&>();\r\n    assert_assignable<I, I&&>();\r\n    assert_assignable<I, int>();\r\n    assert_assignable<I, void*, false>();\r\n    // Explicit test type\r\n    assert_assignable<E, E const&>();\r\n    assert_assignable<E, E &&>();\r\n    assert_assignable<E, int>();\r\n    assert_assignable<E, void*, false>();\r\n    // Mismatch type\r\n    assert_assignable<MismatchType, int>();\r\n    assert_assignable<MismatchType, int*, false>();\r\n    assert_assignable<MismatchType, char*, false>();\r\n    // Type constructible from optional\r\n    assert_assignable<FromOptionalType, std::optional<FromOptionalType>&, false>();\r\n}\r\n\r\nvoid test_with_test_type()\r\n{\r\n    using T = TestTypes::TestType;\r\n    T::reset();\r\n    { // to empty\r\n        optional<T> opt;\r\n        opt = 3;\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 1);\r\n        assert(T::value_constructed == 1);\r\n        assert(T::assigned == 0);\r\n        assert(T::destroyed == 0);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(3));\r\n    }\r\n    { // to existing\r\n        optional<T> opt(42);\r\n        T::reset_constructors();\r\n        opt = 3;\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 0);\r\n        assert(T::assigned == 1);\r\n        assert(T::value_assigned == 1);\r\n        assert(T::destroyed == 0);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(3));\r\n    }\r\n    { // test default argument\r\n        optional<T> opt;\r\n        T::reset_constructors();\r\n        opt = {1, 2};\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 2);\r\n        assert(T::value_constructed == 1);\r\n        assert(T::move_constructed == 1);\r\n        assert(T::assigned == 0);\r\n        assert(T::destroyed == 1);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(1, 2));\r\n    }\r\n    { // test default argument\r\n        optional<T> opt(42);\r\n        T::reset_constructors();\r\n        opt = {1, 2};\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 1);\r\n        assert(T::value_constructed == 1);\r\n        assert(T::assigned == 1);\r\n        assert(T::move_assigned == 1);\r\n        assert(T::destroyed == 1);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(1, 2));\r\n    }\r\n    { // test default argument\r\n        optional<T> opt;\r\n        T::reset_constructors();\r\n        opt = {1};\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 2);\r\n        assert(T::value_constructed == 1);\r\n        assert(T::move_constructed == 1);\r\n        assert(T::assigned == 0);\r\n        assert(T::destroyed == 1);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(1));\r\n    }\r\n    { // test default argument\r\n        optional<T> opt(42);\r\n        T::reset_constructors();\r\n        opt = {};\r\n        assert(static_cast<bool>(opt) == false);\r\n        assert(T::alive == 0);\r\n        assert(T::constructed == 0);\r\n        assert(T::assigned == 0);\r\n        assert(T::destroyed == 1);\r\n    }\r\n}\r\n\r\ntemplate <class T, class Value = int>\r\nvoid test_with_type() {\r\n    { // to empty\r\n        optional<T> opt;\r\n        opt = Value(3);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(3));\r\n    }\r\n    { // to existing\r\n        optional<T> opt(Value(42));\r\n        opt = Value(3);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(3));\r\n    }\r\n    { // test const\r\n        optional<T> opt(Value(42));\r\n        const T t(Value(3));\r\n        opt = t;\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(3));\r\n    }\r\n    { // test default argument\r\n        optional<T> opt;\r\n        opt = {Value(1)};\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(1));\r\n    }\r\n    { // test default argument\r\n        optional<T> opt(Value(42));\r\n        opt = {};\r\n        assert(static_cast<bool>(opt) == false);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_with_type_multi() {\r\n    test_with_type<T>();\r\n    { // test default argument\r\n        optional<T> opt;\r\n        opt = {1, 2};\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(1, 2));\r\n    }\r\n    { // test default argument\r\n        optional<T> opt(42);\r\n        opt = {1, 2};\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(1, 2));\r\n    }\r\n}\r\n\r\nvoid test_throws()\r\n{\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    using T = ThrowAssign;\r\n    {\r\n        optional<T> opt;\r\n        try {\r\n            opt = 42;\r\n            assert(false);\r\n        } catch (int) {}\r\n        assert(static_cast<bool>(opt) == false);\r\n    }\r\n    assert(T::dtor_called == 0);\r\n    {\r\n        T::dtor_called = 0;\r\n        optional<T> opt(std::in_place);\r\n        try {\r\n            opt = 42;\r\n            assert(false);\r\n        } catch (int) {}\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(T::dtor_called == 0);\r\n    }\r\n    assert(T::dtor_called == 1);\r\n#endif\r\n}\r\n\r\nenum MyEnum { Zero, One, Two, Three, FortyTwo = 42 };\r\n\r\nusing Fn = void(*)();\r\n\r\n// https://llvm.org/PR38638\r\ntemplate <class T>\r\nconstexpr T pr38638(T v)\r\n{\r\n  std::optional<T> o;\r\n  o = v;\r\n  return *o + 2;\r\n}\r\n\r\n\r\nint run_test()\r\n{\r\n    test_sfinae();\r\n    // Test with instrumented type\r\n    test_with_test_type();\r\n    // Test with various scalar types\r\n    test_with_type<int>();\r\n    test_with_type<MyEnum, MyEnum>();\r\n    test_with_type<int, MyEnum>();\r\n    test_with_type<Fn, Fn>();\r\n    // Test types with multi argument constructors\r\n    test_with_type_multi<ConstexprTestTypes::TestType>();\r\n    test_with_type_multi<TrivialTestTypes::TestType>();\r\n    // Test move only types\r\n    {\r\n        optional<std::unique_ptr<int>> opt;\r\n        opt = std::unique_ptr<int>(new int(3));\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(**opt == 3);\r\n    }\r\n    {\r\n        optional<std::unique_ptr<int>> opt(std::unique_ptr<int>(new int(2)));\r\n        opt = std::unique_ptr<int>(new int(3));\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(**opt == 3);\r\n    }\r\n    test_throws();\r\n\r\n    static_assert(pr38638(3) == 5, \"\");\r\n\r\n  return 0;\r\n}\r\n} // namespace assign::value\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.assign/const_optional_U.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// From LWG2451:\r\n// template<class U>\r\n//   optional<T>& operator=(const optional<U>& rhs);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"archetypes.h\"\r\n\r\nnamespace assign::const_optional_U {\r\nusing std::optional;\r\n\r\nstruct X\r\n{\r\n    static bool throw_now;\r\n\r\n    X() = default;\r\n    X(int)\r\n    {\r\n        if (throw_now)\r\n            TEST_THROW(6);\r\n    }\r\n};\r\n\r\nbool X::throw_now = false;\r\n\r\nstruct Y1\r\n{\r\n    Y1() = default;\r\n    Y1(const int&) {}\r\n    Y1& operator=(const Y1&) = delete;\r\n};\r\n\r\nstruct Y2\r\n{\r\n    Y2() = default;\r\n    Y2(const int&) = delete;\r\n    Y2& operator=(const int&) { return *this; }\r\n};\r\n\r\ntemplate <class T>\r\nstruct AssignableFrom {\r\n  static int type_constructed;\r\n  static int type_assigned;\r\nstatic int int_constructed;\r\n  static int int_assigned;\r\n\r\n  static void reset() {\r\n      type_constructed = int_constructed = 0;\r\n      type_assigned = int_assigned = 0;\r\n  }\r\n\r\n  AssignableFrom() = default;\r\n\r\n  explicit AssignableFrom(T) { ++type_constructed; }\r\n  AssignableFrom& operator=(T) { ++type_assigned; return *this; }\r\n\r\n  AssignableFrom(int) { ++int_constructed; }\r\n  AssignableFrom& operator=(int) { ++int_assigned; return *this; }\r\nprivate:\r\n  AssignableFrom(AssignableFrom const&) = delete;\r\n  AssignableFrom& operator=(AssignableFrom const&) = delete;\r\n};\r\n\r\ntemplate <class T> int AssignableFrom<T>::type_constructed = 0;\r\ntemplate <class T> int AssignableFrom<T>::type_assigned = 0;\r\ntemplate <class T> int AssignableFrom<T>::int_constructed = 0;\r\ntemplate <class T> int AssignableFrom<T>::int_assigned = 0;\r\n\r\n\r\nvoid test_with_test_type() {\r\n    using T = TestTypes::TestType;\r\n    T::reset();\r\n    { // non-empty to empty\r\n        T::reset_constructors();\r\n        optional<T> opt;\r\n        const optional<int> other(42);\r\n        opt = other;\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 1);\r\n        assert(T::value_constructed == 1);\r\n        assert(T::assigned == 0);\r\n        assert(T::destroyed == 0);\r\n        assert(static_cast<bool>(other) == true);\r\n        assert(*other == 42);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(42));\r\n    }\r\n    assert(T::alive == 0);\r\n    { // non-empty to non-empty\r\n        optional<T> opt(101);\r\n        const optional<int> other(42);\r\n        T::reset_constructors();\r\n        opt = other;\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 0);\r\n        assert(T::assigned == 1);\r\n        assert(T::value_assigned == 1);\r\n        assert(T::destroyed == 0);\r\n        assert(static_cast<bool>(other) == true);\r\n        assert(*other == 42);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(42));\r\n    }\r\n    assert(T::alive == 0);\r\n    { // empty to non-empty\r\n        optional<T> opt(101);\r\n        const optional<int> other;\r\n        T::reset_constructors();\r\n        opt = other;\r\n        assert(T::alive == 0);\r\n        assert(T::constructed == 0);\r\n        assert(T::assigned == 0);\r\n        assert(T::destroyed == 1);\r\n        assert(static_cast<bool>(other) == false);\r\n        assert(static_cast<bool>(opt) == false);\r\n    }\r\n    assert(T::alive == 0);\r\n    { // empty to empty\r\n        optional<T> opt;\r\n        const optional<int> other;\r\n        T::reset_constructors();\r\n        opt = other;\r\n        assert(T::alive == 0);\r\n        assert(T::constructed == 0);\r\n        assert(T::assigned == 0);\r\n        assert(T::destroyed == 0);\r\n        assert(static_cast<bool>(other) == false);\r\n        assert(static_cast<bool>(opt) == false);\r\n    }\r\n    assert(T::alive == 0);\r\n}\r\n\r\nvoid test_ambiguous_assign() {\r\n    using OptInt = std::optional<int>;\r\n    {\r\n        using T = AssignableFrom<OptInt const&>;\r\n        const OptInt a(42);\r\n        T::reset();\r\n        {\r\n            std::optional<T> t;\r\n            t = a;\r\n            assert(T::type_constructed == 1);\r\n            assert(T::type_assigned == 0);\r\n            assert(T::int_constructed == 0);\r\n            assert(T::int_assigned == 0);\r\n        }\r\n        T::reset();\r\n        {\r\n            std::optional<T> t(42);\r\n            t = a;\r\n            assert(T::type_constructed == 0);\r\n            assert(T::type_assigned == 1);\r\n            assert(T::int_constructed == 1);\r\n            assert(T::int_assigned == 0);\r\n        }\r\n        T::reset();\r\n        {\r\n            std::optional<T> t(42);\r\n            t = std::move(a);\r\n            assert(T::type_constructed == 0);\r\n            assert(T::type_assigned == 1);\r\n            assert(T::int_constructed == 1);\r\n            assert(T::int_assigned == 0);\r\n        }\r\n    }\r\n    {\r\n        using T = AssignableFrom<OptInt&>;\r\n        OptInt a(42);\r\n        T::reset();\r\n        {\r\n            std::optional<T> t;\r\n            t = a;\r\n            assert(T::type_constructed == 1);\r\n            assert(T::type_assigned == 0);\r\n            assert(T::int_constructed == 0);\r\n            assert(T::int_assigned == 0);\r\n        }\r\n        {\r\n            using Opt = std::optional<T>;\r\n            static_assert(!std::is_assignable_v<Opt&, OptInt const&>, \"\");\r\n        }\r\n    }\r\n}\r\n\r\n\r\nint run_test()\r\n{\r\n    test_with_test_type();\r\n    test_ambiguous_assign();\r\n    {\r\n        optional<int> opt;\r\n        constexpr optional<short> opt2;\r\n        opt = opt2;\r\n        static_assert(static_cast<bool>(opt2) == false, \"\");\r\n        assert(static_cast<bool>(opt) == static_cast<bool>(opt2));\r\n    }\r\n    {\r\n        optional<int> opt;\r\n        constexpr optional<short> opt2(short{2});\r\n        opt = opt2;\r\n        static_assert(static_cast<bool>(opt2) == true, \"\");\r\n        static_assert(*opt2 == 2, \"\");\r\n        assert(static_cast<bool>(opt) == static_cast<bool>(opt2));\r\n        assert(*opt == *opt2);\r\n    }\r\n    {\r\n        optional<int> opt(3);\r\n        constexpr optional<short> opt2;\r\n        opt = opt2;\r\n        static_assert(static_cast<bool>(opt2) == false, \"\");\r\n        assert(static_cast<bool>(opt) == static_cast<bool>(opt2));\r\n    }\r\n    {\r\n        optional<int> opt(3);\r\n        constexpr optional<short> opt2(short{2});\r\n        opt = opt2;\r\n        static_assert(static_cast<bool>(opt2) == true, \"\");\r\n        static_assert(*opt2 == 2, \"\");\r\n        assert(static_cast<bool>(opt) == static_cast<bool>(opt2));\r\n        assert(*opt == *opt2);\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        optional<X> opt;\r\n        optional<int> opt2(42);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        try\r\n        {\r\n            X::throw_now = true;\r\n            opt = opt2;\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 6);\r\n            assert(static_cast<bool>(opt) == false);\r\n        }\r\n    }\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace assign::const_optional_U\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.assign/const_optional_U.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.assign/copy.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr optional<T>& operator=(const optional<T>& rhs);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"archetypes.h\"\r\n\r\nnamespace assign::copy {\r\nusing std::optional;\r\n\r\nstruct X\r\n{\r\n    static bool throw_now;\r\n\r\n    X() = default;\r\n    X(const X&)\r\n    {\r\n        if (throw_now)\r\n            TEST_THROW(6);\r\n    }\r\n    X& operator=(X const&) = default;\r\n};\r\n\r\nbool X::throw_now = false;\r\n\r\ntemplate <class Tp>\r\nconstexpr bool assign_empty(optional<Tp>&& lhs) {\r\n    const optional<Tp> rhs;\r\n    lhs = rhs;\r\n    return !lhs.has_value() && !rhs.has_value();\r\n}\r\n\r\ntemplate <class Tp>\r\nconstexpr bool assign_value(optional<Tp>&& lhs) {\r\n    const optional<Tp> rhs(101);\r\n    lhs = rhs;\r\n    return lhs.has_value() && rhs.has_value() && *lhs == *rhs;\r\n}\r\n\r\nint run_test()\r\n{\r\n    {\r\n        using O = optional<int>;\r\n        static_assert(assign_empty(O{42}));\r\n        static_assert(assign_value(O{42}));\r\n        assert(assign_empty(O{42}));\r\n        assert(assign_value(O{42}));\r\n    }\r\n    {\r\n        using O = optional<TrivialTestTypes::TestType>;\r\n        static_assert(assign_empty(O{42}));\r\n        static_assert(assign_value(O{42}));\r\n        assert(assign_empty(O{42}));\r\n        assert(assign_value(O{42}));\r\n    }\r\n    {\r\n        using O = optional<TestTypes::TestType>;\r\n        assert(assign_empty(O{42}));\r\n        assert(assign_value(O{42}));\r\n    }\r\n    {\r\n        using T = TestTypes::TestType;\r\n        T::reset();\r\n        optional<T> opt(3);\r\n        const optional<T> opt2;\r\n        assert(T::alive == 1);\r\n        opt = opt2;\r\n        assert(T::alive == 0);\r\n        assert(!opt2.has_value());\r\n        assert(!opt.has_value());\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        optional<X> opt;\r\n        optional<X> opt2(X{});\r\n        assert(static_cast<bool>(opt2) == true);\r\n        try\r\n        {\r\n            X::throw_now = true;\r\n            opt = opt2;\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 6);\r\n            assert(static_cast<bool>(opt) == false);\r\n        }\r\n    }\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace assign::copy\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.assign/copy.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.assign/emplace.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class... Args> T& optional<T>::emplace(Args&&... args);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n#include <memory>\r\n\r\n#include \"test_macros.h\"\r\n#include \"archetypes.h\"\r\n\r\nnamespace assign::emplace {\r\nusing std::optional;\r\n\r\nclass X\r\n{\r\n    int i_;\r\n    int j_ = 0;\r\npublic:\r\n    constexpr X() : i_(0) {}\r\n    constexpr X(int i) : i_(i) {}\r\n    constexpr X(int i, int j) : i_(i), j_(j) {}\r\n\r\n    friend constexpr bool operator==(const X& x, const X& y)\r\n        {return x.i_ == y.i_ && x.j_ == y.j_;}\r\n};\r\n\r\nclass Y\r\n{\r\npublic:\r\n    static bool dtor_called;\r\n    Y() = default;\r\n    Y(int) { TEST_THROW(6);}\r\n    Y(const Y&) = default;\r\n    Y& operator=(const Y&) = default;\r\n    ~Y() {dtor_called = true;}\r\n};\r\n\r\nbool Y::dtor_called = false;\r\n\r\ntemplate <class T>\r\nconstexpr bool test_one_arg() {\r\n    using Opt = std::optional<T>;\r\n    {\r\n        Opt opt;\r\n        auto & v = opt.emplace();\r\n        static_assert( std::is_same_v<T&, decltype(v)>, \"\" );\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(0));\r\n        assert(&v == &*opt);\r\n    }\r\n    {\r\n        Opt opt;\r\n        auto & v = opt.emplace(1);\r\n        static_assert( std::is_same_v<T&, decltype(v)>, \"\" );\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(1));\r\n        assert(&v == &*opt);\r\n    }\r\n    {\r\n        Opt opt(2);\r\n        auto & v = opt.emplace();\r\n        static_assert( std::is_same_v<T&, decltype(v)>, \"\" );\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(0));\r\n        assert(&v == &*opt);\r\n    }\r\n    {\r\n        Opt opt(2);\r\n        auto & v = opt.emplace(1);\r\n        static_assert( std::is_same_v<T&, decltype(v)>, \"\" );\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(1));\r\n        assert(&v == &*opt);\r\n    }\r\n    return true;\r\n}\r\n\r\n\r\ntemplate <class T>\r\nconstexpr bool test_multi_arg()\r\n{\r\n    test_one_arg<T>();\r\n    using Opt = std::optional<T>;\r\n    {\r\n        Opt opt;\r\n        auto &v = opt.emplace(101, 41);\r\n        static_assert( std::is_same_v<T&, decltype(v)>, \"\" );\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(   v == T(101, 41));\r\n        assert(*opt == T(101, 41));\r\n    }\r\n    {\r\n        Opt opt;\r\n        auto &v = opt.emplace({1, 2, 3, 4});\r\n        static_assert( std::is_same_v<T&, decltype(v)>, \"\" );\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(  v == T(4)); // T sets its value to the size of the init list\r\n        assert(*opt == T(4));\r\n    }\r\n    {\r\n        Opt opt;\r\n        auto &v = opt.emplace({1, 2, 3, 4, 5}, 6);\r\n        static_assert( std::is_same_v<T&, decltype(v)>, \"\" );\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(  v == T(5)); // T sets its value to the size of the init list\r\n        assert(*opt == T(5)); // T sets its value to the size of the init list\r\n    }\r\n    return true;\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_on_test_type() {\r\n\r\n    T::reset();\r\n    optional<T> opt;\r\n    assert(T::alive == 0);\r\n    {\r\n        T::reset_constructors();\r\n        auto &v = opt.emplace();\r\n        static_assert( std::is_same_v<T&, decltype(v)>, \"\" );\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 1);\r\n        assert(T::default_constructed == 1);\r\n        assert(T::destroyed == 0);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T());\r\n        assert(&v == &*opt);\r\n    }\r\n    {\r\n        T::reset_constructors();\r\n        auto &v = opt.emplace();\r\n        static_assert( std::is_same_v<T&, decltype(v)>, \"\" );\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 1);\r\n        assert(T::default_constructed == 1);\r\n        assert(T::destroyed == 1);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T());\r\n        assert(&v == &*opt);\r\n    }\r\n    {\r\n        T::reset_constructors();\r\n        auto &v = opt.emplace(101);\r\n        static_assert( std::is_same_v<T&, decltype(v)>, \"\" );\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 1);\r\n        assert(T::value_constructed == 1);\r\n        assert(T::destroyed == 1);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(101));\r\n        assert(&v == &*opt);\r\n    }\r\n    {\r\n        T::reset_constructors();\r\n        auto &v = opt.emplace(-10, 99);\r\n        static_assert( std::is_same_v<T&, decltype(v)>, \"\" );\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 1);\r\n        assert(T::value_constructed == 1);\r\n        assert(T::destroyed == 1);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(-10, 99));\r\n        assert(&v == &*opt);\r\n    }\r\n    {\r\n        T::reset_constructors();\r\n        auto &v = opt.emplace(-10, 99);\r\n        static_assert( std::is_same_v<T&, decltype(v)>, \"\" );\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 1);\r\n        assert(T::value_constructed == 1);\r\n        assert(T::destroyed == 1);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(-10, 99));\r\n        assert(&v == &*opt);\r\n    }\r\n    {\r\n        T::reset_constructors();\r\n        auto &v = opt.emplace({-10, 99, 42, 1});\r\n        static_assert( std::is_same_v<T&, decltype(v)>, \"\" );\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 1);\r\n        assert(T::value_constructed == 1);\r\n        assert(T::destroyed == 1);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(4)); // size of the initializer list\r\n        assert(&v == &*opt);\r\n    }\r\n    {\r\n        T::reset_constructors();\r\n        auto &v = opt.emplace({-10, 99, 42, 1}, 42);\r\n        static_assert( std::is_same_v<T&, decltype(v)>, \"\" );\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 1);\r\n        assert(T::value_constructed == 1);\r\n        assert(T::destroyed == 1);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(4)); // size of the initializer list\r\n        assert(&v == &*opt);\r\n    }\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 bool test_empty_emplace() {\r\n  optional<const int> opt;\r\n  auto& v = opt.emplace(42);\r\n  static_assert(std::is_same_v<const int&, decltype(v)>, \"\");\r\n  assert(*opt == 42);\r\n  assert(v == 42);\r\n  opt.emplace();\r\n  assert(*opt == 0);\r\n  return true;\r\n}\r\n\r\nint run_test()\r\n{\r\n    {\r\n        test_on_test_type<TestTypes::TestType>();\r\n        test_on_test_type<ExplicitTestTypes::TestType>();\r\n    }\r\n    {\r\n        using T = int;\r\n        test_one_arg<T>();\r\n        test_one_arg<const T>();\r\n#if TEST_STD_VER > 17\r\n        static_assert(test_one_arg<T>());\r\n        static_assert(test_one_arg<const T>());\r\n#endif\r\n    }\r\n    {\r\n        using T = ConstexprTestTypes::TestType;\r\n        test_multi_arg<T>();\r\n#if TEST_STD_VER > 17\r\n        static_assert(test_multi_arg<T>());\r\n#endif\r\n    }\r\n    {\r\n        using T = ExplicitConstexprTestTypes::TestType;\r\n        test_multi_arg<T>();\r\n#if TEST_STD_VER > 17\r\n        static_assert(test_multi_arg<T>());\r\n#endif\r\n    }\r\n    {\r\n        using T = TrivialTestTypes::TestType;\r\n        test_multi_arg<T>();\r\n#if TEST_STD_VER > 17\r\n        static_assert(test_multi_arg<T>());\r\n#endif\r\n    }\r\n    {\r\n        using T = ExplicitTrivialTestTypes::TestType;\r\n        test_multi_arg<T>();\r\n#if TEST_STD_VER > 17\r\n        static_assert(test_multi_arg<T>());\r\n#endif\r\n    }\r\n    {\r\n        test_empty_emplace();\r\n#if TEST_STD_VER > 17\r\n        static_assert(test_empty_emplace());\r\n#endif\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    Y::dtor_called = false;\r\n    {\r\n        Y y;\r\n        optional<Y> opt(y);\r\n        try\r\n        {\r\n            assert(static_cast<bool>(opt) == true);\r\n            assert(Y::dtor_called == false);\r\n            auto &v = opt.emplace(1);\r\n            static_assert( std::is_same_v<Y&, decltype(v)>, \"\" );\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 6);\r\n            assert(static_cast<bool>(opt) == false);\r\n            assert(Y::dtor_called == true);\r\n        }\r\n    }\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace assign::emplace\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.assign/emplace.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.assign/emplace_initializer_list.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class U, class... Args>\r\n//   T& optional<T>::emplace(initializer_list<U> il, Args&&... args);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n#include <vector>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace assign::emplace_initializer_list {\r\nusing std::optional;\r\n\r\nclass X\r\n{\r\n    int i_;\r\n    int j_ = 0;\r\n    bool* dtor_called_;\r\npublic:\r\n    constexpr X(bool& dtor_called) : i_(0), dtor_called_(&dtor_called) {}\r\n    constexpr X(int i, bool& dtor_called) : i_(i), dtor_called_(&dtor_called) {}\r\n    constexpr X(std::initializer_list<int> il, bool& dtor_called)\r\n    : i_(il.begin()[0]), j_(il.begin()[1]), dtor_called_(&dtor_called) {}\r\n    X(const X&) = default;\r\n    X& operator=(const X&) = default;\r\n    TEST_CONSTEXPR_CXX20 ~X() {*dtor_called_ = true;}\r\n\r\n    friend constexpr bool operator==(const X& x, const X& y)\r\n        {return x.i_ == y.i_ && x.j_ == y.j_;}\r\n};\r\n\r\nclass Y\r\n{\r\n    int i_;\r\n    int j_ = 0;\r\npublic:\r\n    constexpr Y() : i_(0) {}\r\n    constexpr Y(int i) : i_(i) {}\r\n    constexpr Y(std::initializer_list<int> il) : i_(il.begin()[0]), j_(il.begin()[1]) {}\r\n\r\n    friend constexpr bool operator==(const Y& x, const Y& y)\r\n        {return x.i_ == y.i_ && x.j_ == y.j_;}\r\n};\r\n\r\nclass Z\r\n{\r\n    int i_;\r\n    int j_ = 0;\r\npublic:\r\n    static bool dtor_called;\r\n    Z() : i_(0) {}\r\n    Z(int i) : i_(i) {}\r\n    Z(std::initializer_list<int> il) : i_(il.begin()[0]), j_(il.begin()[1])\r\n        { TEST_THROW(6);}\r\n    Z(const Z&) = default;\r\n    Z& operator=(const Z&) = default;\r\n    ~Z() {dtor_called = true;}\r\n\r\n    friend bool operator==(const Z& x, const Z& y)\r\n        {return x.i_ == y.i_ && x.j_ == y.j_;}\r\n};\r\n\r\nbool Z::dtor_called = false;\r\n\r\nTEST_CONSTEXPR_CXX20 bool check_X()\r\n{\r\n    bool dtor_called = false;\r\n    X x(dtor_called);\r\n    optional<X> opt(x);\r\n    assert(dtor_called == false);\r\n    auto &v = opt.emplace({1, 2}, dtor_called);\r\n    static_assert( std::is_same_v<X&, decltype(v)>, \"\" );\r\n    assert(dtor_called);\r\n    assert(*opt == X({1, 2}, dtor_called));\r\n    assert(&v == &*opt);\r\n    return true;\r\n}\r\n\r\nTEST_CONSTEXPR_CXX20 bool check_Y()\r\n{\r\n    optional<Y> opt;\r\n    auto &v = opt.emplace({1, 2});\r\n    static_assert( std::is_same_v<Y&, decltype(v)>, \"\" );\r\n    assert(static_cast<bool>(opt) == true);\r\n    assert(*opt == Y({1, 2}));\r\n    assert(&v == &*opt);\r\n    return true;\r\n}\r\n\r\nint run_test()\r\n{\r\n    {\r\n        check_X();\r\n#if TEST_STD_VER > 17\r\n        static_assert(check_X());\r\n#endif\r\n    }\r\n    {\r\n        optional<std::vector<int>> opt;\r\n        auto &v = opt.emplace({1, 2, 3}, std::allocator<int>());\r\n        static_assert( std::is_same_v<std::vector<int>&, decltype(v)>, \"\" );\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == std::vector<int>({1, 2, 3}));\r\n        assert(&v == &*opt);\r\n    }\r\n    {\r\n        check_Y();\r\n#if TEST_STD_VER > 17\r\n        static_assert(check_Y());\r\n#endif\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        Z z;\r\n        optional<Z> opt(z);\r\n        try\r\n        {\r\n            assert(static_cast<bool>(opt) == true);\r\n            assert(Z::dtor_called == false);\r\n            auto &v = opt.emplace({1, 2});\r\n            static_assert( std::is_same_v<Z&, decltype(v)>, \"\" );\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 6);\r\n            assert(static_cast<bool>(opt) == false);\r\n            assert(Z::dtor_called == true);\r\n        }\r\n    }\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace assign::emplace_initializer_list\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.assign/emplace_initializer_list.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.assign/move.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr optional<T>& operator=(optional<T>&& rhs)\r\n//     noexcept(is_nothrow_move_assignable<T>::value &&\r\n//              is_nothrow_move_constructible<T>::value);\r\n\r\n#include <optional>\r\n#include <cassert>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include \"test_macros.h\"\r\n#include \"archetypes.h\"\r\n\r\nnamespace assign::move {\r\nusing std::optional;\r\n\r\nstruct X\r\n{\r\n    static bool throw_now;\r\n    static int alive;\r\n\r\n    X() { ++alive; }\r\n    X(X&&)\r\n    {\r\n        if (throw_now)\r\n            TEST_THROW(6);\r\n        ++alive;\r\n    }\r\n\r\n    X& operator=(X&&)\r\n    {\r\n        if (throw_now)\r\n            TEST_THROW(42);\r\n        return *this;\r\n    }\r\n\r\n    ~X() { assert(alive > 0); --alive; }\r\n};\r\n\r\nstruct Y {};\r\n\r\nbool X::throw_now = false;\r\nint X::alive = 0;\r\n\r\n\r\ntemplate <class Tp>\r\nconstexpr bool assign_empty(optional<Tp>&& lhs) {\r\n    optional<Tp> rhs;\r\n    lhs = std::move(rhs);\r\n    return !lhs.has_value() && !rhs.has_value();\r\n}\r\n\r\ntemplate <class Tp>\r\nconstexpr bool assign_value(optional<Tp>&& lhs) {\r\n    optional<Tp> rhs(101);\r\n    lhs = std::move(rhs);\r\n    return lhs.has_value() && rhs.has_value() && *lhs == Tp{101};\r\n}\r\n\r\nint run_test()\r\n{\r\n    {\r\n        static_assert(std::is_nothrow_move_assignable<optional<int>>::value, \"\");\r\n        optional<int> opt;\r\n        constexpr optional<int> opt2;\r\n        opt = std::move(opt2);\r\n        static_assert(static_cast<bool>(opt2) == false, \"\");\r\n        assert(static_cast<bool>(opt) == static_cast<bool>(opt2));\r\n    }\r\n    {\r\n        optional<int> opt;\r\n        constexpr optional<int> opt2(2);\r\n        opt = std::move(opt2);\r\n        static_assert(static_cast<bool>(opt2) == true, \"\");\r\n        static_assert(*opt2 == 2, \"\");\r\n        assert(static_cast<bool>(opt) == static_cast<bool>(opt2));\r\n        assert(*opt == *opt2);\r\n    }\r\n    {\r\n        optional<int> opt(3);\r\n        constexpr optional<int> opt2;\r\n        opt = std::move(opt2);\r\n        static_assert(static_cast<bool>(opt2) == false, \"\");\r\n        assert(static_cast<bool>(opt) == static_cast<bool>(opt2));\r\n    }\r\n    {\r\n        using T = TestTypes::TestType;\r\n        T::reset();\r\n        optional<T> opt(3);\r\n        optional<T> opt2;\r\n        assert(T::alive == 1);\r\n        opt = std::move(opt2);\r\n        assert(T::alive == 0);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        assert(static_cast<bool>(opt) == static_cast<bool>(opt2));\r\n    }\r\n    {\r\n        optional<int> opt(3);\r\n        constexpr optional<int> opt2(2);\r\n        opt = std::move(opt2);\r\n        static_assert(static_cast<bool>(opt2) == true, \"\");\r\n        static_assert(*opt2 == 2, \"\");\r\n        assert(static_cast<bool>(opt) == static_cast<bool>(opt2));\r\n        assert(*opt == *opt2);\r\n    }\r\n    {\r\n        using O = optional<int>;\r\n        static_assert(assign_empty(O{42}));\r\n        static_assert(assign_value(O{42}));\r\n        assert(assign_empty(O{42}));\r\n        assert(assign_value(O{42}));\r\n    }\r\n    {\r\n        using O = optional<TrivialTestTypes::TestType>;\r\n        static_assert(assign_empty(O{42}));\r\n        static_assert(assign_value(O{42}));\r\n        assert(assign_empty(O{42}));\r\n        assert(assign_value(O{42}));\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        static_assert(!std::is_nothrow_move_assignable<optional<X>>::value, \"\");\r\n        X::alive = 0;\r\n        X::throw_now = false;\r\n        optional<X> opt;\r\n        optional<X> opt2(X{});\r\n        assert(X::alive == 1);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        try\r\n        {\r\n            X::throw_now = true;\r\n            opt = std::move(opt2);\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 6);\r\n            assert(static_cast<bool>(opt) == false);\r\n        }\r\n        assert(X::alive == 1);\r\n    }\r\n    assert(X::alive == 0);\r\n    {\r\n        static_assert(!std::is_nothrow_move_assignable<optional<X>>::value, \"\");\r\n        X::throw_now = false;\r\n        optional<X> opt(X{});\r\n        optional<X> opt2(X{});\r\n        assert(X::alive == 2);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        try\r\n        {\r\n            X::throw_now = true;\r\n            opt = std::move(opt2);\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 42);\r\n            assert(static_cast<bool>(opt) == true);\r\n        }\r\n        assert(X::alive == 2);\r\n    }\r\n    assert(X::alive == 0);\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        static_assert(std::is_nothrow_move_assignable<optional<Y>>::value, \"\");\r\n    }\r\n    {\r\n        struct ThrowsMove {\r\n            ThrowsMove() noexcept {}\r\n            ThrowsMove(ThrowsMove const&) noexcept {}\r\n            ThrowsMove(ThrowsMove &&) noexcept(false) {}\r\n            ThrowsMove& operator=(ThrowsMove const&) noexcept { return *this; }\r\n            ThrowsMove& operator=(ThrowsMove &&) noexcept { return *this; }\r\n        };\r\n        static_assert(!std::is_nothrow_move_assignable<optional<ThrowsMove>>::value, \"\");\r\n        struct ThrowsMoveAssign {\r\n            ThrowsMoveAssign() noexcept {}\r\n            ThrowsMoveAssign(ThrowsMoveAssign const&) noexcept {}\r\n            ThrowsMoveAssign(ThrowsMoveAssign &&) noexcept {}\r\n            ThrowsMoveAssign& operator=(ThrowsMoveAssign const&) noexcept { return *this; }\r\n            ThrowsMoveAssign& operator=(ThrowsMoveAssign &&) noexcept(false) { return *this; }\r\n        };\r\n        static_assert(!std::is_nothrow_move_assignable<optional<ThrowsMoveAssign>>::value, \"\");\r\n        struct NoThrowMove {\r\n            NoThrowMove() noexcept(false) {}\r\n            NoThrowMove(NoThrowMove const&) noexcept(false) {}\r\n            NoThrowMove(NoThrowMove &&) noexcept {}\r\n            NoThrowMove& operator=(NoThrowMove const&) noexcept { return *this; }\r\n            NoThrowMove& operator=(NoThrowMove&&) noexcept { return *this; }\r\n        };\r\n        static_assert(std::is_nothrow_move_assignable<optional<NoThrowMove>>::value, \"\");\r\n    }\r\n    return 0;\r\n}\r\n} // namespace assign::move\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.assign/move.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.assign/nullopt_t.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// optional<T>& operator=(nullopt_t) noexcept;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"archetypes.h\"\r\n\r\nnamespace assign::nullopt {\r\nusing std::optional;\r\nusing std::nullopt_t;\r\nusing std::nullopt;\r\n\r\nTEST_CONSTEXPR_CXX20 bool test()\r\n{\r\n    enum class State { inactive, constructed, destroyed };\r\n    State state = State::inactive;\r\n\r\n    struct StateTracker {\r\n      TEST_CONSTEXPR_CXX20 StateTracker(State& s)\r\n      : state_(&s)\r\n      {\r\n        s = State::constructed;\r\n      }\r\n      TEST_CONSTEXPR_CXX20 ~StateTracker() { *state_ = State::destroyed; }\r\n\r\n      State* state_;\r\n    };\r\n    {\r\n        optional<int> opt;\r\n        static_assert(noexcept(opt = nullopt) == true, \"\");\r\n        opt = nullopt;\r\n        assert(static_cast<bool>(opt) == false);\r\n    }\r\n    {\r\n        optional<int> opt(3);\r\n        opt = nullopt;\r\n        assert(static_cast<bool>(opt) == false);\r\n    }\r\n    {\r\n        optional<StateTracker> opt;\r\n        opt = nullopt;\r\n        assert(state == State::inactive);\r\n        assert(static_cast<bool>(opt) == false);\r\n    }\r\n    {\r\n        optional<StateTracker> opt(state);\r\n        assert(state == State::constructed);\r\n        opt = nullopt;\r\n        assert(state == State::destroyed);\r\n        assert(static_cast<bool>(opt) == false);\r\n    }\r\n    return true;\r\n}\r\n\r\n\r\nint run_test()\r\n{\r\n#if TEST_STD_VER > 17\r\n    static_assert(test());\r\n#endif\r\n    test();\r\n    using TT = TestTypes::TestType;\r\n    TT::reset();\r\n    {\r\n        optional<TT> opt;\r\n        static_assert(noexcept(opt = nullopt) == true, \"\");\r\n        assert(TT::destroyed == 0);\r\n        opt = nullopt;\r\n        assert(TT::constructed == 0);\r\n        assert(TT::alive == 0);\r\n        assert(TT::destroyed == 0);\r\n        assert(static_cast<bool>(opt) == false);\r\n    }\r\n    assert(TT::alive == 0);\r\n    assert(TT::destroyed == 0);\r\n    TT::reset();\r\n    {\r\n        optional<TT> opt(42);\r\n        assert(TT::destroyed == 0);\r\n        TT::reset_constructors();\r\n        opt = nullopt;\r\n        assert(TT::constructed == 0);\r\n        assert(TT::alive == 0);\r\n        assert(TT::destroyed == 1);\r\n        assert(static_cast<bool>(opt) == false);\r\n    }\r\n    assert(TT::alive == 0);\r\n    assert(TT::destroyed == 1);\r\n    TT::reset();\r\n\r\n  return 0;\r\n}\r\n} // namespace assign::nullopt\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.assign/nullopt_t.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.assign/optional_U.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// From LWG2451:\r\n// template <class U>\r\n// optional<T>& operator=(optional<U>&& rhs);\r\n\r\n#include <optional>\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <memory>\r\n#include <type_traits>\r\n\r\n#include \"test_macros.h\"\r\n#include \"archetypes.h\"\r\n\r\nnamespace assign::optional_U {\r\nusing std::optional;\r\n\r\nstruct X\r\n{\r\n    static bool throw_now;\r\n\r\n    X() = default;\r\n    X(int &&)\r\n    {\r\n        if (throw_now)\r\n            TEST_THROW(6);\r\n    }\r\n};\r\n\r\nbool X::throw_now = false;\r\n\r\nstruct Y1\r\n{\r\n    Y1() = default;\r\n    Y1(const int&) {}\r\n    Y1& operator=(const Y1&) = delete;\r\n};\r\n\r\nstruct Y2\r\n{\r\n    Y2() = default;\r\n    Y2(const int&) = delete;\r\n    Y2& operator=(const int&) { return *this; }\r\n};\r\n\r\nstruct B { virtual ~B() = default; };\r\nclass D : public B {};\r\n\r\n\r\ntemplate <class T>\r\nstruct AssignableFrom {\r\n  static int type_constructed;\r\n  static int type_assigned;\r\nstatic int int_constructed;\r\n  static int int_assigned;\r\n\r\n  static void reset() {\r\n      type_constructed = int_constructed = 0;\r\n      type_assigned = int_assigned = 0;\r\n  }\r\n\r\n  AssignableFrom() = default;\r\n\r\n  explicit AssignableFrom(T) { ++type_constructed; }\r\n  AssignableFrom& operator=(T) { ++type_assigned; return *this; }\r\n\r\n  AssignableFrom(int) { ++int_constructed; }\r\n  AssignableFrom& operator=(int) { ++int_assigned; return *this; }\r\nprivate:\r\n  AssignableFrom(AssignableFrom const&) = delete;\r\n  AssignableFrom& operator=(AssignableFrom const&) = delete;\r\n};\r\n\r\ntemplate <class T> int AssignableFrom<T>::type_constructed = 0;\r\ntemplate <class T> int AssignableFrom<T>::type_assigned = 0;\r\ntemplate <class T> int AssignableFrom<T>::int_constructed = 0;\r\ntemplate <class T> int AssignableFrom<T>::int_assigned = 0;\r\n\r\nvoid test_with_test_type() {\r\n    using T = TestTypes::TestType;\r\n    T::reset();\r\n    { // non-empty to empty\r\n        T::reset_constructors();\r\n        optional<T> opt;\r\n        optional<int> other(42);\r\n        opt = std::move(other);\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 1);\r\n        assert(T::value_constructed == 1);\r\n        assert(T::assigned == 0);\r\n        assert(T::destroyed == 0);\r\n        assert(static_cast<bool>(other) == true);\r\n        assert(*other == 42);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(42));\r\n    }\r\n    assert(T::alive == 0);\r\n    { // non-empty to non-empty\r\n        optional<T> opt(101);\r\n        optional<int> other(42);\r\n        T::reset_constructors();\r\n        opt = std::move(other);\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 0);\r\n        assert(T::assigned == 1);\r\n        assert(T::value_assigned == 1);\r\n        assert(T::destroyed == 0);\r\n        assert(static_cast<bool>(other) == true);\r\n        assert(*other == 42);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == T(42));\r\n    }\r\n    assert(T::alive == 0);\r\n    { // empty to non-empty\r\n        optional<T> opt(101);\r\n        optional<int> other;\r\n        T::reset_constructors();\r\n        opt = std::move(other);\r\n        assert(T::alive == 0);\r\n        assert(T::constructed == 0);\r\n        assert(T::assigned == 0);\r\n        assert(T::destroyed == 1);\r\n        assert(static_cast<bool>(other) == false);\r\n        assert(static_cast<bool>(opt) == false);\r\n    }\r\n    assert(T::alive == 0);\r\n    { // empty to empty\r\n        optional<T> opt;\r\n        optional<int> other;\r\n        T::reset_constructors();\r\n        opt = std::move(other);\r\n        assert(T::alive == 0);\r\n        assert(T::constructed == 0);\r\n        assert(T::assigned == 0);\r\n        assert(T::destroyed == 0);\r\n        assert(static_cast<bool>(other) == false);\r\n        assert(static_cast<bool>(opt) == false);\r\n    }\r\n    assert(T::alive == 0);\r\n}\r\n\r\n\r\nvoid test_ambiguous_assign() {\r\n    using OptInt = std::optional<int>;\r\n    {\r\n        using T = AssignableFrom<OptInt&&>;\r\n        T::reset();\r\n        {\r\n            OptInt a(42);\r\n            std::optional<T> t;\r\n            t = std::move(a);\r\n            assert(T::type_constructed == 1);\r\n            assert(T::type_assigned == 0);\r\n            assert(T::int_constructed == 0);\r\n            assert(T::int_assigned == 0);\r\n        }\r\n        {\r\n            using Opt = std::optional<T>;\r\n            static_assert(!std::is_assignable<Opt&, const OptInt&&>::value, \"\");\r\n            static_assert(!std::is_assignable<Opt&, const OptInt&>::value, \"\");\r\n            static_assert(!std::is_assignable<Opt&, OptInt&>::value, \"\");\r\n        }\r\n    }\r\n    {\r\n        using T = AssignableFrom<OptInt const&&>;\r\n        T::reset();\r\n        {\r\n            const OptInt a(42);\r\n            std::optional<T> t;\r\n            t = std::move(a);\r\n            assert(T::type_constructed == 1);\r\n            assert(T::type_assigned == 0);\r\n            assert(T::int_constructed == 0);\r\n            assert(T::int_assigned == 0);\r\n        }\r\n        T::reset();\r\n        {\r\n            OptInt a(42);\r\n            std::optional<T> t;\r\n            t = std::move(a);\r\n            assert(T::type_constructed == 1);\r\n            assert(T::type_assigned == 0);\r\n            assert(T::int_constructed == 0);\r\n            assert(T::int_assigned == 0);\r\n        }\r\n        {\r\n            using Opt = std::optional<T>;\r\n            static_assert(std::is_assignable<Opt&, OptInt&&>::value, \"\");\r\n            static_assert(!std::is_assignable<Opt&, const OptInt&>::value, \"\");\r\n            static_assert(!std::is_assignable<Opt&, OptInt&>::value, \"\");\r\n        }\r\n    }\r\n}\r\n\r\n\r\nTEST_CONSTEXPR_CXX20 bool test()\r\n{\r\n    {\r\n        optional<int> opt;\r\n        optional<short> opt2;\r\n        opt = std::move(opt2);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        assert(static_cast<bool>(opt) == static_cast<bool>(opt2));\r\n    }\r\n    {\r\n        optional<int> opt;\r\n        optional<short> opt2(short{2});\r\n        opt = std::move(opt2);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        assert(static_cast<bool>(opt) == static_cast<bool>(opt2));\r\n        assert(*opt == *opt2);\r\n    }\r\n    {\r\n        optional<int> opt(3);\r\n        optional<short> opt2;\r\n        opt = std::move(opt2);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        assert(static_cast<bool>(opt) == static_cast<bool>(opt2));\r\n    }\r\n    {\r\n        optional<int> opt(3);\r\n        optional<short> opt2(short{2});\r\n        opt = std::move(opt2);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        assert(static_cast<bool>(opt) == static_cast<bool>(opt2));\r\n        assert(*opt == *opt2);\r\n    }\r\n\r\n    enum class state_t { inactive, constructed, copy_assigned, move_assigned };\r\n    class StateTracker {\r\n    public:\r\n      constexpr StateTracker(state_t& s)\r\n      : state_(&s)\r\n      {\r\n        *state_ = state_t::constructed;\r\n      }\r\n\r\n      StateTracker(StateTracker&&) = default;\r\n      StateTracker(StateTracker const&) = default;\r\n\r\n      constexpr StateTracker& operator=(StateTracker&& other) noexcept\r\n      {\r\n        *state_ = state_t::inactive;\r\n        state_ = other.state_;\r\n        *state_ = state_t::move_assigned;\r\n        other.state_ = nullptr;\r\n        return *this;\r\n      }\r\n\r\n      constexpr StateTracker& operator=(StateTracker const& other) noexcept\r\n      {\r\n        *state_ = state_t::inactive;\r\n        state_ = other.state_;\r\n        *state_ = state_t::copy_assigned;\r\n        return *this;\r\n      }\r\n    private:\r\n      state_t* state_;\r\n    };\r\n    {\r\n      auto state = std::array{state_t::inactive, state_t::inactive};\r\n      auto opt1 = std::optional<StateTracker>(state[0]);\r\n      assert(state[0] == state_t::constructed);\r\n\r\n      auto opt2 = std::optional<StateTracker>(state[1]);\r\n      assert(state[1] == state_t::constructed);\r\n\r\n      opt1 = std::move(opt2);\r\n      assert(state[0] == state_t::inactive);\r\n      assert(state[1] == state_t::move_assigned);\r\n    }\r\n    {\r\n      auto state = std::array{state_t::inactive, state_t::inactive};\r\n      auto opt1 = std::optional<StateTracker>(state[0]);\r\n      assert(state[0] == state_t::constructed);\r\n\r\n      auto opt2 = std::optional<StateTracker>(state[1]);\r\n      assert(state[1] == state_t::constructed);\r\n\r\n      opt1 = opt2;\r\n      assert(state[0] == state_t::inactive);\r\n      assert(state[1] == state_t::copy_assigned);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n\r\nint run_test()\r\n{\r\n#if TEST_STD_VER > 17\r\n    static_assert(test());\r\n#endif\r\n    test_with_test_type();\r\n    test_ambiguous_assign();\r\n    test();\r\n    {\r\n        optional<std::unique_ptr<B>> opt;\r\n        optional<std::unique_ptr<D>> other(new D());\r\n        opt = std::move(other);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(static_cast<bool>(other) == true);\r\n        assert(opt->get() != nullptr);\r\n        assert(other->get() == nullptr);\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        optional<X> opt;\r\n        optional<int> opt2(42);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        try\r\n        {\r\n            X::throw_now = true;\r\n            opt = std::move(opt2);\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 6);\r\n            assert(static_cast<bool>(opt) == false);\r\n        }\r\n    }\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace assign::optional_U\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.assign/optional_U.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.ctor/const_optional_U.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class U>\r\n//   optional(const optional<U>& rhs);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace ctor::const_optional_U {\r\nusing std::optional;\r\n\r\ntemplate <class T, class U>\r\nTEST_CONSTEXPR_CXX20 void\r\ntest(const optional<U>& rhs, bool is_going_to_throw = false)\r\n{\r\n    bool rhs_engaged = static_cast<bool>(rhs);\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    try\r\n    {\r\n        optional<T> lhs = rhs;\r\n        assert(is_going_to_throw == false);\r\n        assert(static_cast<bool>(lhs) == rhs_engaged);\r\n        if (rhs_engaged)\r\n            assert(*lhs == *rhs);\r\n    }\r\n    catch (int i)\r\n    {\r\n        assert(i == 6);\r\n    }\r\n#else\r\n    if (is_going_to_throw) return;\r\n    optional<T> lhs = rhs;\r\n    assert(static_cast<bool>(lhs) == rhs_engaged);\r\n    if (rhs_engaged)\r\n        assert(*lhs == *rhs);\r\n#endif\r\n}\r\n\r\nclass X\r\n{\r\n    int i_;\r\npublic:\r\n    constexpr X(int i) : i_(i) {}\r\n    constexpr X(const X& x) : i_(x.i_) {}\r\n    TEST_CONSTEXPR_CXX20 ~X() {i_ = 0;}\r\n    friend constexpr bool operator==(const X& x, const X& y) {return x.i_ == y.i_;}\r\n};\r\n\r\nclass Y\r\n{\r\n    int i_;\r\npublic:\r\n    constexpr Y(int i) : i_(i) {}\r\n\r\n    friend constexpr bool operator==(const Y& x, const Y& y) {return x.i_ == y.i_;}\r\n};\r\n\r\nint count = 0;\r\n\r\nclass Z\r\n{\r\n    int i_;\r\npublic:\r\n    Z(int i) : i_(i) {TEST_THROW(6);}\r\n\r\n    friend bool operator==(const Z& x, const Z& y) {return x.i_ == y.i_;}\r\n};\r\n\r\ntemplate<class T, class U>\r\nconstexpr bool test_all()\r\n{\r\n  {\r\n    optional<U> rhs;\r\n    test<T>(rhs);\r\n  }\r\n  {\r\n    optional<U> rhs(U{3});\r\n    test<T>(rhs);\r\n  }\r\n  return true;\r\n}\r\n\r\nint run_test()\r\n{\r\n    test_all<int, short>();\r\n    test_all<X, int>();\r\n    test_all<Y, int>();\r\n#if TEST_STD_VER > 17\r\n    static_assert(test_all<int, short>());\r\n    static_assert(test_all<X, int>());\r\n    static_assert(test_all<Y, int>());\r\n#endif\r\n    {\r\n        typedef Z T;\r\n        typedef int U;\r\n        optional<U> rhs;\r\n        test<T>(rhs);\r\n    }\r\n    {\r\n        typedef Z T;\r\n        typedef int U;\r\n        optional<U> rhs(U{3});\r\n        test<T>(rhs, true);\r\n    }\r\n\r\n    static_assert(!(std::is_constructible<optional<X>, const optional<Y>&>::value), \"\");\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::const_optional_U\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.ctor/const_optional_U.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.ctor/const_T.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr optional(const T& v);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"archetypes.h\"\r\n\r\nnamespace ctor::const_T {\r\nusing std::optional;\r\n\r\nint run_test()\r\n{\r\n    {\r\n        typedef int T;\r\n        constexpr T t(5);\r\n        constexpr optional<T> opt(t);\r\n        static_assert(static_cast<bool>(opt) == true, \"\");\r\n        static_assert(*opt == 5, \"\");\r\n\r\n        struct test_constexpr_ctor\r\n            : public optional<T>\r\n        {\r\n            constexpr test_constexpr_ctor(const T&) {}\r\n        };\r\n\r\n    }\r\n    {\r\n        typedef double T;\r\n        constexpr T t(3);\r\n        constexpr optional<T> opt(t);\r\n        static_assert(static_cast<bool>(opt) == true, \"\");\r\n        static_assert(*opt == 3, \"\");\r\n\r\n        struct test_constexpr_ctor\r\n            : public optional<T>\r\n        {\r\n            constexpr test_constexpr_ctor(const T&) {}\r\n        };\r\n\r\n    }\r\n    {\r\n        const int x = 42;\r\n        optional<const int> o(x);\r\n        assert(*o == x);\r\n    }\r\n    {\r\n        typedef TestTypes::TestType T;\r\n        T::reset();\r\n        const T t(3);\r\n        optional<T> opt = t;\r\n        assert(T::alive == 2);\r\n        assert(T::copy_constructed == 1);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(opt.value().value == 3);\r\n    }\r\n    {\r\n        typedef ExplicitTestTypes::TestType T;\r\n        static_assert(!std::is_convertible<T const&, optional<T>>::value, \"\");\r\n        T::reset();\r\n        const T t(3);\r\n        optional<T> opt(t);\r\n        assert(T::alive == 2);\r\n        assert(T::copy_constructed == 1);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(opt.value().value == 3);\r\n    }\r\n    {\r\n        typedef ConstexprTestTypes::TestType T;\r\n        constexpr T t(3);\r\n        constexpr optional<T> opt = {t};\r\n        static_assert(static_cast<bool>(opt) == true, \"\");\r\n        static_assert(opt.value().value == 3, \"\");\r\n\r\n        struct test_constexpr_ctor\r\n            : public optional<T>\r\n        {\r\n            constexpr test_constexpr_ctor(const T&) {}\r\n        };\r\n    }\r\n    {\r\n        typedef ExplicitConstexprTestTypes::TestType T;\r\n        static_assert(!std::is_convertible<const T&, optional<T>>::value, \"\");\r\n        constexpr T t(3);\r\n        constexpr optional<T> opt(t);\r\n        static_assert(static_cast<bool>(opt) == true, \"\");\r\n        static_assert(opt.value().value == 3, \"\");\r\n\r\n        struct test_constexpr_ctor\r\n            : public optional<T>\r\n        {\r\n            constexpr test_constexpr_ctor(const T&) {}\r\n        };\r\n\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        struct Z {\r\n            Z(int) {}\r\n            Z(const Z&) {throw 6;}\r\n        };\r\n        typedef Z T;\r\n        try\r\n        {\r\n            const T t(3);\r\n            optional<T> opt(t);\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 6);\r\n        }\r\n    }\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::const_T\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.ctor/const_T.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr optional(const optional<T>& rhs);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"archetypes.h\"\r\n\r\nnamespace ctor::copy {\r\nusing std::optional;\r\n\r\ntemplate <class T, class ...InitArgs>\r\nvoid test(InitArgs&&... args)\r\n{\r\n    const optional<T> rhs(std::forward<InitArgs>(args)...);\r\n    bool rhs_engaged = static_cast<bool>(rhs);\r\n    optional<T> lhs = rhs;\r\n    assert(static_cast<bool>(lhs) == rhs_engaged);\r\n    if (rhs_engaged)\r\n        assert(*lhs == *rhs);\r\n}\r\n\r\ntemplate <class T, class ...InitArgs>\r\nconstexpr bool constexpr_test(InitArgs&&... args)\r\n{\r\n    static_assert( std::is_trivially_copy_constructible_v<T>, \"\"); // requirement\r\n    const optional<T> rhs(std::forward<InitArgs>(args)...);\r\n    optional<T> lhs = rhs;\r\n    return (lhs.has_value() == rhs.has_value()) &&\r\n           (lhs.has_value() ? *lhs == *rhs : true);\r\n}\r\n\r\nvoid test_throwing_ctor() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    struct Z {\r\n        Z() : count(0) {}\r\n        Z(Z const& o) : count(o.count + 1)\r\n        { if (count == 2) throw 6; }\r\n        int count;\r\n    };\r\n    const Z z;\r\n    const optional<Z> rhs(z);\r\n    try\r\n    {\r\n        optional<Z> lhs(rhs);\r\n        assert(false);\r\n    }\r\n    catch (int i)\r\n    {\r\n        assert(i == 6);\r\n    }\r\n#endif\r\n}\r\n\r\ntemplate <class T, class ...InitArgs>\r\nvoid test_ref(InitArgs&&... args)\r\n{\r\n    const optional<T> rhs(std::forward<InitArgs>(args)...);\r\n    bool rhs_engaged = static_cast<bool>(rhs);\r\n    optional<T> lhs = rhs;\r\n    assert(static_cast<bool>(lhs) == rhs_engaged);\r\n    if (rhs_engaged)\r\n        assert(&(*lhs) == &(*rhs));\r\n}\r\n\r\n\r\nvoid test_reference_extension()\r\n{\r\n#if defined(_LIBCPP_VERSION) && 0 // TODO these extensions are currently disabled.\r\n    using T = TestTypes::TestType;\r\n    T::reset();\r\n    {\r\n        T t;\r\n        T::reset_constructors();\r\n        test_ref<T&>();\r\n        test_ref<T&>(t);\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 0);\r\n        assert(T::assigned == 0);\r\n        assert(T::destroyed == 0);\r\n    }\r\n    assert(T::destroyed == 1);\r\n    assert(T::alive == 0);\r\n    {\r\n        T t;\r\n        const T& ct = t;\r\n        T::reset_constructors();\r\n        test_ref<T const&>();\r\n        test_ref<T const&>(t);\r\n        test_ref<T const&>(ct);\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 0);\r\n        assert(T::assigned == 0);\r\n        assert(T::destroyed == 0);\r\n    }\r\n    assert(T::alive == 0);\r\n    assert(T::destroyed == 1);\r\n    {\r\n        static_assert(!std::is_copy_constructible<std::optional<T&&>>::value, \"\");\r\n        static_assert(!std::is_copy_constructible<std::optional<T const&&>>::value, \"\");\r\n    }\r\n#endif\r\n}\r\n\r\nint run_test()\r\n{\r\n    test<int>();\r\n    test<int>(3);\r\n    static_assert(constexpr_test<int>(), \"\" );\r\n    static_assert(constexpr_test<int>(3), \"\" );\r\n\r\n    {\r\n        const optional<const int> o(42);\r\n        optional<const int> o2(o);\r\n        assert(*o2 == 42);\r\n    }\r\n    {\r\n        using T = TestTypes::TestType;\r\n        T::reset();\r\n        const optional<T> rhs;\r\n        assert(T::alive == 0);\r\n        const optional<T> lhs(rhs);\r\n        assert(lhs.has_value() == false);\r\n        assert(T::alive == 0);\r\n    }\r\n    TestTypes::TestType::reset();\r\n    {\r\n        using T = TestTypes::TestType;\r\n        T::reset();\r\n        const optional<T> rhs(42);\r\n        assert(T::alive == 1);\r\n        assert(T::value_constructed == 1);\r\n        assert(T::copy_constructed == 0);\r\n        const optional<T> lhs(rhs);\r\n        assert(lhs.has_value());\r\n        assert(T::copy_constructed == 1);\r\n        assert(T::alive == 2);\r\n    }\r\n    TestTypes::TestType::reset();\r\n    {\r\n        using namespace ConstexprTestTypes;\r\n        test<TestType>();\r\n        test<TestType>(42);\r\n    }\r\n    {\r\n        using namespace TrivialTestTypes;\r\n        test<TestType>();\r\n        test<TestType>(42);\r\n    }\r\n    {\r\n        test_throwing_ctor();\r\n    }\r\n    {\r\n        test_reference_extension();\r\n    }\r\n    {\r\n        constexpr std::optional<int> o1{4};\r\n        constexpr std::optional<int> o2 = o1;\r\n        static_assert( *o2 == 4, \"\" );\r\n    }\r\n\r\n    // LWG3836 https://wg21.link/LWG3836\r\n    // std::optional<bool> conversion constructor optional(const optional<U>&)\r\n    // should take precedence over optional(U&&) with operator bool\r\n    {\r\n        std::optional<bool> o1(false);\r\n        std::optional<bool> o2(o1);\r\n        assert(!o2.value());\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::copy\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.ctor/deduct.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n// <optional>\r\n\r\n\r\n// template<class T>\r\n//   optional(T) -> optional<T>;\r\n\r\n#include <optional>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace ctor::deduct {\r\nstruct A {};\r\n\r\nint run_test()\r\n{\r\n//  Test the explicit deduction guides\r\n    {\r\n//  optional(T)\r\n    std::optional opt(5);\r\n    ASSERT_SAME_TYPE(decltype(opt), std::optional<int>);\r\n    assert(static_cast<bool>(opt));\r\n    assert(*opt == 5);\r\n    }\r\n\r\n    {\r\n//  optional(T)\r\n    std::optional opt(A{});\r\n    ASSERT_SAME_TYPE(decltype(opt), std::optional<A>);\r\n    assert(static_cast<bool>(opt));\r\n    }\r\n\r\n    {\r\n//  optional(const T&);\r\n    const int& source = 5;\r\n    std::optional opt(source);\r\n    ASSERT_SAME_TYPE(decltype(opt), std::optional<int>);\r\n    assert(static_cast<bool>(opt));\r\n    assert(*opt == 5);\r\n    }\r\n\r\n    {\r\n//  optional(T*);\r\n    const int* source = nullptr;\r\n    std::optional opt(source);\r\n    ASSERT_SAME_TYPE(decltype(opt), std::optional<const int*>);\r\n    assert(static_cast<bool>(opt));\r\n    assert(*opt == nullptr);\r\n    }\r\n\r\n    {\r\n//  optional(T[]);\r\n    int source[] = {1, 2, 3};\r\n    std::optional opt(source);\r\n    ASSERT_SAME_TYPE(decltype(opt), std::optional<int*>);\r\n    assert(static_cast<bool>(opt));\r\n    assert((*opt)[0] == 1);\r\n    }\r\n\r\n//  Test the implicit deduction guides\r\n    {\r\n//  optional(optional);\r\n    std::optional<char> source('A');\r\n    std::optional opt(source);\r\n    ASSERT_SAME_TYPE(decltype(opt), std::optional<char>);\r\n    assert(static_cast<bool>(opt) == static_cast<bool>(source));\r\n    assert(*opt == *source);\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::deduct\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.ctor/deduct.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.ctor/default.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr optional() noexcept;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"archetypes.h\"\r\n\r\nnamespace ctor::default_ {\r\nusing std::optional;\r\n\r\ntemplate <class Opt>\r\nvoid\r\ntest_constexpr()\r\n{\r\n    static_assert(std::is_nothrow_default_constructible<Opt>::value, \"\");\r\n    static_assert(std::is_trivially_destructible<Opt>::value, \"\");\r\n    static_assert(std::is_trivially_destructible<typename Opt::value_type>::value, \"\");\r\n\r\n    constexpr Opt opt;\r\n    static_assert(static_cast<bool>(opt) == false, \"\");\r\n\r\n    struct test_constexpr_ctor\r\n        : public Opt\r\n    {\r\n        constexpr test_constexpr_ctor() {}\r\n    };\r\n}\r\n\r\ntemplate <class Opt>\r\nvoid\r\ntest()\r\n{\r\n    static_assert(std::is_nothrow_default_constructible<Opt>::value, \"\");\r\n    static_assert(!std::is_trivially_destructible<Opt>::value, \"\");\r\n    static_assert(!std::is_trivially_destructible<typename Opt::value_type>::value, \"\");\r\n    {\r\n        Opt opt;\r\n        assert(static_cast<bool>(opt) == false);\r\n    }\r\n    {\r\n        const Opt opt;\r\n        assert(static_cast<bool>(opt) == false);\r\n    }\r\n\r\n    struct test_constexpr_ctor\r\n        : public Opt\r\n    {\r\n        constexpr test_constexpr_ctor() {}\r\n    };\r\n}\r\n\r\nint run_test()\r\n{\r\n    test_constexpr<optional<int>>();\r\n    test_constexpr<optional<int*>>();\r\n    test_constexpr<optional<ImplicitTypes::NoCtors>>();\r\n    test_constexpr<optional<NonTrivialTypes::NoCtors>>();\r\n    test_constexpr<optional<NonConstexprTypes::NoCtors>>();\r\n    test<optional<NonLiteralTypes::NoCtors>>();\r\n    // EXTENSIONS\r\n#if defined(_LIBCPP_VERSION) && 0 // TODO these extensions are currently disabled.\r\n    test_constexpr<optional<int&>>();\r\n    test_constexpr<optional<const int&>>();\r\n    test_constexpr<optional<int&>>();\r\n    test_constexpr<optional<NonLiteralTypes::NoCtors&>>();\r\n    test_constexpr<optional<NonLiteralTypes::NoCtors&&>>();\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::default_\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.ctor/default.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.ctor/empty_in_place_t_does_not_clobber.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr optional(in_place_t);\r\n\r\n// Test that the SFINAE \"is_constructible<value_type>\" isn't evaluated by the\r\n// in_place_t constructor with no arguments when the Clang is trying to check\r\n// copy constructor.\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"archetypes.h\"\r\n\r\nnamespace ctor::clobber {\r\nusing std::optional;\r\n\r\nstruct Wrapped {\r\n  struct Inner {\r\n    bool Dummy = true;\r\n  };\r\n  std::optional<Inner> inner;\r\n};\r\n\r\nint run_test() {\r\n  static_assert(std::is_default_constructible<Wrapped::Inner>::value, \"\");\r\n  Wrapped w;\r\n  w.inner.emplace();\r\n  assert(w.inner.has_value());\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::clobber\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.ctor/empty_in_place_t_does_not_clobber.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.ctor/explicit_const_optional_U.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class U>\r\n//   explicit optional(const optional<U>& rhs);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace ctor::explicit_const_optional_U {\r\nusing std::optional;\r\n\r\ntemplate <class T, class U>\r\nTEST_CONSTEXPR_CXX20 void\r\ntest(const optional<U>& rhs, bool is_going_to_throw = false)\r\n{\r\n    static_assert(!(std::is_convertible<const optional<U>&, optional<T>>::value), \"\");\r\n    bool rhs_engaged = static_cast<bool>(rhs);\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    try\r\n    {\r\n        optional<T> lhs(rhs);\r\n        assert(is_going_to_throw == false);\r\n        assert(static_cast<bool>(lhs) == rhs_engaged);\r\n        if (rhs_engaged)\r\n            assert(*lhs == T(*rhs));\r\n    }\r\n    catch (int i)\r\n    {\r\n        assert(i == 6);\r\n    }\r\n#else\r\n    if (is_going_to_throw) return;\r\n    optional<T> lhs(rhs);\r\n    assert(static_cast<bool>(lhs) == rhs_engaged);\r\n    if (rhs_engaged)\r\n        assert(*lhs == T(*rhs));\r\n#endif\r\n}\r\n\r\nclass X\r\n{\r\n    int i_;\r\npublic:\r\n    constexpr explicit X(int i) : i_(i) {}\r\n    constexpr X(const X& x) : i_(x.i_) {}\r\n    TEST_CONSTEXPR_CXX20 ~X() {i_ = 0;}\r\n    friend constexpr bool operator==(const X& x, const X& y) {return x.i_ == y.i_;}\r\n};\r\n\r\nclass Y\r\n{\r\n    int i_;\r\npublic:\r\n    constexpr explicit Y(int i) : i_(i) {}\r\n\r\n    friend constexpr bool operator==(const Y& x, const Y& y) {return x.i_ == y.i_;}\r\n};\r\n\r\nint count = 0;\r\n\r\nclass Z\r\n{\r\n    int i_;\r\npublic:\r\n    explicit Z(int i) : i_(i) {TEST_THROW(6);}\r\n\r\n    friend bool operator==(const Z& x, const Z& y) {return x.i_ == y.i_;}\r\n};\r\n\r\ntemplate<class T, class U>\r\nconstexpr bool test_all()\r\n{\r\n  {\r\n    optional<U> rhs;\r\n    test<T>(rhs);\r\n  }\r\n  {\r\n    optional<U> rhs(3);\r\n    test<T>(rhs);\r\n  }\r\n  return true;\r\n}\r\n\r\n\r\nint run_test()\r\n{\r\n    test_all<X, int>();\r\n    test_all<Y, int>();\r\n#if TEST_STD_VER > 17\r\n    static_assert(test_all<X, int>());\r\n    static_assert(test_all<Y, int>());\r\n#endif\r\n    {\r\n        typedef Z T;\r\n        typedef int U;\r\n        optional<U> rhs;\r\n        test<T>(rhs);\r\n    }\r\n    {\r\n        typedef Z T;\r\n        typedef int U;\r\n        optional<U> rhs(3);\r\n        test<T>(rhs, true);\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::explicit_const_optional_U\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.ctor/explicit_const_optional_U.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.ctor/explicit_optional_U.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class U>\r\n//   explicit optional(optional<U>&& rhs);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace ctor::explicit_optional_U {\r\nusing std::optional;\r\n\r\ntemplate <class T, class U>\r\nTEST_CONSTEXPR_CXX20 void test(optional<U>&& rhs, bool is_going_to_throw = false)\r\n{\r\n    static_assert(!(std::is_convertible<optional<U>&&, optional<T>>::value), \"\");\r\n    bool rhs_engaged = static_cast<bool>(rhs);\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    try\r\n    {\r\n        optional<T> lhs(std::move(rhs));\r\n        assert(is_going_to_throw == false);\r\n        assert(static_cast<bool>(lhs) == rhs_engaged);\r\n    }\r\n    catch (int i)\r\n    {\r\n        assert(i == 6);\r\n    }\r\n#else\r\n    if (is_going_to_throw) return;\r\n    optional<T> lhs(std::move(rhs));\r\n    assert(static_cast<bool>(lhs) == rhs_engaged);\r\n#endif\r\n}\r\n\r\nclass X\r\n{\r\n    int i_;\r\npublic:\r\n    constexpr explicit X(int i) : i_(i) {}\r\n    constexpr X(X&& x) : i_(x.i_) { x.i_ = 0; }\r\n    TEST_CONSTEXPR_CXX20 ~X() {i_ = 0;}\r\n    friend constexpr bool operator==(const X& x, const X& y) {return x.i_ == y.i_;}\r\n};\r\n\r\nint count = 0;\r\n\r\nclass Z\r\n{\r\npublic:\r\n    explicit Z(int) { TEST_THROW(6); }\r\n};\r\n\r\nTEST_CONSTEXPR_CXX20 bool test()\r\n{\r\n    {\r\n        optional<int> rhs;\r\n        test<X>(std::move(rhs));\r\n    }\r\n    {\r\n        optional<int> rhs(3);\r\n        test<X>(std::move(rhs));\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nint run_test()\r\n{\r\n#if TEST_STD_VER > 17\r\n    static_assert(test());\r\n#endif\r\n    test();\r\n    {\r\n        optional<int> rhs;\r\n        test<Z>(std::move(rhs));\r\n    }\r\n    {\r\n        optional<int> rhs(3);\r\n        test<Z>(std::move(rhs), true);\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::explicit_optional_U\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.ctor/explicit_optional_U.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.ctor/initializer_list.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class U, class... Args>\r\n//     constexpr\r\n//     explicit optional(in_place_t, initializer_list<U> il, Args&&... args);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <memory>\r\n#include <vector>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace ctor::initializer_list {\r\nusing std::optional;\r\nusing std::in_place_t;\r\nusing std::in_place;\r\n\r\nclass X\r\n{\r\n    int i_;\r\n    int j_ = 0;\r\npublic:\r\n    X() : i_(0) {}\r\n    X(int i) : i_(i) {}\r\n    X(int i, int j) : i_(i), j_(j) {}\r\n\r\n    ~X() {}\r\n\r\n    friend bool operator==(const X& x, const X& y)\r\n        {return x.i_ == y.i_ && x.j_ == y.j_;}\r\n};\r\n\r\nclass Y\r\n{\r\n    int i_;\r\n    int j_ = 0;\r\npublic:\r\n    constexpr Y() : i_(0) {}\r\n    constexpr Y(int i) : i_(i) {}\r\n    constexpr Y(std::initializer_list<int> il) : i_(il.begin()[0]), j_(il.begin()[1]) {}\r\n\r\n    friend constexpr bool operator==(const Y& x, const Y& y)\r\n        {return x.i_ == y.i_ && x.j_ == y.j_;}\r\n};\r\n\r\nclass Z\r\n{\r\n    int i_;\r\n    int j_ = 0;\r\npublic:\r\n    Z() : i_(0) {}\r\n    Z(int i) : i_(i) {}\r\n    Z(std::initializer_list<int> il) : i_(il.begin()[0]), j_(il.begin()[1])\r\n        {TEST_THROW(6);}\r\n\r\n    friend bool operator==(const Z& x, const Z& y)\r\n        {return x.i_ == y.i_ && x.j_ == y.j_;}\r\n};\r\n\r\nint run_test()\r\n{\r\n    {\r\n        static_assert(!std::is_constructible<X, std::initializer_list<int>&>::value, \"\");\r\n        static_assert(!std::is_constructible<optional<X>, std::initializer_list<int>&>::value, \"\");\r\n    }\r\n    {\r\n        optional<std::vector<int>> opt(in_place, {3, 1});\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert((*opt == std::vector<int>{3, 1}));\r\n        assert(opt->size() == 2);\r\n    }\r\n    {\r\n        optional<std::vector<int>> opt(in_place, {3, 1}, std::allocator<int>());\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert((*opt == std::vector<int>{3, 1}));\r\n        assert(opt->size() == 2);\r\n    }\r\n    {\r\n        static_assert(std::is_constructible<optional<Y>, std::initializer_list<int>&>::value, \"\");\r\n        constexpr optional<Y> opt(in_place, {3, 1});\r\n        static_assert(static_cast<bool>(opt) == true, \"\");\r\n        static_assert(*opt == Y{3, 1}, \"\");\r\n\r\n        struct test_constexpr_ctor\r\n            : public optional<Y>\r\n        {\r\n            constexpr test_constexpr_ctor(in_place_t, std::initializer_list<int> i)\r\n                : optional<Y>(in_place, i) {}\r\n        };\r\n\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        static_assert(std::is_constructible<optional<Z>, std::initializer_list<int>&>::value, \"\");\r\n        try\r\n        {\r\n            optional<Z> opt(in_place, {3, 1});\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 6);\r\n        }\r\n    }\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::initializer_list\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.ctor/initializer_list.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.ctor/in_place_t.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class... Args>\r\n//   constexpr explicit optional(in_place_t, Args&&... args);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace ctor::in_place {\r\nusing std::optional;\r\nusing std::in_place_t;\r\nusing std::in_place;\r\n\r\nclass X\r\n{\r\n    int i_;\r\n    int j_ = 0;\r\npublic:\r\n    X() : i_(0) {}\r\n    X(int i) : i_(i) {}\r\n    X(int i, int j) : i_(i), j_(j) {}\r\n\r\n    ~X() {}\r\n\r\n    friend bool operator==(const X& x, const X& y)\r\n        {return x.i_ == y.i_ && x.j_ == y.j_;}\r\n};\r\n\r\nclass Y\r\n{\r\n    int i_;\r\n    int j_ = 0;\r\npublic:\r\n    constexpr Y() : i_(0) {}\r\n    constexpr Y(int i) : i_(i) {}\r\n    constexpr Y(int i, int j) : i_(i), j_(j) {}\r\n\r\n    friend constexpr bool operator==(const Y& x, const Y& y)\r\n        {return x.i_ == y.i_ && x.j_ == y.j_;}\r\n};\r\n\r\nclass Z\r\n{\r\npublic:\r\n    Z(int) {TEST_THROW(6);}\r\n};\r\n\r\n\r\nint run_test()\r\n{\r\n    {\r\n        constexpr optional<int> opt(in_place, 5);\r\n        static_assert(static_cast<bool>(opt) == true, \"\");\r\n        static_assert(*opt == 5, \"\");\r\n\r\n        struct test_constexpr_ctor\r\n            : public optional<int>\r\n        {\r\n            constexpr test_constexpr_ctor(in_place_t, int i)\r\n                : optional<int>(in_place, i) {}\r\n        };\r\n\r\n    }\r\n    {\r\n        optional<const int> opt(in_place, 5);\r\n        assert(*opt == 5);\r\n    }\r\n    {\r\n        const optional<X> opt(in_place);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == X());\r\n    }\r\n    {\r\n        const optional<X> opt(in_place, 5);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == X(5));\r\n    }\r\n    {\r\n        const optional<X> opt(in_place, 5, 4);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(*opt == X(5, 4));\r\n    }\r\n    {\r\n        constexpr optional<Y> opt(in_place);\r\n        static_assert(static_cast<bool>(opt) == true, \"\");\r\n        static_assert(*opt == Y(), \"\");\r\n\r\n        struct test_constexpr_ctor\r\n            : public optional<Y>\r\n        {\r\n            constexpr test_constexpr_ctor(in_place_t)\r\n                : optional<Y>(in_place) {}\r\n        };\r\n\r\n    }\r\n    {\r\n        constexpr optional<Y> opt(in_place, 5);\r\n        static_assert(static_cast<bool>(opt) == true, \"\");\r\n        static_assert(*opt == Y(5), \"\");\r\n\r\n        struct test_constexpr_ctor\r\n            : public optional<Y>\r\n        {\r\n            constexpr test_constexpr_ctor(in_place_t, int i)\r\n                : optional<Y>(in_place, i) {}\r\n        };\r\n\r\n    }\r\n    {\r\n        constexpr optional<Y> opt(in_place, 5, 4);\r\n        static_assert(static_cast<bool>(opt) == true, \"\");\r\n        static_assert(*opt == Y(5, 4), \"\");\r\n\r\n        struct test_constexpr_ctor\r\n            : public optional<Y>\r\n        {\r\n            constexpr test_constexpr_ctor(in_place_t, int i, int j)\r\n                : optional<Y>(in_place, i, j) {}\r\n        };\r\n\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        try\r\n        {\r\n            const optional<Z> opt(in_place, 1);\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 6);\r\n        }\r\n    }\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::in_place\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.ctor/in_place_t.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr optional(optional<T>&& rhs);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"archetypes.h\"\r\n\r\nnamespace ctor::move {\r\nusing std::optional;\r\n\r\ntemplate <class T, class ...InitArgs>\r\nvoid test(InitArgs&&... args)\r\n{\r\n    const optional<T> orig(std::forward<InitArgs>(args)...);\r\n    optional<T> rhs(orig);\r\n    bool rhs_engaged = static_cast<bool>(rhs);\r\n    optional<T> lhs = std::move(rhs);\r\n    assert(static_cast<bool>(lhs) == rhs_engaged);\r\n    if (rhs_engaged)\r\n        assert(*lhs == *orig);\r\n}\r\n\r\ntemplate <class T, class ...InitArgs>\r\nconstexpr bool constexpr_test(InitArgs&&... args)\r\n{\r\n    static_assert( std::is_trivially_copy_constructible_v<T>, \"\"); // requirement\r\n    const optional<T> orig(std::forward<InitArgs>(args)...);\r\n    optional<T> rhs(orig);\r\n    optional<T> lhs = std::move(rhs);\r\n    return (lhs.has_value() == orig.has_value()) &&\r\n           (lhs.has_value() ? *lhs == *orig : true);\r\n}\r\n\r\nvoid test_throwing_ctor() {\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    struct Z {\r\n        Z() : count(0) {}\r\n        Z(Z&& o) : count(o.count + 1)\r\n        { if (count == 2) throw 6; }\r\n        int count;\r\n    };\r\n    Z z;\r\n    optional<Z> rhs(std::move(z));\r\n    try\r\n    {\r\n        optional<Z> lhs(std::move(rhs));\r\n        assert(false);\r\n    }\r\n    catch (int i)\r\n    {\r\n        assert(i == 6);\r\n    }\r\n#endif\r\n}\r\n\r\n\r\ntemplate <class T, class ...InitArgs>\r\nvoid test_ref(InitArgs&&... args)\r\n{\r\n    optional<T> rhs(std::forward<InitArgs>(args)...);\r\n    bool rhs_engaged = static_cast<bool>(rhs);\r\n    optional<T> lhs = std::move(rhs);\r\n    assert(static_cast<bool>(lhs) == rhs_engaged);\r\n    if (rhs_engaged)\r\n        assert(&(*lhs) == &(*rhs));\r\n}\r\n\r\nvoid test_reference_extension()\r\n{\r\n#if defined(_LIBCPP_VERSION) && 0 // TODO these extensions are currently disabled.\r\n    using T = TestTypes::TestType;\r\n    T::reset();\r\n    {\r\n        T t;\r\n        T::reset_constructors();\r\n        test_ref<T&>();\r\n        test_ref<T&>(t);\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 0);\r\n        assert(T::assigned == 0);\r\n        assert(T::destroyed == 0);\r\n    }\r\n    assert(T::destroyed == 1);\r\n    assert(T::alive == 0);\r\n    {\r\n        T t;\r\n        const T& ct = t;\r\n        T::reset_constructors();\r\n        test_ref<T const&>();\r\n        test_ref<T const&>(t);\r\n        test_ref<T const&>(ct);\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 0);\r\n        assert(T::assigned == 0);\r\n        assert(T::destroyed == 0);\r\n    }\r\n    assert(T::alive == 0);\r\n    assert(T::destroyed == 1);\r\n    {\r\n        T t;\r\n        T::reset_constructors();\r\n        test_ref<T&&>();\r\n        test_ref<T&&>(std::move(t));\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 0);\r\n        assert(T::assigned == 0);\r\n        assert(T::destroyed == 0);\r\n    }\r\n    assert(T::alive == 0);\r\n    assert(T::destroyed == 1);\r\n    {\r\n        T t;\r\n        const T& ct = t;\r\n        T::reset_constructors();\r\n        test_ref<T const&&>();\r\n        test_ref<T const&&>(std::move(t));\r\n        test_ref<T const&&>(std::move(ct));\r\n        assert(T::alive == 1);\r\n        assert(T::constructed == 0);\r\n        assert(T::assigned == 0);\r\n        assert(T::destroyed == 0);\r\n    }\r\n    assert(T::alive == 0);\r\n    assert(T::destroyed == 1);\r\n    {\r\n        static_assert(!std::is_copy_constructible<std::optional<T&&>>::value, \"\");\r\n        static_assert(!std::is_copy_constructible<std::optional<T const&&>>::value, \"\");\r\n    }\r\n#endif\r\n}\r\n\r\n\r\nint run_test()\r\n{\r\n    test<int>();\r\n    test<int>(3);\r\n    static_assert(constexpr_test<int>(), \"\" );\r\n    static_assert(constexpr_test<int>(3), \"\" );\r\n\r\n    {\r\n        optional<const int> o(42);\r\n        optional<const int> o2(std::move(o));\r\n        assert(*o2 == 42);\r\n    }\r\n    {\r\n        using T = TestTypes::TestType;\r\n        T::reset();\r\n        optional<T> rhs;\r\n        assert(T::alive == 0);\r\n        const optional<T> lhs(std::move(rhs));\r\n        assert(lhs.has_value() == false);\r\n        assert(rhs.has_value() == false);\r\n        assert(T::alive == 0);\r\n    }\r\n    TestTypes::TestType::reset();\r\n    {\r\n        using T = TestTypes::TestType;\r\n        T::reset();\r\n        optional<T> rhs(42);\r\n        assert(T::alive == 1);\r\n        assert(T::value_constructed == 1);\r\n        assert(T::move_constructed == 0);\r\n        const optional<T> lhs(std::move(rhs));\r\n        assert(lhs.has_value());\r\n        assert(rhs.has_value());\r\n        assert(lhs.value().value == 42);\r\n        assert(rhs.value().value == -1);\r\n        assert(T::move_constructed == 1);\r\n        assert(T::alive == 2);\r\n    }\r\n    TestTypes::TestType::reset();\r\n    {\r\n        using namespace ConstexprTestTypes;\r\n        test<TestType>();\r\n        test<TestType>(42);\r\n    }\r\n    {\r\n        using namespace TrivialTestTypes;\r\n        test<TestType>();\r\n        test<TestType>(42);\r\n    }\r\n    {\r\n        test_throwing_ctor();\r\n    }\r\n    {\r\n        struct ThrowsMove {\r\n          ThrowsMove() noexcept(false) {}\r\n          ThrowsMove(ThrowsMove const&) noexcept(false) {}\r\n          ThrowsMove(ThrowsMove &&) noexcept(false) {}\r\n        };\r\n        static_assert(!std::is_nothrow_move_constructible<optional<ThrowsMove>>::value, \"\");\r\n        struct NoThrowMove {\r\n          NoThrowMove() noexcept(false) {}\r\n          NoThrowMove(NoThrowMove const&) noexcept(false) {}\r\n          NoThrowMove(NoThrowMove &&) noexcept(true) {}\r\n        };\r\n        static_assert(std::is_nothrow_move_constructible<optional<NoThrowMove>>::value, \"\");\r\n    }\r\n    {\r\n        test_reference_extension();\r\n    }\r\n    {\r\n    constexpr std::optional<int> o1{4};\r\n    constexpr std::optional<int> o2 = std::move(o1);\r\n    static_assert( *o2 == 4, \"\" );\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::move\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.ctor/nullopt_t.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr optional(nullopt_t) noexcept;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"archetypes.h\"\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace ctor::nullopt {\r\nusing std::optional;\r\nusing std::nullopt_t;\r\nusing std::nullopt;\r\n\r\ntemplate <class Opt>\r\nvoid\r\ntest_constexpr()\r\n{\r\n    static_assert(std::is_nothrow_constructible<Opt, nullopt_t&>::value, \"\");\r\n    static_assert(std::is_trivially_destructible<Opt>::value, \"\");\r\n    static_assert(std::is_trivially_destructible<typename Opt::value_type>::value, \"\");\r\n\r\n    constexpr Opt opt(nullopt);\r\n    static_assert(static_cast<bool>(opt) == false, \"\");\r\n\r\n    struct test_constexpr_ctor\r\n        : public Opt\r\n    {\r\n        constexpr test_constexpr_ctor() {}\r\n    };\r\n}\r\n\r\ntemplate <class Opt>\r\nvoid\r\ntest()\r\n{\r\n    static_assert(std::is_nothrow_constructible<Opt, nullopt_t&>::value, \"\");\r\n    static_assert(!std::is_trivially_destructible<Opt>::value, \"\");\r\n    static_assert(!std::is_trivially_destructible<typename Opt::value_type>::value, \"\");\r\n    {\r\n    Opt opt(nullopt);\r\n    assert(static_cast<bool>(opt) == false);\r\n    }\r\n    {\r\n    const Opt opt(nullopt);\r\n    assert(static_cast<bool>(opt) == false);\r\n    }\r\n    struct test_constexpr_ctor\r\n        : public Opt\r\n    {\r\n        constexpr test_constexpr_ctor() {}\r\n    };\r\n}\r\n\r\nint run_test()\r\n{\r\n    test_constexpr<optional<int>>();\r\n    test_constexpr<optional<int*>>();\r\n    test_constexpr<optional<ImplicitTypes::NoCtors>>();\r\n    test_constexpr<optional<NonTrivialTypes::NoCtors>>();\r\n    test_constexpr<optional<NonConstexprTypes::NoCtors>>();\r\n    test<optional<NonLiteralTypes::NoCtors>>();\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::nullopt\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.ctor/nullopt_t.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.ctor/optional_U.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class U>\r\n//   optional(optional<U>&& rhs);\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <optional>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace ctor::optional_U {\r\nusing std::optional;\r\n\r\ntemplate <class T, class U>\r\nTEST_CONSTEXPR_CXX20 void\r\ntest(optional<U>&& rhs, bool is_going_to_throw = false)\r\n{\r\n    bool rhs_engaged = static_cast<bool>(rhs);\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    try\r\n    {\r\n        optional<T> lhs = std::move(rhs);\r\n        assert(is_going_to_throw == false);\r\n        assert(static_cast<bool>(lhs) == rhs_engaged);\r\n    }\r\n    catch (int i)\r\n    {\r\n        assert(i == 6);\r\n    }\r\n#else\r\n    if (is_going_to_throw) return;\r\n    optional<T> lhs = std::move(rhs);\r\n    assert(static_cast<bool>(lhs) == rhs_engaged);\r\n#endif\r\n}\r\n\r\nclass X\r\n{\r\n    int i_;\r\npublic:\r\n    TEST_CONSTEXPR_CXX20 X(int i) : i_(i) {}\r\n    TEST_CONSTEXPR_CXX20 X(X&& x) : i_(std::exchange(x.i_, 0)) {}\r\n    TEST_CONSTEXPR_CXX20 ~X() {i_ = 0;}\r\n    friend constexpr bool operator==(const X& x, const X& y) {return x.i_ == y.i_;}\r\n};\r\n\r\nstruct Z\r\n{\r\n    Z(int) { TEST_THROW(6); }\r\n};\r\n\r\ntemplate<class T, class U>\r\nTEST_CONSTEXPR_CXX20 bool test_all()\r\n{\r\n    {\r\n        optional<T> rhs;\r\n        test<U>(std::move(rhs));\r\n    }\r\n    {\r\n        optional<T> rhs(short{3});\r\n        test<U>(std::move(rhs));\r\n    }\r\n    return true;\r\n}\r\n\r\nint run_test()\r\n{\r\n    test_all<short, int>();\r\n    test_all<int, X>();\r\n#if TEST_STD_VER > 17\r\n    static_assert(test_all<short, int>());\r\n    static_assert(test_all<int, X>());\r\n#endif\r\n    {\r\n        optional<int> rhs;\r\n        test<Z>(std::move(rhs));\r\n    }\r\n    {\r\n        optional<int> rhs(3);\r\n        test<Z>(std::move(rhs), true);\r\n    }\r\n\r\n    static_assert(!(std::is_constructible<optional<X>, optional<Z>>::value), \"\");\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::optional_U\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.ctor/optional_U.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.ctor/rvalue_T.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr optional(T&& v);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"archetypes.h\"\r\n\r\n\r\nnamespace ctor::rvalue_T {\r\nusing std::optional;\r\n\r\n\r\nclass Z\r\n{\r\npublic:\r\n    Z(int) {}\r\n    Z(Z&&) {TEST_THROW(6);}\r\n};\r\n\r\n\r\nint run_test()\r\n{\r\n    {\r\n        typedef int T;\r\n        constexpr optional<T> opt(T(5));\r\n        static_assert(static_cast<bool>(opt) == true, \"\");\r\n        static_assert(*opt == 5, \"\");\r\n\r\n        struct test_constexpr_ctor\r\n            : public optional<T>\r\n        {\r\n            constexpr test_constexpr_ctor(T&&) {}\r\n        };\r\n    }\r\n    {\r\n        typedef double T;\r\n        constexpr optional<T> opt(T(3));\r\n        static_assert(static_cast<bool>(opt) == true, \"\");\r\n        static_assert(*opt == 3, \"\");\r\n\r\n        struct test_constexpr_ctor\r\n            : public optional<T>\r\n        {\r\n            constexpr test_constexpr_ctor(T&&) {}\r\n        };\r\n    }\r\n    {\r\n        const int x = 42;\r\n        optional<const int> o(std::move(x));\r\n        assert(*o == 42);\r\n    }\r\n    {\r\n        typedef TestTypes::TestType T;\r\n        T::reset();\r\n        optional<T> opt = T{3};\r\n        assert(T::alive == 1);\r\n        assert(T::move_constructed == 1);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(opt.value().value == 3);\r\n    }\r\n    {\r\n        typedef ExplicitTestTypes::TestType T;\r\n        static_assert(!std::is_convertible<T&&, optional<T>>::value, \"\");\r\n        T::reset();\r\n        optional<T> opt(T{3});\r\n        assert(T::alive == 1);\r\n        assert(T::move_constructed == 1);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(opt.value().value == 3);\r\n    }\r\n    {\r\n        typedef TestTypes::TestType T;\r\n        T::reset();\r\n        optional<T> opt = {3};\r\n        assert(T::alive == 1);\r\n        assert(T::value_constructed == 1);\r\n        assert(T::copy_constructed == 0);\r\n        assert(T::move_constructed == 0);\r\n        assert(static_cast<bool>(opt) == true);\r\n        assert(opt.value().value == 3);\r\n    }\r\n    {\r\n        typedef ConstexprTestTypes::TestType T;\r\n        constexpr optional<T> opt = {T(3)};\r\n        static_assert(static_cast<bool>(opt) == true, \"\");\r\n        static_assert(opt.value().value == 3, \"\");\r\n\r\n        struct test_constexpr_ctor\r\n            : public optional<T>\r\n        {\r\n            constexpr test_constexpr_ctor(const T&) {}\r\n        };\r\n    }\r\n    {\r\n        typedef ConstexprTestTypes::TestType T;\r\n        constexpr optional<T> opt = {3};\r\n        static_assert(static_cast<bool>(opt) == true, \"\");\r\n        static_assert(opt.value().value == 3, \"\");\r\n\r\n        struct test_constexpr_ctor\r\n            : public optional<T>\r\n        {\r\n            constexpr test_constexpr_ctor(const T&) {}\r\n        };\r\n    }\r\n    {\r\n        typedef ExplicitConstexprTestTypes::TestType T;\r\n        static_assert(!std::is_convertible<T&&, optional<T>>::value, \"\");\r\n        constexpr optional<T> opt(T{3});\r\n        static_assert(static_cast<bool>(opt) == true, \"\");\r\n        static_assert(opt.value().value == 3, \"\");\r\n\r\n        struct test_constexpr_ctor\r\n            : public optional<T>\r\n        {\r\n            constexpr test_constexpr_ctor(T&&) {}\r\n        };\r\n\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        try\r\n        {\r\n            Z z(3);\r\n            optional<Z> opt(std::move(z));\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 6);\r\n        }\r\n    }\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::rvalue_T\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.ctor/rvalue_T.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.ctor/U.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class U>\r\n//   constexpr EXPLICIT optional(U&& u);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"archetypes.h\"\r\n#include \"test_convertible.h\"\r\n\r\n\r\nnamespace ctor::U {\r\nusing std::optional;\r\n\r\nstruct ImplicitThrow\r\n{\r\n    constexpr ImplicitThrow(int x) { if (x != -1) TEST_THROW(6);}\r\n};\r\n\r\nstruct ExplicitThrow\r\n{\r\n    constexpr explicit ExplicitThrow(int x) { if (x != -1) TEST_THROW(6);}\r\n};\r\n\r\nstruct ImplicitAny {\r\n  template <class U>\r\n  constexpr ImplicitAny(U&&) {}\r\n};\r\n\r\n\r\ntemplate <class To, class From>\r\nconstexpr bool implicit_conversion(optional<To>&& opt, const From& v)\r\n{\r\n    using O = optional<To>;\r\n    static_assert(test_convertible<O, From>(), \"\");\r\n    static_assert(!test_convertible<O, void*>(), \"\");\r\n    static_assert(!test_convertible<O, From, int>(), \"\");\r\n    return opt && *opt == static_cast<To>(v);\r\n}\r\n\r\ntemplate <class To, class Input, class Expect>\r\nconstexpr bool explicit_conversion(Input&& in, const Expect& v)\r\n{\r\n    using O = optional<To>;\r\n    static_assert(std::is_constructible<O, Input>::value, \"\");\r\n    static_assert(!std::is_convertible<Input, O>::value, \"\");\r\n    static_assert(!std::is_constructible<O, void*>::value, \"\");\r\n    static_assert(!std::is_constructible<O, Input, int>::value, \"\");\r\n    optional<To> opt(std::forward<Input>(in));\r\n    return opt && *opt == static_cast<To>(v);\r\n}\r\n\r\nvoid test_implicit()\r\n{\r\n    {\r\n        static_assert(implicit_conversion<long long>(42, 42), \"\");\r\n    }\r\n    {\r\n        static_assert(implicit_conversion<long double>(3.14, 3.14), \"\");\r\n    }\r\n    {\r\n        int x = 42;\r\n        optional<void* const> o(&x);\r\n        assert(*o == &x);\r\n    }\r\n    {\r\n        using T = TrivialTestTypes::TestType;\r\n        static_assert(implicit_conversion<T>(42, 42), \"\");\r\n    }\r\n    {\r\n        using T = TestTypes::TestType;\r\n        assert(implicit_conversion<T>(3, T(3)));\r\n    }\r\n  {\r\n    using O = optional<ImplicitAny>;\r\n    static_assert(!test_convertible<O, std::in_place_t>(), \"\");\r\n    static_assert(!test_convertible<O, std::in_place_t&>(), \"\");\r\n    static_assert(!test_convertible<O, const std::in_place_t&>(), \"\");\r\n    static_assert(!test_convertible<O, std::in_place_t&&>(), \"\");\r\n    static_assert(!test_convertible<O, const std::in_place_t&&>(), \"\");\r\n\r\n  }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        try {\r\n            using T = ImplicitThrow;\r\n            optional<T> t = 42;\r\n            assert(false);\r\n            ((void)t);\r\n        } catch (int) {\r\n        }\r\n    }\r\n#endif\r\n}\r\n\r\nvoid test_explicit() {\r\n    {\r\n        using T = ExplicitTrivialTestTypes::TestType;\r\n        static_assert(explicit_conversion<T>(42, 42), \"\");\r\n    }\r\n    {\r\n        using T = ExplicitConstexprTestTypes::TestType;\r\n        static_assert(explicit_conversion<T>(42, 42), \"\");\r\n        static_assert(!std::is_convertible<int, T>::value, \"\");\r\n    }\r\n    {\r\n        using T = ExplicitTestTypes::TestType;\r\n        T::reset();\r\n        {\r\n            assert(explicit_conversion<T>(42, 42));\r\n            assert(T::alive == 0);\r\n        }\r\n        T::reset();\r\n        {\r\n            optional<T> t(42);\r\n            assert(T::alive == 1);\r\n            assert(T::value_constructed == 1);\r\n            assert(T::move_constructed == 0);\r\n            assert(T::copy_constructed == 0);\r\n            assert(t.value().value == 42);\r\n        }\r\n        assert(T::alive == 0);\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        try {\r\n            using T = ExplicitThrow;\r\n            optional<T> t(42);\r\n            assert(false);\r\n        } catch (int) {\r\n        }\r\n    }\r\n#endif\r\n}\r\n\r\nint run_test() {\r\n    test_implicit();\r\n    test_explicit();\r\n\r\n  return 0;\r\n}\r\n} // namespace ctor::U\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.ctor/U.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.dtor/dtor.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// ~optional();\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace dtor {\r\nusing std::optional;\r\n\r\nstruct PODType {\r\n  int value;\r\n  int value2;\r\n};\r\n\r\nclass X\r\n{\r\npublic:\r\n    static bool dtor_called;\r\n    X() = default;\r\n    X(const X&) = default;\r\n    X& operator=(const X&) = default;\r\n    ~X() {dtor_called = true;}\r\n};\r\n\r\nbool X::dtor_called = false;\r\n\r\nint run_test()\r\n{\r\n    {\r\n        typedef int T;\r\n        static_assert(std::is_trivially_destructible<T>::value, \"\");\r\n        static_assert(std::is_trivially_destructible<optional<T>>::value, \"\");\r\n    }\r\n    {\r\n        typedef double T;\r\n        static_assert(std::is_trivially_destructible<T>::value, \"\");\r\n        static_assert(std::is_trivially_destructible<optional<T>>::value, \"\");\r\n    }\r\n    {\r\n        typedef PODType T;\r\n        static_assert(std::is_trivially_destructible<T>::value, \"\");\r\n        static_assert(std::is_trivially_destructible<optional<T>>::value, \"\");\r\n    }\r\n    {\r\n        typedef X T;\r\n        static_assert(!std::is_trivially_destructible<T>::value, \"\");\r\n        static_assert(!std::is_trivially_destructible<optional<T>>::value, \"\");\r\n        {\r\n            X x;\r\n            optional<X> opt{x};\r\n            assert(X::dtor_called == false);\r\n        }\r\n        assert(X::dtor_called == true);\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace dtor\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.dtor/dtor.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.mod/reset.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n\r\n// void reset() noexcept;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace modifiers::reset {\r\nusing std::optional;\r\n\r\nstruct X\r\n{\r\n    static bool dtor_called;\r\n    X() = default;\r\n    X(const X&) = default;\r\n    X& operator=(const X&) = default;\r\n    ~X() {dtor_called = true;}\r\n};\r\n\r\nbool X::dtor_called = false;\r\n\r\nTEST_CONSTEXPR_CXX20 bool check_reset() {\r\n  {\r\n    optional<int> opt;\r\n    static_assert(noexcept(opt.reset()) == true, \"\");\r\n    opt.reset();\r\n    assert(static_cast<bool>(opt) == false);\r\n  }\r\n  {\r\n    optional<int> opt(3);\r\n    opt.reset();\r\n    assert(static_cast<bool>(opt) == false);\r\n  }\r\n  return true;\r\n}\r\n\r\nint run_test()\r\n{\r\n    check_reset();\r\n#if TEST_STD_VER >= 20\r\n    static_assert(check_reset());\r\n#endif\r\n    {\r\n        optional<X> opt;\r\n        static_assert(noexcept(opt.reset()) == true, \"\");\r\n        assert(X::dtor_called == false);\r\n        opt.reset();\r\n        assert(X::dtor_called == false);\r\n        assert(static_cast<bool>(opt) == false);\r\n    }\r\n    {\r\n        optional<X> opt(X{});\r\n        X::dtor_called = false;\r\n        opt.reset();\r\n        assert(X::dtor_called == true);\r\n        assert(static_cast<bool>(opt) == false);\r\n        X::dtor_called = false;\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace modifiers::reset\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.mod/reset.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.observe/bool.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr explicit optional<T>::operator bool() const noexcept;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace observe::op_bool {\r\nint run_test()\r\n{\r\n    using std::optional;\r\n    {\r\n        const optional<int> opt; ((void)opt);\r\n        ASSERT_NOEXCEPT(bool(opt));\r\n        static_assert(!std::is_convertible<optional<int>, bool>::value, \"\");\r\n    }\r\n    {\r\n        constexpr optional<int> opt;\r\n        static_assert(!opt, \"\");\r\n    }\r\n    {\r\n        constexpr optional<int> opt(0);\r\n        static_assert(opt, \"\");\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace observe::op_bool\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.observe/bool.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.observe/dereference.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr T& optional<T>::operator*() &;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace observe::deref {\r\nusing std::optional;\r\n\r\nstruct X\r\n{\r\n    constexpr int test() const& {return 3;}\r\n    int test() & {return 4;}\r\n    constexpr int test() const&& {return 5;}\r\n    int test() && {return 6;}\r\n};\r\n\r\nstruct Y\r\n{\r\n    constexpr int test() {return 7;}\r\n};\r\n\r\nconstexpr int\r\ntest()\r\n{\r\n    optional<Y> opt{Y{}};\r\n    return (*opt).test();\r\n}\r\n\r\nint run_test()\r\n{\r\n    {\r\n        optional<X> opt; ((void)opt);\r\n        ASSERT_SAME_TYPE(decltype(*opt), X&);\r\n        LIBCPP_STATIC_ASSERT(noexcept(*opt));\r\n        // ASSERT_NOT_NOEXCEPT(*opt);\r\n        // TODO: This assertion fails with GCC because it can see that\r\n        // (A) operator*() is constexpr, and\r\n        // (B) there is no path through the function that throws.\r\n        // It's arguable if this is the correct behavior for the noexcept\r\n        // operator.\r\n        // Regardless this function should still be noexcept(false) because\r\n        // it has a narrow contract.\r\n    }\r\n    {\r\n        optional<X> opt(X{});\r\n        assert((*opt).test() == 4);\r\n    }\r\n    static_assert(test() == 7, \"\");\r\n\r\n    return 0;\r\n}\r\n} // namespace observe::deref\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.observe/dereference.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.observe/dereference_const.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr const T& optional<T>::operator*() const &;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace observe::deref_const {\r\nusing std::optional;\r\n\r\nstruct X\r\n{\r\n    constexpr int test() const& {return 3;}\r\n    int test() & {return 4;}\r\n    constexpr int test() const&& {return 5;}\r\n    int test() && {return 6;}\r\n};\r\n\r\nstruct Y\r\n{\r\n    int test() const {return 2;}\r\n};\r\n\r\nint run_test()\r\n{\r\n    {\r\n        const optional<X> opt; ((void)opt);\r\n        ASSERT_SAME_TYPE(decltype(*opt), X const&);\r\n        LIBCPP_STATIC_ASSERT(noexcept(*opt));\r\n        // ASSERT_NOT_NOEXCEPT(*opt);\r\n        // TODO: This assertion fails with GCC because it can see that\r\n        // (A) operator*() is constexpr, and\r\n        // (B) there is no path through the function that throws.\r\n        // It's arguable if this is the correct behavior for the noexcept\r\n        // operator.\r\n        // Regardless this function should still be noexcept(false) because\r\n        // it has a narrow contract.\r\n    }\r\n    {\r\n        constexpr optional<X> opt(X{});\r\n        static_assert((*opt).test() == 3, \"\");\r\n    }\r\n    {\r\n        constexpr optional<Y> opt(Y{});\r\n        assert((*opt).test() == 2);\r\n    }\r\n\r\n    return 0;\r\n}\r\n} // namespace observe::deref_const\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.observe/dereference_const.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.observe/dereference_const_rvalue.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr T&& optional<T>::operator*() const &&;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace observe::deref_const_rvalue {\r\nusing std::optional;\r\n\r\nstruct X\r\n{\r\n    constexpr int test() const& {return 3;}\r\n    int test() & {return 4;}\r\n    constexpr int test() const&& {return 5;}\r\n    int test() && {return 6;}\r\n};\r\n\r\nstruct Y\r\n{\r\n    int test() const && {return 2;}\r\n};\r\n\r\nint run_test()\r\n{\r\n    {\r\n        const optional<X> opt; ((void)opt);\r\n        ASSERT_SAME_TYPE(decltype(*std::move(opt)), X const &&);\r\n        LIBCPP_STATIC_ASSERT(noexcept(*opt));\r\n        // ASSERT_NOT_NOEXCEPT(*std::move(opt));\r\n        // TODO: This assertion fails with GCC because it can see that\r\n        // (A) operator*() is constexpr, and\r\n        // (B) there is no path through the function that throws.\r\n        // It's arguable if this is the correct behavior for the noexcept\r\n        // operator.\r\n        // Regardless this function should still be noexcept(false) because\r\n        // it has a narrow contract.\r\n    }\r\n    {\r\n        constexpr optional<X> opt(X{});\r\n        static_assert((*std::move(opt)).test() == 5, \"\");\r\n    }\r\n    {\r\n        constexpr optional<Y> opt(Y{});\r\n        assert((*std::move(opt)).test() == 2);\r\n    }\r\n\r\n    return 0;\r\n}\r\n} // namespace observe::deref_const_rvalue\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.observe/dereference_const_rvalue.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.observe/dereference_rvalue.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr T&& optional<T>::operator*() &&;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace observe::deref_rvalue {\r\nusing std::optional;\r\n\r\nstruct X\r\n{\r\n    constexpr int test() const& {return 3;}\r\n    int test() & {return 4;}\r\n    constexpr int test() const&& {return 5;}\r\n    int test() && {return 6;}\r\n};\r\n\r\nstruct Y\r\n{\r\n    constexpr int test() && {return 7;}\r\n};\r\n\r\nconstexpr int\r\ntest()\r\n{\r\n    optional<Y> opt{Y{}};\r\n    return (*std::move(opt)).test();\r\n}\r\n\r\nint run_test()\r\n{\r\n    {\r\n        optional<X> opt; ((void)opt);\r\n        ASSERT_SAME_TYPE(decltype(*std::move(opt)), X&&);\r\n        LIBCPP_STATIC_ASSERT(noexcept(*opt));\r\n        // ASSERT_NOT_NOEXCEPT(*std::move(opt));\r\n        // TODO: This assertion fails with GCC because it can see that\r\n        // (A) operator*() is constexpr, and\r\n        // (B) there is no path through the function that throws.\r\n        // It's arguable if this is the correct behavior for the noexcept\r\n        // operator.\r\n        // Regardless this function should still be noexcept(false) because\r\n        // it has a narrow contract.\r\n    }\r\n    {\r\n        optional<X> opt(X{});\r\n        assert((*std::move(opt)).test() == 6);\r\n    }\r\n    static_assert(test() == 7, \"\");\r\n\r\n    return 0;\r\n}\r\n} // namespace observe::deref_rvalue\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.observe/dereference_rvalue.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.observe/has_value.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr bool optional<T>::has_value() const noexcept;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace observe::has_value {\r\nint run_test()\r\n{\r\n    using std::optional;\r\n    {\r\n        const optional<int> opt; ((void)opt);\r\n        ASSERT_NOEXCEPT(opt.has_value());\r\n        ASSERT_SAME_TYPE(decltype(opt.has_value()), bool);\r\n    }\r\n    {\r\n        constexpr optional<int> opt;\r\n        static_assert(!opt.has_value(), \"\");\r\n    }\r\n    {\r\n        constexpr optional<int> opt(0);\r\n        static_assert(opt.has_value(), \"\");\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace observe::has_value\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.observe/has_value.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.observe/op_arrow.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr T* optional<T>::operator->();\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace observe::op_arrow {\r\nusing std::optional;\r\n\r\nstruct X\r\n{\r\n    int test() noexcept {return 3;}\r\n};\r\n\r\nstruct Y\r\n{\r\n    constexpr int test() {return 3;}\r\n};\r\n\r\nconstexpr int\r\ntest()\r\n{\r\n    optional<Y> opt{Y{}};\r\n    return opt->test();\r\n}\r\n\r\nint run_test()\r\n{\r\n    {\r\n        std::optional<X> opt; ((void)opt);\r\n        ASSERT_SAME_TYPE(decltype(opt.operator->()), X*);\r\n        // ASSERT_NOT_NOEXCEPT(opt.operator->());\r\n        // TODO: This assertion fails with GCC because it can see that\r\n        // (A) operator->() is constexpr, and\r\n        // (B) there is no path through the function that throws.\r\n        // It's arguable if this is the correct behavior for the noexcept\r\n        // operator.\r\n        // Regardless this function should still be noexcept(false) because\r\n        // it has a narrow contract.\r\n    }\r\n    {\r\n        optional<X> opt(X{});\r\n        assert(opt->test() == 3);\r\n    }\r\n    {\r\n        static_assert(test() == 3, \"\");\r\n    }\r\n\r\n    return 0;\r\n}\r\n} // namespace observe::op_arrow\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.observe/op_arrow.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.observe/op_arrow_const.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr const T* optional<T>::operator->() const;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace observe::op_arrow_const {\r\nusing std::optional;\r\n\r\nstruct X\r\n{\r\n    constexpr int test() const {return 3;}\r\n};\r\n\r\nstruct Y\r\n{\r\n    int test() const noexcept {return 2;}\r\n};\r\n\r\nstruct Z\r\n{\r\n    const Z* operator&() const;\r\n    constexpr int test() const {return 1;}\r\n};\r\n\r\nint run_test()\r\n{\r\n    {\r\n        const std::optional<X> opt; ((void)opt);\r\n        ASSERT_SAME_TYPE(decltype(opt.operator->()), X const*);\r\n        // ASSERT_NOT_NOEXCEPT(opt.operator->());\r\n        // TODO: This assertion fails with GCC because it can see that\r\n        // (A) operator->() is constexpr, and\r\n        // (B) there is no path through the function that throws.\r\n        // It's arguable if this is the correct behavior for the noexcept\r\n        // operator.\r\n        // Regardless this function should still be noexcept(false) because\r\n        // it has a narrow contract.\r\n    }\r\n    {\r\n        constexpr optional<X> opt(X{});\r\n        static_assert(opt->test() == 3, \"\");\r\n    }\r\n    {\r\n        constexpr optional<Y> opt(Y{});\r\n        assert(opt->test() == 2);\r\n    }\r\n    {\r\n        constexpr optional<Z> opt(Z{});\r\n        static_assert(opt->test() == 1, \"\");\r\n    }\r\n\r\n    return 0;\r\n}\r\n} // namespace observe::op_arrow_const\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.observe/op_arrow_const.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.observe/value.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr T& optional<T>::value() &;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace observe::value {\r\nusing std::optional;\r\nusing std::bad_optional_access;\r\n\r\nstruct X\r\n{\r\n    X() = default;\r\n    X(const X&) = delete;\r\n    constexpr int test() const & {return 3;}\r\n    int test() & {return 4;}\r\n    constexpr int test() const && {return 5;}\r\n    int test() && {return 6;}\r\n};\r\n\r\nstruct Y\r\n{\r\n    constexpr int test() & {return 7;}\r\n};\r\n\r\nconstexpr int\r\ntest()\r\n{\r\n    optional<Y> opt{Y{}};\r\n    return opt.value().test();\r\n}\r\n\r\n\r\nint run_test()\r\n{\r\n    {\r\n        optional<X> opt; ((void)opt);\r\n        ASSERT_NOT_NOEXCEPT(opt.value());\r\n        ASSERT_SAME_TYPE(decltype(opt.value()), X&);\r\n    }\r\n    {\r\n        optional<X> opt;\r\n        opt.emplace();\r\n        assert(opt.value().test() == 4);\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        optional<X> opt;\r\n        try\r\n        {\r\n            (void)opt.value();\r\n            assert(false);\r\n        }\r\n        catch (const bad_optional_access&)\r\n        {\r\n        }\r\n    }\r\n#endif\r\n    static_assert(test() == 7, \"\");\r\n\r\n  return 0;\r\n}\r\n} // namespace observe::value\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.observe/value.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.observe/value_const.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr const T& optional<T>::value() const &;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace observe::value_const {\r\nusing std::optional;\r\nusing std::in_place_t;\r\nusing std::in_place;\r\nusing std::bad_optional_access;\r\n\r\nstruct X\r\n{\r\n    X() = default;\r\n    X(const X&) = delete;\r\n    constexpr int test() const & {return 3;}\r\n    int test() & {return 4;}\r\n    constexpr int test() const && {return 5;}\r\n    int test() && {return 6;}\r\n};\r\n\r\nint run_test()\r\n{\r\n    {\r\n        const optional<X> opt; ((void)opt);\r\n        ASSERT_NOT_NOEXCEPT(opt.value());\r\n        ASSERT_SAME_TYPE(decltype(opt.value()), X const&);\r\n    }\r\n    {\r\n        constexpr optional<X> opt(in_place);\r\n        static_assert(opt.value().test() == 3, \"\");\r\n    }\r\n    {\r\n        const optional<X> opt(in_place);\r\n        assert(opt.value().test() == 3);\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        const optional<X> opt;\r\n        try\r\n        {\r\n            (void)opt.value();\r\n            assert(false);\r\n        }\r\n        catch (const bad_optional_access&)\r\n        {\r\n        }\r\n    }\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace observe::value_const\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.observe/value_const.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.observe/value_const_rvalue.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr const T& optional<T>::value() const &&;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace observe::value_const_rvalue {\r\nusing std::optional;\r\nusing std::in_place_t;\r\nusing std::in_place;\r\nusing std::bad_optional_access;\r\n\r\nstruct X\r\n{\r\n    X() = default;\r\n    X(const X&) = delete;\r\n    constexpr int test() const & {return 3;}\r\n    int test() & {return 4;}\r\n    constexpr int test() const && {return 5;}\r\n    int test() && {return 6;}\r\n};\r\n\r\nint run_test()\r\n{\r\n    {\r\n        const optional<X> opt; ((void)opt);\r\n        ASSERT_NOT_NOEXCEPT(std::move(opt).value());\r\n        ASSERT_SAME_TYPE(decltype(std::move(opt).value()), X const&&);\r\n    }\r\n    {\r\n        constexpr optional<X> opt(in_place);\r\n        static_assert(std::move(opt).value().test() == 5, \"\");\r\n    }\r\n    {\r\n        const optional<X> opt(in_place);\r\n        assert(std::move(opt).value().test() == 5);\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        const optional<X> opt;\r\n        try\r\n        {\r\n            (void)std::move(opt).value();\r\n            assert(false);\r\n        }\r\n        catch (const bad_optional_access&)\r\n        {\r\n        }\r\n    }\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace observe::value_const_rvalue\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.observe/value_const_rvalue.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.observe/value_or.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class U> constexpr T optional<T>::value_or(U&& v) &&;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace observe::value_or {\r\nusing std::optional;\r\nusing std::in_place_t;\r\nusing std::in_place;\r\n\r\nstruct Y\r\n{\r\n    int i_;\r\n\r\n    constexpr Y(int i) : i_(i) {}\r\n};\r\n\r\nstruct X\r\n{\r\n    int i_;\r\n\r\n    constexpr X(int i) : i_(i) {}\r\n    constexpr X(X&& x) : i_(x.i_) {x.i_ = 0;}\r\n    constexpr X(const Y& y) : i_(y.i_) {}\r\n    constexpr X(Y&& y) : i_(y.i_+1) {}\r\n    friend constexpr bool operator==(const X& x, const X& y)\r\n        {return x.i_ == y.i_;}\r\n};\r\n\r\nconstexpr int test()\r\n{\r\n    {\r\n        optional<X> opt(in_place, 2);\r\n        Y y(3);\r\n        assert(std::move(opt).value_or(y) == 2);\r\n        assert(*opt == 0);\r\n    }\r\n    {\r\n        optional<X> opt(in_place, 2);\r\n        assert(std::move(opt).value_or(Y(3)) == 2);\r\n        assert(*opt == 0);\r\n    }\r\n    {\r\n        optional<X> opt;\r\n        Y y(3);\r\n        assert(std::move(opt).value_or(y) == 3);\r\n        assert(!opt);\r\n    }\r\n    {\r\n        optional<X> opt;\r\n        assert(std::move(opt).value_or(Y(3)) == 4);\r\n        assert(!opt);\r\n    }\r\n    return 0;\r\n}\r\n\r\nint run_test()\r\n{\r\n    static_assert(test() == 0);\r\n\r\n  return 0;\r\n}\r\n} // namespace observe::value_or\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.observe/value_or.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.observe/value_or_const.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class U> constexpr T optional<T>::value_or(U&& v) const&;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace observe::value_or_const {\r\nusing std::optional;\r\n\r\nstruct Y\r\n{\r\n    int i_;\r\n\r\n    constexpr Y(int i) : i_(i) {}\r\n};\r\n\r\nstruct X\r\n{\r\n    int i_;\r\n\r\n    constexpr X(int i) : i_(i) {}\r\n    constexpr X(const Y& y) : i_(y.i_) {}\r\n    constexpr X(Y&& y) : i_(y.i_+1) {}\r\n    friend constexpr bool operator==(const X& x, const X& y)\r\n        {return x.i_ == y.i_;}\r\n};\r\n\r\nint run_test()\r\n{\r\n    {\r\n        constexpr optional<X> opt(2);\r\n        constexpr Y y(3);\r\n        static_assert(opt.value_or(y) == 2, \"\");\r\n    }\r\n    {\r\n        constexpr optional<X> opt(2);\r\n        static_assert(opt.value_or(Y(3)) == 2, \"\");\r\n    }\r\n    {\r\n        constexpr optional<X> opt;\r\n        constexpr Y y(3);\r\n        static_assert(opt.value_or(y) == 3, \"\");\r\n    }\r\n    {\r\n        constexpr optional<X> opt;\r\n        static_assert(opt.value_or(Y(3)) == 4, \"\");\r\n    }\r\n    {\r\n        const optional<X> opt(2);\r\n        const Y y(3);\r\n        assert(opt.value_or(y) == 2);\r\n    }\r\n    {\r\n        const optional<X> opt(2);\r\n        assert(opt.value_or(Y(3)) == 2);\r\n    }\r\n    {\r\n        const optional<X> opt;\r\n        const Y y(3);\r\n        assert(opt.value_or(y) == 3);\r\n    }\r\n    {\r\n        const optional<X> opt;\r\n        assert(opt.value_or(Y(3)) == 4);\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace observe::value_or_const\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.observe/value_or_const.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.observe/value_rvalue.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// constexpr T& optional<T>::value() &&;\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace observe::value_rvalue {\r\nusing std::optional;\r\nusing std::bad_optional_access;\r\n\r\nstruct X\r\n{\r\n    X() = default;\r\n    X(const X&) = delete;\r\n    constexpr int test() const & {return 3;}\r\n    int test() & {return 4;}\r\n    constexpr int test() const && {return 5;}\r\n    int test() && {return 6;}\r\n};\r\n\r\nstruct Y\r\n{\r\n    constexpr int test() && {return 7;}\r\n};\r\n\r\nconstexpr int\r\ntest()\r\n{\r\n    optional<Y> opt{Y{}};\r\n    return std::move(opt).value().test();\r\n}\r\n\r\nint run_test()\r\n{\r\n    {\r\n        optional<X> opt; ((void)opt);\r\n        ASSERT_NOT_NOEXCEPT(std::move(opt).value());\r\n        ASSERT_SAME_TYPE(decltype(std::move(opt).value()), X&&);\r\n    }\r\n    {\r\n        optional<X> opt;\r\n        opt.emplace();\r\n        assert(std::move(opt).value().test() == 6);\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        optional<X> opt;\r\n        try\r\n        {\r\n            (void)std::move(opt).value();\r\n            assert(false);\r\n        }\r\n        catch (const bad_optional_access&)\r\n        {\r\n        }\r\n    }\r\n#endif\r\n    static_assert(test() == 7, \"\");\r\n\r\n  return 0;\r\n}\r\n} // namespace observe::value_rvalue\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.observe/value_rvalue.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/optional.object.swap/swap.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// void swap(optional&)\r\n//     noexcept(is_nothrow_move_constructible<T>::value &&\r\n//              is_nothrow_swappable<T>::value)\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"archetypes.h\"\r\n\r\nnamespace member_swap {\r\nusing std::optional;\r\n\r\nclass X\r\n{\r\n    int i_;\r\npublic:\r\n    static unsigned dtor_called;\r\n    X(int i) : i_(i) {}\r\n    X(X&& x) = default;\r\n    X& operator=(X&&) = default;\r\n    ~X() {++dtor_called;}\r\n\r\n    friend bool operator==(const X& x, const X& y) {return x.i_ == y.i_;}\r\n};\r\n\r\nunsigned X::dtor_called = 0;\r\n\r\nclass Y\r\n{\r\n    int i_;\r\npublic:\r\n    static unsigned dtor_called;\r\n    Y(int i) : i_(i) {}\r\n    Y(Y&&) = default;\r\n    ~Y() {++dtor_called;}\r\n\r\n    friend constexpr bool operator==(const Y& x, const Y& y) {return x.i_ == y.i_;}\r\n    friend void swap(Y& x, Y& y) {std::swap(x.i_, y.i_);}\r\n};\r\n\r\nunsigned Y::dtor_called = 0;\r\n\r\nclass Z\r\n{\r\n    int i_;\r\npublic:\r\n    Z(int i) : i_(i) {}\r\n    Z(Z&&) {TEST_THROW(7);}\r\n\r\n    friend constexpr bool operator==(const Z& x, const Z& y) {return x.i_ == y.i_;}\r\n    friend void swap(Z&, Z&) {TEST_THROW(6);}\r\n};\r\n\r\nclass W\r\n{\r\n    int i_;\r\npublic:\r\n    constexpr W(int i) : i_(i) {}\r\n\r\n    friend constexpr bool operator==(const W& x, const W& y) {return x.i_ == y.i_;}\r\n    friend TEST_CONSTEXPR_CXX20 void swap(W& x, W& y) noexcept {std::swap(x.i_, y.i_);}\r\n};\r\n\r\ntemplate<class T>\r\nTEST_CONSTEXPR_CXX20 bool check_swap()\r\n{\r\n    {\r\n        optional<T> opt1;\r\n        optional<T> opt2;\r\n        static_assert(noexcept(opt1.swap(opt2)) == true);\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        opt1.swap(opt2);\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == false);\r\n    }\r\n    {\r\n        optional<T> opt1(1);\r\n        optional<T> opt2;\r\n        static_assert(noexcept(opt1.swap(opt2)) == true);\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        opt1.swap(opt2);\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 1);\r\n    }\r\n    {\r\n        optional<T> opt1;\r\n        optional<T> opt2(2);\r\n        static_assert(noexcept(opt1.swap(opt2)) == true, \"\");\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        opt1.swap(opt2);\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 2);\r\n        assert(static_cast<bool>(opt2) == false);\r\n    }\r\n    {\r\n        optional<T> opt1(1);\r\n        optional<T> opt2(2);\r\n        static_assert(noexcept(opt1.swap(opt2)) == true, \"\");\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        opt1.swap(opt2);\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 2);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 1);\r\n    }\r\n    return true;\r\n}\r\n\r\nint run_test()\r\n{\r\n    check_swap<int>();\r\n    check_swap<W>();\r\n#if TEST_STD_VER > 17\r\n    static_assert(check_swap<int>());\r\n    static_assert(check_swap<W>());\r\n#endif\r\n    {\r\n        optional<X> opt1;\r\n        optional<X> opt2;\r\n        static_assert(noexcept(opt1.swap(opt2)) == true, \"\");\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        opt1.swap(opt2);\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        assert(X::dtor_called == 0);\r\n    }\r\n    {\r\n        optional<X> opt1(1);\r\n        optional<X> opt2;\r\n        static_assert(noexcept(opt1.swap(opt2)) == true, \"\");\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        X::dtor_called = 0;\r\n        opt1.swap(opt2);\r\n        assert(X::dtor_called == 1);\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 1);\r\n    }\r\n    {\r\n        optional<X> opt1;\r\n        optional<X> opt2(2);\r\n        static_assert(noexcept(opt1.swap(opt2)) == true, \"\");\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        X::dtor_called = 0;\r\n        opt1.swap(opt2);\r\n        assert(X::dtor_called == 1);\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 2);\r\n        assert(static_cast<bool>(opt2) == false);\r\n    }\r\n    {\r\n        optional<X> opt1(1);\r\n        optional<X> opt2(2);\r\n        static_assert(noexcept(opt1.swap(opt2)) == true, \"\");\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        X::dtor_called = 0;\r\n        opt1.swap(opt2);\r\n        assert(X::dtor_called == 1);  // from inside std::swap\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 2);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 1);\r\n    }\r\n    {\r\n        optional<Y> opt1;\r\n        optional<Y> opt2;\r\n        static_assert(noexcept(opt1.swap(opt2)) == false, \"\");\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        opt1.swap(opt2);\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        assert(Y::dtor_called == 0);\r\n    }\r\n    {\r\n        optional<Y> opt1(1);\r\n        optional<Y> opt2;\r\n        static_assert(noexcept(opt1.swap(opt2)) == false, \"\");\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        Y::dtor_called = 0;\r\n        opt1.swap(opt2);\r\n        assert(Y::dtor_called == 1);\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 1);\r\n    }\r\n    {\r\n        optional<Y> opt1;\r\n        optional<Y> opt2(2);\r\n        static_assert(noexcept(opt1.swap(opt2)) == false, \"\");\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        Y::dtor_called = 0;\r\n        opt1.swap(opt2);\r\n        assert(Y::dtor_called == 1);\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 2);\r\n        assert(static_cast<bool>(opt2) == false);\r\n    }\r\n    {\r\n        optional<Y> opt1(1);\r\n        optional<Y> opt2(2);\r\n        static_assert(noexcept(opt1.swap(opt2)) == false, \"\");\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        Y::dtor_called = 0;\r\n        opt1.swap(opt2);\r\n        assert(Y::dtor_called == 0);\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 2);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 1);\r\n    }\r\n    {\r\n        optional<Z> opt1;\r\n        optional<Z> opt2;\r\n        static_assert(noexcept(opt1.swap(opt2)) == false, \"\");\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        opt1.swap(opt2);\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == false);\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        optional<Z> opt1;\r\n        opt1.emplace(1);\r\n        optional<Z> opt2;\r\n        static_assert(noexcept(opt1.swap(opt2)) == false, \"\");\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        try\r\n        {\r\n            opt1.swap(opt2);\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 7);\r\n        }\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == false);\r\n    }\r\n    {\r\n        optional<Z> opt1;\r\n        optional<Z> opt2;\r\n        opt2.emplace(2);\r\n        static_assert(noexcept(opt1.swap(opt2)) == false, \"\");\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        try\r\n        {\r\n            opt1.swap(opt2);\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 7);\r\n        }\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n    }\r\n    {\r\n        optional<Z> opt1;\r\n        opt1.emplace(1);\r\n        optional<Z> opt2;\r\n        opt2.emplace(2);\r\n        static_assert(noexcept(opt1.swap(opt2)) == false, \"\");\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        try\r\n        {\r\n            opt1.swap(opt2);\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 6);\r\n        }\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n    }\r\n#endif\r\n\r\n  return 0;\r\n}\r\n} // namespace member_swap\r\n// -- END: test/std/utilities/optional/optional.object/optional.object.swap/swap.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/special_members.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n\r\n// Make sure we properly generate special member functions for optional<T>\r\n// based on the properties of T itself.\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n\r\n#include \"archetypes.h\"\r\n\r\n#include \"test_macros.h\"\r\n\r\n\r\nnamespace special_members {\r\ntemplate <class T>\r\nstruct SpecialMemberTest {\r\n    using O = std::optional<T>;\r\n\r\n    static_assert(std::is_default_constructible_v<O>,\r\n        \"optional is always default constructible.\");\r\n\r\n    static_assert(std::is_copy_constructible_v<O> == std::is_copy_constructible_v<T>,\r\n        \"optional<T> is copy constructible if and only if T is copy constructible.\");\r\n\r\n    static_assert(std::is_move_constructible_v<O> ==\r\n        (std::is_copy_constructible_v<T> || std::is_move_constructible_v<T>),\r\n        \"optional<T> is move constructible if and only if T is copy or move constructible.\");\r\n\r\n    static_assert(std::is_copy_assignable_v<O> ==\r\n        (std::is_copy_constructible_v<T> && std::is_copy_assignable_v<T>),\r\n        \"optional<T> is copy assignable if and only if T is both copy \"\r\n        \"constructible and copy assignable.\");\r\n\r\n    static_assert(std::is_move_assignable_v<O> ==\r\n        ((std::is_move_constructible_v<T> && std::is_move_assignable_v<T>) ||\r\n         (std::is_copy_constructible_v<T> && std::is_copy_assignable_v<T>)),\r\n        \"optional<T> is move assignable if and only if T is both move constructible and \"\r\n        \"move assignable, or both copy constructible and copy assignable.\");\r\n};\r\n\r\ntemplate <class ...Args> static void sink(Args&&...) {}\r\n\r\ntemplate <class ...TestTypes>\r\nstruct DoTestsMetafunction {\r\n    DoTestsMetafunction() { sink(SpecialMemberTest<TestTypes>{}...); }\r\n};\r\n\r\nint run_test() {\r\n    sink(\r\n        ImplicitTypes::ApplyTypes<DoTestsMetafunction>{},\r\n        ExplicitTypes::ApplyTypes<DoTestsMetafunction>{},\r\n        NonLiteralTypes::ApplyTypes<DoTestsMetafunction>{},\r\n        NonTrivialTypes::ApplyTypes<DoTestsMetafunction>{}\r\n    );\r\n    return 0;\r\n}\r\n} // namespace special_members\r\n// -- END: test/std/utilities/optional/optional.object/special_members.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/triviality.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n\r\n// The following special member functions should propagate the triviality of\r\n// the element held in the optional (see P0602R4):\r\n//\r\n// constexpr optional(const optional& rhs);\r\n// constexpr optional(optional&& rhs) noexcept(see below);\r\n// constexpr optional<T>& operator=(const optional& rhs);\r\n// constexpr optional<T>& operator=(optional&& rhs) noexcept(see below);\r\n\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n\r\n#include \"archetypes.h\"\r\n\r\n#include \"test_macros.h\"\r\n\r\n\r\nnamespace triviality {\r\nconstexpr bool implies(bool p, bool q) {\r\n    return !p || q;\r\n}\r\n\r\ntemplate <class T>\r\nstruct SpecialMemberTest {\r\n    using O = std::optional<T>;\r\n\r\n    static_assert(implies(std::is_trivially_copy_constructible_v<T>,\r\n                          std::is_trivially_copy_constructible_v<O>),\r\n        \"optional<T> is trivially copy constructible if T is trivially copy constructible.\");\r\n\r\n    static_assert(implies(std::is_trivially_move_constructible_v<T>,\r\n                          std::is_trivially_move_constructible_v<O>),\r\n        \"optional<T> is trivially move constructible if T is trivially move constructible\");\r\n\r\n    static_assert(implies(std::is_trivially_copy_constructible_v<T> &&\r\n                          std::is_trivially_copy_assignable_v<T> &&\r\n                          std::is_trivially_destructible_v<T>,\r\n\r\n                          std::is_trivially_copy_assignable_v<O>),\r\n        \"optional<T> is trivially copy assignable if T is \"\r\n        \"trivially copy constructible, \"\r\n        \"trivially copy assignable, and \"\r\n        \"trivially destructible\");\r\n\r\n    static_assert(implies(std::is_trivially_move_constructible_v<T> &&\r\n                          std::is_trivially_move_assignable_v<T> &&\r\n                          std::is_trivially_destructible_v<T>,\r\n\r\n                          std::is_trivially_move_assignable_v<O>),\r\n        \"optional<T> is trivially move assignable if T is \"\r\n        \"trivially move constructible, \"\r\n        \"trivially move assignable, and\"\r\n        \"trivially destructible.\");\r\n};\r\n\r\ntemplate <class ...Args> static void sink(Args&&...) {}\r\n\r\ntemplate <class ...TestTypes>\r\nstruct DoTestsMetafunction {\r\n    DoTestsMetafunction() { sink(SpecialMemberTest<TestTypes>{}...); }\r\n};\r\n\r\nstruct TrivialMoveNonTrivialCopy {\r\n    TrivialMoveNonTrivialCopy() = default;\r\n    TrivialMoveNonTrivialCopy(const TrivialMoveNonTrivialCopy&) {}\r\n    TrivialMoveNonTrivialCopy(TrivialMoveNonTrivialCopy&&) = default;\r\n    TrivialMoveNonTrivialCopy& operator=(const TrivialMoveNonTrivialCopy&) { return *this; }\r\n    TrivialMoveNonTrivialCopy& operator=(TrivialMoveNonTrivialCopy&&) = default;\r\n};\r\n\r\nstruct TrivialCopyNonTrivialMove {\r\n    TrivialCopyNonTrivialMove() = default;\r\n    TrivialCopyNonTrivialMove(const TrivialCopyNonTrivialMove&) = default;\r\n    TrivialCopyNonTrivialMove(TrivialCopyNonTrivialMove&&) {}\r\n    TrivialCopyNonTrivialMove& operator=(const TrivialCopyNonTrivialMove&) = default;\r\n    TrivialCopyNonTrivialMove& operator=(TrivialCopyNonTrivialMove&&) { return *this; }\r\n};\r\n\r\nint run_test() {\r\n    sink(\r\n        ImplicitTypes::ApplyTypes<DoTestsMetafunction>{},\r\n        ExplicitTypes::ApplyTypes<DoTestsMetafunction>{},\r\n        NonLiteralTypes::ApplyTypes<DoTestsMetafunction>{},\r\n        NonTrivialTypes::ApplyTypes<DoTestsMetafunction>{},\r\n        DoTestsMetafunction<TrivialMoveNonTrivialCopy, TrivialCopyNonTrivialMove>{}\r\n    );\r\n    return 0;\r\n}\r\n} // namespace triviality\r\n// -- END: test/std/utilities/optional/optional.object/triviality.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.object/types.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T>\r\n// class optional\r\n// {\r\n// public:\r\n//     typedef T value_type;\r\n//     ...\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace types {\r\nusing std::optional;\r\n\r\ntemplate <class Opt, class T>\r\nvoid\r\ntest()\r\n{\r\n    static_assert(std::is_same<typename Opt::value_type, T>::value, \"\");\r\n}\r\n\r\nint run_test()\r\n{\r\n    test<optional<int>, int>();\r\n    test<optional<const int>, const int>();\r\n    test<optional<double>, double>();\r\n    test<optional<const double>, const double>();\r\n\r\n  return 0;\r\n}\r\n} // namespace types\r\n// -- END: test/std/utilities/optional/optional.object/types.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.relops/compare.three_way.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n\r\n// [optional.relops], relational operators\r\n\r\n// template<class T, three_way_comparable_with<T> U>\r\n//   constexpr compare_three_way_result_t<T, U>\r\n//     operator<=>(const optional<T>&, const optional<U>&);\r\n\r\n#include <cassert>\r\n#include <compare>\r\n#include <optional>\r\n\r\n#include \"test_comparisons.h\"\r\n\r\nnamespace relops::three_way {\r\n#if _HAS_CXX20\r\nconstexpr bool test() {\r\n  {\r\n    std::optional<int> op1;\r\n    std::optional<int> op2;\r\n\r\n    assert((op1 <=> op2) == std::strong_ordering::equal);\r\n    assert(testOrder(op1, op2, std::strong_ordering::equal));\r\n  }\r\n  {\r\n    std::optional<int> op1{3};\r\n    std::optional<int> op2{3};\r\n    assert((op1 <=> op1) == std::strong_ordering::equal);\r\n    assert(testOrder(op1, op1, std::strong_ordering::equal));\r\n    assert((op1 <=> op2) == std::strong_ordering::equal);\r\n    assert(testOrder(op1, op2, std::strong_ordering::equal));\r\n    assert((op2 <=> op1) == std::strong_ordering::equal);\r\n    assert(testOrder(op2, op1, std::strong_ordering::equal));\r\n  }\r\n  {\r\n    std::optional<int> op;\r\n    std::optional<int> op1{2};\r\n    std::optional<int> op2{3};\r\n    assert((op <=> op2) == std::strong_ordering::less);\r\n    assert(testOrder(op, op2, std::strong_ordering::less));\r\n    assert((op1 <=> op2) == std::strong_ordering::less);\r\n    assert(testOrder(op1, op2, std::strong_ordering::less));\r\n  }\r\n  {\r\n    std::optional<int> op;\r\n    std::optional<int> op1{3};\r\n    std::optional<int> op2{2};\r\n    assert((op1 <=> op) == std::strong_ordering::greater);\r\n    assert(testOrder(op1, op, std::strong_ordering::greater));\r\n    assert((op1 <=> op2) == std::strong_ordering::greater);\r\n    assert(testOrder(op1, op2, std::strong_ordering::greater));\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\nint run_test() {\r\n  assert(test());\r\n  static_assert(test());\r\n  return 0;\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\nint run_test() {\r\n    return 0;\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n} // namespace relops::three_way\r\n// -- END: test/std/utilities/optional/optional.relops/compare.three_way.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.relops/equal.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T, class U> constexpr bool operator==(const optional<T>& x, const optional<U>& y);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace relops::equal {\r\nusing std::optional;\r\n\r\nstruct X {\r\n  int i_;\r\n\r\n  constexpr X(int i) : i_(i) {}\r\n};\r\n\r\nconstexpr bool operator==(const X& lhs, const X& rhs) {\r\n  return lhs.i_ == rhs.i_;\r\n}\r\n\r\nint run_test() {\r\n  {\r\n    typedef X T;\r\n    typedef optional<T> O;\r\n\r\n    constexpr O o1;    // disengaged\r\n    constexpr O o2;    // disengaged\r\n    constexpr O o3{1}; // engaged\r\n    constexpr O o4{2}; // engaged\r\n    constexpr O o5{1}; // engaged\r\n\r\n    static_assert(o1 == o1, \"\");\r\n    static_assert(o1 == o2, \"\");\r\n    static_assert(!(o1 == o3), \"\");\r\n    static_assert(!(o1 == o4), \"\");\r\n    static_assert(!(o1 == o5), \"\");\r\n\r\n    static_assert(o2 == o1, \"\");\r\n    static_assert(o2 == o2, \"\");\r\n    static_assert(!(o2 == o3), \"\");\r\n    static_assert(!(o2 == o4), \"\");\r\n    static_assert(!(o2 == o5), \"\");\r\n\r\n    static_assert(!(o3 == o1), \"\");\r\n    static_assert(!(o3 == o2), \"\");\r\n    static_assert(o3 == o3, \"\");\r\n    static_assert(!(o3 == o4), \"\");\r\n    static_assert(o3 == o5, \"\");\r\n\r\n    static_assert(!(o4 == o1), \"\");\r\n    static_assert(!(o4 == o2), \"\");\r\n    static_assert(!(o4 == o3), \"\");\r\n    static_assert(o4 == o4, \"\");\r\n    static_assert(!(o4 == o5), \"\");\r\n\r\n    static_assert(!(o5 == o1), \"\");\r\n    static_assert(!(o5 == o2), \"\");\r\n    static_assert(o5 == o3, \"\");\r\n    static_assert(!(o5 == o4), \"\");\r\n    static_assert(o5 == o5, \"\");\r\n  }\r\n  {\r\n    using O1 = optional<int>;\r\n    using O2 = optional<long>;\r\n    constexpr O1 o1(42);\r\n    static_assert(o1 == O2(42), \"\");\r\n    static_assert(!(O2(101) == o1), \"\");\r\n  }\r\n  {\r\n    using O1 = optional<int>;\r\n    using O2 = optional<const int>;\r\n    constexpr O1 o1(42);\r\n    static_assert(o1 == O2(42), \"\");\r\n    static_assert(!(O2(101) == o1), \"\");\r\n  }\r\n\r\n  return 0;\r\n}\r\n} // namespace relops::equal\r\n// -- END: test/std/utilities/optional/optional.relops/equal.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.relops/greater_equal.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T, class U> constexpr bool operator>= (const optional<T>& x, const optional<U>& y);\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace relops::greater_equal {\r\nusing std::optional;\r\n\r\nstruct X {\r\n  int i_;\r\n\r\n  constexpr X(int i) : i_(i) {}\r\n};\r\n\r\nconstexpr bool operator>=(const X& lhs, const X& rhs) {\r\n  return lhs.i_ >= rhs.i_;\r\n}\r\n\r\nint run_test() {\r\n  {\r\n    typedef optional<X> O;\r\n\r\n    constexpr O o1;    // disengaged\r\n    constexpr O o2;    // disengaged\r\n    constexpr O o3{1}; // engaged\r\n    constexpr O o4{2}; // engaged\r\n    constexpr O o5{1}; // engaged\r\n\r\n    static_assert((o1 >= o1), \"\");\r\n    static_assert((o1 >= o2), \"\");\r\n    static_assert(!(o1 >= o3), \"\");\r\n    static_assert(!(o1 >= o4), \"\");\r\n    static_assert(!(o1 >= o5), \"\");\r\n\r\n    static_assert((o2 >= o1), \"\");\r\n    static_assert((o2 >= o2), \"\");\r\n    static_assert(!(o2 >= o3), \"\");\r\n    static_assert(!(o2 >= o4), \"\");\r\n    static_assert(!(o2 >= o5), \"\");\r\n\r\n    static_assert((o3 >= o1), \"\");\r\n    static_assert((o3 >= o2), \"\");\r\n    static_assert((o3 >= o3), \"\");\r\n    static_assert(!(o3 >= o4), \"\");\r\n    static_assert((o3 >= o5), \"\");\r\n\r\n    static_assert((o4 >= o1), \"\");\r\n    static_assert((o4 >= o2), \"\");\r\n    static_assert((o4 >= o3), \"\");\r\n    static_assert((o4 >= o4), \"\");\r\n    static_assert((o4 >= o5), \"\");\r\n\r\n    static_assert((o5 >= o1), \"\");\r\n    static_assert((o5 >= o2), \"\");\r\n    static_assert((o5 >= o3), \"\");\r\n    static_assert(!(o5 >= o4), \"\");\r\n    static_assert((o5 >= o5), \"\");\r\n  }\r\n  {\r\n    using O1 = optional<int>;\r\n    using O2 = optional<long>;\r\n    constexpr O1 o1(42);\r\n    static_assert(o1 >= O2(42), \"\");\r\n    static_assert(!(O2(11) >= o1), \"\");\r\n  }\r\n  {\r\n    using O1 = optional<int>;\r\n    using O2 = optional<const int>;\r\n    constexpr O1 o1(42);\r\n    static_assert(o1 >= O2(42), \"\");\r\n    static_assert(!(O2(1) >= o1), \"\");\r\n  }\r\n\r\n  return 0;\r\n}\r\n} // namespace relops::greater_equal\r\n// -- END: test/std/utilities/optional/optional.relops/greater_equal.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.relops/greater_than.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T, class U> constexpr bool operator> (const optional<T>& x, const optional<U>& y);\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace relops::greater_than {\r\nusing std::optional;\r\n\r\nstruct X {\r\n  int i_;\r\n\r\n  constexpr X(int i) : i_(i) {}\r\n};\r\n\r\nconstexpr bool operator>(const X& lhs, const X& rhs) { return lhs.i_ > rhs.i_; }\r\n\r\nint run_test() {\r\n  {\r\n    typedef optional<X> O;\r\n\r\n    constexpr O o1;    // disengaged\r\n    constexpr O o2;    // disengaged\r\n    constexpr O o3{1}; // engaged\r\n    constexpr O o4{2}; // engaged\r\n    constexpr O o5{1}; // engaged\r\n\r\n    static_assert(!(o1 > o1), \"\");\r\n    static_assert(!(o1 > o2), \"\");\r\n    static_assert(!(o1 > o3), \"\");\r\n    static_assert(!(o1 > o4), \"\");\r\n    static_assert(!(o1 > o5), \"\");\r\n\r\n    static_assert(!(o2 > o1), \"\");\r\n    static_assert(!(o2 > o2), \"\");\r\n    static_assert(!(o2 > o3), \"\");\r\n    static_assert(!(o2 > o4), \"\");\r\n    static_assert(!(o2 > o5), \"\");\r\n\r\n    static_assert((o3 > o1), \"\");\r\n    static_assert((o3 > o2), \"\");\r\n    static_assert(!(o3 > o3), \"\");\r\n    static_assert(!(o3 > o4), \"\");\r\n    static_assert(!(o3 > o5), \"\");\r\n\r\n    static_assert((o4 > o1), \"\");\r\n    static_assert((o4 > o2), \"\");\r\n    static_assert((o4 > o3), \"\");\r\n    static_assert(!(o4 > o4), \"\");\r\n    static_assert((o4 > o5), \"\");\r\n\r\n    static_assert((o5 > o1), \"\");\r\n    static_assert((o5 > o2), \"\");\r\n    static_assert(!(o5 > o3), \"\");\r\n    static_assert(!(o5 > o4), \"\");\r\n    static_assert(!(o5 > o5), \"\");\r\n  }\r\n  {\r\n    using O1 = optional<int>;\r\n    using O2 = optional<long>;\r\n    constexpr O1 o1(42);\r\n    static_assert(o1 > O2(1), \"\");\r\n    static_assert(!(O2(42) > o1), \"\");\r\n  }\r\n  {\r\n    using O1 = optional<int>;\r\n    using O2 = optional<const int>;\r\n    constexpr O1 o1(42);\r\n    static_assert(o1 > O2(1), \"\");\r\n    static_assert(!(O2(42) > o1), \"\");\r\n  }\r\n\r\n  return 0;\r\n}\r\n} // namespace relops::greater_than\r\n// -- END: test/std/utilities/optional/optional.relops/greater_than.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.relops/less_equal.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T, class U> constexpr bool operator<= (const optional<T>& x, const optional<U>& y);\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace relops::less_equal {\r\nusing std::optional;\r\n\r\nstruct X {\r\n  int i_;\r\n\r\n  constexpr X(int i) : i_(i) {}\r\n};\r\n\r\nconstexpr bool operator<=(const X& lhs, const X& rhs) {\r\n  return lhs.i_ <= rhs.i_;\r\n}\r\n\r\nint run_test() {\r\n  {\r\n    typedef optional<X> O;\r\n\r\n    constexpr O o1;    // disengaged\r\n    constexpr O o2;    // disengaged\r\n    constexpr O o3{1}; // engaged\r\n    constexpr O o4{2}; // engaged\r\n    constexpr O o5{1}; // engaged\r\n\r\n    static_assert((o1 <= o1), \"\");\r\n    static_assert((o1 <= o2), \"\");\r\n    static_assert((o1 <= o3), \"\");\r\n    static_assert((o1 <= o4), \"\");\r\n    static_assert((o1 <= o5), \"\");\r\n\r\n    static_assert((o2 <= o1), \"\");\r\n    static_assert((o2 <= o2), \"\");\r\n    static_assert((o2 <= o3), \"\");\r\n    static_assert((o2 <= o4), \"\");\r\n    static_assert((o2 <= o5), \"\");\r\n\r\n    static_assert(!(o3 <= o1), \"\");\r\n    static_assert(!(o3 <= o2), \"\");\r\n    static_assert((o3 <= o3), \"\");\r\n    static_assert((o3 <= o4), \"\");\r\n    static_assert((o3 <= o5), \"\");\r\n\r\n    static_assert(!(o4 <= o1), \"\");\r\n    static_assert(!(o4 <= o2), \"\");\r\n    static_assert(!(o4 <= o3), \"\");\r\n    static_assert((o4 <= o4), \"\");\r\n    static_assert(!(o4 <= o5), \"\");\r\n\r\n    static_assert(!(o5 <= o1), \"\");\r\n    static_assert(!(o5 <= o2), \"\");\r\n    static_assert((o5 <= o3), \"\");\r\n    static_assert((o5 <= o4), \"\");\r\n    static_assert((o5 <= o5), \"\");\r\n  }\r\n  {\r\n    using O1 = optional<int>;\r\n    using O2 = optional<long>;\r\n    constexpr O1 o1(42);\r\n    static_assert(o1 <= O2(42), \"\");\r\n    static_assert(!(O2(101) <= o1), \"\");\r\n  }\r\n  {\r\n    using O1 = optional<int>;\r\n    using O2 = optional<const int>;\r\n    constexpr O1 o1(42);\r\n    static_assert(o1 <= O2(42), \"\");\r\n    static_assert(!(O2(101) <= o1), \"\");\r\n  }\r\n\r\n  return 0;\r\n}\r\n} // namespace relops::less_equal\r\n// -- END: test/std/utilities/optional/optional.relops/less_equal.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.relops/less_than.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T, class U> constexpr bool operator< (const optional<T>& x, const optional<U>& y);\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace relops::less_than {\r\nusing std::optional;\r\n\r\nstruct X {\r\n  int i_;\r\n\r\n  constexpr X(int i) : i_(i) {}\r\n};\r\n\r\nconstexpr bool operator<(const X& lhs, const X& rhs) { return lhs.i_ < rhs.i_; }\r\n\r\nint run_test() {\r\n  {\r\n    typedef optional<X> O;\r\n\r\n    constexpr O o1;    // disengaged\r\n    constexpr O o2;    // disengaged\r\n    constexpr O o3{1}; // engaged\r\n    constexpr O o4{2}; // engaged\r\n    constexpr O o5{1}; // engaged\r\n\r\n    static_assert(!(o1 < o1), \"\");\r\n    static_assert(!(o1 < o2), \"\");\r\n    static_assert((o1 < o3), \"\");\r\n    static_assert((o1 < o4), \"\");\r\n    static_assert((o1 < o5), \"\");\r\n\r\n    static_assert(!(o2 < o1), \"\");\r\n    static_assert(!(o2 < o2), \"\");\r\n    static_assert((o2 < o3), \"\");\r\n    static_assert((o2 < o4), \"\");\r\n    static_assert((o2 < o5), \"\");\r\n\r\n    static_assert(!(o3 < o1), \"\");\r\n    static_assert(!(o3 < o2), \"\");\r\n    static_assert(!(o3 < o3), \"\");\r\n    static_assert((o3 < o4), \"\");\r\n    static_assert(!(o3 < o5), \"\");\r\n\r\n    static_assert(!(o4 < o1), \"\");\r\n    static_assert(!(o4 < o2), \"\");\r\n    static_assert(!(o4 < o3), \"\");\r\n    static_assert(!(o4 < o4), \"\");\r\n    static_assert(!(o4 < o5), \"\");\r\n\r\n    static_assert(!(o5 < o1), \"\");\r\n    static_assert(!(o5 < o2), \"\");\r\n    static_assert(!(o5 < o3), \"\");\r\n    static_assert((o5 < o4), \"\");\r\n    static_assert(!(o5 < o5), \"\");\r\n  }\r\n  {\r\n    using O1 = optional<int>;\r\n    using O2 = optional<long>;\r\n    constexpr O1 o1(42);\r\n    static_assert(o1 < O2(101), \"\");\r\n    static_assert(!(O2(101) < o1), \"\");\r\n  }\r\n  {\r\n    using O1 = optional<int>;\r\n    using O2 = optional<const int>;\r\n    constexpr O1 o1(42);\r\n    static_assert(o1 < O2(101), \"\");\r\n    static_assert(!(O2(101) < o1), \"\");\r\n  }\r\n\r\n  return 0;\r\n}\r\n} // namespace relops::less_than\r\n// -- END: test/std/utilities/optional/optional.relops/less_than.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.relops/not_equal.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T, class U> constexpr bool operator!=(const optional<T>& x, const optional<U>& y);\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace relops::not_equal {\r\nusing std::optional;\r\n\r\nstruct X {\r\n  int i_;\r\n\r\n  constexpr X(int i) : i_(i) {}\r\n};\r\n\r\nconstexpr bool operator!=(const X& lhs, const X& rhs) {\r\n  return lhs.i_ != rhs.i_;\r\n}\r\n\r\nint run_test() {\r\n  {\r\n    typedef X T;\r\n    typedef optional<T> O;\r\n\r\n    constexpr O o1;    // disengaged\r\n    constexpr O o2;    // disengaged\r\n    constexpr O o3{1}; // engaged\r\n    constexpr O o4{2}; // engaged\r\n    constexpr O o5{1}; // engaged\r\n\r\n    static_assert(!(o1 != o1), \"\");\r\n    static_assert(!(o1 != o2), \"\");\r\n    static_assert((o1 != o3), \"\");\r\n    static_assert((o1 != o4), \"\");\r\n    static_assert((o1 != o5), \"\");\r\n\r\n    static_assert(!(o2 != o1), \"\");\r\n    static_assert(!(o2 != o2), \"\");\r\n    static_assert((o2 != o3), \"\");\r\n    static_assert((o2 != o4), \"\");\r\n    static_assert((o2 != o5), \"\");\r\n\r\n    static_assert((o3 != o1), \"\");\r\n    static_assert((o3 != o2), \"\");\r\n    static_assert(!(o3 != o3), \"\");\r\n    static_assert((o3 != o4), \"\");\r\n    static_assert(!(o3 != o5), \"\");\r\n\r\n    static_assert((o4 != o1), \"\");\r\n    static_assert((o4 != o2), \"\");\r\n    static_assert((o4 != o3), \"\");\r\n    static_assert(!(o4 != o4), \"\");\r\n    static_assert((o4 != o5), \"\");\r\n\r\n    static_assert((o5 != o1), \"\");\r\n    static_assert((o5 != o2), \"\");\r\n    static_assert(!(o5 != o3), \"\");\r\n    static_assert((o5 != o4), \"\");\r\n    static_assert(!(o5 != o5), \"\");\r\n  }\r\n  {\r\n    using O1 = optional<int>;\r\n    using O2 = optional<long>;\r\n    constexpr O1 o1(42);\r\n    static_assert(o1 != O2(101), \"\");\r\n    static_assert(!(O2(42) != o1), \"\");\r\n  }\r\n  {\r\n    using O1 = optional<int>;\r\n    using O2 = optional<const int>;\r\n    constexpr O1 o1(42);\r\n    static_assert(o1 != O2(101), \"\");\r\n    static_assert(!(O2(42) != o1), \"\");\r\n  }\r\n\r\n  return 0;\r\n}\r\n} // namespace relops::not_equal\r\n// -- END: test/std/utilities/optional/optional.relops/not_equal.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.specalg/make_optional.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n\r\n// <optional>\r\n//\r\n// template <class T>\r\n//   constexpr optional<decay_t<T>> make_optional(T&& v);\r\n\r\n#include <optional>\r\n#include <string>\r\n#include <memory>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace nonmembers::make_optional {\r\nint run_test()\r\n{\r\n    {\r\n        int arr[10];\r\n        auto opt = std::make_optional(arr);\r\n        ASSERT_SAME_TYPE(decltype(opt), std::optional<int*>);\r\n        assert(*opt == arr);\r\n    }\r\n    {\r\n        constexpr auto opt = std::make_optional(2);\r\n        ASSERT_SAME_TYPE(decltype(opt), const std::optional<int>);\r\n        static_assert(opt.value() == 2);\r\n    }\r\n    {\r\n        auto opt = std::make_optional(2);\r\n        ASSERT_SAME_TYPE(decltype(opt), std::optional<int>);\r\n        assert(*opt == 2);\r\n    }\r\n    {\r\n        const std::string s = \"123\";\r\n        auto opt = std::make_optional(s);\r\n        ASSERT_SAME_TYPE(decltype(opt), std::optional<std::string>);\r\n        assert(*opt == \"123\");\r\n    }\r\n    {\r\n        std::unique_ptr<int> s = std::make_unique<int>(3);\r\n        auto opt = std::make_optional(std::move(s));\r\n        ASSERT_SAME_TYPE(decltype(opt), std::optional<std::unique_ptr<int>>);\r\n        assert(**opt == 3);\r\n        assert(s == nullptr);\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace nonmembers::make_optional\r\n// -- END: test/std/utilities/optional/optional.specalg/make_optional.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.specalg/make_optional_explicit.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T, class... Args>\r\n//   constexpr optional<T> make_optional(Args&&... args);\r\n\r\n#include <optional>\r\n#include <string>\r\n#include <memory>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace nonmembers::make_optional_explicit {\r\nint run_test()\r\n{\r\n    {\r\n        constexpr auto opt = std::make_optional<int>('a');\r\n        static_assert(*opt == int('a'));\r\n    }\r\n    {\r\n        std::string s = \"123\";\r\n        auto opt = std::make_optional<std::string>(s);\r\n        assert(*opt == \"123\");\r\n    }\r\n    {\r\n        std::unique_ptr<int> s = std::make_unique<int>(3);\r\n        auto opt = std::make_optional<std::unique_ptr<int>>(std::move(s));\r\n        assert(**opt == 3);\r\n        assert(s == nullptr);\r\n    }\r\n    {\r\n        auto opt = std::make_optional<std::string>(4u, 'X');\r\n        assert(*opt == \"XXXX\");\r\n    }\r\n\r\n  return 0;\r\n}\r\n} // namespace nonmembers::make_optional_explicit\r\n// -- END: test/std/utilities/optional/optional.specalg/make_optional_explicit.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.specalg/make_optional_explicit_initializer_list.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T, class U, class... Args>\r\n//   constexpr optional<T> make_optional(initializer_list<U> il, Args&&... args);\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <optional>\r\n#include <string>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace nonmembers::make_optional_explicit_init_list {\r\nstruct TestT {\r\n  int x;\r\n  int size;\r\n  int *ptr;\r\n  constexpr TestT(std::initializer_list<int> il)\r\n    : x(*il.begin()), size(static_cast<int>(il.size())), ptr(nullptr) {}\r\n  constexpr TestT(std::initializer_list<int> il, int *p)\r\n    : x(*il.begin()), size(static_cast<int>(il.size())), ptr(p) {}\r\n};\r\n\r\nconstexpr bool test()\r\n{\r\n  {\r\n    auto opt = std::make_optional<TestT>({42, 2, 3});\r\n    ASSERT_SAME_TYPE(decltype(opt), std::optional<TestT>);\r\n    assert(opt->x == 42);\r\n    assert(opt->size == 3);\r\n    assert(opt->ptr == nullptr);\r\n  }\r\n  {\r\n    int i = 42;\r\n    auto opt = std::make_optional<TestT>({42, 2, 3}, &i);\r\n    ASSERT_SAME_TYPE(decltype(opt), std::optional<TestT>);\r\n    assert(opt->x == 42);\r\n    assert(opt->size == 3);\r\n    assert(opt->ptr == &i);\r\n  }\r\n  return true;\r\n}\r\n\r\nint run_test()\r\n{\r\n  test();\r\n  static_assert(test());\r\n  {\r\n    auto opt = std::make_optional<std::string>({'1', '2', '3'});\r\n    assert(*opt == \"123\");\r\n  }\r\n  {\r\n    auto opt = std::make_optional<std::string>({'a', 'b', 'c'}, std::allocator<char>{});\r\n    assert(*opt == \"abc\");\r\n  }\r\n  return 0;\r\n}\r\n} // namespace nonmembers::make_optional_explicit_init_list\r\n// -- END: test/std/utilities/optional/optional.specalg/make_optional_explicit_initializer_list.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.specalg/swap.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// template <class T> void swap(optional<T>& x, optional<T>& y)\r\n//     noexcept(noexcept(x.swap(y)));\r\n\r\n#include <optional>\r\n#include <type_traits>\r\n#include <cassert>\r\n\r\n#include \"test_macros.h\"\r\n#include \"archetypes.h\"\r\n\r\nnamespace nonmembers::swap_ {\r\nusing std::optional;\r\n\r\nclass X\r\n{\r\n    int i_;\r\npublic:\r\n    static unsigned dtor_called;\r\n    X(int i) : i_(i) {}\r\n    X(X&& x) = default;\r\n    X& operator=(X&&) = default;\r\n    ~X() {++dtor_called;}\r\n\r\n    friend bool operator==(const X& x, const X& y) {return x.i_ == y.i_;}\r\n};\r\n\r\nunsigned X::dtor_called = 0;\r\n\r\nclass Y\r\n{\r\n    int i_;\r\npublic:\r\n    static unsigned dtor_called;\r\n    Y(int i) : i_(i) {}\r\n    Y(Y&&) = default;\r\n    ~Y() {++dtor_called;}\r\n\r\n    friend constexpr bool operator==(const Y& x, const Y& y) {return x.i_ == y.i_;}\r\n    friend void swap(Y& x, Y& y) {std::swap(x.i_, y.i_);}\r\n};\r\n\r\nunsigned Y::dtor_called = 0;\r\n\r\nclass Z\r\n{\r\n    int i_;\r\npublic:\r\n    Z(int i) : i_(i) {}\r\n    Z(Z&&) { TEST_THROW(7);}\r\n\r\n    friend constexpr bool operator==(const Z& x, const Z& y) {return x.i_ == y.i_;}\r\n    friend void swap(Z&, Z&) { TEST_THROW(6);}\r\n};\r\n\r\n\r\nstruct NonSwappable {\r\n    NonSwappable(NonSwappable const&) = delete;\r\n};\r\nvoid swap(NonSwappable&, NonSwappable&) = delete;\r\n\r\nvoid test_swap_sfinae() {\r\n    using std::optional;\r\n    {\r\n        using T = TestTypes::TestType;\r\n        static_assert(std::is_swappable_v<optional<T>>, \"\");\r\n    }\r\n    {\r\n        using T = TestTypes::MoveOnly;\r\n        static_assert(std::is_swappable_v<optional<T>>, \"\");\r\n    }\r\n    {\r\n        using T = TestTypes::Copyable;\r\n        static_assert(std::is_swappable_v<optional<T>>, \"\");\r\n    }\r\n    {\r\n        using T = TestTypes::NoCtors;\r\n        static_assert(!std::is_swappable_v<optional<T>>, \"\");\r\n    }\r\n    {\r\n        using T = NonSwappable;\r\n        static_assert(!std::is_swappable_v<optional<T>>, \"\");\r\n    }\r\n    {\r\n        // Even though CopyOnly has deleted move operations, those operations\r\n        // cause optional<CopyOnly> to have implicitly deleted move operations\r\n        // that decay into copies.\r\n        using T = TestTypes::CopyOnly;\r\n        using Opt = optional<T>;\r\n        T::reset();\r\n        Opt L(101), R(42);\r\n        T::reset_constructors();\r\n        std::swap(L, R);\r\n        assert(L->value == 42);\r\n        assert(R->value == 101);\r\n        assert(T::copy_constructed == 1);\r\n        assert(T::constructed == T::copy_constructed);\r\n        assert(T::assigned == 2);\r\n        assert(T::assigned == T::copy_assigned);\r\n    }\r\n}\r\n\r\nint run_test()\r\n{\r\n    test_swap_sfinae();\r\n    {\r\n        optional<int> opt1;\r\n        optional<int> opt2;\r\n        static_assert(noexcept(swap(opt1, opt2)) == true, \"\");\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        swap(opt1, opt2);\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == false);\r\n    }\r\n    {\r\n        optional<int> opt1(1);\r\n        optional<int> opt2;\r\n        static_assert(noexcept(swap(opt1, opt2)) == true, \"\");\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        swap(opt1, opt2);\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 1);\r\n    }\r\n    {\r\n        optional<int> opt1;\r\n        optional<int> opt2(2);\r\n        static_assert(noexcept(swap(opt1, opt2)) == true, \"\");\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        swap(opt1, opt2);\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 2);\r\n        assert(static_cast<bool>(opt2) == false);\r\n    }\r\n    {\r\n        optional<int> opt1(1);\r\n        optional<int> opt2(2);\r\n        static_assert(noexcept(swap(opt1, opt2)) == true, \"\");\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        swap(opt1, opt2);\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 2);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 1);\r\n    }\r\n    {\r\n        optional<X> opt1;\r\n        optional<X> opt2;\r\n        static_assert(noexcept(swap(opt1, opt2)) == true, \"\");\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        swap(opt1, opt2);\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        assert(X::dtor_called == 0);\r\n    }\r\n    {\r\n        optional<X> opt1(1);\r\n        optional<X> opt2;\r\n        static_assert(noexcept(swap(opt1, opt2)) == true, \"\");\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        X::dtor_called = 0;\r\n        swap(opt1, opt2);\r\n        assert(X::dtor_called == 1);\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 1);\r\n    }\r\n    {\r\n        optional<X> opt1;\r\n        optional<X> opt2(2);\r\n        static_assert(noexcept(swap(opt1, opt2)) == true, \"\");\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        X::dtor_called = 0;\r\n        swap(opt1, opt2);\r\n        assert(X::dtor_called == 1);\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 2);\r\n        assert(static_cast<bool>(opt2) == false);\r\n    }\r\n    {\r\n        optional<X> opt1(1);\r\n        optional<X> opt2(2);\r\n        static_assert(noexcept(swap(opt1, opt2)) == true, \"\");\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        X::dtor_called = 0;\r\n        swap(opt1, opt2);\r\n        assert(X::dtor_called == 1);  // from inside std::swap\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 2);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 1);\r\n    }\r\n    {\r\n        optional<Y> opt1;\r\n        optional<Y> opt2;\r\n        static_assert(noexcept(swap(opt1, opt2)) == false, \"\");\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        swap(opt1, opt2);\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        assert(Y::dtor_called == 0);\r\n    }\r\n    {\r\n        optional<Y> opt1(1);\r\n        optional<Y> opt2;\r\n        static_assert(noexcept(swap(opt1, opt2)) == false, \"\");\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        Y::dtor_called = 0;\r\n        swap(opt1, opt2);\r\n        assert(Y::dtor_called == 1);\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 1);\r\n    }\r\n    {\r\n        optional<Y> opt1;\r\n        optional<Y> opt2(2);\r\n        static_assert(noexcept(swap(opt1, opt2)) == false, \"\");\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        Y::dtor_called = 0;\r\n        swap(opt1, opt2);\r\n        assert(Y::dtor_called == 1);\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 2);\r\n        assert(static_cast<bool>(opt2) == false);\r\n    }\r\n    {\r\n        optional<Y> opt1(1);\r\n        optional<Y> opt2(2);\r\n        static_assert(noexcept(swap(opt1, opt2)) == false, \"\");\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        Y::dtor_called = 0;\r\n        swap(opt1, opt2);\r\n        assert(Y::dtor_called == 0);\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 2);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 1);\r\n    }\r\n    {\r\n        optional<Z> opt1;\r\n        optional<Z> opt2;\r\n        static_assert(noexcept(swap(opt1, opt2)) == false, \"\");\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        swap(opt1, opt2);\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == false);\r\n    }\r\n#ifndef TEST_HAS_NO_EXCEPTIONS\r\n    {\r\n        optional<Z> opt1;\r\n        opt1.emplace(1);\r\n        optional<Z> opt2;\r\n        static_assert(noexcept(swap(opt1, opt2)) == false, \"\");\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == false);\r\n        try\r\n        {\r\n            swap(opt1, opt2);\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 7);\r\n        }\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == false);\r\n    }\r\n    {\r\n        optional<Z> opt1;\r\n        optional<Z> opt2;\r\n        opt2.emplace(2);\r\n        static_assert(noexcept(swap(opt1, opt2)) == false, \"\");\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        try\r\n        {\r\n            swap(opt1, opt2);\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 7);\r\n        }\r\n        assert(static_cast<bool>(opt1) == false);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n    }\r\n    {\r\n        optional<Z> opt1;\r\n        opt1.emplace(1);\r\n        optional<Z> opt2;\r\n        opt2.emplace(2);\r\n        static_assert(noexcept(swap(opt1, opt2)) == false, \"\");\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n        try\r\n        {\r\n            swap(opt1, opt2);\r\n            assert(false);\r\n        }\r\n        catch (int i)\r\n        {\r\n            assert(i == 6);\r\n        }\r\n        assert(static_cast<bool>(opt1) == true);\r\n        assert(*opt1 == 1);\r\n        assert(static_cast<bool>(opt2) == true);\r\n        assert(*opt2 == 2);\r\n    }\r\n#endif // TEST_HAS_NO_EXCEPTIONS\r\n\r\n  return 0;\r\n}\r\n} // namespace nonmembers::swap_\r\n// -- END: test/std/utilities/optional/optional.specalg/swap.pass.cpp\r\n\r\n// -- BEGIN: test/std/utilities/optional/optional.syn/optional_includes_initializer_list.pass.cpp\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n\r\n// <optional>\r\n\r\n// #include <initializer_list>\r\n\r\n#include <optional>\r\n\r\n#include \"test_macros.h\"\r\n\r\nnamespace optional_includes_initializer_list {\r\nint run_test()\r\n{\r\n    using std::optional;\r\n\r\n    std::initializer_list<int> list;\r\n    (void)list;\r\n\r\n  return 0;\r\n}\r\n} // namespace optional_includes_initializer_list\r\n// -- END: test/std/utilities/optional/optional.syn/optional_includes_initializer_list.pass.cpp\r\n// LLVM SOURCES END\r\n// clang-format on\r\n\r\n#include <cassert>\r\n#include <optional>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#if _HAS_CXX20\r\n#define CONSTEXPR20 constexpr\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n#define CONSTEXPR20 inline\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\nnamespace msvc {\r\n    namespace size {\r\n        template <int>\r\n        struct empty {};\r\n\r\n        struct not_empty {\r\n            int i;\r\n        };\r\n\r\n        struct __declspec(empty_bases) many_bases : empty<0>, empty<1>, empty<2>, empty<3> {};\r\n\r\n        template <class T>\r\n        constexpr bool check_size = sizeof(std::optional<T>) == sizeof(T) + alignof(T);\r\n\r\n        static_assert(check_size<bool>);\r\n        static_assert(check_size<char>);\r\n        static_assert(check_size<unsigned char>);\r\n        static_assert(check_size<int>);\r\n        static_assert(check_size<unsigned int>);\r\n        static_assert(check_size<long>);\r\n        static_assert(check_size<long long>);\r\n        static_assert(check_size<float>);\r\n        static_assert(check_size<double>);\r\n        static_assert(check_size<void*>);\r\n        static_assert(check_size<empty<0>>);\r\n        static_assert(check_size<not_empty>);\r\n        static_assert(check_size<many_bases>);\r\n    } // namespace size\r\n\r\n    namespace lwg2842 {\r\n        struct ConvertibleFromInPlace {\r\n            ConvertibleFromInPlace(const std::in_place_t&) {}\r\n        };\r\n\r\n        using std::in_place_t;\r\n        using std::is_constructible_v;\r\n        using O = std::optional<ConvertibleFromInPlace>;\r\n        // ConvertibleFromInPlace is not default constructible, so these constructions do not match\r\n        // optional(in_place_t, args...). They will match the converting constructor template if it does not properly\r\n        // reject arguments that decay to std::in_place_t as required by LWG-2842.\r\n        static_assert(!is_constructible_v<O, in_place_t>);\r\n        static_assert(!is_constructible_v<O, in_place_t&>);\r\n        static_assert(!is_constructible_v<O, const in_place_t>);\r\n        static_assert(!is_constructible_v<O, const in_place_t&>);\r\n    } // namespace lwg2842\r\n\r\n    namespace lwg3836 {\r\n        static_assert(std::is_convertible_v<std::optional<int>, std::optional<bool>>);\r\n        static_assert(std::is_convertible_v<const std::optional<int>&, std::optional<bool>>);\r\n        CONSTEXPR20 bool run_test() {\r\n            std::optional<int> oi  = 0;\r\n            std::optional<bool> ob = oi;\r\n            assert(!ob.value());\r\n            assert(!std::optional<bool>{std::optional<int>{0}}.value());\r\n\r\n            return true;\r\n        }\r\n#if _HAS_CXX20\r\n        static_assert(run_test());\r\n#endif // _HAS_CXX20\r\n    } // namespace lwg3836\r\n\r\n    namespace lwg3886 {\r\n        enum class Qualification {\r\n            None,\r\n            Const,\r\n            Volatile,\r\n            ConstVolatile,\r\n        };\r\n\r\n        template <class T>\r\n        constexpr Qualification CvQualOf =\r\n            std::is_const_v<std::remove_reference_t<T>>\r\n                ? (std::is_volatile_v<std::remove_reference_t<T>> ? Qualification::ConstVolatile : Qualification::Const)\r\n                : (std::is_volatile_v<std::remove_reference_t<T>> ? Qualification::Volatile : Qualification::None);\r\n\r\n        struct QualDistinction {\r\n            QualDistinction() = default;\r\n\r\n            constexpr QualDistinction(QualDistinction&&) noexcept : qual_{Qualification::None} {}\r\n            constexpr QualDistinction(const QualDistinction&) noexcept : qual_{Qualification::Const} {}\r\n            template <class T,\r\n                std::enable_if_t<std::is_same_v<std::remove_cv_t<std::remove_reference_t<T>>, QualDistinction>, int> =\r\n                    0>\r\n            constexpr QualDistinction(T&&) noexcept : qual_{CvQualOf<T>} {}\r\n\r\n            constexpr QualDistinction& operator=(QualDistinction&&) noexcept {\r\n                qual_ = Qualification::None;\r\n                return *this;\r\n            }\r\n            constexpr QualDistinction& operator=(const QualDistinction&) noexcept {\r\n                qual_ = Qualification::Const;\r\n                return *this;\r\n            }\r\n            template <class T,\r\n                std::enable_if_t<std::is_same_v<std::remove_cv_t<std::remove_reference_t<T>>, QualDistinction>, int> =\r\n                    0>\r\n            constexpr QualDistinction& operator=(T&&) noexcept {\r\n                qual_ = CvQualOf<T>;\r\n                return *this;\r\n            }\r\n            template <class T,\r\n                std::enable_if_t<std::is_same_v<std::remove_cv_t<std::remove_reference_t<T>>, QualDistinction>, int> =\r\n                    0>\r\n            constexpr const QualDistinction& operator=(T&&) const noexcept {\r\n                qual_ = CvQualOf<T>;\r\n                return *this;\r\n            }\r\n            template <class T,\r\n                std::enable_if_t<std::is_same_v<std::remove_cv_t<std::remove_reference_t<T>>, QualDistinction>, int> =\r\n                    0>\r\n            volatile QualDistinction& operator=(T&&) volatile noexcept {\r\n                qual_ = CvQualOf<T>;\r\n                return *this;\r\n            }\r\n            template <class T,\r\n                std::enable_if_t<std::is_same_v<std::remove_cv_t<std::remove_reference_t<T>>, QualDistinction>, int> =\r\n                    0>\r\n            const volatile QualDistinction& operator=(T&&) const volatile noexcept {\r\n                qual_ = CvQualOf<T>;\r\n                return *this;\r\n            }\r\n\r\n            mutable Qualification qual_ = Qualification::None;\r\n        };\r\n\r\n        constexpr bool test_value_or() {\r\n            assert(std::optional<QualDistinction>{}.value_or({}).qual_ == Qualification::None);\r\n            assert(std::optional<const QualDistinction>{}.value_or({}).qual_ == Qualification::None);\r\n            {\r\n                std::optional<QualDistinction> opt;\r\n                assert(opt.value_or({}).qual_ == Qualification::None);\r\n            }\r\n            {\r\n                std::optional<const QualDistinction> opt;\r\n                assert(opt.value_or({}).qual_ == Qualification::None);\r\n            }\r\n            return true;\r\n        }\r\n\r\n        CONSTEXPR20 bool test_assignment() {\r\n            assert((std::optional<QualDistinction>{} = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n            assert((std::optional<const QualDistinction>{} = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n            {\r\n                std::optional<QualDistinction> opt{std::in_place};\r\n                assert((opt = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n                opt.reset();\r\n                assert((opt = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n            }\r\n            {\r\n                std::optional<const QualDistinction> opt{std::in_place};\r\n                assert((opt = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n                opt.reset();\r\n                assert((opt = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n            }\r\n            return true;\r\n        }\r\n\r\n        bool test_volatile() {\r\n            assert(std::optional<volatile QualDistinction>{}.value_or({}).qual_ == Qualification::None);\r\n            assert(std::optional<const volatile QualDistinction>{}.value_or({}).qual_ == Qualification::None);\r\n            {\r\n                std::optional<volatile QualDistinction> opt;\r\n                assert(opt.value_or({}).qual_ == Qualification::None);\r\n            }\r\n            {\r\n                std::optional<const volatile QualDistinction> opt;\r\n                assert(opt.value_or({}).qual_ == Qualification::None);\r\n            }\r\n\r\n            assert(\r\n                (std::optional<volatile QualDistinction>{} = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n            assert((std::optional<const volatile QualDistinction>{} = {QualDistinction{}}).value().qual_\r\n                   == Qualification::None);\r\n            {\r\n                std::optional<volatile QualDistinction> opt{std::in_place};\r\n                assert((opt = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n                opt.reset();\r\n                assert((opt = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n            }\r\n            {\r\n                std::optional<const volatile QualDistinction> opt{std::in_place};\r\n                assert((opt = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n                opt.reset();\r\n                assert((opt = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        static_assert(test_value_or());\r\n#if _HAS_CXX20\r\n        static_assert(test_assignment());\r\n#endif // _HAS_CXX20\r\n\r\n        void run_test() {\r\n            test_value_or();\r\n            test_assignment();\r\n            test_volatile();\r\n        }\r\n    } // namespace lwg3886\r\n\r\n    namespace vso406124 {\r\n        // Defend against regression of VSO-406124\r\n        void run_test() {\r\n            (void) std::optional<int>(0).value();\r\n        }\r\n    } // namespace vso406124\r\n\r\n    namespace vso458030 {\r\n        // Defend against regression of VSO-458030\r\n        struct Meow {\r\n            std::optional<std::pair<int, int>> DoStuff();\r\n\r\n            void Weird(std::optional<std::pair<int, int>>& val) {\r\n                [&] { val = DoStuff(); }();\r\n            }\r\n        };\r\n    } // namespace vso458030\r\n\r\n    namespace vso508126 {\r\n        // Defend against regression of VSO-508126\r\n        void run_test() {\r\n            struct S {};\r\n            static_assert(!std::is_copy_constructible_v<volatile S>);\r\n            static_assert(!std::is_copy_constructible_v<std::optional<volatile S>>);\r\n        }\r\n    } // namespace vso508126\r\n\r\n    namespace vso614907 {\r\n        // Defend against regression of VSO-614907\r\n        struct nontrivial_copy {\r\n            nontrivial_copy() = default;\r\n            nontrivial_copy(const nontrivial_copy&) {}\r\n            nontrivial_copy(nontrivial_copy&&)                 = default;\r\n            nontrivial_copy& operator=(const nontrivial_copy&) = default;\r\n            nontrivial_copy& operator=(nontrivial_copy&&)      = default;\r\n        };\r\n\r\n        const std::optional<nontrivial_copy> s;\r\n\r\n        struct Test {\r\n            std::optional<nontrivial_copy> s_{s};\r\n        };\r\n\r\n        void run_test() {\r\n            Test t;\r\n            (void) t;\r\n        }\r\n    } // namespace vso614907\r\n\r\n    namespace gh2458 {\r\n        // GH-2458: optional<const meow> o = std::move(lvalue_optional_const_meow);\r\n        // was moving from the contained const object\r\n        enum class action { none, copy, move };\r\n        action last = action::none;\r\n\r\n        struct Copyable {\r\n            Copyable() = default;\r\n            Copyable(const Copyable&) {\r\n                last = action::copy;\r\n            }\r\n            Copyable(Copyable&&) {\r\n                last = action::move;\r\n            }\r\n        };\r\n\r\n        struct ConstMovable {\r\n            ConstMovable() = default;\r\n            ConstMovable(const ConstMovable&) {\r\n                last = action::copy;\r\n            }\r\n            ConstMovable(const ConstMovable&&) {\r\n                last = action::move;\r\n            }\r\n        };\r\n\r\n        template <class T, action Result>\r\n        void testMove() {\r\n            std::optional<T> orig{std::in_place};\r\n            std::optional<T> moved = std::move(orig);\r\n            assert(last == Result);\r\n        }\r\n\r\n        void run_test() {\r\n            testMove<Copyable, action::move>();\r\n            testMove<const Copyable, action::copy>();\r\n            testMove<ConstMovable, action::move>();\r\n            testMove<const ConstMovable, action::move>();\r\n        }\r\n    } // namespace gh2458\r\n\r\n    namespace assign_cv {\r\n        template <class T>\r\n        struct TypeIdentityImpl {\r\n            using type = T;\r\n        };\r\n        template <class T>\r\n        using TypeIdentity = typename TypeIdentityImpl<T>::type;\r\n\r\n        struct CvAssignable {\r\n            CvAssignable()                               = default;\r\n            CvAssignable(const CvAssignable&)            = default;\r\n            CvAssignable(CvAssignable&&)                 = default;\r\n            CvAssignable& operator=(const CvAssignable&) = default;\r\n            CvAssignable& operator=(CvAssignable&&)      = default;\r\n\r\n            template <class T = CvAssignable>\r\n            CvAssignable(const volatile TypeIdentity<T>&) noexcept {}\r\n            template <class T = CvAssignable>\r\n            CvAssignable(const volatile TypeIdentity<T>&&) noexcept {}\r\n\r\n            template <class T = CvAssignable>\r\n            constexpr CvAssignable& operator=(const volatile TypeIdentity<T>&) noexcept {\r\n                return *this;\r\n            }\r\n            template <class T = CvAssignable>\r\n            constexpr CvAssignable& operator=(const volatile TypeIdentity<T>&&) noexcept {\r\n                return *this;\r\n            }\r\n\r\n            template <class T = CvAssignable>\r\n            constexpr const volatile CvAssignable& operator=(const volatile TypeIdentity<T>&) const volatile noexcept {\r\n                return *this;\r\n            }\r\n            template <class T = CvAssignable>\r\n            constexpr const volatile CvAssignable& operator=(const volatile TypeIdentity<T>&&) const volatile noexcept {\r\n                return *this;\r\n            }\r\n        };\r\n\r\n        void run_test() {\r\n            using std::swap;\r\n            {\r\n                std::optional<const int> oc{};\r\n                oc.emplace(0);\r\n                static_assert(!std::is_copy_assignable_v<decltype(oc)>);\r\n                static_assert(!std::is_move_assignable_v<decltype(oc)>);\r\n                static_assert(!std::is_swappable_v<decltype(oc)>);\r\n\r\n                std::optional<volatile int> ov{};\r\n                std::optional<volatile int> ov2{};\r\n                ov.emplace(0);\r\n                swap(ov, ov);\r\n                ov = ov2;\r\n                ov = std::move(ov2);\r\n\r\n                std::optional<const volatile int> ocv{};\r\n                ocv.emplace(0);\r\n                static_assert(!std::is_copy_assignable_v<decltype(ocv)>);\r\n                static_assert(!std::is_move_assignable_v<decltype(ocv)>);\r\n                static_assert(!std::is_swappable_v<decltype(ocv)>);\r\n            }\r\n            {\r\n                std::optional<const CvAssignable> oc{};\r\n                std::optional<const CvAssignable> oc2{};\r\n                oc.emplace(CvAssignable{});\r\n                swap(oc, oc);\r\n                oc = oc2;\r\n                oc = std::move(oc2);\r\n\r\n                std::optional<volatile CvAssignable> ov{};\r\n                std::optional<volatile CvAssignable> ov2{};\r\n                ov.emplace(CvAssignable{});\r\n                swap(ov, ov);\r\n                ov = ov2;\r\n                ov = std::move(ov2);\r\n\r\n                std::optional<const volatile CvAssignable> ocv{};\r\n                std::optional<const volatile CvAssignable> ocv2{};\r\n                ocv.emplace(CvAssignable{});\r\n                swap(ocv, ocv);\r\n                ocv = ocv2;\r\n                ocv = std::move(ocv2);\r\n            }\r\n        }\r\n    } // namespace assign_cv\r\n} // namespace msvc\r\n\r\nint main() {\r\n    utility::in_place::run_test();\r\n\r\n    bad_optional_access::default_::run_test();\r\n    bad_optional_access::derive::run_test();\r\n\r\n    comp_with_t::three_way::run_test();\r\n    comp_with_t::equal::run_test();\r\n    comp_with_t::greater_than::run_test();\r\n    comp_with_t::greater_equal::run_test();\r\n    comp_with_t::less_equal::run_test();\r\n    comp_with_t::less_than::run_test();\r\n    comp_with_t::not_equal::run_test();\r\n\r\n    hash::enabled_hash::run_test();\r\n    hash::run_test();\r\n\r\n    monadic::and_then::run_test();\r\n    monadic::or_else::run_test();\r\n    monadic::transform::run_test();\r\n\r\n    nullops::three_way::run_test();\r\n    nullops::equal::run_test();\r\n    nullops::greater_than::run_test();\r\n    nullops::greater_equal::run_test();\r\n    nullops::less_equal::run_test();\r\n    nullops::less_than::run_test();\r\n    nullops::not_equal::run_test();\r\n\r\n    nullopt::run_test();\r\n\r\n    assign::value::run_test();\r\n    assign::const_optional_U::run_test();\r\n    assign::copy::run_test();\r\n    assign::emplace::run_test();\r\n    assign::emplace_initializer_list::run_test();\r\n    assign::move::run_test();\r\n    assign::nullopt::run_test();\r\n    assign::optional_U::run_test();\r\n\r\n    ctor::const_optional_U::run_test();\r\n    ctor::const_T::run_test();\r\n    ctor::copy::run_test();\r\n    ctor::deduct::run_test();\r\n    ctor::default_::run_test();\r\n    ctor::clobber::run_test();\r\n    ctor::explicit_const_optional_U::run_test();\r\n    ctor::explicit_optional_U::run_test();\r\n    ctor::initializer_list::run_test();\r\n    ctor::in_place::run_test();\r\n    ctor::move::run_test();\r\n    ctor::nullopt::run_test();\r\n    ctor::optional_U::run_test();\r\n    ctor::rvalue_T::run_test();\r\n    ctor::U::run_test();\r\n\r\n    dtor::run_test();\r\n\r\n    modifiers::reset::run_test();\r\n\r\n    observe::op_bool::run_test();\r\n    observe::deref::run_test();\r\n    observe::deref_const::run_test();\r\n    observe::deref_const_rvalue::run_test();\r\n    observe::deref_rvalue::run_test();\r\n    observe::has_value::run_test();\r\n    observe::op_arrow::run_test();\r\n    observe::op_arrow_const::run_test();\r\n    observe::value::run_test();\r\n    observe::value_const::run_test();\r\n    observe::value_const_rvalue::run_test();\r\n    observe::value_or::run_test();\r\n    observe::value_or_const::run_test();\r\n    observe::value_rvalue::run_test();\r\n\r\n    member_swap::run_test();\r\n\r\n    special_members::run_test();\r\n\r\n    triviality::run_test();\r\n\r\n    types::run_test();\r\n\r\n    relops::three_way::run_test();\r\n    relops::equal::run_test();\r\n    relops::greater_equal::run_test();\r\n    relops::greater_than::run_test();\r\n    relops::less_equal::run_test();\r\n    relops::less_than::run_test();\r\n    relops::not_equal::run_test();\r\n\r\n    nonmembers::make_optional::run_test();\r\n    nonmembers::make_optional_explicit::run_test();\r\n    nonmembers::make_optional_explicit_init_list::run_test();\r\n    nonmembers::swap_::run_test();\r\n\r\n    optional_includes_initializer_list::run_test();\r\n\r\n    msvc::lwg3836::run_test();\r\n    msvc::lwg3886::run_test();\r\n\r\n    msvc::vso406124::run_test();\r\n    msvc::vso508126::run_test();\r\n    msvc::vso614907::run_test();\r\n\r\n    msvc::gh2458::run_test();\r\n\r\n    msvc::assign_cv::run_test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0220R1_optional_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0220R1_optional_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <optional>\r\n#include <utility>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct S {\r\n    int value;\r\n};\r\n\r\nvoid test_nullopt_operator_arrow() {\r\n    optional<S> o;\r\n    (void) o->value;\r\n}\r\n\r\nvoid test_nullopt_operator_arrow_const() {\r\n    const optional<S> o;\r\n    (void) o->value;\r\n}\r\n\r\nvoid test_nullopt_operator_star_lvalue() {\r\n    optional<S> o;\r\n    (void) *o;\r\n}\r\n\r\nvoid test_nullopt_operator_star_const_lvalue() {\r\n    const optional<S> o;\r\n    (void) *o;\r\n}\r\n\r\nvoid test_nullopt_operator_star_rvalue() {\r\n    optional<S> o;\r\n    (void) *move(o);\r\n}\r\n\r\nvoid test_nullopt_operator_star_const_rvalue() {\r\n    const optional<S> o;\r\n    (void) *move(o);\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_nullopt_operator_arrow,\r\n        test_nullopt_operator_arrow_const,\r\n        test_nullopt_operator_star_lvalue,\r\n        test_nullopt_operator_star_const_lvalue,\r\n        test_nullopt_operator_star_rvalue,\r\n        test_nullopt_operator_star_const_rvalue,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0220R1_polymorphic_memory_resources/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0220R1_polymorphic_memory_resources/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#if !defined(__cpp_aligned_new)\r\n#error pmr does not completely work with /Zc:alignedNew-\r\n#endif\r\n\r\n#define _SILENCE_CXX23_ALIGNED_UNION_DEPRECATION_WARNING\r\n\r\n#include <algorithm>\r\n#include <cmath>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <limits>\r\n#include <list>\r\n#include <malloc.h>\r\n#include <map>\r\n#include <memory>\r\n#include <memory_resource>\r\n#include <new>\r\n#include <numeric>\r\n#include <regex>\r\n#include <set>\r\n#include <string>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\nconstexpr auto size_max = std::numeric_limits<std::size_t>::max();\r\n\r\n#pragma warning(disable : 6326) // Potential comparison of a constant with another constant.\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\n\r\nstatic_assert(__STDCPP_DEFAULT_NEW_ALIGNMENT__ == 2 * sizeof(void*));\r\n\r\nnamespace {\r\n    constexpr std::size_t operator\"\"_zu(unsigned long long value) noexcept {\r\n        return static_cast<std::size_t>(value);\r\n    }\r\n\r\n    struct allocation {\r\n        void* ptr;\r\n        std::size_t size;\r\n        std::size_t align;\r\n\r\n        friend constexpr bool operator==(allocation const& x, allocation const& y) noexcept {\r\n            return x.ptr == y.ptr && x.size == y.size && x.align == y.align;\r\n        }\r\n        [[maybe_unused]] friend constexpr bool operator!=(allocation const& x, allocation const& y) noexcept {\r\n            return !(x == y);\r\n        }\r\n    };\r\n\r\n    bool out_of_memory = false;\r\n} // unnamed namespace\r\n\r\nvoid* operator new(std::size_t size) {\r\n    if (!out_of_memory) {\r\n        if (auto ptr = std::malloc(size)) {\r\n            return ptr;\r\n        }\r\n    }\r\n    throw std::bad_alloc{};\r\n}\r\n\r\nvoid* operator new(std::size_t size, std::align_val_t align) {\r\n    if (!out_of_memory) {\r\n        if (auto ptr = ::_aligned_malloc(size, static_cast<std::size_t>(align))) {\r\n            return ptr;\r\n        }\r\n    }\r\n    throw std::bad_alloc{};\r\n}\r\n\r\nvoid operator delete(void* ptr, std::size_t) noexcept {\r\n    std::free(ptr);\r\n}\r\n\r\nvoid operator delete(void* ptr) noexcept {\r\n    ::operator delete(ptr, 0_zu);\r\n}\r\n\r\nvoid operator delete(void* ptr, std::size_t, std::align_val_t) noexcept {\r\n    ::_aligned_free(ptr);\r\n}\r\n\r\nnamespace {\r\n    [[noreturn]] void fail(const char* const message) {\r\n        std::fputs(message, stderr);\r\n        std::abort();\r\n    }\r\n\r\n#define STRINGIFY2(X) #X\r\n#define STRINGIFY(X)  STRINGIFY2(X)\r\n#define CHECK(...) \\\r\n    ((__VA_ARGS__) ? void(0) : fail(__FILE__ \"(\" STRINGIFY(__LINE__) \"): check failed: \" #__VA_ARGS__ \"\\n\"))\r\n\r\n    static constexpr std::size_t allocation_sizes[] = {\r\n        1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 15, 16, 42, 64, 137, 256, 384, 512, 4096, 65536, 65537, 1000000};\r\n\r\n    struct not_constructible {\r\n        ~not_constructible() = delete;\r\n        not_constructible()  = delete;\r\n    };\r\n\r\n    struct default_resource_guard {\r\n        ~default_resource_guard() {\r\n            if (ptr_) {\r\n                std::pmr::set_default_resource(ptr_);\r\n            }\r\n        }\r\n\r\n        default_resource_guard(std::pmr::memory_resource* new_default)\r\n            : ptr_{std::pmr::set_default_resource(new_default)} {}\r\n        default_resource_guard(default_resource_guard&& that) noexcept : ptr_{std::exchange(that.ptr_, nullptr)} {}\r\n\r\n        std::pmr::memory_resource* resource() const noexcept {\r\n            return ptr_;\r\n        }\r\n\r\n    private:\r\n        std::pmr::memory_resource* ptr_;\r\n    };\r\n\r\n    struct placement_delete {\r\n        template <class T>\r\n        void operator()(T* ptr) const {\r\n            ptr->~T();\r\n        }\r\n    };\r\n    template <class T>\r\n    using placement_ptr = std::unique_ptr<T, placement_delete>;\r\n\r\n    template <class T>\r\n    constexpr bool is_lvalue_reference_to_const = false;\r\n    template <class T>\r\n    constexpr bool is_lvalue_reference_to_const<const T&> = true;\r\n\r\n    template <class Alloc, bool NeedsAllocatorArgT>\r\n    struct uses_allocator_thing : private Alloc {\r\n        using allocator_type = Alloc;\r\n\r\n        int i_ = 0;\r\n\r\n        // Such overload set is used for testing LWG-3187 and LWG-4312.\r\n        uses_allocator_thing(std::allocator_arg_t&&, Alloc const& a, int i = 0) : Alloc(a), i_{i} {}\r\n        template <class T,\r\n            std::enable_if_t<is_lvalue_reference_to_const<T> && std::is_convertible_v<T, Alloc>, int> = 0>\r\n        uses_allocator_thing(std::allocator_arg_t&&, T&& a, int i = 0) : Alloc(std::forward<T>(a)), i_{i} {}\r\n        template <class T,\r\n            std::enable_if_t<!is_lvalue_reference_to_const<T> || !std::is_convertible_v<T, Alloc>, int> = 0>\r\n        uses_allocator_thing(std::allocator_arg_t&&, T&&, int = 0)               = delete;\r\n        uses_allocator_thing(std::allocator_arg_t&, Alloc const&, int = 0)       = delete;\r\n        uses_allocator_thing(const std::allocator_arg_t&, Alloc const&, int = 0) = delete;\r\n\r\n        Alloc get_allocator() const {\r\n            return *this;\r\n        }\r\n\r\n        bool operator==(int i) const {\r\n            return i == i_;\r\n        }\r\n        bool operator!=(int i) const {\r\n            return i != i_;\r\n        }\r\n    };\r\n    template <class Alloc>\r\n    struct uses_allocator_thing<Alloc, false> : uses_allocator_thing<Alloc, true> {\r\n        uses_allocator_thing(int i, Alloc const& a) : uses_allocator_thing<Alloc, true>{std::allocator_arg_t{}, a, i} {}\r\n        uses_allocator_thing(Alloc const& a) : uses_allocator_thing<Alloc, true>{std::allocator_arg_t{}, a} {}\r\n    };\r\n\r\n    struct malloc_resource final : std::pmr::memory_resource {\r\n    private:\r\n        void* do_allocate(std::size_t bytes, std::size_t align) override {\r\n            if (!bytes) {\r\n                return nullptr;\r\n            }\r\n            void* result = nullptr;\r\n            if (align > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n                result = _aligned_malloc(bytes, align);\r\n            } else {\r\n                result = std::malloc(bytes);\r\n            }\r\n\r\n            if (result) {\r\n                return result;\r\n            }\r\n            throw std::bad_alloc{};\r\n        }\r\n\r\n        void do_deallocate(void* ptr, std::size_t, std::size_t align) noexcept override {\r\n            if (align > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n                _aligned_free(ptr);\r\n            } else {\r\n                std::free(ptr);\r\n            }\r\n        }\r\n\r\n        bool do_is_equal(const memory_resource& that) const noexcept override {\r\n            return typeid(malloc_resource) == typeid(that);\r\n        }\r\n    };\r\n\r\n    struct checked_resource final : std::pmr::memory_resource {\r\n        std::size_t bytes_{};\r\n        std::size_t align_{};\r\n        void* ptr_{};\r\n\r\n    private:\r\n        void* do_allocate(std::size_t bytes, std::size_t align) override {\r\n            if (bytes_ != 0) {\r\n                CHECK(bytes == bytes_);\r\n            } else {\r\n                bytes_ = bytes;\r\n            }\r\n\r\n            if (align_ != 0) {\r\n                CHECK(align == align_);\r\n            } else {\r\n                align_ = align;\r\n            }\r\n\r\n            if (align <= __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n                return ptr_ = ::operator new(bytes);\r\n            } else {\r\n                return ptr_ = ::operator new(bytes, std::align_val_t{align});\r\n            }\r\n        }\r\n\r\n        void do_deallocate(void* ptr, std::size_t bytes, std::size_t align) noexcept override {\r\n            if (ptr_) {\r\n                CHECK(ptr == ptr_);\r\n                if (bytes_ != 0) {\r\n                    CHECK(bytes == bytes_);\r\n                } else {\r\n                    bytes_ = bytes;\r\n                }\r\n\r\n                if (align_ != 0) {\r\n                    CHECK(align == align_);\r\n                } else {\r\n                    align_ = align;\r\n                }\r\n            } else {\r\n                if (bytes_ != 0) {\r\n                    CHECK(bytes == bytes_);\r\n                }\r\n\r\n                if (align_ != 0) {\r\n                    CHECK(align == align_);\r\n                }\r\n            }\r\n\r\n            if (align <= __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n                ::operator delete(ptr, bytes);\r\n            } else {\r\n                ::operator delete(ptr, bytes, std::align_val_t{align});\r\n            }\r\n        }\r\n\r\n        bool do_is_equal(const memory_resource& that) const noexcept override {\r\n            CHECK(ptr_ == &that);\r\n            return typeid(checked_resource) == typeid(that);\r\n        }\r\n    };\r\n\r\n    struct recording_resource : std::pmr::memory_resource {\r\n        std::vector<allocation> allocations_;\r\n        memory_resource* upstream_ = std::pmr::get_default_resource();\r\n\r\n        recording_resource() = default;\r\n        recording_resource(memory_resource* upstream) noexcept : upstream_{upstream} {}\r\n\r\n        ~recording_resource() {\r\n            CHECK(allocations_.empty());\r\n        }\r\n\r\n        recording_resource(recording_resource const&)            = delete;\r\n        recording_resource& operator=(recording_resource const&) = delete;\r\n\r\n        void release() noexcept {\r\n            while (!allocations_.empty()) {\r\n                auto& last = allocations_.back();\r\n                upstream_->deallocate(last.ptr, last.size, last.align);\r\n                allocations_.pop_back();\r\n            }\r\n        }\r\n\r\n        void* do_allocate(std::size_t const bytes, std::size_t const align) override {\r\n            void* const result = upstream_->allocate(bytes, align);\r\n            allocations_.push_back({result, bytes, align});\r\n            return result;\r\n        }\r\n\r\n        void do_deallocate(void* const ptr, std::size_t const bytes, std::size_t const align) noexcept override {\r\n            allocation const alloc{ptr, bytes, align};\r\n            auto const end = allocations_.end();\r\n            auto pos       = std::find(allocations_.begin(), end, alloc);\r\n            CHECK(pos != end);\r\n            allocations_.erase(pos);\r\n            upstream_->deallocate(ptr, bytes, align);\r\n        }\r\n\r\n        bool do_is_equal(const memory_resource& that) const noexcept override {\r\n            return this == &that;\r\n        }\r\n    };\r\n\r\n    void analyze_geometric_growth(size_t const* first, size_t const n) {\r\n        // https://mathworld.wolfram.com/LeastSquaresFittingExponential.html\r\n        // https://en.wikipedia.org/wiki/Pearson_correlation_coefficient#For_a_sample\r\n        double sum_of_x           = 0;\r\n        double sum_of_y           = 0;\r\n        double sum_of_xx          = 0;\r\n        double sum_of_xy          = 0;\r\n        double sum_of_xxy         = 0;\r\n        double sum_of_x_log_y     = 0;\r\n        double sum_of_log_y       = 0;\r\n        double sum_of_y_log_y     = 0;\r\n        double sum_of_log_y_log_y = 0;\r\n        double sum_of_xy_log_y    = 0;\r\n        for (auto i = 0_zu; i < n; ++i) {\r\n            auto const y = static_cast<double>(first[i]);\r\n            sum_of_y += y;\r\n            auto const x = static_cast<double>(i);\r\n            sum_of_x += x;\r\n            sum_of_xx += x * x;\r\n            double const xy = x * y;\r\n            sum_of_xy += xy;\r\n            sum_of_xxy += x * xy;\r\n            double const log_y = std::log(y);\r\n            sum_of_log_y += log_y;\r\n            sum_of_log_y_log_y += log_y * log_y;\r\n            sum_of_x_log_y += x * log_y;\r\n            double const y_log_y = y * log_y;\r\n            sum_of_y_log_y += y_log_y;\r\n            sum_of_xy_log_y += x * y_log_y;\r\n        }\r\n        double const b =\r\n            (sum_of_y * sum_of_xy_log_y - sum_of_xy * sum_of_y_log_y) / (sum_of_y * sum_of_xxy - sum_of_xy * sum_of_xy);\r\n        double const r =\r\n            (n * sum_of_x_log_y - sum_of_x * sum_of_log_y)\r\n            / std::sqrt((n * sum_of_xx - sum_of_x * sum_of_x) * (n * sum_of_log_y_log_y - sum_of_log_y * sum_of_log_y));\r\n        double const factor = std::exp(b);\r\n        CHECK(factor > 1.0);\r\n        CHECK(r > 0.99);\r\n    }\r\n\r\n    namespace memory_resource {\r\n        namespace global {\r\n            namespace new_delete_resource {\r\n                void test_eq() {\r\n                    auto& ndr = *std::pmr::new_delete_resource();\r\n                    CHECK(&ndr == std::pmr::new_delete_resource());\r\n                    CHECK(ndr.is_equal(ndr));\r\n                    CHECK(ndr == ndr);\r\n                }\r\n\r\n                void test_allocate() {\r\n                    auto& ndr = *std::pmr::new_delete_resource();\r\n\r\n                    for (std::size_t size : allocation_sizes) {\r\n                        for (auto align = 1_zu; align <= 512_zu && size % align == 0_zu; align *= 2_zu) {\r\n                            auto ptr = ndr.allocate(size, align);\r\n                            CHECK(ptr != nullptr);\r\n                            void* vp = ptr;\r\n                            size_t n = size;\r\n                            CHECK(std::align(align, size, vp, n) == ptr);\r\n                            CHECK(vp == ptr);\r\n                            CHECK(n == size);\r\n                            if (align <= __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n                                ::operator delete(ptr, size);\r\n                            } else {\r\n                                ::operator delete(ptr, size, std::align_val_t{align});\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n\r\n                void test_deallocate() {\r\n                    auto& ndr = *std::pmr::new_delete_resource();\r\n\r\n                    for (std::size_t size : allocation_sizes) {\r\n                        for (auto align = 1_zu; align <= 512_zu && size % align == 0_zu; align *= 2_zu) {\r\n                            auto ptr = (align <= __STDCPP_DEFAULT_NEW_ALIGNMENT__)\r\n                                         ? ::operator new(size)\r\n                                         : ::operator new(size, std::align_val_t{align});\r\n                            ndr.deallocate(ptr, size, align);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                void test() {\r\n                    test_eq();\r\n                    test_allocate();\r\n                    test_deallocate();\r\n                }\r\n            } // namespace new_delete_resource\r\n\r\n            namespace null_memory_resource {\r\n                void test_eq() {\r\n                    auto& nmr = *std::pmr::null_memory_resource();\r\n                    CHECK(&nmr == std::pmr::null_memory_resource());\r\n                    CHECK(nmr.is_equal(nmr));\r\n                }\r\n\r\n                void test_allocate() {\r\n                    auto& nmr = *std::pmr::null_memory_resource();\r\n\r\n                    for (std::size_t size : allocation_sizes) {\r\n                        for (auto align = 1_zu; align <= 512_zu && size % align == 0_zu; align *= 2_zu) {\r\n                            try {\r\n                                (void) nmr.allocate(size, align);\r\n                                CHECK(false);\r\n                            } catch (const std::bad_alloc&) {\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n\r\n                void test_deallocate() {\r\n                    auto& nmr = *std::pmr::null_memory_resource();\r\n\r\n                    for (std::size_t size : allocation_sizes) {\r\n                        for (auto align = 1_zu; align <= 512_zu && size % align == 0_zu; align *= 2_zu) {\r\n                            void* ptr = align <= __STDCPP_DEFAULT_NEW_ALIGNMENT__\r\n                                          ? ::operator new(size)\r\n                                          : ::operator new(size, std::align_val_t{align});\r\n                            nmr.deallocate(ptr, size, align);\r\n                            if (align <= __STDCPP_DEFAULT_NEW_ALIGNMENT__) {\r\n                                ::operator delete(ptr, size);\r\n                            } else {\r\n                                ::operator delete(ptr, size, std::align_val_t{align});\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n\r\n                void test() {\r\n                    test_eq();\r\n                    test_allocate();\r\n                    test_deallocate();\r\n                }\r\n            } // namespace null_memory_resource\r\n\r\n            namespace get_set_default_resource {\r\n                void test() {\r\n                    default_resource_guard guard{nullptr};\r\n                    auto const ndr = std::pmr::new_delete_resource();\r\n                    CHECK(*ndr == *guard.resource());\r\n\r\n                    malloc_resource mr;\r\n                    CHECK(*ndr == *std::pmr::set_default_resource(&mr));\r\n                    std::pmr::vector<int> vec1{3, 2, 1};\r\n                    CHECK(vec1.get_allocator().resource() == &mr);\r\n                }\r\n            } // namespace get_set_default_resource\r\n        } // namespace global\r\n\r\n        template <bool Equal>\r\n        struct compare_resource final : std::pmr::memory_resource {\r\n        private:\r\n            void* do_allocate(std::size_t, std::size_t) override {\r\n                throw std::bad_alloc{};\r\n            }\r\n            void do_deallocate(void*, std::size_t, std::size_t) noexcept override {}\r\n            bool do_is_equal(const memory_resource&) const noexcept override {\r\n                return Equal;\r\n            }\r\n        };\r\n\r\n        namespace is_equal {\r\n            void test() {\r\n                {\r\n                    compare_resource<false> r1, r2;\r\n                    // resources with the same address are equal regardless of what do_is_equal returns.\r\n                    CHECK(r1 == r1);\r\n                    CHECK(!(r1 != r1));\r\n                    CHECK(r1 != r2);\r\n                    CHECK(r2 != r1);\r\n                }\r\n                {\r\n                    compare_resource<true> r1, r2;\r\n                    CHECK(r1 == r1);\r\n                    CHECK(!(r1 != r1));\r\n                    CHECK(r1 == r2);\r\n                    CHECK(r2 == r1);\r\n                    CHECK(!(r1 != r2));\r\n                    CHECK(!(r2 != r1));\r\n                }\r\n                {\r\n                    checked_resource r1, r2;\r\n                    CHECK(r1 == r1);\r\n                    CHECK(!(r1 != r1));\r\n                    r1.ptr_ = &r2;\r\n                    r2.ptr_ = &r1;\r\n                    CHECK(r1 == r2);\r\n                    CHECK(r2 == r1);\r\n                    CHECK(!(r1 != r2));\r\n                    CHECK(!(r2 != r1));\r\n                }\r\n            }\r\n        } // namespace is_equal\r\n\r\n        namespace allocate_deallocate {\r\n            void test_max_align() {\r\n                // verify that allocate and deallocate default their alignment parameters to alignof(max_align_t)\r\n\r\n                struct max_align_checker final : std::pmr::memory_resource {\r\n                private:\r\n                    void* do_allocate(std::size_t bytes, std::size_t align) override {\r\n                        CHECK(align == alignof(std::max_align_t));\r\n                        return std::malloc(bytes);\r\n                    }\r\n                    void do_deallocate(void* ptr, std::size_t, std::size_t align) override {\r\n                        CHECK(align == alignof(std::max_align_t));\r\n                        std::free(ptr);\r\n                    }\r\n                    bool do_is_equal(const memory_resource& that) const noexcept override {\r\n                        return typeid(max_align_checker) == typeid(that);\r\n                    }\r\n                };\r\n\r\n                max_align_checker checker;\r\n                constexpr auto N = 42_zu;\r\n                checker.deallocate(checker.allocate(N), N);\r\n            }\r\n\r\n            void test() {\r\n                test_max_align();\r\n\r\n                checked_resource r;\r\n                for (std::size_t size : allocation_sizes) {\r\n                    for (auto align = 1_zu; align <= 512_zu && size % align == 0_zu; align *= 2_zu) {\r\n                        r.bytes_ = size;\r\n                        r.align_ = align;\r\n                        auto ptr = r.allocate(size, align);\r\n                        CHECK(ptr != nullptr);\r\n                        CHECK(ptr == r.ptr_);\r\n                        r.deallocate(ptr, size, align);\r\n                    }\r\n                }\r\n            }\r\n        } // namespace allocate_deallocate\r\n    } // namespace memory_resource\r\n\r\n    namespace polymorphic_allocator {\r\n        namespace value_type {\r\n            void test() {\r\n                static_assert(std::is_same_v<int, std::pmr::polymorphic_allocator<int>::value_type>);\r\n                static_assert(std::is_same_v<double, std::pmr::polymorphic_allocator<double>::value_type>);\r\n            }\r\n        } // namespace value_type\r\n\r\n        namespace ctor {\r\n            namespace default_ {\r\n                template <class T>\r\n                void test_one_type(malloc_resource& mr) {\r\n                    std::pmr::polymorphic_allocator<T> alloc{};\r\n                    CHECK(*alloc.resource() == mr);\r\n                }\r\n\r\n                void test() {\r\n                    malloc_resource mr;\r\n                    default_resource_guard guard{&mr};\r\n                    test_one_type<char>(mr);\r\n                    test_one_type<int>(mr);\r\n                    test_one_type<std::vector<std::vector<int>>>(mr);\r\n                }\r\n            } // namespace default_\r\n\r\n            namespace value {\r\n                template <class T>\r\n                void test_one_type() {\r\n                    malloc_resource mr;\r\n                    std::pmr::polymorphic_allocator<T> alloc = &mr;\r\n                    CHECK(alloc.resource() == &mr);\r\n                }\r\n\r\n                void test() {\r\n                    test_one_type<char>();\r\n                    test_one_type<int>();\r\n                    test_one_type<std::vector<std::vector<int>>>();\r\n                }\r\n            } // namespace value\r\n\r\n            namespace rebind {\r\n                template <class T, class U>\r\n                void test_one() {\r\n                    checked_resource resource;\r\n                    std::pmr::polymorphic_allocator<T> allocT1 = &resource;\r\n                    std::pmr::polymorphic_allocator<U> allocU  = allocT1;\r\n                    CHECK(allocU.resource() == &resource);\r\n                    std::pmr::polymorphic_allocator<T> allocT2 = allocU;\r\n                    CHECK(allocT2.resource() == &resource);\r\n                }\r\n\r\n                void test() {\r\n                    test_one<char, int>();\r\n                    test_one<int, double>();\r\n                    test_one<std::vector<std::vector<int>>, int>();\r\n                }\r\n            } // namespace rebind\r\n        } // namespace ctor\r\n\r\n        namespace mem {\r\n            namespace allocate_deallocate {\r\n                template <class T>\r\n                void test_one() {\r\n                    checked_resource checked;\r\n                    std::pmr::polymorphic_allocator<T> alloc = &checked;\r\n\r\n                    for (std::size_t n : {0U, 1U, 2U, 3U, 16U, 738219U}) {\r\n                        checked.align_ = alignof(T);\r\n                        checked.bytes_ = n * sizeof(T);\r\n                        T* ptr         = alloc.allocate(n);\r\n                        checked.ptr_   = ptr;\r\n                        alloc.deallocate(ptr, n);\r\n                        checked.ptr_ = nullptr;\r\n                    }\r\n                }\r\n\r\n                template <class T>\r\n                void test_throws() {\r\n                    static_assert(sizeof(T) > 1);\r\n\r\n                    checked_resource checked;\r\n                    std::pmr::polymorphic_allocator<T> alloc = &checked;\r\n\r\n                    try {\r\n                        (void) alloc.allocate(size_max / sizeof(T) + 1);\r\n                        CHECK(false);\r\n                    } catch (const std::bad_alloc&) {\r\n                    }\r\n                }\r\n\r\n                void test() {\r\n                    struct alignas(32) overaligned {\r\n                        char space_[32];\r\n                    };\r\n\r\n                    test_one<char>();\r\n                    test_one<int>();\r\n                    test_one<std::vector<std::vector<int>>>();\r\n                    test_one<overaligned>();\r\n\r\n                    test_throws<int>();\r\n                    test_throws<std::vector<std::vector<int>>>();\r\n                    test_throws<overaligned>();\r\n                }\r\n            } // namespace allocate_deallocate\r\n\r\n            namespace construct {\r\n                template <class T>\r\n                void test_if_poly(std::true_type, T& t) {\r\n                    CHECK(t.get_allocator().resource() == std::pmr::get_default_resource());\r\n                }\r\n\r\n                template <class T>\r\n                void test_if_poly(std::false_type, T&) {}\r\n\r\n                template <class T, class... Args>\r\n                void test_one(Args... args) {\r\n                    std::pmr::polymorphic_allocator<not_constructible> alloc;\r\n                    std::aligned_union_t<0, T> space;\r\n\r\n                    auto const rawptr = reinterpret_cast<T*>(&space);\r\n                    alloc.construct(rawptr, args...);\r\n                    placement_ptr<T> ptr{rawptr};\r\n                    CHECK(*ptr == T(args...));\r\n                    test_if_poly(std::uses_allocator<T, std::pmr::memory_resource*>(), *ptr);\r\n                }\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4702) // unreachable code\r\n                void test_throws() {\r\n                    struct X {\r\n                        X() = default;\r\n                        X(X&&) {\r\n                            throw 42;\r\n                        }\r\n                    };\r\n\r\n                    checked_resource checked;\r\n                    std::pmr::polymorphic_allocator<not_constructible> alloc = &checked;\r\n                    std::aligned_union_t<0, X> space;\r\n\r\n                    auto const ptr = reinterpret_cast<X*>(&space);\r\n                    try {\r\n                        alloc.construct(ptr, std::move(*ptr));\r\n                        CHECK(false);\r\n                    } catch (int) {\r\n                    }\r\n                }\r\n#pragma warning(pop)\r\n\r\n                void test() {\r\n                    test_one<char>('a');\r\n                    test_one<int>(42);\r\n                    test_one<std::vector<std::vector<int>>>(\r\n                        std::initializer_list<std::vector<int>>{{1, 2, 3}, {9, 8, 7, 6}});\r\n                    test_one<std::pmr::vector<int>>(32478_zu, 42);\r\n\r\n                    test_throws();\r\n                }\r\n            } // namespace construct\r\n\r\n\r\n            // Also test LWG-4312 \"Const and value category mismatch for allocator_arg_t/allocator_arg in the\r\n            // description of uses-allocator construction\"\r\n            namespace uses_allocator_construct {\r\n                void test() {\r\n                    malloc_resource mr;\r\n                    std::pmr::polymorphic_allocator<not_constructible> alloc = &mr;\r\n\r\n                    using T = uses_allocator_thing<std::pmr::polymorphic_allocator<int>, true>;\r\n\r\n                    alignas(T) unsigned char space[sizeof(T)];\r\n                    const auto rawptr = reinterpret_cast<T*>(space);\r\n                    alloc.construct(rawptr);\r\n                    placement_ptr<T> ptr{rawptr};\r\n\r\n                    CHECK(ptr->get_allocator().resource() == &mr);\r\n                }\r\n            } // namespace uses_allocator_construct\r\n\r\n            namespace piecewise_construct {\r\n                void test() {\r\n                    malloc_resource mr;\r\n                    std::pmr::polymorphic_allocator<not_constructible> alloc = &mr;\r\n\r\n                    {\r\n                        using P = std::pair<int, int>;\r\n                        std::aligned_union_t<0, P> space;\r\n                        auto const rawptr = reinterpret_cast<P*>(&space);\r\n\r\n                        alloc.construct(rawptr, std::piecewise_construct, std::make_tuple(), std::make_tuple(1729));\r\n                        placement_ptr<P> ptr{rawptr};\r\n\r\n                        CHECK(ptr->first == 0);\r\n                        CHECK(ptr->second == 1729);\r\n                    }\r\n                    {\r\n                        using P = std::pair<uses_allocator_thing<std::pmr::polymorphic_allocator<int>, true>, int>;\r\n                        std::aligned_union_t<0, P> space;\r\n                        auto const rawptr = reinterpret_cast<P*>(&space);\r\n\r\n                        alloc.construct(rawptr, std::piecewise_construct, std::make_tuple(), std::make_tuple(1729));\r\n                        placement_ptr<P> ptr{rawptr};\r\n\r\n                        CHECK(ptr->first.get_allocator().resource() == &mr);\r\n                        CHECK(ptr->second == 1729);\r\n                    }\r\n                    {\r\n                        using P = std::pair<uses_allocator_thing<std::pmr::polymorphic_allocator<int>, false>, int>;\r\n                        std::aligned_union_t<0, P> space;\r\n                        auto const rawptr = reinterpret_cast<P*>(&space);\r\n\r\n                        alloc.construct(rawptr, std::piecewise_construct, std::make_tuple(), std::make_tuple(1729));\r\n                        placement_ptr<P> ptr{rawptr};\r\n\r\n                        CHECK(ptr->first.get_allocator().resource() == &mr);\r\n                        CHECK(ptr->second == 1729);\r\n                    }\r\n\r\n                    {\r\n                        using P = std::pair<int, uses_allocator_thing<std::pmr::polymorphic_allocator<int>, true>>;\r\n                        std::aligned_union_t<0, P> space;\r\n                        auto const rawptr = reinterpret_cast<P*>(&space);\r\n\r\n                        alloc.construct(rawptr, std::piecewise_construct, std::make_tuple(1729), std::make_tuple());\r\n                        placement_ptr<P> ptr{rawptr};\r\n\r\n                        CHECK(ptr->first == 1729);\r\n                        CHECK(ptr->second.get_allocator().resource() == &mr);\r\n                    }\r\n                    {\r\n                        using P = std::pair<int, uses_allocator_thing<std::pmr::polymorphic_allocator<int>, false>>;\r\n                        std::aligned_union_t<0, P> space;\r\n                        auto const rawptr = reinterpret_cast<P*>(&space);\r\n\r\n                        alloc.construct(rawptr, std::piecewise_construct, std::make_tuple(1729), std::make_tuple());\r\n                        placement_ptr<P> ptr{rawptr};\r\n\r\n                        CHECK(ptr->first == 1729);\r\n                        CHECK(ptr->second.get_allocator().resource() == &mr);\r\n                    }\r\n\r\n                    {\r\n                        using P = std::pair<uses_allocator_thing<std::pmr::polymorphic_allocator<int>, true>,\r\n                            uses_allocator_thing<std::pmr::polymorphic_allocator<int>, true>>;\r\n                        std::aligned_union_t<0, P> space;\r\n                        auto const rawptr = reinterpret_cast<P*>(&space);\r\n\r\n                        alloc.construct(rawptr, std::piecewise_construct, std::make_tuple(), std::make_tuple());\r\n                        placement_ptr<P> ptr{rawptr};\r\n\r\n                        CHECK(ptr->first.get_allocator().resource() == &mr);\r\n                        CHECK(ptr->second.get_allocator().resource() == &mr);\r\n                    }\r\n                    {\r\n                        using P = std::pair<uses_allocator_thing<std::pmr::polymorphic_allocator<int>, false>,\r\n                            uses_allocator_thing<std::pmr::polymorphic_allocator<int>, false>>;\r\n                        std::aligned_union_t<0, P> space;\r\n                        auto const rawptr = reinterpret_cast<P*>(&space);\r\n\r\n                        alloc.construct(rawptr, std::piecewise_construct, std::make_tuple(), std::make_tuple());\r\n                        placement_ptr<P> ptr{rawptr};\r\n\r\n                        CHECK(ptr->first.get_allocator().resource() == &mr);\r\n                        CHECK(ptr->second.get_allocator().resource() == &mr);\r\n                    }\r\n                }\r\n            } // namespace piecewise_construct\r\n\r\n            namespace construct_pair {\r\n                void test() {\r\n                    malloc_resource mr;\r\n                    std::pmr::polymorphic_allocator<not_constructible> alloc = &mr;\r\n                    {\r\n                        using P = std::pair<int, int>;\r\n                        std::aligned_union_t<0, P> space;\r\n                        auto const rawptr = reinterpret_cast<P*>(&space);\r\n\r\n                        alloc.construct(rawptr);\r\n                        placement_ptr<P> ptr{rawptr};\r\n\r\n                        CHECK(ptr->first == 0);\r\n                        CHECK(ptr->second == 0);\r\n                    }\r\n                    {\r\n                        using P = std::pair<uses_allocator_thing<std::pmr::polymorphic_allocator<int>, true>,\r\n                            uses_allocator_thing<std::pmr::polymorphic_allocator<int>, false>>;\r\n                        std::aligned_union_t<0, P> space;\r\n                        auto const rawptr = reinterpret_cast<P*>(&space);\r\n\r\n                        alloc.construct(rawptr);\r\n                        placement_ptr<P> ptr{rawptr};\r\n\r\n                        CHECK(ptr->first.get_allocator().resource() == &mr);\r\n                        CHECK(ptr->second.get_allocator().resource() == &mr);\r\n                    }\r\n                }\r\n            } // namespace construct_pair\r\n\r\n            namespace construct_pair_U_V {\r\n                void test() {\r\n                    malloc_resource mr;\r\n                    std::pmr::polymorphic_allocator<not_constructible> alloc = &mr;\r\n\r\n                    {\r\n                        using P = std::pair<int, int>;\r\n                        std::aligned_union_t<0, P> space;\r\n                        auto const rawptr = reinterpret_cast<P*>(&space);\r\n\r\n                        int i = 13;\r\n                        alloc.construct(rawptr, 42, i);\r\n                        placement_ptr<P> ptr{rawptr};\r\n\r\n                        CHECK(ptr->first == 42);\r\n                        CHECK(ptr->second == 13);\r\n                    }\r\n                    {\r\n                        using P = std::pair<uses_allocator_thing<std::pmr::polymorphic_allocator<int>, true>,\r\n                            uses_allocator_thing<std::pmr::polymorphic_allocator<int>, false>>;\r\n                        std::aligned_union_t<0, P> space;\r\n                        auto const rawptr = reinterpret_cast<P*>(&space);\r\n\r\n                        int i = 13;\r\n                        alloc.construct(rawptr, 42, i);\r\n                        placement_ptr<P> ptr{rawptr};\r\n\r\n                        CHECK(ptr->first == 42);\r\n                        CHECK(ptr->first.get_allocator().resource() == &mr);\r\n                        CHECK(ptr->second == 13);\r\n                        CHECK(ptr->second.get_allocator().resource() == &mr);\r\n                    }\r\n                }\r\n            } // namespace construct_pair_U_V\r\n\r\n            namespace construct_pair_lvalue_pair {\r\n                void test() {\r\n                    malloc_resource mr;\r\n                    std::pmr::polymorphic_allocator<not_constructible> alloc = &mr;\r\n\r\n                    {\r\n                        using P = std::pair<int, int>;\r\n                        std::aligned_union_t<0, P> space;\r\n                        auto const rawptr = reinterpret_cast<P*>(&space);\r\n\r\n                        std::pair<int, int> arg{42, 13};\r\n                        alloc.construct(rawptr, arg);\r\n                        placement_ptr<P> ptr{rawptr};\r\n\r\n                        CHECK(ptr->first == 42);\r\n                        CHECK(ptr->second == 13);\r\n                    }\r\n                    {\r\n                        using P = std::pair<uses_allocator_thing<std::pmr::polymorphic_allocator<int>, true>,\r\n                            uses_allocator_thing<std::pmr::polymorphic_allocator<int>, false>>;\r\n                        std::aligned_union_t<0, P> space;\r\n                        auto const rawptr = reinterpret_cast<P*>(&space);\r\n\r\n                        std::pair<int, int> arg{42, 13};\r\n                        alloc.construct(rawptr, arg);\r\n                        placement_ptr<P> ptr{rawptr};\r\n\r\n                        CHECK(ptr->first == 42);\r\n                        CHECK(ptr->first.get_allocator().resource() == &mr);\r\n                        CHECK(ptr->second == 13);\r\n                        CHECK(ptr->second.get_allocator().resource() == &mr);\r\n                    }\r\n                }\r\n            } // namespace construct_pair_lvalue_pair\r\n\r\n            namespace construct_pair_rvalue_pair {\r\n                void test() {\r\n                    malloc_resource mr;\r\n                    std::pmr::polymorphic_allocator<not_constructible> alloc = &mr;\r\n\r\n                    {\r\n                        using P = std::pair<int, int>;\r\n                        std::aligned_union_t<0, P> space;\r\n                        auto const rawptr = reinterpret_cast<P*>(&space);\r\n\r\n                        alloc.construct(rawptr, std::make_pair(42, 13));\r\n                        placement_ptr<P> ptr{rawptr};\r\n\r\n                        CHECK(ptr->first == 42);\r\n                        CHECK(ptr->second == 13);\r\n                    }\r\n                    {\r\n                        using P = std::pair<uses_allocator_thing<std::pmr::polymorphic_allocator<int>, true>,\r\n                            uses_allocator_thing<std::pmr::polymorphic_allocator<int>, false>>;\r\n                        std::aligned_union_t<0, P> space;\r\n                        auto const rawptr = reinterpret_cast<P*>(&space);\r\n\r\n                        alloc.construct(rawptr, std::make_pair(42, 13));\r\n                        placement_ptr<P> ptr{rawptr};\r\n\r\n                        CHECK(ptr->first == 42);\r\n                        CHECK(ptr->first.get_allocator().resource() == &mr);\r\n                        CHECK(ptr->second == 13);\r\n                        CHECK(ptr->second.get_allocator().resource() == &mr);\r\n                    }\r\n                }\r\n            } // namespace construct_pair_rvalue_pair\r\n\r\n            namespace select_on_container_copy_construction {\r\n                void test() {\r\n                    malloc_resource mr;\r\n                    std::pmr::polymorphic_allocator<int> a = &mr;\r\n                    std::pmr::polymorphic_allocator<int> b = a.select_on_container_copy_construction();\r\n                    CHECK(b.resource() == std::pmr::get_default_resource());\r\n                    checked_resource checked;\r\n                    default_resource_guard guard{&checked};\r\n                    std::pmr::polymorphic_allocator<int> c = b.select_on_container_copy_construction();\r\n                    CHECK(c.resource() == &checked);\r\n                }\r\n            } // namespace select_on_container_copy_construction\r\n\r\n            namespace resource {\r\n                void test() {\r\n                    std::pmr::polymorphic_allocator<int> a{};\r\n                    CHECK(a.resource() == std::pmr::get_default_resource());\r\n                    std::pmr::polymorphic_allocator<int> b = a;\r\n                    CHECK(b.resource() == a.resource());\r\n                    malloc_resource mr;\r\n                    std::pmr::polymorphic_allocator<int> c = &mr;\r\n                    CHECK(c.resource() == &mr);\r\n                }\r\n            } // namespace resource\r\n        } // namespace mem\r\n\r\n        namespace eq {\r\n            void test() {\r\n                std::pmr::polymorphic_allocator<int> a{};\r\n                CHECK(a == a);\r\n                CHECK(!(a != a));\r\n                std::pmr::polymorphic_allocator<int> b = a;\r\n                CHECK(b == a);\r\n                CHECK(!(b != a));\r\n                malloc_resource mr;\r\n                std::pmr::polymorphic_allocator<int> c = &mr;\r\n                CHECK(!(a == c));\r\n                CHECK(a != c);\r\n            }\r\n        } // namespace eq\r\n\r\n        namespace eq_cvt {\r\n            void test() {\r\n                const auto pres                        = std::pmr::get_default_resource();\r\n                std::pmr::polymorphic_allocator<int> a = pres;\r\n                const auto ra                          = std::ref(a);\r\n                const auto cra                         = std::cref(a);\r\n\r\n                CHECK(a == pres);\r\n                CHECK(a == ra);\r\n                CHECK(a == cra);\r\n                CHECK(pres == a);\r\n                CHECK(pres == ra);\r\n                CHECK(pres == cra);\r\n                CHECK(ra == a);\r\n                CHECK(ra == pres);\r\n                CHECK(ra == ra);\r\n                CHECK(ra == cra);\r\n                CHECK(cra == a);\r\n                CHECK(cra == pres);\r\n                CHECK(cra == ra);\r\n                CHECK(cra == cra);\r\n\r\n                CHECK(!(a != pres));\r\n                CHECK(!(a != ra));\r\n                CHECK(!(a != cra));\r\n                CHECK(!(pres != a));\r\n                CHECK(!(pres != ra));\r\n                CHECK(!(pres != cra));\r\n                CHECK(!(ra != a));\r\n                CHECK(!(ra != pres));\r\n                CHECK(!(ra != ra));\r\n                CHECK(!(ra != cra));\r\n                CHECK(!(cra != a));\r\n                CHECK(!(cra != pres));\r\n                CHECK(!(cra != ra));\r\n                CHECK(!(cra != cra));\r\n            }\r\n        } // namespace eq_cvt\r\n\r\n        namespace destroy {\r\n            void test() {\r\n                bool destroyed = false;\r\n                struct S {\r\n                    bool& destroy_ref;\r\n\r\n                    explicit S(bool& _destroy_ref_) : destroy_ref{_destroy_ref_} {}\r\n                    ~S() {\r\n                        destroy_ref = true;\r\n                    }\r\n                    S(const S&)            = delete;\r\n                    S& operator=(const S&) = delete;\r\n                };\r\n                std::pmr::polymorphic_allocator<S> a{};\r\n                S* ptr = a.allocate(1);\r\n                a.construct(ptr, destroyed);\r\n                CHECK(destroyed == false);\r\n                a.destroy(ptr);\r\n                CHECK(destroyed == true);\r\n                a.deallocate(ptr, 1);\r\n            }\r\n        } // namespace destroy\r\n    } // namespace polymorphic_allocator\r\n\r\n    namespace monotonic {\r\n        namespace ctor {\r\n            namespace buffer_upstream {\r\n                void test() {\r\n                    std::pmr::memory_resource* const nmr = std::pmr::null_memory_resource();\r\n                    for (std::size_t size : {42U, 128U, 512U, 8192U}) {\r\n                        char buffer[8192];\r\n                        std::pmr::monotonic_buffer_resource mbr{buffer, size, nmr};\r\n                        CHECK(mbr.upstream_resource() == nmr);\r\n                        CHECK(mbr.allocate(size, 1) != nullptr);\r\n                    }\r\n                }\r\n            } // namespace buffer_upstream\r\n\r\n            namespace size_upstream {\r\n                void test() {\r\n                    for (std::size_t size : {42U, 128U, 512U, 8192U}) {\r\n                        checked_resource upstream{};\r\n                        std::pmr::monotonic_buffer_resource mbr{size, &upstream};\r\n                        CHECK(mbr.upstream_resource() == &upstream);\r\n                        CHECK(mbr.allocate(1, 1) != nullptr);\r\n                        CHECK(upstream.bytes_ >= size);\r\n                    }\r\n                }\r\n            } // namespace size_upstream\r\n\r\n            namespace upstream {\r\n                void test() {\r\n                    malloc_resource upstream{};\r\n                    std::pmr::monotonic_buffer_resource mbr{&upstream};\r\n                    CHECK(mbr.upstream_resource() == &upstream);\r\n                }\r\n            } // namespace upstream\r\n        } // namespace ctor\r\n\r\n        namespace mem {\r\n            namespace release {\r\n                void test_destruction() {\r\n                    // Verify that all allocated blocks are released upstream on destruction\r\n                    constexpr int N = 11;\r\n                    recording_resource rr;\r\n                    std::pmr::monotonic_buffer_resource mbr{&rr};\r\n                    for (auto i = 0; i < N; ++i) {\r\n                        auto const n = rr.allocations_.size();\r\n                        do {\r\n                            (void) mbr.allocate(sizeof(void*), alignof(void*));\r\n                        } while (n == rr.allocations_.size());\r\n                    }\r\n                }\r\n\r\n                void test_repeated_release() {\r\n                    // Verify that allocations after calling release() allocate from upstream (to guard against\r\n                    // regression of VSO-923042) and that calls to release don't affect the blocksize\r\n                    recording_resource rr;\r\n                    constexpr auto initial_blocksize = 1024_zu;\r\n                    std::pmr::monotonic_buffer_resource mbr{initial_blocksize, &rr};\r\n\r\n                    (void) mbr.allocate(sizeof(void*), alignof(void*));\r\n                    auto const [blocksize, baseline] = [&] {\r\n                        auto const tmp = rr.allocations_.size();\r\n                        CHECK(rr.allocations_.back().size >= initial_blocksize);\r\n                        auto const blocksize = rr.allocations_.back().size;\r\n                        mbr.release();\r\n                        CHECK(tmp > rr.allocations_.size());\r\n                        return std::pair(blocksize, rr.allocations_.size());\r\n                    }();\r\n\r\n                    constexpr int N = 1024;\r\n                    for (auto i = 0; i < N; ++i) {\r\n                        (void) mbr.allocate(sizeof(void*), alignof(void*));\r\n                        CHECK(baseline + 1 == rr.allocations_.size()); // one block was allocated...\r\n                        CHECK(rr.allocations_.back().size == blocksize); // ...of size blocksize...\r\n                        mbr.release();\r\n                        CHECK(baseline == rr.allocations_.size()); // ...and released again\r\n                    }\r\n                }\r\n\r\n                void test() {\r\n                    test_destruction();\r\n                    test_repeated_release();\r\n                }\r\n            } // namespace release\r\n\r\n            namespace do_allocate {\r\n                void test_preallocated_buffer() {\r\n                    // Verify that calls to allocate do not hit the upstream resource until the\r\n                    // initial buffer is exhausted.\r\n                    constexpr auto N = 64_zu;\r\n                    alignas(void*) char buffer[N * sizeof(void*)];\r\n                    std::pmr::monotonic_buffer_resource mbr{buffer, sizeof(buffer), std::pmr::null_memory_resource()};\r\n                    for (auto i = N; i-- > 0;) {\r\n                        (void) mbr.allocate(sizeof(void*), alignof(void*));\r\n                    }\r\n                    try {\r\n                        (void) mbr.allocate(1, 1);\r\n                        CHECK(false);\r\n                    } catch (const std::bad_alloc&) {\r\n                        // nothing to do\r\n                    }\r\n                }\r\n\r\n                void test_size_and_alignment() {\r\n                    // Verify that requests to the upstream allocator are for blocks whose size and\r\n                    // alignment is not less than the size and alignment requested from the\r\n                    // monotonic_buffer_resource.\r\n                    for (std::size_t log : {5U, 6U, 8U, 10U, 12U, 16U, 20U}) {\r\n                        auto const size = 1_zu << log;\r\n                        recording_resource rr;\r\n                        std::pmr::monotonic_buffer_resource mbr(&rr);\r\n                        void* const ptr = mbr.allocate(size, size);\r\n                        CHECK(ptr != nullptr);\r\n                        CHECK(rr.allocations_.size() == 1);\r\n                        CHECK(rr.allocations_[0].ptr == ptr);\r\n                        CHECK(rr.allocations_[0].size >= size);\r\n                        CHECK(rr.allocations_[0].align >= size);\r\n                        void* vp     = ptr;\r\n                        size_t space = size;\r\n                        CHECK(std::align(size, size, vp, space) == ptr);\r\n                    }\r\n                }\r\n\r\n                void test_growth() {\r\n                    // Verify that successive allocation requests to the upstream resource form a\r\n                    // geometrically increasing sequence.\r\n                    constexpr auto N = 16_zu;\r\n                    recording_resource rr;\r\n                    std::pmr::monotonic_buffer_resource mbr{&rr};\r\n\r\n                    try {\r\n                        do {\r\n                            (void) mbr.allocate(1, 1);\r\n                        } while (rr.allocations_.size() < N);\r\n                    } catch (const std::bad_alloc&) {\r\n                    }\r\n\r\n                    std::vector<std::size_t> sizes;\r\n                    sizes.reserve(rr.allocations_.size());\r\n                    for (auto const& a : rr.allocations_) {\r\n                        sizes.push_back(a.size);\r\n                    }\r\n                    analyze_geometric_growth(sizes.data(), sizes.size());\r\n                }\r\n\r\n                void test() {\r\n                    test_preallocated_buffer();\r\n                    test_size_and_alignment();\r\n                    test_growth();\r\n                }\r\n            } // namespace do_allocate\r\n\r\n            namespace do_deallocate {\r\n                void test() {\r\n                    // Verify that calls to deallocate do not result in calls to the upstream.\r\n                    constexpr auto N = 1_zu << 20;\r\n                    std::vector<void*> pointers(N);\r\n                    recording_resource rr;\r\n                    std::pmr::monotonic_buffer_resource mbr{&rr};\r\n                    for (auto i = 0_zu; i < N; ++i) {\r\n                        pointers[i] = mbr.allocate(sizeof(int), alignof(int));\r\n                    }\r\n                    auto allocations = std::exchange(rr.allocations_, {});\r\n                    for (auto const& p : pointers) {\r\n                        mbr.deallocate(p, sizeof(int), alignof(int));\r\n                    }\r\n                    rr.allocations_ = std::move(allocations);\r\n                }\r\n            } // namespace do_deallocate\r\n        } // namespace mem\r\n    } // namespace monotonic\r\n\r\n    namespace pool {\r\n        namespace allocate_deallocate {\r\n            template <class T>\r\n            struct drop_wrapper { // contains a constructed object that is never destroyed\r\n                alignas(T) unsigned char space_[sizeof(T)];\r\n\r\n                template <class... Args>\r\n                drop_wrapper(Args&&... args) {\r\n                    ::new (space_) T(std::forward<Args>(args)...);\r\n                }\r\n\r\n                T& operator*() & {\r\n                    return reinterpret_cast<T&>(space_);\r\n                }\r\n                T const& operator*() const& {\r\n                    return reinterpret_cast<T const&>(space_);\r\n                }\r\n            };\r\n\r\n            void test_light_allocation() {\r\n                auto lambda = [](std::pmr::memory_resource* mr) {\r\n                    // perform allocations of various sizes\r\n                    using std::begin;\r\n                    using std::end;\r\n                    drop_wrapper<std::pmr::list<int>> wrapped_l1{mr};\r\n                    auto& l1 = *wrapped_l1;\r\n                    for (int i = 0; i < 42; ++i) {\r\n                        l1.push_back(i);\r\n                    }\r\n                    char const* const strings[] = {\"this\", \"is\", \"a\", \"test\",\r\n                        \"This string is way way way way way way way way way way way way way way way way way way way \"\r\n                        \"way way way \"\r\n                        \"way way way way way way way way way way way way way way way way way way way way way way way \"\r\n                        \"way way way \"\r\n                        \"way way way way way way way way too long to fit in your SSO buffer.\"};\r\n                    drop_wrapper<std::pmr::vector<std::pmr::string>> wrapped_v1{begin(strings), end(strings), mr};\r\n                    auto& v1 = *wrapped_v1;\r\n                    drop_wrapper<std::pmr::vector<double>> wrapped_v2(1024_zu, mr);\r\n                    auto& v2 = *wrapped_v2;\r\n                    std::iota(begin(v2), end(v2), 3.25);\r\n                    {\r\n                        int i = 0;\r\n                        for (auto const& v : l1) {\r\n                            CHECK(v == i);\r\n                            ++i;\r\n                        }\r\n                    }\r\n                    CHECK(std::equal(begin(v1), end(v1), begin(strings), end(strings)));\r\n                    CHECK(v2[42] == 45.25);\r\n                };\r\n\r\n                {\r\n                    recording_resource rr;\r\n                    std::pmr::unsynchronized_pool_resource upr{{0_zu, 1_zu}, &rr};\r\n                    lambda(&upr);\r\n                }\r\n                {\r\n                    recording_resource rr;\r\n                    std::pmr::unsynchronized_pool_resource upr{{0_zu, 64_zu}, &rr};\r\n                    lambda(&upr);\r\n                }\r\n                {\r\n                    recording_resource rr;\r\n                    std::pmr::synchronized_pool_resource upr{{0_zu, 64_zu}, &rr};\r\n                    lambda(&upr);\r\n                }\r\n            }\r\n\r\n            void test_medium_allocation() {\r\n                // allocate and deallocate a great many blocks of several blocksizes\r\n                static constexpr auto min_blocksize   = sizeof(void*);\r\n                static constexpr auto max_blocksize   = 1_zu << 24;\r\n                static constexpr auto max_block_count = 1024_zu;\r\n\r\n                std::vector<void*> pointers(max_block_count);\r\n\r\n                recording_resource rr;\r\n                std::pmr::unsynchronized_pool_resource upr{&rr};\r\n\r\n                for (auto blocksize = min_blocksize; blocksize < max_blocksize; blocksize <<= 1) {\r\n                    auto const n_allocs = std::min(max_block_count, max_blocksize / blocksize);\r\n\r\n                    for (auto j = 0_zu; j < n_allocs; ++j) {\r\n                        pointers[j] = upr.allocate(blocksize, blocksize);\r\n                    }\r\n\r\n                    for (auto j = 0_zu; j < n_allocs / 4 * 3; ++j) {\r\n                        upr.deallocate(pointers[j], blocksize, blocksize);\r\n                    }\r\n                }\r\n            }\r\n\r\n            void test_heavy_allocation() {\r\n                // allocate and deallocate a great many blocks of a single blocksize\r\n                static constexpr auto blocksize = 2 * sizeof(void*);\r\n                static constexpr auto n_allocs  = 1024_zu;\r\n                static constexpr auto n_frees   = 512_zu;\r\n                static_assert(n_allocs >= n_frees);\r\n                static constexpr auto n_iterations = 1024_zu;\r\n\r\n                std::vector<void*> pointers;\r\n                pointers.reserve(n_iterations * (n_allocs - n_frees) + n_frees);\r\n\r\n                recording_resource rr;\r\n                std::pmr::unsynchronized_pool_resource upr{&rr};\r\n                for (auto i = 0_zu; i < n_iterations; ++i) {\r\n                    for (auto j = 0_zu; j < n_allocs; ++j) {\r\n                        pointers.push_back(upr.allocate(blocksize, blocksize));\r\n                    }\r\n\r\n                    for (auto j = 0_zu; j < n_frees; ++j) {\r\n                        upr.deallocate(pointers[j], blocksize, blocksize);\r\n                    }\r\n                    pointers.erase(pointers.begin(), pointers.begin() + n_frees);\r\n                }\r\n            }\r\n\r\n            void test_growth() {\r\n                // Verify that successive allocation requests for a given block size result\r\n                // in a geometrically increasing sequence of requests to the upstream resource.\r\n                constexpr auto N          = 16_zu;\r\n                constexpr auto block_size = 16_zu;\r\n                recording_resource rr;\r\n                std::pmr::unsynchronized_pool_resource upr{&rr};\r\n\r\n                // allocate and release so we ignore bookkeeping/debug allocations\r\n                (void) upr.allocate(block_size, block_size);\r\n                upr.release();\r\n                // In the current ABI, there should be a single two-pointer allocation for the container proxy\r\n                constexpr auto idl = static_cast<size_t>(_ITERATOR_DEBUG_LEVEL != 0);\r\n                CHECK(rr.allocations_.size() == idl);\r\n\r\n                try {\r\n                    do {\r\n                        (void) upr.allocate(block_size, block_size);\r\n                    } while (rr.allocations_.size() < N + idl);\r\n                } catch (const std::bad_alloc&) {\r\n                }\r\n\r\n                auto const n = rr.allocations_.size() - idl;\r\n                std::vector<std::size_t> sizes;\r\n                sizes.reserve(n);\r\n                for (auto i = 0_zu; i < n; ++i) {\r\n                    sizes.push_back(rr.allocations_[i + idl].size);\r\n                }\r\n                analyze_geometric_growth(sizes.data(), sizes.size());\r\n            }\r\n\r\n            void test() {\r\n                test_light_allocation();\r\n                test_medium_allocation();\r\n                test_heavy_allocation();\r\n                test_growth();\r\n            }\r\n        } // namespace allocate_deallocate\r\n\r\n        namespace release {\r\n            void test() {\r\n                recording_resource rr;\r\n                std::pmr::unsynchronized_pool_resource upr{{0_zu, sizeof(void*) << 8}, &rr};\r\n\r\n                for (auto shift : {0, 2, 4, 8, 10, 12}) {\r\n                    auto const size = sizeof(void*) << shift;\r\n                    auto const n    = (1024 * 1024 / sizeof(void*)) >> shift;\r\n                    for (auto i = 0_zu; i < n; ++i) {\r\n                        (void) upr.allocate(size, alignof(void*));\r\n                    }\r\n                }\r\n                upr.release();\r\n                // In the current ABI, there should be a single two-pointer allocation for the container proxy\r\n                constexpr auto idl = static_cast<size_t>(_ITERATOR_DEBUG_LEVEL != 0);\r\n                CHECK(rr.allocations_.size() == idl);\r\n                if constexpr (idl != 0) {\r\n                    CHECK(rr.allocations_.front().size == 2 * sizeof(void*));\r\n                }\r\n            }\r\n        } // namespace release\r\n\r\n        namespace upstream_resource {\r\n            void test() {\r\n                {\r\n                    std::pmr::unsynchronized_pool_resource upr;\r\n                    CHECK(upr.upstream_resource() == std::pmr::get_default_resource());\r\n                }\r\n                {\r\n                    recording_resource rr;\r\n                    std::pmr::unsynchronized_pool_resource upr{&rr};\r\n                    CHECK(upr.upstream_resource() == &rr);\r\n                }\r\n            }\r\n        } // namespace upstream_resource\r\n\r\n        namespace options {\r\n            void test() {\r\n                std::pmr::pool_options const defaults = [] {\r\n                    // options default to non-zero values\r\n                    std::pmr::unsynchronized_pool_resource upr;\r\n                    std::pmr::pool_options o = upr.options();\r\n                    CHECK(o.max_blocks_per_chunk != 0);\r\n                    CHECK(o.largest_required_pool_block != 0);\r\n                    return o;\r\n                }();\r\n                {\r\n                    // zero values explicitly select the defaults\r\n                    std::pmr::unsynchronized_pool_resource upr{{0_zu, 0_zu}};\r\n                    std::pmr::pool_options o = upr.options();\r\n                    CHECK(o.max_blocks_per_chunk == defaults.max_blocks_per_chunk);\r\n                    CHECK(o.largest_required_pool_block == defaults.largest_required_pool_block);\r\n                }\r\n                {\r\n                    std::pmr::unsynchronized_pool_resource upr{{1_zu << 12, 1_zu << 18}};\r\n                    std::pmr::pool_options o = upr.options();\r\n                    // \"sizes may be rounded to unspecified granularity\"\r\n                    CHECK(o.max_blocks_per_chunk > (1_zu << 11));\r\n                    CHECK(o.max_blocks_per_chunk < (1_zu << 13));\r\n                    CHECK(o.largest_required_pool_block > (1_zu << 17));\r\n                    CHECK(o.largest_required_pool_block < (1_zu << 19));\r\n                }\r\n            }\r\n        } // namespace options\r\n\r\n        namespace is_equal {\r\n            template <class PoolResource>\r\n            void test_is_equal() {\r\n                PoolResource pr1, pr2;\r\n                CHECK(pr1 == pr1);\r\n                CHECK(!(pr1 != pr1));\r\n                CHECK(pr1.is_equal(pr1));\r\n\r\n                CHECK(pr2 == pr2);\r\n                CHECK(!(pr2 != pr2));\r\n                CHECK(pr2.is_equal(pr2));\r\n\r\n                CHECK(!(pr1 == pr2));\r\n                CHECK(pr1 != pr2);\r\n                CHECK(!pr1.is_equal(pr2));\r\n                CHECK(!(pr2 == pr1));\r\n                CHECK(pr2 != pr1);\r\n                CHECK(!pr2.is_equal(pr1));\r\n\r\n                struct DerivedResource : PoolResource {};\r\n                DerivedResource dr;\r\n                CHECK(dr == dr);\r\n                CHECK(!(dr != dr));\r\n                CHECK(dr.is_equal(dr));\r\n\r\n                CHECK(!(dr == pr1));\r\n                CHECK(dr != pr1);\r\n                CHECK(!dr.is_equal(pr1));\r\n                CHECK(!pr1.is_equal(dr));\r\n                CHECK(!(pr1 == dr));\r\n                CHECK(pr1 != dr);\r\n                CHECK(!pr1.is_equal(dr));\r\n                CHECK(!dr.is_equal(pr1));\r\n\r\n                PoolResource& base = dr;\r\n                CHECK(dr == base);\r\n                CHECK(!(dr != base));\r\n                CHECK(dr.is_equal(base));\r\n\r\n                CHECK(base == dr);\r\n                CHECK(!(base != dr));\r\n                CHECK(base.is_equal(dr));\r\n            }\r\n\r\n            void test() {\r\n                test_is_equal<std::pmr::unsynchronized_pool_resource>();\r\n                test_is_equal<std::pmr::synchronized_pool_resource>();\r\n            }\r\n        } // namespace is_equal\r\n    } // namespace pool\r\n\r\n    namespace containers {\r\n        template <class T>\r\n        void pmr_container_test() {\r\n            CHECK(T{}.get_allocator().resource() == std::pmr::get_default_resource());\r\n            recording_resource rr;\r\n            CHECK(T{&rr}.get_allocator().resource() == &rr);\r\n        }\r\n\r\n        void test() {\r\n            pmr_container_test<std::pmr::string>();\r\n#ifdef __cpp_lib_char8_t\r\n            pmr_container_test<std::pmr::u8string>();\r\n#endif // __cpp_lib_char8_t\r\n            pmr_container_test<std::pmr::u16string>();\r\n            pmr_container_test<std::pmr::u32string>();\r\n            pmr_container_test<std::pmr::wstring>();\r\n\r\n            pmr_container_test<std::pmr::deque<int>>();\r\n            pmr_container_test<std::pmr::forward_list<int>>();\r\n            pmr_container_test<std::pmr::list<int>>();\r\n            pmr_container_test<std::pmr::map<int, int>>();\r\n            pmr_container_test<std::pmr::multimap<int, int>>();\r\n            pmr_container_test<std::pmr::multiset<int>>();\r\n            pmr_container_test<std::pmr::set<int>>();\r\n            pmr_container_test<std::pmr::unordered_map<int, int>>();\r\n            pmr_container_test<std::pmr::unordered_multimap<int, int>>();\r\n            pmr_container_test<std::pmr::unordered_multiset<int>>();\r\n            pmr_container_test<std::pmr::unordered_set<int>>();\r\n            pmr_container_test<std::pmr::vector<int>>();\r\n\r\n            pmr_container_test<std::pmr::cmatch>();\r\n            pmr_container_test<std::pmr::wcmatch>();\r\n            pmr_container_test<std::pmr::smatch>();\r\n            pmr_container_test<std::pmr::wsmatch>();\r\n        }\r\n    } // namespace containers\r\n\r\n    namespace map_containers {\r\n        struct pair_conv {\r\n            operator std::pair<const int, int>() const {\r\n                return {};\r\n            }\r\n        };\r\n\r\n        struct mem_pair_conv {\r\n            std::pair<const int, int> pair_{1, 42};\r\n            operator const std::pair<const int, int>&() const {\r\n                return pair_;\r\n            }\r\n        };\r\n\r\n        template <class T>\r\n        void pair_conversion_test() {\r\n            T cont;\r\n            cont.emplace(pair_conv{});\r\n            cont.emplace(mem_pair_conv{});\r\n        }\r\n\r\n        void test() {\r\n            pair_conversion_test<std::pmr::map<int, int>>();\r\n            pair_conversion_test<std::pmr::multimap<int, int>>();\r\n            pair_conversion_test<std::pmr::unordered_map<int, int>>();\r\n            pair_conversion_test<std::pmr::unordered_multimap<int, int>>();\r\n        }\r\n\r\n        // Test cv-qualified source type (LWG-3677)\r\n        void lwg3677_test() {\r\n            using PairType = std::pair<const int, int>;\r\n\r\n            alignas(PairType) unsigned char buffer[sizeof(PairType)];\r\n            const auto raw_ptr = reinterpret_cast<PairType*>(buffer);\r\n\r\n            std::pmr::polymorphic_allocator<PairType> al;\r\n\r\n            al.construct(raw_ptr, pair_conv{});\r\n            al.construct(static_cast<const PairType*>(raw_ptr), pair_conv{});\r\n            al.construct(static_cast<volatile PairType*>(raw_ptr), pair_conv{});\r\n            al.construct(static_cast<const volatile PairType*>(raw_ptr), pair_conv{});\r\n\r\n            al.construct(raw_ptr, mem_pair_conv{});\r\n            al.construct(static_cast<const PairType*>(raw_ptr), mem_pair_conv{});\r\n            al.construct(static_cast<volatile PairType*>(raw_ptr), mem_pair_conv{});\r\n            al.construct(static_cast<const volatile PairType*>(raw_ptr), mem_pair_conv{});\r\n        }\r\n    } // namespace map_containers\r\n\r\n    void test_gh3408() {\r\n        // We ignored the possibility that max_blocks_per_chunk could be less than _Default_next_capacity\r\n        recording_resource upstream;\r\n        std::pmr::pool_options options{};\r\n        options.max_blocks_per_chunk = 1;\r\n        std::pmr::unsynchronized_pool_resource res{options, &upstream};\r\n        const std::size_t size = 0x8009;\r\n        (void) res.allocate(size);\r\n        const allocation& alloc = upstream.allocations_[upstream.allocations_.size() - 1];\r\n        CHECK(alloc.size >= 0x10000);\r\n        CHECK(alloc.size < 2 * 0x10000);\r\n    }\r\n} // unnamed namespace\r\n\r\nint main() {\r\n    // This test MUST BE FIRST; it tests global state\r\n    memory_resource::global::get_set_default_resource::test();\r\n    memory_resource::global::new_delete_resource::test();\r\n    memory_resource::global::null_memory_resource::test();\r\n    memory_resource::is_equal::test();\r\n    memory_resource::allocate_deallocate::test();\r\n\r\n    polymorphic_allocator::value_type::test();\r\n    polymorphic_allocator::ctor::default_::test();\r\n    polymorphic_allocator::ctor::value::test();\r\n    polymorphic_allocator::ctor::rebind::test();\r\n    polymorphic_allocator::mem::allocate_deallocate::test();\r\n    polymorphic_allocator::mem::construct::test();\r\n    polymorphic_allocator::mem::uses_allocator_construct::test();\r\n    polymorphic_allocator::mem::piecewise_construct::test();\r\n    polymorphic_allocator::mem::construct_pair::test();\r\n    polymorphic_allocator::mem::construct_pair_U_V::test();\r\n    polymorphic_allocator::mem::construct_pair_lvalue_pair::test();\r\n    polymorphic_allocator::mem::construct_pair_rvalue_pair::test();\r\n    polymorphic_allocator::mem::select_on_container_copy_construction::test();\r\n    polymorphic_allocator::mem::resource::test();\r\n    polymorphic_allocator::eq::test();\r\n    polymorphic_allocator::eq_cvt::test();\r\n    polymorphic_allocator::destroy::test();\r\n\r\n    monotonic::ctor::buffer_upstream::test();\r\n    monotonic::ctor::size_upstream::test();\r\n    monotonic::ctor::upstream::test();\r\n    monotonic::mem::release::test();\r\n    monotonic::mem::do_allocate::test();\r\n    monotonic::mem::do_deallocate::test();\r\n\r\n    pool::release::test();\r\n    pool::upstream_resource::test();\r\n    pool::options::test();\r\n    pool::is_equal::test();\r\n    pool::allocate_deallocate::test();\r\n\r\n    containers::test();\r\n\r\n    map_containers::test();\r\n\r\n    map_containers::lwg3677_test();\r\n\r\n    test_gh3408();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0220R1_sample/adapterator.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n\r\n#include <iterator>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nnamespace impl {\r\n    namespace meta {\r\n        template <class T>\r\n        using _t = typename T::type;\r\n\r\n        template <class>\r\n        struct first_ {};\r\n        template <template <class...> class L, class First, class... Rest>\r\n        struct first_<L<First, Rest...>> {\r\n            using type = First;\r\n        };\r\n        template <class T>\r\n        using first = _t<first_<T>>;\r\n\r\n        template <class>\r\n        struct second_ {};\r\n        template <template <class...> class L, class First, class Second, class... Rest>\r\n        struct second_<L<First, Second, Rest...>> {\r\n            using type = Second;\r\n        };\r\n        template <class T>\r\n        using second = _t<second_<T>>;\r\n    } // namespace meta\r\n\r\n    template <class I, class Cat>\r\n    struct associated_types : std::iterator_traits<I> {\r\n        using iterator_category = Cat;\r\n        using pointer           = I;\r\n    };\r\n    template <class I>\r\n    struct associated_types<I, std::output_iterator_tag> {\r\n        using iterator_category = std::output_iterator_tag;\r\n        using difference_type   = void;\r\n        using value_type        = void;\r\n        using pointer           = void;\r\n        using reference         = void;\r\n    };\r\n\r\n    template <class Derived>\r\n    class output : public associated_types<meta::first<Derived>, meta::second<Derived>> {\r\n    protected:\r\n        using I             = meta::first<Derived>;\r\n        using category      = meta::second<Derived>;\r\n        using base_category = typename std::iterator_traits<I>::iterator_category;\r\n        I i_;\r\n\r\n    public:\r\n        output() = default;\r\n        explicit output(I i) : i_{std::move(i)} {\r\n            static_assert(std::is_base_of_v<output, Derived>, \"Go read about \\\"CRTP\\\" on wikipedia.\");\r\n        }\r\n\r\n        I base() const {\r\n            return i_;\r\n        }\r\n\r\n        decltype(auto) operator*() const {\r\n            return *i_;\r\n        }\r\n        Derived& operator++() & {\r\n            ++i_;\r\n            return static_cast<Derived&>(*this);\r\n        }\r\n        Derived operator++(int) & {\r\n            auto tmp = static_cast<Derived&>(*this);\r\n            ++*this;\r\n            return tmp;\r\n        }\r\n\r\n        static_assert(std::is_base_of_v<std::forward_iterator_tag, base_category>,\r\n            \"The definition of postfix ++ effectively requires forward iterators.\");\r\n        static_assert(std::is_same_v<std::output_iterator_tag, category> || std::is_base_of_v<category, base_category>,\r\n            \"Base iterator does not model adapted category.\");\r\n    };\r\n\r\n    template <class Derived>\r\n    class input : public output<Derived> {\r\n    protected:\r\n        using output<Derived>::i_;\r\n\r\n    public:\r\n        using pointer = typename output<Derived>::pointer;\r\n\r\n        using output<Derived>::output;\r\n\r\n        pointer operator->() const {\r\n            return i_;\r\n        }\r\n        friend bool operator==(input const& x, input const& y) {\r\n            return x.i_ == y.i_;\r\n        }\r\n        friend bool operator!=(input const& x, input const& y) {\r\n            return !(x == y);\r\n        }\r\n    };\r\n\r\n    template <class Derived>\r\n    class bidi : public input<Derived> {\r\n    protected:\r\n        using input<Derived>::i_;\r\n\r\n    public:\r\n        using input<Derived>::input;\r\n\r\n        Derived& operator--() & {\r\n            --i_;\r\n            return static_cast<Derived&>(*this);\r\n        }\r\n        Derived operator--(int) & {\r\n            auto tmp = static_cast<Derived&>(*this);\r\n            --*this;\r\n            return tmp;\r\n        }\r\n    };\r\n\r\n    template <class Derived>\r\n    class random : public bidi<Derived> {\r\n    protected:\r\n        using bidi<Derived>::i_;\r\n\r\n    public:\r\n        using difference_type = typename bidi<Derived>::difference_type;\r\n        using reference       = typename bidi<Derived>::reference;\r\n\r\n        using bidi<Derived>::bidi;\r\n\r\n        Derived& operator+=(difference_type n) & {\r\n            i_ += n;\r\n            return static_cast<Derived&>(*this);\r\n        }\r\n        friend Derived operator+(random const& x, difference_type n) {\r\n            auto tmp = static_cast<Derived const&>(x);\r\n            tmp += n;\r\n            return tmp;\r\n        }\r\n        friend Derived operator+(difference_type n, random const& x) {\r\n            return x + n;\r\n        }\r\n\r\n        Derived& operator-=(difference_type n) & {\r\n            return static_cast<Derived&>(*this += -n);\r\n        }\r\n        friend difference_type operator-(random const& x, random const& y) {\r\n            return x.i_ - y.i_;\r\n        }\r\n        friend Derived operator-(random const& x, difference_type n) {\r\n            return x + -n;\r\n        }\r\n\r\n        reference operator[](difference_type i) const {\r\n            return i_[i];\r\n        }\r\n\r\n        friend bool operator<(random const& x, random const& y) {\r\n            return x.i_ < y.i_;\r\n        }\r\n        friend bool operator>(random const& x, random const& y) {\r\n            return y < x;\r\n        }\r\n        friend bool operator<=(random const& x, random const& y) {\r\n            return !(y < x);\r\n        }\r\n        friend bool operator>=(random const& x, random const& y) {\r\n            return !(x < y);\r\n        }\r\n    };\r\n} // namespace impl\r\n\r\ntemplate <class I, class C>\r\nstruct adapterator : impl::output<adapterator<I, C>> {\r\n    adapterator() = delete;\r\n    using impl::output<adapterator>::output;\r\n};\r\n\r\ntemplate <class I>\r\nstruct adapterator<I, std::input_iterator_tag> : impl::input<adapterator<I, std::input_iterator_tag>> {\r\n    adapterator() = delete;\r\n    using impl::input<adapterator>::input;\r\n};\r\n\r\ntemplate <class I>\r\nstruct adapterator<I, std::forward_iterator_tag> : impl::input<adapterator<I, std::forward_iterator_tag>> {\r\n    using impl::input<adapterator>::input;\r\n};\r\n\r\ntemplate <class I>\r\nstruct adapterator<I, std::bidirectional_iterator_tag> : impl::bidi<adapterator<I, std::bidirectional_iterator_tag>> {\r\n    using impl::bidi<adapterator>::bidi;\r\n};\r\n\r\ntemplate <class I>\r\nstruct adapterator<I, std::random_access_iterator_tag> : impl::random<adapterator<I, std::random_access_iterator_tag>> {\r\n    using impl::random<adapterator>::random;\r\n};\r\n"
  },
  {
    "path": "tests/std/tests/P0220R1_sample/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0220R1_sample/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstdio>\r\n#include <iterator>\r\n#include <numeric>\r\n#include <random>\r\n#include <type_traits>\r\n\r\n#include \"adapterator.hpp\"\r\n\r\nusing namespace std;\r\n\r\nnamespace {\r\n    constexpr unsigned int Pop = 1000;\r\n\r\n    array<int, Pop> source;\r\n    array<int, Pop> dest0;\r\n    array<int, Pop> dest1;\r\n\r\n    void clear() {\r\n        dest0.fill(0);\r\n        dest1.fill(0);\r\n    }\r\n\r\n    template <class SourceCategory, class DestCategory, class URNG>\r\n    void test_source_dest_size(URNG& urng, unsigned int n) {\r\n        using SI = adapterator<decltype(cbegin(source)), SourceCategory>;\r\n        using DI = adapterator<decltype(begin(dest0)), DestCategory>;\r\n        clear();\r\n        auto const result = static_cast<ptrdiff_t>(min(n, Pop));\r\n\r\n        auto cpy = urng;\r\n        assert(\r\n            sample(SI{cbegin(source)}, SI{cend(source)}, DI{begin(dest0)}, n, urng).base() == cbegin(dest0) + result);\r\n\r\n        // Verify repeatability\r\n        assert(sample(SI{cbegin(source)}, SI{cend(source)}, DI{begin(dest1)}, n, cpy).base() == cbegin(dest1) + result);\r\n        assert(equal(cbegin(dest0), cbegin(dest0) + result, cbegin(dest1), cbegin(dest1) + result));\r\n\r\n        if constexpr (is_base_of_v<forward_iterator_tag, SourceCategory>) {\r\n            // Verify stability\r\n            assert(is_sorted(cbegin(dest0), cbegin(dest0) + result));\r\n        } else {\r\n            // Ensure ordering for set_difference\r\n            sort(begin(dest0), begin(dest0) + result);\r\n        }\r\n\r\n        // Verify sample is a subset (i.e., sample - population is the empty set)\r\n        assert(set_difference(cbegin(dest0), cbegin(dest0) + result, cbegin(source), cend(source), begin(dest1))\r\n               == begin(dest1));\r\n    }\r\n\r\n    constexpr unsigned int div_ceil(unsigned int dividend, unsigned int divisor) {\r\n        return (dividend + divisor - 1) / divisor;\r\n    }\r\n\r\n    template <class SourceCategory, class DestCategory, class URNG>\r\n    void test_source_dest(URNG& gen) {\r\n        for (auto n : {div_ceil(Pop, 100), div_ceil(Pop, 2), Pop, 2 * Pop}) {\r\n            test_source_dest_size<SourceCategory, DestCategory>(gen, n);\r\n        }\r\n    }\r\n\r\n    template <class SourceCategory, class URNG>\r\n    void test_source(URNG& gen) {\r\n        test_source_dest<SourceCategory, output_iterator_tag>(gen);\r\n        test_source_dest<SourceCategory, input_iterator_tag>(gen);\r\n        test_source_dest<SourceCategory, forward_iterator_tag>(gen);\r\n        test_source_dest<SourceCategory, bidirectional_iterator_tag>(gen);\r\n        test_source_dest<SourceCategory, random_access_iterator_tag>(gen);\r\n    }\r\n} // unnamed namespace\r\n\r\nint main() {\r\n    iota(begin(source), end(source), 0);\r\n\r\n    const unsigned int seed = random_device{}();\r\n    printf(\"Using seed: %u\\n\", seed);\r\n\r\n    mt19937 gen{seed};\r\n\r\n    test_source_dest<input_iterator_tag, random_access_iterator_tag>(gen);\r\n    test_source<forward_iterator_tag>(gen);\r\n    test_source<bidirectional_iterator_tag>(gen);\r\n    test_source<random_access_iterator_tag>(gen);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0220R1_searchers/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0220R1_searchers/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <chrono>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <initializer_list>\r\n#include <iostream>\r\n#include <iterator>\r\n#include <random>\r\n#include <string>\r\n#include <string_view>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename RanIt, typename PredEq = equal_to<>>\r\nvoid assert_equal(\r\n    pair<RanIt, RanIt> result, RanIt base, ptrdiff_t expectedOffset, ptrdiff_t expectedLength, PredEq eq = {}) {\r\n    const RanIt target    = base + expectedOffset;\r\n    const RanIt targetEnd = target + expectedLength;\r\n    assert(result.first == target);\r\n    assert(result.second == targetEnd);\r\n    assert(equal(result.first, result.second, target, targetEnd, eq));\r\n}\r\n\r\n// Tests for Boyer-Moore Table2 construction\r\n// This isn't easily observable from the public interface (other than that matches will be wrong),\r\n// and the algorithm is self contained, so we're testing it directly.\r\nvoid test_case_boyer_moore_table2_construction(string_view sv, initializer_list<ptrdiff_t> expectedValues) {\r\n    assert(sv.size() == expectedValues.size());\r\n    vector<ptrdiff_t> results(sv.size());\r\n    equal_to<> eq;\r\n    _Build_boyer_moore_delta_2_table(results.data(), sv.data(), static_cast<ptrdiff_t>(sv.size()), eq);\r\n    assert(equal(results.begin(), results.end(), expectedValues.begin(), expectedValues.end()));\r\n}\r\n\r\nvoid test_boyer_moore_table2_construction() {\r\n    // Test cases from Boyer and Moore's original 1977 paper on page 4:\r\n    test_case_boyer_moore_table2_construction(\"abcxxxabc\", {14, 13, 12, 11, 10, 9, 11, 10, 1});\r\n    test_case_boyer_moore_table2_construction(\"abyxcdeyx\", {17, 16, 15, 14, 13, 12, 7, 10, 1});\r\n\r\n    // Test case from Knuth, Morris, and Pratt's updated 1977 paper, from which our delta2\r\n    // construction algorithm is derived, on page 20:\r\n    test_case_boyer_moore_table2_construction(\"badbacbacba\", {19, 18, 17, 16, 15, 8, 13, 12, 8, 12, 1});\r\n\r\n    // Test cases from Rytter's 1980 paper:\r\n    test_case_boyer_moore_table2_construction(\"aaaaaaaaaa\", {10, 10, 10, 10, 10, 10, 10, 10, 10, 10});\r\n    test_case_boyer_moore_table2_construction(\"abaabaabaa\", {12, 11, 10, 12, 11, 10, 12, 11, 2, 2});\r\n\r\n    // More test cases (made from scratch) exercising the Rytter correction:\r\n    test_case_boyer_moore_table2_construction(\"a\", {1});\r\n    test_case_boyer_moore_table2_construction(\"aa\", {2, 2});\r\n    test_case_boyer_moore_table2_construction(\"aaa\", {3, 3, 3});\r\n    test_case_boyer_moore_table2_construction(\"aaaa\", {4, 4, 4, 4});\r\n    test_case_boyer_moore_table2_construction(\"aaaaa\", {5, 5, 5, 5, 5});\r\n    test_case_boyer_moore_table2_construction(\"aaaaaa\", {6, 6, 6, 6, 6, 6});\r\n    test_case_boyer_moore_table2_construction(\"aaaaaaa\", {7, 7, 7, 7, 7, 7, 7});\r\n    test_case_boyer_moore_table2_construction(\"aaaaaaaa\", {8, 8, 8, 8, 8, 8, 8, 8});\r\n    test_case_boyer_moore_table2_construction(\"aaaaaaaaa\", {9, 9, 9, 9, 9, 9, 9, 9, 9});\r\n    test_case_boyer_moore_table2_construction(\"ab\", {3, 1});\r\n    test_case_boyer_moore_table2_construction(\"aba\", {4, 3, 1});\r\n    test_case_boyer_moore_table2_construction(\"abab\", {5, 4, 5, 1});\r\n    test_case_boyer_moore_table2_construction(\"ababa\", {6, 5, 6, 5, 1});\r\n    test_case_boyer_moore_table2_construction(\"ababab\", {7, 6, 7, 6, 7, 1});\r\n    test_case_boyer_moore_table2_construction(\"abababa\", {8, 7, 8, 7, 8, 7, 1});\r\n    test_case_boyer_moore_table2_construction(\"abababab\", {9, 8, 9, 8, 9, 8, 9, 1});\r\n    test_case_boyer_moore_table2_construction(\"ababababa\", {10, 9, 10, 9, 10, 9, 10, 9, 1});\r\n    test_case_boyer_moore_table2_construction(\"ababababab\", {11, 10, 11, 10, 11, 10, 11, 10, 11, 1});\r\n    test_case_boyer_moore_table2_construction(\"abc\", {5, 4, 1});\r\n    test_case_boyer_moore_table2_construction(\"abca\", {6, 5, 4, 1});\r\n    test_case_boyer_moore_table2_construction(\"abcab\", {7, 6, 5, 6, 1});\r\n    test_case_boyer_moore_table2_construction(\"abcabc\", {8, 7, 6, 8, 7, 1});\r\n    test_case_boyer_moore_table2_construction(\"abcabca\", {9, 8, 7, 9, 8, 7, 1});\r\n    test_case_boyer_moore_table2_construction(\"abcabcab\", {10, 9, 8, 10, 9, 8, 9, 1});\r\n    test_case_boyer_moore_table2_construction(\"abcabcabc\", {11, 10, 9, 11, 10, 9, 11, 10, 1});\r\n}\r\n\r\ntemplate <typename Searcher, typename Result, typename... Args>\r\nvoid test_case_copies(const Searcher& searcher, const Result& result, const string_view haystack, const Args... args) {\r\n    {\r\n        const Searcher searcherCopy(searcher);\r\n        const auto result2 = searcherCopy(haystack.begin(), haystack.end());\r\n        assert(result == result2);\r\n    }\r\n\r\n    {\r\n        Searcher assignedSearcher(string_view::iterator{}, string_view::iterator{}, args...);\r\n        assignedSearcher   = searcher;\r\n        const auto result2 = assignedSearcher(haystack.begin(), haystack.end());\r\n        assert(result == result2);\r\n    }\r\n}\r\n\r\ntemplate <typename Searcher, typename... Args>\r\nvoid test_case_searcher_found(\r\n    const string_view needle, const string_view haystack, const ptrdiff_t expectedPosition, const Args... args) {\r\n    const Searcher searcher(needle.begin(), needle.end(), args...);\r\n    const auto result = searcher(haystack.begin(), haystack.end());\r\n    assert(result.first == search(haystack.begin(), haystack.end(), searcher));\r\n    assert_equal(result, haystack.begin(), expectedPosition, static_cast<ptrdiff_t>(needle.size()));\r\n    test_case_copies(searcher, result, haystack, args...);\r\n}\r\n\r\ntemplate <typename Searcher, typename... Args>\r\nvoid test_case_searcher_not_found(const string_view needle, const string_view haystack, const Args... args) {\r\n    const Searcher searcher(needle.begin(), needle.end(), args...);\r\n    const auto result = searcher(haystack.begin(), haystack.end());\r\n    assert(result.first == haystack.end());\r\n    assert(result.second == haystack.end());\r\n    test_case_copies(searcher, result, haystack, args...);\r\n}\r\n\r\ntemplate <typename Searcher, typename... Args>\r\nvoid test_case_searcher(const Args... args) {\r\n    test_case_searcher_found<Searcher>(\"\", \"\", 0, args...);\r\n    test_case_searcher_found<Searcher>(\"\", \"anything\", 0, args...);\r\n    test_case_searcher_found<Searcher>(\"AT-THAT\", \"WHICH-FINALLY-HALTS.--AT-THAT-POINT\", 22, args...);\r\n    test_case_searcher_not_found<Searcher>(\"AT-THAT\", \"WHICH-FINALLY-HALTS.--AT?THAT-POINT\", args...);\r\n    test_case_searcher_found<Searcher>(\"beginning\", \"beginning cat dog elk end\", 0, args...);\r\n    test_case_searcher_found<Searcher>(\"end\", \"beginning cat dog elk end\", 22, args...);\r\n    test_case_searcher_found<Searcher>(\"repeated\", \"a, b, c, d repeated repeated a, b, c, d repeated\", 11, args...);\r\n    test_case_searcher_found<Searcher>(\r\n        \"High bit chars \\xCD :D\", \"Sometimes random text triggers High bit chars \\xCD :D\", 31, args...);\r\n\r\n    test_case_searcher_found<Searcher>(\"abcd\", \"ddddabcd\", 4, args...);\r\n    test_case_searcher_not_found<Searcher>(\"abcd\", \"ddddxbcd\", args...);\r\n\r\n    // GH-713 \"<functional>: boyer_moore_searcher produces incorrect results\"\r\n    test_case_searcher_found<Searcher>(\"aaa\",\r\n        \"fbdhhihagdjcdibfdfdgbbhjcdifffdjdaighiaaaehigjegecjffcaecagcbiaeadhebggbijfdeihiceajbcjcjghhbjfcebge\", 38,\r\n        args...);\r\n    // More test cases for GH-713 discovered through randomized testing:\r\n    test_case_searcher_found<Searcher>(\"bbbb\",\r\n        \"aaaaaaabaaabaaabbabbabaaaaabaababbabaabaaaababbbaaaabbaaababbaaabbbbabaaabbaabbaaabbbabababbbb\", 64, args...);\r\n    test_case_searcher_found<Searcher>(\"ababa\", \"babbaabbbbbabbbbabaaaaaabbabababaabba\", 26, args...);\r\n    test_case_searcher_found<Searcher>(\"bababbab\",\r\n        \"bbaaaaaaabbbabaaababaaabaaababaababbabbbbabaaabbaabbbababbbaaaabbbabbbbaaaabababbabbaaaabbbbab\", 75, args...);\r\n    test_case_searcher_found<Searcher>(\"abaaba\",\r\n        \"abaaabbaabababbbbbbaabbbbbaabaaababbaaabaaaaaabbbaaaaabbbbabaababaababbbbaaaabbabbaabaaabaabaaabaaba\", 58,\r\n        args...);\r\n    test_case_searcher_found<Searcher>(\"babbabba\",\r\n        \"bbbbbbbaabbbbbbbababababaabaababbbbbaabbbbbaaababaabbabbbaabaaababbbaabaabbbbabbabbaabbabaa\", 76, args...);\r\n    test_case_searcher_found<Searcher>(\"aabaaaaba\", \"aabaaabbaabaaaabaabbabaabaab\", 8, args...);\r\n    test_case_searcher_found<Searcher>(\r\n        \"babaabbaba\", \"abbaabbaaababbbbaabbbaababaabbabaaabbaababbbbbbabbbbbbaaaaba\", 23, args...);\r\n    test_case_searcher_found<Searcher>(\r\n        \"babbabbab\", \"aaabaabbbabaaabaaababbababbbababbabbabaaaaababbabbabab\", 29, args...);\r\n    test_case_searcher_found<Searcher>(\r\n        \"babcbab\", \"acaabcaaacccacabbaaacbbbcbbaaaaccbbbacabcbabaacbbcbcaababcbabccbccbaababcacacbbc\", 54, args...);\r\n    test_case_searcher_found<Searcher>(\"cbcacbc\", \"abcbabcbcacbcaabbbacabbbccbccaaababbaabaabccacbaa\", 6, args...);\r\n    test_case_searcher_found<Searcher>(\r\n        \"cbaccbac\", \"babccaaaccccbcbacccacbaaccaaabbacabbacababacaccccbcccbccacbaccbacaaacaaacac\", 57, args...);\r\n    test_case_searcher_found<Searcher>(\"abcabca\",\r\n        \"abbababbaccbaacbaabacccbaabbbbccbccacbbabcababbabcabcaabbaabaabbcaaaaaabaccbbbacbaabcacbcbbbaca\", 47, args...);\r\n    test_case_searcher_found<Searcher>(\"bacbbacb\", \"cbcacbbaaaabccbacbbacbcacacbcbabcbccbacabbacbabacb\", 14, args...);\r\n}\r\n\r\nstruct FancyHash {\r\n    FancyHash() = delete;\r\n    explicit FancyHash(int) {}\r\n    FancyHash(const FancyHash&)            = default;\r\n    FancyHash& operator=(const FancyHash&) = delete;\r\n\r\n    size_t operator()(const char c) const {\r\n        return hash<char>{}(c);\r\n    }\r\n};\r\n\r\nstruct FancyEqual {\r\n    FancyEqual() = delete;\r\n    explicit FancyEqual(int) {}\r\n    FancyEqual(const FancyEqual&)            = default;\r\n    FancyEqual& operator=(const FancyEqual&) = delete;\r\n\r\n    bool operator()(const char lhs, const char rhs) const {\r\n        return lhs == rhs;\r\n    }\r\n};\r\n\r\nstruct CaseInsensitiveHashEqual {\r\n    // assumes ASCII\r\n    static char upper(char c) {\r\n        if (c >= 'a' && c <= 'z') {\r\n            c -= 'a' - 'A';\r\n        }\r\n\r\n        return c;\r\n    }\r\n\r\n    size_t operator()(const char c) const {\r\n        return hash<char>{}(upper(c));\r\n    }\r\n\r\n    bool operator()(const char lhs, const char rhs) const {\r\n        return upper(lhs) == upper(rhs);\r\n    }\r\n};\r\n\r\ntemplate <class Hash, class Pred_eq>\r\nvoid test_case_boyer_moore_functors(const Hash& h, const Pred_eq& pr) {\r\n    test_case_searcher<boyer_moore_searcher<string_view::iterator, Hash, Pred_eq>>(h, pr);\r\n    test_case_searcher<boyer_moore_horspool_searcher<string_view::iterator, Hash, Pred_eq>>(h, pr);\r\n}\r\n\r\ntemplate <template <class RanIt, class Hash, class Pred_eq> class Searcher>\r\nvoid test_case_case_insensitive() {\r\n    test_case_searcher_found<Searcher<string_view::iterator, CaseInsensitiveHashEqual, CaseInsensitiveHashEqual>>(\r\n        \"At-THaT\", \"WHICH-FINALLY-HALTS.--aT-ThAT-POINT\", 22);\r\n    test_case_searcher_not_found<Searcher<string_view::iterator, CaseInsensitiveHashEqual, CaseInsensitiveHashEqual>>(\r\n        \"aT-THAT\", \"WHICH-FINALLY-HALTS.--At?ThaT-POINT\");\r\n}\r\n\r\nstruct UdtInt {\r\n    int i;\r\n};\r\n\r\nstruct UdtEq {\r\n    bool operator()(const UdtInt& lhs, const UdtInt& rhs) const {\r\n        return lhs.i == rhs.i;\r\n    }\r\n};\r\n\r\nstruct UdtHash {\r\n    size_t operator()(const UdtInt& key) const {\r\n        return hash<int>{}(key.i);\r\n    }\r\n};\r\n\r\nvoid test_case_default_searcher_special_cases() {\r\n    const forward_list<UdtInt> needle({{4}, {3}}); // tests forward iterators, and UDTs\r\n    const vector<UdtInt> haystackVec{{1}, {2}, {3}, {4}, {3}, {5}, {6}, {10}, {11}};\r\n    const forward_list<UdtInt> haystackList(haystackVec.begin(), haystackVec.end());\r\n    const default_searcher<forward_list<UdtInt>::const_iterator, UdtEq> searcher(needle.begin(), needle.end());\r\n    const auto vecAnswer  = searcher(haystackVec.begin(), haystackVec.end()); // also tests mismatching iterator types\r\n    const auto listAnswer = searcher(haystackList.begin(), haystackList.end());\r\n\r\n    assert(distance(haystackVec.begin(), vecAnswer.first) == 3);\r\n    assert(distance(haystackVec.begin(), vecAnswer.second) == 5);\r\n    assert(equal(vecAnswer.first, vecAnswer.second, needle.begin(), needle.end(), UdtEq{}));\r\n\r\n    assert(distance(haystackList.begin(), listAnswer.first) == 3);\r\n    assert(distance(haystackList.begin(), listAnswer.second) == 5);\r\n    assert(equal(listAnswer.first, listAnswer.second, needle.begin(), needle.end(), UdtEq{}));\r\n}\r\n\r\ntemplate <template <class RanIt, class Hash, class Pred_eq> class Searcher>\r\nvoid test_case_BM_udts() {\r\n    const vector<UdtInt> needle({{4}, {3}});\r\n    const UdtInt haystack[] = {{1}, {2}, {3}, {4}, {3}, {5}, {6}, {10}, {11}};\r\n\r\n    Searcher<vector<UdtInt>::const_iterator, UdtHash, UdtEq> searcher(needle.begin(), needle.end());\r\n    const auto answer = searcher(begin(haystack), end(haystack));\r\n    assert_equal(answer, haystack, 3, 2, UdtEq{});\r\n}\r\n\r\ntemplate <template <class RanIt, class Hash, class Pred_eq> class Searcher>\r\nvoid test_case_BM_u8() {\r\n#ifdef __cpp_lib_char8_t\r\n    using BM = Searcher<u8string_view::const_iterator, hash<char8_t>, equal_to<>>;\r\n\r\n    // U+1F3C8 AMERICAN FOOTBALL\r\n    const u8string_view fastPattern{u8\"ASCII only pattern\"};\r\n    const u8string_view slowPattern{u8\"Major Game \\U0001F3C8 Sunday\"};\r\n\r\n    const u8string_view fastHaystack{u8\"When searching for an ASCII only pattern, we want to use a plain \"\r\n                                     u8\"256 array lookup\"};\r\n    const u8string_view slowHaystack{\r\n        u8\"Major Game \\U0001F3C8! If the pattern is emoji-enhanced \"\r\n        u8\"\\U0001F3C8, we fall back to a hash table for characters greater than 255, to make sure \"\r\n        u8\"that we are ready for Major Game \\U0001F3C8 Sunday!\"};\r\n\r\n    const BM fastPatBM(fastPattern.begin(), fastPattern.end());\r\n    const BM slowPatBM(slowPattern.begin(), slowPattern.end());\r\n\r\n    const auto fastFast = fastPatBM(fastHaystack.begin(), fastHaystack.end());\r\n    const auto fastSlow = fastPatBM(slowHaystack.begin(), slowHaystack.end());\r\n\r\n    const auto slowFast = slowPatBM(fastHaystack.begin(), fastHaystack.end());\r\n    const auto slowSlow = slowPatBM(slowHaystack.begin(), slowHaystack.end());\r\n\r\n    assert_equal(fastFast, fastHaystack.begin(), 22, static_cast<ptrdiff_t>(fastPattern.size()));\r\n    assert(fastSlow.first == slowHaystack.end());\r\n    assert(fastSlow.second == slowHaystack.end());\r\n    assert(slowFast.first == fastHaystack.end());\r\n    assert(slowFast.second == fastHaystack.end());\r\n    assert_equal(slowSlow, slowHaystack.begin(), 153, static_cast<ptrdiff_t>(slowPattern.size()));\r\n#endif // __cpp_lib_char8_t\r\n}\r\n\r\ntemplate <template <class RanIt, class Hash, class Pred_eq> class Searcher>\r\nvoid test_case_BM_unicode() {\r\n    using BM = Searcher<u16string_view::const_iterator, hash<char16_t>, equal_to<>>;\r\n\r\n    // U+1F3C8 AMERICAN FOOTBALL\r\n    const u16string_view fastPattern{u\"ASCII only pattern\"};\r\n    const u16string_view slowPattern{u\"Major Game \\U0001F3C8 Sunday\"};\r\n\r\n    const u16string_view fastHaystack{u\"When searching for an ASCII only pattern, we want to use a plain \"\r\n                                      u\"256 array lookup\"};\r\n    const u16string_view slowHaystack{\r\n        u\"Major Game \\U0001F3C8! If the pattern is emoji-enhanced \"\r\n        u\"\\U0001F3C8, we fall back to a hash table for characters greater than 255, to make sure \"\r\n        u\"that we are ready for Major Game \\U0001F3C8 Sunday!\"};\r\n\r\n    const BM fastPatBM(fastPattern.begin(), fastPattern.end());\r\n    const BM slowPatBM(slowPattern.begin(), slowPattern.end());\r\n\r\n    const auto fastFast = fastPatBM(fastHaystack.begin(), fastHaystack.end());\r\n    const auto fastSlow = fastPatBM(slowHaystack.begin(), slowHaystack.end());\r\n\r\n    const auto slowFast = slowPatBM(fastHaystack.begin(), fastHaystack.end());\r\n    const auto slowSlow = slowPatBM(slowHaystack.begin(), slowHaystack.end());\r\n\r\n    assert_equal(fastFast, fastHaystack.begin(), 22, static_cast<ptrdiff_t>(fastPattern.size()));\r\n    assert(fastSlow.first == slowHaystack.end());\r\n    assert(fastSlow.second == slowHaystack.end());\r\n    assert(slowFast.first == fastHaystack.end());\r\n    assert(slowFast.second == fastHaystack.end());\r\n    assert_equal(slowSlow, slowHaystack.begin(), 149, static_cast<ptrdiff_t>(slowPattern.size()));\r\n}\r\n\r\ntemplate <template <class RanIt, class Hash, class Pred_eq> class Searcher>\r\nvoid test_case_BM_unicode32() {\r\n    using BM = Searcher<u32string_view::const_iterator, hash<char32_t>, equal_to<>>;\r\n\r\n    // U+1F3C8 AMERICAN FOOTBALL\r\n    const u32string_view fastPattern{U\"ASCII only pattern\"};\r\n    const u32string_view slowPattern{U\"Major Game \\U0001F3C8 Sunday\"};\r\n\r\n    const u32string_view fastHaystack{U\"When searching for an ASCII only pattern, we want to use a plain \"\r\n                                      U\"256 array lookup\"};\r\n    const u32string_view slowHaystack{\r\n        U\"Major Game \\U0001F3C8! If the pattern is emoji-enhanced \"\r\n        U\"\\U0001F3C8, we fall back to a hash table for characters greater than 255, to make sure \"\r\n        U\"that we are ready for Major Game \\U0001F3C8 Sunday!\"};\r\n\r\n    const BM fastPatBM(fastPattern.begin(), fastPattern.end());\r\n    const BM slowPatBM(slowPattern.begin(), slowPattern.end());\r\n\r\n    const auto fastFast = fastPatBM(fastHaystack.begin(), fastHaystack.end());\r\n    const auto fastSlow = fastPatBM(slowHaystack.begin(), slowHaystack.end());\r\n\r\n    const auto slowFast = slowPatBM(fastHaystack.begin(), fastHaystack.end());\r\n    const auto slowSlow = slowPatBM(slowHaystack.begin(), slowHaystack.end());\r\n\r\n    assert_equal(fastFast, fastHaystack.begin(), 22, static_cast<ptrdiff_t>(fastPattern.size()));\r\n    assert(fastSlow.first == slowHaystack.end());\r\n    assert(fastSlow.second == slowHaystack.end());\r\n    assert(slowFast.first == fastHaystack.end());\r\n    assert(slowFast.second == fastHaystack.end());\r\n    assert_equal(slowSlow, slowHaystack.begin(), 147, static_cast<ptrdiff_t>(slowPattern.size()));\r\n}\r\n\r\nvoid report_randomized_failure(const string_view searcher, const string_view needle, const string_view haystack) {\r\n    cerr << searcher << \" failed for needle \\\"\" << needle << \"\\\" and haystack \\\"\" << haystack << \"\\\".\\n\";\r\n    cerr << \"This is a randomized test.\\n\";\r\n    cerr << \"DO NOT IGNORE/RERUN THIS FAILURE.\\n\";\r\n    cerr << \"You must report it to the STL maintainers.\\n\";\r\n    assert(false);\r\n}\r\n\r\nvoid initialize_randomness(mt19937& mt) {\r\n    static_assert(mt19937::word_size == 32);\r\n    vector<uint32_t> vec(mt19937::state_size);\r\n    random_device rd;\r\n    generate(vec.begin(), vec.end(), ref(rd));\r\n    seed_seq seq(vec.cbegin(), vec.cend());\r\n    mt.seed(seq);\r\n}\r\n\r\nvoid test_case_randomized_cases() {\r\n    using namespace std::chrono;\r\n\r\n    const auto start = steady_clock::now();\r\n\r\n    mt19937 mt;\r\n    initialize_randomness(mt);\r\n\r\n    constexpr int Needles   = 150;\r\n    constexpr int Haystacks = 150;\r\n\r\n    constexpr size_t MaxNeedleLength = 10;\r\n    uniform_int_distribution<size_t> needle_length(1, MaxNeedleLength);\r\n    string needle(MaxNeedleLength, '?');\r\n    const auto needle_first = needle.c_str();\r\n\r\n    constexpr size_t MaxHaystackLength = 100;\r\n    uniform_int_distribution<size_t> haystack_length(1, MaxHaystackLength);\r\n    string haystack(MaxHaystackLength, '?');\r\n    const auto haystack_first = haystack.c_str();\r\n\r\n    for (int max_char = 'b'; max_char <= 'f'; ++max_char) {\r\n        uniform_int_distribution<int> characters('a', max_char);\r\n\r\n        for (int n = 0; n < Needles; ++n) {\r\n            needle.resize(needle_length(mt));\r\n            for (auto& ch : needle) {\r\n                ch = static_cast<char>(characters(mt));\r\n            }\r\n            const auto needle_last = needle_first + needle.size();\r\n\r\n            const default_searcher ds{needle_first, needle_last};\r\n            const boyer_moore_searcher bms{needle_first, needle_last};\r\n            const boyer_moore_horspool_searcher bmhs{needle_first, needle_last};\r\n\r\n            for (int h = 0; h < Haystacks; ++h) {\r\n                haystack.resize(haystack_length(mt));\r\n                for (auto& ch : haystack) {\r\n                    ch = static_cast<char>(characters(mt));\r\n                }\r\n                const auto haystack_last = haystack_first + haystack.size();\r\n\r\n                const auto correct = ds(haystack_first, haystack_last);\r\n\r\n                if (bms(haystack_first, haystack_last) != correct) {\r\n                    report_randomized_failure(\"boyer_moore_searcher\", needle, haystack);\r\n                }\r\n\r\n                if (bmhs(haystack_first, haystack_last) != correct) {\r\n                    report_randomized_failure(\"boyer_moore_horspool_searcher\", needle, haystack);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    const auto elapsed = steady_clock::now() - start;\r\n\r\n    if (elapsed > 10s) {\r\n        cout << \"test_case_randomized_cases() took \" << duration_cast<milliseconds>(elapsed).count() << \" ms.\\n\";\r\n        cout << \"Consider tuning Needles and Haystacks to test fewer cases.\\n\";\r\n    }\r\n}\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\ntemplate <class Tag, class T>\r\nstruct tagged_hash {\r\n    std::size_t operator()(const T& t) const {\r\n        return std::hash<T>{}(t);\r\n    }\r\n};\r\n\r\ntemplate <class Tag>\r\nstruct tagged_equal {\r\n    template <class T, class U>\r\n    constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) == std::forward<U>(u)) {\r\n        return std::forward<T>(t) == std::forward<U>(u);\r\n    }\r\n};\r\n\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\n\r\ntemplate <class T>\r\nusing validating_hash = tagged_hash<holder<incomplete>, T>;\r\n\r\nusing validating_equal = tagged_equal<holder<incomplete>>;\r\n\r\nvoid test_adl_proof_default_searcher_on_iterators() { // COMPILE-ONLY\r\n    using validator = holder<incomplete>*;\r\n    validator varr[1]{};\r\n    (void) std::search(varr, varr + 1, default_searcher<const validator*>{varr, varr + 1});\r\n}\r\n\r\nvoid test_adl_proof_default_searcher_on_functors() { // COMPILE-ONLY\r\n    char carr[1]{};\r\n    (void) std::search(carr, carr + 1, default_searcher<const char*, validating_equal>{carr, carr + 1});\r\n\r\n    wchar_t wcarr[1]{};\r\n    (void) std::search(wcarr, wcarr + 1, default_searcher<const wchar_t*, validating_equal>{wcarr, wcarr + 1});\r\n\r\n    int iarr[1]{};\r\n    (void) std::search(iarr, iarr + 1, default_searcher<const int*, validating_equal>{iarr, iarr + 1});\r\n}\r\n\r\ntemplate <template <class RanIt, class Hash, class PredEq> class Searcher>\r\nvoid test_adl_proof_searcher_on_functors() { // COMPILE-ONLY\r\n    char carr[1]{};\r\n    (void) std::search(carr, carr + 1, Searcher<const char*, validating_hash<char>, validating_equal>{carr, carr + 1});\r\n\r\n    wchar_t wcarr[1]{};\r\n    (void) std::search(\r\n        wcarr, wcarr + 1, Searcher<const wchar_t*, validating_hash<wchar_t>, validating_equal>{wcarr, wcarr + 1});\r\n\r\n    int iarr[1]{};\r\n    (void) std::search(iarr, iarr + 1, Searcher<const int*, validating_hash<int>, validating_equal>{iarr, iarr + 1});\r\n}\r\n\r\nvoid test_adl_proof_searcher_on_functors_all() { // COMPILE-ONLY\r\n    test_adl_proof_searcher_on_functors<boyer_moore_searcher>();\r\n    test_adl_proof_searcher_on_functors<boyer_moore_horspool_searcher>();\r\n}\r\n#endif // ^^^ no workaround ^^^\r\n\r\nint main() {\r\n    test_boyer_moore_table2_construction();\r\n\r\n    test_case_searcher<default_searcher<string_view::iterator>>();\r\n\r\n    test_case_boyer_moore_functors(hash<char>{}, equal_to<>{});\r\n    test_case_boyer_moore_functors(FancyHash{42}, equal_to<>{});\r\n    test_case_boyer_moore_functors(hash<char>{}, equal_to<char>{});\r\n    test_case_boyer_moore_functors(hash<char>{}, FancyEqual{42});\r\n    test_case_boyer_moore_functors(CaseInsensitiveHashEqual{}, CaseInsensitiveHashEqual{});\r\n    test_case_case_insensitive<boyer_moore_searcher>();\r\n    test_case_case_insensitive<boyer_moore_horspool_searcher>();\r\n\r\n    test_case_default_searcher_special_cases();\r\n    test_case_BM_udts<boyer_moore_searcher>();\r\n    test_case_BM_udts<boyer_moore_horspool_searcher>();\r\n\r\n    test_case_BM_u8<boyer_moore_searcher>();\r\n    test_case_BM_u8<boyer_moore_horspool_searcher>();\r\n\r\n    test_case_BM_unicode<boyer_moore_searcher>();\r\n    test_case_BM_unicode<boyer_moore_horspool_searcher>();\r\n\r\n    test_case_BM_unicode32<boyer_moore_searcher>();\r\n    test_case_BM_unicode32<boyer_moore_horspool_searcher>();\r\n\r\n    test_case_randomized_cases();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0220R1_string_view/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0220R1_string_view/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <deque>\r\n#include <limits>\r\n#include <sstream>\r\n#include <stdexcept>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#include <constexpr_char_traits.hpp>\r\n\r\nusing namespace std;\r\n\r\nconstexpr auto ptrdiff_max = numeric_limits<ptrdiff_t>::max();\r\n\r\ntemplate <typename Expected, typename Fn>\r\nvoid assert_throws(Fn fn) {\r\n    try {\r\n        (void) fn();\r\n        abort();\r\n    } catch (const Expected&) {\r\n    }\r\n}\r\n\r\nusing c_string_view = basic_string_view<char, constexpr_char_traits>;\r\n\r\nstruct conversion_to_string_view {\r\n    operator string_view() {\r\n        return string_view{};\r\n    }\r\n};\r\n\r\nstruct nofail_conversion_to_string_view {\r\n    operator string_view() noexcept {\r\n        return string_view{};\r\n    }\r\n};\r\n\r\nstruct evil_conversion_to_string_view_rvalue_only {\r\n    operator string_view() && noexcept {\r\n        return string_view{};\r\n    }\r\n\r\n    operator string_view() const& {\r\n        return string_view{};\r\n    }\r\n};\r\n\r\nstruct evil_conversion_to_string_view_lvalue_only {\r\n    operator string_view() && {\r\n        return string_view{};\r\n    }\r\n\r\n    operator string_view() const& noexcept {\r\n        return string_view{};\r\n    }\r\n};\r\n\r\n#if defined(__clang__)\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wunneeded-internal-declaration\"\r\n#endif // __clang__\r\nconst evil_conversion_to_string_view_rvalue_only convert_rvalue_only{};\r\nconst evil_conversion_to_string_view_lvalue_only convert_lvalue_only{};\r\n#if defined(__clang__)\r\n#pragma clang diagnostic pop\r\n#endif // __clang__\r\n\r\n// N4901 [string.view.template.general]/4\r\nstatic_assert(is_trivially_copyable_v<string_view>);\r\nstatic_assert(is_trivially_copyable_v<wstring_view>);\r\n\r\n// Implied by N4901 [class.prop]/1\r\nstatic_assert(is_trivially_move_constructible_v<string_view>);\r\nstatic_assert(is_trivially_copy_constructible_v<string_view>);\r\nstatic_assert(is_trivially_move_assignable_v<string_view>);\r\nstatic_assert(is_trivially_copy_assignable_v<string_view>);\r\nstatic_assert(is_trivially_destructible_v<string_view>);\r\n\r\nstatic_assert(is_trivially_move_constructible_v<wstring_view>);\r\nstatic_assert(is_trivially_copy_constructible_v<wstring_view>);\r\nstatic_assert(is_trivially_move_assignable_v<wstring_view>);\r\nstatic_assert(is_trivially_copy_assignable_v<wstring_view>);\r\nstatic_assert(is_trivially_destructible_v<wstring_view>);\r\n\r\n// noexcept assertions:\r\n// (functions that explicitly throw have their throws tested and therefore have no static_asserts)\r\nstatic_assert(noexcept(string_view{}));\r\nstatic_assert(noexcept(string_view{string_view{}}));\r\nstring_view g_example{\"text\", 2};\r\n\r\n// the assignment operator is arguably noexcept in the WP (it is defaulted)\r\nstatic_assert(noexcept(declval<string_view&>() = declval<string_view>()));\r\nstatic_assert(noexcept(string_view{\"text\"})); // strengthened\r\nstatic_assert(noexcept(string_view{\"text\", 2})); // strengthened\r\nstatic_assert(noexcept(g_example.begin()));\r\nstatic_assert(noexcept(g_example.end()));\r\nstatic_assert(noexcept(g_example.cbegin()));\r\nstatic_assert(noexcept(g_example.cend()));\r\nstatic_assert(noexcept(g_example.rbegin()));\r\nstatic_assert(noexcept(g_example.rend()));\r\nstatic_assert(noexcept(g_example.crbegin()));\r\nstatic_assert(noexcept(g_example.crend()));\r\nstatic_assert(noexcept(g_example.size()));\r\nstatic_assert(noexcept(g_example.length()));\r\nstatic_assert(noexcept(g_example.max_size()));\r\nstatic_assert(noexcept(g_example.empty()));\r\nstatic_assert(noexcept(g_example[0])); // strengthened\r\n// at throws out_of_range\r\nstatic_assert(noexcept(g_example.front())); // strengthened\r\nstatic_assert(noexcept(g_example.back())); // strengthened\r\nstatic_assert(noexcept(g_example.data()));\r\nstatic_assert(noexcept(g_example.remove_prefix(1))); // strengthened\r\nstatic_assert(noexcept(g_example.remove_suffix(1))); // strengthened\r\nstring_view g_example_swap_target{\"text\", 3};\r\nstatic_assert(noexcept(g_example.swap(g_example_swap_target)));\r\n// copy throws out_of_range\r\n// substr throws out_of_range\r\nstatic_assert(noexcept(g_example.compare(string_view{})));\r\n// compare(pos1, n1, basic_string_view) throws out_of_range\r\n// compare(pos1, n1, basic_string_view, pos2, n2) throws out_of_range\r\nstatic_assert(noexcept(g_example.compare(\"literal\"))); // strengthened\r\n// compare(pos1, n1, const charT*) throws out_of_range and calls through char_traits\r\n// compare(pos1, n1, const charT*, n2) throws out_of_range and calls through char_traits\r\nstatic_assert(noexcept(g_example.find(string_view{})));\r\nstatic_assert(noexcept(g_example.find('c')));\r\nstatic_assert(noexcept(g_example.find(\"text\", 0, 0))); // strengthened\r\nstatic_assert(noexcept(g_example.find(\"text\"))); // strengthened\r\nstatic_assert(noexcept(g_example.rfind(string_view{})));\r\nstatic_assert(noexcept(g_example.rfind('c')));\r\nstatic_assert(noexcept(g_example.rfind(\"text\", 0, 0))); // strengthened\r\nstatic_assert(noexcept(g_example.rfind(\"text\"))); // strengthened\r\nstatic_assert(noexcept(g_example.find_first_of(string_view{})));\r\nstatic_assert(noexcept(g_example.find_first_of('c')));\r\nstatic_assert(noexcept(g_example.find_first_of(\"text\", 0, 0))); // strengthened\r\nstatic_assert(noexcept(g_example.find_first_of(\"text\"))); // strengthened\r\nstatic_assert(noexcept(g_example.find_last_of(string_view{})));\r\nstatic_assert(noexcept(g_example.find_last_of('c')));\r\nstatic_assert(noexcept(g_example.find_last_of(\"text\", 0, 0))); // strengthened\r\nstatic_assert(noexcept(g_example.find_last_of(\"text\"))); // strengthened\r\nstatic_assert(noexcept(g_example.find_first_not_of(string_view{})));\r\nstatic_assert(noexcept(g_example.find_first_not_of('c')));\r\nstatic_assert(noexcept(g_example.find_first_not_of(\"text\", 0, 0))); // strengthened\r\nstatic_assert(noexcept(g_example.find_first_not_of(\"text\"))); // strengthened\r\nstatic_assert(noexcept(g_example.find_last_not_of(string_view{})));\r\nstatic_assert(noexcept(g_example.find_last_not_of('c')));\r\nstatic_assert(noexcept(g_example.find_last_not_of(\"text\", 0, 0))); // strengthened\r\nstatic_assert(noexcept(g_example.find_last_not_of(\"text\"))); // strengthened\r\n\r\nstatic_assert(noexcept(string_view{} == string_view{}));\r\nstatic_assert(!noexcept(conversion_to_string_view{} == string_view{}));\r\nstatic_assert(noexcept(evil_conversion_to_string_view_rvalue_only{} == string_view{}));\r\nstatic_assert(!noexcept(convert_rvalue_only == string_view{}));\r\nstatic_assert(!noexcept(evil_conversion_to_string_view_lvalue_only{} == string_view{}));\r\nstatic_assert(noexcept(convert_lvalue_only == string_view{}));\r\nstatic_assert(!noexcept(string_view{} == conversion_to_string_view{}));\r\nstatic_assert(noexcept(string_view{} == evil_conversion_to_string_view_rvalue_only{}));\r\nstatic_assert(!noexcept(string_view{} == convert_rvalue_only));\r\nstatic_assert(!noexcept(string_view{} == evil_conversion_to_string_view_lvalue_only{}));\r\nstatic_assert(noexcept(string_view{} == convert_lvalue_only));\r\n\r\nstatic_assert(noexcept(string_view{} != string_view{}));\r\nstatic_assert(!noexcept(conversion_to_string_view{} != string_view{}));\r\nstatic_assert(noexcept(evil_conversion_to_string_view_rvalue_only{} != string_view{}));\r\nstatic_assert(!noexcept(convert_rvalue_only != string_view{}));\r\nstatic_assert(!noexcept(evil_conversion_to_string_view_lvalue_only{} != string_view{}));\r\nstatic_assert(noexcept(convert_lvalue_only != string_view{}));\r\nstatic_assert(!noexcept(string_view{} != conversion_to_string_view{}));\r\nstatic_assert(noexcept(string_view{} != evil_conversion_to_string_view_rvalue_only{}));\r\nstatic_assert(!noexcept(string_view{} != convert_rvalue_only));\r\nstatic_assert(!noexcept(string_view{} != evil_conversion_to_string_view_lvalue_only{}));\r\nstatic_assert(noexcept(string_view{} != convert_lvalue_only));\r\n\r\nstatic_assert(noexcept(string_view{} < string_view{}));\r\nstatic_assert(!noexcept(conversion_to_string_view{} < string_view{}));\r\nstatic_assert(noexcept(evil_conversion_to_string_view_rvalue_only{} < string_view{}));\r\nstatic_assert(!noexcept(convert_rvalue_only < string_view{}));\r\nstatic_assert(!noexcept(evil_conversion_to_string_view_lvalue_only{} < string_view{}));\r\nstatic_assert(noexcept(convert_lvalue_only < string_view{}));\r\nstatic_assert(!noexcept(string_view{} < conversion_to_string_view{}));\r\nstatic_assert(noexcept(string_view{} < evil_conversion_to_string_view_rvalue_only{}));\r\nstatic_assert(!noexcept(string_view{} < convert_rvalue_only));\r\nstatic_assert(!noexcept(string_view{} < evil_conversion_to_string_view_lvalue_only{}));\r\nstatic_assert(noexcept(string_view{} < convert_lvalue_only));\r\n\r\nstatic_assert(noexcept(string_view{} > string_view{}));\r\nstatic_assert(!noexcept(conversion_to_string_view{} > string_view{}));\r\nstatic_assert(noexcept(evil_conversion_to_string_view_rvalue_only{} > string_view{}));\r\nstatic_assert(!noexcept(convert_rvalue_only > string_view{}));\r\nstatic_assert(!noexcept(evil_conversion_to_string_view_lvalue_only{} > string_view{}));\r\nstatic_assert(noexcept(convert_lvalue_only > string_view{}));\r\nstatic_assert(!noexcept(string_view{} > conversion_to_string_view{}));\r\nstatic_assert(noexcept(string_view{} > evil_conversion_to_string_view_rvalue_only{}));\r\nstatic_assert(!noexcept(string_view{} > convert_rvalue_only));\r\nstatic_assert(!noexcept(string_view{} > evil_conversion_to_string_view_lvalue_only{}));\r\nstatic_assert(noexcept(string_view{} > convert_lvalue_only));\r\n\r\nstatic_assert(noexcept(string_view{} <= string_view{}));\r\nstatic_assert(!noexcept(conversion_to_string_view{} <= string_view{}));\r\nstatic_assert(noexcept(evil_conversion_to_string_view_rvalue_only{} <= string_view{}));\r\nstatic_assert(!noexcept(convert_rvalue_only <= string_view{}));\r\nstatic_assert(!noexcept(evil_conversion_to_string_view_lvalue_only{} <= string_view{}));\r\nstatic_assert(noexcept(convert_lvalue_only <= string_view{}));\r\nstatic_assert(!noexcept(string_view{} <= conversion_to_string_view{}));\r\nstatic_assert(noexcept(string_view{} <= evil_conversion_to_string_view_rvalue_only{}));\r\nstatic_assert(!noexcept(string_view{} <= convert_rvalue_only));\r\nstatic_assert(!noexcept(string_view{} <= evil_conversion_to_string_view_lvalue_only{}));\r\nstatic_assert(noexcept(string_view{} <= convert_lvalue_only));\r\n\r\nstatic_assert(noexcept(string_view{} >= string_view{}));\r\nstatic_assert(!noexcept(conversion_to_string_view{} >= string_view{}));\r\nstatic_assert(noexcept(evil_conversion_to_string_view_rvalue_only{} >= string_view{}));\r\nstatic_assert(!noexcept(convert_rvalue_only >= string_view{}));\r\nstatic_assert(!noexcept(evil_conversion_to_string_view_lvalue_only{} >= string_view{}));\r\nstatic_assert(noexcept(convert_lvalue_only >= string_view{}));\r\nstatic_assert(!noexcept(string_view{} >= conversion_to_string_view{}));\r\nstatic_assert(noexcept(string_view{} >= evil_conversion_to_string_view_rvalue_only{}));\r\nstatic_assert(!noexcept(string_view{} >= convert_rvalue_only));\r\nstatic_assert(!noexcept(string_view{} >= evil_conversion_to_string_view_lvalue_only{}));\r\nstatic_assert(noexcept(string_view{} >= convert_lvalue_only));\r\n\r\ntemplate <typename CharT>\r\nstruct choose_literal; // not defined\r\n\r\ntemplate <>\r\nstruct choose_literal<char> {\r\n    static constexpr const char* choose(const char* s, const wchar_t*) {\r\n        return s;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct choose_literal<wchar_t> {\r\n    static constexpr const wchar_t* choose(const char*, const wchar_t* s) {\r\n        return s;\r\n    }\r\n};\r\n\r\n#define TYPED_LITERAL(CharT, Literal) (choose_literal<CharT>::choose(Literal, L##Literal))\r\n\r\nconstexpr bool test_case_default_constructor() {\r\n    string_view sv;\r\n    assert(sv.data() == nullptr);\r\n    assert(sv.size() == 0);\r\n    assert(sv.empty());\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <typename Traits = char_traits<char>>\r\nconstexpr bool test_case_ntcts_constructor() {\r\n    const char* const expectedData = \"null-terminated\";\r\n    basic_string_view<char, Traits> sv(expectedData);\r\n    assert(sv.data() == expectedData);\r\n    assert(sv.size() == 15);\r\n    assert(sv.length() == 15);\r\n    assert(!sv.empty());\r\n    assert(sv[1] == 'u');\r\n    assert(sv.at(1) == 'u');\r\n    assert(sv.front() == 'n');\r\n    assert(sv.back() == 'd');\r\n\r\n    const char* const expectedEmptyData = \"\";\r\n    basic_string_view<char, Traits> svEmpty(expectedEmptyData);\r\n    assert(svEmpty.data() == expectedEmptyData);\r\n    assert(svEmpty.size() == 0);\r\n    assert(svEmpty.length() == 0);\r\n    assert(svEmpty.empty());\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_case_buffer_constructor() {\r\n    const char expectedDataArr[]   = {'n', 'o', ' ', 'n', 'u', 'l', 'l'};\r\n    const char* const expectedData = expectedDataArr;\r\n    string_view sv(expectedData, 7);\r\n    assert(sv.data() == expectedData);\r\n    assert(sv.size() == 7);\r\n    assert(sv.length() == 7);\r\n    assert(!sv.empty());\r\n    assert(sv[1] == 'o');\r\n    assert(sv.at(1) == 'o');\r\n    assert(sv.front() == 'n');\r\n    assert(sv.back() == 'l');\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_case_contiguous_constructor() {\r\n#if _HAS_CXX20\r\n    const array expectedData{'n', 'o', ' ', 'n', 'u', 'l', 'l'};\r\n    // Also tests the corresponding deduction guide:\r\n    same_as<string_view> auto sv = basic_string_view(expectedData.begin(), expectedData.end());\r\n    assert(sv.data() == expectedData.data());\r\n    assert(sv.size() == 7);\r\n    assert(sv.length() == 7);\r\n    assert(!sv.empty());\r\n    assert(sv[1] == 'o');\r\n    assert(sv.at(1) == 'o');\r\n    assert(sv.front() == 'n');\r\n    assert(sv.back() == 'l');\r\n#endif // _HAS_CXX20\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_case_range_constructor() {\r\n#if _HAS_CXX23\r\n    const array expectedData{'n', 'o', ' ', 'n', 'u', 'l', 'l'};\r\n    // Also tests the corresponding deduction guide:\r\n    same_as<string_view> auto sv = basic_string_view(expectedData);\r\n    assert(sv.data() == expectedData.data());\r\n    assert(sv.size() == 7);\r\n\r\n    // Also tests some of the constraints:\r\n    static_assert(is_constructible_v<string_view, vector<char>>);\r\n\r\n    // P2499R0 string_view Range Constructor Should Be explicit\r\n    static_assert(!is_convertible_v<vector<char>, string_view>);\r\n\r\n    static_assert(!is_constructible_v<string_view, deque<char>>); // not contiguous\r\n    static_assert(!is_convertible_v<deque<char>, string_view>);\r\n\r\n    static_assert(!is_constructible_v<string_view, vector<unsigned char>>); // different elements\r\n    static_assert(!is_convertible_v<vector<unsigned char>, string_view>);\r\n\r\n    static_assert(!is_convertible_v<basic_string<char, constexpr_char_traits>, string_view>); // different traits\r\n    static_assert(!is_convertible_v<basic_string_view<char, constexpr_char_traits>, string_view>);\r\n\r\n    static_assert(!is_convertible_v<string_view, basic_string_view<char, constexpr_char_traits>>);\r\n    static_assert(!is_convertible_v<basic_string_view<char, constexpr_char_traits>, string>);\r\n\r\n    static_assert(is_constructible_v<string_view, basic_string<char, constexpr_char_traits>>);\r\n    static_assert(is_constructible_v<basic_string_view<char, constexpr_char_traits>, string_view>);\r\n\r\n    static_assert(is_constructible_v<string_view, basic_string_view<char, constexpr_char_traits>>);\r\n    static_assert(is_constructible_v<basic_string_view<char, constexpr_char_traits>, string>);\r\n#endif // _HAS_CXX23\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class CharT, class Traits>\r\nconstexpr bool test_case_iterators() {\r\n    using iterator = typename basic_string_view<CharT, Traits>::iterator;\r\n    iterator itUninit{};\r\n    iterator itCopy{itUninit};\r\n    assert(itUninit == itCopy);\r\n\r\n    basic_string_view<CharT, Traits> sv(TYPED_LITERAL(CharT, \"hello world\"));\r\n    itUninit = sv.begin();\r\n    itCopy   = itUninit;\r\n    assert(itUninit == itCopy);\r\n    assert(sv.end() - sv.begin() == 11);\r\n    assert(sv.rend() - sv.rbegin() == 11);\r\n    iterator testIterator = sv.begin() + 6;\r\n    assert(*testIterator == static_cast<CharT>('w'));\r\n    assert(*(testIterator.operator->()) == static_cast<CharT>('w'));\r\n    ++testIterator;\r\n    assert(*testIterator == static_cast<CharT>('o'));\r\n    --testIterator;\r\n    assert(*testIterator == static_cast<CharT>('w'));\r\n    assert(*testIterator++ == static_cast<CharT>('w'));\r\n    assert(*testIterator == static_cast<CharT>('o'));\r\n    assert(*testIterator-- == static_cast<CharT>('o'));\r\n    assert(*testIterator == static_cast<CharT>('w'));\r\n\r\n    while (testIterator != sv.end()) {\r\n        ++testIterator;\r\n    }\r\n    while (testIterator != sv.begin()) {\r\n        --testIterator;\r\n    }\r\n\r\n    testIterator += 0;\r\n    assert(*testIterator == static_cast<CharT>('h'));\r\n    testIterator += 8;\r\n    assert(*testIterator == static_cast<CharT>('r'));\r\n    testIterator += -4;\r\n    assert(*testIterator == static_cast<CharT>('o'));\r\n\r\n    assert(*(testIterator + 6) == static_cast<CharT>('d'));\r\n    assert(*(6 + testIterator) == static_cast<CharT>('d'));\r\n\r\n    testIterator -= 1;\r\n    assert(*testIterator == static_cast<CharT>('l'));\r\n\r\n    assert(*(testIterator - 3) == static_cast<CharT>('h'));\r\n    assert(testIterator[1] == static_cast<CharT>('o'));\r\n\r\n    iterator eq    = testIterator;\r\n    iterator after = testIterator + 2;\r\n\r\n    assert(testIterator == testIterator);\r\n    assert(testIterator == eq);\r\n    assert(!(testIterator == after));\r\n    assert(!(after == testIterator));\r\n\r\n    assert(!(testIterator != testIterator));\r\n    assert(!(testIterator != eq));\r\n    assert(testIterator != after);\r\n    assert(after != testIterator);\r\n\r\n    assert(!(testIterator < testIterator));\r\n    assert(!(testIterator < eq));\r\n    assert(testIterator < after);\r\n    assert(!(after < testIterator));\r\n\r\n    assert(!(testIterator > testIterator));\r\n    assert(!(testIterator > eq));\r\n    assert(!(testIterator > after));\r\n    assert(after > testIterator);\r\n\r\n    assert(testIterator <= testIterator);\r\n    assert(testIterator <= eq);\r\n    assert(testIterator <= after);\r\n    assert(!(after <= testIterator));\r\n\r\n    assert(testIterator >= testIterator);\r\n    assert(testIterator >= eq);\r\n    assert(!(testIterator >= after));\r\n    assert(after >= testIterator);\r\n\r\n    using reverse_iterator = typename basic_string_view<CharT, Traits>::reverse_iterator;\r\n    reverse_iterator reverseUninitIt{};\r\n    reverse_iterator reverseUninitItCopy{reverseUninitIt};\r\n    assert(reverseUninitIt == reverseUninitItCopy);\r\n    assert(*sv.rbegin() == static_cast<CharT>('d'));\r\n    assert(sv.rend()[-1] == static_cast<CharT>('h'));\r\n    assert(sv.rend().base() == sv.begin());\r\n    assert(sv.rbegin().base() == sv.end());\r\n    reverse_iterator testRIterator = sv.rbegin() + 6;\r\n    assert(*testRIterator == static_cast<CharT>('o'));\r\n    testRIterator += 3;\r\n    assert(*testRIterator == static_cast<CharT>('e'));\r\n    testRIterator -= 9;\r\n    assert(*testRIterator == static_cast<CharT>('d'));\r\n    assert(*(testRIterator.operator->()) == static_cast<CharT>('d'));\r\n\r\n    ++testRIterator;\r\n    assert(*testRIterator == static_cast<CharT>('l'));\r\n    assert(*testRIterator++ == static_cast<CharT>('l'));\r\n    assert(*testRIterator == static_cast<CharT>('r'));\r\n    --testRIterator;\r\n    assert(*testRIterator == static_cast<CharT>('l'));\r\n    assert(*testRIterator-- == static_cast<CharT>('l'));\r\n    assert(*testRIterator == static_cast<CharT>('d'));\r\n\r\n    reverse_iterator revEq    = testRIterator;\r\n    reverse_iterator revAfter = testRIterator + 1;\r\n\r\n    assert(testRIterator == testRIterator);\r\n    assert(testRIterator == revEq);\r\n    assert(!(testRIterator == revAfter));\r\n    assert(!(revAfter == testRIterator));\r\n\r\n    assert(!(testRIterator != testRIterator));\r\n    assert(!(testRIterator != revEq));\r\n    assert(testRIterator != revAfter);\r\n    assert(revAfter != testRIterator);\r\n\r\n    assert(!(testRIterator < testRIterator));\r\n    assert(!(testRIterator < revEq));\r\n    assert(testRIterator < revAfter);\r\n    assert(!(revAfter < testRIterator));\r\n\r\n    assert(!(testRIterator > testRIterator));\r\n    assert(!(testRIterator > revEq));\r\n    assert(!(testRIterator > revAfter));\r\n    assert(revAfter > testRIterator);\r\n\r\n    assert(testRIterator <= testRIterator);\r\n    assert(testRIterator <= revEq);\r\n    assert(testRIterator <= revAfter);\r\n    assert(!(revAfter <= testRIterator));\r\n\r\n    assert(testRIterator >= testRIterator);\r\n    assert(testRIterator >= revEq);\r\n    assert(!(testRIterator >= revAfter));\r\n    assert(revAfter >= testRIterator);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class CharT, class Traits>\r\nconstexpr bool test_case_prefix() {\r\n    basic_string_view<CharT, Traits> sv(TYPED_LITERAL(CharT, \"hello world\"));\r\n    sv.remove_prefix(6);\r\n    assert((sv == basic_string_view<CharT, Traits>{TYPED_LITERAL(CharT, \"world\")}));\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class CharT, class Traits>\r\nconstexpr bool test_case_suffix() {\r\n    basic_string_view<CharT, Traits> sv(TYPED_LITERAL(CharT, \"hello world\"));\r\n    sv.remove_suffix(6);\r\n    assert((sv == basic_string_view<CharT, Traits>{TYPED_LITERAL(CharT, \"hello\")}));\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class CharT, class Traits>\r\nconstexpr bool test_case_swap() {\r\n    basic_string_view<CharT, Traits> a(TYPED_LITERAL(CharT, \"a\"));\r\n    basic_string_view<CharT, Traits> b(TYPED_LITERAL(CharT, \"b\"));\r\n    a.swap(b);\r\n    assert(a == TYPED_LITERAL(CharT, \"b\"));\r\n    assert(b == TYPED_LITERAL(CharT, \"a\"));\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_case_at_out_of_range() {\r\n    string_view sv(\"text\");\r\n    assert_throws<out_of_range>([&] { return sv.at(4); });\r\n}\r\n\r\nusing copy_buff_ty = char[5];\r\nconstexpr void fill_exclaim(copy_buff_ty& a) {\r\n    for (size_t idx = 0; idx < 5; ++idx) {\r\n        a[idx] = '!';\r\n    }\r\n}\r\n\r\nconstexpr bool copy_buff_eq(const copy_buff_ty& lhs, const copy_buff_ty& rhs) {\r\n    for (size_t idx = 0; idx < 5; ++idx) {\r\n        if (lhs[idx] != rhs[idx]) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Traits>\r\nconstexpr bool test_case_copy() {\r\n    basic_string_view<char, Traits> sv(\"text\");\r\n    copy_buff_ty buffer{};\r\n    fill_exclaim(buffer);\r\n    sv.copy(buffer, 5);\r\n    assert(copy_buff_eq(buffer, {'t', 'e', 'x', 't', '!'}));\r\n    fill_exclaim(buffer);\r\n    sv.copy(buffer, 5, 2);\r\n    assert(copy_buff_eq(buffer, {'x', 't', '!', '!', '!'}));\r\n    fill_exclaim(buffer);\r\n    sv.copy(buffer, 2);\r\n    assert(copy_buff_eq(buffer, {'t', 'e', '!', '!', '!'}));\r\n    fill_exclaim(buffer);\r\n    sv.copy(buffer, 1, 2);\r\n    assert(copy_buff_eq(buffer, {'x', '!', '!', '!', '!'}));\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_case_copy_out_of_range() {\r\n    string_view sv(\"text\");\r\n    copy_buff_ty buffer;\r\n    assert_throws<out_of_range>([&] { sv.copy(buffer, 4, 10); });\r\n}\r\n\r\ntemplate <class Traits>\r\nconstexpr bool test_case_Copy_s() {\r\n    // nonstandard secure CRT function, _Copy_s\r\n    // bounds check failure tested with the IDL checks\r\n    basic_string_view<char, Traits> sv(\"text\");\r\n    copy_buff_ty buffer{};\r\n    fill_exclaim(buffer);\r\n    sv._Copy_s(buffer, 5, 5);\r\n    assert(copy_buff_eq(buffer, {'t', 'e', 'x', 't', '!'}));\r\n    fill_exclaim(buffer);\r\n    sv._Copy_s(buffer, 5, 5, 2);\r\n    assert(copy_buff_eq(buffer, {'x', 't', '!', '!', '!'}));\r\n    fill_exclaim(buffer);\r\n    sv._Copy_s(buffer, 5, 2);\r\n    assert(copy_buff_eq(buffer, {'t', 'e', '!', '!', '!'}));\r\n    fill_exclaim(buffer);\r\n    sv._Copy_s(buffer, 5, 1, 2);\r\n    assert(copy_buff_eq(buffer, {'x', '!', '!', '!', '!'}));\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_case_Copy_s_out_of_range() {\r\n    string_view sv(\"text\");\r\n    copy_buff_ty buffer;\r\n    assert_throws<out_of_range>([&] { sv._Copy_s(buffer, 5, 4, 10); });\r\n}\r\n\r\ntemplate <class Traits>\r\nconstexpr bool test_case_substr() {\r\n    basic_string_view<char, Traits> sv(\"text\");\r\n\r\n    assert(sv.substr() == sv);\r\n    assert((sv.substr(2) == basic_string_view<char, Traits>{\"xt\"}));\r\n    assert((sv.substr(0, 2) == basic_string_view<char, Traits>{\"te\"}));\r\n    assert((sv.substr(1, 2) == basic_string_view<char, Traits>{\"ex\"}));\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_case_substr_out_of_range() {\r\n    assert_throws<out_of_range>([] { return string_view(\"text\").substr(5); });\r\n}\r\n\r\ntemplate <class CharT, class Traits>\r\nconstexpr bool test_case_compare() {\r\n    const auto npos = basic_string_view<CharT, Traits>::npos;\r\n    basic_string_view<CharT, Traits> rr(TYPED_LITERAL(CharT, \"rr\"));\r\n    basic_string_view<CharT, Traits> s4(TYPED_LITERAL(CharT, \"s4\"));\r\n    basic_string_view<CharT, Traits> s4s4(TYPED_LITERAL(CharT, \"s4s4\"));\r\n\r\n    assert(rr.compare(rr) == 0); // equal\r\n\r\n    assert(rr.compare(s4) < 0); // differ by contents only\r\n    assert(s4.compare(rr) > 0);\r\n\r\n    assert(s4.compare(s4s4) < 0); // differ by length only\r\n    assert(s4s4.compare(s4) > 0);\r\n\r\n    assert(rr.compare(1, 0, basic_string_view<CharT, Traits>{}) == 0);\r\n    assert(rr.compare(0, 1000, rr) == 0);\r\n    assert(s4s4.compare(2, 2, s4) == 0);\r\n    assert(s4s4.compare(2, 200, s4) == 0);\r\n\r\n    assert(rr.compare(0, npos, s4s4, 0, 2) < 0);\r\n    assert(s4.compare(0, npos, s4s4, 2, 2) == 0);\r\n    assert(s4.compare(0, npos, s4s4, 0, 2) == 0);\r\n    assert(s4.compare(0, npos, s4s4, 2, 1000) == 0);\r\n\r\n    assert(rr.compare(TYPED_LITERAL(CharT, \"rr\")) == 0);\r\n    assert(rr.compare(TYPED_LITERAL(CharT, \"s4\")) < 0);\r\n    assert(rr.compare(TYPED_LITERAL(CharT, \"s4s4\")) < 0);\r\n    assert(s4.compare(TYPED_LITERAL(CharT, \"s4\")) == 0);\r\n    assert(s4.compare(TYPED_LITERAL(CharT, \"rr\")) > 0);\r\n\r\n    assert(rr.compare(1, 0, TYPED_LITERAL(CharT, \"\")) == 0);\r\n    assert(rr.compare(1, 0, TYPED_LITERAL(CharT, \"rr\")) < 0);\r\n    assert(rr.compare(0, 1000, TYPED_LITERAL(CharT, \"rr\")) == 0);\r\n    assert(s4.compare(0, 2, TYPED_LITERAL(CharT, \"s4s4\")) < 0);\r\n    assert(s4s4.compare(2, 2, TYPED_LITERAL(CharT, \"s4\")) == 0);\r\n    assert(s4s4.compare(2, 200, TYPED_LITERAL(CharT, \"s4\")) == 0);\r\n    assert(s4s4.compare(1, 2, TYPED_LITERAL(CharT, \"s4\")) < 0);\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_case_compare_out_of_range() {\r\n    assert_throws<out_of_range>([] { return string_view{\"hi\"}.compare(10, 2, string_view{}); });\r\n    assert_throws<out_of_range>([] { return string_view{\"hi\"}.compare(10, 2, string_view{\"other\"}, 4, 2); });\r\n    assert_throws<out_of_range>([] { return string_view{\"hi\"}.compare(0, 2, string_view{\"other\"}, 6, 2); });\r\n    assert_throws<out_of_range>([] { return string_view{\"hi\"}.compare(3, 0, \"hello\"); });\r\n    assert_throws<out_of_range>([] { return string_view{\"hi\"}.compare(3, 0, \"hello\", 5); });\r\n}\r\n\r\n// P0457R2 starts_with()/ends_with() For basic_string/basic_string_view\r\n#if _HAS_CXX20\r\ntemplate <class CharT, class Traits, bool TestBasicString>\r\nconstexpr bool test_case_starts_with_ends_with() {\r\n    const basic_string_view<CharT, Traits> empty_sv(TYPED_LITERAL(CharT, \"\"));\r\n    const CharT null_c = '\\0';\r\n    const CharT* const empty_cp(TYPED_LITERAL(CharT, \"\"));\r\n\r\n    const basic_string_view<CharT, Traits> a(TYPED_LITERAL(CharT, \"a\"));\r\n    const CharT b = 'b';\r\n    const CharT* const c(TYPED_LITERAL(CharT, \"c\"));\r\n\r\n    const basic_string_view<CharT, Traits> moving_sv(TYPED_LITERAL(CharT, \"moving\"));\r\n    const CharT* const moving_cp(TYPED_LITERAL(CharT, \"moving\"));\r\n\r\n    if constexpr (TestBasicString) {\r\n        basic_string<CharT, Traits> text(TYPED_LITERAL(CharT, \"text\"));\r\n        basic_string<CharT, Traits> empty_text(TYPED_LITERAL(CharT, \"\"));\r\n\r\n        const basic_string_view<CharT, Traits> te(TYPED_LITERAL(CharT, \"te\"));\r\n        const CharT t = 't';\r\n        const CharT* const tex(TYPED_LITERAL(CharT, \"tex\"));\r\n        const basic_string_view<CharT, Traits> text_sv(TYPED_LITERAL(CharT, \"text\"));\r\n        const CharT* const text_cp(TYPED_LITERAL(CharT, \"text\"));\r\n        const basic_string_view<CharT, Traits> next_sv(TYPED_LITERAL(CharT, \"next\"));\r\n        const CharT* const next_cp(TYPED_LITERAL(CharT, \"next\"));\r\n        const basic_string_view<CharT, Traits> texture_sv(TYPED_LITERAL(CharT, \"texture\"));\r\n        const CharT* const texture_cp(TYPED_LITERAL(CharT, \"texture\"));\r\n\r\n        assert(text.starts_with(te));\r\n        assert(text.starts_with(t));\r\n        assert(text.starts_with(tex));\r\n        assert(text.starts_with(text));\r\n        assert(text.starts_with(text_sv));\r\n        assert(text.starts_with(text_cp));\r\n        assert(!text.starts_with(next_sv));\r\n        assert(!text.starts_with(next_cp));\r\n        assert(!text.starts_with(texture_sv));\r\n        assert(!text.starts_with(texture_cp));\r\n        assert(text.starts_with(empty_sv));\r\n        assert(!text.starts_with(null_c));\r\n        assert(text.starts_with(empty_cp));\r\n        assert(!text.starts_with(a));\r\n        assert(!text.starts_with(b));\r\n        assert(!text.starts_with(c));\r\n\r\n        assert(!empty_text.starts_with(te));\r\n        assert(!empty_text.starts_with(t));\r\n        assert(!empty_text.starts_with(tex));\r\n        assert(empty_text.starts_with(empty_text));\r\n        assert(empty_text.starts_with(empty_sv));\r\n        assert(!empty_text.starts_with(null_c));\r\n        assert(empty_text.starts_with(empty_cp));\r\n\r\n        const basic_string_view<CharT, Traits> xt(TYPED_LITERAL(CharT, \"xt\"));\r\n        const CharT* const ext(TYPED_LITERAL(CharT, \"ext\"));\r\n        const basic_string_view<CharT, Traits> context_sv(TYPED_LITERAL(CharT, \"context\"));\r\n        const CharT* const context_cp(TYPED_LITERAL(CharT, \"context\"));\r\n\r\n        assert(text.ends_with(xt));\r\n        assert(text.ends_with(t));\r\n        assert(text.ends_with(ext));\r\n        assert(text.ends_with(text));\r\n        assert(text.ends_with(text_sv));\r\n        assert(text.ends_with(text_cp));\r\n        assert(!text.ends_with(next_sv));\r\n        assert(!text.ends_with(next_cp));\r\n        assert(!text.ends_with(context_sv));\r\n        assert(!text.ends_with(context_cp));\r\n        assert(text.ends_with(empty_sv));\r\n        assert(!text.ends_with(null_c));\r\n        assert(text.ends_with(empty_cp));\r\n        assert(!text.ends_with(a));\r\n        assert(!text.ends_with(b));\r\n        assert(!text.ends_with(c));\r\n\r\n        assert(!empty_text.ends_with(xt));\r\n        assert(!empty_text.ends_with(t));\r\n        assert(!empty_text.ends_with(ext));\r\n        assert(empty_text.starts_with(empty_text));\r\n        assert(empty_text.ends_with(empty_sv));\r\n        assert(!empty_text.ends_with(null_c));\r\n        assert(empty_text.ends_with(empty_cp));\r\n\r\n        basic_string<CharT, Traits> rocking(TYPED_LITERAL(CharT, \"rocking\"));\r\n\r\n        const basic_string_view<CharT, Traits> rocket_sv(TYPED_LITERAL(CharT, \"rocket\"));\r\n        const CharT* const rocket_cp(TYPED_LITERAL(CharT, \"rocket\"));\r\n\r\n        assert(!rocking.starts_with(rocket_sv));\r\n        assert(!rocking.starts_with(rocket_cp));\r\n\r\n        assert(!rocking.ends_with(moving_sv));\r\n        assert(!rocking.ends_with(moving_cp));\r\n    }\r\n\r\n    const basic_string_view<CharT, Traits> hello(TYPED_LITERAL(CharT, \"hello\"));\r\n\r\n    const basic_string_view<CharT, Traits> he(TYPED_LITERAL(CharT, \"he\"));\r\n    const CharT h = 'h';\r\n    const CharT* const hel(TYPED_LITERAL(CharT, \"hel\"));\r\n    const basic_string_view<CharT, Traits> hello_sv(TYPED_LITERAL(CharT, \"hello\"));\r\n    const CharT* const hello_cp(TYPED_LITERAL(CharT, \"hello\"));\r\n    const basic_string_view<CharT, Traits> cello_sv(TYPED_LITERAL(CharT, \"cello\"));\r\n    const CharT* const cello_cp(TYPED_LITERAL(CharT, \"cello\"));\r\n    const basic_string_view<CharT, Traits> helloworld_sv(TYPED_LITERAL(CharT, \"helloworld\"));\r\n    const CharT* const helloworld_cp(TYPED_LITERAL(CharT, \"helloworld\"));\r\n\r\n    assert(hello.starts_with(he));\r\n    assert(hello.starts_with(h));\r\n    assert(hello.starts_with(hel));\r\n    assert(hello.starts_with(hello));\r\n    assert(hello.starts_with(hello_sv));\r\n    assert(hello.starts_with(hello_cp));\r\n    assert(!hello.starts_with(cello_sv));\r\n    assert(!hello.starts_with(cello_cp));\r\n    assert(!hello.starts_with(helloworld_sv));\r\n    assert(!hello.starts_with(helloworld_cp));\r\n    assert(hello.starts_with(empty_sv));\r\n    assert(!hello.starts_with(null_c));\r\n    assert(hello.starts_with(empty_cp));\r\n    assert(!hello.starts_with(a));\r\n    assert(!hello.starts_with(b));\r\n    assert(!hello.starts_with(c));\r\n\r\n    assert(!empty_sv.starts_with(he));\r\n    assert(!empty_sv.starts_with(h));\r\n    assert(!empty_sv.starts_with(hel));\r\n    assert(empty_sv.starts_with(empty_sv));\r\n    assert(!empty_sv.starts_with(null_c));\r\n    assert(empty_sv.starts_with(empty_cp));\r\n\r\n    const basic_string_view<CharT, Traits> lo(TYPED_LITERAL(CharT, \"lo\"));\r\n    const CharT o = 'o';\r\n    const CharT* const llo(TYPED_LITERAL(CharT, \"llo\"));\r\n    const basic_string_view<CharT, Traits> worldhello_sv(TYPED_LITERAL(CharT, \"worldhello\"));\r\n    const CharT* const worldhello_cp(TYPED_LITERAL(CharT, \"worldhello\"));\r\n\r\n    assert(hello.ends_with(lo));\r\n    assert(hello.ends_with(o));\r\n    assert(hello.ends_with(llo));\r\n    assert(hello.ends_with(hello));\r\n    assert(hello.ends_with(hello_sv));\r\n    assert(hello.ends_with(hello_cp));\r\n    assert(!hello.ends_with(cello_sv));\r\n    assert(!hello.ends_with(cello_cp));\r\n    assert(!hello.ends_with(worldhello_sv));\r\n    assert(!hello.ends_with(worldhello_cp));\r\n    assert(hello.ends_with(empty_sv));\r\n    assert(!hello.ends_with(null_c));\r\n    assert(hello.ends_with(empty_cp));\r\n    assert(!hello.ends_with(a));\r\n    assert(!hello.ends_with(b));\r\n    assert(!hello.ends_with(c));\r\n\r\n    assert(!empty_sv.ends_with(lo));\r\n    assert(!empty_sv.ends_with(o));\r\n    assert(!empty_sv.ends_with(llo));\r\n    assert(empty_sv.ends_with(empty_sv));\r\n    assert(!empty_sv.ends_with(null_c));\r\n    assert(empty_sv.ends_with(empty_cp));\r\n\r\n    const basic_string_view<CharT, Traits> playing(TYPED_LITERAL(CharT, \"playing\"));\r\n\r\n    const basic_string_view<CharT, Traits> player_sv(TYPED_LITERAL(CharT, \"player\"));\r\n    const CharT* const player_cp(TYPED_LITERAL(CharT, \"player\"));\r\n\r\n    assert(!playing.starts_with(player_sv));\r\n    assert(!playing.starts_with(player_cp));\r\n\r\n    assert(!playing.ends_with(moving_sv));\r\n    assert(!playing.ends_with(moving_cp));\r\n\r\n    return true;\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n// P1679R3 contains() For basic_string/basic_string_view\r\n#if _HAS_CXX23\r\ntemplate <class CharT, class Traits, bool TestBasicString>\r\nconstexpr bool test_case_contains() {\r\n    const basic_string_view<CharT, Traits> empty_sv(TYPED_LITERAL(CharT, \"\"));\r\n    const CharT null_c = '\\0';\r\n    const CharT* const empty_cp(TYPED_LITERAL(CharT, \"\"));\r\n\r\n    const basic_string_view<CharT, Traits> a(TYPED_LITERAL(CharT, \"a\"));\r\n    const CharT b = 'b';\r\n    const CharT* const c(TYPED_LITERAL(CharT, \"c\"));\r\n\r\n    if constexpr (TestBasicString) {\r\n        basic_string<CharT, Traits> text(TYPED_LITERAL(CharT, \"text\"));\r\n        basic_string<CharT, Traits> empty_text(TYPED_LITERAL(CharT, \"\"));\r\n\r\n        const basic_string_view<CharT, Traits> te(TYPED_LITERAL(CharT, \"te\"));\r\n        const CharT x = 'x';\r\n        const CharT* const ext(TYPED_LITERAL(CharT, \"ext\"));\r\n        const basic_string_view<CharT, Traits> text_sv(TYPED_LITERAL(CharT, \"text\"));\r\n        const CharT* const text_cp(TYPED_LITERAL(CharT, \"text\"));\r\n        const basic_string_view<CharT, Traits> next_sv(TYPED_LITERAL(CharT, \"next\"));\r\n        const CharT* const next_cp(TYPED_LITERAL(CharT, \"next\"));\r\n        const basic_string_view<CharT, Traits> texture_sv(TYPED_LITERAL(CharT, \"texture\"));\r\n        const CharT* const texture_cp(TYPED_LITERAL(CharT, \"texture\"));\r\n\r\n        assert(text.contains(te));\r\n        assert(text.contains(x));\r\n        assert(text.contains(ext));\r\n        assert(text.contains(text));\r\n        assert(text.contains(text_sv));\r\n        assert(text.contains(text_cp));\r\n        assert(!text.contains(next_sv));\r\n        assert(!text.contains(next_cp));\r\n        assert(!text.contains(texture_sv));\r\n        assert(!text.contains(texture_cp));\r\n        assert(text.contains(empty_sv));\r\n        assert(!text.contains(null_c));\r\n        assert(text.contains(empty_cp));\r\n        assert(!text.contains(a));\r\n        assert(!text.contains(b));\r\n        assert(!text.contains(c));\r\n\r\n        assert(!empty_text.contains(te));\r\n        assert(!empty_text.contains(x));\r\n        assert(!empty_text.contains(ext));\r\n        assert(empty_text.contains(empty_text));\r\n        assert(empty_text.contains(empty_sv));\r\n        assert(!empty_text.contains(null_c));\r\n        assert(empty_text.contains(empty_cp));\r\n\r\n        basic_string<CharT, Traits> rocking(TYPED_LITERAL(CharT, \"rocking\"));\r\n\r\n        const basic_string_view<CharT, Traits> rocket_sv(TYPED_LITERAL(CharT, \"rocket\"));\r\n        const CharT* const rocket_cp(TYPED_LITERAL(CharT, \"rocket\"));\r\n\r\n        assert(!rocking.contains(rocket_sv));\r\n        assert(!rocking.contains(rocket_cp));\r\n    }\r\n\r\n    const basic_string_view<CharT, Traits> hello(TYPED_LITERAL(CharT, \"hello\"));\r\n\r\n    const basic_string_view<CharT, Traits> he(TYPED_LITERAL(CharT, \"he\"));\r\n    const CharT e = 'e';\r\n    const CharT* const llo(TYPED_LITERAL(CharT, \"llo\"));\r\n    const basic_string_view<CharT, Traits> hello_sv(TYPED_LITERAL(CharT, \"hello\"));\r\n    const CharT* const hello_cp(TYPED_LITERAL(CharT, \"hello\"));\r\n    const basic_string_view<CharT, Traits> cello_sv(TYPED_LITERAL(CharT, \"cello\"));\r\n    const CharT* const cello_cp(TYPED_LITERAL(CharT, \"cello\"));\r\n    const basic_string_view<CharT, Traits> helloworld_sv(TYPED_LITERAL(CharT, \"helloworld\"));\r\n    const CharT* const helloworld_cp(TYPED_LITERAL(CharT, \"helloworld\"));\r\n\r\n    assert(hello.contains(he));\r\n    assert(hello.contains(e));\r\n    assert(hello.contains(llo));\r\n    assert(hello.contains(hello));\r\n    assert(hello.contains(hello_sv));\r\n    assert(hello.contains(hello_cp));\r\n    assert(!hello.contains(cello_sv));\r\n    assert(!hello.contains(cello_cp));\r\n    assert(!hello.contains(helloworld_sv));\r\n    assert(!hello.contains(helloworld_cp));\r\n    assert(hello.contains(empty_sv));\r\n    assert(!hello.contains(null_c));\r\n    assert(hello.contains(empty_cp));\r\n    assert(!hello.contains(a));\r\n    assert(!hello.contains(b));\r\n    assert(!hello.contains(c));\r\n\r\n    assert(!empty_sv.contains(he));\r\n    assert(!empty_sv.contains(e));\r\n    assert(!empty_sv.contains(llo));\r\n    assert(empty_sv.contains(empty_sv));\r\n    assert(!empty_sv.contains(null_c));\r\n    assert(empty_sv.contains(empty_cp));\r\n\r\n    const basic_string_view<CharT, Traits> playing(TYPED_LITERAL(CharT, \"playing\"));\r\n\r\n    const basic_string_view<CharT, Traits> player_sv(TYPED_LITERAL(CharT, \"player\"));\r\n    const CharT* const player_cp(TYPED_LITERAL(CharT, \"player\"));\r\n\r\n    assert(!playing.contains(player_sv));\r\n    assert(!playing.contains(player_cp));\r\n\r\n    return true;\r\n}\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <typename CharT, typename Traits>\r\nconstexpr bool test_case_find() {\r\n    basic_string_view<CharT, Traits> aaa(TYPED_LITERAL(CharT, \"aaa\"));\r\n    basic_string_view<CharT, Traits> s4(TYPED_LITERAL(CharT, \"s4\"));\r\n    basic_string_view<CharT, Traits> s4s4(TYPED_LITERAL(CharT, \"s4s4\"));\r\n    basic_string_view<CharT, Traits> sssss4(TYPED_LITERAL(CharT, \"sssss4\"));\r\n    basic_string_view<CharT, Traits> s5(TYPED_LITERAL(CharT, \"s5\"));\r\n\r\n    basic_string_view<CharT, Traits> embeddedNullsHaystack(TYPED_LITERAL(CharT, \"za\\0bz\"), 5);\r\n    basic_string_view<CharT, Traits> embeddedNullsNeedle(TYPED_LITERAL(CharT, \"a\\0b\"), 3);\r\n\r\n    const auto npos = basic_string_view<CharT, Traits>::npos;\r\n\r\n\r\n    assert(s4s4.find(s4) == 0);\r\n    assert(s4s4.find(s4, 1) == 2);\r\n    assert(s4s4.find(s4, 3) == npos);\r\n    assert(s4s4.find(TYPED_LITERAL(CharT, \"s4\")) == 0);\r\n    assert(s4s4.find(TYPED_LITERAL(CharT, \"s4\"), 3) == npos); // _Start_at > _Size - _Count\r\n    assert(s4s4.find(TYPED_LITERAL(CharT, \"s4XX\"), 1, 2) == 2);\r\n    assert(s4s4.find(TYPED_LITERAL(CharT, \"\"), 2) == 2); // empty string always matches\r\n    assert(s4s4.find(TYPED_LITERAL(CharT, \"\"), 4) == 4); // even at the end\r\n    assert(s4s4.find(TYPED_LITERAL(CharT, \"\"), 5) == npos); // but not off the end\r\n    assert(s4.find(TYPED_LITERAL(CharT, \"s4XX\")) == npos); // _Count > _Size\r\n    assert(s4s4.find(static_cast<CharT>('s')) == 0);\r\n    assert(s4s4.find(static_cast<CharT>('s'), 1) == 2);\r\n    assert(s4s4.find(static_cast<CharT>('x')) == npos);\r\n    assert(sssss4.find(s4) == 4);\r\n    assert(embeddedNullsHaystack.find(embeddedNullsNeedle) == 1);\r\n\r\n    assert(s4s4.rfind(s4) == 2);\r\n    assert(s4s4.rfind(s4, 1) == 0);\r\n    assert(s4s4.rfind(s5, 3) == npos);\r\n    assert(s4s4.rfind(TYPED_LITERAL(CharT, \"s4\")) == 2);\r\n    assert(s4s4.rfind(TYPED_LITERAL(CharT, \"s4\"), 3) == 2);\r\n    assert(s4s4.rfind(TYPED_LITERAL(CharT, \"s4XX\"), 1, 3) == npos);\r\n    assert(s4s4.rfind(static_cast<CharT>('s')) == 2);\r\n    assert(s4s4.rfind(static_cast<CharT>('s'), 2) == 2);\r\n    assert(s4s4.rfind(static_cast<CharT>('x')) == npos);\r\n\r\n    assert(s4s4.find_first_of(s4) == 0);\r\n    assert(s4s4.find_first_of(s4, 1) == 1);\r\n    assert(s4s4.find_first_of(s4, 4) == npos);\r\n    assert(s4s4.find_first_of(TYPED_LITERAL(CharT, \"s4\")) == 0);\r\n    assert(s4s4.find_first_of(TYPED_LITERAL(CharT, \"s4\"), 3) == 3);\r\n    assert(s4s4.find_first_of(TYPED_LITERAL(CharT, \"abs\"), 1, 2) == npos);\r\n    assert(s4s4.find_first_of(static_cast<CharT>('s')) == 0);\r\n    assert(s4s4.find_first_of(static_cast<CharT>('s'), 1) == 2);\r\n    assert(s4s4.find_first_of(static_cast<CharT>('x')) == npos);\r\n\r\n    assert(s4s4.find_last_of(s4) == 3);\r\n    assert(s4s4.find_last_of(s4, 1) == 1);\r\n    assert(s4s4.find_last_of(aaa) == npos);\r\n    assert(s4s4.find_last_of(TYPED_LITERAL(CharT, \"s4\")) == 3);\r\n    assert(s4s4.find_last_of(TYPED_LITERAL(CharT, \"s4\"), 2) == 2);\r\n    assert(s4s4.find_last_of(TYPED_LITERAL(CharT, \"abs\"), 1, 2) == npos);\r\n    assert(s4s4.find_last_of(static_cast<CharT>('s')) == 2);\r\n    assert(s4s4.find_last_of(static_cast<CharT>('s'), 1) == 0);\r\n    assert(s4s4.find_last_of(static_cast<CharT>('x')) == npos);\r\n\r\n    assert(s4s4.find_first_not_of(s5) == 1);\r\n    assert(s4s4.find_first_not_of(s5, 2) == 3);\r\n    assert(s4s4.find_first_not_of(s4) == npos);\r\n    assert(s4s4.find_first_not_of(TYPED_LITERAL(CharT, \"s5\")) == 1);\r\n    assert(s4s4.find_first_not_of(TYPED_LITERAL(CharT, \"s5\"), 2) == 3);\r\n    assert(s4s4.find_first_not_of(TYPED_LITERAL(CharT, \"s4a\"), 1, 2) == npos);\r\n    assert(s4s4.find_first_not_of(static_cast<CharT>('s')) == 1);\r\n    assert(s4s4.find_first_not_of(static_cast<CharT>('s'), 2) == 3);\r\n    assert(s4s4.find_first_not_of(static_cast<CharT>('s'), 4) == npos);\r\n\r\n    assert(s4s4.find_last_not_of(s5) == 3);\r\n    assert(s4s4.find_last_not_of(s5, 2) == 1);\r\n    assert(s4s4.find_last_not_of(s4) == npos);\r\n    assert(s4s4.find_last_not_of(TYPED_LITERAL(CharT, \"s5\")) == 3);\r\n    assert(s4s4.find_last_not_of(TYPED_LITERAL(CharT, \"s5\"), 2) == 1);\r\n    assert(s4s4.find_last_not_of(TYPED_LITERAL(CharT, \"s4a\"), 1, 2) == npos);\r\n    assert(s4s4.find_last_not_of(static_cast<CharT>('s')) == 3);\r\n    assert(s4s4.find_last_not_of(static_cast<CharT>('s'), 2) == 1);\r\n    assert(s4s4.find_last_not_of(static_cast<CharT>('s'), 0) == npos);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class CharT, class Traits>\r\nconstexpr bool test_case_operators() {\r\n    basic_string_view<CharT, Traits> rr(TYPED_LITERAL(CharT, \"rr\"));\r\n    basic_string_view<CharT, Traits> s4(TYPED_LITERAL(CharT, \"s4\"));\r\n    basic_string_view<CharT, Traits> cpy(s4);\r\n\r\n    assert(s4 == cpy);\r\n    assert(cpy == s4);\r\n    assert(!(s4 == rr));\r\n    assert(!(rr == s4));\r\n    assert(TYPED_LITERAL(CharT, \"s4\") == s4); // converting operator left\r\n    assert(!(TYPED_LITERAL(CharT, \"rr\") == s4));\r\n    assert(s4 == TYPED_LITERAL(CharT, \"s4\")); // converting operator right\r\n    assert(!(s4 == TYPED_LITERAL(CharT, \"s4s4\")));\r\n\r\n    assert(!(s4 != cpy));\r\n    assert(!(cpy != s4));\r\n    assert(s4 != rr);\r\n    assert(rr != s4);\r\n    assert(!(TYPED_LITERAL(CharT, \"s4\") != s4));\r\n    assert(TYPED_LITERAL(CharT, \"rr\") != s4);\r\n    assert(!(s4 != TYPED_LITERAL(CharT, \"s4\")));\r\n    assert(s4 != TYPED_LITERAL(CharT, \"s4s4\"));\r\n\r\n    assert(!(s4 < cpy));\r\n    assert(!(cpy < s4));\r\n    assert(!(s4 < rr));\r\n    assert(rr < s4);\r\n    assert(!(TYPED_LITERAL(CharT, \"s4\") < s4));\r\n    assert(!(s4 < TYPED_LITERAL(CharT, \"s4\")));\r\n    assert(s4 < TYPED_LITERAL(CharT, \"s4s4\"));\r\n\r\n    assert(!(s4 > cpy));\r\n    assert(!(cpy > s4));\r\n    assert(s4 > rr);\r\n    assert(!(rr > s4));\r\n    assert(!(TYPED_LITERAL(CharT, \"s4\") > s4));\r\n    assert(!(s4 > TYPED_LITERAL(CharT, \"s4\")));\r\n    assert(!(s4 > TYPED_LITERAL(CharT, \"s4s4\")));\r\n\r\n    assert(s4 <= cpy);\r\n    assert(cpy <= s4);\r\n    assert(!(s4 <= rr));\r\n    assert(rr <= s4);\r\n    assert(TYPED_LITERAL(CharT, \"s4\") <= s4);\r\n    assert(s4 <= TYPED_LITERAL(CharT, \"s4\"));\r\n    assert(s4 <= TYPED_LITERAL(CharT, \"s4s4\"));\r\n\r\n    assert(s4 >= cpy);\r\n    assert(cpy >= s4);\r\n    assert(s4 >= rr);\r\n    assert(!(rr >= s4));\r\n    assert(TYPED_LITERAL(CharT, \"s4\") >= s4);\r\n    assert(s4 >= TYPED_LITERAL(CharT, \"s4\"));\r\n    assert(!(s4 >= TYPED_LITERAL(CharT, \"s4s4\")));\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_case_inserter() {\r\n    ostringstream oss;\r\n    string_view sv(\"text\");\r\n    oss << sv;\r\n    assert(oss.str() == \"text\");\r\n}\r\n\r\nvoid test_case_hashing() {\r\n    string str(\"hungry EVIL zombies\");\r\n    string_view strView(str);\r\n    assert(hash<string>{}(str) == hash<string_view>{}(strView));\r\n}\r\n\r\nvoid test_case_string_integration() {\r\n    string_view svText(\"text\");\r\n\r\n    string testStr(svText);\r\n    assert(testStr == \"text\");\r\n\r\n    string_view hello(\"hello\");\r\n    testStr = hello;\r\n    assert(testStr == \"hello\");\r\n\r\n    testStr += svText;\r\n    assert(testStr == \"hellotext\");\r\n\r\n    testStr.append(svText);\r\n    assert(testStr == \"hellotexttext\");\r\n\r\n    assert_throws<out_of_range>([&] { testStr.append(svText, 5, 0); });\r\n    testStr.append(svText, 2, 10);\r\n    assert(testStr == \"hellotexttextxt\");\r\n\r\n    testStr.assign(hello);\r\n    assert(testStr == \"hello\");\r\n\r\n    assert_throws<out_of_range>([&] { testStr.assign(hello, 6, 0); });\r\n    assert(testStr == \"hello\");\r\n    testStr.assign(hello, 1, 2);\r\n    assert(testStr == \"el\");\r\n\r\n    assert_throws<out_of_range>([&] { testStr.insert(3, svText); });\r\n    assert(testStr == \"el\");\r\n    testStr.insert(1, hello);\r\n    assert(testStr == \"ehellol\");\r\n    assert_throws<out_of_range>([&] { testStr.insert(8, svText, 0, 0); });\r\n    assert_throws<out_of_range>([&] { testStr.insert(0, svText, 5, 0); });\r\n    assert(testStr == \"ehellol\");\r\n    testStr.insert(4, svText, 1, 2);\r\n    assert(testStr == \"ehelexlol\");\r\n\r\n    assert_throws<out_of_range>([&] { testStr.replace(10, 0, svText); });\r\n    assert(testStr == \"ehelexlol\");\r\n    testStr.replace(1, 7, svText);\r\n    assert(testStr == \"etextl\");\r\n    assert_throws<out_of_range>([&] { testStr.replace(7, 0, svText, 0, 0); });\r\n    assert(testStr == \"etextl\");\r\n    assert_throws<out_of_range>([&] { testStr.replace(6, 0, svText, 5, 0); });\r\n    assert(testStr == \"etextl\");\r\n    testStr.replace(6, 0, svText, 1, 3);\r\n    assert(testStr == \"etextlext\");\r\n\r\n    testStr.replace(testStr.begin() + 1, testStr.end() - 1, svText);\r\n    assert(testStr == \"etextt\");\r\n\r\n    auto implicit_conversion = [](string_view converted) { assert(converted == \"etextt\"); };\r\n    implicit_conversion(testStr);\r\n\r\n    assert(testStr.find(string_view{\"xt\"}) == 3);\r\n    assert(testStr.rfind(string_view{\"e\"}) == 2);\r\n    assert(testStr.find_first_of(string_view{\"xt\"}) == 1);\r\n    assert(testStr.find_last_of(string_view{\"te\"}) == 5);\r\n    assert(testStr.find_first_not_of(string_view{\"te\"}) == 3);\r\n    assert(testStr.find_last_not_of(string_view{\"tx\"}) == 2);\r\n\r\n    assert(testStr.compare(string_view{\"etextt\"}) == 0);\r\n    assert(testStr.compare(string_view{\"etext\"}) > 0);\r\n    assert(testStr.compare(string_view{\"etextta\"}) < 0);\r\n    assert(testStr.compare(string_view{\"dtextt\"}) > 0);\r\n\r\n    assert(testStr.compare(2, 3, string_view{\"ext\"}) == 0);\r\n    assert(testStr.compare(2, 3, string_view{\"text\"}) < 0);\r\n\r\n    assert(testStr.compare(1, 3, string_view{\"XXtex\"}, 2) == 0);\r\n    assert(testStr.compare(1, 2, string_view{\"XXtex\"}, 2, 2) == 0);\r\n}\r\n\r\nstatic_assert(c_string_view{\"abcd\"} == c_string_view{\"abcd\"});\r\nstatic_assert(c_string_view{\"abcd\"} == \"abcd\");\r\n\r\nstatic_assert(test_case_default_constructor());\r\nstatic_assert(test_case_ntcts_constructor<constexpr_char_traits>());\r\nstatic_assert(test_case_buffer_constructor());\r\nstatic_assert(test_case_contiguous_constructor());\r\nstatic_assert(test_case_range_constructor());\r\nstatic_assert(test_case_iterators<char, constexpr_char_traits>());\r\nstatic_assert(test_case_prefix<char, constexpr_char_traits>());\r\nstatic_assert(test_case_suffix<char, constexpr_char_traits>());\r\nstatic_assert(test_case_swap<char, constexpr_char_traits>());\r\nstatic_assert(test_case_substr<constexpr_char_traits>());\r\nstatic_assert(test_case_compare<char, constexpr_char_traits>());\r\n#if _HAS_CXX20\r\nstatic_assert(test_case_copy<constexpr_char_traits>());\r\nstatic_assert(test_case_Copy_s<constexpr_char_traits>());\r\nstatic_assert(test_case_starts_with_ends_with<char, constexpr_char_traits, false>());\r\n#endif // _HAS_CXX20\r\n#if _HAS_CXX23\r\nstatic_assert(test_case_contains<char, constexpr_char_traits, false>());\r\n#endif // _HAS_CXX23\r\nstatic_assert(test_case_operators<char, constexpr_char_traits>());\r\nstatic_assert(test_case_find<char, constexpr_char_traits>());\r\n\r\nstatic_assert(string_view{}.max_size() == ptrdiff_max);\r\n#ifdef __cpp_lib_char8_t\r\nstatic_assert(u8string_view{}.max_size() == ptrdiff_max);\r\n#endif // __cpp_lib_char8_t\r\nstatic_assert(u16string_view{}.max_size() == ptrdiff_max);\r\nstatic_assert(u32string_view{}.max_size() == static_cast<size_t>(-1) / sizeof(char32_t));\r\nstatic_assert(wstring_view{}.max_size() == ptrdiff_max);\r\n\r\n// P0403R1 UDLs For <string_view> (\"meow\"sv, etc.)\r\nstatic_assert(\"abc\"sv[1] == 'b');\r\nstatic_assert(noexcept(\"abc\"sv));\r\nstatic_assert(L\"abc\"sv[1] == L'b');\r\nstatic_assert(noexcept(L\"abc\"sv));\r\nstatic_assert(u\"abc\"sv[1] == u'b');\r\nstatic_assert(noexcept(u\"abc\"sv));\r\nstatic_assert(U\"abc\"sv[1] == U'b');\r\nstatic_assert(noexcept(U\"abc\"sv));\r\n#ifdef __cpp_char8_t\r\nstatic_assert(u8\"abc\"sv[1] == u8'b');\r\nstatic_assert(noexcept(u8\"abc\"sv));\r\n#endif // __cpp_char8_t\r\n\r\n// P2166R1 Prohibiting basic_string And basic_string_view Construction From nullptr\r\n#if _HAS_CXX23\r\nstatic_assert(!is_constructible_v<string_view, nullptr_t>);\r\nstatic_assert(!is_constructible_v<string, nullptr_t>);\r\nstatic_assert(!is_assignable_v<string&, nullptr_t>);\r\n#endif // _HAS_CXX23\r\n\r\n// Also test that basic_string_view produces no C6510 warning\r\n// when instantiated with custom character types.\r\n// GH-5563: Extend coverage to basic_string\r\nstruct char_wrapper {\r\n    char c;\r\n};\r\n\r\ntemplate <>\r\nstruct std::char_traits<char_wrapper> {\r\n    using char_type  = char_wrapper;\r\n    using int_type   = int;\r\n    using pos_type   = char_traits<char>::pos_type;\r\n    using off_type   = char_traits<char>::off_type;\r\n    using state_type = char_traits<char>::state_type;\r\n\r\n    static bool eq(char_wrapper lhs, char_wrapper rhs) {\r\n        return lhs.c == rhs.c;\r\n    }\r\n\r\n    static size_t length(const char_wrapper* a) {\r\n        static_assert(sizeof(char_wrapper) == 1);\r\n        return strlen(reinterpret_cast<const char*>(a));\r\n    }\r\n\r\n    static char_wrapper* copy(char_wrapper* const first1, const char_wrapper* const first2, const size_t count) {\r\n        copy_n(first2, count, first1);\r\n        return first1;\r\n    }\r\n\r\n    static char_wrapper* move(char_wrapper* const first1, const char_wrapper* const first2, const size_t count) {\r\n        memmove(first1, first2, count * sizeof(char_wrapper));\r\n        return first1;\r\n    }\r\n\r\n    static int compare(const char_wrapper* lhs, const char_wrapper* rhs, size_t count) {\r\n        return char_traits<char>::compare(\r\n            reinterpret_cast<const char*>(lhs), reinterpret_cast<const char*>(rhs), count);\r\n    }\r\n\r\n    static const char_wrapper* find(const char_wrapper* first, size_t count, const char_wrapper& ch) {\r\n        for (; 0 < count; --count, ++first) {\r\n            if (eq(*first, ch)) {\r\n                return first;\r\n            }\r\n        }\r\n\r\n        return nullptr;\r\n    }\r\n\r\n    static char_wrapper* assign(char_wrapper* const first, size_t count, const char_wrapper ch) {\r\n        for (char_wrapper* next = first; count > 0; --count, ++next) {\r\n            *next = ch;\r\n        }\r\n\r\n        return first;\r\n    }\r\n\r\n    static void assign(char_wrapper& left, const char_wrapper& right) {\r\n        left = right;\r\n    }\r\n\r\n    static bool lt(const char_wrapper left, const char_wrapper right) {\r\n        return char_traits<char>::lt(left.c, right.c);\r\n    }\r\n\r\n    static char_wrapper to_char_type(const int_type meta) {\r\n        return {char_traits<char>::to_char_type(meta)};\r\n    }\r\n\r\n    static int_type to_int_type(const char_wrapper ch) {\r\n        return char_traits<char>::to_int_type(ch.c);\r\n    }\r\n\r\n    static bool eq_int_type(const int_type left, const int_type right) {\r\n        return char_traits<char>::eq_int_type(left, right);\r\n    }\r\n\r\n    static int_type not_eof(const int_type meta) {\r\n        return char_traits<char>::not_eof(meta);\r\n    }\r\n\r\n    static int_type eof() {\r\n        return char_traits<char>::eof();\r\n    }\r\n};\r\n\r\nvoid test_C6510_warning() { // compile-only\r\n    char_wrapper a[] = {{'a'}, {'b'}, {'c'}, {'\\0'}};\r\n    basic_string_view<char_wrapper> sv(a);\r\n    (void) sv;\r\n\r\n    // GH-5563: Extend test coverage to basic_string\r\n    basic_string<char_wrapper> s(a);\r\n    (void) s;\r\n}\r\n\r\n#if _HAS_CXX20\r\n// LWG-3950 \"std::basic_string_view comparison operators are overspecified\"\r\nnamespace test_lwg_3950 {\r\n    template <class Traits>\r\n    struct get_string_comparison_category {\r\n        using type = weak_ordering;\r\n    };\r\n\r\n    template <class Traits>\r\n        requires requires { typename Traits::comparison_category; }\r\n    struct get_string_comparison_category<Traits> {\r\n        using type = Traits::comparison_category;\r\n\r\n        static_assert(disjunction_v<is_same<type, partial_ordering>, is_same<type, weak_ordering>,\r\n            is_same<type, strong_ordering>>);\r\n    };\r\n\r\n    template <class Traits>\r\n    using get_string_comparison_category_t = get_string_comparison_category<Traits>::type;\r\n\r\n    template <class Traits>\r\n    concept characterized_traits = requires { typename Traits::is_characterized; };\r\n\r\n    template <class CharT, characterized_traits Traits>\r\n    constexpr bool operator==(\r\n        basic_string_view<CharT, Traits> x, type_identity_t<basic_string_view<CharT, Traits>> y) noexcept {\r\n        return x.size() == y.size() && x.compare(y) == 0;\r\n    }\r\n    template <class CharT, characterized_traits Traits>\r\n    constexpr get_string_comparison_category_t<Traits> operator<=>(\r\n        basic_string_view<CharT, Traits> x, type_identity_t<basic_string_view<CharT, Traits>> y) noexcept {\r\n        return static_cast<get_string_comparison_category_t<Traits>>(x.compare(y) <=> 0);\r\n    }\r\n\r\n    template <class CharT>\r\n    struct test_traits : char_traits<CharT> {\r\n        using is_characterized = void;\r\n    };\r\n\r\n    using test_string_view = basic_string_view<char, test_traits<char>>;\r\n\r\n    static_assert(test_string_view{} == test_string_view{});\r\n    static_assert(!(test_string_view{} != test_string_view{}));\r\n    static_assert(!(test_string_view{} < test_string_view{}));\r\n    static_assert(!(test_string_view{} > test_string_view{}));\r\n    static_assert(test_string_view{} <= test_string_view{});\r\n    static_assert(test_string_view{} >= test_string_view{});\r\n    static_assert(test_string_view{} <=> test_string_view{} == strong_ordering::equal);\r\n\r\n    static_assert(test_string_view{} == \"\");\r\n    static_assert(!(test_string_view{} != \"\"));\r\n    static_assert(!(test_string_view{} < \"\"));\r\n    static_assert(!(test_string_view{} > \"\"));\r\n    static_assert(test_string_view{} <= \"\");\r\n    static_assert(test_string_view{} >= \"\");\r\n    static_assert(test_string_view{} <=> \"\" == strong_ordering::equal);\r\n\r\n    static_assert(\"\" == test_string_view{});\r\n    static_assert(!(\"\" != test_string_view{}));\r\n    static_assert(!(\"\" < test_string_view{}));\r\n    static_assert(!(\"\" > test_string_view{}));\r\n    static_assert(\"\" <= test_string_view{});\r\n    static_assert(\"\" >= test_string_view{});\r\n    static_assert(\"\" <=> test_string_view{} == strong_ordering::equal);\r\n} // namespace test_lwg_3950\r\n#endif // _HAS_CXX20\r\n\r\nint main() {\r\n    test_case_default_constructor();\r\n    test_case_ntcts_constructor();\r\n    test_case_buffer_constructor();\r\n    test_case_contiguous_constructor();\r\n    test_case_range_constructor();\r\n    test_case_iterators<char, char_traits<char>>();\r\n    test_case_iterators<wchar_t, char_traits<wchar_t>>();\r\n    test_case_prefix<char, char_traits<char>>();\r\n    test_case_prefix<wchar_t, char_traits<wchar_t>>();\r\n    test_case_suffix<char, char_traits<char>>();\r\n    test_case_suffix<wchar_t, char_traits<wchar_t>>();\r\n    test_case_swap<char, char_traits<char>>();\r\n    test_case_swap<wchar_t, char_traits<wchar_t>>();\r\n    test_case_at_out_of_range();\r\n    test_case_copy<char_traits<char>>();\r\n    test_case_copy_out_of_range();\r\n    test_case_Copy_s<char_traits<char>>();\r\n    test_case_Copy_s_out_of_range();\r\n    test_case_substr<char_traits<char>>();\r\n    test_case_substr_out_of_range();\r\n    test_case_compare<char, char_traits<char>>();\r\n    test_case_compare<wchar_t, char_traits<wchar_t>>();\r\n    test_case_compare_out_of_range();\r\n#if _HAS_CXX20\r\n    test_case_starts_with_ends_with<char, char_traits<char>, true>();\r\n    test_case_starts_with_ends_with<wchar_t, char_traits<wchar_t>, true>();\r\n#endif // _HAS_CXX20\r\n#if _HAS_CXX23\r\n    test_case_contains<char, char_traits<char>, true>();\r\n    test_case_contains<wchar_t, char_traits<wchar_t>, true>();\r\n#endif // _HAS_CXX23\r\n    test_case_find<char, char_traits<char>>();\r\n    test_case_find<wchar_t, char_traits<wchar_t>>();\r\n    test_case_operators<char, char_traits<char>>();\r\n    test_case_operators<wchar_t, char_traits<wchar_t>>();\r\n    test_case_inserter();\r\n    test_case_hashing();\r\n    test_case_string_integration();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0226R1_math_special_functions/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0226R1_math_special_functions/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cmath>\r\n#include <limits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Float>\r\nbool isclose(Float f, Float g, const int ulps = 1) {\r\n    if (f == g) {\r\n        return true;\r\n    }\r\n\r\n    if (f > g) {\r\n        swap(f, g);\r\n    }\r\n    // f < g\r\n    for (int i = 0; i < ulps; ++i) {\r\n        f = nextafter(f, numeric_limits<Float>::infinity());\r\n        if (f == g) {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\ntemplate <class Float>\r\nconstexpr Float half_pi = static_cast<Float>(1.57'079'632'679'489'662);\r\n\r\nconstexpr float nanf_v       = numeric_limits<float>::quiet_NaN();\r\nconstexpr double nand_v      = numeric_limits<double>::quiet_NaN();\r\nconstexpr long double nanl_v = numeric_limits<long double>::quiet_NaN();\r\n\r\n// Note: we include 18 significant digits for easier reasoning;\r\n// there are approximately 16 significant digits in binary64 ('double'),\r\n// so adding 2 extra will _certainly_ always give us the exact right number.\r\n// We use 18 significant digits for binary32 ('float') as well, for easier reasoning.\r\n// The correct results were found via Wolfram Alpha.\r\n// The formula for a specific function is given at the top of each test\r\n\r\nvoid test_assoc_laguerre() {\r\n    // assoc_laguerre(x, y, z) = LaguerreP[x, y, z]\r\n    {\r\n        assert(isnan(assoc_laguerre(1, 10, nanf_v)));\r\n        assert(isnan(assoc_laguerre(1, 10, nand_v)));\r\n        assert(isnan(assoc_laguerre(1, 10, nanl_v)));\r\n        assert(isnan(assoc_laguerref(1, 10, nanf_v)));\r\n        assert(isnan(assoc_laguerrel(1, 10, nanl_v)));\r\n    }\r\n    {\r\n        assert(isclose(assoc_laguerre(1, 10, 0.5), 10.5));\r\n        assert(isclose(assoc_laguerre(1, 10, 0.5f), 10.5f));\r\n        assert(isclose(assoc_laguerre(1, 10, 0.5L), 10.5L));\r\n        assert(isclose(assoc_laguerref(1, 10, 0.5f), 10.5f));\r\n        assert(isclose(assoc_laguerrel(1, 10, 0.5L), 10.5L));\r\n    }\r\n\r\n    {\r\n        assert(isclose(assoc_laguerre(2, 10, 0.5), 60.125));\r\n        assert(isclose(assoc_laguerre(2, 10, 0.5f), 60.125f));\r\n        assert(isclose(assoc_laguerre(2, 10, 0.5L), 60.125L));\r\n        assert(isclose(assoc_laguerref(2, 10, 0.5f), 60.125f));\r\n        assert(isclose(assoc_laguerrel(2, 10, 0.5L), 60.125L));\r\n    }\r\n}\r\n\r\nvoid test_assoc_legendre() {\r\n    // assoc_legendre(x, y, z) = LegendreP[x, y, z]\r\n    {\r\n        assert(isclose(assoc_legendre(2, 0, 0.5), -0.125));\r\n        assert(isclose(assoc_legendre(2, 0, 0.5f), -0.125f));\r\n        assert(isclose(assoc_legendre(2, 0, 0.5L), -0.125L));\r\n        assert(isclose(assoc_legendref(2, 0, 0.5f), -0.125f));\r\n        assert(isclose(assoc_legendrel(2, 0, 0.5L), -0.125L));\r\n    }\r\n    {\r\n        assert(isclose(assoc_legendre(2, 1, 0.5), 1.29'903'810'567'665'797));\r\n        assert(isclose(assoc_legendre(2, 1, 0.5f), 1.29'903'810'567'665'797f));\r\n        assert(isclose(assoc_legendre(2, 1, 0.5L), 1.29'903'810'567'665'797L));\r\n        assert(isclose(assoc_legendref(2, 1, 0.5f), 1.29'903'810'567'665'797f));\r\n        assert(isclose(assoc_legendrel(2, 1, 0.5L), 1.29'903'810'567'665'797L));\r\n    }\r\n    {\r\n        assert(isclose(assoc_legendre(2, 2, 0.5), 2.25));\r\n        assert(isclose(assoc_legendre(2, 2, 0.5f), 2.25f));\r\n        assert(isclose(assoc_legendre(2, 2, 0.5L), 2.25L));\r\n        assert(isclose(assoc_legendref(2, 2, 0.5f), 2.25f));\r\n        assert(isclose(assoc_legendrel(2, 2, 0.5L), 2.25L));\r\n    }\r\n}\r\n\r\nvoid test_beta() {\r\n    // beta(x, y) = Beta[x, y]\r\n    {\r\n        assert(isclose(beta(1.0, 1.0), 1.0));\r\n        assert(isclose(beta(1.0f, 1.0f), 1.0f));\r\n        assert(isclose(beta(1.0L, 1.0L), 1.0L));\r\n        assert(isclose(betaf(1.0f, 1.0f), 1.0f));\r\n        assert(isclose(betal(1.0L, 1.0L), 1.0L));\r\n    }\r\n    {\r\n        assert(isclose(beta(2.0, 3.0), 0.0833'333'333'333'333'333, 2));\r\n        assert(isclose(beta(2.0f, 3.0f), 0.0833'333'333'333'333'333f));\r\n        assert(isclose(beta(2.0L, 3.0L), 0.0833'333'333'333'333'333L, 2));\r\n        assert(isclose(betaf(2.0f, 3.0f), 0.0833'333'333'333'333'333f));\r\n        assert(isclose(betal(2.0L, 3.0L), 0.0833'333'333'333'333'333L, 2));\r\n    }\r\n}\r\n\r\nvoid test_comp_ellint_1() {\r\n    // comp_ellint_1(x) = EllipticK[x^2]\r\n    {\r\n        assert(isclose(comp_ellint_1(0.0), half_pi<double>));\r\n        assert(isclose(comp_ellint_1(0.0f), half_pi<float>));\r\n        assert(isclose(comp_ellint_1(0.0L), half_pi<long double>));\r\n        assert(isclose(comp_ellint_1f(0.0f), half_pi<float>));\r\n        assert(isclose(comp_ellint_1l(0.0L), half_pi<long double>));\r\n    }\r\n    {\r\n        assert(isclose(comp_ellint_1(0.5), 1.68'575'035'481'259'604));\r\n        assert(isclose(comp_ellint_1(0.5f), 1.68'575'035'481'259'604f));\r\n        assert(isclose(comp_ellint_1(0.5L), 1.68'575'035'481'259'604L));\r\n        assert(isclose(comp_ellint_1f(0.5f), 1.68'575'035'481'259'604f));\r\n        assert(isclose(comp_ellint_1l(0.5L), 1.68'575'035'481'259'604L));\r\n    }\r\n}\r\n\r\nvoid test_comp_ellint_2() {\r\n    // comp_ellint_2(x) = EllipticE[x^2]\r\n    {\r\n        assert(isnan(comp_ellint_2(nanf_v)));\r\n        assert(isnan(comp_ellint_2(nand_v)));\r\n        assert(isnan(comp_ellint_2(nanl_v)));\r\n        assert(isnan(comp_ellint_2f(nanf_v)));\r\n        assert(isnan(comp_ellint_2l(nanl_v)));\r\n    }\r\n    {\r\n        assert(isclose(comp_ellint_2(0.0), half_pi<double>));\r\n        assert(isclose(comp_ellint_2(0.0f), half_pi<float>));\r\n        assert(isclose(comp_ellint_2(0.0L), half_pi<long double>));\r\n        assert(isclose(comp_ellint_2f(0.0f), half_pi<float>));\r\n        assert(isclose(comp_ellint_2l(0.0L), half_pi<long double>));\r\n    }\r\n    {\r\n        assert(isclose(comp_ellint_2(1), 1.0));\r\n        assert(isclose(comp_ellint_2(1.0f), 1.0f));\r\n        assert(isclose(comp_ellint_2(1.0L), 1.0L));\r\n        assert(isclose(comp_ellint_2f(1.0f), 1.0f));\r\n        assert(isclose(comp_ellint_2l(1.0L), 1.0L));\r\n    }\r\n}\r\n\r\nvoid test_comp_ellint_3() {\r\n    // comp_ellint_3(x, y) = Pi[y, x^2]\r\n    {\r\n        assert(isnan(comp_ellint_3(0.0f, nanf_v)));\r\n        assert(isnan(comp_ellint_3(0.0, nand_v)));\r\n        assert(isnan(comp_ellint_3(0.0L, nanl_v)));\r\n        assert(isnan(comp_ellint_3f(0.0f, nanf_v)));\r\n        assert(isnan(comp_ellint_3l(0.0L, nanl_v)));\r\n    }\r\n    {\r\n        assert(isnan(comp_ellint_3(nanf_v, 0.0f)));\r\n        assert(isnan(comp_ellint_3(nand_v, 0.0)));\r\n        assert(isnan(comp_ellint_3(nanl_v, 0.0L)));\r\n        assert(isnan(comp_ellint_3f(nanf_v, 0.0f)));\r\n        assert(isnan(comp_ellint_3l(nanl_v, 0.0L)));\r\n    }\r\n    {\r\n        assert(isclose(comp_ellint_3(0.0, 0.0), half_pi<double>));\r\n        assert(isclose(comp_ellint_3(0.0f, 0.0f), half_pi<float>));\r\n        assert(isclose(comp_ellint_3(0.0L, 0.0L), half_pi<long double>));\r\n        assert(isclose(comp_ellint_3f(0.0f, 0.0f), half_pi<float>));\r\n        assert(isclose(comp_ellint_3l(0.0L, 0.0L), half_pi<long double>));\r\n    }\r\n    {\r\n        assert(isclose(comp_ellint_3(0.5, 0.0), 1.68'575'035'481'259'604));\r\n        assert(isclose(comp_ellint_3(0.5f, 0.0f), 1.68'575'035'481'259'604f));\r\n        assert(isclose(comp_ellint_3(0.5L, 0.0L), 1.68'575'035'481'259'604L));\r\n        assert(isclose(comp_ellint_3f(0.5f, 0.0f), 1.68'575'035'481'259'604f));\r\n        assert(isclose(comp_ellint_3l(0.5L, 0.0L), 1.68'575'035'481'259'604L));\r\n    }\r\n}\r\n\r\nvoid test_cyl_bessel_i() {\r\n    // cyl_bessel_i(x, y) = BesselI[x, y]\r\n    {\r\n        assert(isnan(cyl_bessel_i(0.0, nand_v)));\r\n        assert(isnan(cyl_bessel_if(0.0f, nanf_v)));\r\n        assert(isnan(cyl_bessel_il(0.0L, nanl_v)));\r\n    }\r\n    {\r\n        assert(isnan(cyl_bessel_i(nand_v, 0.0)));\r\n        assert(isnan(cyl_bessel_if(nanf_v, 0.0f)));\r\n        assert(isnan(cyl_bessel_il(nanl_v, 0.0L)));\r\n    }\r\n    {\r\n        assert(isclose(cyl_bessel_i(0.0, 1.2345), 1.41'886'075'127'709'138));\r\n        assert(isclose(cyl_bessel_if(0.0f, 1.2345f), 1.41'886'075'127'709'138f));\r\n        assert(isclose(cyl_bessel_il(0.0L, 1.2345L), 1.41'886'075'127'709'138L));\r\n    }\r\n}\r\n\r\nvoid test_cyl_bessel_j() {\r\n    // cyl_bessel_i(x, y) = BesselJ[x, y]\r\n    {\r\n        assert(isnan(cyl_bessel_j(0.0, nand_v)));\r\n        assert(isnan(cyl_bessel_jf(0.0f, nanf_v)));\r\n        assert(isnan(cyl_bessel_jl(0.0L, nanl_v)));\r\n    }\r\n    {\r\n        assert(isnan(cyl_bessel_j(nand_v, 0.0)));\r\n        assert(isnan(cyl_bessel_jf(nanf_v, 0.0f)));\r\n        assert(isnan(cyl_bessel_jl(nanl_v, 0.0L)));\r\n    }\r\n    {\r\n        assert(isclose(cyl_bessel_j(0.0, 1.2345), 0.653'791'995'647'314'267));\r\n        assert(isclose(cyl_bessel_jf(0.0f, 1.2345f), 0.653'791'995'647'314'267f));\r\n        assert(isclose(cyl_bessel_jl(0.0L, 1.2345L), 0.653'791'995'647'314'267L));\r\n    }\r\n}\r\n\r\nvoid test_cyl_bessel_k() {\r\n    // cyl_bessel_k(x, y) = BesselK[x, y]\r\n    {\r\n        assert(isnan(cyl_bessel_k(0.0, nand_v)));\r\n        assert(isnan(cyl_bessel_kf(0.0f, nanf_v)));\r\n        assert(isnan(cyl_bessel_kl(0.0L, nanl_v)));\r\n    }\r\n    {\r\n        assert(isnan(cyl_bessel_k(nand_v, 0.0)));\r\n        assert(isnan(cyl_bessel_kf(nanf_v, 0.0f)));\r\n        assert(isnan(cyl_bessel_kl(nanl_v, 0.0L)));\r\n    }\r\n    {\r\n        assert(isclose(cyl_bessel_k(0.5, 1.2345), 0.328'229'683'116'574'238, 8));\r\n        assert(isclose(cyl_bessel_kf(0.5f, 1.2345f), 0.328'229'683'116'574'238f));\r\n        assert(isclose(cyl_bessel_kl(0.5L, 1.2345L), 0.328'229'683'116'574'238L, 8));\r\n    }\r\n}\r\n\r\nvoid test_cyl_neumann() {\r\n    // cyl_neumann(x, y) = BesselY[x, y]\r\n    {\r\n        assert(isnan(cyl_neumann(0.0, nand_v)));\r\n        assert(isnan(cyl_neumannf(0.0f, nanf_v)));\r\n        assert(isnan(cyl_neumannl(0.0L, nanl_v)));\r\n    }\r\n    {\r\n        assert(isnan(cyl_neumann(nand_v, 0.0)));\r\n        assert(isnan(cyl_neumannf(nanf_v, 0.0f)));\r\n        assert(isnan(cyl_neumannl(nanl_v, 0.0L)));\r\n    }\r\n    {\r\n        assert(isclose(cyl_neumann(0.5, 0.333), -1.30'671'255'810'072'199, 2));\r\n        assert(isclose(cyl_neumannf(0.5f, 0.333f), -1.30'671'255'810'072'199f));\r\n        assert(isclose(cyl_neumannl(0.5L, 0.333L), -1.30'671'255'810'072'199L, 2));\r\n    }\r\n    {\r\n        assert(isclose(cyl_neumann(0.5, 0.666), -0.768'760'134'281'402'040, 2));\r\n        assert(isclose(cyl_neumannf(0.5f, 0.666f), -0.768'760'134'281'402'040f));\r\n        assert(isclose(cyl_neumannl(0.5L, 0.666L), -0.768'760'134'281'402'040L, 2));\r\n    }\r\n}\r\n\r\nvoid test_ellint_1() {\r\n    // ellint_1(k, phi) = integrate[(1/sqrt[1 - k^2(sin(t))^2]) dt] from 0 to phi\r\n    {\r\n        assert(isnan(ellint_1(0.0, nand_v)));\r\n        assert(isnan(ellint_1f(0.0f, nanf_v)));\r\n        assert(isnan(ellint_1l(0.0L, nanl_v)));\r\n    }\r\n    {\r\n        assert(isnan(ellint_1(nand_v, 0.0)));\r\n        assert(isnan(ellint_1f(nanf_v, 0.0f)));\r\n        assert(isnan(ellint_1l(nanl_v, 0.0L)));\r\n    }\r\n    {\r\n        assert(isclose(ellint_1(0.0, half_pi<double>), half_pi<double>));\r\n        assert(isclose(ellint_1f(0.0f, half_pi<float>), half_pi<float>));\r\n        assert(isclose(ellint_1l(0.0L, half_pi<long double>), half_pi<long double>));\r\n    }\r\n    {\r\n        assert(isclose(ellint_1(0.7, 0.0), 0.0));\r\n        assert(isclose(ellint_1f(0.7f, 0.0f), 0.0f));\r\n        assert(isclose(ellint_1l(0.7L, 0.0L), 0.0L));\r\n    }\r\n}\r\n\r\nvoid test_ellint_2() {\r\n    // ellint_2(k, phi) = integrate[sqrt[1 - k^2(sin(t))^2] dt] from 0 to phi\r\n    {\r\n        assert(isnan(ellint_2(0.0, nand_v)));\r\n        assert(isnan(ellint_2f(0.0f, nanf_v)));\r\n        assert(isnan(ellint_2l(0.0L, nanl_v)));\r\n    }\r\n    {\r\n        assert(isnan(ellint_2(nand_v, 0.0)));\r\n        assert(isnan(ellint_2f(nanf_v, 0.0f)));\r\n        assert(isnan(ellint_2l(nanl_v, 0.0L)));\r\n    }\r\n    {\r\n        assert(isclose(ellint_2(0.0, half_pi<double>), half_pi<double>));\r\n        assert(isclose(ellint_2f(0.0f, half_pi<float>), half_pi<float>));\r\n        assert(isclose(ellint_2l(0.0L, half_pi<long double>), half_pi<long double>));\r\n    }\r\n    {\r\n        assert(isclose(ellint_2(0.7, 0.0), 0.0));\r\n        assert(isclose(ellint_2f(0.7f, 0.0f), 0.0f));\r\n        assert(isclose(ellint_2l(0.7L, 0.0L), 0.0L));\r\n    }\r\n}\r\n\r\nvoid test_ellint_3() {\r\n    // ellint_3(k, nu, phi) = integrate[(1/([1 - nu (sin(t))^2] sqrt[1 - k^2(sin(t))^2])) dt] from 0 to phi\r\n    {\r\n        assert(isnan(ellint_3(nand_v, 0.0, 0.0)));\r\n        assert(isnan(ellint_3f(nanf_v, 0.0f, 0.0f)));\r\n        assert(isnan(ellint_3l(nanl_v, 0.0L, 0.0L)));\r\n    }\r\n    {\r\n        assert(isnan(ellint_3(0.0, nand_v, 0.0)));\r\n        assert(isnan(ellint_3f(0.0f, nanf_v, 0.0f)));\r\n        assert(isnan(ellint_3l(0.0L, nanl_v, 0.0L)));\r\n    }\r\n    {\r\n        assert(isnan(ellint_3(0.0, 0.0, nand_v)));\r\n        assert(isnan(ellint_3f(0.0f, 0.0f, nanf_v)));\r\n        assert(isnan(ellint_3l(0.0L, 0.0L, nanl_v)));\r\n    }\r\n    {\r\n        assert(isclose(ellint_3(0.0, 0.0, half_pi<double>), half_pi<double>));\r\n        assert(isclose(ellint_3f(0.0f, 0.0f, half_pi<float>), half_pi<float>));\r\n        assert(isclose(ellint_3l(0.0L, 0.0L, half_pi<long double>), half_pi<long double>));\r\n    }\r\n}\r\n\r\nvoid test_expint() {\r\n    // expint(x) = Ei[x]\r\n    {\r\n        assert(isnan(expint(nand_v)));\r\n        assert(isnan(expint(nanf_v)));\r\n        assert(isnan(expint(nanl_v)));\r\n        assert(isnan(expintf(nanf_v)));\r\n        assert(isnan(expintl(nanl_v)));\r\n    }\r\n    {\r\n        assert(isclose(expint(1.0), 1.89'511'781'635'593'675));\r\n        assert(isclose(expint(1.0f), 1.89'511'781'635'593'675f));\r\n        assert(isclose(expint(1.0L), 1.89'511'781'635'593'675L));\r\n        assert(isclose(expintf(1.0f), 1.89'511'781'635'593'675f));\r\n        assert(isclose(expintl(1.0L), 1.89'511'781'635'593'675L));\r\n    }\r\n}\r\n\r\nvoid test_hermite() {\r\n    // hermite(x, y) = Hermite[x, y]\r\n    {\r\n        assert(isnan(hermite(3, nand_v)));\r\n        assert(isnan(hermite(3, nanf_v)));\r\n        assert(isnan(hermite(3, nanl_v)));\r\n        assert(isnan(hermitef(3, nanf_v)));\r\n        assert(isnan(hermitel(3, nanl_v)));\r\n    }\r\n    {\r\n        assert(isclose(hermite(3, 10.0), 7880.0));\r\n        assert(isclose(hermite(3, 10.0f), 7880.0f));\r\n        assert(isclose(hermite(3, 10.0L), 7880.0L));\r\n        assert(isclose(hermitef(3, 10.0f), 7880.0f));\r\n        assert(isclose(hermitel(3, 10.0L), 7880.0L));\r\n    }\r\n    {\r\n        assert(isclose(hermite(4, 10.0), 155212.0));\r\n        assert(isclose(hermite(4, 10.0f), 155212.0f));\r\n        assert(isclose(hermite(4, 10.0L), 155212.0L));\r\n        assert(isclose(hermitef(4, 10.0f), 155212.0f));\r\n        assert(isclose(hermitel(4, 10.0L), 155212.0L));\r\n    }\r\n}\r\n\r\nvoid test_legendre() {\r\n    // legendre(x, y) = LegendreP[x, y]\r\n    {\r\n        assert(isnan(legendre(3, nand_v)));\r\n        assert(isnan(legendre(3, nanf_v)));\r\n        assert(isnan(legendre(3, nanl_v)));\r\n        assert(isnan(legendref(3, nanf_v)));\r\n        assert(isnan(legendrel(3, nanl_v)));\r\n    }\r\n    {\r\n        assert(isclose(legendre(3, 0.25), -0.3359375));\r\n        assert(isclose(legendre(3, 0.25f), -0.3359375f));\r\n        assert(isclose(legendre(3, 0.25L), -0.3359375L));\r\n        assert(isclose(legendref(3, 0.25f), -0.3359375f));\r\n        assert(isclose(legendrel(3, 0.25L), -0.3359375L));\r\n    }\r\n    {\r\n        assert(isclose(legendre(4, 0.25), 0.15771484375));\r\n        assert(isclose(legendre(4, 0.25f), 0.15771484375f));\r\n        assert(isclose(legendre(4, 0.25L), 0.15771484375L));\r\n        assert(isclose(legendref(4, 0.25f), 0.15771484375f));\r\n        assert(isclose(legendrel(4, 0.25L), 0.15771484375L));\r\n    }\r\n}\r\n\r\nvoid test_laguerre() {\r\n    // laguerre(x, y) = LaguerreP[x, y]\r\n    {\r\n        assert(isnan(laguerre(3, nand_v)));\r\n        assert(isnan(laguerre(3, nanf_v)));\r\n        assert(isnan(laguerre(3, nanl_v)));\r\n        assert(isnan(laguerref(3, nanf_v)));\r\n        assert(isnan(laguerrel(3, nanl_v)));\r\n    }\r\n    {\r\n        assert(isclose(laguerre(1, 0.5), 0.5));\r\n        assert(isclose(laguerre(1, 0.5f), 0.5f));\r\n        assert(isclose(laguerre(1, 0.5L), 0.5L));\r\n        assert(isclose(laguerref(1, 0.5f), 0.5f));\r\n        assert(isclose(laguerrel(1, 0.5L), 0.5L));\r\n    }\r\n    {\r\n        assert(isclose(laguerre(2, 0.5), 0.125));\r\n        assert(isclose(laguerre(2, 0.5f), 0.125f));\r\n        assert(isclose(laguerre(2, 0.5L), 0.125L));\r\n        assert(isclose(laguerref(2, 0.5f), 0.125f));\r\n        assert(isclose(laguerrel(2, 0.5L), 0.125L));\r\n    }\r\n}\r\n\r\nvoid test_riemann_zeta() {\r\n    // riemann_zeta(x) = Zeta[x]\r\n    {\r\n        assert(isnan(riemann_zeta(nand_v)));\r\n        assert(isnan(riemann_zeta(nanf_v)));\r\n        assert(isnan(riemann_zeta(nanl_v)));\r\n        assert(isnan(riemann_zetaf(nanf_v)));\r\n        assert(isnan(riemann_zetal(nanl_v)));\r\n    }\r\n    {\r\n        assert(isclose(riemann_zeta(-1.0), -0.0833'333'333'333'333'333));\r\n        assert(isclose(riemann_zeta(-1.0f), -0.0833'333'333'333'333'333f));\r\n        assert(isclose(riemann_zeta(-1.0L), -0.0833'333'333'333'333'333L));\r\n        assert(isclose(riemann_zetaf(-1.0f), -0.0833'333'333'333'333'333f));\r\n        assert(isclose(riemann_zetal(-1.0L), -0.0833'333'333'333'333'333L));\r\n    }\r\n    {\r\n        assert(isclose(riemann_zeta(0.0), -0.5));\r\n        assert(isclose(riemann_zeta(0.0f), -0.5f));\r\n        assert(isclose(riemann_zeta(0.0L), -0.5L));\r\n        assert(isclose(riemann_zetaf(0.0f), -0.5f));\r\n        assert(isclose(riemann_zetal(0.0L), -0.5L));\r\n    }\r\n}\r\n\r\nvoid test_sph_bessel() {\r\n    // sph_bessel(x, y) = sqrt[pi/(2 * x)] BesselJ[y + 1/2, x]\r\n    {\r\n        assert(isnan(sph_bessel(1, nand_v)));\r\n        assert(isnan(sph_bessel(1, nanf_v)));\r\n        assert(isnan(sph_bessel(1, nanl_v)));\r\n        assert(isnan(sph_besself(1, nanf_v)));\r\n        assert(isnan(sph_bessell(1, nanl_v)));\r\n    }\r\n    {\r\n        assert(isclose(sph_bessel(1, 1.2345), 0.352'106'432'958'031'885));\r\n        assert(isclose(sph_bessel(1, 1.2345f), 0.352'106'432'958'031'885f));\r\n        assert(isclose(sph_bessel(1, 1.2345L), 0.352'106'432'958'031'885L));\r\n        assert(isclose(sph_besself(1, 1.2345f), 0.352'106'432'958'031'885f));\r\n        assert(isclose(sph_bessell(1, 1.2345L), 0.352'106'432'958'031'885L));\r\n    }\r\n}\r\n\r\nvoid test_sph_legendre() {\r\n    // sph_legendre(x, y, z)\r\n    // = (-1)^y ([2 * x + 1]/4pi * [x - y]!/[x + y]!)^(1 / 2) LegendreP[x, y, cos(z)]\r\n    {\r\n        assert(isnan(sph_legendre(1, 1, nand_v)));\r\n        assert(isnan(sph_legendre(1, 1, nanf_v)));\r\n        assert(isnan(sph_legendre(1, 1, nanl_v)));\r\n        assert(isnan(sph_legendref(1, 1, nanf_v)));\r\n        assert(isnan(sph_legendrel(1, 1, nanl_v)));\r\n    }\r\n    {\r\n        assert(isclose(sph_legendre(3, 0, 1.2345), -0.302'386'890'645'537'993, 2));\r\n        assert(isclose(sph_legendre(3, 0, 1.2345f), -0.302'386'890'645'537'993f));\r\n        assert(isclose(sph_legendre(3, 0, 1.2345L), -0.302'386'890'645'537'993L, 2));\r\n        assert(isclose(sph_legendref(3, 0, 1.2345f), -0.302'386'890'645'537'993f));\r\n        assert(isclose(sph_legendrel(3, 0, 1.2345L), -0.302'386'890'645'537'993L, 2));\r\n    }\r\n}\r\n\r\nvoid test_sph_neumann() {\r\n    // sph_neumann(x, y) = sqrt[pi/2y] BesselY[x + 1/2, y]\r\n    {\r\n        assert(isnan(sph_neumann(1, nand_v)));\r\n        assert(isnan(sph_neumann(1, nanf_v)));\r\n        assert(isnan(sph_neumann(1, nanl_v)));\r\n        assert(isnan(sph_neumannf(1, nanf_v)));\r\n        assert(isnan(sph_neumannl(1, nanl_v)));\r\n    }\r\n    {\r\n        assert(isclose(sph_neumann(1, 1.2345), -0.981'200'877'819'308'099, 2));\r\n        assert(isclose(sph_neumann(1, 1.2345f), -0.981'200'877'819'308'099f));\r\n        assert(isclose(sph_neumann(1, 1.2345L), -0.981'200'877'819'308'099L, 2));\r\n        assert(isclose(sph_neumannf(1, 1.2345f), -0.981'200'877'819'308'099f));\r\n        assert(isclose(sph_neumannl(1, 1.2345L), -0.981'200'877'819'308'099L, 2));\r\n    }\r\n}\r\n\r\n// Also test GH-3076 <cmath>: Invalid output for incomplete elliptic integral of the second kind with k = 1\r\nvoid test_gh_3076() {\r\n    assert(isclose(ellint_2(1, 6.2831853071795862), 4.0));\r\n}\r\n\r\nint main() {\r\n    test_assoc_laguerre();\r\n    test_assoc_legendre();\r\n    test_beta();\r\n    test_comp_ellint_1();\r\n    test_comp_ellint_2();\r\n    test_comp_ellint_3();\r\n    test_cyl_bessel_i();\r\n    test_cyl_bessel_j();\r\n    test_cyl_bessel_k();\r\n    test_cyl_neumann();\r\n    test_ellint_1();\r\n    test_ellint_2();\r\n    test_ellint_3();\r\n    test_expint();\r\n    test_hermite();\r\n    test_legendre();\r\n    test_laguerre();\r\n    test_riemann_zeta();\r\n    test_sph_bessel();\r\n    test_sph_legendre();\r\n    test_sph_neumann();\r\n\r\n    test_gh_3076();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0288R9_move_only_function/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/Zc:alignedNew-\"\r\n*\tPM_CL=\"\"\r\n"
  },
  {
    "path": "tests/std/tests/P0288R9_move_only_function/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <functional>\r\n#include <new>\r\n#include <stdexcept>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nconstexpr auto large_function_size = 100;\r\n\r\nstruct pass_this_by_ref {\r\n    int v;\r\n\r\n    pass_this_by_ref(int v_) : v(v_) {}\r\n\r\n    pass_this_by_ref(const pass_this_by_ref&) {\r\n        abort();\r\n    }\r\n};\r\n\r\nstruct counter {\r\n    static int inst;\r\n    static int copies;\r\n    static int moves;\r\n\r\n    counter() {\r\n        ++inst;\r\n    }\r\n\r\n    counter(const counter&) {\r\n        ++inst;\r\n        ++copies;\r\n    }\r\n\r\n    counter(counter&&) noexcept {\r\n        ++inst;\r\n        ++moves;\r\n    }\r\n\r\n    ~counter() {\r\n        --inst;\r\n    }\r\n};\r\n\r\nint counter::inst   = 0;\r\nint counter::copies = 0;\r\nint counter::moves  = 0;\r\n\r\nstruct small_callable : counter {\r\n    int operator()(int a, pass_this_by_ref& b) {\r\n        assert(a == 23);\r\n        assert(b.v == 63);\r\n        return 38;\r\n    }\r\n\r\n    void* operator new(size_t)  = delete;\r\n    void operator delete(void*) = delete;\r\n\r\n    small_callable() = default;\r\n\r\n    small_callable(const small_callable&) = default;\r\n\r\n    small_callable(small_callable&&) noexcept = default;\r\n};\r\n\r\nstruct large_callable : counter {\r\n    char data[large_function_size] = {};\r\n\r\n    int operator()(int a, pass_this_by_ref& b) {\r\n        assert(a == 23);\r\n        assert(b.v == 63);\r\n        return 39;\r\n    }\r\n\r\n    void* operator new(size_t)  = delete;\r\n    void operator delete(void*) = delete;\r\n\r\n    large_callable() = default;\r\n\r\n    large_callable(const large_callable&) = default;\r\n\r\n    large_callable(large_callable&&) noexcept = default;\r\n};\r\n\r\nstruct odd_cc_callable : counter {\r\n    int __fastcall operator()(int a, pass_this_by_ref& b) {\r\n        assert(a == 23);\r\n        assert(b.v == 63);\r\n        return 40;\r\n    }\r\n\r\n    odd_cc_callable() = default;\r\n\r\n    odd_cc_callable(const odd_cc_callable&)     = default;\r\n    odd_cc_callable(odd_cc_callable&&) noexcept = default;\r\n};\r\n\r\nstruct large_implicit_ptr_callable : counter {\r\n    char data[large_function_size] = {};\r\n\r\n    using pfn = int (*)(int a, pass_this_by_ref& b);\r\n\r\n    operator pfn() {\r\n        return [](int a, pass_this_by_ref& b) {\r\n            assert(a == 23);\r\n            assert(b.v == 63);\r\n            return 41;\r\n        };\r\n    }\r\n\r\n    large_implicit_ptr_callable() = default;\r\n\r\n    large_implicit_ptr_callable(const large_implicit_ptr_callable&)     = default;\r\n    large_implicit_ptr_callable(large_implicit_ptr_callable&&) noexcept = default;\r\n};\r\n\r\nint __fastcall plain_callable(int a, pass_this_by_ref& b) {\r\n    assert(a == 23);\r\n    assert(b.v == 63);\r\n    return 42;\r\n}\r\n\r\nusing test_function_t = move_only_function<int(int, pass_this_by_ref&)>;\r\n\r\ntemplate <class F, class... Args>\r\nvoid test_construct_impl(int expect, Args... args) {\r\n    {\r\n        pass_this_by_ref x{63};\r\n\r\n        test_function_t constructed_directly(F{args...});\r\n\r\n        assert(constructed_directly(23, x) == expect);\r\n\r\n        assert(constructed_directly);\r\n        assert(constructed_directly != nullptr);\r\n\r\n        test_function_t move_constructed = move(constructed_directly);\r\n\r\n        assert(move_constructed(23, x) == expect);\r\n\r\n        if constexpr (is_class_v<F>) {\r\n            assert(counter::copies == 0);\r\n        }\r\n\r\n        F v{args...};\r\n        test_function_t constructed_lvalue(v);\r\n        if constexpr (is_class_v<F>) {\r\n            assert(counter::copies == 1);\r\n            counter::copies = 0;\r\n        }\r\n\r\n        if constexpr (is_class_v<F>) {\r\n            counter::copies = 0;\r\n            counter::moves  = 0;\r\n        }\r\n        test_function_t constructed_in_place(in_place_type<F>, args...);\r\n        assert(constructed_in_place(23, x) == expect);\r\n        if constexpr (is_class_v<F>) {\r\n            assert(counter::copies == 0);\r\n            assert(counter::moves == 0);\r\n        }\r\n    }\r\n\r\n    if constexpr (is_class_v<F>) {\r\n        assert(counter::inst == 0);\r\n    }\r\n}\r\n\r\nvoid test_assign() {\r\n    pass_this_by_ref x{63};\r\n\r\n    {\r\n        test_function_t f1{small_callable{}};\r\n        test_function_t f2{large_callable{}};\r\n        f2 = move(f1);\r\n        assert(f2(23, x) == 38);\r\n        f1 = large_callable{};\r\n        assert(f1(23, x) == 39);\r\n    }\r\n\r\n    {\r\n        test_function_t f1{large_callable{}};\r\n        test_function_t f2{small_callable{}};\r\n        f2 = move(f1);\r\n        assert(f2(23, x) == 39);\r\n        f1 = small_callable{};\r\n        assert(f1(23, x) == 38);\r\n    }\r\n\r\n    {\r\n        test_function_t f1{small_callable{}};\r\n        test_function_t f2{odd_cc_callable{}};\r\n        f2 = move(f1);\r\n        assert(f2(23, x) == 38);\r\n        f1 = odd_cc_callable{};\r\n        assert(f1(23, x) == 40);\r\n    }\r\n\r\n    {\r\n        test_function_t f1{large_callable{}};\r\n        test_function_t f2{large_implicit_ptr_callable{}};\r\n        f2 = move(f1);\r\n        assert(f2(23, x) == 39);\r\n        f1 = large_implicit_ptr_callable{};\r\n        assert(f1(23, x) == 41);\r\n    }\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wself-move\"\r\n#endif // __clang__\r\n#pragma warning(push)\r\n#pragma warning(disable : 26800) // use a moved-from object\r\n    {\r\n        test_function_t f1{small_callable{}};\r\n        test_function_t f2{large_callable{}};\r\n        f1 = move(f1); // deliberate self-move as a test case\r\n        assert(f1(23, x) == 38);\r\n        f2 = move(f2); // deliberate self-move as a test case\r\n        assert(f2(23, x) == 39);\r\n    }\r\n#pragma warning(pop)\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // __clang__\r\n\r\n    {\r\n        test_function_t f1{small_callable{}};\r\n        test_function_t f2{large_callable{}};\r\n        test_function_t f3{small_callable{}};\r\n        test_function_t f4{large_callable{}};\r\n        test_function_t f5{nullptr};\r\n        assert(f1);\r\n        assert(f2);\r\n        assert(f3);\r\n        assert(f4);\r\n        assert(!f5);\r\n        f1 = nullptr;\r\n        f2 = nullptr;\r\n        f3 = test_function_t{nullptr};\r\n        f4 = test_function_t{nullptr};\r\n        assert(!f1);\r\n        assert(!f2);\r\n        assert(!f3);\r\n        assert(!f4);\r\n    }\r\n}\r\n\r\nvoid test_swap() {\r\n    pass_this_by_ref x{63};\r\n\r\n    {\r\n        test_function_t f1{small_callable{}};\r\n        test_function_t f2{large_callable{}};\r\n        swap(f1, f2);\r\n        assert(f2(23, x) == 38);\r\n        assert(f1(23, x) == 39);\r\n    }\r\n\r\n    {\r\n        test_function_t f1{small_callable{}};\r\n        test_function_t f2{odd_cc_callable{}};\r\n        f1.swap(f2);\r\n        assert(f2(23, x) == 38);\r\n        assert(f1(23, x) == 40);\r\n    }\r\n\r\n    {\r\n        test_function_t f1{large_callable{}};\r\n        test_function_t f2{large_implicit_ptr_callable{}};\r\n        f2.swap(f1);\r\n        assert(f2(23, x) == 39);\r\n        assert(f1(23, x) == 41);\r\n    }\r\n\r\n    {\r\n        test_function_t f1{small_callable{}};\r\n        test_function_t f2{large_callable{}};\r\n        swap(f1, f1);\r\n        f2.swap(f2);\r\n        assert(f1(23, x) == 38);\r\n        assert(f2(23, x) == 39);\r\n    }\r\n}\r\n\r\nvoid test_empty() {\r\n    test_function_t no_callable;\r\n    assert(!no_callable);\r\n    assert(no_callable == nullptr);\r\n    assert(nullptr == no_callable);\r\n\r\n    test_function_t no_callable_moved = move(no_callable);\r\n#pragma warning(push)\r\n#pragma warning(disable : 26800) // use a moved-from object\r\n    assert(!no_callable);\r\n    assert(no_callable == nullptr);\r\n#pragma warning(pop)\r\n    assert(!no_callable_moved);\r\n    assert(no_callable_moved == nullptr);\r\n}\r\n\r\nvoid test_ptr() {\r\n    struct s_t {\r\n        int f(int p) {\r\n            return p + 2;\r\n        }\r\n\r\n        int j = 6;\r\n\r\n        static int g(int z) {\r\n            return z - 3;\r\n        }\r\n    };\r\n\r\n    move_only_function<int(s_t*, int)> mem_fun_ptr(&s_t::f);\r\n    move_only_function<int(s_t*)> mem_ptr(&s_t::j);\r\n    move_only_function<int(int)> fun_ptr(&s_t::g);\r\n\r\n    s_t s;\r\n    assert(mem_fun_ptr);\r\n    assert(mem_fun_ptr(&s, 3) == 5);\r\n    assert(mem_ptr);\r\n    assert(mem_ptr(&s) == 6);\r\n    assert(fun_ptr);\r\n    assert(fun_ptr(34) == 31);\r\n\r\n    move_only_function<int(s_t*, int)> mem_fun_ptr_n(static_cast<decltype(&s_t::f)>(nullptr));\r\n    move_only_function<int(s_t*)> mem_ptr_n(static_cast<decltype(&s_t::j)>(nullptr));\r\n    move_only_function<int(int)> fun_ptr_n(static_cast<decltype(&s_t::g)>(nullptr));\r\n\r\n    assert(!mem_fun_ptr_n);\r\n    assert(!mem_ptr_n);\r\n    assert(!fun_ptr_n);\r\n}\r\n\r\nvoid test_inner() {\r\n    move_only_function<short(long, long)> f1(nullptr);\r\n    move_only_function<int(int, int)> f2 = move(f1);\r\n    assert(!f2);\r\n#pragma warning(push)\r\n#pragma warning(disable : 26800) // use a moved-from object\r\n    f2 = move(f1);\r\n    assert(!f1);\r\n#pragma warning(pop)\r\n}\r\n\r\n\r\nvoid test_inplace_list() {\r\n    struct in_place_list_constructible {\r\n        in_place_list_constructible(initializer_list<int> li) {\r\n            int x = 0;\r\n            for (int i : li) {\r\n                ++x;\r\n                assert(x == i);\r\n            }\r\n        }\r\n\r\n        in_place_list_constructible(initializer_list<int> li, const char*) {\r\n            int x = 0;\r\n            for (int i : li) {\r\n                --x;\r\n                assert(x == i);\r\n            }\r\n        }\r\n\r\n        in_place_list_constructible(const in_place_list_constructible&)            = delete;\r\n        in_place_list_constructible& operator=(const in_place_list_constructible&) = delete;\r\n\r\n        int operator()(int i) {\r\n            return i - 1;\r\n        }\r\n    };\r\n\r\n    move_only_function<int(int)> f1(in_place_type<in_place_list_constructible>, {1, 2, 3, 4, 5});\r\n    assert(f1(5) == 4);\r\n\r\n    move_only_function<int(int)> f2(in_place_type<in_place_list_constructible>, {-1, -2, -3, -4, -5}, \"fox\");\r\n    assert(f2(8) == 7);\r\n}\r\n\r\n\r\ntemplate <bool Nx>\r\nstruct test_noexcept_t {\r\n    int operator()() noexcept(Nx) {\r\n        return 888;\r\n    }\r\n};\r\n\r\nvoid test_noexcept() {\r\n    using f_x  = move_only_function<int()>;\r\n    using f_nx = move_only_function<int() noexcept>;\r\n\r\n    static_assert(!noexcept(declval<f_x>()()));\r\n#ifdef __cpp_noexcept_function_type\r\n    static_assert(noexcept(declval<f_nx>()()));\r\n#else // ^^^ defined(__cpp_noexcept_function_type) / !defined(__cpp_noexcept_function_type) vvv\r\n    static_assert(!noexcept(declval<f_nx>()()));\r\n#endif // ^^^ !defined(__cpp_noexcept_function_type) ^^^\r\n\r\n    static_assert(is_constructible_v<f_x, test_noexcept_t<false>>);\r\n    assert(f_x(test_noexcept_t<false>{})() == 888);\r\n\r\n    static_assert(is_constructible_v<f_x, test_noexcept_t<true>>);\r\n    assert(f_x(test_noexcept_t<true>{})() == 888);\r\n\r\n#ifdef __cpp_noexcept_function_type\r\n    static_assert(!is_constructible_v<f_nx, test_noexcept_t<false>>);\r\n#else // ^^^ defined(__cpp_noexcept_function_type) / !defined(__cpp_noexcept_function_type) vvv\r\n    static_assert(is_constructible_v<f_nx, test_noexcept_t<false>>);\r\n    assert(f_nx(test_noexcept_t<false>{})() == 888);\r\n#endif // ^^^ !defined(__cpp_noexcept_function_type) ^^^\r\n\r\n    static_assert(is_constructible_v<f_nx, test_noexcept_t<true>>);\r\n    assert(f_nx(test_noexcept_t<true>{})() == 888);\r\n}\r\n\r\ntemplate <bool>\r\nstruct test_const_t {\r\n    int operator()() {\r\n        return 456;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct test_const_t<true> {\r\n    int operator()() const {\r\n        return 456;\r\n    }\r\n};\r\n\r\nvoid test_const() {\r\n    using f_c  = move_only_function<int() const>;\r\n    using f_nc = move_only_function<int()>;\r\n\r\n    static_assert(is_constructible_v<f_nc, test_const_t<false>>);\r\n    f_nc f1(test_const_t<false>{});\r\n    assert(f1() == 456);\r\n\r\n    static_assert(is_constructible_v<f_nc, test_const_t<true>>);\r\n    f_nc f2(test_const_t<true>{});\r\n    assert(f2() == 456);\r\n\r\n    static_assert(!is_constructible_v<f_c, test_const_t<false>>);\r\n\r\n    static_assert(is_constructible_v<f_c, test_const_t<true>>);\r\n    f_c f3(test_const_t<true>{});\r\n    assert(f3() == 456);\r\n    const f_c f4(test_const_t<true>{});\r\n    assert(f4() == 456);\r\n}\r\n\r\n\r\nvoid test_qual() {\r\n    move_only_function<int(int)> f1([](auto i) { return i + 1; });\r\n    assert(f1(1) == 2);\r\n    move_only_function<int(int) &> f2([](auto i) { return i + 1; });\r\n    assert(f2(2) == 3);\r\n    move_only_function<int(int) &&> f3([](auto i) { return i + 1; });\r\n    assert(move(f3)(3) == 4);\r\n\r\n    move_only_function<int(int) const> f1c([](auto i) { return i + 1; });\r\n    assert(f1c(4) == 5);\r\n    move_only_function<int(int) const&> f2c([](auto i) { return i + 1; });\r\n    assert(f2c(5) == 6);\r\n    move_only_function<int(int) const&&> f3c([](auto i) { return i + 1; });\r\n    assert(move(f3c)(6) == 7);\r\n\r\n    move_only_function<int(int) noexcept> f1_nx([](auto i) noexcept { return i + 1; });\r\n    assert(f1_nx(1) == 2);\r\n    move_only_function<int(int) & noexcept> f2_nx([](auto i) noexcept { return i + 1; });\r\n    assert(f2_nx(2) == 3);\r\n    move_only_function<int(int) && noexcept> f3_nx([](auto i) noexcept { return i + 1; });\r\n    assert(move(f3_nx)(3) == 4);\r\n\r\n    move_only_function<int(int) const noexcept> f1c_nx([](auto i) noexcept { return i + 1; });\r\n    assert(f1c_nx(4) == 5);\r\n    move_only_function<int(int) const & noexcept> f2c_nx([](auto i) noexcept { return i + 1; });\r\n    assert(f2c_nx(5) == 6);\r\n    move_only_function<int(int) const && noexcept> f3c_nx([](auto i) noexcept { return i + 1; });\r\n    assert(move(f3c_nx)(6) == 7);\r\n}\r\n\r\nstatic_assert(is_same_v<move_only_function<void()>::result_type, void>);\r\nstatic_assert(is_same_v<move_only_function<short(long&) &>::result_type, short>);\r\nstatic_assert(is_same_v<move_only_function<int(char*) &&>::result_type, int>);\r\nstatic_assert(is_same_v<move_only_function<void() const>::result_type, void>);\r\nstatic_assert(is_same_v<move_only_function<short(long&) const&>::result_type, short>);\r\nstatic_assert(is_same_v<move_only_function<int(char*) const&&>::result_type, int>);\r\n\r\n#ifdef __cpp_noexcept_function_type\r\nstatic_assert(is_same_v<move_only_function<void() noexcept>::result_type, void>);\r\nstatic_assert(is_same_v<move_only_function<short(long&) & noexcept>::result_type, short>);\r\nstatic_assert(is_same_v<move_only_function<int(char*) && noexcept>::result_type, int>);\r\nstatic_assert(is_same_v<move_only_function<void() const noexcept>::result_type, void>);\r\nstatic_assert(is_same_v<move_only_function<short(long&) const & noexcept>::result_type, short>);\r\nstatic_assert(is_same_v<move_only_function<int(char*) const && noexcept>::result_type, int>);\r\n#endif // ^^^ defined(__cpp_noexcept_function_type) ^^^\r\n\r\nbool fail_allocations = false;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\nvoid* operator new(size_t size) {\r\n#pragma warning(pop)\r\n    if (fail_allocations) {\r\n        throw bad_alloc{};\r\n    }\r\n    void* result = size > 0 ? malloc(size) : malloc(1);\r\n    if (!result) {\r\n        throw bad_alloc{};\r\n    }\r\n    return result;\r\n}\r\n\r\nvoid operator delete(void* p) noexcept {\r\n    free(p);\r\n}\r\n\r\nvoid test_except() {\r\n    struct throwing {\r\n        throwing() = default;\r\n        throwing(throwing&&) { // not noexcept to avoid small functor optimization\r\n            throw runtime_error{\"boo\"};\r\n        }\r\n        void operator()() {}\r\n    };\r\n\r\n    struct not_throwing {\r\n        not_throwing() = default;\r\n        not_throwing(not_throwing&&) {} // not noexcept to avoid small functor optimization\r\n        void operator()() {}\r\n    };\r\n\r\n    try {\r\n        move_only_function<void()> f{throwing{}};\r\n        assert(false); // unreachable\r\n    } catch (const runtime_error&) {\r\n    }\r\n\r\n    try {\r\n        fail_allocations = true;\r\n        move_only_function<void()> f{not_throwing{}};\r\n        assert(false); // unreachable\r\n    } catch (const bad_alloc&) {\r\n        fail_allocations = false;\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_construct_impl<small_callable>(38);\r\n    test_construct_impl<large_callable>(39);\r\n    test_construct_impl<odd_cc_callable>(40);\r\n    test_construct_impl<large_implicit_ptr_callable>(41);\r\n    test_construct_impl<decltype(&plain_callable)>(42, plain_callable);\r\n    test_assign();\r\n    test_swap();\r\n    test_empty();\r\n    test_ptr();\r\n    test_inner();\r\n    test_inplace_list();\r\n    test_noexcept();\r\n    test_const();\r\n    test_qual();\r\n    test_except();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0295R0_gcd_lcm/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0295R0_gcd_lcm/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <limits>\r\n#include <numeric>\r\n\r\nusing std::gcd;\r\nusing std::lcm;\r\n\r\nconstexpr auto int_min = std::numeric_limits<int>::min();\r\nconstexpr auto int_max = std::numeric_limits<int>::max();\r\n\r\nstatic_assert(gcd(0, 0) == 0);\r\nstatic_assert(gcd(0, 1) == 1);\r\nstatic_assert(gcd(1, 0) == 1);\r\nstatic_assert(gcd(0, 1) == 1);\r\nstatic_assert(gcd(60, 24) == 12);\r\nstatic_assert(gcd(196, 42) == 14);\r\nstatic_assert(gcd(54, 24) == 6);\r\n\r\nstatic_assert(gcd(0, -1) == 1);\r\nstatic_assert(gcd(-1, 0) == 1);\r\nstatic_assert(gcd(0, -1) == 1);\r\nstatic_assert(gcd(-60, -24) == 12);\r\nstatic_assert(gcd(-196, -42) == 14);\r\nstatic_assert(gcd(-54, -24) == 6);\r\n\r\nstatic_assert(gcd(0, 1) == 1);\r\nstatic_assert(gcd(-1, 0) == 1);\r\nstatic_assert(gcd(0, 1) == 1);\r\nstatic_assert(gcd(-60, 24) == 12);\r\nstatic_assert(gcd(-196, 42) == 14);\r\nstatic_assert(gcd(-54, 24) == 6);\r\n\r\nstatic_assert(gcd(1073741824, 536870912) == 536870912);\r\nstatic_assert(gcd(1073741824, -536870912) == 536870912);\r\nstatic_assert(gcd(-1073741824, 536870912) == 536870912);\r\nstatic_assert(gcd(int_max, int_max) == int_max);\r\n// gcd(int_min, int_max) -> undefined behavior\r\n// gcd(int_min, int_min) -> undefined behavior\r\nstatic_assert(gcd(int_min + 1, int_min + 1) == int_max);\r\n\r\nstatic_assert(gcd(4294967296ULL, 65536L) == 65536ULL);\r\nstatic_assert(gcd(4294967296ULL, 65536UL) == 65536ULL);\r\n\r\nstatic_assert(lcm(0, 0) == 0);\r\nstatic_assert(lcm(0, 1) == 0);\r\nstatic_assert(lcm(1, 0) == 0);\r\nstatic_assert(lcm(1073741824, 536870912) == 1073741824);\r\nstatic_assert(lcm(1073741824, -536870912) == 1073741824);\r\nstatic_assert(lcm(-1073741824, 536870912) == 1073741824);\r\n\r\ntemplate <class T>\r\nconstexpr bool test_nonbool_integral_type() {\r\n    static_assert(gcd(T{60}, T{24}) == T{12});\r\n    static_assert(lcm(T{60}, T{24}) == T{120});\r\n    return true;\r\n}\r\n\r\nstatic_assert(test_nonbool_integral_type<char>());\r\nstatic_assert(test_nonbool_integral_type<wchar_t>());\r\n#ifdef __cpp_char8_t\r\nstatic_assert(test_nonbool_integral_type<char8_t>());\r\n#endif // __cpp_char8_t\r\nstatic_assert(test_nonbool_integral_type<char16_t>());\r\nstatic_assert(test_nonbool_integral_type<char32_t>());\r\nstatic_assert(test_nonbool_integral_type<signed char>());\r\nstatic_assert(test_nonbool_integral_type<short>());\r\nstatic_assert(test_nonbool_integral_type<int>());\r\nstatic_assert(test_nonbool_integral_type<long>());\r\nstatic_assert(test_nonbool_integral_type<long long>());\r\nstatic_assert(test_nonbool_integral_type<unsigned char>());\r\nstatic_assert(test_nonbool_integral_type<unsigned short>());\r\nstatic_assert(test_nonbool_integral_type<unsigned int>());\r\nstatic_assert(test_nonbool_integral_type<unsigned long>());\r\nstatic_assert(test_nonbool_integral_type<unsigned long long>());\r\n"
  },
  {
    "path": "tests/std/tests/P0323R12_expected/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0323R12_expected/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <any>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <exception>\r\n#include <expected>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <is_permissive.hpp> // noexcept operator possibly gives wrong values in permissive modes\r\n\r\nusing namespace std;\r\n\r\nenum class IsDefaultConstructible : bool { Not, Yes };\r\nenum class IsTriviallyCopyConstructible : bool { Not, Yes };\r\nenum class IsTriviallyMoveConstructible : bool { Not, Yes };\r\nenum class IsTriviallyCopyAssignable : bool { Not, Yes };\r\nenum class IsTriviallyMoveAssignable : bool { Not, Yes };\r\nenum class IsTriviallyDestructible : bool { Not, Yes };\r\n\r\nenum class IsNothrowConstructible : bool { Not, Yes };\r\nenum class IsNothrowCopyConstructible : bool { Not, Yes };\r\nenum class IsNothrowMoveConstructible : bool { Not, Yes };\r\nenum class IsNothrowCopyAssignable : bool { Not, Yes };\r\nenum class IsNothrowMoveAssignable : bool { Not, Yes };\r\nenum class IsNothrowConvertible : bool { Not, Yes };\r\nenum class IsNothrowComparable : bool { Not, Yes };\r\nenum class IsNothrowSwappable : bool { Not, Yes };\r\n\r\nenum class IsExplicitConstructible : bool { Not, Yes };\r\n\r\ntemplate <typename E>\r\n[[nodiscard]] constexpr bool IsYes(const E e) noexcept {\r\n    return e == E::Yes;\r\n}\r\n\r\nstruct convertible {\r\n    constexpr convertible() = default;\r\n    constexpr convertible(const int val) noexcept : _val(val) {}\r\n\r\n    [[nodiscard]] constexpr bool operator==(const int other) const noexcept {\r\n        return other == _val;\r\n    }\r\n\r\n    int _val = 0;\r\n};\r\n\r\nnamespace test_unexpected {\r\n    template <IsNothrowCopyConstructible nothrowCopyConstructible, IsNothrowMoveConstructible nothrowMoveConstructible,\r\n        IsNothrowComparable nothrowComparable>\r\n    constexpr void test() {\r\n        constexpr bool copy_construction_is_noexcept = IsYes(nothrowCopyConstructible);\r\n        constexpr bool move_construction_is_noexcept = IsYes(nothrowMoveConstructible);\r\n        constexpr bool compare_is_noexcept           = IsYes(nothrowComparable);\r\n\r\n        struct test_error {\r\n            constexpr test_error(const int& val) noexcept(copy_construction_is_noexcept) : _val(val) {}\r\n            constexpr test_error(int&& val) noexcept(move_construction_is_noexcept) : _val(val) {}\r\n\r\n            constexpr test_error(initializer_list<int>, const int& val) noexcept(copy_construction_is_noexcept)\r\n                : _val(val) {}\r\n            constexpr test_error(initializer_list<int>, int&& val) noexcept(move_construction_is_noexcept)\r\n                : _val(val) {}\r\n\r\n            constexpr test_error(const convertible& other) noexcept(copy_construction_is_noexcept) : _val(other._val) {}\r\n            constexpr test_error(convertible&& other) noexcept(move_construction_is_noexcept) : _val(other._val) {}\r\n\r\n            [[nodiscard]] constexpr bool operator==(const test_error& right) const noexcept(compare_is_noexcept) {\r\n                return _val == right._val;\r\n            }\r\n            [[nodiscard]] constexpr bool operator==(const convertible& right) const noexcept(compare_is_noexcept) {\r\n                return _val == right._val;\r\n            }\r\n\r\n            int _val = 0;\r\n        };\r\n        using Unexpect = unexpected<test_error>;\r\n\r\n        // [expected.un.ctor]\r\n        const int& input = 1;\r\n        Unexpect in_place_lvalue_constructed{in_place, input};\r\n        static_assert(noexcept(Unexpect{in_place, input}) == copy_construction_is_noexcept || is_permissive);\r\n        assert(in_place_lvalue_constructed == Unexpect{test_error{1}});\r\n\r\n        Unexpect in_place_rvalue_constructed{in_place, 42};\r\n        static_assert(noexcept(Unexpect{in_place, 42}) == move_construction_is_noexcept || is_permissive);\r\n        assert(in_place_rvalue_constructed == Unexpect{test_error{42}});\r\n\r\n        Unexpect in_place_ilist_lvalue_constructed{in_place, {2}, input};\r\n        static_assert(noexcept(Unexpect{in_place, {2}, input}) == copy_construction_is_noexcept || is_permissive);\r\n        assert(in_place_ilist_lvalue_constructed == Unexpect{test_error{1}});\r\n\r\n        Unexpect in_place_ilist_rvalue_constructed{in_place, {2}, 1337};\r\n        static_assert(noexcept(Unexpect{in_place, {2}, 1337}) == move_construction_is_noexcept || is_permissive);\r\n        assert(in_place_ilist_rvalue_constructed == Unexpect{test_error{1337}});\r\n\r\n        Unexpect base_error_constructed{test_error{3}};\r\n        static_assert(noexcept(Unexpect{test_error{3}}) == move_construction_is_noexcept || is_permissive);\r\n        assert(base_error_constructed.error()._val == 3);\r\n\r\n        Unexpect conversion_error_constructed{convertible{4}};\r\n        static_assert(noexcept(Unexpect{convertible{4}}) == move_construction_is_noexcept || is_permissive);\r\n        assert(conversion_error_constructed.error()._val == 4);\r\n\r\n        Unexpect brace_error_constructed{{5}};\r\n        static_assert(noexcept(Unexpect{{5}}) == move_construction_is_noexcept || is_permissive);\r\n        assert(brace_error_constructed.error()._val == 5);\r\n\r\n        // [expected.un.eq]\r\n        assert(in_place_lvalue_constructed == in_place_lvalue_constructed);\r\n        assert(in_place_lvalue_constructed != in_place_rvalue_constructed);\r\n        static_assert(noexcept(in_place_lvalue_constructed == in_place_lvalue_constructed) == compare_is_noexcept);\r\n        static_assert(noexcept(in_place_lvalue_constructed != in_place_lvalue_constructed) == compare_is_noexcept);\r\n\r\n        const auto converted = unexpected<convertible>{convertible{3}};\r\n        assert(base_error_constructed == converted);\r\n        assert(conversion_error_constructed != converted);\r\n        static_assert(noexcept(base_error_constructed == converted) == compare_is_noexcept);\r\n        static_assert(noexcept(conversion_error_constructed != converted) == compare_is_noexcept);\r\n\r\n        // [expected.un.swap]\r\n        in_place_lvalue_constructed.swap(in_place_rvalue_constructed);\r\n        assert(in_place_lvalue_constructed == Unexpect{test_error{42}});\r\n        assert(in_place_rvalue_constructed == Unexpect{test_error{1}});\r\n        static_assert(noexcept(in_place_lvalue_constructed.swap(in_place_rvalue_constructed)));\r\n\r\n        swap(base_error_constructed, conversion_error_constructed);\r\n        assert(base_error_constructed == Unexpect{test_error{4}});\r\n        assert(conversion_error_constructed == Unexpect{test_error{3}});\r\n        static_assert(noexcept(swap(base_error_constructed, conversion_error_constructed)));\r\n\r\n        // [expected.un.obs]\r\n        auto&& lvalue_error = base_error_constructed.error();\r\n        assert(lvalue_error == test_error{4});\r\n        static_assert(is_same_v<decltype(lvalue_error), test_error&>);\r\n\r\n        auto&& rvalue_error = move(conversion_error_constructed).error();\r\n        assert(rvalue_error == test_error{3});\r\n        static_assert(is_same_v<decltype(rvalue_error), test_error&&>);\r\n\r\n        auto&& const_lvalue_error = as_const(in_place_lvalue_constructed).error();\r\n        assert(const_lvalue_error == test_error{42});\r\n        static_assert(is_same_v<decltype(const_lvalue_error), const test_error&>);\r\n\r\n        auto&& const_rvalue_error = move(as_const(in_place_ilist_lvalue_constructed)).error();\r\n        assert(const_rvalue_error == test_error{1});\r\n        static_assert(is_same_v<decltype(const_rvalue_error), const test_error&&>);\r\n\r\n        // deduction guide\r\n        unexpected deduced(test_error{42});\r\n        static_assert(same_as<decltype(deduced), Unexpect>);\r\n    }\r\n\r\n    constexpr bool test_all() {\r\n        test<IsNothrowCopyConstructible::Not, IsNothrowMoveConstructible::Not, IsNothrowComparable::Not>();\r\n        test<IsNothrowCopyConstructible::Not, IsNothrowMoveConstructible::Not, IsNothrowComparable::Yes>();\r\n        test<IsNothrowCopyConstructible::Not, IsNothrowMoveConstructible::Yes, IsNothrowComparable::Not>();\r\n        test<IsNothrowCopyConstructible::Not, IsNothrowMoveConstructible::Yes, IsNothrowComparable::Yes>();\r\n        test<IsNothrowCopyConstructible::Yes, IsNothrowMoveConstructible::Not, IsNothrowComparable::Not>();\r\n        test<IsNothrowCopyConstructible::Yes, IsNothrowMoveConstructible::Not, IsNothrowComparable::Yes>();\r\n        test<IsNothrowCopyConstructible::Yes, IsNothrowMoveConstructible::Yes, IsNothrowComparable::Not>();\r\n        test<IsNothrowCopyConstructible::Yes, IsNothrowMoveConstructible::Yes, IsNothrowComparable::Yes>();\r\n\r\n        return true;\r\n    }\r\n} // namespace test_unexpected\r\n\r\nnamespace test_unexpect {\r\n    auto copy = unexpect;\r\n    static_assert(is_same_v<decltype(copy), unexpect_t>);\r\n    static_assert(is_trivially_copyable_v<unexpect_t>);\r\n    static_assert(is_trivially_default_constructible_v<unexpect_t>);\r\n    static_assert(is_empty_v<unexpect_t>);\r\n} // namespace test_unexpect\r\n\r\nnamespace test_expected {\r\n    constexpr void test_aliases() {\r\n        struct value_tag {};\r\n        struct error_tag {};\r\n\r\n        {\r\n            using Expected = expected<value_tag, error_tag>;\r\n            static_assert(same_as<typename Expected::value_type, value_tag>);\r\n            static_assert(same_as<typename Expected::error_type, error_tag>);\r\n            static_assert(same_as<typename Expected::unexpected_type, unexpected<error_tag>>);\r\n\r\n            static_assert(same_as<typename Expected::rebind<int>, expected<int, error_tag>>);\r\n        }\r\n\r\n        {\r\n            using Expected = expected<void, error_tag>;\r\n            static_assert(same_as<typename Expected::value_type, void>);\r\n            static_assert(same_as<typename Expected::error_type, error_tag>);\r\n            static_assert(same_as<typename Expected::unexpected_type, unexpected<error_tag>>);\r\n\r\n            static_assert(same_as<typename Expected::rebind<int>, expected<int, error_tag>>);\r\n        }\r\n    }\r\n\r\n    template <IsDefaultConstructible defaultConstructible>\r\n    constexpr void test_default_constructors() {\r\n#ifndef __EDG__ // TRANSITION, VSO-1898929\r\n        constexpr bool should_be_defaultable = IsYes(defaultConstructible);\r\n\r\n        struct payload_default_constructor {\r\n            constexpr payload_default_constructor()\r\n                requires (IsYes(defaultConstructible))\r\n                : _val(42) {}\r\n\r\n            [[nodiscard]] constexpr bool operator==(const int val) const noexcept {\r\n                return _val == val;\r\n            }\r\n\r\n            int _val = 0;\r\n        };\r\n\r\n        static_assert(is_default_constructible_v<expected<payload_default_constructor, int>> == should_be_defaultable);\r\n        // we only care about payload type\r\n        static_assert(is_default_constructible_v<expected<int, payload_default_constructor>>);\r\n        static_assert(is_default_constructible_v<expected<void, payload_default_constructor>>);\r\n\r\n        if constexpr (should_be_defaultable) {\r\n            const expected<payload_default_constructor, int> defaulted;\r\n            assert(defaulted);\r\n            assert(defaulted.value() == 42);\r\n        }\r\n#endif // ^^^ no workaround ^^^\r\n    }\r\n\r\n    template <IsTriviallyCopyConstructible triviallyCopyConstructible,\r\n        IsNothrowCopyConstructible nothrowCopyConstructible>\r\n    constexpr void test_copy_constructors() {\r\n#ifndef __EDG__ // TRANSITION, VSO-1898929\r\n        constexpr bool should_be_trivial  = IsYes(triviallyCopyConstructible);\r\n        constexpr bool should_be_noexcept = should_be_trivial || IsYes(nothrowCopyConstructible);\r\n\r\n        struct payload_copy_constructor {\r\n            payload_copy_constructor()                                           = default;\r\n            payload_copy_constructor& operator=(const payload_copy_constructor&) = delete;\r\n            constexpr payload_copy_constructor(const payload_copy_constructor&) noexcept(should_be_noexcept)\r\n                requires (!should_be_trivial)\r\n                : _val(42) {}\r\n            constexpr payload_copy_constructor(const payload_copy_constructor&) = default;\r\n\r\n            [[nodiscard]] constexpr bool operator==(const int val) const noexcept {\r\n                return _val == val;\r\n            }\r\n\r\n            int _val = 0;\r\n        };\r\n\r\n        { // Check payload type\r\n            using Expected = expected<payload_copy_constructor, int>;\r\n            static_assert(is_trivially_copy_constructible_v<Expected> == should_be_trivial);\r\n            static_assert(is_copy_constructible_v<Expected>);\r\n\r\n            const Expected with_value{in_place};\r\n            const Expected from_value{with_value};\r\n            assert(from_value);\r\n            assert(from_value.value() == (should_be_trivial ? 0 : 42));\r\n            static_assert(noexcept(Expected{with_value}) == should_be_noexcept);\r\n\r\n            const Expected with_error{unexpect};\r\n            const Expected from_error{with_error};\r\n            assert(!from_error);\r\n            assert(from_error.error() == 0);\r\n            static_assert(noexcept(Expected{with_error}) == should_be_noexcept);\r\n        }\r\n\r\n        { // Check error type\r\n            using Expected = expected<int, payload_copy_constructor>;\r\n            static_assert(is_trivially_copy_constructible_v<Expected> == should_be_trivial);\r\n            static_assert(is_copy_constructible_v<Expected>);\r\n\r\n            const Expected with_value{in_place};\r\n            const Expected from_value{with_value};\r\n            assert(from_value);\r\n            assert(from_value.value() == 0);\r\n            static_assert(noexcept(Expected{with_value}) == should_be_noexcept);\r\n\r\n            const Expected with_error{unexpect};\r\n            const Expected from_error{with_error};\r\n            assert(!from_error);\r\n            assert(from_error.error() == (should_be_trivial ? 0 : 42));\r\n            static_assert(noexcept(Expected{with_error}) == should_be_noexcept);\r\n        }\r\n\r\n        { // Check void payload\r\n            using Expected = expected<void, payload_copy_constructor>;\r\n            static_assert(is_trivially_copy_constructible_v<Expected> == should_be_trivial);\r\n            static_assert(is_copy_constructible_v<Expected>);\r\n\r\n            const Expected with_value{in_place};\r\n            const Expected from_value{with_value};\r\n            assert(from_value);\r\n            static_assert(noexcept(Expected{with_value}) == should_be_noexcept);\r\n\r\n            const Expected with_error{unexpect};\r\n            const Expected from_error{with_error};\r\n            assert(!from_error);\r\n            assert(from_error.error() == (should_be_trivial ? 0 : 42));\r\n            static_assert(noexcept(Expected{with_error}) == should_be_noexcept);\r\n        }\r\n#endif // ^^^ no workaround ^^^\r\n\r\n        { // ensure we are not copy constructible if either the payload or the error are not\r\n            struct not_copy_constructible {\r\n                not_copy_constructible(const not_copy_constructible&) = delete;\r\n            };\r\n\r\n            static_assert(!is_copy_constructible_v<expected<not_copy_constructible, int>>);\r\n            static_assert(!is_copy_constructible_v<expected<int, not_copy_constructible>>);\r\n            static_assert(!is_copy_constructible_v<expected<void, not_copy_constructible>>);\r\n        }\r\n    }\r\n\r\n    template <IsTriviallyMoveConstructible triviallyMoveConstructible,\r\n        IsNothrowMoveConstructible nothrowMoveConstructible>\r\n    constexpr void test_move_constructors() {\r\n#ifndef __EDG__ // TRANSITION, VSO-1898929\r\n        constexpr bool should_be_trivial  = IsYes(triviallyMoveConstructible);\r\n        constexpr bool should_be_noexcept = should_be_trivial || IsYes(nothrowMoveConstructible);\r\n\r\n        struct payload_move_constructor {\r\n            payload_move_constructor()                                      = default;\r\n            payload_move_constructor(const payload_move_constructor&)       = default;\r\n            payload_move_constructor& operator=(payload_move_constructor&&) = delete;\r\n            constexpr payload_move_constructor(payload_move_constructor&&) noexcept(should_be_noexcept)\r\n                requires (!should_be_trivial)\r\n                : _val(42) {}\r\n            constexpr payload_move_constructor(payload_move_constructor&&) = default;\r\n\r\n            [[nodiscard]] constexpr bool operator==(const int val) const noexcept {\r\n                return _val == val;\r\n            }\r\n\r\n            int _val = 0;\r\n        };\r\n\r\n        { // Check payload type\r\n            using Expected = expected<payload_move_constructor, int>;\r\n            static_assert(is_trivially_move_constructible_v<Expected> == should_be_trivial);\r\n            static_assert(is_move_constructible_v<Expected>);\r\n\r\n            Expected value_input{in_place};\r\n            const Expected from_value{move(value_input)};\r\n            assert(from_value);\r\n            assert(from_value.value() == (should_be_trivial ? 0 : 42));\r\n            static_assert(noexcept(Expected{move(value_input)}) == should_be_noexcept);\r\n\r\n            Expected error_input{unexpect};\r\n            const Expected from_error{move(error_input)};\r\n            assert(!from_error);\r\n            assert(from_error.error() == 0);\r\n            static_assert(noexcept(Expected{move(error_input)}) == should_be_noexcept);\r\n        }\r\n\r\n        { // Check error type\r\n            using Expected = expected<int, payload_move_constructor>;\r\n            static_assert(is_trivially_move_constructible_v<Expected> == should_be_trivial);\r\n            static_assert(is_move_constructible_v<Expected>);\r\n\r\n            Expected value_input{in_place};\r\n            const Expected from_value{move(value_input)};\r\n            assert(from_value);\r\n            assert(from_value.value() == 0);\r\n            static_assert(noexcept(Expected{move(value_input)}) == should_be_noexcept);\r\n\r\n            Expected error_input{unexpect};\r\n            const Expected from_error{move(error_input)};\r\n            assert(!from_error);\r\n            assert(from_error.error() == (should_be_trivial ? 0 : 42));\r\n            static_assert(noexcept(Expected{move(error_input)}) == should_be_noexcept);\r\n        }\r\n\r\n        { // Check void payload\r\n            using Expected = expected<void, payload_move_constructor>;\r\n            static_assert(is_trivially_move_constructible_v<Expected> == should_be_trivial);\r\n            static_assert(is_move_constructible_v<Expected>);\r\n\r\n            Expected value_input{in_place};\r\n            const Expected from_value{move(value_input)};\r\n            assert(from_value);\r\n            static_assert(noexcept(Expected{move(value_input)}) == should_be_noexcept);\r\n\r\n            Expected error_input{unexpect};\r\n            const Expected from_error{move(error_input)};\r\n            assert(!from_error);\r\n            assert(from_error.error() == (should_be_trivial ? 0 : 42));\r\n            static_assert(noexcept(Expected{move(error_input)}) == should_be_noexcept);\r\n        }\r\n#endif // ^^^ no workaround ^^^\r\n\r\n        { // ensure we are not move constructible if either the payload or the error are not\r\n            struct not_move_constructible {\r\n                not_move_constructible(not_move_constructible&&) = delete;\r\n            };\r\n\r\n            static_assert(!is_move_constructible_v<expected<not_move_constructible, int>>);\r\n            static_assert(!is_move_constructible_v<expected<int, not_move_constructible>>);\r\n            static_assert(!is_move_constructible_v<expected<void, not_move_constructible>>);\r\n        }\r\n    }\r\n\r\n    template <IsTriviallyDestructible triviallyDestructible>\r\n    struct payload_destructor {\r\n        constexpr payload_destructor(bool& destructor_called) : _destructor_called(destructor_called) {}\r\n        constexpr ~payload_destructor()\r\n            requires (IsYes(triviallyDestructible))\r\n        = default;\r\n        constexpr ~payload_destructor() {\r\n            _destructor_called = true;\r\n        }\r\n\r\n        bool& _destructor_called;\r\n    };\r\n    template <IsTriviallyDestructible triviallyDestructible>\r\n    constexpr void test_destructors() {\r\n        constexpr bool is_trivial = IsYes(triviallyDestructible);\r\n        bool destructor_called    = false;\r\n        { // Check payload\r\n            using Expected = expected<payload_destructor<triviallyDestructible>, int>;\r\n            static_assert(is_trivially_destructible_v<Expected> == is_trivial);\r\n\r\n            Expected val{in_place, destructor_called};\r\n        }\r\n        assert(destructor_called == !is_trivial);\r\n        destructor_called = false;\r\n\r\n        { // Check error\r\n            using Expected = expected<int, payload_destructor<triviallyDestructible>>;\r\n            static_assert(is_trivially_destructible_v<Expected> == is_trivial);\r\n\r\n            Expected err{unexpect, destructor_called};\r\n        }\r\n        assert(destructor_called == !is_trivial);\r\n        destructor_called = false;\r\n\r\n        { // Check void error\r\n            using Expected = expected<void, payload_destructor<triviallyDestructible>>;\r\n            static_assert(is_trivially_destructible_v<Expected> == is_trivial);\r\n\r\n            Expected err{unexpect, destructor_called};\r\n        }\r\n        assert(destructor_called == !is_trivial);\r\n    }\r\n\r\n    constexpr void test_special_members() {\r\n        test_default_constructors<IsDefaultConstructible::Not>();\r\n        test_default_constructors<IsDefaultConstructible::Yes>();\r\n\r\n        test_copy_constructors<IsTriviallyCopyConstructible::Not, IsNothrowCopyConstructible::Not>();\r\n        test_copy_constructors<IsTriviallyCopyConstructible::Not, IsNothrowCopyConstructible::Yes>();\r\n        test_copy_constructors<IsTriviallyCopyConstructible::Yes, IsNothrowCopyConstructible::Not>();\r\n        test_copy_constructors<IsTriviallyCopyConstructible::Yes, IsNothrowCopyConstructible::Yes>();\r\n\r\n        test_move_constructors<IsTriviallyMoveConstructible::Not, IsNothrowMoveConstructible::Not>();\r\n        test_move_constructors<IsTriviallyMoveConstructible::Not, IsNothrowMoveConstructible::Yes>();\r\n        test_move_constructors<IsTriviallyMoveConstructible::Yes, IsNothrowMoveConstructible::Not>();\r\n        test_move_constructors<IsTriviallyMoveConstructible::Yes, IsNothrowMoveConstructible::Yes>();\r\n\r\n        test_destructors<IsTriviallyDestructible::Not>();\r\n        test_destructors<IsTriviallyDestructible::Yes>();\r\n    }\r\n\r\n    template <IsNothrowConstructible nothrowConstructible, IsExplicitConstructible explicitConstructible>\r\n    constexpr void test_constructors() noexcept {\r\n        constexpr bool should_be_noexcept = IsYes(nothrowConstructible);\r\n        constexpr bool should_be_explicit = IsYes(explicitConstructible);\r\n\r\n        struct payload_constructors {\r\n            payload_constructors() = default;\r\n            // Note clang does not accept local variables in explicit\r\n            constexpr explicit(IsYes(explicitConstructible)) payload_constructors(const convertible&)\r\n                noexcept(should_be_noexcept)\r\n                : _val(3) {}\r\n            constexpr explicit(IsYes(explicitConstructible)) payload_constructors(convertible&&)\r\n                noexcept(should_be_noexcept)\r\n                : _val(42) {}\r\n            constexpr explicit(IsYes(explicitConstructible)) payload_constructors(initializer_list<int>&, convertible)\r\n                noexcept(should_be_noexcept)\r\n                : _val(1337) {}\r\n\r\n            [[nodiscard]] constexpr bool operator==(const int val) const noexcept {\r\n                return _val == val;\r\n            }\r\n\r\n            int _val = 0;\r\n        };\r\n\r\n        { // constructing from convertible payload\r\n            using Input    = convertible;\r\n            using Expected = expected<payload_constructors, payload_constructors>;\r\n            static_assert(is_convertible_v<const Input&, Expected> != should_be_explicit);\r\n            static_assert(is_convertible_v<Input, Expected> != should_be_explicit);\r\n\r\n            const Input const_input_value{};\r\n            const Expected copy_constructed_value{const_input_value};\r\n            assert(copy_constructed_value);\r\n            assert(copy_constructed_value.value() == 3);\r\n            static_assert(noexcept(Expected{const_input_value}) == should_be_noexcept || is_permissive);\r\n\r\n            const Expected move_constructed_value{Input{}};\r\n            assert(move_constructed_value);\r\n            assert(move_constructed_value.value() == 42);\r\n            static_assert(noexcept(Expected{Input{}}) == should_be_noexcept || is_permissive);\r\n\r\n            const Expected brace_constructed_value{{}};\r\n            assert(brace_constructed_value);\r\n            assert(brace_constructed_value.value() == 0);\r\n            static_assert(noexcept(Expected{{}}));\r\n        }\r\n\r\n        { // converting from different expected\r\n            using Input    = expected<convertible, convertible>;\r\n            using Expected = expected<payload_constructors, payload_constructors>;\r\n            static_assert(is_convertible_v<const Input&, Expected> != should_be_explicit);\r\n            static_assert(is_convertible_v<Input, Expected> != should_be_explicit);\r\n\r\n            const Input const_input_value{};\r\n            const Expected copy_constructed_value{const_input_value};\r\n            assert(copy_constructed_value);\r\n            assert(copy_constructed_value.value() == 3);\r\n            static_assert(noexcept(Expected{const_input_value}) == should_be_noexcept);\r\n\r\n            const Expected move_constructed_value{Input{in_place}};\r\n            assert(move_constructed_value);\r\n            assert(move_constructed_value.value() == 42);\r\n            static_assert(noexcept(Expected{Input{in_place}}) == should_be_noexcept || is_permissive);\r\n\r\n            const Input const_input_error{unexpect};\r\n            const Expected copy_constructed_error{const_input_error};\r\n            assert(!copy_constructed_error);\r\n            assert(copy_constructed_error.error() == 3);\r\n            static_assert(noexcept(Expected{const_input_error}) == should_be_noexcept);\r\n\r\n            const Expected move_constructed_error{Input{unexpect}};\r\n            assert(!move_constructed_error);\r\n            assert(move_constructed_error.error() == 42);\r\n            static_assert(noexcept(Expected{Input{unexpect}}) == should_be_noexcept || is_permissive);\r\n        }\r\n\r\n        { // converting from unexpected\r\n            using Input    = unexpected<convertible>;\r\n            using Expected = expected<int, payload_constructors>;\r\n\r\n            const Input const_input{in_place};\r\n            const Expected copy_constructed{const_input};\r\n            assert(!copy_constructed);\r\n            assert(copy_constructed.error() == 3);\r\n            static_assert(noexcept(Expected{const_input}) == should_be_noexcept || is_permissive);\r\n\r\n            const Expected move_constructed{Input{in_place}};\r\n            assert(!move_constructed);\r\n            assert(move_constructed.error() == 42);\r\n            static_assert(noexcept(Expected{Input{in_place}}) == should_be_noexcept || is_permissive);\r\n        }\r\n\r\n        { // in place payload\r\n            using Expected = expected<payload_constructors, int>;\r\n            const Expected default_constructed{in_place};\r\n            assert(default_constructed);\r\n            assert(default_constructed.value() == 0);\r\n            static_assert(noexcept(Expected{in_place}));\r\n\r\n            const Expected value_constructed{in_place, convertible{}};\r\n            assert(value_constructed);\r\n            assert(value_constructed.value() == 42);\r\n            static_assert(noexcept(Expected{in_place, convertible{}}) == should_be_noexcept || is_permissive);\r\n\r\n            const Expected ilist_value_constructed{in_place, {1}, convertible{}};\r\n            assert(ilist_value_constructed);\r\n            assert(ilist_value_constructed.value() == 1337);\r\n            static_assert(noexcept(Expected{in_place, {1}, convertible{}}) == should_be_noexcept || is_permissive);\r\n        }\r\n\r\n        { // in place error\r\n            using Expected = expected<int, payload_constructors>;\r\n            const Expected default_constructed{unexpect};\r\n            assert(!default_constructed);\r\n            assert(default_constructed.error() == 0);\r\n            static_assert(noexcept(Expected{unexpect}));\r\n\r\n            const Expected value_constructed{unexpect, convertible{}};\r\n            assert(!value_constructed);\r\n            assert(value_constructed.error() == 42);\r\n            static_assert(noexcept(Expected{unexpect, convertible{}}) == should_be_noexcept || is_permissive);\r\n\r\n            const Expected ilist_value_constructed{unexpect, {1}, convertible{}};\r\n            assert(!ilist_value_constructed);\r\n            assert(ilist_value_constructed.error() == 1337);\r\n            static_assert(noexcept(Expected{unexpect, {1}, convertible{}}) == should_be_noexcept || is_permissive);\r\n        }\r\n\r\n        { // expected<void, E>: converting from different expected\r\n            using Input    = expected<void, convertible>;\r\n            using Expected = expected<void, payload_constructors>;\r\n            static_assert(is_convertible_v<const Input&, Expected> != should_be_explicit);\r\n            static_assert(is_convertible_v<Input, Expected> != should_be_explicit);\r\n\r\n            const Input const_input_value{};\r\n            const Expected copy_constructed_value{const_input_value};\r\n            assert(copy_constructed_value);\r\n            copy_constructed_value.value();\r\n            static_assert(noexcept(Expected{const_input_value}) == should_be_noexcept);\r\n\r\n            const Expected move_constructed_value{Input{in_place}};\r\n            assert(move_constructed_value);\r\n            move_constructed_value.value();\r\n            static_assert(noexcept(Expected{Input{in_place}}) == should_be_noexcept || is_permissive);\r\n\r\n            const Input const_input_error{unexpect};\r\n            const Expected copy_constructed_error{const_input_error};\r\n            assert(!copy_constructed_error);\r\n            assert(copy_constructed_error.error() == 3);\r\n            static_assert(noexcept(Expected{const_input_error}) == should_be_noexcept);\r\n\r\n            const Expected move_constructed_error{Input{unexpect}};\r\n            assert(!move_constructed_error);\r\n            assert(move_constructed_error.error() == 42);\r\n            static_assert(noexcept(Expected{Input{unexpect}}) == should_be_noexcept || is_permissive);\r\n        }\r\n\r\n        { // expected<void, E>: converting from unexpected\r\n            using Input    = unexpected<convertible>;\r\n            using Expected = expected<void, payload_constructors>;\r\n\r\n            const Input const_input{in_place};\r\n            const Expected copy_constructed{const_input};\r\n            assert(!copy_constructed);\r\n            assert(copy_constructed.error() == 3);\r\n            static_assert(noexcept(Expected{const_input}) == should_be_noexcept || is_permissive);\r\n\r\n            const Expected move_constructed{Input{in_place}};\r\n            assert(!move_constructed);\r\n            assert(move_constructed.error() == 42);\r\n            static_assert(noexcept(Expected{Input{in_place}}) == should_be_noexcept || is_permissive);\r\n        }\r\n\r\n        { // expected<void, E>: in place payload\r\n            using Expected = expected<void, int>;\r\n            const Expected default_constructed{in_place};\r\n            assert(default_constructed);\r\n            default_constructed.value();\r\n            static_assert(noexcept(Expected{in_place}));\r\n        }\r\n\r\n        { // expected<void, E>: in place error\r\n            using Expected = expected<void, payload_constructors>;\r\n            const Expected default_constructed{unexpect};\r\n            assert(!default_constructed);\r\n            assert(default_constructed.error() == 0);\r\n            static_assert(noexcept(Expected{unexpect}));\r\n\r\n            const Expected value_constructed{unexpect, convertible{}};\r\n            assert(!value_constructed);\r\n            assert(value_constructed.error() == 42);\r\n            static_assert(noexcept(Expected{unexpect, convertible{}}) == should_be_noexcept || is_permissive);\r\n\r\n            const Expected ilist_value_constructed{unexpect, {1}, convertible{}};\r\n            assert(!ilist_value_constructed);\r\n            assert(ilist_value_constructed.error() == 1337);\r\n            static_assert(noexcept(Expected{unexpect, {1}, convertible{}}) == should_be_noexcept || is_permissive);\r\n        }\r\n    }\r\n\r\n    constexpr void test_constructors() noexcept {\r\n        test_constructors<IsNothrowConstructible::Not, IsExplicitConstructible::Not>();\r\n        test_constructors<IsNothrowConstructible::Not, IsExplicitConstructible::Yes>();\r\n        test_constructors<IsNothrowConstructible::Yes, IsExplicitConstructible::Not>();\r\n        test_constructors<IsNothrowConstructible::Yes, IsExplicitConstructible::Yes>();\r\n\r\n        // LWG-3836\r\n        struct BaseError {};\r\n        struct DerivedError : BaseError {};\r\n\r\n        expected<bool, DerivedError> e1(false);\r\n        expected<bool, BaseError> e2(e1);\r\n        assert(!e2.value());\r\n    }\r\n\r\n    template <IsNothrowCopyConstructible nothrowCopyConstructible, IsNothrowMoveConstructible nothrowMoveConstructible,\r\n        IsNothrowCopyAssignable nothrowCopyAssignable, IsNothrowMoveAssignable nothrowMoveAssignable>\r\n    constexpr void test_assignment() noexcept {\r\n        constexpr bool nothrow_copy_constructible = IsYes(nothrowCopyConstructible);\r\n        constexpr bool nothrow_move_constructible = IsYes(nothrowMoveConstructible);\r\n        constexpr bool nothrow_copy_assignable    = IsYes(nothrowCopyAssignable);\r\n        constexpr bool nothrow_move_assignable    = IsYes(nothrowMoveAssignable);\r\n\r\n        struct payload_assign {\r\n            payload_assign() = default;\r\n            constexpr payload_assign(const int val) noexcept : _val(val) {}\r\n            constexpr payload_assign(const payload_assign& other) noexcept(nothrow_copy_constructible)\r\n                : _val(other._val) {}\r\n            constexpr payload_assign(payload_assign&& other) noexcept(nothrow_move_constructible) : _val(other._val) {}\r\n            constexpr payload_assign& operator=(const payload_assign& other) noexcept(nothrow_copy_assignable) {\r\n                _val = other._val;\r\n                return *this;\r\n            }\r\n            constexpr payload_assign& operator=(payload_assign&& other) noexcept(nothrow_move_assignable) {\r\n                _val = other._val;\r\n                return *this;\r\n            }\r\n\r\n            constexpr payload_assign(const convertible& other) noexcept(nothrow_copy_constructible)\r\n                : _val(other._val) {}\r\n            constexpr payload_assign(convertible&& other) noexcept(nothrow_move_constructible) : _val(other._val) {}\r\n            constexpr payload_assign& operator=(const convertible& other) noexcept(nothrow_copy_assignable) {\r\n                _val = other._val;\r\n                return *this;\r\n            }\r\n            constexpr payload_assign& operator=(convertible&& other) noexcept(nothrow_move_assignable) {\r\n                _val = other._val;\r\n                return *this;\r\n            }\r\n\r\n            [[nodiscard]] constexpr bool operator==(const int other) const noexcept {\r\n                return other == _val;\r\n            }\r\n            int _val = 0;\r\n        };\r\n\r\n        { // assign same expected as const ref check payload\r\n            constexpr bool should_be_noexcept = nothrow_copy_constructible && nothrow_copy_assignable;\r\n            using Expected                    = expected<payload_assign, int>;\r\n            const Expected input_value{in_place, 42};\r\n            const Expected input_error{unexpect, 1337};\r\n\r\n            Expected assign_value_to_value{in_place, 1};\r\n            assign_value_to_value = input_value;\r\n            assert(assign_value_to_value);\r\n            assert(assign_value_to_value.value() == 42);\r\n            static_assert(noexcept(assign_value_to_value = input_value) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_value{in_place, 1};\r\n            assign_error_to_value = input_error;\r\n            assert(!assign_error_to_value);\r\n            assert(assign_error_to_value.error() == 1337);\r\n            static_assert(noexcept(assign_error_to_value = input_error) == should_be_noexcept);\r\n\r\n            Expected assign_value_to_error{unexpect, 1};\r\n            assign_value_to_error = input_value;\r\n            assert(assign_value_to_error);\r\n            assert(assign_value_to_error.value() == 42);\r\n            static_assert(noexcept(assign_value_to_error = input_value) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_error{unexpect, 1};\r\n            assign_error_to_error = input_error;\r\n            assert(!assign_error_to_error);\r\n            assert(assign_error_to_error.error() == 1337);\r\n            static_assert(noexcept(assign_error_to_error = input_error) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign same expected as const ref check error\r\n            constexpr bool should_be_noexcept = nothrow_copy_constructible && nothrow_copy_assignable;\r\n            using Expected                    = expected<int, payload_assign>;\r\n            const Expected input_value{in_place, 42};\r\n            const Expected input_error{unexpect, 1337};\r\n\r\n            Expected assign_value_to_value{in_place, 1};\r\n            assign_value_to_value = input_value;\r\n            assert(assign_value_to_value);\r\n            assert(assign_value_to_value.value() == 42);\r\n            static_assert(noexcept(assign_value_to_value = input_value) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_value{in_place, 1};\r\n            assign_error_to_value = input_error;\r\n            assert(!assign_error_to_value);\r\n            assert(assign_error_to_value.error() == 1337);\r\n            static_assert(noexcept(assign_error_to_value = input_error) == should_be_noexcept);\r\n\r\n            Expected assign_value_to_error{unexpect, 1};\r\n            assign_value_to_error = input_value;\r\n            assert(assign_value_to_error);\r\n            assert(assign_value_to_error.value() == 42);\r\n            static_assert(noexcept(assign_value_to_error = input_value) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_error{unexpect, 1};\r\n            assign_error_to_error = input_error;\r\n            assert(!assign_error_to_error);\r\n            assert(assign_error_to_error.error() == 1337);\r\n            static_assert(noexcept(assign_error_to_error = input_error) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign same expected<void> as const ref check error\r\n            constexpr bool should_be_noexcept = nothrow_copy_constructible && nothrow_copy_assignable;\r\n            using Expected                    = expected<void, payload_assign>;\r\n            const Expected input_value{in_place};\r\n            const Expected input_error{unexpect, 1337};\r\n\r\n            Expected assign_value_to_value{in_place};\r\n            assign_value_to_value = input_value;\r\n            assert(assign_value_to_value);\r\n            static_assert(noexcept(assign_value_to_value = input_value) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_value{in_place};\r\n            assign_error_to_value = input_error;\r\n            assert(!assign_error_to_value);\r\n            assert(assign_error_to_value.error() == 1337);\r\n            static_assert(noexcept(assign_error_to_value = input_error) == should_be_noexcept);\r\n\r\n            Expected assign_value_to_error{unexpect, 1};\r\n            assign_value_to_error = input_value;\r\n            assert(assign_value_to_error);\r\n            static_assert(noexcept(assign_value_to_error = input_value) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_error{unexpect, 1};\r\n            assign_error_to_error = input_error;\r\n            assert(!assign_error_to_error);\r\n            assert(assign_error_to_error.error() == 1337);\r\n            static_assert(noexcept(assign_error_to_error = input_error) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign same expected as rvalue check payload\r\n            constexpr bool should_be_noexcept = nothrow_move_constructible && nothrow_move_assignable;\r\n            using Expected                    = expected<payload_assign, int>;\r\n\r\n            Expected assign_value_to_value{in_place, 1};\r\n            assign_value_to_value = Expected{in_place, 42};\r\n            assert(assign_value_to_value);\r\n            assert(assign_value_to_value.value() == 42);\r\n            static_assert(noexcept(assign_value_to_value = Expected{in_place, 42}) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_value{in_place, 1};\r\n            assign_error_to_value = Expected{unexpect, 1337};\r\n            assert(!assign_error_to_value);\r\n            assert(assign_error_to_value.error() == 1337);\r\n            static_assert(noexcept(assign_error_to_value = Expected{unexpect, 1337}) == should_be_noexcept);\r\n\r\n            Expected assign_value_to_error{unexpect, 1};\r\n            assign_value_to_error = Expected{in_place, 42};\r\n            assert(assign_value_to_error);\r\n            assert(assign_value_to_error.value() == 42);\r\n            static_assert(noexcept(assign_value_to_error = Expected{in_place, 42}) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_error{unexpect, 1};\r\n            assign_error_to_error = Expected{unexpect, 1337};\r\n            assert(!assign_error_to_error);\r\n            assert(assign_error_to_error.error() == 1337);\r\n            static_assert(noexcept(assign_error_to_error = Expected{unexpect, 1337}) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign same expected as rvalue check error\r\n            constexpr bool should_be_noexcept = nothrow_move_constructible && nothrow_move_assignable;\r\n            using Expected                    = expected<int, payload_assign>;\r\n\r\n            Expected assign_value_to_value{in_place, 1};\r\n            assign_value_to_value = Expected{in_place, 42};\r\n            assert(assign_value_to_value);\r\n            assert(assign_value_to_value.value() == 42);\r\n            static_assert(noexcept(assign_value_to_value = Expected{in_place, 42}) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_value{in_place, 1};\r\n            assign_error_to_value = Expected{unexpect, 1337};\r\n            assert(!assign_error_to_value);\r\n            assert(assign_error_to_value.error() == 1337);\r\n            static_assert(noexcept(assign_error_to_value = Expected{unexpect, 1337}) == should_be_noexcept);\r\n\r\n            Expected assign_value_to_error{unexpect, 1};\r\n            assign_value_to_error = Expected{in_place, 42};\r\n            assert(assign_value_to_error);\r\n            assert(assign_value_to_error.value() == 42);\r\n            static_assert(noexcept(assign_value_to_error = Expected{in_place, 42}) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_error{unexpect, 1};\r\n            assign_error_to_error = Expected{unexpect, 1337};\r\n            assert(!assign_error_to_error);\r\n            assert(assign_error_to_error.error() == 1337);\r\n            static_assert(noexcept(assign_error_to_error = Expected{unexpect, 1337}) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign same expected<void> as rvalue check error\r\n            constexpr bool should_be_noexcept = nothrow_move_constructible && nothrow_move_assignable;\r\n            using Expected                    = expected<void, payload_assign>;\r\n\r\n            Expected assign_value_to_value{in_place};\r\n            assign_value_to_value = Expected{in_place};\r\n            assert(assign_value_to_value);\r\n            static_assert(noexcept(assign_value_to_value = Expected{in_place}) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_value{in_place};\r\n            assign_error_to_value = Expected{unexpect, 1337};\r\n            assert(!assign_error_to_value);\r\n            assert(assign_error_to_value.error() == 1337);\r\n            static_assert(noexcept(assign_error_to_value = Expected{unexpect, 1337}) == should_be_noexcept);\r\n\r\n            Expected assign_value_to_error{unexpect, 1};\r\n            assign_value_to_error = Expected{in_place};\r\n            assert(assign_value_to_error);\r\n            static_assert(noexcept(assign_value_to_error = Expected{in_place}) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_error{unexpect, 1};\r\n            assign_error_to_error = Expected{unexpect, 1337};\r\n            assert(!assign_error_to_error);\r\n            assert(assign_error_to_error.error() == 1337);\r\n            static_assert(noexcept(assign_error_to_error = Expected{unexpect, 1337}) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign base type const ref\r\n            constexpr bool should_be_noexcept = nothrow_copy_constructible && nothrow_copy_assignable;\r\n            using Expected                    = expected<payload_assign, int>;\r\n            const payload_assign input_value{42};\r\n\r\n            Expected assign_value_to_value{in_place, 1};\r\n            assign_value_to_value = input_value;\r\n            assert(assign_value_to_value);\r\n            assert(assign_value_to_value.value() == 42);\r\n            static_assert(noexcept(assign_value_to_value = input_value) == should_be_noexcept);\r\n\r\n            Expected assign_value_to_error{unexpect, 1};\r\n            assign_value_to_error = input_value;\r\n            assert(assign_value_to_error);\r\n            assert(assign_value_to_error.value() == 42);\r\n            static_assert(noexcept(assign_value_to_error = input_value) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign base type rvalue\r\n            constexpr bool should_be_noexcept = nothrow_move_constructible && nothrow_move_assignable;\r\n            using Expected                    = expected<payload_assign, int>;\r\n\r\n            Expected assign_value_to_value{in_place, 1};\r\n            assign_value_to_value = payload_assign{42};\r\n            assert(assign_value_to_value);\r\n            assert(assign_value_to_value.value() == 42);\r\n            static_assert(noexcept(assign_value_to_value = payload_assign{42}) == should_be_noexcept);\r\n\r\n            Expected assign_value_to_error{unexpect, 1};\r\n            assign_value_to_error = payload_assign{42};\r\n            assert(assign_value_to_error);\r\n            assert(assign_value_to_error.value() == 42);\r\n            static_assert(noexcept(assign_value_to_error = payload_assign{42}) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign base type braces\r\n            constexpr bool should_be_noexcept = nothrow_move_constructible && nothrow_move_assignable;\r\n            using Expected                    = expected<payload_assign, int>;\r\n\r\n            Expected assign_value_to_value{in_place, 1};\r\n            assign_value_to_value = {42};\r\n            assert(assign_value_to_value);\r\n            assert(assign_value_to_value.value() == 42);\r\n            static_assert(noexcept(assign_value_to_value = {42}) == should_be_noexcept);\r\n\r\n            Expected assign_value_to_error{unexpect, 1};\r\n            assign_value_to_error = {42};\r\n            assert(assign_value_to_error);\r\n            assert(assign_value_to_error.value() == 42);\r\n            static_assert(noexcept(assign_value_to_error = {42}) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign convertible type const ref\r\n            constexpr bool should_be_noexcept = nothrow_copy_constructible && nothrow_copy_assignable;\r\n            using Expected                    = expected<payload_assign, int>;\r\n            const convertible input_value{42};\r\n\r\n            Expected assign_value_to_value{in_place, 1};\r\n            assign_value_to_value = input_value;\r\n            assert(assign_value_to_value);\r\n            assert(assign_value_to_value.value() == 42);\r\n            static_assert(noexcept(assign_value_to_value = input_value) == should_be_noexcept);\r\n\r\n            Expected assign_value_to_error{unexpect, 1};\r\n            assign_value_to_error = input_value;\r\n            assert(assign_value_to_error);\r\n            assert(assign_value_to_error.value() == 42);\r\n            static_assert(noexcept(assign_value_to_error = input_value) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign convertible type rvalue\r\n            constexpr bool should_be_noexcept = nothrow_move_constructible && nothrow_move_assignable;\r\n            using Expected                    = expected<payload_assign, int>;\r\n\r\n            Expected assign_value_to_value{in_place, 1};\r\n            assign_value_to_value = convertible{42};\r\n            assert(assign_value_to_value);\r\n            assert(assign_value_to_value.value() == 42);\r\n            static_assert(noexcept(assign_value_to_value = convertible{42}) == should_be_noexcept);\r\n\r\n            Expected assign_value_to_error{unexpect, 1};\r\n            assign_value_to_error = convertible{42};\r\n            assert(assign_value_to_error);\r\n            assert(assign_value_to_error.value() == 42);\r\n            static_assert(noexcept(assign_value_to_error = convertible{42}) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign error type const ref\r\n            constexpr bool should_be_noexcept = nothrow_copy_constructible && nothrow_copy_assignable;\r\n            using Expected                    = expected<int, payload_assign>;\r\n            using Unexpected                  = unexpected<payload_assign>;\r\n            const Unexpected input_error{42};\r\n\r\n            Expected assign_error_to_value{in_place, 1};\r\n            assign_error_to_value = input_error;\r\n            assert(!assign_error_to_value);\r\n            assert(assign_error_to_value.error() == 42);\r\n            static_assert(noexcept(assign_error_to_value = input_error) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_error{unexpect, 1};\r\n            assign_error_to_error = input_error;\r\n            assert(!assign_error_to_error);\r\n            assert(assign_error_to_error.error() == 42);\r\n            static_assert(noexcept(assign_error_to_error = input_error) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign expected<void> error type const ref\r\n            constexpr bool should_be_noexcept = nothrow_copy_constructible && nothrow_copy_assignable;\r\n            using Expected                    = expected<void, payload_assign>;\r\n            using Unexpected                  = unexpected<payload_assign>;\r\n            const Unexpected input_error{42};\r\n\r\n            Expected assign_error_to_value{in_place};\r\n            assign_error_to_value = input_error;\r\n            assert(!assign_error_to_value);\r\n            assert(assign_error_to_value.error() == 42);\r\n            static_assert(noexcept(assign_error_to_value = input_error) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_error{unexpect, 1};\r\n            assign_error_to_error = input_error;\r\n            assert(!assign_error_to_error);\r\n            assert(assign_error_to_error.error() == 42);\r\n            static_assert(noexcept(assign_error_to_error = input_error) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign error type rvalue\r\n            constexpr bool should_be_noexcept = nothrow_move_constructible && nothrow_move_assignable;\r\n            using Expected                    = expected<int, payload_assign>;\r\n            using Unexpected                  = unexpected<payload_assign>;\r\n\r\n            Expected assign_error_to_value{in_place, 1};\r\n            assign_error_to_value = Unexpected{42};\r\n            assert(!assign_error_to_value);\r\n            assert(assign_error_to_value.error() == 42);\r\n            static_assert(noexcept(assign_error_to_value = Unexpected{42}) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_error{unexpect, 1};\r\n            assign_error_to_error = Unexpected{42};\r\n            assert(!assign_error_to_error);\r\n            assert(assign_error_to_error.error() == 42);\r\n            static_assert(noexcept(assign_error_to_error = Unexpected{42}) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign expected<void> error type rvalue\r\n            constexpr bool should_be_noexcept = nothrow_move_constructible && nothrow_move_assignable;\r\n            using Expected                    = expected<void, payload_assign>;\r\n            using Unexpected                  = unexpected<payload_assign>;\r\n\r\n            Expected assign_error_to_value{in_place};\r\n            assign_error_to_value = Unexpected{42};\r\n            assert(!assign_error_to_value);\r\n            assert(assign_error_to_value.error() == 42);\r\n            static_assert(noexcept(assign_error_to_value = Unexpected{42}) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_error{unexpect, 1};\r\n            assign_error_to_error = Unexpected{42};\r\n            assert(!assign_error_to_error);\r\n            assert(assign_error_to_error.error() == 42);\r\n            static_assert(noexcept(assign_error_to_error = Unexpected{42}) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign convertible error const ref\r\n            constexpr bool should_be_noexcept = nothrow_copy_constructible && nothrow_copy_assignable;\r\n            using Expected                    = expected<int, payload_assign>;\r\n            using Unexpected                  = unexpected<convertible>;\r\n            const Unexpected input_error{42};\r\n\r\n            Expected assign_error_to_value{in_place, 1};\r\n            assign_error_to_value = input_error;\r\n            assert(!assign_error_to_value);\r\n            assert(assign_error_to_value.error() == 42);\r\n            static_assert(noexcept(assign_error_to_value = input_error) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_error{unexpect, 1};\r\n            assign_error_to_error = input_error;\r\n            assert(!assign_error_to_error);\r\n            assert(assign_error_to_error.error() == 42);\r\n            static_assert(noexcept(assign_error_to_error = input_error) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign expected<void> convertible error const ref\r\n            constexpr bool should_be_noexcept = nothrow_copy_constructible && nothrow_copy_assignable;\r\n            using Expected                    = expected<void, payload_assign>;\r\n            using Unexpected                  = unexpected<convertible>;\r\n            const Unexpected input_error{42};\r\n\r\n            Expected assign_error_to_value{in_place};\r\n            assign_error_to_value = input_error;\r\n            assert(!assign_error_to_value);\r\n            assert(assign_error_to_value.error() == 42);\r\n            static_assert(noexcept(assign_error_to_value = input_error) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_error{unexpect, 1};\r\n            assign_error_to_error = input_error;\r\n            assert(!assign_error_to_error);\r\n            assert(assign_error_to_error.error() == 42);\r\n            static_assert(noexcept(assign_error_to_error = input_error) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign convertible error rvalue\r\n            constexpr bool should_be_noexcept = nothrow_move_constructible && nothrow_move_assignable;\r\n            using Expected                    = expected<int, payload_assign>;\r\n            using Unexpected                  = unexpected<convertible>;\r\n\r\n            Expected assign_error_to_value{in_place, 1};\r\n            assign_error_to_value = Unexpected{42};\r\n            assert(!assign_error_to_value);\r\n            assert(assign_error_to_value.error() == 42);\r\n            static_assert(noexcept(assign_error_to_value = Unexpected{42}) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_error{unexpect, 1};\r\n            assign_error_to_error = Unexpected{42};\r\n            assert(!assign_error_to_error);\r\n            assert(assign_error_to_error.error() == 42);\r\n            static_assert(noexcept(assign_error_to_error = Unexpected{42}) == should_be_noexcept);\r\n        }\r\n\r\n        { // assign expected<void> convertible error rvalue\r\n            constexpr bool should_be_noexcept = nothrow_move_constructible && nothrow_move_assignable;\r\n            using Expected                    = expected<void, payload_assign>;\r\n            using Unexpected                  = unexpected<convertible>;\r\n\r\n            Expected assign_error_to_value{in_place};\r\n            assign_error_to_value = Unexpected{42};\r\n            assert(!assign_error_to_value);\r\n            assert(assign_error_to_value.error() == 42);\r\n            static_assert(noexcept(assign_error_to_value = Unexpected{42}) == should_be_noexcept);\r\n\r\n            Expected assign_error_to_error{unexpect, 1};\r\n            assign_error_to_error = Unexpected{42};\r\n            assert(!assign_error_to_error);\r\n            assert(assign_error_to_error.error() == 42);\r\n            static_assert(noexcept(assign_error_to_error = Unexpected{42}) == should_be_noexcept);\r\n        }\r\n\r\n        { // ensure we are not copy_assignable if either the payload or the error are not copy_assignable or the payload\r\n          // is not copy_constructible\r\n            struct not_copy_assignable {\r\n                not_copy_assignable& operator=(not_copy_assignable&&) = delete;\r\n            };\r\n\r\n            static_assert(!is_copy_assignable_v<expected<not_copy_assignable, int>>);\r\n            static_assert(!is_copy_assignable_v<expected<int, not_copy_assignable>>);\r\n            static_assert(!is_copy_assignable_v<expected<void, not_copy_assignable>>);\r\n\r\n            struct not_copy_constructible {\r\n                not_copy_constructible(const not_copy_constructible&) = delete;\r\n            };\r\n\r\n            static_assert(!is_copy_assignable_v<expected<not_copy_constructible, int>>);\r\n        }\r\n\r\n        { // ensure we are not move_assignable if either the payload or the error are not move_assignable or\r\n          // move_constructible\r\n            struct not_move_assignable {\r\n                not_move_assignable& operator=(not_move_assignable&&) = delete;\r\n            };\r\n\r\n            static_assert(!is_move_assignable_v<expected<not_move_assignable, int>>);\r\n            static_assert(!is_move_assignable_v<expected<int, not_move_assignable>>);\r\n            static_assert(!is_move_assignable_v<expected<void, not_move_assignable>>);\r\n\r\n            struct not_move_constructible {\r\n                not_move_constructible(not_move_constructible&&) = delete;\r\n            };\r\n\r\n            static_assert(!is_move_assignable_v<expected<not_move_constructible, int>>);\r\n            static_assert(!is_move_assignable_v<expected<int, not_move_constructible>>);\r\n            static_assert(!is_move_assignable_v<expected<void, not_move_constructible>>);\r\n        }\r\n    }\r\n\r\n    constexpr void test_assignment() noexcept {\r\n        using NCC = IsNothrowCopyConstructible;\r\n        using NMC = IsNothrowMoveConstructible;\r\n        using NCA = IsNothrowCopyAssignable;\r\n        using NMA = IsNothrowMoveAssignable;\r\n\r\n        test_assignment<NCC::Not, NMC::Not, NCA::Not, NMA::Not>();\r\n        test_assignment<NCC::Not, NMC::Not, NCA::Not, NMA::Yes>();\r\n        test_assignment<NCC::Not, NMC::Not, NCA::Yes, NMA::Not>();\r\n        test_assignment<NCC::Not, NMC::Not, NCA::Yes, NMA::Yes>();\r\n        test_assignment<NCC::Not, NMC::Yes, NCA::Not, NMA::Not>();\r\n        test_assignment<NCC::Not, NMC::Yes, NCA::Not, NMA::Yes>();\r\n        test_assignment<NCC::Not, NMC::Yes, NCA::Yes, NMA::Not>();\r\n        test_assignment<NCC::Not, NMC::Yes, NCA::Yes, NMA::Yes>();\r\n        test_assignment<NCC::Yes, NMC::Not, NCA::Not, NMA::Not>();\r\n        test_assignment<NCC::Yes, NMC::Not, NCA::Not, NMA::Yes>();\r\n        test_assignment<NCC::Yes, NMC::Not, NCA::Yes, NMA::Not>();\r\n        test_assignment<NCC::Yes, NMC::Not, NCA::Yes, NMA::Yes>();\r\n        test_assignment<NCC::Yes, NMC::Yes, NCA::Not, NMA::Not>();\r\n        test_assignment<NCC::Yes, NMC::Yes, NCA::Not, NMA::Yes>();\r\n        test_assignment<NCC::Yes, NMC::Yes, NCA::Yes, NMA::Not>();\r\n        test_assignment<NCC::Yes, NMC::Yes, NCA::Yes, NMA::Yes>();\r\n    }\r\n\r\n    // Only test the triviality scenarios that occur in practice.\r\n    template <IsTriviallyCopyConstructible CC, IsTriviallyMoveConstructible MC, IsTriviallyCopyAssignable CA,\r\n        IsTriviallyMoveAssignable MA, IsTriviallyDestructible D>\r\n    struct TrivialityScenario {\r\n        static constexpr auto CopyCtorTriviality   = CC;\r\n        static constexpr auto MoveCtorTriviality   = MC;\r\n        static constexpr auto CopyAssignTriviality = CA;\r\n        static constexpr auto MoveAssignTriviality = MA;\r\n        static constexpr auto DtorTriviality       = D;\r\n    };\r\n\r\n    // No operations are trivial.\r\n    using TrivialityScenario1 = TrivialityScenario<IsTriviallyCopyConstructible::Not, IsTriviallyMoveConstructible::Not,\r\n        IsTriviallyCopyAssignable::Not, IsTriviallyMoveAssignable::Not, IsTriviallyDestructible::Not>;\r\n\r\n    // Only destruction is trivial.\r\n    using TrivialityScenario2 = TrivialityScenario<IsTriviallyCopyConstructible::Not, IsTriviallyMoveConstructible::Not,\r\n        IsTriviallyCopyAssignable::Not, IsTriviallyMoveAssignable::Not, IsTriviallyDestructible::Yes>;\r\n\r\n    // Only destruction and move construction are trivial.\r\n    using TrivialityScenario3 = TrivialityScenario<IsTriviallyCopyConstructible::Not, IsTriviallyMoveConstructible::Yes,\r\n        IsTriviallyCopyAssignable::Not, IsTriviallyMoveAssignable::Not, IsTriviallyDestructible::Yes>;\r\n\r\n    // Only destruction and move construction/assignment are trivial.\r\n    using TrivialityScenario4 = TrivialityScenario<IsTriviallyCopyConstructible::Not, IsTriviallyMoveConstructible::Yes,\r\n        IsTriviallyCopyAssignable::Not, IsTriviallyMoveAssignable::Yes, IsTriviallyDestructible::Yes>;\r\n\r\n    // Only destruction and copy/move construction are trivial.\r\n    using TrivialityScenario5 = TrivialityScenario<IsTriviallyCopyConstructible::Yes, IsTriviallyMoveConstructible::Yes,\r\n        IsTriviallyCopyAssignable::Not, IsTriviallyMoveAssignable::Not, IsTriviallyDestructible::Yes>;\r\n\r\n    // All operations are trivial.\r\n    using TrivialityScenario6 = TrivialityScenario<IsTriviallyCopyConstructible::Yes, IsTriviallyMoveConstructible::Yes,\r\n        IsTriviallyCopyAssignable::Yes, IsTriviallyMoveAssignable::Yes, IsTriviallyDestructible::Yes>;\r\n\r\n    // per LWG-4026, see also LLVM-74768\r\n    template <class PODType, class Scenario>\r\n    struct TrivialityTester {\r\n        PODType val{};\r\n\r\n        TrivialityTester() = default;\r\n\r\n        constexpr explicit TrivialityTester(PODType v) noexcept : val{v} {}\r\n\r\n        constexpr TrivialityTester(const TrivialityTester& other) noexcept : val{other.val} {}\r\n        constexpr TrivialityTester(const TrivialityTester&)\r\n            requires (Scenario::CopyCtorTriviality == IsTriviallyCopyConstructible::Yes)\r\n        = default;\r\n\r\n        constexpr TrivialityTester(TrivialityTester&& other) noexcept : val{other.val} {}\r\n        TrivialityTester(TrivialityTester&&)\r\n            requires (Scenario::MoveCtorTriviality == IsTriviallyMoveConstructible::Yes)\r\n        = default;\r\n\r\n        constexpr TrivialityTester& operator=(const TrivialityTester& other) noexcept {\r\n            val = other.val;\r\n            return *this;\r\n        }\r\n        TrivialityTester& operator=(const TrivialityTester&)\r\n            requires (Scenario::CopyAssignTriviality == IsTriviallyCopyAssignable::Yes)\r\n        = default;\r\n\r\n        constexpr TrivialityTester& operator=(TrivialityTester&& other) noexcept {\r\n            val = other.val;\r\n            return *this;\r\n        }\r\n        TrivialityTester& operator=(TrivialityTester&&)\r\n            requires (Scenario::MoveAssignTriviality == IsTriviallyMoveAssignable::Yes)\r\n        = default;\r\n\r\n        constexpr ~TrivialityTester() {}\r\n        ~TrivialityTester()\r\n            requires (Scenario::DtorTriviality == IsTriviallyDestructible::Yes)\r\n        = default;\r\n    };\r\n\r\n    template <class Val1, class OtherScenario>\r\n    constexpr void test_triviality_of_assignment_binary() {\r\n        using Val2 = TrivialityTester<char, OtherScenario>;\r\n        using E    = expected<Val1, Val2>;\r\n\r\n        static_assert(is_trivially_copy_assignable_v<E>\r\n                      == (is_trivially_copy_constructible_v<Val1> && is_trivially_copy_assignable_v<Val1>\r\n                          && is_trivially_destructible_v<Val1> && is_trivially_copy_constructible_v<Val2>\r\n                          && is_trivially_copy_assignable_v<Val2> && is_trivially_destructible_v<Val2>) );\r\n        static_assert(is_trivially_move_assignable_v<E>\r\n                      == (is_trivially_move_constructible_v<Val1> && is_trivially_move_assignable_v<Val1>\r\n                          && is_trivially_destructible_v<Val1> && is_trivially_move_constructible_v<Val2>\r\n                          && is_trivially_move_assignable_v<Val2> && is_trivially_destructible_v<Val2>) );\r\n\r\n        {\r\n            E e1{Val1{42}};\r\n            E e2{unexpect, Val2{'^'}};\r\n            e1 = e2;\r\n            assert(!e1.has_value());\r\n            assert(e1.error().val == '^');\r\n        }\r\n        {\r\n            E e1{Val1{42}};\r\n            E e2{unexpect, Val2{'^'}};\r\n            e1 = move(e2);\r\n            assert(!e1.has_value());\r\n            assert(e1.error().val == '^');\r\n        }\r\n        {\r\n            E e1{Val1{42}};\r\n            E e2{unexpect, Val2{'^'}};\r\n            e2 = e1;\r\n            assert(e2.has_value());\r\n            assert(e2.value().val == 42);\r\n        }\r\n        {\r\n            E e1{Val1{42}};\r\n            E e2{unexpect, Val2{'^'}};\r\n            e2 = move(e1);\r\n            assert(e2.has_value());\r\n            assert(e2.value().val == 42);\r\n        }\r\n    }\r\n\r\n    template <class Scenario>\r\n    constexpr void test_triviality_of_assignment() {\r\n        using Val = TrivialityTester<int, Scenario>;\r\n        using E   = expected<void, Val>;\r\n\r\n        static_assert(is_trivially_copy_assignable_v<E>\r\n                      == (is_trivially_copy_constructible_v<Val> && is_trivially_copy_assignable_v<Val>\r\n                          && is_trivially_destructible_v<Val>) );\r\n        static_assert(is_trivially_move_assignable_v<E>\r\n                      == (is_trivially_move_constructible_v<Val> && is_trivially_move_assignable_v<Val>\r\n                          && is_trivially_destructible_v<Val>) );\r\n\r\n        {\r\n            E e1{};\r\n            E e2{unexpect, Val{42}};\r\n            e1 = e2;\r\n            assert(!e1.has_value());\r\n            assert(e1.error().val == 42);\r\n        }\r\n        {\r\n            E e1{};\r\n            E e2{unexpect, Val{42}};\r\n            e1 = move(e2);\r\n            assert(!e1.has_value());\r\n            assert(e1.error().val == 42);\r\n        }\r\n\r\n        test_triviality_of_assignment_binary<Val, TrivialityScenario1>();\r\n        test_triviality_of_assignment_binary<Val, TrivialityScenario2>();\r\n        test_triviality_of_assignment_binary<Val, TrivialityScenario3>();\r\n        test_triviality_of_assignment_binary<Val, TrivialityScenario4>();\r\n        test_triviality_of_assignment_binary<Val, TrivialityScenario5>();\r\n        test_triviality_of_assignment_binary<Val, TrivialityScenario6>();\r\n    }\r\n\r\n    constexpr void test_triviality_of_assignment_all() {\r\n        test_triviality_of_assignment<TrivialityScenario1>();\r\n        test_triviality_of_assignment<TrivialityScenario2>();\r\n        test_triviality_of_assignment<TrivialityScenario3>();\r\n#ifndef __EDG__ // TRANSITION, VSO-1949451\r\n        test_triviality_of_assignment<TrivialityScenario4>();\r\n#endif // ^^^ no workaround ^^^\r\n        test_triviality_of_assignment<TrivialityScenario5>();\r\n#ifndef __EDG__ // TRANSITION, VSO-1949451\r\n        test_triviality_of_assignment<TrivialityScenario6>();\r\n#endif // ^^^ no workaround ^^^\r\n    }\r\n\r\n    constexpr void test_emplace() noexcept {\r\n        struct payload_emplace {\r\n            constexpr payload_emplace(bool& destructor_called) noexcept : _destructor_called(destructor_called) {}\r\n            constexpr payload_emplace(bool& destructor_called, const convertible&) noexcept\r\n                : _destructor_called(destructor_called), _val(3) {}\r\n            constexpr payload_emplace(bool& destructor_called, convertible&&) noexcept\r\n                : _destructor_called(destructor_called), _val(42) {}\r\n            constexpr payload_emplace(initializer_list<int>&, bool& destructor_called, convertible) noexcept\r\n                : _destructor_called(destructor_called), _val(1337) {}\r\n            constexpr ~payload_emplace() {\r\n                _destructor_called = true;\r\n            }\r\n\r\n            [[nodiscard]] constexpr bool operator==(const int val) const noexcept {\r\n                return _val == val;\r\n            }\r\n\r\n            bool& _destructor_called;\r\n            int _val = 0;\r\n        };\r\n        using Expected = expected<payload_emplace, int>;\r\n\r\n        bool destructor_called = false;\r\n        {\r\n            const convertible input;\r\n            Expected emplaced_lvalue(destructor_called);\r\n            emplaced_lvalue.emplace(destructor_called, input);\r\n            assert(destructor_called);\r\n            assert(emplaced_lvalue);\r\n            assert(emplaced_lvalue.value() == 3);\r\n        }\r\n\r\n        destructor_called = false;\r\n        {\r\n            const convertible input;\r\n            Expected emplaced_lvalue(unexpect);\r\n            emplaced_lvalue.emplace(destructor_called, input);\r\n            assert(!destructor_called);\r\n            assert(emplaced_lvalue);\r\n            assert(emplaced_lvalue.value() == 3);\r\n        }\r\n\r\n        destructor_called = false;\r\n        {\r\n            Expected emplaced_rvalue(destructor_called);\r\n            emplaced_rvalue.emplace(destructor_called, convertible{});\r\n            assert(destructor_called);\r\n            assert(emplaced_rvalue);\r\n            assert(emplaced_rvalue.value() == 42);\r\n        }\r\n\r\n        destructor_called = false;\r\n        {\r\n            Expected emplaced_rvalue(unexpect);\r\n            emplaced_rvalue.emplace(destructor_called, convertible{});\r\n            assert(!destructor_called);\r\n            assert(emplaced_rvalue);\r\n            assert(emplaced_rvalue.value() == 42);\r\n        }\r\n\r\n        destructor_called = false;\r\n        {\r\n            Expected emplaced_ilist(destructor_called);\r\n            emplaced_ilist.emplace({1}, destructor_called, convertible{});\r\n            assert(destructor_called);\r\n            assert(emplaced_ilist);\r\n            assert(emplaced_ilist.value() == 1337);\r\n        }\r\n\r\n        destructor_called = false;\r\n        {\r\n            Expected emplaced_ilist(unexpect);\r\n            emplaced_ilist.emplace({1}, destructor_called, convertible{});\r\n            assert(!destructor_called);\r\n            assert(emplaced_ilist);\r\n            assert(emplaced_ilist.value() == 1337);\r\n        }\r\n\r\n        {\r\n            using ExpectedVoid = expected<void, int>;\r\n            ExpectedVoid with_value{in_place};\r\n            with_value.emplace();\r\n            assert(with_value);\r\n\r\n            ExpectedVoid with_error{unexpect, 42};\r\n            with_error.emplace();\r\n            assert(with_error);\r\n        }\r\n    }\r\n\r\n    template <IsNothrowMoveConstructible nothrowMoveConstructible, IsNothrowSwappable nothrowSwappable>\r\n    struct payload_swap {\r\n        constexpr payload_swap(const int val) noexcept : _val(val) {}\r\n        constexpr payload_swap(const payload_swap&) noexcept = default;\r\n        constexpr payload_swap(payload_swap&& other) noexcept(IsYes(nothrowMoveConstructible))\r\n            : _val(other._val + 42) {}\r\n        // Note: cannot declare friends of function local structs\r\n        friend constexpr void swap(payload_swap& left, payload_swap& right) noexcept(IsYes(nothrowSwappable)) {\r\n            left._val = exchange(right._val, left._val);\r\n        }\r\n\r\n        [[nodiscard]] constexpr bool operator==(const int val) const noexcept {\r\n            return _val == val;\r\n        }\r\n\r\n        int _val = 0;\r\n    };\r\n\r\n    template <IsNothrowMoveConstructible nothrowMoveConstructible, IsNothrowSwappable nothrowSwappable>\r\n    constexpr void test_swap() noexcept {\r\n        constexpr bool nothrow_move_constructible = IsYes(nothrowMoveConstructible);\r\n        constexpr bool should_be_noexcept         = nothrow_move_constructible && IsYes(nothrowSwappable);\r\n\r\n        { // Check payload member\r\n            using Expected = expected<payload_swap<nothrowMoveConstructible, nothrowSwappable>, int>;\r\n            Expected first_value{1};\r\n            Expected second_value{1337};\r\n            Expected first_error{unexpect, 3};\r\n            Expected second_error{unexpect, 5};\r\n\r\n            first_value.swap(second_value);\r\n            assert(first_value && second_value);\r\n            assert(first_value.value() == 1337);\r\n            assert(second_value.value() == 1);\r\n            static_assert(noexcept(first_value.swap(second_value)) == should_be_noexcept);\r\n\r\n            first_error.swap(second_error);\r\n            assert(!first_error && !second_error);\r\n            assert(first_error.error() == 5);\r\n            assert(second_error.error() == 3);\r\n            static_assert(noexcept(first_error.swap(second_error)) == should_be_noexcept);\r\n\r\n            first_value.swap(first_error);\r\n            assert(first_error && !first_value);\r\n            assert(first_value.error() == 5);\r\n            assert(first_error.value() == 1337 + 42);\r\n            static_assert(noexcept(first_value.swap(first_error)) == should_be_noexcept);\r\n\r\n            second_error.swap(second_value);\r\n            assert(second_error && !second_value);\r\n            assert(second_value.error() == 3);\r\n            assert(second_error.value() == 1 + 42);\r\n            static_assert(noexcept(second_error.swap(second_value)) == should_be_noexcept);\r\n        }\r\n\r\n        { // Check error member\r\n            using Expected = expected<int, payload_swap<nothrowMoveConstructible, nothrowSwappable>>;\r\n            Expected first_value{1};\r\n            Expected second_value{1337};\r\n            Expected first_error{unexpect, 3};\r\n            Expected second_error{unexpect, 5};\r\n\r\n            first_value.swap(second_value);\r\n            assert(first_value && second_value);\r\n            assert(first_value.value() == 1337);\r\n            assert(second_value.value() == 1);\r\n            static_assert(noexcept(first_value.swap(second_value)) == should_be_noexcept);\r\n\r\n            first_error.swap(second_error);\r\n            assert(!first_error && !second_error);\r\n            assert(first_error.error() == 5);\r\n            assert(second_error.error() == 3);\r\n            static_assert(noexcept(first_error.swap(second_error)) == should_be_noexcept);\r\n\r\n            first_value.swap(first_error);\r\n            assert(first_error && !first_value);\r\n            if constexpr (nothrow_move_constructible) {\r\n                assert(first_value.error() == 5 + 42 + 42);\r\n            } else {\r\n                // Here we are storing _Ty as a temporary so we only move once\r\n                assert(first_value.error() == 5 + 42);\r\n            }\r\n            assert(first_error.value() == 1337);\r\n            static_assert(noexcept(first_value.swap(first_error)) == should_be_noexcept);\r\n\r\n            second_error.swap(second_value);\r\n            assert(second_error && !second_value);\r\n            if constexpr (nothrow_move_constructible) {\r\n                assert(second_value.error() == 3 + 42 + 42);\r\n            } else {\r\n                // Here we are storing _Ty as a temporary so we only move once\r\n                assert(second_value.error() == 3 + 42);\r\n            }\r\n            assert(second_error.value() == 1);\r\n            static_assert(noexcept(second_error.swap(second_value)) == should_be_noexcept);\r\n        }\r\n\r\n        { // Check expected<void> error member\r\n            using Expected = expected<void, payload_swap<nothrowMoveConstructible, nothrowSwappable>>;\r\n            Expected first_value{in_place};\r\n            Expected second_value{in_place};\r\n            Expected first_error{unexpect, 3};\r\n            Expected second_error{unexpect, 5};\r\n\r\n            first_value.swap(second_value);\r\n            assert(first_value && second_value);\r\n            static_assert(noexcept(first_value.swap(second_value)) == should_be_noexcept);\r\n\r\n            first_error.swap(second_error);\r\n            assert(!first_error && !second_error);\r\n            assert(first_error.error() == 5);\r\n            assert(second_error.error() == 3);\r\n            static_assert(noexcept(first_error.swap(second_error)) == should_be_noexcept);\r\n\r\n            first_value.swap(first_error);\r\n            assert(first_error && !first_value);\r\n            assert(first_value.error() == 5 + 42);\r\n            static_assert(noexcept(first_value.swap(first_error)) == should_be_noexcept);\r\n\r\n            second_error.swap(second_value);\r\n            assert(second_error && !second_value);\r\n            assert(second_value.error() == 3 + 42);\r\n            static_assert(noexcept(second_error.swap(second_value)) == should_be_noexcept);\r\n        }\r\n\r\n        { // Check payload friend\r\n            using Expected = expected<payload_swap<nothrowMoveConstructible, nothrowSwappable>, int>;\r\n            Expected first_value{1};\r\n            Expected second_value{1337};\r\n            Expected first_error{unexpect, 3};\r\n            Expected second_error{unexpect, 5};\r\n\r\n            swap(first_value, second_value);\r\n            assert(first_value && second_value);\r\n            assert(first_value.value() == 1337);\r\n            assert(second_value.value() == 1);\r\n            static_assert(noexcept(swap(first_value, second_value)) == should_be_noexcept);\r\n\r\n            swap(first_error, second_error);\r\n            assert(!first_error && !second_error);\r\n            assert(first_error.error() == 5);\r\n            assert(second_error.error() == 3);\r\n            static_assert(noexcept(swap(first_error, second_error)) == should_be_noexcept);\r\n\r\n            swap(first_value, first_error);\r\n            assert(first_error && !first_value);\r\n            assert(first_value.error() == 5);\r\n            assert(first_error.value() == 1337 + 42);\r\n            static_assert(noexcept(swap(first_value, first_error)) == should_be_noexcept);\r\n\r\n            swap(second_error, second_value);\r\n            assert(second_error && !second_value);\r\n            assert(second_value.error() == 3);\r\n            assert(second_error.value() == 1 + 42);\r\n            static_assert(noexcept(swap(second_error, second_value)) == should_be_noexcept);\r\n        }\r\n\r\n        { // Check error friend\r\n            using Expected = expected<int, payload_swap<nothrowMoveConstructible, nothrowSwappable>>;\r\n            Expected first_value{1};\r\n            Expected second_value{1337};\r\n            Expected first_error{unexpect, 3};\r\n            Expected second_error{unexpect, 5};\r\n\r\n            swap(first_value, second_value);\r\n            assert(first_value && second_value);\r\n            assert(first_value.value() == 1337);\r\n            assert(second_value.value() == 1);\r\n            static_assert(noexcept(swap(first_value, second_value)) == should_be_noexcept);\r\n\r\n            swap(first_error, second_error);\r\n            assert(!first_error && !second_error);\r\n            assert(first_error.error() == 5);\r\n            assert(second_error.error() == 3);\r\n            static_assert(noexcept(swap(first_error, second_error)) == should_be_noexcept);\r\n\r\n            swap(first_value, first_error);\r\n            assert(first_error && !first_value);\r\n            if constexpr (nothrow_move_constructible) {\r\n                assert(first_value.error() == 5 + 42 + 42);\r\n            } else {\r\n                // Here we are storing _Ty as a temporary so we only move once\r\n                assert(first_value.error() == 5 + 42);\r\n            }\r\n            assert(first_error.value() == 1337);\r\n            static_assert(noexcept(swap(first_value, first_error)) == should_be_noexcept);\r\n\r\n            swap(second_error, second_value);\r\n            assert(second_error && !second_value);\r\n            if constexpr (nothrow_move_constructible) {\r\n                assert(second_value.error() == 3 + 42 + 42);\r\n            } else {\r\n                // Here we are storing _Ty as a temporary so we only move once\r\n                assert(second_value.error() == 3 + 42);\r\n            }\r\n            assert(second_error.value() == 1);\r\n            static_assert(noexcept(swap(second_error, second_value)) == should_be_noexcept);\r\n        }\r\n\r\n        { // Check expected<void> error friend\r\n            using Expected = expected<void, payload_swap<nothrowMoveConstructible, nothrowSwappable>>;\r\n            Expected first_value{in_place};\r\n            Expected second_value{in_place};\r\n            Expected first_error{unexpect, 3};\r\n            Expected second_error{unexpect, 5};\r\n\r\n            swap(first_value, second_value);\r\n            assert(first_value && second_value);\r\n            static_assert(noexcept(swap(first_value, second_value)) == should_be_noexcept);\r\n\r\n            swap(first_error, second_error);\r\n            assert(!first_error && !second_error);\r\n            assert(first_error.error() == 5);\r\n            assert(second_error.error() == 3);\r\n            static_assert(noexcept(swap(first_error, second_error)) == should_be_noexcept);\r\n\r\n            swap(first_value, first_error);\r\n            assert(first_error && !first_value);\r\n            assert(first_value.error() == 5 + 42);\r\n            static_assert(noexcept(swap(first_value, first_error)) == should_be_noexcept);\r\n\r\n            swap(second_error, second_value);\r\n            assert(second_error && !second_value);\r\n            assert(second_value.error() == 3 + 42);\r\n            static_assert(noexcept(swap(second_error, second_value)) == should_be_noexcept);\r\n        }\r\n    }\r\n\r\n    constexpr void test_swap() noexcept {\r\n        test_swap<IsNothrowMoveConstructible::Not, IsNothrowSwappable::Not>();\r\n        test_swap<IsNothrowMoveConstructible::Not, IsNothrowSwappable::Yes>();\r\n        test_swap<IsNothrowMoveConstructible::Yes, IsNothrowSwappable::Not>();\r\n        test_swap<IsNothrowMoveConstructible::Yes, IsNothrowSwappable::Yes>();\r\n    }\r\n\r\n    constexpr void test_access() noexcept {\r\n        struct payload_access {\r\n            payload_access* operator&()             = delete;\r\n            const payload_access* operator&() const = delete;\r\n\r\n            int x = 17;\r\n            int y = 29;\r\n        };\r\n\r\n        { // operator->()\r\n            using Expected = expected<payload_access, int>;\r\n            Expected val;\r\n            assert(val->x == 17);\r\n\r\n            const Expected const_val;\r\n            assert(const_val->y == 29);\r\n        }\r\n\r\n        { // operator*()\r\n            using Expected = expected<convertible, int>;\r\n            Expected lvalue{1};\r\n            auto&& from_lvalue = *lvalue;\r\n            assert(from_lvalue == 1);\r\n            static_assert(is_same_v<decltype(from_lvalue), convertible&>);\r\n\r\n            Expected rvalue{42};\r\n            auto&& from_rvalue = *move(rvalue);\r\n            assert(from_rvalue == 42);\r\n            static_assert(is_same_v<decltype(from_rvalue), convertible&&>);\r\n\r\n            const Expected const_lvalue{1337};\r\n            auto&& from_const_lvalue = *const_lvalue;\r\n            assert(from_const_lvalue == 1337);\r\n            static_assert(is_same_v<decltype(from_const_lvalue), const convertible&>);\r\n\r\n            const Expected const_rvalue{-42};\r\n            auto&& from_const_rvalue = *move(const_rvalue);\r\n            assert(from_const_rvalue == -42);\r\n            static_assert(is_same_v<decltype(from_const_rvalue), const convertible&&>);\r\n        }\r\n\r\n        { // expected<void> operator*()\r\n            using Expected = expected<void, int>;\r\n            Expected lvalue{in_place};\r\n            static_assert(is_same_v<decltype(*lvalue), void>);\r\n\r\n            Expected rvalue{in_place};\r\n            static_assert(is_same_v<decltype(*move(rvalue)), void>);\r\n\r\n            const Expected const_lvalue{in_place};\r\n            static_assert(is_same_v<decltype(*const_lvalue), void>);\r\n\r\n            const Expected const_rvalue{in_place};\r\n            static_assert(is_same_v<decltype(*move(const_rvalue)), void>);\r\n        }\r\n\r\n        { // operator bool()\r\n            using Expected = expected<int, int>;\r\n            const Expected defaulted;\r\n            assert(defaulted);\r\n            assert(defaulted.has_value());\r\n\r\n            const Expected with_value{in_place, 5};\r\n            assert(with_value);\r\n            assert(with_value.has_value());\r\n\r\n            const Expected with_error{unexpect, 5};\r\n            assert(!with_error);\r\n            assert(!with_error.has_value());\r\n        }\r\n\r\n        { // expected<void> operator bool()\r\n            using Expected = expected<void, int>;\r\n            const Expected defaulted;\r\n            assert(defaulted);\r\n            assert(defaulted.has_value());\r\n\r\n            const Expected with_value{in_place};\r\n            assert(with_value);\r\n            assert(with_value.has_value());\r\n\r\n            const Expected with_error{unexpect};\r\n            assert(!with_error);\r\n            assert(!with_error.has_value());\r\n        }\r\n\r\n        { // value()\r\n            using Expected = expected<convertible, int>;\r\n            Expected lvalue{1};\r\n            auto&& from_lvalue = lvalue.value();\r\n            assert(from_lvalue == 1);\r\n            static_assert(is_same_v<decltype(from_lvalue), convertible&>);\r\n\r\n            Expected rvalue{42};\r\n            auto&& from_rvalue = move(rvalue).value();\r\n            assert(from_rvalue == 42);\r\n            static_assert(is_same_v<decltype(from_rvalue), convertible&&>);\r\n\r\n            const Expected const_lvalue{1337};\r\n            auto&& from_const_lvalue = const_lvalue.value();\r\n            assert(from_const_lvalue == 1337);\r\n            static_assert(is_same_v<decltype(from_const_lvalue), const convertible&>);\r\n\r\n            const Expected const_rvalue{-42};\r\n            auto&& from_const_rvalue = move(const_rvalue).value();\r\n            assert(from_const_rvalue == -42);\r\n            static_assert(is_same_v<decltype(from_const_rvalue), const convertible&&>);\r\n        }\r\n\r\n        { // expected<void> value()\r\n            using Expected = expected<void, int>;\r\n            Expected lvalue{in_place};\r\n            static_assert(is_same_v<decltype(lvalue.value()), void>);\r\n\r\n            Expected rvalue{in_place};\r\n            static_assert(is_same_v<decltype(move(rvalue).value()), void>);\r\n\r\n            const Expected const_lvalue{in_place};\r\n            static_assert(is_same_v<decltype(const_lvalue.value()), void>);\r\n\r\n            const Expected const_rvalue{in_place};\r\n            static_assert(is_same_v<decltype(move(const_rvalue).value()), void>);\r\n        }\r\n\r\n        if (!is_constant_evaluated()) { // invalid value()\r\n            using Expected = expected<int, convertible>;\r\n            try {\r\n                Expected lvalue{unexpect, 1};\r\n                [[maybe_unused]] auto&& from_lvalue = lvalue.value();\r\n                assert(false);\r\n            } catch (bad_expected_access<convertible>& with_error) {\r\n                assert(with_error.error() == 1);\r\n                static_assert(is_same_v<decltype(with_error.error()), convertible&>);\r\n            }\r\n\r\n            try {\r\n                Expected rvalue{unexpect, 42};\r\n                [[maybe_unused]] auto&& from_rvalue = move(rvalue).value();\r\n                assert(false);\r\n            } catch (const bad_expected_access<convertible>& with_error) {\r\n                assert(with_error.error() == 42);\r\n                static_assert(is_same_v<decltype(with_error.error()), const convertible&>);\r\n            }\r\n\r\n            try {\r\n                const Expected const_lvalue{unexpect, 1337};\r\n                [[maybe_unused]] auto&& from_const_lvalue = const_lvalue.value();\r\n                assert(false);\r\n            } catch (bad_expected_access<convertible>& with_error) {\r\n                assert(move(with_error).error() == 1337);\r\n                static_assert(is_same_v<decltype(move(with_error).error()), convertible&&>);\r\n            }\r\n\r\n            try {\r\n                const Expected const_rvalue{unexpect, -42};\r\n                [[maybe_unused]] auto&& from_const_rvalue = move(const_rvalue).value();\r\n                assert(false);\r\n            } catch (const bad_expected_access<convertible>& with_error) {\r\n                assert(move(with_error).error() == -42);\r\n                static_assert(is_same_v<decltype(move(with_error).error()), const convertible&&>);\r\n            }\r\n        }\r\n\r\n        if (!is_constant_evaluated()) { // expected<void> invalid value()\r\n            using Expected = expected<void, convertible>;\r\n            try {\r\n                Expected lvalue{unexpect, 1};\r\n                lvalue.value();\r\n                assert(false);\r\n            } catch (const bad_expected_access<convertible>& with_error) {\r\n                assert(with_error.error() == 1);\r\n            }\r\n\r\n            try {\r\n                Expected rvalue{unexpect, 42};\r\n                move(rvalue).value();\r\n                assert(false);\r\n            } catch (const bad_expected_access<convertible>& with_error) {\r\n                assert(with_error.error() == 42);\r\n            }\r\n\r\n            try {\r\n                const Expected const_lvalue{unexpect, 1337};\r\n                const_lvalue.value();\r\n                assert(false);\r\n            } catch (const bad_expected_access<convertible>& with_error) {\r\n                assert(with_error.error() == 1337);\r\n            }\r\n\r\n            try {\r\n                const Expected const_rvalue{unexpect, -42};\r\n                move(const_rvalue).value();\r\n                assert(false);\r\n            } catch (const bad_expected_access<convertible>& with_error) {\r\n                assert(with_error.error() == -42);\r\n            }\r\n        }\r\n\r\n        { // error()\r\n            using Expected = expected<int, convertible>;\r\n            Expected lvalue{unexpect, 1};\r\n            auto&& from_lvalue = lvalue.error();\r\n            assert(from_lvalue == 1);\r\n            static_assert(is_same_v<decltype(from_lvalue), convertible&>);\r\n\r\n            Expected rvalue{unexpect, 42};\r\n            auto&& from_rvalue = move(rvalue).error();\r\n            assert(from_rvalue == 42);\r\n            static_assert(is_same_v<decltype(from_rvalue), convertible&&>);\r\n\r\n            const Expected const_lvalue{unexpect, 1337};\r\n            auto&& from_const_lvalue = const_lvalue.error();\r\n            assert(from_const_lvalue == 1337);\r\n            static_assert(is_same_v<decltype(from_const_lvalue), const convertible&>);\r\n\r\n            const Expected const_rvalue{unexpect, -42};\r\n            auto&& from_const_rvalue = move(const_rvalue).error();\r\n            assert(from_const_rvalue == -42);\r\n            static_assert(is_same_v<decltype(from_const_rvalue), const convertible&&>);\r\n        }\r\n\r\n        { // expected<void> error()\r\n            using Expected = expected<void, convertible>;\r\n            Expected lvalue{unexpect, 1};\r\n            auto&& from_lvalue = lvalue.error();\r\n            assert(from_lvalue == 1);\r\n            static_assert(is_same_v<decltype(from_lvalue), convertible&>);\r\n\r\n            Expected rvalue{unexpect, 42};\r\n            auto&& from_rvalue = move(rvalue).error();\r\n            assert(from_rvalue == 42);\r\n            static_assert(is_same_v<decltype(from_rvalue), convertible&&>);\r\n\r\n            const Expected const_lvalue{unexpect, 1337};\r\n            auto&& from_const_lvalue = const_lvalue.error();\r\n            assert(from_const_lvalue == 1337);\r\n            static_assert(is_same_v<decltype(from_const_lvalue), const convertible&>);\r\n\r\n            const Expected const_rvalue{unexpect, -42};\r\n            auto&& from_const_rvalue = move(const_rvalue).error();\r\n            assert(from_const_rvalue == -42);\r\n            static_assert(is_same_v<decltype(from_const_rvalue), const convertible&&>);\r\n        }\r\n    }\r\n\r\n    template <IsNothrowConstructible nothrowConstructible, IsNothrowConvertible nothrowConvertible>\r\n    constexpr void test_monadic() {\r\n        constexpr bool construction_is_noexcept = IsYes(nothrowConstructible);\r\n        constexpr bool conversion_is_noexcept   = IsYes(nothrowConvertible);\r\n        constexpr bool should_be_noexcept       = construction_is_noexcept && conversion_is_noexcept;\r\n\r\n        struct payload_monadic {\r\n            constexpr payload_monadic(const int val) noexcept : _val(val) {}\r\n            constexpr payload_monadic(const payload_monadic& other) noexcept(construction_is_noexcept)\r\n                : _val(other._val + 2) {}\r\n            constexpr payload_monadic(payload_monadic&& other) noexcept(construction_is_noexcept)\r\n                : _val(other._val + 3) {}\r\n            constexpr payload_monadic(const convertible& val) noexcept(conversion_is_noexcept) : _val(val._val + 4) {}\r\n            constexpr payload_monadic(convertible&& val) noexcept(conversion_is_noexcept) : _val(val._val + 5) {}\r\n\r\n            [[nodiscard]] constexpr bool operator==(const payload_monadic& right) const noexcept {\r\n                return _val == right._val;\r\n            }\r\n\r\n            int _val = 0;\r\n        };\r\n\r\n        { // with payload argument\r\n            using Expected = expected<payload_monadic, int>;\r\n\r\n            Expected with_value{in_place, 42};\r\n            const Expected const_with_value{in_place, 1337};\r\n            assert(with_value.value_or(payload_monadic{1}) == 42 + 2);\r\n            assert(const_with_value.value_or(payload_monadic{1}) == 1337 + 2);\r\n            static_assert(noexcept(with_value.value_or(payload_monadic{1})) == construction_is_noexcept);\r\n            static_assert(noexcept(const_with_value.value_or(payload_monadic{1})) == construction_is_noexcept);\r\n\r\n            assert(move(with_value).value_or(payload_monadic{1}) == 42 + 3);\r\n            assert(move(const_with_value).value_or(payload_monadic{1}) == 1337 + 2);\r\n            static_assert(noexcept(move(with_value).value_or(payload_monadic{1})) == construction_is_noexcept);\r\n            static_assert(noexcept(move(const_with_value).value_or(payload_monadic{1})) == construction_is_noexcept);\r\n\r\n            const payload_monadic input{2};\r\n            Expected with_error{unexpect, 42};\r\n            const Expected const_with_error{unexpect, 1337};\r\n            assert(with_error.value_or(payload_monadic{1}) == 1 + 3);\r\n            assert(const_with_error.value_or(input) == 2 + 2);\r\n            static_assert(noexcept(with_error.value_or(payload_monadic{1})) == construction_is_noexcept);\r\n            static_assert(noexcept(const_with_error.value_or(input)) == construction_is_noexcept);\r\n\r\n            assert(move(with_error).value_or(payload_monadic{1}) == 1 + 3);\r\n            assert(move(const_with_error).value_or(input) == 2 + 2);\r\n            static_assert(noexcept(move(with_error).value_or(payload_monadic{1})) == construction_is_noexcept);\r\n            static_assert(noexcept(move(const_with_error).value_or(input)) == construction_is_noexcept);\r\n        }\r\n\r\n        { // with convertible argument\r\n            using Expected = expected<payload_monadic, int>;\r\n\r\n            Expected with_value{in_place, 42};\r\n            const Expected const_with_value{in_place, 1337};\r\n            assert(with_value.value_or(convertible{1}) == 42 + 2);\r\n            assert(const_with_value.value_or(convertible{1}) == 1337 + 2);\r\n            static_assert(noexcept(with_value.value_or(convertible{1})) == should_be_noexcept);\r\n            static_assert(noexcept(const_with_value.value_or(convertible{1})) == should_be_noexcept);\r\n\r\n            assert(move(with_value).value_or(convertible{1}) == 42 + 3);\r\n            assert(move(const_with_value).value_or(convertible{1}) == 1337 + 2);\r\n            static_assert(noexcept(move(with_value).value_or(convertible{1})) == should_be_noexcept);\r\n            static_assert(noexcept(move(const_with_value).value_or(convertible{1})) == should_be_noexcept);\r\n\r\n            const convertible input{2};\r\n            Expected with_error{unexpect, 42};\r\n            const Expected const_with_error{unexpect, 1337};\r\n            assert(with_error.value_or(convertible{1}) == 1 + 5);\r\n            assert(const_with_error.value_or(input) == 2 + 4);\r\n            static_assert(noexcept(with_error.value_or(convertible{1})) == should_be_noexcept);\r\n            static_assert(noexcept(const_with_error.value_or(input)) == should_be_noexcept);\r\n\r\n            assert(move(with_error).value_or(convertible{1}) == 1 + 5);\r\n            assert(move(const_with_error).value_or(input) == 2 + 4);\r\n            static_assert(noexcept(move(with_error).value_or(convertible{1})) == should_be_noexcept);\r\n            static_assert(noexcept(move(const_with_error).value_or(input)) == should_be_noexcept);\r\n        }\r\n    }\r\n\r\n    constexpr void test_monadic() noexcept {\r\n        test_monadic<IsNothrowConstructible::Not, IsNothrowConvertible::Not>();\r\n        test_monadic<IsNothrowConstructible::Not, IsNothrowConvertible::Yes>();\r\n        test_monadic<IsNothrowConstructible::Yes, IsNothrowConvertible::Not>();\r\n        test_monadic<IsNothrowConstructible::Yes, IsNothrowConvertible::Yes>();\r\n    }\r\n\r\n    template <IsNothrowComparable nothrowComparable>\r\n    constexpr void test_equality() noexcept {\r\n        constexpr bool should_be_noexcept = IsYes(nothrowComparable);\r\n\r\n        struct payload_equality {\r\n            constexpr payload_equality(const int val) noexcept : _val(val) {}\r\n\r\n            [[nodiscard]] constexpr bool operator==(const payload_equality& right) const noexcept(should_be_noexcept) {\r\n                return _val == right._val;\r\n            }\r\n\r\n            int _val = 0;\r\n        };\r\n\r\n        { // compare against same expected\r\n            using Expected = expected<payload_equality, int>;\r\n\r\n            const Expected with_value1{in_place, 42};\r\n            const Expected with_value2{in_place, 1337};\r\n            assert(with_value1 == with_value1);\r\n            assert(with_value1 != with_value2);\r\n            static_assert(noexcept(with_value1 == with_value1) == should_be_noexcept);\r\n            static_assert(noexcept(with_value1 != with_value2) == should_be_noexcept);\r\n\r\n            const Expected error1{unexpect, 42};\r\n            const Expected error2{unexpect, 1337};\r\n            assert(error1 == error1);\r\n            assert(error1 != error2);\r\n            static_assert(noexcept(error1 == error1) == should_be_noexcept);\r\n            static_assert(noexcept(error1 != error2) == should_be_noexcept);\r\n\r\n            assert(with_value1 != error1);\r\n            static_assert(noexcept(with_value1 != error1) == should_be_noexcept);\r\n        }\r\n\r\n        { // expected<void> compare against same expected\r\n            using Expected = expected<void, payload_equality>;\r\n\r\n            const Expected with_value{in_place};\r\n            assert(with_value == with_value);\r\n            assert(!(with_value != with_value));\r\n            static_assert(noexcept(with_value == with_value) == should_be_noexcept);\r\n            static_assert(noexcept(with_value != with_value) == should_be_noexcept);\r\n\r\n            const Expected error1{unexpect, 42};\r\n            const Expected error2{unexpect, 1337};\r\n            assert(error1 == error1);\r\n            assert(error1 != error2);\r\n            static_assert(noexcept(error1 == error1) == should_be_noexcept);\r\n            static_assert(noexcept(error1 != error2) == should_be_noexcept);\r\n\r\n            assert(with_value != error1);\r\n            static_assert(noexcept(with_value != error1) == should_be_noexcept);\r\n        }\r\n\r\n        { // compare against different expected\r\n            using Expected      = expected<payload_equality, int>;\r\n            using OtherExpected = expected<int, payload_equality>;\r\n\r\n            const Expected with_value1{in_place, 42};\r\n            const OtherExpected with_value2{in_place, 1337};\r\n            assert(with_value1 == with_value1);\r\n            assert(with_value1 != with_value2);\r\n            static_assert(noexcept(with_value1 == with_value1) == should_be_noexcept);\r\n            static_assert(noexcept(with_value1 != with_value2) == should_be_noexcept);\r\n\r\n            const Expected error1{unexpect, 42};\r\n            const OtherExpected error2{unexpect, 1337};\r\n            assert(error1 == error1);\r\n            assert(error1 != error2);\r\n            static_assert(noexcept(error1 == error1) == should_be_noexcept);\r\n            static_assert(noexcept(error1 != error2) == should_be_noexcept);\r\n\r\n            assert(with_value1 != error1);\r\n            static_assert(noexcept(with_value1 != error1) == should_be_noexcept);\r\n        }\r\n\r\n        { // compare against base type\r\n            using Base     = payload_equality;\r\n            using Expected = expected<Base, int>;\r\n\r\n            const Expected with_value{in_place, 42};\r\n            const Expected with_error{unexpect, 1337};\r\n            assert(with_value == Base{42});\r\n            assert(with_value != Base{1337});\r\n            static_assert(noexcept(with_value == Base{42}) == should_be_noexcept);\r\n            static_assert(noexcept(with_value != Base{1337}) == should_be_noexcept);\r\n\r\n            assert(with_error != 1337);\r\n            static_assert(noexcept(with_error != 1337) == should_be_noexcept);\r\n\r\n            assert(with_error != Base{1337});\r\n            static_assert(noexcept(with_error != Base{1337}) == should_be_noexcept);\r\n        }\r\n\r\n        { // compare against unexpected with same base\r\n            using Base       = payload_equality;\r\n            using Unexpected = unexpected<Base>;\r\n            using Expected   = expected<int, Base>;\r\n\r\n            const Expected with_value{in_place, 42};\r\n            const Expected with_error{unexpect, 1337};\r\n            assert(with_value != Unexpected{1337});\r\n            static_assert(noexcept(with_value != Unexpected{1337}) == should_be_noexcept);\r\n\r\n            assert(with_error == Unexpected{1337});\r\n            assert(with_error != Unexpected{42});\r\n            static_assert(noexcept(with_error == Unexpected{1337}) == should_be_noexcept);\r\n            static_assert(noexcept(with_error != Unexpected{42}) == should_be_noexcept);\r\n\r\n            assert(with_error != Base{1337});\r\n            static_assert(noexcept(with_error != Base{1337}) == should_be_noexcept);\r\n        }\r\n\r\n        { // expected<void> compare against unexpected with same base\r\n            using Base       = payload_equality;\r\n            using Unexpected = unexpected<Base>;\r\n            using Expected   = expected<void, Base>;\r\n\r\n            const Expected with_value{in_place};\r\n            const Expected with_error{unexpect, 1337};\r\n            assert(with_value != Unexpected{1337});\r\n            static_assert(noexcept(with_value != Unexpected{1337}) == should_be_noexcept);\r\n\r\n            assert(with_error == Unexpected{1337});\r\n            assert(with_error != Unexpected{42});\r\n            static_assert(noexcept(with_error == Unexpected{1337}) == should_be_noexcept);\r\n            static_assert(noexcept(with_error != Unexpected{42}) == should_be_noexcept);\r\n        }\r\n\r\n        { // compare against unexpected with different base\r\n            using Base       = payload_equality;\r\n            using Unexpected = unexpected<int>;\r\n            using Expected   = expected<int, Base>;\r\n\r\n            const Expected with_value{in_place, 42};\r\n            const Expected with_error{unexpect, 1337};\r\n            assert(with_value != Unexpected{1337});\r\n            static_assert(noexcept(with_value != Unexpected{1337}) == should_be_noexcept);\r\n\r\n            assert(with_error == Unexpected{1337});\r\n            assert(with_error != Unexpected{42});\r\n            static_assert(noexcept(with_error == Unexpected{1337}) == should_be_noexcept);\r\n            static_assert(noexcept(with_error != Unexpected{42}) == should_be_noexcept);\r\n\r\n            assert(with_error != Base{1337});\r\n            static_assert(noexcept(with_error != Base{1337}) == should_be_noexcept);\r\n        }\r\n\r\n        { // expected<void> compare against unexpected with different base\r\n            using Base       = payload_equality;\r\n            using Unexpected = unexpected<int>;\r\n            using Expected   = expected<void, Base>;\r\n\r\n            const Expected with_value{in_place};\r\n            const Expected with_error{unexpect, 1337};\r\n            assert(with_value != Unexpected{1337});\r\n            static_assert(noexcept(with_value != Unexpected{1337}) == should_be_noexcept);\r\n\r\n            assert(with_error == Unexpected{1337});\r\n            assert(with_error != Unexpected{42});\r\n            static_assert(noexcept(with_error == Unexpected{1337}) == should_be_noexcept);\r\n            static_assert(noexcept(with_error != Unexpected{42}) == should_be_noexcept);\r\n        }\r\n    }\r\n\r\n    constexpr void test_equality() noexcept {\r\n        test_equality<IsNothrowComparable::Not>();\r\n        test_equality<IsNothrowComparable::Yes>();\r\n    }\r\n\r\n    constexpr bool test_all() noexcept {\r\n        test_aliases();\r\n        test_special_members();\r\n        test_constructors();\r\n        test_assignment();\r\n        test_triviality_of_assignment_all(); // per LWG-4026, see also LLVM-74768\r\n        test_emplace();\r\n        test_swap();\r\n        test_access();\r\n        test_monadic();\r\n        test_equality();\r\n\r\n        return true;\r\n    }\r\n} // namespace test_expected\r\n\r\nvoid test_reinit_regression() {\r\n    // _Reinit_expected had a bug in its conditional noexcept that would terminate the program\r\n    // when switching from error state to value state when the value type is nothrow-movable\r\n    // but the conversion throws.\r\n\r\n    constexpr int magic = 1729;\r\n\r\n    struct throwing_int_conversion {\r\n        [[noreturn]] operator int() const {\r\n            throw magic;\r\n        }\r\n    };\r\n\r\n    expected<int, bool> e{unexpect, false};\r\n\r\n    try {\r\n        e = throwing_int_conversion{};\r\n        assert(false);\r\n    } catch (const int& i) {\r\n        assert(i == magic);\r\n    }\r\n}\r\n\r\n// Defend against regression of LLVM-59854, in which clang is confused by the\r\n// explicit `noexcept` on `expected`'s destructors.\r\nstruct Data {\r\n    vector<int> vec_;\r\n    constexpr Data(initializer_list<int> il) : vec_(il) {}\r\n};\r\nstatic_assert(((void) expected<void, Data>{unexpect, {1, 2, 3}}, true));\r\n\r\nvoid test_lwg_3843() {\r\n    struct Indicator {\r\n        Indicator() = default;\r\n\r\n        Indicator(Indicator& other) noexcept : count(other.count + 256) {}\r\n        Indicator(const Indicator& other) noexcept : count(other.count + 1024) {}\r\n\r\n        Indicator(Indicator&& other) noexcept : count(other.count + 1) {}\r\n        Indicator(const Indicator&& other) noexcept : count(other.count + 16) {}\r\n\r\n        Indicator& operator=(const Indicator&) = default;\r\n        Indicator& operator=(Indicator&&)      = default;\r\n\r\n        int count = 0;\r\n    };\r\n\r\n    {\r\n        expected<int, Indicator> exv{unexpect};\r\n        assert(exv.error().count == 0);\r\n\r\n        try {\r\n            (void) exv.value();\r\n        } catch (const bad_expected_access<Indicator>& e) {\r\n            assert(e.error().count == 1025);\r\n        }\r\n\r\n        try {\r\n            (void) as_const(exv).value();\r\n        } catch (const bad_expected_access<Indicator>& e) {\r\n            assert(e.error().count == 1025);\r\n        }\r\n\r\n        try {\r\n            (void) move(exv).value();\r\n        } catch (const bad_expected_access<Indicator>& e) {\r\n            assert(e.error().count == 2);\r\n        }\r\n\r\n        try {\r\n            (void) move(as_const(exv)).value();\r\n        } catch (const bad_expected_access<Indicator>& e) {\r\n            assert(e.error().count == 17);\r\n        }\r\n    }\r\n\r\n    {\r\n        expected<void, Indicator> exv{unexpect};\r\n        assert(exv.error().count == 0);\r\n\r\n        try {\r\n            (void) exv.value();\r\n        } catch (const bad_expected_access<Indicator>& e) {\r\n            assert(e.error().count == 1025);\r\n        }\r\n\r\n        try {\r\n            (void) as_const(exv).value();\r\n        } catch (const bad_expected_access<Indicator>& e) {\r\n            assert(e.error().count == 1025);\r\n        }\r\n\r\n        try {\r\n            (void) move(exv).value();\r\n        } catch (const bad_expected_access<Indicator>& e) {\r\n            assert(e.error().count == 2);\r\n        }\r\n\r\n        try {\r\n            (void) move(as_const(exv)).value();\r\n        } catch (const bad_expected_access<Indicator>& e) {\r\n            assert(e.error().count == 1025);\r\n        }\r\n    }\r\n}\r\n\r\n// Test LWG-3886: \"Monad mo' problems (in optional and expected)\"\r\n\r\nenum class Qualification {\r\n    None,\r\n    Const,\r\n    Volatile,\r\n    ConstVolatile,\r\n};\r\n\r\ntemplate <class T>\r\nconstexpr Qualification CvQualOf =\r\n    is_const_v<remove_reference_t<T>>\r\n        ? (is_volatile_v<remove_reference_t<T>> ? Qualification::ConstVolatile : Qualification::Const)\r\n        : (is_volatile_v<remove_reference_t<T>> ? Qualification::Volatile : Qualification::None);\r\n\r\nstruct QualDistinction {\r\n    QualDistinction() = default;\r\n\r\n    constexpr QualDistinction(QualDistinction&&) noexcept : qual_{Qualification::None} {}\r\n    constexpr QualDistinction(const QualDistinction&) noexcept : qual_{Qualification::Const} {}\r\n    template <class T>\r\n        requires is_same_v<remove_cvref_t<T>, QualDistinction>\r\n    constexpr QualDistinction(T&&) noexcept : qual_{CvQualOf<T>} {}\r\n\r\n    constexpr QualDistinction& operator=(QualDistinction&&) noexcept {\r\n        qual_ = Qualification::None;\r\n        return *this;\r\n    }\r\n    constexpr QualDistinction& operator=(const QualDistinction&) noexcept {\r\n        qual_ = Qualification::Const;\r\n        return *this;\r\n    }\r\n    template <class T>\r\n        requires is_same_v<remove_cvref_t<T>, QualDistinction>\r\n    constexpr QualDistinction& operator=(T&&) noexcept {\r\n        qual_ = CvQualOf<T>;\r\n        return *this;\r\n    }\r\n    template <class T>\r\n        requires is_same_v<remove_cvref_t<T>, QualDistinction>\r\n    constexpr const QualDistinction& operator=(T&&) const noexcept {\r\n        qual_ = CvQualOf<T>;\r\n        return *this;\r\n    }\r\n    template <class T>\r\n        requires is_same_v<remove_cvref_t<T>, QualDistinction>\r\n    volatile QualDistinction& operator=(T&&) volatile noexcept {\r\n        qual_ = CvQualOf<T>;\r\n        return *this;\r\n    }\r\n    template <class T>\r\n        requires is_same_v<remove_cvref_t<T>, QualDistinction>\r\n    const volatile QualDistinction& operator=(T&&) const volatile noexcept {\r\n        qual_ = CvQualOf<T>;\r\n        return *this;\r\n    }\r\n\r\n    mutable Qualification qual_ = Qualification::None;\r\n};\r\n\r\nconstexpr bool test_lwg_3886() {\r\n    assert((expected<QualDistinction, char>{unexpect}.value_or({}).qual_ == Qualification::None));\r\n    {\r\n        expected<QualDistinction, char> ex{unexpect};\r\n        assert(ex.value_or({}).qual_ == Qualification::None);\r\n    }\r\n    assert((expected<QualDistinction, char>{unexpect} = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n    {\r\n        expected<QualDistinction, char> ex{in_place};\r\n        assert((ex = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n        ex = unexpected<char>{'*'};\r\n        assert((ex = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n    }\r\n\r\n    assert((expected<const QualDistinction, char>{unexpect}.value_or({}).qual_ == Qualification::None));\r\n    {\r\n        expected<const QualDistinction, char> ex{unexpect};\r\n        assert(ex.value_or({}).qual_ == Qualification::None);\r\n    }\r\n#if 0 // TRANSITION, LWG-3891\r\n    assert(\r\n        (expected<const QualDistinction, char>{unexpect} = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n    {\r\n        expected<const QualDistinction, char> ex{in_place};\r\n        assert((ex = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n        ex = unexpected<char>{'*'};\r\n        assert((ex = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n    }\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_lwg_3886_volatile() {\r\n    assert((expected<volatile QualDistinction, char>{unexpect}.value_or({}).qual_ == Qualification::None));\r\n    {\r\n        expected<volatile QualDistinction, char> ex{unexpect};\r\n        assert(ex.value_or({}).qual_ == Qualification::None);\r\n    }\r\n#if 0 // TRANSITION, LWG-3891\r\n    assert((expected<volatile QualDistinction, char>{unexpect} = {QualDistinction{}}).value().qual_\r\n           == Qualification::None);\r\n    {\r\n        expected<volatile QualDistinction, char> ex{in_place};\r\n        assert((ex = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n        ex = unexpected<char>{'*'};\r\n        assert((ex = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n    }\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    assert((expected<const volatile QualDistinction, char>{unexpect}.value_or({}).qual_ == Qualification::None));\r\n    {\r\n        expected<const volatile QualDistinction, char> ex{unexpect};\r\n        assert(ex.value_or({}).qual_ == Qualification::None);\r\n    }\r\n#if 0 // TRANSITION, LWG-3891\r\n    assert((expected<const volatile QualDistinction, char>{unexpect} = {QualDistinction{}}).value().qual_\r\n           == Qualification::None);\r\n    {\r\n        expected<const volatile QualDistinction, char> ex{in_place};\r\n        assert((ex = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n        ex = unexpected<char>{'*'};\r\n        assert((ex = {QualDistinction{}}).value().qual_ == Qualification::None);\r\n    }\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n\r\n// Test GH-4011: these predicates triggered constraint recursion.\r\nstatic_assert(copyable<expected<any, int>>);\r\nstatic_assert(copyable<expected<void, any>>);\r\n\r\n// Test DevCom-10655311: Class derived from std::expected can't be constructed with bool value type\r\ntemplate <class T, class E>\r\nclass DerivedFromExpected : private expected<T, E> {\r\npublic:\r\n    using expected<T, E>::expected;\r\n    using expected<T, E>::value;\r\n};\r\n\r\nstatic_assert(is_constructible_v<DerivedFromExpected<bool, int>, bool>);\r\nstatic_assert(is_constructible_v<DerivedFromExpected<bool, int>, const bool&>);\r\n\r\nconstexpr bool test_inherited_constructors() {\r\n    DerivedFromExpected<bool, int> wrapped_false_val(false);\r\n    assert(!wrapped_false_val.value());\r\n\r\n    constexpr bool true_val = true;\r\n    DerivedFromExpected<bool, int> wrapped_true_val(true_val);\r\n    assert(wrapped_true_val.value());\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(test_inherited_constructors());\r\n\r\n// Test GH-4279 \"Add deleted function overloads to expected\"\r\n\r\ntemplate <class T, class E>\r\nstruct ambiguating_expected_copy_constructor_caller {\r\n    struct const_lvalue_taker {\r\n        const_lvalue_taker(const expected<T, E>&);\r\n    };\r\n\r\n    void operator()(expected<T, E>);\r\n    void operator()(const_lvalue_taker);\r\n};\r\n\r\ntemplate <class T, class E>\r\nstruct ambiguating_expected_assignment_source {\r\n    operator const expected<T, E>&() &&;\r\n    operator expected<T, E>&&() &&;\r\n};\r\n\r\nstruct move_only {\r\n    move_only()                       = default;\r\n    move_only(move_only&&)            = default;\r\n    move_only& operator=(move_only&&) = default;\r\n};\r\n\r\nstatic_assert(is_invocable_v<ambiguating_expected_copy_constructor_caller<int, char>, const expected<int, char>&>);\r\nstatic_assert(is_invocable_v<ambiguating_expected_copy_constructor_caller<void, int>, const expected<void, int>&>);\r\nstatic_assert(\r\n    !is_invocable_v<ambiguating_expected_copy_constructor_caller<move_only, char>, const expected<move_only, char>&>);\r\nstatic_assert(\r\n    !is_invocable_v<ambiguating_expected_copy_constructor_caller<void, move_only>, const expected<void, move_only>&>);\r\n\r\n#ifndef __EDG__ // TRANSITION, VSO-1601179\r\nstatic_assert(!is_assignable_v<expected<int, char>&, ambiguating_expected_assignment_source<int, char>>);\r\nstatic_assert(!is_assignable_v<expected<void, int>&, ambiguating_expected_assignment_source<void, int>>);\r\nstatic_assert(!is_assignable_v<expected<move_only, char>&, ambiguating_expected_assignment_source<move_only, char>>);\r\nstatic_assert(!is_assignable_v<expected<void, move_only>&, ambiguating_expected_assignment_source<void, move_only>>);\r\n#endif // ^^^ no workaround ^^^\r\n\r\nstatic_assert(test_lwg_3886());\r\n\r\n// Test LWG-4222 \"expected constructor from a single value missing a constraint\"\r\n\r\nstruct ConstructibleFromEverything {\r\n    explicit ConstructibleFromEverything(auto);\r\n};\r\n\r\nstruct ConvertibleFromInt {\r\n    ConvertibleFromInt(int);\r\n};\r\n\r\nstatic_assert(!is_constructible_v<expected<ConstructibleFromEverything, ConvertibleFromInt>, unexpect_t&>);\r\nstatic_assert(!is_constructible_v<expected<ConstructibleFromEverything, ConvertibleFromInt>, const unexpect_t&>);\r\nstatic_assert(!is_constructible_v<expected<ConstructibleFromEverything, ConvertibleFromInt>, unexpect_t>);\r\nstatic_assert(!is_constructible_v<expected<ConstructibleFromEverything, ConvertibleFromInt>, const unexpect_t>);\r\n\r\n// Test LWG-4366 \"Heterogeneous comparison of expected may be ill-formed\"\r\n// Test taken from an example in the issue text\r\nnamespace test_lwg_4366 {\r\n    struct E1 {};\r\n    struct E2 {};\r\n\r\n    struct Bool {\r\n        constexpr operator bool() const {\r\n            return false;\r\n        }\r\n        constexpr explicit operator bool() = delete;\r\n    };\r\n\r\n    constexpr Bool operator==(E1, E2) {\r\n        return {};\r\n    }\r\n\r\n    constexpr void test() {\r\n        unexpected e1{E1{}};\r\n        unexpected e2{E2{}};\r\n        (void) (expected<int, E1>{e1} == e2);\r\n        (void) (expected<void, E1>{e1} == e2);\r\n        (void) (e1 == e2);\r\n        (void) (expected<int, E1>{e1} == expected<int, E2>{e2});\r\n        (void) (expected<void, E1>{e1} == expected<void, E2>{e2});\r\n    }\r\n\r\n    template <bool has_noexcept_operator_bool>\r\n    struct bool_with_noexcept {\r\n        constexpr operator bool() const noexcept(has_noexcept_operator_bool) {\r\n            return false;\r\n        }\r\n    };\r\n\r\n    // Test that operator== has correct noexcept specification (based on noexcept specs of underlying expressions)\r\n\r\n    struct E3 {};\r\n    template <bool has_noexcept_operator_bool>\r\n    struct E4 {};\r\n\r\n    template <bool X>\r\n    constexpr bool_with_noexcept<X> operator==(E3, E4<X>) noexcept {\r\n        return {};\r\n    }\r\n\r\n    template <bool has_noexcept_operator_bool>\r\n    constexpr void test2() {\r\n        unexpected e3{E3{}};\r\n        unexpected e4{E4<has_noexcept_operator_bool>{}};\r\n\r\n        (void) (expected<int, E3>{e3} == e4);\r\n        (void) (expected<void, E3>{e3} == e4);\r\n        (void) (e3 == e4);\r\n        (void) (expected<int, E3>{e3} == expected<int, E4<has_noexcept_operator_bool>>{e4});\r\n        (void) (expected<void, E3>{e3} == expected<void, E4<has_noexcept_operator_bool>>{e4});\r\n\r\n        static_assert(has_noexcept_operator_bool == noexcept(expected<int, E3>{e3} == e4));\r\n        static_assert(has_noexcept_operator_bool == noexcept(expected<void, E3>{e3} == e4));\r\n        static_assert(has_noexcept_operator_bool == noexcept(e3 == e4));\r\n        static_assert(has_noexcept_operator_bool\r\n                      == noexcept(expected<int, E3>{e3} == expected<int, E4<has_noexcept_operator_bool>>{e4}));\r\n        static_assert(has_noexcept_operator_bool\r\n                      == noexcept(expected<void, E3>{e3} == expected<void, E4<has_noexcept_operator_bool>>{e4}));\r\n    }\r\n} // namespace test_lwg_4366\r\n\r\nint main() {\r\n    test_unexpected::test_all();\r\n    static_assert(test_unexpected::test_all());\r\n    test_expected::test_all();\r\n    static_assert(test_expected::test_all());\r\n\r\n    static_assert(is_base_of_v<bad_expected_access<void>, bad_expected_access<int>>);\r\n    static_assert(is_base_of_v<exception, bad_expected_access<void>>);\r\n    static_assert(is_base_of_v<exception, bad_expected_access<int>>);\r\n\r\n    static_assert(is_convertible_v<bad_expected_access<int>*, bad_expected_access<void>*>);\r\n    static_assert(is_convertible_v<bad_expected_access<void>*, exception*>);\r\n    static_assert(is_convertible_v<bad_expected_access<int>*, exception*>);\r\n\r\n    test_reinit_regression();\r\n    test_lwg_3843();\r\n    test_lwg_3886();\r\n    test_lwg_3886_volatile();\r\n    test_inherited_constructors();\r\n\r\n    test_lwg_4366::test();\r\n    test_lwg_4366::test2<true>();\r\n    test_lwg_4366::test2<false>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0325R4_to_array/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0325R4_to_array/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <memory>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T, class E, size_t N>\r\nconstexpr void assert_equal(T&& actual, const array<E, N>& expected) {\r\n    static_assert(is_same_v<T, array<E, N>>);\r\n    assert(actual == expected);\r\n}\r\n\r\nstruct A {\r\n    [[nodiscard]] friend constexpr bool operator==(const A& a, const A& b) {\r\n        return a.an_int == b.an_int && a.a_double == b.a_double;\r\n    }\r\n    int an_int;\r\n    double a_double;\r\n};\r\n\r\nconstexpr bool assert_constexpr() {\r\n    int a[3]             = {};\r\n    const int const_a[3] = {};\r\n    assert_equal(to_array(\"meow\"), array<char, 5>{'m', 'e', 'o', 'w', '\\0'});\r\n    assert_equal(to_array({1, 2}), array<int, 2>{1, 2});\r\n\r\n    assert_equal(to_array<long>({1, 2}), array<long, 2>{1, 2});\r\n    assert_equal(to_array(a), array<int, 3>{0, 0, 0});\r\n    assert_equal(to_array(const_a), array<int, 3>{0, 0, 0});\r\n    assert_equal(to_array(move(a)), array<int, 3>{0, 0, 0});\r\n    assert_equal(to_array(move(const_a)), array<int, 3>{0, 0, 0});\r\n    assert_equal(to_array<A>({{3, 0.1}}), array<A, 1>{{{3, 0.1}}});\r\n    return true;\r\n}\r\n\r\nvoid assert_not_constexpr() {\r\n    unique_ptr<int> c_array_of_unique_ptrs[3] = {make_unique<int>(1), make_unique<int>(2), make_unique<int>(3)};\r\n    int* c_array_of_int_ptrs[3]               = {};\r\n    transform(begin(c_array_of_unique_ptrs), end(c_array_of_unique_ptrs), begin(c_array_of_int_ptrs),\r\n        [](const auto& elm) { return elm.get(); });\r\n    array<unique_ptr<int>, 3> array_of_unique_ptrs = to_array(move(c_array_of_unique_ptrs));\r\n    assert(equal(begin(array_of_unique_ptrs), end(array_of_unique_ptrs), begin(c_array_of_int_ptrs),\r\n        end(c_array_of_int_ptrs), [](const unique_ptr<int>& a, const int* b) { return a.get() == b; }));\r\n    assert_equal(to_array({\"cats\"s, \"go\"s, \"meow\"s}), array<string, 3>{\"cats\", \"go\", \"meow\"});\r\n}\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\nstruct incomplete;\r\n\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nvoid test_adl_proof() { // COMPILE-ONLY\r\n    holder<incomplete>* a[1]{};\r\n    (void) std::to_array(a); // intentionally qualified to avoid ADL\r\n    (void) std::to_array(std::move(a)); // intentionally qualified to avoid ADL\r\n}\r\n#endif // ^^^ no workaround ^^^\r\n\r\nint main() {\r\n    assert(assert_constexpr());\r\n    static_assert(assert_constexpr());\r\n    assert_not_constexpr();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0339R6_polymorphic_allocator/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0339R6_polymorphic_allocator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <limits>\r\n#include <memory>\r\n#include <memory_resource>\r\n#include <new>\r\n\r\nusing std::pmr::polymorphic_allocator;\r\n\r\nvoid allocate_bytes_test() {\r\n    constexpr int N = 5;\r\n\r\n    polymorphic_allocator<> alloc{};\r\n\r\n    void* vp = alloc.allocate_bytes(sizeof(int) * N, alignof(int));\r\n\r\n    int* arr = static_cast<int*>(vp);\r\n\r\n    for (int i = 0; i < N; ++i) {\r\n        alloc.construct(arr + i, i);\r\n    }\r\n\r\n    for (int i = 0; i < N; ++i) {\r\n        assert(arr[i] == i);\r\n    }\r\n\r\n    std::destroy(arr, arr + N);\r\n\r\n    alloc.deallocate_bytes(vp, sizeof(int) * N, alignof(int));\r\n\r\n    void* vp2 = alloc.allocate_bytes(sizeof(int));\r\n    assert(reinterpret_cast<std::uintptr_t>(vp2) % alignof(std::max_align_t) == 0);\r\n    alloc.deallocate_bytes(vp2, sizeof(int));\r\n}\r\n\r\nvoid allocate_object_test() {\r\n    constexpr int N = 10;\r\n\r\n    polymorphic_allocator<> alloc{};\r\n\r\n    int* arr = alloc.allocate_object<int>(N);\r\n\r\n    for (int i = 0; i < N; ++i) {\r\n        alloc.construct(arr + i, i);\r\n    }\r\n\r\n    for (int i = 0; i < N; ++i) {\r\n        assert(arr[i] == i);\r\n    }\r\n\r\n    std::destroy(arr, arr + N);\r\n\r\n    alloc.deallocate_object(arr, N);\r\n\r\n    // N = 1\r\n    int* p = alloc.allocate_object<int>();\r\n    alloc.construct(p, 20);\r\n    assert(*p == 20);\r\n    std::destroy_at(p);\r\n    alloc.deallocate_object(p);\r\n}\r\n\r\nvoid allocate_object_overflow_test() {\r\n    constexpr auto threshold = std::numeric_limits<std::size_t>::max() / sizeof(int);\r\n\r\n    polymorphic_allocator<> alloc{};\r\n\r\n#ifndef __SANITIZE_ADDRESS__ // TRANSITION, google/sanitizers#295\r\n    try {\r\n        int* vp = alloc.allocate_object<int>(threshold);\r\n        alloc.deallocate_object(vp, threshold);\r\n    } catch (const std::bad_alloc&) {\r\n    } catch (...) {\r\n        assert(false);\r\n    }\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    try {\r\n        [[maybe_unused]] int* vp = alloc.allocate_object<int>(threshold + 1);\r\n    } catch (const std::bad_array_new_length&) {\r\n        return;\r\n    } catch (...) {\r\n        assert(false);\r\n    }\r\n    assert(false);\r\n}\r\n\r\nvoid new_object_test() {\r\n    polymorphic_allocator<> alloc{};\r\n\r\n    int* p = alloc.new_object<int>(20);\r\n\r\n    assert(*p == 20);\r\n\r\n    alloc.delete_object(p);\r\n}\r\n\r\n\r\nint main() {\r\n    allocate_bytes_test();\r\n    allocate_object_test();\r\n    allocate_object_overflow_test();\r\n    new_object_test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_clocks/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_clocks/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <chrono>\r\n#include <cmath>\r\n#include <compare>\r\n#include <filesystem>\r\n#include <functional>\r\n#include <iterator>\r\n#include <ratio>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <is_permissive.hpp>\r\n#include <timezone_data.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\n\r\nstruct real_fake_clock {\r\n    using rep                       = long long;\r\n    using period                    = micro;\r\n    using duration                  = microseconds;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now();\r\n};\r\n\r\nstruct rep_missing {\r\n    using period                    = micro;\r\n    using duration                  = microseconds;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now();\r\n};\r\n\r\nstruct rep_not_type {\r\n    char rep;\r\n    using period                    = micro;\r\n    using duration                  = microseconds;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now();\r\n};\r\n\r\nstruct rep_wrong_type {\r\n    using rep                       = real_fake_clock;\r\n    using period                    = micro;\r\n    using duration                  = microseconds;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now();\r\n};\r\n\r\nstruct period_missing {\r\n    using rep                       = long long;\r\n    using duration                  = microseconds;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now();\r\n};\r\n\r\nstruct period_not_type {\r\n    using rep = long long;\r\n    char period;\r\n    using duration                  = microseconds;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now();\r\n};\r\n\r\nstruct period_wrong_type {\r\n    using rep                       = long long;\r\n    using period                    = char;\r\n    using duration                  = microseconds;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now();\r\n};\r\n\r\nstruct duration_missing {\r\n    using rep                       = long long;\r\n    using period                    = micro;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now();\r\n};\r\n\r\nstruct duration_not_type {\r\n    using rep    = long long;\r\n    using period = micro;\r\n    char duration;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now();\r\n};\r\n\r\nstruct duration_wrong_type {\r\n    using rep                       = long long;\r\n    using period                    = micro;\r\n    using duration                  = int;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now();\r\n};\r\n\r\nstruct duration_slightly_wrong_type {\r\n    using rep                       = long long;\r\n    using period                    = micro;\r\n    using duration                  = milliseconds;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now();\r\n};\r\n\r\nstruct duration_slightly_wrong_type2 {\r\n    using rep                       = long long;\r\n    using period                    = micro;\r\n    using duration                  = duration<int, micro>;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now();\r\n};\r\n\r\nstruct time_point_missing {\r\n    using rep                       = long long;\r\n    using period                    = micro;\r\n    using duration                  = microseconds;\r\n    static constexpr bool is_steady = false;\r\n    static time_point<time_point_missing> now();\r\n};\r\n\r\nstruct time_point_not_type {\r\n    using rep      = long long;\r\n    using period   = micro;\r\n    using duration = microseconds;\r\n    char time_point;\r\n    static constexpr bool is_steady = false;\r\n    static chrono::time_point<time_point_not_type> now();\r\n};\r\n\r\nstruct time_point_wrong_type {\r\n    using rep                       = long long;\r\n    using period                    = micro;\r\n    using duration                  = microseconds;\r\n    using time_point                = int;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now();\r\n};\r\n\r\nstruct time_point_wrong_type2 {\r\n    using rep                       = long long;\r\n    using period                    = micro;\r\n    using duration                  = microseconds;\r\n    using time_point                = time_point<real_fake_clock, nanoseconds>;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now();\r\n};\r\n\r\nstruct time_point_wrong_type3 {\r\n    using rep                       = long long;\r\n    using period                    = micro;\r\n    using duration                  = microseconds;\r\n    using time_point                = time_point<time_point_wrong_type3, nanoseconds>;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now();\r\n};\r\n\r\nstruct time_point_different_clock_ok {\r\n    using rep                       = long long;\r\n    using period                    = milli;\r\n    using duration                  = milliseconds;\r\n    using time_point                = time_point<real_fake_clock, milliseconds>;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now();\r\n};\r\n\r\nstruct is_steady_missing {\r\n    using rep        = long long;\r\n    using period     = micro;\r\n    using duration   = microseconds;\r\n    using time_point = time_point<real_fake_clock>;\r\n    static time_point now();\r\n};\r\n\r\nstruct is_steady_type {\r\n    using rep        = long long;\r\n    using period     = micro;\r\n    using duration   = microseconds;\r\n    using time_point = time_point<real_fake_clock>;\r\n    using is_steady  = bool;\r\n    static time_point now();\r\n};\r\n\r\nstruct is_steady_not_static {\r\n    using rep        = long long;\r\n    using period     = micro;\r\n    using duration   = microseconds;\r\n    using time_point = time_point<real_fake_clock>;\r\n    bool is_steady;\r\n    static time_point now();\r\n};\r\n\r\nstruct is_steady_wrong_type {\r\n    using rep                      = long long;\r\n    using period                   = micro;\r\n    using duration                 = microseconds;\r\n    using time_point               = time_point<real_fake_clock>;\r\n    static constexpr int is_steady = 0;\r\n    static time_point now();\r\n};\r\n\r\nstruct now_missing {\r\n    using rep                       = long long;\r\n    using period                    = micro;\r\n    using duration                  = microseconds;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n};\r\n\r\nstruct now_type {\r\n    using rep                       = long long;\r\n    using period                    = micro;\r\n    using duration                  = microseconds;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n    using now                       = time_point;\r\n};\r\n\r\nstruct now_not_fun {\r\n    using rep                       = long long;\r\n    using period                    = micro;\r\n    using duration                  = microseconds;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n    static time_point now;\r\n};\r\n\r\nstruct now_not_static {\r\n    using rep                       = long long;\r\n    using period                    = micro;\r\n    using duration                  = microseconds;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n    time_point now();\r\n};\r\n\r\nstruct now_wrong_type {\r\n    using rep                       = long long;\r\n    using period                    = micro;\r\n    using duration                  = microseconds;\r\n    using time_point                = time_point<real_fake_clock>;\r\n    static constexpr bool is_steady = false;\r\n    static duration now();\r\n};\r\n\r\n// Check standard clocks\r\nstatic_assert(is_clock<steady_clock>::value);\r\nstatic_assert(is_clock_v<system_clock>);\r\nstatic_assert(is_clock_v<steady_clock>);\r\nstatic_assert(is_clock_v<high_resolution_clock>);\r\nstatic_assert(is_clock_v<utc_clock>);\r\nstatic_assert(is_clock_v<tai_clock>);\r\nstatic_assert(is_clock_v<gps_clock>);\r\nstatic_assert(is_clock_v<file_clock>);\r\n\r\n// Check custom clocks\r\nstatic_assert(is_clock_v<real_fake_clock>);\r\n\r\nstatic_assert(!is_clock_v<rep_missing>);\r\nstatic_assert(!is_clock_v<rep_not_type>);\r\nstatic_assert(!is_clock_v<rep_wrong_type>);\r\n\r\nstatic_assert(!is_clock_v<period_missing>);\r\nstatic_assert(!is_clock_v<period_not_type>);\r\nstatic_assert(!is_clock_v<period_wrong_type>);\r\n\r\nstatic_assert(!is_clock_v<duration_missing>);\r\nstatic_assert(!is_clock_v<duration_not_type>);\r\nstatic_assert(!is_clock_v<duration_wrong_type>);\r\nstatic_assert(!is_clock_v<duration_slightly_wrong_type>);\r\nstatic_assert(!is_clock_v<duration_slightly_wrong_type2>);\r\n\r\nstatic_assert(!is_clock_v<time_point_missing>);\r\nstatic_assert(!is_clock_v<time_point_not_type>);\r\nstatic_assert(!is_clock_v<time_point_wrong_type>);\r\nstatic_assert(!is_clock_v<time_point_wrong_type2>);\r\nstatic_assert(!is_clock_v<time_point_wrong_type3>);\r\nstatic_assert(is_clock_v<time_point_different_clock_ok>);\r\n\r\nstatic_assert(!is_clock_v<is_steady_missing>);\r\nstatic_assert(!is_clock_v<is_steady_type>);\r\nstatic_assert(!is_clock_v<is_steady_not_static>);\r\nstatic_assert(!is_clock_v<is_steady_wrong_type>);\r\n\r\nstatic_assert(!is_clock_v<now_missing>);\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-2649325\r\nstatic_assert(!is_clock_v<now_type>);\r\n#endif // ^^^ no workaround ^^^\r\nstatic_assert(!is_clock_v<now_not_fun>);\r\nstatic_assert(!is_clock_v<now_not_static>);\r\nstatic_assert(!is_clock_v<now_wrong_type>);\r\n\r\nvoid test_is_leap_second(const year_month_day& ymd) {\r\n    const sys_days ls{ymd};\r\n    const auto& leap_seconds = get_tzdb().leap_seconds;\r\n    assert(find(leap_seconds.begin(), leap_seconds.end(), ls + days{1}) != leap_seconds.end());\r\n    assert(get_leap_second_info(utc_clock::from_sys<seconds>(ls) + days{1}).is_leap_second);\r\n}\r\n\r\nconstexpr bool test_leap_second() {\r\n    constexpr int jun_leap_second_years[] = {1972, 1981, 1982, 1983, 1985, 1992, 1993, 1994, 1997, 2012, 2015};\r\n    constexpr int dec_leap_second_years[] = {\r\n        1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1987, 1989, 1990, 1995, 1998, 2005, 2008, 2016};\r\n    static_assert(size(jun_leap_second_years) + size(dec_leap_second_years) == 27);\r\n\r\n    if (!is_constant_evaluated()) {\r\n        for (const auto& ls_year : jun_leap_second_years) {\r\n            test_is_leap_second(30d / June / year{ls_year});\r\n        }\r\n        for (const auto& ls_year : dec_leap_second_years) {\r\n            test_is_leap_second(31d / December / year{ls_year});\r\n        }\r\n    }\r\n\r\n    constexpr leap_second leap{sys_seconds{42s}, true, 0s};\r\n    leap_second leap2(leap); // copy construct\r\n    leap_second leap3{sys_seconds{41s}, true, 0s};\r\n    leap3 = leap2; // copy assign\r\n\r\n    constexpr sys_seconds smaller{41s};\r\n    constexpr sys_seconds equal{42s};\r\n    constexpr sys_seconds larger{43s};\r\n\r\n    assert(equal == leap);\r\n    assert(leap == equal);\r\n    static_assert(noexcept(equal == leap));\r\n    static_assert(noexcept(leap == equal));\r\n\r\n    assert(leap < larger);\r\n    assert(smaller < leap);\r\n    static_assert(noexcept(leap < larger));\r\n    static_assert(noexcept(smaller < leap));\r\n\r\n    assert(larger > leap);\r\n    assert(leap > smaller);\r\n    static_assert(noexcept(larger > leap));\r\n    static_assert(noexcept(leap > smaller));\r\n\r\n    assert(equal <= leap);\r\n    assert(smaller <= leap);\r\n    assert(leap <= equal);\r\n    assert(leap <= larger);\r\n    static_assert(noexcept(equal <= leap));\r\n    static_assert(noexcept(leap <= equal));\r\n\r\n    assert(equal >= leap);\r\n    assert(larger >= leap);\r\n    assert(leap >= equal);\r\n    assert(leap >= smaller);\r\n    static_assert(noexcept(equal >= leap));\r\n    static_assert(noexcept(leap >= equal));\r\n\r\n    static_assert(is_eq(leap <=> equal));\r\n    static_assert(is_lt(leap <=> larger));\r\n    static_assert(is_gt(leap <=> smaller));\r\n    static_assert(is_lteq(leap <=> larger));\r\n    static_assert(is_gteq(leap <=> smaller));\r\n    static_assert(is_lteq(leap <=> equal));\r\n    static_assert(is_gteq(leap <=> equal));\r\n    static_assert(noexcept(leap <=> equal));\r\n\r\n    static_assert(is_eq(leap <=> leap_second{equal, true, 0s}));\r\n    static_assert(is_lt(leap <=> leap_second{larger, true, 0s}));\r\n    static_assert(is_gt(leap <=> leap_second{smaller, true, 0s}));\r\n    static_assert(is_lteq(leap <=> leap_second{larger, true, 0s}));\r\n    static_assert(is_gteq(leap <=> leap_second{smaller, true, 0s}));\r\n    static_assert(is_lteq(leap <=> leap_second{equal, true, 0s}));\r\n    static_assert(is_gteq(leap <=> leap_second{equal, true, 0s}));\r\n    static_assert(noexcept(leap <=> leap_second{equal, true, 0s}));\r\n\r\n    static_assert(noexcept(leap.date()));\r\n    static_assert(noexcept(leap.value()));\r\n    static_assert(leap_second{sys_seconds{42s}, true, 0s}.date() == sys_seconds{42s});\r\n    static_assert(leap_second{sys_seconds{42s}, true, 0s}.value() == 1s);\r\n    static_assert(leap_second{sys_seconds{42s}, false, 0s}.value() == -1s);\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool operator==(const leap_second_info& lhs, const leap_second_info& rhs) {\r\n    return lhs.is_leap_second == rhs.is_leap_second && lhs.elapsed == rhs.elapsed;\r\n}\r\n\r\ntemplate <class DurationRep>\r\nvoid test_leap_second_info(const leap_second& leap, seconds accum) {\r\n    const bool is_positive = (leap.value() == 1s);\r\n    // First UTC time when leap is counted, before insertion of a positive leap, after insertion of a negative one.\r\n    const utc_time<duration<DurationRep>> utc_leap{leap.date().time_since_epoch() + accum + (is_positive ? 0s : -1s)};\r\n\r\n    auto lsi = get_leap_second_info(utc_leap - 1s);\r\n    assert(lsi == (leap_second_info{false, accum}));\r\n\r\n    lsi = get_leap_second_info(utc_leap - 500ms);\r\n    assert(lsi == (leap_second_info{false, accum}));\r\n\r\n    accum += leap.value();\r\n    lsi = get_leap_second_info(utc_leap);\r\n    assert(lsi == (leap_second_info{is_positive, accum}));\r\n\r\n    lsi = get_leap_second_info(utc_leap + 500ms);\r\n    assert(lsi == (leap_second_info{is_positive, accum}));\r\n\r\n    lsi = get_leap_second_info(utc_leap + 1s);\r\n    assert(lsi == (leap_second_info{false, accum}));\r\n}\r\n\r\ntemplate <class Duration>\r\nvoid test_utc_clock_to_sys(const leap_second& leap) {\r\n    sys_time<Duration> before_leap;\r\n    if constexpr (is_integral_v<typename Duration::rep>) {\r\n        before_leap = leap.date() - Duration{1};\r\n    } else {\r\n        before_leap =\r\n            sys_time<Duration>{Duration{nextafter(leap.date().time_since_epoch().count(), typename Duration::rep{0})}};\r\n    }\r\n\r\n    auto u = utc_clock::from_sys(before_leap); // just before leap second\r\n    assert(utc_clock::from_sys(utc_clock::to_sys(u)) == u);\r\n    if (leap.value() == 1s) {\r\n        u += Duration{1};\r\n        assert(utc_clock::to_sys(u) == before_leap); // during\r\n    } else {\r\n        assert(utc_clock::from_sys(utc_clock::to_sys(u)) == u);\r\n    }\r\n\r\n    u += 1s;\r\n    assert(utc_clock::from_sys(utc_clock::to_sys(u)) == u); // just after\r\n}\r\n\r\ntemplate <class Duration>\r\nvoid test_file_clock_from_utc(const leap_second& leap) {\r\n    static_assert(is_same_v<filesystem::file_time_type::clock, file_clock>);\r\n\r\n    const auto file_leap = clock_cast<file_clock>(leap.date());\r\n\r\n    auto u = utc_clock::from_sys(leap.date() - Duration{1}); // just before leap second\r\n    assert(file_clock::to_utc(file_clock::from_utc(u)) == u);\r\n\r\n    if (leap.value() == 1s && leap.date() <= sys_days{1d / January / 2017y}) {\r\n        u += Duration{1};\r\n        assert(file_clock::from_utc(u) == file_leap - Duration{1}); // during\r\n    } else {\r\n        assert(file_clock::to_utc(file_clock::from_utc(u)) == u);\r\n    }\r\n\r\n    u += 1s;\r\n    assert(file_clock::to_utc(file_clock::from_utc(u)) == u); // just after\r\n}\r\n\r\nvoid test_utc_clock_from_sys(const leap_second& leap, seconds offset) {\r\n    // Generalized from N4885 [time.clock.utc.members]/3 Example 1.\r\n    auto t = leap.date() - 2ns;\r\n    auto u = utc_clock::from_sys(t);\r\n    assert(u.time_since_epoch() - t.time_since_epoch() == offset);\r\n\r\n    t += 1ns;\r\n    u = utc_clock::from_sys(t);\r\n    assert(u.time_since_epoch() - t.time_since_epoch() == offset);\r\n\r\n    t += 1ns;\r\n    u = utc_clock::from_sys(t);\r\n    offset += leap.value();\r\n    assert(u.time_since_epoch() - t.time_since_epoch() == offset);\r\n\r\n    t += 1ns;\r\n    u = utc_clock::from_sys(t);\r\n    assert(u.time_since_epoch() - t.time_since_epoch() == offset);\r\n}\r\n\r\nvoid test_file_clock_utc() {\r\n    const auto file_epoch{utc_clock::from_sys(sys_days{January / 1 / 1601})};\r\n    assert(file_clock::to_utc(file_time<seconds>{0s}) == file_epoch);\r\n    assert(file_clock::from_utc(file_epoch) == file_time<seconds>{0s});\r\n}\r\n\r\nvoid test_file_clock_to_utc(const leap_second& leap, seconds offset) {\r\n    // FILETIME counts leap seconds after 1 January 2017, so offset is constant thereafter.\r\n    constexpr sys_days file_time_cutoff{1d / January / 2017y};\r\n    auto t = clock_cast<file_clock>(leap.date()) - 2us;\r\n    if (leap > file_time_cutoff) {\r\n        offset = 27s;\r\n    }\r\n\r\n    offset -= duration_cast<seconds>(file_clock::duration{filesystem::__std_fs_file_time_epoch_adjustment});\r\n\r\n    auto u = file_clock::to_utc(t);\r\n    assert(u.time_since_epoch() - t.time_since_epoch() == offset);\r\n\r\n    t += 1us;\r\n    u = file_clock::to_utc(t);\r\n    assert(u.time_since_epoch() - t.time_since_epoch() == offset);\r\n\r\n    t += 1us;\r\n    u = file_clock::to_utc(t);\r\n    if (leap.date() <= file_time_cutoff) {\r\n        offset += leap.value();\r\n    }\r\n\r\n    assert(u.time_since_epoch() - t.time_since_epoch() == offset);\r\n\r\n    t += 1us;\r\n    u = file_clock::to_utc(t);\r\n    assert(u.time_since_epoch() - t.time_since_epoch() == offset);\r\n}\r\n\r\nvoid test_gps_tai_clocks_utc() {\r\n    const auto tai_epoch{utc_clock::from_sys(sys_days{January / 1 / 1958} - seconds{10})};\r\n    const auto gps_epoch{utc_clock::from_sys(sys_days{January / Sunday[1] / 1980})};\r\n\r\n    assert(tai_clock::to_utc(tai_seconds{0s}) == tai_epoch);\r\n    assert(tai_clock::from_utc(tai_epoch) == tai_seconds{0s});\r\n\r\n    assert(gps_clock::to_utc(gps_seconds{0s}) == gps_epoch);\r\n    assert(gps_clock::from_utc(gps_epoch) == gps_seconds{0s});\r\n}\r\n\r\nvoid test_clock_now() {\r\n    auto sys_now  = system_clock::now();\r\n    auto utc_now  = utc_clock::now();\r\n    auto tai_now  = tai_clock::now();\r\n    auto gps_now  = gps_clock::now();\r\n    auto file_now = file_clock::now();\r\n\r\n    static_assert(is_same_v<time_point<system_clock>, decltype(sys_now)>);\r\n    static_assert(is_same_v<time_point<utc_clock>, decltype(utc_now)>);\r\n    static_assert(is_same_v<time_point<tai_clock>, decltype(tai_now)>);\r\n    static_assert(is_same_v<time_point<gps_clock>, decltype(gps_now)>);\r\n    static_assert(is_same_v<time_point<file_clock>, decltype(file_now)>);\r\n}\r\n\r\nvoid test_clock_cast() {\r\n    sys_days st(2020y / January / 1);\r\n    const auto ut = utc_clock::from_sys(st);\r\n    const auto tt = tai_clock::from_utc(ut);\r\n    const auto gt = gps_clock::from_utc(ut);\r\n    const auto ft = file_clock::from_utc(ut);\r\n\r\n    assert(clock_cast<utc_clock>(ut) == ut);\r\n    assert(clock_cast<utc_clock>(st) == ut);\r\n    assert(clock_cast<utc_clock>(tt) == ut);\r\n    assert(clock_cast<utc_clock>(gt) == ut);\r\n    assert(clock_cast<utc_clock>(ft) == ut);\r\n\r\n    assert(clock_cast<system_clock>(ut) == st);\r\n    assert(clock_cast<system_clock>(st) == st);\r\n    assert(clock_cast<system_clock>(tt) == st);\r\n    assert(clock_cast<system_clock>(gt) == st);\r\n    assert(clock_cast<system_clock>(ft) == st);\r\n\r\n    assert(clock_cast<tai_clock>(ut) == tt);\r\n    assert(clock_cast<tai_clock>(st) == tt);\r\n    assert(clock_cast<tai_clock>(tt) == tt);\r\n    assert(clock_cast<tai_clock>(gt) == tt);\r\n    assert(clock_cast<tai_clock>(ft) == tt);\r\n\r\n    assert(clock_cast<gps_clock>(ut) == gt);\r\n    assert(clock_cast<gps_clock>(st) == gt);\r\n    assert(clock_cast<gps_clock>(tt) == gt);\r\n    assert(clock_cast<gps_clock>(gt) == gt);\r\n    assert(clock_cast<gps_clock>(ft) == gt);\r\n\r\n    assert(clock_cast<file_clock>(ut) == ft);\r\n    assert(clock_cast<file_clock>(st) == ft);\r\n    assert(clock_cast<file_clock>(tt) == ft);\r\n    assert(clock_cast<file_clock>(gt) == ft);\r\n    assert(clock_cast<file_clock>(ft) == ft);\r\n\r\n    // N4885 [time.clock.utc.overview]/1 Example 1\r\n    assert(clock_cast<utc_clock>(sys_seconds{sys_days{1970y / January / 1}}).time_since_epoch() == 0s);\r\n    assert(clock_cast<utc_clock>(sys_seconds{sys_days{2000y / January / 1}}).time_since_epoch() == 946'684'822s);\r\n}\r\n\r\ntzdb copy_tzdb() {\r\n    const auto& my_tzdb = get_tzdb_list().front();\r\n    vector<time_zone> zones;\r\n    vector<time_zone_link> links;\r\n    transform(my_tzdb.zones.begin(), my_tzdb.zones.end(), back_inserter(zones),\r\n        [](const auto& tz) { return time_zone{_Secret_time_zone_construct_tag{}, tz.name()}; });\r\n    transform(my_tzdb.links.begin(), my_tzdb.links.end(), back_inserter(links), [](const auto& link) {\r\n        return time_zone_link{_Secret_time_zone_link_construct_tag{}, link.name(), link.target()};\r\n    });\r\n\r\n    return {my_tzdb.version, move(zones), move(links), my_tzdb.leap_seconds, my_tzdb._All_ls_positive};\r\n}\r\n\r\nvoid test() {\r\n    assert(test_leap_second());\r\n    static_assert(test_leap_second());\r\n\r\n    // This is the only date/time of a leap second insertion that can be represented by a duration<float>.\r\n    assert(utc_clock::to_sys(utc_time<duration<float>>{duration<float>{78796800.0f}}).time_since_epoch().count()\r\n           == nextafter(78796800.0f, 0.0f));\r\n\r\n    test_clock_now();\r\n\r\n    seconds offset{0};\r\n    for (const auto& leap : get_tzdb().leap_seconds) {\r\n        test_leap_second_info<long long>(leap, offset);\r\n        test_leap_second_info<double>(leap, offset);\r\n        test_utc_clock_to_sys<seconds>(leap);\r\n        test_utc_clock_to_sys<milliseconds>(leap);\r\n        test_utc_clock_to_sys<duration<double>>(leap);\r\n        test_file_clock_from_utc<seconds>(leap);\r\n        test_file_clock_from_utc<milliseconds>(leap);\r\n        test_utc_clock_from_sys(leap, offset);\r\n        test_file_clock_to_utc(leap, offset);\r\n        offset += leap.value();\r\n        assert(leap._Elapsed() == offset);\r\n    }\r\n    test_gps_tai_clocks_utc();\r\n    test_file_clock_utc();\r\n    test_clock_cast();\r\n\r\n    // a negative leap second when the accumulated offset is positive\r\n    {\r\n        auto my_tzdb   = copy_tzdb();\r\n        auto& leap_vec = my_tzdb.leap_seconds;\r\n        leap_vec.erase(leap_vec.begin() + 27, leap_vec.end());\r\n        leap_vec.emplace_back(sys_days{1d / January / 2020y}, false, leap_vec.back()._Elapsed());\r\n        leap_vec.emplace_back(sys_days{1d / January / 2021y}, true, leap_vec.back()._Elapsed());\r\n        my_tzdb._All_ls_positive = false;\r\n        get_tzdb_list()._Emplace_front(move(my_tzdb));\r\n    }\r\n\r\n    offset = 0s;\r\n    for (const auto& leap : get_tzdb().leap_seconds) {\r\n        test_leap_second_info<long long>(leap, offset);\r\n        test_leap_second_info<double>(leap, offset);\r\n        test_utc_clock_to_sys<seconds>(leap);\r\n        test_utc_clock_to_sys<milliseconds>(leap);\r\n        test_utc_clock_to_sys<duration<double>>(leap);\r\n        test_file_clock_from_utc<seconds>(leap);\r\n        test_file_clock_from_utc<milliseconds>(leap);\r\n        test_utc_clock_from_sys(leap, offset);\r\n        test_file_clock_to_utc(leap, offset);\r\n        offset += leap.value();\r\n        assert(leap._Elapsed() == offset);\r\n    }\r\n\r\n    // positive and negative leap seconds when the accumulated offset is negative\r\n    {\r\n        auto my_tzdb   = copy_tzdb();\r\n        auto& leap_vec = my_tzdb.leap_seconds;\r\n        leap_vec.erase(leap_vec.begin() + 27, leap_vec.end());\r\n        for (int i = 0; i < 30; ++i) {\r\n            leap_vec.emplace_back(sys_days{1d / January / year{i + 2020}}, false, leap_vec.back()._Elapsed());\r\n        }\r\n        leap_vec.emplace_back(sys_days{1d / January / 2060y}, true, leap_vec.back()._Elapsed());\r\n        get_tzdb_list()._Emplace_front(move(my_tzdb));\r\n    }\r\n\r\n    offset = 0s;\r\n    for (const auto& leap : get_tzdb().leap_seconds) {\r\n        test_leap_second_info<long long>(leap, offset);\r\n        test_leap_second_info<double>(leap, offset);\r\n        test_utc_clock_to_sys<seconds>(leap);\r\n        test_utc_clock_to_sys<milliseconds>(leap);\r\n        test_utc_clock_to_sys<duration<double>>(leap);\r\n        test_file_clock_from_utc<seconds>(leap);\r\n        test_file_clock_from_utc<milliseconds>(leap);\r\n        test_utc_clock_from_sys(leap, offset);\r\n        test_file_clock_to_utc(leap, offset);\r\n        offset += leap.value();\r\n        assert(leap._Elapsed() == offset);\r\n    }\r\n}\r\n\r\n// LWG-4139 \"[time.zone.leap] recursive constraint in <=>\"\r\nnamespace lwg_4139 {\r\n    struct conv_to_leap_second : local_t {\r\n        operator leap_second() const noexcept;\r\n    };\r\n\r\n    static_assert(equality_comparable<conv_to_leap_second> == is_permissive);\r\n    static_assert(equality_comparable_with<conv_to_leap_second, leap_second> == is_permissive);\r\n    static_assert(totally_ordered<conv_to_leap_second> == is_permissive);\r\n    static_assert(totally_ordered_with<conv_to_leap_second, leap_second> == is_permissive);\r\n    static_assert(three_way_comparable<conv_to_leap_second> == is_permissive);\r\n    static_assert(three_way_comparable_with<conv_to_leap_second, leap_second> == is_permissive);\r\n\r\n    using ref_leap_second = reference_wrapper<leap_second>;\r\n\r\n    static_assert(equality_comparable<ref_leap_second>);\r\n    static_assert(equality_comparable_with<ref_leap_second, leap_second>);\r\n    static_assert(totally_ordered<ref_leap_second>);\r\n    static_assert(totally_ordered_with<ref_leap_second, leap_second>);\r\n    static_assert(three_way_comparable<ref_leap_second>);\r\n    static_assert(three_way_comparable_with<ref_leap_second, leap_second>);\r\n\r\n    template <class T, class U>\r\n    concept can_equality_compare_with = requires(const remove_reference_t<T>& t, const remove_reference_t<U>& u) {\r\n        t == u;\r\n        t != u;\r\n        u == t;\r\n        u != t;\r\n    };\r\n\r\n    template <class T, class U>\r\n    concept can_relation_compare_with = requires(const remove_reference_t<T>& t, const remove_reference_t<U>& u) {\r\n        t < u;\r\n        t > u;\r\n        t <= u;\r\n        t >= u;\r\n        u < t;\r\n        u > t;\r\n        u <= t;\r\n        u >= t;\r\n    };\r\n\r\n    template <class T, class U>\r\n    concept can_three_way_compare_with = requires(const remove_reference_t<T>& t, const remove_reference_t<U>& u) {\r\n        t <=> u;\r\n        u <=> t;\r\n    };\r\n\r\n    static_assert(!can_equality_compare_with<conv_to_leap_second, sys_seconds>);\r\n    static_assert(!can_relation_compare_with<conv_to_leap_second, sys_seconds>);\r\n    static_assert(!can_three_way_compare_with<conv_to_leap_second, sys_seconds>);\r\n\r\n    static_assert(can_equality_compare_with<ref_leap_second, sys_seconds>);\r\n    static_assert(can_relation_compare_with<ref_leap_second, sys_seconds>);\r\n    static_assert(can_three_way_compare_with<ref_leap_second, sys_seconds>);\r\n} // namespace lwg_4139\r\n\r\nint main() {\r\n    run_tz_test([] { test(); });\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_dates/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_dates/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\n\r\nconstexpr int y_min = -32767;\r\nconstexpr int y_max = 32767;\r\n\r\n// For testing LWG-3260 \"year_month* arithmetic rejects durations convertible to years\"\r\nusing Decades = duration<int, ratio_multiply<ratio<10>, years::period>>;\r\n\r\nconstexpr void day_test() {\r\n    day d{0u};\r\n\r\n    static_assert(noexcept(day{}));\r\n    static_assert(noexcept(day{0u}));\r\n\r\n    static_assert(noexcept(++d));\r\n    static_assert(noexcept(d++));\r\n    static_assert(noexcept(--d));\r\n    static_assert(noexcept(d--));\r\n    static_assert(noexcept(d += days{}));\r\n    static_assert(noexcept(d -= days{}));\r\n\r\n    static_assert(noexcept(static_cast<unsigned int>(d)));\r\n    static_assert(noexcept(d.ok()));\r\n\r\n    static_assert(noexcept(d == d));\r\n    static_assert(noexcept(d <=> d));\r\n\r\n    static_assert(noexcept(d + days{}));\r\n    static_assert(noexcept(days{} + d));\r\n\r\n    static_assert(noexcept(d - days{}));\r\n    static_assert(noexcept(d - d));\r\n\r\n    static_assert(noexcept(0d));\r\n\r\n    assert(static_cast<unsigned int>(d) == 0u);\r\n    assert(d == 0d);\r\n    assert(++d == 1d);\r\n    assert(d++ == 1d);\r\n    assert(d == 2d);\r\n\r\n    assert(--d == 1d);\r\n    assert(d-- == 1d);\r\n    assert(d == 0d);\r\n\r\n    d += days{2};\r\n    assert(d == 2d);\r\n    d -= days{2};\r\n    assert(d == 0d);\r\n\r\n    assert(d < 2d);\r\n    assert(2d > d);\r\n\r\n    for (unsigned int i = 0; i <= 255; ++i) {\r\n        if (i > 0 && i <= 31) {\r\n            assert(day{i}.ok());\r\n        } else {\r\n            assert(!day{i}.ok());\r\n        }\r\n    }\r\n\r\n    assert(5d + days{5} == 10d);\r\n    assert(days{5} + 5d == 10d);\r\n    assert(10d - days{5} == 5d);\r\n    assert(10d - 2d == days{8});\r\n}\r\n\r\nconstexpr void month_test() {\r\n    month m{1u};\r\n\r\n    static_assert(noexcept(month{}));\r\n    static_assert(noexcept(month{0u}));\r\n\r\n    static_assert(noexcept(++m));\r\n    static_assert(noexcept(m++));\r\n    static_assert(noexcept(--m));\r\n    static_assert(noexcept(m--));\r\n    static_assert(noexcept(m += months{}));\r\n    static_assert(noexcept(m -= months{}));\r\n\r\n    static_assert(noexcept(static_cast<unsigned int>(m)));\r\n    static_assert(noexcept(m.ok()));\r\n\r\n    static_assert(noexcept(m == m));\r\n    static_assert(noexcept(m <=> m));\r\n\r\n    static_assert(noexcept(m + months{}));\r\n    static_assert(noexcept(months{0} + m));\r\n\r\n    static_assert(noexcept(m - months{}));\r\n    static_assert(noexcept(m - m));\r\n\r\n    assert(static_cast<unsigned int>(m) == 1u);\r\n    assert(m == January);\r\n    assert(++m == February);\r\n    assert(m++ == February);\r\n    assert(m == March);\r\n\r\n    assert(--m == February);\r\n    assert(m-- == February);\r\n    assert(m == January);\r\n\r\n    m += months{2};\r\n    assert(m == March);\r\n    m -= months{2};\r\n    assert(m == January);\r\n\r\n    for (unsigned int i = 0; i <= 255; ++i) {\r\n        if (i >= 1 && i <= 12) {\r\n            assert(month{i}.ok());\r\n        } else {\r\n            assert(!month{i}.ok());\r\n        }\r\n    }\r\n\r\n    assert(February > m);\r\n    assert(m < February);\r\n\r\n    assert(February + months{11} == January);\r\n    assert(months{11} + February == January);\r\n    assert(month{0} + months{1} == January);\r\n    assert(month{13} + months{1} == February);\r\n    assert(month{23} + months{1} == December);\r\n    assert(February - months{2} == December);\r\n    assert(January - February == months{11});\r\n}\r\n\r\nconstexpr void year_test() {\r\n    year y{1};\r\n\r\n    static_assert(noexcept(year{}));\r\n    static_assert(noexcept(year{0}));\r\n\r\n    static_assert(noexcept(++y));\r\n    static_assert(noexcept(y++));\r\n    static_assert(noexcept(--y));\r\n    static_assert(noexcept(y--));\r\n    static_assert(noexcept(y += years{}));\r\n    static_assert(noexcept(y -= years{}));\r\n    static_assert(noexcept(+y));\r\n    static_assert(noexcept(-y));\r\n\r\n    static_assert(noexcept(y.is_leap()));\r\n    static_assert(noexcept(static_cast<int>(y)));\r\n    static_assert(noexcept(y.ok()));\r\n    static_assert(noexcept(year::min()));\r\n    static_assert(noexcept(year::max()));\r\n\r\n    static_assert(noexcept(y == y));\r\n    static_assert(noexcept(y <=> y));\r\n\r\n    static_assert(noexcept(y + years{}));\r\n    static_assert(noexcept(years{} + y));\r\n\r\n    static_assert(noexcept(y - years{}));\r\n    static_assert(noexcept(y - y));\r\n\r\n    static_assert(noexcept(0y));\r\n\r\n    assert(static_cast<int>(y) == 1);\r\n    assert(y == 1y);\r\n    assert(++y == 2y);\r\n    assert(y++ == 2y);\r\n    assert(y == 3y);\r\n\r\n    assert(--y == 2y);\r\n    assert(y-- == 2y);\r\n    assert(y == 1y);\r\n\r\n    y += years{2};\r\n    assert(y == 3y);\r\n    y -= years{2};\r\n    assert(y == 1y);\r\n\r\n    year extreme{-30'000};\r\n    extreme += years{60'000};\r\n    assert(extreme == 30'000y);\r\n    extreme -= years{60'000};\r\n    assert(extreme == -30'000y);\r\n\r\n    assert(+y == 1y);\r\n    assert(-y == year{-1});\r\n    auto y2 = -y;\r\n    assert(-y2 == y);\r\n    assert(+y2 == -y);\r\n\r\n    assert(year::min() == year{y_min});\r\n    assert(year::max() == year{y_max});\r\n\r\n    assert(!year{y_min - 1}.ok());\r\n    assert(!year{y_max + 1}.ok());\r\n\r\n    for (int i = y_min; i <= y_max; ++i) {\r\n        assert(year{i}.ok());\r\n        if (i % 4 == 0 && (i % 100 != 0 || i % 400 == 0)) {\r\n            assert(year{i}.is_leap());\r\n        } else {\r\n            assert(!year{i}.is_leap());\r\n        }\r\n    }\r\n\r\n    assert(y < 2y);\r\n    assert(2y > y);\r\n\r\n    assert(y + years{4} == 5y);\r\n    assert(years{4} + y == 5y);\r\n\r\n    assert(y - years{4} == -3y);\r\n    assert(year{10} - year{5} == years{5});\r\n    assert(year{-5} - year{-10} == years{5});\r\n}\r\n\r\nconstexpr void weekday_test() {\r\n    weekday wd{0u};\r\n\r\n    static_assert(noexcept(weekday{}));\r\n    static_assert(noexcept(weekday{0u}));\r\n    static_assert(noexcept(weekday{sys_days{}}));\r\n    static_assert(noexcept(weekday{local_days{}}));\r\n\r\n    static_assert(noexcept(++wd));\r\n    static_assert(noexcept(wd++));\r\n    static_assert(noexcept(--wd));\r\n    static_assert(noexcept(wd--));\r\n    static_assert(noexcept(wd += days{}));\r\n    static_assert(noexcept(wd -= days{}));\r\n\r\n    static_assert(noexcept(wd.c_encoding()));\r\n    static_assert(noexcept(wd.iso_encoding()));\r\n    static_assert(noexcept(wd.ok()));\r\n    static_assert(noexcept(wd[0u]));\r\n    static_assert(noexcept(wd[last]));\r\n\r\n    static_assert(noexcept(wd == wd));\r\n\r\n    static_assert(noexcept(wd + days{}));\r\n    static_assert(noexcept(days{} + wd));\r\n\r\n    static_assert(noexcept(wd - days{}));\r\n    static_assert(noexcept(wd - wd));\r\n\r\n    assert(weekday{7} == Sunday);\r\n    assert(weekday{sys_days{}} == Thursday);\r\n    assert(weekday{local_days{}} == sys_days{local_days{}.time_since_epoch()});\r\n\r\n    assert(wd == Sunday);\r\n    assert(++wd == Monday);\r\n    assert(wd++ == Monday);\r\n    assert(wd == Tuesday);\r\n\r\n    assert(--wd == Monday);\r\n    assert(wd-- == Monday);\r\n    assert(wd == Sunday);\r\n\r\n    wd += days{2};\r\n    assert(wd == Tuesday);\r\n    wd -= days{3};\r\n    assert(wd == Saturday);\r\n\r\n    assert(Sunday.c_encoding() == 0u);\r\n    assert(Sunday.iso_encoding() == 7u);\r\n\r\n    for (unsigned int i = 0; i <= 255; ++i) {\r\n        if (i <= 7) {\r\n            assert(weekday{i}.ok());\r\n        } else {\r\n            assert(!weekday{i}.ok());\r\n        }\r\n    }\r\n    assert(Monday + days{6} == Sunday);\r\n    assert(Monday + days{8} == Tuesday);\r\n    assert(Wednesday + days{14} == Wednesday);\r\n    assert(Sunday - Monday == days{6});\r\n    assert(Sunday - Tuesday == days{5});\r\n    assert(Wednesday - Thursday == days{6});\r\n\r\n    // GH-5153 \"<chrono>: integer overflow in weekday::weekday(sys_days::max())\"\r\n    assert(weekday{sys_days::max()} == weekday{sys_days::max() - days{7}});\r\n    assert(weekday{local_days::max()} == weekday{local_days::max() - days{7}});\r\n}\r\n\r\nconstexpr void weekday_indexed_test() {\r\n    const weekday_indexed wdi1{Monday, 2};\r\n\r\n    static_assert(noexcept(weekday_indexed{}));\r\n    static_assert(noexcept(weekday_indexed{weekday{}, 0u}));\r\n\r\n    static_assert(noexcept(wdi1.weekday()));\r\n    static_assert(noexcept(wdi1.index()));\r\n    static_assert(noexcept(wdi1.ok()));\r\n\r\n    static_assert(noexcept(wdi1 == wdi1));\r\n\r\n    assert(wdi1.weekday() == Monday);\r\n    assert(wdi1.index() == 2);\r\n\r\n    weekday_indexed wdi2 = Monday[2];\r\n    assert(wdi2.weekday() == Monday);\r\n    assert(wdi2.index() == 2);\r\n\r\n    assert(wdi1 == wdi2);\r\n\r\n    assert((!weekday_indexed{Sunday, 0}.ok()));\r\n    for (unsigned int i = 1; i <= 5; ++i) {\r\n        assert((weekday_indexed{Sunday, i}.ok()));\r\n        assert((weekday_indexed{Monday, i}.ok()));\r\n        assert((weekday_indexed{Tuesday, i}.ok()));\r\n        assert((weekday_indexed{Wednesday, i}.ok()));\r\n        assert((weekday_indexed{Thursday, i}.ok()));\r\n        assert((weekday_indexed{Friday, i}.ok()));\r\n        assert((weekday_indexed{Saturday, i}.ok()));\r\n    }\r\n    assert((!weekday_indexed{Sunday, 6}.ok()));\r\n    assert((!weekday_indexed{Sunday, 7}.ok()));\r\n}\r\n\r\nconstexpr void weekday_last_test() {\r\n    const weekday_last wdl{Monday};\r\n\r\n    static_assert(noexcept(weekday_last{weekday{}}));\r\n\r\n    static_assert(noexcept(wdl.weekday()));\r\n    static_assert(noexcept(wdl.ok()));\r\n\r\n    static_assert(noexcept(wdl == wdl));\r\n\r\n    assert(wdl.ok());\r\n    assert(Monday[last].ok());\r\n    assert(Monday[last].weekday() == Monday);\r\n    assert(wdl.weekday() == Monday);\r\n    assert(wdl == weekday_last{Monday});\r\n}\r\n\r\nconstexpr void month_day_test() {\r\n    const month_day md{January, 1d};\r\n\r\n    static_assert(noexcept(month_day{}));\r\n    static_assert(noexcept(month_day{month{}, day{}}));\r\n\r\n    static_assert(noexcept(md.month()));\r\n    static_assert(noexcept(md.day()));\r\n    static_assert(noexcept(md.ok()));\r\n\r\n    static_assert(noexcept(md == md));\r\n    static_assert(noexcept(md <=> md));\r\n\r\n    assert(md.month() == January);\r\n    assert(md.day() == 1d);\r\n\r\n    assert((md < month_day{January, 2d}));\r\n    assert((month_day{January, 2d} > md));\r\n    assert((md < month_day{December, 25d}));\r\n    assert((month_day{December, 25d} > md));\r\n    assert((md == month_day{January, 1d}));\r\n\r\n    if (is_constant_evaluated()) {\r\n        static_assert((January / 31).ok());\r\n        static_assert((February / 29).ok());\r\n        static_assert((April / 30).ok());\r\n        static_assert(!(January / 32).ok());\r\n        static_assert(!(February / 30).ok());\r\n        static_assert(!(April / 31).ok());\r\n    } else {\r\n        for (unsigned int i = 0; i <= 255; ++i) {\r\n            month m{i};\r\n            for (unsigned int d = 0; d <= 255; ++d) {\r\n                if (d < 1 || d > 31 || i < 1 || i > 12) {\r\n                    assert((!month_day{m, day{d}}.ok()));\r\n                } else if (d == 30 && m == February) {\r\n                    assert((!month_day{m, day{d}}.ok()));\r\n                } else if (d == 31 && (m == February || m == April || m == June || m == September || m == November)) {\r\n                    assert((!month_day{m, day{d}}.ok()));\r\n                } else {\r\n                    assert((month_day{m, day{d}}.ok()));\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nconstexpr void month_day_last_test() {\r\n    const month_day_last mdl{January};\r\n\r\n    static_assert(noexcept(month_day_last{month{}}));\r\n    static_assert(noexcept(mdl.month()));\r\n    static_assert(noexcept(mdl.ok()));\r\n\r\n    static_assert(noexcept(mdl == mdl));\r\n    static_assert(noexcept(mdl <=> mdl));\r\n\r\n    assert((February / last).month() == February);\r\n\r\n    assert(!(month{0} / last).ok());\r\n    for (unsigned int i = 1; i <= 12; ++i) {\r\n        assert((month{i} / last).ok());\r\n    }\r\n    assert(!(month{13} / last).ok());\r\n\r\n    assert(January / last == January / last);\r\n    assert(January / last < February / last);\r\n    assert(December / last > February / last);\r\n}\r\n\r\nconstexpr void month_weekday_test() {\r\n    const auto mwd1 = January / Monday[2];\r\n\r\n    static_assert(noexcept(month_weekday{month{}, weekday_indexed{Sunday, 0u}}));\r\n\r\n    static_assert(noexcept(mwd1.month()));\r\n    static_assert(noexcept(mwd1.weekday_indexed()));\r\n    static_assert(noexcept(mwd1.ok()));\r\n\r\n    static_assert(noexcept(mwd1 == mwd1));\r\n\r\n    assert(mwd1.month() == January);\r\n    assert(mwd1.weekday_indexed().weekday() == Monday);\r\n    assert(mwd1.weekday_indexed().index() == 2);\r\n\r\n    assert(January / Monday[2] == January / Monday[2]);\r\n\r\n    if (is_constant_evaluated()) {\r\n        static_assert((January / Monday[1]).ok());\r\n        static_assert((January / Monday[5]).ok());\r\n        static_assert(!(January / Monday[6]).ok());\r\n        static_assert(!(January / Monday[0]).ok());\r\n        static_assert(!(month{0} / Monday[1]).ok());\r\n    } else {\r\n        for (auto m = 0u; m <= 255u; ++m) {\r\n            for (auto wd = 0u; wd <= 255u; ++wd) {\r\n                for (auto wdi = 0u; wdi <= 6u; ++wdi) {\r\n                    const auto mwd = month{m} / weekday{wd}[wdi];\r\n                    if (m >= 1 && m <= 12 && wd <= 7 && wdi >= 1 && wdi <= 5) {\r\n                        assert(mwd.ok());\r\n                    } else {\r\n                        assert(!mwd.ok());\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nconstexpr void month_weekday_last_test() {\r\n    const auto mwdl = January / Monday[last];\r\n\r\n    static_assert(noexcept(month_weekday_last{month{}, weekday_last{Sunday}}));\r\n    static_assert(noexcept(mwdl.month()));\r\n    static_assert(noexcept(mwdl.weekday_last()));\r\n    static_assert(noexcept(mwdl.ok()));\r\n\r\n    static_assert(noexcept(mwdl == mwdl));\r\n\r\n    assert(mwdl.month() == January);\r\n    assert(mwdl.weekday_last().weekday() == Monday);\r\n    assert(mwdl == January / Monday[last]);\r\n}\r\n\r\nconstexpr void year_month_test() {\r\n    auto ym = 2020y / January;\r\n\r\n    static_assert(noexcept(year_month{}));\r\n    static_assert(noexcept(year_month{year{}, month{}}));\r\n\r\n    static_assert(noexcept(ym.year()));\r\n    static_assert(noexcept(ym.month()));\r\n\r\n    static_assert(noexcept(ym += months{}));\r\n    static_assert(noexcept(ym -= months{}));\r\n    static_assert(noexcept(ym += years{}));\r\n    static_assert(noexcept(ym -= years{}));\r\n\r\n    static_assert(noexcept(ym.ok()));\r\n\r\n    static_assert(noexcept(ym == ym));\r\n    static_assert(noexcept(ym <=> ym));\r\n\r\n    static_assert(noexcept(ym + months{}));\r\n    static_assert(noexcept(months{} + ym));\r\n    static_assert(noexcept(ym - months{}));\r\n\r\n    static_assert(noexcept(ym - ym));\r\n    static_assert(noexcept(ym + years{}));\r\n    static_assert(noexcept(years{} + ym));\r\n    static_assert(noexcept(ym - years{}));\r\n\r\n    assert(ym.year() == 2020y);\r\n    assert(ym.month() == January);\r\n\r\n    ym += months{2};\r\n    assert(ym.year() == 2020y);\r\n    assert(ym.month() == March);\r\n    ym -= months{2};\r\n    assert(ym.year() == 2020y);\r\n    assert(ym.month() == January);\r\n\r\n    ym += years{2};\r\n    assert(ym.year() == 2022y);\r\n    assert(ym.month() == January);\r\n    ym -= years{2};\r\n    assert(ym.year() == 2020y);\r\n    assert(ym.month() == January);\r\n\r\n    ym += Decades{2};\r\n    assert(ym.year() == 2040y);\r\n    assert(ym.month() == January);\r\n    ym -= Decades{2};\r\n    assert(ym.year() == 2020y);\r\n    assert(ym.month() == January);\r\n\r\n    assert(2020y / April == 2020y / April);\r\n    assert(2019y / April < 2020y / April);\r\n    assert(2020y / March < 2020y / April);\r\n    assert(2020y / April > 2019y / April);\r\n    assert(2020y / April > 2020y / March);\r\n\r\n    assert(ym + months{2} == 2020y / March);\r\n    assert(months{2} + ym == 2020y / March);\r\n\r\n    assert(ym - months{2} == 2019y / November);\r\n    assert(ym - 2019y / January == months{12});\r\n\r\n    assert(ym + years{2} == 2022y / January);\r\n    assert(years{2} + ym == 2022y / January);\r\n\r\n    assert(ym - years{2} == 2018y / January);\r\n\r\n    assert(ym + Decades{2} == 2040y / January);\r\n    assert(Decades{2} + ym == 2040y / January);\r\n\r\n    assert(ym - Decades{2} == 2000y / January);\r\n\r\n    if (is_constant_evaluated()) {\r\n        static_assert((2020y / 1).ok());\r\n        static_assert(!(2020y / 13).ok());\r\n        static_assert(!(32768y / 1).ok());\r\n    } else {\r\n        for (int y = y_min - 1; y <= y_max + 1; ++y) {\r\n            for (auto m = 0u; m <= 255u; ++m) {\r\n                const auto ym2 = year{y} / month{m};\r\n                if (y == y_min - 1 || y == y_max + 1) {\r\n                    assert(!ym2.ok());\r\n                } else if (m >= 1 && m <= 12) {\r\n                    assert(ym2.ok());\r\n                } else {\r\n                    assert(!ym2.ok());\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nconstexpr void year_month_day_test() {\r\n    year_month_day ymd1{2020y / January / 1d};\r\n\r\n    static_assert(noexcept(year_month_day{}));\r\n    static_assert(noexcept(year_month_day{year{}, month{}, day{}}));\r\n    static_assert(noexcept(year_month_day{year_month_day_last{year{}, month_day_last{January}}}));\r\n    static_assert(noexcept(year_month_day{sys_days{}}));\r\n    static_assert(noexcept(year_month_day{local_days{}}));\r\n\r\n    static_assert(noexcept(ymd1 += months{}));\r\n    static_assert(noexcept(ymd1 -= months{}));\r\n    static_assert(noexcept(ymd1 += years{}));\r\n    static_assert(noexcept(ymd1 -= years{}));\r\n\r\n    static_assert(noexcept(ymd1.year()));\r\n    static_assert(noexcept(ymd1.month()));\r\n    static_assert(noexcept(ymd1.day()));\r\n\r\n    static_assert(noexcept(static_cast<sys_days>(ymd1)));\r\n    static_assert(noexcept(static_cast<local_days>(ymd1)));\r\n    static_assert(noexcept(ymd1.ok()));\r\n\r\n    static_assert(noexcept(ymd1 == ymd1));\r\n    static_assert(noexcept(ymd1 <=> ymd1));\r\n\r\n    static_assert(noexcept(ymd1 + months{}));\r\n    static_assert(noexcept(months{} + ymd1));\r\n    static_assert(noexcept(ymd1 - months{}));\r\n\r\n    static_assert(noexcept(ymd1 + years{}));\r\n    static_assert(noexcept(years{} + ymd1));\r\n    static_assert(noexcept(ymd1 - years{}));\r\n\r\n    assert(ymd1.year() == 2020y);\r\n    assert(ymd1.month() == January);\r\n    assert(ymd1.day() == 1d);\r\n\r\n    year_month_day ymd2{2020y / January / last};\r\n    assert(ymd2.year() == 2020y);\r\n    assert(ymd2.month() == January);\r\n    assert(ymd2.day() == 31d);\r\n\r\n    year_month_day epoch{sys_days{}};\r\n    assert(epoch == year_month_day{sys_days{epoch}});\r\n    assert(epoch.year() == 1970y);\r\n    assert(epoch.month() == January);\r\n    assert(epoch.day() == 1d);\r\n\r\n    local_days ldp;\r\n    sys_days sys{ldp.time_since_epoch()};\r\n    year_month_day ymld{ldp};\r\n    assert(ymld == year_month_day{sys});\r\n\r\n    ymd1 += months{2};\r\n    assert(ymd1.year() == 2020y);\r\n    assert(ymd1.month() == March);\r\n    assert(ymd1.day() == 1d);\r\n\r\n    ymd1 -= months{2};\r\n    assert(ymd1.year() == 2020y);\r\n    assert(ymd1.month() == January);\r\n    assert(ymd1.day() == 1d);\r\n\r\n    ymd1 += years{2};\r\n    assert(ymd1.year() == 2022y);\r\n    assert(ymd1.month() == January);\r\n    assert(ymd1.day() == 1d);\r\n\r\n    ymd1 -= years{2};\r\n    assert(ymd1.year() == 2020y);\r\n    assert(ymd1.month() == January);\r\n    assert(ymd1.day() == 1d);\r\n\r\n    ymd1 += Decades{2};\r\n    assert(ymd1.year() == 2040y);\r\n    assert(ymd1.month() == January);\r\n    assert(ymd1.day() == 1d);\r\n\r\n    ymd1 -= Decades{2};\r\n    assert(ymd1.year() == 2020y);\r\n    assert(ymd1.month() == January);\r\n    assert(ymd1.day() == 1d);\r\n\r\n    assert(2020y / April / 6d == sys_days{days{18'358}});\r\n    assert(sys_days{2017y / January / 0} == 2016y / December / 31);\r\n    assert(sys_days{2017y / January / 31} == 2017y / January / 31);\r\n    assert(sys_days{2017y / January / 32} == 2017y / February / 1);\r\n\r\n    assert(static_cast<local_days>(ymld) == local_days{});\r\n\r\n    assert(2020y / January / 1d == 2020y / January / 1d);\r\n    assert(2019y / January / 1d < 2020y / January / 1d);\r\n    assert(2020y / January / 1d < 2020y / February / 1d);\r\n    assert(2020y / January / 1d < 2020y / January / 2d);\r\n    assert(2020y / January / 1d > 2019y / January / 1d);\r\n    assert(2020y / February / 1d > 2020y / January / 1d);\r\n    assert(2020y / January / 2d > 2020y / January / 1d);\r\n\r\n    const auto ymd3 = 2019y / December / 31d + months{2};\r\n    assert(ymd3 == 2020y / February / 31d);\r\n    assert(!ymd3.ok());\r\n    assert(months{2} + 2019y / December / 31d == ymd3);\r\n\r\n\r\n    assert(2020y / January / 1d - months{2} == 2019y / November / 1d);\r\n\r\n    assert(2020y / January / 1d + years{2} == 2022y / January / 1d);\r\n    assert(years{2} + 2020y / January / 1d == 2022y / January / 1d);\r\n\r\n    assert(2020y / January / 1d - years{2} == 2018y / January / 1d);\r\n\r\n    assert(2020y / January / 1d + Decades{2} == 2040y / January / 1d);\r\n    assert(Decades{2} + 2020y / January / 1d == 2040y / January / 1d);\r\n\r\n    assert(2020y / January / 1d - Decades{2} == 2000y / January / 1d);\r\n\r\n    if (is_constant_evaluated()) {\r\n        static_assert(!(-32768y / 1 / 1).ok());\r\n        static_assert(!(32768y / 1 / 1).ok());\r\n        static_assert((2020y / 1 / 1).ok());\r\n\r\n        static_assert(!(2020y / 0 / 1).ok());\r\n        static_assert(!(2020y / 13 / 1).ok());\r\n        static_assert((2020y / 5 / 1).ok());\r\n\r\n        static_assert(!(2020y / 2 / 30).ok());\r\n        static_assert(!(2019y / 2 / 29).ok());\r\n        static_assert(!(2020y / 1 / 0).ok());\r\n        static_assert(!(2020y / 1 / 32).ok());\r\n        static_assert((2020y / 2 / 29).ok());\r\n        static_assert((2020y / 7 / 31).ok());\r\n    } else {\r\n        for (int iy = -3000; iy <= 3000; ++iy) { // instead of [y_min, y_max], to limit the number of iterations\r\n            for (auto um = 0u; um <= 13u; ++um) { // instead of [0, 255], to limit the number of iterations\r\n                for (auto ud = 0u; ud <= 32u; ++ud) {\r\n                    const year y{iy};\r\n                    const month m{um};\r\n                    const day d{ud};\r\n                    if (y.ok() && m.ok() && d >= 1d && d <= (y / m / last).day()) {\r\n                        assert((y / m / d).ok());\r\n                    } else {\r\n                        assert(!(y / m / d).ok());\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    if (is_constant_evaluated()) {\r\n        static_assert(sys_days{2000y / 1 / 1} == sys_days{days{10957}});\r\n        static_assert(sys_days{2000y / 1 / 31} == sys_days{days{10987}});\r\n        static_assert(sys_days{2000y / 2 / 1} == sys_days{days{10988}});\r\n        static_assert(sys_days{2000y / 2 / 29} == sys_days{days{11016}});\r\n        static_assert(sys_days{2000y / 3 / 1} == sys_days{days{11017}});\r\n        static_assert(sys_days{2000y / 3 / 31} == sys_days{days{11047}});\r\n        static_assert(sys_days{2000y / 4 / 1} == sys_days{days{11048}});\r\n        static_assert(sys_days{2000y / 4 / 30} == sys_days{days{11077}});\r\n        static_assert(sys_days{2000y / 5 / 1} == sys_days{days{11078}});\r\n        static_assert(sys_days{2000y / 5 / 31} == sys_days{days{11108}});\r\n        static_assert(sys_days{2000y / 6 / 1} == sys_days{days{11109}});\r\n        static_assert(sys_days{2000y / 6 / 30} == sys_days{days{11138}});\r\n        static_assert(sys_days{2000y / 7 / 1} == sys_days{days{11139}});\r\n        static_assert(sys_days{2000y / 7 / 31} == sys_days{days{11169}});\r\n        static_assert(sys_days{2000y / 8 / 1} == sys_days{days{11170}});\r\n        static_assert(sys_days{2000y / 8 / 31} == sys_days{days{11200}});\r\n        static_assert(sys_days{2000y / 9 / 1} == sys_days{days{11201}});\r\n        static_assert(sys_days{2000y / 9 / 30} == sys_days{days{11230}});\r\n        static_assert(sys_days{2000y / 10 / 1} == sys_days{days{11231}});\r\n        static_assert(sys_days{2000y / 10 / 31} == sys_days{days{11261}});\r\n        static_assert(sys_days{2000y / 11 / 1} == sys_days{days{11262}});\r\n        static_assert(sys_days{2000y / 11 / 30} == sys_days{days{11291}});\r\n        static_assert(sys_days{2000y / 12 / 1} == sys_days{days{11292}});\r\n        static_assert(sys_days{2000y / 12 / 31} == sys_days{days{11322}});\r\n        static_assert(sys_days{-400y / 2 / 29} == sys_days{days{-865566}});\r\n        static_assert(sys_days{-400y / 3 / 1} == sys_days{days{-865565}});\r\n        static_assert(sys_days{-1y / 2 / 28} == sys_days{days{-719835}});\r\n        static_assert(sys_days{-1y / 3 / 1} == sys_days{days{-719834}});\r\n        static_assert(sys_days{-1y / 12 / 31} == sys_days{days{-719529}});\r\n        static_assert(sys_days{0y / 1 / 1} == sys_days{days{-719528}});\r\n        static_assert(sys_days{0y / 2 / 29} == sys_days{days{-719469}});\r\n        static_assert(sys_days{0y / 3 / 1} == sys_days{days{-719468}});\r\n        static_assert(sys_days{1900y / 3 / 1} == sys_days{days{-25508}});\r\n        static_assert(sys_days{1901y / 2 / 28} == sys_days{days{-25144}});\r\n        static_assert(sys_days{1903y / 3 / 1} == sys_days{days{-24413}});\r\n        static_assert(sys_days{1904y / 2 / 29} == sys_days{days{-24048}});\r\n        static_assert(sys_days{1996y / 3 / 1} == sys_days{days{9556}});\r\n        static_assert(sys_days{1997y / 2 / 28} == sys_days{days{9920}});\r\n        static_assert(sys_days{1999y / 3 / 1} == sys_days{days{10651}});\r\n        static_assert(sys_days{2000y / 2 / 29} == sys_days{days{11016}});\r\n        static_assert(sys_days{2000y / 3 / 1} == sys_days{days{11017}});\r\n        static_assert(sys_days{2001y / 2 / 28} == sys_days{days{11381}});\r\n        static_assert(sys_days{2003y / 3 / 1} == sys_days{days{12112}});\r\n        static_assert(sys_days{2004y / 2 / 29} == sys_days{days{12477}});\r\n        static_assert(sys_days{2096y / 3 / 1} == sys_days{days{46081}});\r\n        static_assert(sys_days{2097y / 2 / 28} == sys_days{days{46445}});\r\n        static_assert(sys_days{2099y / 3 / 1} == sys_days{days{47176}});\r\n        static_assert(sys_days{2100y / 2 / 28} == sys_days{days{47540}});\r\n        static_assert(sys_days{-32767y / 1 / 1} == sys_days{days{-12687428}});\r\n        static_assert(sys_days{32767y / 12 / 31} == sys_days{days{11248737}});\r\n\r\n        static_assert(2000y / 1 / 1 == year_month_day{sys_days{days{10957}}});\r\n        static_assert(2000y / 1 / 31 == year_month_day{sys_days{days{10987}}});\r\n        static_assert(2000y / 2 / 1 == year_month_day{sys_days{days{10988}}});\r\n        static_assert(2000y / 2 / 29 == year_month_day{sys_days{days{11016}}});\r\n        static_assert(2000y / 3 / 1 == year_month_day{sys_days{days{11017}}});\r\n        static_assert(2000y / 3 / 31 == year_month_day{sys_days{days{11047}}});\r\n        static_assert(2000y / 4 / 1 == year_month_day{sys_days{days{11048}}});\r\n        static_assert(2000y / 4 / 30 == year_month_day{sys_days{days{11077}}});\r\n        static_assert(2000y / 5 / 1 == year_month_day{sys_days{days{11078}}});\r\n        static_assert(2000y / 5 / 31 == year_month_day{sys_days{days{11108}}});\r\n        static_assert(2000y / 6 / 1 == year_month_day{sys_days{days{11109}}});\r\n        static_assert(2000y / 6 / 30 == year_month_day{sys_days{days{11138}}});\r\n        static_assert(2000y / 7 / 1 == year_month_day{sys_days{days{11139}}});\r\n        static_assert(2000y / 7 / 31 == year_month_day{sys_days{days{11169}}});\r\n        static_assert(2000y / 8 / 1 == year_month_day{sys_days{days{11170}}});\r\n        static_assert(2000y / 8 / 31 == year_month_day{sys_days{days{11200}}});\r\n        static_assert(2000y / 9 / 1 == year_month_day{sys_days{days{11201}}});\r\n        static_assert(2000y / 9 / 30 == year_month_day{sys_days{days{11230}}});\r\n        static_assert(2000y / 10 / 1 == year_month_day{sys_days{days{11231}}});\r\n        static_assert(2000y / 10 / 31 == year_month_day{sys_days{days{11261}}});\r\n        static_assert(2000y / 11 / 1 == year_month_day{sys_days{days{11262}}});\r\n        static_assert(2000y / 11 / 30 == year_month_day{sys_days{days{11291}}});\r\n        static_assert(2000y / 12 / 1 == year_month_day{sys_days{days{11292}}});\r\n        static_assert(2000y / 12 / 31 == year_month_day{sys_days{days{11322}}});\r\n        static_assert(-400y / 2 / 29 == year_month_day{sys_days{days{-865566}}});\r\n        static_assert(-400y / 3 / 1 == year_month_day{sys_days{days{-865565}}});\r\n        static_assert(-1y / 2 / 28 == year_month_day{sys_days{days{-719835}}});\r\n        static_assert(-1y / 3 / 1 == year_month_day{sys_days{days{-719834}}});\r\n        static_assert(-1y / 12 / 31 == year_month_day{sys_days{days{-719529}}});\r\n        static_assert(0y / 1 / 1 == year_month_day{sys_days{days{-719528}}});\r\n        static_assert(0y / 2 / 29 == year_month_day{sys_days{days{-719469}}});\r\n        static_assert(0y / 3 / 1 == year_month_day{sys_days{days{-719468}}});\r\n        static_assert(1900y / 3 / 1 == year_month_day{sys_days{days{-25508}}});\r\n        static_assert(1901y / 2 / 28 == year_month_day{sys_days{days{-25144}}});\r\n        static_assert(1903y / 3 / 1 == year_month_day{sys_days{days{-24413}}});\r\n        static_assert(1904y / 2 / 29 == year_month_day{sys_days{days{-24048}}});\r\n        static_assert(1996y / 3 / 1 == year_month_day{sys_days{days{9556}}});\r\n        static_assert(1997y / 2 / 28 == year_month_day{sys_days{days{9920}}});\r\n        static_assert(1999y / 3 / 1 == year_month_day{sys_days{days{10651}}});\r\n        static_assert(2000y / 2 / 29 == year_month_day{sys_days{days{11016}}});\r\n        static_assert(2000y / 3 / 1 == year_month_day{sys_days{days{11017}}});\r\n        static_assert(2001y / 2 / 28 == year_month_day{sys_days{days{11381}}});\r\n        static_assert(2003y / 3 / 1 == year_month_day{sys_days{days{12112}}});\r\n        static_assert(2004y / 2 / 29 == year_month_day{sys_days{days{12477}}});\r\n        static_assert(2096y / 3 / 1 == year_month_day{sys_days{days{46081}}});\r\n        static_assert(2097y / 2 / 28 == year_month_day{sys_days{days{46445}}});\r\n        static_assert(2099y / 3 / 1 == year_month_day{sys_days{days{47176}}});\r\n        static_assert(2100y / 2 / 28 == year_month_day{sys_days{days{47540}}});\r\n        static_assert(-32767y / 1 / 1 == year_month_day{sys_days{days{-12687428}}});\r\n        static_assert(32767y / 12 / 31 == year_month_day{sys_days{days{11248737}}});\r\n\r\n        static_assert(sys_days{2000y / 1 / 0} == sys_days{days{10956}});\r\n        static_assert(sys_days{2000y / 1 / 255} == sys_days{days{11211}});\r\n        static_assert(sys_days{2000y / 2 / 0} == sys_days{days{10987}});\r\n        static_assert(sys_days{2000y / 2 / 255} == sys_days{days{11242}});\r\n        static_assert(sys_days{2000y / 3 / 0} == sys_days{days{11016}});\r\n        static_assert(sys_days{2000y / 3 / 255} == sys_days{days{11271}});\r\n        static_assert(sys_days{2000y / 4 / 0} == sys_days{days{11047}});\r\n        static_assert(sys_days{2000y / 4 / 255} == sys_days{days{11302}});\r\n        static_assert(sys_days{2000y / 5 / 0} == sys_days{days{11077}});\r\n        static_assert(sys_days{2000y / 5 / 255} == sys_days{days{11332}});\r\n        static_assert(sys_days{2000y / 6 / 0} == sys_days{days{11108}});\r\n        static_assert(sys_days{2000y / 6 / 255} == sys_days{days{11363}});\r\n        static_assert(sys_days{2000y / 7 / 0} == sys_days{days{11138}});\r\n        static_assert(sys_days{2000y / 7 / 255} == sys_days{days{11393}});\r\n        static_assert(sys_days{2000y / 8 / 0} == sys_days{days{11169}});\r\n        static_assert(sys_days{2000y / 8 / 255} == sys_days{days{11424}});\r\n        static_assert(sys_days{2000y / 9 / 0} == sys_days{days{11200}});\r\n        static_assert(sys_days{2000y / 9 / 255} == sys_days{days{11455}});\r\n        static_assert(sys_days{2000y / 10 / 0} == sys_days{days{11230}});\r\n        static_assert(sys_days{2000y / 10 / 255} == sys_days{days{11485}});\r\n        static_assert(sys_days{2000y / 11 / 0} == sys_days{days{11261}});\r\n        static_assert(sys_days{2000y / 11 / 255} == sys_days{days{11516}});\r\n        static_assert(sys_days{2000y / 12 / 0} == sys_days{days{11291}});\r\n        static_assert(sys_days{2000y / 12 / 255} == sys_days{days{11546}});\r\n        static_assert(sys_days{-400y / 2 / 255} == sys_days{days{-865340}});\r\n        static_assert(sys_days{-400y / 3 / 0} == sys_days{days{-865566}});\r\n        static_assert(sys_days{-1y / 2 / 255} == sys_days{days{-719608}});\r\n        static_assert(sys_days{-1y / 3 / 0} == sys_days{days{-719835}});\r\n        static_assert(sys_days{-1y / 12 / 255} == sys_days{days{-719305}});\r\n        static_assert(sys_days{0y / 1 / 0} == sys_days{days{-719529}});\r\n        static_assert(sys_days{0y / 2 / 255} == sys_days{days{-719243}});\r\n        static_assert(sys_days{0y / 3 / 0} == sys_days{days{-719469}});\r\n        static_assert(sys_days{1900y / 3 / 0} == sys_days{days{-25509}});\r\n        static_assert(sys_days{1901y / 2 / 255} == sys_days{days{-24917}});\r\n        static_assert(sys_days{1903y / 3 / 0} == sys_days{days{-24414}});\r\n        static_assert(sys_days{1904y / 2 / 255} == sys_days{days{-23822}});\r\n        static_assert(sys_days{1996y / 3 / 0} == sys_days{days{9555}});\r\n        static_assert(sys_days{1997y / 2 / 255} == sys_days{days{10147}});\r\n        static_assert(sys_days{1999y / 3 / 0} == sys_days{days{10650}});\r\n        static_assert(sys_days{2000y / 2 / 255} == sys_days{days{11242}});\r\n        static_assert(sys_days{2000y / 3 / 0} == sys_days{days{11016}});\r\n        static_assert(sys_days{2001y / 2 / 255} == sys_days{days{11608}});\r\n        static_assert(sys_days{2003y / 3 / 0} == sys_days{days{12111}});\r\n        static_assert(sys_days{2004y / 2 / 255} == sys_days{days{12703}});\r\n        static_assert(sys_days{2096y / 3 / 0} == sys_days{days{46080}});\r\n        static_assert(sys_days{2097y / 2 / 255} == sys_days{days{46672}});\r\n        static_assert(sys_days{2099y / 3 / 0} == sys_days{days{47175}});\r\n        static_assert(sys_days{2100y / 2 / 255} == sys_days{days{47767}});\r\n        static_assert(sys_days{-32767y / 1 / 0} == sys_days{days{-12687429}});\r\n        static_assert(sys_days{32767y / 12 / 255} == sys_days{days{11248961}});\r\n    } else {\r\n        sys_days sys2{year{y_min} / 1 / 1};\r\n\r\n        for (int iy = y_min; iy <= y_max; ++iy) {\r\n            const year y{iy};\r\n\r\n            for (auto um = 1u; um <= 12u; ++um) {\r\n                const month m{um};\r\n\r\n                const year_month_day ymd_first = y / m / 1;\r\n                assert(sys_days{ymd_first} == sys2);\r\n                assert(year_month_day{sys2} == ymd_first);\r\n\r\n                const year_month_day ymd_min = y / m / 0;\r\n                assert(sys_days{ymd_min} == sys2 - days{1});\r\n\r\n                const year_month_day ymd_max = y / m / 255;\r\n                assert(sys_days{ymd_max} == sys2 + days{254});\r\n\r\n                const year_month_day ymd_last = y / m / last;\r\n                sys2 += ymd_last.day() - 1d;\r\n                assert(sys_days{ymd_last} == sys2);\r\n                assert(year_month_day{sys2} == ymd_last);\r\n\r\n                sys2 += days{1};\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nconstexpr void year_month_day_last_test() {\r\n    auto ymdl = 2020y / February / last;\r\n\r\n    static_assert(noexcept(year_month_day_last{year{}, month_day_last{January}}));\r\n\r\n    static_assert(noexcept(ymdl += months{}));\r\n    static_assert(noexcept(ymdl -= months{}));\r\n    static_assert(noexcept(ymdl += years{}));\r\n    static_assert(noexcept(ymdl -= years{}));\r\n\r\n    static_assert(noexcept(ymdl.year()));\r\n    static_assert(noexcept(ymdl.month()));\r\n    static_assert(noexcept(ymdl.month_day_last()));\r\n    static_assert(noexcept(ymdl.day()));\r\n\r\n    static_assert(noexcept(static_cast<sys_days>(ymdl)));\r\n    static_assert(noexcept(static_cast<local_days>(ymdl)));\r\n    static_assert(noexcept(ymdl.ok()));\r\n\r\n    static_assert(noexcept(ymdl == ymdl));\r\n    static_assert(noexcept(ymdl <=> ymdl));\r\n\r\n    static_assert(noexcept(ymdl + months{}));\r\n    static_assert(noexcept(months{} + ymdl));\r\n    static_assert(noexcept(ymdl - months{}));\r\n\r\n    static_assert(noexcept(ymdl + years{}));\r\n    static_assert(noexcept(years{} + ymdl));\r\n    static_assert(noexcept(ymdl - years{}));\r\n\r\n    assert(ymdl == 2020y / February / last);\r\n    assert(ymdl == 2020y / February / 29d);\r\n    assert(ymdl.year() == 2020y);\r\n    assert(ymdl.month() == February);\r\n    assert(ymdl.month_day_last() == February / last);\r\n    assert(ymdl.day() == 29d);\r\n\r\n    ymdl += months{2};\r\n    assert(ymdl == 2020y / April / 30d);\r\n\r\n    ymdl -= months{2};\r\n    assert(ymdl == 2020y / February / 29d);\r\n\r\n    ymdl += years{2};\r\n    assert(ymdl == 2022y / February / 28d);\r\n\r\n    ymdl -= years{2};\r\n    assert(ymdl == 2020y / February / 29d);\r\n\r\n    ymdl += Decades{2};\r\n    assert(ymdl == 2040y / February / 29d);\r\n\r\n    ymdl -= Decades{2};\r\n    assert(ymdl == 2020y / February / 29d);\r\n\r\n    assert(2020y / April / last == sys_days{days{18'382}});\r\n    assert(static_cast<local_days>(ymdl) == local_days{ymdl});\r\n\r\n    assert(ymdl < 2021y / February / last);\r\n    assert(ymdl < 2020y / March / last);\r\n    assert(2021y / February / last > ymdl);\r\n    assert(2020y / March / last > ymdl);\r\n\r\n    assert(ymdl + months{2} == 2020y / April / last);\r\n    assert(months{2} + ymdl == 2020y / April / last);\r\n\r\n    assert(ymdl - months{2} == 2019y / December / last);\r\n\r\n    assert(ymdl + years{2} == 2022y / February / last);\r\n    assert(years{2} + ymdl == 2022y / February / last);\r\n\r\n    assert(ymdl - years{2} == 2018y / February / last);\r\n\r\n    assert(ymdl + Decades{2} == 2040y / February / last);\r\n    assert(Decades{2} + ymdl == 2040y / February / last);\r\n\r\n    assert(ymdl - Decades{2} == 2000y / February / last);\r\n\r\n    if (is_constant_evaluated()) {\r\n        static_assert((2020y / 1 / last).ok());\r\n        static_assert(!(2020y / 13 / last).ok());\r\n        static_assert(!(2020y / 0 / last).day().ok()); // implementation-specific assumption, see GH-1647\r\n    } else {\r\n        for (int iy = y_min; iy <= y_max; ++iy) {\r\n            for (auto m = 0u; m <= 255u; ++m) {\r\n                const year y{iy};\r\n                const auto mdl = month{m} / last;\r\n                if (y.ok() && mdl.ok()) {\r\n                    assert((y / mdl).ok());\r\n                } else {\r\n                    assert(!(y / mdl).ok());\r\n                    assert((y / mdl).day().ok() || (y / mdl).day() == day{255}); // implementation-specific assumption\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nconstexpr void year_month_weekday_test() {\r\n    auto ymwd = 2020y / April / Tuesday[2];\r\n\r\n    static_assert(noexcept(year_month_weekday{}));\r\n    static_assert(noexcept(year_month_weekday{year{}, month{}, weekday_indexed{}}));\r\n    static_assert(noexcept(year_month_weekday{sys_days{}}));\r\n    static_assert(noexcept(year_month_weekday{local_days{}}));\r\n\r\n    static_assert(noexcept(ymwd += months{}));\r\n    static_assert(noexcept(ymwd -= months{}));\r\n    static_assert(noexcept(ymwd += years{}));\r\n    static_assert(noexcept(ymwd -= years{}));\r\n\r\n    static_assert(noexcept(ymwd.year()));\r\n    static_assert(noexcept(ymwd.month()));\r\n    static_assert(noexcept(ymwd.weekday()));\r\n    static_assert(noexcept(ymwd.index()));\r\n    static_assert(noexcept(ymwd.weekday_indexed()));\r\n\r\n    static_assert(noexcept(static_cast<sys_days>(ymwd)));\r\n    static_assert(noexcept(static_cast<local_days>(ymwd)));\r\n    static_assert(noexcept(ymwd.ok()));\r\n\r\n    static_assert(noexcept(ymwd == ymwd));\r\n\r\n    static_assert(noexcept(ymwd + months{}));\r\n    static_assert(noexcept(months{} + ymwd));\r\n    static_assert(noexcept(ymwd - months{}));\r\n\r\n    static_assert(noexcept(ymwd + years{}));\r\n    static_assert(noexcept(years{} + ymwd));\r\n    static_assert(noexcept(ymwd - years{}));\r\n\r\n    assert(ymwd == 2020y / April / Tuesday[2]);\r\n    assert(ymwd.year() == 2020y);\r\n    assert(ymwd.month() == April);\r\n    assert(ymwd.weekday() == Tuesday);\r\n    assert(ymwd.index() == 2u);\r\n    assert(ymwd.weekday_indexed() == Tuesday[2]);\r\n\r\n    const year_month_weekday epoch{sys_days{}};\r\n    assert(epoch == year_month_weekday{sys_days{epoch}});\r\n    assert(epoch == 1970y / January / Thursday[1]);\r\n\r\n    local_days ldp;\r\n    sys_days sys{ldp.time_since_epoch()};\r\n    year_month_weekday ymlwd{ldp};\r\n    assert(ymlwd == year_month_weekday{sys});\r\n\r\n    ymwd += months{2};\r\n    assert(ymwd == 2020y / June / Tuesday[2]);\r\n    ymwd -= months{2};\r\n    assert(ymwd == 2020y / April / Tuesday[2]);\r\n\r\n    ymwd += years{2};\r\n    assert(ymwd == 2022y / April / Tuesday[2]);\r\n    ymwd -= years{2};\r\n    assert(ymwd == 2020y / April / Tuesday[2]);\r\n\r\n    ymwd += Decades{2};\r\n    assert(ymwd == 2040y / April / Tuesday[2]);\r\n    ymwd -= Decades{2};\r\n    assert(ymwd == 2020y / April / Tuesday[2]);\r\n\r\n    assert(static_cast<sys_days>(epoch) == sys_days{});\r\n    const auto previous = 1970y / January / Thursday[0];\r\n    assert(static_cast<sys_days>(previous) == (sys_days{} - days{7}));\r\n    assert(static_cast<local_days>(ymwd) == local_days{ymwd});\r\n\r\n\r\n    assert((2020y / April / Wednesday[5]).ok());\r\n    assert(!(-32768y / April / Wednesday[1]).ok());\r\n    assert(!(2020y / month{0} / Wednesday[1]).ok());\r\n    assert(!(2020y / April / Tuesday[5]).ok());\r\n\r\n    assert(ymwd + months{2} == 2020y / June / Tuesday[2]);\r\n    assert(months{2} + ymwd == 2020y / June / Tuesday[2]);\r\n\r\n    assert(ymwd - months{2} == 2020y / February / Tuesday[2]);\r\n\r\n    assert(ymwd + years{2} == 2022y / April / Tuesday[2]);\r\n    assert(years{2} + ymwd == 2022y / April / Tuesday[2]);\r\n\r\n    assert(ymwd - years{2} == 2018y / April / Tuesday[2]);\r\n\r\n    assert(ymwd + Decades{2} == 2040y / April / Tuesday[2]);\r\n    assert(Decades{2} + ymwd == 2040y / April / Tuesday[2]);\r\n\r\n    assert(ymwd - Decades{2} == 2000y / April / Tuesday[2]);\r\n}\r\n\r\nconstexpr void year_month_weekday_last_test() {\r\n    auto ymwdl = 2020y / January / Monday[last];\r\n\r\n    static_assert(noexcept(year_month_weekday_last{year{}, month{}, weekday_last{Sunday}}));\r\n\r\n    static_assert(noexcept(ymwdl += months{}));\r\n    static_assert(noexcept(ymwdl -= months{}));\r\n    static_assert(noexcept(ymwdl += years{}));\r\n    static_assert(noexcept(ymwdl -= years{}));\r\n\r\n    static_assert(noexcept(ymwdl.year()));\r\n    static_assert(noexcept(ymwdl.month()));\r\n    static_assert(noexcept(ymwdl.weekday()));\r\n    static_assert(noexcept(ymwdl.weekday_last()));\r\n\r\n    static_assert(noexcept(static_cast<sys_days>(ymwdl)));\r\n    static_assert(noexcept(static_cast<local_days>(ymwdl)));\r\n    static_assert(noexcept(ymwdl.ok()));\r\n\r\n    static_assert(noexcept(ymwdl == ymwdl));\r\n\r\n    static_assert(noexcept(ymwdl + months{}));\r\n    static_assert(noexcept(months{} + ymwdl));\r\n    static_assert(noexcept(ymwdl - months{}));\r\n\r\n    static_assert(noexcept(ymwdl + years{}));\r\n    static_assert(noexcept(years{} + ymwdl));\r\n    static_assert(noexcept(ymwdl - years{}));\r\n\r\n    assert(ymwdl == 2020y / January / Monday[last]);\r\n    assert(ymwdl.year() == 2020y);\r\n    assert(ymwdl.month() == January);\r\n    assert(ymwdl.weekday() == Monday);\r\n    assert(ymwdl.weekday_last() == Monday[last]);\r\n\r\n    ymwdl += months{2};\r\n    assert(ymwdl == 2020y / March / Monday[last]);\r\n    ymwdl -= months{2};\r\n    assert(ymwdl == 2020y / January / Monday[last]);\r\n\r\n    ymwdl += years{2};\r\n    assert(ymwdl == 2022y / January / Monday[last]);\r\n    ymwdl -= years{2};\r\n    assert(ymwdl == 2020y / January / Monday[last]);\r\n\r\n    ymwdl += Decades{2};\r\n    assert(ymwdl == 2040y / January / Monday[last]);\r\n    ymwdl -= Decades{2};\r\n    assert(ymwdl == 2020y / January / Monday[last]);\r\n\r\n    assert(static_cast<sys_days>(ymwdl) == sys_days{days{18'288}});\r\n    assert(static_cast<local_days>(ymwdl) == local_days{ymwdl});\r\n\r\n    assert((2020y / April / Wednesday[last]).ok());\r\n    assert(!(-32768y / April / Wednesday[last]).ok());\r\n    assert(!(2020y / month{0} / Wednesday[last]).ok());\r\n    assert(!(2020y / April / weekday{8}[last]).ok());\r\n\r\n    assert(ymwdl + months{2} == 2020y / March / Monday[last]);\r\n    assert(months{2} + ymwdl == 2020y / March / Monday[last]);\r\n\r\n    assert(ymwdl - months{2} == 2019y / November / Monday[last]);\r\n\r\n    assert(ymwdl + years{2} == 2022y / January / Monday[last]);\r\n    assert(years{2} + ymwdl == 2022y / January / Monday[last]);\r\n\r\n    assert(ymwdl - years{2} == 2018y / January / Monday[last]);\r\n\r\n    assert(ymwdl + Decades{2} == 2040y / January / Monday[last]);\r\n    assert(Decades{2} + ymwdl == 2040y / January / Monday[last]);\r\n\r\n    assert(ymwdl - Decades{2} == 2000y / January / Monday[last]);\r\n}\r\n\r\nconstexpr bool test() {\r\n    day_test();\r\n    month_test();\r\n    year_test();\r\n    weekday_test();\r\n    weekday_indexed_test();\r\n    weekday_last_test();\r\n    month_day_test();\r\n    month_day_last_test();\r\n    month_weekday_test();\r\n    month_weekday_last_test();\r\n    year_month_test();\r\n    year_month_day_test();\r\n    year_month_day_last_test();\r\n    year_month_weekday_test();\r\n    year_month_weekday_last_test();\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test();\r\n    static_assert(test());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_dates_literals/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_dates_literals/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <chrono>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\n\r\nstatic_assert(noexcept(year{} / month{}));\r\nstatic_assert(noexcept(year{} / 0));\r\nstatic_assert(noexcept(month{} / day{}));\r\nstatic_assert(noexcept(month{} / 0));\r\nstatic_assert(noexcept(0 / day{}));\r\nstatic_assert(noexcept(day{} / month{}));\r\nstatic_assert(noexcept(day{} / 0));\r\nstatic_assert(noexcept(month{} / last));\r\nstatic_assert(noexcept(0 / last));\r\nstatic_assert(noexcept(last / month{}));\r\nstatic_assert(noexcept(last / 0));\r\nstatic_assert(noexcept(month{} / Sunday[1]));\r\nstatic_assert(noexcept(0 / Sunday[1]));\r\nstatic_assert(noexcept(Sunday[1] / month{}));\r\nstatic_assert(noexcept(Sunday[1] / 0));\r\nstatic_assert(noexcept(month{} / Sunday[last]));\r\nstatic_assert(noexcept(0 / Sunday[last]));\r\nstatic_assert(noexcept(Sunday[last] / month{}));\r\nstatic_assert(noexcept(Sunday[last] / 0));\r\nstatic_assert(noexcept(year_month{} / day{}));\r\nstatic_assert(noexcept(year_month{} / 0));\r\nstatic_assert(noexcept(year{} / month_day{}));\r\nstatic_assert(noexcept(0 / month_day{}));\r\nstatic_assert(noexcept(month_day{} / year{}));\r\nstatic_assert(noexcept(month_day{} / 0));\r\nstatic_assert(noexcept(year_month{} / last));\r\nstatic_assert(noexcept(year{} / month_day_last{January}));\r\nstatic_assert(noexcept(0 / month_day_last{January}));\r\nstatic_assert(noexcept(month_day_last{January} / year{}));\r\nstatic_assert(noexcept(month_day_last{January} / 0));\r\nstatic_assert(noexcept(year_month{} / Sunday[1]));\r\nstatic_assert(noexcept(year{} / month_weekday{January, Sunday[1]}));\r\nstatic_assert(noexcept(0 / month_weekday{January, Sunday[1]}));\r\nstatic_assert(noexcept(month_weekday{January, Sunday[1]} / year{}));\r\nstatic_assert(noexcept(month_weekday{January, Sunday[1]} / 0));\r\nstatic_assert(noexcept(year_month{} / Sunday[last]));\r\nstatic_assert(noexcept(year{} / month_weekday_last{January, Sunday[last]}));\r\nstatic_assert(noexcept(0 / month_weekday_last{January, Sunday[last]}));\r\nstatic_assert(noexcept(month_weekday_last{January, Sunday[last]} / year{}));\r\nstatic_assert(noexcept(month_weekday_last{January, Sunday[last]} / 0));\r\n\r\n#define TRIVIAL_COPY_STANDARD_LAYOUT(TYPE)                                                       \\\r\n    static_assert(is_trivially_copyable_v<TYPE>, \"chrono::\" #TYPE \" is not trivially copyable\"); \\\r\n    static_assert(is_standard_layout_v<TYPE>, \"chrono::\" #TYPE \" is not standard-layout\");\r\n\r\nTRIVIAL_COPY_STANDARD_LAYOUT(day)\r\nTRIVIAL_COPY_STANDARD_LAYOUT(month)\r\nTRIVIAL_COPY_STANDARD_LAYOUT(year)\r\nTRIVIAL_COPY_STANDARD_LAYOUT(weekday)\r\nTRIVIAL_COPY_STANDARD_LAYOUT(weekday_indexed)\r\nTRIVIAL_COPY_STANDARD_LAYOUT(weekday_last)\r\nTRIVIAL_COPY_STANDARD_LAYOUT(month_day)\r\nTRIVIAL_COPY_STANDARD_LAYOUT(month_day_last)\r\nTRIVIAL_COPY_STANDARD_LAYOUT(month_weekday)\r\nTRIVIAL_COPY_STANDARD_LAYOUT(month_weekday_last)\r\nTRIVIAL_COPY_STANDARD_LAYOUT(year_month)\r\nTRIVIAL_COPY_STANDARD_LAYOUT(year_month_day)\r\nTRIVIAL_COPY_STANDARD_LAYOUT(year_month_day_last)\r\nTRIVIAL_COPY_STANDARD_LAYOUT(year_month_weekday)\r\nTRIVIAL_COPY_STANDARD_LAYOUT(year_month_weekday_last)\r\n\r\n#define TYPE_ASSERT(TYPE, EXPR) \\\r\n    static_assert(is_same_v<TYPE, remove_const_t<decltype(EXPR)>>, #EXPR \" is not chrono::\" #TYPE);\r\n\r\nTYPE_ASSERT(day, 0d)\r\nTYPE_ASSERT(year, 0y)\r\nTYPE_ASSERT(month, January)\r\nTYPE_ASSERT(month, February)\r\nTYPE_ASSERT(month, March)\r\nTYPE_ASSERT(month, April)\r\nTYPE_ASSERT(month, May)\r\nTYPE_ASSERT(month, June)\r\nTYPE_ASSERT(month, July)\r\nTYPE_ASSERT(month, August)\r\nTYPE_ASSERT(month, September)\r\nTYPE_ASSERT(month, October)\r\nTYPE_ASSERT(month, November)\r\nTYPE_ASSERT(month, December)\r\nTYPE_ASSERT(weekday, Sunday)\r\nTYPE_ASSERT(weekday, Monday)\r\nTYPE_ASSERT(weekday, Tuesday)\r\nTYPE_ASSERT(weekday, Wednesday)\r\nTYPE_ASSERT(weekday, Thursday)\r\nTYPE_ASSERT(weekday, Friday)\r\nTYPE_ASSERT(weekday, Saturday)\r\nTYPE_ASSERT(last_spec, last)\r\nTYPE_ASSERT(weekday_indexed, declval<weekday>()[1])\r\nTYPE_ASSERT(weekday_last, declval<weekday>()[last])\r\n\r\nTYPE_ASSERT(year_month, 2020y / January)\r\nTYPE_ASSERT(year_month, 2020y / 1)\r\n\r\nTYPE_ASSERT(month_day, January / 1d)\r\nTYPE_ASSERT(month_day, January / 1)\r\nTYPE_ASSERT(month_day, 1 / 1d)\r\nTYPE_ASSERT(month_day, 1d / January)\r\nTYPE_ASSERT(month_day, 1d / 1)\r\n\r\nTYPE_ASSERT(month_day_last, January / last)\r\nTYPE_ASSERT(month_day_last, 1 / last)\r\nTYPE_ASSERT(month_day_last, last / January)\r\nTYPE_ASSERT(month_day_last, last / 1)\r\n\r\nTYPE_ASSERT(month_weekday, January / Monday[1])\r\nTYPE_ASSERT(month_weekday, 1 / Monday[1])\r\nTYPE_ASSERT(month_weekday, Monday[1] / January)\r\nTYPE_ASSERT(month_weekday, Monday[1] / 1)\r\n\r\nTYPE_ASSERT(month_weekday_last, January / Monday[last])\r\nTYPE_ASSERT(month_weekday_last, 1 / Monday[last])\r\nTYPE_ASSERT(month_weekday_last, Monday[last] / January)\r\nTYPE_ASSERT(month_weekday_last, Monday[last] / 1)\r\n\r\nTYPE_ASSERT(year_month_day, 2020y / January / 1d)\r\nTYPE_ASSERT(year_month_day, 2020y / January / 1)\r\nconstexpr auto md = January / 1;\r\nTYPE_ASSERT(year_month_day, 2020y / md)\r\nTYPE_ASSERT(year_month_day, 2020 / md)\r\nTYPE_ASSERT(year_month_day, January / 1 / 2020y)\r\nTYPE_ASSERT(year_month_day, January / 1 / 2020)\r\nTYPE_ASSERT(year_month_day, 1d / January / 2020y)\r\nTYPE_ASSERT(year_month_day, 1d / January / 2020)\r\nTYPE_ASSERT(year_month_day, 1d / 1 / 2020)\r\nTYPE_ASSERT(year_month_day, 1d / 1 / 2020y)\r\n\r\nTYPE_ASSERT(year_month_day_last, 2020y / January / last)\r\nconstexpr auto mdl = January / last;\r\nTYPE_ASSERT(year_month_day_last, 2020y / mdl)\r\nTYPE_ASSERT(year_month_day_last, 2020 / mdl)\r\nTYPE_ASSERT(year_month_day_last, last / January / 2020y)\r\nTYPE_ASSERT(year_month_day_last, January / last / 2020)\r\n\r\nTYPE_ASSERT(year_month_weekday, 2020y / January / Monday[1])\r\nconstexpr auto mwd = January / Monday[1];\r\nTYPE_ASSERT(year_month_weekday, 2020y / mwd)\r\nTYPE_ASSERT(year_month_weekday, 2020 / mwd)\r\nTYPE_ASSERT(year_month_weekday, January / Monday[1] / 2020y)\r\nTYPE_ASSERT(year_month_weekday, January / Monday[1] / 2020)\r\nTYPE_ASSERT(year_month_weekday, Monday[1] / January / 2020y)\r\nTYPE_ASSERT(year_month_weekday, Monday[1] / January / 2020)\r\n\r\nTYPE_ASSERT(year_month_weekday_last, 2020y / January / Monday[last])\r\nconstexpr auto mwdl = January / Monday[last];\r\nTYPE_ASSERT(year_month_weekday_last, 2020y / mwdl)\r\nTYPE_ASSERT(year_month_weekday_last, 2020 / mwdl)\r\nTYPE_ASSERT(year_month_weekday_last, January / Monday[last] / 2020y)\r\nTYPE_ASSERT(year_month_weekday_last, January / Monday[last] / 2020)\r\nTYPE_ASSERT(year_month_weekday_last, 1 / Monday[last] / 2020)\r\nTYPE_ASSERT(year_month_weekday_last, 1 / Monday[last] / 2020y)\r\nTYPE_ASSERT(year_month_weekday_last, Monday[last] / 1 / 2020y)\r\nTYPE_ASSERT(year_month_weekday_last, Monday[last] / 1 / 2020)\r\nTYPE_ASSERT(year_month_weekday_last, Monday[last] / January / 2020)\r\nTYPE_ASSERT(year_month_weekday_last, Monday[last] / January / 2020y)\r\n\r\n#define VALUE_ASSERT(VALUE, EXPECTED) static_assert(VALUE == EXPECTED, \"chrono::\" #VALUE \" is not \" #EXPECTED);\r\nVALUE_ASSERT(month{1}, January)\r\nVALUE_ASSERT(month{2}, February)\r\nVALUE_ASSERT(month{3}, March)\r\nVALUE_ASSERT(month{4}, April)\r\nVALUE_ASSERT(month{5}, May)\r\nVALUE_ASSERT(month{6}, June)\r\nVALUE_ASSERT(month{7}, July)\r\nVALUE_ASSERT(month{8}, August)\r\nVALUE_ASSERT(month{9}, September)\r\nVALUE_ASSERT(month{10}, October)\r\nVALUE_ASSERT(month{11}, November)\r\nVALUE_ASSERT(month{12}, December)\r\n\r\nVALUE_ASSERT(weekday{0}, Sunday)\r\nVALUE_ASSERT(weekday{1}, Monday)\r\nVALUE_ASSERT(weekday{2}, Tuesday)\r\nVALUE_ASSERT(weekday{3}, Wednesday)\r\nVALUE_ASSERT(weekday{4}, Thursday)\r\nVALUE_ASSERT(weekday{5}, Friday)\r\nVALUE_ASSERT(weekday{6}, Saturday)\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_formatting/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/utf-8\"\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_formatting/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <clocale>\r\n#include <concepts>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <format>\r\n#include <iostream>\r\n#include <limits>\r\n#include <locale>\r\n#include <ratio>\r\n#include <sstream>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <timezone_data.hpp>\r\n\r\n// Extended to test LWG-4257 \"Stream insertion for chrono::local_time should be constrained\"\r\n// Extended to test GH-5945 \"<chrono>: cannot format unsigned durations\"\r\n\r\nusing namespace std;\r\nusing namespace chrono;\r\n\r\ntemplate <typename CharT>\r\n[[nodiscard]] constexpr const CharT* choose_literal(const char* const str, const wchar_t* const wstr) noexcept {\r\n    if constexpr (is_same_v<CharT, char>) {\r\n        return str;\r\n    } else {\r\n        return wstr;\r\n    }\r\n}\r\n\r\n#define STR(Literal) (choose_literal<CharT>(Literal, L##Literal))\r\n\r\n// Test against IDL mismatch between the DLL which stores the locale and the code which uses it.\r\n#ifdef _DEBUG\r\n#define DEFAULT_IDL_SETTING 2\r\n#else\r\n#define DEFAULT_IDL_SETTING 0\r\n#endif\r\n\r\ntemplate <typename CharT>\r\nstruct testing_callbacks {\r\n    _Fmt_align expected_alignment = _Fmt_align::_None;\r\n    basic_string_view<CharT> expected_fill{};\r\n    int expected_width                   = -1;\r\n    size_t expected_dynamic_width        = static_cast<size_t>(-1);\r\n    bool expected_auto_dynamic_width     = false;\r\n    int expected_precision               = -1;\r\n    size_t expected_dynamic_precision    = static_cast<size_t>(-1);\r\n    bool expected_auto_dynamic_precision = false;\r\n    bool expected_localized              = false;\r\n    vector<_Chrono_spec<CharT>>& expected_chrono_specs;\r\n    size_t curr_index = 0;\r\n\r\n    void _On_align(_Fmt_align aln) {\r\n        assert(aln == expected_alignment);\r\n    }\r\n    void _On_fill(basic_string_view<CharT> str_view) {\r\n        assert(str_view == expected_fill);\r\n    }\r\n    void _On_width(int width) {\r\n        assert(width == expected_width);\r\n    }\r\n    void _On_dynamic_width(size_t id) {\r\n        assert(id == expected_dynamic_width);\r\n    }\r\n    void _On_dynamic_width(_Auto_id_tag) {\r\n        assert(expected_auto_dynamic_width);\r\n    }\r\n    void _On_precision(int pre) {\r\n        assert(pre == expected_precision);\r\n    }\r\n    void _On_dynamic_precision(size_t id) {\r\n        assert(id == expected_dynamic_precision);\r\n    }\r\n    void _On_dynamic_precision(_Auto_id_tag) {\r\n        assert(expected_auto_dynamic_precision);\r\n    }\r\n    void _On_localized() {\r\n        assert(expected_localized);\r\n    }\r\n    void _On_conversion_spec(char mod, CharT type) {\r\n        assert(mod == expected_chrono_specs[curr_index]._Modifier);\r\n        assert(static_cast<char>(type) == expected_chrono_specs[curr_index]._Type);\r\n        assert(expected_chrono_specs[curr_index]._Lit_char == CharT{0}); // not set\r\n        ++curr_index;\r\n    }\r\n    void _On_lit_char(CharT ch) {\r\n        assert(ch == expected_chrono_specs[curr_index]._Lit_char);\r\n        assert(expected_chrono_specs[curr_index]._Modifier == '\\0'); // not set\r\n        assert(expected_chrono_specs[curr_index]._Type == '\\0'); // not set\r\n        ++curr_index;\r\n    }\r\n};\r\n\r\ntemplate <typename CharT, typename callback_type>\r\nvoid test_parse_helper(const CharT* (*func)(const CharT*, const CharT*, callback_type&&), basic_string_view<CharT> view,\r\n    bool err_expected                                                  = false,\r\n    typename basic_string_view<CharT>::size_type expected_end_position = basic_string_view<CharT>::npos,\r\n    callback_type&& callbacks                                          = {}) {\r\n    try {\r\n        auto end = func(view.data(), view.data() + view.size(), move(callbacks));\r\n        if (expected_end_position != basic_string_view<CharT>::npos) {\r\n            assert(end == view.data() + expected_end_position);\r\n        }\r\n        assert(!err_expected);\r\n    } catch (const format_error&) {\r\n        assert(err_expected);\r\n    }\r\n}\r\n\r\ntemplate <typename CharT>\r\nbool test_parse_conversion_spec() {\r\n    auto parse_conv_spec_fn = _Parse_conversion_specs<CharT, testing_callbacks<CharT>>;\r\n    using view_typ          = basic_string_view<CharT>;\r\n    using chrono_spec       = _Chrono_spec<CharT>;\r\n\r\n    view_typ s0(STR(\"B\"));\r\n    view_typ s1(STR(\"Ec\"));\r\n    view_typ s2(STR(\"Od\"));\r\n    view_typ s3(STR(\"E\"));\r\n    view_typ s4(STR(\"\"));\r\n    view_typ s5(STR(\"}\"));\r\n    view_typ s6(STR(\"E}\"));\r\n\r\n    vector<chrono_spec> v0{{._Type = 'B'}};\r\n    test_parse_helper(parse_conv_spec_fn, s0, false, view_typ::npos, {.expected_chrono_specs = v0});\r\n\r\n    vector<chrono_spec> v1{{._Modifier = 'E', ._Type = 'c'}};\r\n    test_parse_helper(parse_conv_spec_fn, s1, false, view_typ::npos, {.expected_chrono_specs = v1});\r\n\r\n    vector<chrono_spec> v2{{._Modifier = 'O', ._Type = 'd'}};\r\n    test_parse_helper(parse_conv_spec_fn, s2, false, view_typ::npos, {.expected_chrono_specs = v2});\r\n\r\n    vector<chrono_spec> v{};\r\n    test_parse_helper(parse_conv_spec_fn, s3, true, view_typ::npos, {.expected_chrono_specs = v});\r\n    test_parse_helper(parse_conv_spec_fn, s4, true, view_typ::npos, {.expected_chrono_specs = v});\r\n    test_parse_helper(parse_conv_spec_fn, s5, true, view_typ::npos, {.expected_chrono_specs = v});\r\n    test_parse_helper(parse_conv_spec_fn, s6, true, view_typ::npos, {.expected_chrono_specs = v});\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <typename CharT>\r\nbool test_parse_chrono_format_specs() {\r\n    auto parse_chrono_format_specs_fn = _Parse_chrono_format_specs<CharT, testing_callbacks<CharT>>;\r\n    using view_typ                    = basic_string_view<CharT>;\r\n    using chrono_spec                 = _Chrono_spec<CharT>;\r\n\r\n    view_typ s0(STR(\"%Oe\"));\r\n    view_typ s1(STR(\"lit\"));\r\n    view_typ s2(STR(\"%H:%M}\"));\r\n    view_typ s3(STR(\"6%H}\"));\r\n    view_typ s4(STR(\"*<6hi\"));\r\n    view_typ s5(STR(\"*^4.4%ymm\"));\r\n    view_typ s6(STR(\"%H%\"));\r\n    view_typ s7(STR(\"%H%}\"));\r\n    view_typ s8(STR(\"%nB%tC%%D\"));\r\n    view_typ s9(STR(\"L\"));\r\n    view_typ s10(STR(\"L%F\"));\r\n\r\n    vector<chrono_spec> v0{{._Modifier = 'O', ._Type = 'e'}};\r\n    test_parse_helper(parse_chrono_format_specs_fn, s0, false, s0.size(), {.expected_chrono_specs = v0});\r\n\r\n    vector<chrono_spec> v1{{._Lit_char = 'l'}, {._Lit_char = 'i'}, {._Lit_char = 't'}};\r\n    test_parse_helper(parse_chrono_format_specs_fn, s1, true, s1.size(), {.expected_chrono_specs = v1});\r\n\r\n    vector<chrono_spec> v2{{._Type = 'H'}, {._Lit_char = ':'}, {._Type = 'M'}};\r\n    test_parse_helper(parse_chrono_format_specs_fn, s2, false, s2.size() - 1, {.expected_chrono_specs = v2});\r\n\r\n    vector<chrono_spec> v3{{._Type = 'H'}};\r\n    test_parse_helper(\r\n        parse_chrono_format_specs_fn, s3, false, s3.size() - 1, {.expected_width = 6, .expected_chrono_specs = v3});\r\n\r\n    vector<chrono_spec> v8{{._Lit_char = '\\n'}, {._Lit_char = 'B'}, {._Lit_char = '\\t'}, {._Lit_char = 'C'},\r\n        {._Lit_char = '%'}, {._Lit_char = 'D'}};\r\n    test_parse_helper(parse_chrono_format_specs_fn, s8, false, s8.size(), {.expected_chrono_specs = v8});\r\n\r\n    vector<chrono_spec> v4{{._Lit_char = 'h'}, {._Lit_char = 'i'}};\r\n    test_parse_helper(parse_chrono_format_specs_fn, s4, true, s4.size(),\r\n        {.expected_alignment       = _Fmt_align::_Left,\r\n            .expected_fill         = view_typ(STR(\"*\")),\r\n            .expected_width        = 6,\r\n            .expected_chrono_specs = v4});\r\n\r\n    vector<chrono_spec> v5{{._Type = 'y'}, {._Lit_char = 'm'}, {._Lit_char = 'm'}};\r\n    test_parse_helper(parse_chrono_format_specs_fn, s5, false, s5.size(),\r\n        {.expected_alignment       = _Fmt_align::_Center,\r\n            .expected_fill         = view_typ(STR(\"*\")),\r\n            .expected_width        = 4,\r\n            .expected_precision    = 4,\r\n            .expected_chrono_specs = v5});\r\n\r\n    vector<chrono_spec> v{{._Type = 'H'}}; // we don't throw a format_error until we parse the %H\r\n    test_parse_helper(parse_chrono_format_specs_fn, s6, true, view_typ::npos, {.expected_chrono_specs = v});\r\n    test_parse_helper(parse_chrono_format_specs_fn, s7, true, view_typ::npos, {.expected_chrono_specs = v});\r\n\r\n    vector<chrono_spec> v_empty{};\r\n    test_parse_helper(parse_chrono_format_specs_fn, s9, false, view_typ::npos,\r\n        {.expected_localized = true, .expected_chrono_specs = v_empty});\r\n\r\n    vector<chrono_spec> v6{{._Type = 'F'}};\r\n    test_parse_helper(parse_chrono_format_specs_fn, s10, false, view_typ::npos,\r\n        {.expected_localized = true, .expected_chrono_specs = v6});\r\n\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class charT, class... Args>\r\nauto make_testing_format_args(Args&&... vals) { // references to temporaries are risky, see P2905R2; we'll be careful\r\n    if constexpr (is_same_v<charT, wchar_t>) {\r\n        return make_wformat_args(vals...);\r\n    } else {\r\n        return make_format_args(vals...);\r\n    }\r\n}\r\n\r\ntemplate <class CharT, class... Args>\r\nvoid throw_helper(const basic_string_view<CharT> fmt, const Args&... vals) {\r\n    try {\r\n        (void) vformat(fmt, make_testing_format_args<CharT>(vals...));\r\n        assert(false);\r\n    } catch (const format_error&) {\r\n    }\r\n}\r\n\r\ntemplate <class CharT, class... Args>\r\nvoid throw_helper(const CharT* fmt, const Args&... vals) {\r\n    throw_helper(basic_string_view<CharT>{fmt}, vals...);\r\n}\r\n\r\ntemplate <class Arg, class CharT>\r\nvoid empty_braces_helper(\r\n    const Arg& val, const CharT* const expected, const same_as<const CharT*> auto... alternatives) {\r\n    // N4885 [time.format]/6: \"If the chrono-specs is omitted, the chrono object is formatted\r\n    // as if by streaming it to std::ostringstream os and copying os.str() through the output iterator\r\n    // of the context with additional padding and adjustments as specified by the format specifiers.\"\r\n    const auto result = format(STR(\"{}\"), val);\r\n    assert(((result == expected) || ... || (result == alternatives)));\r\n\r\n    basic_ostringstream<CharT> stream;\r\n    stream << val;\r\n    assert(stream.str() == result);\r\n    assert(stream);\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_duration_formatter() {\r\n    empty_braces_helper(seconds{5}, STR(\"5s\"));\r\n    empty_braces_helper(minutes{7}, STR(\"7min\"));\r\n    empty_braces_helper(hours{9}, STR(\"9h\"));\r\n    empty_braces_helper(days{2}, STR(\"2d\"));\r\n    empty_braces_helper(-seconds{5}, STR(\"-5s\"));\r\n    empty_braces_helper(duration<int, ratio<2>>{40}, STR(\"40[2]s\"));\r\n    empty_braces_helper(duration<int, ratio<3, 1>>{40}, STR(\"40[3]s\"));\r\n    empty_braces_helper(duration<int, ratio<3, 7>>{40}, STR(\"40[3/7]s\"));\r\n    empty_braces_helper(duration<int, ratio<1, 2>>{40}, STR(\"40[1/2]s\"));\r\n    empty_braces_helper(duration<int, ratio<22, 7>>{40}, STR(\"40[22/7]s\"));\r\n    empty_braces_helper(duration<int, ratio<53, 101>>{40}, STR(\"40[53/101]s\"));\r\n    empty_braces_helper(duration<int, ratio<201, 2147483647>>{40}, STR(\"40[201/2147483647]s\"));\r\n\r\n#if 0 // TRANSITION, LWG-3921: Our duration formatting constructs an hh_mm_ss, which calls duration_cast,\r\n      // which triggers signed integer overflow when a duration has a pathological ratio, like this:\r\n    constexpr auto intmax_max = numeric_limits<intmax_t>::max();\r\n    using LongRatio           = ratio<intmax_max - 1, intmax_max>;\r\n    empty_braces_helper(duration<int, LongRatio>{1}, STR(\"1[9223372036854775806/9223372036854775807]s\"));\r\n#endif // ^^^ disabled test due to undefined behavior ^^^\r\n\r\n    // formatting small types needs to work as iostreams << VSO-1521926\r\n    empty_braces_helper(duration<long long, atto>{123}, STR(\"123as\"));\r\n    assert(format(STR(\"{:%j}\"), duration<long long, atto>{123}) == STR(\"0\"));\r\n\r\n    assert(format(STR(\"{:%T}\"), 4083007ms) == STR(\"01:08:03.007\"));\r\n    assert(format(STR(\"{:%T}\"), -4083007ms) == STR(\"-01:08:03.007\"));\r\n\r\n    assert(format(STR(\"{:%T %j %q %Q}\"), days{4} + 30min) == STR(\"96:30:00 4 min 5790\"));\r\n    assert(format(STR(\"{:%T %j %q %Q}\"), -days{4} - 30min) == STR(\"-96:30:00 4 min 5790\"));\r\n    assert(format(STR(\"{:%T %j}\"), days{4} + 23h + 30min) == STR(\"119:30:00 4\"));\r\n    assert(format(STR(\"{:%T %j}\"), -days{4} - 23h - 30min) == STR(\"-119:30:00 4\"));\r\n    assert(format(STR(\"{:%T %j}\"), duration<float, days::period>{1.55f}) == STR(\"37:11:59 1\"));\r\n    assert(format(STR(\"{:%T %j}\"), duration<float, days::period>{-1.55f}) == STR(\"-37:11:59 1\"));\r\n\r\n    // GH-5945 \"<chrono>: cannot format unsigned durations\"\r\n    assert(format(STR(\"{:%T %j %q %Q}\"), duration<unsigned long long, days::period>{4} + 30min)\r\n           == STR(\"96:30:00 4 min 5790\"));\r\n    assert(format(STR(\"{:%T %j}\"), duration<unsigned long long, days::period>{4} + 23h + 30min) == STR(\"119:30:00 4\"));\r\n\r\n    // GH-4247: <chrono>: format() should accept %X and %EX for duration and hh_mm_ss\r\n    assert(format(STR(\"{:%X}\"), 9h + 7min + 5s) == STR(\"09:07:05\"));\r\n    assert(format(STR(\"{:%EX}\"), 9h + 7min + 5s) == STR(\"09:07:05\"));\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_clock_formatter() {\r\n    empty_braces_helper(sys_seconds{}, STR(\"1970-01-01 00:00:00\"));\r\n    empty_braces_helper(sys_days{}, STR(\"1970-01-01\"));\r\n    empty_braces_helper(utc_seconds{}, STR(\"1970-01-01 00:00:00\"));\r\n    empty_braces_helper(tai_seconds{}, STR(\"1958-01-01 00:00:00\"));\r\n    empty_braces_helper(gps_seconds{}, STR(\"1980-01-06 00:00:00\"));\r\n    empty_braces_helper(file_time<seconds>{}, STR(\"1601-01-01 00:00:00\"));\r\n    empty_braces_helper(local_seconds{}, STR(\"1970-01-01 00:00:00\"));\r\n\r\n    assert(format(STR(\"{:%j}\"), utc_seconds{}) == STR(\"001\"));\r\n\r\n    assert(format(STR(\"{:%Z %z %Oz %Ez}\"), sys_seconds{}) == STR(\"UTC +0000 +00:00 +00:00\"));\r\n    assert(format(STR(\"{:%Z %z %Oz %Ez}\"), sys_days{}) == STR(\"UTC +0000 +00:00 +00:00\"));\r\n    assert(format(STR(\"{:%Z %z %Oz %Ez}\"), utc_seconds{}) == STR(\"UTC +0000 +00:00 +00:00\"));\r\n    assert(format(STR(\"{:%Z %z %Oz %Ez}\"), tai_seconds{}) == STR(\"TAI +0000 +00:00 +00:00\"));\r\n    assert(format(STR(\"{:%Z %z %Oz %Ez}\"), gps_seconds{}) == STR(\"GPS +0000 +00:00 +00:00\"));\r\n    assert(format(STR(\"{:%Z %z %Oz %Ez}\"), file_time<seconds>{}) == STR(\"UTC +0000 +00:00 +00:00\"));\r\n    throw_helper(STR(\"{:%Z %z %Oz %Ez}\"), local_seconds{});\r\n\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / January / 1}) == STR(\"09 2009 00 53 00\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / January / 2}) == STR(\"09 2009 00 53 00\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / January / 3}) == STR(\"09 2009 01 53 00\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / January / 4}) == STR(\"10 2010 01 01 01\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / January / 5}) == STR(\"10 2010 01 01 01\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / January / 6}) == STR(\"10 2010 01 01 01\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / January / 7}) == STR(\"10 2010 01 01 01\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / May / 1}) == STR(\"10 2010 17 17 17\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / May / 2}) == STR(\"10 2010 18 17 17\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / May / 3}) == STR(\"10 2010 18 18 18\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / December / 25}) == STR(\"10 2010 51 51 51\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / December / 26}) == STR(\"10 2010 52 51 51\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / December / 27}) == STR(\"10 2010 52 52 52\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / December / 28}) == STR(\"10 2010 52 52 52\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / December / 29}) == STR(\"10 2010 52 52 52\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / December / 30}) == STR(\"10 2010 52 52 52\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), sys_days{2010y / December / 31}) == STR(\"10 2010 52 52 52\"));\r\n\r\n    assert(format(STR(\"{:%S}\"), utc_clock::from_sys(get_tzdb().leap_seconds.front().date()) - 1s) == STR(\"60\"));\r\n    assert(format(STR(\"{:%F %T}\"), utc_clock::from_sys(get_tzdb().leap_seconds.front().date()))\r\n           == STR(\"1972-07-01 00:00:00\"));\r\n    assert(format(STR(\"{:%F %T}\"), utc_clock::from_sys(sys_days{January / 9 / 2014} + 12h + 35min + 34s))\r\n           == STR(\"2014-01-09 12:35:34\"));\r\n    assert(format(STR(\"{:%F %T}\"), utc_clock::from_sys(get_tzdb().leap_seconds.front().date()) - 500ms)\r\n           == STR(\"1972-06-30 23:59:60.500\"));\r\n\r\n    // Test an ordinary day.\r\n    const auto utc_2021_05_04 = utc_clock::from_sys(sys_days{2021y / May / 4});\r\n\r\n    // This is both the last day of a leap year (366th day) and the day of a leap second insertion.\r\n    const auto utc_2016_12_31 = utc_clock::from_sys(sys_days{2016y / December / 31});\r\n\r\n    for (const auto& h : {0h, 1h, 7h, 22h, 23h}) { // Accelerate testing; 24 * 60 * 61 iterations would be a lot.\r\n        for (const auto& m : {0min, 1min, 7min, 58min, 59min}) {\r\n            for (const auto& s : {0s, 1s, 7s, 58s, 59s, 60s}) {\r\n                if (s != 60s) {\r\n                    assert(format(STR(\"{:%F %T}\"), utc_2021_05_04 + h + m + s)\r\n                           == format(STR(\"2021-05-04 {:02}:{:02}:{:02}\"), h.count(), m.count(), s.count()));\r\n                }\r\n\r\n                if ((h == 23h && m == 59min) || s != 60s) {\r\n                    assert(format(STR(\"{:%F %T}\"), utc_2016_12_31 + h + m + s)\r\n                           == format(STR(\"2016-12-31 {:02}:{:02}:{:02}\"), h.count(), m.count(), s.count()));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    empty_braces_helper(file_clock::from_utc(utc_2016_12_31), STR(\"2016-12-31 00:00:00\"));\r\n    empty_braces_helper(file_clock::from_utc(utc_2016_12_31) + 24h, STR(\"2017-01-01 00:00:00\"));\r\n    empty_braces_helper(file_clock::from_utc(utc_2021_05_04), STR(\"2021-05-04 00:00:00\"));\r\n    // TRANSITION: Test a leap second insertion after 2018-06 when there is one\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_day_formatter() {\r\n    using view_typ = basic_string_view<CharT>;\r\n    using str_typ  = basic_string<CharT>;\r\n\r\n    constexpr view_typ s0(STR(\"{:%d}\"));\r\n    constexpr view_typ s1(STR(\"{:%e}\"));\r\n    constexpr view_typ s2(STR(\"{:%Od}\"));\r\n    constexpr view_typ s3(STR(\"{:%Oe}\"));\r\n    constexpr view_typ s4(STR(\"{}\"));\r\n    constexpr view_typ s5(STR(\"{:=>8}\"));\r\n    constexpr view_typ s6(STR(\"{:lit}\"));\r\n    constexpr view_typ s7(STR(\"{:%d days}\"));\r\n    constexpr view_typ s8(STR(\"{:*^6%dmm}\"));\r\n\r\n    str_typ a0(STR(\"27\"));\r\n    str_typ a1(STR(\"05\"));\r\n    str_typ a2(STR(\" 5\"));\r\n    str_typ a3(STR(\"50 is not a valid day\"));\r\n    str_typ a4(STR(\"======27\"));\r\n    str_typ a5(STR(\"======05\"));\r\n    str_typ a6(STR(\"lit27\"));\r\n    str_typ a7(STR(\"27 days\"));\r\n    str_typ a8(STR(\"*27mm*\"));\r\n\r\n    // 2 digits\r\n    day d0{27};\r\n    assert(format(s0, d0) == a0);\r\n    assert(format(s1, d0) == a0);\r\n\r\n    // 1 digit\r\n    day d1{5};\r\n    assert(format(s0, d1) == a1);\r\n    assert(format(s1, d1) == a2);\r\n\r\n    // O modifier\r\n    assert(format(s2, d0) == a0);\r\n    assert(format(s3, d0) == a0);\r\n    assert(format(s2, d1) == a1);\r\n    assert(format(s3, d1) == a2);\r\n\r\n    // [time.format]/6\r\n    day d2{50};\r\n    assert(format(s4, d0) == a0);\r\n    assert(format(s4, d2) == a3);\r\n\r\n    // width/align\r\n    assert(format(s5, d0) == a4);\r\n    assert(format(s5, d1) == a5);\r\n    assert(format(s5, d2) == a3);\r\n\r\n    // chrono-spec must begin with conversion-spec\r\n    throw_helper(s6, d0);\r\n\r\n    // lit chars\r\n    assert(format(s7, d0) == a7);\r\n    assert(format(s8, d0) == a8);\r\n\r\n    assert(format(STR(\"{:%d %d %d}\"), day{27}) == STR(\"27 27 27\"));\r\n    assert(format(STR(\"{:%d}\"), day{200}) == STR(\"200\"));\r\n    throw_helper(STR(\"{:%Ed}\"), day{10});\r\n    throw_helper(STR(\"{:%Od}\"), day{40});\r\n    throw_helper(STR(\"{:%Ed}\"), day{40});\r\n\r\n    // Op <<\r\n    empty_braces_helper(day{0}, STR(\"00 is not a valid day\"));\r\n    empty_braces_helper(day{27}, STR(\"27\"));\r\n    empty_braces_helper(day{200}, STR(\"200 is not a valid day\"));\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_month_formatter() {\r\n    empty_braces_helper(month{1}, STR(\"Jan\"));\r\n    empty_braces_helper(month{12}, STR(\"Dec\"));\r\n    empty_braces_helper(month{0}, STR(\"0 is not a valid month\"));\r\n    empty_braces_helper(month{20}, STR(\"20 is not a valid month\"));\r\n\r\n    // Specs\r\n    assert(format(STR(\"{:%b %h %B}\"), month{1}) == STR(\"Jan Jan January\"));\r\n    assert(format(STR(\"{:%m %Om}\"), month{1}) == STR(\"01 01\"));\r\n\r\n    // Out of bounds month\r\n    assert(format(STR(\"{:%m}\"), month{0}) == STR(\"00\"));\r\n    throw_helper(STR(\"{:%b}\"), month{0});\r\n    throw_helper(STR(\"{:%h}\"), month{0});\r\n    throw_helper(STR(\"{:%B}\"), month{0});\r\n\r\n    // Invalid specs\r\n    throw_helper(STR(\"{:%A}\"), month{1});\r\n    throw_helper(STR(\"{:%.4}\"), month{1});\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_year_formatter() {\r\n    empty_braces_helper(year{0}, STR(\"0000\"));\r\n    empty_braces_helper(year{-200}, STR(\"-0200\"));\r\n    empty_braces_helper(year{121}, STR(\"0121\"));\r\n\r\n    assert(format(STR(\"{:%Y %y%C}\"), year{1912}) == STR(\"1912 1219\"));\r\n    assert(format(STR(\"{:%Y %y%C}\"), year{-1912}) == STR(\"-1912 88-20\"));\r\n    assert(format(STR(\"{:%Y %y%C}\"), year{-200}) == STR(\"-0200 00-02\"));\r\n    assert(format(STR(\"{:%Y %y%C}\"), year{200}) == STR(\"0200 0002\"));\r\n    // TRANSITION, add tests for EY Oy Ey EC\r\n\r\n    empty_braces_helper(year{1900}, STR(\"1900\"));\r\n    empty_braces_helper(year{2000}, STR(\"2000\"));\r\n    empty_braces_helper(year{-32768}, STR(\"-32768 is not a valid year\"));\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_weekday_formatter() {\r\n    constexpr weekday invalid{10};\r\n    empty_braces_helper(weekday{3}, STR(\"Wed\"));\r\n    empty_braces_helper(invalid, STR(\"10 is not a valid weekday\"));\r\n\r\n    assert(format(STR(\"{:%a %A}\"), weekday{6}) == STR(\"Sat Saturday\"));\r\n    assert(format(STR(\"{:%u %w}\"), weekday{6}) == STR(\"6 6\"));\r\n    assert(format(STR(\"{:%u %w}\"), weekday{0}) == STR(\"7 0\"));\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_weekday_indexed_formatter() {\r\n    weekday_indexed invalid1{Tuesday, 10};\r\n    weekday_indexed invalid2{weekday{10}, 3};\r\n    weekday_indexed invalid3{weekday{14}, 9};\r\n    empty_braces_helper(weekday_indexed{Monday, 1}, STR(\"Mon[1]\"));\r\n    empty_braces_helper(invalid1, STR(\"Tue[10 is not a valid index]\"));\r\n    empty_braces_helper(invalid2, STR(\"10 is not a valid weekday[3]\"));\r\n    empty_braces_helper(invalid3, STR(\"14 is not a valid weekday[9 is not a valid index]\"));\r\n\r\n    assert(format(STR(\"{:%a %A}\"), weekday_indexed{Monday, 2}) == STR(\"Mon Monday\"));\r\n    assert(format(STR(\"{:%u %w}\"), weekday_indexed{Tuesday, 3}) == STR(\"2 2\"));\r\n    assert(format(STR(\"{:%u %w}\"), weekday_indexed{Sunday, 4}) == STR(\"7 0\"));\r\n    assert(format(STR(\"{:%u %w}\"), weekday_indexed{Sunday, 10}) == STR(\"7 0\"));\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_weekday_last_formatter() {\r\n    constexpr weekday_last invalid{weekday{10}};\r\n\r\n    empty_braces_helper(Wednesday[last], STR(\"Wed[last]\"));\r\n    empty_braces_helper(invalid, STR(\"10 is not a valid weekday[last]\"));\r\n\r\n    assert(format(STR(\"{:%a %A %u %w}\"), Saturday[last]) == STR(\"Sat Saturday 6 6\"));\r\n    assert(format(STR(\"{:%a %A %u %w}\"), Sunday[last]) == STR(\"Sun Sunday 7 0\"));\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_month_day_formatter() {\r\n    empty_braces_helper(January / 16, STR(\"Jan/16\"));\r\n    empty_braces_helper(month{13} / day{40}, STR(\"13 is not a valid month/40 is not a valid day\"));\r\n\r\n    assert(format(STR(\"{:%B %d}\"), June / 17) == STR(\"June 17\"));\r\n    throw_helper(STR(\"{:%Y}\"), June / 17);\r\n    assert(format(STR(\"{:%B}\"), June / day{40}) == STR(\"June\"));\r\n    throw_helper(STR(\"{:%B}\"), month{13} / 17);\r\n\r\n    assert(format(STR(\"{:%j}\"), January / 5) == STR(\"005\"));\r\n    assert(format(STR(\"{:%j}\"), February / 5) == STR(\"036\"));\r\n    assert(format(STR(\"{:%j}\"), February / 28) == STR(\"059\"));\r\n    assert(format(STR(\"{:%j}\"), February / 29) == STR(\"060\"));\r\n    throw_helper(STR(\"{:%j}\"), March / 1);\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_month_day_last_formatter() {\r\n    empty_braces_helper(February / last, STR(\"Feb/last\"));\r\n\r\n    assert(format(STR(\"{:%B}\"), June / last) == STR(\"June\"));\r\n    assert(format(STR(\"{:%d}\"), June / last) == STR(\"30\"));\r\n    throw_helper(STR(\"{:%d}\"), February / last);\r\n    throw_helper(STR(\"{:%B}\"), month{13} / last);\r\n\r\n    assert(format(STR(\"{:%j}\"), January / last) == STR(\"031\"));\r\n    throw_helper(STR(\"{:%j}\"), February / last);\r\n    throw_helper(STR(\"{:%j}\"), April / last);\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_month_weekday_formatter() {\r\n    constexpr month_weekday mwd1 = August / Tuesday[3];\r\n    constexpr month_weekday mwd2 = December / Sunday[4];\r\n\r\n    constexpr month_weekday invalid1 = March / Friday[9];\r\n    constexpr month_weekday invalid2 = March / weekday{8}[2];\r\n    constexpr month_weekday invalid3 = month{20} / Friday[2];\r\n    constexpr month_weekday invalid4 = month{20} / weekday{8}[9];\r\n\r\n    empty_braces_helper(mwd1, STR(\"Aug/Tue[3]\"));\r\n    empty_braces_helper(mwd2, STR(\"Dec/Sun[4]\"));\r\n\r\n    empty_braces_helper(invalid1, STR(\"Mar/Fri[9 is not a valid index]\"));\r\n    empty_braces_helper(invalid2, STR(\"Mar/8 is not a valid weekday[2]\"));\r\n    empty_braces_helper(invalid3, STR(\"20 is not a valid month/Fri[2]\"));\r\n    empty_braces_helper(invalid4, STR(\"20 is not a valid month/8 is not a valid weekday[9 is not a valid index]\"));\r\n\r\n    assert(format(STR(\"{:%b %B %h %m %a %A %u %w}\"), mwd1) == STR(\"Aug August Aug 08 Tue Tuesday 2 2\"));\r\n    assert(format(STR(\"{:%b %B %h %m %a %A %u %w}\"), mwd2) == STR(\"Dec December Dec 12 Sun Sunday 7 0\"));\r\n\r\n    assert(format(STR(\"{:%u}\"), invalid1) == STR(\"5\"));\r\n    throw_helper(STR(\"{:%u}\"), invalid2);\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_month_weekday_last_formatter() {\r\n    constexpr month_weekday_last mwdl1 = August / Tuesday[last];\r\n    constexpr month_weekday_last mwdl2 = December / Sunday[last];\r\n\r\n    constexpr month_weekday_last invalid1 = March / weekday{8}[last];\r\n    constexpr month_weekday_last invalid2 = month{20} / Friday[last];\r\n    constexpr month_weekday_last invalid3 = month{20} / weekday{8}[last];\r\n\r\n    empty_braces_helper(mwdl1, STR(\"Aug/Tue[last]\"));\r\n    empty_braces_helper(mwdl2, STR(\"Dec/Sun[last]\"));\r\n\r\n    empty_braces_helper(invalid1, STR(\"Mar/8 is not a valid weekday[last]\"));\r\n    empty_braces_helper(invalid2, STR(\"20 is not a valid month/Fri[last]\"));\r\n    empty_braces_helper(invalid3, STR(\"20 is not a valid month/8 is not a valid weekday[last]\"));\r\n\r\n    assert(format(STR(\"{:%b %B %h %m %a %A %u %w}\"), mwdl1) == STR(\"Aug August Aug 08 Tue Tuesday 2 2\"));\r\n    assert(format(STR(\"{:%b %B %h %m %a %A %u %w}\"), mwdl2) == STR(\"Dec December Dec 12 Sun Sunday 7 0\"));\r\n\r\n    assert(format(STR(\"{:%u}\"), invalid2) == STR(\"5\"));\r\n    throw_helper(STR(\"{:%u}\"), invalid1);\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_year_month_formatter() {\r\n    empty_braces_helper(1444y / October, STR(\"1444/Oct\"));\r\n\r\n    assert(format(STR(\"{:%Y %B}\"), 2000y / July) == STR(\"2000 July\"));\r\n    throw_helper(STR(\"{:%d}\"), 2000y / July);\r\n\r\n    throw_helper(STR(\"{:%g}\"), 2005y / month{0});\r\n    throw_helper(STR(\"{:%G}\"), 2005y / month{0});\r\n    throw_helper(STR(\"{:%g}\"), 2005y / January);\r\n    throw_helper(STR(\"{:%G}\"), 2005y / January);\r\n    assert(format(STR(\"{:%g %G}\"), 2005y / February) == STR(\"05 2005\"));\r\n    assert(format(STR(\"{:%g %G}\"), 2005y / November) == STR(\"05 2005\"));\r\n    throw_helper(STR(\"{:%g}\"), 2005y / December);\r\n    throw_helper(STR(\"{:%G}\"), 2005y / December);\r\n    throw_helper(STR(\"{:%g}\"), 2005y / month{13});\r\n    throw_helper(STR(\"{:%G}\"), 2005y / month{13});\r\n    throw_helper(STR(\"{:%g}\"), year{-32768} / November);\r\n    throw_helper(STR(\"{:%G}\"), year{-32768} / November);\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_year_month_day_formatter() {\r\n    constexpr year_month_day invalid{year{1234}, month{0}, day{31}};\r\n    empty_braces_helper(year_month_day{year{1900}, month{2}, day{1}}, STR(\"1900-02-01\"));\r\n    empty_braces_helper(invalid, STR(\"1234-00-31 is not a valid date\"));\r\n\r\n    assert(format(STR(\"{:%Y %b %d}\"), year_month_day{year{1234}, month{5}, day{6}}) == STR(\"1234 May 06\"));\r\n    assert(format(STR(\"{:%F %D}\"), invalid) == STR(\"1234-00-31 00/31/34\"));\r\n    assert(format(STR(\"{:%a %A}\"), year_month_day{year{1900}, month{1}, day{4}}) == STR(\"Thu Thursday\"));\r\n    assert(format(STR(\"{:%u %w}\"), year_month_day{year{1900}, month{1}, day{4}}) == STR(\"4 4\"));\r\n    throw_helper(STR(\"{:%u}\"), invalid);\r\n\r\n    assert(format(STR(\"{:%j}\"), 1900y / January / 4) == STR(\"004\"));\r\n    assert(format(STR(\"{:%j}\"), 1900y / May / 7) == STR(\"127\"));\r\n    assert(format(STR(\"{:%j}\"), 2000y / May / 7) == STR(\"128\"));\r\n    throw_helper(STR(\"{:%j}\"), invalid);\r\n\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / January / 1) == STR(\"09 2009 00 53 00\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / January / 2) == STR(\"09 2009 00 53 00\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / January / 3) == STR(\"09 2009 01 53 00\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / January / 4) == STR(\"10 2010 01 01 01\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / January / 5) == STR(\"10 2010 01 01 01\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / January / 6) == STR(\"10 2010 01 01 01\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / January / 7) == STR(\"10 2010 01 01 01\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / May / 1) == STR(\"10 2010 17 17 17\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / May / 2) == STR(\"10 2010 18 17 17\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / May / 3) == STR(\"10 2010 18 18 18\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / December / 25) == STR(\"10 2010 51 51 51\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / December / 26) == STR(\"10 2010 52 51 51\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / December / 27) == STR(\"10 2010 52 52 52\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / December / 28) == STR(\"10 2010 52 52 52\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / December / 29) == STR(\"10 2010 52 52 52\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / December / 30) == STR(\"10 2010 52 52 52\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / December / 31) == STR(\"10 2010 52 52 52\"));\r\n\r\n    // GH-2761, formatter<chrono::year_month_day> is not fully implemented\r\n    assert(format(STR(\"{:%x}\"), year_month_day{year{2010}, month{5}, day{6}}) == STR(\"05/06/10\"));\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_year_month_day_last_formatter() {\r\n    constexpr year_month_day_last ymdl1 = 2021y / April / last;\r\n    constexpr year_month_day_last ymdl2 = 2004y / February / last;\r\n\r\n    constexpr year_month_day_last invalid = 1999y / month{20} / last;\r\n\r\n    empty_braces_helper(ymdl1, STR(\"2021/Apr/last\"));\r\n    empty_braces_helper(ymdl2, STR(\"2004/Feb/last\"));\r\n\r\n    empty_braces_helper(invalid, STR(\"1999/20 is not a valid month/last\"));\r\n\r\n    constexpr auto fmt = STR(\"{:%D %F, %Y %C %y, %b %B %h %m, %d %e, %a %A %u %w}\");\r\n    assert(format(fmt, ymdl1) == STR(\"04/30/21 2021-04-30, 2021 20 21, Apr April Apr 04, 30 30, Fri Friday 5 5\"));\r\n    assert(format(fmt, ymdl2) == STR(\"02/29/04 2004-02-29, 2004 20 04, Feb February Feb 02, 29 29, Sun Sunday 7 0\"));\r\n\r\n    throw_helper(STR(\"{:%u}\"), invalid);\r\n\r\n    assert(format(STR(\"{:%j}\"), 1900y / January / last) == STR(\"031\"));\r\n    assert(format(STR(\"{:%j}\"), 1900y / February / last) == STR(\"059\"));\r\n    assert(format(STR(\"{:%j}\"), 2000y / February / last) == STR(\"060\"));\r\n    throw_helper(STR(\"{:%j}\"), year{1900} / month{13} / last);\r\n\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / May / last) == STR(\"10 2010 22 22 22\"));\r\n\r\n    // GH-2761, formatter<chrono::year_month_day> is not fully implemented\r\n    assert(format(STR(\"{:%x}\"), ymdl1) == STR(\"04/30/21\"));\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_year_month_weekday_formatter() {\r\n    constexpr year_month_weekday ymwd1 = 2021y / April / Friday[5];\r\n    constexpr year_month_weekday ymwd2 = 2004y / February / Sunday[5];\r\n\r\n    constexpr year_month_weekday invalid1 = 2015y / March / Friday[9];\r\n    constexpr year_month_weekday invalid2 = 2015y / March / weekday{8}[2];\r\n    constexpr year_month_weekday invalid3 = 2015y / month{20} / Friday[2];\r\n    constexpr year_month_weekday invalid4 = 2015y / month{20} / weekday{8}[9];\r\n\r\n    empty_braces_helper(ymwd1, STR(\"2021/Apr/Fri[5]\"));\r\n    empty_braces_helper(ymwd2, STR(\"2004/Feb/Sun[5]\"));\r\n\r\n    empty_braces_helper(invalid1, STR(\"2015/Mar/Fri[9 is not a valid index]\"));\r\n    empty_braces_helper(invalid2, STR(\"2015/Mar/8 is not a valid weekday[2]\"));\r\n    empty_braces_helper(invalid3, STR(\"2015/20 is not a valid month/Fri[2]\"));\r\n    empty_braces_helper(invalid4, STR(\"2015/20 is not a valid month/8 is not a valid weekday[9 is not a valid index]\"));\r\n\r\n    constexpr auto fmt = STR(\"{:%D %F, %Y %C %y, %b %B %h %m, %d %e, %a %A %u %w}\");\r\n    assert(format(fmt, ymwd1) == STR(\"04/30/21 2021-04-30, 2021 20 21, Apr April Apr 04, 30 30, Fri Friday 5 5\"));\r\n    assert(format(fmt, ymwd2) == STR(\"02/29/04 2004-02-29, 2004 20 04, Feb February Feb 02, 29 29, Sun Sunday 7 0\"));\r\n\r\n    assert(format(STR(\"{:%u}\"), invalid1) == STR(\"5\"));\r\n    throw_helper(STR(\"{:%u}\"), invalid2);\r\n\r\n    assert(format(STR(\"{:%j}\"), 1900y / January / Tuesday[2]) == STR(\"009\"));\r\n    throw_helper(STR(\"{:%j}\"), invalid1);\r\n\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / May / Monday[5]) == STR(\"10 2010 22 22 22\"));\r\n\r\n    // GH-2761, formatter<chrono::year_month_day> is not fully implemented\r\n    assert(format(STR(\"{:%x}\"), ymwd1) == STR(\"04/30/21\"));\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_year_month_weekday_last_formatter() {\r\n    constexpr year_month_weekday_last ymwdl1 = 2021y / April / Friday[last];\r\n    constexpr year_month_weekday_last ymwdl2 = 2004y / February / Sunday[last];\r\n\r\n    constexpr year_month_weekday_last invalid1 = 2015y / March / weekday{8}[last];\r\n    constexpr year_month_weekday_last invalid2 = 2015y / month{20} / Friday[last];\r\n    constexpr year_month_weekday_last invalid3 = 2015y / month{20} / weekday{8}[last];\r\n\r\n    empty_braces_helper(ymwdl1, STR(\"2021/Apr/Fri[last]\"));\r\n    empty_braces_helper(ymwdl2, STR(\"2004/Feb/Sun[last]\"));\r\n\r\n    empty_braces_helper(invalid1, STR(\"2015/Mar/8 is not a valid weekday[last]\"));\r\n    empty_braces_helper(invalid2, STR(\"2015/20 is not a valid month/Fri[last]\"));\r\n    empty_braces_helper(invalid3, STR(\"2015/20 is not a valid month/8 is not a valid weekday[last]\"));\r\n\r\n    constexpr auto fmt = STR(\"{:%D %F, %Y %C %y, %b %B %h %m, %d %e, %a %A %u %w}\");\r\n    assert(format(fmt, ymwdl1) == STR(\"04/30/21 2021-04-30, 2021 20 21, Apr April Apr 04, 30 30, Fri Friday 5 5\"));\r\n    assert(format(fmt, ymwdl2) == STR(\"02/29/04 2004-02-29, 2004 20 04, Feb February Feb 02, 29 29, Sun Sunday 7 0\"));\r\n\r\n    assert(format(STR(\"{:%u}\"), invalid2) == STR(\"5\"));\r\n    throw_helper(STR(\"{:%u}\"), invalid1);\r\n\r\n    assert(format(STR(\"{:%j}\"), 1900y / January / Tuesday[last]) == STR(\"030\"));\r\n    throw_helper(STR(\"{:%j}\"), invalid1);\r\n\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), 2010y / May / Monday[last]) == STR(\"10 2010 22 22 22\"));\r\n\r\n    // GH-2761, formatter<chrono::year_month_day> is not fully implemented\r\n    assert(format(STR(\"{:%x}\"), ymwdl1) == STR(\"04/30/21\"));\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_hh_mm_ss_formatter() {\r\n    empty_braces_helper(hh_mm_ss{-4083007ms}, STR(\"-01:08:03.007\"));\r\n    empty_braces_helper(hh_mm_ss{4083007ms}, STR(\"01:08:03.007\"));\r\n    empty_braces_helper(hh_mm_ss{65745123ms}, STR(\"18:15:45.123\"));\r\n    empty_braces_helper(hh_mm_ss{65745s}, STR(\"18:15:45\"));\r\n    empty_braces_helper(hh_mm_ss{0.1ns}, STR(\"00:00:00.000000000\"));\r\n    empty_braces_helper(hh_mm_ss{1.45ns}, STR(\"00:00:00.000000001\"));\r\n    empty_braces_helper(hh_mm_ss{1.56ns}, STR(\"00:00:00.000000001\"));\r\n    empty_braces_helper(hh_mm_ss{1e+8ns}, STR(\"00:00:00.100000000\"));\r\n    empty_braces_helper(hh_mm_ss{999'999.9us}, STR(\"00:00:00.999999\"));\r\n    empty_braces_helper(hh_mm_ss{59'999'999.9us}, STR(\"00:00:59.999999\"));\r\n    empty_braces_helper(hh_mm_ss{3'599'999'999.9us}, STR(\"00:59:59.999999\"));\r\n    empty_braces_helper(hh_mm_ss{86'399'999'999.9us}, STR(\"23:59:59.999999\"));\r\n\r\n    assert(format(STR(\"{:%H %I %M %S %r %R %T %p}\"), hh_mm_ss{13h + 14min + 15351ms})\r\n           == STR(\"13 01 14 15.351 01:14:15 PM 13:14 13:14:15.351 PM\"));\r\n\r\n    assert(format(STR(\"{:%H %I %M %S %r %R %T %p}\"), hh_mm_ss{-13h - 14min - 15351ms})\r\n           == STR(\"-13 01 14 15.351 01:14:15 PM 13:14 13:14:15.351 PM\"));\r\n\r\n    assert(format(STR(\"{}\"), hh_mm_ss{24h}) == STR(\"24:00:00\"));\r\n    assert(format(STR(\"{}\"), hh_mm_ss{-24h}) == STR(\"-24:00:00\"));\r\n    assert(format(STR(\"{:%H}\"), hh_mm_ss{24h}) == STR(\"24\"));\r\n    assert(format(STR(\"{:%H}\"), hh_mm_ss{-24h}) == STR(\"-24\"));\r\n    assert(format(STR(\"{:%M %S}\"), hh_mm_ss{27h + 12min + 30s}) == STR(\"12 30\"));\r\n\r\n    // GH-4247: <chrono>: format() should accept %X and %EX for duration and hh_mm_ss\r\n    assert(format(STR(\"{:%X}\"), hh_mm_ss{9h + 7min + 5s}) == STR(\"09:07:05\"));\r\n    assert(format(STR(\"{:%EX}\"), hh_mm_ss{9h + 7min + 5s}) == STR(\"09:07:05\"));\r\n}\r\n\r\nvoid test_exception_classes() {\r\n    { // N4885 [time.zone.exception.nonexist]/4\r\n        string s;\r\n\r\n        try {\r\n            (void) zoned_time{\"America/New_York\", local_days{Sunday[2] / March / 2016} + 2h + 30min};\r\n        } catch (const nonexistent_local_time& e) {\r\n            s = e.what();\r\n        }\r\n\r\n        assert(s\r\n                   == \"2016-03-13 02:30:00 is in a gap between\\n\"\r\n                      \"2016-03-13 02:00:00 EST and\\n\"\r\n                      \"2016-03-13 03:00:00 EDT which are both equivalent to\\n\"\r\n                      \"2016-03-13 07:00:00 UTC\"\r\n               || s\r\n                      == \"2016-03-13 02:30:00 is in a gap between\\n\"\r\n                         \"2016-03-13 02:00:00 GMT-5 and\\n\"\r\n                         \"2016-03-13 03:00:00 GMT-4 which are both equivalent to\\n\"\r\n                         \"2016-03-13 07:00:00 UTC\");\r\n    }\r\n\r\n    { // N4885 [time.zone.exception.ambig]/4\r\n        string s;\r\n\r\n        try {\r\n            (void) zoned_time{\"America/New_York\", local_days{Sunday[1] / November / 2016} + 1h + 30min};\r\n        } catch (const ambiguous_local_time& e) {\r\n            s = e.what();\r\n        }\r\n\r\n        assert(s\r\n                   == \"2016-11-06 01:30:00 is ambiguous.  It could be\\n\"\r\n                      \"2016-11-06 01:30:00 EDT == 2016-11-06 05:30:00 UTC or\\n\"\r\n                      \"2016-11-06 01:30:00 EST == 2016-11-06 06:30:00 UTC\"\r\n               || s\r\n                      == \"2016-11-06 01:30:00 is ambiguous.  It could be\\n\"\r\n                         \"2016-11-06 01:30:00 GMT-4 == 2016-11-06 05:30:00 UTC or\\n\"\r\n                         \"2016-11-06 01:30:00 GMT-5 == 2016-11-06 06:30:00 UTC\");\r\n    }\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_information_classes() {\r\n    const tzdb& database = get_tzdb();\r\n\r\n    const time_zone* const sydney_tz = database.locate_zone(Sydney::Tz_name);\r\n    assert(sydney_tz != nullptr);\r\n\r\n    const time_zone* const la_tz = database.locate_zone(LA::Tz_name);\r\n    assert(la_tz != nullptr);\r\n\r\n    const sys_info sys1 = sydney_tz->get_info(Sydney::Std_1.begin() + days{1});\r\n    const sys_info sys2 = sydney_tz->get_info(Sydney::Day_2.begin() + days{1});\r\n    const sys_info sys3 = la_tz->get_info(LA::Std_1.begin() + days{1});\r\n    const sys_info sys4 = la_tz->get_info(LA::Day_2.begin() + days{1});\r\n\r\n    const local_info loc1 = sydney_tz->get_info(Sydney::Std_1.local_begin() + days{1});\r\n    const local_info loc2 = sydney_tz->get_info(Sydney::Day_2.local_begin() + days{1});\r\n    const local_info loc3 = la_tz->get_info(LA::Std_1.local_begin() + days{1});\r\n    const local_info loc4 = la_tz->get_info(LA::Day_2.local_begin() + days{1});\r\n\r\n    const local_info ambiguous1 = sydney_tz->get_info(Sydney::Std_1.local_begin());\r\n    const local_info ambiguous2 = la_tz->get_info(LA::Std_1.local_begin());\r\n\r\n    const local_info nonexistent1 = sydney_tz->get_info(Sydney::Std_1.local_end());\r\n    const local_info nonexistent2 = la_tz->get_info(LA::Std_1.local_end());\r\n\r\n    // N4885 [time.zone.info.sys]/7: \"Effects: Streams out the sys_info object r in an unspecified format.\"\r\n    // N4885 [time.zone.info.local]/3: \"Effects: Streams out the local_info object r in an unspecified format.\"\r\n\r\n    empty_braces_helper(sys1,\r\n        STR(\"begin: 2020-04-04 16:00:00, end: 2020-10-03 16:00:00, \"\r\n            \"offset: 36000s, save: 0min, abbrev: AEST\"),\r\n        STR(\"begin: 2020-04-04 16:00:00, end: 2020-10-03 16:00:00, \"\r\n            \"offset: 36000s, save: 0min, abbrev: GMT+10\"));\r\n    empty_braces_helper(sys2,\r\n        STR(\"begin: 2020-10-03 16:00:00, end: 2021-04-03 16:00:00, \"\r\n            \"offset: 39600s, save: 60min, abbrev: AEDT\"),\r\n        STR(\"begin: 2020-10-03 16:00:00, end: 2021-04-03 16:00:00, \"\r\n            \"offset: 39600s, save: 60min, abbrev: GMT+11\"));\r\n    empty_braces_helper(sys3,\r\n        STR(\"begin: 2020-11-01 09:00:00, end: 2021-03-14 10:00:00, \"\r\n            \"offset: -28800s, save: 0min, abbrev: PST\"),\r\n        STR(\"begin: 2020-11-01 09:00:00, end: 2021-03-14 10:00:00, \"\r\n            \"offset: -28800s, save: 0min, abbrev: GMT-8\"));\r\n    empty_braces_helper(sys4,\r\n        STR(\"begin: 2021-03-14 10:00:00, end: 2021-11-07 09:00:00, \"\r\n            \"offset: -25200s, save: 60min, abbrev: PDT\"),\r\n        STR(\"begin: 2021-03-14 10:00:00, end: 2021-11-07 09:00:00, \"\r\n            \"offset: -25200s, save: 60min, abbrev: GMT-7\"));\r\n    empty_braces_helper(loc1,\r\n        STR(\"result: unique, \"\r\n            \"first: (begin: 2020-04-04 16:00:00, end: 2020-10-03 16:00:00, \"\r\n            \"offset: 36000s, save: 0min, abbrev: AEST)\"),\r\n        STR(\"result: unique, \"\r\n            \"first: (begin: 2020-04-04 16:00:00, end: 2020-10-03 16:00:00, \"\r\n            \"offset: 36000s, save: 0min, abbrev: GMT+10)\"));\r\n    empty_braces_helper(loc2,\r\n        STR(\"result: unique, \"\r\n            \"first: (begin: 2020-10-03 16:00:00, end: 2021-04-03 16:00:00, \"\r\n            \"offset: 39600s, save: 60min, abbrev: AEDT)\"),\r\n        STR(\"result: unique, \"\r\n            \"first: (begin: 2020-10-03 16:00:00, end: 2021-04-03 16:00:00, \"\r\n            \"offset: 39600s, save: 60min, abbrev: GMT+11)\"));\r\n    empty_braces_helper(loc3,\r\n        STR(\"result: unique, \"\r\n            \"first: (begin: 2020-11-01 09:00:00, end: 2021-03-14 10:00:00, \"\r\n            \"offset: -28800s, save: 0min, abbrev: PST)\"),\r\n        STR(\"result: unique, \"\r\n            \"first: (begin: 2020-11-01 09:00:00, end: 2021-03-14 10:00:00, \"\r\n            \"offset: -28800s, save: 0min, abbrev: GMT-8)\"));\r\n    empty_braces_helper(loc4,\r\n        STR(\"result: unique, \"\r\n            \"first: (begin: 2021-03-14 10:00:00, end: 2021-11-07 09:00:00, \"\r\n            \"offset: -25200s, save: 60min, abbrev: PDT)\"),\r\n        STR(\"result: unique, \"\r\n            \"first: (begin: 2021-03-14 10:00:00, end: 2021-11-07 09:00:00, \"\r\n            \"offset: -25200s, save: 60min, abbrev: GMT-7)\"));\r\n    empty_braces_helper(ambiguous1,\r\n        STR(\"result: ambiguous, \"\r\n            \"first: (begin: 2019-10-05 16:00:00, end: 2020-04-04 16:00:00, \"\r\n            \"offset: 39600s, save: 60min, abbrev: AEDT), \"\r\n            \"second: (begin: 2020-04-04 16:00:00, end: 2020-10-03 16:00:00, \"\r\n            \"offset: 36000s, save: 0min, abbrev: AEST)\"),\r\n        STR(\"result: ambiguous, \"\r\n            \"first: (begin: 2019-10-05 16:00:00, end: 2020-04-04 16:00:00, \"\r\n            \"offset: 39600s, save: 60min, abbrev: GMT+11), \"\r\n            \"second: (begin: 2020-04-04 16:00:00, end: 2020-10-03 16:00:00, \"\r\n            \"offset: 36000s, save: 0min, abbrev: GMT+10)\"));\r\n    empty_braces_helper(ambiguous2,\r\n        STR(\"result: ambiguous, \"\r\n            \"first: (begin: 2020-03-08 10:00:00, end: 2020-11-01 09:00:00, \"\r\n            \"offset: -25200s, save: 60min, abbrev: PDT), \"\r\n            \"second: (begin: 2020-11-01 09:00:00, end: 2021-03-14 10:00:00, \"\r\n            \"offset: -28800s, save: 0min, abbrev: PST)\"),\r\n        STR(\"result: ambiguous, \"\r\n            \"first: (begin: 2020-03-08 10:00:00, end: 2020-11-01 09:00:00, \"\r\n            \"offset: -25200s, save: 60min, abbrev: GMT-7), \"\r\n            \"second: (begin: 2020-11-01 09:00:00, end: 2021-03-14 10:00:00, \"\r\n            \"offset: -28800s, save: 0min, abbrev: GMT-8)\"));\r\n    empty_braces_helper(nonexistent1,\r\n        STR(\"result: nonexistent, \"\r\n            \"first: (begin: 2020-04-04 16:00:00, end: 2020-10-03 16:00:00, \"\r\n            \"offset: 36000s, save: 0min, abbrev: AEST), \"\r\n            \"second: (begin: 2020-10-03 16:00:00, end: 2021-04-03 16:00:00, \"\r\n            \"offset: 39600s, save: 60min, abbrev: AEDT)\"),\r\n        STR(\"result: nonexistent, \"\r\n            \"first: (begin: 2020-04-04 16:00:00, end: 2020-10-03 16:00:00, \"\r\n            \"offset: 36000s, save: 0min, abbrev: GMT+10), \"\r\n            \"second: (begin: 2020-10-03 16:00:00, end: 2021-04-03 16:00:00, \"\r\n            \"offset: 39600s, save: 60min, abbrev: GMT+11)\"));\r\n    empty_braces_helper(nonexistent2,\r\n        STR(\"result: nonexistent, \"\r\n            \"first: (begin: 2020-11-01 09:00:00, end: 2021-03-14 10:00:00, \"\r\n            \"offset: -28800s, save: 0min, abbrev: PST), \"\r\n            \"second: (begin: 2021-03-14 10:00:00, end: 2021-11-07 09:00:00, \"\r\n            \"offset: -25200s, save: 60min, abbrev: PDT)\"),\r\n        STR(\"result: nonexistent, \"\r\n            \"first: (begin: 2020-11-01 09:00:00, end: 2021-03-14 10:00:00, \"\r\n            \"offset: -28800s, save: 0min, abbrev: GMT-8), \"\r\n            \"second: (begin: 2021-03-14 10:00:00, end: 2021-11-07 09:00:00, \"\r\n            \"offset: -25200s, save: 60min, abbrev: GMT-7)\"));\r\n\r\n    const auto sys1_str = format(STR(\"{:%z %Ez %Oz %Z}\"), sys1);\r\n    const auto sys2_str = format(STR(\"{:%z %Ez %Oz %Z}\"), sys2);\r\n    const auto sys3_str = format(STR(\"{:%z %Ez %Oz %Z}\"), sys3);\r\n    const auto sys4_str = format(STR(\"{:%z %Ez %Oz %Z}\"), sys4);\r\n\r\n    const auto loc1_str = format(STR(\"{:%z %Ez %Oz %Z}\"), loc1);\r\n    const auto loc2_str = format(STR(\"{:%z %Ez %Oz %Z}\"), loc2);\r\n    const auto loc3_str = format(STR(\"{:%z %Ez %Oz %Z}\"), loc3);\r\n    const auto loc4_str = format(STR(\"{:%z %Ez %Oz %Z}\"), loc4);\r\n\r\n    assert(sys1_str == STR(\"+1000 +10:00 +10:00 AEST\") || sys1_str == STR(\"+1000 +10:00 +10:00 GMT+10\"));\r\n    assert(sys2_str == STR(\"+1100 +11:00 +11:00 AEDT\") || sys2_str == STR(\"+1100 +11:00 +11:00 GMT+11\"));\r\n    assert(sys3_str == STR(\"-0800 -08:00 -08:00 PST\") || sys3_str == STR(\"-0800 -08:00 -08:00 GMT-8\"));\r\n    assert(sys4_str == STR(\"-0700 -07:00 -07:00 PDT\") || sys4_str == STR(\"-0700 -07:00 -07:00 GMT-7\"));\r\n\r\n    assert(loc1_str == STR(\"+1000 +10:00 +10:00 AEST\") || loc1_str == STR(\"+1000 +10:00 +10:00 GMT+10\"));\r\n    assert(loc2_str == STR(\"+1100 +11:00 +11:00 AEDT\") || loc2_str == STR(\"+1100 +11:00 +11:00 GMT+11\"));\r\n    assert(loc3_str == STR(\"-0800 -08:00 -08:00 PST\") || loc3_str == STR(\"-0800 -08:00 -08:00 GMT-8\"));\r\n    assert(loc4_str == STR(\"-0700 -07:00 -07:00 PDT\") || loc4_str == STR(\"-0700 -07:00 -07:00 GMT-7\"));\r\n\r\n    throw_helper(STR(\"{:%z}\"), ambiguous1);\r\n    throw_helper(STR(\"{:%z}\"), ambiguous2);\r\n    throw_helper(STR(\"{:%z}\"), nonexistent1);\r\n    throw_helper(STR(\"{:%z}\"), nonexistent2);\r\n\r\n    throw_helper(STR(\"{:%Z}\"), ambiguous1);\r\n    throw_helper(STR(\"{:%Z}\"), ambiguous2);\r\n    throw_helper(STR(\"{:%Z}\"), nonexistent1);\r\n    throw_helper(STR(\"{:%Z}\"), nonexistent2);\r\n\r\n    // Additionally test zero and half-hour offsets.\r\n    const time_zone* const utc_tz = database.locate_zone(\"Etc/UTC\"sv);\r\n    assert(utc_tz != nullptr);\r\n\r\n    const time_zone* const kolkata_tz = database.locate_zone(\"Asia/Kolkata\"sv);\r\n    assert(kolkata_tz != nullptr);\r\n\r\n    const sys_info sys5 = utc_tz->get_info(sys_days{2021y / January / 1});\r\n    const sys_info sys6 = kolkata_tz->get_info(sys_days{2021y / January / 1});\r\n\r\n    assert(format(STR(\"{:%z %Ez %Oz}\"), sys5) == STR(\"+0000 +00:00 +00:00\"));\r\n    assert(format(STR(\"{:%z %Ez %Oz}\"), sys6) == STR(\"+0530 +05:30 +05:30\"));\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_local_time_format_formatter() {\r\n    constexpr local_seconds t{local_days{2021y / April / 19} + 1h + 2min + 3s};\r\n    const string abbrev{\"Meow\"};\r\n    constexpr seconds offset{17h + 29min};\r\n\r\n    const auto ltf = local_time_format(t, &abbrev, &offset);\r\n\r\n    throw_helper(STR(\"{:%Z}\"), local_time_format(t, nullptr, &offset));\r\n    throw_helper(STR(\"{:%z}\"), local_time_format(t, &abbrev, nullptr));\r\n\r\n    assert(format(STR(\"{:%Z %z %Oz %Ez}\"), ltf) == STR(\"Meow +1729 +17:29 +17:29\"));\r\n\r\n    // Doesn't appear in the Standard, but allowed by N4885 [global.functions]/2.\r\n    // Implements N4885 [time.zone.zonedtime.nonmembers]/2 for zoned_time.\r\n    empty_braces_helper(ltf, STR(\"2021-04-19 01:02:03 Meow\"));\r\n\r\n    assert(format(STR(\"{:%c, %x, %X}\"), ltf) == STR(\"04/19/21 01:02:03, 04/19/21, 01:02:03\"));\r\n    assert(format(STR(\"{:%D %F, %Y %C %y, %b %B %h %m, %d %e, %a %A %u %w}\"), ltf)\r\n           == STR(\"04/19/21 2021-04-19, 2021 20 21, Apr April Apr 04, 19 19, Mon Monday 1 1\"));\r\n    assert(format(STR(\"{:%H %I %M %S, %r, %R %T %p}\"), ltf) == STR(\"01 01 02 03, 01:02:03 AM, 01:02 01:02:03 AM\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), ltf) == STR(\"21 2021 16 16 16\"));\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_zoned_time_formatter() {\r\n    constexpr sys_seconds t{sys_days{2021y / April / 19} + 15h + 16min + 17s};\r\n\r\n    const zoned_time zt{LA::Tz_name, t};\r\n\r\n    empty_braces_helper(zt, STR(\"2021-04-19 08:16:17 PDT\"), STR(\"2021-04-19 08:16:17 GMT-7\"));\r\n\r\n    assert(format(STR(\"{:%c, %x, %X}\"), zt) == STR(\"04/19/21 08:16:17, 04/19/21, 08:16:17\"));\r\n    assert(format(STR(\"{:%D %F, %Y %C %y, %b %B %h %m, %d %e, %a %A %u %w}\"), zt)\r\n           == STR(\"04/19/21 2021-04-19, 2021 20 21, Apr April Apr 04, 19 19, Mon Monday 1 1\"));\r\n    assert(format(STR(\"{:%H %I %M %S, %r, %R %T %p}\"), zt) == STR(\"08 08 16 17, 08:16:17 AM, 08:16 08:16:17 AM\"));\r\n    assert(format(STR(\"{:%g %G %U %V %W}\"), zt) == STR(\"21 2021 16 16 16\"));\r\n\r\n    // LWG-4124 \"Cannot format zoned_time with resolution coarser than seconds\"\r\n\r\n    const zoned_time<minutes> zoned_minutes_epoch{};\r\n\r\n    empty_braces_helper(zoned_minutes_epoch, STR(\"1970-01-01 00:00:00 UTC\"));\r\n}\r\n\r\ntemplate <typename CharT>\r\nvoid test_locale() {\r\n    assert(format(locale{\"zh-CN\"}, STR(\"{:^22L%Y %B %d %A}\"), 2021y / June / 16d)\r\n           == STR(\" 2021 \\u516D\\u6708 16 \\u661F\\u671F\\u4E09  \"));\r\n\r\n\r\n    locale loc(\"de-DE\");\r\n\r\n    assert(format(loc, STR(\"{:%S}\"), 42ms) == STR(\"00.042\"));\r\n    assert(format(loc, STR(\"{:L%S}\"), 42ms) == STR(\"00,042\"));\r\n\r\n    auto stream = [=](auto value) {\r\n        basic_ostringstream<CharT> os;\r\n        os.imbue(loc);\r\n        os << value;\r\n        return os.str();\r\n    };\r\n    assert(stream(month{May}) == STR(\"Mai\"));\r\n    assert(stream(weekday{Tuesday}) == STR(\"Di\"));\r\n    assert(stream(weekday_indexed{Tuesday[3]}) == STR(\"Di[3]\"));\r\n    assert(stream(weekday_indexed{Tuesday[42]}) == STR(\"Di[42 is not a valid index]\"));\r\n    assert(stream(weekday_last{Tuesday}) == STR(\"Di[last]\"));\r\n    assert(stream(month_day{May, day{4}}) == STR(\"Mai/04\"));\r\n    assert(stream(month_day_last{May}) == STR(\"Mai/last\"));\r\n    assert(stream(month_weekday{May / Tuesday[4]}) == STR(\"Mai/Di[4]\"));\r\n    assert(stream(month_weekday_last{May / Tuesday[last]}) == STR(\"Mai/Di[last]\"));\r\n    assert(stream(year_month{2021y / May}) == STR(\"2021/Mai\"));\r\n    assert(stream(year_month_day_last{2021y / May / last}) == STR(\"2021/Mai/last\"));\r\n    assert(stream(year_month_weekday{2021y / May / Tuesday[4]}) == STR(\"2021/Mai/Di[4]\"));\r\n    assert(stream(year_month_weekday_last{2021y / May / Tuesday[last]}) == STR(\"2021/Mai/Di[last]\"));\r\n}\r\n\r\nvoid test_unsigned_sys_time_format_after_LWG_4274() {\r\n    const sys_time<duration<unsigned int>> tp{};\r\n    const string s = format(\"{:%Y-%m-%d %H:%M:%S}\", tp);\r\n    assert(s == \"1970-01-01 00:00:00\");\r\n}\r\n\r\ntemplate <typename T>\r\nconcept ostream_insertable = requires(ostream& o, const T& t) { o << t; };\r\n\r\ntemplate <typename Dur>\r\nvoid check_stream_insertion_operator_for_duration() {\r\n    if constexpr (ostream_insertable<sys_time<Dur>>) {\r\n        ostringstream oss;\r\n        oss << sys_time<Dur>{};\r\n        assert(oss.str() == \"1970-01-01 00:00:00\");\r\n    }\r\n\r\n    if constexpr (ostream_insertable<local_time<Dur>>) {\r\n        ostringstream oss;\r\n        oss << local_time<Dur>{};\r\n        assert(oss.str() == \"1970-01-01 00:00:00\");\r\n    }\r\n}\r\n\r\n// Test based on example in LWG-4257\r\nvoid check_stream_insertion_operator() {\r\n    // operator<< is constrained such that it does not participate when underlying duration has floating-point rep\r\n    using ok_dur  = duration<long long>;\r\n    using bad_dur = duration<double>;\r\n\r\n    static_assert(ostream_insertable<sys_time<ok_dur>>);\r\n    static_assert(ostream_insertable<local_time<ok_dur>>);\r\n    check_stream_insertion_operator_for_duration<ok_dur>();\r\n\r\n    static_assert(!ostream_insertable<sys_time<bad_dur>>);\r\n    static_assert(!ostream_insertable<local_time<bad_dur>>);\r\n    check_stream_insertion_operator_for_duration<bad_dur>();\r\n}\r\n\r\n// Test introduced for GH-5945 \"<chrono>: cannot format unsigned durations\"\r\nvoid test_format_duration_with_unsigned_rep() {\r\n    // operator<<(ostream&, duration _Dur) only prints _Dur.count() (does not use abs)\r\n    {\r\n        ostringstream oss;\r\n        oss << duration<unsigned long, nano>{3};\r\n        assert(oss.str() == \"3ns\");\r\n    }\r\n    {\r\n        ostringstream oss;\r\n        oss << duration<long, nano>{-3};\r\n        assert(oss.str() == \"-3ns\");\r\n    }\r\n\r\n    // format calls abs under the hood when needed, this would be rejected before fix.\r\n    assert(format(\"{}\", duration<long, nano>{-3}) == \"-3ns\");\r\n    assert(format(\"{}\", duration<unsigned long, nano>{3}) == \"3ns\");\r\n    assert(format(\"{:%Q}\", duration<unsigned long, nano>{3}) == \"3\");\r\n}\r\n\r\nvoid test() {\r\n    test_unsigned_sys_time_format_after_LWG_4274();\r\n    test_format_duration_with_unsigned_rep();\r\n\r\n    check_stream_insertion_operator();\r\n\r\n    test_parse_conversion_spec<char>();\r\n    test_parse_conversion_spec<wchar_t>();\r\n\r\n    test_parse_chrono_format_specs<char>();\r\n    test_parse_chrono_format_specs<wchar_t>();\r\n\r\n    test_duration_formatter<char>();\r\n    test_duration_formatter<wchar_t>();\r\n\r\n    test_clock_formatter<char>();\r\n    test_clock_formatter<wchar_t>();\r\n\r\n    test_day_formatter<char>();\r\n    test_day_formatter<wchar_t>();\r\n\r\n    test_month_formatter<char>();\r\n    test_month_formatter<wchar_t>();\r\n\r\n    test_year_formatter<char>();\r\n    test_year_formatter<wchar_t>();\r\n\r\n    test_weekday_formatter<char>();\r\n    test_weekday_formatter<wchar_t>();\r\n\r\n    test_weekday_indexed_formatter<char>();\r\n    test_weekday_indexed_formatter<wchar_t>();\r\n\r\n    test_weekday_last_formatter<char>();\r\n    test_weekday_last_formatter<wchar_t>();\r\n\r\n    test_month_day_formatter<char>();\r\n    test_month_day_formatter<wchar_t>();\r\n\r\n    test_month_day_last_formatter<char>();\r\n    test_month_day_last_formatter<wchar_t>();\r\n\r\n    test_month_weekday_formatter<char>();\r\n    test_month_weekday_formatter<wchar_t>();\r\n\r\n    test_month_weekday_last_formatter<char>();\r\n    test_month_weekday_last_formatter<wchar_t>();\r\n\r\n    test_year_month_formatter<char>();\r\n    test_year_month_formatter<wchar_t>();\r\n\r\n    test_year_month_day_formatter<char>();\r\n    test_year_month_day_formatter<wchar_t>();\r\n\r\n    test_year_month_day_last_formatter<char>();\r\n    test_year_month_day_last_formatter<wchar_t>();\r\n\r\n    test_year_month_weekday_formatter<char>();\r\n    test_year_month_weekday_formatter<wchar_t>();\r\n\r\n    test_year_month_weekday_last_formatter<char>();\r\n    test_year_month_weekday_last_formatter<wchar_t>();\r\n\r\n    test_hh_mm_ss_formatter<char>();\r\n    test_hh_mm_ss_formatter<wchar_t>();\r\n\r\n    test_exception_classes();\r\n\r\n    test_information_classes<char>();\r\n    test_information_classes<wchar_t>();\r\n\r\n    test_local_time_format_formatter<char>();\r\n    test_local_time_format_formatter<wchar_t>();\r\n\r\n    test_zoned_time_formatter<char>();\r\n    test_zoned_time_formatter<wchar_t>();\r\n\r\n#if !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n    test_locale<wchar_t>();\r\n    test_locale<char>();\r\n    assert(setlocale(LC_ALL, \".UTF-8\") != nullptr);\r\n    test_locale<char>();\r\n#endif // !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n}\r\n\r\nint main() {\r\n    run_tz_test([] { test(); });\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_hms/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_hms/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <cstdint>\r\n#include <ratio>\r\n#include <type_traits>\r\n\r\n// Extended to test LWG-4274 \"The chrono::hh_mm_ss constructor is ill-formed for unsigned durations\"\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\n\r\nusing hms_hours   = hh_mm_ss<hours>;\r\nusing f_hours     = duration<float, ratio<3600>>;\r\nusing f_hms_hours = hh_mm_ss<f_hours>;\r\n\r\nconstexpr void am_pm() {\r\n    static_assert(noexcept(is_am(hours{})));\r\n    static_assert(noexcept(is_pm(hours{})));\r\n\r\n    for (hours i = 0h; i < 12h; ++i) {\r\n        assert(is_am(i));\r\n        assert(!is_pm(i));\r\n    }\r\n    for (hours i = 12h; i < 24h; ++i) {\r\n        assert(!is_am(i));\r\n        assert(is_pm(i));\r\n    }\r\n}\r\n\r\nconstexpr void make12_24() {\r\n    static_assert(noexcept(make12(hours{})));\r\n    static_assert(noexcept(make24(hours{}, true)));\r\n\r\n    assert(make12(1h) == 1h);\r\n    assert(make12(13h) == 1h);\r\n    assert(make12(0h) == 12h);\r\n    assert(make12(12h) == 12h);\r\n\r\n    assert(make24(12h, true) == 12h);\r\n    assert(make24(12h, false) == 0h);\r\n    assert(make24(5h, true) == 17h);\r\n    assert(make24(5h, false) == 5h);\r\n}\r\n\r\ntemplate <class D>\r\nconstexpr auto width() {\r\n    return hh_mm_ss<D>::fractional_width;\r\n}\r\ntemplate <class T, intmax_t N, intmax_t D>\r\nconstexpr auto width() {\r\n    return hh_mm_ss<duration<T, ratio<N, D>>>::fractional_width;\r\n}\r\n\r\nconstexpr void fractional_width() {\r\n    static_assert(width<days>() == 0);\r\n    static_assert(width<hours>() == 0);\r\n    static_assert(width<minutes>() == 0);\r\n    static_assert(width<seconds>() == 0);\r\n    static_assert(width<milliseconds>() == 3);\r\n    static_assert(width<microseconds>() == 6);\r\n    static_assert(width<nanoseconds>() == 9);\r\n\r\n    static_assert(width<int, 1, 2>() == 1);\r\n    static_assert(width<int, 1, 3>() == 6);\r\n    static_assert(width<int, 1, 4>() == 2);\r\n    static_assert(width<int, 1, 5>() == 1);\r\n    static_assert(width<int, 1, 6>() == 6);\r\n    static_assert(width<int, 1, 7>() == 6);\r\n    static_assert(width<int, 1, 8>() == 3);\r\n    static_assert(width<int, 1, 9>() == 6);\r\n    static_assert(width<int, 1, 10>() == 1);\r\n    static_assert(width<int, 756, 625>() == 4);\r\n    static_assert(width<int, 3780, 625>() == 3);\r\n    static_assert(width<int, 1, 400000000000000000LL>() == 6);\r\n    // static_assert(width<int, 1, 2000000000000000000LL>() == 6); overflows\r\n\r\n    static_assert(width<float, 1, 2>() == 1);\r\n    static_assert(width<float, 1, 3>() == 6);\r\n    static_assert(width<float, 1, 4>() == 2);\r\n    static_assert(width<float, 1, 5>() == 1);\r\n    static_assert(width<float, 1, 6>() == 6);\r\n    static_assert(width<float, 1, 7>() == 6);\r\n    static_assert(width<float, 1, 8>() == 3);\r\n    static_assert(width<float, 1, 9>() == 6);\r\n    static_assert(width<float, 1, 10>() == 1);\r\n    static_assert(width<float, 756, 625>() == 4);\r\n    static_assert(width<float, 3780, 625>() == 3);\r\n    static_assert(width<float, 1, 400000000000000000LL>() == 6);\r\n    // static_assert(width<float, 1, 2000000000000000000LL>() == 6); overflows\r\n}\r\n\r\nconstexpr void constructor() {\r\n    static_assert(noexcept(hms_hours{}));\r\n    static_assert(noexcept(f_hms_hours{}));\r\n\r\n    assert(hms_hours{}.hours() == hms_hours{hours::zero()}.hours());\r\n    assert(hms_hours{}.minutes() == hms_hours{hours::zero()}.minutes());\r\n    assert(hms_hours{}.seconds() == hms_hours{hours::zero()}.seconds());\r\n    assert(hms_hours{}.subseconds() == hms_hours{hours::zero()}.subseconds());\r\n\r\n    assert(f_hms_hours{}.hours() == f_hms_hours{hours::zero()}.hours());\r\n    assert(f_hms_hours{}.minutes() == f_hms_hours{hours::zero()}.minutes());\r\n    assert(f_hms_hours{}.seconds() == f_hms_hours{hours::zero()}.seconds());\r\n    assert(f_hms_hours{}.subseconds() == f_hms_hours{hours::zero()}.subseconds());\r\n}\r\n\r\n// Test LWG-4274 \"The chrono::hh_mm_ss constructor is ill-formed for unsigned durations\"\r\nconstexpr void constructor_unsigned_durations() {\r\n    {\r\n        duration<unsigned long long, milli> unsigned_duration{37 + 1000 * (7 + 4 * 60 + 3 * 3600)};\r\n        hh_mm_ss a{unsigned_duration};\r\n        assert(!a.is_negative());\r\n        assert(a.hours() == 3h);\r\n        assert(a.minutes() == 4min);\r\n        assert(a.seconds() == 7s);\r\n        assert(a.subseconds() == 37ms);\r\n    }\r\n\r\n    {\r\n        // Reproducing example from GH-5569 \"<chrono>: Cannot construct an hh_mm_ss object from an unsigned duration\"\r\n        duration<uint32_t> dur{1};\r\n        hh_mm_ss hms{dur};\r\n        assert(!hms.is_negative());\r\n        assert(hms.seconds() == 1s);\r\n    }\r\n}\r\n\r\nconstexpr void is_negative() {\r\n    static_assert(noexcept(hms_hours{}.is_negative()));\r\n    static_assert(noexcept(f_hms_hours{}.is_negative()));\r\n\r\n    assert(hh_mm_ss<days>(days{-1}).is_negative());\r\n    assert(!hh_mm_ss<days>(days{1}).is_negative());\r\n\r\n    assert(hh_mm_ss<hours>{-1h}.is_negative());\r\n    assert(!hh_mm_ss<hours>{1h}.is_negative());\r\n\r\n    assert(hh_mm_ss<minutes>{-1min}.is_negative());\r\n    assert(!hh_mm_ss<minutes>{1min}.is_negative());\r\n\r\n    assert(hh_mm_ss<seconds>{-1s}.is_negative());\r\n    assert(!hh_mm_ss<seconds>{1s}.is_negative());\r\n\r\n    assert(hh_mm_ss<milliseconds>{-1ms}.is_negative());\r\n    assert(!hh_mm_ss<milliseconds>{1ms}.is_negative());\r\n\r\n    assert(hh_mm_ss<microseconds>{-1us}.is_negative());\r\n    assert(!hh_mm_ss<microseconds>{1us}.is_negative());\r\n\r\n    assert(hh_mm_ss<nanoseconds>{-1ns}.is_negative());\r\n    assert(!hh_mm_ss<nanoseconds>{1ns}.is_negative());\r\n\r\n    assert(f_hms_hours{f_hours{-1.f}}.is_negative());\r\n    assert(!f_hms_hours{f_hours{1.f}}.is_negative());\r\n}\r\n\r\nconstexpr auto ones = 1h + 1min + 1s + 1ms;\r\n\r\nconstexpr void hour() {\r\n    static_assert(noexcept(hms_hours{}.hours()));\r\n    static_assert(noexcept(f_hms_hours{}.hours()));\r\n\r\n    assert(hh_mm_ss(days{1}).hours() == 24h);\r\n    assert(hh_mm_ss(ones).hours() == 1h);\r\n    assert(hh_mm_ss(-ones).hours() == 1h);\r\n    assert(hh_mm_ss(59min).hours() == 0h);\r\n    assert(f_hms_hours{f_hours{1.f}}.hours() == 1h);\r\n}\r\n\r\nconstexpr void mins() {\r\n    static_assert(noexcept(hms_hours{}.minutes()));\r\n    static_assert(noexcept(f_hms_hours{}.minutes()));\r\n\r\n    assert(hh_mm_ss(ones).minutes() == 1min);\r\n    assert(hh_mm_ss(-ones).minutes() == 1min);\r\n    assert(hh_mm_ss(59s).minutes() == 0min);\r\n    assert(f_hms_hours{f_hours{0.0166667f}}.minutes() == 1min);\r\n}\r\n\r\nconstexpr void secs() {\r\n    static_assert(noexcept(hms_hours{}.seconds()));\r\n    static_assert(noexcept(f_hms_hours{}.seconds()));\r\n\r\n    assert(hh_mm_ss(ones).seconds() == 1s);\r\n    assert(hh_mm_ss(-ones).seconds() == 1s);\r\n    assert(hh_mm_ss(999ms).seconds() == 0s);\r\n    assert(f_hms_hours{f_hours{0.000277778f}}.seconds() == 1s);\r\n}\r\n\r\nconstexpr void subsecs() {\r\n    static_assert(noexcept(hms_hours{}.subseconds()));\r\n    static_assert(noexcept(f_hms_hours{}.subseconds()));\r\n\r\n    assert(hh_mm_ss(ones).subseconds() == 1ms);\r\n    assert(hh_mm_ss(-ones).subseconds() == 1ms);\r\n    assert(hh_mm_ss(999us).subseconds() == 999us);\r\n    assert(hh_mm_ss(duration_cast<milliseconds>(999us)).subseconds() == 0ms);\r\n    using f_hms_milli = hh_mm_ss<duration<float, milli>>;\r\n    assert(f_hms_milli{1ms}.subseconds() == 1ms);\r\n}\r\n\r\nconstexpr void to_duration() {\r\n    using precision   = hms_hours::precision;\r\n    using f_precision = f_hms_hours::precision;\r\n\r\n    static_assert(noexcept(hms_hours{}.to_duration()));\r\n    static_assert(noexcept(static_cast<precision>(hms_hours{})));\r\n    static_assert(noexcept(f_hms_hours{}.to_duration()));\r\n    static_assert(noexcept(static_cast<f_precision>(f_hms_hours{})));\r\n\r\n    assert(hh_mm_ss(ones).to_duration() == ones);\r\n    assert(hh_mm_ss(-ones).to_duration() == -ones);\r\n    assert(f_hms_hours{f_hours{1.f}}.to_duration() == 1h);\r\n    assert(f_hms_hours{f_hours{-1.f}}.to_duration() == -1h);\r\n\r\n    hh_mm_ss<milliseconds> hms(50ms);\r\n    milliseconds milli_val = static_cast<milliseconds>(hms);\r\n    static_assert(is_same_v<decltype(hms.to_duration()), milliseconds>);\r\n    assert(hms.to_duration() == milli_val);\r\n\r\n    f_hms_hours fhms{f_hours{1}};\r\n    auto fhours_val = static_cast<f_precision>(fhms);\r\n    static_assert(is_same_v<decltype(fhms.to_duration()), f_precision>);\r\n    static_assert(is_same_v<duration<float>, f_precision>);\r\n    assert(fhms.to_duration() == fhours_val);\r\n}\r\n\r\nconstexpr bool test() {\r\n    am_pm();\r\n    make12_24();\r\n    fractional_width();\r\n    constructor();\r\n    constructor_unsigned_durations();\r\n    is_negative();\r\n    hour();\r\n    mins();\r\n    secs();\r\n    subsecs();\r\n    to_duration();\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test();\r\n    static_assert(test());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_io/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_io/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <charconv>\r\n#include <chrono>\r\n#include <cstdint>\r\n#include <istream>\r\n#include <iterator>\r\n#include <limits>\r\n#include <locale>\r\n#include <ratio>\r\n#include <sstream>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <timezone_data.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\n\r\nconstexpr auto intmax_max = numeric_limits<intmax_t>::max();\r\n\r\ntemplate <class CharT, class Rep, class Period>\r\nbool test_duration_basic_out(const duration<Rep, Period>& d, const CharT* expected) {\r\n    basic_ostringstream<CharT> ss;\r\n\r\n    ss << d;\r\n    return ss.str() == expected;\r\n}\r\n\r\n#define WIDEN(TYPE, STR) get<const TYPE*>(pair{STR, L##STR})\r\n\r\ntemplate <class CharT>\r\nbool test_duration_locale_out() {\r\n    basic_stringstream<CharT> ss;\r\n    const duration<double> d{0.140625};\r\n    ss.precision(3);\r\n    ss << d;\r\n    ss.setf(ios_base::scientific, ios_base::floatfield);\r\n    ss << ' ' << d;\r\n\r\n    basic_string<CharT> expected = WIDEN(CharT, \"0.141s 1.406e-01s\");\r\n\r\n#ifdef _DEBUG\r\n#define DEFAULT_IDL_SETTING 2\r\n#else\r\n#define DEFAULT_IDL_SETTING 0\r\n#endif\r\n\r\n#if !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n    // When linking dynamically, user-defined facets are incompatible with non-default _ITERATOR_DEBUG_LEVEL settings.\r\n    struct comma : numpunct<CharT> {\r\n        CharT do_decimal_point() const {\r\n            return ',';\r\n        }\r\n    };\r\n\r\n    ss.imbue(locale(ss.getloc(), new comma));\r\n    ss << ' ' << d;\r\n    expected += WIDEN(CharT, \" 1,406e-01s\");\r\n#endif // !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n\r\n    return ss.str() == expected;\r\n}\r\n\r\nvoid test_duration_output() {\r\n    using LongRatio = ratio<intmax_max - 1, intmax_max>;\r\n    assert(test_duration_basic_out(duration<int, atto>{1}, \"1as\"));\r\n    assert(test_duration_basic_out(duration<int, femto>{2}, \"2fs\"));\r\n    assert(test_duration_basic_out(duration<int, pico>{3}, \"3ps\"));\r\n    assert(test_duration_basic_out(duration<int, nano>{42}, \"42ns\"));\r\n    assert(test_duration_basic_out(duration<int, micro>{42}, \"42us\"));\r\n    assert(test_duration_basic_out(duration<int, milli>{42}, \"42ms\"));\r\n    assert(test_duration_basic_out(duration<int, centi>{42}, \"42cs\"));\r\n    assert(test_duration_basic_out(duration<int, deci>{42}, \"42ds\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<1>>{42}, \"42s\"));\r\n    assert(test_duration_basic_out(duration<int, deca>{42}, \"42das\"));\r\n    assert(test_duration_basic_out(duration<int, hecto>{42}, \"42hs\"));\r\n    assert(test_duration_basic_out(duration<int, kilo>{42}, \"42ks\"));\r\n    assert(test_duration_basic_out(duration<int, mega>{42}, \"42Ms\"));\r\n    assert(test_duration_basic_out(duration<int, giga>{42}, \"42Gs\"));\r\n    assert(test_duration_basic_out(duration<int, tera>{42}, \"42Ts\"));\r\n    assert(test_duration_basic_out(duration<int, peta>{42}, \"42Ps\"));\r\n    assert(test_duration_basic_out(duration<int, exa>{42}, \"42Es\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<60>>{42}, \"42min\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<60 * 60>>{42}, \"42h\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<60 * 60 * 24>>{42}, \"42d\"));\r\n\r\n    assert(test_duration_basic_out(duration<int, ratio<2>>{24}, \"24[2]s\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<3, 1>>{24}, \"24[3]s\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<3, 7>>{24}, \"24[3/7]s\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<1, 2>>{24}, \"24[1/2]s\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<22, 7>>{24}, \"24[22/7]s\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<53, 101>>{24}, \"24[53/101]s\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<201, 2147483647>>{24}, \"24[201/2147483647]s\"));\r\n    assert(test_duration_basic_out(duration<int, LongRatio>{24}, \"24[9223372036854775806/9223372036854775807]s\"));\r\n\r\n    assert(test_duration_basic_out(duration<double>{0.140625}, \"0.140625s\"));\r\n    assert(test_duration_locale_out<char>());\r\n\r\n    assert(test_duration_basic_out(duration<int, atto>{1}, L\"1as\"));\r\n    assert(test_duration_basic_out(duration<int, femto>{2}, L\"2fs\"));\r\n    assert(test_duration_basic_out(duration<int, pico>{3}, L\"3ps\"));\r\n    assert(test_duration_basic_out(duration<int, nano>{42}, L\"42ns\"));\r\n    assert(test_duration_basic_out(duration<int, micro>{42}, L\"42us\"));\r\n    assert(test_duration_basic_out(duration<int, milli>{42}, \"42ms\"));\r\n    assert(test_duration_basic_out(duration<int, centi>{42}, L\"42cs\"));\r\n    assert(test_duration_basic_out(duration<int, deci>{42}, L\"42ds\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<1>>{42}, L\"42s\"));\r\n    assert(test_duration_basic_out(duration<int, deca>{42}, L\"42das\"));\r\n    assert(test_duration_basic_out(duration<int, hecto>{42}, L\"42hs\"));\r\n    assert(test_duration_basic_out(duration<int, kilo>{42}, L\"42ks\"));\r\n    assert(test_duration_basic_out(duration<int, mega>{42}, L\"42Ms\"));\r\n    assert(test_duration_basic_out(duration<int, giga>{42}, L\"42Gs\"));\r\n    assert(test_duration_basic_out(duration<int, tera>{42}, L\"42Ts\"));\r\n    assert(test_duration_basic_out(duration<int, peta>{42}, L\"42Ps\"));\r\n    assert(test_duration_basic_out(duration<int, exa>{42}, L\"42Es\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<60>>{42}, L\"42min\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<60 * 60>>{42}, L\"42h\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<60 * 60 * 24>>{42}, L\"42d\"));\r\n\r\n    assert(test_duration_basic_out(duration<int, ratio<2>>{24}, L\"24[2]s\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<3, 1>>{24}, L\"24[3]s\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<3, 7>>{24}, L\"24[3/7]s\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<1, 2>>{24}, L\"24[1/2]s\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<22, 7>>{24}, L\"24[22/7]s\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<53, 101>>{24}, L\"24[53/101]s\"));\r\n    assert(test_duration_basic_out(duration<int, ratio<201, 2147483647>>{24}, L\"24[201/2147483647]s\"));\r\n    assert(test_duration_basic_out(duration<int, LongRatio>{24}, L\"24[9223372036854775806/9223372036854775807]s\"));\r\n\r\n    assert(test_duration_basic_out(duration<double>{0.140625}, L\"0.140625s\"));\r\n    assert(test_duration_locale_out<wchar_t>());\r\n}\r\n\r\n\r\ntemplate <class CharT, class CStringOrStdString, class Parsable>\r\nios_base::iostate parse_state(const CharT* str, const CStringOrStdString& fmt, Parsable& p,\r\n    type_identity_t<basic_string<CharT>*> abbrev = nullptr, minutes* offset = nullptr) {\r\n    p = Parsable{};\r\n    if (abbrev) {\r\n        if constexpr (is_same_v<CharT, char>) {\r\n            *abbrev = \"!\";\r\n        } else {\r\n            *abbrev = L\"!\";\r\n        }\r\n    }\r\n\r\n    if (offset) {\r\n        *offset = minutes::min();\r\n    }\r\n\r\n    basic_stringstream<CharT> sstr{str};\r\n    if (abbrev) {\r\n        if (offset) {\r\n            sstr >> parse(fmt, p, *abbrev, *offset);\r\n        } else {\r\n            sstr >> parse(fmt, p, *abbrev);\r\n        }\r\n    } else {\r\n        if (offset) {\r\n            sstr >> parse(fmt, p, *offset);\r\n        } else {\r\n            sstr >> parse(fmt, p);\r\n        }\r\n    }\r\n\r\n    return sstr.rdstate();\r\n}\r\n\r\ntemplate <class CharT, class CStringOrStdString, class Parsable>\r\nvoid test_parse(const CharT* str, const CStringOrStdString& fmt, Parsable& p,\r\n    type_identity_t<basic_string<CharT>*> abbrev = nullptr, minutes* offset = nullptr) {\r\n    assert((parse_state(str, fmt, p, abbrev, offset) & ~ios_base::eofbit) == ios_base::goodbit);\r\n}\r\n\r\ntemplate <class CharT, class CStringOrStdString, class Parsable>\r\nvoid fail_parse(const CharT* str, const CStringOrStdString& fmt, Parsable& p,\r\n    type_identity_t<basic_string<CharT>*> abbrev = nullptr, minutes* offset = nullptr) {\r\n    assert((parse_state(str, fmt, p, abbrev, offset) & ~ios_base::eofbit) != ios_base::goodbit);\r\n}\r\n\r\ntemplate <class TimeType, class IntType = int>\r\nvoid test_limits(const char* flag, const IntType min, const IntType max) {\r\n    char buffer[24];\r\n    TimeType value;\r\n    auto conv_result = to_chars(begin(buffer), end(buffer), static_cast<make_signed_t<IntType>>(min) - 1);\r\n    assert(conv_result.ec == errc{} && conv_result.ptr != end(buffer));\r\n    *conv_result.ptr = '\\0';\r\n    fail_parse(buffer, flag, value);\r\n    conv_result = to_chars(begin(buffer), end(buffer), max + 1);\r\n    assert(conv_result.ec == errc{} && conv_result.ptr != end(buffer));\r\n    *conv_result.ptr = '\\0';\r\n    fail_parse(buffer, flag, value);\r\n\r\n    conv_result = to_chars(begin(buffer), end(buffer), min);\r\n    assert(conv_result.ec == errc{} && conv_result.ptr != end(buffer));\r\n    *conv_result.ptr = '\\0';\r\n    test_parse(buffer, flag, value);\r\n    assert(value == TimeType{min});\r\n    conv_result = to_chars(begin(buffer), end(buffer), max);\r\n    assert(conv_result.ec == errc{} && conv_result.ptr != end(buffer));\r\n    *conv_result.ptr = '\\0';\r\n    test_parse(buffer, flag, value);\r\n    assert(value == TimeType{max});\r\n}\r\n\r\nvoid test_lwg_3536() {\r\n    // LWG-3536, \"Should chrono::from_stream() assign zero to duration for failure?\"\r\n    minutes mm{20};\r\n\r\n    {\r\n        istringstream iss{\"2:2:30\"};\r\n        iss >> parse(\"%H:%M:%S\", mm);\r\n        assert(iss.fail() && mm == 20min);\r\n    }\r\n\r\n    {\r\n        istringstream iss{\"June\"};\r\n        iss >> parse(\"%B\", mm);\r\n        assert(iss.fail() && mm == 20min);\r\n    }\r\n\r\n    {\r\n        istringstream iss{\"\"};\r\n        iss >> parse(\"%B\", mm);\r\n        assert(iss.fail() && mm == 20min);\r\n    }\r\n}\r\n\r\nvoid parse_seconds() {\r\n    seconds time;\r\n    test_parse(\"1\", \"%S\", time);\r\n    assert(time == 1s);\r\n    test_parse(\"12\", \"%S\", time);\r\n    assert(time == 12s);\r\n    test_parse(\"234\", \"%S4\", time);\r\n    assert(time == 23s);\r\n    test_parse(\"0345\", \"%3S5\", time);\r\n    assert(time == 34s);\r\n    test_parse(\" 456\", \"%3S6\", time);\r\n    assert(time == 45s);\r\n    test_parse(\"99\", \"%S\", time); // not out-of-range for duration\r\n    assert(time == 99s);\r\n\r\n    milliseconds time_ms;\r\n    test_parse(\"12.543\", \"%S\", time_ms);\r\n    assert(time_ms == 12s + 543ms);\r\n    assert(time_ms == seconds{12} + milliseconds{543});\r\n    test_parse(\"01.234\", \"%S\", time_ms);\r\n    assert(time_ms == 1'234ms);\r\n    test_parse(\" 1.234\", \"%S\", time_ms);\r\n    assert(time_ms == 1'234ms);\r\n    test_parse(\"1.234\", \"%S\", time_ms);\r\n    assert(time_ms == 1'234ms);\r\n    test_parse(\"1. 234\", \"%S 234\", time_ms); // Flag should consume \"1.\".\r\n    assert(time_ms == 1s);\r\n    test_parse(\"1 .234\", \"%S .234\", time_ms); // Flag should consume \"1\".\r\n    assert(time_ms == 1s);\r\n    test_parse(\"12..345\", \"%S.345\", time_ms); // Flag should consume \"12.\".\r\n    assert(time_ms == 12s);\r\n    fail_parse(\"1.2345\", \"%6S\", time_ms); // would truncate\r\n    test_parse(\"1.2340\", \"%6S\", time_ms);\r\n    assert(time_ms == 1'234ms);\r\n\r\n    duration<int64_t, atto> time_atto;\r\n    test_parse(\"0.400000000000000002\", \"%S\", time_atto);\r\n    assert((time_atto == duration<int64_t, deci>{4} + duration<int64_t, atto>{2}));\r\n\r\n    duration<float, ratio<1, 25>> time_float;\r\n    test_parse(\"0.33\", \"%S\", time_float);\r\n    assert((time_float == duration<float, ratio<1, 25>>{8.25f}));\r\n\r\n    fail_parse(\"1.2 1.3\", \"%S %S\", time_ms);\r\n    fail_parse(\"1.2 2.2\", \"%S %S\", time_ms);\r\n}\r\n\r\nvoid parse_minutes() {\r\n    seconds time;\r\n    test_parse(\"1\", \"%M\", time);\r\n    assert(time == 1min);\r\n    test_parse(\"12\", \"%M\", time);\r\n    assert(time == 12min);\r\n    test_parse(\"234\", \"%M4\", time);\r\n    assert(time == 23min);\r\n    test_parse(\"0345\", \"%3M5\", time);\r\n    assert(time == 34min);\r\n    test_parse(\" 456\", \"%3M6\", time);\r\n    assert(time == 45min);\r\n    test_parse(\"99\", \"%M\", time); // not out-of-range for duration\r\n    assert(time == 99min);\r\n}\r\n\r\nvoid parse_hours() {\r\n    seconds time;\r\n\r\n    fail_parse(\"0\", \"%I\", time);\r\n    test_parse(\"1\", \"%I\", time);\r\n    assert(time == 1h);\r\n    test_parse(\"11\", \"%I\", time);\r\n    assert(time == 11h);\r\n    test_parse(\"12\", \"%I\", time); // assumes a.m.\r\n    assert(time == 0h);\r\n    fail_parse(\"13\", \"%I\", time);\r\n\r\n    fail_parse(\"0\", \"%OI\", time);\r\n    test_parse(\"1\", \"%OI\", time);\r\n    assert(time == 1h);\r\n    test_parse(\"11\", \"%OI\", time);\r\n    assert(time == 11h);\r\n    test_parse(\"12\", \"%OI\", time); // assumes a.m.\r\n    assert(time == 0h);\r\n    fail_parse(\"13\", \"%OI\", time);\r\n\r\n    test_parse(\"110\", \"%I0\", time);\r\n    assert(time == 11h);\r\n    test_parse(\"0011\", \"%3I1\", time);\r\n    assert(time == 1h);\r\n    test_parse(\"010\", \"%4I\", time);\r\n    assert(time == 10h);\r\n    test_parse(\" 12\", \"%4I\", time);\r\n    assert(time == 0h); // assumes A.M. with no %p flag\r\n\r\n    test_parse(\"1\", \"%H\", time);\r\n    assert(time == 1h);\r\n    test_parse(\"12\", \"%H\", time);\r\n    assert(time == 12h);\r\n    test_parse(\"234\", \"%H4\", time);\r\n    assert(time == 23h);\r\n    test_parse(\"0123\", \"%3H3\", time);\r\n    assert(time == 12h);\r\n    test_parse(\" 234\", \"%3H4\", time);\r\n    assert(time == 23h);\r\n    test_parse(\"30\", \"%H\", time); // not out-of-range for duration\r\n    assert(time == 30h);\r\n\r\n    // any permutation of %I, %p, and %H should be valid, as long as they're consistent\r\n    test_parse(\"8 pm 20\", \"%I %p %H\", time);\r\n    assert(time == 20h);\r\n    test_parse(\"8 20 pm\", \"%I %H %p\", time);\r\n    assert(time == 20h);\r\n    test_parse(\"pm 8 20\", \"%p %I %H\", time);\r\n    assert(time == 20h);\r\n    test_parse(\"pm 20 8\", \"%p %H %I\", time);\r\n    assert(time == 20h);\r\n    test_parse(\"20 pm 8\", \"%H %p %I\", time);\r\n    assert(time == 20h);\r\n    test_parse(\"20 8 pm\", \"%H %I %p\", time);\r\n    assert(time == 20h);\r\n\r\n    // inconsistent\r\n    fail_parse(\"8 am 20\", \"%I %p %H\", time);\r\n    fail_parse(\"8 20 am\", \"%I %H %p\", time);\r\n    fail_parse(\"am 8 20\", \"%p %I %H\", time);\r\n    fail_parse(\"am 20 8\", \"%p %H %I\", time);\r\n    fail_parse(\"20 am 8\", \"%H %p %I\", time);\r\n    fail_parse(\"20 8 am\", \"%H %I %p\", time);\r\n}\r\n\r\nvoid parse_other_duration() {\r\n    seconds time;\r\n    test_parse(\"42\", \"%j\", time);\r\n    assert(time == days{42});\r\n    duration<int32_t, micro> time_micro; // maximum ~35.8 minutes\r\n    fail_parse(\"1\", \"%j\", time_micro);\r\n    test_parse(\"400\", \"%j\", time);\r\n    assert(time == days{400}); // not out-of-range for duration\r\n\r\n    test_parse(\" 1:23:42\", \"%T\", time);\r\n    assert(time == 1h + 23min + 42s);\r\n    test_parse(\"01:23:42\", \"%T\", time);\r\n    assert(time == 1h + 23min + 42s);\r\n\r\n    test_parse(\"11: 2:42\", \"%T\", time);\r\n    assert(time == 11h + 2min + 42s);\r\n    test_parse(\"11:02:42\", \"%T\", time);\r\n    assert(time == 11h + 2min + 42s);\r\n\r\n    test_parse(\"12:34: 4\", \"%T\", time);\r\n    assert(time == 12h + 34min + 4s);\r\n    test_parse(\"12:34:04\", \"%T\", time);\r\n    assert(time == 12h + 34min + 4s);\r\n    test_parse(\"00:34:04\", \"%T\", time);\r\n    assert(time == 34min + 4s);\r\n\r\n    milliseconds time_milli;\r\n    test_parse(\"12:34:56.789\", \"%T\", time_milli);\r\n    assert(time_milli == 12h + 34min + 56s + 789ms);\r\n\r\n    // locale's time representation %X (== \"%H : %M : %S\")\r\n    test_parse(\"12:34:04\", \"%X\", time);\r\n    assert(time == 12h + 34min + 4s);\r\n\r\n    // floating-point representations, parsing precision controlled by duration::period\r\n    duration<float, milli> df;\r\n    test_parse(\"9.125\", \"%S\", df);\r\n    assert(df.count() == 9125.0f);\r\n\r\n    duration<double, milli> dd;\r\n    test_parse(\"1.875\", \"%S\", dd);\r\n    assert(dd.count() == 1875.0);\r\n}\r\n\r\nvoid parse_time_zone() {\r\n    seconds time;\r\n    minutes offset;\r\n    test_parse(\"-0430\", \"%z\", time, nullptr, &offset);\r\n    assert(offset == -(4h + 30min));\r\n    test_parse(\"+0430\", \"%z\", time, nullptr, &offset);\r\n    assert(offset == (4h + 30min));\r\n    test_parse(\"0430\", \"%z\", time, nullptr, &offset);\r\n    assert(offset == (4h + 30min));\r\n    test_parse(\"11\", \"%z\", time, nullptr, &offset);\r\n    assert(offset == 11h);\r\n\r\n    fail_parse(\"4\", \"%z\", time, nullptr, &offset);\r\n    fail_parse(\"043\", \"%z\", time, nullptr, &offset);\r\n    fail_parse(\"!0430\", \"%z\", time, nullptr, &offset);\r\n\r\n    test_parse(\"-04:30\", \"%Ez\", time, nullptr, &offset);\r\n    assert(offset == -(4h + 30min));\r\n    test_parse(\"+04:30\", \"%Ez\", time, nullptr, &offset);\r\n    assert(offset == (4h + 30min));\r\n    test_parse(\"04:30\", \"%Ez\", time, nullptr, &offset);\r\n    assert(offset == (4h + 30min));\r\n    test_parse(\"4:30\", \"%Ez\", time, nullptr, &offset);\r\n    assert(offset == (4h + 30min));\r\n    test_parse(\"11\", \"%Ez\", time, nullptr, &offset);\r\n    assert(offset == 11h);\r\n    test_parse(\"4\", \"%Ez\", time, nullptr, &offset);\r\n    assert(offset == 4h);\r\n\r\n    fail_parse(\"!4\", \"%Ez\", time, nullptr, &offset);\r\n    // %Ez matches \"04\", leaving \"30\" in the stream.\r\n    fail_parse(\"0430 meow\", \"%Ez meow\", time, nullptr, &offset);\r\n    fail_parse(\"04:\", \"%Ez\", time, nullptr, &offset);\r\n    fail_parse(\"04:3\", \"%Ez\", time, nullptr, &offset);\r\n\r\n    string tz_name;\r\n    test_parse(\"UTC\", \"%Z\", time, &tz_name);\r\n    assert(tz_name == \"UTC\");\r\n    test_parse(\"Etc/GMT+11\", \"%Z\", time, &tz_name);\r\n    assert(tz_name == \"Etc/GMT+11\");\r\n    test_parse(\"Etc/GMT-4\", \"%Z\", time, &tz_name);\r\n    assert(tz_name == \"Etc/GMT-4\");\r\n    test_parse(\"Asia/Hong_Kong\", \"%Z\", time, &tz_name);\r\n    assert(tz_name == \"Asia/Hong_Kong\");\r\n\r\n    fail_parse(\"Not_valid! 00\", \"%Z %H\", time, &tz_name);\r\n    test_parse(\"Valid_Tz! 07\", \"%Z! %H\", time, &tz_name);\r\n    assert(tz_name == \"Valid_Tz\" && time == 7h);\r\n}\r\n\r\nvoid parse_calendar_types_basic() {\r\n    // basic day tests\r\n    day d;\r\n    test_parse(\"1\", \"%d\", d);\r\n    assert(d == day{1});\r\n    test_parse(\"23\", \"%d\", d);\r\n    assert(d == day{23});\r\n    test_parse(\"012\", \"%d2\", d);\r\n    assert(d == day{1});\r\n    test_parse(\" 23\", \"%d3\", d);\r\n    assert(d == day{2});\r\n\r\n    test_limits<day, unsigned int>(\"%d\", 1, 31);\r\n\r\n    test_parse(\"1\", \"%e\", d);\r\n    assert(d == day{1});\r\n    test_parse(\"23\", \"%e\", d);\r\n    assert(d == day{23});\r\n    test_parse(\"012\", \"%e2\", d);\r\n    assert(d == day{1});\r\n    test_parse(\" 23\", \"%e3\", d);\r\n    assert(d == day{2});\r\n\r\n    // basic weekday tests\r\n    weekday wd;\r\n\r\n    test_parse(\"Mon\", \"%a\", wd);\r\n    assert(wd == Monday);\r\n    test_parse(\"wedNesday\", \"%A\", wd);\r\n    assert(wd == Wednesday);\r\n\r\n    test_parse(\"1\", \"%w\", wd); // 0-based, Sunday=0\r\n    assert(wd == Monday);\r\n    test_parse(\"1\", \"%u\", wd); // ISO 1-based, Monday=1\r\n    assert(wd == Monday);\r\n    test_parse(\"7\", \"%u\", wd);\r\n    assert(wd == Sunday);\r\n\r\n    test_limits<weekday, unsigned int>(\"%w\", 0, 6);\r\n    test_limits<weekday, unsigned int>(\"%u\", 1, 7);\r\n\r\n    // basic month tests\r\n    month m;\r\n    test_parse(\"Apr\", \"%b\", m);\r\n    assert(m == April);\r\n    test_parse(\"deCeMbeR\", \"%b\", m);\r\n    assert(m == December);\r\n    test_parse(\"September\", \"%B\", m);\r\n    assert(m == September);\r\n    test_parse(\"February\", \"%h\", m);\r\n    assert(m == February);\r\n\r\n    test_parse(\"3\", \"%m\", m);\r\n    assert(m == March);\r\n    test_parse(\"11\", \"%m\", m);\r\n    assert(m == November);\r\n    test_parse(\"110\", \"%m0\", m);\r\n    assert(m == November);\r\n    test_parse(\"0011\", \"%3m1\", m);\r\n    assert(m == January);\r\n    test_parse(\"010\", \"%4m\", m);\r\n    assert(m == October);\r\n    test_parse(\" 12\", \"%4m\", m);\r\n    assert(m == December);\r\n\r\n    test_limits<month, unsigned int>(\"%m\", 1, 12);\r\n\r\n    // basic year tests\r\n    year y;\r\n    test_parse(\"1777\", \"%Y\", y);\r\n    assert(y == 1777y);\r\n    test_parse(\"07 17\", \"%y %C\", y);\r\n    assert(y == 1707y);\r\n    test_parse(\"18 077\", \"%C %3y\", y);\r\n    assert(y == 1877y);\r\n\r\n    // interpretation of two-digit year by itself\r\n    test_parse(\"00\", \"%y\", y);\r\n    assert(y == 2000y);\r\n    test_parse(\"68\", \"%y\", y);\r\n    assert(y == 2068y);\r\n    test_parse(\"69\", \"%y\", y);\r\n    assert(y == 1969y);\r\n    test_parse(\"99\", \"%y\", y);\r\n    assert(y == 1999y);\r\n\r\n    // negative century\r\n    test_parse(\"-1 5\", \"%C %y\", y);\r\n    assert(y == -95y);\r\n\r\n    // check consistency, or lack thereof\r\n    test_parse(\"1887 18 87\", \"%Y %C %y\", y);\r\n    assert(y == 1887y);\r\n    fail_parse(\"1888 18 87\", \"%Y %C %y\", y);\r\n    fail_parse(\"1887 19 87\", \"%Y %C %y\", y);\r\n    fail_parse(\"1887 18 88\", \"%Y %C %y\", y);\r\n\r\n    // basic month_day tests\r\n    month_day md;\r\n    test_parse(\"1 Jan 1\", \"%j %b %d\", md);\r\n    assert(md == January / 1d);\r\n    test_parse(\"32 Feb 1\", \"%j %b %d\", md);\r\n    assert(md == February / 1d);\r\n    test_parse(\"59 Feb 28\", \"%j %b %d\", md);\r\n    assert(md == February / 28d);\r\n    fail_parse(\"0\", \"%j\", md);\r\n    fail_parse(\"60\", \"%j\", md); // could be Feb 29 or Mar 1\r\n\r\n    test_parse(\"January 1\", \"%b %d\", md);\r\n    assert(md == January / 1d);\r\n    test_parse(\"January 31\", \"%b %d\", md);\r\n    assert(md == January / 31d);\r\n\r\n    test_parse(\"February 1\", \"%b %d\", md);\r\n    assert(md == February / 1d);\r\n    test_parse(\"February 29\", \"%b %d\", md);\r\n    assert(md == February / 29d);\r\n\r\n    test_parse(\"March 1\", \"%b %d\", md);\r\n    assert(md == March / 1d);\r\n    test_parse(\"March 31\", \"%b %d\", md);\r\n    assert(md == March / 31d);\r\n\r\n    test_parse(\"April 1\", \"%b %d\", md);\r\n    assert(md == April / 1d);\r\n    test_parse(\"April 30\", \"%b %d\", md);\r\n    assert(md == April / 30d);\r\n\r\n    test_parse(\"May 1\", \"%b %d\", md);\r\n    assert(md == May / 1d);\r\n    test_parse(\"May 31\", \"%b %d\", md);\r\n    assert(md == May / 31d);\r\n\r\n    test_parse(\"June 1\", \"%b %d\", md);\r\n    assert(md == June / 1d);\r\n    test_parse(\"June 30\", \"%b %d\", md);\r\n    assert(md == June / 30d);\r\n\r\n    test_parse(\"July 1\", \"%b %d\", md);\r\n    assert(md == July / 1d);\r\n    test_parse(\"July 31\", \"%b %d\", md);\r\n    assert(md == July / 31d);\r\n\r\n    test_parse(\"August 1\", \"%b %d\", md);\r\n    assert(md == August / 1d);\r\n    test_parse(\"August 31\", \"%b %d\", md);\r\n    assert(md == August / 31d);\r\n\r\n    test_parse(\"September 1\", \"%b %d\", md);\r\n    assert(md == September / 1d);\r\n    test_parse(\"September 30\", \"%b %d\", md);\r\n    assert(md == September / 30d);\r\n\r\n    test_parse(\"October 1\", \"%b %d\", md);\r\n    assert(md == October / 1d);\r\n    test_parse(\"October 31\", \"%b %d\", md);\r\n    assert(md == October / 31d);\r\n\r\n    test_parse(\"November 1\", \"%b %d\", md);\r\n    assert(md == November / 1d);\r\n    test_parse(\"November 30\", \"%b %d\", md);\r\n    assert(md == November / 30d);\r\n\r\n    test_parse(\"December 1\", \"%b %d\", md);\r\n    assert(md == December / 1d);\r\n    test_parse(\"December 31\", \"%b %d\", md);\r\n    assert(md == December / 31d);\r\n\r\n    // not ambiguous with year\r\n    year_month_day ymd;\r\n    test_parse(\"60 2004-02-29\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / February / 29);\r\n\r\n    // basic year_month_day tests\r\n    // different ways of specifying year\r\n    test_parse(\"12-01-1997\", \"%d-%m-%Y\", ymd);\r\n    assert(ymd == 12d / January / 1997y);\r\n    test_parse(\"12-01-19 97\", \"%d-%m-%C %y\", ymd);\r\n    assert(ymd == 12d / January / 1997y);\r\n    test_parse(\"12-01-97\", \"%d-%m-%y\", ymd);\r\n    assert(ymd == 12d / January / 1997y);\r\n\r\n    // basic %D test\r\n    test_parse(\"07/04/76 17\", \"%D %C\", ymd);\r\n    assert(ymd == July / 4d / 1776y);\r\n    // locale's date representation %x (== \"%d / %m / %y\")\r\n    test_parse(\"04/07/76 17\", \"%x %C\", ymd);\r\n    assert(ymd == 4d / July / 1776y);\r\n    test_parse(\"10/12/15 18\", \"%x %C\", ymd);\r\n    assert(ymd == 10d / December / 1815y);\r\n\r\n    // day-of-year tests, leap and non-leap years\r\n    test_parse(\"60 2001-03-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / March / 1d);\r\n    test_parse(\"61 2004-03-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / March / 1d);\r\n    test_parse(\"90 2001-03-31\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / March / last);\r\n    test_parse(\"91 2004-03-31\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / March / last);\r\n\r\n    test_parse(\"91 2001-04-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / April / 1d);\r\n    test_parse(\"92 2004-04-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / April / 1d);\r\n    test_parse(\"120 2001-04-30\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / April / last);\r\n    test_parse(\"121 2004-04-30\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / April / last);\r\n\r\n    test_parse(\"121 2001-05-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / May / 1d);\r\n    test_parse(\"122 2004-05-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / May / 1d);\r\n    test_parse(\"151 2001-05-31\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / May / last);\r\n    test_parse(\"152 2004-05-31\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / May / last);\r\n\r\n    test_parse(\"152 2001-06-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / June / 1d);\r\n    test_parse(\"153 2004-06-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / June / 1d);\r\n    test_parse(\"181 2001-06-30\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / June / last);\r\n    test_parse(\"182 2004-06-30\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / June / last);\r\n\r\n    test_parse(\"182 2001-07-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / July / 1d);\r\n    test_parse(\"183 2004-07-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / July / 1d);\r\n    test_parse(\"212 2001-07-31\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / July / last);\r\n    test_parse(\"213 2004-07-31\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / July / last);\r\n\r\n    test_parse(\"213 2001-08-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / August / 1d);\r\n    test_parse(\"214 2004-08-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / August / 1d);\r\n    test_parse(\"243 2001-08-31\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / August / last);\r\n    test_parse(\"244 2004-08-31\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / August / last);\r\n\r\n    test_parse(\"244 2001-09-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / September / 1d);\r\n    test_parse(\"245 2004-09-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / September / 1d);\r\n    test_parse(\"273 2001-09-30\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / September / last);\r\n    test_parse(\"274 2004-09-30\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / September / last);\r\n\r\n    test_parse(\"274 2001-10-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / October / 1d);\r\n    test_parse(\"275 2004-10-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / October / 1d);\r\n    test_parse(\"304 2001-10-31\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / October / last);\r\n    test_parse(\"305 2004-10-31\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / October / last);\r\n\r\n    test_parse(\"305 2001-11-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / November / 1d);\r\n    test_parse(\"306 2004-11-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / November / 1d);\r\n    test_parse(\"334 2001-11-30\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / November / last);\r\n    test_parse(\"335 2004-11-30\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / November / last);\r\n\r\n    test_parse(\"335 2001-12-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / December / 1d);\r\n    test_parse(\"336 2004-12-01\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / December / 1d);\r\n    test_parse(\"365 2001-12-31\", \"%j %F\", ymd);\r\n    assert(ymd == 2001y / December / last);\r\n    test_parse(\"366 2004-12-31\", \"%j %F\", ymd);\r\n    assert(ymd == 2004y / December / last);\r\n\r\n    test_parse(\"82 1882\", \"%j %Y\", ymd);\r\n    assert(ymd == 23d / March / 1882y);\r\n    fail_parse(\"366 2001\", \"%j %Y\", ymd);\r\n    fail_parse(\"367 2004\", \"%j %Y\", ymd);\r\n\r\n    // Check consistency between date and day-of-week\r\n    test_parse(\"Wed 2000-03-01\", \"%a %F\", ymd);\r\n    fail_parse(\"Mon 2000-03-01\", \"%a %F\", ymd);\r\n\r\n    // For %F, width is applied only to the year\r\n    test_parse(\"12345-06-07\", \"%5F\", ymd);\r\n    assert(ymd == 7d / June / 12345y);\r\n    fail_parse(\"12345-00006-07\", \"%5F\", ymd);\r\n    fail_parse(\"12345-06-00007\", \"%5F\", ymd);\r\n    fail_parse(\"12345-00006-00007\", \"%5F\", ymd);\r\n}\r\n\r\nvoid parse_iso_week_date() {\r\n    year_month_day ymd;\r\n    test_parse(\"2005-W52-6\", \"%G-W%V-%u\", ymd);\r\n    assert(ymd == 2005y / December / 31d);\r\n    test_parse(\"2005-W52-7\", \"%G-W%V-%u\", ymd);\r\n    assert(ymd == 2006y / January / 1d);\r\n    test_parse(\"2006-W01-1\", \"%G-W%V-%u\", ymd);\r\n    assert(ymd == 2006y / January / 2d);\r\n    fail_parse(\"2006-W00-1\", \"%G-W%V-%u\", ymd);\r\n\r\n    test_parse(\"2007-W52-7\", \"%G-W%V-%u\", ymd);\r\n    assert(ymd == 2007y / December / 30d);\r\n    test_parse(\"2008-W01-1\", \"%G-W%V-%u\", ymd);\r\n    assert(ymd == 2007y / December / 31d);\r\n    test_parse(\"2008-W01-2\", \"%G-W%V-%u\", ymd);\r\n    assert(ymd == 2008y / January / 1d);\r\n\r\n    fail_parse(\"05-W52-6\", \"%g-W%V-%u\", ymd); // no century\r\n\r\n    year_month_day ref{2005y / December / 31d};\r\n    fail_parse(\"2005-W52-6 19\", \"%G-W%V-%u %C\", ymd); // inconsistent century\r\n    test_parse(\"2005-W52-6 20\", \"%G-W%V-%u %C\", ymd); // consistent century\r\n    assert(ymd == ref);\r\n    test_parse(\"05-W52-6 20\", \"%g-W%V-%u %C\", ymd);\r\n    assert(ymd == ref);\r\n\r\n    fail_parse(\"2005-W52-6 2004\", \"%G-W%V-%u %Y\", ymd); // inconsistent year\r\n    test_parse(\"2005-W52-6 2005\", \"%G-W%V-%u %Y\", ymd); // consistent year\r\n    assert(ymd == ref);\r\n    test_parse(\"05-W52-6 2005\", \"%g-W%V-%u %Y\", ymd);\r\n    assert(ymd == ref);\r\n    test_parse(\"2005-W52-6 05\", \"%G-W%V-%u %y\", ymd);\r\n    assert(ymd == ref);\r\n    test_parse(\"05-W52-6 05\", \"%g-W%V-%u %y\", ymd);\r\n    assert(ymd == ref);\r\n\r\n    ref = 2007y / December / 31d;\r\n    fail_parse(\"2008-W01-1 2008\", \"%G-W%V-%u %Y\", ymd); // inconsistent year (!)\r\n    test_parse(\"2008-W01-1 2007\", \"%G-W%V-%u %Y\", ymd); // consistent year\r\n    assert(ymd == ref);\r\n    test_parse(\"08-W01-1 2007\", \"%g-W%V-%u %Y\", ymd);\r\n    assert(ymd == ref);\r\n    test_parse(\"2008-W01-1 07\", \"%G-W%V-%u %y\", ymd);\r\n    assert(ymd == ref);\r\n    test_parse(\"08-W01-1 07\", \"%g-W%V-%u %y\", ymd);\r\n    assert(ymd == ref);\r\n\r\n    // ISO and Gregorian years in different centuries\r\n    test_parse(\"1699-W53-5 1700\", \"%G-W%V-%u %Y\", ymd);\r\n    assert(ymd == 1d / January / 1700y);\r\n    fail_parse(\"1699-W54-5 1700\", \"%G-W%V-%u %Y\", ymd);\r\n    fail_parse(\"1699-W53-5 00\", \"%G-W%V-%u %y\", ymd); // inconsistent %y (== 2000)\r\n    fail_parse(\"99-W53-5 16 00\", \"%g-W%V-%u %C %y\", ymd); // inconsistent %C+%y year (== 1600)\r\n    fail_parse(\"99-W53-5 17 00\", \"%g-W%V-%u %C %y\", ymd); // inconsistent %C+%g ISO year (== 1700)\r\n\r\n    // This is expected to parse successfully. Even though %C+%g would give the wrong year,\r\n    // as above we don't try to use that for the ISO year when %G is present.\r\n    test_parse(\"1699 99-W53-5 17 00\", \"%G %g-W%V-%u %C %y\", ymd);\r\n    assert(ymd == 1d / January / 1700y);\r\n    fail_parse(\"1699 98-W53-5 17 00\", \"%G %g-W%V-%u %C %y\", ymd);\r\n}\r\n\r\nvoid parse_other_week_date() {\r\n    year_month_day ymd;\r\n    // Year begins on Sunday.\r\n    test_parse(\"2017-01-0\", \"%Y-%U-%w\", ymd);\r\n    assert(ymd == 2017y / January / 1d);\r\n    test_parse(\"2017-00-0\", \"%Y-%W-%w\", ymd);\r\n    assert(ymd == 2017y / January / 1d);\r\n    test_parse(\"2017-53-0\", \"%Y-%U-%w\", ymd);\r\n    assert(ymd == 2017y / December / 31d);\r\n\r\n    fail_parse(\"2017/-1/0\", \"%Y/%W/%w\", ymd);\r\n    fail_parse(\"2017/-1/0\", \"%Y/%U/%w\", ymd);\r\n    fail_parse(\"2017-54-0\", \"%Y-%W-%w\", ymd);\r\n    fail_parse(\"2017-54-0\", \"%Y-%U-%w\", ymd);\r\n    fail_parse(\"2018-00-0\", \"%Y-%U-%w\", ymd); // refers to 31 Dec. 2017\r\n    fail_parse(\"2017-53-1\", \"%Y-%U-%w\", ymd); // refers to 01 Jan. 2018\r\n\r\n    // Year begins on Monday.\r\n    test_parse(\"2018-00-1\", \"%Y-%U-%w\", ymd);\r\n    assert(ymd == 2018y / January / 1d);\r\n    test_parse(\"2018-01-1\", \"%Y-%W-%w\", ymd);\r\n    assert(ymd == 2018y / January / 1d);\r\n    test_parse(\"2018-53-1\", \"%Y-%W-%w\", ymd);\r\n    assert(ymd == 2018y / December / 31d);\r\n\r\n    // Year begins on Tuesday.\r\n    test_parse(\"2019-00-2\", \"%Y-%U-%w\", ymd);\r\n    assert(ymd == 2019y / January / 1d);\r\n    test_parse(\"2019-00-2\", \"%Y-%W-%w\", ymd);\r\n    assert(ymd == 2019y / January / 1d);\r\n\r\n    // Year begins on Wednesday.\r\n    test_parse(\"2020-00-3\", \"%Y-%U-%w\", ymd);\r\n    assert(ymd == 2020y / January / 1d);\r\n    test_parse(\"2020-00-3\", \"%Y-%W-%w\", ymd);\r\n    assert(ymd == 2020y / January / 1d);\r\n\r\n    // Year begins on Thursday.\r\n    test_parse(\"2015-00-4\", \"%Y-%U-%w\", ymd);\r\n    assert(ymd == 2015y / January / 1d);\r\n    test_parse(\"2015-00-4\", \"%Y-%W-%w\", ymd);\r\n    assert(ymd == 2015y / January / 1d);\r\n\r\n    // Year begins on Friday.\r\n    test_parse(\"2016-00-5\", \"%Y-%U-%w\", ymd);\r\n    assert(ymd == 2016y / January / 1d);\r\n    test_parse(\"2016-00-5\", \"%Y-%W-%w\", ymd);\r\n    assert(ymd == 2016y / January / 1d);\r\n\r\n    // Year begins on Saturday.\r\n    test_parse(\"2022-00-6\", \"%Y-%U-%w\", ymd);\r\n    assert(ymd == 2022y / January / 1d);\r\n    test_parse(\"2022-00-6\", \"%Y-%W-%w\", ymd);\r\n    assert(ymd == 2022y / January / 1d);\r\n}\r\n\r\nvoid parse_incomplete() {\r\n    // Parsing should fail if the input is insufficient to supply all fields of the format string, even if the input is\r\n    // sufficient to supply all fields of the parsable.\r\n    // Check both explicit and shorthand format strings, since the code path is different.\r\n    year_month ym;\r\n    assert(parse_state(\"2021-01\", \"%Y-%m-%d\", ym) == (ios_base::eofbit | ios_base::failbit));\r\n    assert(parse_state(\"2022-02\", \"%F\", ym) == (ios_base::eofbit | ios_base::failbit));\r\n    assert(parse_state(\"2021-\", \"%Y-%m-%d\", ym) == (ios_base::eofbit | ios_base::failbit));\r\n    assert(parse_state(\"2022-\", \"%F\", ym) == (ios_base::eofbit | ios_base::failbit));\r\n\r\n    seconds time;\r\n    fail_parse(\"01:59\", \"%H:%M:%S\", time);\r\n    fail_parse(\"03:23\", \"%T\", time);\r\n    fail_parse(\"04\", \"%R\", time);\r\n\r\n    // Check for parsing of whitespace fields after other fields.  More whitespace tests below.\r\n    test_parse(\"15:19\", \"%H:%M%t\", time);\r\n    test_parse(\"15:19\", \"%R%t\", time);\r\n    fail_parse(\"15:19\", \"%H:%M%n\", time);\r\n    fail_parse(\"15:19\", \"%R%n\", time);\r\n\r\n    // However, it is OK to omit seconds from the format when parsing a duration to seconds precision.\r\n    test_parse(\"05:24\", \"%H:%M\", time);\r\n    test_parse(\"06:25\", \"%R\", time);\r\n}\r\n\r\nvoid parse_whitespace() {\r\n    seconds time;\r\n    fail_parse(\"ab\", \"a%nb\", time);\r\n    test_parse(\"a b\", \"a%nb\", time);\r\n    fail_parse(\"a  b\", \"a%nb\", time);\r\n    fail_parse(\"a\", \"a%n\", time);\r\n    test_parse(\"a \", \"a%n\", time);\r\n\r\n    test_parse(\"ab\", \"a%tb\", time);\r\n    test_parse(\"a b\", \"a%tb\", time);\r\n    fail_parse(\"a  b\", \"a%tb\", time);\r\n    test_parse(\"a\", \"a%t\", time);\r\n    test_parse(\"a \", \"a%t\", time);\r\n\r\n    test_parse(\"a\", \"a \", time);\r\n    test_parse(\"\", \"\", time);\r\n    test_parse(\"\", \" \", time);\r\n    test_parse(\"\", \"%t\", time);\r\n    fail_parse(\"\", \"%n\", time);\r\n}\r\n\r\ntzdb copy_tzdb() {\r\n    const auto& my_tzdb = get_tzdb_list().front();\r\n    vector<time_zone> zones;\r\n    vector<time_zone_link> links;\r\n    transform(my_tzdb.zones.begin(), my_tzdb.zones.end(), back_inserter(zones),\r\n        [](const auto& tz) { return time_zone{_Secret_time_zone_construct_tag{}, tz.name()}; });\r\n    transform(my_tzdb.links.begin(), my_tzdb.links.end(), back_inserter(links), [](const auto& link) {\r\n        return time_zone_link{_Secret_time_zone_link_construct_tag{}, link.name(), link.target()};\r\n    });\r\n\r\n    return {my_tzdb.version, move(zones), move(links), my_tzdb.leap_seconds, my_tzdb._All_ls_positive};\r\n}\r\n\r\nvoid test_gh_1952() {\r\n    // GH-1952 <chrono>: parse ignores subseconds when the underlying type supports it\r\n    const auto time_str{\"2021-06-02T17:51:05.696028Z\"};\r\n    const auto fmt{\"%FT%TZ\"};\r\n    const auto utc_ref = clock_cast<utc_clock>(sys_days{2021y / June / 2d} + 17h + 51min + 5s + 696028us);\r\n\r\n    utc_time<microseconds> utc_parsed;\r\n    test_parse(time_str, fmt, utc_parsed);\r\n    assert(utc_parsed == utc_ref);\r\n\r\n    sys_time<microseconds> sys_parsed;\r\n    test_parse(time_str, fmt, sys_parsed);\r\n    assert(sys_parsed == clock_cast<system_clock>(utc_ref));\r\n\r\n    file_time<microseconds> file_parsed;\r\n    test_parse(time_str, fmt, file_parsed);\r\n    assert(file_parsed == clock_cast<file_clock>(utc_ref));\r\n\r\n    local_time<microseconds> local_parsed;\r\n    test_parse(time_str, fmt, local_parsed);\r\n    assert(local_parsed.time_since_epoch() == clock_cast<system_clock>(utc_ref).time_since_epoch());\r\n\r\n    const auto elapsed_leap = get_leap_second_info(utc_ref).elapsed;\r\n    const auto tai_offset   = 10s + elapsed_leap;\r\n    tai_time<microseconds> tai_parsed;\r\n    test_parse(time_str, fmt, tai_parsed);\r\n    assert(tai_parsed + tai_offset == clock_cast<tai_clock>(utc_ref));\r\n\r\n    const auto gps_offset = -9s + elapsed_leap;\r\n    gps_time<microseconds> gps_parsed;\r\n    test_parse(time_str, fmt, gps_parsed);\r\n    assert(gps_parsed + gps_offset == clock_cast<gps_clock>(utc_ref));\r\n}\r\n\r\nvoid parse_timepoints() {\r\n    sys_seconds ref = sys_days{2020y / October / 29d} + 19h + 1min + 42s;\r\n    sys_seconds st;\r\n    utc_seconds ut;\r\n    file_time<seconds> ft;\r\n    local_seconds lt;\r\n\r\n    test_parse(\"oct 29 19:01:42 2020\", \"%c\", st);\r\n    test_parse(\"oct 29 19:01:42 2020\", \"%c\", ut);\r\n    test_parse(\"oct 29 19:01:42 2020\", \"%c\", ft);\r\n    test_parse(\"oct 29 19:01:42 2020\", \"%c\", lt);\r\n\r\n    assert(st == ref);\r\n    assert(ut == clock_cast<utc_clock>(ref));\r\n    assert(ft == clock_cast<file_clock>(ref));\r\n    assert(lt.time_since_epoch() == ref.time_since_epoch());\r\n\r\n    minutes offset;\r\n    test_parse(\"oct 29 19:01:42 2020 0430\", \"%c %z\", st, nullptr, &offset);\r\n    assert(st == ref - offset && offset == 4h + 30min);\r\n\r\n    test_parse(\"oct 29 19:01:42 2020 0430\", \"%c %z\", ut, nullptr, &offset);\r\n    assert(ut == clock_cast<utc_clock>(ref) - offset && offset == 4h + 30min);\r\n\r\n    test_parse(\"oct 29 19:01:42 2020 0430\", \"%c %z\", ft, nullptr, &offset);\r\n    assert(ft == clock_cast<file_clock>(ref) - offset && offset == 4h + 30min);\r\n\r\n    test_parse(\"oct 29 19:01:42 2020 0430\", \"%c %z\", lt, nullptr, &offset);\r\n    assert(lt.time_since_epoch() == ref.time_since_epoch() && offset == 4h + 30min);\r\n\r\n    // N4878 [time.clock.tai]/1:\r\n    // The clock tai_clock measures seconds since 1958-01-01 00:00:00 and is offset 10s ahead of UTC at this date.\r\n    // That is, 1958-01-01 00:00:00 TAI is equivalent to 1957-12-31 23:59:50 UTC. Leap seconds are not inserted into\r\n    // TAI. Therefore every time a leap second is inserted into UTC, UTC shifts another second with respect to TAI.\r\n    // For example by 2000-01-01 there had been 22 positive and 0 negative leap seconds inserted so 2000-01-01\r\n    // 00:00:00 UTC is equivalent to 2000-01-01 00:00:32 TAI (22s plus the initial 10s offset).\r\n\r\n    ref = sys_days{1957y / December / 31d} + days{1} - 10s;\r\n    tai_seconds tt;\r\n    test_parse(\"jan 1 00:00:00 1958\", \"%c\", tt);\r\n    assert(tt == clock_cast<tai_clock>(ref));\r\n\r\n    ref = sys_days{2000y / January / 1d};\r\n    test_parse(\"jan 1 00:00:32 2000\", \"%c\", tt);\r\n    assert(tt == clock_cast<tai_clock>(ref));\r\n    test_parse(\"jan 1 00:00:32 2000 0430\", \"%c %z\", tt, nullptr, &offset);\r\n    assert(tt == clock_cast<tai_clock>(ref) - offset && offset == 4h + 30min);\r\n\r\n    // N4878 [time.clock.gps]/1:\r\n    // The clock gps_clock measures seconds since the first Sunday of January, 1980 00:00:00 UTC. Leap seconds are\r\n    // not inserted into GPS. Therefore every time a leap second is inserted into UTC, UTC shifts another second\r\n    // with respect to GPS. Aside from the offset from 1958y/January/1 to 1980y/January/Sunday[1], GPS is behind TAI\r\n    // by 19s due to the 10s offset between 1958 and 1970 and the additional 9 leap seconds inserted between 1970\r\n    // and 1980.\r\n\r\n    gps_seconds gt;\r\n    ref = sys_days{1980y / January / 6d};\r\n    test_parse(\"jan 6 00:00:00 1980 0430\", \"%c %z\", gt, nullptr, &offset);\r\n    assert(gt == clock_cast<gps_clock>(ref) - offset && offset == 4h + 30min);\r\n    test_parse(\"jan 6 00:00:00 1980\", \"%c\", gt);\r\n    assert(gt == clock_cast<gps_clock>(ref));\r\n    test_parse(\"jan 6 00:00:19 1980\", \"%c\", tt);\r\n    assert(gt == clock_cast<gps_clock>(tt));\r\n\r\n    seconds time;\r\n    test_parse(\" 1:23:42 am\", \"%r\", time);\r\n    assert(time == 1h + 23min + 42s);\r\n    test_parse(\"2000-01-02 01:23:42 pm\", \"%F %r\", st);\r\n    assert(st == sys_days{2000y / January / 2d} + (13h + 23min + 42s));\r\n\r\n    test_parse(\"11: 2:42 am\", \"%r\", time);\r\n    assert(time == 11h + 2min + 42s);\r\n    test_parse(\"2000-01-02 11:02:42 pm\", \"%F %r\", st);\r\n    assert(st == sys_days{2000y / January / 2d} + (23h + 2min + 42s));\r\n\r\n    test_parse(\"12:34: 4 am\", \"%r\", time);\r\n    assert(time == 34min + 4s);\r\n    test_parse(\"2000-01-02 12:34:04 pm\", \"%F %r\", st);\r\n    assert(st == sys_days{2000y / January / 2d} + (12h + 34min + 4s));\r\n\r\n\r\n    test_parse(\" 3:14 2000-01-02\", \"%R %F\", st);\r\n    assert(st == sys_days{2000y / January / 2d} + (3h + 14min));\r\n    test_parse(\"03:14 2000-01-02\", \"%R %F\", st);\r\n    assert(st == sys_days{2000y / January / 2d} + (3h + 14min));\r\n\r\n    test_parse(\"11: 3 2000-01-02\", \"%R %F\", st);\r\n    assert(st == sys_days{2000y / January / 2d} + (11h + 3min));\r\n    test_parse(\"11:03 2000-01-02\", \"%R %F\", st);\r\n    assert(st == sys_days{2000y / January / 2d} + (11h + 3min));\r\n\r\n    test_parse(\"00:42 2000-01-02\", \"%R %F\", st);\r\n    assert(st == sys_days{2000y / January / 2d} + (42min));\r\n    test_parse(\"12:42 2000-01-02\", \"%R %F\", st);\r\n    assert(st == sys_days{2000y / January / 2d} + (12h + 42min));\r\n\r\n    // Historical leap seconds don't allow complete testing, because they've all been positive and there haven't been\r\n    // any since 2016 (as of 2021).\r\n    {\r\n        auto my_tzdb   = copy_tzdb();\r\n        auto& leap_vec = my_tzdb.leap_seconds;\r\n        leap_vec.erase(leap_vec.begin() + 27, leap_vec.end());\r\n        leap_vec.emplace_back(sys_days{1d / January / 2020y}, false, leap_vec.back()._Elapsed());\r\n        leap_vec.emplace_back(sys_days{1d / January / 2022y}, true, leap_vec.back()._Elapsed());\r\n        my_tzdb._All_ls_positive = false;\r\n        get_tzdb_list()._Emplace_front(move(my_tzdb));\r\n    }\r\n\r\n    utc_seconds ut_ref = utc_clock::from_sys(sys_days{1d / July / 1972y}) - 1s; // leap second insertion\r\n    test_parse(\"june 30 23:59:60 1972\", \"%c\", ut);\r\n    assert(ut == ut_ref);\r\n\r\n    // Test a later leap second, where the accumulated offset is greater than 1s.\r\n    ut_ref = utc_clock::from_sys(sys_days{1d / July / 1992y}) - 1s;\r\n    test_parse(\"june 30 23:59:60 1992\", \"%c\", ut);\r\n    assert(ut == ut_ref);\r\n\r\n    // not leap-second aware\r\n    fail_parse(\"june 30 23:59:60 1972\", \"%c\", st);\r\n    fail_parse(\"june 30 23:59:60 1972\", \"%c\", tt);\r\n    fail_parse(\"june 30 23:59:60 1972\", \"%c\", gt);\r\n    fail_parse(\"june 30 23:59:60 1972\", \"%c\", ft);\r\n\r\n    fail_parse(\"june 30 23:59:60 1973\", \"%c\", ut); // not a leap second insertion\r\n\r\n    // the last leap second insertion that file_clock is not aware of\r\n    test_parse(\"dec 31 23:59:59 2016\", \"%c\", ut);\r\n    test_parse(\"dec 31 23:59:59 2016\", \"%c\", ft);\r\n    assert(ft == clock_cast<file_clock>(ut));\r\n\r\n    test_parse(\"dec 31 23:59:60 2016\", \"%c\", ut);\r\n    fail_parse(\"dec 31 23:59:60 2016\", \"%c\", ft);\r\n\r\n    test_parse(\"jan 01 00:00:00 2017\", \"%c\", ut);\r\n    test_parse(\"jan 01 00:00:00 2017\", \"%c\", ft);\r\n    assert(ft == clock_cast<file_clock>(ut));\r\n\r\n    ref = sys_days{1d / January / 2020y} - 1s; // negative leap second, UTC time doesn't exist\r\n    fail_parse(\"dec 31 23:59:59 2019\", \"%c\", ut);\r\n    fail_parse(\"dec 31 23:59:59 2019\", \"%c\", ft);\r\n\r\n    test_parse(\"dec 31 23:59:59 2019\", \"%c\", st);\r\n    assert(st == ref);\r\n\r\n    test_parse(\"dec 31 23:59:59 2019\", \"%c\", lt); // Not UTC, might be valid depending on the time zone.\r\n    assert(lt.time_since_epoch() == ref.time_since_epoch());\r\n\r\n    // Initially, TAI - UTC == 37s.\r\n    test_parse(\"dec 31 23:59:59 2019\", \"%c\", tt);\r\n    test_parse(\"dec 31 23:59:22 2019\", \"%c\", ut);\r\n    assert(tt == clock_cast<tai_clock>(ut));\r\n\r\n    test_parse(\"jan 01 00:00:35 2020\", \"%c\", tt);\r\n    test_parse(\"dec 31 23:59:58 2019\", \"%c\", ut);\r\n    assert(tt == clock_cast<tai_clock>(ut));\r\n\r\n    test_parse(\"jan 01 00:00:36 2020\", \"%c\", tt);\r\n    test_parse(\"jan 01 00:00:00 2020\", \"%c\", ut);\r\n    assert(tt == clock_cast<tai_clock>(ut));\r\n\r\n    // Initially, GPS - UTC == 18s\r\n    test_parse(\"dec 31 23:59:59 2019\", \"%c\", gt);\r\n    test_parse(\"dec 31 23:59:41 2019\", \"%c\", ut);\r\n    assert(gt == clock_cast<gps_clock>(ut));\r\n\r\n    test_parse(\"jan 01 00:00:16 2020\", \"%c\", gt);\r\n    test_parse(\"dec 31 23:59:58 2019\", \"%c\", ut);\r\n    assert(gt == clock_cast<gps_clock>(ut));\r\n\r\n    test_parse(\"jan 01 00:00:17 2020\", \"%c\", gt);\r\n    test_parse(\"jan 01 00:00:00 2020\", \"%c\", ut);\r\n    assert(gt == clock_cast<gps_clock>(ut));\r\n\r\n\r\n    ut_ref = utc_clock::from_sys(sys_days{1d / January / 2022y}) - 1s; // leap second insertion\r\n    test_parse(\"dec 31 23:59:60 2021\", \"%c\", ut);\r\n    assert(ut == ut_ref);\r\n    test_parse(\"dec 31 23:59:60 2021\", \"%c\", ft);\r\n    assert(ft == clock_cast<file_clock>(ut_ref));\r\n\r\n\r\n    // GH-1606: reads too many leading zeros\r\n    test_parse(\"19700405T000006\", \"%Y%m%dT%H%M%S\", st);\r\n    assert(st == sys_days{5d / April / 1970y} + 6s);\r\n\r\n    // GH-1280 tests\r\n    year_month_day ymd;\r\n    test_parse(\"20200609\", \"%Y%m%d\", ymd);\r\n    assert(ymd == 9d / June / 2020y);\r\n\r\n    test_parse(\"20201213\", \"%Y%m%d\", ymd);\r\n    assert(ymd == 13d / December / 2020y);\r\n\r\n    test_parse(\"2020112\", \"%Y%m%d\", ymd);\r\n    assert(ymd == 2d / November / 2020y);\r\n\r\n    test_parse(\"2020061125\", \"%Y%m%d\", ymd);\r\n    assert(ymd == 11d / June / 2020y);\r\n\r\n    test_parse(\"2020120625119\", \"%Y%m%d\", ymd);\r\n    assert(ymd == 6d / December / 2020y);\r\n\r\n    test_parse(\"2020092Text\", \"%Y%m%d\", ymd);\r\n    assert(ymd == 2d / September / 2020y);\r\n\r\n    test_parse(\"20200609\", \"%Y%m%d\", ymd);\r\n    assert(ymd == 9d / June / 2020y);\r\n\r\n    test_parse(\"2020112\", \"%Y%m%d\", ymd);\r\n    assert(ymd == 2d / November / 2020y);\r\n\r\n    test_parse(\"2020061125\", \"%Y%m%d\", ymd);\r\n    assert(ymd == 11d / June / 2020y);\r\n\r\n    test_parse(\"2020124\", \"%Y%m%d\", ymd);\r\n    assert(ymd == 4d / December / 2020y);\r\n\r\n    test_parse(\"2020104Text\", \"%Y%m%d\", ymd);\r\n    assert(ymd == 4d / October / 2020y);\r\n\r\n    fail_parse(\"202000000000000923\", \"%Y%m%d\", ymd);\r\n    fail_parse(\"202000000000000923\", \"%Y%m%d\", ymd);\r\n\r\n    // time_point out-of-range tests\r\n    fail_parse(\"1887-12-22 00:00:-1\", \"%F %T\", st);\r\n    fail_parse(\"1887-12-22 00:00:60\", \"%F %T\", st);\r\n    fail_parse(\"1887-12-22 00:-1:00\", \"%F %T\", st);\r\n    fail_parse(\"1887-12-22 00:60:00\", \"%F %T\", st);\r\n    fail_parse(\"1887-12-22 -1:00:00\", \"%F %T\", st);\r\n    fail_parse(\"1887-12-22 24:00:00\", \"%F %T\", st);\r\n\r\n    test_parse(\"1912-06-23 00:00:00\", \"%F %T\", st);\r\n    assert(st == sys_days{23d / June / 1912y});\r\n    test_parse(\"1912-06-23 23:59:59\", \"%F %T\", st);\r\n    assert(st == sys_days{23d / June / 1912y} + 23h + 59min + 59s);\r\n\r\n    // GH-1938: parsing timepoint with year and day-of-year\r\n    test_parse(\"1882.82\", \"%Y.%j\", st);\r\n    assert(st == sys_days{23d / March / 1882y});\r\n\r\n    test_gh_1952();\r\n\r\n    // GH-2698: 00:00:60 incorrectly parsed\r\n    fail_parse(\"2021-08-28 00:00:60\", \"%F %T\", ut);\r\n\r\n    fail_parse(\"2017-01-01 05:29:60\", \"%F %T\", ut);\r\n    test_parse(\"2017-01-01 05:29:60 +05:30\", \"%F %T %Ez\", ut);\r\n    assert(ut == clock_cast<utc_clock>(sys_days{1d / January / 2017y}) - 1s);\r\n}\r\n\r\ntemplate <class CharT, class CStringOrStdString>\r\nvoid test_io_manipulator() {\r\n    seconds time;\r\n    test_parse(WIDEN(CharT, \"12\"), CStringOrStdString{WIDEN(CharT, \"%S\")}, time);\r\n    assert(time == 12s);\r\n    test_parse(WIDEN(CharT, \"12\"), CStringOrStdString{WIDEN(CharT, \"%M\")}, time);\r\n    assert(time == 12min);\r\n    test_parse(WIDEN(CharT, \"30\"), CStringOrStdString{WIDEN(CharT, \"%H\")}, time);\r\n    assert(time == 30h);\r\n    test_parse(WIDEN(CharT, \" 1:23:42\"), CStringOrStdString{WIDEN(CharT, \"%T\")}, time);\r\n    assert(time == 1h + 23min + 42s);\r\n    basic_string<CharT> tz_name;\r\n    test_parse(WIDEN(CharT, \"Etc/GMT+11\"), CStringOrStdString{WIDEN(CharT, \"%Z\")}, time, &tz_name);\r\n    assert(tz_name == WIDEN(CharT, \"Etc/GMT+11\"));\r\n    fail_parse(WIDEN(CharT, \"Not_valid! 00\"), CStringOrStdString{WIDEN(CharT, \"%Z %H\")}, time, &tz_name);\r\n\r\n    weekday wd;\r\n    test_parse(WIDEN(CharT, \"wedNesday\"), CStringOrStdString{WIDEN(CharT, \"%A\")}, wd);\r\n    assert(wd == Wednesday);\r\n\r\n    month m;\r\n    test_parse(WIDEN(CharT, \"deCeMbeR\"), CStringOrStdString{WIDEN(CharT, \"%b\")}, m);\r\n    assert(m == December);\r\n\r\n    sys_seconds st;\r\n    test_parse(WIDEN(CharT, \"oct 29 19:01:42 2020\"), CStringOrStdString{WIDEN(CharT, \"%c\")}, st);\r\n    assert(st == sys_days{2020y / October / 29d} + 19h + 1min + 42s);\r\n\r\n    fail_parse(WIDEN(CharT, \"ab\"), CStringOrStdString{WIDEN(CharT, \"a%nb\")}, time);\r\n    test_parse(WIDEN(CharT, \"a b\"), CStringOrStdString{WIDEN(CharT, \"a%nb\")}, time);\r\n    fail_parse(WIDEN(CharT, \"a  b\"), CStringOrStdString{WIDEN(CharT, \"a%nb\")}, time);\r\n}\r\n\r\nnamespace lwg_3956 {\r\n    struct has_adl_from_stream {\r\n        int value = 0;\r\n\r\n        template <class CharT, class Traits, class... ArgTypes>\r\n        friend basic_istream<CharT, Traits>& from_stream(\r\n            basic_istream<CharT, Traits>& istr, const CharT*, has_adl_from_stream& parsed, ArgTypes&&...) {\r\n            parsed.value = 42;\r\n            return istr;\r\n        }\r\n    };\r\n\r\n    struct has_no_adl_from_stream {\r\n        operator year&() &;\r\n    };\r\n\r\n    template <class... ArgTypes>\r\n    concept can_parse = requires(ArgTypes&&... args) { parse(forward<ArgTypes>(args)...); };\r\n\r\n    static_assert(can_parse<const char*, has_adl_from_stream&>);\r\n    static_assert(can_parse<const string&, has_adl_from_stream&>);\r\n    static_assert(can_parse<const wchar_t*, has_adl_from_stream&>);\r\n    static_assert(can_parse<const wstring&, has_adl_from_stream&>);\r\n\r\n    static_assert(!can_parse<const char*, has_no_adl_from_stream&>);\r\n    static_assert(!can_parse<const string&, has_no_adl_from_stream&>);\r\n    static_assert(!can_parse<const wchar_t*, has_no_adl_from_stream&>);\r\n    static_assert(!can_parse<const wstring&, has_no_adl_from_stream&>);\r\n} // namespace lwg_3956\r\n\r\nvoid test_lwg_3956() {\r\n    {\r\n        lwg_3956::has_adl_from_stream parsed{};\r\n        test_parse(\"\", \"\", parsed);\r\n        assert(parsed.value == 42);\r\n    }\r\n    {\r\n        lwg_3956::has_adl_from_stream parsed{};\r\n        test_parse(L\"\", L\"\", parsed);\r\n        assert(parsed.value == 42);\r\n    }\r\n}\r\n\r\nvoid test_parse() {\r\n    test_lwg_3536();\r\n    test_lwg_3956();\r\n    parse_seconds();\r\n    parse_minutes();\r\n    parse_hours();\r\n    parse_other_duration();\r\n    parse_time_zone();\r\n    parse_calendar_types_basic();\r\n    parse_iso_week_date();\r\n    parse_other_week_date();\r\n    parse_incomplete();\r\n    parse_whitespace();\r\n    parse_timepoints();\r\n    test_io_manipulator<char, const char*>();\r\n    test_io_manipulator<wchar_t, const wchar_t*>();\r\n    test_io_manipulator<char, string>();\r\n    test_io_manipulator<wchar_t, wstring>();\r\n}\r\n\r\nvoid test() {\r\n    test_duration_output();\r\n    test_parse();\r\n}\r\n\r\nint main() {\r\n    run_tz_test([] { test(); });\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_time_point_and_durations/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_time_point_and_durations/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <limits>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\n\r\n#define DURATION_TEST(TYPE, BITS, ...)                                                                                \\\r\n    static_assert(                                                                                                    \\\r\n        is_integral_v<TYPE::rep> && is_signed_v<TYPE::rep>, \"chrono::\" #TYPE \"::rep is not a signed integral type.\"); \\\r\n    static_assert(                                                                                                    \\\r\n        numeric_limits<TYPE::rep>::digits >= BITS, \"chrono::\" #TYPE \"::rep is not at least \" #BITS \" bits.\");         \\\r\n    static_assert(is_same_v<TYPE::period, __VA_ARGS__>, \"chrono::\" #TYPE \"::period is not \" #__VA_ARGS__ \".\");\r\n\r\nDURATION_TEST(days, 25, ratio_multiply<ratio<24>, hours::period>)\r\nDURATION_TEST(weeks, 22, ratio_multiply<ratio<7>, days::period>)\r\nDURATION_TEST(months, 20, ratio_divide<years::period, ratio<12>>)\r\nDURATION_TEST(years, 17, ratio_multiply<ratio<146097, 400>, days::period>)\r\n\r\nstatic_assert(is_same_v<sys_seconds, time_point<system_clock, seconds>>, //\r\n    \"sys_seconds is not time_point<system_clock, seconds>.\");\r\nstatic_assert(is_same_v<sys_days, time_point<system_clock, days>>, //\r\n    \"sys_days is not time_point<system_clock, days>.\");\r\n\r\nstatic_assert(is_same_v<local_seconds, time_point<local_t, seconds>>, //\r\n    \"local_seconds is not time_point<local_t, seconds>.\");\r\nstatic_assert(is_same_v<local_days, time_point<local_t, days>>, //\r\n    \"local_days is not time_point<local_t, days>.\");\r\n\r\nconstexpr bool test() {\r\n    steady_clock::time_point tp1;\r\n\r\n    static_assert(noexcept(++tp1)); // strengthened\r\n    static_assert(noexcept(tp1++)); // strengthened\r\n    static_assert(noexcept(--tp1)); // strengthened\r\n    static_assert(noexcept(tp1--)); // strengthened\r\n\r\n    auto tp2 = tp1++;\r\n    assert(tp1.time_since_epoch().count() == 1);\r\n    assert(tp2.time_since_epoch().count() == 0);\r\n    tp2 = ++tp1;\r\n    assert(tp1.time_since_epoch().count() == 2);\r\n    assert(tp2.time_since_epoch().count() == 2);\r\n\r\n    tp2 = tp1--;\r\n    assert(tp1.time_since_epoch().count() == 1);\r\n    assert(tp2.time_since_epoch().count() == 2);\r\n    tp2 = --tp1;\r\n    assert(tp1.time_since_epoch().count() == 0);\r\n    assert(tp2.time_since_epoch().count() == 0);\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test();\r\n    static_assert(test());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_time_zones/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_time_zones/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <chrono>\r\n#include <ratio>\r\n#include <stdexcept>\r\n#include <string>\r\n#include <string_view>\r\n#include <utility>\r\n\r\n#include <timezone_data.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\n\r\n// NOTE:\r\n//     These test suites will assume all data from the IANA database is correct\r\n//     and will not test historical changes in transitions. Instead the focus\r\n//     will be on using a select sample of transitions in both a positive and\r\n//     negative UTC offset zone (different corner cases).\r\n\r\nconstexpr bool sys_equal(const sys_info& left, const sys_info& right) {\r\n    return left.begin == right.begin && left.end == right.end && left.offset == right.offset && left.save == right.save\r\n        && left.abbrev == right.abbrev;\r\n}\r\n\r\nvoid test_time_zone_and_link(const tzdb& my_tzdb, string_view tz_name, string_view tz_link_name) {\r\n    const auto original_tz = my_tzdb.locate_zone(tz_name);\r\n    assert(original_tz != nullptr);\r\n    assert(original_tz->name() == tz_name);\r\n\r\n    const auto linked_tz = my_tzdb.locate_zone(tz_link_name);\r\n    assert(linked_tz != nullptr);\r\n    assert(linked_tz->name() == tz_name);\r\n    assert(original_tz == linked_tz);\r\n\r\n    const auto tz_link = _Locate_zone_impl(my_tzdb.links, tz_link_name);\r\n    assert(tz_link != nullptr);\r\n    assert(tz_link->name() == tz_link_name);\r\n    assert(tz_link->target() == tz_name);\r\n    assert(my_tzdb.locate_zone(tz_link->target()) == original_tz);\r\n\r\n    assert(_Locate_zone_impl(my_tzdb.zones, tz_name) != nullptr);\r\n    assert(_Locate_zone_impl(my_tzdb.zones, tz_link_name) == nullptr);\r\n    assert(_Locate_zone_impl(my_tzdb.links, tz_name) == nullptr);\r\n}\r\n\r\nvoid try_locate_invalid_zone(const tzdb& my_tzdb, string_view name) {\r\n    try {\r\n        (void) my_tzdb.locate_zone(name);\r\n        assert(false);\r\n    } catch (const runtime_error&) {\r\n    }\r\n}\r\n\r\nvoid timezone_tzdb_list_test() {\r\n    const auto& my_tzdb_list = get_tzdb_list();\r\n\r\n    // only one entry in the list unless leap seconds were to change\r\n    assert(&my_tzdb_list.front() == &get_tzdb());\r\n    assert(&my_tzdb_list.front() == &reload_tzdb());\r\n    assert(++my_tzdb_list.begin() == my_tzdb_list.end());\r\n    assert(++my_tzdb_list.cbegin() == my_tzdb_list.cend());\r\n}\r\n\r\nvoid timezone_version_test() {\r\n    const auto& my_tzdb = get_tzdb();\r\n    assert(my_tzdb.version.empty() == false);\r\n\r\n    // version should end in .X where X == number of leap seconds\r\n    const auto pos = my_tzdb.version.find_last_of('.');\r\n    assert(pos != decltype(my_tzdb.version)::npos);\r\n    const string leap_seconds{my_tzdb.version, pos + 1};\r\n    assert(leap_seconds.empty() == false);\r\n    assert(leap_seconds == to_string(my_tzdb.leap_seconds.size()));\r\n\r\n    // remote version will only differ if leap seconds info changes, will not occur in tests\r\n    const auto& reloaded_tzdb = reload_tzdb();\r\n    assert(reloaded_tzdb.version.empty() == false);\r\n    assert(&reloaded_tzdb == &my_tzdb);\r\n\r\n    const auto& remote_ver = remote_version();\r\n    assert(remote_ver.empty() == false);\r\n    assert(remote_ver == my_tzdb.version);\r\n}\r\n\r\nvoid timezone_names_test() {\r\n    const auto& my_tzdb = get_tzdb();\r\n\r\n    test_time_zone_and_link(my_tzdb, \"Asia/Thimphu\", \"Asia/Thimbu\");\r\n    test_time_zone_and_link(my_tzdb, \"America/Tijuana\", \"America/Ensenada\");\r\n\r\n    const auto curr_zone = current_zone();\r\n    assert(curr_zone != nullptr);\r\n    assert(curr_zone->name().empty() == false);\r\n    assert(curr_zone == my_tzdb.current_zone());\r\n\r\n    const auto located_zone = locate_zone(\"UTC\");\r\n    assert(located_zone != nullptr);\r\n    assert(located_zone->name() == \"Etc/UTC\");\r\n    assert(located_zone == my_tzdb.locate_zone(\"UTC\"));\r\n\r\n    try_locate_invalid_zone(my_tzdb, \"Non/Existent\");\r\n\r\n    // Abbreviations should not be time_zones or time_zone_links\r\n    try_locate_invalid_zone(my_tzdb, \"PDT\");\r\n    try_locate_invalid_zone(my_tzdb, \"AEST\");\r\n\r\n    // Comparison operators\r\n    const time_zone tz1{_Secret_time_zone_construct_tag{}, \"Earlier\"};\r\n    const time_zone tz2{_Secret_time_zone_construct_tag{}, \"Earlier\"};\r\n    const time_zone tz3{_Secret_time_zone_construct_tag{}, \"Later\"};\r\n    assert(tz1 == tz2);\r\n    assert(tz1 != tz3);\r\n    assert(tz1 <=> tz2 == strong_ordering::equal);\r\n    assert(tz1 <=> tz3 == strong_ordering::less);\r\n    assert(tz3 <=> tz1 == strong_ordering::greater);\r\n\r\n    const time_zone_link link1{_Secret_time_zone_link_construct_tag{}, \"Earlier\", \"Target\"};\r\n    const time_zone_link link2{_Secret_time_zone_link_construct_tag{}, \"Earlier\", \"Is\"};\r\n    const time_zone_link link3{_Secret_time_zone_link_construct_tag{}, \"Later\", \"Ignored\"};\r\n    assert(link1 == link2);\r\n    assert(link1 != link3);\r\n    assert(link1 <=> link2 == strong_ordering::equal);\r\n    assert(link1 <=> link3 == strong_ordering::less);\r\n    assert(link3 <=> link1 == strong_ordering::greater);\r\n\r\n    try {\r\n        // ensure locate_zone returns time_zone with given name\r\n        assert(all_of(my_tzdb.zones.begin(), my_tzdb.zones.end(),\r\n            [&](const auto& zone) { return my_tzdb.locate_zone(zone.name())->name() == zone.name(); }));\r\n        // ensure locate_zone returns correct target of time_zone_link\r\n        assert(all_of(my_tzdb.links.begin(), my_tzdb.links.end(),\r\n            [&](const auto& link) { return my_tzdb.locate_zone(link.name())->name() == link.target(); }));\r\n        // ensure locate_zone does NOT return time_zone that is also a time_zone_link\r\n        assert(all_of(my_tzdb.links.begin(), my_tzdb.links.end(),\r\n            [&](const auto& link) { return my_tzdb.locate_zone(link.name())->name() != link.name(); }));\r\n    } catch (const runtime_error&) {\r\n        assert(false);\r\n    }\r\n\r\n    // See GH-1786. These may change over time and might have to be removed from this test.\r\n    // These are some examples in which the ICU.dll and IANA database diverge in what they consider a zone or a link.\r\n    assert(_Locate_zone_impl(my_tzdb.links, \"Atlantic/Faroe\") != nullptr); // is a time_zone in IANA\r\n    assert(_Locate_zone_impl(my_tzdb.zones, \"Africa/Addis_Ababa\") != nullptr); // is a time_zone_link in IANA\r\n    assert(_Locate_zone_impl(my_tzdb.links, \"PST\") != nullptr); // time_zone_link does not exist in IANA\r\n    assert(_Locate_zone_impl(my_tzdb.links, \"Africa/Asmara\") != nullptr); // matches IANA but target is different\r\n    assert(_Locate_zone_impl(my_tzdb.links, \"Africa/Asmara\")->target() == \"Africa/Asmera\"); // target == Africa/Nairobi\r\n    assert(_Locate_zone_impl(my_tzdb.zones, \"America/Nuuk\") == nullptr); // added in ICU 68, update test when it arrives\r\n}\r\n\r\nvoid validate_timezone_transitions(const time_zone* tz, const Transition& transition) {\r\n    auto info = tz->get_info(transition.begin());\r\n    assert(info.begin == transition.begin());\r\n    assert(info.end == transition.end());\r\n    assert(info.offset == transition.offset());\r\n    assert(info.save == transition.save());\r\n    assert(info.abbrev == transition.abbrev() || info.abbrev == transition.abbrev_alt());\r\n}\r\n\r\nvoid timezone_sys_info_test() {\r\n    const auto& my_tzdb = get_tzdb();\r\n\r\n    auto sydney_tz = my_tzdb.locate_zone(Sydney::Tz_name);\r\n    assert(sydney_tz != nullptr);\r\n    validate_timezone_transitions(sydney_tz, Sydney::Day_1);\r\n    validate_timezone_transitions(sydney_tz, Sydney::Std_1);\r\n    validate_timezone_transitions(sydney_tz, Sydney::Day_2);\r\n\r\n    auto la_tz = my_tzdb.locate_zone(LA::Tz_name);\r\n    assert(la_tz != nullptr);\r\n    validate_timezone_transitions(la_tz, LA::Day_1);\r\n    validate_timezone_transitions(la_tz, LA::Std_1);\r\n    validate_timezone_transitions(la_tz, LA::Day_2);\r\n\r\n    auto begin_info  = sydney_tz->get_info(Sydney::Std_1.begin());\r\n    auto middle_info = sydney_tz->get_info(Sydney::Std_1.begin() + days{1});\r\n    auto end_info    = sydney_tz->get_info(Sydney::Std_1.end());\r\n    assert(sys_equal(begin_info, middle_info));\r\n    assert(!sys_equal(begin_info, end_info));\r\n\r\n    auto min_info = sydney_tz->get_info(time_zone::_Min_seconds);\r\n    auto max_info = sydney_tz->get_info(time_zone::_Max_seconds - seconds{1});\r\n    assert(min_info.begin == time_zone::_Min_seconds);\r\n    assert(min_info.end != time_zone::_Max_seconds);\r\n    assert(max_info.begin != time_zone::_Min_seconds);\r\n    assert(max_info.end == time_zone::_Max_seconds);\r\n\r\n    auto utc_zone = my_tzdb.locate_zone(\"Etc/UTC\");\r\n    assert(utc_zone != nullptr);\r\n\r\n    auto min_utc = utc_zone->get_info(time_zone::_Min_seconds);\r\n    auto max_utc = utc_zone->get_info(time_zone::_Max_seconds - seconds{1});\r\n    // Only a single transition in UTC\r\n    assert(sys_equal(min_utc, max_utc));\r\n    assert(min_utc.begin < max_utc.end);\r\n    assert(min_utc.begin == time_zone::_Min_seconds);\r\n    assert(min_utc.end == time_zone::_Max_seconds);\r\n\r\n    // Test abbreviations other than standard/daylight savings such as war time.\r\n    // These scenarios are not handled correctly by icu.dll\r\n    auto war_time = la_tz->get_info(sys_days{year{1942} / April / day{1}});\r\n    assert(war_time.abbrev == \"PDT\" || war_time.abbrev == \"GMT-7\"); // IANA database == \"PWT\"\r\n}\r\n\r\nvoid timezone_to_local_test() {\r\n    const auto& my_tzdb = get_tzdb();\r\n    {\r\n        using namespace Sydney;\r\n        auto tz = my_tzdb.locate_zone(Tz_name);\r\n        assert(tz != nullptr);\r\n\r\n        const auto& to_standard = Day_to_Std.first.end();\r\n        assert(tz->to_local(to_standard) == Day_to_Std.second.local_begin());\r\n        assert(tz->to_local(to_standard + minutes{30}) == Day_to_Std.second.local_begin() + minutes{30});\r\n        assert(tz->to_local(to_standard - minutes{30}) == Day_to_Std.first.local_end() - minutes{30});\r\n\r\n        const auto& to_daylight = Std_to_Day.first.end();\r\n        assert(tz->to_local(to_daylight) == Std_to_Day.second.local_begin());\r\n        assert(tz->to_local(to_daylight + minutes{30}) == Std_to_Day.second.local_begin() + minutes{30});\r\n        assert(tz->to_local(to_daylight - minutes{30}) == Std_to_Day.first.local_end() - minutes{30});\r\n    }\r\n    {\r\n        using namespace LA;\r\n        auto tz = my_tzdb.locate_zone(Tz_name);\r\n        assert(tz != nullptr);\r\n\r\n        const auto& to_standard = Day_to_Std.first.end();\r\n        assert(tz->to_local(to_standard) == Day_to_Std.second.local_begin());\r\n        assert(tz->to_local(to_standard + minutes{30}) == Day_to_Std.second.local_begin() + minutes{30});\r\n        assert(tz->to_local(to_standard - minutes{30}) == Day_to_Std.first.local_end() - minutes{30});\r\n\r\n        const auto& to_daylight = Std_to_Day.first.end();\r\n        assert(tz->to_local(to_daylight) == Std_to_Day.second.local_begin());\r\n        assert(tz->to_local(to_daylight + minutes{30}) == Std_to_Day.second.local_begin() + minutes{30});\r\n        assert(tz->to_local(to_daylight - minutes{30}) == Std_to_Day.first.local_end() - minutes{30});\r\n    }\r\n}\r\n\r\nvoid assert_local(const time_zone* tz, local_seconds local, int result, const sys_info& first, const sys_info& second) {\r\n    const auto info = tz->get_info(local);\r\n    assert(info.result == result);\r\n    assert(sys_equal(info.first, first));\r\n    assert(sys_equal(info.second, second));\r\n\r\n    // time_zone::to_sys depends heavily on local_info so just test it here\r\n    // to exhaust all corner cases.\r\n    sys_seconds sys_earliest{local.time_since_epoch() - info.first.offset};\r\n    sys_seconds sys_latest{local.time_since_epoch() - info.second.offset};\r\n    try {\r\n        assert(tz->to_sys(local) == sys_earliest);\r\n        assert(result == local_info::unique);\r\n    } catch (const nonexistent_local_time&) {\r\n        assert(result == local_info::nonexistent);\r\n    } catch (const ambiguous_local_time&) {\r\n        assert(result == local_info::ambiguous);\r\n    }\r\n\r\n    if (result == local_info::unique) {\r\n        assert(tz->to_sys(local, choose::earliest) == sys_earliest);\r\n        assert(tz->to_sys(local, choose::latest) == sys_earliest);\r\n    } else if (result == local_info::nonexistent) {\r\n        assert(tz->to_sys(local, choose::earliest) == info.first.end);\r\n        assert(tz->to_sys(local, choose::latest) == info.first.end);\r\n    } else if (result == local_info::ambiguous) {\r\n        assert(tz->to_sys(local, choose::earliest) == sys_earliest);\r\n        assert(tz->to_sys(local, choose::latest) == sys_latest);\r\n    }\r\n}\r\n\r\nvoid validate_get_local_info(const time_zone* tz, const pair<Transition, Transition>& transition, int result) {\r\n    sys_info default_info{};\r\n    sys_info first  = tz->get_info(transition.first.begin());\r\n    sys_info second = tz->get_info(transition.second.begin());\r\n\r\n    // Get the local time for the beginning of the ambiguous/nonexistent section\r\n    const auto danger_begin = get_danger_begin(transition.first, transition.second);\r\n    const auto danger_end   = get_danger_end(transition.first, transition.second);\r\n    assert_local(tz, danger_begin - days{2}, local_info::unique, first, default_info); // two days before\r\n    assert_local(tz, danger_begin - hours{1}, local_info::unique, first, default_info); // one hour before\r\n    assert_local(tz, danger_begin, result, first, second); // danger begin\r\n    assert_local(tz, danger_begin + minutes{30}, result, first, second); // danger middle\r\n    assert_local(tz, danger_end, local_info::unique, second, default_info); // danger end\r\n    assert_local(tz, danger_end + hours{1}, local_info::unique, second, default_info); // one hour after\r\n    assert_local(tz, danger_end + days{2}, local_info::unique, second, default_info); // two days after\r\n}\r\n\r\nvoid timezone_local_info_test() {\r\n    const auto& my_tzdb = get_tzdb();\r\n    {\r\n        // positive offset (UTC+10/+11) can fall in previous transition\r\n        using namespace Sydney;\r\n        auto tz = my_tzdb.locate_zone(Tz_name);\r\n        assert(tz != nullptr);\r\n        validate_get_local_info(tz, Day_to_Std, local_info::ambiguous);\r\n        validate_get_local_info(tz, Std_to_Day, local_info::nonexistent);\r\n    }\r\n    {\r\n        // negative offset (UTC-8/-7) can fall in next transition\r\n        using namespace LA;\r\n        auto tz = my_tzdb.locate_zone(Tz_name);\r\n        assert(tz != nullptr);\r\n        validate_get_local_info(tz, Day_to_Std, local_info::ambiguous);\r\n        validate_get_local_info(tz, Std_to_Day, local_info::nonexistent);\r\n    }\r\n}\r\n\r\ntemplate <typename Dur>\r\nvoid validate_precision(const time_zone* tz, const pair<Transition, Transition>& transition_pair, Dur precision) {\r\n    const auto& first       = transition_pair.first;\r\n    const auto& second      = transition_pair.second;\r\n    const auto transition   = first.end<Dur>();\r\n    const auto danger_begin = get_danger_begin<Dur>(first, second);\r\n    const auto danger_end   = get_danger_end<Dur>(first, second);\r\n    sys_info first_info     = tz->get_info(first.begin<Dur>());\r\n    sys_info second_info    = tz->get_info(second.begin<Dur>());\r\n\r\n    // test correct transition is picked\r\n    assert(sys_equal(tz->get_info(transition), second_info));\r\n    assert(sys_equal(tz->get_info(transition - precision), first_info));\r\n\r\n    // test ambiguous/nonexistent info is handled\r\n    assert(tz->get_info(danger_end).result == local_info::unique); // exact end of danger zone\r\n    assert(tz->get_info(danger_end - precision).result != local_info::unique); // just inside danger zone\r\n    assert(tz->get_info(danger_begin).result != local_info::unique); // exact start of danger zone\r\n    assert(tz->get_info(danger_begin - precision).result == local_info::unique); // just before danger zone\r\n\r\n    // test precision is not lost when converting to local\r\n    assert(tz->to_local(transition) == second.local_begin<Dur>());\r\n    assert(tz->to_local(transition + precision) == second.local_begin<Dur>() + precision);\r\n    assert(tz->to_local(transition - precision) == first.local_end<Dur>() - precision);\r\n\r\n    // test precision is not lost when converting to sys\r\n    try {\r\n        const sys_time<Dur> sys_danger_begin = transition - first.save();\r\n        const sys_time<Dur> sys_danger_end   = transition + first.save();\r\n        assert(tz->to_sys(danger_end) == sys_danger_end);\r\n        assert(tz->to_sys(danger_end + precision) == sys_danger_end + precision);\r\n        assert(tz->to_sys(danger_begin - precision) == sys_danger_begin - precision);\r\n    } catch (const nonexistent_local_time&) {\r\n        assert(false);\r\n    } catch (const ambiguous_local_time&) {\r\n        assert(false);\r\n    }\r\n\r\n    try {\r\n        // test ambiguous/nonexistent info is found\r\n        (void) tz->to_sys(danger_end - precision);\r\n        assert(false);\r\n    } catch (const nonexistent_local_time&) {\r\n    } catch (const ambiguous_local_time&) {\r\n    }\r\n}\r\n\r\nvoid timezone_precision_test() {\r\n    const auto& my_tzdb = get_tzdb();\r\n\r\n    {\r\n        using namespace Sydney;\r\n        auto tz = my_tzdb.locate_zone(Tz_name);\r\n        validate_precision(tz, Std_to_Day, sys_seconds::duration{1});\r\n\r\n        validate_precision(tz, Std_to_Day, milliseconds{100});\r\n        validate_precision(tz, Std_to_Day, milliseconds{10});\r\n        validate_precision(tz, Std_to_Day, milliseconds{1});\r\n\r\n        validate_precision(tz, Std_to_Day, microseconds{100});\r\n        validate_precision(tz, Std_to_Day, microseconds{10});\r\n        validate_precision(tz, Std_to_Day, microseconds{1});\r\n\r\n        // validate opposite transition\r\n        validate_precision(tz, Day_to_Std, milliseconds{1});\r\n        validate_precision(tz, Day_to_Std, microseconds{1});\r\n    }\r\n    {\r\n        using namespace LA;\r\n        auto tz = my_tzdb.locate_zone(Tz_name);\r\n        validate_precision(tz, Std_to_Day, sys_seconds::duration{1});\r\n\r\n        validate_precision(tz, Std_to_Day, milliseconds{100});\r\n        validate_precision(tz, Std_to_Day, milliseconds{10});\r\n        validate_precision(tz, Std_to_Day, milliseconds{1});\r\n\r\n        validate_precision(tz, Std_to_Day, microseconds{100});\r\n        validate_precision(tz, Std_to_Day, microseconds{10});\r\n        validate_precision(tz, Std_to_Day, microseconds{1});\r\n\r\n        // validate opposite transition\r\n        validate_precision(tz, Day_to_Std, milliseconds{1});\r\n        validate_precision(tz, Day_to_Std, microseconds{1});\r\n    }\r\n}\r\n\r\nvoid timezone_sorted_vectors_test() {\r\n    // N5008 [time.zone.db.tzdb]/1: \"Each vector in a tzdb object is sorted to enable fast lookup.\"\r\n    const auto& my_tzdb = get_tzdb();\r\n\r\n    assert(ranges::is_sorted(my_tzdb.zones));\r\n    assert(ranges::is_sorted(my_tzdb.links));\r\n    assert(ranges::is_sorted(my_tzdb.leap_seconds));\r\n}\r\n\r\nvoid timezone_historical_dst_abolished_test() {\r\n    // Regression test: timezones that abolished DST must still report\r\n    // correct historical offsets for dates when DST was active.\r\n    const auto& my_tzdb = get_tzdb();\r\n\r\n    { // America/Sao_Paulo - abolished DST Feb 2019\r\n        auto tz   = my_tzdb.locate_zone(\"America/Sao_Paulo\");\r\n        auto info = tz->get_info(sys_days{year{2019} / January / day{1}});\r\n        assert(info.offset == seconds{-7200});\r\n        assert(info.save == minutes{60});\r\n    }\r\n    { // Europe/Istanbul - abolished DST Sep 2016\r\n        auto tz   = my_tzdb.locate_zone(\"Europe/Istanbul\");\r\n        auto info = tz->get_info(sys_days{year{2016} / July / day{1}});\r\n        assert(info.offset == seconds{10800});\r\n        assert(info.save == minutes{60});\r\n    }\r\n    { // Europe/Moscow - abolished DST Oct 2014\r\n        auto tz   = my_tzdb.locate_zone(\"Europe/Moscow\");\r\n        auto info = tz->get_info(sys_days{year{2010} / July / day{1}});\r\n        assert(info.offset == seconds{14400});\r\n        assert(info.save == minutes{60});\r\n    }\r\n}\r\n\r\nvoid test() {\r\n    timezone_tzdb_list_test();\r\n    timezone_version_test();\r\n    timezone_names_test();\r\n    timezone_sys_info_test();\r\n    timezone_to_local_test();\r\n    timezone_local_info_test();\r\n    timezone_precision_test();\r\n    timezone_sorted_vectors_test();\r\n    timezone_historical_dst_abolished_test();\r\n}\r\n\r\nint main() {\r\n    run_tz_test([] { test(); });\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_zoned_time/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0355R7_calendars_and_time_zones_zoned_time/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <string_view>\r\n#include <type_traits>\r\n\r\n#include <timezone_data.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\nusing ZT = zoned_traits<const time_zone*>;\r\n\r\nstruct time_zone_info {\r\n    time_zone_info(string_view _name_, const time_zone* _tz_, seconds _sys_) : name(_name_), tz(_tz_), sys(_sys_) {}\r\n\r\n    string_view name;\r\n    const time_zone* tz;\r\n    sys_seconds sys;\r\n    local_seconds local{tz->to_local(sys)};\r\n    zoned_time<seconds> zone{tz, sys};\r\n};\r\n\r\nvoid zonedtime_constructor_test() {\r\n    const time_zone_info utc{\"Etc/UTC\", ZT::default_zone(), seconds{42}};\r\n    const time_zone_info syd{Sydney::Tz_name, ZT::locate_zone(Sydney::Tz_name), seconds{20}};\r\n\r\n    // ensure local conversions are valid\r\n    assert(utc.tz->get_info(utc.local).result == local_info::unique);\r\n    assert(syd.tz->get_info(syd.local).result == local_info::unique);\r\n\r\n    {\r\n        // defaulted copy\r\n        zoned_time<seconds> zone{syd.zone};\r\n        assert(zone.get_time_zone() == syd.tz);\r\n        assert(zone.get_sys_time() == syd.sys);\r\n    }\r\n    {\r\n        // (1) zoned_time();\r\n        zoned_time<seconds> zone{};\r\n        assert(zone.get_time_zone() == utc.tz);\r\n        assert(zone.get_sys_time() == sys_seconds{});\r\n    }\r\n    {\r\n        // (2) zoned_time(const sys_time<Duration>& st);\r\n        zoned_time<seconds> zone{sys_seconds{seconds{1}}};\r\n        assert(zone.get_time_zone() == utc.tz);\r\n        assert(zone.get_sys_time() == sys_seconds{seconds{1}});\r\n    }\r\n    {\r\n        // (3) explicit zoned_time(TimeZonePtr z);\r\n        zoned_time<seconds> zone{&*syd.tz};\r\n        assert(zone.get_time_zone() == syd.tz);\r\n        assert(zone.get_sys_time() == sys_seconds{});\r\n\r\n        // (4) explicit zoned_time(string_view name);\r\n        assert(zoned_time<seconds>{syd.name} == zone);\r\n    }\r\n    {\r\n        // (5) template<class Duration2>\r\n        //     zoned_time(const zoned_time<Duration2, TimeZonePtr>& y);\r\n        zoned_time<hours> zone_hours{syd.name, sys_time<hours>{hours{1}}};\r\n        assert(zone_hours.get_time_zone() == syd.tz);\r\n        assert(zone_hours.get_sys_time() == sys_time<seconds>{hours{1}});\r\n    }\r\n    {\r\n        // (6) zoned_time(TimeZonePtr z, const sys_time<Duration>& st);\r\n        zoned_time<seconds> zone{&*syd.tz, syd.sys};\r\n        assert(zone.get_time_zone() == syd.tz);\r\n        assert(zone.get_sys_time() == syd.sys);\r\n\r\n        // (7) zoned_time(string_view name, const sys_time<Duration>& st);\r\n        assert((zoned_time<seconds>{syd.name, syd.sys}) == zone);\r\n    }\r\n    {\r\n        // (8) zoned_time(TimeZonePtr z, const local_time<Duration>& tp);\r\n        zoned_time<seconds> zone{&*syd.tz, syd.local};\r\n        assert(zone.get_time_zone() == syd.tz);\r\n        assert(zone.get_sys_time() == syd.sys);\r\n\r\n        // (9) zoned_time(string_view name, const local_time<Duration>& st);\r\n        assert((zoned_time<seconds>{syd.name, syd.local}) == zone);\r\n    }\r\n    {\r\n        // (10) zoned_time(TimeZonePtr z, const local_time<Duration>& tp, choose c);\r\n        zoned_time<seconds> zone{&*syd.tz, syd.local, choose::earliest};\r\n        assert(zone.get_time_zone() == syd.tz);\r\n        assert(zone.get_sys_time() == syd.sys);\r\n\r\n        // (11) zoned_time(string_view name, const local_time<Duration>& tp, choose c);\r\n        assert((zoned_time<seconds>{syd.name, syd.local, choose::earliest}) == zone);\r\n    }\r\n    {\r\n        // (12) template<class Duration2, class TimeZonePtr2>\r\n        //      zoned_time(TimeZonePtr z, const zoned_time<Duration2, TimeZonePtr2>& y);\r\n        zoned_time<seconds> z1{&*utc.tz, syd.zone};\r\n        zoned_time<seconds> z2{&*syd.tz, utc.zone};\r\n        assert(z1.get_time_zone() == utc.tz);\r\n        assert(z1.get_sys_time() == syd.sys);\r\n        assert(z2.get_time_zone() == syd.tz);\r\n        assert(z2.get_sys_time() == utc.sys);\r\n\r\n        // (13) template<class Duration2, class TimeZonePtr2>\r\n        //      zoned_time(TimeZonePtr z, const zoned_time<Duration2, TimeZonePtr2>& y, choose);\r\n        assert((zoned_time<seconds>{&*utc.tz, syd.zone, choose::earliest}) == z1);\r\n        assert((zoned_time<seconds>{&*syd.tz, utc.zone, choose::earliest}) == z2);\r\n\r\n        // (14) template<class Duration2, class TimeZonePtr2>\r\n        //      zoned_time(string_view name, const zoned_time<Duration2, TimeZonePtr2>& y);\r\n        assert((zoned_time<seconds>{utc.name, syd.zone}) == z1);\r\n        assert((zoned_time<seconds>{syd.name, utc.zone}) == z2);\r\n\r\n        // (15) template<class Duration2, class TimeZonePtr2>\r\n        //      zoned_time(string_view name, const zoned_time<Duration2, TimeZonePtr2>& y, choose);\r\n        assert((zoned_time<seconds>{utc.name, syd.zone, choose::earliest}) == z1);\r\n        assert((zoned_time<seconds>{syd.name, utc.zone, choose::earliest}) == z2);\r\n\r\n        // when (_Duration2 != _Duration)\r\n        zoned_time<hours> zone_hours{&*syd.tz, sys_time<hours>{hours{1}}};\r\n        zoned_time<seconds> zone{&*utc.tz, zone_hours};\r\n        assert(zone.get_time_zone() == utc.tz);\r\n        assert(zone.get_sys_time() == sys_time<seconds>{hours{1}});\r\n\r\n        assert((zoned_time<seconds>{&*utc.tz, zone_hours, choose::earliest}) == zone);\r\n        assert((zoned_time<seconds>{utc.name, zone_hours}) == zone);\r\n        assert((zoned_time<seconds>{utc.name, zone_hours, choose::earliest}) == zone);\r\n    }\r\n}\r\n\r\nvoid zonedtime_operator_test() {\r\n    const auto utc_tz = ZT::default_zone();\r\n    const zoned_time<seconds> utc_zone{};\r\n    assert(utc_zone.get_time_zone() == utc_tz);\r\n    assert(utc_zone.get_sys_time() == sys_seconds{});\r\n    assert(utc_zone.get_local_time() == local_seconds{});\r\n\r\n    const auto syd_tz     = ZT::locate_zone(Sydney::Tz_name);\r\n    const auto transition = Sydney::Day_1;\r\n    const auto sys        = transition.begin();\r\n    const auto local      = syd_tz->to_local(transition.begin());\r\n    assert(syd_tz->get_info(local).result == local_info::unique);\r\n\r\n    zoned_time<seconds> zone{ZT::locate_zone(Sydney::Tz_name), sys};\r\n    assert(zone.get_time_zone() == syd_tz);\r\n    assert(zone.get_sys_time() == sys);\r\n    assert(zone.get_local_time() == local);\r\n    assert(zone.get_info().begin == sys);\r\n\r\n    // set time to be == epoch\r\n    zone = sys_seconds{};\r\n    assert(zone.get_time_zone() == syd_tz);\r\n    assert(zone.get_sys_time() == sys_seconds{});\r\n    assert(zone.get_local_time() == syd_tz->to_local(sys_seconds{}));\r\n    assert(zone.get_info().begin != sys);\r\n\r\n    // reset sys_time to transition.begin() via local_time\r\n    zone = local;\r\n    assert(zone.get_time_zone() == syd_tz);\r\n    assert(zone.get_sys_time() == sys);\r\n    assert(zone.get_local_time() == local);\r\n    assert(zone.get_info().begin == sys);\r\n}\r\n\r\nvoid zonedtime_exception_tests() {\r\n    const auto syd_tz          = ZT::locate_zone(Sydney::Tz_name);\r\n    const auto ambiguous_local = syd_tz->to_local(Sydney::Standard_begin_2020 - minutes{1});\r\n    assert(syd_tz->get_info(ambiguous_local).result == local_info::ambiguous);\r\n\r\n    // unsafe constructors\r\n    try {\r\n        (void) zoned_time<seconds>{ZT::locate_zone(Sydney::Tz_name), ambiguous_local};\r\n        assert(false);\r\n    } catch (const nonexistent_local_time&) {\r\n    } catch (const ambiguous_local_time&) {\r\n    }\r\n\r\n    try {\r\n        (void) zoned_time<seconds>{Sydney::Tz_name, ambiguous_local};\r\n        assert(false);\r\n    } catch (const nonexistent_local_time&) {\r\n    } catch (const ambiguous_local_time&) {\r\n    }\r\n\r\n    // safe constructors\r\n    try {\r\n        (void) zoned_time<seconds>{ZT::locate_zone(Sydney::Tz_name), ambiguous_local, choose::earliest};\r\n        (void) zoned_time<seconds>{Sydney::Tz_name, ambiguous_local, choose::earliest};\r\n    } catch (const nonexistent_local_time&) {\r\n        assert(false);\r\n    } catch (const ambiguous_local_time&) {\r\n        assert(false);\r\n    }\r\n\r\n    // unsafe operator\r\n    try {\r\n        zoned_time<seconds> zone{Sydney::Tz_name};\r\n        zone = ambiguous_local;\r\n        (void) zone;\r\n        assert(false);\r\n    } catch (const nonexistent_local_time&) {\r\n    } catch (const ambiguous_local_time&) {\r\n    }\r\n}\r\n\r\nstruct Always_zero {\r\n    [[nodiscard]] string_view name() const noexcept {\r\n        return \"Zero\";\r\n    }\r\n\r\n    template <class Duration>\r\n    [[nodiscard]] sys_info get_info(const sys_time<Duration>&) const {\r\n        return {};\r\n    }\r\n\r\n    template <class Duration>\r\n    [[nodiscard]] local_info get_info(const local_time<Duration>&) const {\r\n        return {};\r\n    }\r\n\r\n    template <class Duration>\r\n    [[nodiscard]] sys_time<common_type_t<Duration, seconds>> to_sys(const local_time<Duration>&) const {\r\n        return sys_time<common_type_t<Duration, seconds>>{};\r\n    }\r\n\r\n    template <class Duration>\r\n    [[nodiscard]] sys_time<common_type_t<Duration, seconds>> to_sys(const local_time<Duration>&, choose) const {\r\n        return sys_time<common_type_t<Duration, seconds>>{};\r\n    }\r\n\r\n    template <class Duration>\r\n    [[nodiscard]] local_time<common_type_t<Duration, seconds>> to_local(const sys_time<Duration>&) const {\r\n        return local_time<common_type_t<Duration, seconds>>{};\r\n    }\r\n};\r\n\r\nstruct Has_default : Always_zero {};\r\nstruct Has_locate : Always_zero {};\r\n\r\nAlways_zero zero_zone{};\r\nHas_default has_default_zone{};\r\nHas_locate has_locate_zone{};\r\n\r\ntemplate <>\r\nstruct zoned_traits<const Has_default*> {\r\n    [[nodiscard]] static const Has_default* default_zone() {\r\n        return &has_default_zone;\r\n    }\r\n\r\n    // missing string_view parameter...\r\n    [[nodiscard]] static const Has_locate* locate_zone() {\r\n        return &has_locate_zone;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct zoned_traits<const Has_locate*> {\r\n    [[nodiscard]] static const Has_locate* locate_zone(string_view) {\r\n        return &has_locate_zone;\r\n    }\r\n};\r\n\r\nvoid zonedtime_traits_test() {\r\n    // operation using timezone should always result in zero\r\n    using Always_zero_ptr = const Always_zero*;\r\n\r\n    zoned_time<seconds, Always_zero_ptr> zone{&zero_zone, sys_seconds{seconds{1}}};\r\n    assert(zone.get_time_zone() == &zero_zone);\r\n    assert(zone.get_sys_time() == sys_seconds{seconds{1}});\r\n    assert(sys_seconds{zone} == sys_seconds{seconds{1}});\r\n    assert(zone.get_local_time() == local_seconds{});\r\n    assert(local_seconds{zone} == local_seconds{});\r\n    assert(zone.get_info().begin == sys_seconds{});\r\n\r\n    zone = sys_seconds{seconds{2}};\r\n    assert(zone.get_sys_time() == sys_seconds{seconds{2}});\r\n    assert(sys_seconds{zone} == sys_seconds{seconds{2}});\r\n    assert(zone.get_local_time() == local_seconds{});\r\n    assert(local_seconds{zone} == local_seconds{});\r\n    assert(zone.get_info().begin == sys_seconds{});\r\n\r\n    zone = local_seconds{seconds{3}};\r\n    assert(zone.get_sys_time() == sys_seconds{}); // zero because timezone is used to compute sys_seconds\r\n    assert(sys_seconds{zone} == sys_seconds{});\r\n    assert(zone.get_local_time() == local_seconds{});\r\n    assert(local_seconds{zone} == local_seconds{});\r\n    assert(zone.get_info().begin == sys_seconds{});\r\n}\r\n\r\ntemplate <class TimeZonePtr, class Duration, bool Has_locate_zone, bool Result>\r\nconstexpr void assert_constructible_durations() {\r\n    using Zoned_seconds  = zoned_time<seconds, TimeZonePtr>;\r\n    using Zoned_duration = zoned_time<Duration, TimeZonePtr>;\r\n\r\n    static_assert(is_constructible_v<Zoned_seconds, Zoned_duration&> == Result);\r\n    static_assert(is_constructible_v<Zoned_seconds, TimeZonePtr, Zoned_duration&> == Result);\r\n    static_assert(is_constructible_v<Zoned_seconds, string_view, Zoned_duration&> == (Result && Has_locate_zone));\r\n    static_assert(is_constructible_v<Zoned_seconds, TimeZonePtr, Zoned_duration&> == Result);\r\n    static_assert(is_constructible_v<Zoned_seconds, string_view, Zoned_duration&> == (Result && Has_locate_zone));\r\n}\r\n\r\ntemplate <class TimeZonePtr, bool Has_default_zone, bool Has_locate_zone>\r\nconstexpr void assert_constructible() {\r\n    using Zoned           = zoned_time<seconds, TimeZonePtr>;\r\n    using Zoned_no_locate = zoned_time<seconds, const Always_zero*>;\r\n\r\n    static_assert(is_constructible_v<Zoned> == Has_default_zone);\r\n    static_assert(is_constructible_v<Zoned, const sys_time<seconds>&> == Has_default_zone);\r\n    static_assert(is_constructible_v<Zoned, TimeZonePtr> == true);\r\n    static_assert(is_constructible_v<Zoned, string_view> == Has_locate_zone);\r\n    static_assert(is_constructible_v<Zoned, const Zoned&> == true);\r\n    static_assert(is_constructible_v<Zoned, TimeZonePtr, const sys_time<seconds>&> == true);\r\n    static_assert(is_constructible_v<Zoned, string_view, const sys_time<seconds>&> == Has_locate_zone);\r\n    static_assert(is_constructible_v<Zoned, TimeZonePtr, const local_time<seconds>&> == true);\r\n    static_assert(is_constructible_v<Zoned, string_view, const local_time<seconds>&> == Has_locate_zone);\r\n    static_assert(is_constructible_v<Zoned, TimeZonePtr, const local_time<seconds>&, choose> == true);\r\n    static_assert(is_constructible_v<Zoned, string_view, const local_time<seconds>&, choose> == Has_locate_zone);\r\n    static_assert(is_constructible_v<Zoned, TimeZonePtr, const Zoned_no_locate&> == true);\r\n    static_assert(is_constructible_v<Zoned, string_view, const Zoned_no_locate&> == Has_locate_zone);\r\n    static_assert(is_constructible_v<Zoned, TimeZonePtr, const Zoned_no_locate&, choose> == true);\r\n    static_assert(is_constructible_v<Zoned, string_view, const Zoned_no_locate&, choose> == Has_locate_zone);\r\n\r\n    // when (_Duration2 != _Duration)\r\n    assert_constructible_durations<TimeZonePtr, seconds, Has_locate_zone, true>();\r\n    static_assert(is_convertible_v<sys_time<hours>, sys_time<seconds>> == true);\r\n    assert_constructible_durations<TimeZonePtr, hours, Has_locate_zone, true>();\r\n    static_assert(is_convertible_v<sys_time<milliseconds>, sys_time<seconds>> == false);\r\n    assert_constructible_durations<TimeZonePtr, milliseconds, Has_locate_zone, false>();\r\n}\r\n\r\nconstexpr void zonedtime_constraints_test() {\r\n    assert_constructible<const time_zone*, true, true>();\r\n    assert_constructible<const Always_zero*, false, false>();\r\n    assert_constructible<const Has_default*, true, false>();\r\n    assert_constructible<const Has_locate*, false, true>();\r\n}\r\n\r\nvoid test() {\r\n    zonedtime_constructor_test();\r\n    zonedtime_operator_test();\r\n    zonedtime_exception_tests();\r\n    zonedtime_traits_test();\r\n    zonedtime_constraints_test();\r\n}\r\n\r\nint main() {\r\n    run_tz_test([] { test(); });\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0356R5_bind_front/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0356R5_bind_front/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n#include <memory>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nconstexpr int f0() {\r\n    return 1729;\r\n}\r\n\r\nconstexpr int f1(int x) {\r\n    return x * 10;\r\n}\r\n\r\nconstexpr int f2(int x, int y) {\r\n    return x * 100 + y * 10;\r\n}\r\n\r\nconstexpr int f3(int x, int y, int z) {\r\n    return x * 1000 + y * 100 + z * 10;\r\n}\r\n\r\nstruct Cat {\r\n    string name;\r\n\r\n    constexpr string noise(const string& s) const {\r\n        return name + \" says \" + s;\r\n    }\r\n};\r\n\r\nstruct DetectQualifiers {\r\n    constexpr string_view operator()() & {\r\n        return \"modifiable lvalue\";\r\n    }\r\n\r\n    constexpr string_view operator()() const& {\r\n        return \"const lvalue\";\r\n    }\r\n\r\n    constexpr string_view operator()() && {\r\n        return \"modifiable rvalue\";\r\n    }\r\n\r\n    constexpr string_view operator()() const&& {\r\n        return \"const rvalue\";\r\n    }\r\n};\r\n\r\n_CONSTEXPR23 void test_movable_only_types() {\r\n    auto unique_lambda = [up1 = make_unique<int>(1200)](unique_ptr<int>&& up2) {\r\n        if (up1 && up2) {\r\n            return make_unique<int>(*up1 + *up2);\r\n        } else if (up1) {\r\n            return make_unique<int>(*up1 * -1);\r\n        } else if (up2) {\r\n            return make_unique<int>(*up2 * -10);\r\n        } else {\r\n            return make_unique<int>(-9000);\r\n        }\r\n    };\r\n    auto bound6 = bind_front(move(unique_lambda), make_unique<int>(34));\r\n    assert(*unique_lambda(make_unique<int>(56)) == -560);\r\n    assert(*move(bound6)() == 1234);\r\n    auto bound7 = move(bound6);\r\n    assert(*move(bound6)() == -9000);\r\n    assert(*move(bound7)() == 1234);\r\n}\r\n\r\nconstexpr bool test_constexpr() {\r\n    // Test varying numbers of arguments.\r\n    assert(bind_front(f0)() == 1729);\r\n\r\n    assert(bind_front(f1)(2) == 20);\r\n    assert(bind_front(f1, 3)() == 30);\r\n\r\n    assert(bind_front(f2)(4, 5) == 450);\r\n    assert(bind_front(f2, 6)(7) == 670);\r\n    assert(bind_front(f2, 8, 9)() == 890);\r\n\r\n    assert(bind_front(f3)(2, 3, 4) == 2340);\r\n    assert(bind_front(f3, 3)(4, 5) == 3450);\r\n    assert(bind_front(f3, 4, 5)(6) == 4560);\r\n    assert(bind_front(f3, 5, 6, 7)() == 5670);\r\n\r\n    // Test function pointers.\r\n    assert(bind_front(&f0)() == 1729);\r\n    assert(bind_front(&f2, 6)(7) == 670);\r\n\r\n    // Test stateless lambdas.\r\n    assert(bind_front([] { return 11; })() == 11);\r\n    assert(bind_front([](int x, int y) { return x * 2 + y * 3; }, 100)(10) == 230);\r\n\r\n    // Test stateful lambdas.\r\n    int value = 0;\r\n\r\n    auto bound0 = bind_front([&value] { ++value; });\r\n    bound0();\r\n    assert(value == 1);\r\n    bound0();\r\n    assert(value == 2);\r\n\r\n    auto bound1 = bind_front([&value](int x, int y) { value = value * x + y; }, 10);\r\n    bound1(3);\r\n    assert(value == 23);\r\n    bound1(4);\r\n    assert(value == 234);\r\n\r\n    // Test PMFs.\r\n    Cat cat{\"Peppermint\"};\r\n    auto bound2 = bind_front(&Cat::noise, cat); // stores a copy\r\n    assert(bound2(\"meow\") == \"Peppermint says meow\");\r\n    cat.name = \"Fluffy\";\r\n    assert(cat.noise(\"hiss\") == \"Fluffy says hiss\");\r\n    assert(bound2(\"purr\") == \"Peppermint says purr\");\r\n\r\n    auto bound3 = bind_front(&Cat::noise, &cat); // stores a pointer\r\n    assert(bound3(\"MEOW\") == \"Fluffy says MEOW\");\r\n    cat.name = \"Peppermint\";\r\n    assert(bound3(\"PURR\") == \"Peppermint says PURR\");\r\n\r\n    auto bound4 = bind_front(&Cat::noise, ref(cat)); // stores a reference_wrapper\r\n    assert(bound4(\"Why do you keep renaming me?\") == \"Peppermint says Why do you keep renaming me?\");\r\n    cat.name = \"Cat\";\r\n    assert(bound4(\"You can't rename me anymore, Human\") == \"Cat says You can't rename me anymore, Human\");\r\n\r\n    // Test \"perfect forwarding call wrapper\" behavior.\r\n    auto bound5 = bind_front(DetectQualifiers{});\r\n    assert(bound5() == \"modifiable lvalue\");\r\n    assert(as_const(bound5)() == \"const lvalue\");\r\n    assert(move(bound5)() == \"modifiable rvalue\");\r\n    assert(move(as_const(bound5))() == \"const rvalue\");\r\n\r\n#if _HAS_CXX23\r\n    test_movable_only_types();\r\n#else // _HAS_CXX23\r\n    if (!is_constant_evaluated()) {\r\n        test_movable_only_types();\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    // Test decay when binding.\r\n    const int arr[] = {11, 22, 33};\r\n    const int three = 3;\r\n\r\n    auto bound8 = bind_front(\r\n        [](auto&& a, auto&& f, auto&& i) {\r\n            using FP = int (*)(int);\r\n            return is_same_v<decltype(a), const int*&> && is_same_v<decltype(f), FP&> && is_same_v<decltype(i), int&>;\r\n        },\r\n        arr, f1, three);\r\n    assert(bound8());\r\n\r\n    // Test forward when calling.\r\n    auto bound9 = bind_front([](auto&& a1, auto&& a2, auto&& a3, auto&& a4) {\r\n        constexpr bool same1 = is_same_v<decltype(a1), int&>;\r\n        constexpr bool same2 = is_same_v<decltype(a2), const int&>;\r\n        constexpr bool same3 = is_same_v<decltype(a3), int&&>;\r\n        constexpr bool same4 = is_same_v<decltype(a4), const int&&>;\r\n        return same1 && same2 && same3 && same4;\r\n    });\r\n    assert(bound9(value, three, 1729, move(three)));\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    assert(test_constexpr());\r\n    static_assert(test_constexpr());\r\n\r\n    // Also test GH-1292 \"bind_front violates [func.require]p8\" in which the return type of bind_front inadvertently\r\n    // depends on the value category and/or cv-qualification of its arguments.\r\n    {\r\n        struct S {\r\n            int i = 42;\r\n        };\r\n        S s;\r\n        auto lambda               = [](S x) { return x.i; };\r\n        auto returns_lambda       = [=] { return lambda; };\r\n        auto returns_const_lambda = [=]() -> const decltype(lambda) { return lambda; };\r\n        auto returns_const_S      = []() -> const S { return {}; };\r\n\r\n        using T = decltype(bind_front(lambda, s));\r\n        static_assert(is_same_v<decltype(bind_front(lambda, move(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(lambda, S{})), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_front(move(lambda), s)), T>);\r\n        static_assert(is_same_v<decltype(bind_front(move(lambda), move(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(move(lambda), S{})), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_front(returns_lambda(), s)), T>);\r\n        static_assert(is_same_v<decltype(bind_front(returns_lambda(), move(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(returns_lambda(), S{})), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_front(lambda, as_const(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(lambda, move(as_const(s)))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(lambda, returns_const_S())), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_front(move(lambda), as_const(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(move(lambda), move(as_const(s)))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(move(lambda), returns_const_S())), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_front(returns_lambda(), as_const(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(returns_lambda(), move(as_const(s)))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(returns_lambda(), returns_const_S())), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_front(as_const(lambda), s)), T>);\r\n        static_assert(is_same_v<decltype(bind_front(as_const(lambda), move(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(as_const(lambda), S{})), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_front(move(as_const(lambda)), s)), T>);\r\n        static_assert(is_same_v<decltype(bind_front(move(as_const(lambda)), move(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(move(as_const(lambda)), S{})), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_front(returns_const_lambda(), s)), T>);\r\n        static_assert(is_same_v<decltype(bind_front(returns_const_lambda(), move(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(returns_const_lambda(), S{})), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_front(as_const(lambda), as_const(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(as_const(lambda), move(as_const(s)))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(as_const(lambda), returns_const_S())), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_front(move(as_const(lambda)), as_const(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(move(as_const(lambda)), move(as_const(s)))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(move(as_const(lambda)), returns_const_S())), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_front(returns_const_lambda(), as_const(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(returns_const_lambda(), move(as_const(s)))), T>);\r\n        static_assert(is_same_v<decltype(bind_front(returns_const_lambda(), returns_const_S())), T>);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0357R3_supporting_incomplete_types_in_reference_wrapper/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0357R3_supporting_incomplete_types_in_reference_wrapper/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <functional>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nstruct incomplete;\r\n\r\ntemplate <class T>\r\nvoid touch_reference_wrapper_members(reference_wrapper<T> r) {\r\n    static_assert(is_same_v<T, typename reference_wrapper<T>::type>);\r\n    [[maybe_unused]] auto cpy = r;\r\n    cpy                       = r;\r\n    (void) r.get();\r\n    (void) static_cast<T&>(r);\r\n}\r\n\r\nvoid example(incomplete* i) {\r\n    const reference_wrapper a(*i);\r\n    touch_reference_wrapper_members(a);\r\n    touch_reference_wrapper_members(ref(*i));\r\n    touch_reference_wrapper_members(cref(*i));\r\n    touch_reference_wrapper_members(ref(a));\r\n    touch_reference_wrapper_members(cref(a));\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0401R6_allocate_at_least/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0401R6_allocate_at_least/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstdint>\r\n#include <memory>\r\n#include <numeric>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nstatic_assert(is_standard_layout_v<allocation_result<int*>>);\r\nstatic_assert(is_trivially_copyable_v<allocation_result<int*>>);\r\n\r\nstruct generous_allocator {\r\n    using value_type = int;\r\n\r\n    allocator<int> inner;\r\n\r\n    [[nodiscard]] constexpr int* allocate(const size_t count) {\r\n        return inner.allocate(max(count, static_cast<size_t>(16)));\r\n    }\r\n\r\n    [[nodiscard]] constexpr allocation_result<int*> allocate_at_least(const size_t count) {\r\n        return {inner.allocate(max(count, static_cast<size_t>(16))), max(count, static_cast<size_t>(16))};\r\n    }\r\n\r\n    constexpr void deallocate(int* ptr, const size_t count) {\r\n        inner.deallocate(ptr, max(count, static_cast<size_t>(16)));\r\n    }\r\n};\r\n\r\nstruct strict_allocator {\r\n    using value_type = int;\r\n\r\n    allocator<int> inner;\r\n\r\n    [[nodiscard]] constexpr int* allocate(const size_t count) {\r\n        return inner.allocate(count);\r\n    }\r\n\r\n    constexpr void deallocate(int* ptr, const size_t count) {\r\n        inner.deallocate(ptr, count);\r\n    }\r\n};\r\n\r\nstruct small_allocator {\r\n    using value_type = int;\r\n    using size_type  = uint32_t;\r\n\r\n    [[nodiscard]] constexpr int* allocate(const size_type count) {\r\n        return allocator<int>{}.allocate(count);\r\n    }\r\n\r\n    constexpr void deallocate(int* ptr, const size_type count) {\r\n        allocator<int>{}.deallocate(ptr, count);\r\n    }\r\n};\r\n\r\nstruct huge_allocator {\r\n    using value_type = int;\r\n    using size_type  = uint64_t;\r\n\r\n    [[nodiscard]] constexpr int* allocate(const size_type count) {\r\n        return allocator<int>{}.allocate(static_cast<size_t>(count));\r\n    }\r\n\r\n    constexpr void deallocate(int* ptr, const size_type count) {\r\n        allocator<int>{}.deallocate(ptr, static_cast<size_t>(count));\r\n    }\r\n};\r\n\r\nconstexpr bool test() {\r\n    {\r\n        allocator<int> al;\r\n\r\n        same_as<allocation_result<int*>> auto result = al.allocate_at_least(5);\r\n        assert(result.ptr);\r\n        assert(result.count >= 5);\r\n        al.deallocate(result.ptr, 5);\r\n\r\n        result = al.allocate_at_least(7);\r\n        assert(result.ptr);\r\n        assert(result.count >= 7);\r\n        al.deallocate(result.ptr, result.count);\r\n\r\n        result = al.allocate_at_least(9);\r\n        assert(result.ptr);\r\n        assert(result.count >= 9);\r\n        al.deallocate(result.ptr, midpoint(static_cast<size_t>(9), result.count));\r\n    }\r\n\r\n    {\r\n        generous_allocator al;\r\n\r\n        same_as<allocation_result<int*>> auto result = allocator_traits<generous_allocator>::allocate_at_least(al, 4);\r\n        assert(result.ptr);\r\n        assert(result.count == 16);\r\n        al.deallocate(result.ptr, result.count);\r\n    }\r\n\r\n    {\r\n        strict_allocator al;\r\n\r\n        same_as<allocation_result<int*>> auto result = allocator_traits<strict_allocator>::allocate_at_least(al, 4);\r\n        assert(result.ptr);\r\n        assert(result.count == 4);\r\n        al.deallocate(result.ptr, result.count);\r\n    }\r\n\r\n    {\r\n        small_allocator al;\r\n\r\n        same_as<allocation_result<int*, uint32_t>> auto result =\r\n            allocator_traits<small_allocator>::allocate_at_least(al, 4);\r\n        assert(result.ptr);\r\n        assert(result.count == 4);\r\n        al.deallocate(result.ptr, result.count);\r\n    }\r\n\r\n    {\r\n        huge_allocator al;\r\n\r\n        same_as<allocation_result<int*, uint64_t>> auto result =\r\n            allocator_traits<huge_allocator>::allocate_at_least(al, 4);\r\n        assert(result.ptr);\r\n        assert(result.count == 4);\r\n        al.deallocate(result.ptr, result.count);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test();\r\n    static_assert(test());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0408R7_efficient_access_to_stringbuf_buffer/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0408R7_efficient_access_to_stringbuf_buffer/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <ios>\r\n#include <memory>\r\n#include <memory_resource>\r\n#include <sstream>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\nconstexpr char empty_string[] = \"\";\r\nconstexpr char small_string[] = \"a\";\r\nconstexpr char large_string[] =\r\n    \"This is a long long long long long long long long string to avoid small string optimization.\";\r\n\r\ntemplate <typename Stream>\r\nstruct test_rvalue {\r\n    void operator()(const string& init_value) {\r\n        test(init_value, ios_base::in);\r\n        test(init_value, ios_base::out);\r\n        test(init_value, ios_base::app);\r\n        test(init_value, ios_base::ate);\r\n    }\r\n\r\n    void test(const string& init_value, const ios_base::openmode mode) {\r\n        string buffer{init_value};\r\n        size_t res = buffer.capacity();\r\n        Stream stream{move(buffer), mode};\r\n\r\n        // If the stream cannot be written or read we do nothing\r\n        const auto buffer_view = stream.rdbuf()->_Get_buffer_view();\r\n        if (!buffer_view._Ptr) {\r\n            assert(!(mode & ios_base::in) && !(mode & ios_base::out));\r\n            assert(buffer == init_value);\r\n            return;\r\n        }\r\n\r\n        assert(stream.view() == init_value);\r\n        assert(stream.str() == init_value);\r\n        assert(stream.view() == init_value);\r\n        assert(stream.rdbuf()->get_allocator() == init_value.get_allocator());\r\n        // Move out the buffer, the underlying buffer should be empty.\r\n        buffer = move(stream).str();\r\n        if (buffer == large_string) {\r\n            // stream doesn't actually have space for a null-terminator\r\n            assert(buffer.capacity() == res);\r\n        } else {\r\n            assert(buffer.capacity() == res + 1);\r\n        }\r\n        assert(buffer == init_value);\r\n        assert(stream.view().empty());\r\n        assert(stream.str().empty());\r\n        // Move in the buffer string\r\n        stream.str(move(buffer));\r\n        assert(stream.view() == init_value);\r\n        assert(stream.str() == init_value);\r\n        assert(stream.rdbuf()->get_allocator() == init_value.get_allocator());\r\n        // Move to another stream\r\n        Stream stream2 = move(stream);\r\n        assert(stream.view().empty());\r\n        assert(stream2.view() == init_value);\r\n    }\r\n};\r\n\r\ntemplate <typename Stream>\r\nstruct test_allocator {\r\n    void operator()(const pmr::string& init_value) {\r\n        Stream stream{init_value};\r\n        assert(stream.view() == init_value);\r\n        assert(stream.str(init_value.get_allocator()) == init_value);\r\n        assert(stream.str() == string_view{init_value});\r\n        assert(move(stream).str() == string_view{init_value});\r\n        assert(stream.view().empty());\r\n        stream.str(init_value);\r\n        assert(stream.view() == init_value);\r\n        assert(stream.str(init_value.get_allocator()) == init_value);\r\n        assert(stream.str() == string_view{init_value});\r\n    }\r\n};\r\n\r\ntemplate <typename Stream>\r\nstruct test_pmr_allocator {\r\n    pmr::polymorphic_allocator<char> alloc;\r\n\r\n    void operator()(const pmr::string& init_value) {\r\n        Stream stream{init_value, alloc};\r\n        assert(stream.rdbuf()->get_allocator() != init_value.get_allocator());\r\n        {\r\n            pmr::string new_str = stream.str(init_value.get_allocator());\r\n            assert(new_str == init_value);\r\n            assert(new_str.get_allocator() == init_value.get_allocator());\r\n        }\r\n        {\r\n            pmr::string new_str = stream.str();\r\n            assert(new_str == init_value);\r\n            assert(new_str.get_allocator() != init_value.get_allocator());\r\n        }\r\n        stream.str(init_value);\r\n        assert(stream.rdbuf()->get_allocator() != init_value.get_allocator());\r\n        {\r\n            pmr::string new_str = stream.str(init_value.get_allocator());\r\n            assert(new_str == init_value);\r\n            assert(new_str.get_allocator() == init_value.get_allocator());\r\n        }\r\n        {\r\n            pmr::string new_str = stream.str();\r\n            assert(new_str == init_value);\r\n            assert(new_str.get_allocator() != init_value.get_allocator());\r\n        }\r\n        Stream stream2{init_value, init_value.get_allocator()};\r\n        assert(stream2.rdbuf()->get_allocator() == init_value.get_allocator());\r\n\r\n        // GH-4232: <sstream>: basic_stringbuf shouldn't implement moving with swapping\r\n\r\n        // Move to another stream buffer with different allocators\r\n        using SBuf = remove_pointer_t<decltype(stream.rdbuf())>;\r\n        SBuf& sbuf = *stream.rdbuf();\r\n        SBuf sbuf2{move(sbuf), init_value.get_allocator()};\r\n        assert(sbuf2.get_allocator() != sbuf.get_allocator());\r\n        assert(stream.view().empty());\r\n        assert(sbuf2.view() == init_value);\r\n\r\n        // Move assignment between different memory resources\r\n        sbuf = move(sbuf2);\r\n        assert(sbuf2.get_allocator() != sbuf.get_allocator());\r\n        assert(sbuf2.view().empty());\r\n        assert(stream.view() == init_value);\r\n    }\r\n};\r\n\r\ntemplate <typename Test>\r\nvoid run_test_util() {\r\n    Test test{};\r\n    test(empty_string);\r\n    test(small_string);\r\n    test(large_string);\r\n}\r\n\r\ntemplate <template <typename> typename Test>\r\nvoid run_test() {\r\n    run_test_util<Test<stringstream>>();\r\n    run_test_util<Test<istringstream>>();\r\n    run_test_util<Test<ostringstream>>();\r\n}\r\n\r\nusing pmr_stringstream  = basic_stringstream<char, char_traits<char>, pmr::polymorphic_allocator<char>>;\r\nusing pmr_istringstream = basic_istringstream<char, char_traits<char>, pmr::polymorphic_allocator<char>>;\r\nusing pmr_ostringstream = basic_ostringstream<char, char_traits<char>, pmr::polymorphic_allocator<char>>;\r\n\r\ntemplate <typename Test>\r\nvoid run_pmr_allocator_test_util() {\r\n    pmr::monotonic_buffer_resource resource{};\r\n    Test test{pmr::polymorphic_allocator<char>{&resource}};\r\n    test(empty_string);\r\n    test(small_string);\r\n    test(large_string);\r\n}\r\n\r\nvoid run_pmr_allocator_test() {\r\n    run_pmr_allocator_test_util<test_pmr_allocator<pmr_stringstream>>();\r\n    run_pmr_allocator_test_util<test_pmr_allocator<pmr_istringstream>>();\r\n    run_pmr_allocator_test_util<test_pmr_allocator<pmr_ostringstream>>();\r\n}\r\n\r\ntemplate <typename T>\r\nstruct counting_allocator {\r\n    using value_type = T;\r\n\r\n    shared_ptr<size_t> count{make_shared<size_t>(size_t{0})};\r\n\r\n    T* allocate(size_t n) {\r\n        ++*count;\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* p, size_t n) {\r\n        allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    counting_allocator() {}\r\n\r\n    template <typename U>\r\n    explicit counting_allocator(const counting_allocator<U>& c) : count(c.count) {}\r\n};\r\n\r\ntemplate <typename T, typename U>\r\nbool operator==(const counting_allocator<T>&, const counting_allocator<U>&) {\r\n    return true;\r\n}\r\n\r\nusing counting_string        = basic_string<char, char_traits<char>, counting_allocator<char>>;\r\nusing counting_stringstream  = basic_stringstream<char, char_traits<char>, counting_allocator<char>>;\r\nusing counting_istringstream = basic_istringstream<char, char_traits<char>, counting_allocator<char>>;\r\nusing counting_ostringstream = basic_ostringstream<char, char_traits<char>, counting_allocator<char>>;\r\n\r\ntemplate <typename Stream>\r\nstruct test_counting_allocator {\r\n    void operator()(counting_string s) {\r\n        shared_ptr<size_t> pcount = s.get_allocator().count;\r\n        Stream stream{move(s)};\r\n        s = move(stream).str();\r\n        stream.str(move(s));\r\n        assert(*pcount == 1);\r\n    }\r\n};\r\n\r\ntemplate <template <typename> typename Test>\r\nvoid run_counting_test() {\r\n    run_test_util<Test<counting_stringstream>>();\r\n    run_test_util<Test<counting_istringstream>>();\r\n    run_test_util<Test<counting_ostringstream>>();\r\n}\r\n\r\ntemplate <const char* str>\r\nvoid test_iterator_dereference_death() {\r\n    string s      = str;\r\n    auto iterator = s.begin();\r\n    stringstream stream{move(s)};\r\n    (void) *iterator; // cannot dereference invalid iterator\r\n}\r\n\r\ntemplate <const char* str>\r\nvoid test_iterator_operator_arrow_death() {\r\n    string s      = str;\r\n    auto iterator = s.begin();\r\n    stringstream stream{move(s)};\r\n    (void) iterator.operator->(); // cannot dereference invalid iterator\r\n}\r\n\r\ntemplate <const char* str>\r\nvoid test_iterator_increment_death() {\r\n    string s      = str;\r\n    auto iterator = s.begin();\r\n    stringstream stream{move(s)};\r\n    ++iterator; // cannot increase invalid iterator\r\n}\r\n\r\nvoid test_iterator_increment_zero(const char* str) {\r\n    string s      = str;\r\n    auto iterator = s.begin();\r\n    stringstream stream{move(s)};\r\n    iterator += 0; // OK\r\n}\r\n\r\nclass test_stringbuf : public stringbuf {\r\npublic:\r\n    using stringbuf::basic_stringbuf;\r\n\r\n    using stringbuf::eback;\r\n    using stringbuf::egptr;\r\n    using stringbuf::epptr;\r\n    using stringbuf::gptr;\r\n    using stringbuf::pbase;\r\n    using stringbuf::pptr;\r\n};\r\n\r\nvoid test_init_buf_ptrs_out(test_stringbuf& buf) {\r\n    assert(*buf.pbase() == large_string[0]);\r\n    assert(buf.epptr() >= buf.pbase() + buf.view().size());\r\n    assert(buf.pptr() == buf.pbase());\r\n}\r\n\r\nvoid test_init_buf_ptrs_out_ate(test_stringbuf& buf) {\r\n    assert(*buf.pbase() == large_string[0]);\r\n    assert(buf.epptr() >= buf.pbase() + buf.view().size());\r\n    assert(buf.pptr() == buf.pbase() + buf.view().size());\r\n}\r\n\r\nvoid test_init_buf_ptrs_in(test_stringbuf& buf) {\r\n    assert(*buf.eback() == large_string[0]);\r\n    assert(buf.gptr() == buf.eback() && buf.egptr() == buf.eback() + buf.view().size());\r\n}\r\n\r\nvoid test_init_buf_ptrs() {\r\n    test_stringbuf buf1{string{large_string}, ios_base::out};\r\n    test_init_buf_ptrs_out(buf1);\r\n\r\n    test_stringbuf buf2{string{large_string}, ios_base::out | ios_base::ate};\r\n    test_init_buf_ptrs_out_ate(buf2);\r\n\r\n    test_stringbuf buf3{string{large_string}, ios_base::in};\r\n    test_init_buf_ptrs_in(buf3);\r\n\r\n    test_stringbuf buf4{string{large_string}, ios_base::in | ios_base::out};\r\n    test_init_buf_ptrs_out(buf4);\r\n    test_init_buf_ptrs_in(buf4);\r\n\r\n    test_stringbuf buf5{string{large_string}, ios_base::in | ios_base::out | ios_base::ate};\r\n    test_init_buf_ptrs_out_ate(buf5);\r\n    test_init_buf_ptrs_in(buf5);\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec([] {\r\n        run_test<test_rvalue>();\r\n        run_test<test_allocator>();\r\n        run_pmr_allocator_test();\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\n        run_counting_test<test_counting_allocator>();\r\n#endif // _ITERATOR_DEBUG_LEVEL == 0\r\n\r\n        test_iterator_increment_zero(small_string);\r\n        test_iterator_increment_zero(large_string);\r\n\r\n        test_init_buf_ptrs();\r\n    });\r\n\r\n#if _ITERATOR_DEBUG_LEVEL > 0\r\n    exec.add_death_tests({\r\n        test_iterator_dereference_death<small_string>,\r\n        test_iterator_operator_arrow_death<small_string>,\r\n        test_iterator_increment_death<small_string>,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL > 0\r\n\r\n#if _ITERATOR_DEBUG_LEVEL > 1\r\n    exec.add_death_tests({\r\n        test_iterator_dereference_death<large_string>,\r\n        test_iterator_operator_arrow_death<large_string>,\r\n        test_iterator_increment_death<large_string>,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL > 1\r\n\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0414R2_shared_ptr_for_arrays/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0414R2_shared_ptr_for_arrays/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <memory>\r\n#include <sstream>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <typename T>\r\nvoid assert_empty_null(const shared_ptr<T>& sp) {\r\n    assert(sp.use_count() == 0);\r\n    assert(sp.get() == nullptr);\r\n}\r\n\r\nstruct NullDeleter {\r\n    void operator()(nullptr_t) const noexcept {}\r\n};\r\n\r\n\r\nvoid test_shared_ptr_typedefs() {\r\n    STATIC_ASSERT(is_same_v<shared_ptr<string[]>::element_type, string>);\r\n    STATIC_ASSERT(is_same_v<shared_ptr<string[4]>::element_type, string>);\r\n    STATIC_ASSERT(is_same_v<shared_ptr<const string[]>::element_type, const string>);\r\n    STATIC_ASSERT(is_same_v<shared_ptr<const string[4]>::element_type, const string>);\r\n\r\n#if _HAS_CXX17\r\n    STATIC_ASSERT(is_same_v<shared_ptr<string[]>::weak_type, weak_ptr<string[]>>);\r\n    STATIC_ASSERT(is_same_v<shared_ptr<string[4]>::weak_type, weak_ptr<string[4]>>);\r\n    STATIC_ASSERT(is_same_v<shared_ptr<const string[]>::weak_type, weak_ptr<const string[]>>);\r\n    STATIC_ASSERT(is_same_v<shared_ptr<const string[4]>::weak_type, weak_ptr<const string[4]>>);\r\n#endif // _HAS_CXX17\r\n}\r\n\r\nvoid test_shared_ptr_default_ctor() {\r\n    STATIC_ASSERT(is_nothrow_default_constructible_v<shared_ptr<string[]>>);\r\n    STATIC_ASSERT(is_nothrow_default_constructible_v<shared_ptr<string[4]>>);\r\n\r\n    shared_ptr<string[]> sp0;\r\n    shared_ptr<string[4]> sp1;\r\n\r\n    assert_empty_null(sp0);\r\n    assert_empty_null(sp1);\r\n}\r\n\r\nvoid test_shared_ptr_nullptr_ctor() {\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<string[]>, nullptr_t>);\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<string[4]>, nullptr_t>);\r\n\r\n    shared_ptr<string[]> sp0  = nullptr;\r\n    shared_ptr<string[4]> sp1 = nullptr;\r\n\r\n    assert_empty_null(sp0);\r\n    assert_empty_null(sp1);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid impl_shared_ptr_rawptr_ctor() {\r\n    string* p = new string[4];\r\n    shared_ptr<T> sp(p);\r\n    assert(sp.use_count() == 1);\r\n    assert(sp.get() == p);\r\n}\r\n\r\nvoid test_shared_ptr_rawptr_ctor() {\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<string[]>, string*>);\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<string[4]>, string*>);\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[]>, const string*>);\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[4]>, const string*>);\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[]>, string*>);\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[4]>, string*>);\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[]>, const string*>);\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[4]>, const string*>);\r\n\r\n    impl_shared_ptr_rawptr_ctor<string[]>();\r\n    impl_shared_ptr_rawptr_ctor<string[4]>();\r\n    impl_shared_ptr_rawptr_ctor<const string[]>();\r\n    impl_shared_ptr_rawptr_ctor<const string[4]>();\r\n}\r\n\r\ntemplate <typename T, typename Del>\r\nvoid impl_shared_ptr_rawptr_del_ctor() {\r\n    string* p = new string[4];\r\n    shared_ptr<T> sp(p, Del{});\r\n    assert(sp.use_count() == 1);\r\n    assert(sp.get() == p);\r\n}\r\n\r\nvoid test_shared_ptr_rawptr_del_ctor() {\r\n    using Del = default_delete<const string[]>;\r\n\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<string[]>, string*, Del>);\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<string[4]>, string*, Del>);\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[]>, const string*, Del>);\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[4]>, const string*, Del>);\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[]>, string*, Del>);\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[4]>, string*, Del>);\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[]>, const string*, Del>);\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[4]>, const string*, Del>);\r\n\r\n    impl_shared_ptr_rawptr_del_ctor<string[], Del>();\r\n    impl_shared_ptr_rawptr_del_ctor<string[4], Del>();\r\n    impl_shared_ptr_rawptr_del_ctor<const string[], Del>();\r\n    impl_shared_ptr_rawptr_del_ctor<const string[4], Del>();\r\n}\r\n\r\ntemplate <typename T, typename Del, typename Al>\r\nvoid impl_shared_ptr_rawptr_del_al_ctor() {\r\n    string* p = new string[4];\r\n    shared_ptr<T> sp(p, Del{}, Al{});\r\n    assert(sp.use_count() == 1);\r\n    assert(sp.get() == p);\r\n}\r\n\r\nvoid test_shared_ptr_rawptr_del_al_ctor() {\r\n    using Del = default_delete<const string[]>;\r\n    using Al  = allocator<int>;\r\n\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<string[]>, string*, Del, Al>);\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<string[4]>, string*, Del, Al>);\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[]>, const string*, Del, Al>);\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[4]>, const string*, Del, Al>);\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[]>, string*, Del, Al>);\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[4]>, string*, Del, Al>);\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[]>, const string*, Del, Al>);\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[4]>, const string*, Del, Al>);\r\n\r\n    impl_shared_ptr_rawptr_del_al_ctor<string[], Del, Al>();\r\n    impl_shared_ptr_rawptr_del_al_ctor<string[4], Del, Al>();\r\n    impl_shared_ptr_rawptr_del_al_ctor<const string[], Del, Al>();\r\n    impl_shared_ptr_rawptr_del_al_ctor<const string[4], Del, Al>();\r\n}\r\n\r\ntemplate <typename T>\r\nvoid impl_shared_ptr_nullptr_del_ctor() {\r\n    using Del = NullDeleter;\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<T>, nullptr_t, Del>);\r\n    shared_ptr<T> sp(nullptr, Del{});\r\n    assert(sp.use_count() == 1);\r\n    assert(sp.get() == nullptr);\r\n}\r\n\r\nvoid test_shared_ptr_nullptr_del_ctor() {\r\n    impl_shared_ptr_nullptr_del_ctor<string[]>();\r\n    impl_shared_ptr_nullptr_del_ctor<string[4]>();\r\n    impl_shared_ptr_nullptr_del_ctor<const string[]>();\r\n    impl_shared_ptr_nullptr_del_ctor<const string[4]>();\r\n}\r\n\r\ntemplate <typename T>\r\nvoid impl_shared_ptr_nullptr_del_al_ctor() {\r\n    using Del = NullDeleter;\r\n    using Al  = allocator<int>;\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<T>, nullptr_t, Del, Al>);\r\n    shared_ptr<T> sp(nullptr, Del{}, Al{});\r\n    assert(sp.use_count() == 1);\r\n    assert(sp.get() == nullptr);\r\n}\r\n\r\nvoid test_shared_ptr_nullptr_del_al_ctor() {\r\n    impl_shared_ptr_nullptr_del_al_ctor<string[]>();\r\n    impl_shared_ptr_nullptr_del_al_ctor<string[4]>();\r\n    impl_shared_ptr_nullptr_del_al_ctor<const string[]>();\r\n    impl_shared_ptr_nullptr_del_al_ctor<const string[4]>();\r\n}\r\n\r\nvoid test_shared_ptr_aliasing_ctor() {\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<string[]>, const shared_ptr<array<string, 4>>&, string*>);\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<string[4]>, const shared_ptr<array<string, 4>>&, string*>);\r\n    STATIC_ASSERT(\r\n        is_nothrow_constructible_v<shared_ptr<const string[]>, const shared_ptr<array<string, 4>>&, const string*>);\r\n    STATIC_ASSERT(\r\n        is_nothrow_constructible_v<shared_ptr<const string[4]>, const shared_ptr<array<string, 4>>&, const string*>);\r\n\r\n    const auto sp_arr = make_shared<array<string, 4>>();\r\n    string* p         = sp_arr->data();\r\n    const string* c   = p;\r\n\r\n    shared_ptr<string[]> sp0(sp_arr, p);\r\n    shared_ptr<string[4]> sp1(sp_arr, p);\r\n    shared_ptr<const string[]> sp2(sp_arr, c);\r\n    shared_ptr<const string[4]> sp3(sp_arr, c);\r\n\r\n    assert(sp0.use_count() == 5);\r\n    assert(sp1.use_count() == 5);\r\n    assert(sp2.use_count() == 5);\r\n    assert(sp3.use_count() == 5);\r\n\r\n    assert(sp0.get() == p);\r\n    assert(sp1.get() == p);\r\n    assert(sp2.get() == c);\r\n    assert(sp3.get() == c);\r\n}\r\n\r\ntemplate <typename Dest, typename Src>\r\nvoid impl_shared_ptr_all_copy_ctors() {\r\n    const shared_ptr<Src> orig(new string[4]);\r\n    shared_ptr<Dest> cpy = orig;\r\n    assert(cpy.use_count() == 2);\r\n    assert(cpy.get() == orig.get());\r\n\r\n    const shared_ptr<Src> empty;\r\n    shared_ptr<Dest> emp2 = empty;\r\n    assert_empty_null(emp2);\r\n}\r\n\r\nvoid test_shared_ptr_all_copy_ctors() {\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<string[]>,\r\n        const shared_ptr<string[]>&>); // GOOD: same (plain, not converting)\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<string[]>,\r\n        const shared_ptr<string[4]>&>); // GOOD: known-to-unknown is compatible\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[]>, const shared_ptr<const string[]>&>); // BAD: drops const\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[]>, const shared_ptr<const string[4]>&>); // BAD: drops const\r\n\r\n    STATIC_ASSERT(\r\n        !is_constructible_v<shared_ptr<string[4]>, const shared_ptr<string[]>&>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<string[4]>,\r\n        const shared_ptr<string[4]>&>); // GOOD: same (plain, not converting)\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[4]>, const shared_ptr<const string[]>&>); // BAD: drops const\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[4]>, const shared_ptr<const string[4]>&>); // BAD: drops const\r\n\r\n    STATIC_ASSERT(\r\n        is_nothrow_constructible_v<shared_ptr<const string[]>, const shared_ptr<string[]>&>); // GOOD: adds const\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<const string[]>,\r\n        const shared_ptr<string[4]>&>); // GOOD: adds const, known-to-unknown is compatible\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<const string[]>,\r\n        const shared_ptr<const string[]>&>); // GOOD: same (plain, not converting)\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<const string[]>,\r\n        const shared_ptr<const string[4]>&>); // GOOD: known-to-unknown is compatible\r\n\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<const string[4]>,\r\n        const shared_ptr<string[]>&>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(\r\n        is_nothrow_constructible_v<shared_ptr<const string[4]>, const shared_ptr<string[4]>&>); // GOOD: adds const\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<const string[4]>,\r\n        const shared_ptr<const string[]>&>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<const string[4]>,\r\n        const shared_ptr<const string[4]>&>); // GOOD: same (plain, not converting)\r\n\r\n    impl_shared_ptr_all_copy_ctors<string[], string[]>();\r\n    impl_shared_ptr_all_copy_ctors<string[], string[4]>();\r\n    impl_shared_ptr_all_copy_ctors<string[4], string[4]>();\r\n    impl_shared_ptr_all_copy_ctors<const string[], string[]>();\r\n    impl_shared_ptr_all_copy_ctors<const string[], string[4]>();\r\n    impl_shared_ptr_all_copy_ctors<const string[], const string[]>();\r\n    impl_shared_ptr_all_copy_ctors<const string[], const string[4]>();\r\n    impl_shared_ptr_all_copy_ctors<const string[4], string[4]>();\r\n    impl_shared_ptr_all_copy_ctors<const string[4], const string[4]>();\r\n}\r\n\r\ntemplate <typename Dest, typename Src>\r\nvoid impl_shared_ptr_all_move_ctors() {\r\n    string* p = new string[4];\r\n    shared_ptr<Src> orig(p);\r\n    shared_ptr<Dest> mov = move(orig);\r\n    assert_empty_null(orig);\r\n    assert(mov.use_count() == 1);\r\n    assert(mov.get() == p);\r\n\r\n    shared_ptr<Src> empty;\r\n    shared_ptr<Dest> emp2 = move(empty);\r\n    assert_empty_null(empty);\r\n    assert_empty_null(emp2);\r\n}\r\n\r\nvoid test_shared_ptr_all_move_ctors() {\r\n    STATIC_ASSERT(\r\n        is_nothrow_constructible_v<shared_ptr<string[]>, shared_ptr<string[]>>); // GOOD: same (plain, not converting)\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<string[]>,\r\n        shared_ptr<string[4]>>); // GOOD: known-to-unknown is compatible\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[]>, shared_ptr<const string[]>>); // BAD: drops const\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[]>, shared_ptr<const string[4]>>); // BAD: drops const\r\n\r\n    STATIC_ASSERT(\r\n        !is_constructible_v<shared_ptr<string[4]>, shared_ptr<string[]>>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(\r\n        is_nothrow_constructible_v<shared_ptr<string[4]>, shared_ptr<string[4]>>); // GOOD: same (plain, not converting)\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[4]>, shared_ptr<const string[]>>); // BAD: drops const\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[4]>, shared_ptr<const string[4]>>); // BAD: drops const\r\n\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<const string[]>, shared_ptr<string[]>>); // GOOD: adds const\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<const string[]>,\r\n        shared_ptr<string[4]>>); // GOOD: adds const, known-to-unknown is compatible\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<const string[]>,\r\n        shared_ptr<const string[]>>); // GOOD: same (plain, not converting)\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<const string[]>,\r\n        shared_ptr<const string[4]>>); // GOOD: known-to-unknown is compatible\r\n\r\n    STATIC_ASSERT(\r\n        !is_constructible_v<shared_ptr<const string[4]>, shared_ptr<string[]>>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<const string[4]>, shared_ptr<string[4]>>); // GOOD: adds const\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<const string[4]>,\r\n        shared_ptr<const string[]>>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(is_nothrow_constructible_v<shared_ptr<const string[4]>,\r\n        shared_ptr<const string[4]>>); // GOOD: same (plain, not converting)\r\n\r\n    impl_shared_ptr_all_move_ctors<string[], string[]>();\r\n    impl_shared_ptr_all_move_ctors<string[], string[4]>();\r\n    impl_shared_ptr_all_move_ctors<string[4], string[4]>();\r\n    impl_shared_ptr_all_move_ctors<const string[], string[]>();\r\n    impl_shared_ptr_all_move_ctors<const string[], string[4]>();\r\n    impl_shared_ptr_all_move_ctors<const string[], const string[]>();\r\n    impl_shared_ptr_all_move_ctors<const string[], const string[4]>();\r\n    impl_shared_ptr_all_move_ctors<const string[4], string[4]>();\r\n    impl_shared_ptr_all_move_ctors<const string[4], const string[4]>();\r\n}\r\n\r\ntemplate <typename Dest, typename Src>\r\nvoid impl_shared_ptr_weak_ctor() {\r\n    const shared_ptr<Src> orig(new string[4]);\r\n    const weak_ptr<Src> weak = orig;\r\n    shared_ptr<Dest> sp(weak);\r\n    assert(sp.use_count() == 2);\r\n    assert(sp.get() == orig.get());\r\n\r\n    bool caught = false;\r\n    try {\r\n        const weak_ptr<Src> empty;\r\n        shared_ptr<Dest> emp2(empty);\r\n    } catch (const bad_weak_ptr&) {\r\n        caught = true;\r\n    }\r\n    assert(caught);\r\n}\r\n\r\nvoid test_shared_ptr_weak_ctor() {\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<string[]>, const weak_ptr<string[]>&>); // GOOD: same\r\n    STATIC_ASSERT(\r\n        is_constructible_v<shared_ptr<string[]>, const weak_ptr<string[4]>&>); // GOOD: known-to-unknown is compatible\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[]>, const weak_ptr<const string[]>&>); // BAD: drops const\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[]>, const weak_ptr<const string[4]>&>); // BAD: drops const\r\n\r\n    STATIC_ASSERT(\r\n        !is_constructible_v<shared_ptr<string[4]>, const weak_ptr<string[]>&>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<string[4]>, const weak_ptr<string[4]>&>); // GOOD: same\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[4]>, const weak_ptr<const string[]>&>); // BAD: drops const\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[4]>, const weak_ptr<const string[4]>&>); // BAD: drops const\r\n\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[]>, const weak_ptr<string[]>&>); // GOOD: adds const\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[]>,\r\n        const weak_ptr<string[4]>&>); // GOOD: adds const, known-to-unknown is compatible\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[]>, const weak_ptr<const string[]>&>); // GOOD: same\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[]>,\r\n        const weak_ptr<const string[4]>&>); // GOOD: known-to-unknown is compatible\r\n\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<const string[4]>,\r\n        const weak_ptr<string[]>&>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[4]>, const weak_ptr<string[4]>&>); // GOOD: adds const\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<const string[4]>,\r\n        const weak_ptr<const string[]>&>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[4]>, const weak_ptr<const string[4]>&>); // GOOD: same\r\n\r\n    impl_shared_ptr_weak_ctor<string[], string[]>();\r\n    impl_shared_ptr_weak_ctor<string[], string[4]>();\r\n    impl_shared_ptr_weak_ctor<string[4], string[4]>();\r\n    impl_shared_ptr_weak_ctor<const string[], string[]>();\r\n    impl_shared_ptr_weak_ctor<const string[], string[4]>();\r\n    impl_shared_ptr_weak_ctor<const string[], const string[]>();\r\n    impl_shared_ptr_weak_ctor<const string[], const string[4]>();\r\n    impl_shared_ptr_weak_ctor<const string[4], string[4]>();\r\n    impl_shared_ptr_weak_ctor<const string[4], const string[4]>();\r\n}\r\n\r\ntemplate <typename Dest, typename Src, typename DelType>\r\nvoid impl2_shared_ptr_unique_ctor() {\r\n    default_delete<Src> deleter;\r\n\r\n    string* p = new string[4];\r\n    unique_ptr<Src, DelType> uniq(p, deleter);\r\n    shared_ptr<Dest> sp = move(uniq);\r\n    assert(!uniq);\r\n    assert(sp.use_count() == 1);\r\n    assert(sp.get() == p);\r\n\r\n    unique_ptr<Src, DelType> empty(nullptr, deleter);\r\n    shared_ptr<Dest> emp2 = move(empty);\r\n    assert(!empty);\r\n    assert_empty_null(emp2);\r\n}\r\n\r\ntemplate <typename Dest, typename Src>\r\nvoid impl_shared_ptr_unique_ctor() {\r\n    impl2_shared_ptr_unique_ctor<Dest, Src, default_delete<Src>>();\r\n    impl2_shared_ptr_unique_ctor<Dest, Src, default_delete<Src>&>();\r\n    impl2_shared_ptr_unique_ctor<Dest, Src, const default_delete<Src>&>();\r\n}\r\n\r\nvoid test_shared_ptr_unique_ctor() {\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<string[]>, unique_ptr<string[]>>); // GOOD: same\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[]>, unique_ptr<const string[]>>); // BAD: drops const\r\n\r\n    STATIC_ASSERT(\r\n        !is_constructible_v<shared_ptr<string[4]>, unique_ptr<string[]>>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<string[4]>, unique_ptr<const string[]>>); // BAD: drops const\r\n\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[]>, unique_ptr<string[]>>); // GOOD: adds const\r\n    STATIC_ASSERT(is_constructible_v<shared_ptr<const string[]>, unique_ptr<const string[]>>); // GOOD: same\r\n\r\n    STATIC_ASSERT(\r\n        !is_constructible_v<shared_ptr<const string[4]>, unique_ptr<string[]>>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(!is_constructible_v<shared_ptr<const string[4]>,\r\n        unique_ptr<const string[]>>); // BAD: unknown-to-known isn't allowed\r\n\r\n    impl_shared_ptr_unique_ctor<string[], string[]>();\r\n    impl_shared_ptr_unique_ctor<const string[], string[]>();\r\n    impl_shared_ptr_unique_ctor<const string[], const string[]>();\r\n}\r\n\r\ntemplate <typename T>\r\nvoid impl_shared_ptr_swap() {\r\n#if _HAS_CXX17\r\n    STATIC_ASSERT(is_nothrow_swappable_v<shared_ptr<T>>);\r\n#endif // _HAS_CXX17\r\n\r\n    string* p1 = new string[4];\r\n    shared_ptr<T> left(p1);\r\n\r\n    string* p2 = new string[4];\r\n    shared_ptr<T> right(p2);\r\n\r\n    assert(left.get() == p1);\r\n    assert(right.get() == p2);\r\n\r\n    left.swap(right);\r\n\r\n    assert(left.get() == p2);\r\n    assert(right.get() == p1);\r\n\r\n    swap(left, right);\r\n\r\n    assert(left.get() == p1);\r\n    assert(right.get() == p2);\r\n}\r\n\r\nvoid test_shared_ptr_swap() {\r\n    impl_shared_ptr_swap<string[]>();\r\n    impl_shared_ptr_swap<string[4]>();\r\n    impl_shared_ptr_swap<const string[]>();\r\n    impl_shared_ptr_swap<const string[4]>();\r\n}\r\n\r\nvoid test_shared_ptr_assignment_and_reset() {\r\n    // These operations are specified and implemented with construct-and-swap,\r\n    // so they don't need to be exhaustively tested.\r\n\r\n    string* p1 = new string[4];\r\n    shared_ptr<const string[]> sp1(p1);\r\n    string* p2 = new string[4];\r\n    shared_ptr<string[]> sp2(p2);\r\n\r\n    shared_ptr<const string[]> x;\r\n    assert_empty_null(x);\r\n\r\n    x = sp1;\r\n    assert(x.use_count() == 2);\r\n    assert(x.get() == p1);\r\n\r\n    x = sp2;\r\n    assert(x.use_count() == 2);\r\n    assert(x.get() == p2);\r\n\r\n    x = move(sp1);\r\n    assert_empty_null(sp1);\r\n    assert(x.use_count() == 1);\r\n    assert(x.get() == p1);\r\n\r\n    x = move(sp2);\r\n    assert_empty_null(sp2);\r\n    assert(x.use_count() == 1);\r\n    assert(x.get() == p2);\r\n\r\n    string* p3 = new string[4];\r\n    unique_ptr<string[]> uniq(p3);\r\n    x = move(uniq);\r\n    assert(!uniq);\r\n    assert(x.use_count() == 1);\r\n    assert(x.get() == p3);\r\n\r\n    x.reset();\r\n    assert_empty_null(x);\r\n\r\n    string* p4 = new string[4];\r\n    x.reset(p4);\r\n    assert(x.use_count() == 1);\r\n    assert(x.get() == p4);\r\n\r\n    using Del = default_delete<const string[]>;\r\n    using Al  = allocator<int>;\r\n\r\n    string* p5 = new string[4];\r\n    x.reset(p5, Del{});\r\n    assert(x.use_count() == 1);\r\n    assert(x.get() == p5);\r\n\r\n    string* p6 = new string[4];\r\n    x.reset(p6, Del{}, Al{});\r\n    assert(x.use_count() == 1);\r\n    assert(x.get() == p6);\r\n}\r\n\r\nvoid test_shared_ptr_indexing() {\r\n    // use_count() and get() have already been used extensively.\r\n\r\n    const shared_ptr<string[]> sp(new string[4]);\r\n    sp[0] = \"cute\";\r\n    sp[1] = \"fluffy\";\r\n    sp[2] = \"kittens\";\r\n    sp[3] = \"say MEOW!\";\r\n    assert(sp[2].size() == 7);\r\n    assert(sp && sp[3].size() == 9);\r\n}\r\n\r\nvoid test_shared_ptr_owner_before() {\r\n    const shared_ptr<string[]> sp(new string[4]);\r\n\r\n    const shared_ptr<int> shared_other(new int(1729));\r\n    const weak_ptr<int> weak_other = shared_other;\r\n    assert(sp.owner_before(shared_other) || shared_other.owner_before(sp));\r\n    assert(sp.owner_before(weak_other) || weak_other.owner_before(sp));\r\n\r\n    const shared_ptr<string[]> empty;\r\n    const shared_ptr<int> e1;\r\n    const weak_ptr<int> e2;\r\n    assert(!empty.owner_before(e1) && !e1.owner_before(empty));\r\n    assert(!empty.owner_before(e2) && !e2.owner_before(empty));\r\n}\r\n\r\nvoid test_shared_ptr_comparisons() {\r\n    const shared_ptr<string[]> arr(new string[4]);\r\n\r\n    const shared_ptr<string[]> x(arr, arr.get() + 1);\r\n    const shared_ptr<const string[2]> y(arr, arr.get() + 2);\r\n\r\n    assert(!(x == y));\r\n    assert(x != y);\r\n    assert(x < y);\r\n    assert(!(x > y));\r\n    assert(x <= y);\r\n    assert(!(x >= y));\r\n\r\n    assert(!(x == nullptr));\r\n    assert(!(nullptr == x));\r\n    assert(x != nullptr);\r\n    assert(nullptr != x);\r\n\r\n    const shared_ptr<string[]> e;\r\n    assert(e == nullptr);\r\n    assert(nullptr == e);\r\n    assert(!(e != nullptr));\r\n    assert(!(nullptr != e));\r\n    assert(!(e < nullptr));\r\n    assert(!(nullptr < e));\r\n    assert(!(e > nullptr));\r\n    assert(!(nullptr > e));\r\n    assert(e <= nullptr);\r\n    assert(nullptr <= e);\r\n    assert(e >= nullptr);\r\n    assert(nullptr >= e);\r\n}\r\n\r\nvoid test_shared_ptr_casts() {\r\n    // dynamic_pointer_cast() isn't really applicable to arrays.\r\n\r\n    const shared_ptr<const string[]> orig(new string[4]);\r\n\r\n    const shared_ptr<const void> spvoid  = orig;\r\n    const shared_ptr<const string[]> sp1 = static_pointer_cast<const string[]>(spvoid);\r\n\r\n    const shared_ptr<string[]> mod = const_pointer_cast<string[]>(orig);\r\n\r\n    const shared_ptr<const char> spbytes = reinterpret_pointer_cast<const char>(orig);\r\n    const shared_ptr<const string[]> sp2 = reinterpret_pointer_cast<const string[]>(spbytes);\r\n\r\n    assert(orig.use_count() == 6);\r\n    assert(spvoid.use_count() == 6);\r\n    assert(sp1.use_count() == 6);\r\n    assert(mod.use_count() == 6);\r\n    assert(spbytes.use_count() == 6);\r\n    assert(sp2.use_count() == 6);\r\n\r\n    assert(spvoid.get() == orig.get());\r\n    assert(sp1.get() == orig.get());\r\n    assert(mod.get() == orig.get());\r\n    assert(spbytes.get() == spvoid.get());\r\n    assert(sp2.get() == orig.get());\r\n}\r\n\r\nvoid test_shared_ptr_get_deleter() {\r\n    const shared_ptr<string[]> sp(new string[4], default_delete<string[]>{});\r\n\r\n    assert(get_deleter<default_delete<string[]>>(sp) != nullptr);\r\n    assert(get_deleter<default_delete<const string[]>>(sp) == nullptr);\r\n}\r\n\r\nvoid test_shared_ptr_streaming_and_hashing() {\r\n    int* p = new int[4];\r\n    const shared_ptr<int[]> sp(p);\r\n\r\n    ostringstream oss1;\r\n    oss1 << p;\r\n\r\n    ostringstream oss2;\r\n    oss2 << sp;\r\n\r\n    assert(oss1.str() == oss2.str());\r\n\r\n    assert(hash<shared_ptr<int[]>>{}(sp) == hash<int*>{}(p));\r\n}\r\n\r\nvoid test_weak_ptr_typedefs() {\r\n    STATIC_ASSERT(is_same_v<weak_ptr<string[]>::element_type, string>);\r\n    STATIC_ASSERT(is_same_v<weak_ptr<string[4]>::element_type, string>);\r\n    STATIC_ASSERT(is_same_v<weak_ptr<const string[]>::element_type, const string>);\r\n    STATIC_ASSERT(is_same_v<weak_ptr<const string[4]>::element_type, const string>);\r\n}\r\n\r\nvoid test_weak_ptr_default_ctor() {\r\n    STATIC_ASSERT(is_nothrow_default_constructible_v<weak_ptr<string[]>>);\r\n    STATIC_ASSERT(is_nothrow_default_constructible_v<weak_ptr<string[4]>>);\r\n\r\n    weak_ptr<string[]> wp0;\r\n    weak_ptr<string[4]> wp1;\r\n\r\n    assert(wp0.use_count() == 0);\r\n    assert(wp1.use_count() == 0);\r\n}\r\n\r\ntemplate <typename Dest, typename Src>\r\nvoid impl_weak_ptr_all_copy_ctors_and_shared_ctor() {\r\n    const shared_ptr<Src> orig(new string[4]);\r\n    const weak_ptr<Src> weak = orig;\r\n    const weak_ptr<Dest> wp1 = orig;\r\n    const weak_ptr<Dest> wp2 = weak;\r\n    assert(orig.use_count() == 1);\r\n    assert(weak.use_count() == 1);\r\n    assert(wp1.use_count() == 1);\r\n    assert(wp2.use_count() == 1);\r\n    assert(weak.lock().get() == orig.get());\r\n    assert(wp1.lock().get() == orig.get());\r\n    assert(wp2.lock().get() == orig.get());\r\n\r\n    const shared_ptr<Src> shared_empty;\r\n    const weak_ptr<Src> weak_empty;\r\n    const weak_ptr<Dest> emp1 = shared_empty;\r\n    const weak_ptr<Dest> emp2 = weak_empty;\r\n    assert(emp1.use_count() == 0);\r\n    assert(emp2.use_count() == 0);\r\n}\r\n\r\nvoid test_weak_ptr_all_copy_ctors_and_shared_ctor() {\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<string[]>,\r\n        const weak_ptr<string[]>&>); // GOOD: same (plain, not converting)\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<string[]>,\r\n        const weak_ptr<string[4]>&>); // GOOD: known-to-unknown is compatible\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<string[]>, const weak_ptr<const string[]>&>); // BAD: drops const\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<string[]>, const weak_ptr<const string[4]>&>); // BAD: drops const\r\n\r\n    STATIC_ASSERT(\r\n        !is_constructible_v<weak_ptr<string[4]>, const weak_ptr<string[]>&>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<string[4]>,\r\n        const weak_ptr<string[4]>&>); // GOOD: same (plain, not converting)\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<string[4]>, const weak_ptr<const string[]>&>); // BAD: drops const\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<string[4]>, const weak_ptr<const string[4]>&>); // BAD: drops const\r\n\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<const string[]>, const weak_ptr<string[]>&>); // GOOD: adds const\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<const string[]>,\r\n        const weak_ptr<string[4]>&>); // GOOD: adds const, known-to-unknown is compatible\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<const string[]>,\r\n        const weak_ptr<const string[]>&>); // GOOD: same (plain, not converting)\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<const string[]>,\r\n        const weak_ptr<const string[4]>&>); // GOOD: known-to-unknown is compatible\r\n\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<const string[4]>,\r\n        const weak_ptr<string[]>&>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(\r\n        is_nothrow_constructible_v<weak_ptr<const string[4]>, const weak_ptr<string[4]>&>); // GOOD: adds const\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<const string[4]>,\r\n        const weak_ptr<const string[]>&>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<const string[4]>,\r\n        const weak_ptr<const string[4]>&>); // GOOD: same (plain, not converting)\r\n\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<string[]>, const shared_ptr<string[]>&>); // GOOD: same\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<string[]>,\r\n        const shared_ptr<string[4]>&>); // GOOD: known-to-unknown is compatible\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<string[]>, const shared_ptr<const string[]>&>); // BAD: drops const\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<string[]>, const shared_ptr<const string[4]>&>); // BAD: drops const\r\n\r\n    STATIC_ASSERT(\r\n        !is_constructible_v<weak_ptr<string[4]>, const shared_ptr<string[]>&>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<string[4]>, const shared_ptr<string[4]>&>); // GOOD: same\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<string[4]>, const shared_ptr<const string[]>&>); // BAD: drops const\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<string[4]>, const shared_ptr<const string[4]>&>); // BAD: drops const\r\n\r\n    STATIC_ASSERT(\r\n        is_nothrow_constructible_v<weak_ptr<const string[]>, const shared_ptr<string[]>&>); // GOOD: adds const\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<const string[]>,\r\n        const shared_ptr<string[4]>&>); // GOOD: adds const, known-to-unknown is compatible\r\n    STATIC_ASSERT(\r\n        is_nothrow_constructible_v<weak_ptr<const string[]>, const shared_ptr<const string[]>&>); // GOOD: same\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<const string[]>,\r\n        const shared_ptr<const string[4]>&>); // GOOD: known-to-unknown is compatible\r\n\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<const string[4]>,\r\n        const shared_ptr<string[]>&>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(\r\n        is_nothrow_constructible_v<weak_ptr<const string[4]>, const shared_ptr<string[4]>&>); // GOOD: adds const\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<const string[4]>,\r\n        const shared_ptr<const string[]>&>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(\r\n        is_nothrow_constructible_v<weak_ptr<const string[4]>, const shared_ptr<const string[4]>&>); // GOOD: same\r\n\r\n    impl_weak_ptr_all_copy_ctors_and_shared_ctor<string[], string[]>();\r\n    impl_weak_ptr_all_copy_ctors_and_shared_ctor<string[], string[4]>();\r\n    impl_weak_ptr_all_copy_ctors_and_shared_ctor<string[4], string[4]>();\r\n    impl_weak_ptr_all_copy_ctors_and_shared_ctor<const string[], string[]>();\r\n    impl_weak_ptr_all_copy_ctors_and_shared_ctor<const string[], string[4]>();\r\n    impl_weak_ptr_all_copy_ctors_and_shared_ctor<const string[], const string[]>();\r\n    impl_weak_ptr_all_copy_ctors_and_shared_ctor<const string[], const string[4]>();\r\n    impl_weak_ptr_all_copy_ctors_and_shared_ctor<const string[4], string[4]>();\r\n    impl_weak_ptr_all_copy_ctors_and_shared_ctor<const string[4], const string[4]>();\r\n}\r\n\r\ntemplate <typename Dest, typename Src>\r\nvoid impl_weak_ptr_all_move_ctors() {\r\n    shared_ptr<Src> orig(new string[4]);\r\n    weak_ptr<Src> weak = orig;\r\n    weak_ptr<Dest> wp2 = move(weak);\r\n    assert(weak.use_count() == 0);\r\n    assert(wp2.use_count() == 1);\r\n    assert(wp2.lock().get() == orig.get());\r\n\r\n    weak_ptr<Src> empty;\r\n    weak_ptr<Dest> emp2 = move(empty);\r\n    assert(empty.use_count() == 0);\r\n    assert(emp2.use_count() == 0);\r\n}\r\n\r\nvoid test_weak_ptr_all_move_ctors() {\r\n    STATIC_ASSERT(\r\n        is_nothrow_constructible_v<weak_ptr<string[]>, weak_ptr<string[]>>); // GOOD: same (plain, not converting)\r\n    STATIC_ASSERT(\r\n        is_nothrow_constructible_v<weak_ptr<string[]>, weak_ptr<string[4]>>); // GOOD: known-to-unknown is compatible\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<string[]>, weak_ptr<const string[]>>); // BAD: drops const\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<string[]>, weak_ptr<const string[4]>>); // BAD: drops const\r\n\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<string[4]>, weak_ptr<string[]>>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(\r\n        is_nothrow_constructible_v<weak_ptr<string[4]>, weak_ptr<string[4]>>); // GOOD: same (plain, not converting)\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<string[4]>, weak_ptr<const string[]>>); // BAD: drops const\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<string[4]>, weak_ptr<const string[4]>>); // BAD: drops const\r\n\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<const string[]>, weak_ptr<string[]>>); // GOOD: adds const\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<const string[]>,\r\n        weak_ptr<string[4]>>); // GOOD: adds const, known-to-unknown is compatible\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<const string[]>,\r\n        weak_ptr<const string[]>>); // GOOD: same (plain, not converting)\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<const string[]>,\r\n        weak_ptr<const string[4]>>); // GOOD: known-to-unknown is compatible\r\n\r\n    STATIC_ASSERT(\r\n        !is_constructible_v<weak_ptr<const string[4]>, weak_ptr<string[]>>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<const string[4]>, weak_ptr<string[4]>>); // GOOD: adds const\r\n    STATIC_ASSERT(!is_constructible_v<weak_ptr<const string[4]>,\r\n        weak_ptr<const string[]>>); // BAD: unknown-to-known isn't allowed\r\n    STATIC_ASSERT(is_nothrow_constructible_v<weak_ptr<const string[4]>,\r\n        weak_ptr<const string[4]>>); // GOOD: same (plain, not converting)\r\n\r\n    impl_weak_ptr_all_move_ctors<string[], string[]>();\r\n    impl_weak_ptr_all_move_ctors<string[], string[4]>();\r\n    impl_weak_ptr_all_move_ctors<string[4], string[4]>();\r\n    impl_weak_ptr_all_move_ctors<const string[], string[]>();\r\n    impl_weak_ptr_all_move_ctors<const string[], string[4]>();\r\n    impl_weak_ptr_all_move_ctors<const string[], const string[]>();\r\n    impl_weak_ptr_all_move_ctors<const string[], const string[4]>();\r\n    impl_weak_ptr_all_move_ctors<const string[4], string[4]>();\r\n    impl_weak_ptr_all_move_ctors<const string[4], const string[4]>();\r\n}\r\n\r\ntemplate <typename T>\r\nvoid impl_weak_ptr_swap() {\r\n#if _HAS_CXX17\r\n    STATIC_ASSERT(is_nothrow_swappable_v<weak_ptr<T>>);\r\n#endif // _HAS_CXX17\r\n\r\n    const shared_ptr<T> sp1(new string[4]);\r\n    weak_ptr<T> left = sp1;\r\n\r\n    const shared_ptr<T> sp2(new string[4]);\r\n    weak_ptr<T> right = sp2;\r\n\r\n    assert(left.lock().get() == sp1.get());\r\n    assert(right.lock().get() == sp2.get());\r\n\r\n    left.swap(right);\r\n\r\n    assert(left.lock().get() == sp2.get());\r\n    assert(right.lock().get() == sp1.get());\r\n\r\n    swap(left, right);\r\n\r\n    assert(left.lock().get() == sp1.get());\r\n    assert(right.lock().get() == sp2.get());\r\n}\r\n\r\nvoid test_weak_ptr_swap() {\r\n    impl_weak_ptr_swap<string[]>();\r\n    impl_weak_ptr_swap<string[4]>();\r\n    impl_weak_ptr_swap<const string[]>();\r\n    impl_weak_ptr_swap<const string[4]>();\r\n}\r\n\r\nvoid test_weak_ptr_assignment_and_reset() {\r\n    // These operations are specified and implemented with construct-and-swap,\r\n    // so they don't need to be exhaustively tested.\r\n\r\n    const shared_ptr<string[]> sp1(new string[4]);\r\n    weak_ptr<string[]> wp1 = sp1;\r\n\r\n    const shared_ptr<const string[]> sp2(new string[4]);\r\n    weak_ptr<const string[]> wp2 = sp2;\r\n\r\n    weak_ptr<const string[]> weak;\r\n\r\n    weak = wp2;\r\n    assert(weak.lock().get() == sp2.get());\r\n\r\n    weak = wp1;\r\n    assert(weak.lock().get() == sp1.get());\r\n\r\n    weak = move(wp2);\r\n    assert(wp2.use_count() == 0);\r\n    assert(weak.lock().get() == sp2.get());\r\n\r\n    weak = move(wp1);\r\n    assert(wp1.use_count() == 0);\r\n    assert(weak.lock().get() == sp1.get());\r\n\r\n    weak = sp2;\r\n    assert(weak.lock().get() == sp2.get());\r\n\r\n    weak.reset();\r\n    assert(weak.use_count() == 0);\r\n}\r\n\r\nvoid test_weak_ptr_observers() {\r\n    shared_ptr<string[]> sp1(new string[4]);\r\n    shared_ptr<string[]> sp2 = sp1;\r\n    sp1[3]                   = \"Peppermint\";\r\n\r\n    weak_ptr<string[]> weak = sp1;\r\n    assert(weak.use_count() == 2);\r\n    assert(!weak.expired());\r\n    assert(weak.lock()[3].size() == 10);\r\n\r\n    sp1.reset();\r\n    assert(weak.use_count() == 1);\r\n    assert(!weak.expired());\r\n    assert(weak.lock()[3].size() == 10);\r\n\r\n    sp2.reset();\r\n    assert(weak.use_count() == 0);\r\n    assert(weak.expired());\r\n    assert_empty_null(weak.lock());\r\n\r\n    weak_ptr<string[]> weak2 = weak;\r\n    assert(weak.owner_before(sp1) || sp1.owner_before(weak));\r\n    assert(!weak.owner_before(weak2) && !weak2.owner_before(weak));\r\n}\r\n\r\nstruct ESFT : enable_shared_from_this<ESFT> {\r\n    ESFT() : m_n(-1) {}\r\n    explicit ESFT(const int n) : m_n(n) {}\r\n    int m_n;\r\n};\r\n\r\nvoid test_enable_shared_from_this() {\r\n    shared_ptr<ESFT> sp1(new ESFT(1729));\r\n    ESFT* ptr            = sp1.get();\r\n    weak_ptr<ESFT> weak  = ptr->weak_from_this();\r\n    shared_ptr<ESFT> sp2 = weak.lock();\r\n    shared_ptr<ESFT> sp3 = ptr->shared_from_this();\r\n    assert(sp1.use_count() == 3);\r\n    assert(sp2.use_count() == 3);\r\n    assert(sp3.use_count() == 3);\r\n    assert(sp1->m_n == 1729);\r\n    assert(sp2->m_n == 1729);\r\n    assert(sp3->m_n == 1729);\r\n\r\n    shared_ptr<ESFT[]> arr(new ESFT[4]);\r\n    ESFT* first = arr.get();\r\n    for (int i = 0; i < 4; ++i) {\r\n        assert(first[i].m_n == -1);\r\n        assert(first[i].weak_from_this().expired());\r\n    }\r\n}\r\n\r\nstruct BaseX {\r\n    int x = 11;\r\n\r\n    BaseX()          = default;\r\n    virtual ~BaseX() = default;\r\n\r\n    BaseX(const BaseX&)            = delete;\r\n    BaseX& operator=(const BaseX&) = delete;\r\n};\r\n\r\nstruct BaseY {\r\n    int y = 22;\r\n\r\n    BaseY()          = default;\r\n    virtual ~BaseY() = default;\r\n\r\n    BaseY(const BaseY&)            = delete;\r\n    BaseY& operator=(const BaseY&) = delete;\r\n};\r\n\r\nstruct DerivedZ : BaseX, BaseY {\r\n    int z = 33;\r\n};\r\n\r\n// LWG-2996 \"Missing rvalue overloads for shared_ptr operations\"\r\nvoid test_LWG_2996() {\r\n    shared_ptr<DerivedZ> sp1 = make_shared<DerivedZ>();\r\n\r\n    BaseX* const px    = sp1.get();\r\n    BaseY* const py    = sp1.get();\r\n    DerivedZ* const pz = sp1.get();\r\n    assert(px->x == 11);\r\n    assert(py->y == 22);\r\n    assert(pz->z == 33);\r\n\r\n    assert(sp1.use_count() == 1);\r\n    assert(sp1.get() == pz);\r\n\r\n    shared_ptr<const BaseX> sp2(move(sp1)); // move converting ctor, old\r\n    assert(sp1.use_count() == 0);\r\n    assert(sp1.get() == nullptr);\r\n    assert(sp2.use_count() == 1);\r\n    assert(sp2.get() == px);\r\n\r\n    shared_ptr<BaseX> sp3 = const_pointer_cast<BaseX>(move(sp2)); // added by LWG-2996\r\n    assert(sp2.use_count() == 0);\r\n    assert(sp2.get() == nullptr);\r\n    assert(sp3.use_count() == 1);\r\n    assert(sp3.get() == px);\r\n\r\n    shared_ptr<BaseY> sp4 = dynamic_pointer_cast<BaseY>(move(sp3)); // added by LWG-2996\r\n    assert(sp3.use_count() == 0);\r\n    assert(sp3.get() == nullptr);\r\n    assert(sp4.use_count() == 1);\r\n    assert(sp4.get() == py);\r\n\r\n    shared_ptr<DerivedZ> sp5 = static_pointer_cast<DerivedZ>(move(sp4)); // added by LWG-2996\r\n    assert(sp4.use_count() == 0);\r\n    assert(sp4.get() == nullptr);\r\n    assert(sp5.use_count() == 1);\r\n    assert(sp5.get() == pz);\r\n\r\n    shared_ptr<char> sp6 = reinterpret_pointer_cast<char>(move(sp5)); // added by LWG-2996\r\n    assert(sp5.use_count() == 0);\r\n    assert(sp5.get() == nullptr);\r\n    assert(sp6.use_count() == 1);\r\n    assert(sp6.get() == reinterpret_cast<char*>(pz));\r\n\r\n    shared_ptr<int> sp7(move(sp6), &py->y); // aliasing move ctor, added by LWG-2996\r\n    assert(sp6.use_count() == 0);\r\n    assert(sp6.get() == nullptr);\r\n    assert(sp7.use_count() == 1);\r\n    assert(sp7.get() == &py->y);\r\n\r\n    assert(px->x == 11);\r\n    assert(py->y == 22);\r\n    assert(pz->z == 33);\r\n}\r\n\r\nint main() {\r\n    test_shared_ptr_typedefs();\r\n    test_shared_ptr_default_ctor();\r\n    test_shared_ptr_nullptr_ctor();\r\n    test_shared_ptr_rawptr_ctor();\r\n    test_shared_ptr_rawptr_del_ctor();\r\n    test_shared_ptr_rawptr_del_al_ctor();\r\n    test_shared_ptr_nullptr_del_ctor();\r\n    test_shared_ptr_nullptr_del_al_ctor();\r\n    test_shared_ptr_aliasing_ctor();\r\n    test_shared_ptr_all_copy_ctors();\r\n    test_shared_ptr_all_move_ctors();\r\n    test_shared_ptr_weak_ctor();\r\n    test_shared_ptr_unique_ctor();\r\n    test_shared_ptr_swap();\r\n    test_shared_ptr_assignment_and_reset();\r\n    test_shared_ptr_indexing();\r\n    test_shared_ptr_owner_before();\r\n    test_shared_ptr_comparisons();\r\n    test_shared_ptr_casts();\r\n    test_shared_ptr_get_deleter();\r\n    test_shared_ptr_streaming_and_hashing();\r\n    test_weak_ptr_typedefs();\r\n    test_weak_ptr_default_ctor();\r\n    test_weak_ptr_all_copy_ctors_and_shared_ctor();\r\n    test_weak_ptr_all_move_ctors();\r\n    test_weak_ptr_swap();\r\n    test_weak_ptr_assignment_and_reset();\r\n    test_weak_ptr_observers();\r\n    test_enable_shared_from_this();\r\n    test_LWG_2996();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0415R1_constexpr_complex/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0415R1_constexpr_complex/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <complex>\r\n#include <type_traits>\r\nusing namespace std;\r\n\r\ntemplate <typename F>\r\nconstexpr void test_type() {\r\n    static_assert(is_floating_point_v<F>);\r\n\r\n    constexpr F f1{1};\r\n    constexpr F f2{2};\r\n    constexpr F f3{3};\r\n    constexpr F f4{4};\r\n\r\n    complex<F> c{f1, f2};\r\n    assert(c.real() == f1);\r\n    assert(c.imag() == f2);\r\n    assert((c == complex<F>{f1, f2}));\r\n\r\n    c.real(f3);\r\n    assert((c == complex<F>{f3, f2}));\r\n\r\n    c.imag(f4);\r\n    assert((c == complex<F>{f3, f4}));\r\n\r\n    // Test GH-190 \"<complex>: real(T) and imag(T) setters should return void\".\r\n    static_assert(is_void_v<decltype(c.real(f3))>);\r\n    static_assert(is_void_v<decltype(c.imag(f4))>);\r\n\r\n    c = f1;\r\n    assert(c == complex<F>{f1});\r\n\r\n    c.imag(f1);\r\n    assert((c == complex<F>{f1, f1}));\r\n\r\n    c += f2;\r\n    assert((c == complex<F>{f3, f1}));\r\n\r\n    c -= f1;\r\n    assert((c == complex<F>{f2, f1}));\r\n\r\n    c *= f2;\r\n    assert((c == complex<F>{f4, f2}));\r\n\r\n    c /= f2;\r\n    assert((c == complex<F>{f2, f1}));\r\n\r\n    c = complex<F>{f1, f3};\r\n    assert((c == complex<F>{f1, f3}));\r\n\r\n    c += complex<F>{f2, f1};\r\n    assert((c == complex<F>{f3, f4}));\r\n\r\n    c -= complex<F>{f1, f3};\r\n    assert((c == complex<F>{f2, f1}));\r\n\r\n    c *= complex<F>{f1, f1};\r\n    assert((c == complex<F>{f1, f3}));\r\n\r\n    c /= complex<F>{f1, f3};\r\n#ifndef _M_CEE // TRANSITION, VSO-1665481\r\n    assert(c == complex<F>{f1});\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    {\r\n        using Other = conditional_t<is_same_v<F, float>, double, float>;\r\n\r\n        c = complex<Other>{Other{1}, Other{3}};\r\n        assert((c == complex<F>{f1, f3}));\r\n\r\n        c += complex<Other>{Other{2}, Other{1}};\r\n        assert((c == complex<F>{f3, f4}));\r\n\r\n        c -= complex<Other>{Other{1}, Other{3}};\r\n        assert((c == complex<F>{f2, f1}));\r\n\r\n        c *= complex<Other>{Other{1}, Other{1}};\r\n        assert((c == complex<F>{f1, f3}));\r\n\r\n        c /= complex<Other>{Other{1}, Other{3}};\r\n#ifndef _M_CEE // TRANSITION, VSO-1665481\r\n        assert(c == complex<F>{f1});\r\n#endif // ^^^ no workaround ^^^\r\n    }\r\n\r\n    assert((complex<F>{f1, f1} + complex<F>{f1, f2} == complex<F>{f2, f3}));\r\n    assert((complex<F>{f1, f1} + f1 == complex<F>{f2, f1}));\r\n    assert((f1 + complex<F>{f2, f2} == complex<F>{f3, f2}));\r\n\r\n    assert((complex<F>{f3, f4} - complex<F>{f1, f1} == complex<F>{f2, f3}));\r\n    assert((complex<F>{f4, f4} - f2 == complex<F>{f2, f4}));\r\n    assert((f2 - complex<F>{f1, f1} == complex<F>{f1, -f1}));\r\n\r\n    assert((complex<F>{f1, f1} * complex<F>{f2, f1} == complex<F>{f1, f3}));\r\n    assert((complex<F>{f1, f2} * f2 == complex<F>{f2, f4}));\r\n    assert((f3 * complex<F>{f1, f1} == complex<F>{f3, f3}));\r\n\r\n    assert((complex<F>{f4, f4} / complex<F>{f2, f2} == complex<F>{f2}));\r\n    assert((complex<F>{f3, f3} / f3 == complex<F>{f1, f1}));\r\n    assert((f1 / complex<F>{f1, f1} == complex<F>{F{0.5}, F{-0.5}}));\r\n\r\n    assert((+complex<F>{f2, f3} == complex<F>{f2, f3}));\r\n\r\n    assert((-complex<F>{f2, f3} == complex<F>{-f2, -f3}));\r\n\r\n    assert((norm(complex<F>{f3, f4}) == F{25}));\r\n\r\n    assert((conj(complex<F>{f3, f4}) == complex<F>{f3, -f4}));\r\n\r\n    assert(real(f2) == f2);\r\n    assert(imag(f2) == F{0});\r\n    assert(norm(f2) == f4);\r\n    assert(conj(f2) == f2);\r\n}\r\n\r\nconstexpr bool test_all() {\r\n    test_type<float>();\r\n    test_type<double>();\r\n    test_type<long double>();\r\n\r\n    assert(real(2) == 2.0);\r\n    assert(imag(2) == 0.0);\r\n    assert(norm(2) == 4.0);\r\n    assert(conj(2) == 2.0);\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    assert(test_all());\r\n    static_assert(test_all());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0426R1_constexpr_char_traits/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0426R1_constexpr_char_traits/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename C>\r\nconstexpr void test_assign(const C a, const C b) {\r\n\r\n    C c = a;\r\n    assert(c == a);\r\n    char_traits<C>::assign(c, b);\r\n    assert(c == b);\r\n}\r\n\r\ntemplate <typename C>\r\nconstexpr void test_length(const C* const str, const size_t expected) {\r\n\r\n    assert(char_traits<C>::length(str) == expected);\r\n}\r\n\r\ntemplate <typename C>\r\nconstexpr void test_compare(const C* const str1, const C* const str2, const size_t n, const int expected) {\r\n\r\n    const int actual = char_traits<C>::compare(str1, str2, n);\r\n    assert(clamp(actual, -1, 1) == expected);\r\n}\r\n\r\ntemplate <typename C>\r\nconstexpr void test_find(const C* const str, const size_t n, const C c, const ptrdiff_t expected) {\r\n\r\n    const C* const actual = char_traits<C>::find(str, n, c);\r\n\r\n    if (expected == -1) {\r\n        assert(actual == nullptr);\r\n    } else {\r\n        assert(actual - str == expected);\r\n    }\r\n}\r\n\r\nconstexpr bool test() {\r\n    test_assign('A', 'B');\r\n    test_assign(L'C', L'D');\r\n#ifdef __cpp_char8_t\r\n    test_assign(u8'E', u8'F');\r\n#endif // __cpp_char8_t\r\n    test_assign(u'E', u'F');\r\n    test_assign(U'G', U'H');\r\n\r\n    test_length(\"\", 0);\r\n    test_length(L\"\", 0);\r\n#ifdef __cpp_char8_t\r\n    test_length(u8\"\", 0);\r\n#endif // __cpp_char8_t\r\n    test_length(u\"\", 0);\r\n    test_length(U\"\", 0);\r\n\r\n    test_length(\"cat\", 3);\r\n    test_length(L\"wolf\", 4);\r\n#ifdef __cpp_char8_t\r\n    test_length(u8\"tiger\", 5);\r\n#endif // __cpp_char8_t\r\n    test_length(u\"tiger\", 5);\r\n    test_length(U\"kitten\", 6);\r\n\r\n    test_compare(\"\", \"\", 0, 0);\r\n    test_compare(\"STUFF\", \"BLARG\", 0, 0);\r\n    test_compare(\"equal\", \"equal\", 5, 0);\r\n    test_compare(\"equalSTUFF\", \"equalBLARG\", 5, 0);\r\n    test_compare(\"greenapple\", \"greenzebra\", 10, -1);\r\n    test_compare(\"greenzebra\", \"greenapple\", 10, 1);\r\n\r\n    test_compare(L\"\", L\"\", 0, 0);\r\n    test_compare(L\"STUFF\", L\"BLARG\", 0, 0);\r\n    test_compare(L\"equal\", L\"equal\", 5, 0);\r\n    test_compare(L\"equalSTUFF\", L\"equalBLARG\", 5, 0);\r\n    test_compare(L\"greenapple\", L\"greenzebra\", 10, -1);\r\n    test_compare(L\"greenzebra\", L\"greenapple\", 10, 1);\r\n\r\n#ifdef __cpp_char8_t\r\n    test_compare(u8\"\", u8\"\", 0, 0);\r\n    test_compare(u8\"STUFF\", u8\"BLARG\", 0, 0);\r\n    test_compare(u8\"equal\", u8\"equal\", 5, 0);\r\n    test_compare(u8\"equalSTUFF\", u8\"equalBLARG\", 5, 0);\r\n    test_compare(u8\"greenapple\", u8\"greenzebra\", 10, -1);\r\n    test_compare(u8\"greenzebra\", u8\"greenapple\", 10, 1);\r\n#endif // __cpp_char8_t\r\n\r\n    test_compare(u\"\", u\"\", 0, 0);\r\n    test_compare(u\"STUFF\", u\"BLARG\", 0, 0);\r\n    test_compare(u\"equal\", u\"equal\", 5, 0);\r\n    test_compare(u\"equalSTUFF\", u\"equalBLARG\", 5, 0);\r\n    test_compare(u\"greenapple\", u\"greenzebra\", 10, -1);\r\n    test_compare(u\"greenzebra\", u\"greenapple\", 10, 1);\r\n\r\n    test_compare(U\"\", U\"\", 0, 0);\r\n    test_compare(U\"STUFF\", U\"BLARG\", 0, 0);\r\n    test_compare(U\"equal\", U\"equal\", 5, 0);\r\n    test_compare(U\"equalSTUFF\", U\"equalBLARG\", 5, 0);\r\n    test_compare(U\"greenapple\", U\"greenzebra\", 10, -1);\r\n    test_compare(U\"greenzebra\", U\"greenapple\", 10, 1);\r\n\r\n    test_find(\"abcdeVWXYZ\", 5, 'X', -1);\r\n    test_find(\"abcdeVWXYZ\", 10, 'X', 7);\r\n\r\n    test_find(L\"abcdeVWXYZ\", 5, L'X', -1);\r\n    test_find(L\"abcdeVWXYZ\", 10, L'X', 7);\r\n\r\n#ifdef __cpp_char8_t\r\n    test_find(u8\"abcdeVWXYZ\", 5, u8'X', -1);\r\n    test_find(u8\"abcdeVWXYZ\", 10, u8'X', 7);\r\n#endif // __cpp_char8_t\r\n\r\n    test_find(u\"abcdeVWXYZ\", 5, u'X', -1);\r\n    test_find(u\"abcdeVWXYZ\", 10, u'X', 7);\r\n\r\n    test_find(U\"abcdeVWXYZ\", 5, U'X', -1);\r\n    test_find(U\"abcdeVWXYZ\", 10, U'X', 7);\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(test()); // test at compile-time\r\n\r\nint main() {\r\n    assert(test()); // test at run-time\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0429R9_flat_map/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0429R9_flat_map/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <atomic>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <flat_map>\r\n#include <functional>\r\n#include <memory>\r\n#include <print>\r\n#include <ranges>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <test_container_requirements.hpp>\r\n#include <test_death.hpp>\r\nusing namespace std;\r\n\r\n// See GH-5965: Speculative resolution of LWG-3963 \"Different flat_(multi)map specializations\r\n// should be able to share same nested classes\" is not likely to be accepted\r\nstatic_assert(!is_same_v<flat_map<int, int>::containers, flat_multimap<int, int>::containers>);\r\nstatic_assert(!is_same_v<flat_map<int, int>::value_compare, flat_multimap<int, int>::value_compare>);\r\n\r\ntemplate <class T, template <class...> class Tmpl>\r\nconstexpr bool is_specialization_v = false;\r\ntemplate <template <class...> class Tmpl, class... Ts>\r\nconstexpr bool is_specialization_v<Tmpl<Ts...>, Tmpl> = true;\r\n\r\ntemplate <class T>\r\nconcept IsFlatMap =\r\n    is_specialization_v<remove_cvref_t<T>, flat_map> || is_specialization_v<remove_cvref_t<T>, flat_multimap>;\r\n\r\ntemplate <IsFlatMap T>\r\nvoid assert_all_requirements(const T& s) {\r\n    assert_container_requirements(s);\r\n    assert_reversible_container_requirements(s);\r\n    assert_three_way_comparability<T>();\r\n    assert_map_requirements<T>();\r\n\r\n    assert_noexcept_requirements(s);\r\n    assert_noexcept_requirements(const_cast<T&>(s));\r\n\r\n    assert_is_sorted_maybe_unique<is_specialization_v<T, flat_map>>(s);\r\n}\r\n\r\ntemplate <IsFlatMap T>\r\n[[nodiscard]] bool check_key_content(const T& obj, const typename T::key_container_type& expected) {\r\n    assert_all_requirements(obj);\r\n    return ranges::equal(obj.keys(), expected);\r\n}\r\n\r\ntemplate <IsFlatMap T>\r\n[[nodiscard]] bool check_value_content(const T& obj, const typename T::mapped_container_type& expected) {\r\n    return ranges::equal(obj.values(), expected);\r\n}\r\n\r\ntemplate <IsFlatMap T>\r\n[[nodiscard]] bool check_content(const T& obj, const type_identity_t<T>& expected) {\r\n    assert_all_requirements(obj);\r\n    if (!ranges::equal(obj, expected)) {\r\n        println(stderr, \"Unexpected content!\\nExpected {}\\nActual {}\", expected, obj);\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\n\r\nenum class subrange_type : bool {\r\n    equal,\r\n    permutation,\r\n};\r\n\r\nstruct subrange_t { // represents a closed subrange [first_index, last_index]\r\n    ptrdiff_t first_index;\r\n    ptrdiff_t last_index;\r\n    subrange_type type;\r\n\r\n    subrange_t(const ptrdiff_t first_index_, const ptrdiff_t last_index_, const subrange_type type_) noexcept\r\n        : first_index(first_index_), last_index(last_index_), type(type_) {\r\n        assert(first_index <= last_index);\r\n    }\r\n};\r\n\r\ntemplate <IsFlatMap T>\r\n[[nodiscard]] bool check_value_content(\r\n    const T& obj, const typename T::mapped_container_type& expected, const vector<subrange_t>& subranges) {\r\n    const auto& actual = obj.values();\r\n    if (actual.size() != expected.size()) {\r\n        return false;\r\n    }\r\n\r\n    // Verify that the subranges cover the entire range with no gaps or overlaps.\r\n    // We assert instead of returning false because any problems would be caused by the check_value_content() call.\r\n    if (expected.empty()) {\r\n        assert(subranges.empty());\r\n    } else {\r\n        assert(!subranges.empty());\r\n        assert(subranges.front().first_index == 0);\r\n        assert(subranges.back().last_index == static_cast<ptrdiff_t>(expected.size() - 1));\r\n        const auto is_gap_or_overlap = [](const subrange_t& sr1, const subrange_t& sr2) {\r\n            return sr1.last_index + 1 != sr2.first_index;\r\n        };\r\n        assert(ranges::adjacent_find(subranges, is_gap_or_overlap) == subranges.end());\r\n    }\r\n\r\n    return ranges::all_of(subranges, [&expected, &actual](const subrange_t& sr) {\r\n        const auto& [first_index, last_index, type] = sr;\r\n        const ranges::subrange actual_subrange{actual.begin() + first_index, actual.begin() + last_index + 1};\r\n        const ranges::subrange expected_subrange{expected.begin() + first_index, expected.begin() + last_index + 1};\r\n\r\n        if (type == subrange_type::equal) {\r\n            return ranges::equal(actual_subrange, expected_subrange);\r\n        } else {\r\n            return ranges::is_permutation(actual_subrange, expected_subrange);\r\n        }\r\n    });\r\n}\r\n\r\ntemplate <class T>\r\nclass MyAllocator {\r\npublic:\r\n    using value_type = T;\r\n\r\n    MyAllocator() = default;\r\n    template <class U>\r\n    MyAllocator(const MyAllocator<U>&) noexcept {}\r\n\r\n    [[nodiscard]] static size_t getActiveAllocationCount() {\r\n        return s_allocations.load();\r\n    }\r\n\r\n    [[nodiscard]] T* allocate(size_t n) {\r\n        ++s_allocations;\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* p, size_t n) noexcept {\r\n        --s_allocations;\r\n        allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class U>\r\n    [[nodiscard]] friend constexpr bool operator==(const MyAllocator&, const MyAllocator<U>&) noexcept {\r\n        return true;\r\n    }\r\n\r\nprivate:\r\n    static inline atomic<size_t> s_allocations{0};\r\n};\r\n\r\ntemplate <class T, class U>\r\nstruct almost_pair {\r\n    using first_type  = T;\r\n    using second_type = U;\r\n\r\n    T first;\r\n    U second;\r\n\r\n    constexpr operator pair<T, U>() const {\r\n        return {first, second};\r\n    }\r\n};\r\n\r\nnamespace std {\r\n    template <size_t N, class T, class U>\r\n    struct tuple_element<N, almost_pair<T, U>> {\r\n        using type = conditional_t<N == 0, T, U>;\r\n    };\r\n} // namespace std\r\n\r\ntemplate <class T>\r\nclass Packaged {\r\nprivate:\r\n    T value;\r\n\r\npublic:\r\n    Packaged() : value() {}\r\n    template <class U>\r\n        requires constructible_from<T, U>\r\n    Packaged(U&& u) : value(forward<U>(u)) {}\r\n\r\n    T get() const {\r\n        return value;\r\n    }\r\n\r\n    void set(T t) {\r\n        value = t;\r\n    }\r\n\r\n    friend bool operator==(const Packaged&, const Packaged&) = default;\r\n\r\n    friend bool operator==(const Packaged& lhs, const T& rhs) {\r\n        return lhs.value == rhs;\r\n    }\r\n\r\n    friend auto operator<=>(const Packaged&, const Packaged&) = default;\r\n};\r\n\r\ntemplate <class T>\r\nstruct PackagedCompare : less<Packaged<T>> {};\r\n\r\ntemplate <class T>\r\nstruct TransparentPackagedCompare : PackagedCompare<T> {\r\n    using is_transparent = void;\r\n\r\n    bool operator()(const Packaged<T>& lhs, const Packaged<T>& rhs) const {\r\n        return PackagedCompare<T>::operator()(lhs, rhs);\r\n    }\r\n\r\n    bool operator()(const T& lhs, const Packaged<T>& rhs) const {\r\n        return lhs < rhs.get();\r\n    }\r\n\r\n    bool operator()(const Packaged<T>& lhs, const T& rhs) const {\r\n        return lhs.get() < rhs;\r\n    }\r\n};\r\n\r\nstruct MyAllocatorCounter {\r\n    MyAllocatorCounter() : activeAllocations{MyAllocator<int>::getActiveAllocationCount()} {}\r\n\r\n    [[nodiscard]] bool check_then_reset() {\r\n        const bool allocated_some = MyAllocator<int>::getActiveAllocationCount() > activeAllocations;\r\n        activeAllocations         = MyAllocator<int>::getActiveAllocationCount();\r\n        return allocated_some;\r\n    }\r\n\r\n    size_t activeAllocations;\r\n};\r\n\r\ntemplate <template <class...> class KeyCont, template <class...> class MappedCont>\r\nvoid test_construction() {\r\n    // Using CTAD, the given MyAllocator is only used by the container when the constructor (deduction guide)\r\n    // directly accepts KeyContainer and MappedContainer or using two deduction guides:\r\n    //      flat_map(from_range_t, _Rng&&, _Compare, _Allocator)\r\n    //      flat_map(from_range_t, _Rng&&, _Allocator)\r\n    // In other cases we have to fully specify template arguments, such as for flat_map(_Iter, _Iter, _Allocator)\r\n    using flat_map_my_allocator =\r\n        flat_map<int, int, less<int>, KeyCont<int, MyAllocator<int>>, MappedCont<int, MyAllocator<int>>>;\r\n    using flat_multimap_my_allocator =\r\n        flat_multimap<int, int, less<int>, KeyCont<int, MyAllocator<int>>, MappedCont<int, MyAllocator<int>>>;\r\n\r\n    {\r\n        // Test flat_map() and flat_map(const key_compare&)\r\n        {\r\n            flat_map<int, int> fmap;\r\n            flat_map<int, int> fmap1(less<int>{});\r\n\r\n            assert(check_key_content(fmap, {}));\r\n            assert(check_value_content(fmap, {}));\r\n            assert(fmap == fmap1);\r\n        }\r\n        {\r\n            flat_multimap<int, int> fmmap;\r\n            flat_multimap<int, int> fmmap1(less<int>{});\r\n\r\n            assert(check_key_content(fmmap, {}));\r\n            assert(check_value_content(fmmap, {}));\r\n            assert(fmmap == fmmap1);\r\n        }\r\n    }\r\n    {\r\n        // Test flat_map(const alloc&)\r\n        // and  flat_map(const key_comp&, const alloc&)\r\n        {\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_map_my_allocator fmap(MyAllocator<int>{});\r\n            assert(!allocation_counter.check_then_reset());\r\n            flat_map_my_allocator fmap1(less<int>{}, MyAllocator<int>{});\r\n            assert(!allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmap, {}));\r\n            assert(check_value_content(fmap, {}));\r\n            assert(fmap == fmap1);\r\n        }\r\n        {\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_multimap_my_allocator fmmap(MyAllocator<int>{});\r\n            assert(!allocation_counter.check_then_reset());\r\n            flat_multimap_my_allocator fmmap1(less<int>{}, MyAllocator<int>{});\r\n            assert(!allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmmap, {}));\r\n            assert(check_value_content(fmmap, {}));\r\n            assert(fmmap == fmmap1);\r\n        }\r\n    }\r\n    {\r\n        KeyCont<int> keys    = {0, 1, 2, 3, 4, 2};\r\n        MappedCont<int> vals = {44, 2324, 635462, 433, 5, 7};\r\n\r\n        // Test flat_map(key_cont, mapped_cont, comp = key_comp())\r\n        {\r\n            flat_map fmap(keys, vals);\r\n            flat_map fmap1(keys, vals, less<int>{});\r\n\r\n            assert(check_key_content(fmap, {0, 1, 2, 3, 4}));\r\n            assert(check_value_content(fmap, {44, 2324, 635462, 433, 5}));\r\n            assert(fmap == fmap1);\r\n        }\r\n        {\r\n            flat_multimap fmmap(keys, vals);\r\n            flat_multimap fmmap1(keys, vals, less<int>{});\r\n\r\n            assert(check_key_content(fmmap, {0, 1, 2, 2, 3, 4}));\r\n            assert(check_value_content(fmmap, {44, 2324, 635462, 7, 433, 5},\r\n                {\r\n                    {0, 1, subrange_type::equal},\r\n                    {2, 3, subrange_type::permutation},\r\n                    {4, 5, subrange_type::equal},\r\n                }));\r\n            assert(fmmap == fmmap1);\r\n        }\r\n\r\n        // Test flat_map(const flat_map&)\r\n        // and  flat_map(flat_map&&)\r\n        {\r\n            flat_map fmap(keys, vals);\r\n            flat_map fmap1(fmap);\r\n            flat_map fmap2(move(fmap));\r\n\r\n            assert(check_key_content(fmap1, {0, 1, 2, 3, 4}));\r\n            assert(check_value_content(fmap1, {44, 2324, 635462, 433, 5}));\r\n            assert(fmap1 == fmap2);\r\n        }\r\n        {\r\n            flat_multimap fmmap(keys, vals);\r\n            flat_multimap fmmap1(fmmap);\r\n            flat_multimap fmmap2(move(fmmap));\r\n\r\n            assert(check_key_content(fmmap1, {0, 1, 2, 2, 3, 4}));\r\n            assert(check_value_content(fmmap1, {44, 2324, 635462, 7, 433, 5},\r\n                {\r\n                    {0, 1, subrange_type::equal},\r\n                    {2, 3, subrange_type::permutation},\r\n                    {4, 5, subrange_type::equal},\r\n                }));\r\n            assert(fmmap1 == fmmap2);\r\n        }\r\n    }\r\n    {\r\n        KeyCont<int, MyAllocator<int>> keys    = {0, 1, 2, 3, 4, 2};\r\n        MappedCont<int, MyAllocator<int>> vals = {44, 2324, 635462, 433, 5, 7};\r\n\r\n        // Test flat_map(const key_cont&, const mapped_cont&, const key_comp&, const alloc&)\r\n        // and  flat_map(const key_cont&, const mapped_cont&, const alloc&)\r\n        {\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_map fmap(keys, vals, MyAllocator<int>{});\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_map fmap1(keys, vals, less<int>{}, MyAllocator<int>{});\r\n            assert(allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmap, {0, 1, 2, 3, 4}));\r\n            assert(check_value_content(fmap, {44, 2324, 635462, 433, 5}));\r\n            assert(fmap == fmap1);\r\n        }\r\n        {\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_multimap fmmap(keys, vals, MyAllocator<int>{});\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_multimap fmmap1(keys, vals, less<int>{}, MyAllocator<int>{});\r\n            assert(allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmmap, {0, 1, 2, 2, 3, 4}));\r\n            assert(check_value_content(fmmap, {44, 2324, 635462, 7, 433, 5},\r\n                {\r\n                    {0, 1, subrange_type::equal},\r\n                    {2, 3, subrange_type::permutation},\r\n                    {4, 5, subrange_type::equal},\r\n                }));\r\n            assert(fmmap == fmmap1);\r\n        }\r\n\r\n        // Test flat_map(const flat_map&, const alloc&)\r\n        // and  flat_map(flat_map&&, const alloc&)\r\n        {\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_map fmap(keys, vals, MyAllocator<int>{});\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_map fmap1(fmap, MyAllocator<int>{});\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_map fmap2(move(fmap), MyAllocator<int>{});\r\n            assert(!allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmap1, {0, 1, 2, 3, 4}));\r\n            assert(check_value_content(fmap1, {44, 2324, 635462, 433, 5}));\r\n            assert(fmap1 == fmap2);\r\n        }\r\n        {\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_multimap fmmap(keys, vals, MyAllocator<int>{});\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_multimap fmmap1(fmmap, MyAllocator<int>{});\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_multimap fmmap2(move(fmmap), MyAllocator<int>{});\r\n            assert(!allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmmap1, {0, 1, 2, 2, 3, 4}));\r\n            assert(check_value_content(fmmap1, {44, 2324, 635462, 7, 433, 5},\r\n                {\r\n                    {0, 1, subrange_type::equal},\r\n                    {2, 3, subrange_type::permutation},\r\n                    {4, 5, subrange_type::equal},\r\n                }));\r\n            assert(fmmap1 == fmmap2);\r\n        }\r\n    }\r\n    {\r\n        // Test flat_map(_Sorted_t, key_cont, mapped_cont, comp = key_comp())\r\n        {\r\n            KeyCont<int> keys    = {0, 1, 2, 3, 38, 242};\r\n            MappedCont<int> vals = {44, 2324, 635462, 433, 5, 7};\r\n\r\n            flat_map fmap(sorted_unique, keys, vals);\r\n            flat_map fmap1(sorted_unique, keys, vals, less<int>{});\r\n\r\n            assert(check_key_content(fmap, {0, 1, 2, 3, 38, 242}));\r\n            assert(check_value_content(fmap, {44, 2324, 635462, 433, 5, 7}));\r\n            assert(fmap == fmap1);\r\n        }\r\n        {\r\n            KeyCont<int> keys    = {0, 1, 2, 2, 3, 4};\r\n            MappedCont<int> vals = {44, 2324, 635462, 7, 433, 5};\r\n\r\n            flat_multimap fmmap(sorted_equivalent, keys, vals);\r\n            flat_multimap fmmap1(sorted_equivalent, keys, vals, less<int>{});\r\n\r\n            assert(check_key_content(fmmap, {0, 1, 2, 2, 3, 4}));\r\n            assert(check_value_content(\r\n                fmmap, {44, 2324, 635462, 7, 433, 5})); // guaranteed by N5032 [flat.multimap.cons]/3\r\n            assert(fmmap == fmmap1);\r\n        }\r\n        {\r\n            using non_multi = flat_map<int, int, less<int>, KeyCont<int>, MappedCont<int>>;\r\n            using multi     = flat_multimap<int, int, less<int>, KeyCont<int>, MappedCont<int>>;\r\n            static_assert(is_constructible_v<non_multi, sorted_unique_t, KeyCont<int>, MappedCont<int>>);\r\n            static_assert(!is_constructible_v<multi, sorted_unique_t, KeyCont<int>, MappedCont<int>>);\r\n            static_assert(!is_constructible_v<non_multi, sorted_equivalent_t, KeyCont<int>, MappedCont<int>>);\r\n            static_assert(is_constructible_v<multi, sorted_equivalent_t, KeyCont<int>, MappedCont<int>>);\r\n        }\r\n    }\r\n    {\r\n        // Test flat_map(_Sorted_t, const key_cont&, const mapped_cont&, const key_comp&, const alloc&)\r\n        // and  flat_map(_Sorted_t, const key_cont&, const mapped_cont&, const alloc&)\r\n        {\r\n            KeyCont<int, MyAllocator<int>> keys    = {0, 1, 2, 3, 4};\r\n            MappedCont<int, MyAllocator<int>> vals = {44, 2324, 635462, 433, 5};\r\n\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_map fmap(sorted_unique, keys, vals, MyAllocator<int>{});\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_map fmap1(sorted_unique, keys, vals, less<int>{}, MyAllocator<int>{});\r\n            assert(allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmap, {0, 1, 2, 3, 4}));\r\n            assert(check_value_content(fmap, {44, 2324, 635462, 433, 5}));\r\n            assert(fmap == fmap1);\r\n        }\r\n        {\r\n            KeyCont<int, MyAllocator<int>> keys    = {0, 1, 2, 2, 3, 4};\r\n            MappedCont<int, MyAllocator<int>> vals = {44, 2324, 635462, 7, 433, 5};\r\n\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_multimap fmmap(sorted_equivalent, keys, vals, MyAllocator<int>{});\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_multimap fmmap1(sorted_equivalent, keys, vals, less<int>{}, MyAllocator<int>{});\r\n            assert(allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmmap, {0, 1, 2, 2, 3, 4}));\r\n            assert(check_value_content(fmmap, {44, 2324, 635462, 7, 433, 5},\r\n                {\r\n                    {0, 1, subrange_type::equal},\r\n                    {2, 3, subrange_type::permutation},\r\n                    {4, 5, subrange_type::equal},\r\n                }));\r\n            assert(fmmap == fmmap1);\r\n        }\r\n    }\r\n    {\r\n        // Test flat_map(iter, iter, comp = key_compare())\r\n        almost_pair<int, int> value_types[]{{0, 44}, {1, 2324}, {2, 635462}, {2, 7}, {3, 433}, {4, 5}};\r\n\r\n        {\r\n            flat_map fmap{ranges::begin(value_types), ranges::end(value_types)};\r\n            flat_map fmap1{ranges::begin(value_types), ranges::end(value_types), less<int>{}};\r\n\r\n            assert(check_key_content(fmap, {0, 1, 2, 3, 4}));\r\n            assert(check_value_content(fmap, {44, 2324, 635462, 433, 5}));\r\n            assert(fmap == fmap1);\r\n        }\r\n        {\r\n            flat_multimap fmmap{ranges::begin(value_types), ranges::end(value_types)};\r\n            flat_multimap fmmap1{ranges::begin(value_types), ranges::end(value_types), less<int>{}};\r\n\r\n            assert(check_key_content(fmmap, {0, 1, 2, 2, 3, 4}));\r\n            assert(check_value_content(fmmap, {44, 2324, 635462, 7, 433, 5}));\r\n            assert(fmmap == fmmap1);\r\n        }\r\n    }\r\n    {\r\n        // Test flat_map(iter, iter, const key_comp&, const alloc&)\r\n        // and  flat_map(iter, iter, const alloc&)\r\n        almost_pair<int, int> value_types[]{{0, 44}, {1, 2324}, {2, 635462}, {2, 7}, {3, 433}, {4, 5}};\r\n        {\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_map_my_allocator fmap{ranges::begin(value_types), ranges::end(value_types), MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_map_my_allocator fmap1{\r\n                ranges::begin(value_types), ranges::end(value_types), less<int>{}, MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmap, {0, 1, 2, 3, 4}));\r\n            assert(check_value_content(fmap, {44, 2324, 635462, 433, 5}));\r\n            assert(fmap == fmap1);\r\n        }\r\n        {\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_multimap_my_allocator fmmap{ranges::begin(value_types), ranges::end(value_types), MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_multimap_my_allocator fmmap1{\r\n                ranges::begin(value_types), ranges::end(value_types), less<int>{}, MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmmap, {0, 1, 2, 2, 3, 4}));\r\n            assert(check_value_content(fmmap, {44, 2324, 635462, 7, 433, 5}));\r\n            assert(fmmap == fmmap1);\r\n        }\r\n    }\r\n    {\r\n        // Test flat_map(from_range_t, _Rng &&, const key_compare&)\r\n        // and  flat_map(from_range_t, _Rng &&)\r\n        almost_pair<int, int> value_types[]{{0, 44}, {1, 2324}, {2, 635462}, {2, 7}, {3, 433}, {4, 5}};\r\n        {\r\n            flat_map fmap{from_range, value_types};\r\n            flat_map fmap1{from_range, value_types, less<int>{}};\r\n\r\n            assert(check_key_content(fmap, {0, 1, 2, 3, 4}));\r\n            assert(check_value_content(fmap, {44, 2324, 635462, 433, 5}));\r\n            assert(fmap == fmap1);\r\n        }\r\n\r\n        {\r\n            flat_multimap fmmap{from_range, value_types};\r\n            flat_multimap fmmap1{from_range, value_types, less<int>{}};\r\n\r\n            assert(check_key_content(fmmap, {0, 1, 2, 2, 3, 4}));\r\n            assert(check_value_content(fmmap, {44, 2324, 635462, 7, 433, 5}));\r\n            assert(fmmap == fmmap1);\r\n        }\r\n    }\r\n    {\r\n        // Test flat_map(from_range_t, _Rng &&, const key_compare&, const alloc&)\r\n        // and  flat_map(from_range_t, _Rng &&, const alloc&)\r\n        // These constructors with allocators have a corresponding deduction guide - can rely on CTAD\r\n        almost_pair<int, int> value_types[]{{0, 44}, {1, 2324}, {2, 635462}, {2, 7}, {3, 433}, {4, 5}};\r\n\r\n        {\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_map fmap{from_range, value_types, MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_map fmap1{from_range, value_types, less<int>{}, MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmap, {0, 1, 2, 3, 4}));\r\n            assert(check_value_content(fmap, {44, 2324, 635462, 433, 5}));\r\n            assert(fmap == fmap1);\r\n        }\r\n        {\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_multimap fmmap{from_range, value_types, MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_multimap fmmap1{from_range, value_types, less<int>{}, MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmmap, {0, 1, 2, 2, 3, 4}));\r\n            assert(check_value_content(fmmap, {44, 2324, 635462, 7, 433, 5}));\r\n            assert(fmmap == fmmap1);\r\n        }\r\n    }\r\n    {\r\n        // Test flat_map(_Sorted_t, iter, iter, comp = key_comp())\r\n        {\r\n            almost_pair<int, int> value_types[]{{0, 44}, {1, 2324}, {2, 635462}, {3, 433}, {4, 5}};\r\n\r\n            flat_map fmap{sorted_unique, ranges::begin(value_types), ranges::end(value_types)};\r\n            flat_map fmap1{sorted_unique, ranges::begin(value_types), ranges::end(value_types), less<int>{}};\r\n\r\n            assert(check_key_content(fmap, {0, 1, 2, 3, 4}));\r\n            assert(check_value_content(fmap, {44, 2324, 635462, 433, 5}));\r\n            assert(fmap == fmap1);\r\n        }\r\n        {\r\n            almost_pair<int, int> value_types[]{{0, 44}, {1, 2324}, {2, 635462}, {2, 7}, {3, 433}, {4, 5}};\r\n\r\n            flat_multimap fmmap{sorted_equivalent, ranges::begin(value_types), ranges::end(value_types)};\r\n            flat_multimap fmmap1{sorted_equivalent, ranges::begin(value_types), ranges::end(value_types), less<int>{}};\r\n\r\n            assert(check_key_content(fmmap, {0, 1, 2, 2, 3, 4}));\r\n            assert(check_value_content(fmmap, {44, 2324, 635462, 7, 433, 5}));\r\n            assert(fmmap == fmmap1);\r\n        }\r\n    }\r\n    {\r\n        // Test flat_map(_Sorted_t, iter, iter, const key_comp&, const alloc&)\r\n        // and  flat_map(_Sorted_t, iter, iter, const alloc&)\r\n        {\r\n            almost_pair<int, int> value_types[]{{0, 44}, {1, 2324}, {2, 635462}, {3, 433}, {4, 5}};\r\n\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_map_my_allocator fmap{\r\n                sorted_unique, ranges::begin(value_types), ranges::end(value_types), MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_map_my_allocator fmap1{\r\n                sorted_unique, ranges::begin(value_types), ranges::end(value_types), less<int>{}, MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmap, {0, 1, 2, 3, 4}));\r\n            assert(check_value_content(fmap, {44, 2324, 635462, 433, 5}));\r\n            assert(fmap == fmap1);\r\n        }\r\n        {\r\n            almost_pair<int, int> value_types[]{{0, 44}, {1, 2324}, {2, 635462}, {2, 7}, {3, 433}, {4, 5}};\r\n\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_multimap_my_allocator fmmap{\r\n                sorted_equivalent, ranges::begin(value_types), ranges::end(value_types), MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_multimap_my_allocator fmmap1{sorted_equivalent, ranges::begin(value_types), ranges::end(value_types),\r\n                less<int>{}, MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmmap, {0, 1, 2, 2, 3, 4}));\r\n            assert(check_value_content(fmmap, {44, 2324, 635462, 7, 433, 5}));\r\n            assert(fmmap == fmmap1);\r\n        }\r\n    }\r\n    {\r\n        // Test flat_map(initializer_list, comp = key_comp())\r\n        {\r\n            flat_map fmap{{pair{0, 44}, pair{1, 2324}, pair{2, 635462}, pair{2, 7}, pair{3, 433}, pair{4, 5}}};\r\n            flat_map fmap1{\r\n                {pair{0, 44}, pair{1, 2324}, pair{2, 635462}, pair{2, 7}, pair{3, 433}, pair{4, 5}}, less<int>{}};\r\n\r\n            assert(check_key_content(fmap, {0, 1, 2, 3, 4}));\r\n            assert(check_value_content(fmap, {44, 2324, 635462, 433, 5}));\r\n            assert(fmap == fmap1);\r\n        }\r\n        {\r\n            flat_multimap fmmap{{pair{0, 44}, pair{1, 2324}, pair{2, 635462}, pair{2, 7}, pair{3, 433}, pair{4, 5}}};\r\n            flat_multimap fmmap1{\r\n                {pair{0, 44}, pair{1, 2324}, pair{2, 635462}, pair{2, 7}, pair{3, 433}, pair{4, 5}}, less<int>{}};\r\n\r\n            assert(check_key_content(fmmap, {0, 1, 2, 2, 3, 4}));\r\n            assert(check_value_content(fmmap, {44, 2324, 635462, 7, 433, 5}));\r\n            assert(fmmap == fmmap1);\r\n        }\r\n    }\r\n    {\r\n        // Test flat_map(initializer_list, const key_comp&, const alloc&)\r\n        // and  flat_map(initializer_list, const alloc&)\r\n        {\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_map_my_allocator fmap{{{0, 44}, {1, 2324}, {2, 635462}, {2, 7}, {3, 433}, {4, 5}}, MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_map_my_allocator fmap1{\r\n                {{0, 44}, {1, 2324}, {2, 635462}, {2, 7}, {3, 433}, {4, 5}}, less<int>{}, MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmap, {0, 1, 2, 3, 4}));\r\n            assert(check_value_content(fmap, {44, 2324, 635462, 433, 5}));\r\n            assert(fmap == fmap1);\r\n        }\r\n        {\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_multimap_my_allocator fmmap{\r\n                {{0, 44}, {1, 2324}, {2, 635462}, {2, 7}, {3, 433}, {4, 5}}, MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_multimap_my_allocator fmmap1{\r\n                {{0, 44}, {1, 2324}, {2, 635462}, {2, 7}, {3, 433}, {4, 5}}, less<int>{}, MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmmap, {0, 1, 2, 2, 3, 4}));\r\n            assert(check_value_content(fmmap, {44, 2324, 635462, 7, 433, 5}));\r\n            assert(fmmap == fmmap1);\r\n        }\r\n    }\r\n    {\r\n        // Test flat_map(_Sorted_t, initializer_list, comp = key_comp())\r\n        {\r\n            flat_map fmap{sorted_unique, {pair{0, 44}, pair{1, 2324}, pair{2, 635462}, pair{3, 433}, pair{4, 5}}};\r\n            flat_map fmap1{\r\n                sorted_unique, {pair{0, 44}, pair{1, 2324}, pair{2, 635462}, pair{3, 433}, pair{4, 5}}, less<int>{}};\r\n\r\n            assert(check_key_content(fmap, {0, 1, 2, 3, 4}));\r\n            assert(check_value_content(fmap, {44, 2324, 635462, 433, 5}));\r\n            assert(fmap == fmap1);\r\n        }\r\n        {\r\n            flat_multimap fmmap{\r\n                sorted_equivalent, {pair{0, 44}, pair{1, 2324}, pair{2, 635462}, pair{2, 7}, pair{3, 433}, pair{4, 5}}};\r\n            flat_multimap fmmap1{sorted_equivalent,\r\n                {pair{0, 44}, pair{1, 2324}, pair{2, 635462}, pair{2, 7}, pair{3, 433}, pair{4, 5}}, less<int>{}};\r\n\r\n            assert(check_key_content(fmmap, {0, 1, 2, 2, 3, 4}));\r\n            assert(check_value_content(fmmap, {44, 2324, 635462, 7, 433, 5}));\r\n            assert(fmmap == fmmap1);\r\n        }\r\n    }\r\n    {\r\n        // Test flat_map(_Sorted_t, initializer_list, const key_comp&, const alloc&)\r\n        // and  flat_map(_Sorted_t, initializer_list, const alloc&)\r\n        {\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_map_my_allocator fmap{\r\n                sorted_unique, {{0, 44}, {1, 2324}, {2, 635462}, {3, 433}, {4, 5}}, MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_map_my_allocator fmap1{\r\n                sorted_unique, {{0, 44}, {1, 2324}, {2, 635462}, {3, 433}, {4, 5}}, less<int>{}, MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmap, {0, 1, 2, 3, 4}));\r\n            assert(check_value_content(fmap, {44, 2324, 635462, 433, 5}));\r\n            assert(fmap == fmap1);\r\n        }\r\n        {\r\n            MyAllocatorCounter allocation_counter;\r\n            flat_multimap_my_allocator fmmap{\r\n                sorted_equivalent, {{0, 44}, {1, 2324}, {2, 635462}, {2, 7}, {3, 433}, {4, 5}}, MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n            flat_multimap_my_allocator fmmap1{sorted_equivalent,\r\n                {{0, 44}, {1, 2324}, {2, 635462}, {2, 7}, {3, 433}, {4, 5}}, less<int>{}, MyAllocator<int>{}};\r\n            assert(allocation_counter.check_then_reset());\r\n\r\n            assert(check_key_content(fmmap, {0, 1, 2, 2, 3, 4}));\r\n            assert(check_value_content(fmmap, {44, 2324, 635462, 7, 433, 5}));\r\n            assert(fmmap == fmmap1);\r\n        }\r\n    }\r\n    {\r\n        PackagedCompare<int> comp;\r\n        {\r\n            flat_map<Packaged<int>, int, PackagedCompare<int>> fmap;\r\n            flat_map<Packaged<int>, int, PackagedCompare<int>> fmap1(comp);\r\n\r\n            assert(check_key_content(fmap, {}));\r\n            assert(check_value_content(fmap, {}));\r\n            assert(fmap == fmap1);\r\n        }\r\n        {\r\n            flat_multimap<Packaged<int>, int, PackagedCompare<int>> fmmap;\r\n            flat_multimap<Packaged<int>, int, PackagedCompare<int>> fmmap1(comp);\r\n\r\n            assert(check_key_content(fmmap, {}));\r\n            assert(check_value_content(fmmap, {}));\r\n            assert(fmmap == fmmap1);\r\n        }\r\n    }\r\n    {\r\n        PackagedCompare<int> comp;\r\n        MyAllocator<Packaged<int>> alloc;\r\n        flat_map<Packaged<int>, Packaged<int>, PackagedCompare<int>, KeyCont<Packaged<int>, MyAllocator<Packaged<int>>>,\r\n            MappedCont<Packaged<int>, MyAllocator<Packaged<int>>>>\r\n            fmap(comp, alloc);\r\n        assert(check_key_content(fmap, {}));\r\n        assert(check_value_content(fmap, {}));\r\n        flat_multimap<Packaged<int>, Packaged<int>, PackagedCompare<int>,\r\n            KeyCont<Packaged<int>, MyAllocator<Packaged<int>>>, MappedCont<Packaged<int>, MyAllocator<Packaged<int>>>>\r\n            fmmap(comp, alloc);\r\n        assert(check_key_content(fmmap, {}));\r\n        assert(check_value_content(fmmap, {}));\r\n    }\r\n    {\r\n        MyAllocator<Packaged<int>> alloc;\r\n        flat_map<Packaged<int>, Packaged<int>, PackagedCompare<int>, KeyCont<Packaged<int>, MyAllocator<Packaged<int>>>,\r\n            MappedCont<Packaged<int>, MyAllocator<Packaged<int>>>>\r\n            fmap(alloc);\r\n        assert(check_key_content(fmap, {}));\r\n        assert(check_value_content(fmap, {}));\r\n        flat_multimap<Packaged<int>, Packaged<int>, PackagedCompare<int>,\r\n            KeyCont<Packaged<int>, MyAllocator<Packaged<int>>>, MappedCont<Packaged<int>, MyAllocator<Packaged<int>>>>\r\n            fmmap(alloc);\r\n        assert(check_key_content(fmmap, {}));\r\n        assert(check_value_content(fmmap, {}));\r\n    }\r\n    {\r\n        MyAllocator<Packaged<int>> alloc;\r\n        flat_map<Packaged<int>, int, PackagedCompare<int>, KeyCont<Packaged<int>, MyAllocator<Packaged<int>>>,\r\n            MappedCont<int, MyAllocator<int>>>\r\n            fmap(alloc);\r\n        assert(check_key_content(fmap, {}));\r\n        assert(check_value_content(fmap, {}));\r\n        flat_multimap<Packaged<int>, int, PackagedCompare<int>, KeyCont<Packaged<int>, MyAllocator<Packaged<int>>>,\r\n            MappedCont<int, MyAllocator<int>>>\r\n            fmmap(alloc);\r\n        assert(check_key_content(fmmap, {}));\r\n        assert(check_value_content(fmmap, {}));\r\n    }\r\n    {\r\n        PackagedCompare<int> comp;\r\n        MyAllocator<int> alloc;\r\n        KeyCont<Packaged<int>, MyAllocator<Packaged<int>>> keys = {0, 1, 2, 3, 4, 2};\r\n        MappedCont<int, MyAllocator<int>> vals                  = {44, 2324, 635462, 433, 5, 7};\r\n        flat_map fmap(keys, vals, comp, alloc);\r\n        assert(check_key_content(fmap, {0, 1, 2, 3, 4}));\r\n        assert(check_value_content(fmap, {44, 2324, 635462, 433, 5}));\r\n        flat_multimap fmmap(keys, vals, comp, alloc);\r\n        assert(check_key_content(fmmap, {0, 1, 2, 2, 3, 4}));\r\n        assert(check_value_content(fmmap, {44, 2324, 635462, 7, 433, 5},\r\n            {\r\n                {0, 1, subrange_type::equal},\r\n                {2, 3, subrange_type::permutation},\r\n                {4, 5, subrange_type::equal},\r\n            }));\r\n    }\r\n    {\r\n        TransparentPackagedCompare<int> comp;\r\n        MyAllocator<int> alloc;\r\n        KeyCont<Packaged<int>, MyAllocator<Packaged<int>>> keys = {0, 1, 2, 3, 4, 2};\r\n        MappedCont<int, MyAllocator<int>> vals                  = {44, 2324, 635462, 433, 5, 7};\r\n        flat_map fmap(keys, vals, comp, alloc);\r\n        assert(check_key_content(fmap, {0, 1, 2, 3, 4}));\r\n        assert(check_value_content(fmap, {44, 2324, 635462, 433, 5}));\r\n        flat_multimap fmmap(keys, vals, comp, alloc);\r\n        assert(check_key_content(fmmap, {0, 1, 2, 2, 3, 4}));\r\n        assert(check_value_content(fmmap, {44, 2324, 635462, 7, 433, 5},\r\n            {\r\n                {0, 1, subrange_type::equal},\r\n                {2, 3, subrange_type::permutation},\r\n                {4, 5, subrange_type::equal},\r\n            }));\r\n    }\r\n    // Test GH-4779 (access from _Flat_map_base to derived flat_map/flat_multimap)\r\n    {\r\n        allocator<int> ator;\r\n\r\n        using fm = flat_map<int, int, less<>, KeyCont<int>, MappedCont<int>>;\r\n        fm m0;\r\n        fm m1(m0);\r\n        fm m2(m0, ator);\r\n        fm m3(move(m0));\r\n        fm m4(move(m1), ator);\r\n\r\n        using fmm = flat_multimap<int, int, less<>, KeyCont<int>, MappedCont<int>>;\r\n        fmm mm0;\r\n        fmm mm1(mm0);\r\n        fmm mm2(mm0, ator);\r\n        fmm mm3(move(mm0));\r\n        fmm mm4(move(mm1), ator);\r\n    }\r\n}\r\n\r\ntemplate <template <class...> class KeyCont, template <class...> class MappedCont>\r\nvoid test_erase_if() {\r\n    KeyCont<int> keys     = {0, 1, 2, 3, 4, 2};\r\n    MappedCont<int> vals  = {44, 2324, 635462, 433, 5, 7};\r\n    auto even_key_odd_val = [](pair<const int&, const int&> p) { return p.first % 2 == 0 && p.second % 2 != 0; };\r\n    {\r\n        flat_map fmap(keys, vals);\r\n        const auto erased_num = erase_if(fmap, even_key_odd_val);\r\n        assert(erased_num == 1);\r\n        assert(fmap.size() == 4);\r\n        assert(check_key_content(fmap, {0, 1, 2, 3}));\r\n        assert(check_value_content(fmap, {44, 2324, 635462, 433}));\r\n    }\r\n    {\r\n        flat_multimap fmmap(keys, vals);\r\n        const auto erased_num_m = erase_if(fmmap, even_key_odd_val);\r\n        assert(erased_num_m == 2);\r\n        assert(fmmap.size() == 4);\r\n        assert(check_key_content(fmmap, {0, 1, 2, 3}));\r\n        assert(check_value_content(fmmap, {44, 2324, 635462, 433}));\r\n    }\r\n}\r\n\r\nstruct Incomplete;\r\ntemplate <class T>\r\nstruct MyType {\r\n    T* ptr;\r\n\r\n    bool operator==(const MyType&) const  = default;\r\n    auto operator<=>(const MyType&) const = default;\r\n};\r\n\r\nvoid test_pointer_to_incomplete_type() {\r\n    struct Test {\r\n        unique_ptr<flat_map<Test, Test>> ptr;\r\n        unique_ptr<flat_multimap<Test, Test>> ptr_m;\r\n    };\r\n\r\n    Test t;\r\n    flat_map<MyType<Incomplete>, shared_ptr<MyType<Incomplete>>> fmap;\r\n    flat_multimap<MyType<Incomplete>, shared_ptr<MyType<Incomplete>>> fmmap;\r\n}\r\n\r\nvoid test_insert() {\r\n    flat_map<int, char> fm;\r\n\r\n    const auto res1 = fm.insert({10, 'm'});\r\n    assert(res1.first->first == 10);\r\n    assert(res1.first->second == 'm');\r\n    assert(res1.second);\r\n\r\n    const auto res2 = fm.insert({10, 'n'});\r\n    assert(res2.first->first == 10);\r\n    assert(res2.first->second == 'm');\r\n    assert(!res2.second);\r\n\r\n    const flat_map<int, char>::value_type val_pair{90, 'w'};\r\n    const auto res3 = fm.insert(val_pair);\r\n    assert(res3.first->first == 90);\r\n    assert(res3.first->second == 'w');\r\n    assert(res3.second);\r\n\r\n    const auto res4 = fm.insert(fm.cbegin(), pair<int, char>{30, 'c'});\r\n    assert(res4->first == 30);\r\n    assert(res4->second == 'c');\r\n\r\n    const auto res5 = fm.insert(fm.cbegin(), pair<char, char>{static_cast<char>(40), 'd'});\r\n    assert(res5->first == 40);\r\n    assert(res5->second == 'd');\r\n\r\n    assert(check_key_content(fm, {10, 30, 40, 90}));\r\n    assert(check_value_content(fm, {'m', 'c', 'd', 'w'}));\r\n\r\n    flat_multimap<int, char> fmm;\r\n\r\n    const auto it1 = fmm.insert({10, 'm'});\r\n    assert(it1->first == 10);\r\n    assert(it1->second == 'm');\r\n\r\n    const auto it2 = fmm.insert({10, 'n'});\r\n    assert(it2->first == 10);\r\n    assert(it2->second == 'n');\r\n\r\n    const auto it3 = fmm.insert(fmm.cend(), {70, 'p'});\r\n    assert(it3->first == 70);\r\n    assert(it3->second == 'p');\r\n\r\n    const flat_multimap<int, char>::value_type val_pair2{90, 'w'};\r\n    const auto it4 = fmm.insert(val_pair2);\r\n    assert(it4->first == 90);\r\n    assert(it4->second == 'w');\r\n\r\n    const auto it5 = fmm.insert(fmm.cend(), pair<char, char>{static_cast<char>(70), 'q'});\r\n    assert(it5->first == 70);\r\n    assert(it5->second == 'q');\r\n\r\n    assert(check_key_content(fmm, {10, 10, 70, 70, 90}));\r\n    // N5032 [associative.reqmts.general]/68 and /72 specify the values of the result to be {'m', 'n', 'p', 'q', 'w'}.\r\n    assert(check_value_content(fmm, {'m', 'n', 'p', 'q', 'w'}));\r\n}\r\n\r\nvoid test_insert_range() {\r\n    {\r\n        flat_map<int, char> fm{{1, 'p'}, {4, 'q'}, {9, 'r'}};\r\n        using char_type_array = flat_map<int, char>::value_type[];\r\n\r\n        fm.insert_range(char_type_array{{16, 'x'}, {9, 'y'}, {4, 'z'}});\r\n        assert(check_key_content(fm, {1, 4, 9, 16}));\r\n        assert(check_value_content(fm, {'p', 'q', 'r', 'x'}));\r\n\r\n        fm.insert_range(sorted_unique, char_type_array{{9, 'a'}, {16, 'b'}, {25, 'c'}});\r\n        assert(check_key_content(fm, {1, 4, 9, 16, 25}));\r\n        assert(check_value_content(fm, {'p', 'q', 'r', 'x', 'c'}));\r\n    }\r\n    {\r\n        flat_multimap<int, char> fmm{{1, 'p'}, {4, 'q'}, {9, 'r'}};\r\n        using char_type_array = flat_multimap<int, char>::value_type[];\r\n\r\n        fmm.insert_range(char_type_array{{16, 'x'}, {9, 'y'}, {4, 'z'}});\r\n        assert(check_key_content(fmm, {1, 4, 4, 9, 9, 16}));\r\n        assert(check_value_content(fmm, {'p', 'q', 'z', 'r', 'y', 'x'}));\r\n\r\n        fmm.insert_range(sorted_equivalent, char_type_array{{9, 'a'}, {16, 'b'}, {25, 'c'}});\r\n        assert(check_key_content(fmm, {1, 4, 4, 9, 9, 9, 16, 16, 25}));\r\n        assert(check_value_content(fmm, {'p', 'q', 'z', 'r', 'y', 'a', 'x', 'b', 'c'}));\r\n    }\r\n}\r\n\r\n// GH-4344 <flat_map> Fix compile errors\r\nvoid test_gh_4344() {\r\n    flat_map<int, char> fm;\r\n\r\n    const auto p1 = fm.try_emplace(10, 'm');\r\n    assert(p1.first->first == 10);\r\n    assert(p1.first->second == 'm');\r\n    assert(p1.second);\r\n\r\n    const auto p2 = fm.try_emplace(70, 'e');\r\n    assert(p2.first->first == 70);\r\n    assert(p2.first->second == 'e');\r\n    assert(p2.second);\r\n\r\n    const auto p3 = fm.try_emplace(20, 'o');\r\n    assert(p3.first->first == 20);\r\n    assert(p3.first->second == 'o');\r\n    assert(p3.second);\r\n\r\n    const auto p4 = fm.try_emplace(90, 'w');\r\n    assert(p4.first->first == 90);\r\n    assert(p4.first->second == 'w');\r\n    assert(p4.second);\r\n\r\n    const auto p5 = fm.try_emplace(70, 'X');\r\n    assert(p5.first->first == 70);\r\n    assert(p5.first->second == 'e');\r\n    assert(!p5.second);\r\n\r\n    assert(check_key_content(fm, {10, 20, 70, 90}));\r\n    assert(check_value_content(fm, {'m', 'o', 'e', 'w'}));\r\n}\r\n\r\nclass direct_init_only {\r\nprivate:\r\n    unsigned int n_ = 0u;\r\n\r\npublic:\r\n    struct src_type {\r\n        unsigned int n_ = 0u;\r\n\r\n        friend bool operator==(const src_type&, const src_type&) = default;\r\n    };\r\n\r\n    explicit direct_init_only(const src_type& s) noexcept : n_(s.n_) {}\r\n    direct_init_only(initializer_list<src_type>) = delete;\r\n\r\n    direct_init_only& operator=(const src_type& s) noexcept {\r\n        n_ = s.n_;\r\n        return *this;\r\n    }\r\n\r\n    friend bool operator==(const direct_init_only&, const direct_init_only&) = default;\r\n};\r\n\r\nvoid test_insert_or_assign() {\r\n    flat_map<int, char> fm;\r\n\r\n    const auto p1 = fm.insert_or_assign(10, 'm');\r\n    assert(p1.first->first == 10);\r\n    assert(p1.first->second == 'm');\r\n    assert(p1.second);\r\n\r\n    const auto p2 = fm.insert_or_assign(70, 'e');\r\n    assert(p2.first->first == 70);\r\n    assert(p2.first->second == 'e');\r\n    assert(p2.second);\r\n\r\n    const auto p3 = fm.insert_or_assign(20, 'o');\r\n    assert(p3.first->first == 20);\r\n    assert(p3.first->second == 'o');\r\n    assert(p3.second);\r\n\r\n    const auto p4 = fm.insert_or_assign(90, 'w');\r\n    assert(p4.first->first == 90);\r\n    assert(p4.first->second == 'w');\r\n    assert(p4.second);\r\n\r\n    const auto p5 = fm.insert_or_assign(70, 'X');\r\n    assert(p5.first->first == 70);\r\n    assert(p5.first->second == 'X');\r\n    assert(!p5.second);\r\n\r\n    assert(check_key_content(fm, {10, 20, 70, 90}));\r\n    assert(check_value_content(fm, {'m', 'o', 'X', 'w'}));\r\n\r\n    const auto it6 = fm.insert_or_assign(fm.cbegin(), 10, 'b');\r\n    assert(it6->first == 10);\r\n    assert(it6->second == 'b');\r\n\r\n    const char ch  = 'a';\r\n    const auto it7 = fm.insert_or_assign(fm.cbegin(), 20, ch);\r\n    assert(it7->first == 20);\r\n    assert(it7->second == 'a');\r\n\r\n    assert(check_key_content(fm, {10, 20, 70, 90}));\r\n    assert(check_value_content(fm, {'b', 'a', 'X', 'w'}));\r\n\r\n    // ensure direct-initialization\r\n    flat_map<int, direct_init_only> direct_fm;\r\n    direct_fm.insert_or_assign(direct_fm.end(), 0, direct_init_only::src_type{42u});\r\n\r\n    assert(check_key_content(direct_fm, {0}));\r\n    assert(check_value_content(direct_fm, {direct_init_only(direct_init_only::src_type{42u})}));\r\n}\r\n\r\nvoid test_comparison() {\r\n    {\r\n        flat_map<int, char> fm1{{1, '1'}, {2, '7'}, {3, '2'}, {4, '9'}};\r\n\r\n        assert(fm1 == fm1);\r\n        assert(!(fm1 != fm1));\r\n        assert(!(fm1 < fm1));\r\n        assert(!(fm1 > fm1));\r\n        assert(fm1 <= fm1);\r\n        assert(fm1 >= fm1);\r\n        assert(fm1 <=> fm1 == strong_ordering::equal);\r\n\r\n        flat_map<int, char> fm2{{1, '1'}, {7, '2'}, {2, '3'}, {9, '4'}};\r\n\r\n        assert(!(fm1 == fm2));\r\n        assert(fm1 != fm2);\r\n        assert(!(fm1 < fm2));\r\n        assert(fm1 > fm2);\r\n        assert(!(fm1 <= fm2));\r\n        assert(fm1 >= fm2);\r\n        assert(fm1 <=> fm2 == strong_ordering::greater);\r\n    }\r\n\r\n    {\r\n        flat_map<int, char, greater<int>> fm3{{1, '1'}, {2, '7'}, {3, '2'}, {4, '9'}};\r\n        flat_map<int, char, greater<int>> fm4{{1, '1'}, {7, '2'}, {2, '3'}, {9, '4'}};\r\n\r\n        assert(!(fm3 == fm4));\r\n        assert(fm3 != fm4);\r\n        assert(fm3 < fm4);\r\n        assert(!(fm3 > fm4));\r\n        assert(fm3 <= fm4);\r\n        assert(!(fm3 >= fm4));\r\n        assert(fm3 <=> fm4 == strong_ordering::less);\r\n    }\r\n    {\r\n        flat_multimap<int, char> fmm1{\r\n            {3, '2'}, {1, '7'}, {4, '1'}, {1, '8'}, {5, '2'}, {9, '8'}, {2, '1'}, {6, '8'}, {5, '2'}};\r\n\r\n        assert(fmm1 == fmm1);\r\n        assert(!(fmm1 != fmm1));\r\n        assert(!(fmm1 < fmm1));\r\n        assert(!(fmm1 > fmm1));\r\n        assert(fmm1 <= fmm1);\r\n        assert(fmm1 >= fmm1);\r\n        assert(fmm1 <=> fmm1 == strong_ordering::equal);\r\n\r\n        flat_multimap<int, char> fmm2{\r\n            {2, '3'}, {7, '1'}, {1, '4'}, {8, '1'}, {2, '5'}, {8, '9'}, {1, '2'}, {8, '6'}, {2, '5'}};\r\n\r\n        assert(!(fmm1 == fmm2));\r\n        assert(fmm1 != fmm2);\r\n        assert(!(fmm1 < fmm2));\r\n        assert(fmm1 > fmm2);\r\n        assert(!(fmm1 <= fmm2));\r\n        assert(fmm1 >= fmm2);\r\n        assert(fmm1 <=> fmm2 == strong_ordering::greater);\r\n    }\r\n    {\r\n        flat_multimap<int, char, greater<int>> fmm3{\r\n            {3, '2'}, {1, '7'}, {4, '1'}, {1, '8'}, {5, '2'}, {9, '8'}, {2, '1'}, {6, '8'}, {5, '2'}};\r\n        flat_multimap<int, char, greater<int>> fmm4{\r\n            {2, '3'}, {7, '1'}, {1, '4'}, {8, '1'}, {2, '5'}, {8, '9'}, {1, '2'}, {8, '6'}, {2, '5'}};\r\n\r\n        assert(!(fmm3 == fmm4));\r\n        assert(fmm3 != fmm4);\r\n        assert(!(fmm3 < fmm4));\r\n        assert(fmm3 > fmm4);\r\n        assert(!(fmm3 <= fmm4));\r\n        assert(fmm3 >= fmm4);\r\n        assert(fmm3 <=> fmm4 == strong_ordering::greater);\r\n    }\r\n}\r\n\r\ntemplate <template <class...> class Map>\r\nvoid test_map_operations_transparent() {\r\n    struct shouldnt_convert {\r\n        int key;\r\n        /* implicit */ [[noreturn]] operator int() const {\r\n            abort();\r\n        }\r\n    };\r\n\r\n    Map<int, char, key_comparator> fm{{0, 'a'}, {3, 'g'}, {5, 't'}};\r\n    assert(check_key_content(fm, {0, 3, 5}));\r\n    assert(check_value_content(fm, {'a', 'g', 't'}));\r\n\r\n    assert(fm.find(shouldnt_convert{0}) != fm.end());\r\n    assert(fm.count(shouldnt_convert{3}) == 1);\r\n    assert(!fm.contains(shouldnt_convert{1}));\r\n    assert(fm.lower_bound(shouldnt_convert{-1}) == fm.begin());\r\n    assert(fm.lower_bound(shouldnt_convert{8}) == fm.end());\r\n    assert(fm.upper_bound(shouldnt_convert{2}) == fm.find(3));\r\n    auto [first, last] = fm.equal_range(shouldnt_convert{5});\r\n    assert(first + 1 == last);\r\n}\r\n\r\nnamespace test_throwing_swap {\r\n    struct unique_exception {};\r\n\r\n    template <class T>\r\n    struct throwing_less {\r\n        static bool operator()(const T& left, const T& right) {\r\n            return left < right;\r\n        }\r\n\r\n        bool throws_;\r\n    };\r\n\r\n    template <class T>\r\n    void swap(throwing_less<T>& lhs, throwing_less<T>& rhs) {\r\n        if (lhs.throws_ || rhs.throws_) {\r\n            throw unique_exception{};\r\n        }\r\n    }\r\n} // namespace test_throwing_swap\r\n\r\ntemplate <template <class...> class FlatMapCont, template <class...> class KeyCont,\r\n    template <class...> class MappedCont>\r\nvoid test_throwing_compare_swap_single() {\r\n    using test_throwing_swap::unique_exception;\r\n    using comparator = test_throwing_swap::throwing_less<int>;\r\n\r\n    using map_type =\r\n        FlatMapCont<int, char, comparator, KeyCont<int, allocator<int>>, MappedCont<char, allocator<char>>>;\r\n    using value_type = map_type::value_type;\r\n    static_assert(!is_nothrow_swappable_v<map_type>);\r\n    {\r\n        map_type m1{{{1, 'x'}, {2, 'y'}, {3, 'z'}}, comparator{false}};\r\n        map_type m2{{{4, 'A'}, {5, 'B'}, {6, 'C'}}, comparator{false}};\r\n        m1.swap(m2);\r\n        assert(ranges::equal(m1, initializer_list<value_type>{{4, 'A'}, {5, 'B'}, {6, 'C'}}));\r\n        assert(ranges::equal(m2, initializer_list<value_type>{{1, 'x'}, {2, 'y'}, {3, 'z'}}));\r\n    }\r\n    {\r\n        map_type m1{{{1, 'x'}, {2, 'y'}, {3, 'z'}}, comparator{false}};\r\n        map_type m2{{{4, 'A'}, {5, 'B'}, {6, 'C'}}, comparator{false}};\r\n        ranges::swap(m1, m2);\r\n        assert(ranges::equal(m1, initializer_list<value_type>{{4, 'A'}, {5, 'B'}, {6, 'C'}}));\r\n        assert(ranges::equal(m2, initializer_list<value_type>{{1, 'x'}, {2, 'y'}, {3, 'z'}}));\r\n    }\r\n    {\r\n        map_type m1{{{1, 'x'}, {2, 'y'}, {3, 'z'}}, comparator{false}};\r\n        map_type m2{{{4, 'A'}, {5, 'B'}, {6, 'C'}}, comparator{true}};\r\n        try {\r\n            m1.swap(m2);\r\n            assert(false);\r\n        } catch (const unique_exception&) {\r\n            assert(m1.empty());\r\n            assert(m2.empty());\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n    }\r\n    {\r\n        map_type m1{{{1, 'x'}, {2, 'y'}, {3, 'z'}}, comparator{false}};\r\n        map_type m2{{{4, 'A'}, {5, 'B'}, {6, 'C'}}, comparator{true}};\r\n        try {\r\n            ranges::swap(m1, m2);\r\n            assert(false);\r\n        } catch (const unique_exception&) {\r\n            assert(m1.empty());\r\n            assert(m2.empty());\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n    }\r\n}\r\n\r\n// Test that changes in GH-5987 did not break calls of lookup member functions by using deducing this.\r\ntemplate <class T>\r\nvoid test_lookup_call_on_temporaries_single() {\r\n    (void) T{}.lower_bound(42);\r\n    (void) T{}.lower_bound('a');\r\n    (void) T{}.upper_bound(42);\r\n    (void) T{}.upper_bound('a');\r\n    (void) T{}.equal_range(42);\r\n    (void) T{}.equal_range('a');\r\n    (void) T{}.find(42);\r\n    (void) T{}.find('a');\r\n}\r\n\r\nvoid test_lookup_call_on_temporaries() {\r\n    test_lookup_call_on_temporaries_single<flat_map<int, int>>();\r\n    test_lookup_call_on_temporaries_single<flat_multimap<int, int>>();\r\n    try {\r\n        (void) flat_map<int, int>{}.at(42);\r\n        (void) flat_map<int, int>{}.at('a');\r\n    } catch (...) {\r\n    }\r\n}\r\n\r\n// Test that hint to emplace/insert is respected, when possible; check returned iterator\r\ntemplate <template <class...> class KeyC, template <class...> class ValueC>\r\nvoid test_insert_hint_is_respected() {\r\n    {\r\n        flat_multimap<int, char, less<int>, KeyC<int>, ValueC<char>> a{{-1, 'x'}, {-1, 'x'}, {1, 'x'}, {1, 'x'}};\r\n        bool problem_seen                      = false;\r\n        const auto assert_inserted_at_position = [&a, &problem_seen](\r\n                                                     const int expected_index, const auto insert_position) {\r\n            const auto expected_position = a.begin() + expected_index;\r\n            if (expected_position != insert_position) {\r\n                println(\"Wrong insert position: expected {}, actual {}\\nContainer after insert {}\", expected_index,\r\n                    insert_position - a.begin(), a);\r\n                problem_seen = true;\r\n            }\r\n        };\r\n\r\n        struct pseudopair {\r\n            int i;\r\n            char c;\r\n\r\n            operator pair<int, char>() const {\r\n                return pair{i, c};\r\n            }\r\n        };\r\n\r\n        pair pair0c{0, 'c'};\r\n        const pair pair0f{0, 'f'};\r\n        // hint is greater\r\n        assert(check_content(a, {{-1, 'x'}, {-1, 'x'}, {1, 'x'}, {1, 'x'}}));\r\n        assert_inserted_at_position(2, a.emplace_hint(a.end(), 0, 'a'));\r\n        assert(check_content(a, {{-1, 'x'}, {-1, 'x'}, {0, 'a'}, {1, 'x'}, {1, 'x'}}));\r\n        assert_inserted_at_position(3, a.emplace_hint(a.find(1), pair{0, 'b'}));\r\n        assert(check_content(a, {{-1, 'x'}, {-1, 'x'}, {0, 'a'}, {0, 'b'}, {1, 'x'}, {1, 'x'}}));\r\n        assert_inserted_at_position(4, a.insert(a.upper_bound(0), move(pair0c)));\r\n        assert(check_content(a, {{-1, 'x'}, {-1, 'x'}, {0, 'a'}, {0, 'b'}, {0, 'c'}, {1, 'x'}, {1, 'x'}}));\r\n        // hint is correct\r\n        assert_inserted_at_position(4, a.emplace_hint(a.upper_bound(0) - 1, 0, 'd'));\r\n        assert(check_content(a, {{-1, 'x'}, {-1, 'x'}, {0, 'a'}, {0, 'b'}, {0, 'd'}, {0, 'c'}, {1, 'x'}, {1, 'x'}}));\r\n        assert_inserted_at_position(3, a.emplace_hint(a.begin() + 3, pseudopair{0, 'e'}));\r\n        assert(check_content(\r\n            a, {{-1, 'x'}, {-1, 'x'}, {0, 'a'}, {0, 'e'}, {0, 'b'}, {0, 'd'}, {0, 'c'}, {1, 'x'}, {1, 'x'}}));\r\n        assert_inserted_at_position(2, a.insert(a.lower_bound(0), pair0f));\r\n        assert(check_content(\r\n            a, {{-1, 'x'}, {-1, 'x'}, {0, 'f'}, {0, 'a'}, {0, 'e'}, {0, 'b'}, {0, 'd'}, {0, 'c'}, {1, 'x'}, {1, 'x'}}));\r\n        // hint is less\r\n        assert_inserted_at_position(2, a.emplace_hint(a.lower_bound(0) - 1, pair{0, 'g'}));\r\n        assert(check_content(a, {{-1, 'x'}, {-1, 'x'}, {0, 'g'}, {0, 'f'}, {0, 'a'}, {0, 'e'}, {0, 'b'}, {0, 'd'},\r\n                                    {0, 'c'}, {1, 'x'}, {1, 'x'}}));\r\n        assert_inserted_at_position(2, a.insert(a.begin(), pseudopair{0, 'h'}));\r\n        assert(check_content(a, {{-1, 'x'}, {-1, 'x'}, {0, 'h'}, {0, 'g'}, {0, 'f'}, {0, 'a'}, {0, 'e'}, {0, 'b'},\r\n                                    {0, 'd'}, {0, 'c'}, {1, 'x'}, {1, 'x'}}));\r\n\r\n        assert(!problem_seen);\r\n\r\n        assert(4 == erase_if(a, [](const auto p) { return p.second <= 'd'; }));\r\n        assert(check_content(a, {{-1, 'x'}, {-1, 'x'}, {0, 'h'}, {0, 'g'}, {0, 'f'}, {0, 'e'}, {1, 'x'}, {1, 'x'}}));\r\n        assert(4 == a.erase(0));\r\n        assert(check_content(a, {{-1, 'x'}, {-1, 'x'}, {1, 'x'}, {1, 'x'}}));\r\n    }\r\n}\r\n\r\ntemplate <template <class...> class KeyCont, template <class...> class MappedCont>\r\nvoid test_key_mapped_cont_combinations() {\r\n    test_construction<KeyCont, MappedCont>();\r\n    test_insert_hint_is_respected<KeyCont, MappedCont>();\r\n    test_throwing_compare_swap_single<flat_map, KeyCont, MappedCont>();\r\n    test_throwing_compare_swap_single<flat_multimap, KeyCont, MappedCont>();\r\n    test_erase_if<KeyCont, MappedCont>();\r\n}\r\n\r\n// Test heterogeneous lookup and erase operations when the compare object does not satisfy strict_weak_order (GH-5992)\r\nenum class strange_int {};\r\n\r\n// No overload divless::operator()(strange_int, strange_int), does not satisfy std::strict_weak_order\r\nstruct divless {\r\n    using is_transparent = void;\r\n\r\n    template <class X, class Y>\r\n        requires (is_same_v<X, int> && is_same_v<Y, strange_int>)\r\n              || (is_same_v<X, strange_int> && is_same_v<Y, int>) || (is_same_v<X, int> && is_same_v<Y, int>)\r\n    constexpr bool operator()(X x, Y y) const noexcept {\r\n        if constexpr (is_same_v<X, strange_int>) {\r\n            return static_cast<int>(x) < y / 10;\r\n        } else if constexpr (is_same_v<Y, strange_int>) {\r\n            return x / 10 < static_cast<int>(y);\r\n        } else {\r\n            return x < y;\r\n        }\r\n    }\r\n};\r\nstatic_assert(!strict_weak_order<divless, int, strange_int>);\r\n\r\n// ranges:: algorithms can't be called with divless compare, as it does not satisfy std::strict_weak_order\r\nvoid test_non_strict_weak_order_compare() {\r\n    {\r\n        flat_map<int, int, divless> cont{{1, 0}, {2, 0}, {11, 0}, {12, 0}};\r\n        assert(2 == cont.count(strange_int{0}));\r\n\r\n        assert(cont.contains(strange_int{0}));\r\n        assert(!cont.contains(strange_int{2}));\r\n\r\n        assert(cont.begin() + 2 == cont.lower_bound(strange_int{1}));\r\n        assert(cont.begin() + 2 == cont.upper_bound(strange_int{0}));\r\n\r\n        const auto [first, last] = cont.equal_range(strange_int{0});\r\n        assert(first == cont.begin());\r\n        assert(last == cont.begin() + 2);\r\n\r\n        assert(cont.end() != cont.find(strange_int{1}));\r\n        assert(cont.end() == cont.find(strange_int{3}));\r\n\r\n        assert(2 == cont.erase(strange_int{0}));\r\n        assert(check_content(cont, {{11, 0}, {12, 0}}));\r\n    }\r\n    {\r\n        flat_multimap<int, int, divless> cont{{1, 0}, {2, 0}, {11, 0}, {12, 0}};\r\n        assert(2 == cont.count(strange_int{0}));\r\n\r\n        assert(cont.contains(strange_int{0}));\r\n        assert(!cont.contains(strange_int{2}));\r\n\r\n        assert(cont.begin() + 2 == cont.lower_bound(strange_int{1}));\r\n        assert(cont.begin() + 2 == cont.upper_bound(strange_int{0}));\r\n\r\n        const auto [first, last] = cont.equal_range(strange_int{0});\r\n        assert(first == cont.begin());\r\n        assert(last == cont.begin() + 2);\r\n\r\n        assert(cont.end() != cont.find(strange_int{1}));\r\n        assert(cont.end() == cont.find(strange_int{3}));\r\n\r\n        assert(2 == cont.erase(strange_int{0}));\r\n        assert(check_content(cont, {{11, 0}, {12, 0}}));\r\n    }\r\n}\r\n\r\nvoid run_normal_tests() {\r\n    test_key_mapped_cont_combinations<vector, vector>();\r\n    test_key_mapped_cont_combinations<vector, deque>();\r\n    test_key_mapped_cont_combinations<deque, vector>();\r\n    test_key_mapped_cont_combinations<deque, deque>();\r\n    test_pointer_to_incomplete_type();\r\n    test_insert();\r\n    test_insert_range();\r\n    test_gh_4344();\r\n    test_insert_or_assign();\r\n    test_comparison();\r\n\r\n    test_map_operations_transparent<flat_map>();\r\n    test_map_operations_transparent<flat_multimap>();\r\n\r\n    test_lookup_call_on_temporaries();\r\n    test_non_strict_weak_order_compare();\r\n}\r\n\r\nenum class cont_type { multi, unique };\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_construct_unsorted_initializer_list() {\r\n    using C = conditional_t<type == cont_type::unique, flat_map<int, char>, flat_multimap<int, char>>;\r\n    const conditional_t<type == cont_type::unique, sorted_unique_t, sorted_equivalent_t> sorted;\r\n    C cont(sorted, {{137, 'a'}, {42, 'g'}, {3337, 'f'}, {15, 'r'}});\r\n}\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_construct_unsorted_iter_iter() {\r\n    using C = conditional_t<type == cont_type::unique, flat_map<int, char>, flat_multimap<int, char>>;\r\n    const conditional_t<type == cont_type::unique, sorted_unique_t, sorted_equivalent_t> sorted;\r\n    vector<typename C::value_type> values{{137, 'a'}, {42, 'g'}, {3337, 'f'}, {15, 'r'}};\r\n    C cont(sorted, values.begin(), values.end());\r\n}\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_construct_unsorted_container() {\r\n    using C = conditional_t<type == cont_type::unique, flat_map<int, char>, flat_multimap<int, char>>;\r\n    const conditional_t<type == cont_type::unique, sorted_unique_t, sorted_equivalent_t> sorted;\r\n    typename C::key_container_type keys{137, 42, 3337, 15};\r\n    typename C::mapped_container_type mapped{'a', 'g', 'f', 'r'};\r\n    C cont(sorted, keys, mapped);\r\n}\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_replace_unsorted_container() {\r\n    using C = conditional_t<type == cont_type::unique, flat_map<int, char>, flat_multimap<int, char>>;\r\n    C cont;\r\n    cont.replace({137, 42, 3337, 15}, {'a', 'g', 'f', 'r'});\r\n}\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_insert_unsorted_iter_iter() {\r\n    using C = conditional_t<type == cont_type::unique, flat_map<int, char>, flat_multimap<int, char>>;\r\n    const conditional_t<type == cont_type::unique, sorted_unique_t, sorted_equivalent_t> sorted;\r\n    vector<typename C::value_type> values{{137, 'a'}, {42, 'g'}, {3337, 'f'}, {15, 'r'}};\r\n    C cont;\r\n    cont.insert(sorted, values.begin(), values.end());\r\n}\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_insert_unsorted_range() {\r\n    using C = conditional_t<type == cont_type::unique, flat_map<int, char>, flat_multimap<int, char>>;\r\n    const conditional_t<type == cont_type::unique, sorted_unique_t, sorted_equivalent_t> sorted;\r\n    vector<typename C::value_type> values{{137, 'a'}, {42, 'g'}, {3337, 'f'}, {15, 'r'}};\r\n    C cont;\r\n    cont.insert_range(sorted, values);\r\n}\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_insert_unsorted_initializer_list() {\r\n    using C = conditional_t<type == cont_type::unique, flat_map<int, char>, flat_multimap<int, char>>;\r\n    const conditional_t<type == cont_type::unique, sorted_unique_t, sorted_equivalent_t> sorted;\r\n    C cont;\r\n    cont.insert(sorted, {{137, 'a'}, {42, 'g'}, {3337, 'f'}, {15, 'r'}});\r\n}\r\n\r\nvoid test_death_construct_duplicates_initializer_list() {\r\n    using C = flat_map<int, char>;\r\n    C cont(sorted_unique, {{42, 'a'}, {137, 'g'}, {137, 'f'}, {3337, 'r'}});\r\n}\r\n\r\nvoid test_death_construct_duplicates_iter_iter() {\r\n    using C = flat_map<int, char>;\r\n    vector<C::value_type> values{{42, 'a'}, {137, 'g'}, {137, 'f'}, {3337, 'r'}};\r\n    C cont(sorted_unique, values.begin(), values.end());\r\n}\r\n\r\nvoid test_death_construct_duplicates_container() {\r\n    using C = flat_map<int, char>;\r\n    C::key_container_type keys{42, 137, 137, 3337};\r\n    C::mapped_container_type mapped{'a', 'g', 'f', 'r'};\r\n    C cont(sorted_unique, keys, mapped);\r\n}\r\n\r\nvoid test_death_replace_duplicates_container() {\r\n    using C = flat_map<int, char>;\r\n    C cont;\r\n    cont.replace({42, 137, 137, 3337}, {'a', 'g', 'f', 'r'});\r\n}\r\n\r\nvoid test_death_insert_duplicates_iter_iter() {\r\n    using C = flat_map<int, char>;\r\n    vector<C::value_type> values{{42, 'a'}, {137, 'g'}, {137, 'f'}, {3337, 'r'}};\r\n    C cont;\r\n    cont.insert(sorted_unique, values.begin(), values.end());\r\n}\r\n\r\nvoid test_death_insert_duplicates_range() {\r\n    using C = flat_map<int, char>;\r\n    vector<C::value_type> values{{42, 'a'}, {137, 'g'}, {137, 'f'}, {3337, 'r'}};\r\n    C cont;\r\n    cont.insert_range(sorted_unique, values);\r\n}\r\n\r\nvoid test_death_insert_duplicates_initializer_list() {\r\n    using C = flat_map<int, char>;\r\n    C cont;\r\n    cont.insert(sorted_unique, {{42, 'a'}, {137, 'g'}, {137, 'f'}, {3337, 'r'}});\r\n}\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_different_size_ctor() {\r\n    using C = conditional_t<type == cont_type::unique, flat_map<int, char>, flat_multimap<int, char>>;\r\n    typename C::key_container_type keys{42, 137, 137, 3337, 0};\r\n    typename C::mapped_container_type mapped{'a'};\r\n    C cont(keys, mapped);\r\n}\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_different_size_ctor_sorted() {\r\n    using C = conditional_t<type == cont_type::unique, flat_map<int, char>, flat_multimap<int, char>>;\r\n    const conditional_t<type == cont_type::unique, sorted_unique_t, sorted_equivalent_t> sorted;\r\n    typename C::key_container_type keys{42, 137, 137, 3337, 0};\r\n    typename C::mapped_container_type mapped{'a'};\r\n    C cont(sorted, keys, mapped);\r\n}\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_different_size_replace() {\r\n    using C = conditional_t<type == cont_type::unique, flat_map<int, char>, flat_multimap<int, char>>;\r\n    C cont;\r\n    cont.replace({42, 137, 137, 3337, 0}, {'a'});\r\n}\r\n\r\n// Reach into the pairing iterator and modify one of the underlying iterators to break invariants\r\ntemplate <class Iter>\r\nvoid vandalize_pairing_iterator(Iter& pairing_iterator) {\r\n    ++pairing_iterator._Key_it;\r\n}\r\n\r\nenum class iter_test { op_equals, op_spaceship, op_minus };\r\n\r\ntemplate <cont_type type, iter_test mode>\r\nvoid test_death_iterator_at_different_offset() {\r\n    using C = conditional_t<type == cont_type::unique, flat_map<int, char>, flat_multimap<int, char>>;\r\n    C cont{{42, 'a'}, {137, 'g'}, {137, 'r'}, {3337, 'f'}, {7755, 'z'}};\r\n    auto broken_iter = cont.begin();\r\n    vandalize_pairing_iterator(broken_iter);\r\n    if constexpr (mode == iter_test::op_equals) {\r\n        (void) (cont.end() == broken_iter);\r\n    } else if constexpr (mode == iter_test::op_spaceship) {\r\n        (void) (cont.end() <=> broken_iter);\r\n    } else if constexpr (mode == iter_test::op_minus) {\r\n        (void) (cont.end() - broken_iter);\r\n    } else {\r\n        static_assert(false, \"unknown iter_test mode\");\r\n    }\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec([] { run_normal_tests(); });\r\n\r\n#if defined(_DEBUG)\r\n    exec.add_death_tests({\r\n\r\n        // Tests shared between flat_set and flat_map - violation of sorted elements\r\n        test_death_construct_unsorted_initializer_list<cont_type::unique>,\r\n        test_death_construct_unsorted_initializer_list<cont_type::multi>,\r\n        test_death_construct_unsorted_iter_iter<cont_type::unique>,\r\n        test_death_construct_unsorted_iter_iter<cont_type::multi>,\r\n        test_death_construct_unsorted_container<cont_type::unique>,\r\n        test_death_construct_unsorted_container<cont_type::multi>,\r\n        test_death_replace_unsorted_container<cont_type::unique>,\r\n        test_death_replace_unsorted_container<cont_type::multi>,\r\n        test_death_insert_unsorted_iter_iter<cont_type::unique>,\r\n        test_death_insert_unsorted_iter_iter<cont_type::multi>,\r\n        test_death_insert_unsorted_range<cont_type::unique>,\r\n        test_death_insert_unsorted_range<cont_type::multi>,\r\n        test_death_insert_unsorted_initializer_list<cont_type::unique>,\r\n        test_death_insert_unsorted_initializer_list<cont_type::multi>,\r\n\r\n        // Tests shared between flat_set and flat_map - violation of unique elements\r\n        test_death_construct_duplicates_initializer_list,\r\n        test_death_construct_duplicates_iter_iter,\r\n        test_death_construct_duplicates_container,\r\n        test_death_replace_duplicates_container,\r\n        test_death_insert_duplicates_iter_iter,\r\n        test_death_insert_duplicates_range,\r\n        test_death_insert_duplicates_initializer_list,\r\n\r\n        // Tests not present in flat_set - mismatch of length of key and mapped containers\r\n        test_death_different_size_ctor<cont_type::unique>,\r\n        test_death_different_size_ctor<cont_type::multi>,\r\n        test_death_different_size_ctor_sorted<cont_type::unique>,\r\n        test_death_different_size_ctor_sorted<cont_type::multi>,\r\n        test_death_different_size_replace<cont_type::unique>,\r\n        test_death_different_size_replace<cont_type::multi>,\r\n    });\r\n#endif // defined(_DEBUG)\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        // Tests specific to flat_map - incompatible key and mapped component of pairing iterator\r\n        test_death_iterator_at_different_offset<cont_type::unique, iter_test::op_equals>,\r\n        test_death_iterator_at_different_offset<cont_type::multi, iter_test::op_equals>,\r\n        test_death_iterator_at_different_offset<cont_type::unique, iter_test::op_spaceship>,\r\n        test_death_iterator_at_different_offset<cont_type::multi, iter_test::op_spaceship>,\r\n        test_death_iterator_at_different_offset<cont_type::unique, iter_test::op_minus>,\r\n        test_death_iterator_at_different_offset<cont_type::multi, iter_test::op_minus>,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0429R9_flat_map_ms_specific/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0429R9_flat_map_ms_specific/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstddef>\r\n#include <deque>\r\n#include <flat_map>\r\n#include <functional>\r\n#include <memory>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n// Test MSVC STL-specific SCARY-ness\r\n\r\ntemplate <class T>\r\nstruct MyAllocator {\r\n    using value_type = T;\r\n\r\n    MyAllocator() = default;\r\n    template <class U>\r\n    MyAllocator(const MyAllocator<U>&) noexcept {}\r\n\r\n    T* allocate(size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* p, size_t n) noexcept {\r\n        allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class U>\r\n    friend constexpr bool operator==(const MyAllocator&, const MyAllocator<U>&) noexcept {\r\n        return true;\r\n    }\r\n};\r\n\r\ntemplate <bool IsUnique, class Key, class Mapped, class Comp, class KeyCont, class MappedCont>\r\nusing flat_map_unique_if = conditional_t<IsUnique, flat_map<Key, Mapped, Comp, KeyCont, MappedCont>,\r\n    flat_multimap<Key, Mapped, Comp, KeyCont, MappedCont>>;\r\n\r\ntemplate <class A, class B>\r\nconstexpr bool has_different_nested_types = !is_same_v<typename A::value_compare, typename B::value_compare>\r\n                                         && !is_same_v<typename A::containers, typename B::containers>;\r\n\r\ntemplate <bool IsUnique, class Comparator, class Alloc1, class Alloc2>\r\nvoid test_scary_ness_one() {\r\n    using Cont = flat_map_unique_if<IsUnique, int, int, Comparator, vector<int, Alloc1>, vector<int, Alloc2>>;\r\n\r\n    using Iter      = flat_map<int, int>::iterator;\r\n    using OtherIter = Cont::iterator;\r\n    static_assert(is_same_v<Iter, OtherIter>);\r\n\r\n    using ConstIter      = flat_map<int, int>::const_iterator;\r\n    using OtherConstIter = Cont::const_iterator;\r\n    static_assert(is_same_v<ConstIter, OtherConstIter>);\r\n\r\n    using OtherCont1 = flat_map_unique_if<!IsUnique, int, int, Comparator, vector<int, Alloc1>, vector<int, Alloc2>>;\r\n    using OtherCont2 = flat_map_unique_if<IsUnique, int, int, Comparator, deque<int>, deque<int>>;\r\n    using OtherCont3 = flat_map_unique_if<IsUnique, int, int, Comparator, vector<int, Alloc1>, deque<int, Alloc2>>;\r\n    using OtherCont4 = flat_map_unique_if<IsUnique, int, int, Comparator, deque<int, Alloc1>, vector<int, Alloc2>>;\r\n    static_assert(has_different_nested_types<Cont, OtherCont1>);\r\n    static_assert(has_different_nested_types<Cont, OtherCont2>);\r\n    static_assert(has_different_nested_types<Cont, OtherCont3>);\r\n    static_assert(has_different_nested_types<Cont, OtherCont4>);\r\n}\r\n\r\nvoid test_scary_ness() {\r\n    test_scary_ness_one<true, greater<int>, allocator<int>, allocator<int>>();\r\n    test_scary_ness_one<true, greater<int>, allocator<int>, MyAllocator<int>>();\r\n    test_scary_ness_one<true, greater<int>, MyAllocator<int>, allocator<int>>();\r\n\r\n    test_scary_ness_one<true, less<>, allocator<int>, allocator<int>>();\r\n    test_scary_ness_one<true, less<>, allocator<int>, MyAllocator<int>>();\r\n    test_scary_ness_one<true, less<>, MyAllocator<int>, allocator<int>>();\r\n\r\n    test_scary_ness_one<true, greater<>, allocator<int>, allocator<int>>();\r\n    test_scary_ness_one<true, greater<>, allocator<int>, MyAllocator<int>>();\r\n    test_scary_ness_one<true, greater<>, MyAllocator<int>, allocator<int>>();\r\n\r\n    test_scary_ness_one<false, greater<int>, allocator<int>, allocator<int>>();\r\n    test_scary_ness_one<false, greater<int>, allocator<int>, MyAllocator<int>>();\r\n    test_scary_ness_one<false, greater<int>, MyAllocator<int>, allocator<int>>();\r\n\r\n    test_scary_ness_one<false, less<>, allocator<int>, allocator<int>>();\r\n    test_scary_ness_one<false, less<>, allocator<int>, MyAllocator<int>>();\r\n    test_scary_ness_one<false, less<>, MyAllocator<int>, allocator<int>>();\r\n\r\n    test_scary_ness_one<false, greater<>, allocator<int>, allocator<int>>();\r\n    test_scary_ness_one<false, greater<>, allocator<int>, MyAllocator<int>>();\r\n    test_scary_ness_one<false, greater<>, MyAllocator<int>, allocator<int>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0433R2_deduction_guides/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0433R2_deduction_guides/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <atomic>\r\n#include <bitset>\r\n#include <cassert>\r\n#include <chrono>\r\n#include <complex>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <future>\r\n#include <initializer_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <map>\r\n#include <memory>\r\n#include <mutex>\r\n#include <optional>\r\n#include <queue>\r\n#include <regex>\r\n#include <scoped_allocator>\r\n#include <set>\r\n#include <shared_mutex>\r\n#include <sstream>\r\n#include <stack>\r\n#include <streambuf>\r\n#include <string>\r\n#include <string_view>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <valarray>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename T>\r\nstruct MyAlloc {\r\n    using value_type = T;\r\n\r\n    MyAlloc() = default;\r\n\r\n    template <typename U>\r\n    MyAlloc(const MyAlloc<U>&) {}\r\n\r\n    T* allocate(size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* p, size_t n) {\r\n        allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <typename U>\r\n    bool operator==(const MyAlloc<U>&) const {\r\n        return true;\r\n    }\r\n    template <typename U>\r\n    bool operator!=(const MyAlloc<U>&) const {\r\n        return false;\r\n    }\r\n};\r\n\r\nstruct MyGreater : greater<> {};\r\n\r\nstruct MyHash : hash<long> {};\r\n\r\nstruct MyWideHash : hash<wchar_t> {};\r\n\r\nstruct MyEqual : equal_to<> {};\r\n\r\nstruct MyDelete : default_delete<long[]> {};\r\n\r\nvoid nothing() {}\r\n\r\nint square(int x) {\r\n    return x * x;\r\n}\r\n\r\nlong add(short x, int y) {\r\n    return x + y;\r\n}\r\n\r\ntemplate <typename Void, template <typename...> class ClassTemplate, typename... CtorArgs>\r\nstruct CanDeduceFromHelper : false_type {};\r\n\r\ntemplate <template <typename...> class ClassTemplate, typename... CtorArgs>\r\nstruct CanDeduceFromHelper<void_t<decltype(ClassTemplate(declval<CtorArgs>()...))>, ClassTemplate, CtorArgs...>\r\n    : true_type {};\r\n\r\ntemplate <template <typename...> class ClassTemplate, typename... CtorArgs>\r\nconstexpr bool CanDeduceFrom = CanDeduceFromHelper<void, ClassTemplate, CtorArgs...>::value;\r\n\r\nvoid test_initializer_list() {\r\n    initializer_list<long> il{};\r\n    initializer_list il2(il);\r\n\r\n    static_assert(is_same_v<decltype(il2), initializer_list<long>>);\r\n}\r\n\r\nvoid test_pair_and_tuple() {\r\n    long x       = 11L;\r\n    const long y = 22L;\r\n\r\n    pair p1(x, y);\r\n    pair p2(33L, 'c');\r\n    pair p3(p2);\r\n\r\n    static_assert(is_same_v<decltype(p1), pair<long, long>>);\r\n    static_assert(is_same_v<decltype(p2), pair<long, char>>);\r\n    static_assert(is_same_v<decltype(p3), pair<long, char>>);\r\n\r\n    const int arr[] = {100, 200, 300};\r\n    const long& z   = y;\r\n    allocator<int> al{};\r\n\r\n    tuple t1{};\r\n    tuple t2(x);\r\n    tuple t3(x, y);\r\n    tuple t4('c', 44L, 7.89);\r\n    tuple t5(square, arr, z);\r\n    tuple t6(p2);\r\n    tuple t7(allocator_arg, al);\r\n    tuple t8(allocator_arg, al, 'c');\r\n    tuple t9(allocator_arg, al, 'c', 'c');\r\n    tuple t10(allocator_arg, al, p2);\r\n    tuple t11(allocator_arg, al, t4);\r\n    tuple t12(t11);\r\n\r\n    static_assert(is_same_v<decltype(tuple()), tuple<>>);\r\n    static_assert(is_same_v<decltype(tuple{}), tuple<>>);\r\n    static_assert(is_same_v<decltype(t1), tuple<>>);\r\n    static_assert(is_same_v<decltype(t2), tuple<long>>);\r\n    static_assert(is_same_v<decltype(t3), tuple<long, long>>);\r\n    static_assert(is_same_v<decltype(t4), tuple<char, long, double>>);\r\n    static_assert(is_same_v<decltype(t5), tuple<int (*)(int), const int*, long>>);\r\n    static_assert(is_same_v<decltype(t6), tuple<long, char>>);\r\n    static_assert(is_same_v<decltype(t7), tuple<>>);\r\n    static_assert(is_same_v<decltype(t8), tuple<char>>);\r\n    static_assert(is_same_v<decltype(t9), tuple<char, char>>);\r\n    static_assert(is_same_v<decltype(t10), tuple<long, char>>);\r\n    static_assert(is_same_v<decltype(t11), tuple<char, long, double>>);\r\n    static_assert(is_same_v<decltype(t12), tuple<char, long, double>>);\r\n}\r\n\r\nvoid test_optional() {\r\n    optional opt1(1729L);\r\n    optional opt2(opt1);\r\n\r\n    static_assert(is_same_v<decltype(opt1), optional<long>>);\r\n    static_assert(is_same_v<decltype(opt2), optional<long>>);\r\n}\r\n\r\nvoid test_bitset() {\r\n    bitset<7> b{};\r\n    bitset b2(b);\r\n\r\n    static_assert(is_same_v<decltype(b2), bitset<7>>);\r\n}\r\n\r\nvoid test_allocator() {\r\n    allocator<long> alloc1{};\r\n    allocator alloc2(alloc1);\r\n\r\n    static_assert(is_same_v<decltype(alloc2), allocator<long>>);\r\n}\r\n\r\nvoid test_unique_ptr() {\r\n    static_assert(!CanDeduceFrom<unique_ptr>);\r\n    static_assert(!CanDeduceFrom<unique_ptr, nullptr_t>);\r\n    static_assert(!CanDeduceFrom<unique_ptr, long*>);\r\n    static_assert(!CanDeduceFrom<unique_ptr, long*, const default_delete<long>&>);\r\n    static_assert(!CanDeduceFrom<unique_ptr, long*, default_delete<long>>);\r\n    static_assert(CanDeduceFrom<unique_ptr, unique_ptr<double>>);\r\n\r\n    unique_ptr<double> up1{};\r\n    unique_ptr up2(move(up1));\r\n\r\n    static_assert(is_same_v<decltype(up2), unique_ptr<double>>);\r\n}\r\n\r\nvoid test_shared_ptr_and_weak_ptr() {\r\n    shared_ptr<long[]> sp(new long[3]);\r\n    weak_ptr<long[]> wp(sp);\r\n    unique_ptr<long[], MyDelete> up{};\r\n\r\n    shared_ptr sp1(sp);\r\n    shared_ptr sp2(wp);\r\n    shared_ptr sp3(move(up));\r\n    weak_ptr wp1(sp);\r\n    weak_ptr wp2(wp);\r\n\r\n    static_assert(is_same_v<decltype(sp1), shared_ptr<long[]>>);\r\n    static_assert(is_same_v<decltype(sp2), shared_ptr<long[]>>);\r\n    static_assert(is_same_v<decltype(sp3), shared_ptr<long[]>>);\r\n    static_assert(is_same_v<decltype(wp1), weak_ptr<long[]>>);\r\n    static_assert(is_same_v<decltype(wp2), weak_ptr<long[]>>);\r\n}\r\n\r\nvoid test_owner_less() {\r\n    owner_less<shared_ptr<long>> ol1{};\r\n    owner_less<weak_ptr<long>> ol2{};\r\n    owner_less<> ol3{};\r\n\r\n    owner_less ol4(ol1);\r\n    owner_less ol5(ol2);\r\n    owner_less ol6(ol3);\r\n    owner_less ol7{};\r\n\r\n    static_assert(is_same_v<decltype(ol4), owner_less<shared_ptr<long>>>);\r\n    static_assert(is_same_v<decltype(ol5), owner_less<weak_ptr<long>>>);\r\n    static_assert(is_same_v<decltype(ol6), owner_less<>>);\r\n    static_assert(is_same_v<decltype(ol7), owner_less<>>);\r\n}\r\n\r\nvoid test_scoped_allocator_adaptor() {\r\n    MyAlloc<short> myal_short{};\r\n    MyAlloc<int> myal_int{};\r\n    MyAlloc<long> myal_long{};\r\n\r\n    scoped_allocator_adaptor saa1(myal_short);\r\n    scoped_allocator_adaptor saa2(myal_short, myal_int);\r\n    scoped_allocator_adaptor saa3(myal_short, myal_int, myal_long);\r\n    scoped_allocator_adaptor saa4(saa3);\r\n\r\n    static_assert(is_same_v<decltype(saa1), scoped_allocator_adaptor<MyAlloc<short>>>);\r\n    static_assert(is_same_v<decltype(saa2), scoped_allocator_adaptor<MyAlloc<short>, MyAlloc<int>>>);\r\n    static_assert(is_same_v<decltype(saa3), scoped_allocator_adaptor<MyAlloc<short>, MyAlloc<int>, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(saa4), scoped_allocator_adaptor<MyAlloc<short>, MyAlloc<int>, MyAlloc<long>>>);\r\n}\r\n\r\nvoid test_reference_wrapper() {\r\n    long x = 11L;\r\n    reference_wrapper rw1(x);\r\n    reference_wrapper rw2(rw1);\r\n\r\n    static_assert(is_same_v<decltype(rw1), reference_wrapper<long>>);\r\n    static_assert(is_same_v<decltype(rw2), reference_wrapper<long>>);\r\n}\r\n\r\nvoid test_transparent_operator_functors() {\r\n    plus op1{};\r\n    minus op2{};\r\n    multiplies op3{};\r\n    divides op4{};\r\n    modulus op5{};\r\n    negate op6{};\r\n    equal_to op7{};\r\n    not_equal_to op8{};\r\n    greater op9{};\r\n    less op10{};\r\n    greater_equal op11{};\r\n    less_equal op12{};\r\n    logical_and op13{};\r\n    logical_or op14{};\r\n    logical_not op15{};\r\n    bit_and op16{};\r\n    bit_or op17{};\r\n    bit_xor op18{};\r\n    bit_not op19{};\r\n\r\n    static_assert(is_same_v<decltype(op1), plus<>>);\r\n    static_assert(is_same_v<decltype(op2), minus<>>);\r\n    static_assert(is_same_v<decltype(op3), multiplies<>>);\r\n    static_assert(is_same_v<decltype(op4), divides<>>);\r\n    static_assert(is_same_v<decltype(op5), modulus<>>);\r\n    static_assert(is_same_v<decltype(op6), negate<>>);\r\n    static_assert(is_same_v<decltype(op7), equal_to<>>);\r\n    static_assert(is_same_v<decltype(op8), not_equal_to<>>);\r\n    static_assert(is_same_v<decltype(op9), greater<>>);\r\n    static_assert(is_same_v<decltype(op10), less<>>);\r\n    static_assert(is_same_v<decltype(op11), greater_equal<>>);\r\n    static_assert(is_same_v<decltype(op12), less_equal<>>);\r\n    static_assert(is_same_v<decltype(op13), logical_and<>>);\r\n    static_assert(is_same_v<decltype(op14), logical_or<>>);\r\n    static_assert(is_same_v<decltype(op15), logical_not<>>);\r\n    static_assert(is_same_v<decltype(op16), bit_and<>>);\r\n    static_assert(is_same_v<decltype(op17), bit_or<>>);\r\n    static_assert(is_same_v<decltype(op18), bit_xor<>>);\r\n    static_assert(is_same_v<decltype(op19), bit_not<>>);\r\n\r\n    static_assert(is_same_v<decltype(greater()), greater<>>);\r\n    static_assert(is_same_v<decltype(greater{}), greater<>>);\r\n}\r\n\r\ntemplate <template <typename> typename F>\r\nvoid test_function_wrapper() {\r\n    F<short(int, long)> f1{};\r\n\r\n    if constexpr (is_copy_constructible_v<F<short(int, long)>>) {\r\n        F f2copy(f1);\r\n        static_assert(is_same_v<decltype(f2copy), F<short(int, long)>>);\r\n    }\r\n\r\n    F f2(move(f1));\r\n    static_assert(is_same_v<decltype(f2), F<short(int, long)>>);\r\n\r\n    F f3(nothing);\r\n    F f4(&nothing);\r\n    F f5(square);\r\n    F f6(&square);\r\n    F f7(add);\r\n    F f8(&add);\r\n\r\n    static_assert(is_same_v<decltype(f3), F<void()>>);\r\n    static_assert(is_same_v<decltype(f4), F<void()>>);\r\n    static_assert(is_same_v<decltype(f5), F<int(int)>>);\r\n    static_assert(is_same_v<decltype(f6), F<int(int)>>);\r\n    static_assert(is_same_v<decltype(f7), F<long(short, int)>>);\r\n    static_assert(is_same_v<decltype(f8), F<long(short, int)>>);\r\n\r\n    int n      = 0;\r\n    auto accum = [&n](int x, int y) { return n += x + y; };\r\n\r\n    F f9(plus<double>{});\r\n    F f10(accum);\r\n\r\n    static_assert(is_same_v<decltype(f9), F<double(const double&, const double&)>>);\r\n    static_assert(is_same_v<decltype(f10), F<int(int, int)>>);\r\n\r\n#if _HAS_CXX23\r\n    struct ExplicitThisByVal {\r\n        void operator()(this ExplicitThisByVal, char) {}\r\n    };\r\n\r\n    ExplicitThisByVal explicit_this_by_val_functor{};\r\n\r\n    F f11(explicit_this_by_val_functor);\r\n    F f12(as_const(explicit_this_by_val_functor));\r\n    F f13(move(explicit_this_by_val_functor));\r\n    F f14(move(as_const(explicit_this_by_val_functor)));\r\n\r\n    static_assert(is_same_v<decltype(f11), F<void(char)>>);\r\n    static_assert(is_same_v<decltype(f12), F<void(char)>>);\r\n    static_assert(is_same_v<decltype(f13), F<void(char)>>);\r\n    static_assert(is_same_v<decltype(f14), F<void(char)>>);\r\n\r\n    struct ExplicitThisByRef {\r\n        void operator()(this ExplicitThisByRef&, short) {}\r\n    };\r\n\r\n    ExplicitThisByRef explicit_this_by_ref_functor{};\r\n\r\n    F f15(explicit_this_by_ref_functor);\r\n\r\n    static_assert(is_same_v<decltype(f15), F<void(short)>>);\r\n\r\n    struct ExplicitThisByCRef {\r\n        void operator()(this const ExplicitThisByCRef&, int) {}\r\n    };\r\n\r\n    ExplicitThisByCRef explicit_this_by_cref_functor{};\r\n\r\n    F f16(explicit_this_by_cref_functor);\r\n    F f17(as_const(explicit_this_by_cref_functor));\r\n    F f18(move(explicit_this_by_cref_functor));\r\n    F f19(move(as_const(explicit_this_by_cref_functor)));\r\n\r\n    static_assert(is_same_v<decltype(f16), F<void(int)>>);\r\n    static_assert(is_same_v<decltype(f17), F<void(int)>>);\r\n    static_assert(is_same_v<decltype(f18), F<void(int)>>);\r\n    static_assert(is_same_v<decltype(f19), F<void(int)>>);\r\n\r\n    struct ExplicitThisByConv {\r\n        struct That {};\r\n\r\n        operator That(this ExplicitThisByConv) {\r\n            return {};\r\n        }\r\n\r\n        void operator()(this That, long long) {}\r\n    };\r\n\r\n    ExplicitThisByConv explicit_this_by_conv_functor{};\r\n\r\n    F f20(explicit_this_by_conv_functor);\r\n    F f21(as_const(explicit_this_by_conv_functor));\r\n    F f22(move(explicit_this_by_conv_functor));\r\n    F f23(move(as_const(explicit_this_by_conv_functor)));\r\n\r\n    static_assert(is_same_v<decltype(f20), F<void(long long)>>);\r\n    static_assert(is_same_v<decltype(f21), F<void(long long)>>);\r\n    static_assert(is_same_v<decltype(f22), F<void(long long)>>);\r\n    static_assert(is_same_v<decltype(f23), F<void(long long)>>);\r\n\r\n    struct ExplicitThisNoexcept {\r\n        float operator()(this ExplicitThisNoexcept, double) noexcept {\r\n            return 3.14f;\r\n        }\r\n    };\r\n\r\n    ExplicitThisNoexcept explicit_this_noexcept_functor{};\r\n\r\n    F f24(explicit_this_noexcept_functor);\r\n    F f25(as_const(explicit_this_noexcept_functor));\r\n    F f26(move(explicit_this_noexcept_functor));\r\n    F f27(move(as_const(explicit_this_noexcept_functor)));\r\n\r\n    static_assert(is_same_v<decltype(f24), F<float(double)>>);\r\n    static_assert(is_same_v<decltype(f25), F<float(double)>>);\r\n    static_assert(is_same_v<decltype(f26), F<float(double)>>);\r\n    static_assert(is_same_v<decltype(f27), F<float(double)>>);\r\n#endif // _HAS_CXX23\r\n}\r\n\r\nvoid test_searchers() {\r\n    const wchar_t first[] = {L'x', L'y', L'z'};\r\n    const auto last       = end(first);\r\n    MyWideHash wh{};\r\n    MyEqual eq{};\r\n\r\n    default_searcher ds1(first, last);\r\n    default_searcher ds2(first, last, eq);\r\n    boyer_moore_searcher bms1(first, last);\r\n    boyer_moore_searcher bms2(first, last, wh);\r\n    boyer_moore_searcher bms3(first, last, wh, eq);\r\n    boyer_moore_horspool_searcher bmhs1(first, last);\r\n    boyer_moore_horspool_searcher bmhs2(first, last, wh);\r\n    boyer_moore_horspool_searcher bmhs3(first, last, wh, eq);\r\n\r\n    static_assert(is_same_v<decltype(ds1), default_searcher<const wchar_t*>>);\r\n    static_assert(is_same_v<decltype(ds2), default_searcher<const wchar_t*, MyEqual>>);\r\n    static_assert(is_same_v<decltype(bms1), boyer_moore_searcher<const wchar_t*>>);\r\n    static_assert(is_same_v<decltype(bms2), boyer_moore_searcher<const wchar_t*, MyWideHash>>);\r\n    static_assert(is_same_v<decltype(bms3), boyer_moore_searcher<const wchar_t*, MyWideHash, MyEqual>>);\r\n    static_assert(is_same_v<decltype(bmhs1), boyer_moore_horspool_searcher<const wchar_t*>>);\r\n    static_assert(is_same_v<decltype(bmhs2), boyer_moore_horspool_searcher<const wchar_t*, MyWideHash>>);\r\n    static_assert(is_same_v<decltype(bmhs3), boyer_moore_horspool_searcher<const wchar_t*, MyWideHash, MyEqual>>);\r\n}\r\n\r\nvoid test_duration_and_time_point() {\r\n    using namespace std::chrono;\r\n\r\n    duration dur1(11ns);\r\n    duration dur2(22h);\r\n\r\n    static_assert(is_same_v<decltype(dur1), nanoseconds>);\r\n    static_assert(is_same_v<decltype(dur2), hours>);\r\n\r\n    time_point<system_clock, hours> tp{};\r\n    time_point tp2(tp);\r\n    (void) tp2;\r\n\r\n    static_assert(is_same_v<decltype(tp2), time_point<system_clock, hours>>);\r\n}\r\n\r\nvoid test_basic_string() {\r\n    const wchar_t first[] = {L'x', L'y', L'z'};\r\n    const auto last       = end(first);\r\n    MyAlloc<wchar_t> myal{};\r\n    initializer_list<wchar_t> il = {L'x', L'y', L'z'};\r\n\r\n    basic_string str1(first, last);\r\n    basic_string str2(first, last, myal);\r\n    basic_string str3(str2);\r\n    basic_string str4(str2, 1);\r\n    basic_string str5(str2, 1, myal);\r\n    basic_string str6(str2, 1, 1);\r\n    basic_string str7(str2, 1, 1, myal);\r\n    basic_string str8(L\"kitten\"sv);\r\n    basic_string str9(L\"kitten\"sv, myal);\r\n    basic_string str9a(L\"kitten\"sv, 1, 2);\r\n    basic_string str9b(L\"kitten\"sv, 1, 2, myal);\r\n    basic_string str10(L\"meow\");\r\n    basic_string str11(L\"meow\", myal);\r\n    basic_string str12(L\"meow\", 1);\r\n    basic_string str13(L\"meow\", 1, myal);\r\n    basic_string str14(7, L'x');\r\n    basic_string str15(7, L'x', myal);\r\n    basic_string str16(il);\r\n    basic_string str17(il, myal);\r\n    basic_string str18(str2, myal);\r\n\r\n    static_assert(is_same_v<decltype(str1), wstring>);\r\n    static_assert(is_same_v<decltype(str2), basic_string<wchar_t, char_traits<wchar_t>, MyAlloc<wchar_t>>>);\r\n    static_assert(is_same_v<decltype(str3), basic_string<wchar_t, char_traits<wchar_t>, MyAlloc<wchar_t>>>);\r\n    static_assert(is_same_v<decltype(str4), basic_string<wchar_t, char_traits<wchar_t>, MyAlloc<wchar_t>>>);\r\n    static_assert(is_same_v<decltype(str5), basic_string<wchar_t, char_traits<wchar_t>, MyAlloc<wchar_t>>>);\r\n    static_assert(is_same_v<decltype(str6), basic_string<wchar_t, char_traits<wchar_t>, MyAlloc<wchar_t>>>);\r\n    static_assert(is_same_v<decltype(str7), basic_string<wchar_t, char_traits<wchar_t>, MyAlloc<wchar_t>>>);\r\n    static_assert(is_same_v<decltype(str8), wstring>);\r\n    static_assert(is_same_v<decltype(str9), basic_string<wchar_t, char_traits<wchar_t>, MyAlloc<wchar_t>>>);\r\n    static_assert(is_same_v<decltype(str9a), wstring>);\r\n    static_assert(is_same_v<decltype(str9b), basic_string<wchar_t, char_traits<wchar_t>, MyAlloc<wchar_t>>>);\r\n    static_assert(is_same_v<decltype(str10), wstring>);\r\n    static_assert(is_same_v<decltype(str11), basic_string<wchar_t, char_traits<wchar_t>, MyAlloc<wchar_t>>>);\r\n    static_assert(is_same_v<decltype(str12), wstring>);\r\n    static_assert(is_same_v<decltype(str13), basic_string<wchar_t, char_traits<wchar_t>, MyAlloc<wchar_t>>>);\r\n    static_assert(is_same_v<decltype(str14), wstring>);\r\n    static_assert(is_same_v<decltype(str15), basic_string<wchar_t, char_traits<wchar_t>, MyAlloc<wchar_t>>>);\r\n    static_assert(is_same_v<decltype(str16), wstring>);\r\n    static_assert(is_same_v<decltype(str17), basic_string<wchar_t, char_traits<wchar_t>, MyAlloc<wchar_t>>>);\r\n    static_assert(is_same_v<decltype(str18), basic_string<wchar_t, char_traits<wchar_t>, MyAlloc<wchar_t>>>);\r\n\r\n#if _HAS_CXX23\r\n    basic_string str19(from_range, first);\r\n    basic_string str20(from_range, first, myal);\r\n\r\n    static_assert(is_same_v<decltype(str19), wstring>);\r\n    static_assert(is_same_v<decltype(str20), basic_string<wchar_t, char_traits<wchar_t>, MyAlloc<wchar_t>>>);\r\n#endif // _HAS_CXX23\r\n}\r\n\r\nvoid test_basic_string_view() {\r\n    basic_string_view sv1(L\"meow\");\r\n    basic_string_view sv2(L\"meow\", 1);\r\n    basic_string_view sv3(sv2);\r\n\r\n    static_assert(is_same_v<decltype(sv1), wstring_view>);\r\n    static_assert(is_same_v<decltype(sv2), wstring_view>);\r\n    static_assert(is_same_v<decltype(sv3), wstring_view>);\r\n}\r\n\r\nvoid test_array() {\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wmissing-braces\"\r\n#endif // __clang__\r\n\r\n    long x       = 11L;\r\n    const long y = 22L;\r\n\r\n    array a1{x};\r\n    array a2{x, y};\r\n    array a3{x, y, 33L};\r\n    array b{a3};\r\n\r\n    static_assert(is_same_v<decltype(a1), array<long, 1>>);\r\n    static_assert(is_same_v<decltype(a2), array<long, 2>>);\r\n    static_assert(is_same_v<decltype(a3), array<long, 3>>);\r\n    static_assert(is_same_v<decltype(b), array<long, 3>>);\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // __clang__\r\n}\r\n\r\ntemplate <template <typename T, typename A = allocator<T>> typename Sequence>\r\nvoid test_sequence_container() {\r\n    const long first[] = {10L, 20L, 30L};\r\n    const auto last    = end(first);\r\n    MyAlloc<long> myal{};\r\n    initializer_list<long> il = {11L, 22L, 33L};\r\n\r\n    Sequence c1(first, last);\r\n    Sequence c2(first, last, myal);\r\n    Sequence c3(il);\r\n    Sequence c4(il, myal);\r\n    Sequence c5(7, 44L);\r\n    Sequence c6(7, 44L, myal);\r\n    Sequence c7(c6);\r\n\r\n    static_assert(is_same_v<decltype(c1), Sequence<long>>);\r\n    static_assert(is_same_v<decltype(c2), Sequence<long, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(c3), Sequence<long>>);\r\n    static_assert(is_same_v<decltype(c4), Sequence<long, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(c5), Sequence<long>>);\r\n    static_assert(is_same_v<decltype(c6), Sequence<long, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(c7), Sequence<long, MyAlloc<long>>>);\r\n\r\n#if _HAS_CXX23\r\n    Sequence c8(from_range, first);\r\n    Sequence c9(from_range, first, myal);\r\n\r\n    static_assert(is_same_v<decltype(c8), Sequence<long>>);\r\n    static_assert(is_same_v<decltype(c9), Sequence<long, MyAlloc<long>>>);\r\n#endif // _HAS_CXX23\r\n}\r\n\r\nvoid test_vector_bool() {\r\n    const bool first[] = {true, false, true};\r\n    const auto last    = end(first);\r\n    MyAlloc<bool> myal{};\r\n    initializer_list<bool> il = {true, false, true};\r\n\r\n    vector vb1(first, last);\r\n    vector vb2(first, last, myal);\r\n    vector vb3(il);\r\n    vector vb4(il, myal);\r\n    vector vb5(7, true);\r\n    vector vb6(7, true, myal);\r\n    vector vb7(vb6);\r\n\r\n    static_assert(is_same_v<decltype(vb1), vector<bool>>);\r\n    static_assert(is_same_v<decltype(vb2), vector<bool, MyAlloc<bool>>>);\r\n    static_assert(is_same_v<decltype(vb3), vector<bool>>);\r\n    static_assert(is_same_v<decltype(vb4), vector<bool, MyAlloc<bool>>>);\r\n    static_assert(is_same_v<decltype(vb5), vector<bool>>);\r\n    static_assert(is_same_v<decltype(vb6), vector<bool, MyAlloc<bool>>>);\r\n    static_assert(is_same_v<decltype(vb7), vector<bool, MyAlloc<bool>>>);\r\n\r\n#if _HAS_CXX23\r\n    vector vb8(from_range, first);\r\n    vector vb9(from_range, first, myal);\r\n\r\n    static_assert(is_same_v<decltype(vb8), vector<bool>>);\r\n    static_assert(is_same_v<decltype(vb9), vector<bool, MyAlloc<bool>>>);\r\n#endif // _HAS_CXX23\r\n}\r\n\r\ntemplate <template <typename K, typename V, typename C = less<K>, typename A = allocator<pair<const K, V>>> typename M>\r\nvoid test_map_or_multimap() {\r\n    using Purr          = pair<long, char>;\r\n    using CPurr         = pair<const long, char>;\r\n    const CPurr first[] = {{10L, 'a'}, {20L, 'b'}, {30L, 'c'}};\r\n    const auto last     = end(first);\r\n    MyGreater gt{};\r\n    MyAlloc<CPurr> myal{};\r\n    initializer_list<CPurr> il = {{11L, 'd'}, {22L, 'e'}, {33L, 'f'}};\r\n\r\n    M m1(first, last);\r\n    M m2(first, last, gt);\r\n    M m3(first, last, gt, myal);\r\n    M m4(il);\r\n    M m5(il, gt);\r\n    M m7(first, last, myal);\r\n    M m9(m7);\r\n    M m10{Purr{11L, 'd'}, Purr{22L, 'e'}, Purr{33L, 'f'}};\r\n    M m11({Purr{11L, 'd'}, Purr{22L, 'e'}, Purr{33L, 'f'}}, gt);\r\n    M m12({Purr{11L, 'd'}, Purr{22L, 'e'}, Purr{33L, 'f'}}, gt, myal);\r\n    M m13({Purr{11L, 'd'}, Purr{22L, 'e'}, Purr{33L, 'f'}}, myal);\r\n\r\n    static_assert(is_same_v<decltype(m1), M<long, char>>);\r\n    static_assert(is_same_v<decltype(m2), M<long, char, MyGreater>>);\r\n    static_assert(is_same_v<decltype(m3), M<long, char, MyGreater, MyAlloc<CPurr>>>);\r\n    static_assert(is_same_v<decltype(m4), M<long, char>>);\r\n    static_assert(is_same_v<decltype(m5), M<long, char, MyGreater>>);\r\n    static_assert(is_same_v<decltype(m7), M<long, char, less<long>, MyAlloc<CPurr>>>);\r\n    static_assert(is_same_v<decltype(m9), M<long, char, less<long>, MyAlloc<CPurr>>>);\r\n    static_assert(is_same_v<decltype(m10), M<long, char>>);\r\n    static_assert(is_same_v<decltype(m11), M<long, char, MyGreater>>);\r\n    static_assert(is_same_v<decltype(m12), M<long, char, MyGreater, MyAlloc<CPurr>>>);\r\n    static_assert(is_same_v<decltype(m13), M<long, char, less<long>, MyAlloc<CPurr>>>);\r\n\r\n#if _HAS_CXX23\r\n    M m14(from_range, first);\r\n    M m15(from_range, first, gt);\r\n    M m16(from_range, first, gt, myal);\r\n    M m17(from_range, first, myal);\r\n\r\n    static_assert(is_same_v<decltype(m14), M<long, char>>);\r\n    static_assert(is_same_v<decltype(m15), M<long, char, MyGreater>>);\r\n    static_assert(is_same_v<decltype(m16), M<long, char, MyGreater, MyAlloc<CPurr>>>);\r\n    static_assert(is_same_v<decltype(m17), M<long, char, less<long>, MyAlloc<CPurr>>>);\r\n\r\n    { // Verify changes from P2165R4\r\n        using TupleIter = tuple<int, double>*;\r\n        static_assert(is_same_v<decltype(M{TupleIter{}, TupleIter{}}), M<int, double>>);\r\n\r\n        using PairIter = pair<int, float>*;\r\n        static_assert(is_same_v<decltype(M{PairIter{}, PairIter{}}), M<int, float>>);\r\n\r\n        using ArrayIter = array<int, 2>*;\r\n        static_assert(is_same_v<decltype(M{ArrayIter{}, ArrayIter{}}), M<int, int>>);\r\n\r\n        using SubrangeIter = ranges::subrange<int*, int*>*;\r\n        static_assert(is_same_v<decltype(M{SubrangeIter{}, SubrangeIter{}}), M<int*, int*>>);\r\n    }\r\n#endif // _HAS_CXX23\r\n}\r\n\r\ntemplate <template <typename K, typename C = less<K>, typename A = allocator<K>> typename S>\r\nvoid test_set_or_multiset() {\r\n    const long first[] = {10L, 20L, 30L};\r\n    const auto last    = end(first);\r\n    MyGreater gt{};\r\n    MyAlloc<long> myal{};\r\n    initializer_list<long> il = {11L, 22L, 33L};\r\n\r\n    S s1(first, last);\r\n    S s2(first, last, gt);\r\n    S s3(first, last, gt, myal);\r\n    S s4(il);\r\n    S s5(il, gt);\r\n    S s6(il, gt, myal);\r\n    S s7(first, last, myal);\r\n    S s8(il, myal);\r\n    S s9(s8);\r\n\r\n    static_assert(is_same_v<decltype(s1), S<long>>);\r\n    static_assert(is_same_v<decltype(s2), S<long, MyGreater>>);\r\n    static_assert(is_same_v<decltype(s3), S<long, MyGreater, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(s4), S<long>>);\r\n    static_assert(is_same_v<decltype(s5), S<long, MyGreater>>);\r\n    static_assert(is_same_v<decltype(s6), S<long, MyGreater, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(s7), S<long, less<long>, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(s8), S<long, less<long>, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(s9), S<long, less<long>, MyAlloc<long>>>);\r\n\r\n#if _HAS_CXX23\r\n    S s10(from_range, first);\r\n    S s11(from_range, first, gt);\r\n    S s12(from_range, first, gt, myal);\r\n    S s13(from_range, first, myal);\r\n\r\n    static_assert(is_same_v<decltype(s10), S<long>>);\r\n    static_assert(is_same_v<decltype(s11), S<long, MyGreater>>);\r\n    static_assert(is_same_v<decltype(s12), S<long, MyGreater, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(s13), S<long, less<long>, MyAlloc<long>>>);\r\n#endif // _HAS_CXX23\r\n}\r\n\r\ntemplate <template <typename K, typename V, typename H = hash<K>, typename P = equal_to<K>,\r\n    typename A = allocator<pair<const K, V>>> typename UM>\r\nvoid test_unordered_map_or_unordered_multimap() {\r\n    using Purr          = pair<long, char>;\r\n    using CPurr         = pair<const long, char>;\r\n    const CPurr first[] = {{10L, 'a'}, {20L, 'b'}, {30L, 'c'}};\r\n    const auto last     = end(first);\r\n    MyHash hf{};\r\n    MyEqual eq{};\r\n    MyAlloc<CPurr> myal{};\r\n    initializer_list<CPurr> il = {{11L, 'd'}, {22L, 'e'}, {33L, 'f'}};\r\n\r\n    UM um1(first, last);\r\n    UM um2(first, last, 7);\r\n    UM um3(first, last, 7, hf);\r\n    UM um4(first, last, 7, hf, eq);\r\n    UM um5(first, last, 7, hf, eq, myal);\r\n    UM um6(il);\r\n    UM um11(first, last, myal);\r\n    UM um12(first, last, 7, myal);\r\n    UM um13(first, last, 7, hf, myal);\r\n    UM um17(um5);\r\n    UM um18{Purr{10L, 'a'}, Purr{20L, 'b'}, Purr{30L, 'c'}};\r\n    UM um19({Purr{10L, 'a'}, Purr{20L, 'b'}, Purr{30L, 'c'}}, 7);\r\n    UM um20({Purr{10L, 'a'}, Purr{20L, 'b'}, Purr{30L, 'c'}}, 7, hf);\r\n    UM um21({Purr{10L, 'a'}, Purr{20L, 'b'}, Purr{30L, 'c'}}, 7, hf, eq);\r\n    UM um22({Purr{10L, 'a'}, Purr{20L, 'b'}, Purr{30L, 'c'}}, 7, hf, eq, myal);\r\n    UM um23({Purr{10L, 'a'}, Purr{20L, 'b'}, Purr{30L, 'c'}}, myal);\r\n    UM um24({Purr{10L, 'a'}, Purr{20L, 'b'}, Purr{30L, 'c'}}, 7, myal);\r\n    UM um25({Purr{10L, 'a'}, Purr{20L, 'b'}, Purr{30L, 'c'}}, 7, hf, myal);\r\n\r\n    static_assert(is_same_v<decltype(um1), UM<long, char>>);\r\n    static_assert(is_same_v<decltype(um2), UM<long, char>>);\r\n    static_assert(is_same_v<decltype(um3), UM<long, char, MyHash>>);\r\n    static_assert(is_same_v<decltype(um4), UM<long, char, MyHash, MyEqual>>);\r\n    static_assert(is_same_v<decltype(um5), UM<long, char, MyHash, MyEqual, MyAlloc<CPurr>>>);\r\n    static_assert(is_same_v<decltype(um6), UM<long, char>>);\r\n    static_assert(is_same_v<decltype(um11), UM<long, char, hash<long>, equal_to<long>, MyAlloc<CPurr>>>);\r\n    static_assert(is_same_v<decltype(um12), UM<long, char, hash<long>, equal_to<long>, MyAlloc<CPurr>>>);\r\n    static_assert(is_same_v<decltype(um13), UM<long, char, MyHash, equal_to<long>, MyAlloc<CPurr>>>);\r\n    static_assert(is_same_v<decltype(um17), UM<long, char, MyHash, MyEqual, MyAlloc<CPurr>>>);\r\n    static_assert(is_same_v<decltype(um18), UM<long, char>>);\r\n    static_assert(is_same_v<decltype(um19), UM<long, char>>);\r\n    static_assert(is_same_v<decltype(um20), UM<long, char, MyHash>>);\r\n    static_assert(is_same_v<decltype(um21), UM<long, char, MyHash, MyEqual>>);\r\n    static_assert(is_same_v<decltype(um22), UM<long, char, MyHash, MyEqual, MyAlloc<CPurr>>>);\r\n    static_assert(is_same_v<decltype(um23), UM<long, char, hash<long>, equal_to<long>, MyAlloc<CPurr>>>);\r\n    static_assert(is_same_v<decltype(um24), UM<long, char, hash<long>, equal_to<long>, MyAlloc<CPurr>>>);\r\n    static_assert(is_same_v<decltype(um25), UM<long, char, MyHash, equal_to<long>, MyAlloc<CPurr>>>);\r\n\r\n#if _HAS_CXX23\r\n    UM um26(from_range, first);\r\n    UM um27(from_range, first, 7);\r\n    UM um28(from_range, first, 7, hf);\r\n    UM um29(from_range, first, 7, hf, eq);\r\n    UM um30(from_range, first, 7, hf, eq, myal);\r\n    UM um31(from_range, first, myal);\r\n    UM um32(from_range, first, 7, myal);\r\n    UM um33(from_range, first, 7, hf, myal);\r\n\r\n    static_assert(is_same_v<decltype(um26), UM<long, char>>);\r\n    static_assert(is_same_v<decltype(um27), UM<long, char>>);\r\n    static_assert(is_same_v<decltype(um28), UM<long, char, MyHash>>);\r\n    static_assert(is_same_v<decltype(um29), UM<long, char, MyHash, MyEqual>>);\r\n    static_assert(is_same_v<decltype(um30), UM<long, char, MyHash, MyEqual, MyAlloc<CPurr>>>);\r\n    static_assert(is_same_v<decltype(um31), UM<long, char, hash<long>, equal_to<long>, MyAlloc<CPurr>>>);\r\n    static_assert(is_same_v<decltype(um32), UM<long, char, hash<long>, equal_to<long>, MyAlloc<CPurr>>>);\r\n    static_assert(is_same_v<decltype(um33), UM<long, char, MyHash, equal_to<long>, MyAlloc<CPurr>>>);\r\n#endif // _HAS_CXX23\r\n}\r\n\r\ntemplate <template <typename K, typename H = hash<K>, typename P = equal_to<K>, typename A = allocator<K>> typename US>\r\nvoid test_unordered_set_or_unordered_multiset() {\r\n    const long first[] = {10L, 20L, 30L};\r\n    const auto last    = end(first);\r\n    MyHash hf{};\r\n    MyEqual eq{};\r\n    MyAlloc<long> myal{};\r\n    initializer_list<long> il = {11L, 22L, 33L};\r\n\r\n    US us1(first, last);\r\n    US us2(first, last, 7);\r\n    US us3(first, last, 7, hf);\r\n    US us4(first, last, 7, hf, eq);\r\n    US us5(first, last, 7, hf, eq, myal);\r\n    US us6(il);\r\n    US us7(il, 7);\r\n    US us8(il, 7, hf);\r\n    US us9(il, 7, hf, eq);\r\n    US us10(il, 7, hf, eq, myal);\r\n    US us11(first, last, 7, myal);\r\n    US us12(first, last, 7, hf, myal);\r\n    US us13(il, 7, myal);\r\n    US us14(il, 7, hf, myal);\r\n    US us15(us5);\r\n\r\n    static_assert(is_same_v<decltype(us1), US<long>>);\r\n    static_assert(is_same_v<decltype(us2), US<long>>);\r\n    static_assert(is_same_v<decltype(us3), US<long, MyHash>>);\r\n    static_assert(is_same_v<decltype(us4), US<long, MyHash, MyEqual>>);\r\n    static_assert(is_same_v<decltype(us5), US<long, MyHash, MyEqual, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(us6), US<long>>);\r\n    static_assert(is_same_v<decltype(us7), US<long>>);\r\n    static_assert(is_same_v<decltype(us8), US<long, MyHash>>);\r\n    static_assert(is_same_v<decltype(us9), US<long, MyHash, MyEqual>>);\r\n    static_assert(is_same_v<decltype(us10), US<long, MyHash, MyEqual, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(us11), US<long, hash<long>, equal_to<long>, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(us12), US<long, MyHash, equal_to<long>, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(us13), US<long, hash<long>, equal_to<long>, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(us14), US<long, MyHash, equal_to<long>, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(us15), US<long, MyHash, MyEqual, MyAlloc<long>>>);\r\n\r\n#if _HAS_CXX23\r\n    US us16(from_range, first);\r\n    US us17(from_range, first, 7);\r\n    US us18(from_range, first, 7, hf);\r\n    US us19(from_range, first, 7, hf, eq);\r\n    US us20(from_range, first, 7, hf, eq, myal);\r\n    US us21(from_range, first, 7, myal);\r\n    US us22(from_range, first, 7, hf, myal);\r\n\r\n    static_assert(is_same_v<decltype(us16), US<long>>);\r\n    static_assert(is_same_v<decltype(us17), US<long>>);\r\n    static_assert(is_same_v<decltype(us18), US<long, MyHash>>);\r\n    static_assert(is_same_v<decltype(us19), US<long, MyHash, MyEqual>>);\r\n    static_assert(is_same_v<decltype(us20), US<long, MyHash, MyEqual, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(us21), US<long, hash<long>, equal_to<long>, MyAlloc<long>>>);\r\n    static_assert(is_same_v<decltype(us22), US<long, MyHash, equal_to<long>, MyAlloc<long>>>);\r\n#endif // _HAS_CXX23\r\n}\r\n\r\nvoid test_queue_and_stack() {\r\n    list<long, MyAlloc<long>> lst{};\r\n    MyAlloc<long> myal{};\r\n\r\n    queue q1(lst);\r\n    queue q2(lst, myal);\r\n    queue q3(q2);\r\n\r\n    static_assert(is_same_v<decltype(q1), queue<long, list<long, MyAlloc<long>>>>);\r\n    static_assert(is_same_v<decltype(q2), queue<long, list<long, MyAlloc<long>>>>);\r\n    static_assert(is_same_v<decltype(q3), queue<long, list<long, MyAlloc<long>>>>);\r\n\r\n#if _HAS_CXX23\r\n    const long first[] = {10L, 20L, 30L};\r\n    const auto last    = end(first);\r\n\r\n    queue q4(first, last);\r\n    queue q5(first, last, myal);\r\n\r\n    static_assert(is_same_v<decltype(q4), queue<long>>);\r\n    static_assert(is_same_v<decltype(q5), queue<long, deque<long, MyAlloc<long>>>>);\r\n\r\n    queue q6(from_range, first);\r\n    queue q7(from_range, first, myal);\r\n\r\n    static_assert(is_same_v<decltype(q6), queue<long>>);\r\n    static_assert(is_same_v<decltype(q7), queue<long, deque<long, MyAlloc<long>>>>);\r\n#endif // _HAS_CXX23\r\n\r\n    stack s1(lst);\r\n    stack s2(lst, myal);\r\n    stack s3(s2);\r\n\r\n    static_assert(is_same_v<decltype(s1), stack<long, list<long, MyAlloc<long>>>>);\r\n    static_assert(is_same_v<decltype(s2), stack<long, list<long, MyAlloc<long>>>>);\r\n    static_assert(is_same_v<decltype(s3), stack<long, list<long, MyAlloc<long>>>>);\r\n\r\n#if _HAS_CXX23\r\n    stack s4(first, last);\r\n    stack s5(first, last, myal);\r\n\r\n    static_assert(is_same_v<decltype(s4), stack<long>>);\r\n    static_assert(is_same_v<decltype(s5), stack<long, deque<long, MyAlloc<long>>>>);\r\n\r\n    stack s6(from_range, first);\r\n    stack s7(from_range, first, myal);\r\n\r\n    static_assert(is_same_v<decltype(s6), stack<long>>);\r\n    static_assert(is_same_v<decltype(s7), stack<long, deque<long, MyAlloc<long>>>>);\r\n#endif // _HAS_CXX23\r\n}\r\n\r\nvoid test_priority_queue() {\r\n    MyGreater gt{};\r\n    deque<long, MyAlloc<long>> deq{};\r\n    MyAlloc<long> myal{};\r\n    const long first[] = {10L, 20L, 30L};\r\n    const auto last    = end(first);\r\n\r\n    priority_queue pq1(gt, deq);\r\n    priority_queue pq2(gt, deq, myal);\r\n    priority_queue pq3(first, last);\r\n    priority_queue pq4(first, last, gt);\r\n    priority_queue pq5(first, last, gt, deq);\r\n    priority_queue pq6(first, last, myal);\r\n    priority_queue pq7(first, last, gt, myal);\r\n    priority_queue pq8(first, last, gt, deq, myal);\r\n    priority_queue pq9(pq5);\r\n\r\n    static_assert(is_same_v<decltype(pq1), priority_queue<long, deque<long, MyAlloc<long>>, MyGreater>>);\r\n    static_assert(is_same_v<decltype(pq2), priority_queue<long, deque<long, MyAlloc<long>>, MyGreater>>);\r\n    static_assert(is_same_v<decltype(pq3), priority_queue<long>>);\r\n    static_assert(is_same_v<decltype(pq4), priority_queue<long, vector<long>, MyGreater>>);\r\n    static_assert(is_same_v<decltype(pq5), priority_queue<long, deque<long, MyAlloc<long>>, MyGreater>>);\r\n    static_assert(is_same_v<decltype(pq6), priority_queue<long, vector<long, MyAlloc<long>>>>);\r\n    static_assert(is_same_v<decltype(pq7), priority_queue<long, vector<long, MyAlloc<long>>, MyGreater>>);\r\n    static_assert(is_same_v<decltype(pq8), priority_queue<long, deque<long, MyAlloc<long>>, MyGreater>>);\r\n    static_assert(is_same_v<decltype(pq9), priority_queue<long, deque<long, MyAlloc<long>>, MyGreater>>);\r\n\r\n#if _HAS_CXX23\r\n    priority_queue pq10(from_range, first);\r\n    priority_queue pq11(from_range, first, gt);\r\n    priority_queue pq12(from_range, first, gt, myal);\r\n    priority_queue pq13(from_range, first, myal);\r\n\r\n    static_assert(is_same_v<decltype(pq10), priority_queue<long>>);\r\n    static_assert(is_same_v<decltype(pq11), priority_queue<long, vector<long>, MyGreater>>);\r\n    static_assert(is_same_v<decltype(pq12), priority_queue<long, vector<long, MyAlloc<long>>, MyGreater>>);\r\n    static_assert(is_same_v<decltype(pq13), priority_queue<long, vector<long, MyAlloc<long>>>>);\r\n#endif // _HAS_CXX23\r\n}\r\n\r\nvoid test_iterator_adaptors() {\r\n    long* const ptr = nullptr;\r\n\r\n    reverse_iterator ri1(ptr);\r\n    reverse_iterator ri2(ri1);\r\n\r\n    static_assert(is_same_v<decltype(ri1), reverse_iterator<long*>>);\r\n    static_assert(is_same_v<decltype(ri2), reverse_iterator<long*>>);\r\n\r\n    move_iterator mi1(ptr);\r\n    move_iterator mi2(mi1);\r\n\r\n    static_assert(is_same_v<decltype(mi1), move_iterator<long*>>);\r\n    static_assert(is_same_v<decltype(mi2), move_iterator<long*>>);\r\n}\r\n\r\nvoid test_insert_iterators() {\r\n    list<long, MyAlloc<long>> lst{};\r\n\r\n    back_insert_iterator bii1(lst);\r\n    back_insert_iterator bii2(bii1);\r\n\r\n    static_assert(is_same_v<decltype(bii1), back_insert_iterator<list<long, MyAlloc<long>>>>);\r\n    static_assert(is_same_v<decltype(bii2), back_insert_iterator<list<long, MyAlloc<long>>>>);\r\n\r\n    front_insert_iterator fii1(lst);\r\n    front_insert_iterator fii2(fii1);\r\n\r\n    static_assert(is_same_v<decltype(fii1), front_insert_iterator<list<long, MyAlloc<long>>>>);\r\n    static_assert(is_same_v<decltype(fii2), front_insert_iterator<list<long, MyAlloc<long>>>>);\r\n\r\n    insert_iterator ii1(lst, lst.end());\r\n    insert_iterator ii2(ii1);\r\n\r\n    static_assert(is_same_v<decltype(ii1), insert_iterator<list<long, MyAlloc<long>>>>);\r\n    static_assert(is_same_v<decltype(ii2), insert_iterator<list<long, MyAlloc<long>>>>);\r\n}\r\n\r\nvoid test_stream_iterators() {\r\n    wostringstream woss{};\r\n\r\n    istream_iterator<double, wchar_t> istr_iter{};\r\n    istream_iterator istr_iter2(istr_iter);\r\n\r\n    static_assert(is_same_v<decltype(istr_iter2), istream_iterator<double, wchar_t>>);\r\n\r\n    ostream_iterator<double, wchar_t> ostr_iter(woss);\r\n    ostream_iterator ostr_iter2(ostr_iter);\r\n\r\n    static_assert(is_same_v<decltype(ostr_iter2), ostream_iterator<double, wchar_t>>);\r\n\r\n    istreambuf_iterator<wchar_t> istrbuf_iter{};\r\n    istreambuf_iterator istrbuf_iter2(istrbuf_iter);\r\n\r\n    static_assert(is_same_v<decltype(istrbuf_iter2), istreambuf_iterator<wchar_t>>);\r\n\r\n    ostreambuf_iterator<wchar_t> ostrbuf_iter(woss);\r\n    ostreambuf_iterator ostrbuf_iter2(ostrbuf_iter);\r\n\r\n    static_assert(is_same_v<decltype(ostrbuf_iter2), ostreambuf_iterator<wchar_t>>);\r\n}\r\n\r\nvoid test_complex() {\r\n    complex c1(1.0f);\r\n    complex c2(1.0f, 1.0f);\r\n    complex c3(c2);\r\n    complex c4(1.0);\r\n    complex c5(1.0, 1.0);\r\n    complex c6(c5);\r\n\r\n    static_assert(is_same_v<decltype(c1), complex<float>>);\r\n    static_assert(is_same_v<decltype(c2), complex<float>>);\r\n    static_assert(is_same_v<decltype(c3), complex<float>>);\r\n    static_assert(is_same_v<decltype(c4), complex<double>>);\r\n    static_assert(is_same_v<decltype(c5), complex<double>>);\r\n    static_assert(is_same_v<decltype(c6), complex<double>>);\r\n}\r\n\r\nvoid test_valarray() {\r\n    int arr1[]                = {10, 20, 30};\r\n    const long arr2[]         = {11L, 22L, 33L};\r\n    initializer_list<long> il = {11L, 22L, 33L};\r\n\r\n    valarray va1(arr1, 3);\r\n    valarray va2(arr2, 3);\r\n    valarray va3(44L, 3);\r\n    valarray va4(begin(arr2), 3);\r\n    valarray va5(va4);\r\n    valarray va6(il);\r\n\r\n    static_assert(is_same_v<decltype(va1), valarray<int>>);\r\n    static_assert(is_same_v<decltype(va2), valarray<long>>);\r\n    static_assert(is_same_v<decltype(va3), valarray<long>>);\r\n    static_assert(is_same_v<decltype(va4), valarray<long>>);\r\n    static_assert(is_same_v<decltype(va5), valarray<long>>);\r\n    static_assert(is_same_v<decltype(va6), valarray<long>>);\r\n}\r\n\r\nvoid test_regex() {\r\n    const wchar_t first[]        = {L'x', L'y', L'z'};\r\n    const auto last              = end(first);\r\n    initializer_list<wchar_t> il = {L'x', L'y', L'z'};\r\n\r\n    basic_regex r1(first, last);\r\n    basic_regex r2(first, last, regex_constants::icase);\r\n    basic_regex r3(L\"meow\");\r\n    basic_regex r4(L\"meow\", regex_constants::icase);\r\n    basic_regex r5(L\"meow\", 1);\r\n    basic_regex r6(L\"meow\", 1, regex_constants::icase);\r\n    basic_regex r7(r6);\r\n    basic_regex r8(L\"kitty\"s);\r\n    basic_regex r9(L\"kitty\"s, regex_constants::icase);\r\n    basic_regex r10(il);\r\n    basic_regex r11(il, regex_constants::icase);\r\n\r\n    static_assert(is_same_v<decltype(r1), wregex>);\r\n    static_assert(is_same_v<decltype(r2), wregex>);\r\n    static_assert(is_same_v<decltype(r3), wregex>);\r\n    static_assert(is_same_v<decltype(r4), wregex>);\r\n    static_assert(is_same_v<decltype(r5), wregex>);\r\n    static_assert(is_same_v<decltype(r6), wregex>);\r\n    static_assert(is_same_v<decltype(r7), wregex>);\r\n    static_assert(is_same_v<decltype(r8), wregex>);\r\n    static_assert(is_same_v<decltype(r9), wregex>);\r\n    static_assert(is_same_v<decltype(r10), wregex>);\r\n    static_assert(is_same_v<decltype(r11), wregex>);\r\n\r\n    wssub_match sm1{};\r\n    sub_match sm2(sm1);\r\n\r\n    static_assert(is_same_v<decltype(sm2), wssub_match>);\r\n\r\n    wsmatch mr1{};\r\n    match_results mr2(mr1);\r\n\r\n    static_assert(is_same_v<decltype(mr2), wsmatch>);\r\n\r\n    regex_iterator ri1(first, last, r1);\r\n    regex_iterator ri2(first, last, r1, regex_constants::match_default);\r\n    regex_iterator ri3(ri2);\r\n\r\n    static_assert(is_same_v<decltype(ri1), wcregex_iterator>);\r\n    static_assert(is_same_v<decltype(ri2), wcregex_iterator>);\r\n    static_assert(is_same_v<decltype(ri3), wcregex_iterator>);\r\n\r\n    const vector<int> vec_submatches({0});\r\n    initializer_list<int> il_submatches = {0};\r\n    const int arr_submatches[]          = {0};\r\n\r\n    regex_token_iterator rti1(first, last, r1);\r\n    regex_token_iterator rti2(first, last, r1, 0);\r\n    regex_token_iterator rti3(first, last, r1, 0, regex_constants::match_default);\r\n    regex_token_iterator rti4(first, last, r1, vec_submatches);\r\n    regex_token_iterator rti5(first, last, r1, vec_submatches, regex_constants::match_default);\r\n    regex_token_iterator rti6(first, last, r1, il_submatches);\r\n    regex_token_iterator rti7(first, last, r1, il_submatches, regex_constants::match_default);\r\n    regex_token_iterator rti8(first, last, r1, arr_submatches);\r\n    regex_token_iterator rti9(first, last, r1, arr_submatches, regex_constants::match_default);\r\n    regex_token_iterator rti10(rti9);\r\n\r\n    static_assert(is_same_v<decltype(rti1), wcregex_token_iterator>);\r\n    static_assert(is_same_v<decltype(rti2), wcregex_token_iterator>);\r\n    static_assert(is_same_v<decltype(rti3), wcregex_token_iterator>);\r\n    static_assert(is_same_v<decltype(rti4), wcregex_token_iterator>);\r\n    static_assert(is_same_v<decltype(rti5), wcregex_token_iterator>);\r\n    static_assert(is_same_v<decltype(rti6), wcregex_token_iterator>);\r\n    static_assert(is_same_v<decltype(rti7), wcregex_token_iterator>);\r\n    static_assert(is_same_v<decltype(rti8), wcregex_token_iterator>);\r\n    static_assert(is_same_v<decltype(rti9), wcregex_token_iterator>);\r\n    static_assert(is_same_v<decltype(rti10), wcregex_token_iterator>);\r\n}\r\n\r\nvoid test_atomic() {\r\n    long x = 11L;\r\n\r\n    atomic atom1(x);\r\n    atomic atom2(&x);\r\n\r\n    static_assert(is_same_v<decltype(atom1), atomic<long>>);\r\n    static_assert(is_same_v<decltype(atom2), atomic<long*>>);\r\n}\r\n\r\nvoid test_locks() {\r\n    recursive_mutex rm{};\r\n    recursive_timed_mutex rtm{};\r\n    lock_guard lg(rm);\r\n    unique_lock ul(rm);\r\n    unique_lock ul2(move(ul));\r\n    scoped_lock scoped0{};\r\n    scoped_lock scoped1(rm);\r\n    scoped_lock scoped2(rm, rtm);\r\n    scoped_lock scoped3(adopt_lock);\r\n    rm.lock();\r\n    scoped_lock scoped4(adopt_lock, rm);\r\n    rm.lock();\r\n    rtm.lock();\r\n    scoped_lock scoped5(adopt_lock, rm, rtm);\r\n    shared_timed_mutex stm{};\r\n    shared_lock shared(stm);\r\n    shared_lock shared2(move(shared));\r\n\r\n    static_assert(is_same_v<decltype(lg), lock_guard<recursive_mutex>>);\r\n    static_assert(is_same_v<decltype(ul), unique_lock<recursive_mutex>>);\r\n    static_assert(is_same_v<decltype(ul2), unique_lock<recursive_mutex>>);\r\n    static_assert(is_same_v<decltype(scoped0), scoped_lock<>>);\r\n    static_assert(is_same_v<decltype(scoped1), scoped_lock<recursive_mutex>>);\r\n    static_assert(is_same_v<decltype(scoped2), scoped_lock<recursive_mutex, recursive_timed_mutex>>);\r\n    static_assert(is_same_v<decltype(scoped3), scoped_lock<>>);\r\n    static_assert(is_same_v<decltype(scoped4), scoped_lock<recursive_mutex>>);\r\n    static_assert(is_same_v<decltype(scoped5), scoped_lock<recursive_mutex, recursive_timed_mutex>>);\r\n    static_assert(is_same_v<decltype(shared), shared_lock<shared_timed_mutex>>);\r\n    static_assert(is_same_v<decltype(shared2), shared_lock<shared_timed_mutex>>);\r\n}\r\n\r\nint main() {\r\n    test_initializer_list();\r\n    test_pair_and_tuple();\r\n    test_optional();\r\n    test_bitset();\r\n    test_allocator();\r\n    test_unique_ptr();\r\n    test_shared_ptr_and_weak_ptr();\r\n    test_owner_less();\r\n    test_scoped_allocator_adaptor();\r\n    test_reference_wrapper();\r\n    test_transparent_operator_functors();\r\n\r\n    test_function_wrapper<function>();\r\n    test_function_wrapper<packaged_task>();\r\n\r\n    test_searchers();\r\n    test_duration_and_time_point();\r\n    test_basic_string();\r\n    test_basic_string_view();\r\n    test_array();\r\n\r\n    test_sequence_container<deque>();\r\n    test_sequence_container<forward_list>();\r\n    test_sequence_container<list>();\r\n    test_sequence_container<vector>();\r\n\r\n    test_vector_bool();\r\n\r\n    test_map_or_multimap<map>();\r\n    test_map_or_multimap<multimap>();\r\n\r\n    test_set_or_multiset<set>();\r\n    test_set_or_multiset<multiset>();\r\n\r\n    test_unordered_map_or_unordered_multimap<unordered_map>();\r\n    test_unordered_map_or_unordered_multimap<unordered_multimap>();\r\n\r\n    test_unordered_set_or_unordered_multiset<unordered_set>();\r\n    test_unordered_set_or_unordered_multiset<unordered_multiset>();\r\n\r\n    test_queue_and_stack();\r\n    test_priority_queue();\r\n    test_iterator_adaptors();\r\n    test_insert_iterators();\r\n    test_stream_iterators();\r\n    test_complex();\r\n    test_valarray();\r\n    test_regex();\r\n    test_atomic();\r\n    test_locks();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0448R4_iosfwd/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0448R4_iosfwd/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <iosfwd>\r\n\r\nusing namespace std;\r\n\r\n// Needs to be separately declared as a simple alias of streampos\r\nvoid test_forward_declaration(wstreampos*);\r\n#ifdef __cpp_lib_char8_t\r\nvoid test_forward_declaration(u8streampos*);\r\n#endif // __cpp_lib_char8_t\r\nvoid test_forward_declaration(u16streampos*);\r\nvoid test_forward_declaration(u32streampos*);\r\n\r\nstruct test_aliases {\r\n    static void test_forward_declaration(streampos*);\r\n\r\n    static void test_forward_declaration(ios*);\r\n    static void test_forward_declaration(wios*);\r\n\r\n    static void test_forward_declaration(streambuf*);\r\n    static void test_forward_declaration(istream*);\r\n    static void test_forward_declaration(ostream*);\r\n    static void test_forward_declaration(iostream*);\r\n\r\n    static void test_forward_declaration(wstreambuf*);\r\n    static void test_forward_declaration(wistream*);\r\n    static void test_forward_declaration(wostream*);\r\n    static void test_forward_declaration(wiostream*);\r\n\r\n    static void test_forward_declaration(stringbuf*);\r\n    static void test_forward_declaration(istringstream*);\r\n    static void test_forward_declaration(ostringstream*);\r\n    static void test_forward_declaration(stringstream*);\r\n\r\n    static void test_forward_declaration(wstringbuf*);\r\n    static void test_forward_declaration(wistringstream*);\r\n    static void test_forward_declaration(wostringstream*);\r\n    static void test_forward_declaration(wstringstream*);\r\n\r\n#if _HAS_CXX23\r\n    static void test_forward_declaration(spanbuf*);\r\n    static void test_forward_declaration(ispanstream*);\r\n    static void test_forward_declaration(ospanstream*);\r\n    static void test_forward_declaration(spanstream*);\r\n\r\n    static void test_forward_declaration(wspanbuf*);\r\n    static void test_forward_declaration(wispanstream*);\r\n    static void test_forward_declaration(wospanstream*);\r\n    static void test_forward_declaration(wspanstream*);\r\n#endif // _HAS_CXX23\r\n\r\n    static void test_forward_declaration(filebuf*);\r\n    static void test_forward_declaration(ifstream*);\r\n    static void test_forward_declaration(ofstream*);\r\n    static void test_forward_declaration(fstream*);\r\n\r\n    static void test_forward_declaration(wfilebuf*);\r\n    static void test_forward_declaration(wifstream*);\r\n    static void test_forward_declaration(wofstream*);\r\n    static void test_forward_declaration(wfstream*);\r\n\r\n#if _HAS_CXX20\r\n    static void test_forward_declaration(syncbuf*);\r\n    static void test_forward_declaration(osyncstream*);\r\n\r\n    static void test_forward_declaration(wsyncbuf*);\r\n    static void test_forward_declaration(wosyncstream*);\r\n#endif // _HAS_CXX20\r\n};\r\n\r\ntemplate <class CharT>\r\nstruct test_forward_declarations {\r\n    static void test_forward_declaration(allocator<CharT>*);\r\n\r\n    static void test_forward_declaration(char_traits<CharT>*);\r\n    static void test_forward_declaration(istreambuf_iterator<CharT>*);\r\n    static void test_forward_declaration(ostreambuf_iterator<CharT>*);\r\n\r\n    static void test_forward_declaration(basic_ios<CharT>*);\r\n\r\n    static void test_forward_declaration(basic_streambuf<CharT>*);\r\n    static void test_forward_declaration(basic_istream<CharT>*);\r\n    static void test_forward_declaration(basic_ostream<CharT>*);\r\n    static void test_forward_declaration(basic_iostream<CharT>*);\r\n\r\n    static void test_forward_declaration(basic_stringbuf<CharT>*);\r\n    static void test_forward_declaration(basic_istringstream<CharT>*);\r\n    static void test_forward_declaration(basic_ostringstream<CharT>*);\r\n    static void test_forward_declaration(basic_stringstream<CharT>*);\r\n\r\n#if _HAS_CXX23\r\n    static void test_forward_declaration(basic_spanbuf<CharT>*);\r\n    static void test_forward_declaration(basic_ispanstream<CharT>*);\r\n    static void test_forward_declaration(basic_ospanstream<CharT>*);\r\n    static void test_forward_declaration(basic_spanstream<CharT>*);\r\n#endif // _HAS_CXX23\r\n\r\n    static void test_forward_declaration(basic_filebuf<CharT>*);\r\n    static void test_forward_declaration(basic_ifstream<CharT>*);\r\n    static void test_forward_declaration(basic_ofstream<CharT>*);\r\n    static void test_forward_declaration(basic_fstream<CharT>*);\r\n\r\n#if _HAS_CXX20\r\n    static void test_forward_declaration(basic_syncbuf<CharT>*);\r\n    static void test_forward_declaration(basic_osyncstream<CharT>*);\r\n#endif // _HAS_CXX20\r\n};\r\n\r\ntest_aliases aliases;\r\ntest_forward_declarations<char> forward_declarations_char;\r\ntest_forward_declarations<wchar_t> forward_declarations_wchar_t;\r\n"
  },
  {
    "path": "tests/std/tests/P0448R4_spanstream/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0448R4_spanstream/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <ios>\r\n#include <limits>\r\n#include <list>\r\n#include <ranges>\r\n#include <span>\r\n#include <spanstream>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class CharT>\r\nconstexpr auto input_ptr = \"1 2 3 4 5\";\r\ntemplate <>\r\ninline constexpr auto input_ptr<wchar_t> = L\"1 2 3 4 5\";\r\n\r\ntemplate <class CharT>\r\nconstexpr auto input_view = \"1 2 3 4 5\"sv;\r\ntemplate <>\r\ninline constexpr auto input_view<wchar_t> = L\"1 2 3 4 5\"sv;\r\n\r\ntemplate <class CharT>\r\nconstexpr array input_std_array{'1', ' ', '2', ' ', '3', ' ', '4', ' ', '5'};\r\ntemplate <>\r\ninline constexpr array input_std_array<wchar_t>{L'1', L' ', L'2', L' ', L'3', L' ', L'4', L' ', L'5'};\r\n\r\ntemplate <class CharT>\r\nlist<CharT> li{};\r\n// Neither sized_range nor contiguous_range.\r\ntemplate <class CharT>\r\nstruct SpecialRange {\r\n    auto begin() {\r\n        return std::begin(li<CharT>);\r\n    }\r\n    auto end() {\r\n        return std::end(li<CharT>);\r\n    }\r\n    operator span<const CharT>() const {\r\n        return span<const CharT>(input_view<CharT>);\r\n    }\r\n};\r\ntemplate <class CharT>\r\nconstexpr bool ranges::enable_borrowed_range<SpecialRange<CharT>> = true;\r\n\r\nstatic_assert(!ranges::sized_range<SpecialRange<char>>);\r\nstatic_assert(!ranges::contiguous_range<SpecialRange<char>>);\r\nstatic_assert(ranges::borrowed_range<SpecialRange<char>>);\r\n\r\ntemplate <class Spanbuf>\r\nclass basic_test_buf : public Spanbuf {\r\npublic:\r\n    using Spanbuf::Spanbuf;\r\n\r\n    using Spanbuf::eback;\r\n    using Spanbuf::egptr;\r\n    using Spanbuf::epptr;\r\n    using Spanbuf::gptr;\r\n    using Spanbuf::pbase;\r\n    using Spanbuf::pptr;\r\n\r\n    using Spanbuf::setp;\r\n\r\n    using Spanbuf::seekoff;\r\n    using Spanbuf::seekpos;\r\n    using Spanbuf::setbuf;\r\n};\r\n\r\ntemplate <class CharT>\r\nvoid test_spanbuf() {\r\n    using test_buf = basic_test_buf<basic_spanbuf<CharT>>;\r\n    { // construction\r\n        CharT buffer[10];\r\n        const test_buf default_constructed{};\r\n        assert(default_constructed.span().data() == nullptr);\r\n        assert(default_constructed.eback() == nullptr);\r\n        assert(default_constructed.gptr() == nullptr);\r\n        assert(default_constructed.egptr() == nullptr);\r\n        assert(default_constructed.pbase() == nullptr);\r\n        assert(default_constructed.pptr() == nullptr);\r\n        assert(default_constructed.epptr() == nullptr);\r\n\r\n        const test_buf mode_constructed{ios_base::in};\r\n        assert(mode_constructed.span().data() == nullptr);\r\n        assert(mode_constructed.eback() == nullptr);\r\n        assert(mode_constructed.gptr() == nullptr);\r\n        assert(mode_constructed.egptr() == nullptr);\r\n        assert(mode_constructed.pbase() == nullptr);\r\n        assert(mode_constructed.pptr() == nullptr);\r\n        assert(mode_constructed.epptr() == nullptr);\r\n\r\n        test_buf span_constructed{span<CharT>{buffer}};\r\n        assert(span_constructed.span().data() == buffer);\r\n        assert(span_constructed.eback() == buffer);\r\n        assert(span_constructed.gptr() == buffer);\r\n        assert(span_constructed.egptr() == end(buffer));\r\n        assert(span_constructed.pbase() == buffer);\r\n        assert(span_constructed.pptr() == buffer);\r\n        assert(span_constructed.epptr() == end(buffer));\r\n\r\n        const test_buf span_mode_in_constructed{span<CharT>{buffer}, ios_base::in};\r\n        assert(span_mode_in_constructed.span().data() == buffer);\r\n        assert(span_mode_in_constructed.eback() == buffer);\r\n        assert(span_mode_in_constructed.gptr() == buffer);\r\n        assert(span_mode_in_constructed.egptr() == end(buffer));\r\n        assert(span_mode_in_constructed.pbase() == nullptr);\r\n        assert(span_mode_in_constructed.pptr() == nullptr);\r\n        assert(span_mode_in_constructed.epptr() == nullptr);\r\n\r\n        const test_buf span_mode_in_ate_constructed{span<CharT>{buffer}, ios_base::in | ios_base::ate};\r\n        assert(span_mode_in_ate_constructed.span().data() == buffer);\r\n        assert(span_mode_in_ate_constructed.eback() == buffer);\r\n        assert(span_mode_in_ate_constructed.gptr() == buffer);\r\n        assert(span_mode_in_ate_constructed.egptr() == end(buffer));\r\n        assert(span_mode_in_ate_constructed.pbase() == nullptr);\r\n        assert(span_mode_in_ate_constructed.pptr() == nullptr);\r\n        assert(span_mode_in_ate_constructed.epptr() == nullptr);\r\n\r\n        const test_buf span_mode_out_constructed{span<CharT>{buffer}, ios_base::out};\r\n        assert(span_mode_out_constructed.span().data() == buffer);\r\n        assert(span_mode_out_constructed.eback() == nullptr);\r\n        assert(span_mode_out_constructed.gptr() == nullptr);\r\n        assert(span_mode_out_constructed.egptr() == nullptr);\r\n        assert(span_mode_out_constructed.pbase() == buffer);\r\n        assert(span_mode_out_constructed.pptr() == buffer);\r\n        assert(span_mode_out_constructed.epptr() == end(buffer));\r\n\r\n        const test_buf span_mode_out_ate_constructed{span<CharT>{buffer}, ios_base::out | ios_base::ate};\r\n        assert(span_mode_out_ate_constructed.span().data() == buffer);\r\n        assert(span_mode_out_ate_constructed.eback() == nullptr);\r\n        assert(span_mode_out_ate_constructed.gptr() == nullptr);\r\n        assert(span_mode_out_ate_constructed.egptr() == nullptr);\r\n        assert(span_mode_out_ate_constructed.pbase() == buffer);\r\n        assert(span_mode_out_ate_constructed.pptr() == end(buffer));\r\n        assert(span_mode_out_ate_constructed.epptr() == end(buffer));\r\n\r\n        const test_buf span_mode_unknown_constructed{span<CharT>{buffer}, 0};\r\n        assert(span_mode_unknown_constructed.span().data() == buffer);\r\n        assert(span_mode_unknown_constructed.eback() == nullptr);\r\n        assert(span_mode_unknown_constructed.gptr() == nullptr);\r\n        assert(span_mode_unknown_constructed.egptr() == nullptr);\r\n        assert(span_mode_unknown_constructed.pbase() == nullptr);\r\n        assert(span_mode_unknown_constructed.pptr() == nullptr);\r\n        assert(span_mode_unknown_constructed.epptr() == nullptr);\r\n\r\n        test_buf move_constructed{move(span_constructed)};\r\n        assert(move_constructed.span().data() == buffer);\r\n        assert(move_constructed.eback() == buffer);\r\n        assert(move_constructed.gptr() == buffer);\r\n        assert(move_constructed.egptr() == end(buffer));\r\n        assert(move_constructed.pbase() == buffer);\r\n        assert(move_constructed.pptr() == buffer);\r\n        assert(move_constructed.epptr() == end(buffer));\r\n        assert(span_constructed.span().data() == nullptr);\r\n        assert(span_constructed.eback() == nullptr);\r\n        assert(span_constructed.gptr() == nullptr);\r\n        assert(span_constructed.egptr() == nullptr);\r\n        assert(span_constructed.pbase() == nullptr);\r\n        assert(span_constructed.pptr() == nullptr);\r\n        assert(span_constructed.epptr() == nullptr);\r\n\r\n        test_buf move_assigned;\r\n        move_assigned = move(move_constructed);\r\n        assert(move_assigned.span().data() == buffer);\r\n        assert(move_assigned.eback() == buffer);\r\n        assert(move_assigned.gptr() == buffer);\r\n        assert(move_assigned.egptr() == end(buffer));\r\n        assert(move_assigned.pbase() == buffer);\r\n        assert(move_assigned.pptr() == buffer);\r\n        assert(move_assigned.epptr() == end(buffer));\r\n        assert(move_constructed.span().data() == nullptr);\r\n        assert(move_constructed.eback() == nullptr);\r\n        assert(move_constructed.gptr() == nullptr);\r\n        assert(move_constructed.egptr() == nullptr);\r\n        assert(move_constructed.pbase() == nullptr);\r\n        assert(move_constructed.pptr() == nullptr);\r\n        assert(move_constructed.epptr() == nullptr);\r\n    }\r\n\r\n    { // swap\r\n        CharT buffer1[10];\r\n        CharT buffer2[20];\r\n        test_buf first{span<CharT>{buffer1}};\r\n        test_buf second{span<CharT>{buffer2}};\r\n        assert(first.span().data() == buffer1);\r\n        assert(second.span().data() == buffer2);\r\n\r\n        first.swap(second);\r\n        assert(first.span().data() == buffer2);\r\n        assert(second.span().data() == buffer1);\r\n\r\n        swap(first, second);\r\n        assert(first.span().data() == buffer1);\r\n        assert(second.span().data() == buffer2);\r\n    }\r\n\r\n    { // span, span, span, span\r\n        CharT buffer1[10];\r\n        test_buf input_buffer{span<CharT>{buffer1}, ios_base::in};\r\n        assert(input_buffer.span().data() == buffer1);\r\n        assert(input_buffer.span().size() == size(buffer1));\r\n\r\n        test_buf output_buffer{span<CharT>{buffer1}, ios_base::out};\r\n        assert(output_buffer.span().data() == buffer1);\r\n        assert(output_buffer.span().size() == 0); // counts the written characters\r\n\r\n        // Manually move the written pointer\r\n        output_buffer.setp(buffer1, buffer1 + 5, end(buffer1));\r\n        assert(output_buffer.span().data() == buffer1);\r\n        assert(output_buffer.span().size() == 5);\r\n\r\n        CharT buffer2[10];\r\n        input_buffer.span(span<CharT>{buffer2});\r\n        assert(input_buffer.span().data() == buffer2);\r\n        assert(input_buffer.span().size() == size(buffer2));\r\n\r\n        output_buffer.span(span<CharT>{buffer2});\r\n        assert(output_buffer.span().data() == buffer2);\r\n        assert(output_buffer.span().size() == 0);\r\n\r\n        test_buf hungry_buffer{span<CharT>{buffer1}, ios_base::out | ios_base::ate};\r\n        assert(hungry_buffer.span().data() == buffer1);\r\n        assert(hungry_buffer.span().size() == size(buffer1));\r\n\r\n        hungry_buffer.span(span<CharT>{buffer2});\r\n        assert(hungry_buffer.span().data() == buffer2);\r\n        assert(hungry_buffer.span().size() == size(buffer2));\r\n    }\r\n\r\n    { // seekoff ios_base::beg\r\n        CharT buffer[10];\r\n        test_buf input_buffer{span<CharT>{buffer}, ios_base::in};\r\n        test_buf output_buffer{span<CharT>{buffer}, ios_base::out};\r\n\r\n        auto result = input_buffer.seekoff(0, ios_base::beg, ios_base::in);\r\n        assert(result == 0);\r\n\r\n        // pptr not set but off is 0\r\n        result = input_buffer.seekoff(0, ios_base::beg, ios_base::out);\r\n        assert(result == 0);\r\n\r\n        // pptr not set and off != 0 -> fail\r\n        result = input_buffer.seekoff(1, ios_base::beg, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // gptr not set but off is 0\r\n        result = output_buffer.seekoff(0, ios_base::beg, ios_base::in);\r\n        assert(result == 0);\r\n\r\n        // gptr not set and off != 0 -> fail\r\n        result = output_buffer.seekoff(1, ios_base::beg, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        // negative off -> fail\r\n        result = input_buffer.seekoff(-1, ios_base::beg, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        // negative off -> fail\r\n        result = output_buffer.seekoff(-1, ios_base::beg, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // off larger than buf -> fail\r\n        result = input_buffer.seekoff(20, ios_base::beg, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        // off larger than buf -> fail\r\n        result = output_buffer.seekoff(20, ios_base::beg, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // passes\r\n        result = input_buffer.seekoff(5, ios_base::beg, ios_base::in);\r\n        assert(result == 5);\r\n\r\n        result = output_buffer.seekoff(5, ios_base::beg, ios_base::out);\r\n        assert(result == 5);\r\n\r\n        // always from front\r\n        result = input_buffer.seekoff(7, ios_base::beg, ios_base::in);\r\n        assert(result == 7);\r\n\r\n        result = output_buffer.seekoff(7, ios_base::beg, ios_base::out);\r\n        assert(result == 7);\r\n    }\r\n\r\n    { // seekoff ios_base::end\r\n        CharT buffer[10];\r\n        test_buf input_buffer{span<CharT>{buffer}, ios_base::in};\r\n        // all fine we move to end of stream\r\n        auto result = input_buffer.seekoff(0, ios_base::end, ios_base::in);\r\n        assert(result == 10);\r\n\r\n        // pptr not set but off is == 0\r\n        result = input_buffer.seekoff(-10, ios_base::end, ios_base::out);\r\n        assert(result == 0);\r\n\r\n        // pptr not set and off != 0 -> fail\r\n        result = input_buffer.seekoff(0, ios_base::end, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // negative off -> fail\r\n        result = input_buffer.seekoff(-20, ios_base::end, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        // off beyond end of buffer -> fail\r\n        result = input_buffer.seekoff(1, ios_base::end, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        // passes and moves to buffer size - off\r\n        result = input_buffer.seekoff(-5, ios_base::end, ios_base::in);\r\n        assert(result == 5);\r\n\r\n        // always from front\r\n        result = input_buffer.seekoff(-7, ios_base::end, ios_base::in);\r\n        assert(result == 3);\r\n\r\n        // integer overflow due to large off\r\n        result = input_buffer.seekoff(numeric_limits<long long>::max(), ios_base::end, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        test_buf output_buffer{span<CharT>{buffer}, ios_base::out};\r\n        // gptr not set but off is 0\r\n        result = output_buffer.seekoff(0, ios_base::end, ios_base::in);\r\n        assert(result == 0);\r\n\r\n        // newoff is negative -> fail\r\n        result = output_buffer.seekoff(-10, ios_base::end, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // pptr not set but off == 0\r\n        result = output_buffer.seekoff(0, ios_base::end, ios_base::out);\r\n        assert(result == 0);\r\n\r\n        // all fine we stay at end of stream\r\n        result = output_buffer.seekoff(0, ios_base::end, ios_base::in);\r\n        assert(result == 0);\r\n\r\n        // gptr not set and off != 0 -> fail\r\n        result = output_buffer.seekoff(1, ios_base::end, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        // off + buffer size is negative -> fail\r\n        result = output_buffer.seekoff(-20, ios_base::end, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // off larger than buffer -> fail\r\n        result = output_buffer.seekoff(11, ios_base::end, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // passes and moves to buffer size - off\r\n        result = output_buffer.seekoff(5, ios_base::end, ios_base::out);\r\n        assert(result == 5);\r\n\r\n        // passes we are still below buffer size\r\n        result = output_buffer.seekoff(3, ios_base::end, ios_base::out);\r\n        assert(result == 8);\r\n\r\n        // moves beyond buffer size -> fails\r\n        result = output_buffer.seekoff(3, ios_base::end, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // integer overflow due to large off\r\n        result = output_buffer.seekoff(numeric_limits<long long>::max(), ios_base::end, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        test_buf inout_buffer{span<CharT>{buffer}, ios_base::in | ios_base::out};\r\n        // all fine we move to end of stream\r\n        result = inout_buffer.seekoff(0, ios_base::end, ios_base::in);\r\n        assert(result == 10);\r\n\r\n        // we move to front of the buffer\r\n        result = inout_buffer.seekoff(-10, ios_base::end, ios_base::out);\r\n        assert(result == 0);\r\n\r\n        // we move to end of buffer\r\n        result = inout_buffer.seekoff(0, ios_base::end, ios_base::out);\r\n        assert(result == 10);\r\n\r\n        // negative off -> fail\r\n        result = inout_buffer.seekoff(-20, ios_base::end, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        // off beyond end of buffer -> fail\r\n        result = inout_buffer.seekoff(1, ios_base::end, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        // passes and moves to buffer size - off\r\n        result = inout_buffer.seekoff(-5, ios_base::end, ios_base::in);\r\n        assert(result == 5);\r\n\r\n        // always from front\r\n        result = inout_buffer.seekoff(-7, ios_base::end, ios_base::in);\r\n        assert(result == 3);\r\n\r\n        // integer overflow due to large off\r\n        result = inout_buffer.seekoff(numeric_limits<long long>::max(), ios_base::end, ios_base::in);\r\n        assert(result == -1);\r\n    }\r\n\r\n    { // seekoff ios_base::cur\r\n        CharT buffer[10];\r\n        test_buf input_buffer{span<CharT>{buffer}, ios_base::in};\r\n\r\n        // no mode set -> fail\r\n        auto result = input_buffer.seekoff(0, ios_base::cur, 0);\r\n        assert(result == -1);\r\n\r\n        // both in and out modes set -> fail\r\n        result = input_buffer.seekoff(0, ios_base::cur, ios_base::in | ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // pptr not set and off is != 0 -> fail\r\n        result = input_buffer.seekoff(1, ios_base::cur, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // off larger than buffer size -> fail\r\n        result = input_buffer.seekoff(20, ios_base::cur, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // off negative -> fail\r\n        result = input_buffer.seekoff(-1, ios_base::cur, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // pptr not set but off is == 0\r\n        result = input_buffer.seekoff(0, ios_base::cur, ios_base::out);\r\n        assert(result == 0);\r\n\r\n        // passes and sets position\r\n        result = input_buffer.seekoff(3, ios_base::cur, ios_base::in);\r\n        assert(result == 3);\r\n\r\n        // negative off moves back\r\n        result = input_buffer.seekoff(-2, ios_base::cur, ios_base::in);\r\n        assert(result == 1);\r\n\r\n        // off + current position is beyond buffer size -> fail\r\n        result = input_buffer.seekoff(10, ios_base::cur, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        test_buf output_buffer{span<CharT>{buffer}, ios_base::out};\r\n        // no mode set -> fail\r\n        result = output_buffer.seekoff(0, ios_base::cur, 0);\r\n        assert(result == -1);\r\n\r\n        // both in and out modes set -> fail\r\n        result = output_buffer.seekoff(0, ios_base::cur, ios_base::in | ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // gptr not set and off is != 0 -> fail\r\n        result = output_buffer.seekoff(1, ios_base::cur, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        // off larger than buffer size -> fail\r\n        result = output_buffer.seekoff(20, ios_base::cur, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // off negative -> fail\r\n        result = output_buffer.seekoff(-1, ios_base::cur, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // gptr not set but off is == 0\r\n        result = output_buffer.seekoff(0, ios_base::cur, ios_base::in);\r\n        assert(result == 0);\r\n\r\n        // passes and sets position\r\n        result = output_buffer.seekoff(3, ios_base::cur, ios_base::out);\r\n        assert(result == 3);\r\n\r\n        // negative off moves back\r\n        result = output_buffer.seekoff(-2, ios_base::cur, ios_base::out);\r\n        assert(result == 1);\r\n\r\n        // off + current position is beyond buffer size -> fail\r\n        result = output_buffer.seekoff(10, ios_base::cur, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        test_buf inout_buffer{span<CharT>{buffer}, ios_base::in | ios_base::out};\r\n        // no mode set -> fail\r\n        result = inout_buffer.seekoff(0, ios_base::cur, 0);\r\n        assert(result == -1);\r\n\r\n        // both in and out modes set -> fail\r\n        result = inout_buffer.seekoff(0, ios_base::cur, ios_base::in | ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // off larger than buffer size -> fail\r\n        result = inout_buffer.seekoff(20, ios_base::cur, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // off negative -> fail\r\n        result = inout_buffer.seekoff(-1, ios_base::cur, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // Moves input sequence to position 3\r\n        result = inout_buffer.seekoff(3, ios_base::cur, ios_base::in);\r\n        assert(result == 3);\r\n\r\n        // Moves output sequence to position 3\r\n        result = inout_buffer.seekoff(3, ios_base::cur, ios_base::out);\r\n        assert(result == 3);\r\n\r\n        // negative off moves back\r\n        result = inout_buffer.seekoff(-2, ios_base::cur, ios_base::in);\r\n        assert(result == 1);\r\n\r\n        // negative off moves back\r\n        result = inout_buffer.seekoff(-2, ios_base::cur, ios_base::out);\r\n        assert(result == 1);\r\n\r\n        // off + current position is beyond buffer size -> fail\r\n        result = inout_buffer.seekoff(10, ios_base::cur, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        // off + current position is beyond buffer size -> fail\r\n        result = inout_buffer.seekoff(10, ios_base::cur, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // off + current position is before buffer size -> fail\r\n        result = inout_buffer.seekoff(-2, ios_base::cur, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        // off + current position is before buffer size -> fail\r\n        result = inout_buffer.seekoff(-2, ios_base::cur, ios_base::out);\r\n        assert(result == -1);\r\n    }\r\n\r\n    { // seekpos (same as seekoff with ios_base::beg)\r\n        CharT buffer[10];\r\n        test_buf input_buffer{span<CharT>{buffer}, ios_base::in};\r\n        test_buf output_buffer{span<CharT>{buffer}, ios_base::out};\r\n\r\n        auto result = input_buffer.seekpos(0, ios_base::in);\r\n        assert(result == 0);\r\n\r\n        // pptr not set but off is 0\r\n        result = input_buffer.seekpos(0, ios_base::out);\r\n        assert(result == 0);\r\n\r\n        // pptr not set and off != 0 -> fail\r\n        result = input_buffer.seekpos(1, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // gptr not set but off is 0\r\n        result = output_buffer.seekpos(0, ios_base::in);\r\n        assert(result == 0);\r\n\r\n        // gptr not set and off != 0 -> fail\r\n        result = output_buffer.seekpos(1, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        // negative off -> fail\r\n        result = input_buffer.seekpos(-1, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        // negative off -> fail\r\n        result = output_buffer.seekpos(-1, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // off larger than buf -> fail\r\n        result = input_buffer.seekpos(20, ios_base::in);\r\n        assert(result == -1);\r\n\r\n        // off larger than buf -> fail\r\n        result = output_buffer.seekpos(20, ios_base::out);\r\n        assert(result == -1);\r\n\r\n        // passes\r\n        result = input_buffer.seekpos(5, ios_base::in);\r\n        assert(result == 5);\r\n\r\n        result = output_buffer.seekpos(5, ios_base::out);\r\n        assert(result == 5);\r\n\r\n        // always from front\r\n        result = input_buffer.seekpos(7, ios_base::in);\r\n        assert(result == 7);\r\n\r\n        result = output_buffer.seekpos(7, ios_base::out);\r\n        assert(result == 7);\r\n    }\r\n\r\n    { // setbuf\r\n        CharT buffer1[10];\r\n        CharT buffer2[30];\r\n        test_buf input_buffer{span<CharT>{buffer1}, ios_base::in};\r\n        assert(input_buffer.span().data() == buffer1);\r\n        assert(input_buffer.span().size() == size(buffer1));\r\n\r\n        auto result = input_buffer.setbuf(buffer2, 5);\r\n        assert(input_buffer.span().data() == buffer2);\r\n        assert(input_buffer.span().size() == 5);\r\n        assert(result == addressof(input_buffer));\r\n\r\n        test_buf output_buffer{span<CharT>{buffer1}, ios_base::out};\r\n        assert(output_buffer.span().data() == buffer1);\r\n        assert(output_buffer.span().size() == 0);\r\n\r\n        result = output_buffer.setbuf(buffer2, 5);\r\n        assert(output_buffer.span().data() == buffer2);\r\n        assert(output_buffer.span().size() == 0);\r\n        assert(result == addressof(output_buffer));\r\n\r\n        test_buf hungry_buffer{span<CharT>{buffer1}, ios_base::out | ios_base::ate};\r\n        assert(hungry_buffer.span().data() == buffer1);\r\n        assert(hungry_buffer.span().size() == size(buffer1));\r\n\r\n        result = hungry_buffer.setbuf(buffer2, 5);\r\n        assert(hungry_buffer.span().data() == buffer2);\r\n        assert(hungry_buffer.span().size() == 5);\r\n        assert(result == addressof(hungry_buffer));\r\n    }\r\n}\r\n\r\ntemplate <class CharT>\r\nvoid test_ispanstream() {\r\n    using test_buf = basic_test_buf<basic_spanbuf<CharT>>;\r\n    { // construction\r\n        CharT buffer[10];\r\n        basic_ispanstream<CharT> span_constructed{span<CharT>{buffer}};\r\n        assert(span_constructed.span().data() == buffer);\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->eback() == buffer);\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->gptr() == buffer);\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->egptr() == end(buffer));\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->pbase() == nullptr);\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->pptr() == nullptr);\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->epptr() == nullptr);\r\n\r\n        basic_ispanstream<CharT> span_mode_constructed{span<CharT>{buffer}, ios_base::out};\r\n        assert(span_mode_constructed.span().data() == buffer);\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->eback() == buffer);\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->gptr() == buffer);\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->egptr() == end(buffer));\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->pbase() == buffer);\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->pptr() == buffer);\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->epptr() == end(buffer));\r\n\r\n        auto input_range = input_view<CharT>;\r\n        basic_ispanstream<CharT> range_constructed{input_view<CharT>};\r\n        assert(range_constructed.span().data() == input_range.data());\r\n        assert(static_cast<test_buf*>(range_constructed.rdbuf())->eback() == input_range.data());\r\n        assert(static_cast<test_buf*>(range_constructed.rdbuf())->gptr() == input_range.data());\r\n        assert(static_cast<test_buf*>(range_constructed.rdbuf())->egptr() == input_range.data() + input_range.size());\r\n        assert(static_cast<test_buf*>(range_constructed.rdbuf())->pbase() == nullptr);\r\n        assert(static_cast<test_buf*>(range_constructed.rdbuf())->pptr() == nullptr);\r\n        assert(static_cast<test_buf*>(range_constructed.rdbuf())->epptr() == nullptr);\r\n    }\r\n\r\n    { // GH-4879 <spanstream>: The span constructed by basic_ispanstream's range constructor may be ill-formed\r\n        const CharT buffer[17]{};\r\n        span<const CharT> span_const_elem{buffer};\r\n        basic_ispanstream<CharT> span_const_elem_constructed{span_const_elem};\r\n        assert(span_const_elem_constructed.span().data() == buffer);\r\n        assert(static_cast<test_buf*>(span_const_elem_constructed.rdbuf())->eback() == buffer);\r\n        assert(static_cast<test_buf*>(span_const_elem_constructed.rdbuf())->gptr() == buffer);\r\n        assert(static_cast<test_buf*>(span_const_elem_constructed.rdbuf())->egptr() == end(buffer));\r\n        assert(static_cast<test_buf*>(span_const_elem_constructed.rdbuf())->pbase() == nullptr);\r\n        assert(static_cast<test_buf*>(span_const_elem_constructed.rdbuf())->pptr() == nullptr);\r\n        assert(static_cast<test_buf*>(span_const_elem_constructed.rdbuf())->epptr() == nullptr);\r\n\r\n        SpecialRange<CharT> special_range{};\r\n        auto rr = static_cast<span<const CharT>>(special_range);\r\n        basic_ispanstream<CharT> special_range_constructed{special_range};\r\n        assert(special_range_constructed.span().data() == rr.data());\r\n        assert(static_cast<test_buf*>(special_range_constructed.rdbuf())->eback() == rr.data());\r\n        assert(static_cast<test_buf*>(special_range_constructed.rdbuf())->gptr() == rr.data());\r\n        assert(static_cast<test_buf*>(special_range_constructed.rdbuf())->egptr() == rr.data() + rr.size());\r\n        assert(static_cast<test_buf*>(special_range_constructed.rdbuf())->pbase() == nullptr);\r\n        assert(static_cast<test_buf*>(special_range_constructed.rdbuf())->pptr() == nullptr);\r\n        assert(static_cast<test_buf*>(special_range_constructed.rdbuf())->epptr() == nullptr);\r\n    }\r\n\r\n    { // GH-5308: <spanstream>: Constructing ispanstream from string no longer compiles since VS 17.13\r\n        basic_string<CharT> str(42, static_cast<CharT>('*'));\r\n        basic_ispanstream<CharT> from_string_constructed{str};\r\n        assert(from_string_constructed.span().data() == str.data());\r\n        assert(static_cast<test_buf*>(from_string_constructed.rdbuf())->eback() == str.data());\r\n        assert(static_cast<test_buf*>(from_string_constructed.rdbuf())->gptr() == str.data());\r\n        assert(static_cast<test_buf*>(from_string_constructed.rdbuf())->egptr() == str.data() + str.size());\r\n        assert(static_cast<test_buf*>(from_string_constructed.rdbuf())->pbase() == nullptr);\r\n        assert(static_cast<test_buf*>(from_string_constructed.rdbuf())->pptr() == nullptr);\r\n        assert(static_cast<test_buf*>(from_string_constructed.rdbuf())->epptr() == nullptr);\r\n\r\n        basic_ispanstream<CharT> from_string_reset{span<CharT>{}};\r\n        from_string_reset.span(str);\r\n        assert(from_string_reset.span().data() == str.data());\r\n        assert(static_cast<test_buf*>(from_string_reset.rdbuf())->eback() == str.data());\r\n        assert(static_cast<test_buf*>(from_string_reset.rdbuf())->gptr() == str.data());\r\n        assert(static_cast<test_buf*>(from_string_reset.rdbuf())->egptr() == str.data() + str.size());\r\n        assert(static_cast<test_buf*>(from_string_reset.rdbuf())->pbase() == nullptr);\r\n        assert(static_cast<test_buf*>(from_string_reset.rdbuf())->pptr() == nullptr);\r\n        assert(static_cast<test_buf*>(from_string_reset.rdbuf())->epptr() == nullptr);\r\n    }\r\n\r\n    { // span\r\n        CharT buffer[10];\r\n        basic_ispanstream<CharT> is{span<CharT>{buffer}};\r\n        assert(is.span().data() == buffer);\r\n        assert(is.span().size() == size(buffer));\r\n\r\n        // ensure the underlying span is *not* mutable\r\n        static_assert(is_same_v<decltype(is.span()), span<const CharT>>);\r\n        static_assert(is_same_v<decltype(as_const(is).span()), span<const CharT>>);\r\n\r\n        CharT other_buffer[20];\r\n        is.span(span<CharT>{other_buffer});\r\n        assert(is.span().data() == other_buffer);\r\n        assert(is.span().size() == size(other_buffer));\r\n\r\n        auto input_range = input_view<CharT>;\r\n        is.span(input_view<CharT>);\r\n        assert(is.span().data() == input_range.data());\r\n        assert(is.span().size() == input_range.size());\r\n\r\n        // also test GH-4879 for basic_ispanstream::span(ROS&&)\r\n        is.span(span<const CharT>{other_buffer});\r\n        assert(is.span().data() == other_buffer);\r\n        assert(is.span().size() == size(other_buffer));\r\n        is.span(SpecialRange<CharT>{});\r\n        assert(is.span().data() == input_range.data());\r\n        assert(is.span().size() == input_range.size());\r\n\r\n        if constexpr (is_same_v<CharT, char>) {\r\n            const char const_buffer[] = \"1 2 3 4 5\";\r\n            basic_ispanstream<CharT> is_const_buffer{span<const CharT>{const_buffer}};\r\n            int read = 0;\r\n            for (int expected = 1; expected <= 5; ++expected) {\r\n                assert(is_const_buffer.good());\r\n                is_const_buffer >> read;\r\n                assert(read == expected);\r\n            }\r\n        }\r\n    }\r\n\r\n    { // swap\r\n        CharT buffer1[10];\r\n        CharT buffer2[20];\r\n        basic_ispanstream<CharT> first{span<CharT>{buffer1}};\r\n        basic_ispanstream<CharT> second{span<CharT>{buffer2}, ios_base::out};\r\n        assert(first.span().data() == buffer1);\r\n        assert(second.span().data() == buffer2);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->eback() == buffer1);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->gptr() == buffer1);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->egptr() == end(buffer1));\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pbase() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pptr() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->epptr() == nullptr);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->eback() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->gptr() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->egptr() == end(buffer2));\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pbase() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pptr() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->epptr() == end(buffer2));\r\n\r\n        first.swap(second);\r\n        assert(first.span().data() == buffer2);\r\n        assert(second.span().data() == buffer1);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->eback() == buffer1);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->gptr() == buffer1);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->egptr() == end(buffer1));\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pbase() == nullptr);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pptr() == nullptr);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->epptr() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->eback() == buffer2);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->gptr() == buffer2);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->egptr() == end(buffer2));\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pbase() == buffer2);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pptr() == buffer2);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->epptr() == end(buffer2));\r\n\r\n        swap(first, second);\r\n        assert(first.span().data() == buffer1);\r\n        assert(second.span().data() == buffer2);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->eback() == buffer1);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->gptr() == buffer1);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->egptr() == end(buffer1));\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pbase() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pptr() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->epptr() == nullptr);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->eback() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->gptr() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->egptr() == end(buffer2));\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pbase() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pptr() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->epptr() == end(buffer2));\r\n    }\r\n\r\n    // rdbuf already tested above\r\n\r\n    { // read from stream\r\n        basic_ispanstream<CharT> is{span<const CharT>{input_ptr<CharT>, 9}};\r\n        int read = 0;\r\n        for (int expected = 1; expected <= 5; ++expected) {\r\n            assert(is.good());\r\n            is >> read;\r\n            assert(read == expected);\r\n        }\r\n        assert(!is.good());\r\n        assert(!is.fail());\r\n        assert(!is.bad());\r\n        is >> read;\r\n\r\n        assert(!is.good());\r\n        assert(is.fail());\r\n        assert(!is.bad());\r\n    }\r\n}\r\n\r\ntemplate <class CharT>\r\nvoid test_ospanstream() {\r\n    using test_buf = basic_test_buf<basic_spanbuf<CharT>>;\r\n    { // construction\r\n        CharT buffer[10];\r\n        basic_ospanstream<CharT> span_constructed{span<CharT>{buffer}};\r\n        assert(span_constructed.span().data() == buffer);\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->eback() == nullptr);\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->gptr() == nullptr);\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->egptr() == nullptr);\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->pbase() == buffer);\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->pptr() == buffer);\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->epptr() == end(buffer));\r\n\r\n        basic_ospanstream<CharT> span_mode_constructed{span<CharT>{buffer}, ios_base::in};\r\n        assert(span_mode_constructed.span().data() == buffer);\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->eback() == buffer);\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->gptr() == buffer);\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->egptr() == end(buffer));\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->pbase() == buffer);\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->pptr() == buffer);\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->epptr() == end(buffer));\r\n    }\r\n\r\n    { // span\r\n        CharT buffer[10];\r\n        basic_ospanstream<CharT> os{span<CharT>{buffer}};\r\n        assert(os.span().data() == buffer);\r\n        assert(os.span().size() == 0);\r\n\r\n        // ensure the underlying span is mutable\r\n        static_assert(is_same_v<decltype(os.span()), span<CharT>>);\r\n        static_assert(is_same_v<decltype(as_const(os).span()), span<CharT>>);\r\n\r\n        CharT other_buffer[20];\r\n        os.span(span<CharT>{other_buffer});\r\n        assert(os.span().data() == other_buffer);\r\n        assert(os.span().size() == 0);\r\n    }\r\n\r\n    { // swap\r\n        CharT buffer1[10];\r\n        CharT buffer2[20];\r\n        basic_ospanstream<CharT> first{span<CharT>{buffer1}};\r\n        basic_ospanstream<CharT> second{span<CharT>{buffer2}, ios_base::in};\r\n        assert(first.span().data() == buffer1);\r\n        assert(second.span().data() == buffer2);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->eback() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->gptr() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->egptr() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pbase() == buffer1);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pptr() == buffer1);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->epptr() == end(buffer1));\r\n        assert(static_cast<test_buf*>(second.rdbuf())->eback() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->gptr() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->egptr() == end(buffer2));\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pbase() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pptr() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->epptr() == end(buffer2));\r\n\r\n        first.swap(second);\r\n        assert(first.span().data() == buffer2);\r\n        assert(second.span().data() == buffer1);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->eback() == nullptr);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->gptr() == nullptr);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->egptr() == nullptr);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pbase() == buffer1);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pptr() == buffer1);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->epptr() == end(buffer1));\r\n        assert(static_cast<test_buf*>(first.rdbuf())->eback() == buffer2);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->gptr() == buffer2);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->egptr() == end(buffer2));\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pbase() == buffer2);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pptr() == buffer2);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->epptr() == end(buffer2));\r\n\r\n        swap(first, second);\r\n        assert(first.span().data() == buffer1);\r\n        assert(second.span().data() == buffer2);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->eback() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->gptr() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->egptr() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pbase() == buffer1);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pptr() == buffer1);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->epptr() == end(buffer1));\r\n        assert(static_cast<test_buf*>(second.rdbuf())->eback() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->gptr() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->egptr() == end(buffer2));\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pbase() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pptr() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->epptr() == end(buffer2));\r\n    }\r\n\r\n    // rdbuf already tested above\r\n\r\n    { // write to stream with sufficient space\r\n        CharT output_buffer[30];\r\n        basic_ospanstream<CharT> os{span<CharT>{output_buffer}};\r\n\r\n        assert(os.good());\r\n        assert(!os.fail());\r\n        assert(!os.bad());\r\n        os << 10 << 20 << 30;\r\n        assert(os.good());\r\n        assert(!os.fail());\r\n        assert(!os.bad());\r\n\r\n        const auto expected = \"102030\"sv;\r\n        assert(os.span().size() == 6);\r\n        assert(equal(begin(os.span()), end(os.span()), begin(expected), end(expected)));\r\n        assert(os.span().data() == output_buffer);\r\n    }\r\n\r\n    { // write to stream with overflow\r\n        CharT output_buffer[30];\r\n        basic_ospanstream<CharT> os{span<CharT>{output_buffer}};\r\n\r\n        os << 10 << 20 << 30;\r\n        assert(os.good());\r\n        assert(!os.fail());\r\n        assert(!os.bad());\r\n        if constexpr (is_same_v<CharT, char>) {\r\n            os << \"hello world and a long string with more than 30 chars\";\r\n        } else {\r\n            os << L\"hello world and a long string with more than 30 chars\";\r\n        }\r\n        assert(!os.good());\r\n        assert(os.fail());\r\n        assert(os.bad());\r\n\r\n        const auto expected = \"102030hello world and a long s\"sv;\r\n        assert(os.span().size() == size(output_buffer));\r\n        assert(equal(begin(output_buffer), end(output_buffer), begin(expected), end(expected)));\r\n    }\r\n}\r\n\r\ntemplate <class CharT>\r\nvoid test_spanstream() {\r\n    using test_buf = basic_test_buf<basic_spanbuf<CharT>>;\r\n    { // construction\r\n        CharT buffer[10];\r\n        basic_spanstream<CharT> span_constructed{span<CharT>{buffer}};\r\n        assert(span_constructed.span().data() == buffer);\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->eback() == buffer);\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->gptr() == buffer);\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->egptr() == end(buffer));\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->pbase() == buffer);\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->pptr() == buffer);\r\n        assert(static_cast<test_buf*>(span_constructed.rdbuf())->epptr() == end(buffer));\r\n\r\n        basic_spanstream<CharT> span_mode_constructed{span<CharT>{buffer}, ios_base::in};\r\n        assert(span_mode_constructed.span().data() == buffer);\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->eback() == buffer);\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->gptr() == buffer);\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->egptr() == end(buffer));\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->pbase() == nullptr);\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->pptr() == nullptr);\r\n        assert(static_cast<test_buf*>(span_mode_constructed.rdbuf())->epptr() == nullptr);\r\n    }\r\n\r\n    { // span\r\n        CharT buffer[10];\r\n        basic_spanstream<CharT> s{span<CharT>{buffer}};\r\n        assert(s.span().data() == buffer);\r\n        assert(s.span().size() == 0);\r\n\r\n        // ensure the underlying span is mutable\r\n        static_assert(is_same_v<decltype(s.span()), span<CharT>>);\r\n        static_assert(is_same_v<decltype(as_const(s).span()), span<CharT>>);\r\n\r\n        CharT other_buffer[20];\r\n        s.span(span<CharT>{other_buffer});\r\n        assert(s.span().data() == other_buffer);\r\n        assert(s.span().size() == 0);\r\n    }\r\n\r\n    { // swap\r\n        CharT buffer1[10];\r\n        CharT buffer2[20];\r\n        basic_spanstream<CharT> first{span<CharT>{buffer1}, ios_base::out};\r\n        basic_spanstream<CharT> second{span<CharT>{buffer2}, ios_base::in};\r\n        assert(first.span().data() == buffer1);\r\n        assert(second.span().data() == buffer2);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->eback() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->gptr() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->egptr() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pbase() == buffer1);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pptr() == buffer1);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->epptr() == end(buffer1));\r\n        assert(static_cast<test_buf*>(second.rdbuf())->eback() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->gptr() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->egptr() == end(buffer2));\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pbase() == nullptr);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pptr() == nullptr);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->epptr() == nullptr);\r\n\r\n        first.swap(second);\r\n        assert(first.span().data() == buffer2);\r\n        assert(second.span().data() == buffer1);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->eback() == nullptr);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->gptr() == nullptr);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->egptr() == nullptr);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pbase() == buffer1);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pptr() == buffer1);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->epptr() == end(buffer1));\r\n        assert(static_cast<test_buf*>(first.rdbuf())->eback() == buffer2);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->gptr() == buffer2);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->egptr() == end(buffer2));\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pbase() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pptr() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->epptr() == nullptr);\r\n\r\n        swap(first, second);\r\n        assert(first.span().data() == buffer1);\r\n        assert(second.span().data() == buffer2);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->eback() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->gptr() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->egptr() == nullptr);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pbase() == buffer1);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->pptr() == buffer1);\r\n        assert(static_cast<test_buf*>(first.rdbuf())->epptr() == end(buffer1));\r\n        assert(static_cast<test_buf*>(second.rdbuf())->eback() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->gptr() == buffer2);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->egptr() == end(buffer2));\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pbase() == nullptr);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->pptr() == nullptr);\r\n        assert(static_cast<test_buf*>(second.rdbuf())->epptr() == nullptr);\r\n    }\r\n\r\n    // rdbuf already tested above\r\n\r\n    { // read from stream\r\n        auto arr = input_std_array<CharT>;\r\n        basic_spanstream<CharT> s{span<CharT>{arr.data(), 9}};\r\n        int read = 0;\r\n        for (int expected = 1; expected <= 5; ++expected) {\r\n            assert(s.good());\r\n            s >> read;\r\n            assert(read == expected);\r\n        }\r\n        assert(!s.good());\r\n        assert(!s.fail());\r\n        assert(!s.bad());\r\n        s >> read;\r\n\r\n        assert(!s.good());\r\n        assert(s.fail());\r\n        assert(!s.bad());\r\n    }\r\n\r\n    { // write to stream with sufficient space\r\n        CharT output_buffer[30];\r\n        basic_spanstream<CharT> s{span<CharT>{output_buffer}};\r\n\r\n        assert(s.good());\r\n        assert(!s.fail());\r\n        assert(!s.bad());\r\n        s << 10 << 20 << 30;\r\n        assert(s.good());\r\n        assert(!s.fail());\r\n        assert(!s.bad());\r\n\r\n        const auto expected = \"102030\"sv;\r\n        assert(s.span().size() == 6);\r\n        assert(equal(begin(s.span()), end(s.span()), begin(expected), end(expected)));\r\n        assert(s.span().data() == output_buffer);\r\n    }\r\n\r\n    { // write to stream with overflow\r\n        CharT output_buffer[30];\r\n        basic_spanstream<CharT> s{span<CharT>{output_buffer}};\r\n\r\n        s << 10 << 20 << 30;\r\n        assert(s.good());\r\n        assert(!s.fail());\r\n        assert(!s.bad());\r\n        if constexpr (is_same_v<CharT, char>) {\r\n            s << \"hello world and a long string with more than 30 chars\";\r\n        } else {\r\n            s << L\"hello world and a long string with more than 30 chars\";\r\n        }\r\n        assert(!s.good());\r\n        assert(s.fail());\r\n        assert(s.bad());\r\n\r\n        const auto expected = \"102030hello world and a long s\"sv;\r\n        assert(s.span().size() == size(output_buffer));\r\n        assert(equal(begin(output_buffer), end(output_buffer), begin(expected), end(expected)));\r\n    }\r\n}\r\n\r\ntemplate <class CharT>\r\nvoid run_test() {\r\n    test_spanbuf<CharT>();\r\n    test_ispanstream<CharT>();\r\n    test_ospanstream<CharT>();\r\n    test_spanstream<CharT>();\r\n}\r\n\r\nint main() {\r\n    run_test<char>();\r\n    run_test<wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0466R5_layout_compatibility_and_pointer_interconvertibility_traits/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0466R5_layout_compatibility_and_pointer_interconvertibility_traits/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n#include <cassert>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\n#define ASSERT(...) assert((__VA_ARGS__))\r\n\r\nstruct S { // Must be declared at namespace scope due to static data member\r\n    static int s1;\r\n    int v1;\r\n    int v2;\r\n};\r\n\r\nconstexpr bool test() {\r\n    // is_layout_compatible tests\r\n    {\r\n        struct S0 {\r\n            int v1;\r\n            int v2;\r\n        };\r\n\r\n        struct S1 {\r\n            S0 s1;\r\n            int v3;\r\n        };\r\n\r\n        struct S2 {\r\n            S0 s1;\r\n            int v2;\r\n        };\r\n\r\n        struct S3 {\r\n            S0 s1;\r\n            int v2;\r\n            int v3;\r\n        };\r\n\r\n        struct S4 {\r\n            int v1;\r\n\r\n        private:\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wunused-private-field\"\r\n#endif // defined(__clang__)\r\n            int v2;\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n        };\r\n\r\n        struct S5 {\r\n            int v1;\r\n\r\n        private:\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wunused-private-field\"\r\n#endif // defined(__clang__)\r\n            int v2;\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // defined(__clang__)\r\n        };\r\n\r\n        enum E1 { e1, e2, e3, e4 };\r\n        enum E2 : int { e5 };\r\n        enum E3 : unsigned int { e6, e7, e8 };\r\n        enum class E4 : unsigned int { no, yes };\r\n        enum class E5 { zero, fortytwo = 42 };\r\n\r\n        ASSERT(is_layout_compatible_v<int, int>);\r\n        ASSERT(is_layout_compatible_v<const void, void>);\r\n        ASSERT(is_layout_compatible_v<S1, volatile S2>);\r\n        ASSERT(is_layout_compatible_v<S1, S2>);\r\n        ASSERT(is_layout_compatible_v<S4, S4>);\r\n        ASSERT(is_layout_compatible_v<const volatile S4, S4>);\r\n        ASSERT(is_layout_compatible_v<E1, E2>);\r\n        ASSERT(is_layout_compatible_v<E3, E4>);\r\n        ASSERT(is_layout_compatible_v<E5, E1>);\r\n        ASSERT(is_layout_compatible_v<const E1, E2>);\r\n        ASSERT(is_layout_compatible_v<volatile E3, const E4>);\r\n        ASSERT(is_layout_compatible_v<int[], int[]>);\r\n        ASSERT(is_layout_compatible_v<int[3], int[3]>);\r\n        ASSERT(is_layout_compatible_v<const int[], int[]>);\r\n        ASSERT(is_layout_compatible_v<const int[3], int[3]>);\r\n        ASSERT(is_layout_compatible_v<int[], volatile int[]>);\r\n        ASSERT(!is_layout_compatible_v<int, char>);\r\n        ASSERT(!is_layout_compatible_v<int, void>);\r\n        ASSERT(!is_layout_compatible_v<S1, void>);\r\n        ASSERT(!is_layout_compatible_v<S1, S3>);\r\n        ASSERT(!is_layout_compatible_v<S4, S5>);\r\n        ASSERT(!is_layout_compatible_v<E1, void>);\r\n        ASSERT(!is_layout_compatible_v<E1, E3>);\r\n        ASSERT(!is_layout_compatible_v<E2, E4>);\r\n        ASSERT(!is_layout_compatible_v<int[], int[2]>);\r\n        ASSERT(!is_layout_compatible_v<int[3], int[1]>);\r\n    }\r\n\r\n    // is_pointer_interconvertible_base_of tests\r\n    {\r\n        class A {};\r\n        class B : public A {};\r\n        class C : public A {\r\n            int : 0;\r\n        };\r\n        class D : public C {};\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wmissing-declarations\"\r\n#else // ^^^ defined(__clang__) / !defined(__clang__) vvv\r\n#pragma warning(push)\r\n#pragma warning(disable : 4408) // C4408: anonymous union did not declare any data members\r\n#endif // ^^^ !defined(__clang__) ^^^\r\n        class E : public A {\r\n            union {};\r\n        };\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#else // ^^^ defined(__clang__) / !defined(__clang__) vvv\r\n#pragma warning(pop)\r\n#endif // ^^^ !defined(__clang__) ^^^\r\n        class F : private A {}; // Non-public inheritance\r\n        class NS : public B, public C {}; // Non-standard layout\r\n        class I; // Incomplete\r\n\r\n        union U {\r\n            int i;\r\n            char c;\r\n        };\r\n\r\n        ASSERT(is_pointer_interconvertible_base_of_v<A, A>);\r\n        ASSERT(is_pointer_interconvertible_base_of_v<A, B>);\r\n        ASSERT(is_pointer_interconvertible_base_of_v<A, const B>);\r\n        ASSERT(is_pointer_interconvertible_base_of_v<A, C>);\r\n        ASSERT(is_pointer_interconvertible_base_of_v<A, volatile C>);\r\n        ASSERT(is_pointer_interconvertible_base_of_v<volatile A, const C>);\r\n        ASSERT(is_pointer_interconvertible_base_of_v<A, D>);\r\n        ASSERT(is_pointer_interconvertible_base_of_v<A, E>);\r\n        ASSERT(is_pointer_interconvertible_base_of_v<A, F>);\r\n        ASSERT(is_pointer_interconvertible_base_of_v<C, D>);\r\n        ASSERT(is_pointer_interconvertible_base_of_v<I, I>);\r\n        ASSERT(is_pointer_interconvertible_base_of_v<const I, I>);\r\n\r\n        ASSERT(!is_pointer_interconvertible_base_of_v<int, int>);\r\n        ASSERT(!is_pointer_interconvertible_base_of_v<void, void>);\r\n        ASSERT(!is_pointer_interconvertible_base_of_v<A, int>);\r\n        ASSERT(!is_pointer_interconvertible_base_of_v<B, C>);\r\n        ASSERT(!is_pointer_interconvertible_base_of_v<A, NS>);\r\n        ASSERT(!is_pointer_interconvertible_base_of_v<B, NS>);\r\n        ASSERT(!is_pointer_interconvertible_base_of_v<int, I>);\r\n        ASSERT(!is_pointer_interconvertible_base_of_v<U, U>);\r\n        ASSERT(!is_pointer_interconvertible_base_of_v<U, I>);\r\n    }\r\n\r\n#ifndef __clang__ // TRANSITION, LLVM-48860\r\n    // is_corresponding_member tests\r\n    {\r\n        struct S1 {\r\n            int v1;\r\n            int v2;\r\n        };\r\n\r\n        struct S2 {\r\n            int w1;\r\n            int w2;\r\n        };\r\n\r\n        struct S3 {\r\n            int v1;\r\n            int v2;\r\n            int v3;\r\n        };\r\n\r\n        struct S4 {\r\n            char v1;\r\n            int v2;\r\n            int v3;\r\n        };\r\n\r\n        struct S5 {\r\n            int v1;\r\n            int v2;\r\n            void* v3;\r\n        };\r\n\r\n        struct S6 {\r\n            int v1;\r\n            int v2;\r\n            double v3;\r\n        };\r\n\r\n        struct S7 {\r\n            int f1() {\r\n                return 0;\r\n            }\r\n        };\r\n\r\n        struct NS : S1, S2 {}; // Non-standard layout\r\n\r\n        ASSERT(is_corresponding_member(&S1::v1, &S::v1));\r\n        ASSERT(is_corresponding_member(&S1::v2, &S::v2));\r\n        ASSERT(is_corresponding_member(&S1::v1, &S1::v1));\r\n        ASSERT(is_corresponding_member(&S1::v2, &S1::v2));\r\n        ASSERT(is_corresponding_member(&S1::v1, &S2::w1));\r\n        ASSERT(is_corresponding_member(&S1::v2, &S2::w2));\r\n        ASSERT(is_corresponding_member(&S1::v1, &S3::v1));\r\n        ASSERT(is_corresponding_member(&S1::v2, &S3::v2));\r\n        ASSERT(is_corresponding_member(&S5::v1, &S6::v1));\r\n        ASSERT(is_corresponding_member(&S5::v2, &S6::v2));\r\n\r\n        ASSERT(!is_corresponding_member(&S1::v1, &S1::v2));\r\n        ASSERT(!is_corresponding_member(&S1::v2, &S1::v1));\r\n        ASSERT(!is_corresponding_member(&S1::v2, &S2::w1));\r\n        ASSERT(!is_corresponding_member(&S1::v1, &S4::v1));\r\n        ASSERT(!is_corresponding_member(&S1::v2, &S4::v2));\r\n        ASSERT(!is_corresponding_member(&S3::v1, &S4::v1));\r\n        ASSERT(!is_corresponding_member(&S3::v2, &S4::v2));\r\n        ASSERT(!is_corresponding_member(&S5::v1, &S6::v2));\r\n        ASSERT(!is_corresponding_member(&S5::v2, &S6::v1));\r\n        ASSERT(!is_corresponding_member(&S5::v3, &S6::v3));\r\n        ASSERT(!is_corresponding_member<NS, NS, int, int>(&NS::v1, &NS::w1));\r\n        ASSERT(!is_corresponding_member(&S7::f1, &S7::f1));\r\n        ASSERT(!is_corresponding_member(static_cast<int S1::*>(nullptr), static_cast<int S2::*>(nullptr)));\r\n        ASSERT(!is_corresponding_member(&S1::v1, static_cast<int S2::*>(nullptr)));\r\n    }\r\n\r\n    // is_pointer_interconvertible_with_class tests\r\n    {\r\n        struct A {\r\n            int a;\r\n        };\r\n\r\n        struct B {\r\n            int b;\r\n        };\r\n\r\n        struct C {\r\n            int f1() {\r\n                return 0;\r\n            }\r\n        };\r\n\r\n        struct NS : A, B {}; // Non-standard layout\r\n\r\n        union U {\r\n            int v1;\r\n            char v2;\r\n        };\r\n\r\n        ASSERT(is_pointer_interconvertible_with_class(&A::a));\r\n        ASSERT(is_pointer_interconvertible_with_class(&NS::b));\r\n        ASSERT(is_pointer_interconvertible_with_class(&U::v1));\r\n        ASSERT(is_pointer_interconvertible_with_class(&U::v2));\r\n\r\n        ASSERT(!is_pointer_interconvertible_with_class<NS, int>(&NS::a));\r\n        ASSERT(!is_pointer_interconvertible_with_class<NS, int>(&NS::b));\r\n        ASSERT(!is_pointer_interconvertible_with_class(&C::f1));\r\n        ASSERT(!is_pointer_interconvertible_with_class(static_cast<int A::*>(nullptr)));\r\n    }\r\n#endif // ^^^ no workaround ^^^\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(test());\r\n    test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0475R1_P0591R4_uses_allocator_construction/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0475R1_P0591R4_uses_allocator_construction/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <map>\r\n#include <memory>\r\n#include <scoped_allocator>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nvoid test_P0475R1() {\r\n    struct DoNotCopy {\r\n        DoNotCopy() = default;\r\n        DoNotCopy(const DoNotCopy&) {\r\n            assert(false);\r\n        }\r\n    };\r\n\r\n    struct X {\r\n        using allocator_type = allocator<int>;\r\n        X(DoNotCopy&&, const allocator_type&) {}\r\n    };\r\n\r\n    scoped_allocator_adaptor<allocator<pair<X, int>>> alloc;\r\n    auto ptr = alloc.allocate(1);\r\n    alloc.construct(ptr, piecewise_construct, tuple<DoNotCopy>{}, make_tuple(1));\r\n    alloc.destroy(ptr);\r\n    alloc.deallocate(ptr, 1);\r\n}\r\n\r\nconstexpr bool test_P0591R4() {\r\n    allocator<int> alloc;\r\n    int i = 5;\r\n    pair p(i, i);\r\n\r\n    struct AllocatorArgConstructible {\r\n        using allocator_type = allocator<int>;\r\n\r\n        constexpr AllocatorArgConstructible(allocator_arg_t, const allocator<int>&, int y) : x(y) {}\r\n\r\n        int x;\r\n    };\r\n\r\n    struct AllocatorConstructible {\r\n        using allocator_type = allocator<int>;\r\n\r\n        constexpr AllocatorConstructible(int y, const allocator<int>&) : x(y) {}\r\n\r\n        int x;\r\n    };\r\n\r\n    struct OnlyAllocatorArgConstructible {\r\n        using allocator_type = allocator<int>;\r\n\r\n        constexpr OnlyAllocatorArgConstructible(allocator_arg_t, const allocator<int>&) {}\r\n    };\r\n\r\n    struct OnlyAllocatorConstructible {\r\n        using allocator_type = allocator<int>;\r\n\r\n        constexpr OnlyAllocatorConstructible(const allocator<int>&) {}\r\n    };\r\n\r\n    struct DefaultConstructible {\r\n        constexpr DefaultConstructible() {}\r\n    };\r\n\r\n    using AllocatorArgConstructArgs      = tuple<allocator_arg_t, const allocator<int>&, int&>;\r\n    using AllocatorConstructArgs         = tuple<int&, const allocator<int>&>;\r\n    using ConstAllocatorArgConstructArgs = tuple<allocator_arg_t, const allocator<int>&, const int&>;\r\n    using ConstAllocatorConstructArgs    = tuple<const int&, const allocator<int>&>;\r\n    using MovedAllocatorArgConstructArgs = tuple<allocator_arg_t, const allocator<int>&, int&&>;\r\n    using MovedAllocatorConstructArgs    = tuple<int&&, const allocator<int>&>;\r\n#if _HAS_CXX23\r\n    using MovedConstAllocatorArgConstructArgs = tuple<allocator_arg_t, const allocator<int>&, const int&&>;\r\n    using MovedConstAllocatorConstructArgs    = tuple<const int&&, const allocator<int>&>;\r\n#endif // _HAS_CXX23\r\n    using OnlyAllocatorArgConstructArgs = tuple<allocator_arg_t, const allocator<int>&>;\r\n    using OnlyAllocatorConstructArgs    = tuple<const allocator<int>&>;\r\n    using DefaultConstructArgs          = tuple<>;\r\n\r\n    { // non-pair overload\r\n        auto tuple1 = uses_allocator_construction_args<int>(alloc, i);\r\n        static_assert(is_same_v<decltype(tuple1), tuple<int&>>);\r\n\r\n        auto tuple2 = uses_allocator_construction_args<AllocatorArgConstructible>(alloc, i);\r\n        static_assert(is_same_v<decltype(tuple2), AllocatorArgConstructArgs>);\r\n\r\n        auto tuple3 = uses_allocator_construction_args<AllocatorConstructible>(alloc, i);\r\n        static_assert(is_same_v<decltype(tuple3), AllocatorConstructArgs>);\r\n    }\r\n\r\n    { // pair(piecewise_construct_t, tuple, tuple) overload\r\n        auto tuple4 = uses_allocator_construction_args<pair<int, OnlyAllocatorArgConstructible>>(\r\n            alloc, piecewise_construct, forward_as_tuple(i), forward_as_tuple());\r\n        static_assert(\r\n            is_same_v<decltype(tuple4), tuple<piecewise_construct_t, tuple<int&>, OnlyAllocatorArgConstructArgs>>);\r\n\r\n        auto tuple5 = uses_allocator_construction_args<pair<AllocatorConstructible, DefaultConstructible>>(\r\n            alloc, piecewise_construct, forward_as_tuple(i), forward_as_tuple());\r\n        static_assert(\r\n            is_same_v<decltype(tuple5), tuple<piecewise_construct_t, AllocatorConstructArgs, DefaultConstructArgs>>);\r\n    }\r\n\r\n    { // pair() overload\r\n        auto tuple6 =\r\n            uses_allocator_construction_args<pair<DefaultConstructible, OnlyAllocatorArgConstructible>>(alloc);\r\n        static_assert(is_same_v<decltype(tuple6),\r\n            tuple<piecewise_construct_t, DefaultConstructArgs, OnlyAllocatorArgConstructArgs>>);\r\n\r\n        auto tuple7 = uses_allocator_construction_args<pair<OnlyAllocatorConstructible, DefaultConstructible>>(alloc);\r\n        static_assert(is_same_v<decltype(tuple7),\r\n            tuple<piecewise_construct_t, OnlyAllocatorConstructArgs, DefaultConstructArgs>>);\r\n    }\r\n\r\n    { // pair(first, second) overload\r\n        auto tuple8 = uses_allocator_construction_args<pair<int, AllocatorArgConstructible>>(alloc, i, i);\r\n        static_assert(\r\n            is_same_v<decltype(tuple8), tuple<piecewise_construct_t, tuple<int&>, AllocatorArgConstructArgs>>);\r\n\r\n        auto tuple9 = uses_allocator_construction_args<pair<AllocatorConstructible, int>>(alloc, i, i);\r\n        static_assert(is_same_v<decltype(tuple9), tuple<piecewise_construct_t, AllocatorConstructArgs, tuple<int&>>>);\r\n    }\r\n\r\n    { // pair(const pair&) overload before C++23; pair(pair&) overload since C++23\r\n        auto tuple10 = uses_allocator_construction_args<pair<int, AllocatorArgConstructible>>(alloc, p);\r\n#if _HAS_CXX23\r\n        static_assert(\r\n            is_same_v<decltype(tuple10), tuple<piecewise_construct_t, tuple<int&>, AllocatorArgConstructArgs>>);\r\n#else // _HAS_CXX23\r\n        static_assert(is_same_v<decltype(tuple10),\r\n            tuple<piecewise_construct_t, tuple<const int&>, ConstAllocatorArgConstructArgs>>);\r\n#endif // _HAS_CXX23\r\n\r\n        auto tuple11 = uses_allocator_construction_args<pair<AllocatorConstructible, int>>(alloc, p);\r\n#if _HAS_CXX23\r\n        static_assert(is_same_v<decltype(tuple11), tuple<piecewise_construct_t, AllocatorConstructArgs, tuple<int&>>>);\r\n#else // _HAS_CXX23\r\n        static_assert(\r\n            is_same_v<decltype(tuple11), tuple<piecewise_construct_t, ConstAllocatorConstructArgs, tuple<const int&>>>);\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n    { // pair(const pair&) overload\r\n        auto tuple10 = uses_allocator_construction_args<pair<int, AllocatorArgConstructible>>(alloc, as_const(p));\r\n        static_assert(is_same_v<decltype(tuple10),\r\n            tuple<piecewise_construct_t, tuple<const int&>, ConstAllocatorArgConstructArgs>>);\r\n\r\n        auto tuple11 = uses_allocator_construction_args<pair<AllocatorConstructible, int>>(alloc, as_const(p));\r\n        static_assert(\r\n            is_same_v<decltype(tuple11), tuple<piecewise_construct_t, ConstAllocatorConstructArgs, tuple<const int&>>>);\r\n    }\r\n\r\n    { // pair(pair&&) overload\r\n        auto tuple12 = uses_allocator_construction_args<pair<int, AllocatorArgConstructible>>(alloc, move(p));\r\n        static_assert(\r\n            is_same_v<decltype(tuple12), tuple<piecewise_construct_t, tuple<int&&>, MovedAllocatorArgConstructArgs>>);\r\n\r\n        auto tuple13 = uses_allocator_construction_args<pair<AllocatorConstructible, int>>(alloc, move(p));\r\n        static_assert(\r\n            is_same_v<decltype(tuple13), tuple<piecewise_construct_t, MovedAllocatorConstructArgs, tuple<int&&>>>);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    { // pair(const pair&&) overload\r\n        auto tuple12 = uses_allocator_construction_args<pair<int, AllocatorArgConstructible>>(alloc, move(as_const(p)));\r\n        static_assert(is_same_v<decltype(tuple12),\r\n            tuple<piecewise_construct_t, tuple<const int&&>, MovedConstAllocatorArgConstructArgs>>);\r\n\r\n        auto tuple13 = uses_allocator_construction_args<pair<AllocatorConstructible, int>>(alloc, move(as_const(p)));\r\n        static_assert(is_same_v<decltype(tuple13),\r\n            tuple<piecewise_construct_t, MovedConstAllocatorConstructArgs, tuple<const int&&>>>);\r\n    }\r\n\r\n    { // pair(PairLike&&) overload\r\n        tuple tpl(i, i);\r\n        auto tuple14 = uses_allocator_construction_args<pair<int, AllocatorArgConstructible>>(alloc, tpl);\r\n        static_assert(\r\n            is_same_v<decltype(tuple14), tuple<piecewise_construct_t, tuple<int&>, AllocatorArgConstructArgs>>);\r\n\r\n        auto tuple15 = uses_allocator_construction_args<pair<AllocatorConstructible, int>>(alloc, tpl);\r\n        static_assert(is_same_v<decltype(tuple15), tuple<piecewise_construct_t, AllocatorConstructArgs, tuple<int&>>>);\r\n\r\n        auto tuple16 = uses_allocator_construction_args<pair<int, AllocatorArgConstructible>>(alloc, move(tpl));\r\n        static_assert(\r\n            is_same_v<decltype(tuple16), tuple<piecewise_construct_t, tuple<int&&>, MovedAllocatorArgConstructArgs>>);\r\n\r\n        auto tuple17 = uses_allocator_construction_args<pair<AllocatorConstructible, int>>(alloc, move(tpl));\r\n        static_assert(\r\n            is_same_v<decltype(tuple17), tuple<piecewise_construct_t, MovedAllocatorConstructArgs, tuple<int&&>>>);\r\n\r\n        auto tuple18 = uses_allocator_construction_args<pair<int, AllocatorArgConstructible>>(alloc, as_const(tpl));\r\n        static_assert(is_same_v<decltype(tuple18),\r\n            tuple<piecewise_construct_t, tuple<const int&>, ConstAllocatorArgConstructArgs>>);\r\n\r\n        auto tuple19 = uses_allocator_construction_args<pair<AllocatorConstructible, int>>(alloc, as_const(tpl));\r\n        static_assert(\r\n            is_same_v<decltype(tuple19), tuple<piecewise_construct_t, ConstAllocatorConstructArgs, tuple<const int&>>>);\r\n\r\n        auto tuple20 =\r\n            uses_allocator_construction_args<pair<int, AllocatorArgConstructible>>(alloc, move(as_const(tpl)));\r\n        static_assert(is_same_v<decltype(tuple20),\r\n            tuple<piecewise_construct_t, tuple<const int&&>, MovedConstAllocatorArgConstructArgs>>);\r\n\r\n        auto tuple21 = uses_allocator_construction_args<pair<AllocatorConstructible, int>>(alloc, move(as_const(tpl)));\r\n        static_assert(is_same_v<decltype(tuple21),\r\n            tuple<piecewise_construct_t, MovedConstAllocatorConstructArgs, tuple<const int&&>>>);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    {\r\n        auto obj1 = make_obj_using_allocator<AllocatorArgConstructible>(alloc, i);\r\n        static_assert(is_same_v<decltype(obj1), AllocatorArgConstructible>);\r\n        assert(obj1.x == i);\r\n\r\n        auto obj2 = make_obj_using_allocator<AllocatorConstructible>(alloc, i);\r\n        static_assert(is_same_v<decltype(obj2), AllocatorConstructible>);\r\n        assert(obj2.x == i);\r\n    }\r\n\r\n    {\r\n        allocator<AllocatorArgConstructible> alloc2;\r\n        auto ptr2 = alloc2.allocate(1);\r\n\r\n        uninitialized_construct_using_allocator(ptr2, alloc, i);\r\n        assert(ptr2->x == i);\r\n        destroy_at(ptr2);\r\n\r\n        alloc2.deallocate(ptr2, 1);\r\n\r\n        allocator<AllocatorConstructible> alloc3;\r\n        auto ptr3 = alloc3.allocate(1);\r\n\r\n        uninitialized_construct_using_allocator(ptr3, alloc, i);\r\n        assert(ptr3->x == i);\r\n        destroy_at(ptr3);\r\n\r\n        alloc3.deallocate(ptr3, 1);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_gh_2021() { // COMPILE-ONLY\r\n    // GH-2021 <map>: Using operator[] on a std::pmr::map fails to compile when the mapped type is a std::pair\r\n    pmr::map<int, pair<int, int>> tags;\r\n    tags[0];\r\n}\r\n\r\nstruct MoveOnlyType {\r\n    MoveOnlyType()               = default;\r\n    MoveOnlyType(MoveOnlyType&&) = default;\r\n};\r\n\r\nvoid test_lwg_3527() { // COMPILE-ONLY\r\n    // LWG-3527: \"uses_allocator_construction_args handles rvalue pairs of rvalue references incorrectly\"\r\n    allocator<MoveOnlyType> alloc;\r\n    MoveOnlyType obj;\r\n    pair<MoveOnlyType&&, MoveOnlyType&&> p{move(obj), move(obj)};\r\n    [[maybe_unused]] auto t = uses_allocator_construction_args<pair<MoveOnlyType&&, MoveOnlyType&&>>(alloc, move(p));\r\n}\r\n\r\ntemplate <class T>\r\nclass payloaded_allocator {\r\nprivate:\r\n    int payload = 0;\r\n\r\npublic:\r\n    payloaded_allocator() = default;\r\n\r\n    constexpr explicit payloaded_allocator(int n) noexcept : payload{n} {}\r\n\r\n    template <class U>\r\n    constexpr explicit payloaded_allocator(payloaded_allocator<U> a) noexcept : payload{a.get_payload()} {}\r\n\r\n    friend bool operator==(payloaded_allocator, payloaded_allocator) = default;\r\n\r\n    template <class U>\r\n    friend constexpr bool operator==(payloaded_allocator x, payloaded_allocator<U> y) noexcept {\r\n        return x.payload == y.payload;\r\n    }\r\n\r\n    using value_type = T;\r\n\r\n    constexpr T* allocate(size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    constexpr void deallocate(T* p, size_t n) {\r\n        return allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    constexpr int get_payload() const noexcept {\r\n        return payload;\r\n    }\r\n};\r\n\r\nconstexpr bool test_lwg3677() {\r\n    using my_allocator = payloaded_allocator<int>;\r\n    using my_pair      = pair<int, vector<int, my_allocator>>;\r\n\r\n    constexpr int in_v = 42;\r\n    auto out_v = make_obj_using_allocator<const my_pair>(my_allocator{in_v}).second.get_allocator().get_payload();\r\n    return in_v == out_v;\r\n}\r\n\r\nint main() {\r\n    test_P0475R1();\r\n\r\n    assert(test_P0591R4());\r\n    static_assert(test_P0591R4());\r\n\r\n    assert(test_lwg3677());\r\n    static_assert(test_lwg3677());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0476R2_bit_cast/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0476R2_bit_cast/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <bit>\r\n#include <cassert>\r\n#include <cmath>\r\n#include <cstddef>\r\n#include <cstring>\r\n#include <limits>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n// structure sizing depends on a packing of 8, which is the default\r\n\r\nunion test_union_1 {\r\n    char a;\r\n    int b;\r\n};\r\nunion test_union_2 {\r\n    char a;\r\n    float b;\r\n};\r\n\r\nstruct middle_class_1 {\r\n    double d;\r\n    virtual void a_member_function_1() {}\r\n};\r\n\r\nstruct middle_class_2 {\r\n    int a;\r\n    virtual void a_member_function_2() {}\r\n};\r\n\r\nstruct derived_class : middle_class_1, middle_class_2 {\r\n    void a_member_function_2() override {}\r\n};\r\n\r\nstruct test_struct_1 {\r\n    char a;\r\n    // char[3]\r\n    int b;\r\n    short c;\r\n    // char[6]\r\n    double d;\r\n\r\n    void a_member_function() {}\r\n};\r\n\r\nstruct test_struct_2 {\r\n    short a;\r\n    // char[2]\r\n    float b;\r\n    float c;\r\n    int d;\r\n    unsigned int e;\r\n    char f;\r\n    // char[1]\r\n    short g;\r\n\r\n    void a_member_function() {}\r\n};\r\n\r\nstruct test_struct_3_member_fn_pointer {\r\n    char a;\r\n    // char[3]\r\n    int b;\r\n    short c;\r\n    char d[2];\r\n    void (test_struct_1::*fn)();\r\n};\r\n\r\nstruct test_struct_4_large_member_fn_pointer {\r\n    char a;\r\n    // char[3]\r\n    int b;\r\n    double c;\r\n    double d;\r\n    void (derived_class::*fn)(); // \"large\" member fn pointers are aligned to 8 on both x64 and x86\r\n};\r\n\r\nstruct test_struct_5_struct {\r\n    char a;\r\n    // char[3]\r\n    int b;\r\n    double c;\r\n    double d;\r\n    void* e;\r\n    size_t f;\r\n};\r\n\r\nstruct test_struct_6 {\r\n    char a;\r\n    // char[3]\r\n    int b;\r\n    int c;\r\n    // char[4] on x64\r\n    void* v;\r\n};\r\n\r\nstruct test_struct_7_member_fn_pointer {\r\n    char a;\r\n    // char[3]\r\n    int b;\r\n    int c;\r\n    void (test_struct_1::*fn)();\r\n};\r\n\r\nstruct test_struct_1_not_trivially_copyable {\r\n    char a;\r\n    // char[3]\r\n    int b;\r\n    short c;\r\n    // char[2]\r\n    double d;\r\n\r\n    test_struct_1_not_trivially_copyable& operator=(const test_struct_1_not_trivially_copyable&) {\r\n        return *this;\r\n    }\r\n};\r\n\r\n#pragma pack(push, 1)\r\nstruct test_struct_1_packed {\r\n    char a;\r\n    int b;\r\n    short c;\r\n    double d;\r\n};\r\nstruct test_struct_2_packed {\r\n    short a;\r\n    float b;\r\n    float c;\r\n    int d;\r\n    unsigned int e;\r\n    char f;\r\n    short g;\r\n};\r\n#pragma pack(pop)\r\n\r\nstatic_assert(sizeof(test_struct_1) == sizeof(test_struct_2));\r\n\r\ntemplate <typename To, typename From, typename = void>\r\nconstexpr bool bit_cast_invocable = false;\r\n\r\ntemplate <typename To, typename From>\r\nconstexpr bool bit_cast_invocable<To, From, std::void_t<decltype(std::bit_cast<To>(std::declval<From>()))>> = true;\r\n\r\ntemplate <int zero = 0, int = ((void) std::bit_cast<test_union_1>(test_union_2{}), zero)>\r\nconstexpr bool bit_cast_is_constexpr_union(int) {\r\n    return true;\r\n}\r\n\r\nconstexpr bool bit_cast_is_constexpr_union(long) {\r\n    return false;\r\n}\r\n\r\ntemplate <int zero = 0, int = ((void) std::bit_cast<float*>(nullptr), zero)>\r\nconstexpr bool bit_cast_is_constexpr_pointer(int) {\r\n    return true;\r\n}\r\n\r\nconstexpr bool bit_cast_is_constexpr_pointer(long) {\r\n    return false;\r\n}\r\n\r\ntemplate <int zero = 0,\r\n    int            = ((void) std::bit_cast<void (test_struct_1::*)()>(&test_struct_2::a_member_function), zero)>\r\nconstexpr bool bit_cast_is_constexpr_member_fn_pointer(int) {\r\n    return true;\r\n}\r\n\r\nconstexpr bool bit_cast_is_constexpr_member_fn_pointer(long) {\r\n    return false;\r\n}\r\n\r\ntemplate <int zero = 0, int = ((void) std::bit_cast<test_struct_6>(test_struct_3_member_fn_pointer{}), zero)>\r\nconstexpr bool bit_cast_is_constexpr_pmf_datamember(int) {\r\n    return true;\r\n}\r\n\r\nconstexpr bool bit_cast_is_constexpr_pmf_datamember(long) {\r\n    return false;\r\n}\r\n\r\ntemplate <int zero = 0,\r\n    int            = ((void) std::bit_cast<test_struct_5_struct>(test_struct_4_large_member_fn_pointer{}), zero)>\r\nconstexpr bool bit_cast_is_constexpr_large_member_fn_pointer(int) {\r\n    return true;\r\n}\r\n\r\nconstexpr bool bit_cast_is_constexpr_large_member_fn_pointer(long) {\r\n    return false;\r\n}\r\n\r\ntemplate <typename To, typename From>\r\nvoid zero_initialized_round_trip() {\r\n    From before{};\r\n    To middle = std::bit_cast<To>(before);\r\n    assert(memcmp(&before, &middle, sizeof(From)) == 0);\r\n    From after = std::bit_cast<From>(middle);\r\n    assert(memcmp(&before, &after, sizeof(From)) == 0);\r\n}\r\n\r\nconstexpr bool test_float() {\r\n    unsigned int as_int = std::bit_cast<unsigned int>(0x0.000002p-126f);\r\n    assert(as_int == 1);\r\n    assert(std::bit_cast<float>(as_int) == 0x0.000002p-126f);\r\n    as_int = std::bit_cast<unsigned int>(0x1.1p1f);\r\n    assert(as_int == 0x40080000);\r\n    assert(std::bit_cast<float>(as_int) == 0x1.1p1f);\r\n    as_int = std::bit_cast<unsigned int>(0x0.0p0f);\r\n    assert(as_int == 0);\r\n    assert(std::bit_cast<float>(as_int) == 0x0.0p0f);\r\n    if (!std::is_constant_evaluated()) {\r\n        assert(std::signbit(std::bit_cast<float>(as_int)) == false);\r\n    }\r\n    as_int = std::bit_cast<unsigned int>(-0x0.0p0f);\r\n    assert(as_int == 0x80000000);\r\n    assert(std::bit_cast<float>(as_int) == -0x0.0p0f);\r\n    if (!std::is_constant_evaluated()) {\r\n        assert(std::signbit(std::bit_cast<float>(as_int)) == true);\r\n    }\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1666161\r\n    // signaling nan\r\n    as_int     = 0x7fc00001;\r\n    float snan = std::bit_cast<float>(as_int);\r\n    assert(as_int == std::bit_cast<unsigned int>(snan));\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    as_int = std::bit_cast<unsigned int>(std::numeric_limits<float>::infinity());\r\n    assert(as_int == 0x7f800000);\r\n    assert(std::bit_cast<float>(as_int) == std::numeric_limits<float>::infinity());\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(!bit_cast_invocable<test_struct_2_packed, test_struct_1_packed>);\r\n    static_assert(!bit_cast_invocable<test_struct_1_not_trivially_copyable, test_struct_1>);\r\n    static_assert(!bit_cast_invocable<test_struct_1, test_struct_1_not_trivially_copyable>);\r\n    static_assert(!bit_cast_invocable<test_struct_1_not_trivially_copyable, test_struct_1_not_trivially_copyable>);\r\n    static_assert(bit_cast_invocable<test_union_1, test_union_2>);\r\n    static_assert(bit_cast_invocable<ptrdiff_t, void (test_struct_1::*)()>);\r\n    static_assert(bit_cast_invocable<ptrdiff_t, void (*)()>);\r\n    static_assert(bit_cast_invocable<test_struct_1, test_struct_2>);\r\n    static_assert(bit_cast_invocable<test_struct_4_large_member_fn_pointer, test_struct_5_struct>);\r\n\r\n    // tests for conditions on constexprness\r\n    static_assert(!bit_cast_is_constexpr_union(0));\r\n    static_assert(!bit_cast_is_constexpr_pointer(0));\r\n    static_assert(!bit_cast_is_constexpr_member_fn_pointer(0));\r\n    static_assert(!bit_cast_is_constexpr_pmf_datamember(0));\r\n    static_assert(!bit_cast_is_constexpr_large_member_fn_pointer(0));\r\n\r\n    zero_initialized_round_trip<test_struct_1, test_struct_2>();\r\n    zero_initialized_round_trip<test_struct_3_member_fn_pointer, test_struct_3_member_fn_pointer>();\r\n    zero_initialized_round_trip<test_struct_3_member_fn_pointer, test_struct_7_member_fn_pointer>();\r\n    zero_initialized_round_trip<test_struct_4_large_member_fn_pointer, test_struct_5_struct>();\r\n    zero_initialized_round_trip<test_struct_6, test_struct_3_member_fn_pointer>();\r\n    zero_initialized_round_trip<float, int>();\r\n    zero_initialized_round_trip<double, long long>();\r\n    zero_initialized_round_trip<unsigned int, float>();\r\n\r\n    assert(test_float());\r\n    static_assert(test_float());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0487R1_fixing_operator_shl_basic_istream_char_pointer/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0487R1_fixing_operator_shl_basic_istream_char_pointer/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <istream>\r\n#include <iterator>\r\n#include <sstream>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\nconst string testString1          = \"TestData1NoSpace\";\r\nconst string testStringLong       = \"TestData1NoSpaceTestData2NoSpaceTestData3NoSpaceTestData4NoSpaceTestData5NoSpace\";\r\nconst string testStringWhitespace = \"Test Data 1 With Space\";\r\nconst string testStringBeginningWithWhitespace = \"     TestData1WithSpace\";\r\n\r\nconst string testStringEmpty;\r\n\r\nconstexpr unsigned char uchar_max = static_cast<unsigned char>(255);\r\nconst auto is_ucharmax            = [](unsigned char elm) { return elm == uchar_max; };\r\n\r\ntemplate <typename CharType>\r\nvoid test_no_whitespace_into_sized_buffer() {\r\n    istringstream stream(testString1);\r\n    CharType buffer[200];\r\n    fill(begin(buffer), end(buffer), static_cast<CharType>(255));\r\n    stream >> buffer;\r\n    assert(equal(begin(testString1), end(testString1), buffer, buffer + size(testString1)));\r\n    assert(all_of(\r\n        buffer + size(testString1) + 1, end(buffer), [](CharType elm) { return elm == static_cast<CharType>(255); }));\r\n    assert(stream.eof());\r\n    assert(!stream.fail());\r\n}\r\n\r\n// >> is specified to write the null terminator to the buffer no matter what, even\r\n// if the stream immediately returns EOF; N4810 29.7.4.2.3 [istream.extractors]/9\r\nvoid test_empty_string_into_sized_buffer() {\r\n    istringstream stream(testStringEmpty);\r\n    unsigned char buffer[2];\r\n    fill(begin(buffer), end(buffer), uchar_max);\r\n    stream >> buffer;\r\n    assert(buffer[0] == '\\0');\r\n    assert(buffer[1] == 0xff);\r\n    assert(stream.eof());\r\n    assert(stream.fail());\r\n}\r\n\r\nvoid test_width_exactly_same_as_buffer_size() {\r\n    istringstream stream(testString1);\r\n    unsigned char buffer[2];\r\n    fill(begin(buffer), end(buffer), uchar_max);\r\n    stream.width(2);\r\n    stream >> buffer;\r\n    assert(buffer[0] == 'T');\r\n    assert(buffer[1] == '\\0');\r\n    assert(!stream.eof());\r\n    assert(!stream.fail());\r\n}\r\n\r\nvoid test_reset_width_at_end_of_output() {\r\n    istringstream stream(testString1);\r\n    unsigned char buffer[20];\r\n    fill(begin(buffer), end(buffer), uchar_max);\r\n    stream.width(20);\r\n    stream >> buffer;\r\n    assert(reinterpret_cast<char*>(buffer) == testString1);\r\n    assert(all_of(buffer + size(testString1) + 1, end(buffer), is_ucharmax));\r\n    assert(stream.width() == 0);\r\n    assert(stream.eof());\r\n    assert(!stream.fail());\r\n}\r\n\r\nvoid test_only_extract_up_to_width() {\r\n    istringstream stream(testString1);\r\n    unsigned char buffer[20];\r\n    fill(begin(buffer), end(buffer), uchar_max);\r\n    stream.width(1);\r\n    stream >> buffer;\r\n    assert(buffer[0] == '\\0');\r\n    assert(all_of(buffer + 1, end(buffer), is_ucharmax));\r\n    assert(!stream.eof());\r\n    assert(stream.fail());\r\n}\r\n\r\nvoid test_only_extract_up_to_width_2() {\r\n    istringstream stream(testString1);\r\n    unsigned char buffer[20];\r\n    fill(begin(buffer), end(buffer), uchar_max);\r\n    stream.width(2);\r\n    stream >> buffer;\r\n    assert(buffer[0] == 'T');\r\n    assert(buffer[1] == '\\0');\r\n    assert(all_of(buffer + 2, end(buffer), is_ucharmax));\r\n    unsigned char c = '\\0';\r\n    stream >> c;\r\n    assert(c == 'e');\r\n    assert(!stream.eof());\r\n    assert(!stream.fail());\r\n}\r\n\r\n// We are using this structure to test that the implementation won't write past the end of a\r\n// sized buffer when getting the size from a deduced template argument. Unfortunately\r\n// this means that in the case where the test fails it will be triggering undefined behavior.\r\n// We could detect failure without doing this by mapping two new pages and then protecting the second\r\n// and aligning the first buffer here right at the page boundary (much like what app verifier can do).\r\n// Considering that this would be highly platform specific and somewhat arcane we've opted for the\r\n// simple solution involving undefined behavior.\r\n//\r\n// In any case if this test comes up in dynamic or static analysis that's why.\r\nstruct test_buffers {\r\n    unsigned char buffer0[100];\r\n    unsigned char buffer1[10];\r\n    unsigned char buffer2[100];\r\n};\r\n\r\nvoid test_does_not_extract_past_length() {\r\n    istringstream stream(testStringLong);\r\n    test_buffers buffers = {};\r\n    fill(begin(buffers.buffer0), end(buffers.buffer0), uchar_max);\r\n    fill(begin(buffers.buffer2), end(buffers.buffer2), uchar_max);\r\n    stream >> buffers.buffer1;\r\n    assert(equal(begin(testStringLong), begin(testStringLong) + 9, buffers.buffer1, buffers.buffer1 + 9));\r\n    assert(buffers.buffer1[9] == '\\0');\r\n    assert(all_of(begin(buffers.buffer0), end(buffers.buffer0), is_ucharmax));\r\n    assert(all_of(begin(buffers.buffer2), end(buffers.buffer2), is_ucharmax));\r\n    assert(!stream.eof());\r\n    assert(!stream.fail());\r\n}\r\n\r\n\r\n// In this case both width > 0 and the buffer is too small\r\n// for the data.\r\nvoid test_does_not_extract_past_length_with_width() {\r\n    istringstream stream(testStringLong);\r\n    test_buffers buffers = {};\r\n    fill(begin(buffers.buffer0), end(buffers.buffer0), uchar_max);\r\n    fill(begin(buffers.buffer2), end(buffers.buffer2), uchar_max);\r\n    stream.width(12);\r\n    stream >> buffers.buffer1;\r\n    assert(equal(begin(testStringLong), begin(testStringLong) + 9, buffers.buffer1, buffers.buffer1 + 9));\r\n    assert(buffers.buffer1[9] == '\\0');\r\n    assert(all_of(begin(buffers.buffer2), end(buffers.buffer2), is_ucharmax));\r\n    assert(stream.width() == 0);\r\n    assert(!stream.eof());\r\n    assert(!stream.fail());\r\n}\r\n\r\nvoid test_extract_beginning_with_whitespace() {\r\n    istringstream stream(testStringBeginningWithWhitespace);\r\n    signed char buffer[40];\r\n    fill(begin(buffer), end(buffer), '\\xFF');\r\n    stream >> buffer;\r\n    assert(string(reinterpret_cast<char*>(buffer)) == \"TestData1WithSpace\");\r\n    assert(stream.eof());\r\n    assert(!stream.fail());\r\n}\r\n\r\n\r\nint main() {\r\n    test_no_whitespace_into_sized_buffer<char>();\r\n    test_no_whitespace_into_sized_buffer<unsigned char>();\r\n    test_no_whitespace_into_sized_buffer<signed char>();\r\n    test_empty_string_into_sized_buffer();\r\n    test_width_exactly_same_as_buffer_size();\r\n    test_reset_width_at_end_of_output();\r\n\r\n    test_only_extract_up_to_width();\r\n    test_only_extract_up_to_width_2();\r\n#if _HAS_CXX20 // these are the tests for the new, c++20 signatures\r\n    test_does_not_extract_past_length();\r\n    test_does_not_extract_past_length_with_width();\r\n#endif\r\n\r\n    test_extract_beginning_with_whitespace();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0513R0_poisoning_the_hash/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0513R0_poisoning_the_hash/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _HAS_DEPRECATED_ADAPTOR_TYPEDEFS 1\r\n#define _SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING\r\n\r\n#include <bitset>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <memory>\r\n#include <optional>\r\n#include <string>\r\n#include <string_view>\r\n#include <system_error>\r\n#include <type_traits>\r\n#include <typeindex>\r\n#include <utility>\r\n#include <variant>\r\n#include <vector>\r\n\r\n#ifndef _M_CEE_PURE\r\n#include <thread>\r\n#endif // _M_CEE_PURE\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <typename T, typename = void>\r\nstruct hash_callable : false_type {};\r\n\r\ntemplate <typename T>\r\nstruct hash_callable<T, void_t<decltype(declval<hash<T>>()(declval<const T&>()))>> : true_type {};\r\n\r\ntemplate <typename T>\r\nconstexpr bool hash_disabled() {\r\n    return !is_default_constructible_v<hash<T>> //\r\n        && !is_copy_constructible_v<hash<T>> //\r\n        && !is_move_constructible_v<hash<T>> //\r\n        && !is_copy_assignable_v<hash<T>> //\r\n        && !is_move_assignable_v<hash<T>> //\r\n        && !hash_callable<T>::value;\r\n}\r\n\r\ntemplate <typename T, bool NoExcept = true>\r\nconstexpr bool standard_hash_enabled() {\r\n    // technically the standard doesn't require triviality here, but it's easy\r\n    // for us to provide, so we should do that.\r\n    return is_trivially_default_constructible_v<hash<T>> //\r\n        && is_trivially_copy_constructible_v<hash<T>> //\r\n        && is_trivially_move_constructible_v<hash<T>> //\r\n        && is_trivially_copy_assignable_v<hash<T>> //\r\n        && is_trivially_move_assignable_v<hash<T>> //\r\n        && is_trivially_copyable_v<hash<T>> //\r\n        && is_same_v<typename hash<T>::argument_type, T> //\r\n        && is_same_v<typename hash<T>::result_type, size_t> //\r\n        && (noexcept(hash<T>{}(declval<const T&>())) == NoExcept) //\r\n        && hash_disabled<const T>() //\r\n        && hash_disabled<volatile T>() //\r\n        && hash_disabled<const volatile T>();\r\n}\r\n\r\nSTATIC_ASSERT(standard_hash_enabled<bool>());\r\nSTATIC_ASSERT(standard_hash_enabled<char>());\r\nSTATIC_ASSERT(standard_hash_enabled<signed char>());\r\nSTATIC_ASSERT(standard_hash_enabled<unsigned char>());\r\nSTATIC_ASSERT(standard_hash_enabled<wchar_t>());\r\n#ifdef __cpp_char8_t\r\nSTATIC_ASSERT(standard_hash_enabled<char8_t>());\r\n#endif // __cpp_char8_t\r\nSTATIC_ASSERT(standard_hash_enabled<char16_t>());\r\nSTATIC_ASSERT(standard_hash_enabled<char32_t>());\r\nSTATIC_ASSERT(standard_hash_enabled<short>());\r\nSTATIC_ASSERT(standard_hash_enabled<unsigned short>());\r\nSTATIC_ASSERT(standard_hash_enabled<int>());\r\nSTATIC_ASSERT(standard_hash_enabled<unsigned int>());\r\nSTATIC_ASSERT(standard_hash_enabled<long>());\r\nSTATIC_ASSERT(standard_hash_enabled<unsigned long>());\r\nSTATIC_ASSERT(standard_hash_enabled<long long>());\r\nSTATIC_ASSERT(standard_hash_enabled<unsigned long long>());\r\nSTATIC_ASSERT(standard_hash_enabled<float>());\r\nSTATIC_ASSERT(standard_hash_enabled<double>());\r\nSTATIC_ASSERT(standard_hash_enabled<long double>());\r\nSTATIC_ASSERT(standard_hash_enabled<void*>());\r\nSTATIC_ASSERT(standard_hash_enabled<int*>());\r\nSTATIC_ASSERT(standard_hash_enabled<int (*)(int)>());\r\nSTATIC_ASSERT(standard_hash_enabled<nullptr_t>());\r\n\r\nSTATIC_ASSERT(standard_hash_enabled<bitset<32>>());\r\nSTATIC_ASSERT(standard_hash_enabled<error_code>());\r\nSTATIC_ASSERT(standard_hash_enabled<error_condition>());\r\nSTATIC_ASSERT(standard_hash_enabled<type_index>());\r\nSTATIC_ASSERT(standard_hash_enabled<vector<bool>>());\r\n\r\n#ifndef _M_CEE_PURE\r\nSTATIC_ASSERT(standard_hash_enabled<thread::id>());\r\n#endif // _M_CEE_PURE\r\n\r\nstruct NotHashable {};\r\n\r\nstruct Hashable {};\r\n\r\nnamespace std {\r\n\r\n    template <>\r\n    struct hash<Hashable> {\r\n        hash() { // non-trivial\r\n        }\r\n        hash(const hash&) { // non-trivial\r\n        }\r\n        hash& operator=(const hash&) { // non-trivial\r\n            return *this;\r\n        }\r\n        size_t operator()(Hashable) {\r\n            return 5925961;\r\n        }\r\n    };\r\n\r\n} // namespace std\r\n\r\nSTATIC_ASSERT(!hash_disabled<Hashable>());\r\nSTATIC_ASSERT(hash_disabled<NotHashable>());\r\n\r\nenum NonScopedEnum : int { xNonScoped, yNonScoped };\r\nenum class ScopedEnum : int { x, y };\r\n\r\nSTATIC_ASSERT(standard_hash_enabled<NonScopedEnum>());\r\nSTATIC_ASSERT(standard_hash_enabled<ScopedEnum>());\r\n\r\nvoid test_enum_hash_invariants() {\r\n    hash<int> hInt;\r\n    hash<NonScopedEnum> hNonScoped;\r\n    hash<ScopedEnum> hScoped;\r\n\r\n    assert(hInt(0) == hNonScoped(xNonScoped));\r\n    assert(hInt(0) == hScoped(ScopedEnum::x));\r\n}\r\n\r\ntemplate <typename Float>\r\nvoid test_float_hash_invariants() {\r\n    // positive and negative zero have the same hash\r\n    Float positiveZero = 0;\r\n    Float negativeZero = -positiveZero;\r\n    hash<Float> hf;\r\n    assert(hf(positiveZero) == hf(negativeZero));\r\n}\r\n\r\nvoid test_pointer_hash_invariants() {\r\n    hash<void*> hVoid;\r\n    hash<nullptr_t> hNullptr;\r\n    assert(hVoid(nullptr) == hNullptr(nullptr));\r\n}\r\n\r\nvoid test_unique_ptr_hash_invariants() {\r\n    STATIC_ASSERT(standard_hash_enabled<unique_ptr<int>>());\r\n    const auto x = make_unique<int>(70);\r\n    assert(hash<unique_ptr<int>>{}(x) == hash<int*>{}(x.get()));\r\n}\r\n\r\nvoid test_shared_ptr_hash_invariants() {\r\n    STATIC_ASSERT(standard_hash_enabled<shared_ptr<int>>());\r\n    const auto x = make_shared<int>(70);\r\n    assert(hash<shared_ptr<int>>{}(x) == hash<int*>{}(x.get()));\r\n}\r\n\r\ntemplate <class CharT>\r\nvoid test_string_T_hash_invariants(const CharT* const exampleStr) {\r\n    STATIC_ASSERT(standard_hash_enabled<basic_string<CharT>>());\r\n#if _HAS_CXX17\r\n    static_assert(standard_hash_enabled<basic_string_view<CharT>>());\r\n\r\n    hash<basic_string<CharT>> hString;\r\n    hash<basic_string_view<CharT>> hStringView;\r\n    assert(hString(exampleStr) == hStringView(exampleStr));\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n    (void) exampleStr;\r\n#endif // _HAS_CXX17\r\n}\r\n\r\nvoid test_string_hash_invariants() {\r\n    test_string_T_hash_invariants(\"example\");\r\n    test_string_T_hash_invariants(L\"example\");\r\n    test_string_T_hash_invariants(u\"example\");\r\n    test_string_T_hash_invariants(U\"example\");\r\n}\r\n\r\nvoid test_optional_hash_invariants() {\r\n#if _HAS_CXX17\r\n    static_assert(hash_disabled<optional<NotHashable>>());\r\n    static_assert(hash_disabled<optional<const NotHashable>>());\r\n    static_assert(standard_hash_enabled<optional<Hashable>, false>());\r\n    static_assert(standard_hash_enabled<optional<const Hashable>, false>());\r\n    static_assert(hash_disabled<optional<volatile Hashable>>());\r\n    static_assert(hash_disabled<optional<const volatile Hashable>>());\r\n    static_assert(standard_hash_enabled<optional<int>>()); // Tests for strengthened noexcept\r\n    static_assert(standard_hash_enabled<optional<const int>>()); // Tests for strengthened noexcept\r\n\r\n    hash<optional<Hashable>> hOptHashable;\r\n    hash<optional<int>> hOptInt;\r\n    hash<optional<const int>> hOptConstInt;\r\n\r\n    optional<int> disengagedInt;\r\n    optional<const int> disengagedConstInt;\r\n    optional<int> engagedInt(42);\r\n    optional<const int> engagedConstInt(42);\r\n\r\n    // all disengaged optionals have the same unspecified value hash\r\n    // (may technically be an implementation assumption)\r\n    assert(hOptHashable(optional<Hashable>{}) == hOptInt(disengagedInt));\r\n    assert(hOptHashable(optional<Hashable>{}) == hOptInt(disengagedConstInt));\r\n\r\n    // all engaged optionals forward to hash<remove_const_t<T>>\r\n    assert(hOptHashable(optional<Hashable>(Hashable{})) == 5925961);\r\n    assert(hOptInt(engagedInt) == hOptConstInt(engagedConstInt));\r\n#endif // _HAS_CXX17\r\n}\r\n\r\nvoid test_variant_hash_invariants() {\r\n#if _HAS_CXX17\r\n    static_assert(standard_hash_enabled<variant<int, double>>()); // Tests for strengthened noexcept\r\n    static_assert(hash_disabled<variant<NotHashable, NotHashable>>());\r\n    static_assert(hash_disabled<variant<NotHashable, Hashable>>());\r\n    static_assert(hash_disabled<variant<Hashable, NotHashable>>());\r\n    static_assert(standard_hash_enabled<variant<Hashable, Hashable>, false>());\r\n    static_assert(standard_hash_enabled<variant<const Hashable, Hashable>, false>());\r\n    static_assert(hash_disabled<variant<volatile Hashable, Hashable>>());\r\n    static_assert(hash_disabled<variant<const volatile Hashable, Hashable>>());\r\n    static_assert(standard_hash_enabled<monostate>());\r\n\r\n    {\r\n        variant<int, const int, double, const double> vInt(in_place_index<0>, 1234);\r\n        variant<int, const int, double, const double> vConstInt(in_place_index<1>, 1234);\r\n        variant<int, const int, double, const double> vDouble(in_place_index<2>, 42.0);\r\n        variant<int, const int, double, const double> vConstDouble(in_place_index<3>, 42.0);\r\n\r\n        hash<variant<int, const int, double, const double>> hV;\r\n        assert(hV(vInt) == hV(vConstInt));\r\n        assert(hV(vDouble) == hV(vConstDouble));\r\n    }\r\n\r\n    {\r\n        variant<int, Hashable> vInt(in_place_index<0>, 1234);\r\n        variant<int, Hashable> vHashable(in_place_index<1>);\r\n        hash<variant<int, Hashable>> hV;\r\n        assert(hV(vInt) == hash<int>{}(1234));\r\n        assert(hV(vHashable) == 5925961);\r\n    }\r\n#endif // _HAS_CXX17\r\n}\r\n\r\nint main() {\r\n    test_enum_hash_invariants();\r\n\r\n    test_float_hash_invariants<float>();\r\n    test_float_hash_invariants<double>();\r\n    test_float_hash_invariants<long double>();\r\n\r\n    test_pointer_hash_invariants();\r\n    test_unique_ptr_hash_invariants();\r\n    test_shared_ptr_hash_invariants();\r\n\r\n    test_string_hash_invariants();\r\n    test_optional_hash_invariants();\r\n    test_variant_hash_invariants();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0528R3_cmpxchg_pad/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0528R3_cmpxchg_pad/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <atomic>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstring>\r\n#include <type_traits>\r\n\r\nstruct X0 {\r\n    void operator&() const = delete;\r\n};\r\n\r\n\r\nstruct X1 {\r\n    char x : 6;\r\n\r\n    void operator&() const = delete;\r\n\r\n    void set(const char v) {\r\n        x = v;\r\n    }\r\n\r\n    bool check(const char v) const {\r\n        return x == v;\r\n    }\r\n};\r\n\r\nstruct X2 {\r\n    short x : 9;\r\n\r\n    void operator&() const = delete;\r\n\r\n    void set(const char v) {\r\n        x = v;\r\n    }\r\n\r\n    bool check(const char v) const {\r\n        return x == v;\r\n    }\r\n};\r\n\r\n#pragma pack(push, 1)\r\nstruct X3 {\r\n    char x : 4;\r\n    char : 2;\r\n    char y : 1;\r\n    short z;\r\n\r\n    void operator&() const = delete;\r\n\r\n    void set(const char v) {\r\n        x = v;\r\n        y = 0;\r\n        z = ~v;\r\n    }\r\n\r\n    bool check(const char v) const {\r\n        return x == v && z == ~v;\r\n    }\r\n};\r\n#pragma pack(pop)\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4324) // '%s': structure was padded due to alignment specifier\r\nstruct alignas(4) X4 {\r\n    char x;\r\n\r\n    void operator&() const = delete;\r\n\r\n    void set(const char v) {\r\n        x = v;\r\n    }\r\n\r\n    bool check(const char v) const {\r\n        return x == v;\r\n    }\r\n};\r\n#pragma warning(pop)\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4324) // '%s': structure was padded due to alignment specifier\r\nstruct X6 {\r\n    char x;\r\n    alignas(2) char y[2];\r\n    char z;\r\n\r\n    void operator&() const = delete;\r\n\r\n    void set(const char v) {\r\n        x = v;\r\n        std::memset(&y, 0, sizeof(y));\r\n        z = ~v;\r\n    }\r\n\r\n    bool check(const char v) const {\r\n        return x == v && z == ~v;\r\n    }\r\n};\r\n#pragma warning(pop)\r\n\r\nstruct X8 {\r\n    char x;\r\n    long y;\r\n\r\n    void operator&() const = delete;\r\n\r\n    void set(const char v) {\r\n        x = v;\r\n        y = 0;\r\n    }\r\n\r\n    bool check(const char v) const {\r\n        return x == v;\r\n    }\r\n};\r\n\r\n#pragma pack(push, 1)\r\nstruct X9 {\r\n    X8 x;\r\n    char z;\r\n\r\n    void operator&() const = delete;\r\n\r\n    void set(const char v) {\r\n        x.set(v);\r\n        z = ~v;\r\n    }\r\n\r\n    bool check(const char v) const {\r\n        return x.check(v) && z == ~v;\r\n    }\r\n};\r\n#pragma pack(pop)\r\n\r\nstruct X16 {\r\n    long x;\r\n    char y;\r\n    long long z;\r\n\r\n    void operator&() const = delete;\r\n\r\n    void set(const char v) {\r\n        x = v;\r\n        y = 0;\r\n        z = ~v;\r\n    }\r\n\r\n    bool check(const char v) const {\r\n        return x == v && z == ~v;\r\n    }\r\n};\r\n\r\nstruct X20 {\r\n    long x;\r\n    long y[3];\r\n    char z;\r\n\r\n    void operator&() const = delete;\r\n\r\n    void set(const char v) {\r\n        x = v;\r\n        std::memset(&y, 0, sizeof(y));\r\n        z = ~v;\r\n    }\r\n\r\n    bool check(const char v) const {\r\n        return x == v && z == ~v;\r\n    }\r\n};\r\n\r\n\r\ntemplate <class X>\r\nvoid test_atomic() {\r\n    X x1;\r\n    X x2;\r\n    X x3;\r\n    X x4;\r\n    std::memset(std::addressof(x1), 0xaa, sizeof(x1));\r\n    std::memset(std::addressof(x2), 0x55, sizeof(x2));\r\n    std::memset(std::addressof(x3), 0x55, sizeof(x3));\r\n    std::memset(std::addressof(x4), 0x55, sizeof(x4));\r\n    x1.set(5);\r\n    x2.set(5);\r\n    x3.set(6);\r\n    x4.set(7);\r\n\r\n    std::atomic<X> v;\r\n    v.store(x1);\r\n    X x;\r\n    std::memcpy(std::addressof(x), std::addressof(x3), sizeof(x));\r\n    assert(!v.compare_exchange_strong(x, x4));\r\n    assert(v.load().check(5));\r\n\r\n    v.store(x1);\r\n    for (int retry = 0; retry != 10; ++retry) {\r\n        X xw;\r\n        std::memcpy(std::addressof(xw), std::addressof(x3), sizeof(x));\r\n        assert(!v.compare_exchange_weak(xw, x4));\r\n        assert(v.load().check(5));\r\n    }\r\n\r\n    v.store(x1);\r\n    std::memcpy(std::addressof(x), std::addressof(x2), sizeof(x));\r\n    assert(v.compare_exchange_strong(x, x3));\r\n    assert(v.load().check(6));\r\n\r\n    v.store(x1);\r\n    for (;;) {\r\n        X xw;\r\n        std::memcpy(std::addressof(xw), std::addressof(x2), sizeof(x));\r\n        if (v.compare_exchange_weak(xw, x3)) {\r\n            break;\r\n        }\r\n    }\r\n    assert(v.load().check(6));\r\n}\r\n\r\ntemplate <class X>\r\nvoid test_atomic_0() {\r\n    X x1;\r\n    X x2;\r\n    X x3;\r\n    std::memset(std::addressof(x1), 0xaa, sizeof(x1));\r\n    std::memset(std::addressof(x2), 0x55, sizeof(x2));\r\n    std::memset(std::addressof(x3), 0x55, sizeof(x3));\r\n\r\n    std::atomic<X> v;\r\n    v.store(x1);\r\n    X x;\r\n    std::memcpy(std::addressof(x), std::addressof(x3), sizeof(x));\r\n    assert(v.compare_exchange_strong(x1, x2));\r\n}\r\n\r\ntemplate <class X>\r\nvoid test_atomic_ref() {\r\n    X x1;\r\n    X x2;\r\n    X x3;\r\n    X x4;\r\n    std::memset(std::addressof(x1), 0xaa, sizeof(x1));\r\n    std::memset(std::addressof(x2), 0x55, sizeof(x2));\r\n    std::memset(std::addressof(x3), 0x55, sizeof(x3));\r\n    std::memset(std::addressof(x4), 0x55, sizeof(x4));\r\n    x1.set(5);\r\n    x2.set(5);\r\n    x3.set(6);\r\n    x4.set(7);\r\n\r\n    alignas(std::atomic_ref<X>::required_alignment) X v = x1;\r\n    X x;\r\n    std::memcpy(std::addressof(x), std::addressof(x3), sizeof(x));\r\n    assert(!std::atomic_ref<X>(v).compare_exchange_strong(x, x4));\r\n    assert(std::atomic_ref<X>(v).load().check(5));\r\n\r\n    std::atomic_ref<X>(v).store(x1);\r\n    for (int retry = 0; retry != 10; ++retry) {\r\n        X xw;\r\n        std::memcpy(std::addressof(xw), std::addressof(x3), sizeof(x));\r\n        assert(!std::atomic_ref<X>(v).compare_exchange_weak(xw, x4));\r\n        assert(std::atomic_ref<X>(v).load().check(5));\r\n    }\r\n\r\n    std::atomic_ref<X>(v).store(x1);\r\n    std::memcpy(std::addressof(x), std::addressof(x2), sizeof(x));\r\n    assert(std::atomic_ref<X>(v).compare_exchange_strong(x, x3));\r\n    assert(std::atomic_ref<X>(v).load().check(6));\r\n\r\n    std::atomic_ref<X>(v).store(x1);\r\n    for (;;) {\r\n        X xw;\r\n        std::memcpy(std::addressof(xw), std::addressof(x2), sizeof(x));\r\n        if (std::atomic_ref<X>(v).compare_exchange_weak(xw, x3)) {\r\n            break;\r\n        }\r\n    }\r\n    assert(std::atomic_ref<X>(v).load().check(6));\r\n}\r\n\r\ntemplate <class X>\r\nvoid test_atomic_ref_0() {\r\n    X x1;\r\n    X x2;\r\n    X x3;\r\n    std::memset(std::addressof(x1), 0xaa, sizeof(x1));\r\n    std::memset(std::addressof(x2), 0x55, sizeof(x2));\r\n    std::memset(std::addressof(x3), 0x55, sizeof(x3));\r\n\r\n    alignas(std::atomic_ref<X>::required_alignment) X v = x1;\r\n    X x;\r\n    std::memcpy(std::addressof(x), std::addressof(x3), sizeof(x));\r\n    assert(std::atomic_ref<X>(v).compare_exchange_strong(x1, x2));\r\n}\r\n\r\ntemplate <class X, std::size_t S>\r\nvoid test() {\r\n    static_assert(sizeof(X) == S, \"Unexpected size\");\r\n    static_assert(\r\n        !std::has_unique_object_representations_v<X>, \"Type without padding is not useful for testing P0528.\");\r\n    test_atomic<X>();\r\n    test_atomic_ref<X>();\r\n}\r\n\r\ntemplate <class X>\r\nvoid test0() {\r\n    static_assert(\r\n        !std::has_unique_object_representations_v<X>, \"Type without padding is not useful for testing P0528.\");\r\n    test_atomic_0<X>();\r\n    test_atomic_ref_0<X>();\r\n}\r\n\r\nint main() {\r\n#ifndef __clang__ // TRANSITION, LLVM-46685\r\n    test0<X0>();\r\n    test<X1, 1>();\r\n    test<X2, 2>();\r\n    test<X3, 3>();\r\n    test<X4, 4>();\r\n    test<X6, 6>();\r\n    test<X8, 8>();\r\n    test<X9, 9>();\r\n    test<X16, 16>();\r\n    test<X20, 20>();\r\n#endif // ^^^ no workaround ^^^\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0553R4_bit_rotating_and_counting_functions/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"\"\r\n*\tPM_CL=\"/arch:AVX2\"\r\n"
  },
  {
    "path": "tests/std/tests/P0553R4_bit_rotating_and_counting_functions/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n#include <bit>\r\n#include <cassert>\r\n#include <limits>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename T>\r\nconstexpr bool test_countl_zero() {\r\n    constexpr int digits = numeric_limits<T>::digits;\r\n    assert(countl_zero(T{0}) == digits);\r\n    assert(countl_zero(numeric_limits<T>::max()) == 0);\r\n    assert(countl_zero(T{1}) == digits - 1);\r\n    for (int i = 1; i < digits; ++i) {\r\n        const auto one_in_ith_place = static_cast<T>(T{1} << i);\r\n        assert(countl_zero(one_in_ith_place) == digits - i - 1);\r\n        assert(countl_zero(static_cast<T>(one_in_ith_place - 1)) == digits - i);\r\n        assert(countl_zero(static_cast<T>(one_in_ith_place + 1)) == digits - i - 1);\r\n    }\r\n    return true;\r\n}\r\n\r\ntemplate <typename T>\r\nconstexpr bool test_countr_zero() {\r\n    constexpr int digits = numeric_limits<T>::digits;\r\n    assert(countr_zero(T{0}) == digits);\r\n    assert(countr_zero(numeric_limits<T>::max()) == 0);\r\n    assert(countr_zero(T{1}) == 0);\r\n    for (int i = 1; i < digits; ++i) {\r\n        const auto one_in_ith_place = static_cast<T>(T{1} << i);\r\n        assert(countr_zero(one_in_ith_place) == i);\r\n        assert(countr_zero(static_cast<T>(one_in_ith_place + 1)) == 0);\r\n        assert(countr_zero(static_cast<T>(one_in_ith_place - 1)) == 0);\r\n    }\r\n    return true;\r\n}\r\n\r\ntemplate <typename T>\r\nconstexpr bool test_countl_one() {\r\n    constexpr int digits = numeric_limits<T>::digits;\r\n    assert(countl_one(numeric_limits<T>::max()) == digits);\r\n    assert(countl_one(T{0}) == 0);\r\n    assert(countl_one(static_cast<T>(~T{1})) == digits - 1);\r\n    assert(countl_one(static_cast<T>(~T{1} + 1)) == digits);\r\n    for (int i = 1; i < digits; ++i) {\r\n        const auto zero_in_ith_place = static_cast<T>(~(T{1} << i));\r\n        assert(countl_one(zero_in_ith_place) == digits - i - 1);\r\n        assert(countl_one(static_cast<T>(zero_in_ith_place + 1)) == digits - i);\r\n        assert(countl_one(static_cast<T>(zero_in_ith_place - 1)) == digits - i - 1);\r\n    }\r\n    return true;\r\n}\r\n\r\ntemplate <typename T>\r\nconstexpr bool test_countr_one() {\r\n    constexpr int digits = numeric_limits<T>::digits;\r\n    assert(countr_one(T{0}) == 0);\r\n    assert(countr_one(numeric_limits<T>::max()) == digits);\r\n    assert(countr_one(static_cast<T>(~T{1})) == 0);\r\n    for (int i = 1; i < digits; ++i) {\r\n        const auto zero_in_ith_place = static_cast<T>(~(T{1} << i));\r\n        assert(countr_one(zero_in_ith_place) == i);\r\n        assert(countr_one(static_cast<T>(zero_in_ith_place - 1)) == 0);\r\n        assert(countr_one(static_cast<T>(zero_in_ith_place + 1)) == 0);\r\n    }\r\n    return true;\r\n}\r\n\r\ntemplate <typename T>\r\nconstexpr bool test_popcount() {\r\n    constexpr int digits = numeric_limits<T>::digits;\r\n    assert(popcount(T{0}) == 0);\r\n    assert(popcount(numeric_limits<T>::max()) == digits);\r\n    assert(popcount(T{1}) == 1);\r\n    for (int i = 1; i < digits; ++i) {\r\n        const auto one_in_ith_place = static_cast<T>(T{1} << i);\r\n        assert(popcount(one_in_ith_place) == 1);\r\n        assert(popcount(static_cast<T>(one_in_ith_place - 1)) == i);\r\n        assert(popcount(static_cast<T>(one_in_ith_place + 1)) == 2);\r\n    }\r\n    return true;\r\n}\r\n\r\ntemplate <typename T>\r\nconstexpr bool test_rotl() {\r\n    constexpr int digits  = numeric_limits<T>::digits;\r\n    constexpr auto maxval = numeric_limits<T>::max();\r\n\r\n    constexpr T every_fourth[4] = {\r\n        static_cast<T>(0x1111'1111'1111'1111ULL),\r\n        static_cast<T>(0x2222'2222'2222'2222ULL),\r\n        static_cast<T>(0x4444'4444'4444'4444ULL),\r\n        static_cast<T>(0x8888'8888'8888'8888ULL),\r\n    };\r\n\r\n    for (int i = 0; i < digits * 2; ++i) {\r\n        assert(rotl(maxval, i) == maxval);\r\n        assert(rotl(T{0}, i) == 0);\r\n\r\n        for (int j = 0; j < 4; ++j) {\r\n            assert(rotl(every_fourth[j], i) == every_fourth[(i + j) % 4]);\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\ntemplate <typename T>\r\nconstexpr bool test_rotr() {\r\n    constexpr int digits  = numeric_limits<T>::digits;\r\n    constexpr auto maxval = numeric_limits<T>::max();\r\n\r\n    constexpr T every_fourth[4] = {\r\n        static_cast<T>(0x1111'1111'1111'1111ULL),\r\n        static_cast<T>(0x2222'2222'2222'2222ULL),\r\n        static_cast<T>(0x4444'4444'4444'4444ULL),\r\n        static_cast<T>(0x8888'8888'8888'8888ULL),\r\n    };\r\n\r\n    for (int i = 0; i < digits * 2; ++i) {\r\n        assert(rotr(maxval, i) == maxval);\r\n        assert(rotr(T{0}, i) == 0);\r\n\r\n        for (int j = 0; j < 4; ++j) {\r\n            assert(rotr(every_fourth[(i + j) % 4], i) == every_fourth[j]);\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\n// Tests functions for 64-bit operands that have either high or low halves as zero.\r\n// These may be split into two operations on 32-bit platforms and we need to check\r\n// if we handle the == zero or == ones case correctly.\r\nconstexpr bool test_64bit_split_ops() {\r\n    constexpr unsigned long long zero_one = 0x0000'0000'FFFF'FFFF;\r\n    constexpr unsigned long long one_zero = 0xFFFF'FFFF'0000'0000;\r\n    assert(popcount(zero_one) == 32);\r\n    assert(popcount(one_zero) == 32);\r\n    assert(countr_zero(zero_one) == 0);\r\n    assert(countr_zero(one_zero) == 32);\r\n    assert(countl_zero(zero_one) == 32);\r\n    assert(countl_zero(one_zero) == 0);\r\n    assert(countr_one(zero_one) == 32);\r\n    assert(countr_one(one_zero) == 0);\r\n    assert(countl_one(zero_one) == 0);\r\n    assert(countl_one(one_zero) == 32);\r\n    return true;\r\n}\r\n\r\ntemplate <typename T>\r\nconstexpr bool test_popcount_specialcases() {\r\n    constexpr int digits = numeric_limits<T>::digits;\r\n    assert(popcount(T{0x0}) == 0);\r\n    assert(popcount(T{0xFF}) == 8);\r\n    assert(popcount(T{0xAA}) == 4);\r\n    assert(popcount(T{0x80}) == 1);\r\n    assert(popcount(T{0x55}) == 4);\r\n\r\n    if constexpr (digits >= 16) {\r\n        assert(popcount(T{0xFFFF}) == 16);\r\n        assert(popcount(T{0xAAAA}) == 8);\r\n        assert(popcount(T{0x8000}) == 1);\r\n        assert(popcount(T{0x5555}) == 8);\r\n    }\r\n\r\n    if constexpr (digits >= 32) {\r\n        assert(popcount(T{0xFFFFFFFF}) == 32);\r\n        assert(popcount(T{0xAAAAAAAA}) == 16);\r\n        assert(popcount(T{0x80000000}) == 1);\r\n        assert(popcount(T{0x55555555}) == 16);\r\n    }\r\n\r\n    if constexpr (digits >= 64) {\r\n        assert(popcount(T{0xFFFFFFFF'FFFFFFFF}) == 64);\r\n        assert(popcount(T{0xAAAAAAAA'AAAAAAAA}) == 32);\r\n        assert(popcount(T{0x80000000'00000000}) == 1);\r\n        assert(popcount(T{0x55555555'55555555}) == 32);\r\n    }\r\n    return true;\r\n}\r\n\r\ntemplate <typename T>\r\nvoid test_all() {\r\n    static_assert(test_countl_zero<T>());\r\n    test_countl_zero<T>();\r\n    static_assert(test_countr_zero<T>());\r\n    test_countr_zero<T>();\r\n    static_assert(test_countl_one<T>());\r\n    test_countl_one<T>();\r\n    static_assert(test_countr_one<T>());\r\n    test_countr_one<T>();\r\n    static_assert(test_popcount<T>());\r\n    test_popcount<T>();\r\n    static_assert(test_rotl<T>());\r\n    test_rotl<T>();\r\n    static_assert(test_rotr<T>());\r\n    test_rotr<T>();\r\n    static_assert(test_64bit_split_ops());\r\n    test_64bit_split_ops();\r\n    static_assert(test_popcount_specialcases<T>());\r\n    test_popcount_specialcases<T>();\r\n}\r\n\r\nint main() {\r\n    test_all<unsigned char>();\r\n    test_all<unsigned short>();\r\n    test_all<unsigned int>();\r\n    test_all<unsigned long>();\r\n    test_all<unsigned long long>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0556R3_bit_integral_power_of_two_operations/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"\"\r\n*\tPM_CL=\"/arch:AVX2\"\r\n"
  },
  {
    "path": "tests/std/tests/P0556R3_bit_integral_power_of_two_operations/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n#include <bit>\r\n#include <cassert>\r\n#include <limits>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename T>\r\nconstexpr bool test_has_single_bit() {\r\n    assert(!has_single_bit(T{0}));\r\n    assert(!has_single_bit(numeric_limits<T>::max()));\r\n    assert(has_single_bit(T{1}));\r\n    assert(has_single_bit(T{2}));\r\n    for (int i = 2; i < numeric_limits<T>::digits; ++i) {\r\n        const T ith_power_of_two = static_cast<T>(T{1} << i);\r\n        assert(has_single_bit(ith_power_of_two));\r\n        assert(!has_single_bit(static_cast<T>(ith_power_of_two - 1)));\r\n        assert(!has_single_bit(static_cast<T>(ith_power_of_two + 1)));\r\n    }\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_bit_ceil_specialcases_unsigned() {\r\n    assert(bit_ceil(0x6FFFFFFFu) == 0x80000000u);\r\n    assert(bit_ceil(0x6FFFFFFF'FFFFFFFFull) == 0x80000000'00000000ull);\r\n    return true;\r\n}\r\n\r\ntemplate <typename T>\r\nconstexpr bool test_bit_ceil() {\r\n    constexpr int digits = numeric_limits<T>::digits;\r\n    assert(bit_ceil(T{0}) == T{1});\r\n    assert(bit_ceil(T{1}) == T{1});\r\n    assert(bit_ceil(T{2}) == T{2});\r\n    assert(bit_ceil(T{3}) == T{4});\r\n    for (int i = 2; i < digits - 1; ++i) {\r\n        const auto one_in_ith_place = static_cast<T>(T{1} << i);\r\n        assert(bit_ceil(static_cast<T>(one_in_ith_place - 1)) == one_in_ith_place);\r\n        assert(bit_ceil(one_in_ith_place) == one_in_ith_place);\r\n        assert(bit_ceil(static_cast<T>(one_in_ith_place + 1)) == static_cast<T>(one_in_ith_place << 1));\r\n    }\r\n    constexpr auto one_in_last_place = static_cast<T>(T{1} << (digits - 1));\r\n    assert(bit_ceil(one_in_last_place) == one_in_last_place);\r\n    assert(bit_ceil(static_cast<T>(one_in_last_place - 1)) == one_in_last_place);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_bit_floor_specialcases_unsigned() {\r\n    assert(bit_floor(0xFFFFFFFFu) == 0x80000000u);\r\n    // some hex literals are never hungry\r\n    assert(bit_floor(0xFFFFFFFF'FFFFFFFFull) == 0x80000000'00000000ull);\r\n    assert(bit_floor(0x0A930432u) == 0x8000000u);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <typename T>\r\nconstexpr bool test_bit_floor() {\r\n    constexpr int digits = numeric_limits<T>::digits;\r\n    assert(bit_floor(T{0}) == T{0});\r\n    assert(bit_floor(T{1}) == T{1});\r\n    for (int i = 1; i < digits - 1; ++i) {\r\n        const auto one_in_ith_place = static_cast<T>(T{1} << i);\r\n        assert(bit_floor(static_cast<T>(one_in_ith_place - 1)) == static_cast<T>(one_in_ith_place >> 1));\r\n        assert(bit_floor(one_in_ith_place) == one_in_ith_place);\r\n        assert(bit_floor(static_cast<T>(one_in_ith_place + 1)) == one_in_ith_place);\r\n    }\r\n    constexpr auto one_in_last_place = static_cast<T>(T{1} << (digits - 1));\r\n    assert(bit_floor(one_in_last_place) == one_in_last_place);\r\n    assert(bit_floor(static_cast<T>(one_in_last_place - 1)) == static_cast<T>(one_in_last_place >> 1));\r\n    return true;\r\n}\r\n\r\ntemplate <typename T>\r\nconstexpr bool test_bit_width() {\r\n    constexpr int digits = numeric_limits<T>::digits;\r\n    assert(bit_width(T{0}) == 0);\r\n    assert(bit_width(numeric_limits<T>::max()) == digits);\r\n    assert(bit_width(T{1}) == 1);\r\n    for (int i = 1; i < digits; ++i) {\r\n        assert(bit_width(static_cast<T>(T{1} << i)) == i + 1);\r\n    }\r\n\r\n    // LWG-3656: bit_width returns int\r\n    static_assert(is_same_v<decltype(bit_width(T{0})), int>);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <typename T>\r\nvoid test_all() {\r\n    static_assert(test_has_single_bit<T>());\r\n    test_has_single_bit<T>();\r\n    static_assert(test_bit_ceil<T>());\r\n    test_bit_ceil<T>();\r\n    static_assert(test_bit_floor<T>());\r\n    test_bit_floor<T>();\r\n    static_assert(test_bit_width<T>());\r\n    test_bit_width<T>();\r\n}\r\n\r\nint main() {\r\n    test_all<unsigned char>();\r\n    test_all<unsigned short>();\r\n    test_all<unsigned int>();\r\n    test_all<unsigned long>();\r\n    test_all<unsigned long long>();\r\n    test_bit_floor_specialcases_unsigned();\r\n    test_bit_ceil_specialcases_unsigned();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0586R2_integer_comparison/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0586R2_integer_comparison/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//\r\n// Tests the new functions added as part of P0586R2, \"Integer Comparison Functions\"\r\n//\r\n\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <limits>\r\n#include <utility>\r\nusing namespace std;\r\n\r\ntemplate <typename T, typename U>\r\nconstexpr void test_less(const T t, const U u) {\r\n    assert(!cmp_equal(t, u));\r\n    assert(!cmp_equal(u, t));\r\n    assert(cmp_not_equal(t, u));\r\n    assert(cmp_not_equal(u, t));\r\n    assert(cmp_less(t, u));\r\n    assert(!cmp_less(u, t));\r\n    assert(cmp_less_equal(t, u));\r\n    assert(!cmp_less_equal(u, t));\r\n    assert(cmp_greater(u, t));\r\n    assert(!cmp_greater(t, u));\r\n    assert(cmp_greater_equal(u, t));\r\n    assert(!cmp_greater_equal(t, u));\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nconstexpr void test_equal(const T t, const U u) {\r\n    assert(cmp_equal(t, u));\r\n    assert(cmp_equal(u, t));\r\n    assert(!cmp_not_equal(t, u));\r\n    assert(!cmp_not_equal(u, t));\r\n    assert(!cmp_less(t, u));\r\n    assert(!cmp_less(u, t));\r\n    assert(cmp_less_equal(t, u));\r\n    assert(cmp_less_equal(u, t));\r\n    assert(!cmp_greater(u, t));\r\n    assert(!cmp_greater(t, u));\r\n    assert(cmp_greater_equal(u, t));\r\n    assert(cmp_greater_equal(t, u));\r\n}\r\n\r\ntemplate <typename Other, typename T>\r\nconstexpr void test_less_with(const T x, const T y) {\r\n    test_less(x, y);\r\n    test_less(x, static_cast<Other>(y));\r\n    test_less(static_cast<Other>(x), y);\r\n    test_less(static_cast<Other>(x), static_cast<Other>(y));\r\n}\r\n\r\ntemplate <typename Other, typename T>\r\nconstexpr void test_equal_with(const T x, const T y) {\r\n    test_equal(x, y);\r\n    test_equal(x, static_cast<Other>(y));\r\n    test_equal(static_cast<Other>(x), y);\r\n    test_equal(static_cast<Other>(x), static_cast<Other>(y));\r\n}\r\n\r\nconstexpr bool test() {\r\n    test_equal_with<long>(-1, -1);\r\n    test_equal_with<long>(0, 0);\r\n    test_equal_with<long>(1, 1);\r\n    test_less_with<long>(-42, -1);\r\n    test_less_with<long>(-1, 0);\r\n    test_less_with<long>(-1, 1);\r\n    test_less_with<long>(0, 1);\r\n    test_less_with<long>(1, 42);\r\n\r\n    test_equal_with<short>(-1, -1);\r\n    test_equal_with<short>(0, 0);\r\n    test_equal_with<short>(1, 1);\r\n    test_less_with<short>(-42, -1);\r\n    test_less_with<short>(-1, 0);\r\n    test_less_with<short>(-1, 1);\r\n    test_less_with<short>(0, 1);\r\n    test_less_with<short>(1, 42);\r\n\r\n    test_equal_with<unsigned int>(0, 0);\r\n    test_equal_with<unsigned int>(7, 7);\r\n    test_less_with<unsigned int>(0, 42);\r\n    test_less_with<unsigned int>(7, 42);\r\n\r\n    test_equal_with<unsigned short>(0, 0);\r\n    test_equal_with<unsigned short>(7, 7);\r\n    test_less_with<unsigned short>(0, 42);\r\n    test_less_with<unsigned short>(7, 42);\r\n\r\n    test_less(-1, 0u);\r\n    test_less(-1, 1u);\r\n\r\n    test_less(int8_t{-1}, static_cast<uint8_t>(-1));\r\n    test_less(int16_t{-1}, static_cast<uint16_t>(-1));\r\n    test_less(int32_t{-1}, static_cast<uint32_t>(-1));\r\n    test_less(int64_t{-1}, static_cast<uint64_t>(-1));\r\n\r\n    test_less(int64_t{-1000}, int8_t{5});\r\n    test_less(int64_t{-129}, int8_t{5});\r\n    test_less(int64_t{-128}, int8_t{5});\r\n    test_less(int64_t{-127}, int8_t{5});\r\n    test_less(int64_t{-5}, int8_t{5});\r\n    test_less(int64_t{-1}, int8_t{5});\r\n    test_less(int64_t{0}, int8_t{5});\r\n    test_less(int64_t{1}, int8_t{5});\r\n    test_less(int64_t{4}, int8_t{5});\r\n    test_equal(int8_t{5}, int64_t{5});\r\n    test_less(int8_t{5}, int64_t{6});\r\n    test_less(int8_t{5}, int64_t{126});\r\n    test_less(int8_t{5}, int64_t{127});\r\n    test_less(int8_t{5}, int64_t{128});\r\n    test_less(int8_t{5}, int64_t{1000});\r\n\r\n    test_less(int8_t{-128}, uint8_t{5});\r\n    test_less(int8_t{-128}, uint16_t{5});\r\n    test_less(int8_t{-128}, uint32_t{5});\r\n    test_less(int8_t{-128}, uint64_t{5});\r\n\r\n    test_less(int8_t{-128}, uint8_t{255});\r\n    test_less(int8_t{-128}, uint16_t{5000});\r\n    test_less(int8_t{-128}, uint32_t{5000});\r\n    test_less(int8_t{-128}, uint64_t{5000});\r\n\r\n    test_less(uint8_t{126}, int8_t{127});\r\n    test_less(uint16_t{126}, int8_t{127});\r\n    test_less(uint32_t{126}, int8_t{127});\r\n    test_less(uint64_t{126}, int8_t{127});\r\n\r\n    test_equal(int8_t{127}, uint8_t{127});\r\n    test_equal(int8_t{127}, uint16_t{127});\r\n    test_equal(int8_t{127}, uint32_t{127});\r\n    test_equal(int8_t{127}, uint64_t{127});\r\n\r\n    test_less(int8_t{127}, uint8_t{128});\r\n    test_less(int8_t{127}, uint16_t{128});\r\n    test_less(int8_t{127}, uint32_t{128});\r\n    test_less(int8_t{127}, uint64_t{128});\r\n\r\n    test_less(uint8_t{100}, uint64_t{1000});\r\n    test_less(uint64_t{10}, uint8_t{100});\r\n\r\n    assert(in_range<int>(1));\r\n    assert(in_range<int>(1L));\r\n    assert(!in_range<unsigned int>(-1));\r\n    assert(in_range<unsigned int>(0));\r\n    assert(in_range<unsigned int>(42));\r\n    assert(!in_range<int>(numeric_limits<long long>::min()));\r\n    assert(!in_range<int>(numeric_limits<long long>::max()));\r\n    assert(in_range<int>(numeric_limits<int>::min()));\r\n    assert(in_range<int>(numeric_limits<int>::max()));\r\n    assert(in_range<long>(numeric_limits<int>::min()));\r\n    assert(in_range<long>(numeric_limits<int>::max()));\r\n\r\n    assert(in_range<int16_t>(int8_t{-128}));\r\n    assert(in_range<int16_t>(int8_t{127}));\r\n\r\n    assert(in_range<int16_t>(int16_t{-32768}));\r\n    assert(in_range<int16_t>(int16_t{32767}));\r\n\r\n    assert(!in_range<int16_t>(int32_t{-32769}));\r\n    assert(in_range<int16_t>(int32_t{-32768}));\r\n    assert(in_range<int16_t>(int32_t{32767}));\r\n    assert(!in_range<int16_t>(int32_t{32768}));\r\n\r\n    assert(in_range<int16_t>(uint8_t{0}));\r\n    assert(in_range<int16_t>(uint8_t{255}));\r\n\r\n    assert(in_range<int16_t>(uint16_t{0}));\r\n    assert(in_range<int16_t>(uint16_t{32767}));\r\n    assert(!in_range<int16_t>(uint16_t{32768}));\r\n\r\n    assert(in_range<int16_t>(uint32_t{0}));\r\n    assert(in_range<int16_t>(uint32_t{32767}));\r\n    assert(!in_range<int16_t>(uint32_t{32768}));\r\n\r\n    assert(!in_range<uint16_t>(int8_t{-1}));\r\n    assert(in_range<uint16_t>(int8_t{0}));\r\n    assert(in_range<uint16_t>(int8_t{127}));\r\n\r\n    assert(!in_range<uint16_t>(int16_t{-1}));\r\n    assert(in_range<uint16_t>(int16_t{0}));\r\n    assert(in_range<uint16_t>(int16_t{32767}));\r\n\r\n    assert(!in_range<uint16_t>(int32_t{-1}));\r\n    assert(in_range<uint16_t>(int32_t{0}));\r\n    assert(in_range<uint16_t>(int32_t{65535}));\r\n    assert(!in_range<uint16_t>(int32_t{65536}));\r\n\r\n    assert(in_range<uint16_t>(uint8_t{0}));\r\n    assert(in_range<uint16_t>(uint8_t{255}));\r\n\r\n    assert(in_range<uint16_t>(uint16_t{0}));\r\n    assert(in_range<uint16_t>(uint16_t{65535}));\r\n\r\n    assert(in_range<uint16_t>(uint32_t{0}));\r\n    assert(in_range<uint16_t>(uint32_t{65535}));\r\n    assert(!in_range<uint16_t>(uint32_t{65536}));\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    assert(test());\r\n    static_assert(test());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0595R2_is_constant_evaluated/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0595R2_is_constant_evaluated/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <type_traits>\r\nusing namespace std;\r\n\r\nconstexpr int square(const int x) {\r\n    if (is_constant_evaluated()) {\r\n        return 1000 + x * x;\r\n    } else {\r\n        return x * x;\r\n    }\r\n}\r\n\r\nint cube(const int x) {\r\n    if (is_constant_evaluated()) {\r\n        return 2000 + x * x * x;\r\n    } else {\r\n        return x * x * x;\r\n    }\r\n}\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wconstant-evaluated\"\r\n#else // ^^^ clang / other vvv\r\n#pragma warning(push)\r\n#pragma warning(disable : 4365) // 'return': conversion from 'size_t' to 'int', signed/unsigned mismatch\r\n#pragma warning(disable : 5063) // 'std::is_constant_evaluated' always evaluates to true\r\n                                // in manifestly constant-evaluated expressions\r\n#endif // __clang__\r\nnamespace example { // Test the N4842 [expr.const]/13 example.\r\n    template <bool>\r\n    struct X {};\r\n    X<is_constant_evaluated()> x; // type X<true>\r\n    int y;\r\n    const int a = is_constant_evaluated() ? y : 1; // dynamic initialization to 1\r\n    // double z[a]; // ill-formed: a is not usable in constant expressions\r\n    const int b = is_constant_evaluated() ? 2 : y; // static initialization to 2\r\n    int c       = y + (is_constant_evaluated() ? 2 : y); // dynamic initialization to y + y\r\n    constexpr int f() {\r\n        const int n = is_constant_evaluated() ? 13 : 17; // n is 13\r\n        int m       = is_constant_evaluated() ? 13 : 17; // m might be 13 or 17 (see below)\r\n        char arr[n] = {}; // char[13]\r\n        return m + sizeof(arr);\r\n    }\r\n    int p = f(); // m is 13; initialized to 26\r\n    int q = p + f(); // m is 17 for this call; initialized to 56\r\n} // namespace example\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#else // ^^^ clang / other vvv\r\n#pragma warning(pop)\r\n#endif // __clang__\r\n\r\nint main() {\r\n    static_assert(is_same_v<decltype(is_constant_evaluated()), bool>);\r\n    static_assert(noexcept(is_constant_evaluated()));\r\n\r\n    int val_a           = square(3);\r\n    const int val_b     = square(4);\r\n    constexpr int val_c = square(5);\r\n    const int val_d     = square(val_a);\r\n\r\n    assert(val_a == 9);\r\n    assert(val_b == 1016);\r\n    assert(val_c == 1025);\r\n    assert(val_d == 81);\r\n\r\n    static_assert(val_b == 1016);\r\n    static_assert(val_c == 1025);\r\n\r\n    int val_e       = cube(7);\r\n    const int val_f = cube(8);\r\n\r\n    assert(val_e == 343);\r\n    assert(val_f == 512);\r\n\r\n    static_assert(is_same_v<decltype(example::x), example::X<true>>);\r\n    assert(example::a == 1);\r\n    assert(example::b == 2);\r\n    static_assert(example::b == 2);\r\n    assert(example::c == 0);\r\n    assert(example::p == 26);\r\n    assert(example::q == 56);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0607R0_inline_variables/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n"
  },
  {
    "path": "tests/std/tests/P0607R0_inline_variables/custom_format.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\n\r\nfrom stl.test.format import STLTestFormat, TestStep\r\nfrom stl.test.tests import TestType\r\n\r\n\r\nclass CustomTestFormat(STLTestFormat):\r\n    def getBuildSteps(self, test, litConfig, shared):\r\n        exeSource = test.getSourcePath()\r\n        test2Source = os.path.join(os.path.dirname(exeSource), 'test2.cpp')\r\n\r\n        _, outputBase = test.getTempPaths()\r\n\r\n        if TestType.COMPILE in test.testType:\r\n            cmd = [test.cxx, '/c', exeSource, test2Source, *test.flags, *test.compileFlags]\r\n        elif TestType.RUN in test.testType:\r\n            shared.execFile = outputBase + '.exe'\r\n            cmd = [test.cxx, exeSource, test2Source, *test.flags, *test.compileFlags, '/Fe' + shared.execFile,\r\n                   '/link', *test.linkFlags]\r\n\r\n        yield TestStep(cmd, shared.execDir, shared.env, False)\r\n"
  },
  {
    "path": "tests/std/tests/P0607R0_inline_variables/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0607R0_inline_variables/lit.local.cfg",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\nimport site\r\nsite.addsitedir(os.path.dirname(os.path.dirname(__file__)))\r\nimport P0607R0_inline_variables.custom_format\r\n\r\nconfig.test_format = P0607R0_inline_variables.custom_format.CustomTestFormat()\r\n"
  },
  {
    "path": "tests/std/tests/P0607R0_inline_variables/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nconst bool* test2_int_int();\r\nconst bool* test2_short_long();\r\n\r\nint main() {\r\n    const bool* const x1 = &is_same_v<int, int>;\r\n    const bool* const x2 = test2_int_int();\r\n\r\n    const bool* const y = &is_same_v<float, double>;\r\n    const bool* const z = test2_short_long();\r\n\r\n    vector<const bool*> v = {x1, x2, y, z};\r\n    sort(v.begin(), v.end());\r\n    v.erase(unique(v.begin(), v.end()), v.end());\r\n\r\n    assert(x1 == x2);\r\n    assert(v.size() == 3);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0607R0_inline_variables/test2.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <type_traits>\r\nusing namespace std;\r\n\r\nconst bool* test2_int_int() {\r\n    return &is_same_v<int, int>;\r\n}\r\n\r\nconst bool* test2_short_long() {\r\n    return &is_same_v<short, long>;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0608R3_improved_variant_converting_constructor/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0608R3_improved_variant_converting_constructor/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Also tests for P1957R2: Converting from T* to bool should be considered narrowing\r\n\r\n#include <bitset>\r\n#include <cassert>\r\n#include <functional>\r\n#include <optional>\r\n#include <string>\r\n#include <type_traits>\r\n#include <variant>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nstruct double_double {\r\n    double_double(double x) : x_(x) {}\r\n\r\n    double x_;\r\n};\r\nstruct convertible_bool {\r\n    convertible_bool(bool x) : x_(x) {}\r\n\r\n    operator bool() const noexcept {\r\n        return x_;\r\n    }\r\n\r\n    bool x_;\r\n};\r\nstruct default_struct {};\r\n\r\nvoid assert_P0608R3() {\r\n    // P0608R3 examples\r\n    static_assert(is_constructible_v<variant<string, bool>, const char*>);\r\n    static_assert(is_constructible_v<variant<string, bool>, string>);\r\n    static_assert(is_constructible_v<variant<char, optional<char16_t>>, char16_t>);\r\n    static_assert(is_constructible_v<variant<int, reference_wrapper<double>>, double&>);\r\n    static_assert(is_constructible_v<variant<float, int>, char>);\r\n    static_assert(is_constructible_v<variant<float, long>, int>);\r\n    static_assert(is_constructible_v<variant<float, long long>, int>);\r\n    static_assert(is_constructible_v<variant<float, long, double>, int>);\r\n    static_assert(is_constructible_v<variant<float, vector<int>, long long>, int>);\r\n    static_assert(is_constructible_v<variant<float, int, long long>, char>);\r\n    static_assert(!is_constructible_v<variant<float>, int>);\r\n    static_assert(!is_constructible_v<variant<float, vector<int>>, int>);\r\n    static_assert(!is_constructible_v<variant<float, char>, int>);\r\n\r\n    static_assert(is_assignable_v<variant<string, bool>&, const char*>);\r\n    static_assert(is_assignable_v<variant<string, bool>&, string>);\r\n    static_assert(is_assignable_v<variant<char, optional<char16_t>>&, char16_t>);\r\n    static_assert(is_assignable_v<variant<int, reference_wrapper<double>>&, double&>);\r\n    static_assert(is_assignable_v<variant<float, int>&, char>);\r\n    static_assert(is_assignable_v<variant<float, long>&, int>);\r\n    static_assert(is_assignable_v<variant<float, long long>&, int>);\r\n    static_assert(is_assignable_v<variant<float, long, double>&, int>);\r\n    static_assert(is_assignable_v<variant<float, vector<int>, long long>&, int>);\r\n    static_assert(is_assignable_v<variant<float, int, long long>&, char>);\r\n    static_assert(!is_assignable_v<variant<float>&, int>);\r\n    static_assert(!is_assignable_v<variant<float, vector<int>>&, int>);\r\n    static_assert(!is_assignable_v<variant<float, char>&, int>);\r\n}\r\n\r\nvoid assert_P1957R2() {\r\n    // P1957R2 examples\r\n    static_assert(is_constructible_v<variant<bool, int>, bool>);\r\n    static_assert(is_constructible_v<variant<bool, int>, bitset<4>::reference>);\r\n    static_assert(is_constructible_v<variant<bool>, bitset<4>::reference>);\r\n\r\n    static_assert(is_assignable_v<variant<bool, int>&, bool>);\r\n    static_assert(is_assignable_v<variant<bool, int>&, bitset<4>::reference>);\r\n    static_assert(is_assignable_v<variant<bool>&, bitset<4>::reference>);\r\n}\r\n\r\nvoid assert_more_examples() {\r\n    // More examples\r\n    static_assert(is_constructible_v<variant<double_double>, double>);\r\n    static_assert(is_constructible_v<variant<vector<vector<int>>, optional<int>, int>, int>);\r\n    static_assert(is_constructible_v<variant<vector<vector<int>>, optional<int>>, int>);\r\n    static_assert(is_constructible_v<variant<vector<int>, optional<int>, float>, int>);\r\n    static_assert(is_constructible_v<variant<bool>, convertible_bool>);\r\n    static_assert(is_constructible_v<variant<bool, int>, convertible_bool>);\r\n    static_assert(is_constructible_v<variant<convertible_bool>, bool>);\r\n    static_assert(is_constructible_v<variant<float, bool, convertible_bool>, convertible_bool>);\r\n    static_assert(is_constructible_v<variant<float, bool, convertible_bool>, bool>);\r\n    static_assert(is_constructible_v<variant<char, int>, bool>);\r\n    static_assert(is_constructible_v<variant<double_double>, int>);\r\n    static_assert(!is_constructible_v<variant<float>, unsigned int>);\r\n    static_assert(!is_constructible_v<variant<char, default_struct>, int>);\r\n    static_assert(!is_constructible_v<variant<float, long, long long>, int>);\r\n\r\n    static_assert(is_assignable_v<variant<double_double>&, double>);\r\n    static_assert(is_assignable_v<variant<vector<vector<int>>, optional<int>, int>&, int>);\r\n    static_assert(is_assignable_v<variant<vector<vector<int>>, optional<int>>&, int>);\r\n    static_assert(is_assignable_v<variant<vector<int>, optional<int>, float>&, int>);\r\n    static_assert(is_assignable_v<variant<bool>&, convertible_bool>);\r\n    static_assert(is_assignable_v<variant<bool, int>&, convertible_bool>);\r\n    static_assert(is_assignable_v<variant<convertible_bool>&, bool>);\r\n    static_assert(is_assignable_v<variant<float, bool, convertible_bool>&, convertible_bool>);\r\n    static_assert(is_assignable_v<variant<float, bool, convertible_bool>&, bool>);\r\n    static_assert(is_assignable_v<variant<char, int>&, bool>);\r\n    static_assert(is_assignable_v<variant<double_double>&, int>);\r\n    static_assert(!is_assignable_v<variant<float>&, unsigned int>);\r\n    static_assert(!is_assignable_v<variant<char, default_struct>&, int>);\r\n    static_assert(!is_assignable_v<variant<float, long, long long>&, int>);\r\n}\r\n\r\nvoid test_variant_constructor_P0608R3() {\r\n    // P0608R3 runtime checks\r\n    variant<string, bool> a = \"abc\"; // string\r\n    assert(a.index() == 0);\r\n    assert(get<0>(a) == \"abc\");\r\n\r\n    variant<char, optional<char16_t>> b = u'\\u2043'; // optional<char16_t>\r\n    assert(b.index() == 1);\r\n    assert(get<optional<char16_t>>(b) == u'\\u2043');\r\n\r\n    double c_data                             = 3.14;\r\n    variant<int, reference_wrapper<double>> c = c_data; // reference_wrapper<double>\r\n    assert(c.index() == 1);\r\n    assert(get<1>(c) == c_data);\r\n\r\n    variant<float, int> d;\r\n    assert(d.index() == 0);\r\n    d = 0; // int\r\n    assert(d.index() == 1);\r\n\r\n    variant<float, long> e;\r\n    assert(e.index() == 0);\r\n    e = 0; // long\r\n    assert(e.index() == 1);\r\n\r\n    variant<float, int> f = 'a'; // int\r\n    assert(f.index() == 1);\r\n    assert(get<int>(f) == 97);\r\n\r\n    variant<float, long> g = 0; // long\r\n    assert(g.index() == 1);\r\n\r\n    variant<float, long, double> h = 0; // long\r\n    assert(h.index() == 1);\r\n\r\n    variant<float, vector<int>, long long> i = 0; // long long\r\n    assert(i.index() == 2);\r\n\r\n    variant<float, int, long long> j = 'a'; // int\r\n    assert(j.index() == 1);\r\n    assert(get<int>(j) == 97);\r\n}\r\n\r\nvoid test_variant_constructor_P1957R2() {\r\n    bitset<4> a_bitset(\"0101\");\r\n    bool a_data          = a_bitset[2];\r\n    variant<bool, int> a = a_data; // bool\r\n    assert(a.index() == 0);\r\n    assert(get<0>(a));\r\n\r\n    bitset<4> b_bitset(\"0101\");\r\n    variant<bool, int> b  = b_bitset[2]; // bool\r\n    variant<bool, int> b2 = b_bitset[1]; // bool\r\n    assert(b.index() == 0);\r\n    assert(get<0>(b));\r\n    assert(b2.index() == 0);\r\n    assert(!get<0>(b2));\r\n}\r\n\r\nvoid test_variant_constructor_more_examples() {\r\n    variant<char, int, float, bool, vector<bool>> a = true; // bool\r\n    assert(a.index() == 3);\r\n\r\n    variant<bool, int> b = convertible_bool{true}; // bool\r\n    assert(b.index() == 0);\r\n    assert(get<0>(b));\r\n\r\n    variant<char, int, bool> c = false; // bool\r\n    assert(c.index() == 2);\r\n\r\n    variant<float, bool, convertible_bool> d = convertible_bool{true}; // convertible_bool\r\n    assert(d.index() == 2);\r\n\r\n    variant<float, bool, convertible_bool> e = bool{}; // bool\r\n    assert(e.index() == 1);\r\n    assert(!get<1>(e));\r\n\r\n    variant<float, bool> f = convertible_bool{false}; // bool\r\n    assert(f.index() == 1);\r\n    assert(!get<1>(f));\r\n\r\n    variant<bool, int> g = true_type{}; // bool\r\n    assert(g.index() == 0);\r\n    assert(get<0>(g));\r\n}\r\n\r\nvoid test_assignment_operator() {\r\n    variant<string, bool, int> a; // string\r\n    assert(a.index() == 0);\r\n    assert(get<string>(a) == \"\");\r\n    a = 3; // int\r\n    assert(a.index() == 2);\r\n    assert(get<int>(a) == 3);\r\n    a = true; // bool\r\n    assert(a.index() == 1);\r\n    assert(get<bool>(a) == true);\r\n\r\n    bool b_data                         = true;\r\n    variant<bool, int, double_double> b = b_data; // bool\r\n    assert(b.index() == 0);\r\n    assert(get<0>(b) == b_data);\r\n    b = 12; // int\r\n    assert(b.index() == 1);\r\n    assert(get<1>(b) == 12);\r\n    b = 12.5; // double_double\r\n    assert(b.index() == 2);\r\n    assert(get<2>(b).x_ == 12.5);\r\n\r\n    variant<void*, bool, double_double> c;\r\n    assert(c.index() == 0);\r\n    c = false; // bool\r\n    assert(c.index() == 1);\r\n    assert(get<1>(c) == false);\r\n    c = 5.12; // double_double\r\n    assert(c.index() == 2);\r\n    assert(get<2>(c).x_ == 5.12);\r\n    double_double c_data{1.2};\r\n    c = static_cast<void*>(&c_data); // void*\r\n    assert(c.index() == 0);\r\n    assert(static_cast<double_double*>(get<0>(c))->x_ == 1.2);\r\n}\r\n\r\nint main() {\r\n    assert_P0608R3();\r\n    assert_P1957R2();\r\n    assert_more_examples();\r\n    test_variant_constructor_P0608R3();\r\n    test_variant_constructor_P1957R2();\r\n    test_variant_constructor_more_examples();\r\n    test_assignment_operator();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0616R0_using_move_in_numeric/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0616R0_using_move_in_numeric/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <numeric>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nclass MoveCopyCounterType {\r\npublic:\r\n    int moves  = 0;\r\n    int copies = 0;\r\n\r\n    MoveCopyCounterType() = default;\r\n\r\n    MoveCopyCounterType(const MoveCopyCounterType& o) {\r\n        copies = o.copies + 1;\r\n        moves  = o.moves;\r\n    }\r\n\r\n    MoveCopyCounterType(MoveCopyCounterType&& o) {\r\n        moves  = o.moves + 1;\r\n        copies = o.copies;\r\n    }\r\n\r\n    MoveCopyCounterType& operator=(const MoveCopyCounterType&) = default;\r\n};\r\n\r\nstruct CopyFirstArgBinOpFunctor {\r\n    MoveCopyCounterType operator()(MoveCopyCounterType a, const MoveCopyCounterType&) {\r\n        return a;\r\n    }\r\n};\r\n\r\nstruct CopySecondArgBinOpFunctor {\r\n    MoveCopyCounterType operator()(const MoveCopyCounterType&, MoveCopyCounterType b) {\r\n        return b;\r\n    }\r\n};\r\n\r\nvoid assert_accumulate() {\r\n    vector<MoveCopyCounterType> test_vector(10);\r\n    MoveCopyCounterType output;\r\n    output = accumulate(begin(test_vector), end(test_vector), MoveCopyCounterType{}, CopyFirstArgBinOpFunctor{});\r\n    if (_HAS_CXX20) {\r\n        assert(output.copies == 0);\r\n        assert(output.moves == 21);\r\n    } else {\r\n        assert(output.copies == 10);\r\n        assert(output.moves == 11);\r\n    }\r\n}\r\n\r\nvoid assert_inner_product() {\r\n    vector<MoveCopyCounterType> test_vector1(10);\r\n    vector<MoveCopyCounterType> test_vector2(10);\r\n    MoveCopyCounterType output;\r\n    output = inner_product(begin(test_vector1), end(test_vector1), begin(test_vector2), MoveCopyCounterType{},\r\n        CopyFirstArgBinOpFunctor{}, CopyFirstArgBinOpFunctor{});\r\n    if (_HAS_CXX20) {\r\n        assert(output.copies == 0);\r\n        assert(output.moves == 21);\r\n    } else {\r\n        assert(output.copies == 10);\r\n        assert(output.moves == 11);\r\n    }\r\n}\r\n\r\nvoid assert_partial_sum() {\r\n    vector<MoveCopyCounterType> test_vector(10);\r\n    const auto output_end =\r\n        partial_sum(begin(test_vector), end(test_vector), begin(test_vector), CopyFirstArgBinOpFunctor{});\r\n    for (auto it = begin(test_vector); it != output_end; ++it) {\r\n        if (_HAS_CXX20) {\r\n            assert(it->copies == 1);\r\n            assert(it->moves == (it - begin(test_vector)) * 2);\r\n        } else {\r\n            assert(it->copies == it - begin(test_vector) + 1);\r\n            assert(it->moves == it - begin(test_vector));\r\n        }\r\n    }\r\n}\r\n\r\nvoid assert_adjacent_difference() {\r\n    vector<MoveCopyCounterType> test_vector1(10);\r\n    vector<MoveCopyCounterType> test_vector2(10);\r\n    const auto output_end =\r\n        adjacent_difference(begin(test_vector1), end(test_vector1), begin(test_vector2), CopySecondArgBinOpFunctor{});\r\n    assert(test_vector2[0].moves == 0);\r\n    assert(test_vector2[0].copies == 1);\r\n    for (auto it = begin(test_vector2) + 1; it != output_end; ++it) {\r\n        if (_HAS_CXX20) {\r\n            assert(it->moves == 2);\r\n            assert(it->copies == 1);\r\n        } else {\r\n            assert(it->moves == 1);\r\n            assert(it->copies == 2);\r\n        }\r\n    }\r\n}\r\n\r\nint main() {\r\n    assert_accumulate();\r\n    assert_inner_product();\r\n    assert_partial_sum();\r\n    assert_adjacent_difference();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0627R6_unreachable/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0627R6_unreachable/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <utility>\r\n\r\nconstexpr char test_impl(const int arg) {\r\n    switch (arg) {\r\n    case 1:\r\n        return 'a';\r\n\r\n    case 2:\r\n        return 'z';\r\n\r\n    default:\r\n        std::unreachable();\r\n    }\r\n}\r\n\r\nconstexpr bool test() {\r\n    assert(test_impl(1) == 'a');\r\n    assert(test_impl(2) == 'z');\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test();\r\n    static_assert(test());\r\n    static_assert(noexcept(std::unreachable())); // strengthened\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0631R8_numbers_math_constants/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0631R8_numbers_math_constants/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <numbers>\r\n#include <type_traits>\r\n\r\n#pragma warning(disable : 4197) // '%s': top-level volatile in cast is ignored\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <class T, class U>\r\n[[nodiscard]] constexpr bool test_case(T& actual, const U expected) {\r\n    STATIC_ASSERT(std::is_same_v<const std::remove_cv_t<T>, const U>);\r\n    return actual == expected;\r\n}\r\n\r\nenum class modify_cv {\r\n    type_identity,\r\n    add_const,\r\n    add_volatile,\r\n    add_cv,\r\n};\r\n\r\ntemplate <modify_cv Modification, class T>\r\nstruct apply_modify_cv {\r\n    using type = T;\r\n};\r\n\r\ntemplate <class T>\r\nstruct apply_modify_cv<modify_cv::add_const, T> {\r\n    using type = const T;\r\n};\r\n\r\ntemplate <class T>\r\nstruct apply_modify_cv<modify_cv::add_volatile, T> {\r\n    using type = volatile T;\r\n};\r\n\r\ntemplate <class T>\r\nstruct apply_modify_cv<modify_cv::add_cv, T> {\r\n    using type = const volatile T;\r\n};\r\n\r\ntemplate <modify_cv Modification, class T>\r\nusing apply_modify_cv_t = apply_modify_cv<Modification, T>::type;\r\n\r\ntemplate <modify_cv Modification>\r\nconstexpr void test_cv_floating_point() {\r\n    using F = apply_modify_cv_t<Modification, float>;\r\n    using D = apply_modify_cv_t<Modification, double>;\r\n    using L = apply_modify_cv_t<Modification, long double>;\r\n\r\n    assert(test_case(std::numbers::e_v<F>, 0x1.5bf0a8p+1f));\r\n    assert(test_case(std::numbers::e_v<D>, 0x1.5bf0a8b145769p+1));\r\n    assert(test_case(std::numbers::e_v<L>, 0x1.5bf0a8b145769p+1L));\r\n\r\n    assert(test_case(std::numbers::log2e_v<F>, 0x1.715476p+0f));\r\n    assert(test_case(std::numbers::log2e_v<D>, 0x1.71547652b82fep+0));\r\n    assert(test_case(std::numbers::log2e_v<L>, 0x1.71547652b82fep+0L));\r\n\r\n    assert(test_case(std::numbers::log10e_v<F>, 0x1.bcb7b2p-2f));\r\n    assert(test_case(std::numbers::log10e_v<D>, 0x1.bcb7b1526e50ep-2));\r\n    assert(test_case(std::numbers::log10e_v<L>, 0x1.bcb7b1526e50ep-2L));\r\n\r\n    assert(test_case(std::numbers::pi_v<F>, 0x1.921fb6p+1f));\r\n    assert(test_case(std::numbers::pi_v<D>, 0x1.921fb54442d18p+1));\r\n    assert(test_case(std::numbers::pi_v<L>, 0x1.921fb54442d18p+1L));\r\n\r\n    assert(test_case(std::numbers::inv_pi_v<F>, 0x1.45f306p-2f));\r\n    assert(test_case(std::numbers::inv_pi_v<D>, 0x1.45f306dc9c883p-2));\r\n    assert(test_case(std::numbers::inv_pi_v<L>, 0x1.45f306dc9c883p-2L));\r\n\r\n    assert(test_case(std::numbers::inv_sqrtpi_v<F>, 0x1.20dd76p-1f));\r\n    assert(test_case(std::numbers::inv_sqrtpi_v<D>, 0x1.20dd750429b6dp-1));\r\n    assert(test_case(std::numbers::inv_sqrtpi_v<L>, 0x1.20dd750429b6dp-1L));\r\n\r\n    assert(test_case(std::numbers::ln2_v<F>, 0x1.62e430p-1f));\r\n    assert(test_case(std::numbers::ln2_v<D>, 0x1.62e42fefa39efp-1));\r\n    assert(test_case(std::numbers::ln2_v<L>, 0x1.62e42fefa39efp-1L));\r\n\r\n    assert(test_case(std::numbers::ln10_v<F>, 0x1.26bb1cp+1f));\r\n    assert(test_case(std::numbers::ln10_v<D>, 0x1.26bb1bbb55516p+1));\r\n    assert(test_case(std::numbers::ln10_v<L>, 0x1.26bb1bbb55516p+1L));\r\n\r\n    assert(test_case(std::numbers::sqrt2_v<F>, 0x1.6a09e6p+0f));\r\n    assert(test_case(std::numbers::sqrt2_v<D>, 0x1.6a09e667f3bcdp+0));\r\n    assert(test_case(std::numbers::sqrt2_v<L>, 0x1.6a09e667f3bcdp+0L));\r\n\r\n    assert(test_case(std::numbers::sqrt3_v<F>, 0x1.bb67aep+0f));\r\n    assert(test_case(std::numbers::sqrt3_v<D>, 0x1.bb67ae8584caap+0));\r\n    assert(test_case(std::numbers::sqrt3_v<L>, 0x1.bb67ae8584caap+0L));\r\n\r\n    assert(test_case(std::numbers::inv_sqrt3_v<F>, 0x1.279a74p-1f));\r\n    assert(test_case(std::numbers::inv_sqrt3_v<D>, 0x1.279a74590331cp-1));\r\n    assert(test_case(std::numbers::inv_sqrt3_v<L>, 0x1.279a74590331cp-1L));\r\n\r\n    assert(test_case(std::numbers::egamma_v<F>, 0x1.2788d0p-1f));\r\n    assert(test_case(std::numbers::egamma_v<D>, 0x1.2788cfc6fb619p-1));\r\n    assert(test_case(std::numbers::egamma_v<L>, 0x1.2788cfc6fb619p-1L));\r\n\r\n    assert(test_case(std::numbers::phi_v<F>, 0x1.9e377ap+0f));\r\n    assert(test_case(std::numbers::phi_v<D>, 0x1.9e3779b97f4a8p+0));\r\n    assert(test_case(std::numbers::phi_v<L>, 0x1.9e3779b97f4a8p+0L));\r\n}\r\n\r\nconstexpr void test_double() {\r\n    assert(test_case(std::numbers::e, 0x1.5bf0a8b145769p+1));\r\n    assert(test_case(std::numbers::log2e, 0x1.71547652b82fep+0));\r\n    assert(test_case(std::numbers::log10e, 0x1.bcb7b1526e50ep-2));\r\n    assert(test_case(std::numbers::pi, 0x1.921fb54442d18p+1));\r\n    assert(test_case(std::numbers::inv_pi, 0x1.45f306dc9c883p-2));\r\n    assert(test_case(std::numbers::inv_sqrtpi, 0x1.20dd750429b6dp-1));\r\n    assert(test_case(std::numbers::ln2, 0x1.62e42fefa39efp-1));\r\n    assert(test_case(std::numbers::ln10, 0x1.26bb1bbb55516p+1));\r\n    assert(test_case(std::numbers::sqrt2, 0x1.6a09e667f3bcdp+0));\r\n    assert(test_case(std::numbers::sqrt3, 0x1.bb67ae8584caap+0));\r\n    assert(test_case(std::numbers::inv_sqrt3, 0x1.279a74590331cp-1));\r\n    assert(test_case(std::numbers::egamma, 0x1.2788cfc6fb619p-1));\r\n    assert(test_case(std::numbers::phi, 0x1.9e3779b97f4a8p+0));\r\n}\r\n\r\n// N4944 [math.constants]/2: \"a program may partially or explicitly specialize a mathematical constant\r\n// variable template provided that the specialization depends on a program-defined type.\"\r\nstruct Meow {\r\n    int val;\r\n};\r\n\r\ntemplate <>\r\ninline constexpr Meow std::numbers::e_v<Meow>{-10};\r\ntemplate <>\r\ninline constexpr Meow std::numbers::log2e_v<Meow>{-20};\r\ntemplate <>\r\ninline constexpr Meow std::numbers::log10e_v<Meow>{-30};\r\ntemplate <>\r\ninline constexpr Meow std::numbers::pi_v<Meow>{-40};\r\ntemplate <>\r\ninline constexpr Meow std::numbers::inv_pi_v<Meow>{-50};\r\ntemplate <>\r\ninline constexpr Meow std::numbers::inv_sqrtpi_v<Meow>{-60};\r\ntemplate <>\r\ninline constexpr Meow std::numbers::ln2_v<Meow>{-70};\r\ntemplate <>\r\ninline constexpr Meow std::numbers::ln10_v<Meow>{-80};\r\ntemplate <>\r\ninline constexpr Meow std::numbers::sqrt2_v<Meow>{-90};\r\ntemplate <>\r\ninline constexpr Meow std::numbers::sqrt3_v<Meow>{-100};\r\ntemplate <>\r\ninline constexpr Meow std::numbers::inv_sqrt3_v<Meow>{-110};\r\ntemplate <>\r\ninline constexpr Meow std::numbers::egamma_v<Meow>{-120};\r\ntemplate <>\r\ninline constexpr Meow std::numbers::phi_v<Meow>{-130};\r\n\r\nconstexpr void test_program_defined_specialization() {\r\n    assert(test_case(std::numbers::e_v<Meow>.val, -10));\r\n    assert(test_case(std::numbers::log2e_v<Meow>.val, -20));\r\n    assert(test_case(std::numbers::log10e_v<Meow>.val, -30));\r\n    assert(test_case(std::numbers::pi_v<Meow>.val, -40));\r\n    assert(test_case(std::numbers::inv_pi_v<Meow>.val, -50));\r\n    assert(test_case(std::numbers::inv_sqrtpi_v<Meow>.val, -60));\r\n    assert(test_case(std::numbers::ln2_v<Meow>.val, -70));\r\n    assert(test_case(std::numbers::ln10_v<Meow>.val, -80));\r\n    assert(test_case(std::numbers::sqrt2_v<Meow>.val, -90));\r\n    assert(test_case(std::numbers::sqrt3_v<Meow>.val, -100));\r\n    assert(test_case(std::numbers::inv_sqrt3_v<Meow>.val, -110));\r\n    assert(test_case(std::numbers::egamma_v<Meow>.val, -120));\r\n    assert(test_case(std::numbers::phi_v<Meow>.val, -130));\r\n}\r\n\r\nconstexpr bool test_all() {\r\n    test_cv_floating_point<modify_cv::type_identity>();\r\n    test_cv_floating_point<modify_cv::add_const>();\r\n\r\n    if (!std::is_constant_evaluated()) {\r\n        test_cv_floating_point<modify_cv::add_volatile>(); // constexpr-incompatible\r\n        test_cv_floating_point<modify_cv::add_cv>(); // constexpr-incompatible\r\n    }\r\n\r\n    test_double();\r\n    test_program_defined_specialization();\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    assert(test_all());\r\n    STATIC_ASSERT(test_all());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_args/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_args/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <format>\r\n#include <memory>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <variant>\r\n\r\n#include <is_permissive.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class CharType>\r\nconstexpr auto get_input_literal() {\r\n    if constexpr (same_as<CharType, char>) {\r\n        return \"meow\";\r\n    } else {\r\n        return L\"meow\";\r\n    }\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr auto get_input_sv() {\r\n    if constexpr (same_as<CharType, char>) {\r\n        return \"meow\"sv;\r\n    } else {\r\n        return L\"meow\"sv;\r\n    }\r\n}\r\n\r\nenum class Arg_type : uint8_t {\r\n    none,\r\n    int_type,\r\n    unsigned_type,\r\n    long_long_type,\r\n    unsigned_long_long_type,\r\n    bool_type,\r\n    char_type,\r\n    float_type,\r\n    double_type,\r\n    long_double_type,\r\n    pointer_type,\r\n    string_literal_type,\r\n    string_type,\r\n    handle_type,\r\n};\r\n\r\ntemplate <class Context>\r\nconstexpr auto visitor = [](auto&& arg) {\r\n    using T         = decay_t<decltype(arg)>;\r\n    using char_type = Context::char_type;\r\n    if constexpr (is_same_v<T, monostate>) {\r\n        return Arg_type::none;\r\n    } else if constexpr (is_same_v<T, int>) {\r\n        return Arg_type::int_type;\r\n    } else if constexpr (is_same_v<T, unsigned int>) {\r\n        return Arg_type::unsigned_type;\r\n    } else if constexpr (is_same_v<T, long long>) {\r\n        return Arg_type::long_long_type;\r\n    } else if constexpr (is_same_v<T, unsigned long long>) {\r\n        return Arg_type::unsigned_long_long_type;\r\n    } else if constexpr (is_same_v<T, char_type>) {\r\n        return Arg_type::char_type;\r\n    } else if constexpr (is_same_v<T, float>) {\r\n        return Arg_type::float_type;\r\n    } else if constexpr (is_same_v<T, double>) {\r\n        return Arg_type::double_type;\r\n    } else if constexpr (is_same_v<T, long double>) {\r\n        return Arg_type::long_double_type;\r\n    } else if constexpr (is_same_v<T, const void*>) {\r\n        return Arg_type::pointer_type;\r\n    } else if constexpr (is_same_v<T, const char_type*>) {\r\n        return Arg_type::string_literal_type;\r\n    } else if constexpr (is_same_v<T, basic_string_view<char_type>>) {\r\n        return Arg_type::string_type;\r\n    } else {\r\n        return Arg_type::handle_type;\r\n    }\r\n};\r\n\r\ntemplate <class Context>\r\nvoid test_basic_format_arg() {\r\n    using char_type = Context::char_type;\r\n\r\n    { // construction\r\n        basic_format_arg<Context> default_constructed;\r\n        assert(!default_constructed);\r\n\r\n        // test internal _Make_from mechanism\r\n\r\n        constexpr auto as_lvalue = []<class T>(T&& t) noexcept -> T& { return static_cast<T&>(t); };\r\n\r\n        auto from_int = basic_format_arg<Context>::_Make_from(as_lvalue(5));\r\n        assert(from_int);\r\n\r\n        auto from_unsigned = basic_format_arg<Context>::_Make_from(as_lvalue(5u));\r\n        assert(from_unsigned);\r\n\r\n        auto from_long_long = basic_format_arg<Context>::_Make_from(as_lvalue(5ll));\r\n        assert(from_long_long);\r\n\r\n        auto from_unsigned_long_long = basic_format_arg<Context>::_Make_from(as_lvalue(5ull));\r\n        assert(from_unsigned_long_long);\r\n\r\n        auto from_float = basic_format_arg<Context>::_Make_from(as_lvalue(5.0f));\r\n        assert(from_float);\r\n\r\n        auto from_double = basic_format_arg<Context>::_Make_from(as_lvalue(5.0));\r\n        assert(from_double);\r\n\r\n        auto from_long_double = basic_format_arg<Context>::_Make_from(as_lvalue(5.0L));\r\n        assert(from_long_double);\r\n\r\n        auto from_nullptr = basic_format_arg<Context>::_Make_from(as_lvalue(nullptr));\r\n        assert(from_nullptr);\r\n\r\n        auto from_pointer = basic_format_arg<Context>::_Make_from(as_lvalue(static_cast<const void*>(nullptr)));\r\n        assert(from_pointer);\r\n\r\n        auto from_literal = basic_format_arg<Context>::_Make_from(as_lvalue(get_input_literal<char_type>()));\r\n        assert(from_literal);\r\n\r\n        auto from_string_view = basic_format_arg<Context>::_Make_from(as_lvalue(get_input_sv<char_type>()));\r\n        assert(from_string_view);\r\n\r\n        // the exposition-only constructor of basic_format_arg shouldn't be accessible\r\n        static_assert(!is_constructible_v<basic_format_arg<Context>, int>);\r\n        static_assert(!is_constructible_v<basic_format_arg<Context>, unsigned int>);\r\n        static_assert(!is_constructible_v<basic_format_arg<Context>, long long>);\r\n        static_assert(!is_constructible_v<basic_format_arg<Context>, unsigned long long>);\r\n        static_assert(!is_constructible_v<basic_format_arg<Context>, float>);\r\n        static_assert(!is_constructible_v<basic_format_arg<Context>, double>);\r\n        static_assert(!is_constructible_v<basic_format_arg<Context>, long double>);\r\n        static_assert(!is_constructible_v<basic_format_arg<Context>, const char_type*>);\r\n        static_assert(!is_constructible_v<basic_format_arg<Context>, basic_string_view<char_type>>);\r\n        static_assert(!is_constructible_v<basic_format_arg<Context>, const void*>);\r\n    }\r\n}\r\ntemplate <class Context>\r\nvoid test_empty_format_arg() {\r\n    const auto store = make_format_args<Context>();\r\n    const basic_format_args<Context> args{store};\r\n    const same_as<basic_format_arg<Context>> auto first_arg = args.get(0);\r\n    assert(!first_arg);\r\n}\r\n\r\ntemplate <class Context, class Type, Arg_type Result>\r\nvoid test_single_format_arg(Type value) {\r\n    const auto store = make_format_args<Context>(value);\r\n    const basic_format_args<Context> args{store};\r\n    const same_as<basic_format_arg<Context>> auto first_arg = args.get(0);\r\n    assert(first_arg);\r\n    assert(visit_format_arg(visitor<Context>, first_arg) == Result);\r\n    const same_as<basic_format_arg<Context>> auto other_arg = args.get(1);\r\n    assert(!other_arg);\r\n}\r\n\r\ntemplate <class Context>\r\nvoid test_format_arg_store() {\r\n    using char_type = Context::char_type;\r\n\r\n    test_empty_format_arg<Context>();\r\n\r\n    test_single_format_arg<Context, char, Arg_type::char_type>(42);\r\n    if constexpr (is_same_v<char_type, wchar_t>) {\r\n        test_single_format_arg<Context, wchar_t, Arg_type::char_type>(42);\r\n    }\r\n    test_single_format_arg<Context, unsigned char, Arg_type::unsigned_type>(42);\r\n    test_single_format_arg<Context, signed char, Arg_type::int_type>(42);\r\n    test_single_format_arg<Context, int, Arg_type::int_type>(42);\r\n    test_single_format_arg<Context, long, Arg_type::int_type>(42);\r\n    test_single_format_arg<Context, int8_t, Arg_type::int_type>(42);\r\n    test_single_format_arg<Context, int_fast8_t, Arg_type::int_type>(42);\r\n    test_single_format_arg<Context, int_least8_t, Arg_type::int_type>(42);\r\n    test_single_format_arg<Context, int16_t, Arg_type::int_type>(42);\r\n    test_single_format_arg<Context, int_fast16_t, Arg_type::int_type>(42);\r\n    test_single_format_arg<Context, int_least16_t, Arg_type::int_type>(42);\r\n    test_single_format_arg<Context, int32_t, Arg_type::int_type>(42);\r\n    test_single_format_arg<Context, int_fast32_t, Arg_type::int_type>(42);\r\n    test_single_format_arg<Context, int_least32_t, Arg_type::int_type>(42);\r\n    test_single_format_arg<Context, int64_t, Arg_type::long_long_type>(42);\r\n    test_single_format_arg<Context, int_fast64_t, Arg_type::long_long_type>(42);\r\n    test_single_format_arg<Context, int_least64_t, Arg_type::long_long_type>(42);\r\n    if constexpr (sizeof(int) == sizeof(ptrdiff_t)) {\r\n        test_single_format_arg<Context, ptrdiff_t, Arg_type::int_type>(42);\r\n    } else {\r\n        test_single_format_arg<Context, ptrdiff_t, Arg_type::long_long_type>(42);\r\n    }\r\n\r\n    test_single_format_arg<Context, unsigned int, Arg_type::unsigned_type>(42);\r\n    test_single_format_arg<Context, unsigned long, Arg_type::unsigned_type>(42);\r\n    test_single_format_arg<Context, uint8_t, Arg_type::unsigned_type>(42);\r\n    test_single_format_arg<Context, uint_fast8_t, Arg_type::unsigned_type>(42);\r\n    test_single_format_arg<Context, uint_least8_t, Arg_type::unsigned_type>(42);\r\n    if constexpr (is_same_v<char_type, uint16_t>) {\r\n        test_single_format_arg<Context, uint16_t, Arg_type::char_type>(42);\r\n    } else {\r\n        test_single_format_arg<Context, uint16_t, Arg_type::unsigned_type>(42);\r\n    }\r\n    test_single_format_arg<Context, uint_fast16_t, Arg_type::unsigned_type>(42);\r\n    if constexpr (is_same_v<char_type, uint_least16_t>) {\r\n        test_single_format_arg<Context, uint_least16_t, Arg_type::char_type>(42);\r\n    } else {\r\n        test_single_format_arg<Context, uint_least16_t, Arg_type::unsigned_type>(42);\r\n    }\r\n    test_single_format_arg<Context, uint32_t, Arg_type::unsigned_type>(42);\r\n    test_single_format_arg<Context, uint_fast32_t, Arg_type::unsigned_type>(42);\r\n    test_single_format_arg<Context, uint_least32_t, Arg_type::unsigned_type>(42);\r\n    test_single_format_arg<Context, uint64_t, Arg_type::unsigned_long_long_type>(42);\r\n    test_single_format_arg<Context, uint_fast64_t, Arg_type::unsigned_long_long_type>(42);\r\n    test_single_format_arg<Context, uint_least64_t, Arg_type::unsigned_long_long_type>(42);\r\n    if constexpr (sizeof(unsigned int) == sizeof(size_t)) {\r\n        test_single_format_arg<Context, size_t, Arg_type::unsigned_type>(42);\r\n    } else {\r\n        test_single_format_arg<Context, size_t, Arg_type::unsigned_long_long_type>(42);\r\n    }\r\n\r\n    test_single_format_arg<Context, float, Arg_type::float_type>(42.f);\r\n    test_single_format_arg<Context, double, Arg_type::double_type>(42.);\r\n    test_single_format_arg<Context, long double, Arg_type::long_double_type>(42.);\r\n\r\n    test_single_format_arg<Context, const void*, Arg_type::pointer_type>(nullptr);\r\n\r\n    test_single_format_arg<Context, const char_type*, Arg_type::string_literal_type>(get_input_literal<char_type>());\r\n    test_single_format_arg<Context, basic_string_view<char_type>, Arg_type::string_type>(get_input_sv<char_type>());\r\n}\r\n\r\nstatic_assert(sizeof(_Format_arg_index) == sizeof(size_t));\r\nstatic_assert(is_same_v<_Format_arg_traits<format_context>::_Storage_type<void*>, const void*>);\r\n\r\nstatic_assert(is_same_v<_Format_arg_traits<format_context>::_Storage_type<string>, string_view>);\r\nstatic_assert(is_same_v<_Format_arg_traits<format_context>::_Storage_type<const string>, string_view>);\r\nstatic_assert(is_same_v<_Format_arg_traits<format_context>::_Storage_type<char*>, const char*>);\r\nstatic_assert(is_same_v<_Format_arg_traits<format_context>::_Storage_type<const char*>, const char*>);\r\n\r\n// we rely on the _Storage_type<long> to be int\r\nstatic_assert(is_same_v<_Format_arg_traits<format_context>::_Storage_type<long>, int>);\r\nstatic_assert(is_same_v<_Format_arg_traits<format_context>::_Storage_type<unsigned long>, unsigned int>);\r\n\r\ntemplate <class Context>\r\nvoid test_visit_monostate() {\r\n    assert(visit_format_arg(visitor<Context>, basic_format_arg<Context>()) == Arg_type::none);\r\n}\r\n\r\ntemplate <class Context>\r\nvoid test_lwg3810() {\r\n    int args[]{1, 2, 3};\r\n    [[maybe_unused]] auto args_store = make_format_args<Context>(args[0], args[1], args[2]);\r\n    static_assert(same_as<decltype(basic_format_args{args_store}), basic_format_args<Context>>);\r\n}\r\n\r\nstruct lvalue_only_visitor {\r\n    template <class T>\r\n    void operator()(T&&) const = delete;\r\n    template <class T>\r\n    void operator()(T&) const noexcept {}\r\n};\r\n\r\ntemplate <class Context>\r\nvoid test_lvalue_only_visitation() {\r\n    visit_format_arg(lvalue_only_visitor{}, basic_format_arg<Context>{});\r\n}\r\n\r\ntemplate <class Context, class... Args>\r\nconcept CanMakeFormatArgs = requires(Args&&... args) { make_format_args<Context>(static_cast<Args &&>(args)...); };\r\n\r\n// P2905R2 Runtime format strings (make make_(w)format_args only take lvalue references)\r\ntemplate <class Context>\r\nvoid test_lvalue_reference_parameters() {\r\n    using char_type = Context::char_type;\r\n\r\n    static_assert(CanMakeFormatArgs<Context, int&, long long&, double&, char_type&, char_type*&, const char_type*&,\r\n        basic_string<char_type>&, basic_string_view<char_type>&>);\r\n    static_assert(\r\n        CanMakeFormatArgs<Context, const int&, const long long&, const double&, const char_type&, char_type* const&,\r\n            const char_type* const&, const basic_string<char_type>&, const basic_string_view<char_type>&>);\r\n\r\n    static_assert(CanMakeFormatArgs<Context, const int, const long long, const double, const char_type,\r\n        char_type* const, const char_type* const, const basic_string<char_type>, const basic_string_view<char_type>>);\r\n\r\n    static_assert(!CanMakeFormatArgs<Context, int>);\r\n    static_assert(!CanMakeFormatArgs<Context, long long>);\r\n    static_assert(!CanMakeFormatArgs<Context, double>);\r\n    static_assert(!CanMakeFormatArgs<Context, char_type>);\r\n    static_assert(!CanMakeFormatArgs<Context, char_type*>);\r\n    static_assert(!CanMakeFormatArgs<Context, const char_type*>);\r\n    static_assert(CanMakeFormatArgs<Context, basic_string<char_type>> == is_permissive);\r\n    static_assert(CanMakeFormatArgs<Context, basic_string_view<char_type>> == is_permissive);\r\n}\r\n\r\nint main() {\r\n    test_basic_format_arg<format_context>();\r\n    test_basic_format_arg<wformat_context>();\r\n    test_format_arg_store<format_context>();\r\n    test_format_arg_store<wformat_context>();\r\n    test_visit_monostate<format_context>();\r\n    test_visit_monostate<wformat_context>();\r\n\r\n    test_lwg3810<format_context>();\r\n    test_lwg3810<wformat_context>();\r\n\r\n    test_lvalue_only_visitation<format_context>();\r\n    test_lvalue_only_visitation<wformat_context>();\r\n\r\n    test_lvalue_reference_parameters<format_context>();\r\n    test_lvalue_reference_parameters<wformat_context>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_custom_formatting/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_custom_formatting/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <format>\r\n#include <iterator>\r\n#include <limits>\r\n#include <locale>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\nusing namespace std;\r\n\r\n// copied from the text_formatting_formatting test case\r\ntemplate <class charT, class... Args>\r\nauto make_testing_format_args(Args&&... vals) { // references to temporaries are risky, see P2905R2; we'll be careful\r\n    if constexpr (is_same_v<charT, wchar_t>) {\r\n        return make_wformat_args(vals...);\r\n    } else {\r\n        return make_format_args(vals...);\r\n    }\r\n}\r\n\r\n// copied from the string_view tests\r\ntemplate <typename CharT>\r\nstruct choose_literal; // not defined\r\n\r\ntemplate <>\r\nstruct choose_literal<char> {\r\n    static constexpr const char* choose(const char* s, const wchar_t*) {\r\n        return s;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct choose_literal<wchar_t> {\r\n    static constexpr const wchar_t* choose(const char*, const wchar_t* s) {\r\n        return s;\r\n    }\r\n};\r\n\r\n#define TYPED_LITERAL(CharT, Literal) (choose_literal<CharT>::choose(Literal, L##Literal))\r\n#define STR(Str)                      TYPED_LITERAL(charT, Str)\r\n\r\nstruct basic_custom_formattable_type {\r\n    string_view string_content;\r\n};\r\n\r\nstruct not_const_formattable_type {\r\n    string_view string_content;\r\n    explicit not_const_formattable_type(string_view val) : string_content(val) {}\r\n    not_const_formattable_type(const not_const_formattable_type&) = delete;\r\n    not_const_formattable_type(not_const_formattable_type&&)      = delete;\r\n};\r\n\r\ntemplate <>\r\nstruct std::formatter<basic_custom_formattable_type, char> {\r\n    constexpr basic_format_parse_context<char>::iterator parse(basic_format_parse_context<char>& parse_ctx) {\r\n        if (parse_ctx.begin() != parse_ctx.end() && *parse_ctx.begin() != '}') {\r\n            throw format_error{\"only empty specs please\"};\r\n        }\r\n        return parse_ctx.begin();\r\n    }\r\n    format_context::iterator format(const basic_custom_formattable_type& val, format_context& ctx) const {\r\n        ctx.advance_to(copy(val.string_content.begin(), val.string_content.end(), ctx.out()));\r\n        return ctx.out();\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct std::formatter<not_const_formattable_type, char> {\r\n    constexpr basic_format_parse_context<char>::iterator parse(basic_format_parse_context<char>& parse_ctx) {\r\n        if (parse_ctx.begin() != parse_ctx.end() && *parse_ctx.begin() != '}') {\r\n            throw format_error{\"only empty specs please\"};\r\n        }\r\n        return parse_ctx.begin();\r\n    }\r\n    format_context::iterator format(not_const_formattable_type& val, format_context& ctx) const {\r\n        ctx.advance_to(copy(val.string_content.begin(), val.string_content.end(), ctx.out()));\r\n        return ctx.out();\r\n    }\r\n};\r\n\r\ntemplate <class T>\r\nstruct custom_formattable_type {\r\n    T val;\r\n};\r\n\r\ntemplate <class T, class charT>\r\nstruct std::formatter<custom_formattable_type<T>, charT> : std::formatter<T, charT> {\r\n    template <class FC>\r\n    auto format(const custom_formattable_type<T>& val, FC& format_ctx) const {\r\n        return std::formatter<T, charT>::format(val.val, format_ctx);\r\n    }\r\n};\r\n\r\nconstexpr void test_disabled_formatter_is_disabled() { // COMPILE-ONLY\r\n    using F = formatter<void, void>;\r\n\r\n    static_assert(!is_default_constructible_v<F>);\r\n    static_assert(!is_copy_constructible_v<F>);\r\n    static_assert(!is_move_constructible_v<F>);\r\n    static_assert(!is_copy_assignable_v<F>);\r\n    static_assert(!is_move_assignable_v<F>);\r\n}\r\n\r\ntemplate <class T, class charT>\r\nvoid test_custom_equiv_with_format(const charT* fmt_string, const T& val) {\r\n    assert(vformat(fmt_string, make_testing_format_args<charT>(custom_formattable_type<T>{val}))\r\n           == vformat(fmt_string, make_testing_format_args<charT>(val)));\r\n}\r\n\r\ntemplate <class T, class charT>\r\nvoid test_custom_equiv_with_format_mixed(const charT* fmt_string, const T& val) {\r\n    assert(vformat(fmt_string, make_testing_format_args<charT>(custom_formattable_type<T>{val}, val))\r\n           == vformat(fmt_string, make_testing_format_args<charT>(val, val)));\r\n}\r\n\r\ntemplate <class T, class charT>\r\nvoid test_numeric_custom_formattable_type() {\r\n    test_custom_equiv_with_format<T>(STR(\"{}\"), 0);\r\n    test_custom_equiv_with_format<T>(STR(\"{}\"), 42);\r\n    test_custom_equiv_with_format<T>(STR(\"{:+}\"), 0);\r\n    test_custom_equiv_with_format<T>(STR(\"{}\"), numeric_limits<T>::min());\r\n    test_custom_equiv_with_format<T>(STR(\"{}\"), numeric_limits<T>::max());\r\n    test_custom_equiv_with_format<T>(STR(\"{:3}\"), 1);\r\n    if constexpr (!is_floating_point_v<T> && !is_same_v<T, charT> && !is_same_v<T, bool>) {\r\n        test_custom_equiv_with_format<T>(STR(\"{:#x}\"), 255);\r\n        test_custom_equiv_with_format<T>(STR(\"{:#X}\"), 255);\r\n    }\r\n}\r\n\r\ntemplate <class T, class charT>\r\nvoid test_numeric_mixed_args_custom_formattable_type() {\r\n    test_custom_equiv_with_format_mixed<T>(STR(\"{}{}\"), 0);\r\n    test_custom_equiv_with_format_mixed<T>(STR(\"{1}{0}\"), 42);\r\n    test_custom_equiv_with_format_mixed<T>(STR(\"{:+}{:-}\"), 0);\r\n    test_custom_equiv_with_format_mixed<T>(STR(\"{}{}\"), numeric_limits<T>::min());\r\n    test_custom_equiv_with_format_mixed<T>(STR(\"{}{}\"), numeric_limits<T>::max());\r\n    test_custom_equiv_with_format_mixed<T>(STR(\"{:3}{:4}\"), 1);\r\n    test_custom_equiv_with_format_mixed<T>(STR(\"{0}{0}\"), 42);\r\n    if constexpr (!is_floating_point_v<T> && !is_same_v<T, charT> && !is_same_v<T, bool>) {\r\n        test_custom_equiv_with_format_mixed<T>(STR(\"{:#x}{}\"), 255);\r\n        test_custom_equiv_with_format_mixed<T>(STR(\"{:#X}{}\"), 255);\r\n    }\r\n}\r\n\r\ntemplate <class CustomFormattableType>\r\nvoid test_format_family_overloads() {\r\n    string str;\r\n\r\n    assert(format(\"{}\", CustomFormattableType{\"f\"}) == \"f\"s);\r\n    assert(format(locale{}, \"{}\", CustomFormattableType{\"f\"}) == \"f\"s);\r\n    format_to(back_insert_iterator(str), \"{}\", CustomFormattableType{\"f\"});\r\n    assert(str == \"f\");\r\n    str.clear();\r\n    format_to(back_insert_iterator(str), locale{}, \"{}\", CustomFormattableType{\"f\"});\r\n    assert(str == \"f\");\r\n    str.clear();\r\n    format_to_n(back_insert_iterator(str), 5, \"{}\", CustomFormattableType{\"f\"});\r\n    assert(str == \"f\");\r\n    str.clear();\r\n    format_to_n(back_insert_iterator(str), 5, locale{}, \"{}\", CustomFormattableType{\"f\"});\r\n    assert(str == \"f\");\r\n    str.clear();\r\n    assert(formatted_size(\"{}\", CustomFormattableType{\"f\"}) == 1);\r\n    assert(formatted_size(locale{}, \"{}\", CustomFormattableType{\"f\"}) == 1);\r\n}\r\n\r\ntemplate <class charT>\r\nvoid test_custom_formattable_type() {\r\n    test_numeric_custom_formattable_type<int, charT>();\r\n    test_numeric_custom_formattable_type<long, charT>();\r\n    test_numeric_custom_formattable_type<long long, charT>();\r\n    test_numeric_custom_formattable_type<unsigned int, charT>();\r\n    test_numeric_custom_formattable_type<unsigned long, charT>();\r\n    test_numeric_custom_formattable_type<unsigned long long, charT>();\r\n    test_numeric_custom_formattable_type<short, charT>();\r\n#ifdef _NATIVE_WCHAR_T_DEFINED\r\n    test_numeric_custom_formattable_type<unsigned short, charT>();\r\n#endif\r\n    test_numeric_custom_formattable_type<float, charT>();\r\n    test_numeric_custom_formattable_type<double, charT>();\r\n    test_numeric_custom_formattable_type<long double, charT>();\r\n\r\n    test_custom_equiv_with_format<charT, charT>(STR(\"{}\"), charT(' '));\r\n    test_custom_equiv_with_format<char, charT>(STR(\"{}\"), ' ');\r\n\r\n    charT test_str[] = {charT(' '), charT()};\r\n    test_custom_equiv_with_format<charT*, charT>(STR(\"{}\"), test_str);\r\n    test_custom_equiv_with_format<const charT*, charT>(STR(\"{}\"), test_str);\r\n\r\n    struct traits : char_traits<charT> {};\r\n    test_custom_equiv_with_format<basic_string<charT, traits>, charT>(STR(\"{}\"), test_str);\r\n    test_custom_equiv_with_format<basic_string_view<charT, traits>, charT>(STR(\"{}\"), test_str);\r\n\r\n    test_custom_equiv_with_format<nullptr_t, charT>(STR(\"{}\"), nullptr);\r\n    test_custom_equiv_with_format<void*, charT>(STR(\"{}\"), nullptr);\r\n    test_custom_equiv_with_format<const void*, charT>(STR(\"{}\"), nullptr);\r\n}\r\n\r\ntemplate <class charT>\r\nvoid test_mixed_custom_formattable_type() {\r\n    test_numeric_mixed_args_custom_formattable_type<int, charT>();\r\n    test_numeric_mixed_args_custom_formattable_type<long, charT>();\r\n    test_numeric_mixed_args_custom_formattable_type<long long, charT>();\r\n    test_numeric_mixed_args_custom_formattable_type<unsigned int, charT>();\r\n    test_numeric_mixed_args_custom_formattable_type<unsigned long, charT>();\r\n    test_numeric_mixed_args_custom_formattable_type<unsigned long long, charT>();\r\n    test_numeric_mixed_args_custom_formattable_type<short, charT>();\r\n#ifdef _NATIVE_WCHAR_T_DEFINED\r\n    test_numeric_mixed_args_custom_formattable_type<unsigned short, charT>();\r\n#endif\r\n    test_numeric_mixed_args_custom_formattable_type<float, charT>();\r\n    test_numeric_mixed_args_custom_formattable_type<double, charT>();\r\n    test_numeric_mixed_args_custom_formattable_type<long double, charT>();\r\n\r\n    test_custom_equiv_with_format_mixed<charT, charT>(STR(\"{}{}\"), charT(' '));\r\n    test_custom_equiv_with_format_mixed<char, charT>(STR(\"{}{}\"), ' ');\r\n\r\n    charT test_str[] = {charT(' '), charT()};\r\n    test_custom_equiv_with_format_mixed<charT*, charT>(STR(\"{}{}\"), test_str);\r\n    test_custom_equiv_with_format_mixed<const charT*, charT>(STR(\"{}{}\"), test_str);\r\n\r\n    struct traits : char_traits<charT> {};\r\n    test_custom_equiv_with_format_mixed<basic_string<charT, traits>, charT>(STR(\"{}{}\"), test_str);\r\n    test_custom_equiv_with_format_mixed<basic_string_view<charT, traits>, charT>(STR(\"{}{}\"), test_str);\r\n\r\n    test_custom_equiv_with_format_mixed<nullptr_t, charT>(STR(\"{}{}\"), nullptr);\r\n    test_custom_equiv_with_format_mixed<void*, charT>(STR(\"{}{}\"), nullptr);\r\n    test_custom_equiv_with_format_mixed<const void*, charT>(STR(\"{}{}\"), nullptr);\r\n}\r\n\r\n// Test that handle doesn't have public non-Standard constructors.\r\ntemplate <class OutIt, class CharT>\r\nvoid test_basic_format_arg_handle_construction() {\r\n    using handle = basic_format_arg<basic_format_context<OutIt, CharT>>::handle;\r\n\r\n    static_assert(is_constructible_v<handle, handle>);\r\n    static_assert(is_constructible_v<handle, const handle&>);\r\n\r\n    static_assert(!is_constructible_v<handle, int&>);\r\n    static_assert(!is_constructible_v<handle, const int&>);\r\n    static_assert(!is_constructible_v<handle, int>);\r\n    static_assert(!is_constructible_v<handle, const int>);\r\n\r\n    static_assert(!is_constructible_v<handle, custom_formattable_type<CharT>&>);\r\n    static_assert(!is_constructible_v<handle, const custom_formattable_type<CharT>&>);\r\n    static_assert(!is_constructible_v<handle, custom_formattable_type<CharT>>);\r\n    static_assert(!is_constructible_v<handle, const custom_formattable_type<CharT>>);\r\n}\r\n\r\ntemplate <class T, class... Args>\r\nconstexpr bool is_constructible_with_trailing_empty_brace_impl = requires { T(declval<Args>()..., {}); };\r\n\r\nstatic_assert(is_constructible_with_trailing_empty_brace_impl<string>);\r\nstatic_assert(is_constructible_with_trailing_empty_brace_impl<pair<int, int>, int>);\r\nstatic_assert(!is_constructible_with_trailing_empty_brace_impl<pair<int, int>, int, int>);\r\n\r\n// Test that basic_format_context doesn't have public non-Standard constructors.\r\ntemplate <class OutIt, class CharT>\r\nvoid test_basic_format_context_construction() {\r\n    using context = basic_format_context<OutIt, CharT>;\r\n\r\n    static_assert(!is_default_constructible_v<context>);\r\n    static_assert(!is_copy_constructible_v<context>);\r\n    static_assert(!is_move_constructible_v<context>);\r\n\r\n    // Also test the deleted copy assignment operator\r\n    // from LWG-4061 \"Should std::basic_format_context be default-constructible/copyable/movable?\"\r\n    static_assert(!is_copy_assignable_v<context>);\r\n    static_assert(!is_move_assignable_v<context>);\r\n\r\n    static_assert(!is_constructible_v<context, OutIt, basic_format_args<context>>);\r\n    static_assert(!is_constructible_v<context, OutIt, const basic_format_args<context>&>);\r\n\r\n    static_assert(!is_constructible_with_trailing_empty_brace_impl<context>);\r\n    static_assert(!is_constructible_with_trailing_empty_brace_impl<context, OutIt, basic_format_args<context>>);\r\n    static_assert(!is_constructible_with_trailing_empty_brace_impl<context, OutIt, const basic_format_args<context>&>);\r\n\r\n    // Also test LWG-4106 \"basic_format_args should not be default-constructible\"\r\n    static_assert(!is_default_constructible_v<basic_format_args<context>>);\r\n}\r\n\r\n// Test GH-4636 \"<format>: Call to next_arg_id may result in unexpected error (regression)\"\r\n\r\nstruct FormatNextArg {};\r\n\r\ntemplate <class CharT>\r\nstruct std::formatter<FormatNextArg, CharT> {\r\npublic:\r\n    template <class ParseContext>\r\n    constexpr auto parse(ParseContext& ctx) {\r\n        auto it = ctx.begin();\r\n        if (it != ctx.end() && *it != '}') {\r\n            throw format_error{\"Expected empty spec\"};\r\n        }\r\n\r\n        arg_id = ctx.next_arg_id();\r\n        return it;\r\n    }\r\n\r\n    template <class FormatContext>\r\n    auto format(FormatNextArg, FormatContext& ctx) const {\r\n        return format_to(ctx.out(), TYPED_LITERAL(CharT, \"arg-id: {}\"), arg_id);\r\n    }\r\n\r\nprivate:\r\n    size_t arg_id;\r\n};\r\n\r\ntemplate <class CharT>\r\nvoid test_parsing_with_next_id() {\r\n    assert(format(TYPED_LITERAL(CharT, \"{}, {}\"), FormatNextArg{}, 0, FormatNextArg{}, TYPED_LITERAL(CharT, \"1\"))\r\n           == TYPED_LITERAL(CharT, \"arg-id: 1, arg-id: 3\"));\r\n    assert(format(TYPED_LITERAL(CharT, \"{:}, {:}\"), FormatNextArg{}, 2, FormatNextArg{}, TYPED_LITERAL(CharT, \"3\"))\r\n           == TYPED_LITERAL(CharT, \"arg-id: 1, arg-id: 3\"));\r\n}\r\n\r\nstruct NeedMagicWord {};\r\n\r\ntemplate <class CharT>\r\nstruct std::formatter<NeedMagicWord, CharT> {\r\n    constexpr auto parse(const basic_format_parse_context<CharT>& ctx) {\r\n        constexpr basic_string_view<CharT> magic_word{TYPED_LITERAL(CharT, \"narf\")};\r\n        auto [i, j] = ranges::mismatch(ctx, magic_word);\r\n        if (j != magic_word.end()) {\r\n            throw format_error{\"you didn't say the magic word!\"};\r\n        }\r\n\r\n        if (i != ctx.end() && *i != '}') {\r\n            throw format_error{\"the whole spec must be the magic word!\"};\r\n        }\r\n        return i;\r\n    }\r\n\r\n    template <class OutIt>\r\n    auto format(NeedMagicWord, basic_format_context<OutIt, CharT>& ctx) const {\r\n        return ctx.out();\r\n    }\r\n};\r\n\r\ntemplate <class CharT>\r\nvoid test_parsing_needing_magic_word() {\r\n    assert(format(TYPED_LITERAL(CharT, \"{:narf}\"), NeedMagicWord{}).empty());\r\n}\r\n\r\nint main() {\r\n    test_format_family_overloads<basic_custom_formattable_type>();\r\n    test_format_family_overloads<not_const_formattable_type>();\r\n    test_custom_formattable_type<char>();\r\n    test_custom_formattable_type<wchar_t>();\r\n    test_mixed_custom_formattable_type<char>();\r\n    test_mixed_custom_formattable_type<wchar_t>();\r\n\r\n    test_basic_format_arg_handle_construction<char*, char>();\r\n    test_basic_format_arg_handle_construction<string::iterator, char>();\r\n    test_basic_format_arg_handle_construction<back_insert_iterator<string>, char>();\r\n    test_basic_format_arg_handle_construction<wchar_t*, wchar_t>();\r\n    test_basic_format_arg_handle_construction<wstring::iterator, wchar_t>();\r\n    test_basic_format_arg_handle_construction<back_insert_iterator<wstring>, wchar_t>();\r\n\r\n    test_basic_format_context_construction<char*, char>();\r\n    test_basic_format_context_construction<string::iterator, char>();\r\n    test_basic_format_context_construction<back_insert_iterator<string>, char>();\r\n    test_basic_format_context_construction<wchar_t*, wchar_t>();\r\n    test_basic_format_context_construction<wstring::iterator, wchar_t>();\r\n    test_basic_format_context_construction<back_insert_iterator<wstring>, wchar_t>();\r\n\r\n    test_parsing_with_next_id<char>();\r\n    test_parsing_with_next_id<wchar_t>();\r\n    test_parsing_needing_magic_word<char>();\r\n    test_parsing_needing_magic_word<wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <format>\r\n#include <string_view>\r\n\r\n#include <test_death.hpp>\r\nusing namespace std;\r\n\r\nvoid test_case_advance_no_range() {\r\n    const auto format_string       = \"First {} and second {} and third {}\"sv;\r\n    const auto other_format_string = \"something\"sv;\r\n    basic_format_parse_context context{format_string};\r\n    context.advance_to(other_format_string.begin());\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_case_advance_no_range,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_formatting/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_formatting/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdio>\r\n#include <exception>\r\n#include <format>\r\n#include <iterator>\r\n#include <limits>\r\n#include <list>\r\n#include <locale>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nconstexpr auto int_min    = numeric_limits<int>::min();\r\nconstexpr auto int_max    = numeric_limits<int>::max();\r\nconstexpr auto uint_max   = numeric_limits<unsigned int>::max();\r\nconstexpr auto llong_min  = numeric_limits<long long>::min();\r\nconstexpr auto llong_max  = numeric_limits<long long>::max();\r\nconstexpr auto ullong_max = numeric_limits<unsigned long long>::max();\r\n\r\n// copied from the string_view tests\r\ntemplate <class CharT>\r\nstruct choose_literal; // not defined\r\n\r\ntemplate <>\r\nstruct choose_literal<char> {\r\n    static constexpr const char* choose(const char* s, const wchar_t*) {\r\n        return s;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct choose_literal<wchar_t> {\r\n    static constexpr const wchar_t* choose(const char*, const wchar_t* s) {\r\n        return s;\r\n    }\r\n};\r\n\r\n#define TYPED_LITERAL(CharT, Literal) (choose_literal<CharT>::choose(Literal, L##Literal))\r\n#define STR(Str)                      TYPED_LITERAL(charT, Str)\r\n\r\n// Test against IDL mismatch between the DLL which stores the locale and the code which uses it.\r\n#ifdef _DEBUG\r\n#define DEFAULT_IDL_SETTING 2\r\n#else\r\n#define DEFAULT_IDL_SETTING 0\r\n#endif\r\n\r\n// Test formatting basic_string(_view) with non-Standard traits_type\r\ntemplate <class CharT>\r\nstruct alternative_char_traits : char_traits<CharT> {};\r\n\r\ntemplate <class CharT>\r\nusing alternative_basic_string_view = basic_string_view<CharT, alternative_char_traits<CharT>>;\r\n\r\ntemplate <class CharT, class Alloc = allocator<CharT>>\r\nusing alternative_basic_string = basic_string<CharT, alternative_char_traits<CharT>, Alloc>;\r\n\r\ntemplate <class charT, class... Args>\r\nauto make_testing_format_args(Args&&... vals) { // references to temporaries are risky, see P2905R2; we'll be careful\r\n    if constexpr (is_same_v<charT, wchar_t>) {\r\n        return make_wformat_args(vals...);\r\n    } else {\r\n        return make_format_args(vals...);\r\n    }\r\n}\r\n\r\ntemplate <class charT, class... Args>\r\nvoid throw_helper(const charT* fmt, const Args&... vals) {\r\n    try {\r\n        (void) vformat(fmt, make_testing_format_args<charT>(vals...));\r\n        assert(false);\r\n    } catch (const format_error&) {\r\n    }\r\n}\r\n\r\ntemplate <class charT>\r\nstruct move_only_back_inserter {\r\n    back_insert_iterator<basic_string<charT>> it;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    bool moved_from = false;\r\n\r\n    move_only_back_inserter() = default;\r\n    explicit move_only_back_inserter(basic_string<charT>& str) : it{str} {}\r\n\r\n    move_only_back_inserter(const move_only_back_inserter&)            = delete;\r\n    move_only_back_inserter& operator=(const move_only_back_inserter&) = delete;\r\n\r\n    move_only_back_inserter(move_only_back_inserter&& other) : it(other.it) {\r\n        assert(!exchange(other.moved_from, true));\r\n    }\r\n    move_only_back_inserter& operator=(move_only_back_inserter&& other) {\r\n        assert(!exchange(other.moved_from, true));\r\n        it         = other.it;\r\n        moved_from = false;\r\n        return *this;\r\n    }\r\n\r\n    move_only_back_inserter& operator++() {\r\n        assert(!moved_from);\r\n        ++it;\r\n        return *this;\r\n    }\r\n\r\n    decltype(auto) operator++(int) {\r\n        assert(!moved_from);\r\n        return it++;\r\n    }\r\n\r\n    decltype(auto) operator*() {\r\n        assert(!moved_from);\r\n        return *it;\r\n    }\r\n};\r\n\r\ntemplate <class charT>\r\nmove_only_back_inserter(basic_string<charT>&) -> move_only_back_inserter<charT>;\r\n\r\n// tests for format with no format args or replacement fields\r\ntemplate <class charT>\r\nvoid test_simple_formatting() {\r\n    basic_string<charT> output_string;\r\n\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"f\"), make_testing_format_args<charT>());\r\n    assert(output_string == STR(\"f\"));\r\n\r\n    output_string.clear();\r\n    format_to(move_only_back_inserter{output_string}, STR(\"{} {} {} {} {} {} {} {} {}\"), true, charT{'a'}, 0, 0u, 0.0,\r\n        STR(\"s\"), basic_string_view{STR(\"sv\")}, nullptr, static_cast<void*>(nullptr));\r\n    assert(output_string == STR(\"true a 0 0 0 s sv 0x0 0x0\"));\r\n\r\n    output_string.clear();\r\n    format_to(move_only_back_inserter{output_string}, STR(\"{:} {:} {:} {:} {:} {:} {:} {:} {:}\"), true, charT{'a'}, 0,\r\n        0u, 0.0, STR(\"s\"), basic_string_view{STR(\"sv\")}, nullptr, static_cast<void*>(nullptr));\r\n    assert(output_string == STR(\"true a 0 0 0 s sv 0x0 0x0\"));\r\n\r\n    output_string.clear();\r\n    format_to_n(move_only_back_inserter{output_string}, 300, STR(\"{} {} {} {} {} {} {} {} {}\"), true, charT{'a'}, 0, 0u,\r\n        0.0, STR(\"s\"), basic_string_view{STR(\"sv\")}, nullptr, static_cast<void*>(nullptr));\r\n    assert(output_string == STR(\"true a 0 0 0 s sv 0x0 0x0\"));\r\n\r\n    // Test formatting basic_string(_view) with non-Standard traits_type\r\n    output_string.clear();\r\n    format_to(move_only_back_inserter{output_string}, STR(\"{} {} {} {} {} {} {} {} {} {}\"), true, charT{'a'}, 0, 0u,\r\n        0.0, STR(\"s\"), alternative_basic_string<charT>{STR(\"str\")}, alternative_basic_string_view<charT>{STR(\"sv\")},\r\n        nullptr, static_cast<void*>(nullptr));\r\n    assert(output_string == STR(\"true a 0 0 0 s str sv 0x0 0x0\"));\r\n\r\n    output_string.clear();\r\n    format_to(move_only_back_inserter{output_string}, STR(\"{:} {:} {:} {:} {:} {:} {:} {:} {:} {:}\"), true, charT{'a'},\r\n        0, 0u, 0.0, STR(\"s\"), alternative_basic_string<charT>{STR(\"str\")},\r\n        alternative_basic_string_view<charT>{STR(\"sv\")}, nullptr, static_cast<void*>(nullptr));\r\n    assert(output_string == STR(\"true a 0 0 0 s str sv 0x0 0x0\"));\r\n\r\n    output_string.clear();\r\n    format_to_n(move_only_back_inserter{output_string}, 300, STR(\"{} {} {} {} {} {} {} {} {} {}\"), true, charT{'a'}, 0,\r\n        0u, 0.0, STR(\"s\"), alternative_basic_string<charT>{STR(\"str\")}, alternative_basic_string_view<charT>{STR(\"sv\")},\r\n        nullptr, static_cast<void*>(nullptr));\r\n    assert(output_string == STR(\"true a 0 0 0 s str sv 0x0 0x0\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"format\"), make_testing_format_args<charT>());\r\n    assert(output_string == STR(\"format\"));\r\n\r\n    output_string.clear();\r\n    format_to(back_insert_iterator{output_string}, STR(\"format\"));\r\n    assert(output_string == STR(\"format\"));\r\n\r\n    output_string.clear();\r\n    format_to(back_insert_iterator{output_string}, locale::classic(), STR(\"format\"));\r\n    assert(output_string == STR(\"format\"));\r\n\r\n    assert(format(STR(\"f\")) == STR(\"f\"));\r\n    assert(format(STR(\"format\")) == STR(\"format\"));\r\n    assert(format(locale::classic(), STR(\"f\")) == STR(\"f\"));\r\n    assert(format(locale::classic(), STR(\"format\")) == STR(\"format\"));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid test_escaped_curls() {\r\n    basic_string<charT> output_string;\r\n\r\n    // test escaped opening curls\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{{\"), make_testing_format_args<charT>());\r\n    assert(output_string == STR(\"{\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{{{{\"), make_testing_format_args<charT>());\r\n    assert(output_string == STR(\"{{\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"x{{\"), make_testing_format_args<charT>());\r\n    assert(output_string == STR(\"x{\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{{ {{\"), make_testing_format_args<charT>());\r\n    assert(output_string == STR(\"{ {\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"x{{x\"), make_testing_format_args<charT>());\r\n    assert(output_string == STR(\"x{x\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{{x\"), make_testing_format_args<charT>());\r\n    assert(output_string == STR(\"{x\"));\r\n\r\n    // tests escaped closing curls\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"}}\"), make_testing_format_args<charT>());\r\n    assert(output_string == STR(\"}\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"}}}}\"), make_testing_format_args<charT>());\r\n    assert(output_string == STR(\"}}\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"x}}\"), make_testing_format_args<charT>());\r\n    assert(output_string == STR(\"x}\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"}} }}\"), make_testing_format_args<charT>());\r\n    assert(output_string == STR(\"} }\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"x}}x\"), make_testing_format_args<charT>());\r\n    assert(output_string == STR(\"x}x\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"}}x\"), make_testing_format_args<charT>());\r\n    assert(output_string == STR(\"}x\"));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid test_simple_replacement_field() {\r\n    basic_string<charT> output_string;\r\n\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(STR(\"f\")));\r\n    assert(output_string == STR(\"f\"));\r\n\r\n    output_string.clear();\r\n    format_to(back_insert_iterator{output_string}, STR(\"{}\"), STR(\"f\"));\r\n    assert(output_string == STR(\"f\"));\r\n\r\n    output_string.clear();\r\n    format_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), STR(\"f\"));\r\n    assert(output_string == STR(\"f\"));\r\n\r\n    assert(format(STR(\"{}\"), STR(\"f\")) == STR(\"f\"));\r\n    assert(format(locale::classic(), STR(\"{}\"), STR(\"f\")) == STR(\"f\"));\r\n\r\n    // Test string_view\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"),\r\n        make_testing_format_args<charT>(basic_string_view<charT>{STR(\"f\")}));\r\n    assert(output_string == STR(\"f\"));\r\n\r\n    // Test bool\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(true));\r\n    assert(output_string == STR(\"true\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(false));\r\n    assert(output_string == STR(\"false\"));\r\n\r\n    // Test char\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>('a'));\r\n    assert(output_string == STR(\"a\"));\r\n\r\n    // Test const void*\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"),\r\n        make_testing_format_args<charT>(static_cast<const void*>(nullptr)));\r\n    assert(output_string == STR(\"0x0\"));\r\n\r\n    // Test void*\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"),\r\n        make_testing_format_args<charT>(static_cast<void*>(nullptr)));\r\n    assert(output_string == STR(\"0x0\"));\r\n\r\n    // Test nullptr\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(nullptr));\r\n    assert(output_string == STR(\"0x0\"));\r\n\r\n    // Test signed integers\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(1234));\r\n    assert(output_string == STR(\"1234\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(1234ll));\r\n    assert(output_string == STR(\"1234\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(int_min));\r\n    assert(output_string == STR(\"-2147483648\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(int_max));\r\n    assert(output_string == STR(\"2147483647\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(llong_max));\r\n    assert(output_string == STR(\"9223372036854775807\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(llong_min));\r\n    assert(output_string == STR(\"-9223372036854775808\"));\r\n\r\n    // Test unsigned integers\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(1234u));\r\n    assert(output_string == STR(\"1234\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(1234ull));\r\n    assert(output_string == STR(\"1234\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(uint_max));\r\n    assert(output_string == STR(\"4294967295\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(ullong_max));\r\n    assert(output_string == STR(\"18446744073709551615\"));\r\n\r\n    // Test float\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(12.34f));\r\n    assert(output_string == STR(\"12.34\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(FLT_MAX));\r\n    assert(output_string == STR(\"3.4028235e+38\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(-FLT_MAX));\r\n    assert(output_string == STR(\"-3.4028235e+38\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(FLT_MIN));\r\n    assert(output_string == STR(\"1.1754944e-38\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"),\r\n        make_testing_format_args<charT>(FLT_EPSILON));\r\n    assert(output_string == STR(\"1.1920929e-07\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"),\r\n        make_testing_format_args<charT>(FLT_TRUE_MIN));\r\n    assert(output_string == STR(\"1e-45\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"),\r\n        make_testing_format_args<charT>(numeric_limits<float>::infinity()));\r\n    assert(output_string == STR(\"inf\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"),\r\n        make_testing_format_args<charT>(-numeric_limits<float>::infinity()));\r\n    assert(output_string == STR(\"-inf\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"),\r\n        make_testing_format_args<charT>(numeric_limits<float>::quiet_NaN()));\r\n    assert(output_string == STR(\"nan\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"),\r\n        make_testing_format_args<charT>(-numeric_limits<float>::quiet_NaN()));\r\n    assert(output_string == STR(\"-nan\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(0.f));\r\n    assert(output_string == STR(\"0\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(-0.f));\r\n    assert(output_string == STR(\"-0\"));\r\n\r\n    // Test double\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(12.34));\r\n    assert(output_string == STR(\"12.34\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(DBL_MAX));\r\n    assert(output_string == STR(\"1.7976931348623157e+308\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(-DBL_MAX));\r\n    assert(output_string == STR(\"-1.7976931348623157e+308\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(DBL_MIN));\r\n    assert(output_string == STR(\"2.2250738585072014e-308\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"),\r\n        make_testing_format_args<charT>(DBL_EPSILON));\r\n    assert(output_string == STR(\"2.220446049250313e-16\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"),\r\n        make_testing_format_args<charT>(DBL_TRUE_MIN));\r\n    assert(output_string == STR(\"5e-324\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"),\r\n        make_testing_format_args<charT>(numeric_limits<double>::infinity()));\r\n    assert(output_string == STR(\"inf\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"),\r\n        make_testing_format_args<charT>(-numeric_limits<double>::infinity()));\r\n    assert(output_string == STR(\"-inf\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"),\r\n        make_testing_format_args<charT>(numeric_limits<double>::quiet_NaN()));\r\n    assert(output_string == STR(\"nan\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"),\r\n        make_testing_format_args<charT>(-numeric_limits<double>::quiet_NaN()));\r\n    assert(output_string == STR(\"-nan\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(0.0));\r\n    assert(output_string == STR(\"0\"));\r\n\r\n    output_string.clear();\r\n    vformat_to(\r\n        back_insert_iterator{output_string}, locale::classic(), STR(\"{}\"), make_testing_format_args<charT>(-0.0));\r\n    assert(output_string == STR(\"-0\"));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid test_multiple_replacement_fields() {\r\n    basic_string<charT> output_string;\r\n\r\n    vformat_to(back_insert_iterator{output_string}, locale::classic(), STR(\"{0} {0}\"),\r\n        make_testing_format_args<charT>(STR(\"f\")));\r\n    assert(output_string == STR(\"f f\"));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid test_fill_and_align() {\r\n    auto writer = [](auto out) {\r\n        out++ = 'A';\r\n        out++ = 'B';\r\n        return out;\r\n    };\r\n\r\n    _Basic_format_specs<charT> specs;\r\n\r\n    auto tester = [&] {\r\n        basic_string<charT> output_string;\r\n        (void) _Write_aligned(back_inserter(output_string), 2, specs, _Fmt_align::_Left, writer);\r\n        return output_string;\r\n    };\r\n\r\n    assert(tester() == STR(\"AB\"));\r\n\r\n    specs._Width = 1;\r\n    assert(tester() == STR(\"AB\"));\r\n\r\n\r\n    specs._Width     = 5;\r\n    specs._Alignment = _Fmt_align::_Left;\r\n    assert(tester() == STR(\"AB   \"));\r\n\r\n    specs._Alignment = _Fmt_align::_Right;\r\n    assert(tester() == STR(\"   AB\"));\r\n\r\n    specs._Alignment = _Fmt_align::_Center;\r\n    assert(tester() == STR(\" AB  \"));\r\n\r\n\r\n    specs._Alignment = _Fmt_align::_Left;\r\n    specs._Fill[0]   = {'*'};\r\n    assert(tester() == STR(\"AB***\"));\r\n\r\n    specs._Alignment = _Fmt_align::_Right;\r\n    assert(tester() == STR(\"***AB\"));\r\n\r\n    specs._Alignment = _Fmt_align::_Center;\r\n    assert(tester() == STR(\"*AB**\"));\r\n}\r\n\r\ntemplate <class charT, class Integral>\r\nvoid test_integral_specs() {\r\n    assert(format(STR(\"{:}\"), Integral{0}) == STR(\"0\"));\r\n\r\n    // Sign\r\n    assert(format(STR(\"{: }\"), Integral{0}) == STR(\" 0\"));\r\n    assert(format(STR(\"{:+}\"), Integral{0}) == STR(\"+0\"));\r\n    assert(format(STR(\"{:-}\"), Integral{0}) == STR(\"0\"));\r\n\r\n    if constexpr (is_signed_v<Integral>) {\r\n        assert(format(STR(\"{: }\"), Integral{-1}) == STR(\"-1\"));\r\n        assert(format(STR(\"{:+}\"), Integral{-1}) == STR(\"-1\"));\r\n        assert(format(STR(\"{:-}\"), Integral{-1}) == STR(\"-1\"));\r\n    }\r\n\r\n    assert(format(STR(\"{: 3}\"), Integral{1}) == STR(\"  1\"));\r\n    assert(format(STR(\"{:+3}\"), Integral{1}) == STR(\" +1\"));\r\n    assert(format(STR(\"{:-3}\"), Integral{1}) == STR(\"  1\"));\r\n\r\n    // Alternate form\r\n    assert(format(STR(\"{:#}\"), Integral{0}) == STR(\"0\"));\r\n    assert(format(STR(\"{:#d}\"), Integral{0}) == STR(\"0\"));\r\n    throw_helper(STR(\"{:#c}\"), Integral{'a'});\r\n\r\n    assert(format(STR(\"{:#b}\"), Integral{0}) == STR(\"0b0\"));\r\n    assert(format(STR(\"{:#B}\"), Integral{0}) == STR(\"0B0\"));\r\n\r\n    assert(format(STR(\"{:#o}\"), Integral{0}) == STR(\"0\"));\r\n    assert(format(STR(\"{:#o}\"), Integral{1}) == STR(\"01\"));\r\n\r\n    assert(format(STR(\"{:#x}\"), Integral{0}) == STR(\"0x0\"));\r\n    assert(format(STR(\"{:#X}\"), Integral{0}) == STR(\"0X0\"));\r\n    assert(format(STR(\"{:#x}\"), Integral{255}) == STR(\"0xff\"));\r\n    assert(format(STR(\"{:#X}\"), Integral{255}) == STR(\"0XFF\"));\r\n\r\n    assert(format(STR(\"{:+#6x}\"), Integral{255}) == STR(\" +0xff\"));\r\n\r\n    if constexpr (is_signed_v<Integral>) {\r\n        assert(format(STR(\"{:#o}\"), Integral{-1}) == STR(\"-01\"));\r\n        assert(format(STR(\"{:#x}\"), Integral{-255}) == STR(\"-0xff\"));\r\n        assert(format(STR(\"{:#X}\"), Integral{-255}) == STR(\"-0XFF\"));\r\n    }\r\n\r\n    if constexpr (is_same_v<Integral, long long>) {\r\n        assert(format(STR(\"{:b}\"), numeric_limits<long long>::min())\r\n               == STR(\"-1000000000000000000000000000000000000000000000000000000000000000\"));\r\n    }\r\n\r\n    // Leading zero\r\n    assert(format(STR(\"{:0}\"), Integral{0}) == STR(\"0\"));\r\n    assert(format(STR(\"{:03}\"), Integral{0}) == STR(\"000\"));\r\n    assert(format(STR(\"{:+03}\"), Integral{0}) == STR(\"+00\"));\r\n    assert(format(STR(\"{:<03}\"), Integral{0}) == STR(\"0  \"));\r\n    assert(format(STR(\"{:>03}\"), Integral{0}) == STR(\"  0\"));\r\n    assert(format(STR(\"{:+#06X}\"), Integral{5}) == STR(\"+0X005\"));\r\n\r\n    // Width\r\n    assert(format(STR(\"{:3}\"), Integral{0}) == STR(\"  0\"));\r\n\r\n    // Precision\r\n    throw_helper(STR(\"{:.1}\"), Integral{0});\r\n\r\n    // Locale\r\n#if !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), Integral{0}) == STR(\"0\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), Integral{100}) == STR(\"100\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), Integral{1'000}) == STR(\"1,000\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), Integral{10'000}) == STR(\"10,000\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), Integral{100'000}) == STR(\"100,000\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), Integral{1'000'000}) == STR(\"1,000,000\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), Integral{10'000'000}) == STR(\"10,000,000\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), Integral{100'000'000}) == STR(\"100,000,000\"));\r\n\r\n    assert(format(locale{\"en-US\"}, STR(\"{:Lx}\"), Integral{0x123'abc}) == STR(\"123,abc\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:6L}\"), Integral{1'000}) == STR(\" 1,000\"));\r\n\r\n    assert(format(locale{\"hi-IN\"}, STR(\"{:L}\"), Integral{10'000'000}) == STR(\"1,00,00,000\"));\r\n    assert(format(locale{\"hi-IN\"}, STR(\"{:L}\"), Integral{100'000'000}) == STR(\"10,00,00,000\"));\r\n\r\n    assert(format(locale{\"hi-IN\"}, STR(\"{:Lx}\"), Integral{0x123'abc}) == STR(\"1,23,abc\"));\r\n#endif // !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n\r\n    // Type\r\n    assert(format(STR(\"{:b}\"), Integral{0}) == STR(\"0\"));\r\n    assert(format(STR(\"{:b}\"), Integral{100}) == STR(\"1100100\"));\r\n\r\n    assert(format(STR(\"{:d}\"), Integral{100}) == STR(\"100\"));\r\n\r\n    throw_helper(STR(\"{:c}\"), Integral{numeric_limits<charT>::max()} + 1);\r\n    if constexpr (is_signed_v<Integral>) {\r\n        throw_helper(STR(\"{:c}\"), Integral{numeric_limits<charT>::min()} - 1);\r\n    }\r\n}\r\n\r\ntemplate <class charT, class T>\r\nvoid test_type(const charT* fmt, T val) {\r\n    assert(vformat(fmt, make_testing_format_args<charT>(val))\r\n           == vformat(fmt, make_testing_format_args<charT>(static_cast<int>(val))));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid test_bool_specs() {\r\n    assert(format(STR(\"{:}\"), true) == STR(\"true\"));\r\n    assert(format(STR(\"{:}\"), false) == STR(\"false\"));\r\n\r\n    // Sign\r\n    throw_helper(STR(\"{: }\"), true);\r\n    throw_helper(STR(\"{:+}\"), true);\r\n    throw_helper(STR(\"{:-}\"), true);\r\n\r\n    // Alternate form\r\n    throw_helper(STR(\"{:#}\"), true);\r\n    throw_helper(STR(\"{:#c}\"), true);\r\n\r\n    // Leading zero\r\n    throw_helper(STR(\"{:0}\"), true);\r\n\r\n    // Width\r\n    assert(format(STR(\"{:6}\"), true) == STR(\"true  \"));\r\n    assert(format(STR(\"{:6}\"), false) == STR(\"false \"));\r\n\r\n    // Precision\r\n    throw_helper(STR(\"{:.5}\"), true);\r\n\r\n    // Locale\r\n    assert(format(STR(\"{:L}\"), true) == STR(\"true\"));\r\n    assert(format(STR(\"{:L}\"), false) == STR(\"false\"));\r\n#if !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), true) == STR(\"true\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), false) == STR(\"false\"));\r\n\r\n    struct my_bool : numpunct<charT> {\r\n        basic_string<charT> do_truename() const override {\r\n            return STR(\"yes\");\r\n        }\r\n\r\n        basic_string<charT> do_falsename() const override {\r\n            return STR(\"no\");\r\n        }\r\n    };\r\n\r\n    locale loc{locale::classic(), new my_bool};\r\n\r\n    assert(format(loc, STR(\"{:L}\"), true) == STR(\"yes\"));\r\n    assert(format(loc, STR(\"{:L}\"), false) == STR(\"no\"));\r\n#endif // !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n\r\n    // Type\r\n    assert(format(STR(\"{:s}\"), true) == STR(\"true\"));\r\n    throw_helper(STR(\"{:a}\"), true);\r\n\r\n    test_type(STR(\"{:b}\"), true);\r\n    test_type(STR(\"{:B}\"), true);\r\n    test_type(STR(\"{:d}\"), true);\r\n    test_type(STR(\"{:o}\"), true);\r\n    test_type(STR(\"{:x}\"), true);\r\n    test_type(STR(\"{:X}\"), true);\r\n\r\n    test_type(STR(\"{:b}\"), false);\r\n    test_type(STR(\"{:B}\"), false);\r\n    test_type(STR(\"{:d}\"), false);\r\n    test_type(STR(\"{:o}\"), false);\r\n    test_type(STR(\"{:x}\"), false);\r\n    test_type(STR(\"{:X}\"), false);\r\n}\r\n\r\ntemplate <class charT>\r\nvoid test_char_specs() {\r\n    assert(format(STR(\"{:}\"), charT{'X'}) == STR(\"X\"));\r\n\r\n    // Sign\r\n    throw_helper(STR(\"{: }\"), charT{'X'});\r\n    throw_helper(STR(\"{:+}\"), charT{'X'});\r\n    throw_helper(STR(\"{:-}\"), charT{'X'});\r\n\r\n    // Alternate form\r\n    throw_helper(STR(\"{:#}\"), charT{'X'});\r\n\r\n    // Leading zero\r\n    throw_helper(STR(\"{:0}\"), charT{'X'});\r\n\r\n    // Width\r\n    assert(format(STR(\"{:3}\"), charT{'X'}) == STR(\"X  \"));\r\n\r\n    // Precision\r\n    throw_helper(STR(\"{:.5}\"), charT{'X'});\r\n\r\n\r\n    // Types\r\n    assert(format(STR(\"{:c}\"), charT{'X'}) == STR(\"X\"));\r\n    throw_helper(STR(\"{:a}\"), charT{'X'});\r\n\r\n    test_type(STR(\"{:b}\"), charT{'X'});\r\n    test_type(STR(\"{:B}\"), charT{'X'});\r\n    test_type(STR(\"{:c}\"), charT{'X'});\r\n    test_type(STR(\"{:d}\"), charT{'X'});\r\n    test_type(STR(\"{:o}\"), charT{'X'});\r\n    test_type(STR(\"{:x}\"), charT{'X'});\r\n    test_type(STR(\"{:X}\"), charT{'X'});\r\n\r\n    test_type(STR(\"{:+d}\"), charT{'X'});\r\n\r\n    // P2909R4 Fix formatting of code units as integers\r\n    constexpr charT irregular_code_unit     = static_cast<charT>(255);\r\n    constexpr int irregular_code_unit_value = static_cast<make_unsigned_t<charT>>(irregular_code_unit);\r\n    assert(format(STR(\"{:b}\"), irregular_code_unit) == format(STR(\"{:b}\"), irregular_code_unit_value));\r\n    assert(format(STR(\"{:B}\"), irregular_code_unit) == format(STR(\"{:B}\"), irregular_code_unit_value));\r\n    assert(format(STR(\"{:d}\"), irregular_code_unit) == format(STR(\"{:d}\"), irregular_code_unit_value));\r\n    assert(format(STR(\"{:o}\"), irregular_code_unit) == format(STR(\"{:o}\"), irregular_code_unit_value));\r\n    assert(format(STR(\"{:x}\"), irregular_code_unit) == format(STR(\"{:x}\"), irregular_code_unit_value));\r\n    assert(format(STR(\"{:X}\"), irregular_code_unit) == format(STR(\"{:X}\"), irregular_code_unit_value));\r\n    assert(format(STR(\"{:+d}\"), irregular_code_unit) == format(STR(\"{:+d}\"), irregular_code_unit_value));\r\n}\r\n\r\ntemplate <class charT, class Float>\r\nvoid test_float_specs() {\r\n    const Float inf = numeric_limits<Float>::infinity();\r\n    const Float nan = numeric_limits<Float>::quiet_NaN();\r\n\r\n    // invalid specs\r\n    throw_helper(STR(\"{:b}\"), 3.14f);\r\n    throw_helper(STR(\"{:B}\"), 3.14f);\r\n    throw_helper(STR(\"{:c}\"), 3.14f);\r\n    throw_helper(STR(\"{:d}\"), 3.14f);\r\n    throw_helper(STR(\"{:o}\"), 3.14f);\r\n    throw_helper(STR(\"{:x}\"), 3.14f);\r\n    throw_helper(STR(\"{:X}\"), 3.14f);\r\n\r\n    assert(format(STR(\"{:}\"), Float{0}) == STR(\"0\"));\r\n    assert(format(STR(\"{:}\"), inf) == STR(\"inf\"));\r\n    assert(format(STR(\"{:}\"), nan) == STR(\"nan\"));\r\n\r\n    // Sign\r\n    assert(format(STR(\"{: }\"), Float{0}) == STR(\" 0\"));\r\n    assert(format(STR(\"{:+}\"), Float{0}) == STR(\"+0\"));\r\n    assert(format(STR(\"{:-}\"), Float{0}) == STR(\"0\"));\r\n\r\n    assert(format(STR(\"{: }\"), Float{-1}) == STR(\"-1\"));\r\n    assert(format(STR(\"{:+}\"), Float{-1}) == STR(\"-1\"));\r\n    assert(format(STR(\"{:-}\"), Float{-1}) == STR(\"-1\"));\r\n\r\n    assert(format(STR(\"{: 3}\"), Float{1}) == STR(\"  1\"));\r\n    assert(format(STR(\"{:+3}\"), Float{1}) == STR(\" +1\"));\r\n    assert(format(STR(\"{:-3}\"), Float{1}) == STR(\"  1\"));\r\n\r\n    assert(format(STR(\"{: }\"), inf) == STR(\" inf\"));\r\n    assert(format(STR(\"{:+}\"), inf) == STR(\"+inf\"));\r\n    assert(format(STR(\"{:-}\"), inf) == STR(\"inf\"));\r\n\r\n    assert(format(STR(\"{: }\"), -inf) == STR(\"-inf\"));\r\n    assert(format(STR(\"{:+}\"), -inf) == STR(\"-inf\"));\r\n    assert(format(STR(\"{:-}\"), -inf) == STR(\"-inf\"));\r\n\r\n    assert(format(STR(\"{: }\"), nan) == STR(\" nan\"));\r\n    assert(format(STR(\"{:+}\"), nan) == STR(\"+nan\"));\r\n    assert(format(STR(\"{:-}\"), nan) == STR(\"nan\"));\r\n\r\n    assert(format(STR(\"{: }\"), -nan) == STR(\"-nan\"));\r\n    assert(format(STR(\"{:+}\"), -nan) == STR(\"-nan\"));\r\n    assert(format(STR(\"{:-}\"), -nan) == STR(\"-nan\"));\r\n\r\n    // Alternate form\r\n    assert(format(STR(\"{:#}\"), Float{0}) == STR(\"0.\"));\r\n    assert(format(STR(\"{:#a}\"), Float{0}) == STR(\"0.p+0\"));\r\n    assert(format(STR(\"{:#A}\"), Float{0}) == STR(\"0.P+0\"));\r\n    assert(format(STR(\"{:#.0e}\"), Float{0}) == STR(\"0.e+00\"));\r\n    assert(format(STR(\"{:#.0E}\"), Float{0}) == STR(\"0.E+00\"));\r\n    assert(format(STR(\"{:#.0f}\"), Float{0}) == STR(\"0.\"));\r\n    assert(format(STR(\"{:#.0F}\"), Float{0}) == STR(\"0.\"));\r\n    assert(format(STR(\"{:#g}\"), Float{0}) == STR(\"0.00000\"));\r\n    assert(format(STR(\"{:#G}\"), Float{0}) == STR(\"0.00000\"));\r\n    assert(format(STR(\"{:#g}\"), Float{1.2}) == STR(\"1.20000\"));\r\n    assert(format(STR(\"{:#G}\"), Float{1.2}) == STR(\"1.20000\"));\r\n    assert(format(STR(\"{:#g}\"), Float{1'000'000}) == STR(\"1.00000e+06\"));\r\n    assert(format(STR(\"{:#g}\"), Float{12.2}) == STR(\"12.2000\"));\r\n    assert(format(STR(\"{:#.0g}\"), Float{0}) == STR(\"0.\"));\r\n    assert(format(STR(\"{:#.0G}\"), Float{0}) == STR(\"0.\"));\r\n\r\n\r\n    assert(format(STR(\"{:#.2g}\"), 0.5) == STR(\"0.50\"));\r\n    assert(format(STR(\"{:#.1g}\"), 0.5) == STR(\"0.5\"));\r\n    assert(format(STR(\"{:#.3g}\"), 0.5) == STR(\"0.500\"));\r\n    assert(format(STR(\"{:#.3g}\"), 0.05) == STR(\"0.0500\"));\r\n    assert(format(STR(\"{:#.3g}\"), 0.0005) == STR(\"0.000500\"));\r\n    assert(format(STR(\"{:#.3g}\"), 0.00005) == STR(\"5.00e-05\"));\r\n    assert(format(STR(\"{:#.2g}\"), 0.0999) == STR(\"0.10\"));\r\n    assert(format(STR(\"{:#.3g}\"), 0.000470) == STR(\"0.000470\"));\r\n\r\n    assert(format(STR(\"{:#} {:#}\"), inf, nan) == STR(\"inf nan\"));\r\n    assert(format(STR(\"{:#a} {:#a}\"), inf, nan) == STR(\"inf nan\"));\r\n    assert(format(STR(\"{:#A} {:#A}\"), inf, nan) == STR(\"INF NAN\"));\r\n    assert(format(STR(\"{:#e} {:#e}\"), inf, nan) == STR(\"inf nan\"));\r\n    assert(format(STR(\"{:#E} {:#E}\"), inf, nan) == STR(\"INF NAN\"));\r\n    assert(format(STR(\"{:#f} {:#f}\"), inf, nan) == STR(\"inf nan\"));\r\n    assert(format(STR(\"{:#F} {:#F}\"), inf, nan) == STR(\"INF NAN\"));\r\n    assert(format(STR(\"{:#g} {:#g}\"), inf, nan) == STR(\"inf nan\"));\r\n    assert(format(STR(\"{:#G} {:#G}\"), inf, nan) == STR(\"INF NAN\"));\r\n\r\n    assert(format(STR(\"{:#} {:#}\"), -inf, -nan) == STR(\"-inf -nan\"));\r\n    assert(format(STR(\"{:#a} {:#a}\"), -inf, -nan) == STR(\"-inf -nan\"));\r\n    assert(format(STR(\"{:#A} {:#A}\"), -inf, -nan) == STR(\"-INF -NAN\"));\r\n    assert(format(STR(\"{:#e} {:#e}\"), -inf, -nan) == STR(\"-inf -nan\"));\r\n    assert(format(STR(\"{:#E} {:#E}\"), -inf, -nan) == STR(\"-INF -NAN\"));\r\n    assert(format(STR(\"{:#f} {:#f}\"), -inf, -nan) == STR(\"-inf -nan\"));\r\n    assert(format(STR(\"{:#F} {:#F}\"), -inf, -nan) == STR(\"-INF -NAN\"));\r\n    assert(format(STR(\"{:#g} {:#g}\"), -inf, -nan) == STR(\"-inf -nan\"));\r\n    assert(format(STR(\"{:#G} {:#G}\"), -inf, -nan) == STR(\"-INF -NAN\"));\r\n\r\n    // Width\r\n    assert(format(STR(\"{:3}\"), Float{0}) == STR(\"  0\"));\r\n    assert(format(STR(\"{:#9G}\"), Float{12.2}) == STR(\"  12.2000\"));\r\n    assert(format(STR(\"{:#12g}\"), Float{1'000'000}) == STR(\" 1.00000e+06\"));\r\n    assert(format(STR(\"[{:#6.0g}]\"), 1.234e-37) == STR(\"[1.e-37]\"));\r\n\r\n    // Precision\r\n    Float value = 1234.52734375;\r\n    assert(format(STR(\"{:.4}\"), value) == STR(\"1235\"));\r\n    assert(format(STR(\"{:.1}\"), inf) == STR(\"inf\"));\r\n    assert(format(STR(\"{:.1}\"), nan) == STR(\"nan\"));\r\n\r\n    assert(format(STR(\"{:.4a}\"), value) == STR(\"1.34a2p+10\"));\r\n    assert(format(STR(\"{:.4A}\"), value) == STR(\"1.34A2P+10\"));\r\n\r\n    assert(format(STR(\"{:.4e}\"), value) == STR(\"1.2345e+03\"));\r\n    assert(format(STR(\"{:.4E}\"), value) == STR(\"1.2345E+03\"));\r\n\r\n    assert(format(STR(\"{:.4f}\"), value) == STR(\"1234.5273\"));\r\n    assert(format(STR(\"{:.4F}\"), value) == STR(\"1234.5273\"));\r\n\r\n    assert(format(STR(\"{:.4g}\"), value) == STR(\"1235\"));\r\n    assert(format(STR(\"{:.4G}\"), value) == STR(\"1235\"));\r\n\r\n    assert(format(STR(\"{:.3000f}\"), -numeric_limits<Float>::max()).size()\r\n           == 3002 + numeric_limits<Float>::max_exponent10 + 1);\r\n    assert(format(STR(\"{:.3000f}\"), -numeric_limits<Float>::denorm_min()).size() == 3003);\r\n    assert(format(STR(\"{:#.3000g}\"), -numeric_limits<Float>::max()).size() == 3002);\r\n    assert(format(STR(\"{:#.3000g}\"), -numeric_limits<Float>::denorm_min()).size()\r\n           == 3007 - static_cast<int>(is_same_v<Float, float>));\r\n\r\n    for (auto limits : {-numeric_limits<Float>::max(), -numeric_limits<Float>::denorm_min()}) {\r\n        auto fixed3000 = format(STR(\"{:.3000f}\"), limits);\r\n        auto fixed1500 = format(STR(\"{:.1500f}\"), limits);\r\n        assert(fixed1500 == fixed3000.substr(0, fixed1500.size()));\r\n        assert(all_of(fixed3000.begin() + static_cast<int>(fixed1500.size()), fixed3000.end(),\r\n            [](auto ch) { return ch == charT{'0'}; }));\r\n    }\r\n\r\n    for (auto limits : {-numeric_limits<Float>::max(), -numeric_limits<Float>::denorm_min()}) {\r\n        auto general3000 = format(STR(\"{:#.3000g}\"), limits);\r\n        auto general1500 = format(STR(\"{:#.3000g}\"), limits);\r\n        assert(general1500 == general3000.substr(0, general1500.size()));\r\n        assert(all_of(general3000.begin() + static_cast<int>(general1500.size()), general3000.end(),\r\n            [](auto ch) { return ch == charT{'0'}; }));\r\n    }\r\n\r\n    // Test type specifiers together with precision beyond _Max_precision\r\n    if constexpr (is_same_v<charT, char>) {\r\n        charT buffer[2048];\r\n\r\n        string_view expected{buffer, to_chars(begin(buffer), end(buffer), value, chars_format::general, 2000).ptr};\r\n        assert(format(\"{:.2000}\", value) == expected);\r\n\r\n        expected = {buffer, to_chars(begin(buffer), end(buffer), value, chars_format::hex, 2000).ptr};\r\n        assert(format(\"{:.2000a}\", value) == expected);\r\n\r\n        expected = {buffer, to_chars(begin(buffer), end(buffer), value, chars_format::scientific, 2000).ptr};\r\n        assert(format(\"{:.2000e}\", value) == expected);\r\n\r\n        expected = {buffer, to_chars(begin(buffer), end(buffer), value, chars_format::fixed, 2000).ptr};\r\n        assert(format(\"{:.2000f}\", value) == expected);\r\n\r\n        expected = {buffer, to_chars(begin(buffer), end(buffer), value, chars_format::general, 2000).ptr};\r\n        assert(format(\"{:.2000g}\", value) == expected);\r\n\r\n        // Ensure that we behave correctly regarding natural numbers that do not need a decimal point\r\n        expected = {buffer, to_chars(begin(buffer), end(buffer), 1.0, chars_format::general, 2000).ptr};\r\n        assert(format(\"{:.2000}\", 1.0) == expected);\r\n\r\n        expected = {buffer, to_chars(begin(buffer), end(buffer), 1.0, chars_format::hex, 2000).ptr};\r\n        assert(format(\"{:.2000a}\", 1.0) == expected);\r\n\r\n        expected = {buffer, to_chars(begin(buffer), end(buffer), 1.0, chars_format::scientific, 2000).ptr};\r\n        assert(format(\"{:.2000e}\", 1.0) == expected);\r\n\r\n        expected = {buffer, to_chars(begin(buffer), end(buffer), 1.0, chars_format::fixed, 2000).ptr};\r\n        assert(format(\"{:.2000f}\", 1.0) == expected);\r\n\r\n        expected = {buffer, to_chars(begin(buffer), end(buffer), 1.0, chars_format::general, 2000).ptr};\r\n        assert(format(\"{:.2000g}\", 1.0) == expected);\r\n\r\n        // Ensure that we behave correctly regarding natural numbers that do not need a decimal point but we require it\r\n        // via #\r\n        assert(format(\"{:#}\", 1.0) == string(\"1.\"));\r\n        assert(format(\"{:#a}\", 1.0) == string(\"1.p+0\"));\r\n        assert(format(\"{:#e}\", 1.0) == string(\"1.000000e+00\"));\r\n        assert(format(\"{:#f}\", 1.0) == string(\"1.000000\"));\r\n        assert(format(\"{:#g}\", 1.0) == string(\"1.00000\"));\r\n    }\r\n\r\n    // Leading zero\r\n    assert(format(STR(\"{:06}\"), Float{0}) == STR(\"000000\"));\r\n    assert(format(STR(\"{:06}\"), Float{1.2}) == STR(\"0001.2\"));\r\n    assert(format(STR(\"{:06}\"), nan) == STR(\"   nan\"));\r\n    assert(format(STR(\"{:06}\"), -nan) == STR(\"  -nan\"));\r\n    assert(format(STR(\"{:06}\"), inf) == STR(\"   inf\"));\r\n    assert(format(STR(\"{:06}\"), -inf) == STR(\"  -inf\"));\r\n\r\n    // Locale\r\n#if !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), Float{0}) == STR(\"0\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:Lf}\"), Float{0}) == STR(\"0.000000\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), Float{100}) == STR(\"100\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), Float{100.2345}) == STR(\"100.2345\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:.4Lf}\"), value) == STR(\"1,234.5273\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:#.4Lg}\"), Float{0}) == STR(\"0.000\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), nan) == STR(\"nan\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), -nan) == STR(\"-nan\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), inf) == STR(\"inf\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:L}\"), -inf) == STR(\"-inf\"));\r\n\r\n    assert(format(locale{\"de-DE\"}, STR(\"{:Lf}\"), Float{0}) == STR(\"0,000000\"));\r\n#endif // !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n\r\n    // Type\r\n    assert(format(STR(\"{:a}\"), value) == STR(\"1.34a1cp+10\"));\r\n    assert(format(STR(\"{:A}\"), value) == STR(\"1.34A1CP+10\"));\r\n\r\n    assert(format(STR(\"{:e}\"), value) == STR(\"1.234527e+03\"));\r\n    assert(format(STR(\"{:E}\"), value) == STR(\"1.234527E+03\"));\r\n\r\n    assert(format(STR(\"{:f}\"), value) == STR(\"1234.527344\"));\r\n    assert(format(STR(\"{:F}\"), value) == STR(\"1234.527344\"));\r\n\r\n    assert(format(STR(\"{:g}\"), value) == STR(\"1234.53\"));\r\n    assert(format(STR(\"{:G}\"), value) == STR(\"1234.53\"));\r\n\r\n    assert(format(STR(\"{:a} {:a}\"), inf, nan) == STR(\"inf nan\"));\r\n    assert(format(STR(\"{:A} {:A}\"), inf, nan) == STR(\"INF NAN\"));\r\n    assert(format(STR(\"{:e} {:e}\"), inf, nan) == STR(\"inf nan\"));\r\n    assert(format(STR(\"{:E} {:E}\"), inf, nan) == STR(\"INF NAN\"));\r\n    assert(format(STR(\"{:f} {:f}\"), inf, nan) == STR(\"inf nan\"));\r\n    assert(format(STR(\"{:F} {:F}\"), inf, nan) == STR(\"INF NAN\"));\r\n    assert(format(STR(\"{:g} {:g}\"), inf, nan) == STR(\"inf nan\"));\r\n    assert(format(STR(\"{:G} {:G}\"), inf, nan) == STR(\"INF NAN\"));\r\n\r\n    assert(format(STR(\"{:a} {:a}\"), -inf, -nan) == STR(\"-inf -nan\"));\r\n    assert(format(STR(\"{:A} {:A}\"), -inf, -nan) == STR(\"-INF -NAN\"));\r\n    assert(format(STR(\"{:e} {:e}\"), -inf, -nan) == STR(\"-inf -nan\"));\r\n    assert(format(STR(\"{:E} {:E}\"), -inf, -nan) == STR(\"-INF -NAN\"));\r\n    assert(format(STR(\"{:f} {:f}\"), -inf, -nan) == STR(\"-inf -nan\"));\r\n    assert(format(STR(\"{:F} {:F}\"), -inf, -nan) == STR(\"-INF -NAN\"));\r\n    assert(format(STR(\"{:g} {:g}\"), -inf, -nan) == STR(\"-inf -nan\"));\r\n    assert(format(STR(\"{:G} {:G}\"), -inf, -nan) == STR(\"-INF -NAN\"));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid test_pointer_specs() {\r\n    assert(format(STR(\"{:}\"), nullptr) == STR(\"0x0\"));\r\n\r\n    // Sign\r\n    throw_helper(STR(\"{: }\"), nullptr);\r\n    throw_helper(STR(\"{:+}\"), nullptr);\r\n    throw_helper(STR(\"{:-}\"), nullptr);\r\n\r\n    // Alternate form\r\n    throw_helper(STR(\"{:#}\"), nullptr);\r\n\r\n    // Leading zero\r\n    assert(format(STR(\"{:05}\"), nullptr) == STR(\"0x000\"));\r\n\r\n    // Width\r\n    assert(format(STR(\"{:5}\"), nullptr) == STR(\"  0x0\"));\r\n\r\n    // Precision\r\n    throw_helper(STR(\"{:.5}\"), nullptr);\r\n\r\n    // Locale\r\n    throw_helper(STR(\"{:L}\"), nullptr);\r\n\r\n    // Types\r\n    assert(format(STR(\"{:p}\"), nullptr) == STR(\"0x0\"));\r\n    throw_helper(STR(\"{:a}\"), nullptr);\r\n}\r\n\r\ntemplate <class charT>\r\nvoid test_string_specs() {\r\n    auto cstr = STR(\"scully\");\r\n    basic_string_view view{cstr};\r\n\r\n    assert(format(STR(\"{:}\"), cstr) == cstr);\r\n    assert(format(STR(\"{:}\"), view) == cstr);\r\n\r\n    // Sign\r\n    throw_helper(STR(\"{: }\"), cstr);\r\n    throw_helper(STR(\"{:+}\"), cstr);\r\n    throw_helper(STR(\"{:-}\"), cstr);\r\n\r\n    throw_helper(STR(\"{: }\"), view);\r\n    throw_helper(STR(\"{:+}\"), view);\r\n    throw_helper(STR(\"{:-}\"), view);\r\n\r\n    // Alternate form\r\n    throw_helper(STR(\"{:#}\"), cstr);\r\n    throw_helper(STR(\"{:#}\"), view);\r\n\r\n    // Leading zero\r\n    throw_helper(STR(\"{:0}\"), cstr);\r\n    throw_helper(STR(\"{:0}\"), view);\r\n\r\n    // Width\r\n    assert(format(STR(\"{:8}\"), cstr) == STR(\"scully  \"));\r\n    assert(format(STR(\"{:8}\"), view) == STR(\"scully  \"));\r\n\r\n    // Precision\r\n    assert(format(STR(\"{:.2}\"), cstr) == STR(\"sc\"));\r\n    assert(format(STR(\"{:5.2}\"), cstr) == STR(\"sc   \"));\r\n    assert(format(STR(\"{:5.2}\"), cstr) == STR(\"sc   \"));\r\n    assert(format(STR(\"{:>5.2}\"), cstr) == STR(\"   sc\"));\r\n\r\n    assert(format(STR(\"{:.2}\"), view) == STR(\"sc\"));\r\n    assert(format(STR(\"{:5.2}\"), view) == STR(\"sc   \"));\r\n    assert(format(STR(\"{:5.2}\"), view) == STR(\"sc   \"));\r\n    assert(format(STR(\"{:>5.2}\"), view) == STR(\"   sc\"));\r\n\r\n    // Locale\r\n    throw_helper(STR(\"{:L}\"), cstr);\r\n    throw_helper(STR(\"{:L}\"), view);\r\n\r\n    // Types\r\n    assert(format(STR(\"{:s}\"), cstr) == cstr);\r\n    throw_helper(STR(\"{:a}\"), cstr);\r\n\r\n    assert(format(STR(\"{:s}\"), view) == cstr);\r\n    throw_helper(STR(\"{:a}\"), view);\r\n}\r\n\r\ntemplate <class charT>\r\nvoid test_spec_replacement_field() {\r\n    test_integral_specs<charT, int>();\r\n    test_integral_specs<charT, unsigned int>();\r\n    test_integral_specs<charT, long long>();\r\n    test_integral_specs<charT, unsigned long long>();\r\n    test_bool_specs<charT>();\r\n    test_char_specs<charT>();\r\n    test_float_specs<charT, float>();\r\n    test_float_specs<charT, double>();\r\n    test_float_specs<charT, long double>();\r\n    test_pointer_specs<charT>();\r\n    test_string_specs<charT>();\r\n}\r\ntemplate <class charT, class... Args>\r\nvoid test_size_helper_impl(const size_t expected_size, const basic_format_string<charT, Args...> fmt, Args&&... args) {\r\n    assert(formatted_size(fmt, forward<Args>(args)...) == expected_size);\r\n    assert(formatted_size(locale::classic(), fmt, forward<Args>(args)...) == expected_size);\r\n\r\n    const auto signed_size = static_cast<ptrdiff_t>(expected_size);\r\n    basic_string<charT> str;\r\n    {\r\n        str.resize(expected_size);\r\n        const auto res = format_to_n(str.begin(), signed_size, fmt, forward<Args>(args)...);\r\n        assert(res.size == signed_size);\r\n        assert(res.out - str.begin() == signed_size);\r\n        assert(res.out == str.end());\r\n        assert(vformat(fmt.get(), make_testing_format_args<charT>(args...)) == str);\r\n\r\n        basic_string<charT> locale_str;\r\n        locale_str.resize(expected_size);\r\n        format_to_n(locale_str.begin(), signed_size, locale::classic(), fmt, forward<Args>(args)...);\r\n        assert(str == locale_str);\r\n        assert(locale_str.size() == expected_size);\r\n    }\r\n    basic_string<charT> half_str;\r\n    {\r\n        const auto half_size = expected_size / 2;\r\n        half_str.resize(half_size);\r\n        const auto res = format_to_n(half_str.begin(), static_cast<ptrdiff_t>(half_size), fmt, forward<Args>(args)...);\r\n        assert(res.size == signed_size);\r\n        assert(static_cast<size_t>(res.out - half_str.begin()) == half_size);\r\n        assert(res.out == half_str.end());\r\n    }\r\n    assert(str.starts_with(half_str));\r\n}\r\n\r\ntemplate <class... Args>\r\nvoid test_size_helper(const size_t expected_size, const format_string<Args...> fmt, Args&&... args) {\r\n    test_size_helper_impl<char, Args...>(expected_size, fmt, forward<Args>(args)...);\r\n}\r\ntemplate <class... Args>\r\nvoid test_size_helper(const size_t expected_size, const wformat_string<Args...> fmt, Args&&... args) {\r\n    test_size_helper_impl<wchar_t, Args...>(expected_size, fmt, forward<Args>(args)...);\r\n}\r\n\r\n\r\ntemplate <class charT>\r\nvoid test_size() {\r\n    test_size_helper(3, STR(\"{}\"), 123);\r\n    test_size_helper(6, STR(\"{}\"), 3.1415);\r\n    test_size_helper(8, STR(\"{:8}\"), STR(\"scully\"));\r\n}\r\n\r\n// The libfmt_ tests are derived from tests in\r\n// libfmt, Copyright (c) 2012 - present, Victor Zverovich\r\n// See NOTICE.txt for more information.\r\n\r\ntemplate <class charT>\r\nvoid libfmt_formatter_test_escape() {\r\n    assert(format(STR(\"{{\")) == STR(\"{\"));\r\n    assert(format(STR(\"before {{\")) == STR(\"before {\"));\r\n    assert(format(STR(\"{{ after\")) == STR(\"{ after\"));\r\n    assert(format(STR(\"before {{ after\")) == STR(\"before { after\"));\r\n    assert(format(STR(\"}}\")) == STR(\"}\"));\r\n    assert(format(STR(\"before }}\")) == STR(\"before }\"));\r\n    assert(format(STR(\"}} after\")) == STR(\"} after\"));\r\n    assert(format(STR(\"before }} after\")) == STR(\"before } after\"));\r\n    assert(format(STR(\"{{}}\")) == STR(\"{}\"));\r\n    assert(format(STR(\"{{{0}}}\"), 42) == STR(\"{42}\"));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid libfmt_formatter_test_args_in_different_position() {\r\n    assert(format(STR(\"{0}\"), 42) == STR(\"42\"));\r\n    assert(format(STR(\"before {0}\"), 42) == STR(\"before 42\"));\r\n    assert(format(STR(\"{0} after\"), 42) == STR(\"42 after\"));\r\n    assert(format(STR(\"before {0} after\"), 42) == STR(\"before 42 after\"));\r\n    assert(format(STR(\"{0} = {1}\"), STR(\"answer\"), 42) == STR(\"answer = 42\"));\r\n    assert(format(STR(\"{1} is the {0}\"), STR(\"answer\"), 42) == STR(\"42 is the answer\"));\r\n    assert(format(STR(\"{0}{1}{0}\"), STR(\"abra\"), STR(\"cad\")) == STR(\"abracadabra\"));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid libfmt_formatter_test_auto_arg_index() {\r\n    assert(format(STR(\"{}{}{}\"), 'a', 'b', 'c') == STR(\"abc\"));\r\n    throw_helper(STR(\"{0}{}\"), 'a', 'b');\r\n    throw_helper(STR(\"{}{0}\"), 'a', 'b');\r\n    assert(format(STR(\"{:.{}}\"), 1.2345, 2) == STR(\"1.2\"));\r\n    throw_helper(STR(\"{0}:.{}\"), 1.2345, 2);\r\n    throw_helper(STR(\"{:.{0}}\"), 1.2345, 2);\r\n    throw_helper(STR(\"{}\"));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid libfmt_formatter_test_left_align() {\r\n    assert(format(STR(\"{0:<4}\"), 42) == STR(\"42  \"));\r\n    assert(format(STR(\"{0:<4o}\"), 042) == STR(\"42  \"));\r\n    assert(format(STR(\"{0:<4x}\"), 0x42) == STR(\"42  \"));\r\n    assert(format(STR(\"{0:<5}\"), -42) == STR(\"-42  \"));\r\n    assert(format(STR(\"{0:<5}\"), 42u) == STR(\"42   \"));\r\n    assert(format(STR(\"{0:<5}\"), -42l) == STR(\"-42  \"));\r\n    assert(format(STR(\"{0:<5}\"), 42ul) == STR(\"42   \"));\r\n    assert(format(STR(\"{0:<5}\"), -42ll) == STR(\"-42  \"));\r\n    assert(format(STR(\"{0:<5}\"), 42ull) == STR(\"42   \"));\r\n    assert(format(STR(\"{0:<5}\"), -42.0) == STR(\"-42  \"));\r\n    assert(format(STR(\"{0:<5}\"), -42.0l) == STR(\"-42  \"));\r\n    assert(format(STR(\"{0:<5}\"), 'c') == STR(\"c    \"));\r\n    assert(format(STR(\"{0:<5}\"), STR(\"abc\")) == STR(\"abc  \"));\r\n    assert(format(STR(\"{0:<8}\"), reinterpret_cast<void*>(0xface)) == STR(\"0xface  \"));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid libfmt_formatter_test_right_align() {\r\n    assert(format(STR(\"{0:>4}\"), 42) == STR(\"  42\"));\r\n    assert(format(STR(\"{0:>4o}\"), 042) == STR(\"  42\"));\r\n    assert(format(STR(\"{0:>4x}\"), 0x42) == STR(\"  42\"));\r\n    assert(format(STR(\"{0:>5}\"), -42) == STR(\"  -42\"));\r\n    assert(format(STR(\"{0:>5}\"), 42u) == STR(\"   42\"));\r\n    assert(format(STR(\"{0:>5}\"), -42l) == STR(\"  -42\"));\r\n    assert(format(STR(\"{0:>5}\"), 42ul) == STR(\"   42\"));\r\n    assert(format(STR(\"{0:>5}\"), -42ll) == STR(\"  -42\"));\r\n    assert(format(STR(\"{0:>5}\"), 42ull) == STR(\"   42\"));\r\n    assert(format(STR(\"{0:>5}\"), -42.0) == STR(\"  -42\"));\r\n    assert(format(STR(\"{0:>5}\"), -42.0l) == STR(\"  -42\"));\r\n    assert(format(STR(\"{0:>5}\"), 'c') == STR(\"    c\"));\r\n    assert(format(STR(\"{0:>5}\"), STR(\"abc\")) == STR(\"  abc\"));\r\n    assert(format(STR(\"{0:>8}\"), reinterpret_cast<void*>(0xface)) == STR(\"  0xface\"));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid libfmt_formatter_test_center_align() {\r\n    assert(format(STR(\"{0:^5}\"), 42) == STR(\" 42  \"));\r\n    assert(format(STR(\"{0:^5o}\"), 042) == STR(\" 42  \"));\r\n    assert(format(STR(\"{0:^5x}\"), 0x42) == STR(\" 42  \"));\r\n    assert(format(STR(\"{0:^5}\"), -42) == STR(\" -42 \"));\r\n    assert(format(STR(\"{0:^5}\"), 42u) == STR(\" 42  \"));\r\n    assert(format(STR(\"{0:^5}\"), -42l) == STR(\" -42 \"));\r\n    assert(format(STR(\"{0:^5}\"), 42ul) == STR(\" 42  \"));\r\n    assert(format(STR(\"{0:^5}\"), -42ll) == STR(\" -42 \"));\r\n    assert(format(STR(\"{0:^5}\"), 42ull) == STR(\" 42  \"));\r\n    assert(format(STR(\"{0:^5}\"), -42.0) == STR(\" -42 \"));\r\n    assert(format(STR(\"{0:^5}\"), -42.0l) == STR(\" -42 \"));\r\n    assert(format(STR(\"{0:^5}\"), 'c') == STR(\"  c  \"));\r\n    assert(format(STR(\"{0:^6}\"), STR(\"abc\")) == STR(\" abc  \"));\r\n    assert(format(STR(\"{0:^8}\"), reinterpret_cast<void*>(0xface)) == STR(\" 0xface \"));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid libfmt_formatter_test_fill() {\r\n    throw_helper(STR(\"{0:{<5}\"), 'c');\r\n    throw_helper(STR(\"{0:{<5}}\"), 'c');\r\n    assert(format(STR(\"{0:*>4}\"), 42) == STR(\"**42\"));\r\n    assert(format(STR(\"{0:*>5}\"), -42) == STR(\"**-42\"));\r\n    assert(format(STR(\"{0:*>5}\"), 42u) == STR(\"***42\"));\r\n    assert(format(STR(\"{0:*>5}\"), -42l) == STR(\"**-42\"));\r\n    assert(format(STR(\"{0:*>5}\"), 42ul) == STR(\"***42\"));\r\n    assert(format(STR(\"{0:*>5}\"), -42ll) == STR(\"**-42\"));\r\n    assert(format(STR(\"{0:*>5}\"), 42ull) == STR(\"***42\"));\r\n    assert(format(STR(\"{0:*>5}\"), -42.0) == STR(\"**-42\"));\r\n    assert(format(STR(\"{0:*>5}\"), -42.0l) == STR(\"**-42\"));\r\n    assert(format(STR(\"{0:*<5}\"), 'c') == STR(\"c****\"));\r\n    assert(format(STR(\"{0:*<5}\"), STR(\"abc\")) == STR(\"abc**\"));\r\n    assert(format(STR(\"{0:*>8}\"), reinterpret_cast<void*>(0xface)) == STR(\"**0xface\"));\r\n    assert(format(STR(\"{:}=\"), STR(\"meow\")) == STR(\"meow=\"));\r\n    assert(format(basic_string_view<charT>(STR(\"{:\\0>4}\"), 6), '*') == basic_string<charT>(STR(\"\\0\\0\\0*\"), 4));\r\n    throw_helper(STR(\"{:\\x80\\x80\\x80\\x80\\x80>}\"), 0);\r\n}\r\n\r\ntemplate <class charT>\r\nvoid libfmt_formatter_test_plus_sign() {\r\n    assert(format(STR(\"{0:+}\"), 42) == STR(\"+42\"));\r\n    assert(format(STR(\"{0:+}\"), -42) == STR(\"-42\"));\r\n    assert(format(STR(\"{0:+}\"), 42) == STR(\"+42\"));\r\n    assert(format(STR(\"{0:+}\"), 42u) == STR(\"+42\")); // behavior differs from libfmt, but conforms\r\n    assert(format(STR(\"{0:+}\"), 42l) == STR(\"+42\"));\r\n    assert(format(STR(\"{0:+}\"), 42ul) == STR(\"+42\")); // behavior differs from libfmt, but conforms\r\n    assert(format(STR(\"{0:+}\"), 42ll) == STR(\"+42\"));\r\n    assert(format(STR(\"{0:+}\"), 42ull) == STR(\"+42\")); // behavior differs from libfmt, but conforms\r\n    assert(format(STR(\"{0:+}\"), 42.0) == STR(\"+42\"));\r\n    assert(format(STR(\"{0:+}\"), 42.0l) == STR(\"+42\"));\r\n    throw_helper(STR(\"{0:+\"), 'c');\r\n    throw_helper(STR(\"{0:+}\"), 'c');\r\n    throw_helper(STR(\"{0:+}\"), STR(\"abc\"));\r\n    throw_helper(STR(\"{0:+}\"), reinterpret_cast<void*>(0x42));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid libfmt_formatter_test_minus_sign() {\r\n    assert(format(STR(\"{0:-}\"), 42) == STR(\"42\"));\r\n    assert(format(STR(\"{0:-}\"), -42) == STR(\"-42\"));\r\n    assert(format(STR(\"{0:-}\"), 42) == STR(\"42\"));\r\n    assert(format(STR(\"{0:-}\"), 42u) == STR(\"42\")); // behavior differs from libfmt, but conforms\r\n    assert(format(STR(\"{0:-}\"), 42l) == STR(\"42\"));\r\n    assert(format(STR(\"{0:-}\"), 42ul) == STR(\"42\")); // behavior differs from libfmt, but conforms\r\n    assert(format(STR(\"{0:-}\"), 42ll) == STR(\"42\"));\r\n    assert(format(STR(\"{0:-}\"), 42ull) == STR(\"42\")); // behavior differs from libfmt, but conforms\r\n    assert(format(STR(\"{0:-}\"), 42.0) == STR(\"42\"));\r\n    assert(format(STR(\"{0:-}\"), 42.0l) == STR(\"42\"));\r\n    throw_helper(STR(\"{0:-\"), 'c');\r\n    throw_helper(STR(\"{0:-}\"), 'c');\r\n    throw_helper(STR(\"{0:-}\"), STR(\"abc\"));\r\n    throw_helper(STR(\"{0:-}\"), reinterpret_cast<void*>(0x42));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid libfmt_formatter_test_space_sign() {\r\n    assert(format(STR(\"{0: }\"), 42) == STR(\" 42\"));\r\n    assert(format(STR(\"{0: }\"), -42) == STR(\"-42\"));\r\n    assert(format(STR(\"{0: }\"), 42) == STR(\" 42\"));\r\n    assert(format(STR(\"{0: }\"), 42u) == STR(\" 42\")); // behavior differs from libfmt, but conforms\r\n    assert(format(STR(\"{0: }\"), 42l) == STR(\" 42\"));\r\n    assert(format(STR(\"{0: }\"), 42ul) == STR(\" 42\")); // behavior differs from libfmt, but conforms\r\n    assert(format(STR(\"{0: }\"), 42ll) == STR(\" 42\"));\r\n    assert(format(STR(\"{0: }\"), 42ull) == STR(\" 42\")); // behavior differs from libfmt, but conforms\r\n    assert(format(STR(\"{0: }\"), 42.0) == STR(\" 42\"));\r\n    assert(format(STR(\"{0: }\"), 42.0l) == STR(\" 42\"));\r\n    throw_helper(STR(\"{0: \"), 'c');\r\n    throw_helper(STR(\"{0: }\"), 'c');\r\n    throw_helper(STR(\"{0: }\"), STR(\"abc\"));\r\n    throw_helper(STR(\"{0: }\"), reinterpret_cast<void*>(0x42));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid libfmt_formatter_test_hash_flag() {\r\n    assert(format(STR(\"{0:#}\"), 42) == STR(\"42\"));\r\n    assert(format(STR(\"{0:#}\"), -42) == STR(\"-42\"));\r\n    assert(format(STR(\"{0:#b}\"), 42) == STR(\"0b101010\"));\r\n    assert(format(STR(\"{0:#B}\"), 42) == STR(\"0B101010\"));\r\n    assert(format(STR(\"{0:#b}\"), -42) == STR(\"-0b101010\"));\r\n    assert(format(STR(\"{0:#x}\"), 0x42) == STR(\"0x42\"));\r\n    assert(format(STR(\"{0:#X}\"), 0x42) == STR(\"0X42\"));\r\n    assert(format(STR(\"{0:#x}\"), -0x42) == STR(\"-0x42\"));\r\n    assert(format(STR(\"{0:#o}\"), 0) == STR(\"0\"));\r\n    assert(format(STR(\"{0:#o}\"), 042) == STR(\"042\"));\r\n    assert(format(STR(\"{0:#o}\"), -042) == STR(\"-042\"));\r\n    assert(format(STR(\"{0:#}\"), 42u) == STR(\"42\"));\r\n    assert(format(STR(\"{0:#x}\"), 0x42u) == STR(\"0x42\"));\r\n    assert(format(STR(\"{0:#o}\"), 042u) == STR(\"042\"));\r\n\r\n    assert(format(STR(\"{0:#}\"), -42l) == STR(\"-42\"));\r\n    assert(format(STR(\"{0:#x}\"), 0x42l) == STR(\"0x42\"));\r\n    assert(format(STR(\"{0:#x}\"), -0x42l) == STR(\"-0x42\"));\r\n    assert(format(STR(\"{0:#o}\"), 042l) == STR(\"042\"));\r\n    assert(format(STR(\"{0:#o}\"), -042l) == STR(\"-042\"));\r\n    assert(format(STR(\"{0:#}\"), 42ul) == STR(\"42\"));\r\n    assert(format(STR(\"{0:#x}\"), 0x42ul) == STR(\"0x42\"));\r\n    assert(format(STR(\"{0:#o}\"), 042ul) == STR(\"042\"));\r\n\r\n    assert(format(STR(\"{0:#}\"), -42ll) == STR(\"-42\"));\r\n    assert(format(STR(\"{0:#x}\"), 0x42ll) == STR(\"0x42\"));\r\n    assert(format(STR(\"{0:#x}\"), -0x42ll) == STR(\"-0x42\"));\r\n    assert(format(STR(\"{0:#o}\"), 042ll) == STR(\"042\"));\r\n    assert(format(STR(\"{0:#o}\"), -042ll) == STR(\"-042\"));\r\n    assert(format(STR(\"{0:#}\"), 42ull) == STR(\"42\"));\r\n    assert(format(STR(\"{0:#x}\"), 0x42ull) == STR(\"0x42\"));\r\n    assert(format(STR(\"{0:#o}\"), 042ull) == STR(\"042\"));\r\n\r\n    assert(format(STR(\"{0:#}\"), -42.0) == STR(\"-42.\")); // behavior differs from libfmt, but conforms\r\n    assert(format(STR(\"{0:#}\"), -42.0l) == STR(\"-42.\")); // behavior differs from libfmt, but conforms\r\n    assert(format(STR(\"{:#.0e}\"), 42.0) == STR(\"4.e+01\"));\r\n    assert(format(STR(\"{:#.0f}\"), 0.01) == STR(\"0.\"));\r\n    assert(format(STR(\"{:#.2g}\"), 0.5) == STR(\"0.50\"));\r\n    assert(format(STR(\"{:#.0f}\"), 0.5) == STR(\"0.\"));\r\n    throw_helper(STR(\"{0:#\"), 'c');\r\n    throw_helper(STR(\"{0:#}\"), 'c');\r\n    throw_helper(STR(\"{0:#}\"), STR(\"abc\"));\r\n    throw_helper(STR(\"{0:#}\"), reinterpret_cast<void*>(0x42));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid libfmt_formatter_test_zero_flag() {\r\n    assert(format(STR(\"{0:0}\"), 42) == STR(\"42\"));\r\n    assert(format(STR(\"{0:05}\"), -42) == STR(\"-0042\"));\r\n    assert(format(STR(\"{0:05}\"), 42u) == STR(\"00042\"));\r\n    assert(format(STR(\"{0:05}\"), -42l) == STR(\"-0042\"));\r\n    assert(format(STR(\"{0:05}\"), 42ul) == STR(\"00042\"));\r\n    assert(format(STR(\"{0:05}\"), -42ll) == STR(\"-0042\"));\r\n    assert(format(STR(\"{0:05}\"), 42ull) == STR(\"00042\"));\r\n    assert(format(STR(\"{0:07}\"), -42.0) == STR(\"-000042\"));\r\n    assert(format(STR(\"{0:07}\"), -42.0l) == STR(\"-000042\"));\r\n    assert(format(STR(\"{0:05}\"), reinterpret_cast<void*>(0x42)) == STR(\"0x042\"));\r\n    throw_helper(STR(\"{0:0\"), 'c');\r\n    throw_helper(STR(\"{0:05}\"), 'c');\r\n    throw_helper(STR(\"{0:05}\"), STR(\"abc\"));\r\n}\r\n\r\ntemplate <class charT>\r\nvoid libfmt_formatter_test_runtime_width() {\r\n    throw_helper(STR(\"{0:{\"), 0);\r\n    throw_helper(STR(\"{0:{}\"), 0);\r\n    throw_helper(STR(\"{0:{?}}\"), 0);\r\n    throw_helper(STR(\"{0:{1}}\"), 0);\r\n    throw_helper(STR(\"{0:{0:}}\"), 0);\r\n    throw_helper(STR(\"{0:{1}}\"), 0, -1);\r\n    throw_helper(STR(\"{0:{1}}\"), 0, int_max + 1u);\r\n    throw_helper(STR(\"{0:{1}}\"), 0, -1l);\r\n    throw_helper(STR(\"{0:{1}}\"), 0, int_max + 1ul);\r\n    throw_helper(STR(\"{0:{1}}\"), 0, 0.0);\r\n\r\n    // LWG-3720: Restrict the valid types of arg-id for width and precision in std-format-spec\r\n    throw_helper(STR(\"{:*^{}}\"), 'a', true);\r\n    throw_helper(STR(\"{:*^{}}\"), 'a', '0');\r\n    assert(format(STR(\"{:*^{}}\"), 'a', static_cast<signed char>(2)) == STR(\"a*\"));\r\n\r\n    assert(format(STR(\"{0:{1}}\"), 42, 0) == STR(\"42\")); // LWG-3721: zero dynamic width is OK\r\n\r\n    assert(format(STR(\"{0:{1}}\"), -42, 4) == STR(\" -42\"));\r\n    assert(format(STR(\"{0:{1}}\"), 42u, 5) == STR(\"   42\"));\r\n    assert(format(STR(\"{0:{1}}\"), -42l, 6) == STR(\"   -42\"));\r\n    assert(format(STR(\"{0:{1}}\"), 42ul, 7) == STR(\"     42\"));\r\n    assert(format(STR(\"{0:{1}}\"), -42ll, 6) == STR(\"   -42\"));\r\n    assert(format(STR(\"{0:{1}}\"), 42ull, 7) == STR(\"     42\"));\r\n    assert(format(STR(\"{0:{1}}\"), -1.23, 8) == STR(\"   -1.23\"));\r\n    assert(format(STR(\"{0:{1}}\"), -1.23l, 9) == STR(\"    -1.23\"));\r\n    assert(format(STR(\"{0:{1}}\"), reinterpret_cast<void*>(0xcafe), 10) == STR(\"    0xcafe\"));\r\n    assert(format(STR(\"{0:{1}}\"), 'x', 11) == STR(\"x          \"));\r\n    assert(format(STR(\"{0:{1}}\"), STR(\"str\"), 12) == STR(\"str         \"));\r\n\r\n    // Test positive and negative dynamic width:\r\n    assert(format(STR(\"{:{}}\"), 42, 5) == STR(\"   42\"));\r\n    throw_helper(STR(\"{:{}}\"), 42, -5);\r\n}\r\n\r\ntemplate <class charT>\r\nvoid libfmt_formatter_test_runtime_precision() {\r\n    throw_helper(STR(\"{0:.{\"), 0);\r\n    throw_helper(STR(\"{0:.{}\"), 0);\r\n    throw_helper(STR(\"{0:.{?}}\"), 0);\r\n    throw_helper(STR(\"{0:.{1}\"), 0, 0);\r\n    throw_helper(STR(\"{0:.{1}}\"), 0);\r\n    throw_helper(STR(\"{0:.{0:}}\"), 0);\r\n    throw_helper(STR(\"{0:.{1}}\"), 0, -1);\r\n    throw_helper(STR(\"{0:.{1}}\"), 0, int_max + 1u);\r\n    throw_helper(STR(\"{0:.{1}}\"), 0, -1l);\r\n    throw_helper(STR(\"{0:.{1}}\"), 0, int_max + 1ul);\r\n    throw_helper(STR(\"{0:.{1}}\"), 0, '0');\r\n    throw_helper(STR(\"{0:.{1}}\"), 0, 0.0);\r\n    throw_helper(STR(\"{0:.{1}}\"), 42, 2);\r\n    throw_helper(STR(\"{0:.{1}f}\"), 42, 2);\r\n    throw_helper(STR(\"{0:.{1}}\"), 42u, 2);\r\n    throw_helper(STR(\"{0:.{1}f}\"), 42u, 2);\r\n    throw_helper(STR(\"{0:.{1}}\"), 42l, 2);\r\n    throw_helper(STR(\"{0:.{1}f}\"), 42l, 2);\r\n    throw_helper(STR(\"{0:.{1}}\"), 42ul, 2);\r\n    throw_helper(STR(\"{0:.{1}f}\"), 42ul, 2);\r\n    throw_helper(STR(\"{0:.{1}}\"), 42ll, 2);\r\n    throw_helper(STR(\"{0:.{1}f}\"), 42ll, 2);\r\n    throw_helper(STR(\"{0:.{1}}\"), 42ull, 2);\r\n    throw_helper(STR(\"{0:.{1}f}\"), 42ull, 2);\r\n    throw_helper(STR(\"{0:3.{1}}\"), 'x', 0);\r\n    assert(format(STR(\"{0:.{1}}\"), 1.2345, 2) == STR(\"1.2\"));\r\n    assert(format(STR(\"{1:.{0}}\"), 2, 1.2345l) == STR(\"1.2\"));\r\n    throw_helper(STR(\"{0:.{1}}\"), reinterpret_cast<void*>(0xcafe), 2);\r\n    throw_helper(STR(\"{0:.{1}f}\"), reinterpret_cast<void*>(0xcafe), 2);\r\n    assert(format(STR(\"{0:.{1}}\"), STR(\"str\"), 2) == STR(\"st\"));\r\n\r\n    // LWG-3720: Restrict the valid types of arg-id for width and precision in std-format-spec\r\n    throw_helper(STR(\"{:.{}f}\"), 3.14f, true);\r\n    throw_helper(STR(\"{:.{}f}\"), 3.14f, '0');\r\n    assert(format(STR(\"{:.{}f}\"), 3.14f, static_cast<signed char>(2)) == STR(\"3.14\"));\r\n\r\n    // Test positive and negative dynamic precision:\r\n    assert(format(STR(\"{:.{}}\"), 3.14159265358979, 5) == STR(\"3.1416\"));\r\n    throw_helper(STR(\"{:.{}}\"), 3.14159265358979, -5);\r\n}\r\n\r\ntemplate <class charT>\r\nvoid test_locale_specific_formatting_without_locale() {\r\n#if !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n    locale loc(\"en-US.UTF-8\");\r\n    locale::global(loc);\r\n    assert(format(STR(\"{:L}\"), 12345) == STR(\"12,345\"));\r\n    locale::global(locale::classic());\r\n#endif // !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n}\r\n\r\ntemplate <class charT>\r\nvoid test_slow_append_path() {\r\n    const charT* const hello_world = STR(\"Hello world\");\r\n\r\n    // test format_to with a back_insert_iterator to a list, which will pick the slow path.\r\n    list<charT> list_output;\r\n    format_to(back_inserter(list_output), STR(\"{}\"), hello_world);\r\n    assert((basic_string<charT>{list_output.begin(), list_output.end()} == hello_world));\r\n\r\n    // test format_to with a normal iterator to a string, which will also pick the _Copy_unchecked path.\r\n    basic_string<charT> str;\r\n    str.resize(char_traits<charT>::length(hello_world));\r\n    format_to(str.begin(), STR(\"{}\"), hello_world);\r\n    assert(str == hello_world);\r\n}\r\n\r\ntemplate <class charT>\r\nvoid test_sane_c_specifier() {\r\n    throw_helper(STR(\"{:#}\"), true);\r\n    throw_helper(STR(\"{:#c}\"), true);\r\n    throw_helper(STR(\"{:+}\"), true);\r\n    throw_helper(STR(\"{:+c}\"), true);\r\n    assert(format(STR(\"{:^}\"), true) == STR(\"true\"));\r\n    throw_helper(STR(\"{:^c}\"), true);\r\n    throw_helper(STR(\"{:0}\"), true);\r\n    throw_helper(STR(\"{:0c}\"), true);\r\n    throw_helper(STR(\"{:c}\"), true);\r\n\r\n    throw_helper(STR(\"{:#}\"), 'c');\r\n    throw_helper(STR(\"{:#c}\"), 'c');\r\n    throw_helper(STR(\"{:+}\"), 'c');\r\n    throw_helper(STR(\"{:+c}\"), 'c');\r\n    assert(format(STR(\"{:^}\"), 'c') == STR(\"c\"));\r\n    assert(format(STR(\"{:^c}\"), 'c') == STR(\"c\"));\r\n    throw_helper(STR(\"{:0}\"), 'c');\r\n    throw_helper(STR(\"{:0c}\"), 'c');\r\n    assert(format(STR(\"{:c}\"), 'c') == STR(\"c\"));\r\n}\r\n\r\ntemplate <class charT, class T>\r\nvoid test_localized_char() {\r\n    // L should be accepted and ignored for \"integral types\" charT and char\r\n    assert(format(STR(\"{:L}\"), T('c')) == STR(\"c\"));\r\n    assert(format(STR(\"{:Lc}\"), T('c')) == STR(\"c\"));\r\n}\r\n\r\ntemplate <class charT>\r\nconstexpr void test_basic_format_string() {\r\n    {\r\n        basic_format_string<charT> fmt_str = basic_string_view{STR(\"meow\")};\r\n        assert(fmt_str.get() == STR(\"meow\"));\r\n    }\r\n    {\r\n        basic_format_string<charT, double, int> fmt_str = STR(\"{:a} {:b}\");\r\n        assert(fmt_str.get() == STR(\"{:a} {:b}\"));\r\n    }\r\n}\r\n\r\nconstexpr bool test_format_string() {\r\n    test_basic_format_string<char>();\r\n    test_basic_format_string<wchar_t>();\r\n\r\n    static_assert(is_same_v<format_string<int*>, basic_format_string<char, int*>>);\r\n    static_assert(is_same_v<wformat_string<int*>, basic_format_string<wchar_t, int*>>);\r\n\r\n    return true;\r\n}\r\n\r\n// Also test GH-4316 <format>: The width of output is miscalculated\r\n// when formatting a floating-point number in the locale-specific form\r\ntemplate <class charT>\r\nvoid test_gh_4316() {\r\n    assert(format(locale{\"en-US\"}, STR(\"{:@>8L}\"), 12345) == STR(\"@@12,345\"));\r\n    assert(format(locale{\"en-US\"}, STR(\"{:@>8L}\"), 12345.0) == STR(\"@@12,345\"));\r\n}\r\n\r\n// Also test GH-4319: incorrect output for some floating-point values\r\ntemplate <class charT>\r\nvoid test_gh_4319() {\r\n    assert(format(STR(\"{:}\"), 12345678.0) == STR(\"12345678\"));\r\n}\r\n\r\n// GH-4320: <format>: crash when formatting a floating-point value with #/L and a large precision\r\ntemplate <class charT>\r\nvoid test_gh_4320() {\r\n    assert(\r\n        format(STR(\"{:#.1075e}\"), 1.0)\r\n        == STR(\r\n            \"1.\"\r\n            \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n            \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n            \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n            \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n            \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n            \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n            \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n            \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n            \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n            \"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"\r\n            \"00000000000000000000000000000000000e+00\"));\r\n}\r\n\r\nvoid test() {\r\n    test_simple_formatting<char>();\r\n    test_simple_formatting<wchar_t>();\r\n\r\n    test_escaped_curls<char>();\r\n    test_escaped_curls<wchar_t>();\r\n\r\n    test_simple_replacement_field<char>();\r\n    test_simple_replacement_field<wchar_t>();\r\n\r\n    test_multiple_replacement_fields<char>();\r\n    test_multiple_replacement_fields<wchar_t>();\r\n\r\n    test_fill_and_align<char>();\r\n    test_fill_and_align<wchar_t>();\r\n\r\n    test_spec_replacement_field<char>();\r\n    test_spec_replacement_field<wchar_t>();\r\n\r\n    test_size<char>();\r\n    test_size<wchar_t>();\r\n\r\n    libfmt_formatter_test_escape<char>();\r\n    libfmt_formatter_test_escape<wchar_t>();\r\n\r\n    libfmt_formatter_test_args_in_different_position<char>();\r\n    libfmt_formatter_test_args_in_different_position<wchar_t>();\r\n\r\n    libfmt_formatter_test_auto_arg_index<char>();\r\n    libfmt_formatter_test_auto_arg_index<wchar_t>();\r\n\r\n    libfmt_formatter_test_left_align<char>();\r\n    libfmt_formatter_test_left_align<wchar_t>();\r\n\r\n    libfmt_formatter_test_right_align<char>();\r\n    libfmt_formatter_test_right_align<wchar_t>();\r\n\r\n    libfmt_formatter_test_center_align<char>();\r\n    libfmt_formatter_test_center_align<wchar_t>();\r\n\r\n    libfmt_formatter_test_fill<char>();\r\n    libfmt_formatter_test_fill<wchar_t>();\r\n\r\n    libfmt_formatter_test_plus_sign<char>();\r\n    libfmt_formatter_test_plus_sign<wchar_t>();\r\n\r\n    libfmt_formatter_test_minus_sign<char>();\r\n    libfmt_formatter_test_minus_sign<wchar_t>();\r\n\r\n    libfmt_formatter_test_space_sign<char>();\r\n    libfmt_formatter_test_space_sign<wchar_t>();\r\n\r\n    libfmt_formatter_test_hash_flag<char>();\r\n    libfmt_formatter_test_hash_flag<wchar_t>();\r\n\r\n    libfmt_formatter_test_zero_flag<char>();\r\n    libfmt_formatter_test_zero_flag<wchar_t>();\r\n\r\n    libfmt_formatter_test_runtime_width<char>();\r\n    libfmt_formatter_test_runtime_width<wchar_t>();\r\n\r\n    libfmt_formatter_test_runtime_precision<char>();\r\n    libfmt_formatter_test_runtime_precision<wchar_t>();\r\n\r\n    test_locale_specific_formatting_without_locale<char>();\r\n    test_locale_specific_formatting_without_locale<wchar_t>();\r\n\r\n    test_slow_append_path<char>();\r\n    test_slow_append_path<wchar_t>();\r\n\r\n    test_sane_c_specifier<char>();\r\n    test_sane_c_specifier<wchar_t>();\r\n\r\n    test_localized_char<char, char>();\r\n    test_localized_char<wchar_t, char>();\r\n    test_localized_char<wchar_t, wchar_t>();\r\n\r\n#if !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n    test_gh_4316<char>();\r\n    test_gh_4316<wchar_t>();\r\n#endif // !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n\r\n    test_gh_4319<char>();\r\n    test_gh_4319<wchar_t>();\r\n    test_gh_4320<char>();\r\n    test_gh_4320<wchar_t>();\r\n}\r\n\r\nint main() {\r\n    test();\r\n\r\n    test_format_string();\r\n    static_assert(test_format_string());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_grapheme_clusterization/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_grapheme_clusterization/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <format>\r\n#include <iterator>\r\n#include <span>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n// Generator: tools/unicode_properties_parse/grapheme_break_test_data_gen.py\r\n// Beginning of generated data - DO NOT EDIT manually!\r\n\r\n// GraphemeBreakTest-17.0.0.txt\r\n// Date: 2025-03-24, 14:45:55 GMT\r\ntemplate <typename T>\r\nstruct test_case_data {\r\n    vector<T> code_points;\r\n    vector<size_t> breaks;\r\n};\r\n\r\ntemplate <typename T>\r\nconst test_case_data<T> test_data[766];\r\n\r\ntemplate <>\r\nconst test_case_data<char32_t> test_data<char32_t>[766] = {{{U'\\xd', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\xd'}, {0, 1, 2, 3}}, {{U'\\xd', U'\\xa'}, {0, 2}}, {{U'\\xd', U'\\x308', U'\\xa'}, {0, 1, 2, 3}},\r\n    {{U'\\xd', U'\\x0'}, {0, 1, 2}}, {{U'\\xd', U'\\x308', U'\\x0'}, {0, 1, 2, 3}}, {{U'\\xd', U'\\x94d'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\x94d'}, {0, 1, 3}}, {{U'\\xd', U'\\x300'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\x300'}, {0, 1, 3}}, {{U'\\xd', U'\\x200c'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\x200c'}, {0, 1, 3}}, {{U'\\xd', U'\\x200d'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\x200d'}, {0, 1, 3}}, {{U'\\xd', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\x1f1e6'}, {0, 1, 2, 3}}, {{U'\\xd', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\x6dd'}, {0, 1, 2, 3}}, {{U'\\xd', U'\\x903'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\x903'}, {0, 1, 3}}, {{U'\\xd', U'\\x1100'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\x1100'}, {0, 1, 2, 3}}, {{U'\\xd', U'\\x1160'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\x1160'}, {0, 1, 2, 3}}, {{U'\\xd', U'\\x11a8'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\x11a8'}, {0, 1, 2, 3}}, {{U'\\xd', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\xac00'}, {0, 1, 2, 3}}, {{U'\\xd', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\xac01'}, {0, 1, 2, 3}}, {{U'\\xd', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\x915'}, {0, 1, 2, 3}}, {{U'\\xd', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\xa9'}, {0, 1, 2, 3}}, {{U'\\xd', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\x20'}, {0, 1, 2, 3}}, {{U'\\xd', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\xd', U'\\x308', U'\\x378'}, {0, 1, 2, 3}}, {{U'\\xa', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\xd'}, {0, 1, 2, 3}}, {{U'\\xa', U'\\xa'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\xa'}, {0, 1, 2, 3}}, {{U'\\xa', U'\\x0'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\x0'}, {0, 1, 2, 3}}, {{U'\\xa', U'\\x94d'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\x94d'}, {0, 1, 3}}, {{U'\\xa', U'\\x300'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\x300'}, {0, 1, 3}}, {{U'\\xa', U'\\x200c'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\x200c'}, {0, 1, 3}}, {{U'\\xa', U'\\x200d'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\x200d'}, {0, 1, 3}}, {{U'\\xa', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\x1f1e6'}, {0, 1, 2, 3}}, {{U'\\xa', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\x6dd'}, {0, 1, 2, 3}}, {{U'\\xa', U'\\x903'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\x903'}, {0, 1, 3}}, {{U'\\xa', U'\\x1100'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\x1100'}, {0, 1, 2, 3}}, {{U'\\xa', U'\\x1160'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\x1160'}, {0, 1, 2, 3}}, {{U'\\xa', U'\\x11a8'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\x11a8'}, {0, 1, 2, 3}}, {{U'\\xa', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\xac00'}, {0, 1, 2, 3}}, {{U'\\xa', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\xac01'}, {0, 1, 2, 3}}, {{U'\\xa', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\x915'}, {0, 1, 2, 3}}, {{U'\\xa', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\xa9'}, {0, 1, 2, 3}}, {{U'\\xa', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\x20'}, {0, 1, 2, 3}}, {{U'\\xa', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\xa', U'\\x308', U'\\x378'}, {0, 1, 2, 3}}, {{U'\\x0', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\xd'}, {0, 1, 2, 3}}, {{U'\\x0', U'\\xa'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\xa'}, {0, 1, 2, 3}}, {{U'\\x0', U'\\x0'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\x0'}, {0, 1, 2, 3}}, {{U'\\x0', U'\\x94d'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\x94d'}, {0, 1, 3}}, {{U'\\x0', U'\\x300'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\x300'}, {0, 1, 3}}, {{U'\\x0', U'\\x200c'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\x200c'}, {0, 1, 3}}, {{U'\\x0', U'\\x200d'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\x200d'}, {0, 1, 3}}, {{U'\\x0', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\x1f1e6'}, {0, 1, 2, 3}}, {{U'\\x0', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\x6dd'}, {0, 1, 2, 3}}, {{U'\\x0', U'\\x903'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\x903'}, {0, 1, 3}}, {{U'\\x0', U'\\x1100'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\x1100'}, {0, 1, 2, 3}}, {{U'\\x0', U'\\x1160'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\x1160'}, {0, 1, 2, 3}}, {{U'\\x0', U'\\x11a8'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\x11a8'}, {0, 1, 2, 3}}, {{U'\\x0', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\xac00'}, {0, 1, 2, 3}}, {{U'\\x0', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\xac01'}, {0, 1, 2, 3}}, {{U'\\x0', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\x915'}, {0, 1, 2, 3}}, {{U'\\x0', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\xa9'}, {0, 1, 2, 3}}, {{U'\\x0', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\x20'}, {0, 1, 2, 3}}, {{U'\\x0', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\x0', U'\\x308', U'\\x378'}, {0, 1, 2, 3}}, {{U'\\x94d', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\xd'}, {0, 2, 3}}, {{U'\\x94d', U'\\xa'}, {0, 1, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\xa'}, {0, 2, 3}}, {{U'\\x94d', U'\\x0'}, {0, 1, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\x0'}, {0, 2, 3}}, {{U'\\x94d', U'\\x94d'}, {0, 2}}, {{U'\\x94d', U'\\x308', U'\\x94d'}, {0, 3}},\r\n    {{U'\\x94d', U'\\x300'}, {0, 2}}, {{U'\\x94d', U'\\x308', U'\\x300'}, {0, 3}}, {{U'\\x94d', U'\\x200c'}, {0, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\x200c'}, {0, 3}}, {{U'\\x94d', U'\\x200d'}, {0, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\x200d'}, {0, 3}}, {{U'\\x94d', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\x1f1e6'}, {0, 2, 3}}, {{U'\\x94d', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\x6dd'}, {0, 2, 3}}, {{U'\\x94d', U'\\x903'}, {0, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\x903'}, {0, 3}}, {{U'\\x94d', U'\\x1100'}, {0, 1, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\x1100'}, {0, 2, 3}}, {{U'\\x94d', U'\\x1160'}, {0, 1, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\x1160'}, {0, 2, 3}}, {{U'\\x94d', U'\\x11a8'}, {0, 1, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\x11a8'}, {0, 2, 3}}, {{U'\\x94d', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\xac00'}, {0, 2, 3}}, {{U'\\x94d', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\xac01'}, {0, 2, 3}}, {{U'\\x94d', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\x915'}, {0, 2, 3}}, {{U'\\x94d', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\xa9'}, {0, 2, 3}}, {{U'\\x94d', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\x20'}, {0, 2, 3}}, {{U'\\x94d', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\x94d', U'\\x308', U'\\x378'}, {0, 2, 3}}, {{U'\\x300', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\xd'}, {0, 2, 3}}, {{U'\\x300', U'\\xa'}, {0, 1, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\xa'}, {0, 2, 3}}, {{U'\\x300', U'\\x0'}, {0, 1, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\x0'}, {0, 2, 3}}, {{U'\\x300', U'\\x94d'}, {0, 2}}, {{U'\\x300', U'\\x308', U'\\x94d'}, {0, 3}},\r\n    {{U'\\x300', U'\\x300'}, {0, 2}}, {{U'\\x300', U'\\x308', U'\\x300'}, {0, 3}}, {{U'\\x300', U'\\x200c'}, {0, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\x200c'}, {0, 3}}, {{U'\\x300', U'\\x200d'}, {0, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\x200d'}, {0, 3}}, {{U'\\x300', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\x1f1e6'}, {0, 2, 3}}, {{U'\\x300', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\x6dd'}, {0, 2, 3}}, {{U'\\x300', U'\\x903'}, {0, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\x903'}, {0, 3}}, {{U'\\x300', U'\\x1100'}, {0, 1, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\x1100'}, {0, 2, 3}}, {{U'\\x300', U'\\x1160'}, {0, 1, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\x1160'}, {0, 2, 3}}, {{U'\\x300', U'\\x11a8'}, {0, 1, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\x11a8'}, {0, 2, 3}}, {{U'\\x300', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\xac00'}, {0, 2, 3}}, {{U'\\x300', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\xac01'}, {0, 2, 3}}, {{U'\\x300', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\x915'}, {0, 2, 3}}, {{U'\\x300', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\xa9'}, {0, 2, 3}}, {{U'\\x300', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\x20'}, {0, 2, 3}}, {{U'\\x300', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\x300', U'\\x308', U'\\x378'}, {0, 2, 3}}, {{U'\\x200c', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\xd'}, {0, 2, 3}}, {{U'\\x200c', U'\\xa'}, {0, 1, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\xa'}, {0, 2, 3}}, {{U'\\x200c', U'\\x0'}, {0, 1, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\x0'}, {0, 2, 3}}, {{U'\\x200c', U'\\x94d'}, {0, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\x94d'}, {0, 3}}, {{U'\\x200c', U'\\x300'}, {0, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\x300'}, {0, 3}}, {{U'\\x200c', U'\\x200c'}, {0, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\x200c'}, {0, 3}}, {{U'\\x200c', U'\\x200d'}, {0, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\x200d'}, {0, 3}}, {{U'\\x200c', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\x1f1e6'}, {0, 2, 3}}, {{U'\\x200c', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\x6dd'}, {0, 2, 3}}, {{U'\\x200c', U'\\x903'}, {0, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\x903'}, {0, 3}}, {{U'\\x200c', U'\\x1100'}, {0, 1, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\x1100'}, {0, 2, 3}}, {{U'\\x200c', U'\\x1160'}, {0, 1, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\x1160'}, {0, 2, 3}}, {{U'\\x200c', U'\\x11a8'}, {0, 1, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\x11a8'}, {0, 2, 3}}, {{U'\\x200c', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\xac00'}, {0, 2, 3}}, {{U'\\x200c', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\xac01'}, {0, 2, 3}}, {{U'\\x200c', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\x915'}, {0, 2, 3}}, {{U'\\x200c', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\xa9'}, {0, 2, 3}}, {{U'\\x200c', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\x20'}, {0, 2, 3}}, {{U'\\x200c', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\x200c', U'\\x308', U'\\x378'}, {0, 2, 3}}, {{U'\\x200d', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\xd'}, {0, 2, 3}}, {{U'\\x200d', U'\\xa'}, {0, 1, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\xa'}, {0, 2, 3}}, {{U'\\x200d', U'\\x0'}, {0, 1, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\x0'}, {0, 2, 3}}, {{U'\\x200d', U'\\x94d'}, {0, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\x94d'}, {0, 3}}, {{U'\\x200d', U'\\x300'}, {0, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\x300'}, {0, 3}}, {{U'\\x200d', U'\\x200c'}, {0, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\x200c'}, {0, 3}}, {{U'\\x200d', U'\\x200d'}, {0, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\x200d'}, {0, 3}}, {{U'\\x200d', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\x1f1e6'}, {0, 2, 3}}, {{U'\\x200d', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\x6dd'}, {0, 2, 3}}, {{U'\\x200d', U'\\x903'}, {0, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\x903'}, {0, 3}}, {{U'\\x200d', U'\\x1100'}, {0, 1, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\x1100'}, {0, 2, 3}}, {{U'\\x200d', U'\\x1160'}, {0, 1, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\x1160'}, {0, 2, 3}}, {{U'\\x200d', U'\\x11a8'}, {0, 1, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\x11a8'}, {0, 2, 3}}, {{U'\\x200d', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\xac00'}, {0, 2, 3}}, {{U'\\x200d', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\xac01'}, {0, 2, 3}}, {{U'\\x200d', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\x915'}, {0, 2, 3}}, {{U'\\x200d', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\xa9'}, {0, 2, 3}}, {{U'\\x200d', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\x20'}, {0, 2, 3}}, {{U'\\x200d', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\x200d', U'\\x308', U'\\x378'}, {0, 2, 3}}, {{U'\\x1f1e6', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\xd'}, {0, 2, 3}}, {{U'\\x1f1e6', U'\\xa'}, {0, 1, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\xa'}, {0, 2, 3}}, {{U'\\x1f1e6', U'\\x0'}, {0, 1, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\x0'}, {0, 2, 3}}, {{U'\\x1f1e6', U'\\x94d'}, {0, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\x94d'}, {0, 3}}, {{U'\\x1f1e6', U'\\x300'}, {0, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\x300'}, {0, 3}}, {{U'\\x1f1e6', U'\\x200c'}, {0, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\x200c'}, {0, 3}}, {{U'\\x1f1e6', U'\\x200d'}, {0, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\x200d'}, {0, 3}}, {{U'\\x1f1e6', U'\\x1f1e6'}, {0, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\x1f1e6'}, {0, 2, 3}}, {{U'\\x1f1e6', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\x6dd'}, {0, 2, 3}}, {{U'\\x1f1e6', U'\\x903'}, {0, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\x903'}, {0, 3}}, {{U'\\x1f1e6', U'\\x1100'}, {0, 1, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\x1100'}, {0, 2, 3}}, {{U'\\x1f1e6', U'\\x1160'}, {0, 1, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\x1160'}, {0, 2, 3}}, {{U'\\x1f1e6', U'\\x11a8'}, {0, 1, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\x11a8'}, {0, 2, 3}}, {{U'\\x1f1e6', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\xac00'}, {0, 2, 3}}, {{U'\\x1f1e6', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\xac01'}, {0, 2, 3}}, {{U'\\x1f1e6', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\x915'}, {0, 2, 3}}, {{U'\\x1f1e6', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\xa9'}, {0, 2, 3}}, {{U'\\x1f1e6', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\x20'}, {0, 2, 3}}, {{U'\\x1f1e6', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\x1f1e6', U'\\x308', U'\\x378'}, {0, 2, 3}}, {{U'\\x6dd', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\xd'}, {0, 2, 3}}, {{U'\\x6dd', U'\\xa'}, {0, 1, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\xa'}, {0, 2, 3}}, {{U'\\x6dd', U'\\x0'}, {0, 1, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\x0'}, {0, 2, 3}}, {{U'\\x6dd', U'\\x94d'}, {0, 2}}, {{U'\\x6dd', U'\\x308', U'\\x94d'}, {0, 3}},\r\n    {{U'\\x6dd', U'\\x300'}, {0, 2}}, {{U'\\x6dd', U'\\x308', U'\\x300'}, {0, 3}}, {{U'\\x6dd', U'\\x200c'}, {0, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\x200c'}, {0, 3}}, {{U'\\x6dd', U'\\x200d'}, {0, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\x200d'}, {0, 3}}, {{U'\\x6dd', U'\\x1f1e6'}, {0, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\x1f1e6'}, {0, 2, 3}}, {{U'\\x6dd', U'\\x6dd'}, {0, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\x6dd'}, {0, 2, 3}}, {{U'\\x6dd', U'\\x903'}, {0, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\x903'}, {0, 3}}, {{U'\\x6dd', U'\\x1100'}, {0, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\x1100'}, {0, 2, 3}}, {{U'\\x6dd', U'\\x1160'}, {0, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\x1160'}, {0, 2, 3}}, {{U'\\x6dd', U'\\x11a8'}, {0, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\x11a8'}, {0, 2, 3}}, {{U'\\x6dd', U'\\xac00'}, {0, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\xac00'}, {0, 2, 3}}, {{U'\\x6dd', U'\\xac01'}, {0, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\xac01'}, {0, 2, 3}}, {{U'\\x6dd', U'\\x915'}, {0, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\x915'}, {0, 2, 3}}, {{U'\\x6dd', U'\\xa9'}, {0, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\xa9'}, {0, 2, 3}}, {{U'\\x6dd', U'\\x20'}, {0, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\x20'}, {0, 2, 3}}, {{U'\\x6dd', U'\\x378'}, {0, 2}},\r\n    {{U'\\x6dd', U'\\x308', U'\\x378'}, {0, 2, 3}}, {{U'\\x903', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\xd'}, {0, 2, 3}}, {{U'\\x903', U'\\xa'}, {0, 1, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\xa'}, {0, 2, 3}}, {{U'\\x903', U'\\x0'}, {0, 1, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\x0'}, {0, 2, 3}}, {{U'\\x903', U'\\x94d'}, {0, 2}}, {{U'\\x903', U'\\x308', U'\\x94d'}, {0, 3}},\r\n    {{U'\\x903', U'\\x300'}, {0, 2}}, {{U'\\x903', U'\\x308', U'\\x300'}, {0, 3}}, {{U'\\x903', U'\\x200c'}, {0, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\x200c'}, {0, 3}}, {{U'\\x903', U'\\x200d'}, {0, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\x200d'}, {0, 3}}, {{U'\\x903', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\x1f1e6'}, {0, 2, 3}}, {{U'\\x903', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\x6dd'}, {0, 2, 3}}, {{U'\\x903', U'\\x903'}, {0, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\x903'}, {0, 3}}, {{U'\\x903', U'\\x1100'}, {0, 1, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\x1100'}, {0, 2, 3}}, {{U'\\x903', U'\\x1160'}, {0, 1, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\x1160'}, {0, 2, 3}}, {{U'\\x903', U'\\x11a8'}, {0, 1, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\x11a8'}, {0, 2, 3}}, {{U'\\x903', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\xac00'}, {0, 2, 3}}, {{U'\\x903', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\xac01'}, {0, 2, 3}}, {{U'\\x903', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\x915'}, {0, 2, 3}}, {{U'\\x903', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\xa9'}, {0, 2, 3}}, {{U'\\x903', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\x20'}, {0, 2, 3}}, {{U'\\x903', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\x903', U'\\x308', U'\\x378'}, {0, 2, 3}}, {{U'\\x1100', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\xd'}, {0, 2, 3}}, {{U'\\x1100', U'\\xa'}, {0, 1, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\xa'}, {0, 2, 3}}, {{U'\\x1100', U'\\x0'}, {0, 1, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\x0'}, {0, 2, 3}}, {{U'\\x1100', U'\\x94d'}, {0, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\x94d'}, {0, 3}}, {{U'\\x1100', U'\\x300'}, {0, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\x300'}, {0, 3}}, {{U'\\x1100', U'\\x200c'}, {0, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\x200c'}, {0, 3}}, {{U'\\x1100', U'\\x200d'}, {0, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\x200d'}, {0, 3}}, {{U'\\x1100', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\x1f1e6'}, {0, 2, 3}}, {{U'\\x1100', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\x6dd'}, {0, 2, 3}}, {{U'\\x1100', U'\\x903'}, {0, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\x903'}, {0, 3}}, {{U'\\x1100', U'\\x1100'}, {0, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\x1100'}, {0, 2, 3}}, {{U'\\x1100', U'\\x1160'}, {0, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\x1160'}, {0, 2, 3}}, {{U'\\x1100', U'\\x11a8'}, {0, 1, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\x11a8'}, {0, 2, 3}}, {{U'\\x1100', U'\\xac00'}, {0, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\xac00'}, {0, 2, 3}}, {{U'\\x1100', U'\\xac01'}, {0, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\xac01'}, {0, 2, 3}}, {{U'\\x1100', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\x915'}, {0, 2, 3}}, {{U'\\x1100', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\xa9'}, {0, 2, 3}}, {{U'\\x1100', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\x20'}, {0, 2, 3}}, {{U'\\x1100', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\x1100', U'\\x308', U'\\x378'}, {0, 2, 3}}, {{U'\\x1160', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\xd'}, {0, 2, 3}}, {{U'\\x1160', U'\\xa'}, {0, 1, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\xa'}, {0, 2, 3}}, {{U'\\x1160', U'\\x0'}, {0, 1, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\x0'}, {0, 2, 3}}, {{U'\\x1160', U'\\x94d'}, {0, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\x94d'}, {0, 3}}, {{U'\\x1160', U'\\x300'}, {0, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\x300'}, {0, 3}}, {{U'\\x1160', U'\\x200c'}, {0, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\x200c'}, {0, 3}}, {{U'\\x1160', U'\\x200d'}, {0, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\x200d'}, {0, 3}}, {{U'\\x1160', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\x1f1e6'}, {0, 2, 3}}, {{U'\\x1160', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\x6dd'}, {0, 2, 3}}, {{U'\\x1160', U'\\x903'}, {0, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\x903'}, {0, 3}}, {{U'\\x1160', U'\\x1100'}, {0, 1, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\x1100'}, {0, 2, 3}}, {{U'\\x1160', U'\\x1160'}, {0, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\x1160'}, {0, 2, 3}}, {{U'\\x1160', U'\\x11a8'}, {0, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\x11a8'}, {0, 2, 3}}, {{U'\\x1160', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\xac00'}, {0, 2, 3}}, {{U'\\x1160', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\xac01'}, {0, 2, 3}}, {{U'\\x1160', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\x915'}, {0, 2, 3}}, {{U'\\x1160', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\xa9'}, {0, 2, 3}}, {{U'\\x1160', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\x20'}, {0, 2, 3}}, {{U'\\x1160', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\x1160', U'\\x308', U'\\x378'}, {0, 2, 3}}, {{U'\\x11a8', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\xd'}, {0, 2, 3}}, {{U'\\x11a8', U'\\xa'}, {0, 1, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\xa'}, {0, 2, 3}}, {{U'\\x11a8', U'\\x0'}, {0, 1, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\x0'}, {0, 2, 3}}, {{U'\\x11a8', U'\\x94d'}, {0, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\x94d'}, {0, 3}}, {{U'\\x11a8', U'\\x300'}, {0, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\x300'}, {0, 3}}, {{U'\\x11a8', U'\\x200c'}, {0, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\x200c'}, {0, 3}}, {{U'\\x11a8', U'\\x200d'}, {0, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\x200d'}, {0, 3}}, {{U'\\x11a8', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\x1f1e6'}, {0, 2, 3}}, {{U'\\x11a8', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\x6dd'}, {0, 2, 3}}, {{U'\\x11a8', U'\\x903'}, {0, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\x903'}, {0, 3}}, {{U'\\x11a8', U'\\x1100'}, {0, 1, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\x1100'}, {0, 2, 3}}, {{U'\\x11a8', U'\\x1160'}, {0, 1, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\x1160'}, {0, 2, 3}}, {{U'\\x11a8', U'\\x11a8'}, {0, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\x11a8'}, {0, 2, 3}}, {{U'\\x11a8', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\xac00'}, {0, 2, 3}}, {{U'\\x11a8', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\xac01'}, {0, 2, 3}}, {{U'\\x11a8', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\x915'}, {0, 2, 3}}, {{U'\\x11a8', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\xa9'}, {0, 2, 3}}, {{U'\\x11a8', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\x20'}, {0, 2, 3}}, {{U'\\x11a8', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\x11a8', U'\\x308', U'\\x378'}, {0, 2, 3}}, {{U'\\xac00', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\xd'}, {0, 2, 3}}, {{U'\\xac00', U'\\xa'}, {0, 1, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\xa'}, {0, 2, 3}}, {{U'\\xac00', U'\\x0'}, {0, 1, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\x0'}, {0, 2, 3}}, {{U'\\xac00', U'\\x94d'}, {0, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\x94d'}, {0, 3}}, {{U'\\xac00', U'\\x300'}, {0, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\x300'}, {0, 3}}, {{U'\\xac00', U'\\x200c'}, {0, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\x200c'}, {0, 3}}, {{U'\\xac00', U'\\x200d'}, {0, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\x200d'}, {0, 3}}, {{U'\\xac00', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\x1f1e6'}, {0, 2, 3}}, {{U'\\xac00', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\x6dd'}, {0, 2, 3}}, {{U'\\xac00', U'\\x903'}, {0, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\x903'}, {0, 3}}, {{U'\\xac00', U'\\x1100'}, {0, 1, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\x1100'}, {0, 2, 3}}, {{U'\\xac00', U'\\x1160'}, {0, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\x1160'}, {0, 2, 3}}, {{U'\\xac00', U'\\x11a8'}, {0, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\x11a8'}, {0, 2, 3}}, {{U'\\xac00', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\xac00'}, {0, 2, 3}}, {{U'\\xac00', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\xac01'}, {0, 2, 3}}, {{U'\\xac00', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\x915'}, {0, 2, 3}}, {{U'\\xac00', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\xa9'}, {0, 2, 3}}, {{U'\\xac00', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\x20'}, {0, 2, 3}}, {{U'\\xac00', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\xac00', U'\\x308', U'\\x378'}, {0, 2, 3}}, {{U'\\xac01', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\xd'}, {0, 2, 3}}, {{U'\\xac01', U'\\xa'}, {0, 1, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\xa'}, {0, 2, 3}}, {{U'\\xac01', U'\\x0'}, {0, 1, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\x0'}, {0, 2, 3}}, {{U'\\xac01', U'\\x94d'}, {0, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\x94d'}, {0, 3}}, {{U'\\xac01', U'\\x300'}, {0, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\x300'}, {0, 3}}, {{U'\\xac01', U'\\x200c'}, {0, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\x200c'}, {0, 3}}, {{U'\\xac01', U'\\x200d'}, {0, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\x200d'}, {0, 3}}, {{U'\\xac01', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\x1f1e6'}, {0, 2, 3}}, {{U'\\xac01', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\x6dd'}, {0, 2, 3}}, {{U'\\xac01', U'\\x903'}, {0, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\x903'}, {0, 3}}, {{U'\\xac01', U'\\x1100'}, {0, 1, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\x1100'}, {0, 2, 3}}, {{U'\\xac01', U'\\x1160'}, {0, 1, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\x1160'}, {0, 2, 3}}, {{U'\\xac01', U'\\x11a8'}, {0, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\x11a8'}, {0, 2, 3}}, {{U'\\xac01', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\xac00'}, {0, 2, 3}}, {{U'\\xac01', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\xac01'}, {0, 2, 3}}, {{U'\\xac01', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\x915'}, {0, 2, 3}}, {{U'\\xac01', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\xa9'}, {0, 2, 3}}, {{U'\\xac01', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\x20'}, {0, 2, 3}}, {{U'\\xac01', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\xac01', U'\\x308', U'\\x378'}, {0, 2, 3}}, {{U'\\x915', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\xd'}, {0, 2, 3}}, {{U'\\x915', U'\\xa'}, {0, 1, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\xa'}, {0, 2, 3}}, {{U'\\x915', U'\\x0'}, {0, 1, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\x0'}, {0, 2, 3}}, {{U'\\x915', U'\\x94d'}, {0, 2}}, {{U'\\x915', U'\\x308', U'\\x94d'}, {0, 3}},\r\n    {{U'\\x915', U'\\x300'}, {0, 2}}, {{U'\\x915', U'\\x308', U'\\x300'}, {0, 3}}, {{U'\\x915', U'\\x200c'}, {0, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\x200c'}, {0, 3}}, {{U'\\x915', U'\\x200d'}, {0, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\x200d'}, {0, 3}}, {{U'\\x915', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\x1f1e6'}, {0, 2, 3}}, {{U'\\x915', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\x6dd'}, {0, 2, 3}}, {{U'\\x915', U'\\x903'}, {0, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\x903'}, {0, 3}}, {{U'\\x915', U'\\x1100'}, {0, 1, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\x1100'}, {0, 2, 3}}, {{U'\\x915', U'\\x1160'}, {0, 1, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\x1160'}, {0, 2, 3}}, {{U'\\x915', U'\\x11a8'}, {0, 1, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\x11a8'}, {0, 2, 3}}, {{U'\\x915', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\xac00'}, {0, 2, 3}}, {{U'\\x915', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\xac01'}, {0, 2, 3}}, {{U'\\x915', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\x915'}, {0, 2, 3}}, {{U'\\x915', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\xa9'}, {0, 2, 3}}, {{U'\\x915', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\x20'}, {0, 2, 3}}, {{U'\\x915', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\x915', U'\\x308', U'\\x378'}, {0, 2, 3}}, {{U'\\xa9', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\xa9', U'\\x308', U'\\xd'}, {0, 2, 3}}, {{U'\\xa9', U'\\xa'}, {0, 1, 2}}, {{U'\\xa9', U'\\x308', U'\\xa'}, {0, 2, 3}},\r\n    {{U'\\xa9', U'\\x0'}, {0, 1, 2}}, {{U'\\xa9', U'\\x308', U'\\x0'}, {0, 2, 3}}, {{U'\\xa9', U'\\x94d'}, {0, 2}},\r\n    {{U'\\xa9', U'\\x308', U'\\x94d'}, {0, 3}}, {{U'\\xa9', U'\\x300'}, {0, 2}}, {{U'\\xa9', U'\\x308', U'\\x300'}, {0, 3}},\r\n    {{U'\\xa9', U'\\x200c'}, {0, 2}}, {{U'\\xa9', U'\\x308', U'\\x200c'}, {0, 3}}, {{U'\\xa9', U'\\x200d'}, {0, 2}},\r\n    {{U'\\xa9', U'\\x308', U'\\x200d'}, {0, 3}}, {{U'\\xa9', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\xa9', U'\\x308', U'\\x1f1e6'}, {0, 2, 3}}, {{U'\\xa9', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\xa9', U'\\x308', U'\\x6dd'}, {0, 2, 3}}, {{U'\\xa9', U'\\x903'}, {0, 2}}, {{U'\\xa9', U'\\x308', U'\\x903'}, {0, 3}},\r\n    {{U'\\xa9', U'\\x1100'}, {0, 1, 2}}, {{U'\\xa9', U'\\x308', U'\\x1100'}, {0, 2, 3}}, {{U'\\xa9', U'\\x1160'}, {0, 1, 2}},\r\n    {{U'\\xa9', U'\\x308', U'\\x1160'}, {0, 2, 3}}, {{U'\\xa9', U'\\x11a8'}, {0, 1, 2}},\r\n    {{U'\\xa9', U'\\x308', U'\\x11a8'}, {0, 2, 3}}, {{U'\\xa9', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\xa9', U'\\x308', U'\\xac00'}, {0, 2, 3}}, {{U'\\xa9', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\xa9', U'\\x308', U'\\xac01'}, {0, 2, 3}}, {{U'\\xa9', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\xa9', U'\\x308', U'\\x915'}, {0, 2, 3}}, {{U'\\xa9', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\xa9', U'\\x308', U'\\xa9'}, {0, 2, 3}}, {{U'\\xa9', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\xa9', U'\\x308', U'\\x20'}, {0, 2, 3}}, {{U'\\xa9', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\xa9', U'\\x308', U'\\x378'}, {0, 2, 3}}, {{U'\\x20', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\x20', U'\\x308', U'\\xd'}, {0, 2, 3}}, {{U'\\x20', U'\\xa'}, {0, 1, 2}}, {{U'\\x20', U'\\x308', U'\\xa'}, {0, 2, 3}},\r\n    {{U'\\x20', U'\\x0'}, {0, 1, 2}}, {{U'\\x20', U'\\x308', U'\\x0'}, {0, 2, 3}}, {{U'\\x20', U'\\x94d'}, {0, 2}},\r\n    {{U'\\x20', U'\\x308', U'\\x94d'}, {0, 3}}, {{U'\\x20', U'\\x300'}, {0, 2}}, {{U'\\x20', U'\\x308', U'\\x300'}, {0, 3}},\r\n    {{U'\\x20', U'\\x200c'}, {0, 2}}, {{U'\\x20', U'\\x308', U'\\x200c'}, {0, 3}}, {{U'\\x20', U'\\x200d'}, {0, 2}},\r\n    {{U'\\x20', U'\\x308', U'\\x200d'}, {0, 3}}, {{U'\\x20', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\x20', U'\\x308', U'\\x1f1e6'}, {0, 2, 3}}, {{U'\\x20', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\x20', U'\\x308', U'\\x6dd'}, {0, 2, 3}}, {{U'\\x20', U'\\x903'}, {0, 2}}, {{U'\\x20', U'\\x308', U'\\x903'}, {0, 3}},\r\n    {{U'\\x20', U'\\x1100'}, {0, 1, 2}}, {{U'\\x20', U'\\x308', U'\\x1100'}, {0, 2, 3}}, {{U'\\x20', U'\\x1160'}, {0, 1, 2}},\r\n    {{U'\\x20', U'\\x308', U'\\x1160'}, {0, 2, 3}}, {{U'\\x20', U'\\x11a8'}, {0, 1, 2}},\r\n    {{U'\\x20', U'\\x308', U'\\x11a8'}, {0, 2, 3}}, {{U'\\x20', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\x20', U'\\x308', U'\\xac00'}, {0, 2, 3}}, {{U'\\x20', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\x20', U'\\x308', U'\\xac01'}, {0, 2, 3}}, {{U'\\x20', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\x20', U'\\x308', U'\\x915'}, {0, 2, 3}}, {{U'\\x20', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\x20', U'\\x308', U'\\xa9'}, {0, 2, 3}}, {{U'\\x20', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\x20', U'\\x308', U'\\x20'}, {0, 2, 3}}, {{U'\\x20', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\x20', U'\\x308', U'\\x378'}, {0, 2, 3}}, {{U'\\x378', U'\\xd'}, {0, 1, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\xd'}, {0, 2, 3}}, {{U'\\x378', U'\\xa'}, {0, 1, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\xa'}, {0, 2, 3}}, {{U'\\x378', U'\\x0'}, {0, 1, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\x0'}, {0, 2, 3}}, {{U'\\x378', U'\\x94d'}, {0, 2}}, {{U'\\x378', U'\\x308', U'\\x94d'}, {0, 3}},\r\n    {{U'\\x378', U'\\x300'}, {0, 2}}, {{U'\\x378', U'\\x308', U'\\x300'}, {0, 3}}, {{U'\\x378', U'\\x200c'}, {0, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\x200c'}, {0, 3}}, {{U'\\x378', U'\\x200d'}, {0, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\x200d'}, {0, 3}}, {{U'\\x378', U'\\x1f1e6'}, {0, 1, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\x1f1e6'}, {0, 2, 3}}, {{U'\\x378', U'\\x6dd'}, {0, 1, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\x6dd'}, {0, 2, 3}}, {{U'\\x378', U'\\x903'}, {0, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\x903'}, {0, 3}}, {{U'\\x378', U'\\x1100'}, {0, 1, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\x1100'}, {0, 2, 3}}, {{U'\\x378', U'\\x1160'}, {0, 1, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\x1160'}, {0, 2, 3}}, {{U'\\x378', U'\\x11a8'}, {0, 1, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\x11a8'}, {0, 2, 3}}, {{U'\\x378', U'\\xac00'}, {0, 1, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\xac00'}, {0, 2, 3}}, {{U'\\x378', U'\\xac01'}, {0, 1, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\xac01'}, {0, 2, 3}}, {{U'\\x378', U'\\x915'}, {0, 1, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\x915'}, {0, 2, 3}}, {{U'\\x378', U'\\xa9'}, {0, 1, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\xa9'}, {0, 2, 3}}, {{U'\\x378', U'\\x20'}, {0, 1, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\x20'}, {0, 2, 3}}, {{U'\\x378', U'\\x378'}, {0, 1, 2}},\r\n    {{U'\\x378', U'\\x308', U'\\x378'}, {0, 2, 3}}, {{U'\\xd', U'\\xa', U'\\x61', U'\\xa', U'\\x308'}, {0, 2, 3, 4, 5}},\r\n    {{U'\\x61', U'\\x308'}, {0, 2}}, {{U'\\x20', U'\\x200d', U'\\x646'}, {0, 2, 3}},\r\n    {{U'\\x646', U'\\x200d', U'\\x20'}, {0, 2, 3}}, {{U'\\x1100', U'\\x1100'}, {0, 2}},\r\n    {{U'\\xac00', U'\\x11a8', U'\\x1100'}, {0, 2, 3}}, {{U'\\xac01', U'\\x11a8', U'\\x1100'}, {0, 2, 3}},\r\n    {{U'\\x1f1e6', U'\\x1f1e7', U'\\x1f1e8', U'\\x62'}, {0, 2, 3, 4}},\r\n    {{U'\\x61', U'\\x1f1e6', U'\\x1f1e7', U'\\x1f1e8', U'\\x62'}, {0, 1, 3, 4, 5}},\r\n    {{U'\\x61', U'\\x1f1e6', U'\\x1f1e7', U'\\x200d', U'\\x1f1e8', U'\\x62'}, {0, 1, 4, 5, 6}},\r\n    {{U'\\x61', U'\\x1f1e6', U'\\x200d', U'\\x1f1e7', U'\\x1f1e8', U'\\x62'}, {0, 1, 3, 5, 6}},\r\n    {{U'\\x61', U'\\x1f1e6', U'\\x1f1e7', U'\\x1f1e8', U'\\x1f1e9', U'\\x62'}, {0, 1, 3, 5, 6}},\r\n    {{U'\\x61', U'\\x200d'}, {0, 2}}, {{U'\\x61', U'\\x308', U'\\x62'}, {0, 2, 3}},\r\n    {{U'\\x61', U'\\x903', U'\\x62'}, {0, 2, 3}}, {{U'\\x61', U'\\x600', U'\\x62'}, {0, 1, 3}},\r\n    {{U'\\x1f476', U'\\x1f3ff', U'\\x1f476'}, {0, 2, 3}}, {{U'\\x61', U'\\x1f3ff', U'\\x1f476'}, {0, 2, 3}},\r\n    {{U'\\x61', U'\\x1f3ff', U'\\x1f476', U'\\x200d', U'\\x1f6d1'}, {0, 2, 5}},\r\n    {{U'\\x1f476', U'\\x1f3ff', U'\\x308', U'\\x200d', U'\\x1f476', U'\\x1f3ff'}, {0, 6}},\r\n    {{U'\\x1f6d1', U'\\x200d', U'\\x1f6d1'}, {0, 3}}, {{U'\\x61', U'\\x200d', U'\\x1f6d1'}, {0, 2, 3}},\r\n    {{U'\\x2701', U'\\x200d', U'\\x2701'}, {0, 2, 3}}, {{U'\\x61', U'\\x200d', U'\\x2701'}, {0, 2, 3}},\r\n    {{U'\\x915', U'\\x924'}, {0, 1, 2}}, {{U'\\x915', U'\\x94d', U'\\x924'}, {0, 3}},\r\n    {{U'\\x915', U'\\x94d', U'\\x94d', U'\\x924'}, {0, 4}}, {{U'\\x915', U'\\x94d', U'\\x200d', U'\\x924'}, {0, 4}},\r\n    {{U'\\x915', U'\\x93c', U'\\x200d', U'\\x94d', U'\\x924'}, {0, 5}},\r\n    {{U'\\x915', U'\\x93c', U'\\x94d', U'\\x200d', U'\\x924'}, {0, 5}},\r\n    {{U'\\x915', U'\\x94d', U'\\x924', U'\\x94d', U'\\x92f'}, {0, 5}}, {{U'\\x915', U'\\x94d', U'\\x61'}, {0, 2, 3}},\r\n    {{U'\\x61', U'\\x94d', U'\\x924'}, {0, 2, 3}}, {{U'\\x3f', U'\\x94d', U'\\x924'}, {0, 2, 3}},\r\n    {{U'\\x915', U'\\x94d', U'\\x94d', U'\\x924'}, {0, 4}}, {{U'\\xab8', U'\\xafb', U'\\xacd', U'\\xab8', U'\\xafb'}, {0, 5}},\r\n    {{U'\\x1019', U'\\x1039', U'\\x1018', U'\\x102c', U'\\x1037'}, {0, 3, 5}},\r\n    {{U'\\x1004', U'\\x103a', U'\\x1039', U'\\x1011', U'\\x1039', U'\\x1011'}, {0, 6}},\r\n    {{U'\\x1b12', U'\\x1b01', U'\\x1b32', U'\\x1b44', U'\\x1b2f', U'\\x1b32', U'\\x1b44', U'\\x1b22', U'\\x1b44', U'\\x1b2c',\r\n         U'\\x1b32', U'\\x1b44', U'\\x1b22', U'\\x1b38'},\r\n        {0, 2, 5, 10, 14}},\r\n    {{U'\\x179f', U'\\x17d2', U'\\x178f', U'\\x17d2', U'\\x179a', U'\\x17b8'}, {0, 6}},\r\n    {{U'\\x1b26', U'\\x1b17', U'\\x1b44', U'\\x1b13'}, {0, 1, 4}},\r\n    {{U'\\x1b27', U'\\x1b13', U'\\x1b44', U'\\x1b0b', U'\\x1b0b', U'\\x1b04'}, {0, 1, 4, 6}},\r\n    {{U'\\x1795', U'\\x17d2', U'\\x17af', U'\\x1798'}, {0, 3, 4}},\r\n    {{U'\\x17a0', U'\\x17d2', U'\\x17ab', U'\\x1791', U'\\x17d0', U'\\x1799'}, {0, 3, 5, 6}}};\r\n\r\ntemplate <>\r\nconst test_case_data<char> test_data<char>[766] = {{{'\\xd', '\\xd'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xd'}, {0, 1, 2, 3}}, {{'\\xd', '\\xa'}, {0, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xa'}, {0, 1, 2, 3}}, {{'\\xd', '\\x0'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\x0'}, {0, 1, 2, 3}}, {{'\\xd', '\\xe0', '\\xa5', '\\x8d'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 1, 3}}, {{'\\xd', '\\xcc', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 1, 3}}, {{'\\xd', '\\xe2', '\\x80', '\\x8c'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 1, 3}}, {{'\\xd', '\\xe2', '\\x80', '\\x8d'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 1, 3}}, {{'\\xd', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2, 3}}, {{'\\xd', '\\xdb', '\\x9d'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 1, 2, 3}}, {{'\\xd', '\\xe0', '\\xa4', '\\x83'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 1, 3}}, {{'\\xd', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2, 3}}, {{'\\xd', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2, 3}}, {{'\\xd', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2, 3}}, {{'\\xd', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2, 3}}, {{'\\xd', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2, 3}}, {{'\\xd', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2, 3}}, {{'\\xd', '\\xc2', '\\xa9'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 1, 2, 3}}, {{'\\xd', '\\x20'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\x20'}, {0, 1, 2, 3}}, {{'\\xd', '\\xcd', '\\xb8'}, {0, 1, 2}},\r\n    {{'\\xd', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 1, 2, 3}}, {{'\\xa', '\\xd'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xd'}, {0, 1, 2, 3}}, {{'\\xa', '\\xa'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xa'}, {0, 1, 2, 3}}, {{'\\xa', '\\x0'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\x0'}, {0, 1, 2, 3}}, {{'\\xa', '\\xe0', '\\xa5', '\\x8d'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 1, 3}}, {{'\\xa', '\\xcc', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 1, 3}}, {{'\\xa', '\\xe2', '\\x80', '\\x8c'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 1, 3}}, {{'\\xa', '\\xe2', '\\x80', '\\x8d'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 1, 3}}, {{'\\xa', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2, 3}}, {{'\\xa', '\\xdb', '\\x9d'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 1, 2, 3}}, {{'\\xa', '\\xe0', '\\xa4', '\\x83'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 1, 3}}, {{'\\xa', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2, 3}}, {{'\\xa', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2, 3}}, {{'\\xa', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2, 3}}, {{'\\xa', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2, 3}}, {{'\\xa', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2, 3}}, {{'\\xa', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2, 3}}, {{'\\xa', '\\xc2', '\\xa9'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 1, 2, 3}}, {{'\\xa', '\\x20'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\x20'}, {0, 1, 2, 3}}, {{'\\xa', '\\xcd', '\\xb8'}, {0, 1, 2}},\r\n    {{'\\xa', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 1, 2, 3}}, {{'\\x0', '\\xd'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xd'}, {0, 1, 2, 3}}, {{'\\x0', '\\xa'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xa'}, {0, 1, 2, 3}}, {{'\\x0', '\\x0'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\x0'}, {0, 1, 2, 3}}, {{'\\x0', '\\xe0', '\\xa5', '\\x8d'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 1, 3}}, {{'\\x0', '\\xcc', '\\x80'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 1, 3}}, {{'\\x0', '\\xe2', '\\x80', '\\x8c'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 1, 3}}, {{'\\x0', '\\xe2', '\\x80', '\\x8d'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 1, 3}}, {{'\\x0', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2, 3}}, {{'\\x0', '\\xdb', '\\x9d'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 1, 2, 3}}, {{'\\x0', '\\xe0', '\\xa4', '\\x83'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 1, 3}}, {{'\\x0', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2, 3}}, {{'\\x0', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2, 3}}, {{'\\x0', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2, 3}}, {{'\\x0', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2, 3}}, {{'\\x0', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2, 3}}, {{'\\x0', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2, 3}}, {{'\\x0', '\\xc2', '\\xa9'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 1, 2, 3}}, {{'\\x0', '\\x20'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\x20'}, {0, 1, 2, 3}}, {{'\\x0', '\\xcd', '\\xb8'}, {0, 1, 2}},\r\n    {{'\\x0', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 1, 2, 3}}, {{'\\xe0', '\\xa5', '\\x8d', '\\xd'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xd'}, {0, 2, 3}}, {{'\\xe0', '\\xa5', '\\x8d', '\\xa'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xa'}, {0, 2, 3}}, {{'\\xe0', '\\xa5', '\\x8d', '\\x0'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\x0'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xe0', '\\xa5', '\\x8d'}, {0, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 3}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x80'}, {0, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 3}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xe2', '\\x80', '\\x8c'}, {0, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 3}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xe2', '\\x80', '\\x8d'}, {0, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 3}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xdb', '\\x9d'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xe0', '\\xa4', '\\x83'}, {0, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 3}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xc2', '\\xa9'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\x20'}, {0, 1, 2}}, {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\x20'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcd', '\\xb8'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa5', '\\x8d', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 2, 3}}, {{'\\xcc', '\\x80', '\\xd'}, {0, 1, 2}},\r\n    {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xd'}, {0, 2, 3}}, {{'\\xcc', '\\x80', '\\xa'}, {0, 1, 2}},\r\n    {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xa'}, {0, 2, 3}}, {{'\\xcc', '\\x80', '\\x0'}, {0, 1, 2}},\r\n    {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\x0'}, {0, 2, 3}}, {{'\\xcc', '\\x80', '\\xe0', '\\xa5', '\\x8d'}, {0, 2}},\r\n    {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 3}}, {{'\\xcc', '\\x80', '\\xcc', '\\x80'}, {0, 2}},\r\n    {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 3}}, {{'\\xcc', '\\x80', '\\xe2', '\\x80', '\\x8c'}, {0, 2}},\r\n    {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 3}},\r\n    {{'\\xcc', '\\x80', '\\xe2', '\\x80', '\\x8d'}, {0, 2}},\r\n    {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 3}},\r\n    {{'\\xcc', '\\x80', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2, 3}},\r\n    {{'\\xcc', '\\x80', '\\xdb', '\\x9d'}, {0, 1, 2}}, {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 2, 3}},\r\n    {{'\\xcc', '\\x80', '\\xe0', '\\xa4', '\\x83'}, {0, 2}},\r\n    {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 3}},\r\n    {{'\\xcc', '\\x80', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xcc', '\\x80', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2}},\r\n    {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 2, 3}},\r\n    {{'\\xcc', '\\x80', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2}},\r\n    {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 2, 3}},\r\n    {{'\\xcc', '\\x80', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xcc', '\\x80', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 2, 3}},\r\n    {{'\\xcc', '\\x80', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 2, 3}},\r\n    {{'\\xcc', '\\x80', '\\xc2', '\\xa9'}, {0, 1, 2}}, {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 2, 3}},\r\n    {{'\\xcc', '\\x80', '\\x20'}, {0, 1, 2}}, {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\x20'}, {0, 2, 3}},\r\n    {{'\\xcc', '\\x80', '\\xcd', '\\xb8'}, {0, 1, 2}}, {{'\\xcc', '\\x80', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xd'}, {0, 1, 2}}, {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xd'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xa'}, {0, 1, 2}}, {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xa'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\x0'}, {0, 1, 2}}, {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\x0'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xe0', '\\xa5', '\\x8d'}, {0, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x80'}, {0, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xe2', '\\x80', '\\x8c'}, {0, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xe2', '\\x80', '\\x8d'}, {0, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xdb', '\\x9d'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xe0', '\\xa4', '\\x83'}, {0, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xc2', '\\xa9'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\x20'}, {0, 1, 2}}, {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\x20'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcd', '\\xb8'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8c', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 2, 3}}, {{'\\xe2', '\\x80', '\\x8d', '\\xd'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xd'}, {0, 2, 3}}, {{'\\xe2', '\\x80', '\\x8d', '\\xa'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xa'}, {0, 2, 3}}, {{'\\xe2', '\\x80', '\\x8d', '\\x0'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\x0'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xe0', '\\xa5', '\\x8d'}, {0, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x80'}, {0, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xe2', '\\x80', '\\x8c'}, {0, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xe2', '\\x80', '\\x8d'}, {0, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xdb', '\\x9d'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xe0', '\\xa4', '\\x83'}, {0, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xc2', '\\xa9'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\x20'}, {0, 1, 2}}, {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\x20'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcd', '\\xb8'}, {0, 1, 2}},\r\n    {{'\\xe2', '\\x80', '\\x8d', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 2, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xd'}, {0, 1, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xd'}, {0, 2, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xa'}, {0, 1, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xa'}, {0, 2, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\x0'}, {0, 1, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\x0'}, {0, 2, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xe0', '\\xa5', '\\x8d'}, {0, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x80'}, {0, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xe2', '\\x80', '\\x8c'}, {0, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xe2', '\\x80', '\\x8d'}, {0, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xdb', '\\x9d'}, {0, 1, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 2, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xe0', '\\xa4', '\\x83'}, {0, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 2, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 2, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 2, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 2, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xc2', '\\xa9'}, {0, 1, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 2, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\x20'}, {0, 1, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\x20'}, {0, 2, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcd', '\\xb8'}, {0, 1, 2}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 2, 3}}, {{'\\xdb', '\\x9d', '\\xd'}, {0, 1, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xd'}, {0, 2, 3}}, {{'\\xdb', '\\x9d', '\\xa'}, {0, 1, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xa'}, {0, 2, 3}}, {{'\\xdb', '\\x9d', '\\x0'}, {0, 1, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\x0'}, {0, 2, 3}}, {{'\\xdb', '\\x9d', '\\xe0', '\\xa5', '\\x8d'}, {0, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 3}}, {{'\\xdb', '\\x9d', '\\xcc', '\\x80'}, {0, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 3}}, {{'\\xdb', '\\x9d', '\\xe2', '\\x80', '\\x8c'}, {0, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 3}},\r\n    {{'\\xdb', '\\x9d', '\\xe2', '\\x80', '\\x8d'}, {0, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 3}},\r\n    {{'\\xdb', '\\x9d', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2, 3}},\r\n    {{'\\xdb', '\\x9d', '\\xdb', '\\x9d'}, {0, 2}}, {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 2, 3}},\r\n    {{'\\xdb', '\\x9d', '\\xe0', '\\xa4', '\\x83'}, {0, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 3}},\r\n    {{'\\xdb', '\\x9d', '\\xe1', '\\x84', '\\x80'}, {0, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xdb', '\\x9d', '\\xe1', '\\x85', '\\xa0'}, {0, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 2, 3}},\r\n    {{'\\xdb', '\\x9d', '\\xe1', '\\x86', '\\xa8'}, {0, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 2, 3}},\r\n    {{'\\xdb', '\\x9d', '\\xea', '\\xb0', '\\x80'}, {0, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xdb', '\\x9d', '\\xea', '\\xb0', '\\x81'}, {0, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 2, 3}},\r\n    {{'\\xdb', '\\x9d', '\\xe0', '\\xa4', '\\x95'}, {0, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 2, 3}}, {{'\\xdb', '\\x9d', '\\xc2', '\\xa9'}, {0, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 2, 3}}, {{'\\xdb', '\\x9d', '\\x20'}, {0, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\x20'}, {0, 2, 3}}, {{'\\xdb', '\\x9d', '\\xcd', '\\xb8'}, {0, 2}},\r\n    {{'\\xdb', '\\x9d', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 2, 3}}, {{'\\xe0', '\\xa4', '\\x83', '\\xd'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xd'}, {0, 2, 3}}, {{'\\xe0', '\\xa4', '\\x83', '\\xa'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xa'}, {0, 2, 3}}, {{'\\xe0', '\\xa4', '\\x83', '\\x0'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\x0'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xe0', '\\xa5', '\\x8d'}, {0, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x80'}, {0, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xe2', '\\x80', '\\x8c'}, {0, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xe2', '\\x80', '\\x8d'}, {0, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xdb', '\\x9d'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xe0', '\\xa4', '\\x83'}, {0, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xc2', '\\xa9'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\x20'}, {0, 1, 2}}, {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\x20'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcd', '\\xb8'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x83', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 2, 3}}, {{'\\xe1', '\\x84', '\\x80', '\\xd'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xd'}, {0, 2, 3}}, {{'\\xe1', '\\x84', '\\x80', '\\xa'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xa'}, {0, 2, 3}}, {{'\\xe1', '\\x84', '\\x80', '\\x0'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\x0'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xe0', '\\xa5', '\\x8d'}, {0, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x80'}, {0, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xe2', '\\x80', '\\x8c'}, {0, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xe2', '\\x80', '\\x8d'}, {0, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xdb', '\\x9d'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xe0', '\\xa4', '\\x83'}, {0, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xe1', '\\x84', '\\x80'}, {0, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xe1', '\\x85', '\\xa0'}, {0, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xea', '\\xb0', '\\x80'}, {0, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xea', '\\xb0', '\\x81'}, {0, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xc2', '\\xa9'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\x20'}, {0, 1, 2}}, {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\x20'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcd', '\\xb8'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 2, 3}}, {{'\\xe1', '\\x85', '\\xa0', '\\xd'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xd'}, {0, 2, 3}}, {{'\\xe1', '\\x85', '\\xa0', '\\xa'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xa'}, {0, 2, 3}}, {{'\\xe1', '\\x85', '\\xa0', '\\x0'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\x0'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xe0', '\\xa5', '\\x8d'}, {0, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 3}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x80'}, {0, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 3}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xe2', '\\x80', '\\x8c'}, {0, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 3}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xe2', '\\x80', '\\x8d'}, {0, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 3}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xdb', '\\x9d'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xe0', '\\xa4', '\\x83'}, {0, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 3}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xe1', '\\x85', '\\xa0'}, {0, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xe1', '\\x86', '\\xa8'}, {0, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xc2', '\\xa9'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\x20'}, {0, 1, 2}}, {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\x20'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcd', '\\xb8'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x85', '\\xa0', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 2, 3}}, {{'\\xe1', '\\x86', '\\xa8', '\\xd'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xd'}, {0, 2, 3}}, {{'\\xe1', '\\x86', '\\xa8', '\\xa'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xa'}, {0, 2, 3}}, {{'\\xe1', '\\x86', '\\xa8', '\\x0'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\x0'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xe0', '\\xa5', '\\x8d'}, {0, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 3}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x80'}, {0, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 3}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xe2', '\\x80', '\\x8c'}, {0, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 3}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xe2', '\\x80', '\\x8d'}, {0, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 3}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xdb', '\\x9d'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xe0', '\\xa4', '\\x83'}, {0, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 3}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xe1', '\\x86', '\\xa8'}, {0, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xc2', '\\xa9'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\x20'}, {0, 1, 2}}, {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\x20'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcd', '\\xb8'}, {0, 1, 2}},\r\n    {{'\\xe1', '\\x86', '\\xa8', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 2, 3}}, {{'\\xea', '\\xb0', '\\x80', '\\xd'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xd'}, {0, 2, 3}}, {{'\\xea', '\\xb0', '\\x80', '\\xa'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xa'}, {0, 2, 3}}, {{'\\xea', '\\xb0', '\\x80', '\\x0'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\x0'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xe0', '\\xa5', '\\x8d'}, {0, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 3}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x80'}, {0, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 3}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xe2', '\\x80', '\\x8c'}, {0, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 3}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xe2', '\\x80', '\\x8d'}, {0, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 3}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xdb', '\\x9d'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xe0', '\\xa4', '\\x83'}, {0, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 3}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xe1', '\\x85', '\\xa0'}, {0, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xe1', '\\x86', '\\xa8'}, {0, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xc2', '\\xa9'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\x20'}, {0, 1, 2}}, {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\x20'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcd', '\\xb8'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 2, 3}}, {{'\\xea', '\\xb0', '\\x81', '\\xd'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xd'}, {0, 2, 3}}, {{'\\xea', '\\xb0', '\\x81', '\\xa'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xa'}, {0, 2, 3}}, {{'\\xea', '\\xb0', '\\x81', '\\x0'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\x0'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xe0', '\\xa5', '\\x8d'}, {0, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x80'}, {0, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xe2', '\\x80', '\\x8c'}, {0, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xe2', '\\x80', '\\x8d'}, {0, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xdb', '\\x9d'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xe0', '\\xa4', '\\x83'}, {0, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xe1', '\\x86', '\\xa8'}, {0, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xc2', '\\xa9'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\x20'}, {0, 1, 2}}, {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\x20'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcd', '\\xb8'}, {0, 1, 2}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 2, 3}}, {{'\\xe0', '\\xa4', '\\x95', '\\xd'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xd'}, {0, 2, 3}}, {{'\\xe0', '\\xa4', '\\x95', '\\xa'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xa'}, {0, 2, 3}}, {{'\\xe0', '\\xa4', '\\x95', '\\x0'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\x0'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe0', '\\xa5', '\\x8d'}, {0, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x80'}, {0, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe2', '\\x80', '\\x8c'}, {0, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe2', '\\x80', '\\x8d'}, {0, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xdb', '\\x9d'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe0', '\\xa4', '\\x83'}, {0, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xc2', '\\xa9'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\x20'}, {0, 1, 2}}, {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\x20'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcd', '\\xb8'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 2, 3}}, {{'\\xc2', '\\xa9', '\\xd'}, {0, 1, 2}},\r\n    {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xd'}, {0, 2, 3}}, {{'\\xc2', '\\xa9', '\\xa'}, {0, 1, 2}},\r\n    {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xa'}, {0, 2, 3}}, {{'\\xc2', '\\xa9', '\\x0'}, {0, 1, 2}},\r\n    {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\x0'}, {0, 2, 3}}, {{'\\xc2', '\\xa9', '\\xe0', '\\xa5', '\\x8d'}, {0, 2}},\r\n    {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 3}}, {{'\\xc2', '\\xa9', '\\xcc', '\\x80'}, {0, 2}},\r\n    {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 3}}, {{'\\xc2', '\\xa9', '\\xe2', '\\x80', '\\x8c'}, {0, 2}},\r\n    {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 3}},\r\n    {{'\\xc2', '\\xa9', '\\xe2', '\\x80', '\\x8d'}, {0, 2}},\r\n    {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 3}},\r\n    {{'\\xc2', '\\xa9', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2, 3}},\r\n    {{'\\xc2', '\\xa9', '\\xdb', '\\x9d'}, {0, 1, 2}}, {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 2, 3}},\r\n    {{'\\xc2', '\\xa9', '\\xe0', '\\xa4', '\\x83'}, {0, 2}},\r\n    {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 3}},\r\n    {{'\\xc2', '\\xa9', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xc2', '\\xa9', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2}},\r\n    {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 2, 3}},\r\n    {{'\\xc2', '\\xa9', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2}},\r\n    {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 2, 3}},\r\n    {{'\\xc2', '\\xa9', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xc2', '\\xa9', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 2, 3}},\r\n    {{'\\xc2', '\\xa9', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 2, 3}},\r\n    {{'\\xc2', '\\xa9', '\\xc2', '\\xa9'}, {0, 1, 2}}, {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 2, 3}},\r\n    {{'\\xc2', '\\xa9', '\\x20'}, {0, 1, 2}}, {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\x20'}, {0, 2, 3}},\r\n    {{'\\xc2', '\\xa9', '\\xcd', '\\xb8'}, {0, 1, 2}}, {{'\\xc2', '\\xa9', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 2, 3}},\r\n    {{'\\x20', '\\xd'}, {0, 1, 2}}, {{'\\x20', '\\xcc', '\\x88', '\\xd'}, {0, 2, 3}}, {{'\\x20', '\\xa'}, {0, 1, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\xa'}, {0, 2, 3}}, {{'\\x20', '\\x0'}, {0, 1, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\x0'}, {0, 2, 3}}, {{'\\x20', '\\xe0', '\\xa5', '\\x8d'}, {0, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 3}}, {{'\\x20', '\\xcc', '\\x80'}, {0, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 3}}, {{'\\x20', '\\xe2', '\\x80', '\\x8c'}, {0, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 3}}, {{'\\x20', '\\xe2', '\\x80', '\\x8d'}, {0, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 3}}, {{'\\x20', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2, 3}}, {{'\\x20', '\\xdb', '\\x9d'}, {0, 1, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 2, 3}}, {{'\\x20', '\\xe0', '\\xa4', '\\x83'}, {0, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 3}}, {{'\\x20', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}}, {{'\\x20', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 2, 3}}, {{'\\x20', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 2, 3}}, {{'\\x20', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 2, 3}}, {{'\\x20', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 2, 3}}, {{'\\x20', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 2, 3}}, {{'\\x20', '\\xc2', '\\xa9'}, {0, 1, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 2, 3}}, {{'\\x20', '\\x20'}, {0, 1, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\x20'}, {0, 2, 3}}, {{'\\x20', '\\xcd', '\\xb8'}, {0, 1, 2}},\r\n    {{'\\x20', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 2, 3}}, {{'\\xcd', '\\xb8', '\\xd'}, {0, 1, 2}},\r\n    {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xd'}, {0, 2, 3}}, {{'\\xcd', '\\xb8', '\\xa'}, {0, 1, 2}},\r\n    {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xa'}, {0, 2, 3}}, {{'\\xcd', '\\xb8', '\\x0'}, {0, 1, 2}},\r\n    {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\x0'}, {0, 2, 3}}, {{'\\xcd', '\\xb8', '\\xe0', '\\xa5', '\\x8d'}, {0, 2}},\r\n    {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xe0', '\\xa5', '\\x8d'}, {0, 3}}, {{'\\xcd', '\\xb8', '\\xcc', '\\x80'}, {0, 2}},\r\n    {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xcc', '\\x80'}, {0, 3}}, {{'\\xcd', '\\xb8', '\\xe2', '\\x80', '\\x8c'}, {0, 2}},\r\n    {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8c'}, {0, 3}},\r\n    {{'\\xcd', '\\xb8', '\\xe2', '\\x80', '\\x8d'}, {0, 2}},\r\n    {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d'}, {0, 3}},\r\n    {{'\\xcd', '\\xb8', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 1, 2}},\r\n    {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xf0', '\\x9f', '\\x87', '\\xa6'}, {0, 2, 3}},\r\n    {{'\\xcd', '\\xb8', '\\xdb', '\\x9d'}, {0, 1, 2}}, {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xdb', '\\x9d'}, {0, 2, 3}},\r\n    {{'\\xcd', '\\xb8', '\\xe0', '\\xa4', '\\x83'}, {0, 2}},\r\n    {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x83'}, {0, 3}},\r\n    {{'\\xcd', '\\xb8', '\\xe1', '\\x84', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xcd', '\\xb8', '\\xe1', '\\x85', '\\xa0'}, {0, 1, 2}},\r\n    {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xe1', '\\x85', '\\xa0'}, {0, 2, 3}},\r\n    {{'\\xcd', '\\xb8', '\\xe1', '\\x86', '\\xa8'}, {0, 1, 2}},\r\n    {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xe1', '\\x86', '\\xa8'}, {0, 2, 3}},\r\n    {{'\\xcd', '\\xb8', '\\xea', '\\xb0', '\\x80'}, {0, 1, 2}},\r\n    {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xcd', '\\xb8', '\\xea', '\\xb0', '\\x81'}, {0, 1, 2}},\r\n    {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xea', '\\xb0', '\\x81'}, {0, 2, 3}},\r\n    {{'\\xcd', '\\xb8', '\\xe0', '\\xa4', '\\x95'}, {0, 1, 2}},\r\n    {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xe0', '\\xa4', '\\x95'}, {0, 2, 3}},\r\n    {{'\\xcd', '\\xb8', '\\xc2', '\\xa9'}, {0, 1, 2}}, {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xc2', '\\xa9'}, {0, 2, 3}},\r\n    {{'\\xcd', '\\xb8', '\\x20'}, {0, 1, 2}}, {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\x20'}, {0, 2, 3}},\r\n    {{'\\xcd', '\\xb8', '\\xcd', '\\xb8'}, {0, 1, 2}}, {{'\\xcd', '\\xb8', '\\xcc', '\\x88', '\\xcd', '\\xb8'}, {0, 2, 3}},\r\n    {{'\\xd', '\\xa', '\\x61', '\\xa', '\\xcc', '\\x88'}, {0, 2, 3, 4, 5}}, {{'\\x61', '\\xcc', '\\x88'}, {0, 2}},\r\n    {{'\\x20', '\\xe2', '\\x80', '\\x8d', '\\xd9', '\\x86'}, {0, 2, 3}},\r\n    {{'\\xd9', '\\x86', '\\xe2', '\\x80', '\\x8d', '\\x20'}, {0, 2, 3}},\r\n    {{'\\xe1', '\\x84', '\\x80', '\\xe1', '\\x84', '\\x80'}, {0, 2}},\r\n    {{'\\xea', '\\xb0', '\\x80', '\\xe1', '\\x86', '\\xa8', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xea', '\\xb0', '\\x81', '\\xe1', '\\x86', '\\xa8', '\\xe1', '\\x84', '\\x80'}, {0, 2, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xf0', '\\x9f', '\\x87', '\\xa7', '\\xf0', '\\x9f', '\\x87', '\\xa8', '\\x62'},\r\n        {0, 2, 3, 4}},\r\n    {{'\\x61', '\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xf0', '\\x9f', '\\x87', '\\xa7', '\\xf0', '\\x9f', '\\x87', '\\xa8', '\\x62'},\r\n        {0, 1, 3, 4, 5}},\r\n    {{'\\x61', '\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xf0', '\\x9f', '\\x87', '\\xa7', '\\xe2', '\\x80', '\\x8d', '\\xf0', '\\x9f',\r\n         '\\x87', '\\xa8', '\\x62'},\r\n        {0, 1, 4, 5, 6}},\r\n    {{'\\x61', '\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xe2', '\\x80', '\\x8d', '\\xf0', '\\x9f', '\\x87', '\\xa7', '\\xf0', '\\x9f',\r\n         '\\x87', '\\xa8', '\\x62'},\r\n        {0, 1, 3, 5, 6}},\r\n    {{'\\x61', '\\xf0', '\\x9f', '\\x87', '\\xa6', '\\xf0', '\\x9f', '\\x87', '\\xa7', '\\xf0', '\\x9f', '\\x87', '\\xa8', '\\xf0',\r\n         '\\x9f', '\\x87', '\\xa9', '\\x62'},\r\n        {0, 1, 3, 5, 6}},\r\n    {{'\\x61', '\\xe2', '\\x80', '\\x8d'}, {0, 2}}, {{'\\x61', '\\xcc', '\\x88', '\\x62'}, {0, 2, 3}},\r\n    {{'\\x61', '\\xe0', '\\xa4', '\\x83', '\\x62'}, {0, 2, 3}}, {{'\\x61', '\\xd8', '\\x80', '\\x62'}, {0, 1, 3}},\r\n    {{'\\xf0', '\\x9f', '\\x91', '\\xb6', '\\xf0', '\\x9f', '\\x8f', '\\xbf', '\\xf0', '\\x9f', '\\x91', '\\xb6'}, {0, 2, 3}},\r\n    {{'\\x61', '\\xf0', '\\x9f', '\\x8f', '\\xbf', '\\xf0', '\\x9f', '\\x91', '\\xb6'}, {0, 2, 3}},\r\n    {{'\\x61', '\\xf0', '\\x9f', '\\x8f', '\\xbf', '\\xf0', '\\x9f', '\\x91', '\\xb6', '\\xe2', '\\x80', '\\x8d', '\\xf0', '\\x9f',\r\n         '\\x9b', '\\x91'},\r\n        {0, 2, 5}},\r\n    {{'\\xf0', '\\x9f', '\\x91', '\\xb6', '\\xf0', '\\x9f', '\\x8f', '\\xbf', '\\xcc', '\\x88', '\\xe2', '\\x80', '\\x8d', '\\xf0',\r\n         '\\x9f', '\\x91', '\\xb6', '\\xf0', '\\x9f', '\\x8f', '\\xbf'},\r\n        {0, 6}},\r\n    {{'\\xf0', '\\x9f', '\\x9b', '\\x91', '\\xe2', '\\x80', '\\x8d', '\\xf0', '\\x9f', '\\x9b', '\\x91'}, {0, 3}},\r\n    {{'\\x61', '\\xe2', '\\x80', '\\x8d', '\\xf0', '\\x9f', '\\x9b', '\\x91'}, {0, 2, 3}},\r\n    {{'\\xe2', '\\x9c', '\\x81', '\\xe2', '\\x80', '\\x8d', '\\xe2', '\\x9c', '\\x81'}, {0, 2, 3}},\r\n    {{'\\x61', '\\xe2', '\\x80', '\\x8d', '\\xe2', '\\x9c', '\\x81'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe0', '\\xa4', '\\xa4'}, {0, 1, 2}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe0', '\\xa5', '\\x8d', '\\xe0', '\\xa4', '\\xa4'}, {0, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe0', '\\xa5', '\\x8d', '\\xe0', '\\xa5', '\\x8d', '\\xe0', '\\xa4', '\\xa4'}, {0, 4}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe0', '\\xa5', '\\x8d', '\\xe2', '\\x80', '\\x8d', '\\xe0', '\\xa4', '\\xa4'}, {0, 4}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe0', '\\xa4', '\\xbc', '\\xe2', '\\x80', '\\x8d', '\\xe0', '\\xa5', '\\x8d', '\\xe0', '\\xa4',\r\n         '\\xa4'},\r\n        {0, 5}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe0', '\\xa4', '\\xbc', '\\xe0', '\\xa5', '\\x8d', '\\xe2', '\\x80', '\\x8d', '\\xe0', '\\xa4',\r\n         '\\xa4'},\r\n        {0, 5}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe0', '\\xa5', '\\x8d', '\\xe0', '\\xa4', '\\xa4', '\\xe0', '\\xa5', '\\x8d', '\\xe0', '\\xa4',\r\n         '\\xaf'},\r\n        {0, 5}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe0', '\\xa5', '\\x8d', '\\x61'}, {0, 2, 3}},\r\n    {{'\\x61', '\\xe0', '\\xa5', '\\x8d', '\\xe0', '\\xa4', '\\xa4'}, {0, 2, 3}},\r\n    {{'\\x3f', '\\xe0', '\\xa5', '\\x8d', '\\xe0', '\\xa4', '\\xa4'}, {0, 2, 3}},\r\n    {{'\\xe0', '\\xa4', '\\x95', '\\xe0', '\\xa5', '\\x8d', '\\xe0', '\\xa5', '\\x8d', '\\xe0', '\\xa4', '\\xa4'}, {0, 4}},\r\n    {{'\\xe0', '\\xaa', '\\xb8', '\\xe0', '\\xab', '\\xbb', '\\xe0', '\\xab', '\\x8d', '\\xe0', '\\xaa', '\\xb8', '\\xe0', '\\xab',\r\n         '\\xbb'},\r\n        {0, 5}},\r\n    {{'\\xe1', '\\x80', '\\x99', '\\xe1', '\\x80', '\\xb9', '\\xe1', '\\x80', '\\x98', '\\xe1', '\\x80', '\\xac', '\\xe1', '\\x80',\r\n         '\\xb7'},\r\n        {0, 3, 5}},\r\n    {{'\\xe1', '\\x80', '\\x84', '\\xe1', '\\x80', '\\xba', '\\xe1', '\\x80', '\\xb9', '\\xe1', '\\x80', '\\x91', '\\xe1', '\\x80',\r\n         '\\xb9', '\\xe1', '\\x80', '\\x91'},\r\n        {0, 6}},\r\n    {{'\\xe1', '\\xac', '\\x92', '\\xe1', '\\xac', '\\x81', '\\xe1', '\\xac', '\\xb2', '\\xe1', '\\xad', '\\x84', '\\xe1', '\\xac',\r\n         '\\xaf', '\\xe1', '\\xac', '\\xb2', '\\xe1', '\\xad', '\\x84', '\\xe1', '\\xac', '\\xa2', '\\xe1', '\\xad', '\\x84', '\\xe1',\r\n         '\\xac', '\\xac', '\\xe1', '\\xac', '\\xb2', '\\xe1', '\\xad', '\\x84', '\\xe1', '\\xac', '\\xa2', '\\xe1', '\\xac',\r\n         '\\xb8'},\r\n        {0, 2, 5, 10, 14}},\r\n    {{'\\xe1', '\\x9e', '\\x9f', '\\xe1', '\\x9f', '\\x92', '\\xe1', '\\x9e', '\\x8f', '\\xe1', '\\x9f', '\\x92', '\\xe1', '\\x9e',\r\n         '\\x9a', '\\xe1', '\\x9e', '\\xb8'},\r\n        {0, 6}},\r\n    {{'\\xe1', '\\xac', '\\xa6', '\\xe1', '\\xac', '\\x97', '\\xe1', '\\xad', '\\x84', '\\xe1', '\\xac', '\\x93'}, {0, 1, 4}},\r\n    {{'\\xe1', '\\xac', '\\xa7', '\\xe1', '\\xac', '\\x93', '\\xe1', '\\xad', '\\x84', '\\xe1', '\\xac', '\\x8b', '\\xe1', '\\xac',\r\n         '\\x8b', '\\xe1', '\\xac', '\\x84'},\r\n        {0, 1, 4, 6}},\r\n    {{'\\xe1', '\\x9e', '\\x95', '\\xe1', '\\x9f', '\\x92', '\\xe1', '\\x9e', '\\xaf', '\\xe1', '\\x9e', '\\x98'}, {0, 3, 4}},\r\n    {{'\\xe1', '\\x9e', '\\xa0', '\\xe1', '\\x9f', '\\x92', '\\xe1', '\\x9e', '\\xab', '\\xe1', '\\x9e', '\\x91', '\\xe1', '\\x9f',\r\n         '\\x90', '\\xe1', '\\x9e', '\\x99'},\r\n        {0, 3, 5, 6}}};\r\n\r\n// End of generated data - DO NOT EDIT manually!\r\n\r\n\r\nvoid run_unicode_test_data_utf32() {\r\n    for (const auto& test_case : test_data<char32_t>) {\r\n        _Grapheme_break_property_iterator2<char32_t> iter(\r\n            test_case.code_points.data(), test_case.code_points.data() + test_case.code_points.size());\r\n        size_t i = 0;\r\n        while (iter != default_sentinel) {\r\n            assert(i < test_case.breaks.size());\r\n            assert(*iter == test_case.code_points[test_case.breaks[i]]);\r\n            ++iter;\r\n            ++i;\r\n        }\r\n    }\r\n}\r\n\r\nvoid run_unicode_test_data_utf32_utf8_comparison() {\r\n    for (size_t i = 0; i < size(test_data<char>); ++i) {\r\n        const auto& utf32_code_points = test_data<char32_t>[i].code_points;\r\n        const auto& utf8_code_points  = test_data<char>[i].code_points;\r\n        assert(ranges::equal(_Grapheme_break_property_iterator2<char32_t>{utf32_code_points.data(),\r\n                                 utf32_code_points.data() + utf32_code_points.size()},\r\n            default_sentinel,\r\n            _Grapheme_break_property_iterator2<char>{\r\n                utf8_code_points.data(), utf8_code_points.data() + utf8_code_points.size()},\r\n            default_sentinel));\r\n    }\r\n}\r\n\r\nconstexpr bool test_unicode_properties() {\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0xB)\r\n           == _Grapheme_Break_property_values::_Control_value);\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0xC)\r\n           == _Grapheme_Break_property_values::_Control_value);\r\n    assert(\r\n        _Grapheme_Break_property_data._Get_property_for_codepoint(0xA) == _Grapheme_Break_property_values::_LF_value);\r\n    assert(\r\n        _Grapheme_Break_property_data._Get_property_for_codepoint(0xD) == _Grapheme_Break_property_values::_CR_value);\r\n\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0x7F)\r\n           == _Grapheme_Break_property_values::_Control_value);\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0x80)\r\n           == _Grapheme_Break_property_values::_Control_value);\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0x9F)\r\n           == _Grapheme_Break_property_values::_Control_value);\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0x300)\r\n           == _Grapheme_Break_property_values::_Extend_value);\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0x08D4)\r\n           == _Grapheme_Break_property_values::_Extend_value);\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0xE01EF)\r\n           == _Grapheme_Break_property_values::_Extend_value);\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0x1D16D)\r\n           == _Grapheme_Break_property_values::_Extend_value);\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0x1F1E6)\r\n           == _Grapheme_Break_property_values::_Regional_Indicator_value);\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0x1F1FF)\r\n           == _Grapheme_Break_property_values::_Regional_Indicator_value);\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0x0903)\r\n           == _Grapheme_Break_property_values::_SpacingMark_value);\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0x1934)\r\n           == _Grapheme_Break_property_values::_SpacingMark_value);\r\n    assert(\r\n        _Grapheme_Break_property_data._Get_property_for_codepoint(0x1100) == _Grapheme_Break_property_values::_L_value);\r\n    assert(\r\n        _Grapheme_Break_property_data._Get_property_for_codepoint(0xA97C) == _Grapheme_Break_property_values::_L_value);\r\n    assert(\r\n        _Grapheme_Break_property_data._Get_property_for_codepoint(0x1160) == _Grapheme_Break_property_values::_V_value);\r\n    assert(\r\n        _Grapheme_Break_property_data._Get_property_for_codepoint(0xD7C6) == _Grapheme_Break_property_values::_V_value);\r\n    assert(\r\n        _Grapheme_Break_property_data._Get_property_for_codepoint(0x11A8) == _Grapheme_Break_property_values::_T_value);\r\n    assert(\r\n        _Grapheme_Break_property_data._Get_property_for_codepoint(0xD7FB) == _Grapheme_Break_property_values::_T_value);\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0xAC00)\r\n           == _Grapheme_Break_property_values::_LV_value);\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0xD788)\r\n           == _Grapheme_Break_property_values::_LV_value);\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0xAC01)\r\n           == _Grapheme_Break_property_values::_LVT_value);\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0xD7A3)\r\n           == _Grapheme_Break_property_values::_LVT_value);\r\n    assert(_Grapheme_Break_property_data._Get_property_for_codepoint(0x200D)\r\n           == _Grapheme_Break_property_values::_ZWJ_value);\r\n    assert(\r\n        _Grapheme_Break_property_data._Get_property_for_codepoint(0x7E) == _Grapheme_Break_property_values::_No_value);\r\n    assert(\r\n        _Grapheme_Break_property_data._Get_property_for_codepoint(0xA0) == _Grapheme_Break_property_values::_No_value);\r\n\r\n    // Indic_Conjunct_Break = Linker\r\n    assert(_Indic_Conjunct_Break_property_data._Get_property_for_codepoint(0x094D)\r\n           == _Indic_Conjunct_Break_property_values::_Linker_value);\r\n    assert(_Indic_Conjunct_Break_property_data._Get_property_for_codepoint(0x09CD)\r\n           == _Indic_Conjunct_Break_property_values::_Linker_value);\r\n    assert(_Indic_Conjunct_Break_property_data._Get_property_for_codepoint(0x0ACD)\r\n           == _Indic_Conjunct_Break_property_values::_Linker_value);\r\n    assert(_Indic_Conjunct_Break_property_data._Get_property_for_codepoint(0x0B4D)\r\n           == _Indic_Conjunct_Break_property_values::_Linker_value);\r\n    assert(_Indic_Conjunct_Break_property_data._Get_property_for_codepoint(0x0C4D)\r\n           == _Indic_Conjunct_Break_property_values::_Linker_value);\r\n    assert(_Indic_Conjunct_Break_property_data._Get_property_for_codepoint(0x0D4D)\r\n           == _Indic_Conjunct_Break_property_values::_Linker_value);\r\n\r\n    // Indic_Conjunct_Break = Consonant\r\n    assert(_Indic_Conjunct_Break_property_data._Get_property_for_codepoint(0x0915)\r\n           == _Indic_Conjunct_Break_property_values::_Consonant_value);\r\n    assert(_Indic_Conjunct_Break_property_data._Get_property_for_codepoint(0x09DF)\r\n           == _Indic_Conjunct_Break_property_values::_Consonant_value);\r\n    assert(_Indic_Conjunct_Break_property_data._Get_property_for_codepoint(0x0C39)\r\n           == _Indic_Conjunct_Break_property_values::_Consonant_value);\r\n\r\n    // Indic_Conjunct_Break = Extend\r\n    assert(_Indic_Conjunct_Break_property_data._Get_property_for_codepoint(0x0B3F)\r\n           == _Indic_Conjunct_Break_property_values::_Extend_value);\r\n    assert(_Indic_Conjunct_Break_property_data._Get_property_for_codepoint(0x0CC7)\r\n           == _Indic_Conjunct_Break_property_values::_Extend_value);\r\n    assert(_Indic_Conjunct_Break_property_data._Get_property_for_codepoint(0x0CD6)\r\n           == _Indic_Conjunct_Break_property_values::_Extend_value);\r\n\r\n    // emoji-data\r\n    assert(_Extended_Pictographic_property_data._Get_property_for_codepoint(0x2194)\r\n           == _Extended_Pictographic_property_values::_Extended_Pictographic_value);\r\n\r\n    // emoji_component, not extended_pictographic\r\n    assert(_Extended_Pictographic_property_data._Get_property_for_codepoint(0x23)\r\n           == _Extended_Pictographic_property_values::_No_value);\r\n    return true;\r\n}\r\n\r\ntemplate <typename CharT>\r\nconstexpr void test_utf_decode_spans(const span<const CharT> encoded, const span<const char32_t> decoded) {\r\n    static_assert(is_same_v<CharT, char> || is_same_v<CharT, wchar_t>);\r\n    assert(ranges::equal(_Unicode_codepoint_iterator{encoded.data(), encoded.data() + encoded.size()}, default_sentinel,\r\n        decoded.begin(), decoded.end()));\r\n}\r\n\r\ntemplate <typename CharT, size_t N_enc, size_t N_dec>\r\nconstexpr void test_utf_decode_arrays(const CharT (&encoded)[N_enc], const char32_t (&decoded)[N_dec]) {\r\n    test_utf_decode_spans<CharT>(encoded, decoded);\r\n}\r\n\r\nconstexpr bool test_utf8_decode() {\r\n    test_utf_decode_arrays(\"\\xC0\\xAF\\xE0\\x80\\xBF\\xF0\\x81\\x82\\x41\",\r\n        {0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x41, 0x0});\r\n    test_utf_decode_arrays(\"\\xED\\xA0\\x80\\xED\\xBF\\xBF\\xED\\xAF\\x41\",\r\n        {0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x41, 0x0});\r\n    test_utf_decode_arrays(\"\\xF4\\x91\\x92\\x93\\xFF\\x41\\x80\\xBF\\x42\",\r\n        {0xFFFd, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x41, 0xFFFD, 0xFFFD, 0x42, 0x0});\r\n    test_utf_decode_arrays(\"\\xE1\\x80\\xE2\\xF0\\x91\\x92\\xF1\\xBF\\x41\", {0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x41, 0x0});\r\n    test_utf_decode_arrays(\"\\xCE\\xA9\", {0x03A9, 0x0});\r\n    test_utf_decode_arrays(\"\\x7F\", {0x7F, 0x0});\r\n    test_utf_decode_arrays(\"\\xC2\\xA2\", {0xA2, 0x0});\r\n    test_utf_decode_arrays(\"\\xD4\\x84\", {0x0504, 0x0});\r\n    test_utf_decode_arrays(\"\\xDF\\xA0\", {0x7E0, 0x0});\r\n    test_utf_decode_arrays(\"\\xE0\\xA4\\x93\", {0x0913, 0x0});\r\n    test_utf_decode_arrays(\"\\xE1\\xBC\\x80\", {0x1F00, 0x0});\r\n    test_utf_decode_arrays(\"\\xEF\\xA0\\x93\", {0xF813, 0x0});\r\n    test_utf_decode_arrays(\"\\xF3\\xBA\\xBE\\x8F\", {0xFAF8F, 0x0});\r\n    test_utf_decode_arrays(\"\\xFF\\xBA\", {0xFFFD, 0xFFFD, 0x0});\r\n    test_utf_decode_arrays(\"\\xEF\", {0xFFFD, 0x0});\r\n    test_utf_decode_arrays(\"\\xE0\\x91\", {0xFFFD, 0xFFFD, 0x0});\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_utf16_decode() {\r\n    test_utf_decode_arrays<wchar_t>({0xD7FF, 0xD800}, {0xD7FF, 0xFFFD});\r\n    test_utf_decode_arrays<wchar_t>({0xD800, 0xD7FF}, {0xFFFD, 0xD7FF});\r\n    test_utf_decode_arrays<wchar_t>({0xD7FF, 0xDF02}, {0xD7FF, 0xFFFD});\r\n    test_utf_decode_arrays<wchar_t>({0xDF02, 0xD7FF}, {0xFFFD, 0xD7FF});\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_unicode_decoding() {\r\n    for (size_t i = 0; i < size(test_data<char>); ++i) {\r\n        test_utf_decode_spans<char>(test_data<char>[i].code_points, test_data<char32_t>[i].code_points);\r\n    }\r\n}\r\n\r\nint main() {\r\n    run_unicode_test_data_utf32();\r\n    run_unicode_test_data_utf32_utf8_comparison();\r\n\r\n    test_unicode_properties();\r\n    static_assert(test_unicode_properties());\r\n\r\n    test_utf8_decode();\r\n    static_assert(test_utf8_decode());\r\n\r\n    test_utf16_decode();\r\n    static_assert(test_utf16_decode());\r\n\r\n    test_unicode_decoding();\r\n\r\n    static_assert(forward_iterator<_Unicode_codepoint_iterator<char>>);\r\n    static_assert(sentinel_for<default_sentinel_t, _Unicode_codepoint_iterator<char>>);\r\n    static_assert(forward_iterator<_Grapheme_break_property_iterator2<char>>);\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_legacy_text_encoding/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This is `usual_20_matrix.lst` with `/execution-charset:.932` added.\r\n# clang is excluded since it doesn't support non-UTF-8 execution charsets.\r\n\r\nRUNALL_INCLUDE ..\\prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w14640 /Zc:threadSafeInit- /execution-charset:.932\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++20 /permissive- /Zc:noexceptTypes-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++20 /permissive- /Zc:noexceptTypes- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:wchar_t-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- /Zc:wchar_t- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++20 /permissive- /fp:except /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++20 /permissive- /fp:except /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /fp:strict\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /fp:strict -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/clr /MD /std:c++20\"\r\nPM_CL=\"/clr /MDd /std:c++20\"\r\nPM_CL=\"/std:c++20 /permissive- /BE /c /EHsc /MD\"\r\nPM_CL=\"/std:c++latest /permissive- /BE /c /EHsc /MTd\"\r\n# PM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++20 /permissive- /MD\"\r\n# PM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++latest /permissive- /MTd /fp:strict\"\r\n# PM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++latest /permissive- /MT /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined\"\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_legacy_text_encoding/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <clocale>\r\n#include <format>\r\n#include <string_view>\r\n\r\n#include <test_format_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nvoid test_multibyte_format_strings() {\r\n    const auto s = \"\\x93\\xfa\\x96{\\x92\\x6e\\x90}\"sv; // Note the use of `{` and `}` as continuation bytes (from GH-1576)\r\n    assert(format(\"\\x93\\xfa\\x96{\\x92\\x6e\\x90}\"sv) == s);\r\n\r\n    assert(format(\"{:.2}\", s) == \"\\x93\\xfa\"sv);\r\n    assert(format(\"{:4.2}\", s) == \"\\x93\\xfa  \"sv);\r\n\r\n    assert(format(\"{:<4.2}\", s) == \"\\x93\\xfa  \"sv);\r\n    assert(format(\"{:^4.2}\", s) == \" \\x93\\xfa \"sv);\r\n    assert(format(\"{:>4.2}\", s) == \"  \\x93\\xfa\"sv);\r\n\r\n    assert(format(\"{:\\x90}<4.2}\", s) == \"\\x93\\xfa\\x90}\\x90}\"sv);\r\n    assert(format(\"{:\\x90}^4.2}\", s) == \"\\x90}\\x93\\xfa\\x90}\"sv);\r\n    assert(format(\"{:\\x90}>4.2}\", s) == \"\\x90}\\x90}\\x93\\xfa\"sv);\r\n\r\n    assert(format(\"{:.3}\", s) == \"\\x93\\xfa\"sv);\r\n    assert(format(\"{:4.3}\", s) == \"\\x93\\xfa  \"sv);\r\n\r\n    assert(format(\"{:<4.3}\", s) == \"\\x93\\xfa  \"sv);\r\n    assert(format(\"{:^4.3}\", s) == \" \\x93\\xfa \"sv);\r\n    assert(format(\"{:>4.3}\", s) == \"  \\x93\\xfa\"sv);\r\n\r\n    assert(format(\"{:\\x90}<4.3}\", s) == \"\\x93\\xfa\\x90}\\x90}\"sv);\r\n    assert(format(\"{:\\x90}^4.3}\", s) == \"\\x90}\\x93\\xfa\\x90}\"sv);\r\n    assert(format(\"{:\\x90}>4.3}\", s) == \"\\x90}\\x90}\\x93\\xfa\"sv);\r\n}\r\n\r\nvoid test_parse_align() {\r\n    const auto parse_align_fn = _Parse_align<char, testing_callbacks<char>>;\r\n\r\n    test_parse_helper(parse_align_fn, \"\\x93\\xfa<X\"sv, false, 3, //\r\n        {.expected_alignment = _Fmt_align::_Left, .expected_fill = \"\\x93\\xfa\"sv});\r\n    test_parse_helper(parse_align_fn, \"\\x96\\x7b>X\"sv, false, 3,\r\n        {.expected_alignment = _Fmt_align::_Right, .expected_fill = \"\\x96\\x7b\"sv});\r\n    test_parse_helper(parse_align_fn, \"\\x92\\x6e^X\"sv, false, 3,\r\n        {.expected_alignment = _Fmt_align::_Center, .expected_fill = \"\\x92\\x6e\"sv});\r\n\r\n    test_parse_helper(parse_align_fn, \"\\x92\\x30<X\"sv, true);\r\n}\r\n\r\nvoid test_width_estimation() {\r\n    // Format strings of known width with a trailing delimiter using a precision large enough to\r\n    // include all but the delimiter to validate the width estimation code.\r\n    struct test_case {\r\n        const char* str;\r\n        int width;\r\n    };\r\n    constexpr test_case test_cases[] = {\r\n        {\"\\x58\", 1},\r\n        {\"x\\x58\", 2},\r\n\r\n        // Pick \"short\" and \"long\" codepoints (\\x20 and \\x96\\x7b), then form all permutations of\r\n        // 3-codepoint prefixes with the same fixed delimiter as above. This gives us coverage of\r\n        // all adjacent pairings (short/short, short/long, long/short, long/long).\r\n        {\"\\x20\\x20\\x20\\x58\", 4},\r\n        {\"\\x20\\x20\\x96\\x7b\\x58\", 5},\r\n        {\"\\x20\\x96\\x7b\\x20\\x58\", 5},\r\n        {\"\\x96\\x7b\\x20\\x20\\x58\", 5},\r\n        {\"\\x20\\x96\\x7b\\x96\\x7b\\x58\", 6},\r\n        {\"\\x96\\x7b\\x20\\x96\\x7b\\x58\", 6},\r\n        {\"\\x96\\x7b\\x96\\x7b\\x20\\x58\", 6},\r\n        {\"\\x96\\x7b\\x96\\x7b\\x96\\x7b\\x58\", 7},\r\n    };\r\n\r\n    for (const auto& test : test_cases) {\r\n        string_view sv{test.str};\r\n        sv = sv.substr(0, sv.size() - 1);\r\n        assert(format(\"{:.{}}\", test.str, test.width - 1) == sv);\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_multibyte_format_strings();\r\n    test_parse_align();\r\n    test_width_estimation();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_parse_contexts/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_parse_contexts/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <format>\r\n#include <memory>\r\n#include <string_view>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class CharType>\r\nconstexpr auto get_input() {\r\n    if constexpr (same_as<CharType, char>) {\r\n        return \"First {} and second {} and third {}\"sv;\r\n    } else {\r\n        return L\"First {} and second {} and third {}\"sv;\r\n    }\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr bool ensure_is_constant_expression(const bool should_be_constant_expression) {\r\n    basic_format_parse_context<CharType> context{get_input<CharType>(), 1};\r\n    if (should_be_constant_expression) {\r\n        context.check_arg_id(0);\r\n    } else {\r\n        context.check_arg_id(1);\r\n    }\r\n\r\n    return is_constant_evaluated();\r\n}\r\n\r\nconst bool check_arg_id_is_constexpr_char   = ensure_is_constant_expression<char>(true);\r\nconst bool check_arg_id_not_constexpr_char  = !ensure_is_constant_expression<char>(false);\r\nconst bool check_arg_id_is_constexpr_wchar  = ensure_is_constant_expression<wchar_t>(true);\r\nconst bool check_arg_id_not_constexpr_wchar = !ensure_is_constant_expression<wchar_t>(false);\r\n\r\ntemplate <class CharType>\r\nconstexpr bool test_basic_format_parse_context() {\r\n    static_assert(!is_copy_constructible_v<basic_format_parse_context<CharType>>);\r\n    static_assert(!is_copy_assignable_v<basic_format_parse_context<CharType>>);\r\n\r\n    const auto format_string = get_input<CharType>();\r\n    { // iterator interface\r\n        basic_format_parse_context<CharType> context{format_string};\r\n        const same_as<typename basic_string_view<CharType>::const_iterator> auto b = context.begin();\r\n        assert(b == format_string.begin());\r\n        static_assert(noexcept(context.begin()));\r\n\r\n        const same_as<typename basic_string_view<CharType>::const_iterator> auto e = context.end();\r\n        assert(e == format_string.end());\r\n        static_assert(noexcept(context.end()));\r\n\r\n        const auto new_position = format_string.begin() + 5;\r\n        context.advance_to(new_position);\r\n        assert(to_address(context.begin()) == to_address(new_position));\r\n        assert(to_address(context.end()) == to_address(e));\r\n    }\r\n\r\n    { // arg_id\r\n        basic_format_parse_context<CharType> context{format_string, 10};\r\n        const same_as<size_t> auto first_arg_id = context.next_arg_id();\r\n        assert(first_arg_id == 0);\r\n\r\n        const same_as<size_t> auto second_arg_id = context.next_arg_id();\r\n        assert(second_arg_id == 1);\r\n\r\n        if (!is_constant_evaluated()) {\r\n            try {\r\n                context.check_arg_id(0);\r\n            } catch (const format_error& e) {\r\n                assert(e.what() == \"Can not switch from automatic to manual indexing\"sv);\r\n            }\r\n        }\r\n    }\r\n\r\n    { // check_arg_id\r\n        basic_format_parse_context<CharType> context{format_string, 3};\r\n        context.check_arg_id(0);\r\n        context.check_arg_id(1);\r\n        context.check_arg_id(2); // intentional duplicates to check whether this is ok to call multiple times\r\n        context.check_arg_id(1);\r\n        context.check_arg_id(0);\r\n\r\n        if (!is_constant_evaluated()) {\r\n            try {\r\n                (void) context.next_arg_id();\r\n            } catch (const format_error& e) {\r\n                assert(e.what() == \"Can not switch from manual to automatic indexing\"sv);\r\n            }\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test_basic_format_parse_context<char>();\r\n    test_basic_format_parse_context<wchar_t>();\r\n    static_assert(test_basic_format_parse_context<char>());\r\n    static_assert(test_basic_format_parse_context<wchar_t>());\r\n\r\n    assert(check_arg_id_is_constexpr_char);\r\n    assert(check_arg_id_not_constexpr_char);\r\n    assert(check_arg_id_is_constexpr_wchar);\r\n    assert(check_arg_id_not_constexpr_wchar);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_parsing/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_parsing/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstdio>\r\n#include <exception>\r\n#include <format>\r\n#include <optional>\r\n#include <string_view>\r\n#include <type_traits>\r\n\r\n#include <test_format_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename CharT>\r\nbool test_parse_align() {\r\n    auto parse_align_fn = _Parse_align<CharT, testing_callbacks<CharT>>;\r\n    using view_typ      = basic_string_view<CharT>;\r\n\r\n    view_typ s1(TYPED_LITERAL(CharT, \"*<\"));\r\n    view_typ s2(TYPED_LITERAL(CharT, \"*>\"));\r\n    view_typ s3(TYPED_LITERAL(CharT, \"*^\"));\r\n\r\n    test_parse_helper(parse_align_fn, s1, false, view_typ::npos,\r\n        {.expected_alignment = _Fmt_align::_Left, .expected_fill = view_typ(TYPED_LITERAL(CharT, \"*\"))});\r\n    test_parse_helper(parse_align_fn, s2, false, view_typ::npos,\r\n        {.expected_alignment = _Fmt_align::_Right, .expected_fill = view_typ(TYPED_LITERAL(CharT, \"*\"))});\r\n    test_parse_helper(parse_align_fn, s3, false, view_typ::npos,\r\n        {.expected_alignment = _Fmt_align::_Center, .expected_fill = view_typ(TYPED_LITERAL(CharT, \"*\"))});\r\n\r\n    if constexpr (same_as<CharT, wchar_t>) {\r\n        // This is a CJK character where the least significant byte is the same as ASCII '>',\r\n        // libfmt and initial drafts of <format> narrowed characters when parsing alignments, causing\r\n        // \\x343E (which is from CJK unified ideographs extension A) and similar characters to parse as\r\n        // an alignment specifier.\r\n        auto s4 = L\"*\\x343E\"sv;\r\n        test_parse_helper(parse_align_fn, s4, false, 0, {.expected_fill = L\"*\"sv});\r\n\r\n        // test multi-code-unit fill characters\r\n        {\r\n            test_parse_helper(parse_align_fn, L\"\\U0001F3C8<X\"sv, false, 3,\r\n                {.expected_alignment = _Fmt_align::_Left, .expected_fill = L\"\\U0001F3C8\"sv});\r\n            test_parse_helper(parse_align_fn, L\"\\U0001F3C8>X\"sv, false, 3,\r\n                {.expected_alignment = _Fmt_align::_Right, .expected_fill = L\"\\U0001F3C8\"sv});\r\n            test_parse_helper(parse_align_fn, L\"\\U0001F3C8^X\"sv, false, 3,\r\n                {.expected_alignment = _Fmt_align::_Center, .expected_fill = L\"\\U0001F3C8\"sv});\r\n        }\r\n\r\n        // test invalid fill characters\r\n        {\r\n            test_parse_helper(parse_align_fn, L\"\\xD800<X\"sv, true);\r\n            test_parse_helper(parse_align_fn, L\"\\xDC00<X\"sv, true);\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <typename CharT>\r\nbool test_parse_width() {\r\n    auto parse_width_fn = _Parse_width<CharT, testing_callbacks<CharT>>;\r\n    using view_typ      = basic_string_view<CharT>;\r\n\r\n    view_typ s0(TYPED_LITERAL(CharT, \"1\"));\r\n    view_typ s1(TYPED_LITERAL(CharT, \"{1}\"));\r\n    view_typ s2(TYPED_LITERAL(CharT, \"{0}\"));\r\n    view_typ s3(TYPED_LITERAL(CharT, \"{}\"));\r\n    view_typ i0(TYPED_LITERAL(CharT, \"0\"));\r\n    view_typ i1(TYPED_LITERAL(CharT, \"01\"));\r\n\r\n    test_parse_helper(parse_width_fn, s0, false, view_typ::npos, {.expected_width = 1});\r\n    test_parse_helper(parse_width_fn, s1, false, view_typ::npos, {.expected_dynamic_width = 1});\r\n    test_parse_helper(parse_width_fn, s2, false, view_typ::npos, {.expected_dynamic_width = 0});\r\n    test_parse_helper(parse_width_fn, s3, false, view_typ::npos, {.expected_auto_dynamic_width = true});\r\n    test_parse_helper(parse_width_fn, i0, false, false);\r\n    test_parse_helper(parse_width_fn, i1, false, false);\r\n    return true;\r\n}\r\n\r\ntemplate <typename CharT>\r\nbool test_parse_arg_id() {\r\n    auto parse_arg_id_fn = _Parse_arg_id<CharT, testing_arg_id_callbacks>;\r\n    using view_typ       = basic_string_view<CharT>;\r\n    // note that parse arg id starts with the arg id itself, not the { beginning of the\r\n    // format spec\r\n    view_typ s0(TYPED_LITERAL(CharT, \"}\"));\r\n    view_typ s1(TYPED_LITERAL(CharT, \":\"));\r\n    view_typ s2(TYPED_LITERAL(CharT, \":}\"));\r\n    view_typ s3(TYPED_LITERAL(CharT, \"0:}\"));\r\n    view_typ s4(TYPED_LITERAL(CharT, \"0:\"));\r\n    view_typ s5(TYPED_LITERAL(CharT, \"1}\"));\r\n    view_typ i0(TYPED_LITERAL(CharT, \"01}\"));\r\n    view_typ i1(TYPED_LITERAL(CharT, \"0\"));\r\n\r\n    test_parse_helper(parse_arg_id_fn, s0, false, 0);\r\n    test_parse_helper(parse_arg_id_fn, s1, false, 0);\r\n    test_parse_helper(parse_arg_id_fn, s2, false, 0);\r\n    test_parse_helper(parse_arg_id_fn, s3, false, 1);\r\n    test_parse_helper(parse_arg_id_fn, s4, false, 1);\r\n    test_parse_helper(parse_arg_id_fn, s5, false, 1);\r\n\r\n    // can't test the expected exceptions in a constexpr\r\n    // context\r\n    if (!is_constant_evaluated()) {\r\n        test_parse_helper(parse_arg_id_fn, i0, true);\r\n        test_parse_helper(parse_arg_id_fn, i1, true);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <typename CharT>\r\nbool test_parse_precision() {\r\n    auto parse_pre_fn = _Parse_precision<CharT, testing_callbacks<CharT>>;\r\n    using view_typ    = basic_string_view<CharT>;\r\n\r\n    view_typ s0(TYPED_LITERAL(CharT, \".0\"));\r\n    view_typ s1(TYPED_LITERAL(CharT, \".1\"));\r\n    view_typ s2(TYPED_LITERAL(CharT, \".12\"));\r\n    view_typ s3(TYPED_LITERAL(CharT, \".{1}\"));\r\n    view_typ s4(TYPED_LITERAL(CharT, \".{}\"));\r\n\r\n    view_typ i0(TYPED_LITERAL(CharT, \".{ }\"));\r\n    view_typ i1(TYPED_LITERAL(CharT, \".\"));\r\n    view_typ i2(TYPED_LITERAL(CharT, \".{    |\"));\r\n    view_typ i3(TYPED_LITERAL(CharT, \".{\"));\r\n\r\n    test_parse_helper(parse_pre_fn, s0, false, view_typ::npos, {.expected_precision = 0});\r\n    test_parse_helper(parse_pre_fn, s1, false, view_typ::npos, {.expected_precision = 1});\r\n    test_parse_helper(parse_pre_fn, s2, false, view_typ::npos, {.expected_precision = 12});\r\n    test_parse_helper(parse_pre_fn, s3, false, view_typ::npos, {.expected_dynamic_precision = 1});\r\n    test_parse_helper(parse_pre_fn, s4, false, view_typ::npos, {.expected_auto_dynamic_precision = true});\r\n\r\n    if (!is_constant_evaluated()) {\r\n        test_parse_helper(parse_pre_fn, i0, true);\r\n        test_parse_helper(parse_pre_fn, i1, true);\r\n        test_parse_helper(parse_pre_fn, i2, true);\r\n        test_parse_helper(parse_pre_fn, i3, true);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <typename CharT>\r\nbool test_parse_format_specs() {\r\n    auto parse_format_specs_fn = _Parse_format_specs<CharT, testing_callbacks<CharT>>;\r\n    using view_typ             = basic_string_view<CharT>;\r\n\r\n    view_typ s0(TYPED_LITERAL(CharT, \"6}\"));\r\n    view_typ s1(TYPED_LITERAL(CharT, \"*<6\"));\r\n    view_typ s2(TYPED_LITERAL(CharT, \"*>6}\"));\r\n    view_typ s3(TYPED_LITERAL(CharT, \"*^6}\"));\r\n    view_typ s4(TYPED_LITERAL(CharT, \"6d}\"));\r\n    view_typ s5(TYPED_LITERAL(CharT, \"*^+4.4a}\"));\r\n    view_typ s6(TYPED_LITERAL(CharT, \"*^+#04.4La}\"));\r\n    test_parse_helper(parse_format_specs_fn, s0, false, s0.size() - 1, {.expected_width = 6});\r\n    test_parse_helper(parse_format_specs_fn, s1, false, s1.size(),\r\n        {.expected_alignment = _Fmt_align::_Left,\r\n            .expected_fill   = view_typ(TYPED_LITERAL(CharT, \"*\")),\r\n            .expected_width  = 6});\r\n    test_parse_helper(parse_format_specs_fn, s2, false, s2.size() - 1,\r\n        {.expected_alignment = _Fmt_align::_Right,\r\n            .expected_fill   = view_typ(TYPED_LITERAL(CharT, \"*\")),\r\n            .expected_width  = 6});\r\n    test_parse_helper(parse_format_specs_fn, s3, false, s3.size() - 1,\r\n        {.expected_alignment = _Fmt_align::_Center,\r\n            .expected_fill   = view_typ(TYPED_LITERAL(CharT, \"*\")),\r\n            .expected_width  = 6});\r\n    test_parse_helper(parse_format_specs_fn, s4, false, s4.size() - 1, {.expected_width = 6, .expected_type = 'd'});\r\n    test_parse_helper(parse_format_specs_fn, s5, false, s5.size() - 1,\r\n        {.expected_alignment    = _Fmt_align::_Center,\r\n            .expected_sign      = _Fmt_sign::_Plus,\r\n            .expected_fill      = view_typ(TYPED_LITERAL(CharT, \"*\")),\r\n            .expected_width     = 4,\r\n            .expected_precision = 4,\r\n            .expected_type      = 'a'});\r\n    test_parse_helper(parse_format_specs_fn, s6, false, s6.size() - 1,\r\n        {.expected_alignment    = _Fmt_align::_Center,\r\n            .expected_sign      = _Fmt_sign::_Plus,\r\n            .expected_fill      = view_typ(TYPED_LITERAL(CharT, \"*\")),\r\n            .expected_width     = 4,\r\n            .expected_precision = 4,\r\n            .expected_hash      = true,\r\n            .expected_zero      = true,\r\n            .expected_localized = true,\r\n            .expected_type      = 'a'});\r\n    return true;\r\n}\r\n\r\ntemplate <class CharT>\r\nconstexpr bool test_specs_setter() {\r\n    // just instantiate for now.\r\n    _Basic_format_specs<CharT> specs = {};\r\n    _Specs_setter<CharT> setter(specs);\r\n\r\n    (void) setter;\r\n    return true;\r\n}\r\n\r\ntemplate <class CharT>\r\nconstexpr bool test_specs_checker() {\r\n    _Specs_checker<noop_testing_callbacks<CharT>> checker(\r\n        noop_testing_callbacks<CharT>{}, _Basic_format_arg_type::_Float_type);\r\n    (void) checker;\r\n    return true;\r\n}\r\n\r\nvoid test() {\r\n    test_parse_align<char>();\r\n    test_parse_align<wchar_t>();\r\n\r\n    test_parse_arg_id<char>();\r\n    test_parse_arg_id<wchar_t>();\r\n\r\n    test_parse_width<char>();\r\n    test_parse_width<wchar_t>();\r\n\r\n    test_parse_precision<char>();\r\n    test_parse_precision<wchar_t>();\r\n\r\n    test_parse_format_specs<char>();\r\n    test_parse_format_specs<wchar_t>();\r\n\r\n    test_specs_setter<char>();\r\n    test_specs_setter<wchar_t>();\r\n    static_assert(test_specs_setter<char>());\r\n    static_assert(test_specs_setter<wchar_t>());\r\n\r\n    test_specs_checker<char>();\r\n    test_specs_checker<wchar_t>();\r\n    static_assert(test_specs_checker<char>());\r\n    static_assert(test_specs_checker<wchar_t>());\r\n}\r\n\r\nint main() {\r\n    try {\r\n        test();\r\n    } catch (const format_error& e) {\r\n        printf(\"format_error: %s\\n\", e.what());\r\n        assert(false);\r\n    } catch (const exception& e) {\r\n        printf(\"exception: %s\\n\", e.what());\r\n        assert(false);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_utf8/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/utf-8\"\r\n"
  },
  {
    "path": "tests/std/tests/P0645R10_text_formatting_utf8/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <clocale>\r\n#include <format>\r\n#include <string_view>\r\n\r\n#include <test_format_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nvoid test_multibyte_format_strings() {\r\n    {\r\n        // Filling with footballs (\"\\U0001f3c8\" is U+1F3C8 AMERICAN FOOTBALL)\r\n        assert(format(\"{:\\U0001f3c8>4}\"sv, 42) == \"\\U0001f3c8\\U0001f3c8\\x34\\x32\");\r\n\r\n        assert(format(\"{:\\U0001f3c8<4.2}\", \"1\") == \"\\x31\\U0001f3c8\\U0001f3c8\\U0001f3c8\"sv);\r\n        assert(format(\"{:\\U0001f3c8^4.2}\", \"1\") == \"\\U0001f3c8\\x31\\U0001f3c8\\U0001f3c8\"sv);\r\n        assert(format(\"{:\\U0001f3c8>4.2}\", \"1\") == \"\\U0001f3c8\\U0001f3c8\\U0001f3c8\\x31\"sv);\r\n    }\r\n\r\n    {\r\n        try {\r\n            // Bad fill character encoding: missing lead byte before \\x9f\r\n            int arg = 42;\r\n            (void) vformat(\"{:\\x9f\\x8f\\x88<10}\"sv, make_format_args(arg));\r\n            assert(false);\r\n        } catch (const format_error&) {\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_parse_align() {\r\n    auto parse_align_fn = _Parse_align<char, testing_callbacks<char>>;\r\n\r\n    {\r\n        test_parse_helper(parse_align_fn, \"\\U0001f3c8<X\"sv, false, 5,\r\n            {.expected_alignment = _Fmt_align::_Left, .expected_fill = \"\\U0001f3c8\"sv});\r\n        test_parse_helper(parse_align_fn, \"\\U0001f3c8>X\"sv, false, 5,\r\n            {.expected_alignment = _Fmt_align::_Right, .expected_fill = \"\\U0001f3c8\"sv});\r\n        test_parse_helper(parse_align_fn, \"\\U0001f3c8^X\"sv, false, 5,\r\n            {.expected_alignment = _Fmt_align::_Center, .expected_fill = \"\\U0001f3c8\"sv});\r\n    }\r\n\r\n    {\r\n        test_parse_helper(parse_align_fn, \"\\xC0\\x80<X\"sv, true);\r\n        test_parse_helper(parse_align_fn, \"\\xF5\\x80\\x80\\x80<X\"sv, true);\r\n        test_parse_helper(parse_align_fn, \"\\xE0\\x80\\x80<X\"sv, true);\r\n        test_parse_helper(parse_align_fn, \"\\xED\\xA0\\x80<X\"sv, true);\r\n        test_parse_helper(parse_align_fn, \"\\xF0\\x80\\x80\\x80<X\"sv, true);\r\n        test_parse_helper(parse_align_fn, \"\\xF4\\x90\\x80\\x80<X\"sv, true);\r\n        test_parse_helper(parse_align_fn, \"\\xE1\\x80<X\"sv, true);\r\n        test_parse_helper(parse_align_fn, \"\\xE1\\x7F\\x80<X\"sv, true);\r\n        test_parse_helper(parse_align_fn, \"\\xE1\\xC0\\x80<X\"sv, true);\r\n        test_parse_helper(parse_align_fn, \"\\xE1\\x80\\x7F<X\"sv, true);\r\n        test_parse_helper(parse_align_fn, \"\\xE1\\x80\\xC0<X\"sv, true);\r\n    }\r\n}\r\n\r\ntemplate <class CharT>\r\nvoid test_width_estimation() {\r\n    // Format strings of known width with a trailing delimiter using a precision large enough to\r\n    // include all but the delimiter to validate the width estimation code.\r\n    struct test_case {\r\n        const CharT* str;\r\n        int width;\r\n    };\r\n    constexpr test_case test_cases[] = {\r\n        {TYPED_LITERAL(CharT, \"\\x58\"), 1},\r\n        {TYPED_LITERAL(CharT, \"x\\x58\"), 2},\r\n\r\n        // Test N4950 [format.string.std]/13\r\n        {TYPED_LITERAL(CharT, \"\\u10ff\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\u1100\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u115f\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u1160\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\u2328\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\u2329\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u232a\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u232b\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\u2e7f\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\u2e80\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u303e\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u303f\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\ua4d0\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\uabff\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\uac00\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\ud7a3\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\ud7a4\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\ud7ff\\x58\"), 2},\r\n\r\n        // Skip over the surrogate pair range (\\ud800-\\udfff)\r\n\r\n        {TYPED_LITERAL(CharT, \"\\ue000\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\uf8ff\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\uf900\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\ufaff\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\ufb00\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\ufe0f\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\ufe10\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\ufe19\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\ufe1a\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\ufe2f\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\ufe30\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\ufe70\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\ufeff\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\uff60\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\uff61\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\uffdf\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\uffe0\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\uffe6\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\uffe7\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\U0001f2ff\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\U0001f300\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\U0001f64f\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\U0001f650\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\U0001f8ff\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\U0001f900\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\U0001f9ff\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\U0001fa00\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\U0001ffff\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\U00020000\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\U0002fffd\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\U0002fffe\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\U0002ffff\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\U00030000\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\U0003fffd\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\U0003fffe\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\U0010ffff\\x58\"), 2},\r\n\r\n        // Pick \"short\" and \"long\" codepoints (\\u2000 and \\ufe40), then form all permutations of\r\n        // 3-codepoint prefixes with the same fixed delimiter as above. This gives us coverage of\r\n        // all adjacent pairings (short/short, short/long, long/short, long/long).\r\n        {TYPED_LITERAL(CharT, \"\\u2000\\u2000\\u2000\\x58\"), 4},\r\n        {TYPED_LITERAL(CharT, \"\\u2000\\u2000\\ufe40\\x58\"), 5},\r\n        {TYPED_LITERAL(CharT, \"\\u2000\\ufe40\\u2000\\x58\"), 5},\r\n        {TYPED_LITERAL(CharT, \"\\ufe40\\u2000\\u2000\\x58\"), 5},\r\n        {TYPED_LITERAL(CharT, \"\\u2000\\ufe40\\ufe40\\x58\"), 6},\r\n        {TYPED_LITERAL(CharT, \"\\ufe40\\u2000\\ufe40\\x58\"), 6},\r\n        {TYPED_LITERAL(CharT, \"\\ufe40\\ufe40\\u2000\\x58\"), 6},\r\n        {TYPED_LITERAL(CharT, \"\\ufe40\\ufe40\\ufe40\\x58\"), 7},\r\n\r\n        {TYPED_LITERAL(CharT, \"\\u0061\\u200D\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\u0061\\U0001F1E6\\U0001F1E7\\u200D\\U0001F1E8\\u0062\\x58\"), 5},\r\n\r\n        // Test some codepoints affected by P2675R1\r\n        // Used to be 2, now 1:\r\n        {TYPED_LITERAL(CharT, \"\\u2e9a\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\u2ef4\\u2eff\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u2fd6\\u2fef\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u3040\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\u3097\\u3098\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u3100\\u3104\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u3130\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\u318f\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\u321f\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\u3248\\u324f\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\ua48d\\ua48f\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\ua4c7\\ua4cf\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\ufe53\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\ufe67\\x58\"), 2},\r\n        {TYPED_LITERAL(CharT, \"\\ufe6c\\ufe6f\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\uff00\\x58\"), 2},\r\n        // Used to be 1, now 2:\r\n        {TYPED_LITERAL(CharT, \"\\u23f0\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u23f3\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u267f\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u2693\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u26a1\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u26ce\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u26d4\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u26ea\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u26f5\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u26fa\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u26fd\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u2705\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u2728\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u274c\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u274e\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u2757\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u27b0\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u27bf\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u2b50\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u2b55\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\U0001b132\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\U0001b155\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\U0001f004\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\U0001f0cf\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\U0001f18e\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\U0001f6cc\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\U0001f7f0\\x58\"), 3},\r\n        {TYPED_LITERAL(CharT, \"\\u2ffc\\u2fff\\x58\"), 5},\r\n        {TYPED_LITERAL(CharT, \"\\u31e4\\u31ef\\x58\"), 5},\r\n    };\r\n\r\n    for (const auto& test : test_cases) {\r\n        basic_string_view sv{test.str};\r\n        sv = sv.substr(0, sv.size() - 1);\r\n        assert(format(TYPED_LITERAL(CharT, \"{:.{}}\"), test.str, test.width - 1) == sv);\r\n    }\r\n}\r\n\r\nvoid run_tests() {\r\n    test_multibyte_format_strings();\r\n    test_parse_align();\r\n    test_width_estimation<char>();\r\n    test_width_estimation<wchar_t>();\r\n}\r\n\r\nint main() {\r\n    run_tests();\r\n\r\n    assert(setlocale(LC_ALL, \".1252\") != nullptr);\r\n    run_tests();\r\n\r\n    assert(setlocale(LC_ALL, \".932\") != nullptr);\r\n    run_tests();\r\n\r\n    assert(setlocale(LC_ALL, \".UTF-8\") != nullptr);\r\n    run_tests();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0660R10_jthread_and_cv_any/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0660R10_jthread_and_cv_any/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <condition_variable>\r\n#include <cstdio>\r\n#include <mutex>\r\n#include <thread>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wself-move\"\r\n#endif // __clang__\r\n\r\nusing namespace std;\r\n\r\nSTATIC_ASSERT(is_same_v<thread::id, jthread::id>);\r\nSTATIC_ASSERT(is_same_v<thread::native_handle_type, jthread::native_handle_type>);\r\n\r\nint main() {\r\n    // dtor tested in lots of places here so no explicit tests for it\r\n\r\n    { // default ctor\r\n        jthread default_constructed;\r\n        assert(default_constructed.get_id() == thread::id{});\r\n        assert(!default_constructed.get_stop_source().stop_possible());\r\n    }\r\n\r\n    { // initializing ctor, traditional functor\r\n        jthread worker{[] {}};\r\n        assert(worker.get_id() != thread::id{});\r\n        assert(worker.joinable());\r\n        assert(worker.get_stop_source().stop_possible());\r\n    }\r\n\r\n    { // also make sure that we don't delegate to std::thread's constructor which would try to move assign over the\r\n      // std::thread inside jthread rather than passing it to the functor\r\n        jthread worker{[](thread t) { t.join(); }, thread{[] {}}};\r\n        assert(worker.get_id() != thread::id{});\r\n        assert(worker.joinable());\r\n        assert(worker.get_stop_source().stop_possible());\r\n    }\r\n\r\n    { // initializing ctor, token functor\r\n        bool called = false;\r\n        struct overload_detector {\r\n            bool* p_called;\r\n            void operator()(stop_token, int i) const {\r\n                assert(i == 1729);\r\n                *p_called = true;\r\n            }\r\n            void operator()(int) const {\r\n                assert(false);\r\n            }\r\n        };\r\n\r\n        {\r\n            jthread worker{overload_detector{&called}, 1729};\r\n            (void) worker;\r\n        }\r\n\r\n        assert(called);\r\n    }\r\n\r\n    { // move ctor\r\n        jthread worker{[] {}};\r\n        auto worker_source = worker.get_stop_source();\r\n        {\r\n            jthread moved{move(worker)};\r\n            assert(moved.get_stop_source() == worker_source);\r\n            assert(moved.joinable());\r\n            assert(worker.get_stop_source() != worker_source);\r\n            assert(!worker.joinable());\r\n        }\r\n    }\r\n\r\n    { // move assign\r\n        jthread worker_a{[] {}};\r\n        auto source_a = worker_a.get_stop_source();\r\n        jthread worker_b{[] {}};\r\n        auto id_b     = worker_b.get_id();\r\n        auto source_b = worker_b.get_stop_source();\r\n        worker_a      = move(worker_b);\r\n        assert(source_a.stop_requested());\r\n        assert(id_b == worker_a.get_id());\r\n        assert(!source_b.stop_requested());\r\n        assert(worker_a.get_stop_source() == source_b);\r\n        assert(!worker_b.joinable());\r\n    }\r\n\r\n    { // self move assign, defined to have no effects\r\n        jthread worker{[] {}};\r\n        auto old_id = worker.get_id();\r\n        assert(old_id != jthread::id{});\r\n        auto source = worker.get_stop_source();\r\n        worker      = move(worker);\r\n        assert(worker.joinable());\r\n        assert(!source.stop_requested());\r\n        assert(old_id == worker.get_id());\r\n    }\r\n\r\n    { // swaps\r\n        jthread worker_a{[] {}};\r\n        auto id_a     = worker_a.get_id();\r\n        auto source_a = worker_a.get_stop_source();\r\n        auto token_a  = worker_a.get_stop_token();\r\n        jthread worker_b{[] {}};\r\n        auto id_b     = worker_b.get_id();\r\n        auto source_b = worker_b.get_stop_source();\r\n        auto token_b  = worker_b.get_stop_token();\r\n\r\n        assert(id_a != id_b);\r\n        assert(source_a != source_b);\r\n        assert(token_a != token_b);\r\n\r\n        worker_a.swap(worker_b);\r\n        assert(worker_a.get_id() == id_b);\r\n        assert(worker_a.get_stop_source() == source_b);\r\n        assert(worker_b.get_id() == id_a);\r\n        assert(worker_b.get_stop_source() == source_a);\r\n        swap(worker_a, worker_b);\r\n        assert(worker_a.get_id() == id_a);\r\n        assert(worker_a.get_stop_source() == source_a);\r\n        assert(worker_b.get_id() == id_b);\r\n        assert(worker_b.get_stop_source() == source_b);\r\n    }\r\n\r\n    { // join\r\n        jthread worker{[] {}};\r\n        auto source = worker.get_stop_source();\r\n        worker.join();\r\n        assert(!worker.joinable());\r\n        assert(worker.get_stop_source() == source);\r\n        assert(!source.stop_requested());\r\n        assert(source.stop_possible());\r\n    }\r\n\r\n    // TRANSITION, ArchivedOS-12440914 \"_Exit allows cleanup in other DLLs\"\r\n    // detach() is intentionally not tested\r\n\r\n    // get_id, get_stop_source, get_stop_token tested above\r\n\r\n    assert(jthread::hardware_concurrency() == thread::hardware_concurrency());\r\n\r\n    { // first wait_until overload; without the cancellation this would deadlock\r\n        mutex m;\r\n        condition_variable_any cv;\r\n        jthread worker([&](stop_token token) {\r\n            unique_lock lck{m};\r\n            assert(cv.wait(lck, move(token), [] { return false; }) == false);\r\n        });\r\n    }\r\n\r\n    constexpr auto forever  = chrono::steady_clock::duration::max();\r\n    constexpr auto infinity = chrono::steady_clock::time_point::max();\r\n\r\n    { // ditto without the cancellation this would deadlock\r\n        mutex m;\r\n        condition_variable_any cv;\r\n        jthread worker([&](stop_token token) {\r\n            unique_lock lck{m};\r\n            assert(cv.wait_until(lck, move(token), infinity, [] { return false; }) == false);\r\n        });\r\n    }\r\n\r\n    { // ditto without the cancellation this would deadlock\r\n        mutex m;\r\n        condition_variable_any cv;\r\n        jthread worker([&](stop_token token) {\r\n            unique_lock lck{m};\r\n            assert(cv.wait_for(lck, move(token), forever, [] { return false; }) == false);\r\n        });\r\n    }\r\n\r\n    // smoke test true-returning versions of the above\r\n    {\r\n        mutex m;\r\n        condition_variable_any cv;\r\n        bool b = false;\r\n        jthread worker([&](stop_token token) {\r\n            unique_lock lck{m};\r\n            assert(cv.wait(lck, move(token), [] { return true; }) == true);\r\n            assert(cv.wait(lck, move(token), [&] { return b; }) == true); // Intentionally uses moved-from token\r\n        });\r\n\r\n        {\r\n            lock_guard lck{m};\r\n            b = true;\r\n        }\r\n\r\n        cv.notify_all();\r\n    }\r\n\r\n    {\r\n        mutex m;\r\n        condition_variable_any cv;\r\n        bool b = false;\r\n        jthread worker([&](stop_token token) {\r\n            unique_lock lck{m};\r\n            assert(cv.wait_until(lck, move(token), infinity, [] { return true; }) == true);\r\n            assert(cv.wait_until(lck, move(token), infinity, [&] { return b; })\r\n                   == true); // Intentionally uses moved-from token\r\n        });\r\n\r\n        {\r\n            lock_guard lck{m};\r\n            b = true;\r\n        }\r\n\r\n        cv.notify_all();\r\n    }\r\n\r\n    {\r\n        mutex m;\r\n        condition_variable_any cv;\r\n        bool b = false;\r\n        jthread worker([&](stop_token token) {\r\n            unique_lock lck{m};\r\n            assert(cv.wait_for(lck, move(token), forever, [] { return true; }) == true);\r\n            assert(cv.wait_for(lck, move(token), forever, [&] { return b; })\r\n                   == true); // Intentionally uses moved-from token\r\n        });\r\n\r\n        {\r\n            lock_guard lck{m};\r\n            b = true;\r\n        }\r\n\r\n        cv.notify_all();\r\n    }\r\n\r\n    // smoke test a timeout case:\r\n    {\r\n        jthread worker([] {\r\n            stop_source never_stopped;\r\n            mutex m;\r\n            condition_variable_any cv;\r\n            unique_lock lck{m};\r\n            auto started_at = chrono::steady_clock::now();\r\n            assert(cv.wait_for(lck, never_stopped.get_token(), 100ms, [] { return false; }) == false);\r\n            // not a timing assumption: the wait_for must wait at least that long\r\n            assert(started_at + 100ms <= chrono::steady_clock::now());\r\n        });\r\n    }\r\n\r\n    puts(\"pass\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0660R10_stop_token/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0660R10_stop_token/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <atomic>\r\n#include <cassert>\r\n#include <chrono>\r\n#include <cstdio>\r\n#include <optional>\r\n#include <stop_token>\r\n#include <thread>\r\n#include <utility>\r\n\r\n#include <new_counter.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std_testing;\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wself-move\"\r\n#endif // __clang__\r\n\r\nstruct throwing_construction_functor {\r\n    throwing_construction_functor(int x) {\r\n        throw x;\r\n    }\r\n\r\n    void operator()() const {\r\n        assert(false);\r\n    }\r\n};\r\n\r\nstruct call_counting_functor {\r\n    atomic<int>* state;\r\n\r\n    call_counting_functor(atomic<int>* state_) : state(state_) {}\r\n\r\n    call_counting_functor(const call_counting_functor&)            = delete;\r\n    call_counting_functor& operator=(const call_counting_functor&) = delete;\r\n\r\n    void operator()() && {\r\n        ++*state;\r\n    }\r\n};\r\n\r\nstruct cb_destroying_functor {\r\n    optional<stop_callback<cb_destroying_functor>>& owner;\r\n    cb_destroying_functor(optional<stop_callback<cb_destroying_functor>>& owner_) : owner(owner_) {}\r\n\r\n    cb_destroying_functor(const cb_destroying_functor&)            = delete;\r\n    cb_destroying_functor& operator=(const cb_destroying_functor&) = delete;\r\n\r\n    void operator()() && {\r\n        owner.reset();\r\n    }\r\n};\r\n\r\nint main() noexcept {\r\n    reset_new_counters(0);\r\n    { // all the following must not allocate, and must work with a nostopstate source; in rough synopsis order\r\n        stop_token token;\r\n        stop_token token_copy{token};\r\n        stop_token token_moved{move(token)};\r\n        token_copy  = token;\r\n        token_moved = move(token);\r\n        token.swap(token_copy);\r\n        assert(!token.stop_requested());\r\n        assert(!token.stop_possible());\r\n        assert(token == token_copy);\r\n        swap(token, token_copy);\r\n\r\n        stop_source source{nostopstate};\r\n        stop_source copied_source{source};\r\n        stop_source moved_source{move(source)};\r\n        copied_source = source;\r\n        moved_source  = move(source);\r\n        copied_source.swap(source);\r\n\r\n        assert(!source.get_token().stop_possible());\r\n        assert(!source.get_token().stop_requested());\r\n        assert(!source.stop_possible());\r\n        assert(!source.stop_requested());\r\n        assert(!source.request_stop());\r\n\r\n        assert(source == copied_source);\r\n        assert(source == moved_source);\r\n\r\n        swap(source, copied_source);\r\n\r\n        stop_callback cb{token, [] { assert(false); }};\r\n        stop_callback cb_moved{move(token), [] { assert(false); }};\r\n    }\r\n\r\n    // normal reference counted things state management; in rough synopsis order\r\n    reset_new_counters(2);\r\n    { // stop_source\r\n        stop_source empty{nostopstate};\r\n\r\n        // default ctor\r\n        stop_source source_a;\r\n        assert(source_a.stop_possible());\r\n        assert(!source_a.stop_requested());\r\n        stop_source source_b;\r\n        assert(source_b.stop_possible());\r\n        assert(!source_b.stop_requested());\r\n        assert(source_a != empty);\r\n        assert(source_a != source_b);\r\n\r\n        // copy ctor\r\n        stop_source copied_source{source_a};\r\n        assert(copied_source == source_a);\r\n        source_a.swap(source_b);\r\n        assert(copied_source == source_b);\r\n        swap(source_a, source_b);\r\n        assert(copied_source == source_a);\r\n\r\n        // move ctor\r\n        stop_source moved_source{move(source_a)};\r\n        assert(!source_a.stop_possible());\r\n        assert(empty == source_a);\r\n        assert(moved_source != source_a);\r\n        moved_source = move(moved_source);\r\n        swap(moved_source, source_a);\r\n\r\n        // copy assignment\r\n        copied_source = source_b;\r\n        assert(copied_source == source_b);\r\n\r\n        // move assignment\r\n        moved_source = move(source_a);\r\n        assert(!source_a.stop_possible());\r\n        assert(moved_source.stop_possible());\r\n\r\n        // swap member\r\n        moved_source.swap(source_a);\r\n        assert(source_a.stop_possible());\r\n        assert(!moved_source.stop_possible());\r\n\r\n        // get_token tested with tokens below\r\n        // stop_possible tested above\r\n        // stop_requested tested below\r\n        assert(!empty.request_stop());\r\n        assert(source_a.request_stop());\r\n        assert(source_a.stop_requested());\r\n        assert(!source_a.request_stop());\r\n        assert(source_a.stop_requested());\r\n\r\n        assert(!source_b.stop_requested());\r\n        assert(!copied_source.stop_requested());\r\n        assert(copied_source.request_stop());\r\n        assert(source_b.stop_requested());\r\n        assert(copied_source.stop_requested());\r\n        assert(!source_b.request_stop());\r\n    }\r\n\r\n    reset_new_counters(2);\r\n    { // stop_token\r\n        stop_source source_a;\r\n        stop_token token_a = source_a.get_token();\r\n        assert(token_a.stop_possible());\r\n        assert(!token_a.stop_requested());\r\n\r\n        stop_source source_b;\r\n        stop_token token_b = source_b.get_token();\r\n        assert(token_a != token_b);\r\n\r\n        stop_token empty;\r\n\r\n        // default ctor tested above in the no-alloc block\r\n\r\n        // copy ctor\r\n        stop_token copied_token{token_a};\r\n        assert(copied_token == token_a);\r\n\r\n        // move ctor\r\n        stop_token moved_token{move(token_a)};\r\n        assert(moved_token == copied_token);\r\n        assert(moved_token != token_a);\r\n        assert(!token_a.stop_possible());\r\n        assert(!token_a.stop_requested());\r\n        moved_token.swap(token_a);\r\n\r\n        // copy assign\r\n        copied_token = token_b;\r\n        assert(copied_token == token_b);\r\n\r\n        // move assign\r\n        moved_token = move(token_b);\r\n        assert(moved_token == copied_token);\r\n        moved_token = move(moved_token);\r\n        assert(moved_token == copied_token);\r\n        assert(moved_token != token_a);\r\n        assert(!token_b.stop_possible());\r\n        assert(!token_b.stop_requested());\r\n        swap(token_b, moved_token);\r\n\r\n        // stop_possible tested above and 1 special case below\r\n\r\n        // stop_requested\r\n        assert(!copied_token.stop_requested());\r\n        assert(source_b.request_stop());\r\n        assert(!token_a.stop_requested());\r\n        assert(token_b.stop_requested());\r\n        assert(copied_token.stop_requested());\r\n\r\n        // equals and swap tested above\r\n    }\r\n\r\n    // the stop_possible special cases\r\n    reset_new_counters(1);\r\n    { // all sources are gone\r\n        stop_token token;\r\n        {\r\n            stop_source source;\r\n            token = source.get_token();\r\n            assert(token.stop_possible());\r\n            assert(!token.stop_requested());\r\n        } // destroy source\r\n\r\n        assert(!token.stop_possible());\r\n        assert(!token.stop_requested());\r\n        stop_callback cb{token, [] { assert(false); }};\r\n        (void) cb;\r\n    }\r\n\r\n    reset_new_counters(1);\r\n    { // all sources are gone but stop happened first\r\n        stop_token token;\r\n        {\r\n            stop_source source;\r\n            token = source.get_token();\r\n            assert(token.stop_possible());\r\n            assert(!token.stop_requested());\r\n            assert(source.request_stop());\r\n            assert(token.stop_possible());\r\n            assert(token.stop_requested());\r\n        } // destroy source\r\n\r\n        assert(token.stop_possible());\r\n        assert(token.stop_requested());\r\n    }\r\n\r\n    // empty assign special cases\r\n    reset_new_counters(1);\r\n    {\r\n        stop_source source;\r\n        stop_source empty{nostopstate};\r\n        source = empty; // lvalue\r\n        assert(!source.stop_possible());\r\n    }\r\n\r\n    reset_new_counters(1);\r\n    {\r\n        stop_source source;\r\n        source = stop_source{nostopstate}; // rvalue\r\n        assert(!source.stop_possible());\r\n    }\r\n\r\n    reset_new_counters(1);\r\n    {\r\n        stop_source source;\r\n        auto token = source.get_token();\r\n        stop_token empty;\r\n        token = empty; // lvalue\r\n        assert(!token.stop_possible());\r\n    }\r\n\r\n    reset_new_counters(1);\r\n    {\r\n        stop_source source;\r\n        auto token = source.get_token();\r\n        token      = stop_token{}; // rvalue\r\n        assert(!token.stop_possible());\r\n    }\r\n\r\n    // callback calling in the ctor\r\n    reset_new_counters(1);\r\n    {\r\n        atomic<int> calls{0};\r\n        stop_source source;\r\n        source.request_stop();\r\n        assert(calls.load() == 0);\r\n        stop_callback<call_counting_functor> cb{source.get_token(), &calls};\r\n        (void) cb;\r\n        assert(calls.load() == 1);\r\n    }\r\n\r\n    reset_new_counters(1);\r\n    {\r\n        atomic<int> calls{0};\r\n        stop_token token;\r\n\r\n        {\r\n            stop_source source;\r\n            token = source.get_token();\r\n            source.request_stop();\r\n        } // destroy source\r\n\r\n        assert(calls.load() == 0);\r\n        stop_callback<call_counting_functor> cb{token, &calls};\r\n        (void) cb;\r\n        assert(calls.load() == 1);\r\n    }\r\n\r\n    // callback calling on cancel\r\n    reset_new_counters(1);\r\n    {\r\n        atomic<int> calls{0};\r\n        stop_source source;\r\n        assert(calls.load() == 0);\r\n        stop_callback<call_counting_functor> cb{source.get_token(), &calls};\r\n        assert(calls.load() == 0);\r\n        source.request_stop();\r\n        assert(calls.load() == 1);\r\n    }\r\n\r\n    // if the callback is executing on the current thread it does not block for the callback to finish executing\r\n    reset_new_counters(1);\r\n    {\r\n        stop_source source;\r\n        auto token = source.get_token();\r\n        optional<stop_callback<cb_destroying_functor>> cb;\r\n        cb.emplace(token, cb);\r\n        source.request_stop(); // if we don't do what the standard says, this will deadlock\r\n    }\r\n\r\n    // if the callback is executing on another thread it blocks for the callback to finish executing\r\n    reset_new_counters(2); // nonstandard assumption that our std::thread allocates exactly once\r\n    {\r\n        static constexpr chrono::milliseconds callback_wait_length = 5s;\r\n        static constexpr chrono::milliseconds request_wait_length  = 500ms;\r\n        stop_source source;\r\n        atomic<bool> block_request_stop{false};\r\n        // block_destroy makes it more likely that the timing assumption above is correct because the timer doesn't\r\n        // start until we know the worker thread is actively running trying to request_stop\r\n        atomic<bool> block_destroy{false};\r\n        thread worker{[&] {\r\n            // run the callbacks in the worker thread\r\n            block_request_stop.wait(false);\r\n            block_destroy.store(true);\r\n            block_destroy.notify_one();\r\n            assert(\"request_wait_length TIMING ASSUMPTION\" && source.request_stop());\r\n        }};\r\n\r\n\r\n        auto worker_id = worker.get_id();\r\n        chrono::steady_clock::time_point started_at;\r\n        {\r\n            // timing assumption that the main thread will try to destroy cb within request_wait_length\r\n            stop_callback cb{source.get_token(), [&] {\r\n                                 this_thread::sleep_for(callback_wait_length);\r\n                                 assert(\"request_wait_length TIMING ASSUMPTION\" && this_thread::get_id() == worker_id);\r\n                             }};\r\n            started_at = chrono::steady_clock::now();\r\n            block_request_stop.store(true);\r\n            block_request_stop.notify_one();\r\n            block_destroy.wait(false); // wait for the other thread to start stopping\r\n            // timing assumption that worker enters request_stop before we try to destroy cb here;\r\n            // if that assumption is wrong then we merely don't test the case in which we're interested (because cb will\r\n            // run on this thread so we won't have to block for destruction)\r\n            this_thread::sleep_for(request_wait_length);\r\n            assert(\"request_wait_length TIMING ASSUMPTION\" && !source.request_stop());\r\n        } // destroy cb\r\n\r\n        worker.join();\r\n\r\n        // not a timing assumption: we must have waited at least as long as the sleep_for in the cancellation callback\r\n        // (that's the point of this test)\r\n        auto stopped_at = chrono::steady_clock::now();\r\n        assert(started_at + callback_wait_length <= stopped_at);\r\n    }\r\n\r\n    // more than one callback in the list and the first callback unregisters one of the others\r\n    // (this tests edge cases in the callback linked list management)\r\n    for (int idx = 0; idx < 5; ++idx) {\r\n        reset_new_counters(1);\r\n        stop_source source;\r\n        auto token = source.get_token();\r\n        optional<stop_callback<cb_destroying_functor>> cbs[5];\r\n        cbs[0].emplace(token, cbs[idx]);\r\n        cbs[1].emplace(token, cbs[1]);\r\n        cbs[2].emplace(token, cbs[2]);\r\n        cbs[3].emplace(token, cbs[3]);\r\n        cbs[4].emplace(token, cbs[4]);\r\n        cbs[2].reset();\r\n        source.request_stop();\r\n    }\r\n\r\n    // exception safety cases\r\n    reset_new_counters(0);\r\n    try {\r\n        stop_source source;\r\n        (void) source;\r\n        assert(false);\r\n    } catch (const bad_alloc&) {\r\n        // expected\r\n    }\r\n\r\n    reset_new_counters(1);\r\n    try {\r\n        stop_source source;\r\n        stop_callback<throwing_construction_functor> cb{source.get_token(), 42};\r\n    } catch (int i) {\r\n        assert(i == 42);\r\n    }\r\n\r\n    reset_new_counters(1);\r\n    try {\r\n        stop_source source;\r\n        auto token_lvalue = source.get_token();\r\n        stop_callback<throwing_construction_functor> cb{token_lvalue, 43};\r\n    } catch (int i) {\r\n        assert(i == 43);\r\n    }\r\n\r\n    reset_new_counters(0);\r\n\r\n    puts(\"pass\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0660R10_stop_token_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0660R10_stop_token_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <stop_token>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct throwing_functor {\r\n    void operator()() {\r\n        throw 42;\r\n    }\r\n};\r\n\r\nvoid test_case_throw_during_callback_ctor() {\r\n    stop_source source;\r\n    source.request_stop();\r\n    stop_callback cb{source.get_token(), throwing_functor{}};\r\n    (void) cb;\r\n}\r\n\r\nvoid test_case_throw_during_callback_lvalue_ctor() {\r\n    stop_source source;\r\n    source.request_stop();\r\n    auto lvalue_token = source.get_token();\r\n    stop_callback cb{lvalue_token, throwing_functor{}};\r\n    (void) cb;\r\n}\r\n\r\nvoid test_case_throw_during_request_stop() {\r\n    stop_source source;\r\n    stop_callback cb{source.get_token(), throwing_functor{}};\r\n    (void) cb;\r\n    source.request_stop();\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n    exec.add_death_tests({\r\n        test_case_throw_during_request_stop,\r\n        test_case_throw_during_callback_lvalue_ctor,\r\n        test_case_throw_during_request_stop,\r\n    });\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0674R1_make_shared_for_arrays/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0674R1_make_shared_for_arrays/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <cstdlib>\r\n#include <memory>\r\n#include <new>\r\n#include <stdexcept>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\n\r\nint allocationCount = 0;\r\nint canCreate       = 10; // Counter to force an exception when constructing a\r\n                    // sufficiently large ReportAddress array\r\n\r\nstruct ReportAddress;\r\nvector<ReportAddress*> ascendingAddressBuffer;\r\nvector<ReportAddress*> descendingAddressBuffer;\r\n\r\n// According to N4849, the default behavior of operator new[](size) is to return\r\n// operator new(size), so only the latter needs to be replaced.\r\nvoid* operator new(size_t size) {\r\n    void* const p = ::operator new(size, nothrow);\r\n\r\n    if (p) {\r\n        return p;\r\n    } else {\r\n        throw bad_alloc();\r\n    }\r\n}\r\n\r\nvoid* operator new(size_t size, const nothrow_t&) noexcept {\r\n    void* const result = malloc(size == 0 ? 1 : size);\r\n    ++allocationCount;\r\n\r\n    return result;\r\n}\r\n\r\nstruct InitialValue {\r\n    int value = 106;\r\n\r\n    InitialValue() = default;\r\n\r\n    InitialValue(int a, int b) : value(a + b) {}\r\n};\r\n\r\nstruct ThreeIntWrap {\r\n    int v1;\r\n    int v2;\r\n    int v3;\r\n};\r\n\r\nstruct alignas(32) HighlyAligned {\r\n    uint64_t a;\r\n    uint64_t b;\r\n    uint64_t c;\r\n    uint64_t d;\r\n};\r\n\r\nstruct ReportAddress {\r\n    ReportAddress() {\r\n        if (canCreate > 0) {\r\n            ascendingAddressBuffer.push_back(this);\r\n            --canCreate;\r\n        } else {\r\n            throw runtime_error(\"Can't create more ReportAddress objects.\");\r\n        }\r\n    }\r\n\r\n    ~ReportAddress() {\r\n        ++canCreate;\r\n        descendingAddressBuffer.push_back(this);\r\n    }\r\n};\r\n\r\nvoid assert_ascending_init() {\r\n    for (size_t i = 1; i < ascendingAddressBuffer.size(); ++i) {\r\n        assert(ascendingAddressBuffer[i - 1] < ascendingAddressBuffer[i]);\r\n    }\r\n\r\n    ascendingAddressBuffer.clear();\r\n}\r\n\r\nvoid assert_descending_destruct() {\r\n    for (size_t i = 1; i < descendingAddressBuffer.size(); ++i) {\r\n        assert(descendingAddressBuffer[i - 1] > descendingAddressBuffer[i]);\r\n    }\r\n\r\n    descendingAddressBuffer.clear();\r\n}\r\n\r\ntemplate <class T>\r\nvoid assert_shared_use_get(const shared_ptr<T>& sp) {\r\n    assert(sp.use_count() == 1);\r\n    assert(sp.get() != nullptr);\r\n}\r\n\r\ntemplate <class T, class... Args>\r\nshared_ptr<T> make_shared_assert(Args&&... vals) {\r\n    int count        = allocationCount;\r\n    shared_ptr<T> sp = make_shared<T>(forward<Args>(vals)...);\r\n    assert_shared_use_get(sp);\r\n    assert(count + 1 == allocationCount);\r\n    return sp;\r\n}\r\n\r\ntemplate <class T, enable_if_t<extent_v<T> != 0, int> = 0>\r\nshared_ptr<T> make_shared_init_assert(const remove_extent_t<T>& val) {\r\n    return make_shared_assert<T>(val);\r\n}\r\n\r\ntemplate <class T, enable_if_t<is_array_v<T> && extent_v<T> == 0, int> = 0>\r\nshared_ptr<T> make_shared_init_assert(size_t size, const remove_extent_t<T>& val) {\r\n    return make_shared_assert<T>(size, val);\r\n}\r\n\r\ntemplate <class T, class... Args>\r\nvoid test_make_init_destruct_order(Args&&... vals) {\r\n    try {\r\n        shared_ptr<T> sp = make_shared<T>(forward<Args>(vals)...);\r\n        assert_shared_use_get(sp);\r\n    } catch (const runtime_error& exc) {\r\n        assert(exc.what() == \"Can't create more ReportAddress objects.\"sv);\r\n    }\r\n\r\n    assert_ascending_init();\r\n    assert_descending_destruct();\r\n}\r\n\r\nvoid test_make_shared_not_array() {\r\n    shared_ptr<vector<int>> p0 = make_shared<vector<int>>();\r\n    assert_shared_use_get(p0);\r\n    assert(p0->empty());\r\n\r\n    shared_ptr<InitialValue> p1 = make_shared_assert<InitialValue>();\r\n    assert(p1->value == 106);\r\n\r\n    shared_ptr<string> p2 = make_shared<string>(\"Meow!\", 2u, 3u);\r\n    assert_shared_use_get(p2);\r\n    assert(p2->compare(\"ow!\") == 0);\r\n\r\n    shared_ptr<InitialValue> p3 = make_shared_assert<InitialValue>(40, 2);\r\n    assert(p3->value == 42);\r\n\r\n    shared_ptr<int> p4 = make_shared<int>();\r\n    assert_shared_use_get(p4);\r\n    assert(*p4 == 0);\r\n\r\n    shared_ptr<HighlyAligned> p5 = make_shared<HighlyAligned>();\r\n    assert_shared_use_get(p5);\r\n#ifdef __cpp_aligned_new\r\n    assert(reinterpret_cast<uintptr_t>(p5.get()) % alignof(HighlyAligned) == 0);\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n    assert(p5->a == 0 && p5->b == 0 && p5->c == 0 && p5->d == 0);\r\n}\r\n\r\nvoid test_make_shared_array_known_bounds() {\r\n    shared_ptr<string[100]> p0 = make_shared<string[100]>();\r\n    assert_shared_use_get(p0);\r\n    for (int i = 0; i < 100; ++i) {\r\n        assert(p0[i].empty());\r\n    }\r\n\r\n    shared_ptr<InitialValue[2][8][9]> p1 = make_shared_assert<InitialValue[2][8][9]>();\r\n    for (int i = 0; i < 2; ++i) {\r\n        for (int j = 0; j < 8; ++j) {\r\n            for (int k = 0; k < 9; ++k) {\r\n                assert(p1[i][j][k].value == 106);\r\n            }\r\n        }\r\n    }\r\n\r\n    shared_ptr<string[10][2]> p2 = make_shared<string[10][2]>({\"Meow!\", \"Purr\"});\r\n    assert_shared_use_get(p2);\r\n    for (int i = 0; i < 10; ++i) {\r\n        assert(p2[i][0].compare(\"Meow!\") == 0);\r\n        assert(p2[i][1].compare(\"Purr\") == 0);\r\n    }\r\n\r\n    shared_ptr<vector<int>[3]> p3 = make_shared<vector<int>[3]>({9, 9, 9});\r\n    assert_shared_use_get(p3);\r\n    for (int i = 0; i < 3; ++i) {\r\n        assert(p3[i].size() == 3);\r\n        for (const auto& val : p3[i]) {\r\n            assert(val == 9);\r\n        }\r\n    }\r\n\r\n    shared_ptr<ThreeIntWrap[5]> p4 = make_shared_init_assert<ThreeIntWrap[5]>({2, 8, 9});\r\n    for (int i = 0; i < 5; ++i) {\r\n        assert(p4[i].v1 == 2 && p4[i].v2 == 8 && p4[i].v3 == 9);\r\n    }\r\n\r\n    shared_ptr<int[1][7][2][9]> p5 = make_shared<int[1][7][2][9]>();\r\n    assert_shared_use_get(p5);\r\n    for (int i = 0; i < 7; ++i) {\r\n        for (int j = 0; j < 2; ++j) {\r\n            for (int k = 0; k < 9; ++k) {\r\n                assert(p5[0][i][j][k] == 0);\r\n            }\r\n        }\r\n    }\r\n\r\n    shared_ptr<HighlyAligned[6]> p6 = make_shared<HighlyAligned[6]>();\r\n    assert_shared_use_get(p6);\r\n#ifdef __cpp_aligned_new\r\n    assert(reinterpret_cast<uintptr_t>(p6.get()) % alignof(HighlyAligned) == 0);\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n    for (int i = 0; i < 6; ++i) {\r\n        assert(p6[i].a == 0 && p6[i].b == 0 && p6[i].c == 0 && p6[i].d == 0);\r\n    }\r\n\r\n    test_make_init_destruct_order<ReportAddress[5]>(); // success one dimensional\r\n\r\n    test_make_init_destruct_order<ReportAddress[20]>(); // failure one dimensional\r\n\r\n    test_make_init_destruct_order<ReportAddress[2][2][2]>(); // success multidimensional\r\n\r\n    test_make_init_destruct_order<ReportAddress[3][3][3]>(); // failure multidimensional\r\n\r\n    shared_ptr<int[7]> p7 = make_shared<int[7]>(0);\r\n    for (int i = 0; i < 7; ++i) {\r\n        assert(p7[i] == 0);\r\n    }\r\n}\r\n\r\nvoid test_make_shared_array_unknown_bounds() {\r\n    shared_ptr<string[]> p0 = make_shared<string[]>(100);\r\n    assert_shared_use_get(p0);\r\n    for (int i = 0; i < 100; ++i) {\r\n        assert(p0[i].empty());\r\n    }\r\n\r\n    shared_ptr<InitialValue[][8][9]> p1 = make_shared_assert<InitialValue[][8][9]>(2u);\r\n    for (int i = 0; i < 2; ++i) {\r\n        for (int j = 0; j < 8; ++j) {\r\n            for (int k = 0; k < 9; ++k) {\r\n                assert(p1[i][j][k].value == 106);\r\n            }\r\n        }\r\n    }\r\n\r\n    shared_ptr<string[][2]> p2 = make_shared<string[][2]>(10, {\"Meow!\", \"Purr\"});\r\n    assert_shared_use_get(p2);\r\n    for (int i = 0; i < 10; ++i) {\r\n        assert(p2[i][0].compare(\"Meow!\") == 0);\r\n        assert(p2[i][1].compare(\"Purr\") == 0);\r\n    }\r\n\r\n    shared_ptr<vector<int>[]> p3 = make_shared<vector<int>[]>(3, {9, 9, 9});\r\n    assert_shared_use_get(p3);\r\n    for (int i = 0; i < 3; ++i) {\r\n        assert(p3[i].size() == 3);\r\n        for (const auto& val : p3[i]) {\r\n            assert(val == 9);\r\n        }\r\n    }\r\n\r\n    shared_ptr<ThreeIntWrap[]> p4 = make_shared_init_assert<ThreeIntWrap[]>(5, {2, 8, 9});\r\n    for (int i = 0; i < 5; ++i) {\r\n        assert(p4[i].v1 == 2 && p4[i].v2 == 8 && p4[i].v3 == 9);\r\n    }\r\n\r\n    shared_ptr<int[]> p5 = make_shared_assert<int[]>(0u); // p5 cannot be dereferenced\r\n\r\n    shared_ptr<int[][5][6]> p6 = make_shared<int[][5][6]>(4u);\r\n    assert_shared_use_get(p6);\r\n    for (int i = 0; i < 4; ++i) {\r\n        for (int j = 0; j < 5; ++j) {\r\n            for (int k = 0; k < 6; ++k) {\r\n                assert(p6[i][j][k] == 0);\r\n            }\r\n        }\r\n    }\r\n\r\n    shared_ptr<HighlyAligned[]> p7 = make_shared<HighlyAligned[]>(7u);\r\n    assert_shared_use_get(p7);\r\n#ifdef __cpp_aligned_new\r\n    assert(reinterpret_cast<uintptr_t>(p7.get()) % alignof(HighlyAligned) == 0);\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n    for (int i = 0; i < 7; ++i) {\r\n        assert(p7[i].a == 0 && p7[i].b == 0 && p7[i].c == 0 && p7[i].d == 0);\r\n    }\r\n\r\n    test_make_init_destruct_order<ReportAddress[]>(5u); // success one dimensional\r\n\r\n    test_make_init_destruct_order<ReportAddress[]>(20u); // failure one dimensional\r\n\r\n    test_make_init_destruct_order<ReportAddress[][2][2]>(2u); // success multidimensional\r\n\r\n    test_make_init_destruct_order<ReportAddress[][3][3]>(3u); // failure multidimensional\r\n\r\n    shared_ptr<int[]> p8 = make_shared<int[]>(7u, 0);\r\n    for (int i = 0; i < 7; ++i) {\r\n        assert(p8[i] == 0);\r\n    }\r\n}\r\n\r\nint constructCount = 0;\r\nint destroyCount   = 0;\r\n\r\ninline void assert_construct_destruct_equal() {\r\n    assert(constructCount == destroyCount);\r\n}\r\n\r\ntemplate <class T, class ConstructAssert>\r\nstruct ConstructConstrainingAllocator {\r\n    using value_type = T;\r\n\r\n    ConstructConstrainingAllocator() = default;\r\n    template <class Other>\r\n    ConstructConstrainingAllocator(const ConstructConstrainingAllocator<Other, ConstructAssert>&) {}\r\n    ConstructConstrainingAllocator(const ConstructConstrainingAllocator&)            = default;\r\n    ConstructConstrainingAllocator& operator=(const ConstructConstrainingAllocator&) = delete;\r\n\r\n    T* allocate(size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* p, size_t n) noexcept {\r\n        return allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class Other, class... Args>\r\n    void construct(Other* p, Args&&... vals) {\r\n        allocator<Other> a;\r\n        static_assert(is_same_v<Other, value_type> && is_same_v<ConstructAssert, Other>, \"incorrect construct call\");\r\n        allocator_traits<allocator<Other>>::construct(a, p, forward<Args>(vals)...);\r\n        ++constructCount;\r\n    }\r\n\r\n    template <class Other>\r\n    void destroy(Other* p) noexcept {\r\n        allocator<Other> a;\r\n        static_assert(is_same_v<Other, value_type> && is_same_v<ConstructAssert, Other>, \"incorrect destroy call\");\r\n        allocator_traits<allocator<Other>>::destroy(a, p);\r\n        ++destroyCount;\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nusing CustomAlloc = ConstructConstrainingAllocator<void, T>;\r\n\r\ntemplate <class T, class... Args>\r\nshared_ptr<T> allocate_shared_assert(int elemCount, Args&&... vals) {\r\n    int aCount       = allocationCount;\r\n    int cCount       = constructCount;\r\n    shared_ptr<T> sp = allocate_shared<T>(forward<Args>(vals)...);\r\n    assert_shared_use_get(sp);\r\n    assert(aCount + 1 == allocationCount);\r\n    assert(cCount + elemCount == constructCount);\r\n    return sp;\r\n}\r\n\r\ntemplate <class T, class A, enable_if_t<extent_v<T> != 0, int> = 0>\r\nshared_ptr<T> allocate_shared_init_assert(int elemCount, const A& a, const remove_extent_t<T>& val) {\r\n    return allocate_shared_assert<T>(elemCount, a, val);\r\n}\r\n\r\ntemplate <class T, class A, enable_if_t<is_array_v<T> && extent_v<T> == 0, int> = 0>\r\nshared_ptr<T> allocate_shared_init_assert(int elemCount, const A& a, size_t size, const remove_extent_t<T>& val) {\r\n    return allocate_shared_assert<T>(elemCount, a, size, val);\r\n}\r\n\r\ntemplate <class T, class... Args>\r\nvoid test_allocate_init_destruct_order(Args&&... vals) {\r\n    CustomAlloc<remove_all_extents_t<T>> a{};\r\n\r\n    try {\r\n        shared_ptr<T> sp = allocate_shared<T>(a, forward<Args>(vals)...);\r\n        assert_shared_use_get(sp);\r\n    } catch (const runtime_error& exc) {\r\n        assert(exc.what() == \"Can't create more ReportAddress objects.\"sv);\r\n    }\r\n\r\n    assert_construct_destruct_equal();\r\n    assert_ascending_init();\r\n    assert_descending_destruct();\r\n}\r\n\r\nvoid test_allocate_shared_not_array() {\r\n    CustomAlloc<vector<int>> a0{};\r\n    {\r\n        shared_ptr<vector<int>> p0 = allocate_shared<vector<int>>(a0);\r\n        assert_shared_use_get(p0);\r\n        assert(p0->empty());\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    CustomAlloc<InitialValue> a1{};\r\n    {\r\n        shared_ptr<InitialValue> p1 = allocate_shared_assert<InitialValue>(1, a1);\r\n        assert(p1->value == 106);\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    CustomAlloc<string> a2{};\r\n    {\r\n        shared_ptr<string> p2 = allocate_shared<string>(a2, \"Meow!\", 2u, 3u);\r\n        assert_shared_use_get(p2);\r\n        assert(p2->compare(\"ow!\") == 0);\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    {\r\n        shared_ptr<InitialValue> p3 = allocate_shared_assert<InitialValue>(1, a1, 40, 2);\r\n        assert(p3->value == 42);\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    CustomAlloc<int> a4{};\r\n    {\r\n        shared_ptr<int> p4 = allocate_shared<int>(a4);\r\n        assert_shared_use_get(p4);\r\n        assert(*p4 == 0);\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    CustomAlloc<HighlyAligned> a5{};\r\n    {\r\n        shared_ptr<HighlyAligned> p5 = allocate_shared<HighlyAligned>(a5);\r\n        assert_shared_use_get(p5);\r\n#ifdef __cpp_aligned_new\r\n        assert(reinterpret_cast<uintptr_t>(p5.get()) % alignof(HighlyAligned) == 0);\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n        assert(p5->a == 0 && p5->b == 0 && p5->c == 0 && p5->d == 0);\r\n    }\r\n    assert_construct_destruct_equal();\r\n}\r\n\r\nvoid test_allocate_shared_array_known_bounds() {\r\n    CustomAlloc<string> a0{};\r\n    {\r\n        shared_ptr<string[100]> p0 = allocate_shared<string[100]>(a0);\r\n        assert_shared_use_get(p0);\r\n        for (int i = 0; i < 100; ++i) {\r\n            assert(p0[i].empty());\r\n        }\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    CustomAlloc<InitialValue> a1{};\r\n    {\r\n        shared_ptr<InitialValue[2][8][9]> p1 = allocate_shared_assert<InitialValue[2][8][9]>(144, a1);\r\n        for (int i = 0; i < 2; ++i) {\r\n            for (int j = 0; j < 8; ++j) {\r\n                for (int k = 0; k < 9; ++k) {\r\n                    assert(p1[i][j][k].value == 106);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    {\r\n        shared_ptr<string[10][2]> p2 = allocate_shared<string[10][2]>(a0, {\"Meow!\", \"Purr\"});\r\n        assert_shared_use_get(p2);\r\n        for (int i = 0; i < 10; ++i) {\r\n            assert(p2[i][0].compare(\"Meow!\") == 0);\r\n            assert(p2[i][1].compare(\"Purr\") == 0);\r\n        }\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    CustomAlloc<vector<int>> a3{};\r\n    {\r\n        shared_ptr<vector<int>[3]> p3 = allocate_shared<vector<int>[3]>(a3, {9, 9, 9});\r\n        assert_shared_use_get(p3);\r\n        for (int i = 0; i < 3; ++i) {\r\n            assert(p3[i].size() == 3);\r\n            for (const auto& val : p3[i]) {\r\n                assert(val == 9);\r\n            }\r\n        }\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    CustomAlloc<ThreeIntWrap> a4{};\r\n    {\r\n        shared_ptr<ThreeIntWrap[5]> p4 = allocate_shared_init_assert<ThreeIntWrap[5]>(5, a4, {2, 8, 9});\r\n        for (int i = 0; i < 5; ++i) {\r\n            assert(p4[i].v1 == 2 && p4[i].v2 == 8 && p4[i].v3 == 9);\r\n        }\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    CustomAlloc<int> a5{};\r\n    {\r\n        shared_ptr<int[1][7][2][9]> p5 = allocate_shared<int[1][7][2][9]>(a5);\r\n        assert_shared_use_get(p5);\r\n        for (int i = 0; i < 7; ++i) {\r\n            for (int j = 0; j < 2; ++j) {\r\n                for (int k = 0; k < 9; ++k) {\r\n                    assert(p5[0][i][j][k] == 0);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    CustomAlloc<HighlyAligned> a6{};\r\n    {\r\n        shared_ptr<HighlyAligned[6]> p6 = allocate_shared<HighlyAligned[6]>(a6);\r\n        assert_shared_use_get(p6);\r\n#ifdef __cpp_aligned_new\r\n        assert(reinterpret_cast<uintptr_t>(p6.get()) % alignof(HighlyAligned) == 0);\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n        for (int i = 0; i < 6; ++i) {\r\n            assert(p6[i].a == 0 && p6[i].b == 0 && p6[i].c == 0 && p6[i].d == 0);\r\n        }\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    test_allocate_init_destruct_order<ReportAddress[5]>(); // success one dimensional\r\n\r\n    test_allocate_init_destruct_order<ReportAddress[20]>(); // failure one dimensional\r\n\r\n    test_allocate_init_destruct_order<ReportAddress[2][2][2]>(); // success multidimensional\r\n\r\n    test_allocate_init_destruct_order<ReportAddress[3][3][3]>(); // failure multidimensional\r\n\r\n    allocator<int> a7;\r\n    shared_ptr<int[7]> p7 = allocate_shared<int[7]>(a7, 0);\r\n    for (int i = 0; i < 7; ++i) {\r\n        assert(p7[i] == 0);\r\n    }\r\n}\r\n\r\nvoid test_allocate_shared_array_unknown_bounds() {\r\n    CustomAlloc<string> a0{};\r\n    {\r\n        shared_ptr<string[]> p0 = allocate_shared<string[]>(a0, 100);\r\n        assert_shared_use_get(p0);\r\n        for (int i = 0; i < 100; ++i) {\r\n            assert(p0[i].empty());\r\n        }\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    CustomAlloc<InitialValue> a1{};\r\n    {\r\n        shared_ptr<InitialValue[][8][9]> p1 = allocate_shared_assert<InitialValue[][8][9]>(144, a1, 2u);\r\n        for (int i = 0; i < 2; ++i) {\r\n            for (int j = 0; j < 8; ++j) {\r\n                for (int k = 0; k < 9; ++k) {\r\n                    assert(p1[i][j][k].value == 106);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    {\r\n        shared_ptr<string[][2]> p2 = allocate_shared<string[][2]>(a0, 10, {\"Meow!\", \"Purr\"});\r\n        assert_shared_use_get(p2);\r\n        for (int i = 0; i < 10; ++i) {\r\n            assert(p2[i][0].compare(\"Meow!\") == 0);\r\n            assert(p2[i][1].compare(\"Purr\") == 0);\r\n        }\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    CustomAlloc<vector<int>> a3{};\r\n    {\r\n        shared_ptr<vector<int>[]> p3 = allocate_shared<vector<int>[]>(a3, 3, {9, 9, 9});\r\n        assert_shared_use_get(p3);\r\n        for (int i = 0; i < 3; ++i) {\r\n            assert(p3[i].size() == 3);\r\n            for (const auto& val : p3[i]) {\r\n                assert(val == 9);\r\n            }\r\n        }\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    CustomAlloc<ThreeIntWrap> a4{};\r\n    {\r\n        shared_ptr<ThreeIntWrap[]> p4 = allocate_shared_init_assert<ThreeIntWrap[]>(5, a4, 5, {2, 8, 9});\r\n        for (int i = 0; i < 5; ++i) {\r\n            assert(p4[i].v1 == 2 && p4[i].v2 == 8 && p4[i].v3 == 9);\r\n        }\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    CustomAlloc<int> a5{};\r\n    {\r\n        shared_ptr<int[]> p5 = allocate_shared_assert<int[]>(0, a5, 0u);\r\n    } // p5 cannot be dereferenced\r\n    assert_construct_destruct_equal();\r\n\r\n    {\r\n        shared_ptr<int[][5][6]> p6 = allocate_shared<int[][5][6]>(a5, 4u);\r\n        assert_shared_use_get(p6);\r\n        for (int i = 0; i < 4; ++i) {\r\n            for (int j = 0; j < 5; ++j) {\r\n                for (int k = 0; k < 6; ++k) {\r\n                    assert(p6[i][j][k] == 0);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    CustomAlloc<HighlyAligned> a7{};\r\n    {\r\n        shared_ptr<HighlyAligned[]> p7 = allocate_shared<HighlyAligned[]>(a7, 7u);\r\n        assert_shared_use_get(p7);\r\n#ifdef __cpp_aligned_new\r\n        assert(reinterpret_cast<uintptr_t>(p7.get()) % alignof(HighlyAligned) == 0);\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n        for (int i = 0; i < 7; ++i) {\r\n            assert(p7[i].a == 0 && p7[i].b == 0 && p7[i].c == 0 && p7[i].d == 0);\r\n        }\r\n    }\r\n    assert_construct_destruct_equal();\r\n\r\n    test_allocate_init_destruct_order<ReportAddress[]>(5u); // success one dimensional\r\n\r\n    test_allocate_init_destruct_order<ReportAddress[]>(20u); // failure one dimensional\r\n\r\n    test_allocate_init_destruct_order<ReportAddress[][2][2]>(2u); // success multidimensional\r\n\r\n    test_allocate_init_destruct_order<ReportAddress[][3][3]>(3u); // failure multidimensional\r\n\r\n    allocator<int> a8;\r\n    shared_ptr<int[]> p8 = allocate_shared<int[]>(a8, 7u, 0);\r\n    for (int i = 0; i < 7; ++i) {\r\n        assert(p8[i] == 0);\r\n    }\r\n}\r\n\r\n// Test GH-1733 \"<memory>: error C2694 when calling make_shared on class with throwing destructor\"\r\nstruct NontrivialThrowingDtor {\r\n    ~NontrivialThrowingDtor() noexcept(false) {}\r\n};\r\nstatic_assert(!is_nothrow_destructible_v<NontrivialThrowingDtor>);\r\nstatic_assert(!is_trivially_destructible_v<NontrivialThrowingDtor>);\r\n\r\nstruct TrivialThrowingDtor {\r\n    ~TrivialThrowingDtor() noexcept(false) = default;\r\n};\r\n\r\nstatic_assert(!is_nothrow_destructible_v<TrivialThrowingDtor>);\r\nstatic_assert(is_trivially_destructible_v<TrivialThrowingDtor>);\r\n\r\ntemplate <class T>\r\nstruct WeirdDeleter {\r\n    void operator()(T* const ptr) const {\r\n        delete ptr;\r\n    }\r\n\r\n    WeirdDeleter()                               = default;\r\n    WeirdDeleter(const WeirdDeleter&)            = default;\r\n    WeirdDeleter& operator=(const WeirdDeleter&) = default;\r\n\r\n    ~WeirdDeleter() noexcept(false) {}\r\n};\r\nstatic_assert(!is_nothrow_destructible_v<WeirdDeleter<int>>);\r\n\r\nvoid test_gh_1733() {\r\n    // GH-1733 <memory>: error C2694 when calling make_shared on class with throwing destructor\r\n    WeirdDeleter<NontrivialThrowingDtor> del;\r\n    allocator<int> al;\r\n\r\n    // _Ref_count\r\n    (void) shared_ptr<NontrivialThrowingDtor>{new NontrivialThrowingDtor};\r\n\r\n    // _Ref_count_resource\r\n    (void) shared_ptr<NontrivialThrowingDtor>{new NontrivialThrowingDtor, del};\r\n\r\n    // _Ref_count_resource_alloc\r\n    (void) shared_ptr<NontrivialThrowingDtor>{new NontrivialThrowingDtor, del, al};\r\n\r\n    // _Ref_count_obj2\r\n    (void) make_shared<NontrivialThrowingDtor>();\r\n\r\n    // _Ref_count_obj_alloc3\r\n    (void) allocate_shared<NontrivialThrowingDtor>(al);\r\n\r\n    // _Ref_count_unbounded_array<_Ty, true>\r\n    (void) make_shared<TrivialThrowingDtor[]>(10);\r\n\r\n    // _Ref_count_unbounded_array<_Ty, false>\r\n    (void) make_shared<NontrivialThrowingDtor[]>(10);\r\n\r\n    // _Ref_count_bounded_array\r\n    (void) make_shared<NontrivialThrowingDtor[10]>();\r\n\r\n    // _Ref_count_unbounded_array_alloc\r\n    (void) allocate_shared<NontrivialThrowingDtor[]>(al, 10);\r\n\r\n    // _Ref_count_bounded_array_alloc\r\n    (void) allocate_shared<NontrivialThrowingDtor[10]>(al);\r\n}\r\n\r\nint main() {\r\n    test_make_shared_not_array();\r\n    test_make_shared_array_known_bounds();\r\n    test_make_shared_array_unknown_bounds();\r\n\r\n    test_allocate_shared_not_array();\r\n    test_allocate_shared_array_known_bounds();\r\n    test_allocate_shared_array_unknown_bounds();\r\n\r\n    test_gh_1733();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0718R2_atomic_smart_ptrs/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0718R2_atomic_smart_ptrs/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <memory>\r\n#include <thread>\r\n#include <type_traits>\r\n\r\n#ifdef _DEBUG\r\n#include <crtdbg.h>\r\n#endif // _DEBUG\r\n\r\nusing namespace std;\r\n\r\nconstexpr uintmax_t iterations = 100000;\r\n\r\nshared_ptr<int> sptr0 = make_shared<int>(0);\r\nshared_ptr<int> sptr1 = make_shared<int>(1);\r\nweak_ptr<int> wptr0   = sptr0;\r\nweak_ptr<int> wptr1   = sptr1;\r\n\r\natomic<shared_ptr<int>> atomic_sptr;\r\natomic<weak_ptr<int>> atomic_wptr;\r\n\r\nshared_ptr<int[]> sarrptr0 = make_shared<int[]>(0);\r\nshared_ptr<int[]> sarrptr1 = make_shared<int[]>(1);\r\nweak_ptr<int[]> warrptr0   = sarrptr0;\r\nweak_ptr<int[]> warrptr1   = sarrptr1;\r\n\r\natomic<shared_ptr<int[]>> atomic_sarrptr;\r\natomic<weak_ptr<int[]>> atomic_warrptr;\r\n\r\nshared_ptr<int[2]> sarrnptr0 = make_shared<int[2]>();\r\nshared_ptr<int[2]> sarrnptr1 = make_shared<int[2]>();\r\nweak_ptr<int[2]> warrnptr0   = sarrnptr0;\r\nweak_ptr<int[2]> warrnptr1   = sarrnptr1;\r\n\r\natomic<shared_ptr<int[2]>> atomic_sarrnptr;\r\natomic<weak_ptr<int[2]>> atomic_warrnptr;\r\n\r\ntemplate <typename T>\r\n[[nodiscard]] bool weak_ptr_equal(const weak_ptr<T>& left, const weak_ptr<T>& right) {\r\n    return !(left.owner_before(right) || right.owner_before(left));\r\n}\r\n\r\nvoid test_shared_ptr_load_store() {\r\n    shared_ptr<int> sp0 = sptr0;\r\n    shared_ptr<int> sp1 = sptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        atomic_sptr          = sp0;\r\n        shared_ptr<int> temp = atomic_sptr;\r\n        assert(temp == sp0 || temp == sp1);\r\n        this_thread::yield();\r\n\r\n        atomic_sptr.store(sp1);\r\n        temp = atomic_sptr.load();\r\n        assert(temp == sp0 || temp == sp1);\r\n        this_thread::yield();\r\n\r\n        atomic_sptr.store(sp0, memory_order::seq_cst);\r\n        temp = atomic_sptr.load(memory_order::seq_cst);\r\n        assert(temp == sp0 || temp == sp1);\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_shared_ptr_exchange() {\r\n    shared_ptr<int> sp0 = sptr0;\r\n    shared_ptr<int> sp1 = sptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        shared_ptr<int> temp = atomic_sptr.exchange(sp0);\r\n        assert(temp == sp0 || temp == sp1);\r\n        this_thread::yield();\r\n\r\n        temp = atomic_sptr.exchange(sp1, memory_order::seq_cst);\r\n        assert(temp == sp0 || temp == sp1);\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_shared_ptr_compare_exchange_weak() {\r\n    shared_ptr<int> sp0 = sptr0;\r\n    shared_ptr<int> sp1 = sptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        shared_ptr<int> local = sp0;\r\n        if (atomic_sptr.compare_exchange_weak(local, sp1)) {\r\n            assert(local == sp0);\r\n        } else {\r\n            assert(local == sp1);\r\n        }\r\n        this_thread::yield();\r\n\r\n        local = sp1;\r\n        if (atomic_sptr.compare_exchange_weak(local, sp0, memory_order::seq_cst, memory_order::seq_cst)) {\r\n            assert(local == sp1);\r\n        } else {\r\n            assert(local == sp0);\r\n        }\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_shared_ptr_compare_exchange_strong() {\r\n    shared_ptr<int> sp0 = sptr0;\r\n    shared_ptr<int> sp1 = sptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        shared_ptr<int> local = sp0;\r\n        if (atomic_sptr.compare_exchange_strong(local, sp1)) {\r\n            assert(local == sp0);\r\n        } else {\r\n            assert(local == sp1);\r\n        }\r\n        this_thread::yield();\r\n\r\n        local = sp1;\r\n        if (atomic_sptr.compare_exchange_strong(local, sp0, memory_order::seq_cst, memory_order::seq_cst)) {\r\n            assert(local == sp1);\r\n        } else {\r\n            assert(local == sp0);\r\n        }\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_weak_ptr_load_store() {\r\n    weak_ptr<int> wp0 = wptr0;\r\n    weak_ptr<int> wp1 = wptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        atomic_wptr        = wp0;\r\n        weak_ptr<int> temp = atomic_wptr;\r\n        assert(weak_ptr_equal(temp, wp0) || weak_ptr_equal(temp, wp1));\r\n        this_thread::yield();\r\n\r\n        atomic_wptr.store(wp1);\r\n        temp = atomic_wptr.load();\r\n        assert(weak_ptr_equal(temp, wp0) || weak_ptr_equal(temp, wp1));\r\n        this_thread::yield();\r\n\r\n        atomic_wptr.store(wp0, memory_order::seq_cst);\r\n        temp = atomic_wptr.load(memory_order::seq_cst);\r\n        assert(weak_ptr_equal(temp, wp0) || weak_ptr_equal(temp, wp1));\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_weak_ptr_exchange() {\r\n    weak_ptr<int> wp0 = wptr0;\r\n    weak_ptr<int> wp1 = wptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        weak_ptr<int> temp = atomic_wptr.exchange(wp0);\r\n        assert(weak_ptr_equal(temp, wp0) || weak_ptr_equal(temp, wp1));\r\n        this_thread::yield();\r\n\r\n        temp = atomic_wptr.exchange(wp1, memory_order::seq_cst);\r\n        assert(weak_ptr_equal(temp, wp0) || weak_ptr_equal(temp, wp1));\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_weak_ptr_compare_exchange_weak() {\r\n    weak_ptr<int> wp0 = wptr0;\r\n    weak_ptr<int> wp1 = wptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        weak_ptr<int> local = wp0;\r\n        if (atomic_wptr.compare_exchange_weak(local, wp1)) {\r\n            assert(weak_ptr_equal(local, wp0));\r\n        } else {\r\n            assert(weak_ptr_equal(local, wp1));\r\n        }\r\n        this_thread::yield();\r\n\r\n        local = wp1;\r\n        if (atomic_wptr.compare_exchange_weak(local, wp0, memory_order::seq_cst, memory_order::seq_cst)) {\r\n            assert(weak_ptr_equal(local, wp1));\r\n        } else {\r\n            assert(weak_ptr_equal(local, wp0));\r\n        }\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_weak_ptr_compare_exchange_strong() {\r\n    weak_ptr<int> wp0 = wptr0;\r\n    weak_ptr<int> wp1 = wptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        weak_ptr<int> local = wp0;\r\n        if (atomic_wptr.compare_exchange_strong(local, wp1)) {\r\n            assert(weak_ptr_equal(local, wp0));\r\n        } else {\r\n            assert(weak_ptr_equal(local, wp1));\r\n        }\r\n        this_thread::yield();\r\n\r\n        local = wp1;\r\n        if (atomic_wptr.compare_exchange_strong(local, wp0, memory_order::seq_cst, memory_order::seq_cst)) {\r\n            assert(weak_ptr_equal(local, wp1));\r\n        } else {\r\n            assert(weak_ptr_equal(local, wp0));\r\n        }\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\n// Repeat test for unbounded array type.\r\nvoid test_shared_ptr_arr_load_store() {\r\n    shared_ptr<int[]> sp0 = sarrptr0;\r\n    shared_ptr<int[]> sp1 = sarrptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        atomic_sarrptr         = sp0;\r\n        shared_ptr<int[]> temp = atomic_sarrptr;\r\n        assert(temp == sp0 || temp == sp1);\r\n        this_thread::yield();\r\n\r\n        atomic_sarrptr.store(sp1);\r\n        temp = atomic_sarrptr.load();\r\n        assert(temp == sp0 || temp == sp1);\r\n        this_thread::yield();\r\n\r\n        atomic_sarrptr.store(sp0, memory_order::seq_cst);\r\n        temp = atomic_sarrptr.load(memory_order::seq_cst);\r\n        assert(temp == sp0 || temp == sp1);\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_shared_ptr_arr_exchange() {\r\n    shared_ptr<int[]> sp0 = sarrptr0;\r\n    shared_ptr<int[]> sp1 = sarrptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        shared_ptr<int[]> temp = atomic_sarrptr.exchange(sp0);\r\n        assert(temp == sp0 || temp == sp1);\r\n        this_thread::yield();\r\n\r\n        temp = atomic_sarrptr.exchange(sp1, memory_order::seq_cst);\r\n        assert(temp == sp0 || temp == sp1);\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_shared_ptr_arr_compare_exchange_weak() {\r\n    shared_ptr<int[]> sp0 = sarrptr0;\r\n    shared_ptr<int[]> sp1 = sarrptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        shared_ptr<int[]> local = sp0;\r\n        if (atomic_sarrptr.compare_exchange_weak(local, sp1)) {\r\n            assert(local == sp0);\r\n        } else {\r\n            assert(local == sp1);\r\n        }\r\n        this_thread::yield();\r\n\r\n        local = sp1;\r\n        if (atomic_sarrptr.compare_exchange_weak(local, sp0, memory_order::seq_cst, memory_order::seq_cst)) {\r\n            assert(local == sp1);\r\n        } else {\r\n            assert(local == sp0);\r\n        }\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_shared_ptr_arr_compare_exchange_strong() {\r\n    shared_ptr<int[]> sp0 = sarrptr0;\r\n    shared_ptr<int[]> sp1 = sarrptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        shared_ptr<int[]> local = sp0;\r\n        if (atomic_sarrptr.compare_exchange_strong(local, sp1)) {\r\n            assert(local == sp0);\r\n        } else {\r\n            assert(local == sp1);\r\n        }\r\n        this_thread::yield();\r\n\r\n        local = sp1;\r\n        if (atomic_sarrptr.compare_exchange_strong(local, sp0, memory_order::seq_cst, memory_order::seq_cst)) {\r\n            assert(local == sp1);\r\n        } else {\r\n            assert(local == sp0);\r\n        }\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_weak_ptr_arr_load_store() {\r\n    weak_ptr<int[]> wp0 = warrptr0;\r\n    weak_ptr<int[]> wp1 = warrptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        atomic_warrptr       = wp0;\r\n        weak_ptr<int[]> temp = atomic_warrptr;\r\n        assert(weak_ptr_equal(temp, wp0) || weak_ptr_equal(temp, wp1));\r\n        this_thread::yield();\r\n\r\n        atomic_warrptr.store(wp1);\r\n        temp = atomic_warrptr.load();\r\n        assert(weak_ptr_equal(temp, wp0) || weak_ptr_equal(temp, wp1));\r\n        this_thread::yield();\r\n\r\n        atomic_warrptr.store(wp0, memory_order::seq_cst);\r\n        temp = atomic_warrptr.load(memory_order::seq_cst);\r\n        assert(weak_ptr_equal(temp, wp0) || weak_ptr_equal(temp, wp1));\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_weak_ptr_arr_exchange() {\r\n    weak_ptr<int[]> wp0 = warrptr0;\r\n    weak_ptr<int[]> wp1 = warrptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        weak_ptr<int[]> temp = atomic_warrptr.exchange(wp0);\r\n        assert(weak_ptr_equal(temp, wp0) || weak_ptr_equal(temp, wp1));\r\n        this_thread::yield();\r\n\r\n        temp = atomic_warrptr.exchange(wp1, memory_order::seq_cst);\r\n        assert(weak_ptr_equal(temp, wp0) || weak_ptr_equal(temp, wp1));\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_weak_ptr_arr_compare_exchange_weak() {\r\n    weak_ptr<int[]> wp0 = warrptr0;\r\n    weak_ptr<int[]> wp1 = warrptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        weak_ptr<int[]> local = wp0;\r\n        if (atomic_warrptr.compare_exchange_weak(local, wp1)) {\r\n            assert(weak_ptr_equal(local, wp0));\r\n        } else {\r\n            assert(weak_ptr_equal(local, wp1));\r\n        }\r\n        this_thread::yield();\r\n\r\n        local = wp1;\r\n        if (atomic_warrptr.compare_exchange_weak(local, wp0, memory_order::seq_cst, memory_order::seq_cst)) {\r\n            assert(weak_ptr_equal(local, wp1));\r\n        } else {\r\n            assert(weak_ptr_equal(local, wp0));\r\n        }\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_weak_ptr_arr_compare_exchange_strong() {\r\n    weak_ptr<int[]> wp0 = warrptr0;\r\n    weak_ptr<int[]> wp1 = warrptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        weak_ptr<int[]> local = wp0;\r\n        if (atomic_warrptr.compare_exchange_strong(local, wp1)) {\r\n            assert(weak_ptr_equal(local, wp0));\r\n        } else {\r\n            assert(weak_ptr_equal(local, wp1));\r\n        }\r\n        this_thread::yield();\r\n\r\n        local = wp1;\r\n        if (atomic_warrptr.compare_exchange_strong(local, wp0, memory_order::seq_cst, memory_order::seq_cst)) {\r\n            assert(weak_ptr_equal(local, wp1));\r\n        } else {\r\n            assert(weak_ptr_equal(local, wp0));\r\n        }\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\n// Repeat test for bounded array type.\r\nvoid test_shared_ptr_arrn_load_store() {\r\n    shared_ptr<int[2]> sp0 = sarrnptr0;\r\n    shared_ptr<int[2]> sp1 = sarrnptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        atomic_sarrnptr         = sp0;\r\n        shared_ptr<int[2]> temp = atomic_sarrnptr;\r\n        assert(temp == sp0 || temp == sp1);\r\n        this_thread::yield();\r\n\r\n        atomic_sarrnptr.store(sp1);\r\n        temp = atomic_sarrnptr.load();\r\n        assert(temp == sp0 || temp == sp1);\r\n        this_thread::yield();\r\n\r\n        atomic_sarrnptr.store(sp0, memory_order::seq_cst);\r\n        temp = atomic_sarrnptr.load(memory_order::seq_cst);\r\n        assert(temp == sp0 || temp == sp1);\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_shared_ptr_arrn_exchange() {\r\n    shared_ptr<int[2]> sp0 = sarrnptr0;\r\n    shared_ptr<int[2]> sp1 = sarrnptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        shared_ptr<int[2]> temp = atomic_sarrnptr.exchange(sp0);\r\n        assert(temp == sp0 || temp == sp1);\r\n        this_thread::yield();\r\n\r\n        temp = atomic_sarrnptr.exchange(sp1, memory_order::seq_cst);\r\n        assert(temp == sp0 || temp == sp1);\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_shared_ptr_arrn_compare_exchange_weak() {\r\n    shared_ptr<int[2]> sp0 = sarrnptr0;\r\n    shared_ptr<int[2]> sp1 = sarrnptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        shared_ptr<int[2]> local = sp0;\r\n        if (atomic_sarrnptr.compare_exchange_weak(local, sp1)) {\r\n            assert(local == sp0);\r\n        } else {\r\n            assert(local == sp1);\r\n        }\r\n        this_thread::yield();\r\n\r\n        local = sp1;\r\n        if (atomic_sarrnptr.compare_exchange_weak(local, sp0, memory_order::seq_cst, memory_order::seq_cst)) {\r\n            assert(local == sp1);\r\n        } else {\r\n            assert(local == sp0);\r\n        }\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_shared_ptr_arrn_compare_exchange_strong() {\r\n    shared_ptr<int[2]> sp0 = sarrnptr0;\r\n    shared_ptr<int[2]> sp1 = sarrnptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        shared_ptr<int[2]> local = sp0;\r\n        if (atomic_sarrnptr.compare_exchange_strong(local, sp1)) {\r\n            assert(local == sp0);\r\n        } else {\r\n            assert(local == sp1);\r\n        }\r\n        this_thread::yield();\r\n\r\n        local = sp1;\r\n        if (atomic_sarrnptr.compare_exchange_strong(local, sp0, memory_order::seq_cst, memory_order::seq_cst)) {\r\n            assert(local == sp1);\r\n        } else {\r\n            assert(local == sp0);\r\n        }\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_weak_ptr_arrn_load_store() {\r\n    weak_ptr<int[2]> wp0 = warrnptr0;\r\n    weak_ptr<int[2]> wp1 = warrnptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        atomic_warrnptr       = wp0;\r\n        weak_ptr<int[2]> temp = atomic_warrnptr;\r\n        assert(weak_ptr_equal(temp, wp0) || weak_ptr_equal(temp, wp1));\r\n        this_thread::yield();\r\n\r\n        atomic_warrnptr.store(wp1);\r\n        temp = atomic_warrnptr.load();\r\n        assert(weak_ptr_equal(temp, wp0) || weak_ptr_equal(temp, wp1));\r\n        this_thread::yield();\r\n\r\n        atomic_warrnptr.store(wp0, memory_order::seq_cst);\r\n        temp = atomic_warrnptr.load(memory_order::seq_cst);\r\n        assert(weak_ptr_equal(temp, wp0) || weak_ptr_equal(temp, wp1));\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_weak_ptr_arrn_exchange() {\r\n    weak_ptr<int[2]> wp0 = warrnptr0;\r\n    weak_ptr<int[2]> wp1 = warrnptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        weak_ptr<int[2]> temp = atomic_warrnptr.exchange(wp0);\r\n        assert(weak_ptr_equal(temp, wp0) || weak_ptr_equal(temp, wp1));\r\n        this_thread::yield();\r\n\r\n        temp = atomic_warrnptr.exchange(wp1, memory_order::seq_cst);\r\n        assert(weak_ptr_equal(temp, wp0) || weak_ptr_equal(temp, wp1));\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_weak_ptr_arrn_compare_exchange_weak() {\r\n    weak_ptr<int[2]> wp0 = warrnptr0;\r\n    weak_ptr<int[2]> wp1 = warrnptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        weak_ptr<int[2]> local = wp0;\r\n        if (atomic_warrnptr.compare_exchange_weak(local, wp1)) {\r\n            assert(weak_ptr_equal(local, wp0));\r\n        } else {\r\n            assert(weak_ptr_equal(local, wp1));\r\n        }\r\n        this_thread::yield();\r\n\r\n        local = wp1;\r\n        if (atomic_warrnptr.compare_exchange_weak(local, wp0, memory_order::seq_cst, memory_order::seq_cst)) {\r\n            assert(weak_ptr_equal(local, wp1));\r\n        } else {\r\n            assert(weak_ptr_equal(local, wp0));\r\n        }\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid test_weak_ptr_arrn_compare_exchange_strong() {\r\n    weak_ptr<int[2]> wp0 = warrnptr0;\r\n    weak_ptr<int[2]> wp1 = warrnptr1;\r\n    for (uintmax_t i = 0; i < iterations; ++i) {\r\n        weak_ptr<int[2]> local = wp0;\r\n        if (atomic_warrnptr.compare_exchange_strong(local, wp1)) {\r\n            assert(weak_ptr_equal(local, wp0));\r\n        } else {\r\n            assert(weak_ptr_equal(local, wp1));\r\n        }\r\n        this_thread::yield();\r\n\r\n        local = wp1;\r\n        if (atomic_warrnptr.compare_exchange_strong(local, wp0, memory_order::seq_cst, memory_order::seq_cst)) {\r\n            assert(weak_ptr_equal(local, wp1));\r\n        } else {\r\n            assert(weak_ptr_equal(local, wp0));\r\n        }\r\n        this_thread::yield();\r\n    }\r\n}\r\n\r\nvoid run_test(void (*fp)()) {\r\n    thread thr0(fp);\r\n    thread thr1(fp);\r\n    thread thr2(fp);\r\n    thread thr3(fp);\r\n    thr0.join();\r\n    thr1.join();\r\n    thr2.join();\r\n    thr3.join();\r\n}\r\n\r\ntemplate <class AtomicType>\r\nvoid ensure_nonmember_calls_compile() {\r\n    AtomicType instance;\r\n    const AtomicType constInstance;\r\n    auto loaded = atomic_load(&instance);\r\n    loaded      = atomic_load(&constInstance);\r\n    loaded      = atomic_load_explicit(&instance, memory_order::relaxed);\r\n    loaded      = atomic_load_explicit(&constInstance, memory_order::relaxed);\r\n    atomic_store(&instance, loaded);\r\n    atomic_store_explicit(&instance, loaded, memory_order::relaxed);\r\n    loaded = atomic_exchange(&instance, loaded);\r\n    loaded = atomic_exchange_explicit(&instance, loaded, memory_order::relaxed);\r\n    if (atomic_compare_exchange_weak(&instance, &loaded, loaded)) {\r\n        // intentionally empty\r\n    }\r\n\r\n    if (atomic_compare_exchange_weak_explicit(\r\n            &instance, &loaded, loaded, memory_order::relaxed, memory_order::relaxed)) {\r\n        // intentionally empty\r\n    }\r\n\r\n    if (atomic_compare_exchange_strong(&instance, &loaded, loaded)) {\r\n        // intentionally empty\r\n    }\r\n\r\n    if (atomic_compare_exchange_strong_explicit(\r\n            &instance, &loaded, loaded, memory_order::relaxed, memory_order::relaxed)) {\r\n        // intentionally empty\r\n    }\r\n}\r\n\r\ntemplate <class AtomicType>\r\nvoid ensure_member_calls_compile() {\r\n    AtomicType instance;\r\n    const AtomicType constInstance;\r\n    auto loaded = instance.load();\r\n    loaded      = constInstance.load();\r\n    loaded      = instance;\r\n    loaded      = constInstance;\r\n    instance.store(loaded);\r\n    loaded = instance.exchange(instance);\r\n    loaded = instance.exchange(constInstance);\r\n    if (instance.compare_exchange_weak(loaded, constInstance)) {\r\n        // intentionally empty\r\n    }\r\n\r\n    if (instance.compare_exchange_strong(loaded, constInstance)) {\r\n        // intentionally empty\r\n    }\r\n}\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1664382\r\n// LWG-3661: constinit atomic<shared_ptr<T>> a(nullptr); should work\r\nconstinit atomic<shared_ptr<bool>> a{};\r\nconstinit atomic<shared_ptr<bool>> b{nullptr};\r\n#endif // ^^^ no workaround ^^^\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n// GH-3100: \"<memory> etc.: ADL should be avoided when calling _Construct_in_place and its friends\"\r\n\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\n\r\ntemplate <class T>\r\nstruct tagged_nontrivial {\r\n    tagged_nontrivial() noexcept {}\r\n    tagged_nontrivial(const tagged_nontrivial&) {}\r\n    tagged_nontrivial(tagged_nontrivial&&) noexcept {}\r\n    tagged_nontrivial& operator=(const tagged_nontrivial&) {\r\n        return *this;\r\n    }\r\n    tagged_nontrivial& operator=(tagged_nontrivial&&) noexcept {\r\n        return *this;\r\n    }\r\n    ~tagged_nontrivial() noexcept {}\r\n};\r\n\r\ntemplate <class T>\r\nvoid test_adl_proof_atomic_shared_weak_ptr_one() { // COMPILE-ONLY\r\n    {\r\n        atomic<shared_ptr<T>> sp;\r\n        (void) sp.wait({});\r\n        (void) sp.store({});\r\n        (void) sp.exchange({});\r\n        (void) sp.load();\r\n    }\r\n    {\r\n        atomic<weak_ptr<T>> wp;\r\n        (void) wp.wait({});\r\n        (void) wp.store({});\r\n        (void) wp.exchange({});\r\n        (void) wp.load();\r\n    }\r\n}\r\n\r\nvoid test_adl_proof_atomic_shared_weak_ptr() { // COMPILE-ONLY\r\n    using validator = holder<incomplete>*;\r\n\r\n    test_adl_proof_atomic_shared_weak_ptr_one<validator>();\r\n    test_adl_proof_atomic_shared_weak_ptr_one<validator[]>();\r\n    test_adl_proof_atomic_shared_weak_ptr_one<validator[42]>();\r\n    test_adl_proof_atomic_shared_weak_ptr_one<validator[][42]>();\r\n    test_adl_proof_atomic_shared_weak_ptr_one<validator[42][42]>();\r\n\r\n    using validating_nontrivial = tagged_nontrivial<holder<incomplete>>;\r\n\r\n    test_adl_proof_atomic_shared_weak_ptr_one<validating_nontrivial>();\r\n    test_adl_proof_atomic_shared_weak_ptr_one<validating_nontrivial[]>();\r\n    test_adl_proof_atomic_shared_weak_ptr_one<validating_nontrivial[42]>();\r\n    test_adl_proof_atomic_shared_weak_ptr_one<validating_nontrivial[][42]>();\r\n    test_adl_proof_atomic_shared_weak_ptr_one<validating_nontrivial[42][42]>();\r\n}\r\n#endif // ^^^ no workaround ^^^\r\n\r\nint main() {\r\n    // These values for is_always_lock_free are not required by the standard, but they are true for our implementation.\r\n    static_assert(atomic<shared_ptr<int>>::is_always_lock_free == false);\r\n    static_assert(atomic<weak_ptr<int>>::is_always_lock_free == false);\r\n    assert(atomic_sptr.is_lock_free() == false);\r\n    assert(atomic_wptr.is_lock_free() == false);\r\n\r\n    run_test(test_shared_ptr_load_store);\r\n    run_test(test_shared_ptr_exchange);\r\n    run_test(test_shared_ptr_compare_exchange_weak);\r\n    run_test(test_shared_ptr_compare_exchange_strong);\r\n    run_test(test_weak_ptr_load_store);\r\n    run_test(test_weak_ptr_exchange);\r\n    run_test(test_weak_ptr_compare_exchange_weak);\r\n    run_test(test_weak_ptr_compare_exchange_strong);\r\n    ensure_nonmember_calls_compile<atomic<shared_ptr<int>>>();\r\n    ensure_nonmember_calls_compile<atomic<weak_ptr<int>>>();\r\n    run_test(test_shared_ptr_arr_load_store);\r\n    run_test(test_shared_ptr_arr_exchange);\r\n    run_test(test_shared_ptr_arr_compare_exchange_weak);\r\n    run_test(test_shared_ptr_arr_compare_exchange_strong);\r\n    run_test(test_weak_ptr_arr_load_store);\r\n    run_test(test_weak_ptr_arr_exchange);\r\n    run_test(test_weak_ptr_arr_compare_exchange_weak);\r\n    run_test(test_weak_ptr_arr_compare_exchange_strong);\r\n    ensure_nonmember_calls_compile<atomic<shared_ptr<int[]>>>();\r\n    ensure_nonmember_calls_compile<atomic<weak_ptr<int[]>>>();\r\n    run_test(test_shared_ptr_arrn_load_store);\r\n    run_test(test_shared_ptr_arrn_exchange);\r\n    run_test(test_shared_ptr_arrn_compare_exchange_weak);\r\n    run_test(test_shared_ptr_arrn_compare_exchange_strong);\r\n    run_test(test_weak_ptr_arrn_load_store);\r\n    run_test(test_weak_ptr_arrn_exchange);\r\n    run_test(test_weak_ptr_arrn_compare_exchange_weak);\r\n    run_test(test_weak_ptr_arrn_compare_exchange_strong);\r\n    ensure_nonmember_calls_compile<atomic<shared_ptr<int[2]>>>();\r\n    ensure_nonmember_calls_compile<atomic<weak_ptr<int[2]>>>();\r\n    ensure_nonmember_calls_compile<atomic<shared_ptr<int[][2]>>>();\r\n    ensure_nonmember_calls_compile<atomic<weak_ptr<int[][2]>>>();\r\n    ensure_nonmember_calls_compile<atomic<shared_ptr<int[2][2]>>>();\r\n    ensure_nonmember_calls_compile<atomic<weak_ptr<int[2][2]>>>();\r\n    ensure_member_calls_compile<atomic<shared_ptr<int[][2]>>>();\r\n    ensure_member_calls_compile<atomic<weak_ptr<int[][2]>>>();\r\n    ensure_member_calls_compile<atomic<shared_ptr<int[2][2]>>>();\r\n    ensure_member_calls_compile<atomic<weak_ptr<int[2][2]>>>();\r\n\r\n    // LWG-3893: LWG-3661 broke atomic<shared_ptr<T>> a; a = nullptr;\r\n    static_assert(is_nothrow_assignable_v<atomic<shared_ptr<bool>>&, nullptr_t>);\r\n    static_assert(is_nothrow_assignable_v<atomic<shared_ptr<int>>&, nullptr_t>);\r\n    static_assert(is_nothrow_assignable_v<atomic<shared_ptr<int[]>>&, nullptr_t>);\r\n    static_assert(is_nothrow_assignable_v<atomic<shared_ptr<int[][2]>>&, nullptr_t>);\r\n    static_assert(is_nothrow_assignable_v<atomic<shared_ptr<int[2][2]>>&, nullptr_t>);\r\n\r\n#ifdef _DEBUG\r\n    sptr0 = {};\r\n    sptr1 = {};\r\n    wptr0 = {};\r\n    wptr1 = {};\r\n    atomic_sptr.store({});\r\n    atomic_wptr.store({});\r\n\r\n    sarrptr0 = {};\r\n    sarrptr1 = {};\r\n    warrptr0 = {};\r\n    warrptr1 = {};\r\n    atomic_sarrptr.store({});\r\n    atomic_warrptr.store({});\r\n\r\n    sarrnptr0 = {};\r\n    sarrnptr1 = {};\r\n    warrnptr0 = {};\r\n    warrnptr1 = {};\r\n    atomic_sarrnptr.store({});\r\n    atomic_warrnptr.store({});\r\n    assert(!_CrtDumpMemoryLeaks());\r\n#endif // _DEBUG\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0753R2_manipulators_for_cpp_synchronized_buffered_ostream/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0753R2_manipulators_for_cpp_synchronized_buffered_ostream/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <ios>\r\n#include <memory>\r\n#include <sstream>\r\n#include <streambuf>\r\n#include <string>\r\n#include <syncstream>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Ty, bool ThrowOnSync = false>\r\nclass string_buffer : public basic_streambuf<Ty, char_traits<Ty>> { // represents the wrapped object in syncbuf\r\npublic:\r\n    string_buffer()  = default;\r\n    ~string_buffer() = default;\r\n\r\n    streamsize xsputn(const Ty* ptr, streamsize n) override {\r\n        str.append(ptr, static_cast<string::size_type>(n));\r\n        return n;\r\n    }\r\n\r\n    int sync() override {\r\n        if constexpr (ThrowOnSync) {\r\n            return -1;\r\n        } else {\r\n            return 0;\r\n        }\r\n    }\r\n\r\n    string str;\r\n};\r\n\r\n\r\ntemplate <class Ty, class Alloc = void, bool ThrowOnSync = false>\r\nvoid test_osyncstream_manipulators(\r\n    string_buffer<typename Ty::char_type, ThrowOnSync>* buf = nullptr, bool buffer_can_sync = true) {\r\n    using char_type   = Ty::char_type;\r\n    using traits_type = Ty::traits_type;\r\n\r\n    static_assert(is_base_of_v<basic_ostream<char_type, traits_type>, Ty>);\r\n\r\n    Ty os{buf};\r\n    os << \"Some input\";\r\n\r\n    assert(addressof(emit_on_flush(os)) == addressof(os));\r\n    if constexpr (is_base_of_v<basic_osyncstream<char_type, traits_type, Alloc>, Ty>) {\r\n        const auto aSyncbuf = static_cast<basic_syncbuf<char_type, traits_type, Alloc>*>(os.rdbuf());\r\n        assert(aSyncbuf->_Stl_internal_check_get_emit_on_sync() == true);\r\n        if (buf) {\r\n            assert(buf->str == \"\");\r\n        }\r\n    }\r\n\r\n    assert(addressof(flush_emit(os)) == addressof(os));\r\n    if constexpr (is_base_of_v<basic_osyncstream<char_type, traits_type, Alloc>, Ty>) {\r\n        if constexpr (ThrowOnSync) {\r\n            assert(os.rdstate() == ios_base::badbit);\r\n        } else {\r\n            if (buf) {\r\n                assert(os.rdstate() == ios_base::goodbit);\r\n            } else {\r\n                assert(os.rdstate() == ios_base::badbit);\r\n            }\r\n        }\r\n\r\n        if (buf) {\r\n            assert(buf->str == \"Some input\");\r\n            buf->str.clear();\r\n        }\r\n        os.clear();\r\n        os << \"Another input\";\r\n    }\r\n\r\n    assert(addressof(noemit_on_flush(os)) == addressof(os));\r\n    if constexpr (is_base_of_v<basic_osyncstream<char_type, traits_type, Alloc>, Ty>) {\r\n        const auto aSyncbuf = static_cast<basic_syncbuf<char_type, traits_type, Alloc>*>(os.rdbuf());\r\n        assert(aSyncbuf->_Stl_internal_check_get_emit_on_sync() == false);\r\n    }\r\n\r\n    assert(addressof(flush_emit(os)) == addressof(os));\r\n    if constexpr (is_base_of_v<basic_osyncstream<char_type, traits_type, Alloc>, Ty>) {\r\n        const auto state = (buf && buffer_can_sync) ? ios_base::goodbit : ios_base::badbit;\r\n        assert(os.rdstate() == state);\r\n        if (buf) {\r\n            assert(buf->str == \"Another input\");\r\n        }\r\n        os.clear();\r\n    }\r\n\r\n    if (buf) {\r\n        buf->str.clear();\r\n    }\r\n}\r\n\r\ntemplate <class Ty>\r\nclass throwing_string_buffer : public basic_streambuf<Ty, char_traits<Ty>> {\r\npublic:\r\n    throwing_string_buffer()  = default;\r\n    ~throwing_string_buffer() = default;\r\n\r\n    streamsize xsputn(const Ty*, streamsize) override {\r\n        throw ios_base::failure{\"test exception\"};\r\n    }\r\n};\r\n\r\nvoid test_lwg_3571() {\r\n    // LWG-3571: \"flush_emit should set badbit if the emit call fails\"\r\n    {\r\n        osyncstream stream(nullptr);\r\n        stream << flush_emit;\r\n        assert(stream.rdstate() == ios_base::badbit);\r\n    }\r\n    {\r\n        stringstream inner;\r\n        osyncstream stream(inner);\r\n        stream << \"Hello World\";\r\n        stream.setstate(ios_base::failbit);\r\n        assert((stream.rdstate() & ios_base::badbit) == ios_base::goodbit);\r\n        stream << flush_emit;\r\n        assert(stream.rdstate() & ios_base::badbit);\r\n        assert(inner.str() == \"\");\r\n    }\r\n    {\r\n        throwing_string_buffer<char> inner;\r\n        osyncstream stream(&inner);\r\n        stream << \"Hello World\";\r\n        stream.exceptions(ios_base::failbit | ios_base::badbit);\r\n        assert((stream.rdstate() & ios_base::badbit) == ios_base::goodbit);\r\n        try {\r\n            stream << flush_emit;\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            assert(stream.rdstate() & ios_base::badbit);\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_lwg_3570() {\r\n    // LWG-3570: \"basic_osyncstream::emit should be an unformatted output function\"\r\n    {\r\n        stringstream inner;\r\n        osyncstream stream(inner);\r\n        stream << \"Hello World\";\r\n        stream.setstate(ios_base::failbit);\r\n        assert((stream.rdstate() & ios_base::badbit) == ios_base::goodbit);\r\n        stream.emit();\r\n        assert(stream.rdstate() & ios_base::badbit);\r\n        assert(inner.str() == \"\");\r\n    }\r\n    {\r\n        throwing_string_buffer<char> inner;\r\n        osyncstream stream(&inner);\r\n        stream << \"Hello World\";\r\n        stream.exceptions(ios_base::failbit | ios_base::badbit);\r\n        assert((stream.rdstate() & ios_base::badbit) == ios_base::goodbit);\r\n        try {\r\n            stream.emit();\r\n            assert(false);\r\n        } catch (const ios_base::failure&) {\r\n            assert(stream.rdstate() & ios_base::badbit);\r\n        }\r\n    }\r\n}\r\n\r\nint main() {\r\n    string_buffer<char> char_buffer{};\r\n    string_buffer<char, true> no_sync_char_buffer{};\r\n\r\n    test_osyncstream_manipulators<basic_ostream<char>>();\r\n    test_osyncstream_manipulators<basic_osyncstream<char, char_traits<char>, allocator<char>>, allocator<char>>();\r\n\r\n    test_osyncstream_manipulators<basic_ostream<char>>(&char_buffer);\r\n    test_osyncstream_manipulators<basic_osyncstream<char, char_traits<char>, allocator<char>>, allocator<char>>(\r\n        &char_buffer);\r\n\r\n    test_osyncstream_manipulators<basic_ostream<char>>(&no_sync_char_buffer);\r\n    test_osyncstream_manipulators<basic_osyncstream<char, char_traits<char>, allocator<char>>, allocator<char>>(\r\n        &no_sync_char_buffer, false);\r\n\r\n    test_lwg_3571();\r\n    test_lwg_3570();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0758R1_is_nothrow_convertible/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0758R1_is_nothrow_convertible/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nstruct Cat {};\r\n\r\nstruct ExplicitlyConvertibleFromCat {\r\n    explicit ExplicitlyConvertibleFromCat(const Cat&) {}\r\n};\r\n\r\nstruct ImplicitlyConvertibleFromCat {\r\n    ImplicitlyConvertibleFromCat(const Cat&) {}\r\n};\r\n\r\nstruct ImplicitlyNothrowConvertibleFromCat {\r\n    ImplicitlyNothrowConvertibleFromCat(const Cat&) noexcept {}\r\n};\r\n\r\nstruct NothrowAssignableFromCat {\r\n    NothrowAssignableFromCat& operator=(const Cat&) noexcept;\r\n};\r\n\r\nstruct ImplicitlyNothrowConvertibleFromRvalueRefToCat {\r\n    ImplicitlyNothrowConvertibleFromRvalueRefToCat(Cat&&) noexcept;\r\n};\r\n\r\nstruct NothrowConvertibleToAnything {\r\n    template <class T>\r\n    operator T() noexcept;\r\n};\r\nstruct ConvertibleToAnything {\r\n    template <class T>\r\n    operator T();\r\n};\r\n\r\nstruct Tiger : Cat {};\r\n\r\nSTATIC_ASSERT(!is_nothrow_convertible<Cat, ExplicitlyConvertibleFromCat>::value);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<Cat, ExplicitlyConvertibleFromCat>);\r\nSTATIC_ASSERT(!is_nothrow_convertible<Cat, ImplicitlyConvertibleFromCat>::value);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<Cat, ImplicitlyConvertibleFromCat>);\r\nSTATIC_ASSERT(is_nothrow_convertible<Cat, ImplicitlyNothrowConvertibleFromCat>::value);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<Cat, ImplicitlyNothrowConvertibleFromCat>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<int, int>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<char, unsigned char>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<char, signed char>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<float, int>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<float, Cat>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<ImplicitlyNothrowConvertibleFromCat, Cat>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<Tiger, Cat>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<Cat, Tiger>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<NothrowConvertibleToAnything, Cat>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<ConvertibleToAnything, Cat>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<void, void>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<const void, void>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<void, const void>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<const volatile void, void>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<void, const volatile void>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<Cat, const volatile void>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<void, Cat>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<Cat, NothrowAssignableFromCat>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<Cat, ImplicitlyNothrowConvertibleFromRvalueRefToCat>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<const Cat&, ImplicitlyNothrowConvertibleFromRvalueRefToCat>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<ImplicitlyNothrowConvertibleFromRvalueRefToCat, Cat>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<int (&)(int, long), int (&)(int, long)>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<int (&)(int, long), int (*)(int, long)>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<int (*)(int, long), int (*)(int, long)>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<int (*)(int, long), long (*)(int, long)>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<int (*)(int, long), int (*)(long, long)>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<int(int, long), int (*)(int, long)>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<int(int, long), int (&)(int, long)>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<int(int, long) const, int(const int, long)>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<int(int, long) const, int(int, long) const>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<int (Cat::*)(int, int (*)(int, long)), int (Cat::*)(int, int (*)(int, long))>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<Cat, Cat&>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<Cat&, Cat>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<Cat, const Cat&>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<Cat, const Cat>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<Cat, const volatile Cat>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<Cat, Cat&&>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<Cat, const Cat&&>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<Cat, const volatile Cat&&>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<Cat, Cat*>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<Cat*, const Cat*>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<int, char>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<int, signed char>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<int, unsigned char>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<double, char>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<double, signed char>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<double, unsigned char>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<int, bool>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<bool, int>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<int, long long>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<int[], int*>);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<int[1], int*>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<int[], int[]>);\r\nSTATIC_ASSERT(!is_nothrow_convertible_v<int[], int[1]>);\r\n\r\n// Also test GH-4317 <type_traits>: some traits are aliases and fail when used with parameter packs\r\n\r\ntemplate <class... Ts>\r\nusing aliased_is_nothrow_convertible = is_nothrow_convertible<Ts...>;\r\n\r\ntemplate <class T, template <class...> class Tmpl>\r\nconstexpr bool is_specialization_of_v = false;\r\ntemplate <class... Ts, template <class...> class Tmpl>\r\nconstexpr bool is_specialization_of_v<Tmpl<Ts...>, Tmpl> = true;\r\n\r\nSTATIC_ASSERT(is_specialization_of_v<is_nothrow_convertible<void, void>, is_nothrow_convertible>);\r\nSTATIC_ASSERT(!is_specialization_of_v<aliased_is_nothrow_convertible<void, void>, aliased_is_nothrow_convertible>);\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n// Also test that is_nothrow_convertible/is_nothrow_convertible_v are ADL-proof\r\n\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\n\r\nSTATIC_ASSERT(is_nothrow_convertible<holder<incomplete>*, holder<incomplete>*>::value);\r\nSTATIC_ASSERT(is_nothrow_convertible_v<holder<incomplete>*, holder<incomplete>*>);\r\n#endif // ^^^ no workaround ^^^\r\n\r\n// VSO_0105317_expression_sfinae and VSO_0000000_type_traits provide\r\n// additional coverage of this machinery\r\n"
  },
  {
    "path": "tests/std/tests/P0768R1_spaceship_cpos/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0768R1_spaceship_cpos/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Test the customization point objects in N4861 [cmp.alg].\r\n\r\n#include <bit>\r\n#include <cassert>\r\n#include <compare>\r\n#include <cstddef>\r\n#include <limits>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n// Intentionally not `using namespace std;` because we need to test ADL.\r\nusing std::bit_cast, std::compare_partial_order_fallback, std::compare_strong_order_fallback,\r\n    std::compare_weak_order_fallback, std::declval, std::extent_v, std::is_same_v, std::numeric_limits, std::pair,\r\n    std::partial_ordering, std::size_t, std::strong_ordering, std::weak_ordering;\r\n\r\n// Define test machinery.\r\nstruct IllFormed {};\r\n\r\ntemplate <const auto& CPO, typename E, typename F>\r\nstruct CpoResultImpl {\r\n    using type = IllFormed;\r\n};\r\n\r\ntemplate <const auto& CPO, typename E, typename F>\r\n    requires requires { CPO(declval<E>(), declval<F>()); }\r\nstruct CpoResultImpl<CPO, E, F> {\r\n    using type = decltype(CPO(declval<E>(), declval<F>()));\r\n};\r\n\r\ntemplate <const auto& CPO, typename E, typename F = E>\r\nusing CpoResult = CpoResultImpl<CPO, E, F>::type;\r\n\r\ntemplate <const auto& CPO, typename E, typename F = E>\r\nconstexpr bool NoexceptCpo = noexcept(CPO(declval<E>(), declval<F>()));\r\n\r\n// Test when the decayed types differ.\r\nstatic_assert(is_same_v<CpoResult<std::strong_order, int, long>, IllFormed>); // [cmp.alg]/1.1\r\nstatic_assert(is_same_v<CpoResult<std::weak_order, int, long>, IllFormed>); // [cmp.alg]/2.1\r\nstatic_assert(is_same_v<CpoResult<std::partial_order, int, long>, IllFormed>); // [cmp.alg]/3.1\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, int, long>, IllFormed>); // [cmp.alg]/4.1\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, int, long>, IllFormed>); // [cmp.alg]/5.1\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, int, long>, IllFormed>); // [cmp.alg]/6.1\r\n\r\n// Also test when the decayed types differ, with floating-point.\r\nnamespace {\r\n    using D = double;\r\n    using L = long double;\r\n    static_assert(is_same_v<CpoResult<std::strong_order, D, L>, IllFormed>); // [cmp.alg]/1.1\r\n    static_assert(is_same_v<CpoResult<std::weak_order, D, L>, IllFormed>); // [cmp.alg]/2.1\r\n    static_assert(is_same_v<CpoResult<std::partial_order, D, L>, IllFormed>); // [cmp.alg]/3.1\r\n    static_assert(is_same_v<CpoResult<compare_strong_order_fallback, D, L>, IllFormed>); // [cmp.alg]/4.1\r\n    static_assert(is_same_v<CpoResult<compare_weak_order_fallback, D, L>, IllFormed>); // [cmp.alg]/5.1\r\n    static_assert(is_same_v<CpoResult<compare_partial_order_fallback, D, L>, IllFormed>); // [cmp.alg]/6.1\r\n} // unnamed namespace\r\n\r\n// Test when the type isn't comparable at all.\r\nstruct NotComparable {};\r\nstatic_assert(is_same_v<CpoResult<std::strong_order, NotComparable>, IllFormed>); // [cmp.alg]/1.5\r\nstatic_assert(is_same_v<CpoResult<std::weak_order, NotComparable>, IllFormed>); // [cmp.alg]/2.6\r\nstatic_assert(is_same_v<CpoResult<std::partial_order, NotComparable>, IllFormed>); // [cmp.alg]/3.5\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, NotComparable>, IllFormed>); // [cmp.alg]/4.4\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, NotComparable>, IllFormed>); // [cmp.alg]/5.4\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, NotComparable>, IllFormed>); // [cmp.alg]/6.4\r\n\r\n// Define test machinery for ADL.\r\ninline constexpr bool Throwing    = false;\r\ninline constexpr bool NonThrowing = true;\r\n\r\nnamespace TestAdl {\r\n    template <bool NE = NonThrowing>\r\n    struct StrongType {\r\n        int val;\r\n    };\r\n\r\n    template <bool NE>\r\n    [[nodiscard]] constexpr strong_ordering strong_order(const StrongType<NE>& left, const StrongType<NE>& right)\r\n        noexcept(NE) {\r\n        return left.val <=> right.val;\r\n    }\r\n\r\n    template <bool NE = NonThrowing>\r\n    struct WeakType {\r\n        int val;\r\n    };\r\n\r\n    template <bool NE>\r\n    [[nodiscard]] constexpr weak_ordering weak_order(const WeakType<NE>& left, const WeakType<NE>& right) noexcept(NE) {\r\n        return left.val <=> right.val;\r\n    }\r\n\r\n    template <bool NE = NonThrowing>\r\n    struct PartialType {\r\n        int val;\r\n    };\r\n\r\n    template <bool NE>\r\n    [[nodiscard]] constexpr partial_ordering partial_order(const PartialType<NE>& left, const PartialType<NE>& right)\r\n        noexcept(NE) {\r\n        return left.val <=> right.val;\r\n    }\r\n} // namespace TestAdl\r\n\r\n// Define test machinery for ADL, when the return type is a weird user-defined type\r\n// with a conversion operator to a Standard comparison category type.\r\nnamespace TestUdt {\r\n    template <typename Ordering, bool NE>\r\n    struct WeirdOrdering {\r\n        Ordering ordering;\r\n\r\n        constexpr explicit operator Ordering() const noexcept(NE) {\r\n            return ordering;\r\n        }\r\n\r\n        template <typename AnythingElse>\r\n        constexpr explicit operator AnythingElse() const = delete;\r\n    };\r\n\r\n    template <bool NE = NonThrowing>\r\n    struct StrongWeird {\r\n        int val;\r\n    };\r\n\r\n    template <bool NE>\r\n    [[nodiscard]] constexpr WeirdOrdering<strong_ordering, NE> strong_order(\r\n        const StrongWeird<NE>& left, const StrongWeird<NE>& right) noexcept {\r\n        return {left.val <=> right.val};\r\n    }\r\n\r\n    template <bool NE = NonThrowing>\r\n    struct WeakWeird {\r\n        int val;\r\n    };\r\n\r\n    template <bool NE>\r\n    [[nodiscard]] constexpr WeirdOrdering<weak_ordering, NE> weak_order(\r\n        const WeakWeird<NE>& left, const WeakWeird<NE>& right) noexcept {\r\n        return {left.val <=> right.val};\r\n    }\r\n\r\n    template <bool NE = NonThrowing>\r\n    struct PartialWeird {\r\n        int val;\r\n    };\r\n\r\n    template <bool NE>\r\n    [[nodiscard]] constexpr WeirdOrdering<partial_ordering, NE> partial_order(\r\n        const PartialWeird<NE>& left, const PartialWeird<NE>& right) noexcept {\r\n        return {left.val <=> right.val};\r\n    }\r\n} // namespace TestUdt\r\n\r\n// Define test machinery for compare_three_way.\r\ntemplate <bool NE = NonThrowing>\r\nstruct SpaceshipType {\r\n    int val;\r\n\r\n    [[nodiscard]] constexpr auto operator<=>(const SpaceshipType&) const noexcept(NE) = default;\r\n};\r\n\r\n// Define test machinery for fallbacks.\r\ntemplate <int I = 0>\r\nstruct Fallback {\r\n    static constexpr int UnorderedVal = -1000;\r\n\r\n    int val{UnorderedVal};\r\n\r\n    // I == 0: Normal.\r\n\r\n    // I == 1: E == F can throw.\r\n    // I == 2: E == F is ill-formed.\r\n    // I == 3: E == F returns int.\r\n    // I == 4: E == F returns void.\r\n    constexpr auto operator==(const Fallback& other) const noexcept(I != 1)\r\n        requires (I != 2)\r\n    {\r\n        const bool result{val == other.val && val != UnorderedVal};\r\n\r\n        if constexpr (I == 3) {\r\n            return static_cast<int>(result);\r\n        } else if constexpr (I == 4) {\r\n            return;\r\n        } else {\r\n            return result;\r\n        }\r\n    }\r\n\r\n    // I == 5: E < F can throw.\r\n    // I == 6: E < F is ill-formed.\r\n    // I == 7: E < F returns int.\r\n    // I == 8: E < F returns void.\r\n    constexpr auto operator<(const Fallback& other) const noexcept(I != 5)\r\n        requires (I != 6)\r\n    {\r\n        const bool result{val < other.val && val != UnorderedVal && other.val != UnorderedVal};\r\n\r\n        if constexpr (I == 7) {\r\n            return static_cast<int>(result);\r\n        } else if constexpr (I == 8) {\r\n            return;\r\n        } else {\r\n            return result;\r\n        }\r\n    }\r\n\r\n    // I == 9: F < E is ill-formed.\r\n    constexpr bool operator<(Fallback&) const noexcept\r\n        requires (I == 9)\r\n    = delete;\r\n\r\n    // I == 10: F < E can throw.\r\n    // I == 11: F < E returns int.\r\n    // I == 12: F < E returns void.\r\n    // I == 13: F < E returns bool.\r\n    constexpr auto operator<(Fallback& other) const noexcept(I != 10)\r\n        requires (I >= 10 && I <= 13)\r\n    {\r\n        const bool result{val < other.val && val != UnorderedVal && other.val != UnorderedVal};\r\n\r\n        if constexpr (I == 11) {\r\n            return static_cast<int>(result);\r\n        } else if constexpr (I == 12) {\r\n            return;\r\n        } else {\r\n            return result;\r\n        }\r\n    }\r\n};\r\n\r\n// Test when the type is comparable through ADL. Part A, return types.\r\nstatic_assert(is_same_v<CpoResult<std::strong_order, TestAdl::StrongType<>>, strong_ordering>); // [cmp.alg]/1.2\r\nstatic_assert(is_same_v<CpoResult<std::weak_order, TestAdl::WeakType<>>, weak_ordering>); // [cmp.alg]/2.2\r\nstatic_assert(is_same_v<CpoResult<std::partial_order, TestAdl::PartialType<>>, partial_ordering>); // [cmp.alg]/3.2\r\n\r\n// Test floating-point types. Part A, return types. Also test decay.\r\nstatic_assert(is_same_v<CpoResult<std::strong_order, float>, strong_ordering>); // [cmp.alg]/1.3\r\nstatic_assert(is_same_v<CpoResult<std::strong_order, double>, strong_ordering>); // [cmp.alg]/1.3\r\nstatic_assert(is_same_v<CpoResult<std::strong_order, long double>, strong_ordering>); // [cmp.alg]/1.3\r\n\r\nstatic_assert(is_same_v<CpoResult<std::strong_order, double, const double&>, strong_ordering>); // [cmp.alg]/1.3\r\nstatic_assert(is_same_v<CpoResult<std::strong_order, const double&, double>, strong_ordering>); // [cmp.alg]/1.3\r\nstatic_assert(is_same_v<CpoResult<std::strong_order, const double&>, strong_ordering>); // [cmp.alg]/1.3\r\n\r\nstatic_assert(is_same_v<CpoResult<std::weak_order, float>, weak_ordering>); // [cmp.alg]/2.3\r\nstatic_assert(is_same_v<CpoResult<std::weak_order, double>, weak_ordering>); // [cmp.alg]/2.3\r\nstatic_assert(is_same_v<CpoResult<std::weak_order, long double>, weak_ordering>); // [cmp.alg]/2.3\r\n\r\nstatic_assert(is_same_v<CpoResult<std::weak_order, double, const double&>, weak_ordering>); // [cmp.alg]/2.3\r\nstatic_assert(is_same_v<CpoResult<std::weak_order, const double&, double>, weak_ordering>); // [cmp.alg]/2.3\r\nstatic_assert(is_same_v<CpoResult<std::weak_order, const double&>, weak_ordering>); // [cmp.alg]/2.3\r\n\r\n// Test when the type is comparable through compare_three_way. Part A, return types.\r\nstatic_assert(is_same_v<CpoResult<std::strong_order, int>, strong_ordering>); // [cmp.alg]/1.4\r\nstatic_assert(is_same_v<CpoResult<std::weak_order, int>, weak_ordering>); // [cmp.alg]/2.4\r\nstatic_assert(is_same_v<CpoResult<std::partial_order, int>, partial_ordering>); // [cmp.alg]/3.3\r\n\r\nstatic_assert(is_same_v<CpoResult<std::strong_order, SpaceshipType<>>, strong_ordering>); // [cmp.alg]/1.4\r\nstatic_assert(is_same_v<CpoResult<std::weak_order, SpaceshipType<>>, weak_ordering>); // [cmp.alg]/2.4\r\nstatic_assert(is_same_v<CpoResult<std::partial_order, SpaceshipType<>>, partial_ordering>); // [cmp.alg]/3.3\r\n\r\n// Test when the type is comparable through stronger ADL. Part A, return types.\r\nstatic_assert(is_same_v<CpoResult<std::weak_order, TestAdl::StrongType<>>, weak_ordering>); // [cmp.alg]/2.5\r\nstatic_assert(is_same_v<CpoResult<std::partial_order, TestAdl::StrongType<>>, partial_ordering>); // [cmp.alg]/3.4\r\nstatic_assert(is_same_v<CpoResult<std::partial_order, TestAdl::WeakType<>>, partial_ordering>); // [cmp.alg]/3.4\r\n\r\n// Test weird ADL cases. Part A, return types.\r\nstatic_assert(is_same_v<CpoResult<std::strong_order, TestUdt::StrongWeird<>>, strong_ordering>); // [cmp.alg]/1.2\r\nstatic_assert(is_same_v<CpoResult<std::weak_order, TestUdt::WeakWeird<>>, weak_ordering>); // [cmp.alg]/2.2\r\nstatic_assert(is_same_v<CpoResult<std::partial_order, TestUdt::PartialWeird<>>, partial_ordering>); // [cmp.alg]/3.2\r\n\r\nstatic_assert(is_same_v<CpoResult<std::weak_order, TestUdt::StrongWeird<>>, weak_ordering>); // [cmp.alg]/2.5\r\nstatic_assert(is_same_v<CpoResult<std::partial_order, TestUdt::StrongWeird<>>, partial_ordering>); // [cmp.alg]/3.4\r\nstatic_assert(is_same_v<CpoResult<std::partial_order, TestUdt::WeakWeird<>>, partial_ordering>); // [cmp.alg]/3.4\r\n\r\n// Test non-fallback cases, just enough to verify CPO usage. Part A, return types. See [cmp.alg]/4.2, 5.2, and 6.2.\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, TestAdl::StrongType<>>, strong_ordering>);\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, TestAdl::WeakType<>>, weak_ordering>);\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, TestAdl::PartialType<>>, partial_ordering>);\r\n\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, SpaceshipType<>>, strong_ordering>);\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, SpaceshipType<>>, weak_ordering>);\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, SpaceshipType<>>, partial_ordering>);\r\n\r\n// Test fallbacks. Part A, return types.\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, Fallback<0>>, strong_ordering>); // [cmp.alg]/4.3\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, Fallback<1>>, strong_ordering>); // [cmp.alg]/4.3\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, Fallback<2>>, IllFormed>); // [cmp.alg]/4.3\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, Fallback<3>>, strong_ordering>); // [cmp.alg]/4.3\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, Fallback<4>>, IllFormed>); // [cmp.alg]/4.3\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, Fallback<5>>, strong_ordering>); // [cmp.alg]/4.3\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, Fallback<6>>, IllFormed>); // [cmp.alg]/4.3\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, Fallback<7>>, strong_ordering>); // [cmp.alg]/4.3\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, Fallback<8>>, IllFormed>); // [cmp.alg]/4.3\r\n\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, Fallback<0>>, weak_ordering>); // [cmp.alg]/5.3\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, Fallback<1>>, weak_ordering>); // [cmp.alg]/5.3\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, Fallback<2>>, IllFormed>); // [cmp.alg]/5.3\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, Fallback<3>>, weak_ordering>); // [cmp.alg]/5.3\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, Fallback<4>>, IllFormed>); // [cmp.alg]/5.3\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, Fallback<5>>, weak_ordering>); // [cmp.alg]/5.3\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, Fallback<6>>, IllFormed>); // [cmp.alg]/5.3\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, Fallback<7>>, weak_ordering>); // [cmp.alg]/5.3\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, Fallback<8>>, IllFormed>); // [cmp.alg]/5.3\r\n\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, Fallback<0>>, partial_ordering>); // [cmp.alg]/6.3\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, Fallback<1>>, partial_ordering>); // [cmp.alg]/6.3\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, Fallback<2>>, IllFormed>); // [cmp.alg]/6.3\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, Fallback<3>>, partial_ordering>); // [cmp.alg]/6.3\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, Fallback<4>>, IllFormed>); // [cmp.alg]/6.3\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, Fallback<5>>, partial_ordering>); // [cmp.alg]/6.3\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, Fallback<6>>, IllFormed>); // [cmp.alg]/6.3\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, Fallback<7>>, partial_ordering>); // [cmp.alg]/6.3\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, Fallback<8>>, IllFormed>); // [cmp.alg]/6.3\r\n\r\nnamespace {\r\n    using Partial = partial_ordering;\r\n    template <int I>\r\n    using F = Fallback<I>;\r\n\r\n    static_assert(is_same_v<CpoResult<compare_partial_order_fallback, F<9>, const F<9>>, IllFormed>); // [cmp.alg]/6.3\r\n    static_assert(is_same_v<CpoResult<compare_partial_order_fallback, F<10>, const F<10>>, Partial>); // [cmp.alg]/6.3\r\n    static_assert(is_same_v<CpoResult<compare_partial_order_fallback, F<11>, const F<11>>, Partial>); // [cmp.alg]/6.3\r\n    static_assert(is_same_v<CpoResult<compare_partial_order_fallback, F<12>, const F<12>>, IllFormed>); // [cmp.alg]/6.3\r\n    static_assert(is_same_v<CpoResult<compare_partial_order_fallback, F<13>, const F<13>>, Partial>); // [cmp.alg]/6.3\r\n} // unnamed namespace\r\n\r\n// Test strengthened requirements in P2167R3: compare_*_order_fallback CPOs require return types to be boolean-testable.\r\nenum class ResultKind : bool {\r\n    Bad,\r\n    Good,\r\n};\r\n\r\ntemplate <ResultKind K>\r\nstruct ComparisonResult {\r\n    bool value;\r\n\r\n    constexpr operator bool() const noexcept {\r\n        return value;\r\n    }\r\n\r\n    constexpr auto operator!() const noexcept {\r\n        if constexpr (K == ResultKind::Good) {\r\n            return ComparisonResult{!value};\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <ResultKind EqKind, ResultKind LeKind>\r\nstruct BoolTestType {\r\n    friend constexpr ComparisonResult<EqKind> operator==(BoolTestType, BoolTestType) noexcept {\r\n        return ComparisonResult<EqKind>{true};\r\n    }\r\n\r\n    friend constexpr ComparisonResult<LeKind> operator<(BoolTestType, BoolTestType) noexcept {\r\n        return ComparisonResult<LeKind>{false};\r\n    }\r\n};\r\n\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, BoolTestType<ResultKind::Bad, ResultKind::Bad>>,\r\n    IllFormed>); // [cmp.alg]/4.3\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, BoolTestType<ResultKind::Bad, ResultKind::Good>>,\r\n    IllFormed>); // [cmp.alg]/4.3\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, BoolTestType<ResultKind::Good, ResultKind::Bad>>,\r\n    IllFormed>); // [cmp.alg]/4.3\r\nstatic_assert(is_same_v<CpoResult<compare_strong_order_fallback, BoolTestType<ResultKind::Good, ResultKind::Good>>,\r\n    strong_ordering>); // [cmp.alg]/4.3\r\n\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, BoolTestType<ResultKind::Bad, ResultKind::Bad>>,\r\n    IllFormed>); // [cmp.alg]/5.3\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, BoolTestType<ResultKind::Bad, ResultKind::Good>>,\r\n    IllFormed>); // [cmp.alg]/5.3\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, BoolTestType<ResultKind::Good, ResultKind::Bad>>,\r\n    IllFormed>); // [cmp.alg]/5.3\r\nstatic_assert(is_same_v<CpoResult<compare_weak_order_fallback, BoolTestType<ResultKind::Good, ResultKind::Good>>,\r\n    weak_ordering>); // [cmp.alg]/5.3\r\n\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, BoolTestType<ResultKind::Bad, ResultKind::Bad>>,\r\n    IllFormed>); // [cmp.alg]/6.3\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, BoolTestType<ResultKind::Bad, ResultKind::Good>>,\r\n    IllFormed>); // [cmp.alg]/6.3\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, BoolTestType<ResultKind::Good, ResultKind::Bad>>,\r\n    IllFormed>); // [cmp.alg]/6.3\r\nstatic_assert(is_same_v<CpoResult<compare_partial_order_fallback, BoolTestType<ResultKind::Good, ResultKind::Good>>,\r\n    partial_ordering>); // [cmp.alg]/6.3\r\n\r\n// Test when the type is comparable through ADL. Part B, exception specifications.\r\nstatic_assert(!NoexceptCpo<std::strong_order, TestAdl::StrongType<Throwing>>); // [cmp.alg]/1.2\r\nstatic_assert(!NoexceptCpo<std::weak_order, TestAdl::WeakType<Throwing>>); // [cmp.alg]/2.2\r\nstatic_assert(!NoexceptCpo<std::partial_order, TestAdl::PartialType<Throwing>>); // [cmp.alg]/3.2\r\n\r\nstatic_assert(NoexceptCpo<std::strong_order, TestAdl::StrongType<NonThrowing>>); // [cmp.alg]/1.2\r\nstatic_assert(NoexceptCpo<std::weak_order, TestAdl::WeakType<NonThrowing>>); // [cmp.alg]/2.2\r\nstatic_assert(NoexceptCpo<std::partial_order, TestAdl::PartialType<NonThrowing>>); // [cmp.alg]/3.2\r\n\r\n// Test floating-point types. Part B, exception specifications.\r\nstatic_assert(NoexceptCpo<std::strong_order, float>); // [cmp.alg]/1.3\r\nstatic_assert(NoexceptCpo<std::strong_order, double>); // [cmp.alg]/1.3\r\nstatic_assert(NoexceptCpo<std::strong_order, long double>); // [cmp.alg]/1.3\r\n\r\nstatic_assert(NoexceptCpo<std::weak_order, float>); // [cmp.alg]/2.3\r\nstatic_assert(NoexceptCpo<std::weak_order, double>); // [cmp.alg]/2.3\r\nstatic_assert(NoexceptCpo<std::weak_order, long double>); // [cmp.alg]/2.3\r\n\r\n// Test when the type is comparable through compare_three_way. Part B, exception specifications.\r\nstatic_assert(NoexceptCpo<std::strong_order, int>); // [cmp.alg]/1.4\r\nstatic_assert(NoexceptCpo<std::weak_order, int>); // [cmp.alg]/2.4\r\nstatic_assert(NoexceptCpo<std::partial_order, int>); // [cmp.alg]/3.3\r\n\r\nstatic_assert(!NoexceptCpo<std::strong_order, SpaceshipType<Throwing>>); // [cmp.alg]/1.4\r\nstatic_assert(!NoexceptCpo<std::weak_order, SpaceshipType<Throwing>>); // [cmp.alg]/2.4\r\nstatic_assert(!NoexceptCpo<std::partial_order, SpaceshipType<Throwing>>); // [cmp.alg]/3.3\r\n\r\nstatic_assert(NoexceptCpo<std::strong_order, SpaceshipType<NonThrowing>>); // [cmp.alg]/1.4\r\nstatic_assert(NoexceptCpo<std::weak_order, SpaceshipType<NonThrowing>>); // [cmp.alg]/2.4\r\nstatic_assert(NoexceptCpo<std::partial_order, SpaceshipType<NonThrowing>>); // [cmp.alg]/3.3\r\n\r\n// Test when the type is comparable through stronger ADL. Part B, exception specifications.\r\nstatic_assert(!NoexceptCpo<std::weak_order, TestAdl::StrongType<Throwing>>); // [cmp.alg]/2.5\r\nstatic_assert(!NoexceptCpo<std::partial_order, TestAdl::StrongType<Throwing>>); // [cmp.alg]/3.4\r\nstatic_assert(!NoexceptCpo<std::partial_order, TestAdl::WeakType<Throwing>>); // [cmp.alg]/3.4\r\n\r\nstatic_assert(NoexceptCpo<std::weak_order, TestAdl::StrongType<NonThrowing>>); // [cmp.alg]/2.5\r\nstatic_assert(NoexceptCpo<std::partial_order, TestAdl::StrongType<NonThrowing>>); // [cmp.alg]/3.4\r\nstatic_assert(NoexceptCpo<std::partial_order, TestAdl::WeakType<NonThrowing>>); // [cmp.alg]/3.4\r\n\r\n// Test weird ADL cases. Part B, exception specifications.\r\nstatic_assert(!NoexceptCpo<std::strong_order, TestUdt::StrongWeird<Throwing>>); // [cmp.alg]/1.2\r\nstatic_assert(!NoexceptCpo<std::weak_order, TestUdt::WeakWeird<Throwing>>); // [cmp.alg]/2.2\r\nstatic_assert(!NoexceptCpo<std::partial_order, TestUdt::PartialWeird<Throwing>>); // [cmp.alg]/3.2\r\n\r\nstatic_assert(NoexceptCpo<std::strong_order, TestUdt::StrongWeird<NonThrowing>>); // [cmp.alg]/1.2\r\nstatic_assert(NoexceptCpo<std::weak_order, TestUdt::WeakWeird<NonThrowing>>); // [cmp.alg]/2.2\r\nstatic_assert(NoexceptCpo<std::partial_order, TestUdt::PartialWeird<NonThrowing>>); // [cmp.alg]/3.2\r\n\r\nstatic_assert(!NoexceptCpo<std::weak_order, TestUdt::StrongWeird<Throwing>>); // [cmp.alg]/2.5\r\nstatic_assert(!NoexceptCpo<std::partial_order, TestUdt::StrongWeird<Throwing>>); // [cmp.alg]/3.4\r\nstatic_assert(!NoexceptCpo<std::partial_order, TestUdt::WeakWeird<Throwing>>); // [cmp.alg]/3.4\r\n\r\nstatic_assert(NoexceptCpo<std::weak_order, TestUdt::StrongWeird<NonThrowing>>); // [cmp.alg]/2.5\r\nstatic_assert(NoexceptCpo<std::partial_order, TestUdt::StrongWeird<NonThrowing>>); // [cmp.alg]/3.4\r\nstatic_assert(NoexceptCpo<std::partial_order, TestUdt::WeakWeird<NonThrowing>>); // [cmp.alg]/3.4\r\n\r\n// Test non-fallback cases. Part B, exception specifications.\r\nstatic_assert(!NoexceptCpo<compare_strong_order_fallback, SpaceshipType<Throwing>>); // [cmp.alg]/4.2\r\nstatic_assert(!NoexceptCpo<compare_weak_order_fallback, SpaceshipType<Throwing>>); // [cmp.alg]/5.2\r\nstatic_assert(!NoexceptCpo<compare_partial_order_fallback, SpaceshipType<Throwing>>); // [cmp.alg]/6.2\r\n\r\nstatic_assert(NoexceptCpo<compare_strong_order_fallback, SpaceshipType<NonThrowing>>); // [cmp.alg]/4.2\r\nstatic_assert(NoexceptCpo<compare_weak_order_fallback, SpaceshipType<NonThrowing>>); // [cmp.alg]/5.2\r\nstatic_assert(NoexceptCpo<compare_partial_order_fallback, SpaceshipType<NonThrowing>>); // [cmp.alg]/6.2\r\n\r\n// Test fallbacks. Part B, exception specifications.\r\nstatic_assert(NoexceptCpo<compare_strong_order_fallback, Fallback<0>>); // [cmp.alg]/4.3\r\nstatic_assert(!NoexceptCpo<compare_strong_order_fallback, Fallback<1>>); // [cmp.alg]/4.3\r\nstatic_assert(!NoexceptCpo<compare_strong_order_fallback, Fallback<5>>); // [cmp.alg]/4.3\r\n\r\nstatic_assert(NoexceptCpo<compare_weak_order_fallback, Fallback<0>>); // [cmp.alg]/5.3\r\nstatic_assert(!NoexceptCpo<compare_weak_order_fallback, Fallback<1>>); // [cmp.alg]/5.3\r\nstatic_assert(!NoexceptCpo<compare_weak_order_fallback, Fallback<5>>); // [cmp.alg]/5.3\r\n\r\nstatic_assert(NoexceptCpo<compare_partial_order_fallback, Fallback<0>>); // [cmp.alg]/6.3\r\nstatic_assert(!NoexceptCpo<compare_partial_order_fallback, Fallback<1>>); // [cmp.alg]/6.3\r\nstatic_assert(!NoexceptCpo<compare_partial_order_fallback, Fallback<5>>); // [cmp.alg]/6.3\r\n\r\nstatic_assert(!NoexceptCpo<compare_partial_order_fallback, Fallback<10>, const Fallback<10>>); // [cmp.alg]/6.3\r\n\r\n// Define test machinery for compile-time and run-time behavior.\r\ntemplate <const auto& CPO, typename T>\r\nconstexpr void test_behavior() {\r\n    const T one{1};\r\n    const T two{2};\r\n\r\n    using Ordering = CpoResult<CPO, const T&>;\r\n\r\n    assert(CPO(one, two) == Ordering::less);\r\n    assert(CPO(two, two) == Ordering::equivalent);\r\n    assert(CPO(two, one) == Ordering::greater);\r\n}\r\n\r\n// This takes an array of pair<int, Floating>, where the ints are arbitrary \"ranks\" for the std::weak_order equivalence\r\n// classes. It tests std::strong_order, std::weak_order, and std::partial_order with every permutation of values.\r\ntemplate <typename PairArray>\r\nconstexpr void test_ranked_values(const PairArray& rank_value_pairs) {\r\n    constexpr size_t N = extent_v<PairArray>;\r\n\r\n    for (size_t l_idx = 0; l_idx < N; ++l_idx) {\r\n        const auto& [l_rank, left] = rank_value_pairs[l_idx];\r\n        for (size_t r_idx = 0; r_idx < N; ++r_idx) {\r\n            const auto& [r_rank, right] = rank_value_pairs[r_idx];\r\n\r\n            assert(std::strong_order(left, right) == l_idx <=> r_idx); // [cmp.alg]/1.3\r\n            assert(std::weak_order(left, right) == l_rank <=> r_rank); // [cmp.alg]/2.3\r\n            assert(std::partial_order(left, right) == left <=> right); // [cmp.alg]/3.3 (uses compare_three_way)\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <typename Floating>\r\nconstexpr void test_floating() {\r\n    if constexpr (is_same_v<Floating, float>) {\r\n        const pair<int, float> rank_value_pairs[]{\r\n#ifndef _M_CEE // TRANSITION, VSO-1666161\r\n            {10, bit_cast<float>(0xFFFFFFFFu)}, // negative quiet NaN, all payload bits set\r\n            {10, bit_cast<float>(0xFFC01234u)}, // negative quiet NaN, some payload bits set\r\n            {10, bit_cast<float>(0xFFC00000u)}, // negative quiet NaN, no payload bits set\r\n#endif // ^^^ no workaround ^^^\r\n#ifdef __clang__ // TRANSITION, MSVC \"quiets\" signaling NaNs into quiet NaNs when constant evaluated\r\n            {10, bit_cast<float>(0xFFBFFFFFu)}, // negative signaling NaN, all payload bits set\r\n            {10, bit_cast<float>(0xFF801234u)}, // negative signaling NaN, some payload bits set\r\n            {10, bit_cast<float>(0xFF800001u)}, // negative signaling NaN, minimum payload bits set\r\n#endif // defined(__clang__)\r\n            {20, -numeric_limits<float>::infinity()}, // negative infinity\r\n            {30, -0x1.fffffep+127f}, // negative max normal\r\n            {31, -0x1.000000p-126f}, // negative min normal\r\n            {40, -0x0.fffffep-126f}, // negative max subnormal\r\n            {41, -0x0.000002p-126f}, // negative min subnormal\r\n            {50, -0.0f}, // negative zero\r\n            {50, 0.0f}, // zero\r\n            {60, 0x0.000002p-126f}, // min subnormal\r\n            {61, 0x0.fffffep-126f}, // max subnormal\r\n            {70, 0x1.000000p-126f}, // min normal\r\n            {71, 0x1.fffffep+127f}, // max normal\r\n            {80, numeric_limits<float>::infinity()}, // infinity\r\n#ifdef __clang__ // TRANSITION, MSVC \"quiets\" signaling NaNs into quiet NaNs when constant evaluated\r\n            {90, bit_cast<float>(0x7F800001u)}, // signaling NaN, minimum payload bits set\r\n            {90, bit_cast<float>(0x7F801234u)}, // signaling NaN, some payload bits set\r\n            {90, bit_cast<float>(0x7FBFFFFFu)}, // signaling NaN, all payload bits set\r\n#endif // defined(__clang__)\r\n#ifndef _M_CEE // TRANSITION, VSO-1666161\r\n            {90, bit_cast<float>(0x7FC00000u)}, // quiet NaN, no payload bits set\r\n            {90, bit_cast<float>(0x7FC01234u)}, // quiet NaN, some payload bits set\r\n            {90, bit_cast<float>(0x7FFFFFFFu)}, // quiet NaN, all payload bits set\r\n#endif // ^^^ no workaround ^^^\r\n        };\r\n\r\n        test_ranked_values(rank_value_pairs);\r\n    } else {\r\n        const pair<int, Floating> rank_value_pairs[]{\r\n            {10, bit_cast<Floating>(0xFFFFFFFFFFFFFFFFull)}, // negative quiet NaN, all payload bits set\r\n            {10, bit_cast<Floating>(0xFFF8000000001234ull)}, // negative quiet NaN, some payload bits set\r\n            {10, bit_cast<Floating>(0xFFF8000000000000ull)}, // negative quiet NaN, no payload bits set\r\n#ifdef __clang__ // TRANSITION, MSVC \"quiets\" signaling NaNs into quiet NaNs when constant evaluated\r\n            {10, bit_cast<Floating>(0xFFF7FFFFFFFFFFFFull)}, // negative signaling NaN, all payload bits set\r\n            {10, bit_cast<Floating>(0xFFF0000000001234ull)}, // negative signaling NaN, some payload bits set\r\n            {10, bit_cast<Floating>(0xFFF0000000000001ull)}, // negative signaling NaN, minimum payload bits set\r\n#endif // defined(__clang__)\r\n            {20, -numeric_limits<Floating>::infinity()}, // negative infinity\r\n            {30, -0x1.fffffffffffffp+1023}, // negative max normal\r\n            {31, -0x1.0000000000000p-1022}, // negative min normal\r\n            {40, -0x0.fffffffffffffp-1022}, // negative max subnormal\r\n            {41, -0x0.0000000000001p-1022}, // negative min subnormal\r\n            {50, -0.0}, // negative zero\r\n            {50, 0.0}, // zero\r\n            {60, 0x0.0000000000001p-1022}, // min subnormal\r\n            {61, 0x0.fffffffffffffp-1022}, // max subnormal\r\n            {70, 0x1.0000000000000p-1022}, // min normal\r\n            {71, 0x1.fffffffffffffp+1023}, // max normal\r\n            {80, numeric_limits<Floating>::infinity()}, // infinity\r\n#ifdef __clang__ // TRANSITION, MSVC \"quiets\" signaling NaNs into quiet NaNs when constant evaluated\r\n            {90, bit_cast<Floating>(0x7FF0000000000001ull)}, // signaling NaN, minimum payload bits set\r\n            {90, bit_cast<Floating>(0x7FF0000000001234ull)}, // signaling NaN, some payload bits set\r\n            {90, bit_cast<Floating>(0x7FF7FFFFFFFFFFFFull)}, // signaling NaN, all payload bits set\r\n#endif // defined(__clang__)\r\n            {90, bit_cast<Floating>(0x7FF8000000000000ull)}, // quiet NaN, no payload bits set\r\n            {90, bit_cast<Floating>(0x7FF8000000001234ull)}, // quiet NaN, some payload bits set\r\n            {90, bit_cast<Floating>(0x7FFFFFFFFFFFFFFFull)}, // quiet NaN, all payload bits set\r\n        };\r\n\r\n        test_ranked_values(rank_value_pairs);\r\n    }\r\n}\r\n\r\n[[nodiscard]] constexpr bool test() {\r\n    // Test when the type is comparable through ADL. Part C, compile-time and run-time behavior.\r\n    test_behavior<std::strong_order, TestAdl::StrongType<>>(); // [cmp.alg]/1.2\r\n    test_behavior<std::weak_order, TestAdl::WeakType<>>(); // [cmp.alg]/2.2\r\n    test_behavior<std::partial_order, TestAdl::PartialType<>>(); // [cmp.alg]/3.2\r\n\r\n    // Test floating-point types. Part C, compile-time and run-time behavior.\r\n    test_behavior<std::strong_order, float>(); // [cmp.alg]/1.3\r\n    test_behavior<std::strong_order, double>(); // [cmp.alg]/1.3\r\n    test_behavior<std::strong_order, long double>(); // [cmp.alg]/1.3\r\n\r\n    test_behavior<std::weak_order, float>(); // [cmp.alg]/2.3\r\n    test_behavior<std::weak_order, double>(); // [cmp.alg]/2.3\r\n    test_behavior<std::weak_order, long double>(); // [cmp.alg]/2.3\r\n\r\n    test_behavior<std::partial_order, float>(); // [cmp.alg]/3.3 (uses compare_three_way)\r\n    test_behavior<std::partial_order, double>(); // [cmp.alg]/3.3 (uses compare_three_way)\r\n    test_behavior<std::partial_order, long double>(); // [cmp.alg]/3.3 (uses compare_three_way)\r\n\r\n    test_floating<float>();\r\n    test_floating<double>();\r\n    test_floating<long double>();\r\n\r\n    // Test when the type is comparable through compare_three_way. Part C, compile-time and run-time behavior.\r\n    test_behavior<std::strong_order, int>(); // [cmp.alg]/1.4\r\n    test_behavior<std::weak_order, int>(); // [cmp.alg]/2.4\r\n    test_behavior<std::partial_order, int>(); // [cmp.alg]/3.3\r\n\r\n    test_behavior<std::strong_order, SpaceshipType<>>(); // [cmp.alg]/1.4\r\n    test_behavior<std::weak_order, SpaceshipType<>>(); // [cmp.alg]/2.4\r\n    test_behavior<std::partial_order, SpaceshipType<>>(); // [cmp.alg]/3.3\r\n\r\n    // Test when the type is comparable through stronger ADL. Part C, compile-time and run-time behavior.\r\n    test_behavior<std::weak_order, TestAdl::StrongType<>>(); // [cmp.alg]/2.5\r\n    test_behavior<std::partial_order, TestAdl::StrongType<>>(); // [cmp.alg]/3.4\r\n    test_behavior<std::partial_order, TestAdl::WeakType<>>(); // [cmp.alg]/3.4\r\n\r\n    // Test weird ADL cases. Part C, compile-time and run-time behavior.\r\n    test_behavior<std::strong_order, TestUdt::StrongWeird<>>(); // [cmp.alg]/1.2\r\n    test_behavior<std::weak_order, TestUdt::WeakWeird<>>(); // [cmp.alg]/2.2\r\n    test_behavior<std::partial_order, TestUdt::PartialWeird<>>(); // [cmp.alg]/3.2\r\n\r\n    test_behavior<std::weak_order, TestUdt::StrongWeird<>>(); // [cmp.alg]/2.5\r\n    test_behavior<std::partial_order, TestUdt::StrongWeird<>>(); // [cmp.alg]/3.4\r\n    test_behavior<std::partial_order, TestUdt::WeakWeird<>>(); // [cmp.alg]/3.4\r\n\r\n    // Test non-fallback cases. Part C, compile-time and run-time behavior.\r\n    test_behavior<compare_strong_order_fallback, SpaceshipType<>>(); // [cmp.alg]/4.2\r\n    test_behavior<compare_weak_order_fallback, SpaceshipType<>>(); // [cmp.alg]/5.2\r\n    test_behavior<compare_partial_order_fallback, SpaceshipType<>>(); // [cmp.alg]/6.2\r\n\r\n    // Test fallbacks. Part C, compile-time and run-time behavior.\r\n    test_behavior<compare_strong_order_fallback, Fallback<>>(); // [cmp.alg]/4.3\r\n    test_behavior<compare_weak_order_fallback, Fallback<>>(); // [cmp.alg]/5.3\r\n    test_behavior<compare_partial_order_fallback, Fallback<>>(); // [cmp.alg]/6.3\r\n\r\n    assert(compare_partial_order_fallback(Fallback{}, Fallback{}) == partial_ordering::unordered); // [cmp.alg]/6.3\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    assert(test());\r\n    static_assert(test());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0768R1_spaceship_operator/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0768R1_spaceship_operator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <compare>\r\n#include <type_traits>\r\n\r\n// See GH-3581 for details\r\n#ifdef __clang__\r\n#pragma clang diagnostic error \"-Wzero-as-null-pointer-constant\"\r\n#endif // __clang__\r\n\r\nenum class comp { equal, less, greater, unordered };\r\n\r\ntemplate <comp Z, class T>\r\nconstexpr bool test_order(const T val) {\r\n    // Validate that val is ordered relative to literal zero according to Z\r\n    assert((val == 0) == (Z == comp::equal));\r\n    assert((0 == val) == (Z == comp::equal));\r\n\r\n    assert((val != 0) == (Z != comp::equal));\r\n    assert((0 != val) == (Z != comp::equal));\r\n\r\n    assert((val < 0) == (Z == comp::less));\r\n    assert((0 > val) == (Z == comp::less));\r\n\r\n    assert((val > 0) == (Z == comp::greater));\r\n    assert((0 < val) == (Z == comp::greater));\r\n\r\n    assert((val <= 0) == (Z != comp::greater && Z != comp::unordered));\r\n    assert((0 >= val) == (Z != comp::greater && Z != comp::unordered));\r\n\r\n    assert((val >= 0) == (Z != comp::less && Z != comp::unordered));\r\n    assert((0 <= val) == (Z != comp::less && Z != comp::unordered));\r\n\r\n    assert(std::is_eq(val) == (Z == comp::equal));\r\n    assert(std::is_neq(val) == (Z != comp::equal));\r\n    assert(std::is_lt(val) == (Z == comp::less));\r\n    assert(std::is_lteq(val) == (Z != comp::greater && Z != comp::unordered));\r\n    assert(std::is_gt(val) == (Z == comp::greater));\r\n    assert(std::is_gteq(val) == (Z != comp::less && Z != comp::unordered));\r\n\r\n    // Validate that equality is reflexive for comparison category types\r\n    assert(val == val);\r\n    assert(!(val != val));\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_orderings() {\r\n    assert(test_order<comp::equal>(std::partial_ordering::equivalent));\r\n    assert(test_order<comp::less>(std::partial_ordering::less));\r\n    assert(test_order<comp::greater>(std::partial_ordering::greater));\r\n    assert(test_order<comp::unordered>(std::partial_ordering::unordered));\r\n\r\n    assert(test_order<comp::equal>(std::weak_ordering::equivalent));\r\n    assert(test_order<comp::less>(std::weak_ordering::less));\r\n    assert(test_order<comp::greater>(std::weak_ordering::greater));\r\n\r\n    assert(test_order<comp::equal>(std::strong_ordering::equal));\r\n    assert(test_order<comp::equal>(std::strong_ordering::equivalent));\r\n    assert(test_order<comp::less>(std::strong_ordering::less));\r\n    assert(test_order<comp::greater>(std::strong_ordering::greater));\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_spaceships() {\r\n    // Exhaustively validate x <=> 0 and 0 <=> x for all values of each comparison category type.\r\n    // Guards against regression of GH-1050: \"0 <=> partial_ordering::unordered returns invalid value\".\r\n    assert(std::partial_ordering::less <=> 0 == std::partial_ordering::less);\r\n    assert(0 <=> std::partial_ordering::less == std::partial_ordering::greater);\r\n    assert(std::partial_ordering::equivalent <=> 0 == std::partial_ordering::equivalent);\r\n    assert(0 <=> std::partial_ordering::equivalent == std::partial_ordering::equivalent);\r\n    assert(std::partial_ordering::greater <=> 0 == std::partial_ordering::greater);\r\n    assert(0 <=> std::partial_ordering::greater == std::partial_ordering::less);\r\n    assert(std::partial_ordering::unordered <=> 0 == std::partial_ordering::unordered);\r\n    assert(0 <=> std::partial_ordering::unordered == std::partial_ordering::unordered);\r\n\r\n    assert(std::weak_ordering::less <=> 0 == std::weak_ordering::less);\r\n    assert(0 <=> std::weak_ordering::less == std::weak_ordering::greater);\r\n    assert(std::weak_ordering::equivalent <=> 0 == std::weak_ordering::equivalent);\r\n    assert(0 <=> std::weak_ordering::equivalent == std::weak_ordering::equivalent);\r\n    assert(std::weak_ordering::greater <=> 0 == std::weak_ordering::greater);\r\n    assert(0 <=> std::weak_ordering::greater == std::weak_ordering::less);\r\n\r\n    assert(std::strong_ordering::less <=> 0 == std::strong_ordering::less);\r\n    assert(0 <=> std::strong_ordering::less == std::strong_ordering::greater);\r\n    assert(std::strong_ordering::equal <=> 0 == std::strong_ordering::equal);\r\n    assert(0 <=> std::strong_ordering::equal == std::strong_ordering::equal);\r\n    assert(std::strong_ordering::greater <=> 0 == std::strong_ordering::greater);\r\n    assert(0 <=> std::strong_ordering::greater == std::strong_ordering::less);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Expected, class... Categories>\r\nconstexpr bool test_common_cc = std::is_same_v<std::common_comparison_category_t<Categories...>, Expected>;\r\n\r\n// The following references are to N4842 [class.spaceship].\r\n\r\n// (4.1) If any T_i is not a comparison category type, U is void.\r\nstatic_assert(test_common_cc<void, int>);\r\nstatic_assert(test_common_cc<void, int, std::strong_ordering>);\r\nstatic_assert(test_common_cc<void, std::strong_ordering, int>);\r\n\r\n// (4.2) Otherwise, if at least one T_i is std::partial_ordering, U is std::partial_ordering.\r\nstatic_assert(test_common_cc<std::partial_ordering, std::partial_ordering>);\r\nstatic_assert(test_common_cc<std::partial_ordering, std::partial_ordering, std::strong_ordering, std::weak_ordering>);\r\nstatic_assert(test_common_cc<std::partial_ordering, std::weak_ordering, std::partial_ordering, std::strong_ordering>);\r\nstatic_assert(test_common_cc<std::partial_ordering, std::strong_ordering, std::weak_ordering, std::partial_ordering>);\r\n\r\n// (4.3) Otherwise, if at least one T_i is std::weak_ordering, U is std::weak_ordering.\r\nstatic_assert(test_common_cc<std::weak_ordering, std::weak_ordering>);\r\nstatic_assert(test_common_cc<std::weak_ordering, std::weak_ordering, std::strong_ordering, std::strong_ordering>);\r\nstatic_assert(test_common_cc<std::weak_ordering, std::strong_ordering, std::weak_ordering, std::strong_ordering>);\r\nstatic_assert(test_common_cc<std::weak_ordering, std::strong_ordering, std::strong_ordering, std::weak_ordering>);\r\n\r\n// (4.4) Otherwise, U is std::strong_ordering.\r\nstatic_assert(test_common_cc<std::strong_ordering, std::strong_ordering>);\r\nstatic_assert(test_common_cc<std::strong_ordering, std::strong_ordering, std::strong_ordering, std::strong_ordering>);\r\n// [Note: In particular, this is the result when n is 0.-end note]\r\nstatic_assert(test_common_cc<std::strong_ordering>);\r\n\r\n// Per P1614R2, common_type_t<T, U> must be the same type as common_comparison_category_t<T, U> when T and U are both\r\n// comparison category types.\r\ntemplate <class T, class U>\r\nconstexpr bool test_common_type() {\r\n    using CommonType = std::common_type_t<T, U>;\r\n    static_assert(std::is_same_v<std::common_type_t<U, T>, CommonType>, \"common_type should be symmetric\");\r\n\r\n    using CommonComparisonType = std::common_comparison_category_t<T, U>;\r\n    static_assert(std::is_same_v<std::common_comparison_category_t<U, T>, CommonComparisonType>,\r\n        \"common_comparison_category should be symmetric\");\r\n\r\n    static_assert(std::is_same_v<CommonType, CommonComparisonType>,\r\n        \"A pair of comparison category types should have the same common type and common comparison type.\");\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(test_common_type<std::partial_ordering, std::partial_ordering>());\r\nstatic_assert(test_common_type<std::partial_ordering, std::weak_ordering>());\r\nstatic_assert(test_common_type<std::partial_ordering, std::strong_ordering>());\r\nstatic_assert(test_common_type<std::weak_ordering, std::partial_ordering>());\r\nstatic_assert(test_common_type<std::weak_ordering, std::weak_ordering>());\r\nstatic_assert(test_common_type<std::weak_ordering, std::strong_ordering>());\r\nstatic_assert(test_common_type<std::strong_ordering, std::partial_ordering>());\r\nstatic_assert(test_common_type<std::strong_ordering, std::weak_ordering>());\r\nstatic_assert(test_common_type<std::strong_ordering, std::strong_ordering>());\r\n\r\nconstexpr auto my_cmp_three_way = [](const auto& left, const auto& right) { return left <=> right; };\r\n\r\ntemplate <class Left, class Right>\r\nconstexpr auto compare(const Left& left, const Right& right) {\r\n    using std::begin, std::end;\r\n    auto ret = std::lexicographical_compare_three_way(begin(left), end(left), begin(right), end(right));\r\n    auto ret2 =\r\n        std::lexicographical_compare_three_way(begin(left), end(left), begin(right), end(right), my_cmp_three_way);\r\n    assert(ret == ret2);\r\n    return ret;\r\n}\r\n\r\ntemplate <class Ty1, class Ty2 = Ty1>\r\nconstexpr bool test_algorithm2() {\r\n    std::array<Ty1, 4> original{{0, 1, 2, 3}};\r\n\r\n    std::array<Ty2, 4> same{{0, 1, 2, 3}};\r\n    std::array<Ty2, 4> sameSizeAndLesser{{0, 1, 1, 3}};\r\n    std::array<Ty2, 4> sameSizeAndGreater{{0, 1, 3, 3}};\r\n\r\n    std::array<Ty2, 3> shorter{{0, 1, 2}};\r\n    std::array<Ty2, 3> shorterAndGreater{{0, 2, 3}};\r\n\r\n    std::array<Ty2, 5> longer{{0, 1, 2, 3, 4}};\r\n    std::array<Ty2, 5> longerAndLesser{{0, 1, 2, 2, 4}};\r\n\r\n    assert(compare(original, original) == 0);\r\n\r\n    assert(compare(original, same) == 0);\r\n    assert(compare(same, original) == 0);\r\n\r\n    assert(compare(original, sameSizeAndLesser) > 0);\r\n    assert(compare(sameSizeAndLesser, original) < 0);\r\n\r\n    assert(compare(original, sameSizeAndGreater) < 0);\r\n    assert(compare(sameSizeAndGreater, original) > 0);\r\n\r\n    assert(compare(original, shorter) > 0);\r\n    assert(compare(shorter, original) < 0);\r\n\r\n    assert(compare(original, shorterAndGreater) < 0);\r\n    assert(compare(shorterAndGreater, original) > 0);\r\n\r\n    assert(compare(original, longer) < 0);\r\n    assert(compare(longer, original) > 0);\r\n\r\n    assert(compare(original, longerAndLesser) > 0);\r\n    assert(compare(longerAndLesser, original) < 0);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Ty1>\r\nvoid test_algorithm() {\r\n    static_assert(test_algorithm2<Ty1>());\r\n    assert(test_algorithm2<Ty1>());\r\n}\r\n\r\ntemplate <class Ty1, class Ty2>\r\nvoid test_algorithm() {\r\n    static_assert(test_algorithm2<Ty1, Ty2>());\r\n    static_assert(test_algorithm2<Ty2, Ty1>());\r\n    assert((test_algorithm2<Ty1, Ty2>()));\r\n    assert((test_algorithm2<Ty2, Ty1>()));\r\n}\r\n\r\nint main() {\r\n    static_assert(test_orderings());\r\n    test_orderings();\r\n\r\n    static_assert(test_spaceships());\r\n    test_spaceships();\r\n\r\n    test_algorithm<int>();\r\n    test_algorithm<char>();\r\n    test_algorithm<unsigned char>();\r\n    test_algorithm<int, char>();\r\n    test_algorithm<int, unsigned char>();\r\n    test_algorithm<char, unsigned char>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0769R2_shift_left_shift_right/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0769R2_shift_left_shift_right/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <bool HasSwap>\r\nstruct MoveOnly {\r\n    ptrdiff_t value;\r\n\r\n    explicit MoveOnly(const ptrdiff_t v) : value(v) {}\r\n\r\n    // Only here to allow vector::emplace_back to work\r\n    MoveOnly(const MoveOnly&) = delete;\r\n    MoveOnly(MoveOnly&&)      = default;\r\n\r\n    MoveOnly& operator=(const MoveOnly&) = delete;\r\n    MoveOnly& operator=(MoveOnly&&)      = default;\r\n\r\n    MoveOnly& operator=(const ptrdiff_t x) {\r\n        value = x;\r\n        return *this;\r\n    }\r\n\r\n    MoveOnly& operator++() {\r\n        ++value;\r\n        return *this;\r\n    }\r\n\r\n    friend bool operator<(const MoveOnly& x, const MoveOnly& y) {\r\n        return x.value < y.value;\r\n    }\r\n    friend bool operator==(const MoveOnly& x, const MoveOnly& y) {\r\n        return x.value == y.value;\r\n    }\r\n    friend bool operator!=(const MoveOnly& x, const MoveOnly& y) {\r\n        return x.value != y.value;\r\n    }\r\n};\r\n\r\ntemplate <bool HasSwap>\r\nvoid swap(MoveOnly<HasSwap>& x, MoveOnly<HasSwap>& y) {\r\n    static_assert(HasSwap);\r\n    swap(x.value, y.value);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid fill_iota(forward_list<T>& f, const ptrdiff_t count) {\r\n    f.clear();\r\n    for (ptrdiff_t i = count; i > 0; --i) {\r\n        f.emplace_front(i);\r\n    }\r\n}\r\n\r\ntemplate <typename T>\r\nvoid fill_iota(list<T>& l, const ptrdiff_t count) {\r\n    l.clear();\r\n    for (ptrdiff_t i = 1; i <= count; ++i) {\r\n        l.emplace_back(i);\r\n    }\r\n}\r\n\r\ntemplate <typename T>\r\nvoid fill_iota(vector<T>& v, const ptrdiff_t count) {\r\n    v.clear();\r\n    for (ptrdiff_t i = 1; i <= count; ++i) {\r\n        v.emplace_back(i);\r\n    }\r\n}\r\n\r\ntemplate <typename FwdIt>\r\nvoid test_iota(FwdIt first, const FwdIt last, const ptrdiff_t min_exp, const ptrdiff_t max_exp) {\r\n    typename iterator_traits<FwdIt>::value_type min_val{min_exp};\r\n    const typename iterator_traits<FwdIt>::value_type max_val{max_exp};\r\n\r\n    if (max_val < min_val) {\r\n        assert(first == last);\r\n        return;\r\n    }\r\n\r\n    for (;; ++min_val) {\r\n        assert(first != last);\r\n        assert(*first == min_val);\r\n        ++first;\r\n\r\n        if (min_val == max_val) {\r\n            assert(first == last);\r\n            break;\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <typename Container>\r\nvoid test_case_shift_left(const ptrdiff_t tmpSize) {\r\n    Container tmp;\r\n    fill_iota(tmp, tmpSize);\r\n\r\n    for (ptrdiff_t pos_to_shift = 0; pos_to_shift < tmpSize; ++pos_to_shift) {\r\n        fill_iota(tmp, tmpSize);\r\n        test_iota(tmp.begin(), shift_left(tmp.begin(), tmp.end(), pos_to_shift), pos_to_shift + 1, tmpSize);\r\n\r\n#if _HAS_CXX23\r\n        {\r\n            fill_iota(tmp, tmpSize);\r\n            auto [first, last] = ranges::shift_left(tmp.begin(), tmp.end(), pos_to_shift);\r\n            assert(first == tmp.begin());\r\n            test_iota(first, last, pos_to_shift + 1, tmpSize);\r\n        }\r\n\r\n        {\r\n            fill_iota(tmp, tmpSize);\r\n            auto [first, last] = ranges::shift_left(tmp, pos_to_shift);\r\n            assert(first == tmp.begin());\r\n            test_iota(first, last, pos_to_shift + 1, tmpSize);\r\n        }\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n    fill_iota(tmp, tmpSize);\r\n    for (int i = 0; i < 3; ++i) {\r\n        test_iota(shift_left(tmp.begin(), tmp.end(), tmpSize + i), tmp.end(), 1, tmpSize);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    fill_iota(tmp, tmpSize);\r\n    for (int i = 0; i < 3; ++i) {\r\n        auto [first, last] = ranges::shift_left(tmp.begin(), tmp.end(), tmpSize + i);\r\n        assert(first == tmp.begin());\r\n        test_iota(last, tmp.end(), 1, tmpSize);\r\n    }\r\n\r\n    fill_iota(tmp, tmpSize);\r\n    for (int i = 0; i < 3; ++i) {\r\n        auto [first, last] = ranges::shift_left(tmp, tmpSize + i);\r\n        assert(first == tmp.begin());\r\n        test_iota(last, tmp.end(), 1, tmpSize);\r\n    }\r\n#endif // _HAS_CXX23\r\n}\r\n\r\ntemplate <typename Container>\r\nvoid test_case_shift_right(const ptrdiff_t tmpSize) {\r\n    Container tmp;\r\n    fill_iota(tmp, tmpSize);\r\n\r\n    for (ptrdiff_t pos_to_shift = 0; pos_to_shift < tmpSize; ++pos_to_shift) {\r\n        fill_iota(tmp, tmpSize);\r\n        test_iota(shift_right(tmp.begin(), tmp.end(), pos_to_shift), tmp.end(), 1, tmpSize - pos_to_shift);\r\n\r\n#if _HAS_CXX23\r\n        {\r\n            fill_iota(tmp, tmpSize);\r\n            auto [first, last] = ranges::shift_right(tmp.begin(), tmp.end(), pos_to_shift);\r\n            assert(last == tmp.end());\r\n            test_iota(first, last, 1, tmpSize - pos_to_shift);\r\n        }\r\n\r\n        {\r\n            fill_iota(tmp, tmpSize);\r\n            auto [first, last] = ranges::shift_right(tmp, pos_to_shift);\r\n            assert(last == tmp.end());\r\n            test_iota(first, last, 1, tmpSize - pos_to_shift);\r\n        }\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n    fill_iota(tmp, tmpSize);\r\n    for (int i = 0; i < 3; ++i) {\r\n        test_iota(tmp.begin(), shift_right(tmp.begin(), tmp.end(), tmpSize + i), 1, tmpSize);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    fill_iota(tmp, tmpSize);\r\n    for (int i = 0; i < 3; ++i) {\r\n        auto [first, last] = ranges::shift_right(tmp.begin(), tmp.end(), tmpSize + i);\r\n        assert(last == tmp.end());\r\n        test_iota(tmp.begin(), first, 1, tmpSize);\r\n    }\r\n\r\n    fill_iota(tmp, tmpSize);\r\n    for (int i = 0; i < 3; ++i) {\r\n        auto [first, last] = ranges::shift_right(tmp, tmpSize + i);\r\n        assert(last == tmp.end());\r\n        test_iota(tmp.begin(), first, 1, tmpSize);\r\n    }\r\n#endif // _HAS_CXX23\r\n}\r\n\r\nint main() {\r\n    for (auto sz = 0; sz != 10; ++sz) {\r\n        test_case_shift_left<forward_list<MoveOnly<false>>>(sz);\r\n        test_case_shift_left<list<MoveOnly<false>>>(sz);\r\n        test_case_shift_left<vector<MoveOnly<false>>>(sz);\r\n\r\n        test_case_shift_right<forward_list<MoveOnly<true>>>(sz);\r\n        test_case_shift_right<list<MoveOnly<false>>>(sz);\r\n        test_case_shift_right<vector<MoveOnly<false>>>(sz);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0784R7_library_machinery/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0784R7_library_machinery/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <iterator>\r\n#include <memory>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#pragma warning(disable : 4582) // '%s': constructor is not implicitly called\r\n#pragma warning(disable : 4583) // '%s': destructor is not implicitly called\r\n\r\nusing namespace std;\r\n\r\nstruct int_wrapper_copy {\r\n    constexpr int_wrapper_copy() = default;\r\n    constexpr int_wrapper_copy(const int v) : _val(v) {}\r\n\r\n    constexpr int_wrapper_copy(const int_wrapper_copy& other) : _val(other._val) {}\r\n    constexpr int_wrapper_copy& operator=(const int_wrapper_copy& other) {\r\n        _val = other._val;\r\n        return *this;\r\n    }\r\n\r\n    int_wrapper_copy(int_wrapper_copy&&)            = delete;\r\n    int_wrapper_copy& operator=(int_wrapper_copy&&) = delete;\r\n\r\n    constexpr bool operator==(const int_wrapper_copy&) const = default;\r\n\r\n    int _val = 0;\r\n};\r\n\r\nstruct int_wrapper_move {\r\n    constexpr int_wrapper_move() = default;\r\n    constexpr int_wrapper_move(const int v) : _val(v) {}\r\n\r\n    int_wrapper_move(const int_wrapper_move&)            = delete;\r\n    int_wrapper_move& operator=(const int_wrapper_move&) = delete;\r\n\r\n    constexpr int_wrapper_move(int_wrapper_move&& other) : _val(exchange(other._val, -1)) {}\r\n    constexpr int_wrapper_move& operator=(int_wrapper_move&& other) {\r\n        _val = exchange(other._val, -1);\r\n        return *this;\r\n    }\r\n\r\n    constexpr bool operator==(const int_wrapper_move&) const = default;\r\n\r\n    int _val = 0;\r\n};\r\n\r\nstatic constexpr int_wrapper_copy expected_copy[]       = {1, 2, 3, 4};\r\nstatic constexpr int_wrapper_move expected_move[]       = {1, 2, 3, 4};\r\nstatic constexpr int_wrapper_move expected_after_move[] = {-1, -1, -1, -1};\r\n\r\nconstexpr bool test() {\r\n    { // _Copy_unchecked\r\n        int_wrapper_copy input[]   = {1, 2, 3, 4};\r\n        int_wrapper_copy output[4] = {5, 6, 7, 8};\r\n\r\n        const auto result = _STD _Copy_unchecked(begin(input), end(input), begin(output));\r\n        static_assert(is_same_v<remove_const_t<decltype(result)>, int_wrapper_copy*>);\r\n        assert(result == end(output));\r\n        assert(equal(begin(expected_copy), end(expected_copy), begin(output), end(output)));\r\n    }\r\n\r\n    { // _Copy_n_unchecked4\r\n        int_wrapper_copy input[]   = {1, 2, 3, 4};\r\n        int_wrapper_copy output[4] = {5, 6, 7, 8};\r\n\r\n        const auto result = _Copy_n_unchecked4(begin(input), size(input), begin(output));\r\n        static_assert(is_same_v<remove_const_t<decltype(result)>, int_wrapper_copy*>);\r\n        assert(result == end(output));\r\n        assert(equal(begin(expected_copy), end(expected_copy), begin(output), end(output)));\r\n    }\r\n\r\n    { // _Copy_backward_unchecked\r\n        int_wrapper_copy input[]   = {1, 2, 3, 4};\r\n        int_wrapper_copy output[4] = {5, 6, 7, 8};\r\n\r\n        const auto result = _Copy_backward_unchecked(begin(input), end(input), end(output));\r\n        static_assert(is_same_v<remove_const_t<decltype(result)>, int_wrapper_copy*>);\r\n        assert(result == begin(output));\r\n        assert(equal(begin(expected_copy), end(expected_copy), begin(output), end(output)));\r\n    }\r\n\r\n#if 1 // TRANSITION, !_HAS_CXX26\r\n    if (!is_constant_evaluated())\r\n#endif // !_HAS_CXX26\r\n    { // _Uninitialized_copy_unchecked\r\n        int_wrapper_copy input[] = {1, 2, 3, 4};\r\n        int_wrapper_copy output[4];\r\n\r\n        const auto result = _Uninitialized_copy_unchecked(begin(input), end(input), begin(output));\r\n        static_assert(is_same_v<remove_const_t<decltype(result)>, int_wrapper_copy*>);\r\n        assert(result == end(output));\r\n        assert(equal(begin(expected_copy), end(expected_copy), begin(output), end(output)));\r\n    }\r\n\r\n    { // _Move_unchecked\r\n        int_wrapper_move input[]   = {1, 2, 3, 4};\r\n        int_wrapper_move output[4] = {5, 6, 7, 8};\r\n\r\n        const auto result = _STD _Move_unchecked(begin(input), end(input), begin(output));\r\n        static_assert(is_same_v<remove_const_t<decltype(result)>, int_wrapper_move*>);\r\n        assert(result == end(output));\r\n        assert(equal(begin(expected_move), end(expected_move), begin(output), end(output)));\r\n        if (is_constant_evaluated()) {\r\n            assert(equal(begin(input), end(input), begin(expected_after_move), end(expected_after_move)));\r\n        }\r\n    }\r\n\r\n    { // _Move_backward_unchecked\r\n        int_wrapper_move input[]   = {1, 2, 3, 4};\r\n        int_wrapper_move output[4] = {5, 6, 7, 8};\r\n\r\n        const auto result = _Move_backward_unchecked(begin(input), end(input), end(output));\r\n        static_assert(is_same_v<remove_const_t<decltype(result)>, int_wrapper_move*>);\r\n        assert(result == begin(output));\r\n        assert(equal(begin(expected_move), end(expected_move), begin(output), end(output)));\r\n        if (is_constant_evaluated()) {\r\n            assert(equal(begin(input), end(input), begin(expected_after_move), end(expected_after_move)));\r\n        }\r\n    }\r\n\r\n    { // _Move_backward_common\r\n        int_wrapper_move input[]   = {1, 2, 3, 4};\r\n        int_wrapper_move output[4] = {5, 6, 7, 8};\r\n\r\n        const auto result = ranges::_Move_backward_common(begin(input), end(input), end(output));\r\n        static_assert(is_same_v<remove_const_t<decltype(result)>, int_wrapper_move*>);\r\n        assert(result == begin(output));\r\n        assert(equal(begin(expected_move), end(expected_move), begin(output), end(output)));\r\n        if (is_constant_evaluated()) {\r\n            assert(equal(begin(input), end(input), begin(expected_after_move), end(expected_after_move)));\r\n        }\r\n    }\r\n\r\n#if 1 // TRANSITION, !_HAS_CXX26\r\n    if (!is_constant_evaluated())\r\n#endif // !_HAS_CXX26\r\n    { // _Uninitialized_move_unchecked\r\n        int_wrapper_move input[] = {1, 2, 3, 4};\r\n        int_wrapper_move output[4];\r\n\r\n        const auto result = _Uninitialized_move_unchecked(begin(input), end(input), begin(output));\r\n        static_assert(is_same_v<remove_const_t<decltype(result)>, int_wrapper_move*>);\r\n        assert(result == end(output));\r\n        assert(equal(begin(expected_move), end(expected_move), begin(output), end(output)));\r\n        if (is_constant_evaluated()) {\r\n            assert(equal(begin(input), end(input), begin(expected_after_move), end(expected_after_move)));\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test();\r\n    static_assert(test());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0784R7_library_support_for_more_constexpr_containers/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0784R7_library_support_for_more_constexpr_containers/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstring>\r\n#include <limits>\r\n#include <memory>\r\n#include <span>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#pragma warning(disable : 4582) // '%s': constructor is not implicitly called\r\n#pragma warning(disable : 4583) // '%s': destructor is not implicitly called\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Ty, class... Types>\r\nconcept can_std_construct_at = requires(Ty* ptr, Types&&... args) { construct_at(ptr, forward<Types>(args)...); };\r\n\r\ntemplate <class Ty, class... Types>\r\nconcept can_ranges_construct_at =\r\n    requires(Ty* ptr, Types&&... args) { ranges::construct_at(ptr, forward<Types>(args)...); };\r\n\r\ntemplate <class Ty>\r\nconcept can_ranges_destroy_at = requires(Ty* ptr) { ranges::destroy_at(ptr); };\r\n\r\ntemplate <class Ty, class... Types>\r\nconstexpr bool can_construct_at = [] {\r\n    constexpr bool result = can_std_construct_at<Ty, Types...>;\r\n    static_assert(can_ranges_construct_at<Ty, Types...> == result);\r\n    return result;\r\n}();\r\n\r\ntemplate <class T, class... Args>\r\nconstexpr bool construct_at_noexcept() {\r\n    if constexpr (can_construct_at<T, Args...>) {\r\n        constexpr bool result = noexcept(construct_at(declval<T*>(), declval<Args>()...));\r\n        static_assert(noexcept(ranges::construct_at(declval<T*>(), declval<Args>()...)) == result);\r\n        return result;\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nconstexpr bool destroy_at_noexcept() {\r\n    static_assert(noexcept(destroy_at(declval<T*>())));\r\n    if constexpr (can_ranges_destroy_at<T>) {\r\n        static_assert(noexcept(ranges::destroy_at(declval<T*>())));\r\n    }\r\n    return true;\r\n}\r\n\r\nstatic_assert(can_construct_at<int>);\r\nstatic_assert(can_construct_at<int, int>);\r\nstatic_assert(can_construct_at<int, int&>);\r\n// per LWG-3888\r\nstatic_assert(!can_construct_at<const int>);\r\nstatic_assert(!can_construct_at<const int, int>);\r\nstatic_assert(!can_construct_at<const int, int&>);\r\nstatic_assert(!can_construct_at<volatile int>);\r\nstatic_assert(!can_construct_at<volatile int, int>);\r\nstatic_assert(!can_construct_at<volatile int, int&>);\r\nstatic_assert(!can_construct_at<const volatile int>);\r\nstatic_assert(!can_construct_at<const volatile int, int>);\r\nstatic_assert(!can_construct_at<const volatile int, int&>);\r\n\r\nstatic_assert(can_construct_at<int[1]>);\r\nstatic_assert(can_construct_at<int[1][42]>);\r\nstatic_assert(!can_construct_at<int[]>);\r\nstatic_assert(!can_construct_at<int[][42]>);\r\n\r\nstruct X {};\r\n\r\nstatic_assert(!can_construct_at<int, X>);\r\nstatic_assert(!can_construct_at<X, int>);\r\n\r\n// note that indestructible isn't constructible but is construct_at-ible:\r\nstruct indestructible {\r\n    void destroy() {\r\n        this->~indestructible();\r\n    }\r\n\r\nprivate:\r\n    ~indestructible() = default;\r\n};\r\n\r\nstatic_assert(can_construct_at<indestructible>);\r\n// per LWG-3888\r\nstatic_assert(!can_construct_at<const indestructible>);\r\nstatic_assert(!can_construct_at<volatile indestructible>);\r\nstatic_assert(!can_construct_at<const volatile indestructible>);\r\n\r\nstatic_assert(can_construct_at<X>);\r\nstatic_assert(can_construct_at<X, X>);\r\nstatic_assert(can_construct_at<X, const X>);\r\nstatic_assert(can_construct_at<X, const X&>);\r\nstatic_assert(can_construct_at<X, X&>);\r\n\r\nstatic_assert(can_construct_at<string>);\r\nstatic_assert(can_construct_at<string, size_t, char>);\r\nstatic_assert(!can_construct_at<string, size_t, char, char>);\r\nstatic_assert(!can_construct_at<string, X>);\r\n\r\n// The following static_asserts test our strengthening of noexcept\r\n\r\nstatic_assert(construct_at_noexcept<int, int>());\r\n// per LWG-3888\r\nstatic_assert(!construct_at_noexcept<const int, int>());\r\nstatic_assert(!construct_at_noexcept<volatile int, int>());\r\nstatic_assert(!construct_at_noexcept<const volatile int, int>());\r\n\r\nstatic_assert(!construct_at_noexcept<string, const char (&)[6]>());\r\n// per LWG-3888\r\nstatic_assert(!construct_at_noexcept<const string, const char (&)[6]>());\r\nstatic_assert(!construct_at_noexcept<volatile string, const char (&)[6]>());\r\nstatic_assert(!construct_at_noexcept<const volatile string, const char (&)[6]>());\r\n\r\nstatic_assert(destroy_at_noexcept<int>());\r\nstatic_assert(destroy_at_noexcept<string>());\r\nstatic_assert(destroy_at_noexcept<const int>());\r\nstatic_assert(destroy_at_noexcept<const string>());\r\nstatic_assert(destroy_at_noexcept<volatile int>());\r\nstatic_assert(destroy_at_noexcept<volatile string>());\r\nstatic_assert(destroy_at_noexcept<const volatile int>());\r\nstatic_assert(destroy_at_noexcept<const volatile string>());\r\n\r\nstatic_assert(destroy_at_noexcept<int[42]>());\r\nstatic_assert(destroy_at_noexcept<string[42]>());\r\nstatic_assert(destroy_at_noexcept<const int[42]>());\r\nstatic_assert(destroy_at_noexcept<const string[42]>());\r\nstatic_assert(destroy_at_noexcept<volatile int[42]>());\r\nstatic_assert(destroy_at_noexcept<volatile string[42]>());\r\nstatic_assert(destroy_at_noexcept<const volatile int[42]>());\r\nstatic_assert(destroy_at_noexcept<const volatile string[42]>());\r\n\r\nstruct throwing_dtor {\r\n    ~throwing_dtor() noexcept(false) {}\r\n};\r\n\r\nstatic_assert(destroy_at_noexcept<throwing_dtor>());\r\nstatic_assert(destroy_at_noexcept<throwing_dtor[42]>());\r\n\r\nstatic_assert(!can_ranges_destroy_at<throwing_dtor>);\r\nstatic_assert(!can_ranges_destroy_at<throwing_dtor[42]>);\r\n\r\ntemplate <class Ty>\r\nvoid test_runtime(const Ty& val) {\r\n    alignas(Ty) unsigned char storage[sizeof(Ty)];\r\n    const auto asPtrTy = reinterpret_cast<Ty*>(&storage);\r\n    memset(storage, 42, sizeof(Ty));\r\n    assert(asPtrTy == construct_at(asPtrTy, val));\r\n    assert(*asPtrTy == val);\r\n    destroy_at(asPtrTy);\r\n\r\n    // test ranges:\r\n    memset(storage, 42, sizeof(Ty));\r\n    assert(asPtrTy == ranges::construct_at(asPtrTy, val));\r\n    assert(*asPtrTy == val);\r\n    ranges::destroy_at(asPtrTy);\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_array(const T& val) {\r\n    constexpr int N = 42;\r\n    (void) val;\r\n\r\n    alignas(T) unsigned char storage[sizeof(T) * N];\r\n    const auto ptr = reinterpret_cast<T*>(storage);\r\n\r\n    for (auto i = 0; i < N; ++i) {\r\n        construct_at(ptr + i, val);\r\n    }\r\n\r\n    destroy_at(reinterpret_cast<T(*)[N]>(ptr));\r\n\r\n    for (auto i = 0; i < N; ++i) {\r\n        ranges::construct_at(ptr + i, val);\r\n    }\r\n\r\n    ranges::destroy_at(reinterpret_cast<T(*)[N]>(ptr));\r\n}\r\n\r\ntemplate <class T>\r\nstruct storage_for {\r\n    union {\r\n        T object;\r\n    };\r\n\r\n    constexpr storage_for() noexcept {}\r\n    constexpr ~storage_for() {}\r\n};\r\n\r\nconstexpr void test_compiletime() {\r\n    {\r\n        storage_for<int> s;\r\n        construct_at(&s.object, 42);\r\n        assert(s.object == 42);\r\n        destroy_at(&s.object);\r\n\r\n        ranges::construct_at(&s.object, 1729);\r\n        assert(s.object == 1729);\r\n        ranges::destroy_at(&s.object);\r\n    }\r\n\r\n    struct nontrivial {\r\n        constexpr nontrivial(int i = 42) noexcept : x{i} {}\r\n        constexpr ~nontrivial() {}\r\n\r\n        int x = 42;\r\n    };\r\n\r\n    {\r\n        storage_for<nontrivial> s;\r\n        construct_at(&s.object, 42);\r\n        assert(s.object.x == 42);\r\n        destroy_at(&s.object);\r\n\r\n        ranges::construct_at(&s.object, 1729);\r\n        assert(s.object.x == 1729);\r\n        ranges::destroy_at(&s.object);\r\n    }\r\n}\r\nstatic_assert((test_compiletime(), true));\r\n\r\ntemplate <class T>\r\nstruct A {\r\n    T value;\r\n\r\n    constexpr A() noexcept                    = default;\r\n    constexpr A(const A&) noexcept            = default;\r\n    constexpr A& operator=(const A&) noexcept = default;\r\n    constexpr ~A()                            = default;\r\n};\r\n\r\ntemplate <class T>\r\nstruct nontrivial_A {\r\n    T value;\r\n\r\n    constexpr nontrivial_A(T in = T{}) noexcept : value(in) {}\r\n    constexpr nontrivial_A(const nontrivial_A&) noexcept            = default;\r\n    constexpr nontrivial_A& operator=(const nontrivial_A&) noexcept = default;\r\n    constexpr ~nontrivial_A() {}\r\n};\r\n\r\nconstexpr void test_compiletime_destroy_variants() {\r\n    {\r\n        allocator<A<int>> alloc{};\r\n        A<int>* a = alloc.allocate(10);\r\n        for (int i = 0; i < 10; ++i) {\r\n            construct_at(a + i);\r\n        }\r\n        destroy(a, a + 10);\r\n        alloc.deallocate(a, 10);\r\n    }\r\n    {\r\n        allocator<nontrivial_A<int>> alloc{};\r\n        nontrivial_A<int>* a = alloc.allocate(10);\r\n        for (int i = 0; i < 10; ++i) {\r\n            construct_at(a + i);\r\n        }\r\n        destroy(a, a + 10);\r\n        alloc.deallocate(a, 10);\r\n    }\r\n    {\r\n        allocator<A<int>> alloc{};\r\n        A<int>* a = alloc.allocate(10);\r\n        for (int i = 0; i < 10; ++i) {\r\n            ranges::construct_at(a + i);\r\n        }\r\n        ranges::destroy(a, a + 10);\r\n        alloc.deallocate(a, 10);\r\n    }\r\n    {\r\n        allocator<nontrivial_A<int>> alloc{};\r\n        nontrivial_A<int>* a = alloc.allocate(10);\r\n        for (int i = 0; i < 10; ++i) {\r\n            ranges::construct_at(a + i);\r\n        }\r\n        ranges::destroy(a, a + 10);\r\n        alloc.deallocate(a, 10);\r\n    }\r\n    {\r\n        allocator<A<int>> alloc{};\r\n        A<int>* a = alloc.allocate(10);\r\n        for (int i = 0; i < 10; ++i) {\r\n            ranges::construct_at(a + i);\r\n        }\r\n        span s{a, 10};\r\n        ranges::destroy(s);\r\n        alloc.deallocate(a, 10);\r\n    }\r\n    {\r\n        allocator<nontrivial_A<int>> alloc{};\r\n        nontrivial_A<int>* a = alloc.allocate(10);\r\n        for (int i = 0; i < 10; ++i) {\r\n            ranges::construct_at(a + i);\r\n        }\r\n        span s{a, 10};\r\n        ranges::destroy(s);\r\n        alloc.deallocate(a, 10);\r\n    }\r\n    {\r\n        allocator<A<int>> alloc{};\r\n        A<int>* a = alloc.allocate(10);\r\n        for (int i = 0; i < 10; ++i) {\r\n            construct_at(a + i);\r\n        }\r\n        destroy_n(a, 10);\r\n        alloc.deallocate(a, 10);\r\n    }\r\n    {\r\n        allocator<nontrivial_A<int>> alloc{};\r\n        nontrivial_A<int>* a = alloc.allocate(10);\r\n        for (int i = 0; i < 10; ++i) {\r\n            construct_at(a + i);\r\n        }\r\n        destroy_n(a, 10);\r\n        alloc.deallocate(a, 10);\r\n    }\r\n    {\r\n        allocator<A<int>> alloc{};\r\n        A<int>* a = alloc.allocate(10);\r\n        for (int i = 0; i < 10; ++i) {\r\n            ranges::construct_at(a + i);\r\n        }\r\n        ranges::destroy_n(a, 10);\r\n        alloc.deallocate(a, 10);\r\n    }\r\n    {\r\n        allocator<nontrivial_A<int>> alloc{};\r\n        nontrivial_A<int>* a = alloc.allocate(10);\r\n        for (int i = 0; i < 10; ++i) {\r\n            ranges::construct_at(a + i);\r\n        }\r\n        ranges::destroy_n(a, 10);\r\n        alloc.deallocate(a, 10);\r\n    }\r\n}\r\nstatic_assert((test_compiletime_destroy_variants(), true));\r\n\r\ntemplate <class T, bool Construct = false, bool Destroy = false>\r\nstruct Alloc {\r\n    using value_type = T;\r\n    using size_type  = size_t;\r\n\r\n    template <class U>\r\n    struct rebind {\r\n        using other = Alloc<U, Construct, Destroy>;\r\n    };\r\n\r\n    constexpr Alloc(int id_) noexcept : id(id_) {}\r\n\r\n    template <class U>\r\n    constexpr Alloc(const Alloc<U, Construct, Destroy>& al) noexcept : id(al.id) {}\r\n\r\n    constexpr value_type* allocate(size_t n) {\r\n        assert(n == 10);\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    constexpr void deallocate(value_type* ptr, size_t n) {\r\n        assert(n == 10);\r\n        allocator<T>{}.deallocate(ptr, n);\r\n    }\r\n\r\n    constexpr void construct(value_type* ptr, value_type n)\r\n        requires Construct\r\n    {\r\n        construct_at(ptr, n);\r\n    }\r\n\r\n    constexpr void destroy(value_type* ptr)\r\n        requires Destroy\r\n    {\r\n        destroy_at(ptr);\r\n    }\r\n\r\n    constexpr Alloc select_on_container_copy_construction() const noexcept {\r\n        return Alloc{id + 1};\r\n    }\r\n\r\n    constexpr size_type max_size() const noexcept {\r\n        return numeric_limits<size_type>::max() / sizeof(value_type);\r\n    }\r\n\r\n    template <class U>\r\n    constexpr bool operator==(const Alloc<U, Construct, Destroy>&) const noexcept {\r\n        return true;\r\n    }\r\n\r\n    int id;\r\n};\r\n\r\nconstexpr void test_compiletime_allocator_traits() {\r\n    {\r\n        storage_for<A<int>> a;\r\n        Alloc<A<int>> alloc{10};\r\n        assert(alloc.id == 10);\r\n\r\n        auto result = allocator_traits<Alloc<A<int>>>::allocate(alloc, 10);\r\n        assert(result != nullptr);\r\n        allocator_traits<Alloc<A<int>>>::deallocate(alloc, result, 10);\r\n\r\n        allocator_traits<Alloc<A<int>>>::construct(alloc, &a.object);\r\n        assert(a.object.value == 0);\r\n        allocator_traits<Alloc<A<int>>>::destroy(alloc, &a.object);\r\n\r\n        assert(allocator_traits<Alloc<A<int>>>::select_on_container_copy_construction(alloc).id == 11);\r\n\r\n        assert(allocator_traits<Alloc<A<int>>>::max_size(alloc)\r\n               == numeric_limits<Alloc<A<int>>::size_type>::max() / sizeof(Alloc<A<int>>::value_type));\r\n    }\r\n    {\r\n        storage_for<nontrivial_A<int>> a;\r\n        Alloc<nontrivial_A<int>> alloc{10};\r\n        assert(alloc.id == 10);\r\n\r\n        auto result = allocator_traits<Alloc<nontrivial_A<int>>>::allocate(alloc, 10);\r\n        assert(result != nullptr);\r\n        allocator_traits<Alloc<nontrivial_A<int>>>::deallocate(alloc, result, 10);\r\n\r\n        allocator_traits<Alloc<nontrivial_A<int>>>::construct(alloc, &a.object, 10);\r\n        assert(a.object.value == 10);\r\n        allocator_traits<Alloc<nontrivial_A<int>>>::destroy(alloc, &a.object);\r\n\r\n        assert(allocator_traits<Alloc<nontrivial_A<int>>>::select_on_container_copy_construction(alloc).id == 11);\r\n\r\n        assert(allocator_traits<Alloc<nontrivial_A<int>>>::max_size(alloc)\r\n               == numeric_limits<Alloc<nontrivial_A<int>>::size_type>::max()\r\n                      / sizeof(Alloc<nontrivial_A<int>>::value_type));\r\n    }\r\n    {\r\n        storage_for<nontrivial_A<int>> a;\r\n        Alloc<nontrivial_A<int>, true> alloc{10};\r\n\r\n        allocator_traits<Alloc<nontrivial_A<int>, true>>::construct(alloc, &a.object, 10);\r\n        assert(a.object.value == 10);\r\n        allocator_traits<Alloc<nontrivial_A<int>, true>>::destroy(alloc, &a.object);\r\n    }\r\n    {\r\n        storage_for<nontrivial_A<int>> a;\r\n        Alloc<nontrivial_A<int>, false, true> alloc{10};\r\n\r\n        allocator_traits<Alloc<nontrivial_A<int>, false, true>>::construct(alloc, &a.object, 10);\r\n        assert(a.object.value == 10);\r\n        allocator_traits<Alloc<nontrivial_A<int>, false, true>>::destroy(alloc, &a.object);\r\n    }\r\n    {\r\n        storage_for<nontrivial_A<int>> a;\r\n        Alloc<nontrivial_A<int>, true, true> alloc{10};\r\n\r\n        allocator_traits<Alloc<nontrivial_A<int>, true, true>>::construct(alloc, &a.object, 10);\r\n        assert(a.object.value == 10);\r\n        allocator_traits<Alloc<nontrivial_A<int>, true, true>>::destroy(alloc, &a.object);\r\n    }\r\n}\r\nstatic_assert((test_compiletime_allocator_traits(), true));\r\n\r\nconstexpr void test_compiletime_allocator() {\r\n    {\r\n        auto result = allocator<A<int>>{}.allocate(10);\r\n        allocator<A<int>>{}.deallocate(result, 10);\r\n    }\r\n    {\r\n        auto result = allocator<nontrivial_A<int>>{}.allocate(10);\r\n        allocator<nontrivial_A<int>>{}.deallocate(result, 10);\r\n    }\r\n}\r\nstatic_assert((test_compiletime_allocator(), true));\r\n\r\nconstexpr void test_compiletime_operators() {\r\n    {\r\n        allocator<int> allocatorA{};\r\n        allocator<float> allocatorB{};\r\n        constexpr auto allocatorC = allocatorA;\r\n\r\n        static_assert(allocatorA == allocatorB);\r\n        static_assert(!(allocatorA != allocatorB));\r\n        static_assert(allocatorA == allocatorC);\r\n    }\r\n}\r\nstatic_assert((test_compiletime_operators(), true));\r\n\r\n// Also test LWG-3888 Most ranges uninitialized memory algorithms are underconstrained\r\ntemplate <class Rng>\r\nconcept CanUninitializedDefaultConstruct = requires(Rng& r) { ranges::uninitialized_default_construct(r); };\r\n\r\ntemplate <class It>\r\nconcept CanUninitializedDefaultConstructN =\r\n    requires(It&& i) { ranges::uninitialized_default_construct_n(forward<It>(i), iter_difference_t<It>{}); };\r\n\r\ntemplate <class Rng>\r\nconcept CanUninitializedValueConstruct = requires(Rng& r) { ranges::uninitialized_value_construct(r); };\r\n\r\ntemplate <class It>\r\nconcept CanUninitializedValueConstructN =\r\n    requires(It&& i) { ranges::uninitialized_value_construct_n(forward<It>(i), iter_difference_t<It>{}); };\r\n\r\ntemplate <class Rng, class T>\r\nconcept CanUninitializedFill = requires(Rng& r, const T& t) { ranges::uninitialized_fill(r, t); };\r\n\r\ntemplate <class It, class T>\r\nconcept CanUninitializedFillN =\r\n    requires(It&& i, const T& t) { ranges::uninitialized_fill_n(forward<It>(i), iter_difference_t<It>{}, t); };\r\n\r\ntemplate <class InRng, class OutRng>\r\nconcept CanUninitializedCopy = requires(InRng& ri, OutRng& ro) { ranges::uninitialized_copy(ri, ro); };\r\n\r\ntemplate <class InIt, class OutIt, class S>\r\nconcept CanUninitializedCopyN = requires(InIt&& ii, OutIt&& io, S&& s) {\r\n    ranges::uninitialized_copy_n(forward<InIt>(ii), iter_difference_t<InIt>{}, forward<OutIt>(io), forward<S>(s));\r\n};\r\n\r\ntemplate <class InRng, class OutRng>\r\nconcept CanUninitializedMove = requires(InRng& ri, OutRng& ro) { ranges::uninitialized_move(ri, ro); };\r\n\r\ntemplate <class InIt, class OutIt, class S>\r\nconcept CanUninitializedMoveN = requires(InIt&& ii, OutIt&& io, S&& s) {\r\n    ranges::uninitialized_move_n(forward<InIt>(ii), iter_difference_t<InIt>{}, forward<OutIt>(io), forward<S>(s));\r\n};\r\n\r\ntemplate <class Rng>\r\nconcept CanDestroy = requires(Rng&& r) { ranges::destroy(forward<Rng>(r)); };\r\n\r\ntemplate <class It>\r\nconcept CanDestroyN = requires(It&& i) { ranges::destroy_n(forward<It>(i), iter_difference_t<It>{}); };\r\n\r\nstatic_assert(CanUninitializedDefaultConstruct<char[42]>);\r\nstatic_assert(!CanUninitializedDefaultConstruct<const char[42]>);\r\nstatic_assert(!CanUninitializedDefaultConstruct<volatile char[42]>);\r\nstatic_assert(!CanUninitializedDefaultConstruct<const volatile char[42]>);\r\n\r\nstatic_assert(CanUninitializedDefaultConstructN<char*>);\r\nstatic_assert(!CanUninitializedDefaultConstructN<const char*>);\r\nstatic_assert(!CanUninitializedDefaultConstructN<volatile char*>);\r\nstatic_assert(!CanUninitializedDefaultConstructN<const volatile char*>);\r\n\r\nstatic_assert(CanUninitializedValueConstruct<char[42]>);\r\nstatic_assert(!CanUninitializedValueConstruct<const char[42]>);\r\nstatic_assert(!CanUninitializedValueConstruct<volatile char[42]>);\r\nstatic_assert(!CanUninitializedValueConstruct<const volatile char[42]>);\r\n\r\nstatic_assert(CanUninitializedValueConstructN<char*>);\r\nstatic_assert(!CanUninitializedValueConstructN<const char*>);\r\nstatic_assert(!CanUninitializedValueConstructN<volatile char*>);\r\nstatic_assert(!CanUninitializedValueConstructN<const volatile char*>);\r\n\r\nstatic_assert(CanUninitializedFill<char[42], int>);\r\nstatic_assert(!CanUninitializedFill<const char[42], int>);\r\nstatic_assert(!CanUninitializedFill<volatile char[42], int>);\r\nstatic_assert(!CanUninitializedFill<const volatile char[42], int>);\r\n\r\nstatic_assert(CanUninitializedFillN<char*, int>);\r\nstatic_assert(!CanUninitializedFillN<const char*, int>);\r\nstatic_assert(!CanUninitializedFillN<volatile char*, int>);\r\nstatic_assert(!CanUninitializedFillN<const volatile char*, int>);\r\n\r\nstatic_assert(CanUninitializedCopy<const int[42], char[42]>);\r\nstatic_assert(!CanUninitializedCopy<const int[42], const char[42]>);\r\nstatic_assert(!CanUninitializedCopy<const int[42], volatile char[42]>);\r\nstatic_assert(!CanUninitializedCopy<const int[42], const volatile char[42]>);\r\n\r\nstatic_assert(CanUninitializedCopyN<const int*, char*, const char*>);\r\nstatic_assert(!CanUninitializedCopyN<const int*, const char*, const char*>);\r\nstatic_assert(!CanUninitializedCopyN<const int*, volatile char*, const char*>);\r\nstatic_assert(!CanUninitializedCopyN<const int*, const volatile char*, const char*>);\r\n\r\nstatic_assert(CanUninitializedMove<const int[42], char[42]>);\r\nstatic_assert(!CanUninitializedMove<const int[42], const char[42]>);\r\nstatic_assert(!CanUninitializedMove<const int[42], volatile char[42]>);\r\nstatic_assert(!CanUninitializedMove<const int[42], const volatile char[42]>);\r\n\r\nstatic_assert(CanUninitializedMoveN<const int*, char*, const char*>);\r\nstatic_assert(!CanUninitializedMoveN<const int*, const char*, const char*>);\r\nstatic_assert(!CanUninitializedMoveN<const int*, volatile char*, const char*>);\r\nstatic_assert(!CanUninitializedMoveN<const int*, const volatile char*, const char*>);\r\n\r\nstatic_assert(CanDestroy<char[42]>);\r\nstatic_assert(!CanDestroy<const char[42]>);\r\nstatic_assert(!CanDestroy<volatile char[42]>);\r\nstatic_assert(!CanDestroy<const volatile char[42]>);\r\n\r\nstatic_assert(CanDestroyN<char*>);\r\nstatic_assert(!CanDestroyN<const char*>);\r\nstatic_assert(!CanDestroyN<volatile char*>);\r\nstatic_assert(!CanDestroyN<const volatile char*>);\r\n\r\n#ifdef __clang__ // TRANSITION, DevCom-10642767 (MSVC), DevCom-10896316 (EDG)\r\n// Test that destroy, destroy_at, and destroy_n properly destroy trivially destructible objects\r\n// during constant evaluation.\r\n// After such destruction, further access will cause core language undefined behavior,\r\n// which will in turn cause constant evaluation failure.\r\n\r\ntemplate <auto>\r\nstruct require_valid_constant;\r\n\r\ntemplate <class Fn>\r\nconstexpr int consteval_validate_destruction(Fn op) {\r\n    struct S {\r\n        int n;\r\n    };\r\n\r\n    S arr[1]{{42}};\r\n    op(arr);\r\n    return arr[0].n;\r\n}\r\n\r\ntemplate <auto Fn>\r\nconstexpr bool CanWellDefinedlyAccessAfterOperation =\r\n    requires { typename require_valid_constant<consteval_validate_destruction(Fn)>; };\r\n\r\nstatic_assert(CanWellDefinedlyAccessAfterOperation<[](auto&) {}>);\r\nstatic_assert(!CanWellDefinedlyAccessAfterOperation<[](auto& arr) { destroy(arr + 0, arr + 1); }>);\r\nstatic_assert(!CanWellDefinedlyAccessAfterOperation<[](auto& arr) { destroy_at(arr + 0); }>);\r\nstatic_assert(!CanWellDefinedlyAccessAfterOperation<[](auto& arr) { destroy_at(&arr); }>);\r\nstatic_assert(!CanWellDefinedlyAccessAfterOperation<[](auto& arr) { destroy_n(arr + 0, 1); }>);\r\nstatic_assert(!CanWellDefinedlyAccessAfterOperation<[](auto& arr) { ranges::destroy(arr + 0, arr + 1); }>);\r\nstatic_assert(!CanWellDefinedlyAccessAfterOperation<[](auto& arr) { ranges::destroy(arr); }>);\r\nstatic_assert(!CanWellDefinedlyAccessAfterOperation<[](auto& arr) { ranges::destroy_at(arr + 0); }>);\r\nstatic_assert(!CanWellDefinedlyAccessAfterOperation<[](auto& arr) { ranges::destroy_at(&arr); }>);\r\nstatic_assert(!CanWellDefinedlyAccessAfterOperation<[](auto& arr) { ranges::destroy_n(arr + 0, 1); }>);\r\n#endif // ^^^ no workaround ^^^\r\n\r\n// Test LWG-3436 \"std::construct_at should support arrays\"\r\ntemplate <class T, size_t N>\r\nconstexpr void test_std_construct_at_array() {\r\n    union U {\r\n        constexpr U() {}\r\n        constexpr ~U() {}\r\n\r\n        T a[N];\r\n    };\r\n    U u;\r\n    construct_at(&u.a);\r\n    for (const auto& elem : u.a) {\r\n        assert(elem == T{});\r\n    }\r\n    destroy_at(&u.a);\r\n}\r\n\r\ntemplate <class T, size_t N>\r\nconstexpr void test_ranges_construct_at_array() {\r\n    union U {\r\n        constexpr U() {}\r\n        constexpr ~U() {}\r\n\r\n        T a[N];\r\n    };\r\n    U u;\r\n    ranges::construct_at(&u.a);\r\n    for (const auto& elem : u.a) {\r\n        assert(elem == T{});\r\n    }\r\n    ranges::destroy_at(&u.a);\r\n}\r\n\r\nconstexpr bool test_construct_at_array() {\r\n    test_std_construct_at_array<int, 1>();\r\n    test_std_construct_at_array<int, 42>();\r\n    test_ranges_construct_at_array<int, 1>();\r\n    test_ranges_construct_at_array<int, 42>();\r\n\r\n#if !_HAS_CXX23\r\n    if (!is_constant_evaluated())\r\n#endif // !_HAS_CXX23\r\n    {\r\n        test_std_construct_at_array<unique_ptr<string>, 1>();\r\n        test_std_construct_at_array<unique_ptr<string>, 42>();\r\n        test_ranges_construct_at_array<unique_ptr<string>, 1>();\r\n        test_ranges_construct_at_array<unique_ptr<string>, 42>();\r\n    }\r\n\r\n    test_std_construct_at_array<string, 1>();\r\n    test_ranges_construct_at_array<string, 1>();\r\n\r\n#if defined(__EDG__) && _ITERATOR_DEBUG_LEVEL != 0 // TRANSITION, DevCom-11012299\r\n    if (!is_constant_evaluated())\r\n#endif // ^^^ workaround ^^^\r\n    {\r\n        test_std_construct_at_array<string, 42>();\r\n        test_ranges_construct_at_array<string, 42>();\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test_runtime(1234);\r\n    test_runtime(string(\"hello world\"));\r\n    test_runtime(string(\"hello to some really long world that certainly doesn't fit in SSO\"));\r\n\r\n    {\r\n        alignas(indestructible) unsigned char storage[sizeof(indestructible)];\r\n        const auto ptr = reinterpret_cast<indestructible*>(storage);\r\n        construct_at(ptr);\r\n        ptr->destroy();\r\n\r\n        ranges::construct_at(ptr);\r\n        ptr->destroy();\r\n    }\r\n\r\n    test_array(1234);\r\n    test_array(string(\"hello world\"));\r\n    test_array(string(\"hello to some really long world that certainly doesn't fit in SSO\"));\r\n\r\n    test_construct_at_array();\r\n    static_assert(test_construct_at_array());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0798R8_monadic_operations_for_std_optional/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0798R8_monadic_operations_for_std_optional/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <exception>\r\n#include <optional>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nstruct Immovable {\r\n    constexpr Immovable(int x) : v(x) {}\r\n    Immovable(const Immovable&)            = delete;\r\n    Immovable(Immovable&&)                 = delete;\r\n    Immovable& operator=(const Immovable&) = delete;\r\n    Immovable& operator=(Immovable&&)      = delete;\r\n    constexpr ~Immovable() {}\r\n\r\n    int v;\r\n};\r\n\r\nstruct Thingy {\r\n    optional<int> x;\r\n    constexpr int member_func() const {\r\n        return 22;\r\n    }\r\n};\r\n\r\ntemplate <class T>\r\nstruct fn {\r\n    template <class U>\r\n    constexpr auto operator()(U&&) & {\r\n        static_assert(is_same_v<T, U&&>);\r\n        return optional<int>{33};\r\n    }\r\n\r\n    template <class U>\r\n    constexpr auto operator()(U&&) && {\r\n        static_assert(is_same_v<T, U&&>);\r\n        return Immovable{44};\r\n    }\r\n\r\n    constexpr auto operator()() && {\r\n        return optional<Thingy>{Thingy{55}};\r\n    }\r\n};\r\n\r\ntemplate <class Optional>\r\nconstexpr void test_impl(Optional&& nonempty, Optional&& empty_optional) {\r\n    assert(nonempty.has_value());\r\n    assert(!empty_optional.has_value());\r\n\r\n    using U = decltype(forward<Optional>(nonempty).value());\r\n    {\r\n        fn<U> f{};\r\n        decltype(auto) result = forward<Optional>(nonempty).and_then(f);\r\n        static_assert(is_same_v<decltype(result), optional<int>>);\r\n        assert(result == 33);\r\n    }\r\n    {\r\n        fn<U> f{};\r\n        decltype(auto) result = forward<Optional>(empty_optional).and_then(f);\r\n        assert(!result);\r\n    }\r\n    {\r\n        decltype(auto) result = forward<Optional>(nonempty).and_then(&Thingy::x);\r\n        static_assert(is_same_v<decltype(result), optional<int>>);\r\n        assert(result == 11);\r\n    }\r\n    {\r\n        decltype(auto) result = forward<Optional>(nonempty).transform([](auto&&) { return 66; });\r\n        static_assert(is_same_v<decltype(result), optional<int>>);\r\n        assert(result.value() == 66);\r\n    }\r\n    {\r\n        decltype(auto) result = forward<Optional>(nonempty).transform(fn<U>{});\r\n        static_assert(is_same_v<decltype(result), optional<Immovable>>);\r\n        assert(result.value().v == 44);\r\n    }\r\n    {\r\n        decltype(auto) result = forward<Optional>(empty_optional).transform(fn<U>{});\r\n        assert(!result);\r\n    }\r\n    {\r\n        decltype(auto) result = forward<Optional>(nonempty).transform(&Thingy::member_func);\r\n        static_assert(is_same_v<decltype(result), optional<int>>);\r\n        assert(result == 22);\r\n    }\r\n    {\r\n        decltype(auto) result = forward<Optional>(nonempty).or_else(fn<U>{});\r\n        static_assert(is_same_v<decltype(result), optional<Thingy>>);\r\n        assert(result.value().x == 11);\r\n    }\r\n    {\r\n        decltype(auto) result = forward<Optional>(empty_optional).or_else(fn<U>{});\r\n        assert(result.value().x == 55);\r\n    }\r\n}\r\n\r\nconstexpr bool test() {\r\n    optional<Thingy> nonempty{Thingy{11}};\r\n    optional<Thingy> empty_optional;\r\n    test_impl(nonempty, empty_optional);\r\n    test_impl(as_const(nonempty), as_const(empty_optional));\r\n    test_impl(move(as_const(nonempty)), move(as_const(empty_optional)));\r\n    test_impl(move(nonempty), move(empty_optional));\r\n    return true;\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_gh_3667() {\r\n    // GH-3667 <optional>: Throwing transformers will cause the program to terminate\r\n    class unique_exception : public exception {};\r\n\r\n    try {\r\n        optional<T> opt(in_place);\r\n        opt.transform([](const T&) -> T { throw unique_exception{}; });\r\n    } catch (const unique_exception&) {\r\n        return;\r\n    } catch (...) {\r\n        assert(false); // shouldn't terminate or reach here\r\n    }\r\n    assert(false); // shouldn't terminate or reach here\r\n}\r\n\r\nint main() {\r\n    test();\r\n    static_assert(test());\r\n\r\n    test_gh_3667<int>(); // trivial destructor\r\n    test_gh_3667<string>(); // non-trivial destructor\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0811R3_midpoint_lerp/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/Od\"\r\n*\tPM_CL=\"/O2\"\r\n"
  },
  {
    "path": "tests/std/tests/P0811R3_midpoint_lerp/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <bit>\r\n#include <cassert>\r\n#include <cfenv>\r\n#include <charconv>\r\n#include <cmath>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <iterator>\r\n#include <limits>\r\n#include <numeric>\r\n#include <optional>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <typename Ty>\r\nusing limits = numeric_limits<Ty>;\r\n\r\n#ifdef _M_FP_STRICT\r\n// According to:\r\n// https://learn.microsoft.com/cpp/build/reference/fp-specify-floating-point-behavior\r\n// Under the default /fp:precise mode:\r\n//  The compiler generates code intended to run in the default floating-point environment and assumes that the\r\n//  floating-point environment is not accessed or modified at runtime.\r\n// ... so we only do testing of rounding modes and floating-point exceptions when strict is enabled.\r\n\r\n// TRANSITION, VSO-923474 -- should be #pragma STDC FENV_ACCESS ON\r\n#pragma fenv_access(on)\r\n\r\nvoid checked_fesetround(const int round) {\r\n    [[maybe_unused]] const int setRound = fesetround(round);\r\n    assert(setRound == 0);\r\n}\r\n\r\nclass RoundGuard {\r\npublic:\r\n    explicit RoundGuard(const int newRound) : oldRound(fegetround()) {\r\n        checked_fesetround(newRound);\r\n    }\r\n\r\n    RoundGuard(const RoundGuard&)            = delete;\r\n    RoundGuard& operator=(const RoundGuard&) = delete;\r\n\r\n    ~RoundGuard() {\r\n        checked_fesetround(oldRound);\r\n    }\r\n\r\nprivate:\r\n    int oldRound;\r\n};\r\n\r\nvoid checked_feholdexcept(fenv_t* const env) {\r\n    [[maybe_unused]] const int holdExcept = feholdexcept(env);\r\n    assert(holdExcept == 0);\r\n}\r\n\r\nvoid checked_fesetenv(const fenv_t* const env) {\r\n    [[maybe_unused]] const int setEnv = fesetenv(env);\r\n    assert(setEnv == 0);\r\n}\r\n\r\nclass ExceptGuard {\r\npublic:\r\n    ExceptGuard() {\r\n        checked_feholdexcept(&env);\r\n    }\r\n\r\n    ExceptGuard(const ExceptGuard&)            = delete;\r\n    ExceptGuard& operator=(const ExceptGuard&) = delete;\r\n\r\n    ~ExceptGuard() {\r\n        checked_fesetenv(&env);\r\n    }\r\n\r\nprivate:\r\n    fenv_t env;\r\n};\r\n\r\nconstexpr int fe_invalid  = FE_INVALID;\r\nconstexpr int fe_overflow = FE_OVERFLOW;\r\n\r\n// \"major\" floating point exceptions, excluding underflow and inexact\r\nconstexpr int fe_major_except = FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW;\r\n\r\nbool check_feexcept(const int expected_excepts, const int except_mask = fe_major_except) {\r\n    return fetestexcept(except_mask) == (expected_excepts & except_mask);\r\n}\r\n#else // ^^^ defined(_M_FP_STRICT) / !defined(_M_FP_STRICT) vvv\r\nclass ExceptGuard {\r\npublic:\r\n    ExceptGuard() {}\r\n\r\n    ExceptGuard(const ExceptGuard&)            = delete;\r\n    ExceptGuard& operator=(const ExceptGuard&) = delete;\r\n\r\n    ~ExceptGuard() {}\r\n};\r\n\r\n// These values are ignored. (FE_INVALID and FE_OVERFLOW aren't available for /clr.)\r\nconstexpr int fe_invalid  = 0;\r\nconstexpr int fe_overflow = 0;\r\n\r\nbool check_feexcept([[maybe_unused]] const int expected_excepts, [[maybe_unused]] const int except_mask = 0) {\r\n    return true;\r\n}\r\n#endif // ^^^ !defined(_M_FP_STRICT) ^^^\r\n\r\ntemplate <class Ty>\r\nconstexpr Ty mint_nan(const bool sign, const unsigned long long payload);\r\n\r\ntemplate <>\r\nconstexpr float mint_nan<float>(const bool sign, const unsigned long long payload) {\r\n    const unsigned int filteredPayload = payload & 0x3F'FFFFu; // bottom 22 bits\r\n    assert(filteredPayload == payload); // if this assert fails, payload didn't fit\r\n\r\n    const unsigned int result = (static_cast<unsigned int>(sign) << 31)\r\n                              | 0x7FC0'0000u // turn on all exponent bits and the qNaN bit\r\n                              | filteredPayload;\r\n\r\n    return bit_cast<float>(result);\r\n}\r\n\r\ntemplate <>\r\nconstexpr double mint_nan<double>(const bool sign, const unsigned long long payload) {\r\n    const unsigned long long filteredPayload = payload & 0x7'FFFF'FFFF'FFFFllu; // bottom 51 bits\r\n    assert(filteredPayload == payload); // if this assert fails, payload didn't fit\r\n\r\n    const unsigned long long result = (static_cast<unsigned long long>(sign) << 63)\r\n                                    | 0x7FF8'0000'0000'0000u // turn on all exponent bits and the qNaN bit\r\n                                    | filteredPayload;\r\n\r\n    return bit_cast<double>(result);\r\n}\r\n\r\ntemplate <>\r\nconstexpr long double mint_nan<long double>(const bool sign, const unsigned long long payload) {\r\n    return mint_nan<double>(sign, payload);\r\n}\r\n\r\ntemplate <typename Ty>\r\nvoid assert_bitwise_equal(const Ty& a, const Ty& b) {\r\n    assert(memcmp(&a, &b, sizeof(Ty)) == 0);\r\n}\r\n\r\n// TRANSITION\r\n// numeric_limits<T>::signaling_NaN() doesn't work on x86 hosted MSVC\r\n// numeric_limits<float>::signaling_NaN() doesn't work on x64 hosted MSVC\r\nvoid make_snan(float& x) {\r\n    constexpr unsigned int bits = 0x7f80'0001U;\r\n    memcpy(&x, &bits, sizeof(x));\r\n}\r\n\r\nvoid make_snan(double& x) {\r\n    constexpr unsigned long long bits = 0x7ff0'0000'0000'0001ULL;\r\n    memcpy(&x, &bits, sizeof(x));\r\n}\r\n\r\nvoid make_snan(long double& x) {\r\n    constexpr unsigned long long bits = 0x7ff0'0000'0000'0001ULL;\r\n    memcpy(&x, &bits, sizeof(x));\r\n}\r\n\r\ntemplate <typename Ty>\r\nstruct constants; // not defined\r\n\r\ntemplate <>\r\nstruct constants<float> {\r\n    static constexpr float TwoPlusUlp        = 0x1.000002p+1f;\r\n    static constexpr float OnePlusUlp        = 0x1.000002p+0f;\r\n    static constexpr float PointFivePlusUlp  = 0x1.000002p-1f;\r\n    static constexpr float OneMinusUlp       = 0x1.fffffep-1f;\r\n    static constexpr float PointFiveMinusUlp = 0x1.fffffep-2f;\r\n    static constexpr float NegOneMinusUlp    = -OnePlusUlp;\r\n    static constexpr float NegOnePlusUlp     = -OneMinusUlp;\r\n\r\n    static constexpr float EighthPlusUlp  = 0x1.000002p-3f;\r\n    static constexpr float EighthMinusUlp = 0x1.fffffep-4f;\r\n};\r\n\r\ntemplate <>\r\nstruct constants<double> {\r\n    static constexpr double TwoPlusUlp        = 0x1.0000000000001p+1;\r\n    static constexpr double OnePlusUlp        = 0x1.0000000000001p+0;\r\n    static constexpr double PointFivePlusUlp  = 0x1.0000000000001p-1;\r\n    static constexpr double OneMinusUlp       = 0x1.fffffffffffffp-1;\r\n    static constexpr double PointFiveMinusUlp = 0x1.fffffffffffffp-2;\r\n    static constexpr double NegOneMinusUlp    = -OnePlusUlp;\r\n    static constexpr double NegOnePlusUlp     = -OneMinusUlp;\r\n\r\n    static constexpr double EighthPlusUlp  = 0x1.0000000000001p-3;\r\n    static constexpr double EighthMinusUlp = 0x1.fffffffffffffp-4;\r\n};\r\n\r\ntemplate <>\r\nstruct constants<long double> {\r\n    static constexpr long double TwoPlusUlp        = 0x1.0000000000001p+1;\r\n    static constexpr long double OnePlusUlp        = 0x1.0000000000001p+0;\r\n    static constexpr long double PointFivePlusUlp  = 0x1.0000000000001p-1;\r\n    static constexpr long double OneMinusUlp       = 0x1.fffffffffffffp-1;\r\n    static constexpr long double PointFiveMinusUlp = 0x1.fffffffffffffp-2;\r\n    static constexpr long double NegOneMinusUlp    = -OnePlusUlp;\r\n    static constexpr long double NegOnePlusUlp     = -OneMinusUlp;\r\n\r\n    static constexpr long double EighthPlusUlp  = 0x1.0000000000001p-3;\r\n    static constexpr long double EighthMinusUlp = 0x1.fffffffffffffp-4;\r\n};\r\n\r\ntemplate <typename Ty>\r\nvoid test_constants() {\r\n    assert(constants<Ty>::TwoPlusUlp == nextafter(Ty(2.0), Ty(3.0)));\r\n    assert(constants<Ty>::OnePlusUlp == nextafter(Ty(1.0), Ty(3.0)));\r\n    assert(constants<Ty>::PointFivePlusUlp == nextafter(Ty(0.5), Ty(3.0)));\r\n    assert(constants<Ty>::OneMinusUlp == nextafter(Ty(1.0), Ty(0.0)));\r\n    assert(constants<Ty>::PointFiveMinusUlp == nextafter(Ty(0.5), Ty(-2.0)));\r\n    assert(constants<Ty>::NegOneMinusUlp == nextafter(Ty(-1.0), Ty(-2.0)));\r\n    assert(constants<Ty>::NegOnePlusUlp == nextafter(Ty(-1.0), Ty(0.0)));\r\n\r\n    assert(constants<Ty>::EighthPlusUlp == nextafter(Ty(0.125), Ty(1.0)));\r\n    assert(constants<Ty>::EighthMinusUlp == nextafter(Ty(0.125), Ty(0.0)));\r\n}\r\n\r\ntemplate <typename Ty>\r\nconstexpr bool test_midpoint_integer_signed() {\r\n    STATIC_ASSERT(is_same_v<decltype(midpoint(Ty(), Ty())), decltype(Ty())>);\r\n    STATIC_ASSERT(is_signed_v<Ty>);\r\n    STATIC_ASSERT(noexcept(midpoint(Ty(), Ty())));\r\n\r\n    assert(midpoint(Ty(1), Ty(3)) == Ty(2));\r\n    assert(midpoint(Ty(3), Ty(1)) == Ty(2));\r\n\r\n    assert(midpoint(Ty(0), Ty(0)) == Ty(0));\r\n    assert(midpoint(Ty(0), Ty(2)) == Ty(1));\r\n    assert(midpoint(Ty(2), Ty(0)) == Ty(1));\r\n    assert(midpoint(Ty(2), Ty(2)) == Ty(2));\r\n\r\n    assert(midpoint(Ty(1), Ty(4)) == Ty(2));\r\n    assert(midpoint(Ty(4), Ty(1)) == Ty(3));\r\n    assert(midpoint(Ty(3), Ty(4)) == Ty(3));\r\n    assert(midpoint(Ty(4), Ty(3)) == Ty(4));\r\n\r\n    assert(midpoint(Ty(3), Ty(4)) == Ty(3));\r\n    assert(midpoint(Ty(4), Ty(3)) == Ty(4));\r\n    assert(midpoint(Ty(-3), Ty(4)) == Ty(0));\r\n    assert(midpoint(Ty(-4), Ty(3)) == Ty(-1));\r\n    assert(midpoint(Ty(3), Ty(-4)) == Ty(0));\r\n    assert(midpoint(Ty(4), Ty(-3)) == Ty(1));\r\n    assert(midpoint(Ty(-3), Ty(-4)) == Ty(-3));\r\n    assert(midpoint(Ty(-4), Ty(-3)) == Ty(-4));\r\n\r\n\r\n    // test that we round toward the left parameter for integers\r\n    assert(midpoint(limits<Ty>::min(), limits<Ty>::max()) == Ty(-1));\r\n    assert(midpoint(limits<Ty>::max(), limits<Ty>::min()) == Ty(0));\r\n\r\n    assert(midpoint(limits<Ty>::min(), limits<Ty>::min()) == limits<Ty>::min());\r\n    assert(midpoint(limits<Ty>::max(), limits<Ty>::max()) == limits<Ty>::max());\r\n\r\n    assert(midpoint(limits<Ty>::min(), Ty(6)) == limits<Ty>::min() / 2 + 3);\r\n    assert(midpoint(Ty(6), limits<Ty>::min()) == limits<Ty>::min() / 2 + 3);\r\n    assert(midpoint(limits<Ty>::max(), Ty(6)) == limits<Ty>::max() / 2 + 4);\r\n    assert(midpoint(Ty(6), limits<Ty>::max()) == limits<Ty>::max() / 2 + 3);\r\n\r\n    assert(midpoint(limits<Ty>::min(), Ty(-6)) == limits<Ty>::min() / 2 - 3);\r\n    assert(midpoint(Ty(-6), limits<Ty>::min()) == limits<Ty>::min() / 2 - 3);\r\n    assert(midpoint(limits<Ty>::max(), Ty(-6)) == limits<Ty>::max() / 2 - 2);\r\n    assert(midpoint(Ty(-6), limits<Ty>::max()) == limits<Ty>::max() / 2 - 3);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <typename Ty>\r\nconstexpr bool test_midpoint_integer_unsigned() {\r\n    STATIC_ASSERT(is_same_v<decltype(midpoint(Ty(), Ty())), decltype(Ty())>);\r\n    STATIC_ASSERT(is_unsigned_v<Ty>);\r\n    STATIC_ASSERT(noexcept(midpoint(Ty(), Ty())));\r\n\r\n    assert(midpoint(Ty(1), Ty(3)) == Ty(2));\r\n    assert(midpoint(Ty(3), Ty(1)) == Ty(2));\r\n\r\n    assert(midpoint(Ty(0), Ty(0)) == Ty(0));\r\n    assert(midpoint(Ty(0), Ty(2)) == Ty(1));\r\n    assert(midpoint(Ty(2), Ty(0)) == Ty(1));\r\n    assert(midpoint(Ty(2), Ty(2)) == Ty(2));\r\n\r\n    assert(midpoint(Ty(1), Ty(4)) == Ty(2));\r\n    assert(midpoint(Ty(4), Ty(1)) == Ty(3));\r\n    assert(midpoint(Ty(3), Ty(4)) == Ty(3));\r\n    assert(midpoint(Ty(4), Ty(3)) == Ty(4));\r\n\r\n    assert(midpoint(limits<Ty>::min(), limits<Ty>::max()) == (limits<Ty>::max() - limits<Ty>::min()) / 2);\r\n    assert(midpoint(limits<Ty>::max(), limits<Ty>::min()) == (limits<Ty>::max() - limits<Ty>::min()) / 2 + 1);\r\n    assert(midpoint(limits<Ty>::min(), limits<Ty>::min()) == limits<Ty>::min());\r\n    assert(midpoint(limits<Ty>::max(), limits<Ty>::max()) == limits<Ty>::max());\r\n\r\n    assert(midpoint(limits<Ty>::min(), Ty(6)) == limits<Ty>::min() / 2 + 3);\r\n    assert(midpoint(Ty(6), limits<Ty>::min()) == limits<Ty>::min() / 2 + 3);\r\n    assert(midpoint(limits<Ty>::max(), Ty(6)) == (limits<Ty>::max() - limits<Ty>::min()) / 2 + 4);\r\n    assert(midpoint(Ty(6), limits<Ty>::max()) == (limits<Ty>::max() - limits<Ty>::min()) / 2 + 3);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <typename Ty>\r\nconstexpr bool test_midpoint_floating_constexpr() {\r\n    STATIC_ASSERT(is_same_v<decltype(midpoint(Ty(), Ty())), decltype(Ty())>);\r\n    STATIC_ASSERT(is_signed_v<Ty>);\r\n    STATIC_ASSERT(noexcept(midpoint(Ty(), Ty())));\r\n\r\n    assert(midpoint(Ty(0.5), Ty(0.5)) == Ty(0.5));\r\n    assert(midpoint(Ty(0.5), Ty(2.5)) == Ty(1.5));\r\n\r\n    assert(midpoint(Ty(3.0), Ty(4.0)) == Ty(3.5));\r\n    assert(midpoint(Ty(-3.0), Ty(4.0)) == Ty(0.5));\r\n    assert(midpoint(Ty(3.0), Ty(-4.0)) == Ty(-0.5));\r\n    assert(midpoint(Ty(-3.0), Ty(-4.0)) == Ty(-3.5));\r\n\r\n    assert(midpoint(Ty(-0.0), Ty(-0.0)) == Ty(-0.0));\r\n    assert(midpoint(Ty(0.0), Ty(0.0)) == Ty(0.0));\r\n    assert(midpoint(Ty(-5.0), Ty(5.0)) == Ty(0.0));\r\n\r\n    // float: midpoint(-0x1.0000000000000p-149, 0x1.0000000000000p-149) = 0x0.0000000000000p+0\r\n    // double: midpoint(-0x0.0000000000001p-1022, 0x0.0000000000001p-1022) = 0x0.0000000000000p+0\r\n    assert(midpoint(-limits<Ty>::denorm_min(), limits<Ty>::denorm_min()) == Ty(0.0));\r\n\r\n    // float: midpoint(0x1.fffffe0000000p-4, 0x1.0000020000000p-3) = 0x1.0000000000000p-3\r\n    // double: midpoint(0x1.fffffffffffffp-4, 0x1.0000000000001p-3) = 0x1.0000000000000p-3\r\n    assert(midpoint(constants<Ty>::EighthMinusUlp, constants<Ty>::EighthPlusUlp) == Ty(0.125));\r\n\r\n    // float: midpoint(-0x1.0000020000000p-3, -0x1.fffffe0000000p-4) = -0x1.0000000000000p-3\r\n    // double: midpoint(-0x1.0000000000001p-3, -0x1.fffffffffffffp-4) = -0x1.0000000000000p-3\r\n    assert(midpoint(-constants<Ty>::EighthPlusUlp, -constants<Ty>::EighthMinusUlp) == Ty(-0.125));\r\n\r\n    // float: midpoint(0x1.0000000000000p-149, 0x1.0000020000000p+0) = 0x1.0000020000000p-1\r\n    // double: midpoint(0x0.0000000000001p-1022, 0x1.0000000000001p+0) = 0x1.0000000000001p-1\r\n    assert(midpoint(limits<Ty>::denorm_min(), constants<Ty>::OnePlusUlp) == constants<Ty>::PointFivePlusUlp);\r\n\r\n    // float: midpoint(-0x1.0000000000000p-149, -0x1.0000020000000p+0) = -0x1.0000020000000p-1\r\n    // double: midpoint(-0x0.0000000000001p-1022, -0x1.0000000000001p+0) = -0x1.0000000000001p-1\r\n    assert(midpoint(-limits<Ty>::denorm_min(), constants<Ty>::NegOneMinusUlp) == -constants<Ty>::PointFivePlusUlp);\r\n\r\n    assert(midpoint(Ty(1.0), constants<Ty>::OnePlusUlp) == Ty(1.0));\r\n    assert(midpoint(constants<Ty>::OneMinusUlp, constants<Ty>::OnePlusUlp) == Ty(1.0));\r\n    assert(midpoint(Ty(-1.0), constants<Ty>::NegOneMinusUlp) == Ty(-1.0));\r\n    assert(midpoint(constants<Ty>::NegOneMinusUlp, constants<Ty>::NegOnePlusUlp) == Ty(-1.0));\r\n\r\n    // in the default rounding mode, midpoint(huge magnitude, tiny magnitude) returns huge/2 without overflow\r\n    assert(midpoint(limits<Ty>::max(), limits<Ty>::min()) == limits<Ty>::max() / 2);\r\n    assert(midpoint(-limits<Ty>::max(), limits<Ty>::min()) == -limits<Ty>::max() / 2);\r\n    assert(midpoint(limits<Ty>::max(), limits<Ty>::denorm_min()) == limits<Ty>::max() / 2);\r\n    assert(midpoint(-limits<Ty>::max(), limits<Ty>::denorm_min()) == -limits<Ty>::max() / 2);\r\n    assert(midpoint(limits<Ty>::max(), -limits<Ty>::min()) == limits<Ty>::max() / 2);\r\n    assert(midpoint(-limits<Ty>::max(), -limits<Ty>::min()) == -limits<Ty>::max() / 2);\r\n    assert(midpoint(limits<Ty>::max(), -limits<Ty>::denorm_min()) == limits<Ty>::max() / 2);\r\n    assert(midpoint(-limits<Ty>::max(), -limits<Ty>::denorm_min()) == -limits<Ty>::max() / 2);\r\n\r\n    // also midpoint(tiny magnitude, huge magnitude)\r\n    assert(midpoint(limits<Ty>::min(), limits<Ty>::max()) == limits<Ty>::max() / 2);\r\n    assert(midpoint(limits<Ty>::min(), -limits<Ty>::max()) == -limits<Ty>::max() / 2);\r\n    assert(midpoint(limits<Ty>::denorm_min(), limits<Ty>::max()) == limits<Ty>::max() / 2);\r\n    assert(midpoint(limits<Ty>::denorm_min(), -limits<Ty>::max()) == -limits<Ty>::max() / 2);\r\n    assert(midpoint(-limits<Ty>::min(), limits<Ty>::max()) == limits<Ty>::max() / 2);\r\n    assert(midpoint(-limits<Ty>::min(), -limits<Ty>::max()) == -limits<Ty>::max() / 2);\r\n    assert(midpoint(-limits<Ty>::denorm_min(), limits<Ty>::max()) == limits<Ty>::max() / 2);\r\n    assert(midpoint(-limits<Ty>::denorm_min(), -limits<Ty>::max()) == -limits<Ty>::max() / 2);\r\n\r\n    assert(midpoint(limits<Ty>::lowest(), limits<Ty>::max()) == Ty(0));\r\n    assert(midpoint(limits<Ty>::max(), limits<Ty>::max()) == limits<Ty>::max());\r\n    assert(midpoint(limits<Ty>::lowest(), limits<Ty>::lowest()) == limits<Ty>::lowest());\r\n\r\n    assert(midpoint(limits<Ty>::lowest(), Ty(5.0)) == limits<Ty>::lowest() / Ty(2.0) + Ty(2.5));\r\n    assert(midpoint(limits<Ty>::max(), Ty(5.0)) == limits<Ty>::max() / Ty(2.0) + Ty(2.5));\r\n\r\n    assert(midpoint(limits<Ty>::lowest(), Ty(-5.0)) == limits<Ty>::lowest() / Ty(2.0) + Ty(-2.5));\r\n    assert(midpoint(limits<Ty>::max(), Ty(-5.0)) == limits<Ty>::max() / Ty(2.0) + Ty(-2.5));\r\n\r\n    assert(midpoint(limits<Ty>::infinity(), limits<Ty>::infinity()) == limits<Ty>::infinity());\r\n    assert(midpoint(-limits<Ty>::infinity(), -limits<Ty>::infinity()) == -limits<Ty>::infinity());\r\n\r\n    const auto bigPositive = limits<Ty>::max() / Ty(8.0) * Ty(7.0);\r\n    const auto bigNegative = -limits<Ty>::max() / Ty(4.0) * Ty(3.0);\r\n    assert(midpoint(bigPositive, bigNegative) == (bigPositive + bigNegative) / Ty(2.0));\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <typename Ty>\r\nvoid test_midpoint_floating() {\r\n#ifdef _M_FP_STRICT\r\n    {\r\n        // test results exactly between 1 ULP:\r\n        ExceptGuard except;\r\n        RoundGuard round{FE_UPWARD};\r\n        assert(midpoint(Ty(1.0), constants<Ty>::OnePlusUlp) == constants<Ty>::OnePlusUlp);\r\n        assert(midpoint(Ty(1.0), constants<Ty>::OneMinusUlp) == Ty(1.0));\r\n        assert(midpoint(Ty(-1.0), constants<Ty>::NegOnePlusUlp) == constants<Ty>::NegOnePlusUlp);\r\n        assert(midpoint(Ty(-1.0), constants<Ty>::NegOneMinusUlp) == Ty(-1.0));\r\n\r\n        // in upward round mode, adding even much less than an ULP moves up by 1 ULP\r\n        assert(midpoint(limits<Ty>::max(), limits<Ty>::min()) == nextafter(limits<Ty>::max() / 2, limits<Ty>::max()));\r\n        assert(midpoint(-limits<Ty>::max(), limits<Ty>::min()) == nextafter(-limits<Ty>::max() / 2, limits<Ty>::max()));\r\n        assert(midpoint(limits<Ty>::max(), limits<Ty>::denorm_min())\r\n               == nextafter(limits<Ty>::max() / 2, limits<Ty>::max()));\r\n        assert(midpoint(-limits<Ty>::max(), limits<Ty>::denorm_min())\r\n               == nextafter(-limits<Ty>::max() / 2, limits<Ty>::max()));\r\n        // and adding a negative tiny value does nothing:\r\n        assert(midpoint(limits<Ty>::max(), -limits<Ty>::min()) == limits<Ty>::max() / 2);\r\n        assert(midpoint(-limits<Ty>::max(), -limits<Ty>::min()) == -limits<Ty>::max() / 2);\r\n        assert(midpoint(limits<Ty>::max(), -limits<Ty>::denorm_min()) == limits<Ty>::max() / 2);\r\n        assert(midpoint(-limits<Ty>::max(), -limits<Ty>::denorm_min()) == -limits<Ty>::max() / 2);\r\n\r\n        // also midpoint(tiny magnitude, huge magnitude)\r\n        assert(midpoint(limits<Ty>::min(), limits<Ty>::max()) == nextafter(limits<Ty>::max() / 2, limits<Ty>::max()));\r\n        assert(midpoint(limits<Ty>::min(), -limits<Ty>::max()) == nextafter(-limits<Ty>::max() / 2, limits<Ty>::max()));\r\n        assert(midpoint(limits<Ty>::denorm_min(), limits<Ty>::max())\r\n               == nextafter(limits<Ty>::max() / 2, limits<Ty>::max()));\r\n        assert(midpoint(limits<Ty>::denorm_min(), -limits<Ty>::max())\r\n               == nextafter(-limits<Ty>::max() / 2, limits<Ty>::max()));\r\n        assert(midpoint(-limits<Ty>::min(), limits<Ty>::max()) == limits<Ty>::max() / 2);\r\n        assert(midpoint(-limits<Ty>::min(), -limits<Ty>::max()) == -limits<Ty>::max() / 2);\r\n        assert(midpoint(-limits<Ty>::denorm_min(), limits<Ty>::max()) == limits<Ty>::max() / 2);\r\n        assert(midpoint(-limits<Ty>::denorm_min(), -limits<Ty>::max()) == -limits<Ty>::max() / 2);\r\n\r\n        assert(check_feexcept(0));\r\n    }\r\n\r\n    // ditto for the other rounding modes:\r\n    {\r\n        ExceptGuard except;\r\n        RoundGuard round{FE_DOWNWARD};\r\n        assert(midpoint(Ty(1.0), constants<Ty>::OnePlusUlp) == Ty(1.0));\r\n        assert(midpoint(Ty(1.0), constants<Ty>::OneMinusUlp) == constants<Ty>::OneMinusUlp);\r\n        assert(midpoint(Ty(-1.0), constants<Ty>::NegOnePlusUlp) == Ty(-1.0));\r\n        assert(midpoint(Ty(-1.0), constants<Ty>::NegOneMinusUlp) == constants<Ty>::NegOneMinusUlp);\r\n\r\n        // in downward round mode, adding a tiny positive value does nothing, just like the default:\r\n        assert(midpoint(limits<Ty>::max(), limits<Ty>::min()) == limits<Ty>::max() / 2);\r\n        assert(midpoint(-limits<Ty>::max(), limits<Ty>::min()) == -limits<Ty>::max() / 2);\r\n        assert(midpoint(limits<Ty>::max(), limits<Ty>::denorm_min()) == limits<Ty>::max() / 2);\r\n        assert(midpoint(-limits<Ty>::max(), limits<Ty>::denorm_min()) == -limits<Ty>::max() / 2);\r\n        // but adding a negative tiny value moves down by 1 ULP:\r\n        assert(\r\n            midpoint(limits<Ty>::max(), -limits<Ty>::min()) == nextafter(limits<Ty>::max() / 2, limits<Ty>::lowest()));\r\n        assert(midpoint(-limits<Ty>::max(), -limits<Ty>::min())\r\n               == nextafter(-limits<Ty>::max() / 2, limits<Ty>::lowest()));\r\n        assert(midpoint(limits<Ty>::max(), -limits<Ty>::denorm_min())\r\n               == nextafter(limits<Ty>::max() / 2, limits<Ty>::lowest()));\r\n        assert(midpoint(-limits<Ty>::max(), -limits<Ty>::denorm_min())\r\n               == nextafter(-limits<Ty>::max() / 2, limits<Ty>::lowest()));\r\n\r\n        // also midpoint(tiny magnitude, huge magnitude)\r\n        assert(midpoint(limits<Ty>::min(), limits<Ty>::max()) == limits<Ty>::max() / 2);\r\n        assert(midpoint(limits<Ty>::min(), -limits<Ty>::max()) == -limits<Ty>::max() / 2);\r\n        assert(midpoint(limits<Ty>::denorm_min(), limits<Ty>::max()) == limits<Ty>::max() / 2);\r\n        assert(midpoint(limits<Ty>::denorm_min(), -limits<Ty>::max()) == -limits<Ty>::max() / 2);\r\n        assert(\r\n            midpoint(-limits<Ty>::min(), limits<Ty>::max()) == nextafter(limits<Ty>::max() / 2, limits<Ty>::lowest()));\r\n        assert(midpoint(-limits<Ty>::min(), -limits<Ty>::max())\r\n               == nextafter(-limits<Ty>::max() / 2, limits<Ty>::lowest()));\r\n        assert(midpoint(-limits<Ty>::denorm_min(), limits<Ty>::max())\r\n               == nextafter(limits<Ty>::max() / 2, limits<Ty>::lowest()));\r\n        assert(midpoint(-limits<Ty>::denorm_min(), -limits<Ty>::max())\r\n               == nextafter(-limits<Ty>::max() / 2, limits<Ty>::lowest()));\r\n\r\n        assert(check_feexcept(0));\r\n    }\r\n\r\n    {\r\n        ExceptGuard except;\r\n        RoundGuard round{FE_TOWARDZERO};\r\n        assert(midpoint(Ty(1.0), constants<Ty>::OnePlusUlp) == Ty(1.0));\r\n        assert(midpoint(Ty(1.0), constants<Ty>::OneMinusUlp) == constants<Ty>::OneMinusUlp);\r\n        assert(midpoint(Ty(-1.0), constants<Ty>::NegOnePlusUlp) == constants<Ty>::NegOnePlusUlp);\r\n        assert(midpoint(Ty(-1.0), constants<Ty>::NegOneMinusUlp) == Ty(-1.0));\r\n\r\n        // tiny values closer to 0 move by 1 ULP as appropriate:\r\n        assert(midpoint(limits<Ty>::max(), limits<Ty>::min()) == limits<Ty>::max() / 2);\r\n        assert(midpoint(-limits<Ty>::max(), limits<Ty>::min()) == nextafter(-limits<Ty>::max() / 2, Ty(0)));\r\n        assert(midpoint(limits<Ty>::max(), limits<Ty>::denorm_min()) == limits<Ty>::max() / 2);\r\n        assert(midpoint(-limits<Ty>::max(), limits<Ty>::denorm_min()) == nextafter(-limits<Ty>::max() / 2, Ty(0)));\r\n        assert(midpoint(limits<Ty>::max(), -limits<Ty>::min()) == nextafter(limits<Ty>::max() / 2, Ty(0)));\r\n        assert(midpoint(-limits<Ty>::max(), -limits<Ty>::min()) == -limits<Ty>::max() / 2);\r\n        assert(midpoint(limits<Ty>::max(), -limits<Ty>::denorm_min()) == nextafter(limits<Ty>::max() / 2, Ty(0)));\r\n        assert(midpoint(-limits<Ty>::max(), -limits<Ty>::denorm_min()) == -limits<Ty>::max() / 2);\r\n\r\n        // also midpoint(tiny magnitude, huge magnitude)\r\n        assert(midpoint(limits<Ty>::min(), limits<Ty>::max()) == limits<Ty>::max() / 2);\r\n        assert(midpoint(limits<Ty>::min(), -limits<Ty>::max()) == nextafter(-limits<Ty>::max() / 2, Ty(0)));\r\n        assert(midpoint(limits<Ty>::denorm_min(), limits<Ty>::max()) == limits<Ty>::max() / 2);\r\n        assert(midpoint(limits<Ty>::denorm_min(), -limits<Ty>::max()) == nextafter(-limits<Ty>::max() / 2, Ty(0)));\r\n        assert(midpoint(-limits<Ty>::min(), limits<Ty>::max()) == nextafter(limits<Ty>::max() / 2, Ty(0)));\r\n        assert(midpoint(-limits<Ty>::min(), -limits<Ty>::max()) == -limits<Ty>::max() / 2);\r\n        assert(midpoint(-limits<Ty>::denorm_min(), limits<Ty>::max()) == nextafter(limits<Ty>::max() / 2, Ty(0)));\r\n        assert(midpoint(-limits<Ty>::denorm_min(), -limits<Ty>::max()) == -limits<Ty>::max() / 2);\r\n\r\n        assert(check_feexcept(0));\r\n    }\r\n#endif // _M_FP_STRICT\r\n\r\n    {\r\n        ExceptGuard except;\r\n\r\n        assert(midpoint(limits<Ty>::denorm_min(), Ty(1.0)) == (limits<Ty>::denorm_min() + Ty(1.0)) / Ty(2.0));\r\n        assert(midpoint(limits<Ty>::denorm_min(), limits<Ty>::max())\r\n               == (limits<Ty>::denorm_min() + limits<Ty>::max()) / Ty(2.0));\r\n        assert(midpoint(limits<Ty>::denorm_min(), limits<Ty>::lowest())\r\n               == (limits<Ty>::denorm_min() + limits<Ty>::lowest()) / Ty(2.0));\r\n        assert(midpoint(limits<Ty>::denorm_min(), limits<Ty>::infinity()) == limits<Ty>::infinity());\r\n        assert(midpoint(limits<Ty>::denorm_min(), -limits<Ty>::infinity()) == -limits<Ty>::infinity());\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1666178\r\n        assert_bitwise_equal(mint_nan<Ty>(0, 1), midpoint(mint_nan<Ty>(0, 1), Ty(0)));\r\n        assert_bitwise_equal(mint_nan<Ty>(0, 1), midpoint(Ty(0), mint_nan<Ty>(0, 1)));\r\n        assert_bitwise_equal(mint_nan<Ty>(0, 1), midpoint(mint_nan<Ty>(0, 1), limits<Ty>::max()));\r\n        assert_bitwise_equal(mint_nan<Ty>(0, 1), midpoint(limits<Ty>::max(), mint_nan<Ty>(0, 1)));\r\n        assert_bitwise_equal(mint_nan<Ty>(0, 1), midpoint(mint_nan<Ty>(0, 1), mint_nan<Ty>(0, 1)));\r\n#endif // ^^^ no workaround ^^^\r\n\r\n        assert(isnan(midpoint(limits<Ty>::quiet_NaN(), Ty(2.0))));\r\n        assert(isnan(midpoint(Ty(2.0), limits<Ty>::quiet_NaN())));\r\n        assert(isnan(midpoint(limits<Ty>::quiet_NaN(), limits<Ty>::quiet_NaN())));\r\n\r\n        assert(check_feexcept(0));\r\n    }\r\n\r\n    // cases where midpoint() should raise FE_INVALID and return NaN\r\n    constexpr auto test_midpoint_fe_invalid = [](const Ty& a, const Ty& b) {\r\n        ExceptGuard except;\r\n        const auto answer = midpoint(a, b);\r\n        return check_feexcept(fe_invalid) && isnan(answer);\r\n    };\r\n\r\n    Ty snan;\r\n    make_snan(snan);\r\n\r\n    assert(test_midpoint_fe_invalid(-limits<Ty>::infinity(), limits<Ty>::infinity()));\r\n    assert(test_midpoint_fe_invalid(snan, limits<Ty>::quiet_NaN()));\r\n    assert(test_midpoint_fe_invalid(limits<Ty>::quiet_NaN(), snan));\r\n    assert(test_midpoint_fe_invalid(snan, snan));\r\n}\r\n\r\ntemplate <typename Ty>\r\nunion U {\r\n    Ty value;\r\n};\r\n\r\ntemplate <typename Ty>\r\nclass C {\r\n    Ty value;\r\n};\r\n\r\ntemplate <typename Ty>\r\nconstexpr bool test_midpoint_pointer() {\r\n    STATIC_ASSERT(is_same_v<decltype(midpoint(Ty(), Ty())), decltype(Ty())>);\r\n    STATIC_ASSERT(is_signed_v<Ty>);\r\n    STATIC_ASSERT(noexcept(midpoint(Ty(), Ty())));\r\n\r\n    constexpr U<Ty> u[1000] = {};\r\n\r\n    assert(midpoint(u, u) == u);\r\n    assert(midpoint(u, u + 1000) == u + 500);\r\n\r\n    assert(midpoint(u, u + 9) == u + 4);\r\n    assert(midpoint(u, u + 10) == u + 5);\r\n    assert(midpoint(u, u + 11) == u + 5);\r\n    assert(midpoint(u + 9, u) == u + 5);\r\n    assert(midpoint(u + 10, u) == u + 5);\r\n    assert(midpoint(u + 11, u) == u + 6);\r\n\r\n    STATIC_ASSERT(midpoint(u, u + 9) == u + 4);\r\n    STATIC_ASSERT(midpoint(u, u + 10) == u + 5);\r\n    STATIC_ASSERT(midpoint(u, u + 11) == u + 5);\r\n    STATIC_ASSERT(midpoint(u + 9, u) == u + 5);\r\n    STATIC_ASSERT(midpoint(u + 10, u) == u + 5);\r\n    STATIC_ASSERT(midpoint(u + 11, u) == u + 6);\r\n\r\n    constexpr C<Ty> c[1000] = {};\r\n\r\n    assert(midpoint(c, c) == c);\r\n    assert(midpoint(c, c + 1000) == c + 500);\r\n\r\n    assert(midpoint(c, c + 9) == c + 4);\r\n    assert(midpoint(c, c + 10) == c + 5);\r\n    assert(midpoint(c, c + 11) == c + 5);\r\n    assert(midpoint(c + 9, c) == c + 5);\r\n    assert(midpoint(c + 10, c) == c + 5);\r\n    assert(midpoint(c + 11, c) == c + 6);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <typename Ty>\r\nconstexpr int cmp(const Ty x, const Ty y) {\r\n    if (x > y) {\r\n        return 1;\r\n    } else if (x < y) {\r\n        return -1;\r\n    } else {\r\n        return 0;\r\n    }\r\n}\r\n\r\ntemplate <typename Ty>\r\nstruct LerpTestCase {\r\n    Ty x;\r\n    Ty y;\r\n    Ty t;\r\n    Ty expected;\r\n};\r\n\r\ntemplate <typename Ty>\r\nstruct LerpNaNTestCase {\r\n    Ty x;\r\n    Ty y;\r\n    Ty t;\r\n    optional<Ty> expected_list[3] = {};\r\n};\r\n\r\ntemplate <typename Ty>\r\nstruct LerpCases { // TRANSITION, VSO-934633\r\n    static constexpr LerpTestCase<Ty> lerpTestCases[] = {\r\n        {Ty(-1.0), Ty(1.0), Ty(2.0), Ty(3.0)},\r\n        {Ty(0.0), Ty(1.0), Ty(2.0), Ty(2.0)},\r\n        {Ty(-1.0), Ty(0.0), Ty(2.0), Ty(1.0)},\r\n\r\n        {Ty(1.0), Ty(-1.0), Ty(2.0), Ty(-3.0)},\r\n        {Ty(0.0), Ty(-1.0), Ty(2.0), Ty(-2.0)},\r\n        {Ty(1.0), Ty(0.0), Ty(2.0), Ty(-1.0)},\r\n\r\n        {Ty(1.0), Ty(2.0), Ty(1.0), Ty(2.0)},\r\n\r\n        {Ty(1.0), Ty(2.0), Ty(2.0), Ty(3.0)},\r\n        {Ty(1.0), Ty(2.0), Ty(0.5), Ty(1.5)},\r\n\r\n        {Ty(1.0), Ty(2.0), Ty(0.0), Ty(1.0)},\r\n        {Ty(1.0), Ty(1.0), Ty(2.0), Ty(1.0)},\r\n\r\n        {Ty(-0.0), Ty(-0.0), Ty(0.5), Ty(-0.0)},\r\n        {Ty(0.0), Ty(0.0), Ty(0.5), Ty(0.0)},\r\n        {Ty(-5.0), Ty(5.0), Ty(0.5), Ty(0.0)},\r\n\r\n        // float: lerp(-0x1.0000000000000p-149, 0x1.0000000000000p-149, 0.5) = 0x0.0000000000000p+0\r\n        // double: lerp(-0x0.0000000000001p-1022, 0x0.0000000000001p-1022, 0.5) = 0x0.0000000000000p+0\r\n        {-limits<Ty>::denorm_min(), limits<Ty>::denorm_min(), Ty(0.5), Ty(0.0)},\r\n\r\n        // float: lerp(0x1.fffffe0000000p-4, 0x1.0000020000000p-3, 0.5) = 0x1.0000000000000p-3\r\n        // double: lerp(0x1.fffffffffffffp-4, 0x1.0000000000001p-3, 0.5) = 0x1.0000000000000p-3\r\n        {constants<Ty>::EighthMinusUlp, constants<Ty>::EighthPlusUlp, Ty(0.5), Ty(0.125)},\r\n\r\n        // float: lerp(-0x1.0000020000000p-3, -0x1.fffffe0000000p-4, 0.5) = -0x1.0000000000000p-3\r\n        // double: lerp(-0x1.0000000000001p-3, -0x1.fffffffffffffp-4, 0.5) = -0x1.0000000000000p-3\r\n        {-constants<Ty>::EighthPlusUlp, -constants<Ty>::EighthMinusUlp, Ty(0.5), Ty(-0.125)},\r\n\r\n        // float: lerp(0x1.0000000000000p-149, 0x1.0000020000000p+0, 0.5) = 0x1.0000020000000p-1\r\n        // double: lerp(0x0.0000000000001p-1022, 0x1.0000000000001p+0, 0.5) = 0x1.0000000000001p-1\r\n        {limits<Ty>::denorm_min(), constants<Ty>::OnePlusUlp, Ty(0.5), constants<Ty>::PointFivePlusUlp},\r\n\r\n        // float: lerp(-0x1.0000000000000p-149, -0x1.0000020000000p+0, 0.5) = -0x1.0000020000000p-1\r\n        // double: lerp(-0x0.0000000000001p-1022, -0x1.0000000000001p+0, 0.5) = -0x1.0000000000001p-1\r\n        {-limits<Ty>::denorm_min(), constants<Ty>::NegOneMinusUlp, Ty(0.5), -constants<Ty>::PointFivePlusUlp},\r\n\r\n        {Ty(1.0), constants<Ty>::OnePlusUlp, constants<Ty>::PointFiveMinusUlp, Ty(1.0)},\r\n        {Ty(-1.0), constants<Ty>::NegOneMinusUlp, constants<Ty>::PointFiveMinusUlp, Ty(-1.0)},\r\n\r\n        {Ty(1.0), constants<Ty>::OnePlusUlp, Ty(0.5), Ty(1.0)},\r\n        {Ty(-1.0), constants<Ty>::NegOneMinusUlp, Ty(0.5), Ty(-1.0)},\r\n\r\n        {Ty(1.0), constants<Ty>::OnePlusUlp, constants<Ty>::PointFivePlusUlp, constants<Ty>::OnePlusUlp},\r\n        {Ty(-1.0), constants<Ty>::NegOneMinusUlp, constants<Ty>::PointFivePlusUlp, constants<Ty>::NegOneMinusUlp},\r\n\r\n        {Ty(-1.0), Ty(1.0), constants<Ty>::TwoPlusUlp, Ty(2.0) * constants<Ty>::TwoPlusUlp - Ty(1.0)},\r\n        {Ty(0.0), Ty(1.0), constants<Ty>::TwoPlusUlp, constants<Ty>::TwoPlusUlp},\r\n        {Ty(-1.0), Ty(0.0), constants<Ty>::TwoPlusUlp, constants<Ty>::TwoPlusUlp - Ty(1.0)},\r\n\r\n        {Ty(1.0), Ty(-1.0), constants<Ty>::TwoPlusUlp, Ty(1.0) - Ty(2.0) * constants<Ty>::TwoPlusUlp},\r\n        {Ty(0.0), Ty(-1.0), constants<Ty>::TwoPlusUlp, -constants<Ty>::TwoPlusUlp},\r\n        {Ty(1.0), Ty(0.0), constants<Ty>::TwoPlusUlp, Ty(1.0) - constants<Ty>::TwoPlusUlp},\r\n\r\n        {Ty(1.0), Ty(2.0), constants<Ty>::OnePlusUlp, Ty(2.0)},\r\n\r\n        {Ty(1.0), Ty(2.0), constants<Ty>::TwoPlusUlp, constants<Ty>::TwoPlusUlp + Ty(1.0)},\r\n        {Ty(1.0), Ty(2.0), Ty(0.5), constants<Ty>::PointFivePlusUlp + Ty(1.0)},\r\n\r\n        {limits<Ty>::max(), limits<Ty>::max(), Ty(2.0), limits<Ty>::max()},\r\n        {limits<Ty>::lowest(), limits<Ty>::lowest(), Ty(2.0), limits<Ty>::lowest()},\r\n\r\n        {limits<Ty>::denorm_min(), Ty(1.0), Ty(0.5), limits<Ty>::denorm_min() + Ty(1.0) / Ty(2.0)},\r\n        {limits<Ty>::denorm_min(), limits<Ty>::max(), Ty(0.5), limits<Ty>::denorm_min() + limits<Ty>::max() / Ty(2.0)},\r\n        {limits<Ty>::denorm_min(), limits<Ty>::lowest(), Ty(0.5),\r\n            (limits<Ty>::denorm_min() + limits<Ty>::lowest()) / Ty(2.0)},\r\n        {limits<Ty>::denorm_min(), limits<Ty>::infinity(), Ty(0.5), limits<Ty>::infinity()},\r\n        {limits<Ty>::denorm_min(), -limits<Ty>::infinity(), Ty(0.5), -limits<Ty>::infinity()},\r\n\r\n        // the following handling of infinities isn't in the spec, but seems like the right behavior:\r\n\r\n        // if the values differ and T is an infinity, the appropriate infinity according to direction\r\n        {Ty(0), Ty(1), limits<Ty>::infinity(), limits<Ty>::infinity()},\r\n        {Ty(0), Ty(1), -limits<Ty>::infinity(), -limits<Ty>::infinity()},\r\n        {Ty(0), -Ty(1), limits<Ty>::infinity(), -limits<Ty>::infinity()},\r\n        {Ty(0), -Ty(1), -limits<Ty>::infinity(), limits<Ty>::infinity()},\r\n\r\n        // when the inputs are infinity of the same sign and 0 < T < 1, return that infinity\r\n        {limits<Ty>::infinity(), limits<Ty>::infinity(), limits<Ty>::denorm_min(), limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), -limits<Ty>::infinity(), limits<Ty>::denorm_min(), -limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), limits<Ty>::infinity(), Ty(0.5), limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), -limits<Ty>::infinity(), Ty(0.5), -limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), limits<Ty>::infinity(), constants<Ty>::OneMinusUlp, limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), -limits<Ty>::infinity(), constants<Ty>::OneMinusUlp, -limits<Ty>::infinity()},\r\n\r\n        // when the inputs are infinity of opposite signs and T > 1, return the second parameter\r\n        {-limits<Ty>::infinity(), limits<Ty>::infinity(), constants<Ty>::OnePlusUlp, limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), -limits<Ty>::infinity(), constants<Ty>::OnePlusUlp, -limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), limits<Ty>::infinity(), Ty(2.0), limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), -limits<Ty>::infinity(), Ty(2.0), -limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), limits<Ty>::infinity(), limits<Ty>::max(), limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), -limits<Ty>::infinity(), limits<Ty>::max(), -limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), limits<Ty>::infinity(), limits<Ty>::infinity(), limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), -limits<Ty>::infinity(), limits<Ty>::infinity(), -limits<Ty>::infinity()},\r\n\r\n        // when the inputs are infinity of opposite signs and T < 0, return the first parameter\r\n        {-limits<Ty>::infinity(), limits<Ty>::infinity(), -limits<Ty>::infinity(), -limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), -limits<Ty>::infinity(), -limits<Ty>::infinity(), limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), limits<Ty>::infinity(), -limits<Ty>::max(), -limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), -limits<Ty>::infinity(), -limits<Ty>::max(), limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), limits<Ty>::infinity(), -Ty(2.0), -limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), -limits<Ty>::infinity(), -Ty(2.0), limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), limits<Ty>::infinity(), -limits<Ty>::denorm_min(), -limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), -limits<Ty>::infinity(), -limits<Ty>::denorm_min(), limits<Ty>::infinity()},\r\n\r\n        // if a is an infinity, b is finite and T != 1, return that infinity or the other according to \"direction\" of t\r\n        {limits<Ty>::infinity(), Ty(1.0), -limits<Ty>::infinity(), limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), Ty(1.0), -limits<Ty>::max(), limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), Ty(1.0), -Ty(1.0), limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), Ty(1.0), -limits<Ty>::denorm_min(), limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), Ty(1.0), -Ty(0.0), limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), Ty(1.0), Ty(0.0), limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), Ty(1.0), limits<Ty>::denorm_min(), limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), Ty(1.0), Ty(0.5), limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), Ty(1.0), constants<Ty>::OneMinusUlp, limits<Ty>::infinity()},\r\n\r\n        {limits<Ty>::infinity(), Ty(1.0), constants<Ty>::OnePlusUlp, -limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), Ty(1.0), Ty(2.0), -limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), Ty(1.0), limits<Ty>::max(), -limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), Ty(1.0), limits<Ty>::infinity(), -limits<Ty>::infinity()},\r\n\r\n        {-limits<Ty>::infinity(), Ty(1.0), -limits<Ty>::infinity(), -limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), Ty(1.0), -limits<Ty>::max(), -limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), Ty(1.0), -Ty(1.0), -limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), Ty(1.0), -limits<Ty>::denorm_min(), -limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), Ty(1.0), -Ty(0.0), -limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), Ty(1.0), Ty(0.0), -limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), Ty(1.0), limits<Ty>::denorm_min(), -limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), Ty(1.0), Ty(0.5), -limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), Ty(1.0), constants<Ty>::OneMinusUlp, -limits<Ty>::infinity()},\r\n\r\n        {-limits<Ty>::infinity(), Ty(1.0), constants<Ty>::OnePlusUlp, limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), Ty(1.0), Ty(2.0), limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), Ty(1.0), limits<Ty>::max(), limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), Ty(1.0), limits<Ty>::infinity(), limits<Ty>::infinity()},\r\n\r\n        // if b is an infinity, a is finite and T != 0, return that infinity or the other according to \"direction\" of t\r\n        {Ty(1.0), limits<Ty>::infinity(), -limits<Ty>::infinity(), -limits<Ty>::infinity()},\r\n        {Ty(1.0), limits<Ty>::infinity(), -limits<Ty>::max(), -limits<Ty>::infinity()},\r\n        {Ty(1.0), limits<Ty>::infinity(), -Ty(1.0), -limits<Ty>::infinity()},\r\n        {Ty(1.0), limits<Ty>::infinity(), -limits<Ty>::denorm_min(), -limits<Ty>::infinity()},\r\n\r\n        {Ty(1.0), limits<Ty>::infinity(), limits<Ty>::denorm_min(), limits<Ty>::infinity()},\r\n        {Ty(1.0), limits<Ty>::infinity(), Ty(0.5), limits<Ty>::infinity()},\r\n        {Ty(1.0), limits<Ty>::infinity(), constants<Ty>::OneMinusUlp, limits<Ty>::infinity()},\r\n        {Ty(1.0), limits<Ty>::infinity(), Ty(1.0), limits<Ty>::infinity()},\r\n        {Ty(1.0), limits<Ty>::infinity(), constants<Ty>::OnePlusUlp, limits<Ty>::infinity()},\r\n        {Ty(1.0), limits<Ty>::infinity(), Ty(2.0), limits<Ty>::infinity()},\r\n        {Ty(1.0), limits<Ty>::infinity(), limits<Ty>::max(), limits<Ty>::infinity()},\r\n        {Ty(1.0), limits<Ty>::infinity(), limits<Ty>::infinity(), limits<Ty>::infinity()},\r\n\r\n        {Ty(1.0), -limits<Ty>::infinity(), -limits<Ty>::infinity(), limits<Ty>::infinity()},\r\n        {Ty(1.0), -limits<Ty>::infinity(), -limits<Ty>::max(), limits<Ty>::infinity()},\r\n        {Ty(1.0), -limits<Ty>::infinity(), -Ty(1.0), limits<Ty>::infinity()},\r\n        {Ty(1.0), -limits<Ty>::infinity(), -limits<Ty>::denorm_min(), limits<Ty>::infinity()},\r\n\r\n        {Ty(1.0), -limits<Ty>::infinity(), limits<Ty>::denorm_min(), -limits<Ty>::infinity()},\r\n        {Ty(1.0), -limits<Ty>::infinity(), Ty(0.5), -limits<Ty>::infinity()},\r\n        {Ty(1.0), -limits<Ty>::infinity(), constants<Ty>::OneMinusUlp, -limits<Ty>::infinity()},\r\n        {Ty(1.0), -limits<Ty>::infinity(), Ty(1.0), -limits<Ty>::infinity()},\r\n        {Ty(1.0), -limits<Ty>::infinity(), constants<Ty>::OnePlusUlp, -limits<Ty>::infinity()},\r\n        {Ty(1.0), -limits<Ty>::infinity(), Ty(2.0), -limits<Ty>::infinity()},\r\n        {Ty(1.0), -limits<Ty>::infinity(), limits<Ty>::max(), -limits<Ty>::infinity()},\r\n        {Ty(1.0), -limits<Ty>::infinity(), limits<Ty>::infinity(), -limits<Ty>::infinity()},\r\n    };\r\n\r\n    static constexpr LerpTestCase<Ty> lerpOverflowTestCases[] = {\r\n        {limits<Ty>::lowest(), limits<Ty>::max(), Ty(2.0), limits<Ty>::infinity()},\r\n        {limits<Ty>::max(), limits<Ty>::lowest(), Ty(2.0), -limits<Ty>::infinity()},\r\n    };\r\n\r\n    static constexpr LerpNaNTestCase<Ty> lerpInvalidTestCases[] = {\r\n        // if the values are equal and T is an infinity, NaN\r\n        {Ty(0), Ty(0), limits<Ty>::infinity()},\r\n        {Ty(0), Ty(0), -limits<Ty>::infinity()},\r\n\r\n        // when the inputs are infinity of the same sign and T <= 0, return NaN\r\n        {limits<Ty>::infinity(), limits<Ty>::infinity(), -limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), -limits<Ty>::infinity(), -limits<Ty>::infinity()},\r\n        {limits<Ty>::infinity(), limits<Ty>::infinity(), -limits<Ty>::max()},\r\n        {-limits<Ty>::infinity(), -limits<Ty>::infinity(), -limits<Ty>::max()},\r\n        {limits<Ty>::infinity(), limits<Ty>::infinity(), -Ty(1.0)},\r\n        {-limits<Ty>::infinity(), -limits<Ty>::infinity(), -Ty(1.0)},\r\n        {limits<Ty>::infinity(), limits<Ty>::infinity(), -limits<Ty>::denorm_min()},\r\n        {-limits<Ty>::infinity(), -limits<Ty>::infinity(), -limits<Ty>::denorm_min()},\r\n        {limits<Ty>::infinity(), limits<Ty>::infinity(), -Ty(0.0)},\r\n        {-limits<Ty>::infinity(), -limits<Ty>::infinity(), -Ty(0.0)},\r\n        {limits<Ty>::infinity(), limits<Ty>::infinity(), Ty(0.0)},\r\n        {-limits<Ty>::infinity(), -limits<Ty>::infinity(), Ty(0.0)},\r\n\r\n        // when the inputs are infinity of the same sign and T >= 1, return NaN\r\n        {limits<Ty>::infinity(), limits<Ty>::infinity(), Ty(1.0)},\r\n        {-limits<Ty>::infinity(), -limits<Ty>::infinity(), Ty(1.0)},\r\n        {limits<Ty>::infinity(), limits<Ty>::infinity(), constants<Ty>::OnePlusUlp},\r\n        {-limits<Ty>::infinity(), -limits<Ty>::infinity(), constants<Ty>::OnePlusUlp},\r\n        {limits<Ty>::infinity(), limits<Ty>::infinity(), Ty(2.0)},\r\n        {-limits<Ty>::infinity(), -limits<Ty>::infinity(), Ty(2.0)},\r\n        {limits<Ty>::infinity(), limits<Ty>::infinity(), limits<Ty>::max()},\r\n        {-limits<Ty>::infinity(), -limits<Ty>::infinity(), limits<Ty>::max()},\r\n        {limits<Ty>::infinity(), limits<Ty>::infinity(), limits<Ty>::infinity()},\r\n        {-limits<Ty>::infinity(), -limits<Ty>::infinity(), limits<Ty>::infinity()},\r\n\r\n        // when the inputs are infinity of opposite signs and 0 <= T <= 1, return NaN\r\n        {-limits<Ty>::infinity(), limits<Ty>::infinity(), -Ty(0.0)},\r\n        {limits<Ty>::infinity(), -limits<Ty>::infinity(), -Ty(0.0)},\r\n        {-limits<Ty>::infinity(), limits<Ty>::infinity(), Ty(0.0)},\r\n        {limits<Ty>::infinity(), -limits<Ty>::infinity(), Ty(0.0)},\r\n        {-limits<Ty>::infinity(), limits<Ty>::infinity(), limits<Ty>::denorm_min()},\r\n        {limits<Ty>::infinity(), -limits<Ty>::infinity(), limits<Ty>::denorm_min()},\r\n        {-limits<Ty>::infinity(), limits<Ty>::infinity(), Ty(0.5)},\r\n        {limits<Ty>::infinity(), -limits<Ty>::infinity(), Ty(0.5)},\r\n        {-limits<Ty>::infinity(), limits<Ty>::infinity(), constants<Ty>::OneMinusUlp},\r\n        {limits<Ty>::infinity(), -limits<Ty>::infinity(), constants<Ty>::OneMinusUlp},\r\n        {-limits<Ty>::infinity(), limits<Ty>::infinity(), Ty(1.0)},\r\n        {limits<Ty>::infinity(), -limits<Ty>::infinity(), Ty(1.0)},\r\n\r\n        // if a is an infinity, b is finite and T = 1, return NaN\r\n        {limits<Ty>::infinity(), Ty(1.0), Ty(1.0)},\r\n        {-limits<Ty>::infinity(), Ty(1.0), Ty(1.0)},\r\n\r\n        // if b is an infinity, a is finite and T = 0, return NaN\r\n        {Ty(1.0), limits<Ty>::infinity(), Ty(0.0)},\r\n        {Ty(1.0), limits<Ty>::infinity(), -Ty(0.0)},\r\n        {Ty(1.0), -limits<Ty>::infinity(), Ty(0.0)},\r\n        {Ty(1.0), -limits<Ty>::infinity(), -Ty(0.0)},\r\n    };\r\n\r\n    static constexpr LerpNaNTestCase<Ty> lerpNaNTestCases[] = {\r\n        {mint_nan<Ty>(0, 42), mint_nan<Ty>(1, 42), mint_nan<Ty>(0, 1729),\r\n            {mint_nan<Ty>(0, 42), mint_nan<Ty>(1, 42), mint_nan<Ty>(0, 1729)}},\r\n        {Ty(1.0), mint_nan<Ty>(1, 42), mint_nan<Ty>(0, 1729), {mint_nan<Ty>(1, 42), mint_nan<Ty>(0, 1729)}},\r\n        {mint_nan<Ty>(1, 42), Ty(1.0), mint_nan<Ty>(0, 1729), {mint_nan<Ty>(1, 42), mint_nan<Ty>(0, 1729)}},\r\n        {Ty(1.0), Ty(1.0), mint_nan<Ty>(0, 1729), {mint_nan<Ty>(0, 1729)}},\r\n\r\n        {limits<Ty>::infinity(), mint_nan<Ty>(1, 42), mint_nan<Ty>(0, 1729),\r\n            {mint_nan<Ty>(1, 42), mint_nan<Ty>(0, 1729)}},\r\n        {mint_nan<Ty>(1, 42), limits<Ty>::infinity(), mint_nan<Ty>(0, 1729),\r\n            {mint_nan<Ty>(1, 42), mint_nan<Ty>(0, 1729)}},\r\n        {limits<Ty>::infinity(), limits<Ty>::infinity(), mint_nan<Ty>(0, 1729), {mint_nan<Ty>(0, 1729)}},\r\n\r\n        {mint_nan<Ty>(0, 42), mint_nan<Ty>(1, 42), -Ty(0.0), {mint_nan<Ty>(0, 42), mint_nan<Ty>(1, 42)}},\r\n        {mint_nan<Ty>(0, 42), mint_nan<Ty>(1, 42), Ty(0.0), {mint_nan<Ty>(0, 42), mint_nan<Ty>(1, 42)}},\r\n        {mint_nan<Ty>(0, 42), mint_nan<Ty>(1, 42), Ty(1.0), {mint_nan<Ty>(0, 42), mint_nan<Ty>(1, 42)}},\r\n        {mint_nan<Ty>(0, 42), Ty(1.0), -Ty(0.0), {mint_nan<Ty>(0, 42)}},\r\n        {mint_nan<Ty>(0, 42), Ty(1.0), Ty(0.0), {mint_nan<Ty>(0, 42)}},\r\n        {mint_nan<Ty>(0, 42), Ty(1.0), Ty(1.0), {mint_nan<Ty>(0, 42)}},\r\n        {mint_nan<Ty>(0, 42), limits<Ty>::infinity(), -Ty(0.0), {mint_nan<Ty>(0, 42)}},\r\n        {mint_nan<Ty>(0, 42), limits<Ty>::infinity(), Ty(0.0), {mint_nan<Ty>(0, 42)}},\r\n        {mint_nan<Ty>(0, 42), limits<Ty>::infinity(), Ty(1.0), {mint_nan<Ty>(0, 42)}},\r\n        {Ty(1.0), mint_nan<Ty>(1, 42), -Ty(0.0), {mint_nan<Ty>(1, 42)}},\r\n        {Ty(1.0), mint_nan<Ty>(1, 42), Ty(0.0), {mint_nan<Ty>(1, 42)}},\r\n        {Ty(1.0), mint_nan<Ty>(1, 42), Ty(1.0), {mint_nan<Ty>(1, 42)}},\r\n        {limits<Ty>::infinity(), mint_nan<Ty>(1, 42), -Ty(0.0), {mint_nan<Ty>(1, 42)}},\r\n        {limits<Ty>::infinity(), mint_nan<Ty>(1, 42), Ty(0.0), {mint_nan<Ty>(1, 42)}},\r\n        {limits<Ty>::infinity(), mint_nan<Ty>(1, 42), Ty(1.0), {mint_nan<Ty>(1, 42)}},\r\n    };\r\n};\r\n\r\ntemplate <typename Ty>\r\nvoid print_lerp_result(const LerpTestCase<Ty>& testCase, const Ty answer) {\r\n    char failureMessageBuffer[1000]{};\r\n    char* cursor = failureMessageBuffer;\r\n    char* end    = cursor + sizeof(failureMessageBuffer);\r\n    memcpy(cursor, \"lerp(\", 5);\r\n    cursor += 5;\r\n    cursor = to_chars(cursor, end, testCase.x).ptr;\r\n    memcpy(cursor, \", \", 2);\r\n    cursor += 2;\r\n    cursor = to_chars(cursor, end, testCase.y).ptr;\r\n    memcpy(cursor, \", \", 2);\r\n    cursor += 2;\r\n    cursor = to_chars(cursor, end, testCase.t).ptr;\r\n    memcpy(cursor, \") == \", 5);\r\n    cursor += 5;\r\n    cursor = to_chars(cursor, end, answer).ptr;\r\n    memcpy(cursor, \"; expected \", 11);\r\n    cursor += 11;\r\n    cursor    = to_chars(cursor, end, testCase.expected).ptr;\r\n    cursor[0] = '\\0';\r\n    puts(failureMessageBuffer);\r\n}\r\n\r\ntemplate <typename Ty>\r\nvoid print_lerp_result(const LerpNaNTestCase<Ty>& testCase, const Ty answer) {\r\n    char failureMessageBuffer[1000]{};\r\n    char* cursor = failureMessageBuffer;\r\n    char* end    = cursor + sizeof(failureMessageBuffer);\r\n    memcpy(cursor, \"lerp(\", 5);\r\n    cursor += 5;\r\n    cursor = to_chars(cursor, end, testCase.x).ptr;\r\n    memcpy(cursor, \", \", 2);\r\n    cursor += 2;\r\n    cursor = to_chars(cursor, end, testCase.y).ptr;\r\n    memcpy(cursor, \", \", 2);\r\n    cursor += 2;\r\n    cursor = to_chars(cursor, end, testCase.t).ptr;\r\n    memcpy(cursor, \") == \", 5);\r\n    cursor += 5;\r\n    cursor = to_chars(cursor, end, answer).ptr;\r\n    memcpy(cursor, \"; expected a NaN\", 17);\r\n    puts(failureMessageBuffer);\r\n}\r\n\r\ntemplate <typename Ty>\r\nbool test_lerp() {\r\n    STATIC_ASSERT(is_same_v<decltype(lerp(Ty(), Ty(), Ty())), decltype(Ty())>);\r\n    STATIC_ASSERT(is_signed_v<Ty>);\r\n    STATIC_ASSERT(noexcept(lerp(Ty(), Ty(), Ty())));\r\n\r\n    constexpr auto test_lerp_constexpr = [] {\r\n        using bit_type = conditional_t<sizeof(Ty) == 4, unsigned int, unsigned long long>;\r\n\r\n        for (const auto& testCase : LerpCases<Ty>::lerpTestCases) {\r\n            const auto answer = lerp(testCase.x, testCase.y, testCase.t);\r\n            assert(bit_cast<bit_type>(answer) == bit_cast<bit_type>(testCase.expected));\r\n        }\r\n\r\n        for (auto&& testCase : LerpCases<Ty>::lerpNaNTestCases) {\r\n            const auto answer = lerp(testCase.x, testCase.y, testCase.t);\r\n            assert(any_of(begin(testCase.expected_list), end(testCase.expected_list), [&](const auto& expected) {\r\n                return expected.has_value() && bit_cast<bit_type>(answer) == bit_cast<bit_type>(expected.value());\r\n            }));\r\n        }\r\n\r\n        return true;\r\n    };\r\n\r\n    STATIC_ASSERT(test_lerp_constexpr());\r\n\r\n    for (auto&& testCase : LerpCases<Ty>::lerpTestCases) {\r\n        ExceptGuard except;\r\n        const auto answer = lerp(testCase.x, testCase.y, testCase.t);\r\n        if (!check_feexcept(0) || memcmp(&answer, &testCase.expected, sizeof(Ty)) != 0) {\r\n            print_lerp_result(testCase, answer);\r\n            abort();\r\n        }\r\n    }\r\n\r\n    for (auto&& testCase : LerpCases<Ty>::lerpOverflowTestCases) {\r\n        ExceptGuard except;\r\n        const auto answer = lerp(testCase.x, testCase.y, testCase.t);\r\n        if (!check_feexcept(fe_overflow) || memcmp(&answer, &testCase.expected, sizeof(Ty)) != 0) {\r\n            print_lerp_result(testCase, answer);\r\n            abort();\r\n        }\r\n    }\r\n\r\n    for (auto&& testCase : LerpCases<Ty>::lerpInvalidTestCases) {\r\n        ExceptGuard except;\r\n        const auto answer = lerp(testCase.x, testCase.y, testCase.t);\r\n        if (!check_feexcept(fe_invalid) || !isnan(answer)) {\r\n            print_lerp_result(testCase, answer);\r\n            abort();\r\n        }\r\n    }\r\n\r\n    for (auto&& testCase : LerpCases<Ty>::lerpNaNTestCases) {\r\n        ExceptGuard except;\r\n        const auto answer = lerp(testCase.x, testCase.y, testCase.t);\r\n        if (!check_feexcept(0)\r\n            || none_of(begin(testCase.expected_list), end(testCase.expected_list), [&answer](const auto& expected) {\r\n                   return expected.has_value() && memcmp(&answer, &expected.value(), sizeof(Ty)) == 0;\r\n               })) {\r\n            print_lerp_result(testCase, answer);\r\n            abort();\r\n        }\r\n    }\r\n\r\n    constexpr auto test_lerp_snan = [](const Ty& a, const Ty& b, const Ty& t) {\r\n        ExceptGuard except;\r\n        const auto answer = lerp(a, b, t);\r\n        return check_feexcept(fe_invalid) && isnan(answer);\r\n    };\r\n\r\n    Ty snan;\r\n    make_snan(snan);\r\n\r\n    assert(test_lerp_snan(snan, limits<Ty>::quiet_NaN(), limits<Ty>::quiet_NaN()));\r\n    assert(test_lerp_snan(limits<Ty>::quiet_NaN(), snan, limits<Ty>::quiet_NaN()));\r\n    assert(test_lerp_snan(snan, snan, limits<Ty>::quiet_NaN()));\r\n    assert(test_lerp_snan(limits<Ty>::quiet_NaN(), limits<Ty>::quiet_NaN(), snan));\r\n    assert(test_lerp_snan(snan, limits<Ty>::quiet_NaN(), snan));\r\n    assert(test_lerp_snan(limits<Ty>::quiet_NaN(), snan, snan));\r\n    assert(test_lerp_snan(snan, snan, snan));\r\n\r\n    assert(test_lerp_snan(Ty{0}, Ty{0}, snan));\r\n    assert(test_lerp_snan(Ty{1}, Ty{1}, snan));\r\n    assert(test_lerp_snan(Ty{0}, snan, Ty{0}));\r\n    assert(test_lerp_snan(Ty{0}, snan, Ty{1}));\r\n    assert(test_lerp_snan(snan, Ty{0}, Ty{0}));\r\n    assert(test_lerp_snan(snan, Ty{0}, Ty{1}));\r\n\r\n    STATIC_ASSERT(cmp(lerp(Ty(1.0), Ty(2.0), Ty(4.0)), lerp(Ty(1.0), Ty(2.0), Ty(3.0))) * cmp(Ty(4.0), Ty(3.0))\r\n                      * cmp(Ty(2.0), Ty(1.0))\r\n                  >= 0);\r\n\r\n    assert(cmp(lerp(Ty(1.0), Ty(2.0), Ty(4.0)), lerp(Ty(1.0), Ty(2.0), Ty(3.0))) * cmp(Ty(4.0), Ty(3.0))\r\n               * cmp(Ty(2.0), Ty(1.0))\r\n           >= 0);\r\n\r\n    return true;\r\n}\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4756) // ignore constant arithmetic overflow warning\r\nvoid test_gh_1917() {\r\n    // GH-1917 <cmath>: lerp(1e+308, 5e+307, 4.0) spuriously overflows\r\n    using bit_type       = unsigned long long;\r\n    using float_bit_type = unsigned int;\r\n    STATIC_ASSERT(bit_cast<bit_type>(lerp(1e+308, 5e+307, 4.0)) == bit_cast<bit_type>(-1e+308));\r\n    {\r\n        ExceptGuard except;\r\n\r\n        assert(bit_cast<bit_type>(lerp(1e+308, 5e+307, 4.0)) == bit_cast<bit_type>(-1e+308));\r\n        assert(check_feexcept(0));\r\n    }\r\n    STATIC_ASSERT(bit_cast<float_bit_type>(lerp(2e+38f, 1e+38f, 4.0f)) == bit_cast<float_bit_type>(-2e+38f));\r\n    {\r\n        ExceptGuard except;\r\n\r\n        assert(bit_cast<float_bit_type>(lerp(2e+38f, 1e+38f, 4.0f)) == bit_cast<float_bit_type>(-2e+38f));\r\n#if !defined(_M_ARM64) && !defined(_M_ARM64EC) // TRANSITION, GH-5685\r\n        assert(check_feexcept(0));\r\n#endif // ^^^ no workaround ^^^\r\n    }\r\n#ifdef _M_FP_STRICT\r\n    {\r\n        ExceptGuard except;\r\n        RoundGuard round{FE_UPWARD};\r\n\r\n        assert(bit_cast<bit_type>(lerp(1e+308, 5e+307, 4.0)) == bit_cast<bit_type>(-1e+308));\r\n        assert(check_feexcept(0));\r\n    }\r\n    {\r\n        ExceptGuard except;\r\n        RoundGuard round{FE_UPWARD};\r\n\r\n        assert(bit_cast<float_bit_type>(lerp(2e+38f, 1e+38f, 4.0f)) == bit_cast<float_bit_type>(-2e+38f));\r\n#if !defined(_M_ARM64) && !defined(_M_ARM64EC) // TRANSITION, GH-5685\r\n        assert(check_feexcept(0));\r\n#endif // ^^^ no workaround ^^^\r\n    }\r\n    {\r\n        ExceptGuard except;\r\n        RoundGuard round{FE_DOWNWARD};\r\n\r\n        assert(bit_cast<bit_type>(lerp(1e+308, 5e+307, 4.0)) == bit_cast<bit_type>(-1e+308));\r\n        assert(check_feexcept(0));\r\n    }\r\n    {\r\n        ExceptGuard except;\r\n        RoundGuard round{FE_DOWNWARD};\r\n\r\n        assert(bit_cast<float_bit_type>(lerp(2e+38f, 1e+38f, 4.0f)) == bit_cast<float_bit_type>(-2e+38f));\r\n#if !defined(_M_ARM64) && !defined(_M_ARM64EC) // TRANSITION, GH-5685\r\n        assert(check_feexcept(0));\r\n#endif // ^^^ no workaround ^^^\r\n    }\r\n    {\r\n        ExceptGuard except;\r\n        RoundGuard round{FE_TOWARDZERO};\r\n\r\n        assert(bit_cast<bit_type>(lerp(1e+308, 5e+307, 4.0)) == bit_cast<bit_type>(-1e+308));\r\n        assert(check_feexcept(0));\r\n    }\r\n    {\r\n        ExceptGuard except;\r\n        RoundGuard round{FE_TOWARDZERO};\r\n\r\n        assert(bit_cast<float_bit_type>(lerp(2e+38f, 1e+38f, 4.0f)) == bit_cast<float_bit_type>(-2e+38f));\r\n#if !defined(_M_ARM64) && !defined(_M_ARM64EC) // TRANSITION, GH-5685\r\n        assert(check_feexcept(0));\r\n#endif // ^^^ no workaround ^^^\r\n    }\r\n    {\r\n        ExceptGuard except;\r\n        const int r = feraiseexcept(FE_OVERFLOW);\r\n\r\n        assert(r == 0);\r\n        assert(bit_cast<bit_type>(lerp(1e+308, 5e+307, 4.0)) == bit_cast<bit_type>(-1e+308));\r\n        assert(check_feexcept(FE_OVERFLOW));\r\n    }\r\n    {\r\n        ExceptGuard except;\r\n        const int r = feraiseexcept(FE_OVERFLOW);\r\n\r\n        assert(r == 0);\r\n        assert(bit_cast<float_bit_type>(lerp(2e+38f, 1e+38f, 4.0f)) == bit_cast<float_bit_type>(-2e+38f));\r\n        assert(check_feexcept(FE_OVERFLOW));\r\n    }\r\n#endif // _M_FP_STRICT\r\n}\r\n#pragma warning(pop)\r\n\r\nconstexpr bool test_gh_2112() {\r\n    // GH-2112 <cmath>: std::lerp is missing Arithmetic overloads\r\n    assert(lerp(0, 0, 0) == 0.0);\r\n    assert(lerp(0.0f, 0.0f, 0.0) == 0.0);\r\n    assert(lerp(0.0L, 0, 0) == 0.0L);\r\n\r\n    STATIC_ASSERT(is_same_v<double, decltype(lerp(0, 0, 0))>);\r\n    STATIC_ASSERT(is_same_v<long double, decltype(lerp(0.0L, 0, 0))>);\r\n    STATIC_ASSERT(is_same_v<long double, decltype(lerp(0, 0.0L, 0))>);\r\n    STATIC_ASSERT(is_same_v<long double, decltype(lerp(0, 0, 0.0L))>);\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test_constants<float>();\r\n    test_constants<double>();\r\n    test_constants<long double>();\r\n\r\n    STATIC_ASSERT(test_midpoint_integer_signed<char>());\r\n    STATIC_ASSERT(test_midpoint_integer_signed<signed char>());\r\n    STATIC_ASSERT(test_midpoint_integer_signed<short>());\r\n    STATIC_ASSERT(test_midpoint_integer_signed<int>());\r\n    STATIC_ASSERT(test_midpoint_integer_signed<long>());\r\n    STATIC_ASSERT(test_midpoint_integer_signed<long long>());\r\n\r\n    STATIC_ASSERT(test_midpoint_integer_unsigned<wchar_t>());\r\n#ifdef __cpp_char8_t\r\n    STATIC_ASSERT(test_midpoint_integer_unsigned<char8_t>());\r\n#endif // __cpp_char8_t\r\n    STATIC_ASSERT(test_midpoint_integer_unsigned<char16_t>());\r\n    STATIC_ASSERT(test_midpoint_integer_unsigned<char32_t>());\r\n    STATIC_ASSERT(test_midpoint_integer_unsigned<unsigned char>());\r\n    STATIC_ASSERT(test_midpoint_integer_unsigned<unsigned short>());\r\n    STATIC_ASSERT(test_midpoint_integer_unsigned<unsigned int>());\r\n    STATIC_ASSERT(test_midpoint_integer_unsigned<unsigned long>());\r\n    STATIC_ASSERT(test_midpoint_integer_unsigned<unsigned long long>());\r\n\r\n    test_midpoint_integer_signed<char>();\r\n    test_midpoint_integer_signed<signed char>();\r\n    test_midpoint_integer_signed<short>();\r\n    test_midpoint_integer_signed<int>();\r\n    test_midpoint_integer_signed<long>();\r\n    test_midpoint_integer_signed<long long>();\r\n\r\n    test_midpoint_integer_unsigned<wchar_t>();\r\n#ifdef __cpp_char8_t\r\n    test_midpoint_integer_unsigned<char8_t>();\r\n#endif // __cpp_char8_t\r\n    test_midpoint_integer_unsigned<char16_t>();\r\n    test_midpoint_integer_unsigned<char32_t>();\r\n    test_midpoint_integer_unsigned<unsigned char>();\r\n    test_midpoint_integer_unsigned<unsigned short>();\r\n    test_midpoint_integer_unsigned<unsigned int>();\r\n    test_midpoint_integer_unsigned<unsigned long>();\r\n    test_midpoint_integer_unsigned<unsigned long long>();\r\n\r\n    STATIC_ASSERT(test_midpoint_floating_constexpr<float>());\r\n    STATIC_ASSERT(test_midpoint_floating_constexpr<double>());\r\n    STATIC_ASSERT(test_midpoint_floating_constexpr<long double>());\r\n\r\n    {\r\n        ExceptGuard except;\r\n        test_midpoint_floating_constexpr<float>();\r\n        test_midpoint_floating_constexpr<double>();\r\n        test_midpoint_floating_constexpr<long double>();\r\n        assert(check_feexcept(0));\r\n    }\r\n\r\n    test_midpoint_floating<float>();\r\n    test_midpoint_floating<double>();\r\n    test_midpoint_floating<long double>();\r\n\r\n    STATIC_ASSERT(test_midpoint_pointer<char>());\r\n    STATIC_ASSERT(test_midpoint_pointer<int>());\r\n    STATIC_ASSERT(test_midpoint_pointer<double>());\r\n\r\n    test_midpoint_pointer<char>();\r\n    test_midpoint_pointer<int>();\r\n    test_midpoint_pointer<double>();\r\n\r\n    test_lerp<float>();\r\n    test_lerp<double>();\r\n    test_lerp<long double>();\r\n\r\n    test_gh_1917();\r\n    test_gh_2112();\r\n    STATIC_ASSERT(test_gh_2112());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0881R7_stacktrace/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/Zi /DHAS_DEBUG_INFO\" PM_LINK=\"/debug\"\r\n*\tPM_CL=\"/DHAS_EXPORT\"\r\n*\tPM_CL=\"\"\r\n"
  },
  {
    "path": "tests/std/tests/P0881R7_stacktrace/postexecute.pl",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nuse strict;\r\nuse warnings;\r\n\r\nsub PostExecuteHook()\r\n{\r\n    Run::Delete(\"P0881R7_stacktrace.exe\");\r\n    Run::Delete(\"P0881R7_stacktrace.exp\");\r\n    Run::Delete(\"P0881R7_stacktrace.lib\");\r\n    Run::Delete(\"P0881R7_stacktrace.pdb\");\r\n    Run::Delete(\"test.obj\");\r\n    Run::Delete(\"vc140.pdb\");\r\n}\r\n1\r\n"
  },
  {
    "path": "tests/std/tests/P0881R7_stacktrace/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <filesystem>\r\n#include <iterator>\r\n#include <memory_resource>\r\n#include <ostream>\r\n#include <sstream>\r\n#include <stacktrace>\r\n#include <stdexcept>\r\n#include <string>\r\n#include <string_view>\r\n\r\n#ifdef HAS_EXPORT\r\n#define MAYBE_EXPORT __declspec(dllexport)\r\n#else // ^^^ HAS_EXPORT / !HAS_EXPORT vvv\r\n#define MAYBE_EXPORT\r\n#endif // ^^^ !HAS_EXPORT ^^^\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Ostream, class Alloc = allocator<stacktrace_entry>>\r\nconcept CanPrintStacktrace = requires(Ostream& os, const stacktrace_entry& f, const basic_stacktrace<Alloc>& st) {\r\n    { os << f } -> same_as<basic_ostream<typename Ostream::char_type, typename Ostream::traits_type>&>;\r\n    { os << st } -> same_as<basic_ostream<typename Ostream::char_type, typename Ostream::traits_type>&>;\r\n};\r\n\r\ntemplate <class CharT>\r\nstruct FancyCharTraits : char_traits<CharT> {};\r\n\r\nstatic_assert(CanPrintStacktrace<ostream>);\r\nstatic_assert(CanPrintStacktrace<ostringstream>);\r\nstatic_assert(CanPrintStacktrace<ostream, pmr::polymorphic_allocator<stacktrace_entry>>);\r\n\r\nstatic_assert(!CanPrintStacktrace<wostream>);\r\nstatic_assert(!CanPrintStacktrace<wostringstream>);\r\nstatic_assert(!CanPrintStacktrace<wostream, pmr::polymorphic_allocator<stacktrace_entry>>);\r\n\r\nusing FancyCharStream = basic_ostream<char, FancyCharTraits<char>>;\r\nstatic_assert(!CanPrintStacktrace<FancyCharStream>);\r\nstatic_assert(!CanPrintStacktrace<FancyCharStream, pmr::polymorphic_allocator<stacktrace_entry>>);\r\n\r\nusing FancyWcharStream = basic_ostream<wchar_t, FancyCharTraits<wchar_t>>;\r\nstatic_assert(!CanPrintStacktrace<FancyWcharStream>);\r\nstatic_assert(!CanPrintStacktrace<FancyWcharStream, pmr::polymorphic_allocator<stacktrace_entry>>);\r\n\r\n[[maybe_unused]] const int base_line = __LINE__;\r\n\r\n// Note: the below assumes that tail call optimization is disabled, which is the case in /Od\r\n\r\nMAYBE_EXPORT stacktrace all_innermost() {\r\n    return stacktrace::current();\r\n}\r\n\r\nMAYBE_EXPORT stacktrace all_inner() {\r\n    return all_innermost();\r\n}\r\n\r\nMAYBE_EXPORT stacktrace all_outer() {\r\n    return all_inner();\r\n}\r\n\r\nMAYBE_EXPORT stacktrace all_outermost() {\r\n    return all_outer();\r\n}\r\n\r\nMAYBE_EXPORT stacktrace all_but_top_innermost() {\r\n    return stacktrace::current(1);\r\n}\r\n\r\nMAYBE_EXPORT stacktrace all_but_top_inner() {\r\n    return all_but_top_innermost();\r\n}\r\n\r\nMAYBE_EXPORT stacktrace all_but_top_outer() {\r\n    return all_but_top_inner();\r\n}\r\n\r\nMAYBE_EXPORT stacktrace all_but_top_outermost() {\r\n    return all_but_top_outer();\r\n}\r\n\r\nMAYBE_EXPORT stacktrace three_excluding_top_innermost() {\r\n    return stacktrace::current(1, 3);\r\n}\r\n\r\nMAYBE_EXPORT stacktrace three_excluding_top_inner() {\r\n    return three_excluding_top_innermost();\r\n}\r\n\r\nMAYBE_EXPORT stacktrace three_excluding_top_outer() {\r\n    return three_excluding_top_inner();\r\n}\r\n\r\nMAYBE_EXPORT stacktrace three_excluding_top_outermost() {\r\n    return three_excluding_top_outer();\r\n}\r\n\r\nstring trim_past_plus(string str) {\r\n    if (size_t pos = str.rfind(\"+\", string::npos); pos != string::npos) {\r\n        str.resize(pos);\r\n    }\r\n    return str;\r\n}\r\n\r\nstring to_string_using_low_level_members(const stacktrace& st) {\r\n    ostringstream oss;\r\n    int n = 0;\r\n    for (const auto& i : st) {\r\n        oss << n << \"> \";\r\n        ++n;\r\n        auto l = i.source_line();\r\n        if (l != 0) {\r\n            oss << i.source_file() << \"(\" << l << \"): \";\r\n        }\r\n        oss << i.description() << \"\\n\";\r\n    }\r\n    return oss.str();\r\n}\r\n\r\nstring to_string_using_stream_entry(const stacktrace& st) {\r\n    ostringstream oss;\r\n    int n = 0;\r\n    for (const auto& i : st) {\r\n        oss << n << \"> \";\r\n        ++n;\r\n        oss << i << \"\\n\";\r\n    }\r\n    return oss.str();\r\n}\r\n\r\nstring to_string_using_to_string_entry(const stacktrace& st) {\r\n    ostringstream oss;\r\n    int n = 0;\r\n    for (const auto& i : st) {\r\n        oss << n << \"> \";\r\n        ++n;\r\n        oss << to_string(i) << \"\\n\";\r\n    }\r\n    return oss.str();\r\n}\r\n\r\nstring to_string_using_stream(const stacktrace& st) {\r\n    stringstream oss;\r\n    oss << st << \"\\n\";\r\n    return oss.str();\r\n}\r\n\r\nstring to_string_using_to_string(const stacktrace& st) {\r\n    return to_string(st) + \"\\n\";\r\n}\r\n\r\n#if !defined(HAS_DEBUG_INFO) && defined(__SANITIZE_ADDRESS__)\r\n// We always use /Zi with -fsanitize=address\r\n#define HAS_DEBUG_INFO\r\n#endif // ^^^ !defined(HAS_DEBUG_INFO) && defined(__SANITIZE_ADDRESS__) ^^^\r\n\r\n#if defined(HAS_DEBUG_INFO) || defined(HAS_EXPORT)\r\n#define HAS_NAMES\r\n#endif // ^^^ defined(HAS_DEBUG_INFO) || defined(HAS_EXPORT) ^^^\r\n\r\nvoid test_impl() {\r\n    auto all = all_outermost();\r\n    assert(all.size() >= 4);\r\n\r\n#ifdef HAS_DEBUG_INFO\r\n    assert(filesystem::path(all.at(0).source_file()).filename() == \"test.cpp\"sv);\r\n    assert(filesystem::path(all.at(1).source_file()).filename() == \"test.cpp\"sv);\r\n    assert(filesystem::path(all.at(2).source_file()).filename() == \"test.cpp\"sv);\r\n    assert(filesystem::path(all.at(3).source_file()).filename() == \"test.cpp\"sv);\r\n\r\n    assert(all.at(0).source_line() == base_line + 5);\r\n    assert(all.at(1).source_line() == base_line + 9);\r\n    assert(all.at(2).source_line() == base_line + 13);\r\n    assert(all.at(3).source_line() == base_line + 17);\r\n#else // ^^^ HAS_DEBUG_INFO / !HAS_DEBUG_INFO vvv\r\n    assert(filesystem::path(all.at(0).source_file()).filename() == \"\"sv);\r\n    assert(filesystem::path(all.at(1).source_file()).filename() == \"\"sv);\r\n    assert(filesystem::path(all.at(2).source_file()).filename() == \"\"sv);\r\n    assert(filesystem::path(all.at(3).source_file()).filename() == \"\"sv);\r\n\r\n    assert(all.at(0).source_line() == 0);\r\n    assert(all.at(1).source_line() == 0);\r\n    assert(all.at(2).source_line() == 0);\r\n    assert(all.at(3).source_line() == 0);\r\n#endif // ^^^ !HAS_DEBUG_INFO ^^^\r\n\r\n#ifdef HAS_NAMES\r\n    assert(trim_past_plus(all.at(0).description()) == \"P0881R7_stacktrace!all_innermost\"sv);\r\n    assert(trim_past_plus(all.at(1).description()) == \"P0881R7_stacktrace!all_inner\"sv);\r\n    assert(trim_past_plus(all.at(2).description()) == \"P0881R7_stacktrace!all_outer\"sv);\r\n    assert(trim_past_plus(all.at(3).description()) == \"P0881R7_stacktrace!all_outermost\"sv);\r\n#else // ^^^ HAS_NAMES / !HAS_NAMES vvv\r\n    assert(trim_past_plus(all.at(0).description()) == \"P0881R7_stacktrace\"sv);\r\n    assert(trim_past_plus(all.at(1).description()) == \"P0881R7_stacktrace\"sv);\r\n    assert(trim_past_plus(all.at(2).description()) == \"P0881R7_stacktrace\"sv);\r\n    assert(trim_past_plus(all.at(3).description()) == \"P0881R7_stacktrace\"sv);\r\n#endif // ^^^ !HAS_NAMES ^^^\r\n\r\n    auto all_but_top = all_but_top_outermost();\r\n    assert(all_but_top.size() >= 3);\r\n\r\n#ifdef HAS_DEBUG_INFO\r\n    assert(filesystem::path(all_but_top[0].source_file()).filename() == \"test.cpp\"sv);\r\n    assert(filesystem::path(all_but_top[1].source_file()).filename() == \"test.cpp\"sv);\r\n    assert(filesystem::path(all_but_top[2].source_file()).filename() == \"test.cpp\"sv);\r\n\r\n    assert(all_but_top[0].source_line() == base_line + 25);\r\n    assert(all_but_top[1].source_line() == base_line + 29);\r\n    assert(all_but_top[2].source_line() == base_line + 33);\r\n#else // ^^^ HAS_DEBUG_INFO / !HAS_DEBUG_INFO vvv\r\n    assert(filesystem::path(all_but_top[0].source_file()).filename() == \"\"sv);\r\n    assert(filesystem::path(all_but_top[1].source_file()).filename() == \"\"sv);\r\n    assert(filesystem::path(all_but_top[2].source_file()).filename() == \"\"sv);\r\n\r\n    assert(all_but_top[0].source_line() == 0);\r\n    assert(all_but_top[1].source_line() == 0);\r\n    assert(all_but_top[2].source_line() == 0);\r\n#endif // ^^^ !HAS_DEBUG_INFO ^^^\r\n\r\n#ifdef HAS_NAMES\r\n    assert(trim_past_plus(all_but_top[0].description()) == \"P0881R7_stacktrace!all_but_top_inner\"sv);\r\n    assert(trim_past_plus(all_but_top[1].description()) == \"P0881R7_stacktrace!all_but_top_outer\"sv);\r\n    assert(trim_past_plus(all_but_top[2].description()) == \"P0881R7_stacktrace!all_but_top_outermost\"sv);\r\n#else // ^^^ HAS_NAMES / !HAS_NAMES vvv\r\n    assert(trim_past_plus(all_but_top[0].description()) == \"P0881R7_stacktrace\"sv);\r\n    assert(trim_past_plus(all_but_top[1].description()) == \"P0881R7_stacktrace\"sv);\r\n    assert(trim_past_plus(all_but_top[2].description()) == \"P0881R7_stacktrace\"sv);\r\n#endif // ^^^ !HAS_NAMES ^^^\r\n\r\n    auto three_excluding_top = three_excluding_top_outermost();\r\n    assert(three_excluding_top.size() == 3);\r\n#ifdef HAS_DEBUG_INFO\r\n    assert(filesystem::path(three_excluding_top[0].source_file()).filename() == \"test.cpp\"sv);\r\n    assert(filesystem::path(three_excluding_top[1].source_file()).filename() == \"test.cpp\"sv);\r\n    assert(filesystem::path(three_excluding_top[2].source_file()).filename() == \"test.cpp\"sv);\r\n\r\n    assert(three_excluding_top[0].source_line() == base_line + 41);\r\n    assert(three_excluding_top[1].source_line() == base_line + 45);\r\n    assert(three_excluding_top[2].source_line() == base_line + 49);\r\n#else // ^^^ HAS_DEBUG_INFO / !HAS_DEBUG_INFO vvv\r\n    assert(filesystem::path(three_excluding_top[0].source_file()).filename() == \"\"sv);\r\n    assert(filesystem::path(three_excluding_top[1].source_file()).filename() == \"\"sv);\r\n    assert(filesystem::path(three_excluding_top[2].source_file()).filename() == \"\"sv);\r\n\r\n    assert(three_excluding_top[0].source_line() == 0);\r\n    assert(three_excluding_top[1].source_line() == 0);\r\n    assert(three_excluding_top[2].source_line() == 0);\r\n#endif // ^^^ !HAS_DEBUG_INFO ^^^\r\n\r\n#ifdef HAS_NAMES\r\n    assert(trim_past_plus(three_excluding_top[0].description()) == \"P0881R7_stacktrace!three_excluding_top_inner\"sv);\r\n    assert(trim_past_plus(three_excluding_top[1].description()) == \"P0881R7_stacktrace!three_excluding_top_outer\"sv);\r\n    assert(\r\n        trim_past_plus(three_excluding_top[2].description()) == \"P0881R7_stacktrace!three_excluding_top_outermost\"sv);\r\n#else // ^^^ HAS_NAMES / !HAS_NAMES vvv\r\n    assert(trim_past_plus(three_excluding_top[0].description()) == \"P0881R7_stacktrace\"sv);\r\n    assert(trim_past_plus(three_excluding_top[1].description()) == \"P0881R7_stacktrace\"sv);\r\n    assert(trim_past_plus(three_excluding_top[2].description()) == \"P0881R7_stacktrace\"sv);\r\n#endif // ^^^ !HAS_NAMES ^^^\r\n\r\n    try {\r\n        (void) all.at(all.size());\r\n        assert(false); // should have thrown\r\n    } catch (const out_of_range&) {\r\n    }\r\n\r\n    auto all_copy = all;\r\n\r\n    assert(all == all_copy);\r\n    assert(all != all_but_top);\r\n    assert(all > all_but_top);\r\n    assert(three_excluding_top < all_but_top);\r\n\r\n    assert((all <=> all_copy) == strong_ordering::equal);\r\n    assert((all <=> all_but_top) == strong_ordering::greater);\r\n    assert((three_excluding_top <=> all_but_top) == strong_ordering::less);\r\n\r\n    assert(hash<stacktrace>{}(all) == hash<stacktrace>{}(all_copy));\r\n    assert(hash<stacktrace_entry>{}(all[0]) == hash<stacktrace_entry>{}(all_copy[0]));\r\n\r\n    assert(!all.empty());\r\n    assert(distance(all.begin(), all.end()) == static_cast<ptrdiff_t>(all.size()));\r\n    assert(distance(all.rbegin(), all.rend()) == static_cast<ptrdiff_t>(all.size()));\r\n    assert(distance(all.cbegin(), all.cend()) == static_cast<ptrdiff_t>(all.size()));\r\n    assert(distance(all.crbegin(), all.crend()) == static_cast<ptrdiff_t>(all.size()));\r\n\r\n    stacktrace empty_trace;\r\n    assert(empty_trace.size() == 0);\r\n    assert(empty_trace.begin() == empty_trace.end());\r\n    assert(empty_trace.rbegin() == empty_trace.rend());\r\n    assert(empty_trace.cbegin() == empty_trace.cend());\r\n    assert(empty_trace.crbegin() == empty_trace.crend());\r\n\r\n    stacktrace_entry empty_entry;\r\n    assert(empty_entry.description() == \"\"sv);\r\n    assert(empty_entry.source_file() == \"\"sv);\r\n    assert(empty_entry.source_line() == 0);\r\n\r\n    auto s = to_string_using_low_level_members(all);\r\n    assert(s == to_string_using_stream_entry(all));\r\n    assert(s == to_string_using_stream(all));\r\n    assert(s == to_string_using_to_string_entry(all));\r\n    assert(s == to_string_using_to_string(all));\r\n}\r\n\r\nint main() {\r\n#if !((defined(__clang__) && defined(_M_ARM64)) || defined(_M_ARM64EC)) // TRANSITION, LLVM-74530, GH-5830\r\n    test_impl();\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_and_P1614R2_comparisons/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_and_P1614R2_comparisons/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Covers:\r\n// * three_way_comparable and three_way_comparable_with\r\n// * compare_three_way, compare_three_way_result, and compare_three_way_result_t\r\n// * ranges::equal_to, ranges::not_equal_to, ranges::less, ranges::less_equal,\r\n//   ranges::greater, and ranges::greater_equal\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wsign-compare\"\r\n#endif // __clang__\r\n\r\n#include <cassert>\r\n#include <compare>\r\n#include <concepts>\r\n#include <functional>\r\n#include <ranges>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nnamespace ranges = std::ranges;\r\n\r\nusing std::common_comparison_category_t;\r\nusing std::compare_three_way, std::compare_three_way_result, std::compare_three_way_result_t;\r\nusing std::partial_ordering, std::weak_ordering, std::strong_ordering;\r\nusing std::same_as, std::convertible_to;\r\nusing std::three_way_comparable, std::three_way_comparable_with;\r\n\r\ntemplate <class T, class... Types>\r\nconstexpr bool is_one_of = (same_as<T, Types> || ...);\r\n\r\nstruct common_comparable {\r\n    template <class T>\r\n    common_comparable(T&&);\r\n\r\n    bool operator==(common_comparable const&) const;\r\n    strong_ordering operator<=>(common_comparable const&) const;\r\n};\r\n\r\nstruct common_incomparable {\r\n    template <class T>\r\n    common_incomparable(T&&);\r\n};\r\n\r\n// Validate properties common to the concept-constrained comparison object types\r\ntemplate <class T>\r\nconstexpr bool is_trivially_constexpr() {\r\n    STATIC_ASSERT(std::semiregular<T>);\r\n\r\n    // Not required, but likely portable nonetheless:\r\n    STATIC_ASSERT(std::is_empty_v<T>);\r\n    STATIC_ASSERT(std::is_trivially_copyable_v<T>);\r\n    STATIC_ASSERT(std::is_trivially_default_constructible_v<T>);\r\n    STATIC_ASSERT(std::is_trivially_copy_constructible_v<T>);\r\n    STATIC_ASSERT(std::is_trivially_move_constructible_v<T>);\r\n    STATIC_ASSERT(std::is_trivially_copy_assignable_v<T>);\r\n    STATIC_ASSERT(std::is_trivially_move_assignable_v<T>);\r\n\r\n    // Not required to be constant expressions, but likely portable nonetheless:\r\n    T value_initialized{};\r\n    T copy_constructed = value_initialized;\r\n    T move_constructed = std::move(copy_constructed);\r\n    copy_constructed   = std::move(move_constructed);\r\n    move_constructed   = copy_constructed;\r\n\r\n    return true;\r\n}\r\n\r\nSTATIC_ASSERT(is_trivially_constexpr<compare_three_way>());\r\nSTATIC_ASSERT(is_trivially_constexpr<ranges::equal_to>());\r\nSTATIC_ASSERT(is_trivially_constexpr<ranges::not_equal_to>());\r\nSTATIC_ASSERT(is_trivially_constexpr<ranges::less>());\r\nSTATIC_ASSERT(is_trivially_constexpr<ranges::less_equal>());\r\nSTATIC_ASSERT(is_trivially_constexpr<ranges::greater>());\r\nSTATIC_ASSERT(is_trivially_constexpr<ranges::greater_equal>());\r\n\r\n// Validate three_way_comparable\r\ntemplate <int I, class Category>\r\nstruct three_way_archetype {\r\n    three_way_archetype()                                      = delete;\r\n    three_way_archetype(three_way_archetype const&)            = delete;\r\n    three_way_archetype& operator=(three_way_archetype const&) = delete;\r\n    ~three_way_archetype()                                     = delete;\r\n    // 0: not equality_comparable\r\n    bool operator==(three_way_archetype const&) const\r\n        requires (I == 0)\r\n    = delete;\r\n    bool operator==(three_way_archetype const&) const\r\n        requires (I != 0);\r\n    // 1: not totally_ordered\r\n    bool operator<(three_way_archetype const&) const\r\n        requires (I == 1)\r\n    = delete;\r\n    bool operator<(three_way_archetype const&) const\r\n        requires (I != 1);\r\n    bool operator>(three_way_archetype const&) const\r\n        requires (I != 1);\r\n    bool operator<=(three_way_archetype const&) const\r\n        requires (I != 1);\r\n    bool operator>=(three_way_archetype const&) const\r\n        requires (I != 1);\r\n    // 2: <=> isn't defined\r\n    Category operator<=>(three_way_archetype const&) const\r\n        requires (I != 2 && I != 3);\r\n    // 3: <=> doesn't return a comparison category type\r\n    int operator<=>(three_way_archetype const&) const\r\n        requires (I == 3);\r\n};\r\nconstexpr int three_way_archetype_max = 4;\r\n\r\ntemplate <class T, class Cat>\r\nconstexpr bool test_three_way_comparable1() {\r\n    STATIC_ASSERT(is_one_of<Cat, void, partial_ordering, weak_ordering, strong_ordering>);\r\n\r\n    STATIC_ASSERT(three_way_comparable<T, partial_ordering> == convertible_to<Cat, partial_ordering>);\r\n    STATIC_ASSERT(three_way_comparable<T, weak_ordering> == convertible_to<Cat, weak_ordering>);\r\n    STATIC_ASSERT(three_way_comparable<T, strong_ordering> == same_as<Cat, strong_ordering>);\r\n\r\n    STATIC_ASSERT(three_way_comparable_with<T, T, partial_ordering> == convertible_to<Cat, partial_ordering>);\r\n    STATIC_ASSERT(three_way_comparable_with<T, T, weak_ordering> == convertible_to<Cat, weak_ordering>);\r\n    STATIC_ASSERT(three_way_comparable_with<T, T, strong_ordering> == same_as<Cat, strong_ordering>);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <int... Is>\r\nconstexpr bool test_three_way_comparable(std::integer_sequence<int, Is...>) {\r\n    (test_three_way_comparable1<three_way_archetype<Is, partial_ordering>, void>(), ...);\r\n    (test_three_way_comparable1<three_way_archetype<Is, weak_ordering>, void>(), ...);\r\n    (test_three_way_comparable1<three_way_archetype<Is, strong_ordering>, void>(), ...);\r\n    STATIC_ASSERT(\r\n        test_three_way_comparable1<three_way_archetype<three_way_archetype_max, partial_ordering>, partial_ordering>());\r\n    STATIC_ASSERT(\r\n        test_three_way_comparable1<three_way_archetype<three_way_archetype_max, weak_ordering>, weak_ordering>());\r\n    STATIC_ASSERT(\r\n        test_three_way_comparable1<three_way_archetype<three_way_archetype_max, strong_ordering>, strong_ordering>());\r\n\r\n    return true;\r\n}\r\nSTATIC_ASSERT(test_three_way_comparable(std::make_integer_sequence<int, three_way_archetype_max>{}));\r\n\r\n// Validate three_way_comparable_with\r\n\r\n// 4: not common_reference_with\r\n// 5: common_reference_t is not three_way_comparable\r\ntemplate <int I1, class Cat1, int I2, class Cat2>\r\n    requires ((I1 != I2 || !same_as<Cat1, Cat2>) && I1 != 4 && I2 != 4)\r\nstruct std::common_type<three_way_archetype<I1, Cat1>, three_way_archetype<I2, Cat2>> {\r\n    using type = conditional_t<I1 == 5 || I2 == 5, ::common_incomparable, ::common_comparable>;\r\n};\r\n\r\n// 6: not _Weakly_equality_comparable_with\r\ntemplate <int I1, class Cat1, int I2, class Cat2>\r\n    requires ((I1 != I2 || !same_as<Cat1, Cat2>) && (I1 == 6 || I2 == 6))\r\nbool operator==(three_way_archetype<I1, Cat1> const&, three_way_archetype<I2, Cat2> const&) = delete;\r\ntemplate <int I1, class Cat1, int I2, class Cat2>\r\n    requires ((I1 != I2 || !same_as<Cat1, Cat2>) && I1 != 6 && I2 != 6)\r\nbool operator==(three_way_archetype<I1, Cat1> const&, three_way_archetype<I2, Cat2> const&);\r\n\r\n// 7: not _Partially_ordered_with\r\ntemplate <int I1, class Cat1, int I2, class Cat2>\r\n    requires ((I1 != I2 || !same_as<Cat1, Cat2>) && (I1 == 7 || I2 == 7))\r\nbool operator<(three_way_archetype<I1, Cat1> const&, three_way_archetype<I2, Cat2> const&) = delete;\r\ntemplate <int I1, class Cat1, int I2, class Cat2>\r\n    requires ((I1 != I2 || !same_as<Cat1, Cat2>) && I1 != 7 && I2 != 7)\r\nbool operator<(three_way_archetype<I1, Cat1> const&, three_way_archetype<I2, Cat2> const&);\r\ntemplate <int I1, class Cat1, int I2, class Cat2>\r\n    requires (I1 != I2 || !same_as<Cat1, Cat2>)\r\nbool operator>(three_way_archetype<I1, Cat1> const&, three_way_archetype<I2, Cat2> const&);\r\ntemplate <int I1, class Cat1, int I2, class Cat2>\r\n    requires (I1 != I2 || !same_as<Cat1, Cat2>)\r\nbool operator<=(three_way_archetype<I1, Cat1> const&, three_way_archetype<I2, Cat2> const&);\r\ntemplate <int I1, class Cat1, int I2, class Cat2>\r\n    requires (I1 != I2 || !same_as<Cat1, Cat2>)\r\nbool operator>=(three_way_archetype<I1, Cat1> const&, three_way_archetype<I2, Cat2> const&);\r\n\r\n// 8: <=> isn't defined\r\ntemplate <int I1, class Cat1, int I2, class Cat2>\r\n    requires ((I1 != I2 || !same_as<Cat1, Cat2>) && I1 != 8 && I1 != 9 && I2 != 8 && I2 != 9)\r\ncommon_comparison_category_t<Cat1, Cat2> operator<=>(\r\n    three_way_archetype<I1, Cat1> const&, three_way_archetype<I2, Cat2> const&);\r\n\r\n// 9: <=> returns a non-comparison category type\r\ntemplate <int I1, class Cat1, int I2, class Cat2>\r\n    requires ((I1 != I2 || !same_as<Cat1, Cat2>) && I1 == 9 && I2 == 9)\r\nint operator<=>(three_way_archetype<I1, Cat1> const&, three_way_archetype<I2, Cat2> const&);\r\n\r\nconstexpr int three_way_with_max = 10;\r\n\r\ntemplate <class T, class Cat>\r\nconstexpr bool test_three_way_comparable_with1() {\r\n    STATIC_ASSERT(is_one_of<Cat, void, partial_ordering, weak_ordering, strong_ordering>);\r\n\r\n    // All specializations of three_way_archetype<I, T> for which I >= three_way_with_max are \"good\"; we need such a\r\n    // specialization that is different from three_way_archetype<three_way_with_max, T> to ensure we're fully testing\r\n    // the cross-type three_way_comparable_with concept. Why not three_way_with_max + 1?\r\n    constexpr int three_way_known_good = three_way_with_max + 1;\r\n\r\n    using P = three_way_archetype<three_way_known_good, partial_ordering>;\r\n    using W = three_way_archetype<three_way_known_good, weak_ordering>;\r\n    using S = three_way_archetype<three_way_known_good, strong_ordering>;\r\n\r\n    STATIC_ASSERT(three_way_comparable_with<T, P, partial_ordering> == convertible_to<Cat, partial_ordering>);\r\n    STATIC_ASSERT(three_way_comparable_with<T, W, weak_ordering> == convertible_to<Cat, weak_ordering>);\r\n    STATIC_ASSERT(three_way_comparable_with<T, S, strong_ordering> == same_as<Cat, strong_ordering>);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <int... Is>\r\nconstexpr bool test_three_way_comparable_with(std::integer_sequence<int, Is...>) {\r\n    (test_three_way_comparable_with1<three_way_archetype<Is, partial_ordering>, void>(), ...);\r\n    (test_three_way_comparable_with1<three_way_archetype<Is, weak_ordering>, void>(), ...);\r\n    (test_three_way_comparable_with1<three_way_archetype<Is, strong_ordering>, void>(), ...);\r\n    STATIC_ASSERT(\r\n        test_three_way_comparable_with1<three_way_archetype<three_way_with_max, partial_ordering>, partial_ordering>());\r\n    STATIC_ASSERT(\r\n        test_three_way_comparable_with1<three_way_archetype<three_way_with_max, weak_ordering>, weak_ordering>());\r\n    STATIC_ASSERT(\r\n        test_three_way_comparable_with1<three_way_archetype<three_way_with_max, strong_ordering>, strong_ordering>());\r\n\r\n    return true;\r\n}\r\nSTATIC_ASSERT(test_three_way_comparable_with(std::make_integer_sequence<int, three_way_with_max>{}));\r\n\r\n// Validate static properties of compare_three_way, compare_three_way_result, and compare_three_way_result_t\r\ntemplate <class T>\r\nconcept is_trait = requires { typename T::type; };\r\n\r\ntemplate <class T, class U>\r\nconcept can_three_way = requires(T const& t, U const& u) { t <=> u; };\r\n\r\ntemplate <class T, class U, class Cat>\r\nconstexpr bool test_compare_three_way() {\r\n    STATIC_ASSERT(same_as<T, std::remove_cvref_t<T>>);\r\n    STATIC_ASSERT(same_as<U, std::remove_cvref_t<U>>);\r\n\r\n    STATIC_ASSERT(can_three_way<T, U> == !std::is_void_v<Cat>);\r\n    STATIC_ASSERT(can_three_way<U, T> == !std::is_void_v<Cat>);\r\n    if constexpr (can_three_way<T, U>) {\r\n        STATIC_ASSERT(same_as<decltype(std::declval<T const&>() <=> std::declval<U const&>()), Cat>);\r\n        STATIC_ASSERT(same_as<decltype(std::declval<U const&>() <=> std::declval<T const&>()), Cat>);\r\n        STATIC_ASSERT(same_as<compare_three_way_result_t<T, U>, Cat>);\r\n        STATIC_ASSERT(same_as<compare_three_way_result_t<U, T>, Cat>);\r\n        STATIC_ASSERT(same_as<typename compare_three_way_result<T, U>::type, Cat>);\r\n        STATIC_ASSERT(same_as<typename compare_three_way_result<U, T>::type, Cat>);\r\n        STATIC_ASSERT(same_as<decltype(compare_three_way{}(std::declval<T const&>(), std::declval<U const&>())), Cat>);\r\n        STATIC_ASSERT(same_as<decltype(compare_three_way{}(std::declval<U const&>(), std::declval<T const&>())), Cat>);\r\n    } else {\r\n        STATIC_ASSERT(!is_trait<compare_three_way_result<T, U>>);\r\n        STATIC_ASSERT(!is_trait<compare_three_way_result<U, T>>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nenum class some_enum { value };\r\n\r\nSTATIC_ASSERT(test_compare_three_way<int, int, strong_ordering>());\r\nSTATIC_ASSERT(test_compare_three_way<int, long, strong_ordering>());\r\nSTATIC_ASSERT(test_compare_three_way<float, float, partial_ordering>());\r\nSTATIC_ASSERT(test_compare_three_way<float, double, partial_ordering>());\r\nSTATIC_ASSERT(test_compare_three_way<long, double, partial_ordering>());\r\n#ifndef __EDG__ // TRANSITION, VSO-1898915\r\nSTATIC_ASSERT(test_compare_three_way<bool, int, void>());\r\n#endif // ^^^ no workaround ^^^\r\n\r\nSTATIC_ASSERT(test_compare_three_way<some_enum, some_enum, strong_ordering>());\r\nSTATIC_ASSERT(test_compare_three_way<some_enum, int, void>());\r\n\r\nSTATIC_ASSERT(test_compare_three_way<int*, int*, strong_ordering>());\r\nSTATIC_ASSERT(test_compare_three_way<int*, void*, strong_ordering>());\r\n\r\nSTATIC_ASSERT(test_compare_three_way<int (*)(), int (*)(), void>());\r\nSTATIC_ASSERT(test_compare_three_way<int (*)(), void (*)(), void>());\r\n\r\ntemplate <class Cat>\r\nstruct compares_as {};\r\ntemplate <class Cat1, class Cat2>\r\nbool operator==(compares_as<Cat1> const&, compares_as<Cat2> const&);\r\ntemplate <class Cat1, class Cat2>\r\ncommon_comparison_category_t<Cat1, Cat2> operator<=>(compares_as<Cat1> const&, compares_as<Cat2> const&);\r\n\r\ntemplate <class Cat1, class Cat2>\r\nstruct std::common_type<compares_as<Cat1>, compares_as<Cat2>> {\r\n    using type = common_comparable;\r\n};\r\n\r\nSTATIC_ASSERT(test_compare_three_way<compares_as<partial_ordering>, compares_as<partial_ordering>, partial_ordering>());\r\nSTATIC_ASSERT(test_compare_three_way<compares_as<partial_ordering>, compares_as<weak_ordering>, partial_ordering>());\r\nSTATIC_ASSERT(test_compare_three_way<compares_as<partial_ordering>, compares_as<strong_ordering>, partial_ordering>());\r\nSTATIC_ASSERT(test_compare_three_way<compares_as<weak_ordering>, compares_as<weak_ordering>, weak_ordering>());\r\nSTATIC_ASSERT(test_compare_three_way<compares_as<weak_ordering>, compares_as<strong_ordering>, weak_ordering>());\r\nSTATIC_ASSERT(test_compare_three_way<compares_as<strong_ordering>, compares_as<strong_ordering>, strong_ordering>());\r\n\r\n// Validate dynamic properties of compare_three_way, ranges::equal_to, ranges::not_equal_to, ranges::less,\r\n// ranges::less_equal, ranges::greater, ranges::greater_equal\r\n#define assert_three_way(t, u, result) assert(compare_three_way{}((t), (u)) == (result))\r\n\r\ntemplate <class T, class U>\r\nconstexpr void test_equality_comparable(T const& t, U const& u, strong_ordering const o) {\r\n    assert(ranges::equal_to{}(t, t));\r\n    assert(ranges::equal_to{}(u, u));\r\n    assert(ranges::equal_to{}(t, u) == (o == strong_ordering::equal));\r\n    assert(ranges::equal_to{}(u, t) == (o == strong_ordering::equal));\r\n\r\n    assert(!ranges::not_equal_to{}(t, t));\r\n    assert(!ranges::not_equal_to{}(u, u));\r\n    assert(ranges::not_equal_to{}(t, u) == !(o == strong_ordering::equal));\r\n    assert(ranges::not_equal_to{}(u, t) == !(o == strong_ordering::equal));\r\n}\r\n\r\ntemplate <class T, class U>\r\nconstexpr void test_totally_ordered(T const& t, U const& u, strong_ordering const o) {\r\n    test_equality_comparable(t, u, o);\r\n\r\n    assert(!ranges::less{}(t, t));\r\n    assert(!ranges::less{}(u, u));\r\n    assert(ranges::less{}(t, u) == (o == strong_ordering::less));\r\n    assert(ranges::less{}(u, t) == (o == strong_ordering::greater));\r\n\r\n    assert(!ranges::greater{}(t, t));\r\n    assert(!ranges::greater{}(u, u));\r\n    assert(ranges::greater{}(t, u) == (o == strong_ordering::greater));\r\n    assert(ranges::greater{}(u, t) == (o == strong_ordering::less));\r\n\r\n    assert(ranges::less_equal{}(t, t));\r\n    assert(ranges::less_equal{}(u, u));\r\n    assert(ranges::less_equal{}(t, u) == !(o == strong_ordering::greater));\r\n    assert(ranges::less_equal{}(u, t) == !(o == strong_ordering::less));\r\n\r\n    assert(ranges::greater_equal{}(t, t));\r\n    assert(ranges::greater_equal{}(u, u));\r\n    assert(ranges::greater_equal{}(t, u) == !(o == strong_ordering::less));\r\n    assert(ranges::greater_equal{}(u, t) == !(o == strong_ordering::greater));\r\n}\r\n\r\ntemplate <class T, class U>\r\nconstexpr void test_strongly_ordered(T const& t, U const& u) {\r\n    assert(t < u);\r\n    test_totally_ordered(t, u, strong_ordering::less);\r\n\r\n    assert_three_way(t, t, strong_ordering::equal);\r\n    assert_three_way(u, u, strong_ordering::equal);\r\n    assert_three_way(t, u, strong_ordering::less);\r\n    assert_three_way(u, t, strong_ordering::greater);\r\n}\r\n\r\ntemplate <class T, class U>\r\nconstexpr void test_weakly_ordered(T const& t, U const& u, weak_ordering const o) {\r\n    assert_three_way(t, u, o);\r\n\r\n    strong_ordering test_as = strong_ordering::equal;\r\n\r\n    if (o == weak_ordering::equivalent) {\r\n        assert_three_way(u, t, weak_ordering::equivalent);\r\n        test_as = strong_ordering::equal;\r\n    } else if (o == weak_ordering::less) {\r\n        assert_three_way(u, t, weak_ordering::greater);\r\n        test_as = strong_ordering::less;\r\n    } else {\r\n        assert(o == weak_ordering::greater);\r\n        assert_three_way(u, t, weak_ordering::less);\r\n        test_as = strong_ordering::greater;\r\n    }\r\n\r\n    test_totally_ordered(t, u, test_as);\r\n}\r\n\r\ntemplate <class T, class U>\r\nconstexpr void test_partially_ordered(T const& t, U const& u, partial_ordering const o) {\r\n    assert_three_way(t, u, o);\r\n\r\n    strong_ordering test_as = strong_ordering::equal;\r\n\r\n    if (o == partial_ordering::equivalent) {\r\n        assert_three_way(u, t, partial_ordering::equivalent);\r\n        test_as = strong_ordering::equal;\r\n    } else if (o == partial_ordering::less) {\r\n        assert_three_way(u, t, partial_ordering::greater);\r\n        test_as = strong_ordering::less;\r\n    } else if (o == partial_ordering::greater) {\r\n        assert_three_way(u, t, partial_ordering::less);\r\n        test_as = strong_ordering::greater;\r\n    } else {\r\n        assert(o == partial_ordering::unordered);\r\n        assert_three_way(u, t, partial_ordering::unordered);\r\n        return;\r\n    }\r\n\r\n    test_totally_ordered(t, u, test_as);\r\n}\r\n\r\nvoid f1() {}\r\nvoid f2() {}\r\n\r\nstruct base {};\r\nstruct derived : base {};\r\n\r\nenum unscoped : int {};\r\nenum class scoped {};\r\n\r\n// TRANSITION, VSO-980378 (use numeric_limits::quiet_NaN)\r\nconstexpr auto NaN  = __builtin_nan(\"0\");\r\nconstexpr auto NaNf = __builtin_nanf(\"0\");\r\n\r\nconstexpr void ordering_test_cases() {\r\n    // Validate types strongly ordered by builtin <=> operators\r\n    test_strongly_ordered(false, true); // bool (but not with other integral types)\r\n\r\n    test_strongly_ordered(13, 42); // integral types (but not mixed-sign)\r\n    test_strongly_ordered(13, 42L);\r\n    test_strongly_ordered(13L, 42);\r\n    test_strongly_ordered(13U, 42U);\r\n    test_strongly_ordered(13U, 42UL);\r\n    test_strongly_ordered(13UL, 42U);\r\n    test_strongly_ordered(13U, L'x');\r\n#ifdef __cpp_char8_t\r\n    test_strongly_ordered(13U, u8'x');\r\n#endif // __cpp_char8_t\r\n    test_strongly_ordered(13U, u'x');\r\n    test_strongly_ordered(13U, U'x');\r\n\r\n    test_strongly_ordered(scoped{13}, scoped{42});\r\n    test_strongly_ordered(unscoped{13}, unscoped{42});\r\n\r\n    int const some_ints[] = {13, 42};\r\n    test_strongly_ordered(&some_ints[0], &some_ints[1]);\r\n    std::pair<int, int> const int_pair{13, 42};\r\n    test_strongly_ordered(&int_pair.first, &int_pair.second);\r\n\r\n    derived const some_deriveds[2] = {};\r\n    test_strongly_ordered(&some_deriveds[0], &some_deriveds[1]);\r\n    test_strongly_ordered(static_cast<base const*>(&some_deriveds[0]), &some_deriveds[1]);\r\n    test_strongly_ordered(&some_deriveds[0], static_cast<base const*>(&some_deriveds[1]));\r\n\r\n    if (!std::is_constant_evaluated()) {\r\n        test_strongly_ordered(&some_ints[0], static_cast<void const*>(&some_ints[1]));\r\n        test_strongly_ordered(static_cast<void const*>(&some_ints[0]), &some_ints[1]);\r\n\r\n        std::pair<int, long> const int_long_pair{13, 42L};\r\n        test_strongly_ordered(static_cast<void const*>(&int_long_pair.first), &int_long_pair.second);\r\n        test_strongly_ordered(&int_long_pair.first, static_cast<void const*>(&int_long_pair.second));\r\n    }\r\n\r\n    // Validate types partially ordered by builtin <=> operators\r\n    test_partially_ordered(1.414, 3.14, partial_ordering::less);\r\n    test_partially_ordered(1.414f, 3.14, partial_ordering::less);\r\n    test_partially_ordered(1.414, 3.14f, partial_ordering::less);\r\n    test_partially_ordered(31.625f, 31.625, partial_ordering::equivalent);\r\n#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, VSO-1062601\r\n    if (!std::is_constant_evaluated())\r\n#endif // ^^^ workaround ^^^\r\n    {\r\n        test_partially_ordered(3.14, NaN, partial_ordering::unordered);\r\n        test_partially_ordered(3.14f, NaN, partial_ordering::unordered);\r\n        test_partially_ordered(3.14, NaNf, partial_ordering::unordered);\r\n    }\r\n\r\n    // Validate types with no builtin <=> operators that are nonetheless totally_ordered (within a\r\n    // limited domain) or equality_comparable\r\n#ifndef __clang__\r\n#pragma warning(push)\r\n#pragma warning(disable : 4018) // '%s': signed/unsigned mismatch\r\n#pragma warning(disable : 4389) // '%s': signed/unsigned mismatch\r\n#endif // !__clang__\r\n    test_totally_ordered(13, 42u, strong_ordering::less);\r\n    test_totally_ordered(13u, 42, strong_ordering::less);\r\n#ifndef __clang__\r\n#pragma warning(pop)\r\n#endif // !__clang__\r\n\r\n    test_totally_ordered(3.14, 42, strong_ordering::less);\r\n    test_totally_ordered(1, 3.14f, strong_ordering::less);\r\n\r\n    test_equality_comparable(&f1, &f2, strong_ordering::less); // This means \"not equal\"\r\n\r\n    struct has_members {\r\n        int x;\r\n        const int y;\r\n\r\n        int f() {\r\n            return 13;\r\n        }\r\n        int g() noexcept {\r\n            return 42;\r\n        }\r\n    };\r\n    test_equality_comparable(&has_members::x, &has_members::y, strong_ordering::less); // Ditto \"not equal\"\r\n    test_equality_comparable(&has_members::f, &has_members::g, strong_ordering::less); // Ditto \"not equal\"\r\n\r\n    test_equality_comparable(nullptr, nullptr, strong_ordering::equal);\r\n\r\n    // Validate class types\r\n    struct partially_ordered_class {\r\n        int i;\r\n\r\n        constexpr explicit partially_ordered_class(int x) noexcept : i{x} {}\r\n\r\n        partially_ordered_class(partially_ordered_class const&)            = delete;\r\n        partially_ordered_class& operator=(partially_ordered_class const&) = delete;\r\n\r\n        constexpr bool operator==(partially_ordered_class const& that) const {\r\n            if (i == 42 || that.i == 42) {\r\n                return false;\r\n            } else {\r\n                return i == that.i;\r\n            }\r\n        }\r\n        constexpr partial_ordering operator<=>(partially_ordered_class const& that) const {\r\n            if (i == 42 || that.i == 42) {\r\n                return partial_ordering::unordered;\r\n            } else {\r\n                return i <=> that.i;\r\n            }\r\n        }\r\n    };\r\n    struct weakly_ordered_class {\r\n        int i;\r\n\r\n        constexpr explicit weakly_ordered_class(int x) noexcept : i{x} {}\r\n\r\n        weakly_ordered_class(weakly_ordered_class const&)            = delete;\r\n        weakly_ordered_class& operator=(weakly_ordered_class const&) = delete;\r\n\r\n        constexpr bool operator==(weakly_ordered_class const& that) const {\r\n            return i / 2 == that.i / 2;\r\n        }\r\n        constexpr weak_ordering operator<=>(weakly_ordered_class const& that) const {\r\n            return i / 2 <=> that.i / 2;\r\n        }\r\n    };\r\n    struct strongly_ordered_class {\r\n        int i;\r\n\r\n        constexpr explicit strongly_ordered_class(int x) noexcept : i{x} {}\r\n\r\n        strongly_ordered_class(strongly_ordered_class const&)            = delete;\r\n        strongly_ordered_class& operator=(strongly_ordered_class const&) = delete;\r\n\r\n        auto operator<=>(strongly_ordered_class const&) const = default;\r\n    };\r\n\r\n    struct equality_comparable_class {\r\n        int i;\r\n\r\n        struct boolish {\r\n            bool b;\r\n            constexpr operator bool() const {\r\n                return b;\r\n            }\r\n        };\r\n\r\n        constexpr explicit equality_comparable_class(int x) noexcept : i{x} {}\r\n\r\n        equality_comparable_class(equality_comparable_class const&)            = delete;\r\n        equality_comparable_class& operator=(equality_comparable_class const&) = delete;\r\n\r\n        constexpr boolish operator==(equality_comparable_class const& that) const {\r\n            return {i == that.i};\r\n        }\r\n        constexpr boolish operator!=(equality_comparable_class const& that) const {\r\n            return {i != that.i};\r\n        }\r\n    };\r\n\r\n    struct totally_ordered_class : equality_comparable_class {\r\n        using equality_comparable_class::equality_comparable_class;\r\n\r\n        constexpr boolish operator<(totally_ordered_class const& that) const {\r\n            return {i < that.i};\r\n        }\r\n        constexpr boolish operator>(totally_ordered_class const& that) const {\r\n            return {i > that.i};\r\n        }\r\n        constexpr boolish operator<=(totally_ordered_class const& that) const {\r\n            return {i <= that.i};\r\n        }\r\n        constexpr boolish operator>=(totally_ordered_class const& that) const {\r\n            return {i >= that.i};\r\n        }\r\n    };\r\n\r\n    test_partially_ordered(partially_ordered_class{13}, partially_ordered_class{42}, partial_ordering::unordered);\r\n    test_partially_ordered(partially_ordered_class{13}, partially_ordered_class{29}, partial_ordering::less);\r\n    test_weakly_ordered(weakly_ordered_class{13}, weakly_ordered_class{42}, weak_ordering::less);\r\n    test_weakly_ordered(weakly_ordered_class{13}, weakly_ordered_class{12}, weak_ordering::equivalent);\r\n    test_strongly_ordered(strongly_ordered_class{13}, strongly_ordered_class{42});\r\n    test_equality_comparable(equality_comparable_class{13}, equality_comparable_class{13}, strong_ordering::equal);\r\n    test_equality_comparable(equality_comparable_class{13}, equality_comparable_class{42}, strong_ordering::less);\r\n    test_totally_ordered(totally_ordered_class{13}, totally_ordered_class{42}, strong_ordering::less);\r\n}\r\n\r\nint main() {\r\n    STATIC_ASSERT((ordering_test_cases(), true));\r\n    ordering_test_cases();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_common_iterator/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_common_iterator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma warning(disable : 5215) // volatile function arguments are deprecated in C++20\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wdeprecated-volatile\" // volatile function arguments are deprecated in C++20\r\n#endif // __clang__\r\n\r\n#include <cassert>\r\n#include <concepts>\r\n#include <iterator>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\ntemplate <class Iter>\r\nconcept CanDifference = requires(Iter it) {\r\n    { it - it };\r\n};\r\n\r\ntemplate <class Iter>\r\nconcept HasProxy = !is_reference_v<iter_reference_t<Iter>>;\r\n\r\ntemplate <class Iter>\r\nconcept CanArrow = requires(const Iter& i) {\r\n    { i.operator->() };\r\n};\r\n\r\nstruct instantiator {\r\n    template <input_or_output_iterator Iter>\r\n    static constexpr void call() {\r\n        if constexpr (copyable<Iter>) {\r\n            using ConstIter = Iter::Consterator;\r\n            using Sen       = test::sentinel<iter_value_t<Iter>>;\r\n            using OSen      = test::sentinel<const iter_value_t<Iter>>;\r\n            using Cit       = common_iterator<Iter, Sen>;\r\n            using OCit      = common_iterator<ConstIter, OSen>;\r\n            P input[3]      = {{0, 1}, {0, 2}, {0, 3}};\r\n\r\n            // [common.iter.types]\r\n            {\r\n                using iconcept = iterator_traits<Cit>::iterator_concept;\r\n                if constexpr (forward_iterator<Iter>) {\r\n                    static_assert(same_as<iconcept, forward_iterator_tag>);\r\n                } else {\r\n                    static_assert(same_as<typename iterator_traits<Cit>::iterator_concept, input_iterator_tag>);\r\n                }\r\n\r\n                using icat = iterator_traits<Cit>::iterator_category;\r\n                if constexpr (derived_from<icat, forward_iterator_tag>) {\r\n                    static_assert(same_as<icat, forward_iterator_tag>);\r\n                } else {\r\n                    static_assert(same_as<icat, input_iterator_tag>);\r\n                }\r\n\r\n                using ipointer = iterator_traits<Cit>::pointer;\r\n                if constexpr (CanArrow<Cit>) {\r\n                    static_assert(same_as<ipointer, decltype(declval<const Cit&>().operator->())>);\r\n                } else {\r\n                    static_assert(same_as<ipointer, void>);\r\n                }\r\n            }\r\n\r\n            { // [common.iter.const]\r\n                Cit defaultConstructed{};\r\n                Cit iterConstructed{Iter{input}};\r\n                Cit sentinelConstructed(Sen{});\r\n                Cit copyConstructed{defaultConstructed};\r\n                copyConstructed = iterConstructed;\r\n\r\n                OCit conversionConstructed{defaultConstructed};\r\n                conversionConstructed = iterConstructed;\r\n\r\n                OCit conversionConstructedSentinel{sentinelConstructed};\r\n                conversionConstructed = iterConstructed;\r\n            }\r\n\r\n            { // [common.iter.access]\r\n                Cit iter{Iter{input}};\r\n                assert(*iter == P(0, 1));\r\n                assert(iter->first == 0);\r\n                assert(iter->second == 1);\r\n\r\n                using ArrowRetType = decltype(iter.operator->());\r\n                if constexpr (HasProxy<Iter>) {\r\n                    // We return a proxy class here\r\n                    static_assert(is_class_v<ArrowRetType>);\r\n                } else {\r\n                    // Either a pointer or the wrapped iterator\r\n                    static_assert(is_pointer_v<ArrowRetType> || is_same_v<Iter, ArrowRetType>);\r\n                }\r\n\r\n                const Cit constIter{Iter{input}};\r\n                assert(*constIter == P(0, 1));\r\n                assert(constIter->first == 0);\r\n                assert(constIter->second == 1);\r\n\r\n                static_assert(is_same_v<decltype(constIter.operator->()), ArrowRetType>);\r\n            }\r\n\r\n            { // [common.iter.nav]\r\n                Cit iter{Iter{input}};\r\n                ++iter;\r\n                assert(*iter == P(0, 2));\r\n\r\n                assert(*iter++ == P(0, 2));\r\n                assert(*iter == P(0, 3));\r\n            }\r\n\r\n            { // [common.iter.cmp]\r\n                // Compare iterator / iterator\r\n                assert(Cit{Iter{input}} == Cit{Iter{input}});\r\n                assert(Cit{Iter{input}} != Cit{Iter{input + 1}});\r\n\r\n                // Compare iterator / sentinel\r\n                assert(Cit{Iter{input}} == Cit{Sen{input}});\r\n                assert(Cit{Sen{input}} != Cit{Iter{input + 1}});\r\n\r\n                // Compare sentinel / sentinel\r\n                assert(Cit{Sen{input}} == Cit{Sen{input}});\r\n                assert(Cit{Sen{input}} == Cit{Sen{input + 1}});\r\n\r\n                if constexpr (CanDifference<Iter>) {\r\n                    // Difference iterator / iterator\r\n                    const same_as<iter_difference_t<Iter>> auto diff_it_it = Cit{Iter{input}} - Cit{Iter{input + 1}};\r\n                    assert(diff_it_it == -1);\r\n\r\n                    // Difference iterator / sentinel\r\n                    const same_as<iter_difference_t<Iter>> auto diff_it_sen = Cit{Iter{input}} - Cit{Sen{input + 1}};\r\n                    const same_as<iter_difference_t<Iter>> auto diff_sen_it = Cit{Sen{input + 1}} - Cit{Iter{input}};\r\n                    assert(diff_it_sen == -1);\r\n                    assert(diff_sen_it == 1);\r\n\r\n                    // Difference sentinel / sentinel\r\n                    const same_as<iter_difference_t<Iter>> auto diff_sen_sen = Cit{Sen{input}} - Cit{Sen{input + 1}};\r\n                    assert(diff_sen_sen == 0);\r\n\r\n                    // Difference iterator / other iterator\r\n                    const same_as<iter_difference_t<Iter>> auto diff_it_oit = Cit{Iter{input}} - OCit{Iter{input + 1}};\r\n                    assert(diff_it_oit == -1);\r\n\r\n                    // Difference iterator / other sentinel\r\n                    const same_as<iter_difference_t<Iter>> auto diff_it_osen = Cit{Iter{input}} - OCit{OSen{input + 1}};\r\n                    assert(diff_it_osen == -1);\r\n\r\n                    // Difference other iterator / sentinel\r\n                    const same_as<iter_difference_t<Iter>> auto diff_sen_oit = Cit{Sen{input + 1}} - OCit{Iter{input}};\r\n                    assert(diff_sen_oit == 1);\r\n\r\n                    // Difference sentinel / other sentinel\r\n                    const same_as<iter_difference_t<Iter>> auto diff_sen_osen = Cit{Sen{input}} - OCit{OSen{input + 1}};\r\n                    assert(diff_sen_osen == 0);\r\n                }\r\n            }\r\n\r\n            { // [common.iter.cust]\r\n                if constexpr (input_iterator<Iter>) { // iter_move\r\n                    Cit iter1{Iter{input}};\r\n\r\n                    const same_as<iter_value_t<Iter>> auto element1(ranges::iter_move(iter1));\r\n                    assert(element1 == P(0, 1));\r\n                }\r\n\r\n                if constexpr (indirectly_swappable<Iter>) { // iter_swap\r\n                    Cit iter1{Iter{input}};\r\n                    Cit iter2{Iter{input + 1}};\r\n\r\n                    ranges::iter_swap(iter1, iter2);\r\n                    assert(*iter1 == P(0, 2));\r\n                    assert(*iter2 == P(0, 1));\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nconstexpr bool test_operator_arrow() {\r\n    P input[3] = {{0, 1}, {0, 2}, {0, 3}};\r\n\r\n    using pointerTest = common_iterator<P*, void*>;\r\n    pointerTest pointerIter{input};\r\n\r\n    assert(*pointerIter == P(0, 1));\r\n    assert(pointerIter->first == 0);\r\n    assert(pointerIter->second == 1);\r\n    static_assert(is_same_v<decltype(pointerIter.operator->()), P*>);\r\n\r\n    using countedTest = common_iterator<counted_iterator<P*>, default_sentinel_t>;\r\n    countedTest countedIter{counted_iterator{input, 3}};\r\n\r\n    assert(*countedIter == P(0, 1));\r\n    assert(countedIter->first == 0);\r\n    assert(countedIter->second == 1);\r\n    static_assert(is_same_v<decltype(countedIter.operator->()), counted_iterator<P*>>);\r\n\r\n    return true;\r\n}\r\n\r\n// common_iterator supports \"copyable but not equality_comparable\" iterators, which combination test::iterator does not\r\n// provide (I don't think this is a combination of properties that any real iterator will ever exhibit). Whip up\r\n// something so we can test the iterator_category metaprogramming.\r\ntemplate <class T>\r\nconcept no_iterator_traits = !requires { typename iterator_traits<T>::iterator_concept; } //\r\n                          && !requires { typename iterator_traits<T>::iterator_category; } //\r\n                          && !requires { typename iterator_traits<T>::value_type; } //\r\n                          && !requires { typename iterator_traits<T>::difference_type; } //\r\n                          && !requires { typename iterator_traits<T>::pointer; } //\r\n                          && !requires { typename iterator_traits<T>::reference; };\r\n\r\nstruct input_copy_but_no_eq {\r\n    using value_type      = int;\r\n    using difference_type = int;\r\n\r\n    input_copy_but_no_eq() = delete;\r\n\r\n    int operator*() const;\r\n    input_copy_but_no_eq& operator++();\r\n    void operator++(int);\r\n\r\n    bool operator==(default_sentinel_t) const;\r\n};\r\nstatic_assert(input_iterator<input_copy_but_no_eq>);\r\nstatic_assert(no_iterator_traits<input_copy_but_no_eq>);\r\nstatic_assert(sentinel_for<default_sentinel_t, input_copy_but_no_eq>);\r\nusing ICID = iterator_traits<common_iterator<input_copy_but_no_eq, default_sentinel_t>>;\r\nstatic_assert(same_as<typename ICID::iterator_category, input_iterator_tag>);\r\n\r\nstruct poor_sentinel {\r\n    poor_sentinel() = default;\r\n    constexpr poor_sentinel(const poor_sentinel&) {} // non-trivial copy constructor, to test _Variantish behavior\r\n    poor_sentinel& operator=(const poor_sentinel&) = default;\r\n\r\n    template <weakly_incrementable Winc>\r\n    [[nodiscard]] constexpr bool operator==(const Winc&) const noexcept {\r\n        return true;\r\n    }\r\n\r\n    template <weakly_incrementable Winc>\r\n    [[nodiscard]] constexpr iter_difference_t<Winc> operator-(const Winc&) const noexcept {\r\n        return 0;\r\n    }\r\n\r\n    template <weakly_incrementable Winc>\r\n    [[nodiscard]] friend constexpr iter_difference_t<Winc> operator-(const Winc&, const poor_sentinel&) noexcept {\r\n        return 0;\r\n    }\r\n};\r\n\r\nconstexpr bool test_gh_2065() { // Guard against regression of GH-2065, for which we previously stumbled over CWG-1699.\r\n    {\r\n        int x = 42;\r\n        common_iterator<int*, unreachable_sentinel_t> it1{&x};\r\n        common_iterator<const int*, unreachable_sentinel_t> it2{&x};\r\n        assert(it1 == it2);\r\n    }\r\n\r\n    {\r\n        int i = 1729;\r\n        common_iterator<int*, poor_sentinel> it1{&i};\r\n        common_iterator<const int*, poor_sentinel> it2{&i};\r\n        assert(it1 - it2 == 0);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_lwg_3574() {\r\n    // LWG-3574: \"common_iterator should be completely constexpr-able\"\r\n    int arr[]{11, 22, 33};\r\n\r\n    {\r\n        common_iterator<int*, const int*> x{arr};\r\n        common_iterator<int*, const int*> y{arr + 2};\r\n        assert(y - x == 2);\r\n    }\r\n\r\n    { // test that copy construction is constexpr, even when the sentinel isn't trivially copy constructible\r\n        common_iterator<int*, poor_sentinel> a{arr};\r\n        common_iterator<int*, poor_sentinel> b{a}; // copy-construct with a stored iterator\r\n        common_iterator<int*, poor_sentinel> x{poor_sentinel{}};\r\n        common_iterator<int*, poor_sentinel> y{x}; // copy-construct with a stored sentinel\r\n        assert(b - a == 0);\r\n    }\r\n\r\n    common_iterator<int*, unreachable_sentinel_t> i{arr};\r\n    common_iterator<const int*, unreachable_sentinel_t> ci{arr + 1};\r\n\r\n    assert(*ci == 22);\r\n    assert(*as_const(ci) == 22);\r\n    assert(ci.operator->() == arr + 1);\r\n\r\n    ci = i;\r\n    assert(*ci == 11);\r\n    assert(ci == i);\r\n\r\n    assert(*++ci == 22);\r\n    assert(ci != i);\r\n\r\n    assert(*ci++ == 22);\r\n    assert(*ci == 33);\r\n\r\n    assert(iter_move(i) == 11);\r\n\r\n    common_iterator<int*, unreachable_sentinel_t> k{arr + 2};\r\n    iter_swap(i, k);\r\n    assert(arr[0] == 33);\r\n    assert(arr[2] == 11);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class It, class Se>\r\nconcept common_iterator_has_iterator_category =\r\n    requires { typename iterator_traits<common_iterator<It, Se>>::iterator_category; };\r\n\r\n// LWG-3749 common_iterator should handle integer-class difference types\r\nvoid test_lwg_3749() { // COMPILE-ONLY\r\n    static_assert(common_iterator_has_iterator_category<int*, const int*>);\r\n    static_assert(common_iterator_has_iterator_category<int*, unreachable_sentinel_t>);\r\n\r\n    using small_unbounded_iota = decltype(views::iota(42));\r\n    static_assert(common_iterator_has_iterator_category<ranges::iterator_t<small_unbounded_iota>,\r\n        ranges::sentinel_t<small_unbounded_iota>>);\r\n\r\n    using large_unbounded_iota = decltype(views::iota(42ull));\r\n    static_assert(!common_iterator_has_iterator_category<ranges::iterator_t<large_unbounded_iota>,\r\n        ranges::sentinel_t<large_unbounded_iota>>);\r\n}\r\n\r\n// Validate that _Variantish works when fed with a non-trivially-destructible type\r\nvoid test_non_trivially_destructible_type() { // COMPILE-ONLY\r\n    struct non_trivially_destructible_input_iterator {\r\n        using difference_type = int;\r\n        using value_type      = int;\r\n\r\n        ~non_trivially_destructible_input_iterator() {}\r\n\r\n        non_trivially_destructible_input_iterator& operator++() {\r\n            return *this;\r\n        }\r\n        void operator++(int) {}\r\n        int operator*() const {\r\n            return 0;\r\n        }\r\n        bool operator==(default_sentinel_t) const {\r\n            return true;\r\n        }\r\n    };\r\n\r\n    common_iterator<non_trivially_destructible_input_iterator, default_sentinel_t> it;\r\n}\r\n\r\nstruct VolatileSentinel {\r\n    VolatileSentinel()                                   = default;\r\n    VolatileSentinel(const VolatileSentinel&)            = default;\r\n    VolatileSentinel(VolatileSentinel&&)                 = default;\r\n    VolatileSentinel& operator=(const VolatileSentinel&) = default;\r\n    VolatileSentinel& operator=(VolatileSentinel&&)      = default;\r\n\r\n    constexpr explicit VolatileSentinel(const char* p) noexcept : ptr_{p} {}\r\n\r\n    template <class T = VolatileSentinel>\r\n    constexpr VolatileSentinel(const volatile type_identity_t<T>& other) noexcept : ptr_{other.ptr_} {}\r\n    template <class T = VolatileSentinel>\r\n    constexpr VolatileSentinel(const volatile type_identity_t<T>&& other) noexcept : ptr_{other.ptr_} {}\r\n\r\n    template <class T = VolatileSentinel>\r\n    VolatileSentinel& operator=(volatile type_identity_t<T>& rhs) noexcept {\r\n        ptr_ = rhs.ptr_;\r\n        return *this;\r\n    }\r\n    template <class T = VolatileSentinel>\r\n    VolatileSentinel& operator=(volatile type_identity_t<T>&& rhs) noexcept {\r\n        ptr_ = rhs.ptr_;\r\n        return *this;\r\n    }\r\n    template <class T = VolatileSentinel>\r\n    VolatileSentinel& operator=(const volatile type_identity_t<T>& rhs) noexcept {\r\n        ptr_ = rhs.ptr_;\r\n        return *this;\r\n    }\r\n    template <class T = VolatileSentinel>\r\n    VolatileSentinel& operator=(const volatile type_identity_t<T>&& rhs) noexcept {\r\n        ptr_ = rhs.ptr_;\r\n        return *this;\r\n    }\r\n\r\n    template <class T = VolatileSentinel>\r\n    volatile VolatileSentinel& operator=(const volatile type_identity_t<T>& rhs) volatile noexcept {\r\n        ptr_ = rhs.ptr_;\r\n        return *this;\r\n    }\r\n    template <class T = VolatileSentinel>\r\n    volatile VolatileSentinel& operator=(const volatile type_identity_t<T>&& rhs) volatile noexcept {\r\n        ptr_ = rhs.ptr_;\r\n        return *this;\r\n    }\r\n\r\n    friend constexpr bool operator==(const char* const lhs, VolatileSentinel rhs) noexcept {\r\n        return lhs == rhs.ptr_;\r\n    }\r\n\r\n    friend constexpr auto operator-(const char* const lhs, VolatileSentinel rhs) noexcept {\r\n        return lhs - rhs.ptr_;\r\n    }\r\n\r\n    friend constexpr auto operator-(VolatileSentinel lhs, const char* const rhs) noexcept {\r\n        return lhs.ptr_ - rhs;\r\n    }\r\n\r\n    const char* ptr_ = nullptr;\r\n};\r\n\r\n// constexpr-incompatible\r\nvoid test_volatile() {\r\n    using std::swap;\r\n    using CommonIt = common_iterator<const char*, volatile VolatileSentinel>;\r\n\r\n    CommonIt it{static_cast<const char*>(nullptr)};\r\n    CommonIt se{VolatileSentinel{static_cast<const char*>(nullptr)}};\r\n\r\n    assert(it == se);\r\n    assert(it - se == 0);\r\n    assert(se - it == 0);\r\n\r\n    swap(it, it);\r\n    it = se;\r\n    it = move(se);\r\n}\r\n\r\nint main() {\r\n    with_writable_iterators<instantiator, P>::call();\r\n    static_assert(with_writable_iterators<instantiator, P>::call());\r\n\r\n    test_operator_arrow();\r\n    static_assert(test_operator_arrow());\r\n\r\n    test_gh_2065();\r\n    static_assert(test_gh_2065());\r\n\r\n    test_lwg_3574();\r\n    static_assert(test_lwg_3574());\r\n\r\n    test_volatile(); // constexpr-incompatible\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_common_iterator_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_common_iterator_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <iterator>\r\n\r\n#include <test_death.hpp>\r\nusing namespace std;\r\n\r\nstruct simple_input_iter {\r\n    using value_type      = int;\r\n    using difference_type = int;\r\n\r\n    value_type operator*() const {\r\n        return 0;\r\n    }\r\n    value_type operator->() const {\r\n        return 0;\r\n    }\r\n    simple_input_iter& operator++() {\r\n        return *this;\r\n    }\r\n    simple_input_iter operator++(int) {\r\n        return *this;\r\n    }\r\n\r\n    bool operator==(const simple_input_iter&) const = default;\r\n    bool operator==(const default_sentinel_t&) const {\r\n        return true;\r\n    }\r\n\r\n    difference_type operator-(const simple_input_iter&) const {\r\n        return 42;\r\n    }\r\n    friend difference_type operator-(const simple_input_iter&, const default_sentinel_t&) {\r\n        return 42;\r\n    }\r\n    friend difference_type operator-(const default_sentinel_t&, const simple_input_iter&) {\r\n        return 42;\r\n    }\r\n\r\n    friend void iter_swap(const simple_input_iter&, const simple_input_iter&) {}\r\n};\r\n\r\nusing CIT = common_iterator<simple_input_iter, default_sentinel_t>;\r\n\r\nvoid test_case_operator_dereference_sentinel() {\r\n    CIT cit{default_sentinel};\r\n    (void) (*cit); // common_iterator can only be dereferenced if it holds an iterator\r\n}\r\n\r\nvoid test_case_operator_dereference_valueless() {\r\n    CIT cit{_Variantish_empty_tag{}};\r\n    (void) (*cit); // common_iterator can only be dereferenced if it holds an iterator\r\n}\r\n\r\nvoid test_case_operator_dereference_const_sentinel() {\r\n    const CIT cit{default_sentinel};\r\n    (void) (*cit); // common_iterator can only be dereferenced if it holds an iterator\r\n}\r\n\r\nvoid test_case_operator_dereference_const_valueless() {\r\n    const CIT cit{_Variantish_empty_tag{}};\r\n    (void) (*cit); // common_iterator can only be dereferenced if it holds an iterator\r\n}\r\n\r\nvoid test_case_operator_arrow_sentinel() {\r\n    CIT cit{default_sentinel};\r\n    (void) (cit.operator->()); // common_iterator can only be dereferenced if it holds an iterator\r\n}\r\nvoid test_case_operator_arrow_valueless() {\r\n    CIT cit{_Variantish_empty_tag{}};\r\n    (void) (cit.operator->()); // common_iterator can only be dereferenced if it holds an iterator\r\n}\r\n\r\nvoid test_case_operator_preincrement_sentinel() {\r\n    CIT cit{default_sentinel};\r\n    ++cit; // common_iterator can only be preincremented if it holds an iterator\r\n}\r\n\r\nvoid test_case_operator_preincrement_valueless() {\r\n    CIT cit{_Variantish_empty_tag{}};\r\n    ++cit; // common_iterator can only be preincremented if it holds an iterator\r\n}\r\n\r\nvoid test_case_operator_postincrement_sentinel() {\r\n    CIT cit{default_sentinel};\r\n    cit++; // common_iterator can only be postincremented if it holds an iterator\r\n}\r\n\r\nvoid test_case_operator_postincrement_valueless() {\r\n    CIT cit{_Variantish_empty_tag{}};\r\n    cit++; // common_iterator can only be postincremented if it holds an iterator\r\n}\r\n\r\nvoid test_case_equality_left_valueless() {\r\n    CIT cit1{_Variantish_empty_tag{}};\r\n    CIT cit2{};\r\n    (void) (cit1 == cit2); // common_iterator can only be compared if it holds a value\r\n}\r\n\r\nvoid test_case_equality_right_valueless() {\r\n    CIT cit1{};\r\n    CIT cit2{_Variantish_empty_tag{}};\r\n    (void) (cit1 == cit2); // common_iterator can only be compared if it holds a value\r\n}\r\n\r\nvoid test_case_difference_left_valueless() {\r\n    CIT cit1{_Variantish_empty_tag{}};\r\n    CIT cit2{};\r\n    (void) (cit1 - cit2); // common_iterator can only be subtracted if it holds a value\r\n}\r\n\r\nvoid test_case_difference_right_valueless() {\r\n    CIT cit1{};\r\n    CIT cit2{_Variantish_empty_tag{}};\r\n    (void) (cit1 - cit2); // common_iterator can only be subtracted if it holds a value\r\n}\r\n\r\nvoid test_case_iter_move_sentinel() {\r\n    CIT cit{default_sentinel};\r\n    (void) ranges::iter_move(cit); // can only iter_move from common_iterator if it holds an iterator\r\n}\r\n\r\nvoid test_case_iter_move_valueless() {\r\n    CIT cit{_Variantish_empty_tag{}};\r\n    (void) ranges::iter_move(cit); // can only iter_move from common_iterator if it holds an iterator\r\n}\r\n\r\nvoid test_case_iter_swap_sentinel_left_sentinel() {\r\n    CIT cit1{default_sentinel};\r\n    CIT cit2{};\r\n    (void) ranges::iter_swap(cit1, cit2); // can only iter_swap common_iterators if both hold iterators\r\n}\r\n\r\nvoid test_case_iter_swap_sentinel_left_valueless() {\r\n    CIT cit1{_Variantish_empty_tag{}};\r\n    CIT cit2{};\r\n    (void) ranges::iter_swap(cit1, cit2); // can only iter_swap common_iterators if both hold iterators\r\n}\r\n\r\nvoid test_case_iter_swap_sentinel_right_sentinel() {\r\n    CIT cit1{};\r\n    CIT cit2{default_sentinel};\r\n    (void) ranges::iter_swap(cit1, cit2); // can only iter_swap common_iterators if both hold iterators\r\n}\r\n\r\nvoid test_case_iter_swap_sentinel_right_valueless() {\r\n    CIT cit1{};\r\n    CIT cit2{_Variantish_empty_tag{}};\r\n    (void) ranges::iter_swap(cit1, cit2); // can only iter_swap common_iterators if both hold iterators\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_case_operator_dereference_sentinel,\r\n        test_case_operator_dereference_valueless,\r\n        test_case_operator_dereference_const_sentinel,\r\n        test_case_operator_dereference_const_valueless,\r\n        test_case_operator_arrow_sentinel,\r\n        test_case_operator_arrow_valueless,\r\n        test_case_operator_preincrement_sentinel,\r\n        test_case_operator_preincrement_valueless,\r\n        test_case_operator_postincrement_sentinel,\r\n        test_case_operator_postincrement_valueless,\r\n        test_case_equality_left_valueless,\r\n        test_case_equality_right_valueless,\r\n        test_case_difference_left_valueless,\r\n        test_case_difference_right_valueless,\r\n        test_case_iter_move_sentinel,\r\n        test_case_iter_move_valueless,\r\n        test_case_iter_swap_sentinel_left_sentinel,\r\n        test_case_iter_swap_sentinel_left_valueless,\r\n        test_case_iter_swap_sentinel_right_sentinel,\r\n        test_case_iter_swap_sentinel_right_valueless,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_counted_iterator/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_counted_iterator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <concepts>\r\n#include <iterator>\r\n#include <list>\r\n#include <memory>\r\n#include <type_traits>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\ntemplate <class>\r\nconstexpr void* must_be_countable = nullptr;\r\n\r\ntemplate <input_or_output_iterator I>\r\n    requires requires { typename counted_iterator<I>; }\r\nconstexpr bool must_be_countable<I> = true;\r\n\r\ntemplate <class... Is>\r\nconcept Counted = (must_be_countable<Is> && ...);\r\n\r\ntemplate <class I1, class I2>\r\nconcept CountedCompare = Counted<I1, I2> && requires(const counted_iterator<I1>& c1, const counted_iterator<I2>& c2) {\r\n    c1 == c2;\r\n    c1 != c2;\r\n    c1 < c2;\r\n    c1 > c2;\r\n    c1 <= c2;\r\n    c1 >= c2;\r\n    c1 <=> c2;\r\n    c1 - c2;\r\n\r\n    c2 == c1;\r\n    c2 != c1;\r\n    c2 < c1;\r\n    c2 > c1;\r\n    c2 <= c1;\r\n    c2 >= c1;\r\n    c2 <=> c1;\r\n    c2 - c1;\r\n};\r\n\r\nstruct instantiator {\r\n    template <input_or_output_iterator Iter>\r\n    static constexpr void call() {\r\n        using ConstIter = Iter::Consterator;\r\n\r\n        int input[5] = {1, 2, 3, 4, 5};\r\n        // [counted.iter.const]\r\n        {\r\n            static_assert(default_initializable<counted_iterator<Iter>> == default_initializable<Iter>);\r\n            if constexpr (default_initializable<Iter>) {\r\n                [[maybe_unused]] counted_iterator<Iter> defaultConstructed{};\r\n            }\r\n\r\n            counted_iterator<Iter> constructed(Iter{input}, iter_difference_t<Iter>{2});\r\n            counted_iterator<Iter> constructedEmpty{Iter{input}, iter_difference_t<Iter>{0}};\r\n\r\n            if constexpr (copyable<Iter>) { // counted_iterator only has const lvalue conversions\r\n                counted_iterator<ConstIter> constructedConversion{constructed};\r\n                constructedConversion = constructedEmpty;\r\n            }\r\n        }\r\n\r\n        // [counted.iter.access]\r\n        {\r\n            if constexpr (copy_constructible<Iter>) {\r\n                const counted_iterator<Iter> lvalueBase{Iter{input}, 2};\r\n                const same_as<Iter> auto base1 = lvalueBase.base();\r\n                assert(base1.peek() == input);\r\n            }\r\n\r\n            const same_as<Iter> auto base2 = counted_iterator<Iter>{Iter{input}, 2}.base();\r\n            assert(base2.peek() == input);\r\n\r\n            const same_as<iter_difference_t<Iter>> auto length = counted_iterator<Iter>{Iter{input}, 2}.count();\r\n            assert(length == 2);\r\n        }\r\n\r\n        // [counted.iter.elem]\r\n        {\r\n            counted_iterator<Iter> iter{Iter{input}, 2};\r\n            assert(*iter == 1);\r\n            if constexpr (is_reference_v<iter_reference_t<Iter>>) {\r\n                assert(addressof(*iter) == input);\r\n            }\r\n\r\n            const counted_iterator<Iter> constIter{Iter{input}, 2};\r\n            assert(*constIter == 1);\r\n            if constexpr (is_reference_v<iter_reference_t<Iter>>) {\r\n                assert(addressof(*constIter) == input);\r\n            }\r\n\r\n            if constexpr (random_access_iterator<Iter>) {\r\n                assert(iter[1] == 2);\r\n                if constexpr (is_reference_v<iter_reference_t<Iter>>) {\r\n                    assert(addressof(iter[1]) == input + 1);\r\n                }\r\n            }\r\n        }\r\n        // [counted.iter.nav]\r\n        {\r\n            { // pre increment\r\n                counted_iterator<Iter> iter{Iter{input}, 2};\r\n                assert(addressof(++iter) == addressof(iter));\r\n                assert(iter.count() == 1);\r\n                assert(*iter == 2);\r\n                if constexpr (is_reference_v<iter_reference_t<Iter>>) {\r\n                    assert(addressof(*iter) == input + 1);\r\n                }\r\n            }\r\n\r\n            if constexpr (forward_iterator<Iter>) { // post increment\r\n                counted_iterator<Iter> iter{Iter{input}, 2};\r\n                auto ref_iter = iter;\r\n                auto iter2    = iter++;\r\n                assert(iter2 == ref_iter);\r\n                assert(iter.count() == 1);\r\n                assert(*iter == 2);\r\n                if constexpr (is_reference_v<iter_reference_t<Iter>>) {\r\n                    assert(addressof(*iter) == input + 1);\r\n                }\r\n            }\r\n\r\n            if constexpr (bidirectional_iterator<Iter>) {\r\n                {\r\n                    // pre decrement\r\n                    counted_iterator<Iter> iter{Iter{input + 2}, 3};\r\n                    assert(addressof(--iter) == addressof(iter));\r\n                    assert(iter.count() == 4);\r\n                    assert(*iter == 2);\r\n                    if constexpr (is_reference_v<iter_reference_t<Iter>>) {\r\n                        assert(addressof(*iter) == input + 1);\r\n                    }\r\n                }\r\n                { // post decrement\r\n                    counted_iterator<Iter> iter{Iter{begin(input) + 2}, 3};\r\n                    auto ref_iter = iter;\r\n                    auto iter2    = iter--;\r\n                    assert(iter2 == ref_iter);\r\n                    assert(iter.count() == 4);\r\n                    assert(*iter == 2);\r\n                    if constexpr (is_reference_v<iter_reference_t<Iter>>) {\r\n                        assert(addressof(*iter) == input + 1);\r\n                    }\r\n                }\r\n            }\r\n\r\n            if constexpr (random_access_iterator<Iter>) {\r\n                { // increment by n lhs\r\n                    counted_iterator<Iter> iter{Iter{input}, 5};\r\n                    auto ref_iter = iter + 3;\r\n                    assert(iter.count() == 5);\r\n                    assert(*iter == 1);\r\n                    assert(iter.count() == ref_iter.count() + 3);\r\n                    assert(iter.base().peek() == prev(ref_iter.base().peek(), 3));\r\n                }\r\n                { // increment by n rhs\r\n                    counted_iterator<Iter> iter{Iter{input}, 5};\r\n                    auto ref_iter = 3 + iter;\r\n                    assert(iter.count() == 5);\r\n                    assert(*iter == 1);\r\n                    assert(iter.count() == ref_iter.count() + 3);\r\n                    assert(iter.base().peek() == prev(ref_iter.base().peek(), 3));\r\n                }\r\n                { // increment value-initialized by 0\r\n                    counted_iterator<Iter> iter;\r\n                    auto ref_iter = 0 + iter;\r\n                    assert(iter == ref_iter);\r\n                }\r\n                { // increment assign\r\n                    counted_iterator<Iter> iter{Iter{input}, 5};\r\n                    auto ref_iter = iter;\r\n                    assert(addressof(iter += 3) == addressof(iter));\r\n                    assert(iter.count() == 2);\r\n                    assert(*iter == 4);\r\n                    assert(iter.count() == ref_iter.count() - 3);\r\n                    assert(iter.base().peek() == next(ref_iter.base().peek(), 3));\r\n                }\r\n                { // decrement by n\r\n                    counted_iterator<Iter> iter{Iter{begin(input) + 2}, 3};\r\n                    auto ref_iter = iter - 2;\r\n                    assert(iter.count() == 3);\r\n                    assert(*iter == 3);\r\n                    assert(iter.count() == ref_iter.count() - 2);\r\n                    assert(iter.base().peek() == next(ref_iter.base().peek(), 2));\r\n                }\r\n            }\r\n            { // difference\r\n                counted_iterator<Iter> iter1{Iter{input + 1}, 2};\r\n                counted_iterator<Iter> iter2{Iter{input}, 3};\r\n\r\n                const same_as<iter_difference_t<Iter>> auto diff1 = iter1 - iter2;\r\n                assert(diff1 == 1);\r\n\r\n                const same_as<iter_difference_t<Iter>> auto diff2 = iter2 - iter1;\r\n                assert(diff2 == -1);\r\n            }\r\n            if constexpr (default_initializable<Iter>) { // difference value-initialized\r\n                const same_as<iter_difference_t<Iter>> auto diff1 = counted_iterator<Iter>{} - counted_iterator<Iter>{};\r\n                assert(diff1 == 0);\r\n            }\r\n            static_assert(CountedCompare<Iter, ConstIter> == common_with<Iter, ConstIter>);\r\n            static_assert(CountedCompare<ConstIter, Iter> == common_with<Iter, ConstIter>);\r\n\r\n            if constexpr (common_with<Iter, ConstIter>) { // cross-type difference\r\n                counted_iterator<Iter> iter1{Iter{input + 1}, 2};\r\n                counted_iterator<ConstIter> iter2{ConstIter{input}, 3};\r\n\r\n                const same_as<iter_difference_t<Iter>> auto diff1 = iter1 - iter2;\r\n                assert(diff1 == 1);\r\n\r\n                const same_as<iter_difference_t<ConstIter>> auto diff2 = iter2 - iter1;\r\n                assert(diff2 == -1);\r\n            }\r\n\r\n            { // difference default sentinel\r\n                counted_iterator<Iter> iter1{Iter{input}, 2};\r\n\r\n                const same_as<iter_difference_t<Iter>> auto diff1 = iter1 - default_sentinel;\r\n                assert(diff1 == -2);\r\n\r\n                const same_as<iter_difference_t<Iter>> auto diff2 = default_sentinel - iter1;\r\n                assert(diff2 == 2);\r\n            }\r\n\r\n            if constexpr (random_access_iterator<Iter>) { // decrement assign\r\n                counted_iterator<Iter> iter{Iter{end(input)}, 0};\r\n                auto ref_iter = iter;\r\n                assert(addressof(iter -= 3) == addressof(iter));\r\n                assert(iter.count() == 3);\r\n                assert(*iter == 3);\r\n                assert(iter.count() == ref_iter.count() + 3);\r\n                assert(iter.base().peek() == prev(ref_iter.base().peek(), 3));\r\n            }\r\n        }\r\n        // [counted.iter.cmp]\r\n        {\r\n            { // equality\r\n                counted_iterator<Iter> iter1{Iter{input}, 2};\r\n                counted_iterator<Iter> iter2{Iter{input}, 2};\r\n                counted_iterator<Iter> iter3{Iter{input + 1}, 1};\r\n                assert(iter1 == iter2);\r\n                assert(!(iter1 == iter3));\r\n            }\r\n            { // inequality\r\n                counted_iterator<Iter> iter1{Iter{input + 1}, 2};\r\n                counted_iterator<Iter> iter2{Iter{input}, 3};\r\n                counted_iterator<Iter> iter3{Iter{input}, 3};\r\n                assert(iter1 != iter2);\r\n                assert(!(iter2 != iter3));\r\n            }\r\n            { // equality default sentinel\r\n                counted_iterator<Iter> iter1{Iter{input}, 2};\r\n                counted_iterator<Iter> iter2{Iter{input}, 0};\r\n                assert(iter1 != default_sentinel);\r\n                assert(default_sentinel != iter1);\r\n                assert(iter2 == default_sentinel);\r\n                assert(default_sentinel == iter2);\r\n            }\r\n            { // spaceship\r\n                counted_iterator<Iter> iter1{Iter{input}, 2};\r\n                counted_iterator<Iter> iter2{Iter{input + 2}, 0};\r\n                const same_as<strong_ordering> auto result = iter1 <=> iter2;\r\n                assert(result == strong_ordering::less);\r\n                assert(iter2 <=> iter1 == strong_ordering::greater);\r\n                assert(iter1 <=> iter1 == strong_ordering::equal);\r\n                assert(iter1 <=> iter1 == strong_ordering::equivalent);\r\n            }\r\n            if constexpr (default_initializable<Iter>) { // spaceship value-initialized\r\n                assert(counted_iterator<Iter>{} <=> counted_iterator<Iter>{} == strong_ordering::equal);\r\n                assert(counted_iterator<Iter>{} <=> counted_iterator<Iter>{} == strong_ordering::equivalent);\r\n            }\r\n\r\n            if constexpr (common_with<Iter, ConstIter>) {\r\n                { // equality converting\r\n                    counted_iterator<ConstIter> const_iter1{ConstIter{input}, 2};\r\n                    counted_iterator<Iter> iter2{Iter{input}, 2};\r\n                    counted_iterator<Iter> iter3{Iter{input + 1}, 1};\r\n                    assert(const_iter1 == iter2);\r\n                    assert(!(const_iter1 == iter3));\r\n                }\r\n                { // inequality converting\r\n                    counted_iterator<Iter> iter1{Iter{input + 1}, 2};\r\n                    counted_iterator<ConstIter> const_iter1{ConstIter{input}, 3};\r\n                    counted_iterator<Iter> iter3{Iter{input}, 3};\r\n                    assert(iter1 != const_iter1);\r\n                    assert(!(const_iter1 != iter3));\r\n                }\r\n                { // spaceship converting\r\n                    counted_iterator<Iter> iter{Iter{input}, 2};\r\n                    counted_iterator<ConstIter> const_iter{ConstIter{input + 2}, 0};\r\n                    const same_as<strong_ordering> auto result = iter <=> const_iter;\r\n                    assert(result == strong_ordering::less);\r\n                    assert(const_iter <=> iter == strong_ordering::greater);\r\n                    assert(iter <=> iter == strong_ordering::equal);\r\n                    assert(iter <=> iter == strong_ordering::equivalent);\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\n// Also test P2259R1 Repairing input range adaptors and counted_iterator\r\nstruct simple_forward_iter {\r\n    using value_type        = double;\r\n    using difference_type   = long;\r\n    using iterator_category = input_iterator_tag;\r\n    using iterator_concept  = forward_iterator_tag;\r\n\r\n    value_type operator*() const;\r\n    simple_forward_iter& operator++();\r\n    simple_forward_iter operator++(int);\r\n\r\n    bool operator==(const simple_forward_iter&) const;\r\n};\r\n\r\nusing CI = counted_iterator<simple_forward_iter>;\r\n\r\nstatic_assert(same_as<iterator_traits<simple_forward_iter>::iterator_category, input_iterator_tag>);\r\nstatic_assert(forward_iterator<simple_forward_iter>);\r\nstatic_assert(forward_iterator<CI>);\r\nstatic_assert(!contiguous_iterator<CI>);\r\nstatic_assert(same_as<CI::value_type, double>);\r\nstatic_assert(same_as<CI::difference_type, long>);\r\nstatic_assert(same_as<CI::iterator_category, input_iterator_tag>);\r\nstatic_assert(same_as<CI::iterator_concept, forward_iterator_tag>);\r\n\r\nvoid test_P2259() {\r\n    struct A {\r\n        int m;\r\n    };\r\n    A a[2] = {{1}, {2}};\r\n    counted_iterator ci{a, 2};\r\n    reverse_iterator ri{ci + 1};\r\n    static_assert(contiguous_iterator<decltype(ci)>);\r\n    assert(ci->m == 1);\r\n    assert(ri->m == 1);\r\n}\r\n\r\nint main() {\r\n    static_assert(with_writable_iterators<instantiator, int>::call());\r\n    with_writable_iterators<instantiator, int>::call();\r\n\r\n    { // Validate unwrapping\r\n        list<int> lst{0, 1, 2};\r\n        counted_iterator ci{lst.begin(), 2};\r\n        same_as<counted_iterator<_Unwrapped_t<list<int>::iterator>>> auto uci = _Get_unwrapped(ci);\r\n        ++uci;\r\n        _Seek_wrapped(ci, uci);\r\n        assert((ci == counted_iterator{ranges::next(lst.begin()), 1}));\r\n    }\r\n\r\n    test_P2259();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_counted_iterator_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_counted_iterator_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <iterator>\r\n#include <vector>\r\n\r\n#include <test_death.hpp>\r\nusing namespace std;\r\n\r\nint globalArray[5]{10, 20, 30, 40, 50};\r\nint otherArray[5]{10, 20, 30, 40, 50};\r\nvector<int> checkedArray{10, 20, 30, 40, 50};\r\nusing vit = vector<int>::iterator;\r\n\r\nstruct simple_input_iter {\r\n    using value_type      = int;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    value_type operator*() const {\r\n        return *_ptr;\r\n    }\r\n    simple_input_iter& operator++() {\r\n        ++_ptr;\r\n        return *this;\r\n    }\r\n    simple_input_iter operator++(int) {\r\n        simple_input_iter _tmp = *this;\r\n        ++_ptr;\r\n        return _tmp;\r\n    }\r\n\r\n    bool operator==(simple_input_iter const&) const = default;\r\n\r\n    int* _ptr = nullptr;\r\n};\r\n\r\nvoid test_case_construction_negative_length() {\r\n    counted_iterator<int*> cit{globalArray, -1}; // counted_iterator requires non-negative length n\r\n    (void) cit;\r\n}\r\n\r\nvoid test_case_operator_dereference_value_initialized_iterator() {\r\n    counted_iterator<int*> cit{}; // note: for IDL to work correctly, default-init and value-init are equivalent\r\n    (void) (*cit); // cannot dereference value-initialized counted_iterator\r\n}\r\n\r\nvoid test_case_operator_dereference_end_iterator() {\r\n    counted_iterator<int*> cit{globalArray, 0};\r\n    (void) (*cit); // cannot dereference end counted_iterator\r\n}\r\n\r\nvoid test_case_operator_preincrement_value_initialized_iterator() {\r\n    counted_iterator<int*> cit{};\r\n    ++cit; // cannot increment value-initialized counted_iterator\r\n}\r\n\r\nvoid test_case_operator_preincrement_value_initialized_input_iterator() {\r\n    counted_iterator<simple_input_iter> cit{};\r\n    ++cit; // cannot increment value-initialized counted_iterator\r\n}\r\n\r\nvoid test_case_operator_preincrement_after_end() {\r\n    counted_iterator<int*> cit{globalArray, 0};\r\n    ++cit; // cannot increment counted_iterator past end\r\n}\r\n\r\nvoid test_case_operator_preincrement_after_end_input_iterator() {\r\n    counted_iterator<simple_input_iter> cit{simple_input_iter{globalArray}, 0};\r\n    ++cit; // cannot increment counted_iterator past end\r\n}\r\n\r\nvoid test_case_operator_postincrement_value_initialized_iterator() {\r\n    counted_iterator<int*> cit{};\r\n    cit++; // cannot increment value-initialized counted_iterator\r\n}\r\n\r\nvoid test_case_operator_postincrement_value_initialized_input_iterator() {\r\n    counted_iterator<simple_input_iter> cit{};\r\n    cit++; // cannot increment value-initialized counted_iterator\r\n}\r\n\r\nvoid test_case_operator_postincrement_after_end() {\r\n    counted_iterator<int*> cit{globalArray, 0};\r\n    cit++; // cannot increment counted_iterator past end\r\n}\r\n\r\nvoid test_case_operator_postincrement_after_end_input_iterator() {\r\n    counted_iterator<simple_input_iter> cit{simple_input_iter{globalArray}, 0};\r\n    cit++; // cannot increment value-initialized counted_iterator\r\n}\r\n\r\nvoid test_case_operator_predecrement_before_begin() {\r\n    counted_iterator<vit> cit{begin(checkedArray), 5};\r\n    --cit; // cannot decrement counted_iterator before begin\r\n}\r\n\r\nvoid test_case_operator_decrement_before_begin() {\r\n    counted_iterator<vit> cit{begin(checkedArray), 5};\r\n    cit--; // cannot decrement counted_iterator before begin\r\n}\r\n\r\nvoid test_case_operator_advance_value_initialized_iterator() {\r\n    counted_iterator<int*> cit{};\r\n    cit += 1; // cannot seek value-initialized counted_iterator\r\n}\r\n\r\nvoid test_case_operator_advance_after_end() {\r\n    counted_iterator<int*> cit{globalArray, 2};\r\n    cit += 3; // cannot seek counted_iterator after end\r\n}\r\n\r\nvoid test_case_operator_advance_copy_value_initialized_iterator() {\r\n    counted_iterator<int*> cit{};\r\n    (void) (cit + 1); // cannot seek value-initialized counted_iterator\r\n}\r\n\r\nvoid test_case_operator_advance_copy_after_end() {\r\n    counted_iterator<int*> cit{globalArray, 2};\r\n    (void) (cit + 3); // cannot seek counted_iterator after end\r\n}\r\n\r\nvoid test_case_operator_advance_copy_2_value_initialized_iterator() {\r\n    counted_iterator<int*> cit{};\r\n    (void) (1 + cit); // cannot seek value-initialized counted_iterator\r\n}\r\n\r\nvoid test_case_operator_advance_copy_2_after_end() {\r\n    counted_iterator<int*> cit{globalArray, 2};\r\n    (void) (3 + cit); // cannot seek counted_iterator after end\r\n}\r\n\r\nvoid test_case_operator_retreat_before_begin() {\r\n    counted_iterator<vit> cit{begin(checkedArray), 5};\r\n    cit -= 1; // cannot seek counted_iterator before begin\r\n}\r\n\r\nvoid test_case_operator_retreat_negative_after_end() {\r\n    counted_iterator<int*> cit{globalArray, 0};\r\n    cit -= -1; // cannot seek counted_iterator after end\r\n}\r\n\r\nvoid test_case_operator_retreat_copy_before_begin() {\r\n    counted_iterator<vit> cit{begin(checkedArray), 5};\r\n    (void) (cit - 1); // cannot seek counted_iterator before begin\r\n}\r\n\r\nvoid test_case_operator_retreat_copy_after_end() {\r\n    counted_iterator<int*> cit{globalArray, 0};\r\n    (void) (cit - -1); // cannot seek counted_iterator after end\r\n}\r\n\r\nvoid test_case_operator_subtract_incompatible_different_data() {\r\n    counted_iterator<int*> cit1(globalArray, 2);\r\n    counted_iterator<int*> cit2(otherArray, 2);\r\n    (void) (cit1 - cit2); // cannot subtract incompatible counted_iterators\r\n}\r\n\r\nvoid test_case_operator_subtract_incompatible_different_size() {\r\n    counted_iterator<int*> cit1(globalArray, 3);\r\n    counted_iterator<int*> cit2(globalArray, 4);\r\n    (void) (cit1 - cit2); // cannot subtract incompatible counted_iterators\r\n}\r\n\r\nvoid test_case_operator_subtract_incompatible_value_initialized() {\r\n    counted_iterator<int*> cit{globalArray, 0};\r\n    (void) (cit - counted_iterator<int*>{}); // cannot subtract incompatible counted_iterators\r\n}\r\n\r\nvoid test_case_operator_equal_incompatible_different_data() {\r\n    counted_iterator<int*> cit1(globalArray, 2);\r\n    counted_iterator<int*> cit2(otherArray, 2);\r\n    (void) (cit1 == cit2); // cannot compare incompatible counted_iterators for equality\r\n}\r\n\r\nvoid test_case_operator_equal_incompatible_different_size() {\r\n    counted_iterator<int*> cit1(globalArray, 3);\r\n    counted_iterator<int*> cit2(globalArray, 4);\r\n    (void) (cit1 == cit2); // cannot compare incompatible counted_iterators for equality\r\n}\r\n\r\nvoid test_case_operator_equal_incompatible_value_initialized() {\r\n    counted_iterator<int*> cit{globalArray, 0};\r\n    (void) (cit == counted_iterator<int*>{}); // cannot compare incompatible counted_iterators for equality\r\n}\r\n\r\nvoid test_case_operator_spaceship_incompatible_different_data() {\r\n    counted_iterator<int*> cit1(globalArray, 3);\r\n    counted_iterator<int*> cit2(otherArray, 3);\r\n    (void) (cit1 <=> cit2); // cannot compare incompatible counted_iterators\r\n}\r\n\r\nvoid test_case_operator_spaceship_incompatible_different_size() {\r\n    counted_iterator<int*> cit1(globalArray, 3);\r\n    counted_iterator<int*> cit2(globalArray, 4);\r\n    (void) (cit1 <=> cit2); // cannot compare incompatible counted_iterators\r\n}\r\n\r\nvoid test_case_operator_spaceship_incompatible_value_initialized() {\r\n    counted_iterator<int*> cit{globalArray, 0};\r\n    (void) (cit <=> counted_iterator<int*>{}); // cannot compare incompatible counted_iterators\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_case_construction_negative_length,\r\n        test_case_operator_dereference_value_initialized_iterator,\r\n        test_case_operator_dereference_end_iterator,\r\n        test_case_operator_preincrement_value_initialized_iterator,\r\n        test_case_operator_preincrement_value_initialized_input_iterator,\r\n        test_case_operator_preincrement_after_end,\r\n        test_case_operator_preincrement_after_end_input_iterator,\r\n        test_case_operator_postincrement_value_initialized_iterator,\r\n        test_case_operator_postincrement_value_initialized_input_iterator,\r\n        test_case_operator_postincrement_after_end,\r\n        test_case_operator_postincrement_after_end_input_iterator,\r\n        test_case_operator_predecrement_before_begin,\r\n        test_case_operator_decrement_before_begin,\r\n        test_case_operator_advance_value_initialized_iterator,\r\n        test_case_operator_advance_after_end,\r\n        test_case_operator_advance_copy_value_initialized_iterator,\r\n        test_case_operator_advance_copy_after_end,\r\n        test_case_operator_advance_copy_2_value_initialized_iterator,\r\n        test_case_operator_advance_copy_2_after_end,\r\n        test_case_operator_retreat_before_begin,\r\n        test_case_operator_retreat_negative_after_end,\r\n        test_case_operator_retreat_copy_before_begin,\r\n        test_case_operator_retreat_copy_after_end,\r\n#ifndef _M_CEE // TRANSITION, VSO-1665606\r\n        test_case_operator_subtract_incompatible_different_data,\r\n        test_case_operator_subtract_incompatible_different_size,\r\n        test_case_operator_subtract_incompatible_value_initialized,\r\n        test_case_operator_equal_incompatible_different_data,\r\n        test_case_operator_equal_incompatible_different_size,\r\n        test_case_operator_equal_incompatible_value_initialized,\r\n        test_case_operator_spaceship_incompatible_different_data,\r\n        test_case_operator_spaceship_incompatible_different_size,\r\n        test_case_operator_spaceship_incompatible_value_initialized,\r\n#endif // ^^^ no workaround ^^^\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_istream_view/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_istream_view/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <iostream>\r\n#include <ranges>\r\n#include <sstream>\r\n#include <type_traits>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nconstexpr int expected_empty[] = {-1, -1, -1, -1, -1};\r\nconstexpr int expected_vals[]  = {0, 1, 2, 3, -1};\r\n\r\nstruct streamable {\r\n    streamable() = default;\r\n    streamable(const int input) : _val(input) {}\r\n\r\n    template <class CharT, class Traits>\r\n    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is, streamable& right) noexcept {\r\n        is >> right._val;\r\n        return is;\r\n    }\r\n\r\n    friend bool operator==(const streamable&, const streamable&) noexcept = default;\r\n\r\n    int _val = 0;\r\n};\r\n\r\ntemplate <class T>\r\nvoid test_one_type() {\r\n    using ranges::basic_istream_view;\r\n\r\n    // validate type properties\r\n    using R = basic_istream_view<T, char>;\r\n    static_assert(ranges::view<R>);\r\n    static_assert(ranges::input_range<R>);\r\n    static_assert(!ranges::forward_range<R>);\r\n\r\n    static_assert(!ranges::sized_range<R>);\r\n    static_assert(!ranges::common_range<R>);\r\n\r\n    // validate constructors\r\n    istringstream nonempty_stream{\"0\"};\r\n    istringstream empty_intstream{};\r\n    R empty_constructed{empty_intstream};\r\n    R non_empty_constructed{nonempty_stream};\r\n\r\n    static_assert(is_nothrow_constructible_v<R, istream&> == is_nothrow_default_constructible_v<T>);\r\n\r\n    // validate member begin\r\n    // NOTE: begin() consumes the first token\r\n    assert(empty_constructed.begin() == default_sentinel);\r\n    assert(non_empty_constructed.begin() != default_sentinel);\r\n\r\n    // validate member end\r\n    static_assert(same_as<decltype(empty_constructed.end()), default_sentinel_t>);\r\n    static_assert(noexcept(empty_constructed.end()));\r\n    static_assert(noexcept(ranges::end(empty_constructed)));\r\n\r\n    // Nonexistent member functions\r\n    static_assert(!CanMemberSize<R>);\r\n    static_assert(!CanMemberData<R>);\r\n    static_assert(!CanMemberEmpty<R>);\r\n    static_assert(!CanMemberFront<R>);\r\n    static_assert(!CanMemberBack<R>);\r\n\r\n    // Some basic tests\r\n    T input_empty[] = {-1, -1, -1, -1, -1};\r\n    ranges::copy(empty_constructed, input_empty);\r\n    assert(ranges::equal(input_empty, expected_empty));\r\n\r\n    { // using ranges::basic_istream_view with wide stream\r\n        wistringstream wintstream{L\"0 1 2 3\"};\r\n        T input_value[] = {-1, -1, -1, -1, -1};\r\n        ranges::copy(basic_istream_view<T, wchar_t>{wintstream}, input_value);\r\n        assert(ranges::equal(input_value, expected_vals));\r\n    }\r\n\r\n    { // using ranges::basic_istream_view with narrow stream\r\n        istringstream intstream{\"0 1 2 3\"};\r\n        T input_value[] = {-1, -1, -1, -1, -1};\r\n        ranges::copy(basic_istream_view<T, char>{intstream}, input_value);\r\n        assert(ranges::equal(input_value, expected_vals));\r\n    }\r\n\r\n    { // Using ranges::istream_view\r\n        istringstream intstream{\"0 1 2 3\"};\r\n        T input[] = {-1, -1, -1, -1, -1};\r\n        ranges::copy(ranges::istream_view<T>(intstream), input);\r\n        static_assert(noexcept(ranges::istream_view<T>(intstream)));\r\n        assert(ranges::equal(input, expected_vals));\r\n    }\r\n\r\n    { // Using ranges::wistream_view\r\n        wistringstream wintstream{L\"0 1 2 3\"};\r\n        T input[] = {-1, -1, -1, -1, -1};\r\n        ranges::copy(ranges::wistream_view<T>(wintstream), input);\r\n        static_assert(noexcept(ranges::wistream_view<T>(wintstream)));\r\n        assert(ranges::equal(input, expected_vals));\r\n    }\r\n\r\n    { // Using views::istream with narrow stream\r\n        istringstream intstream{\"0 1 2 3\"};\r\n        T input[] = {-1, -1, -1, -1, -1};\r\n        ranges::copy(views::istream<T>(intstream), input);\r\n        static_assert(noexcept(views::istream<T>(intstream)));\r\n        assert(ranges::equal(input, expected_vals));\r\n    }\r\n\r\n    { // Using views::istream with wide stream\r\n        wistringstream wintstream{L\"0 1 2 3\"};\r\n        T input[] = {-1, -1, -1, -1, -1};\r\n        ranges::copy(views::istream<T>(wintstream), input);\r\n        static_assert(noexcept(views::istream<T>(wintstream)));\r\n        assert(ranges::equal(input, expected_vals));\r\n    }\r\n#if _HAS_CXX23\r\n    { // Using ranges::istream_view with const iterators\r\n        istringstream intstream{\"0 1 2 3\"};\r\n        T input[] = {-1, -1, -1, -1, -1};\r\n        ranges::istream_view<T> v(intstream);\r\n        ranges::copy(v.cbegin(), v.cend(), input);\r\n        assert(ranges::equal(input, expected_vals));\r\n    }\r\n\r\n    { // Using ranges::wistream_view with const iterators\r\n        wistringstream wintstream{L\"0 1 2 3\"};\r\n        T input[] = {-1, -1, -1, -1, -1};\r\n        ranges::wistream_view<T> v(wintstream);\r\n        ranges::copy(v.cbegin(), v.cend(), input);\r\n        assert(ranges::equal(input, expected_vals));\r\n    }\r\n#endif // _HAS_CXX23\r\n}\r\n\r\nistringstream some_stream{\"42\"};\r\nconstexpr bool test_constexpr() {\r\n    // stream constructor is constexpr\r\n    ranges::basic_istream_view<int, char> meow{some_stream};\r\n\r\n    // begin is constexpr, but realistically unusable in a constant expression\r\n\r\n    // end is constexpr\r\n    (void) meow.end();\r\n\r\n    return true;\r\n}\r\n\r\n// Negative test cases\r\nstruct not_streamable {};\r\nstatic_assert(!invocable<decltype(views::istream<not_streamable>), istream&>);\r\nstatic_assert(!invocable<decltype(views::istream<int>), const istream&>);\r\nstatic_assert(!invocable<decltype(views::istream<int>), volatile istream&>);\r\nstatic_assert(!invocable<decltype(views::istream<int>), const volatile istream&>);\r\nstatic_assert(invocable<decltype(views::istream<int>), istream> == is_permissive);\r\nstatic_assert(!invocable<decltype(views::istream<int>), const istream>);\r\nstatic_assert(!invocable<decltype(views::istream<int>), volatile istream>);\r\nstatic_assert(!invocable<decltype(views::istream<int>), const volatile istream>);\r\nstatic_assert(!invocable<decltype(views::istream<int>), int&>);\r\nstatic_assert(!invocable<decltype(views::istream<int>), int>);\r\n\r\nint main() {\r\n    test_one_type<int>();\r\n    test_one_type<streamable>();\r\n\r\n    static_assert(test_constexpr());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_istream_view_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_istream_view_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <ranges>\r\n#include <sstream>\r\n\r\n#include <test_death.hpp>\r\nusing namespace std;\r\n\r\nusing iview = ranges::basic_istream_view<int, char>;\r\n\r\nvoid test_preincrement_end_of_stream() {\r\n    istringstream stream;\r\n    iview view{stream};\r\n    auto it = view.begin();\r\n    (void) ++it;\r\n}\r\n\r\nvoid test_postincrement_end_of_stream() {\r\n    istringstream stream;\r\n    iview view{stream};\r\n    auto it = view.begin();\r\n    (void) it++;\r\n}\r\n\r\nvoid test_dereference_end_of_stream() {\r\n    istringstream stream;\r\n    iview view{stream};\r\n    auto it = view.begin();\r\n    (void) *it;\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_preincrement_end_of_stream,\r\n        test_postincrement_end_of_stream,\r\n        test_dereference_end_of_stream,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_adjacent_find/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_adjacent_find/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nconstexpr void smoke_test() {\r\n    using ranges::adjacent_find, ranges::iterator_t, std::same_as;\r\n    using P = std::pair<int, int>;\r\n\r\n    // Validate dangling story\r\n    static_assert(same_as<decltype(adjacent_find(borrowed<false>{}, ranges::equal_to{})), ranges::dangling>);\r\n    static_assert(same_as<decltype(adjacent_find(borrowed<true>{}, ranges::equal_to{})), int*>);\r\n\r\n    const std::array pairs = {P{0, 42}, P{1, 42}, P{2, 42}, P{4, 42}, P{5, 42}};\r\n    const auto pred        = [](const int x, const int y) { return y - x > 1; };\r\n\r\n    {\r\n        // Validate range overload [found case]\r\n        const auto result = adjacent_find(pairs, pred, get_first);\r\n        static_assert(same_as<decltype(result), const iterator_t<decltype(pairs)>>);\r\n        assert(result == pairs.begin() + 2);\r\n    }\r\n    {\r\n        // Validate iterator + sentinel overload [found case]\r\n        const auto result = adjacent_find(pairs.begin(), pairs.end(), pred, get_first);\r\n        static_assert(same_as<decltype(result), const iterator_t<decltype(pairs)>>);\r\n        assert(result == pairs.begin() + 2);\r\n    }\r\n    {\r\n        // Validate range overload [not found case]\r\n        const auto result = adjacent_find(pairs, ranges::equal_to{}, get_first);\r\n        static_assert(same_as<decltype(result), const iterator_t<decltype(pairs)>>);\r\n        assert(result == pairs.end());\r\n    }\r\n    {\r\n        // Validate iterator + sentinel overload [not found case]\r\n        const auto result = adjacent_find(pairs.begin(), pairs.end(), ranges::equal_to{}, get_first);\r\n        static_assert(same_as<decltype(result), const iterator_t<decltype(pairs)>>);\r\n        assert(result == pairs.end());\r\n    }\r\n}\r\n\r\nint main() {\r\n    static_assert((smoke_test(), true));\r\n    smoke_test();\r\n}\r\n\r\nstruct instantiator {\r\n    static constexpr int some_ints[] = {1, 2, 3};\r\n    template <class Fwd>\r\n    static void call() {\r\n        Fwd fwd{std::span{some_ints}};\r\n        using ranges::adjacent_find, ranges::iterator_t;\r\n\r\n        (void) adjacent_find(fwd);\r\n        (void) adjacent_find(begin(fwd), end(fwd));\r\n\r\n        BinaryPredicateFor<iterator_t<Fwd>, iterator_t<Fwd>> pred{};\r\n        (void) adjacent_find(fwd, pred);\r\n        (void) adjacent_find(begin(fwd), end(fwd), pred);\r\n\r\n        ProjectedBinaryPredicate<0, 0> projpred{};\r\n        ProjectionFor<iterator_t<Fwd>, 0> proj{};\r\n        (void) adjacent_find(fwd, projpred, proj);\r\n        (void) adjacent_find(begin(fwd), end(fwd), projpred, proj);\r\n    }\r\n};\r\n\r\ntemplate void test_fwd<instantiator, const int>();\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_all_of/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_all_of/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto is_even = [](auto const& x) { return x % 2 == 0; };\r\nconstexpr auto is_odd  = [](auto const& x) { return x % 2 != 0; };\r\n\r\nstruct instantiator {\r\n    static constexpr P input[3] = {{0, 13}, {2, 13}, {4, 13}};\r\n\r\n    template <ranges::input_range Read>\r\n    static constexpr void call() {\r\n        using ranges::all_of;\r\n        { // Validate iterator + sentinel overload\r\n            Read wrapped_input1{input};\r\n            Read wrapped_input2{input};\r\n            Read wrapped_input3{input};\r\n            Read wrapped_input4{input};\r\n\r\n            auto result = all_of(wrapped_input1.begin(), wrapped_input1.end(), is_even, get_first);\r\n            static_assert(same_as<decltype(result), bool>);\r\n            assert(result);\r\n            assert(!all_of(wrapped_input2.begin(), wrapped_input2.end(), is_even, get_second));\r\n            assert(!all_of(wrapped_input3.begin(), wrapped_input3.end(), is_odd, get_first));\r\n            assert(all_of(wrapped_input4.begin(), wrapped_input4.end(), is_odd, get_second));\r\n        }\r\n        { // Validate range overload\r\n            Read wrapped_input1{input};\r\n            Read wrapped_input2{input};\r\n            Read wrapped_input3{input};\r\n            Read wrapped_input4{input};\r\n\r\n            auto result = all_of(wrapped_input1, is_even, get_first);\r\n            static_assert(same_as<decltype(result), bool>);\r\n            assert(result);\r\n            assert(!all_of(wrapped_input2, is_even, get_second));\r\n            assert(!all_of(wrapped_input3, is_odd, get_first));\r\n            assert(all_of(wrapped_input4, is_odd, get_second));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_in<instantiator, const P>(), true));\r\n    test_in<instantiator, const P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_any_of/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_any_of/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto is_even = [](auto const& x) { return x % 2 == 0; };\r\nconstexpr auto is_odd  = [](auto const& x) { return x % 2 != 0; };\r\n\r\nstruct instantiator {\r\n    static constexpr P input[3] = {{0, 13}, {7, 13}, {4, 13}};\r\n\r\n    template <ranges::input_range Read>\r\n    static constexpr void call() {\r\n        using ranges::any_of;\r\n        { // Validate iterator + sentinel overload\r\n            Read wrapped_input1{input};\r\n            Read wrapped_input2{input};\r\n            Read wrapped_input3{input};\r\n            Read wrapped_input4{input};\r\n\r\n            auto result = any_of(wrapped_input1.begin(), wrapped_input1.end(), is_even, get_first);\r\n            static_assert(same_as<decltype(result), bool>);\r\n            assert(result);\r\n            assert(!any_of(wrapped_input2.begin(), wrapped_input2.end(), is_even, get_second));\r\n            assert(any_of(wrapped_input3.begin(), wrapped_input3.end(), is_odd, get_first));\r\n            assert(any_of(wrapped_input4.begin(), wrapped_input4.end(), is_odd, get_second));\r\n        }\r\n        { // Validate range overload\r\n            Read wrapped_input1{input};\r\n            Read wrapped_input2{input};\r\n            Read wrapped_input3{input};\r\n            Read wrapped_input4{input};\r\n\r\n            auto result = any_of(wrapped_input1, is_even, get_first);\r\n            static_assert(same_as<decltype(result), bool>);\r\n            assert(result);\r\n            assert(!any_of(wrapped_input2, is_even, get_second));\r\n            assert(any_of(wrapped_input3, is_odd, get_first));\r\n            assert(any_of(wrapped_input4, is_odd, get_second));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_in<instantiator, const P>(), true));\r\n    test_in<instantiator, const P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_binary_search/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_binary_search/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Covers ranges::lower_bound, ranges::upper_bound, ranges::equal_range, and ranges::binary_search\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n#define ASSERT(...) assert((__VA_ARGS__))\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::lower_bound(borrowed<false>{}, 42)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::lower_bound(borrowed<true>{}, 42)), int*>);\r\nstatic_assert(same_as<decltype(ranges::upper_bound(borrowed<false>{}, 42)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::upper_bound(borrowed<true>{}, 42)), int*>);\r\nstatic_assert(same_as<decltype(ranges::equal_range(borrowed<false>{}, 42)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::equal_range(borrowed<true>{}, 42)), ranges::subrange<int*>>);\r\n\r\nusing P = pair<int, int>;\r\n\r\nstruct empty_ranges {\r\n    template <ranges::forward_range Fwd>\r\n    static constexpr void call() {\r\n        // Validate empty ranges\r\n        const Fwd range{span<P, 0>{}};\r\n\r\n        ASSERT(ranges::lower_bound(range, 42, ranges::less{}, get_first) == ranges::end(range));\r\n        ASSERT(ranges::lower_bound(ranges::begin(range), ranges::end(range), 42, ranges::less{}, get_first)\r\n               == ranges::end(range));\r\n\r\n        ASSERT(ranges::upper_bound(range, 42, ranges::less{}, get_first) == ranges::end(range));\r\n        ASSERT(ranges::upper_bound(ranges::begin(range), ranges::end(range), 42, ranges::less{}, get_first)\r\n               == ranges::end(range));\r\n\r\n        {\r\n            auto result = ranges::equal_range(range, 42, ranges::less{}, get_first);\r\n            ASSERT(result.begin() == ranges::end(range));\r\n            ASSERT(result.end() == ranges::end(range));\r\n        }\r\n        {\r\n            auto result = ranges::equal_range(ranges::begin(range), ranges::end(range), 42, ranges::less{}, get_first);\r\n            ASSERT(result.begin() == ranges::end(range));\r\n            ASSERT(result.end() == ranges::end(range));\r\n        }\r\n\r\n        ASSERT(!ranges::binary_search(range, 42, ranges::less{}, get_first));\r\n        ASSERT(!ranges::binary_search(ranges::begin(range), ranges::end(range), 42, ranges::less{}, get_first));\r\n    }\r\n};\r\n\r\nstatic constexpr array<P, 10> pairs = {\r\n    P{0, 100}, P{1, 90}, P{2, 80}, P{3, 70}, P{3, 60}, P{3, 50}, P{4, 40}, P{5, 30}, P{6, 20}, P{7, 10}};\r\n\r\nstruct lower_bound_instantiator {\r\n    template <ranges::forward_range Fwd>\r\n    static constexpr void call() {\r\n        const Fwd range{pairs};\r\n\r\n        ASSERT(ranges::lower_bound(range, -1, ranges::less{}, get_first) == ranges::begin(range));\r\n        ASSERT(ranges::lower_bound(ranges::begin(range), ranges::end(range), -1, ranges::less{}, get_first)\r\n               == ranges::begin(range));\r\n\r\n        for (int i = 0; i < 8; ++i) {\r\n            const P* const target = pairs.data() + i + (i > 3 ? 2 : 0);\r\n            ASSERT(ranges::lower_bound(range, i, ranges::less{}, get_first).peek() == target);\r\n            ASSERT(ranges::lower_bound(ranges::begin(range), ranges::end(range), i, ranges::less{}, get_first).peek()\r\n                   == target);\r\n        }\r\n\r\n        ASSERT(ranges::lower_bound(range, 8, ranges::less{}, get_first) == ranges::end(range));\r\n        ASSERT(ranges::lower_bound(ranges::begin(range), ranges::end(range), 8, ranges::less{}, get_first)\r\n               == ranges::end(range));\r\n    }\r\n};\r\n\r\nstruct upper_bound_instantiator {\r\n    template <ranges::forward_range Fwd>\r\n    static constexpr void call() {\r\n        const Fwd range{pairs};\r\n\r\n        ASSERT(ranges::upper_bound(range, -1, ranges::less{}, get_first) == ranges::begin(range));\r\n        ASSERT(ranges::upper_bound(ranges::begin(range), ranges::end(range), -1, ranges::less{}, get_first)\r\n               == ranges::begin(range));\r\n\r\n        for (int i = 0; i < 8; ++i) {\r\n            const P* const target = pairs.data() + i + 1 + (i >= 3 ? 2 : 0);\r\n\r\n            ASSERT(ranges::upper_bound(range, i, ranges::less{}, get_first).peek() == target);\r\n            ASSERT(ranges::upper_bound(ranges::begin(range), ranges::end(range), i, ranges::less{}, get_first).peek()\r\n                   == target);\r\n        }\r\n\r\n        ASSERT(ranges::upper_bound(range, 8, ranges::less{}, get_first) == ranges::end(range));\r\n        ASSERT(ranges::upper_bound(ranges::begin(range), ranges::end(range), 8, ranges::less{}, get_first)\r\n               == ranges::end(range));\r\n    }\r\n};\r\n\r\nstruct equal_range_instantiator {\r\n    template <ranges::forward_range Fwd>\r\n    static constexpr void call() {\r\n        const Fwd range{pairs};\r\n\r\n        {\r\n            auto result = ranges::equal_range(range, -1, ranges::less{}, get_first);\r\n            ASSERT(result.begin() == ranges::begin(range));\r\n            ASSERT(result.end() == ranges::begin(range));\r\n        }\r\n        {\r\n            auto result = ranges::equal_range(ranges::begin(range), ranges::end(range), -1, ranges::less{}, get_first);\r\n            ASSERT(result.begin() == ranges::begin(range));\r\n            ASSERT(result.end() == ranges::begin(range));\r\n        }\r\n\r\n        for (int i = 0; i < 8; ++i) {\r\n            const P* const lo = pairs.data() + i + (i > 3 ? 2 : 0);\r\n            const P* const hi = pairs.data() + i + 1 + (i >= 3 ? 2 : 0);\r\n\r\n            {\r\n                auto result = ranges::equal_range(range, i, ranges::less{}, get_first);\r\n                ASSERT(result.begin().peek() == lo);\r\n                ASSERT(result.end().peek() == hi);\r\n            }\r\n            {\r\n                auto result =\r\n                    ranges::equal_range(ranges::begin(range), ranges::end(range), i, ranges::less{}, get_first);\r\n                ASSERT(result.begin().peek() == lo);\r\n                ASSERT(result.end().peek() == hi);\r\n            }\r\n        }\r\n\r\n        {\r\n            auto result = ranges::equal_range(range, 8, ranges::less{}, get_first);\r\n            ASSERT(result.begin() == ranges::end(range));\r\n            ASSERT(result.end() == ranges::end(range));\r\n        }\r\n        {\r\n            auto result = ranges::equal_range(ranges::begin(range), ranges::end(range), 8, ranges::less{}, get_first);\r\n            ASSERT(result.begin() == ranges::end(range));\r\n            ASSERT(result.end() == ranges::end(range));\r\n        }\r\n    }\r\n};\r\n\r\nstruct binary_search_instantiator {\r\n    template <ranges::forward_range Fwd>\r\n    static constexpr void call() {\r\n        const Fwd range{pairs};\r\n\r\n        ASSERT(!ranges::binary_search(range, -1, ranges::less{}, get_first));\r\n        ASSERT(!ranges::binary_search(ranges::begin(range), ranges::end(range), -1, ranges::less{}, get_first));\r\n\r\n        for (int i = 0; i < 8; ++i) {\r\n            ASSERT(ranges::binary_search(range, i, ranges::less{}, get_first));\r\n            ASSERT(ranges::binary_search(ranges::begin(range), ranges::end(range), i, ranges::less{}, get_first));\r\n        }\r\n\r\n        ASSERT(!ranges::binary_search(range, 8, ranges::less{}, get_first));\r\n        ASSERT(!ranges::binary_search(ranges::begin(range), ranges::end(range), 8, ranges::less{}, get_first));\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_fwd<empty_ranges, const P>(), true));\r\n    test_fwd<empty_ranges, const P>();\r\n\r\n    static_assert((test_fwd<lower_bound_instantiator, const P>(), true));\r\n    test_fwd<lower_bound_instantiator, const P>();\r\n\r\n    static_assert((test_fwd<upper_bound_instantiator, const P>(), true));\r\n    test_fwd<upper_bound_instantiator, const P>();\r\n\r\n    static_assert((test_fwd<equal_range_instantiator, const P>(), true));\r\n    test_fwd<equal_range_instantiator, const P>();\r\n\r\n    static_assert((test_fwd<binary_search_instantiator, const P>(), true));\r\n    test_fwd<binary_search_instantiator, const P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_copy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_copy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate that copy_result aliases in_out_result\r\nstatic_assert(same_as<ranges::copy_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(\r\n    same_as<decltype(ranges::copy(borrowed<false>{}, nullptr_to<int>)), ranges::copy_result<ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::copy(borrowed<true>{}, nullptr_to<int>)), ranges::copy_result<int*, int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr int input[3] = {13, 42, 1729};\r\n\r\n    template <ranges::input_range Read, indirectly_writable<ranges::range_reference_t<Read>> Write>\r\n    static constexpr void call() {\r\n        using ranges::copy, ranges::copy_result, ranges::iterator_t;\r\n        { // Validate iterator + sentinel overload\r\n            int output[3] = {-1, -1, -1};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = copy(wrapped_input.begin(), wrapped_input.end(), Write{output});\r\n            static_assert(same_as<decltype(result), copy_result<iterator_t<Read>, Write>>);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == output + 3);\r\n            assert(ranges::equal(output, input));\r\n        }\r\n        { // Validate range overload\r\n            int output[3] = {-1, -1, -1};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = copy(wrapped_input, Write{output});\r\n            static_assert(same_as<decltype(result), copy_result<iterator_t<Read>, Write>>);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == output + 3);\r\n            assert(ranges::equal(output, input));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n#ifndef _PREFAST_ // TRANSITION, GH-1030\r\n    static_assert((test_in_write<instantiator, int const, int>(), true));\r\n#endif\r\n    test_in_write<instantiator, int const, int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_copy_backward/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_copy_backward/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate that copy_backward_result aliases in_out_result\r\nstatic_assert(same_as<ranges::copy_backward_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::copy_backward(borrowed<false>{}, static_cast<int*>(nullptr))),\r\n    ranges::copy_backward_result<ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::copy_backward(borrowed<true>{}, static_cast<int*>(nullptr))),\r\n    ranges::copy_backward_result<int*, int*>>);\r\n\r\nstatic constexpr int input[]                = {13, 42, 1729};\r\nstatic constexpr int expected_overlapping[] = {0, 0, 1, 2};\r\n\r\nstruct instantiator {\r\n    template <class Bidi1, class Bidi2>\r\n    static constexpr void call() {\r\n        // For the second range, we need an iterator to the end; it's expedient to simply ignore ranges with differing\r\n        // iterator and sentinel types (i.e., ranges that don't satisfy common_range).\r\n        if constexpr (ranges::common_range<Bidi2>) {\r\n            using ranges::copy_backward, ranges::copy_backward_result, ranges::equal, ranges::iterator_t;\r\n            const Bidi1 wrapped_input{input};\r\n\r\n            { // Validate range overload\r\n                int output[] = {-2, -2, -2};\r\n                Bidi2 wrapped_output{output};\r\n                auto result = copy_backward(wrapped_input, wrapped_output.end());\r\n                static_assert(same_as<decltype(result), copy_backward_result<iterator_t<Bidi1>, iterator_t<Bidi2>>>);\r\n                assert(result.in == wrapped_input.end());\r\n                assert(result.out == wrapped_output.begin());\r\n                assert(equal(output, input));\r\n            }\r\n            { // Validate iterator + sentinel overload\r\n                int output[] = {-2, -2, -2};\r\n                Bidi2 wrapped_output{output};\r\n                auto result = copy_backward(wrapped_input.begin(), wrapped_input.end(), wrapped_output.end());\r\n                static_assert(same_as<decltype(result), copy_backward_result<iterator_t<Bidi1>, iterator_t<Bidi2>>>);\r\n                assert(result.in == wrapped_input.end());\r\n                assert(result.out == wrapped_output.begin());\r\n                assert(equal(output, input));\r\n            }\r\n            { // Validate overlapping ranges\r\n                int io[] = {0, 1, 2, 42};\r\n                Bidi1 in{span{io}.first<3>()};\r\n                Bidi2 out{span{io}.last<3>()};\r\n                auto result = copy_backward(in, out.end());\r\n                static_assert(same_as<decltype(result), copy_backward_result<iterator_t<Bidi1>, iterator_t<Bidi2>>>);\r\n                assert(result.in == in.end());\r\n                assert(result.out == out.begin());\r\n                assert(equal(io, expected_overlapping));\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nconstexpr void test_memmove() {\r\n    // Get some coverage for the memmove optimization, which we would not otherwise have since we do not currently\r\n    // unwrap output iterators. TRANSITION, GH-893\r\n    using ranges::copy_backward, ranges::copy_backward_result, ranges::begin, ranges::end, ranges::equal;\r\n\r\n    { // Validate range overload\r\n        int output[] = {-2, -2, -2};\r\n        auto result  = copy_backward(input, end(output));\r\n        static_assert(same_as<decltype(result), copy_backward_result<const int*, int*>>);\r\n        assert(result.in == end(input));\r\n        assert(result.out == begin(output));\r\n        assert(equal(output, input));\r\n    }\r\n    { // Validate iterator + sentinel overload\r\n        int output[] = {-2, -2, -2};\r\n        auto result  = copy_backward(begin(input), end(input), end(output));\r\n        static_assert(same_as<decltype(result), copy_backward_result<const int*, int*>>);\r\n        assert(result.in == end(input));\r\n        assert(result.out == begin(output));\r\n        assert(equal(output, input));\r\n    }\r\n    { // Validate overlapping ranges\r\n        int io[]    = {0, 1, 2, 42};\r\n        auto result = copy_backward(io + 0, io + 3, io + 4);\r\n        static_assert(same_as<decltype(result), copy_backward_result<int*, int*>>);\r\n        assert(result.in == io + 3);\r\n        assert(result.out == io + 1);\r\n        assert(equal(io, expected_overlapping));\r\n    }\r\n}\r\n\r\nint main() {\r\n    static_assert((test_bidi_bidi<instantiator, const int, int>(), true));\r\n    test_bidi_bidi<instantiator, const int, int>();\r\n\r\n    static_assert((test_memmove(), true));\r\n    test_memmove();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_copy_if/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_copy_if/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <compare>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\ntemplate <class T, class U>\r\nstruct not_pair {\r\n    T first;\r\n    U second;\r\n\r\n    auto operator<=>(not_pair const&) const = default;\r\n\r\n    template <size_t I>\r\n    friend constexpr auto&& get(not_pair& np) noexcept {\r\n        if constexpr (I == 0) {\r\n            return np.first;\r\n        } else {\r\n            static_assert(I == 1);\r\n            return np.second;\r\n        }\r\n    }\r\n    template <size_t I>\r\n    friend constexpr auto&& get(not_pair const& np) noexcept {\r\n        if constexpr (I == 0) {\r\n            return np.first;\r\n        } else {\r\n            static_assert(I == 1);\r\n            return np.second;\r\n        }\r\n    }\r\n    template <size_t I>\r\n    friend constexpr auto&& get(not_pair&& np) noexcept {\r\n        if constexpr (I == 0) {\r\n            return move(np).first;\r\n        } else {\r\n            static_assert(I == 1);\r\n            return move(np).second;\r\n        }\r\n    }\r\n    template <size_t I>\r\n    friend constexpr auto&& get(not_pair const&& np) noexcept {\r\n        if constexpr (I == 0) {\r\n            return move(np).first;\r\n        } else {\r\n            static_assert(I == 1);\r\n            return move(np).second;\r\n        }\r\n    }\r\n};\r\n\r\nusing P = not_pair<int, int>;\r\n\r\nconstexpr auto is_odd = [](int const x) { return x % 2 != 0; };\r\n\r\n// Validate that copy_if_result aliases in_out_result\r\nstatic_assert(same_as<ranges::copy_if_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::copy_if(borrowed<false>{}, nullptr_to<int>, is_odd)),\r\n    ranges::copy_if_result<ranges::dangling, int*>>);\r\nstatic_assert(\r\n    same_as<decltype(ranges::copy_if(borrowed<true>{}, nullptr_to<int>, is_odd)), ranges::copy_if_result<int*, int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr P input[3]    = {{1, 99}, {4, 98}, {5, 97}};\r\n    static constexpr P expected[2] = {{1, 99}, {5, 97}};\r\n\r\n    template <ranges::input_range Read, indirectly_writable<ranges::range_reference_t<Read>> Write>\r\n    static constexpr void call() {\r\n        using ranges::copy_if, ranges::copy_if_result, ranges::iterator_t;\r\n        { // Validate range overload\r\n            array<P, 2> output = {{{-1, -1}, {-1, -1}}};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = copy_if(wrapped_input, Write{output.data()}, is_odd, get_first);\r\n            static_assert(same_as<decltype(result), copy_if_result<iterator_t<Read>, Write>>);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == output.data() + 2);\r\n            assert(ranges::equal(output, expected));\r\n        }\r\n        { // Validate iterator + sentinel overload\r\n            array<P, 2> output = {{{-1, -1}, {-1, -1}}};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = copy_if(wrapped_input.begin(), wrapped_input.end(), Write{output.data()}, is_odd, get_first);\r\n            static_assert(same_as<decltype(result), copy_if_result<iterator_t<Read>, Write>>);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == output.data() + 2);\r\n            assert(ranges::equal(output, expected));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n#ifndef _PREFAST_ // TRANSITION, GH-1030\r\n    static_assert((test_in_write<instantiator, P const, P>(), true));\r\n#endif // TRANSITION, GH-1030\r\n    test_in_write<instantiator, P const, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_copy_n/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_copy_n/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate that copy_n_result aliases in_out_result\r\nstatic_assert(same_as<ranges::copy_n_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\nstruct instantiator {\r\n    static constexpr int input[3] = {13, 42, 1729};\r\n\r\n    template <ranges::input_range Read, indirectly_writable<ranges::range_reference_t<Read>> Write>\r\n    static constexpr void call() {\r\n        using ranges::copy_n, ranges::copy_n_result, ranges::iterator_t;\r\n        int output[3] = {-1, -1, -1};\r\n        Read wrapped_input{input};\r\n\r\n        auto result = copy_n(wrapped_input.begin(), 3, Write{output});\r\n        static_assert(same_as<decltype(result), copy_n_result<iterator_t<Read>, Write>>);\r\n        assert(result.in == wrapped_input.end());\r\n        assert(result.out.peek() == output + 3);\r\n        assert(ranges::equal(output, input));\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_in_write<instantiator, const int, int>(), true));\r\n    test_in_write<instantiator, const int, int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_count/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_count/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nstruct instantiator {\r\n    static constexpr P input[5] = {{0, 99}, {1, 47}, {2, 99}, {3, 47}, {4, 99}};\r\n\r\n    template <ranges::input_range Read>\r\n    static constexpr void call() {\r\n        using ranges::count;\r\n        { // Validate iterator + sentinel overload\r\n            Read wrapped_input{input};\r\n\r\n            auto result = count(wrapped_input.begin(), wrapped_input.end(), 47, get_second);\r\n            static_assert(same_as<decltype(result), ranges::range_difference_t<Read>>);\r\n            assert(result == 2);\r\n        }\r\n        { // Validate range overload\r\n            Read wrapped_input{input};\r\n\r\n            auto result = count(wrapped_input, 99, get_second);\r\n            static_assert(same_as<decltype(result), ranges::range_difference_t<Read>>);\r\n            assert(result == 3);\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_in<instantiator, P const>(), true));\r\n    test_in<instantiator, P const>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_count_if/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_count_if/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nconstexpr auto is_even = [](auto const& x) { return x % 2 == 0; };\r\nconstexpr auto is_odd  = [](auto const& x) { return x % 2 != 0; };\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nstruct instantiator {\r\n    static constexpr P input[5] = {{0, 47}, {1, 99}, {2, 99}, {3, 47}, {4, 99}};\r\n\r\n    template <ranges::input_range Read>\r\n    static constexpr void call() {\r\n        using ranges::count_if;\r\n        { // Validate iterator + sentinel overload\r\n            Read wrapped_input{input};\r\n\r\n            auto result = count_if(wrapped_input.begin(), wrapped_input.end(), is_odd, get_first);\r\n            static_assert(same_as<decltype(result), ranges::range_difference_t<Read>>);\r\n            assert(result == 2);\r\n        }\r\n        { // Validate range overload\r\n            Read wrapped_input{input};\r\n\r\n            auto result = count_if(wrapped_input, is_even, get_first);\r\n            static_assert(same_as<decltype(result), ranges::range_difference_t<Read>>);\r\n            assert(result == 3);\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_in<instantiator, P const>(), true));\r\n    test_in<instantiator, P const>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_equal/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_equal/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstdlib>\r\n#include <ranges>\r\n#include <span>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nconstexpr void smoke_test() {\r\n    using ranges::equal, ranges::equal_to, ranges::begin, ranges::end;\r\n    using std::abort, std::array, std::pair, std::same_as, std::unreachable_sentinel;\r\n\r\n    array<pair<int, int>, 3> const x   = {{{0, 42}, {2, 42}, {4, 42}}};\r\n    array<pair<long, long>, 3> const y = {{{13, -1}, {13, 1}, {13, 3}}};\r\n\r\n    constexpr auto cmp = [](auto&& x, auto&& y) { return x == y + 1; };\r\n\r\n    {\r\n        // Validate sized ranges\r\n        auto result = equal(x, y, cmp, get_first, get_second);\r\n        static_assert(same_as<decltype(result), bool>);\r\n        assert(result);\r\n        assert(!equal(x, y, cmp, get_first, get_first));\r\n    }\r\n    {\r\n        // Validate non-sized ranges\r\n        auto result = equal(basic_borrowed_range{x}, basic_borrowed_range{y}, cmp, get_first, get_second);\r\n        static_assert(same_as<decltype(result), bool>);\r\n        assert(result);\r\n        assert(!equal(basic_borrowed_range{x}, basic_borrowed_range{y}, cmp, get_first, get_first));\r\n    }\r\n    {\r\n        // Validate sized iterator + sentinel pairs\r\n        auto result = equal(x.begin(), x.end(), y.begin(), y.end(), cmp, get_first, get_second);\r\n        static_assert(same_as<decltype(result), bool>);\r\n        assert(result);\r\n        assert(!equal(x.begin(), x.end(), y.begin(), y.end(), cmp, get_first, get_first));\r\n    }\r\n    {\r\n        // Validate non-sized iterator + sentinel pairs\r\n        basic_borrowed_range wrapped_x{x};\r\n        basic_borrowed_range wrapped_y{y};\r\n        auto result =\r\n            equal(wrapped_x.begin(), wrapped_x.end(), wrapped_y.begin(), wrapped_y.end(), cmp, get_first, get_second);\r\n        static_assert(same_as<decltype(result), bool>);\r\n        assert(result);\r\n    }\r\n    {\r\n        basic_borrowed_range wrapped_x{x};\r\n        basic_borrowed_range wrapped_y{y};\r\n        assert(\r\n            !equal(wrapped_x.begin(), wrapped_x.end(), wrapped_y.begin(), wrapped_y.end(), cmp, get_first, get_first));\r\n    }\r\n    {\r\n        // calls with sized ranges of differing size perform no comparisons nor projections\r\n        constexpr auto proj  = [](auto&&) -> int { abort(); };\r\n        constexpr auto comp  = [](auto&&, auto&&) -> bool { abort(); };\r\n        int const one_int[]  = {0};\r\n        int const two_ints[] = {0, 1};\r\n        assert(!equal(one_int, two_ints, comp, proj, proj));\r\n    }\r\n    {\r\n        // Validate memcmp case\r\n        int arr1[3]{0, 2, 5};\r\n        int arr2[3]{0, 2, 5};\r\n        assert(equal(arr1, arr2));\r\n        arr2[1] = 7;\r\n        assert(!equal(arr1, arr2));\r\n    }\r\n    {\r\n        // Validate unreachable_sentinel cases\r\n        int arr1[3]{0, 2, 5};\r\n        int arr2[3]{0, 2, 5};\r\n        assert(!equal(begin(arr1), unreachable_sentinel, begin(arr2), end(arr2)));\r\n        assert(!equal(begin(arr1), end(arr1), begin(arr2), unreachable_sentinel));\r\n    }\r\n    {\r\n        // Validate GH-3550: \"<ranges>: ranges::equal does not work for ranges with integer-class range_difference_t\"\r\n        auto v = ranges::subrange{std::views::iota(0ull, 10ull)} | std::views::drop(2);\r\n        assert(equal(v, v));\r\n    }\r\n}\r\n\r\nint main() {\r\n    static_assert((smoke_test(), true));\r\n    smoke_test();\r\n}\r\n\r\nstruct instantiator {\r\n    template <class In1, class In2>\r\n    static void call() {\r\n        using ranges::begin, ranges::end, ranges::equal, ranges::iterator_t;\r\n\r\n        In1 in1{std::span<const int, 0>{}};\r\n        In2 in2{std::span<const int, 0>{}};\r\n\r\n        if constexpr (!is_permissive) {\r\n            (void) equal(in1, in2);\r\n            (void) equal(begin(in1), end(in1), begin(in2), end(in2));\r\n        }\r\n\r\n        BinaryPredicateFor<iterator_t<In1>, iterator_t<In2>> pred{};\r\n        (void) equal(in1, in2, pred);\r\n        (void) equal(begin(in1), end(in1), begin(in2), end(in2), pred);\r\n\r\n        HalfProjectedBinaryPredicateFor<iterator_t<In2>> halfpred{};\r\n        ProjectionFor<iterator_t<In1>> halfproj{};\r\n        (void) equal(in1, in2, halfpred, halfproj);\r\n        (void) equal(begin(in1), end(in1), begin(in2), end(in2), halfpred, halfproj);\r\n\r\n        ProjectedBinaryPredicate<0, 1> projpred{};\r\n        ProjectionFor<iterator_t<In1>, 0> proj1{};\r\n        ProjectionFor<iterator_t<In2>, 1> proj2{};\r\n        (void) equal(in1, in2, projpred, proj1, proj2);\r\n        (void) equal(begin(in1), end(in1), begin(in2), end(in2), projpred, proj1, proj2);\r\n    }\r\n};\r\n\r\n#if !defined(_PREFAST_) && !defined(__EDG__) // TRANSITION, GH-1030 and GH-3567\r\ntemplate void test_in_in<instantiator, const int, const int>();\r\n#endif // ^^^ no workaround ^^^\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_fill/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_fill/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nstruct instantiator {\r\n    template <class Out>\r\n    static constexpr void call() {\r\n        using ranges::fill;\r\n        {\r\n            int output[]    = {13, 42, 1367};\r\n            const int value = 7;\r\n            auto result     = fill(ranges::begin(output), ranges::end(output), value);\r\n            for (const auto& elem : output) {\r\n                assert(elem == value);\r\n            }\r\n            assert(result == ranges::end(output));\r\n        }\r\n        { // Validate ranges overload\r\n            int output[]    = {13, 42, 1367};\r\n            const int value = 13;\r\n            auto result     = fill(output, value);\r\n            for (const auto& elem : output) {\r\n                assert(elem == value);\r\n            }\r\n            assert(result == ranges::end(output));\r\n        }\r\n        { // Validate int is properly converted to bool\r\n            bool output[] = {false, true, false};\r\n            fill(output, 5);\r\n            for (const bool& elem : output) {\r\n                assert(elem == true);\r\n            }\r\n        }\r\n        { // Validate zero-ing\r\n            int output[] = {13, 42, 1367};\r\n            auto result  = fill(output, 0);\r\n            for (const auto& elem : output) {\r\n                assert(elem == 0);\r\n            }\r\n            assert(result == ranges::end(output));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_out<instantiator, int>(), true));\r\n    test_out<instantiator, int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_fill_n/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_fill_n/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nstruct instantiator {\r\n    template <class Out>\r\n    static constexpr void call() {\r\n        using ranges::fill_n;\r\n\r\n        const int expected_output[] = {13, 42, 1367};\r\n        const int value             = 7;\r\n        {\r\n            int output[] = {13, 42, 1367};\r\n            auto result  = fill_n(ranges::begin(output), ranges::distance(output), value);\r\n            for (const auto& elem : output) {\r\n                assert(elem == value);\r\n            }\r\n            assert(result == ranges::end(output));\r\n        }\r\n        {\r\n            int output[] = {13, 42, 1367};\r\n            auto result  = fill_n(ranges::begin(output), 0, value);\r\n            assert(ranges::equal(output, expected_output));\r\n            assert(result == ranges::begin(output));\r\n        }\r\n        {\r\n            int output[] = {13, 42, 1367};\r\n            auto result  = fill_n(ranges::begin(output), -1, value);\r\n            assert(ranges::equal(output, expected_output));\r\n            assert(result == ranges::begin(output));\r\n        }\r\n        { // Validate int is properly converted to bool\r\n            bool output[] = {false, true, false};\r\n            fill_n(ranges::begin(output), ranges::distance(output), 5);\r\n            for (const bool& elem : output) {\r\n                assert(elem == true);\r\n            }\r\n        }\r\n        { // Validate zero-ing\r\n            int output[] = {13, 42, 1367};\r\n            auto result  = fill_n(ranges::begin(output), ranges::distance(output), 0);\r\n            for (const auto& elem : output) {\r\n                assert(elem == 0);\r\n            }\r\n            assert(result == ranges::end(output));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_out<instantiator, int>(), true));\r\n    test_out<instantiator, int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_find/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_find/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::find(borrowed<false>{}, 42)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::find(borrowed<true>{}, 42)), int*>);\r\n\r\nstruct instantiator {\r\n    static constexpr P haystack[3] = {{0, 42}, {2, 42}, {4, 42}};\r\n\r\n    template <ranges::input_range Read>\r\n    static constexpr void call() {\r\n        using ranges::find, ranges::iterator_t, ranges::begin, ranges::end;\r\n\r\n        for (const auto& [value, _] : haystack) {\r\n            { // Validate range overload [found case]\r\n                Read wrapped_input{haystack};\r\n                auto result = find(wrapped_input, value, get_first);\r\n                static_assert(same_as<decltype(result), iterator_t<Read>>);\r\n                assert(result.peek()->first == value);\r\n            }\r\n            { // Validate iterator + sentinel overload [found case]\r\n                Read wrapped_input{haystack};\r\n                auto result = find(wrapped_input.begin(), wrapped_input.end(), value, get_first);\r\n                static_assert(same_as<decltype(result), iterator_t<Read>>);\r\n                assert(result.peek()->first == value);\r\n            }\r\n        }\r\n        { // Validate range overload [not found case]\r\n            Read wrapped_input{haystack};\r\n            auto result = find(wrapped_input, 42, get_first);\r\n            static_assert(same_as<decltype(result), iterator_t<Read>>);\r\n            assert(result == wrapped_input.end());\r\n        }\r\n        { // Validate iterator + sentinel overload [not found case]\r\n            Read wrapped_input{haystack};\r\n            auto result = find(wrapped_input.begin(), wrapped_input.end(), 42, get_first);\r\n            static_assert(same_as<decltype(result), iterator_t<Read>>);\r\n            assert(result == wrapped_input.end());\r\n        }\r\n        { // Validate memchr case\r\n            char arr[5]{4, 8, 1, -15, 125};\r\n\r\n            // found case\r\n            auto result = find(arr, 1);\r\n            assert(*result == 1);\r\n\r\n            // not found case\r\n            result = find(arr, 10);\r\n            assert(result == end(arr));\r\n\r\n            // unreachable_sentinel case\r\n            result = find(begin(arr), unreachable_sentinel, 1);\r\n            assert(*result == 1);\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_in<instantiator, const P>(), true));\r\n    test_in<instantiator, const P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_find_end/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_find_end/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::find_end(borrowed<false>{}, span<const int>{})), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::find_end(borrowed<true>{}, span<const int>{})), ranges::subrange<int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr pair<int, int> pairs[] = {{0, 42}, {1, 42}, {0, 42}, {1, 42}, {0, 42}};\r\n    static constexpr auto pred              = [](const int x, const int y) { return x == y + 1; };\r\n\r\n    static constexpr int good_needle[] = {-1, 0};\r\n    static constexpr int bad_needle[]  = {0, 0};\r\n\r\n    template <ranges::forward_range Fwd1, ranges::forward_range Fwd2>\r\n    static constexpr void test() {\r\n        using ranges::find_end, ranges::begin, ranges::end, ranges::iterator_t, ranges::next, ranges::subrange;\r\n\r\n        constexpr bool sized_result = sized_sentinel_for<iterator_t<Fwd1>, iterator_t<Fwd1>>;\r\n\r\n        {\r\n            // Validate range overload [found case]\r\n            Fwd1 haystack{pairs};\r\n            Fwd2 needle{good_needle};\r\n            const same_as<subrange<iterator_t<Fwd1>>> auto result = find_end(haystack, needle, pred, get_first);\r\n            static_assert(CanMemberSize<subrange<iterator_t<Fwd1>>> == sized_result);\r\n            if constexpr (sized_result) {\r\n                assert(result.size() == 2);\r\n            }\r\n            assert(result.begin() == next(begin(haystack), 2));\r\n            assert(result.end() == next(begin(haystack), 4));\r\n        }\r\n\r\n        {\r\n            // Validate range overload [not found case]\r\n            Fwd1 haystack{pairs};\r\n            Fwd2 needle{bad_needle};\r\n            const same_as<subrange<iterator_t<Fwd1>>> auto result = find_end(haystack, needle, pred, get_first);\r\n            assert(result.empty());\r\n            assert(result.begin() == end(haystack));\r\n            assert(result.end() == end(haystack));\r\n        }\r\n\r\n        {\r\n            // Validate iterator + sentinel overload [found case]\r\n            Fwd1 haystack{pairs};\r\n            Fwd2 needle{good_needle};\r\n            const same_as<subrange<iterator_t<Fwd1>>> auto result =\r\n                find_end(begin(haystack), end(haystack), begin(needle), end(needle), pred, get_first);\r\n            if constexpr (sized_result) {\r\n                assert(result.size() == 2);\r\n            }\r\n            assert(result.begin() == next(begin(haystack), 2));\r\n            assert(result.end() == next(begin(haystack), 4));\r\n        }\r\n\r\n        {\r\n            // Validate range overload [not found case]\r\n            Fwd1 haystack{pairs};\r\n            Fwd2 needle{bad_needle};\r\n            const same_as<subrange<iterator_t<Fwd1>>> auto result =\r\n                find_end(begin(haystack), end(haystack), begin(needle), end(needle), pred, get_first);\r\n            assert(result.empty());\r\n            assert(result.begin() == end(haystack));\r\n            assert(result.end() == end(haystack));\r\n        }\r\n    }\r\n\r\n    template <ranges::forward_range Fwd1, ranges::forward_range Fwd2>\r\n    static void call() {\r\n        test<Fwd1, Fwd2>();\r\n        static_assert((test<Fwd1, Fwd2>(), true));\r\n    }\r\n};\r\n\r\nconstexpr bool memcmp_test() {\r\n    // Validate the memcmp optimization\r\n    const int haystack[]                                    = {1, 2, 3, 1, 2, 3, 1, 2, 3};\r\n    const int needle[]                                      = {2, 3, 1};\r\n    const same_as<ranges::subrange<const int*>> auto result = ranges::find_end(haystack, span<const int>{needle});\r\n    assert(result.begin() == haystack + 4);\r\n    assert(result.end() == haystack + 7);\r\n    return true;\r\n}\r\n\r\nconstexpr void test_devcom_1559808() {\r\n    // Regression test for DevCom-1559808, an interaction between vector and the\r\n    // use of structured bindings in the constexpr evaluator.\r\n\r\n    vector<int> haystack(33, 42); // No particular significance to any numbers in this function\r\n    vector<int> needle(8, 42);\r\n    using size_type = vector<int>::size_type;\r\n\r\n    auto result = ranges::find_end(haystack, needle);\r\n    assert(static_cast<size_type>(result.begin() - haystack.begin()) == haystack.size() - needle.size());\r\n    assert(result.end() == haystack.end());\r\n\r\n    needle.assign(6, 1729);\r\n    result = ranges::find_end(haystack, needle);\r\n    assert(result.begin() == haystack.end());\r\n    assert(result.end() == haystack.end());\r\n}\r\n\r\nint main() {\r\n#if !defined(_PREFAST_) && !defined(__EDG__) // TRANSITION, GH-1030 and GH-3567\r\n    test_fwd_fwd<instantiator, const pair<int, int>, const int>();\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    static_assert(memcmp_test());\r\n    memcmp_test();\r\n\r\n    static_assert((test_devcom_1559808(), true));\r\n    test_devcom_1559808();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_find_first_of/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_find_first_of/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto pred = [](const int x, const int y) { return x == y + 1; };\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::find_first_of(borrowed<false>{}, borrowed<true>{}, pred)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::find_first_of(borrowed<true>{}, borrowed<true>{}, pred)), int*>);\r\n\r\nstruct instantiator {\r\n    static constexpr P haystack[7]      = {{0, 42}, {1, 42}, {2, 42}, {3, 42}, {4, 42}, {5, 42}, {6, 42}};\r\n    static constexpr int good_needle[2] = {29, 1};\r\n    static constexpr int bad_needle[2]  = {29, 17};\r\n\r\n    template <ranges::input_range Read1, ranges::forward_range Read2>\r\n    static constexpr void call() {\r\n        using ranges::find_first_of, ranges::iterator_t;\r\n\r\n        { // Validate range overload [found case]\r\n            Read1 wrapped_haystack{haystack};\r\n            Read2 wrapped_needle{good_needle};\r\n\r\n            auto result = find_first_of(wrapped_haystack, wrapped_needle, pred, get_first);\r\n            static_assert(same_as<decltype(result), iterator_t<Read1>>);\r\n            assert(result.peek() == begin(haystack) + 2);\r\n        }\r\n        { // Validate iterator + sentinel overload [found case]\r\n            Read1 wrapped_haystack{haystack};\r\n            Read2 wrapped_needle{good_needle};\r\n\r\n            auto result = find_first_of(wrapped_haystack.begin(), wrapped_haystack.end(), wrapped_needle.begin(),\r\n                wrapped_needle.end(), pred, get_first);\r\n            static_assert(same_as<decltype(result), iterator_t<Read1>>);\r\n            assert(result.peek() == begin(haystack) + 2);\r\n        }\r\n\r\n        { // Validate range overload [not found case]\r\n            Read1 wrapped_haystack{haystack};\r\n            Read2 wrapped_needle{bad_needle};\r\n\r\n            auto result = find_first_of(wrapped_haystack, wrapped_needle, pred, get_first);\r\n            static_assert(same_as<decltype(result), iterator_t<Read1>>);\r\n            assert(result == wrapped_haystack.end());\r\n        }\r\n        {\r\n            // Validate iterator + sentinel overload [not found case]\r\n            Read1 wrapped_haystack{haystack};\r\n            Read2 wrapped_needle{bad_needle};\r\n\r\n            auto result = find_first_of(wrapped_haystack.begin(), wrapped_haystack.end(), wrapped_needle.begin(),\r\n                wrapped_needle.end(), pred, get_first);\r\n            static_assert(same_as<decltype(result), iterator_t<Read1>>);\r\n            assert(result == wrapped_haystack.end());\r\n        }\r\n    }\r\n};\r\n\r\n#ifdef TEST_EVERYTHING\r\nint main() {\r\n    static_assert((test_in_fwd<instantiator, const P, const int>(), true));\r\n    test_in_fwd<instantiator, const P, const int>();\r\n}\r\n#else // ^^^ test all range combinations / test only interesting range combos vvv\r\nconstexpr bool run_tests() {\r\n    // The algorithm is oblivious to anything except maybe proxies so take the bare minimum input/forward range\r\n    using in_test_range  = test::range<input_iterator_tag, const P, test::Sized::no, test::CanDifference::no,\r\n         test::Common::no, test::CanCompare::no, test::ProxyRef::yes>;\r\n    using fwd_test_range = test::range<forward_iterator_tag, const int, test::Sized::no, test::CanDifference::no,\r\n        test::Common::no, test::CanCompare::yes, test::ProxyRef::yes>;\r\n\r\n    instantiator::call<in_test_range, fwd_test_range>();\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(run_tests());\r\n    run_tests();\r\n}\r\n#endif // TEST_EVERYTHING\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_find_if/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_find_if/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto matches = [](const int val) { return val == 42; };\r\nconstexpr auto equals  = [](auto x) { return [x](auto&& y) { return y == x; }; };\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::find_if(borrowed<false>{}, matches)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::find_if(borrowed<true>{}, matches)), int*>);\r\n\r\nstruct instantiator {\r\n    static constexpr P haystack[3] = {{0, 42}, {2, 42}, {4, 42}};\r\n\r\n    template <ranges::input_range Read>\r\n    static constexpr void call() {\r\n        using ranges::find_if, ranges::iterator_t;\r\n\r\n        for (const auto& [value, _] : haystack) {\r\n            { // Validate range overload [found case]\r\n                Read wrapped_input{haystack};\r\n                auto result = find_if(wrapped_input, equals(value), get_first);\r\n                static_assert(same_as<decltype(result), iterator_t<Read>>);\r\n                assert(result.peek()->first == value);\r\n            }\r\n            { // Validate iterator + sentinel overload [found case]\r\n                Read wrapped_input{haystack};\r\n                auto result = find_if(wrapped_input.begin(), wrapped_input.end(), equals(value), get_first);\r\n                static_assert(same_as<decltype(result), iterator_t<Read>>);\r\n                assert(result.peek()->first == value);\r\n            }\r\n        }\r\n        { // Validate range overload [not found case]\r\n            Read wrapped_input{haystack};\r\n            auto result = find_if(wrapped_input, equals(42), get_first);\r\n            static_assert(same_as<decltype(result), iterator_t<Read>>);\r\n            assert(result == wrapped_input.end());\r\n        }\r\n        { // Validate iterator + sentinel overload [not found case]\r\n            Read wrapped_input{haystack};\r\n            auto result = find_if(wrapped_input.begin(), wrapped_input.end(), equals(42), get_first);\r\n            static_assert(same_as<decltype(result), iterator_t<Read>>);\r\n            assert(result == wrapped_input.end());\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_in<instantiator, const P>(), true));\r\n    test_in<instantiator, const P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_find_if_not/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_find_if_not/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto matches = [](const int val) { return val == 42; };\r\nconstexpr auto equals  = [](auto x) { return [x](auto&& y) { return y == x; }; };\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::find_if_not(borrowed<false>{}, matches)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::find_if_not(borrowed<true>{}, matches)), int*>);\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range Read>\r\n    static constexpr void call() {\r\n        using ranges::find_if_not, ranges::iterator_t;\r\n        P haystack[3] = {{0, 13}, {0, 13}, {0, 13}};\r\n\r\n        for (auto& [value, _] : haystack) {\r\n            value = 42;\r\n            { // Validate range overload [found case]\r\n                Read wrapped_input{haystack};\r\n                auto result = find_if_not(wrapped_input, equals(0), get_first);\r\n                static_assert(same_as<decltype(result), iterator_t<Read>>);\r\n                assert(result.peek()->first == 42);\r\n            }\r\n            { // Validate iterator + sentinel overload [found case]\r\n                Read wrapped_input{haystack};\r\n                auto result = find_if_not(wrapped_input.begin(), wrapped_input.end(), equals(0), get_first);\r\n                static_assert(same_as<decltype(result), iterator_t<Read>>);\r\n                assert(result.peek()->first == 42);\r\n            }\r\n            value = 0;\r\n        }\r\n        { // Validate range overload [not found case]\r\n            Read wrapped_input{haystack};\r\n            auto result = find_if_not(wrapped_input, equals(13), get_second);\r\n            static_assert(same_as<decltype(result), iterator_t<Read>>);\r\n            assert(result == wrapped_input.end());\r\n        }\r\n        { // Validate iterator + sentinel overload [not found case]\r\n            Read wrapped_input{haystack};\r\n            auto result = find_if_not(wrapped_input.begin(), wrapped_input.end(), equals(13), get_second);\r\n            static_assert(same_as<decltype(result), iterator_t<Read>>);\r\n            assert(result == wrapped_input.end());\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_in<instantiator, const P>(), true));\r\n    test_in<instantiator, const P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_for_each/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_for_each/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <functional>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto incr = [](auto& y) { ++y; };\r\n\r\n// Validate that for_each_result aliases in_fun_result\r\nstatic_assert(same_as<ranges::for_each_result<int, double>, ranges::in_fun_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::for_each(borrowed<false>{}, identity{})),\r\n    ranges::for_each_result<ranges::dangling, identity>>);\r\nstatic_assert(\r\n    same_as<decltype(ranges::for_each(borrowed<true>{}, identity{})), ranges::for_each_result<int*, identity>>);\r\n\r\nstruct instantiator {\r\n    static constexpr P expected[3] = {{1, 42}, {3, 42}, {5, 42}};\r\n\r\n    template <ranges::input_range ReadWrite>\r\n    static constexpr void call() {\r\n        using ranges::for_each, ranges::for_each_result, ranges::iterator_t;\r\n\r\n        { // Validate iterator + sentinel overload\r\n            P input[3] = {{0, 42}, {2, 42}, {4, 42}};\r\n            ReadWrite wrapped_input{input};\r\n\r\n            auto result = for_each(wrapped_input.begin(), wrapped_input.end(), incr, get_first);\r\n            static_assert(\r\n                same_as<decltype(result), for_each_result<iterator_t<ReadWrite>, remove_const_t<decltype(incr)>>>);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(ranges::equal(expected, input));\r\n\r\n            int some_value = 1729;\r\n            result.fun(some_value);\r\n            assert(some_value == 1730);\r\n        }\r\n        { // Validate range overload\r\n            P input[3] = {{0, 42}, {2, 42}, {4, 42}};\r\n            ReadWrite wrapped_input{input};\r\n\r\n            auto result = for_each(wrapped_input, incr, get_first);\r\n            static_assert(\r\n                same_as<decltype(result), for_each_result<iterator_t<ReadWrite>, remove_const_t<decltype(incr)>>>);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(ranges::equal(expected, input));\r\n\r\n            int some_value = 1729;\r\n            result.fun(some_value);\r\n            assert(some_value == 1730);\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_in<instantiator, P>(), true));\r\n    test_in<instantiator, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_for_each_n/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_for_each_n/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto incr = [](auto& y) { ++y; };\r\n\r\n// Validate that for_each_n_result aliases in_fun_result\r\nstatic_assert(same_as<ranges::for_each_n_result<int, double>, ranges::in_fun_result<int, double>>);\r\n\r\nstruct instantiator {\r\n    static constexpr P expected[3] = {{1, 42}, {3, 42}, {5, 42}};\r\n\r\n    template <indirectly_writable<P> ReadWrite>\r\n    static constexpr void call() {\r\n        using ranges::for_each_n, ranges::for_each_n_result, ranges::iterator_t, ranges::distance;\r\n        P input[3] = {{0, 42}, {2, 42}, {4, 42}};\r\n\r\n        auto result = for_each_n(ReadWrite{input}, distance(input), incr, get_first);\r\n        static_assert(same_as<decltype(result), for_each_n_result<ReadWrite, remove_const_t<decltype(incr)>>>);\r\n        assert(result.in.peek() == end(input));\r\n        assert(ranges::equal(expected, input));\r\n\r\n        int some_value = 1729;\r\n        result.fun(some_value);\r\n        assert(some_value == 1730);\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_read<instantiator, P>(), true));\r\n    test_read<instantiator, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_generate/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_generate/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nconstexpr auto iota_gen = [val = 0]() mutable { return val++; };\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::generate(borrowed<false>{}, iota_gen)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::generate(borrowed<true>{}, iota_gen)), int*>);\r\n\r\nstruct instantiator {\r\n    template <ranges::output_range<const int&> Out>\r\n    static constexpr void call() {\r\n        using ranges::generate, ranges::iterator_t;\r\n\r\n        {\r\n            int output[] = {13, 42, 1367};\r\n            Out out_wrapper{output};\r\n            auto result = generate(out_wrapper, iota_gen);\r\n            static_assert(same_as<decltype(result), iterator_t<Out>>);\r\n            assert(result == out_wrapper.end());\r\n            for (int i = 0; i < 3; ++i) {\r\n                assert(i == output[i]);\r\n            }\r\n        }\r\n        {\r\n            int output[] = {13, 42, 1367};\r\n            Out out_wrapper{output};\r\n            auto result = generate(out_wrapper.begin(), out_wrapper.end(), iota_gen);\r\n            static_assert(same_as<decltype(result), iterator_t<Out>>);\r\n            assert(result == out_wrapper.end());\r\n            for (int i = 0; i < 3; ++i) {\r\n                assert(i == output[i]);\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_out<instantiator, int>(), true));\r\n    test_out<instantiator, int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_generate_n/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_generate_n/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct instantiator {\r\n    template <ranges::output_range<const int&> Out>\r\n    static constexpr void call() {\r\n        using ranges::generate_n, ranges::equal, ranges::iterator_t;\r\n\r\n        const auto iota_gen = [val = 0]() mutable { return val++; };\r\n\r\n        {\r\n            int output[] = {13, 42, 1367};\r\n            Out out_wrapper{output};\r\n            auto result = generate_n(out_wrapper.begin(), ranges::distance(output), iota_gen);\r\n            static_assert(same_as<decltype(result), iterator_t<Out>>);\r\n            assert(result == out_wrapper.end());\r\n            for (int i = 0; i < 3; ++i) {\r\n                assert(i == output[i]);\r\n            }\r\n        }\r\n\r\n        constexpr int expected_output[] = {13, 42, 1367};\r\n        int output[]                    = {13, 42, 1367};\r\n        {\r\n            Out out_wrapper{output};\r\n            auto result = generate_n(out_wrapper.begin(), 0, iota_gen);\r\n            static_assert(same_as<decltype(result), iterator_t<Out>>);\r\n            assert(result.peek() == output);\r\n            assert(equal(output, expected_output));\r\n        }\r\n        {\r\n            Out out_wrapper{output};\r\n            auto result = generate_n(out_wrapper.begin(), -1, iota_gen);\r\n            static_assert(same_as<decltype(result), iterator_t<Out>>);\r\n            assert(result.peek() == output);\r\n            assert(equal(output, expected_output));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_out<instantiator, int>(), true));\r\n    test_out<instantiator, int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_heap/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_heap/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Covers ranges::push_heap, ranges::pop_heap, ranges::make_heap, ranges::is_heap, ranges::is_heap_until, and\r\n// ranges::sort_heap\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n#define ASSERT(...) assert((__VA_ARGS__))\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::push_heap(borrowed<false>{})), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::push_heap(borrowed<true>{})), int*>);\r\nstatic_assert(same_as<decltype(ranges::pop_heap(borrowed<false>{})), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::pop_heap(borrowed<true>{})), int*>);\r\nstatic_assert(same_as<decltype(ranges::make_heap(borrowed<false>{})), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::make_heap(borrowed<true>{})), int*>);\r\nstatic_assert(same_as<decltype(ranges::sort_heap(borrowed<false>{})), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::sort_heap(borrowed<true>{})), int*>);\r\nstatic_assert(same_as<decltype(ranges::is_heap_until(borrowed<false>{})), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::is_heap_until(borrowed<true>{})), int*>);\r\n\r\nusing P = pair<int, int>;\r\n\r\nstruct empty_ranges {\r\n    template <ranges::random_access_range Range>\r\n    static constexpr void call() {\r\n        // Validate empty ranges (only make_heap and sort_heap accept empty ranges)\r\n        const Range range{span<P, 0>{}};\r\n\r\n        ASSERT(ranges::make_heap(range, ranges::less{}, get_first) == ranges::end(range));\r\n        ASSERT(ranges::make_heap(ranges::begin(range), ranges::end(range), ranges::less{}, get_first)\r\n               == ranges::end(range));\r\n\r\n        ASSERT(ranges::sort_heap(range, ranges::less{}, get_first) == ranges::end(range));\r\n        ASSERT(ranges::sort_heap(ranges::begin(range), ranges::end(range), ranges::less{}, get_first)\r\n               == ranges::end(range));\r\n    }\r\n};\r\n\r\nstruct is_heap_test {\r\n    template <ranges::random_access_range Range>\r\n    static constexpr void call() {\r\n        // Validate is_heap and is_heap_until\r\n        using ranges::is_heap, ranges::is_heap_until, ranges::less, ranges::swap;\r\n\r\n        array buff = {\r\n            P{1668617627, 0},\r\n            P{1429106719, 1},\r\n            P{-47163201, 2},\r\n            P{-441494788, 3},\r\n            P{-1200257975, 4},\r\n            P{-1459960308, 5},\r\n            P{-912489821, 6},\r\n            P{-2095681771, 7},\r\n            P{-1298559576, 8},\r\n            P{-1260655766, 9},\r\n        };\r\n        const Range wrapped{buff};\r\n\r\n        ASSERT(is_heap(wrapped, less{}, get_first));\r\n        ASSERT(is_heap(wrapped.begin(), wrapped.end(), less{}, get_first));\r\n\r\n        ASSERT(is_heap_until(wrapped, less{}, get_first) == wrapped.end());\r\n        ASSERT(is_heap_until(wrapped.begin(), wrapped.end(), less{}, get_first) == wrapped.end());\r\n\r\n        swap(buff[0], buff[1]);\r\n\r\n        ASSERT(!is_heap(wrapped, less{}, get_first));\r\n        ASSERT(!is_heap(wrapped.begin(), wrapped.end(), less{}, get_first));\r\n\r\n        ASSERT(is_heap_until(wrapped, less{}, get_first) == wrapped.begin() + 1);\r\n        ASSERT(is_heap_until(wrapped.begin(), wrapped.end(), less{}, get_first) == wrapped.begin() + 1);\r\n    }\r\n};\r\n\r\nstruct make_and_sort_heap_test {\r\n    static constexpr array initial_values = {\r\n        P{-1200257975, 0},\r\n        P{-1260655766, 1},\r\n        P{-1298559576, 2},\r\n        P{-1459960308, 3},\r\n        P{-2095681771, 4},\r\n        P{-441494788, 5},\r\n        P{-47163201, 6},\r\n        P{-912489821, 7},\r\n        P{1429106719, 8},\r\n        P{1668617627, 9},\r\n    };\r\n\r\n    template <ranges::random_access_range Range>\r\n    static constexpr void call() {\r\n        // Validate make_heap and sort_heap\r\n        using ranges::make_heap, ranges::sort_heap, ranges::is_heap, ranges::is_sorted, ranges::less, ranges::swap;\r\n\r\n        {\r\n            auto buff = initial_values;\r\n            const Range wrapped{buff};\r\n\r\n            ASSERT(!is_heap(wrapped, less{}, get_first));\r\n\r\n            make_heap(wrapped, less{}, get_first);\r\n            ASSERT(is_heap(wrapped, less{}, get_first));\r\n\r\n            sort_heap(wrapped, less{}, get_first);\r\n            ASSERT(is_sorted(wrapped, less{}, get_first));\r\n        }\r\n\r\n        {\r\n            auto buff = initial_values;\r\n            const Range wrapped{buff};\r\n\r\n            ASSERT(!is_heap(wrapped.begin(), wrapped.end(), less{}, get_first));\r\n\r\n            make_heap(wrapped.begin(), wrapped.end(), less{}, get_first);\r\n            ASSERT(is_heap(wrapped.begin(), wrapped.end(), less{}, get_first));\r\n\r\n            sort_heap(wrapped.begin(), wrapped.end(), less{}, get_first);\r\n            ASSERT(is_sorted(wrapped.begin(), wrapped.end(), less{}, get_first));\r\n        }\r\n    }\r\n};\r\n\r\nstruct push_and_pop_heap_test {\r\n    static constexpr array initial_values = {\r\n        P{1668617627, 0},\r\n        P{1429106719, 1},\r\n        P{-47163201, 2},\r\n        P{-441494788, 3},\r\n        P{-1200257975, 4},\r\n        P{-1459960308, 5},\r\n        P{-912489821, 6},\r\n        P{-2095681771, 7},\r\n        P{-1298559576, 8},\r\n        P{-1260655766, 9},\r\n    };\r\n    static_assert(ranges::is_heap(initial_values, ranges::less{}, get_first));\r\n\r\n    static constexpr array expectedPushed = {\r\n        P{1668617627, 0},\r\n        P{1429106719, 1},\r\n        P{-47163201, 2},\r\n        P{-1260655766, 9},\r\n        P{-441494788, 3},\r\n        P{-1459960308, 5},\r\n        P{-912489821, 6},\r\n        P{-2095681771, 7},\r\n        P{-1298559576, 8},\r\n        P{-1200257975, 4},\r\n    };\r\n    static_assert(ranges::is_heap(expectedPushed, ranges::less{}, get_first));\r\n\r\n    static constexpr array expectedPopped = {\r\n        P{1429106719, 1},\r\n        P{-441494788, 3},\r\n        P{-47163201, 2},\r\n        P{-1260655766, 9},\r\n        P{-1200257975, 4},\r\n        P{-1459960308, 5},\r\n        P{-912489821, 6},\r\n        P{-2095681771, 7},\r\n        P{-1298559576, 8},\r\n        P{1668617627, 0},\r\n    };\r\n    static_assert(ranges::is_heap(expectedPopped.begin(), expectedPopped.end() - 1, ranges::less{}, get_first));\r\n\r\n    template <ranges::random_access_range Range>\r\n    static constexpr void call() {\r\n        // Validate push_heap and pop_heap\r\n        using ranges::push_heap, ranges::pop_heap, ranges::equal, ranges::is_heap, ranges::less;\r\n\r\n        {\r\n            auto buff = initial_values;\r\n            const Range wrapped{buff};\r\n\r\n            pop_heap(wrapped, less{}, get_first);\r\n            ASSERT(equal(wrapped, expectedPopped));\r\n\r\n            push_heap(wrapped, less{}, get_first);\r\n            ASSERT(equal(wrapped, expectedPushed));\r\n        }\r\n\r\n        {\r\n            auto buff = initial_values;\r\n            const Range wrapped{buff};\r\n\r\n            pop_heap(wrapped.begin(), wrapped.end(), less{}, get_first);\r\n            ASSERT(is_heap(expectedPopped.begin(), expectedPopped.end() - 1, less{}, get_first));\r\n            ASSERT(equal(wrapped.begin(), wrapped.end(), expectedPopped.begin(), expectedPopped.end()));\r\n\r\n            push_heap(wrapped.begin(), wrapped.end(), less{}, get_first);\r\n            ASSERT(is_heap(expectedPushed, less{}, get_first));\r\n            ASSERT(equal(wrapped.begin(), wrapped.end(), expectedPushed.begin(), expectedPushed.end()));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_random<empty_ranges, P>(), true));\r\n    test_random<empty_ranges, P>();\r\n\r\n    static_assert((test_random<is_heap_test, P>(), true));\r\n    test_random<is_heap_test, P>();\r\n\r\n    static_assert((test_random<make_and_sort_heap_test, P>(), true));\r\n    test_random<make_and_sort_heap_test, P>();\r\n\r\n    static_assert((test_random<push_and_pop_heap_test, P>(), true));\r\n    test_random<push_and_pop_heap_test, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_includes/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_includes/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nstruct instantiator {\r\n    static constexpr P haystack_elements[]     = {{0, 0}, {0, 1}, {1, 0}, {2, 0}, {2, 1}, {4, 0}, {4, 1}};\r\n    static constexpr int needle_elements[]     = {-1, 0, 3, 3};\r\n    static constexpr int bad_needle_elements[] = {-1, 0, 2, 2};\r\n\r\n    static constexpr auto add_one = [](const int x) { return x + 1; };\r\n\r\n    template <ranges::input_range Haystack, ranges::input_range Needle>\r\n    static constexpr void call() {\r\n        using ranges::includes, ranges::less;\r\n\r\n        { // Validate range overload\r\n            Haystack haystack{haystack_elements};\r\n            Needle needle{needle_elements};\r\n            const same_as<bool> auto result = includes(haystack, needle, ranges::less{}, get_first, add_one);\r\n            assert(result);\r\n        }\r\n        { // Validate iterator overload\r\n            Haystack haystack{haystack_elements};\r\n            Needle needle{needle_elements};\r\n            const same_as<bool> auto result = includes(\r\n                haystack.begin(), haystack.end(), needle.begin(), needle.end(), ranges::less{}, get_first, add_one);\r\n            assert(result);\r\n        }\r\n\r\n        { // Validate range overload, empty haystack\r\n            Haystack haystack{span<const P, 0>{}};\r\n            Needle needle{needle_elements};\r\n            const same_as<bool> auto result = includes(haystack, needle, ranges::less{}, get_first, add_one);\r\n            assert(!result);\r\n        }\r\n        { // Validate iterator overload, empty needle\r\n            Haystack haystack{haystack_elements};\r\n            Needle needle{span<const int, 0>{}};\r\n            const same_as<bool> auto result = includes(\r\n                haystack.begin(), haystack.end(), needle.begin(), needle.end(), ranges::less{}, get_first, add_one);\r\n            assert(result);\r\n        }\r\n\r\n        { // Validate range overload, needle not found\r\n            Haystack haystack{haystack_elements};\r\n            Needle needle{bad_needle_elements};\r\n            const same_as<bool> auto result = includes(haystack, needle, ranges::less{}, get_first, add_one);\r\n            assert(!result);\r\n        }\r\n    }\r\n};\r\n\r\n#ifdef TEST_EVERYTHING\r\nint main() {\r\n    static_assert((test_in_in<instantiator, const P, const int>(), true));\r\n    test_in_in<instantiator, const P, const int>();\r\n}\r\n#else // ^^^ test all permutations of range properties / test only interesting permutations vvv\r\ntemplate <class Category, class Element, test::ProxyRef IsProxyRef>\r\nusing test_range = test::range<Category, Element, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag>}, IsProxyRef>;\r\n\r\nconstexpr void run_tests() {\r\n    using namespace test;\r\n    using test::iterator, test::range;\r\n\r\n    // The algorithm is completely oblivious to:\r\n    // * categories stronger than input\r\n    // * whether the end sentinel is an iterator\r\n    // * size information\r\n    // * iterator and/or sentinel differencing\r\n    // so let's vary proxyness for coverage and add a range of each category out of paranoia.\r\n\r\n    instantiator::call<test_range<input, const P, ProxyRef::yes>, test_range<input, const int, ProxyRef::yes>>();\r\n    instantiator::call<test_range<input, const P, ProxyRef::yes>, test_range<input, const int, ProxyRef::no>>();\r\n    instantiator::call<test_range<input, const P, ProxyRef::no>, test_range<input, const int, ProxyRef::yes>>();\r\n    instantiator::call<test_range<input, const P, ProxyRef::no>, test_range<input, const int, ProxyRef::no>>();\r\n\r\n    instantiator::call<test_range<input, const P, ProxyRef::yes>, test_range<fwd, const int, ProxyRef::yes>>();\r\n    instantiator::call<test_range<input, const P, ProxyRef::yes>, test_range<bidi, const int, ProxyRef::yes>>();\r\n    instantiator::call<test_range<input, const P, ProxyRef::yes>, test_range<random, const int, ProxyRef::yes>>();\r\n    instantiator::call<test_range<input, const P, ProxyRef::yes>, test_range<contiguous, const int, ProxyRef::no>>();\r\n\r\n    instantiator::call<test_range<fwd, const P, ProxyRef::yes>, test_range<input, const int, ProxyRef::yes>>();\r\n    instantiator::call<test_range<bidi, const P, ProxyRef::yes>, test_range<input, const int, ProxyRef::yes>>();\r\n    instantiator::call<test_range<random, const P, ProxyRef::yes>, test_range<input, const int, ProxyRef::yes>>();\r\n    instantiator::call<test_range<contiguous, const P, ProxyRef::no>, test_range<input, const int, ProxyRef::yes>>();\r\n}\r\n\r\nint main() {\r\n    static_assert((run_tests(), true));\r\n    run_tests();\r\n}\r\n#endif // TEST_EVERYTHING\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_inplace_merge/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_inplace_merge/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::inplace_merge(borrowed<false>{}, nullptr_to<int>)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::inplace_merge(borrowed<true>{}, nullptr_to<int>)), int*>);\r\n\r\nstruct instantiator {\r\n    static constexpr P expected[] = {P{0, 1}, P{0, 5}, P{4, 2}, P{4, 6}, P{6, 7}, P{7, 3}, P{8, 4}, P{9, 8}, P{10, 9}};\r\n\r\n    template <ranges::bidirectional_range Range>\r\n    static void call() {\r\n        using ranges::equal, ranges::is_sorted, ranges::iterator_t, ranges::inplace_merge;\r\n\r\n        { // Validate range overload\r\n            P input[] = {P{0, 1}, P{4, 2}, P{7, 3}, P{8, 4}, P{0, 5}, P{4, 6}, P{6, 7}, P{9, 8}, P{10, 9}};\r\n            Range range{input};\r\n            const auto mid                               = ranges::next(range.begin(), 4);\r\n            const same_as<iterator_t<Range>> auto result = inplace_merge(range, mid, ranges::less{}, get_first);\r\n            assert(result == range.end());\r\n            assert(equal(input, expected));\r\n\r\n            // Validate empty range\r\n            const Range empty_range{span<P, 0>{}};\r\n            const same_as<iterator_t<Range>> auto empty_result =\r\n                inplace_merge(empty_range, empty_range.begin(), ranges::less{}, get_first);\r\n            assert(empty_result == empty_range.begin());\r\n        }\r\n\r\n        { // Validate iterator overload\r\n            P input[] = {P{0, 1}, P{4, 2}, P{7, 3}, P{8, 4}, P{0, 5}, P{4, 6}, P{6, 7}, P{9, 8}, P{10, 9}};\r\n            Range range{input};\r\n            const auto mid = ranges::next(range.begin(), 4);\r\n            const same_as<iterator_t<Range>> auto result =\r\n                inplace_merge(range.begin(), mid, range.end(), ranges::less{}, get_first);\r\n            assert(result == range.end());\r\n            assert(equal(input, expected));\r\n\r\n            // Validate empty range\r\n            const Range empty_range{span<P, 0>{}};\r\n            const same_as<iterator_t<Range>> auto empty_result =\r\n                inplace_merge(empty_range.begin(), empty_range.begin(), empty_range.end(), ranges::less{}, get_first);\r\n            assert(empty_result == empty_range.end());\r\n        }\r\n    }\r\n};\r\n\r\n// Test GH-4863: <algorithm>: ranges::inplace_merge doesn't seem to be able to utilize ranges::upper_bound\r\nvoid test_gh_4863() { // COMPILE-ONLY\r\n    {\r\n        vector<int> v;\r\n        auto cmp = [](int&, int&) { return false; };\r\n        ranges::sort(v, cmp);\r\n        ranges::inplace_merge(v, v.begin(), cmp);\r\n    }\r\n    {\r\n        struct S {\r\n            operator nullptr_t() {\r\n                return nullptr;\r\n            }\r\n        };\r\n        vector<int> v;\r\n        auto cmp = [](const nullptr_t&, const nullptr_t&) { return false; };\r\n        ranges::inplace_merge(v, v.begin(), cmp, [](int) { return S{}; });\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_bidi<instantiator, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_is_permutation/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_is_permutation/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nusing P = pair<int, int>;\r\n\r\nstruct instantiator {\r\n    static constexpr array<P, 8> pairs = {\r\n        P{0, 42}, P{0, 42}, P{1, 42}, P{1, 42}, P{0, 42}, P{0, 42}, P{1, 42}, P{1, 42}};\r\n    static constexpr array<int, 8> not_pairs     = {0, 0, 0, 0, 1, 1, 1, 1};\r\n    static constexpr array<int, 8> too_few_ones  = {0, 0, 0, 0, 0, 1, 1, 1};\r\n    static constexpr array<int, 8> too_many_ones = {0, 0, 0, 1, 1, 1, 1, 1};\r\n\r\n    template <class Fwd1, class Fwd2>\r\n    static constexpr void call() {\r\n        const Fwd1 range1{pairs};\r\n        const Fwd2 range2{not_pairs};\r\n\r\n        // defaulted predicate and projections\r\n        assert(ranges::is_permutation(range1, range1));\r\n        assert(ranges::is_permutation(\r\n            ranges::begin(range2), ranges::end(range2), ranges::begin(range2), ranges::end(range2)));\r\n\r\n        // explicit predicate\r\n        assert(ranges::is_permutation(range2, range2, ranges::equal_to{}));\r\n        assert(ranges::is_permutation(ranges::begin(range1), ranges::end(range1), ranges::begin(range1),\r\n            ranges::end(range1), ranges::equal_to{}));\r\n\r\n        // explicit predicate and one projection\r\n        assert(ranges::is_permutation(range1, range2, ranges::equal_to{}, get_first));\r\n        assert(ranges::is_permutation(ranges::begin(range1), ranges::end(range1), ranges::begin(range2),\r\n            ranges::end(range2), ranges::equal_to{}, get_first));\r\n\r\n        // explicit predicate and two projections\r\n        assert(ranges::is_permutation(range1, range2, ranges::equal_to{}, get_first, identity{}));\r\n        assert(ranges::is_permutation(ranges::begin(range1), ranges::end(range1), ranges::begin(range2),\r\n            ranges::end(range2), ranges::equal_to{}, get_first, identity{}));\r\n\r\n        {\r\n            // negative case [different lengths]\r\n            const Fwd2 suffix2{span{not_pairs}.subspan<2>()};\r\n            assert(!ranges::is_permutation(range1, suffix2, ranges::equal_to{}, get_first, identity{}));\r\n            assert(!ranges::is_permutation(suffix2, range1, ranges::equal_to{}, identity{}, get_first));\r\n            assert(!ranges::is_permutation(ranges::begin(range1), ranges::end(range1), ranges::begin(suffix2),\r\n                ranges::end(suffix2), ranges::equal_to{}, get_first, identity{}));\r\n            assert(!ranges::is_permutation(ranges::begin(suffix2), ranges::end(suffix2), ranges::begin(range1),\r\n                ranges::end(range1), ranges::equal_to{}, identity{}, get_first));\r\n        }\r\n        {\r\n            // negative case [1 appears more in first range than second]\r\n            const Fwd2 r2{too_few_ones};\r\n            assert(!ranges::is_permutation(range1, r2, ranges::equal_to{}, get_first, identity{}));\r\n            assert(!ranges::is_permutation(ranges::begin(range1), ranges::end(range1), ranges::begin(r2),\r\n                ranges::end(r2), ranges::equal_to{}, get_first, identity{}));\r\n        }\r\n        {\r\n            // negative case [1 appears more in second range than first]\r\n            const Fwd2 r2{too_many_ones};\r\n            assert(!ranges::is_permutation(range1, r2, ranges::equal_to{}, get_first, identity{}));\r\n            assert(!ranges::is_permutation(ranges::begin(range1), ranges::end(range1), ranges::begin(r2),\r\n                ranges::end(r2), ranges::equal_to{}, get_first, identity{}));\r\n        }\r\n\r\n        {\r\n            // negative case [only final elements differ]\r\n            const Fwd1 r1{span{pairs}.subspan<0, 3>()};\r\n            const Fwd2 r2{span{not_pairs}.subspan<0, 3>()};\r\n            assert(!ranges::is_permutation(r1, r2, ranges::equal_to{}, get_first, identity{}));\r\n            assert(!ranges::is_permutation(ranges::begin(r1), ranges::end(r1), ranges::begin(r2), ranges::end(r2),\r\n                ranges::equal_to{}, get_first, identity{}));\r\n        }\r\n        {\r\n            // negative case [only initial elements differ]\r\n            const Fwd1 r1{span{pairs}.subspan<1, 3>()};\r\n            const Fwd2 r2{span{not_pairs}.subspan<4, 3>()};\r\n            assert(!ranges::is_permutation(r1, r2, ranges::equal_to{}, get_first, identity{}));\r\n            assert(!ranges::is_permutation(ranges::begin(r1), ranges::end(r1), ranges::begin(r2), ranges::end(r2),\r\n                ranges::equal_to{}, get_first, identity{}));\r\n        }\r\n        {\r\n            int arr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\r\n            int arr2[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};\r\n            const Fwd2 r1{arr1};\r\n            const Fwd2 r2{arr2};\r\n            assert(ranges::is_permutation(r1, r2));\r\n        }\r\n        {\r\n            int arr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\r\n            int arr2[] = {9, 8, 7, 3, 4, 5, 6, 2, 1, 0};\r\n            const Fwd2 r1{arr1};\r\n            const Fwd2 r2{arr2};\r\n            assert(ranges::is_permutation(r1, r2));\r\n        }\r\n        {\r\n            int arr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\r\n            int arr2[] = {9, 1, 7, 3, 5, 4, 6, 2, 8, 0};\r\n            const Fwd2 r1{arr1};\r\n            const Fwd2 r2{arr2};\r\n            assert(ranges::is_permutation(r1, r2));\r\n        }\r\n        {\r\n            int arr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\r\n            int arr2[] = {9, 1, 7, 5, 6, 3, 4, 2, 8, 0};\r\n            const Fwd2 r1{arr1};\r\n            const Fwd2 r2{arr2};\r\n            assert(ranges::is_permutation(r1, r2));\r\n        }\r\n        {\r\n            int arr1[] = {0, 1, 2, 3, 4, 10, 5, 6, 7, 8, 9};\r\n            int arr2[] = {9, 1, 7, 3, 5, 11, 4, 6, 2, 8, 0};\r\n            const Fwd2 r1{arr1};\r\n            const Fwd2 r2{arr2};\r\n            assert(!ranges::is_permutation(r1, r2));\r\n        }\r\n        {\r\n            int arr1[] = {-1, 0, 1, 2, 3, 4, 5, 6, 7, 8};\r\n            int arr2[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};\r\n            const Fwd2 r1{arr1};\r\n            const Fwd2 r2{arr2};\r\n            assert(!ranges::is_permutation(r1, r2));\r\n            assert(!ranges::is_permutation(r1, r2, {}, {}, [](int n) { return n - 1; }));\r\n            assert(ranges::is_permutation(r1, r2, {}, {}, [](int n) { return n - 2; }));\r\n            assert(ranges::is_permutation(r1, r2, {}, [](int n) { return n + 1; }, [](int n) { return n - 1; }));\r\n        }\r\n        { // Test GH-2888: `<algorithm>`: `ranges::is_permutation`'s helper lambda does not specify return type\r\n            struct NonCopyableBool {\r\n                constexpr operator bool() {\r\n                    return true;\r\n                }\r\n\r\n                NonCopyableBool()                       = default;\r\n                NonCopyableBool(const NonCopyableBool&) = delete;\r\n            };\r\n            NonCopyableBool b;\r\n            assert(ranges::is_permutation(range2, range2, [&](auto, auto) -> NonCopyableBool& { return b; }));\r\n        }\r\n    }\r\n};\r\n\r\n#ifdef TEST_EVERYTHING\r\nint main() {\r\n    // No constexpr test here; this test_fwd_fwd call exceeds the maximum number of steps in a constexpr computation.\r\n    test_fwd_fwd<instantiator, const P, const int>();\r\n}\r\n#else // ^^^ test all range combinations / test only interesting range combos vvv\r\ntemplate <class Elem, test::Sized IsSized>\r\nusing fwd_test_range = test::range<forward_iterator_tag, Elem, IsSized, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare::yes, test::ProxyRef::yes>;\r\ntemplate <class Elem, test::Sized IsSized, test::Common Eq>\r\nusing bidi_test_range = test::range<bidirectional_iterator_tag, Elem, IsSized, test::CanDifference::no, Eq,\r\n    test::CanCompare::yes, test::ProxyRef::yes>;\r\n\r\nconstexpr bool run_tests() {\r\n    using Elem1 = const P;\r\n    using Elem2 = const int;\r\n\r\n    // All proxy reference types, since the algorithm doesn't really care.\r\n    using test::Common, test::Sized;\r\n\r\n    // both forward non-common and 0-/1-/2-sized\r\n    instantiator::call<fwd_test_range<Elem1, Sized::no>, fwd_test_range<Elem2, Sized::no>>();\r\n    instantiator::call<fwd_test_range<Elem1, Sized::yes>, fwd_test_range<Elem2, Sized::no>>();\r\n    instantiator::call<fwd_test_range<Elem1, Sized::no>, fwd_test_range<Elem2, Sized::yes>>();\r\n    instantiator::call<fwd_test_range<Elem1, Sized::yes>, fwd_test_range<Elem2, Sized::yes>>();\r\n\r\n    // both bidi same common and 0-/1-/2-sized\r\n    instantiator::call<bidi_test_range<Elem1, Sized::no, Common::yes>, bidi_test_range<Elem2, Sized::no, Common::no>>();\r\n    instantiator::call<bidi_test_range<Elem1, Sized::yes, Common::yes>,\r\n        bidi_test_range<Elem2, Sized::no, Common::no>>();\r\n    instantiator::call<bidi_test_range<Elem1, Sized::no, Common::yes>,\r\n        bidi_test_range<Elem2, Sized::yes, Common::no>>();\r\n    instantiator::call<bidi_test_range<Elem1, Sized::yes, Common::yes>,\r\n        bidi_test_range<Elem2, Sized::yes, Common::no>>();\r\n\r\n    instantiator::call<bidi_test_range<Elem1, Sized::no, Common::yes>,\r\n        bidi_test_range<Elem2, Sized::no, Common::yes>>();\r\n    instantiator::call<bidi_test_range<Elem1, Sized::yes, Common::yes>,\r\n        bidi_test_range<Elem2, Sized::no, Common::yes>>();\r\n    instantiator::call<bidi_test_range<Elem1, Sized::no, Common::yes>,\r\n        bidi_test_range<Elem2, Sized::yes, Common::yes>>();\r\n    instantiator::call<bidi_test_range<Elem1, Sized::yes, Common::yes>,\r\n        bidi_test_range<Elem2, Sized::yes, Common::yes>>();\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(run_tests());\r\n    run_tests();\r\n}\r\n#endif // TEST_EVERYTHING\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_is_sorted/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_is_sorted/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Covers both ranges::is_sorted and ranges::is_sorted_until\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::is_sorted_until(borrowed<false>{})), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::is_sorted_until(borrowed<true>{})), int*>);\r\n\r\nusing P = pair<int, int>;\r\n\r\nstatic constexpr array<P, 8> pairs = {P{0, 80}, P{1, 70}, P{2, 60}, P{3, 50}, P{4, 40}, P{5, 30}, P{6, 20}, P{7, 10}};\r\n\r\nstruct range_overloads {\r\n    template <class Fwd>\r\n    static constexpr void call() {\r\n        constexpr auto N = static_cast<int>(pairs.size());\r\n        auto elements    = pairs;\r\n        const Fwd range{elements};\r\n        for (int offset = 0; offset < N; ++offset) {\r\n            const bool sorted = offset == 0;\r\n            assert(ranges::is_sorted(range) == sorted);\r\n            assert(ranges::is_sorted(range, ranges::less{}) == sorted);\r\n            assert(ranges::is_sorted(range, ranges::less{}, get_first) == sorted);\r\n\r\n            const auto addr = elements.data() + (N - offset);\r\n            assert(ranges::is_sorted_until(range).peek() == addr);\r\n            assert(ranges::is_sorted_until(range, ranges::less{}).peek() == addr);\r\n            assert(ranges::is_sorted_until(range, ranges::less{}, get_first).peek() == addr);\r\n\r\n            const auto next = ranges::next(ranges::begin(elements));\r\n            rotate(ranges::begin(elements), next, ranges::end(elements));\r\n        }\r\n    }\r\n};\r\n\r\nstruct iterator_overloads {\r\n    template <class Fwd>\r\n    static constexpr void call() {\r\n        using ranges::begin, ranges::end;\r\n        constexpr auto N = static_cast<int>(pairs.size());\r\n        auto elements    = pairs;\r\n        const Fwd range{elements};\r\n        for (int offset = 0; offset < N; ++offset) {\r\n            const bool sorted = offset == 0;\r\n            assert(ranges::is_sorted(begin(range), end(range)) == sorted);\r\n            assert(ranges::is_sorted(begin(range), end(range), ranges::less{}) == sorted);\r\n            assert(ranges::is_sorted(begin(range), end(range), ranges::less{}, get_first) == sorted);\r\n\r\n            const auto addr = elements.data() + (N - offset);\r\n            assert(ranges::is_sorted_until(begin(range), end(range)).peek() == addr);\r\n            assert(ranges::is_sorted_until(begin(range), end(range), ranges::less{}).peek() == addr);\r\n            assert(ranges::is_sorted_until(begin(range), end(range), ranges::less{}, get_first).peek() == addr);\r\n\r\n            const auto next = ranges::next(begin(elements));\r\n            rotate(begin(elements), next, end(elements));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_fwd<range_overloads, const P>(), true));\r\n    test_fwd<range_overloads, const P>();\r\n\r\n    static_assert((test_fwd<iterator_overloads, const P>(), true));\r\n    test_fwd<iterator_overloads, const P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_lexicographical_compare/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_lexicographical_compare/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nstruct instantiator {\r\n    static constexpr P left[]                  = {{0, 10}, {1, 20}, {2, 30}};\r\n    static constexpr P right_shorter_less[]    = {{300, 0}, {200, 0}};\r\n    static constexpr P right_shorter_same[]    = {{300, 0}, {200, 1}};\r\n    static constexpr P right_shorter_greater[] = {{300, 0}, {200, 2}};\r\n    static constexpr P right_less[]            = {{300, 0}, {200, 1}, {100, 1}};\r\n    static constexpr P right_equal[]           = {{300, 0}, {200, 1}, {100, 2}};\r\n    static constexpr P right_greater[]         = {{300, 0}, {200, 1}, {100, 3}};\r\n    static constexpr P right_longer_less[]     = {{300, 0}, {200, 1}, {100, 1}, {0, 3}};\r\n    static constexpr P right_longer_same[]     = {{300, 0}, {200, 1}, {100, 2}, {0, 3}};\r\n    static constexpr P right_longer_greater[]  = {{300, 0}, {200, 1}, {100, 3}, {0, 3}};\r\n\r\n    template <class In1, class In2>\r\n    static constexpr void call() {\r\n        using ranges::lexicographical_compare, ranges::less, ranges::begin, ranges::end;\r\n\r\n        // Validate range overload\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_shorter_less};\r\n            const same_as<bool> auto result = lexicographical_compare(range1, range2, less{}, get_first, get_second);\r\n            assert(!result);\r\n        }\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_shorter_same};\r\n            const same_as<bool> auto result = lexicographical_compare(range1, range2, less{}, get_first, get_second);\r\n            assert(!result);\r\n        }\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_shorter_greater};\r\n            const same_as<bool> auto result = lexicographical_compare(range1, range2, less{}, get_first, get_second);\r\n            assert(result);\r\n        }\r\n\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_less};\r\n            const same_as<bool> auto result = lexicographical_compare(range1, range2, less{}, get_first, get_second);\r\n            assert(!result);\r\n        }\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_equal};\r\n            const same_as<bool> auto result = lexicographical_compare(range1, range2, less{}, get_first, get_second);\r\n            assert(!result);\r\n        }\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_greater};\r\n            const same_as<bool> auto result = lexicographical_compare(range1, range2, less{}, get_first, get_second);\r\n            assert(result);\r\n        }\r\n\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_longer_less};\r\n            const same_as<bool> auto result = lexicographical_compare(range1, range2, less{}, get_first, get_second);\r\n            assert(!result);\r\n        }\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_longer_same};\r\n            const same_as<bool> auto result = lexicographical_compare(range1, range2, less{}, get_first, get_second);\r\n            assert(result);\r\n        }\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_longer_greater};\r\n            const same_as<bool> auto result = lexicographical_compare(range1, range2, less{}, get_first, get_second);\r\n            assert(result);\r\n        }\r\n\r\n        {\r\n            In1 empty1{span<const P, 0>{}};\r\n            In2 range2{right_equal};\r\n            const same_as<bool> auto result = lexicographical_compare(empty1, range2, less{}, get_first, get_second);\r\n            assert(result);\r\n        }\r\n        {\r\n            In1 range1{left};\r\n            In2 empty2{span<const P, 0>{}};\r\n            const same_as<bool> auto result = lexicographical_compare(range1, empty2, less{}, get_first, get_second);\r\n            assert(!result);\r\n        }\r\n        {\r\n            In1 empty1{span<const P, 0>{}};\r\n            In2 empty2{span<const P, 0>{}};\r\n            const same_as<bool> auto result = lexicographical_compare(empty1, empty2, less{}, get_first, get_second);\r\n            assert(!result);\r\n        }\r\n\r\n        // Validate iterator overload\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_shorter_less};\r\n            const same_as<bool> auto result = lexicographical_compare(\r\n                range1.begin(), range1.end(), range2.begin(), range2.end(), less{}, get_first, get_second);\r\n            assert(!result);\r\n        }\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_shorter_same};\r\n            const same_as<bool> auto result = lexicographical_compare(\r\n                range1.begin(), range1.end(), range2.begin(), range2.end(), less{}, get_first, get_second);\r\n            assert(!result);\r\n        }\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_shorter_greater};\r\n            const same_as<bool> auto result = lexicographical_compare(\r\n                range1.begin(), range1.end(), range2.begin(), range2.end(), less{}, get_first, get_second);\r\n            assert(result);\r\n        }\r\n\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_less};\r\n            const same_as<bool> auto result = lexicographical_compare(\r\n                range1.begin(), range1.end(), range2.begin(), range2.end(), less{}, get_first, get_second);\r\n            assert(!result);\r\n        }\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_equal};\r\n            const same_as<bool> auto result = lexicographical_compare(\r\n                range1.begin(), range1.end(), range2.begin(), range2.end(), less{}, get_first, get_second);\r\n            assert(!result);\r\n        }\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_greater};\r\n            const same_as<bool> auto result = lexicographical_compare(\r\n                range1.begin(), range1.end(), range2.begin(), range2.end(), less{}, get_first, get_second);\r\n            assert(result);\r\n        }\r\n\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_longer_less};\r\n            const same_as<bool> auto result = lexicographical_compare(\r\n                range1.begin(), range1.end(), range2.begin(), range2.end(), less{}, get_first, get_second);\r\n            assert(!result);\r\n        }\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_longer_same};\r\n            const same_as<bool> auto result = lexicographical_compare(\r\n                range1.begin(), range1.end(), range2.begin(), range2.end(), less{}, get_first, get_second);\r\n            assert(result);\r\n        }\r\n        {\r\n            In1 range1{left};\r\n            In2 range2{right_longer_greater};\r\n            const same_as<bool> auto result = lexicographical_compare(\r\n                range1.begin(), range1.end(), range2.begin(), range2.end(), less{}, get_first, get_second);\r\n            assert(result);\r\n        }\r\n\r\n        {\r\n            In1 empty1{span<const P, 0>{}};\r\n            In2 range2{right_equal};\r\n            const same_as<bool> auto result = lexicographical_compare(\r\n                empty1.begin(), empty1.end(), range2.begin(), range2.end(), less{}, get_first, get_second);\r\n            assert(result);\r\n        }\r\n        {\r\n            In1 range1{left};\r\n            In2 empty2{span<const P, 0>{}};\r\n            const same_as<bool> auto result = lexicographical_compare(\r\n                range1.begin(), range1.end(), empty2.begin(), empty2.end(), less{}, get_first, get_second);\r\n            assert(!result);\r\n        }\r\n        {\r\n            In1 empty1{span<const P, 0>{}};\r\n            In2 empty2{span<const P, 0>{}};\r\n            const same_as<bool> auto result = lexicographical_compare(\r\n                empty1.begin(), empty1.end(), empty2.begin(), empty2.end(), less{}, get_first, get_second);\r\n            assert(!result);\r\n        }\r\n    }\r\n};\r\n\r\nconstexpr void concrete_tests() {\r\n    using ranges::lexicographical_compare, ranges::begin, ranges::end;\r\n\r\n    { // Validate memcmp case\r\n        unsigned char arr1[3]{0, 1, 2};\r\n        unsigned char arr2[3]{0, 1, 3};\r\n        assert(lexicographical_compare(arr1, arr2));\r\n        arr2[2] = 2;\r\n        assert(!lexicographical_compare(arr1, arr2));\r\n        arr2[2] = 1;\r\n        assert(!lexicographical_compare(arr1, arr2));\r\n    }\r\n    { // Validate memcmp + unreachable_sentinel cases\r\n        unsigned char arr1[3]{0, 1, 2};\r\n        unsigned char arr2[3]{0, 1, 3};\r\n\r\n        assert(lexicographical_compare(begin(arr1), end(arr1), begin(arr1), unreachable_sentinel));\r\n        assert(!lexicographical_compare(begin(arr1), unreachable_sentinel, begin(arr1), end(arr1)));\r\n\r\n        assert(lexicographical_compare(begin(arr1), unreachable_sentinel, begin(arr2), unreachable_sentinel));\r\n        assert(lexicographical_compare(begin(arr1), unreachable_sentinel, begin(arr2), end(arr2)));\r\n        assert(lexicographical_compare(begin(arr1), end(arr1), begin(arr2), unreachable_sentinel));\r\n        arr2[2] = 2;\r\n        assert(!lexicographical_compare(begin(arr1), unreachable_sentinel, begin(arr2), end(arr2)));\r\n        assert(lexicographical_compare(begin(arr1), end(arr1), begin(arr2), unreachable_sentinel));\r\n        arr2[2] = 1;\r\n        assert(!lexicographical_compare(begin(arr1), unreachable_sentinel, begin(arr2), unreachable_sentinel));\r\n        assert(!lexicographical_compare(begin(arr1), unreachable_sentinel, begin(arr2), end(arr2)));\r\n        assert(!lexicographical_compare(begin(arr1), end(arr1), begin(arr2), unreachable_sentinel));\r\n    }\r\n}\r\n\r\n#ifdef TEST_EVERYTHING\r\nint main() {\r\n    // No constexpr tests here: we hit the constexpr step limits too quickly.\r\n    test_in_in<instantiator, const P, const P>();\r\n    concrete_tests();\r\n}\r\n#else // ^^^ test all range combinations / test only interesting combinations vvv\r\ntemplate <test::ProxyRef IsProxy>\r\nusing range_type = test::range<input_iterator_tag, const P, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare::no, IsProxy>;\r\n\r\nconstexpr void run_tests() {\r\n    // The algorithm is very much oblivious to any properties above the minimum requirements: category, size,\r\n    // difference, none of it matters. Let's test input ranges with and without proxy references.\r\n    using test::ProxyRef;\r\n\r\n    instantiator::call<range_type<ProxyRef::yes>, range_type<ProxyRef::yes>>();\r\n    instantiator::call<range_type<ProxyRef::yes>, range_type<ProxyRef::no>>();\r\n    instantiator::call<range_type<ProxyRef::no>, range_type<ProxyRef::yes>>();\r\n    instantiator::call<range_type<ProxyRef::no>, range_type<ProxyRef::no>>();\r\n\r\n    concrete_tests();\r\n}\r\n\r\nint main() {\r\n    static_assert((run_tests(), true));\r\n    run_tests();\r\n}\r\n#endif // TEST_EVERYTHING\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_merge/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_merge/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate that merge_result aliases in_in_out_result\r\nstatic_assert(same_as<ranges::merge_result<int, void*, double>, ranges::in_in_out_result<int, void*, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::merge(borrowed<false>{}, borrowed<false>{}, nullptr_to<int>)),\r\n    ranges::merge_result<ranges::dangling, ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::merge(borrowed<false>{}, borrowed<true>{}, nullptr_to<int>)),\r\n    ranges::merge_result<ranges::dangling, int*, int*>>);\r\nstatic_assert(same_as<decltype(ranges::merge(borrowed<true>{}, borrowed<false>{}, nullptr_to<int>)),\r\n    ranges::merge_result<int*, ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::merge(borrowed<true>{}, borrowed<true>{}, nullptr_to<int>)),\r\n    ranges::merge_result<int*, int*, int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr P elements1[] = {{0, 10}, {0, 11}, {0, 12}, {1, 10}, {1, 11}, {3, 10}};\r\n    static constexpr P elements2[] = {{13, 0}, {14, 0}, {10, 2}, {11, 3}, {12, 3}};\r\n    static constexpr P expected[]  = {\r\n        {0, 10}, {0, 11}, {0, 12}, {13, 0}, {14, 0}, {1, 10}, {1, 11}, {10, 2}, {3, 10}, {11, 3}, {12, 3}};\r\n\r\n    static constexpr auto counting_compare(size_t& counter) {\r\n        return [&counter](auto&& x, auto&& y) {\r\n            ++counter;\r\n            return ranges::less{}(x, y);\r\n        };\r\n    }\r\n\r\n    template <ranges::input_range R1, ranges::input_range R2, weakly_incrementable O>\r\n    static constexpr void call() {\r\n        using ranges::merge, ranges::merge_result, ranges::end, ranges::equal, ranges::iterator_t, ranges::size;\r\n\r\n        { // Validate range overload\r\n            P output[size(expected)]{};\r\n            R1 range1{elements1};\r\n            R2 range2{elements2};\r\n            size_t counter = 0;\r\n\r\n            const same_as<merge_result<iterator_t<R1>, iterator_t<R2>, O>> auto result =\r\n                merge(range1, range2, O{output}, counting_compare(counter), get_first, get_second);\r\n            assert(result.in1 == range1.end());\r\n            assert(result.in2 == range2.end());\r\n            assert(result.out.peek() == end(output));\r\n            assert(equal(output, expected));\r\n            assert(counter <= size(elements1) + size(elements2) - 1);\r\n        }\r\n        { // Validate iterator overload\r\n            P output[size(expected)]{};\r\n            R1 range1{elements1};\r\n            R2 range2{elements2};\r\n            size_t counter = 0;\r\n\r\n            const same_as<merge_result<iterator_t<R1>, iterator_t<R2>, O>> auto result =\r\n                merge(range1.begin(), range1.end(), range2.begin(), range2.end(), O{output}, counting_compare(counter),\r\n                    get_first, get_second);\r\n            assert(result.in1 == range1.end());\r\n            assert(result.in2 == range2.end());\r\n            assert(result.out.peek() == end(output));\r\n            assert(equal(output, expected));\r\n            assert(counter <= size(elements1) + size(elements2) - 1);\r\n        }\r\n\r\n        { // Validate range overload, empty range1\r\n            P output[size(elements2)]{};\r\n            R1 range1{span<const P, 0>{}};\r\n            R2 range2{elements2};\r\n            size_t counter = 0;\r\n\r\n            const same_as<merge_result<iterator_t<R1>, iterator_t<R2>, O>> auto result =\r\n                merge(range1, range2, O{output}, counting_compare(counter), get_first, get_second);\r\n            assert(result.in1 == range1.end());\r\n            assert(result.in2 == range2.end());\r\n            assert(result.out.peek() == end(output));\r\n            assert(equal(output, elements2));\r\n            assert(counter == 0);\r\n        }\r\n        { // Validate iterator overload, empty range2\r\n            P output[size(elements1)]{};\r\n            R1 range1{elements1};\r\n            R2 range2{span<const P, 0>{}};\r\n            size_t counter = 0;\r\n\r\n            const same_as<merge_result<iterator_t<R1>, iterator_t<R2>, O>> auto result =\r\n                merge(range1.begin(), range1.end(), range2.begin(), range2.end(), O{output}, counting_compare(counter),\r\n                    get_first, get_second);\r\n            assert(result.in1 == range1.end());\r\n            assert(result.in2 == range2.end());\r\n            assert(result.out.peek() == end(output));\r\n            assert(equal(output, elements1));\r\n            assert(counter == 0);\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class Continuation>\r\nstruct generate_readable_ranges {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::range;\r\n\r\n        // The algorithm is completely oblivious to:\r\n        // * categories stronger than input\r\n        // * whether the end sentinel is an iterator\r\n        // * size information\r\n        // * iterator and/or sentinel differencing\r\n        // so let's vary proxyness for coverage and call it good.\r\n\r\n        Continuation::template call<Args...,\r\n            range<input, const P, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, const P, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n    }\r\n};\r\n\r\ntemplate <class Continuation>\r\nstruct generate_writable_iterators {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::iterator;\r\n\r\n        // The algorithm is completely oblivious to all properties except for proxyness,\r\n        // so again we'll vary that property, and we'll also get coverage from input iterators to ensure the algorithm\r\n        // doesn't inadvertently depend on the output_iterator-only `*i++ = meow` expression.\r\n\r\n        Continuation::template call<Args..., iterator<output, P, CanDifference::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args..., iterator<output, P, CanDifference::no, CanCompare::no, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args..., iterator<input, P, CanDifference::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args..., iterator<input, P, CanDifference::no, CanCompare::no, ProxyRef::yes>>();\r\n    }\r\n};\r\n\r\nconstexpr void run_tests() {\r\n    generate_readable_ranges<generate_readable_ranges<generate_writable_iterators<instantiator>>>::call();\r\n}\r\n\r\nint main() {\r\n    static_assert((run_tests(), true));\r\n    run_tests();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_minmax/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_minmax/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Covers ranges::min, ranges::max, ranges::minmax, ranges::clamp, ranges::min_element, ranges::max_element, and\r\n// ranges::minmax_element\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <functional>\r\n#include <memory>\r\n#include <ranges>\r\n#include <span>\r\n#include <string>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n#define ASSERT(...) assert((__VA_ARGS__))\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::min_element(borrowed<false>{})), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::min_element(borrowed<true>{})), int*>);\r\n\r\nstatic_assert(same_as<decltype(ranges::max_element(borrowed<false>{})), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::max_element(borrowed<true>{})), int*>);\r\n\r\nstatic_assert(\r\n    same_as<decltype(ranges::minmax_element(borrowed<false>{})), ranges::minmax_element_result<ranges::dangling>>);\r\nstatic_assert(same_as<decltype(ranges::minmax_element(borrowed<true>{})), ranges::minmax_element_result<int*>>);\r\n\r\n// Validate that minmax_result and minmax_element_result alias min_max_result\r\nstatic_assert(same_as<ranges::minmax_result<int>, ranges::min_max_result<int>>);\r\nstatic_assert(same_as<ranges::minmax_element_result<int>, ranges::min_max_result<int>>);\r\n\r\nusing P = pair<int, int>;\r\n\r\nstruct mm_element_empty {\r\n    template <ranges::forward_range Fwd>\r\n    static constexpr void call() {\r\n        // Validate empty ranges\r\n        const Fwd range{span<const P, 0>{}};\r\n\r\n        ASSERT(ranges::min_element(range, ranges::less{}, get_first) == ranges::end(range));\r\n        ASSERT(ranges::min_element(ranges::begin(range), ranges::end(range), ranges::less{}, get_first)\r\n               == ranges::end(range));\r\n\r\n        ASSERT(ranges::max_element(range, ranges::less{}, get_first) == ranges::end(range));\r\n        ASSERT(ranges::max_element(ranges::begin(range), ranges::end(range), ranges::less{}, get_first)\r\n               == ranges::end(range));\r\n\r\n        {\r\n            auto result = ranges::minmax_element(range, ranges::less{}, get_first);\r\n            static_assert(same_as<decltype(result), ranges::minmax_element_result<ranges::iterator_t<Fwd>>>);\r\n            ASSERT(result.min == ranges::end(range));\r\n            ASSERT(result.max == ranges::end(range));\r\n        }\r\n        {\r\n            auto result = ranges::minmax_element(ranges::begin(range), ranges::end(range), ranges::less{}, get_first);\r\n            static_assert(same_as<decltype(result), ranges::minmax_element_result<ranges::iterator_t<Fwd>>>);\r\n            ASSERT(result.min == ranges::end(range));\r\n            ASSERT(result.max == ranges::end(range));\r\n        }\r\n    }\r\n};\r\n\r\nstatic constexpr array<P, 8> pairs = {P{5, 0}, P{5, 1}, P{5, 2}, P{5, 3}, P{5, 4}, P{5, 5}, P{5, 6}, P{5, 7}};\r\n\r\nstruct mm_element {\r\n    template <ranges::forward_range Fwd>\r\n    static constexpr void call() {\r\n        constexpr auto N = pairs.size();\r\n        auto elements    = pairs;\r\n        const Fwd range{elements};\r\n\r\n        ASSERT(*ranges::min_element(range, ranges::less{}, get_first) == P{5, 0});\r\n        ASSERT(*ranges::min_element(ranges::begin(range), ranges::end(range), ranges::less{}, get_first) == P{5, 0});\r\n\r\n        ASSERT(*ranges::max_element(range, ranges::less{}, get_first) == P{5, 0});\r\n        ASSERT(*ranges::max_element(ranges::begin(range), ranges::end(range), ranges::less{}, get_first) == P{5, 0});\r\n\r\n        {\r\n            auto result = ranges::minmax_element(range, ranges::less{}, get_first);\r\n            ASSERT(*result.min == P{5, 0});\r\n            ASSERT(*result.max == P{5, 7});\r\n        }\r\n        {\r\n            auto result = ranges::minmax_element(ranges::begin(range), ranges::end(range), ranges::less{}, get_first);\r\n            ASSERT(*result.min == P{5, 0});\r\n            ASSERT(*result.max == P{5, 7});\r\n        }\r\n\r\n        for (size_t i = 0; i < N; ++i) {\r\n            elements[i] = P{0, 42};\r\n\r\n            ASSERT(*ranges::min_element(range, ranges::less{}, get_first) == P{0, 42});\r\n            ASSERT(\r\n                *ranges::min_element(ranges::begin(range), ranges::end(range), ranges::less{}, get_first) == P{0, 42});\r\n\r\n            ASSERT(*ranges::max_element(range, ranges::less{}, get_first) == (i == 0 ? P{5, 1} : P{5, 0}));\r\n            ASSERT(*ranges::max_element(ranges::begin(range), ranges::end(range), ranges::less{}, get_first)\r\n                   == (i == 0 ? P{5, 1} : P{5, 0}));\r\n\r\n            {\r\n                const auto result = ranges::minmax_element(range, ranges::less{}, get_first);\r\n                ASSERT(*result.min == P{0, 42});\r\n                ASSERT(*result.max == (i == 7 ? P{5, 6} : P{5, 7}));\r\n            }\r\n            {\r\n                const auto result =\r\n                    ranges::minmax_element(ranges::begin(range), ranges::end(range), ranges::less{}, get_first);\r\n                ASSERT(*result.min == P{0, 42});\r\n                ASSERT(*result.max == (i == 7 ? P{5, 6} : P{5, 7}));\r\n            }\r\n\r\n            for (size_t j = i + 1; j < N; ++j) {\r\n                elements[j] = P{0, 13};\r\n\r\n                ASSERT(*ranges::min_element(range, ranges::less{}, get_first) == P{0, 42});\r\n                ASSERT(*ranges::min_element(ranges::begin(range), ranges::end(range), ranges::less{}, get_first)\r\n                       == P{0, 42});\r\n\r\n                ASSERT(*ranges::max_element(range, ranges::less{}, get_first)\r\n                       == (i == 0 ? (j == 1 ? P{5, 2} : P{5, 1}) : P{5, 0}));\r\n                ASSERT(*ranges::max_element(ranges::begin(range), ranges::end(range), ranges::less{}, get_first)\r\n                       == (i == 0 ? (j == 1 ? P{5, 2} : P{5, 1}) : P{5, 0}));\r\n\r\n                {\r\n                    const auto result = ranges::minmax_element(range, ranges::less{}, get_first);\r\n                    ASSERT(*result.min == P{0, 42});\r\n                    ASSERT(*result.max == (j == 7 ? (i == 6 ? P{5, 5} : P{5, 6}) : P{5, 7}));\r\n                }\r\n                {\r\n                    const auto result =\r\n                        ranges::minmax_element(ranges::begin(range), ranges::end(range), ranges::less{}, get_first);\r\n                    ASSERT(*result.min == P{0, 42});\r\n                    ASSERT(*result.max == (j == 7 ? (i == 6 ? P{5, 5} : P{5, 6}) : P{5, 7}));\r\n                }\r\n\r\n                elements[j] = P{5, static_cast<int>(j)};\r\n            }\r\n\r\n            elements[i] = P{5, static_cast<int>(i)};\r\n        }\r\n    }\r\n};\r\n\r\nstruct mm {\r\n    template <ranges::input_range In>\r\n    static constexpr void call() {\r\n        constexpr auto N = pairs.size();\r\n        auto elements    = pairs;\r\n\r\n        ASSERT(ranges::min(In{elements}, ranges::less{}, get_first) == P{5, 0});\r\n        ASSERT(ranges::max(In{elements}, ranges::less{}, get_first) == P{5, 0});\r\n        {\r\n            auto result = ranges::minmax(In{elements}, ranges::less{}, get_first);\r\n            ASSERT(result.min == P{5, 0});\r\n            ASSERT(result.max == P{5, 7});\r\n        }\r\n\r\n        for (size_t i = 0; i < N; ++i) {\r\n            elements[i] = P{0, 42};\r\n\r\n            ASSERT(ranges::min(In{elements}, ranges::less{}, get_first) == P{0, 42});\r\n            ASSERT(ranges::max(In{elements}, ranges::less{}, get_first) == (i == 0 ? P{5, 1} : P{5, 0}));\r\n\r\n            {\r\n                auto result = ranges::minmax(In{elements}, ranges::less{}, get_first);\r\n                static_assert(same_as<decltype(result), ranges::minmax_result<P>>);\r\n                ASSERT(result.min == P{0, 42});\r\n                ASSERT(result.max == (i == 7 ? P{5, 6} : P{5, 7}));\r\n            }\r\n\r\n            for (size_t j = i + 1; j < N; ++j) {\r\n                elements[j] = P{0, 13};\r\n\r\n                ASSERT(ranges::min(In{elements}, ranges::less{}, get_first) == P{0, 42});\r\n\r\n                ASSERT(ranges::max(In{elements}, ranges::less{}, get_first)\r\n                       == (i == 0 ? (j == 1 ? P{5, 2} : P{5, 1}) : P{5, 0}));\r\n\r\n                {\r\n                    auto result = ranges::minmax(In{elements}, ranges::less{}, get_first);\r\n                    static_assert(same_as<decltype(result), ranges::minmax_result<P>>);\r\n                    ASSERT(result.min == P{0, 42});\r\n                    ASSERT(result.max == (j == 7 ? (i == 6 ? P{5, 5} : P{5, 6}) : P{5, 7}));\r\n                }\r\n\r\n                elements[j] = P{5, static_cast<int>(j)};\r\n            }\r\n\r\n            elements[i] = P{5, static_cast<int>(i)};\r\n        }\r\n    }\r\n};\r\n\r\nconstexpr void nonrange_tests() {\r\n    // validate overloads of ranges::min, ranges::max, ranges::minmax, and ranges::clamp which take values directly\r\n\r\n    constexpr auto thirteen           = 13;\r\n    constexpr auto also_thirteen      = thirteen;\r\n    constexpr auto forty_two          = 42;\r\n    constexpr auto thirteen_pair      = P{13, 200};\r\n    constexpr auto also_thirteen_pair = thirteen_pair;\r\n    constexpr auto forty_two_pair     = P{42, 100};\r\n\r\n    ASSERT(&ranges::min(thirteen, forty_two) == &thirteen);\r\n    ASSERT(&ranges::min(forty_two, thirteen) == &thirteen);\r\n    ASSERT(&ranges::min(thirteen, also_thirteen) == &thirteen);\r\n\r\n    ASSERT(&ranges::min(thirteen, forty_two, ranges::greater{}) == &forty_two);\r\n    ASSERT(&ranges::min(forty_two, thirteen, ranges::greater{}) == &forty_two);\r\n    ASSERT(&ranges::min(thirteen, also_thirteen, ranges::greater{}) == &thirteen);\r\n\r\n    ASSERT(&ranges::min(thirteen_pair, forty_two_pair, ranges::greater{}, get_first) == &forty_two_pair);\r\n    ASSERT(&ranges::min(forty_two_pair, thirteen_pair, ranges::greater{}, get_first) == &forty_two_pair);\r\n    ASSERT(&ranges::min(thirteen_pair, P{thirteen_pair}, ranges::greater{}, get_first) == &thirteen_pair);\r\n\r\n    ASSERT(&ranges::max(thirteen, forty_two) == &forty_two);\r\n    ASSERT(&ranges::max(forty_two, thirteen) == &forty_two);\r\n    ASSERT(&ranges::max(thirteen, also_thirteen) == &thirteen);\r\n\r\n    ASSERT(&ranges::max(thirteen, forty_two, ranges::greater{}) == &thirteen);\r\n    ASSERT(&ranges::max(forty_two, thirteen, ranges::greater{}) == &thirteen);\r\n    ASSERT(&ranges::max(thirteen, also_thirteen, ranges::greater{}) == &thirteen);\r\n\r\n    ASSERT(&ranges::max(thirteen_pair, forty_two_pair, ranges::greater{}, get_first) == &thirteen_pair);\r\n    ASSERT(&ranges::max(forty_two_pair, thirteen_pair, ranges::greater{}, get_first) == &thirteen_pair);\r\n    ASSERT(&ranges::max(thirteen_pair, P{thirteen_pair}, ranges::greater{}, get_first) == &thirteen_pair);\r\n\r\n    ASSERT(&ranges::minmax(thirteen, forty_two).min == &thirteen);\r\n    ASSERT(&ranges::minmax(thirteen, forty_two).max == &forty_two);\r\n    ASSERT(&ranges::minmax(forty_two, thirteen).min == &thirteen);\r\n    ASSERT(&ranges::minmax(forty_two, thirteen).max == &forty_two);\r\n    ASSERT(&ranges::minmax(thirteen, also_thirteen).min == &thirteen);\r\n    ASSERT(&ranges::minmax(thirteen, also_thirteen).max == &also_thirteen);\r\n\r\n    ASSERT(&ranges::minmax(thirteen, forty_two, ranges::greater{}).min == &forty_two);\r\n    ASSERT(&ranges::minmax(thirteen, forty_two, ranges::greater{}).max == &thirteen);\r\n    ASSERT(&ranges::minmax(forty_two, thirteen, ranges::greater{}).min == &forty_two);\r\n    ASSERT(&ranges::minmax(forty_two, thirteen, ranges::greater{}).max == &thirteen);\r\n    ASSERT(&ranges::minmax(thirteen, also_thirteen, ranges::greater{}).min == &thirteen);\r\n    ASSERT(&ranges::minmax(thirteen, also_thirteen, ranges::greater{}).max == &also_thirteen);\r\n\r\n    ASSERT(&ranges::minmax(thirteen_pair, forty_two_pair, ranges::greater{}, get_first).min == &forty_two_pair);\r\n    ASSERT(&ranges::minmax(thirteen_pair, forty_two_pair, ranges::greater{}, get_first).max == &thirteen_pair);\r\n    ASSERT(&ranges::minmax(forty_two_pair, thirteen_pair, ranges::greater{}, get_first).min == &forty_two_pair);\r\n    ASSERT(&ranges::minmax(forty_two_pair, thirteen_pair, ranges::greater{}, get_first).max == &thirteen_pair);\r\n    ASSERT(&ranges::minmax(thirteen_pair, also_thirteen_pair, ranges::greater{}, get_first).min == &thirteen_pair);\r\n    ASSERT(&ranges::minmax(thirteen_pair, also_thirteen_pair, ranges::greater{}, get_first).max == &also_thirteen_pair);\r\n\r\n    constexpr auto also_forty_two                      = 42;\r\n    constexpr auto less_than_thirteen                  = 11;\r\n    constexpr auto between_thirteen_and_forty_two      = 37;\r\n    constexpr auto greater_than_forty_two              = 43;\r\n    constexpr auto also_forty_two_pair                 = P{42, 100};\r\n    constexpr auto less_than_thirteen_pair             = P{11, 250};\r\n    constexpr auto between_thirteen_and_forty_two_pair = P{37, 150};\r\n    constexpr auto greater_than_forty_two_pair         = P{43, 50};\r\n\r\n    ASSERT(&ranges::clamp(less_than_thirteen, thirteen, forty_two) == &thirteen);\r\n    ASSERT(&ranges::clamp(also_thirteen, thirteen, forty_two) == &also_thirteen);\r\n    ASSERT(&ranges::clamp(between_thirteen_and_forty_two, thirteen, forty_two) == &between_thirteen_and_forty_two);\r\n    ASSERT(&ranges::clamp(also_forty_two, thirteen, forty_two) == &also_forty_two);\r\n    ASSERT(&ranges::clamp(greater_than_forty_two, thirteen, forty_two) == &forty_two);\r\n\r\n\r\n    ASSERT(&ranges::clamp(less_than_thirteen_pair, forty_two_pair, thirteen_pair, ranges::greater{}, get_first)\r\n           == &thirteen_pair);\r\n    ASSERT(&ranges::clamp(also_thirteen_pair, forty_two_pair, thirteen_pair, ranges::greater{}, get_first)\r\n           == &also_thirteen_pair);\r\n    ASSERT(\r\n        &ranges::clamp(between_thirteen_and_forty_two_pair, forty_two_pair, thirteen_pair, ranges::greater{}, get_first)\r\n        == &between_thirteen_and_forty_two_pair);\r\n    ASSERT(&ranges::clamp(also_forty_two_pair, forty_two_pair, thirteen_pair, ranges::greater{}, get_first)\r\n           == &also_forty_two_pair);\r\n    ASSERT(&ranges::clamp(greater_than_forty_two_pair, forty_two_pair, thirteen_pair, ranges::greater{}, get_first)\r\n           == &forty_two_pair);\r\n}\r\n\r\nconstexpr void init_list_constexpr_tests() {\r\n    ASSERT(\r\n        ranges::min({P{5, 0}, P{5, 1}, P{5, 2}, P{5, 3}, P{5, 4}, P{5, 5}, P{5, 6}, P{5, 7}}, ranges::less{}, get_first)\r\n        == P{5, 0});\r\n    ASSERT(\r\n        ranges::max({P{5, 0}, P{5, 1}, P{5, 2}, P{5, 3}, P{5, 4}, P{5, 5}, P{5, 6}, P{5, 7}}, ranges::less{}, get_first)\r\n        == P{5, 0});\r\n    auto result = ranges::minmax(\r\n        {P{5, 0}, P{5, 1}, P{5, 2}, P{5, 3}, P{5, 4}, P{5, 5}, P{5, 6}, P{5, 7}}, ranges::less{}, get_first);\r\n    static_assert(same_as<decltype(result), ranges::minmax_result<P>>);\r\n    ASSERT(result.min == P{5, 0});\r\n    ASSERT(result.max == P{5, 7});\r\n}\r\n\r\nconstexpr void mm_element_constexpr_tests() {\r\n    // (min|max|minmax)_element don't care about size, iterator difference, refinements of forward, commonality,\r\n    // _or_ proxy vs. non-proxy reference. Let's take a couple variations of forward, and one\r\n    // variation of each stronger category.\r\n\r\n    using test::range, test::Sized, test::CanDifference, test::Common, test::CanCompare, test::ProxyRef, test::fwd;\r\n    using E = const P;\r\n\r\n    mm_element::call<range<fwd, E, Sized::no, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::yes>>();\r\n    mm_element::call<range<fwd, E, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n\r\n    mm_element::call<range<bidirectional_iterator_tag, E, Sized::no, CanDifference::no, Common::yes, CanCompare::yes,\r\n        ProxyRef::yes>>();\r\n    mm_element::call<range<random_access_iterator_tag, E, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes,\r\n        ProxyRef::yes>>();\r\n    mm_element::call<range<contiguous_iterator_tag, E, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes,\r\n        ProxyRef::no>>();\r\n}\r\n\r\nconstexpr void mm_constexpr_tests() {\r\n    // Range overloads of (min|max|minmax) don't care about size, iterator difference, commonality, _or_ proxy vs.\r\n    // non-proxy reference. They _do_ distinguish input vs. forward. Let's take a couple variations of input and\r\n    // forward, and one variation of each stronger category.\r\n\r\n    using test::range, test::Sized, test::CanDifference, test::Common, test::CanCompare, test::ProxyRef, test::input,\r\n        test::fwd;\r\n    using E = const P;\r\n\r\n    mm::call<range<input, E, Sized::no, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::yes>>();\r\n    mm::call<range<input, E, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n\r\n    mm::call<range<fwd, E, Sized::no, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::yes>>();\r\n    mm::call<range<fwd, E, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n\r\n    mm::call<range<bidirectional_iterator_tag, E, Sized::no, CanDifference::no, Common::yes, CanCompare::yes,\r\n        ProxyRef::yes>>();\r\n    mm::call<range<random_access_iterator_tag, E, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes,\r\n        ProxyRef::yes>>();\r\n    mm::call<range<contiguous_iterator_tag, E, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes,\r\n        ProxyRef::no>>();\r\n}\r\n\r\nvoid test_gh_1893() {\r\n    // GH-1893: ranges::clamp was sometimes performing too many projections,\r\n    // and we should conform at least in release mode.\r\n    // the test protects us from the wrong implementation with std::move instead of std::forward in ranges::clamp\r\n    // so reference_wrappers and the lambda are necessary.\r\n    string val           = \"meow\";\r\n    string low           = \"m\";\r\n    string high          = \"n\";\r\n    int projection_count = 0;\r\n    const auto clamped   = ranges::clamp(\r\n        ref(val), ref(low), ref(high), [](auto x, auto y) { return x < y; },\r\n        [&projection_count](const auto& x) -> decltype(auto) {\r\n            ++projection_count;\r\n            return x.get();\r\n        });\r\n    (void) clamped;\r\n#ifdef _DEBUG\r\n    ASSERT(projection_count == 5);\r\n#else\r\n    ASSERT(projection_count == 3);\r\n#endif\r\n    ASSERT(val == \"meow\");\r\n}\r\n\r\nclass input_move_iterator {\r\npublic:\r\n    using iterator_category = input_iterator_tag;\r\n    using iterator_concept  = input_iterator_tag;\r\n    using difference_type   = ptrdiff_t;\r\n    using value_type        = shared_ptr<int>;\r\n    using pointer           = shared_ptr<int>*;\r\n    using reference         = shared_ptr<int>&&;\r\n\r\n    input_move_iterator() = default;\r\n    explicit input_move_iterator(shared_ptr<int>* ptr) : m_ptr(ptr) {}\r\n\r\n    reference operator*() const {\r\n        return ranges::iter_move(m_ptr);\r\n    }\r\n    pointer operator->() const {\r\n        return m_ptr;\r\n    }\r\n\r\n    input_move_iterator& operator++() {\r\n        ++m_ptr;\r\n        return *this;\r\n    }\r\n    input_move_iterator operator++(int) {\r\n        input_move_iterator tmp = *this;\r\n        ++*this;\r\n        return tmp;\r\n    }\r\n\r\n    friend bool operator==(const input_move_iterator&, const input_move_iterator&) = default;\r\n\r\nprivate:\r\n    shared_ptr<int>* m_ptr{nullptr};\r\n};\r\n\r\nvoid test_gh_2900() {\r\n    // GH-2900: <algorithm>: ranges::minmax initializes minmax_result with the moved value\r\n    {\r\n        // check that the random access iterator isn't moved from multiple times\r\n        const string str{\"this long string will be dynamically allocated\"};\r\n        vector<string> v{str};\r\n        ranges::subrange rng{move_iterator{v.begin()}, move_iterator{v.end()}};\r\n        auto result = ranges::minmax(rng);\r\n        assert(result.min == str);\r\n        assert(result.max == str);\r\n    }\r\n    {\r\n        // check that the input iterator isn't moved from multiple times\r\n        shared_ptr<int> a[] = {make_shared<int>(42)};\r\n        ranges::subrange rng{input_move_iterator{a}, input_move_iterator{a + 1}};\r\n        auto result = ranges::minmax(rng);\r\n        assert(a[0] == nullptr);\r\n        assert(result.min != nullptr);\r\n        assert(result.max == result.min);\r\n        assert(*result.max == 42);\r\n    }\r\n}\r\n\r\nint main() {\r\n    static_assert((nonrange_tests(), true));\r\n    nonrange_tests();\r\n\r\n    static_assert((init_list_constexpr_tests(), true));\r\n    init_list_constexpr_tests();\r\n\r\n    static_assert((test_fwd<mm_element_empty, const P>(), true));\r\n    test_fwd<mm_element_empty, const P>();\r\n\r\n    static_assert((mm_element_constexpr_tests(), true));\r\n    test_fwd<mm_element, const P>();\r\n\r\n    static_assert((mm_constexpr_tests(), true));\r\n    test_in<mm, const P>();\r\n\r\n    test_gh_1893();\r\n    test_gh_2900();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_mismatch/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_mismatch/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nconstexpr void smoke_test() {\r\n    using ranges::dangling, ranges::equal_to, ranges::iterator_t, ranges::mismatch, ranges::mismatch_result;\r\n    using std::same_as;\r\n    using P = std::pair<int, int>;\r\n    using R = std::array<P, 3>;\r\n\r\n    R const x                                    = {{{0, 42}, {2, 42}, {4, 42}}};\r\n    std::array<std::pair<long, long>, 3> const y = {{{13, 0}, {13, 2}, {13, 5}}};\r\n\r\n    // Validate that mismatch_result aliases in_in_result\r\n    static_assert(same_as<mismatch_result<int, double>, ranges::in_in_result<int, double>>);\r\n\r\n    // Validate dangling story\r\n    static_assert(\r\n        same_as<decltype(mismatch(borrowed<false>{}, borrowed<false>{})), mismatch_result<dangling, dangling>>);\r\n    static_assert(same_as<decltype(mismatch(borrowed<false>{}, borrowed<true>{})), mismatch_result<dangling, int*>>);\r\n    static_assert(same_as<decltype(mismatch(borrowed<true>{}, borrowed<false>{})), mismatch_result<int*, dangling>>);\r\n    static_assert(same_as<decltype(mismatch(borrowed<true>{}, borrowed<true>{})), mismatch_result<int*, int*>>);\r\n\r\n    {\r\n        // Validate sized ranges\r\n        auto result = mismatch(x, y, equal_to{}, get_first, get_second);\r\n        using I1    = iterator_t<R const>;\r\n        using I2    = std::array<std::pair<long, long>, 3>::const_iterator;\r\n        static_assert(same_as<decltype(result), mismatch_result<I1, I2>>);\r\n        assert((*result.in1 == P{4, 42}));\r\n        assert((*result.in2 == std::pair<long, long>{13, 5}));\r\n    }\r\n    {\r\n        // Validate non-sized ranges\r\n        auto result = mismatch(basic_borrowed_range{x}, basic_borrowed_range{y}, equal_to{}, get_first, get_second);\r\n        using I1    = iterator_t<basic_borrowed_range<P const>>;\r\n        using I2    = iterator_t<basic_borrowed_range<std::pair<long, long> const>>;\r\n        static_assert(same_as<decltype(result), mismatch_result<I1, I2>>);\r\n        assert((*result.in1 == P{4, 42}));\r\n        assert((*result.in2 == std::pair<long, long>{13, 5}));\r\n    }\r\n    {\r\n        // Validate sized iterator + sentinel pairs\r\n        auto result = mismatch(x.begin(), x.end(), y.begin(), y.end(), equal_to{}, get_first, get_second);\r\n        using I1    = iterator_t<R const>;\r\n        using I2    = std::array<std::pair<long, long>, 3>::const_iterator;\r\n        static_assert(same_as<decltype(result), mismatch_result<I1, I2>>);\r\n        assert((*result.in1 == P{4, 42}));\r\n        assert((*result.in2 == std::pair<long, long>{13, 5}));\r\n    }\r\n    {\r\n        // Validate non-sized iterator + sentinel pairs\r\n        basic_borrowed_range wrapped_x{x};\r\n        basic_borrowed_range wrapped_y{y};\r\n        auto result = mismatch(\r\n            wrapped_x.begin(), wrapped_x.end(), wrapped_y.begin(), wrapped_y.end(), equal_to{}, get_first, get_second);\r\n        using I1 = iterator_t<decltype(wrapped_x)>;\r\n        using I2 = iterator_t<decltype(wrapped_y)>;\r\n        static_assert(same_as<decltype(result), mismatch_result<I1, I2>>);\r\n        assert((*result.in1 == P{4, 42}));\r\n        assert((*result.in2 == std::pair<long, long>{13, 5}));\r\n    }\r\n}\r\n\r\nint main() {\r\n    static_assert((smoke_test(), true));\r\n    smoke_test();\r\n}\r\n\r\n#if !defined(_PREFAST_) && !defined(__EDG__) // TRANSITION, GH-1030 and GH-3567\r\nstruct instantiator {\r\n    template <class In1, class In2>\r\n    static void call() {\r\n        using ranges::begin, ranges::end, ranges::mismatch, ranges::iterator_t;\r\n\r\n        In1 in1{std::span<const int, 0>{}};\r\n        In2 in2{std::span<const int, 0>{}};\r\n\r\n        if constexpr (!is_permissive) {\r\n            (void) mismatch(in1, in2);\r\n            (void) mismatch(begin(in1), end(in1), begin(in2), end(in2));\r\n        }\r\n\r\n        BinaryPredicateFor<iterator_t<In1>, iterator_t<In2>> pred{};\r\n        (void) mismatch(in1, in2, pred);\r\n        (void) mismatch(begin(in1), end(in1), begin(in2), end(in2), pred);\r\n\r\n        HalfProjectedBinaryPredicateFor<iterator_t<In2>> halfpred{};\r\n        ProjectionFor<iterator_t<In1>> halfproj{};\r\n        (void) mismatch(in1, in2, halfpred, halfproj);\r\n        (void) mismatch(begin(in1), end(in1), begin(in2), end(in2), halfpred, halfproj);\r\n\r\n        ProjectedBinaryPredicate<0, 1> projpred{};\r\n        ProjectionFor<iterator_t<In1>, 0> proj1{};\r\n        ProjectionFor<iterator_t<In2>, 1> proj2{};\r\n        (void) mismatch(in1, in2, projpred, proj1, proj2);\r\n        (void) mismatch(begin(in1), end(in1), begin(in2), end(in2), projpred, proj1, proj2);\r\n    }\r\n};\r\n\r\ntemplate void test_in_in<instantiator, const int, const int>();\r\n#endif // ^^^ no workaround ^^^\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_move/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_move/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct int_wrapper {\r\n    int val                 = 10;\r\n    constexpr int_wrapper() = default;\r\n    constexpr int_wrapper(int x) : val{x} {}\r\n    constexpr int_wrapper(int_wrapper&& that) : val{exchange(that.val, -1)} {}\r\n    constexpr int_wrapper& operator=(int_wrapper&& that) {\r\n        val = exchange(that.val, -1);\r\n        return *this;\r\n    }\r\n    auto operator<=>(const int_wrapper&) const = default;\r\n};\r\n\r\n// Validate that move_result aliases in_out_result\r\nstatic_assert(same_as<ranges::move_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(\r\n    same_as<decltype(ranges::move(borrowed<false>{}, nullptr_to<int>)), ranges::move_result<ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::move(borrowed<true>{}, nullptr_to<int>)), ranges::move_result<int*, int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr int_wrapper expected_output[3] = {13, 55, 12345};\r\n    static constexpr int_wrapper expected_input[3]  = {-1, -1, -1};\r\n\r\n    template <ranges::input_range Read, indirectly_writable<ranges::range_rvalue_reference_t<Read>> Write>\r\n    static constexpr void call() {\r\n        using ranges::move, ranges::move_result, ranges::equal, ranges::iterator_t;\r\n        {\r\n            int_wrapper input[3]  = {13, 55, 12345};\r\n            int_wrapper output[3] = {-2, -2, -2};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = move(wrapped_input, Write{output});\r\n            static_assert(same_as<decltype(result), move_result<iterator_t<Read>, Write>>);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == output + 3);\r\n            assert(equal(output, expected_output));\r\n            assert(equal(input, expected_input));\r\n        }\r\n        {\r\n            int_wrapper input[3]  = {13, 55, 12345};\r\n            int_wrapper output[3] = {-2, -2, -2};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = move(wrapped_input.begin(), wrapped_input.end(), Write{output});\r\n            static_assert(same_as<decltype(result), move_result<iterator_t<Read>, Write>>);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == output + 3);\r\n            assert(equal(output, expected_output));\r\n            assert(equal(input, expected_input));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n#ifndef _PREFAST_ // TRANSITION, GH-1030\r\n    static_assert((test_in_write<instantiator, int_wrapper, int_wrapper>(), true));\r\n#endif // TRANSITION, GH-1030\r\n    test_in_write<instantiator, int_wrapper, int_wrapper>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_move_backward/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_move_backward/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct int_wrapper {\r\n    int val = 10;\r\n\r\n    constexpr int_wrapper() = default;\r\n    constexpr int_wrapper(int x) : val{x} {}\r\n    constexpr int_wrapper(int_wrapper&& that) : val{exchange(that.val, -1)} {}\r\n    constexpr int_wrapper& operator=(int_wrapper&& that) {\r\n        val = exchange(that.val, -1);\r\n        return *this;\r\n    }\r\n    auto operator<=>(const int_wrapper&) const = default;\r\n};\r\n\r\n#ifdef _M_CEE // TRANSITION, VSO-1664341\r\nconstexpr auto get_int_wrapper_val = [](const int_wrapper& w) { return w.val; };\r\n#else // ^^^ workaround / no workaround vvv\r\nconstexpr auto get_int_wrapper_val = &int_wrapper::val;\r\n#endif // ^^^ no workaround ^^^\r\n\r\n// Validate that move_backward_result aliases in_out_result\r\nstatic_assert(same_as<ranges::move_backward_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::move_backward(borrowed<false>{}, nullptr_to<int>)),\r\n    ranges::move_backward_result<ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::move_backward(borrowed<true>{}, nullptr_to<int>)),\r\n    ranges::move_backward_result<int*, int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr int expected_output[]      = {13, 42, 1729};\r\n    static constexpr int expected_input[]       = {-1, -1, -1};\r\n    static constexpr int expected_overlapping[] = {-1, 0, 1, 2};\r\n\r\n    template <ranges::bidirectional_range R1, ranges::bidirectional_range R2>\r\n    static constexpr void call() {\r\n        // For the second range, we need an iterator to the end; it's expedient to simply ignore ranges with\r\n        // differing iterator and sentinel types (i.e., ranges that don't satisfy common_range).\r\n        if constexpr (ranges::common_range<R2>) {\r\n            using ranges::move_backward, ranges::move_backward_result, ranges::equal, ranges::iterator_t;\r\n\r\n            { // Validate range overload\r\n                int_wrapper input[]  = {13, 42, 1729};\r\n                int_wrapper output[] = {-2, -2, -2};\r\n                R1 wrapped_input{input};\r\n                R2 wrapped_output{output};\r\n                same_as<move_backward_result<iterator_t<R1>, iterator_t<R2>>> auto result =\r\n                    move_backward(wrapped_input, wrapped_output.end());\r\n                assert(result.in == wrapped_input.end());\r\n                assert(result.out == wrapped_output.begin());\r\n                assert(equal(output, expected_output, ranges::equal_to{}, get_int_wrapper_val));\r\n                assert(equal(input, expected_input, ranges::equal_to{}, get_int_wrapper_val));\r\n            }\r\n            { // Validate iterator + sentinel overload\r\n                int_wrapper input[]  = {13, 42, 1729};\r\n                int_wrapper output[] = {-2, -2, -2};\r\n                R1 wrapped_input{input};\r\n                R2 wrapped_output{output};\r\n                same_as<move_backward_result<iterator_t<R1>, iterator_t<R2>>> auto result =\r\n                    move_backward(wrapped_input.begin(), wrapped_input.end(), wrapped_output.end());\r\n                assert(result.in == wrapped_input.end());\r\n                assert(result.out == wrapped_output.begin());\r\n                assert(equal(output, expected_output, ranges::equal_to{}, get_int_wrapper_val));\r\n                assert(equal(input, expected_input, ranges::equal_to{}, get_int_wrapper_val));\r\n            }\r\n            { // Validate overlapping ranges\r\n                int_wrapper io[] = {0, 1, 2, 42};\r\n                R1 wrapped_input{span{io}.first<3>()};\r\n                R2 wrapped_output{span{io}.last<3>()};\r\n                same_as<move_backward_result<iterator_t<R1>, iterator_t<R2>>> auto result =\r\n                    move_backward(wrapped_input, wrapped_output.end());\r\n                assert(result.in == wrapped_input.end());\r\n                assert(result.out == wrapped_output.begin());\r\n                assert(equal(io, expected_overlapping, ranges::equal_to{}, get_int_wrapper_val));\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nconstexpr void test_memmove() {\r\n    // Get some coverage for the memmove optimization, which we would not otherwise have since we do not currently\r\n    // unwrap output iterators. TRANSITION, GH-893\r\n    using ranges::move_backward, ranges::move_backward_result, ranges::begin, ranges::end, ranges::equal;\r\n\r\n    struct S { // move-only and trivially copyable\r\n        int val = 10;\r\n\r\n        constexpr S() = default;\r\n        constexpr S(int x) : val{x} {}\r\n        constexpr S(S&&)                 = default;\r\n        constexpr S& operator=(S&&)      = default;\r\n        auto operator<=>(const S&) const = default;\r\n    };\r\n\r\n    { // Validate range overload\r\n        S input[]                                               = {13, 42, 1729};\r\n        S output[]                                              = {-2, -2, -2};\r\n        const same_as<move_backward_result<S*, S*>> auto result = move_backward(input, end(output));\r\n        assert(result.in == end(input));\r\n        assert(result.out == begin(output));\r\n        assert(equal(output, input));\r\n    }\r\n    { // Validate iterator + sentinel overload\r\n        S input[]                                               = {13, 42, 1729};\r\n        S output[]                                              = {-2, -2, -2};\r\n        const same_as<move_backward_result<S*, S*>> auto result = move_backward(begin(input), end(input), end(output));\r\n        assert(result.in == end(input));\r\n        assert(result.out == begin(output));\r\n        assert(equal(output, input));\r\n    }\r\n    { // Validate overlapping ranges\r\n        S io[]                                                  = {0, 1, 2, 42};\r\n        const same_as<move_backward_result<S*, S*>> auto result = move_backward(io + 0, io + 3, io + 4);\r\n        assert(result.in == io + 3);\r\n        assert(result.out == io + 1);\r\n        constexpr int expected[] = {0, 0, 1, 2};\r\n#ifdef _M_CEE // TRANSITION, VSO-1664341\r\n        assert(equal(io, expected, ranges::equal_to{}, [](const S& s) { return s.val; }));\r\n#else // ^^^ workaround / no workaround vvv\r\n        assert(equal(io, expected, ranges::equal_to{}, &S::val));\r\n#endif // ^^^ no workaround ^^^\r\n    }\r\n}\r\n\r\nint main() {\r\n    static_assert((test_bidi_bidi<instantiator, int_wrapper, int_wrapper>(), true));\r\n    test_bidi_bidi<instantiator, int_wrapper, int_wrapper>();\r\n\r\n    static_assert((test_memmove(), true));\r\n    test_memmove();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_none_of/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_none_of/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto is_even = [](auto const& x) { return x % 2 == 0; };\r\nconstexpr auto is_odd  = [](auto const& x) { return x % 2 != 0; };\r\n\r\nstruct instantiator {\r\n    static constexpr P input[3] = {{0, 13}, {7, 13}, {4, 13}};\r\n\r\n    template <ranges::input_range Read>\r\n    static constexpr void call() {\r\n        using ranges::none_of;\r\n        { // Validate iterator + sentinel overload\r\n            Read wrapped_input1{input};\r\n            Read wrapped_input2{input};\r\n            Read wrapped_input3{input};\r\n            Read wrapped_input4{input};\r\n\r\n            auto result = none_of(wrapped_input1.begin(), wrapped_input1.end(), is_even, get_first);\r\n            static_assert(same_as<decltype(result), bool>);\r\n            assert(!result);\r\n            assert(none_of(wrapped_input2.begin(), wrapped_input2.end(), is_even, get_second));\r\n            assert(!none_of(wrapped_input3.begin(), wrapped_input3.end(), is_odd, get_first));\r\n            assert(!none_of(wrapped_input4.begin(), wrapped_input4.end(), is_odd, get_second));\r\n        }\r\n        { // Validate range overload\r\n            Read wrapped_input1{input};\r\n            Read wrapped_input2{input};\r\n            Read wrapped_input3{input};\r\n            Read wrapped_input4{input};\r\n\r\n            auto result = none_of(wrapped_input1, is_even, get_first);\r\n            static_assert(same_as<decltype(result), bool>);\r\n            assert(!result);\r\n            assert(none_of(wrapped_input2, is_even, get_second));\r\n            assert(!none_of(wrapped_input3, is_odd, get_first));\r\n            assert(!none_of(wrapped_input4, is_odd, get_second));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_in<instantiator, const P>(), true));\r\n    test_in<instantiator, const P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_nth_element/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_nth_element/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::nth_element(borrowed<false>{}, nullptr_to<int>)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::nth_element(borrowed<true>{}, nullptr_to<int>)), int*>);\r\n\r\nusing P = pair<int, int>;\r\n\r\nstruct instantiator {\r\n    static constexpr int keys[] = {7, 6, 5, 4, 3, 2, 1, 0};\r\n\r\n    template <ranges::random_access_range R>\r\n    static constexpr void call() {\r\n        using ranges::nth_element, ranges::all_of, ranges::find, ranges::iterator_t, ranges::less, ranges::none_of,\r\n            ranges::size;\r\n\r\n        P input[size(keys)];\r\n        const auto init = [&] {\r\n            for (size_t j = 0; j < size(keys); ++j) {\r\n                input[j] = P{keys[j], static_cast<int>(10 + j)};\r\n            }\r\n        };\r\n\r\n        // Validate range overload\r\n        for (int i = 0; i < int{size(keys)}; ++i) {\r\n            init();\r\n            const R wrapped{input};\r\n            const auto nth                           = wrapped.begin() + i;\r\n            const same_as<iterator_t<R>> auto result = nth_element(wrapped, nth, less{}, get_first);\r\n            assert(result == wrapped.end());\r\n            assert((*nth == P{i, static_cast<int>(10 + (find(keys, i) - keys))}));\r\n            if (nth != wrapped.end()) {\r\n                assert(all_of(wrapped.begin(), nth, [&](auto&& x) { return get_first(x) <= get_first(*nth); }));\r\n                assert(all_of(nth, wrapped.end(), [&](auto&& x) { return get_first(*nth) <= get_first(x); }));\r\n            }\r\n        }\r\n\r\n        // Validate iterator overload\r\n        for (int i = 0; i < int{size(keys)}; ++i) {\r\n            init();\r\n            const R wrapped{input};\r\n            const auto nth = wrapped.begin() + i;\r\n            const same_as<iterator_t<R>> auto result =\r\n                nth_element(wrapped.begin(), nth, wrapped.end(), less{}, get_first);\r\n            assert(result == wrapped.end());\r\n            assert((input[i] == P{i, static_cast<int>(10 + (find(keys, i) - keys))}));\r\n            if (nth != wrapped.end()) {\r\n                assert(all_of(wrapped.begin(), nth, [&](auto&& x) { return get_first(x) <= get_first(*nth); }));\r\n                assert(all_of(nth, wrapped.end(), [&](auto&& x) { return get_first(*nth) <= get_first(x); }));\r\n            }\r\n        }\r\n\r\n        {\r\n            // Validate empty range\r\n            const R range{span<P, 0>{}};\r\n            const same_as<iterator_t<R>> auto result = nth_element(range, range.begin(), less{}, get_first);\r\n            assert(result == range.end());\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_random<instantiator, P>(), true));\r\n    test_random<instantiator, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_partial_sort/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_partial_sort/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::partial_sort(borrowed<false>{}, nullptr_to<int>)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::partial_sort(borrowed<true>{}, nullptr_to<int>)), int*>);\r\n\r\nstruct instantiator {\r\n    static constexpr P sorted[] = {{0, 16}, {1, 12}, {2, 17}, {3, 13}, {4, 15}, {5, 11}, {6, 14}, {7, 10}};\r\n\r\n    template <ranges::random_access_range R>\r\n    static constexpr void call() {\r\n        using ranges::partial_sort, ranges::equal, ranges::iterator_t, ranges::less, ranges::next, ranges::size;\r\n\r\n        { // Validate range overload\r\n            for (size_t i = 0; i <= size(sorted); ++i) {\r\n                P elements[] = {{7, 10}, {5, 11}, {1, 12}, {3, 13}, {6, 14}, {4, 15}, {0, 16}, {2, 17}};\r\n                const R range{elements};\r\n                const auto middle                        = next(range.begin(), static_cast<int>(i));\r\n                const same_as<iterator_t<R>> auto result = partial_sort(range, middle, less{}, get_first);\r\n                assert(result == range.end());\r\n                assert(equal(range.begin(), middle, sorted + 0, sorted + i));\r\n            }\r\n        }\r\n\r\n        { // Validate iterator overload\r\n            for (size_t i = 0; i <= size(sorted); ++i) {\r\n                P elements[] = {{7, 10}, {5, 11}, {1, 12}, {3, 13}, {6, 14}, {4, 15}, {0, 16}, {2, 17}};\r\n                const R range{elements};\r\n                const auto middle = next(range.begin(), static_cast<int>(i));\r\n                const same_as<iterator_t<R>> auto result =\r\n                    partial_sort(range.begin(), middle, range.end(), less{}, get_first);\r\n                assert(result == range.end());\r\n                assert(equal(range.begin(), middle, sorted + 0, sorted + i));\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_random<instantiator, P>(), true));\r\n    test_random<instantiator, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_partial_sort_copy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_partial_sort_copy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <string>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate that partial_sort_copy_result aliases in_out_result\r\nstatic_assert(same_as<ranges::partial_sort_copy_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::partial_sort_copy(borrowed<false>{}, borrowed<false>{})),\r\n    ranges::partial_sort_copy_result<ranges::dangling, ranges::dangling>>);\r\nstatic_assert(same_as<decltype(ranges::partial_sort_copy(borrowed<false>{}, borrowed<true>{})),\r\n    ranges::partial_sort_copy_result<ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::partial_sort_copy(borrowed<true>{}, borrowed<false>{})),\r\n    ranges::partial_sort_copy_result<int*, ranges::dangling>>);\r\nstatic_assert(same_as<decltype(ranges::partial_sort_copy(borrowed<true>{}, borrowed<true>{})),\r\n    ranges::partial_sort_copy_result<int*, int*>>);\r\n\r\nconstexpr P source[]        = {{5, 11}, {1, 12}, {3, 13}, {4, 15}, {0, 16}, {2, 17}};\r\nconstexpr P expected_vals[] = {{0, 16}, {1, 12}, {2, 17}, {3, 13}, {4, 15}, {5, 11}};\r\n\r\nstruct instantiator1 {\r\n    template <ranges::input_range In, ranges::random_access_range Out>\r\n    static constexpr void call() {\r\n        using ranges::partial_sort_copy, ranges::partial_sort_copy_result, ranges::equal, ranges::iterator_t,\r\n            ranges::less, ranges::min, ranges::next, ranges::size;\r\n\r\n        P output[2 * size(source)];\r\n        constexpr int sizes[] = {0, int{size(source) / 2}, int{size(source)}, int{2 * size(source)}};\r\n\r\n        { // Validate range overload\r\n            for (const int& i : sizes) {\r\n                In range1{source};\r\n                Out range2{span{output}.first(static_cast<size_t>(i))};\r\n                const same_as<partial_sort_copy_result<iterator_t<In>, iterator_t<Out>>> auto result =\r\n                    partial_sort_copy(range1, range2, less{}, get_first, get_first);\r\n                assert(result.in == range1.end());\r\n                const auto n = min(i, int{size(source)});\r\n                assert(result.out == range2.begin() + n);\r\n                assert(equal(range2.begin(), range2.begin() + n, expected_vals, expected_vals + n));\r\n            }\r\n\r\n            // also with empty input\r\n            In range1{span<const P, 0>{}};\r\n            Out range2{output};\r\n            const same_as<partial_sort_copy_result<iterator_t<In>, iterator_t<Out>>> auto result =\r\n                partial_sort_copy(range1, range2, less{}, get_first, get_first);\r\n            assert(result.in == range1.end());\r\n            assert(result.out == range2.begin());\r\n        }\r\n    }\r\n};\r\n\r\nstruct instantiator2 {\r\n    template <ranges::input_range In, ranges::random_access_range Out>\r\n    static constexpr void call() {\r\n        using ranges::partial_sort_copy, ranges::partial_sort_copy_result, ranges::equal, ranges::iterator_t,\r\n            ranges::less, ranges::min, ranges::next, ranges::size;\r\n\r\n        P output[2 * size(source)];\r\n        constexpr int sizes[] = {0, int{size(source) / 2}, int{size(source)}, int{2 * size(source)}};\r\n\r\n        { // Validate iterator overload\r\n            for (const int& i : sizes) {\r\n                In range1{source};\r\n                Out range2{span{output}.first(static_cast<size_t>(i))};\r\n                const same_as<partial_sort_copy_result<iterator_t<In>, iterator_t<Out>>> auto result =\r\n                    partial_sort_copy(\r\n                        range1.begin(), range1.end(), range2.begin(), range2.end(), less{}, get_first, get_first);\r\n                assert(result.in == range1.end());\r\n                const auto n = min(i, int{size(source)});\r\n                assert(result.out == range2.begin() + n);\r\n                assert(equal(range2.begin(), range2.begin() + n, expected_vals, expected_vals + n));\r\n            }\r\n\r\n            // also with empty input\r\n            In range1{span<const P, 0>{}};\r\n            Out range2{output};\r\n            const same_as<partial_sort_copy_result<iterator_t<In>, iterator_t<Out>>> auto result = partial_sort_copy(\r\n                range1.begin(), range1.end(), range2.begin(), range2.end(), less{}, get_first, get_first);\r\n            assert(result.in == range1.end());\r\n            assert(result.out == range2.begin());\r\n        }\r\n    }\r\n};\r\n\r\n#ifdef TEST_EVERYTHING\r\nint main() {\r\n    // No constexpr tests - these overrun the compilers' constexpr step limits quickly\r\n    test_in_random<instantiator1, const P, P>();\r\n    test_in_random<instantiator2, const P, P>();\r\n}\r\n#else // ^^^ test all range combinations / test only interesting range combos vvv\r\nconstexpr void run_tests() {\r\n    using namespace test;\r\n    using test::iterator, test::range;\r\n    // The algorithm uses advance(i, s) in the input range, so it's slightly sensitive to that range's commonality\r\n    // and/or difference capability. We therefore test three kinds of source ranges:\r\n    using source_input = range<input, const P, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>;\r\n    using source_forward =\r\n        range<fwd, const P, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>;\r\n    using source_random =\r\n        range<random, const P, Sized::no, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::yes>;\r\n\r\n    // The result range must be random access - it's passed to various heap algorithm internals. Let's go ahead and use\r\n    // all 15 permutations of random access (or contiguous) ranges:\r\n    with_random_ranges<instantiator1, P>::call<source_input>();\r\n    with_random_ranges<instantiator1, P>::call<source_forward>();\r\n    with_random_ranges<instantiator1, P>::call<source_random>();\r\n\r\n    with_random_ranges<instantiator2, P>::call<source_input>();\r\n    with_random_ranges<instantiator2, P>::call<source_forward>();\r\n    with_random_ranges<instantiator2, P>::call<source_random>();\r\n}\r\n\r\nstruct weird_pair : pair<string, string> {\r\n    using pair<string, string>::pair;\r\n\r\n    weird_pair& operator=(const P& p) {\r\n        first  = to_string(p.second);\r\n        second = to_string(p.first);\r\n        return *this;\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((run_tests(), true));\r\n    run_tests();\r\n\r\n    {\r\n        constexpr auto proj                = [](const weird_pair& s) { return stoi(s.second); };\r\n        const weird_pair expected_result[] = {{\"16\", \"0\"}, {\"12\", \"1\"}, {\"17\", \"2\"}};\r\n        weird_pair actual[ranges::size(expected_result)];\r\n\r\n        auto result = ranges::partial_sort_copy(source, actual, ranges::less{}, get_first, proj);\r\n        assert(result.in == ranges::end(source));\r\n        assert(result.out == ranges::end(actual));\r\n\r\n        assert(ranges::equal(actual, expected_result));\r\n    }\r\n}\r\n#endif // TEST_EVERYTHING\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_partition/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_partition/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Covers ranges::is_partitioned and ranges::partition (and bits of ranges::partition_point)\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <numeric>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n#define ASSERT(...) assert((__VA_ARGS__))\r\n\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto is_even = [](int i) { return i % 2 == 0; };\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::partition(borrowed<false>{}, is_even)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::partition(borrowed<true>{}, is_even)), ranges::subrange<int*>>);\r\n\r\nstruct empty_test {\r\n    template <ranges::input_range Range>\r\n    static constexpr void call() {\r\n        // Validate empty ranges\r\n        using ranges::is_partitioned, ranges::partition, ranges::partition_point;\r\n        {\r\n            Range range{span<P, 0>{}};\r\n            ASSERT(is_partitioned(range, is_even, get_first));\r\n        }\r\n        {\r\n            Range range{span<P, 0>{}};\r\n            ASSERT(is_partitioned(range.begin(), range.end(), is_even, get_first));\r\n        }\r\n\r\n        if constexpr (ranges::forward_range<Range>) {\r\n            const Range range{span<P, 0>{}};\r\n            {\r\n                const auto result = partition(range, is_even, get_first);\r\n                ASSERT(result.begin() == range.end());\r\n                ASSERT(result.end() == range.end());\r\n            }\r\n            {\r\n                const auto result = partition(range.begin(), range.end(), is_even, get_first);\r\n                ASSERT(result.begin() == range.end());\r\n                ASSERT(result.end() == range.end());\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nstruct partition_test {\r\n    static constexpr array elements = {P{0, 42}, P{1, 42}, P{2, 42}, P{3, 42}, P{4, 42}, P{5, 42}, P{6, 42}, P{7, 42}};\r\n\r\n    template <ranges::input_range Range>\r\n    static constexpr void call() {\r\n        using ranges::is_partitioned, ranges::partition, ranges::partition_point, ranges::is_permutation,\r\n            ranges::subrange;\r\n\r\n        { // Validate is_partitioned\r\n            auto pairs = elements;\r\n\r\n            {\r\n                Range range{pairs};\r\n                ASSERT(!is_partitioned(range, is_even, get_first));\r\n            }\r\n            {\r\n                Range range{pairs};\r\n                ASSERT(!is_partitioned(range.begin(), range.end(), is_even, get_first));\r\n            }\r\n        }\r\n\r\n        if constexpr (ranges::forward_range<Range>) {\r\n            { // Validate range overloads of partition, is_partitioned, partition_point\r\n                auto pairs = elements;\r\n                const Range range{pairs};\r\n                const auto mid = ranges::next(range.begin(), 4);\r\n\r\n                {\r\n                    auto result = partition(range, is_even, get_first);\r\n                    ASSERT(result.begin() == mid);\r\n                    ASSERT(result.end() == range.end());\r\n                }\r\n                ASSERT(is_permutation(subrange{range.begin(), mid}, array{0, 2, 4, 6}, ranges::equal_to{}, get_first));\r\n                ASSERT(is_partitioned(range, is_even, get_first));\r\n                ASSERT(partition_point(range, is_even, get_first) == mid);\r\n            }\r\n\r\n            { // Validate iterator overloads of partition, is_partitioned, partition_point\r\n                auto pairs = elements;\r\n                const Range range{pairs};\r\n                const auto mid = ranges::next(range.begin(), 4);\r\n\r\n                {\r\n                    auto result = partition(range.begin(), range.end(), is_even, get_first);\r\n                    ASSERT(result.begin() == mid);\r\n                    ASSERT(result.end() == range.end());\r\n                }\r\n                ASSERT(is_permutation(subrange{range.begin(), mid}, array{0, 2, 4, 6}, ranges::equal_to{}, get_first));\r\n                ASSERT(is_partitioned(range.begin(), range.end(), is_even, get_first));\r\n                ASSERT(partition_point(range.begin(), range.end(), is_even, get_first) == mid);\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_in<empty_test, P>(), true));\r\n    test_in<empty_test, P>();\r\n\r\n    static_assert((test_in<partition_test, P>(), true));\r\n    test_in<partition_test, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_partition_copy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_partition_copy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <numeric>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n#define ASSERT(...) assert((__VA_ARGS__))\r\n\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto is_even = [](int i) { return i % 2 == 0; };\r\n\r\n// Validate that partition_copy_result aliases in_out_out_result\r\nstatic_assert(\r\n    same_as<ranges::partition_copy_result<int, double, void*>, ranges::in_out_out_result<int, double, void*>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::partition_copy(borrowed<false>{}, nullptr_to<int>, nullptr_to<long>, is_even)),\r\n    ranges::partition_copy_result<ranges::dangling, int*, long*>>);\r\nstatic_assert(same_as<decltype(ranges::partition_copy(borrowed<true>{}, nullptr_to<int>, nullptr_to<long>, is_even)),\r\n    ranges::partition_copy_result<int*, int*, long*>>);\r\n\r\nstruct empty_test {\r\n    template <ranges::input_range Range, indirectly_writable<ranges::range_reference_t<Range>> Out1,\r\n        indirectly_writable<ranges::range_reference_t<Range>> Out2>\r\n    static constexpr void call() {\r\n        // Validate empty ranges\r\n        using ranges::partition_copy, ranges::partition_copy_result, ranges::iterator_t;\r\n\r\n        {\r\n            Range range{span<const P, 0>{}};\r\n            same_as<partition_copy_result<iterator_t<Range>, Out1, Out2>> auto result =\r\n                partition_copy(range, Out1{nullptr}, Out2{nullptr}, is_even, get_first);\r\n            ASSERT(result.in == range.end());\r\n            ASSERT(result.out1.peek() == nullptr);\r\n            ASSERT(result.out2.peek() == nullptr);\r\n        }\r\n        {\r\n            Range range{span<const P, 0>{}};\r\n            same_as<partition_copy_result<iterator_t<Range>, Out1, Out2>> auto result =\r\n                partition_copy(range.begin(), range.end(), Out1{nullptr}, Out2{nullptr}, is_even, get_first);\r\n            ASSERT(result.in == range.end());\r\n            ASSERT(result.out1.peek() == nullptr);\r\n            ASSERT(result.out2.peek() == nullptr);\r\n        }\r\n    }\r\n};\r\n\r\nstruct partition_copy_test {\r\n    static constexpr int N = 32;\r\n\r\n    template <ranges::input_range R, indirectly_writable<ranges::range_reference_t<R>> O1,\r\n        indirectly_writable<ranges::range_reference_t<R>> O2>\r\n    static constexpr void call() {\r\n        using ranges::partition_copy;\r\n\r\n        P source[N];\r\n        for (int i = 0; i < N; ++i) {\r\n            source[i] = {i, 42};\r\n        }\r\n\r\n        for (int i = 0; i < N; ++i) {\r\n            P dest[N];\r\n            ranges::fill(dest, P{-1, 13});\r\n\r\n            const R range{source};\r\n            auto result = partition_copy(range, O1{dest}, O2{dest + i}, [i](int x) { return x < i; }, get_first);\r\n            assert(result.in == range.end());\r\n            assert(result.out1.peek() == dest + i);\r\n            assert(result.out2.peek() == dest + N);\r\n            assert(ranges::equal(source, dest));\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class Instantiator, class Elem>\r\nconstexpr void run_tests() {\r\n    // Call Instantiator::template call</*...stuff...*/>() with a range whose element type is Elem, and two iterators to\r\n    // which Elem is writable, whose properties are \"interesting\" for ranges::partition_copy. What combinations of\r\n    // properties are \"interesting\"?\r\n\r\n    // For the input range, the algorithm simply unwraps iterators and chugs through looking for the end. It doesn't\r\n    // * take advantage of any capabilities provided by stronger-than-input categories,\r\n    // * care if the sentinel and iterator have the same type,\r\n    // * care if it can difference iterators with sentinels or each other, or\r\n    // * care about the size of the input range at all. (It can't even use size info to check the outputs, because we\r\n    // don't how many of the input elements will be written through each output.)\r\n    // TLDR: One input range with a proxy reference type and no other notable properties (the so-called \"weakest\" input\r\n    // range) suffices.\r\n\r\n    // For the outputs, both of which are treated equivalently, the algorithm is similarly oblivious to properties other\r\n    // than reference type and the ability to unwrap/rewrap. These could simply be the \"weakest\" writable iterator type\r\n    // in with_writable_iterators.\r\n\r\n    // Out of simple paranoia, let's permute ProxyRef; seven extra pointless tests won't hurt.\r\n\r\n    using test::range, test::iterator, test::input, test::output, test::CanCompare, test::CanDifference, test::Common,\r\n        test::ProxyRef, test::Sized;\r\n\r\n    using proxy_range     = range<input, Elem, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>;\r\n    using non_proxy_range = range<input, Elem, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::no>;\r\n    using proxy_iterator  = iterator<output, remove_const_t<Elem>, CanDifference::no, CanCompare::no, ProxyRef::yes>;\r\n    using non_proxy_iterator = iterator<output, remove_const_t<Elem>, CanDifference::no, CanCompare::no, ProxyRef::no>;\r\n\r\n    Instantiator::template call<proxy_range, proxy_iterator, proxy_iterator>();\r\n    Instantiator::template call<proxy_range, proxy_iterator, non_proxy_iterator>();\r\n    Instantiator::template call<proxy_range, non_proxy_iterator, proxy_iterator>();\r\n    Instantiator::template call<proxy_range, non_proxy_iterator, non_proxy_iterator>();\r\n    Instantiator::template call<non_proxy_range, proxy_iterator, proxy_iterator>();\r\n    Instantiator::template call<non_proxy_range, proxy_iterator, non_proxy_iterator>();\r\n    Instantiator::template call<non_proxy_range, non_proxy_iterator, proxy_iterator>();\r\n    Instantiator::template call<non_proxy_range, non_proxy_iterator, non_proxy_iterator>();\r\n}\r\n\r\nint main() {\r\n    static_assert((run_tests<empty_test, const P>(), true));\r\n    run_tests<empty_test, const P>();\r\n\r\n    static_assert((run_tests<partition_copy_test, const P>(), true));\r\n    run_tests<partition_copy_test, const P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_partition_point/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_partition_point/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <numeric>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n#define ASSERT(...) assert((__VA_ARGS__))\r\n\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto is_even = [](int i) { return i % 2 == 0; };\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::partition_point(borrowed<false>{}, is_even)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::partition_point(borrowed<true>{}, is_even)), int*>);\r\n\r\nstruct empty_test {\r\n    template <ranges::forward_range Range>\r\n    static constexpr void call() {\r\n        // Validate empty ranges\r\n        using ranges::partition_point;\r\n\r\n        const Range range{span<P, 0>{}};\r\n        ASSERT(partition_point(range, is_even, get_first) == range.end());\r\n        ASSERT(partition_point(range.begin(), range.end(), is_even, get_first) == range.end());\r\n    }\r\n};\r\n\r\nstruct partition_point_test {\r\n    template <ranges::forward_range R>\r\n    static constexpr void call() {\r\n        using ranges::partition_point;\r\n        int elements[200];\r\n        iota(ranges::begin(elements), ranges::end(elements), 0);\r\n\r\n        size_t bound = ranges::size(elements);\r\n        if (is_constant_evaluated()) {\r\n            bound = min(bound, size_t{10}); // to avoid constant expression step limits\r\n        }\r\n\r\n        for (size_t i = 0; i < bound; ++i) {\r\n            const R range{span{elements}.first(i)};\r\n            for (size_t j = 0; j < i; ++j) {\r\n                assert(partition_point(range, [j](int x) { return x < static_cast<int>(j); }).peek() == elements + j);\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_fwd<empty_test, P>(), true));\r\n    test_fwd<empty_test, P>();\r\n\r\n    static_assert((test_fwd<partition_point_test, const int>(), true));\r\n    test_fwd<partition_point_test, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_permutations/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_permutations/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstdio>\r\n#include <random>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\n#pragma warning(disable : 6294) // Ill-defined for-loop: initial condition does not satisfy test. Loop body not executed\r\n\r\n// Validate that (next|prev)_permutation_result alias in_found_result\r\nstatic_assert(same_as<ranges::next_permutation_result<int>, ranges::in_found_result<int>>);\r\nstatic_assert(same_as<ranges::prev_permutation_result<int>, ranges::in_found_result<int>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(\r\n    same_as<decltype(ranges::next_permutation(borrowed<false>{})), ranges::next_permutation_result<ranges::dangling>>);\r\nstatic_assert(same_as<decltype(ranges::next_permutation(borrowed<true>{})), ranges::next_permutation_result<int*>>);\r\nstatic_assert(\r\n    same_as<decltype(ranges::prev_permutation(borrowed<false>{})), ranges::prev_permutation_result<ranges::dangling>>);\r\nstatic_assert(same_as<decltype(ranges::prev_permutation(borrowed<true>{})), ranges::prev_permutation_result<int*>>);\r\n\r\nconstexpr int perm1[][1] = {{0}};\r\nconstexpr int perm4[][4] = {{0, 1, 2, 3}, {0, 1, 3, 2}, {0, 2, 1, 3}, {0, 2, 3, 1}, {0, 3, 1, 2}, {0, 3, 2, 1},\r\n    {1, 0, 2, 3}, {1, 0, 3, 2}, {1, 2, 0, 3}, {1, 2, 3, 0}, {1, 3, 0, 2}, {1, 3, 2, 0}, {2, 0, 1, 3}, {2, 0, 3, 1},\r\n    {2, 1, 0, 3}, {2, 1, 3, 0}, {2, 3, 0, 1}, {2, 3, 1, 0}, {3, 0, 1, 2}, {3, 0, 2, 1}, {3, 1, 0, 2}, {3, 1, 2, 0},\r\n    {3, 2, 0, 1}, {3, 2, 1, 0}};\r\nconstexpr int perm5[][5] = {{0, 1, 2, 3, 4}, {0, 1, 2, 4, 3}, {0, 1, 3, 2, 4}, {0, 1, 3, 4, 2}, {0, 1, 4, 2, 3},\r\n    {0, 1, 4, 3, 2}, {0, 2, 1, 3, 4}, {0, 2, 1, 4, 3}, {0, 2, 3, 1, 4}, {0, 2, 3, 4, 1}, {0, 2, 4, 1, 3},\r\n    {0, 2, 4, 3, 1}, {0, 3, 1, 2, 4}, {0, 3, 1, 4, 2}, {0, 3, 2, 1, 4}, {0, 3, 2, 4, 1}, {0, 3, 4, 1, 2},\r\n    {0, 3, 4, 2, 1}, {0, 4, 1, 2, 3}, {0, 4, 1, 3, 2}, {0, 4, 2, 1, 3}, {0, 4, 2, 3, 1}, {0, 4, 3, 1, 2},\r\n    {0, 4, 3, 2, 1}, {1, 0, 2, 3, 4}, {1, 0, 2, 4, 3}, {1, 0, 3, 2, 4}, {1, 0, 3, 4, 2}, {1, 0, 4, 2, 3},\r\n    {1, 0, 4, 3, 2}, {1, 2, 0, 3, 4}, {1, 2, 0, 4, 3}, {1, 2, 3, 0, 4}, {1, 2, 3, 4, 0}, {1, 2, 4, 0, 3},\r\n    {1, 2, 4, 3, 0}, {1, 3, 0, 2, 4}, {1, 3, 0, 4, 2}, {1, 3, 2, 0, 4}, {1, 3, 2, 4, 0}, {1, 3, 4, 0, 2},\r\n    {1, 3, 4, 2, 0}, {1, 4, 0, 2, 3}, {1, 4, 0, 3, 2}, {1, 4, 2, 0, 3}, {1, 4, 2, 3, 0}, {1, 4, 3, 0, 2},\r\n    {1, 4, 3, 2, 0}, {2, 0, 1, 3, 4}, {2, 0, 1, 4, 3}, {2, 0, 3, 1, 4}, {2, 0, 3, 4, 1}, {2, 0, 4, 1, 3},\r\n    {2, 0, 4, 3, 1}, {2, 1, 0, 3, 4}, {2, 1, 0, 4, 3}, {2, 1, 3, 0, 4}, {2, 1, 3, 4, 0}, {2, 1, 4, 0, 3},\r\n    {2, 1, 4, 3, 0}, {2, 3, 0, 1, 4}, {2, 3, 0, 4, 1}, {2, 3, 1, 0, 4}, {2, 3, 1, 4, 0}, {2, 3, 4, 0, 1},\r\n    {2, 3, 4, 1, 0}, {2, 4, 0, 1, 3}, {2, 4, 0, 3, 1}, {2, 4, 1, 0, 3}, {2, 4, 1, 3, 0}, {2, 4, 3, 0, 1},\r\n    {2, 4, 3, 1, 0}, {3, 0, 1, 2, 4}, {3, 0, 1, 4, 2}, {3, 0, 2, 1, 4}, {3, 0, 2, 4, 1}, {3, 0, 4, 1, 2},\r\n    {3, 0, 4, 2, 1}, {3, 1, 0, 2, 4}, {3, 1, 0, 4, 2}, {3, 1, 2, 0, 4}, {3, 1, 2, 4, 0}, {3, 1, 4, 0, 2},\r\n    {3, 1, 4, 2, 0}, {3, 2, 0, 1, 4}, {3, 2, 0, 4, 1}, {3, 2, 1, 0, 4}, {3, 2, 1, 4, 0}, {3, 2, 4, 0, 1},\r\n    {3, 2, 4, 1, 0}, {3, 4, 0, 1, 2}, {3, 4, 0, 2, 1}, {3, 4, 1, 0, 2}, {3, 4, 1, 2, 0}, {3, 4, 2, 0, 1},\r\n    {3, 4, 2, 1, 0}, {4, 0, 1, 2, 3}, {4, 0, 1, 3, 2}, {4, 0, 2, 1, 3}, {4, 0, 2, 3, 1}, {4, 0, 3, 1, 2},\r\n    {4, 0, 3, 2, 1}, {4, 1, 0, 2, 3}, {4, 1, 0, 3, 2}, {4, 1, 2, 0, 3}, {4, 1, 2, 3, 0}, {4, 1, 3, 0, 2},\r\n    {4, 1, 3, 2, 0}, {4, 2, 0, 1, 3}, {4, 2, 0, 3, 1}, {4, 2, 1, 0, 3}, {4, 2, 1, 3, 0}, {4, 2, 3, 0, 1},\r\n    {4, 2, 3, 1, 0}, {4, 3, 0, 1, 2}, {4, 3, 0, 2, 1}, {4, 3, 1, 0, 2}, {4, 3, 1, 2, 0}, {4, 3, 2, 0, 1},\r\n    {4, 3, 2, 1, 0}};\r\nconstexpr int perm6[][6] = {{0, 0, 1, 1, 2, 2}, {0, 0, 1, 2, 1, 2}, {0, 0, 1, 2, 2, 1}, {0, 0, 2, 1, 1, 2},\r\n    {0, 0, 2, 1, 2, 1}, {0, 0, 2, 2, 1, 1}, {0, 1, 0, 1, 2, 2}, {0, 1, 0, 2, 1, 2}, {0, 1, 0, 2, 2, 1},\r\n    {0, 1, 1, 0, 2, 2}, {0, 1, 1, 2, 0, 2}, {0, 1, 1, 2, 2, 0}, {0, 1, 2, 0, 1, 2}, {0, 1, 2, 0, 2, 1},\r\n    {0, 1, 2, 1, 0, 2}, {0, 1, 2, 1, 2, 0}, {0, 1, 2, 2, 0, 1}, {0, 1, 2, 2, 1, 0}, {0, 2, 0, 1, 1, 2},\r\n    {0, 2, 0, 1, 2, 1}, {0, 2, 0, 2, 1, 1}, {0, 2, 1, 0, 1, 2}, {0, 2, 1, 0, 2, 1}, {0, 2, 1, 1, 0, 2},\r\n    {0, 2, 1, 1, 2, 0}, {0, 2, 1, 2, 0, 1}, {0, 2, 1, 2, 1, 0}, {0, 2, 2, 0, 1, 1}, {0, 2, 2, 1, 0, 1},\r\n    {0, 2, 2, 1, 1, 0}, {1, 0, 0, 1, 2, 2}, {1, 0, 0, 2, 1, 2}, {1, 0, 0, 2, 2, 1}, {1, 0, 1, 0, 2, 2},\r\n    {1, 0, 1, 2, 0, 2}, {1, 0, 1, 2, 2, 0}, {1, 0, 2, 0, 1, 2}, {1, 0, 2, 0, 2, 1}, {1, 0, 2, 1, 0, 2},\r\n    {1, 0, 2, 1, 2, 0}, {1, 0, 2, 2, 0, 1}, {1, 0, 2, 2, 1, 0}, {1, 1, 0, 0, 2, 2}, {1, 1, 0, 2, 0, 2},\r\n    {1, 1, 0, 2, 2, 0}, {1, 1, 2, 0, 0, 2}, {1, 1, 2, 0, 2, 0}, {1, 1, 2, 2, 0, 0}, {1, 2, 0, 0, 1, 2},\r\n    {1, 2, 0, 0, 2, 1}, {1, 2, 0, 1, 0, 2}, {1, 2, 0, 1, 2, 0}, {1, 2, 0, 2, 0, 1}, {1, 2, 0, 2, 1, 0},\r\n    {1, 2, 1, 0, 0, 2}, {1, 2, 1, 0, 2, 0}, {1, 2, 1, 2, 0, 0}, {1, 2, 2, 0, 0, 1}, {1, 2, 2, 0, 1, 0},\r\n    {1, 2, 2, 1, 0, 0}, {2, 0, 0, 1, 1, 2}, {2, 0, 0, 1, 2, 1}, {2, 0, 0, 2, 1, 1}, {2, 0, 1, 0, 1, 2},\r\n    {2, 0, 1, 0, 2, 1}, {2, 0, 1, 1, 0, 2}, {2, 0, 1, 1, 2, 0}, {2, 0, 1, 2, 0, 1}, {2, 0, 1, 2, 1, 0},\r\n    {2, 0, 2, 0, 1, 1}, {2, 0, 2, 1, 0, 1}, {2, 0, 2, 1, 1, 0}, {2, 1, 0, 0, 1, 2}, {2, 1, 0, 0, 2, 1},\r\n    {2, 1, 0, 1, 0, 2}, {2, 1, 0, 1, 2, 0}, {2, 1, 0, 2, 0, 1}, {2, 1, 0, 2, 1, 0}, {2, 1, 1, 0, 0, 2},\r\n    {2, 1, 1, 0, 2, 0}, {2, 1, 1, 2, 0, 0}, {2, 1, 2, 0, 0, 1}, {2, 1, 2, 0, 1, 0}, {2, 1, 2, 1, 0, 0},\r\n    {2, 2, 0, 0, 1, 1}, {2, 2, 0, 1, 0, 1}, {2, 2, 0, 1, 1, 0}, {2, 2, 1, 0, 0, 1}, {2, 2, 1, 0, 1, 0},\r\n    {2, 2, 1, 1, 0, 0}};\r\nconstexpr int perm8[][8] = {{0, 0, 0, 0, 0, 0, 0, 0}};\r\n\r\nstruct int_wrapper {\r\n    int val = 10;\r\n\r\n    constexpr int_wrapper() = default;\r\n    constexpr int_wrapper(int x) : val{x} {}\r\n    constexpr int_wrapper(const int_wrapper&) = default;\r\n    constexpr int_wrapper(int_wrapper&& that) : val{exchange(that.val, -1)} {}\r\n    constexpr int_wrapper& operator=(const int_wrapper&) = default;\r\n\r\n    constexpr int_wrapper& operator=(int_wrapper&& that) {\r\n        val = exchange(that.val, -1);\r\n        return *this;\r\n    }\r\n    auto operator<=>(const int_wrapper&) const = default;\r\n};\r\n\r\nconstexpr auto get_val = [](auto&& x) { return static_cast<const int_wrapper&>(x).val; };\r\n\r\ntemplate <auto& Expected>\r\nstruct next_perm_instantiator {\r\n    template <ranges::bidirectional_range R>\r\n    static constexpr void call() {\r\n        using ranges::next_permutation, ranges::next_permutation_result, ranges::equal, ranges::iterator_t;\r\n\r\n        constexpr auto number_of_permutations = static_cast<int>(ranges::size(Expected));\r\n\r\n        { // Validate range overload\r\n            int_wrapper input[ranges::size(Expected[0])];\r\n            ranges::copy(Expected[0], input);\r\n\r\n            for (int i = 1; i < number_of_permutations; ++i) {\r\n                R range{input};\r\n                const same_as<next_permutation_result<iterator_t<R>>> auto result =\r\n                    next_permutation(range, ranges::less{}, get_val);\r\n                assert(result.in == range.end());\r\n                assert(result.found);\r\n                assert(equal(input, Expected[i], ranges::equal_to{}, get_val));\r\n            }\r\n\r\n            R range{input};\r\n            const same_as<next_permutation_result<iterator_t<R>>> auto result =\r\n                next_permutation(range, ranges::less{}, get_val);\r\n            assert(result.in == range.end());\r\n            assert(!result.found);\r\n            assert(equal(input, Expected[0]));\r\n        }\r\n\r\n        { // Validate iterator overload\r\n            int_wrapper input[ranges::size(Expected[0])];\r\n            ranges::copy(Expected[0], input);\r\n\r\n            for (int i = 1; i < number_of_permutations; ++i) {\r\n                R range{input};\r\n                const same_as<next_permutation_result<iterator_t<R>>> auto result =\r\n                    next_permutation(range.begin(), range.end(), ranges::less{}, get_val);\r\n                assert(result.in == range.end());\r\n                assert(result.found);\r\n                assert(equal(input, Expected[i]));\r\n            }\r\n\r\n            R range{input};\r\n            const same_as<next_permutation_result<iterator_t<R>>> auto result =\r\n                next_permutation(range.begin(), range.end(), ranges::less{}, get_val);\r\n            assert(result.in == range.end());\r\n            assert(!result.found);\r\n            assert(equal(input, Expected[0]));\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <auto& Expected>\r\nstruct prev_perm_instantiator {\r\n    template <ranges::bidirectional_range R>\r\n    static constexpr void call() {\r\n        using ranges::prev_permutation, ranges::prev_permutation_result, ranges::equal, ranges::iterator_t;\r\n\r\n        constexpr auto number_of_permutations = static_cast<int>(ranges::size(Expected));\r\n\r\n        { // Validate range overload\r\n            int_wrapper input[ranges::size(Expected[0])];\r\n            ranges::copy(Expected[number_of_permutations - 1], input);\r\n\r\n            for (int i = number_of_permutations - 1; i-- > 0;) {\r\n                R range{input};\r\n                const same_as<prev_permutation_result<iterator_t<R>>> auto result =\r\n                    prev_permutation(range, ranges::less{}, get_val);\r\n                assert(result.in == range.end());\r\n                assert(result.found);\r\n                assert(equal(input, Expected[i]));\r\n            }\r\n\r\n            R range{input};\r\n            const same_as<prev_permutation_result<iterator_t<R>>> auto result =\r\n                prev_permutation(range, ranges::less{}, get_val);\r\n            assert(result.in == range.end());\r\n            assert(!result.found);\r\n            assert(equal(input, Expected[number_of_permutations - 1]));\r\n        }\r\n\r\n        { // Validate iterator overload\r\n            int_wrapper input[ranges::size(Expected[0])];\r\n            ranges::copy(Expected[number_of_permutations - 1], input);\r\n\r\n            for (int i = number_of_permutations - 1; i-- > 0;) {\r\n                R range{input};\r\n                const same_as<prev_permutation_result<iterator_t<R>>> auto result =\r\n                    prev_permutation(range.begin(), range.end(), ranges::less{}, get_val);\r\n                assert(result.in == range.end());\r\n                assert(result.found);\r\n                assert(equal(input, Expected[i]));\r\n            }\r\n\r\n            R range{input};\r\n            const same_as<prev_permutation_result<iterator_t<R>>> auto result =\r\n                prev_permutation(range.begin(), range.end(), ranges::less{}, get_val);\r\n            assert(result.in == range.end());\r\n            assert(!result.found);\r\n            assert(equal(input, Expected[number_of_permutations - 1]));\r\n        }\r\n    }\r\n};\r\n\r\nstruct empty_range_test {\r\n    template <ranges::bidirectional_range R>\r\n    static constexpr void call() {\r\n        using ranges::next_permutation, ranges::next_permutation_result, ranges::prev_permutation,\r\n            ranges::prev_permutation_result, ranges::iterator_t;\r\n\r\n        { // Validate range overload, next_permutation\r\n            R range{span<int_wrapper, 0>{}};\r\n            const same_as<next_permutation_result<iterator_t<R>>> auto result =\r\n                next_permutation(range, ranges::less{}, get_val);\r\n            assert(result.in == range.end());\r\n            assert(!result.found);\r\n        }\r\n\r\n        { // Validate iterator overload, next_permutation\r\n            R range{span<int_wrapper, 0>{}};\r\n            const same_as<next_permutation_result<iterator_t<R>>> auto result =\r\n                next_permutation(range.begin(), range.end(), ranges::less{}, get_val);\r\n            assert(result.in == range.end());\r\n            assert(!result.found);\r\n        }\r\n\r\n        { // Validate range overload, prev_permutation\r\n            R range{span<int_wrapper, 0>{}};\r\n            const same_as<prev_permutation_result<iterator_t<R>>> auto result =\r\n                prev_permutation(range, ranges::less{}, get_val);\r\n            assert(result.in == range.end());\r\n            assert(!result.found);\r\n        }\r\n\r\n        { // Validate iterator overload, prev_permutation\r\n            R range{span<int_wrapper, 0>{}};\r\n            const same_as<prev_permutation_result<iterator_t<R>>> auto result =\r\n                prev_permutation(range.begin(), range.end(), ranges::less{}, get_val);\r\n            assert(result.in == range.end());\r\n            assert(!result.found);\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_bidi<empty_range_test, int_wrapper>(), true));\r\n    test_bidi<empty_range_test, int_wrapper>();\r\n\r\n    static_assert((test_bidi<next_perm_instantiator<perm1>, int_wrapper>(), true));\r\n    static_assert((test_bidi<next_perm_instantiator<perm4>, int_wrapper>(), true));\r\n    static_assert((test_bidi<next_perm_instantiator<perm8>, int_wrapper>(), true));\r\n    test_bidi<next_perm_instantiator<perm1>, int_wrapper>();\r\n    test_bidi<next_perm_instantiator<perm4>, int_wrapper>();\r\n    test_bidi<next_perm_instantiator<perm5>, int_wrapper>();\r\n    test_bidi<next_perm_instantiator<perm6>, int_wrapper>();\r\n    test_bidi<next_perm_instantiator<perm8>, int_wrapper>();\r\n\r\n    static_assert((test_bidi<prev_perm_instantiator<perm1>, int_wrapper>(), true));\r\n    static_assert((test_bidi<prev_perm_instantiator<perm4>, int_wrapper>(), true));\r\n    static_assert((test_bidi<prev_perm_instantiator<perm8>, int_wrapper>(), true));\r\n    test_bidi<prev_perm_instantiator<perm1>, int_wrapper>();\r\n    test_bidi<prev_perm_instantiator<perm4>, int_wrapper>();\r\n    test_bidi<prev_perm_instantiator<perm5>, int_wrapper>();\r\n    test_bidi<prev_perm_instantiator<perm6>, int_wrapper>();\r\n    test_bidi<prev_perm_instantiator<perm8>, int_wrapper>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_remove/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_remove/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::remove(borrowed<false>{}, 42)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::remove(borrowed<true>{}, 42)), ranges::subrange<int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr P expected[3] = {{0, 99}, {2, 99}, {4, 99}};\r\n\r\n    template <ranges::forward_range Read>\r\n    static constexpr void call() {\r\n        using ranges::remove, ranges::subrange, ranges::equal, ranges::iterator_t;\r\n\r\n        size_t projectionCounter = 0;\r\n        auto projection          = [&projectionCounter](const P& val) {\r\n            ++projectionCounter;\r\n            return val.second;\r\n        };\r\n\r\n        { // Validate iterator + sentinel overload\r\n            P input[5] = {{0, 99}, {1, 47}, {2, 99}, {3, 47}, {4, 99}};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = remove(wrapped_input.begin(), wrapped_input.end(), 47, projection);\r\n            static_assert(same_as<decltype(result), subrange<iterator_t<Read>>>);\r\n            assert(result.begin() == next(wrapped_input.begin(), 3));\r\n            assert(result.end() == wrapped_input.end());\r\n            assert(equal(expected, span{input}.first<3>()));\r\n            assert(projectionCounter == ranges::size(input));\r\n        }\r\n\r\n        projectionCounter = 0;\r\n\r\n        { // Validate range overload\r\n            P input[5] = {{0, 99}, {1, 47}, {2, 99}, {3, 47}, {4, 99}};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = remove(wrapped_input, 47, projection);\r\n            static_assert(same_as<decltype(result), subrange<iterator_t<Read>>>);\r\n            assert(result.begin() == next(wrapped_input.begin(), 3));\r\n            assert(result.end() == wrapped_input.end());\r\n            assert(equal(expected, span{input}.first<3>()));\r\n            assert(projectionCounter == ranges::size(input));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_fwd<instantiator, P>(), true));\r\n    test_fwd<instantiator, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_remove_copy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_remove_copy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate that remove_copy_result aliases in_out_result\r\nstatic_assert(same_as<ranges::remove_copy_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::remove_copy(borrowed<false>{}, static_cast<int*>(nullptr), 42)),\r\n    ranges::remove_copy_result<ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::remove_copy(borrowed<true>{}, static_cast<int*>(nullptr), 42)),\r\n    ranges::remove_copy_result<int*, int*>>);\r\n\r\nstruct counted_projection {\r\n    size_t& counter;\r\n\r\n    constexpr auto operator()(const P& val) const noexcept(is_nothrow_copy_constructible_v<decltype(P::second)>) {\r\n        ++counter;\r\n        return val.second;\r\n    }\r\n};\r\n\r\nstruct instantiator {\r\n    static constexpr P input[5]    = {{0, 99}, {1, 47}, {2, 99}, {3, 47}, {4, 99}};\r\n    static constexpr P expected[3] = {{0, 99}, {2, 99}, {4, 99}};\r\n\r\n    template <ranges::input_range Read, indirectly_writable<ranges::range_reference_t<Read>> Write>\r\n    static constexpr void call() {\r\n        // Fails checking the indirect_binary_predicate requirement in C1XX's permissive mode with proxy iterators\r\n        // (probably related to VSO-566808)\r\n        constexpr bool non_proxy =\r\n            is_reference_v<ranges::range_reference_t<Read>> && is_reference_v<iter_reference_t<Write>>;\r\n        if constexpr (non_proxy || !is_permissive) {\r\n            using ranges::remove_copy, ranges::remove_copy_result, ranges::equal, ranges::iterator_t;\r\n\r\n            size_t counter = 0;\r\n            counted_projection projection{counter};\r\n\r\n            { // Validate iterator + sentinel overload\r\n                P output[3] = {{-1, -1}, {-1, -1}, {-1, -1}};\r\n                Read wrapped_input{input};\r\n\r\n                auto result = remove_copy(wrapped_input.begin(), wrapped_input.end(), Write{output}, 47, projection);\r\n                static_assert(same_as<decltype(result), remove_copy_result<iterator_t<Read>, Write>>);\r\n                assert(result.in == wrapped_input.end());\r\n                assert(result.out.peek() == output + 3);\r\n                assert(equal(output, expected));\r\n                assert(counter == ranges::size(input));\r\n            }\r\n\r\n            counter = 0;\r\n\r\n            { // Validate range overload\r\n                P output[3] = {{-1, -1}, {-1, -1}, {-1, -1}};\r\n                Read wrapped_input{input};\r\n\r\n                auto result = remove_copy(wrapped_input, Write{output}, 47, projection);\r\n                static_assert(same_as<decltype(result), remove_copy_result<iterator_t<Read>, Write>>);\r\n                assert(result.in == wrapped_input.end());\r\n                assert(result.out.peek() == output + 3);\r\n                assert(equal(output, expected));\r\n                assert(counter == ranges::size(input));\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nusing test::Common, test::Sized;\r\n\r\ntemplate <class Category, Sized IsSized, Common IsCommon>\r\nusing test_range = test::range<Category, const P, IsSized,\r\n    test::CanDifference{derived_from<Category, random_access_iterator_tag>}, IsCommon,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == Common::yes}, test::ProxyRef::no>;\r\n\r\nint main() {\r\n#ifdef TEST_EVERYTHING\r\n    static_assert((test_in_write<instantiator, const P, P>(), true));\r\n    test_in_write<instantiator, const P, P>();\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    // The algorithm is insensitive to _every_ range property; it's simply a conditional copy.\r\n    // Let's test a range of each category for basic coverage, and a contiguous+sized range just in\r\n    // case some ambitious contributor tries to vectorize some day.\r\n\r\n    using out =\r\n        test::iterator<output_iterator_tag, P, test::CanDifference::no, test::CanCompare::no, test::ProxyRef::no>;\r\n\r\n    instantiator::call<test_range<input_iterator_tag, Sized::no, Common::no>, out>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::no, Common::no>, out>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::no, Common::no>, out>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::no, Common::no>, out>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::yes, Common::yes>, out>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_remove_copy_if/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_remove_copy_if/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto matches = [](const int val) { return val == 47; };\r\n\r\n// Validate that remove_copy_if_result aliases in_out_result\r\nstatic_assert(same_as<ranges::remove_copy_if_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::remove_copy_if(borrowed<false>{}, static_cast<int*>(nullptr), matches)),\r\n    ranges::remove_copy_if_result<ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::remove_copy_if(borrowed<true>{}, static_cast<int*>(nullptr), matches)),\r\n    ranges::remove_copy_if_result<int*, int*>>);\r\n\r\nstruct counted_projection {\r\n    size_t& counter;\r\n\r\n    constexpr auto operator()(const P& val) const noexcept(is_nothrow_copy_constructible_v<decltype(P::second)>) {\r\n        ++counter;\r\n        return val.second;\r\n    }\r\n};\r\n\r\nstruct instantiator {\r\n    static constexpr P input[5]    = {{0, 99}, {1, 47}, {2, 99}, {3, 47}, {4, 99}};\r\n    static constexpr P expected[3] = {{0, 99}, {2, 99}, {4, 99}};\r\n\r\n    template <ranges::input_range Read, indirectly_writable<ranges::range_reference_t<Read>> Write>\r\n    static constexpr void call() {\r\n        // Fails checking the indirect_binary_predicate requirement in C1XX's permissive mode with proxy iterators\r\n        // (probably related to VSO-566808)\r\n        constexpr bool non_proxy =\r\n            is_reference_v<ranges::range_reference_t<Read>> && is_reference_v<iter_reference_t<Write>>;\r\n        if constexpr (non_proxy || !is_permissive) {\r\n            using ranges::remove_copy_if, ranges::remove_copy_if_result, ranges::equal, ranges::iterator_t;\r\n\r\n            size_t counter = 0;\r\n            counted_projection projection{counter};\r\n\r\n            { // Validate iterator + sentinel overload\r\n                P output[3] = {{-1, -1}, {-1, -1}, {-1, -1}};\r\n                Read wrapped_input{input};\r\n                auto result =\r\n                    remove_copy_if(wrapped_input.begin(), wrapped_input.end(), Write{output}, matches, projection);\r\n                static_assert(same_as<decltype(result), remove_copy_if_result<iterator_t<Read>, Write>>);\r\n                assert(result.in == wrapped_input.end());\r\n                assert(result.out.peek() == output + 3);\r\n                assert(equal(output, expected));\r\n                assert(counter == ranges::size(input));\r\n            }\r\n\r\n            counter = 0;\r\n\r\n            { // Validate range overload\r\n                P output[3] = {{-1, -1}, {-1, -1}, {-1, -1}};\r\n                Read wrapped_input{input};\r\n                auto result = remove_copy_if(wrapped_input, Write{output}, matches, projection);\r\n                static_assert(same_as<decltype(result), remove_copy_if_result<iterator_t<Read>, Write>>);\r\n                assert(result.in == wrapped_input.end());\r\n                assert(result.out.peek() == output + 3);\r\n                assert(equal(output, expected));\r\n                assert(counter == ranges::size(input));\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nusing test::Common, test::Sized;\r\n\r\ntemplate <class Category, Sized IsSized, Common IsCommon>\r\nusing test_range = test::range<Category, const P, IsSized,\r\n    test::CanDifference{derived_from<Category, random_access_iterator_tag>}, IsCommon,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == Common::yes}, test::ProxyRef::no>;\r\n\r\nint main() {\r\n#ifdef TEST_EVERYTHING\r\n    static_assert((test_in_write<instantiator, const P, P>(), true));\r\n    test_in_write<instantiator, const P, P>();\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    // The algorithm is insensitive to _every_ range property; it's simply a conditional copy.\r\n    // Let's test a range of each category for basic coverage, and a contiguous+sized range just in\r\n    // case some ambitious contributor tries to vectorize some day.\r\n\r\n    using out =\r\n        test::iterator<output_iterator_tag, P, test::CanDifference::no, test::CanCompare::no, test::ProxyRef::no>;\r\n\r\n    instantiator::call<test_range<input_iterator_tag, Sized::no, Common::no>, out>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::no, Common::no>, out>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::no, Common::no>, out>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::no, Common::no>, out>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::yes, Common::yes>, out>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_remove_if/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_remove_if/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto matches = [](const int val) { return val == 47; };\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::remove_if(borrowed<false>{}, matches)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::remove_if(borrowed<true>{}, matches)), ranges::subrange<int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr P expected[3] = {{0, 99}, {2, 99}, {4, 99}};\r\n\r\n    template <ranges::forward_range Read>\r\n    static constexpr void call() {\r\n        using ranges::remove_if, ranges::subrange, ranges::equal, ranges::iterator_t;\r\n\r\n        size_t projectionCounter = 0;\r\n        auto projection          = [&projectionCounter](const P& val) {\r\n            ++projectionCounter;\r\n            return val.second;\r\n        };\r\n\r\n        { // Validate iterator + sentinel overload\r\n            P input[5] = {{0, 99}, {1, 47}, {2, 99}, {3, 47}, {4, 99}};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = remove_if(wrapped_input.begin(), wrapped_input.end(), matches, projection);\r\n            static_assert(same_as<decltype(result), subrange<iterator_t<Read>>>);\r\n            assert(result.begin() == next(wrapped_input.begin(), 3));\r\n            assert(result.end() == wrapped_input.end());\r\n            assert(equal(expected, span{input}.first<3>()));\r\n            assert(projectionCounter == ranges::size(input));\r\n        }\r\n\r\n        projectionCounter = 0;\r\n\r\n        { // Validate range overload\r\n            P input[5] = {{0, 99}, {1, 47}, {2, 99}, {3, 47}, {4, 99}};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = remove_if(wrapped_input, matches, projection);\r\n            static_assert(same_as<decltype(result), subrange<iterator_t<Read>>>);\r\n            assert(result.begin() == next(wrapped_input.begin(), 3));\r\n            assert(result.end() == wrapped_input.end());\r\n            assert(equal(expected, span{input}.first<3>()));\r\n            assert(projectionCounter == ranges::size(input));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_fwd<instantiator, P>(), true));\r\n    test_fwd<instantiator, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_replace/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_replace/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::replace(borrowed<false>{}, 42, 5)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::replace(borrowed<true>{}, 42, 5)), int*>);\r\n\r\nstruct instantiator {\r\n    static constexpr P output[5] = {{0, 99}, {47, 1}, {2, 99}, {47, 1}, {4, 99}};\r\n\r\n    template <ranges::input_range Read>\r\n    static constexpr void call() {\r\n        using ranges::replace, ranges::iterator_t;\r\n        { // Validate iterator + sentinel overload\r\n            P input[5] = {{0, 99}, {1, 47}, {2, 99}, {3, 47}, {4, 99}};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = replace(wrapped_input.begin(), wrapped_input.end(), 47, P{47, 1}, get_second);\r\n            static_assert(same_as<decltype(result), iterator_t<Read>>);\r\n            assert(result == wrapped_input.end());\r\n            assert(ranges::equal(output, input));\r\n        }\r\n        { // Validate range overload\r\n            P input[5] = {{0, 99}, {1, 47}, {2, 99}, {3, 47}, {4, 99}};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = replace(wrapped_input, 47, P{47, 1}, get_second);\r\n            static_assert(same_as<decltype(result), iterator_t<Read>>);\r\n            assert(result == wrapped_input.end());\r\n            assert(ranges::equal(output, input));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_in<instantiator, P>(), true));\r\n    test_in<instantiator, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_replace_copy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_replace_copy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate that replace_copy_result aliases in_out_result\r\nstatic_assert(same_as<ranges::replace_copy_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::replace_copy(borrowed<false>{}, nullptr_to<int>, 42, 5)),\r\n    ranges::replace_copy_result<ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::replace_copy(borrowed<true>{}, nullptr_to<int>, 42, 5)),\r\n    ranges::replace_copy_result<int*, int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr P input[5]    = {{0, 99}, {1, 47}, {2, 99}, {3, 47}, {4, 99}};\r\n    static constexpr P expected[5] = {{0, 99}, {47, 1}, {2, 99}, {47, 1}, {4, 99}};\r\n\r\n    template <ranges::input_range Read, indirectly_writable<ranges::range_reference_t<Read>> Write>\r\n    static constexpr void call() {\r\n        using ranges::replace_copy, ranges::replace_copy_result, ranges::equal, ranges::iterator_t;\r\n        { // Validate iterator + sentinel overload\r\n            P output[5] = {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}};\r\n            Read wrapped_input{input};\r\n\r\n            auto result =\r\n                replace_copy(wrapped_input.begin(), wrapped_input.end(), Write{output}, 47, P{47, 1}, get_second);\r\n            static_assert(same_as<decltype(result), replace_copy_result<iterator_t<Read>, Write>>);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == output + 5);\r\n            assert(equal(output, expected));\r\n        }\r\n        { // Validate range overload\r\n            P output[5] = {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = replace_copy(wrapped_input, Write{output}, 47, P{47, 1}, get_second);\r\n            static_assert(same_as<decltype(result), replace_copy_result<iterator_t<Read>, Write>>);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == output + 5);\r\n            assert(equal(output, expected));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n#ifndef _PREFAST_ // TRANSITION, GH-1030\r\n    static_assert((input_range_output_iterator_permutations<instantiator, P const, P>(), true));\r\n#endif // TRANSITION, GH-1030\r\n    input_range_output_iterator_permutations<instantiator, P const, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_replace_copy_if/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_replace_copy_if/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto matches = [](int const val) { return val == 47; };\r\n\r\n// Validate that replace_copy_if_result aliases in_out_result\r\nstatic_assert(same_as<ranges::replace_copy_if_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::replace_copy_if(borrowed<false>{}, nullptr_to<int>, matches, 5)),\r\n    ranges::replace_copy_if_result<ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::replace_copy_if(borrowed<true>{}, nullptr_to<int>, matches, 5)),\r\n    ranges::replace_copy_if_result<int*, int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr P input[5]    = {{0, 99}, {1, 47}, {2, 99}, {3, 47}, {4, 99}};\r\n    static constexpr P expected[5] = {{0, 99}, {47, 1}, {2, 99}, {47, 1}, {4, 99}};\r\n\r\n    template <ranges::input_range Read, indirectly_writable<ranges::range_reference_t<Read>> Write>\r\n    static constexpr void call() {\r\n        using ranges::replace_copy_if, ranges::replace_copy_if_result, ranges::equal, ranges::iterator_t;\r\n        { // Validate iterator + sentinel overload\r\n            P output[5] = {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = replace_copy_if(\r\n                wrapped_input.begin(), wrapped_input.end(), Write{output}, matches, P{47, 1}, get_second);\r\n            static_assert(same_as<decltype(result), replace_copy_if_result<iterator_t<Read>, Write>>);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == output + 5);\r\n            assert(equal(output, expected));\r\n        }\r\n        { // Validate range overload\r\n            P output[5] = {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = replace_copy_if(wrapped_input, Write{output}, matches, P{47, 1}, get_second);\r\n            static_assert(same_as<decltype(result), replace_copy_if_result<iterator_t<Read>, Write>>);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == output + 5);\r\n            assert(equal(output, expected));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n#ifndef _PREFAST_ // TRANSITION, GH-1030\r\n    static_assert((input_range_output_iterator_permutations<instantiator, P const, P>(), true));\r\n#endif // TRANSITION, GH-1030\r\n    input_range_output_iterator_permutations<instantiator, P const, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_replace_if/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_replace_if/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto matches = [](int const val) { return val == 47; };\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::replace_if(borrowed<false>{}, matches, 5)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::replace_if(borrowed<true>{}, matches, 5)), int*>);\r\n\r\nstruct instantiator {\r\n    static constexpr P output[5] = {{0, 99}, {47, 1}, {2, 99}, {47, 1}, {4, 99}};\r\n\r\n    template <ranges::input_range Read>\r\n    static constexpr void call() {\r\n        using ranges::replace_if;\r\n        { // Validate iterator + sentinel overload\r\n            P input[5] = {{0, 99}, {1, 47}, {2, 99}, {3, 47}, {4, 99}};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = replace_if(wrapped_input.begin(), wrapped_input.end(), matches, P{47, 1}, get_second);\r\n            static_assert(same_as<decltype(result), ranges::iterator_t<Read>>);\r\n            assert(result == wrapped_input.end());\r\n            assert(ranges::equal(output, input));\r\n        }\r\n        { // Validate range overload\r\n            P input[5] = {{0, 99}, {1, 47}, {2, 99}, {3, 47}, {4, 99}};\r\n            Read wrapped_input{input};\r\n\r\n            auto result = replace_if(wrapped_input, matches, P{47, 1}, get_second);\r\n            static_assert(same_as<decltype(result), ranges::iterator_t<Read>>);\r\n            assert(result == wrapped_input.end());\r\n            assert(ranges::equal(output, input));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_in<instantiator, P>(), true));\r\n    test_in<instantiator, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_reverse/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_reverse/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <compare>\r\n#include <concepts>\r\n#include <numeric>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::reverse(borrowed<false>{})), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::reverse(borrowed<true>{})), int*>);\r\n\r\nstruct nontrivial_int {\r\n    int val;\r\n\r\n    constexpr nontrivial_int(int i) noexcept : val{i} {}\r\n    constexpr nontrivial_int(const nontrivial_int& that) noexcept : val{that.val} {}\r\n    constexpr nontrivial_int& operator=(const nontrivial_int& that) noexcept {\r\n        val = that.val;\r\n        return *this;\r\n    }\r\n\r\n    auto operator<=>(const nontrivial_int&) const = default;\r\n};\r\n\r\nstruct instantiator {\r\n    static constexpr nontrivial_int expected_odd[]  = {1367, 42, 13};\r\n    static constexpr nontrivial_int expected_even[] = {1729, 1367, 42, 13};\r\n\r\n    template <ranges::bidirectional_range R>\r\n    static constexpr void call() {\r\n        using ranges::reverse, ranges::equal, ranges::iterator_t;\r\n\r\n        { // Validate iterator + sentinel overload, odd length\r\n            nontrivial_int input[] = {13, 42, 1367};\r\n            R wrapped_input{input};\r\n            auto result = reverse(wrapped_input.begin(), wrapped_input.end());\r\n            static_assert(same_as<decltype(result), iterator_t<R>>);\r\n            assert(result == wrapped_input.end());\r\n            assert(equal(input, expected_odd));\r\n        }\r\n        { // Validate range overload, odd length\r\n            nontrivial_int input[] = {13, 42, 1367};\r\n            R wrapped_input{input};\r\n            auto result = reverse(wrapped_input);\r\n            static_assert(same_as<decltype(result), iterator_t<R>>);\r\n            assert(result == wrapped_input.end());\r\n            assert(equal(input, expected_odd));\r\n        }\r\n        { // Validate iterator + sentinel overload, even length\r\n            nontrivial_int input[] = {13, 42, 1367, 1729};\r\n            R wrapped_input{input};\r\n            auto result = reverse(wrapped_input.begin(), wrapped_input.end());\r\n            static_assert(same_as<decltype(result), iterator_t<R>>);\r\n            assert(result == wrapped_input.end());\r\n            assert(equal(input, expected_even));\r\n        }\r\n        { // Validate range overload, even length\r\n            nontrivial_int input[] = {13, 42, 1367, 1729};\r\n            R wrapped_input{input};\r\n            auto result = reverse(wrapped_input);\r\n            static_assert(same_as<decltype(result), iterator_t<R>>);\r\n            assert(result == wrapped_input.end());\r\n            assert(equal(input, expected_even));\r\n        }\r\n        { // Validate iterator + sentinel overload, empty range\r\n            R wrapped_input{span<nontrivial_int, 0>{}};\r\n            auto result = reverse(wrapped_input.begin(), wrapped_input.end());\r\n            static_assert(same_as<decltype(result), iterator_t<R>>);\r\n            assert(result == wrapped_input.end());\r\n        }\r\n        { // Validate range overload, empty range\r\n            R wrapped_input{span<nontrivial_int, 0>{}};\r\n            auto result = reverse(wrapped_input);\r\n            static_assert(same_as<decltype(result), iterator_t<R>>);\r\n            assert(result == wrapped_input.end());\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <size_t N>\r\nstruct bytes {\r\n    unsigned char storage[N];\r\n\r\n    constexpr bytes(unsigned char base) {\r\n        iota(storage, storage + N, base);\r\n    }\r\n\r\n    bool operator==(const bytes&) const = default;\r\n};\r\n\r\nstruct test_vector {\r\n    template <ranges::bidirectional_range R>\r\n    static constexpr void call() {\r\n        using ranges::reverse, ranges::equal, ranges::iterator_t;\r\n\r\n        { // Validate iterator + sentinel overload, vectorizable odd length\r\n            ranges::range_value_t<R> input[]{0x10, 0x20, 0x30};\r\n            R wrapped_input{input};\r\n            auto result = reverse(wrapped_input.begin(), wrapped_input.end());\r\n            static_assert(same_as<decltype(result), iterator_t<R>>);\r\n            assert(result == wrapped_input.end());\r\n            assert(equal(input, initializer_list<ranges::range_value_t<R>>{0x30, 0x20, 0x10}));\r\n        }\r\n        { // Validate range overload, vectorizable odd length\r\n            ranges::range_value_t<R> input[]{0x10, 0x20, 0x30};\r\n            R wrapped_input{input};\r\n            auto result = reverse(wrapped_input);\r\n            static_assert(same_as<decltype(result), iterator_t<R>>);\r\n            assert(result == wrapped_input.end());\r\n            assert(equal(input, initializer_list<ranges::range_value_t<R>>{0x30, 0x20, 0x10}));\r\n        }\r\n\r\n        { // Validate iterator + sentinel overload, vectorizable even length\r\n            ranges::range_value_t<R> input[]{0x10, 0x20, 0x30, 0x40};\r\n            R wrapped_input{input};\r\n            auto result = reverse(wrapped_input.begin(), wrapped_input.end());\r\n            static_assert(same_as<decltype(result), iterator_t<R>>);\r\n            assert(result == wrapped_input.end());\r\n            assert(equal(input, initializer_list<ranges::range_value_t<R>>{0x40, 0x30, 0x20, 0x10}));\r\n        }\r\n        { // Validate range overload, vectorizable even length\r\n            ranges::range_value_t<R> input[]{0x10, 0x20, 0x30, 0x40};\r\n            R wrapped_input{input};\r\n            auto result = reverse(wrapped_input);\r\n            static_assert(same_as<decltype(result), iterator_t<R>>);\r\n            assert(result == wrapped_input.end());\r\n            assert(equal(input, initializer_list<ranges::range_value_t<R>>{0x40, 0x30, 0x20, 0x10}));\r\n        }\r\n\r\n        { // Validate iterator + sentinel overload, vectorizable empty\r\n            R wrapped_input{span<ranges::range_value_t<R>, 0>{}};\r\n            auto result = reverse(wrapped_input.begin(), wrapped_input.end());\r\n            static_assert(same_as<decltype(result), iterator_t<R>>);\r\n            assert(result == wrapped_input.end());\r\n        }\r\n        { // Validate range overload, vectorizable empty\r\n            R wrapped_input{span<ranges::range_value_t<R>, 0>{}};\r\n            auto result = reverse(wrapped_input);\r\n            static_assert(same_as<decltype(result), iterator_t<R>>);\r\n            assert(result == wrapped_input.end());\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_bidi<instantiator, nontrivial_int>(), true));\r\n    test_bidi<instantiator, nontrivial_int>();\r\n\r\n    static_assert((test_contiguous<test_vector, bytes<1>>(), true));\r\n    test_contiguous<test_vector, bytes<1>>();\r\n\r\n    static_assert((test_contiguous<test_vector, bytes<2>>(), true));\r\n    test_contiguous<test_vector, bytes<2>>();\r\n\r\n    static_assert((test_contiguous<test_vector, bytes<4>>(), true));\r\n    test_contiguous<test_vector, bytes<4>>();\r\n\r\n    static_assert((test_contiguous<test_vector, bytes<8>>(), true));\r\n    test_contiguous<test_vector, bytes<8>>();\r\n\r\n    static_assert((test_contiguous<test_vector, bytes<3>>(), true));\r\n    test_contiguous<test_vector, bytes<3>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_reverse_copy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_reverse_copy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <compare>\r\n#include <concepts>\r\n#include <numeric>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate that reverse_copy_result aliases in_out_result\r\nstatic_assert(same_as<ranges::reverse_copy_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::reverse_copy(borrowed<false>{}, nullptr_to<int>)),\r\n    ranges::reverse_copy_result<ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::reverse_copy(borrowed<true>{}, nullptr_to<int>)),\r\n    ranges::reverse_copy_result<int*, int*>>);\r\n\r\nstruct nontrivial_int {\r\n    int val;\r\n\r\n    constexpr nontrivial_int(int i = 0) noexcept : val{i} {}\r\n    constexpr nontrivial_int(const nontrivial_int& that) noexcept : val{that.val} {}\r\n    constexpr nontrivial_int& operator=(const nontrivial_int& that) noexcept {\r\n        val = that.val;\r\n        return *this;\r\n    }\r\n\r\n    auto operator<=>(const nontrivial_int&) const = default;\r\n};\r\n\r\nstruct instantiator {\r\n    static constexpr nontrivial_int input[]    = {13, 42, 1367};\r\n    static constexpr nontrivial_int expected[] = {1367, 42, 13};\r\n\r\n    template <ranges::bidirectional_range In, indirectly_writable<ranges::range_reference_t<In>> Out>\r\n    static constexpr void call() {\r\n        if constexpr (!ranges::contiguous_range<In>) { // the vectorized tests below have plenty of contiguous coverage\r\n            using ranges::reverse_copy, ranges::reverse_copy_result, ranges::begin, ranges::end, ranges::equal,\r\n                ranges::iterator_t;\r\n\r\n            { // Validate iterator overload\r\n                nontrivial_int output[3];\r\n                In wrapped_input{input};\r\n                const same_as<reverse_copy_result<iterator_t<In>, Out>> auto result =\r\n                    reverse_copy(wrapped_input.begin(), wrapped_input.end(), Out{output});\r\n                assert(result.in == wrapped_input.end());\r\n                assert(result.out.peek() == end(output));\r\n                assert(equal(output, expected));\r\n            }\r\n            { // Validate range overload\r\n                nontrivial_int output[3];\r\n                In wrapped_input{input};\r\n                const same_as<reverse_copy_result<iterator_t<In>, Out>> auto result =\r\n                    reverse_copy(wrapped_input, Out{output});\r\n                assert(result.in == wrapped_input.end());\r\n                assert(result.out.peek() == end(output));\r\n                assert(equal(output, expected));\r\n            }\r\n\r\n            { // Validate iterator overload, empty range\r\n                nontrivial_int output[3];\r\n                In wrapped_input{span<const nontrivial_int, 0>{}};\r\n                const same_as<reverse_copy_result<iterator_t<In>, Out>> auto result =\r\n                    reverse_copy(wrapped_input.begin(), wrapped_input.end(), Out{output});\r\n                assert(result.in == wrapped_input.end());\r\n                assert(result.out.peek() == begin(output));\r\n            }\r\n            { // Validate range overload, empty range\r\n                nontrivial_int output[3];\r\n                In wrapped_input{span<const nontrivial_int, 0>{}};\r\n                const same_as<reverse_copy_result<iterator_t<In>, Out>> auto result =\r\n                    reverse_copy(wrapped_input, Out{output});\r\n                assert(result.in == wrapped_input.end());\r\n                assert(result.out.peek() == begin(output));\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <size_t N>\r\nstruct bytes {\r\n    unsigned char storage[N];\r\n\r\n    constexpr bytes() {\r\n        ranges::fill(storage, static_cast<unsigned char>(-1));\r\n    }\r\n\r\n    constexpr bytes(unsigned char base) {\r\n        iota(storage, storage + N, base);\r\n    }\r\n\r\n    bool operator==(const bytes&) const = default;\r\n};\r\n\r\nstruct test_vector {\r\n    template <ranges::contiguous_range In, indirectly_writable<ranges::range_reference_t<In>> Out>\r\n    static constexpr void call() {\r\n        using ranges::reverse_copy, ranges::reverse_copy_result, ranges::begin, ranges::end, ranges::equal,\r\n            ranges::iterator_t, ranges::range_value_t;\r\n\r\n        const range_value_t<In> input[3]    = {0x10, 0x20, 0x30};\r\n        const range_value_t<In> expected[3] = {0x30, 0x20, 0x10};\r\n\r\n        { // Validate iterator overload, vectorizable\r\n            range_value_t<In> output[3];\r\n            In wrapped_input{input};\r\n            const same_as<reverse_copy_result<iterator_t<In>, Out>> auto result =\r\n                reverse_copy(wrapped_input.begin(), wrapped_input.end(), Out{output});\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == end(output));\r\n            assert(equal(output, expected));\r\n        }\r\n        { // Validate range overload, vectorizable\r\n            range_value_t<In> output[3];\r\n            In wrapped_input{input};\r\n            const same_as<reverse_copy_result<iterator_t<In>, Out>> auto result =\r\n                reverse_copy(wrapped_input, Out{output});\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == end(output));\r\n            assert(equal(output, expected));\r\n        }\r\n\r\n        { // Validate iterator overload, vectorizable empty\r\n            range_value_t<In> output[3];\r\n            In wrapped_input{span<range_value_t<In>, 0>{}};\r\n            const same_as<reverse_copy_result<iterator_t<In>, Out>> auto result =\r\n                reverse_copy(wrapped_input.begin(), wrapped_input.end(), Out{output});\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == begin(output));\r\n        }\r\n        { // Validate range overload, vectorizable empty\r\n            range_value_t<In> output[3];\r\n            In wrapped_input{span<range_value_t<In>, 0>{}};\r\n            const same_as<reverse_copy_result<iterator_t<In>, Out>> auto result =\r\n                reverse_copy(wrapped_input, Out{output});\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == begin(output));\r\n        }\r\n    }\r\n};\r\n\r\n\r\n// These tests take up a lot of memory,\r\n// so we split them up into multiple functions to make sure the compiler doesn't run out of heap.\r\nvoid test1() {\r\n    static_assert((test_bidi_write<instantiator, const nontrivial_int, nontrivial_int>(), true));\r\n    test_bidi_write<instantiator, const nontrivial_int, nontrivial_int>();\r\n\r\n    static_assert((test_contiguous_write<test_vector, const bytes<1>, bytes<1>>(), true));\r\n    static_assert((test_contiguous_write<test_vector, const bytes<2>, bytes<2>>(), true));\r\n    test_contiguous_write<test_vector, const bytes<1>, bytes<1>>();\r\n    test_contiguous_write<test_vector, const bytes<2>, bytes<2>>();\r\n}\r\n\r\nvoid test2() {\r\n    static_assert((test_contiguous_write<test_vector, const bytes<4>, bytes<4>>(), true));\r\n    static_assert((test_contiguous_write<test_vector, const bytes<8>, bytes<8>>(), true));\r\n    static_assert((test_contiguous_write<test_vector, const bytes<3>, bytes<3>>(), true));\r\n    test_contiguous_write<test_vector, const bytes<4>, bytes<4>>();\r\n    test_contiguous_write<test_vector, const bytes<8>, bytes<8>>();\r\n    test_contiguous_write<test_vector, const bytes<3>, bytes<3>>();\r\n}\r\n\r\nint main() {\r\n    test1();\r\n    test2();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_rotate/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_rotate/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::rotate(borrowed<false>{}, nullptr_to<int>)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::rotate(borrowed<true>{}, nullptr_to<int>)), ranges::subrange<int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr P expected[5] = {{3, 47}, {4, 99}, {0, 99}, {1, 47}, {2, 99}};\r\n\r\n    template <ranges::forward_range ReadWrite>\r\n    static constexpr void call() {\r\n        using ranges::rotate, ranges::subrange, ranges::equal, ranges::iterator_t;\r\n        { // Validate iterator overload\r\n            P input[5] = {{0, 99}, {1, 47}, {2, 99}, {3, 47}, {4, 99}};\r\n            ReadWrite wrapped_input{input};\r\n\r\n            auto result = rotate(wrapped_input.begin(), next(wrapped_input.begin(), 3), wrapped_input.end());\r\n            static_assert(same_as<decltype(result), subrange<iterator_t<ReadWrite>>>);\r\n            assert(result.begin() == next(wrapped_input.begin(), 2));\r\n            assert(result.end() == wrapped_input.end());\r\n            assert(equal(expected, input));\r\n        }\r\n        { // Validate range overload\r\n            P input[5] = {{0, 99}, {1, 47}, {2, 99}, {3, 47}, {4, 99}};\r\n            ReadWrite wrapped_input{input};\r\n\r\n            auto result = rotate(wrapped_input, next(wrapped_input.begin(), 3));\r\n            static_assert(same_as<decltype(result), subrange<iterator_t<ReadWrite>>>);\r\n            assert(result.begin() == next(wrapped_input.begin(), 2));\r\n            assert(result.end() == wrapped_input.end());\r\n            assert(equal(expected, input));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_fwd<instantiator, P>(), true));\r\n    test_fwd<instantiator, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_rotate_copy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_rotate_copy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\n// Validate that rotate_copy_result aliases in_out_result\r\nstatic_assert(same_as<ranges::rotate_copy_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::rotate_copy(borrowed<false>{}, nullptr_to<int>, nullptr_to<int>)),\r\n    ranges::rotate_copy_result<ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::rotate_copy(borrowed<true>{}, nullptr_to<int>, nullptr_to<int>)),\r\n    ranges::rotate_copy_result<int*, int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr int input[5]    = {1, 2, 3, 4, 5};\r\n    static constexpr int expected[5] = {4, 5, 1, 2, 3};\r\n\r\n    template <ranges::forward_range Read, indirectly_writable<ranges::range_reference_t<Read>> Write>\r\n    static constexpr void call() {\r\n        using ranges::rotate_copy, ranges::rotate_copy_result, ranges::equal, ranges::iterator_t;\r\n        { // Validate iterator overload\r\n            int output[5] = {-1, -1, -1, -1, -1};\r\n            Read wrapped_input{input};\r\n            iterator_t<Read> mid = next(wrapped_input.begin(), 3);\r\n\r\n            auto result = rotate_copy(wrapped_input.begin(), mid, wrapped_input.end(), Write{output});\r\n            static_assert(same_as<decltype(result), rotate_copy_result<iterator_t<Read>, Write>>);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == end(output));\r\n            assert(equal(expected, output));\r\n        }\r\n        { // Validate range overload\r\n            int output[5] = {-1, -1, -1, -1, -1};\r\n            Read wrapped_input{input};\r\n            iterator_t<Read> mid = next(wrapped_input.begin(), 3);\r\n\r\n            auto result = rotate_copy(wrapped_input, mid, Write{output});\r\n            static_assert(same_as<decltype(result), rotate_copy_result<iterator_t<Read>, Write>>);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == end(output));\r\n            assert(equal(expected, output));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_fwd_write<instantiator, const int, int>(), true));\r\n    test_fwd_write<instantiator, const int, int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_sample/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_sample/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstdio>\r\n#include <random>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\nconst unsigned int seed = random_device{}();\r\nmt19937 gen{seed};\r\n\r\nstruct instantiator {\r\n    static constexpr int reservoir[5] = {13, 42, 71, 112, 1729};\r\n\r\n    template <ranges::input_range Read, indirectly_writable<ranges::range_reference_t<Read>> Write>\r\n    static void call() {\r\n        using ranges::sample, ranges::equal, ranges::is_sorted, ranges::iterator_t;\r\n\r\n        if constexpr (forward_iterator<iterator_t<Read>> || random_access_iterator<Write>) {\r\n            auto copy_gen = gen;\r\n\r\n            { // Validate iterator + sentinel overload\r\n                int output1[3] = {-1, -1, -1};\r\n                int output2[3] = {-1, -1, -1};\r\n                Read wrapped_input{reservoir};\r\n\r\n                auto result1 = sample(wrapped_input.begin(), wrapped_input.end(), Write{output1}, 3, gen);\r\n                static_assert(same_as<decltype(result1), Write>);\r\n                assert(result1.peek() == end(output1));\r\n\r\n                // check repeatability\r\n                Read wrapped_input2{reservoir};\r\n                auto result2 = sample(wrapped_input2.begin(), wrapped_input2.end(), Write{output2}, 3, copy_gen);\r\n                assert(equal(output1, output2));\r\n                assert(result2.peek() == end(output2));\r\n\r\n                if (ranges::forward_range<Read>) {\r\n                    // verify stability\r\n                    assert(is_sorted(output1));\r\n                } else {\r\n                    // ensure ordering for equality test\r\n                    sort(begin(output1), end(output1));\r\n                }\r\n                assert(includes(cbegin(reservoir), cend(reservoir), cbegin(output1), cend(output1)));\r\n            }\r\n            { // Validate range overload\r\n                int output1[3] = {-1, -1, -1};\r\n                int output2[3] = {-1, -1, -1};\r\n                Read wrapped_input{reservoir};\r\n\r\n                auto result1 = sample(wrapped_input, Write{output1}, 3, gen);\r\n                static_assert(same_as<decltype(result1), Write>);\r\n                assert(result1.peek() == end(output1));\r\n\r\n                // check repeatability\r\n                Read wrapped_input2{reservoir};\r\n                auto result2 = sample(wrapped_input2, Write{output2}, 3, copy_gen);\r\n                assert(equal(output1, output2));\r\n                assert(result2.peek() == end(output2));\r\n\r\n                if (ranges::forward_range<Read>) {\r\n                    // verify stability\r\n                    assert(is_sorted(output1));\r\n                } else {\r\n                    // ensure ordering for equality test\r\n                    sort(begin(output1), end(output1));\r\n                }\r\n                assert(includes(cbegin(reservoir), cend(reservoir), cbegin(output1), cend(output1)));\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    printf(\"Using seed: %u\\n\", seed);\r\n\r\n    test_in_write<instantiator, const int, int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_search/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_search/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nusing P = pair<int, int>;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::search(borrowed<false>{}, borrowed<true>{})), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::search(borrowed<true>{}, borrowed<false>{})), ranges::subrange<int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr array<P, 8> pairs = {\r\n        P{0, 42}, P{1, 42}, P{2, 42}, P{3, 42}, P{4, 42}, P{5, 42}, P{6, 42}, P{7, 42}};\r\n    static constexpr array<int, 3> not_pairs     = {2, 3, 4};\r\n    static constexpr array<int, 3> neg_not_pairs = {-2, -3, -4};\r\n\r\n    template <class Fwd1, class Fwd2>\r\n    static constexpr void call() {\r\n        const Fwd1 range1{pairs};\r\n        {\r\n            const Fwd2 range2{not_pairs};\r\n\r\n            // defaulted predicate and projections\r\n            {\r\n                auto result = ranges::search(range1, range1);\r\n                static_assert(same_as<decltype(result), ranges::subrange<ranges::iterator_t<Fwd1>>>);\r\n                assert(result.begin() == range1.begin());\r\n                assert(result.end() == range1.end());\r\n            }\r\n            {\r\n                auto result = ranges::search(\r\n                    ranges::begin(range2), ranges::end(range2), ranges::begin(range2), ranges::end(range2));\r\n                static_assert(same_as<decltype(result), ranges::subrange<ranges::iterator_t<Fwd2>>>);\r\n                assert(result.begin() == range2.begin());\r\n                assert(result.end() == range2.end());\r\n            }\r\n        }\r\n\r\n        const Fwd2 range2{neg_not_pairs};\r\n        const auto pred = [](int x, int y) { return x == -y; };\r\n\r\n        // explicit predicate\r\n        {\r\n            auto result = ranges::search(range2, range2, ranges::equal_to{});\r\n            static_assert(same_as<decltype(result), ranges::subrange<ranges::iterator_t<Fwd2>>>);\r\n            assert(result.begin() == range2.begin());\r\n            assert(result.end() == range2.end());\r\n        }\r\n        {\r\n            auto result = ranges::search(ranges::begin(range1), ranges::end(range1), ranges::begin(range1),\r\n                ranges::end(range1), ranges::equal_to{});\r\n            static_assert(same_as<decltype(result), ranges::subrange<ranges::iterator_t<Fwd1>>>);\r\n            assert(result.begin() == range1.begin());\r\n            assert(result.end() == range1.end());\r\n        }\r\n\r\n        // explicit predicate and one projection\r\n        {\r\n            auto result = ranges::search(range1, range2, pred, get_first);\r\n            static_assert(same_as<decltype(result), ranges::subrange<ranges::iterator_t<Fwd1>>>);\r\n            assert(result.begin() == ranges::next(range1.begin(), 2));\r\n            assert(result.end() == ranges::next(range1.begin(), 5));\r\n        }\r\n        {\r\n            auto result = ranges::search(ranges::begin(range1), ranges::end(range1), ranges::begin(range2),\r\n                ranges::end(range2), pred, get_first);\r\n            static_assert(same_as<decltype(result), ranges::subrange<ranges::iterator_t<Fwd1>>>);\r\n            assert(result.begin() == ranges::next(range1.begin(), 2));\r\n            assert(result.end() == ranges::next(range1.begin(), 5));\r\n        }\r\n\r\n        // explicit predicate and two projections\r\n        constexpr auto minus1 = [](int x) { return x - 1; };\r\n        {\r\n            auto result = ranges::search(range1, range2, pred, get_first, minus1);\r\n            static_assert(same_as<decltype(result), ranges::subrange<ranges::iterator_t<Fwd1>>>);\r\n            assert(result.begin() == ranges::next(range1.begin(), 3));\r\n            assert(result.end() == ranges::next(range1.begin(), 6));\r\n        }\r\n        {\r\n            auto result = ranges::search(ranges::begin(range1), ranges::end(range1), ranges::begin(range2),\r\n                ranges::end(range2), pred, get_first, minus1);\r\n            static_assert(same_as<decltype(result), ranges::subrange<ranges::iterator_t<Fwd1>>>);\r\n            assert(result.begin() == ranges::next(range1.begin(), 3));\r\n            assert(result.end() == ranges::next(range1.begin(), 6));\r\n        }\r\n\r\n        // negative case\r\n        {\r\n            auto result = ranges::search(range2, range1, pred, minus1, get_first);\r\n            static_assert(same_as<decltype(result), ranges::subrange<ranges::iterator_t<Fwd2>>>);\r\n            assert(result.empty());\r\n        }\r\n        {\r\n            auto result = ranges::search(ranges::begin(range2), ranges::end(range2), ranges::begin(range1),\r\n                ranges::end(range1), pred, minus1, get_first);\r\n            static_assert(same_as<decltype(result), ranges::subrange<ranges::iterator_t<Fwd2>>>);\r\n            assert(result.empty());\r\n        }\r\n    }\r\n};\r\n\r\nusing Elem1 = const P;\r\nusing Elem2 = const int;\r\n\r\n#ifdef TEST_EVERYTHING\r\nint main() {\r\n    // No constexpr test here; the test_fwd_fwd call exceeds the maximum number of steps in a constexpr computation.\r\n    test_fwd_fwd<instantiator, Elem1, Elem2>();\r\n}\r\n#else // ^^^ test all range combinations / test only interesting range combos vvv\r\ntemplate <class Elem, test::Sized IsSized>\r\nusing fwd_test_range = test::range<forward_iterator_tag, Elem, IsSized, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare::yes, test::ProxyRef::yes>;\r\ntemplate <class Elem, test::Sized IsSized, test::Common IsCommon>\r\nusing random_test_range = test::range<random_access_iterator_tag, Elem, IsSized, test::CanDifference::no, IsCommon,\r\n    test::CanCompare::yes, test::ProxyRef::no>;\r\n\r\nconstexpr bool run_tests() {\r\n    // All (except contiguous) proxy reference types, since the algorithm doesn't really care. Cases with only 1 range\r\n    // sized are not interesting; common is interesting only in that it's necessary to trigger memcmp optimization.\r\n\r\n    using test::Common, test::Sized;\r\n\r\n    // both forward, non-common, and sized or unsized\r\n    instantiator::call<fwd_test_range<Elem1, Sized::no>, fwd_test_range<Elem2, Sized::no>>();\r\n    instantiator::call<fwd_test_range<Elem1, Sized::yes>, fwd_test_range<Elem2, Sized::yes>>();\r\n\r\n    // both random-access, and sized or unsized; all permutations of common\r\n    instantiator::call<random_test_range<Elem1, Sized::no, Common::no>,\r\n        random_test_range<Elem2, Sized::no, Common::no>>();\r\n    instantiator::call<random_test_range<Elem1, Sized::no, Common::no>,\r\n        random_test_range<Elem2, Sized::no, Common::yes>>();\r\n    instantiator::call<random_test_range<Elem1, Sized::no, Common::yes>,\r\n        random_test_range<Elem2, Sized::no, Common::no>>();\r\n    instantiator::call<random_test_range<Elem1, Sized::no, Common::yes>,\r\n        random_test_range<Elem2, Sized::no, Common::yes>>();\r\n    instantiator::call<random_test_range<Elem1, Sized::yes, Common::no>,\r\n        random_test_range<Elem2, Sized::yes, Common::no>>();\r\n    instantiator::call<random_test_range<Elem1, Sized::yes, Common::no>,\r\n        random_test_range<Elem2, Sized::yes, Common::yes>>();\r\n    instantiator::call<random_test_range<Elem1, Sized::yes, Common::yes>,\r\n        random_test_range<Elem2, Sized::yes, Common::no>>();\r\n    instantiator::call<random_test_range<Elem1, Sized::yes, Common::yes>,\r\n        random_test_range<Elem2, Sized::yes, Common::yes>>();\r\n\r\n    {\r\n        // Validate the memcmp optimization\r\n        const int haystack[] = {1, 2, 3, 1, 2, 3, 1, 2, 3};\r\n        const int needle[]   = {1, 2, 3};\r\n        const auto result    = ranges::search(span<const int>{haystack}, needle);\r\n        static_assert(same_as<decltype(result), const ranges::subrange<span<const int>::iterator>>);\r\n        assert(to_address(result.begin()) == haystack + 0);\r\n        assert(to_address(result.end()) == haystack + 3);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr void test_devcom_1559808() {\r\n    // Regression test for DevCom-1559808, an interaction between vector and the\r\n    // use of structured bindings in the constexpr evaluator.\r\n\r\n    vector<int> haystack(33, 42); // No particular significance to any numbers in this function\r\n    vector<int> needle(8, 42);\r\n\r\n    auto result = ranges::search(haystack, needle);\r\n    assert(result.begin() == haystack.begin());\r\n    assert(result.end() == haystack.begin() + ranges::ssize(needle));\r\n\r\n    needle.assign(6, 1729);\r\n    result = ranges::search(haystack, needle);\r\n    assert(result.begin() == haystack.end());\r\n    assert(result.end() == haystack.end());\r\n}\r\n\r\nint main() {\r\n    static_assert(run_tests());\r\n    run_tests();\r\n\r\n    static_assert((test_devcom_1559808(), true));\r\n    test_devcom_1559808();\r\n}\r\n#endif // TEST_EVERYTHING\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_search_n/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_search_n/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::search_n(borrowed<false>{}, 13, 42)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::search_n(borrowed<true>{}, 42, 13)), ranges::subrange<int*>>);\r\n\r\nusing P = pair<int, int>;\r\n\r\nstruct instantiator {\r\n    static constexpr array<P, 11> pairs = {\r\n        P{0, 42}, P{1, 42}, P{1, 42}, P{0, 42}, P{1, 42}, P{1, 42}, P{0, 42}, P{1, 42}, P{1, 42}, P{1, 42}, P{0, 42}};\r\n\r\n    template <class Fwd>\r\n    static constexpr void call() {\r\n        const Fwd range{pairs};\r\n\r\n        // defaulted predicate and projections\r\n        {\r\n            const auto result = ranges::search_n(range, 2, P{1, 42});\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == ranges::next(range.begin(), 1));\r\n            assert(result.end() == ranges::next(range.begin(), 3));\r\n        }\r\n        {\r\n            const auto result = ranges::search_n(ranges::begin(range), ranges::end(range), 2, P{1, 42});\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == ranges::next(range.begin(), 1));\r\n            assert(result.end() == ranges::next(range.begin(), 3));\r\n        }\r\n\r\n        // explicit predicate\r\n        {\r\n            const auto result = ranges::search_n(range, 2, P{1, 42}, ranges::equal_to{});\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == ranges::next(range.begin(), 1));\r\n            assert(result.end() == ranges::next(range.begin(), 3));\r\n        }\r\n        {\r\n            const auto result =\r\n                ranges::search_n(ranges::begin(range), ranges::end(range), 2, P{1, 42}, ranges::equal_to{});\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == ranges::next(range.begin(), 1));\r\n            assert(result.end() == ranges::next(range.begin(), 3));\r\n        }\r\n\r\n        // explicit predicate and projection\r\n        constexpr auto cmp = [](auto&& x, auto&& y) { return x == y + 1; };\r\n        {\r\n            const auto result = ranges::search_n(range, 3, 0, cmp, get_first);\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == ranges::next(range.begin(), 7));\r\n            assert(result.end() == ranges::next(range.begin(), 10));\r\n        }\r\n        {\r\n            const auto result = ranges::search_n(ranges::begin(range), ranges::end(range), 3, 0, cmp, get_first);\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == ranges::next(range.begin(), 7));\r\n            assert(result.end() == ranges::next(range.begin(), 10));\r\n        }\r\n\r\n        // negative case\r\n        {\r\n            const auto result = ranges::search_n(range, 4, 0, cmp, get_first);\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == range.end());\r\n            assert(result.end() == range.end());\r\n        }\r\n        {\r\n            const auto result = ranges::search_n(ranges::begin(range), ranges::end(range), 4, 0, cmp, get_first);\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == range.end());\r\n            assert(result.end() == range.end());\r\n        }\r\n\r\n        // trivial case: empty needle\r\n        {\r\n            const auto result = ranges::search_n(range, 0, 0, cmp, get_first);\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == range.begin());\r\n            assert(result.end() == range.begin());\r\n        }\r\n        {\r\n            const auto result = ranges::search_n(ranges::begin(range), ranges::end(range), 0, 0, cmp, get_first);\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == range.begin());\r\n            assert(result.end() == range.begin());\r\n        }\r\n\r\n        // trivial case: unit needle\r\n        {\r\n            const auto result = ranges::search_n(range, 1, P{1, 42});\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == ranges::next(range.begin(), 1));\r\n            assert(result.end() == ranges::next(range.begin(), 2));\r\n        }\r\n        {\r\n            const auto result = ranges::search_n(ranges::begin(range), ranges::end(range), 1, P{1, 42});\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == ranges::next(range.begin(), 1));\r\n            assert(result.end() == ranges::next(range.begin(), 2));\r\n        }\r\n\r\n        // trivial case: unit needle with predicate\r\n        {\r\n            const auto result = ranges::search_n(range, 1, 0, cmp, get_first);\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == ranges::next(range.begin(), 1));\r\n            assert(result.end() == ranges::next(range.begin(), 2));\r\n        }\r\n        {\r\n            const auto result = ranges::search_n(ranges::begin(range), ranges::end(range), 1, 0, cmp, get_first);\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == ranges::next(range.begin(), 1));\r\n            assert(result.end() == ranges::next(range.begin(), 2));\r\n        }\r\n\r\n        // trivial case: range too small\r\n        {\r\n            const auto result = ranges::search_n(range, 99999, 0, cmp, get_first);\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == range.end());\r\n            assert(result.end() == range.end());\r\n        }\r\n        {\r\n            const auto result = ranges::search_n(ranges::begin(range), ranges::end(range), 99999, 0, cmp, get_first);\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == range.end());\r\n            assert(result.end() == range.end());\r\n        }\r\n\r\n        // trivial case: negative count\r\n        {\r\n            const auto result = ranges::search_n(range, -42, 0, cmp, get_first);\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == range.begin());\r\n            assert(result.end() == range.begin());\r\n        }\r\n        {\r\n            const auto result = ranges::search_n(ranges::begin(range), ranges::end(range), -42, 0, cmp, get_first);\r\n            static_assert(same_as<decltype(result), const ranges::subrange<ranges::iterator_t<Fwd>>>);\r\n            assert(result.begin() == range.begin());\r\n            assert(result.end() == range.begin());\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    using Elem = const P;\r\n    static_assert((test_fwd<instantiator, Elem>(), true));\r\n    test_fwd<instantiator, Elem>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_set_difference/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_set_difference/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate that set_difference_result aliases in_out_result\r\nstatic_assert(same_as<ranges::set_difference_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::set_difference(borrowed<false>{}, borrowed<false>{}, nullptr_to<int>,\r\n                          ranges::less{}, identity{}, identity{})),\r\n    ranges::set_difference_result<ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::set_difference(borrowed<true>{}, borrowed<false>{}, nullptr_to<int>,\r\n                          ranges::less{}, identity{}, identity{})),\r\n    ranges::set_difference_result<int*, int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr P elements1[] = {{0, 10}, {0, 11}, {0, 12}, {1, 10}, {1, 11}, {3, 10}};\r\n    static constexpr P elements2[] = {{13, 0}, {14, 0}, {10, 2}, {11, 3}, {12, 3}};\r\n    static constexpr P expected[]  = {{0, 12}, {1, 10}, {1, 11}};\r\n\r\n    template <ranges::input_range R1, ranges::input_range R2, weakly_incrementable O>\r\n    static constexpr void call() {\r\n        using ranges::set_difference, ranges::set_difference_result, ranges::equal, ranges::iterator_t, ranges::less;\r\n\r\n        constexpr auto osize = ranges::size(elements1) + ranges::size(elements2);\r\n\r\n        { // Validate range overload\r\n            P output[osize]{};\r\n            R1 range1{elements1};\r\n            R2 range2{elements2};\r\n            const same_as<set_difference_result<iterator_t<R1>, O>> auto result =\r\n                set_difference(range1, range2, O{output}, ranges::less{}, get_first, get_second);\r\n            assert(result.in == range1.end());\r\n            assert(result.out.peek() == output + ranges::size(expected));\r\n            assert(equal(span{output}.first<ranges::size(expected)>(), expected));\r\n        }\r\n        { // Validate iterator overload\r\n            P output[osize]{};\r\n            R1 range1{elements1};\r\n            R2 range2{elements2};\r\n            const same_as<set_difference_result<iterator_t<R1>, O>> auto result = set_difference(range1.begin(),\r\n                range1.end(), range2.begin(), range2.end(), O{output}, ranges::less{}, get_first, get_second);\r\n            assert(result.in == range1.end());\r\n            assert(result.out.peek() == output + ranges::size(expected));\r\n            assert(equal(span{output}.first<ranges::size(expected)>(), expected));\r\n        }\r\n\r\n        { // Validate range overload, empty range1\r\n            P output[osize]{};\r\n            R1 range1{span<const P, 0>{}};\r\n            R2 range2{elements2};\r\n            const same_as<set_difference_result<iterator_t<R1>, O>> auto result =\r\n                set_difference(range1, range2, O{output}, ranges::less{}, get_first, get_second);\r\n            assert(result.in == range1.end());\r\n            assert(result.out.peek() == output);\r\n        }\r\n        { // Validate iterator overload, empty range2\r\n            P output[osize]{};\r\n            R1 range1{elements1};\r\n            R2 range2{span<const P, 0>{}};\r\n            const same_as<set_difference_result<iterator_t<R1>, O>> auto result = set_difference(range1.begin(),\r\n                range1.end(), range2.begin(), range2.end(), O{output}, ranges::less{}, get_first, get_second);\r\n            assert(result.in == range1.end());\r\n            assert(result.out.peek() == output + ranges::size(elements1));\r\n            assert(equal(span{output}.first<ranges::size(elements1)>(), elements1));\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class Continuation>\r\nstruct generate_readable_ranges {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::range;\r\n\r\n        // The algorithm is completely oblivious to:\r\n        // * categories stronger than input\r\n        // * whether the end sentinel is an iterator\r\n        // * size information\r\n        // * iterator and/or sentinel differencing\r\n        // so let's vary proxyness for coverage and call it good.\r\n\r\n        Continuation::template call<Args...,\r\n            range<input, const P, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, const P, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n    }\r\n};\r\n\r\ntemplate <class Continuation>\r\nstruct generate_writable_iterators {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::iterator;\r\n\r\n        // The algorithm is completely oblivious to all properties except for proxyness,\r\n        // so again we'll vary that property, and we'll also get coverage from input iterators to ensure the algorithm\r\n        // doesn't inadvertently depend on the output_iterator-only `*i++ = meow` expression.\r\n\r\n        Continuation::template call<Args..., iterator<output, P, CanDifference::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args..., iterator<output, P, CanDifference::no, CanCompare::no, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args..., iterator<input, P, CanDifference::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args..., iterator<input, P, CanDifference::no, CanCompare::no, ProxyRef::yes>>();\r\n    }\r\n};\r\n\r\nconstexpr void run_tests() {\r\n    generate_readable_ranges<generate_readable_ranges<generate_writable_iterators<instantiator>>>::call();\r\n}\r\n\r\nint main() {\r\n    static_assert((run_tests(), true));\r\n    run_tests();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_set_intersection/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_set_intersection/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate that set_intersection_result aliases in_in_out_result\r\nstatic_assert(\r\n    same_as<ranges::set_intersection_result<int, void*, double>, ranges::in_in_out_result<int, void*, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::set_intersection(borrowed<false>{}, borrowed<false>{}, nullptr_to<int>,\r\n                          ranges::less{}, identity{}, identity{})),\r\n    ranges::set_intersection_result<ranges::dangling, ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::set_intersection(borrowed<false>{}, borrowed<true>{}, nullptr_to<int>,\r\n                          ranges::less{}, identity{}, identity{})),\r\n    ranges::set_intersection_result<ranges::dangling, int*, int*>>);\r\nstatic_assert(same_as<decltype(ranges::set_intersection(borrowed<true>{}, borrowed<false>{}, nullptr_to<int>,\r\n                          ranges::less{}, identity{}, identity{})),\r\n    ranges::set_intersection_result<int*, ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::set_intersection(\r\n                          borrowed<true>{}, borrowed<true>{}, nullptr_to<int>, ranges::less{}, identity{}, identity{})),\r\n    ranges::set_intersection_result<int*, int*, int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr P elements1[] = {{0, 10}, {0, 11}, {0, 12}, {1, 10}, {1, 11}, {3, 10}};\r\n    static constexpr P elements2[] = {{13, 0}, {14, 0}, {10, 2}, {11, 3}, {12, 3}};\r\n    static constexpr P expected[]  = {{0, 10}, {0, 11}, {3, 10}};\r\n\r\n    template <ranges::input_range R1, ranges::input_range R2, weakly_incrementable O>\r\n    static constexpr void call() {\r\n        using ranges::set_intersection, ranges::set_intersection_result, ranges::equal, ranges::iterator_t,\r\n            ranges::less;\r\n\r\n        constexpr auto osize = ranges::size(elements1) + ranges::size(elements2);\r\n\r\n        { // Validate range overload\r\n            P output[osize]{};\r\n            R1 range1{elements1};\r\n            R2 range2{elements2};\r\n            const same_as<set_intersection_result<iterator_t<R1>, iterator_t<R2>, O>> auto result =\r\n                set_intersection(range1, range2, O{output}, ranges::less{}, get_first, get_second);\r\n            assert(result.in1 == range1.end());\r\n            assert(result.in2 == range2.end());\r\n            assert(result.out.peek() == output + ranges::size(expected));\r\n            assert(equal(span{output}.first<ranges::size(expected)>(), expected));\r\n        }\r\n        { // Validate iterator overload\r\n            P output[osize]{};\r\n            R1 range1{elements1};\r\n            R2 range2{elements2};\r\n            const same_as<set_intersection_result<iterator_t<R1>, iterator_t<R2>, O>> auto result =\r\n                set_intersection(range1.begin(), range1.end(), range2.begin(), range2.end(), O{output}, ranges::less{},\r\n                    get_first, get_second);\r\n            assert(result.in1 == range1.end());\r\n            assert(result.in2 == range2.end());\r\n            assert(result.out.peek() == output + ranges::size(expected));\r\n            assert(equal(span{output}.first<ranges::size(expected)>(), expected));\r\n        }\r\n\r\n        { // Validate range overload, empty range1\r\n            P output[osize]{};\r\n            R1 range1{span<const P, 0>{}};\r\n            R2 range2{elements2};\r\n            const same_as<set_intersection_result<iterator_t<R1>, iterator_t<R2>, O>> auto result =\r\n                set_intersection(range1, range2, O{output}, ranges::less{}, get_first, get_second);\r\n            assert(result.in1 == range1.end());\r\n            assert(result.in2 == range2.end());\r\n            assert(result.out.peek() == output);\r\n        }\r\n        { // Validate iterator overload, empty range2\r\n            P output[osize]{};\r\n            R1 range1{elements1};\r\n            R2 range2{span<const P, 0>{}};\r\n            const same_as<set_intersection_result<iterator_t<R1>, iterator_t<R2>, O>> auto result =\r\n                set_intersection(range1.begin(), range1.end(), range2.begin(), range2.end(), O{output}, ranges::less{},\r\n                    get_first, get_second);\r\n            assert(result.in1 == range1.end());\r\n            assert(result.in2 == range2.end());\r\n            assert(result.out.peek() == output);\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class Continuation>\r\nstruct generate_readable_ranges {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::range;\r\n\r\n        // The algorithm calls advance(i, s), so it's sensitive to CanDifference and Common in addition to the normal\r\n        // proxy sensitivity.\r\n\r\n        Continuation::template call<Args...,\r\n            range<input, const P, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, const P, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n        Continuation::template call<Args...,\r\n            range<input, const P, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, const P, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args...,\r\n            range<input, const P, Sized::no, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, const P, Sized::no, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n    }\r\n};\r\n\r\ntemplate <class Continuation>\r\nstruct generate_writable_iterators {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::iterator;\r\n\r\n        // The algorithm is completely oblivious to all properties except for proxyness,\r\n        // so again we'll vary that property, and we'll also get coverage from input iterators to ensure the algorithm\r\n        // doesn't inadvertently depend on the output_iterator-only `*i++ = meow` expression.\r\n\r\n        Continuation::template call<Args..., iterator<output, P, CanDifference::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args..., iterator<output, P, CanDifference::no, CanCompare::no, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args..., iterator<input, P, CanDifference::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args..., iterator<input, P, CanDifference::no, CanCompare::no, ProxyRef::yes>>();\r\n    }\r\n};\r\n\r\nconstexpr void run_tests() {\r\n    generate_readable_ranges<generate_readable_ranges<generate_writable_iterators<instantiator>>>::call();\r\n}\r\n\r\nint main() {\r\n    static_assert((run_tests(), true));\r\n    run_tests();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_set_symmetric_difference/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_set_symmetric_difference/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate that set_symmetric_difference_result aliases in_in_out_result\r\nstatic_assert(\r\n    same_as<ranges::set_symmetric_difference_result<int, void*, double>, ranges::in_in_out_result<int, void*, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::set_symmetric_difference(borrowed<false>{}, borrowed<false>{}, nullptr_to<int>,\r\n                          ranges::less{}, identity{}, identity{})),\r\n    ranges::set_symmetric_difference_result<ranges::dangling, ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::set_symmetric_difference(borrowed<false>{}, borrowed<true>{}, nullptr_to<int>,\r\n                          ranges::less{}, identity{}, identity{})),\r\n    ranges::set_symmetric_difference_result<ranges::dangling, int*, int*>>);\r\nstatic_assert(same_as<decltype(ranges::set_symmetric_difference(borrowed<true>{}, borrowed<false>{}, nullptr_to<int>,\r\n                          ranges::less{}, identity{}, identity{})),\r\n    ranges::set_symmetric_difference_result<int*, ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::set_symmetric_difference(\r\n                          borrowed<true>{}, borrowed<true>{}, nullptr_to<int>, ranges::less{}, identity{}, identity{})),\r\n    ranges::set_symmetric_difference_result<int*, int*, int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr P elements1[] = {{0, 10}, {0, 11}, {0, 12}, {1, 10}, {1, 11}, {3, 10}};\r\n    static constexpr P elements2[] = {{13, 0}, {14, 0}, {10, 2}, {11, 3}, {12, 3}};\r\n    static constexpr P expected[]  = {{0, 12}, {1, 10}, {1, 11}, {10, 2}, {12, 3}};\r\n\r\n    template <ranges::input_range R1, ranges::input_range R2, weakly_incrementable O>\r\n    static constexpr void call() {\r\n        using ranges::set_symmetric_difference, ranges::set_symmetric_difference_result, ranges::equal,\r\n            ranges::iterator_t, ranges::less;\r\n\r\n        constexpr auto osize = ranges::size(elements1) + ranges::size(elements2);\r\n\r\n        { // Validate range overload\r\n            P output[osize]{};\r\n            R1 range1{elements1};\r\n            R2 range2{elements2};\r\n            const same_as<set_symmetric_difference_result<iterator_t<R1>, iterator_t<R2>, O>> auto result =\r\n                set_symmetric_difference(range1, range2, O{output}, ranges::less{}, get_first, get_second);\r\n            assert(result.in1 == range1.end());\r\n            assert(result.in2 == range2.end());\r\n            assert(result.out.peek() == output + ranges::size(expected));\r\n            assert(equal(span{output}.first<ranges::size(expected)>(), expected));\r\n        }\r\n        { // Validate iterator overload\r\n            P output[osize]{};\r\n            R1 range1{elements1};\r\n            R2 range2{elements2};\r\n            const same_as<set_symmetric_difference_result<iterator_t<R1>, iterator_t<R2>, O>> auto result =\r\n                set_symmetric_difference(range1.begin(), range1.end(), range2.begin(), range2.end(), O{output},\r\n                    ranges::less{}, get_first, get_second);\r\n            assert(result.in1 == range1.end());\r\n            assert(result.in2 == range2.end());\r\n            assert(result.out.peek() == output + ranges::size(expected));\r\n            assert(equal(span{output}.first<ranges::size(expected)>(), expected));\r\n        }\r\n\r\n        { // Validate range overload, empty range1\r\n            P output[osize]{};\r\n            R1 range1{span<const P, 0>{}};\r\n            R2 range2{elements2};\r\n            const same_as<set_symmetric_difference_result<iterator_t<R1>, iterator_t<R2>, O>> auto result =\r\n                set_symmetric_difference(range1, range2, O{output}, ranges::less{}, get_first, get_second);\r\n            assert(result.in1 == range1.end());\r\n            assert(result.in2 == range2.end());\r\n            assert(result.out.peek() == output + ranges::size(elements2));\r\n            assert(equal(span{output}.first<ranges::size(elements2)>(), elements2));\r\n        }\r\n        { // Validate iterator overload, empty range2\r\n            P output[osize]{};\r\n            R1 range1{elements1};\r\n            R2 range2{span<const P, 0>{}};\r\n            const same_as<set_symmetric_difference_result<iterator_t<R1>, iterator_t<R2>, O>> auto result =\r\n                set_symmetric_difference(range1.begin(), range1.end(), range2.begin(), range2.end(), O{output},\r\n                    ranges::less{}, get_first, get_second);\r\n            assert(result.in1 == range1.end());\r\n            assert(result.in2 == range2.end());\r\n            assert(result.out.peek() == output + ranges::size(elements1));\r\n            assert(equal(span{output}.first<ranges::size(elements1)>(), elements1));\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class Continuation>\r\nstruct generate_readable_ranges {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::range;\r\n\r\n        // The algorithm is completely oblivious to:\r\n        // * categories stronger than input\r\n        // * whether the end sentinel is an iterator\r\n        // * size information\r\n        // * iterator and/or sentinel differencing\r\n        // so let's vary proxyness for coverage and call it good.\r\n\r\n        Continuation::template call<Args...,\r\n            range<input, const P, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, const P, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n    }\r\n};\r\n\r\ntemplate <class Continuation>\r\nstruct generate_writable_iterators {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::iterator;\r\n\r\n        // The algorithm is completely oblivious to all properties except for proxyness,\r\n        // so again we'll vary that property, and we'll also get coverage from input iterators to ensure the algorithm\r\n        // doesn't inadvertently depend on the output_iterator-only `*i++ = meow` expression.\r\n\r\n        Continuation::template call<Args..., iterator<output, P, CanDifference::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args..., iterator<output, P, CanDifference::no, CanCompare::no, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args..., iterator<input, P, CanDifference::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args..., iterator<input, P, CanDifference::no, CanCompare::no, ProxyRef::yes>>();\r\n    }\r\n};\r\n\r\nconstexpr void run_tests() {\r\n    generate_readable_ranges<generate_readable_ranges<generate_writable_iterators<instantiator>>>::call();\r\n}\r\n\r\nint main() {\r\n    static_assert((run_tests(), true));\r\n    run_tests();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_set_union/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_set_union/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate that set_union_result aliases in_in_out_result\r\nstatic_assert(same_as<ranges::set_union_result<int, void*, double>, ranges::in_in_out_result<int, void*, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::set_union(borrowed<false>{}, borrowed<false>{}, nullptr_to<int>, ranges::less{},\r\n                          identity{}, identity{})),\r\n    ranges::set_union_result<ranges::dangling, ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::set_union(borrowed<false>{}, borrowed<true>{}, nullptr_to<int>, ranges::less{},\r\n                          identity{}, identity{})),\r\n    ranges::set_union_result<ranges::dangling, int*, int*>>);\r\nstatic_assert(same_as<decltype(ranges::set_union(borrowed<true>{}, borrowed<false>{}, nullptr_to<int>, ranges::less{},\r\n                          identity{}, identity{})),\r\n    ranges::set_union_result<int*, ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::set_union(\r\n                          borrowed<true>{}, borrowed<true>{}, nullptr_to<int>, ranges::less{}, identity{}, identity{})),\r\n    ranges::set_union_result<int*, int*, int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr P elements1[] = {{0, 10}, {0, 11}, {0, 12}, {1, 10}, {1, 11}, {3, 10}};\r\n    static constexpr P elements2[] = {{13, 0}, {14, 0}, {10, 2}, {11, 3}, {12, 3}};\r\n    static constexpr P expected[]  = {{0, 10}, {0, 11}, {0, 12}, {1, 10}, {1, 11}, {10, 2}, {3, 10}, {12, 3}};\r\n\r\n    template <ranges::input_range R1, ranges::input_range R2, weakly_incrementable O>\r\n    static constexpr void call() {\r\n        using ranges::set_union, ranges::set_union_result, ranges::equal, ranges::iterator_t, ranges::less;\r\n\r\n        constexpr auto osize = ranges::size(elements1) + ranges::size(elements2);\r\n\r\n        { // Validate range overload\r\n            P output[osize]{};\r\n            R1 range1{elements1};\r\n            R2 range2{elements2};\r\n            const same_as<set_union_result<iterator_t<R1>, iterator_t<R2>, O>> auto result =\r\n                set_union(range1, range2, O{output}, ranges::less{}, get_first, get_second);\r\n            assert(result.in1 == range1.end());\r\n            assert(result.in2 == range2.end());\r\n            assert(result.out.peek() == output + ranges::size(expected));\r\n            assert(equal(span{output}.first<ranges::size(expected)>(), expected));\r\n        }\r\n        { // Validate iterator overload\r\n            P output[osize]{};\r\n            R1 range1{elements1};\r\n            R2 range2{elements2};\r\n            const same_as<set_union_result<iterator_t<R1>, iterator_t<R2>, O>> auto result = set_union(range1.begin(),\r\n                range1.end(), range2.begin(), range2.end(), O{output}, ranges::less{}, get_first, get_second);\r\n            assert(result.in1 == range1.end());\r\n            assert(result.in2 == range2.end());\r\n            assert(result.out.peek() == output + ranges::size(expected));\r\n            assert(equal(span{output}.first<ranges::size(expected)>(), expected));\r\n        }\r\n\r\n        { // Validate range overload, empty range1\r\n            P output[osize]{};\r\n            R1 range1{span<const P, 0>{}};\r\n            R2 range2{elements2};\r\n            const same_as<set_union_result<iterator_t<R1>, iterator_t<R2>, O>> auto result =\r\n                set_union(range1, range2, O{output}, ranges::less{}, get_first, get_second);\r\n            assert(result.in1 == range1.end());\r\n            assert(result.in2 == range2.end());\r\n            assert(result.out.peek() == output + ranges::size(elements2));\r\n            assert(equal(span{output}.first<ranges::size(elements2)>(), elements2));\r\n        }\r\n        { // Validate iterator overload, empty range2\r\n            P output[osize]{};\r\n            R1 range1{elements1};\r\n            R2 range2{span<const P, 0>{}};\r\n            const same_as<set_union_result<iterator_t<R1>, iterator_t<R2>, O>> auto result = set_union(range1.begin(),\r\n                range1.end(), range2.begin(), range2.end(), O{output}, ranges::less{}, get_first, get_second);\r\n            assert(result.in1 == range1.end());\r\n            assert(result.in2 == range2.end());\r\n            assert(result.out.peek() == output + ranges::size(elements1));\r\n            assert(equal(span{output}.first<ranges::size(elements1)>(), elements1));\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class Continuation>\r\nstruct generate_readable_ranges {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::range;\r\n\r\n        // The algorithm is completely oblivious to:\r\n        // * categories stronger than input\r\n        // * whether the end sentinel is an iterator\r\n        // * size information\r\n        // * iterator and/or sentinel differencing\r\n        // so let's vary proxyness for coverage and call it good.\r\n\r\n        Continuation::template call<Args...,\r\n            range<input, const P, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args...,\r\n            range<input, const P, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>>();\r\n    }\r\n};\r\n\r\ntemplate <class Continuation>\r\nstruct generate_writable_iterators {\r\n    template <class... Args>\r\n    static constexpr void call() {\r\n        using namespace test;\r\n        using test::iterator;\r\n\r\n        // The algorithm is completely oblivious to all properties except for proxyness,\r\n        // so again we'll vary that property, and we'll also get coverage from input iterators to ensure the algorithm\r\n        // doesn't inadvertently depend on the output_iterator-only `*i++ = meow` expression.\r\n\r\n        Continuation::template call<Args..., iterator<output, P, CanDifference::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args..., iterator<output, P, CanDifference::no, CanCompare::no, ProxyRef::yes>>();\r\n\r\n        Continuation::template call<Args..., iterator<input, P, CanDifference::no, CanCompare::no, ProxyRef::no>>();\r\n        Continuation::template call<Args..., iterator<input, P, CanDifference::no, CanCompare::no, ProxyRef::yes>>();\r\n    }\r\n};\r\n\r\nconstexpr void run_tests() {\r\n    generate_readable_ranges<generate_readable_ranges<generate_writable_iterators<instantiator>>>::call();\r\n}\r\n\r\nint main() {\r\n    static_assert((run_tests(), true));\r\n    run_tests();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_shuffle/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_shuffle/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <random>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\nconst unsigned int seed = random_device{}();\r\nmt19937 gen{seed};\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::shuffle(borrowed<false>{}, gen)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::shuffle(borrowed<true>{}, gen)), int*>);\r\n\r\nstruct instantiator {\r\n    static constexpr int expected[7] = {1, 2, 3, 4, 5, 6, 7};\r\n\r\n    template <ranges::random_access_range ReadWrite>\r\n    static void call() {\r\n        using ranges::shuffle, ranges::equal, ranges::is_sorted, ranges::iterator_t;\r\n\r\n        { // Validate iterator + sentinel overload\r\n            int input[7] = {1, 2, 3, 4, 5, 6, 7};\r\n            ReadWrite wrapped_input{input};\r\n\r\n            auto result = shuffle(wrapped_input.begin(), wrapped_input.end(), gen);\r\n            static_assert(same_as<decltype(result), iterator_t<ReadWrite>>);\r\n            assert(result == wrapped_input.end());\r\n\r\n            sort(begin(input), end(input));\r\n            assert(equal(input, expected));\r\n        }\r\n        { // Validate range overload\r\n            int input[7] = {1, 2, 3, 4, 5, 6, 7};\r\n            ReadWrite wrapped_input{input};\r\n\r\n            auto result = shuffle(wrapped_input, gen);\r\n            static_assert(same_as<decltype(result), iterator_t<ReadWrite>>);\r\n            assert(result == wrapped_input.end());\r\n\r\n            sort(begin(input), end(input));\r\n            assert(equal(input, expected));\r\n        }\r\n    }\r\n};\r\n\r\nvoid test_urbg() { // COMPILE-ONLY\r\n    struct RandGen {\r\n        using result_type = uint16_t; // N5014 [rand.req.urng]/3\r\n        static constexpr result_type min() {\r\n            return 3;\r\n        }\r\n        static constexpr result_type max() {\r\n            return 1729;\r\n        }\r\n        result_type operator()() & {\r\n            return 4;\r\n        }\r\n    };\r\n\r\n    static_assert(uniform_random_bit_generator<RandGen>);\r\n\r\n    int arr[1] = {};\r\n    ranges::shuffle(arr, RandGen{});\r\n}\r\n\r\nint main() {\r\n    printf(\"Using seed: %u\\n\", seed);\r\n\r\n    test_random<instantiator, int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_sort/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_sort/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::sort(borrowed<false>{})), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::sort(borrowed<true>{})), int*>);\r\n\r\nstruct instantiator {\r\n    static constexpr array input = {P{-1200257975, 0}, P{-1260655766, 1}, P{-1298559576, 2}, P{-1459960308, 3},\r\n        P{-2095681771, 4}, P{-441494788, 5}, P{-47163201, 6}, P{-912489821, 7}, P{1429106719, 8}, P{1668617627, 9}};\r\n\r\n    template <ranges::random_access_range R>\r\n    static constexpr void call() {\r\n        using ranges::sort, ranges::is_sorted, ranges::iterator_t, ranges::less;\r\n\r\n        { // Validate range overload\r\n            auto buff = input;\r\n            const R range{buff};\r\n            const same_as<iterator_t<R>> auto result = sort(range, less{}, get_first);\r\n            assert(result == range.end());\r\n            assert(is_sorted(range, less{}, get_first));\r\n        }\r\n\r\n        { // Validate iterator overload\r\n            auto buff = input;\r\n            const R range{buff};\r\n            const same_as<iterator_t<R>> auto result = sort(range.begin(), range.end(), less{}, get_first);\r\n            assert(result == range.end());\r\n            assert(is_sorted(range.begin(), range.end(), less{}, get_first));\r\n        }\r\n\r\n        { // Validate empty range\r\n            const R range{span<P, 0>{}};\r\n            const same_as<iterator_t<R>> auto result = sort(range, less{}, get_first);\r\n            assert(result == range.end());\r\n            assert(is_sorted(range, less{}, get_first));\r\n        }\r\n    }\r\n};\r\n\r\nconstexpr void test_devcom_1559808() {\r\n    // Regression test for DevCom-1559808, a bad interaction between constexpr vector and the use of structured bindings\r\n    // in the implementation of ranges::sort.\r\n\r\n    vector<int> vec(33, 42); // NB: 33 > std::_ISORT_MAX\r\n    ranges::sort(vec);\r\n    assert(vec.back() == 42);\r\n}\r\n\r\nint main() {\r\n    static_assert((test_random<instantiator, P>(), true));\r\n    test_random<instantiator, P>();\r\n\r\n    static_assert((test_devcom_1559808(), true));\r\n    test_devcom_1559808();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_stable_partition/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_stable_partition/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto is_even = [](int i) { return i % 2 == 0; };\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::stable_partition(borrowed<false>{}, is_even)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::stable_partition(borrowed<true>{}, is_even)), ranges::subrange<int*>>);\r\n\r\nstruct instantiator {\r\n    template <ranges::bidirectional_range Range>\r\n    static void call() {\r\n        using ranges::is_partitioned, ranges::is_sorted, ranges::iterator_t, ranges::stable_partition, ranges::subrange;\r\n\r\n        { // Validate range overload\r\n            P input[] = {P{0, 1}, P{1, 2}, P{0, 3}, P{1, 4}, P{0, 5}, P{1, 6}, P{0, 7}, P{1, 8}};\r\n            Range range{input};\r\n            const auto mid                                         = ranges::next(range.begin(), 4);\r\n            const same_as<subrange<iterator_t<Range>>> auto result = stable_partition(range, is_even, get_first);\r\n            assert(result.begin() == mid);\r\n            assert(result.end() == range.end());\r\n            assert(is_partitioned(range, is_even, get_first));\r\n            assert(is_sorted(range));\r\n\r\n            // Validate empty range\r\n            const Range empty_range{span<P, 0>{}};\r\n            const same_as<subrange<iterator_t<Range>>> auto empty_result =\r\n                stable_partition(empty_range, is_even, get_first);\r\n            assert(empty_result.begin() == empty_range.end());\r\n            assert(empty_result.end() == empty_range.end());\r\n        }\r\n\r\n        { // Validate iterator overload\r\n            P input[] = {P{0, 1}, P{1, 2}, P{0, 3}, P{1, 4}, P{0, 5}, P{1, 6}, P{0, 7}, P{1, 8}};\r\n            Range range{input};\r\n            const auto mid = ranges::next(range.begin(), 4);\r\n            const same_as<subrange<iterator_t<Range>>> auto result =\r\n                stable_partition(range.begin(), range.end(), is_even, get_first);\r\n            assert(result.begin() == mid);\r\n            assert(result.end() == range.end());\r\n            assert(is_partitioned(range, is_even, get_first));\r\n            assert(is_sorted(range));\r\n\r\n            // Validate empty range\r\n            const Range empty_range{span<P, 0>{}};\r\n            const same_as<subrange<iterator_t<Range>>> auto empty_result =\r\n                stable_partition(empty_range.begin(), empty_range.end(), is_even, get_first);\r\n            assert(empty_result.begin() == empty_range.end());\r\n            assert(empty_result.end() == empty_range.end());\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    test_bidi<instantiator, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_stable_sort/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_stable_sort/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::stable_sort(borrowed<false>{})), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::stable_sort(borrowed<true>{})), int*>);\r\n\r\nstruct instantiator {\r\n    static constexpr array input = {P{1, 0}, P{-1260655766, 1}, P{-1298559576, 2}, P{1, 3}, P{-2095681771, 4},\r\n        P{-441494788, 5}, P{-47163201, 6}, P{1, 7}, P{1429106719, 8}, P{1, 9}};\r\n\r\n    template <ranges::random_access_range R>\r\n    static void call() {\r\n        using ranges::stable_sort, ranges::is_sorted, ranges::iterator_t, ranges::less;\r\n\r\n        { // Validate range overload\r\n            auto buff = input;\r\n            const R range{buff};\r\n            const same_as<iterator_t<R>> auto result = stable_sort(range, less{}, get_first);\r\n            assert(result == range.end());\r\n            assert(is_sorted(range)); // Check for stability by not using a projection\r\n        }\r\n\r\n        { // Validate iterator overload\r\n            auto buff = input;\r\n            const R range{buff};\r\n            const same_as<iterator_t<R>> auto result = stable_sort(range.begin(), range.end(), less{}, get_first);\r\n            assert(result == range.end());\r\n            assert(is_sorted(range.begin(), range.end())); // Check for stability by not using a projection\r\n        }\r\n\r\n        { // Validate empty range\r\n            const R range{span<P, 0>{}};\r\n            const same_as<iterator_t<R>> auto result = stable_sort(range, less{}, get_first);\r\n            assert(result == range.end());\r\n            assert(is_sorted(range, less{}));\r\n        }\r\n    }\r\n};\r\n\r\nvoid test_gh_2187() {\r\n    // GH-2187 <algorithm>: ranges::stable_sort() neither sorts nor permutes\r\n    constexpr array orig{0, 1, 3, 2, 5, 6, 4, 7, 8, 12, 9, 10, 12, 11, 13, 14, 17, 15, 16, 24, 18, 21, 19, 20, 22, 25,\r\n        23, 26, 27, 28, 29, 30, 31};\r\n    auto v = orig;\r\n    ranges::stable_sort(v);\r\n    assert(is_sorted(v.begin(), v.end()));\r\n    assert(is_permutation(v.begin(), v.end(), orig.begin(), orig.end()));\r\n}\r\n\r\nint main() {\r\n    test_random<instantiator, P>();\r\n    test_gh_2187();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_swap_ranges/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_swap_ranges/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\n// Validate that swap_ranges_result aliases in_in_result\r\nstatic_assert(same_as<ranges::swap_ranges_result<int, double>, ranges::in_in_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::swap_ranges(borrowed<false>{}, borrowed<false>{})),\r\n    ranges::swap_ranges_result<ranges::dangling, ranges::dangling>>);\r\nstatic_assert(same_as<decltype(ranges::swap_ranges(borrowed<true>{}, borrowed<false>{})),\r\n    ranges::swap_ranges_result<int*, ranges::dangling>>);\r\nstatic_assert(same_as<decltype(ranges::swap_ranges(borrowed<false>{}, borrowed<true>{})),\r\n    ranges::swap_ranges_result<ranges::dangling, int*>>);\r\nstatic_assert(\r\n    same_as<decltype(ranges::swap_ranges(borrowed<true>{}, borrowed<true>{})), ranges::swap_ranges_result<int*, int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr int expected_output1[3] = {34, 243, 9366};\r\n    static constexpr int expected_output2[3] = {13, 53, 1876};\r\n\r\n    template <ranges::input_range ReadWrite1, ranges::input_range ReadWrite2>\r\n    static constexpr void call() {\r\n        using ranges::swap_ranges, ranges::swap_ranges_result, ranges::iterator_t, ranges::equal;\r\n        { // Validate iterator + sentinel overload\r\n            int input1[3] = {13, 53, 1876};\r\n            int input2[3] = {34, 243, 9366};\r\n            ReadWrite1 wrapped_input1{input1};\r\n            ReadWrite2 wrapped_input2{input2};\r\n\r\n            auto result =\r\n                swap_ranges(wrapped_input1.begin(), wrapped_input1.end(), wrapped_input2.begin(), wrapped_input2.end());\r\n            static_assert(\r\n                same_as<decltype(result), swap_ranges_result<iterator_t<ReadWrite1>, iterator_t<ReadWrite2>>>);\r\n            assert(result.in1 == wrapped_input1.end());\r\n            assert(result.in2 == wrapped_input2.end());\r\n            assert(equal(input1, expected_output1));\r\n            assert(equal(input2, expected_output2));\r\n        }\r\n        { // Validate range overload\r\n            int input1[3] = {13, 53, 1876};\r\n            int input2[3] = {34, 243, 9366};\r\n            ReadWrite1 wrapped_input1{input1};\r\n            ReadWrite2 wrapped_input2{input2};\r\n\r\n            auto result = swap_ranges(wrapped_input1, wrapped_input2);\r\n            static_assert(\r\n                same_as<decltype(result), swap_ranges_result<iterator_t<ReadWrite1>, iterator_t<ReadWrite2>>>);\r\n            assert(result.in1 == wrapped_input1.end());\r\n            assert(result.in2 == wrapped_input2.end());\r\n            assert(equal(input1, expected_output1));\r\n            assert(equal(input2, expected_output2));\r\n        }\r\n    }\r\n};\r\n\r\n#ifdef TEST_EVERYTHING\r\nint main() {\r\n    // no constexpr tests here; the below exceeds constexpr step limits\r\n    test_in_in<instantiator, int, int>();\r\n}\r\n#else // ^^^ test all permutations of range properties / test only interesting permutations vvv\r\ntemplate <class Category, test::ProxyRef IsProxyRef>\r\nusing test_range = test::range<Category, int, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag>}, IsProxyRef>;\r\n\r\nconstexpr void run_tests() {\r\n    using namespace test;\r\n    // The algorithm is completely oblivious to:\r\n    // * categories stronger than input\r\n    // * whether the end sentinel is an iterator\r\n    // * size information\r\n    // * iterator and/or sentinel differencing\r\n    // so let's vary proxyness for coverage and add a range of each category out of paranoia.\r\n\r\n    instantiator::call<test_range<input, ProxyRef::yes>, test_range<input, ProxyRef::yes>>();\r\n    instantiator::call<test_range<input, ProxyRef::yes>, test_range<input, ProxyRef::no>>();\r\n    instantiator::call<test_range<input, ProxyRef::no>, test_range<input, ProxyRef::yes>>();\r\n    instantiator::call<test_range<input, ProxyRef::no>, test_range<input, ProxyRef::no>>();\r\n\r\n    instantiator::call<test_range<input, ProxyRef::yes>, test_range<fwd, ProxyRef::yes>>();\r\n    instantiator::call<test_range<input, ProxyRef::yes>, test_range<bidi, ProxyRef::yes>>();\r\n    instantiator::call<test_range<input, ProxyRef::yes>, test_range<random, ProxyRef::yes>>();\r\n    instantiator::call<test_range<input, ProxyRef::yes>, test_range<contiguous, ProxyRef::no>>();\r\n\r\n    instantiator::call<test_range<fwd, ProxyRef::yes>, test_range<input, ProxyRef::yes>>();\r\n    instantiator::call<test_range<bidi, ProxyRef::yes>, test_range<input, ProxyRef::yes>>();\r\n    instantiator::call<test_range<random, ProxyRef::yes>, test_range<input, ProxyRef::yes>>();\r\n    instantiator::call<test_range<contiguous, ProxyRef::no>, test_range<input, ProxyRef::yes>>();\r\n\r\n    instantiator::call<test_range<contiguous, ProxyRef::no>, test_range<contiguous, ProxyRef::no>>();\r\n}\r\n\r\nint main() {\r\n    static_assert((run_tests(), true));\r\n    run_tests();\r\n}\r\n#endif // TEST_EVERYTHING\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_transform_binary/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_transform_binary/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate that binary_transform_result aliases in_in_out_result\r\nstatic_assert(same_as<ranges::binary_transform_result<int, P, double>, ranges::in_in_out_result<int, P, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::transform(borrowed<false>{}, borrowed<false>{}, nullptr_to<int>, plus{})),\r\n    ranges::binary_transform_result<ranges::dangling, ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::transform(borrowed<false>{}, borrowed<true>{}, nullptr_to<int>, plus{})),\r\n    ranges::binary_transform_result<ranges::dangling, int*, int*>>);\r\nstatic_assert(same_as<decltype(ranges::transform(borrowed<true>{}, borrowed<false>{}, nullptr_to<int>, plus{})),\r\n    ranges::binary_transform_result<int*, ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::transform(borrowed<true>{}, borrowed<true>{}, nullptr_to<int>, plus{})),\r\n    ranges::binary_transform_result<int*, int*, int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr P input1[3]     = {{1, 99}, {4, 98}, {5, 97}};\r\n    static constexpr P input2[3]     = {{99, 6}, {98, 7}, {97, 8}};\r\n    static constexpr int expected[3] = {7, 11, 13};\r\n\r\n    static constexpr P shortInput1[2]     = {{1, 99}, {4, 98}};\r\n    static constexpr P shortInput2[2]     = {{99, 6}, {98, 7}};\r\n    static constexpr int shortExpected[2] = {7, 11};\r\n\r\n    template <ranges::input_range Read1, ranges::input_range Read2, weakly_incrementable Write>\r\n    static constexpr void call() {\r\n        using ranges::transform, ranges::binary_transform_result, ranges::iterator_t;\r\n        { // Validate iterator + sentinel overload, first range shorter\r\n            int output[2] = {-1, -1};\r\n            Read1 wrapped_in1{shortInput1};\r\n            Read2 wrapped_in2{input2};\r\n\r\n            auto result = transform(wrapped_in1.begin(), wrapped_in1.end(), wrapped_in2.begin(), wrapped_in2.end(),\r\n                Write{output}, plus{}, get_first, get_second);\r\n            static_assert(\r\n                same_as<decltype(result), binary_transform_result<iterator_t<Read1>, iterator_t<Read2>, Write>>);\r\n            assert(result.in1 == wrapped_in1.end());\r\n            assert(next(result.in2) == wrapped_in2.end());\r\n            assert(result.out.peek() == output + 2);\r\n            assert(ranges::equal(output, shortExpected));\r\n        }\r\n        { // Validate iterator + sentinel overload, second range shorter\r\n            int output[2] = {-1, -1};\r\n            Read1 wrapped_in1{input1};\r\n            Read2 wrapped_in2{shortInput2};\r\n\r\n            auto result = transform(wrapped_in1.begin(), wrapped_in1.end(), wrapped_in2.begin(), wrapped_in2.end(),\r\n                Write{output}, plus{}, get_first, get_second);\r\n            static_assert(\r\n                same_as<decltype(result), binary_transform_result<iterator_t<Read1>, iterator_t<Read2>, Write>>);\r\n            assert(next(result.in1) == wrapped_in1.end());\r\n            assert(result.in2 == wrapped_in2.end());\r\n            assert(result.out.peek() == output + 2);\r\n            assert(ranges::equal(output, shortExpected));\r\n        }\r\n        { // Validate range overload, first range shorter\r\n            int output[2] = {-1, -1};\r\n            Read1 wrapped_in1{shortInput1};\r\n            Read2 wrapped_in2{input2};\r\n\r\n            auto result = transform(wrapped_in1, wrapped_in2, Write{output}, plus{}, get_first, get_second);\r\n            static_assert(\r\n                same_as<decltype(result), binary_transform_result<iterator_t<Read1>, iterator_t<Read2>, Write>>);\r\n            assert(result.in1 == wrapped_in1.end());\r\n            assert(next(result.in2) == wrapped_in2.end());\r\n            assert(result.out.peek() == output + 2);\r\n            assert(ranges::equal(output, shortExpected));\r\n        }\r\n        { // Validate range overload, second range shorter\r\n            int output[2] = {-1, -1};\r\n            Read1 wrapped_in1{input1};\r\n            Read2 wrapped_in2{shortInput2};\r\n\r\n            auto result = transform(wrapped_in1, wrapped_in2, Write{output}, plus{}, get_first, get_second);\r\n            static_assert(\r\n                same_as<decltype(result), binary_transform_result<iterator_t<Read1>, iterator_t<Read2>, Write>>);\r\n            assert(next(result.in1) == wrapped_in1.end());\r\n            assert(result.in2 == wrapped_in2.end());\r\n            assert(result.out.peek() == output + 2);\r\n            assert(ranges::equal(output, shortExpected));\r\n        }\r\n    }\r\n};\r\n\r\nusing Elem1 = const P;\r\nusing Elem2 = const P;\r\nusing Elem3 = int;\r\n\r\n#ifdef TEST_EVERYTHING\r\nint main() {\r\n    // No constexpr test here; the test_in_in_write call exceeds the maximum number of steps in a constexpr computation.\r\n    test_in_in_write<instantiator, Elem1, Elem2, Elem3>();\r\n}\r\n#else // ^^^ test all range combinations / test only interesting range combos vvv\r\ntemplate <class Elem, test::Sized IsSized>\r\nusing in_test_range = test::range<input_iterator_tag, Elem, IsSized, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare::yes, test::ProxyRef::yes>;\r\ntemplate <class Elem>\r\nusing out_test_iterator =\r\n    test::iterator<output_iterator_tag, Elem, test::CanDifference::no, test::CanCompare::yes, test::ProxyRef::yes>;\r\n\r\nconstexpr bool run_tests() {\r\n    // All (except contiguous) proxy reference types, since the algorithm doesn't really care.\r\n    using test::Common, test::Sized;\r\n\r\n    // both input, non-common, and sized or unsized\r\n    instantiator::call<in_test_range<Elem1, Sized::no>, in_test_range<Elem2, Sized::no>, out_test_iterator<Elem3>>();\r\n    instantiator::call<in_test_range<Elem1, Sized::yes>, in_test_range<Elem2, Sized::yes>, out_test_iterator<Elem3>>();\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(run_tests());\r\n    run_tests();\r\n}\r\n#endif // TEST_EVERYTHING\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_transform_unary/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_transform_unary/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate that unary_transform_result aliases in_out_result\r\nstatic_assert(same_as<ranges::unary_transform_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\nconstexpr auto minus_one = [](const int x) { return x - 1; };\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::transform(borrowed<false>{}, nullptr_to<int>, minus_one)),\r\n    ranges::unary_transform_result<ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::transform(borrowed<true>{}, nullptr_to<int>, minus_one)),\r\n    ranges::unary_transform_result<int*, int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr P input[3]      = {{1, 99}, {4, 98}, {5, 97}};\r\n    static constexpr int expected[3] = {0, 3, 4};\r\n\r\n    template <ranges::input_range Read, weakly_incrementable Write>\r\n    static constexpr void call() {\r\n        using ranges::transform, ranges::unary_transform_result, ranges::iterator_t;\r\n        { // Validate iterator + sentinel overload\r\n            int output[3] = {-1, -1, -1};\r\n            Read wrapped_in{input};\r\n\r\n            auto result = transform(wrapped_in.begin(), wrapped_in.end(), Write{output}, minus_one, get_first);\r\n            static_assert(same_as<decltype(result), unary_transform_result<iterator_t<Read>, Write>>);\r\n            assert(result.in == wrapped_in.end());\r\n            assert(result.out.peek() == output + 3);\r\n            assert(ranges::equal(output, expected));\r\n        }\r\n        { // Validate range overload\r\n            int output[3] = {-1, -1, -1};\r\n            Read wrapped_in{input};\r\n\r\n            auto result = transform(wrapped_in, Write{output}, minus_one, get_first);\r\n            static_assert(same_as<decltype(result), unary_transform_result<iterator_t<Read>, Write>>);\r\n            assert(result.in == wrapped_in.end());\r\n            assert(result.out.peek() == output + 3);\r\n            assert(ranges::equal(output, expected));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n#ifndef _PREFAST_ // TRANSITION, GH-1030\r\n    static_assert((test_in_write<instantiator, const P, int>(), true));\r\n#endif\r\n    test_in_write<instantiator, const P, int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_copy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_copy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <memory>\r\n\r\n// Regression test for GH-1830, in which ranges::uninitialized_copy used\r\n// _Rewrap_iterator which was defined in <algorithm> (now in <xutility>).\r\n\r\nvoid unused_function() {\r\n    const int src[] = {11, 22, 33, 44, 55};\r\n    int dst[5];\r\n\r\n    std::ranges::uninitialized_copy(src, dst);\r\n}\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstdlib>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate that uninitialized_copy_result aliases in_out_result\r\nstatic_assert(same_as<ranges::uninitialized_copy_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::uninitialized_copy(borrowed<false>{}, borrowed<false>{})),\r\n    ranges::uninitialized_copy_result<ranges::dangling, ranges::dangling>>);\r\nstatic_assert(same_as<decltype(ranges::uninitialized_copy(borrowed<false>{}, borrowed<true>{})),\r\n    ranges::uninitialized_copy_result<ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::uninitialized_copy(borrowed<true>{}, borrowed<false>{})),\r\n    ranges::uninitialized_copy_result<int*, ranges::dangling>>);\r\nstatic_assert(same_as<decltype(ranges::uninitialized_copy(borrowed<true>{}, borrowed<true>{})),\r\n    ranges::uninitialized_copy_result<int*, int*>>);\r\n\r\nstruct int_wrapper {\r\n    inline static int constructions = 0;\r\n    inline static int destructions  = 0;\r\n\r\n    static void clear_counts() {\r\n        constructions = 0;\r\n        destructions  = 0;\r\n    }\r\n\r\n    static constexpr int magic_throwing_val = 29;\r\n    int val                                 = 10;\r\n\r\n    int_wrapper() {\r\n        ++constructions;\r\n    }\r\n    int_wrapper(int x) : val{x} {\r\n        ++constructions;\r\n    }\r\n\r\n    int_wrapper(const int_wrapper& that) {\r\n        if (that.val == magic_throwing_val) {\r\n            throw magic_throwing_val;\r\n        }\r\n\r\n        val = that.val;\r\n        ++constructions;\r\n    }\r\n\r\n    ~int_wrapper() {\r\n        ++destructions;\r\n    }\r\n\r\n    int_wrapper& operator=(const int_wrapper&) {\r\n        abort();\r\n    }\r\n\r\n    auto operator<=>(const int_wrapper&) const = default;\r\n};\r\n\r\n#ifdef _M_CEE // TRANSITION, VSO-1664341\r\nconstexpr auto get_int_wrapper_val = [](const int_wrapper& w) { return w.val; };\r\n#else // ^^^ workaround / no workaround vvv\r\nconstexpr auto get_int_wrapper_val = &int_wrapper::val;\r\n#endif // ^^^ no workaround ^^^\r\n\r\nstruct instantiator {\r\n    static constexpr int expected_output[]      = {13, 55, 12345};\r\n    static constexpr int expected_output_long[] = {13, 55, 12345, -1};\r\n    static constexpr int expected_input[]       = {13, 55, 12345};\r\n    static constexpr int expected_input_long[]  = {13, 55, 12345, 42};\r\n\r\n    template <ranges::input_range R, ranges::forward_range W>\r\n    static void call() {\r\n        using ranges::destroy, ranges::uninitialized_copy, ranges::uninitialized_copy_result, ranges::equal,\r\n            ranges::equal_to, ranges::iterator_t;\r\n\r\n        { // Validate range overload\r\n            int_wrapper input[3] = {13, 55, 12345};\r\n            R wrapped_input{input};\r\n            holder<int_wrapper, 3> mem;\r\n            W wrapped_output{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            const same_as<uninitialized_copy_result<iterator_t<R>, iterator_t<W>>> auto result =\r\n                uninitialized_copy(wrapped_input, wrapped_output);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out == wrapped_output.end());\r\n            assert(equal(wrapped_output, expected_output, equal_to{}, get_int_wrapper_val));\r\n            assert(equal(input, expected_input, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_output);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n\r\n        { // Validate iterator overload\r\n            int_wrapper input[3] = {13, 55, 12345};\r\n            R wrapped_input{input};\r\n            holder<int_wrapper, 3> mem;\r\n            W wrapped_output{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            const same_as<uninitialized_copy_result<iterator_t<R>, iterator_t<W>>> auto result = uninitialized_copy(\r\n                wrapped_input.begin(), wrapped_input.end(), wrapped_output.begin(), wrapped_output.end());\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out == wrapped_output.end());\r\n            assert(equal(wrapped_output, expected_output, equal_to{}, get_int_wrapper_val));\r\n            assert(equal(input, expected_input, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_output);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n\r\n        { // Validate range overload shorter output\r\n            int_wrapper input[4] = {13, 55, 12345, 42};\r\n            R wrapped_input{input};\r\n            holder<int_wrapper, 3> mem;\r\n            W wrapped_output{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            same_as<uninitialized_copy_result<iterator_t<R>, iterator_t<W>>> auto result =\r\n                uninitialized_copy(wrapped_input, wrapped_output);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(++result.in == wrapped_input.end());\r\n            assert(result.out == wrapped_output.end());\r\n            assert(equal(wrapped_output, expected_output, equal_to{}, get_int_wrapper_val));\r\n            assert(equal(input, expected_input_long, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_output);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n\r\n        { // Validate range overload shorter input\r\n            int_wrapper input[3] = {13, 55, 12345};\r\n            R wrapped_input{input};\r\n            holder<int_wrapper, 4> mem;\r\n            W wrapped_output{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            same_as<uninitialized_copy_result<iterator_t<R>, iterator_t<W>>> auto result =\r\n                uninitialized_copy(wrapped_input, wrapped_output);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result.in == wrapped_input.end());\r\n            construct_at(addressof(*result.out), -1); // Need to construct non written element for comparison\r\n            assert(++result.out == wrapped_output.end());\r\n            assert(equal(wrapped_output, expected_output_long, equal_to{}, get_int_wrapper_val));\r\n            assert(equal(input, expected_input, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_output);\r\n            assert(int_wrapper::constructions == 4);\r\n            assert(int_wrapper::destructions == 4);\r\n        }\r\n    }\r\n};\r\n\r\nstruct throwing_test {\r\n    static constexpr int expected_input[] = {13, 55, int_wrapper::magic_throwing_val, 12345};\r\n\r\n    template <ranges::input_range R, ranges::forward_range W>\r\n    static void call() {\r\n        // Validate only range overload (one is plenty since they both use the same backend)\r\n        int_wrapper input[] = {13, 55, int_wrapper::magic_throwing_val, 12345};\r\n        R wrapped_input{input};\r\n        holder<int_wrapper, 4> mem;\r\n        W wrapped_output{mem.as_span()};\r\n\r\n        int_wrapper::clear_counts();\r\n        try {\r\n            (void) ranges::uninitialized_copy(wrapped_input, wrapped_output);\r\n            assert(false);\r\n        } catch (int i) {\r\n            assert(i == int_wrapper::magic_throwing_val);\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n        assert(int_wrapper::constructions == 2);\r\n        assert(int_wrapper::destructions == 2);\r\n        assert(ranges::equal(input, expected_input, ranges::equal_to{}, get_int_wrapper_val));\r\n    }\r\n};\r\n\r\nstruct memcpy_test {\r\n    static constexpr int expected_output[]      = {13, 55, 12345};\r\n    static constexpr int expected_output_long[] = {13, 55, 12345, -1};\r\n    static constexpr int expected_input[]       = {13, 55, 12345};\r\n    static constexpr int expected_input_long[]  = {13, 55, 12345, 42};\r\n\r\n    static void call() {\r\n        { // Validate matching ranges\r\n            int input[]  = {13, 55, 12345};\r\n            int output[] = {-1, -1, -1};\r\n\r\n            const auto result = ranges::uninitialized_copy(input, output);\r\n            assert(result.in == end(input));\r\n            assert(result.out == end(output));\r\n            assert(ranges::equal(input, expected_input));\r\n            assert(ranges::equal(output, expected_output));\r\n        }\r\n\r\n        { // Validate input shorter\r\n            int input[]  = {13, 55, 12345};\r\n            int output[] = {-1, -1, -1, -1};\r\n\r\n            auto result = ranges::uninitialized_copy(input, output);\r\n            assert(result.in == end(input));\r\n            assert(++result.out == end(output));\r\n            assert(ranges::equal(input, expected_input));\r\n            assert(ranges::equal(output, expected_output_long));\r\n        }\r\n\r\n        { // Validate output shorter\r\n            int input[]  = {13, 55, 12345, 42};\r\n            int output[] = {-1, -1, -1};\r\n\r\n            auto result = ranges::uninitialized_copy(input, output);\r\n            assert(++result.in == end(input));\r\n            assert(result.out == end(output));\r\n            assert(ranges::equal(input, expected_input_long));\r\n            assert(ranges::equal(output, expected_output));\r\n        }\r\n\r\n        { // Validate non-common input range\r\n            int input[]  = {13, 55, 12345};\r\n            int output[] = {-1, -1, -1};\r\n\r\n            const auto result =\r\n                ranges::uninitialized_copy(begin(input), unreachable_sentinel, begin(output), end(output));\r\n            assert(result.in == end(input));\r\n            assert(result.out == end(output));\r\n            assert(ranges::equal(input, expected_input));\r\n            assert(ranges::equal(output, expected_output));\r\n        }\r\n\r\n        { // Validate non-common output range\r\n            int input[]  = {13, 55, 12345};\r\n            int output[] = {-1, -1, -1};\r\n\r\n            const auto result =\r\n                ranges::uninitialized_copy(begin(input), end(input), begin(output), unreachable_sentinel);\r\n            assert(result.in == end(input));\r\n            assert(result.out == end(output));\r\n            assert(ranges::equal(input, expected_input));\r\n            assert(ranges::equal(output, expected_output));\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <test::ProxyRef IsProxy>\r\nusing test_input  = test::range<test::input, int_wrapper, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n     test::CanCompare::no, IsProxy>;\r\nusing test_output = test::range<test::fwd, int_wrapper, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare::yes, test::ProxyRef::no>;\r\n\r\nint main() {\r\n    // The algorithm is oblivious to non-required category, size, difference, and \"proxyness\" of the input range. It\r\n    // _is_ sensitive to proxyness in that it requires non-proxy references for the output range.\r\n\r\n    instantiator::call<test_input<test::ProxyRef::no>, test_output>();\r\n    instantiator::call<test_input<test::ProxyRef::yes>, test_output>();\r\n    throwing_test::call<test_input<test::ProxyRef::no>, test_output>();\r\n    throwing_test::call<test_input<test::ProxyRef::yes>, test_output>();\r\n    memcpy_test::call();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_copy_n/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_copy_n/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstdlib>\r\n#include <memory>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate that uninitialized_copy_n_result aliases in_out_result\r\nstatic_assert(same_as<ranges::uninitialized_copy_n_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\nstruct int_wrapper {\r\n    inline static int constructions = 0;\r\n    inline static int destructions  = 0;\r\n\r\n    static void clear_counts() {\r\n        constructions = 0;\r\n        destructions  = 0;\r\n    }\r\n\r\n    static constexpr int magic_throwing_val = 29;\r\n    int val                                 = 10;\r\n\r\n    int_wrapper() {\r\n        ++constructions;\r\n    }\r\n    int_wrapper(int x) : val{x} {\r\n        ++constructions;\r\n    }\r\n\r\n    int_wrapper(const int_wrapper& that) {\r\n        if (that.val == magic_throwing_val) {\r\n            throw magic_throwing_val;\r\n        }\r\n\r\n        val = that.val;\r\n        ++constructions;\r\n    }\r\n\r\n    ~int_wrapper() {\r\n        ++destructions;\r\n    }\r\n\r\n    int_wrapper& operator=(const int_wrapper&) {\r\n        abort();\r\n    }\r\n\r\n    auto operator<=>(const int_wrapper&) const = default;\r\n};\r\n\r\n#ifdef _M_CEE // TRANSITION, VSO-1664341\r\nconstexpr auto get_int_wrapper_val = [](const int_wrapper& w) { return w.val; };\r\n#else // ^^^ workaround / no workaround vvv\r\nconstexpr auto get_int_wrapper_val = &int_wrapper::val;\r\n#endif // ^^^ no workaround ^^^\r\n\r\nstruct instantiator {\r\n    static constexpr int expected_output[]      = {13, 55, 12345};\r\n    static constexpr int expected_output_long[] = {13, 55, 12345, -1};\r\n    static constexpr int expected_input[]       = {13, 55, 12345};\r\n    static constexpr int expected_input_long[]  = {13, 55, 12345, 42};\r\n\r\n    template <ranges::input_range Read, ranges::forward_range Write>\r\n    static void call() {\r\n        using ranges::destroy, ranges::uninitialized_copy_n, ranges::uninitialized_copy_n_result, ranges::equal,\r\n            ranges::equal_to, ranges::iterator_t;\r\n\r\n        { // Validate equal ranges\r\n            int_wrapper input[3] = {13, 55, 12345};\r\n            Read wrapped_input{input};\r\n            holder<int_wrapper, 3> mem;\r\n            Write wrapped_output{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            const same_as<uninitialized_copy_n_result<iterator_t<Read>, iterator_t<Write>>> auto result =\r\n                uninitialized_copy_n(wrapped_input.begin(), 3, wrapped_output.begin(), wrapped_output.end());\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out == wrapped_output.end());\r\n            assert(equal(wrapped_output, expected_output, equal_to{}, get_int_wrapper_val));\r\n            assert(equal(input, expected_input, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_output);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n\r\n        { // Validate shorter output\r\n            int_wrapper input[4] = {13, 55, 12345, 42};\r\n            Read wrapped_input{input};\r\n            holder<int_wrapper, 3> mem;\r\n            Write wrapped_output{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            same_as<uninitialized_copy_n_result<iterator_t<Read>, iterator_t<Write>>> auto result =\r\n                uninitialized_copy_n(wrapped_input.begin(), 3, wrapped_output.begin(), wrapped_output.end());\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(++result.in == wrapped_input.end());\r\n            assert(result.out == wrapped_output.end());\r\n            assert(equal(wrapped_output, expected_output, equal_to{}, get_int_wrapper_val));\r\n            assert(equal(input, expected_input_long, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_output);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n\r\n        { // Validate shorter input\r\n            int_wrapper input[3] = {13, 55, 12345};\r\n            Read wrapped_input{input};\r\n            holder<int_wrapper, 4> mem;\r\n            Write wrapped_output{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            same_as<uninitialized_copy_n_result<iterator_t<Read>, iterator_t<Write>>> auto result =\r\n                uninitialized_copy_n(wrapped_input.begin(), 3, wrapped_output.begin(), wrapped_output.end());\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result.in == wrapped_input.end());\r\n            construct_at(addressof(*result.out), -1); // Need to construct non written element for comparison\r\n            assert(++result.out == wrapped_output.end());\r\n            assert(equal(wrapped_output, expected_output_long, equal_to{}, get_int_wrapper_val));\r\n            assert(equal(input, expected_input, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_output);\r\n            assert(int_wrapper::constructions == 4);\r\n            assert(int_wrapper::destructions == 4);\r\n        }\r\n    }\r\n};\r\n\r\nstruct throwing_test {\r\n    static constexpr int expected_input[] = {13, 55, int_wrapper::magic_throwing_val, 12345};\r\n\r\n    template <ranges::input_range Read, ranges::forward_range Write>\r\n    static void call() {\r\n        int_wrapper input[] = {13, 55, int_wrapper::magic_throwing_val, 12345};\r\n        Read wrapped_input{input};\r\n        holder<int_wrapper, 4> mem;\r\n        Write wrapped_output{mem.as_span()};\r\n\r\n        int_wrapper::clear_counts();\r\n        try {\r\n            (void) ranges::uninitialized_copy_n(wrapped_input.begin(), 4, wrapped_output.begin(), wrapped_output.end());\r\n            assert(false);\r\n        } catch (int i) {\r\n            assert(i == int_wrapper::magic_throwing_val);\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n        assert(int_wrapper::constructions == 2);\r\n        assert(int_wrapper::destructions == 2);\r\n    }\r\n};\r\n\r\nstruct memcpy_test {\r\n    static constexpr int expected_output[]      = {13, 55, 12345, -1};\r\n    static constexpr int expected_output_long[] = {13, 55, -1, -1};\r\n    static constexpr int expected_input[]       = {13, 55, 12345, 42};\r\n    static constexpr int expected_input_short[] = {13, 55};\r\n    static constexpr int expected_input_long[]  = {13, 55, 12345, 42};\r\n\r\n    static void call() {\r\n        using ranges::uninitialized_copy_n, ranges::uninitialized_copy_n_result, ranges::equal, ranges::iterator_t;\r\n        { // Validate range overload\r\n            vector<int> input  = {13, 55, 12345, 42};\r\n            vector<int> output = {-1, -1, -1, -1};\r\n\r\n            const same_as<uninitialized_copy_n_result<iterator_t<vector<int>>, iterator_t<vector<int>>>> auto result =\r\n                uninitialized_copy_n(input.begin(), 3, output.begin(), output.end());\r\n            assert(next(result.in) == input.end());\r\n            assert(next(result.out) == output.end());\r\n            assert(equal(input, expected_input));\r\n            assert(equal(output, expected_output));\r\n        }\r\n\r\n        { // Validate shorter input\r\n            vector<int> input  = {13, 55};\r\n            vector<int> output = {-1, -1, -1, -1};\r\n\r\n            const same_as<uninitialized_copy_n_result<iterator_t<vector<int>>, iterator_t<vector<int>>>> auto result =\r\n                uninitialized_copy_n(input.begin(), 2, output.begin(), output.end());\r\n            assert(result.in == input.end());\r\n            assert(next(result.out, 2) == output.end());\r\n            assert(equal(input, expected_input_short));\r\n            assert(equal(output, expected_output_long));\r\n        }\r\n\r\n        { // Validate shorter output\r\n            vector<int> input  = {13, 55, 12345, 42};\r\n            vector<int> output = {-1, -1};\r\n\r\n            const same_as<uninitialized_copy_n_result<iterator_t<vector<int>>, iterator_t<vector<int>>>> auto result =\r\n                uninitialized_copy_n(input.begin(), 2, output.begin(), output.end());\r\n            assert(next(result.in, 2) == input.end());\r\n            assert(result.out == output.end());\r\n            assert(equal(input, expected_input));\r\n            assert(equal(output, expected_input_short));\r\n        }\r\n\r\n        { // Validate unreachable_sentinel\r\n            vector<int> input  = {13, 55, 12345, 42};\r\n            vector<int> output = {-1, -1, -1, -1};\r\n\r\n            const same_as<uninitialized_copy_n_result<iterator_t<vector<int>>, iterator_t<vector<int>>>> auto result =\r\n                uninitialized_copy_n(input.begin(), 3, output.begin(), unreachable_sentinel);\r\n            assert(next(result.in) == input.end());\r\n            assert(next(result.out) == output.end());\r\n            assert(equal(input, expected_input));\r\n            assert(equal(output, expected_output));\r\n        }\r\n\r\n        { // Validate non-common range\r\n            vector<int> input  = {13, 55, 12345, 42};\r\n            vector<int> output = {-1, -1, -1, -1};\r\n\r\n            auto wrapped_output = output | views::take_while([](const auto&) { return true; });\r\n            const same_as<uninitialized_copy_n_result<iterator_t<vector<int>>, iterator_t<vector<int>>>> auto result =\r\n                uninitialized_copy_n(input.begin(), 3, wrapped_output.begin(), wrapped_output.end());\r\n            assert(next(result.in) == input.end());\r\n            assert(next(result.out) == output.end());\r\n            assert(equal(input, expected_input));\r\n            assert(equal(output, expected_output));\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <test::ProxyRef IsProxy>\r\nusing test_input  = test::range<test::input, int_wrapper, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n     test::CanCompare::no, IsProxy>;\r\nusing test_output = test::range<test::fwd, int_wrapper, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare::yes, test::ProxyRef::no>;\r\n\r\nint main() {\r\n    // The algorithm is oblivious to non-required category, size, difference, and \"proxyness\" of the input range. It\r\n    // _is_ sensitive to proxyness in that it requires non-proxy references for the output range.\r\n\r\n    instantiator::call<test_input<test::ProxyRef::no>, test_output>();\r\n    instantiator::call<test_input<test::ProxyRef::yes>, test_output>();\r\n    throwing_test::call<test_input<test::ProxyRef::no>, test_output>();\r\n    throwing_test::call<test_input<test::ProxyRef::yes>, test_output>();\r\n    memcpy_test::call();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_default_construct/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_default_construct/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <memory>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::uninitialized_default_construct(borrowed<true>{})), int*>);\r\nstatic_assert(same_as<decltype(ranges::uninitialized_default_construct(borrowed<false>{})), ranges::dangling>);\r\n\r\nstruct int_wrapper {\r\n    inline static int constructions = 0;\r\n    inline static int destructions  = 0;\r\n\r\n    static void clear_counts() {\r\n        constructions = 0;\r\n        destructions  = 0;\r\n    }\r\n\r\n    static constexpr int magic_throwing_val = 4;\r\n    int val;\r\n\r\n    int_wrapper() {\r\n        if (++constructions == magic_throwing_val) {\r\n            throw magic_throwing_val;\r\n        }\r\n    }\r\n\r\n    ~int_wrapper() {\r\n        ++destructions;\r\n    }\r\n\r\n    auto operator<=>(const int_wrapper&) const = default;\r\n};\r\nstatic_assert(default_initializable<int_wrapper>);\r\n\r\nstruct instantiator {\r\n    template <ranges::forward_range Write>\r\n    static void call() {\r\n        using ranges::uninitialized_default_construct, ranges::destroy, ranges::equal, ranges::equal_to,\r\n            ranges::iterator_t;\r\n\r\n        { // Validate range overload\r\n            holder<int_wrapper, 3> mem;\r\n            Write wrapped_input{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            const same_as<iterator_t<Write>> auto result = uninitialized_default_construct(wrapped_input);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result == wrapped_input.end());\r\n            destroy(wrapped_input);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n\r\n        { // Validate iterator overload\r\n            holder<int_wrapper, 3> mem;\r\n            Write wrapped_input{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            const same_as<iterator_t<Write>> auto result =\r\n                uninitialized_default_construct(wrapped_input.begin(), wrapped_input.end());\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result == wrapped_input.end());\r\n            destroy(wrapped_input);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n    }\r\n};\r\n\r\nstruct throwing_test {\r\n    template <ranges::forward_range Write>\r\n    static void call() {\r\n        // Validate only range overload (one is plenty since they both use the same backend)\r\n        holder<int_wrapper, int_wrapper::magic_throwing_val> mem;\r\n        Write wrapped_input{mem.as_span()};\r\n\r\n        int_wrapper::clear_counts();\r\n        try {\r\n            (void) ranges::uninitialized_default_construct(wrapped_input);\r\n            assert(false);\r\n        } catch (int i) {\r\n            assert(i == int_wrapper::magic_throwing_val);\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n        assert(int_wrapper::constructions == int_wrapper::magic_throwing_val);\r\n        assert(int_wrapper::destructions == int_wrapper::magic_throwing_val - 1);\r\n    }\r\n};\r\n\r\nusing test_range = test::range<test::fwd, int_wrapper, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare::yes, test::ProxyRef::no>;\r\n\r\nint main() {\r\n    // The algorithm is oblivious to non-required category, size, difference. It _is_ sensitive to proxyness in that it\r\n    // requires non-proxy references for the input range.\r\n\r\n    instantiator::call<test_range>();\r\n    throwing_test::call<test_range>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_default_construct_n/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_default_construct_n/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <memory>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct int_wrapper {\r\n    inline static int constructions = 0;\r\n    inline static int destructions  = 0;\r\n\r\n    static void clear_counts() {\r\n        constructions = 0;\r\n        destructions  = 0;\r\n    }\r\n\r\n    static constexpr int magic_throwing_val = 4;\r\n    int val;\r\n\r\n    int_wrapper() {\r\n        if (++constructions == magic_throwing_val) {\r\n            throw magic_throwing_val;\r\n        }\r\n    }\r\n\r\n    ~int_wrapper() {\r\n        ++destructions;\r\n    }\r\n\r\n    auto operator<=>(const int_wrapper&) const = default;\r\n};\r\nstatic_assert(default_initializable<int_wrapper>);\r\n\r\nstruct instantiator {\r\n    template <ranges::forward_range Write>\r\n    static void call() {\r\n        using ranges::uninitialized_default_construct_n, ranges::destroy, ranges::equal, ranges::equal_to,\r\n            ranges::iterator_t;\r\n\r\n        holder<int_wrapper, 3> mem;\r\n        Write wrapped_input{mem.as_span()};\r\n\r\n        int_wrapper::clear_counts();\r\n        const same_as<iterator_t<Write>> auto result = uninitialized_default_construct_n(wrapped_input.begin(), 3);\r\n        assert(int_wrapper::constructions == 3);\r\n        assert(int_wrapper::destructions == 0);\r\n        assert(result == wrapped_input.end());\r\n        destroy(wrapped_input);\r\n        assert(int_wrapper::constructions == 3);\r\n        assert(int_wrapper::destructions == 3);\r\n    }\r\n};\r\n\r\nstruct throwing_test {\r\n    template <ranges::forward_range Write>\r\n    static void call() {\r\n        holder<int_wrapper, int_wrapper::magic_throwing_val> mem;\r\n        Write wrapped_input{mem.as_span()};\r\n\r\n        int_wrapper::clear_counts();\r\n        try {\r\n            (void) ranges::uninitialized_default_construct_n(wrapped_input.begin(), int_wrapper::magic_throwing_val);\r\n            assert(false);\r\n        } catch (int i) {\r\n            assert(i == int_wrapper::magic_throwing_val);\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n        assert(int_wrapper::constructions == int_wrapper::magic_throwing_val);\r\n        assert(int_wrapper::destructions == int_wrapper::magic_throwing_val - 1);\r\n    }\r\n};\r\n\r\nusing test_range = test::range<test::fwd, int_wrapper, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare::yes, test::ProxyRef::no>;\r\n\r\nint main() {\r\n    // The algorithm is oblivious to non-required category, size, difference. It _is_ sensitive to proxyness in that it\r\n    // requires non-proxy references for the input range.\r\n\r\n    instantiator::call<test_range>();\r\n    throwing_test::call<test_range>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_fill/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_fill/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <memory>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::uninitialized_fill(borrowed<true>{}, 42)), int*>);\r\nstatic_assert(same_as<decltype(ranges::uninitialized_fill(borrowed<false>{}, 42)), ranges::dangling>);\r\n\r\nstruct int_wrapper {\r\n    inline static int constructions = 0;\r\n    inline static int destructions  = 0;\r\n\r\n    static void clear_counts() {\r\n        constructions = 0;\r\n        destructions  = 0;\r\n    }\r\n\r\n    static constexpr int magic_throwing_val = 4;\r\n    int val;\r\n\r\n    int_wrapper() = default;\r\n\r\n    int_wrapper(const int v) {\r\n        if (++constructions == magic_throwing_val) {\r\n            throw magic_throwing_val;\r\n        }\r\n        val = v;\r\n    }\r\n\r\n    ~int_wrapper() {\r\n        ++destructions;\r\n    }\r\n\r\n    auto operator<=>(const int_wrapper&) const = default;\r\n};\r\nstatic_assert(default_initializable<int_wrapper>);\r\n\r\n#ifdef _M_CEE // TRANSITION, VSO-1664341\r\nconstexpr auto get_int_wrapper_val = [](const int_wrapper& w) { return w.val; };\r\n#else // ^^^ workaround / no workaround vvv\r\nconstexpr auto get_int_wrapper_val = &int_wrapper::val;\r\n#endif // ^^^ no workaround ^^^\r\n\r\nstruct instantiator {\r\n    static constexpr int expected[3] = {42, 42, 42};\r\n\r\n    template <ranges::forward_range Write>\r\n    static void call() {\r\n        using ranges::uninitialized_fill, ranges::destroy, ranges::equal, ranges::equal_to, ranges::iterator_t;\r\n\r\n        { // Validate range overload\r\n            holder<int_wrapper, 3> mem;\r\n            Write wrapped_input{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            const same_as<iterator_t<Write>> auto result = uninitialized_fill(wrapped_input, 42);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result == wrapped_input.end());\r\n            assert(equal(wrapped_input, expected, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_input);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n\r\n        { // Validate iterator overload\r\n            holder<int_wrapper, 3> mem;\r\n            Write wrapped_input{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            const same_as<iterator_t<Write>> auto result =\r\n                uninitialized_fill(wrapped_input.begin(), wrapped_input.end(), 42);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result == wrapped_input.end());\r\n            assert(equal(wrapped_input, expected, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_input);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n\r\n        { // Validate int is properly converted to bool\r\n            bool output[] = {false, true, false};\r\n            uninitialized_fill(output, 5);\r\n            for (const bool& elem : output) {\r\n                assert(elem == true);\r\n            }\r\n        }\r\n\r\n        { // Validate zero-ing\r\n            int output[] = {13, 42, 1367};\r\n            auto result  = uninitialized_fill(output, 0);\r\n            for (const auto& elem : output) {\r\n                assert(elem == 0);\r\n            }\r\n            assert(result == ranges::end(output));\r\n        }\r\n    }\r\n};\r\n\r\nstruct throwing_test {\r\n    template <ranges::forward_range Write>\r\n    static void call() {\r\n        // Validate only range overload (one is plenty since they both use the same backend)\r\n        holder<int_wrapper, int_wrapper::magic_throwing_val> mem;\r\n        Write wrapped_input{mem.as_span()};\r\n\r\n        int_wrapper::clear_counts();\r\n        try {\r\n            (void) ranges::uninitialized_fill(wrapped_input, 42);\r\n            assert(false);\r\n        } catch (int i) {\r\n            assert(i == int_wrapper::magic_throwing_val);\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n        assert(int_wrapper::constructions == int_wrapper::magic_throwing_val);\r\n        assert(int_wrapper::destructions == int_wrapper::magic_throwing_val - 1);\r\n    }\r\n};\r\n\r\nstruct memset_test {\r\n    static constexpr unsigned char expected[] = {42, 42, 42};\r\n\r\n    static void call() {\r\n        { // Validate only range overload\r\n            unsigned char input[3];\r\n\r\n            const auto result = ranges::uninitialized_fill(input, static_cast<unsigned char>(42));\r\n            assert(result == end(input));\r\n            assert(ranges::equal(input, expected));\r\n        }\r\n    }\r\n};\r\n\r\nusing test_range = test::range<test::fwd, int_wrapper, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare::yes, test::ProxyRef::no>;\r\n\r\nint main() {\r\n    // The algorithm is oblivious to non-required category, size, difference. It _is_ sensitive to proxyness in that it\r\n    // requires non-proxy references for the input range.\r\n\r\n    instantiator::call<test_range>();\r\n    throwing_test::call<test_range>();\r\n    memset_test::call();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_fill_n/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_fill_n/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <memory>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct int_wrapper {\r\n    inline static int constructions = 0;\r\n    inline static int destructions  = 0;\r\n\r\n    static void clear_counts() {\r\n        constructions = 0;\r\n        destructions  = 0;\r\n    }\r\n\r\n    static constexpr int magic_throwing_val = 4;\r\n    int val;\r\n\r\n    int_wrapper() = default;\r\n\r\n    int_wrapper(const int v) {\r\n        if (++constructions == magic_throwing_val) {\r\n            throw magic_throwing_val;\r\n        }\r\n        val = v;\r\n    }\r\n\r\n    ~int_wrapper() {\r\n        ++destructions;\r\n    }\r\n\r\n    auto operator<=>(const int_wrapper&) const = default;\r\n};\r\nstatic_assert(default_initializable<int_wrapper>);\r\n\r\n#ifdef _M_CEE // TRANSITION, VSO-1664341\r\nconstexpr auto get_int_wrapper_val = [](const int_wrapper& w) { return w.val; };\r\n#else // ^^^ workaround / no workaround vvv\r\nconstexpr auto get_int_wrapper_val = &int_wrapper::val;\r\n#endif // ^^^ no workaround ^^^\r\n\r\nstruct instantiator {\r\n    static constexpr int expected[3] = {42, 42, 42};\r\n\r\n    template <ranges::forward_range Write>\r\n    static void call() {\r\n        using ranges::uninitialized_fill_n, ranges::destroy, ranges::equal, ranges::equal_to, ranges::iterator_t;\r\n\r\n        {\r\n            holder<int_wrapper, 3> mem;\r\n            Write wrapped_input{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            const same_as<iterator_t<Write>> auto result = uninitialized_fill_n(wrapped_input.begin(), 3, 42);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result == wrapped_input.end());\r\n            assert(equal(wrapped_input, expected, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_input);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n\r\n        { // Validate int is properly converted to bool\r\n            bool output[] = {false, true, false};\r\n            uninitialized_fill_n(ranges::begin(output), ranges::distance(output), 5);\r\n            for (const bool& elem : output) {\r\n                assert(elem == true);\r\n            }\r\n        }\r\n\r\n        { // Validate zero-ing\r\n            int output[] = {13, 42, 1367};\r\n            auto result  = uninitialized_fill_n(ranges::begin(output), ranges::distance(output), 0);\r\n            for (const auto& elem : output) {\r\n                assert(elem == 0);\r\n            }\r\n            assert(result == ranges::end(output));\r\n        }\r\n    }\r\n};\r\n\r\nstruct throwing_test {\r\n    template <ranges::forward_range Write>\r\n    static void call() {\r\n        holder<int_wrapper, int_wrapper::magic_throwing_val> mem;\r\n        Write wrapped_input{mem.as_span()};\r\n\r\n        int_wrapper::clear_counts();\r\n        try {\r\n            (void) ranges::uninitialized_fill_n(wrapped_input.begin(), int_wrapper::magic_throwing_val, 42);\r\n            assert(false);\r\n        } catch (int i) {\r\n            assert(i == int_wrapper::magic_throwing_val);\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n        assert(int_wrapper::constructions == int_wrapper::magic_throwing_val);\r\n        assert(int_wrapper::destructions == int_wrapper::magic_throwing_val - 1);\r\n    }\r\n};\r\n\r\nstruct memset_test {\r\n    static constexpr unsigned char expected[] = {42, 42, 42};\r\n\r\n    static void call() {\r\n        { // Validate only range overload\r\n            unsigned char input[3];\r\n\r\n            const auto result = ranges::uninitialized_fill_n(input, 3, static_cast<unsigned char>(42));\r\n            assert(result == end(input));\r\n            assert(ranges::equal(input, expected));\r\n        }\r\n    }\r\n};\r\n\r\nusing test_range = test::range<test::fwd, int_wrapper, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare::yes, test::ProxyRef::no>;\r\n\r\nint main() {\r\n    // The algorithm is oblivious to non-required category, size, difference. It _is_ sensitive to proxyness in that it\r\n    // requires non-proxy references for the input range.\r\n\r\n    instantiator::call<test_range>();\r\n    throwing_test::call<test_range>();\r\n    memset_test::call();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_move/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_move/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstdlib>\r\n#include <memory>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate that uninitialized_move_result aliases in_out_result\r\nstatic_assert(same_as<ranges::uninitialized_move_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::uninitialized_move(borrowed<false>{}, borrowed<false>{})),\r\n    ranges::uninitialized_move_result<ranges::dangling, ranges::dangling>>);\r\nstatic_assert(same_as<decltype(ranges::uninitialized_move(borrowed<false>{}, borrowed<true>{})),\r\n    ranges::uninitialized_move_result<ranges::dangling, int*>>);\r\nstatic_assert(same_as<decltype(ranges::uninitialized_move(borrowed<true>{}, borrowed<false>{})),\r\n    ranges::uninitialized_move_result<int*, ranges::dangling>>);\r\nstatic_assert(same_as<decltype(ranges::uninitialized_move(borrowed<true>{}, borrowed<true>{})),\r\n    ranges::uninitialized_move_result<int*, int*>>);\r\n\r\nstruct int_wrapper {\r\n    inline static int constructions = 0;\r\n    inline static int destructions  = 0;\r\n\r\n    static void clear_counts() {\r\n        constructions = 0;\r\n        destructions  = 0;\r\n    }\r\n\r\n    static constexpr int magic_throwing_val = 29;\r\n    int val                                 = 10;\r\n\r\n    int_wrapper() {\r\n        ++constructions;\r\n    }\r\n    int_wrapper(int x) : val{x} {\r\n        ++constructions;\r\n    }\r\n\r\n    int_wrapper(int_wrapper&& that) {\r\n        if (that.val == magic_throwing_val) {\r\n            throw magic_throwing_val;\r\n        }\r\n\r\n        val = exchange(that.val, -1);\r\n        ++constructions;\r\n    }\r\n\r\n    ~int_wrapper() {\r\n        ++destructions;\r\n    }\r\n\r\n    int_wrapper& operator=(int_wrapper&&) {\r\n        abort();\r\n    }\r\n\r\n    auto operator<=>(const int_wrapper&) const = default;\r\n};\r\nstatic_assert(movable<int_wrapper> && !copyable<int_wrapper>);\r\n\r\n#ifdef _M_CEE // TRANSITION, VSO-1664341\r\nconstexpr auto get_int_wrapper_val = [](const int_wrapper& w) { return w.val; };\r\n#else // ^^^ workaround / no workaround vvv\r\nconstexpr auto get_int_wrapper_val = &int_wrapper::val;\r\n#endif // ^^^ no workaround ^^^\r\n\r\nstruct instantiator {\r\n    static constexpr int expected_output[]      = {13, 55, 12345};\r\n    static constexpr int expected_output_long[] = {13, 55, 12345, -1};\r\n    static constexpr int expected_input[]       = {-1, -1, -1};\r\n    static constexpr int expected_input_long[]  = {-1, -1, -1, 42};\r\n\r\n    template <ranges::input_range R, ranges::forward_range W>\r\n    static void call() {\r\n        using ranges::uninitialized_move, ranges::uninitialized_move_result, ranges::destroy, ranges::equal,\r\n            ranges::equal_to, ranges::iterator_t;\r\n\r\n        { // Validate range overload\r\n            int_wrapper input[3] = {13, 55, 12345};\r\n            R wrapped_input{input};\r\n            holder<int_wrapper, 3> mem;\r\n            W wrapped_output{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            const same_as<uninitialized_move_result<iterator_t<R>, iterator_t<W>>> auto result =\r\n                uninitialized_move(wrapped_input, wrapped_output);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out == wrapped_output.end());\r\n            assert(equal(wrapped_output, expected_output, equal_to{}, get_int_wrapper_val));\r\n            assert(equal(input, expected_input, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_output);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n\r\n        { // Validate iterator overload\r\n            int_wrapper input[3] = {13, 55, 12345};\r\n            R wrapped_input{input};\r\n            holder<int_wrapper, 3> mem;\r\n            W wrapped_output{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            const same_as<uninitialized_move_result<iterator_t<R>, iterator_t<W>>> auto result = uninitialized_move(\r\n                wrapped_input.begin(), wrapped_input.end(), wrapped_output.begin(), wrapped_output.end());\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out == wrapped_output.end());\r\n            assert(equal(wrapped_output, expected_output, equal_to{}, get_int_wrapper_val));\r\n            assert(equal(input, expected_input, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_output);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n\r\n        { // Validate range overload shorter output\r\n            int_wrapper input[4] = {13, 55, 12345, 42};\r\n            R wrapped_input{input};\r\n            holder<int_wrapper, 3> mem;\r\n            W wrapped_output{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            same_as<uninitialized_move_result<iterator_t<R>, iterator_t<W>>> auto result =\r\n                uninitialized_move(wrapped_input, wrapped_output);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(++result.in == wrapped_input.end());\r\n            assert(result.out == wrapped_output.end());\r\n            assert(equal(wrapped_output, expected_output, equal_to{}, get_int_wrapper_val));\r\n            assert(equal(input, expected_input_long, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_output);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n\r\n        { // Validate range overload shorter input\r\n            int_wrapper input[3] = {13, 55, 12345};\r\n            R wrapped_input{input};\r\n            holder<int_wrapper, 4> mem;\r\n            W wrapped_output{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            same_as<uninitialized_move_result<iterator_t<R>, iterator_t<W>>> auto result =\r\n                uninitialized_move(wrapped_input, wrapped_output);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result.in == wrapped_input.end());\r\n            construct_at(addressof(*result.out), -1); // Need to construct non written element for comparison\r\n            assert(++result.out == wrapped_output.end());\r\n            assert(equal(wrapped_output, expected_output_long, equal_to{}, get_int_wrapper_val));\r\n            assert(equal(input, expected_input, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_output);\r\n            assert(int_wrapper::constructions == 4);\r\n            assert(int_wrapper::destructions == 4);\r\n        }\r\n    }\r\n};\r\n\r\nstruct throwing_test {\r\n    static constexpr int expected_input[] = {-1, -1, int_wrapper::magic_throwing_val, 12345};\r\n\r\n    template <ranges::input_range R, ranges::forward_range W>\r\n    static void call() {\r\n        // Validate only range overload (one is plenty since they both use the same backend)\r\n        int_wrapper input[] = {13, 55, int_wrapper::magic_throwing_val, 12345};\r\n        R wrapped_input{input};\r\n        holder<int_wrapper, 4> mem;\r\n        W wrapped_output{mem.as_span()};\r\n\r\n        int_wrapper::clear_counts();\r\n        try {\r\n            (void) ranges::uninitialized_move(wrapped_input, wrapped_output);\r\n            assert(false);\r\n        } catch (int i) {\r\n            assert(i == int_wrapper::magic_throwing_val);\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n        assert(int_wrapper::constructions == 2);\r\n        assert(int_wrapper::destructions == 2);\r\n        assert(ranges::equal(input, expected_input, ranges::equal_to{}, get_int_wrapper_val));\r\n    }\r\n};\r\n\r\nstruct memcpy_test {\r\n    static constexpr int expected_output[]      = {13, 55, 12345};\r\n    static constexpr int expected_output_long[] = {13, 55, 12345, -1};\r\n    static constexpr int expected_input[]       = {13, 55, 12345};\r\n    static constexpr int expected_input_long[]  = {13, 55, 12345, 42};\r\n\r\n    static void call() {\r\n        { // Validate matching ranges\r\n            int input[]  = {13, 55, 12345};\r\n            int output[] = {-1, -1, -1};\r\n\r\n            const auto result = ranges::uninitialized_move(input, output);\r\n            assert(result.in == end(input));\r\n            assert(result.out == end(output));\r\n            assert(ranges::equal(input, expected_input));\r\n            assert(ranges::equal(output, expected_output));\r\n        }\r\n\r\n        { // Validate input shorter\r\n            int input[]  = {13, 55, 12345};\r\n            int output[] = {-1, -1, -1, -1};\r\n\r\n            auto result = ranges::uninitialized_move(input, output);\r\n            assert(result.in == end(input));\r\n            assert(++result.out == end(output));\r\n            assert(ranges::equal(input, expected_input));\r\n            assert(ranges::equal(output, expected_output_long));\r\n        }\r\n\r\n        { // Validate output shorter\r\n            int input[]  = {13, 55, 12345, 42};\r\n            int output[] = {-1, -1, -1};\r\n\r\n            auto result = ranges::uninitialized_move(input, output);\r\n            assert(++result.in == end(input));\r\n            assert(result.out == end(output));\r\n            assert(ranges::equal(input, expected_input_long));\r\n            assert(ranges::equal(output, expected_output));\r\n        }\r\n\r\n        { // Validate non-common input range\r\n            int input[]  = {13, 55, 12345};\r\n            int output[] = {-1, -1, -1};\r\n\r\n            const auto result =\r\n                ranges::uninitialized_move(begin(input), unreachable_sentinel, begin(output), end(output));\r\n            assert(result.in == end(input));\r\n            assert(result.out == end(output));\r\n            assert(ranges::equal(input, expected_input));\r\n            assert(ranges::equal(output, expected_output));\r\n        }\r\n\r\n        { // Validate non-common output range\r\n            int input[]  = {13, 55, 12345};\r\n            int output[] = {-1, -1, -1};\r\n\r\n            const auto result =\r\n                ranges::uninitialized_move(begin(input), end(input), begin(output), unreachable_sentinel);\r\n            assert(result.in == end(input));\r\n            assert(result.out == end(output));\r\n            assert(ranges::equal(input, expected_input));\r\n            assert(ranges::equal(output, expected_output));\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <test::ProxyRef IsProxy>\r\nusing test_input  = test::range<test::input, int_wrapper, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n     test::CanCompare::no, IsProxy>;\r\nusing test_output = test::range<test::fwd, int_wrapper, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare::yes, test::ProxyRef::no>;\r\n\r\nint main() {\r\n    // The algorithm is oblivious to non-required category, size, difference, and \"proxyness\" of the input range. It\r\n    // _is_ sensitive to proxyness in that it requires non-proxy references for the output range.\r\n\r\n    instantiator::call<test_input<test::ProxyRef::no>, test_output>();\r\n    instantiator::call<test_input<test::ProxyRef::yes>, test_output>();\r\n    throwing_test::call<test_input<test::ProxyRef::no>, test_output>();\r\n    throwing_test::call<test_input<test::ProxyRef::yes>, test_output>();\r\n    memcpy_test::call();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_move_n/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_move_n/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstdlib>\r\n#include <memory>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate that uninitialized_move_n_result aliases in_out_result\r\nstatic_assert(same_as<ranges::uninitialized_move_n_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\nstruct int_wrapper {\r\n    inline static int constructions = 0;\r\n    inline static int destructions  = 0;\r\n\r\n    static void clear_counts() {\r\n        constructions = 0;\r\n        destructions  = 0;\r\n    }\r\n\r\n    static constexpr int magic_throwing_val = 29;\r\n    int val                                 = 10;\r\n\r\n    int_wrapper() {\r\n        ++constructions;\r\n    }\r\n    int_wrapper(int x) : val{x} {\r\n        ++constructions;\r\n    }\r\n\r\n    int_wrapper(int_wrapper&& that) {\r\n        if (that.val == magic_throwing_val) {\r\n            throw magic_throwing_val;\r\n        }\r\n\r\n        val = exchange(that.val, -1);\r\n        ++constructions;\r\n    }\r\n\r\n    ~int_wrapper() {\r\n        ++destructions;\r\n    }\r\n\r\n    int_wrapper& operator=(int_wrapper&&) {\r\n        abort();\r\n    }\r\n\r\n    auto operator<=>(const int_wrapper&) const = default;\r\n};\r\nstatic_assert(movable<int_wrapper> && !copyable<int_wrapper>);\r\n\r\n#ifdef _M_CEE // TRANSITION, VSO-1664341\r\nconstexpr auto get_int_wrapper_val = [](const int_wrapper& w) { return w.val; };\r\n#else // ^^^ workaround / no workaround vvv\r\nconstexpr auto get_int_wrapper_val = &int_wrapper::val;\r\n#endif // ^^^ no workaround ^^^\r\n\r\nstruct instantiator {\r\n    static constexpr int expected_output[]      = {13, 55, 12345};\r\n    static constexpr int expected_output_long[] = {13, 55, 12345, -1};\r\n    static constexpr int expected_input[]       = {-1, -1, -1};\r\n    static constexpr int expected_input_long[]  = {-1, -1, -1, 42};\r\n\r\n    template <ranges::input_range Read, ranges::forward_range Write>\r\n    static void call() {\r\n        using ranges::destroy, ranges::uninitialized_move_n, ranges::uninitialized_move_n_result, ranges::equal,\r\n            ranges::equal_to, ranges::iterator_t;\r\n        { // Validate matching ranges\r\n            int_wrapper input[3] = {13, 55, 12345};\r\n            Read wrapped_input{input};\r\n            holder<int_wrapper, 3> mem;\r\n            Write wrapped_output{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            const same_as<uninitialized_move_n_result<iterator_t<Read>, iterator_t<Write>>> auto result =\r\n                uninitialized_move_n(wrapped_input.begin(), 3, wrapped_output.begin(), wrapped_output.end());\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out == wrapped_output.end());\r\n            assert(equal(wrapped_output, expected_output, equal_to{}, get_int_wrapper_val));\r\n            assert(equal(input, expected_input, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_output);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n\r\n        { // Validate shorter output\r\n            int_wrapper input[4] = {13, 55, 12345, 42};\r\n            Read wrapped_input{input};\r\n            holder<int_wrapper, 3> mem;\r\n            Write wrapped_output{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            same_as<uninitialized_move_n_result<iterator_t<Read>, iterator_t<Write>>> auto result =\r\n                uninitialized_move_n(wrapped_input.begin(), 3, wrapped_output.begin(), wrapped_output.end());\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(++result.in == wrapped_input.end());\r\n            assert(result.out == wrapped_output.end());\r\n            assert(equal(wrapped_output, expected_output, equal_to{}, get_int_wrapper_val));\r\n            assert(equal(input, expected_input_long, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_output);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n\r\n        { // Validate shorter input\r\n            int_wrapper input[3] = {13, 55, 12345};\r\n            Read wrapped_input{input};\r\n            holder<int_wrapper, 4> mem;\r\n            Write wrapped_output{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            same_as<uninitialized_move_n_result<iterator_t<Read>, iterator_t<Write>>> auto result =\r\n                uninitialized_move_n(wrapped_input.begin(), 3, wrapped_output.begin(), wrapped_output.end());\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result.in == wrapped_input.end());\r\n            construct_at(addressof(*result.out), -1); // Need to construct non written element for comparison\r\n            assert(++result.out == wrapped_output.end());\r\n            assert(equal(wrapped_output, expected_output_long, equal_to{}, get_int_wrapper_val));\r\n            assert(equal(input, expected_input, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_output);\r\n            assert(int_wrapper::constructions == 4);\r\n            assert(int_wrapper::destructions == 4);\r\n        }\r\n    }\r\n};\r\n\r\nstruct throwing_test {\r\n    static constexpr int expected_input[] = {-1, -1, int_wrapper::magic_throwing_val, 12345};\r\n\r\n    template <ranges::input_range Read, ranges::forward_range Write>\r\n    static void call() {\r\n        int_wrapper input[] = {13, 55, int_wrapper::magic_throwing_val, 12345};\r\n        Read wrapped_input{input};\r\n        holder<int_wrapper, 4> mem;\r\n        Write wrapped_output{mem.as_span()};\r\n\r\n        int_wrapper::clear_counts();\r\n        try {\r\n            (void) ranges::uninitialized_move_n(wrapped_input.begin(), 4, wrapped_output.begin(), wrapped_output.end());\r\n            assert(false);\r\n        } catch (int i) {\r\n            assert(i == int_wrapper::magic_throwing_val);\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n        assert(int_wrapper::constructions == 2);\r\n        assert(int_wrapper::destructions == 2);\r\n        assert(ranges::equal(input, expected_input, ranges::equal_to{}, get_int_wrapper_val));\r\n    }\r\n};\r\n\r\nstruct memcpy_test {\r\n    static constexpr int expected_output[]      = {13, 55, 12345, -1};\r\n    static constexpr int expected_output_long[] = {13, 55, -1, -1};\r\n    static constexpr int expected_input[]       = {13, 55, 12345, 42};\r\n    static constexpr int expected_input_short[] = {13, 55};\r\n    static constexpr int expected_input_long[]  = {13, 55, 12345, 42};\r\n\r\n    static void call() {\r\n        using ranges::uninitialized_move_n, ranges::uninitialized_move_n_result, ranges::equal, ranges::iterator_t;\r\n        { // Validate range overload\r\n            vector<int> input  = {13, 55, 12345, 42};\r\n            vector<int> output = {-1, -1, -1, -1};\r\n\r\n            const same_as<uninitialized_move_n_result<iterator_t<vector<int>>, iterator_t<vector<int>>>> auto result =\r\n                uninitialized_move_n(input.begin(), 3, output.begin(), output.end());\r\n            assert(next(result.in) == input.end());\r\n            assert(next(result.out) == output.end());\r\n            assert(equal(input, expected_input));\r\n            assert(equal(output, expected_output));\r\n        }\r\n\r\n        { // Validate shorter input\r\n            vector<int> input  = {13, 55};\r\n            vector<int> output = {-1, -1, -1, -1};\r\n\r\n            const same_as<uninitialized_move_n_result<iterator_t<vector<int>>, iterator_t<vector<int>>>> auto result =\r\n                uninitialized_move_n(input.begin(), 2, output.begin(), output.end());\r\n            assert(result.in == input.end());\r\n            assert(next(result.out, 2) == output.end());\r\n            assert(equal(input, expected_input_short));\r\n            assert(equal(output, expected_output_long));\r\n        }\r\n\r\n        { // Validate shorter output\r\n            vector<int> input  = {13, 55, 12345, 42};\r\n            vector<int> output = {-1, -1};\r\n\r\n            const same_as<uninitialized_move_n_result<iterator_t<vector<int>>, iterator_t<vector<int>>>> auto result =\r\n                uninitialized_move_n(input.begin(), 2, output.begin(), output.end());\r\n            assert(next(result.in, 2) == input.end());\r\n            assert(result.out == output.end());\r\n            assert(equal(input, expected_input));\r\n            assert(equal(output, expected_input_short));\r\n        }\r\n\r\n        { // Validate unreachable_sentinel\r\n            vector<int> input  = {13, 55, 12345, 42};\r\n            vector<int> output = {-1, -1, -1, -1};\r\n\r\n            const same_as<uninitialized_move_n_result<iterator_t<vector<int>>, iterator_t<vector<int>>>> auto result =\r\n                uninitialized_move_n(input.begin(), 3, output.begin(), unreachable_sentinel);\r\n            assert(next(result.in) == input.end());\r\n            assert(next(result.out) == output.end());\r\n            assert(equal(input, expected_input));\r\n            assert(equal(output, expected_output));\r\n        }\r\n\r\n        { // Validate non-common range\r\n            vector<int> input  = {13, 55, 12345, 42};\r\n            vector<int> output = {-1, -1, -1, -1};\r\n\r\n            auto wrapped_output = output | views::take_while([](const auto&) { return true; });\r\n            const same_as<uninitialized_move_n_result<iterator_t<vector<int>>, iterator_t<vector<int>>>> auto result =\r\n                uninitialized_move_n(input.begin(), 3, wrapped_output.begin(), wrapped_output.end());\r\n            assert(next(result.in) == input.end());\r\n            assert(next(result.out) == output.end());\r\n            assert(equal(input, expected_input));\r\n            assert(equal(output, expected_output));\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <test::ProxyRef IsProxy>\r\nusing test_input  = test::range<test::input, int_wrapper, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n     test::CanCompare::no, IsProxy>;\r\nusing test_output = test::range<test::fwd, int_wrapper, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare::yes, test::ProxyRef::no>;\r\n\r\nint main() {\r\n    // The algorithm is oblivious to non-required category, size, difference, and \"proxyness\" of the input range. It\r\n    // _is_ sensitive to proxyness in that it requires non-proxy references for the output range.\r\n\r\n    instantiator::call<test_input<test::ProxyRef::no>, test_output>();\r\n    instantiator::call<test_input<test::ProxyRef::yes>, test_output>();\r\n    throwing_test::call<test_input<test::ProxyRef::no>, test_output>();\r\n    throwing_test::call<test_input<test::ProxyRef::yes>, test_output>();\r\n    memcpy_test::call();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_value_construct/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_value_construct/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <memory>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::uninitialized_value_construct(borrowed<true>{})), int*>);\r\nstatic_assert(same_as<decltype(ranges::uninitialized_value_construct(borrowed<false>{})), ranges::dangling>);\r\n\r\nstruct int_wrapper {\r\n    inline static int constructions = 0;\r\n    inline static int destructions  = 0;\r\n\r\n    static void clear_counts() {\r\n        constructions = 0;\r\n        destructions  = 0;\r\n    }\r\n\r\n    static constexpr int magic_throwing_val = 4;\r\n    int val                                 = 10;\r\n\r\n    int_wrapper() {\r\n        if (++constructions == magic_throwing_val) {\r\n            throw magic_throwing_val;\r\n        }\r\n    }\r\n\r\n    ~int_wrapper() {\r\n        ++destructions;\r\n    }\r\n\r\n    auto operator<=>(const int_wrapper&) const = default;\r\n};\r\nstatic_assert(default_initializable<int_wrapper>);\r\n\r\n#ifdef _M_CEE // TRANSITION, VSO-1664341\r\nconstexpr auto get_int_wrapper_val = [](const int_wrapper& w) { return w.val; };\r\n#else // ^^^ workaround / no workaround vvv\r\nconstexpr auto get_int_wrapper_val = &int_wrapper::val;\r\n#endif // ^^^ no workaround ^^^\r\n\r\nstruct instantiator {\r\n    static constexpr int expected[3] = {10, 10, 10};\r\n\r\n    template <ranges::forward_range Write>\r\n    static void call() {\r\n        using ranges::uninitialized_value_construct, ranges::destroy, ranges::equal, ranges::equal_to,\r\n            ranges::iterator_t;\r\n\r\n        { // Validate range overload\r\n            holder<int_wrapper, 3> mem;\r\n            Write wrapped_input{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            const same_as<iterator_t<Write>> auto result = uninitialized_value_construct(wrapped_input);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result == wrapped_input.end());\r\n            assert(equal(wrapped_input, expected, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_input);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n\r\n        { // Validate iterator overload\r\n            holder<int_wrapper, 3> mem;\r\n            Write wrapped_input{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            const same_as<iterator_t<Write>> auto result =\r\n                uninitialized_value_construct(wrapped_input.begin(), wrapped_input.end());\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result == wrapped_input.end());\r\n            assert(equal(wrapped_input, expected, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_input);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n    }\r\n};\r\n\r\nstruct throwing_test {\r\n    template <ranges::forward_range Write>\r\n    static void call() {\r\n        // Validate only range overload (one is plenty since they both use the same backend)\r\n        holder<int_wrapper, int_wrapper::magic_throwing_val> mem;\r\n        Write wrapped_input{mem.as_span()};\r\n\r\n        int_wrapper::clear_counts();\r\n        try {\r\n            (void) ranges::uninitialized_value_construct(wrapped_input);\r\n            assert(false);\r\n        } catch (int i) {\r\n            assert(i == int_wrapper::magic_throwing_val);\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n        assert(int_wrapper::constructions == int_wrapper::magic_throwing_val);\r\n        assert(int_wrapper::destructions == int_wrapper::magic_throwing_val - 1);\r\n    }\r\n};\r\n\r\nstruct memset_test {\r\n    static constexpr int expected[] = {0, 0, 0};\r\n\r\n    static void call() {\r\n        { // Validate only range overload\r\n            int input[3];\r\n\r\n            const auto result = ranges::uninitialized_value_construct(input);\r\n            assert(result == end(input));\r\n            assert(ranges::equal(input, expected));\r\n        }\r\n    }\r\n};\r\n\r\nusing test_range = test::range<test::fwd, int_wrapper, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare::yes, test::ProxyRef::no>;\r\n\r\nint main() {\r\n    // The algorithm is oblivious to non-required category, size, difference. It _is_ sensitive to proxyness in that it\r\n    // requires non-proxy references for the input range.\r\n\r\n    instantiator::call<test_range>();\r\n    throwing_test::call<test_range>();\r\n    memset_test::call();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_value_construct_n/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_uninitialized_value_construct_n/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <memory>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct int_wrapper {\r\n    inline static int constructions = 0;\r\n    inline static int destructions  = 0;\r\n\r\n    static void clear_counts() {\r\n        constructions = 0;\r\n        destructions  = 0;\r\n    }\r\n\r\n    static constexpr int magic_throwing_val = 4;\r\n    int val                                 = 10;\r\n\r\n    int_wrapper() {\r\n        if (++constructions == magic_throwing_val) {\r\n            throw magic_throwing_val;\r\n        }\r\n    }\r\n\r\n    ~int_wrapper() {\r\n        ++destructions;\r\n    }\r\n\r\n    auto operator<=>(const int_wrapper&) const = default;\r\n};\r\nstatic_assert(default_initializable<int_wrapper>);\r\n\r\n#ifdef _M_CEE // TRANSITION, VSO-1664341\r\nconstexpr auto get_int_wrapper_val = [](const int_wrapper& w) { return w.val; };\r\n#else // ^^^ workaround / no workaround vvv\r\nconstexpr auto get_int_wrapper_val = &int_wrapper::val;\r\n#endif // ^^^ no workaround ^^^\r\n\r\nstruct instantiator {\r\n    static constexpr int expected[3] = {10, 10, 10};\r\n\r\n    template <ranges::forward_range Write>\r\n    static void call() {\r\n        using ranges::uninitialized_value_construct_n, ranges::destroy, ranges::equal, ranges::equal_to,\r\n            ranges::iterator_t;\r\n\r\n        { // Validate iterator overload\r\n            holder<int_wrapper, 3> mem;\r\n            Write wrapped_input{mem.as_span()};\r\n\r\n            int_wrapper::clear_counts();\r\n            const same_as<iterator_t<Write>> auto result = uninitialized_value_construct_n(wrapped_input.begin(), 3);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 0);\r\n            assert(result == wrapped_input.end());\r\n            assert(equal(wrapped_input, expected, equal_to{}, get_int_wrapper_val));\r\n            destroy(wrapped_input);\r\n            assert(int_wrapper::constructions == 3);\r\n            assert(int_wrapper::destructions == 3);\r\n        }\r\n    }\r\n};\r\n\r\nstruct throwing_test {\r\n    template <ranges::forward_range Write>\r\n    static void call() {\r\n        holder<int_wrapper, int_wrapper::magic_throwing_val> mem;\r\n        Write wrapped_input{mem.as_span()};\r\n\r\n        int_wrapper::clear_counts();\r\n        try {\r\n            (void) ranges::uninitialized_value_construct_n(wrapped_input.begin(), int_wrapper::magic_throwing_val);\r\n            assert(false);\r\n        } catch (int i) {\r\n            assert(i == int_wrapper::magic_throwing_val);\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n        assert(int_wrapper::constructions == int_wrapper::magic_throwing_val);\r\n        assert(int_wrapper::destructions == int_wrapper::magic_throwing_val - 1);\r\n    }\r\n};\r\n\r\nstruct memset_test {\r\n    static constexpr int expected[] = {0, 0, 0};\r\n\r\n    static void call() {\r\n        { // Validate only range overload\r\n            int input[3];\r\n\r\n            const auto result = ranges::uninitialized_value_construct_n(begin(input), 3);\r\n            assert(result == end(input));\r\n            assert(ranges::equal(input, expected));\r\n        }\r\n    }\r\n};\r\n\r\nusing test_range = test::range<test::fwd, int_wrapper, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare::yes, test::ProxyRef::no>;\r\n\r\nint main() {\r\n    // The algorithm is oblivious to non-required category, size, difference. It _is_ sensitive to proxyness in that it\r\n    // requires non-proxy references for the input range.\r\n\r\n    instantiator::call<test_range>();\r\n    throwing_test::call<test_range>();\r\n    memset_test::call();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_unique/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_unique/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::unique(borrowed<false>{})), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::unique(borrowed<true>{})), ranges::subrange<int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr P expected[4] = {{0, 99}, {1, 47}, {3, 99}, {4, 47}};\r\n\r\n    static constexpr auto make_counter(size_t& counter) {\r\n        return [&counter](const int a, const int b) {\r\n            ++counter;\r\n            return a == b;\r\n        };\r\n    }\r\n\r\n    template <ranges::forward_range ReadWrite>\r\n    static constexpr void call() {\r\n        using ranges::unique, ranges::subrange, ranges::equal, ranges::size, ranges::iterator_t;\r\n\r\n        size_t comparisonCounter = 0;\r\n        const auto countedEq     = make_counter(comparisonCounter);\r\n\r\n        { // Validate iterator + sentinel overload\r\n            P input[6] = {{0, 99}, {1, 47}, {2, 47}, {3, 99}, {4, 47}, {5, 47}};\r\n            ReadWrite wrapped_input{input};\r\n\r\n            auto result = unique(wrapped_input.begin(), wrapped_input.end(), countedEq, get_second);\r\n            static_assert(same_as<decltype(result), subrange<iterator_t<ReadWrite>>>);\r\n            assert(result.begin() == next(wrapped_input.begin(), 4));\r\n            assert(result.end() == wrapped_input.end());\r\n            assert(equal(expected, span{input}.first<4>()));\r\n            assert(comparisonCounter == size(input) - 1);\r\n        }\r\n\r\n        { // Validate already unique range returns empty subrange\r\n            P input[4] = {{0, 99}, {1, 47}, {3, 99}, {4, 47}};\r\n            ReadWrite wrapped_input{input};\r\n\r\n            auto result = unique(wrapped_input.begin(), wrapped_input.end(), countedEq, get_second);\r\n            static_assert(same_as<decltype(result), subrange<iterator_t<ReadWrite>>>);\r\n            assert(result.empty());\r\n        }\r\n\r\n        comparisonCounter = 0;\r\n\r\n        { // Validate range overload\r\n            P input[6] = {{0, 99}, {1, 47}, {2, 47}, {3, 99}, {4, 47}, {5, 47}};\r\n            ReadWrite wrapped_input{input};\r\n\r\n            auto result = unique(wrapped_input, countedEq, get_second);\r\n            static_assert(same_as<decltype(result), subrange<iterator_t<ReadWrite>>>);\r\n            assert(result.begin() == next(wrapped_input.begin(), 4));\r\n            assert(result.end() == wrapped_input.end());\r\n            assert(equal(expected, span{input}.first<4>()));\r\n            assert(comparisonCounter == size(input) - 1);\r\n        }\r\n\r\n        { // Validate already unique range returns empty subrange\r\n            P input[4] = {{0, 99}, {1, 47}, {3, 99}, {4, 47}};\r\n            ReadWrite wrapped_input{input};\r\n\r\n            auto result = unique(wrapped_input, countedEq, get_second);\r\n            static_assert(same_as<decltype(result), subrange<iterator_t<ReadWrite>>>);\r\n            assert(result.empty());\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_fwd<instantiator, P>(), true));\r\n    test_fwd<instantiator, P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_unique_copy/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_alg_unique_copy/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <sstream>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate that unique_copy_result aliases in_out_result\r\nstatic_assert(same_as<ranges::unique_copy_result<int, double>, ranges::in_out_result<int, double>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::unique_copy(borrowed<false>{}, nullptr_to<int>)),\r\n    ranges::unique_copy_result<ranges::dangling, int*>>);\r\nstatic_assert(\r\n    same_as<decltype(ranges::unique_copy(borrowed<true>{}, nullptr_to<int>)), ranges::unique_copy_result<int*, int*>>);\r\n\r\nconstexpr P expectedInputRead[6]  = {{0, 99}, {1, 47}, {1, 47}, {1, 99}, {1, 47}, {1, 47}};\r\nconstexpr P expectedOutputRead[4] = {{1, 99}, {3, 47}, {2, 99}, {2, 47}};\r\nconstexpr P expectedInput[6]      = {{1, 99}, {3, 47}, {1, 47}, {2, 99}, {2, 47}, {1, 47}};\r\nconstexpr P expectedOutput[4]     = {{0, 99}, {1, 47}, {1, 99}, {1, 47}};\r\nconstexpr auto countedProjection  = [](P& value) {\r\n    ++value.first;\r\n    return value.second;\r\n};\r\n\r\nstruct test_iterator_overload {\r\n    template <ranges::input_range Read, weakly_incrementable Write>\r\n    static constexpr void call() {\r\n        using ranges::unique_copy, ranges::unique_copy_result, ranges::equal, ranges::equal_to, ranges::iterator_t,\r\n            ranges::size;\r\n        { // Validate iterator + sentinel overload\r\n            P input[6]  = {{0, 99}, {0, 47}, {0, 47}, {0, 99}, {0, 47}, {0, 47}};\r\n            P output[4] = {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}};\r\n            Read wrapped_input{input};\r\n\r\n            const same_as<unique_copy_result<iterator_t<Read>, Write>> auto result =\r\n                unique_copy(wrapped_input.begin(), wrapped_input.end(), Write{output}, equal_to{}, countedProjection);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == end(output));\r\n            if constexpr (input_iterator<Write> || !ranges::forward_range<Read>) {\r\n                assert(equal(output, expectedOutputRead));\r\n                assert(equal(input, expectedInputRead));\r\n            } else {\r\n                assert(equal(output, expectedOutput));\r\n                assert(equal(input, expectedInput));\r\n            }\r\n        }\r\n\r\n        { // Validate already unique range\r\n            P input[4]  = {{0, 99}, {0, 47}, {0, 99}, {0, 47}};\r\n            P output[4] = {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}};\r\n            Read wrapped_input{input};\r\n\r\n            const same_as<unique_copy_result<iterator_t<Read>, Write>> auto result =\r\n                unique_copy(wrapped_input.begin(), wrapped_input.end(), Write{output}, equal_to{});\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == end(output));\r\n            assert(equal(output, input));\r\n        }\r\n    }\r\n};\r\n\r\nstruct test_range_overload {\r\n    template <ranges::input_range Read, weakly_incrementable Write>\r\n    static constexpr void call() {\r\n        using ranges::unique_copy, ranges::unique_copy_result, ranges::equal, ranges::equal_to, ranges::iterator_t,\r\n            ranges::size;\r\n        { // Validate range overload\r\n            P input[6]  = {{0, 99}, {0, 47}, {0, 47}, {0, 99}, {0, 47}, {0, 47}};\r\n            P output[4] = {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}};\r\n            Read wrapped_input{input};\r\n\r\n            const same_as<unique_copy_result<iterator_t<Read>, Write>> auto result =\r\n                unique_copy(wrapped_input, Write{output}, equal_to{}, countedProjection);\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == end(output));\r\n            if constexpr (input_iterator<Write> || !ranges::forward_range<Read>) {\r\n                assert(equal(output, expectedOutputRead));\r\n                assert(equal(input, expectedInputRead));\r\n            } else {\r\n                assert(equal(output, expectedOutput));\r\n                assert(equal(input, expectedInput));\r\n            }\r\n        }\r\n\r\n        { // Validate already unique range\r\n            P input[4]  = {{0, 99}, {0, 47}, {0, 99}, {0, 47}};\r\n            P output[4] = {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}};\r\n            Read wrapped_input{input};\r\n\r\n            const same_as<unique_copy_result<iterator_t<Read>, Write>> auto result =\r\n                unique_copy(wrapped_input, Write{output}, equal_to{});\r\n            assert(result.in == wrapped_input.end());\r\n            assert(result.out.peek() == end(output));\r\n            assert(equal(output, input));\r\n        }\r\n    }\r\n};\r\n\r\n#ifdef TEST_EVERYTHING\r\nint main() {\r\n#ifndef _PREFAST_ // TRANSITION, GH-1030\r\n    static_assert((test_in_write<test_iterator_overload, P, P>(), true));\r\n    static_assert((test_in_write<test_range_overload, P, P>(), true));\r\n#endif // TRANSITION, GH-1030\r\n    test_in_write<test_iterator_overload, P, P>();\r\n    test_in_write<test_range_overload, P, P>();\r\n}\r\n#else // ^^^ test all range combinations / test only interesting range combos vvv\r\nconstexpr bool run_tests() {\r\n    // We need to test the three different implementations, so we need input_range/forward_range as input and\r\n    // output_iterator/input_iterator as output.\r\n    using namespace test;\r\n    using test::iterator, test::range;\r\n\r\n    using in_test_range =\r\n        range<input_iterator_tag, P, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>;\r\n    using fwd_test_range =\r\n        range<input_iterator_tag, P, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>;\r\n\r\n    using out_test_iterator = iterator<output_iterator_tag, P, CanDifference::no, CanCompare::no, ProxyRef::yes>;\r\n    using in_test_iterator  = iterator<input_iterator_tag, P, CanDifference::no, CanCompare::no, ProxyRef::yes>;\r\n\r\n    // Reread output implementation\r\n    test_iterator_overload::call<in_test_range, in_test_iterator>();\r\n    test_range_overload::call<in_test_range, in_test_iterator>();\r\n\r\n    // Reread input implementation\r\n    test_iterator_overload::call<fwd_test_range, out_test_iterator>();\r\n    test_range_overload::call<fwd_test_range, out_test_iterator>();\r\n\r\n    // Store implementation\r\n    test_iterator_overload::call<in_test_range, out_test_iterator>();\r\n    test_range_overload::call<in_test_range, out_test_iterator>();\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_gh_1932() {\r\n    // Defend against regression of GH-1932, in which ranges::unique_copy instantiated\r\n    // iter_value_t<I> for a non-input iterator I.\r\n\r\n    istringstream str(\"42 42 42\");\r\n    ostringstream result;\r\n    ranges::unique_copy(istream_iterator<int>{str}, istream_iterator<int>{}, ostream_iterator<int>{result, \" \"});\r\n    assert(result.str() == \"42 \");\r\n}\r\n\r\nint main() {\r\n    static_assert(run_tests());\r\n    run_tests();\r\n\r\n    test_gh_1932();\r\n}\r\n#endif // TEST_EVERYTHING\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_algorithm_machinery/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_algorithm_machinery/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <iterator>\r\n#include <memory>\r\n#include <ranges>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <is_permissive.hpp>\r\n\r\n#pragma warning(disable : 4793) // function compiled as native: non-clrcall vcall thunks must be compiled as native\r\n\r\nnamespace ranges = std::ranges;\r\n\r\ntemplate <bool>\r\nstruct borrowed { // borrowed<true> is a borrowed_range; borrowed<false> is not\r\n    int* begin() const;\r\n    int* end() const;\r\n};\r\n\r\ntemplate <>\r\ninline constexpr bool std::ranges::enable_borrowed_range<borrowed<true>> = true;\r\n\r\ntemplate <class T>\r\nstruct simple_reference {\r\n    operator T() const;\r\n};\r\n\r\ntemplate <class T>\r\nstruct simple_common_reference {\r\n    simple_common_reference(simple_reference<T>);\r\n    simple_common_reference(T const&);\r\n};\r\n\r\ntemplate <int I, class T = int>\r\nstruct simple_iter_archetype {\r\n    using value_type = T;\r\n\r\n    simple_reference<T> operator*() const\r\n        requires (I != 0); // 0: not indirectly_readable\r\n    friend void iter_swap(simple_iter_archetype const&, simple_iter_archetype const&) {}\r\n};\r\nstatic_assert(!std::indirectly_readable<simple_iter_archetype<0>>);\r\nstatic_assert(std::indirectly_readable<simple_iter_archetype<1>>);\r\n\r\ntemplate <class T, template <class> class TQuals, template <class> class UQuals>\r\nstruct std::basic_common_reference<T, ::simple_reference<T>, TQuals, UQuals> {\r\n    using type = ::simple_common_reference<T>;\r\n};\r\ntemplate <class T, template <class> class TQuals, template <class> class UQuals>\r\nstruct std::basic_common_reference<::simple_reference<T>, T, TQuals, UQuals> {\r\n    using type = ::simple_common_reference<T>;\r\n};\r\n\r\nnamespace indirectly_unary_invocable_test {\r\n    // Also validate indirect_result_t, and indirectly_regular_unary_invocable which is syntactically equivalent to\r\n    // indirectly_unary_invocable since regular_invocable and invocable are syntactically equivalent.\r\n\r\n    template <int I>\r\n    struct base {};\r\n    template <>\r\n    struct base<0> {\r\n        // 0: not copy_constructible\r\n        base()            = default;\r\n        base(base const&) = delete;\r\n    };\r\n\r\n    template <int I>\r\n    struct Fn : base<I> {\r\n        // 1: not invocable<Fn&, iter_value_t<simple_iter_archetype>&>\r\n        void operator()(int&) const\r\n            requires (I == 1)\r\n        = delete;\r\n        // 2: not invocable<Fn&, iter_reference_t<simple_iter_archetype>>\r\n        void operator()(simple_reference<int>) const\r\n            requires (I == 2)\r\n        = delete;\r\n        // 3: not invocable<Fn&, iter_common_reference_t<simple_iter_archetype>>\r\n        // This case is made valid by P2997R1\r\n        // \"Removing The Common Reference Requirement From The Indirectly Invocable Concepts\".\r\n        void operator()(simple_common_reference<int>) const\r\n            requires (I == 3)\r\n        = delete;\r\n\r\n        // 4 : not common_reference_with<invoke_result_t<Fn&, iter_value_t<simple_iter_archetype>&>,\r\n        //                               invoke_result_t<Fn&, iter_reference_t<simple_iter_archetype>>>;\r\n        void operator()(int&) const\r\n            requires (I == 4);\r\n        int operator()(simple_reference<int>) const\r\n            requires (I == 4);\r\n\r\n        int operator()(int&) const\r\n            requires (I != 1 && I != 4);\r\n        int operator()(simple_reference<int>) const\r\n            requires (I != 2 && I != 4);\r\n        int operator()(simple_common_reference<int>) const\r\n            requires (I != 3 && I != 4);\r\n    };\r\n\r\n    template <class F, class I>\r\n    constexpr bool test() {\r\n        constexpr bool result = std::indirectly_unary_invocable<F, I>;\r\n        static_assert(result == std::indirectly_regular_unary_invocable<F, I>);\r\n        return result;\r\n    }\r\n    static_assert(!test<Fn<0>, simple_iter_archetype<1>>());\r\n    static_assert(!test<Fn<1>, simple_iter_archetype<1>>());\r\n    static_assert(!test<Fn<2>, simple_iter_archetype<1>>());\r\n    static_assert(test<Fn<3>, simple_iter_archetype<1>>());\r\n    static_assert(!test<Fn<4>, simple_iter_archetype<1>>());\r\n    static_assert(!test<Fn<5>, simple_iter_archetype<0>>());\r\n    static_assert(test<Fn<5>, simple_iter_archetype<1>>());\r\n\r\n    static_assert(std::same_as<std::indirect_result_t<Fn<5>, simple_iter_archetype<1>>, int>);\r\n} // namespace indirectly_unary_invocable_test\r\n\r\nnamespace indirect_unary_predicate_test {\r\n    // Also validate indirect_result_t\r\n    using std::indirect_unary_predicate;\r\n\r\n    template <int I>\r\n    struct base {};\r\n    template <>\r\n    struct base<0> {\r\n        // 0: not copy_constructible\r\n        base()            = default;\r\n        base(base const&) = delete;\r\n    };\r\n\r\n    template <int I>\r\n    struct Fn : base<I> {\r\n        // 1: not predicate<Fn&, iter_value_t<simple_iter_archetype>&>\r\n        void operator()(int&) const\r\n            requires (I == 1);\r\n        // 2: not predicate<Fn&, iter_reference_t<simple_iter_archetype>>\r\n        void operator()(simple_reference<int>) const\r\n            requires (I == 2)\r\n        = delete;\r\n        // 3: not predicate<Fn&, iter_common_reference_t<simple_iter_archetype>>\r\n        // This case is made valid by P2997R1\r\n        // \"Removing The Common Reference Requirement From The Indirectly Invocable Concepts\".\r\n        void operator()(simple_common_reference<int>) const\r\n            requires (I == 3)\r\n        = delete;\r\n\r\n        // 4: all of the above\r\n        int operator()(int&) const\r\n            requires (I != 1 && I != 4);\r\n        int operator()(simple_reference<int>) const\r\n            requires (I != 2 && I != 4);\r\n        int operator()(simple_common_reference<int>) const\r\n            requires (I != 3 && I != 4);\r\n    };\r\n\r\n    static_assert(!indirect_unary_predicate<Fn<0>, simple_iter_archetype<1>>);\r\n    static_assert(!indirect_unary_predicate<Fn<1>, simple_iter_archetype<1>>);\r\n    static_assert(!indirect_unary_predicate<Fn<2>, simple_iter_archetype<1>>);\r\n    static_assert(indirect_unary_predicate<Fn<3>, simple_iter_archetype<1>>);\r\n    static_assert(!indirect_unary_predicate<Fn<4>, simple_iter_archetype<1>>);\r\n    static_assert(!indirect_unary_predicate<Fn<5>, simple_iter_archetype<0>>);\r\n    static_assert(indirect_unary_predicate<Fn<5>, simple_iter_archetype<1>>);\r\n\r\n    static_assert(std::same_as<std::indirect_result_t<Fn<5>, simple_iter_archetype<1>>, int>);\r\n} // namespace indirect_unary_predicate_test\r\n\r\nnamespace indirect_binary_predicate_test {\r\n    // Also validate indirect_equivalence_relation, indirect_strict_weak_order, and indirect_result_t\r\n\r\n    template <int>\r\n    struct base {};\r\n    template <>\r\n    struct base<0> {\r\n        // 0: not copy_constructible\r\n        base()            = default;\r\n        base(base const&) = delete;\r\n    };\r\n\r\n    template <int I>\r\n    struct Fn : base<I> {\r\n        // 1: not predicate<Fn&, iter_value_t<simple_iter_archetype>&, iter_value_t<simple_iter_archetype>&>\r\n        void operator()(int&, int&) const\r\n            requires (I == 1);\r\n        // 2: not predicate<Fn&, iter_value_t<simple_iter_archetype>&, iter_reference_t<simple_iter_archetype>>\r\n        void operator()(int&, simple_reference<int>) const\r\n            requires (I == 2);\r\n        // 3: not predicate<Fn&, iter_reference_t<simple_iter_archetype>, iter_value_t<simple_iter_archetype>&>\r\n        void operator()(simple_reference<int>, int&) const\r\n            requires (I == 3);\r\n        // 4: not predicate<Fn&, iter_reference_t<simple_iter_archetype>, iter_reference_t<simple_iter_archetype>>\r\n        void operator()(simple_reference<int>, simple_reference<int>) const\r\n            requires (I == 4);\r\n        // 5: not predicate<Fn&, iter_common_reference_t</**/>, iter_common_reference_t</**/>>\r\n        // This case is made valid by P2997R1\r\n        // \"Removing The Common Reference Requirement From The Indirectly Invocable Concepts\".\r\n        void operator()(simple_common_reference<int>, simple_common_reference<int>) const\r\n            requires (I == 5);\r\n\r\n        bool operator()(int&, int&) const\r\n            requires (I != 1);\r\n        int operator()(int&, simple_reference<int>) const\r\n            requires (I != 2);\r\n        int* operator()(simple_reference<int>, int&) const\r\n            requires (I != 3);\r\n        std::true_type operator()(simple_reference<int>, simple_reference<int>) const\r\n            requires (I != 4);\r\n        std::false_type operator()(simple_common_reference<int>, simple_common_reference<int>) const\r\n            requires (I != 5);\r\n    };\r\n\r\n    template <int FuncSelector, int IterSelector1, int IterSelector2>\r\n    constexpr bool test() {\r\n        using std::indirect_binary_predicate, std::indirect_equivalence_relation, std::indirect_strict_weak_order;\r\n        using F  = Fn<FuncSelector>;\r\n        using I1 = simple_iter_archetype<IterSelector1>;\r\n        using I2 = simple_iter_archetype<IterSelector2>;\r\n\r\n        constexpr bool result = indirect_binary_predicate<F, I1, I2>;\r\n        static_assert(indirect_equivalence_relation<F, I1, I2> == result);\r\n        static_assert(indirect_strict_weak_order<F, I1, I2> == result);\r\n        return result;\r\n    }\r\n\r\n    static_assert(!test<0, 1, 1>());\r\n    static_assert(!test<1, 1, 1>());\r\n    static_assert(!test<2, 1, 1>());\r\n    static_assert(!test<3, 1, 1>());\r\n    static_assert(!test<4, 1, 1>());\r\n    static_assert(test<5, 1, 1>());\r\n\r\n    static_assert(!test<6, 0, 1>());\r\n    static_assert(!test<6, 1, 0>());\r\n    static_assert(test<6, 1, 1>());\r\n\r\n    static_assert(std::same_as<std::indirect_result_t<Fn<6>, simple_iter_archetype<1>, simple_iter_archetype<1>>,\r\n        std::true_type>);\r\n} // namespace indirect_binary_predicate_test\r\n\r\nnamespace projected_test {\r\n    template <class Iter, class Proj, class Value, class Reference>\r\n    constexpr bool test() {\r\n        static_assert(std::indirectly_readable<Iter>);\r\n\r\n        using P = std::projected<Iter, Proj>;\r\n        static_assert(std::indirectly_readable<P>);\r\n        static_assert(std::same_as<std::iter_value_t<P>, Value>);\r\n        static_assert(std::same_as<std::iter_reference_t<P>, Reference>);\r\n        return true;\r\n    }\r\n    static_assert(test<int*, std::identity, int, int&>());\r\n    static_assert(test<int const*, std::identity, int, int const&>());\r\n\r\n    struct S {};\r\n    static_assert(test<S*, int(S::*), int, int&>());\r\n    static_assert(test<S const*, int(S::*), int, int const&>());\r\n\r\n    struct iter {\r\n        using value_type = int;\r\n        struct reference {\r\n            operator value_type() const;\r\n        };\r\n        reference operator*() const;\r\n    };\r\n    static_assert(test<iter, std::identity, iter::reference, iter::reference&&>());\r\n    static_assert(test<iter, double (*)(int), double, double>());\r\n} // namespace projected_test\r\n\r\nnamespace indirectly_movable_test { // also covers indirectly_movable_storable\r\n    using std::assignable_from, std::constructible_from, std::indirectly_writable, std::movable;\r\n    using std::indirectly_movable, std::indirectly_movable_storable;\r\n\r\n    template <int I>\r\n    struct value_type {\r\n        value_type()             = default;\r\n        value_type(value_type&&) = default;\r\n        value_type& operator=(value_type&&)\r\n            requires (I != 0)\r\n        = default; // 0: not movable\r\n        // 1: not constructible_from<iter_rvalue_reference_t<In>>:\r\n        template <class T>\r\n        value_type(simple_reference<T>)\r\n            requires (I == 1)\r\n        = delete;\r\n        // 2: not assignable_from<iter_rvalue_reference_t<In>>:\r\n        template <class T>\r\n        value_type& operator=(simple_reference<T>)\r\n            requires (I != 2);\r\n        template <class T>\r\n        void operator=(simple_reference<T>)\r\n            requires (I == 2)\r\n        = delete;\r\n    };\r\n    // Ensure specializations of value_type have the intended properties\r\n    static_assert(!movable<value_type<0>>);\r\n    static_assert(constructible_from<value_type<0>, simple_reference<value_type<0>>>);\r\n    static_assert(assignable_from<value_type<0>&, simple_reference<value_type<0>>>);\r\n    static_assert(movable<value_type<1>>);\r\n    static_assert(!constructible_from<value_type<1>, simple_reference<value_type<1>>>);\r\n    static_assert(assignable_from<value_type<1>&, simple_reference<value_type<1>>>);\r\n    static_assert(movable<value_type<2>>);\r\n    static_assert(constructible_from<value_type<2>, simple_reference<value_type<2>>>);\r\n    static_assert(!assignable_from<value_type<2>&, simple_reference<value_type<2>>>);\r\n    static_assert(movable<value_type<3>>);\r\n    static_assert(constructible_from<value_type<3>, simple_reference<value_type<3>>>);\r\n    static_assert(assignable_from<value_type<3>&, simple_reference<value_type<3>>>);\r\n\r\n    template <int I, int J>\r\n    struct out_archetype {\r\n        out_archetype& operator*() const;\r\n        // 0: not indirectly_writable<simple_reference>\r\n        void operator=(simple_reference<value_type<J>>&&) const\r\n            requires (I == 0)\r\n        = delete;\r\n        void operator=(simple_reference<value_type<J>>&&) const\r\n            requires (I != 0);\r\n        // 1: not indirectly_writable<value_type>\r\n        void operator=(value_type<J>&&) const\r\n            requires (I == 1)\r\n        = delete;\r\n        void operator=(value_type<J>&&) const\r\n            requires (I != 1);\r\n    };\r\n    // Ensure specializations of out_archetype have the intended properties\r\n    static_assert(!indirectly_writable<out_archetype<0, 3>, simple_reference<value_type<3>>>);\r\n    static_assert(indirectly_writable<out_archetype<0, 3>, value_type<3>>);\r\n    static_assert(indirectly_writable<out_archetype<1, 3>, simple_reference<value_type<3>>>);\r\n    static_assert(!indirectly_writable<out_archetype<1, 3>, value_type<3>>);\r\n    static_assert(indirectly_writable<out_archetype<2, 3>, simple_reference<value_type<3>>>);\r\n    static_assert(indirectly_writable<out_archetype<2, 3>, value_type<3>>);\r\n\r\n    // Validate indirectly_movable\r\n    static_assert(!indirectly_movable<simple_iter_archetype<0, value_type<3>>, out_archetype<1, 3>>);\r\n    static_assert(!indirectly_movable<simple_iter_archetype<1, value_type<3>>, out_archetype<0, 3>>);\r\n    static_assert(indirectly_movable<simple_iter_archetype<1, value_type<3>>, out_archetype<1, 3>>);\r\n\r\n    // Validate indirectly_movable_storable\r\n    static_assert(!indirectly_movable_storable<simple_iter_archetype<0, value_type<3>>, out_archetype<2, 3>>);\r\n    static_assert(!indirectly_movable_storable<simple_iter_archetype<1, value_type<3>>, out_archetype<0, 3>>);\r\n    static_assert(!indirectly_movable_storable<simple_iter_archetype<1, value_type<0>>, out_archetype<2, 0>>);\r\n    static_assert(!indirectly_movable_storable<simple_iter_archetype<1, value_type<1>>, out_archetype<2, 1>>);\r\n    static_assert(!indirectly_movable_storable<simple_iter_archetype<1, value_type<2>>, out_archetype<2, 2>>);\r\n    static_assert(indirectly_movable_storable<simple_iter_archetype<1, value_type<3>>, out_archetype<2, 3>>);\r\n} // namespace indirectly_movable_test\r\n\r\nnamespace indirectly_copyable_test { // also covers indirectly_copyable_storable\r\n    using std::assignable_from, std::constructible_from, std::copyable, std::indirectly_writable;\r\n    using std::indirectly_copyable, std::indirectly_copyable_storable;\r\n\r\n    template <int I>\r\n    struct value_type {\r\n        value_type()                  = default;\r\n        value_type(value_type const&) = default;\r\n        value_type& operator=(value_type const&)\r\n            requires (I != 0)\r\n        = default; // 0: not copyable\r\n        // 1: not constructible_from<iter_reference_t<In>>:\r\n        template <class T>\r\n        value_type(simple_reference<T>)\r\n            requires (I == 1)\r\n        = delete;\r\n        // 2: not assignable_from<iter_reference_t<In>>:\r\n        template <class T>\r\n        value_type& operator=(simple_reference<T>)\r\n            requires (I != 2);\r\n        template <class T>\r\n        void operator=(simple_reference<T>)\r\n            requires (I == 2)\r\n        = delete;\r\n    };\r\n    // Ensure specializations of value_type have the intended properties\r\n    static_assert(!copyable<value_type<0>>);\r\n    static_assert(constructible_from<value_type<0>, simple_reference<value_type<0>>>);\r\n    static_assert(assignable_from<value_type<0>&, simple_reference<value_type<0>>>);\r\n    static_assert(copyable<value_type<1>>);\r\n    static_assert(!constructible_from<value_type<1>, simple_reference<value_type<1>>>);\r\n    static_assert(assignable_from<value_type<1>&, simple_reference<value_type<1>>>);\r\n    static_assert(copyable<value_type<2>>);\r\n    static_assert(constructible_from<value_type<2>, simple_reference<value_type<2>>>);\r\n    static_assert(!assignable_from<value_type<2>&, simple_reference<value_type<2>>>);\r\n    static_assert(copyable<value_type<3>>);\r\n    static_assert(constructible_from<value_type<3>, simple_reference<value_type<3>>>);\r\n    static_assert(assignable_from<value_type<3>&, simple_reference<value_type<3>>>);\r\n\r\n    template <int I, int J>\r\n    struct out_archetype {\r\n        out_archetype& operator*() const;\r\n        // 0: not indirectly_writable<simple_reference>\r\n        void operator=(simple_reference<value_type<J>>&&) const\r\n            requires (I == 0)\r\n        = delete;\r\n        void operator=(simple_reference<value_type<J>>&&) const\r\n            requires (I != 0);\r\n        // 1: not indirectly_writable<value_type&>\r\n        void operator=(value_type<J>&) const\r\n            requires (I == 1)\r\n        = delete;\r\n        void operator=(value_type<J>&) const\r\n            requires (I != 1);\r\n        // 2: not indirectly_writable<value_type&&>\r\n        void operator=(value_type<J>&&) const\r\n            requires (I == 2)\r\n        = delete;\r\n        void operator=(value_type<J>&&) const\r\n            requires (I != 2);\r\n        // 3: not indirectly_writable<const value_type&&>\r\n        void operator=(value_type<J> const&&) const\r\n            requires (I == 3)\r\n        = delete;\r\n        void operator=(value_type<J> const&&) const\r\n            requires (I != 3);\r\n        // 4: not indirectly_writable<const value_type&>\r\n        void operator=(value_type<J> const&) const\r\n            requires (I == 4)\r\n        = delete;\r\n        void operator=(value_type<J> const&) const\r\n            requires (I != 4);\r\n    };\r\n    // Ensure specializations of out_archetype have the intended properties\r\n    static_assert(!indirectly_writable<out_archetype<0, 3>, simple_reference<value_type<3>>>);\r\n    static_assert(indirectly_writable<out_archetype<0, 3>, value_type<3>&>);\r\n    static_assert(indirectly_writable<out_archetype<0, 3>, value_type<3>&&>);\r\n    static_assert(indirectly_writable<out_archetype<0, 3>, const value_type<3>&&>);\r\n    static_assert(indirectly_writable<out_archetype<0, 3>, const value_type<3>&>);\r\n\r\n    static_assert(indirectly_writable<out_archetype<1, 3>, simple_reference<value_type<3>>>);\r\n    static_assert(!indirectly_writable<out_archetype<1, 3>, value_type<3>&>);\r\n    static_assert(indirectly_writable<out_archetype<1, 3>, value_type<3>&&>);\r\n    static_assert(indirectly_writable<out_archetype<1, 3>, const value_type<3>&&>);\r\n    static_assert(indirectly_writable<out_archetype<1, 3>, const value_type<3>&>);\r\n\r\n    static_assert(indirectly_writable<out_archetype<2, 3>, simple_reference<value_type<3>>>);\r\n    static_assert(indirectly_writable<out_archetype<2, 3>, value_type<3>&>);\r\n    static_assert(!indirectly_writable<out_archetype<2, 3>, value_type<3>&&>);\r\n    static_assert(indirectly_writable<out_archetype<2, 3>, const value_type<3>&&>);\r\n    static_assert(indirectly_writable<out_archetype<2, 3>, const value_type<3>&>);\r\n\r\n    static_assert(indirectly_writable<out_archetype<3, 3>, simple_reference<value_type<3>>>);\r\n    static_assert(indirectly_writable<out_archetype<3, 3>, value_type<3>&>);\r\n    static_assert(indirectly_writable<out_archetype<3, 3>, value_type<3>&&>);\r\n    static_assert(!indirectly_writable<out_archetype<3, 3>, const value_type<3>&&>);\r\n    static_assert(indirectly_writable<out_archetype<3, 3>, const value_type<3>&>);\r\n\r\n    static_assert(indirectly_writable<out_archetype<4, 3>, simple_reference<value_type<3>>>);\r\n    static_assert(indirectly_writable<out_archetype<4, 3>, value_type<3>&>);\r\n    static_assert(indirectly_writable<out_archetype<4, 3>, value_type<3>&&>);\r\n    static_assert(indirectly_writable<out_archetype<4, 3>, const value_type<3>&&>);\r\n    static_assert(!indirectly_writable<out_archetype<4, 3>, const value_type<3>&>);\r\n\r\n    static_assert(indirectly_writable<out_archetype<5, 3>, simple_reference<value_type<3>>>);\r\n    static_assert(indirectly_writable<out_archetype<5, 3>, value_type<3>&>);\r\n    static_assert(indirectly_writable<out_archetype<5, 3>, value_type<3>&&>);\r\n    static_assert(indirectly_writable<out_archetype<5, 3>, const value_type<3>&&>);\r\n    static_assert(indirectly_writable<out_archetype<5, 3>, const value_type<3>&>);\r\n\r\n    // Validate indirectly_copyable\r\n    static_assert(!indirectly_copyable<simple_iter_archetype<0, value_type<3>>, out_archetype<1, 3>>);\r\n    static_assert(!indirectly_copyable<simple_iter_archetype<1, value_type<3>>, out_archetype<0, 3>>);\r\n    static_assert(indirectly_copyable<simple_iter_archetype<1, value_type<3>>, out_archetype<1, 3>>);\r\n\r\n    // Validate indirectly_copyable_storable\r\n    static_assert(!indirectly_copyable_storable<simple_iter_archetype<0, value_type<3>>, out_archetype<5, 3>>);\r\n    static_assert(!indirectly_copyable_storable<simple_iter_archetype<1, value_type<3>>, out_archetype<0, 3>>);\r\n    static_assert(!indirectly_copyable_storable<simple_iter_archetype<1, value_type<3>>, out_archetype<1, 3>>);\r\n    static_assert(!indirectly_copyable_storable<simple_iter_archetype<1, value_type<3>>, out_archetype<2, 3>>);\r\n    static_assert(!indirectly_copyable_storable<simple_iter_archetype<1, value_type<3>>, out_archetype<3, 3>>);\r\n    static_assert(!indirectly_copyable_storable<simple_iter_archetype<1, value_type<3>>, out_archetype<4, 3>>);\r\n    static_assert(!indirectly_copyable_storable<simple_iter_archetype<1, value_type<0>>, out_archetype<5, 0>>);\r\n    static_assert(!indirectly_copyable_storable<simple_iter_archetype<1, value_type<1>>, out_archetype<5, 1>>);\r\n    static_assert(!indirectly_copyable_storable<simple_iter_archetype<1, value_type<2>>, out_archetype<5, 2>>);\r\n    static_assert(indirectly_copyable_storable<simple_iter_archetype<1, value_type<3>>, out_archetype<5, 3>>);\r\n} // namespace indirectly_copyable_test\r\n\r\nnamespace indirectly_swappable_test {\r\n    using std::indirectly_readable, std::indirectly_swappable;\r\n\r\n    template <int I>\r\n    struct archetype {\r\n        using value_type = int;\r\n\r\n        struct reference {\r\n            operator int() const;\r\n        };\r\n\r\n        reference operator*() const noexcept\r\n            requires (I != 0);\r\n\r\n        friend constexpr void iter_swap(archetype const&, archetype const&)\r\n            requires (I != 1)\r\n        {}\r\n\r\n        template <int J>\r\n            requires (I != J && I != 2 && J != 2)\r\n        friend constexpr void iter_swap(archetype const&, archetype<J> const&) {}\r\n    };\r\n\r\n    // We have to be careful to avoid checking some !indirectly_swappable cases that fail when the Evil Extension is\r\n    // active (i.e., in permissive mode).\r\n    template <bool IsPermissive>\r\n    constexpr bool compile_only() {\r\n        static_assert(!indirectly_readable<archetype<0>>); // <0> is not indirectly_readable\r\n        static_assert(indirectly_readable<archetype<1>>); // <1+> is indirectly_readable\r\n        static_assert(indirectly_readable<archetype<2>>);\r\n        static_assert(indirectly_readable<archetype<3>>);\r\n        static_assert(indirectly_readable<archetype<4>>);\r\n\r\n        static_assert(!indirectly_swappable<archetype<0>, archetype<0>>); // <0> is (still) not indirectly_readable\r\n        if constexpr (!IsPermissive) {\r\n            static_assert(!indirectly_swappable<archetype<1>, archetype<1>>); // <1> is not self-indirectly_swappable\r\n        }\r\n        static_assert(indirectly_swappable<archetype<2>, archetype<2>>); // <2+> is self-indirectly_swappable\r\n        static_assert(indirectly_swappable<archetype<3>, archetype<3>>);\r\n        static_assert(indirectly_swappable<archetype<4>, archetype<4>>);\r\n\r\n        static_assert(!indirectly_swappable<archetype<0>, archetype<4>>); // <0> is not indirectly_readable\r\n        static_assert(!indirectly_swappable<archetype<4>, archetype<0>>); // <0> is not indirectly_readable\r\n        if constexpr (!IsPermissive) {\r\n            static_assert(!indirectly_swappable<archetype<1>, archetype<4>>); // <1> is not self-indirectly_swappable\r\n            static_assert(!indirectly_swappable<archetype<4>, archetype<1>>); // <1> is not self-indirectly_swappable\r\n        }\r\n        static_assert(!indirectly_swappable<archetype<2>, archetype<4>>); // <2> & <4> aren't cross-indirectly_swappable\r\n        static_assert(!indirectly_swappable<archetype<4>, archetype<2>>); // <2> & <4> aren't cross-indirectly_swappable\r\n\r\n        static_assert(indirectly_swappable<archetype<3>, archetype<4>>);\r\n        static_assert(indirectly_swappable<archetype<4>, archetype<3>>);\r\n\r\n        return true;\r\n    }\r\n    static_assert(compile_only<is_permissive>());\r\n} // namespace indirectly_swappable_test\r\n\r\nnamespace indirectly_comparable_test {\r\n    // Also validate indirect_result_t\r\n    using std::indirectly_comparable;\r\n\r\n    using Proj    = int (&)(simple_common_reference<int>);\r\n    using BadProj = char const* (&) (simple_common_reference<int>);\r\n\r\n    template <int>\r\n    struct base {};\r\n    template <>\r\n    struct base<0> {\r\n        // 0: not copy_constructible\r\n        base()            = default;\r\n        base(base const&) = delete;\r\n    };\r\n\r\n    template <int I>\r\n    struct Fn : base<I> {\r\n        // 1: not predicate\r\n        void operator()(int, int) const\r\n            requires (I == 1);\r\n        void* operator()(int, int) const\r\n            requires (I != 1);\r\n    };\r\n\r\n    static_assert(!indirectly_comparable<simple_iter_archetype<1>, simple_iter_archetype<1>, Fn<0>, Proj, Proj>);\r\n    static_assert(!indirectly_comparable<simple_iter_archetype<1>, simple_iter_archetype<1>, Fn<1>, Proj, Proj>);\r\n    static_assert(!indirectly_comparable<simple_iter_archetype<0>, simple_iter_archetype<1>, Fn<2>, Proj, Proj>);\r\n    static_assert(!indirectly_comparable<simple_iter_archetype<1>, simple_iter_archetype<0>, Fn<2>, Proj, Proj>);\r\n    static_assert(!indirectly_comparable<simple_iter_archetype<1>, simple_iter_archetype<1>, Fn<2>, BadProj, Proj>);\r\n    static_assert(!indirectly_comparable<simple_iter_archetype<1>, simple_iter_archetype<1>, Fn<2>, Proj, BadProj>);\r\n    static_assert(indirectly_comparable<simple_iter_archetype<1>, simple_iter_archetype<1>, Fn<2>, Proj, Proj>);\r\n\r\n    using Projected = std::projected<simple_iter_archetype<1>, Proj>;\r\n    static_assert(std::same_as<std::indirect_result_t<Fn<2>, Projected, Projected>, void*>);\r\n} // namespace indirectly_comparable_test\r\n\r\nnamespace dangling_test {\r\n    // Also test borrowed_iterator_t and borrowed_subrange_t\r\n    using ranges::dangling, ranges::borrowed_iterator_t, ranges::borrowed_subrange_t;\r\n    using std::is_nothrow_constructible_v, std::same_as;\r\n\r\n    static_assert(std::is_class_v<dangling>);\r\n    static_assert(std::semiregular<dangling>);\r\n    static_assert(std::is_trivially_default_constructible_v<dangling>);\r\n\r\n    // dangling is constructible from any sequence of arguments without throwing\r\n    static_assert(is_nothrow_constructible_v<dangling>);\r\n    static_assert(is_nothrow_constructible_v<dangling, int>);\r\n    static_assert(is_nothrow_constructible_v<dangling, int*>);\r\n    static_assert(is_nothrow_constructible_v<dangling, int[42]>);\r\n    static_assert(is_nothrow_constructible_v<dangling, int (*)()>);\r\n    static_assert(is_nothrow_constructible_v<dangling, const int (*)[42]>);\r\n    static_assert(is_nothrow_constructible_v<dangling, int, int*, int[42], int (*)(), const int (*)[42]>);\r\n\r\n    static_assert(same_as<borrowed_iterator_t<borrowed<false>>, dangling>);\r\n    static_assert(same_as<borrowed_iterator_t<borrowed<true>>, int*>);\r\n\r\n    static_assert(same_as<borrowed_subrange_t<borrowed<false>>, dangling>);\r\n    static_assert(same_as<borrowed_subrange_t<borrowed<true>>, ranges::subrange<int*>>);\r\n} // namespace dangling_test\r\n\r\nnamespace result_test {\r\n    using ranges::in_found_result, ranges::in_fun_result, ranges::in_in_result, ranges::in_out_result,\r\n        ranges::in_in_out_result, ranges::in_out_out_result, ranges::min_max_result;\r\n    using std::is_aggregate_v, std::is_convertible_v, std::is_trivially_copyable_v,\r\n        std::is_trivially_default_constructible_v;\r\n\r\n    // Validate the result types are:\r\n    // * aggregates\r\n    static_assert(is_aggregate_v<in_found_result<int>>);\r\n    static_assert(is_aggregate_v<in_fun_result<int, int>>);\r\n    static_assert(is_aggregate_v<in_in_result<int, int>>);\r\n    static_assert(is_aggregate_v<in_out_result<int, int>>);\r\n    static_assert(is_aggregate_v<in_in_out_result<int, int, int>>);\r\n    static_assert(is_aggregate_v<in_out_out_result<int, int, int>>);\r\n    static_assert(is_aggregate_v<min_max_result<int>>);\r\n\r\n    // * trivially copyable when parameter types are trivially copyable\r\n    static_assert(is_trivially_copyable_v<in_found_result<int>>);\r\n    static_assert(is_trivially_copyable_v<in_fun_result<int, int>>);\r\n    static_assert(is_trivially_copyable_v<in_in_result<int, int>>);\r\n    static_assert(is_trivially_copyable_v<in_out_result<int, int>>);\r\n    static_assert(is_trivially_copyable_v<in_in_out_result<int, int, int>>);\r\n    static_assert(is_trivially_copyable_v<in_out_out_result<int, int, int>>);\r\n    static_assert(is_trivially_copyable_v<min_max_result<int>>);\r\n\r\n    // * trivially default constructible when parameter types are trivially default constructible\r\n    static_assert(is_trivially_default_constructible_v<in_found_result<int>>);\r\n    static_assert(is_trivially_default_constructible_v<in_fun_result<int, int>>);\r\n    static_assert(is_trivially_default_constructible_v<in_in_result<int, int>>);\r\n    static_assert(is_trivially_default_constructible_v<in_out_result<int, int>>);\r\n    static_assert(is_trivially_default_constructible_v<in_in_out_result<int, int, int>>);\r\n    static_assert(is_trivially_default_constructible_v<in_out_out_result<int, int, int>>);\r\n    static_assert(is_trivially_default_constructible_v<min_max_result<int>>);\r\n\r\n    // * usable with structured bindings\r\n    constexpr bool test_bindings_in_found_result() {\r\n        auto [x, y] = in_found_result<int>{42, true};\r\n        assert(x == 42);\r\n        assert(y == true);\r\n        return true;\r\n    }\r\n    template <class T>\r\n    constexpr bool test_bindings_2() {\r\n        auto [x, y] = T{13, 42};\r\n        assert(x == 13);\r\n        assert(y == 42);\r\n        return true;\r\n    }\r\n    template <class T>\r\n    constexpr bool test_bindings_3() {\r\n        auto [x, y, z] = T{2, 3, 5};\r\n        assert(x == 2);\r\n        assert(y == 3);\r\n        assert(z == 5);\r\n        return true;\r\n    }\r\n\r\n    static_assert(test_bindings_in_found_result());\r\n    static_assert(test_bindings_2<in_fun_result<int, int>>());\r\n    static_assert(test_bindings_2<in_in_result<int, int>>());\r\n    static_assert(test_bindings_2<in_out_result<int, int>>());\r\n    static_assert(test_bindings_3<in_in_out_result<int, int, int>>());\r\n    static_assert(test_bindings_3<in_out_out_result<int, int, int>>());\r\n    static_assert(test_bindings_2<min_max_result<int>>());\r\n\r\n    // * appropriately lvalue and rvalue inter-specialization convertible\r\n    template <class T>\r\n    struct convertible_from {\r\n        convertible_from(std::add_rvalue_reference_t<T>);\r\n    };\r\n\r\n    using CFI = convertible_from<int>;\r\n\r\n    constexpr bool test_convertible_in_found_result() {\r\n        static_assert(!is_convertible_v<in_found_result<int> const&, in_found_result<CFI>>);\r\n        static_assert(is_convertible_v<in_found_result<int>, in_found_result<CFI>>);\r\n        in_found_result<int> a{42, true};\r\n        {\r\n            in_found_result<long> b = std::as_const(a);\r\n            auto [x, y]             = b;\r\n            assert(x == 42);\r\n            assert(y);\r\n        }\r\n        {\r\n            in_found_result<long> b = std::move(a);\r\n            auto [x, y]             = b;\r\n            assert(x == 42);\r\n            assert(y);\r\n        }\r\n        return true;\r\n    }\r\n    static_assert(test_convertible_in_found_result());\r\n    constexpr bool test_convertible_min_max_result() {\r\n        static_assert(!is_convertible_v<min_max_result<int> const&, min_max_result<CFI>>);\r\n        static_assert(is_convertible_v<min_max_result<int>, min_max_result<CFI>>);\r\n        min_max_result<int> a{13, 42};\r\n        {\r\n            min_max_result<long> b = std::as_const(a);\r\n            auto [x, y]            = b;\r\n            assert(x == 13);\r\n            assert(y == 42);\r\n        }\r\n        {\r\n            min_max_result<long> b = std::move(a);\r\n            auto [x, y]            = b;\r\n            assert(x == 13);\r\n            assert(y == 42);\r\n        }\r\n        return true;\r\n    }\r\n    static_assert(test_convertible_min_max_result());\r\n\r\n    template <template <class, class> class R>\r\n    constexpr bool test_convertible_2() {\r\n        static_assert(!is_convertible_v<R<int, int> const&, R<CFI, CFI>>);\r\n        static_assert(is_convertible_v<R<int, int>, R<CFI, CFI>>);\r\n        R<int, int> a{13, 42};\r\n        {\r\n            R<long, long> b = std::as_const(a);\r\n            auto [x, y]     = b;\r\n            assert(x == 13);\r\n            assert(y == 42);\r\n        }\r\n        {\r\n            R<long, long> b = std::move(a);\r\n            auto [x, y]     = b;\r\n            assert(x == 13);\r\n            assert(y == 42);\r\n        }\r\n        return true;\r\n    }\r\n    static_assert(test_convertible_2<in_fun_result>());\r\n    static_assert(test_convertible_2<in_in_result>());\r\n    static_assert(test_convertible_2<in_out_result>());\r\n\r\n    template <template <class, class, class> class R>\r\n    constexpr bool test_convertible_3() {\r\n        static_assert(!is_convertible_v<R<int, int, int> const&, R<CFI, CFI, CFI>>);\r\n        static_assert(is_convertible_v<R<int, int, int>, R<CFI, CFI, CFI>>);\r\n        R<int, int, int> a{13, 42, 1729};\r\n        {\r\n            R<long, long, long> b = std::as_const(a);\r\n            auto [x, y, z]        = b;\r\n            assert(x == 13);\r\n            assert(y == 42);\r\n            assert(z == 1729);\r\n        }\r\n        {\r\n            R<long, long, long> b = std::move(a);\r\n            auto [x, y, z]        = b;\r\n            assert(x == 13);\r\n            assert(y == 42);\r\n            assert(z == 1729);\r\n        }\r\n        return true;\r\n    }\r\n    static_assert(test_convertible_3<in_in_out_result>());\r\n    static_assert(test_convertible_3<in_out_out_result>());\r\n} // namespace result_test\r\n\r\nnamespace permutable_test {\r\n    using std::forward_iterator, std::input_iterator, std::indirectly_movable_storable, std::indirectly_swappable,\r\n        std::permutable;\r\n\r\n    template <int I>\r\n    struct archetype {\r\n        using value_type      = int;\r\n        using difference_type = int;\r\n\r\n        struct proxy {\r\n            proxy()                        = default;\r\n            proxy(proxy const&)            = delete;\r\n            proxy& operator=(proxy const&) = delete;\r\n\r\n            operator int() const;\r\n            // 1: not indirectly_movable_storable<archetype, archetype>\r\n            void operator=(int) const\r\n                requires (I != 1);\r\n        };\r\n\r\n        proxy operator*() const;\r\n\r\n        archetype& operator++();\r\n        archetype operator++(int);\r\n\r\n        // 0: not forward_iterator (input only)\r\n        bool operator==(archetype const&) const\r\n            requires (I != 0)\r\n        = default;\r\n\r\n        friend int iter_move(archetype const&) {\r\n            return 42;\r\n        }\r\n        friend void iter_swap(archetype const&, archetype const&) {}\r\n\r\n        // Ideally we'd have a \"not reflexively indirectly_swappable\" case as well, but there's no way for a class to\r\n        // satisfy indirectly_movable_storable<T, T> without satisfying indirectly_swappable<T, T> thanks to N4861\r\n        // [iterator.cust.swap]/4.3. permutable requires indirectly_swappable<T, T> only to forbid a user type from\r\n        // defining an iter_swap overload that doesn't meet the semantic requirements.\r\n    };\r\n    static_assert(input_iterator<archetype<0>>);\r\n    static_assert(!forward_iterator<archetype<0>>);\r\n    static_assert(indirectly_movable_storable<archetype<0>, archetype<0>>);\r\n    static_assert(indirectly_swappable<archetype<0>, archetype<0>>);\r\n\r\n    static_assert(forward_iterator<archetype<1>>);\r\n    static_assert(!indirectly_movable_storable<archetype<1>, archetype<1>>);\r\n    static_assert(indirectly_swappable<archetype<1>, archetype<1>>);\r\n\r\n    static_assert(forward_iterator<archetype<2>>);\r\n    static_assert(indirectly_movable_storable<archetype<2>, archetype<2>>);\r\n    static_assert(indirectly_swappable<archetype<2>, archetype<2>>);\r\n\r\n    static_assert(!permutable<archetype<0>>);\r\n    static_assert(!permutable<archetype<1>>);\r\n    static_assert(permutable<archetype<2>>);\r\n} // namespace permutable_test\r\n\r\nnamespace mergeable_test {\r\n    using ranges::less;\r\n    using std::identity, std::indirect_strict_weak_order, std::permutable, std::projected, std::mergeable;\r\n\r\n    enum class readable_status { not_input_iter, good };\r\n\r\n    template <class T, readable_status RS>\r\n    struct readable_archetype {\r\n        using value_type      = T;\r\n        using difference_type = int;\r\n\r\n        T const& operator*() const;\r\n        readable_archetype& operator++();\r\n\r\n        // 0: not input_iterator\r\n        void operator++(int)\r\n            requires (RS != readable_status::not_input_iter);\r\n    };\r\n\r\n    enum class writable_status { not_weakly_incrementable, not_ind_copy_int, not_ind_copy_long, good };\r\n\r\n    template <writable_status WS>\r\n    struct writable_archetype {\r\n        using difference_type = int;\r\n\r\n        writable_archetype& operator*();\r\n        writable_archetype& operator++();\r\n\r\n        writable_archetype operator++(int)\r\n            requires (WS != writable_status::not_weakly_incrementable);\r\n\r\n        // 1: not indirectly_copyable<const int*, writable_archetype>\r\n        void operator=(int)\r\n            requires (WS == writable_status::not_ind_copy_int)\r\n        = delete;\r\n        writable_archetype& operator=(int)\r\n            requires (WS != writable_status::not_ind_copy_int);\r\n\r\n        // 2: not indirectly_copyable<const long*, writable_archetype>\r\n        void operator=(long)\r\n            requires (WS == writable_status::not_ind_copy_long)\r\n        = delete;\r\n        writable_archetype& operator=(long)\r\n            requires (WS != writable_status::not_ind_copy_long);\r\n    };\r\n\r\n    void test() {\r\n        using std::indirect_strict_weak_order, std::indirectly_copyable, std::input_iterator, std::mergeable,\r\n            std::weakly_incrementable;\r\n\r\n        using I1  = readable_archetype<int, readable_status::good>;\r\n        using I2  = readable_archetype<long, readable_status::good>;\r\n        using O   = writable_archetype<writable_status::good>;\r\n        using Pr  = ranges::less;\r\n        using Pj1 = std::identity;\r\n        using Pj2 = std::identity;\r\n\r\n        {\r\n            using Bad_I1 = readable_archetype<int, readable_status::not_input_iter>;\r\n#ifndef _M_CEE // TRANSITION, VSO-1665670\r\n            static_assert(!input_iterator<Bad_I1>);\r\n#endif // ^^^ no workaround ^^^\r\n            static_assert(input_iterator<I2>);\r\n            static_assert(weakly_incrementable<O>);\r\n            static_assert(indirectly_copyable<Bad_I1, O>);\r\n            static_assert(indirectly_copyable<I2, O>);\r\n            static_assert(indirect_strict_weak_order<Pr, projected<Bad_I1, Pj1>, projected<I2, Pj2>>);\r\n#ifndef _M_CEE // TRANSITION, VSO-1665670\r\n            static_assert(!mergeable<Bad_I1, I2, O, Pr, Pj1, Pj2>);\r\n#endif // ^^^ no workaround ^^^\r\n        }\r\n\r\n        {\r\n            using Bad_I2 = readable_archetype<long, readable_status::not_input_iter>;\r\n            static_assert(input_iterator<I1>);\r\n#ifndef _M_CEE // TRANSITION, VSO-1665670\r\n            static_assert(!input_iterator<Bad_I2>);\r\n#endif // ^^^ no workaround ^^^\r\n            static_assert(weakly_incrementable<O>);\r\n            static_assert(indirectly_copyable<I1, O>);\r\n            static_assert(indirectly_copyable<Bad_I2, O>);\r\n            static_assert(indirect_strict_weak_order<Pr, projected<I1, Pj1>, projected<Bad_I2, Pj2>>);\r\n#ifndef _M_CEE // TRANSITION, VSO-1665670\r\n            static_assert(!mergeable<I1, Bad_I2, O, Pr, Pj1, Pj2>);\r\n#endif // ^^^ no workaround ^^^\r\n        }\r\n\r\n        {\r\n            using Bad_O = writable_archetype<writable_status::not_weakly_incrementable>;\r\n            static_assert(input_iterator<I1>);\r\n            static_assert(input_iterator<I2>);\r\n#ifndef _M_CEE // TRANSITION, VSO-1665670\r\n            static_assert(!weakly_incrementable<Bad_O>);\r\n#endif // ^^^ no workaround ^^^\r\n            static_assert(indirectly_copyable<I1, Bad_O>);\r\n            static_assert(indirectly_copyable<I2, Bad_O>);\r\n            static_assert(indirect_strict_weak_order<Pr, projected<I1, Pj1>, projected<I2, Pj2>>);\r\n#ifndef _M_CEE // TRANSITION, VSO-1665670\r\n            static_assert(!mergeable<I1, I2, Bad_O, Pr, Pj1, Pj2>);\r\n#endif // ^^^ no workaround ^^^\r\n        }\r\n\r\n        {\r\n            using Bad_O = writable_archetype<writable_status::not_ind_copy_int>;\r\n            static_assert(input_iterator<I1>);\r\n            static_assert(input_iterator<I2>);\r\n            static_assert(weakly_incrementable<Bad_O>);\r\n            static_assert(!indirectly_copyable<I1, Bad_O>);\r\n            static_assert(indirectly_copyable<I2, Bad_O>);\r\n            static_assert(indirect_strict_weak_order<Pr, projected<I1, Pj1>, projected<I2, Pj2>>);\r\n            static_assert(!mergeable<I1, I2, Bad_O, Pr, Pj1, Pj2>);\r\n        }\r\n\r\n        {\r\n            using Bad_O = writable_archetype<writable_status::not_ind_copy_long>;\r\n            static_assert(input_iterator<I1>);\r\n            static_assert(input_iterator<I2>);\r\n            static_assert(weakly_incrementable<Bad_O>);\r\n            static_assert(indirectly_copyable<I1, Bad_O>);\r\n            static_assert(!indirectly_copyable<I2, Bad_O>);\r\n            static_assert(indirect_strict_weak_order<Pr, projected<I1, Pj1>, projected<I2, Pj2>>);\r\n            static_assert(!mergeable<I1, I2, Bad_O, Pr, Pj1, Pj2>);\r\n        }\r\n\r\n        {\r\n            using Bad_Pr = int;\r\n            static_assert(input_iterator<I1>);\r\n            static_assert(input_iterator<I2>);\r\n            static_assert(weakly_incrementable<O>);\r\n            static_assert(indirectly_copyable<I1, O>);\r\n            static_assert(indirectly_copyable<I2, O>);\r\n            static_assert(!indirect_strict_weak_order<Bad_Pr, projected<I1, Pj1>, projected<I2, Pj2>>);\r\n            static_assert(!mergeable<I1, I2, O, Bad_Pr, Pj1, Pj2>);\r\n        }\r\n\r\n        static_assert(input_iterator<I1>);\r\n        static_assert(input_iterator<I2>);\r\n        static_assert(weakly_incrementable<O>);\r\n        static_assert(indirectly_copyable<I1, O>);\r\n        static_assert(indirectly_copyable<I2, O>);\r\n        static_assert(indirect_strict_weak_order<Pr, projected<I1, Pj1>, projected<I2, Pj2>>);\r\n        static_assert(mergeable<I1, I2, O, Pr, Pj1, Pj2>);\r\n    }\r\n} // namespace mergeable_test\r\n\r\nnamespace sortable_test {\r\n    using ranges::less;\r\n    using std::identity, std::indirect_strict_weak_order, std::permutable, std::projected, std::sortable;\r\n\r\n    void test() {\r\n        {\r\n            using I = int const*; // not permutable\r\n            using C = less;\r\n            using P = identity;\r\n            static_assert(!permutable<I>);\r\n            static_assert(indirect_strict_weak_order<C, projected<I, P>>);\r\n            static_assert(!sortable<I, C, P>);\r\n        }\r\n\r\n        {\r\n            using I = int*;\r\n            using C = void; // not an indirect_strict_weak_order\r\n            using P = identity;\r\n            static_assert(permutable<I>);\r\n            static_assert(!indirect_strict_weak_order<C, projected<I, P>>);\r\n            static_assert(!sortable<I, C, P>);\r\n        }\r\n\r\n        {\r\n            using I = int*;\r\n            using C = less;\r\n            using P = identity;\r\n            static_assert(permutable<I>);\r\n            static_assert(indirect_strict_weak_order<C, projected<I, P>>);\r\n            static_assert(sortable<I, C, P>);\r\n        }\r\n    }\r\n} // namespace sortable_test\r\n\r\nnamespace gh_1089 {\r\n    // Defend against regression of GH-1089: \"_Pass_fn/_Ref_fn interferes with the Ranges invoke protocol\"\r\n    // The _Pass_fn protocol would previously assume that anything larger than a pointer was a function object that it\r\n    // could call with `()` and not a pointer-to-member that requires the `invoke` protocol.\r\n\r\n    void test() {\r\n        {\r\n            struct Base {\r\n                virtual int purr() = 0;\r\n            };\r\n\r\n            struct Derived1 : virtual Base {\r\n                int purr() override {\r\n                    return 1729;\r\n                }\r\n            };\r\n\r\n            struct Derived2 : virtual Base {};\r\n\r\n            struct MostDerived : Derived1, Derived2 {\r\n                int purr() override {\r\n                    return 2020;\r\n                }\r\n            };\r\n\r\n\r\n            static_assert(sizeof(&Derived1::purr) > sizeof(void*)); // NB: relies on non-portable platform properties\r\n\r\n            Derived1 a[2];\r\n            MostDerived b[3];\r\n            Derived1* pointers[] = {&b[0], &a[0], &b[1], &a[1], &b[2]};\r\n\r\n            (void) ranges::count(pointers, 2020, &Derived1::purr);\r\n        }\r\n        {\r\n            struct Cat;\r\n\r\n            using PMD_Cat = int Cat::*;\r\n            // Quantum effects: we must observe the size before defining Cat or it will become smaller.\r\n            static_assert(sizeof(PMD_Cat) > sizeof(void*));\r\n\r\n            struct Cat {\r\n                int x = 42;\r\n            };\r\n\r\n            static_assert(sizeof(&Cat::x) > sizeof(void*)); // NB: relies on non-portable platform properties\r\n\r\n            Cat cats[42];\r\n\r\n            (void) ranges::count(cats, 42, &Cat::x);\r\n        }\r\n    }\r\n} // namespace gh_1089\r\n\r\nnamespace special_memory_concepts {\r\n    // Validate the concepts from [special.mem.concepts] used to constrain the specialized memory algorithms\r\n    // NB: Non-portable tests of internal machinery\r\n    using ranges::_No_throw_input_iterator, ranges::_No_throw_sentinel_for, ranges::_No_throw_input_range,\r\n        ranges::_No_throw_forward_iterator, ranges::_No_throw_forward_range;\r\n    using std::forward_iterator, std::input_iterator, std::sentinel_for;\r\n\r\n    enum class iterator_status : int { not_input, not_lvalue_reference, different_reference_and_value, input, forward };\r\n\r\n    template <iterator_status I>\r\n    struct iterator_archetype {\r\n        using iterator_concept = std::conditional_t<I == iterator_status::not_input, std::output_iterator_tag,\r\n            std::conditional_t<I == iterator_status::forward, std::forward_iterator_tag, std::input_iterator_tag>>;\r\n        using difference_type  = int;\r\n        using value_type       = std::conditional_t<I == iterator_status::different_reference_and_value, long, int>;\r\n\r\n        int operator*() const\r\n            requires (I == iterator_status::not_lvalue_reference);\r\n        int& operator*() const\r\n            requires (I != iterator_status::not_lvalue_reference);\r\n\r\n        iterator_archetype& operator++();\r\n        void operator++(int)\r\n            requires (I != iterator_status::forward);\r\n        iterator_archetype operator++(int)\r\n            requires (I == iterator_status::forward);\r\n\r\n        bool operator==(std::default_sentinel_t) const;\r\n        bool operator==(iterator_archetype const&) const\r\n            requires (I == iterator_status::forward);\r\n    };\r\n    // Verify iterator_archetype\r\n    static_assert(!input_iterator<iterator_archetype<iterator_status::not_input>>);\r\n    static_assert(input_iterator<iterator_archetype<iterator_status::not_lvalue_reference>>);\r\n    static_assert(input_iterator<iterator_archetype<iterator_status::different_reference_and_value>>);\r\n    static_assert(input_iterator<iterator_archetype<iterator_status::input>>);\r\n    static_assert(!forward_iterator<iterator_archetype<iterator_status::input>>);\r\n    static_assert(forward_iterator<iterator_archetype<iterator_status::forward>>);\r\n\r\n    template <class I>\r\n    constexpr bool has_lvalue_reference = std::is_lvalue_reference_v<std::iter_reference_t<I>>;\r\n    static_assert(has_lvalue_reference<iterator_archetype<iterator_status::not_input>>);\r\n    static_assert(!has_lvalue_reference<iterator_archetype<iterator_status::not_lvalue_reference>>);\r\n    static_assert(has_lvalue_reference<iterator_archetype<iterator_status::different_reference_and_value>>);\r\n    static_assert(has_lvalue_reference<iterator_archetype<iterator_status::input>>);\r\n    static_assert(has_lvalue_reference<iterator_archetype<iterator_status::forward>>);\r\n\r\n    template <class I>\r\n    constexpr bool same_reference_value =\r\n        std::same_as<std::remove_cvref_t<std::iter_reference_t<I>>, std::iter_value_t<I>>;\r\n    static_assert(same_reference_value<iterator_archetype<iterator_status::not_input>>);\r\n    static_assert(same_reference_value<iterator_archetype<iterator_status::not_lvalue_reference>>);\r\n    static_assert(!same_reference_value<iterator_archetype<iterator_status::different_reference_and_value>>);\r\n    static_assert(same_reference_value<iterator_archetype<iterator_status::input>>);\r\n    static_assert(same_reference_value<iterator_archetype<iterator_status::forward>>);\r\n\r\n    // Validate _No_throw_input_iterator\r\n    static_assert(!_No_throw_input_iterator<iterator_archetype<iterator_status::not_input>>);\r\n    static_assert(!_No_throw_input_iterator<iterator_archetype<iterator_status::not_lvalue_reference>>);\r\n    static_assert(!_No_throw_input_iterator<iterator_archetype<iterator_status::different_reference_and_value>>);\r\n    static_assert(_No_throw_input_iterator<iterator_archetype<iterator_status::input>>);\r\n    static_assert(_No_throw_input_iterator<iterator_archetype<iterator_status::forward>>);\r\n\r\n    enum class sentinel_status : int { no, yes };\r\n\r\n    template <sentinel_status I>\r\n    struct sentinel_archetype {\r\n        template <iterator_status S>\r\n        bool operator==(iterator_archetype<S> const&) const\r\n            requires (I != sentinel_status::no);\r\n    };\r\n    // Verify sentinel_archetype\r\n    static_assert(!sentinel_for<sentinel_archetype<sentinel_status::no>, iterator_archetype<iterator_status::input>>);\r\n    static_assert(sentinel_for<sentinel_archetype<sentinel_status::yes>, iterator_archetype<iterator_status::input>>);\r\n\r\n    // Validate _No_throw_sentinel_for\r\n    static_assert(\r\n        !_No_throw_sentinel_for<sentinel_archetype<sentinel_status::no>, iterator_archetype<iterator_status::input>>);\r\n    static_assert(\r\n        _No_throw_sentinel_for<sentinel_archetype<sentinel_status::yes>, iterator_archetype<iterator_status::input>>);\r\n    static_assert(!_No_throw_sentinel_for<iterator_archetype<iterator_status::input>,\r\n        iterator_archetype<iterator_status::input>>);\r\n    static_assert(_No_throw_sentinel_for<iterator_archetype<iterator_status::forward>,\r\n        iterator_archetype<iterator_status::forward>>);\r\n\r\n    // Validate _No_throw_forward_iterator\r\n    static_assert(!_No_throw_forward_iterator<iterator_archetype<iterator_status::not_input>>);\r\n    static_assert(!_No_throw_forward_iterator<iterator_archetype<iterator_status::not_lvalue_reference>>);\r\n    static_assert(!_No_throw_forward_iterator<iterator_archetype<iterator_status::different_reference_and_value>>);\r\n    static_assert(!_No_throw_forward_iterator<iterator_archetype<iterator_status::input>>);\r\n    static_assert(_No_throw_forward_iterator<iterator_archetype<iterator_status::forward>>);\r\n\r\n    enum class range_status : int { not_range, not_input, input, forward };\r\n\r\n    template <range_status I>\r\n    struct range_archetype {\r\n        using It = std::conditional_t<I == range_status::not_range, void,\r\n            std::conditional_t<I == range_status::not_input, iterator_archetype<iterator_status::not_input>,\r\n                std::conditional_t<I == range_status::forward, iterator_archetype<iterator_status::forward>,\r\n                    iterator_archetype<iterator_status::input>>>>;\r\n        using Se = std::conditional_t<I == range_status::not_range, void,\r\n            std::conditional_t<I == range_status::forward, iterator_archetype<iterator_status::forward>,\r\n                std::default_sentinel_t>>;\r\n\r\n        It begin() const;\r\n        Se end() const;\r\n    };\r\n    // Verify range_archetype\r\n    static_assert(!ranges::range<range_archetype<range_status::not_range>>);\r\n    static_assert(ranges::range<range_archetype<range_status::not_input>>);\r\n    static_assert(ranges::range<range_archetype<range_status::input>>);\r\n    static_assert(ranges::range<range_archetype<range_status::forward>>);\r\n\r\n    // Validate _No_throw_input_range; note that the distinction between range<R> and\r\n    // no-throw-sentinel-for<sentinel_t<R>, iterator_t<R>> is purely semantic, so we can't test them separately.\r\n    static_assert(!_No_throw_input_range<range_archetype<range_status::not_range>>);\r\n    static_assert(!_No_throw_input_range<range_archetype<range_status::not_input>>);\r\n    static_assert(_No_throw_input_range<range_archetype<range_status::input>>);\r\n    static_assert(_No_throw_input_range<range_archetype<range_status::forward>>);\r\n\r\n    // Validate _No_throw_forward_range\r\n    static_assert(!_No_throw_forward_range<range_archetype<range_status::not_range>>);\r\n    static_assert(!_No_throw_forward_range<range_archetype<range_status::not_input>>);\r\n    static_assert(!_No_throw_forward_range<range_archetype<range_status::input>>);\r\n    static_assert(_No_throw_forward_range<range_archetype<range_status::forward>>);\r\n} // namespace special_memory_concepts\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_iterator_machinery/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_iterator_machinery/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <compare>\r\n#include <concepts>\r\n#include <iterator>\r\n#include <list>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\ntemplate <class T>\r\nusing reference_to = T&;\r\ntemplate <class T>\r\nconcept can_reference = requires { typename reference_to<T>; };\r\n\r\ntemplate <class T, class U = T>\r\nconcept has_eq = requires(T const& t, U const& u) { t == u; };\r\n\r\ntemplate <class T, class U = T>\r\nconcept has_neq = requires(T const& t, U const& u) { t != u; };\r\n\r\ntemplate <class T, class U = T>\r\nconcept has_less = requires(T const& t, U const& u) { t < u; };\r\n\r\ntemplate <class T, class U = T>\r\nconcept has_greater = requires(T const& t, U const& u) { t > u; };\r\n\r\ntemplate <class T, class U = T>\r\nconcept has_less_eq = requires(T const& t, U const& u) { t <= u; };\r\n\r\ntemplate <class T, class U = T>\r\nconcept has_greater_eq = requires(T const& t, U const& u) { t >= u; };\r\n\r\ntemplate <class T, class U = T>\r\nconcept has_difference = requires(T const& t, U const& u) { t - u; };\r\n\r\nstruct no_such_type; // not defined\r\n\r\nstruct empty_type {\r\n    bool operator==(empty_type const&) const = default;\r\n};\r\n\r\nstruct move_only {\r\n    move_only()                       = default;\r\n    move_only(move_only&&)            = default;\r\n    move_only& operator=(move_only&&) = default;\r\n};\r\n\r\ntemplate <class... Types>\r\nstruct derives_from : Types... {};\r\n\r\ntemplate <class T>\r\nstruct dereferences_to {\r\n    using value_type = std::remove_cvref_t<T>;\r\n    T operator*() const;\r\n};\r\n\r\nstruct my_iterator {\r\n    using iterator_concept  = std::forward_iterator_tag;\r\n    using iterator_category = std::input_iterator_tag;\r\n    using value_type        = char;\r\n    using difference_type   = long;\r\n    using pointer           = void;\r\n    using reference         = char;\r\n\r\n    bool operator==(my_iterator const&) const = default;\r\n\r\n    char operator*() const;\r\n    my_iterator& operator++();\r\n    my_iterator operator++(int);\r\n};\r\n\r\ntemplate <class T>\r\nconcept has_member_iter_concept = requires { typename T::iterator_concept; };\r\n\r\ntemplate <class T>\r\nconcept has_member_iter_category = requires { typename T::iterator_category; };\r\n\r\ntemplate <class T>\r\nconcept has_member_value_type = requires { typename T::value_type; };\r\ntemplate <class T>\r\nconcept has_iter_value = requires { typename std::iter_value_t<T>; };\r\n\r\ntemplate <class T>\r\nconcept has_member_difference_type = requires { typename T::difference_type; };\r\ntemplate <class T>\r\nconcept has_iter_diff = requires { typename std::iter_difference_t<T>; };\r\n\r\ntemplate <class T>\r\nstruct arrow_base {\r\n    T operator->() const;\r\n    std::strong_ordering operator<=>(arrow_base const&) const = default;\r\n};\r\n\r\nstruct sentinel_base {\r\n    bool operator==(std::default_sentinel_t) const;\r\n};\r\n\r\nstruct simple_input_iter {\r\n    using value_type      = double;\r\n    using difference_type = long;\r\n\r\n    explicit simple_input_iter(int); // not default constructible\r\n\r\n    value_type operator*() const;\r\n    simple_input_iter& operator++();\r\n    simple_input_iter operator++(int);\r\n\r\n    bool operator==(simple_input_iter const&) const = default;\r\n};\r\n\r\ntemplate <class Base = empty_type>\r\nstruct simple_forward_iter : Base {\r\n    using value_type      = double;\r\n    using difference_type = long;\r\n\r\n    value_type const& operator*() const;\r\n    simple_forward_iter& operator++();\r\n    simple_forward_iter operator++(int);\r\n\r\n    bool operator==(simple_forward_iter const&) const = default;\r\n};\r\n\r\ntemplate <class Base = empty_type>\r\nstruct simple_bidi_iter : Base {\r\n    using value_type      = double;\r\n    using difference_type = long;\r\n    using reference       = value_type const&;\r\n\r\n    value_type& operator*() const;\r\n    simple_bidi_iter& operator++();\r\n    simple_bidi_iter operator++(int);\r\n\r\n    bool operator==(simple_bidi_iter const&) const = default;\r\n\r\n    simple_bidi_iter& operator--();\r\n    simple_bidi_iter operator--(int);\r\n};\r\n\r\ntemplate <class Base = empty_type>\r\nstruct simple_random_iter : Base {\r\n    using value_type = double;\r\n    using D          = long;\r\n\r\n    value_type const& operator*() const;\r\n    simple_random_iter& operator++();\r\n    simple_random_iter operator++(int);\r\n\r\n    simple_random_iter& operator--();\r\n    simple_random_iter operator--(int);\r\n\r\n    std::strong_ordering operator<=>(simple_random_iter const&) const;\r\n\r\n    value_type const& operator[](D) const;\r\n    simple_random_iter& operator-=(D);\r\n    simple_random_iter operator-(D) const;\r\n    D operator-(simple_random_iter const&) const;\r\n    simple_random_iter& operator+=(D);\r\n    simple_random_iter operator+(D) const;\r\n    friend simple_random_iter operator+(D, const simple_random_iter&);\r\n};\r\n\r\ntemplate <class Base = empty_type>\r\nclass simple_contiguous_iter : public Base {\r\nprivate:\r\n    using V = double;\r\n    using D = long;\r\n\r\npublic:\r\n    using element_type = V const;\r\n\r\n    V const& operator*() const;\r\n    simple_contiguous_iter& operator++();\r\n    simple_contiguous_iter operator++(int);\r\n\r\n    simple_contiguous_iter& operator--();\r\n    simple_contiguous_iter operator--(int);\r\n\r\n    std::strong_ordering operator<=>(simple_contiguous_iter const&) const;\r\n\r\n    V const& operator[](D) const;\r\n    simple_contiguous_iter& operator-=(D);\r\n    simple_contiguous_iter operator-(D) const;\r\n    D operator-(simple_contiguous_iter const&) const;\r\n    simple_contiguous_iter& operator+=(D);\r\n    simple_contiguous_iter operator+(D) const;\r\n    friend simple_contiguous_iter operator+(D, const simple_contiguous_iter&);\r\n\r\n    static simple_contiguous_iter pointer_to(element_type&) noexcept;\r\n};\r\n\r\ntemplate <class Base>\r\nstruct std::indirectly_readable_traits<simple_contiguous_iter<Base>> {\r\n    using value_type = double;\r\n};\r\n\r\n// Validate iterator_category of iterators whose reference types are rvalue references (LWG-3798).\r\nstruct xvalue_forward_iter {\r\n    using value_type      = double;\r\n    using difference_type = long;\r\n\r\n    value_type&& operator*() const;\r\n    xvalue_forward_iter& operator++();\r\n    xvalue_forward_iter operator++(int);\r\n\r\n    bool operator==(xvalue_forward_iter const&) const = default;\r\n};\r\n\r\nstruct xvalue_bidi_iter {\r\n    using value_type      = double;\r\n    using difference_type = long;\r\n    using reference       = value_type&&;\r\n\r\n    value_type&& operator*() const;\r\n    xvalue_bidi_iter& operator++();\r\n    xvalue_bidi_iter operator++(int);\r\n\r\n    bool operator==(xvalue_bidi_iter const&) const = default;\r\n\r\n    xvalue_bidi_iter& operator--();\r\n    xvalue_bidi_iter operator--(int);\r\n};\r\n\r\nstruct xvalue_random_iter {\r\n    using value_type = double;\r\n    using D          = long;\r\n\r\n    value_type&& operator*() const;\r\n    xvalue_random_iter& operator++();\r\n    xvalue_random_iter operator++(int);\r\n\r\n    xvalue_random_iter& operator--();\r\n    xvalue_random_iter operator--(int);\r\n\r\n    bool operator==(xvalue_random_iter const&) const;\r\n    std::strong_ordering operator<=>(xvalue_random_iter const&) const;\r\n\r\n    value_type&& operator[](D) const;\r\n    xvalue_random_iter& operator-=(D);\r\n    xvalue_random_iter operator-(D) const;\r\n    D operator-(xvalue_random_iter const&) const;\r\n    xvalue_random_iter& operator+=(D);\r\n    xvalue_random_iter operator+(D) const;\r\n    friend xvalue_random_iter operator+(D, xvalue_random_iter const&);\r\n};\r\n\r\ntemplate <int I>\r\nstruct proxy_iterator {\r\n    using difference_type = int;\r\n    using value_type      = int;\r\n\r\n    struct reference {\r\n        operator int() const;\r\n    };\r\n\r\n    proxy_iterator() = default;\r\n    constexpr explicit proxy_iterator(int* count) : pcount_{count} {}\r\n\r\n    constexpr reference operator*() const noexcept {\r\n        return {};\r\n    }\r\n    constexpr reference operator[](int) const noexcept;\r\n\r\n    bool operator==(proxy_iterator) const;\r\n    std::strong_ordering operator<=>(proxy_iterator const&) const;\r\n\r\n    proxy_iterator& operator++();\r\n    proxy_iterator operator++(int);\r\n\r\n    constexpr proxy_iterator& operator--() noexcept {\r\n        return *this;\r\n    }\r\n    proxy_iterator operator--(int);\r\n\r\n    constexpr proxy_iterator operator+(int) const {\r\n        return *this;\r\n    }\r\n    friend proxy_iterator operator+(int, proxy_iterator const&) {\r\n        return {};\r\n    }\r\n    proxy_iterator& operator+=(int) const;\r\n\r\n    proxy_iterator operator-(int) const;\r\n    int operator-(proxy_iterator const&) const;\r\n    proxy_iterator& operator-=(int) const;\r\n\r\n    friend constexpr int iter_move(proxy_iterator const& i) {\r\n        ++*i.pcount_;\r\n        return 42;\r\n    }\r\n\r\n    template <int J>\r\n    friend constexpr void iter_swap(proxy_iterator const& x, proxy_iterator<J> const& y) {\r\n        assert(x.pcount_ == y.pcount_);\r\n        *x.pcount_ -= J;\r\n    }\r\n\r\n    int* pcount_ = nullptr;\r\n};\r\nstatic_assert(std::random_access_iterator<proxy_iterator<0>>);\r\nstatic_assert(std::indirectly_swappable<proxy_iterator<0>, proxy_iterator<1>>);\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4624) // '%s': destructor was implicitly defined as deleted\r\n\r\n// These \"meow_archetype\" class templates are used to test the corresponding concept \"meow\", which has\r\n// \"meow_archetype_max\" requirements. The class template is specialized with a size_t non-type template argument \"I\".\r\n// When I is less than meow_archetype_max, meow_archetype<I> implements all but the I-th requirement of concept meow.\r\n// When I is at least meow_archetype_max, meow_archetype<I> implements all requirements of concept meow. If meow fails\r\n// to enforce a requirement then the corresponding specialization of meow_archetype will incorrectly satisfy the concept\r\n// resulting in test failure. Conversely, if meow enforces an unspecified requirement then (ideally)\r\n// meow_archetype<meow_archetype_max> will incorrectly not satisfy the concept resulting in test failure.\r\n\r\ntemplate <std::size_t>\r\nstruct destructible_archetype {};\r\ntemplate <>\r\nstruct destructible_archetype<0> {\r\n    ~destructible_archetype() = delete;\r\n};\r\ninline constexpr std::size_t destructible_archetype_max = 1;\r\n\r\n#define COPYABLE_OPS(prefix)                                 \\\r\n    prefix##_archetype(prefix##_archetype const&)            \\\r\n        requires (I != 1);                                   \\\r\n    prefix##_archetype(prefix##_archetype&&)                 \\\r\n        requires (I == 2)                                    \\\r\n    = delete;                                                \\\r\n                                                             \\\r\n    prefix##_archetype& operator=(prefix##_archetype const&) \\\r\n        requires (I != 3);                                   \\\r\n    prefix##_archetype& operator=(prefix##_archetype&&)      \\\r\n        requires (I == 4)                                    \\\r\n    = delete\r\n\r\ntemplate <std::size_t I>\r\nstruct semiregular_archetype : destructible_archetype<I> {\r\n    semiregular_archetype()\r\n        requires (I != 5);\r\n    COPYABLE_OPS(semiregular);\r\n};\r\n\r\ninline constexpr std::size_t semiregular_archetype_max = 6;\r\n\r\ntemplate <std::size_t>\r\nstruct weakly_incrementable_archetype_dt {\r\n    using difference_type = int;\r\n};\r\ntemplate <>\r\nstruct weakly_incrementable_archetype_dt<5> {};\r\ntemplate <>\r\nstruct weakly_incrementable_archetype_dt<6> {\r\n    using difference_type = void;\r\n};\r\ntemplate <>\r\nstruct weakly_incrementable_archetype_dt<7> {\r\n    using difference_type = unsigned int;\r\n};\r\n\r\ntemplate <std::size_t I, class Derived, class Post = void>\r\nstruct increment_ops {\r\n    void operator++()\r\n        requires (I == 8);\r\n    Derived operator++()\r\n        requires (I == 9);\r\n    Derived& operator++()\r\n        requires (I < 8 || I >= 10);\r\n    Post operator++(int)\r\n        requires (I != 10);\r\n};\r\n\r\ntemplate <std::size_t I>\r\nstruct weakly_incrementable_archetype : destructible_archetype<I>,\r\n                                        weakly_incrementable_archetype_dt<I>,\r\n                                        increment_ops<I, weakly_incrementable_archetype<I>, void> {\r\n    weakly_incrementable_archetype(weakly_incrementable_archetype const&) = delete;\r\n    weakly_incrementable_archetype(weakly_incrementable_archetype&&)\r\n        requires (I < 1 || I >= 3)\r\n    = default;\r\n\r\n    weakly_incrementable_archetype& operator=(weakly_incrementable_archetype const&) = delete;\r\n    weakly_incrementable_archetype& operator=(weakly_incrementable_archetype&&)\r\n        requires (I < 3 || I >= 5)\r\n    = default;\r\n};\r\n\r\ninline constexpr std::size_t weakly_incrementable_archetype_max = 11;\r\n\r\ntemplate <std::size_t I>\r\nstruct incrementable_archetype : weakly_incrementable_archetype<I>,\r\n                                 increment_ops<I, incrementable_archetype<I>, incrementable_archetype<I>> {\r\n    incrementable_archetype()\r\n        requires (I != 11);\r\n    COPYABLE_OPS(incrementable);\r\n    using increment_ops<I, incrementable_archetype<I>, incrementable_archetype<I>>::operator++;\r\n\r\n    bool operator==(incrementable_archetype const&) const\r\n        requires (I != 12);\r\n    bool operator!=(incrementable_archetype const&) const\r\n        requires (I == 13)\r\n    = delete;\r\n};\r\n\r\ninline constexpr std::size_t incrementable_archetype_max = 14;\r\n\r\ntemplate <std::size_t I>\r\nstruct iterator_archetype : weakly_incrementable_archetype<I> {\r\n    COPYABLE_OPS(iterator);\r\n\r\n    iterator_archetype& operator++()\r\n        requires (I > 9);\r\n    void operator++(int)\r\n        requires (I != 10);\r\n\r\n    void operator*()\r\n        requires (I == 11);\r\n    int operator*()\r\n        requires (I != 11);\r\n};\r\n\r\ninline constexpr std::size_t iterator_archetype_max = 12;\r\n\r\ntemplate <std::size_t I>\r\nstruct sentinel_archetype : semiregular_archetype<I> {\r\n    sentinel_archetype()\r\n        requires (I != 5);\r\n    COPYABLE_OPS(sentinel);\r\n\r\n    template <std::size_t J>\r\n        requires (I != 6)\r\n    bool operator==(iterator_archetype<J> const&) const;\r\n};\r\n\r\ninline constexpr std::size_t sentinel_archetype_max = 7;\r\n\r\ntemplate <std::size_t I>\r\nstruct sized_sentinel_archetype : sentinel_archetype<I> {\r\n    sized_sentinel_archetype()\r\n        requires (I != 5);\r\n    COPYABLE_OPS(sized_sentinel);\r\n};\r\n\r\ntemplate <std::size_t I, std::size_t J>\r\n    requires (I == 8)\r\ndouble operator-(sized_sentinel_archetype<I> const&, iterator_archetype<J> const&);\r\n\r\ntemplate <std::size_t I, std::size_t J>\r\n    requires (I < 7 || I >= 9)\r\nstd::iter_difference_t<iterator_archetype<J>> operator-(\r\n    sized_sentinel_archetype<I> const&, iterator_archetype<J> const&);\r\n\r\ntemplate <std::size_t I, std::size_t J>\r\n    requires (I == 9)\r\ndouble operator-(iterator_archetype<J> const&, sized_sentinel_archetype<I> const&);\r\n\r\ntemplate <std::size_t I, std::size_t J>\r\n    requires (I < 9 || I >= 11)\r\nstd::iter_difference_t<iterator_archetype<J>> operator-(\r\n    iterator_archetype<J> const&, sized_sentinel_archetype<I> const&);\r\n\r\ntemplate <class I>\r\nconstexpr bool std::disable_sized_sentinel_for<sized_sentinel_archetype<11>, I> = true;\r\n\r\ninline constexpr std::size_t sized_sentinel_archetype_max = 12;\r\n\r\ntemplate <std::size_t I>\r\nstruct output_iterator_archetype : iterator_archetype<I>,\r\n                                   increment_ops<I, output_iterator_archetype<I>, output_iterator_archetype<I>&> {\r\n    COPYABLE_OPS(output_iterator);\r\n    using increment_ops<I, output_iterator_archetype<I>, output_iterator_archetype<I>&>::operator++;\r\n\r\n    // dereference ops from iterator_archetype\r\n    void operator*()\r\n        requires (I == 11);\r\n    output_iterator_archetype& operator*()\r\n        requires (I != 11);\r\n\r\n    // indirectly_writable requirements\r\n    void operator=(int)\r\n        requires (I != 12);\r\n};\r\n\r\ninline constexpr std::size_t output_iterator_archetype_max = 13;\r\n\r\ntemplate <std::size_t>\r\nstruct input_iterator_archetype_types {\r\n    using value_type = int;\r\n};\r\ntemplate <>\r\nstruct input_iterator_archetype_types<12> {};\r\ntemplate <>\r\nstruct input_iterator_archetype_types<13> {\r\n    using value_type = void;\r\n};\r\ntemplate <>\r\nstruct input_iterator_archetype_types<14> {\r\n    using iterator_category = void;\r\n    using value_type        = int;\r\n};\r\ntemplate <>\r\nstruct input_iterator_archetype_types<15> {\r\n    using iterator_concept = void;\r\n    using value_type       = int;\r\n};\r\n\r\ntemplate <std::size_t I>\r\nstruct input_iterator_archetype : iterator_archetype<I>,\r\n                                  input_iterator_archetype_types<I>,\r\n                                  increment_ops<I, input_iterator_archetype<I>, void> {\r\n    COPYABLE_OPS(input_iterator);\r\n    using increment_ops<I, input_iterator_archetype<I>, void>::operator++;\r\n\r\n    // dereference ops from iterator_archetype\r\n    void operator*() const\r\n        requires (I == 11);\r\n    int& operator*() const\r\n        requires (I != 11);\r\n};\r\n\r\ninline constexpr std::size_t input_iterator_archetype_max = 16;\r\n\r\ntemplate <std::size_t I>\r\nstruct forward_iterator_archetype : input_iterator_archetype<I>,\r\n                                    increment_ops<I, forward_iterator_archetype<I>, forward_iterator_archetype<I>> {\r\n    forward_iterator_archetype()\r\n        requires (I != 16);\r\n    COPYABLE_OPS(forward_iterator);\r\n    using increment_ops<I, forward_iterator_archetype<I>, forward_iterator_archetype<I>>::operator++;\r\n\r\n    bool operator==(forward_iterator_archetype const&) const\r\n        requires (I != 17);\r\n    bool operator!=(forward_iterator_archetype const&) const\r\n        requires (I == 18)\r\n    = delete;\r\n};\r\n\r\ninline constexpr std::size_t forward_iterator_archetype_max = 19;\r\n\r\ntemplate <std::size_t I, class Derived>\r\nstruct decrement_ops {\r\n    void operator--()\r\n        requires (I == 19);\r\n    Derived operator--()\r\n        requires (I == 20);\r\n    Derived& operator--()\r\n        requires (I < 19 || I >= 21);\r\n    Derived operator--(int)\r\n        requires (I != 21);\r\n};\r\n\r\ntemplate <std::size_t I>\r\nstruct bidi_iterator_archetype : forward_iterator_archetype<I>,\r\n                                 increment_ops<I, bidi_iterator_archetype<I>, bidi_iterator_archetype<I>>,\r\n                                 decrement_ops<I, bidi_iterator_archetype<I>> {\r\n    bidi_iterator_archetype()\r\n        requires (I != 16);\r\n    COPYABLE_OPS(bidi_iterator);\r\n    using increment_ops<I, bidi_iterator_archetype<I>, bidi_iterator_archetype<I>>::operator++;\r\n};\r\n\r\ninline constexpr std::size_t bidi_iterator_archetype_max = 22;\r\n\r\ntemplate <std::size_t I>\r\nstruct random_iterator_archetype : bidi_iterator_archetype<I>,\r\n                                   increment_ops<I, random_iterator_archetype<I>, random_iterator_archetype<I>>,\r\n                                   decrement_ops<I, random_iterator_archetype<I>> {\r\n    random_iterator_archetype()\r\n        requires (I != 16);\r\n    COPYABLE_OPS(random_iterator);\r\n    using increment_ops<I, random_iterator_archetype<I>, random_iterator_archetype<I>>::operator++;\r\n    using decrement_ops<I, random_iterator_archetype<I>>::operator--;\r\n\r\n    std::strong_ordering operator<=>(random_iterator_archetype const&) const\r\n        requires (I != 22);\r\n\r\n    int operator-(random_iterator_archetype const&) const\r\n        requires (I != 5 && I != 23);\r\n\r\n    random_iterator_archetype& operator+=(int)\r\n        requires (I != 24);\r\n    random_iterator_archetype operator+(int) const\r\n        requires (I != 25);\r\n    friend random_iterator_archetype operator+(int, random_iterator_archetype const&)\r\n        requires (I != 26)\r\n    {}\r\n\r\n    random_iterator_archetype& operator-=(int)\r\n        requires (I != 27);\r\n    random_iterator_archetype operator-(int) const\r\n        requires (I != 28);\r\n\r\n    void operator[](int) const\r\n        requires (I == 29);\r\n    int operator[](int) const\r\n        requires (I == 30);\r\n    int& operator[](int) const\r\n        requires (I < 29 || I >= 31);\r\n};\r\n\r\ninline constexpr std::size_t random_iterator_archetype_max = 31;\r\n\r\ntemplate <std::size_t I>\r\nstruct contig_iterator_archetype_types : random_iterator_archetype<I> {\r\n    using iterator_concept  = std::contiguous_iterator_tag;\r\n    using iterator_category = std::random_access_iterator_tag;\r\n};\r\ntemplate <std::size_t I>\r\n    requires (I == 14 || I == 15 || I == 31)\r\nstruct contig_iterator_archetype_types<I> : random_iterator_archetype<I> {};\r\ntemplate <>\r\nstruct contig_iterator_archetype_types<32> : random_iterator_archetype<32> {\r\n    using iterator_category = std::random_access_iterator_tag;\r\n};\r\ntemplate <>\r\nstruct contig_iterator_archetype_types<33> : random_iterator_archetype<33> {\r\n    using iterator_concept  = std::input_iterator_tag;\r\n    using iterator_category = std::random_access_iterator_tag;\r\n};\r\n\r\ntemplate <std::size_t I>\r\nstruct contig_iterator_archetype : increment_ops<I, contig_iterator_archetype<I>, contig_iterator_archetype<I>>,\r\n                                   decrement_ops<I, contig_iterator_archetype<I>>,\r\n                                   contig_iterator_archetype_types<I> {\r\n    contig_iterator_archetype()\r\n        requires (I != 16);\r\n    COPYABLE_OPS(contig_iterator);\r\n    using increment_ops<I, contig_iterator_archetype<I>, contig_iterator_archetype<I>>::operator++;\r\n    using decrement_ops<I, contig_iterator_archetype<I>>::operator--;\r\n\r\n    int operator-(contig_iterator_archetype const&) const\r\n        requires (I != 5 && I != 23);\r\n\r\n    contig_iterator_archetype& operator+=(int)\r\n        requires (I != 24);\r\n    contig_iterator_archetype operator+(int) const\r\n        requires (I != 25);\r\n    friend contig_iterator_archetype operator+(int, contig_iterator_archetype const&)\r\n        requires (I != 26)\r\n    {}\r\n\r\n    contig_iterator_archetype& operator-=(int)\r\n        requires (I != 27);\r\n    contig_iterator_archetype operator-(int) const\r\n        requires (I != 28);\r\n};\r\n\r\ntemplate <std::size_t I>\r\nstruct std::pointer_traits<contig_iterator_archetype<I>> {\r\n    using pointer         = contig_iterator_archetype<I>;\r\n    using element_type    = int;\r\n    using difference_type = iter_difference_t<pointer>;\r\n\r\n    static pointer pointer_to(element_type&);\r\n    static element_type* to_address(const pointer&);\r\n};\r\n\r\ninline constexpr std::size_t contig_iterator_archetype_max = 34;\r\n\r\n#pragma warning(pop)\r\n\r\nstruct iter_concept_example {\r\n    // bidirectional_iterator and Cpp17InputIterator, but not Cpp17ForwardIterator (N4928 [iterator.concepts.general]/2)\r\n\r\n    using value_type      = int;\r\n    using difference_type = int;\r\n\r\n    int operator*() const;\r\n\r\n    iter_concept_example& operator++();\r\n    iter_concept_example operator++(int);\r\n\r\n    iter_concept_example& operator--();\r\n    iter_concept_example operator--(int);\r\n\r\n    bool operator==(iter_concept_example) const;\r\n    bool operator!=(iter_concept_example) const;\r\n};\r\n\r\nnamespace iterator_synopsis_test {\r\n    using std::iter_reference_t, std::same_as;\r\n\r\n    // Validate iter_reference_t\r\n    template <class T>\r\n    concept can_iter_ref = requires { typename iter_reference_t<T>; };\r\n\r\n    static_assert(!can_iter_ref<int>);\r\n    static_assert(!can_iter_ref<void>);\r\n    static_assert(!can_iter_ref<empty_type>);\r\n\r\n    static_assert(same_as<iter_reference_t<int*>, int&>);\r\n    static_assert(same_as<iter_reference_t<int const*>, int const&>);\r\n    static_assert(same_as<iter_reference_t<int volatile*>, int volatile&>);\r\n    static_assert(same_as<iter_reference_t<int const volatile*>, int const volatile&>);\r\n    static_assert(same_as<iter_reference_t<int[]>, int&>);\r\n    static_assert(same_as<iter_reference_t<int[4]>, int&>);\r\n    static_assert(same_as<iter_reference_t<int (*)[4]>, int (&)[4]>);\r\n    static_assert(same_as<iter_reference_t<int (*)(int)>, int (&)(int)>);\r\n\r\n    static_assert(same_as<iter_reference_t<dereferences_to<int>>, int>);\r\n    static_assert(same_as<iter_reference_t<dereferences_to<int&>>, int&>);\r\n    static_assert(same_as<iter_reference_t<dereferences_to<int&&>>, int&&>);\r\n    static_assert(same_as<iter_reference_t<dereferences_to<int const&>>, int const&>);\r\n    static_assert(same_as<iter_reference_t<dereferences_to<int const&&>>, int const&&>);\r\n    static_assert(same_as<iter_reference_t<dereferences_to<int volatile&>>, int volatile&>);\r\n    static_assert(same_as<iter_reference_t<dereferences_to<int volatile&&>>, int volatile&&>);\r\n    static_assert(same_as<iter_reference_t<dereferences_to<int const volatile&>>, int const volatile&>);\r\n    static_assert(same_as<iter_reference_t<dereferences_to<int const volatile&&>>, int const volatile&&>);\r\n\r\n    struct with_bogus_typedefs : dereferences_to<int&> {\r\n        using value_type = double;\r\n        using reference  = double;\r\n    };\r\n    static_assert(same_as<iter_reference_t<with_bogus_typedefs>, int&>);\r\n} // namespace iterator_synopsis_test\r\n\r\nnamespace incrementable_traits_test {\r\n#pragma warning(push)\r\n#pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored\r\n    template <class T, class D = no_such_type>\r\n    constexpr bool test_difference() {\r\n        using std::incrementable_traits, std::iter_difference_t, std::same_as;\r\n\r\n        if constexpr (same_as<D, no_such_type>) {\r\n            static_assert(!has_member_difference_type<incrementable_traits<T>>);\r\n            static_assert(!has_member_difference_type<incrementable_traits<T const>>);\r\n            static_assert(!has_iter_diff<T>);\r\n            static_assert(!has_iter_diff<T const>);\r\n            return false;\r\n        } else {\r\n            static_assert(same_as<typename incrementable_traits<T>::difference_type, D>);\r\n            static_assert(same_as<typename incrementable_traits<T const>::difference_type, D>);\r\n            static_assert(same_as<iter_difference_t<T>, D>);\r\n            static_assert(same_as<iter_difference_t<T const>, D>);\r\n            return true;\r\n        }\r\n    }\r\n#pragma warning(pop)\r\n\r\n    template <class T>\r\n    struct with_difference_type {\r\n        using difference_type = T;\r\n    };\r\n\r\n    static_assert(!test_difference<void>());\r\n    static_assert(!test_difference<void*>());\r\n    static_assert(!test_difference<int(int)>());\r\n    static_assert(!test_difference<int(int) const>());\r\n    static_assert(!test_difference<int (*)(int)>());\r\n\r\n    static_assert(test_difference<int*, std::ptrdiff_t>());\r\n    static_assert(test_difference<int const*, std::ptrdiff_t>());\r\n    static_assert(test_difference<int[], std::ptrdiff_t>());\r\n    static_assert(test_difference<int[4], std::ptrdiff_t>());\r\n    static_assert(test_difference<int, int>());\r\n    static_assert(test_difference<unsigned int, int>());\r\n    static_assert(test_difference<with_difference_type<long>, long>());\r\n    static_assert(test_difference<with_difference_type<void>, void>());\r\n\r\n    static_assert(test_difference<my_iterator, long>());\r\n\r\n    struct integral_difference {\r\n        int operator-(integral_difference) const;\r\n    };\r\n    static_assert(test_difference<integral_difference, int>());\r\n\r\n    struct non_integral_difference {\r\n        void* operator-(non_integral_difference) const;\r\n    };\r\n    static_assert(!test_difference<non_integral_difference>());\r\n} // namespace incrementable_traits_test\r\n\r\nnamespace indirectly_readable_traits_test {\r\n#pragma warning(push)\r\n#pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored\r\n    template <class T, class V = no_such_type>\r\n    constexpr bool test_value() noexcept {\r\n        using std::indirectly_readable_traits, std::iter_value_t, std::same_as;\r\n\r\n        if constexpr (same_as<V, no_such_type>) {\r\n            static_assert(!has_member_value_type<indirectly_readable_traits<T>>);\r\n            static_assert(!has_member_value_type<indirectly_readable_traits<T const>>);\r\n            static_assert(!has_iter_value<indirectly_readable_traits<T>>);\r\n            static_assert(!has_iter_value<indirectly_readable_traits<T const>>);\r\n            return false;\r\n        } else {\r\n            static_assert(same_as<typename indirectly_readable_traits<T>::value_type, V>);\r\n            static_assert(same_as<typename indirectly_readable_traits<T const>::value_type, V>);\r\n            static_assert(same_as<iter_value_t<T>, V>);\r\n            static_assert(same_as<iter_value_t<T const>, V>);\r\n            return true;\r\n        }\r\n    }\r\n#pragma warning(pop)\r\n\r\n    template <class T>\r\n    struct with_element_type {\r\n        using element_type = T;\r\n    };\r\n\r\n    struct A {\r\n        using value_type = int;\r\n        int& operator*() const;\r\n    };\r\n    struct B : A {\r\n        using value_type = double;\r\n    };\r\n\r\n    static_assert(!test_value<void>());\r\n    static_assert(!test_value<void*>());\r\n    static_assert(!test_value<int(int)>());\r\n    static_assert(!test_value<int(int) const>());\r\n    static_assert(!test_value<int (*)(int)>());\r\n\r\n    static_assert(test_value<int*, int>());\r\n    static_assert(test_value<int const*, int>());\r\n    static_assert(test_value<int[], int>());\r\n    static_assert(test_value<int[4], int>());\r\n    static_assert(test_value<A, int>());\r\n    static_assert(test_value<B, double>());\r\n    static_assert(test_value<with_element_type<int>, int>());\r\n    static_assert(test_value<with_element_type<int const>, int>());\r\n\r\n    static_assert(test_value<my_iterator, char>());\r\n} // namespace indirectly_readable_traits_test\r\n\r\nnamespace iterator_traits_test {\r\n    using std::incrementable_traits, std::indirectly_readable_traits, std::iterator_traits, std::iter_value_t,\r\n        std::iter_difference_t, std::same_as, std::output_iterator_tag, std::input_iterator_tag,\r\n        std::forward_iterator_tag, std::bidirectional_iterator_tag, std::random_access_iterator_tag,\r\n        std::contiguous_iterator_tag;\r\n\r\n    template <class T>\r\n    struct with_iter_concept {\r\n        using iterator_concept = T;\r\n\r\n        auto operator<=>(with_iter_concept const&) const = default;\r\n    };\r\n    template <class T>\r\n    struct with_iter_cat {\r\n        using iterator_category = T;\r\n\r\n        auto operator<=>(with_iter_cat const&) const = default;\r\n    };\r\n    template <class T>\r\n    struct with_difference {\r\n        using difference_type = T;\r\n\r\n        auto operator<=>(with_difference const&) const = default;\r\n    };\r\n    template <class T>\r\n    struct with_value {\r\n        using value_type = T;\r\n\r\n        auto operator<=>(with_value const&) const = default;\r\n    };\r\n    template <class T>\r\n    struct with_reference {\r\n        using reference = T;\r\n\r\n        auto operator<=>(with_reference const&) const = default;\r\n    };\r\n    template <class T>\r\n    struct with_pointer {\r\n        using pointer = T;\r\n\r\n        auto operator<=>(with_pointer const&) const = default;\r\n    };\r\n\r\n    template <class T>\r\n    concept has_empty_traits = !requires { typename iterator_traits<T>::iterator_concept; } //\r\n                            && !requires { typename iterator_traits<T>::iterator_category; } //\r\n                            && !requires { typename iterator_traits<T>::value_type; } //\r\n                            && !requires { typename iterator_traits<T>::difference_type; } //\r\n                            && !requires { typename iterator_traits<T>::pointer; } //\r\n                            && !requires { typename iterator_traits<T>::reference; };\r\n\r\n    // Verify that iterator_traits pulls from nested member typedefs when the four key names are defined\r\n    using four_members =\r\n        derives_from<with_iter_cat<int>, with_difference<double>, with_value<char>, with_reference<long>>;\r\n    using IT4 = iterator_traits<four_members>;\r\n    static_assert(!has_member_iter_concept<IT4>);\r\n    static_assert(same_as<typename IT4::iterator_category, int>);\r\n    static_assert(same_as<typename IT4::value_type, char>);\r\n    static_assert(same_as<iter_value_t<four_members>, char>);\r\n    static_assert(same_as<typename IT4::difference_type, double>);\r\n    static_assert(same_as<iter_difference_t<four_members>, double>);\r\n    static_assert(same_as<typename IT4::pointer, void>);\r\n    static_assert(same_as<typename IT4::reference, long>);\r\n\r\n    // Verify that iterator_traits pulls from nested member typedefs when the four key names and pointer are defined\r\n    using five_members = derives_from<with_iter_cat<int>, with_difference<double>, with_value<char>,\r\n        with_reference<long>, with_pointer<bool>>;\r\n    using IT5          = iterator_traits<five_members>;\r\n    static_assert(!has_member_iter_concept<IT5>);\r\n    static_assert(same_as<typename IT5::iterator_category, int>);\r\n    static_assert(same_as<typename IT5::value_type, char>);\r\n    static_assert(same_as<iter_value_t<five_members>, char>);\r\n    static_assert(same_as<typename IT5::difference_type, double>);\r\n    static_assert(same_as<iter_difference_t<five_members>, double>);\r\n    static_assert(same_as<typename IT5::pointer, bool>);\r\n    static_assert(same_as<typename IT5::reference, long>);\r\n\r\n    // A type missing one of the four members has no iterator_traits (when it implements none of the operations needed\r\n    // to satisfy the exposition-only Cpp17 concepts)\r\n    static_assert(has_empty_traits<derives_from<with_difference<double>, with_value<char>, with_reference<long>>>);\r\n    static_assert(has_empty_traits<derives_from<with_iter_cat<int>, with_value<char>, with_reference<long>>>);\r\n    static_assert(has_empty_traits<derives_from<with_iter_cat<int>, with_difference<double>, with_reference<long>>>);\r\n    static_assert(has_empty_traits<derives_from<with_iter_cat<int>, with_difference<double>, with_value<char>>>);\r\n\r\n    // Validate the member typedefs of iterator_traits<T> against Concept, Category, etc.\r\n    template <class T, class Concept, class Category, class Value, class Difference, class Pointer, class Reference>\r\n    constexpr bool check() {\r\n        if constexpr (same_as<Concept, no_such_type>) {\r\n            static_assert(!has_member_iter_concept<iterator_traits<T>>);\r\n        } else {\r\n            static_assert(same_as<typename iterator_traits<T>::iterator_concept, Concept>);\r\n        }\r\n        static_assert(same_as<typename iterator_traits<T>::iterator_category, Category>);\r\n        static_assert(same_as<typename iterator_traits<T>::value_type, Value>);\r\n        if constexpr (!same_as<Value, void>) {\r\n            static_assert(same_as<iter_value_t<T>, Value>);\r\n            static_assert(same_as<typename indirectly_readable_traits<T>::value_type, Value>);\r\n        }\r\n        static_assert(same_as<typename iterator_traits<T>::difference_type, Difference>);\r\n        if constexpr (!same_as<Difference, void>) {\r\n            static_assert(same_as<iter_difference_t<T>, Difference>);\r\n            static_assert(same_as<typename incrementable_traits<T>::difference_type, Difference>);\r\n        }\r\n        static_assert(same_as<typename iterator_traits<T>::pointer, Pointer>);\r\n        static_assert(same_as<typename iterator_traits<T>::reference, Reference>);\r\n        return true;\r\n    }\r\n\r\n    // N4928 [iterator.traits]/3.2: \"Otherwise, if I satisfies the exposition-only concept cpp17-input-iterator...\"\r\n\r\n    // N4928 [iterator.traits]:\r\n    // * 3.2.1: \"... Otherwise, pointer names void.\"\r\n    // * 3.2.2: \"... Otherwise, reference names iter_reference_t<I>.\"\r\n    // * 3.2.3.4 \"... Otherwise, iterator_category names... input_iterator_tag.\"\r\n    static_assert(check<simple_input_iter, no_such_type, input_iterator_tag, double, long, void, double>());\r\n\r\n    // N4928 [iterator.traits]:\r\n    // * 3.2.1: \"... Otherwise, pointer names void.\"\r\n    // * 3.2.2: \"... Otherwise, reference names iter_reference_t<I>.\"\r\n    // * 3.2.3.3 \"... Otherwise, iterator_category names... forward_iterator_tag if I satisfies cpp17-forward-iterator.\"\r\n    static_assert(\r\n        check<simple_forward_iter<>, no_such_type, forward_iterator_tag, double, long, void, double const&>());\r\n    static_assert(check<xvalue_forward_iter, no_such_type, forward_iterator_tag, double, long, void, double&&>());\r\n    // N4928 [iterator.traits]/3.2.1: \"... Otherwise, if decltype(declval<I&>().operator->()) is well-formed, then\r\n    // pointer names that type.\"\r\n    static_assert(check<simple_forward_iter<arrow_base<double const*>>, no_such_type, forward_iterator_tag, double,\r\n        long, double const*, double const&>());\r\n    // N4928 [iterator.traits]/3.2.3: \"If the qualified-id I::iterator_category is valid and denotes a type,\r\n    // iterator_category names that type.\"\r\n    static_assert(check<simple_forward_iter<with_iter_cat<output_iterator_tag>>, no_such_type, output_iterator_tag,\r\n        double, long, void, double const&>());\r\n    static_assert(check<simple_forward_iter<with_iter_cat<input_iterator_tag>>, no_such_type, input_iterator_tag,\r\n        double, long, void, double const&>());\r\n\r\n    // N4928 [iterator.traits]:\r\n    // * 3.2.1: \"... Otherwise, pointer names void.\"\r\n    // * 3.2.2: \"If the qualified-id I::reference is valid and denotes a type, reference names that type.\"\r\n    // * 3.2.3.2 \"... Otherwise, iterator_category names... bidirectional_iterator_tag if I satisfies\r\n    // cpp17-bidirectional-iterator.\"\r\n    static_assert(\r\n        check<simple_bidi_iter<>, no_such_type, bidirectional_iterator_tag, double, long, void, double const&>());\r\n    static_assert(check<xvalue_bidi_iter, no_such_type, bidirectional_iterator_tag, double, long, void, double&&>());\r\n    // N4928 [iterator.traits]/3.2.1: \"... Otherwise, if decltype(declval<I&>().operator->()) is well-formed, then\r\n    // pointer names that type.\"\r\n    static_assert(check<simple_bidi_iter<arrow_base<double const*>>, no_such_type, bidirectional_iterator_tag, double,\r\n        long, double const*, double const&>());\r\n    // N4928 [iterator.traits]/3.2.3: \"If the qualified-id I::iterator_category is valid and denotes a type,\r\n    // iterator_category names that type.\"\r\n    static_assert(check<simple_bidi_iter<with_iter_cat<output_iterator_tag>>, no_such_type, output_iterator_tag, double,\r\n        long, void, double const&>());\r\n    static_assert(check<simple_bidi_iter<with_iter_cat<input_iterator_tag>>, no_such_type, input_iterator_tag, double,\r\n        long, void, double const&>());\r\n    static_assert(check<simple_bidi_iter<with_iter_cat<forward_iterator_tag>>, no_such_type, forward_iterator_tag,\r\n        double, long, void, double const&>());\r\n\r\n    // N4928 [iterator.traits]:\r\n    // * 3.2.1: \"... Otherwise, pointer names void.\"\r\n    // * 3.2.2: \"... Otherwise, reference names iter_reference_t<I>.\"\r\n    // * 3.2.3.1 \"... Otherwise, iterator_category names... random_access_iterator_tag if I satisfies\r\n    // cpp17-random-access-iterator.\"\r\n    static_assert(\r\n        check<simple_random_iter<>, no_such_type, random_access_iterator_tag, double, long, void, double const&>());\r\n    static_assert(check<xvalue_random_iter, no_such_type, random_access_iterator_tag, double, long, void, double&&>());\r\n    static_assert(\r\n        check<simple_contiguous_iter<>, no_such_type, random_access_iterator_tag, double, long, void, double const&>());\r\n    // N4928 [iterator.traits]/3.2.1: \"... Otherwise, if decltype(declval<I&>().operator->()) is well-formed, then\r\n    // pointer names that type.\"\r\n    static_assert(check<simple_random_iter<arrow_base<double const*>>, no_such_type, random_access_iterator_tag, double,\r\n        long, double const*, double const&>());\r\n    static_assert(check<simple_contiguous_iter<arrow_base<double const*>>, no_such_type, random_access_iterator_tag,\r\n        double, long, double const*, double const&>());\r\n    // N4928 [iterator.traits]/3.2.3: \"If the qualified-id I::iterator_category is valid and denotes a type,\r\n    // iterator_category names that type.\"\r\n    static_assert(check<simple_random_iter<with_iter_cat<output_iterator_tag>>, no_such_type, output_iterator_tag,\r\n        double, long, void, double const&>());\r\n    static_assert(check<simple_contiguous_iter<with_iter_cat<output_iterator_tag>>, no_such_type, output_iterator_tag,\r\n        double, long, void, double const&>());\r\n    static_assert(check<simple_random_iter<with_iter_cat<forward_iterator_tag>>, no_such_type, forward_iterator_tag,\r\n        double, long, void, double const&>());\r\n    static_assert(check<simple_contiguous_iter<with_iter_cat<forward_iterator_tag>>, no_such_type, forward_iterator_tag,\r\n        double, long, void, double const&>());\r\n    static_assert(check<simple_random_iter<with_iter_cat<bidirectional_iterator_tag>>, no_such_type,\r\n        bidirectional_iterator_tag, double, long, void, double const&>());\r\n    static_assert(check<simple_contiguous_iter<with_iter_cat<bidirectional_iterator_tag>>, no_such_type,\r\n        bidirectional_iterator_tag, double, long, void, double const&>());\r\n    static_assert(check<simple_random_iter<with_iter_cat<contiguous_iterator_tag>>, no_such_type,\r\n        contiguous_iterator_tag, double, long, void, double const&>());\r\n    static_assert(check<simple_contiguous_iter<with_iter_cat<contiguous_iterator_tag>>, no_such_type,\r\n        contiguous_iterator_tag, double, long, void, double const&>());\r\n\r\n    // N4928 [iterator.traits]/3.3: \"Otherwise, if I satisfies the exposition-only concept cpp17-iterator...\"\r\n    template <class Base = empty_type>\r\n    struct simple_output_iter : Base {\r\n        simple_output_iter const& operator*() const;\r\n        simple_output_iter& operator++();\r\n        simple_output_iter& operator++(int);\r\n    };\r\n    // \"... If the qualified-id incrementable_traits<I>::difference_type is valid and denotes a type, then\r\n    // difference_type names that type; ...\"\r\n    static_assert(\r\n        check<simple_output_iter<with_difference<long>>, no_such_type, output_iterator_tag, void, long, void, void>());\r\n    // \"... otherwise, it names void.\"\r\n    static_assert(check<simple_output_iter<>, no_such_type, output_iterator_tag, void, void, void, void>());\r\n\r\n    // N4928 [iterator.traits]/3.4: \"Otherwise, iterator_traits<I> has no members by any of the above names.\"\r\n    static_assert(has_empty_traits<int>);\r\n    static_assert(has_empty_traits<void>);\r\n    static_assert(has_empty_traits<int(int)>);\r\n    static_assert(has_empty_traits<int(int) const>);\r\n\r\n    // N4928 [iterator.traits]/5: \"iterator_traits is specialized for pointers...\"\r\n    static_assert(check<int*, contiguous_iterator_tag, random_access_iterator_tag, int, std::ptrdiff_t, int*, int&>());\r\n    static_assert(check<int const*, contiguous_iterator_tag, random_access_iterator_tag, int, std::ptrdiff_t,\r\n        int const*, int const&>());\r\n    static_assert(check<int (*)[4], contiguous_iterator_tag, random_access_iterator_tag, int[4], std::ptrdiff_t,\r\n        int (*)[4], int (&)[4]>());\r\n    // pointers to non-object types are not iterators\r\n    static_assert(has_empty_traits<int (*)(int)>);\r\n    static_assert(has_empty_traits<void*>);\r\n\r\n    static_assert(check<iter_concept_example, no_such_type, input_iterator_tag, int, int, void, int>());\r\n} // namespace iterator_traits_test\r\n\r\nnamespace iterator_cust_move_test {\r\n    using std::iter_rvalue_reference_t, std::same_as;\r\n\r\n    template <class T>\r\n    concept can_iter_move = requires(T&& t) { ranges::iter_move(std::forward<T>(t)); };\r\n    template <class T>\r\n    concept can_iter_rvalue_ref = requires { typename iter_rvalue_reference_t<T>; };\r\n\r\n    // N4928 [iterator.cust.move]/1.1 \"iter_move(E), if [...] iter_move(E) is a well-formed expression when [...]\r\n    // performing argument-dependent lookup only.\"\r\n    struct friend_hook {\r\n        friend constexpr double iter_move(friend_hook) noexcept {\r\n            return 3.14;\r\n        }\r\n    };\r\n    static_assert(same_as<decltype(ranges::iter_move(friend_hook{})), double>);\r\n    static_assert(!can_iter_rvalue_ref<friend_hook>);\r\n    static_assert(ranges::iter_move(friend_hook{}) == 3.14);\r\n    static_assert(noexcept(ranges::iter_move(friend_hook{})));\r\n\r\n    struct non_member_hook {};\r\n    constexpr bool iter_move(non_member_hook) noexcept {\r\n        return false;\r\n    }\r\n    static_assert(same_as<decltype(ranges::iter_move(non_member_hook{})), bool>);\r\n    static_assert(!can_iter_rvalue_ref<non_member_hook>);\r\n    static_assert(ranges::iter_move(non_member_hook{}) == false);\r\n    static_assert(noexcept(ranges::iter_move(non_member_hook{})));\r\n\r\n    enum class E1 { x };\r\n    constexpr E1 iter_move(E1) noexcept {\r\n        return E1::x;\r\n    }\r\n    static_assert(same_as<decltype(ranges::iter_move(E1::x)), E1>);\r\n    static_assert(!can_iter_rvalue_ref<E1>);\r\n    static_assert(static_cast<int>(ranges::iter_move(E1::x)) == 0);\r\n    static_assert(noexcept(ranges::iter_move(E1::x)));\r\n\r\n    // N4928 [iterator.cust.move]/1.2.1 \"if *E is an lvalue, std::move(*E)\"\r\n    static constexpr int some_ints[] = {0, 1, 2, 3};\r\n    static_assert(same_as<iter_rvalue_reference_t<int*>, int&&>);\r\n    static_assert(ranges::iter_move(&some_ints[1]) == 1);\r\n    static_assert(noexcept(ranges::iter_move(&some_ints[1])));\r\n\r\n    static_assert(same_as<iter_rvalue_reference_t<int const*>, int const&&>);\r\n    static_assert(ranges::iter_move(static_cast<int const*>(&some_ints[2])) == 2);\r\n    static_assert(noexcept(ranges::iter_move(static_cast<int const*>(&some_ints[2]))));\r\n\r\n    static_assert(same_as<iter_rvalue_reference_t<int[]>, int&&>);\r\n    static_assert(same_as<iter_rvalue_reference_t<int(int)>, int (&)(int)>);\r\n\r\n    static_assert(same_as<iter_rvalue_reference_t<int[4]>, int&&>);\r\n    static_assert(ranges::iter_move(some_ints) == 0);\r\n    static_assert(noexcept(ranges::iter_move(some_ints)));\r\n\r\n    constexpr int f(int i) noexcept {\r\n        return i + 1;\r\n    }\r\n    static_assert(same_as<iter_rvalue_reference_t<int (*)(int)>, int (&)(int)>);\r\n    static_assert(ranges::iter_move(&f)(42) == 43);\r\n    static_assert(noexcept(ranges::iter_move(&f)));\r\n\r\n    struct ref_is_lvalue {\r\n        constexpr int const& operator*() const {\r\n            return some_ints[1];\r\n        }\r\n    };\r\n    static_assert(same_as<iter_rvalue_reference_t<ref_is_lvalue>, int const&&>);\r\n    static_assert(ranges::iter_move(ref_is_lvalue{}) == 1);\r\n\r\n    struct with_bogus_typedefs : ref_is_lvalue {\r\n        using value_type = void;\r\n        using reference  = void;\r\n    };\r\n    static_assert(same_as<iter_rvalue_reference_t<with_bogus_typedefs>, int const&&>); // oblivious to nested types\r\n    static_assert(ranges::iter_move(with_bogus_typedefs{}) == 1);\r\n\r\n    // N4928 [iterator.cust.move]/1.2.2 \"otherwise, *E.\"\r\n    struct ref_is_prvalue {\r\n        int operator*() const {\r\n            return 42;\r\n        }\r\n    };\r\n    static_assert(same_as<iter_rvalue_reference_t<ref_is_prvalue>, int>);\r\n\r\n    struct ref_is_xvalue {\r\n        int&& operator*() const;\r\n    };\r\n    static_assert(same_as<iter_rvalue_reference_t<ref_is_xvalue>, int&&>);\r\n    static_assert(!noexcept(ranges::iter_move(ref_is_xvalue{})));\r\n\r\n    // N4928 [iterator.cust.move]/1.3 \"Otherwise, ranges::iter_move(E) is ill-formed.\"\r\n    static_assert(!can_iter_move<int>);\r\n    static_assert(!can_iter_move<void>);\r\n    static_assert(!can_iter_move<int(int) const>);\r\n\r\n    enum class E2 { x };\r\n    static_assert(!can_iter_move<E2>);\r\n    static_assert(!can_iter_rvalue_ref<E2>);\r\n} // namespace iterator_cust_move_test\r\n\r\nnamespace iterator_cust_swap_test {\r\n    using std::indirectly_movable_storable, std::iter_reference_t, std::indirectly_readable, std::remove_reference_t,\r\n        std::same_as, std::swappable_with;\r\n\r\n    template <class T, class U>\r\n    concept can_iter_swap = requires(T&& t, U&& u) { ranges::iter_swap(std::forward<T>(t), std::forward<U>(u)); };\r\n\r\n    // N4928 [iterator.cust.swap]/4.1: \"(void)iter_swap(E1, E2), if [...] iter_swap(E1, E2) is a\r\n    // well-formed expression with overload resolution performed in a context [...]\"\r\n    namespace adl_barrier {\r\n        template <class T, class U>\r\n        void iter_swap(T, U) = delete;\r\n\r\n        template <class T, class U = T>\r\n        concept bullet1 = requires(T&& t, U&& u) { iter_swap(std::forward<T>(t), std::forward<U>(u)); };\r\n    } // namespace adl_barrier\r\n    using adl_barrier::bullet1;\r\n\r\n    struct friend_hook {\r\n        friend constexpr int iter_swap(friend_hook, friend_hook) noexcept {\r\n            return 42;\r\n        }\r\n    };\r\n    static_assert(bullet1<friend_hook>);\r\n    static_assert(same_as<decltype(ranges::iter_swap(friend_hook{}, friend_hook{})), void>);\r\n    static_assert((ranges::iter_swap(friend_hook{}, friend_hook{}), true));\r\n    static_assert(noexcept(ranges::iter_swap(friend_hook{}, friend_hook{})));\r\n\r\n    struct non_member_hook {};\r\n    constexpr char iter_swap(non_member_hook, non_member_hook) noexcept {\r\n        return 'x';\r\n    }\r\n    static_assert(bullet1<non_member_hook>);\r\n    static_assert(same_as<decltype(ranges::iter_swap(non_member_hook{}, non_member_hook{})), void>);\r\n    static_assert((ranges::iter_swap(non_member_hook{}, non_member_hook{}), true));\r\n    static_assert(noexcept(ranges::iter_swap(non_member_hook{}, non_member_hook{})));\r\n\r\n    enum class E1 { x };\r\n    constexpr void iter_swap(E1, E1) {}\r\n    static_assert(bullet1<E1>);\r\n    static_assert((ranges::iter_swap(E1::x, E1::x), true));\r\n\r\n    // N4928 [iterator.cust.swap]/4.2: \"Otherwise, if the types of E1 and E2 each model indirectly_readable,\r\n    // and if the reference types of E1 and E2 model swappable_with, then ranges::swap(*E1, *E2).\"\r\n    template <class T, class U = T>\r\n    concept bullet2 =\r\n        !bullet1<T, U> && indirectly_readable<remove_reference_t<T>> && indirectly_readable<remove_reference_t<U>>\r\n        && swappable_with<iter_reference_t<T>, iter_reference_t<U>>;\r\n\r\n    constexpr bool test() {\r\n        // This test notably executes both at runtime and at compiletime.\r\n        static_assert(bullet2<int*>);\r\n\r\n        int i0 = 42, i1 = 13;\r\n        static_assert(same_as<decltype(ranges::iter_swap(&i0, &i1)), void>);\r\n        ranges::iter_swap(&i0, &i1);\r\n        assert(i0 == 13);\r\n        assert(i1 == 42);\r\n        static_assert(noexcept(ranges::iter_swap(&i0, &i1)));\r\n        return true;\r\n    }\r\n    static_assert(test());\r\n\r\n    template <int>\r\n    struct swap_proxy_ref {\r\n        constexpr operator int() const noexcept {\r\n            return 42;\r\n        }\r\n        template <int X>\r\n        friend constexpr void swap(swap_proxy_ref, swap_proxy_ref<X>) noexcept {}\r\n    };\r\n    template <int X>\r\n    struct swap_proxy_readable {\r\n        using value_type = int;\r\n\r\n        constexpr swap_proxy_ref<X> operator*() const noexcept {\r\n            return {};\r\n        }\r\n    };\r\n} // namespace iterator_cust_swap_test\r\n\r\ntemplate <int X, int Y>\r\nstruct std::common_type<iterator_cust_swap_test::swap_proxy_ref<X>, iterator_cust_swap_test::swap_proxy_ref<Y>> {\r\n    using type = int;\r\n};\r\n\r\nnamespace iterator_cust_swap_test {\r\n    static_assert(bullet2<swap_proxy_readable<0>, swap_proxy_readable<1>>);\r\n    static_assert(same_as<decltype(ranges::iter_swap(swap_proxy_readable<0>{}, swap_proxy_readable<1>{})), void>);\r\n    static_assert((ranges::iter_swap(swap_proxy_readable<0>{}, swap_proxy_readable<1>{}), true));\r\n    static_assert(noexcept(ranges::iter_swap(swap_proxy_readable<0>{}, swap_proxy_readable<1>{})));\r\n\r\n    // N4928 [iterator.cust.swap]/4.3: \"Otherwise, if the types T1 and T2 of E1 and E2 model\r\n    // indirectly_movable_storable<T1, T2> and indirectly_movable_storable<T2, T1>...\"\r\n    template <class T, class U = T>\r\n    concept bullet3 =\r\n        !bullet1<T, U> && !bullet2<T, U> && indirectly_movable_storable<T, U> && indirectly_movable_storable<U, T>;\r\n\r\n    static_assert(bullet3<int*, long*> && can_iter_swap<int*, long*>);\r\n\r\n    template <int>\r\n    struct unswap_proxy_ref {\r\n        operator int() const noexcept;\r\n        unswap_proxy_ref const& operator=(int&&) const noexcept;\r\n    };\r\n    template <int X>\r\n    struct unswap_proxy_readable {\r\n        using value_type = int;\r\n\r\n        unswap_proxy_ref<X> operator*() const noexcept;\r\n        friend int&& iter_move(unswap_proxy_readable) noexcept;\r\n    };\r\n    static_assert(bullet3<unswap_proxy_readable<0>, unswap_proxy_readable<1>>);\r\n    static_assert(same_as<decltype(ranges::iter_swap(unswap_proxy_readable<0>{}, unswap_proxy_readable<1>{})), void>);\r\n    static_assert(noexcept(ranges::iter_swap(unswap_proxy_readable<0>{}, unswap_proxy_readable<1>{})));\r\n\r\n    // N4928 [iterator.cust.swap]/4.4: \"Otherwise, ranges::iter_swap(E1, E2) is ill-formed.\"\r\n    template <class T, class U>\r\n    concept bullet4 = !can_iter_swap<T, U>;\r\n\r\n    static_assert(bullet4<void, void>);\r\n    static_assert(bullet4<int, int>);\r\n    static_assert(bullet4<int, void>);\r\n    static_assert(bullet4<void, int>);\r\n    static_assert(bullet4<void*, void*>);\r\n    static_assert(bullet4<int*, void*>);\r\n    static_assert(bullet4<int(), int()>);\r\n    static_assert(bullet4<int() const, int() volatile>);\r\n    static_assert(bullet4<int (*)(), int (*)()>);\r\n    static_assert(bullet4<int (&)(), int (&)()>);\r\n\r\n    // verify that a hook found by ADL must be more specialized than the poison pill to be used\r\n    namespace poison_pill {\r\n        struct S {\r\n            using value_type = int;\r\n            int& i;\r\n\r\n            constexpr int& operator*() const noexcept {\r\n                return i;\r\n            }\r\n        };\r\n        template <class T, class U>\r\n        void iter_swap(T&, U&) { // this function is unordered with the poison pill\r\n            static_assert(false);\r\n        }\r\n\r\n        static_assert(bullet2<S&, S&> && can_iter_swap<S&, S&>);\r\n\r\n        constexpr bool test() {\r\n            {\r\n                int i0 = 42;\r\n                int i1 = 13;\r\n                S s0{i0};\r\n                S s1{i1};\r\n                ranges::iter_swap(s0, s1);\r\n                assert(i0 == 13);\r\n                assert(i1 == 42);\r\n            }\r\n\r\n            {\r\n                // Validate iter_swap bullet 3 to defend against regression of GH-1067 \"ranges::iter_swap is broken\"\r\n                int i  = 42;\r\n                long l = 13;\r\n                ranges::iter_swap(&i, &l);\r\n                assert(i == 13);\r\n                assert(l == 42);\r\n            }\r\n\r\n            return true;\r\n        }\r\n        static_assert(test());\r\n    } // namespace poison_pill\r\n} // namespace iterator_cust_swap_test\r\n\r\nnamespace iterator_concept_readable_test {\r\n    using std::indirectly_readable;\r\n\r\n    static_assert(!indirectly_readable<void>);\r\n    static_assert(!indirectly_readable<void*>);\r\n    static_assert(indirectly_readable<int*>);\r\n    static_assert(indirectly_readable<int const*>);\r\n    static_assert(!indirectly_readable<int const empty_type::*>);\r\n\r\n    static_assert(!indirectly_readable<dereferences_to<void>>);\r\n    static_assert(indirectly_readable<dereferences_to<int>>);\r\n    static_assert(indirectly_readable<dereferences_to<int&>>);\r\n    static_assert(indirectly_readable<dereferences_to<int const&>>);\r\n    static_assert(indirectly_readable<dereferences_to<move_only>>);\r\n    static_assert(indirectly_readable<dereferences_to<int (&)[42]>>);\r\n    static_assert(!indirectly_readable<dereferences_to<int (&)()>>);\r\n    static_assert(!indirectly_readable<int (empty_type::*)()>);\r\n\r\n    struct no_value_type {\r\n        int operator*() const;\r\n    };\r\n    static_assert(!indirectly_readable<no_value_type>);\r\n\r\n    struct not_dereferenceable {\r\n        using value_type = int;\r\n    };\r\n    static_assert(!indirectly_readable<no_value_type>);\r\n\r\n    struct simple_abstract {\r\n        virtual void f() = 0;\r\n    };\r\n    static_assert(indirectly_readable<dereferences_to<simple_abstract&>>);\r\n} // namespace iterator_concept_readable_test\r\n\r\nnamespace iterator_concept_writable_test {\r\n    using std::indirectly_writable;\r\n\r\n    template <class I, class T>\r\n    constexpr bool test_writable() {\r\n#pragma warning(push)\r\n#pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored\r\n        constexpr bool result = indirectly_writable<I, T>;\r\n        static_assert(indirectly_writable<I, T const> == result);\r\n        static_assert(indirectly_writable<I, T volatile> == result);\r\n        static_assert(indirectly_writable<I, T const volatile> == result);\r\n\r\n        if constexpr (can_reference<T>) {\r\n            static_assert(indirectly_writable<I, T&> == result);\r\n            static_assert(indirectly_writable<I, T const&> == result);\r\n            static_assert(indirectly_writable<I, T volatile&> == result);\r\n            static_assert(indirectly_writable<I, T const volatile&> == result);\r\n        }\r\n#pragma warning(pop)\r\n\r\n        return result;\r\n    }\r\n\r\n    static_assert(!indirectly_writable<void, int>);\r\n    static_assert(!indirectly_writable<void*, void>);\r\n    static_assert(!test_writable<int*, void>());\r\n\r\n    static_assert(test_writable<int*, int>());\r\n    static_assert(test_writable<int*, short>());\r\n    static_assert(test_writable<int*, long>());\r\n    static_assert(test_writable<int*, double>());\r\n\r\n    static_assert(!test_writable<int, int>());\r\n\r\n    static_assert(test_writable<dereferences_to<int&>, int>());\r\n    static_assert(test_writable<dereferences_to<int&>, short>());\r\n    static_assert(test_writable<dereferences_to<int&>, long>());\r\n    static_assert(test_writable<dereferences_to<int&>, double>());\r\n\r\n    static_assert(!test_writable<int const*, int>());\r\n    static_assert(!test_writable<int const*, short>());\r\n    static_assert(!test_writable<int const*, long>());\r\n    static_assert(!test_writable<int const*, double>());\r\n\r\n    static_assert(!test_writable<dereferences_to<int const&>, int>());\r\n    static_assert(!test_writable<dereferences_to<int const&>, short>());\r\n    static_assert(!test_writable<dereferences_to<int const&>, long>());\r\n    static_assert(!test_writable<dereferences_to<int const&>, double>());\r\n\r\n    static_assert(!test_writable<int*, int()>());\r\n    static_assert(!test_writable<int (*)(), int()>());\r\n    static_assert(!test_writable<int (*)(), int (*)()>());\r\n    static_assert(test_writable<int (**)(), int (*)()>());\r\n\r\n    static_assert(indirectly_writable<move_only*, move_only>);\r\n    static_assert(!test_writable<move_only*, move_only&>());\r\n\r\n    // Verify the \"indirectly_writable through a constified reference\" requirements\r\n    struct std_string {}; // slightly simplified\r\n    static_assert(!test_writable<dereferences_to<std_string>, std_string>());\r\n\r\n    template <bool HasConstAssign>\r\n    struct proxy_writable {\r\n        using value_type = int;\r\n\r\n        struct reference {\r\n            operator int() const;\r\n            reference& operator=(int);\r\n\r\n            reference const& operator=(int) const\r\n                requires HasConstAssign;\r\n        };\r\n\r\n        reference operator*() const;\r\n    };\r\n    static_assert(!test_writable<proxy_writable<false>, int>());\r\n    static_assert(!test_writable<proxy_writable<false>, short>());\r\n    static_assert(test_writable<proxy_writable<true>, int>());\r\n    static_assert(test_writable<proxy_writable<true>, short>());\r\n} // namespace iterator_concept_writable_test\r\n\r\nnamespace iterator_concept_winc_test {\r\n    using std::weakly_incrementable;\r\n\r\n    static_assert(!weakly_incrementable<void>);\r\n    static_assert(weakly_incrementable<int>);\r\n    static_assert(weakly_incrementable<unsigned int>);\r\n    static_assert(!weakly_incrementable<void*>);\r\n    static_assert(weakly_incrementable<int*>);\r\n    static_assert(weakly_incrementable<int const*>);\r\n\r\n    template <std::size_t... Is>\r\n    constexpr bool test(std::index_sequence<Is...>) {\r\n        static_assert(\r\n            std::same_as<std::index_sequence<Is...>, std::make_index_sequence<weakly_incrementable_archetype_max>>);\r\n#ifndef _M_CEE // TRANSITION, VSO-1665674\r\n        static_assert((!weakly_incrementable<weakly_incrementable_archetype<Is>> && ...));\r\n#endif // ^^^ no workaround ^^^\r\n        static_assert(weakly_incrementable<weakly_incrementable_archetype<weakly_incrementable_archetype_max>>);\r\n        return true;\r\n    }\r\n    static_assert(test(std::make_index_sequence<weakly_incrementable_archetype_max>{}));\r\n} // namespace iterator_concept_winc_test\r\n\r\nnamespace iterator_concept_inc_test {\r\n    using std::incrementable;\r\n\r\n    static_assert(!incrementable<void>);\r\n    static_assert(incrementable<int>);\r\n    static_assert(incrementable<unsigned int>);\r\n    static_assert(!incrementable<void*>);\r\n    static_assert(incrementable<int*>);\r\n    static_assert(incrementable<int const*>);\r\n\r\n    template <std::size_t... Is>\r\n    constexpr bool test(std::index_sequence<Is...>) {\r\n        static_assert(std::same_as<std::index_sequence<Is...>, std::make_index_sequence<incrementable_archetype_max>>);\r\n        static_assert((!incrementable<incrementable_archetype<Is>> && ...));\r\n        static_assert(incrementable<incrementable_archetype<incrementable_archetype_max>>);\r\n        return true;\r\n    }\r\n    static_assert(test(std::make_index_sequence<incrementable_archetype_max>{}));\r\n} // namespace iterator_concept_inc_test\r\n\r\nnamespace iterator_concept_iterator_test {\r\n    using std::input_or_output_iterator;\r\n\r\n    static_assert(!input_or_output_iterator<void>);\r\n    static_assert(!input_or_output_iterator<int>);\r\n    static_assert(!input_or_output_iterator<void*>);\r\n    static_assert(input_or_output_iterator<int*>);\r\n    static_assert(input_or_output_iterator<int const*>);\r\n\r\n    template <std::size_t... Is>\r\n    constexpr bool test(std::index_sequence<Is...>) {\r\n        static_assert(std::same_as<std::index_sequence<Is...>, std::make_index_sequence<iterator_archetype_max>>);\r\n#ifndef _M_CEE // TRANSITION, VSO-1665674\r\n        static_assert((!input_or_output_iterator<iterator_archetype<Is>> && ...));\r\n#endif // ^^^ no workaround ^^^\r\n        static_assert(input_or_output_iterator<iterator_archetype<iterator_archetype_max>>);\r\n        return true;\r\n    }\r\n    static_assert(test(std::make_index_sequence<iterator_archetype_max>{}));\r\n} // namespace iterator_concept_iterator_test\r\n\r\nnamespace iterator_concept_sentinel_test {\r\n    using std::input_or_output_iterator, std::sentinel_for;\r\n\r\n    static_assert(sentinel_for<int*, int*>);\r\n    static_assert(sentinel_for<int const*, int const*>);\r\n    static_assert(sentinel_for<int const*, int*>);\r\n    static_assert(sentinel_for<int*, int const*>);\r\n    static_assert(!sentinel_for<void*, void*>);\r\n\r\n    struct A {\r\n        using difference_type = int;\r\n\r\n        A& operator++();\r\n        A& operator++(int);\r\n        A& operator*() const;\r\n\r\n        bool operator==(A const&) const;\r\n    };\r\n    static_assert(input_or_output_iterator<A>);\r\n    static_assert(sentinel_for<A, A>);\r\n\r\n    template <std::size_t I, std::size_t J>\r\n    constexpr bool test_one_pair() {\r\n#ifndef _M_CEE // TRANSITION, VSO-1665674\r\n        constexpr bool expected = I >= sentinel_archetype_max && J >= iterator_archetype_max;\r\n        static_assert(sentinel_for<sentinel_archetype<I>, iterator_archetype<J>> == expected);\r\n#endif // ^^^ no workaround ^^^\r\n        return true;\r\n    }\r\n\r\n    template <std::size_t I, std::size_t... Js>\r\n    constexpr bool unpack_iterator(std::index_sequence<Js...>) {\r\n        return (test_one_pair<I, Js>() && ...);\r\n    }\r\n\r\n    template <std::size_t... Is>\r\n    constexpr bool unpack_sentinel(std::index_sequence<Is...>) {\r\n        return (unpack_iterator<Is>(std::make_index_sequence<iterator_archetype_max + 1>{}) && ...);\r\n    }\r\n    static_assert(unpack_sentinel(std::make_index_sequence<sentinel_archetype_max + 1>{}));\r\n} // namespace iterator_concept_sentinel_test\r\n\r\nnamespace iterator_concept_sizedsentinel_test {\r\n    using std::sized_sentinel_for;\r\n\r\n    static_assert(sized_sentinel_for<int*, int*>);\r\n    static_assert(sized_sentinel_for<int const*, int const*>);\r\n    static_assert(sized_sentinel_for<int const*, int*>);\r\n    static_assert(sized_sentinel_for<int*, int const*>);\r\n    static_assert(!sized_sentinel_for<void*, void*>);\r\n\r\n    template <std::size_t I, std::size_t J>\r\n    constexpr bool test_one_pair() {\r\n#ifndef _M_CEE // TRANSITION, VSO-1665674\r\n        constexpr bool expected = I >= sized_sentinel_archetype_max && J >= iterator_archetype_max;\r\n        static_assert(sized_sentinel_for<sized_sentinel_archetype<I>, iterator_archetype<J>> == expected);\r\n#endif // ^^^ no workaround ^^^\r\n        return true;\r\n    }\r\n\r\n    template <std::size_t I, std::size_t... Js>\r\n    constexpr bool unpack_iterator(std::index_sequence<Js...>) {\r\n        return (test_one_pair<I, Js>() && ...);\r\n    }\r\n\r\n    template <std::size_t... Is>\r\n    constexpr bool unpack_sentinel(std::index_sequence<Is...>) {\r\n        return (unpack_iterator<Is>(std::make_index_sequence<iterator_archetype_max + 1>{}) && ...);\r\n    }\r\n    static_assert(unpack_sentinel(std::make_index_sequence<sized_sentinel_archetype_max + 1>{}));\r\n} // namespace iterator_concept_sizedsentinel_test\r\n\r\nnamespace iterator_concept_input_test {\r\n    using std::input_iterator;\r\n\r\n    static_assert(input_iterator<int*>);\r\n    static_assert(input_iterator<int const*>);\r\n    static_assert(input_iterator<iter_concept_example>);\r\n\r\n    template <std::size_t... Is>\r\n    constexpr bool test(std::index_sequence<Is...>) {\r\n        static_assert(std::same_as<std::index_sequence<Is...>, std::make_index_sequence<input_iterator_archetype_max>>);\r\n#ifndef _M_CEE // TRANSITION, VSO-1665674\r\n        static_assert((!input_iterator<input_iterator_archetype<Is>> && ...));\r\n#endif // ^^^ no workaround ^^^\r\n        static_assert(input_iterator<input_iterator_archetype<input_iterator_archetype_max>>);\r\n        return true;\r\n    }\r\n    static_assert(test(std::make_index_sequence<input_iterator_archetype_max>{}));\r\n} // namespace iterator_concept_input_test\r\n\r\nnamespace iterator_concept_output_test {\r\n    using std::output_iterator;\r\n\r\n    static_assert(output_iterator<int*, int>);\r\n    static_assert(output_iterator<int*, int const>);\r\n    static_assert(output_iterator<int*, int&>);\r\n    static_assert(output_iterator<int*, int const&>);\r\n    static_assert(!output_iterator<int const*, int>);\r\n    static_assert(!output_iterator<int const*, int const>);\r\n    static_assert(!output_iterator<int const*, int&>);\r\n    static_assert(!output_iterator<int const*, int const&>);\r\n\r\n    template <std::size_t... Is>\r\n    constexpr bool test(std::index_sequence<Is...>) {\r\n        static_assert(\r\n            std::same_as<std::index_sequence<Is...>, std::make_index_sequence<output_iterator_archetype_max>>);\r\n#ifndef _M_CEE // TRANSITION, VSO-1665674\r\n        static_assert((!output_iterator<output_iterator_archetype<Is>, int> && ...));\r\n        static_assert((!output_iterator<output_iterator_archetype<Is>, int const> && ...));\r\n        static_assert((!output_iterator<output_iterator_archetype<Is>, int&> && ...));\r\n        static_assert((!output_iterator<output_iterator_archetype<Is>, int const&> && ...));\r\n#endif // ^^^ no workaround ^^^\r\n        static_assert(output_iterator<output_iterator_archetype<output_iterator_archetype_max>, int>);\r\n        static_assert(output_iterator<output_iterator_archetype<output_iterator_archetype_max>, int const>);\r\n        static_assert(output_iterator<output_iterator_archetype<output_iterator_archetype_max>, int&>);\r\n        static_assert(output_iterator<output_iterator_archetype<output_iterator_archetype_max>, int const&>);\r\n        return true;\r\n    }\r\n    static_assert(test(std::make_index_sequence<output_iterator_archetype_max>{}));\r\n} // namespace iterator_concept_output_test\r\n\r\nnamespace iterator_concept_forward_test {\r\n    using std::forward_iterator;\r\n\r\n    static_assert(forward_iterator<int*>);\r\n    static_assert(forward_iterator<int const*>);\r\n    static_assert(forward_iterator<iter_concept_example>);\r\n\r\n    template <std::size_t... Is>\r\n    constexpr bool test(std::index_sequence<Is...>) {\r\n        static_assert(\r\n            std::same_as<std::index_sequence<Is...>, std::make_index_sequence<forward_iterator_archetype_max>>);\r\n        static_assert((!forward_iterator<forward_iterator_archetype<Is>> && ...));\r\n        static_assert(forward_iterator<forward_iterator_archetype<forward_iterator_archetype_max>>);\r\n        return true;\r\n    }\r\n    static_assert(test(std::make_index_sequence<forward_iterator_archetype_max>{}));\r\n} // namespace iterator_concept_forward_test\r\n\r\nnamespace iterator_concept_bidir_test {\r\n    using std::bidirectional_iterator;\r\n\r\n    static_assert(bidirectional_iterator<int*>);\r\n    static_assert(bidirectional_iterator<int const*>);\r\n    static_assert(bidirectional_iterator<iter_concept_example>);\r\n\r\n    template <std::size_t... Is>\r\n    constexpr bool test(std::index_sequence<Is...>) {\r\n        static_assert(std::same_as<std::index_sequence<Is...>, std::make_index_sequence<bidi_iterator_archetype_max>>);\r\n        static_assert((!bidirectional_iterator<bidi_iterator_archetype<Is>> && ...));\r\n        static_assert(bidirectional_iterator<bidi_iterator_archetype<bidi_iterator_archetype_max>>);\r\n        return true;\r\n    }\r\n    static_assert(test(std::make_index_sequence<bidi_iterator_archetype_max>{}));\r\n} // namespace iterator_concept_bidir_test\r\n\r\nnamespace iterator_concept_random_access_test {\r\n    using std::random_access_iterator;\r\n\r\n    static_assert(random_access_iterator<int*>);\r\n    static_assert(random_access_iterator<int const*>);\r\n    static_assert(!random_access_iterator<iter_concept_example>);\r\n\r\n    template <std::size_t... Is>\r\n    constexpr bool test(std::index_sequence<Is...>) {\r\n        static_assert(\r\n            std::same_as<std::index_sequence<Is...>, std::make_index_sequence<random_iterator_archetype_max>>);\r\n        static_assert((!random_access_iterator<random_iterator_archetype<Is>> && ...));\r\n        static_assert(random_access_iterator<random_iterator_archetype<random_iterator_archetype_max>>);\r\n        return true;\r\n    }\r\n    static_assert(test(std::make_index_sequence<random_iterator_archetype_max>{}));\r\n} // namespace iterator_concept_random_access_test\r\n\r\nnamespace iterator_concept_contiguous_test {\r\n    using std::contiguous_iterator;\r\n\r\n    static_assert(contiguous_iterator<int*>);\r\n    static_assert(contiguous_iterator<int const*>);\r\n    static_assert(!contiguous_iterator<iter_concept_example>);\r\n\r\n    template <std::size_t... Is>\r\n    constexpr bool test(std::index_sequence<Is...>) {\r\n        static_assert(\r\n            std::same_as<std::index_sequence<Is...>, std::make_index_sequence<contig_iterator_archetype_max>>);\r\n        static_assert((!contiguous_iterator<contig_iterator_archetype<Is>> && ...));\r\n        static_assert(contiguous_iterator<contig_iterator_archetype<contig_iterator_archetype_max>>);\r\n        return true;\r\n    }\r\n    static_assert(test(std::make_index_sequence<contig_iterator_archetype_max>{}));\r\n} // namespace iterator_concept_contiguous_test\r\n\r\nnamespace std_iterator_tags_test {\r\n    using std::bidirectional_iterator_tag, std::contiguous_iterator_tag, std::forward_iterator_tag,\r\n        std::input_iterator_tag, std::output_iterator_tag, std::random_access_iterator_tag;\r\n\r\n    template <class T, bool derives_from_output, bool derives_from_input, bool derives_from_forward,\r\n        bool derives_from_bidi, bool derives_from_random, bool derives_from_contiguous>\r\n    constexpr bool test_tag() {\r\n        using std::derived_from;\r\n\r\n        static_assert(std::is_empty_v<T>);\r\n        static_assert(std::semiregular<T>);\r\n        (void) T{};\r\n\r\n        static_assert(derived_from<T, output_iterator_tag> == derives_from_output);\r\n        static_assert(derived_from<T, input_iterator_tag> == derives_from_input);\r\n        static_assert(derived_from<T, forward_iterator_tag> == derives_from_forward);\r\n        static_assert(derived_from<T, bidirectional_iterator_tag> == derives_from_bidi);\r\n        static_assert(derived_from<T, random_access_iterator_tag> == derives_from_random);\r\n        static_assert(derived_from<T, contiguous_iterator_tag> == derives_from_contiguous);\r\n        return true;\r\n    }\r\n\r\n    static_assert(test_tag<output_iterator_tag, true, false, false, false, false, false>());\r\n    static_assert(test_tag<input_iterator_tag, false, true, false, false, false, false>());\r\n    static_assert(test_tag<forward_iterator_tag, false, true, true, false, false, false>());\r\n    static_assert(test_tag<bidirectional_iterator_tag, false, true, true, true, false, false>());\r\n    static_assert(test_tag<random_access_iterator_tag, false, true, true, true, true, false>());\r\n    static_assert(test_tag<contiguous_iterator_tag, false, true, true, true, true, true>());\r\n} // namespace std_iterator_tags_test\r\n\r\nnamespace incomplete_test {\r\n    template <class T>\r\n    struct do_not_instantiate {\r\n        static_assert(false);\r\n    };\r\n\r\n    using E = do_not_instantiate<void>;\r\n\r\n    // Verify that the iterator trait aliases do not cause instantiation of pointee types\r\n    using V = std::iter_value_t<E*>;\r\n    using D = std::iter_difference_t<E*>;\r\n    using R = std::iter_reference_t<E*>;\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n    // GH-1596: \"<algorithm>: unqualified calls to _Adl_verify_range incorrectly cause instantiation\"\r\n\r\n    template <class Tag>\r\n    struct tagged_base {};\r\n\r\n    template <class Tag>\r\n    struct tagged_derived : tagged_base<Tag> {};\r\n\r\n    template <class T>\r\n    struct holder {\r\n        T t;\r\n    };\r\n\r\n    struct incomplete;\r\n\r\n    void test_adl_proof_ranges_advance_distance() { // COMPILE-ONLY\r\n        using std::ranges::advance, std::ranges::distance;\r\n        using validating_base    = tagged_base<holder<incomplete>>;\r\n        using validating_derived = tagged_derived<holder<incomplete>>;\r\n\r\n        struct validating_empty_range {\r\n            constexpr validating_derived* begin() const noexcept {\r\n                return ptr_;\r\n            }\r\n            constexpr validating_base* end() const noexcept {\r\n                return ptr_;\r\n            }\r\n\r\n            validating_derived* ptr_;\r\n        };\r\n\r\n        static_assert(std::sentinel_for<validating_base*, validating_derived*>);\r\n#ifndef __EDG__ // TRANSITION, DevCom-10581519\r\n        static_assert(!std::sized_sentinel_for<validating_base*, validating_derived*>);\r\n#endif // ^^^ no workaround ^^^\r\n\r\n        validating_derived darr[1]{};\r\n        validating_derived* const pd = +darr;\r\n        validating_base* const pb    = +darr;\r\n        auto pd_mut                  = pd;\r\n        const validating_empty_range r{+darr};\r\n\r\n        (void) advance(pd_mut, 0);\r\n        (void) advance(pd_mut, pb);\r\n        (void) advance(pd_mut, 0, pb);\r\n\r\n        (void) distance(pd, pb);\r\n        (void) distance(r);\r\n    }\r\n#endif // ^^^ no workaround ^^^\r\n} // namespace incomplete_test\r\n\r\nnamespace default_sentinel_test {\r\n    using std::default_sentinel, std::default_sentinel_t;\r\n\r\n    static_assert(std::is_empty_v<default_sentinel_t>);\r\n    static_assert(std::semiregular<default_sentinel_t>);\r\n    static_assert(std::same_as<decltype((default_sentinel)), default_sentinel_t const&>);\r\n\r\n    // All special member functions are implicitly noexcept\r\n    static_assert(std::is_nothrow_default_constructible_v<default_sentinel_t>);\r\n    static_assert(std::is_nothrow_copy_constructible_v<default_sentinel_t>);\r\n    static_assert(std::is_nothrow_move_constructible_v<default_sentinel_t>);\r\n    static_assert(std::is_nothrow_copy_assignable_v<default_sentinel_t>);\r\n    static_assert(std::is_nothrow_move_assignable_v<default_sentinel_t>);\r\n\r\n    constexpr bool test() {\r\n        // Validate that default_sentinel_t's special member functions are all constexpr\r\n        default_sentinel_t ds0{}; // default constructor\r\n        default_sentinel_t ds1{default_sentinel}; // copy constructor\r\n        [[maybe_unused]] default_sentinel_t ds2{std::move(ds0)}; // move constructor\r\n        ds0 = default_sentinel; // copy assignment\r\n        ds1 = std::move(ds0); // move assignment\r\n        return true;\r\n    }\r\n    static_assert(test());\r\n} // namespace default_sentinel_test\r\n\r\nnamespace unreachable_sentinel_test {\r\n    using std::unreachable_sentinel, std::unreachable_sentinel_t;\r\n\r\n    static_assert(std::is_empty_v<unreachable_sentinel_t>);\r\n    static_assert(std::semiregular<unreachable_sentinel_t>);\r\n    static_assert(std::same_as<decltype((unreachable_sentinel)), unreachable_sentinel_t const&>);\r\n\r\n    // All special member functions are implicitly noexcept\r\n    static_assert(std::is_nothrow_default_constructible_v<unreachable_sentinel_t>);\r\n    static_assert(std::is_nothrow_copy_constructible_v<unreachable_sentinel_t>);\r\n    static_assert(std::is_nothrow_move_constructible_v<unreachable_sentinel_t>);\r\n    static_assert(std::is_nothrow_copy_assignable_v<unreachable_sentinel_t>);\r\n    static_assert(std::is_nothrow_move_assignable_v<unreachable_sentinel_t>);\r\n\r\n    template <class T>\r\n    concept Comparable = requires(T const& t) {\r\n        { t == unreachable_sentinel } -> std::same_as<bool>;\r\n        { t != unreachable_sentinel } -> std::same_as<bool>;\r\n        { unreachable_sentinel == t } -> std::same_as<bool>;\r\n        { unreachable_sentinel != t } -> std::same_as<bool>;\r\n    };\r\n\r\n    static_assert(Comparable<int>);\r\n\r\n    template <int... Is>\r\n    constexpr bool test(std::integer_sequence<int, Is...>) {\r\n        unreachable_sentinel_t us0{}; // default constructor is (implicitly) constexpr\r\n        unreachable_sentinel_t us1{unreachable_sentinel}; // ditto copy constructor\r\n        [[maybe_unused]] unreachable_sentinel_t us2{std::move(us0)}; // ditto move constructor\r\n        us0 = unreachable_sentinel; // ditto copy assignment\r\n        us1 = std::move(us0); // ditto move assignment\r\n\r\n        // == and != are constexpr and noexcept:\r\n        static_assert(!(unreachable_sentinel == 42));\r\n        static_assert(noexcept(unreachable_sentinel == 42));\r\n\r\n        static_assert(unreachable_sentinel != 42);\r\n        static_assert(noexcept(unreachable_sentinel != 42));\r\n\r\n        static_assert(!(42 == unreachable_sentinel));\r\n        static_assert(noexcept(42 == unreachable_sentinel));\r\n\r\n        static_assert(42 != unreachable_sentinel);\r\n        static_assert(noexcept(42 != unreachable_sentinel));\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1665674\r\n        static_assert((!Comparable<weakly_incrementable_archetype<Is>> && ...));\r\n#endif // ^^^ no workaround ^^^\r\n        static_assert(Comparable<weakly_incrementable_archetype<weakly_incrementable_archetype_max>>);\r\n\r\n        return true;\r\n    }\r\n    static_assert(test(std::make_integer_sequence<int, weakly_incrementable_archetype_max>{}));\r\n\r\n    namespace regress_1029409 {\r\n        // VSO-1029409 failed because std::unreachable_sentinel_t's hidden friend operator!= is not hidden in permissive\r\n        // mode. Overload resolution for != expressions would therefore try to determine if evil models\r\n        // std::weakly_incrementable, instantiating the operator- that must not be instantiated.\r\n\r\n        template <class>\r\n        struct evil {\r\n            friend constexpr bool operator!=(evil const&, evil const&) {\r\n                return true;\r\n            }\r\n\r\n            template <class T>\r\n            auto operator-(T const&) const {\r\n                static_assert(false, \"Don't instantiate me!\");\r\n            }\r\n        };\r\n\r\n        using std_type = std::default_sentinel_t;\r\n        static_assert(evil<std_type>{} != evil<std_type>{});\r\n    } // namespace regress_1029409\r\n} // namespace unreachable_sentinel_test\r\n\r\nnamespace unwrap_move_only {\r\n    // Validate the iterator unwrapping machinery works with move-only iterators, and that move-only iterators are not\r\n    // C++17 iterators\r\n\r\n    template <class T, bool IsWrapped>\r\n    struct iter {\r\n        using value_type      = T;\r\n        using difference_type = std::ptrdiff_t;\r\n\r\n        iter()       = default;\r\n        iter(iter&&) = default;\r\n\r\n        iter& operator=(iter&&) = default;\r\n\r\n        T operator*() const noexcept;\r\n\r\n        iter& operator++() noexcept;\r\n        void operator++(int) noexcept;\r\n\r\n        bool operator==(std::default_sentinel_t const&) const noexcept;\r\n\r\n        static constexpr bool _Unwrap_when_unverified = true;\r\n        iter<T, false> _Unwrapped() && noexcept\r\n            requires IsWrapped;\r\n        void _Seek_to(iter<T, false>) noexcept\r\n            requires IsWrapped;\r\n\r\n        void _Verify_offset(std::ptrdiff_t) const noexcept\r\n            requires IsWrapped;\r\n    };\r\n    static_assert(std::input_iterator<iter<int, true>>);\r\n    static_assert(!has_member_iter_category<std::iterator_traits<iter<int, true>>>);\r\n\r\n    static_assert(!std::_Unwrappable_v<iter<int, true>&>);\r\n    static_assert(!std::_Unwrappable_v<iter<int, true> const&>);\r\n    static_assert(std::_Unwrappable_v<iter<int, true>>);\r\n    static_assert(!std::_Unwrappable_v<iter<int, true> const>);\r\n    static_assert(std::same_as<std::_Unwrapped_t<iter<int, true>>, iter<int, false>>);\r\n\r\n    static_assert(!std::_Unwrappable_for_unverified_v<iter<int, true>&>);\r\n    static_assert(!std::_Unwrappable_for_unverified_v<iter<int, true> const&>);\r\n    static_assert(std::_Unwrappable_for_unverified_v<iter<int, true>>);\r\n    static_assert(!std::_Unwrappable_for_unverified_v<iter<int, true> const>);\r\n    static_assert(std::same_as<std::_Unwrapped_unverified_t<iter<int, true>>, iter<int, false>>);\r\n\r\n    static_assert(!std::_Unwrappable_for_offset_v<iter<int, true>&>);\r\n    static_assert(!std::_Unwrappable_for_offset_v<iter<int, true> const&>);\r\n    static_assert(std::_Unwrappable_for_offset_v<iter<int, true>>);\r\n    static_assert(!std::_Unwrappable_for_offset_v<iter<int, true> const>);\r\n\r\n    static_assert(!std::_Wrapped_seekable_v<iter<int, true>, iter<int, false>&>);\r\n    static_assert(!std::_Wrapped_seekable_v<iter<int, true>, iter<int, false> const&>);\r\n    static_assert(std::_Wrapped_seekable_v<iter<int, true>, iter<int, false>>);\r\n    static_assert(!std::_Wrapped_seekable_v<iter<int, true>, iter<int, false> const>);\r\n} // namespace unwrap_move_only\r\n\r\nnamespace iter_ops {\r\n    using std::default_sentinel, std::default_sentinel_t;\r\n    using std::input_iterator_tag, std::forward_iterator_tag, std::bidirectional_iterator_tag,\r\n        std::random_access_iterator_tag;\r\n\r\n    struct trace {\r\n        unsigned int compares_    = 0;\r\n        unsigned int differences_ = 0;\r\n        unsigned int increments_  = 0;\r\n        unsigned int decrements_  = 0;\r\n        unsigned int assignments_ = 0;\r\n        unsigned int seeks_       = 0;\r\n        unsigned int sizes_       = 0;\r\n        unsigned int begins_      = 0;\r\n        unsigned int ends_        = 0;\r\n\r\n        bool operator==(trace const&) const = default;\r\n    };\r\n\r\n    enum class sized { no, yes };\r\n    enum class assign { no, yes };\r\n    enum class nothrow { no, yes };\r\n\r\n    static constexpr int sentinel_position = 42;\r\n\r\n    template <class Category, sized Sized = sized::no, assign Assign = assign::no, nothrow NoThrow = nothrow::no>\r\n    struct trace_iterator {\r\n        using value_type      = int;\r\n        using difference_type = int;\r\n\r\n        static constexpr bool is_forward = std::derived_from<Category, forward_iterator_tag>;\r\n        static constexpr bool is_bidi    = std::derived_from<Category, bidirectional_iterator_tag>;\r\n        static constexpr bool is_random  = std::derived_from<Category, random_access_iterator_tag>;\r\n        static constexpr bool is_sized   = Sized == sized::yes;\r\n\r\n        trace_iterator() = default;\r\n        constexpr explicit trace_iterator(trace& t) noexcept(NoThrow == nothrow::yes) : trace_{&t} {}\r\n        constexpr explicit trace_iterator(int const pos, trace& t) noexcept(NoThrow == nothrow::yes)\r\n            : trace_{&t}, pos_{pos} {}\r\n\r\n        trace_iterator(trace_iterator const&)\r\n            requires is_forward\r\n        = default;\r\n        trace_iterator(trace_iterator&&) = default;\r\n\r\n        constexpr trace_iterator& operator=(trace_iterator const& that) noexcept(NoThrow == nothrow::yes)\r\n            requires is_forward\r\n        {\r\n            if (!trace_) {\r\n                trace_ = that.trace_;\r\n            }\r\n            ++trace_->assignments_;\r\n            pos_ = that.pos_;\r\n            return *this;\r\n        }\r\n        constexpr trace_iterator& operator=(trace_iterator&& that) noexcept(NoThrow == nothrow::yes) {\r\n            if (!trace_) {\r\n                trace_ = that.trace_;\r\n            }\r\n            ++trace_->assignments_;\r\n            pos_ = that.pos_;\r\n            return *this;\r\n        }\r\n\r\n        constexpr trace_iterator& operator=(default_sentinel_t) noexcept(NoThrow == nothrow::yes)\r\n            requires (Assign == assign::yes)\r\n        {\r\n            ++trace_->assignments_;\r\n            pos_ = sentinel_position;\r\n            return *this;\r\n        }\r\n\r\n        int operator*() const noexcept(NoThrow == nothrow::yes);\r\n\r\n        constexpr trace_iterator& operator++() noexcept(NoThrow == nothrow::yes) {\r\n            ++trace_->increments_;\r\n            ++pos_;\r\n            return *this;\r\n        }\r\n        trace_iterator operator++(int) noexcept(NoThrow == nothrow::yes);\r\n\r\n        constexpr bool operator==(default_sentinel_t) const noexcept(NoThrow == nothrow::yes) {\r\n            ++trace_->compares_;\r\n            return pos_ == sentinel_position;\r\n        }\r\n        constexpr int operator-(default_sentinel_t) const noexcept(NoThrow == nothrow::yes)\r\n            requires is_sized\r\n        {\r\n            ++trace_->differences_;\r\n            return pos_ - sentinel_position;\r\n        }\r\n        friend constexpr int operator-(default_sentinel_t, trace_iterator const& i) noexcept(NoThrow == nothrow::yes)\r\n            requires is_sized\r\n        {\r\n            return -(i - default_sentinel);\r\n        }\r\n\r\n        constexpr bool operator==(trace_iterator const& that) const noexcept(NoThrow == nothrow::yes)\r\n            requires is_forward\r\n        {\r\n            ++trace_->compares_;\r\n            return pos_ == that.pos_;\r\n        }\r\n\r\n        constexpr trace_iterator& operator--() noexcept(NoThrow == nothrow::yes)\r\n            requires is_bidi\r\n        {\r\n            ++trace_->decrements_;\r\n            --pos_;\r\n            return *this;\r\n        }\r\n        trace_iterator operator--(int) noexcept(NoThrow == nothrow::yes)\r\n            requires is_bidi;\r\n\r\n        std::strong_ordering operator<=>(trace_iterator const&) const noexcept(NoThrow == nothrow::yes)\r\n            requires is_random;\r\n\r\n        constexpr trace_iterator& operator+=(int const n) noexcept(NoThrow == nothrow::yes)\r\n            requires is_random\r\n        {\r\n            ++trace_->seeks_;\r\n            pos_ += n;\r\n            return *this;\r\n        }\r\n        trace_iterator operator+(int) const noexcept(NoThrow == nothrow::yes)\r\n            requires is_random;\r\n        friend trace_iterator operator+(int, trace_iterator const&) noexcept(NoThrow == nothrow::yes)\r\n            requires is_random\r\n        {}\r\n\r\n        trace_iterator& operator-=(int) noexcept(NoThrow == nothrow::yes)\r\n            requires is_random;\r\n        trace_iterator operator-(int) const noexcept(NoThrow == nothrow::yes)\r\n            requires is_random;\r\n\r\n        constexpr int operator-(trace_iterator const& that) const noexcept(NoThrow == nothrow::yes)\r\n            requires is_random || is_sized\r\n        {\r\n            ++trace_->differences_;\r\n            return pos_ - that.pos_;\r\n        }\r\n\r\n        int operator[](int) const noexcept(NoThrow == nothrow::yes);\r\n\r\n        trace* trace_ = nullptr;\r\n        int pos_      = 0;\r\n    };\r\n\r\n    // To model Assignable<trace_iterator</* ... */, assign::yes>&, std::default_sentinel_t>, we must satisfy\r\n    // common_reference_with<trace_iterator</* ... */, assign::yes> const&, const std::default_sentinel_t&>.\r\n    // Specializing common_type is the simplest way to do so:\r\n    struct commontype {\r\n        template <class Category, sized Sized>\r\n        commontype(trace_iterator<Category, Sized, assign::yes> const&);\r\n        commontype(default_sentinel_t);\r\n    };\r\n} // namespace iter_ops\r\n\r\ntemplate <class Category, ::iter_ops::sized Sized>\r\nstruct std::common_type<::iter_ops::trace_iterator<Category, Sized, ::iter_ops::assign::yes>, std::default_sentinel_t> {\r\n    using type = ::iter_ops::commontype;\r\n};\r\ntemplate <class Category, ::iter_ops::sized Sized>\r\nstruct std::common_type<std::default_sentinel_t, ::iter_ops::trace_iterator<Category, Sized, ::iter_ops::assign::yes>> {\r\n    using type = ::iter_ops::commontype;\r\n};\r\n\r\nnamespace iter_ops {\r\n    using ranges::advance, ranges::distance, ranges::next, ranges::prev;\r\n\r\n    template <class I, class S>\r\n    concept can_call_ranges_difference =\r\n        requires(I&& it, S&& se) { distance(std::forward<I>(it), std::forward<S>(se)); };\r\n\r\n    constexpr bool test_iter_forms() {\r\n        {\r\n            // Call next(i), validating that ++i is called once\r\n            using R = trace_iterator<random_access_iterator_tag>;\r\n            trace t{};\r\n            R r = next(R{t});\r\n            assert(r.pos_ == 1 && t == trace{.increments_ = 1});\r\n        }\r\n        {\r\n            // Ditto, move-only iterator\r\n            using I = trace_iterator<input_iterator_tag>;\r\n            trace t{};\r\n            I i = next(I{t});\r\n            assert(i.pos_ == 1 && t == trace{.increments_ = 1});\r\n        }\r\n        {\r\n            // Call prev(i), validating that --i is called once\r\n            using R = trace_iterator<random_access_iterator_tag>;\r\n            trace t{};\r\n            R r = prev(R{t});\r\n            assert(r.pos_ == -1 && t == trace{.decrements_ = 1});\r\n        }\r\n\r\n        return true;\r\n    }\r\n    static_assert(test_iter_forms());\r\n\r\n    constexpr bool test_iter_count_forms() {\r\n        // Call advance(i, n) / next(i, n) / prev(i, -n) with:\r\n        {\r\n            // random_access_iterator<I>, validating that i += n is called\r\n            using I = trace_iterator<random_access_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                advance(i, 42);\r\n                assert(i.pos_ == 42 && t == trace{.seeks_ = 1});\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{t}, 42);\r\n                assert(i.pos_ == 42 && t == trace{.seeks_ = 1});\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{t}, -42);\r\n                assert(i.pos_ == -42 && t == trace{.seeks_ = 1});\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = prev(I{t}, 42);\r\n                assert(i.pos_ == -42 && t == trace{.seeks_ = 1});\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = prev(I{t}, -42);\r\n                assert(i.pos_ == 42 && t == trace{.seeks_ = 1});\r\n            }\r\n        }\r\n        {\r\n            // bidirectional_iterator<I> && n > 0, validating that ++i is called n times\r\n            using I = trace_iterator<bidirectional_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                advance(i, 42);\r\n                assert(i.pos_ == 42 && t == trace{.increments_ = 42});\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{t}, 42);\r\n                assert(i.pos_ == 42 && t == trace{.increments_ = 42});\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = prev(I{t}, -42);\r\n                assert(i.pos_ == 42 && t == trace{.increments_ = 42});\r\n            }\r\n        }\r\n        {\r\n            // bidirectional_iterator<I> && n < 0, validating that --i is called -n times\r\n            using I = trace_iterator<bidirectional_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                advance(i, -42);\r\n                assert(i.pos_ == -42 && t == trace{.decrements_ = 42});\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{t}, -42);\r\n                assert(i.pos_ == -42 && t == trace{.decrements_ = 42});\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = prev(I{t}, 42);\r\n                assert(i.pos_ == -42 && t == trace{.decrements_ = 42});\r\n            }\r\n        }\r\n        {\r\n            // input_iterator<I> && n > 0, validating that ++i is called n times\r\n            using I = trace_iterator<input_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                advance(i, 42);\r\n                assert(i.pos_ == 42 && t == trace{.increments_ = 42});\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{t}, 42);\r\n                assert(i.pos_ == 42 && t == trace{.increments_ = 42});\r\n            }\r\n        }\r\n        {\r\n            // random_access_iterator<I> && n == 0, validating that i += 0 is called.\r\n            using R = trace_iterator<random_access_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                R r{t};\r\n                advance(r, 0);\r\n                assert(r.pos_ == 0 && t == trace{.seeks_ = 1});\r\n            }\r\n            {\r\n                trace t{};\r\n                R r = next(R{t}, 0);\r\n                assert(r.pos_ == 0 && t == trace{.seeks_ = 1});\r\n            }\r\n            {\r\n                trace t{};\r\n                R r = prev(R{t}, 0);\r\n                assert(r.pos_ == 0 && t == trace{.seeks_ = 1});\r\n            }\r\n        }\r\n        {\r\n            // bidirectional_iterator<I> && n == 0, validating that there are no effects\r\n            using B = trace_iterator<bidirectional_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                B b{t};\r\n                advance(b, 0);\r\n                assert(b.pos_ == 0 && t == trace{});\r\n            }\r\n            {\r\n                trace t{};\r\n                B b = next(B{t}, 0);\r\n                assert(b.pos_ == 0 && t == trace{});\r\n            }\r\n            {\r\n                trace t{};\r\n                B b = prev(B{t}, 0);\r\n                assert(b.pos_ == 0 && t == trace{});\r\n            }\r\n        }\r\n        {\r\n            // input_iterator<I> && n == 0, validating that there are no effects\r\n            using I = trace_iterator<input_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                advance(i, 0);\r\n                assert(i.pos_ == 0 && t == trace{});\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{t}, 0);\r\n                assert(i.pos_ == 0 && t == trace{});\r\n            }\r\n        }\r\n\r\n        return true;\r\n    }\r\n    static_assert(test_iter_count_forms());\r\n\r\n    constexpr bool test_iter_sentinel_forms() {\r\n        // Call advance(i, s) / next(i, s) with:\r\n        {\r\n            // assignable_from<I&, S>, validating that i = s is called\r\n            using I = trace_iterator<input_iterator_tag, sized::no, assign::yes>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                advance(i, default_sentinel);\r\n                assert(i.pos_ == sentinel_position && t == trace{.assignments_ = 1});\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{t}, default_sentinel);\r\n                assert(i.pos_ == sentinel_position && t == trace{.assignments_ = 1});\r\n            }\r\n        }\r\n        {\r\n            // sized_sentinel_for<S, I> && random_access_iterator<I>, validating that i += s - i is called\r\n            using I = trace_iterator<random_access_iterator_tag, sized::yes>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                advance(i, default_sentinel);\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{t}, default_sentinel);\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n        }\r\n        {\r\n            // sized_sentinel_for<S, I> && input_iterator<I>, validating that ++i is called s - i times\r\n            using I = trace_iterator<input_iterator_tag, sized::yes>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                advance(i, default_sentinel);\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1, .increments_ = 42}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{t}, default_sentinel);\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1, .increments_ = 42}));\r\n            }\r\n        }\r\n        {\r\n            // input_iterator<I>, validating that ++i is called enough times to make i == s\r\n            using I = trace_iterator<input_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                advance(i, default_sentinel);\r\n                assert((i.pos_ == sentinel_position && t == trace{.compares_ = 43, .increments_ = 42}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{t}, default_sentinel);\r\n                assert((i.pos_ == sentinel_position && t == trace{.compares_ = 43, .increments_ = 42}));\r\n            }\r\n        }\r\n\r\n        return true;\r\n    }\r\n    static_assert(test_iter_sentinel_forms());\r\n\r\n    constexpr bool test_iter_count_sentinel_forms() {\r\n        // Call advance(i, n, s) / next(i, n, s) / prev(i, -n, s) with:\r\n        //   sized_sentinel_for<S, I> && n < s - i && s - i < 0\r\n        {\r\n            // && bidirectional_iterator<I>, validating that i = s is called (NB: s and i must have the same type),\r\n            // and the return value is n + (i - s)\r\n            using I = trace_iterator<bidirectional_iterator_tag, sized::yes>;\r\n            {\r\n                trace t{};\r\n                I i{sentinel_position, t};\r\n                int const result = advance(i, -2 * sentinel_position, I{t});\r\n                assert(result == -sentinel_position);\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{sentinel_position, t}, -2 * sentinel_position, I{t});\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = prev(I{sentinel_position, t}, 2 * sentinel_position, I{t});\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n        }\r\n        {\r\n            // && random_access_iterator<I>, validating that i = s is called (NB: s and i must have the same type),\r\n            // and the return value is n + (i - s)\r\n            using I = trace_iterator<random_access_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                I i{sentinel_position, t};\r\n                int const result = advance(i, -2 * sentinel_position, I{t});\r\n                assert(result == -sentinel_position);\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{sentinel_position, t}, -2 * sentinel_position, I{t});\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = prev(I{sentinel_position, t}, 2 * sentinel_position, I{t});\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n        }\r\n\r\n        // Call advance(i, n, s) / next(i, n, s) / prev(i, -n, s) with:\r\n        //   sized_sentinel_for<S, I> && n == s - i && s - i < 0\r\n        {\r\n            // && bidirectional_iterator<I>, validating that i = s is called, and the return value is 0\r\n            using I = trace_iterator<bidirectional_iterator_tag, sized::yes>;\r\n            {\r\n                trace t{};\r\n                I i{sentinel_position, t};\r\n                int const result = advance(i, -sentinel_position, I{t});\r\n                assert(result == 0);\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{sentinel_position, t}, -sentinel_position, I{t});\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = prev(I{sentinel_position, t}, sentinel_position, I{t});\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n        }\r\n        {\r\n            // && random_access_iterator<I>, validating that i = s is called, and the return value is 0\r\n            using I = trace_iterator<random_access_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                I i{sentinel_position, t};\r\n                int const result = advance(i, -sentinel_position, I{t});\r\n                assert(result == 0);\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{sentinel_position, t}, -sentinel_position, I{t});\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = prev(I{sentinel_position, t}, sentinel_position, I{t});\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n        }\r\n\r\n        // Call advance(i, n, s) / next(i, n, s) / prev(i, -n, s) with:\r\n        //   sized_sentinel_for<S, I> && s - i < n && n < 0\r\n        {\r\n            // && bidirectional_iterator<I>, validating that --i is called -n times, and the return value is 0\r\n            using I = trace_iterator<bidirectional_iterator_tag, sized::yes>;\r\n            {\r\n                trace t{};\r\n                I i{sentinel_position, t};\r\n                int const result = advance(i, -sentinel_position / 2, I{t});\r\n                assert(result == 0);\r\n                assert(i.pos_ == sentinel_position - sentinel_position / 2);\r\n                assert((t == trace{.differences_ = 1, .decrements_ = sentinel_position / 2}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{sentinel_position, t}, -sentinel_position / 2, I{t});\r\n                assert(i.pos_ == sentinel_position - sentinel_position / 2);\r\n                assert((t == trace{.differences_ = 1, .decrements_ = sentinel_position / 2}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = prev(I{sentinel_position, t}, sentinel_position / 2, I{t});\r\n                assert(i.pos_ == sentinel_position - sentinel_position / 2);\r\n                assert((t == trace{.differences_ = 1, .decrements_ = sentinel_position / 2}));\r\n            }\r\n        }\r\n        {\r\n            // && random_access_iterator<I>, validating that i += n is called, and the return value is 0\r\n            using I = trace_iterator<random_access_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                I i{sentinel_position, t};\r\n                int const result = advance(i, -sentinel_position / 2, I{t});\r\n                assert(result == 0);\r\n                assert(i.pos_ == sentinel_position - sentinel_position / 2);\r\n                assert((t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{sentinel_position, t}, -sentinel_position / 2, I{t});\r\n                assert(i.pos_ == sentinel_position - sentinel_position / 2);\r\n                assert((t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = prev(I{sentinel_position, t}, sentinel_position / 2, I{t});\r\n                assert(i.pos_ == sentinel_position - sentinel_position / 2);\r\n                assert((t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n        }\r\n\r\n        // Call advance(i, n, s) / next(i, n, s) / prev(i, -n, s) with:\r\n        //   sized_sentinel_for<S, I> && s - i < n && n == 0\r\n        {\r\n            // && bidirectional_iterator<I>, validating that there are no effects, and the return value is 0\r\n            using I = trace_iterator<bidirectional_iterator_tag, sized::yes>;\r\n            {\r\n                trace t{};\r\n                I i{sentinel_position, t};\r\n                int const result = advance(i, 0, I{t});\r\n                assert(result == 0);\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{sentinel_position, t}, 0, I{t});\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = prev(I{sentinel_position, t}, 0, I{t});\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1}));\r\n            }\r\n        }\r\n        {\r\n            // && random_access_iterator<I>, validating that i += 0 is called, and the return value is 0\r\n            using I = trace_iterator<random_access_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                I i{sentinel_position, t};\r\n                int const result = advance(i, 0, I{t});\r\n                assert(result == 0);\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{sentinel_position, t}, 0, I{t});\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = prev(I{sentinel_position, t}, 0, I{t});\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n        }\r\n\r\n        // Call advance(i, n, s) / next(i, n, s) / prev(i, -n, s) with:\r\n        //   sized_sentinel_for<S, I> && 0 < s - i && s - i < n\r\n        {\r\n            // && input_iterator<I> && assignable_from<I&, S>, validating that i = s is called, and the return value is\r\n            // n + (i - s)\r\n            using I = trace_iterator<input_iterator_tag, sized::yes, assign::yes>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                int const result = advance(i, 2 * sentinel_position, default_sentinel);\r\n                assert(result == sentinel_position);\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I i = next(I{t}, 2 * sentinel_position, default_sentinel);\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n\r\n            // Ditto, but bidirectional_iterator<I> for prev(i, n, i)\r\n            {\r\n                using B = trace_iterator<bidirectional_iterator_tag, sized::yes, assign::yes>;\r\n                trace t{};\r\n                B b = prev(B{t}, -2 * sentinel_position, B{sentinel_position, t});\r\n                assert((b.pos_ == sentinel_position && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n        }\r\n        {\r\n            // && input_iterator<I>, validating that ++i is called s - i times, and the return value is n + (i - s)\r\n            using I = trace_iterator<input_iterator_tag, sized::yes>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                int const result = advance(i, 2 * sentinel_position, default_sentinel);\r\n                assert(result == sentinel_position);\r\n                assert(i.pos_ == sentinel_position);\r\n                assert((t == trace{.differences_ = 1, .increments_ = sentinel_position}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = next(I{t}, 2 * sentinel_position, default_sentinel);\r\n                assert(i.pos_ == sentinel_position);\r\n                assert((t == trace{.differences_ = 1, .increments_ = sentinel_position}));\r\n            }\r\n        }\r\n        {\r\n            // && random_access_iterator<I>, validating that i += s - i is called, and the return value is n + (i - s)\r\n            using I = trace_iterator<random_access_iterator_tag, sized::yes>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                int const result = advance(i, 2 * sentinel_position, default_sentinel);\r\n                assert(result == sentinel_position);\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = next(I{t}, 2 * sentinel_position, default_sentinel);\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n        }\r\n\r\n        // Call advance(i, n, s) / next(i, n, s) / prev(i, -n, s) with:\r\n        //   sized_sentinel_for<S, I> && 0 < s - i && s - i == n\r\n        {\r\n            // && input_iterator<I> && assignable_from<I&, S>, validating that i = s is called,\r\n            // and the return value is 0\r\n            using I = trace_iterator<input_iterator_tag, sized::yes, assign::yes>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                int const result = advance(i, sentinel_position, default_sentinel);\r\n                assert(result == 0);\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = next(I{t}, sentinel_position, default_sentinel);\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n\r\n            // Ditto, but bidirectional_iterator<I> for prev(i, n, i)\r\n            {\r\n                using B = trace_iterator<bidirectional_iterator_tag, sized::yes, assign::yes>;\r\n                trace t{};\r\n                B b = prev(B{t}, -sentinel_position, B{sentinel_position, t});\r\n                assert((b.pos_ == sentinel_position && t == trace{.differences_ = 1, .assignments_ = 1}));\r\n            }\r\n        }\r\n        {\r\n            // && input_iterator<I>, validating that ++i is called n times, and the return value is 0\r\n            using I = trace_iterator<input_iterator_tag, sized::yes>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                int const result = advance(i, sentinel_position, default_sentinel);\r\n                assert(result == 0);\r\n                assert(i.pos_ == sentinel_position);\r\n                assert((t == trace{.differences_ = 1, .increments_ = sentinel_position}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = next(I{t}, sentinel_position, default_sentinel);\r\n                assert(i.pos_ == sentinel_position);\r\n                assert((t == trace{.differences_ = 1, .increments_ = sentinel_position}));\r\n            }\r\n        }\r\n        {\r\n            // && random_access_iterator<I>, validating that i += n is called, and the return value is 0\r\n            using I = trace_iterator<random_access_iterator_tag, sized::yes>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                int const result = advance(i, sentinel_position, default_sentinel);\r\n                assert(result == 0);\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = next(I{t}, sentinel_position, default_sentinel);\r\n                assert((i.pos_ == sentinel_position && t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n        }\r\n\r\n        // Call advance(i, n, s) / next(i, n, s) / prev(i, -n, s) with:\r\n        //   sized_sentinel_for<S, I> && 0 < n && n < s - i\r\n        {\r\n            // && input_iterator<I>, validating that ++i is called n times, and the return value is 0\r\n            using I = trace_iterator<input_iterator_tag, sized::yes>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                int const result = advance(i, sentinel_position / 2, default_sentinel);\r\n                assert(result == 0);\r\n                assert(i.pos_ == sentinel_position / 2);\r\n                assert((t == trace{.differences_ = 1, .increments_ = sentinel_position / 2}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = next(I{t}, sentinel_position / 2, default_sentinel);\r\n                assert(i.pos_ == sentinel_position / 2);\r\n                assert((t == trace{.differences_ = 1, .increments_ = sentinel_position / 2}));\r\n            }\r\n\r\n            // Ditto, but bidirectional_iterator<I> for prev(i, n, i)\r\n            {\r\n                using B = trace_iterator<bidirectional_iterator_tag, sized::yes>;\r\n                trace t{};\r\n                B b = prev(B{t}, -sentinel_position / 2, B{sentinel_position, t});\r\n                assert(b.pos_ == sentinel_position / 2);\r\n                assert((t == trace{.differences_ = 1, .increments_ = sentinel_position / 2}));\r\n            }\r\n        }\r\n        {\r\n            // && random_access_iterator<I>, validating that i += n is called, and the return value is 0\r\n            using I = trace_iterator<random_access_iterator_tag, sized::yes>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                int const result = advance(i, sentinel_position / 2, default_sentinel);\r\n                assert(result == 0);\r\n                assert((i.pos_ == sentinel_position / 2 && t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = next(I{t}, sentinel_position / 2, default_sentinel);\r\n                assert((i.pos_ == sentinel_position / 2 && t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = prev(I{t}, -sentinel_position / 2, I{sentinel_position, t});\r\n                assert((i.pos_ == sentinel_position / 2 && t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n        }\r\n\r\n        // Call advance(i, n, s) / next(i, n, s) / prev(i, -n, s) with:\r\n        //   sized_sentinel_for<S, I> && 0 == n && n < s - i\r\n        {\r\n            // && input_iterator<I>, validating that there are no effects, and the return value is 0\r\n            using I = trace_iterator<input_iterator_tag, sized::yes>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                int const result = advance(i, 0, default_sentinel);\r\n                assert(result == 0);\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = next(I{t}, 0, default_sentinel);\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1}));\r\n            }\r\n\r\n            // Ditto, but bidirectional_iterator<I> for prev(i, n, i)\r\n            {\r\n                using B = trace_iterator<bidirectional_iterator_tag, sized::yes>;\r\n                trace t{};\r\n                B b = prev(B{t}, 0, B{sentinel_position, t});\r\n                assert((b.pos_ == 0 && t == trace{.differences_ = 1}));\r\n            }\r\n        }\r\n        {\r\n            // && random_access_iterator<I>, validating that i += 0 is called, and the return value is 0\r\n            using I = trace_iterator<random_access_iterator_tag, sized::yes>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                int const result = advance(i, 0, default_sentinel);\r\n                assert(result == 0);\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = next(I{t}, 0, default_sentinel);\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = prev(I{t}, 0, I{sentinel_position, t});\r\n                assert((i.pos_ == 0 && t == trace{.differences_ = 1, .seeks_ = 1}));\r\n            }\r\n        }\r\n\r\n        // Call advance(i, n, s) / next(i, n, s) / prev(i, -n, s) with:\r\n        //    n < s - i < 0 && bidirectional_iterator<I>\r\n        {\r\n            // validating that --i is called i - s times, and the return value is n + (i - s)\r\n            using I = trace_iterator<bidirectional_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                I i{sentinel_position, t};\r\n                int const result = advance(i, -2 * sentinel_position, I{t});\r\n                assert(result == -sentinel_position);\r\n                assert(i.pos_ == 0);\r\n                assert((t == trace{.compares_ = sentinel_position + 1, .decrements_ = sentinel_position}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = next(I{sentinel_position, t}, -2 * sentinel_position, I{t});\r\n                assert(i.pos_ == 0);\r\n                assert((t == trace{.compares_ = sentinel_position + 1, .decrements_ = sentinel_position}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = prev(I{sentinel_position, t}, 2 * sentinel_position, I{t});\r\n                assert(i.pos_ == 0);\r\n                assert((t == trace{.compares_ = sentinel_position + 1, .decrements_ = sentinel_position}));\r\n            }\r\n        }\r\n\r\n        // Call advance(i, n, s) / next(i, n, s) / prev(i, -n, s) with:\r\n        //   n == s - i && s - i < 0 && bidirectional_iterator<I>\r\n        {\r\n            // validating that --i is called -n times, and the return value is 0\r\n            using I = trace_iterator<bidirectional_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                I i{sentinel_position, t};\r\n                int const result = advance(i, -sentinel_position, I{t});\r\n                assert(result == 0);\r\n                assert((i.pos_ == 0 && t == trace{.compares_ = sentinel_position, .decrements_ = sentinel_position}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = next(I{sentinel_position, t}, -sentinel_position, I{t});\r\n                assert((i.pos_ == 0 && t == trace{.compares_ = sentinel_position, .decrements_ = sentinel_position}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = prev(I{sentinel_position, t}, sentinel_position, I{t});\r\n                assert((i.pos_ == 0 && t == trace{.compares_ = sentinel_position, .decrements_ = sentinel_position}));\r\n            }\r\n        }\r\n\r\n        // Call advance(i, n, s) / next(i, n, s) / prev(i, -n, s) with:\r\n        //   s - i < n && n < 0 && bidirectional_iterator<I>\r\n        {\r\n            // validating that --i is called -n times, and the return value is 0\r\n            using I = trace_iterator<bidirectional_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                I i{sentinel_position, t};\r\n                int const result = advance(i, -sentinel_position / 2, I{t});\r\n                assert(result == 0);\r\n                assert(i.pos_ == sentinel_position - sentinel_position / 2);\r\n                assert((t == trace{.compares_ = sentinel_position / 2, .decrements_ = sentinel_position / 2}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = next(I{sentinel_position, t}, -sentinel_position / 2, I{t});\r\n                assert(i.pos_ == sentinel_position - sentinel_position / 2);\r\n                assert((t == trace{.compares_ = sentinel_position / 2, .decrements_ = sentinel_position / 2}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = prev(I{sentinel_position, t}, sentinel_position / 2, I{t});\r\n                assert(i.pos_ == sentinel_position - sentinel_position / 2);\r\n                assert((t == trace{.compares_ = sentinel_position / 2, .decrements_ = sentinel_position / 2}));\r\n            }\r\n        }\r\n\r\n        // Call advance(i, n, s) / next(i, n, s) / prev(i, -n, s) with:\r\n        //   0 < s - i && s - i < n && input_iterator<I>\r\n        {\r\n            // validating that ++i is called i - s times, and the return value is n + (i - s)\r\n            using I = trace_iterator<input_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                int const result = advance(i, 2 * sentinel_position, default_sentinel);\r\n                assert(result == sentinel_position);\r\n                assert(i.pos_ == sentinel_position);\r\n                assert((t == trace{.compares_ = sentinel_position + 1, .increments_ = sentinel_position}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = next(I{t}, 2 * sentinel_position, default_sentinel);\r\n                assert(i.pos_ == sentinel_position);\r\n                assert((t == trace{.compares_ = sentinel_position + 1, .increments_ = sentinel_position}));\r\n            }\r\n\r\n            // Ditto, bidirectional_iterator<I> for prev\r\n            {\r\n                using B = trace_iterator<bidirectional_iterator_tag>;\r\n                trace t{};\r\n                B const b = prev(B{t}, -2 * sentinel_position, B{sentinel_position, t});\r\n                assert(b.pos_ == sentinel_position);\r\n                assert((t == trace{.compares_ = sentinel_position + 1, .increments_ = sentinel_position}));\r\n            }\r\n        }\r\n\r\n        // Call advance(i, n, s) / next(i, n, s) / prev(i, -n, s) with:\r\n        //   0 < n && n == s - i && input_iterator<I>\r\n        {\r\n            // validating that ++i is called n times, and the return value is 0\r\n            using I = trace_iterator<input_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                int const result = advance(i, sentinel_position, default_sentinel);\r\n                assert(result == 0);\r\n                assert(i.pos_ == sentinel_position);\r\n                assert((t == trace{.compares_ = sentinel_position, .increments_ = sentinel_position}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = next(I{t}, sentinel_position, default_sentinel);\r\n                assert(i.pos_ == sentinel_position);\r\n                assert((t == trace{.compares_ = sentinel_position, .increments_ = sentinel_position}));\r\n            }\r\n\r\n            // Ditto, bidirectional_iterator<I> for prev\r\n            {\r\n                using B = trace_iterator<bidirectional_iterator_tag>;\r\n                trace t{};\r\n                B const b = prev(B{t}, -sentinel_position, B{sentinel_position, t});\r\n                assert(b.pos_ == sentinel_position);\r\n                assert((t == trace{.compares_ = sentinel_position, .increments_ = sentinel_position}));\r\n            }\r\n        }\r\n\r\n        // Call advance(i, n, s) / next(i, n, s) / prev(i, -n, s) with:\r\n        //   input_iterator<I> && 0 < n && n < s - i\r\n        {\r\n            // validating that ++i is called n times, and the return value is 0\r\n            using I = trace_iterator<input_iterator_tag>;\r\n            {\r\n                trace t{};\r\n                I i{t};\r\n                int const result = advance(i, sentinel_position / 2, default_sentinel);\r\n                assert(result == 0);\r\n                assert(i.pos_ == sentinel_position / 2);\r\n                assert((t == trace{.compares_ = sentinel_position / 2, .increments_ = sentinel_position / 2}));\r\n            }\r\n            {\r\n                trace t{};\r\n                I const i = next(I{t}, sentinel_position / 2, default_sentinel);\r\n                assert(i.pos_ == sentinel_position / 2);\r\n                assert((t == trace{.compares_ = sentinel_position / 2, .increments_ = sentinel_position / 2}));\r\n            }\r\n\r\n            // Ditto, bidirectional_iterator<I> for prev\r\n            {\r\n                using B = trace_iterator<bidirectional_iterator_tag>;\r\n                trace t{};\r\n                B const b = prev(B{t}, -sentinel_position / 2, B{sentinel_position, t});\r\n                assert(b.pos_ == sentinel_position / 2);\r\n                assert((t == trace{.compares_ = sentinel_position / 2, .increments_ = sentinel_position / 2}));\r\n            }\r\n        }\r\n\r\n        return true;\r\n    }\r\n    static_assert(test_iter_count_sentinel_forms());\r\n\r\n    template <nothrow NoThrow = nothrow::no>\r\n    struct sized_test_range {\r\n        mutable trace t{};\r\n\r\n        constexpr unsigned char size() const noexcept(NoThrow == nothrow::yes) {\r\n            ++t.sizes_;\r\n            return 42;\r\n        }\r\n        int* begin() const noexcept(NoThrow == nothrow::yes);\r\n        int* end() const noexcept(NoThrow == nothrow::yes);\r\n    };\r\n\r\n    template <nothrow NoThrow = nothrow::no>\r\n    struct unsized_test_range {\r\n        mutable trace t{};\r\n\r\n        constexpr trace_iterator<forward_iterator_tag> begin() const noexcept(NoThrow == nothrow::yes) {\r\n            ++t.begins_;\r\n            return trace_iterator<forward_iterator_tag>{t};\r\n        }\r\n        constexpr std::default_sentinel_t end() const noexcept(NoThrow == nothrow::yes) {\r\n            ++t.ends_;\r\n            return {};\r\n        }\r\n    };\r\n\r\n    template <class Element>\r\n    struct pointer_sentinel {\r\n        Element* ptr = nullptr;\r\n\r\n        pointer_sentinel() = default;\r\n        constexpr explicit pointer_sentinel(Element* const p) noexcept : ptr{p} {}\r\n\r\n        template <class T>\r\n        [[nodiscard]] constexpr bool operator==(T* that) const noexcept {\r\n            static_assert(std::same_as<T, Element>);\r\n            return ptr == that;\r\n        }\r\n\r\n        template <class T>\r\n        [[nodiscard]] friend constexpr std::ptrdiff_t operator-(T* x, const pointer_sentinel& y) noexcept {\r\n            static_assert(std::same_as<T, Element>);\r\n            return x - y.ptr;\r\n        }\r\n\r\n        template <class T>\r\n        [[nodiscard]] friend constexpr std::ptrdiff_t operator-(const pointer_sentinel& y, T* x) noexcept {\r\n            static_assert(std::same_as<T, Element>);\r\n            return y.ptr - x;\r\n        }\r\n    };\r\n\r\n    constexpr bool test_distance() {\r\n        using ranges::distance, ranges::size;\r\n        using std::iter_difference_t, std::same_as;\r\n\r\n        {\r\n            // Call distance(i, s) with: sized_sentinel_for<S, I> && input_iterator<I> && last - first > 0\r\n            // Validate return is last - first\r\n            using I = trace_iterator<input_iterator_tag, sized::yes, assign::no, nothrow::no>;\r\n            trace t{};\r\n            I first{t};\r\n            same_as<iter_difference_t<I>> auto const result = distance(first, default_sentinel);\r\n            static_assert(!noexcept(distance(first, default_sentinel)));\r\n            assert(result == sentinel_position);\r\n            assert((t == trace{.differences_ = 1}));\r\n        }\r\n        {\r\n            // Call distance(i, s) with: sized_sentinel_for<S, I> && input_iterator<I> && last - first > 0\r\n            // Validate return is last - first\r\n            using I = trace_iterator<input_iterator_tag, sized::yes, assign::no, nothrow::yes>;\r\n            trace t{};\r\n            I first{t};\r\n            same_as<iter_difference_t<I>> auto const result = distance(first, default_sentinel);\r\n            static_assert(noexcept(distance(first, default_sentinel)));\r\n            assert(result == sentinel_position);\r\n            assert((t == trace{.differences_ = 1}));\r\n        }\r\n\r\n        {\r\n            // Call distance(i, s) with:\r\n            //   sized_sentinel_for<S, I> && forward_iterator<I> && same_as<S, I> && last - first < 0\r\n            // Validate return is last - first\r\n            using I = trace_iterator<forward_iterator_tag, sized::yes, assign::no, nothrow::no>;\r\n            trace t{};\r\n            I first{sentinel_position, t};\r\n            I last{t};\r\n            same_as<iter_difference_t<I>> auto const result = distance(first, last);\r\n            static_assert(!noexcept(distance(first, last)));\r\n            assert(result == -sentinel_position);\r\n            assert((t == trace{.differences_ = 1}));\r\n        }\r\n        {\r\n            // Call distance(i, s) with:\r\n            //   sized_sentinel_for<S, I> && forward_iterator<I> && same_as<S, I> && last - first < 0\r\n            // Validate return is last - first\r\n            using I = trace_iterator<forward_iterator_tag, sized::yes, assign::no, nothrow::yes>;\r\n            trace t{};\r\n            I first{sentinel_position, t};\r\n            I last{t};\r\n            same_as<iter_difference_t<I>> auto const result = distance(first, last);\r\n            static_assert(noexcept(distance(first, last)));\r\n            assert(result == -sentinel_position);\r\n            assert((t == trace{.differences_ = 1}));\r\n        }\r\n\r\n        {\r\n            // Call distance(i, s) with: !sized_sentinel_for<S, I> && input_iterator<I> && last - first > 0\r\n            // Validate return is last - first, and increment is called last - first times\r\n            using I = trace_iterator<input_iterator_tag, sized::no, assign::no, nothrow::no>;\r\n            trace t{};\r\n            I first{t};\r\n            same_as<iter_difference_t<I>> auto const result = distance(move(first), default_sentinel);\r\n            static_assert(!noexcept(distance(move(first), default_sentinel)));\r\n            assert(result == sentinel_position);\r\n            assert((t == trace{.compares_ = sentinel_position + 1, .increments_ = sentinel_position}));\r\n        }\r\n        {\r\n            // Call distance(i, s) with: !sized_sentinel_for<S, I> && input_iterator<I> && last - first > 0\r\n            // Validate return is last - first, and increment is called last - first times\r\n            using I = trace_iterator<input_iterator_tag, sized::no, assign::no, nothrow::yes>;\r\n            trace t{};\r\n            I first{t};\r\n            same_as<iter_difference_t<I>> auto const result = distance(move(first), default_sentinel);\r\n            static_assert(noexcept(distance(move(first), default_sentinel)));\r\n            assert(result == sentinel_position);\r\n            assert((t == trace{.compares_ = sentinel_position + 1, .increments_ = sentinel_position}));\r\n        }\r\n\r\n        {\r\n            // Call distance(r) with: sized_range<R>, validate that begin and end are not called\r\n            sized_test_range<nothrow::no> r{};\r\n            same_as<ptrdiff_t> auto const result = distance(r);\r\n            static_assert(!noexcept(distance(r)));\r\n            assert(result == 42);\r\n            assert((r.t == trace{.sizes_ = 1}));\r\n        }\r\n        {\r\n            // Call distance(r) with: sized_range<R>, validate that begin and end are not called\r\n            sized_test_range<nothrow::yes> r{};\r\n            same_as<ptrdiff_t> auto const result = distance(r);\r\n            static_assert(noexcept(distance(r)));\r\n            assert(result == 42);\r\n            assert((r.t == trace{.sizes_ = 1}));\r\n        }\r\n\r\n        {\r\n            // Call distance(r) with: !sized_range<R>, validate that begin and end are called\r\n            unsized_test_range<nothrow::no> r{};\r\n            assert(distance(r) == sentinel_position);\r\n            static_assert(!noexcept(distance(r)));\r\n            trace const expected{\r\n                .compares_ = sentinel_position + 1, .increments_ = sentinel_position, .begins_ = 1, .ends_ = 1};\r\n            assert(r.t == expected);\r\n        }\r\n        {\r\n            // Call distance(r) with: !sized_range<R>, validate that begin and end are called\r\n            unsized_test_range<nothrow::yes> r{};\r\n            assert(distance(r) == sentinel_position);\r\n            static_assert(!noexcept(distance(r))); // No conditional noexcept\r\n            trace const expected{\r\n                .compares_ = sentinel_position + 1, .increments_ = sentinel_position, .begins_ = 1, .ends_ = 1};\r\n            assert(r.t == expected);\r\n        }\r\n\r\n        {\r\n            // Call distance(i, s) with arrays which must be decayed to pointers.\r\n            // (This behavior was regressed by LWG-3392.)\r\n            int some_ints[] = {1, 2, 3};\r\n            assert(distance(some_ints, pointer_sentinel{some_ints + 1}) == 1);\r\n            static_assert(noexcept(distance(some_ints, pointer_sentinel{some_ints + 1})));\r\n            assert(distance(some_ints + 1, some_ints) == -1);\r\n            static_assert(noexcept(distance(some_ints + 1, some_ints)));\r\n            assert(distance(some_ints, some_ints) == 0);\r\n            static_assert(noexcept(distance(some_ints, some_ints)));\r\n\r\n            const auto& const_ints = some_ints;\r\n            assert(distance(const_ints, pointer_sentinel{const_ints + 1}) == 1);\r\n            static_assert(noexcept(distance(const_ints, pointer_sentinel{const_ints + 1})));\r\n            assert(distance(const_ints + 1, const_ints) == -1);\r\n            static_assert(noexcept(distance(const_ints + 1, const_ints)));\r\n            assert(distance(const_ints, const_ints) == 0);\r\n            static_assert(noexcept(distance(const_ints, const_ints)));\r\n        }\r\n\r\n        { // Test LWG-4242 \"ranges::distance does not work with volatile iterators\"\r\n            static_assert(can_call_ranges_difference<int* volatile, int[3]>);\r\n            static_assert(can_call_ranges_difference<int* volatile&, int[3]>);\r\n\r\n            // Per LWG-4303, ranges::distance should be well-constrained for non-pointer volatile iterators.\r\n            static_assert(\r\n                !can_call_ranges_difference<volatile std::reverse_iterator<int*>, std::reverse_iterator<int*>>);\r\n            static_assert(\r\n                !can_call_ranges_difference<volatile std::reverse_iterator<int*>&, std::reverse_iterator<int*>>);\r\n\r\n            if (!std::is_constant_evaluated()) {\r\n                int arr[]{1, 2, 3};\r\n                int* volatile ptr = arr;\r\n                assert(distance(ptr, arr + 3) == 3);\r\n            }\r\n        }\r\n\r\n        return true;\r\n    }\r\n    static_assert(test_distance());\r\n\r\n    void test() {\r\n        test_iter_forms();\r\n        test_iter_count_forms();\r\n        test_iter_sentinel_forms();\r\n        test_iter_count_sentinel_forms();\r\n\r\n        test_distance();\r\n    }\r\n} // namespace iter_ops\r\n\r\nnamespace insert_iterators {\r\n    template <class Container>\r\n    constexpr bool test() {\r\n        using std::back_insert_iterator, std::front_insert_iterator, std::insert_iterator;\r\n        using std::iter_difference_t, std::ptrdiff_t, std::same_as;\r\n\r\n        static_assert(same_as<iter_difference_t<back_insert_iterator<Container>>, ptrdiff_t>);\r\n        static_assert(same_as<iter_difference_t<front_insert_iterator<Container>>, ptrdiff_t>);\r\n        static_assert(same_as<iter_difference_t<insert_iterator<Container>>, ptrdiff_t>);\r\n\r\n        return true;\r\n    }\r\n\r\n    static_assert(test<std::list<double>>());\r\n    static_assert(test<std::vector<int>>());\r\n\r\n    struct container {\r\n        using value_type = int;\r\n\r\n        constexpr int* begin() {\r\n            return &value;\r\n        }\r\n        constexpr int* end() {\r\n            return &value + 1;\r\n        }\r\n        constexpr int* insert(int* ptr, int i) {\r\n            assert(ptr == &value);\r\n            value = i;\r\n            return &value;\r\n        }\r\n\r\n        int value;\r\n    };\r\n\r\n    constexpr bool test_insert_relaxation() {\r\n        // Verify that insert_iterator correctly does not require a nested `iterator` typename\r\n        container c;\r\n        std::insert_iterator i(c, c.begin());\r\n        *i = 42;\r\n        assert(c.value == 42);\r\n        return true;\r\n    }\r\n\r\n    static_assert(test_insert_relaxation());\r\n} // namespace insert_iterators\r\n\r\nnamespace reverse_iterator_test {\r\n    using std::bidirectional_iterator_tag, std::random_access_iterator_tag, std::reverse_iterator, std::same_as,\r\n        std::string, std::three_way_comparable, std::three_way_comparable_with;\r\n\r\n    // Validate the iterator_concept/iterator_category metaprogramming\r\n    static_assert(same_as<reverse_iterator<simple_contiguous_iter<>>::iterator_concept, random_access_iterator_tag>);\r\n    static_assert(same_as<reverse_iterator<simple_contiguous_iter<>>::iterator_category, random_access_iterator_tag>);\r\n    static_assert(same_as<reverse_iterator<simple_random_iter<>>::iterator_concept, random_access_iterator_tag>);\r\n    static_assert(same_as<reverse_iterator<simple_random_iter<>>::iterator_category, random_access_iterator_tag>);\r\n    static_assert(same_as<reverse_iterator<simple_bidi_iter<>>::iterator_concept, bidirectional_iterator_tag>);\r\n    static_assert(same_as<reverse_iterator<simple_bidi_iter<>>::iterator_category, bidirectional_iterator_tag>);\r\n    static_assert(same_as<reverse_iterator<xvalue_random_iter>::iterator_concept, random_access_iterator_tag>);\r\n    static_assert(same_as<reverse_iterator<xvalue_random_iter>::iterator_category, random_access_iterator_tag>);\r\n    static_assert(same_as<reverse_iterator<xvalue_bidi_iter>::iterator_concept, bidirectional_iterator_tag>);\r\n    static_assert(same_as<reverse_iterator<xvalue_bidi_iter>::iterator_category, bidirectional_iterator_tag>);\r\n\r\n    // Validate operator-> for a pointer, and for non-pointers with and without operator->()\r\n    template <class I, class P>\r\n    concept has_arrow = requires(I i) {\r\n        { i.operator->() } -> same_as<P>;\r\n    };\r\n\r\n    template <class I>\r\n    concept has_no_arrow = !requires(I i) { i.operator->(); };\r\n\r\n    static_assert(has_arrow<reverse_iterator<int*>, int*>);\r\n    static_assert(same_as<reverse_iterator<int*>::pointer, int*>);\r\n\r\n    using simple_arrow = simple_bidi_iter<arrow_base<double const*>>;\r\n    static_assert(has_arrow<reverse_iterator<simple_arrow>, double const*>);\r\n    static_assert(same_as<reverse_iterator<simple_arrow>::pointer, double const*>);\r\n\r\n    using simple_no_arrow = simple_bidi_iter<>;\r\n    static_assert(has_no_arrow<reverse_iterator<simple_no_arrow>>);\r\n    static_assert(same_as<reverse_iterator<simple_no_arrow>::pointer, void>);\r\n\r\n    // Validate comparison constraints\r\n    static_assert(has_eq<reverse_iterator<simple_bidi_iter<>>>);\r\n    static_assert(has_neq<reverse_iterator<simple_bidi_iter<>>>);\r\n    static_assert(!has_less<reverse_iterator<simple_bidi_iter<>>>);\r\n    static_assert(!has_greater<reverse_iterator<simple_bidi_iter<>>>);\r\n    static_assert(!has_less_eq<reverse_iterator<simple_bidi_iter<>>>);\r\n    static_assert(!has_greater_eq<reverse_iterator<simple_bidi_iter<>>>);\r\n    static_assert(!three_way_comparable<reverse_iterator<simple_bidi_iter<>>>);\r\n\r\n    static_assert(has_eq<reverse_iterator<simple_random_iter<>>>);\r\n    static_assert(has_neq<reverse_iterator<simple_random_iter<>>>);\r\n    static_assert(has_less<reverse_iterator<simple_random_iter<>>>);\r\n    static_assert(has_greater<reverse_iterator<simple_random_iter<>>>);\r\n    static_assert(has_less_eq<reverse_iterator<simple_random_iter<>>>);\r\n    static_assert(has_greater_eq<reverse_iterator<simple_random_iter<>>>);\r\n    static_assert(three_way_comparable<reverse_iterator<simple_random_iter<>>, std::strong_ordering>);\r\n\r\n    static_assert(has_eq<reverse_iterator<int*>, reverse_iterator<int const*>>);\r\n    static_assert(has_neq<reverse_iterator<int*>, reverse_iterator<int const*>>);\r\n    static_assert(has_less<reverse_iterator<int*>, reverse_iterator<int const*>>);\r\n    static_assert(has_greater<reverse_iterator<int*>, reverse_iterator<int const*>>);\r\n    static_assert(has_less_eq<reverse_iterator<int*>, reverse_iterator<int const*>>);\r\n    static_assert(has_greater_eq<reverse_iterator<int*>, reverse_iterator<int const*>>);\r\n    static_assert(\r\n        three_way_comparable_with<reverse_iterator<int*>, reverse_iterator<int const*>, std::strong_ordering>);\r\n\r\n    static_assert(!has_eq<reverse_iterator<int*>, reverse_iterator<string*>>);\r\n    static_assert(!has_neq<reverse_iterator<int*>, reverse_iterator<string*>>);\r\n    static_assert(!has_less<reverse_iterator<int*>, reverse_iterator<string*>>);\r\n    static_assert(!has_greater<reverse_iterator<int*>, reverse_iterator<string*>>);\r\n    static_assert(!has_less_eq<reverse_iterator<int*>, reverse_iterator<string*>>);\r\n    static_assert(!has_greater_eq<reverse_iterator<int*>, reverse_iterator<string*>>);\r\n    static_assert(!three_way_comparable_with<reverse_iterator<int*>, reverse_iterator<string*>>);\r\n\r\n    constexpr bool test() {\r\n        // Validate iter_move\r\n        int count = 0;\r\n        reverse_iterator i{proxy_iterator<0>{&count}};\r\n        assert(ranges::iter_move(i) == 42);\r\n        assert(count == 1);\r\n\r\n        // Validate iter_swap\r\n        ranges::iter_swap(i, reverse_iterator{proxy_iterator<2>{&count}});\r\n        assert(count == -1);\r\n\r\n        // Validate <=>\r\n        int some_ints[] = {3, 2, 1, 0};\r\n        reverse_iterator<int*> ri{&some_ints[1]};\r\n        reverse_iterator<int const*> ric{&some_ints[2]};\r\n        assert((ri <=> ric) == std::strong_ordering::greater);\r\n\r\n        return true;\r\n    }\r\n    static_assert(test());\r\n\r\n    // Validate disable_sized_sentinel_for partial specialization for reverse_iterator\r\n    struct weird_difference_base {\r\n        template <class T>\r\n        long operator-(T const&) const {\r\n            return 42;\r\n        }\r\n\r\n        bool operator==(weird_difference_base const&) const = default;\r\n    };\r\n    using simple_no_difference = simple_bidi_iter<weird_difference_base>;\r\n} // namespace reverse_iterator_test\r\n\r\ntemplate <>\r\ninline constexpr bool std::disable_sized_sentinel_for<reverse_iterator_test::simple_no_difference,\r\n    reverse_iterator_test::simple_no_difference> = true;\r\n\r\nnamespace reverse_iterator_test {\r\n    static_assert(!std::sized_sentinel_for<simple_no_difference, simple_no_difference>);\r\n    static_assert(\r\n        !std::sized_sentinel_for<reverse_iterator<simple_no_difference>, reverse_iterator<simple_no_difference>>);\r\n} // namespace reverse_iterator_test\r\n\r\nnamespace move_iterator_test {\r\n    using std::bidirectional_iterator_tag, std::default_sentinel_t, std::forward_iterator_tag, std::input_iterator_tag,\r\n        std::move_iterator, std::move_sentinel, std::random_access_iterator_tag, std::same_as, std::string,\r\n        std::three_way_comparable, std::three_way_comparable_with;\r\n\r\n    template <bool CanCopy>\r\n    struct input_iter {\r\n        using iterator_concept = input_iterator_tag;\r\n        using value_type       = int;\r\n        using difference_type  = int;\r\n        using pointer          = void;\r\n\r\n        struct reference {\r\n            operator int() const;\r\n            reference const& operator=(int) const;\r\n        };\r\n        struct rvalue_reference {\r\n            constexpr operator int() const noexcept {\r\n                return 42;\r\n            }\r\n        };\r\n\r\n        input_iter() = default;\r\n        input_iter(input_iter const&)\r\n            requires CanCopy\r\n        = default;\r\n        input_iter(input_iter&&) = default;\r\n        input_iter& operator=(input_iter const&)\r\n            requires CanCopy\r\n        = default;\r\n        input_iter& operator=(input_iter&&) = default;\r\n\r\n        reference operator*() const;\r\n        input_iter& operator++();\r\n        void operator++(int);\r\n\r\n        friend constexpr rvalue_reference iter_move(input_iter const&) noexcept {\r\n            return {};\r\n        }\r\n        friend void iter_swap(input_iter const&, input_iter const&) noexcept {}\r\n\r\n        friend bool operator==(input_iter const&, std::default_sentinel_t) {\r\n            return true;\r\n        }\r\n        friend int operator-(input_iter const&, std::default_sentinel_t) {\r\n            return 0;\r\n        }\r\n        friend int operator-(std::default_sentinel_t, input_iter const&) {\r\n            return 0;\r\n        }\r\n    };\r\n    struct common {\r\n        common(input_iter<false>::reference);\r\n        common(input_iter<true>::reference);\r\n        common(input_iter<false>::rvalue_reference);\r\n        common(input_iter<true>::rvalue_reference);\r\n    };\r\n} // namespace move_iterator_test\r\n\r\ntemplate <>\r\nstruct std::common_type<move_iterator_test::input_iter<false>::reference,\r\n    move_iterator_test::input_iter<false>::rvalue_reference> {\r\n    using type = move_iterator_test::common;\r\n};\r\ntemplate <>\r\nstruct std::common_type<move_iterator_test::input_iter<false>::rvalue_reference,\r\n    move_iterator_test::input_iter<false>::reference> {\r\n    using type = move_iterator_test::common;\r\n};\r\ntemplate <>\r\nstruct std::common_type<move_iterator_test::input_iter<true>::reference,\r\n    move_iterator_test::input_iter<true>::rvalue_reference> {\r\n    using type = move_iterator_test::common;\r\n};\r\ntemplate <>\r\nstruct std::common_type<move_iterator_test::input_iter<true>::rvalue_reference,\r\n    move_iterator_test::input_iter<true>::reference> {\r\n    using type = move_iterator_test::common;\r\n};\r\n\r\nnamespace move_iterator_test {\r\n    // Validate the iterator_concept/iterator_category metaprogramming\r\n    static_assert(same_as<move_iterator<simple_contiguous_iter<>>::iterator_concept, random_access_iterator_tag>);\r\n    static_assert(same_as<move_iterator<simple_contiguous_iter<>>::iterator_category, random_access_iterator_tag>);\r\n    static_assert(same_as<move_iterator<simple_random_iter<>>::iterator_concept, random_access_iterator_tag>);\r\n    static_assert(same_as<move_iterator<simple_random_iter<>>::iterator_category, random_access_iterator_tag>);\r\n    static_assert(same_as<move_iterator<simple_bidi_iter<>>::iterator_concept, bidirectional_iterator_tag>);\r\n    static_assert(same_as<move_iterator<simple_bidi_iter<>>::iterator_category, bidirectional_iterator_tag>);\r\n    static_assert(same_as<move_iterator<simple_forward_iter<>>::iterator_concept, forward_iterator_tag>);\r\n    static_assert(same_as<move_iterator<simple_forward_iter<>>::iterator_category, forward_iterator_tag>);\r\n    static_assert(same_as<move_iterator<simple_input_iter>::iterator_concept, input_iterator_tag>);\r\n    static_assert(same_as<move_iterator<simple_input_iter>::iterator_category, input_iterator_tag>);\r\n    static_assert(same_as<move_iterator<input_iter<true>>::iterator_concept, input_iterator_tag>);\r\n    static_assert(same_as<move_iterator<xvalue_random_iter>::iterator_concept, random_access_iterator_tag>);\r\n    static_assert(same_as<move_iterator<xvalue_random_iter>::iterator_category, random_access_iterator_tag>);\r\n    static_assert(same_as<move_iterator<xvalue_bidi_iter>::iterator_concept, bidirectional_iterator_tag>);\r\n    static_assert(same_as<move_iterator<xvalue_bidi_iter>::iterator_category, bidirectional_iterator_tag>);\r\n    static_assert(same_as<move_iterator<xvalue_forward_iter>::iterator_concept, forward_iterator_tag>);\r\n    static_assert(same_as<move_iterator<xvalue_forward_iter>::iterator_category, forward_iterator_tag>);\r\n    static_assert(!has_member_iter_category<move_iterator<input_iter<true>>>);\r\n    static_assert(same_as<move_iterator<input_iter<false>>::iterator_concept, input_iterator_tag>);\r\n    static_assert(!has_member_iter_category<move_iterator<input_iter<false>>>);\r\n\r\n    // Validate that move_iterator<some_proxy_iterator>::reference is iter_rvalue_reference_t<some_proxy_iterator>\r\n    static_assert(same_as<move_iterator<input_iter<false>>::reference, input_iter<false>::rvalue_reference>);\r\n\r\n    // Validate that postincrement returns void for single-pass adaptees\r\n    static_assert(same_as<decltype(move_iterator<input_iter<false>> {} ++), void>);\r\n    static_assert(same_as<decltype(move_iterator<simple_forward_iter<>> {} ++), move_iterator<simple_forward_iter<>>>);\r\n\r\n    // Validate comparison constraints\r\n    static_assert(!has_eq<move_iterator<input_iter<false>>>);\r\n    static_assert(!has_neq<move_iterator<input_iter<false>>>);\r\n    static_assert(!has_less<move_iterator<input_iter<false>>>);\r\n    static_assert(!has_greater<move_iterator<input_iter<false>>>);\r\n    static_assert(!has_less_eq<move_iterator<input_iter<false>>>);\r\n    static_assert(!has_greater_eq<move_iterator<input_iter<false>>>);\r\n    static_assert(!three_way_comparable<move_iterator<input_iter<false>>>);\r\n\r\n    static_assert(has_eq<move_iterator<simple_forward_iter<>>>);\r\n    static_assert(has_neq<move_iterator<simple_forward_iter<>>>);\r\n    static_assert(!has_less<move_iterator<simple_forward_iter<>>>);\r\n    static_assert(!has_greater<move_iterator<simple_forward_iter<>>>);\r\n    static_assert(!has_less_eq<move_iterator<simple_forward_iter<>>>);\r\n    static_assert(!has_greater_eq<move_iterator<simple_forward_iter<>>>);\r\n    static_assert(!three_way_comparable<move_iterator<simple_forward_iter<>>>);\r\n\r\n    static_assert(has_eq<move_iterator<simple_random_iter<>>>);\r\n    static_assert(has_neq<move_iterator<simple_random_iter<>>>);\r\n    static_assert(has_less<move_iterator<simple_random_iter<>>>);\r\n    static_assert(has_greater<move_iterator<simple_random_iter<>>>);\r\n    static_assert(has_less_eq<move_iterator<simple_random_iter<>>>);\r\n    static_assert(has_greater_eq<move_iterator<simple_random_iter<>>>);\r\n    static_assert(three_way_comparable<move_iterator<simple_random_iter<>>, std::strong_ordering>);\r\n\r\n    static_assert(has_eq<move_iterator<int*>, move_iterator<int const*>>);\r\n    static_assert(has_neq<move_iterator<int*>, move_iterator<int const*>>);\r\n    static_assert(has_less<move_iterator<int*>, move_iterator<int const*>>);\r\n    static_assert(has_greater<move_iterator<int*>, move_iterator<int const*>>);\r\n    static_assert(has_less_eq<move_iterator<int*>, move_iterator<int const*>>);\r\n    static_assert(has_greater_eq<move_iterator<int*>, move_iterator<int const*>>);\r\n    static_assert(three_way_comparable_with<move_iterator<int*>, move_iterator<int const*>, std::strong_ordering>);\r\n\r\n    static_assert(!has_eq<move_iterator<int*>, move_iterator<string*>>);\r\n    static_assert(!has_neq<move_iterator<int*>, move_iterator<string*>>);\r\n    static_assert(!has_less<move_iterator<int*>, move_iterator<string*>>);\r\n    static_assert(!has_greater<move_iterator<int*>, move_iterator<string*>>);\r\n    static_assert(!has_less_eq<move_iterator<int*>, move_iterator<string*>>);\r\n    static_assert(!has_greater_eq<move_iterator<int*>, move_iterator<string*>>);\r\n    static_assert(!three_way_comparable_with<move_iterator<int*>, move_iterator<string*>>);\r\n\r\n    // Validate that move_sentinel requires a semiregular template argument, and models semiregular\r\n    template <class T>\r\n    concept CanMoveSentinel = requires { typename move_sentinel<T>; };\r\n    struct moveonly {\r\n        moveonly()                      = default;\r\n        moveonly(moveonly&&)            = default;\r\n        moveonly& operator=(moveonly&&) = default;\r\n    };\r\n    static_assert(!CanMoveSentinel<void>);\r\n    static_assert(!CanMoveSentinel<moveonly>);\r\n    static_assert(CanMoveSentinel<int>);\r\n    static_assert(CanMoveSentinel<default_sentinel_t>);\r\n\r\n    // Validate move_sentinel comparisons and difference\r\n    static_assert(!has_eq<move_iterator<input_iter<false>>, move_sentinel<int>>);\r\n    static_assert(!has_neq<move_iterator<input_iter<false>>, move_sentinel<int>>);\r\n    static_assert(!has_less<move_iterator<input_iter<false>>, move_sentinel<int>>);\r\n    static_assert(!has_greater<move_iterator<input_iter<false>>, move_sentinel<int>>);\r\n    static_assert(!has_less_eq<move_iterator<input_iter<false>>, move_sentinel<int>>);\r\n    static_assert(!has_greater_eq<move_iterator<input_iter<false>>, move_sentinel<int>>);\r\n    static_assert(!three_way_comparable_with<move_iterator<input_iter<false>>, move_sentinel<int>>);\r\n    static_assert(!has_difference<move_iterator<input_iter<false>>, move_sentinel<int>>);\r\n    static_assert(!has_difference<move_sentinel<int>, move_iterator<input_iter<false>>>);\r\n\r\n    static_assert(has_eq<move_iterator<input_iter<false>>, move_sentinel<std::default_sentinel_t>>);\r\n    static_assert(has_neq<move_iterator<input_iter<false>>, move_sentinel<std::default_sentinel_t>>);\r\n    static_assert(!has_less<move_iterator<input_iter<false>>, move_sentinel<std::default_sentinel_t>>);\r\n    static_assert(!has_greater<move_iterator<input_iter<false>>, move_sentinel<std::default_sentinel_t>>);\r\n    static_assert(!has_less_eq<move_iterator<input_iter<false>>, move_sentinel<std::default_sentinel_t>>);\r\n    static_assert(!has_greater_eq<move_iterator<input_iter<false>>, move_sentinel<std::default_sentinel_t>>);\r\n    static_assert(!three_way_comparable_with<move_iterator<input_iter<false>>, move_sentinel<std::default_sentinel_t>>);\r\n    static_assert(has_difference<move_iterator<input_iter<false>>, move_sentinel<std::default_sentinel_t>>);\r\n    static_assert(has_difference<move_sentinel<std::default_sentinel_t>, move_iterator<input_iter<false>>>);\r\n\r\n    static_assert(has_eq<move_iterator<simple_random_iter<sentinel_base>>, move_sentinel<std::default_sentinel_t>>);\r\n    static_assert(has_neq<move_iterator<simple_random_iter<sentinel_base>>, move_sentinel<std::default_sentinel_t>>);\r\n    static_assert(!has_less<move_iterator<simple_random_iter<sentinel_base>>, move_sentinel<std::default_sentinel_t>>);\r\n    static_assert(\r\n        !has_greater<move_iterator<simple_random_iter<sentinel_base>>, move_sentinel<std::default_sentinel_t>>);\r\n    static_assert(\r\n        !has_less_eq<move_iterator<simple_random_iter<sentinel_base>>, move_sentinel<std::default_sentinel_t>>);\r\n    static_assert(\r\n        !has_greater_eq<move_iterator<simple_random_iter<sentinel_base>>, move_sentinel<std::default_sentinel_t>>);\r\n    static_assert(!three_way_comparable<move_iterator<simple_random_iter<sentinel_base>>,\r\n        move_sentinel<std::default_sentinel_t>>);\r\n\r\n    // GH-3014 \"<ranges>: list-initialization is misused\"\r\n    void test_gh_3014() { // COMPILE-ONLY\r\n        using S = test::init_list_not_constructible_sentinel<int>;\r\n        S s;\r\n        [[maybe_unused]] move_sentinel<S> y{s}; // Check 'move_sentinel(S s)'\r\n\r\n        move_sentinel<int*> s2;\r\n        [[maybe_unused]] move_sentinel<S> z{s2}; // Check 'move_sentinel(const move_sentinel<S2>& s2)'\r\n    }\r\n\r\n    constexpr bool test() {\r\n        // Validate iter_move\r\n        int count = 0;\r\n        move_iterator i{proxy_iterator<0>{&count}};\r\n        assert(ranges::iter_move(i) == 42);\r\n        assert(count == 1);\r\n\r\n        // Validate that operator* and operator[] call iter_move\r\n        assert(*i == 42);\r\n        assert(count == 2);\r\n        assert(i[42] == 42);\r\n        assert(count == 3);\r\n\r\n        // Validate iter_swap\r\n        ranges::iter_swap(i, move_iterator{proxy_iterator<2>{&count}});\r\n        assert(count == 1);\r\n\r\n        // Validate <=>\r\n        int some_ints[] = {3, 2, 1, 0};\r\n        move_iterator<int*> mi{&some_ints[1]};\r\n        move_iterator<int const*> mic{&some_ints[2]};\r\n        assert((mi <=> mi) == std::strong_ordering::equal);\r\n        assert((mi <=> mic) == std::strong_ordering::less);\r\n        assert((mic <=> mi) == std::strong_ordering::greater);\r\n\r\n        return true;\r\n    }\r\n    static_assert(test());\r\n\r\n    // Validate disable_sized_sentinel_for partial specialization for move_iterator (LWG-3736)\r\n    struct weird_difference_base {\r\n        template <class T>\r\n        long operator-(T const&) const {\r\n            return 42;\r\n        }\r\n\r\n        bool operator==(weird_difference_base const&) const = default;\r\n    };\r\n    using simple_no_difference = simple_bidi_iter<weird_difference_base>;\r\n} // namespace move_iterator_test\r\n\r\ntemplate <>\r\ninline constexpr bool std::disable_sized_sentinel_for<move_iterator_test::simple_no_difference,\r\n    move_iterator_test::simple_no_difference> = true;\r\n\r\nnamespace move_iterator_test {\r\n    static_assert(!std::sized_sentinel_for<simple_no_difference, simple_no_difference>);\r\n    static_assert(!std::sized_sentinel_for<move_iterator<simple_no_difference>, move_iterator<simple_no_difference>>);\r\n} // namespace move_iterator_test\r\n\r\nnamespace counted_iterator_test {\r\n    using std::bidirectional_iterator_tag, std::default_sentinel_t, std::forward_iterator_tag, std::input_iterator_tag,\r\n        std::iterator_traits, std::counted_iterator, std::random_access_iterator_tag, std::same_as, std::string,\r\n        std::three_way_comparable, std::three_way_comparable_with;\r\n\r\n    // Validate the iterator_concept/iterator_category metaprogramming\r\n    static_assert(same_as<iterator_traits<counted_iterator<simple_contiguous_iter<>>>::iterator_category,\r\n        random_access_iterator_tag>);\r\n    static_assert(same_as<iterator_traits<counted_iterator<simple_random_iter<>>>::iterator_category,\r\n        random_access_iterator_tag>);\r\n    static_assert(\r\n        same_as<iterator_traits<counted_iterator<simple_bidi_iter<>>>::iterator_category, bidirectional_iterator_tag>);\r\n    static_assert(\r\n        same_as<iterator_traits<counted_iterator<simple_forward_iter<>>>::iterator_category, forward_iterator_tag>);\r\n    static_assert(same_as<iterator_traits<counted_iterator<simple_input_iter>>::iterator_category, input_iterator_tag>);\r\n    static_assert(\r\n        same_as<iterator_traits<counted_iterator<xvalue_random_iter>>::iterator_category, random_access_iterator_tag>);\r\n    static_assert(\r\n        same_as<iterator_traits<counted_iterator<xvalue_bidi_iter>>::iterator_category, bidirectional_iterator_tag>);\r\n    static_assert(\r\n        same_as<iterator_traits<counted_iterator<xvalue_forward_iter>>::iterator_category, forward_iterator_tag>);\r\n\r\n    // Validate postincrement\r\n    static_assert(same_as<decltype(std::declval<counted_iterator<simple_input_iter>&>()++), simple_input_iter>);\r\n    static_assert(\r\n        same_as<decltype(counted_iterator<simple_forward_iter<>> {} ++), counted_iterator<simple_forward_iter<>>>);\r\n\r\n    // Validate comparison constraints\r\n    static_assert(has_eq<counted_iterator<simple_input_iter>>);\r\n    static_assert(has_neq<counted_iterator<simple_input_iter>>);\r\n    static_assert(has_less<counted_iterator<simple_input_iter>>);\r\n    static_assert(has_greater<counted_iterator<simple_input_iter>>);\r\n    static_assert(has_less_eq<counted_iterator<simple_input_iter>>);\r\n    static_assert(has_greater_eq<counted_iterator<simple_input_iter>>);\r\n    static_assert(three_way_comparable<counted_iterator<simple_input_iter>>);\r\n\r\n    static_assert(has_eq<counted_iterator<simple_forward_iter<>>>);\r\n    static_assert(has_neq<counted_iterator<simple_forward_iter<>>>);\r\n    static_assert(has_less<counted_iterator<simple_forward_iter<>>>);\r\n    static_assert(has_greater<counted_iterator<simple_forward_iter<>>>);\r\n    static_assert(has_less_eq<counted_iterator<simple_forward_iter<>>>);\r\n    static_assert(has_greater_eq<counted_iterator<simple_forward_iter<>>>);\r\n    static_assert(three_way_comparable<counted_iterator<simple_forward_iter<>>>);\r\n\r\n    static_assert(has_eq<counted_iterator<simple_random_iter<>>>);\r\n    static_assert(has_neq<counted_iterator<simple_random_iter<>>>);\r\n    static_assert(has_less<counted_iterator<simple_random_iter<>>>);\r\n    static_assert(has_greater<counted_iterator<simple_random_iter<>>>);\r\n    static_assert(has_less_eq<counted_iterator<simple_random_iter<>>>);\r\n    static_assert(has_greater_eq<counted_iterator<simple_random_iter<>>>);\r\n    static_assert(three_way_comparable<counted_iterator<simple_random_iter<>>, std::strong_ordering>);\r\n\r\n    static_assert(has_eq<counted_iterator<int*>, counted_iterator<int const*>>);\r\n    static_assert(has_neq<counted_iterator<int*>, counted_iterator<int const*>>);\r\n    static_assert(has_less<counted_iterator<int*>, counted_iterator<int const*>>);\r\n    static_assert(has_greater<counted_iterator<int*>, counted_iterator<int const*>>);\r\n    static_assert(has_less_eq<counted_iterator<int*>, counted_iterator<int const*>>);\r\n    static_assert(has_greater_eq<counted_iterator<int*>, counted_iterator<int const*>>);\r\n    static_assert(\r\n        three_way_comparable_with<counted_iterator<int*>, counted_iterator<int const*>, std::strong_ordering>);\r\n\r\n    static_assert(!has_eq<counted_iterator<int*>, counted_iterator<string*>>);\r\n    static_assert(!has_neq<counted_iterator<int*>, counted_iterator<string*>>);\r\n    static_assert(!has_less<counted_iterator<int*>, counted_iterator<string*>>);\r\n    static_assert(!has_greater<counted_iterator<int*>, counted_iterator<string*>>);\r\n    static_assert(!has_less_eq<counted_iterator<int*>, counted_iterator<string*>>);\r\n    static_assert(!has_greater_eq<counted_iterator<int*>, counted_iterator<string*>>);\r\n    static_assert(!three_way_comparable_with<counted_iterator<int*>, counted_iterator<string*>>);\r\n\r\n    // Validate default_sentinel_t comparisons and difference\r\n    static_assert(has_eq<counted_iterator<simple_input_iter>, default_sentinel_t>);\r\n    static_assert(has_neq<counted_iterator<simple_input_iter>, default_sentinel_t>);\r\n    static_assert(!has_less<counted_iterator<simple_input_iter>, default_sentinel_t>);\r\n    static_assert(!has_greater<counted_iterator<simple_input_iter>, default_sentinel_t>);\r\n    static_assert(!has_less_eq<counted_iterator<simple_input_iter>, default_sentinel_t>);\r\n    static_assert(!has_greater_eq<counted_iterator<simple_input_iter>, default_sentinel_t>);\r\n    static_assert(!three_way_comparable_with<counted_iterator<simple_input_iter>, default_sentinel_t>);\r\n    static_assert(has_difference<counted_iterator<simple_input_iter>, default_sentinel_t>);\r\n    static_assert(has_difference<default_sentinel_t, counted_iterator<simple_input_iter>>);\r\n} // namespace counted_iterator_test\r\n\r\nnamespace lwg3420 {\r\n    // Validate that we can ask for the iterator_traits of a type with no operator* for which checking copyability\r\n    // results in constraint recursion.\r\n    struct X {\r\n        X() = default;\r\n        template <std::copyable T>\r\n        X(T const&);\r\n    };\r\n    static_assert(!has_member_iter_concept<std::iterator_traits<X>>);\r\n    static_assert(!has_member_iter_category<std::iterator_traits<X>>);\r\n    static_assert(!has_member_difference_type<std::iterator_traits<X>>);\r\n    static_assert(!has_member_value_type<std::iterator_traits<X>>);\r\n} // namespace lwg3420\r\n\r\nnamespace vso1121031 {\r\n    // Validate that indirectly_readable_traits accepts type arguments with both value_type and element_type nested\r\n    // types if they are consistent.\r\n    using std::indirectly_readable_traits, std::same_as;\r\n\r\n    template <class Element>\r\n    struct iterish {\r\n        using value_type   = int;\r\n        using element_type = Element;\r\n    };\r\n    static_assert(same_as<indirectly_readable_traits<iterish<int>>::value_type, int>);\r\n    static_assert(same_as<indirectly_readable_traits<iterish<int const>>::value_type, int>);\r\n    static_assert(same_as<indirectly_readable_traits<iterish<int volatile>>::value_type, int>);\r\n    static_assert(same_as<indirectly_readable_traits<iterish<int const volatile>>::value_type, int>);\r\n\r\n    static_assert(!has_member_value_type<indirectly_readable_traits<iterish<float>>>);\r\n    static_assert(!has_member_value_type<indirectly_readable_traits<iterish<float const>>>);\r\n    static_assert(!has_member_value_type<indirectly_readable_traits<iterish<float volatile>>>);\r\n    static_assert(!has_member_value_type<indirectly_readable_traits<iterish<float const volatile>>>);\r\n} // namespace vso1121031\r\n\r\nint main() {\r\n    iterator_cust_swap_test::test();\r\n    iter_ops::test();\r\n    reverse_iterator_test::test();\r\n    move_iterator_test::test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_range_machinery/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_range_machinery/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <compare>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <filesystem>\r\n#include <forward_list>\r\n#include <initializer_list>\r\n#include <iostream>\r\n#include <iterator>\r\n#include <list>\r\n#include <map>\r\n#include <ranges>\r\n#include <set>\r\n#include <span>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <valarray>\r\n#include <vector>\r\n\r\n#if _HAS_CXX23\r\n#include <flat_map>\r\n#include <flat_set>\r\n#endif // _HAS_CXX23\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\n// Note that many tests herein assume:\r\nstatic_assert(std::same_as<std::make_unsigned_t<std::ptrdiff_t>, std::size_t>);\r\n\r\n// GH-2358: <filesystem>: path's comparison operators are IF-NDR\r\nstatic_assert(ranges::range<std::filesystem::path>);\r\nstatic_assert(ranges::range<const std::filesystem::path>);\r\n\r\ntemplate <class T>\r\nconcept Decayed = std::same_as<std::decay_t<T>, T>;\r\n\r\ntemplate <class R>\r\nconcept CanSizeType = requires { typename ranges::range_size_t<R>; };\r\n\r\nstruct invalid_type {};\r\n\r\ntemplate <class T>\r\nconstexpr bool is_valid = !std::same_as<T, invalid_type>;\r\n\r\n// Validate properties common to all Customization Point Objects (CPOs)\r\ntemplate <class T>\r\nconstexpr bool test_cpo(T const& obj) {\r\n    static_assert(std::semiregular<T>);\r\n\r\n    // Not required, but likely portable nonetheless:\r\n    static_assert(std::is_empty_v<T>);\r\n    static_assert(std::is_trivially_copyable_v<T>);\r\n    static_assert(std::is_nothrow_destructible_v<T>);\r\n    static_assert(std::is_nothrow_default_constructible_v<T>);\r\n    static_assert(std::is_trivially_default_constructible_v<T>);\r\n    static_assert(std::is_nothrow_copy_constructible_v<T>);\r\n    static_assert(std::is_trivially_copy_constructible_v<T>);\r\n    static_assert(std::is_nothrow_move_constructible_v<T>);\r\n    static_assert(std::is_trivially_move_constructible_v<T>);\r\n    static_assert(std::is_nothrow_copy_assignable_v<T>);\r\n    static_assert(std::is_trivially_copy_assignable_v<T>);\r\n    static_assert(std::is_nothrow_move_assignable_v<T>);\r\n    static_assert(std::is_trivially_move_assignable_v<T>);\r\n\r\n    // Not required to be constant expressions, but likely portable nonetheless:\r\n    [[maybe_unused]] T value_initialized{};\r\n    T copy_constructed = obj;\r\n    T move_constructed = std::move(copy_constructed);\r\n    copy_constructed   = std::move(move_constructed);\r\n    move_constructed   = copy_constructed;\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(test_cpo(std::strong_order));\r\nstatic_assert(test_cpo(std::weak_order));\r\nstatic_assert(test_cpo(std::partial_order));\r\nstatic_assert(test_cpo(std::compare_strong_order_fallback));\r\nstatic_assert(test_cpo(std::compare_weak_order_fallback));\r\nstatic_assert(test_cpo(std::compare_partial_order_fallback));\r\n\r\nstatic_assert(test_cpo(ranges::swap));\r\nstatic_assert(test_cpo(ranges::iter_swap));\r\nstatic_assert(test_cpo(ranges::iter_move));\r\nstatic_assert(test_cpo(ranges::begin));\r\nstatic_assert(test_cpo(ranges::end));\r\nstatic_assert(test_cpo(ranges::cbegin));\r\nstatic_assert(test_cpo(ranges::cend));\r\nstatic_assert(test_cpo(ranges::rbegin));\r\nstatic_assert(test_cpo(ranges::rend));\r\nstatic_assert(test_cpo(ranges::crbegin));\r\nstatic_assert(test_cpo(ranges::crend));\r\nstatic_assert(test_cpo(ranges::size));\r\nstatic_assert(test_cpo(ranges::ssize));\r\nstatic_assert(test_cpo(ranges::empty));\r\nstatic_assert(test_cpo(ranges::data));\r\nstatic_assert(test_cpo(ranges::cdata));\r\n\r\nstatic_assert(test_cpo(ranges::views::all));\r\nstatic_assert(test_cpo(ranges::views::common));\r\nstatic_assert(test_cpo(ranges::views::counted));\r\nstatic_assert(test_cpo(ranges::views::drop));\r\nstatic_assert(test_cpo(ranges::views::drop_while));\r\nstatic_assert(test_cpo(ranges::views::elements<42>));\r\nstatic_assert(test_cpo(ranges::views::filter));\r\nstatic_assert(test_cpo(ranges::views::iota));\r\nstatic_assert(test_cpo(ranges::views::istream<int>));\r\nstatic_assert(test_cpo(ranges::views::istream<double>));\r\nstatic_assert(test_cpo(ranges::views::join));\r\nstatic_assert(test_cpo(ranges::views::keys));\r\nstatic_assert(test_cpo(ranges::views::lazy_split));\r\nstatic_assert(test_cpo(ranges::views::reverse));\r\nstatic_assert(test_cpo(ranges::views::single));\r\nstatic_assert(test_cpo(ranges::views::split));\r\nstatic_assert(test_cpo(ranges::views::take));\r\nstatic_assert(test_cpo(ranges::views::take_while));\r\nstatic_assert(test_cpo(ranges::views::transform));\r\nstatic_assert(test_cpo(ranges::views::values));\r\n\r\n#if _HAS_CXX23\r\nstatic_assert(test_cpo(ranges::views::adjacent<3>));\r\nstatic_assert(test_cpo(ranges::views::adjacent_transform<3>));\r\nstatic_assert(test_cpo(ranges::views::as_const));\r\nstatic_assert(test_cpo(ranges::views::as_rvalue));\r\nstatic_assert(test_cpo(ranges::views::cartesian_product));\r\nstatic_assert(test_cpo(ranges::views::chunk));\r\nstatic_assert(test_cpo(ranges::views::chunk_by));\r\nstatic_assert(test_cpo(ranges::views::enumerate));\r\nstatic_assert(test_cpo(ranges::views::join_with));\r\nstatic_assert(test_cpo(ranges::views::pairwise));\r\nstatic_assert(test_cpo(ranges::views::pairwise_transform));\r\nstatic_assert(test_cpo(ranges::views::repeat));\r\nstatic_assert(test_cpo(ranges::views::slide));\r\nstatic_assert(test_cpo(ranges::views::stride));\r\nstatic_assert(test_cpo(ranges::views::zip));\r\nstatic_assert(test_cpo(ranges::views::zip_transform));\r\n#endif // _HAS_CXX23\r\n\r\nvoid test_cpo_ambiguity() {\r\n    using namespace std::ranges;\r\n\r\n    // This type is *really* associated with namespace std:\r\n    std::vector<std::reverse_iterator<int*>> vri{};\r\n\r\n    // Verify that unqualified lookup is unambiguous:\r\n    (void) begin(vri);\r\n    (void) end(vri);\r\n    (void) cbegin(vri);\r\n    (void) cend(vri);\r\n    (void) rbegin(vri);\r\n    (void) rend(vri);\r\n    (void) crbegin(vri);\r\n    (void) crend(vri);\r\n    (void) size(vri);\r\n    (void) ssize(vri);\r\n    (void) empty(vri);\r\n    (void) data(vri);\r\n    (void) cdata(vri);\r\n}\r\n\r\ntemplate <class Range, class Iterator = invalid_type>\r\nconstexpr bool test_begin() {\r\n    // Validate ranges::begin(std::declval<Range>()) and ranges::iterator_t<Range>\r\n    static_assert(Decayed<Iterator>);\r\n    static_assert(!is_valid<Iterator> || std::input_or_output_iterator<Iterator>);\r\n\r\n    static_assert(CanBegin<Range> == is_valid<Iterator>);\r\n    if constexpr (is_valid<Iterator>) {\r\n        static_assert(std::same_as<decltype(ranges::begin(std::declval<Range>())), Iterator>);\r\n        static_assert(std::same_as<ranges::iterator_t<Range>, Iterator>);\r\n        static_assert(std::same_as<ranges::iterator_t<Range&>, Iterator>);\r\n        static_assert(std::same_as<ranges::iterator_t<Range&&>, Iterator>);\r\n    } else {\r\n        static_assert(!CanCBegin<Range>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Range, class Iterator = invalid_type>\r\nconstexpr bool test_cbegin() {\r\n    // Validate ranges::cbegin\r\n    static_assert(Decayed<Iterator>);\r\n    static_assert(!is_valid<Iterator> || std::input_or_output_iterator<Iterator>);\r\n\r\n    static_assert(CanCBegin<Range> == is_valid<Iterator>);\r\n    if constexpr (is_valid<Iterator>) {\r\n        static_assert(std::same_as<decltype(ranges::cbegin(std::declval<Range>())), Iterator>);\r\n\r\n        static_assert(CanBegin<Range>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Range, class Iterator = invalid_type>\r\nconstexpr bool test_rbegin() {\r\n    // Validate ranges::rbegin\r\n    static_assert(Decayed<Iterator>);\r\n    static_assert(!is_valid<Iterator> || std::input_or_output_iterator<Iterator>);\r\n\r\n    static_assert(CanRBegin<Range> == is_valid<Iterator>);\r\n    if constexpr (is_valid<Iterator>) {\r\n        static_assert(std::same_as<decltype(ranges::rbegin(std::declval<Range>())), Iterator>);\r\n    } else {\r\n        static_assert(!CanCRBegin<Range>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Range, class Iterator = invalid_type>\r\nconstexpr bool test_crbegin() {\r\n    // Validate ranges::crbegin\r\n    static_assert(Decayed<Iterator>);\r\n    static_assert(!is_valid<Iterator> || std::input_or_output_iterator<Iterator>);\r\n\r\n    static_assert(CanCRBegin<Range> == is_valid<Iterator>);\r\n    if constexpr (is_valid<Iterator>) {\r\n        static_assert(std::same_as<decltype(ranges::crbegin(std::declval<Range>())), Iterator>);\r\n\r\n        static_assert(CanRBegin<Range>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Range, class Sentinel = invalid_type>\r\nconstexpr bool test_end() {\r\n    // Validate ranges::end and ranges::sentinel_t\r\n    static_assert(Decayed<Sentinel>);\r\n    static_assert(std::semiregular<Sentinel>);\r\n\r\n    static_assert(CanEnd<Range> == is_valid<Sentinel>);\r\n    if constexpr (is_valid<Sentinel>) {\r\n        static_assert(std::same_as<decltype(ranges::end(std::declval<Range>())), Sentinel>);\r\n        static_assert(std::same_as<ranges::sentinel_t<Range>, Sentinel>);\r\n        static_assert(std::same_as<ranges::sentinel_t<Range&>, Sentinel>);\r\n        static_assert(std::same_as<ranges::sentinel_t<Range&&>, Sentinel>);\r\n\r\n        using Iterator = decltype(ranges::begin(std::declval<Range>()));\r\n        static_assert(std::sentinel_for<Sentinel, Iterator>);\r\n\r\n        // Validate ranges::range and ranges::common_range\r\n        static_assert(ranges::range<Range>);\r\n        static_assert(ranges::common_range<Range> == std::same_as<Iterator, Sentinel>);\r\n\r\n        // Validate ranges::range_difference_t and ranges::range_reference_t\r\n        using Difference = std::iter_difference_t<Iterator>;\r\n        static_assert(std::same_as<ranges::range_difference_t<Range>, Difference>);\r\n        static_assert(std::same_as<ranges::range_difference_t<Range&>, Difference>);\r\n        static_assert(std::same_as<ranges::range_difference_t<Range&&>, Difference>);\r\n\r\n        using Reference = std::iter_reference_t<Iterator>;\r\n        static_assert(std::same_as<ranges::range_reference_t<Range>, Reference>);\r\n        static_assert(std::same_as<ranges::range_reference_t<Range&>, Reference>);\r\n        static_assert(std::same_as<ranges::range_reference_t<Range&&>, Reference>);\r\n    } else {\r\n        static_assert(!CanCEnd<Range>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Range, class Sentinel = invalid_type>\r\nconstexpr bool test_cend() {\r\n    // Validate ranges::cend\r\n    static_assert(Decayed<Sentinel>);\r\n    static_assert(std::semiregular<Sentinel>);\r\n\r\n    static_assert(CanCEnd<Range> == is_valid<Sentinel>);\r\n    if constexpr (is_valid<Sentinel>) {\r\n        static_assert(std::same_as<decltype(ranges::cend(std::declval<Range>())), Sentinel>);\r\n\r\n        using Iterator = decltype(ranges::cbegin(std::declval<Range>()));\r\n        static_assert(std::sentinel_for<Sentinel, Iterator>);\r\n\r\n        static_assert(CanEnd<Range>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Range, class Sentinel = invalid_type>\r\nconstexpr bool test_rend() {\r\n    // Validate ranges::rend\r\n    static_assert(Decayed<Sentinel>);\r\n    static_assert(std::semiregular<Sentinel>);\r\n\r\n    static_assert(CanREnd<Range> == is_valid<Sentinel>);\r\n    if constexpr (is_valid<Sentinel>) {\r\n        static_assert(std::same_as<decltype(ranges::rend(std::declval<Range>())), Sentinel>);\r\n\r\n        using Iterator = decltype(ranges::rbegin(std::declval<Range>()));\r\n        static_assert(std::sentinel_for<Sentinel, Iterator>);\r\n    } else {\r\n        static_assert(!CanCREnd<Range>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Range, class Sentinel = invalid_type>\r\nconstexpr bool test_crend() {\r\n    // Validate ranges::crend\r\n    static_assert(Decayed<Sentinel>);\r\n    static_assert(std::semiregular<Sentinel>);\r\n\r\n    static_assert(CanCREnd<Range> == is_valid<Sentinel>);\r\n    if constexpr (is_valid<Sentinel>) {\r\n        static_assert(std::same_as<decltype(ranges::crend(std::declval<Range>())), Sentinel>);\r\n\r\n        using Iterator = decltype(ranges::crbegin(std::declval<Range>()));\r\n        static_assert(std::sentinel_for<Sentinel, Iterator>);\r\n\r\n        static_assert(CanREnd<Range>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Range, bool Emptyable>\r\nconstexpr bool test_empty() {\r\n    // Validate ranges::empty\r\n    static_assert(CanEmpty<Range> == Emptyable);\r\n    if constexpr (Emptyable) {\r\n        static_assert(std::same_as<decltype(ranges::empty(std::declval<Range>())), bool>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Range, class Size = invalid_type>\r\nconstexpr bool test_size() {\r\n    // Validate ranges::size, ranges::sized_range, and ranges::ssize\r\n    static_assert(!is_valid<Size> || std::integral<Size>);\r\n\r\n    static_assert(CanSize<Range> == is_valid<Size>);\r\n    static_assert(CanSSize<Range> == is_valid<Size>);\r\n    static_assert(CanSizeType<Range> == is_valid<Size>);\r\n    static_assert(ranges::sized_range<Range> == is_valid<Size>);\r\n    if constexpr (is_valid<Size>) {\r\n        static_assert(std::same_as<decltype(ranges::size(std::declval<Range>())), Size>);\r\n        static_assert(std::same_as<ranges::range_size_t<Range>, Size>);\r\n\r\n        using SignedSize = std::common_type_t<std::ptrdiff_t, std::make_signed_t<Size>>;\r\n        static_assert(std::same_as<decltype(ranges::ssize(std::declval<Range>())), SignedSize>);\r\n\r\n        static_assert(CanEmpty<Range>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Range, class Pointer = invalid_type>\r\nconstexpr bool test_data() {\r\n    // Validate ranges::data\r\n    static_assert(!is_valid<Pointer> || std::is_pointer_v<Pointer>);\r\n\r\n    static_assert(CanData<Range> == is_valid<Pointer>);\r\n    if constexpr (is_valid<Pointer>) {\r\n        static_assert(std::same_as<decltype(ranges::data(std::declval<Range>())), Pointer>);\r\n        static_assert(std::same_as<ranges::range_value_t<Range>, std::remove_cv_t<std::remove_pointer_t<Pointer>>>);\r\n    } else {\r\n        static_assert(!CanCData<Range>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Range, class Pointer = invalid_type>\r\nconstexpr bool test_cdata() {\r\n    // Validate ranges::cdata\r\n    static_assert(!is_valid<Pointer> || std::is_pointer_v<Pointer>);\r\n\r\n    static_assert(CanCData<Range> == is_valid<Pointer>);\r\n    if constexpr (is_valid<Pointer>) {\r\n        static_assert(std::same_as<decltype(ranges::cdata(std::declval<Range>())), Pointer>);\r\n        static_assert(std::same_as<ranges::range_value_t<Range>, std::remove_cv_t<std::remove_pointer_t<Pointer>>>);\r\n\r\n        static_assert(CanData<Range>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class NonRange>\r\nconstexpr bool test_non_range() {\r\n    // Validate ranges::range, ranges::sized_range, and ranges::view\r\n    static_assert(!ranges::range<NonRange>);\r\n    static_assert(!CanEnd<NonRange>);\r\n    static_assert(!CanCEnd<NonRange>);\r\n    static_assert(!ranges::sized_range<NonRange>);\r\n    static_assert(!ranges::view<NonRange>);\r\n    return true;\r\n}\r\n\r\ntemplate <class Range>\r\nconstexpr bool test_input_range() {\r\n    // Validate ranges::range and ranges::input_range\r\n    static_assert(ranges::range<Range>);\r\n    using Iterator = ranges::iterator_t<Range>;\r\n    static_assert(std::input_iterator<Iterator>);\r\n    static_assert(ranges::input_range<Range>);\r\n\r\n    // Validate ranges::range_value_t and ranges::range_rvalue_reference_t\r\n    using Value = std::iter_value_t<Iterator>;\r\n    static_assert(std::same_as<ranges::range_value_t<Range>, Value>);\r\n    static_assert(std::same_as<ranges::range_value_t<Range&>, Value>);\r\n    static_assert(std::same_as<ranges::range_value_t<Range&&>, Value>);\r\n\r\n    using RvalueReference = std::iter_rvalue_reference_t<Iterator>;\r\n    static_assert(std::same_as<ranges::range_rvalue_reference_t<Range>, RvalueReference>);\r\n    static_assert(std::same_as<ranges::range_rvalue_reference_t<Range&>, RvalueReference>);\r\n    static_assert(std::same_as<ranges::range_rvalue_reference_t<Range&&>, RvalueReference>);\r\n\r\n    // LWG-3860, validate ranges::range_common_reference_t\r\n    using CommonReference = std::iter_common_reference_t<Iterator>;\r\n    static_assert(std::same_as<ranges::range_common_reference_t<Range>, CommonReference>);\r\n    static_assert(std::same_as<ranges::range_common_reference_t<Range&>, CommonReference>);\r\n    static_assert(std::same_as<ranges::range_common_reference_t<Range&&>, CommonReference>);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Range>\r\nconstexpr bool test_forward_range() {\r\n    // Validate ranges::forward_range\r\n    static_assert(test_input_range<Range>());\r\n    static_assert(std::forward_iterator<ranges::iterator_t<Range>>);\r\n    static_assert(ranges::forward_range<Range>);\r\n    static_assert(CanEmpty<Range>);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Range>\r\nconstexpr bool test_bidirectional_range() {\r\n    // Validate ranges::bidirectional_range\r\n    static_assert(test_forward_range<Range>());\r\n    static_assert(std::bidirectional_iterator<ranges::iterator_t<Range>>);\r\n    static_assert(ranges::bidirectional_range<Range>);\r\n    if constexpr (ranges::common_range<Range>) {\r\n        static_assert(CanRBegin<Range&>);\r\n        static_assert(CanREnd<Range&>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Range>\r\nconstexpr bool test_random_access_range() {\r\n    // Validate ranges::random_access_range\r\n    static_assert(test_bidirectional_range<Range>());\r\n    static_assert(std::random_access_iterator<ranges::iterator_t<Range>>);\r\n    static_assert(ranges::random_access_range<Range>);\r\n    static_assert(ranges::sized_range<Range> || !ranges::common_range<Range>);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Range>\r\nconstexpr bool test_contiguous_range() {\r\n    // Validate ranges::contiguous_range\r\n    static_assert(test_random_access_range<Range>());\r\n    static_assert(std::contiguous_iterator<ranges::iterator_t<Range>>);\r\n    static_assert(ranges::contiguous_range<Range>);\r\n    static_assert(CanData<Range&>);\r\n\r\n    return true;\r\n}\r\n\r\n// Validate types that are unequivocally not ranges\r\ntemplate <class Nope>\r\nconstexpr bool totally_not_a_range() {\r\n    static_assert(test_begin<Nope>());\r\n    static_assert(test_end<Nope>());\r\n    static_assert(test_cbegin<Nope>());\r\n    static_assert(test_cend<Nope>());\r\n    static_assert(test_rbegin<Nope>());\r\n    static_assert(test_rend<Nope>());\r\n    static_assert(test_crbegin<Nope>());\r\n    static_assert(test_crend<Nope>());\r\n    static_assert(test_empty<Nope, false>());\r\n    static_assert(test_size<Nope>());\r\n    static_assert(test_data<Nope>());\r\n    static_assert(test_cdata<Nope>());\r\n    static_assert(test_non_range<Nope>());\r\n    return true;\r\n}\r\nstatic_assert(totally_not_a_range<void>());\r\nstatic_assert(totally_not_a_range<int>());\r\nstatic_assert(totally_not_a_range<int&>());\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored\r\nstatic_assert(totally_not_a_range<void()>());\r\nstatic_assert(totally_not_a_range<void (*)()>());\r\nstatic_assert(totally_not_a_range<void (&)()>());\r\nstatic_assert(totally_not_a_range<void() const>());\r\n#pragma warning(pop)\r\n\r\n// Validate C arrays, which have special-case range behaviors\r\nstatic_assert(test_begin<int[42]>());\r\nstatic_assert(test_end<int[42]>());\r\nstatic_assert(test_cbegin<int[42]>());\r\nstatic_assert(test_cend<int[42]>());\r\nstatic_assert(test_rbegin<int[42]>());\r\nstatic_assert(test_rend<int[42]>());\r\nstatic_assert(test_crbegin<int[42]>());\r\nstatic_assert(test_crend<int[42]>());\r\nstatic_assert(test_size<int[42], std::size_t>());\r\nstatic_assert(test_empty<int[42], true>());\r\nstatic_assert(test_data<int[42]>());\r\nstatic_assert(test_cdata<int[42]>());\r\nstatic_assert(test_contiguous_range<int[42]>());\r\nstatic_assert(!ranges::view<int[42]>);\r\n\r\nstatic_assert(test_begin<int const[42]>());\r\nstatic_assert(test_end<int const[42]>());\r\nstatic_assert(test_cbegin<int const[42]>());\r\nstatic_assert(test_cend<int const[42]>());\r\nstatic_assert(test_rbegin<int const[42]>());\r\nstatic_assert(test_rend<int const[42]>());\r\nstatic_assert(test_crbegin<int const[42]>());\r\nstatic_assert(test_crend<int const[42]>());\r\nstatic_assert(test_size<int const[42], std::size_t>());\r\nstatic_assert(test_empty<int const[42], true>());\r\nstatic_assert(test_data<int const[42]>());\r\nstatic_assert(test_cdata<int const[42]>());\r\nstatic_assert(test_contiguous_range<int const[42]>());\r\nstatic_assert(!ranges::view<int const[42]>);\r\n\r\nstatic_assert(test_begin<int (&)[42], int*>());\r\nstatic_assert(test_end<int (&)[42], int*>());\r\nstatic_assert(test_cbegin<int (&)[42], int const*>());\r\nstatic_assert(test_cend<int (&)[42], int const*>());\r\nstatic_assert(test_rbegin<int (&)[42], std::reverse_iterator<int*>>());\r\nstatic_assert(test_rend<int (&)[42], std::reverse_iterator<int*>>());\r\nstatic_assert(test_crbegin<int (&)[42], std::reverse_iterator<int const*>>());\r\nstatic_assert(test_crend<int (&)[42], std::reverse_iterator<int const*>>());\r\nstatic_assert(test_size<int (&)[42], std::size_t>());\r\nstatic_assert(test_empty<int (&)[42], true>());\r\nstatic_assert(test_data<int (&)[42], int*>());\r\nstatic_assert(test_cdata<int (&)[42], int const*>());\r\nstatic_assert(test_contiguous_range<int (&)[42]>());\r\nstatic_assert(!ranges::view<int (&)[42]>);\r\n\r\nstatic_assert(test_begin<int const (&)[42], int const*>());\r\nstatic_assert(test_end<int const (&)[42], int const*>());\r\nstatic_assert(test_cbegin<int const (&)[42], int const*>());\r\nstatic_assert(test_cend<int const (&)[42], int const*>());\r\nstatic_assert(test_rbegin<int const (&)[42], std::reverse_iterator<int const*>>());\r\nstatic_assert(test_rend<int const (&)[42], std::reverse_iterator<int const*>>());\r\nstatic_assert(test_crbegin<int const (&)[42], std::reverse_iterator<int const*>>());\r\nstatic_assert(test_crend<int const (&)[42], std::reverse_iterator<int const*>>());\r\nstatic_assert(test_size<int const (&)[42], std::size_t>());\r\nstatic_assert(test_empty<int const (&)[42], true>());\r\nstatic_assert(test_data<int const (&)[42], int const*>());\r\nstatic_assert(test_cdata<int const (&)[42], int const*>());\r\nstatic_assert(test_contiguous_range<int const (&)[42]>());\r\nstatic_assert(!ranges::view<int const (&)[42]>);\r\n\r\n// Validate arrays of unknown bound\r\nstatic_assert(test_begin<int[]>());\r\nstatic_assert(test_end<int[]>());\r\nstatic_assert(test_cbegin<int[]>());\r\nstatic_assert(test_cend<int[]>());\r\nstatic_assert(test_rbegin<int[]>());\r\nstatic_assert(test_rend<int[]>());\r\nstatic_assert(test_crbegin<int[]>());\r\nstatic_assert(test_crend<int[]>());\r\nstatic_assert(test_size<int[]>());\r\nstatic_assert(test_empty<int[], false>());\r\nstatic_assert(test_data<int[]>());\r\nstatic_assert(test_cdata<int[]>());\r\nstatic_assert(!ranges::range<int[]>);\r\nstatic_assert(!ranges::view<int[]>);\r\n\r\nstatic_assert(test_begin<int const[]>());\r\nstatic_assert(test_end<int const[]>());\r\nstatic_assert(test_cbegin<int const[]>());\r\nstatic_assert(test_cend<int const[]>());\r\nstatic_assert(test_rbegin<int const[]>());\r\nstatic_assert(test_rend<int const[]>());\r\nstatic_assert(test_crbegin<int const[]>());\r\nstatic_assert(test_crend<int const[]>());\r\nstatic_assert(test_size<int const[]>());\r\nstatic_assert(test_empty<int const[], false>());\r\nstatic_assert(test_data<int const[]>());\r\nstatic_assert(test_cdata<int const[]>());\r\nstatic_assert(!ranges::range<int const[]>);\r\nstatic_assert(!ranges::view<int const[]>);\r\n\r\nstatic_assert(test_begin<int (&)[], int*>());\r\nstatic_assert(test_end<int (&)[]>());\r\nstatic_assert(test_cend<int (&)[]>());\r\nstatic_assert(test_rbegin<int (&)[]>());\r\nstatic_assert(test_rend<int (&)[]>());\r\nstatic_assert(test_crbegin<int (&)[]>());\r\nstatic_assert(test_crend<int (&)[]>());\r\nstatic_assert(test_size<int (&)[]>());\r\nstatic_assert(test_empty<int (&)[], false>());\r\n// Can't use test_data here because it uses range_value_t and this isn't a range\r\nstatic_assert(std::same_as<decltype(ranges::data(std::declval<int (&)[]>())), int*>);\r\nstatic_assert(!ranges::range<int (&)[]>);\r\nstatic_assert(!ranges::view<int (&)[]>);\r\n\r\n#if _HAS_CXX23 // ranges::cbegin and ranges::cdata behavior differs in C++20 and C++23 modes\r\nstatic_assert(test_cbegin<int (&)[]>());\r\nstatic_assert(test_cdata<int (&)[]>());\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\nstatic_assert(test_cbegin<int (&)[], int const*>());\r\n// Can't use test_cdata here because it uses range_value_t and this isn't a range\r\nstatic_assert(std::same_as<decltype(ranges::cdata(std::declval<int (&)[]>())), int const*>);\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\nstatic_assert(test_begin<int const (&)[], int const*>());\r\nstatic_assert(test_end<int const (&)[]>());\r\nstatic_assert(test_cend<int const (&)[]>());\r\nstatic_assert(test_rbegin<int const (&)[]>());\r\nstatic_assert(test_rend<int const (&)[]>());\r\nstatic_assert(test_crbegin<int const (&)[]>());\r\nstatic_assert(test_crend<int const (&)[]>());\r\nstatic_assert(test_size<int const (&)[]>());\r\nstatic_assert(test_empty<int const (&)[], false>());\r\n// Can't use test_data here because it uses range_value_t and this isn't a range\r\nstatic_assert(std::same_as<decltype(ranges::data(std::declval<int const (&)[]>())), int const*>);\r\nstatic_assert(!ranges::range<int const (&)[]>);\r\nstatic_assert(!ranges::view<int const (&)[]>);\r\n\r\n#if _HAS_CXX23 // ranges::cbegin and ranges::cdata behavior differs in C++20 and C++23 modes\r\nstatic_assert(test_cbegin<int const (&)[]>());\r\nstatic_assert(test_cdata<int const (&)[]>());\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\nstatic_assert(test_cbegin<int const (&)[], int const*>());\r\n// Can't use test_cdata here because it uses range_value_t and this isn't a range\r\nstatic_assert(std::same_as<decltype(ranges::cdata(std::declval<int const (&)[]>())), int const*>);\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\n// Validate behavior before/after completing the bound of an array\r\nextern int initially_unbounded[];\r\nstatic_assert(ranges::begin(initially_unbounded) == initially_unbounded);\r\nstatic_assert(!CanEnd<decltype((initially_unbounded))>);\r\nstatic_assert(!CanCEnd<decltype((initially_unbounded))>);\r\nstatic_assert(!CanRBegin<decltype((initially_unbounded))>);\r\nstatic_assert(!CanREnd<decltype((initially_unbounded))>);\r\nstatic_assert(!CanCRBegin<decltype((initially_unbounded))>);\r\nstatic_assert(!CanCREnd<decltype((initially_unbounded))>);\r\nstatic_assert(!CanSize<decltype((initially_unbounded))>);\r\nstatic_assert(!CanEmpty<decltype((initially_unbounded))>);\r\nstatic_assert(ranges::data(initially_unbounded) == initially_unbounded);\r\n\r\n#if _HAS_CXX23 // ranges::cbegin and ranges::cdata behavior differs in C++20 and C++23 modes\r\nstatic_assert(!CanCBegin<decltype((initially_unbounded))>);\r\nstatic_assert(!CanCData<decltype((initially_unbounded))>);\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\nstatic_assert(ranges::cbegin(initially_unbounded) == initially_unbounded);\r\nstatic_assert(ranges::cdata(initially_unbounded) == initially_unbounded);\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\nint initially_unbounded[42];\r\nstatic_assert(ranges::begin(initially_unbounded) == initially_unbounded);\r\nstatic_assert(ranges::end(initially_unbounded) == initially_unbounded + ranges::size(initially_unbounded));\r\nstatic_assert(ranges::cbegin(initially_unbounded) == initially_unbounded);\r\nstatic_assert(ranges::cend(initially_unbounded) == initially_unbounded + ranges::size(initially_unbounded));\r\nstatic_assert(ranges::rbegin(initially_unbounded).base() == initially_unbounded + ranges::size(initially_unbounded));\r\nstatic_assert(ranges::rend(initially_unbounded).base() == initially_unbounded);\r\nstatic_assert(ranges::crbegin(initially_unbounded).base() == initially_unbounded + ranges::size(initially_unbounded));\r\nstatic_assert(ranges::crend(initially_unbounded).base() == initially_unbounded);\r\nstatic_assert(ranges::size(initially_unbounded) == std::size(initially_unbounded));\r\nstatic_assert(!ranges::empty(initially_unbounded));\r\nstatic_assert(ranges::data(initially_unbounded) == initially_unbounded);\r\nstatic_assert(ranges::cdata(initially_unbounded) == initially_unbounded);\r\n\r\n\r\n// Validate the few behaviors that we can for arrays of incomplete element type. begin, end, rbegin, rend, and data\r\n// (and their c variations) are ill-formed with no diagnostic required; we can only pass an array of incomplete elements\r\n// to size and empty.\r\nstruct initially_incomplete;\r\nextern initially_incomplete array_of_incomplete[42];\r\nstatic_assert(ranges::size(array_of_incomplete) == 42);\r\nstatic_assert(!ranges::empty(array_of_incomplete));\r\n\r\n// begin, end, rbegin, rend, and data (and their c variations) should reject rvalues of array of incomplete elements\r\n// with substitution failures\r\nstatic_assert(!CanBegin<initially_incomplete (&&)[42]>);\r\nstatic_assert(!CanCBegin<initially_incomplete (&&)[42]>);\r\nstatic_assert(!CanEnd<initially_incomplete (&&)[42]>);\r\nstatic_assert(!CanCEnd<initially_incomplete (&&)[42]>);\r\nstatic_assert(!CanRBegin<initially_incomplete (&&)[42]>);\r\nstatic_assert(!CanCRBegin<initially_incomplete (&&)[42]>);\r\nstatic_assert(!CanREnd<initially_incomplete (&&)[42]>);\r\nstatic_assert(!CanCREnd<initially_incomplete (&&)[42]>);\r\nstatic_assert(!CanData<initially_incomplete (&&)[42]>);\r\nstatic_assert(!CanCData<initially_incomplete (&&)[42]>);\r\n\r\nstruct initially_incomplete {};\r\ninitially_incomplete array_of_incomplete[42];\r\n\r\n\r\n// Validate initializer_lists, which have special-case range behaviors\r\nstatic_assert(test_begin<std::initializer_list<int>>());\r\nstatic_assert(test_end<std::initializer_list<int>>());\r\nstatic_assert(test_cbegin<std::initializer_list<int>>());\r\nstatic_assert(test_cend<std::initializer_list<int>>());\r\nstatic_assert(test_rbegin<std::initializer_list<int>>());\r\nstatic_assert(test_rend<std::initializer_list<int>>());\r\nstatic_assert(test_crbegin<std::initializer_list<int>>());\r\nstatic_assert(test_crend<std::initializer_list<int>>());\r\nstatic_assert(test_size<std::initializer_list<int>, std::size_t>());\r\nstatic_assert(test_empty<std::initializer_list<int>, true>());\r\nstatic_assert(test_data<std::initializer_list<int>>());\r\nstatic_assert(test_cdata<std::initializer_list<int>>());\r\nstatic_assert(test_contiguous_range<std::initializer_list<int>>());\r\nstatic_assert(!ranges::view<std::initializer_list<int>>);\r\n\r\nstatic_assert(test_begin<std::initializer_list<int> const>());\r\nstatic_assert(test_end<std::initializer_list<int> const>());\r\nstatic_assert(test_cbegin<std::initializer_list<int> const>());\r\nstatic_assert(test_cend<std::initializer_list<int> const>());\r\nstatic_assert(test_rbegin<std::initializer_list<int> const>());\r\nstatic_assert(test_rend<std::initializer_list<int> const>());\r\nstatic_assert(test_crbegin<std::initializer_list<int> const>());\r\nstatic_assert(test_crend<std::initializer_list<int> const>());\r\nstatic_assert(test_size<std::initializer_list<int> const, std::size_t>());\r\nstatic_assert(test_empty<std::initializer_list<int> const, true>());\r\nstatic_assert(test_data<std::initializer_list<int> const>());\r\nstatic_assert(test_cdata<std::initializer_list<int> const>());\r\nstatic_assert(test_contiguous_range<std::initializer_list<int> const>());\r\nstatic_assert(!ranges::view<std::initializer_list<int> const>);\r\n\r\nstatic_assert(test_begin<std::initializer_list<int>&, int const*>());\r\nstatic_assert(test_end<std::initializer_list<int>&, int const*>());\r\nstatic_assert(test_cbegin<std::initializer_list<int>&, int const*>());\r\nstatic_assert(test_cend<std::initializer_list<int>&, int const*>());\r\nstatic_assert(test_rbegin<std::initializer_list<int>&, std::reverse_iterator<int const*>>());\r\nstatic_assert(test_rend<std::initializer_list<int>&, std::reverse_iterator<int const*>>());\r\nstatic_assert(test_crbegin<std::initializer_list<int>&, std::reverse_iterator<int const*>>());\r\nstatic_assert(test_crend<std::initializer_list<int>&, std::reverse_iterator<int const*>>());\r\nstatic_assert(test_size<std::initializer_list<int>&, std::size_t>());\r\nstatic_assert(test_empty<std::initializer_list<int>&, true>());\r\nstatic_assert(test_data<std::initializer_list<int>&, int const*>());\r\nstatic_assert(test_cdata<std::initializer_list<int>&, int const*>());\r\nstatic_assert(test_contiguous_range<std::initializer_list<int>&>());\r\nstatic_assert(!ranges::view<std::initializer_list<int>&>);\r\n\r\nstatic_assert(test_begin<std::initializer_list<int> const&, int const*>());\r\nstatic_assert(test_end<std::initializer_list<int> const&, int const*>());\r\nstatic_assert(test_cbegin<std::initializer_list<int> const&, int const*>());\r\nstatic_assert(test_cend<std::initializer_list<int> const&, int const*>());\r\nstatic_assert(test_rbegin<std::initializer_list<int> const&, std::reverse_iterator<int const*>>());\r\nstatic_assert(test_rend<std::initializer_list<int> const&, std::reverse_iterator<int const*>>());\r\nstatic_assert(test_crbegin<std::initializer_list<int> const&, std::reverse_iterator<int const*>>());\r\nstatic_assert(test_crend<std::initializer_list<int> const&, std::reverse_iterator<int const*>>());\r\nstatic_assert(test_size<std::initializer_list<int> const&, std::size_t>());\r\nstatic_assert(test_empty<std::initializer_list<int> const&, true>());\r\nstatic_assert(test_data<std::initializer_list<int> const&, int const*>());\r\nstatic_assert(test_cdata<std::initializer_list<int> const&, int const*>());\r\nstatic_assert(test_contiguous_range<std::initializer_list<int> const&>());\r\nstatic_assert(!ranges::view<std::initializer_list<int> const&>);\r\n\r\n\r\n// Validate containers\r\ntemplate <class>\r\nconstexpr bool is_forward_list = false;\r\ntemplate <class T, class A>\r\nconstexpr bool is_forward_list<std::forward_list<T, A>> = true;\r\n\r\ntemplate <class T, class IterConcept>\r\nconstexpr bool test_std_container() {\r\n    using I  = T::iterator;\r\n    using D  = std::iter_difference_t<I>;\r\n    using CI = T::const_iterator;\r\n    static_assert(std::same_as<std::iter_difference_t<CI>, D>);\r\n\r\n    using Category = std::iterator_traits<I>::iterator_category;\r\n    static_assert(std::derived_from<IterConcept, Category>);\r\n\r\n    using RI  = std::conditional_t<std::bidirectional_iterator<I>, std::reverse_iterator<I>, invalid_type>;\r\n    using RCI = std::conditional_t<std::bidirectional_iterator<I>, std::reverse_iterator<CI>, invalid_type>;\r\n\r\n    using V = T::value_type;\r\n\r\n    static_assert(test_begin<T>());\r\n    static_assert(test_end<T>());\r\n    static_assert(test_cbegin<T>());\r\n    static_assert(test_cend<T>());\r\n    static_assert(test_rbegin<T>());\r\n    static_assert(test_rend<T>());\r\n    static_assert(test_crbegin<T>());\r\n    static_assert(test_crend<T>());\r\n    if constexpr (!is_forward_list<T>) {\r\n        static_assert(test_size<T, std::make_unsigned_t<D>>());\r\n    }\r\n    static_assert(test_empty<T, true>());\r\n    if constexpr (std::contiguous_iterator<I>) {\r\n        static_assert(test_data<T>());\r\n        static_assert(test_cdata<T>());\r\n    }\r\n    static_assert(!ranges::view<T>);\r\n\r\n    static_assert(test_begin<T const>());\r\n    static_assert(test_end<T const>());\r\n    static_assert(test_cbegin<T const>());\r\n    static_assert(test_cend<T const>());\r\n    static_assert(test_rbegin<T const>());\r\n    static_assert(test_rend<T const>());\r\n    static_assert(test_crbegin<T const>());\r\n    static_assert(test_crend<T const>());\r\n    if constexpr (!is_forward_list<T>) {\r\n        static_assert(test_size<T const, std::make_unsigned_t<D>>());\r\n    }\r\n    static_assert(test_empty<T const, true>());\r\n    if constexpr (std::contiguous_iterator<I>) {\r\n        static_assert(test_data<T const>());\r\n        static_assert(test_cdata<T const>());\r\n    }\r\n    static_assert(!ranges::view<T const>);\r\n\r\n    static_assert(test_begin<T&, I>());\r\n    static_assert(test_end<T&, I>());\r\n    static_assert(test_cbegin<T&, CI>());\r\n    static_assert(test_cend<T&, CI>());\r\n    static_assert(test_rbegin<T&, RI>());\r\n    static_assert(test_rend<T&, RI>());\r\n    static_assert(test_crbegin<T&, RCI>());\r\n    static_assert(test_crend<T&, RCI>());\r\n    if constexpr (!is_forward_list<T>) {\r\n        static_assert(test_size<T&, std::make_unsigned_t<D>>());\r\n    }\r\n    static_assert(test_empty<T&, true>());\r\n    if constexpr (std::contiguous_iterator<I>) {\r\n        if constexpr (std::is_same_v<I, CI>) {\r\n            static_assert(test_data<T&, V const*>());\r\n        } else {\r\n            static_assert(test_data<T&, V*>());\r\n        }\r\n        static_assert(test_cdata<T&, V const*>());\r\n    }\r\n    static_assert(!ranges::view<T&>);\r\n\r\n    static_assert(test_begin<T const&, CI>());\r\n    static_assert(test_end<T const&, CI>());\r\n    static_assert(test_cbegin<T const&, CI>());\r\n    static_assert(test_cend<T const&, CI>());\r\n    static_assert(test_rbegin<T const&, RCI>());\r\n    static_assert(test_rend<T const&, RCI>());\r\n    static_assert(test_crbegin<T const&, RCI>());\r\n    static_assert(test_crend<T const&, RCI>());\r\n    if constexpr (!is_forward_list<T>) {\r\n        static_assert(test_size<T const&, std::make_unsigned_t<D>>());\r\n    }\r\n    static_assert(test_empty<T const&, true>());\r\n    if constexpr (std::contiguous_iterator<I>) {\r\n        static_assert(test_data<T const&, V const*>());\r\n        static_assert(test_cdata<T const&, V const*>());\r\n    }\r\n    static_assert(!ranges::view<T const&>);\r\n\r\n    static_assert(std::contiguous_iterator<I> == std::derived_from<IterConcept, std::contiguous_iterator_tag>);\r\n    static_assert(std::random_access_iterator<I> == std::derived_from<IterConcept, std::random_access_iterator_tag>);\r\n    static_assert(std::bidirectional_iterator<I> == std::derived_from<IterConcept, std::bidirectional_iterator_tag>);\r\n    static_assert(std::forward_iterator<I>);\r\n    static_assert(std::derived_from<IterConcept, std::forward_iterator_tag>);\r\n\r\n    if constexpr (std::contiguous_iterator<I>) {\r\n        static_assert(test_contiguous_range<T>());\r\n        static_assert(test_contiguous_range<T const>());\r\n        static_assert(test_contiguous_range<T&>());\r\n        static_assert(test_contiguous_range<T const&>());\r\n    } else if constexpr (std::random_access_iterator<I>) {\r\n        static_assert(test_random_access_range<T>());\r\n        static_assert(test_random_access_range<T const>());\r\n        static_assert(test_random_access_range<T&>());\r\n        static_assert(test_random_access_range<T const&>());\r\n    } else if constexpr (std::bidirectional_iterator<I>) {\r\n        static_assert(test_bidirectional_range<T>());\r\n        static_assert(test_bidirectional_range<T const>());\r\n        static_assert(test_bidirectional_range<T&>());\r\n        static_assert(test_bidirectional_range<T const&>());\r\n    } else {\r\n        static_assert(test_forward_range<T>());\r\n        static_assert(test_forward_range<T const>());\r\n        static_assert(test_forward_range<T&>());\r\n        static_assert(test_forward_range<T const&>());\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(test_std_container<std::array<int, 42>, std::contiguous_iterator_tag>());\r\nstatic_assert(test_std_container<std::deque<int>, std::random_access_iterator_tag>());\r\nstatic_assert(test_std_container<std::forward_list<int>, std::forward_iterator_tag>());\r\nstatic_assert(test_std_container<std::list<int>, std::bidirectional_iterator_tag>());\r\nstatic_assert(test_std_container<std::map<int, int>, std::bidirectional_iterator_tag>());\r\nstatic_assert(test_std_container<std::multimap<int, int>, std::bidirectional_iterator_tag>());\r\nstatic_assert(test_std_container<std::multiset<int>, std::bidirectional_iterator_tag>());\r\nstatic_assert(test_std_container<std::set<int>, std::bidirectional_iterator_tag>());\r\nstatic_assert(test_std_container<std::string, std::contiguous_iterator_tag>());\r\n// Implementation-specific: unordered_meow uses list's iterators, so they're bidirectional instead of forward.\r\nstatic_assert(test_std_container<std::unordered_map<int, int>, std::bidirectional_iterator_tag>());\r\nstatic_assert(test_std_container<std::unordered_multimap<int, int>, std::bidirectional_iterator_tag>());\r\nstatic_assert(test_std_container<std::unordered_multiset<int>, std::bidirectional_iterator_tag>());\r\nstatic_assert(test_std_container<std::unordered_set<int>, std::bidirectional_iterator_tag>());\r\nstatic_assert(test_std_container<std::vector<int>, std::contiguous_iterator_tag>());\r\nstatic_assert(test_std_container<std::vector<bool>, std::random_access_iterator_tag>());\r\nstatic_assert(test_std_container<std::wstring, std::contiguous_iterator_tag>());\r\n\r\n#if _HAS_CXX23\r\nstatic_assert(test_std_container<std::flat_map<int, int>, std::random_access_iterator_tag>());\r\nstatic_assert(test_std_container<std::flat_multimap<int, int>, std::random_access_iterator_tag>());\r\n// Implementation-specific: flat_set uses the underlying container's iterators, so they're contiguous here.\r\nstatic_assert(test_std_container<std::flat_set<int>, std::contiguous_iterator_tag>());\r\nstatic_assert(test_std_container<std::flat_multiset<int>, std::contiguous_iterator_tag>());\r\n#endif // _HAS_CXX23\r\n\r\n// Validate that \"old\" fancy pointers that fail to model contiguous_iterator don't break contiguity of containers.\r\ntemplate <class T>\r\nstruct fancy_pointer {\r\n    using element_type    = T;\r\n    using difference_type = int;\r\n\r\n    fancy_pointer() = default;\r\n    fancy_pointer(std::nullptr_t);\r\n    template <class U>\r\n        requires std::convertible_to<U*, T*>\r\n    fancy_pointer(fancy_pointer<U>);\r\n\r\n    element_type& operator*() const;\r\n    element_type& operator[](difference_type) const;\r\n    element_type* operator->() const;\r\n\r\n    fancy_pointer& operator++();\r\n    fancy_pointer operator++(int);\r\n    fancy_pointer& operator--();\r\n    fancy_pointer operator--(int);\r\n\r\n    fancy_pointer& operator+=(difference_type);\r\n    fancy_pointer operator+(difference_type) const;\r\n    friend fancy_pointer operator+(difference_type, fancy_pointer);\r\n\r\n    fancy_pointer& operator-=(difference_type);\r\n    fancy_pointer operator-(difference_type) const;\r\n    difference_type operator-(fancy_pointer) const;\r\n\r\n    explicit operator bool() const;\r\n\r\n    bool operator==(fancy_pointer const&) const = default;\r\n    bool operator==(std::nullptr_t) const;\r\n\r\n    auto operator<=>(fancy_pointer const&) const = default;\r\n\r\n    static fancy_pointer pointer_to(element_type&);\r\n};\r\nstatic_assert(std::random_access_iterator<fancy_pointer<int>>);\r\nstatic_assert(!std::contiguous_iterator<fancy_pointer<int>>);\r\n\r\ntemplate <class T>\r\nstruct fancy_allocator {\r\n    using value_type = T;\r\n    using pointer    = fancy_pointer<T>;\r\n\r\n    fancy_allocator() = default;\r\n    template <class U>\r\n    fancy_allocator(fancy_allocator<U> const&) {}\r\n\r\n    pointer allocate(std::size_t);\r\n    void deallocate(pointer, std::size_t);\r\n\r\n    template <class U>\r\n    bool operator==(fancy_allocator<U>) const {\r\n        return true;\r\n    }\r\n};\r\n\r\nstatic_assert(test_std_container<std::basic_string<char, std::char_traits<char>, fancy_allocator<char>>,\r\n    std::contiguous_iterator_tag>());\r\nstatic_assert(test_std_container<std::vector<int, fancy_allocator<int>>, std::contiguous_iterator_tag>());\r\n\r\n// Validate some non-containers\r\nstatic_assert(test_begin<std::string_view, std::string_view::iterator>());\r\nstatic_assert(test_end<std::string_view, std::string_view::iterator>());\r\nstatic_assert(test_cbegin<std::string_view, std::string_view::iterator>());\r\nstatic_assert(test_cend<std::string_view, std::string_view::iterator>());\r\nstatic_assert(test_rbegin<std::string_view, std::reverse_iterator<std::string_view::iterator>>());\r\nstatic_assert(test_rend<std::string_view, std::reverse_iterator<std::string_view::iterator>>());\r\nstatic_assert(test_crbegin<std::string_view, std::reverse_iterator<std::string_view::iterator>>());\r\nstatic_assert(test_crend<std::string_view, std::reverse_iterator<std::string_view::iterator>>());\r\nstatic_assert(test_size<std::string_view, std::size_t>());\r\nstatic_assert(test_empty<std::string_view, true>());\r\nstatic_assert(test_data<std::string_view, char const*>());\r\nstatic_assert(test_cdata<std::string_view, char const*>());\r\nstatic_assert(test_contiguous_range<std::string_view>());\r\nstatic_assert(ranges::view<std::string_view>);\r\n\r\nstatic_assert(test_begin<std::string_view const, std::string_view::iterator>());\r\nstatic_assert(test_end<std::string_view const, std::string_view::iterator>());\r\nstatic_assert(test_cbegin<std::string_view const, std::string_view::iterator>());\r\nstatic_assert(test_cend<std::string_view const, std::string_view::iterator>());\r\nstatic_assert(test_rbegin<std::string_view const, std::reverse_iterator<std::string_view::iterator>>());\r\nstatic_assert(test_rend<std::string_view const, std::reverse_iterator<std::string_view::iterator>>());\r\nstatic_assert(test_crbegin<std::string_view const, std::reverse_iterator<std::string_view::iterator>>());\r\nstatic_assert(test_crend<std::string_view const, std::reverse_iterator<std::string_view::iterator>>());\r\nstatic_assert(test_size<std::string_view const, std::size_t>());\r\nstatic_assert(test_empty<std::string_view const, true>());\r\nstatic_assert(test_data<std::string_view const, char const*>());\r\nstatic_assert(test_cdata<std::string_view const, char const*>());\r\nstatic_assert(test_contiguous_range<std::string_view const>());\r\nstatic_assert(!ranges::view<std::string_view const>);\r\n\r\nstatic_assert(test_begin<std::string_view&, std::string_view::iterator>());\r\nstatic_assert(test_end<std::string_view&, std::string_view::iterator>());\r\nstatic_assert(test_cbegin<std::string_view&, std::string_view::iterator>());\r\nstatic_assert(test_cend<std::string_view&, std::string_view::iterator>());\r\nstatic_assert(test_rbegin<std::string_view&, std::reverse_iterator<std::string_view::iterator>>());\r\nstatic_assert(test_rend<std::string_view&, std::reverse_iterator<std::string_view::iterator>>());\r\nstatic_assert(test_crbegin<std::string_view&, std::reverse_iterator<std::string_view::iterator>>());\r\nstatic_assert(test_crend<std::string_view&, std::reverse_iterator<std::string_view::iterator>>());\r\nstatic_assert(test_size<std::string_view&, std::size_t>());\r\nstatic_assert(test_empty<std::string_view&, true>());\r\nstatic_assert(test_data<std::string_view&, char const*>());\r\nstatic_assert(test_cdata<std::string_view&, char const*>());\r\nstatic_assert(test_contiguous_range<std::string_view&>());\r\nstatic_assert(!ranges::view<std::string_view&>);\r\n\r\nstatic_assert(test_begin<std::string_view const&, std::string_view::iterator>());\r\nstatic_assert(test_end<std::string_view const&, std::string_view::iterator>());\r\nstatic_assert(test_cbegin<std::string_view const&, std::string_view::iterator>());\r\nstatic_assert(test_cend<std::string_view const&, std::string_view::iterator>());\r\nstatic_assert(test_rbegin<std::string_view const&, std::reverse_iterator<std::string_view::iterator>>());\r\nstatic_assert(test_rend<std::string_view const&, std::reverse_iterator<std::string_view::iterator>>());\r\nstatic_assert(test_crbegin<std::string_view const&, std::reverse_iterator<std::string_view::iterator>>());\r\nstatic_assert(test_crend<std::string_view const&, std::reverse_iterator<std::string_view::iterator>>());\r\nstatic_assert(test_size<std::string_view const&, std::size_t>());\r\nstatic_assert(test_empty<std::string_view const&, true>());\r\nstatic_assert(test_data<std::string_view const&, char const*>());\r\nstatic_assert(test_cdata<std::string_view const&, char const*>());\r\nstatic_assert(test_contiguous_range<std::string_view const&>());\r\nstatic_assert(!ranges::view<std::string_view const&>);\r\n\r\nstatic_assert(test_begin<std::span<int>, std::span<int>::iterator>());\r\nstatic_assert(test_end<std::span<int>, std::span<int>::iterator>());\r\nstatic_assert(test_rbegin<std::span<int>, std::reverse_iterator<std::span<int>::iterator>>());\r\nstatic_assert(test_rend<std::span<int>, std::reverse_iterator<std::span<int>::iterator>>());\r\nstatic_assert(test_size<std::span<int>, std::size_t>());\r\nstatic_assert(test_empty<std::span<int>, true>());\r\nstatic_assert(test_data<std::span<int>, int*>());\r\nstatic_assert(test_contiguous_range<std::span<int>>());\r\nstatic_assert(ranges::view<std::span<int>>);\r\n\r\n#if _HAS_CXX23 // behavior of span members differs in C++20 and C++23 modes\r\nstatic_assert(test_cbegin<std::span<int>, std::span<int>::const_iterator>());\r\nstatic_assert(test_cend<std::span<int>, std::span<int>::const_iterator>());\r\nstatic_assert(test_crbegin<std::span<int>, std::span<int>::const_reverse_iterator>());\r\nstatic_assert(test_crend<std::span<int>, std::span<int>::const_reverse_iterator>());\r\nstatic_assert(test_cdata<std::span<int>, const int*>());\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\nstatic_assert(test_cbegin<std::span<int>, std::span<int>::iterator>());\r\nstatic_assert(test_cend<std::span<int>, std::span<int>::iterator>());\r\nstatic_assert(test_crbegin<std::span<int>, std::reverse_iterator<std::span<int>::iterator>>());\r\nstatic_assert(test_crend<std::span<int>, std::reverse_iterator<std::span<int>::iterator>>());\r\nstatic_assert(test_cdata<std::span<int>, int*>());\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\nstatic_assert(test_begin<std::span<int> const, std::span<int>::iterator>());\r\nstatic_assert(test_end<std::span<int> const, std::span<int>::iterator>());\r\nstatic_assert(test_rbegin<std::span<int> const, std::reverse_iterator<std::span<int>::iterator>>());\r\nstatic_assert(test_rend<std::span<int> const, std::reverse_iterator<std::span<int>::iterator>>());\r\nstatic_assert(test_size<std::span<int> const, std::size_t>());\r\nstatic_assert(test_empty<std::span<int> const, true>());\r\nstatic_assert(test_data<std::span<int> const, int*>());\r\nstatic_assert(test_contiguous_range<std::span<int> const>());\r\nstatic_assert(!ranges::view<std::span<int> const>);\r\n\r\n#if _HAS_CXX23 // behavior of const span members differs in C++20 and C++23 modes\r\nstatic_assert(test_cbegin<std::span<int> const, std::span<int>::const_iterator>());\r\nstatic_assert(test_cend<std::span<int> const, std::span<int>::const_iterator>());\r\nstatic_assert(test_crbegin<std::span<int> const, std::span<int>::const_reverse_iterator>());\r\nstatic_assert(test_crend<std::span<int> const, std::span<int>::const_reverse_iterator>());\r\nstatic_assert(test_cdata<std::span<int> const, const int*>());\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\nstatic_assert(test_cbegin<std::span<int> const, std::span<int>::iterator>());\r\nstatic_assert(test_cend<std::span<int> const, std::span<int>::iterator>());\r\nstatic_assert(test_crbegin<std::span<int> const, std::reverse_iterator<std::span<int>::iterator>>());\r\nstatic_assert(test_crend<std::span<int> const, std::reverse_iterator<std::span<int>::iterator>>());\r\nstatic_assert(test_cdata<std::span<int> const, int*>());\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\nstatic_assert(test_begin<std::span<int>&, std::span<int>::iterator>());\r\nstatic_assert(test_end<std::span<int>&, std::span<int>::iterator>());\r\nstatic_assert(test_rbegin<std::span<int>&, std::reverse_iterator<std::span<int>::iterator>>());\r\nstatic_assert(test_rend<std::span<int>&, std::reverse_iterator<std::span<int>::iterator>>());\r\nstatic_assert(test_size<std::span<int>&, std::size_t>());\r\nstatic_assert(test_empty<std::span<int>&, true>());\r\nstatic_assert(test_data<std::span<int>&, int*>());\r\nstatic_assert(test_contiguous_range<std::span<int>&>());\r\nstatic_assert(!ranges::view<std::span<int>&>);\r\n\r\n#if _HAS_CXX23 // behavior of span& members differs in C++20 and C++23 modes\r\nstatic_assert(test_cbegin<std::span<int>&, std::span<int>::const_iterator>());\r\nstatic_assert(test_cend<std::span<int>&, std::span<int>::const_iterator>());\r\nstatic_assert(test_crbegin<std::span<int>&, std::span<int>::const_reverse_iterator>());\r\nstatic_assert(test_crend<std::span<int>&, std::span<int>::const_reverse_iterator>());\r\nstatic_assert(test_cdata<std::span<int>&, const int*>());\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\nstatic_assert(test_cbegin<std::span<int>&, std::span<int>::iterator>());\r\nstatic_assert(test_cend<std::span<int>&, std::span<int>::iterator>());\r\nstatic_assert(test_crbegin<std::span<int>&, std::reverse_iterator<std::span<int>::iterator>>());\r\nstatic_assert(test_crend<std::span<int>&, std::reverse_iterator<std::span<int>::iterator>>());\r\nstatic_assert(test_cdata<std::span<int>&, int*>());\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\nstatic_assert(test_begin<std::span<int> const&, std::span<int>::iterator>());\r\nstatic_assert(test_end<std::span<int> const&, std::span<int>::iterator>());\r\nstatic_assert(test_rbegin<std::span<int> const&, std::reverse_iterator<std::span<int>::iterator>>());\r\nstatic_assert(test_rend<std::span<int> const&, std::reverse_iterator<std::span<int>::iterator>>());\r\nstatic_assert(test_size<std::span<int> const&, std::size_t>());\r\nstatic_assert(test_empty<std::span<int> const&, true>());\r\nstatic_assert(test_data<std::span<int> const&, int*>());\r\nstatic_assert(test_contiguous_range<std::span<int> const&>());\r\nstatic_assert(!ranges::view<std::span<int> const&>);\r\n\r\n#if _HAS_CXX23 // behavior of const span& members differs in C++20 and C++23 modes\r\nstatic_assert(test_cbegin<std::span<int> const&, std::span<int>::const_iterator>());\r\nstatic_assert(test_cend<std::span<int> const&, std::span<int>::const_iterator>());\r\nstatic_assert(test_crbegin<std::span<int> const&, std::span<int>::const_reverse_iterator>());\r\nstatic_assert(test_crend<std::span<int> const&, std::span<int>::const_reverse_iterator>());\r\nstatic_assert(test_cdata<std::span<int> const&, const int*>());\r\n#else // ^^^ _HAS_CXX23 / !_HAS_CXX23 vvv\r\nstatic_assert(test_cbegin<std::span<int> const&, std::span<int>::iterator>());\r\nstatic_assert(test_cend<std::span<int> const&, std::span<int>::iterator>());\r\nstatic_assert(test_crbegin<std::span<int> const&, std::reverse_iterator<std::span<int>::iterator>>());\r\nstatic_assert(test_crend<std::span<int> const&, std::reverse_iterator<std::span<int>::iterator>>());\r\nstatic_assert(test_cdata<std::span<int> const&, int*>());\r\n#endif // ^^^ !_HAS_CXX23 ^^^\r\n\r\nusing valarray_int_iterator       = decltype(std::begin(std::declval<std::valarray<int>&>()));\r\nusing const_valarray_int_iterator = decltype(std::begin(std::declval<const std::valarray<int>&>()));\r\nstatic_assert(test_begin<std::valarray<int>>());\r\nstatic_assert(test_end<std::valarray<int>>());\r\nstatic_assert(test_cbegin<std::valarray<int>>());\r\nstatic_assert(test_cend<std::valarray<int>>());\r\nstatic_assert(test_rbegin<std::valarray<int>>());\r\nstatic_assert(test_rend<std::valarray<int>>());\r\nstatic_assert(test_crbegin<std::valarray<int>>());\r\nstatic_assert(test_crend<std::valarray<int>>());\r\nstatic_assert(test_size<std::valarray<int>, std::size_t>());\r\nstatic_assert(test_empty<std::valarray<int>, true>());\r\nstatic_assert(test_data<std::valarray<int>>());\r\nstatic_assert(test_cdata<std::valarray<int>>());\r\nstatic_assert(test_contiguous_range<std::valarray<int>>());\r\nstatic_assert(!ranges::view<std::valarray<int>>);\r\n\r\nstatic_assert(test_begin<std::valarray<int> const>());\r\nstatic_assert(test_end<std::valarray<int> const>());\r\nstatic_assert(test_cbegin<std::valarray<int> const>());\r\nstatic_assert(test_cend<std::valarray<int> const>());\r\nstatic_assert(test_rbegin<std::valarray<int> const>());\r\nstatic_assert(test_rend<std::valarray<int> const>());\r\nstatic_assert(test_crbegin<std::valarray<int> const>());\r\nstatic_assert(test_crend<std::valarray<int> const>());\r\nstatic_assert(test_size<std::valarray<int> const, std::size_t>());\r\nstatic_assert(test_empty<std::valarray<int> const, true>());\r\nstatic_assert(test_data<std::valarray<int> const>());\r\nstatic_assert(test_cdata<std::valarray<int> const>());\r\nstatic_assert(test_contiguous_range<std::valarray<int> const>());\r\nstatic_assert(!ranges::view<std::valarray<int> const>);\r\n\r\nstatic_assert(test_begin<std::valarray<int>&, valarray_int_iterator>());\r\nstatic_assert(test_end<std::valarray<int>&, valarray_int_iterator>());\r\nstatic_assert(test_cbegin<std::valarray<int>&, const_valarray_int_iterator>());\r\nstatic_assert(test_cend<std::valarray<int>&, const_valarray_int_iterator>());\r\nstatic_assert(test_rbegin<std::valarray<int>&, std::reverse_iterator<valarray_int_iterator>>());\r\nstatic_assert(test_rend<std::valarray<int>&, std::reverse_iterator<valarray_int_iterator>>());\r\nstatic_assert(test_crbegin<std::valarray<int>&, std::reverse_iterator<const_valarray_int_iterator>>());\r\nstatic_assert(test_crend<std::valarray<int>&, std::reverse_iterator<const_valarray_int_iterator>>());\r\nstatic_assert(test_size<std::valarray<int>&, std::size_t>());\r\nstatic_assert(test_empty<std::valarray<int>&, true>());\r\nstatic_assert(test_data<std::valarray<int>&, int*>());\r\nstatic_assert(test_cdata<std::valarray<int>&, int const*>());\r\nstatic_assert(test_contiguous_range<std::valarray<int>&>());\r\nstatic_assert(!ranges::view<std::valarray<int>&>);\r\n\r\nstatic_assert(test_begin<std::valarray<int> const&, const_valarray_int_iterator>());\r\nstatic_assert(test_end<std::valarray<int> const&, const_valarray_int_iterator>());\r\nstatic_assert(test_cbegin<std::valarray<int> const&, const_valarray_int_iterator>());\r\nstatic_assert(test_cend<std::valarray<int> const&, const_valarray_int_iterator>());\r\nstatic_assert(test_rbegin<std::valarray<int> const&, std::reverse_iterator<const_valarray_int_iterator>>());\r\nstatic_assert(test_rend<std::valarray<int> const&, std::reverse_iterator<const_valarray_int_iterator>>());\r\nstatic_assert(test_crbegin<std::valarray<int> const&, std::reverse_iterator<const_valarray_int_iterator>>());\r\nstatic_assert(test_crend<std::valarray<int> const&, std::reverse_iterator<const_valarray_int_iterator>>());\r\nstatic_assert(test_size<std::valarray<int> const&, std::size_t>());\r\nstatic_assert(test_empty<std::valarray<int> const&, true>());\r\nstatic_assert(test_data<std::valarray<int> const&, int const*>());\r\nstatic_assert(test_cdata<std::valarray<int> const&, int const*>());\r\nstatic_assert(test_contiguous_range<std::valarray<int> const&>());\r\nstatic_assert(!ranges::view<std::valarray<int> const&>);\r\n\r\nnamespace adl_block { // Validate some range concept corner cases\r\n    struct members_only { // baseline\r\n        constexpr int* begin() {\r\n            return nullptr;\r\n        }\r\n        constexpr int* end() {\r\n            return nullptr;\r\n        }\r\n        constexpr auto rbegin() {\r\n            return std::reverse_iterator<int*>{};\r\n        }\r\n        constexpr auto rend() {\r\n            return std::reverse_iterator<int*>{};\r\n        }\r\n        constexpr int const* begin() const {\r\n            return nullptr;\r\n        }\r\n        constexpr int const* end() const {\r\n            return nullptr;\r\n        }\r\n        constexpr auto rbegin() const {\r\n            return std::reverse_iterator<int const*>{};\r\n        }\r\n        constexpr auto rend() const {\r\n            return std::reverse_iterator<int const*>{};\r\n        }\r\n    };\r\n    static_assert(test_begin<members_only&, int*>());\r\n    static_assert(test_end<members_only&, int*>());\r\n    static_assert(test_cbegin<members_only&, int const*>());\r\n    static_assert(test_cend<members_only&, int const*>());\r\n    static_assert(test_rbegin<members_only&, std::reverse_iterator<int*>>());\r\n    static_assert(test_rend<members_only&, std::reverse_iterator<int*>>());\r\n    static_assert(test_crbegin<members_only&, std::reverse_iterator<int const*>>());\r\n    static_assert(test_crend<members_only&, std::reverse_iterator<int const*>>());\r\n    static_assert(test_size<members_only&, std::size_t>());\r\n    static_assert(test_empty<members_only&, true>());\r\n    static_assert(test_data<members_only&, int*>());\r\n    static_assert(test_cdata<members_only&, int const*>());\r\n    static_assert(test_contiguous_range<members_only&>());\r\n\r\n    // Verify that non-members with unacceptable return types are correctly ignored\r\n    struct bogus_non_member : members_only {};\r\n    void* begin(bogus_non_member); // returns non-input_or_output_iterator\r\n    int end(bogus_non_member); // return type doesn't model sentinel_for\r\n    auto rbegin(bogus_non_member) -> void (*)(); // returns non-input_or_output_iterator\r\n    auto rend(bogus_non_member) -> int members_only::*; // return type doesn't model sentinel_for\r\n    char* data(bogus_non_member); // doesn't return pointer to cv-qualified-value_type\r\n    static_assert(test_begin<bogus_non_member&, int*>());\r\n    static_assert(test_end<bogus_non_member&, int*>());\r\n    static_assert(test_cbegin<bogus_non_member&, int const*>());\r\n    static_assert(test_cend<bogus_non_member&, int const*>());\r\n    static_assert(test_rbegin<bogus_non_member&, std::reverse_iterator<int*>>());\r\n    static_assert(test_rend<bogus_non_member&, std::reverse_iterator<int*>>());\r\n    static_assert(test_crbegin<bogus_non_member&, std::reverse_iterator<int const*>>());\r\n    static_assert(test_crend<bogus_non_member&, std::reverse_iterator<int const*>>());\r\n    static_assert(test_size<bogus_non_member&, std::size_t>());\r\n    static_assert(test_empty<bogus_non_member&, true>());\r\n    static_assert(test_data<bogus_non_member&, int*>());\r\n    static_assert(test_cdata<bogus_non_member&, int const*>());\r\n    static_assert(test_contiguous_range<bogus_non_member&>());\r\n\r\n    // Verify that members are preferred to perfectly reasonable non-members\r\n    template <class>\r\n    struct prefer_member : members_only {};\r\n    template <class T>\r\n    int* begin(prefer_member<T>&) {\r\n        static_assert(false);\r\n    }\r\n    template <class T>\r\n    int* end(prefer_member<T>&) {\r\n        static_assert(false);\r\n    }\r\n    template <class T>\r\n    std::reverse_iterator<int*> rbegin(prefer_member<T>&) {\r\n        static_assert(false);\r\n    }\r\n    template <class T>\r\n    std::reverse_iterator<int*> rend(prefer_member<T>&) {\r\n        static_assert(false);\r\n    }\r\n    template <class T>\r\n    int* data(prefer_member<T>&) {\r\n        static_assert(false);\r\n    }\r\n\r\n    constexpr bool test() {\r\n        static_assert(test_begin<prefer_member<void>&, int*>());\r\n        static_assert(test_end<prefer_member<void>&, int*>());\r\n        static_assert(test_cbegin<prefer_member<void>&, int const*>());\r\n        static_assert(test_cend<prefer_member<void>&, int const*>());\r\n        static_assert(test_rbegin<prefer_member<void>&, std::reverse_iterator<int*>>());\r\n        static_assert(test_rend<prefer_member<void>&, std::reverse_iterator<int*>>());\r\n        static_assert(test_crbegin<prefer_member<void>&, std::reverse_iterator<int const*>>());\r\n        static_assert(test_crend<prefer_member<void>&, std::reverse_iterator<int const*>>());\r\n        static_assert(test_size<prefer_member<void>&, std::size_t>());\r\n        static_assert(test_empty<prefer_member<void>&, true>());\r\n        static_assert(test_data<prefer_member<void>&, int*>());\r\n        static_assert(test_cdata<prefer_member<void>&, int const*>());\r\n        static_assert(test_contiguous_range<prefer_member<void>&>());\r\n\r\n        prefer_member<void> r;\r\n\r\n        (void) ranges::begin(r);\r\n        (void) ranges::end(r);\r\n        (void) ranges::cbegin(r);\r\n        (void) ranges::cend(r);\r\n        (void) ranges::rbegin(r);\r\n        (void) ranges::rend(r);\r\n        (void) ranges::crbegin(r);\r\n        (void) ranges::crend(r);\r\n        (void) ranges::empty(r);\r\n        (void) ranges::size(r);\r\n        (void) ranges::data(r);\r\n        (void) ranges::cdata(r);\r\n\r\n        return true;\r\n    }\r\n    static_assert(test());\r\n\r\n    // Verify that ranges::c?r?end reject non-ranges\r\n    struct no_begin {\r\n        int* end() const;\r\n    };\r\n    static_assert(test_begin<no_begin&>());\r\n    static_assert(test_end<no_begin&>());\r\n    static_assert(test_cbegin<no_begin&>());\r\n    static_assert(test_cend<no_begin&>());\r\n    static_assert(test_rbegin<no_begin&>());\r\n    static_assert(test_rend<no_begin&>());\r\n    static_assert(test_crbegin<no_begin&>());\r\n    static_assert(test_crend<no_begin&>());\r\n    static_assert(test_size<no_begin&>());\r\n    static_assert(test_empty<no_begin&, false>());\r\n    static_assert(test_data<no_begin&>());\r\n    static_assert(test_cdata<no_begin&>());\r\n    static_assert(test_non_range<no_begin&>());\r\n} // namespace adl_block\r\n\r\nnamespace disable_sized_range_testing {\r\n    struct program_defined_type {};\r\n\r\n    struct weird_range {\r\n        int* begin() const;\r\n        int* end() const;\r\n    };\r\n} // namespace disable_sized_range_testing\r\n\r\ntemplate <>\r\nconstexpr bool ranges::disable_sized_range<disable_sized_range_testing::program_defined_type[42]> = true;\r\ntemplate <>\r\nconstexpr bool ranges::disable_sized_range<disable_sized_range_testing::weird_range> = true;\r\n\r\n// Overriding disable_sized_range for an array type has no effect:\r\nstatic_assert(ranges::sized_range<disable_sized_range_testing::program_defined_type (&)[42]>);\r\n// Overriding disable_sized_range for a range whose sentinel and iterator model sized_sentinel_for has no effect:\r\nstatic_assert(ranges::sized_range<disable_sized_range_testing::weird_range>);\r\n\r\ntemplate <class T>\r\nconstexpr bool test_array_ish() { // An actual runtime test!\r\n    T array_ish = {0, 1, 2};\r\n\r\n    assert(ranges::empty(array_ish) == false);\r\n\r\n    int const* const first = &*std::begin(array_ish);\r\n    assert(ranges::data(array_ish) == first);\r\n    assert(&*ranges::begin(array_ish) == first);\r\n    assert(&*ranges::cbegin(array_ish) == first);\r\n\r\n    std::size_t const n = std::size(array_ish);\r\n    assert(ranges::size(array_ish) == n);\r\n\r\n    int const* const last = first + n;\r\n    assert(1 + &*(ranges::end(array_ish) - 1) == last);\r\n    assert(1 + &*(ranges::cend(array_ish) - 1) == last);\r\n\r\n    int count = 0;\r\n    for (auto p = ranges::begin(array_ish), e = ranges::end(array_ish); p != e; ++p) {\r\n        assert(*p == count++);\r\n    }\r\n    assert(count == 3);\r\n\r\n    for (auto p = ranges::rbegin(array_ish), e = ranges::rend(array_ish); p != e; ++p) {\r\n        assert(*p == --count);\r\n    }\r\n    assert(count == 0);\r\n\r\n    for (auto p = ranges::cbegin(array_ish), e = ranges::cend(array_ish); p != e; ++p) {\r\n        assert(*p == count++);\r\n    }\r\n    assert(count == 3);\r\n\r\n    for (auto p = ranges::crbegin(array_ish), e = ranges::crend(array_ish); p != e; ++p) {\r\n        assert(*p == --count);\r\n    }\r\n    assert(count == 0);\r\n\r\n    return true;\r\n}\r\n\r\nnamespace nothrow_testing {\r\n    template <unsigned int I, bool NoThrow>\r\n    struct range {\r\n        int elements_[3];\r\n\r\n        // begin/end are members for I == 0, and non-members otherwise\r\n        int* begin() noexcept(NoThrow)\r\n            requires (I == 0)\r\n        {\r\n            return elements_;\r\n        }\r\n        int* end() noexcept(NoThrow)\r\n            requires (I == 0)\r\n        {\r\n            return elements_ + 3;\r\n        }\r\n        int const* begin() const noexcept(NoThrow)\r\n            requires (I == 0)\r\n        {\r\n            return elements_;\r\n        }\r\n        int const* end() const noexcept(NoThrow)\r\n            requires (I == 0)\r\n        {\r\n            return elements_ + 3;\r\n        }\r\n\r\n        // rbegin/rend are members for I == 0, not provided for I == 1, and non-members otherwise\r\n        // (Not providing operations allows us to test the library-provided fallback behavior)\r\n        int* rbegin() noexcept(NoThrow)\r\n            requires (I == 0)\r\n        {\r\n            return elements_;\r\n        }\r\n        int* rend() noexcept(NoThrow)\r\n            requires (I == 0)\r\n        {\r\n            return elements_ + 3;\r\n        }\r\n        int const* rbegin() const noexcept(NoThrow)\r\n            requires (I == 0)\r\n        {\r\n            return elements_;\r\n        }\r\n        int const* rend() const noexcept(NoThrow)\r\n            requires (I == 0)\r\n        {\r\n            return elements_ + 3;\r\n        }\r\n\r\n        // empty is not provided when I == 1\r\n        bool empty() const noexcept(NoThrow)\r\n            requires (I != 1)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        // data is not provided when I == 2\r\n        int* data() noexcept(NoThrow)\r\n            requires (I != 2)\r\n        {\r\n            return elements_;\r\n        }\r\n        int const* data() const noexcept(NoThrow)\r\n            requires (I != 2)\r\n        {\r\n            return elements_;\r\n        }\r\n\r\n        // size is not provided when I == 3\r\n        std::size_t size() const noexcept(NoThrow)\r\n            requires (I != 3)\r\n        {\r\n            return 3;\r\n        }\r\n    };\r\n\r\n    template <unsigned int I, bool NoThrow>\r\n    int* begin(range<I, NoThrow>& a) noexcept(NoThrow)\r\n        requires (I != 0)\r\n    {\r\n        return a.elements_;\r\n    }\r\n    template <unsigned int I, bool NoThrow>\r\n    int* end(range<I, NoThrow>& a) noexcept(NoThrow)\r\n        requires (I != 0)\r\n    {\r\n        return a.elements_ + 3;\r\n    }\r\n    template <unsigned int I, bool NoThrow>\r\n    int const* begin(range<I, NoThrow> const& a) noexcept(NoThrow)\r\n        requires (I != 0)\r\n    {\r\n        return a.elements_;\r\n    }\r\n    template <unsigned int I, bool NoThrow>\r\n    int const* end(range<I, NoThrow> const& a) noexcept(NoThrow)\r\n        requires (I != 0)\r\n    {\r\n        return a.elements_ + 3;\r\n    }\r\n\r\n    template <unsigned int I, bool NoThrow>\r\n    int* rbegin(range<I, NoThrow>& a) noexcept(NoThrow)\r\n        requires (I > 2)\r\n    {\r\n        return a.elements_;\r\n    }\r\n    template <unsigned int I, bool NoThrow>\r\n    int* rend(range<I, NoThrow>& a) noexcept(NoThrow)\r\n        requires (I > 2)\r\n    {\r\n        return a.elements_ + 3;\r\n    }\r\n    template <unsigned int I, bool NoThrow>\r\n    int const* rbegin(range<I, NoThrow> const& a) noexcept(NoThrow)\r\n        requires (I > 2)\r\n    {\r\n        return a.elements_;\r\n    }\r\n    template <unsigned int I, bool NoThrow>\r\n    int const* rend(range<I, NoThrow> const& a) noexcept(NoThrow)\r\n        requires (I > 2)\r\n    {\r\n        return a.elements_ + 3;\r\n    }\r\n\r\n    template <class T, bool Nothrow>\r\n    constexpr bool test() {\r\n        T t = {{0, 1, 2}};\r\n\r\n        static_assert(noexcept(ranges::begin(t)) == Nothrow);\r\n        static_assert(noexcept(ranges::end(t)) == Nothrow);\r\n        static_assert(noexcept(ranges::cbegin(t)) == Nothrow);\r\n        static_assert(noexcept(ranges::cend(t)) == Nothrow);\r\n        static_assert(noexcept(ranges::rbegin(t)) == Nothrow);\r\n        static_assert(noexcept(ranges::rend(t)) == Nothrow);\r\n        static_assert(noexcept(ranges::crbegin(t)) == Nothrow);\r\n        static_assert(noexcept(ranges::crend(t)) == Nothrow);\r\n        static_assert(noexcept(ranges::empty(t)) == Nothrow);\r\n        static_assert(noexcept(ranges::size(t)) == Nothrow);\r\n        static_assert(noexcept(ranges::ssize(t)) == Nothrow);\r\n        static_assert(noexcept(ranges::data(t)) == Nothrow);\r\n        static_assert(noexcept(ranges::cdata(t)) == Nothrow);\r\n\r\n        return true;\r\n    }\r\n\r\n    // Validate conditional noexcept\r\n    static_assert(nothrow_testing::test<range<0, true>, true>());\r\n    static_assert(nothrow_testing::test<range<1, true>, true>());\r\n    static_assert(nothrow_testing::test<range<2, true>, true>());\r\n    static_assert(nothrow_testing::test<range<3, true>, true>());\r\n    static_assert(nothrow_testing::test<range<4, true>, true>());\r\n    static_assert(nothrow_testing::test<range<0, false>, false>());\r\n    static_assert(nothrow_testing::test<range<1, false>, false>());\r\n    static_assert(nothrow_testing::test<range<2, false>, false>());\r\n    static_assert(nothrow_testing::test<range<3, false>, false>());\r\n    static_assert(nothrow_testing::test<range<4, false>, false>());\r\n} // namespace nothrow_testing\r\n\r\nnamespace subsumption_testing {\r\n    // Validate that the \"indirectly_readable\" range concepts properly subsume (doubly important given that we spell\r\n    // them differently than does the working draft)\r\n    enum range_type {\r\n        exactly_range,\r\n        exactly_input_range,\r\n        exactly_forward_range,\r\n        exactly_bidirectional_range,\r\n        exactly_random_access_range,\r\n        exactly_contiguous_range\r\n    };\r\n\r\n    template <ranges::range R>\r\n    constexpr range_type f() {\r\n        return exactly_range;\r\n    }\r\n    template <ranges::input_range R>\r\n    constexpr range_type f() {\r\n        return exactly_input_range;\r\n    }\r\n    template <ranges::forward_range R>\r\n    constexpr range_type f() {\r\n        return exactly_forward_range;\r\n    }\r\n    template <ranges::bidirectional_range R>\r\n    constexpr range_type f() {\r\n        return exactly_bidirectional_range;\r\n    }\r\n    template <ranges::random_access_range R>\r\n    constexpr range_type f() {\r\n        return exactly_random_access_range;\r\n    }\r\n    template <ranges::contiguous_range R>\r\n    constexpr range_type f() {\r\n        return exactly_contiguous_range;\r\n    }\r\n\r\n    struct simple_input_range {\r\n        struct sentinel {\r\n            bool operator==(std::istream_iterator<int>) const;\r\n        };\r\n        std::istream_iterator<int> begin() const;\r\n        static sentinel end();\r\n    };\r\n\r\n    static_assert(f<simple_input_range>() == exactly_input_range);\r\n    static_assert(f<std::forward_list<int>>() == exactly_forward_range);\r\n    static_assert(f<std::list<int>>() == exactly_bidirectional_range);\r\n    static_assert(f<std::deque<int>>() == exactly_random_access_range);\r\n    static_assert(f<int (&)[42]>() == exactly_contiguous_range);\r\n} // namespace subsumption_testing\r\n\r\nnamespace borrowed_range_testing {\r\n    template <class Rng, class Iterator, class Sentinel = Iterator, class RIterator = std::reverse_iterator<Iterator>,\r\n        class RSentinel = RIterator>\r\n    constexpr bool test_borrowed_range() {\r\n        // Validate that rvalue/lvalue const/non-const Rng models borrowed_range\r\n        static_assert(Decayed<Rng>);\r\n\r\n        static_assert(test_begin<Rng, Iterator>());\r\n        static_assert(test_end<Rng, Sentinel>());\r\n        static_assert(test_rbegin<Rng, RIterator>());\r\n        static_assert(test_rend<Rng, RSentinel>());\r\n        static_assert(ranges::borrowed_range<Rng>);\r\n\r\n        static_assert(test_begin<Rng&, Iterator>());\r\n        static_assert(test_end<Rng&, Sentinel>());\r\n        static_assert(test_rbegin<Rng&, RIterator>());\r\n        static_assert(test_rend<Rng&, RSentinel>());\r\n        static_assert(ranges::borrowed_range<Rng&>);\r\n\r\n        static_assert(test_begin<Rng const, Iterator>());\r\n        static_assert(test_end<Rng const, Sentinel>());\r\n        static_assert(test_rbegin<Rng const, RIterator>());\r\n        static_assert(test_rend<Rng const, RSentinel>());\r\n        static_assert(ranges::borrowed_range<Rng const>);\r\n\r\n        static_assert(test_begin<Rng const&, Iterator>());\r\n        static_assert(test_end<Rng const&, Sentinel>());\r\n        static_assert(test_rbegin<Rng const&, RIterator>());\r\n        static_assert(test_rend<Rng const&, RSentinel>());\r\n        static_assert(ranges::borrowed_range<Rng const&>);\r\n\r\n        return true;\r\n    }\r\n\r\n    static_assert(test_borrowed_range<std::string_view, std::string_view::iterator>());\r\n    static_assert(test_borrowed_range<std::wstring_view, std::wstring_view::iterator>());\r\n    static_assert(test_borrowed_range<std::span<int>, std::span<int>::iterator>());\r\n    static_assert(test_borrowed_range<std::span<int, 42>, std::span<int, 42>::iterator>());\r\n    static_assert(test_borrowed_range<ranges::subrange<int*, int*>, int*>());\r\n    static_assert(test_borrowed_range<ranges::ref_view<int[42]>, int*>());\r\n    static_assert(test_borrowed_range<ranges::iota_view<int, int>, ranges::iterator_t<ranges::iota_view<int, int>>>());\r\n\r\n    struct simple_borrowed_range {\r\n        int* begin() const {\r\n            return nullptr;\r\n        }\r\n        int* end() const {\r\n            return nullptr;\r\n        }\r\n    };\r\n\r\n    struct less_simple_borrowed_range {\r\n        friend int* begin(less_simple_borrowed_range) {\r\n            return nullptr;\r\n        }\r\n        friend int* end(less_simple_borrowed_range) {\r\n            return nullptr;\r\n        }\r\n    };\r\n} // namespace borrowed_range_testing\r\n\r\ntemplate <>\r\ninline constexpr bool std::ranges::enable_borrowed_range<borrowed_range_testing::simple_borrowed_range> = true;\r\ntemplate <>\r\ninline constexpr bool std::ranges::enable_borrowed_range<borrowed_range_testing::less_simple_borrowed_range> = true;\r\n\r\nnamespace borrowed_range_testing {\r\n    static_assert(test_borrowed_range<simple_borrowed_range, int*>());\r\n    static_assert(test_borrowed_range<less_simple_borrowed_range, int*>());\r\n} // namespace borrowed_range_testing\r\n\r\ntemplate <bool AllowNonConst, bool AllowConst, bool AllowSize>\r\nstruct arbitrary_range {\r\n    arbitrary_range()                             = default;\r\n    arbitrary_range(arbitrary_range&&)            = default;\r\n    arbitrary_range& operator=(arbitrary_range&&) = default;\r\n\r\n    int* begin()\r\n        requires AllowNonConst;\r\n    int* end()\r\n        requires AllowNonConst;\r\n\r\n    int const* begin() const\r\n        requires AllowConst;\r\n    int const* end() const\r\n        requires AllowConst;\r\n\r\n    unsigned char size() const\r\n        requires AllowSize;\r\n};\r\n\r\nusing mutable_unsized_range      = arbitrary_range<true, true, false>;\r\nusing mutable_only_no_size_range = arbitrary_range<true, false, false>;\r\nusing immutable_unsized_range    = arbitrary_range<false, true, false>;\r\nusing mutable_sized_range        = arbitrary_range<true, true, true>;\r\nusing mutable_only_sized_range   = arbitrary_range<true, false, true>;\r\nusing immutable_sized_range      = arbitrary_range<false, true, true>;\r\n\r\ntemplate <class Base>\r\nstruct badsized_range : Base { // size() launches the missiles.\r\n    badsized_range()                            = default;\r\n    badsized_range(badsized_range&&)            = default;\r\n    badsized_range& operator=(badsized_range&&) = default;\r\n\r\n    [[noreturn]] int size() const {\r\n        static_assert(false);\r\n    }\r\n\r\n    [[noreturn]] friend int size(const badsized_range&) {\r\n        static_assert(false);\r\n    }\r\n};\r\n\r\nusing mutable_badsized_range      = badsized_range<mutable_sized_range>;\r\nusing mutable_only_badsized_range = badsized_range<mutable_only_sized_range>;\r\nusing immutable_badsized_range    = badsized_range<immutable_sized_range>;\r\n\r\ntemplate <class T>\r\nconstexpr bool ranges::disable_sized_range<badsized_range<T>> = true;\r\n\r\n// \"strange\" in that const-ness affects the iterator type\r\nstruct strange_view {\r\n    strange_view()                          = default;\r\n    strange_view(strange_view&&)            = default;\r\n    strange_view& operator=(strange_view&&) = default;\r\n\r\n    int* begin();\r\n    int const* begin() const;\r\n\r\n    int* end();\r\n    int const* end() const;\r\n};\r\n\r\nstruct strange_view2 : strange_view, ranges::view_base {};\r\nstruct strange_view3 : strange_view2 {}; // not truly a view since enable_view<strange_view3> is false (see below)\r\nstruct strange_view4 : strange_view, ranges::view_interface<strange_view4> {};\r\nstruct strange_view5 : strange_view4, ranges::view_interface<strange_view5> {\r\n    // not truly a view since enable_view<strange_view5> is false due to multiple inheritance from view_interface\r\n};\r\n\r\n// Verify that specializations of view_interface do not inherit from view_base\r\nstatic_assert(!std::is_base_of_v<std::ranges::view_base, ranges::view_interface<strange_view4>>);\r\nstatic_assert(!std::is_base_of_v<std::ranges::view_base, ranges::view_interface<strange_view5>>);\r\n\r\n// Verify that enable_view<T&> or enable_view<T&&> is never true\r\nstatic_assert(ranges::enable_view<strange_view4>);\r\nstatic_assert(!ranges::enable_view<strange_view4&>);\r\nstatic_assert(!ranges::enable_view<const strange_view4&>);\r\nstatic_assert(!ranges::enable_view<strange_view4&&>);\r\nstatic_assert(!ranges::enable_view<const strange_view4&&>);\r\n\r\n// Verify that enable_view<view_interface<T>> is false, i.e., strict derivation is required\r\nstatic_assert(!ranges::enable_view<ranges::view_interface<strange_view4>>);\r\nstatic_assert(!ranges::enable_view<ranges::view_interface<strange_view5>>);\r\n\r\n// Verify that enable_view ignores cv-qualification by default\r\ntemplate <class T>\r\nvoid test_enable_view_cv() { // COMPILE-ONLY\r\n    static_assert(ranges::enable_view<const T> == ranges::enable_view<T>);\r\n    static_assert(ranges::enable_view<volatile T> == ranges::enable_view<T>);\r\n    static_assert(ranges::enable_view<const volatile T> == ranges::enable_view<T>);\r\n}\r\n\r\nvoid test_enable_view_cv_all() { // COMPILE-ONLY\r\n    test_enable_view_cv<strange_view4>();\r\n    test_enable_view_cv<strange_view5>();\r\n    test_enable_view_cv<ranges::view_interface<strange_view4>>();\r\n    test_enable_view_cv<ranges::view_interface<strange_view5>>();\r\n}\r\n\r\n// Verify that the derived-from-view_interface mechanism can handle uses of incomplete types whenever possible\r\nstruct incomplet;\r\n\r\ntemplate <class T>\r\nstruct value_holder {\r\n    T t;\r\n};\r\n\r\nstatic_assert(!ranges::enable_view<value_holder<incomplet>*>);\r\n\r\ntemplate <>\r\ninline constexpr bool ranges::enable_view<strange_view> = true;\r\ntemplate <>\r\ninline constexpr bool ranges::enable_view<strange_view3> = false;\r\n\r\n// Test types that satisfy `view` only when being cv-qualified.\r\n\r\nstruct view_when_const1 : ranges::view_base {\r\n    view_when_const1(const view_when_const1&&);\r\n    const view_when_const1& operator=(const view_when_const1&&) const;\r\n\r\n    friend void swap(const view_when_const1&, const view_when_const1&);\r\n\r\n    int* begin() const;\r\n    int* end() const;\r\n};\r\n\r\nstruct view_when_const2 : ranges::view_interface<view_when_const2> {\r\n    view_when_const2(const view_when_const2&&);\r\n    const view_when_const2& operator=(const view_when_const2&&) const;\r\n\r\n    friend void swap(const view_when_const2&, const view_when_const2&);\r\n\r\n    int* begin() const;\r\n    int* end() const;\r\n\r\n    // avoid checking ranges::view_interface<view_when_const2>::size()\r\n    void size()       = delete;\r\n    void size() const = delete;\r\n};\r\n\r\nstruct view_when_volatile1 : ranges::view_base {\r\n    view_when_volatile1(volatile view_when_volatile1&&);\r\n    volatile view_when_volatile1& operator=(volatile view_when_volatile1&&) volatile;\r\n\r\n    friend void swap(volatile view_when_volatile1&, volatile view_when_volatile1&);\r\n\r\n    int* begin() volatile;\r\n    int* end() volatile;\r\n};\r\n\r\nstruct view_when_volatile2 : ranges::view_interface<view_when_volatile2> {\r\n    view_when_volatile2(volatile view_when_volatile2&&);\r\n    volatile view_when_volatile2& operator=(volatile view_when_volatile2&&) volatile;\r\n\r\n    friend void swap(volatile view_when_volatile2&, volatile view_when_volatile2&);\r\n\r\n    int* begin() volatile;\r\n    int* end() volatile;\r\n\r\n    // avoid checking ranges::view_interface<view_when_volatile2>::size()\r\n    void size()       = delete;\r\n    void size() const = delete;\r\n};\r\n\r\nstruct view_when_const_volatile1 : ranges::view_base {\r\n    view_when_const_volatile1(const volatile view_when_const_volatile1&&);\r\n    const volatile view_when_const_volatile1& operator=(const volatile view_when_const_volatile1&&) const volatile;\r\n\r\n    friend void swap(const volatile view_when_const_volatile1&, const volatile view_when_const_volatile1&);\r\n\r\n    int* begin() const volatile;\r\n    int* end() const volatile;\r\n};\r\n\r\nstruct view_when_const_volatile2 : ranges::view_interface<view_when_const_volatile2> {\r\n    view_when_const_volatile2(const volatile view_when_const_volatile2&&);\r\n    const volatile view_when_const_volatile2& operator=(const volatile view_when_const_volatile2&&) const volatile;\r\n\r\n    friend void swap(const volatile view_when_const_volatile2&, const volatile view_when_const_volatile2&);\r\n\r\n    int* begin() const volatile;\r\n    int* end() const volatile;\r\n\r\n    // avoid checking ranges::view_interface<view_when_const_volatile2>::size()\r\n    void size()       = delete;\r\n    void size() const = delete;\r\n};\r\n\r\nnamespace exhaustive_size_and_view_test {\r\n    template <class Rng, bool IsView = false, class Iterator = invalid_type, class Size = invalid_type>\r\n    constexpr bool test() {\r\n        static_assert(ranges::range<Rng> == is_valid<Iterator>);\r\n        if constexpr (is_valid<Iterator>) {\r\n            static_assert(std::same_as<ranges::iterator_t<Rng>, Iterator>);\r\n        }\r\n\r\n        static_assert(ranges::sized_range<Rng> == is_valid<Size>);\r\n        if constexpr (is_valid<Size>) {\r\n            static_assert(std::same_as<decltype(ranges::size(std::declval<Rng>())), Size>);\r\n\r\n            using SignedSize = std::common_type_t<std::ptrdiff_t, std::make_signed_t<Size>>;\r\n            static_assert(std::same_as<decltype(ranges::ssize(std::declval<Rng>())), SignedSize>);\r\n        }\r\n\r\n        static_assert(ranges::view<Rng> == IsView);\r\n        return true;\r\n    }\r\n\r\n    using I  = int*;\r\n    using CI = int const*;\r\n    using S  = std::size_t;\r\n    using UC = unsigned char;\r\n\r\n    static_assert(test<mutable_unsized_range, false, I, S>());\r\n    static_assert(test<mutable_unsized_range&, false, I, S>());\r\n    static_assert(test<mutable_unsized_range const, false, CI, S>());\r\n    static_assert(test<mutable_unsized_range const&, false, CI, S>());\r\n\r\n    static_assert(test<mutable_only_no_size_range, false, I, S>());\r\n    static_assert(test<mutable_only_no_size_range&, false, I, S>());\r\n    static_assert(test<mutable_only_no_size_range const>());\r\n    static_assert(test<mutable_only_no_size_range const&>());\r\n\r\n    static_assert(test<immutable_unsized_range, false, CI, S>());\r\n    static_assert(test<immutable_unsized_range&, false, CI, S>());\r\n    static_assert(test<immutable_unsized_range const, false, CI, S>());\r\n    static_assert(test<immutable_unsized_range const&, false, CI, S>());\r\n\r\n    static_assert(test<mutable_sized_range, false, I, UC>());\r\n    static_assert(test<mutable_sized_range&, false, I, UC>());\r\n    static_assert(test<mutable_sized_range const, false, CI, UC>());\r\n    static_assert(test<mutable_sized_range const&, false, CI, UC>());\r\n\r\n    static_assert(test<mutable_only_sized_range, false, I, UC>());\r\n    static_assert(test<mutable_only_sized_range&, false, I, UC>());\r\n    static_assert(test<mutable_only_sized_range const>());\r\n    static_assert(test<mutable_only_sized_range const&>());\r\n\r\n    static_assert(test<immutable_sized_range, false, CI, UC>());\r\n    static_assert(test<immutable_sized_range&, false, CI, UC>());\r\n    static_assert(test<immutable_sized_range const, false, CI, UC>());\r\n    static_assert(test<immutable_sized_range const&, false, CI, UC>());\r\n\r\n    static_assert(test<mutable_badsized_range, false, I, S>());\r\n    static_assert(test<mutable_badsized_range&, false, I, S>());\r\n    static_assert(test<mutable_badsized_range const, false, CI, S>());\r\n    static_assert(test<mutable_badsized_range const&, false, CI, S>());\r\n\r\n    static_assert(test<mutable_only_badsized_range, false, I, S>());\r\n    static_assert(test<mutable_only_badsized_range&, false, I, S>());\r\n    static_assert(test<mutable_only_badsized_range const>());\r\n    static_assert(test<mutable_only_badsized_range const&>());\r\n\r\n    static_assert(test<immutable_badsized_range, false, CI, S>());\r\n    static_assert(test<immutable_badsized_range&, false, CI, S>());\r\n    static_assert(test<immutable_badsized_range const, false, CI, S>());\r\n    static_assert(test<immutable_badsized_range const&, false, CI, S>());\r\n\r\n    static_assert(test<strange_view, true, I, S>());\r\n    static_assert(test<strange_view&, false, I, S>());\r\n    static_assert(test<strange_view const, false, CI, S>());\r\n    static_assert(test<strange_view const&, false, CI, S>());\r\n\r\n    static_assert(test<strange_view2, true, I, S>());\r\n    static_assert(test<strange_view2&, false, I, S>());\r\n    static_assert(test<strange_view2 const, false, CI, S>());\r\n    static_assert(test<strange_view2 const&, false, CI, S>());\r\n\r\n    static_assert(test<strange_view3, false, I, S>());\r\n    static_assert(test<strange_view3&, false, I, S>());\r\n    static_assert(test<strange_view3 const, false, CI, S>());\r\n    static_assert(test<strange_view3 const&, false, CI, S>());\r\n\r\n    static_assert(test<strange_view4, true, I, S>());\r\n    static_assert(test<strange_view4&, false, I, S>());\r\n    static_assert(test<strange_view4 const, false, CI, S>());\r\n    static_assert(test<strange_view4 const&, false, CI, S>());\r\n\r\n    template <class = void>\r\n    constexpr bool strict_test_case() {\r\n        if constexpr (!is_permissive) {\r\n            static_assert(test<strange_view5, false, I, S>());\r\n        }\r\n        return true;\r\n    }\r\n    static_assert(strict_test_case());\r\n    static_assert(test<strange_view5&, false, I, S>());\r\n    static_assert(test<strange_view5 const, false, CI, S>());\r\n    static_assert(test<strange_view5 const&, false, CI, S>());\r\n\r\n    static_assert(test<view_when_const1, false, I, S>());\r\n    static_assert(test<view_when_const1 const, true, I, S>());\r\n    static_assert(test<view_when_const1&, false, I, S>());\r\n    static_assert(test<view_when_const1 const&, false, I, S>());\r\n\r\n    static_assert(test<view_when_const2, false, I, S>());\r\n    static_assert(test<view_when_const2 const, true, I, S>());\r\n    static_assert(test<view_when_const2&, false, I, S>());\r\n    static_assert(test<view_when_const2 const&, false, I, S>());\r\n\r\n    static_assert(test<view_when_volatile1, false, I, S>());\r\n    static_assert(test<view_when_volatile1 const, false>());\r\n    static_assert(test<view_when_volatile1&, false, I, S>());\r\n    static_assert(test<view_when_volatile1 const&, false>());\r\n\r\n    static_assert(test<view_when_volatile2, false, I, S>());\r\n    static_assert(test<view_when_volatile2 const, false>());\r\n    static_assert(test<view_when_volatile2&, false, I, S>());\r\n    static_assert(test<view_when_volatile2 const&, false>());\r\n\r\n    static_assert(test<view_when_volatile1 volatile, true, I, S>());\r\n    static_assert(test<view_when_volatile1 const volatile, false>());\r\n    static_assert(test<view_when_volatile1 volatile&, false, I, S>());\r\n    static_assert(test<view_when_volatile1 const volatile&, false>());\r\n\r\n    static_assert(test<view_when_volatile2 volatile, true, I, S>());\r\n    static_assert(test<view_when_volatile2 const volatile, false>());\r\n    static_assert(test<view_when_volatile2 volatile&, false, I, S>());\r\n    static_assert(test<view_when_volatile2 const volatile&, false>());\r\n\r\n    static_assert(test<view_when_const_volatile1, false, I, S>());\r\n    static_assert(test<view_when_const_volatile1 const, false, I, S>());\r\n    static_assert(test<view_when_const_volatile1&, false, I, S>());\r\n    static_assert(test<view_when_const_volatile1 const&, false, I, S>());\r\n\r\n    static_assert(test<view_when_const_volatile2, false, I, S>());\r\n    static_assert(test<view_when_const_volatile2 const, false, I, S>());\r\n    static_assert(test<view_when_const_volatile2&, false, I, S>());\r\n    static_assert(test<view_when_const_volatile2 const&, false, I, S>());\r\n\r\n    static_assert(test<view_when_const_volatile1 volatile, false, I, S>());\r\n    static_assert(test<view_when_const_volatile1 const volatile, true, I, S>());\r\n    static_assert(test<view_when_const_volatile1 volatile&, false, I, S>());\r\n    static_assert(test<view_when_const_volatile1 const volatile&, false, I, S>());\r\n\r\n    static_assert(test<view_when_const_volatile2 volatile, false, I, S>());\r\n    static_assert(test<view_when_const_volatile2 const volatile, true, I, S>());\r\n    static_assert(test<view_when_const_volatile2 volatile&, false, I, S>());\r\n    static_assert(test<view_when_const_volatile2 const volatile&, false, I, S>());\r\n} // namespace exhaustive_size_and_view_test\r\n\r\n// Validate output_range\r\nstatic_assert(ranges::output_range<int[42], int>);\r\nstatic_assert(ranges::output_range<int[42], int&>);\r\nstatic_assert(ranges::output_range<int[42], int const>);\r\nstatic_assert(ranges::output_range<int[42], int const&>);\r\n\r\nstatic_assert(ranges::output_range<int[42], short>);\r\nstatic_assert(ranges::output_range<int[42], short&>);\r\nstatic_assert(ranges::output_range<int[42], short const>);\r\nstatic_assert(ranges::output_range<int[42], short const&>);\r\n\r\nstatic_assert(!ranges::output_range<int[42], char*>);\r\nstatic_assert(!ranges::output_range<int[42], char*&>);\r\nstatic_assert(!ranges::output_range<int[42], char* const>);\r\nstatic_assert(!ranges::output_range<int[42], char* const&>);\r\n\r\ntemplate <std::input_or_output_iterator I, std::sentinel_for<I> S>\r\nconstexpr I complicated_algorithm(I i, S const s) {\r\n    while (i != s) {\r\n        ++i;\r\n    }\r\n    return i;\r\n}\r\n\r\ntemplate <ranges::range R>\r\nconstexpr ranges::iterator_t<R> complicated_algorithm(R&& r) {\r\n    return complicated_algorithm(ranges::begin(r), ranges::end(r));\r\n}\r\n\r\ntemplate <class T>\r\nstruct array_view : ranges::view_base {\r\n    T* first_;\r\n    std::size_t n_;\r\n\r\n    array_view() = default;\r\n    template <std::size_t N>\r\n    constexpr array_view(T (&a)[N]) : first_{a}, n_{N} {}\r\n\r\n    constexpr auto begin() const {\r\n        return first_;\r\n    }\r\n    constexpr auto end() const {\r\n        return first_ + n_;\r\n    }\r\n    constexpr auto size() const {\r\n        return n_;\r\n    }\r\n};\r\n\r\nconstexpr bool complicated_algorithm_test() {\r\n    int const some_ints[] = {2, 3, 5, 7};\r\n    assert(complicated_algorithm(some_ints) == ranges::end(some_ints));\r\n    assert(complicated_algorithm(array_view{some_ints}) == ranges::end(some_ints));\r\n    static_assert(ranges::view<decltype(array_view{some_ints})>);\r\n    return true;\r\n}\r\n\r\n// Regression test for DevCom-739010 (aka VSO-985597)\r\n// which allows overload resolution to prefer a hidden friend `const T&` overload of `begin`\r\n// for an rvalue `T` over the deleted `begin(T&&)` instantiated from the poison pill.\r\ntemplate <class T>\r\nstruct bad_string_view {\r\n    friend T const* begin(bad_string_view const&) {\r\n        return nullptr;\r\n    }\r\n};\r\nstatic_assert(!CanBegin<bad_string_view<char>>);\r\n\r\n// Validate viewable_range\r\nstatic_assert(!ranges::viewable_range<void>);\r\nstatic_assert(!ranges::viewable_range<int>);\r\nstatic_assert(!ranges::viewable_range<int&>);\r\nstatic_assert(!ranges::viewable_range<int*>);\r\nstatic_assert(!ranges::viewable_range<int()>);\r\nstatic_assert(!ranges::viewable_range<int (&)()>);\r\nstatic_assert(!ranges::viewable_range<int (*)()>);\r\nstatic_assert(!ranges::viewable_range<int() const>);\r\n\r\nstatic_assert(ranges::viewable_range<std::vector<int>&>);\r\nstatic_assert(ranges::viewable_range<std::vector<int> const&>);\r\nstatic_assert(ranges::viewable_range<std::vector<int>>);\r\nstatic_assert(!ranges::viewable_range<std::vector<int> const>);\r\nstatic_assert(ranges::viewable_range<std::string_view&>);\r\nstatic_assert(ranges::viewable_range<std::string_view const&>);\r\nstatic_assert(ranges::viewable_range<std::string_view>);\r\nstatic_assert(ranges::viewable_range<std::string_view const>);\r\nstatic_assert(ranges::viewable_range<std::span<int>&>);\r\nstatic_assert(ranges::viewable_range<std::span<int> const&>);\r\nstatic_assert(ranges::viewable_range<std::span<int>>);\r\nstatic_assert(ranges::viewable_range<std::span<int> const>);\r\n\r\nnamespace poison_pill_test {\r\n    template <class T>\r\n    int* begin(T&);\r\n    template <class T>\r\n    int const* begin(T const&);\r\n    template <class T>\r\n    int* end(T&);\r\n    template <class T>\r\n    int const* end(T const&);\r\n    template <class T>\r\n    std::reverse_iterator<int*> rbegin(T&);\r\n    template <class T>\r\n    std::reverse_iterator<int const*> rbegin(T const&);\r\n    template <class T>\r\n    std::reverse_iterator<int*> rend(T&);\r\n    template <class T>\r\n    std::reverse_iterator<int const*> rend(T const&);\r\n    template <class T>\r\n    std::size_t size(T&);\r\n    template <class T>\r\n    std::size_t size(T const&);\r\n\r\n    struct some_type {};\r\n\r\n    // The above underconstrained templates were blocked by the poison pills for the ranges CPOs\r\n    // until P2602R2 removed them.\r\n\r\n    static_assert(CanBegin<some_type&>);\r\n    static_assert(CanBegin<some_type const&>);\r\n    static_assert(CanEnd<some_type&>);\r\n    static_assert(CanEnd<some_type const&>);\r\n    static_assert(CanRBegin<some_type&>);\r\n    static_assert(CanRBegin<some_type const&>);\r\n    static_assert(CanREnd<some_type&>);\r\n    static_assert(CanREnd<some_type const&>);\r\n    static_assert(CanSize<some_type&>);\r\n    static_assert(CanSize<some_type const&>);\r\n} // namespace poison_pill_test\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n// N.B. reverse_iterator<value_holder<incomplet>*> can't be made ADL-proof and doesn't model bidirectional_iterator,\r\n// so the rbegin()/rend() member functions return the same iterators as begin()/end().\r\nnamespace adl_proof_test {\r\n    struct validating_member_range {\r\n        value_holder<incomplet>* elems_[1];\r\n\r\n        constexpr value_holder<incomplet>** begin() noexcept {\r\n            return elems_;\r\n        }\r\n        constexpr value_holder<incomplet>* const* begin() const noexcept {\r\n            return elems_;\r\n        }\r\n\r\n        constexpr value_holder<incomplet>** end() noexcept {\r\n            return elems_ + 1;\r\n        }\r\n        constexpr value_holder<incomplet>* const* end() const noexcept {\r\n            return elems_ + 1;\r\n        }\r\n\r\n        constexpr value_holder<incomplet>** rbegin() noexcept {\r\n            return elems_;\r\n        }\r\n        constexpr value_holder<incomplet>* const* rbegin() const noexcept {\r\n            return elems_;\r\n        }\r\n\r\n        constexpr value_holder<incomplet>** rend() noexcept {\r\n            return elems_ + 1;\r\n        }\r\n        constexpr value_holder<incomplet>* const* rend() const noexcept {\r\n            return elems_ + 1;\r\n        }\r\n\r\n        constexpr value_holder<incomplet>** data() noexcept {\r\n            return elems_;\r\n        }\r\n        constexpr value_holder<incomplet>* const* data() const noexcept {\r\n            return elems_;\r\n        }\r\n    };\r\n\r\n    static_assert(CanBegin<validating_member_range&>);\r\n    static_assert(CanBegin<const validating_member_range&>);\r\n    static_assert(CanCBegin<validating_member_range&>);\r\n    static_assert(CanCBegin<const validating_member_range&>);\r\n\r\n    static_assert(CanEnd<validating_member_range&>);\r\n    static_assert(CanEnd<const validating_member_range&>);\r\n    static_assert(CanCEnd<validating_member_range&>);\r\n    static_assert(CanCEnd<const validating_member_range&>);\r\n\r\n    static_assert(CanRBegin<validating_member_range&>);\r\n    static_assert(CanRBegin<const validating_member_range&>);\r\n    static_assert(CanCRBegin<validating_member_range&>);\r\n    static_assert(CanCRBegin<const validating_member_range&>);\r\n\r\n    static_assert(CanREnd<validating_member_range&>);\r\n    static_assert(CanREnd<const validating_member_range&>);\r\n    static_assert(CanCREnd<validating_member_range&>);\r\n    static_assert(CanCREnd<const validating_member_range&>);\r\n\r\n    static_assert(CanData<validating_member_range&>);\r\n    static_assert(CanData<const validating_member_range&>);\r\n    static_assert(CanCData<validating_member_range&>);\r\n    static_assert(CanCData<const validating_member_range&>);\r\n\r\n    struct validating_nonmember_range {\r\n        value_holder<incomplet>* elems_[1];\r\n\r\n        friend constexpr value_holder<incomplet>** begin(validating_nonmember_range& r) noexcept {\r\n            return r.elems_;\r\n        }\r\n        friend constexpr value_holder<incomplet>* const* begin(const validating_nonmember_range& r) noexcept {\r\n            return r.elems_;\r\n        }\r\n\r\n        friend constexpr value_holder<incomplet>** end(validating_nonmember_range& r) noexcept {\r\n            return r.elems_ + 1;\r\n        }\r\n        friend constexpr value_holder<incomplet>* const* end(const validating_nonmember_range& r) noexcept {\r\n            return r.elems_ + 1;\r\n        }\r\n\r\n        friend constexpr value_holder<incomplet>** rbegin(validating_nonmember_range& r) noexcept {\r\n            return r.elems_;\r\n        }\r\n        friend constexpr value_holder<incomplet>* const* rbegin(const validating_nonmember_range& r) noexcept {\r\n            return r.elems_;\r\n        }\r\n\r\n        friend constexpr value_holder<incomplet>** rend(validating_nonmember_range& r) noexcept {\r\n            return r.elems_ + 1;\r\n        }\r\n        friend constexpr value_holder<incomplet>* const* rend(const validating_nonmember_range& r) noexcept {\r\n            return r.elems_ + 1;\r\n        }\r\n    };\r\n\r\n    static_assert(CanBegin<validating_nonmember_range&>);\r\n    static_assert(CanBegin<const validating_nonmember_range&>);\r\n    static_assert(CanCBegin<validating_nonmember_range&>);\r\n    static_assert(CanCBegin<const validating_nonmember_range&>);\r\n\r\n    static_assert(CanEnd<validating_nonmember_range&>);\r\n    static_assert(CanEnd<const validating_nonmember_range&>);\r\n    static_assert(CanCEnd<validating_nonmember_range&>);\r\n    static_assert(CanCEnd<const validating_nonmember_range&>);\r\n\r\n    static_assert(CanRBegin<validating_nonmember_range&>);\r\n    static_assert(CanRBegin<const validating_nonmember_range&>);\r\n    static_assert(CanCRBegin<validating_nonmember_range&>);\r\n    static_assert(CanCRBegin<const validating_nonmember_range&>);\r\n\r\n    static_assert(CanREnd<validating_nonmember_range&>);\r\n    static_assert(CanREnd<const validating_nonmember_range&>);\r\n    static_assert(CanCREnd<validating_nonmember_range&>);\r\n    static_assert(CanCREnd<const validating_nonmember_range&>);\r\n\r\n    struct nonsizable_type {\r\n        constexpr value_holder<incomplet>* size() const noexcept {\r\n            return nullptr;\r\n        }\r\n\r\n        friend constexpr value_holder<incomplet>* size(nonsizable_type) noexcept {\r\n            return nullptr;\r\n        }\r\n    };\r\n\r\n    static_assert(CanSize<validating_member_range>);\r\n    static_assert(CanSize<validating_nonmember_range>);\r\n    static_assert(!CanSize<nonsizable_type>);\r\n} // namespace adl_proof_test\r\n#endif // ^^^ no workaround ^^^\r\n\r\nnamespace unwrapped_begin_end {\r\n    // Validate the iterator-unwrapping range access CPOs ranges::_Ubegin and ranges::_Uend\r\n    using test::CanCompare, test::CanDifference, test::Common, test::ProxyRef, test::Sized, test::WrappedState;\r\n\r\n    template <WrappedState IterWrapped, WrappedState SentWrapped = IterWrapped>\r\n    struct range {\r\n        using I = test::iterator<std::forward_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::yes,\r\n            IterWrapped>;\r\n        using S = test::sentinel<int, SentWrapped>;\r\n\r\n        I begin() const;\r\n        S end() const;\r\n    };\r\n\r\n    struct with_unchecked : range<WrappedState::wrapped> {\r\n        bool begin_called_ = false;\r\n        bool end_called_   = false;\r\n\r\n        [[nodiscard]] constexpr range<WrappedState::unwrapped>::I _Unchecked_begin() {\r\n            begin_called_ = true;\r\n            return {};\r\n        }\r\n        [[nodiscard]] constexpr range<WrappedState::unwrapped>::S _Unchecked_end() {\r\n            end_called_ = true;\r\n            return {};\r\n        }\r\n    };\r\n\r\n    constexpr bool test() {\r\n        using std::same_as, ranges::_Ubegin, ranges::_Uend;\r\n\r\n        range<WrappedState::unwrapped> unwrapped;\r\n        static_assert(same_as<decltype(_Ubegin(unwrapped)), range<WrappedState::unwrapped>::I>);\r\n        static_assert(same_as<decltype(_Uend(unwrapped)), range<WrappedState::unwrapped>::S>);\r\n\r\n        range<WrappedState::wrapped> wrapped;\r\n        static_assert(same_as<decltype(_Ubegin(wrapped)), range<WrappedState::unwrapped>::I>);\r\n        static_assert(same_as<decltype(_Uend(wrapped)), range<WrappedState::unwrapped>::S>);\r\n\r\n        range<WrappedState::wrapped, WrappedState::ignorant> it_wrapped_se_ignorant;\r\n        static_assert(same_as<decltype(_Ubegin(it_wrapped_se_ignorant)), range<WrappedState::wrapped>::I>);\r\n        static_assert(same_as<decltype(_Uend(it_wrapped_se_ignorant)), range<WrappedState::ignorant>::S>);\r\n\r\n        range<WrappedState::ignorant, WrappedState::wrapped> it_ignorant_se_wrapped;\r\n        static_assert(same_as<decltype(_Ubegin(it_ignorant_se_wrapped)), range<WrappedState::ignorant>::I>);\r\n        static_assert(same_as<decltype(_Uend(it_ignorant_se_wrapped)), range<WrappedState::wrapped>::S>);\r\n\r\n        with_unchecked uncheckable;\r\n        static_assert(same_as<decltype(_Ubegin(uncheckable)), range<WrappedState::unwrapped>::I>);\r\n        static_assert(same_as<decltype(_Uend(uncheckable)), range<WrappedState::unwrapped>::S>);\r\n        (void) _Ubegin(uncheckable);\r\n        assert(uncheckable.begin_called_);\r\n        (void) _Uend(uncheckable);\r\n        assert(uncheckable.end_called_);\r\n\r\n        return true;\r\n    }\r\n} // namespace unwrapped_begin_end\r\n\r\nnamespace closure {\r\n    // Verify that range adaptor closures capture with the proper value category\r\n\r\n    enum class GLValueKind { lvalue, const_lvalue, xvalue, const_xvalue };\r\n\r\n    template <GLValueKind Allowed>\r\n    struct arg {\r\n        constexpr arg(arg&) {\r\n            static_assert(Allowed == GLValueKind::lvalue);\r\n        }\r\n        constexpr arg(const arg&) {\r\n            static_assert(Allowed == GLValueKind::const_lvalue);\r\n        }\r\n        constexpr arg(arg&&) {\r\n            static_assert(Allowed == GLValueKind::xvalue);\r\n        }\r\n        constexpr arg(const arg&&) {\r\n            static_assert(Allowed == GLValueKind::const_xvalue);\r\n        }\r\n\r\n    private:\r\n        friend void test();\r\n        arg() = default;\r\n    };\r\n\r\n    void test() {\r\n        using std::as_const, std::move, std::views::filter;\r\n\r\n        arg<GLValueKind::lvalue> l;\r\n        (void) filter(l);\r\n\r\n        arg<GLValueKind::const_lvalue> cl;\r\n        (void) filter(as_const(cl));\r\n\r\n        arg<GLValueKind::xvalue> r;\r\n        (void) filter(move(r));\r\n\r\n        arg<GLValueKind::const_xvalue> cr;\r\n        (void) filter(move(as_const(cr)));\r\n    }\r\n} // namespace closure\r\n\r\nint main() {\r\n    // Validate conditional constexpr\r\n    static_assert(test_array_ish<std::initializer_list<int>>());\r\n    static_assert(test_array_ish<std::initializer_list<int const>>());\r\n    static_assert(test_array_ish<int[3]>());\r\n    static_assert(test_array_ish<int const[3]>());\r\n\r\n    test_array_ish<std::initializer_list<int>>();\r\n    test_array_ish<std::initializer_list<int const>>();\r\n    test_array_ish<int[3]>();\r\n    test_array_ish<int const[3]>();\r\n\r\n    static_assert(complicated_algorithm_test());\r\n    complicated_algorithm_test();\r\n\r\n    static_assert(unwrapped_begin_end::test());\r\n    unwrapped_begin_end::test();\r\n\r\n    closure::test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_ref_view/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_ref_view/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <memory>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\ntemplate <class Range>\r\nconcept can_empty = requires(Range& r) { ranges::empty(r); };\r\ntemplate <class Range>\r\nconcept can_data = requires(Range& r) { ranges::data(r); };\r\ntemplate <class Range>\r\nconcept can_size = requires(Range& r) { ranges::size(r); };\r\n\r\nstruct instantiator {\r\n    template <ranges::range R>\r\n    static constexpr void call() {\r\n        using ranges::ref_view, ranges::begin, ranges::end, ranges::forward_range;\r\n        int input[3] = {0, 1, 2};\r\n\r\n        { // traits\r\n            static_assert(ranges::input_range<R> || ranges::output_range<R, const int&>);\r\n            static_assert(ranges::enable_borrowed_range<ref_view<R>>);\r\n        }\r\n\r\n        { // constructors and assignment operators\r\n            static_assert(!constructible_from<ref_view<R>, R>);\r\n\r\n            R wrapped_input{input};\r\n            ref_view<R> same_range{wrapped_input};\r\n            static_assert(is_nothrow_constructible_v<ref_view<R>, R&>);\r\n\r\n            auto copy_constructed = same_range;\r\n            if constexpr (forward_range<R>) {\r\n                assert(copy_constructed.begin().peek() == begin(input));\r\n            }\r\n            assert(copy_constructed.end().peek() == end(input));\r\n\r\n            int other_data[3] = {4, 5, 6};\r\n            R wrapped_other{other_data};\r\n            ref_view<R> copy_assigned{wrapped_other};\r\n            copy_assigned = copy_constructed;\r\n            if constexpr (forward_range<R>) {\r\n                assert(copy_assigned.begin().peek() == begin(input));\r\n            }\r\n            assert(copy_assigned.end().peek() == end(input));\r\n\r\n            [[maybe_unused]] auto move_constructed = std::move(copy_assigned);\r\n            if constexpr (forward_range<R>) {\r\n                assert(move_constructed.begin().peek() == begin(input));\r\n            }\r\n            assert(move_constructed.end().peek() == end(input));\r\n\r\n            same_range = std::move(copy_constructed);\r\n            if constexpr (forward_range<R>) {\r\n                assert(same_range.begin().peek() == begin(input));\r\n            }\r\n            assert(same_range.end().peek() == end(input));\r\n        }\r\n\r\n        { // access\r\n            R wrapped_input{input};\r\n            ref_view<R> test_view{wrapped_input};\r\n            same_as<R> auto& base_range = as_const(test_view).base();\r\n            assert(addressof(base_range) == addressof(wrapped_input));\r\n\r\n            static_assert(noexcept(as_const(test_view).base()));\r\n        }\r\n\r\n        { // iterators\r\n            R wrapped_input{input};\r\n            ref_view<R> test_view{wrapped_input};\r\n            const same_as<ranges::iterator_t<R>> auto first = as_const(test_view).begin();\r\n            assert(first.peek() == input);\r\n            static_assert(noexcept(as_const(test_view).begin()) == noexcept(wrapped_input.begin()));\r\n\r\n            const same_as<ranges::sentinel_t<R>> auto last = as_const(test_view).end();\r\n            assert(last.peek() == end(input));\r\n            static_assert(noexcept(as_const(test_view).end()) == noexcept(wrapped_input.end()));\r\n        }\r\n\r\n#if _HAS_CXX23\r\n        if constexpr (ranges::input_range<R>) { // const iterators (from view_interface)\r\n            R wrapped_input{input};\r\n            ref_view<R> test_view{wrapped_input};\r\n            const same_as<ranges::const_iterator_t<R>> auto cfirst = as_const(test_view).cbegin();\r\n            if constexpr (_Is_specialization_v<remove_const_t<decltype(cfirst)>, basic_const_iterator>) {\r\n                assert(cfirst.base().peek() == begin(input));\r\n            } else {\r\n                assert(cfirst.peek() == begin(input));\r\n            }\r\n\r\n            const same_as<ranges::const_sentinel_t<R>> auto clast = as_const(test_view).cend();\r\n            if constexpr (_Is_specialization_v<remove_const_t<decltype(clast)>, basic_const_iterator>) {\r\n                assert(clast.base().peek() == end(input));\r\n            } else {\r\n                assert(clast.peek() == end(input));\r\n            }\r\n        }\r\n#endif // _HAS_CXX23\r\n\r\n        { // state\r\n            static_assert(can_size<ref_view<R>> == ranges::sized_range<R>);\r\n            if constexpr (ranges::sized_range<R>) {\r\n                R wrapped_input{input};\r\n                ref_view<R> test_view{wrapped_input};\r\n\r\n                const same_as<ranges::range_size_t<R>> auto ref_size = as_const(test_view).size();\r\n                assert(ref_size == size(wrapped_input));\r\n\r\n                static_assert(noexcept(as_const(test_view).size()) == noexcept(wrapped_input.size()));\r\n            }\r\n\r\n            static_assert(can_data<ref_view<R>> == ranges::contiguous_range<R>);\r\n            if constexpr (ranges::contiguous_range<R>) {\r\n                R wrapped_input{input};\r\n                ref_view<R> test_view{wrapped_input};\r\n\r\n                const same_as<int*> auto ref_data = as_const(test_view).data();\r\n                assert(ref_data == input);\r\n\r\n                static_assert(noexcept(as_const(test_view).data()) == noexcept(wrapped_input.data()));\r\n            }\r\n\r\n            static_assert(can_empty<ref_view<R>> == can_empty<R>);\r\n            if constexpr (can_empty<R>) {\r\n                R wrapped_input{input};\r\n                ref_view<R> test_view{wrapped_input};\r\n\r\n                const same_as<bool> auto ref_empty = as_const(test_view).empty();\r\n                assert(!ref_empty);\r\n\r\n                static_assert(noexcept(as_const(test_view).empty()) == noexcept(ranges::empty(wrapped_input)));\r\n\r\n                R empty_range{span<int, 0>{}};\r\n                ref_view<R> empty_view{empty_range};\r\n                assert(empty_view.empty());\r\n            }\r\n        }\r\n\r\n        { // CTAD\r\n            span<const int, 3> spanInput{input};\r\n            ref_view span_view{spanInput};\r\n            static_assert(same_as<decltype(span_view), ref_view<span<const int, 3>>>);\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_inout<instantiator, int>(), true));\r\n    test_inout<instantiator, int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_subrange/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_subrange/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Covers ranges::view_interface and ranges::subrange\r\n\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <istream>\r\n#include <list>\r\n#include <ranges>\r\n#include <string_view>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\n#define ASSERT(...) assert((__VA_ARGS__))\r\n\r\nusing std::output_iterator_tag, std::input_iterator_tag, std::forward_iterator_tag, std::bidirectional_iterator_tag,\r\n    std::random_access_iterator_tag, std::contiguous_iterator_tag;\r\n\r\nvoid test_LWG_3470() {\r\n    // LWG-3470 relaxed the \"convertible-to-non-slicing\" requirements to allow this non-slicing case\r\n    int a[]                 = {1, 2, 3};\r\n    int* b[]                = {&a[2], &a[0], &a[1]};\r\n    [[maybe_unused]] auto c = std::ranges::subrange<const int* const*>(b);\r\n}\r\n\r\nstruct empty {};\r\n\r\nnamespace test_view_interface {\r\n    template <class T>\r\n    concept CanViewInterface = requires { typename ranges::view_interface<T>; };\r\n\r\n    template <class T>\r\n    constexpr bool test_template_id() {\r\n        // view_interface<T> is a valid template-id only if T is a cv-unqualified class type\r\n        static_assert(std::is_same_v<T, std::remove_cvref_t<T>>);\r\n        static_assert(CanViewInterface<T> == std::is_class_v<T>);\r\n        if constexpr (!std::is_function_v<T>) {\r\n            static_assert(!CanViewInterface<T const>);\r\n            static_assert(!CanViewInterface<T volatile>);\r\n            static_assert(!CanViewInterface<T const volatile>);\r\n        }\r\n\r\n        if constexpr (!std::is_void_v<T>) {\r\n            static_assert(!CanViewInterface<T&>);\r\n            static_assert(!CanViewInterface<T&&>);\r\n            if constexpr (!std::is_function_v<T>) {\r\n                static_assert(!CanViewInterface<T const&>);\r\n                static_assert(!CanViewInterface<T volatile&>);\r\n                static_assert(!CanViewInterface<T const volatile&>);\r\n                static_assert(!CanViewInterface<T const&&>);\r\n                static_assert(!CanViewInterface<T volatile&&>);\r\n                static_assert(!CanViewInterface<T const volatile&&>);\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    static_assert(test_template_id<int>());\r\n    static_assert(test_template_id<void>());\r\n    static_assert(test_template_id<int()>());\r\n    static_assert(test_template_id<empty>());\r\n\r\n    using test::CanCompare, test::CanDifference, test::Common, test::ProxyRef, test::to_bool;\r\n    enum class ConstRange : bool { no, yes };\r\n\r\n    template <class Cat, Common IsCommon, CanDifference Diff, ConstRange HasConstRange>\r\n    struct fake_view : ranges::view_interface<fake_view<Cat, IsCommon, Diff, HasConstRange>> {\r\n        using I = test::iterator<Cat, int, Diff, CanCompare::yes, ProxyRef::no>;\r\n        using S = std::conditional_t<to_bool(IsCommon), I, test::sentinel<int>>;\r\n\r\n        I begin();\r\n        I begin() const\r\n            requires (to_bool(HasConstRange));\r\n\r\n        S end();\r\n        S end() const\r\n            requires (to_bool(HasConstRange));\r\n\r\n        unsigned int size()\r\n            requires (to_bool(Diff) && !std::derived_from<Cat, forward_iterator_tag>);\r\n        unsigned int size() const\r\n            requires (to_bool(HasConstRange) && to_bool(Diff) && !std::derived_from<Cat, forward_iterator_tag>);\r\n    };\r\n\r\n    namespace output_unsized_onlymutable {\r\n        using V = fake_view<output_iterator_tag, Common::no, CanDifference::no, ConstRange::no>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(!ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(!CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(!CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(!CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(!CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(!CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(!CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace output_unsized_onlymutable\r\n\r\n    namespace output_unsized_allowconst {\r\n        using V = fake_view<output_iterator_tag, Common::no, CanDifference::no, ConstRange::yes>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(!CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(!CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(!CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(!CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(!CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(!CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace output_unsized_allowconst\r\n\r\n    namespace output_sized_onlymutable {\r\n        using V = fake_view<output_iterator_tag, Common::no, CanDifference::yes, ConstRange::no>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(!ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(!CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(!CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(!CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace output_sized_onlymutable\r\n\r\n    namespace output_sized_allowconst {\r\n        using V = fake_view<output_iterator_tag, Common::no, CanDifference::yes, ConstRange::yes>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(!CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(!CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(CanSize<V const&>);\r\n        static_assert(!CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace output_sized_allowconst\r\n\r\n    namespace input_unsized_onlymutable {\r\n        using V = fake_view<input_iterator_tag, Common::no, CanDifference::no, ConstRange::no>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(!ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(!CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(!CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(!CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(!CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace input_unsized_onlymutable\r\n\r\n    namespace input_unsized_allowconst {\r\n        using V = fake_view<input_iterator_tag, Common::no, CanDifference::no, ConstRange::yes>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(!CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(!CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(!CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(!CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace input_unsized_allowconst\r\n\r\n    namespace input_sized_onlymutable {\r\n        using V = fake_view<input_iterator_tag, Common::no, CanDifference::yes, ConstRange::no>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(!ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(!CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace input_sized_onlymutable\r\n\r\n    namespace input_sized_allowconst {\r\n        using V = fake_view<input_iterator_tag, Common::no, CanDifference::yes, ConstRange::yes>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(CanSize<V const&>);\r\n        static_assert(!CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace input_sized_allowconst\r\n\r\n    namespace forward_uncommon_unsized_onlymutable {\r\n        using V = fake_view<forward_iterator_tag, Common::no, CanDifference::no, ConstRange::no>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(!ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(!CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace forward_uncommon_unsized_onlymutable\r\n\r\n    namespace forward_uncommon_unsized_allowconst {\r\n        using V = fake_view<forward_iterator_tag, Common::no, CanDifference::no, ConstRange::yes>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(!CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace forward_uncommon_unsized_allowconst\r\n\r\n    namespace forward_uncommon_sized_onlymutable {\r\n        using V = fake_view<forward_iterator_tag, Common::no, CanDifference::yes, ConstRange::no>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(!ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace forward_uncommon_sized_onlymutable\r\n\r\n    namespace forward_uncommon_sized_allowconst {\r\n        using V = fake_view<forward_iterator_tag, Common::no, CanDifference::yes, ConstRange::yes>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace forward_uncommon_sized_allowconst\r\n\r\n    namespace forward_common_unsized_onlymutable {\r\n        using V = fake_view<forward_iterator_tag, Common::yes, CanDifference::no, ConstRange::no>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(!ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(!CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace forward_common_unsized_onlymutable\r\n\r\n    namespace forward_common_unsized_allowconst {\r\n        using V = fake_view<forward_iterator_tag, Common::yes, CanDifference::no, ConstRange::yes>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(!CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace forward_common_unsized_allowconst\r\n\r\n    namespace forward_common_sized_onlymutable {\r\n        using V = fake_view<forward_iterator_tag, Common::yes, CanDifference::yes, ConstRange::no>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(!ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace forward_common_sized_onlymutable\r\n\r\n    namespace forward_common_sized_allowconst {\r\n        using V = fake_view<forward_iterator_tag, Common::yes, CanDifference::yes, ConstRange::yes>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace forward_common_sized_allowconst\r\n\r\n    namespace bidi_uncommon_unsized_onlymutable {\r\n        using V = fake_view<bidirectional_iterator_tag, Common::no, CanDifference::no, ConstRange::no>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(!ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(!CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace bidi_uncommon_unsized_onlymutable\r\n\r\n    namespace bidi_uncommon_unsized_allowconst {\r\n        using V = fake_view<bidirectional_iterator_tag, Common::no, CanDifference::no, ConstRange::yes>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(!CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace bidi_uncommon_unsized_allowconst\r\n\r\n    namespace bidi_uncommon_sized_onlymutable {\r\n        using V = fake_view<bidirectional_iterator_tag, Common::no, CanDifference::yes, ConstRange::no>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(!ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace bidi_uncommon_sized_onlymutable\r\n\r\n    namespace bidi_uncommon_sized_allowconst {\r\n        using V = fake_view<bidirectional_iterator_tag, Common::no, CanDifference::yes, ConstRange::yes>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace bidi_uncommon_sized_allowconst\r\n\r\n    namespace bidi_common_unsized_onlymutable {\r\n        using V = fake_view<bidirectional_iterator_tag, Common::yes, CanDifference::no, ConstRange::no>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(!ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(!CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace bidi_common_unsized_onlymutable\r\n\r\n    namespace bidi_common_unsized_allowconst {\r\n        using V = fake_view<bidirectional_iterator_tag, Common::yes, CanDifference::no, ConstRange::yes>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(!CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(CanMemberFront<V const&>);\r\n        static_assert(CanMemberBack<V&>);\r\n        static_assert(CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace bidi_common_unsized_allowconst\r\n\r\n    namespace bidi_common_sized_onlymutable {\r\n        using V = fake_view<bidirectional_iterator_tag, Common::yes, CanDifference::yes, ConstRange::no>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(!ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace bidi_common_sized_onlymutable\r\n\r\n    namespace bidi_common_sized_allowconst {\r\n        using V = fake_view<bidirectional_iterator_tag, Common::yes, CanDifference::yes, ConstRange::yes>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(CanMemberFront<V const&>);\r\n        static_assert(CanMemberBack<V&>);\r\n        static_assert(CanMemberBack<V const&>);\r\n        static_assert(!CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace bidi_common_sized_allowconst\r\n\r\n    namespace random_uncommon_sized_onlymutable {\r\n        using V = fake_view<random_access_iterator_tag, Common::no, CanDifference::yes, ConstRange::no>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(!ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace random_uncommon_sized_onlymutable\r\n\r\n    namespace random_uncommon_sized_allowconst {\r\n        using V = fake_view<random_access_iterator_tag, Common::no, CanDifference::yes, ConstRange::yes>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(CanIndex<V&>);\r\n        static_assert(CanIndex<V const&>);\r\n    } // namespace random_uncommon_sized_allowconst\r\n\r\n    namespace random_common_sized_onlymutable {\r\n        using V = fake_view<random_access_iterator_tag, Common::yes, CanDifference::yes, ConstRange::no>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(!ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace random_common_sized_onlymutable\r\n\r\n    namespace random_common_sized_allowconst {\r\n        using V = fake_view<random_access_iterator_tag, Common::yes, CanDifference::yes, ConstRange::yes>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(CanBool<V const&>);\r\n        static_assert(!CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(CanMemberFront<V const&>);\r\n        static_assert(CanMemberBack<V&>);\r\n        static_assert(CanMemberBack<V const&>);\r\n        static_assert(CanIndex<V&>);\r\n        static_assert(CanIndex<V const&>);\r\n    } // namespace random_common_sized_allowconst\r\n\r\n    namespace contiguous_uncommon_sized_onlymutable {\r\n        using V = fake_view<contiguous_iterator_tag, Common::no, CanDifference::yes, ConstRange::no>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(!ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace contiguous_uncommon_sized_onlymutable\r\n\r\n    namespace contiguous_uncommon_sized_allowconst {\r\n        using V = fake_view<contiguous_iterator_tag, Common::no, CanDifference::yes, ConstRange::yes>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(CanBool<V const&>);\r\n        static_assert(CanData<V&>);\r\n        static_assert(CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(CanMemberFront<V const&>);\r\n        static_assert(!CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(CanIndex<V&>);\r\n        static_assert(CanIndex<V const&>);\r\n    } // namespace contiguous_uncommon_sized_allowconst\r\n\r\n    namespace contiguous_common_sized_onlymutable {\r\n        using V = fake_view<contiguous_iterator_tag, Common::yes, CanDifference::yes, ConstRange::no>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(!ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(!CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(!CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(!CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(!CanBool<V const&>);\r\n        static_assert(CanData<V&>);\r\n        static_assert(!CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(!CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(!CanMemberFront<V const&>);\r\n        static_assert(CanMemberBack<V&>);\r\n        static_assert(!CanMemberBack<V const&>);\r\n        static_assert(CanIndex<V&>);\r\n        static_assert(!CanIndex<V const&>);\r\n    } // namespace contiguous_common_sized_onlymutable\r\n\r\n    namespace contiguous_common_sized_allowconst {\r\n        using V = fake_view<contiguous_iterator_tag, Common::yes, CanDifference::yes, ConstRange::yes>;\r\n        static_assert(ranges::range<V>);\r\n        static_assert(ranges::range<V const>);\r\n        static_assert(ranges::view<V>);\r\n        static_assert(CanEmpty<V&>);\r\n        static_assert(CanEmpty<V const&>);\r\n#if _HAS_CXX23\r\n        static_assert(CanMemberCBegin<V&>);\r\n        static_assert(CanMemberCBegin<V const&>);\r\n        static_assert(CanMemberCEnd<V&>);\r\n        static_assert(CanMemberCEnd<V const&>);\r\n#endif // _HAS_CXX23\r\n        static_assert(CanBool<V&>);\r\n        static_assert(CanBool<V const&>);\r\n        static_assert(CanData<V&>);\r\n        static_assert(CanData<V const&>);\r\n        static_assert(CanSize<V&>);\r\n        static_assert(CanSize<V const&>);\r\n        static_assert(CanMemberFront<V&>);\r\n        static_assert(CanMemberFront<V const&>);\r\n        static_assert(CanMemberBack<V&>);\r\n        static_assert(CanMemberBack<V const&>);\r\n        static_assert(CanIndex<V&>);\r\n        static_assert(CanIndex<V const&>);\r\n    } // namespace contiguous_common_sized_allowconst\r\n} // namespace test_view_interface\r\n\r\nnamespace test_subrange {\r\n    using ranges::borrowed_range, ranges::range, ranges::sized_range, ranges::subrange, ranges::subrange_kind;\r\n    using std::constructible_from, std::copyable, std::default_initializable, std::movable, std::same_as,\r\n        std::sized_sentinel_for;\r\n\r\n    // * template-id: subrange<I, S, K> is a valid template-id iff I models input_or_output_iterator, S models\r\n    // sentinel_for<I>, and sized_sentinel_for<S, I> implies K == sized.\r\n    template <class I, class S, ranges::subrange_kind K>\r\n    concept CanSubrange = requires { typename subrange<I, S, K>; };\r\n    static_assert(CanSubrange<int*, int*, subrange_kind::sized>);\r\n    static_assert(!CanSubrange<int*, int*, subrange_kind::unsized>);\r\n    static_assert(!CanSubrange<int*, void, subrange_kind::unsized>);\r\n    static_assert(!CanSubrange<void, int*, subrange_kind::unsized>);\r\n    static_assert(CanSubrange<int*, std::unreachable_sentinel_t, subrange_kind::unsized>);\r\n    static_assert(!CanSubrange<std::unreachable_sentinel_t, int*, subrange_kind::unsized>);\r\n    static_assert(CanSubrange<int*, std::unreachable_sentinel_t, subrange_kind::sized>);\r\n\r\n    template <class R>\r\n    concept HasMemberEmpty = requires(std::remove_reference_t<R> const r) {\r\n        { r.empty() } -> same_as<bool>;\r\n    };\r\n\r\n    template <class R>\r\n    concept HasMemberSize = requires(std::remove_reference_t<R> const r) {\r\n        { r.size() } -> std::integral;\r\n    };\r\n\r\n    // Validate default template arguments: second defaults to first, and third defaults to subrange_kind::sized iff\r\n    // sized_sentinel_for<second, first>.\r\n    static_assert(same_as<subrange<int*>, subrange<int*, int*, subrange_kind::sized>>);\r\n    static_assert(same_as<subrange<int*, std::unreachable_sentinel_t>,\r\n        subrange<int*, std::unreachable_sentinel_t, subrange_kind::unsized>>);\r\n    static_assert(same_as<subrange<std::forward_list<int>::iterator>,\r\n        subrange<std::forward_list<int>::iterator, std::forward_list<int>::iterator, subrange_kind::unsized>>);\r\n\r\n    // Validate many properties of a specialization of subrange\r\n    template <class>\r\n    constexpr bool is_subrange = false;\r\n    template <class I, class S, subrange_kind K>\r\n    constexpr bool is_subrange<subrange<I, S, K>> = true;\r\n\r\n    template <class T>\r\n    struct illformed {\r\n        static_assert(false);\r\n    };\r\n\r\n    template <class T>\r\n    constexpr auto kind_of = illformed<T>{};\r\n    template <class I, class S, subrange_kind K>\r\n    constexpr auto kind_of<subrange<I, S, K>> = K;\r\n\r\n    template <class Subrange, class Rng>\r\n    constexpr bool test_subrange() {\r\n        static_assert(same_as<Subrange, std::remove_cvref_t<Subrange>>);\r\n        static_assert(is_subrange<Subrange>);\r\n\r\n        using I              = ranges::iterator_t<Subrange>;\r\n        using S              = ranges::sentinel_t<Subrange>;\r\n        constexpr bool sized = kind_of<Subrange> == subrange_kind::sized;\r\n        static_assert(\r\n            std::integral<std::iter_difference_t<I>>, \"make_unsigned_t below needs to be make-unsigned-like-t\");\r\n        using size_type = std::make_unsigned_t<std::iter_difference_t<I>>;\r\n\r\n        // Validate SMFs\r\n        static_assert(default_initializable<Subrange> == default_initializable<I>);\r\n        static_assert(movable<Subrange>);\r\n        static_assert(!copyable<I> || copyable<Subrange>);\r\n\r\n        static_assert(constructible_from<Subrange, I, S> == (!sized || sized_sentinel_for<S, I>) );\r\n        static_assert(\r\n            constructible_from<Subrange, I const&, S const&> == (copyable<I> && (!sized || sized_sentinel_for<S, I>) ));\r\n        static_assert(constructible_from<Subrange, I, S, size_type> == sized);\r\n        static_assert(constructible_from<Subrange, I const&, S const&, size_type> == (copyable<I> && sized));\r\n\r\n        static_assert(constructible_from<Subrange, Rng&> == (!sized || sized_range<Rng> || sized_sentinel_for<S, I>) );\r\n        static_assert(constructible_from<Subrange, Rng&, size_type> == sized);\r\n        static_assert(constructible_from<Subrange, Rng>\r\n                      == (borrowed_range<Rng> && (!sized || sized_range<Rng> || sized_sentinel_for<S, I>) ));\r\n        static_assert(constructible_from<Subrange, Rng, size_type> == (sized && borrowed_range<Rng>) );\r\n\r\n        // Validate begin/end/empty\r\n        static_assert(range<Subrange>);\r\n        static_assert(HasMemberEmpty<Subrange const>);\r\n        static_assert(!copyable<I> || range<Subrange const&>);\r\n\r\n#if _HAS_CXX23 // Validate cbegin/cend\r\n        if constexpr (ranges::input_range<Subrange>) {\r\n            static_assert(CanMemberCBegin<Subrange>);\r\n            static_assert(CanMemberCBegin<const Subrange> == ranges::input_range<const Subrange&>);\r\n            static_assert(CanMemberCEnd<Subrange>);\r\n            static_assert(CanMemberCEnd<const Subrange> == ranges::input_range<const Subrange&>);\r\n        }\r\n#endif // _HAS_CXX23\r\n\r\n        // Validate size\r\n        static_assert(sized == HasMemberSize<Subrange>);\r\n\r\n        return true;\r\n    }\r\n\r\n    template <class Rng>\r\n    constexpr bool test_construction() {\r\n        static_assert(same_as<Rng, std::remove_cvref_t<Rng>>);\r\n\r\n        using I = ranges::iterator_t<Rng>;\r\n        using S = ranges::sentinel_t<Rng>;\r\n\r\n        static_assert(test_subrange<subrange<I, S, subrange_kind::sized>, Rng>());\r\n        if constexpr (!sized_sentinel_for<S, I>) {\r\n            static_assert(test_subrange<subrange<I, S, subrange_kind::unsized>, Rng>());\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    using test::CanCompare, test::CanDifference, test::Common, test::ProxyRef, test::Sized;\r\n\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::no, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::no, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::no, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::no, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::no, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::no, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::no, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::no, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::no, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::no, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::no, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::no, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::no, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::no, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::no, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::no, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::no, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::no, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::no, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::no, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n\r\n    static_assert(test_construction<test::range<forward_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<forward_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<forward_iterator_tag, int, Sized::no, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<forward_iterator_tag, int, Sized::no, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<forward_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<forward_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<forward_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<forward_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n\r\n    static_assert(test_construction<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::no,\r\n            Common::no, CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::no,\r\n            Common::no, CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::no,\r\n            Common::yes, CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::no,\r\n            Common::yes, CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::yes,\r\n            Common::no, CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::yes,\r\n            Common::no, CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::yes,\r\n            Common::yes, CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::yes,\r\n            Common::yes, CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::no,\r\n            Common::no, CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::no,\r\n            Common::no, CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::no,\r\n            Common::yes, CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::no,\r\n            Common::yes, CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::yes,\r\n            Common::no, CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::yes,\r\n            Common::no, CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::yes,\r\n            Common::yes, CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::yes,\r\n            Common::yes, CanCompare::yes, ProxyRef::yes>>());\r\n\r\n    static_assert(test_construction<test::range<random_access_iterator_tag, int, Sized::no, CanDifference::yes,\r\n            Common::no, CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<random_access_iterator_tag, int, Sized::no, CanDifference::yes,\r\n            Common::no, CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<random_access_iterator_tag, int, Sized::no, CanDifference::yes,\r\n            Common::yes, CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<random_access_iterator_tag, int, Sized::no, CanDifference::yes,\r\n            Common::yes, CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<random_access_iterator_tag, int, Sized::yes, CanDifference::yes,\r\n            Common::no, CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<random_access_iterator_tag, int, Sized::yes, CanDifference::yes,\r\n            Common::no, CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_construction<test::range<random_access_iterator_tag, int, Sized::yes, CanDifference::yes,\r\n            Common::yes, CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<random_access_iterator_tag, int, Sized::yes, CanDifference::yes,\r\n            Common::yes, CanCompare::yes, ProxyRef::yes>>());\r\n\r\n    static_assert(test_construction<test::range<contiguous_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<contiguous_iterator_tag, int, Sized::no, CanDifference::yes,\r\n            Common::yes, CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<contiguous_iterator_tag, int, Sized::yes, CanDifference::yes,\r\n            Common::no, CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_construction<test::range<contiguous_iterator_tag, int, Sized::yes, CanDifference::yes,\r\n            Common::yes, CanCompare::yes, ProxyRef::no>>());\r\n\r\n    static_assert(test_construction<std::forward_list<int>>());\r\n    static_assert(test_construction<std::list<int>>());\r\n    static_assert(test_construction<std::vector<int>>());\r\n    static_assert(test_construction<std::string_view>());\r\n\r\n    // Validate that slicing conversions are forbidden\r\n    struct Base {};\r\n    struct Derived : Base {};\r\n    static_assert(!std::constructible_from<subrange<Base*>, Derived*, Derived*>);\r\n    static_assert(!std::constructible_from<subrange<Base*>, Derived*, Derived*, std::make_unsigned_t<std::ptrdiff_t>>);\r\n    static_assert(!std::constructible_from<subrange<Base*>, subrange<Derived*>>);\r\n    static_assert(!std::constructible_from<subrange<Base*>, subrange<Derived*>, std::make_unsigned_t<std::ptrdiff_t>>);\r\n\r\n    struct with_converting_iterators {\r\n        template <bool IsConst>\r\n        struct iterator {\r\n            using iterator_concept = input_iterator_tag;\r\n            using value_type       = int;\r\n            using difference_type  = int;\r\n            using pointer          = void;\r\n            using reference        = int;\r\n\r\n            iterator() = default;\r\n            iterator(iterator<!IsConst>)\r\n                requires IsConst;\r\n\r\n            iterator(iterator&&)            = default;\r\n            iterator& operator=(iterator&&) = default;\r\n\r\n            int operator*() const;\r\n            iterator& operator++();\r\n            void operator++(int);\r\n        };\r\n\r\n        template <bool IsConst>\r\n        struct sentinel {\r\n            sentinel() = default;\r\n            sentinel(sentinel<!IsConst>)\r\n                requires IsConst;\r\n\r\n            bool operator==(iterator<IsConst> const&) const;\r\n        };\r\n\r\n        iterator<false> begin();\r\n        sentinel<false> end();\r\n        iterator<true> begin() const;\r\n        sentinel<true> end() const;\r\n    };\r\n\r\n    void test_non_slicing_conversions() {\r\n        // and non-slicing conversions are ok\r\n        using LI = std::list<int>::iterator;\r\n        static_assert(std::constructible_from<subrange<std::list<int>::const_iterator>, LI const&, LI const&>);\r\n        static_assert(std::constructible_from<subrange<std::list<int>::const_iterator>, LI, LI>);\r\n\r\n        using I  = ranges::iterator_t<with_converting_iterators>;\r\n        using S  = ranges::sentinel_t<with_converting_iterators>;\r\n        using CI = ranges::iterator_t<with_converting_iterators const>;\r\n        using CS = ranges::sentinel_t<with_converting_iterators const>;\r\n\r\n        using SizedSubrange = subrange<CI, CS, subrange_kind::sized>;\r\n        static_assert(test_subrange<SizedSubrange, with_converting_iterators>());\r\n\r\n        static_assert(!constructible_from<SizedSubrange, I&, S&>); // lvalues are not convertible\r\n        static_assert(!constructible_from<SizedSubrange, I&, S&, unsigned int>); // ditto\r\n        static_assert(!constructible_from<SizedSubrange, I, S>); // missing size\r\n        static_assert(constructible_from<SizedSubrange, I, S, unsigned int>);\r\n\r\n        using UnsizedSubrange = subrange<CI, CS, subrange_kind::unsized>;\r\n        static_assert(test_subrange<UnsizedSubrange, with_converting_iterators>());\r\n\r\n        static_assert(!constructible_from<UnsizedSubrange, I&, S&>); // lvalues are not convertible\r\n        static_assert(!constructible_from<UnsizedSubrange, I&, S&, unsigned int>); // ditto\r\n        static_assert(constructible_from<UnsizedSubrange, I, S>); // but rvalues are\r\n        static_assert(!constructible_from<UnsizedSubrange, I, S, unsigned int>); // !sized\r\n    }\r\n\r\n    // Validate deduction guides\r\n    template <class Rng>\r\n    constexpr bool test_ctad() {\r\n        using I             = ranges::iterator_t<Rng>;\r\n        using S             = ranges::sentinel_t<Rng>;\r\n        constexpr bool diff = sized_sentinel_for<S, I>;\r\n\r\n        {\r\n            using T = decltype(subrange(std::declval<I>(), std::declval<S>()));\r\n            static_assert(same_as<T, subrange<I, S, subrange_kind{diff}>>);\r\n\r\n            static_assert(range<T>);\r\n            static_assert(!copyable<I> || range<T const&>);\r\n        }\r\n\r\n        static_assert(\r\n            std::integral<std::iter_difference_t<I>>, \"make_unsigned_t below needs to be make-unsigned-like-t\");\r\n        using size_type = std::make_unsigned_t<std::iter_difference_t<I>>;\r\n        {\r\n            using T = decltype(subrange(std::declval<I>(), std::declval<S>(), std::declval<size_type>()));\r\n            static_assert(same_as<T, subrange<I, S, subrange_kind::sized>>);\r\n\r\n            static_assert(range<T>);\r\n            static_assert(!copyable<I> || range<T const&>);\r\n        }\r\n\r\n        constexpr bool is_sized = diff | sized_range<Rng>;\r\n        {\r\n            using T = decltype(subrange(std::declval<Rng&>()));\r\n            static_assert(same_as<T, subrange<I, S, subrange_kind{is_sized}>>);\r\n\r\n            static_assert(range<T>);\r\n            static_assert(!copyable<I> || range<T const&>);\r\n\r\n            if constexpr (borrowed_range<Rng>) {\r\n                using U = decltype(subrange(std::declval<Rng>()));\r\n                static_assert(same_as<U, T>);\r\n            }\r\n        }\r\n\r\n        {\r\n            using T = decltype(subrange(std::declval<Rng&>(), std::declval<size_type>()));\r\n            static_assert(same_as<T, subrange<I, S, subrange_kind::sized>>);\r\n\r\n            static_assert(range<T>);\r\n            static_assert(!copyable<I> || range<T const&>);\r\n\r\n            if constexpr (borrowed_range<Rng>) {\r\n                using U = decltype(subrange(std::declval<Rng>(), std::declval<size_type>()));\r\n                static_assert(same_as<U, T>);\r\n            }\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::no, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::no, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::no, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::no, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::no, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::no, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::no, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::no, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::no, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::no, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::no, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::no, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::no, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::no, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::no, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::no, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::no, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::no, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::no, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::no, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::no, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::no, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::no, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n\r\n    static_assert(test_ctad<test::range<random_access_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<random_access_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<random_access_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<random_access_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<random_access_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<random_access_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n    static_assert(test_ctad<test::range<random_access_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<random_access_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::yes>>());\r\n\r\n    static_assert(test_ctad<test::range<contiguous_iterator_tag, int, Sized::no, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<contiguous_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<contiguous_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n    static_assert(test_ctad<test::range<contiguous_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes,\r\n            CanCompare::yes, ProxyRef::no>>());\r\n\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::no, CanDifference::no>>());\r\n    static_assert(test_ctad<test::range<output_iterator_tag, int, Sized::yes, CanDifference::no>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::no, CanDifference::no>>());\r\n    static_assert(test_ctad<test::range<input_iterator_tag, int, Sized::yes, CanDifference::no>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::no, CanDifference::no>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::no, CanDifference::yes>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::no>>());\r\n    static_assert(test_ctad<test::range<forward_iterator_tag, int, Sized::yes, CanDifference::yes>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::no>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::no, CanDifference::yes>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::no>>());\r\n    static_assert(test_ctad<test::range<bidirectional_iterator_tag, int, Sized::yes, CanDifference::yes>>());\r\n    static_assert(test_ctad<test::range<random_access_iterator_tag, int, Sized::yes, CanDifference::no>>());\r\n    static_assert(test_ctad<test::range<random_access_iterator_tag, int, Sized::yes, CanDifference::yes>>());\r\n    static_assert(test_ctad<test::range<contiguous_iterator_tag, int, Sized::yes, CanDifference::no>>());\r\n    static_assert(test_ctad<test::range<contiguous_iterator_tag, int, Sized::yes, CanDifference::yes>>());\r\n\r\n    static_assert(test_ctad<std::forward_list<int>>());\r\n    static_assert(test_ctad<std::list<int>>());\r\n    static_assert(test_ctad<std::vector<int>>());\r\n    static_assert(test_ctad<std::string_view>());\r\n\r\n    // Validate conversion to PairLike\r\n    static_assert(std::is_convertible_v<subrange<int*>, std::pair<int*, int*>>);\r\n    static_assert(!std::is_convertible_v<subrange<int const*>, std::pair<int*, int*>>);\r\n    static_assert(std::is_convertible_v<subrange<int*>, std::pair<int const*, int const*>>);\r\n    static_assert(std::is_convertible_v<subrange<int const*>, std::pair<int const*, int const*>>);\r\n    static_assert(std::is_convertible_v<subrange<int*>, std::tuple<int*, int*>>);\r\n    static_assert(!std::is_convertible_v<subrange<int const*>, std::tuple<int*, int*>>);\r\n    static_assert(std::is_convertible_v<subrange<int*>, std::tuple<int const*, int const*>>);\r\n    static_assert(std::is_convertible_v<subrange<int const*>, std::tuple<int const*, int const*>>);\r\n\r\n    constexpr bool test_advance_next_prev() {\r\n        // Validate advance/next/prev\r\n        int const some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\r\n        auto const first      = ranges::begin(some_ints);\r\n        auto const last       = ranges::end(some_ints);\r\n\r\n        ASSERT(subrange{some_ints}.begin() == first);\r\n        ASSERT(subrange{some_ints}.end() == last);\r\n\r\n        ASSERT(subrange{some_ints}.next().begin() == first + 1);\r\n        ASSERT(subrange{some_ints}.next().end() == last);\r\n\r\n        ASSERT(subrange{first + 1, last}.prev().begin() == first);\r\n        ASSERT(subrange{first + 1, last}.prev().end() == last);\r\n\r\n        for (std::ptrdiff_t i = 0; i <= last - first; ++i) {\r\n            ASSERT(subrange{some_ints}.next(i).begin() == first + i);\r\n            ASSERT(subrange{some_ints}.next(i).end() == last);\r\n\r\n            subrange s0{some_ints};\r\n            s0.advance(i);\r\n            ASSERT(s0.begin() == first + i);\r\n            ASSERT(s0.end() == last);\r\n\r\n            ASSERT(subrange{first + i, last}.prev(i).begin() == first);\r\n            ASSERT(subrange{first + i, last}.prev(i).end() == last);\r\n\r\n            subrange s1{first + i, last};\r\n            s1.advance(-i);\r\n            ASSERT(s1.begin() == first);\r\n            ASSERT(s1.end() == last);\r\n        }\r\n\r\n        return true;\r\n    }\r\n    static_assert(test_advance_next_prev());\r\n\r\n    // Validate tuple interface\r\n    template <class Subrange>\r\n    constexpr bool test_tuple() {\r\n        using std::declval, std::tuple_element_t, std::tuple_size_v;\r\n\r\n        using I = ranges::iterator_t<Subrange>;\r\n        using S = ranges::sentinel_t<Subrange>;\r\n\r\n        static_assert(tuple_size_v<Subrange> == 2);\r\n        static_assert(tuple_size_v<Subrange const> == 2);\r\n\r\n        static_assert(same_as<tuple_element_t<0, Subrange>, I>);\r\n        static_assert(same_as<tuple_element_t<0, Subrange const>, I>);\r\n        static_assert(same_as<tuple_element_t<1, Subrange>, S>);\r\n        static_assert(same_as<tuple_element_t<1, Subrange const>, S>);\r\n\r\n        static_assert(same_as<decltype(ranges::get<0>(declval<Subrange>())), I>);\r\n        static_assert(same_as<decltype(ranges::get<0>(declval<Subrange&>())), I>);\r\n        static_assert(same_as<decltype(ranges::get<0>(declval<Subrange const>())), I>);\r\n        static_assert(same_as<decltype(ranges::get<0>(declval<Subrange const&>())), I>);\r\n        static_assert(same_as<decltype(std::get<0>(declval<Subrange>())), I>);\r\n        static_assert(same_as<decltype(std::get<0>(declval<Subrange&>())), I>);\r\n        static_assert(same_as<decltype(std::get<0>(declval<Subrange const>())), I>);\r\n        static_assert(same_as<decltype(std::get<0>(declval<Subrange const&>())), I>);\r\n\r\n        static_assert(same_as<decltype(ranges::get<1>(declval<Subrange>())), S>);\r\n        static_assert(same_as<decltype(ranges::get<1>(declval<Subrange&>())), S>);\r\n        static_assert(same_as<decltype(ranges::get<1>(declval<Subrange const>())), S>);\r\n        static_assert(same_as<decltype(ranges::get<1>(declval<Subrange const&>())), S>);\r\n        static_assert(same_as<decltype(std::get<1>(declval<Subrange>())), S>);\r\n        static_assert(same_as<decltype(std::get<1>(declval<Subrange&>())), S>);\r\n        static_assert(same_as<decltype(std::get<1>(declval<Subrange const>())), S>);\r\n        static_assert(same_as<decltype(std::get<1>(declval<Subrange const&>())), S>);\r\n\r\n        return true;\r\n    }\r\n    static_assert(test_tuple<subrange<int*>>());\r\n    static_assert(test_tuple<subrange<int*, std::unreachable_sentinel_t, subrange_kind::sized>>());\r\n    static_assert(test_tuple<subrange<int*, std::unreachable_sentinel_t, subrange_kind::unsized>>());\r\n} // namespace test_subrange\r\n\r\nnamespace test_lwg_3589 {\r\n    // LWG-3589 added a Constraint to std::get<0>(const subrange&) to require the iterator type to be copyable\r\n    template <class T, size_t I>\r\n    concept CanGet = requires { std::get<I>(std::declval<T>()); };\r\n\r\n    template <class T, size_t I>\r\n    concept CanRangesGet = requires { ranges::get<I>(std::declval<T>()); };\r\n\r\n    template <class I, class S>\r\n    constexpr bool test() {\r\n        using ranges::subrange;\r\n\r\n        static_assert(std::input_iterator<I>);\r\n        static_assert(std::sentinel_for<S, I>);\r\n\r\n        static_assert(CanGet<const subrange<I, S>&, 0> == std::copyable<I>);\r\n        static_assert(CanGet<const subrange<I, S>&, 1>);\r\n        static_assert(!CanGet<const subrange<I, S>&, 2>);\r\n        static_assert(CanGet<subrange<I, S>, 0>);\r\n        static_assert(CanGet<subrange<I, S>, 1>);\r\n        static_assert(!CanGet<subrange<I, S>, 2>);\r\n\r\n        static_assert(CanRangesGet<const subrange<I, S>&, 0> == std::copyable<I>);\r\n        static_assert(CanRangesGet<const subrange<I, S>&, 1>);\r\n        static_assert(!CanRangesGet<const subrange<I, S>&, 2>);\r\n        static_assert(CanRangesGet<subrange<I, S>, 0>);\r\n        static_assert(CanRangesGet<subrange<I, S>, 1>);\r\n        static_assert(!CanRangesGet<subrange<I, S>, 2>);\r\n\r\n        return true;\r\n    }\r\n\r\n    // Validate with a copyable iterator type, and with a move-only iterator type\r\n    static_assert(test<int*, int*>());\r\n    static_assert(test<ranges::iterator_t<ranges::istream_view<int>>, ranges::sentinel_t<ranges::istream_view<int>>>());\r\n} // namespace test_lwg_3589\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_test_machinery/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_test_machinery/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <concepts>\r\n#include <ranges>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nusing test::CanCompare, test::CanDifference, test::WrappedState, test::ProxyRef, test::to_bool;\r\n\r\n// Validate test::iterator and test::sentinel\r\ntemplate <class Category, class Element, CanDifference Diff, CanCompare Eq, ProxyRef Proxy, WrappedState Wrapped>\r\nconstexpr bool iter_test() {\r\n    using test::iterator, test::sentinel;\r\n\r\n    using I = iterator<Category, Element, Diff, Eq, Proxy, Wrapped>;\r\n\r\n    static_assert(default_initializable<I> == (Eq == CanCompare::yes));\r\n    static_assert(movable<I>);\r\n\r\n    static_assert(!movable<Element> || indirectly_writable<I, Element>);\r\n\r\n    constexpr bool can_write = derived_from<Category, output_iterator_tag>\r\n                            || (derived_from<Category, forward_iterator_tag> && assignable_from<Element&, Element>);\r\n    static_assert(!can_write || output_iterator<I, Element>);\r\n\r\n    static_assert(!derived_from<Category, input_iterator_tag> || input_iterator<I>);\r\n    static_assert(!derived_from<Category, forward_iterator_tag> || forward_iterator<I>);\r\n    static_assert(!derived_from<Category, bidirectional_iterator_tag> || bidirectional_iterator<I>);\r\n    static_assert(!derived_from<Category, random_access_iterator_tag> || random_access_iterator<I>);\r\n    static_assert(!derived_from<Category, contiguous_iterator_tag> || contiguous_iterator<I>);\r\n\r\n    using S = sentinel<Element, Wrapped>;\r\n    static_assert(sentinel_for<S, I>);\r\n    static_assert(!to_bool(Diff) || sized_sentinel_for<S, I>);\r\n    static_assert(!to_bool(Eq) || sentinel_for<I, I>);\r\n    static_assert(!to_bool(Eq) || !to_bool(Diff) || sized_sentinel_for<I, I>);\r\n\r\n    if constexpr (Wrapped == WrappedState::ignorant) {\r\n        static_assert(sentinel_for<S, iterator<Category, Element, Diff, Eq, Proxy, WrappedState::wrapped>>);\r\n        static_assert(!sentinel_for<S, iterator<Category, Element, Diff, Eq, Proxy, WrappedState::unwrapped>>);\r\n\r\n        static_assert(sentinel_for<sentinel<Element, WrappedState::wrapped>, I>);\r\n        static_assert(!sentinel_for<sentinel<Element, WrappedState::unwrapped>, I>);\r\n\r\n        static_assert(!_Unwrappable_v<I>);\r\n        static_assert(!_Unwrappable_v<S>);\r\n    } else if constexpr (Wrapped == WrappedState::wrapped) {\r\n        static_assert(sentinel_for<S, iterator<Category, Element, Diff, Eq, Proxy, WrappedState::ignorant>>);\r\n        static_assert(!sentinel_for<S, iterator<Category, Element, Diff, Eq, Proxy, WrappedState::unwrapped>>);\r\n\r\n        static_assert(sentinel_for<sentinel<Element, WrappedState::ignorant>, I>);\r\n        static_assert(!sentinel_for<sentinel<Element, WrappedState::unwrapped>, I>);\r\n\r\n        if constexpr (derived_from<Category, contiguous_iterator_tag>) {\r\n            static_assert(same_as<_Unwrapped_t<I>, Element*>);\r\n        } else {\r\n            static_assert(\r\n                same_as<_Unwrapped_t<I>, iterator<Category, Element, Diff, Eq, Proxy, WrappedState::unwrapped>>);\r\n        }\r\n        static_assert(same_as<_Unwrapped_t<S>, sentinel<Element, WrappedState::unwrapped>>);\r\n    }\r\n\r\n    static_assert(convertible_to<I, typename I::Consterator>);\r\n    static_assert(!to_bool(Eq) || convertible_to<const I&, typename I::Consterator>);\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(\r\n    iter_test<output_iterator_tag, int, CanDifference::no, CanCompare::no, ProxyRef::no, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<output_iterator_tag, int, CanDifference::no, CanCompare::no, ProxyRef::no, WrappedState::wrapped>());\r\nstatic_assert(\r\n    iter_test<output_iterator_tag, int, CanDifference::no, CanCompare::no, ProxyRef::yes, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<output_iterator_tag, int, CanDifference::no, CanCompare::no, ProxyRef::yes, WrappedState::wrapped>());\r\nstatic_assert(\r\n    iter_test<output_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::no, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<output_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::no, WrappedState::wrapped>());\r\nstatic_assert(\r\n    iter_test<output_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::yes, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<output_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::yes, WrappedState::wrapped>());\r\nstatic_assert(\r\n    iter_test<output_iterator_tag, int, CanDifference::yes, CanCompare::no, ProxyRef::no, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<output_iterator_tag, int, CanDifference::yes, CanCompare::no, ProxyRef::no, WrappedState::wrapped>());\r\nstatic_assert(\r\n    iter_test<output_iterator_tag, int, CanDifference::yes, CanCompare::no, ProxyRef::yes, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<output_iterator_tag, int, CanDifference::yes, CanCompare::no, ProxyRef::yes, WrappedState::wrapped>());\r\nstatic_assert(\r\n    iter_test<output_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::no, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<output_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::no, WrappedState::wrapped>());\r\nstatic_assert(\r\n    iter_test<output_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::yes, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<output_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::yes, WrappedState::wrapped>());\r\n\r\nstatic_assert(\r\n    iter_test<input_iterator_tag, int, CanDifference::no, CanCompare::no, ProxyRef::no, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<input_iterator_tag, int, CanDifference::no, CanCompare::no, ProxyRef::no, WrappedState::wrapped>());\r\nstatic_assert(\r\n    iter_test<input_iterator_tag, int, CanDifference::no, CanCompare::no, ProxyRef::yes, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<input_iterator_tag, int, CanDifference::no, CanCompare::no, ProxyRef::yes, WrappedState::wrapped>());\r\nstatic_assert(\r\n    iter_test<input_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::no, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<input_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::no, WrappedState::wrapped>());\r\nstatic_assert(\r\n    iter_test<input_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::yes, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<input_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::yes, WrappedState::wrapped>());\r\nstatic_assert(\r\n    iter_test<input_iterator_tag, int, CanDifference::yes, CanCompare::no, ProxyRef::no, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<input_iterator_tag, int, CanDifference::yes, CanCompare::no, ProxyRef::no, WrappedState::wrapped>());\r\nstatic_assert(\r\n    iter_test<input_iterator_tag, int, CanDifference::yes, CanCompare::no, ProxyRef::yes, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<input_iterator_tag, int, CanDifference::yes, CanCompare::no, ProxyRef::yes, WrappedState::wrapped>());\r\nstatic_assert(\r\n    iter_test<input_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::no, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<input_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::no, WrappedState::wrapped>());\r\nstatic_assert(\r\n    iter_test<input_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::yes, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<input_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::yes, WrappedState::wrapped>());\r\n\r\nstatic_assert(\r\n    iter_test<forward_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::no, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<forward_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::no, WrappedState::wrapped>());\r\nstatic_assert(\r\n    iter_test<forward_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::yes, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<forward_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::yes, WrappedState::wrapped>());\r\nstatic_assert(\r\n    iter_test<forward_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::no, WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<forward_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::no, WrappedState::wrapped>());\r\nstatic_assert(iter_test<forward_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::yes,\r\n    WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<forward_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::yes, WrappedState::wrapped>());\r\n\r\nstatic_assert(iter_test<bidirectional_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::no,\r\n    WrappedState::unwrapped>());\r\nstatic_assert(iter_test<bidirectional_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::no,\r\n    WrappedState::wrapped>());\r\nstatic_assert(iter_test<bidirectional_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::yes,\r\n    WrappedState::unwrapped>());\r\nstatic_assert(iter_test<bidirectional_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::yes,\r\n    WrappedState::wrapped>());\r\nstatic_assert(iter_test<bidirectional_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::no,\r\n    WrappedState::unwrapped>());\r\nstatic_assert(iter_test<bidirectional_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::no,\r\n    WrappedState::wrapped>());\r\nstatic_assert(iter_test<bidirectional_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::yes,\r\n    WrappedState::unwrapped>());\r\nstatic_assert(iter_test<bidirectional_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::yes,\r\n    WrappedState::wrapped>());\r\n\r\nstatic_assert(iter_test<random_access_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::no,\r\n    WrappedState::unwrapped>());\r\nstatic_assert(iter_test<random_access_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::no,\r\n    WrappedState::wrapped>());\r\nstatic_assert(iter_test<random_access_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::yes,\r\n    WrappedState::unwrapped>());\r\nstatic_assert(iter_test<random_access_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::yes,\r\n    WrappedState::wrapped>());\r\nstatic_assert(iter_test<random_access_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::no,\r\n    WrappedState::unwrapped>());\r\nstatic_assert(iter_test<random_access_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::no,\r\n    WrappedState::wrapped>());\r\nstatic_assert(iter_test<random_access_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::yes,\r\n    WrappedState::unwrapped>());\r\nstatic_assert(iter_test<random_access_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::yes,\r\n    WrappedState::wrapped>());\r\n\r\nstatic_assert(iter_test<contiguous_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::no,\r\n    WrappedState::unwrapped>());\r\nstatic_assert(\r\n    iter_test<contiguous_iterator_tag, int, CanDifference::no, CanCompare::yes, ProxyRef::no, WrappedState::wrapped>());\r\nstatic_assert(iter_test<contiguous_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::no,\r\n    WrappedState::unwrapped>());\r\nstatic_assert(iter_test<contiguous_iterator_tag, int, CanDifference::yes, CanCompare::yes, ProxyRef::no,\r\n    WrappedState::wrapped>());\r\n\r\nstatic_assert(\r\n    same_as<_Unwrapped_t<test::sentinel<int, WrappedState::wrapped>>, test::sentinel<int, WrappedState::unwrapped>>);\r\n\r\n// Validate test::range\r\ntemplate <class R>\r\nconcept has_member_size = requires(const R& r) {\r\n    typename ranges::range_size_t<R>;\r\n    { r.size() } -> same_as<ranges::range_size_t<R>>;\r\n};\r\n\r\nusing test::Sized, test::Common;\r\n\r\ntemplate <class Category, class Element, Sized IsSized, CanDifference Diff, Common IsCommon, CanCompare Eq,\r\n    ProxyRef Proxy>\r\nconstexpr bool range_test() {\r\n    using R = test::range<Category, Element, IsSized, Diff, IsCommon, Eq, Proxy>;\r\n    using I = ranges::iterator_t<R>;\r\n    using S = ranges::sentinel_t<R>;\r\n    static_assert(same_as<I, test::iterator<Category, Element, Diff, Eq, Proxy, WrappedState::wrapped>>);\r\n\r\n    static_assert(!derived_from<Category, output_iterator_tag> || ranges::output_range<R, Element>);\r\n    static_assert(!derived_from<Category, input_iterator_tag> || ranges::input_range<R>);\r\n    static_assert(!derived_from<Category, forward_iterator_tag> || ranges::forward_range<R>);\r\n    static_assert(!derived_from<Category, bidirectional_iterator_tag> || ranges::bidirectional_range<R>);\r\n    static_assert(!derived_from<Category, random_access_iterator_tag> || ranges::random_access_range<R>);\r\n    static_assert(!derived_from<Category, contiguous_iterator_tag> || ranges::contiguous_range<R>);\r\n\r\n    if constexpr (to_bool(IsCommon)) {\r\n        static_assert(to_bool(Eq));\r\n        static_assert(ranges::common_range<R>);\r\n    } else {\r\n        static_assert(same_as<S, test::sentinel<Element, WrappedState::wrapped>>);\r\n    }\r\n\r\n    static_assert(!to_bool(Eq) || sentinel_for<I, I>);\r\n\r\n    constexpr bool is_sized = to_bool(IsSized) || (to_bool(Diff) && derived_from<Category, forward_iterator_tag>);\r\n    static_assert(ranges::sized_range<R> == is_sized);\r\n    if constexpr (to_bool(IsSized)) {\r\n        static_assert(has_member_size<R>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::no, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::no, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::no, CanCompare::no, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(range_test<output_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes,\r\n    ProxyRef::yes>());\r\n\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::no, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::no, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::no, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::no, CanCompare::no, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::no, CanCompare::no, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no, CanCompare::no, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<input_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::yes>());\r\n\r\nstatic_assert(\r\n    range_test<forward_iterator_tag, int, Sized::no, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<forward_iterator_tag, int, Sized::no, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<forward_iterator_tag, int, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<forward_iterator_tag, int, Sized::no, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<forward_iterator_tag, int, Sized::no, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<forward_iterator_tag, int, Sized::no, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<forward_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(range_test<forward_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes,\r\n    ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<forward_iterator_tag, int, Sized::yes, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(\r\n    range_test<forward_iterator_tag, int, Sized::yes, CanDifference::no, Common::no, CanCompare::yes, ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<forward_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(range_test<forward_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes,\r\n    ProxyRef::yes>());\r\nstatic_assert(\r\n    range_test<forward_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes, ProxyRef::no>());\r\nstatic_assert(range_test<forward_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes,\r\n    ProxyRef::yes>());\r\nstatic_assert(range_test<forward_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes,\r\n    ProxyRef::no>());\r\nstatic_assert(range_test<forward_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes,\r\n    ProxyRef::yes>());\r\n\r\nstatic_assert(range_test<bidirectional_iterator_tag, int, Sized::no, CanDifference::no, Common::no, CanCompare::yes,\r\n    ProxyRef::no>());\r\nstatic_assert(range_test<bidirectional_iterator_tag, int, Sized::no, CanDifference::no, Common::no, CanCompare::yes,\r\n    ProxyRef::yes>());\r\nstatic_assert(range_test<bidirectional_iterator_tag, int, Sized::no, CanDifference::no, Common::yes, CanCompare::yes,\r\n    ProxyRef::no>());\r\nstatic_assert(range_test<bidirectional_iterator_tag, int, Sized::no, CanDifference::no, Common::yes, CanCompare::yes,\r\n    ProxyRef::yes>());\r\nstatic_assert(range_test<bidirectional_iterator_tag, int, Sized::no, CanDifference::yes, Common::no, CanCompare::yes,\r\n    ProxyRef::no>());\r\nstatic_assert(range_test<bidirectional_iterator_tag, int, Sized::no, CanDifference::yes, Common::no, CanCompare::yes,\r\n    ProxyRef::yes>());\r\nstatic_assert(range_test<bidirectional_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes,\r\n    ProxyRef::no>());\r\nstatic_assert(range_test<bidirectional_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes,\r\n    ProxyRef::yes>());\r\nstatic_assert(range_test<bidirectional_iterator_tag, int, Sized::yes, CanDifference::no, Common::no, CanCompare::yes,\r\n    ProxyRef::no>());\r\nstatic_assert(range_test<bidirectional_iterator_tag, int, Sized::yes, CanDifference::no, Common::no, CanCompare::yes,\r\n    ProxyRef::yes>());\r\nstatic_assert(range_test<bidirectional_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes,\r\n    ProxyRef::no>());\r\nstatic_assert(range_test<bidirectional_iterator_tag, int, Sized::yes, CanDifference::no, Common::yes, CanCompare::yes,\r\n    ProxyRef::yes>());\r\nstatic_assert(range_test<bidirectional_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes,\r\n    ProxyRef::no>());\r\nstatic_assert(range_test<bidirectional_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes,\r\n    ProxyRef::yes>());\r\nstatic_assert(range_test<bidirectional_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes,\r\n    ProxyRef::no>());\r\nstatic_assert(range_test<bidirectional_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes,\r\n    ProxyRef::yes>());\r\n\r\nstatic_assert(range_test<random_access_iterator_tag, int, Sized::no, CanDifference::yes, Common::no, CanCompare::yes,\r\n    ProxyRef::no>());\r\nstatic_assert(range_test<random_access_iterator_tag, int, Sized::no, CanDifference::yes, Common::no, CanCompare::yes,\r\n    ProxyRef::yes>());\r\nstatic_assert(range_test<random_access_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes,\r\n    ProxyRef::no>());\r\nstatic_assert(range_test<random_access_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes,\r\n    ProxyRef::yes>());\r\nstatic_assert(range_test<random_access_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes,\r\n    ProxyRef::no>());\r\nstatic_assert(range_test<random_access_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes,\r\n    ProxyRef::yes>());\r\nstatic_assert(range_test<random_access_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes,\r\n    ProxyRef::no>());\r\nstatic_assert(range_test<random_access_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes,\r\n    ProxyRef::yes>());\r\n\r\nstatic_assert(range_test<contiguous_iterator_tag, int, Sized::no, CanDifference::yes, Common::no, CanCompare::yes,\r\n    ProxyRef::no>());\r\nstatic_assert(range_test<contiguous_iterator_tag, int, Sized::no, CanDifference::yes, Common::yes, CanCompare::yes,\r\n    ProxyRef::no>());\r\nstatic_assert(range_test<contiguous_iterator_tag, int, Sized::yes, CanDifference::yes, Common::no, CanCompare::yes,\r\n    ProxyRef::no>());\r\nstatic_assert(range_test<contiguous_iterator_tag, int, Sized::yes, CanDifference::yes, Common::yes, CanCompare::yes,\r\n    ProxyRef::no>());\r\n\r\n// Validate basic_borrowed_range\r\nstatic_assert(ranges::input_range<basic_borrowed_range<int>>);\r\nstatic_assert(!ranges::forward_range<basic_borrowed_range<int>>);\r\nstatic_assert(!movable<basic_borrowed_range<int>>);\r\n\r\nstruct instantiate {\r\n    template <class Range1, class Range2>\r\n    static constexpr void call() {\r\n        static_assert(ranges::input_range<Range1>);\r\n        static_assert(same_as<ranges::range_value_t<Range1>, double>);\r\n        static_assert(indirectly_writable<ranges::iterator_t<Range1>, const double&>);\r\n\r\n        static_assert(ranges::input_range<Range2>);\r\n        static_assert(same_as<ranges::range_value_t<Range2>, void*>);\r\n        static_assert(!indirectly_writable<ranges::iterator_t<Range2>, void*>);\r\n    }\r\n};\r\n\r\ntemplate void test_in_in<instantiate, double, void* const>();\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_to_address/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_ranges_to_address/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <string>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#include <test_death.hpp>\r\n\r\ntemplate <class, template <class...> class>\r\nconstexpr bool is_specialization = false;\r\ntemplate <class... Args, template <class...> class T>\r\nconstexpr bool is_specialization<T<Args...>, T> = true;\r\n\r\ntemplate <bool IsConst, class C>\r\nusing maybe_const_iter = std::conditional_t<IsConst, typename C::const_iterator, typename C::iterator>;\r\n\r\ntemplate <class C, bool IsConst>\r\nvoid test_positive_cases() {\r\n    // to_address should accept value-initialized iterators:\r\n    assert(std::to_address(maybe_const_iter<IsConst, C>{}) == nullptr); // nullptr not guaranteed, but likely true\r\n\r\n    C c;\r\n\r\n    {\r\n        // begin and end iterator for empty container:\r\n        maybe_const_iter<IsConst, C> const first = c.begin();\r\n        maybe_const_iter<IsConst, C> const last  = c.end();\r\n        // Ditto \"nullptr not guaranteed\":\r\n        assert(((std::to_address(first) == nullptr) == !is_specialization<C, std::basic_string>) );\r\n        assert(std::to_address(last) == std::to_address(first));\r\n    }\r\n\r\n    c = C{typename C::value_type{}};\r\n\r\n    {\r\n        // begin and end iterator for non-empty container:\r\n        maybe_const_iter<IsConst, C> const first = c.begin();\r\n        maybe_const_iter<IsConst, C> const last  = c.end();\r\n        assert(std::to_address(first) != nullptr);\r\n        assert(std::to_address(last) == 1 + std::to_address(first));\r\n    }\r\n\r\n    c.pop_back();\r\n\r\n    {\r\n        // empty again for completeness:\r\n        maybe_const_iter<IsConst, C> const first = c.begin();\r\n        maybe_const_iter<IsConst, C> const last  = c.end();\r\n        assert(std::to_address(last) == std::to_address(first));\r\n    }\r\n}\r\n\r\n// Negative tests:\r\ntemplate <class C, bool IsConst>\r\nvoid test_invalidated_by_pop_back() {\r\n    using T = C::value_type;\r\n    C c     = {T{}, {}, {}};\r\n\r\n    maybe_const_iter<IsConst, C> const pos = c.end() - 1;\r\n\r\n    c.pop_back();\r\n\r\n    (void) std::to_address(pos); // Cannot convert invalidated iterator to pointer\r\n}\r\n\r\ntemplate <class C, bool IsConst>\r\nvoid test_invalidated_by_push_back() {\r\n    using T = C::value_type;\r\n    C c;\r\n    c.resize(1024, T{});\r\n    c.resize(512);\r\n\r\n    maybe_const_iter<IsConst, C> const pos = c.end();\r\n\r\n    c.push_back(T{});\r\n\r\n    (void) std::to_address(pos); // Cannot convert invalidated iterator to pointer\r\n}\r\n\r\ntemplate <class C, bool IsConst>\r\nvoid test_invalidated_by_reallocation() {\r\n    using T = C::value_type;\r\n    C c     = {T{}, {}, {}};\r\n\r\n    maybe_const_iter<IsConst, C> const pos = c.begin();\r\n\r\n    c.resize(8 * 1024);\r\n\r\n    (void) std::to_address(pos); // Cannot convert invalidated iterator to pointer\r\n}\r\n\r\ntemplate <class C, bool IsConst>\r\nvoid test_out_of_range() {\r\n    using T = C::value_type;\r\n    C c     = {T{}, {}, {}};\r\n\r\n    maybe_const_iter<IsConst, C> const last = c.end();\r\n\r\n    c.pop_back();\r\n\r\n    (void) std::to_address(last); // Cannot convert out-of-range iterator to pointer\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec([] {\r\n        test_positive_cases<std::string, true>();\r\n        test_positive_cases<std::string, false>();\r\n        test_positive_cases<std::vector<int>, true>();\r\n        test_positive_cases<std::vector<int>, false>();\r\n    });\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n    // Tests for only vector: basic_string doesn't invalidate on element creation/destruction because POD.\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        test_invalidated_by_pop_back<std::vector<int>, false>,\r\n        test_invalidated_by_pop_back<std::vector<int>, true>,\r\n        test_invalidated_by_push_back<std::vector<int>, false>,\r\n        test_invalidated_by_push_back<std::vector<int>, true>,\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n        // Tests for both string and vector\r\n        test_invalidated_by_reallocation<std::string, false>,\r\n        test_invalidated_by_reallocation<std::string, true>,\r\n        test_invalidated_by_reallocation<std::vector<int>, false>,\r\n        test_invalidated_by_reallocation<std::vector<int>, true>,\r\n        test_out_of_range<std::string, false>,\r\n        test_out_of_range<std::string, true>,\r\n        test_out_of_range<std::vector<int>, false>,\r\n        test_out_of_range<std::vector<int>, true>,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_stream_iterators/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_stream_iterators/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Covers Ranges changes to istream_iterator, ostream_iterator, istreambuf_iterator, and ostreambuf_iterator\r\n// and LWG-3719 changes for directory_iterator, recursive_directory_iterator, regex_iterator, and regex_token_iterator\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <iostream>\r\n#include <iterator>\r\n#include <regex>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#if _HAS_CXX17\r\n#include <filesystem>\r\n#endif // _HAS_CXX17\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <class T, class CharT = char, class Traits = char_traits<CharT>, class Diff = ptrdiff_t>\r\nvoid test_istream_iterator() {\r\n    using I = istream_iterator<T, CharT, Traits, Diff>;\r\n\r\n    // Also test strengthened noexcept on some pre-existing operations\r\n    const I i{};\r\n    STATIC_ASSERT(is_nothrow_default_constructible_v<I> == is_nothrow_default_constructible_v<T>);\r\n    STATIC_ASSERT(noexcept(*i));\r\n    STATIC_ASSERT(noexcept(i.operator->()));\r\n\r\n    STATIC_ASSERT(noexcept(i == i));\r\n    STATIC_ASSERT(noexcept(i != i));\r\n\r\n#if _HAS_CXX20\r\n    STATIC_ASSERT(input_iterator<I>);\r\n\r\n    if constexpr (is_scalar_v<T>) {\r\n        constexpr I fromDefaultSentinel{default_sentinel};\r\n        assert(fromDefaultSentinel == I{});\r\n        assert(!(fromDefaultSentinel != I{}));\r\n        STATIC_ASSERT(is_nothrow_constructible_v<I, default_sentinel_t>);\r\n    }\r\n\r\n    assert(i == default_sentinel);\r\n    STATIC_ASSERT(noexcept(i == default_sentinel));\r\n    assert(default_sentinel == i);\r\n    STATIC_ASSERT(noexcept(default_sentinel == i));\r\n    assert(!(i != default_sentinel));\r\n    STATIC_ASSERT(noexcept(!(i != default_sentinel)));\r\n    assert(!(default_sentinel != i));\r\n    STATIC_ASSERT(noexcept(!(default_sentinel != i)));\r\n#endif // _HAS_CXX20\r\n}\r\n\r\ntemplate <class T, class CharT = char, class Traits = char_traits<CharT>>\r\nvoid test_ostream_iterator(basic_ostream<CharT, Traits>& os) {\r\n    using I = ostream_iterator<T, CharT, Traits>;\r\n\r\n    // Also tests strengthened noexcept on some pre-existing operations\r\n    I i{os};\r\n    STATIC_ASSERT(is_nothrow_constructible_v<I, basic_ostream<CharT, Traits>&>);\r\n    STATIC_ASSERT(is_nothrow_constructible_v<I, basic_ostream<CharT, Traits>&, const CharT*>);\r\n    STATIC_ASSERT(noexcept(*i));\r\n    STATIC_ASSERT(noexcept(++i));\r\n    STATIC_ASSERT(noexcept(i++));\r\n\r\n#if _HAS_CXX20\r\n    STATIC_ASSERT(output_iterator<I, const T&>);\r\n    STATIC_ASSERT(is_same_v<typename I::difference_type, ptrdiff_t>);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\ntemplate <class CharT = char, class Traits = char_traits<CharT>>\r\nvoid test_istreambuf_iterator() {\r\n#if _HAS_CXX20\r\n    using I = istreambuf_iterator<CharT, Traits>;\r\n    STATIC_ASSERT(input_iterator<I>);\r\n\r\n    constexpr I i{default_sentinel};\r\n    assert(i == I{});\r\n    assert(!(i != I{}));\r\n    STATIC_ASSERT(is_nothrow_constructible_v<I, default_sentinel_t>);\r\n\r\n    assert(i == default_sentinel);\r\n    assert(default_sentinel == i);\r\n    assert(!(i != default_sentinel));\r\n    assert(!(default_sentinel != i));\r\n#endif // _HAS_CXX20\r\n}\r\n\r\ntemplate <class CharT = char, class Traits = char_traits<CharT>>\r\nvoid test_ostreambuf_iterator(basic_ostream<CharT, Traits>& os) {\r\n    using I = ostreambuf_iterator<CharT, Traits>;\r\n\r\n    // Also tests strengthened noexcept on some pre-existing operations\r\n    I i{os};\r\n    STATIC_ASSERT(noexcept(*i));\r\n    STATIC_ASSERT(noexcept(++i));\r\n    STATIC_ASSERT(noexcept(i++));\r\n\r\n#if _HAS_CXX20\r\n    STATIC_ASSERT(output_iterator<I, const CharT&>);\r\n    STATIC_ASSERT(is_same_v<typename I::difference_type, ptrdiff_t>);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\ntemplate <class C, enable_if_t<is_same_v<C, char>, int> = 0>\r\nconstexpr auto statically_widen_impl(const char* narrow_str, const wchar_t*) noexcept {\r\n    return narrow_str;\r\n}\r\n\r\ntemplate <class C, enable_if_t<!is_same_v<C, char>, int> = 0>\r\nconstexpr auto statically_widen_impl(const char*, const wchar_t* wide_str) noexcept {\r\n    return wide_str;\r\n}\r\n\r\n#define STATICALLY_WIDEN(C, S) statically_widen_impl<C>(S, L##S)\r\n\r\ntemplate <class Sequence>\r\nvoid test_regex_iterator(const Sequence& seq) {\r\n    (void) seq;\r\n#if _HAS_CXX20\r\n    using SequenceIter = decltype(cbegin(seq));\r\n    using CharT        = remove_cv_t<iter_value_t<SequenceIter>>;\r\n    using I            = regex_iterator<SequenceIter>;\r\n\r\n    const I end_it{};\r\n    assert(end_it == default_sentinel);\r\n    assert(default_sentinel == end_it);\r\n    assert(!(end_it != default_sentinel));\r\n    assert(!(default_sentinel != end_it));\r\n\r\n    basic_regex<CharT> re(STATICALLY_WIDEN(CharT, \"[a-z]\"));\r\n    I begin_it{cbegin(seq), cend(seq), re};\r\n    assert(begin_it != default_sentinel);\r\n    assert(default_sentinel != begin_it);\r\n    assert(!(begin_it == default_sentinel));\r\n    assert(!(default_sentinel == begin_it));\r\n\r\n    ranges::advance(begin_it, end_it);\r\n    assert(begin_it == default_sentinel);\r\n    assert(default_sentinel == begin_it);\r\n    assert(!(begin_it != default_sentinel));\r\n    assert(!(default_sentinel != begin_it));\r\n#endif // _HAS_CXX20\r\n}\r\n\r\ntemplate <class Sequence>\r\nvoid test_regex_token_iterator(const Sequence& seq) {\r\n    (void) seq;\r\n#if _HAS_CXX20\r\n    using SequenceIter = decltype(cbegin(seq));\r\n    using CharT        = remove_cv_t<iter_value_t<SequenceIter>>;\r\n    using I            = regex_token_iterator<SequenceIter>;\r\n\r\n    const I end_it{};\r\n    assert(end_it == default_sentinel);\r\n    assert(default_sentinel == end_it);\r\n    assert(!(end_it != default_sentinel));\r\n    assert(!(default_sentinel != end_it));\r\n\r\n    basic_regex<CharT> re(STATICALLY_WIDEN(CharT, \"[a-z]\"));\r\n    I begin_it{cbegin(seq), cend(seq), re};\r\n    assert(begin_it != default_sentinel);\r\n    assert(default_sentinel != begin_it);\r\n    assert(!(begin_it == default_sentinel));\r\n    assert(!(default_sentinel == begin_it));\r\n\r\n    ranges::advance(begin_it, end_it);\r\n    assert(begin_it == default_sentinel);\r\n    assert(default_sentinel == begin_it);\r\n    assert(!(begin_it != default_sentinel));\r\n    assert(!(default_sentinel != begin_it));\r\n#endif // _HAS_CXX20\r\n}\r\n\r\n#if _HAS_CXX17\r\nvoid test_directory_iterator() {\r\n#if _HAS_CXX20\r\n    using I = filesystem::directory_iterator;\r\n\r\n    const I end_it{};\r\n    STATIC_ASSERT(noexcept(end_it == default_sentinel));\r\n    STATIC_ASSERT(noexcept(end_it != default_sentinel));\r\n    STATIC_ASSERT(noexcept(default_sentinel == end_it));\r\n    STATIC_ASSERT(noexcept(default_sentinel != end_it));\r\n\r\n    assert(end_it == default_sentinel);\r\n    assert(default_sentinel == end_it);\r\n    assert(!(end_it != default_sentinel));\r\n    assert(!(default_sentinel != end_it));\r\n\r\n    I begin_it{filesystem::path{L\".\"}};\r\n    assert(begin_it != default_sentinel);\r\n    assert(default_sentinel != begin_it);\r\n    assert(!(begin_it == default_sentinel));\r\n    assert(!(default_sentinel == begin_it));\r\n\r\n    ranges::advance(begin_it, end_it);\r\n    assert(begin_it == default_sentinel);\r\n    assert(default_sentinel == begin_it);\r\n    assert(!(begin_it != default_sentinel));\r\n    assert(!(default_sentinel != begin_it));\r\n#endif // _HAS_CXX20\r\n}\r\n\r\nvoid test_recursive_directory_iterator() {\r\n#if _HAS_CXX20\r\n    using I = filesystem::recursive_directory_iterator;\r\n\r\n    const I end_it{};\r\n    STATIC_ASSERT(noexcept(end_it == default_sentinel));\r\n    STATIC_ASSERT(noexcept(end_it != default_sentinel));\r\n    STATIC_ASSERT(noexcept(default_sentinel == end_it));\r\n    STATIC_ASSERT(noexcept(default_sentinel != end_it));\r\n\r\n    assert(end_it == default_sentinel);\r\n    assert(default_sentinel == end_it);\r\n    assert(!(end_it != default_sentinel));\r\n    assert(!(default_sentinel != end_it));\r\n\r\n    I begin_it{filesystem::path{L\".\"}};\r\n    assert(begin_it != default_sentinel);\r\n    assert(default_sentinel != begin_it);\r\n    assert(!(begin_it == default_sentinel));\r\n    assert(!(default_sentinel == begin_it));\r\n\r\n    ranges::advance(begin_it, end_it);\r\n    assert(begin_it == default_sentinel);\r\n    assert(default_sentinel == begin_it);\r\n    assert(!(begin_it != default_sentinel));\r\n    assert(!(default_sentinel != begin_it));\r\n#endif // _HAS_CXX20\r\n}\r\n#endif // _HAS_CXX17\r\n\r\nint main() {\r\n    test_istream_iterator<int>();\r\n    test_istream_iterator<string>();\r\n    test_istream_iterator<int, wchar_t>();\r\n    test_istream_iterator<string, wchar_t>();\r\n\r\n    test_ostream_iterator<int>(cout);\r\n    test_ostream_iterator<string>(cout);\r\n    test_ostream_iterator<int>(wcout);\r\n    test_ostream_iterator<string>(wcout);\r\n\r\n    test_istreambuf_iterator<char>();\r\n    test_istreambuf_iterator<wchar_t>();\r\n\r\n    test_ostreambuf_iterator(cout);\r\n    test_ostreambuf_iterator(wcout);\r\n\r\n    test_regex_iterator(\"hello world\");\r\n    test_regex_iterator(L\"hello world\");\r\n    test_regex_iterator(string{\"hello world\"});\r\n    test_regex_iterator(wstring{L\"hello world\"});\r\n\r\n    test_regex_token_iterator(\"hello world\");\r\n    test_regex_token_iterator(L\"hello world\");\r\n    test_regex_token_iterator(string{\"hello world\"});\r\n    test_regex_token_iterator(wstring{L\"hello world\"});\r\n\r\n#if _HAS_CXX17\r\n    test_directory_iterator();\r\n    test_recursive_directory_iterator();\r\n#endif // _HAS_CXX17\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_all/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_all/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <ranges>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewAll = requires(Rng&& r) { views::all(forward<Rng>(r)); };\r\n\r\n// Test a silly precomposed range adaptor pipeline\r\nconstexpr auto pipeline = views::all | views::all | views::all | views::all | views::all | views::all;\r\n\r\n// Test weird view type with explicit copy constructor, LWG-3724\r\nstruct weird_string_view {\r\n    const char* data_  = nullptr;\r\n    unsigned int size_ = 0u;\r\n\r\n    weird_string_view()                                    = default;\r\n    explicit weird_string_view(const weird_string_view&)   = default;\r\n    weird_string_view(weird_string_view&&)                 = default;\r\n    weird_string_view& operator=(const weird_string_view&) = default;\r\n    weird_string_view& operator=(weird_string_view&&)      = default;\r\n\r\n    const char* begin() const {\r\n        return data_;\r\n    }\r\n\r\n    const char* end() const {\r\n        return data_ + size_;\r\n    }\r\n\r\n    unsigned int size() const {\r\n        return size_;\r\n    }\r\n};\r\n\r\ntemplate <>\r\ninline constexpr bool std::ranges::enable_view<weird_string_view> = true;\r\n\r\ntemplate <class Rng>\r\nconstexpr bool test_one(Rng&& rng) {\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n    static_assert(is_view || is_lvalue_reference_v<Rng>);\r\n\r\n    using V = conditional_t<is_view, remove_cvref_t<Rng>, ranges::ref_view<remove_reference_t<Rng>>>;\r\n\r\n    static_assert(CanViewAll<Rng&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (!is_view || copy_constructible<V>) { // Validate lvalue\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<views::all_t<Rng>, V>);\r\n        static_assert(same_as<decltype(views::all(rng)), V>);\r\n        static_assert(noexcept(views::all(rng)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | views::all), V>);\r\n        static_assert(noexcept(rng | views::all) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(views::all(rng)), decltype(rng | views::all | views::all | views::all)>);\r\n        static_assert(noexcept(rng | views::all | views::all | views::all) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(views::all(rng)), decltype(rng | pipeline)>);\r\n        static_assert(noexcept(rng | pipeline) == is_noexcept);\r\n    }\r\n\r\n    static_assert(CanViewAll<const remove_cvref_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<views::all_t<const remove_cvref_t<Rng>&>, V>);\r\n        static_assert(same_as<decltype(views::all(as_const(rng))), V>);\r\n        static_assert(noexcept(views::all(as_const(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | views::all), V>);\r\n        static_assert(noexcept(as_const(rng) | views::all) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | views::all | views::all | views::all), V>);\r\n        static_assert(noexcept(as_const(rng) | views::all | views::all | views::all) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), V>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (!is_view) {\r\n        using RV = ranges::ref_view<const remove_cvref_t<Rng>>;\r\n\r\n        static_assert(same_as<views::all_t<const remove_cvref_t<Rng>&>, RV>);\r\n        static_assert(same_as<decltype(views::all(as_const(rng))), RV>);\r\n        static_assert(noexcept(views::all(as_const(rng))));\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | views::all), RV>);\r\n        static_assert(noexcept(as_const(rng) | views::all));\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | views::all | views::all | views::all), RV>);\r\n        static_assert(noexcept(as_const(rng) | views::all | views::all | views::all));\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), RV>);\r\n        static_assert(noexcept(as_const(rng) | pipeline));\r\n    }\r\n\r\n    // Validate rvalue\r\n    static_assert(CanViewAll<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (is_view) {\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n\r\n        static_assert(same_as<views::all_t<remove_reference_t<Rng>>, V>);\r\n        static_assert(same_as<decltype(views::all(move(rng))), V>);\r\n        static_assert(noexcept(views::all(move(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | views::all), V>);\r\n        static_assert(noexcept(move(rng) | views::all) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | views::all | views::all | views::all), V>);\r\n        static_assert(noexcept(move(rng) | views::all | views::all | views::all) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), V>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (movable<remove_reference_t<Rng>>) {\r\n        using S                    = ranges::owning_view<remove_reference_t<Rng>>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<remove_reference_t<Rng>>;\r\n\r\n        static_assert(same_as<views::all_t<remove_reference_t<Rng>>, S>);\r\n        static_assert(same_as<decltype(views::all(move(rng))), S>);\r\n        static_assert(noexcept(views::all(move(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | views::all), S>);\r\n        static_assert(noexcept(move(rng) | views::all) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | views::all | views::all | views::all), S>);\r\n        static_assert(noexcept(move(rng) | views::all | views::all | views::all) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), S>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // Validate const rvalue\r\n    static_assert(CanViewAll<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<views::all_t<const remove_reference_t<Rng>>, V>);\r\n        static_assert(same_as<decltype(views::all(move(as_const(rng)))), V>);\r\n        static_assert(noexcept(views::all(move(as_const(rng)))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | views::all), V>);\r\n        static_assert(noexcept(move(as_const(rng)) | views::all) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | views::all | views::all | views::all), V>);\r\n        static_assert(noexcept(move(as_const(rng)) | views::all | views::all | views::all) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | pipeline), V>);\r\n        static_assert(noexcept(move(as_const(rng)) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nint main() {\r\n    static constexpr int some_ints[] = {0, 1, 2};\r\n\r\n    // Validate views\r\n    { // ... copyable\r\n        constexpr string_view str{\"Hello, World!\"};\r\n        static_assert(test_one(str));\r\n        test_one(str);\r\n        assert(ranges::equal(views::all(str), str));\r\n    }\r\n    { // ... move-only\r\n        test_one(move_only_view<input_iterator_tag, test::Common::no>{some_ints});\r\n        assert(ranges::equal(views::all(move_only_view<input_iterator_tag, test::Common::no>{some_ints}), some_ints));\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::no>{some_ints});\r\n        assert(ranges::equal(views::all(move_only_view<forward_iterator_tag, test::Common::no>{some_ints}), some_ints));\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints});\r\n        assert(\r\n            ranges::equal(views::all(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}), some_ints));\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints});\r\n        assert(ranges::equal(\r\n            views::all(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}), some_ints));\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints});\r\n        assert(ranges::equal(\r\n            views::all(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}), some_ints));\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints});\r\n        assert(ranges::equal(\r\n            views::all(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}), some_ints));\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints});\r\n        assert(ranges::equal(\r\n            views::all(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}), some_ints));\r\n    }\r\n\r\n    // Validate non-views\r\n    {\r\n        static_assert(test_one(some_ints));\r\n        test_one(some_ints);\r\n        assert(ranges::equal(views::all(some_ints), some_ints));\r\n    }\r\n    {\r\n        string str{\"Hello, World!\"};\r\n        test_one(str);\r\n        assert(ranges::equal(views::all(str), str));\r\n    }\r\n\r\n    // Weird views, LWG-3724\r\n    {\r\n        weird_string_view v{};\r\n        static_assert(test_one(v));\r\n        test_one(v);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_common/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_common/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewCommon = requires(Rng&& r) { views::common(static_cast<Rng &&>(r)); };\r\n\r\ntemplate <class Rng>\r\nconcept CanViewAll = requires(Rng&& r) { views::all(static_cast<Rng &&>(r)); };\r\n\r\n// Test a silly precomposed range adaptor pipeline\r\nconstexpr auto pipeline = views::all | views::common;\r\n\r\n// Due to language limitations we cannot declare variables of non-literal type in a branch that is guarded by\r\n// `!is_constant_evaluated()`. But we can call a non-constexpr function that declares those variables.\r\ntemplate <ranges::view V, ranges::input_range R, ranges::input_range E>\r\nvoid non_literal_parts(R& r, E& expected) {\r\n    using ranges::iterator_t, ranges::begin, ranges::bidirectional_range, ranges::end, ranges::prev;\r\n\r\n    const bool is_empty = ranges::empty(expected);\r\n\r\n    const same_as<iterator_t<R>> auto first = r.begin();\r\n    if (!is_empty) {\r\n        assert(*first == *begin(expected));\r\n    }\r\n\r\n    if constexpr (copyable<V>) {\r\n        auto r2                                  = r;\r\n        const same_as<iterator_t<R>> auto first2 = r2.begin();\r\n        if (!is_empty) {\r\n            assert(*first2 == *first);\r\n        }\r\n    }\r\n\r\n    if constexpr (CanBegin<const R&>) {\r\n        const same_as<iterator_t<const R>> auto first3 = as_const(r).begin();\r\n        if (!is_empty) {\r\n            assert(*first3 == *first);\r\n        }\r\n    }\r\n\r\n    const same_as<iterator_t<R>> auto last = r.end();\r\n    if constexpr (bidirectional_range<R>) {\r\n        if (!is_empty) {\r\n            assert(*prev(last) == *prev(end(expected)));\r\n        }\r\n    }\r\n\r\n    if constexpr (CanEnd<const R&>) {\r\n        const same_as<iterator_t<const R>> auto last2 = as_const(r).end();\r\n        if constexpr (bidirectional_range<const R>) {\r\n            if (!is_empty) {\r\n                assert(*prev(last2) == *prev(end(expected)));\r\n            }\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    using ranges::const_iterator_t;\r\n\r\n    const same_as<const_iterator_t<R>> auto cfirst = r.cbegin();\r\n    if (!is_empty) {\r\n        assert(*cfirst == *begin(expected));\r\n    }\r\n\r\n    if constexpr (copyable<V>) {\r\n        auto r2                                         = r;\r\n        const same_as<const_iterator_t<R>> auto cfirst2 = r2.cbegin();\r\n        if (!is_empty) {\r\n            assert(*cfirst2 == *cfirst);\r\n        }\r\n    }\r\n\r\n    if constexpr (CanCBegin<const R&>) {\r\n        const same_as<const_iterator_t<const R>> auto cfirst3 = as_const(r).cbegin();\r\n        if (!is_empty) {\r\n            assert(*cfirst3 == *cfirst);\r\n        }\r\n    }\r\n\r\n    const same_as<const_iterator_t<R>> auto clast = r.cend();\r\n    if constexpr (bidirectional_range<R>) {\r\n        if (!is_empty) {\r\n            assert(*prev(clast) == *prev(end(expected)));\r\n        }\r\n    }\r\n\r\n    if constexpr (CanCEnd<const R&>) {\r\n        const same_as<const_iterator_t<const R>> auto clast2 = as_const(r).cend();\r\n        if constexpr (bidirectional_range<const R>) {\r\n            if (!is_empty) {\r\n                assert(*prev(clast2) == *prev(end(expected)));\r\n            }\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n}\r\n\r\ntemplate <class Rng, class Expected>\r\nconstexpr bool test_one(Rng&& rng, Expected&& expected) {\r\n    using ranges::common_view, ranges::bidirectional_range, ranges::common_range, ranges::contiguous_range,\r\n        ranges::enable_borrowed_range, ranges::forward_range, ranges::input_range, ranges::iterator_t, ranges::prev,\r\n        ranges::random_access_range, ranges::range, ranges::range_reference_t, ranges::size, ranges::sized_range,\r\n        ranges::range_size_t, ranges::borrowed_range;\r\n\r\n    constexpr bool is_view   = ranges::view<remove_cvref_t<Rng>>;\r\n    using V                  = views::all_t<Rng>;\r\n    constexpr bool is_common = common_range<V>;\r\n\r\n    // Validate range adaptor object\r\n    if constexpr (!is_common) { // range adaptor results in common_view\r\n        using R = common_view<V>;\r\n        static_assert(ranges::view<R>);\r\n\r\n        // ...with lvalue argument\r\n        static_assert(CanViewCommon<Rng&> == (!is_view && copyable<V>) );\r\n        if constexpr (CanViewCommon<Rng&>) {\r\n            constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::common(rng)), R>);\r\n            static_assert(noexcept(views::common(rng)) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(rng | views::common), R>);\r\n            static_assert(noexcept(rng | views::common) == is_noexcept);\r\n        }\r\n\r\n        // ... with const lvalue argument\r\n        static_assert(CanViewCommon<const remove_reference_t<Rng>&> == (!is_view || copyable<V>) );\r\n        if constexpr (is_view && copyable<V>) {\r\n            constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::common(as_const(rng))), R>);\r\n            static_assert(noexcept(views::common(as_const(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | views::common), R>);\r\n            static_assert(noexcept(as_const(rng) | views::common) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | views::common | views::common | views::common), V>);\r\n            static_assert(noexcept(as_const(rng) | views::common | views::common | views::common) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | pipeline), V>);\r\n            static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n        } else if constexpr (!is_view) {\r\n            using RC                   = common_view<views::all_t<const remove_reference_t<Rng>&>>;\r\n            constexpr bool is_noexcept = is_nothrow_constructible_v<RC, const remove_reference_t<Rng>&>;\r\n\r\n            static_assert(same_as<decltype(views::common(as_const(rng))), RC>);\r\n            static_assert(noexcept(views::common(as_const(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | views::common), RC>);\r\n            static_assert(noexcept(as_const(rng) | views::common) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | views::common | views::common | views::common), RC>);\r\n            static_assert(noexcept(as_const(rng) | views::common | views::common | views::common) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | pipeline), RC>);\r\n            static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n        }\r\n\r\n        // ... with rvalue argument\r\n        static_assert(CanViewCommon<remove_reference_t<Rng>> == is_view || enable_borrowed_range<remove_cvref_t<Rng>>);\r\n        if constexpr (is_view) {\r\n            constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n            static_assert(same_as<decltype(views::common(move(rng))), R>);\r\n            static_assert(noexcept(views::common(move(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(rng) | views::common), R>);\r\n            static_assert(noexcept(move(rng) | views::common) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(rng) | views::common | views::common | views::common), R>);\r\n            static_assert(noexcept(move(rng) | views::common | views::common | views::common) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(rng) | pipeline), R>);\r\n            static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n        } else if constexpr (enable_borrowed_range<remove_cvref_t<Rng>>) {\r\n            using S                    = decltype(ranges::subrange{move(rng)});\r\n            using RS                   = common_view<S>;\r\n            constexpr bool is_noexcept = noexcept(S{move(rng)});\r\n\r\n            static_assert(same_as<decltype(views::common(move(rng))), RS>);\r\n            static_assert(noexcept(views::common(move(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(rng) | views::common), RS>);\r\n            static_assert(noexcept(move(rng) | views::common) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(rng) | views::common | views::common | views::common), RS>);\r\n            static_assert(noexcept(move(rng) | views::common | views::common | views::common) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(rng) | pipeline), RS>);\r\n            static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n        }\r\n\r\n        // ... with const rvalue argument\r\n        static_assert(CanViewCommon<const remove_reference_t<Rng>> == (is_view && copyable<V>)\r\n                      || (!is_view && enable_borrowed_range<remove_cvref_t<Rng>>) );\r\n        if constexpr (is_view && copyable<V>) {\r\n            constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::common(move(as_const(rng)))), R>);\r\n            static_assert(noexcept(views::common(move(as_const(rng)))) == is_nothrow_copy_constructible_v<R>);\r\n\r\n            static_assert(same_as<decltype(move(as_const(rng)) | views::common), R>);\r\n            static_assert(noexcept(move(as_const(rng)) | views::common) == is_nothrow_copy_constructible_v<R>);\r\n\r\n            static_assert(same_as<decltype(move(as_const(rng)) | views::common | views::common | views::common), R>);\r\n            static_assert(noexcept(move(as_const(rng)) | views::common | views::common | views::common) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(as_const(rng)) | pipeline), R>);\r\n            static_assert(noexcept(move(as_const(rng)) | pipeline) == is_noexcept);\r\n        } else if constexpr (!is_view && enable_borrowed_range<remove_cvref_t<Rng>>) {\r\n            using S                    = decltype(ranges::subrange{move(as_const(rng))});\r\n            using RS                   = common_view<S>;\r\n            constexpr bool is_noexcept = noexcept(S{move(as_const(rng))});\r\n\r\n            static_assert(same_as<decltype(views::common(move(as_const(rng)))), RS>);\r\n            static_assert(noexcept(views::common(move(as_const(rng)))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(as_const(rng)) | views::common), RS>);\r\n            static_assert(noexcept(move(as_const(rng)) | views::common) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(as_const(rng)) | views::common | views::common | views::common), RS>);\r\n            static_assert(noexcept(move(as_const(rng)) | views::common | views::common | views::common) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(as_const(rng)) | pipeline), RS>);\r\n            static_assert(noexcept(move(as_const(rng)) | pipeline) == is_noexcept);\r\n        }\r\n    } else { // range adaptor results in views::all_t\r\n        // ...with lvalue argument\r\n        {\r\n            constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::common(rng)), V>);\r\n            static_assert(noexcept(views::common(rng)) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(rng | views::common), V>);\r\n            static_assert(noexcept(rng | views::common) == is_noexcept);\r\n        }\r\n\r\n        // ... with const lvalue argument\r\n        if constexpr (is_view && copyable<V>) {\r\n            constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::common(as_const(rng))), V>);\r\n            static_assert(noexcept(views::common(as_const(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | views::common), V>);\r\n            static_assert(noexcept(as_const(rng) | views::common) == is_noexcept);\r\n        } else if constexpr (!is_view) {\r\n            using RC                   = views::all_t<const remove_reference_t<Rng>&>;\r\n            constexpr bool is_noexcept = is_nothrow_constructible_v<RC, const remove_reference_t<Rng>&>;\r\n\r\n            static_assert(same_as<decltype(views::common(as_const(rng))), RC>);\r\n            static_assert(noexcept(views::common(as_const(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | views::common), RC>);\r\n            static_assert(noexcept(as_const(rng) | views::common) == is_noexcept);\r\n        }\r\n        // ... with rvalue argument\r\n        static_assert(CanViewCommon<remove_reference_t<Rng>> == is_view || enable_borrowed_range<remove_cvref_t<Rng>>);\r\n        if constexpr (is_view) {\r\n            constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n            static_assert(same_as<decltype(views::common(move(rng))), V>);\r\n            static_assert(noexcept(views::common(move(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(rng) | views::common), V>);\r\n            static_assert(noexcept(move(rng) | views::common) == is_noexcept);\r\n        } else if constexpr (enable_borrowed_range<remove_cvref_t<Rng>>) {\r\n            using S                    = decltype(ranges::subrange{move(rng)});\r\n            constexpr bool is_noexcept = noexcept(S{move(rng)});\r\n\r\n            static_assert(same_as<decltype(views::common(move(rng))), V>);\r\n            static_assert(noexcept(views::common(move(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(rng) | views::common), V>);\r\n            static_assert(noexcept(move(rng) | views::common) == is_noexcept);\r\n        }\r\n\r\n        // ... with const rvalue argument\r\n        static_assert(CanViewCommon<const remove_reference_t<Rng>> == (is_view && copyable<V>)\r\n                      || (!is_view && enable_borrowed_range<remove_cvref_t<Rng>>) );\r\n        if constexpr (is_view && copyable<V>) {\r\n            constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::common(move(as_const(rng)))), V>);\r\n            static_assert(noexcept(views::common(move(as_const(rng)))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(as_const(rng)) | views::common), V>);\r\n            static_assert(noexcept(move(as_const(rng)) | views::common) == is_noexcept);\r\n        } else if constexpr (!is_view && enable_borrowed_range<remove_cvref_t<Rng>>) {\r\n            using S                    = decltype(ranges::subrange{move(as_const(rng))});\r\n            constexpr bool is_noexcept = noexcept(S{move(as_const(rng))});\r\n\r\n            static_assert(same_as<decltype(views::common(move(as_const(rng)))), V>);\r\n            static_assert(noexcept(views::common(move(as_const(rng)))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(as_const(rng)) | views::common), V>);\r\n            static_assert(noexcept(move(as_const(rng)) | views::common) == is_noexcept);\r\n        }\r\n    }\r\n\r\n    if constexpr (!is_common) {\r\n        // Validate deduction guide\r\n        using R           = common_view<V>;\r\n        same_as<R> auto r = common_view{forward<Rng>(rng)};\r\n        if (!is_constant_evaluated()) {\r\n            assert(ranges::equal(r, expected));\r\n        }\r\n\r\n        // Validate common_view::size\r\n        static_assert(CanMemberSize<R> == sized_range<Rng>);\r\n        if constexpr (sized_range<Rng>) {\r\n            assert(r.size() == static_cast<range_size_t<R>>(size(expected)));\r\n            static_assert(noexcept(r.size()) == noexcept(size(rng)));\r\n        }\r\n\r\n        static_assert(CanMemberSize<const R> == sized_range<const Rng>);\r\n        if constexpr (sized_range<const Rng>) {\r\n            assert(as_const(r).size() == static_cast<range_size_t<R>>(size(expected)));\r\n            static_assert(noexcept(as_const(r).size()) == noexcept(size(as_const(rng))));\r\n        }\r\n\r\n        // Validate view_interface::empty and operator bool\r\n        const bool is_empty = ranges::empty(expected);\r\n        if (!is_constant_evaluated()) {\r\n            if constexpr (CanMemberEmpty<R>) {\r\n                assert(r.empty() == is_empty);\r\n                assert(static_cast<bool>(r) == !is_empty);\r\n            }\r\n\r\n            if constexpr (CanMemberEmpty<const R>) {\r\n                assert(as_const(r).empty() == is_empty);\r\n                assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n            }\r\n        }\r\n\r\n        // Validate common_view::begin and common_view::end\r\n        static_assert(CanMemberBegin<R>);\r\n        static_assert(CanBegin<const R&> == range<const V>);\r\n        static_assert(CanMemberEnd<R>);\r\n        static_assert(CanEnd<const R&> == range<const V>);\r\n        if (!is_constant_evaluated()) {\r\n            non_literal_parts<V>(r, expected);\r\n        }\r\n\r\n        // Validate view_interface::data\r\n        static_assert(CanMemberData<R> == (contiguous_range<V> && sized_range<V>) );\r\n        static_assert(contiguous_range<R> == CanMemberData<R>);\r\n        if constexpr (CanMemberData<R>) {\r\n            assert(r.data() == &*r.begin());\r\n        }\r\n        static_assert(CanMemberData<const R> == (contiguous_range<const V> && sized_range<const V>) );\r\n        static_assert(contiguous_range<const R> == CanMemberData<const R>);\r\n        if constexpr (CanMemberData<const R>) {\r\n            assert(as_const(r).data() == &*as_const(r).begin());\r\n        }\r\n\r\n        if (!is_constant_evaluated() && !is_empty) {\r\n            // Validate view_interface::operator[]\r\n            if constexpr (CanIndex<R>) {\r\n                assert(r[0] == *begin(expected));\r\n            }\r\n\r\n            if constexpr (CanIndex<const R>) {\r\n                assert(as_const(r)[0] == *begin(expected));\r\n            }\r\n\r\n            // Validate view_interface::front and back\r\n            if constexpr (CanMemberFront<R>) {\r\n                assert(r.front() == *begin(expected));\r\n            }\r\n\r\n            if constexpr (CanMemberFront<const R>) {\r\n                assert(as_const(r).front() == *begin(expected));\r\n            }\r\n\r\n            if constexpr (CanMemberBack<R>) {\r\n                assert(r.back() == *prev(end(expected)));\r\n            }\r\n\r\n            if constexpr (CanMemberBack<const R>) {\r\n                assert(as_const(r).back() == *prev(end(expected)));\r\n            }\r\n        }\r\n\r\n        // Validate common_view::base() const&\r\n        static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n        if constexpr (copy_constructible<V>) {\r\n            same_as<V> auto b1 = as_const(r).base();\r\n            static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>);\r\n            if (!is_empty) {\r\n                assert(*b1.begin() == *begin(expected));\r\n            }\r\n        }\r\n\r\n        // Validate common_view::base() && (NB: do this last since it leaves r moved-from)\r\n        same_as<V> auto b2 = move(r).base();\r\n        static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b2.begin() == *begin(expected));\r\n        }\r\n\r\n        // Validate borrowed_range\r\n        static_assert(borrowed_range<R> == borrowed_range<V>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nstruct instantiator {\r\n    static constexpr int some_ints[] = {0, 1, 2};\r\n\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        if constexpr (copyable<ranges::iterator_t<R>>) {\r\n            R r{some_ints};\r\n            test_one(r, span<const int, 3>{some_ints});\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class T>\r\nstruct difference_type_only_iterator {\r\n    static_assert(is_object_v<T>);\r\n\r\n    friend constexpr bool operator==(difference_type_only_iterator, difference_type_only_iterator)  = default;\r\n    friend constexpr auto operator<=>(difference_type_only_iterator, difference_type_only_iterator) = default;\r\n\r\n    using iterator_concept = contiguous_iterator_tag;\r\n    using value_type       = remove_cvref_t<T>;\r\n\r\n    constexpr T& operator*() const noexcept {\r\n        return *ptr_;\r\n    }\r\n\r\n    constexpr T* operator->() const noexcept {\r\n        return ptr_;\r\n    }\r\n\r\n    constexpr difference_type_only_iterator& operator++() noexcept {\r\n        ++ptr_;\r\n        return *this;\r\n    }\r\n\r\n    constexpr difference_type_only_iterator operator++(int) noexcept {\r\n        auto result = *this;\r\n        ++*this;\r\n        return result;\r\n    }\r\n\r\n    constexpr difference_type_only_iterator& operator--() noexcept {\r\n        --ptr_;\r\n        return *this;\r\n    }\r\n\r\n    constexpr difference_type_only_iterator operator--(int) noexcept {\r\n        auto result = *this;\r\n        --*this;\r\n        return result;\r\n    }\r\n\r\n    constexpr difference_type_only_iterator& operator+=(same_as<ptrdiff_t> auto n) noexcept {\r\n        ptr_ += n;\r\n        return *this;\r\n    }\r\n\r\n    constexpr difference_type_only_iterator& operator-=(same_as<ptrdiff_t> auto n) noexcept {\r\n        ptr_ -= n;\r\n        return *this;\r\n    }\r\n\r\n    template <same_as<ptrdiff_t> U>\r\n    friend constexpr difference_type_only_iterator operator+(difference_type_only_iterator i, U n) noexcept {\r\n        i += n;\r\n        return i;\r\n    }\r\n\r\n    template <same_as<ptrdiff_t> U>\r\n    friend constexpr difference_type_only_iterator operator+(U n, difference_type_only_iterator i) noexcept {\r\n        i += n;\r\n        return i;\r\n    }\r\n\r\n    template <same_as<ptrdiff_t> U>\r\n    friend constexpr difference_type_only_iterator operator-(difference_type_only_iterator i, U n) noexcept {\r\n        i -= n;\r\n        return i;\r\n    }\r\n\r\n    friend constexpr ptrdiff_t operator-(difference_type_only_iterator i, difference_type_only_iterator j) noexcept {\r\n        return i.ptr_ - j.ptr_;\r\n    }\r\n\r\n    constexpr T& operator[](same_as<ptrdiff_t> auto n) const noexcept {\r\n        return ptr_[n];\r\n    }\r\n\r\n    T* ptr_;\r\n};\r\n\r\ntemplate <class T>\r\nstruct difference_type_only_sentinel {\r\n    static_assert(is_object_v<T>);\r\n\r\n    friend constexpr bool operator==(difference_type_only_iterator<T> i, difference_type_only_sentinel s) noexcept {\r\n        return i.ptr_ == s.ptr_end_;\r\n    }\r\n\r\n    friend constexpr ptrdiff_t operator-(difference_type_only_iterator<T> i, difference_type_only_sentinel s) noexcept {\r\n        return i.ptr_ - s.ptr_end_;\r\n    }\r\n\r\n    friend constexpr ptrdiff_t operator-(difference_type_only_sentinel s, difference_type_only_iterator<T> i) noexcept {\r\n        return s.ptr_end_ - i.ptr_;\r\n    }\r\n\r\n    T* ptr_end_;\r\n};\r\n\r\ntemplate <class T>\r\nconstexpr bool test_lwg3717() {\r\n    remove_cv_t<T> x{};\r\n\r\n    auto cmv_sr = ranges::subrange(difference_type_only_iterator<T>{&x}, difference_type_only_sentinel<T>{&x + 1})\r\n                | views::common;\r\n\r\n    static_assert(ranges::contiguous_range<decltype(cmv_sr)>);\r\n    static_assert(ranges::contiguous_range<const decltype(cmv_sr)>);\r\n\r\n    assert(ranges::end(cmv_sr) == ranges::begin(cmv_sr) + ptrdiff_t{1});\r\n    assert(ranges::end(as_const(cmv_sr)) == ranges::begin(as_const(cmv_sr)) + ptrdiff_t{1});\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_lwg_4012() {\r\n    struct simple_view_with_difference_on_const : ranges::view_interface<simple_view_with_difference_on_const> {\r\n        constexpr difference_type_only_iterator<int> begin() noexcept {\r\n            return {nullptr};\r\n        }\r\n        constexpr difference_type_only_sentinel<int> end() noexcept {\r\n            return {nullptr};\r\n        }\r\n        constexpr difference_type_only_iterator<int> begin() const noexcept {\r\n            return {p_};\r\n        }\r\n        constexpr difference_type_only_sentinel<int> end() const noexcept {\r\n            return {p_};\r\n        }\r\n\r\n        int* p_;\r\n    };\r\n\r\n    int n{};\r\n    auto cv = views::common(simple_view_with_difference_on_const{{}, &n});\r\n\r\n    assert(cv.begin() == as_const(cv).begin());\r\n    assert(cv.begin() == as_const(cv).end());\r\n    assert(as_const(cv).begin() == cv.end());\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    // Get full instantiation coverage\r\n    static_assert((test_in<instantiator, const int>(), true));\r\n    test_in<instantiator, const int>();\r\n\r\n    static_assert(test_lwg3717<int>());\r\n    static_assert(test_lwg3717<const int>());\r\n\r\n    assert(test_lwg3717<int>());\r\n    assert(test_lwg3717<const int>());\r\n\r\n    static_assert(test_lwg_4012());\r\n    test_lwg_4012();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_counted/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_counted/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <ranges>\r\n#include <span>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class I>\r\nconcept Countable = requires { typename iter_difference_t<remove_cvref_t<I>>; }\r\n                 && requires(I&& i, iter_difference_t<remove_cvref_t<I>> n) { views::counted(forward<I>(i), n); };\r\n\r\ntemplate <class I>\r\nconcept CanConstructCountedSubrange = requires { typename iter_difference_t<remove_cvref_t<I>>; }\r\n                                   && requires(I&& i, iter_difference_t<remove_cvref_t<I>> n) {\r\n                                          ranges::subrange(counted_iterator(forward<I>(i), n), default_sentinel);\r\n                                      };\r\n\r\ntemplate <input_or_output_iterator Iter>\r\nstruct convertible_difference {\r\n    constexpr convertible_difference(const int _val_) noexcept : _val(_val_) {}\r\n    constexpr operator iter_difference_t<Iter>() const noexcept {\r\n        return iter_difference_t<Iter>{_val};\r\n    }\r\n    convertible_difference(convertible_difference&&)            = delete;\r\n    convertible_difference& operator=(convertible_difference&&) = delete;\r\n\r\n    int _val = 0;\r\n};\r\n\r\nstruct instantiator {\r\n    static constexpr int expected[] = {13, 42, 1729};\r\n\r\n    template <input_or_output_iterator Iter>\r\n    static constexpr void call() {\r\n        using ranges::equal, ranges::size, ranges::subrange;\r\n        int input[] = {13, 42, 1729, -1, -1};\r\n\r\n        static_assert(Countable<Iter>);\r\n        static_assert(Countable<const Iter&> == copy_constructible<Iter>);\r\n\r\n        auto result = ranges::views::counted(Iter{input}, convertible_difference<Iter>{3});\r\n        if constexpr (contiguous_iterator<Iter>) {\r\n            static_assert(same_as<decltype(result), span<remove_reference_t<iter_reference_t<Iter>>, dynamic_extent>>);\r\n\r\n            const test::redifference_iterator<_Signed128, Iter> rediff_it{Iter{input}};\r\n            ranges::contiguous_range auto rediff_result = ranges::views::counted(rediff_it, _Signed128{4});\r\n            assert(size(rediff_result) == 4);\r\n        } else if constexpr (random_access_iterator<Iter>) {\r\n            static_assert(same_as<decltype(result), subrange<Iter, Iter>>);\r\n        } else {\r\n            static_assert(same_as<decltype(result), subrange<counted_iterator<Iter>, default_sentinel_t>>);\r\n        }\r\n        assert(size(result) == 3);\r\n        if constexpr (input_iterator<Iter>) {\r\n            assert(equal(result, expected));\r\n        }\r\n    }\r\n};\r\n\r\n// Also test GH-5183: \"<ranges>: views::counted::_Choose() misses difference casting for contiguous_iterator case\"\r\nstruct ExplicitCopyCtorIter {\r\n    using difference_type = int;\r\n\r\n    ExplicitCopyCtorIter()                                     = default;\r\n    ExplicitCopyCtorIter(ExplicitCopyCtorIter&&)               = default;\r\n    ExplicitCopyCtorIter& operator=(ExplicitCopyCtorIter&&)    = default;\r\n    explicit ExplicitCopyCtorIter(const ExplicitCopyCtorIter&) = default;\r\n    int operator*();\r\n    ExplicitCopyCtorIter& operator++();\r\n    void operator++(int);\r\n};\r\nstatic_assert(!Countable<ExplicitCopyCtorIter&>);\r\nstatic_assert(!CanConstructCountedSubrange<ExplicitCopyCtorIter&>);\r\n\r\nstruct ImplicitCopyOnlyIter {\r\n    using difference_type = int;\r\n\r\n    ImplicitCopyOnlyIter()                                     = default;\r\n    ImplicitCopyOnlyIter(ImplicitCopyOnlyIter&&)               = default;\r\n    ImplicitCopyOnlyIter& operator=(ImplicitCopyOnlyIter&&)    = default;\r\n    explicit ImplicitCopyOnlyIter(const ImplicitCopyOnlyIter&) = delete;\r\n    template <int = 0>\r\n    ImplicitCopyOnlyIter(const ImplicitCopyOnlyIter&);\r\n    int operator*();\r\n    ImplicitCopyOnlyIter& operator++();\r\n    void operator++(int);\r\n};\r\nstatic_assert(Countable<ImplicitCopyOnlyIter&>);\r\nstatic_assert(CanConstructCountedSubrange<ImplicitCopyOnlyIter&>);\r\n\r\nint main() {\r\n    static_assert(with_writable_iterators<instantiator, int>::call());\r\n    with_writable_iterators<instantiator, int>::call();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_counted_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_counted_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <ranges>\r\n\r\n#include <test_death.hpp>\r\nusing namespace std;\r\n\r\nstatic int some_ints[] = {0, 1, 2, 3};\r\n\r\nvoid test_constructor_negative_size() {\r\n    (void) views::counted(some_ints, -3); // The size passed to views::counted must be non-negative\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_constructor_negative_size,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_drop/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_drop/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\n#pragma warning(disable : 6011) // Dereferencing NULL pointer '%s'\r\n\r\nstruct evil_convertible_to_difference {\r\n    evil_convertible_to_difference() = default;\r\n    evil_convertible_to_difference(const evil_convertible_to_difference&) {\r\n        throw 42;\r\n    }\r\n    evil_convertible_to_difference(evil_convertible_to_difference&&) = default;\r\n\r\n    evil_convertible_to_difference& operator=(const evil_convertible_to_difference&) {\r\n        throw 42;\r\n        return *this;\r\n    }\r\n    evil_convertible_to_difference& operator=(evil_convertible_to_difference&&) = default;\r\n\r\n    constexpr operator int() const noexcept {\r\n        return 4;\r\n    }\r\n};\r\n\r\n// Test a silly precomposed range adaptor pipeline\r\nconstexpr auto pipeline = views::drop(1) | views::drop(1) | views::drop(1) | views::drop(1);\r\n\r\ntemplate <class>\r\nconstexpr bool is_subrange = false;\r\ntemplate <class I, class S, ranges::subrange_kind K>\r\nconstexpr bool is_subrange<ranges::subrange<I, S, K>> = true;\r\n\r\ntemplate <class>\r\nstruct mapped {\r\n    template <class Rng>\r\n    using apply = ranges::drop_view<views::all_t<Rng>>;\r\n};\r\ntemplate <class T>\r\nstruct mapped<ranges::empty_view<T>> {\r\n    template <class>\r\n    using apply = ranges::empty_view<T>;\r\n};\r\ntemplate <class T, size_t N>\r\nstruct mapped<span<T, N>> {\r\n    template <class>\r\n    using apply = span<T>;\r\n};\r\ntemplate <class CharT, class Traits>\r\nstruct mapped<basic_string_view<CharT, Traits>> {\r\n    template <class>\r\n    using apply = basic_string_view<CharT, Traits>;\r\n};\r\ntemplate <class W, class B>\r\n    requires ranges::random_access_range<ranges::iota_view<W, B>> && ranges::sized_range<ranges::iota_view<W, B>>\r\nstruct mapped<ranges::iota_view<W, B>> {\r\n    template <class>\r\n    using apply = ranges::iota_view<W, B>;\r\n};\r\ntemplate <class I, class S>\r\n    requires random_access_iterator<I>\r\nstruct mapped<ranges::subrange<I, S, ranges::subrange_kind::sized>> {\r\n    template <class>\r\n    using apply = ranges::subrange<I, S, ranges::subrange_kind::sized>;\r\n};\r\n\r\ntemplate <ranges::viewable_range Rng>\r\nusing mapped_t = mapped<remove_cvref_t<Rng>>::template apply<Rng>;\r\n\r\ntemplate <ranges::viewable_range Rng>\r\nusing pipeline_t = mapped_t<mapped_t<mapped_t<mapped_t<Rng>>>>;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewDrop = requires(Rng&& r) { views::drop(forward<Rng>(r), 42); };\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nconstexpr bool test_one(Rng&& rng, Expected&& expected) {\r\n    using ranges::drop_view, ranges::common_range, ranges::enable_borrowed_range, ranges::iterator_t, ranges::prev,\r\n        ranges::range, ranges::sentinel_t, ranges::sized_range, ranges::borrowed_range;\r\n    using ranges::input_range, ranges::forward_range, ranges::bidirectional_range, ranges::random_access_range,\r\n        ranges::contiguous_range;\r\n\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n\r\n    using V = views::all_t<Rng>;\r\n    using M = mapped_t<Rng>;\r\n    static_assert(ranges::view<M>);\r\n    static_assert(common_range<M> == common_range<Rng>);\r\n    static_assert(input_range<M> == input_range<Rng>);\r\n    static_assert(forward_range<M> == forward_range<Rng>);\r\n    static_assert(bidirectional_range<M> == bidirectional_range<Rng>);\r\n    static_assert(random_access_range<M> == random_access_range<Rng>);\r\n    static_assert(contiguous_range<M> == contiguous_range<Rng>);\r\n\r\n    // Validate range adaptor object and range adaptor closure\r\n    constexpr auto closure = views::drop(4);\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewDrop<Rng&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewDrop<Rng&>) { // Validate lvalue\r\n        constexpr bool is_noexcept = !is_view || (is_nothrow_copy_constructible_v<V> && !is_subrange<V>);\r\n\r\n        static_assert(same_as<decltype(views::drop(rng, 4)), M>);\r\n        static_assert(noexcept(views::drop(rng, 4)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | closure), M>);\r\n        static_assert(noexcept(rng | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | pipeline), pipeline_t<Rng&>>);\r\n        static_assert(noexcept(rng | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewDrop<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = (is_nothrow_copy_constructible_v<V> && !is_subrange<V>);\r\n\r\n        static_assert(same_as<decltype(views::drop(as_const(rng), 4)), M>);\r\n        static_assert(noexcept(views::drop(as_const(rng), 4)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), M>);\r\n        static_assert(noexcept(as_const(rng) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), pipeline_t<const remove_reference_t<Rng>&>>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (!is_view) {\r\n        using RC                   = mapped_t<const remove_reference_t<Rng>&>;\r\n        constexpr bool is_noexcept = is_nothrow_constructible_v<RC, const remove_reference_t<Rng>&, int>;\r\n\r\n        static_assert(same_as<decltype(views::drop(as_const(rng), 4)), RC>);\r\n        static_assert(noexcept(views::drop(as_const(rng), 4)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), RC>);\r\n        static_assert(noexcept(as_const(rng) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), pipeline_t<const remove_reference_t<Rng>&>>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(CanViewDrop<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (is_view) {\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V> && !is_subrange<V>;\r\n        static_assert(same_as<decltype(views::drop(move(rng), 4)), M>);\r\n        static_assert(noexcept(views::drop(move(rng), 4)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | closure), M>);\r\n        static_assert(noexcept(move(rng) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), pipeline_t<remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (movable<remove_reference_t<Rng>>) {\r\n        using S                    = ranges::owning_view<remove_reference_t<Rng>>;\r\n        using RS                   = drop_view<S>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<remove_reference_t<Rng>>;\r\n\r\n        static_assert(same_as<decltype(views::drop(move(rng), 4)), RS>);\r\n        static_assert(noexcept(views::drop(move(rng), 4)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | closure), RS>);\r\n        static_assert(noexcept(move(rng) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), mapped_t<mapped_t<mapped_t<RS>>>>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewDrop<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V> && !is_subrange<V>;\r\n\r\n        static_assert(same_as<decltype(views::drop(move(as_const(rng)), 4)), M>);\r\n        static_assert(noexcept(views::drop(move(as_const(rng)), 4)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | closure), M>);\r\n        static_assert(noexcept(move(as_const(rng)) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | pipeline), pipeline_t<const remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(as_const(rng)) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    const bool is_empty = ranges::empty(expected);\r\n\r\n    // Validate deduction guide\r\n    same_as<drop_view<V>> auto r = drop_view{forward<Rng>(rng), 4};\r\n    using R                      = decltype(r);\r\n    static_assert(ranges::view<R>);\r\n    static_assert(input_range<R> == input_range<Rng>);\r\n    static_assert(forward_range<R> == forward_range<Rng>);\r\n    static_assert(bidirectional_range<R> == bidirectional_range<Rng>);\r\n    static_assert(random_access_range<R> == random_access_range<Rng>);\r\n    static_assert(contiguous_range<R> == contiguous_range<Rng>);\r\n    static_assert(borrowed_range<R> == borrowed_range<V>);\r\n\r\n    // Validate drop_view::size\r\n    static_assert(CanMemberSize<R> == CanSize<Rng>);\r\n    if constexpr (CanMemberSize<R>) {\r\n        assert(r.size() == static_cast<decltype(r.size())>(ranges::size(expected)));\r\n    } else {\r\n        static_assert(!CanSize<R>);\r\n    }\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    static_assert(CanMemberEmpty<R> == (sized_range<Rng> || forward_range<Rng>) );\r\n    static_assert(CanBool<R> == CanEmpty<R>);\r\n    if constexpr (CanMemberEmpty<R>) {\r\n        assert(r.empty() == is_empty);\r\n        assert(static_cast<bool>(r) == !is_empty);\r\n    } else {\r\n        static_assert(CanEmpty<R> == CanSize<R>);\r\n        if constexpr (CanEmpty<R>) {\r\n            assert(ranges::empty(r) == is_empty);\r\n            assert(static_cast<bool>(r) == !is_empty);\r\n        }\r\n    }\r\n\r\n    static_assert(CanMemberEmpty<const R> == (random_access_range<const Rng> && sized_range<const Rng>) );\r\n    static_assert(CanBool<const R> == CanEmpty<const R>);\r\n    if constexpr (CanMemberEmpty<const R>) {\r\n        assert(as_const(r).empty() == is_empty);\r\n        assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n    } else {\r\n        static_assert(CanEmpty<const R> == CanSize<const R>);\r\n        if constexpr (CanEmpty<const R>) {\r\n            assert(ranges::empty(as_const(r)) == is_empty);\r\n            assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n        }\r\n    }\r\n\r\n    // Validate content\r\n    assert(ranges::equal(r, expected));\r\n\r\n    // Validate drop_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    static_assert(same_as<iterator_t<R>, iterator_t<V>>);\r\n    static_assert(CanBegin<const R&> == (random_access_range<const V> && sized_range<const V>) );\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        const same_as<iterator_t<R>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(*i == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2                              = r;\r\n            const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n\r\n        if constexpr (random_access_range<const V> && sized_range<const V>) {\r\n            static_assert(same_as<iterator_t<const R>, iterator_t<const V>>);\r\n            const same_as<iterator_t<const R>> auto i3 = as_const(r).begin();\r\n            if (!is_empty) {\r\n                assert(*i3 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate drop_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    static_assert(same_as<sentinel_t<R>, sentinel_t<V>>);\r\n    static_assert(CanEnd<const R&> == (random_access_range<const V> && sized_range<const V>) );\r\n    if (!is_empty) {\r\n        same_as<sentinel_t<R>> auto i = r.end();\r\n        if constexpr (bidirectional_range<R> && common_range<R>) {\r\n            assert(*prev(i) == *prev(end(expected)));\r\n        }\r\n\r\n        if constexpr (random_access_range<const V> && sized_range<const V>) {\r\n            same_as<sentinel_t<const R>> auto i2 = as_const(r).end();\r\n            if constexpr (bidirectional_range<const R> && common_range<const R>) {\r\n                assert(*prev(i2) == *prev(end(expected)));\r\n            }\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    using ranges::const_iterator_t, ranges::const_sentinel_t, ranges::cbegin, ranges::cend;\r\n\r\n    // Validate view_interface::cbegin\r\n    static_assert(CanMemberCBegin<R> == input_range<V>);\r\n    static_assert(same_as<const_iterator_t<R>, const_iterator_t<V>>);\r\n    static_assert(CanMemberCBegin<const R&> == (random_access_range<const V> && sized_range<const V>) );\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        const same_as<const_iterator_t<R>> auto i = r.cbegin();\r\n        if (!is_empty) {\r\n            assert(*i == *cbegin(expected));\r\n        }\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2                                    = r;\r\n            const same_as<const_iterator_t<R>> auto i2 = r2.cbegin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n\r\n        if constexpr (random_access_range<const V> && sized_range<const V>) {\r\n            static_assert(same_as<const_iterator_t<const R>, const_iterator_t<const V>>);\r\n            const same_as<const_iterator_t<const R>> auto i3 = as_const(r).cbegin();\r\n            if (!is_empty) {\r\n                assert(*i3 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::cend\r\n    static_assert(CanMemberCEnd<R> == input_range<V>);\r\n    static_assert(same_as<const_sentinel_t<R>, const_sentinel_t<V>>);\r\n    static_assert(CanMemberCEnd<const R&> == (random_access_range<const V> && sized_range<const V>) );\r\n    if (!is_empty) {\r\n        same_as<const_sentinel_t<R>> auto i = r.cend();\r\n        if constexpr (bidirectional_range<R> && common_range<R>) {\r\n            assert(*prev(i) == *prev(cend(expected)));\r\n        }\r\n\r\n        if constexpr (random_access_range<const V> && sized_range<const V>) {\r\n            same_as<const_sentinel_t<const R>> auto i2 = as_const(r).cend();\r\n            if constexpr (bidirectional_range<const R> && common_range<const R>) {\r\n                assert(*prev(i2) == *prev(cend(expected)));\r\n            }\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    // Validate view_interface::data\r\n    static_assert(CanMemberData<R> == contiguous_range<V>);\r\n    static_assert(CanData<R&> == contiguous_range<V>);\r\n    static_assert(CanData<const R&> == (contiguous_range<const V> && sized_range<const V>) );\r\n    if constexpr (contiguous_range<V>) {\r\n        const same_as<remove_reference_t<ranges::range_reference_t<V>>*> auto ptr1 = r.data();\r\n        assert(to_address(ptr1) == to_address(r.begin()));\r\n\r\n        if constexpr (CanData<const R&>) {\r\n            const same_as<remove_reference_t<ranges::range_reference_t<const V>>*> auto ptr2 = as_const(r).data();\r\n            assert(to_address(ptr2) == to_address(as_const(r).begin()));\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::front and back\r\n    if (!is_empty) {\r\n        static_assert(CanMemberFront<R> == forward_range<V>);\r\n        if constexpr (forward_range<V>) {\r\n            assert(r.front() == *begin(expected));\r\n        }\r\n\r\n        static_assert(CanMemberFront<const R> == (random_access_range<const V> && sized_range<const V>) );\r\n        if constexpr (CanMemberFront<const R>) {\r\n            assert(as_const(r).front() == *begin(expected));\r\n        }\r\n\r\n        static_assert(CanMemberBack<R> == (bidirectional_range<R> && common_range<R>) );\r\n        if constexpr (CanMemberBack<R>) {\r\n            assert(r.back() == *prev(end(expected)));\r\n        }\r\n\r\n        static_assert(\r\n            CanMemberBack<const R> == (common_range<const V> && random_access_range<const V> && sized_range<const V>) );\r\n        if constexpr (CanMemberBack<const R>) {\r\n            assert(as_const(r).back() == *prev(end(expected)));\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::operator[]\r\n    static_assert(CanIndex<R> == random_access_range<V>);\r\n    static_assert(CanIndex<const R> == (random_access_range<const V> && sized_range<const V>) );\r\n    if (!is_empty) {\r\n        if constexpr (CanIndex<R>) {\r\n            assert(r[0] == *r.begin());\r\n        }\r\n\r\n        if constexpr (CanIndex<const R>) {\r\n            assert(as_const(r)[0] == *as_const(r).begin());\r\n        }\r\n    }\r\n\r\n    // Validate drop_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n    if constexpr (CanMemberBase<const R&> && forward_range<V>) {\r\n        same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b1.begin() == 0); // NB: depends on the test data\r\n            if constexpr (bidirectional_range<V> && common_range<V>) {\r\n                assert(*prev(b1.end()) == 7); // NB: depends on the test data\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate drop_view::base() && (NB: do this last since it leaves r moved-from)\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        same_as<V> auto b2 = move(r).base();\r\n        static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b2.begin() == 0); // NB: depends on the test data\r\n            if constexpr (bidirectional_range<V> && common_range<V>) {\r\n                assert(*prev(b2.end()) == 7); // NB: depends on the test data\r\n            }\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr int some_ints[]      = {0, 1, 2, 3, 4, 5, 6, 7};\r\nstatic constexpr int only_four_ints[] = {4, 5, 6, 7};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        R r{some_ints};\r\n        test_one(r, only_four_ints);\r\n\r\n        R empty_range{span<const int, 0>{}};\r\n        test_one(empty_range, span<const int, 0>{});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Sized IsSized, test::Common IsCommon>\r\nusing test_range =\r\n    test::range<Category, const int, IsSized, test::CanDifference{derived_from<Category, random_access_iterator_tag>},\r\n        IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n        test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nconstexpr void instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_in<instantiator, const int>();\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    // The view is sensitive to category, size, and commonality, but oblivious to differencing and proxyness.\r\n    using test::Common, test::Sized;\r\n\r\n    instantiator::call<test_range<input_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<input_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<input_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<input_iterator_tag, Sized::yes, Common::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::yes, Common::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::yes, Common::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::yes, Common::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::yes, Common::yes>>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\ntemplate <class Category, test::Sized IsSized, test::Common IsCommon>\r\nusing move_only_view = test::range<Category, const int, IsSized,\r\n    test::CanDifference{derived_from<Category, random_access_iterator_tag>}, IsCommon,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nconstexpr void move_only_test() {\r\n    using test::Common, test::Sized;\r\n    using input      = input_iterator_tag;\r\n    using fwd        = forward_iterator_tag;\r\n    using bidi       = bidirectional_iterator_tag;\r\n    using random     = random_access_iterator_tag;\r\n    using contiguous = contiguous_iterator_tag;\r\n\r\n    test_one(move_only_view<input, Sized::no, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<input, Sized::yes, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<fwd, Sized::no, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<fwd, Sized::yes, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<fwd, Sized::no, Common::yes>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<fwd, Sized::yes, Common::yes>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<bidi, Sized::no, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<bidi, Sized::yes, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<bidi, Sized::no, Common::yes>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<bidi, Sized::yes, Common::yes>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<random, Sized::no, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<random, Sized::yes, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<random, Sized::no, Common::yes>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<random, Sized::yes, Common::yes>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<contiguous, Sized::no, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<contiguous, Sized::yes, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<contiguous, Sized::no, Common::yes>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<contiguous, Sized::yes, Common::yes>{some_ints}, only_four_ints);\r\n}\r\n\r\nconstexpr void output_range_test() {\r\n    using R = test::range<output_iterator_tag, int, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n        test::CanCompare::no, test::ProxyRef::yes, test::CanView::yes, test::Copyability::move_only>;\r\n    int some_writable_ints[] = {0, 1, 2, 3};\r\n    static_assert(same_as<decltype(views::drop(R{some_writable_ints}, 2)), ranges::drop_view<R>>);\r\n    ranges::fill(R{some_writable_ints} | views::drop(2), 42);\r\n    assert(ranges::equal(some_writable_ints, initializer_list<int>{0, 1, 42, 42}));\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    { // ... copyable\r\n        // Test all of the \"reconstructible range\" types: span, empty_view, subrange, basic_string_view, iota_view\r\n        constexpr span s0{some_ints};\r\n        static_assert(test_one(s0, only_four_ints));\r\n        test_one(s0, only_four_ints);\r\n\r\n        constexpr span<const int> s1{some_ints};\r\n        static_assert(test_one(s1, only_four_ints));\r\n        test_one(s1, only_four_ints);\r\n\r\n        static_assert(test_one(ranges::subrange{some_ints}, only_four_ints));\r\n        test_one(ranges::subrange{some_ints}, only_four_ints);\r\n\r\n        static_assert(test_one(views::empty<int>, span<const int, 0>{}));\r\n        test_one(views::empty<int>, span<const int, 0>{});\r\n\r\n        static_assert(test_one(basic_string_view{ranges::begin(some_ints), ranges::end(some_ints)}, only_four_ints));\r\n        test_one(basic_string_view{ranges::begin(some_ints), ranges::end(some_ints)}, only_four_ints);\r\n\r\n        static_assert(test_one(ranges::iota_view{0, 8}, only_four_ints));\r\n        test_one(ranges::iota_view{0, 8}, only_four_ints);\r\n    }\r\n    // ... move-only\r\n    static_assert((move_only_test(), true));\r\n    move_only_test();\r\n\r\n    // Validate non-views\r\n    {\r\n        static_assert(test_one(some_ints, only_four_ints));\r\n        test_one(some_ints, only_four_ints);\r\n    }\r\n    {\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_one(vec, only_four_ints);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_one(lst, only_four_ints);\r\n    }\r\n\r\n    // Validate an output range\r\n    static_assert((output_range_test(), true));\r\n    output_range_test();\r\n\r\n    static_assert((instantiation_test(), true));\r\n    instantiation_test();\r\n\r\n    {\r\n        // Validate a view borrowed range\r\n        constexpr auto v =\r\n            views::iota(0ull, ranges::size(some_ints)) | views::transform([](auto i) { return some_ints[i]; });\r\n        static_assert(test_one(v, only_four_ints));\r\n        test_one(v, only_four_ints);\r\n    }\r\n\r\n    { // Validate that we can use something that is convertible to integral (GH-1957)\r\n        constexpr span s{some_ints};\r\n        auto r1 = s | views::drop(integral_constant<int, 4>{});\r\n        assert(ranges::equal(r1, only_four_ints));\r\n\r\n        auto r2 = s | views::drop(evil_convertible_to_difference{});\r\n        assert(ranges::equal(r2, only_four_ints));\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_drop_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_drop_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <ranges>\r\n\r\n#include <test_death.hpp>\r\nusing namespace std;\r\n\r\nconstexpr int some_ints[] = {0, 1, 2, 3};\r\n\r\nvoid test_constructor_negative_size() {\r\n    (void) views::drop(some_ints, -3); // Number of elements to drop must be non-negative\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_constructor_negative_size,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_drop_while/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_drop_while/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\n// Test a silly precomposed range adaptor pipeline\r\ntemplate <int X>\r\nconstexpr auto is_less_than = [](const auto& x) { return x < X; };\r\n\r\nusing Pred = remove_const_t<decltype(is_less_than<3>)>;\r\nstatic_assert(is_nothrow_copy_constructible_v<Pred> && is_nothrow_move_constructible_v<Pred>);\r\n\r\nconstexpr auto pipeline = views::drop_while(is_less_than<3>) | views::drop_while(is_less_than<3>)\r\n                        | views::drop_while(is_less_than<3>) | views::drop_while(is_less_than<3>);\r\n\r\ntemplate <class Rng, class V = views::all_t<Rng>>\r\nusing pipeline_t = ranges::drop_while_view<\r\n    ranges::drop_while_view<ranges::drop_while_view<ranges::drop_while_view<V, Pred>, Pred>, Pred>, Pred>;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewDropWhile = requires(Rng&& r) { views::drop_while(forward<Rng>(r), is_less_than<3>); };\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nconstexpr bool test_one(Rng&& rng, Expected&& expected) {\r\n    using ranges::drop_while_view, ranges::bidirectional_range, ranges::common_range, ranges::contiguous_range,\r\n        ranges::enable_borrowed_range, ranges::forward_range, ranges::iterator_t, ranges::prev,\r\n        ranges::random_access_range, ranges::borrowed_range;\r\n\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n\r\n    using V = views::all_t<Rng>;\r\n    using R = drop_while_view<V, Pred>;\r\n    static_assert(ranges::view<R>);\r\n    static_assert(ranges::input_range<R>);\r\n    static_assert(forward_range<R> == forward_range<Rng>);\r\n    static_assert(bidirectional_range<R> == bidirectional_range<Rng>);\r\n    static_assert(random_access_range<R> == random_access_range<Rng>);\r\n    static_assert(contiguous_range<R> == contiguous_range<Rng>);\r\n    static_assert(borrowed_range<R> == borrowed_range<V>);\r\n\r\n    // Validate range adaptor object and range adaptor closure\r\n    constexpr auto closure = views::drop_while(is_less_than<3>);\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewDropWhile<Rng&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewDropWhile<Rng&>) { // Validate lvalue\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::drop_while(rng, is_less_than<3>)), R>);\r\n        static_assert(noexcept(views::drop_while(rng, is_less_than<3>)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | closure), R>);\r\n        static_assert(noexcept(rng | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | pipeline), pipeline_t<Rng&>>);\r\n        static_assert(noexcept(rng | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewDropWhile<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::drop_while(as_const(rng), is_less_than<3>)), R>);\r\n        static_assert(noexcept(views::drop_while(as_const(rng), is_less_than<3>)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), R>);\r\n        static_assert(noexcept(as_const(rng) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), pipeline_t<const remove_reference_t<Rng>&>>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (!is_view) {\r\n        using RC                   = drop_while_view<ranges::ref_view<const remove_reference_t<Rng>>, Pred>;\r\n        constexpr bool is_noexcept = true;\r\n\r\n        static_assert(same_as<decltype(views::drop_while(as_const(rng), is_less_than<3>)), RC>);\r\n        static_assert(noexcept(views::drop_while(as_const(rng), is_less_than<3>)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), RC>);\r\n        static_assert(noexcept(as_const(rng) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), pipeline_t<const remove_reference_t<Rng>&>>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(CanViewDropWhile<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (is_view) {\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n        static_assert(same_as<decltype(views::drop_while(move(rng), is_less_than<3>)), R>);\r\n        static_assert(noexcept(views::drop_while(move(rng), is_less_than<3>)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | closure), R>);\r\n        static_assert(noexcept(move(rng) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), pipeline_t<remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (movable<remove_reference_t<Rng>>) {\r\n        using S                    = ranges::owning_view<remove_reference_t<Rng>>;\r\n        using RS                   = drop_while_view<S, Pred>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<remove_reference_t<Rng>>;\r\n\r\n        static_assert(same_as<decltype(views::drop_while(move(rng), is_less_than<3>)), RS>);\r\n        static_assert(noexcept(views::drop_while(move(rng), is_less_than<3>)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | closure), RS>);\r\n        static_assert(noexcept(move(rng) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), pipeline_t<remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewDropWhile<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::drop_while(move(as_const(rng)), is_less_than<3>)), R>);\r\n        static_assert(noexcept(views::drop_while(move(as_const(rng)), is_less_than<3>)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | closure), R>);\r\n        static_assert(noexcept(move(as_const(rng)) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | pipeline), pipeline_t<const remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(as_const(rng)) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // Validate deduction guide\r\n    same_as<R> auto r = drop_while_view{forward<Rng>(rng), is_less_than<3>};\r\n    assert(ranges::equal(r, expected));\r\n    if constexpr (forward_range<V>) {\r\n        // drop_while_view memoizes the first iterator, let's repeat a few times for coverage.\r\n        assert(ranges::equal(r, expected));\r\n        assert(ranges::equal(r, expected));\r\n        assert(ranges::equal(r, expected));\r\n    }\r\n\r\n    { // Validate drop_while_view::pred\r\n        [[maybe_unused]] same_as<Pred> auto pred_copy = as_const(r).pred();\r\n        static_assert(noexcept(as_const(r).pred()));\r\n    }\r\n\r\n    const bool is_empty = ranges::empty(expected);\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    static_assert(CanMemberEmpty<R> == forward_range<Rng>);\r\n    static_assert(CanBool<R> == CanEmpty<R>);\r\n    if constexpr (CanMemberEmpty<R>) {\r\n        assert(r.empty() == is_empty);\r\n        assert(static_cast<bool>(r) == !is_empty);\r\n    } else {\r\n        static_assert(CanEmpty<R> == CanSize<R>);\r\n        if constexpr (CanEmpty<R>) {\r\n            assert(ranges::empty(r) == is_empty);\r\n            assert(static_cast<bool>(r) == !is_empty);\r\n        }\r\n    }\r\n\r\n    static_assert(!CanEmpty<const R>);\r\n    static_assert(!CanBool<const R>);\r\n\r\n    // Validate drop_while_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        // Ditto \"let's make some extra calls because memoization\"\r\n        const same_as<iterator_t<R>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(*i == *begin(expected));\r\n            assert(*r.begin() == *begin(expected));\r\n            assert(*r.begin() == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2                              = r;\r\n            const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n                assert(*r2.begin() == *i2);\r\n                assert(*r2.begin() == *i2);\r\n            }\r\n        }\r\n\r\n        static_assert(!CanBegin<const R>);\r\n    }\r\n\r\n    // Validate drop_while_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    if (!is_empty) {\r\n        if constexpr (common_range<V>) {\r\n            same_as<iterator_t<R>> auto i = r.end();\r\n            if constexpr (bidirectional_range<V>) {\r\n                assert(*prev(i) == *prev(end(expected)));\r\n            }\r\n        } else {\r\n            [[maybe_unused]] same_as<ranges::sentinel_t<R>> auto s = r.end();\r\n        }\r\n\r\n        if constexpr (bidirectional_range<V> && common_range<V> && copyable<V>) {\r\n            auto r2 = r;\r\n            assert(*prev(r2.end()) == *prev(end(expected)));\r\n        }\r\n\r\n        static_assert(!CanEnd<const R>);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    using ranges::const_iterator_t, ranges::const_sentinel_t, ranges::cbegin, ranges::cend;\r\n\r\n    // Validate view_interface::cbegin\r\n    static_assert(CanMemberCBegin<R> == ranges::input_range<V>);\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        const same_as<const_iterator_t<R>> auto i = r.cbegin();\r\n        if (!is_empty) {\r\n            assert(*i == *cbegin(expected));\r\n            assert(*r.cbegin() == *cbegin(expected));\r\n        }\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2                                    = r;\r\n            const same_as<const_iterator_t<R>> auto i2 = r2.cbegin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n                assert(*r2.cbegin() == *i2);\r\n            }\r\n        }\r\n\r\n        static_assert(!CanCBegin<const R>);\r\n    }\r\n\r\n    // Validate view_interface::cend\r\n    static_assert(CanMemberCEnd<R> == ranges::input_range<V>);\r\n    if (!is_empty) {\r\n        if constexpr (common_range<V>) {\r\n            same_as<const_iterator_t<R>> auto i = r.cend();\r\n            if constexpr (bidirectional_range<V>) {\r\n                assert(*prev(i) == *prev(cend(expected)));\r\n            }\r\n        } else {\r\n            [[maybe_unused]] same_as<const_sentinel_t<R>> auto s = r.cend();\r\n        }\r\n\r\n        if constexpr (bidirectional_range<V> && common_range<V> && copyable<V>) {\r\n            auto r2 = r;\r\n            assert(*prev(r2.cend()) == *prev(cend(expected)));\r\n        }\r\n\r\n        static_assert(!CanCEnd<const R>);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    // Validate view_interface::data\r\n    static_assert(CanMemberData<R> == contiguous_range<V>);\r\n    static_assert(CanData<R&> == contiguous_range<V>);\r\n    if constexpr (contiguous_range<V>) {\r\n        const same_as<remove_reference_t<ranges::range_reference_t<V>>*> auto ptr1 = r.data();\r\n        assert(ptr1 == to_address(r.begin()));\r\n    }\r\n    static_assert(!CanData<const R&>);\r\n\r\n    // Validate view_interface::size\r\n    static_assert(CanMemberSize<R> == CanSize<Rng>);\r\n    if constexpr (CanMemberSize<R>) {\r\n        assert(r.size() == static_cast<decltype(r.size())>(ranges::size(expected)));\r\n    } else {\r\n        static_assert(!CanSize<R>);\r\n    }\r\n\r\n    // Validate view_interface::operator[]\r\n    static_assert(CanIndex<R> == random_access_range<V>);\r\n    if constexpr (CanIndex<R>) {\r\n        if (!is_empty) {\r\n            assert(r[0] == expected[0]);\r\n        }\r\n    }\r\n    static_assert(!CanIndex<const R>);\r\n\r\n    // Validate view_interface::front and back\r\n    static_assert(CanMemberFront<R> == forward_range<V>);\r\n    if constexpr (CanMemberFront<R>) {\r\n        if (!is_empty) {\r\n            assert(r.front() == *begin(expected));\r\n        }\r\n    }\r\n    static_assert(!CanMemberFront<const R>);\r\n\r\n    static_assert(CanMemberBack<R> == (bidirectional_range<R> && common_range<R>) );\r\n    if constexpr (CanMemberBack<R>) {\r\n        if (!is_empty) {\r\n            assert(r.back() == *prev(end(expected)));\r\n        }\r\n    }\r\n    static_assert(!CanMemberBack<const R>);\r\n\r\n    // Validate drop_while_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V> && forward_range<V>) {\r\n        same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b1.begin() == 0); // NB: depends on the test data\r\n            if constexpr (bidirectional_range<V> && common_range<V>) {\r\n                assert(*prev(b1.end()) == *prev(end(expected)));\r\n            }\r\n        }\r\n    }\r\n\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        same_as<V> auto b2 = move(r).base();\r\n        static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b2.begin() == 0); // NB: depends on the test data\r\n            if constexpr (bidirectional_range<V> && common_range<V>) {\r\n                assert(*prev(b2.end()) == *prev(end(expected)));\r\n            }\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\nstatic constexpr int some_ints[]               = {0, 1, 2, 3, 4, 3, 2, 1};\r\nstatic constexpr int expected_output[]         = {3, 4, 3, 2, 1};\r\nstatic constexpr int expected_output_reverse[] = {0, 1, 2, 3, 4, 3};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        R r{some_ints};\r\n        test_one(r, expected_output);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon>\r\nusing test_range = test::range<Category, const int, test::Sized::no,\r\n    test::CanDifference{derived_from<Category, random_access_iterator_tag>}, IsCommon,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nconstexpr void instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_in<instantiator, const int>();\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    // The view is sensitive to category and commonality, but oblivious to size, differencing, and proxyness.\r\n    using test::Common;\r\n\r\n    instantiator::call<test_range<input_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes>>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nint main() {\r\n    // Validate views\r\n    { // ... copyable\r\n        constexpr span<const int> s{some_ints};\r\n        static_assert(test_one(s, expected_output));\r\n        test_one(s, expected_output);\r\n    }\r\n    { // ... move-only\r\n        test_one(move_only_view<input_iterator_tag, test::Common::no>{some_ints}, expected_output);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, expected_output);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, expected_output);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, expected_output);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, expected_output);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, expected_output);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, expected_output);\r\n    }\r\n\r\n    // Validate non-views\r\n    {\r\n        static_assert(test_one(some_ints, expected_output));\r\n        test_one(some_ints, expected_output);\r\n    }\r\n    {\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_one(vec, expected_output);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_one(lst, expected_output);\r\n    }\r\n\r\n    // drop_while/reverse interaction test\r\n    {\r\n        auto dwr_pipe = views::drop_while(is_less_than<3>) | views::reverse;\r\n        auto rdw_pipe = views::reverse | views::drop_while(is_less_than<3>);\r\n\r\n        auto r0  = some_ints | dwr_pipe;\r\n        using R0 = decltype(r0);\r\n        static_assert(ranges::bidirectional_range<R0> && ranges::view<R0>);\r\n        assert(ranges::equal(r0, views::reverse(expected_output)));\r\n\r\n        auto r1  = some_ints | rdw_pipe;\r\n        using R1 = decltype(r1);\r\n        static_assert(ranges::bidirectional_range<R1> && ranges::view<R1>);\r\n        assert(ranges::equal(r1, views::reverse(expected_output_reverse)));\r\n    }\r\n\r\n    { // empty range\r\n        static_assert(test_one(span<const int, 0>{}, span<const int, 0>{}));\r\n        test_one(span<const int, 0>{}, span<const int, 0>{});\r\n    }\r\n\r\n    static_assert((instantiation_test(), true));\r\n    instantiation_test();\r\n\r\n    { // Validate guarantee that predicates are moved into the range adaptor closure, and into the view\r\n        // object from an rvalue closure\r\n        struct Fn {\r\n            Fn()     = default;\r\n            Fn(Fn&&) = default;\r\n            Fn(const Fn&) {\r\n                assert(false);\r\n            }\r\n            Fn& operator=(Fn&&) = default;\r\n\r\n            Fn& operator=(const Fn&) {\r\n                assert(false);\r\n                return *this;\r\n            }\r\n\r\n            bool operator()(int) const {\r\n                return true;\r\n            }\r\n        };\r\n\r\n        (void) views::drop_while(Fn{})(span<int>{});\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_drop_while_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_drop_while_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <ranges>\r\n#include <span>\r\n\r\n#include <test_death.hpp>\r\nusing namespace std;\r\n\r\nstruct test_predicate {\r\n    struct tag {};\r\n\r\n    test_predicate() = default;\r\n    test_predicate(const test_predicate&) {\r\n        throw tag{};\r\n    }\r\n    test_predicate& operator=(const test_predicate&) = delete;\r\n\r\n    constexpr bool operator()(int i) const {\r\n        return i == 42;\r\n    }\r\n};\r\n\r\nauto with_no_predicate() {\r\n    using DWV = decltype(ranges::drop_while_view{span<int, 0>{}, test_predicate{}});\r\n    DWV r;\r\n    try {\r\n        r = DWV{};\r\n    } catch (const test_predicate::tag&) {\r\n    }\r\n    return r;\r\n}\r\n\r\nvoid test_view_predicate() {\r\n    auto r = with_no_predicate();\r\n    (void) r.pred(); // drop_while_view has no predicate\r\n}\r\n\r\nvoid test_view_begin() {\r\n    auto r = with_no_predicate();\r\n    (void) r.begin(); // N4885 [range.drop.while.view] forbids calling begin on a drop_while_view with no predicate\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_view_predicate,\r\n        test_view_begin,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_elements/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_elements/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate views::keys and views::values\r\nstatic_assert(same_as<remove_const_t<decltype(views::keys)>, remove_const_t<decltype(views::elements<0>)>>);\r\nstatic_assert(same_as<remove_const_t<decltype(views::values)>, remove_const_t<decltype(views::elements<1>)>>);\r\n\r\nconstexpr auto pipeline = views::elements<0> | views::all;\r\n\r\ntemplate <class Rng, class V = views::all_t<Rng>>\r\nusing pipeline_t = ranges::elements_view<V, 0>;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewElements = requires(Rng&& r) { views::elements<0>(forward<Rng>(r)); };\r\n\r\nconstexpr P some_pairs[]        = {{0, -1}, {1, -2}, {2, -3}, {3, -4}, {4, -5}, {5, -6}, {6, -7}, {7, -8}};\r\nconstexpr int expected_keys[]   = {0, 1, 2, 3, 4, 5, 6, 7};\r\nconstexpr int expected_values[] = {-1, -2, -3, -4, -5, -6, -7, -8};\r\n\r\ntemplate <ranges::input_range Rng>\r\nconstexpr bool test_one(Rng&& rng) {\r\n    using ranges::elements_view, ranges::bidirectional_range, ranges::common_range, ranges::contiguous_range,\r\n        ranges::enable_borrowed_range, ranges::forward_range, ranges::input_range, ranges::iterator_t, ranges::prev,\r\n        ranges::random_access_range, ranges::range, ranges::range_reference_t, ranges::sentinel_t, ranges::sized_range,\r\n        ranges::borrowed_range;\r\n\r\n    using V = views::all_t<Rng>;\r\n    using R = elements_view<V, 0>;\r\n    static_assert(ranges::view<R>);\r\n    static_assert(input_range<R>);\r\n    static_assert(forward_range<R> == forward_range<Rng>);\r\n    static_assert(bidirectional_range<R> == bidirectional_range<Rng>);\r\n    static_assert(random_access_range<R> == random_access_range<Rng>);\r\n    static_assert(!contiguous_range<R>);\r\n    static_assert(borrowed_range<R> == borrowed_range<V>);\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewElements<Rng&>);\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n    { // Validate lvalue\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::elements<0>(rng)), R>);\r\n        static_assert(noexcept(views::elements<0>(rng)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | views::elements<0>), R>);\r\n        static_assert(noexcept(rng | views::elements<0>) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | pipeline), pipeline_t<Rng&>>);\r\n        static_assert(noexcept(rng | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewElements<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::elements<0>(as_const(rng))), R>);\r\n        static_assert(noexcept(views::elements<0>(as_const(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | views::elements<0>), R>);\r\n        static_assert(noexcept(as_const(rng) | views::elements<0>) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), pipeline_t<const remove_reference_t<Rng>&>>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (!is_view) {\r\n        using RC                   = elements_view<ranges::ref_view<const remove_reference_t<Rng>>, 0>;\r\n        constexpr bool is_noexcept = true;\r\n\r\n        static_assert(same_as<decltype(views::elements<0>(as_const(rng))), RC>);\r\n        static_assert(noexcept(views::elements<0>(as_const(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | views::elements<0>), RC>);\r\n        static_assert(noexcept(as_const(rng) | views::elements<0>) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), pipeline_t<const remove_reference_t<Rng>&>>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(CanViewElements<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (is_view) {\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n        static_assert(same_as<decltype(views::elements<0>(move(rng))), R>);\r\n        static_assert(noexcept(views::elements<0>(move(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | views::elements<0>), R>);\r\n        static_assert(noexcept(move(rng) | views::elements<0>) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), pipeline_t<remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (movable<remove_reference_t<Rng>>) {\r\n        using RS                   = elements_view<ranges::owning_view<remove_reference_t<Rng>>, 0>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::elements<0>(move(rng))), RS>);\r\n        static_assert(noexcept(views::elements<0>(move(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | views::elements<0>), RS>);\r\n        static_assert(noexcept(move(rng) | views::elements<0>) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), pipeline_t<remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewElements<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::elements<0>(move(as_const(rng)))), R>);\r\n        static_assert(noexcept(views::elements<0>(move(as_const(rng)))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | views::elements<0>), R>);\r\n        static_assert(noexcept(move(as_const(rng)) | views::elements<0>) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | pipeline), pipeline_t<const remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(as_const(rng)) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // Validate concepts are properly modeled\r\n    R r{forward<Rng>(rng)};\r\n    static_assert(ranges::view<R>);\r\n    static_assert(input_range<R>);\r\n    static_assert(forward_range<R> == forward_range<Rng>);\r\n    static_assert(bidirectional_range<R> == bidirectional_range<Rng>);\r\n    static_assert(random_access_range<R> == random_access_range<Rng>);\r\n    static_assert(!contiguous_range<R>);\r\n\r\n    // Validate elements_view::size\r\n    static_assert(CanMemberSize<R> == CanSize<V>);\r\n    static_assert(CanSize<R> == CanMemberSize<R>);\r\n    static_assert(CanMemberSize<const R> == CanSize<const V>);\r\n    static_assert(CanSize<const R> == CanMemberSize<const R>);\r\n    if constexpr (CanMemberSize<R>) {\r\n        assert(r.size() == static_cast<decltype(r.size())>(ranges::size(expected_keys)));\r\n        if constexpr (CanMemberSize<const R>) {\r\n            assert(as_const(r).size() == static_cast<decltype(r.size())>(ranges::size(expected_keys)));\r\n        }\r\n    }\r\n\r\n    const bool is_empty = ranges::empty(expected_keys);\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    static_assert(CanMemberEmpty<R> == (sized_range<Rng> || forward_range<Rng>) );\r\n    static_assert(CanBool<R> == CanEmpty<R>);\r\n    if constexpr (CanMemberEmpty<R>) {\r\n        assert(r.empty() == is_empty);\r\n        assert(static_cast<bool>(r) == !is_empty);\r\n    } else {\r\n        static_assert(CanEmpty<R> == CanSize<R>);\r\n        if constexpr (CanEmpty<R>) {\r\n            assert(ranges::empty(r) == is_empty);\r\n            assert(static_cast<bool>(r) == !is_empty);\r\n        }\r\n    }\r\n\r\n    static_assert(CanMemberEmpty<const R> == (sized_range<const Rng> || forward_range<const Rng>) );\r\n    static_assert(CanBool<const R> == CanEmpty<const R>);\r\n    if constexpr (CanMemberEmpty<const R>) {\r\n        assert(as_const(r).empty() == is_empty);\r\n        assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n    } else {\r\n        static_assert(CanEmpty<const R> == CanSize<const R>);\r\n        if constexpr (CanEmpty<const R>) {\r\n            assert(ranges::empty(as_const(r)) == is_empty);\r\n            assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n        }\r\n    }\r\n\r\n    // Validate content\r\n    assert(ranges::equal(r, expected_keys));\r\n\r\n    // Validate views::keys and views::values\r\n    static_assert(same_as<decltype(views::keys(rng)), R>);\r\n    static_assert(same_as<decltype(views::values(rng)), elements_view<V, 1>>);\r\n    if constexpr (forward_range<Rng> && is_lvalue_reference_v<Rng>) {\r\n        assert(ranges::equal(views::values(rng), expected_values));\r\n    }\r\n\r\n    // Validate elements_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    static_assert(CanBegin<const R&> == (range<const V>) );\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        const same_as<iterator_t<R>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(*i == *begin(expected_keys));\r\n        }\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2                              = r;\r\n            const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n\r\n        if constexpr (CanBegin<const R&>) {\r\n            const same_as<iterator_t<const R>> auto i3 = as_const(r).begin();\r\n            if (!is_empty) {\r\n                assert(*i3 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate elements_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    static_assert(CanEnd<const R&> == range<const V>);\r\n    if (!is_empty) {\r\n        same_as<sentinel_t<R>> auto i = r.end();\r\n        static_assert(common_range<R> == common_range<V>);\r\n        if constexpr (bidirectional_range<R> && common_range<R>) {\r\n            assert(*prev(i) == *prev(end(expected_keys)));\r\n        }\r\n\r\n        if constexpr (CanEnd<const R&>) {\r\n            same_as<sentinel_t<const R>> auto i2 = as_const(r).end();\r\n            static_assert(common_range<const R> == common_range<const V>);\r\n            if constexpr (bidirectional_range<const R> && common_range<const R>) {\r\n                assert(*prev(i2) == *prev(end(expected_keys)));\r\n            }\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    using ranges::const_iterator_t, ranges::const_sentinel_t, ranges::cbegin, ranges::cend;\r\n\r\n    // Validate view_interface::cbegin\r\n    static_assert(CanMemberCBegin<R>);\r\n    static_assert(CanMemberCBegin<const R&> == range<const V>);\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        const same_as<const_iterator_t<R>> auto i = r.cbegin();\r\n        if (!is_empty) {\r\n            assert(*i == *cbegin(expected_keys));\r\n        }\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2                                    = r;\r\n            const same_as<const_iterator_t<R>> auto i2 = r2.cbegin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n\r\n        if constexpr (CanCBegin<const R&>) {\r\n            const same_as<const_iterator_t<const R>> auto i3 = as_const(r).cbegin();\r\n            if (!is_empty) {\r\n                assert(*i3 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::cend\r\n    static_assert(CanMemberCEnd<R>);\r\n    static_assert(CanMemberCEnd<const R&> == range<const V>);\r\n    if (!is_empty) {\r\n        same_as<const_sentinel_t<R>> auto i = r.cend();\r\n        static_assert(common_range<R> == common_range<V>);\r\n        if constexpr (bidirectional_range<R> && common_range<R>) {\r\n            assert(*prev(i) == *prev(cend(expected_keys)));\r\n        }\r\n\r\n        if constexpr (CanCEnd<const R&>) {\r\n            same_as<const_sentinel_t<const R>> auto i2 = as_const(r).cend();\r\n            static_assert(common_range<const R> == common_range<const V>);\r\n            if constexpr (bidirectional_range<const R> && common_range<const R>) {\r\n                assert(*prev(i2) == *prev(cend(expected_keys)));\r\n            }\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    // Validate view_interface::data\r\n    static_assert(!CanData<R>);\r\n    static_assert(!CanData<const R>);\r\n\r\n    // Validate view_interface::front and back\r\n    if (!is_empty) {\r\n        static_assert(CanMemberFront<R> == forward_range<V>);\r\n        if constexpr (CanMemberFront<R>) {\r\n            assert(r.front() == *begin(expected_keys));\r\n        }\r\n\r\n        static_assert(CanMemberBack<R> == (bidirectional_range<V> && common_range<V>) );\r\n        if constexpr (CanMemberBack<R>) {\r\n            assert(r.back() == *prev(end(expected_keys)));\r\n        }\r\n\r\n        static_assert(CanMemberFront<const R> == (forward_range<const V>) );\r\n        if constexpr (CanMemberFront<const R>) {\r\n            assert(as_const(r).front() == *begin(expected_keys));\r\n        }\r\n\r\n        static_assert(CanMemberBack<const R> == (bidirectional_range<const V> && common_range<const V>) );\r\n        if constexpr (CanMemberBack<const R>) {\r\n            assert(as_const(r).back() == *prev(end(expected_keys)));\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::operator[]\r\n    if (!is_empty) {\r\n        static_assert(CanIndex<R> == random_access_range<V>);\r\n        if constexpr (CanIndex<R>) {\r\n            assert(r[0] == *r.begin());\r\n        }\r\n\r\n        static_assert(CanIndex<const R> == random_access_range<const V>);\r\n        if constexpr (CanIndex<const R>) {\r\n            assert(as_const(r)[0] == *as_const(r).begin());\r\n        }\r\n    }\r\n\r\n    // Validate elements_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V> && forward_range<V>) {\r\n        same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert((*b1.begin() == pair{0, -1})); // NB: depends on the test data\r\n            if constexpr (bidirectional_range<V> && common_range<V>) {\r\n                assert((*prev(b1.end()) == pair{7, -8})); // NB: depends on the test data\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate elements_view::base() && (NB: do this last since it leaves r moved-from)\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        same_as<V> auto b2 = move(r).base();\r\n        static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert((*b2.begin() == pair{0, -1})); // NB: depends on the test data\r\n            if constexpr (bidirectional_range<V> && common_range<V>) {\r\n                assert((*prev(b2.end()) == pair{7, -8})); // NB: depends on the test data\r\n            }\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        R r{some_pairs};\r\n        test_one(r);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Sized IsSized, test::Common IsCommon>\r\nusing test_range =\r\n    test::range<Category, const P, IsSized, test::CanDifference{derived_from<Category, random_access_iterator_tag>},\r\n        IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n        test::ProxyRef::no>;\r\n\r\nconstexpr void instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_in<instantiator, const P>();\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    // The view is sensitive to category, commonality, size, and differencing, but cannot handle proxies.\r\n    using test::Common, test::Sized;\r\n\r\n    instantiator::call<test_range<input_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<input_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<input_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<input_iterator_tag, Sized::yes, Common::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::yes, Common::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::yes, Common::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::yes, Common::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::yes, Common::yes>>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\n// GH-3014 \"<ranges>: list-initialization is misused\"\r\nvoid test_gh_3014() { // COMPILE-ONLY\r\n    struct FwdRange {\r\n        P* begin() {\r\n            return nullptr;\r\n        }\r\n\r\n        test::init_list_not_constructible_iterator<P> begin() const {\r\n            return nullptr;\r\n        }\r\n\r\n        unreachable_sentinel_t end() const {\r\n            return {};\r\n        }\r\n    };\r\n\r\n    auto r                                           = FwdRange{} | views::elements<0>;\r\n    [[maybe_unused]] decltype(as_const(r).begin()) i = r.begin(); // Check 'iterator(iterator<!Const> i)'\r\n}\r\n\r\nint main() {\r\n    { // Validate copyable views\r\n        constexpr span<const P> s{some_pairs};\r\n        static_assert(test_one(s));\r\n        test_one(s);\r\n    }\r\n\r\n    { // Validate non-views\r\n        static_assert(test_one(some_pairs));\r\n        test_one(some_pairs);\r\n\r\n        {\r\n            vector vec(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n            test_one(vec);\r\n        }\r\n        {\r\n            forward_list lst(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n            test_one(lst);\r\n        }\r\n\r\n        static_assert((instantiation_test(), true));\r\n        instantiation_test();\r\n    }\r\n\r\n    { // Validate a view borrowed range\r\n        constexpr auto v = views::iota(0ull, ranges::size(expected_keys))\r\n                         | views::transform([](auto i) { return make_pair(expected_keys[i], expected_values[i]); });\r\n        static_assert(test_one(v));\r\n        test_one(v);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_empty/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_empty/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <ranges>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\nstruct not_constructible {\r\n    not_constructible()  = delete;\r\n    ~not_constructible() = delete;\r\n};\r\n\r\ntemplate <class T>\r\nconstexpr bool test_one_type() {\r\n    // validate type properties\r\n    using R = ranges::empty_view<T>;\r\n    static_assert(ranges::view<R> && ranges::contiguous_range<R> && ranges::sized_range<R> && ranges::common_range<R>);\r\n    static_assert(ranges::borrowed_range<R>);\r\n    static_assert(same_as<const R, decltype(views::empty<T>)>);\r\n    constexpr auto& r = views::empty<T>;\r\n\r\n    // validate member size\r\n    static_assert(same_as<decltype(R::size()), size_t>);\r\n    static_assert(R::size() == 0);\r\n    static_assert(noexcept(R::size()));\r\n    static_assert(noexcept(ranges::size(r)));\r\n\r\n    // validate members begin, data, and end\r\n    static_assert(same_as<decltype(R::data()), T*>);\r\n    static_assert(R::data() == nullptr);\r\n    static_assert(noexcept(R::data()));\r\n    static_assert(noexcept(ranges::data(r)));\r\n\r\n    static_assert(same_as<decltype(R::begin()), T*>);\r\n    static_assert(R::begin() == nullptr);\r\n    static_assert(noexcept(R::begin()));\r\n    static_assert(noexcept(ranges::begin(r)));\r\n\r\n    static_assert(same_as<decltype(R::end()), T*>);\r\n    static_assert(R::end() == nullptr);\r\n    static_assert(noexcept(R::end()));\r\n    static_assert(noexcept(ranges::end(r)));\r\n\r\n    // validate member empty\r\n    static_assert(same_as<decltype(R::empty()), bool>);\r\n    static_assert(R::empty() == true);\r\n    static_assert(noexcept(R::empty()));\r\n    static_assert(noexcept(ranges::empty(r)));\r\n\r\n#if _HAS_CXX23\r\n    // validate members cbegin and cend inherited from view_interface\r\n    static_assert(same_as<decltype(r.cbegin()), const_iterator<T*>>);\r\n    static_assert(r.cbegin() == nullptr);\r\n\r\n    static_assert(same_as<decltype(r.cend()), const_iterator<T*>>);\r\n    static_assert(r.cend() == nullptr);\r\n#endif // _HAS_CXX23\r\n\r\n    // validate other members inherited from view_interface\r\n    assert(!r);\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(test_one_type<int>());\r\n    test_one_type<int>();\r\n    static_assert(test_one_type<string>());\r\n    test_one_type<string>();\r\n    static_assert(test_one_type<not_constructible>());\r\n    test_one_type<not_constructible>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_filter/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_filter/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\n// Test a silly precomposed range adaptor pipeline\r\nconstexpr auto is_even = [](const auto& x) { return x % 2 == 0; };\r\nusing Pred             = remove_const_t<decltype(is_even)>;\r\nstatic_assert(is_nothrow_copy_constructible_v<Pred> && is_nothrow_move_constructible_v<Pred>);\r\n\r\nconstexpr auto pipeline =\r\n    views::filter(is_even) | views::filter(is_even) | views::filter(is_even) | views::filter(is_even);\r\n\r\ntemplate <class Rng, class V = views::all_t<Rng>>\r\nusing pipeline_t =\r\n    ranges::filter_view<ranges::filter_view<ranges::filter_view<ranges::filter_view<V, Pred>, Pred>, Pred>, Pred>;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewFilter = requires(Rng&& r) { views::filter(forward<Rng>(r), is_even); };\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nconstexpr bool test_one(Rng&& rng, Expected&& expected) {\r\n    using ranges::filter_view, ranges::common_range, ranges::bidirectional_range, ranges::enable_borrowed_range,\r\n        ranges::forward_range, ranges::iterator_t, ranges::prev;\r\n\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n\r\n    using V = views::all_t<Rng>;\r\n    using F = filter_view<V, Pred>;\r\n    static_assert(ranges::view<F>);\r\n    static_assert(ranges::input_range<F>);\r\n    static_assert(forward_range<F> == forward_range<Rng>);\r\n    static_assert(bidirectional_range<F> == bidirectional_range<Rng>);\r\n    static_assert(!ranges::random_access_range<F>);\r\n    static_assert(!ranges::contiguous_range<F>);\r\n\r\n    // Validate range adaptor object and range adaptor closure\r\n    constexpr auto filter_even = views::filter(is_even);\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewFilter<Rng&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewFilter<Rng&>) {\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::filter(rng, is_even)), F>);\r\n        static_assert(noexcept(views::filter(rng, is_even)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | filter_even), F>);\r\n        static_assert(noexcept(rng | filter_even) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | pipeline), pipeline_t<Rng&>>);\r\n        static_assert(noexcept(rng | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewFilter<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::filter(as_const(rng), is_even)), F>);\r\n        static_assert(noexcept(views::filter(as_const(rng), is_even)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | filter_even), F>);\r\n        static_assert(noexcept(as_const(rng) | filter_even) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), pipeline_t<const remove_reference_t<Rng>&>>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (!is_view) {\r\n        using RC                   = filter_view<ranges::ref_view<const remove_reference_t<Rng>>, Pred>;\r\n        constexpr bool is_noexcept = true;\r\n\r\n        static_assert(same_as<decltype(views::filter(as_const(rng), is_even)), RC>);\r\n        static_assert(noexcept(views::filter(as_const(rng), is_even)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | filter_even), RC>);\r\n        static_assert(noexcept(as_const(rng) | filter_even) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), pipeline_t<const remove_reference_t<Rng>&>>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(CanViewFilter<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (is_view) {\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n        static_assert(same_as<decltype(views::filter(move(rng), is_even)), F>);\r\n        static_assert(noexcept(views::filter(move(rng), is_even)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | filter_even), F>);\r\n        static_assert(noexcept(move(rng) | filter_even) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), pipeline_t<remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (movable<remove_reference_t<Rng>>) {\r\n        using S                    = ranges::owning_view<remove_reference_t<Rng>>;\r\n        using RS                   = filter_view<S, Pred>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<remove_reference_t<Rng>>;\r\n\r\n        static_assert(same_as<decltype(views::filter(move(rng), is_even)), RS>);\r\n        static_assert(noexcept(views::filter(move(rng), is_even)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | filter_even), RS>);\r\n        static_assert(noexcept(move(rng) | filter_even) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), pipeline_t<remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewFilter<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::filter(move(as_const(rng)), is_even)), F>);\r\n        static_assert(noexcept(views::filter(move(as_const(rng)), is_even)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | filter_even), F>);\r\n        static_assert(noexcept(move(as_const(rng)) | filter_even) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | pipeline), pipeline_t<const remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(as_const(rng)) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // Validate deduction guide\r\n    same_as<F> auto r = filter_view{forward<Rng>(rng), is_even};\r\n    assert(ranges::equal(r, expected));\r\n    if constexpr (forward_range<V>) {\r\n        // filter_view memoizes the first iterator, let's repeat a few times for coverage.\r\n        assert(ranges::equal(r, expected));\r\n        assert(ranges::equal(r, expected));\r\n        assert(ranges::equal(r, expected));\r\n    }\r\n\r\n    { // Validate filter_view::pred\r\n        [[maybe_unused]] same_as<Pred> auto pred_copy = as_const(r).pred();\r\n        static_assert(noexcept(as_const(r).pred()));\r\n    }\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    const bool is_empty = ranges::empty(expected);\r\n    static_assert(CanMemberEmpty<F> == forward_range<V>);\r\n    static_assert(CanBool<F> == CanMemberEmpty<F>);\r\n    if constexpr (CanMemberEmpty<F>) {\r\n        assert(r.empty() == is_empty);\r\n        assert(static_cast<bool>(r) == !is_empty);\r\n    }\r\n    static_assert(!CanMemberEmpty<const F>);\r\n    static_assert(!CanBool<const F>);\r\n\r\n    // Validate filter_view::begin\r\n    static_assert(CanMemberBegin<F>);\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        // Ditto \"let's make some extra calls because memoization\"\r\n        const same_as<iterator_t<F>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(*i == *begin(expected));\r\n        }\r\n        assert(*r.begin() == *begin(expected));\r\n        assert(*r.begin() == *begin(expected));\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            auto r2                              = r;\r\n            const same_as<iterator_t<F>> auto i2 = r2.begin();\r\n            assert(*r2.begin() == *i2);\r\n            assert(*r2.begin() == *i2);\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n\r\n        static_assert(!CanBegin<const F>);\r\n    }\r\n\r\n    // Validate filter_view::end\r\n    static_assert(CanMemberEnd<F>);\r\n    if (!is_empty) {\r\n        if constexpr (common_range<V>) {\r\n            same_as<iterator_t<F>> auto i = r.end();\r\n            if constexpr (bidirectional_range<V>) {\r\n                assert(*prev(i) == *prev(end(expected)));\r\n            }\r\n        } else {\r\n            [[maybe_unused]] same_as<ranges::sentinel_t<F>> auto s = r.end();\r\n        }\r\n\r\n        if constexpr (bidirectional_range<V> && common_range<V> && copy_constructible<V>) {\r\n            auto r2 = r;\r\n            assert(*prev(r2.end()) == *prev(end(expected)));\r\n        }\r\n\r\n        static_assert(!CanEnd<const F>);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    using ranges::const_iterator_t, ranges::const_sentinel_t;\r\n\r\n    // Validate view_interface::cbegin\r\n    static_assert(CanMemberCBegin<F>);\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        // Ditto \"let's make some extra calls because memoization\"\r\n        const same_as<const_iterator_t<F>> auto ci = r.cbegin();\r\n        if (!is_empty) {\r\n            assert(*ci == *begin(expected));\r\n        }\r\n        assert(*r.cbegin() == *begin(expected));\r\n        assert(*r.cbegin() == *begin(expected));\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            auto r2                                     = r;\r\n            const same_as<const_iterator_t<F>> auto ci2 = r2.cbegin();\r\n            assert(*r2.cbegin() == *ci2);\r\n            assert(*r2.cbegin() == *ci2);\r\n            if (!is_empty) {\r\n                assert(*ci2 == *ci);\r\n            }\r\n        }\r\n\r\n        static_assert(!CanMemberCBegin<const F>);\r\n    }\r\n\r\n    // Validate view_interface::cend\r\n    static_assert(CanMemberCEnd<F>);\r\n    if (!is_empty) {\r\n        if constexpr (common_range<V>) {\r\n            same_as<const_iterator_t<F>> auto ci = r.cend();\r\n            if constexpr (bidirectional_range<V>) {\r\n                assert(*prev(ci) == *prev(end(expected)));\r\n            }\r\n        } else {\r\n            [[maybe_unused]] same_as<const_sentinel_t<F>> auto cs = r.cend();\r\n        }\r\n\r\n        if constexpr (bidirectional_range<V> && common_range<V> && copy_constructible<V>) {\r\n            auto r2 = r;\r\n            assert(*prev(r2.cend()) == *prev(end(expected)));\r\n        }\r\n\r\n        static_assert(!CanMemberCEnd<const F>);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    // Validate view_interface::data\r\n    static_assert(!CanData<F>);\r\n    static_assert(!CanData<const F>);\r\n\r\n    // Validate view_interface::size\r\n    static_assert(!CanSize<F>);\r\n    static_assert(!CanSize<const F>);\r\n\r\n    // Validate view_interface::operator[]\r\n    static_assert(!CanIndex<F>);\r\n    static_assert(!CanIndex<const F>);\r\n\r\n    if (!is_empty) {\r\n        // Validate view_interface::front and back\r\n        static_assert(CanMemberFront<F> == forward_range<V>);\r\n        if constexpr (forward_range<V>) {\r\n            assert(r.front() == *begin(expected));\r\n        }\r\n\r\n        static_assert(CanMemberBack<F> == (bidirectional_range<V> && common_range<V>) );\r\n        if constexpr (CanMemberBack<F>) {\r\n            assert(r.back() == *prev(end(expected)));\r\n        }\r\n\r\n        static_assert(!CanMemberFront<const F>);\r\n        static_assert(!CanMemberBack<const F>);\r\n    }\r\n\r\n    // Validate filter_view::base() const&\r\n    static_assert(CanMemberBase<const F&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V> && forward_range<V>) {\r\n        same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b1.begin() == *begin(expected));\r\n            if constexpr (bidirectional_range<V> && common_range<V>) {\r\n                assert(*prev(b1.end(), 2) == *prev(end(expected))); // NB: depends on the test data\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate filter_view::base() && (NB: do this last since it leaves r moved-from)\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        same_as<V> auto b2 = move(r).base();\r\n        static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b2.begin() == *begin(expected));\r\n            if constexpr (bidirectional_range<V> && common_range<V>) {\r\n                assert(*prev(b2.end(), 2) == *prev(end(expected))); // NB: depends on the test data\r\n            }\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr int some_ints[]      = {0, 1, 2, 3, 4, 5, 6, 7};\r\nstatic constexpr int only_even_ints[] = {0, 2, 4, 6};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        R r{some_ints};\r\n        test_one(r, only_even_ints);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon>\r\nusing test_range = test::range<Category, const int, test::Sized::no,\r\n    test::CanDifference{derived_from<Category, random_access_iterator_tag>}, IsCommon,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nconstexpr void instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_in<instantiator, const int>();\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    // The view is sensitive to category and commonality, but oblivious to size, differencing, and proxyness.\r\n    using test::Common;\r\n\r\n    instantiator::call<test_range<input_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes>>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\n// LWG-4112 \"has-arrow should require operator->() to be const-qualified\"\r\n\r\ntemplate <class T>\r\nconcept CanArrow = requires(T&& t) { forward<T>(t).operator->(); };\r\n\r\nenum class arrow_status : bool { bad, good };\r\n\r\ntemplate <arrow_status S>\r\nstruct arrowed_iterator {\r\n    using difference_type = ptrdiff_t;\r\n    using value_type      = int;\r\n\r\n    int& operator*() const;\r\n    int* operator->()\r\n        requires (S == arrow_status::bad);\r\n    int* operator->() const\r\n        requires (S == arrow_status::good);\r\n    arrowed_iterator& operator++();\r\n    arrowed_iterator operator++(int);\r\n    friend bool operator==(arrowed_iterator, arrowed_iterator);\r\n};\r\n\r\nstatic_assert(CanArrow<ranges::iterator_t<decltype(ranges::subrange<arrowed_iterator<arrow_status::good>>{} //\r\n                                                   | views::filter(is_even))>>);\r\nstatic_assert(!CanArrow<ranges::iterator_t<decltype(ranges::subrange<arrowed_iterator<arrow_status::bad>>{} //\r\n                                                    | views::filter(is_even))>>);\r\n\r\nint main() {\r\n    // Validate views\r\n    { // ... copyable\r\n        constexpr span<const int> s{some_ints};\r\n        static_assert(test_one(s, only_even_ints));\r\n        test_one(s, only_even_ints);\r\n    }\r\n    { // ... move-only\r\n        test_one(move_only_view<input_iterator_tag, test::Common::no>{some_ints}, only_even_ints);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, only_even_ints);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, only_even_ints);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, only_even_ints);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, only_even_ints);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, only_even_ints);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, only_even_ints);\r\n    }\r\n\r\n    // Validate non-views\r\n    {\r\n        static_assert(test_one(some_ints, only_even_ints));\r\n        test_one(some_ints, only_even_ints);\r\n    }\r\n    {\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_one(vec, only_even_ints);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_one(lst, only_even_ints);\r\n    }\r\n\r\n    // filter/reverse interaction test\r\n    {\r\n        auto fr_pipe = views::filter(is_even) | views::reverse;\r\n        auto rf_pipe = views::reverse | views::filter(is_even);\r\n\r\n        auto r0  = some_ints | fr_pipe;\r\n        using R0 = decltype(r0);\r\n        static_assert(ranges::bidirectional_range<R0> && ranges::view<R0>);\r\n        assert(ranges::equal(r0, views::reverse(only_even_ints)));\r\n\r\n        auto r1  = some_ints | rf_pipe;\r\n        using R1 = decltype(r1);\r\n        static_assert(ranges::bidirectional_range<R1> && ranges::view<R1>);\r\n        assert(ranges::equal(r1, views::reverse(only_even_ints)));\r\n\r\n        assert(ranges::equal(r0, r1));\r\n    }\r\n\r\n    static_assert((instantiation_test(), true));\r\n    instantiation_test();\r\n\r\n    { // Validate guarantee that predicates are moved into the range adaptor closure, and into\r\n      // the view object from an rvalue closure\r\n        struct Fn {\r\n            Fn()     = default;\r\n            Fn(Fn&&) = default;\r\n            Fn(const Fn&) {\r\n                assert(false);\r\n            }\r\n            Fn& operator=(Fn&&) = default;\r\n\r\n            Fn& operator=(const Fn&) {\r\n                assert(false);\r\n                return *this;\r\n            }\r\n\r\n            bool operator()(int) const {\r\n                return true;\r\n            }\r\n        };\r\n\r\n        (void) views::filter(Fn{})(span<int>{});\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_filter_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_filter_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <ranges>\r\n#include <vector>\r\n\r\n#include <test_death.hpp>\r\nusing namespace std;\r\n\r\nstatic int some_ints[] = {0, 1, 2, 3};\r\n\r\nstruct test_predicate {\r\n    struct tag {};\r\n\r\n    test_predicate() = default;\r\n    test_predicate(const test_predicate&) {\r\n        throw tag{};\r\n    }\r\n    test_predicate& operator=(const test_predicate&) = delete;\r\n\r\n    constexpr bool operator()(int i) const {\r\n        return i == 42;\r\n    }\r\n};\r\n\r\nauto with_no_predicate() {\r\n    using V = decltype(ranges::filter_view{some_ints, test_predicate{}});\r\n    V r{some_ints, {}};\r\n    try {\r\n        r = V{some_ints, {}};\r\n    } catch (const test_predicate::tag&) {\r\n    }\r\n    return r;\r\n}\r\n\r\nvoid test_view_predicate() {\r\n    auto r = with_no_predicate();\r\n    (void) r.pred(); // filter_view has no predicate\r\n}\r\n\r\nvoid test_view_begin() {\r\n    auto r = with_no_predicate();\r\n    (void) r.begin(); // N4861 [range.filter.view]/3 forbids calling begin on a filter_view that holds no predicate\r\n}\r\n\r\nconstexpr auto lambda = [x = 42](int) { return x == 42; };\r\nusing FV              = decltype(ranges::filter_view{some_ints, lambda});\r\n\r\nvoid test_constructor_wrong_range() {\r\n    vector<int> vec0{0, 1, 2, 3};\r\n    vector<int> vec1{4, 5, 6, 7};\r\n    auto r0            = views::filter(vec0, lambda);\r\n    using R            = decltype(r0);\r\n    same_as<R> auto r1 = views::filter(vec1, lambda);\r\n    ranges::iterator_t<R> i{r0, r1.begin().base()}; // vector iterators in range are from different containers\r\n}\r\n\r\nvoid test_operator_star_value_initialized_iterator() {\r\n    ranges::iterator_t<FV> i{};\r\n    (void) (*i); // cannot dereference value-initialized filter_view iterator\r\n}\r\n\r\nvoid test_operator_star_end_iterator() {\r\n    FV r{some_ints, lambda};\r\n    ranges::iterator_t<FV> i = ranges::next(r.begin(), r.end());\r\n    (void) (*i); // cannot dereference end filter_view iterator\r\n}\r\n\r\nvoid test_operator_arrow_value_initialized_iterator() {\r\n    ranges::iterator_t<FV> i{};\r\n    (void) (i.operator->()); // cannot dereference value-initialized filter_view iterator\r\n}\r\n\r\nvoid test_operator_arrow_end_iterator() {\r\n    FV r{some_ints, lambda};\r\n    ranges::iterator_t<FV> i = ranges::next(r.begin(), r.end());\r\n    (void) (i.operator->()); // cannot dereference end filter_view iterator\r\n}\r\n\r\nvoid test_operator_preincrement_value_initialized_iterator() {\r\n    ranges::iterator_t<FV> i{};\r\n    ++i; // cannot increment value-initialized filter_view iterator\r\n}\r\n\r\nvoid test_operator_preincrement_after_end() {\r\n    FV r{some_ints, lambda};\r\n    ranges::iterator_t<FV> i = ranges::next(r.begin(), r.end());\r\n    ++i; // cannot increment filter_view iterator past end\r\n}\r\n\r\nvoid test_operator_postincrement_value_initialized_iterator() {\r\n    ranges::iterator_t<FV> i{};\r\n    i++; // cannot increment value-initialized filter_view iterator\r\n}\r\n\r\nvoid test_operator_postincrement_after_end() {\r\n    FV r{some_ints, lambda};\r\n    ranges::iterator_t<FV> i = ranges::next(r.begin(), r.end());\r\n    i++; // cannot increment filter_view iterator past end\r\n}\r\n\r\nvoid test_operator_predecrement_before_begin() {\r\n    FV r{some_ints, lambda};\r\n    ranges::iterator_t<FV> i = r.begin();\r\n    --i; // cannot decrement filter_view iterator before begin\r\n}\r\n\r\nvoid test_operator_postdecrement_before_begin() {\r\n    FV r{some_ints, lambda};\r\n    ranges::iterator_t<FV> i = r.begin();\r\n    i--; // cannot decrement filter_view iterator before begin\r\n}\r\n\r\nvoid test_operator_equal_incompatible_different() {\r\n    FV r0{some_ints, lambda};\r\n    ranges::iterator_t<FV> i0 = r0.begin();\r\n    FV r1{some_ints, lambda};\r\n    ranges::iterator_t<FV> i1 = r1.begin();\r\n    (void) (i0 == i1); // cannot compare incompatible filter_view iterators for equality\r\n}\r\n\r\nvoid test_operator_equal_incompatible_value_initialized() {\r\n    FV r{some_ints, lambda};\r\n    ranges::iterator_t<FV> i = r.begin();\r\n    (void) (i == ranges::iterator_t<FV>{}); // cannot compare incompatible filter_view iterators for equality\r\n}\r\n\r\nvoid test_iter_move_value_initialized_iterator() {\r\n    ranges::iterator_t<FV> i{};\r\n    (void) ranges::iter_move(i); // cannot dereference value-initialized filter_view iterator\r\n}\r\n\r\nvoid test_iter_swap_value_initialized_iterators() {\r\n    ranges::iterator_t<FV> i0{};\r\n    ranges::iterator_t<FV> i1{};\r\n    (void) ranges::iter_swap(i0, i1); // cannot dereference value-initialized filter_view iterator\r\n}\r\n\r\nvoid test_iter_swap_value_initialized_iterator_left() {\r\n    ranges::iterator_t<FV> i0{};\r\n    FV r{some_ints, lambda};\r\n    ranges::iterator_t<FV> i1 = r.begin();\r\n    (void) ranges::iter_swap(i0, i1); // cannot dereference value-initialized filter_view iterator\r\n}\r\n\r\nvoid test_iter_swap_value_initialized_iterator_right() {\r\n    FV r{some_ints, lambda};\r\n    ranges::iterator_t<FV> i0 = r.begin();\r\n    ranges::iterator_t<FV> i1{};\r\n    (void) ranges::iter_swap(i0, i1); // cannot dereference value-initialized filter_view iterator\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_view_predicate,\r\n        test_view_begin,\r\n\r\n        test_constructor_wrong_range,\r\n        test_operator_star_value_initialized_iterator,\r\n        test_operator_star_end_iterator,\r\n        test_operator_arrow_value_initialized_iterator,\r\n        test_operator_arrow_end_iterator,\r\n        test_operator_preincrement_value_initialized_iterator,\r\n        test_operator_preincrement_after_end,\r\n        test_operator_postincrement_value_initialized_iterator,\r\n        test_operator_postincrement_after_end,\r\n        test_operator_predecrement_before_begin,\r\n        test_operator_postdecrement_before_begin,\r\n        test_operator_equal_incompatible_different,\r\n        test_operator_equal_incompatible_value_initialized,\r\n        test_iter_move_value_initialized_iterator,\r\n        test_iter_swap_value_initialized_iterators,\r\n        test_iter_swap_value_initialized_iterator_left,\r\n        test_iter_swap_value_initialized_iterator_right,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_filter_iterator/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_filter_iterator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <ranges>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\nconstexpr auto is_even = [](const auto& x) { return x % 2 == 0; };\r\nusing Pred             = remove_const_t<decltype(is_even)>;\r\n\r\nstruct iterator_instantiator {\r\n    template <input_iterator Iter>\r\n    static constexpr void call() {\r\n        // Pre: Iter is a specialization of test::iterator whose element type is const int\r\n        int mutable_ints[]   = {0, 1, 2, 3, 4, 5, 6, 7};\r\n        const auto make_view = [&] {\r\n            return views::filter(\r\n                ranges::subrange{Iter{mutable_ints}, test::sentinel<int>{ranges::end(mutable_ints)}}, is_even);\r\n        };\r\n        using R = decltype(make_view());\r\n        using I = ranges::iterator_t<R>;\r\n        using S = ranges::sentinel_t<R>;\r\n\r\n        // Validate nested types\r\n        static_assert(is_same_v<typename I::iterator_concept,\r\n            conditional_t<bidirectional_iterator<Iter>, bidirectional_iterator_tag,\r\n                conditional_t<forward_iterator<Iter>, forward_iterator_tag, input_iterator_tag>>>);\r\n\r\n        static_assert(_Has_member_iterator_category<I> == forward_iterator<Iter>);\r\n        if constexpr (forward_iterator<Iter>) {\r\n            using C = iterator_traits<Iter>::iterator_category;\r\n            static_assert(is_same_v<typename I::iterator_category,\r\n                conditional_t<derived_from<C, bidirectional_iterator_tag>, bidirectional_iterator_tag,\r\n                    conditional_t<derived_from<C, forward_iterator_tag>, forward_iterator_tag, input_iterator_tag>>>);\r\n        }\r\n\r\n        { // Validate iterator special member functions and base\r\n            static_assert(default_initializable<I> == default_initializable<Iter>);\r\n            if constexpr (default_initializable<Iter>) {\r\n                I defaultConstructed{};\r\n                assert(move(defaultConstructed).base().peek() == nullptr);\r\n                static_assert(is_nothrow_default_constructible_v<I>);\r\n            }\r\n\r\n            auto r0 = make_view();\r\n            I valueConstructed{r0, Iter{mutable_ints}};\r\n            static_assert(is_nothrow_constructible_v<I, R&, Iter>);\r\n\r\n            if constexpr (copyable<Iter>) {\r\n                I copyConstructed{valueConstructed};\r\n                assert(copyConstructed == valueConstructed);\r\n                static_assert(is_nothrow_copy_constructible_v<I>);\r\n\r\n                auto r1 = make_view();\r\n                I copyAssigned{r1, Iter{mutable_ints + 8}};\r\n                copyAssigned = copyConstructed;\r\n                assert(copyAssigned == valueConstructed);\r\n                static_assert(is_nothrow_copy_assignable_v<I>);\r\n                static_assert(same_as<const Iter&, decltype(as_const(copyConstructed).base())>);\r\n            }\r\n            assert(as_const(valueConstructed).base().peek() == mutable_ints);\r\n            assert(move(valueConstructed).base().peek() == mutable_ints);\r\n            static_assert(same_as<Iter, decltype(move(valueConstructed).base())>);\r\n        }\r\n\r\n        { // Validate sentinel constructors and base\r\n            S defaultConstructed{};\r\n            assert(defaultConstructed.base().peek() == nullptr);\r\n            static_assert(is_nothrow_default_constructible_v<S>);\r\n\r\n            auto r0 = make_view();\r\n            S valueConstructed{r0};\r\n            assert(valueConstructed.base().peek() == end(mutable_ints));\r\n\r\n            S copyConstructed{valueConstructed};\r\n            assert(copyConstructed.base().peek() == valueConstructed.base().peek());\r\n            static_assert(is_nothrow_copy_constructible_v<S>);\r\n\r\n            defaultConstructed = copyConstructed;\r\n            assert(defaultConstructed.base().peek() == valueConstructed.base().peek());\r\n            static_assert(is_nothrow_copy_assignable_v<S>);\r\n        }\r\n\r\n        { // Validate dereference ops\r\n            auto r0 = make_view();\r\n            auto i0 = r0.begin();\r\n            assert(*i0 == 0);\r\n            static_assert(noexcept(*i0));\r\n\r\n            assert(ranges::iter_move(i0) == 0); // NB: moving from int leaves it unchanged\r\n            static_assert(noexcept(ranges::iter_move(i0)) == noexcept(ranges::iter_move(declval<Iter>())));\r\n\r\n            if constexpr (forward_iterator<Iter>) {\r\n                auto i1 = ranges::next(i0);\r\n                ranges::iter_swap(i0, i1);\r\n                assert(mutable_ints[0] == 2);\r\n                assert(mutable_ints[2] == 0);\r\n                ranges::iter_swap(i1, i0);\r\n                assert(mutable_ints[0] == 0);\r\n                assert(mutable_ints[2] == 2);\r\n                static_assert(noexcept(ranges::iter_swap(i0, i1)));\r\n            }\r\n        }\r\n\r\n        { // Validate increments\r\n            auto r0 = make_view();\r\n            auto i0 = r0.begin();\r\n            assert(&++i0 == &i0);\r\n            assert(move(i0).base().peek() == mutable_ints + 2);\r\n\r\n            auto r1 = make_view();\r\n            auto i1 = r1.begin();\r\n            if constexpr (forward_iterator<Iter>) {\r\n                assert(i1++ == r1.begin());\r\n            } else {\r\n                i1++;\r\n            }\r\n            assert(move(i1).base().peek() == mutable_ints + 2);\r\n        }\r\n\r\n        if constexpr (bidirectional_iterator<Iter>) { // Validate decrements\r\n            auto r            = make_view();\r\n            const auto second = ranges::next(r.begin());\r\n            auto i            = second;\r\n            assert(&--i == &i);\r\n            assert(i.base().peek() == mutable_ints);\r\n\r\n            i = second;\r\n            assert(i-- == second);\r\n            assert(i.base().peek() == mutable_ints);\r\n        }\r\n\r\n        if constexpr (equality_comparable<Iter>) {\r\n            // Validate == and !=\r\n            auto r           = make_view();\r\n            const auto first = r.begin();\r\n            const auto last  = r.end();\r\n\r\n            assert(first == first);\r\n            assert(I{} == I{});\r\n\r\n            assert(!(first == last));\r\n            assert(!(last == first));\r\n\r\n            assert(!(first != first));\r\n            assert(!(I{} != I{}));\r\n\r\n            if constexpr (forward_iterator<Iter>) {\r\n                const auto final = ranges::next(first, last);\r\n                assert(!(first == final));\r\n                assert(first != final);\r\n\r\n                assert(last == final);\r\n                assert(final == last);\r\n\r\n                assert(!(last != final));\r\n                assert(!(final != last));\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::CanDifference Diff>\r\nusing test_iterator =\r\n    test::iterator<Category, int, Diff, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n        test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nconstexpr void iterator_instantiation_test() {\r\n    using test::CanDifference;\r\n\r\n    iterator_instantiator::call<test_iterator<input_iterator_tag, CanDifference::no>>();\r\n\r\n    iterator_instantiator::call<test_iterator<forward_iterator_tag, CanDifference::no>>();\r\n    iterator_instantiator::call<test_iterator<forward_iterator_tag, CanDifference::yes>>();\r\n\r\n    iterator_instantiator::call<test_iterator<bidirectional_iterator_tag, CanDifference::no>>();\r\n    iterator_instantiator::call<test_iterator<bidirectional_iterator_tag, CanDifference::yes>>();\r\n\r\n    iterator_instantiator::call<test_iterator<random_access_iterator_tag, CanDifference::yes>>();\r\n    iterator_instantiator::call<test_iterator<contiguous_iterator_tag, CanDifference::yes>>();\r\n}\r\n\r\nint main() {\r\n    static_assert((iterator_instantiation_test(), true));\r\n    iterator_instantiation_test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_iota/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_iota/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <iterator>\r\n#include <limits>\r\n#include <ranges>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nstatic_assert(ranges::_Advanceable<long long>);\r\n\r\ntemplate <class W, class B>\r\nconcept CanViewIota = requires(W w, B b) { views::iota(w, b); };\r\n\r\ntemplate <class W>\r\nconcept CanUnaryViewsIota = requires(W&& w) { views::iota(forward<W>(w)); };\r\n\r\ntemplate <class R>\r\nconcept CanSize = requires(R& r) { ranges::size(r); };\r\n\r\ntemplate <class R>\r\nconcept CanEmpty = requires(const R& r) { ranges::empty(r); };\r\n\r\ntemplate <class R>\r\nconcept CanMemberEmpty = requires(const R& r) {\r\n    { r.empty() } -> same_as<bool>;\r\n};\r\n\r\nstruct empty_type {};\r\n\r\ntemplate <class T>\r\nconstexpr void test_integral() {\r\n    constexpr T low        = 0;\r\n    constexpr T high       = 8;\r\n    constexpr T expected[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\n    {\r\n        // Validate bounded (both upper and lower bounds exist) iota_view\r\n        using R = ranges::iota_view<T, T>;\r\n\r\n        // Validate type properties\r\n        static_assert(same_as<ranges::range_value_t<R>, T>);\r\n        static_assert(same_as<ranges::range_reference_t<R>, T>);\r\n\r\n        static_assert(ranges::random_access_range<R>);\r\n        static_assert(!ranges::contiguous_range<R>);\r\n        static_assert(ranges::common_range<R>);\r\n\r\n        static_assert(ranges::view<R>);\r\n        static_assert(semiregular<R>);\r\n        static_assert(is_nothrow_copy_constructible_v<R>);\r\n        static_assert(is_nothrow_copy_assignable_v<R>);\r\n        static_assert(is_nothrow_move_constructible_v<R>);\r\n        static_assert(is_nothrow_move_assignable_v<R>);\r\n\r\n        if constexpr (sizeof(T) < sizeof(int)) {\r\n            static_assert(same_as<ranges::range_difference_t<R>, int>);\r\n        } else if constexpr (sizeof(T) < sizeof(long long)) {\r\n            static_assert(same_as<ranges::range_difference_t<R>, long long>);\r\n        } else {\r\n            static_assert(same_as<ranges::range_difference_t<R>, std::_Signed128>);\r\n        }\r\n\r\n        // iota_view is always a simple-view, i.e., const and non-const are always valid ranges with the same iterators:\r\n        static_assert(ranges::common_range<const R>);\r\n        static_assert(\r\n            same_as<ranges::iterator_t<const ranges::iota_view<T, T>>, ranges::iterator_t<ranges::iota_view<T, T>>>);\r\n\r\n        static_assert(same_as<ranges::range_reference_t<const R>, T>);\r\n        static_assert(same_as<ranges::range_difference_t<const R>, ranges::range_difference_t<R>>);\r\n\r\n        const same_as<R> auto rng = views::iota(low, high);\r\n        static_assert(noexcept(views::iota(low, high))); // strengthened\r\n\r\n        assert(ranges::equal(rng, expected));\r\n        static_assert(noexcept(rng.begin())); // strengthened\r\n        static_assert(noexcept(rng.end())); // strengthened\r\n\r\n        assert(rng.size() == 8u);\r\n        static_assert(noexcept(rng.size() == 8u)); // strengthened\r\n\r\n        using I = ranges::iterator_t<R>;\r\n        static_assert(same_as<typename I::iterator_concept, random_access_iterator_tag>);\r\n        if constexpr (integral<iter_difference_t<I>>) {\r\n            static_assert(same_as<typename iterator_traits<I>::iterator_category, input_iterator_tag>);\r\n        }\r\n\r\n        assert(I{} == I{T{0}});\r\n        static_assert(is_nothrow_default_constructible_v<I>);\r\n        assert(I{} == I{});\r\n        assert(!(I{} != I{}));\r\n        assert(!(I{} < I{}));\r\n        assert(!(I{} > I{}));\r\n        assert(I{} <= I{});\r\n        assert(I{} >= I{});\r\n        assert(I{} <=> I{} == 0);\r\n        assert(I{} - I{} == 0);\r\n\r\n        const I first  = rng.begin();\r\n        const I second = ranges::next(first);\r\n\r\n        assert(*first == T{0});\r\n        assert(*second == T{1});\r\n        static_assert(noexcept(*first));\r\n\r\n        assert(first == I{T{0}});\r\n        assert(second == I{T{1}});\r\n        static_assert(noexcept(noexcept(I{T{0}}))); // strengthened\r\n\r\n        {\r\n            I tmp = first;\r\n            static_assert(is_nothrow_copy_constructible_v<I>);\r\n\r\n            I i = move(tmp);\r\n            static_assert(is_nothrow_move_constructible_v<I>);\r\n\r\n            tmp = i;\r\n            static_assert(is_nothrow_copy_assignable_v<I>);\r\n\r\n            i = move(tmp);\r\n            static_assert(is_nothrow_move_assignable_v<I>);\r\n        }\r\n\r\n        assert(!(first == second));\r\n        assert(!(second == first));\r\n        static_assert(noexcept(first == second)); // strengthened\r\n\r\n        assert(first != second);\r\n        assert(second != first);\r\n        static_assert(noexcept(first != second)); // strengthened\r\n\r\n        assert(first < second);\r\n        assert(!(second < first));\r\n        static_assert(noexcept(first < second)); // strengthened\r\n\r\n        assert(!(first > second));\r\n        assert(second > first);\r\n        static_assert(noexcept(first > second)); // strengthened\r\n\r\n        assert(first <= second);\r\n        assert(!(second <= first));\r\n        static_assert(noexcept(first <= second)); // strengthened\r\n\r\n        assert(!(first >= second));\r\n        assert(second >= first);\r\n        static_assert(noexcept(first >= second)); // strengthened\r\n\r\n        assert((first <=> second) < 0);\r\n        assert((second <=> first) > 0);\r\n        static_assert(noexcept(first <=> second)); // strengthened\r\n\r\n        {\r\n            I i = first;\r\n\r\n            assert(&++i == &i);\r\n            assert(i == second);\r\n            static_assert(noexcept(++i)); // strengthened\r\n\r\n            i = first;\r\n\r\n            assert(i++ == first);\r\n            assert(i == second);\r\n            static_assert(noexcept(i++)); // strengthened\r\n\r\n            assert(&--i == &i);\r\n            assert(i == first);\r\n            static_assert(noexcept(--i)); // strengthened\r\n\r\n            i = second;\r\n\r\n            assert(i-- == second);\r\n            assert(i == first);\r\n            static_assert(noexcept(i--)); // strengthened\r\n\r\n            assert(i + 1 == second);\r\n            static_assert(noexcept(i + 1)); // strengthened\r\n\r\n            assert(1 + i == second);\r\n            static_assert(noexcept(1 + i)); // strengthened\r\n\r\n            assert(&(i += 1) == &i);\r\n            assert(i == second);\r\n            static_assert(noexcept(i += 1)); // strengthened\r\n            assert(i - 1 == first);\r\n            static_assert(noexcept(i - 1)); // strengthened\r\n\r\n            assert(&(i -= 1) == &i);\r\n            assert(i == first);\r\n            static_assert(noexcept(i -= 1)); // strengthened\r\n\r\n            assert(second - first == 1);\r\n            static_assert(noexcept(second - first)); // strengthened\r\n\r\n            assert(first[1] == *second);\r\n            assert(second[-1] == *first);\r\n            static_assert(noexcept(first[1])); // strengthened\r\n        }\r\n\r\n        const same_as<ranges::sentinel_t<R>> auto last = rng.end();\r\n        assert(!(first == last));\r\n        static_assert(noexcept(first == last)); // strengthened\r\n        assert(first != last);\r\n        static_assert(noexcept(first != last)); // strengthened\r\n        assert(last - first == 8);\r\n        static_assert(noexcept(last - first)); // strengthened\r\n\r\n#if _HAS_CXX23\r\n        const same_as<ranges::const_iterator_t<R>> auto cfirst = rng.cbegin();\r\n        assert(cfirst == first);\r\n        const same_as<ranges::const_sentinel_t<R>> auto clast = rng.cend();\r\n        assert(clast == last);\r\n        assert(clast - cfirst == 8);\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n    {\r\n        // Validate unbounded (upper bound is unreachable) iota_view\r\n        using R = ranges::iota_view<T>;\r\n        static_assert(same_as<ranges::range_value_t<R>, T>);\r\n        static_assert(same_as<ranges::range_reference_t<R>, T>);\r\n\r\n        static_assert(ranges::random_access_range<R>);\r\n        static_assert(!ranges::contiguous_range<R>);\r\n        static_assert(!ranges::common_range<R>);\r\n        static_assert(same_as<ranges::sentinel_t<ranges::iota_view<T>>, unreachable_sentinel_t>);\r\n\r\n        // Bounded and unbounded iota_view have the same iterator type, however:\r\n        static_assert(same_as<ranges::iterator_t<ranges::iota_view<T, T>>, ranges::iterator_t<ranges::iota_view<T>>>);\r\n\r\n        if constexpr (sizeof(T) < sizeof(int)) {\r\n            static_assert(same_as<ranges::range_difference_t<R>, int>);\r\n        } else if constexpr (sizeof(T) < sizeof(long long)) {\r\n            static_assert(same_as<ranges::range_difference_t<R>, long long>);\r\n        } else {\r\n            static_assert(same_as<ranges::range_difference_t<R>, std::_Signed128>);\r\n        }\r\n\r\n        {\r\n            const same_as<R> auto rng = views::iota(low);\r\n\r\n            auto i = low;\r\n            for (const auto& e : rng) {\r\n                assert(e == i);\r\n                if (++i == high) {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        static_assert(!CanSize<ranges::iota_view<T>>);\r\n\r\n#if _HAS_CXX23\r\n        {\r\n            const same_as<R> auto rng = views::iota(low);\r\n            const ranges::subrange crng{rng.cbegin(), rng.cend()};\r\n\r\n            auto i = low;\r\n            for (const auto& e : crng) {\r\n                assert(e == i);\r\n                if (++i == high) {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n#endif // _HAS_CXX23\r\n    }\r\n}\r\n\r\ntemplate <class W>\r\nconstexpr void test_one_difference() {\r\n    ranges::iota_view r{numeric_limits<W>::min(), numeric_limits<W>::max()};\r\n    using Diff = conditional_t<sizeof(W) >= sizeof(long long), _Signed128,\r\n        conditional_t<sizeof(W) >= sizeof(int), long long, int>>;\r\n    static_assert(same_as<decltype(r.end() - r.begin()), Diff>);\r\n    static_assert(noexcept(r.end() - r.begin()));\r\n    constexpr auto n = (Diff{1} << (numeric_limits<W>::digits + (signed_integral<W> ? 1 : 0))) - 1;\r\n    assert(r.end() - r.begin() == n); // left > right\r\n    assert(r.begin() - r.end() == -n); // right > left\r\n}\r\n\r\nconstexpr bool test_difference() {\r\n    // Ensure we have full coverage of all branches in `operator-(i, s)`\r\n\r\n    // signed integer-like, sizeof(W) < sizeof(int)\r\n    test_one_difference<signed char>();\r\n    test_one_difference<short>();\r\n\r\n    // unsigned integer-like, sizeof(W) < sizeof(int)\r\n    test_one_difference<unsigned char>();\r\n    test_one_difference<unsigned short>();\r\n\r\n    // signed integer-like, sizeof(int) <= sizeof(W) < sizeof(long long)\r\n    test_one_difference<int>();\r\n    test_one_difference<long>();\r\n\r\n    // unsigned integer-like, sizeof(int) <= sizeof(W) < sizeof(long long)\r\n    test_one_difference<unsigned int>();\r\n    test_one_difference<unsigned long>();\r\n\r\n    // signed integer-like, sizeof(long long) <= sizeof(W)\r\n    test_one_difference<long long>();\r\n\r\n    // unsigned integer-like, sizeof(long long) <= sizeof(W)\r\n    test_one_difference<unsigned long long>();\r\n\r\n    // non-integer-like\r\n    {\r\n        using Diff       = ptrdiff_t;\r\n        constexpr Diff n = 128 * 1024;\r\n        char* some_chars = new char[n];\r\n        ranges::iota_view r{some_chars + 0, some_chars + n};\r\n        static_assert(same_as<decltype(r.end() - r.begin()), Diff>);\r\n        static_assert(noexcept(r.end() - r.begin()));\r\n        assert(r.end() - r.begin() == n); // left > right\r\n        assert(r.begin() - r.end() == -n); // right > left\r\n        delete[] some_chars;\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_gh_3025() {\r\n    // GH-3025 <iterator>: ranges::prev maybe ill-formed in debug mode\r\n    auto r  = views::iota(0ull, 5ull);\r\n    auto it = r.end();\r\n    auto pr = ranges::prev(it, 3);\r\n    assert(*pr == 2ull);\r\n\r\n    return true;\r\n}\r\n\r\n// LWG-4096 \"views::iota(views::iota(0)) should be rejected\"\r\nstatic_assert(CanUnaryViewsIota<int>);\r\nstatic_assert(CanUnaryViewsIota<const char*>);\r\nstatic_assert(CanUnaryViewsIota<ranges::iterator_t<ranges::iota_view<long long>>>);\r\nstatic_assert(!CanUnaryViewsIota<ranges::iota_view<int>>);\r\nstatic_assert(!CanUnaryViewsIota<ranges::iota_view<const char*>>);\r\nstatic_assert(!CanUnaryViewsIota<ranges::iota_view<ranges::iterator_t<ranges::iota_view<long long>>>>);\r\nstatic_assert(!CanUnaryViewsIota<ranges::iota_view<int, int>>);\r\nstatic_assert(!CanUnaryViewsIota<ranges::iota_view<const char*, const char*>>);\r\nstatic_assert(!CanUnaryViewsIota<ranges::iota_view<ranges::iterator_t<ranges::iota_view<long long>>,\r\n        ranges::iterator_t<ranges::iota_view<long long>>>>);\r\n\r\nint main() {\r\n    // Validate standard signed integer types\r\n    static_assert((test_integral<signed char>(), true));\r\n    test_integral<signed char>();\r\n    static_assert((test_integral<short>(), true));\r\n    test_integral<short>();\r\n    static_assert((test_integral<int>(), true));\r\n    test_integral<int>();\r\n    static_assert((test_integral<long>(), true));\r\n    test_integral<long>();\r\n    static_assert((test_integral<long long>(), true));\r\n    test_integral<long long>();\r\n\r\n    // Validate standard unsigned integer types\r\n    static_assert((test_integral<unsigned char>(), true));\r\n    test_integral<unsigned char>();\r\n    static_assert((test_integral<unsigned short>(), true));\r\n    test_integral<unsigned short>();\r\n    static_assert((test_integral<unsigned int>(), true));\r\n    test_integral<unsigned int>();\r\n    static_assert((test_integral<unsigned long>(), true));\r\n    test_integral<unsigned long>();\r\n    static_assert((test_integral<unsigned long long>(), true));\r\n    test_integral<unsigned long long>();\r\n\r\n    // Validate other integer types\r\n    static_assert(!CanViewIota<bool, bool>);\r\n    static_assert((test_integral<char>(), true));\r\n    test_integral<char>();\r\n    static_assert((test_integral<wchar_t>(), true));\r\n    test_integral<wchar_t>();\r\n#ifdef __cpp_char8_t\r\n    static_assert((test_integral<char8_t>(), true));\r\n    test_integral<char8_t>();\r\n#endif // __cpp_char8_t\r\n    static_assert((test_integral<char16_t>(), true));\r\n    test_integral<char16_t>();\r\n    static_assert((test_integral<char32_t>(), true));\r\n    test_integral<char32_t>();\r\n\r\n    // Some non-integer coverage:\r\n    {\r\n        // Pointers\r\n        empty_type objects[] = {{}, {}, {}};\r\n        const auto address   = [](auto& x) { return &x; };\r\n        assert(ranges::equal(\r\n            views::iota(begin(as_const(objects)), end(objects)), objects, ranges::equal_to{}, identity{}, address));\r\n        assert(ranges::equal(\r\n            views::iota(begin(objects), end(as_const(objects))), objects, ranges::equal_to{}, identity{}, address));\r\n\r\n        using FirstConstIota = decltype(views::iota(begin(as_const(objects)), end(objects)));\r\n        static_assert(CanEmpty<FirstConstIota>);\r\n        static_assert(CanMemberEmpty<FirstConstIota>);\r\n        static_assert(noexcept(declval<const FirstConstIota&>().empty())); // strengthened\r\n\r\n        using SecondConstIota = decltype(views::iota(begin(objects), end(as_const(objects))));\r\n        static_assert(CanEmpty<SecondConstIota>);\r\n        static_assert(CanMemberEmpty<SecondConstIota>);\r\n        static_assert(noexcept(declval<const SecondConstIota&>().empty())); // strengthened\r\n    }\r\n    {\r\n        // Iterator and sentinel of a non-common range\r\n        const int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n        const int even_ints[] = {0, 2, 4, 6};\r\n\r\n        const auto even  = [](int x) { return x % 2 == 0; };\r\n        const auto deref = [](auto x) -> decltype(auto) { return *x; };\r\n\r\n        auto f = some_ints | views::filter(even);\r\n        auto r = views::iota(ranges::begin(f), ranges::end(f));\r\n\r\n        assert(ranges::equal(r, even_ints, ranges::equal_to{}, deref));\r\n\r\n        using FilteredIota = decltype(r);\r\n        static_assert(CanEmpty<FilteredIota>);\r\n        static_assert(CanMemberEmpty<FilteredIota>);\r\n    }\r\n    // LWG-4001 iota_view should provide empty\r\n    {\r\n        using BackInsertingIota = decltype(views::iota(back_inserter(declval<vector<int>&>())));\r\n        static_assert(CanEmpty<BackInsertingIota>);\r\n        static_assert(CanMemberEmpty<BackInsertingIota>);\r\n        static_assert(noexcept(declval<const BackInsertingIota&>().empty())); // strengthened\r\n\r\n        constexpr auto test_back_inserting_iota_nonempty = [] {\r\n            vector<int> v;\r\n            auto vw = views::iota(back_inserter(v));\r\n            return !vw.empty();\r\n        };\r\n        assert(test_back_inserting_iota_nonempty());\r\n        static_assert(test_back_inserting_iota_nonempty());\r\n    }\r\n\r\n    test_difference();\r\n    static_assert(test_difference());\r\n\r\n    test_gh_3025();\r\n    static_assert(test_gh_3025());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_iota_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_iota_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <ranges>\r\n#include <vector>\r\n\r\n#include <test_death.hpp>\r\nusing namespace std;\r\n\r\ntemplate <class I>\r\nvoid test_misordered_start_bound_int() {\r\n    ranges::iota_view{I{42}, I{1}};\r\n}\r\n\r\ntemplate <class I>\r\nvoid test_misordered_iterator_sentinel_int() {\r\n    ranges::iota_view iv{I{1}, I{42}};\r\n    decltype(iv){iv.end(), iv.begin()};\r\n}\r\n\r\ntemplate <class UI>\r\nvoid test_misordered_start_bound_uint_value_init() {\r\n    ranges::iota_view<UI, UI>{UI{42}};\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_misordered_start_bound_ptr() {\r\n    T arr[1]{};\r\n    ranges::iota_view{arr + 1, arr + 0};\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_misordered_iterator_sentinel_ptr() {\r\n    T arr[1]{};\r\n    ranges::iota_view iv{arr + 0, arr + 1};\r\n    decltype(iv){iv.end(), iv.begin()};\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_misordered_start_bound_vector_iter() {\r\n    vector<T> vec(1);\r\n    ranges::iota_view{vec.end(), vec.begin()};\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_misordered_iterator_sentinel_vector_iter() {\r\n    vector<T> vec(1);\r\n    ranges::iota_view iv{vec.begin(), vec.end()};\r\n    decltype(iv){iv.end(), iv.begin()};\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    struct S {};\r\n\r\n    exec.add_death_tests({\r\n        test_misordered_start_bound_int<signed char>,\r\n        test_misordered_start_bound_int<unsigned char>,\r\n        test_misordered_start_bound_int<short>,\r\n        test_misordered_start_bound_int<unsigned short>,\r\n        test_misordered_start_bound_int<int>,\r\n        test_misordered_start_bound_int<unsigned int>,\r\n        test_misordered_start_bound_int<long>,\r\n        test_misordered_start_bound_int<unsigned long>,\r\n        test_misordered_start_bound_int<long long>,\r\n        test_misordered_start_bound_int<unsigned long long>,\r\n\r\n        test_misordered_start_bound_int<char>,\r\n#ifdef __cpp_char8_t\r\n        test_misordered_start_bound_int<char8_t>,\r\n#endif // __cpp_char8_t\r\n        test_misordered_start_bound_int<char16_t>,\r\n        test_misordered_start_bound_int<char32_t>,\r\n        test_misordered_start_bound_int<wchar_t>,\r\n\r\n        test_misordered_iterator_sentinel_int<signed char>,\r\n        test_misordered_iterator_sentinel_int<unsigned char>,\r\n        test_misordered_iterator_sentinel_int<short>,\r\n        test_misordered_iterator_sentinel_int<unsigned short>,\r\n        test_misordered_iterator_sentinel_int<int>,\r\n        test_misordered_iterator_sentinel_int<unsigned int>,\r\n        test_misordered_iterator_sentinel_int<long>,\r\n        test_misordered_iterator_sentinel_int<unsigned long>,\r\n        test_misordered_iterator_sentinel_int<long long>,\r\n        test_misordered_iterator_sentinel_int<unsigned long long>,\r\n\r\n        test_misordered_iterator_sentinel_int<char>,\r\n#ifdef __cpp_char8_t\r\n        test_misordered_iterator_sentinel_int<char8_t>,\r\n#endif // __cpp_char8_t\r\n        test_misordered_iterator_sentinel_int<char16_t>,\r\n        test_misordered_iterator_sentinel_int<char32_t>,\r\n        test_misordered_iterator_sentinel_int<wchar_t>,\r\n\r\n        test_misordered_start_bound_uint_value_init<unsigned char>,\r\n        test_misordered_start_bound_uint_value_init<unsigned short>,\r\n        test_misordered_start_bound_uint_value_init<unsigned int>,\r\n        test_misordered_start_bound_uint_value_init<unsigned long>,\r\n        test_misordered_start_bound_uint_value_init<unsigned long long>,\r\n#ifdef __cpp_char8_t\r\n        test_misordered_start_bound_uint_value_init<char8_t>,\r\n#endif // __cpp_char8_t\r\n        test_misordered_start_bound_uint_value_init<char16_t>,\r\n        test_misordered_start_bound_uint_value_init<char32_t>,\r\n        test_misordered_start_bound_uint_value_init<wchar_t>,\r\n\r\n        test_misordered_start_bound_ptr<char>,\r\n        test_misordered_start_bound_ptr<int>,\r\n        test_misordered_start_bound_ptr<S>,\r\n\r\n        test_misordered_start_bound_vector_iter<char>,\r\n        test_misordered_start_bound_vector_iter<int>,\r\n        test_misordered_start_bound_vector_iter<S>,\r\n\r\n        test_misordered_iterator_sentinel_ptr<char>,\r\n        test_misordered_iterator_sentinel_ptr<int>,\r\n        test_misordered_iterator_sentinel_ptr<S>,\r\n\r\n        test_misordered_iterator_sentinel_vector_iter<char>,\r\n        test_misordered_iterator_sentinel_vector_iter<int>,\r\n        test_misordered_iterator_sentinel_vector_iter<S>,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_join/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_join/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <forward_list>\r\n#include <list>\r\n#include <ranges>\r\n#include <span>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewJoin = requires(Rng&& r) { views::join(forward<Rng>(r)); };\r\n\r\ntemplate <ranges::input_range Outer, ranges::random_access_range Expected>\r\nconstexpr bool test_one(Outer&& rng, Expected&& expected) {\r\n    using ranges::join_view, ranges::begin, ranges::end, ranges::next, ranges::prev, ranges::input_range,\r\n        ranges::forward_range, ranges::bidirectional_range, ranges::common_range, ranges::borrowed_range,\r\n        ranges::iterator_t, ranges::range_value_t, ranges::range_reference_t;\r\n\r\n    using Inner                     = range_value_t<Outer>;\r\n    constexpr bool deref_is_glvalue = is_reference_v<range_reference_t<Outer>>;\r\n\r\n    constexpr bool can_test = ranges::viewable_range<Outer> && input_range<range_reference_t<Outer>>;\r\n\r\n    if constexpr (can_test) {\r\n        constexpr bool is_view = ranges::view<remove_cvref_t<Outer>>;\r\n\r\n        // Validate range adapter object\r\n        // ...with lvalue argument\r\n        static_assert(CanViewJoin<Outer&> == (!is_view || copy_constructible<remove_cvref_t<Outer>>) );\r\n        if constexpr (CanViewJoin<Outer&>) {\r\n            using JV                   = join_view<views::all_t<Outer&>>;\r\n            constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<remove_cvref_t<Outer>>;\r\n\r\n            static_assert(same_as<decltype(views::join(rng)), JV>);\r\n            static_assert(noexcept(views::join(rng)) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(rng | views::join), JV>);\r\n            static_assert(noexcept(rng | views::join) == is_noexcept);\r\n        }\r\n\r\n        // ... with const lvalue argument\r\n        static_assert(\r\n            CanViewJoin<const remove_reference_t<Outer>&> == (!is_view || copy_constructible<remove_cvref_t<Outer>>) );\r\n        if constexpr (is_view && copy_constructible<remove_cvref_t<Outer>>) {\r\n            using JV                   = join_view<views::all_t<const remove_reference_t<Outer>&>>;\r\n            constexpr bool is_noexcept = is_nothrow_copy_constructible_v<remove_cvref_t<Outer>>;\r\n\r\n            static_assert(same_as<decltype(views::join(as_const(rng))), JV>);\r\n            static_assert(noexcept(views::join(as_const(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | views::join), JV>);\r\n            static_assert(noexcept(as_const(rng) | views::join) == is_noexcept);\r\n        } else if constexpr (!is_view) {\r\n            using JV                   = join_view<ranges::ref_view<const remove_reference_t<Outer>>>;\r\n            constexpr bool is_noexcept = true;\r\n\r\n            static_assert(same_as<decltype(views::join(as_const(rng))), JV>);\r\n            static_assert(noexcept(views::join(as_const(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | views::join), JV>);\r\n            static_assert(noexcept(as_const(rng) | views::join) == is_noexcept);\r\n        }\r\n\r\n        // ... with rvalue argument\r\n        static_assert(CanViewJoin<remove_reference_t<Outer>> == (is_view || movable<remove_reference_t<Outer>>) );\r\n        if constexpr (is_view) {\r\n            using JV                   = join_view<views::all_t<remove_reference_t<Outer>>>;\r\n            constexpr bool is_noexcept = is_nothrow_move_constructible_v<remove_reference_t<Outer>>;\r\n\r\n            static_assert(same_as<decltype(views::join(move(rng))), JV>);\r\n            static_assert(noexcept(views::join(move(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(rng) | views::join), JV>);\r\n            static_assert(noexcept(move(rng) | views::join) == is_noexcept);\r\n        } else if constexpr (movable<remove_reference_t<Outer>>) {\r\n            using JV                   = join_view<ranges::owning_view<remove_reference_t<Outer>>>;\r\n            constexpr bool is_noexcept = is_nothrow_move_constructible_v<remove_reference_t<Outer>>;\r\n\r\n            static_assert(same_as<decltype(views::join(move(rng))), JV>);\r\n            static_assert(noexcept(views::join(move(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(rng) | views::join), JV>);\r\n            static_assert(noexcept(move(rng) | views::join) == is_noexcept);\r\n        }\r\n\r\n        // ... with const rvalue argument\r\n        static_assert(\r\n            CanViewJoin<const remove_reference_t<Outer>> == (is_view && copy_constructible<remove_cvref_t<Outer>>) );\r\n        if constexpr (is_view && copy_constructible<remove_cvref_t<Outer>>) {\r\n            using JV                   = join_view<remove_cvref_t<Outer>>;\r\n            constexpr bool is_noexcept = is_nothrow_copy_constructible_v<remove_cvref_t<Outer>>;\r\n\r\n            static_assert(same_as<decltype(views::join(move(as_const(rng)))), JV>);\r\n            static_assert(noexcept(views::join(move(as_const(rng)))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(as_const(rng)) | views::join), JV>);\r\n            static_assert(noexcept(move(as_const(rng)) | views::join) == is_noexcept);\r\n        }\r\n\r\n        using V = views::all_t<Outer>;\r\n        using R = join_view<V>;\r\n        static_assert(ranges::view<R>);\r\n        static_assert(input_range<R> == input_range<Inner>);\r\n        static_assert(forward_range<R> == (deref_is_glvalue && forward_range<Outer> && forward_range<Inner>) );\r\n        static_assert(\r\n            bidirectional_range<R> == //\r\n            (deref_is_glvalue && bidirectional_range<Outer> && bidirectional_range<Inner> && common_range<Inner>) );\r\n        static_assert(!ranges::random_access_range<R>);\r\n        static_assert(!ranges::contiguous_range<R>);\r\n\r\n        // Validate deduction guide\r\n        same_as<R> auto r = join_view{forward<Outer>(rng)};\r\n        assert(ranges::equal(r, expected));\r\n        const bool is_empty = ranges::empty(expected);\r\n\r\n        // Validate lack of size\r\n        static_assert(!CanSize<R>);\r\n\r\n        // Validate view_interface::empty and operator bool\r\n        static_assert(CanEmpty<R> == forward_range<R>);\r\n        static_assert(CanMemberEmpty<R> == CanEmpty<R>);\r\n        if constexpr (CanMemberEmpty<R>) {\r\n            assert(r.empty() == is_empty);\r\n            assert(static_cast<bool>(r) == !is_empty);\r\n\r\n            static_assert(CanEmpty<const R> == forward_range<const R>);\r\n            static_assert(CanMemberEmpty<const R> == CanEmpty<const R>);\r\n            if constexpr (CanMemberEmpty<const R>) {\r\n                assert(as_const(r).empty() == is_empty);\r\n                assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n            }\r\n        }\r\n\r\n        // Validate join_view::begin\r\n        static_assert(CanMemberBegin<R>);\r\n        static_assert(CanMemberBegin<const R>\r\n                      == (forward_range<const V> && is_reference_v<range_reference_t<const V>>\r\n                          && input_range<range_reference_t<const V>>) );\r\n        if (forward_range<R>) {\r\n            const iterator_t<R> i = r.begin();\r\n            if (!is_empty) {\r\n                assert(*i == *begin(expected));\r\n            }\r\n\r\n            if constexpr (copyable<V>) {\r\n                auto r2                              = r;\r\n                const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n                if (!is_empty) {\r\n                    assert(*i2 == *i);\r\n                }\r\n            }\r\n\r\n            static_assert(CanMemberBegin<const R> == CanBegin<const R&>);\r\n            if constexpr (CanMemberBegin<const R>) {\r\n                const iterator_t<const R> ci = as_const(r).begin();\r\n                if (!is_empty) {\r\n                    assert(*ci == *i);\r\n                }\r\n\r\n                if constexpr (copyable<V>) {\r\n                    const auto r2                               = r;\r\n                    const same_as<iterator_t<const R>> auto ci2 = r2.begin();\r\n                    if (!is_empty) {\r\n                        assert(*ci2 == *i);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        // Also validate that join_view iterators are default-constructible\r\n        {\r\n            static_assert(is_default_constructible_v<iterator_t<R>>);\r\n            [[maybe_unused]] iterator_t<R> i;\r\n            if constexpr (CanMemberBegin<const R>) {\r\n                static_assert(is_default_constructible_v<iterator_t<const R>>);\r\n                [[maybe_unused]] iterator_t<const R> ci;\r\n            }\r\n        }\r\n\r\n        // Validate join_view::end\r\n        static_assert(CanMemberEnd<R>);\r\n        static_assert(CanMemberEnd<const R>\r\n                      == (forward_range<const V> && is_reference_v<range_reference_t<const V>>\r\n                          && input_range<range_reference_t<const V>>) );\r\n        static_assert(common_range<R>\r\n                      == (forward_range<V> && is_reference_v<range_reference_t<V>> && common_range<V>\r\n                          && forward_range<Inner> && common_range<Inner>) );\r\n        static_assert(common_range<const R>\r\n                      == (forward_range<const V> && is_reference_v<range_reference_t<const V>> && common_range<const V>\r\n                          && forward_range<range_reference_t<const V>> && common_range<range_reference_t<const V>>) );\r\n        const ranges::sentinel_t<R> s = r.end();\r\n        if (!is_empty) {\r\n            if constexpr (bidirectional_range<R> && common_range<R>) {\r\n                assert(*prev(s) == *prev(end(expected)));\r\n\r\n                if constexpr (copyable<V>) {\r\n                    auto r2 = r;\r\n                    assert(*prev(r2.end()) == *prev(end(expected)));\r\n                }\r\n            }\r\n\r\n            static_assert(CanMemberEnd<const R> == CanEnd<const R&>);\r\n            if constexpr (CanMemberEnd<const R>) {\r\n                const ranges::sentinel_t<const R> cs = as_const(r).end();\r\n                if constexpr (bidirectional_range<R> && common_range<R>) {\r\n                    assert(*prev(cs) == *prev(end(expected)));\r\n\r\n                    if constexpr (copyable<V>) {\r\n                        const auto r2                   = r;\r\n                        const ranges::sentinel_t<R> cs2 = r2.end();\r\n                        assert(*prev(cs2) == *prev(end(expected)));\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n#if _HAS_CXX23\r\n        using ranges::const_iterator_t, ranges::const_sentinel_t;\r\n\r\n        // Validate view_interface::cbegin\r\n        static_assert(CanMemberCBegin<R>);\r\n        static_assert(CanMemberCBegin<const R>\r\n                      == (forward_range<const V> && is_reference_v<range_reference_t<const V>>\r\n                          && input_range<range_reference_t<const V>>) );\r\n        if (forward_range<R>) { // intentionally not if constexpr\r\n            const same_as<const_iterator_t<R>> auto ci = r.cbegin();\r\n            if (!is_empty) {\r\n                assert(*ci == *begin(expected));\r\n            }\r\n\r\n            if constexpr (copyable<V>) {\r\n                auto r2                                     = r;\r\n                const same_as<const_iterator_t<R>> auto ci2 = r2.cbegin();\r\n                if (!is_empty) {\r\n                    assert(*ci2 == *ci);\r\n                }\r\n            }\r\n\r\n            static_assert(CanMemberCBegin<const R> == CanCBegin<const R&>);\r\n            if constexpr (CanMemberCBegin<const R>) {\r\n                const same_as<const_iterator_t<const R>> auto ci2 = as_const(r).cbegin();\r\n                if (!is_empty) {\r\n                    assert(*ci2 == *ci);\r\n                }\r\n\r\n                if constexpr (copyable<V>) {\r\n                    const auto r2                                     = r;\r\n                    const same_as<const_iterator_t<const R>> auto ci3 = r2.cbegin();\r\n                    if (!is_empty) {\r\n                        assert(*ci3 == *ci);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        // Validate view_interface::cend\r\n        static_assert(CanMemberCEnd<R>);\r\n        static_assert(CanMemberCEnd<const R>\r\n                      == (forward_range<const V> && is_reference_v<range_reference_t<const V>>\r\n                          && input_range<range_reference_t<const V>>) );\r\n        const auto cs = r.end();\r\n        if (!is_empty) {\r\n            if constexpr (bidirectional_range<R> && common_range<R>) {\r\n                assert(*prev(cs) == *prev(end(expected)));\r\n\r\n                if constexpr (copyable<V>) {\r\n                    auto r2 = r;\r\n                    assert(*prev(r2.cend()) == *prev(end(expected)));\r\n                }\r\n            }\r\n\r\n            static_assert(CanMemberCEnd<const R> == CanCEnd<const R&>);\r\n            if constexpr (CanMemberCEnd<const R>) {\r\n                const same_as<const_sentinel_t<const R>> auto cs2 = as_const(r).cend();\r\n                if constexpr (bidirectional_range<R> && common_range<R>) {\r\n                    assert(*prev(cs2) == *prev(end(expected)));\r\n\r\n                    if constexpr (copyable<V>) {\r\n                        const auto r2                                     = r;\r\n                        const same_as<const_sentinel_t<const R>> auto cs3 = r2.cend();\r\n                        assert(*prev(cs3) == *prev(end(expected)));\r\n                    }\r\n                }\r\n            }\r\n        }\r\n#endif // _HAS_CXX23\r\n\r\n        // Validate view_interface::data\r\n        static_assert(!CanData<R>);\r\n        static_assert(!CanData<const R>);\r\n\r\n        // Validate view_interface::operator[]\r\n        static_assert(!CanIndex<R>);\r\n        static_assert(!CanIndex<const R>);\r\n\r\n        // Validate view_interface::front and back\r\n        static_assert(CanMemberFront<R> == forward_range<R>);\r\n        static_assert(CanMemberFront<const R> == forward_range<const R>);\r\n        if (!is_empty) {\r\n            if constexpr (CanMemberFront<R>) {\r\n                assert(r.front() == *begin(expected));\r\n            }\r\n\r\n            if constexpr (CanMemberFront<const R>) {\r\n                assert(as_const(r).front() == *begin(expected));\r\n            }\r\n        }\r\n\r\n        static_assert(CanMemberBack<R> == (bidirectional_range<R> && common_range<R>) );\r\n        static_assert(\r\n            CanMemberBack<const R>\r\n            == (bidirectional_range<const R> && common_range<const R> && is_reference_v<range_reference_t<const V>>) );\r\n        if (!is_empty) {\r\n            if constexpr (CanMemberBack<R>) {\r\n                assert(r.back() == *prev(end(expected)));\r\n            }\r\n\r\n            if constexpr (CanMemberBack<const R>) {\r\n                assert(as_const(r).back() == *prev(end(expected)));\r\n            }\r\n        }\r\n\r\n        // Validate join_view::base() const&\r\n        static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n        if constexpr (copy_constructible<V> && forward_range<V>) {\r\n            same_as<V> auto b1 = as_const(r).base();\r\n            static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>);\r\n            if (!is_empty) {\r\n                auto bi1 = b1.begin();\r\n                while (ranges::empty(*bi1)) {\r\n                    ++bi1;\r\n                }\r\n                auto&& inner_first = *bi1;\r\n                assert(*begin(inner_first) == *begin(expected));\r\n\r\n                if constexpr (bidirectional_range<R> && common_range<R>) {\r\n                    auto ei1 = prev(b1.end());\r\n                    while (ranges::empty(*ei1)) {\r\n                        --ei1;\r\n                    }\r\n                    auto&& inner_last = *ei1;\r\n                    assert(*prev(end(inner_last)) == *prev(end(expected)));\r\n                }\r\n            }\r\n        }\r\n\r\n        // Validate join_view::base() && (NB: do this last since it leaves r moved-from)\r\n        if (forward_range<V>) { // intentionally not if constexpr\r\n            same_as<V> auto b2 = move(r).base();\r\n            static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>);\r\n            if constexpr (CanEmpty<Inner>) {\r\n                if (!is_empty) {\r\n                    auto bi2 = b2.begin();\r\n                    while (ranges::empty(*bi2)) {\r\n                        ++bi2;\r\n                    }\r\n                    auto&& inner_first = *bi2;\r\n                    assert(*begin(inner_first) == *begin(expected));\r\n\r\n                    if constexpr (bidirectional_range<R> && common_range<R>) {\r\n                        auto ei2 = prev(b2.end());\r\n                        while (ranges::empty(*ei2)) {\r\n                            --ei2;\r\n                        }\r\n                        auto&& inner_last = *ei2;\r\n                        assert(*prev(end(inner_last)) == *prev(end(expected)));\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\nconstexpr int expected_ints[]         = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\r\nconstexpr span<const int> intervals[] = {\r\n    {expected_ints + 0, expected_ints + 3},\r\n    {expected_ints + 3, expected_ints + 7},\r\n    {expected_ints + 7, expected_ints + 7},\r\n    {expected_ints + 7, expected_ints + 10},\r\n    {expected_ints + 10, expected_ints + 10},\r\n};\r\n\r\nstruct instantiator {\r\n    template <ranges::range Inner, ranges::input_range Outer>\r\n    static constexpr void call() {\r\n        static_assert(ranges::size(intervals) == 5);\r\n        Inner inner_ranges[] = {\r\n            Inner{intervals[0]}, Inner{intervals[1]}, Inner{intervals[2]}, Inner{intervals[3]}, Inner{intervals[4]}};\r\n        test_one(Outer{inner_ranges}, expected_ints);\r\n    }\r\n};\r\n\r\nenum class RefOrView { reference, view };\r\n\r\ntemplate <class Category, test::CanView IsView, test::Common IsCommon,\r\n    bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing inner_test_range = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n    test::ProxyRef::no, IsView, test::Copyability::copyable>;\r\n\r\ntemplate <class Category, class Element, RefOrView RV, test::Common IsCommon,\r\n    bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing outer_test_range = test::range<Category, Element, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n    (RV == RefOrView::view ? test::ProxyRef::prvalue : test::ProxyRef::no), test::CanView::yes,\r\n    test::Copyability::copyable>;\r\n\r\nconstexpr bool instantiation_test() {\r\n    // The adaptor is sensitive to:\r\n    // * inner and outer range common category (input, forward, bidi)\r\n    // * outer range's reference type referenceness vs. value type viewness\r\n    // * if the inner range models common_range\r\n    // * if the outer range models common_range\r\n    // * if both inner and outer iterators are equality_comparable (the defaults for input-non-common and forward\r\n    // suffice to get coverage here)\r\n    // * if the inner range has -> (Ditto defaults)\r\n    using test::CanView, test::Common;\r\n\r\n    instantiator::call<inner_test_range<input_iterator_tag, CanView::no, Common::no>,\r\n        outer_test_range<input_iterator_tag, inner_test_range<input_iterator_tag, CanView::no, Common::no>,\r\n            RefOrView::reference, Common::no>>();\r\n    instantiator::call<inner_test_range<input_iterator_tag, CanView::no, Common::no>,\r\n        outer_test_range<input_iterator_tag, inner_test_range<input_iterator_tag, CanView::no, Common::no>,\r\n            RefOrView::reference, Common::yes>>();\r\n    instantiator::call<inner_test_range<input_iterator_tag, CanView::no, Common::yes>,\r\n        outer_test_range<input_iterator_tag, inner_test_range<input_iterator_tag, CanView::no, Common::yes>,\r\n            RefOrView::reference, Common::no>>();\r\n    instantiator::call<inner_test_range<input_iterator_tag, CanView::no, Common::yes>,\r\n        outer_test_range<input_iterator_tag, inner_test_range<input_iterator_tag, CanView::no, Common::yes>,\r\n            RefOrView::reference, Common::yes>>();\r\n    instantiator::call<inner_test_range<input_iterator_tag, CanView::yes, Common::no>,\r\n        outer_test_range<input_iterator_tag, inner_test_range<input_iterator_tag, CanView::yes, Common::no>,\r\n            RefOrView::view, Common::no>>();\r\n    instantiator::call<inner_test_range<input_iterator_tag, CanView::yes, Common::no>,\r\n        outer_test_range<input_iterator_tag, inner_test_range<input_iterator_tag, CanView::yes, Common::no>,\r\n            RefOrView::view, Common::yes>>();\r\n    instantiator::call<inner_test_range<input_iterator_tag, CanView::yes, Common::yes>,\r\n        outer_test_range<input_iterator_tag, inner_test_range<input_iterator_tag, CanView::yes, Common::yes>,\r\n            RefOrView::view, Common::no>>();\r\n    instantiator::call<inner_test_range<input_iterator_tag, CanView::yes, Common::yes>,\r\n        outer_test_range<input_iterator_tag, inner_test_range<input_iterator_tag, CanView::yes, Common::yes>,\r\n            RefOrView::view, Common::yes>>();\r\n    instantiator::call<inner_test_range<forward_iterator_tag, CanView::no, Common::no>,\r\n        outer_test_range<forward_iterator_tag, inner_test_range<forward_iterator_tag, CanView::no, Common::no>,\r\n            RefOrView::reference, Common::no>>();\r\n    instantiator::call<inner_test_range<forward_iterator_tag, CanView::no, Common::no>,\r\n        outer_test_range<forward_iterator_tag, inner_test_range<forward_iterator_tag, CanView::no, Common::no>,\r\n            RefOrView::reference, Common::yes>>();\r\n    instantiator::call<inner_test_range<forward_iterator_tag, CanView::no, Common::yes>,\r\n        outer_test_range<forward_iterator_tag, inner_test_range<forward_iterator_tag, CanView::no, Common::yes>,\r\n            RefOrView::reference, Common::no>>();\r\n    instantiator::call<inner_test_range<forward_iterator_tag, CanView::no, Common::yes>,\r\n        outer_test_range<forward_iterator_tag, inner_test_range<forward_iterator_tag, CanView::no, Common::yes>,\r\n            RefOrView::reference, Common::yes>>();\r\n    instantiator::call<inner_test_range<forward_iterator_tag, CanView::yes, Common::no>,\r\n        outer_test_range<forward_iterator_tag, inner_test_range<forward_iterator_tag, CanView::yes, Common::no>,\r\n            RefOrView::view, Common::no>>();\r\n    instantiator::call<inner_test_range<forward_iterator_tag, CanView::yes, Common::no>,\r\n        outer_test_range<forward_iterator_tag, inner_test_range<forward_iterator_tag, CanView::yes, Common::no>,\r\n            RefOrView::view, Common::yes>>();\r\n    instantiator::call<inner_test_range<forward_iterator_tag, CanView::yes, Common::yes>,\r\n        outer_test_range<forward_iterator_tag, inner_test_range<forward_iterator_tag, CanView::yes, Common::yes>,\r\n            RefOrView::view, Common::no>>();\r\n    instantiator::call<inner_test_range<forward_iterator_tag, CanView::yes, Common::yes>,\r\n        outer_test_range<forward_iterator_tag, inner_test_range<forward_iterator_tag, CanView::yes, Common::yes>,\r\n            RefOrView::view, Common::yes>>();\r\n    instantiator::call<inner_test_range<bidirectional_iterator_tag, CanView::no, Common::no>,\r\n        outer_test_range<bidirectional_iterator_tag,\r\n            inner_test_range<bidirectional_iterator_tag, CanView::no, Common::no>, RefOrView::reference, Common::no>>();\r\n    instantiator::call<inner_test_range<bidirectional_iterator_tag, CanView::no, Common::no>,\r\n        outer_test_range<bidirectional_iterator_tag,\r\n            inner_test_range<bidirectional_iterator_tag, CanView::no, Common::no>, RefOrView::reference,\r\n            Common::yes>>();\r\n    instantiator::call<inner_test_range<bidirectional_iterator_tag, CanView::no, Common::yes>,\r\n        outer_test_range<bidirectional_iterator_tag,\r\n            inner_test_range<bidirectional_iterator_tag, CanView::no, Common::yes>, RefOrView::reference,\r\n            Common::no>>();\r\n    instantiator::call<inner_test_range<bidirectional_iterator_tag, CanView::no, Common::yes>,\r\n        outer_test_range<bidirectional_iterator_tag,\r\n            inner_test_range<bidirectional_iterator_tag, CanView::no, Common::yes>, RefOrView::reference,\r\n            Common::yes>>();\r\n    instantiator::call<inner_test_range<bidirectional_iterator_tag, CanView::yes, Common::no>,\r\n        outer_test_range<bidirectional_iterator_tag,\r\n            inner_test_range<bidirectional_iterator_tag, CanView::yes, Common::no>, RefOrView::view, Common::no>>();\r\n    instantiator::call<inner_test_range<bidirectional_iterator_tag, CanView::yes, Common::no>,\r\n        outer_test_range<bidirectional_iterator_tag,\r\n            inner_test_range<bidirectional_iterator_tag, CanView::yes, Common::no>, RefOrView::view, Common::yes>>();\r\n    instantiator::call<inner_test_range<bidirectional_iterator_tag, CanView::yes, Common::yes>,\r\n        outer_test_range<bidirectional_iterator_tag,\r\n            inner_test_range<bidirectional_iterator_tag, CanView::yes, Common::yes>, RefOrView::view, Common::no>>();\r\n    instantiator::call<inner_test_range<bidirectional_iterator_tag, CanView::yes, Common::yes>,\r\n        outer_test_range<bidirectional_iterator_tag,\r\n            inner_test_range<bidirectional_iterator_tag, CanView::yes, Common::yes>, RefOrView::view, Common::yes>>();\r\n\r\n    return true;\r\n}\r\n\r\nusing mo_inner = test::range<input_iterator_tag, const int, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare::no, test::ProxyRef::yes, test::CanView::yes, test::Copyability::copyable>;\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, mo_inner, test::Sized{is_random}, test::CanDifference{is_random}, IsCommon,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag>}, test::ProxyRef::no, test::CanView::yes,\r\n    test::Copyability::move_only>;\r\nvoid test_move_only_views() {\r\n    const auto gen = [] {\r\n        return array{mo_inner{intervals[0]}, mo_inner{intervals[1]}, mo_inner{intervals[2]}, mo_inner{intervals[3]}};\r\n    };\r\n\r\n    auto input = gen();\r\n    test_one(move_only_view<input_iterator_tag, test::Common::no>{input}, expected_ints);\r\n\r\n    input = gen();\r\n    test_one(move_only_view<forward_iterator_tag, test::Common::no>{input}, expected_ints);\r\n\r\n    input = gen();\r\n    test_one(move_only_view<forward_iterator_tag, test::Common::yes>{input}, expected_ints);\r\n\r\n    input = gen();\r\n    test_one(move_only_view<bidirectional_iterator_tag, test::Common::no>{input}, expected_ints);\r\n\r\n    input = gen();\r\n    test_one(move_only_view<bidirectional_iterator_tag, test::Common::yes>{input}, expected_ints);\r\n}\r\n\r\nconstexpr array<string_view, 5> prvalue_input = {{{}, \"Hello \"sv, {}, \"World!\"sv, {}}};\r\n\r\nconstexpr auto ToVector(const int val) {\r\n    return vector{val + 1};\r\n}\r\n\r\nconstexpr auto ToString(const size_t val) {\r\n    return string{prvalue_input[val]};\r\n}\r\n\r\nstruct Immovable {\r\n    Immovable()                            = default;\r\n    Immovable(const Immovable&)            = delete;\r\n    Immovable(Immovable&&)                 = delete;\r\n    Immovable& operator=(const Immovable&) = delete;\r\n    Immovable& operator=(Immovable&&)      = delete;\r\n};\r\n\r\n// Validate that the _Defaultabox primary template works when fed with a non-trivially-destructible type\r\nvoid test_non_trivially_destructible_type() { // COMPILE-ONLY\r\n    struct non_trivially_destructible_input_iterator {\r\n        using difference_type = int;\r\n        using value_type      = int;\r\n\r\n        // Provide some way to construct this type.\r\n        non_trivially_destructible_input_iterator(double, double) {}\r\n\r\n        non_trivially_destructible_input_iterator(const non_trivially_destructible_input_iterator&) = default;\r\n        non_trivially_destructible_input_iterator& operator=(\r\n            const non_trivially_destructible_input_iterator&) = default;\r\n\r\n        ~non_trivially_destructible_input_iterator() {}\r\n\r\n        // To test the correct specialization of _Defaultabox, this type must not be default constructible.\r\n        non_trivially_destructible_input_iterator() = delete;\r\n\r\n        non_trivially_destructible_input_iterator& operator++() {\r\n            return *this;\r\n        }\r\n        void operator++(int) {}\r\n        int operator*() const {\r\n            return 0;\r\n        }\r\n        bool operator==(default_sentinel_t) const {\r\n            return true;\r\n        }\r\n    };\r\n\r\n    using Inner = ranges::subrange<non_trivially_destructible_input_iterator, default_sentinel_t>;\r\n\r\n    auto r = views::empty<Inner> | views::join;\r\n    (void) r.begin();\r\n\r\n    // Also validate _Non_propagating_cache\r\n    auto r2 = views::empty<Inner> | views::transform([](Inner& r) { return r; }) | views::join;\r\n}\r\n\r\n// GH-3014 \"<ranges>: list-initialization is misused\"\r\nvoid test_gh_3014() { // COMPILE-ONLY\r\n    struct FwdRange {\r\n        string* begin() {\r\n            return nullptr;\r\n        }\r\n\r\n        test::init_list_not_constructible_iterator<string> begin() const {\r\n            return nullptr;\r\n        }\r\n\r\n        unreachable_sentinel_t end() const {\r\n            return {};\r\n        }\r\n    };\r\n\r\n    auto r                                           = FwdRange{} | views::join;\r\n    [[maybe_unused]] decltype(as_const(r).begin()) i = r.begin(); // Check 'iterator(iterator<!Const> i)'\r\n}\r\n\r\nconstexpr bool test_lwg3698() {\r\n    // LWG-3698 \"regex_iterator and join_view don't work together very well\"\r\n    struct stashing_iterator {\r\n        using difference_type = int;\r\n        using value_type      = span<const int>;\r\n\r\n        int x = 1;\r\n\r\n        constexpr stashing_iterator& operator++() {\r\n            ++x;\r\n            return *this;\r\n        }\r\n        constexpr void operator++(int) {\r\n            ++x;\r\n        }\r\n        constexpr value_type operator*() const {\r\n            return {&x, &x + 1};\r\n        }\r\n        constexpr bool operator==(default_sentinel_t) const {\r\n            return x > 3;\r\n        }\r\n    };\r\n\r\n    auto r   = ranges::subrange{stashing_iterator{}, default_sentinel} | views::join;\r\n    auto r2  = r;\r\n    auto it  = r.begin();\r\n    auto it2 = r2.begin();\r\n\r\n    auto itcopy = it;\r\n    it          = ++it2;\r\n    assert(*itcopy == 1);\r\n\r\n    struct intricate_range {\r\n        constexpr stashing_iterator begin() {\r\n            return {};\r\n        }\r\n        constexpr default_sentinel_t end() {\r\n            return {};\r\n        }\r\n        constexpr const span<const int>* begin() const {\r\n            return ranges::begin(intervals);\r\n        }\r\n        constexpr const span<const int>* end() const {\r\n            return ranges::end(intervals);\r\n        }\r\n    };\r\n\r\n    auto jv  = intricate_range{} | views::join;\r\n    auto cit = as_const(jv).begin();\r\n    assert(*++cit == 1);\r\n    assert(*--cit == 0);\r\n    assert(ranges::equal(as_const(jv), expected_ints));\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_lwg3700() { // COMPILE-ONLY\r\n    // LWG-3700 \"The const begin of the join_view family does not require InnerRng to be a range\"\r\n    auto r  = views::iota(0, 5) | views::filter([](auto) { return true; });\r\n    auto j  = views::single(r) | views::join;\r\n    using J = decltype(j);\r\n    static_assert(!CanMemberBegin<const J>);\r\n    static_assert(!CanMemberEnd<const J>);\r\n}\r\n\r\nconstexpr bool test_lwg3791() {\r\n    // LWG-3791 \"join_view::iterator::operator-- may be ill-formed\"\r\n    // Validate that join_view<V> works when range_reference_t<V> is an rvalue reference\r\n    using inner = test::range<bidirectional_iterator_tag, const int>;\r\n    using outer = test::range<bidirectional_iterator_tag, inner, test::Sized::no, test::CanDifference::no,\r\n        test::Common::yes, test::CanCompare::yes, test::ProxyRef::xvalue, test::CanView::yes>;\r\n\r\n    instantiator::call<inner, outer>();\r\n\r\n    return true;\r\n}\r\n\r\n// LWG-4112 \"has-arrow should require operator->() to be const-qualified\"\r\n\r\ntemplate <class T>\r\nconcept CanArrow = requires(T&& t) { forward<T>(t).operator->(); };\r\n\r\nenum class arrow_status : bool { bad, good };\r\n\r\ntemplate <arrow_status S>\r\nstruct arrowed_iterator {\r\n    using difference_type = ptrdiff_t;\r\n    using value_type      = int;\r\n\r\n    int& operator*() const;\r\n    int* operator->()\r\n        requires (S == arrow_status::bad);\r\n    int* operator->() const\r\n        requires (S == arrow_status::good);\r\n    arrowed_iterator& operator++();\r\n    arrowed_iterator operator++(int);\r\n    friend bool operator==(arrowed_iterator, arrowed_iterator);\r\n};\r\n\r\nvoid test_lwg_4112() { // COMPILE-ONLY\r\n    using good_inner_range  = ranges::subrange<arrowed_iterator<arrow_status::good>>;\r\n    using good_nested_range = span<const good_inner_range>;\r\n    using good_joined_range = decltype(good_nested_range{} | views::join);\r\n    static_assert(CanArrow<ranges::iterator_t<good_joined_range>>);\r\n\r\n    using bad_inner_range  = ranges::subrange<arrowed_iterator<arrow_status::bad>>;\r\n    using bad_nested_range = span<const bad_inner_range>;\r\n    using bad_joined_range = decltype(bad_nested_range{} | views::join);\r\n    static_assert(!CanArrow<ranges::iterator_t<bad_joined_range>>);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    constexpr string_view expected = \"Hello World!\"sv;\r\n\r\n    { // ...copyable\r\n        static constexpr array<string_view, 5> input = {{{}, \"Hello \"sv, {}, \"World!\"sv, {}}};\r\n        constexpr span<const string_view, 5> sp{input};\r\n        static_assert(test_one(sp, expected));\r\n        test_one(sp, expected);\r\n    }\r\n    { // ...copyable rvalue\r\n        static_assert(test_one(array<string_view, 5>{{{}, \"Hello \"sv, {}, \"World!\"sv, {}}}, expected));\r\n        test_one(array<string_view, 5>{{{}, \"Hello \"sv, {}, \"World!\"sv, {}}}, expected);\r\n    }\r\n    // ... move-only\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    { // ... C array\r\n        static constexpr int join_me[5][2] = {{0, 1}, {2, 3}, {4, 5}, {6, 7}, {8, 9}};\r\n        static_assert(test_one(join_me, expected_ints));\r\n        test_one(join_me, expected_ints);\r\n    }\r\n    { // ... fwd container\r\n        forward_list<string_view> lst = {{}, \"Hello \"sv, {}, \"World!\"sv, {}};\r\n        test_one(lst, expected);\r\n    }\r\n    { // ... bidi container\r\n        list<string_view> lst = {{}, \"Hello \"sv, {}, \"World!\"sv, {}};\r\n        test_one(lst, expected);\r\n    }\r\n    { // ... random container\r\n        vector<string_view> lst = {{}, \"Hello \"sv, {}, \"World!\"sv, {}};\r\n        test_one(lst, expected);\r\n    }\r\n\r\n    { // From example in LWG-3474\r\n        vector<vector<vector<int>>> nested_vectors = {{{1, 2, 3}, {4, 5}, {6}}, {{7}, {8, 9}, {10, 11, 12}}, {{13}}};\r\n        auto joined                                = nested_vectors | views::join | views::join;\r\n        static constexpr int result[]              = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};\r\n        assert(ranges::equal(joined, result));\r\n    }\r\n\r\n    { // P2328 range of prvalue array\r\n        static constexpr int result[] = {1, 2, 3, 4, 5};\r\n        constexpr auto ToArray        = [](const int i) { return array<int, 1>{i + 1}; };\r\n        assert(ranges::equal(views::iota(0, 5) | views::transform(ToArray) | views::join, result));\r\n        static_assert(ranges::equal(views::iota(0, 5) | views::transform(ToArray) | views::join, result));\r\n    }\r\n\r\n    { // P2328 range of prvalue vector using global function\r\n        static constexpr int result[] = {1, 2, 3, 4, 5};\r\n        assert(ranges::equal(views::iota(0, 5) | views::transform(ToVector) | views::join, result));\r\n        static_assert(ranges::equal(views::iota(0, 5) | views::transform(ToVector) | views::join, result));\r\n    }\r\n\r\n    { // P2328 range of prvalue vector using lambda\r\n        static constexpr int result[] = {1, 2, 3, 4, 5};\r\n        constexpr auto ToVectorLambda = [](const int i) { return vector{i + 1}; };\r\n        assert(ranges::equal(views::iota(0, 5) | views::transform(ToVectorLambda) | views::join, result));\r\n        static_assert(ranges::equal(views::iota(0, 5) | views::transform(ToVectorLambda) | views::join, result));\r\n    }\r\n\r\n    { // P2328 range of prvalue string using global function\r\n        assert(ranges::equal(views::iota(0u, 5u) | views::transform(ToString) | views::join, expected));\r\n#if !(defined(_DEBUG) && defined(__EDG__)) // TRANSITION, VSO-1948896, see also GH-1566\r\n        static_assert(ranges::equal(views::iota(0u, 5u) | views::transform(ToString) | views::join, expected));\r\n#endif // ^^^ no workaround ^^^\r\n    }\r\n\r\n    { // P2328 range of prvalue string using lambda\r\n        constexpr auto ToStringLambda = [](const size_t i) { return string{prvalue_input[i]}; };\r\n        assert(ranges::equal(views::iota(0u, 5u) | views::transform(ToStringLambda) | views::join, expected));\r\n#if !(defined(_DEBUG) && defined(__EDG__)) // TRANSITION, VSO-1948896, see also GH-1566\r\n        static_assert(ranges::equal(views::iota(0u, 5u) | views::transform(ToStringLambda) | views::join, expected));\r\n#endif // ^^^ no workaround ^^^\r\n    }\r\n\r\n    { // Immovable type\r\n        constexpr auto ToArrayOfImmovable = [](int) { return array<Immovable, 3>{}; };\r\n        assert(ranges::distance(views::iota(0, 2) | views::transform(ToArrayOfImmovable) | views::join) == 6);\r\n        static_assert(ranges::distance(views::iota(0, 2) | views::transform(ToArrayOfImmovable) | views::join) == 6);\r\n    }\r\n\r\n    { // Joining a non-const view without const qualified begin and end methods\r\n        vector<vector<int>> nested_vectors = {{0}, {1, 2, 3}, {99}, {4, 5, 6, 7}, {}, {8, 9, 10}};\r\n        auto RemoveSmallVectors            = [](const vector<int>& inner_vector) { return inner_vector.size() > 2; };\r\n        auto filtered_and_joined           = nested_vectors | views::filter(RemoveSmallVectors) | views::join;\r\n        static constexpr int result[]      = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};\r\n        assert(ranges::equal(filtered_and_joined, result));\r\n    }\r\n\r\n    static_assert(instantiation_test());\r\n    instantiation_test();\r\n\r\n    static_assert(test_lwg3698());\r\n    assert(test_lwg3698());\r\n\r\n    static_assert(test_lwg3791());\r\n    assert(test_lwg3791());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_lazy_split/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_lazy_split/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <ranges>\r\n#include <span>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\ntemplate <class Rng, class Delimiter>\r\nconcept CanViewLazySplit =\r\n    requires(Rng&& r, Delimiter&& d) { views::lazy_split(forward<Rng>(r), forward<Delimiter>(d)); };\r\n\r\nconstexpr auto equal_ranges    = [](auto&& left, auto&& right) { return ranges::equal(left, right); };\r\nconstexpr auto text            = \"This is a test, this is only a test.\"sv;\r\nconstexpr auto trailing_empty  = \"test \"sv;\r\nconstexpr auto lwg3505_pattern = \"xxyxxyx\"sv;\r\n\r\ntemplate <bool IsElement>\r\nstruct delimiter_view_impl {\r\n    template <class Base, class>\r\n    using apply = ranges::single_view<ranges::range_value_t<Base>>;\r\n};\r\ntemplate <>\r\nstruct delimiter_view_impl<false> {\r\n    template <class, class Delimiter>\r\n    using apply = views::all_t<Delimiter>;\r\n};\r\ntemplate <class Base, class Delimiter>\r\nusing delimiter_view_t =\r\n    delimiter_view_impl<is_convertible_v<Delimiter, ranges::range_value_t<Base>>>::template apply<Base, Delimiter>;\r\n\r\ntemplate <ranges::input_range Base, class Delimiter, ranges::input_range Expected>\r\nconstexpr void test_one(Base&& base, Delimiter&& delimiter, Expected&& expected) {\r\n    static_assert(CanViewLazySplit<Base, Delimiter>);\r\n    using R = decltype(views::lazy_split(forward<Base>(base), forward<Delimiter>(delimiter)));\r\n\r\n    // Validate type properties\r\n    static_assert(ranges::view<R>);\r\n    static_assert(ranges::input_range<R>);\r\n    static_assert(ranges::forward_range<R> == ranges::forward_range<Base>);\r\n    static_assert(!ranges::bidirectional_range<R>);\r\n\r\n    // Validate range adaptor object and range adaptor closure\r\n    using DV           = delimiter_view_t<Base, Delimiter>;\r\n    const auto closure = views::lazy_split(delimiter);\r\n\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Base>>;\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewLazySplit<Base&, Delimiter&> == (!is_view || copy_constructible<remove_cvref_t<Base>>) );\r\n    if constexpr (CanViewLazySplit<Base&, Delimiter&>) { // Validate lvalue\r\n        constexpr bool is_noexcept =\r\n            (!is_view || is_nothrow_copy_constructible_v<views::all_t<Base&>>) && is_nothrow_copy_constructible_v<DV>;\r\n\r\n        static_assert(same_as<decltype(views::lazy_split(base, delimiter)), R>);\r\n        static_assert(noexcept(views::lazy_split(base, delimiter)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(base | closure), R>);\r\n        static_assert(noexcept(base | closure) == is_noexcept);\r\n\r\n        using outer_iterator = decltype(views::lazy_split(base, delimiter).begin());\r\n        static_assert(!is_default_constructible_v<iter_value_t<outer_iterator>>); // LWG-4013\r\n        static_assert(!is_constructible_v<iter_value_t<outer_iterator>, outer_iterator>); // LWG-4013\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewLazySplit<const remove_reference_t<Base>&, Delimiter&>\r\n                  == (!is_view || copy_constructible<remove_cvref_t<Base>>) );\r\n    if constexpr (is_view && copy_constructible<remove_cvref_t<Base>>) {\r\n        constexpr bool is_noexcept =\r\n            is_nothrow_copy_constructible_v<remove_cvref_t<Base>> && is_nothrow_copy_constructible_v<DV>;\r\n\r\n        static_assert(same_as<decltype(views::lazy_split(as_const(base), delimiter)), R>);\r\n        static_assert(noexcept(views::lazy_split(as_const(base), delimiter)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(base) | closure), R>);\r\n        static_assert(noexcept(as_const(base) | closure) == is_noexcept);\r\n\r\n        using outer_iterator = decltype(views::lazy_split(as_const(base), delimiter).begin());\r\n        static_assert(!is_default_constructible_v<iter_value_t<outer_iterator>>); // LWG-4013\r\n        static_assert(!is_constructible_v<iter_value_t<outer_iterator>, outer_iterator>); // LWG-4013\r\n    } else if constexpr (!is_view) {\r\n        using LSV                  = ranges::lazy_split_view<ranges::ref_view<const remove_reference_t<Base>>, DV>;\r\n        constexpr bool is_noexcept = is_nothrow_constructible_v<LSV, const remove_reference_t<Base>&, Delimiter&>;\r\n\r\n        static_assert(same_as<decltype(views::lazy_split(as_const(base), delimiter)), LSV>);\r\n        static_assert(noexcept(views::lazy_split(as_const(base), delimiter)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(base) | closure), LSV>);\r\n        static_assert(noexcept(as_const(base) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(\r\n        CanViewLazySplit<remove_reference_t<Base>, Delimiter&> == (is_view || movable<remove_reference_t<Base>>) );\r\n    if constexpr (is_view) {\r\n        constexpr bool is_noexcept =\r\n            is_nothrow_move_constructible_v<remove_reference_t<Base>> && is_nothrow_copy_constructible_v<DV>;\r\n        static_assert(same_as<decltype(views::lazy_split(move(base), delimiter)), R>);\r\n        static_assert(noexcept(views::lazy_split(move(base), delimiter)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(base) | closure), R>);\r\n        static_assert(noexcept(move(base) | closure) == is_noexcept);\r\n\r\n        using outer_iterator = decltype(views::lazy_split(move(base), delimiter).begin());\r\n        static_assert(!is_default_constructible_v<iter_value_t<outer_iterator>>); // LWG-4013\r\n        static_assert(!is_constructible_v<iter_value_t<outer_iterator>, outer_iterator>); // LWG-4013\r\n    } else if constexpr (movable<remove_reference_t<Base>>) {\r\n        using RS = ranges::lazy_split_view<ranges::owning_view<remove_reference_t<Base>>, DV>;\r\n        constexpr bool is_noexcept =\r\n            is_nothrow_move_constructible_v<remove_reference_t<Base>> && is_nothrow_copy_constructible_v<DV>;\r\n\r\n        static_assert(same_as<decltype(views::lazy_split(move(base), delimiter)), RS>);\r\n        static_assert(noexcept(views::lazy_split(move(base), delimiter)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(base) | closure), RS>);\r\n        static_assert(noexcept(move(base) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewLazySplit<const remove_reference_t<Base>, Delimiter&>\r\n                  == (is_view && copy_constructible<remove_cvref_t<Base>>) );\r\n    if constexpr (is_view && copy_constructible<remove_cvref_t<Base>>) {\r\n        constexpr bool is_noexcept =\r\n            is_nothrow_copy_constructible_v<remove_cvref_t<Base>> && is_nothrow_copy_constructible_v<DV>;\r\n\r\n        static_assert(same_as<decltype(views::lazy_split(move(as_const(base)), delimiter)), R>);\r\n        static_assert(noexcept(views::lazy_split(move(as_const(base)), delimiter)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(base)) | closure), R>);\r\n        static_assert(noexcept(move(as_const(base)) | closure) == is_noexcept);\r\n\r\n        using outer_iterator = decltype(views::lazy_split(move(as_const(base)), delimiter).begin());\r\n        static_assert(!is_default_constructible_v<iter_value_t<outer_iterator>>); // LWG-4013\r\n        static_assert(!is_constructible_v<iter_value_t<outer_iterator>, outer_iterator>); // LWG-4013\r\n    }\r\n\r\n    // Validate deduction guide\r\n    same_as<R> auto r = ranges::lazy_split_view{forward<Base>(base), forward<Delimiter>(delimiter)};\r\n    assert(ranges::equal(r, expected, equal_ranges));\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    const bool is_empty = ranges::empty(expected);\r\n    static_assert(CanMemberEmpty<R> == ranges::forward_range<Base>);\r\n    static_assert(CanBool<R> == ranges::forward_range<Base>);\r\n    if constexpr (ranges::forward_range<Base>) {\r\n        assert(r.empty() == is_empty);\r\n        assert(static_cast<bool>(r) == !is_empty);\r\n    }\r\n\r\n    // Validate lazy_split_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    if (ranges::forward_range<Base>) { // intentionally not if constexpr\r\n        const auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(ranges::equal(*i, *ranges::begin(expected)));\r\n        }\r\n\r\n        if constexpr (copyable<R>) {\r\n            auto r2       = r;\r\n            const auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(ranges::equal(*i2, *i));\r\n            }\r\n        }\r\n\r\n        static_assert(CanMemberBegin<const R> == ranges::forward_range<const remove_reference_t<Base>>);\r\n        static_assert(CanBegin<const R&> == CanMemberBegin<const R>);\r\n        if constexpr (CanBegin<const R&>) {\r\n            const auto ic = as_const(r).begin();\r\n            if (!is_empty) {\r\n                assert(ranges::equal(*ic, *ranges::begin(expected)));\r\n            }\r\n\r\n            if constexpr (copyable<remove_reference_t<Base>>) {\r\n                auto r2       = r;\r\n                const auto i2 = as_const(r2).begin();\r\n                if (!is_empty) {\r\n                    assert(ranges::equal(*i2, *ic));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate lazy_split_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    [[maybe_unused]] same_as<ranges::sentinel_t<R>> auto s = r.end();\r\n    if (ranges::forward_range<Base>) {\r\n        assert((r.begin() == s) == is_empty);\r\n    }\r\n    static_assert(ranges::common_range<R> == (ranges::forward_range<Base> && ranges::common_range<Base>) );\r\n    if constexpr (!ranges::common_range<R>) {\r\n        static_assert(same_as<ranges::sentinel_t<R>, default_sentinel_t>);\r\n    }\r\n\r\n    static_assert(CanMemberEnd<const R>);\r\n    constexpr bool should_be_const_common = ranges::forward_range<Base>\r\n                                         && ranges::forward_range<const remove_cvref_t<Base>>\r\n                                         && ranges::common_range<const remove_cvref_t<Base>>;\r\n    static_assert(ranges::common_range<const R> == should_be_const_common);\r\n    const auto sc = as_const(r).end();\r\n    if constexpr (ranges::forward_range<Base> && ranges::forward_range<const remove_cvref_t<Base>>) {\r\n        static_assert(same_as<decltype(sc), const ranges::sentinel_t<const R>>);\r\n        assert((as_const(r).begin() == sc) == is_empty);\r\n    }\r\n\r\n    if constexpr (!ranges::common_range<const R>) {\r\n        static_assert(same_as<ranges::sentinel_t<R>, default_sentinel_t>);\r\n    }\r\n\r\n    // Validate view_interface::data\r\n    static_assert(!CanData<R>);\r\n    static_assert(!CanData<const R>);\r\n\r\n    // Validate view_interface::size\r\n    static_assert(!CanSize<R>);\r\n    static_assert(!CanSize<const R>);\r\n\r\n    // Validate view_interface::operator[]\r\n    static_assert(!CanIndex<R>);\r\n    static_assert(!CanIndex<const R>);\r\n\r\n    if (!is_empty) {\r\n        // Validate view_interface::front and back\r\n        static_assert(CanMemberFront<R> == ranges::forward_range<Base>);\r\n        if constexpr (ranges::forward_range<Base>) {\r\n            assert(ranges::equal(r.front(), *ranges::begin(expected)));\r\n        }\r\n\r\n        static_assert(CanMemberFront<const R> == ranges::forward_range<const remove_cvref_t<Base>>);\r\n        if constexpr (CanMemberFront<const R>) {\r\n            assert(ranges::equal(as_const(r).front(), *ranges::begin(expected)));\r\n        }\r\n\r\n        static_assert(!CanMemberBack<R>);\r\n        static_assert(!CanMemberBack<const R>);\r\n    }\r\n\r\n    // Validate lazy_split_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<views::all_t<Base>>);\r\n    if constexpr (CanMemberBase<const R&> && ranges::forward_range<Base>) {\r\n        same_as<views::all_t<Base>> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<views::all_t<Base>>);\r\n        if (!is_empty) {\r\n            assert(*b1.begin() == *ranges::begin(*ranges::begin(expected)));\r\n        }\r\n    }\r\n\r\n    // Validate lazy_split_view::base() && (NB: do this last since it leaves r moved-from)\r\n    if (ranges::forward_range<views::all_t<Base>>) { // intentionally not if constexpr\r\n        same_as<views::all_t<Base>> auto b2 = move(r).base();\r\n        static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<views::all_t<Base>>);\r\n        if (!is_empty) {\r\n            assert(*b2.begin() == *ranges::begin(*ranges::begin(expected)));\r\n        }\r\n    }\r\n}\r\n\r\nstruct instantiator {\r\n    static constexpr string_view expected_single[] = {\r\n        \"This\"sv, \"is\"sv, \"a\"sv, \"test,\"sv, \"this\"sv, \"is\"sv, \"only\"sv, \"a\"sv, \"test.\"sv};\r\n    static constexpr string_view expected_range[]    = {\"Th\"sv, \" \"sv, \" a test, th\"sv, \" \"sv, \" only a test.\"sv};\r\n    static constexpr string_view expected_empty[]    = {\"T\"sv, \"h\"sv, \"i\"sv, \"s\"sv, \" \"sv, \"i\"sv, \"s\"sv, \" \"sv, \"a\"sv,\r\n           \" \"sv, \"t\"sv, \"e\"sv, \"s\"sv, \"t\"sv, \",\"sv, \" \"sv, \"t\"sv, \"h\"sv, \"i\"sv, \"s\"sv, \" \"sv, \"i\"sv, \"s\"sv, \" \"sv, //\r\n           \"o\"sv, \"n\"sv, \"l\"sv, \"y\"sv, \" \"sv, \"a\"sv, \" \"sv, \"t\"sv, \"e\"sv, \"s\"sv, \"t\"sv, \".\"sv};\r\n    static constexpr string_view expected_trailing[] = {\"test\"sv, \"\"sv};\r\n    static constexpr string_view expected_lwg3505[]  = {\"x\"sv, \"x\"sv, \"x\"sv};\r\n\r\n    template <class T>\r\n    static constexpr decltype(auto) move_if_needed(T& t) noexcept {\r\n        if constexpr (ranges::view<T> && !copyable<T>) {\r\n            return move(t);\r\n        } else {\r\n            return t;\r\n        }\r\n    }\r\n\r\n    template <ranges::input_range Read>\r\n    static constexpr void call() {\r\n        { // Single-element delimiter\r\n            Read read{span{text}};\r\n            test_one(move_if_needed(read), ' ', expected_single);\r\n\r\n            Read empty{span<const char, 0>{}};\r\n            test_one(move_if_needed(empty), ' ', views::empty<string_view>);\r\n        }\r\n        { // Empty delimiter\r\n            Read read{span{text}};\r\n            test_one(move_if_needed(read), views::empty<char>, expected_empty);\r\n\r\n            Read empty{span<const char, 0>{}};\r\n            test_one(move_if_needed(empty), views::empty<char>, views::empty<string_view>);\r\n        }\r\n        if constexpr (ranges::forward_range<Read>) { // Range delimiter\r\n            Read read{span{text}};\r\n            test_one(move_if_needed(read), \"is\"sv, expected_range);\r\n\r\n            Read empty{span<const char, 0>{}};\r\n            test_one(move_if_needed(empty), \"is\"sv, views::empty<string_view>);\r\n        }\r\n\r\n        { // LWG-3478, trailing empty range\r\n            Read read{span{trailing_empty}};\r\n            test_one(move_if_needed(read), ' ', expected_trailing);\r\n        }\r\n\r\n        if constexpr (ranges::forward_range<Read>) { // LWG-3505, multichar pattern\r\n            Read read{span{lwg3505_pattern}};\r\n            test_one(move_if_needed(read), \"xy\"sv, expected_lwg3505);\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, test::CanView IsView, test::Copyability CanCopy>\r\nusing test_range = test::range<Category, const char, test::Sized::no,\r\n    test::CanDifference{derived_from<Category, random_access_iterator_tag>}, IsCommon,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, IsView, CanCopy>;\r\n\r\nconstexpr bool instantiation_test() {\r\n    using test::CanView, test::Common, test::Copyability;\r\n\r\n    // The view is sensitive to:\r\n    // 1. Category of the range to be lazy_split (input, forward)\r\n    // 2. Copyability\r\n    // 3. Commonality\r\n    // 4. Length of delimiter pattern (0/static 1/dynamic) [covered in instantiator::call]\r\n\r\n    instantiator::call<test_range<input_iterator_tag, Common::no, CanView::no, Copyability::immobile>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::no, CanView::yes, Copyability::move_only>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::no, CanView::yes, Copyability::copyable>>();\r\n\r\n    instantiator::call<test_range<input_iterator_tag, Common::yes, CanView::no, Copyability::immobile>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::yes, CanView::yes, Copyability::move_only>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::yes, CanView::yes, Copyability::copyable>>();\r\n\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, CanView::no, Copyability::immobile>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, CanView::yes, Copyability::move_only>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, CanView::yes, Copyability::copyable>>();\r\n\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, CanView::no, Copyability::immobile>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, CanView::yes, Copyability::move_only>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, CanView::yes, Copyability::copyable>>();\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_lwg_3904() {\r\n    auto r = views::single(0) | views::lazy_split(0);\r\n    auto i = r.begin();\r\n    ++i;\r\n    decltype(as_const(r).begin()) j = i;\r\n    return j != r.end();\r\n}\r\n\r\nvoid test_lwg_4027() { // COMPILE-ONLY\r\n    auto r   = views::single(0) | views::lazy_split(0);\r\n    using R1 = decltype((*ranges::cbegin(r)).front());\r\n    using R2 = decltype((*cbegin(r)).front());\r\n    static_assert(same_as<R1, R2>);\r\n    static_assert(is_const_v<remove_reference_t<R1>>);\r\n}\r\n\r\nint main() {\r\n    static_assert(instantiation_test());\r\n    instantiation_test();\r\n\r\n    static_assert(test_lwg_3904());\r\n    assert(test_lwg_3904());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_reverse/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_reverse/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <list>\r\n#include <ranges>\r\n#include <span>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewReverse = requires(Rng&& r) { views::reverse(forward<Rng>(r)); };\r\n\r\n// Test a silly precomposed range adaptor pipeline\r\nconstexpr auto pipeline = views::all | views::reverse | views::all | views::reverse | views::all | views::reverse;\r\n\r\ntemplate <ranges::bidirectional_range Rng, class Expected>\r\nconstexpr bool test_one(Rng&& rng, Expected&& expected) {\r\n    using ranges::common_range, ranges::reverse_view, ranges::sized_range, ranges::begin, ranges::end, ranges::size,\r\n        ranges::iterator_t, ranges::range_size_t, ranges::random_access_range, ranges::prev,\r\n        ranges::enable_borrowed_range, ranges::borrowed_range;\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n\r\n    using V = views::all_t<Rng>;\r\n    using R = reverse_view<V>;\r\n    static_assert(ranges::view<R>);\r\n    static_assert(ranges::bidirectional_range<R>);\r\n    static_assert(random_access_range<R> == random_access_range<Rng>);\r\n    static_assert(!ranges::contiguous_range<R>);\r\n    static_assert(borrowed_range<R> == borrowed_range<V>);\r\n\r\n    // Validate range adapter object\r\n    // ...with lvalue argument\r\n    static_assert(CanViewReverse<Rng&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewReverse<Rng&>) {\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::reverse(rng)), R>);\r\n        static_assert(noexcept(views::reverse(rng)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | views::reverse), R>);\r\n        static_assert(noexcept(rng | views::reverse) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(views::reverse(views::reverse(rng))), V>);\r\n        static_assert(noexcept(views::reverse(views::reverse(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | views::reverse | views::reverse | views::reverse), R>);\r\n        static_assert(noexcept(rng | views::reverse | views::reverse | views::reverse) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | pipeline), R>);\r\n        static_assert(noexcept(rng | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewReverse<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::reverse(as_const(rng))), R>);\r\n        static_assert(noexcept(views::reverse(as_const(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | views::reverse), R>);\r\n        static_assert(noexcept(as_const(rng) | views::reverse) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | views::reverse | views::reverse | views::reverse), R>);\r\n        static_assert(noexcept(as_const(rng) | views::reverse | views::reverse | views::reverse) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), R>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (!is_view) {\r\n        using RC                   = reverse_view<ranges::ref_view<const remove_reference_t<Rng>>>;\r\n        constexpr bool is_noexcept = true;\r\n\r\n        static_assert(same_as<decltype(views::reverse(as_const(rng))), RC>);\r\n        static_assert(noexcept(views::reverse(as_const(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | views::reverse), RC>);\r\n        static_assert(noexcept(as_const(rng) | views::reverse) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | views::reverse | views::reverse | views::reverse), RC>);\r\n        static_assert(noexcept(as_const(rng) | views::reverse | views::reverse | views::reverse) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), RC>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(CanViewReverse<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (is_view) {\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n        static_assert(same_as<decltype(views::reverse(move(rng))), R>);\r\n        static_assert(noexcept(views::reverse(move(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | views::reverse), R>);\r\n        static_assert(noexcept(move(rng) | views::reverse) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | views::reverse | views::reverse | views::reverse), R>);\r\n        static_assert(noexcept(move(rng) | views::reverse | views::reverse | views::reverse) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), R>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (movable<remove_reference_t<Rng>>) {\r\n        using RS                   = reverse_view<ranges::owning_view<remove_reference_t<Rng>>>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<remove_reference_t<Rng>>;\r\n\r\n        static_assert(same_as<decltype(views::reverse(move(rng))), RS>);\r\n        static_assert(noexcept(views::reverse(move(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | views::reverse), RS>);\r\n        static_assert(noexcept(move(rng) | views::reverse) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | views::reverse | views::reverse | views::reverse), RS>);\r\n        static_assert(noexcept(move(rng) | views::reverse | views::reverse | views::reverse) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), RS>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewReverse<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::reverse(move(as_const(rng)))), R>);\r\n        static_assert(noexcept(views::reverse(move(as_const(rng)))) == is_nothrow_copy_constructible_v<R>);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | views::reverse), R>);\r\n        static_assert(noexcept(move(as_const(rng)) | views::reverse) == is_nothrow_copy_constructible_v<R>);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | views::reverse | views::reverse | views::reverse), R>);\r\n        static_assert(noexcept(move(as_const(rng)) | views::reverse | views::reverse | views::reverse) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | pipeline), R>);\r\n        static_assert(noexcept(move(as_const(rng)) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // Validate deduction guide\r\n    same_as<R> auto r = reverse_view{forward<Rng>(rng)};\r\n    assert(ranges::equal(r, expected));\r\n\r\n    // Validate reverse_view::size\r\n    static_assert(CanMemberSize<R> == sized_range<Rng>);\r\n    if constexpr (sized_range<Rng>) {\r\n        assert(r.size() == static_cast<range_size_t<R>>(size(expected)));\r\n        static_assert(noexcept(r.size()) == noexcept(size(rng)));\r\n    }\r\n\r\n    static_assert(CanMemberSize<const R> == sized_range<const Rng>);\r\n    if constexpr (sized_range<const Rng>) {\r\n        assert(as_const(r).size() == static_cast<range_size_t<R>>(size(expected)));\r\n        static_assert(noexcept(r.size()) == noexcept(size(as_const(rng))));\r\n    }\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    const bool is_empty = ranges::empty(expected);\r\n    assert(r.empty() == is_empty);\r\n    assert(static_cast<bool>(r) == !is_empty);\r\n    static_assert(CanMemberEmpty<const R> == common_range<Rng>);\r\n    if constexpr (common_range<Rng>) {\r\n        assert(as_const(r).empty() == is_empty);\r\n        assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n    }\r\n\r\n    // Validate reverse_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    {\r\n        // reverse_view sometimes caches begin, so let's make several extra calls\r\n        const same_as<reverse_iterator<iterator_t<V>>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(*i == *begin(expected));\r\n        }\r\n        assert(r.begin() == i);\r\n        assert(r.begin() == i);\r\n        // NB: non-const begin is unconditionally noexcept(false) due to caching\r\n        static_assert(!noexcept(r.begin()));\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2                                                = r;\r\n            const same_as<reverse_iterator<iterator_t<V>>> auto i2 = r2.begin();\r\n            assert(r2.begin() == i2);\r\n            assert(r2.begin() == i2);\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n\r\n        static_assert(CanMemberBegin<const R> == common_range<Rng>);\r\n        if constexpr (common_range<Rng>) {\r\n            const same_as<reverse_iterator<iterator_t<const V>>> auto ci = as_const(r).begin();\r\n            assert(as_const(r).begin() == ci);\r\n            assert(as_const(r).begin() == ci);\r\n            if (!is_empty) {\r\n                assert(*ci == *i);\r\n            }\r\n            static_assert(noexcept(as_const(r).begin()) == noexcept(reverse_iterator{end(as_const(rng))}));\r\n\r\n            if constexpr (copyable<V>) {\r\n                const auto r2                                                 = r;\r\n                const same_as<reverse_iterator<iterator_t<const V>>> auto ci2 = r2.begin();\r\n                assert(r2.begin() == ci2);\r\n                assert(r2.begin() == ci2);\r\n                if (!is_empty) {\r\n                    assert(*ci2 == *i);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate reverse_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    if (!is_empty) {\r\n        assert(*prev(r.end()) == *prev(end(expected)));\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2 = r;\r\n            assert(*prev(r2.end()) == *prev(end(expected)));\r\n        }\r\n        static_assert(noexcept(r.end()) == noexcept(reverse_iterator{begin(rng)}));\r\n\r\n        static_assert(CanMemberEnd<const R> == common_range<Rng>);\r\n        if constexpr (common_range<Rng>) {\r\n            assert(*prev(as_const(r).end()) == *prev(end(expected)));\r\n            static_assert(noexcept(as_const(r).end()) == noexcept(reverse_iterator{begin(as_const(rng))}));\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    // Validate view_interface::cbegin\r\n    static_assert(CanMemberCBegin<R>);\r\n    {\r\n        // Ditto \"let's make some extra calls because reverse_view sometimes caches begin\"\r\n        const same_as<const_iterator<reverse_iterator<iterator_t<V>>>> auto ci = r.cbegin();\r\n        if (!is_empty) {\r\n            assert(*ci == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2                                                                 = r;\r\n            const same_as<const_iterator<reverse_iterator<iterator_t<V>>>> auto ci2 = r2.cbegin();\r\n            assert(r2.cbegin() == ci2);\r\n            assert(r2.cbegin() == ci2);\r\n            if (!is_empty) {\r\n                assert(*ci2 == *ci);\r\n            }\r\n        }\r\n\r\n        static_assert(CanMemberCBegin<const R> == common_range<Rng>);\r\n        if constexpr (CanMemberCBegin<const R>) {\r\n            const same_as<const_iterator<reverse_iterator<iterator_t<const V>>>> auto ci3 = as_const(r).cbegin();\r\n            assert(as_const(r).cbegin() == ci3);\r\n            assert(as_const(r).cbegin() == ci3);\r\n            if (!is_empty) {\r\n                assert(*ci3 == *ci);\r\n            }\r\n\r\n            if constexpr (copyable<V>) {\r\n                const auto r2                                                                 = r;\r\n                const same_as<const_iterator<reverse_iterator<iterator_t<const V>>>> auto ci4 = r2.cbegin();\r\n                assert(r2.cbegin() == ci4);\r\n                assert(r2.cbegin() == ci4);\r\n                if (!is_empty) {\r\n                    assert(*ci4 == *ci);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::cend\r\n    static_assert(CanMemberCEnd<R>);\r\n    if (!is_empty) {\r\n        assert(*prev(r.cend()) == *prev(end(expected)));\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2 = r;\r\n            assert(*prev(r2.cend()) == *prev(end(expected)));\r\n        }\r\n\r\n        static_assert(CanMemberCEnd<const R> == common_range<Rng>);\r\n        if constexpr (CanMemberCEnd<const R>) {\r\n            assert(*prev(as_const(r).cend()) == *prev(end(expected)));\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    // Validate view_interface::data\r\n    static_assert(!CanData<R>);\r\n    static_assert(!CanData<const R>);\r\n\r\n    if (!is_empty) {\r\n        // Validate view_interface::operator[]\r\n        static_assert(CanIndex<R> == random_access_range<Rng>);\r\n        static_assert(CanIndex<const R> == (random_access_range<Rng> && common_range<Rng>) );\r\n        if constexpr (random_access_range<Rng>) {\r\n            assert(r[0] == *begin(expected));\r\n\r\n            if constexpr (common_range<Rng>) {\r\n                assert(as_const(r)[0] == *begin(expected));\r\n            }\r\n        }\r\n\r\n        // Validate view_interface::front and back\r\n        assert(r.front() == *begin(expected));\r\n        assert(r.back() == *prev(end(expected)));\r\n\r\n        static_assert(CanMemberFront<const R> == common_range<Rng>);\r\n        static_assert(CanMemberBack<const R> == common_range<Rng>);\r\n        if constexpr (common_range<Rng>) {\r\n            assert(as_const(r).front() == *begin(expected));\r\n            assert(as_const(r).back() == *prev(end(expected)));\r\n        }\r\n    }\r\n\r\n    // Validate reverse_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V>) {\r\n        same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b1.begin() == *prev(end(expected)));\r\n            if constexpr (common_range<V>) {\r\n                assert(*prev(b1.end()) == *begin(expected));\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate reverse_view::base() && (NB: do this last since it leaves r moved-from)\r\n    same_as<V> auto b2 = move(r).base();\r\n    static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>);\r\n    if (!is_empty) {\r\n        assert(*b2.begin() == *prev(end(expected)));\r\n        if constexpr (common_range<V>) {\r\n            assert(*prev(b2.end()) == *begin(expected));\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nstruct instantiator {\r\n    template <ranges::bidirectional_range R>\r\n    static constexpr void call() {\r\n        R r{span<const int, 0>{}};\r\n        test_one(r, span<const int, 0>{});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_gh_2312() { // COMPILE-ONLY\r\n    // GH-2312 <ranges>: using views::reverse on ranges::reverse_view lvalue is broken\r\n    using X = ranges::iota_view<int, int>;\r\n    ranges::reverse_view<X> view;\r\n    static_assert(same_as<decltype(view | views::reverse), X>);\r\n}\r\n\r\nint main() {\r\n    static constexpr int some_ints[]     = {0, 1, 2};\r\n    static constexpr int reversed_ints[] = {2, 1, 0};\r\n\r\n    // Validate views\r\n    { // ...copyable\r\n        constexpr string_view str{\"Hello, World!\"};\r\n        constexpr auto expected = \"!dlroW ,olleH\"sv;\r\n        static_assert(test_one(str, expected));\r\n        test_one(str, expected);\r\n    }\r\n    { // ... move-only\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, reversed_ints);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, reversed_ints);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, reversed_ints);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, reversed_ints);\r\n        test_one(move_only_view<contiguous_iterator_tag, test::Common::no>{some_ints}, reversed_ints);\r\n        test_one(move_only_view<contiguous_iterator_tag, test::Common::yes>{some_ints}, reversed_ints);\r\n    }\r\n\r\n    // Validate non-views\r\n    { // ... C array\r\n        static_assert(test_one(some_ints, reversed_ints));\r\n        test_one(some_ints, reversed_ints);\r\n    }\r\n    { // ... contiguous container\r\n        string str{\"Hello, World!\"};\r\n        constexpr auto expected = \"!dlroW ,olleH\"sv;\r\n        test_one(str, expected);\r\n    }\r\n    { // ... bidi container\r\n        list<int> lst{3, 4, 5};\r\n        static constexpr int reversed[] = {5, 4, 3};\r\n        test_one(lst, reversed);\r\n\r\n        static constexpr int reversed_prefix[] = {4, 3};\r\n        assert(ranges::equal(\r\n            views::reverse(ranges::subrange{counted_iterator{lst.begin(), 2}, default_sentinel}), reversed_prefix));\r\n    }\r\n\r\n    // Get full instantiation coverage\r\n    static_assert((test_bidi<instantiator, const int>(), true));\r\n    test_bidi<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_single/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_single/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <new>\r\n#include <ranges>\r\n#include <string>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nstruct only_copy_constructible {\r\n    int val;\r\n\r\n    constexpr explicit only_copy_constructible(int i) noexcept : val{i} {}\r\n    only_copy_constructible(const only_copy_constructible&) = default;\r\n    only_copy_constructible(only_copy_constructible&& that) : val{exchange(that.val, -1)} {}\r\n\r\n    bool operator==(const only_copy_constructible&) const = default;\r\n\r\n    template <class T = void>\r\n    auto operator&() const {\r\n        static_assert(false);\r\n    }\r\n\r\n    template <class U>\r\n    auto operator,(U&&) const {\r\n        static_assert(false);\r\n    }\r\n};\r\n\r\nstruct literal_class {\r\n    int value;\r\n\r\n    literal_class() = default;\r\n    constexpr explicit literal_class(int i) noexcept : value{i} {}\r\n\r\n    bool operator==(const literal_class&) const = default;\r\n};\r\n\r\ntemplate <class T, class... Args>\r\nconstexpr bool test_one_type(T value, Args&&... args) {\r\n    // validate type properties\r\n    using R = ranges::single_view<T>;\r\n    static_assert(ranges::view<R> && ranges::contiguous_range<R> && ranges::sized_range<R> && ranges::common_range<R>);\r\n\r\n    // validate CTAD and const T& constructor\r\n    same_as<R> auto r0 = ranges::single_view{value};\r\n    const R& cr0       = r0;\r\n\r\n    // validate member empty\r\n    static_assert(same_as<decltype(R::empty()), bool>);\r\n    static_assert(R::empty() == false);\r\n    static_assert(noexcept(R::empty()));\r\n    static_assert(noexcept(ranges::empty(r0)));\r\n    static_assert(noexcept(ranges::empty(cr0)));\r\n\r\n    // validate member size\r\n    static_assert(same_as<decltype(R::size()), size_t>);\r\n    static_assert(R::size() == 1);\r\n    static_assert(noexcept(R::size()));\r\n    static_assert(noexcept(ranges::size(r0)));\r\n    static_assert(noexcept(ranges::size(cr0)));\r\n\r\n    // validate member data\r\n    const same_as<T*> auto ptr = r0.data();\r\n    assert(ptr != nullptr);\r\n    assert(ptr != addressof(value));\r\n    static_assert(noexcept(r0.data()));\r\n    static_assert(noexcept(ranges::data(r0)));\r\n\r\n    const same_as<const T*> auto cptr = cr0.data();\r\n    assert(cptr == ptr);\r\n    static_assert(noexcept(cr0.data()));\r\n    static_assert(noexcept(ranges::data(cr0)));\r\n\r\n    // validate members begin and end\r\n    static_assert(same_as<decltype(r0.begin()), T*>);\r\n    assert(*r0.begin() == value);\r\n    assert(r0.begin() == ptr);\r\n    static_assert(noexcept(r0.begin()));\r\n    static_assert(noexcept(ranges::begin(r0)));\r\n\r\n    static_assert(same_as<decltype(r0.end()), T*>);\r\n    assert(r0.end() == ptr + 1);\r\n    static_assert(noexcept(r0.end()));\r\n    static_assert(noexcept(ranges::end(r0)));\r\n\r\n    static_assert(same_as<decltype(cr0.begin()), const T*>);\r\n    assert(*cr0.begin() == value);\r\n    assert(cr0.begin() == cptr);\r\n    static_assert(noexcept(cr0.begin()));\r\n    static_assert(noexcept(ranges::begin(cr0)));\r\n\r\n    static_assert(same_as<decltype(cr0.end()), const T*>);\r\n    assert(cr0.end() == cptr + 1);\r\n    static_assert(noexcept(cr0.end()));\r\n    static_assert(noexcept(ranges::end(cr0)));\r\n\r\n#if _HAS_CXX23\r\n    // validate members cbegin and cend\r\n    static_assert(same_as<decltype(r0.cbegin()), const T*>);\r\n    assert(*r0.cbegin() == value);\r\n    assert(r0.cbegin() == ptr);\r\n\r\n    static_assert(same_as<decltype(r0.cend()), const T*>);\r\n    assert(r0.cend() == ptr + 1);\r\n\r\n    static_assert(same_as<decltype(cr0.cbegin()), const T*>);\r\n    assert(*cr0.cbegin() == value);\r\n    assert(cr0.cbegin() == cptr);\r\n\r\n    static_assert(same_as<decltype(cr0.cend()), const T*>);\r\n    assert(cr0.cend() == cptr + 1);\r\n#endif // _HAS_CXX23\r\n\r\n    // validate CTAD and T&& constructor\r\n    const same_as<R> auto cr1 = ranges::single_view{move(value)};\r\n    assert(cr1.data() != nullptr);\r\n    assert(cr1.data() != addressof(value));\r\n    assert(cr1.data() != cr0.data());\r\n    assert(*cr1.data() == *cr0.data());\r\n\r\n    // validate in_place constructor\r\n    const same_as<R> auto cr2 = ranges::single_view<T>{in_place, forward<Args>(args)...};\r\n    assert(cr2.data() != nullptr);\r\n    assert(*cr2.data() == *cr1.data());\r\n    static_assert(\r\n        noexcept(R{in_place, forward<Args>(args)...}) == is_nothrow_constructible_v<T, Args...>); // strengthened\r\n\r\n    // validate CPO [lvalue]\r\n    auto value2               = *cr2.data();\r\n    const same_as<R> auto cr3 = views::single(value2);\r\n    assert(cr3.data() != nullptr);\r\n    assert(cr3.data() != addressof(value2));\r\n    assert(*cr3.data() == *cr2.data());\r\n    static_assert(noexcept(views::single(value)) == is_nothrow_copy_constructible_v<T>); // strengthened\r\n\r\n    // validate CPO [rvalue]\r\n    const same_as<R> auto cr4 = views::single(move(value2));\r\n    assert(cr4.data() != nullptr);\r\n    assert(cr4.data() != addressof(value2));\r\n    assert(*cr4.data() == *cr3.data());\r\n    static_assert(noexcept(views::single(move(value))) == is_nothrow_move_constructible_v<T>); // strengthened\r\n\r\n    // validate members inherited from view_interface\r\n    assert(!cr0.empty());\r\n    assert(cr0);\r\n    assert(addressof(cr0.front()) == ptr);\r\n    assert(addressof(cr0.back()) == ptr);\r\n\r\n    return true;\r\n}\r\n\r\n// Validate that single-view-of-single-view nests correctly per P2367R0\r\nstatic_assert(same_as<ranges::single_view<ranges::single_view<int>>, decltype(views::single(views::single(42)))>);\r\n// Validate that views::single decays its argument type correctly per P2367R0\r\nstatic_assert(same_as<ranges::single_view<const char*>, decltype(views::single(\"Hello, World!\"))>);\r\nvoid double_function(double);\r\nstatic_assert(same_as<ranges::single_view<void (*)(double)>, decltype(views::single(double_function))>);\r\n\r\n// Validate that the _Copyable_box primary template works when fed with a non-trivially-destructible type\r\nvoid test_non_trivially_destructible_type() { // COMPILE-ONLY\r\n    struct non_trivially_destructible {\r\n        non_trivially_destructible() = default;\r\n        ~non_trivially_destructible() {}\r\n\r\n        // To test the correct specialization of _Copyable_box, this type must not be copy assignable.\r\n        non_trivially_destructible(const non_trivially_destructible&)            = default;\r\n        non_trivially_destructible& operator=(const non_trivially_destructible&) = delete;\r\n    };\r\n\r\n    (void) views::single(non_trivially_destructible{});\r\n}\r\n\r\nstruct VolatileConstructible {\r\n    VolatileConstructible()                                        = default;\r\n    VolatileConstructible(const VolatileConstructible&)            = default;\r\n    VolatileConstructible(VolatileConstructible&&)                 = default;\r\n    VolatileConstructible& operator=(const VolatileConstructible&) = default;\r\n    VolatileConstructible& operator=(VolatileConstructible&&)      = default;\r\n\r\n    template <class T = VolatileConstructible>\r\n    constexpr VolatileConstructible(const volatile type_identity_t<T>&) noexcept {}\r\n    template <class T = VolatileConstructible>\r\n    constexpr VolatileConstructible(const volatile type_identity_t<T>&&) noexcept {}\r\n};\r\n\r\nstruct ConstSelection {\r\n    ConstSelection()                                 = default;\r\n    ConstSelection(const ConstSelection&)            = default;\r\n    ConstSelection(ConstSelection&&)                 = default;\r\n    ConstSelection& operator=(const ConstSelection&) = default;\r\n    ConstSelection& operator=(ConstSelection&&)      = default;\r\n\r\n    constexpr explicit ConstSelection(int x) noexcept : value{x} {}\r\n\r\n    template <class T = ConstSelection>\r\n    constexpr const ConstSelection& operator=(const type_identity_t<T>&) const noexcept {\r\n        return *this;\r\n    }\r\n\r\n    int value = 0;\r\n};\r\n\r\n#ifndef __EDG__ // TRANSITION, VSO-1898912\r\nstatic_assert(is_trivially_copy_assignable_v<ranges::single_view<ConstSelection>>);\r\n#endif // ^^^ no workaround ^^^\r\nstatic_assert(!is_trivially_copy_assignable_v<ranges::single_view<const ConstSelection>>);\r\n\r\nconstexpr bool test_cv() {\r\n    {\r\n        ranges::single_view<VolatileConstructible> sv{};\r\n        ranges::single_view<VolatileConstructible> sv2{};\r\n        sv = sv2;\r\n        sv = move(sv2);\r\n    }\r\n    {\r\n        ranges::single_view<volatile VolatileConstructible> svv{};\r\n        ranges::single_view<volatile VolatileConstructible> svv2{};\r\n        svv = svv2;\r\n        svv = move(svv2);\r\n    }\r\n    {\r\n        [[maybe_unused]] ranges::single_view<const VolatileConstructible> svc{};\r\n        [[maybe_unused]] ranges::single_view<const volatile VolatileConstructible> svcv{};\r\n    }\r\n    {\r\n        ranges::single_view<ConstSelection> svx{in_place, 0};\r\n        ranges::single_view<ConstSelection> svy{in_place, 42};\r\n        svy = svx;\r\n        assert(svy.front().value == 0);\r\n    }\r\n    {\r\n        ranges::single_view<const ConstSelection> scvx{in_place, 0};\r\n        ranges::single_view<const ConstSelection> scvy{in_place, 42};\r\n        scvy = scvx;\r\n        assert(scvy.front().value == 42);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(test_one_type(42, 42));\r\n    test_one_type(42, 42);\r\n\r\n    static_assert(test_one_type(literal_class{42}, 42));\r\n    test_one_type(literal_class{42}, 42);\r\n\r\n    test_one_type(only_copy_constructible{42}, 42);\r\n    test_one_type(string{\"Hello, World!\"}, \"Hello, World!\");\r\n\r\n    static_assert(test_cv());\r\n    assert(test_cv());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_split/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_split/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <charconv>\r\n#include <ranges>\r\n#include <span>\r\n#include <string_view>\r\n#include <system_error>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\ntemplate <class Rng, class Delimiter>\r\nconcept CanViewSplit = requires(Rng&& r, Delimiter&& d) { views::split(forward<Rng>(r), forward<Delimiter>(d)); };\r\n\r\nconstexpr auto equal_ranges    = [](auto&& left, auto&& right) { return ranges::equal(left, right); };\r\nconstexpr auto text            = \"This is a test, this is only a test.\"sv;\r\nconstexpr auto trailing_empty  = \"test \"sv;\r\nconstexpr auto lwg3505_pattern = \"xxyxxyx\"sv;\r\n\r\ntemplate <bool IsElement>\r\nstruct delimiter_view_impl {\r\n    template <class Base, class>\r\n    using apply = ranges::single_view<ranges::range_value_t<Base>>;\r\n};\r\ntemplate <>\r\nstruct delimiter_view_impl<false> {\r\n    template <class, class Delimiter>\r\n    using apply = views::all_t<Delimiter>;\r\n};\r\ntemplate <class Base, class Delimiter>\r\nusing delimiter_view_t =\r\n    delimiter_view_impl<is_convertible_v<Delimiter, ranges::range_value_t<Base>>>::template apply<Base, Delimiter>;\r\n\r\ntemplate <ranges::forward_range Base, class Delimiter, ranges::forward_range Expected>\r\nconstexpr void test_one(Base&& base, Delimiter&& delimiter, Expected&& expected) {\r\n    static_assert(CanViewSplit<Base, Delimiter>);\r\n    using R = decltype(views::split(forward<Base>(base), forward<Delimiter>(delimiter)));\r\n\r\n    // Validate type properties\r\n    static_assert(ranges::view<R>);\r\n    static_assert(ranges::input_range<R>);\r\n    static_assert(ranges::forward_range<R> == ranges::forward_range<Base>);\r\n    static_assert(!ranges::bidirectional_range<R>);\r\n\r\n    // Validate range adaptor object and range adaptor closure\r\n    using DV           = delimiter_view_t<Base, Delimiter>;\r\n    const auto closure = views::split(delimiter);\r\n\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Base>>;\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewSplit<Base&, Delimiter&> == (!is_view || copy_constructible<remove_cvref_t<Base>>) );\r\n    if constexpr (CanViewSplit<Base&, Delimiter&>) { // Validate lvalue\r\n        constexpr bool is_noexcept =\r\n            (!is_view || is_nothrow_copy_constructible_v<views::all_t<Base&>>) && is_nothrow_copy_constructible_v<DV>;\r\n\r\n        static_assert(same_as<decltype(views::split(base, delimiter)), R>);\r\n        static_assert(noexcept(views::split(base, delimiter)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(base | closure), R>);\r\n        static_assert(noexcept(base | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewSplit<const remove_reference_t<Base>&, Delimiter&>\r\n                  == (!is_view || copy_constructible<remove_cvref_t<Base>>) );\r\n    if constexpr (is_view && copy_constructible<remove_cvref_t<Base>>) {\r\n        constexpr bool is_noexcept =\r\n            is_nothrow_copy_constructible_v<remove_cvref_t<Base>> && is_nothrow_copy_constructible_v<DV>;\r\n\r\n        static_assert(same_as<decltype(views::split(as_const(base), delimiter)), R>);\r\n        static_assert(noexcept(views::split(as_const(base), delimiter)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(base) | closure), R>);\r\n        static_assert(noexcept(as_const(base) | closure) == is_noexcept);\r\n    } else if constexpr (!is_view) {\r\n        using RC                   = ranges::split_view<ranges::ref_view<const remove_reference_t<Base>>, DV>;\r\n        constexpr bool is_noexcept = is_nothrow_constructible_v<RC, const remove_reference_t<Base>&, Delimiter&>;\r\n\r\n        static_assert(same_as<decltype(views::split(as_const(base), delimiter)), RC>);\r\n        static_assert(noexcept(views::split(as_const(base), delimiter)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(base) | closure), RC>);\r\n        static_assert(noexcept(as_const(base) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(\r\n        CanViewSplit<remove_reference_t<Base>, Delimiter&> == (is_view || movable<remove_reference_t<Base>>) );\r\n    if constexpr (is_view) {\r\n        constexpr bool is_noexcept =\r\n            is_nothrow_move_constructible_v<remove_reference_t<Base>> && is_nothrow_copy_constructible_v<DV>;\r\n        static_assert(same_as<decltype(views::split(move(base), delimiter)), R>);\r\n        static_assert(noexcept(views::split(move(base), delimiter)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(base) | closure), R>);\r\n        static_assert(noexcept(move(base) | closure) == is_noexcept);\r\n    } else if constexpr (movable<remove_cvref_t<Base>>) {\r\n        using RS = ranges::split_view<ranges::owning_view<remove_reference_t<Base>>, DV>;\r\n        constexpr bool is_noexcept =\r\n            is_nothrow_move_constructible_v<remove_reference_t<Base>> && is_nothrow_copy_constructible_v<DV>;\r\n\r\n        static_assert(same_as<decltype(views::split(move(base), delimiter)), RS>);\r\n        static_assert(noexcept(views::split(move(base), delimiter)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(base) | closure), RS>);\r\n        static_assert(noexcept(move(base) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewSplit<const remove_reference_t<Base>, Delimiter&>\r\n                  == (is_view && copy_constructible<remove_cvref_t<Base>>) );\r\n    if constexpr (is_view && copy_constructible<remove_cvref_t<Base>>) {\r\n        constexpr bool is_noexcept =\r\n            is_nothrow_copy_constructible_v<remove_cvref_t<Base>> && is_nothrow_copy_constructible_v<DV>;\r\n\r\n        static_assert(same_as<decltype(views::split(move(as_const(base)), delimiter)), R>);\r\n        static_assert(noexcept(views::split(move(as_const(base)), delimiter)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(base)) | closure), R>);\r\n        static_assert(noexcept(move(as_const(base)) | closure) == is_noexcept);\r\n    }\r\n\r\n    // Validate deduction guide\r\n    same_as<R> auto r = ranges::split_view{forward<Base>(base), forward<Delimiter>(delimiter)};\r\n    assert(ranges::equal(r, expected, equal_ranges));\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    const bool is_empty = ranges::empty(expected);\r\n    static_assert(CanMemberEmpty<R> == ranges::forward_range<Base>);\r\n    static_assert(CanBool<R> == ranges::forward_range<Base>);\r\n    if constexpr (ranges::forward_range<Base>) {\r\n        assert(r.empty() == is_empty);\r\n        assert(static_cast<bool>(r) == !is_empty);\r\n    }\r\n\r\n    // Validate split_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    static_assert(!CanBegin<const R&>);\r\n    const auto i = r.begin();\r\n    if (!is_empty) {\r\n        assert(ranges::equal(*i, *ranges::begin(expected)));\r\n    }\r\n\r\n    if constexpr (copyable<R>) {\r\n        auto r2       = r;\r\n        const auto i2 = r2.begin();\r\n        if (!is_empty) {\r\n            assert(ranges::equal(*i2, *i));\r\n        }\r\n    }\r\n\r\n    // Validate split_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    static_assert(!CanEnd<const R&>);\r\n    static_assert(ranges::common_range<R> == ranges::common_range<Base>);\r\n    same_as<ranges::sentinel_t<R>> auto s = r.end();\r\n    assert((r.begin() == s) == is_empty);\r\n\r\n    // Validate view_interface::data\r\n    static_assert(!CanData<R>);\r\n    static_assert(!CanData<const R>);\r\n\r\n    // Validate view_interface::size\r\n    static_assert(!CanSize<R>);\r\n    static_assert(!CanSize<const R>);\r\n\r\n    // Validate view_interface::operator[]\r\n    static_assert(!CanIndex<R>);\r\n    static_assert(!CanIndex<const R>);\r\n\r\n    // Validate view_interface::front\r\n    static_assert(CanMemberFront<R>);\r\n    static_assert(!CanMemberFront<const R>);\r\n    if (!is_empty) {\r\n        assert(ranges::equal(r.front(), *ranges::begin(expected)));\r\n    }\r\n\r\n    // Validate view_interface::back\r\n    static_assert(!CanMemberBack<R>);\r\n    static_assert(!CanMemberBack<const R>);\r\n\r\n    // Validate split_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<views::all_t<Base>>);\r\n    if constexpr (CanMemberBase<const R&>) {\r\n        same_as<views::all_t<Base>> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<views::all_t<Base>>);\r\n        if (!is_empty) {\r\n            assert(*b1.begin() == *ranges::begin(*ranges::begin(expected)));\r\n        }\r\n    }\r\n\r\n    // Validate split_view::base() && (NB: do this last since it leaves r moved-from)\r\n    same_as<views::all_t<Base>> auto b2 = move(r).base();\r\n    static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<views::all_t<Base>>);\r\n    if (!is_empty) {\r\n        assert(*b2.begin() == *ranges::begin(*ranges::begin(expected)));\r\n    }\r\n}\r\n\r\nstruct instantiator {\r\n    static constexpr string_view expected_single[] = {\r\n        \"This\"sv, \"is\"sv, \"a\"sv, \"test,\"sv, \"this\"sv, \"is\"sv, \"only\"sv, \"a\"sv, \"test.\"sv};\r\n    static constexpr string_view expected_range[]    = {\"Th\"sv, \" \"sv, \" a test, th\"sv, \" \"sv, \" only a test.\"sv};\r\n    static constexpr string_view expected_empty[]    = {\"T\"sv, \"h\"sv, \"i\"sv, \"s\"sv, \" \"sv, \"i\"sv, \"s\"sv, \" \"sv, \"a\"sv,\r\n           \" \"sv, \"t\"sv, \"e\"sv, \"s\"sv, \"t\"sv, \",\"sv, \" \"sv, \"t\"sv, \"h\"sv, \"i\"sv, \"s\"sv, \" \"sv, \"i\"sv, \"s\"sv, \" \"sv, //\r\n           \"o\"sv, \"n\"sv, \"l\"sv, \"y\"sv, \" \"sv, \"a\"sv, \" \"sv, \"t\"sv, \"e\"sv, \"s\"sv, \"t\"sv, \".\"sv};\r\n    static constexpr string_view expected_trailing[] = {\"test\"sv, \"\"sv};\r\n    static constexpr string_view expected_lwg3505[]  = {\"x\"sv, \"x\"sv, \"x\"sv};\r\n\r\n    template <class T>\r\n    static constexpr decltype(auto) move_if_needed(T& t) noexcept {\r\n        if constexpr (ranges::view<T> && !copyable<T>) {\r\n            return move(t);\r\n        } else {\r\n            return t;\r\n        }\r\n    }\r\n\r\n    template <ranges::forward_range Read>\r\n    static constexpr void call() {\r\n        { // Single-element delimiter\r\n            Read read{span{text}};\r\n            test_one(move_if_needed(read), ' ', expected_single);\r\n\r\n            Read empty{span<const char, 0>{}};\r\n            test_one(move_if_needed(empty), ' ', views::empty<string_view>);\r\n        }\r\n        { // Empty delimiter\r\n            Read read{span{text}};\r\n            test_one(move_if_needed(read), views::empty<char>, expected_empty);\r\n\r\n            Read empty{span<const char, 0>{}};\r\n            test_one(move_if_needed(empty), views::empty<char>, views::empty<string_view>);\r\n        }\r\n        { // Range delimiter\r\n            Read read{span{text}};\r\n            test_one(move_if_needed(read), \"is\"sv, expected_range);\r\n\r\n            Read empty{span<const char, 0>{}};\r\n            test_one(move_if_needed(empty), \"is\"sv, views::empty<string_view>);\r\n        }\r\n\r\n        { // LWG-3478, trailing empty range\r\n            Read read{span{trailing_empty}};\r\n            test_one(move_if_needed(read), ' ', expected_trailing);\r\n        }\r\n\r\n        { // LWG-3505, multichar pattern\r\n            Read read{span{lwg3505_pattern}};\r\n            test_one(move_if_needed(read), \"xy\"sv, expected_lwg3505);\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, test::CanView IsView, test::Copyability CanCopy>\r\nusing test_range = test::range<Category, const char, test::Sized::no,\r\n    test::CanDifference{derived_from<Category, random_access_iterator_tag>}, IsCommon,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, IsView, CanCopy>;\r\n\r\nconstexpr bool instantiation_test() {\r\n    using test::CanView, test::Common, test::Copyability;\r\n\r\n    // The view is sensitive to:\r\n    // 1. Copyability\r\n    // 2. Commonality\r\n    // 3. Length of delimiter pattern (0/static 1/dynamic) [covered in instantiator::call]\r\n\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, CanView::no, Copyability::immobile>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, CanView::yes, Copyability::move_only>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, CanView::yes, Copyability::copyable>>();\r\n\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, CanView::no, Copyability::immobile>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, CanView::yes, Copyability::move_only>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, CanView::yes, Copyability::copyable>>();\r\n\r\n    { // ensure we get something contiguous\r\n        for (ranges::contiguous_range auto sv : \"127..0..0..1\"sv | views::split(\"..\"sv)) {\r\n            assert(!sv.empty());\r\n        }\r\n    }\r\n\r\n    if (!is_constant_evaluated()) { // test the from_chars example\r\n        auto ip    = \"1.2.3.4\"sv;\r\n        auto parts = ip | views::split('.') | views::transform([](span<const char> s) {\r\n            int i             = 0;\r\n            const auto result = from_chars(s.data(), s.data() + s.size(), i);\r\n            assert(result.ec == errc{});\r\n            return i;\r\n        });\r\n\r\n        int expected = 1;\r\n        for (auto value : parts) {\r\n            assert(value == expected++);\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_devcom_1559808() {\r\n    // Regression test for DevCom-1559808, an interaction between vector and the\r\n    // use of structured bindings in the constexpr evaluator.\r\n\r\n    vector<char> letters{'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 't', 'e', 's', 't'};\r\n    auto r = views::split(letters, ' ');\r\n    auto i = r.begin();\r\n    assert(*(*i).begin() == 'T');\r\n    ++i;\r\n    assert(*(*i).begin() == 'i');\r\n    ++i;\r\n    assert(*(*i).begin() == 'a');\r\n    ++i;\r\n    assert(*(*i).begin() == 't');\r\n    ++i;\r\n    assert(i == r.end());\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_LWG_3590() {\r\n    // LWG-3590: \"split_view::base() const & is overconstrained\"\r\n    struct weird_view : ranges::view_interface<weird_view> {\r\n        weird_view()                        = default;\r\n        weird_view(const weird_view&)       = default;\r\n        weird_view& operator=(weird_view&&) = default;\r\n\r\n        constexpr const int* begin() const {\r\n            return &inner;\r\n        }\r\n        constexpr const int* end() const {\r\n            return &inner + 1;\r\n        }\r\n\r\n        int inner = 42;\r\n    };\r\n    static_assert(ranges::view<weird_view>);\r\n    static_assert(copy_constructible<weird_view>);\r\n    static_assert(!copyable<weird_view>);\r\n\r\n    const auto r                                         = views::split(weird_view{}, 0);\r\n    [[maybe_unused]] const same_as<weird_view> auto copy = r.base();\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(instantiation_test());\r\n    instantiation_test();\r\n\r\n    static_assert(test_devcom_1559808());\r\n    test_devcom_1559808();\r\n\r\n    static_assert(test_LWG_3590());\r\n    assert(test_LWG_3590());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_take/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_take/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <map>\r\n#include <ranges>\r\n#include <span>\r\n#include <sstream>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\n#pragma warning(disable : 6011) // Dereferencing NULL pointer '%s'\r\n\r\nstruct evil_convertible_to_difference {\r\n    evil_convertible_to_difference() = default;\r\n    evil_convertible_to_difference(const evil_convertible_to_difference&) {\r\n        throw 42;\r\n    }\r\n    evil_convertible_to_difference(evil_convertible_to_difference&&) = default;\r\n\r\n    evil_convertible_to_difference& operator=(const evil_convertible_to_difference&) {\r\n        throw 42;\r\n        return *this;\r\n    }\r\n    evil_convertible_to_difference& operator=(evil_convertible_to_difference&&) = default;\r\n\r\n    constexpr operator int() const noexcept {\r\n        return 4;\r\n    }\r\n};\r\n\r\n// Test a silly precomposed range adaptor pipeline\r\nconstexpr auto pipeline = views::take(7) | views::take(6) | views::take(5) | views::take(4);\r\n\r\ntemplate <class>\r\nconstexpr bool is_subrange = false;\r\ntemplate <class I, class S, ranges::subrange_kind K>\r\nconstexpr bool is_subrange<ranges::subrange<I, S, K>> = true;\r\n\r\ntemplate <class>\r\nstruct mapped {\r\n    template <class Rng>\r\n    using apply = ranges::take_view<views::all_t<Rng>>;\r\n};\r\ntemplate <class T>\r\nstruct mapped<ranges::empty_view<T>> {\r\n    template <class>\r\n    using apply = ranges::empty_view<T>;\r\n};\r\ntemplate <class T, size_t N>\r\nstruct mapped<span<T, N>> {\r\n    template <class>\r\n    using apply = span<T>;\r\n};\r\ntemplate <class CharT, class Traits>\r\nstruct mapped<basic_string_view<CharT, Traits>> {\r\n    template <class>\r\n    using apply = basic_string_view<CharT, Traits>;\r\n};\r\ntemplate <class W, class B>\r\n    requires ranges::random_access_range<ranges::iota_view<W, B>> && ranges::sized_range<ranges::iota_view<W, B>>\r\nstruct mapped<ranges::iota_view<W, B>> {\r\n    template <class>\r\n    using apply = ranges::iota_view<W, W>;\r\n};\r\ntemplate <class I, class S>\r\n    requires random_access_iterator<I>\r\nstruct mapped<ranges::subrange<I, S, ranges::subrange_kind::sized>> {\r\n    template <class>\r\n    using apply = ranges::subrange<I, I, ranges::subrange_kind::sized>;\r\n};\r\n\r\ntemplate <ranges::viewable_range Rng>\r\nusing mapped_t = mapped<remove_cvref_t<Rng>>::template apply<Rng>;\r\n\r\ntemplate <ranges::viewable_range Rng>\r\nusing pipeline_t = mapped_t<mapped_t<mapped_t<mapped_t<Rng>>>>;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewTake = requires(Rng&& r) { views::take(forward<Rng>(r), 42); };\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nconstexpr bool test_one(Rng&& rng, Expected&& expected) {\r\n    using ranges::input_range, ranges::forward_range, ranges::bidirectional_range, ranges::random_access_range,\r\n        ranges::contiguous_range;\r\n    using ranges::take_view, ranges::common_range, ranges::enable_borrowed_range, ranges::iterator_t, ranges::prev,\r\n        ranges::range, ranges::sentinel_t, ranges::sized_range, ranges::borrowed_range;\r\n\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n\r\n    using V = views::all_t<Rng>;\r\n    using M = mapped_t<Rng>;\r\n    static_assert(ranges::view<M>);\r\n    static_assert(input_range<M> == input_range<Rng>);\r\n    static_assert(forward_range<M> == forward_range<Rng>);\r\n    static_assert(bidirectional_range<M> == bidirectional_range<Rng>);\r\n    static_assert(random_access_range<M> == random_access_range<Rng>);\r\n    static_assert(contiguous_range<M> == contiguous_range<Rng>);\r\n\r\n    // Validate range adaptor object and range adaptor closure\r\n    constexpr auto closure = views::take(4);\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewTake<Rng&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewTake<Rng&>) {\r\n        constexpr bool is_noexcept = !is_view || (is_nothrow_copy_constructible_v<V> && !is_subrange<V>);\r\n\r\n        static_assert(same_as<decltype(views::take(rng, 4)), M>);\r\n        static_assert(noexcept(views::take(rng, 4)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | closure), M>);\r\n        static_assert(noexcept(rng | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | pipeline), pipeline_t<Rng&>>);\r\n        static_assert(noexcept(rng | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewTake<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V> && !is_subrange<V>;\r\n\r\n        static_assert(same_as<decltype(views::take(as_const(rng), 4)), M>);\r\n        static_assert(noexcept(views::take(as_const(rng), 4)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), M>);\r\n        static_assert(noexcept(as_const(rng) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), pipeline_t<const remove_reference_t<Rng>&>>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (!is_view) {\r\n        using RC                   = mapped_t<const remove_reference_t<Rng>&>;\r\n        constexpr bool is_noexcept = is_nothrow_constructible_v<RC, const remove_reference_t<Rng>&, int>;\r\n\r\n        static_assert(same_as<decltype(views::take(as_const(rng), 4)), RC>);\r\n        static_assert(noexcept(views::take(as_const(rng), 4)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), RC>);\r\n        static_assert(noexcept(as_const(rng) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), pipeline_t<const remove_reference_t<Rng>&>>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(CanViewTake<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (is_view) {\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V> && !is_subrange<V>;\r\n        static_assert(same_as<decltype(views::take(move(rng), 4)), M>);\r\n        static_assert(noexcept(views::take(move(rng), 4)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | closure), M>);\r\n        static_assert(noexcept(move(rng) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), pipeline_t<remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (movable<remove_reference_t<Rng>>) {\r\n        using S                    = ranges::owning_view<remove_reference_t<Rng>>;\r\n        using RS                   = take_view<S>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<remove_reference_t<Rng>>;\r\n\r\n        static_assert(same_as<decltype(views::take(move(rng), 4)), RS>);\r\n        static_assert(noexcept(views::take(move(rng), 4)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | closure), RS>);\r\n        static_assert(noexcept(move(rng) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), mapped_t<mapped_t<mapped_t<RS>>>>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewTake<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V> && !is_subrange<V>;\r\n\r\n        static_assert(same_as<decltype(views::take(move(as_const(rng)), 4)), M>);\r\n        static_assert(noexcept(views::take(move(as_const(rng)), 4)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | closure), M>);\r\n        static_assert(noexcept(move(as_const(rng)) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | pipeline), pipeline_t<const remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(as_const(rng)) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    const bool is_empty = ranges::empty(expected);\r\n\r\n    // Validate deduction guide\r\n    same_as<take_view<V>> auto r = take_view{forward<Rng>(rng), 4};\r\n    using R                      = decltype(r);\r\n    static_assert(ranges::view<R>);\r\n    static_assert(input_range<R> == input_range<Rng>);\r\n    static_assert(forward_range<R> == forward_range<Rng>);\r\n    static_assert(bidirectional_range<R> == bidirectional_range<Rng>);\r\n    static_assert(random_access_range<R> == random_access_range<Rng>);\r\n    static_assert(contiguous_range<R> == contiguous_range<Rng>);\r\n    static_assert(borrowed_range<R> == borrowed_range<V>);\r\n\r\n    // Validate take_view::size\r\n    static_assert(CanMemberSize<R> == CanSize<Rng>);\r\n    if constexpr (CanMemberSize<R>) {\r\n        assert(r.size() == static_cast<decltype(r.size())>(ranges::size(expected)));\r\n    } else {\r\n        static_assert(!CanSize<R>);\r\n    }\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    static_assert(CanMemberEmpty<R> == (sized_range<Rng> || forward_range<Rng>) );\r\n    static_assert(CanBool<R> == CanEmpty<R>);\r\n    if constexpr (CanMemberEmpty<R>) {\r\n        assert(r.empty() == is_empty);\r\n        assert(static_cast<bool>(r) == !is_empty);\r\n    } else {\r\n        static_assert(CanEmpty<R> == CanSize<R>);\r\n        if constexpr (CanEmpty<R>) {\r\n            assert(ranges::empty(r) == is_empty);\r\n            assert(static_cast<bool>(r) == !is_empty);\r\n        }\r\n    }\r\n\r\n    static_assert(CanMemberEmpty<const R> == (sized_range<const Rng> || forward_range<const Rng>) );\r\n    static_assert(CanBool<const R> == CanEmpty<const R>);\r\n    if constexpr (CanMemberEmpty<const R>) {\r\n        assert(as_const(r).empty() == is_empty);\r\n        assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n    } else {\r\n        static_assert(CanEmpty<const R> == CanSize<const R>);\r\n        if constexpr (CanEmpty<const R>) {\r\n            assert(ranges::empty(as_const(r)) == is_empty);\r\n            assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n        }\r\n    }\r\n\r\n    // Validate content\r\n    assert(ranges::equal(r, expected));\r\n\r\n    // Validate take_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    if constexpr (random_access_range<V> && sized_range<V>) {\r\n        static_assert(same_as<iterator_t<R>, iterator_t<V>>);\r\n    } else {\r\n        static_assert(same_as<iterator_t<R>, counted_iterator<iterator_t<V>>>);\r\n    }\r\n    static_assert(CanBegin<const R&> == range<const V>);\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        const same_as<iterator_t<R>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(*i == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2                              = r;\r\n            const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n\r\n        if constexpr (range<const V>) {\r\n            if constexpr (random_access_range<const V> && sized_range<const V>) {\r\n                static_assert(same_as<iterator_t<const R>, iterator_t<const V>>);\r\n            } else {\r\n                static_assert(same_as<iterator_t<const R>, counted_iterator<iterator_t<const V>>>);\r\n            }\r\n\r\n            const same_as<iterator_t<const R>> auto i3 = as_const(r).begin();\r\n            if (!is_empty) {\r\n                assert(*i3 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate take_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    if constexpr (sized_range<V>) {\r\n        if constexpr (random_access_range<V>) {\r\n            static_assert(same_as<sentinel_t<R>, iterator_t<V>>);\r\n        } else {\r\n            static_assert(same_as<sentinel_t<R>, default_sentinel_t>);\r\n        }\r\n    } else {\r\n        // Not much we can do here\r\n        static_assert(!same_as<sentinel_t<R>, iterator_t<V>>);\r\n        static_assert(!same_as<sentinel_t<R>, default_sentinel_t>);\r\n        static_assert(is_class_v<sentinel_t<R>>);\r\n    }\r\n    static_assert(CanEnd<const R&> == range<const V>);\r\n    if (!is_empty) {\r\n        same_as<sentinel_t<R>> auto s = r.end();\r\n        if constexpr (bidirectional_range<R> && common_range<R>) {\r\n            assert(*prev(s) == *prev(end(expected)));\r\n        }\r\n\r\n        if constexpr (range<const V>) {\r\n            same_as<sentinel_t<const R>> auto sc = as_const(r).end();\r\n            if constexpr (bidirectional_range<const R> && common_range<const R>) {\r\n                assert(*prev(sc) == *prev(end(expected)));\r\n            }\r\n\r\n            if (forward_range<V>) { // intentionally not if constexpr\r\n                // Compare with const / non-const iterators\r\n                const same_as<iterator_t<R>> auto i        = r.begin();\r\n                const same_as<iterator_t<const R>> auto ic = as_const(r).begin();\r\n                assert(s != i);\r\n                assert(s != ic);\r\n                assert(sc != i);\r\n                assert(sc != ic);\r\n            }\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    using ranges::const_iterator_t, ranges::const_sentinel_t, ranges::cbegin, ranges::cend;\r\n\r\n    // Validate view_interface::cbegin\r\n    static_assert(CanMemberCBegin<R>);\r\n    if constexpr (random_access_range<V> && sized_range<V>) {\r\n        static_assert(same_as<const_iterator_t<R>, const_iterator_t<V>>);\r\n    } else {\r\n        static_assert(same_as<const_iterator_t<R>, const_iterator<counted_iterator<iterator_t<V>>>>);\r\n    }\r\n    static_assert(CanMemberCBegin<const R&> == input_range<const V>);\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        const same_as<const_iterator_t<R>> auto i = r.cbegin();\r\n        if (!is_empty) {\r\n            assert(*i == *cbegin(expected));\r\n        }\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2                                    = r;\r\n            const same_as<const_iterator_t<R>> auto i2 = r2.cbegin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n\r\n        if constexpr (range<const V>) {\r\n            if constexpr (random_access_range<const V> && sized_range<const V>) {\r\n                static_assert(same_as<const_iterator_t<const R>, const_iterator_t<const V>>);\r\n            } else {\r\n                static_assert(\r\n                    same_as<const_iterator_t<const R>, const_iterator<counted_iterator<iterator_t<const V>>>>);\r\n            }\r\n\r\n            const same_as<const_iterator_t<const R>> auto i3 = as_const(r).cbegin();\r\n            if (!is_empty) {\r\n                assert(*i3 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::cend\r\n    static_assert(CanMemberCEnd<R>);\r\n    if constexpr (sized_range<V>) {\r\n        if constexpr (random_access_range<V>) {\r\n            static_assert(same_as<const_sentinel_t<R>, const_iterator_t<V>>);\r\n        } else {\r\n            static_assert(same_as<const_sentinel_t<R>, default_sentinel_t>);\r\n        }\r\n    } else {\r\n        // Not much we can do here\r\n        static_assert(!same_as<const_sentinel_t<R>, const_iterator_t<V>>);\r\n        static_assert(!same_as<const_sentinel_t<R>, default_sentinel_t>);\r\n        static_assert(is_class_v<const_sentinel_t<R>>);\r\n    }\r\n    static_assert(CanCEnd<const R&> == range<const V>);\r\n    if (!is_empty) {\r\n        same_as<const_sentinel_t<R>> auto s = r.cend();\r\n        if constexpr (bidirectional_range<R> && common_range<R>) {\r\n            assert(*prev(s) == *prev(cend(expected)));\r\n        }\r\n\r\n        if constexpr (range<const V>) {\r\n            same_as<const_sentinel_t<const R>> auto sc = as_const(r).cend();\r\n            if constexpr (bidirectional_range<const R> && common_range<const R>) {\r\n                assert(*prev(sc) == *prev(cend(expected)));\r\n            }\r\n\r\n            if (forward_range<V>) { // intentionally not if constexpr\r\n                // Compare with const / non-const iterators\r\n                const same_as<const_iterator_t<R>> auto i        = r.cbegin();\r\n                const same_as<const_iterator_t<const R>> auto ic = as_const(r).cbegin();\r\n                assert(s != i);\r\n                assert(s != ic);\r\n                assert(sc != i);\r\n                assert(sc != ic);\r\n            }\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    // Validate view_interface::data\r\n    static_assert(CanMemberData<R> == contiguous_range<V>);\r\n    static_assert(CanData<R&> == contiguous_range<V>);\r\n    static_assert(CanData<const R&> == contiguous_range<const V>);\r\n    if constexpr (contiguous_range<V>) {\r\n        const same_as<remove_reference_t<ranges::range_reference_t<V>>*> auto ptr1 = r.data();\r\n        assert(to_address(ptr1) == to_address(r.begin()));\r\n\r\n        if constexpr (contiguous_range<const V>) {\r\n            const same_as<remove_reference_t<ranges::range_reference_t<const V>>*> auto ptr2 = as_const(r).data();\r\n            assert(to_address(ptr2) == to_address(as_const(r).begin()));\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::front and back\r\n    if (!is_empty) {\r\n        static_assert(CanMemberFront<R> == forward_range<V>);\r\n        if constexpr (forward_range<V>) {\r\n            assert(r.front() == *begin(expected));\r\n        }\r\n\r\n        static_assert(CanMemberFront<const R> == forward_range<const V>);\r\n        if constexpr (forward_range<const V>) {\r\n            assert(as_const(r).front() == *begin(expected));\r\n        }\r\n\r\n        static_assert(CanMemberBack<R> == (bidirectional_range<R> && common_range<R>) );\r\n        if constexpr (CanMemberBack<R>) {\r\n            assert(r.back() == *prev(end(expected)));\r\n        }\r\n\r\n        static_assert(CanMemberBack<const R> == (bidirectional_range<const R> && common_range<const R>) );\r\n        if constexpr (CanMemberBack<const R>) {\r\n            assert(as_const(r).back() == *prev(end(expected)));\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::operator[]\r\n    static_assert(CanIndex<R> == random_access_range<V>);\r\n    static_assert(CanIndex<const R> == random_access_range<const V>);\r\n    if (!is_empty) {\r\n        if constexpr (CanIndex<R>) {\r\n            assert(r[0] == *r.begin());\r\n        }\r\n\r\n        if constexpr (CanIndex<const R>) {\r\n            assert(as_const(r)[0] == *as_const(r).begin());\r\n        }\r\n    }\r\n\r\n    // Validate take_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V> && forward_range<V>) {\r\n        same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b1.begin() == *begin(expected));\r\n            if constexpr (bidirectional_range<V> && common_range<V>) {\r\n                assert(*prev(b1.end()) == 7); // NB: depends on the test data\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate take_view::base() && (NB: do this last since it leaves r moved-from)\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        same_as<V> auto b2 = move(r).base();\r\n        static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b2.begin() == *begin(expected));\r\n            if constexpr (bidirectional_range<V> && common_range<V>) {\r\n                assert(*prev(b2.end()) == 7); // NB: depends on the test data\r\n            }\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr int some_ints[]      = {0, 1, 2, 3, 4, 5, 6, 7};\r\nstatic constexpr int only_four_ints[] = {0, 1, 2, 3};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        R r{some_ints};\r\n        test_one(r, only_four_ints);\r\n\r\n        R empty_range{span<const int, 0>{}};\r\n        test_one(empty_range, span<const int, 0>{});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Sized IsSized, test::Common IsCommon>\r\nusing test_range =\r\n    test::range<Category, const int, IsSized, test::CanDifference{derived_from<Category, random_access_iterator_tag>},\r\n        IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n        test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nconstexpr void instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_in<instantiator, const int>();\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    // The view is sensitive to category, size, and commonality, but oblivious to differencing and proxyness.\r\n    using test::Common, test::Sized;\r\n\r\n    instantiator::call<test_range<input_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<input_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<input_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<input_iterator_tag, Sized::yes, Common::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::yes, Common::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::yes, Common::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::yes, Common::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::yes, Common::yes>>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\ntemplate <class Category, test::Sized IsSized, test::Common IsCommon>\r\nusing move_only_view = test::range<Category, const int, IsSized,\r\n    test::CanDifference{derived_from<Category, random_access_iterator_tag>}, IsCommon,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nconstexpr void move_only_test() {\r\n    using test::Common, test::Sized;\r\n    using input      = input_iterator_tag;\r\n    using fwd        = forward_iterator_tag;\r\n    using bidi       = bidirectional_iterator_tag;\r\n    using random     = random_access_iterator_tag;\r\n    using contiguous = contiguous_iterator_tag;\r\n\r\n    test_one(move_only_view<input, Sized::no, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<input, Sized::yes, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<fwd, Sized::no, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<fwd, Sized::yes, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<fwd, Sized::no, Common::yes>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<fwd, Sized::yes, Common::yes>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<bidi, Sized::no, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<bidi, Sized::yes, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<bidi, Sized::no, Common::yes>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<bidi, Sized::yes, Common::yes>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<random, Sized::no, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<random, Sized::yes, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<random, Sized::no, Common::yes>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<random, Sized::yes, Common::yes>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<contiguous, Sized::no, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<contiguous, Sized::yes, Common::no>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<contiguous, Sized::no, Common::yes>{some_ints}, only_four_ints);\r\n    test_one(move_only_view<contiguous, Sized::yes, Common::yes>{some_ints}, only_four_ints);\r\n}\r\n\r\nconstexpr void output_range_test() {\r\n    using R = test::range<output_iterator_tag, int, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n        test::CanCompare::no, test::ProxyRef::yes, test::CanView::yes, test::Copyability::move_only>;\r\n    int some_writable_ints[] = {0, 1, 2, 3};\r\n    static_assert(same_as<decltype(views::take(R{some_writable_ints}, 99999)), ranges::take_view<R>>);\r\n\r\n    // How do I implement \"Fill up to n elements in {output range} with {value}\"?\r\n    ranges::fill(R{some_writable_ints} | views::take(99999), 42);\r\n    assert(ranges::equal(some_writable_ints, initializer_list<int>{42, 42, 42, 42}));\r\n\r\n    ranges::fill(R{some_writable_ints} | views::take(3), 13);\r\n    assert(ranges::equal(some_writable_ints, initializer_list<int>{13, 13, 13, 42}));\r\n}\r\n\r\nvoid test_DevCom_1397309() {\r\n    constexpr int expected[] = {4, 8};\r\n    const map<int, string_view> values{{4, \"Hello\"sv}, {8, \"Beautiful\"sv}, {10, \"World\"sv}};\r\n\r\n    assert(ranges::equal(values | ranges::views::take(2) | ranges::views::keys, expected));\r\n}\r\n\r\nstruct read_some_int_range : ranges::subrange<counted_iterator<istream_iterator<int>>, default_sentinel_t> {\r\n    using ranges::subrange<counted_iterator<istream_iterator<int>>, default_sentinel_t>::subrange;\r\n};\r\n\r\ntemplate <>\r\ninline constexpr bool ranges::disable_sized_range<read_some_int_range> = true;\r\n\r\nvoid test_lwg3737() {\r\n    static_assert(ranges::input_range<read_some_int_range>);\r\n    static_assert(ranges::input_range<const read_some_int_range>);\r\n    static_assert(!ranges::sized_range<read_some_int_range>);\r\n    static_assert(!ranges::sized_range<const read_some_int_range>);\r\n\r\n    istringstream stream{\"0 1 42 1729\"};\r\n    read_some_int_range r{counted_iterator{istream_iterator<int>{stream}, 4}, default_sentinel};\r\n    auto rng = views::take(std::move(r), 2);\r\n\r\n    using result_range = decltype(rng);\r\n    static_assert(\r\n        is_same_v<ranges::iterator_t<result_range>, counted_iterator<counted_iterator<istream_iterator<int>>>>);\r\n    static_assert(is_same_v<ranges::sentinel_t<result_range>, default_sentinel_t>);\r\n\r\n    static_assert(\r\n        is_same_v<ranges::iterator_t<const result_range>, counted_iterator<counted_iterator<istream_iterator<int>>>>);\r\n    static_assert(is_same_v<ranges::sentinel_t<const result_range>, default_sentinel_t>);\r\n\r\n    vector<int> vec{};\r\n    ranges::copy(rng, back_inserter(vec));\r\n\r\n    assert(ranges::size(vec) == 2);\r\n    assert((vec == vector<int>{0, 1}));\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    { // ... copyable\r\n        // Test all of the \"reconstructible range\" types: span, empty_view, subrange, basic_string_view, iota_view\r\n        constexpr span s0{some_ints};\r\n        static_assert(test_one(s0, only_four_ints));\r\n        test_one(s0, only_four_ints);\r\n\r\n        constexpr span<const int> s1{some_ints};\r\n        static_assert(test_one(s1, only_four_ints));\r\n        test_one(s1, only_four_ints);\r\n\r\n        static_assert(test_one(ranges::subrange{some_ints}, only_four_ints));\r\n        test_one(ranges::subrange{some_ints}, only_four_ints);\r\n\r\n        static_assert(test_one(views::empty<int>, span<const int, 0>{}));\r\n        test_one(views::empty<int>, span<const int, 0>{});\r\n\r\n        static_assert(test_one(basic_string_view{ranges::begin(some_ints), ranges::end(some_ints)}, only_four_ints));\r\n        test_one(basic_string_view{ranges::begin(some_ints), ranges::end(some_ints)}, only_four_ints);\r\n\r\n        static_assert(test_one(ranges::iota_view{0, 8}, only_four_ints));\r\n        test_one(ranges::iota_view{0, 8}, only_four_ints);\r\n    }\r\n    // ... move-only\r\n    static_assert((move_only_test(), true));\r\n    move_only_test();\r\n\r\n    // Validate non-views\r\n    {\r\n        static_assert(test_one(some_ints, only_four_ints));\r\n        test_one(some_ints, only_four_ints);\r\n    }\r\n    {\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_one(vec, only_four_ints);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_one(lst, only_four_ints);\r\n    }\r\n\r\n    // Validate an output range\r\n    static_assert((output_range_test(), true));\r\n    output_range_test();\r\n\r\n    static_assert((instantiation_test(), true));\r\n    instantiation_test();\r\n\r\n    {\r\n        // Validate a view borrowed range\r\n        constexpr auto v =\r\n            views::iota(0ull, ranges::size(some_ints)) | views::transform([](auto i) { return some_ints[i]; });\r\n        static_assert(test_one(v, only_four_ints));\r\n        test_one(v, only_four_ints);\r\n    }\r\n\r\n    { // Validate that we can use something that is convertible to integral (GH-1957)\r\n        constexpr span s{some_ints};\r\n        auto r1 = s | views::take(integral_constant<int, 4>{});\r\n        assert(ranges::equal(r1, only_four_ints));\r\n\r\n        auto r2 = s | views::take(evil_convertible_to_difference{});\r\n        assert(ranges::equal(r2, only_four_ints));\r\n    }\r\n\r\n    test_DevCom_1397309();\r\n\r\n    test_lwg3737();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_take_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_take_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <ranges>\r\n\r\n#include <test_death.hpp>\r\nusing namespace std;\r\n\r\nconstexpr int some_ints[] = {0, 1, 2, 3};\r\n\r\nvoid test_constructor_negative_size() {\r\n    (void) views::take(some_ints, -3); // Number of elements to take must be non-negative\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_constructor_negative_size,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_take_while/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_take_while/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\n#include <iostream>\r\n\r\n// Test a silly precomposed range adaptor pipeline\r\ntemplate <int X>\r\nconstexpr auto is_less_than = [](const auto& x) { return x < X; };\r\n\r\nusing Pred = remove_const_t<decltype(is_less_than<3>)>;\r\nstatic_assert(is_nothrow_copy_constructible_v<Pred> && is_nothrow_move_constructible_v<Pred>);\r\n\r\nconstexpr auto pipeline = views::take_while(is_less_than<3>) | views::take_while(is_less_than<3>)\r\n                        | views::take_while(is_less_than<3>) | views::take_while(is_less_than<3>);\r\n\r\ntemplate <class Rng, class V = views::all_t<Rng>>\r\nusing pipeline_t = ranges::take_while_view<\r\n    ranges::take_while_view<ranges::take_while_view<ranges::take_while_view<V, Pred>, Pred>, Pred>, Pred>;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewTakeWhile = requires(Rng&& r) { views::take_while(forward<Rng>(r), is_less_than<3>); };\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nconstexpr bool test_one(Rng&& rng, Expected&& expected) {\r\n    using ranges::take_while_view, ranges::bidirectional_range, ranges::common_range, ranges::contiguous_range,\r\n        ranges::enable_borrowed_range, ranges::forward_range, ranges::iterator_t, ranges::prev,\r\n        ranges::random_access_range;\r\n\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n\r\n    using V = views::all_t<Rng>;\r\n    using R = take_while_view<V, Pred>;\r\n    static_assert(ranges::view<R>);\r\n    static_assert(ranges::input_range<R>);\r\n    static_assert(forward_range<R> == forward_range<Rng>);\r\n    static_assert(bidirectional_range<R> == bidirectional_range<Rng>);\r\n    static_assert(random_access_range<R> == random_access_range<Rng>);\r\n    static_assert(contiguous_range<R> == contiguous_range<Rng>);\r\n\r\n    // Validate range adaptor object and range adaptor closure\r\n    constexpr auto closure = views::take_while(is_less_than<3>);\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewTakeWhile<Rng&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewTakeWhile<Rng&>) { // Validate lvalue\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::take_while(rng, is_less_than<3>)), R>);\r\n        static_assert(noexcept(views::take_while(rng, is_less_than<3>)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | closure), R>);\r\n        static_assert(noexcept(rng | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | pipeline), pipeline_t<Rng&>>);\r\n        static_assert(noexcept(rng | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewTakeWhile<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::take_while(as_const(rng), is_less_than<3>)), R>);\r\n        static_assert(noexcept(views::take_while(as_const(rng), is_less_than<3>)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), R>);\r\n        static_assert(noexcept(as_const(rng) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), pipeline_t<const remove_reference_t<Rng>&>>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (!is_view) {\r\n        using RC                   = take_while_view<ranges::ref_view<const remove_reference_t<Rng>>, Pred>;\r\n        constexpr bool is_noexcept = true;\r\n\r\n        static_assert(same_as<decltype(views::take_while(as_const(rng), is_less_than<3>)), RC>);\r\n        static_assert(noexcept(views::take_while(as_const(rng), is_less_than<3>)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), RC>);\r\n        static_assert(noexcept(as_const(rng) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), pipeline_t<const remove_reference_t<Rng>&>>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(CanViewTakeWhile<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (is_view) {\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n        static_assert(same_as<decltype(views::take_while(move(rng), is_less_than<3>)), R>);\r\n        static_assert(noexcept(views::take_while(move(rng), is_less_than<3>)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | closure), R>);\r\n        static_assert(noexcept(move(rng) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), pipeline_t<remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (movable<remove_reference_t<Rng>>) {\r\n        using S                    = ranges::owning_view<remove_reference_t<Rng>>;\r\n        using RS                   = take_while_view<S, Pred>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<remove_reference_t<Rng>>;\r\n\r\n        static_assert(same_as<decltype(views::take_while(move(rng), is_less_than<3>)), RS>);\r\n        static_assert(noexcept(views::take_while(move(rng), is_less_than<3>)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | closure), RS>);\r\n        static_assert(noexcept(move(rng) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), pipeline_t<remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewTakeWhile<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::take_while(move(as_const(rng)), is_less_than<3>)), R>);\r\n        static_assert(noexcept(views::take_while(move(as_const(rng)), is_less_than<3>)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | closure), R>);\r\n        static_assert(noexcept(move(as_const(rng)) | closure) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | pipeline), pipeline_t<const remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(as_const(rng)) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // Validate deduction guide\r\n    same_as<R> auto r = take_while_view{forward<Rng>(rng), is_less_than<3>};\r\n    assert(ranges::equal(r, expected));\r\n\r\n    { // Validate take_while_view::pred\r\n        [[maybe_unused]] same_as<Pred> auto pred_copy = as_const(r).pred();\r\n        static_assert(noexcept(as_const(r).pred()));\r\n    }\r\n\r\n    const bool is_empty = ranges::empty(expected);\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    static_assert(CanMemberEmpty<R> == forward_range<Rng>);\r\n    static_assert(CanBool<R> == CanEmpty<R>);\r\n    if constexpr (CanMemberEmpty<R>) {\r\n        assert(r.empty() == is_empty);\r\n        assert(static_cast<bool>(r) == !is_empty);\r\n    } else {\r\n        static_assert(CanEmpty<R> == CanSize<R>);\r\n        if constexpr (CanEmpty<R>) {\r\n            assert(ranges::empty(r) == is_empty);\r\n            assert(static_cast<bool>(r) == !is_empty);\r\n        }\r\n    }\r\n\r\n    static_assert(CanMemberEmpty<const R> == forward_range<const Rng>);\r\n    static_assert(CanBool<const R> == CanEmpty<const R>);\r\n    if constexpr (CanMemberEmpty<const R>) {\r\n        assert(as_const(r).empty() == is_empty);\r\n        assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n    } else {\r\n        static_assert(CanEmpty<const R> == CanSize<const R>);\r\n        if constexpr (CanEmpty<const R>) {\r\n            assert(ranges::empty(as_const(r)) == is_empty);\r\n            assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n        }\r\n    }\r\n\r\n    // Validate take_while_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    static_assert(\r\n        CanMemberBegin<const R> == ranges::range<const R> && indirect_unary_predicate<const Pred, iterator_t<const V>>);\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        const same_as<iterator_t<R>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(*i == *begin(expected));\r\n            assert(*r.begin() == *begin(expected));\r\n            assert(*r.begin() == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2                              = r;\r\n            const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n                assert(*r2.begin() == *i2);\r\n                assert(*r2.begin() == *i2);\r\n            }\r\n        }\r\n\r\n        const same_as<iterator_t<const R>> auto ic = as_const(r).begin();\r\n        if (!is_empty) {\r\n            assert(*ic == *begin(expected));\r\n            assert(*as_const(r).begin() == *begin(expected));\r\n            assert(*as_const(r).begin() == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto rc2                                    = as_const(r);\r\n            const same_as<iterator_t<const R>> auto ic2 = rc2.begin();\r\n            if (!is_empty) {\r\n                assert(*ic2 == *ic);\r\n                assert(*rc2.begin() == *ic2);\r\n                assert(*rc2.begin() == *ic2);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate take_while_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    static_assert(\r\n        CanMemberEnd<const R> == ranges::range<const R> && indirect_unary_predicate<const Pred, iterator_t<const V>>);\r\n    static_assert(CanEnd<const R&> == CanMemberEnd<const R>);\r\n    static_assert(!common_range<R>);\r\n    static_assert(!common_range<const R>);\r\n    if (!is_empty) {\r\n        same_as<ranges::sentinel_t<R>> auto s        = r.end();\r\n        same_as<ranges::sentinel_t<const R>> auto sc = as_const(r).end();\r\n\r\n        if (forward_range<V>) { // intentionally not if constexpr\r\n            // Compare with const / non-const iterators\r\n            assert(s != r.begin());\r\n            assert(s != as_const(r).begin());\r\n            assert(sc != r.begin());\r\n            assert(sc != as_const(r).begin());\r\n\r\n            // Compare with end of range\r\n            if constexpr (common_range<V>) {\r\n                assert(s == s.base());\r\n                assert(s == sc.base());\r\n                assert(sc == s.base());\r\n                assert(sc == sc.base());\r\n            } else if constexpr (forward_range<V> && is_lvalue_reference_v<Rng>) {\r\n                auto full_range   = views::take_while(rng, [](const auto&) { return true; });\r\n                const auto length = 8; // NB: depends on the test data\r\n                assert(full_range.end() == next(full_range.begin(), length));\r\n                assert(full_range.end() == next(as_const(full_range).begin(), length));\r\n                assert(as_const(full_range).end() == next(full_range.begin(), length));\r\n                assert(as_const(full_range).end() == next(as_const(full_range).begin(), length));\r\n            }\r\n\r\n            // Compare with iterator whose predicate evaluates to false\r\n            if constexpr (forward_range<V>) {\r\n                const auto length = 4; // NB: depends on the test data\r\n                assert(s == next(r.begin(), length));\r\n                assert(s == next(as_const(r).begin(), length));\r\n                assert(sc == next(r.begin(), length));\r\n                assert(sc == next(as_const(r).begin(), length));\r\n            }\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    using ranges::const_iterator_t, ranges::const_sentinel_t, ranges::cbegin, ranges::cend;\r\n\r\n    // Validate view_interface::cbegin\r\n    static_assert(CanMemberCBegin<R>);\r\n    static_assert(CanMemberCBegin<const R> == ranges::range<const R>);\r\n    static_assert(indirect_unary_predicate<const Pred, const_iterator_t<const V>>);\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        const same_as<const_iterator_t<R>> auto i = r.cbegin();\r\n        if (!is_empty) {\r\n            assert(*i == *cbegin(expected));\r\n            assert(*r.cbegin() == *cbegin(expected));\r\n        }\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2                                    = r;\r\n            const same_as<const_iterator_t<R>> auto i2 = r2.cbegin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n                assert(*r2.cbegin() == *i2);\r\n            }\r\n        }\r\n\r\n        const same_as<const_iterator_t<const R>> auto ic = as_const(r).cbegin();\r\n        if (!is_empty) {\r\n            assert(*ic == *cbegin(expected));\r\n            assert(*as_const(r).cbegin() == *cbegin(expected));\r\n        }\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto rc2                                          = as_const(r);\r\n            const same_as<const_iterator_t<const R>> auto ic2 = rc2.cbegin();\r\n            if (!is_empty) {\r\n                assert(*ic2 == *ic);\r\n                assert(*rc2.cbegin() == *ic2);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::cend\r\n    static_assert(CanMemberCEnd<R>);\r\n    static_assert(CanMemberCEnd<const R> == ranges::range<const R>);\r\n    static_assert(indirect_unary_predicate<const Pred, const_iterator_t<const V>>);\r\n    static_assert(CanCEnd<const R&> == CanMemberCEnd<const R>);\r\n    static_assert(!common_range<R>);\r\n    static_assert(!common_range<const R>);\r\n    if (!is_empty) {\r\n        same_as<const_sentinel_t<R>> auto s        = r.cend();\r\n        same_as<const_sentinel_t<const R>> auto sc = as_const(r).cend();\r\n\r\n        if (forward_range<V>) { // intentionally not if constexpr\r\n            // Compare with const / non-const iterators\r\n            assert(s != r.cbegin());\r\n            assert(s != as_const(r).cbegin());\r\n            assert(sc != r.cbegin());\r\n            assert(sc != as_const(r).cbegin());\r\n\r\n            // Compare with end of range\r\n            if constexpr (common_range<V>) {\r\n                assert(s == s.base());\r\n                assert(s == sc.base());\r\n                assert(sc == s.base());\r\n                assert(sc == sc.base());\r\n            } else if constexpr (forward_range<V> && is_lvalue_reference_v<Rng>) {\r\n                auto full_range   = views::take_while(rng, [](const auto&) { return true; });\r\n                const auto length = 8; // NB: depends on the test data\r\n                assert(full_range.cend() == next(full_range.cbegin(), length));\r\n                assert(full_range.cend() == next(as_const(full_range).cbegin(), length));\r\n                assert(as_const(full_range).cend() == next(full_range.cbegin(), length));\r\n                assert(as_const(full_range).cend() == next(as_const(full_range).cbegin(), length));\r\n            }\r\n\r\n            // Compare with iterator whose predicate evaluates to false\r\n            if constexpr (forward_range<V>) {\r\n                const auto length = 4; // NB: depends on the test data\r\n                assert(s == next(r.cbegin(), length));\r\n                assert(s == next(as_const(r).cbegin(), length));\r\n                assert(sc == next(r.cbegin(), length));\r\n                assert(sc == next(as_const(r).cbegin(), length));\r\n            }\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    // Validate view_interface::data\r\n    if constexpr (CanData<R&>) {\r\n        const same_as<remove_reference_t<ranges::range_reference_t<V>>*> auto ptr1 = r.data();\r\n        assert(ptr1 == to_address(r.begin()));\r\n    }\r\n\r\n    if constexpr (CanData<const R&>) {\r\n        const same_as<remove_reference_t<ranges::range_reference_t<const V>>*> auto ptr2 = as_const(r).data();\r\n        assert(ptr2 == to_address(as_const(r).begin()));\r\n    }\r\n\r\n    // Validate view_interface::size\r\n    static_assert(!CanMemberSize<R>);\r\n    static_assert(!CanMemberSize<const R>);\r\n\r\n    // Validate view_interface::operator[]\r\n    static_assert(CanIndex<R> == random_access_range<V>);\r\n    if constexpr (CanIndex<R>) {\r\n        if (!is_empty) {\r\n            assert(r[0] == *r.begin());\r\n        }\r\n    }\r\n    static_assert(CanIndex<const R> == random_access_range<const V>);\r\n    if constexpr (CanIndex<const R>) {\r\n        if (!is_empty) {\r\n            assert(as_const(r)[0] == *as_const(r).begin());\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::front and back\r\n    static_assert(CanMemberFront<R> == forward_range<V>);\r\n    if constexpr (CanMemberFront<R>) {\r\n        if (!is_empty) {\r\n            assert(r.front() == *begin(expected));\r\n        }\r\n    }\r\n    static_assert(CanMemberFront<const R> == forward_range<const V>);\r\n    if constexpr (CanMemberFront<const R>) {\r\n        if (!is_empty) {\r\n            assert(as_const(r).front() == *begin(expected));\r\n        }\r\n    }\r\n\r\n    static_assert(CanMemberBack<R> == (bidirectional_range<R> && common_range<R>) );\r\n    if constexpr (CanMemberBack<R>) {\r\n        if (!is_empty) {\r\n            assert(r.back() == *prev(end(expected)));\r\n        }\r\n    }\r\n    static_assert(CanMemberBack<const R> == (bidirectional_range<const R> && common_range<const R>) );\r\n    if constexpr (CanMemberBack<const R>) {\r\n        if (!is_empty) {\r\n            assert(as_const(r).back() == *prev(end(expected)));\r\n        }\r\n    }\r\n\r\n    // Validate take_while_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V> && forward_range<V>) {\r\n        same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b1.begin() == 0); // NB: depends on the test data\r\n            if constexpr (bidirectional_range<V> && common_range<V>) {\r\n                assert(*prev(b1.end()) == 1); // NB: depends on the test data\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate take_while_view::base() && (NB: do this last since it leaves r moved-from)\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        same_as<V> auto b2 = move(r).base();\r\n        static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b2.begin() == 0); // NB: depends on the test data\r\n            if constexpr (bidirectional_range<V> && common_range<V>) {\r\n                assert(*prev(b2.end()) == 1); // NB: depends on the test data\r\n            }\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\nstatic constexpr int some_ints[]               = {0, 1, 2, 3, 4, 3, 2, 1};\r\nstatic constexpr int expected_output[]         = {0, 1, 2};\r\nstatic constexpr int expected_output_reverse[] = {2, 1};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        R r{some_ints};\r\n        test_one(r, expected_output);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon>\r\nusing test_range = test::range<Category, const int, test::Sized::no,\r\n    test::CanDifference{derived_from<Category, random_access_iterator_tag>}, IsCommon,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nconstexpr void instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_in<instantiator, const int>();\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    // The view is sensitive to category and commonality, but oblivious to size, differencing, and proxyness.\r\n    using test::Common;\r\n\r\n    instantiator::call<test_range<input_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes>>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nint main() {\r\n    // Validate views\r\n    { // ... copyable\r\n        constexpr span<const int> s{some_ints};\r\n        static_assert(test_one(s, expected_output));\r\n        test_one(s, expected_output);\r\n    }\r\n    { // ... move-only\r\n        test_one(move_only_view<input_iterator_tag, test::Common::no>{some_ints}, expected_output);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, expected_output);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, expected_output);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, expected_output);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, expected_output);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, expected_output);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, expected_output);\r\n    }\r\n\r\n    // Validate non-views\r\n    {\r\n        static_assert(test_one(some_ints, expected_output));\r\n        test_one(some_ints, expected_output);\r\n    }\r\n    {\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_one(vec, expected_output);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_one(lst, expected_output);\r\n    }\r\n\r\n    // take_while/reverse interaction test\r\n    {\r\n        auto twr_pipe = views::take_while(is_less_than<3>) | views::reverse;\r\n        auto rtw_pipe = views::reverse | views::take_while(is_less_than<3>);\r\n\r\n        auto r0  = some_ints | twr_pipe;\r\n        using R0 = decltype(r0);\r\n        static_assert(ranges::bidirectional_range<R0> && ranges::view<R0>);\r\n        assert(ranges::equal(r0, views::reverse(expected_output)));\r\n\r\n        auto r1  = some_ints | rtw_pipe;\r\n        using R1 = decltype(r1);\r\n        static_assert(ranges::bidirectional_range<R1> && ranges::view<R1>);\r\n        assert(ranges::equal(r1, views::reverse(expected_output_reverse)));\r\n    }\r\n\r\n    { // empty range\r\n        static_assert(test_one(span<const int, 0>{}, span<const int, 0>{}));\r\n        test_one(span<const int, 0>{}, span<const int, 0>{});\r\n    }\r\n\r\n    static_assert((instantiation_test(), true));\r\n    instantiation_test();\r\n\r\n    { // Validate guarantee that predicates are moved into the range adaptor closure, and into the view\r\n        // object from an rvalue closure\r\n        struct Fn {\r\n            Fn()     = default;\r\n            Fn(Fn&&) = default;\r\n            Fn(const Fn&) {\r\n                assert(false);\r\n            }\r\n            Fn& operator=(Fn&&) = default;\r\n\r\n            Fn& operator=(const Fn&) {\r\n                assert(false);\r\n                return *this;\r\n            }\r\n\r\n            bool operator()(int) const {\r\n                return true;\r\n            }\r\n        };\r\n\r\n        (void) views::take_while(Fn{})(span<int>{});\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_take_while_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_take_while_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <ranges>\r\n#include <span>\r\n\r\n#include <test_death.hpp>\r\nusing namespace std;\r\n\r\nstruct test_predicate {\r\n    struct tag {};\r\n\r\n    test_predicate() = default;\r\n    test_predicate(const test_predicate&) {\r\n        throw tag{};\r\n    }\r\n    test_predicate& operator=(const test_predicate&) = delete;\r\n\r\n    constexpr bool operator()(int i) const {\r\n        return i == 42;\r\n    }\r\n};\r\n\r\nauto with_no_predicate() {\r\n    using TWV = decltype(ranges::take_while_view{span<int, 0>{}, test_predicate{}});\r\n    TWV r;\r\n    try {\r\n        r = TWV{};\r\n    } catch (const test_predicate::tag&) {\r\n    }\r\n    return r;\r\n}\r\n\r\nvoid test_view_predicate() {\r\n    auto r = with_no_predicate();\r\n    (void) r.pred(); // take_while_view has no predicate\r\n}\r\n\r\nvoid test_view_end() {\r\n    auto r = with_no_predicate();\r\n    (void) r.end(); // cannot call end on a take_while_view with no predicate\r\n}\r\n\r\nvoid test_view_const_end() {\r\n    const auto r = with_no_predicate();\r\n    (void) r.end(); // cannot call end on a take_while_view with no predicate\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_view_predicate,\r\n        test_view_end,\r\n        test_view_const_end,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_transform/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_transform/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\n#define NOEXCEPT_IDL0(...) noexcept(__VA_ARGS__)\r\n#else\r\n#define NOEXCEPT_IDL0(...) true\r\n#endif // _ITERATOR_DEBUG_LEVEL == 0\r\n\r\n// Test a silly precomposed range adaptor pipeline\r\nconstexpr auto add8 = [](const auto& x) noexcept { return x + 8; };\r\n\r\nusing Fun = remove_const_t<decltype(add8)>;\r\nstatic_assert(is_nothrow_copy_constructible_v<Fun> && is_nothrow_move_constructible_v<Fun>);\r\n\r\nconstexpr auto pipeline =\r\n    views::transform(add8) | views::transform(add8) | views::transform(add8) | views::transform(add8);\r\n\r\ntemplate <class Rng, class V = views::all_t<Rng>>\r\nusing pipeline_t =\r\n    ranges::transform_view<ranges::transform_view<ranges::transform_view<ranges::transform_view<V, Fun>, Fun>, Fun>,\r\n        Fun>;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewTransform = requires(Rng&& r) { views::transform(forward<Rng>(r), add8); };\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nconstexpr bool test_one(Rng&& rng, Expected&& expected) {\r\n    using ranges::transform_view, ranges::bidirectional_range, ranges::common_range, ranges::contiguous_range,\r\n        ranges::enable_borrowed_range, ranges::forward_range, ranges::input_range, ranges::iterator_t, ranges::prev,\r\n        ranges::random_access_range, ranges::sized_range, ranges::range, ranges::range_reference_t, ranges::sentinel_t;\r\n\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n\r\n    using V  = views::all_t<Rng>;\r\n    using TV = transform_view<V, Fun>;\r\n    static_assert(ranges::view<TV>);\r\n    static_assert(input_range<TV>);\r\n    static_assert(forward_range<TV> == forward_range<Rng>);\r\n    static_assert(bidirectional_range<TV> == bidirectional_range<Rng>);\r\n    static_assert(random_access_range<TV> == random_access_range<Rng>);\r\n    static_assert(!contiguous_range<TV>);\r\n\r\n    // Validate range adaptor object and range adaptor closure\r\n    constexpr auto transform_incr = views::transform(add8);\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewTransform<Rng&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewTransform<Rng&>) { // Validate lvalue\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::transform(rng, add8)), TV>);\r\n        static_assert(noexcept(views::transform(rng, add8)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | transform_incr), TV>);\r\n        static_assert(noexcept(rng | transform_incr) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | pipeline), pipeline_t<Rng&>>);\r\n        static_assert(noexcept(rng | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewTransform<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::transform(as_const(rng), add8)), TV>);\r\n        static_assert(noexcept(views::transform(as_const(rng), add8)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | transform_incr), TV>);\r\n        static_assert(noexcept(as_const(rng) | transform_incr) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), pipeline_t<const remove_reference_t<Rng>&>>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (!is_view) {\r\n        using RC                   = transform_view<ranges::ref_view<const remove_reference_t<Rng>>, Fun>;\r\n        constexpr bool is_noexcept = true;\r\n\r\n        static_assert(same_as<decltype(views::transform(as_const(rng), add8)), RC>);\r\n        static_assert(noexcept(views::transform(as_const(rng), add8)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | transform_incr), RC>);\r\n        static_assert(noexcept(as_const(rng) | transform_incr) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | pipeline), pipeline_t<const remove_reference_t<Rng>&>>);\r\n        static_assert(noexcept(as_const(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(CanViewTransform<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (is_view) {\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n        static_assert(same_as<decltype(views::transform(move(rng), add8)), TV>);\r\n        static_assert(noexcept(views::transform(move(rng), add8)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | transform_incr), TV>);\r\n        static_assert(noexcept(move(rng) | transform_incr) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), pipeline_t<remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    } else if constexpr (enable_borrowed_range<remove_cvref_t<Rng>>) {\r\n        using S                    = ranges::owning_view<remove_reference_t<Rng>>;\r\n        using RS                   = transform_view<S, Fun>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<remove_reference_t<Rng>>;\r\n\r\n        static_assert(same_as<decltype(views::transform(move(rng), add8)), RS>);\r\n        static_assert(noexcept(views::transform(move(rng), add8)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | transform_incr), RS>);\r\n        static_assert(noexcept(move(rng) | transform_incr) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | pipeline), pipeline_t<remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(rng) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewTransform<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n    if constexpr (is_view && copy_constructible<V>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::transform(move(as_const(rng)), add8)), TV>);\r\n        static_assert(noexcept(views::transform(move(as_const(rng)), add8)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | transform_incr), TV>);\r\n        static_assert(noexcept(move(as_const(rng)) | transform_incr) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | pipeline), pipeline_t<const remove_reference_t<Rng>>>);\r\n        static_assert(noexcept(move(as_const(rng)) | pipeline) == is_noexcept);\r\n    }\r\n\r\n    const bool is_empty = ranges::empty(expected);\r\n\r\n    // Validate deduction guide\r\n    same_as<TV> auto r = transform_view{forward<Rng>(rng), add8};\r\n    using R            = decltype(r);\r\n    static_assert(ranges::view<R>);\r\n    static_assert(input_range<R>);\r\n    static_assert(forward_range<R> == forward_range<Rng>);\r\n    static_assert(bidirectional_range<R> == bidirectional_range<Rng>);\r\n    static_assert(random_access_range<R> == random_access_range<Rng>);\r\n    static_assert(!contiguous_range<R>);\r\n\r\n    // Validate transform_view::size\r\n    static_assert(CanMemberSize<R> == CanSize<V>);\r\n    static_assert(CanSize<R> == CanMemberSize<R>);\r\n    static_assert(CanMemberSize<const R> == CanSize<const V>);\r\n    static_assert(CanSize<const R> == CanMemberSize<const R>);\r\n    if constexpr (CanMemberSize<R>) {\r\n        assert(r.size() == static_cast<decltype(r.size())>(ranges::size(expected)));\r\n        if constexpr (CanMemberSize<const R>) {\r\n            assert(as_const(r).size() == static_cast<decltype(r.size())>(ranges::size(expected)));\r\n        }\r\n    }\r\n\r\n    constexpr bool const_invocable = regular_invocable<const Fun&, range_reference_t<const V>>;\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    static_assert(CanMemberEmpty<R> == (sized_range<Rng> || forward_range<Rng>) );\r\n    static_assert(CanBool<R> == CanEmpty<R>);\r\n    if constexpr (CanMemberEmpty<R>) {\r\n        assert(r.empty() == is_empty);\r\n        assert(static_cast<bool>(r) == !is_empty);\r\n    } else {\r\n        static_assert(CanEmpty<R> == CanSize<R>);\r\n        if constexpr (CanEmpty<R>) {\r\n            assert(ranges::empty(r) == is_empty);\r\n            assert(static_cast<bool>(r) == !is_empty);\r\n        }\r\n    }\r\n\r\n    static_assert(CanMemberEmpty<const R> == ((sized_range<const Rng> || forward_range<const Rng>) && const_invocable));\r\n    static_assert(CanBool<const R> == CanEmpty<const R>);\r\n    if constexpr (CanMemberEmpty<const R>) {\r\n        assert(as_const(r).empty() == is_empty);\r\n        assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n    } else {\r\n        static_assert(CanEmpty<const R> == CanSize<const R>);\r\n        if constexpr (CanEmpty<const R>) {\r\n            assert(ranges::empty(as_const(r)) == is_empty);\r\n            assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n        }\r\n    }\r\n\r\n    // Validate content\r\n    assert(ranges::equal(r, expected));\r\n\r\n    // Validate transform_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    static_assert(CanBegin<const R&> == (range<const V> && const_invocable));\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        const same_as<iterator_t<R>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(*i == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            auto r2                              = r;\r\n            const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n\r\n        if constexpr (CanBegin<const R&>) {\r\n            const same_as<iterator_t<const R>> auto i3 = as_const(r).begin();\r\n            if (!is_empty) {\r\n                assert(*i3 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate transform_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    static_assert(CanEnd<const R&> == (range<const V> && const_invocable));\r\n    if (!is_empty) {\r\n        same_as<sentinel_t<R>> auto s = r.end();\r\n        static_assert(is_same_v<sentinel_t<R>, iterator_t<R>> == common_range<V>);\r\n        if constexpr (bidirectional_range<R> && common_range<R>) {\r\n            assert(*prev(s) == *prev(end(expected)));\r\n        }\r\n\r\n        if constexpr (CanEnd<const R&>) {\r\n            same_as<sentinel_t<const R>> auto sc = as_const(r).end();\r\n            static_assert(is_same_v<sentinel_t<const R>, iterator_t<const R>> == common_range<const V>);\r\n            if constexpr (bidirectional_range<const R> && common_range<const R>) {\r\n                assert(*prev(sc) == *prev(end(expected)));\r\n            }\r\n\r\n            if (forward_range<V>) { // intentionally not if constexpr\r\n                // Compare with const / non-const iterators\r\n                const same_as<iterator_t<R>> auto i        = r.begin();\r\n                const same_as<iterator_t<const R>> auto ic = as_const(r).begin();\r\n                assert(s != i);\r\n                assert(s != ic);\r\n                assert(sc != i);\r\n                assert(sc != ic);\r\n            }\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    using ranges::const_iterator_t, ranges::const_sentinel_t;\r\n\r\n    // Validate view_interface::cbegin\r\n    static_assert(CanMemberCBegin<R>);\r\n    static_assert(CanMemberCBegin<const R&> == (range<const V> && const_invocable));\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        const same_as<const_iterator_t<R>> auto ci = r.cbegin();\r\n        if (!is_empty) {\r\n            assert(*ci == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            auto r2                                     = r;\r\n            const same_as<const_iterator_t<R>> auto ci2 = r2.cbegin();\r\n            if (!is_empty) {\r\n                assert(*ci2 == *ci);\r\n            }\r\n        }\r\n\r\n        if constexpr (CanMemberCBegin<const R&>) {\r\n            const same_as<const_iterator_t<const R>> auto ci3 = as_const(r).cbegin();\r\n            if (!is_empty) {\r\n                assert(*ci3 == *ci);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::cend\r\n    static_assert(CanMemberCEnd<R>);\r\n    static_assert(CanMemberCEnd<const R&> == (range<const V> && const_invocable));\r\n    if (!is_empty) {\r\n        same_as<const_sentinel_t<R>> auto cs = r.cend();\r\n        static_assert(is_same_v<const_sentinel_t<R>, const_iterator_t<R>> == common_range<V>);\r\n        if constexpr (bidirectional_range<R> && common_range<R>) {\r\n            assert(*prev(cs) == *prev(end(expected)));\r\n        }\r\n\r\n        if constexpr (CanMemberCEnd<const R&>) {\r\n            same_as<const_sentinel_t<const R>> auto cs2 = as_const(r).cend();\r\n            static_assert(is_same_v<const_sentinel_t<const R>, const_iterator_t<const R>> == common_range<const V>);\r\n            if constexpr (bidirectional_range<const R> && common_range<const R>) {\r\n                assert(*prev(cs2) == *prev(end(expected)));\r\n            }\r\n        }\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    // Validate view_interface::data\r\n    static_assert(!CanData<TV>);\r\n    static_assert(!CanData<const TV>);\r\n\r\n    // Validate view_interface::front and back\r\n    if (!is_empty) {\r\n        static_assert(CanMemberFront<TV> == forward_range<V>);\r\n        if constexpr (CanMemberFront<TV>) {\r\n            assert(r.front() == *begin(expected));\r\n        }\r\n\r\n        static_assert(CanMemberBack<TV> == (bidirectional_range<V> && common_range<V>) );\r\n        if constexpr (CanMemberBack<TV>) {\r\n            assert(r.back() == *prev(end(expected)));\r\n        }\r\n\r\n        static_assert(CanMemberFront<const TV> == (forward_range<const V> && const_invocable));\r\n        if constexpr (CanMemberFront<const TV>) {\r\n            assert(as_const(r).front() == *begin(expected));\r\n        }\r\n\r\n        static_assert(\r\n            CanMemberBack<const TV> == (bidirectional_range<const V> && common_range<const V> && const_invocable));\r\n        if constexpr (CanMemberBack<const TV>) {\r\n            assert(as_const(r).back() == *prev(end(expected)));\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::operator[]\r\n    if (!is_empty) {\r\n        static_assert(CanIndex<R> == random_access_range<V>);\r\n        if constexpr (CanIndex<R>) {\r\n            assert(r[0] == *r.begin());\r\n        }\r\n\r\n        static_assert(CanIndex<const R> == (random_access_range<const V> && const_invocable));\r\n        if constexpr (CanIndex<const R>) {\r\n            assert(as_const(r)[0] == *as_const(r).begin());\r\n        }\r\n    }\r\n\r\n    // Validate transform_view::base() const&\r\n    static_assert(CanMemberBase<const TV&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V> && forward_range<V>) {\r\n        same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b1.begin() == 0); // NB: depends on the test data\r\n            if constexpr (bidirectional_range<V> && common_range<V>) {\r\n                assert(*prev(b1.end()) == 7); // NB: depends on the test data\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate transform_view::base() && (NB: do this last since it leaves r moved-from)\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        same_as<V> auto b2 = move(r).base();\r\n        static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b2.begin() == 0); // NB: depends on the test data\r\n            if constexpr (bidirectional_range<V> && common_range<V>) {\r\n                assert(*prev(b2.end()) == 7); // NB: depends on the test data\r\n            }\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n// Test a function object whose const and non-const versions behave differently\r\nstruct difference_teller {\r\n    constexpr auto& operator()(auto&& x) noexcept {\r\n        auto& ref = x;\r\n        return ref;\r\n    }\r\n\r\n    constexpr auto operator()(auto&& x) const noexcept {\r\n        return type_identity<decltype(x)>{};\r\n    }\r\n};\r\n\r\ntemplate <ranges::input_range Rng>\r\nconstexpr void test_difference_on_const_functor(Rng&& rng) {\r\n    using ranges::transform_view, ranges::input_range, ranges::forward_range, ranges::bidirectional_range,\r\n        ranges::random_access_range, ranges::iterator_t, ranges::range_reference_t, ranges::range_value_t;\r\n\r\n    using V  = views::all_t<Rng>;\r\n    using TV = transform_view<V, difference_teller>;\r\n\r\n    auto r = forward<Rng>(rng) | views::transform(difference_teller{});\r\n    static_assert(is_same_v<decltype(r), TV>);\r\n\r\n    static_assert(is_lvalue_reference_v<range_reference_t<TV>>);\r\n    if constexpr (input_range<const TV>) {\r\n        static_assert(is_object_v<range_reference_t<const TV>>);\r\n        static_assert(!is_same_v<range_value_t<TV>, range_value_t<const TV>>);\r\n    }\r\n\r\n    if constexpr (forward_range<V>) {\r\n        using It      = iterator_t<V>;\r\n        using TVIt    = iterator_t<TV>;\r\n        using VItCat  = iterator_traits<It>::iterator_category;\r\n        using TVItCat = iterator_traits<TVIt>::iterator_category;\r\n        static_assert(\r\n            is_same_v<TVItCat, VItCat>\r\n            || (is_same_v<TVItCat, random_access_iterator_tag> && is_same_v<VItCat, contiguous_iterator_tag>) );\r\n    }\r\n\r\n    if constexpr (forward_range<const V>) {\r\n        static_assert(is_same_v<typename iterator_traits<iterator_t<const TV>>::iterator_category, input_iterator_tag>);\r\n    }\r\n}\r\n\r\n// Test xvalue ranges (LWG-3798)\r\nstruct move_fn {\r\n    constexpr auto&& operator()(auto&& x) const noexcept {\r\n        return move(x);\r\n    }\r\n};\r\n\r\ntemplate <ranges::input_range Rng>\r\nconstexpr void test_xvalue_ranges(Rng&& rng) {\r\n    using ranges::transform_view, ranges::forward_range, ranges::iterator_t, ranges::range_reference_t;\r\n\r\n    using V  = views::all_t<Rng>;\r\n    using TV = transform_view<V, move_fn>;\r\n\r\n    auto r = forward<Rng>(rng) | views::transform(move_fn{});\r\n    static_assert(is_same_v<decltype(r), TV>);\r\n\r\n    static_assert(is_rvalue_reference_v<range_reference_t<TV>>);\r\n\r\n    if constexpr (forward_range<V>) {\r\n        using It      = iterator_t<V>;\r\n        using TVIt    = iterator_t<TV>;\r\n        using VItCat  = iterator_traits<It>::iterator_category;\r\n        using TVItCat = iterator_traits<TVIt>::iterator_category;\r\n        static_assert(\r\n            is_same_v<TVItCat, VItCat>\r\n            || (is_same_v<TVItCat, random_access_iterator_tag> && is_same_v<VItCat, contiguous_iterator_tag>) );\r\n    }\r\n}\r\n\r\nstatic constexpr int some_ints[]        = {0, 1, 2, 3, 4, 5, 6, 7};\r\nstatic constexpr int transformed_ints[] = {8, 9, 10, 11, 12, 13, 14, 15};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        R r{some_ints};\r\n        test_one(r, transformed_ints);\r\n\r\n        R r2{some_ints};\r\n        test_difference_on_const_functor(r2);\r\n\r\n        R r3{some_ints};\r\n        test_xvalue_ranges(r3);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Sized IsSized, test::Common IsCommon>\r\nusing test_range =\r\n    test::range<Category, const int, IsSized, test::CanDifference{derived_from<Category, random_access_iterator_tag>},\r\n        IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n        test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nconstexpr void instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_in<instantiator, const int>();\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    // The view is sensitive to category, commonality, size, and differencing, but oblivious to proxyness.\r\n    using test::Common, test::Sized;\r\n\r\n    instantiator::call<test_range<input_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<input_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<input_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<input_iterator_tag, Sized::yes, Common::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Sized::yes, Common::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Sized::yes, Common::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Sized::yes, Common::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::no, Common::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::no, Common::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::yes, Common::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Sized::yes, Common::yes>>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\ntemplate <class Category, test::Sized IsSized, test::Common IsCommon>\r\nusing move_only_view = test::range<Category, const int, IsSized,\r\n    test::CanDifference{derived_from<Category, random_access_iterator_tag>}, IsCommon,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nconstexpr void move_only_view_tests() {\r\n    using test::Common, test::Sized;\r\n\r\n    test_one(move_only_view<input_iterator_tag, Sized::no, Common::no>{some_ints}, transformed_ints);\r\n    test_one(move_only_view<input_iterator_tag, Sized::yes, Common::no>{some_ints}, transformed_ints);\r\n\r\n    test_one(move_only_view<forward_iterator_tag, Sized::no, Common::no>{some_ints}, transformed_ints);\r\n    test_one(move_only_view<forward_iterator_tag, Sized::no, Common::yes>{some_ints}, transformed_ints);\r\n    test_one(move_only_view<forward_iterator_tag, Sized::yes, Common::no>{some_ints}, transformed_ints);\r\n    test_one(move_only_view<forward_iterator_tag, Sized::yes, Common::yes>{some_ints}, transformed_ints);\r\n\r\n    test_one(move_only_view<bidirectional_iterator_tag, Sized::no, Common::no>{some_ints}, transformed_ints);\r\n    test_one(move_only_view<bidirectional_iterator_tag, Sized::no, Common::yes>{some_ints}, transformed_ints);\r\n    test_one(move_only_view<bidirectional_iterator_tag, Sized::yes, Common::no>{some_ints}, transformed_ints);\r\n    test_one(move_only_view<bidirectional_iterator_tag, Sized::yes, Common::yes>{some_ints}, transformed_ints);\r\n\r\n    test_one(move_only_view<random_access_iterator_tag, Sized::no, Common::no>{some_ints}, transformed_ints);\r\n    test_one(move_only_view<random_access_iterator_tag, Sized::no, Common::yes>{some_ints}, transformed_ints);\r\n    test_one(move_only_view<random_access_iterator_tag, Sized::yes, Common::no>{some_ints}, transformed_ints);\r\n    test_one(move_only_view<random_access_iterator_tag, Sized::yes, Common::yes>{some_ints}, transformed_ints);\r\n}\r\n\r\nstruct iterator_instantiator {\r\n    template <input_iterator Iter>\r\n    static constexpr void call() {\r\n        // Pre: Iter is a specialization of test::iterator whose element type is const int\r\n        int mutable_ints[]   = {0, 1, 2, 3, 4, 5, 6, 7};\r\n        const auto make_view = [&] {\r\n            return views::transform(\r\n                ranges::subrange{Iter{mutable_ints}, test::sentinel<int>{ranges::end(mutable_ints)}}, add8);\r\n        };\r\n        using R = decltype(make_view());\r\n        using I = ranges::iterator_t<R>;\r\n        using S = ranges::sentinel_t<R>;\r\n\r\n        // Validate nested types\r\n        static_assert(is_same_v<typename I::iterator_concept,\r\n            conditional_t<random_access_iterator<Iter>, random_access_iterator_tag,\r\n                conditional_t<bidirectional_iterator<Iter>, bidirectional_iterator_tag,\r\n                    conditional_t<forward_iterator<Iter>, forward_iterator_tag, input_iterator_tag>>>>);\r\n\r\n        static_assert(_Has_member_iterator_category<I> == forward_iterator<Iter>);\r\n        if constexpr (forward_iterator<Iter>) {\r\n            static_assert(is_same_v<typename I::iterator_category, input_iterator_tag>);\r\n        }\r\n\r\n        { // Validate iterator special member functions and base\r\n            static_assert(default_initializable<I> == default_initializable<Iter>);\r\n            if constexpr (default_initializable<Iter>) {\r\n                I defaultConstructed{};\r\n                assert(move(defaultConstructed).base().peek() == nullptr);\r\n                static_assert(is_nothrow_default_constructible_v<I>);\r\n            }\r\n\r\n            auto r0 = make_view();\r\n            I valueConstructed{r0, Iter{mutable_ints}};\r\n            static_assert(is_nothrow_constructible_v<I, R&, Iter>);\r\n\r\n            if constexpr (copyable<Iter>) {\r\n                I copyConstructed{valueConstructed};\r\n                assert(copyConstructed == valueConstructed);\r\n                static_assert(is_nothrow_copy_constructible_v<I>);\r\n\r\n                auto r1 = make_view();\r\n                I copyAssigned{r1, Iter{mutable_ints + 8}};\r\n                copyAssigned = copyConstructed;\r\n                assert(copyAssigned == valueConstructed);\r\n                static_assert(is_nothrow_copy_assignable_v<I>);\r\n                static_assert(same_as<const Iter&, decltype(as_const(copyConstructed).base())>);\r\n            }\r\n            assert(as_const(valueConstructed).base().peek() == mutable_ints);\r\n            assert(move(valueConstructed).base().peek() == mutable_ints);\r\n            static_assert(same_as<Iter, decltype(move(valueConstructed).base())>);\r\n\r\n            if constexpr (forward_iterator<Iter>) {\r\n                auto r1      = make_view();\r\n                const auto i = r1.begin();\r\n                using CI     = ranges::iterator_t<const R>;\r\n                CI conversionConstructed{i};\r\n                assert(conversionConstructed.base().peek() == mutable_ints);\r\n                static_assert(is_nothrow_constructible_v<CI, const I&>);\r\n            }\r\n        }\r\n\r\n        { // Validate sentinel constructors and base\r\n            S defaultConstructed{};\r\n            assert(defaultConstructed.base().peek() == nullptr);\r\n            static_assert(is_nothrow_default_constructible_v<S>);\r\n\r\n            const test::sentinel<int> s{mutable_ints + 2};\r\n            S valueConstructed{s};\r\n            assert(valueConstructed.base().peek() == s.peek());\r\n            static_assert(is_nothrow_constructible_v<S, const test::sentinel<int>&>);\r\n\r\n            S copyConstructed{valueConstructed};\r\n            assert(copyConstructed.base().peek() == valueConstructed.base().peek());\r\n            static_assert(is_nothrow_copy_constructible_v<S>);\r\n\r\n            defaultConstructed = copyConstructed;\r\n            assert(defaultConstructed.base().peek() == valueConstructed.base().peek());\r\n            static_assert(is_nothrow_copy_assignable_v<S>);\r\n\r\n            if constexpr (forward_iterator<Iter> && indirectly_swappable<Iter>) {\r\n                auto r       = make_view();\r\n                using CS     = ranges::sentinel_t<const R>;\r\n                const S last = r.end();\r\n                CS conversionConstructed{last};\r\n                assert(conversionConstructed.base().peek() == ranges::end(mutable_ints));\r\n                static_assert(is_nothrow_constructible_v<CS, const S&>);\r\n            }\r\n        }\r\n\r\n        { // Validate dereference ops\r\n            auto r0 = make_view();\r\n            auto i0 = r0.begin();\r\n            assert(*i0 == add8(mutable_ints[0]));\r\n            static_assert(noexcept(*i0));\r\n\r\n            assert(ranges::iter_move(i0) == add8(mutable_ints[0])); // NB: moving from int leaves it unchanged\r\n            static_assert(noexcept(ranges::iter_move(i0)));\r\n\r\n            static_assert(!CanIterSwap<decltype(i0)>);\r\n        }\r\n\r\n        { // Validate increments\r\n            auto r0 = make_view();\r\n            auto i0 = r0.begin();\r\n            assert(&++i0 == &i0);\r\n            assert(move(i0).base().peek() == mutable_ints + 1);\r\n            static_assert(noexcept(++i0));\r\n\r\n            auto r1 = make_view();\r\n            auto i1 = r1.begin();\r\n            if constexpr (forward_iterator<Iter>) {\r\n                assert(i1++ == r1.begin());\r\n            } else {\r\n                i1++;\r\n            }\r\n            assert(move(i1).base().peek() == mutable_ints + 1);\r\n            static_assert(noexcept(i0++));\r\n        }\r\n\r\n        if constexpr (bidirectional_iterator<Iter>) { // Validate decrements\r\n            auto r            = make_view();\r\n            const auto second = ranges::next(r.begin());\r\n            auto i            = second;\r\n            assert(&--i == &i);\r\n            assert(i.base().peek() == mutable_ints);\r\n            static_assert(noexcept(--i));\r\n\r\n            i = second;\r\n            assert(i-- == second);\r\n            assert(i.base().peek() == mutable_ints);\r\n            static_assert(noexcept(i--));\r\n        }\r\n\r\n        if constexpr (random_access_iterator<Iter>) { // Validate seek operations and []\r\n            auto r = make_view();\r\n            auto i = r.begin();\r\n            assert((i + 2).base().peek() == mutable_ints + 2);\r\n            assert((I{} + 0) == I{});\r\n            static_assert(NOEXCEPT_IDL0(i + 2));\r\n\r\n            assert((2 + i).base().peek() == mutable_ints + 2);\r\n            assert((0 + I{}).base().peek() == nullptr);\r\n            static_assert(NOEXCEPT_IDL0(2 + i));\r\n\r\n            I vi{};\r\n            assert(&(i += 5) == &i);\r\n            assert(i.base().peek() == mutable_ints + 5);\r\n            assert(&(vi += 0) == &vi);\r\n            assert(vi.base().peek() == nullptr);\r\n            static_assert(NOEXCEPT_IDL0(i += 5));\r\n\r\n            assert((i - 2).base().peek() == mutable_ints + 3);\r\n            assert((I{} - 0).base().peek() == nullptr);\r\n            static_assert(NOEXCEPT_IDL0(i - 2));\r\n\r\n            assert(&(i -= 3) == &i);\r\n            assert(i.base().peek() == mutable_ints + 2);\r\n            assert(&(vi -= 0) == &vi);\r\n            assert(vi.base().peek() == nullptr);\r\n            static_assert(NOEXCEPT_IDL0(i -= 3));\r\n\r\n            assert(i[4] == add8(mutable_ints[6]));\r\n            static_assert(NOEXCEPT_IDL0(i[4]));\r\n        }\r\n\r\n        if constexpr (equality_comparable<Iter>) {\r\n            // Validate == and !=\r\n            auto r           = make_view();\r\n            const auto first = r.begin();\r\n            const auto last  = r.end();\r\n\r\n            const auto const_first = ranges::iterator_t<const R>{first};\r\n            const auto const_last  = ranges::sentinel_t<const R>{last};\r\n\r\n            assert(first == first);\r\n            assert(I{} == I{});\r\n            static_assert(noexcept(first == first));\r\n\r\n            assert(first == const_first);\r\n            static_assert(noexcept(first == const_first));\r\n            assert(const_first == first);\r\n            static_assert(noexcept(const_first == first));\r\n\r\n            assert(!(first == last));\r\n            static_assert(noexcept(first == last));\r\n            assert(!(last == first));\r\n            static_assert(noexcept(last == first));\r\n\r\n            assert(!(const_first == last));\r\n            static_assert(noexcept(const_first == last));\r\n            assert(!(last == const_first));\r\n            static_assert(noexcept(last == const_first));\r\n\r\n            assert(!(first == const_last));\r\n            static_assert(noexcept(first == const_last));\r\n            assert(!(const_last == first));\r\n            static_assert(noexcept(const_last == first));\r\n\r\n            assert(!(first != first));\r\n            assert(!(I{} != I{}));\r\n            static_assert(noexcept(first != first));\r\n\r\n            if constexpr (forward_iterator<Iter>) {\r\n                const auto final       = ranges::next(first, last);\r\n                const auto const_final = ranges::next(const_first, const_last);\r\n                assert(!(first == final));\r\n                assert(first != final);\r\n\r\n                assert(last == final);\r\n                assert(final == last);\r\n\r\n                assert(const_last == final);\r\n                assert(final == const_last);\r\n\r\n                assert(last == const_final);\r\n                assert(const_final == last);\r\n\r\n                assert(const_last == const_final);\r\n                assert(const_final == const_last);\r\n\r\n                assert(!(last != final));\r\n                assert(!(final != last));\r\n\r\n                if constexpr (sized_sentinel_for<Iter, Iter>) { // Validate difference\r\n                    assert(first - first == 0);\r\n                    assert(final - first == ranges::ssize(mutable_ints));\r\n                    assert(first - final == -ranges::ssize(mutable_ints));\r\n                    assert(I{} - I{} == 0);\r\n                    static_assert(noexcept(first - first));\r\n                }\r\n\r\n                if constexpr (sized_sentinel_for<test::sentinel<int>, Iter>) {\r\n                    assert(last - first == ranges::ssize(mutable_ints));\r\n                    assert(first - last == -ranges::ssize(mutable_ints));\r\n                    static_assert(noexcept(last - first));\r\n                    static_assert(noexcept(first - last));\r\n\r\n                    assert(last - const_first == ranges::ssize(mutable_ints));\r\n                    assert(const_first - last == -ranges::ssize(mutable_ints));\r\n                    static_assert(noexcept(last - const_first));\r\n                    static_assert(noexcept(const_first - last));\r\n\r\n                    assert(const_last - first == ranges::ssize(mutable_ints));\r\n                    assert(first - const_last == -ranges::ssize(mutable_ints));\r\n                    static_assert(noexcept(const_last - first));\r\n                    static_assert(noexcept(first - const_last));\r\n\r\n                    assert(const_last - const_first == ranges::ssize(mutable_ints));\r\n                    assert(const_first - const_last == -ranges::ssize(mutable_ints));\r\n                    static_assert(noexcept(const_last - const_first));\r\n                    static_assert(noexcept(const_first - const_last));\r\n                }\r\n\r\n                if constexpr (random_access_iterator<Iter>) { // Validate relational operators\r\n                    assert(!(first < first));\r\n                    assert(first < final);\r\n                    assert(!(final < first));\r\n                    assert(!(I{} < I{}));\r\n                    static_assert(noexcept(first < final));\r\n\r\n                    assert(!(first > first));\r\n                    assert(!(first > final));\r\n                    assert(final > first);\r\n                    assert(!(I{} > I{}));\r\n                    static_assert(noexcept(first > final));\r\n\r\n                    assert(first <= first);\r\n                    assert(first <= final);\r\n                    assert(!(final <= first));\r\n                    assert(I{} <= I{});\r\n                    static_assert(noexcept(first <= final));\r\n\r\n                    assert(first >= first);\r\n                    assert(!(first >= final));\r\n                    assert(final >= first);\r\n                    assert(I{} >= I{});\r\n                    static_assert(noexcept(first >= final));\r\n\r\n                    if constexpr (three_way_comparable<Iter>) { // Validate spaceship\r\n                        assert((first <=> first) == strong_ordering::equal);\r\n                        assert((first <=> final) == strong_ordering::less);\r\n                        assert((final <=> first) == strong_ordering::greater);\r\n                        assert((I{} <=> I{}) == strong_ordering::equal);\r\n                        static_assert(noexcept(first <=> final));\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::CanDifference Diff>\r\nusing test_iterator =\r\n    test::iterator<Category, int, Diff, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n        test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nconstexpr void iterator_instantiation_test() {\r\n    using test::CanDifference;\r\n\r\n    iterator_instantiator::call<test_iterator<input_iterator_tag, CanDifference::no>>();\r\n\r\n    iterator_instantiator::call<test_iterator<forward_iterator_tag, CanDifference::no>>();\r\n    iterator_instantiator::call<test_iterator<forward_iterator_tag, CanDifference::yes>>();\r\n\r\n    iterator_instantiator::call<test_iterator<bidirectional_iterator_tag, CanDifference::no>>();\r\n    iterator_instantiator::call<test_iterator<bidirectional_iterator_tag, CanDifference::yes>>();\r\n\r\n    iterator_instantiator::call<test_iterator<random_access_iterator_tag, CanDifference::yes>>();\r\n    iterator_instantiator::call<test_iterator<contiguous_iterator_tag, CanDifference::yes>>();\r\n}\r\n\r\n// GH-1709 \"Performance issue in handling range iterators in vector constructor\"\r\nvoid test_gh_1709() {\r\n    const vector vec{1, 2, 3, 4, 5};\r\n    const auto transformed{vec | views::transform([](int i) { return i * 10; })};\r\n    const auto b{ranges::begin(transformed)};\r\n    const auto e{ranges::end(transformed)};\r\n\r\n    {\r\n        const vector test_construct(b, e);\r\n        assert((test_construct == vector{10, 20, 30, 40, 50}));\r\n    }\r\n\r\n    {\r\n        vector test_insert{-6, -7};\r\n        test_insert.insert(test_insert.end(), b, e);\r\n        assert((test_insert == vector{-6, -7, 10, 20, 30, 40, 50}));\r\n    }\r\n\r\n    {\r\n        vector test_assign{-8, -9};\r\n        test_assign.assign(b, e);\r\n        assert((test_assign == vector{10, 20, 30, 40, 50}));\r\n    }\r\n}\r\n\r\n// GH-3014 \"<ranges>: list-initialization is misused\"\r\nvoid test_gh_3014() { // COMPILE-ONLY\r\n    struct FwdRange {\r\n        int* begin() {\r\n            return nullptr;\r\n        }\r\n\r\n        test::init_list_not_constructible_iterator<int> begin() const {\r\n            return nullptr;\r\n        }\r\n\r\n        unreachable_sentinel_t end() const {\r\n            return {};\r\n        }\r\n    };\r\n\r\n    auto r                                           = FwdRange{} | views::transform(identity{});\r\n    [[maybe_unused]] decltype(as_const(r).begin()) i = r.begin(); // Check 'iterator(iterator<!Const> i)'\r\n}\r\n\r\nvoid test_lwg_4027() { // COMPILE-ONLY\r\n    auto r     = views::single(0) | views::transform([](int) { return 0; });\r\n    using CIt1 = decltype(ranges::cbegin(r));\r\n    using CIt2 = decltype(cbegin(r));\r\n    static_assert(same_as<CIt1, CIt2>);\r\n}\r\n\r\nint main() {\r\n    { // Validate copyable views\r\n        constexpr span<const int> s{some_ints};\r\n        static_assert(test_one(s, transformed_ints));\r\n        test_one(s, transformed_ints);\r\n    }\r\n\r\n    // Validate move-only views\r\n    static_assert((move_only_view_tests(), true));\r\n    move_only_view_tests();\r\n\r\n    { // Validate non-views\r\n        static_assert(test_one(some_ints, transformed_ints));\r\n        test_one(some_ints, transformed_ints);\r\n\r\n        {\r\n            vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n            test_one(vec, transformed_ints);\r\n        }\r\n        {\r\n            forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n            test_one(lst, transformed_ints);\r\n        }\r\n\r\n        static_assert((instantiation_test(), true));\r\n        instantiation_test();\r\n    }\r\n\r\n    static_assert((iterator_instantiation_test(), true));\r\n    iterator_instantiation_test();\r\n\r\n    { // Validate guarantee that predicates are moved into the range adaptor closure, and into the view\r\n      // object from an rvalue closure\r\n        struct Fn {\r\n            Fn()     = default;\r\n            Fn(Fn&&) = default;\r\n            Fn(const Fn&) {\r\n                assert(false);\r\n            }\r\n            Fn& operator=(Fn&&) = default;\r\n\r\n            Fn& operator=(const Fn&) {\r\n                assert(false);\r\n                return *this;\r\n            }\r\n\r\n            bool operator()(int) const {\r\n                return true;\r\n            }\r\n        };\r\n\r\n        (void) views::transform(Fn{})(span<int>{});\r\n    }\r\n\r\n    { // Validate that iter_swap works when result of transformation is an lvalue reference\r\n        char base[] = \"hello\";\r\n        auto v      = ranges::transform_view{base, [](char& c) -> char& { return c; }};\r\n        auto i1     = v.begin();\r\n        auto i2     = v.begin() + 1;\r\n\r\n        assert(*i1 == 'h');\r\n        assert(*i2 == 'e');\r\n\r\n        ranges::iter_swap(i1, i2);\r\n\r\n        assert(*i1 == 'e');\r\n        assert(*i2 == 'h');\r\n    }\r\n\r\n    test_gh_1709();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_transform_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0896R4_views_transform_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <ranges>\r\n#include <span>\r\n#include <vector>\r\n\r\n#include <test_death.hpp>\r\nusing namespace std;\r\n\r\nstatic int some_ints[] = {0, 1, 2, 3};\r\n\r\n[[maybe_unused]] constexpr auto lambda = [x = 42](int) { return x == 42; };\r\nusing TV                               = decltype(ranges::transform_view{span{some_ints}, lambda});\r\n\r\nvoid test_constructor_wrong_range() {\r\n    vector<int> vec0{0, 1, 2, 3};\r\n    vector<int> vec1{4, 5, 6, 7};\r\n    auto r0            = views::transform(vec0, lambda);\r\n    using R            = decltype(r0);\r\n    same_as<R> auto r1 = views::transform(vec1, lambda);\r\n    ranges::iterator_t<R> i{r0, r1.begin().base()}; // vector iterators in range are from different containers\r\n}\r\n\r\nvoid test_operator_star_value_initialized_iterator() {\r\n    ranges::iterator_t<TV> i{};\r\n    (void) (*i); // cannot dereference value-initialized transform_view iterator\r\n}\r\n\r\nvoid test_operator_star_end_iterator() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = ranges::next(r.begin(), r.end());\r\n    (void) (*i); // cannot dereference end transform_view iterator\r\n}\r\n\r\nvoid test_operator_preincrement_value_initialized_iterator() {\r\n    ranges::iterator_t<TV> i{};\r\n    ++i; // cannot increment value-initialized transform_view iterator\r\n}\r\n\r\nvoid test_operator_preincrement_after_end() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = ranges::next(r.begin(), r.end());\r\n    ++i; // cannot increment transform_view iterator past end\r\n}\r\n\r\nvoid test_operator_postincrement_value_initialized_iterator() {\r\n    ranges::iterator_t<TV> i{};\r\n    i++; // cannot increment value-initialized transform_view iterator\r\n}\r\n\r\nvoid test_operator_postincrement_after_end() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = ranges::next(r.begin(), r.end());\r\n    i++; // cannot increment transform_view iterator past end\r\n}\r\n\r\nvoid test_operator_predecrement_value_initialized_iterator() {\r\n    ranges::iterator_t<TV> i{};\r\n    --i; // cannot decrement value-initialized transform_view iterator\r\n}\r\n\r\nvoid test_operator_predecrement_before_begin() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin();\r\n    --i; // cannot decrement transform_view iterator before begin\r\n}\r\n\r\nvoid test_operator_postdecrement_value_initialized_iterator() {\r\n    ranges::iterator_t<TV> i{};\r\n    i--; // cannot decrement value-initialized transform_view iterator\r\n}\r\n\r\nvoid test_operator_postdecrement_before_begin() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin();\r\n    i--; // cannot decrement transform_view iterator before begin\r\n}\r\n\r\nvoid test_operator_seek_forward_value_initialized_iterator() {\r\n    ranges::iterator_t<TV> i{};\r\n    i += 42; // cannot seek value-initialized transform_view iterator\r\n}\r\n\r\nvoid test_operator_seek_forward_after_end() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin() + ranges::distance(some_ints) / 2;\r\n    i += ranges::distance(some_ints); // cannot seek transform_view iterator past end\r\n}\r\n\r\nvoid test_operator_seek_backward_value_initialized_iterator() {\r\n    ranges::iterator_t<TV> i{};\r\n    i -= 42; // cannot seek value-initialized transform_view iterator\r\n}\r\n\r\nvoid test_operator_seek_backward_before_begin() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin() + ranges::distance(some_ints) / 2;\r\n    i -= ranges::distance(some_ints); // cannot seek transform_view iterator before begin\r\n}\r\n\r\nvoid test_operator_bracket_value_initialized_iterator() {\r\n    ranges::iterator_t<TV> i{};\r\n    (void) i[42]; // cannot seek value-initialized transform_view iterator\r\n}\r\n\r\nvoid test_operator_bracket_before_begin() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin() + ranges::distance(some_ints) / 2;\r\n    (void) i[-ranges::distance(some_ints)]; // cannot seek transform_view iterator before begin\r\n}\r\n\r\nvoid test_operator_bracket_after_end() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin() + ranges::distance(some_ints) / 2;\r\n    (void) i[ranges::distance(some_ints)]; // cannot seek transform_view iterator after end\r\n}\r\n\r\nvoid test_operator_equal_incompatible_different() {\r\n    TV r0{some_ints, lambda};\r\n    ranges::iterator_t<TV> i0 = r0.begin();\r\n    TV r1{some_ints, lambda};\r\n    ranges::iterator_t<TV> i1 = r1.begin();\r\n    (void) (i0 == i1); // cannot compare incompatible transform_view iterators\r\n}\r\n\r\nvoid test_operator_equal_incompatible_value_initialized() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin();\r\n    (void) (i == ranges::iterator_t<TV>{}); // cannot compare incompatible transform_view iterators\r\n}\r\n\r\nvoid test_operator_not_equal_incompatible_different() {\r\n    TV r0{some_ints, lambda};\r\n    ranges::iterator_t<TV> i0 = r0.begin();\r\n    TV r1{some_ints, lambda};\r\n    ranges::iterator_t<TV> i1 = r1.begin();\r\n    (void) (i0 != i1); // cannot compare incompatible transform_view iterators\r\n}\r\n\r\nvoid test_operator_not_equal_incompatible_value_initialized() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin();\r\n    (void) (i != ranges::iterator_t<TV>{}); // cannot compare incompatible transform_view iterators\r\n}\r\n\r\nvoid test_operator_less_incompatible_different() {\r\n    TV r0{some_ints, lambda};\r\n    ranges::iterator_t<TV> i0 = r0.begin();\r\n    TV r1{some_ints, lambda};\r\n    ranges::iterator_t<TV> i1 = r1.begin();\r\n    (void) (i0 < i1); // cannot compare incompatible transform_view iterators\r\n}\r\n\r\nvoid test_operator_less_incompatible_value_initialized() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin();\r\n    (void) (i < ranges::iterator_t<TV>{}); // cannot compare incompatible transform_view iterators\r\n}\r\n\r\nvoid test_operator_greater_incompatible_different() {\r\n    TV r0{some_ints, lambda};\r\n    ranges::iterator_t<TV> i0 = r0.begin();\r\n    TV r1{some_ints, lambda};\r\n    ranges::iterator_t<TV> i1 = r1.begin();\r\n    (void) (i0 > i1); // cannot compare incompatible transform_view iterators\r\n}\r\n\r\nvoid test_operator_greater_incompatible_value_initialized() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin();\r\n    (void) (i > ranges::iterator_t<TV>{}); // cannot compare incompatible transform_view iterators\r\n}\r\n\r\nvoid test_operator_less_equal_incompatible_different() {\r\n    TV r0{some_ints, lambda};\r\n    ranges::iterator_t<TV> i0 = r0.begin();\r\n    TV r1{some_ints, lambda};\r\n    ranges::iterator_t<TV> i1 = r1.begin();\r\n    (void) (i0 <= i1); // cannot compare incompatible transform_view iterators\r\n}\r\n\r\nvoid test_operator_less_equal_incompatible_value_initialized() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin();\r\n    (void) (i <= ranges::iterator_t<TV>{}); // cannot compare incompatible transform_view iterators\r\n}\r\n\r\nvoid test_operator_greater_equal_incompatible_different() {\r\n    TV r0{some_ints, lambda};\r\n    ranges::iterator_t<TV> i0 = r0.begin();\r\n    TV r1{some_ints, lambda};\r\n    ranges::iterator_t<TV> i1 = r1.begin();\r\n    (void) (i0 >= i1); // cannot compare incompatible transform_view iterators\r\n}\r\n\r\nvoid test_operator_greater_equal_incompatible_value_initialized() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin();\r\n    (void) (i >= ranges::iterator_t<TV>{}); // cannot compare incompatible transform_view iterators\r\n}\r\n\r\nvoid test_operator_spaceship_incompatible_different() {\r\n    TV r0{some_ints, lambda};\r\n    ranges::iterator_t<TV> i0 = r0.begin();\r\n    TV r1{some_ints, lambda};\r\n    ranges::iterator_t<TV> i1 = r1.begin();\r\n    (void) (i0 <=> i1); // cannot compare incompatible transform_view iterators\r\n}\r\n\r\nvoid test_operator_spaceship_incompatible_value_initialized() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin();\r\n    (void) (i <=> ranges::iterator_t<TV>{}); // cannot compare incompatible transform_view iterators\r\n}\r\n\r\nvoid test_operator_plus_value_initialized() {\r\n    ranges::iterator_t<TV> i{};\r\n    (void) (i + 42); // cannot seek value-initialized transform_view iterator\r\n}\r\n\r\nvoid test_operator_plus_before_begin() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin() + ranges::distance(some_ints) / 2;\r\n    (void) (i + -ranges::distance(some_ints)); // cannot seek transform_view iterator before begin\r\n}\r\n\r\nvoid test_operator_plus_after_end() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin() + ranges::distance(some_ints) / 2;\r\n    (void) (i + ranges::distance(some_ints)); // cannot seek transform_view iterator after end\r\n}\r\n\r\nvoid test_flipped_operator_plus_value_initialized() {\r\n    ranges::iterator_t<TV> i{};\r\n    (void) (42 + i); // cannot seek value-initialized transform_view iterator\r\n}\r\n\r\nvoid test_flipped_operator_plus_before_begin() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin() + ranges::distance(some_ints) / 2;\r\n    (void) (-ranges::distance(some_ints) + i); // cannot seek transform_view iterator before begin\r\n}\r\n\r\nvoid test_flipped_operator_plus_after_end() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin() + ranges::distance(some_ints) / 2;\r\n    (void) (ranges::distance(some_ints) + i); // cannot seek transform_view iterator after end\r\n}\r\n\r\nvoid test_operator_minus_value_initialized() {\r\n    ranges::iterator_t<TV> i{};\r\n    (void) (i - 42); // cannot seek value-initialized transform_view iterator\r\n}\r\n\r\nvoid test_operator_minus_before_begin() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin() + ranges::distance(some_ints) / 2;\r\n    (void) (i - ranges::distance(some_ints)); // cannot seek transform_view iterator before begin\r\n}\r\n\r\nvoid test_operator_minus_after_end() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin() + ranges::distance(some_ints) / 2;\r\n    (void) (i - -ranges::distance(some_ints)); // cannot seek transform_view iterator after end\r\n}\r\n\r\nvoid test_operator_minus_incompatible_different() {\r\n    TV r0{some_ints, lambda};\r\n    ranges::iterator_t<TV> i0 = r0.begin();\r\n    TV r1{some_ints, lambda};\r\n    ranges::iterator_t<TV> i1 = r1.begin();\r\n    (void) (i0 - i1); // cannot compare incompatible transform_view iterators\r\n}\r\n\r\nvoid test_operator_minus_incompatible_value_initialized() {\r\n    TV r{some_ints, lambda};\r\n    ranges::iterator_t<TV> i = r.begin();\r\n    (void) (i - ranges::iterator_t<TV>{}); // cannot compare incompatible transform_view iterators\r\n}\r\n\r\nvoid test_iter_move_value_initialized_iterator() {\r\n    ranges::iterator_t<TV> i{};\r\n    (void) ranges::iter_move(i); // cannot dereference value-initialized transform_view iterator\r\n}\r\n\r\nvoid test_sentinel_compare_value_initialized() {\r\n    auto r = ranges::subrange{counted_iterator{some_ints, ranges::distance(some_ints)}, default_sentinel}\r\n           | views::transform(lambda);\r\n    using R = decltype(r);\r\n    static_assert(!ranges::common_range<R>);\r\n    (void) (ranges::iterator_t<R>{} == r.end());\r\n}\r\n\r\nvoid test_sentinel_difference_value_initialized() {\r\n    auto r = ranges::subrange{counted_iterator{some_ints, ranges::distance(some_ints)}, default_sentinel}\r\n           | views::transform(lambda);\r\n    using R = decltype(r);\r\n    static_assert(!ranges::common_range<R>);\r\n    static_assert(sized_sentinel_for<ranges::sentinel_t<R>, ranges::iterator_t<R>>);\r\n    (void) (ranges::iterator_t<R>{} - r.end());\r\n}\r\n\r\nvoid test_flipped_sentinel_difference_value_initialized() {\r\n    auto r = ranges::subrange{counted_iterator{some_ints, ranges::distance(some_ints)}, default_sentinel}\r\n           | views::transform(lambda);\r\n    using R = decltype(r);\r\n    static_assert(!ranges::common_range<R>);\r\n    static_assert(sized_sentinel_for<ranges::sentinel_t<R>, ranges::iterator_t<R>>);\r\n    (void) (r.end() - ranges::iterator_t<R>{});\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_constructor_wrong_range,\r\n        test_operator_star_value_initialized_iterator,\r\n        test_operator_star_end_iterator,\r\n        test_operator_preincrement_value_initialized_iterator,\r\n        test_operator_preincrement_after_end,\r\n        test_operator_postincrement_value_initialized_iterator,\r\n        test_operator_postincrement_after_end,\r\n        test_operator_predecrement_value_initialized_iterator,\r\n        test_operator_predecrement_before_begin,\r\n        test_operator_postdecrement_value_initialized_iterator,\r\n        test_operator_postdecrement_before_begin,\r\n        test_operator_seek_forward_value_initialized_iterator,\r\n        test_operator_seek_forward_after_end,\r\n        test_operator_seek_backward_value_initialized_iterator,\r\n        test_operator_seek_backward_before_begin,\r\n        test_operator_bracket_value_initialized_iterator,\r\n        test_operator_bracket_before_begin,\r\n        test_operator_bracket_after_end,\r\n        test_operator_equal_incompatible_different,\r\n        test_operator_equal_incompatible_value_initialized,\r\n        test_operator_not_equal_incompatible_different,\r\n        test_operator_not_equal_incompatible_value_initialized,\r\n        test_operator_less_incompatible_different,\r\n        test_operator_less_incompatible_value_initialized,\r\n        test_operator_greater_incompatible_different,\r\n        test_operator_greater_incompatible_value_initialized,\r\n        test_operator_less_equal_incompatible_different,\r\n        test_operator_less_equal_incompatible_value_initialized,\r\n        test_operator_greater_equal_incompatible_different,\r\n        test_operator_greater_equal_incompatible_value_initialized,\r\n        test_operator_spaceship_incompatible_different,\r\n        test_operator_spaceship_incompatible_value_initialized,\r\n        test_operator_plus_value_initialized,\r\n        test_operator_plus_before_begin,\r\n        test_operator_plus_after_end,\r\n        test_flipped_operator_plus_value_initialized,\r\n        test_flipped_operator_plus_before_begin,\r\n        test_flipped_operator_plus_after_end,\r\n        test_operator_minus_value_initialized,\r\n        test_operator_minus_before_begin,\r\n        test_operator_minus_after_end,\r\n        test_operator_minus_incompatible_different,\r\n        test_operator_minus_incompatible_value_initialized,\r\n        test_iter_move_value_initialized_iterator,\r\n        test_sentinel_compare_value_initialized,\r\n        test_sentinel_difference_value_initialized,\r\n        test_flipped_sentinel_difference_value_initialized,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0898R3_concepts/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0898R3_concepts/invocable_cc.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// expects NAME (function name), CALLCONV (calling convention for non-member functions), and MCALLCONV (calling\r\n// convention for member functions) to be defined before including; undefines all three.\r\n\r\nvoid NAME() {\r\n    struct S {\r\n        using FreeFunc = short(CALLCONV*)(long);\r\n        operator FreeFunc() const;\r\n        double MCALLCONV operator()(char, int&);\r\n        double const& MCALLCONV operator()(char, int&) const;\r\n        double volatile& MCALLCONV operator()(char, int&) volatile;\r\n        double const volatile& MCALLCONV operator()(char, int&) const volatile;\r\n    };\r\n\r\n    {\r\n        using Fn  = int (MCALLCONV tag::*)(int);\r\n        using RFn = int (MCALLCONV tag::*)(int) &&;\r\n        {\r\n            // N4849 [func.require]/1.1: \"... f is a pointer to member function of a class T and\r\n            // is_base_of_v<T, remove_reference_t<decltype(t_1)>> is true\"\r\n            static_assert(test<Fn, tag&, int>());\r\n            static_assert(test<Fn, DerivesFrom<tag>&, int>());\r\n            static_assert(test<RFn, tag&&, int>());\r\n            static_assert(!test<RFn, tag&, int>());\r\n            static_assert(!test<Fn, tag&>());\r\n            static_assert(!test<Fn, tag const&, int>());\r\n        }\r\n        {\r\n            // N4849 [func.require]/1.2: \"... f is a pointer to a member function of a class T and\r\n            // remove_cvref_t<decltype(t_1)> is a specialization of reference_wrapper\"\r\n            using T  = std::reference_wrapper<tag>;\r\n            using DT = std::reference_wrapper<DerivesFrom<tag>>;\r\n            using CT = std::reference_wrapper<tag const>;\r\n            static_assert(test<Fn, T&, int>());\r\n            static_assert(test<Fn, DT&, int>());\r\n            static_assert(test<Fn, T const&, int>());\r\n            static_assert(test<Fn, T&&, int>());\r\n            static_assert(!test<Fn, CT&, int>());\r\n            static_assert(!test<RFn, T, int>());\r\n        }\r\n        {\r\n            // N4849 [func.require]/1.3: \"... f is a pointer to a member function of a class T and t_1 does not satisfy\r\n            // the previous two items\"\r\n            using T  = tag*;\r\n            using DT = DerivesFrom<tag>*;\r\n            using CT = tag const*;\r\n            using ST = std::unique_ptr<tag>;\r\n            static_assert(test<Fn, T&, int>());\r\n            static_assert(test<Fn, DT&, int>());\r\n            static_assert(test<Fn, T const&, int>());\r\n            static_assert(test<Fn, T&&, int>());\r\n            static_assert(test<Fn, ST, int>());\r\n            static_assert(!test<Fn, CT&, int>());\r\n            static_assert(!test<RFn, T, int>());\r\n        }\r\n    }\r\n\r\n    {\r\n        // N4849 [func.require]/1.7: \"f(t_1, t_2, ..., t_N) in all other cases\"\r\n        {\r\n            // function pointer\r\n            using Fp = void(CALLCONV*)(tag&, int);\r\n            static_assert(test<Fp, tag&, int>());\r\n            static_assert(test<Fp, DerivesFrom<tag>&, int>());\r\n            static_assert(!test<Fp, tag const&, int>());\r\n            static_assert(!test<Fp>());\r\n            static_assert(!test<Fp, tag&>());\r\n        }\r\n        {\r\n            // function reference\r\n            using Fp = void(CALLCONV&)(tag&, int);\r\n            static_assert(test<Fp, tag&, int>());\r\n            static_assert(test<Fp, DerivesFrom<tag>&, int>());\r\n            static_assert(!test<Fp, tag const&, int>());\r\n            static_assert(!test<Fp>());\r\n            static_assert(!test<Fp, tag&>());\r\n        }\r\n        {\r\n            // function object\r\n            struct not_callable_with_int {\r\n                int operator()(int) = delete;\r\n                int MCALLCONV operator()(tag) {\r\n                    return 42;\r\n                }\r\n            };\r\n\r\n            static_assert(test<not_callable_with_int, tag>());\r\n            static_assert(!test<not_callable_with_int, int>());\r\n        }\r\n    }\r\n\r\n    {\r\n        // function object\r\n        static_assert(test<S, int>());\r\n        static_assert(test<S&, unsigned char, int&>());\r\n        static_assert(test<S const&, unsigned char, int&>());\r\n        static_assert(test<S volatile&, unsigned char, int&>());\r\n        static_assert(test<S const volatile&, unsigned char, int&>());\r\n\r\n        static_assert(test<ImplicitTo<void(CALLCONV*)(long)>, int>());\r\n        static_assert(test<ImplicitTo<void(CALLCONV*)(long)>, char>());\r\n        static_assert(test<ImplicitTo<void(CALLCONV*)(long)>, float>());\r\n        static_assert(!test<ImplicitTo<void(CALLCONV*)(long)>, char const*>());\r\n        static_assert(!test<ImplicitTo<void(CALLCONV*)(long)>, S const&>());\r\n\r\n        auto lambda_lambda_lambda = [x = 42](int, double) { return x; };\r\n        static_assert(test<decltype((lambda_lambda_lambda)), int, double>());\r\n        static_assert(test<decltype((lambda_lambda_lambda)), double, int>());\r\n        static_assert(test<decltype((lambda_lambda_lambda)), char, char>());\r\n        static_assert(!test<decltype((lambda_lambda_lambda))>());\r\n        static_assert(!test<decltype((lambda_lambda_lambda)), char const*, double>());\r\n        static_assert(!test<decltype((lambda_lambda_lambda)), double, char const*>());\r\n    }\r\n\r\n    { // pointer to function\r\n        using RF0  = bool(CALLCONV&)();\r\n        using RF1  = bool*(CALLCONV&) (int);\r\n        using RF2  = bool&(CALLCONV&) (int, int);\r\n        using RF3  = bool const&(CALLCONV&) (int, int, int);\r\n        using RF4  = bool (&)(int, ...);\r\n        using PF0  = bool(CALLCONV*)();\r\n        using PF1  = bool*(CALLCONV*) (int);\r\n        using PF2  = bool&(CALLCONV*) (int, int);\r\n        using PF3  = bool const&(CALLCONV*) (int, int, int);\r\n        using PF4  = bool (*)(int, ...);\r\n        using RPF0 = bool(CALLCONV*&)();\r\n        using RPF1 = bool*(CALLCONV*&) (int);\r\n        using RPF2 = bool&(CALLCONV*&) (int, int);\r\n        using RPF3 = bool const&(CALLCONV*&) (int, int, int);\r\n        using RPF4 = bool (*&)(int, ...);\r\n        static_assert(test<RF0>());\r\n        static_assert(test<RF1, int>());\r\n        static_assert(test<RF2, int, long>());\r\n        static_assert(test<RF3, int, long, int>());\r\n        static_assert(test<RF4, int, float, void*>());\r\n        static_assert(test<PF0>());\r\n        static_assert(test<PF1, int>());\r\n        static_assert(test<PF2, int, long>());\r\n        static_assert(test<PF3, int, long, int>());\r\n        static_assert(test<PF4, int, float, void*>());\r\n        static_assert(test<RPF0>());\r\n        static_assert(test<RPF1, int>());\r\n        static_assert(test<RPF2, int, long>());\r\n        static_assert(test<RPF3, int, long, int>());\r\n        static_assert(test<RPF4, int, float, void*>());\r\n    }\r\n\r\n    { // pointer to member function\r\n        using PMF0  = int (MCALLCONV S::*)();\r\n        using PMF1  = int* (MCALLCONV S::*) (long);\r\n        using PMF2  = int& (MCALLCONV S::*) (long, int);\r\n        using PMF1P = int const& (S::*) (int, ...);\r\n        static_assert(test<PMF0, S>());\r\n        static_assert(test<PMF0, S&>());\r\n        static_assert(test<PMF0, S*>());\r\n        static_assert(test<PMF0, S*&>());\r\n        static_assert(test<PMF0, std::reference_wrapper<S>>());\r\n        static_assert(test<PMF0, std::reference_wrapper<S> const&>());\r\n        static_assert(test<PMF0, std::reference_wrapper<DerivesFrom<S>>>());\r\n        static_assert(test<PMF0, std::reference_wrapper<DerivesFrom<S>> const&>());\r\n        static_assert(test<PMF0, std::unique_ptr<S>>());\r\n        static_assert(test<PMF0, std::unique_ptr<DerivesFrom<S>>>());\r\n        static_assert(!test<PMF0, S const&>());\r\n        static_assert(!test<PMF0, S volatile&>());\r\n        static_assert(!test<PMF0, S const volatile&>());\r\n        static_assert(!test<PMF0, NotDerived&>());\r\n        static_assert(!test<PMF0, NotDerived const&>());\r\n        static_assert(!test<PMF0, std::unique_ptr<S const>>());\r\n        static_assert(!test<PMF0, std::reference_wrapper<S const>>());\r\n        static_assert(!test<PMF0, std::reference_wrapper<NotDerived>>());\r\n        static_assert(!test<PMF0, std::unique_ptr<NotDerived>>());\r\n\r\n        static_assert(test<PMF1, S, int>());\r\n        static_assert(test<PMF1, S&, int>());\r\n        static_assert(test<PMF1, S*, int>());\r\n        static_assert(test<PMF1, S*&, int>());\r\n        static_assert(test<PMF1, std::unique_ptr<S>, int>());\r\n        static_assert(test<PMF1, std::unique_ptr<DerivesFrom<S>>, int>());\r\n        static_assert(test<PMF1, std::reference_wrapper<S>, int>());\r\n        static_assert(test<PMF1, std::reference_wrapper<S> const&, int>());\r\n        static_assert(test<PMF1, std::reference_wrapper<DerivesFrom<S>>, int>());\r\n        static_assert(test<PMF1, std::reference_wrapper<DerivesFrom<S>> const&, int>());\r\n        static_assert(!test<PMF1, S const&, int>());\r\n        static_assert(!test<PMF1, S volatile&, int>());\r\n        static_assert(!test<PMF1, S const volatile&, int>());\r\n        static_assert(!test<PMF1, NotDerived&, int>());\r\n        static_assert(!test<PMF1, NotDerived const&, int>());\r\n        static_assert(!test<PMF1, std::unique_ptr<S const>, int>());\r\n        static_assert(!test<PMF1, std::reference_wrapper<S const>, int>());\r\n        static_assert(!test<PMF1, std::reference_wrapper<NotDerived>, int>());\r\n        static_assert(!test<PMF1, std::unique_ptr<NotDerived>, int>());\r\n\r\n        static_assert(test<PMF2, S, int, int>());\r\n        static_assert(test<PMF2, S&, int, int>());\r\n        static_assert(test<PMF2, S*, int, int>());\r\n        static_assert(test<PMF2, S*&, int, int>());\r\n        static_assert(test<PMF2, std::unique_ptr<S>, int, int>());\r\n        static_assert(test<PMF2, std::unique_ptr<DerivesFrom<S>>, int, int>());\r\n        static_assert(test<PMF2, std::reference_wrapper<S>, int, int>());\r\n        static_assert(test<PMF2, std::reference_wrapper<S> const&, int, int>());\r\n        static_assert(test<PMF2, std::reference_wrapper<DerivesFrom<S>>, int, int>());\r\n        static_assert(test<PMF2, std::reference_wrapper<DerivesFrom<S>> const&, int, int>());\r\n        static_assert(!test<PMF2, S const&, int, int>());\r\n        static_assert(!test<PMF2, S volatile&, int, int>());\r\n        static_assert(!test<PMF2, S const volatile&, int, int>());\r\n        static_assert(!test<PMF2, std::unique_ptr<S const>, int, int>());\r\n        static_assert(!test<PMF2, std::reference_wrapper<S const>, int, int>());\r\n        static_assert(!test<PMF2, NotDerived const&, int, int>());\r\n        static_assert(!test<PMF2, std::reference_wrapper<NotDerived>, int, int>());\r\n        static_assert(!test<PMF2, std::unique_ptr<NotDerived>, int, int>());\r\n\r\n        static_assert(test<PMF1P, S&, int>());\r\n        static_assert(test<PMF1P, S&, int, long>());\r\n\r\n        using PMF0C  = int (MCALLCONV S::*)() const;\r\n        using PMF1C  = int* (MCALLCONV S::*) (long) const;\r\n        using PMF2C  = int& (MCALLCONV S::*) (long, int) const;\r\n        using PMF1PC = int const& (S::*) (int, ...) const;\r\n        static_assert(test<PMF0C, S>());\r\n        static_assert(test<PMF0C, S&>());\r\n        static_assert(test<PMF0C, S const&>());\r\n        static_assert(test<PMF0C, S*>());\r\n        static_assert(test<PMF0C, S const*>());\r\n        static_assert(test<PMF0C, S*&>());\r\n        static_assert(test<PMF0C, S const*&>());\r\n        static_assert(test<PMF0C, std::unique_ptr<S>>());\r\n        static_assert(test<PMF0C, std::unique_ptr<DerivesFrom<S>>>());\r\n        static_assert(test<PMF0C, std::reference_wrapper<S>>());\r\n        static_assert(test<PMF0C, std::reference_wrapper<S const>>());\r\n        static_assert(test<PMF0C, std::reference_wrapper<S> const&>());\r\n        static_assert(test<PMF0C, std::reference_wrapper<S const> const&>());\r\n        static_assert(test<PMF0C, std::reference_wrapper<DerivesFrom<S>>>());\r\n        static_assert(test<PMF0C, std::reference_wrapper<DerivesFrom<S> const>>());\r\n        static_assert(test<PMF0C, std::reference_wrapper<DerivesFrom<S>> const&>());\r\n        static_assert(test<PMF0C, std::reference_wrapper<DerivesFrom<S> const> const&>());\r\n        static_assert(!test<PMF0C, S volatile&>());\r\n        static_assert(!test<PMF0C, S const volatile&>());\r\n\r\n        static_assert(test<PMF1C, S, int>());\r\n        static_assert(test<PMF1C, S&, int>());\r\n        static_assert(test<PMF1C, S const&, int>());\r\n        static_assert(test<PMF1C, S*, int>());\r\n        static_assert(test<PMF1C, S const*, int>());\r\n        static_assert(test<PMF1C, S*&, int>());\r\n        static_assert(test<PMF1C, S const*&, int>());\r\n        static_assert(test<PMF1C, std::unique_ptr<S>, int>());\r\n        static_assert(!test<PMF1C, S volatile&, int>());\r\n        static_assert(!test<PMF1C, S const volatile&, int>());\r\n\r\n        static_assert(test<PMF2C, S, int, int>());\r\n        static_assert(test<PMF2C, S&, int, int>());\r\n        static_assert(test<PMF2C, S const&, int, int>());\r\n        static_assert(test<PMF2C, S*, int, int>());\r\n        static_assert(test<PMF2C, S const*, int, int>());\r\n        static_assert(test<PMF2C, S*&, int, int>());\r\n        static_assert(test<PMF2C, S const*&, int, int>());\r\n        static_assert(test<PMF2C, std::unique_ptr<S>, int, int>());\r\n        static_assert(!test<PMF2C, S volatile&, int, int>());\r\n        static_assert(!test<PMF2C, S const volatile&, int, int>());\r\n\r\n        static_assert(test<PMF1PC, S&, int>());\r\n        static_assert(test<PMF1PC, S&, int, long>());\r\n\r\n        using PMF0V  = int (MCALLCONV S::*)() volatile;\r\n        using PMF1V  = int* (MCALLCONV S::*) (long) volatile;\r\n        using PMF2V  = int& (MCALLCONV S::*) (long, int) volatile;\r\n        using PMF1PV = int const& (S::*) (int, ...) volatile;\r\n        static_assert(test<PMF0V, S>());\r\n        static_assert(test<PMF0V, S&>());\r\n        static_assert(test<PMF0V, S volatile&>());\r\n        static_assert(test<PMF0V, S*>());\r\n        static_assert(test<PMF0V, S volatile*>());\r\n        static_assert(test<PMF0V, S*&>());\r\n        static_assert(test<PMF0V, S volatile*&>());\r\n        static_assert(test<PMF0V, std::unique_ptr<S>>());\r\n        static_assert(!test<PMF0V, S const&>());\r\n        static_assert(!test<PMF0V, S const volatile&>());\r\n\r\n        static_assert(test<PMF1V, S, int>());\r\n        static_assert(test<PMF1V, S&, int>());\r\n        static_assert(test<PMF1V, S volatile&, int>());\r\n        static_assert(test<PMF1V, S*, int>());\r\n        static_assert(test<PMF1V, S volatile*, int>());\r\n        static_assert(test<PMF1V, S*&, int>());\r\n        static_assert(test<PMF1V, S volatile*&, int>());\r\n        static_assert(test<PMF1V, std::unique_ptr<S>, int>());\r\n        static_assert(!test<PMF1V, S const&, int>());\r\n        static_assert(!test<PMF1V, S const volatile&, int>());\r\n\r\n        static_assert(test<PMF2V, S, int, int>());\r\n        static_assert(test<PMF2V, S&, int, int>());\r\n        static_assert(test<PMF2V, S volatile&, int, int>());\r\n        static_assert(test<PMF2V, S*, int, int>());\r\n        static_assert(test<PMF2V, S volatile*, int, int>());\r\n        static_assert(test<PMF2V, S*&, int, int>());\r\n        static_assert(test<PMF2V, S volatile*&, int, int>());\r\n        static_assert(test<PMF2V, std::unique_ptr<S>, int, int>());\r\n        static_assert(!test<PMF2V, S const&, int, int>());\r\n        static_assert(!test<PMF2V, S const volatile&, int, int>());\r\n\r\n        static_assert(test<PMF1PV, S&, int>());\r\n        static_assert(test<PMF1PV, S&, int, long>());\r\n\r\n        using PMF0CV  = int (MCALLCONV S::*)() const volatile;\r\n        using PMF1CV  = int* (MCALLCONV S::*) (long) const volatile;\r\n        using PMF2CV  = int& (MCALLCONV S::*) (long, int) const volatile;\r\n        using PMF1PCV = int const& (S::*) (int, ...) const volatile;\r\n        static_assert(test<PMF0CV, S>());\r\n        static_assert(test<PMF0CV, S&>());\r\n        static_assert(test<PMF0CV, S const&>());\r\n        static_assert(test<PMF0CV, S volatile&>());\r\n        static_assert(test<PMF0CV, S const volatile&>());\r\n        static_assert(test<PMF0CV, S*>());\r\n        static_assert(test<PMF0CV, S const*>());\r\n        static_assert(test<PMF0CV, S volatile*>());\r\n        static_assert(test<PMF0CV, S const volatile*>());\r\n        static_assert(test<PMF0CV, S*&>());\r\n        static_assert(test<PMF0CV, S const*&>());\r\n        static_assert(test<PMF0CV, S volatile*&>());\r\n        static_assert(test<PMF0CV, S const volatile*&>());\r\n        static_assert(test<PMF0CV, std::unique_ptr<S>>());\r\n\r\n        static_assert(test<PMF1CV, S, int>());\r\n        static_assert(test<PMF1CV, S&, int>());\r\n        static_assert(test<PMF1CV, S const&, int>());\r\n        static_assert(test<PMF1CV, S volatile&, int>());\r\n        static_assert(test<PMF1CV, S const volatile&, int>());\r\n        static_assert(test<PMF1CV, S*, int>());\r\n        static_assert(test<PMF1CV, S const*, int>());\r\n        static_assert(test<PMF1CV, S volatile*, int>());\r\n        static_assert(test<PMF1CV, S const volatile*, int>());\r\n        static_assert(test<PMF1CV, S*&, int>());\r\n        static_assert(test<PMF1CV, S const*&, int>());\r\n        static_assert(test<PMF1CV, S volatile*&, int>());\r\n        static_assert(test<PMF1CV, S const volatile*&, int>());\r\n        static_assert(test<PMF1CV, std::unique_ptr<S>, int>());\r\n\r\n        static_assert(test<PMF2CV, S, int, int>());\r\n        static_assert(test<PMF2CV, S&, int, int>());\r\n        static_assert(test<PMF2CV, S const&, int, int>());\r\n        static_assert(test<PMF2CV, S volatile&, int, int>());\r\n        static_assert(test<PMF2CV, S const volatile&, int, int>());\r\n        static_assert(test<PMF2CV, S*, int, int>());\r\n        static_assert(test<PMF2CV, S const*, int, int>());\r\n        static_assert(test<PMF2CV, S volatile*, int, int>());\r\n        static_assert(test<PMF2CV, S const volatile*, int, int>());\r\n        static_assert(test<PMF2CV, S*&, int, int>());\r\n        static_assert(test<PMF2CV, S const*&, int, int>());\r\n        static_assert(test<PMF2CV, S volatile*&, int, int>());\r\n        static_assert(test<PMF2CV, S const volatile*&, int, int>());\r\n        static_assert(test<PMF2CV, std::unique_ptr<S>, int, int>());\r\n\r\n        static_assert(test<PMF1PCV, S&, int>());\r\n        static_assert(test<PMF1PCV, S&, int, long>());\r\n\r\n        using PMF0R  = int (MCALLCONV S::*)() &;\r\n        using PMF1R  = int* (MCALLCONV S::*) (long) &;\r\n        using PMF2R  = int& (MCALLCONV S::*) (long, int) &;\r\n        using PMF1PR = int const& (S::*) (int, ...) &;\r\n        static_assert(!test<PMF0R, S>());\r\n        static_assert(test<PMF0R, S&>());\r\n        static_assert(test<PMF0R, S*>());\r\n        static_assert(test<PMF0R, S*&>());\r\n        static_assert(test<PMF0R, std::reference_wrapper<S>>());\r\n        static_assert(test<PMF0R, std::reference_wrapper<S> const&>());\r\n        static_assert(test<PMF0R, std::reference_wrapper<DerivesFrom<S>>>());\r\n        static_assert(test<PMF0R, std::reference_wrapper<DerivesFrom<S>> const&>());\r\n        static_assert(test<PMF0R, std::unique_ptr<S>>());\r\n        static_assert(test<PMF0R, std::unique_ptr<DerivesFrom<S>>>());\r\n        static_assert(!test<PMF0R, S const&>());\r\n        static_assert(!test<PMF0R, S volatile&>());\r\n        static_assert(!test<PMF0R, S const volatile&>());\r\n        static_assert(!test<PMF0R, NotDerived&>());\r\n        static_assert(!test<PMF0R, NotDerived const&>());\r\n        static_assert(!test<PMF0R, std::unique_ptr<S const>>());\r\n        static_assert(!test<PMF0R, std::reference_wrapper<S const>>());\r\n        static_assert(!test<PMF0R, std::reference_wrapper<NotDerived>>());\r\n        static_assert(!test<PMF0R, std::unique_ptr<NotDerived>>());\r\n\r\n        static_assert(!test<PMF1R, S, int>());\r\n        static_assert(test<PMF1R, S&, int>());\r\n        static_assert(test<PMF1R, S*, int>());\r\n        static_assert(test<PMF1R, S*&, int>());\r\n        static_assert(test<PMF1R, std::unique_ptr<S>, int>());\r\n        static_assert(test<PMF1R, std::unique_ptr<DerivesFrom<S>>, int>());\r\n        static_assert(test<PMF1R, std::reference_wrapper<S>, int>());\r\n        static_assert(test<PMF1R, std::reference_wrapper<S> const&, int>());\r\n        static_assert(test<PMF1R, std::reference_wrapper<DerivesFrom<S>>, int>());\r\n        static_assert(test<PMF1R, std::reference_wrapper<DerivesFrom<S>> const&, int>());\r\n        static_assert(!test<PMF1R, S const&, int>());\r\n        static_assert(!test<PMF1R, S volatile&, int>());\r\n        static_assert(!test<PMF1R, S const volatile&, int>());\r\n        static_assert(!test<PMF1R, NotDerived&, int>());\r\n        static_assert(!test<PMF1R, NotDerived const&, int>());\r\n        static_assert(!test<PMF1R, std::unique_ptr<S const>, int>());\r\n        static_assert(!test<PMF1R, std::reference_wrapper<S const>, int>());\r\n        static_assert(!test<PMF1R, std::reference_wrapper<NotDerived>, int>());\r\n        static_assert(!test<PMF1R, std::unique_ptr<NotDerived>, int>());\r\n\r\n        static_assert(!test<PMF2R, S, int, int>());\r\n        static_assert(test<PMF2R, S&, int, int>());\r\n        static_assert(test<PMF2R, S*, int, int>());\r\n        static_assert(test<PMF2R, S*&, int, int>());\r\n        static_assert(test<PMF2R, std::unique_ptr<S>, int, int>());\r\n        static_assert(test<PMF2R, std::unique_ptr<DerivesFrom<S>>, int, int>());\r\n        static_assert(test<PMF2R, std::reference_wrapper<S>, int, int>());\r\n        static_assert(test<PMF2R, std::reference_wrapper<S> const&, int, int>());\r\n        static_assert(test<PMF2R, std::reference_wrapper<DerivesFrom<S>>, int, int>());\r\n        static_assert(test<PMF2R, std::reference_wrapper<DerivesFrom<S>> const&, int, int>());\r\n        static_assert(!test<PMF2R, S const&, int, int>());\r\n        static_assert(!test<PMF2R, S volatile&, int, int>());\r\n        static_assert(!test<PMF2R, S const volatile&, int, int>());\r\n        static_assert(!test<PMF2R, std::unique_ptr<S const>, int, int>());\r\n        static_assert(!test<PMF2R, std::reference_wrapper<S const>, int, int>());\r\n        static_assert(!test<PMF2R, NotDerived const&, int, int>());\r\n        static_assert(!test<PMF2R, std::reference_wrapper<NotDerived>, int, int>());\r\n        static_assert(!test<PMF2R, std::unique_ptr<NotDerived>, int, int>());\r\n\r\n        static_assert(test<PMF1PR, S&, int>());\r\n        static_assert(test<PMF1PR, S&, int, long>());\r\n\r\n        using PMF0CR  = int (MCALLCONV S::*)() const&;\r\n        using PMF1CR  = int* (MCALLCONV S::*) (long) const&;\r\n        using PMF2CR  = int& (MCALLCONV S::*) (long, int) const&;\r\n        using PMF1PCR = int const& (S::*) (int, ...) const&;\r\n        static_assert(test<PMF0CR, S>());\r\n        static_assert(test<PMF0CR, S&>());\r\n        static_assert(test<PMF0CR, S*>());\r\n        static_assert(test<PMF0CR, S*&>());\r\n        static_assert(test<PMF0CR, std::reference_wrapper<S>>());\r\n        static_assert(test<PMF0CR, std::reference_wrapper<S> const&>());\r\n        static_assert(test<PMF0CR, std::reference_wrapper<DerivesFrom<S>>>());\r\n        static_assert(test<PMF0CR, std::reference_wrapper<DerivesFrom<S>> const&>());\r\n        static_assert(test<PMF0CR, std::unique_ptr<S>>());\r\n        static_assert(test<PMF0CR, std::unique_ptr<DerivesFrom<S>>>());\r\n        static_assert(test<PMF0CR, S const&>());\r\n        static_assert(!test<PMF0CR, S volatile&>());\r\n        static_assert(!test<PMF0CR, S const volatile&>());\r\n        static_assert(!test<PMF0CR, NotDerived&>());\r\n        static_assert(!test<PMF0CR, NotDerived const&>());\r\n        static_assert(test<PMF0CR, std::unique_ptr<S const>>());\r\n        static_assert(test<PMF0CR, std::reference_wrapper<S const>>());\r\n        static_assert(!test<PMF0CR, std::reference_wrapper<NotDerived>>());\r\n        static_assert(!test<PMF0CR, std::unique_ptr<NotDerived>>());\r\n\r\n        static_assert(test<PMF1CR, S, int>());\r\n        static_assert(test<PMF1CR, S&, int>());\r\n        static_assert(test<PMF1CR, S*, int>());\r\n        static_assert(test<PMF1CR, S*&, int>());\r\n        static_assert(test<PMF1CR, std::unique_ptr<S>, int>());\r\n        static_assert(test<PMF1CR, std::unique_ptr<DerivesFrom<S>>, int>());\r\n        static_assert(test<PMF1CR, std::reference_wrapper<S>, int>());\r\n        static_assert(test<PMF1CR, std::reference_wrapper<S> const&, int>());\r\n        static_assert(test<PMF1CR, std::reference_wrapper<DerivesFrom<S>>, int>());\r\n        static_assert(test<PMF1CR, std::reference_wrapper<DerivesFrom<S>> const&, int>());\r\n        static_assert(test<PMF1CR, S const&, int>());\r\n        static_assert(!test<PMF1CR, S volatile&, int>());\r\n        static_assert(!test<PMF1CR, S const volatile&, int>());\r\n        static_assert(!test<PMF1CR, NotDerived&, int>());\r\n        static_assert(!test<PMF1CR, NotDerived const&, int>());\r\n        static_assert(test<PMF1CR, std::unique_ptr<S const>, int>());\r\n        static_assert(test<PMF1CR, std::reference_wrapper<S const>, int>());\r\n        static_assert(!test<PMF1CR, std::reference_wrapper<NotDerived>, int>());\r\n        static_assert(!test<PMF1CR, std::unique_ptr<NotDerived>, int>());\r\n\r\n        static_assert(test<PMF2CR, S, int, int>());\r\n        static_assert(test<PMF2CR, S&, int, int>());\r\n        static_assert(test<PMF2CR, S*, int, int>());\r\n        static_assert(test<PMF2CR, S*&, int, int>());\r\n        static_assert(test<PMF2CR, std::unique_ptr<S>, int, int>());\r\n        static_assert(test<PMF2CR, std::unique_ptr<DerivesFrom<S>>, int, int>());\r\n        static_assert(test<PMF2CR, std::reference_wrapper<S>, int, int>());\r\n        static_assert(test<PMF2CR, std::reference_wrapper<S> const&, int, int>());\r\n        static_assert(test<PMF2CR, std::reference_wrapper<DerivesFrom<S>>, int, int>());\r\n        static_assert(test<PMF2CR, std::reference_wrapper<DerivesFrom<S>> const&, int, int>());\r\n        static_assert(test<PMF2CR, S const&, int, int>());\r\n        static_assert(!test<PMF2CR, S volatile&, int, int>());\r\n        static_assert(!test<PMF2CR, S const volatile&, int, int>());\r\n        static_assert(test<PMF2CR, std::unique_ptr<S const>, int, int>());\r\n        static_assert(test<PMF2CR, std::reference_wrapper<S const>, int, int>());\r\n        static_assert(!test<PMF2CR, NotDerived const&, int, int>());\r\n        static_assert(!test<PMF2CR, std::reference_wrapper<NotDerived>, int, int>());\r\n        static_assert(!test<PMF2CR, std::unique_ptr<NotDerived>, int, int>());\r\n\r\n        static_assert(test<PMF1PCR, S&, int>());\r\n        static_assert(test<PMF1PCR, S&, int, long>());\r\n\r\n        using PMF0CVR  = int (MCALLCONV S::*)() const volatile&;\r\n        using PMF1CVR  = int* (MCALLCONV S::*) (long) const volatile&;\r\n        using PMF2CVR  = int& (MCALLCONV S::*) (long, int) const volatile&;\r\n        using PMF1PCVR = int const& (S::*) (int, ...) const volatile&;\r\n        static_assert(!test<PMF0CVR, S>());\r\n        static_assert(test<PMF0CVR, S&>());\r\n        static_assert(test<PMF0CVR, S*>());\r\n        static_assert(test<PMF0CVR, S*&>());\r\n        static_assert(test<PMF0CVR, std::reference_wrapper<S>>());\r\n        static_assert(test<PMF0CVR, std::reference_wrapper<S> const&>());\r\n        static_assert(test<PMF0CVR, std::reference_wrapper<DerivesFrom<S>>>());\r\n        static_assert(test<PMF0CVR, std::reference_wrapper<DerivesFrom<S>> const&>());\r\n        static_assert(test<PMF0CVR, std::unique_ptr<S>>());\r\n        static_assert(test<PMF0CVR, std::unique_ptr<DerivesFrom<S>>>());\r\n        static_assert(test<PMF0CVR, S const&>());\r\n        static_assert(test<PMF0CVR, S volatile&>());\r\n        static_assert(test<PMF0CVR, S const volatile&>());\r\n        static_assert(!test<PMF0CVR, NotDerived&>());\r\n        static_assert(!test<PMF0CVR, NotDerived const&>());\r\n        static_assert(test<PMF0CVR, std::unique_ptr<S const>>());\r\n        static_assert(test<PMF0CVR, std::reference_wrapper<S const>>());\r\n        static_assert(!test<PMF0CVR, std::reference_wrapper<NotDerived>>());\r\n        static_assert(!test<PMF0CVR, std::unique_ptr<NotDerived>>());\r\n\r\n        static_assert(!test<PMF1CVR, S, int>());\r\n        static_assert(test<PMF1CVR, S&, int>());\r\n        static_assert(test<PMF1CVR, S*, int>());\r\n        static_assert(test<PMF1CVR, S*&, int>());\r\n        static_assert(test<PMF1CVR, std::unique_ptr<S>, int>());\r\n        static_assert(test<PMF1CVR, std::unique_ptr<DerivesFrom<S>>, int>());\r\n        static_assert(test<PMF1CVR, std::reference_wrapper<S>, int>());\r\n        static_assert(test<PMF1CVR, std::reference_wrapper<S> const&, int>());\r\n        static_assert(test<PMF1CVR, std::reference_wrapper<DerivesFrom<S>>, int>());\r\n        static_assert(test<PMF1CVR, std::reference_wrapper<DerivesFrom<S>> const&, int>());\r\n        static_assert(test<PMF1CVR, S const&, int>());\r\n        static_assert(test<PMF1CVR, S volatile&, int>());\r\n        static_assert(test<PMF1CVR, S const volatile&, int>());\r\n        static_assert(!test<PMF1CVR, NotDerived&, int>());\r\n        static_assert(!test<PMF1CVR, NotDerived const&, int>());\r\n        static_assert(test<PMF1CVR, std::unique_ptr<S const>, int>());\r\n        static_assert(test<PMF1CVR, std::reference_wrapper<S const>, int>());\r\n        static_assert(!test<PMF1CVR, std::reference_wrapper<NotDerived>, int>());\r\n        static_assert(!test<PMF1CVR, std::unique_ptr<NotDerived>, int>());\r\n\r\n        static_assert(!test<PMF2CVR, S, int, int>());\r\n        static_assert(test<PMF2CVR, S&, int, int>());\r\n        static_assert(test<PMF2CVR, S*, int, int>());\r\n        static_assert(test<PMF2CVR, S*&, int, int>());\r\n        static_assert(test<PMF2CVR, std::unique_ptr<S>, int, int>());\r\n        static_assert(test<PMF2CVR, std::unique_ptr<DerivesFrom<S>>, int, int>());\r\n        static_assert(test<PMF2CVR, std::reference_wrapper<S>, int, int>());\r\n        static_assert(test<PMF2CVR, std::reference_wrapper<S> const&, int, int>());\r\n        static_assert(test<PMF2CVR, std::reference_wrapper<DerivesFrom<S>>, int, int>());\r\n        static_assert(test<PMF2CVR, std::reference_wrapper<DerivesFrom<S>> const&, int, int>());\r\n        static_assert(test<PMF2CVR, S const&, int, int>());\r\n        static_assert(test<PMF2CVR, S volatile&, int, int>());\r\n        static_assert(test<PMF2CVR, S const volatile&, int, int>());\r\n        static_assert(test<PMF2CVR, std::unique_ptr<S const>, int, int>());\r\n        static_assert(test<PMF2CVR, std::reference_wrapper<S const>, int, int>());\r\n        static_assert(!test<PMF2CVR, NotDerived const&, int, int>());\r\n        static_assert(!test<PMF2CVR, std::reference_wrapper<NotDerived>, int, int>());\r\n        static_assert(!test<PMF2CVR, std::unique_ptr<NotDerived>, int, int>());\r\n\r\n        static_assert(test<PMF1PCVR, S&, int>());\r\n        static_assert(test<PMF1PCVR, S&, int, long>());\r\n\r\n        using PMF0RR  = int (MCALLCONV S::*)() &&;\r\n        using PMF1RR  = int* (MCALLCONV S::*) (long) &&;\r\n        using PMF2RR  = int& (MCALLCONV S::*) (long, int) &&;\r\n        using PMF1PRR = int const& (S::*) (int, ...) &&;\r\n        static_assert(test<PMF0RR, S>());\r\n        static_assert(!test<PMF0RR, S&>());\r\n        static_assert(!test<PMF0RR, S*>());\r\n        static_assert(!test<PMF0RR, S*&>());\r\n        static_assert(!test<PMF0RR, std::reference_wrapper<S>>());\r\n        static_assert(!test<PMF0RR, std::reference_wrapper<S> const&>());\r\n        static_assert(!test<PMF0RR, std::reference_wrapper<DerivesFrom<S>>>());\r\n        static_assert(!test<PMF0RR, std::reference_wrapper<DerivesFrom<S>> const&>());\r\n        static_assert(!test<PMF0RR, std::unique_ptr<S>>());\r\n        static_assert(!test<PMF0RR, std::unique_ptr<DerivesFrom<S>>>());\r\n        static_assert(!test<PMF0RR, S const&>());\r\n        static_assert(!test<PMF0RR, S volatile&>());\r\n        static_assert(!test<PMF0RR, S const volatile&>());\r\n        static_assert(!test<PMF0RR, NotDerived&>());\r\n        static_assert(!test<PMF0RR, NotDerived const&>());\r\n        static_assert(!test<PMF0RR, std::unique_ptr<S const>>());\r\n        static_assert(!test<PMF0RR, std::reference_wrapper<S const>>());\r\n        static_assert(!test<PMF0RR, std::reference_wrapper<NotDerived>>());\r\n        static_assert(!test<PMF0RR, std::unique_ptr<NotDerived>>());\r\n\r\n        static_assert(test<PMF1RR, S, int>());\r\n        static_assert(!test<PMF1RR, S&, int>());\r\n        static_assert(!test<PMF1RR, S*, int>());\r\n        static_assert(!test<PMF1RR, S*&, int>());\r\n        static_assert(!test<PMF1RR, std::unique_ptr<S>, int>());\r\n        static_assert(!test<PMF1RR, std::unique_ptr<DerivesFrom<S>>, int>());\r\n        static_assert(!test<PMF1RR, std::reference_wrapper<S>, int>());\r\n        static_assert(!test<PMF1RR, std::reference_wrapper<S> const&, int>());\r\n        static_assert(!test<PMF1RR, std::reference_wrapper<DerivesFrom<S>>, int>());\r\n        static_assert(!test<PMF1RR, std::reference_wrapper<DerivesFrom<S>> const&, int>());\r\n        static_assert(!test<PMF1RR, S const&, int>());\r\n        static_assert(!test<PMF1RR, S volatile&, int>());\r\n        static_assert(!test<PMF1RR, S const volatile&, int>());\r\n        static_assert(!test<PMF1RR, NotDerived&, int>());\r\n        static_assert(!test<PMF1RR, NotDerived const&, int>());\r\n        static_assert(!test<PMF1RR, std::unique_ptr<S const>, int>());\r\n        static_assert(!test<PMF1RR, std::reference_wrapper<S const>, int>());\r\n        static_assert(!test<PMF1RR, std::reference_wrapper<NotDerived>, int>());\r\n        static_assert(!test<PMF1RR, std::unique_ptr<NotDerived>, int>());\r\n\r\n        static_assert(test<PMF2RR, S, int, int>());\r\n        static_assert(!test<PMF2RR, S&, int, int>());\r\n        static_assert(!test<PMF2RR, S*, int, int>());\r\n        static_assert(!test<PMF2RR, S*&, int, int>());\r\n        static_assert(!test<PMF2RR, std::unique_ptr<S>, int, int>());\r\n        static_assert(!test<PMF2RR, std::unique_ptr<DerivesFrom<S>>, int, int>());\r\n        static_assert(!test<PMF2RR, std::reference_wrapper<S>, int, int>());\r\n        static_assert(!test<PMF2RR, std::reference_wrapper<S> const&, int, int>());\r\n        static_assert(!test<PMF2RR, std::reference_wrapper<DerivesFrom<S>>, int, int>());\r\n        static_assert(!test<PMF2RR, std::reference_wrapper<DerivesFrom<S>> const&, int, int>());\r\n        static_assert(!test<PMF2RR, S const&, int, int>());\r\n        static_assert(!test<PMF2RR, S volatile&, int, int>());\r\n        static_assert(!test<PMF2RR, S const volatile&, int, int>());\r\n        static_assert(!test<PMF2RR, std::unique_ptr<S const>, int, int>());\r\n        static_assert(!test<PMF2RR, std::reference_wrapper<S const>, int, int>());\r\n        static_assert(!test<PMF2RR, NotDerived const&, int, int>());\r\n        static_assert(!test<PMF2RR, std::reference_wrapper<NotDerived>, int, int>());\r\n        static_assert(!test<PMF2RR, std::unique_ptr<NotDerived>, int, int>());\r\n\r\n        static_assert(!test<PMF1PRR, S&, int>());\r\n        static_assert(!test<PMF1PRR, S&, int, long>());\r\n\r\n        using PMF0CRR  = int (MCALLCONV S::*)() const&&;\r\n        using PMF1CRR  = int* (MCALLCONV S::*) (long) const&&;\r\n        using PMF2CRR  = int& (MCALLCONV S::*) (long, int) const&&;\r\n        using PMF1PCRR = int const& (S::*) (int, ...) const&&;\r\n        static_assert(test<PMF0CRR, S>());\r\n        static_assert(!test<PMF0CRR, S&>());\r\n        static_assert(!test<PMF0CRR, S*>());\r\n        static_assert(!test<PMF0CRR, S*&>());\r\n        static_assert(!test<PMF0CRR, std::reference_wrapper<S>>());\r\n        static_assert(!test<PMF0CRR, std::reference_wrapper<S> const&>());\r\n        static_assert(!test<PMF0CRR, std::reference_wrapper<DerivesFrom<S>>>());\r\n        static_assert(!test<PMF0CRR, std::reference_wrapper<DerivesFrom<S>> const&>());\r\n        static_assert(!test<PMF0CRR, std::unique_ptr<S>>());\r\n        static_assert(!test<PMF0CRR, std::unique_ptr<DerivesFrom<S>>>());\r\n        static_assert(!test<PMF0CRR, S const&>());\r\n        static_assert(!test<PMF0CRR, S volatile&>());\r\n        static_assert(!test<PMF0CRR, S const volatile&>());\r\n        static_assert(!test<PMF0CRR, NotDerived&>());\r\n        static_assert(!test<PMF0CRR, NotDerived const&>());\r\n        static_assert(!test<PMF0CRR, std::unique_ptr<S const>>());\r\n        static_assert(!test<PMF0CRR, std::reference_wrapper<S const>>());\r\n        static_assert(!test<PMF0CRR, std::reference_wrapper<NotDerived>>());\r\n        static_assert(!test<PMF0CRR, std::unique_ptr<NotDerived>>());\r\n\r\n        static_assert(test<PMF1CRR, S, int>());\r\n        static_assert(!test<PMF1CRR, S&, int>());\r\n        static_assert(!test<PMF1CRR, S*, int>());\r\n        static_assert(!test<PMF1CRR, S*&, int>());\r\n        static_assert(!test<PMF1CRR, std::unique_ptr<S>, int>());\r\n        static_assert(!test<PMF1CRR, std::unique_ptr<DerivesFrom<S>>, int>());\r\n        static_assert(!test<PMF1CRR, std::reference_wrapper<S>, int>());\r\n        static_assert(!test<PMF1CRR, std::reference_wrapper<S> const&, int>());\r\n        static_assert(!test<PMF1CRR, std::reference_wrapper<DerivesFrom<S>>, int>());\r\n        static_assert(!test<PMF1CRR, std::reference_wrapper<DerivesFrom<S>> const&, int>());\r\n        static_assert(!test<PMF1CRR, S const&, int>());\r\n        static_assert(!test<PMF1CRR, S volatile&, int>());\r\n        static_assert(!test<PMF1CRR, S const volatile&, int>());\r\n        static_assert(!test<PMF1CRR, NotDerived&, int>());\r\n        static_assert(!test<PMF1CRR, NotDerived const&, int>());\r\n        static_assert(!test<PMF1CRR, std::unique_ptr<S const>, int>());\r\n        static_assert(!test<PMF1CRR, std::reference_wrapper<S const>, int>());\r\n        static_assert(!test<PMF1CRR, std::reference_wrapper<NotDerived>, int>());\r\n        static_assert(!test<PMF1CRR, std::unique_ptr<NotDerived>, int>());\r\n\r\n        static_assert(test<PMF2CRR, S, int, int>());\r\n        static_assert(!test<PMF2CRR, S&, int, int>());\r\n        static_assert(!test<PMF2CRR, S*, int, int>());\r\n        static_assert(!test<PMF2CRR, S*&, int, int>());\r\n        static_assert(!test<PMF2CRR, std::unique_ptr<S>, int, int>());\r\n        static_assert(!test<PMF2CRR, std::unique_ptr<DerivesFrom<S>>, int, int>());\r\n        static_assert(!test<PMF2CRR, std::reference_wrapper<S>, int, int>());\r\n        static_assert(!test<PMF2CRR, std::reference_wrapper<S> const&, int, int>());\r\n        static_assert(!test<PMF2CRR, std::reference_wrapper<DerivesFrom<S>>, int, int>());\r\n        static_assert(!test<PMF2CRR, std::reference_wrapper<DerivesFrom<S>> const&, int, int>());\r\n        static_assert(!test<PMF2CRR, S const&, int, int>());\r\n        static_assert(!test<PMF2CRR, S volatile&, int, int>());\r\n        static_assert(!test<PMF2CRR, S const volatile&, int, int>());\r\n        static_assert(!test<PMF2CRR, std::unique_ptr<S const>, int, int>());\r\n        static_assert(!test<PMF2CRR, std::reference_wrapper<S const>, int, int>());\r\n        static_assert(!test<PMF2CRR, NotDerived const&, int, int>());\r\n        static_assert(!test<PMF2CRR, std::reference_wrapper<NotDerived>, int, int>());\r\n        static_assert(!test<PMF2CRR, std::unique_ptr<NotDerived>, int, int>());\r\n\r\n        static_assert(!test<PMF1PCRR, S&, int>());\r\n        static_assert(!test<PMF1PCRR, S&, int, long>());\r\n\r\n        using PMF0VRR  = int (MCALLCONV S::*)() volatile&&;\r\n        using PMF1VRR  = int* (MCALLCONV S::*) (long) volatile&&;\r\n        using PMF2VRR  = int& (MCALLCONV S::*) (long, int) volatile&&;\r\n        using PMF1PVRR = int const& (S::*) (int, ...) volatile&&;\r\n        static_assert(test<PMF0VRR, S>());\r\n        static_assert(!test<PMF0VRR, S&>());\r\n        static_assert(!test<PMF0VRR, S*>());\r\n        static_assert(!test<PMF0VRR, S*&>());\r\n        static_assert(!test<PMF0VRR, std::reference_wrapper<S>>());\r\n        static_assert(!test<PMF0VRR, std::reference_wrapper<S> const&>());\r\n        static_assert(!test<PMF0VRR, std::reference_wrapper<DerivesFrom<S>>>());\r\n        static_assert(!test<PMF0VRR, std::reference_wrapper<DerivesFrom<S>> const&>());\r\n        static_assert(!test<PMF0VRR, std::unique_ptr<S>>());\r\n        static_assert(!test<PMF0VRR, std::unique_ptr<DerivesFrom<S>>>());\r\n        static_assert(!test<PMF0VRR, S const&>());\r\n        static_assert(!test<PMF0VRR, S volatile&>());\r\n        static_assert(!test<PMF0VRR, S const volatile&>());\r\n        static_assert(!test<PMF0VRR, NotDerived&>());\r\n        static_assert(!test<PMF0VRR, NotDerived const&>());\r\n        static_assert(!test<PMF0VRR, std::unique_ptr<S const>>());\r\n        static_assert(!test<PMF0VRR, std::reference_wrapper<S const>>());\r\n        static_assert(!test<PMF0VRR, std::reference_wrapper<NotDerived>>());\r\n        static_assert(!test<PMF0VRR, std::unique_ptr<NotDerived>>());\r\n\r\n        static_assert(test<PMF1VRR, S, int>());\r\n        static_assert(!test<PMF1VRR, S&, int>());\r\n        static_assert(!test<PMF1VRR, S*, int>());\r\n        static_assert(!test<PMF1VRR, S*&, int>());\r\n        static_assert(!test<PMF1VRR, std::unique_ptr<S>, int>());\r\n        static_assert(!test<PMF1VRR, std::unique_ptr<DerivesFrom<S>>, int>());\r\n        static_assert(!test<PMF1VRR, std::reference_wrapper<S>, int>());\r\n        static_assert(!test<PMF1VRR, std::reference_wrapper<S> const&, int>());\r\n        static_assert(!test<PMF1VRR, std::reference_wrapper<DerivesFrom<S>>, int>());\r\n        static_assert(!test<PMF1VRR, std::reference_wrapper<DerivesFrom<S>> const&, int>());\r\n        static_assert(!test<PMF1VRR, S const&, int>());\r\n        static_assert(!test<PMF1VRR, S volatile&, int>());\r\n        static_assert(!test<PMF1VRR, S const volatile&, int>());\r\n        static_assert(!test<PMF1VRR, NotDerived&, int>());\r\n        static_assert(!test<PMF1VRR, NotDerived const&, int>());\r\n        static_assert(!test<PMF1VRR, std::unique_ptr<S const>, int>());\r\n        static_assert(!test<PMF1VRR, std::reference_wrapper<S const>, int>());\r\n        static_assert(!test<PMF1VRR, std::reference_wrapper<NotDerived>, int>());\r\n        static_assert(!test<PMF1VRR, std::unique_ptr<NotDerived>, int>());\r\n\r\n        static_assert(test<PMF2VRR, S, int, int>());\r\n        static_assert(!test<PMF2VRR, S&, int, int>());\r\n        static_assert(!test<PMF2VRR, S*, int, int>());\r\n        static_assert(!test<PMF2VRR, S*&, int, int>());\r\n        static_assert(!test<PMF2VRR, std::unique_ptr<S>, int, int>());\r\n        static_assert(!test<PMF2VRR, std::unique_ptr<DerivesFrom<S>>, int, int>());\r\n        static_assert(!test<PMF2VRR, std::reference_wrapper<S>, int, int>());\r\n        static_assert(!test<PMF2VRR, std::reference_wrapper<S> const&, int, int>());\r\n        static_assert(!test<PMF2VRR, std::reference_wrapper<DerivesFrom<S>>, int, int>());\r\n        static_assert(!test<PMF2VRR, std::reference_wrapper<DerivesFrom<S>> const&, int, int>());\r\n        static_assert(!test<PMF2VRR, S const&, int, int>());\r\n        static_assert(!test<PMF2VRR, S volatile&, int, int>());\r\n        static_assert(!test<PMF2VRR, S const volatile&, int, int>());\r\n        static_assert(!test<PMF2VRR, std::unique_ptr<S const>, int, int>());\r\n        static_assert(!test<PMF2VRR, std::reference_wrapper<S const>, int, int>());\r\n        static_assert(!test<PMF2VRR, NotDerived const&, int, int>());\r\n        static_assert(!test<PMF2VRR, std::reference_wrapper<NotDerived>, int, int>());\r\n        static_assert(!test<PMF2VRR, std::unique_ptr<NotDerived>, int, int>());\r\n\r\n        static_assert(!test<PMF1PVRR, S&, int>());\r\n        static_assert(!test<PMF1PVRR, S&, int, long>());\r\n\r\n        using PMF0CVRR  = int (MCALLCONV S::*)() const volatile&&;\r\n        using PMF1CVRR  = int* (MCALLCONV S::*) (long) const volatile&&;\r\n        using PMF2CVRR  = int& (MCALLCONV S::*) (long, int) const volatile&&;\r\n        using PMF1PCVRR = int const& (S::*) (int, ...) const volatile&&;\r\n        static_assert(test<PMF0CVRR, S>());\r\n        static_assert(!test<PMF0CVRR, S&>());\r\n        static_assert(!test<PMF0CVRR, S*>());\r\n        static_assert(!test<PMF0CVRR, S*&>());\r\n        static_assert(!test<PMF0CVRR, std::reference_wrapper<S>>());\r\n        static_assert(!test<PMF0CVRR, std::reference_wrapper<S> const&>());\r\n        static_assert(!test<PMF0CVRR, std::reference_wrapper<DerivesFrom<S>>>());\r\n        static_assert(!test<PMF0CVRR, std::reference_wrapper<DerivesFrom<S>> const&>());\r\n        static_assert(!test<PMF0CVRR, std::unique_ptr<S>>());\r\n        static_assert(!test<PMF0CVRR, std::unique_ptr<DerivesFrom<S>>>());\r\n        static_assert(!test<PMF0CVRR, S const&>());\r\n        static_assert(!test<PMF0CVRR, S volatile&>());\r\n        static_assert(!test<PMF0CVRR, S const volatile&>());\r\n        static_assert(!test<PMF0CVRR, NotDerived&>());\r\n        static_assert(!test<PMF0CVRR, NotDerived const&>());\r\n        static_assert(!test<PMF0CVRR, std::unique_ptr<S const>>());\r\n        static_assert(!test<PMF0CVRR, std::reference_wrapper<S const>>());\r\n        static_assert(!test<PMF0CVRR, std::reference_wrapper<NotDerived>>());\r\n        static_assert(!test<PMF0CVRR, std::unique_ptr<NotDerived>>());\r\n\r\n        static_assert(test<PMF1CVRR, S, int>());\r\n        static_assert(!test<PMF1CVRR, S&, int>());\r\n        static_assert(!test<PMF1CVRR, S*, int>());\r\n        static_assert(!test<PMF1CVRR, S*&, int>());\r\n        static_assert(!test<PMF1CVRR, std::unique_ptr<S>, int>());\r\n        static_assert(!test<PMF1CVRR, std::unique_ptr<DerivesFrom<S>>, int>());\r\n        static_assert(!test<PMF1CVRR, std::reference_wrapper<S>, int>());\r\n        static_assert(!test<PMF1CVRR, std::reference_wrapper<S> const&, int>());\r\n        static_assert(!test<PMF1CVRR, std::reference_wrapper<DerivesFrom<S>>, int>());\r\n        static_assert(!test<PMF1CVRR, std::reference_wrapper<DerivesFrom<S>> const&, int>());\r\n        static_assert(!test<PMF1CVRR, S const&, int>());\r\n        static_assert(!test<PMF1CVRR, S volatile&, int>());\r\n        static_assert(!test<PMF1CVRR, S const volatile&, int>());\r\n        static_assert(!test<PMF1CVRR, NotDerived&, int>());\r\n        static_assert(!test<PMF1CVRR, NotDerived const&, int>());\r\n        static_assert(!test<PMF1CVRR, std::unique_ptr<S const>, int>());\r\n        static_assert(!test<PMF1CVRR, std::reference_wrapper<S const>, int>());\r\n        static_assert(!test<PMF1CVRR, std::reference_wrapper<NotDerived>, int>());\r\n        static_assert(!test<PMF1CVRR, std::unique_ptr<NotDerived>, int>());\r\n\r\n        static_assert(test<PMF2CVRR, S, int, int>());\r\n        static_assert(!test<PMF2CVRR, S&, int, int>());\r\n        static_assert(!test<PMF2CVRR, S*, int, int>());\r\n        static_assert(!test<PMF2CVRR, S*&, int, int>());\r\n        static_assert(!test<PMF2CVRR, std::unique_ptr<S>, int, int>());\r\n        static_assert(!test<PMF2CVRR, std::unique_ptr<DerivesFrom<S>>, int, int>());\r\n        static_assert(!test<PMF2CVRR, std::reference_wrapper<S>, int, int>());\r\n        static_assert(!test<PMF2CVRR, std::reference_wrapper<S> const&, int, int>());\r\n        static_assert(!test<PMF2CVRR, std::reference_wrapper<DerivesFrom<S>>, int, int>());\r\n        static_assert(!test<PMF2CVRR, std::reference_wrapper<DerivesFrom<S>> const&, int, int>());\r\n        static_assert(!test<PMF2CVRR, S const&, int, int>());\r\n        static_assert(!test<PMF2CVRR, S volatile&, int, int>());\r\n        static_assert(!test<PMF2CVRR, S const volatile&, int, int>());\r\n        static_assert(!test<PMF2CVRR, std::unique_ptr<S const>, int, int>());\r\n        static_assert(!test<PMF2CVRR, std::reference_wrapper<S const>, int, int>());\r\n        static_assert(!test<PMF2CVRR, NotDerived const&, int, int>());\r\n        static_assert(!test<PMF2CVRR, std::reference_wrapper<NotDerived>, int, int>());\r\n        static_assert(!test<PMF2CVRR, std::unique_ptr<NotDerived>, int, int>());\r\n\r\n        static_assert(!test<PMF1PCVRR, S&, int>());\r\n        static_assert(!test<PMF1PCVRR, S&, int, long>());\r\n    }\r\n}\r\n\r\n#undef CALLCONV\r\n#undef MCALLCONV\r\n#undef NAME\r\n"
  },
  {
    "path": "tests/std/tests/P0898R3_concepts/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n#include <bitset>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <cstdio>\r\n#include <functional>\r\n#include <initializer_list>\r\n#include <memory>\r\n#include <random>\r\n#include <stdlib.h>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <is_permissive.hpp>\r\n\r\ntemplate <class, class = void>\r\nconstexpr bool is_trait = false;\r\ntemplate <class T>\r\nconstexpr bool is_trait<T, std::void_t<typename T::type>> = true;\r\n\r\nstruct IncompleteClass;\r\nunion IncompleteUnion;\r\n\r\ntemplate <class T>\r\nstruct DoNotInstantiate {\r\n    static_assert(false);\r\n};\r\n\r\nstruct Immobile {\r\n    Immobile()                           = default;\r\n    Immobile(Immobile const&)            = delete;\r\n    Immobile& operator=(Immobile const&) = delete;\r\n};\r\n\r\nstruct MoveOnly {\r\n    MoveOnly()                      = default;\r\n    MoveOnly(MoveOnly&&)            = default;\r\n    MoveOnly& operator=(MoveOnly&&) = default;\r\n};\r\n\r\nstruct CopyOnlyAbomination {\r\n    CopyOnlyAbomination()                                      = default;\r\n    CopyOnlyAbomination(CopyOnlyAbomination const&)            = default;\r\n    CopyOnlyAbomination(CopyOnlyAbomination&&)                 = delete;\r\n    CopyOnlyAbomination& operator=(CopyOnlyAbomination const&) = default;\r\n    CopyOnlyAbomination& operator=(CopyOnlyAbomination&&)      = delete;\r\n};\r\n\r\nstruct CopyableType {\r\n    CopyableType() = delete;\r\n};\r\n\r\nstruct SemiregularType {};\r\n\r\nstruct RegularType {\r\n    friend constexpr bool operator==(RegularType const&, RegularType const&) {\r\n        return true;\r\n    }\r\n    friend constexpr bool operator!=(RegularType const&, RegularType const&) {\r\n        return false;\r\n    }\r\n};\r\n\r\nstruct Indestructible {\r\n    ~Indestructible() = delete;\r\n};\r\n\r\nstruct NonTriviallyDestructible {\r\n    ~NonTriviallyDestructible();\r\n};\r\n\r\nclass PrivateDestructor {\r\npublic:\r\n    PrivateDestructor(int) {}\r\n\r\nprivate:\r\n    ~PrivateDestructor() {}\r\n};\r\n\r\nstruct ThrowingDestructor {\r\n    ~ThrowingDestructor() noexcept(false);\r\n};\r\n\r\nclass PurePublicDestructor {\r\npublic:\r\n    virtual ~PurePublicDestructor() = 0;\r\n};\r\nclass PureProtectedDestructor {\r\nprotected:\r\n    virtual ~PureProtectedDestructor() = 0;\r\n};\r\nclass PurePrivateDestructor {\r\nprivate:\r\n    virtual ~PurePrivateDestructor() = 0;\r\n};\r\n\r\nstruct NotDefaultConstructible {\r\n    NotDefaultConstructible(int) {}\r\n};\r\n\r\nclass PublicAbstract {\r\npublic:\r\n    virtual void meow() = 0;\r\n};\r\nclass ProtectedAbstract {\r\nprotected:\r\n    virtual void meow() = 0;\r\n};\r\nclass PrivateAbstract {\r\nprivate:\r\n    virtual void meow() = 0;\r\n};\r\n\r\nstruct ExplicitDefault {\r\n    explicit ExplicitDefault() = default;\r\n};\r\n\r\nstruct AggregatesExplicitDefault {\r\n    ExplicitDefault meow;\r\n};\r\n\r\nstruct DeletedDefault {\r\n    DeletedDefault() = delete;\r\n};\r\n\r\nstruct ExplicitMoveAbomination {\r\n    ExplicitMoveAbomination()                                   = default;\r\n    explicit ExplicitMoveAbomination(ExplicitMoveAbomination&&) = default;\r\n};\r\n\r\nstruct ExplicitCopyAbomination {\r\n    ExplicitCopyAbomination()                                        = default;\r\n    ExplicitCopyAbomination(ExplicitCopyAbomination&&)               = default;\r\n    explicit ExplicitCopyAbomination(ExplicitCopyAbomination const&) = default;\r\n};\r\n\r\nstruct EmptyClass {};\r\nunion EmptyUnion {};\r\n\r\nstruct NotEmpty {\r\n    virtual ~NotEmpty() = default;\r\n};\r\n\r\nstruct BitZero {\r\n    int : 0;\r\n};\r\n\r\ntemplate <class First, class Second = IncompleteClass>\r\nstruct ConvertsFrom {\r\n    ConvertsFrom() = default;\r\n    constexpr ConvertsFrom(First) noexcept {}\r\n    constexpr ConvertsFrom(Second) noexcept\r\n        requires (!std::is_same_v<IncompleteClass, Second>)\r\n    {}\r\n};\r\n\r\ntemplate <int>\r\nstruct Interconvertible {\r\n    Interconvertible() = default;\r\n    template <int N>\r\n    explicit Interconvertible(Interconvertible<N>) {}\r\n};\r\n\r\nstruct Omniconvertible {\r\n    template <class T>\r\n    Omniconvertible(T&&);\r\n};\r\n\r\ntemplate <class To>\r\nstruct ImplicitTo {\r\n    operator To() const;\r\n};\r\ntemplate <class To>\r\nstruct ExplicitTo {\r\n    explicit operator To() const;\r\n};\r\n\r\ntemplate <class... Ts>\r\nstruct DerivesFrom : Ts... {};\r\n\r\nstruct SimpleBase {};\r\nusing SimpleDerived = DerivesFrom<SimpleBase>;\r\n\r\nstruct MovableFriendSwap {\r\n    friend void swap(MovableFriendSwap&, MovableFriendSwap&) {}\r\n};\r\nstruct ImmobileFriendSwap : Immobile {\r\n    friend void swap(ImmobileFriendSwap&, ImmobileFriendSwap&) noexcept {}\r\n};\r\n\r\nstruct ImmobileNonMemberSwap : Immobile {};\r\nvoid swap(ImmobileNonMemberSwap&, ImmobileNonMemberSwap&) {}\r\n\r\ntemplate <>\r\nstruct std::common_type<Interconvertible<0>, Interconvertible<1>> {\r\n    using type = Interconvertible<2>;\r\n};\r\ntemplate <>\r\nstruct std::common_type<Interconvertible<1>, Interconvertible<0>> {\r\n    using type = Interconvertible<2>;\r\n};\r\n\r\ntemplate <>\r\nstruct std::common_type<ExplicitTo<EmptyClass>, EmptyClass> {\r\n    using type = EmptyClass;\r\n};\r\ntemplate <>\r\nstruct std::common_type<EmptyClass, ExplicitTo<EmptyClass>> {\r\n    using type = EmptyClass;\r\n};\r\n\r\nnamespace test_same_as {\r\n    using std::same_as;\r\n\r\n    template <class T, class U>\r\n    constexpr bool test() {\r\n        static_assert(same_as<T, U>);\r\n        static_assert(same_as<T const, U const>);\r\n        static_assert(same_as<T volatile, U volatile>);\r\n        static_assert(same_as<T const volatile, U const volatile>);\r\n\r\n        constexpr bool is_ref = std::is_reference_v<T>;\r\n\r\n        static_assert(same_as<T const, U> == is_ref);\r\n        static_assert(same_as<T volatile, U> == is_ref);\r\n        static_assert(same_as<T const volatile, U> == is_ref);\r\n        static_assert(same_as<T, U const> == is_ref);\r\n        static_assert(same_as<T, U volatile> == is_ref);\r\n        static_assert(same_as<T, U const volatile> == is_ref);\r\n\r\n        if constexpr (!std::is_void_v<T>) {\r\n            static_assert(same_as<T&, U&>);\r\n            static_assert(same_as<T const&, U&> == is_ref);\r\n            static_assert(same_as<T&&, U&&>);\r\n            static_assert(same_as<T const&&, U&&> == is_ref);\r\n        }\r\n\r\n        if constexpr (!is_ref) {\r\n            static_assert(same_as<T*, U*>);\r\n            static_assert(same_as<T**, U**>);\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    static_assert(test<void, void>());\r\n    static_assert(test<int, int>());\r\n    static_assert(!same_as<int, void>);\r\n    static_assert(test<double, double>());\r\n    static_assert(!same_as<double, int>);\r\n    static_assert(!same_as<int, double>);\r\n\r\n    static_assert(test<int[42], int[42]>());\r\n    static_assert(test<int[], int[]>());\r\n\r\n    static_assert(test<NonTriviallyDestructible, NonTriviallyDestructible>());\r\n    static_assert(!same_as<void, NonTriviallyDestructible>);\r\n    static_assert(!same_as<NonTriviallyDestructible, int*>);\r\n\r\n    static_assert(test<int&, int&>());\r\n    static_assert(!same_as<int*, int&>);\r\n    static_assert(!same_as<int&, int>);\r\n    static_assert(test<int (&)[42], int (&)[42]>());\r\n    static_assert(test<int (&)(), int (&)()>());\r\n\r\n    static_assert(same_as<void() const, void() const>);\r\n    static_assert(same_as<void() &, void() &>);\r\n\r\n    // Verify that `same_as<T, U>` subsumes `same_as<U, T>` (note reversed argument order)\r\n    template <class T, class U>\r\n        requires same_as<U, T>\r\n    constexpr bool f() {\r\n        return false;\r\n    }\r\n\r\n    template <class T, class U>\r\n        requires same_as<T, U> && std::is_integral_v<T>\r\n    constexpr bool f() {\r\n        return true;\r\n    }\r\n\r\n    static_assert(!f<int*, int*>());\r\n    static_assert(!f<void, void>());\r\n\r\n    static_assert(f<int, int>()); // ambiguous if second overload's requirements do not subsume the first's\r\n    static_assert(f<long, long>()); // Ditto\r\n} // namespace test_same_as\r\n\r\nnamespace test_derived_from {\r\n    using std::derived_from;\r\n\r\n    static_assert(!derived_from<int, int>);\r\n    static_assert(!derived_from<void, void>);\r\n    static_assert(!derived_from<void(), void()>);\r\n    static_assert(!derived_from<void() const, void() const>);\r\n    static_assert(!derived_from<int[42], int[42]>);\r\n    static_assert(!derived_from<int&, int>);\r\n    static_assert(!derived_from<int, int&>);\r\n    static_assert(!derived_from<int&, int&>);\r\n\r\n    template <class Derived, class Base>\r\n    constexpr bool test() {\r\n        static_assert(derived_from<Derived, Base>);\r\n        static_assert(derived_from<Derived const, Base>);\r\n        static_assert(derived_from<Derived volatile, Base>);\r\n        static_assert(derived_from<Derived const volatile, Base>);\r\n        static_assert(derived_from<Derived, Base const>);\r\n        static_assert(derived_from<Derived const, Base const>);\r\n        static_assert(derived_from<Derived volatile, Base const>);\r\n        static_assert(derived_from<Derived const volatile, Base const>);\r\n        static_assert(derived_from<Derived, Base volatile>);\r\n        static_assert(derived_from<Derived const, Base volatile>);\r\n        static_assert(derived_from<Derived volatile, Base volatile>);\r\n        static_assert(derived_from<Derived const volatile, Base volatile>);\r\n        static_assert(derived_from<Derived, Base const volatile>);\r\n        static_assert(derived_from<Derived const, Base const volatile>);\r\n        static_assert(derived_from<Derived volatile, Base const volatile>);\r\n        static_assert(derived_from<Derived const volatile, Base const volatile>);\r\n        return true;\r\n    }\r\n\r\n    static_assert(test<SimpleBase, SimpleBase>());\r\n    static_assert(!derived_from<SimpleBase&, SimpleBase&>);\r\n\r\n    template <int>\r\n    struct Middle : SimpleBase {};\r\n\r\n    static_assert(test<Middle<0>, SimpleBase>());\r\n    static_assert(!derived_from<SimpleBase, Middle<0>>);\r\n    static_assert(!derived_from<Middle<0>&, SimpleBase&>);\r\n    static_assert(!derived_from<Middle<0>*, SimpleBase*>);\r\n    static_assert(!derived_from<Middle<0>[42], SimpleBase[42]>);\r\n\r\n    static_assert(test<Middle<1>, SimpleBase>());\r\n    static_assert(!derived_from<SimpleBase, Middle<1>>);\r\n\r\n    static_assert(test<DerivesFrom<Middle<0>, Middle<1>>, Middle<0>>());\r\n    static_assert(test<DerivesFrom<Middle<0>, Middle<1>>, Middle<1>>());\r\n    static_assert(!derived_from<DerivesFrom<Middle<0>, Middle<1>>, SimpleBase>);\r\n\r\n    class PrivateDerived : private Middle<0>, private Middle<1> {\r\n    public:\r\n        void f();\r\n    };\r\n\r\n    void PrivateDerived::f() {\r\n        // Check these in a member to verify that access doesn't depend on context\r\n#ifndef __EDG__ // TRANSITION, VSO-1898937\r\n        static_assert(!derived_from<PrivateDerived, Middle<0>>);\r\n        static_assert(!derived_from<PrivateDerived, Middle<1>>);\r\n#endif // ^^^ no workaround ^^^\r\n    }\r\n\r\n    static_assert(!derived_from<PrivateDerived, SimpleBase>);\r\n\r\n    static_assert(test<IncompleteClass, IncompleteClass>());\r\n\r\n    static_assert(!derived_from<IncompleteUnion, IncompleteUnion>);\r\n    static_assert(!derived_from<IncompleteClass, IncompleteUnion>);\r\n    static_assert(!derived_from<IncompleteUnion, IncompleteClass>);\r\n} // namespace test_derived_from\r\n\r\nnamespace test_convertible_to {\r\n    using std::convertible_to;\r\n\r\n    using char_array = char[42];\r\n    using fn         = void();\r\n    using const_fn   = void() const;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored\r\n    template <class From, class To>\r\n    constexpr bool test() {\r\n        constexpr bool result = convertible_to<From, To>;\r\n        static_assert(convertible_to<From const, To> == result);\r\n        static_assert(convertible_to<From, To const> == result);\r\n        static_assert(convertible_to<From const, To const> == result);\r\n        return result;\r\n    }\r\n#pragma warning(pop)\r\n\r\n    // void\r\n    static_assert(test<void, void>());\r\n    static_assert(!test<void, fn>());\r\n    static_assert(!test<void, fn&>());\r\n    static_assert(!test<void, fn*>());\r\n    static_assert(!test<void, char_array>());\r\n    static_assert(!test<void, char_array&>());\r\n    static_assert(!test<void, char>());\r\n    static_assert(!test<void, char&>());\r\n    static_assert(!test<void, char*>());\r\n    static_assert(!test<char, void>());\r\n\r\n    // fn\r\n    static_assert(!test<fn, void>());\r\n    static_assert(!test<fn, fn>());\r\n    static_assert(test<fn, fn&>());\r\n    static_assert(test<fn, fn*>());\r\n    static_assert(test<fn, fn* const>());\r\n\r\n    static_assert(convertible_to<fn, fn&&>);\r\n\r\n    static_assert(!test<fn, char_array>());\r\n    static_assert(!test<fn, char_array&>());\r\n    static_assert(!test<fn, char>());\r\n    static_assert(!test<fn, char&>());\r\n    static_assert(!test<fn, char*>());\r\n\r\n    // fn&\r\n    static_assert(!test<fn&, void>());\r\n    static_assert(!test<fn&, fn>());\r\n    static_assert(test<fn&, fn&>());\r\n\r\n    static_assert(test<fn&, fn*>());\r\n    static_assert(!test<fn&, char_array>());\r\n    static_assert(!test<fn&, char_array&>());\r\n    static_assert(!test<fn&, char>());\r\n    static_assert(!test<fn&, char&>());\r\n    static_assert(!test<fn&, char*>());\r\n\r\n    // fn*\r\n    static_assert(!test<fn*, void>());\r\n    static_assert(!test<fn*, fn>());\r\n    static_assert(!test<fn*, fn&>());\r\n    static_assert(test<fn*, fn*>());\r\n\r\n    static_assert(!test<fn*, char_array>());\r\n    static_assert(!test<fn*, char_array&>());\r\n    static_assert(!test<fn*, char>());\r\n    static_assert(!test<fn*, char&>());\r\n    static_assert(!test<fn*, char*>());\r\n\r\n    // Abominable function\r\n    static_assert(!convertible_to<const_fn, fn>);\r\n    static_assert(!convertible_to<const_fn, fn*>);\r\n    static_assert(!convertible_to<const_fn, fn&>);\r\n    static_assert(!convertible_to<const_fn, fn&&>);\r\n    static_assert(!convertible_to<fn*, const_fn>);\r\n    static_assert(!convertible_to<fn&, const_fn>);\r\n    static_assert(!convertible_to<const_fn, const_fn>);\r\n    static_assert(!convertible_to<const_fn, void>);\r\n\r\n    // char_array\r\n    static_assert(!test<char_array, void>());\r\n    static_assert(!test<char_array, fn>());\r\n    static_assert(!test<char_array, fn&>());\r\n    static_assert(!test<char_array, fn*>());\r\n    static_assert(!test<char_array, char_array>());\r\n\r\n    static_assert(!convertible_to<char_array, char_array&>);\r\n    static_assert(convertible_to<char_array, char_array const&>);\r\n    static_assert(!convertible_to<char_array, char_array const volatile&>);\r\n\r\n    static_assert(!convertible_to<char_array const, char_array&>);\r\n    static_assert(convertible_to<char_array const, char_array const&>);\r\n    static_assert(!convertible_to<char_array, char_array volatile&>);\r\n    static_assert(!convertible_to<char_array, char_array const volatile&>);\r\n\r\n    static_assert(convertible_to<char_array, char_array&&>);\r\n    static_assert(convertible_to<char_array, char_array const&&>);\r\n    static_assert(convertible_to<char_array, char_array volatile&&>);\r\n    static_assert(convertible_to<char_array, char_array const volatile&&>);\r\n    static_assert(convertible_to<char_array const, char_array const&&>);\r\n    static_assert(!convertible_to<char_array&, char_array&&>);\r\n    static_assert(!convertible_to<char_array&&, char_array&>);\r\n\r\n    static_assert(!test<char_array, char>());\r\n    static_assert(!test<char_array, char&>());\r\n\r\n    static_assert(convertible_to<char_array, char*>);\r\n    static_assert(convertible_to<char_array, char const*>);\r\n    static_assert(convertible_to<char_array, char* const>);\r\n    static_assert(convertible_to<char_array, char* const volatile>);\r\n\r\n    static_assert(!convertible_to<char_array const, char*>);\r\n    static_assert(convertible_to<char_array const, char const*>);\r\n\r\n    static_assert(!convertible_to<char[42][42], char*>);\r\n    static_assert(!convertible_to<char[][1], char*>);\r\n\r\n    // char_array&\r\n    static_assert(!test<char_array&, void>());\r\n    static_assert(!test<char_array&, fn>());\r\n    static_assert(!test<char_array&, fn&>());\r\n    static_assert(!test<char_array&, fn*>());\r\n    static_assert(!test<char_array&, char_array>());\r\n\r\n    static_assert(convertible_to<char_array&, char_array&>);\r\n    static_assert(convertible_to<char_array&, char_array const&>);\r\n    static_assert(!convertible_to<char_array const&, char_array&>);\r\n    static_assert(convertible_to<char_array const&, char_array const&>);\r\n\r\n    static_assert(!test<char_array&, char>());\r\n    static_assert(!test<char_array&, char&>());\r\n\r\n    static_assert(convertible_to<char_array&, char*>);\r\n    static_assert(convertible_to<char_array&, char const*>);\r\n    static_assert(!convertible_to<char_array const&, char*>);\r\n    static_assert(convertible_to<char_array const&, char const*>);\r\n\r\n    static_assert(convertible_to<char_array, ConvertsFrom<char const*>>);\r\n    static_assert(convertible_to<char (&)[], ConvertsFrom<char const*>>);\r\n\r\n    // volatile array glvalues\r\n    static_assert(convertible_to<int volatile (&)[42], int volatile (&)[42]>);\r\n    static_assert(convertible_to<int volatile (&)[42][13], int volatile (&)[42][13]>);\r\n    static_assert(convertible_to<int volatile (&&)[42], int volatile (&&)[42]>);\r\n    static_assert(convertible_to<int volatile (&&)[42][13], int volatile (&&)[42][13]>);\r\n\r\n\r\n    // char\r\n    static_assert(!test<char, void>());\r\n    static_assert(!test<char, fn>());\r\n    static_assert(!test<char, fn&>());\r\n    static_assert(!test<char, fn*>());\r\n    static_assert(!test<char, char_array>());\r\n    static_assert(!test<char, char_array&>());\r\n\r\n    static_assert(test<char, char>());\r\n\r\n    static_assert(!convertible_to<char, char&>);\r\n    static_assert(convertible_to<char, char const&>);\r\n    static_assert(!convertible_to<char const, char&>);\r\n    static_assert(convertible_to<char const, char const&>);\r\n\r\n    static_assert(!test<char, char*>());\r\n\r\n    // char&\r\n    static_assert(!test<char&, void>());\r\n    static_assert(!test<char&, fn>());\r\n    static_assert(!test<char&, fn&>());\r\n    static_assert(!test<char&, fn*>());\r\n    static_assert(!test<char&, char_array>());\r\n    static_assert(!test<char&, char_array&>());\r\n\r\n    static_assert(test<char&, char>());\r\n\r\n    static_assert(convertible_to<char&, char&>);\r\n    static_assert(convertible_to<char&, char const&>);\r\n    static_assert(!convertible_to<char const&, char&>);\r\n    static_assert(convertible_to<char const&, char const&>);\r\n\r\n    static_assert(!test<char&, char*>());\r\n\r\n    // char*\r\n    static_assert(!test<char*, void>());\r\n    static_assert(!test<char*, fn>());\r\n    static_assert(!test<char*, fn&>());\r\n    static_assert(!test<char*, fn*>());\r\n    static_assert(!test<char*, char_array>());\r\n    static_assert(!test<char*, char_array&>());\r\n\r\n    static_assert(!test<char*, char>());\r\n    static_assert(!test<char*, char&>());\r\n\r\n    static_assert(convertible_to<char*, char*>);\r\n    static_assert(convertible_to<char*, char const*>);\r\n    static_assert(!convertible_to<char const*, char*>);\r\n    static_assert(convertible_to<char const*, char const*>);\r\n\r\n    static_assert(convertible_to<Immobile&, Immobile&>);\r\n    static_assert(convertible_to<Immobile&, Immobile const&>);\r\n    static_assert(convertible_to<Immobile&, Immobile const volatile&>);\r\n    static_assert(convertible_to<Immobile&, Immobile volatile&>);\r\n    static_assert(convertible_to<Immobile const&, Immobile const&>);\r\n    static_assert(convertible_to<Immobile const&, Immobile const volatile&>);\r\n    static_assert(convertible_to<Immobile volatile&, Immobile const volatile&>);\r\n    static_assert(convertible_to<Immobile const volatile&, Immobile const volatile&>);\r\n    static_assert(!convertible_to<Immobile const&, Immobile&>);\r\n\r\n    static_assert(!test<Immobile&, Immobile>());\r\n    static_assert(!test<Immobile const&, Immobile>());\r\n    static_assert(!test<Immobile, Immobile>());\r\n\r\n    // Ensure that DoNotInstantiate is not instantiated by is_convertible when it is not needed.\r\n    // (For example, DoNotInstantiate is instantiated by ADL lookup for arguments of type DoNotInstantiate*.)\r\n    static_assert(convertible_to<DoNotInstantiate<int>*, DoNotInstantiate<int>*>);\r\n\r\n    static_assert(test<SimpleBase, SimpleBase>());\r\n    static_assert(test<SimpleDerived, SimpleDerived>());\r\n    static_assert(test<SimpleDerived, SimpleBase>());\r\n    static_assert(!test<SimpleBase, SimpleDerived>());\r\n\r\n    struct ImplicitConversionOnly;\r\n    struct Target {\r\n        Target()                                = default;\r\n        explicit Target(ImplicitConversionOnly) = delete;\r\n    };\r\n    struct ImplicitConversionOnly {\r\n        operator Target() const;\r\n    };\r\n    static_assert(test<ImplicitTo<Target>, Target>());\r\n    static_assert(!test<ExplicitTo<Target>, Target>());\r\n    static_assert(!test<ImplicitConversionOnly, Target>());\r\n\r\n    namespace overloading { // a test of overload resolution moreso than the concept itself\r\n        enum class result { exact, convertible, unrelated };\r\n\r\n        constexpr result f(ConvertsFrom<int>) {\r\n            return result::exact;\r\n        }\r\n\r\n        template <convertible_to<ConvertsFrom<int>> T>\r\n        constexpr result f(T&&) {\r\n            return result::convertible;\r\n        }\r\n\r\n        template <class T>\r\n        constexpr result f(T&&) {\r\n            return result::unrelated;\r\n        }\r\n\r\n        static_assert(f(ConvertsFrom<int>{}) == result::exact); // the most specialized overload is chosen\r\n        constexpr ConvertsFrom<int> cfi{};\r\n        static_assert(f(cfi) == result::exact); // Ditto with qualification conversion\r\n        static_assert(f(42) == result::convertible); // the more-constrained overload is chosen\r\n        static_assert(f(\"meow\") == result::unrelated); // everything isn't completely broken\r\n    } // namespace overloading\r\n} // namespace test_convertible_to\r\n\r\nnamespace test_common_reference_with {\r\n    using std::common_reference_t, std::common_reference_with;\r\n\r\n    template <class T, class U>\r\n    constexpr bool test() {\r\n        constexpr bool result = common_reference_with<T, U>;\r\n        static_assert(common_reference_with<U, T> == result);\r\n        return result;\r\n    }\r\n\r\n    static_assert(test<int, int>());\r\n    static_assert(test<int, double>());\r\n    static_assert(test<double, int>());\r\n    static_assert(test<double, double>());\r\n    static_assert(!test<void, int>());\r\n    static_assert(!test<int*, int>());\r\n    static_assert(test<void*, int*>());\r\n    static_assert(test<double, long long>());\r\n    static_assert(test<void, void>());\r\n\r\n    // common_reference_t<<ExplicitTo<EmptyClass>, EmptyClass> is EmptyClass, to which ExplicitTo<EmptyClass> is\r\n    // not implicitly convertible\r\n    static_assert(!test<ExplicitTo<EmptyClass>, EmptyClass>());\r\n\r\n    static_assert(test<Immobile&, DerivesFrom<Immobile>&>());\r\n    static_assert(test<Immobile&&, DerivesFrom<Immobile>&&>());\r\n    static_assert(!test<Immobile, DerivesFrom<Immobile>>());\r\n\r\n    static_assert(test<SimpleBase&, SimpleDerived&>());\r\n    static_assert(test<SimpleBase&, SimpleDerived const&>());\r\n    static_assert(test<SimpleBase const&, SimpleDerived&>());\r\n    static_assert(test<SimpleBase const&, SimpleDerived const&>());\r\n\r\n    static_assert(test<SimpleBase&&, SimpleDerived&&>());\r\n    static_assert(test<SimpleBase&&, SimpleDerived const&&>());\r\n    static_assert(test<SimpleBase const&&, SimpleDerived&&>());\r\n    static_assert(test<SimpleBase const&&, SimpleDerived const&&>());\r\n\r\n    static_assert(test<SimpleBase&, SimpleDerived&&>());\r\n    static_assert(test<SimpleBase&, SimpleDerived const&&>());\r\n    static_assert(test<SimpleBase const&, SimpleDerived&&>());\r\n    static_assert(test<SimpleBase const&, SimpleDerived const&&>());\r\n\r\n    static_assert(test<SimpleBase&&, SimpleDerived&>());\r\n    static_assert(test<SimpleBase&&, SimpleDerived const&>());\r\n    static_assert(test<SimpleBase const&&, SimpleDerived&>());\r\n    static_assert(test<SimpleBase const&&, SimpleDerived const&>());\r\n\r\n    // https://github.com/ericniebler/stl2/issues/338\r\n    static_assert(test<int&, ConvertsFrom<int&>>());\r\n\r\n    static_assert(!test<MoveOnly const&, MoveOnly>());\r\n    static_assert(test<MoveOnly const&, MoveOnly&>());\r\n    static_assert(!test<DerivesFrom<MoveOnly> const&, MoveOnly>());\r\n    static_assert(test<DerivesFrom<MoveOnly> const&, MoveOnly&&>());\r\n    static_assert(!test<MoveOnly const&, DerivesFrom<MoveOnly>>());\r\n    static_assert(test<MoveOnly const&, DerivesFrom<MoveOnly> const&>());\r\n\r\n    static_assert(\r\n        std::is_same_v<Interconvertible<2>, common_reference_t<Interconvertible<0>&, Interconvertible<1> const&>>);\r\n    static_assert(!test<Interconvertible<0>&, Interconvertible<1> const&>());\r\n\r\n    static_assert(test<SimpleBase, ConvertsFrom<int, SimpleBase>>());\r\n\r\n    static_assert(test<int volatile&, int volatile&>());\r\n    static_assert(test<int volatile (&)[42], int volatile (&)[42]>());\r\n    static_assert(test<int volatile (&)[42][13], int volatile (&)[42][13]>());\r\n    static_assert(test<int volatile (&&)[42], int volatile (&&)[42]>());\r\n    static_assert(test<int volatile (&&)[42][13], int volatile (&&)[42][13]>());\r\n} // namespace test_common_reference_with\r\n\r\nnamespace test_common_with {\r\n    template <class T>\r\n    struct ExplicitFromConstLvalue {\r\n        explicit ExplicitFromConstLvalue(T const&) {}\r\n    };\r\n} // namespace test_common_with\r\n\r\ntemplate <class T>\r\nstruct std::common_type<T, test_common_with::ExplicitFromConstLvalue<T>> {\r\n    using type = test_common_with::ExplicitFromConstLvalue<T>;\r\n};\r\ntemplate <class T>\r\nstruct std::common_type<test_common_with::ExplicitFromConstLvalue<T>, T> {\r\n    using type = test_common_with::ExplicitFromConstLvalue<T>;\r\n};\r\n\r\nnamespace test_common_with {\r\n    using std::common_with, std::common_type_t, std::is_same_v;\r\n\r\n    template <class T, class U>\r\n    constexpr bool test() {\r\n        constexpr bool result = common_with<T, U>;\r\n        static_assert(common_with<U, T> == result);\r\n        return result;\r\n    }\r\n\r\n    static_assert(test<int, double>());\r\n    static_assert(test<double, int>());\r\n    static_assert(test<double, double>());\r\n    static_assert(test<void*, int*>());\r\n    static_assert(test<double, long long>());\r\n\r\n    static_assert(test<int, int>());\r\n    static_assert(test<int, int const>());\r\n    static_assert(test<int const, int const>());\r\n\r\n    static_assert(test<long, int const>());\r\n    static_assert(test<long const, int>());\r\n    static_assert(test<long, int volatile>());\r\n    static_assert(test<long volatile, int>());\r\n    static_assert(test<long const, int const>());\r\n\r\n    static_assert(test<double, char>());\r\n    static_assert(test<short, char>());\r\n\r\n    static_assert(test<void, void>());\r\n    static_assert(test<void, void const>());\r\n    static_assert(test<void const, void>());\r\n    static_assert(test<void, void volatile>());\r\n    static_assert(test<void volatile, void>());\r\n    static_assert(test<void const, void const>());\r\n\r\n    static_assert(!test<void, int>());\r\n    static_assert(!test<int*, int>());\r\n\r\n    static_assert(test<std::reference_wrapper<int>, int>());\r\n\r\n    static_assert(test<ExplicitFromConstLvalue<int>, ExplicitFromConstLvalue<int>>());\r\n    static_assert(!test<int, ExplicitFromConstLvalue<int>>());\r\n\r\n    static_assert(test<void*, IncompleteClass*>());\r\n    static_assert(test<void*, DoNotInstantiate<int>*>());\r\n\r\n    static_assert(is_same_v<common_type_t<ExplicitTo<EmptyClass>, EmptyClass>, EmptyClass>);\r\n    static_assert(is_same_v<common_type_t<EmptyClass, ExplicitTo<EmptyClass>>, EmptyClass>);\r\n    static_assert(!test<ExplicitTo<EmptyClass>, EmptyClass>());\r\n\r\n    static_assert(test<SimpleBase, SimpleDerived>());\r\n    static_assert(test<SimpleBase, ConvertsFrom<SimpleBase, int>>());\r\n\r\n    static_assert(is_same_v<common_type_t<Immobile, DerivesFrom<Immobile>>, Immobile>);\r\n    static_assert(is_same_v<common_type_t<DerivesFrom<Immobile>, Immobile>, Immobile>);\r\n    static_assert(!test<Immobile, DerivesFrom<Immobile>>());\r\n} // namespace test_common_with\r\n\r\nnamespace test_integral_concepts {\r\n    using std::integral, std::signed_integral, std::unsigned_integral;\r\n\r\n    namespace subsumption {\r\n        enum class is { not_integral, integral, signed_integral, unsigned_integral, ull };\r\n\r\n        template <class T>\r\n        constexpr is f(T) {\r\n            return is::not_integral;\r\n        }\r\n        template <integral T>\r\n        constexpr is f(T) {\r\n            return is::integral;\r\n        }\r\n        template <signed_integral T>\r\n        constexpr is f(T) {\r\n            return is::signed_integral;\r\n        }\r\n        template <unsigned_integral T>\r\n        constexpr is f(T) {\r\n            return is::unsigned_integral;\r\n        }\r\n        constexpr is f(unsigned long long) {\r\n            return is::ull;\r\n        }\r\n\r\n        constexpr bool test_subsumption() {\r\n            static_assert(f(0.0f) == is::not_integral);\r\n            static_assert(f(0.0) == is::not_integral);\r\n            static_assert(f(0) == is::signed_integral);\r\n            static_assert(f(0u) == is::unsigned_integral);\r\n            static_assert(f('a') == is::signed_integral || f('a') == is::unsigned_integral);\r\n            static_assert(f(nullptr) == is::not_integral);\r\n            static_assert(f(0ull) == is::ull);\r\n            static_assert(f(static_cast<int*>(nullptr)) == is::not_integral);\r\n            struct A {};\r\n            static_assert(f(static_cast<int A::*>(nullptr)) == is::not_integral);\r\n            static_assert(f(static_cast<int (A::*)()>(nullptr)) == is::not_integral);\r\n            return true;\r\n        }\r\n        static_assert(test_subsumption());\r\n    } // namespace subsumption\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored\r\n    enum class is_signed { no, yes, NA };\r\n\r\n    template <class T, is_signed S>\r\n    constexpr bool test_integral() {\r\n        constexpr bool result = integral<T>;\r\n        static_assert(integral<T const> == result);\r\n        static_assert(integral<T volatile> == result);\r\n        static_assert(integral<T const volatile> == result);\r\n        if constexpr (!result) {\r\n            static_assert(S == is_signed::NA);\r\n            static_assert(!signed_integral<T>);\r\n            static_assert(!signed_integral<T const>);\r\n            static_assert(!signed_integral<T volatile>);\r\n            static_assert(!signed_integral<T const volatile>);\r\n            static_assert(!unsigned_integral<T>);\r\n            static_assert(!unsigned_integral<T const>);\r\n            static_assert(!unsigned_integral<T volatile>);\r\n            static_assert(!unsigned_integral<T const volatile>);\r\n        } else if constexpr (S == is_signed::yes) {\r\n            static_assert(signed_integral<T>);\r\n            static_assert(signed_integral<T const>);\r\n            static_assert(signed_integral<T volatile>);\r\n            static_assert(signed_integral<T const volatile>);\r\n            static_assert(!unsigned_integral<T>);\r\n            static_assert(!unsigned_integral<T const>);\r\n            static_assert(!unsigned_integral<T volatile>);\r\n            static_assert(!unsigned_integral<T const volatile>);\r\n        } else {\r\n            static_assert(!signed_integral<T>);\r\n            static_assert(!signed_integral<T const>);\r\n            static_assert(!signed_integral<T volatile>);\r\n            static_assert(!signed_integral<T const volatile>);\r\n            static_assert(unsigned_integral<T>);\r\n            static_assert(unsigned_integral<T const>);\r\n            static_assert(unsigned_integral<T volatile>);\r\n            static_assert(unsigned_integral<T const volatile>);\r\n        }\r\n        return result;\r\n    }\r\n#pragma warning(pop)\r\n\r\n    static_assert(test_integral<signed char, is_signed::yes>());\r\n    static_assert(test_integral<short, is_signed::yes>());\r\n    static_assert(test_integral<int, is_signed::yes>());\r\n    static_assert(test_integral<long, is_signed::yes>());\r\n    static_assert(test_integral<long long, is_signed::yes>());\r\n\r\n    static_assert(test_integral<unsigned char, is_signed::no>());\r\n    static_assert(test_integral<unsigned short, is_signed::no>());\r\n    static_assert(test_integral<unsigned int, is_signed::no>());\r\n    static_assert(test_integral<unsigned long, is_signed::no>());\r\n    static_assert(test_integral<unsigned long long, is_signed::no>());\r\n\r\n    static_assert(test_integral<bool, is_signed::no>());\r\n    static_assert(test_integral<char, is_signed{std::is_signed_v<char>}>());\r\n    static_assert(test_integral<wchar_t, is_signed{std::is_signed_v<wchar_t>}>());\r\n    static_assert(test_integral<char16_t, is_signed::no>());\r\n    static_assert(test_integral<char32_t, is_signed::no>());\r\n\r\n    static_assert(!test_integral<float, is_signed::NA>());\r\n    static_assert(!test_integral<double, is_signed::NA>());\r\n    static_assert(!test_integral<long double, is_signed::NA>());\r\n\r\n    static_assert(!test_integral<void, is_signed::NA>());\r\n    static_assert(!test_integral<std::nullptr_t, is_signed::NA>());\r\n\r\n    static_assert(!test_integral<int[42], is_signed::NA>());\r\n    static_assert(!test_integral<int (&)[42], is_signed::NA>());\r\n    static_assert(!test_integral<int(int), is_signed::NA>());\r\n    static_assert(!test_integral<int*, is_signed::NA>());\r\n    static_assert(!test_integral<int&, is_signed::NA>());\r\n\r\n    static_assert(!test_integral<IncompleteClass, is_signed::NA>());\r\n    static_assert(!test_integral<IncompleteUnion, is_signed::NA>());\r\n    static_assert(!test_integral<DoNotInstantiate<int>, is_signed::NA>());\r\n    static_assert(!test_integral<void (IncompleteClass::*)(), is_signed::NA>());\r\n\r\n    enum int_enum : int {};\r\n    static_assert(!test_integral<int_enum, is_signed::NA>());\r\n\r\n    static_assert(test_integral<std::ptrdiff_t, is_signed::yes>());\r\n    static_assert(test_integral<std::size_t, is_signed::no>());\r\n} // namespace test_integral_concepts\r\n\r\nnamespace test_floating_point {\r\n    using std::floating_point;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored\r\n    template <class T>\r\n    constexpr bool test_floating_point() {\r\n        constexpr bool result = floating_point<T>;\r\n        static_assert(floating_point<T const> == result);\r\n        static_assert(floating_point<T volatile> == result);\r\n        static_assert(floating_point<T const volatile> == result);\r\n        return result;\r\n    }\r\n#pragma warning(pop)\r\n\r\n    static_assert(!test_floating_point<signed char>());\r\n    static_assert(!test_floating_point<short>());\r\n    static_assert(!test_floating_point<int>());\r\n    static_assert(!test_floating_point<long>());\r\n    static_assert(!test_floating_point<long long>());\r\n\r\n    static_assert(!test_floating_point<unsigned char>());\r\n    static_assert(!test_floating_point<unsigned short>());\r\n    static_assert(!test_floating_point<unsigned int>());\r\n    static_assert(!test_floating_point<unsigned long>());\r\n    static_assert(!test_floating_point<unsigned long long>());\r\n\r\n    static_assert(!test_floating_point<bool>());\r\n    static_assert(!test_floating_point<char>());\r\n    static_assert(!test_floating_point<wchar_t>());\r\n    static_assert(!test_floating_point<char16_t>());\r\n    static_assert(!test_floating_point<char32_t>());\r\n\r\n    static_assert(test_floating_point<float>());\r\n    static_assert(test_floating_point<double>());\r\n    static_assert(test_floating_point<long double>());\r\n\r\n    static_assert(!test_floating_point<void>());\r\n    static_assert(!test_floating_point<std::nullptr_t>());\r\n\r\n    static_assert(!test_floating_point<double[42]>());\r\n    static_assert(!test_floating_point<double (&)[42]>());\r\n    static_assert(!test_floating_point<double(double)>());\r\n    static_assert(!test_floating_point<double*>());\r\n    static_assert(!test_floating_point<double&>());\r\n\r\n    static_assert(!test_floating_point<IncompleteClass>());\r\n    static_assert(!test_floating_point<IncompleteUnion>());\r\n    static_assert(!test_floating_point<DoNotInstantiate<int>>());\r\n    static_assert(!test_floating_point<void (IncompleteClass::*)()>());\r\n\r\n    enum int_enum : int {};\r\n    static_assert(!test_floating_point<int_enum>());\r\n\r\n    static_assert(!test_floating_point<std::ptrdiff_t>());\r\n    static_assert(!test_floating_point<std::size_t>());\r\n} // namespace test_floating_point\r\n\r\nnamespace test_assignable_from {\r\n    using std::assignable_from;\r\n\r\n    static_assert(!assignable_from<int, int>);\r\n    static_assert(!assignable_from<int, int&>);\r\n    static_assert(!assignable_from<int, int&&>);\r\n    static_assert(!assignable_from<int, int const>);\r\n    static_assert(!assignable_from<int, int const&>);\r\n    static_assert(!assignable_from<int, int const&&>);\r\n\r\n    static_assert(assignable_from<int&, int>);\r\n    static_assert(assignable_from<int&, int&>);\r\n    static_assert(assignable_from<int&, int&&>);\r\n    static_assert(assignable_from<int&, int const>);\r\n    static_assert(assignable_from<int&, int const&>);\r\n    static_assert(assignable_from<int&, int const&&>);\r\n\r\n    static_assert(!assignable_from<int&&, int>);\r\n    static_assert(!assignable_from<int&&, int&>);\r\n    static_assert(!assignable_from<int&&, int&&>);\r\n    static_assert(!assignable_from<int&&, int const>);\r\n    static_assert(!assignable_from<int&&, int const&>);\r\n    static_assert(!assignable_from<int&&, int const&&>);\r\n\r\n    static_assert(assignable_from<int&, double>);\r\n    static_assert(assignable_from<void*&, void*>);\r\n\r\n    static_assert(!assignable_from<EmptyClass, EmptyClass>);\r\n    static_assert(!assignable_from<EmptyClass, EmptyClass&>);\r\n    static_assert(!assignable_from<EmptyClass, EmptyClass&&>);\r\n    static_assert(!assignable_from<EmptyClass, EmptyClass const>);\r\n    static_assert(!assignable_from<EmptyClass, EmptyClass const&>);\r\n    static_assert(!assignable_from<EmptyClass, EmptyClass const&&>);\r\n\r\n    static_assert(assignable_from<EmptyClass&, EmptyClass>);\r\n    static_assert(assignable_from<EmptyClass&, EmptyClass&>);\r\n    static_assert(assignable_from<EmptyClass&, EmptyClass&&>);\r\n    static_assert(assignable_from<EmptyClass&, EmptyClass const>);\r\n    static_assert(assignable_from<EmptyClass&, EmptyClass const&>);\r\n    static_assert(assignable_from<EmptyClass&, EmptyClass const&&>);\r\n\r\n    static_assert(!assignable_from<EmptyClass&&, EmptyClass>);\r\n    static_assert(!assignable_from<EmptyClass&&, EmptyClass&>);\r\n    static_assert(!assignable_from<EmptyClass&&, EmptyClass&&>);\r\n    static_assert(!assignable_from<EmptyClass&&, EmptyClass const>);\r\n    static_assert(!assignable_from<EmptyClass&&, EmptyClass const&>);\r\n    static_assert(!assignable_from<EmptyClass&&, EmptyClass const&&>);\r\n\r\n    // assignment operator exists, but no common_reference_with\r\n    struct AssignButUncommon {\r\n        AssignButUncommon& operator=(EmptyClass const&);\r\n    };\r\n    static_assert(!assignable_from<AssignButUncommon, EmptyClass>);\r\n    static_assert(!assignable_from<AssignButUncommon, EmptyClass&>);\r\n    static_assert(!assignable_from<AssignButUncommon, EmptyClass&&>);\r\n    static_assert(!assignable_from<AssignButUncommon, EmptyClass const>);\r\n    static_assert(!assignable_from<AssignButUncommon, EmptyClass const&>);\r\n    static_assert(!assignable_from<AssignButUncommon, EmptyClass const&&>);\r\n\r\n    static_assert(!assignable_from<AssignButUncommon&, EmptyClass>);\r\n    static_assert(!assignable_from<AssignButUncommon&, EmptyClass&>);\r\n    static_assert(!assignable_from<AssignButUncommon&, EmptyClass&&>);\r\n    static_assert(!assignable_from<AssignButUncommon&, EmptyClass const>);\r\n    static_assert(!assignable_from<AssignButUncommon&, EmptyClass const&>);\r\n    static_assert(!assignable_from<AssignButUncommon&, EmptyClass const&&>);\r\n\r\n    static_assert(!assignable_from<AssignButUncommon&&, EmptyClass>);\r\n    static_assert(!assignable_from<AssignButUncommon&&, EmptyClass&>);\r\n    static_assert(!assignable_from<AssignButUncommon&&, EmptyClass&&>);\r\n    static_assert(!assignable_from<AssignButUncommon&&, EmptyClass const>);\r\n    static_assert(!assignable_from<AssignButUncommon&&, EmptyClass const&>);\r\n    static_assert(!assignable_from<AssignButUncommon&&, EmptyClass const&&>);\r\n\r\n    // assignment operator exists, with common_reference_with\r\n    struct AssignAndCommon {\r\n        AssignAndCommon(EmptyClass const&);\r\n        AssignAndCommon& operator=(EmptyClass const&) &;\r\n    };\r\n    static_assert(!assignable_from<AssignAndCommon, EmptyClass>);\r\n    static_assert(!assignable_from<AssignAndCommon, EmptyClass&>);\r\n    static_assert(!assignable_from<AssignAndCommon, EmptyClass&&>);\r\n    static_assert(!assignable_from<AssignAndCommon, EmptyClass const>);\r\n    static_assert(!assignable_from<AssignAndCommon, EmptyClass const&>);\r\n    static_assert(!assignable_from<AssignAndCommon, EmptyClass const&&>);\r\n\r\n    static_assert(assignable_from<AssignAndCommon&, EmptyClass>);\r\n    static_assert(assignable_from<AssignAndCommon&, EmptyClass&>);\r\n    static_assert(assignable_from<AssignAndCommon&, EmptyClass&&>);\r\n    static_assert(assignable_from<AssignAndCommon&, EmptyClass const>);\r\n    static_assert(assignable_from<AssignAndCommon&, EmptyClass const&>);\r\n    static_assert(assignable_from<AssignAndCommon&, EmptyClass const&&>);\r\n\r\n    static_assert(!assignable_from<AssignAndCommon&&, EmptyClass>);\r\n    static_assert(!assignable_from<AssignAndCommon&&, EmptyClass&>);\r\n    static_assert(!assignable_from<AssignAndCommon&&, EmptyClass&&>);\r\n    static_assert(!assignable_from<AssignAndCommon&&, EmptyClass const>);\r\n    static_assert(!assignable_from<AssignAndCommon&&, EmptyClass const&>);\r\n    static_assert(!assignable_from<AssignAndCommon&&, EmptyClass const&&>);\r\n\r\n    struct VoidReturn {\r\n        void operator=(EmptyClass);\r\n    };\r\n    static_assert(!assignable_from<VoidReturn, EmptyClass>);\r\n    static_assert(!assignable_from<EmptyClass, VoidReturn>);\r\n\r\n    struct EvilReturn {\r\n        struct EvilCommaOverload {\r\n            template <class U>\r\n            IncompleteClass operator,(U&&);\r\n        };\r\n\r\n        EvilCommaOverload operator=(int);\r\n    };\r\n    static_assert(!assignable_from<EvilReturn, int>);\r\n\r\n    static_assert(!assignable_from<void, void const>);\r\n    static_assert(!assignable_from<void const, void const>);\r\n    static_assert(!assignable_from<int(), int>);\r\n\r\n    static_assert(assignable_from<DoNotInstantiate<int>*&, DoNotInstantiate<int>*>);\r\n} // namespace test_assignable_from\r\n\r\nnamespace test_destructible {\r\n    using std::destructible;\r\n\r\n    using void_function = void();\r\n\r\n    class PublicDestructor {\r\n    public:\r\n        ~PublicDestructor() {}\r\n    };\r\n    class ProtectedDestructor {\r\n    protected:\r\n        ~ProtectedDestructor() {}\r\n    };\r\n\r\n    class VirtualPublicDestructor {\r\n    public:\r\n        virtual ~VirtualPublicDestructor() {}\r\n    };\r\n    class VirtualProtectedDestructor {\r\n    protected:\r\n        virtual ~VirtualProtectedDestructor() {}\r\n    };\r\n    class VirtualPrivateDestructor {\r\n    private:\r\n        virtual ~VirtualPrivateDestructor() {}\r\n    };\r\n    class DeletedPublicDestructor {\r\n    public:\r\n        ~DeletedPublicDestructor() = delete;\r\n    };\r\n    class DeletedProtectedDestructor {\r\n    protected:\r\n        ~DeletedProtectedDestructor() = delete;\r\n    };\r\n    class DeletedPrivateDestructor {\r\n    private:\r\n        ~DeletedPrivateDestructor() = delete;\r\n    };\r\n\r\n    class DeletedVirtualPublicDestructor {\r\n    public:\r\n        virtual ~DeletedVirtualPublicDestructor() = delete;\r\n    };\r\n    class DeletedVirtualProtectedDestructor {\r\n    protected:\r\n        virtual ~DeletedVirtualProtectedDestructor() = delete;\r\n    };\r\n    class DeletedVirtualPrivateDestructor {\r\n    private:\r\n        virtual ~DeletedVirtualPrivateDestructor() = delete;\r\n    };\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored\r\n    template <class T>\r\n    constexpr bool test() {\r\n        constexpr bool result = destructible<T>;\r\n        static_assert(destructible<T const> == result);\r\n        static_assert(destructible<T volatile> == result);\r\n        static_assert(destructible<T const volatile> == result);\r\n        return result;\r\n    }\r\n#pragma warning(pop)\r\n\r\n    static_assert(test<int>());\r\n    static_assert(test<int const>());\r\n    static_assert(test<int&>());\r\n    static_assert(test<void (*)()>());\r\n    static_assert(test<void (&)()>());\r\n    static_assert(test<int[2]>());\r\n    static_assert(test<int (*)[2]>());\r\n    static_assert(test<int (&)[2]>());\r\n    static_assert(test<CopyableType>());\r\n    static_assert(test<MoveOnly>());\r\n    static_assert(test<CopyOnlyAbomination>());\r\n    static_assert(test<Immobile>());\r\n\r\n    static_assert(!test<void()>());\r\n    static_assert(!test<int[]>());\r\n    static_assert(!test<Indestructible>());\r\n    static_assert(!test<ThrowingDestructor>());\r\n    static_assert(!test<void>());\r\n\r\n    static_assert(test<NonTriviallyDestructible>());\r\n    static_assert(test<int&>());\r\n    static_assert(test<EmptyUnion>());\r\n    static_assert(test<EmptyClass>());\r\n    static_assert(test<int>());\r\n    static_assert(test<double>());\r\n    static_assert(test<int*>());\r\n    static_assert(test<int const*>());\r\n    static_assert(test<char[3]>());\r\n    static_assert(test<BitZero>());\r\n    static_assert(test<int[3]>());\r\n\r\n    static_assert(test<ProtectedAbstract>());\r\n    static_assert(test<PublicAbstract>());\r\n    static_assert(test<PrivateAbstract>());\r\n    static_assert(test<PublicDestructor>());\r\n    static_assert(test<VirtualPublicDestructor>());\r\n    static_assert(test<PurePublicDestructor>());\r\n\r\n    static_assert(!test<int[]>());\r\n    static_assert(!test<void>());\r\n    static_assert(!test<void_function>());\r\n\r\n    // Test inaccessible destructors\r\n    static_assert(!test<ProtectedDestructor>());\r\n    static_assert(!test<PrivateDestructor>());\r\n    static_assert(!test<VirtualProtectedDestructor>());\r\n    static_assert(!test<VirtualPrivateDestructor>());\r\n    static_assert(!test<PureProtectedDestructor>());\r\n    static_assert(!test<PurePrivateDestructor>());\r\n\r\n    // Test deleted constructors\r\n    static_assert(!test<DeletedPublicDestructor>());\r\n    static_assert(!test<DeletedProtectedDestructor>());\r\n    static_assert(!test<DeletedPrivateDestructor>());\r\n    static_assert(!test<DeletedVirtualPublicDestructor>());\r\n    static_assert(!test<DeletedVirtualProtectedDestructor>());\r\n    static_assert(!test<DeletedVirtualPrivateDestructor>());\r\n} // namespace test_destructible\r\n\r\nnamespace test_constructible_from {\r\n    using std::constructible_from, std::initializer_list;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored\r\n    template <class T, class... Args>\r\n    constexpr bool test() {\r\n        constexpr bool result = constructible_from<T, Args...>;\r\n        static_assert(constructible_from<T const, Args...> == result);\r\n        static_assert(constructible_from<T volatile, Args...> == result);\r\n        static_assert(constructible_from<T const volatile, Args...> == result);\r\n        return result;\r\n    }\r\n#pragma warning(pop)\r\n\r\n    static_assert(!test<void>());\r\n    static_assert(!test<void const>());\r\n    static_assert(!test<void volatile>());\r\n    static_assert(!test<void const volatile>());\r\n\r\n    static_assert(test<int>());\r\n    static_assert(test<int, int>());\r\n    static_assert(test<int, int&>());\r\n    static_assert(test<int, int&&>());\r\n    static_assert(test<int, int const>());\r\n    static_assert(test<int, int const&>());\r\n    static_assert(test<int, int const&&>());\r\n    static_assert(!test<int, int (&)[3]>());\r\n    static_assert(!test<int, void()>());\r\n    static_assert(!test<int, void (&)()>());\r\n    static_assert(!test<int, void() const>());\r\n\r\n    static_assert(test<int*>());\r\n    static_assert(test<int*, int*>());\r\n    static_assert(test<int*, int* const>());\r\n    static_assert(test<int*, int*&>());\r\n    static_assert(test<int*, int* const&>());\r\n    static_assert(test<int*, int*&&>());\r\n    static_assert(test<int*, int* const&&>());\r\n\r\n    static_assert(!test<int&>());\r\n    static_assert(!test<int&, int>());\r\n    static_assert(test<int&, int&>());\r\n    static_assert(!test<int&, int&&>());\r\n    static_assert(!test<int&, int const>());\r\n    static_assert(!test<int&, int const&>());\r\n    static_assert(!test<int&, int const&&>());\r\n\r\n    static_assert(!test<int&, long&>()); // https://github.com/ericniebler/stl2/issues/301\r\n    static_assert(!test<int&, void>());\r\n    static_assert(!test<int&, void()>());\r\n    static_assert(!test<int&, void() const>());\r\n    static_assert(!test<int&, void (&)()>());\r\n\r\n    static_assert(!test<int const&>());\r\n    static_assert(test<int const&, int>());\r\n    static_assert(test<int const&, int&>());\r\n    static_assert(test<int const&, int&&>());\r\n    static_assert(test<int const&, int const>());\r\n    static_assert(test<int const&, int const&>());\r\n    static_assert(test<int const&, int const&&>());\r\n\r\n    static_assert(test<int&&, int>());\r\n    static_assert(!test<int&&, int&>());\r\n    static_assert(test<int&&, int&&>());\r\n    static_assert(!test<int&&, int const>());\r\n    static_assert(!test<int&&, int const&>());\r\n    static_assert(!test<int&&, int const&&>());\r\n\r\n    static_assert(test<int const&&, int>());\r\n    static_assert(!test<int const&&, int&>());\r\n    static_assert(test<int const&&, int&&>());\r\n    static_assert(test<int const&&, int const>());\r\n    static_assert(!test<int const&&, int const&>());\r\n    static_assert(test<int const&&, int const&&>());\r\n\r\n    static_assert(!test<int()>());\r\n    static_assert(!test<int (&)()>());\r\n    static_assert(!test<int[]>());\r\n    static_assert(test<int[5]>());\r\n    static_assert(test<int const (&)[5], int (&)[5]>());\r\n\r\n    static_assert(!test<void()>());\r\n    static_assert(!test<void() const>());\r\n    static_assert(!test<void() const, void*>());\r\n    static_assert(!test<void() const, void() const>());\r\n    static_assert(!test<void() volatile>());\r\n    static_assert(!test<void() &>());\r\n    static_assert(!test<void() &&>());\r\n\r\n    static_assert(test<void (&)(), void()>());\r\n    static_assert(test<void (&)(), void (&)()>());\r\n    static_assert(test<void (&)(), void (&&)()>());\r\n    static_assert(test<void (&&)(), void()>());\r\n    static_assert(test<void (&&)(), void (&)()>());\r\n    static_assert(test<void (&&)(), void (&&)()>());\r\n\r\n    static_assert(test<int&&, double&>());\r\n\r\n    static_assert(test<initializer_list<int>>());\r\n\r\n    static_assert(!test<CopyableType>());\r\n    static_assert(test<CopyableType, CopyableType>());\r\n    static_assert(test<CopyableType, CopyableType&>());\r\n    static_assert(test<CopyableType, CopyableType&&>());\r\n    static_assert(test<CopyableType, CopyableType const>());\r\n    static_assert(test<CopyableType, CopyableType const&>());\r\n    static_assert(test<CopyableType, CopyableType const&&>());\r\n\r\n    static_assert(test<MoveOnly>());\r\n    static_assert(test<MoveOnly, MoveOnly>());\r\n    static_assert(!test<MoveOnly, MoveOnly&>());\r\n    static_assert(test<MoveOnly, MoveOnly&&>());\r\n    static_assert(!test<MoveOnly, MoveOnly const>());\r\n    static_assert(!test<MoveOnly, MoveOnly const&>());\r\n    static_assert(!test<MoveOnly, MoveOnly const&&>());\r\n\r\n    static_assert(test<CopyOnlyAbomination>());\r\n    static_assert(!test<CopyOnlyAbomination, CopyOnlyAbomination>());\r\n    static_assert(test<CopyOnlyAbomination, CopyOnlyAbomination&>());\r\n    static_assert(!test<CopyOnlyAbomination, CopyOnlyAbomination&&>());\r\n    static_assert(test<CopyOnlyAbomination, CopyOnlyAbomination const>());\r\n    static_assert(test<CopyOnlyAbomination, CopyOnlyAbomination const&>());\r\n    static_assert(test<CopyOnlyAbomination, CopyOnlyAbomination const&&>());\r\n\r\n    static_assert(test<Immobile>());\r\n    static_assert(!test<Immobile, Immobile>());\r\n    static_assert(!test<Immobile, Immobile&>());\r\n    static_assert(!test<Immobile, Immobile&&>());\r\n    static_assert(!test<Immobile, Immobile const>());\r\n    static_assert(!test<Immobile, Immobile const&>());\r\n    static_assert(!test<Immobile, Immobile const&&>());\r\n\r\n    static_assert(!test<NotDefaultConstructible>());\r\n    static_assert(test<NotDefaultConstructible, NotDefaultConstructible>());\r\n    static_assert(test<NotDefaultConstructible, NotDefaultConstructible&>());\r\n    static_assert(test<NotDefaultConstructible, NotDefaultConstructible&&>());\r\n    static_assert(test<NotDefaultConstructible, NotDefaultConstructible const>());\r\n    static_assert(test<NotDefaultConstructible, NotDefaultConstructible const&>());\r\n    static_assert(test<NotDefaultConstructible, NotDefaultConstructible const&&>());\r\n\r\n    static_assert(!test<Indestructible>());\r\n    static_assert(!test<Indestructible, Indestructible>());\r\n    static_assert(!test<Indestructible, Indestructible&>());\r\n    static_assert(!test<Indestructible, Indestructible&&>());\r\n    static_assert(!test<Indestructible, Indestructible const>());\r\n    static_assert(!test<Indestructible, Indestructible const&>());\r\n    static_assert(!test<Indestructible, Indestructible const&&>());\r\n\r\n    static_assert(!test<ThrowingDestructor>());\r\n    static_assert(!test<ThrowingDestructor, ThrowingDestructor>());\r\n    static_assert(!test<ThrowingDestructor, ThrowingDestructor&>());\r\n    static_assert(!test<ThrowingDestructor, ThrowingDestructor&&>());\r\n    static_assert(!test<ThrowingDestructor, ThrowingDestructor const>());\r\n    static_assert(!test<ThrowingDestructor, ThrowingDestructor const&>());\r\n    static_assert(!test<ThrowingDestructor, ThrowingDestructor const&&>());\r\n\r\n    // Indestructible types are not constructible\r\n    static_assert(test<PrivateDestructor&, PrivateDestructor&>());\r\n    static_assert(!test<PrivateDestructor, int>());\r\n    static_assert(!test<PurePrivateDestructor>());\r\n\r\n    static_assert(test<ExplicitDefault>());\r\n    static_assert(test<ExplicitDefault, ExplicitDefault>());\r\n    static_assert(test<ExplicitDefault, ExplicitDefault&>());\r\n    static_assert(test<ExplicitDefault, ExplicitDefault&&>());\r\n    static_assert(test<ExplicitDefault, ExplicitDefault const>());\r\n    static_assert(test<ExplicitDefault, ExplicitDefault const&>());\r\n    static_assert(test<ExplicitDefault, ExplicitDefault const&&>());\r\n\r\n    static_assert(!test<DeletedDefault>());\r\n    static_assert(test<DeletedDefault, DeletedDefault>());\r\n    static_assert(test<DeletedDefault, DeletedDefault&>());\r\n    static_assert(test<DeletedDefault, DeletedDefault&&>());\r\n    static_assert(test<DeletedDefault, DeletedDefault const>());\r\n    static_assert(test<DeletedDefault, DeletedDefault const&>());\r\n    static_assert(test<DeletedDefault, DeletedDefault const&&>());\r\n\r\n    static_assert(test<SimpleBase, SimpleDerived>());\r\n    static_assert(test<SimpleBase&, SimpleDerived&>());\r\n    static_assert(!test<SimpleDerived&, SimpleBase&>());\r\n    static_assert(test<SimpleBase const&, SimpleDerived const&>());\r\n    static_assert(!test<SimpleDerived const&, SimpleBase const&>());\r\n    static_assert(!test<SimpleDerived const&, SimpleBase>());\r\n\r\n    static_assert(test<SimpleBase&&, SimpleDerived>());\r\n    static_assert(test<SimpleBase&&, SimpleDerived&&>());\r\n    static_assert(!test<SimpleDerived&&, SimpleBase&&>());\r\n    static_assert(!test<SimpleDerived&&, SimpleBase>());\r\n    static_assert(!test<SimpleBase&&, SimpleBase&>());\r\n    static_assert(!test<SimpleBase&&, SimpleDerived&>());\r\n\r\n    static_assert(!test<PrivateAbstract>());\r\n\r\n    static_assert(test<int&, ImplicitTo<int&>>());\r\n    static_assert(test<int const&, ImplicitTo<int&&>>());\r\n    static_assert(test<int&&, ImplicitTo<int&&>>());\r\n    static_assert(test<int const&, ImplicitTo<int>>());\r\n    static_assert(test<int const&, ImplicitTo<int&>>());\r\n    static_assert(test<int const&, ImplicitTo<int&>&>());\r\n\r\n    static_assert(test<SimpleBase&&, ImplicitTo<SimpleDerived&&>>());\r\n    static_assert(test<SimpleBase&&, ImplicitTo<SimpleDerived&&>&>());\r\n\r\n    static_assert(test<int&, ExplicitTo<int&>>());\r\n    static_assert(test<int const&, ExplicitTo<int&>>());\r\n    static_assert(test<int const&, ExplicitTo<int&>&>());\r\n\r\n    struct Multiparameter {\r\n        explicit Multiparameter(int);\r\n        Multiparameter(int, double);\r\n        Multiparameter(int, long, double);\r\n        Multiparameter(char) = delete;\r\n    };\r\n    static_assert(!test<Multiparameter>());\r\n    static_assert(test<Multiparameter, int>());\r\n#ifndef __EDG__ // TRANSITION, VSO-1898939\r\n    static_assert(test<Multiparameter, long>() == is_permissive);\r\n#endif // ^^^ no workaround ^^^\r\n    static_assert(!test<Multiparameter, double>());\r\n    static_assert(!test<Multiparameter, char>());\r\n    static_assert(!test<Multiparameter, void>());\r\n    static_assert(test<Multiparameter, int, double>());\r\n    static_assert(test<Multiparameter, char, float>());\r\n    static_assert(test<Multiparameter, int, long, double>());\r\n    static_assert(test<Multiparameter, double, double, int>());\r\n\r\n    struct ExplicitToDeduced {\r\n        template <class T>\r\n        explicit operator T() const;\r\n    };\r\n    static_assert(test<int, ExplicitToDeduced>());\r\n    static_assert(!test<void, ExplicitToDeduced>());\r\n    static_assert(!test<int&, ExplicitToDeduced>());\r\n\r\n    // Binding through reference-compatible type is required to perform\r\n    // direct-initialization as described in N4849 [over.match.ref]/1.1:\r\n    static_assert(test<int&, ExplicitTo<int&>>());\r\n    static_assert(test<int&&, ExplicitTo<int&&>>());\r\n\r\n    // Binding through temporary behaves like copy-initialization,\r\n    // see N4849 [dcl.init.ref]/5.4:\r\n#ifndef __clang__ // TRANSITION, LLVM-44688\r\n    static_assert(!test<int const&, ExplicitTo<int>>());\r\n    static_assert(!test<int&&, ExplicitTo<int>>());\r\n#endif // ^^^ no workaround ^^^\r\n    static_assert(!test<int const&, ExplicitTo<double&&>>());\r\n    static_assert(!test<int&&, ExplicitTo<double&&>>());\r\n\r\n    struct ImmobileExplicitFromInt {\r\n        ImmobileExplicitFromInt()                          = default;\r\n        ImmobileExplicitFromInt(ImmobileExplicitFromInt&&) = delete;\r\n        explicit ImmobileExplicitFromInt(int);\r\n    };\r\n    static_assert(test<ImmobileExplicitFromInt>());\r\n    static_assert(test<ImmobileExplicitFromInt, int>());\r\n    static_assert(!test<ImmobileExplicitFromInt, ImmobileExplicitFromInt>());\r\n    static_assert(!test<ImmobileExplicitFromInt, ImmobileExplicitFromInt&>());\r\n    static_assert(!test<ImmobileExplicitFromInt, ImmobileExplicitFromInt&&>());\r\n    static_assert(!test<ImmobileExplicitFromInt, ImmobileExplicitFromInt const>());\r\n    static_assert(!test<ImmobileExplicitFromInt, ImmobileExplicitFromInt const&>());\r\n    static_assert(!test<ImmobileExplicitFromInt, ImmobileExplicitFromInt const&&>());\r\n} // namespace test_constructible_from\r\n\r\nnamespace test_default_initializable {\r\n    using std::default_initializable, std::initializer_list;\r\n\r\n    static_assert(default_initializable<int>);\r\n#ifndef __EDG__ // TRANSITION, VSO-1898941\r\n    static_assert(!default_initializable<int const>);\r\n#endif // ^^^ no workaround ^^^\r\n    static_assert(default_initializable<int volatile>);\r\n#ifndef __EDG__ // TRANSITION, VSO-1898941\r\n    static_assert(!default_initializable<int const volatile>);\r\n#endif // ^^^ no workaround ^^^\r\n    static_assert(default_initializable<double>);\r\n    static_assert(!default_initializable<void>);\r\n\r\n    static_assert(default_initializable<int*>);\r\n    static_assert(default_initializable<int const*>);\r\n\r\n    static_assert(default_initializable<int[2]>);\r\n    static_assert(default_initializable<char[3]>);\r\n    static_assert(default_initializable<char[5][3]>);\r\n    static_assert(!default_initializable<int[]>);\r\n    static_assert(!default_initializable<char[]>);\r\n    static_assert(!default_initializable<char[][3]>);\r\n#ifndef __EDG__ // TRANSITION, VSO-1898941\r\n    static_assert(!default_initializable<int const[2]>);\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    static_assert(!default_initializable<int&>);\r\n    static_assert(!default_initializable<int const&>);\r\n    static_assert(!default_initializable<int&&>);\r\n\r\n    static_assert(!default_initializable<int()>);\r\n    static_assert(!default_initializable<int (&)()>);\r\n\r\n    static_assert(!default_initializable<void()>);\r\n    static_assert(!default_initializable<void() const>);\r\n    static_assert(!default_initializable<void() volatile>);\r\n    static_assert(!default_initializable<void() &>);\r\n    static_assert(!default_initializable<void() &&>);\r\n\r\n    static_assert(default_initializable<EmptyClass>);\r\n    static_assert(default_initializable<EmptyClass const>);\r\n    static_assert(default_initializable<EmptyUnion>);\r\n    static_assert(default_initializable<EmptyUnion const>);\r\n\r\n    static_assert(default_initializable<std::initializer_list<int>>);\r\n\r\n    static_assert(default_initializable<NotEmpty>);\r\n    static_assert(default_initializable<BitZero>);\r\n\r\n    static_assert(default_initializable<ExplicitDefault>);\r\n    static_assert(default_initializable<ExplicitMoveAbomination>);\r\n    static_assert(default_initializable<ExplicitCopyAbomination>);\r\n\r\n    static_assert(!default_initializable<NotDefaultConstructible>);\r\n    static_assert(!default_initializable<DeletedDefault>);\r\n\r\n    static_assert(!default_initializable<PurePublicDestructor>);\r\n    static_assert(!default_initializable<NotDefaultConstructible>);\r\n\r\n    class PrivateDefault {\r\n        PrivateDefault();\r\n    };\r\n    static_assert(!default_initializable<PrivateDefault>);\r\n\r\n    struct S {\r\n        int x;\r\n    };\r\n    static_assert(default_initializable<S>);\r\n#ifndef __EDG__ // TRANSITION, VSO-1898941\r\n    static_assert(!default_initializable<S const>);\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    // Also test GH-1603 \"default_initializable accepts types that are not default-initializable\"\r\n#ifndef __EDG__ // TRANSITION, VSO-1898945\r\n    static_assert(!default_initializable<AggregatesExplicitDefault>);\r\n#endif // ^^^ no workaround ^^^\r\n} // namespace test_default_initializable\r\n\r\nnamespace test_move_constructible {\r\n    using std::move_constructible;\r\n\r\n    static_assert(move_constructible<int>);\r\n    static_assert(move_constructible<int const>);\r\n    static_assert(move_constructible<double>);\r\n    static_assert(!move_constructible<void>);\r\n\r\n    static_assert(move_constructible<int*>);\r\n    static_assert(move_constructible<int const*>);\r\n\r\n    static_assert(!move_constructible<int[4]>);\r\n    static_assert(!move_constructible<char[3]>);\r\n    static_assert(!move_constructible<char[]>);\r\n\r\n    static_assert(move_constructible<int&>);\r\n    static_assert(move_constructible<int&&>);\r\n    static_assert(move_constructible<int const&>);\r\n    static_assert(move_constructible<int const&&>);\r\n\r\n    static_assert(!move_constructible<void()>);\r\n\r\n    static_assert(move_constructible<EmptyClass>);\r\n    static_assert(move_constructible<EmptyUnion>);\r\n    static_assert(move_constructible<NotEmpty>);\r\n    static_assert(move_constructible<CopyableType>);\r\n    static_assert(move_constructible<MoveOnly>);\r\n    static_assert(!move_constructible<CopyOnlyAbomination>);\r\n    static_assert(!move_constructible<Immobile>);\r\n    static_assert(!move_constructible<ExplicitMoveAbomination>);\r\n    static_assert(move_constructible<ExplicitCopyAbomination>);\r\n    static_assert(move_constructible<BitZero>);\r\n\r\n    static_assert(move_constructible<NotDefaultConstructible>);\r\n    static_assert(!move_constructible<Indestructible>);\r\n    static_assert(!move_constructible<ThrowingDestructor>);\r\n    static_assert(move_constructible<ExplicitDefault>);\r\n    static_assert(move_constructible<DeletedDefault>);\r\n\r\n    static_assert(move_constructible<Immobile&>);\r\n    static_assert(move_constructible<Immobile&&>);\r\n    static_assert(move_constructible<Immobile const&>);\r\n    static_assert(move_constructible<Immobile const&&>);\r\n\r\n    static_assert(!move_constructible<PurePublicDestructor>);\r\n\r\n    struct ImplicitlyDeletedMove {\r\n        ImplicitlyDeletedMove(ImplicitlyDeletedMove const&);\r\n    };\r\n    static_assert(move_constructible<ImplicitlyDeletedMove>);\r\n} // namespace test_move_constructible\r\n\r\nnamespace test_ranges_swap {\r\n    namespace ranges = std::ranges;\r\n\r\n    template <class T, class U = T>\r\n    constexpr bool can_swap = false;\r\n    template <class T, class U>\r\n        requires requires { ranges::swap(std::declval<T>(), std::declval<U>()); }\r\n    constexpr bool can_swap<T, U> = true;\r\n\r\n    template <class T, class U = T>\r\n    constexpr bool can_nothrow_swap = false;\r\n    template <class T, class U>\r\n        requires can_swap<T, U>\r\n    constexpr bool can_nothrow_swap<T, U> = noexcept(ranges::swap(std::declval<T>(), std::declval<U>()));\r\n\r\n    static_assert(!can_swap<void>);\r\n    static_assert(!can_swap<void const>);\r\n    static_assert(!can_swap<void volatile>);\r\n    static_assert(!can_swap<void const volatile>);\r\n\r\n    static_assert(can_nothrow_swap<int&>);\r\n    static_assert(!can_swap<int const&>);\r\n    static_assert(can_nothrow_swap<int volatile&>);\r\n    static_assert(!can_swap<int const volatile&>);\r\n\r\n    static_assert(!can_swap<int&&>);\r\n    static_assert(!can_swap<int const&&>);\r\n    static_assert(!can_swap<int volatile&&>);\r\n    static_assert(!can_swap<int const volatile&&>);\r\n\r\n    static_assert(!can_swap<int()>);\r\n    static_assert(!can_swap<int() const>);\r\n    static_assert(!can_swap<int (&)()>);\r\n    static_assert(!can_swap<int (&&)()>);\r\n\r\n    static_assert(!can_swap<int (&)[]>);\r\n    static_assert(!can_swap<int (&&)[]>);\r\n\r\n    static_assert(can_nothrow_swap<int (&)[42]>);\r\n    static_assert(can_nothrow_swap<int (&)[42][13]>);\r\n    static_assert(!can_swap<int (&)[42][13], int (&)[13][42]>);\r\n    static_assert(!can_swap<int const (&)[42]>);\r\n    static_assert(can_nothrow_swap<int volatile (&)[42]>);\r\n    static_assert(!can_swap<int const volatile (&)[42]>);\r\n    static_assert(!can_swap<int const (&)[42][13]>);\r\n    static_assert(can_nothrow_swap<int volatile (&)[42][13]>);\r\n    static_assert(!can_swap<int const volatile (&)[42][13]>);\r\n\r\n    static_assert(!can_swap<int (&&)[42]>);\r\n    static_assert(!can_swap<int (&&)[42][13]>);\r\n\r\n    static_assert(!can_swap<int (&&)[42][13], int (&&)[13][42]>);\r\n\r\n    struct SemithrowCopyOnly {\r\n        SemithrowCopyOnly()                                  = default;\r\n        SemithrowCopyOnly(SemithrowCopyOnly const&) noexcept = default;\r\n\r\n        SemithrowCopyOnly& operator=(SemithrowCopyOnly const&) noexcept(false) {\r\n            return *this;\r\n        }\r\n    };\r\n    static_assert(can_swap<SemithrowCopyOnly&>);\r\n    static_assert(!can_nothrow_swap<SemithrowCopyOnly&>);\r\n    static_assert(can_swap<SemithrowCopyOnly (&)[42]>);\r\n    static_assert(!can_nothrow_swap<SemithrowCopyOnly (&)[42]>);\r\n\r\n    struct SemithrowMoveOnly {\r\n        SemithrowMoveOnly() = default;\r\n        SemithrowMoveOnly(SemithrowMoveOnly&&) noexcept(false) {}\r\n        SemithrowMoveOnly& operator=(SemithrowMoveOnly&&) noexcept = default;\r\n    };\r\n    static_assert(can_swap<SemithrowMoveOnly&>);\r\n    static_assert(!can_nothrow_swap<SemithrowMoveOnly&>);\r\n    static_assert(can_swap<SemithrowMoveOnly (&)[42]>);\r\n    static_assert(!can_nothrow_swap<SemithrowMoveOnly (&)[42]>);\r\n\r\n    struct NothrowMoveOnly {\r\n        NothrowMoveOnly()                                      = default;\r\n        NothrowMoveOnly(NothrowMoveOnly&&) noexcept            = default;\r\n        NothrowMoveOnly& operator=(NothrowMoveOnly&&) noexcept = default;\r\n    };\r\n    static_assert(can_nothrow_swap<NothrowMoveOnly&>);\r\n    static_assert(can_nothrow_swap<NothrowMoveOnly (&)[42]>);\r\n\r\n    struct NotMoveConstructible {\r\n        NotMoveConstructible()                                  = default;\r\n        NotMoveConstructible(NotMoveConstructible&&)            = delete;\r\n        NotMoveConstructible& operator=(NotMoveConstructible&&) = default;\r\n    };\r\n    static_assert(!can_swap<NotMoveConstructible&>);\r\n    static_assert(!can_swap<NotMoveConstructible (&)[42]>);\r\n\r\n    struct NotMoveAssignable {\r\n        NotMoveAssignable(NotMoveAssignable&&)            = default;\r\n        NotMoveAssignable& operator=(NotMoveAssignable&&) = delete;\r\n    };\r\n    static_assert(!can_swap<NotMoveAssignable&>);\r\n    static_assert(!can_swap<NotMoveAssignable (&)[42]>);\r\n\r\n    struct ImmobileNothrowSwap {\r\n        ImmobileNothrowSwap()                                 = default;\r\n        ImmobileNothrowSwap(ImmobileNothrowSwap&&)            = delete;\r\n        ImmobileNothrowSwap& operator=(ImmobileNothrowSwap&&) = delete;\r\n        friend void swap(ImmobileNothrowSwap&, ImmobileNothrowSwap&) noexcept {}\r\n    };\r\n    static_assert(can_nothrow_swap<ImmobileNothrowSwap&>);\r\n    static_assert(can_nothrow_swap<ImmobileNothrowSwap (&)[42]>);\r\n\r\n    struct HasThrowingSwap {\r\n        friend void swap(HasThrowingSwap&, HasThrowingSwap&) {}\r\n    };\r\n    static_assert(can_swap<HasThrowingSwap&>);\r\n    static_assert(!can_nothrow_swap<HasThrowingSwap&>);\r\n    static_assert(can_swap<HasThrowingSwap (&)[42]>);\r\n    static_assert(!can_nothrow_swap<HasThrowingSwap (&)[42]>);\r\n\r\n    // Derives from type in std with overloaded swap to validate the poison pill\r\n    struct Unswappable : std::pair<int, int> {\r\n        Unswappable()                   = default;\r\n        Unswappable(Unswappable const&) = delete;\r\n        Unswappable(Unswappable&&)      = delete;\r\n    };\r\n    static_assert(!can_swap<Unswappable&>);\r\n\r\n    static_assert(!can_swap<Unswappable (&)[42]>);\r\n    static_assert(!can_swap<Unswappable (&)[42][13]>);\r\n    static_assert(!can_swap<Unswappable (&)[42][13], Unswappable (&)[13][42]>);\r\n\r\n    static_assert(!can_swap<Unswappable (&&)[42]>);\r\n    static_assert(!can_swap<Unswappable (&&)[42][13]>);\r\n    static_assert(!can_swap<Unswappable (&&)[42][13], Unswappable (&&)[13][42]>);\r\n\r\n    // The wording allows customization of swap for unions as well\r\n    union U {\r\n        U(U const&)            = delete;\r\n        U& operator=(U const&) = delete;\r\n\r\n        friend void swap(U&, U&) {}\r\n    };\r\n    static_assert(can_swap<U&>);\r\n\r\n    namespace adl_barrier {\r\n        struct ConstrainedSwappable {\r\n            ConstrainedSwappable()                            = default;\r\n            ConstrainedSwappable(ConstrainedSwappable const&) = default;\r\n            ConstrainedSwappable(ConstrainedSwappable&&)      = default;\r\n        };\r\n        // ensure equally-specialized but more-constrained non-member swap is preferred to the poison pill\r\n        template <std::same_as<ConstrainedSwappable> T>\r\n        void swap(T&, T&) {}\r\n    } // namespace adl_barrier\r\n    static_assert(can_swap<adl_barrier::ConstrainedSwappable&>);\r\n    static_assert(!can_swap<adl_barrier::ConstrainedSwappable const volatile&>);\r\n\r\n    struct MyInt {\r\n        int i = 42;\r\n    };\r\n    static_assert(can_nothrow_swap<MyInt&>);\r\n\r\n    struct YourInt {\r\n        int i = 13;\r\n    };\r\n    static_assert(can_nothrow_swap<YourInt&>);\r\n\r\n    constexpr void swap(MyInt& x, YourInt& y) noexcept {\r\n        ranges::swap(x.i, y.i);\r\n    }\r\n    constexpr void swap(YourInt& x, MyInt& y) noexcept {\r\n        ranges::swap(x.i, y.i);\r\n    }\r\n    static_assert(can_nothrow_swap<MyInt&, YourInt&>);\r\n    static_assert(can_nothrow_swap<YourInt&, MyInt&>);\r\n\r\n    struct DoNotUseFallback {\r\n        DoNotUseFallback() = default;\r\n        DoNotUseFallback(DoNotUseFallback&&) noexcept {\r\n            abort();\r\n        }\r\n        DoNotUseFallback& operator=(DoNotUseFallback&&) noexcept {\r\n            return *this;\r\n        }\r\n        friend constexpr void swap(DoNotUseFallback&, DoNotUseFallback&) noexcept {}\r\n    };\r\n\r\n    constexpr auto for_each_232 = [](auto (&array)[2][3][2], auto f) {\r\n        for (int i = 0; i < 2; ++i) {\r\n            for (int j = 0; j < 3; ++j) {\r\n                for (int k = 0; k < 2; ++k) {\r\n                    f(array[i][j][k]);\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    constexpr bool compile_time_tests() {\r\n        using ranges::swap;\r\n\r\n        {\r\n            DoNotUseFallback x, y;\r\n            swap(x, y);\r\n        }\r\n        {\r\n            // Non-array swap\r\n            int i = 1;\r\n            int j = 2;\r\n            swap(i, j);\r\n            static_assert(noexcept(swap(i, j)));\r\n            assert(i == 2);\r\n            assert(j == 1);\r\n        }\r\n        {\r\n            // Array swap\r\n            int a[3] = {1, 2, 3};\r\n            int b[3] = {4, 5, 6};\r\n            swap(a, b);\r\n            static_assert(noexcept(swap(a, b)));\r\n            assert(a[0] == 4);\r\n            assert(a[1] == 5);\r\n            assert(a[2] == 6);\r\n            assert(b[0] == 1);\r\n            assert(b[1] == 2);\r\n            assert(b[2] == 3);\r\n        }\r\n        {\r\n            // Multidimensional array\r\n            int a[2][3][2] = {\r\n                {{0, 1}, {2, 3}, {4, 5}},\r\n                {{6, 7}, {8, 9}, {10, 11}},\r\n            };\r\n            int b[2][3][2] = {\r\n                {{12, 13}, {14, 15}, {16, 17}},\r\n                {{18, 19}, {20, 21}, {22, 23}},\r\n            };\r\n            swap(a, b);\r\n            static_assert(noexcept(swap(a, b)));\r\n            int counter = 0;\r\n            auto check  = [&counter](int const& i) {\r\n                assert(i == counter);\r\n                ++counter;\r\n            };\r\n            for_each_232(b, check);\r\n            for_each_232(a, check);\r\n        }\r\n        {\r\n            // Cross-type multidimensional array swap\r\n            MyInt a[2][3][2] = {\r\n                {{{0}, {1}}, {{2}, {3}}, {{4}, {5}}},\r\n                {{{6}, {7}}, {{8}, {9}}, {{10}, {11}}},\r\n            };\r\n            YourInt b[2][3][2] = {\r\n                {{{12}, {13}}, {{14}, {15}}, {{16}, {17}}},\r\n                {{{18}, {19}}, {{20}, {21}}, {{22}, {23}}},\r\n            };\r\n            swap(a, b);\r\n            static_assert(noexcept(swap(a, b)));\r\n            int counter = 0;\r\n            auto check  = [&counter](auto const& e) {\r\n                assert(e.i == counter);\r\n                ++counter;\r\n            };\r\n            for_each_232(b, check);\r\n            for_each_232(a, check);\r\n        }\r\n        return true;\r\n    }\r\n    static_assert(compile_time_tests());\r\n\r\n    void runtime_tests() {\r\n        using ranges::swap;\r\n        compile_time_tests();\r\n\r\n        {\r\n            // Non-array swap\r\n            auto i = std::make_unique<int>(1);\r\n            auto j = std::make_unique<int>(2);\r\n            swap(i, j);\r\n            static_assert(noexcept(swap(i, j)));\r\n            assert(*i == 2);\r\n            assert(*j == 1);\r\n        }\r\n        {\r\n            // Array swap\r\n            std::unique_ptr<int> a[3];\r\n            for (int i = 0; i < 3; ++i) {\r\n                a[i] = std::make_unique<int>(i + 1);\r\n            }\r\n            std::unique_ptr<int> b[3];\r\n            for (int i = 0; i < 3; ++i) {\r\n                b[i] = std::make_unique<int>(i + 4);\r\n            }\r\n            swap(a, b);\r\n            static_assert(noexcept(swap(a, b)));\r\n            assert(*a[0] == 4);\r\n            assert(*a[1] == 5);\r\n            assert(*a[2] == 6);\r\n            assert(*b[0] == 1);\r\n            assert(*b[1] == 2);\r\n            assert(*b[2] == 3);\r\n        }\r\n        {\r\n            // Multidimensional array\r\n            std::unique_ptr<int> a[2][3][2];\r\n            std::unique_ptr<int> b[2][3][2];\r\n\r\n            int counter = 0;\r\n            auto init   = [&counter](std::unique_ptr<int>& e) { e = std::make_unique<int>(counter++); };\r\n            auto check  = [&counter](std::unique_ptr<int> const& e) {\r\n                assert(*e == counter);\r\n                ++counter;\r\n            };\r\n\r\n            for_each_232(a, init);\r\n            for_each_232(b, init);\r\n            swap(a, b);\r\n            static_assert(noexcept(swap(a, b)));\r\n            counter = 0;\r\n            for_each_232(b, check);\r\n            for_each_232(a, check);\r\n        }\r\n    }\r\n} // namespace test_ranges_swap\r\n\r\nnamespace test_swappable {\r\n    using std::swappable;\r\n\r\n    static_assert(swappable<int>);\r\n    static_assert(swappable<int[4]>);\r\n    static_assert(!swappable<int[]>);\r\n    static_assert(!swappable<int[][4]>);\r\n    static_assert(swappable<int[3][1][4][1][5][9]>);\r\n\r\n    static_assert(swappable<EmptyClass>);\r\n    static_assert(swappable<EmptyUnion>);\r\n\r\n    static_assert(!swappable<Immobile>);\r\n    static_assert(!swappable<Immobile&>);\r\n    static_assert(!swappable<Immobile&&>);\r\n\r\n    static_assert(swappable<MovableFriendSwap>);\r\n    // It may not be a great idea that swappable admits reference types and treats them as lvalues, but that's what\r\n    // is_swappable does, so:\r\n    static_assert(swappable<MovableFriendSwap&>);\r\n    static_assert(swappable<MovableFriendSwap&&>);\r\n\r\n    static_assert(swappable<ImmobileFriendSwap>);\r\n    static_assert(swappable<ImmobileFriendSwap&>);\r\n    static_assert(swappable<ImmobileFriendSwap&&>);\r\n\r\n    // test non-referenceable types\r\n    static_assert(!swappable<void>);\r\n    static_assert(!swappable<int() const>);\r\n    static_assert(!swappable<int() &>);\r\n\r\n    static_assert(swappable<ImmobileNonMemberSwap>);\r\n    static_assert(swappable<ImmobileNonMemberSwap&>);\r\n    static_assert(swappable<ImmobileNonMemberSwap&&>);\r\n\r\n    namespace non_member {\r\n        struct OnlyRvalueSwappable : Immobile {};\r\n        void swap(OnlyRvalueSwappable&&, OnlyRvalueSwappable&&) {}\r\n        // swappable only cares about lvalue swaps\r\n        static_assert(!swappable<OnlyRvalueSwappable>);\r\n        static_assert(!swappable<OnlyRvalueSwappable&>);\r\n        static_assert(!swappable<OnlyRvalueSwappable&&>);\r\n\r\n        struct DeletedSwap {\r\n            friend void swap(DeletedSwap&, DeletedSwap&) = delete;\r\n        };\r\n        // a deleted swap overload is correctly ignored\r\n        static_assert(swappable<DeletedSwap>);\r\n        static_assert(swappable<DeletedSwap&>);\r\n        static_assert(swappable<DeletedSwap&&>);\r\n    } // namespace non_member\r\n\r\n    namespace underconstrained {\r\n        struct AmbiguousSwap {};\r\n\r\n        template <class T>\r\n        void swap(T&, T&);\r\n\r\n        // a swap overload that isn't more specialized or constrained than the poison pill is ignored\r\n        static_assert(swappable<AmbiguousSwap>);\r\n        static_assert(swappable<AmbiguousSwap&>);\r\n        static_assert(swappable<AmbiguousSwap&&>);\r\n    } // namespace underconstrained\r\n} // namespace test_swappable\r\n\r\nnamespace test_swappable_with {\r\n    using std::swappable_with;\r\n\r\n    template <class T, class U>\r\n    constexpr bool test() {\r\n        static_assert(swappable_with<T, U> == swappable_with<U, T>);\r\n        return swappable_with<T, U>;\r\n    }\r\n\r\n    static_assert(!test<void, int>());\r\n    static_assert(!test<int, void>());\r\n    static_assert(!test<void const, void const volatile>());\r\n\r\n    static_assert(!test<int, int>());\r\n    static_assert(test<int&, int&>());\r\n    static_assert(!test<int&&, int&&>());\r\n\r\n    static_assert(test<int (&)[4], int (&)[4]>());\r\n    static_assert(!test<int, int>());\r\n    static_assert(!test<int&&, int&&>());\r\n    static_assert(!test<int&, double&>());\r\n    static_assert(!test<int (&)[4], bool (&)[4]>());\r\n\r\n    static_assert(test<int (&)[3][4], int (&)[3][4]>());\r\n    static_assert(test<int (&)[3][4][1][2], int (&)[3][4][1][2]>());\r\n    static_assert(!test<int (&)[3][4][1][2], int (&)[4][4][1][2]>());\r\n\r\n    static_assert(test<int (&)[2][2], int (&)[2][2]>());\r\n\r\n    static_assert(test<int volatile (&)[4], int volatile (&)[4]>());\r\n    static_assert(test<int volatile (&)[3][4], int volatile (&)[3][4]>());\r\n\r\n    static_assert(test<MovableFriendSwap, MovableFriendSwap>() == is_permissive);\r\n    static_assert(test<MovableFriendSwap&, MovableFriendSwap&>());\r\n    static_assert(test<MovableFriendSwap&&, MovableFriendSwap&&>() == is_permissive);\r\n\r\n    static_assert(!test<ImmobileFriendSwap, ImmobileFriendSwap>());\r\n    static_assert(test<ImmobileFriendSwap&, ImmobileFriendSwap&>());\r\n    static_assert(test<ImmobileFriendSwap&&, ImmobileFriendSwap&&>() == is_permissive);\r\n\r\n    static_assert(!test<ImmobileNonMemberSwap, ImmobileNonMemberSwap>());\r\n    static_assert(test<ImmobileNonMemberSwap&, ImmobileNonMemberSwap&>());\r\n    static_assert(test<ImmobileNonMemberSwap&&, ImmobileNonMemberSwap&&>() == is_permissive);\r\n\r\n    struct LvalueAndRvalueSwappable {};\r\n    void swap(LvalueAndRvalueSwappable&&, LvalueAndRvalueSwappable&&) {}\r\n    static_assert(test<LvalueAndRvalueSwappable, LvalueAndRvalueSwappable>());\r\n    static_assert(test<LvalueAndRvalueSwappable&, LvalueAndRvalueSwappable&>());\r\n    static_assert(test<LvalueAndRvalueSwappable&&, LvalueAndRvalueSwappable&&>());\r\n\r\n    template <int>\r\n    struct ImmobileAndSwappable : Immobile {\r\n        friend void swap(ImmobileAndSwappable&, ImmobileAndSwappable&) {}\r\n    };\r\n    template <int I, int J>\r\n    void swap(ImmobileAndSwappable<I>&, ImmobileAndSwappable<J>&) {}\r\n\r\n    struct ImmobileAndNotSwappable : Immobile {};\r\n    void swap(ImmobileNonMemberSwap&, ImmobileAndNotSwappable&) {}\r\n    void swap(ImmobileAndNotSwappable&, ImmobileNonMemberSwap&) {}\r\n\r\n    struct CanSwapButUncommon {};\r\n    void swap(ImmobileNonMemberSwap&, CanSwapButUncommon&) {}\r\n    void swap(CanSwapButUncommon&, ImmobileNonMemberSwap&) {}\r\n\r\n    template <int>\r\n    struct AsymmetricallySwappable {};\r\n    void swap(AsymmetricallySwappable<0>&, AsymmetricallySwappable<1>&) {}\r\n} // namespace test_swappable_with\r\n\r\n// common_type specializations to satisfy swappable_with's common_reference_with requirement\r\ntemplate <>\r\nstruct std::common_type<ImmobileNonMemberSwap, test_swappable_with::ImmobileAndNotSwappable> {\r\n    using type = Omniconvertible;\r\n};\r\ntemplate <>\r\nstruct std::common_type<test_swappable_with::ImmobileAndNotSwappable, ImmobileNonMemberSwap> {\r\n    using type = Omniconvertible;\r\n};\r\n\r\ntemplate <int I, int J>\r\nstruct std::common_type<test_swappable_with::AsymmetricallySwappable<I>,\r\n    test_swappable_with::AsymmetricallySwappable<J>> {\r\n    using type = Omniconvertible;\r\n};\r\n\r\ntemplate <int I, int J>\r\nstruct std::common_type<test_swappable_with::ImmobileAndSwappable<I>, test_swappable_with::ImmobileAndSwappable<J>> {\r\n    using type = Omniconvertible;\r\n};\r\n\r\nnamespace test_swappable_with {\r\n    // Not swappable_with: a constituent type is not swappable\r\n    static_assert(!test<ImmobileNonMemberSwap&, ImmobileAndNotSwappable&>());\r\n    // Not swappable_with: common_reference_with requirement is not satisfied\r\n    static_assert(!test<ImmobileNonMemberSwap&, CanSwapButUncommon&>());\r\n    // Not swappable_with: asymmetric\r\n    static_assert(!test<AsymmetricallySwappable<0>&, AsymmetricallySwappable<1>&>());\r\n    // swappable_with: all requirements met\r\n    static_assert(test<ImmobileAndSwappable<0>&, ImmobileAndSwappable<1>&>());\r\n\r\n    namespace example {\r\n        // The example from [concept.swappable] with changes per the proposed resolution of LWG-3175:\r\n        namespace ranges = std::ranges;\r\n\r\n        template <class T, std::swappable_with<T> U>\r\n        void value_swap(T&& t, U&& u) {\r\n            ranges::swap(std::forward<T>(t), std::forward<U>(u));\r\n        }\r\n\r\n        template <std::swappable T>\r\n        void lv_swap(T& t1, T& t2) {\r\n            ranges::swap(t1, t2);\r\n        }\r\n\r\n        namespace N {\r\n            struct A {\r\n                int m;\r\n            };\r\n            struct Proxy {\r\n                A* a;\r\n                Proxy(A& a) : a{&a} {}\r\n                friend void swap(Proxy x, Proxy y) {\r\n                    ranges::swap(*x.a, *y.a);\r\n                }\r\n            };\r\n            Proxy proxy(A& a) {\r\n                return Proxy{a};\r\n            }\r\n        } // namespace N\r\n\r\n        void test() {\r\n            int i = 1, j = 2;\r\n            lv_swap(i, j);\r\n            assert(i == 2 && j == 1);\r\n\r\n            N::A a1 = {5};\r\n            N::A a2 = {-5};\r\n            value_swap(a1, proxy(a2));\r\n            assert(a1.m == -5 && a2.m == 5);\r\n\r\n            // additional test cases not from [concept.swappable] for completeness:\r\n            static_assert(std::is_same_v<std::common_reference_t<N::Proxy, N::A&>, N::Proxy>);\r\n            static_assert(swappable_with<N::A&, N::Proxy>);\r\n\r\n            value_swap(proxy(a1), a2);\r\n            assert(a1.m == 5 && a2.m == -5);\r\n\r\n            value_swap(proxy(a1), proxy(a2));\r\n            assert(a1.m == -5 && a2.m == 5);\r\n\r\n            value_swap(a1, a2);\r\n            assert(a1.m == 5 && a2.m == -5);\r\n            // end additional test cases\r\n        }\r\n    } // namespace example\r\n} // namespace test_swappable_with\r\n\r\nnamespace test_copy_constructible {\r\n    using std::copy_constructible;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored\r\n    template <class T>\r\n    constexpr bool test() {\r\n        constexpr bool result = copy_constructible<T>;\r\n        static_assert(copy_constructible<T const> == result);\r\n        if constexpr (std::is_scalar_v<T> || std::is_reference_v<T>) {\r\n            static_assert(copy_constructible<T volatile> == result);\r\n            static_assert(copy_constructible<T const volatile> == result);\r\n        } else {\r\n            static_assert(!copy_constructible<T volatile>);\r\n            static_assert(!copy_constructible<T const volatile>);\r\n        }\r\n        return result;\r\n    }\r\n#pragma warning(pop)\r\n\r\n    static_assert(!test<void>());\r\n\r\n    static_assert(test<int>());\r\n    static_assert(test<int const>());\r\n    static_assert(test<double>());\r\n\r\n    static_assert(test<int*>());\r\n    static_assert(test<int const*>());\r\n\r\n    static_assert(!test<int[4]>());\r\n    static_assert(!test<int[]>());\r\n\r\n    static_assert(test<int&>());\r\n    static_assert(!test<int&&>());\r\n    static_assert(test<int const&>());\r\n    static_assert(!test<int const&&>());\r\n\r\n    static_assert(!test<void()>());\r\n\r\n    static_assert(test<EmptyUnion>());\r\n    static_assert(test<EmptyClass>());\r\n    static_assert(test<NotEmpty>());\r\n    static_assert(test<BitZero>());\r\n\r\n    static_assert(test<CopyableType>());\r\n    static_assert(!test<MoveOnly>());\r\n    static_assert(!copy_constructible<CopyOnlyAbomination>);\r\n    static_assert(copy_constructible<CopyOnlyAbomination const>);\r\n    static_assert(!test<Immobile>());\r\n    static_assert(!test<ExplicitMoveAbomination>());\r\n    static_assert(!test<ExplicitCopyAbomination>());\r\n\r\n    static_assert(!test<PurePublicDestructor>());\r\n    static_assert(!test<Indestructible>());\r\n    static_assert(!test<ThrowingDestructor>());\r\n\r\n    static_assert(test<NotDefaultConstructible>());\r\n    static_assert(test<ExplicitDefault>());\r\n    static_assert(test<DeletedDefault>());\r\n\r\n    static_assert(test<Immobile&>());\r\n    static_assert(!test<Immobile&&>());\r\n    static_assert(test<Immobile const&>());\r\n    static_assert(!test<Immobile const&&>());\r\n\r\n    // https://github.com/ericniebler/stl2/issues/301\r\n    struct NotMutableRef {\r\n        NotMutableRef()                     = default;\r\n        NotMutableRef(NotMutableRef const&) = default;\r\n        NotMutableRef(NotMutableRef&)       = delete;\r\n        NotMutableRef(NotMutableRef&&)      = default;\r\n    };\r\n    struct NotConstRefRef {\r\n        NotConstRefRef()                       = default;\r\n        NotConstRefRef(NotConstRefRef const&)  = default;\r\n        NotConstRefRef(NotConstRefRef&&)       = default;\r\n        NotConstRefRef(NotConstRefRef const&&) = delete;\r\n    };\r\n\r\n    static_assert(!copy_constructible<NotMutableRef>);\r\n    static_assert(!copy_constructible<NotConstRefRef>);\r\n\r\n    struct UserProvidedCopy {\r\n        UserProvidedCopy(UserProvidedCopy const&);\r\n    };\r\n    static_assert(test<UserProvidedCopy>());\r\n\r\n    class PrivateCopy {\r\n    private:\r\n        PrivateCopy(PrivateCopy const&);\r\n    };\r\n    static_assert(!test<PrivateCopy>());\r\n\r\n    struct MutatingCopyAbomination {\r\n        MutatingCopyAbomination(MutatingCopyAbomination&); // NB: not const&\r\n        void operator=(MutatingCopyAbomination&); // NB: not const&\r\n    };\r\n    static_assert(!test<MutatingCopyAbomination>());\r\n} // namespace test_copy_constructible\r\n\r\nnamespace test_object_concepts {\r\n    using std::copyable, std::movable, std::regular, std::semiregular;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored\r\n    template <class T>\r\n    constexpr bool test_movable() {\r\n        constexpr bool result = movable<T>;\r\n        static_assert(!movable<T const>);\r\n        static_assert(movable<T volatile> == std::is_scalar_v<T>);\r\n        static_assert(!movable<T const volatile>);\r\n        return result;\r\n    }\r\n\r\n    template <class T>\r\n    constexpr bool test_copyable() {\r\n        constexpr bool result = copyable<T>;\r\n        static_assert(!copyable<T const>);\r\n        static_assert(copyable<T volatile> == std::is_scalar_v<T>);\r\n        static_assert(!copyable<T const volatile>);\r\n        return result;\r\n    }\r\n\r\n    template <class T>\r\n    constexpr bool test_semiregular() {\r\n        constexpr bool result = semiregular<T>;\r\n        static_assert(!semiregular<T const>);\r\n        static_assert(semiregular<T volatile> == std::is_scalar_v<T>);\r\n        static_assert(!semiregular<T const volatile>);\r\n        return result;\r\n    }\r\n\r\n    template <class T>\r\n    constexpr bool test_regular() {\r\n        constexpr bool result = regular<T>;\r\n        static_assert(!regular<T const>);\r\n        static_assert(regular<T volatile> == std::is_scalar_v<T>);\r\n        static_assert(!regular<T const volatile>);\r\n        return result;\r\n    }\r\n#pragma warning(pop)\r\n\r\n    static_assert(!test_movable<void>());\r\n\r\n    static_assert(test_movable<int>());\r\n    static_assert(test_movable<double>());\r\n\r\n    static_assert(!test_movable<int&>());\r\n    static_assert(!test_movable<int&&>()); // https://github.com/ericniebler/stl2/issues/310\r\n\r\n    static_assert(!test_movable<int[42]>());\r\n    static_assert(!test_movable<int[]>());\r\n\r\n    static_assert(!test_movable<int(int)>());\r\n\r\n    static_assert(test_movable<CopyableType>());\r\n    static_assert(test_movable<MoveOnly>());\r\n    static_assert(!test_movable<CopyOnlyAbomination>());\r\n    static_assert(!test_movable<Immobile>());\r\n\r\n    static_assert(!test_copyable<void>());\r\n\r\n    static_assert(test_copyable<int>());\r\n    static_assert(test_copyable<double>());\r\n\r\n    static_assert(!test_copyable<int[42]>());\r\n    static_assert(!test_copyable<int[]>());\r\n\r\n    static_assert(!test_copyable<int&>());\r\n    static_assert(!test_copyable<int&&>());\r\n\r\n    static_assert(!test_copyable<int(int)>());\r\n\r\n    static_assert(test_copyable<CopyableType>());\r\n    static_assert(!test_copyable<MoveOnly>());\r\n    static_assert(!test_copyable<CopyOnlyAbomination>());\r\n    static_assert(!test_copyable<Immobile>());\r\n\r\n    static_assert(!test_semiregular<void>());\r\n\r\n    static_assert(test_semiregular<int>());\r\n    static_assert(test_semiregular<double>());\r\n\r\n    static_assert(!test_semiregular<int&>());\r\n\r\n    static_assert(!test_semiregular<MoveOnly>());\r\n    static_assert(!test_semiregular<Immobile>());\r\n    static_assert(!test_semiregular<ExplicitMoveAbomination>());\r\n    static_assert(!test_semiregular<ExplicitCopyAbomination>());\r\n    static_assert(!test_semiregular<CopyOnlyAbomination>());\r\n    static_assert(test_semiregular<SemiregularType>());\r\n    static_assert(test_semiregular<RegularType>());\r\n\r\n    static_assert(!test_regular<void>());\r\n\r\n    static_assert(test_regular<int>());\r\n    static_assert(test_regular<double>());\r\n\r\n    static_assert(!test_regular<int&>());\r\n\r\n    static_assert(!test_regular<MoveOnly>());\r\n    static_assert(!test_regular<Immobile>());\r\n    static_assert(!test_regular<ExplicitMoveAbomination>());\r\n    static_assert(!test_regular<ExplicitCopyAbomination>());\r\n    static_assert(!test_regular<CopyOnlyAbomination>());\r\n    static_assert(!test_regular<CopyableType>());\r\n    static_assert(!test_regular<SemiregularType>());\r\n    static_assert(test_regular<RegularType>());\r\n} // namespace test_object_concepts\r\n\r\nnamespace test_boolean_testable {\r\n    // Note: other than knowing the secret internal concept name, this is a portable test.\r\n    using std::_Boolean_testable;\r\n\r\n    // Better have these four, since we use them as examples in the Standard.\r\n    static_assert(_Boolean_testable<bool>);\r\n    static_assert(_Boolean_testable<std::true_type>);\r\n    static_assert(_Boolean_testable<int*>);\r\n    static_assert(_Boolean_testable<std::bitset<42>::reference>);\r\n\r\n    static_assert(_Boolean_testable<std::false_type>);\r\n\r\n    static_assert(_Boolean_testable<int>);\r\n    static_assert(_Boolean_testable<void*>);\r\n\r\n    enum unscoped_boolish : bool { No, Yes };\r\n    static_assert(_Boolean_testable<unscoped_boolish>);\r\n\r\n    enum class scoped_boolish : bool { No, Yes };\r\n    static_assert(!_Boolean_testable<scoped_boolish>);\r\n\r\n    static_assert(!_Boolean_testable<EmptyClass>);\r\n\r\n    static_assert(_Boolean_testable<ImplicitTo<bool>>);\r\n    static_assert(!_Boolean_testable<ExplicitTo<bool>>);\r\n\r\n    struct MutatingBoolConversion {\r\n        operator bool();\r\n    };\r\n    static_assert(_Boolean_testable<MutatingBoolConversion>);\r\n\r\n    template <unsigned int Select> // values in [0, Archetype_max) select a requirement to violate\r\n    struct Archetype {\r\n        operator bool() const\r\n            requires (Select != 0); // Archetype<0> is not implicitly convertible to bool\r\n        explicit operator bool() const\r\n            requires (Select < 2); // Archetype<1> is not explicitly convertible to bool (ambiguity)\r\n        void operator!() const\r\n            requires (Select == 2); // !Archetype<2> does not model _Boolean_testable_impl\r\n    };\r\n\r\n    static_assert(!_Boolean_testable<Archetype<0>>);\r\n    static_assert(!_Boolean_testable<Archetype<1>>);\r\n    static_assert(!_Boolean_testable<Archetype<2>>);\r\n    static_assert(_Boolean_testable<Archetype<3>>);\r\n} // namespace test_boolean_testable\r\n\r\nnamespace test_equality_comparable {\r\n    using std::equality_comparable;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored\r\n    template <class T>\r\n    constexpr bool test() {\r\n        constexpr bool result = equality_comparable<T>;\r\n        static_assert(equality_comparable<T const> == result);\r\n        if constexpr (!std::is_same_v<T, std::add_lvalue_reference_t<T>>) {\r\n            static_assert(equality_comparable<T&> == result);\r\n            static_assert(equality_comparable<T const&> == result);\r\n            static_assert(equality_comparable<T&&> == result);\r\n            static_assert(equality_comparable<T const&&> == result);\r\n        }\r\n        return result;\r\n    }\r\n#pragma warning(pop)\r\n\r\n    static_assert(!test<void>());\r\n\r\n    static_assert(test<int>());\r\n    static_assert(test<double>());\r\n    static_assert(test<std::nullptr_t>());\r\n    static_assert(test<int[42]>());\r\n    static_assert(test<int(int)>());\r\n\r\n    static_assert(!test<EmptyClass>());\r\n\r\n    template <unsigned int> // selects one requirement to violate\r\n    struct Archetype {};\r\n\r\n    template <unsigned int Select>\r\n    bool operator==(Archetype<Select> const&, Archetype<Select> const&);\r\n    void operator==(Archetype<0> const&, Archetype<0> const&); // Archetype<0> == Archetype<0> is not _Boolean_testable\r\n\r\n    template <unsigned int Select>\r\n    bool operator!=(Archetype<Select> const&, Archetype<Select> const&);\r\n    void operator!=(Archetype<1> const&, Archetype<1> const&); // Archetype<1> != Archetype<1> is not _Boolean_testable\r\n\r\n    static_assert(!test<Archetype<0>>());\r\n    static_assert(!test<Archetype<1>>());\r\n    static_assert(test<Archetype<2>>());\r\n} // namespace test_equality_comparable\r\n\r\nnamespace test_equality_comparable_with {\r\n    using std::equality_comparable_with;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored\r\n    template <class T, class U = T>\r\n    constexpr bool test() {\r\n        using std::is_same_v, std::add_lvalue_reference_t;\r\n\r\n        constexpr bool result = equality_comparable_with<T, U>;\r\n        static_assert(equality_comparable_with<U, T> == result);\r\n\r\n        if constexpr (!is_same_v<T, add_lvalue_reference_t<T>>) {\r\n            static_assert(equality_comparable_with<T&, U> == result);\r\n            static_assert(equality_comparable_with<T const&, U> == result);\r\n            static_assert(equality_comparable_with<T&&, U> == result);\r\n            static_assert(equality_comparable_with<T const&&, U> == result);\r\n        }\r\n\r\n        if constexpr (!is_same_v<U, add_lvalue_reference_t<U>>) {\r\n            static_assert(equality_comparable_with<T, U&> == result);\r\n            static_assert(equality_comparable_with<T, U const&> == result);\r\n            static_assert(equality_comparable_with<T, U&&> == result);\r\n            static_assert(equality_comparable_with<T, U const&&> == result);\r\n        }\r\n\r\n        if constexpr (!is_same_v<T, add_lvalue_reference_t<T>> && !is_same_v<U, add_lvalue_reference_t<U>>) {\r\n            static_assert(equality_comparable_with<T&, U&> == result);\r\n            static_assert(equality_comparable_with<T const&, U&> == result);\r\n            static_assert(equality_comparable_with<T&&, U&> == result);\r\n            static_assert(equality_comparable_with<T const&&, U&> == result);\r\n\r\n            static_assert(equality_comparable_with<T&, U const&> == result);\r\n            static_assert(equality_comparable_with<T const&, U const&> == result);\r\n            static_assert(equality_comparable_with<T&&, U const&> == result);\r\n            static_assert(equality_comparable_with<T const&&, U const&> == result);\r\n\r\n            static_assert(equality_comparable_with<T&, U&&> == result);\r\n            static_assert(equality_comparable_with<T const&, U&&> == result);\r\n            static_assert(equality_comparable_with<T&&, U&&> == result);\r\n            static_assert(equality_comparable_with<T const&&, U&&> == result);\r\n\r\n            static_assert(equality_comparable_with<T&, U const&&> == result);\r\n            static_assert(equality_comparable_with<T const&, U const&&> == result);\r\n            static_assert(equality_comparable_with<T&&, U const&&> == result);\r\n            static_assert(equality_comparable_with<T const&&, U const&&> == result);\r\n        }\r\n\r\n        return result;\r\n    }\r\n#pragma warning(pop)\r\n\r\n    static_assert(!test<void>());\r\n    static_assert(!test<int, void>());\r\n\r\n    static_assert(test<int>());\r\n    static_assert(test<double>());\r\n    static_assert(test<int, double>());\r\n    static_assert(test<std::nullptr_t>());\r\n    static_assert(test<int*, void*>());\r\n    static_assert(test<int[42]>());\r\n    static_assert(test<int(int)>());\r\n\r\n    template <int>\r\n    struct CrossSpecializationComparable {\r\n        bool operator==(CrossSpecializationComparable const&) const;\r\n        bool operator!=(CrossSpecializationComparable const&) const;\r\n    };\r\n    static_assert(test<CrossSpecializationComparable<0>, CrossSpecializationComparable<0>>());\r\n\r\n    template <int I, int J>\r\n    bool operator==(CrossSpecializationComparable<I> const&, CrossSpecializationComparable<J> const&);\r\n    template <int I, int J>\r\n    bool operator!=(CrossSpecializationComparable<I> const&, CrossSpecializationComparable<J> const&);\r\n\r\n    struct Common { // A common type for CrossSpecializationComparable<1> / <2>\r\n        Common(CrossSpecializationComparable<1>);\r\n        Common(CrossSpecializationComparable<2>);\r\n\r\n        friend bool operator==(Common const&, Common const&) {\r\n            return true;\r\n        }\r\n        friend bool operator!=(Common const&, Common const&) {\r\n            return false;\r\n        }\r\n    };\r\n    static_assert(test<Common, Common>());\r\n    static_assert(!test<CrossSpecializationComparable<0>, Common>());\r\n    static_assert(test<CrossSpecializationComparable<1>, Common>());\r\n    static_assert(test<CrossSpecializationComparable<2>, Common>());\r\n} // namespace test_equality_comparable_with\r\n\r\ntemplate <>\r\nstruct std::common_type<test_equality_comparable_with::CrossSpecializationComparable<1>,\r\n    test_equality_comparable_with::CrossSpecializationComparable<2>> {\r\n    using type = test_equality_comparable_with::Common;\r\n};\r\ntemplate <>\r\nstruct std::common_type<test_equality_comparable_with::CrossSpecializationComparable<2>,\r\n    test_equality_comparable_with::CrossSpecializationComparable<1>> {\r\n    using type = test_equality_comparable_with::Common;\r\n};\r\n\r\nnamespace test_equality_comparable_with {\r\n    // CrossSpecializationComparable<0> / <1> have all the necessary operators, but fail common_reference_with.\r\n    static_assert(!test<CrossSpecializationComparable<0>, CrossSpecializationComparable<1>>());\r\n    // CrossSpecializationComparable<1> / <2> *do* satisfy common_reference_with.\r\n    static_assert(test<CrossSpecializationComparable<1>, CrossSpecializationComparable<2>>());\r\n} // namespace test_equality_comparable_with\r\n\r\nnamespace test_totally_ordered {\r\n    using std::totally_ordered;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored\r\n    template <class T>\r\n    constexpr bool test() {\r\n        constexpr bool result = totally_ordered<T>;\r\n        static_assert(totally_ordered<T const> == result);\r\n        if constexpr (!std::is_same_v<T, std::add_lvalue_reference_t<T>>) {\r\n            static_assert(totally_ordered<T&> == result);\r\n            static_assert(totally_ordered<T const&> == result);\r\n            static_assert(totally_ordered<T&&> == result);\r\n            static_assert(totally_ordered<T const&&> == result);\r\n        }\r\n        return result;\r\n    }\r\n#pragma warning(pop)\r\n\r\n    static_assert(!test<void>());\r\n\r\n    static_assert(test<int>());\r\n    static_assert(test<double>());\r\n    static_assert(test<void*>());\r\n    static_assert(test<int*>());\r\n    static_assert(test<int[42]>());\r\n    static_assert(test<int(int)>());\r\n\r\n#ifndef __EDG__ // TRANSITION, VSO-1898947\r\n    static_assert(!test<std::nullptr_t>());\r\n#endif // ^^^ no workaround ^^^\r\n    static_assert(!test<EmptyClass>());\r\n\r\n    constexpr unsigned int Archetype_max = 6;\r\n    template <unsigned int> // values in [0, Archetype_max) select a requirement to violate\r\n    struct Archetype {};\r\n\r\n    template <unsigned int Select>\r\n    bool operator==(Archetype<Select> const&, Archetype<Select> const&);\r\n    void operator==(Archetype<0> const&, Archetype<0> const&);\r\n\r\n    template <unsigned int Select>\r\n    bool operator!=(Archetype<Select> const&, Archetype<Select> const&);\r\n    void operator!=(Archetype<1> const&, Archetype<1> const&);\r\n\r\n    template <unsigned int Select>\r\n    bool operator<(Archetype<Select> const&, Archetype<Select> const&);\r\n    void operator<(Archetype<2> const&, Archetype<2> const&);\r\n\r\n    template <unsigned int Select>\r\n    bool operator>(Archetype<Select> const&, Archetype<Select> const&);\r\n    void operator>(Archetype<3> const&, Archetype<3> const&);\r\n\r\n    template <unsigned int Select>\r\n    bool operator<=(Archetype<Select> const&, Archetype<Select> const&);\r\n    void operator<=(Archetype<4> const&, Archetype<4> const&);\r\n\r\n    template <unsigned int Select>\r\n    bool operator>=(Archetype<Select> const&, Archetype<Select> const&);\r\n    void operator>=(Archetype<5> const&, Archetype<5> const&);\r\n\r\n    template <std::size_t I>\r\n    constexpr void test_archetype_single() {\r\n        static_assert(!test<Archetype<I>>());\r\n    }\r\n\r\n    template <std::size_t... Is>\r\n    constexpr bool test_Archetype(std::index_sequence<Is...>) {\r\n        static_assert(std::is_same_v<std::index_sequence<Is...>, std::make_index_sequence<Archetype_max>>);\r\n        (test_archetype_single<Is>(), ...);\r\n        static_assert(test<Archetype<Archetype_max>>());\r\n        return true;\r\n    }\r\n    static_assert(test_Archetype(std::make_index_sequence<Archetype_max>{}));\r\n} // namespace test_totally_ordered\r\n\r\nnamespace test_totally_ordered_with {\r\n    using std::totally_ordered_with;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4180) // qualifier applied to function type has no meaning; ignored\r\n    template <class T, class U = T>\r\n    constexpr bool test() {\r\n        constexpr bool result = totally_ordered_with<T, U>;\r\n        static_assert(totally_ordered_with<U, T> == result);\r\n        if constexpr (!std::is_same_v<T, std::add_lvalue_reference_t<T>>) {\r\n            static_assert(totally_ordered_with<T&, U> == result);\r\n            static_assert(totally_ordered_with<T const&, U> == result);\r\n            static_assert(totally_ordered_with<T&&, U> == result);\r\n            static_assert(totally_ordered_with<T const&&, U> == result);\r\n        }\r\n\r\n        if constexpr (!std::is_same_v<U, std::add_lvalue_reference_t<U>>) {\r\n            static_assert(totally_ordered_with<T, U&> == result);\r\n            static_assert(totally_ordered_with<T, U const&> == result);\r\n            static_assert(totally_ordered_with<T, U&&> == result);\r\n            static_assert(totally_ordered_with<T, U const&&> == result);\r\n        }\r\n\r\n        if constexpr (!std::is_same_v<T, std::add_lvalue_reference_t<T>>\r\n                      && !std::is_same_v<U, std::add_lvalue_reference_t<U>>) {\r\n            static_assert(totally_ordered_with<T&, U&> == result);\r\n            static_assert(totally_ordered_with<T const&, U&> == result);\r\n            static_assert(totally_ordered_with<T&&, U&> == result);\r\n            static_assert(totally_ordered_with<T const&&, U&> == result);\r\n\r\n            static_assert(totally_ordered_with<T&, U const&> == result);\r\n            static_assert(totally_ordered_with<T const&, U const&> == result);\r\n            static_assert(totally_ordered_with<T&&, U const&> == result);\r\n            static_assert(totally_ordered_with<T const&&, U const&> == result);\r\n\r\n            static_assert(totally_ordered_with<T&, U&&> == result);\r\n            static_assert(totally_ordered_with<T const&, U&&> == result);\r\n            static_assert(totally_ordered_with<T&&, U&&> == result);\r\n            static_assert(totally_ordered_with<T const&&, U&&> == result);\r\n\r\n            static_assert(totally_ordered_with<T&, U const&&> == result);\r\n            static_assert(totally_ordered_with<T const&, U const&&> == result);\r\n            static_assert(totally_ordered_with<T&&, U const&&> == result);\r\n            static_assert(totally_ordered_with<T const&&, U const&&> == result);\r\n        }\r\n\r\n        return result;\r\n    }\r\n#pragma warning(pop)\r\n\r\n    static_assert(!test<void>());\r\n    static_assert(!test<int, void>());\r\n\r\n    static_assert(test<int>());\r\n    static_assert(test<double>());\r\n    static_assert(test<int, double>());\r\n#ifndef __EDG__ // TRANSITION, VSO-1898947\r\n    static_assert(!test<std::nullptr_t>());\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    static_assert(test<void*>());\r\n    static_assert(test<int*>());\r\n    static_assert(test<int*, void*>());\r\n\r\n    static_assert(test<int[42]>());\r\n\r\n    static_assert(test<int(int)>());\r\n\r\n    template <int>\r\n    struct Ordered {\r\n        bool operator==(Ordered const&) const;\r\n        bool operator!=(Ordered const&) const;\r\n        bool operator<(Ordered const&) const;\r\n        bool operator>(Ordered const&) const;\r\n        bool operator<=(Ordered const&) const;\r\n        bool operator>=(Ordered const&) const;\r\n    };\r\n    static_assert(test<Ordered<0>, Ordered<0>>());\r\n    static_assert(test<Ordered<1>, Ordered<1>>());\r\n    static_assert(test<Ordered<2>, Ordered<2>>());\r\n\r\n    template <int I, int J>\r\n    bool operator==(Ordered<I> const&, Ordered<J> const&);\r\n    template <int I, int J>\r\n    bool operator!=(Ordered<I> const&, Ordered<J> const&);\r\n    template <int I, int J>\r\n    bool operator<(Ordered<I> const&, Ordered<J> const&);\r\n    template <int I, int J>\r\n    bool operator>(Ordered<I> const&, Ordered<J> const&);\r\n    template <int I, int J>\r\n    bool operator<=(Ordered<I> const&, Ordered<J> const&);\r\n    template <int I, int J>\r\n    bool operator>=(Ordered<I> const&, Ordered<J> const&);\r\n\r\n    struct Common { // a common type for Ordered<1> / <2>\r\n        Common(Ordered<1>);\r\n        Common(Ordered<2>);\r\n        friend bool operator==(Common const&, Common const&);\r\n        friend bool operator!=(Common const&, Common const&);\r\n        friend bool operator<(Common const&, Common const&);\r\n        friend bool operator>(Common const&, Common const&);\r\n        friend bool operator<=(Common const&, Common const&);\r\n        friend bool operator>=(Common const&, Common const&);\r\n    };\r\n    static_assert(test<Common, Common>());\r\n} // namespace test_totally_ordered_with\r\n\r\ntemplate <>\r\nstruct std::common_type<test_totally_ordered_with::Ordered<1>, test_totally_ordered_with::Ordered<2>> {\r\n    using type = test_totally_ordered_with::Common;\r\n};\r\ntemplate <>\r\nstruct std::common_type<test_totally_ordered_with::Ordered<2>, test_totally_ordered_with::Ordered<1>> {\r\n    using type = test_totally_ordered_with::Common;\r\n};\r\n\r\nnamespace test_totally_ordered_with {\r\n    // Ordered<0> / <1> have all the necessary operators, but fail common_reference_with\r\n    static_assert(!test<Ordered<0>, Ordered<1>>());\r\n    // Common is the common type of (Ordered<1>, Common) and (Ordered<2>, Common)\r\n    static_assert(test<Ordered<1>, Common>());\r\n    static_assert(test<Ordered<2>, Common>());\r\n    // Ordered<1> / <2> have all the necessary operators, and model common_reference_with\r\n    static_assert(test<Ordered<1>, Ordered<2>>());\r\n} // namespace test_totally_ordered_with\r\n\r\nnamespace test_invocable_concepts {\r\n    // Tests both invocable and regular_invocable concepts (since they're syntactically identical)\r\n\r\n    using std::invocable, std::regular_invocable;\r\n\r\n    template <class F, class... Args>\r\n    constexpr bool test() {\r\n        constexpr bool result = invocable<F, Args...>;\r\n        static_assert(regular_invocable<F, Args...> == result);\r\n        return result;\r\n    }\r\n\r\n    struct tag {};\r\n    struct NotDerived {};\r\n\r\n    void cc_independent_tests() {\r\n        // PMD tests, which don't depend on calling conventions\r\n        {\r\n            using Fn = int tag::*;\r\n            static_assert(!test<Fn>());\r\n            {\r\n                // N4849 [func.require]/1.4: \"... N == 1 and f is a pointer to data member of a class T and\r\n                // is_base_of_v<T, remove_reference_t<decltype(t_1)>> is true\"\r\n                static_assert(test<Fn, tag&>());\r\n                static_assert(test<Fn, DerivesFrom<tag>&>());\r\n                static_assert(test<Fn, tag&&>());\r\n                static_assert(test<Fn, tag const&>());\r\n            }\r\n            {\r\n                // N4849 [func.require]/1.5: \"... N == 1 and f is a pointer to data member of a class T and\r\n                // remove_cvref_t<decltype(t_1)> is a specialization of reference_wrapper\"\r\n                using T  = std::reference_wrapper<tag>;\r\n                using DT = std::reference_wrapper<DerivesFrom<tag>>;\r\n                using CT = std::reference_wrapper<tag const>;\r\n                static_assert(test<Fn, T&>());\r\n                static_assert(test<Fn, DT&>());\r\n                static_assert(test<Fn, T const&>());\r\n                static_assert(test<Fn, T&&>());\r\n                static_assert(test<Fn, CT&>());\r\n            }\r\n            {\r\n                // N4849 [func.require]/1.6: \"... N == 1 and f is a pointer to data member of a class T and t_1 does not\r\n                // satisfy the previous two items\"\r\n                using T  = tag*;\r\n                using DT = DerivesFrom<tag>*;\r\n                using CT = tag const*;\r\n                using ST = std::unique_ptr<tag>;\r\n                static_assert(test<Fn, T&>());\r\n                static_assert(test<Fn, DT&>());\r\n                static_assert(test<Fn, T const&>());\r\n                static_assert(test<Fn, T&&>());\r\n                static_assert(test<Fn, ST>());\r\n                static_assert(test<Fn, CT&>());\r\n            }\r\n        }\r\n        { // pointer to member data\r\n            struct S {};\r\n            using PMD = char S::*;\r\n            static_assert(test<PMD, S&>());\r\n            static_assert(test<PMD, S*>());\r\n            static_assert(test<PMD, S* const>());\r\n            static_assert(test<PMD, S const&>());\r\n            static_assert(test<PMD, S const*>());\r\n            static_assert(test<PMD, S volatile&>());\r\n            static_assert(test<PMD, S volatile*>());\r\n            static_assert(test<PMD, S const volatile&>());\r\n            static_assert(test<PMD, S const volatile*>());\r\n            static_assert(test<PMD, DerivesFrom<S>&>());\r\n            static_assert(test<PMD, DerivesFrom<S> const&>());\r\n            static_assert(test<PMD, DerivesFrom<S>*>());\r\n            static_assert(test<PMD, DerivesFrom<S> const*>());\r\n            static_assert(test<PMD, std::unique_ptr<S>>());\r\n            static_assert(test<PMD, std::unique_ptr<S const>>());\r\n            static_assert(test<PMD, std::reference_wrapper<S>>());\r\n            static_assert(test<PMD, std::reference_wrapper<S const>>());\r\n            static_assert(!test<PMD, NotDerived&>());\r\n        }\r\n    }\r\n\r\n#define NAME      test_default_cc\r\n#define CALLCONV  /* default convention */\r\n#define MCALLCONV /* default convention */\r\n#include \"invocable_cc.hpp\"\r\n\r\n#define NAME      test_cdecl_cdecl\r\n#define CALLCONV  __cdecl\r\n#define MCALLCONV __cdecl\r\n#include \"invocable_cc.hpp\"\r\n\r\n#ifndef _M_CEE // avoid warning C4561: '__fastcall' incompatible with the '/clr' option: converting to '__stdcall'\r\n#define NAME      test_fast_fast\r\n#define CALLCONV  __fastcall\r\n#define MCALLCONV __fastcall\r\n#include \"invocable_cc.hpp\"\r\n#endif // _M_CEE\r\n\r\n#define NAME      test_std_std\r\n#define CALLCONV  __stdcall\r\n#define MCALLCONV __stdcall\r\n#include \"invocable_cc.hpp\"\r\n\r\n#define NAME test_this\r\n#define CALLCONV\r\n#define MCALLCONV __thiscall\r\n#include \"invocable_cc.hpp\"\r\n\r\n#ifndef _M_CEE // avoid warning C4575: '__vectorcall' incompatible with the '/clr' option: converting to '__stdcall'\r\n#if !defined(_M_ARM64) && !defined(_M_ARM64EC)\r\n#define NAME      test_vector_vector\r\n#define CALLCONV  __vectorcall\r\n#define MCALLCONV __vectorcall\r\n#include \"invocable_cc.hpp\"\r\n#endif // ^^^ !ARM64 && !ARM64EC ^^^\r\n#endif // _M_CEE\r\n\r\n} // namespace test_invocable_concepts\r\n\r\nnamespace test_predicate {\r\n    using std::predicate;\r\n\r\n    struct Bool {\r\n        operator bool() const;\r\n    };\r\n\r\n    struct tag {};\r\n\r\n    struct NotCallableWithInt {\r\n        int operator()(int) = delete;\r\n        Bool operator()(tag);\r\n    };\r\n\r\n    struct S {\r\n        using FreeFunc = Bool (*)(long);\r\n        operator FreeFunc() const;\r\n        Bool operator()(char, int&);\r\n        Bool const& operator()(char, int&) const;\r\n        Bool volatile& operator()(char, int&) volatile;\r\n        Bool const volatile& operator()(char, int&) const volatile;\r\n    };\r\n\r\n    struct NotDerived {};\r\n\r\n    void test() {\r\n        {\r\n            using Fn  = Bool (tag::*)(int);\r\n            using RFn = Bool (tag::*)(int) &&;\r\n            {\r\n                // N4849 [func.require]/1.1: \"... f is a pointer to member function of a class T and\r\n                // is_base_of_v<T, remove_reference_t<decltype(t_1)>> is true\"\r\n                static_assert(predicate<Fn, tag&, int>);\r\n                static_assert(predicate<Fn, DerivesFrom<tag>&, int>);\r\n                static_assert(predicate<RFn, tag&&, int>);\r\n                static_assert(!predicate<RFn, tag&, int>);\r\n                static_assert(!predicate<Fn, tag&>);\r\n                static_assert(!predicate<Fn, tag const&, int>);\r\n            }\r\n            {\r\n                // N4849 [func.require]/1.2: \"... f is a pointer to a member function of a class T and\r\n                // remove_cvref_t<decltype(t_1)> is a specialization of reference_wrapper\"\r\n                using T  = std::reference_wrapper<tag>;\r\n                using DT = std::reference_wrapper<DerivesFrom<tag>>;\r\n                using CT = std::reference_wrapper<tag const>;\r\n                static_assert(predicate<Fn, T&, int>);\r\n                static_assert(predicate<Fn, DT&, int>);\r\n                static_assert(predicate<Fn, T const&, int>);\r\n                static_assert(predicate<Fn, T&&, int>);\r\n                static_assert(!predicate<Fn, CT&, int>);\r\n                static_assert(!predicate<RFn, T, int>);\r\n            }\r\n            {\r\n                // N4849 [func.require]/1.3: \"... f is a pointer to a member function of a class T and t_1 does not\r\n                // satisfy the previous two items\"\r\n                using T  = tag*;\r\n                using DT = DerivesFrom<tag>*;\r\n                using CT = tag const*;\r\n                using ST = std::unique_ptr<tag>;\r\n                static_assert(predicate<Fn, T&, int>);\r\n                static_assert(predicate<Fn, DT&, int>);\r\n                static_assert(predicate<Fn, T const&, int>);\r\n                static_assert(predicate<Fn, T&&, int>);\r\n                static_assert(predicate<Fn, ST, int>);\r\n                static_assert(!predicate<Fn, CT&, int>);\r\n                static_assert(!predicate<RFn, T, int>);\r\n            }\r\n        }\r\n        {\r\n            using Fn = Bool(tag::*);\r\n            static_assert(!predicate<Fn>);\r\n            {\r\n                // N4849 [func.require]/1.4: \"... N == 1 and f is a pointer to data member of a class T and\r\n                // is_base_of_v<T, remove_reference_t<decltype(t_1)>> is true\"\r\n                static_assert(predicate<Fn, tag&>);\r\n                static_assert(predicate<Fn, DerivesFrom<tag>&>);\r\n                static_assert(predicate<Fn, tag&&>);\r\n                static_assert(predicate<Fn, tag const&>);\r\n            }\r\n            {\r\n                // N4849 [func.require]/1.5: \"... N == 1 and f is a pointer to data member of a class T and\r\n                // remove_cvref_t<decltype(t_1)> is a specialization of reference_wrapper\"\r\n                using T  = std::reference_wrapper<tag>;\r\n                using DT = std::reference_wrapper<DerivesFrom<tag>>;\r\n                using CT = std::reference_wrapper<tag const>;\r\n                static_assert(predicate<Fn, T&>);\r\n                static_assert(predicate<Fn, DT&>);\r\n                static_assert(predicate<Fn, T const&>);\r\n                static_assert(predicate<Fn, T&&>);\r\n                static_assert(predicate<Fn, CT&>);\r\n            }\r\n            {\r\n                // N4849 [func.require]/1.6: \"... N == 1 and f is a pointer to data member of a class T and t_1 does not\r\n                // satisfy the previous two items\"\r\n                using T  = tag*;\r\n                using DT = DerivesFrom<tag>*;\r\n                using CT = tag const*;\r\n                using ST = std::unique_ptr<tag>;\r\n                static_assert(predicate<Fn, T&>);\r\n                static_assert(predicate<Fn, DT&>);\r\n                static_assert(predicate<Fn, T const&>);\r\n                static_assert(predicate<Fn, T&&>);\r\n                static_assert(predicate<Fn, ST>);\r\n                static_assert(predicate<Fn, CT&>);\r\n            }\r\n        }\r\n        { // N4849 [func.require]/1.7: \"f(t_1, t_2, ..., t_N) in all other cases\"\r\n            { // function pointer\r\n                using Fp = Bool (*)(tag&, int);\r\n                static_assert(predicate<Fp, tag&, int>);\r\n                static_assert(predicate<Fp, DerivesFrom<tag>&, int>);\r\n                static_assert(!predicate<Fp, tag const&, int>);\r\n                static_assert(!predicate<Fp>);\r\n                static_assert(!predicate<Fp, tag&>);\r\n            }\r\n            { // function reference\r\n                using Fp = Bool (&)(tag&, int);\r\n                static_assert(predicate<Fp, tag&, int>);\r\n                static_assert(predicate<Fp, DerivesFrom<tag>&, int>);\r\n                static_assert(!predicate<Fp, tag const&, int>);\r\n                static_assert(!predicate<Fp>);\r\n                static_assert(!predicate<Fp, tag&>);\r\n            }\r\n            { // function object\r\n                using Fn = NotCallableWithInt;\r\n                static_assert(predicate<Fn, tag>);\r\n                static_assert(!predicate<Fn, int>);\r\n            }\r\n        }\r\n\r\n        { // function object\r\n            static_assert(predicate<S, int>);\r\n            static_assert(predicate<S&, unsigned char, int&>);\r\n            static_assert(predicate<S const&, unsigned char, int&>);\r\n            static_assert(!predicate<S volatile&, unsigned char, int&>);\r\n            static_assert(!predicate<S const volatile&, unsigned char, int&>);\r\n\r\n            static_assert(predicate<ImplicitTo<bool (*)(long)>, int>);\r\n            static_assert(predicate<ImplicitTo<bool (*)(long)>, char>);\r\n            static_assert(predicate<ImplicitTo<bool (*)(long)>, float>);\r\n            static_assert(!predicate<ImplicitTo<bool (*)(long)>, char const*>);\r\n            static_assert(!predicate<ImplicitTo<bool (*)(long)>, S const&>);\r\n\r\n            auto omega_mu = [x = 42](int i, double) { return x == i; };\r\n            static_assert(predicate<decltype((omega_mu)), int, double>);\r\n            static_assert(predicate<decltype((omega_mu)), double, int>);\r\n            static_assert(predicate<decltype((omega_mu)), char, char>);\r\n            static_assert(!predicate<decltype((omega_mu))>);\r\n            static_assert(!predicate<decltype((omega_mu)), char const*, double>);\r\n            static_assert(!predicate<decltype((omega_mu)), double, char const*>);\r\n        }\r\n\r\n        { // pointer to function\r\n            using RF0  = bool (&)();\r\n            using RF1  = bool* (&) (int);\r\n            using RF2  = bool& (&) (int, int);\r\n            using RF3  = bool const& (&) (int, int, int);\r\n            using RF4  = bool (&)(int, ...);\r\n            using PF0  = bool (*)();\r\n            using PF1  = bool* (*) (int);\r\n            using PF2  = bool& (*) (int, int);\r\n            using PF3  = bool const& (*) (int, int, int);\r\n            using PF4  = bool (*)(int, ...);\r\n            using RPF0 = bool (*&)();\r\n            using RPF1 = bool* (*&) (int);\r\n            using RPF2 = bool& (*&) (int, int);\r\n            using RPF3 = bool const& (*&) (int, int, int);\r\n            using RPF4 = bool (*&)(int, ...);\r\n            static_assert(predicate<RF0>);\r\n            static_assert(predicate<RF1, int>);\r\n            static_assert(predicate<RF2, int, long>);\r\n            static_assert(predicate<RF3, int, long, int>);\r\n            static_assert(predicate<RF4, int, float, void*>);\r\n            static_assert(predicate<PF0>);\r\n            static_assert(predicate<PF1, int>);\r\n            static_assert(predicate<PF2, int, long>);\r\n            static_assert(predicate<PF3, int, long, int>);\r\n            static_assert(predicate<PF4, int, float, void*>);\r\n            static_assert(predicate<RPF0>);\r\n            static_assert(predicate<RPF1, int>);\r\n            static_assert(predicate<RPF2, int, long>);\r\n            static_assert(predicate<RPF3, int, long, int>);\r\n            static_assert(predicate<RPF4, int, float, void*>);\r\n        }\r\n\r\n        { // pointer to member function\r\n            using PMF0  = Bool (S::*)();\r\n            using PMF1  = Bool (S::*)(long);\r\n            using PMF2  = Bool& (S::*) (long, int);\r\n            using PMF1P = Bool const& (S::*) (int, ...);\r\n            static_assert(predicate<PMF0, S>);\r\n            static_assert(predicate<PMF0, S&>);\r\n            static_assert(predicate<PMF0, S*>);\r\n            static_assert(predicate<PMF0, S*&>);\r\n            static_assert(predicate<PMF0, std::reference_wrapper<S>>);\r\n            static_assert(predicate<PMF0, std::reference_wrapper<S> const&>);\r\n            static_assert(predicate<PMF0, std::reference_wrapper<DerivesFrom<S>>>);\r\n            static_assert(predicate<PMF0, std::reference_wrapper<DerivesFrom<S>> const&>);\r\n            static_assert(predicate<PMF0, std::unique_ptr<S>>);\r\n            static_assert(predicate<PMF0, std::unique_ptr<DerivesFrom<S>>>);\r\n            static_assert(!predicate<PMF0, S const&>);\r\n            static_assert(!predicate<PMF0, S volatile&>);\r\n            static_assert(!predicate<PMF0, S const volatile&>);\r\n            static_assert(!predicate<PMF0, NotDerived&>);\r\n            static_assert(!predicate<PMF0, NotDerived const&>);\r\n            static_assert(!predicate<PMF0, std::unique_ptr<S const>>);\r\n            static_assert(!predicate<PMF0, std::reference_wrapper<S const>>);\r\n            static_assert(!predicate<PMF0, std::reference_wrapper<NotDerived>>);\r\n            static_assert(!predicate<PMF0, std::unique_ptr<NotDerived>>);\r\n\r\n            static_assert(predicate<PMF1, S, int>);\r\n            static_assert(predicate<PMF1, S&, int>);\r\n            static_assert(predicate<PMF1, S*, int>);\r\n            static_assert(predicate<PMF1, S*&, int>);\r\n            static_assert(predicate<PMF1, std::unique_ptr<S>, int>);\r\n            static_assert(predicate<PMF1, std::unique_ptr<DerivesFrom<S>>, int>);\r\n            static_assert(predicate<PMF1, std::reference_wrapper<S>, int>);\r\n            static_assert(predicate<PMF1, std::reference_wrapper<S> const&, int>);\r\n            static_assert(predicate<PMF1, std::reference_wrapper<DerivesFrom<S>>, int>);\r\n            static_assert(predicate<PMF1, std::reference_wrapper<DerivesFrom<S>> const&, int>);\r\n            static_assert(!predicate<PMF1, S const&, int>);\r\n            static_assert(!predicate<PMF1, S volatile&, int>);\r\n            static_assert(!predicate<PMF1, S const volatile&, int>);\r\n            static_assert(!predicate<PMF1, NotDerived&, int>);\r\n            static_assert(!predicate<PMF1, NotDerived const&, int>);\r\n            static_assert(!predicate<PMF1, std::unique_ptr<S const>, int>);\r\n            static_assert(!predicate<PMF1, std::reference_wrapper<S const>, int>);\r\n            static_assert(!predicate<PMF1, std::reference_wrapper<NotDerived>, int>);\r\n            static_assert(!predicate<PMF1, std::unique_ptr<NotDerived>, int>);\r\n\r\n            static_assert(predicate<PMF2, S, int, int>);\r\n            static_assert(predicate<PMF2, S&, int, int>);\r\n            static_assert(predicate<PMF2, S*, int, int>);\r\n            static_assert(predicate<PMF2, S*&, int, int>);\r\n            static_assert(predicate<PMF2, std::unique_ptr<S>, int, int>);\r\n            static_assert(predicate<PMF2, std::unique_ptr<DerivesFrom<S>>, int, int>);\r\n            static_assert(predicate<PMF2, std::reference_wrapper<S>, int, int>);\r\n            static_assert(predicate<PMF2, std::reference_wrapper<S> const&, int, int>);\r\n            static_assert(predicate<PMF2, std::reference_wrapper<DerivesFrom<S>>, int, int>);\r\n            static_assert(predicate<PMF2, std::reference_wrapper<DerivesFrom<S>> const&, int, int>);\r\n            static_assert(!predicate<PMF2, S const&, int, int>);\r\n            static_assert(!predicate<PMF2, S volatile&, int, int>);\r\n            static_assert(!predicate<PMF2, S const volatile&, int, int>);\r\n            static_assert(!predicate<PMF2, std::unique_ptr<S const>, int, int>);\r\n            static_assert(!predicate<PMF2, std::reference_wrapper<S const>, int, int>);\r\n            static_assert(!predicate<PMF2, NotDerived const&, int, int>);\r\n            static_assert(!predicate<PMF2, std::reference_wrapper<NotDerived>, int, int>);\r\n            static_assert(!predicate<PMF2, std::unique_ptr<NotDerived>, int, int>);\r\n\r\n            static_assert(predicate<PMF1P, S&, int>);\r\n            static_assert(predicate<PMF1P, S&, int, long>);\r\n\r\n            using PMF0C  = bool (S::*)() const;\r\n            using PMF1C  = bool (S::*)(long) const;\r\n            using PMF2C  = bool (S::*)(long, int) const;\r\n            using PMF1PC = bool const& (S::*) (int, ...) const;\r\n            static_assert(predicate<PMF0C, S>);\r\n            static_assert(predicate<PMF0C, S&>);\r\n            static_assert(predicate<PMF0C, S const&>);\r\n            static_assert(predicate<PMF0C, S*>);\r\n            static_assert(predicate<PMF0C, S const*>);\r\n            static_assert(predicate<PMF0C, S*&>);\r\n            static_assert(predicate<PMF0C, S const*&>);\r\n            static_assert(predicate<PMF0C, std::unique_ptr<S>>);\r\n            static_assert(predicate<PMF0C, std::unique_ptr<DerivesFrom<S>>>);\r\n            static_assert(predicate<PMF0C, std::reference_wrapper<S>>);\r\n            static_assert(predicate<PMF0C, std::reference_wrapper<S const>>);\r\n            static_assert(predicate<PMF0C, std::reference_wrapper<S> const&>);\r\n            static_assert(predicate<PMF0C, std::reference_wrapper<S const> const&>);\r\n            static_assert(predicate<PMF0C, std::reference_wrapper<DerivesFrom<S>>>);\r\n            static_assert(predicate<PMF0C, std::reference_wrapper<DerivesFrom<S> const>>);\r\n            static_assert(predicate<PMF0C, std::reference_wrapper<DerivesFrom<S>> const&>);\r\n            static_assert(predicate<PMF0C, std::reference_wrapper<DerivesFrom<S> const> const&>);\r\n            static_assert(!predicate<PMF0C, S volatile&>);\r\n            static_assert(!predicate<PMF0C, S const volatile&>);\r\n\r\n            static_assert(predicate<PMF1C, S, int>);\r\n            static_assert(predicate<PMF1C, S&, int>);\r\n            static_assert(predicate<PMF1C, S const&, int>);\r\n            static_assert(predicate<PMF1C, S*, int>);\r\n            static_assert(predicate<PMF1C, S const*, int>);\r\n            static_assert(predicate<PMF1C, S*&, int>);\r\n            static_assert(predicate<PMF1C, S const*&, int>);\r\n            static_assert(predicate<PMF1C, std::unique_ptr<S>, int>);\r\n            static_assert(!predicate<PMF1C, S volatile&, int>);\r\n            static_assert(!predicate<PMF1C, S const volatile&, int>);\r\n\r\n            static_assert(predicate<PMF2C, S, int, int>);\r\n            static_assert(predicate<PMF2C, S&, int, int>);\r\n            static_assert(predicate<PMF2C, S const&, int, int>);\r\n            static_assert(predicate<PMF2C, S*, int, int>);\r\n            static_assert(predicate<PMF2C, S const*, int, int>);\r\n            static_assert(predicate<PMF2C, S*&, int, int>);\r\n            static_assert(predicate<PMF2C, S const*&, int, int>);\r\n            static_assert(predicate<PMF2C, std::unique_ptr<S>, int, int>);\r\n            static_assert(!predicate<PMF2C, S volatile&, int, int>);\r\n            static_assert(!predicate<PMF2C, S const volatile&, int, int>);\r\n\r\n            static_assert(predicate<PMF1PC, S&, int>);\r\n            static_assert(predicate<PMF1PC, S&, int, long>);\r\n\r\n            using PMF0V  = bool (S::*)() volatile;\r\n            using PMF1V  = bool (S::*)(long) volatile;\r\n            using PMF2V  = bool (S::*)(long, int) volatile;\r\n            using PMF1PV = bool const& (S::*) (int, ...) volatile;\r\n            static_assert(predicate<PMF0V, S>);\r\n            static_assert(predicate<PMF0V, S&>);\r\n            static_assert(predicate<PMF0V, S volatile&>);\r\n            static_assert(predicate<PMF0V, S*>);\r\n            static_assert(predicate<PMF0V, S volatile*>);\r\n            static_assert(predicate<PMF0V, S*&>);\r\n            static_assert(predicate<PMF0V, S volatile*&>);\r\n            static_assert(predicate<PMF0V, std::unique_ptr<S>>);\r\n            static_assert(!predicate<PMF0V, S const&>);\r\n            static_assert(!predicate<PMF0V, S const volatile&>);\r\n\r\n            static_assert(predicate<PMF1V, S, int>);\r\n            static_assert(predicate<PMF1V, S&, int>);\r\n            static_assert(predicate<PMF1V, S volatile&, int>);\r\n            static_assert(predicate<PMF1V, S*, int>);\r\n            static_assert(predicate<PMF1V, S volatile*, int>);\r\n            static_assert(predicate<PMF1V, S*&, int>);\r\n            static_assert(predicate<PMF1V, S volatile*&, int>);\r\n            static_assert(predicate<PMF1V, std::unique_ptr<S>, int>);\r\n            static_assert(!predicate<PMF1V, S const&, int>);\r\n            static_assert(!predicate<PMF1V, S const volatile&, int>);\r\n\r\n            static_assert(predicate<PMF2V, S, int, int>);\r\n            static_assert(predicate<PMF2V, S&, int, int>);\r\n            static_assert(predicate<PMF2V, S volatile&, int, int>);\r\n            static_assert(predicate<PMF2V, S*, int, int>);\r\n            static_assert(predicate<PMF2V, S volatile*, int, int>);\r\n            static_assert(predicate<PMF2V, S*&, int, int>);\r\n            static_assert(predicate<PMF2V, S volatile*&, int, int>);\r\n            static_assert(predicate<PMF2V, std::unique_ptr<S>, int, int>);\r\n            static_assert(!predicate<PMF2V, S const&, int, int>);\r\n            static_assert(!predicate<PMF2V, S const volatile&, int, int>);\r\n\r\n            static_assert(predicate<PMF1PV, S&, int>);\r\n            static_assert(predicate<PMF1PV, S&, int, long>);\r\n\r\n            using PMF0CV  = Bool (S::*)() const volatile;\r\n            using PMF1CV  = Bool (S::*)(long) const volatile;\r\n            using PMF2CV  = Bool (S::*)(long, int) const volatile;\r\n            using PMF1PCV = Bool const& (S::*) (int, ...) const volatile;\r\n            static_assert(predicate<PMF0CV, S>);\r\n            static_assert(predicate<PMF0CV, S&>);\r\n            static_assert(predicate<PMF0CV, S const&>);\r\n            static_assert(predicate<PMF0CV, S volatile&>);\r\n            static_assert(predicate<PMF0CV, S const volatile&>);\r\n            static_assert(predicate<PMF0CV, S*>);\r\n            static_assert(predicate<PMF0CV, S const*>);\r\n            static_assert(predicate<PMF0CV, S volatile*>);\r\n            static_assert(predicate<PMF0CV, S const volatile*>);\r\n            static_assert(predicate<PMF0CV, S*&>);\r\n            static_assert(predicate<PMF0CV, S const*&>);\r\n            static_assert(predicate<PMF0CV, S volatile*&>);\r\n            static_assert(predicate<PMF0CV, S const volatile*&>);\r\n            static_assert(predicate<PMF0CV, std::unique_ptr<S>>);\r\n\r\n            static_assert(predicate<PMF1CV, S, int>);\r\n            static_assert(predicate<PMF1CV, S&, int>);\r\n            static_assert(predicate<PMF1CV, S const&, int>);\r\n            static_assert(predicate<PMF1CV, S volatile&, int>);\r\n            static_assert(predicate<PMF1CV, S const volatile&, int>);\r\n            static_assert(predicate<PMF1CV, S*, int>);\r\n            static_assert(predicate<PMF1CV, S const*, int>);\r\n            static_assert(predicate<PMF1CV, S volatile*, int>);\r\n            static_assert(predicate<PMF1CV, S const volatile*, int>);\r\n            static_assert(predicate<PMF1CV, S*&, int>);\r\n            static_assert(predicate<PMF1CV, S const*&, int>);\r\n            static_assert(predicate<PMF1CV, S volatile*&, int>);\r\n            static_assert(predicate<PMF1CV, S const volatile*&, int>);\r\n            static_assert(predicate<PMF1CV, std::unique_ptr<S>, int>);\r\n\r\n            static_assert(predicate<PMF2CV, S, int, int>);\r\n            static_assert(predicate<PMF2CV, S&, int, int>);\r\n            static_assert(predicate<PMF2CV, S const&, int, int>);\r\n            static_assert(predicate<PMF2CV, S volatile&, int, int>);\r\n            static_assert(predicate<PMF2CV, S const volatile&, int, int>);\r\n            static_assert(predicate<PMF2CV, S*, int, int>);\r\n            static_assert(predicate<PMF2CV, S const*, int, int>);\r\n            static_assert(predicate<PMF2CV, S volatile*, int, int>);\r\n            static_assert(predicate<PMF2CV, S const volatile*, int, int>);\r\n            static_assert(predicate<PMF2CV, S*&, int, int>);\r\n            static_assert(predicate<PMF2CV, S const*&, int, int>);\r\n            static_assert(predicate<PMF2CV, S volatile*&, int, int>);\r\n            static_assert(predicate<PMF2CV, S const volatile*&, int, int>);\r\n            static_assert(predicate<PMF2CV, std::unique_ptr<S>, int, int>);\r\n\r\n            static_assert(predicate<PMF1PCV, S&, int>);\r\n            static_assert(predicate<PMF1PCV, S&, int, long>);\r\n        }\r\n\r\n        { // pointer to member data\r\n            using PMD = bool S::*;\r\n            static_assert(predicate<PMD, S&>);\r\n            static_assert(predicate<PMD, S*>);\r\n            static_assert(predicate<PMD, S* const>);\r\n            static_assert(predicate<PMD, S const&>);\r\n            static_assert(predicate<PMD, S const*>);\r\n            static_assert(predicate<PMD, S volatile&>);\r\n            static_assert(predicate<PMD, S volatile*>);\r\n            static_assert(predicate<PMD, S const volatile&>);\r\n            static_assert(predicate<PMD, S const volatile*>);\r\n            static_assert(predicate<PMD, DerivesFrom<S>&>);\r\n            static_assert(predicate<PMD, DerivesFrom<S> const&>);\r\n            static_assert(predicate<PMD, DerivesFrom<S>*>);\r\n            static_assert(predicate<PMD, DerivesFrom<S> const*>);\r\n            static_assert(predicate<PMD, std::unique_ptr<S>>);\r\n            static_assert(predicate<PMD, std::unique_ptr<S const>>);\r\n            static_assert(predicate<PMD, std::reference_wrapper<S>>);\r\n            static_assert(predicate<PMD, std::reference_wrapper<S const>>);\r\n            static_assert(!predicate<PMD, NotDerived&>);\r\n        }\r\n    }\r\n} // namespace test_predicate\r\n\r\nnamespace test_relation {\r\n    // Tests relation, equivalence_relation, and strict_weak_order (since they are syntactically identical)\r\n\r\n    using std::relation, std::equivalence_relation, std::strict_weak_order;\r\n\r\n    template <class F, class T, class U = T>\r\n    constexpr bool test() {\r\n        constexpr bool result = relation<F, T, U>;\r\n        static_assert(relation<F, U, T> == result);\r\n        static_assert(equivalence_relation<F, T, U> == result);\r\n        static_assert(equivalence_relation<F, U, T> == result);\r\n        static_assert(strict_weak_order<F, T, U> == result);\r\n        static_assert(strict_weak_order<F, U, T> == result);\r\n        return result;\r\n    }\r\n\r\n    static_assert(test<std::equal_to<>, int, long>());\r\n    static_assert(test<std::less<>, int*, void*>());\r\n\r\n    struct Equivalent {\r\n        template <class T, class U>\r\n        constexpr decltype(auto) operator()(T&& t, U&& u) const\r\n            requires requires { static_cast<T &&>(t) == static_cast<U &&>(u); }\r\n        {\r\n            return static_cast<T&&>(t) == static_cast<U&&>(u);\r\n        }\r\n    };\r\n    static_assert(test<Equivalent, int, long>());\r\n\r\n    struct Bool {\r\n        operator bool() const;\r\n    };\r\n\r\n    template <unsigned int>\r\n    struct A {};\r\n    template <unsigned int U>\r\n        requires (0 < U)\r\n    Bool operator==(A<U>, A<U>); // A<0> == A<0> is invalid\r\n    static_assert(!test<Equivalent, A<0>>());\r\n    static_assert(test<Equivalent, A<1>>());\r\n\r\n    template <unsigned int>\r\n    struct B {};\r\n    void operator==(B<1>, B<1>); // B<1> == B<1> does not model _Boolean_testable\r\n    template <unsigned int U>\r\n    bool operator==(B<U>, B<U>);\r\n    static_assert(test<Equivalent, B<0>>());\r\n    static_assert(!test<Equivalent, B<1>>());\r\n\r\n    template <unsigned int I>\r\n        requires (2 != I)\r\n    bool operator==(A<I>, B<I>); // A<2> == B<2> rewrites to B<2> == A<2>\r\n    template <unsigned int I>\r\n        requires (3 != I)\r\n    bool operator==(B<I>, A<I>); // B<3> == A<3> rewrites to A<3> == B<3>\r\n\r\n    static_assert(!test<Equivalent, A<0>, B<0>>());\r\n    static_assert(!test<Equivalent, A<1>, B<1>>());\r\n    static_assert(test<Equivalent, A<2>, B<2>>());\r\n    static_assert(test<Equivalent, A<3>, B<3>>());\r\n    static_assert(test<Equivalent, A<4>, B<4>>());\r\n\r\n    template <unsigned int I>\r\n    struct C {};\r\n    enum E : bool { No, Yes };\r\n    E operator==(C<0>&, C<0>&); // const C<0> == const C<0> is invalid\r\n    template <unsigned int I>\r\n        requires (0 != I)\r\n    E operator==(C<I>, C<I>);\r\n\r\n    static_assert(!test<Equivalent, const C<0>>());\r\n    static_assert(test<Equivalent, const C<1>>());\r\n} // namespace test_relation\r\n\r\nnamespace test_uniform_random_bit_generator {\r\n    using std::uniform_random_bit_generator;\r\n\r\n    static_assert(uniform_random_bit_generator<std::minstd_rand0>);\r\n    static_assert(uniform_random_bit_generator<std::minstd_rand>);\r\n    static_assert(uniform_random_bit_generator<std::mt19937>);\r\n    static_assert(uniform_random_bit_generator<std::mt19937_64>);\r\n    static_assert(uniform_random_bit_generator<std::ranlux24_base>);\r\n    static_assert(uniform_random_bit_generator<std::ranlux48_base>);\r\n    static_assert(uniform_random_bit_generator<std::ranlux24>);\r\n    static_assert(uniform_random_bit_generator<std::ranlux48>);\r\n    static_assert(uniform_random_bit_generator<std::knuth_b>);\r\n    static_assert(uniform_random_bit_generator<std::default_random_engine>);\r\n    static_assert(uniform_random_bit_generator<std::random_device>);\r\n\r\n    struct NoCall {\r\n        static constexpr unsigned int min() {\r\n            return 0;\r\n        }\r\n        static constexpr unsigned int max() {\r\n            return 42;\r\n        }\r\n    };\r\n    static_assert(!uniform_random_bit_generator<NoCall>);\r\n\r\n    struct NoLvalueCall {\r\n        static constexpr unsigned int min() {\r\n            return 0;\r\n        }\r\n        static constexpr unsigned int max() {\r\n            return 42;\r\n        }\r\n        unsigned int operator()() &&;\r\n    };\r\n    static_assert(!uniform_random_bit_generator<NoLvalueCall>);\r\n\r\n    struct SignedValue {\r\n        static constexpr int min() {\r\n            return 0;\r\n        }\r\n        static constexpr int max() {\r\n            return 42;\r\n        }\r\n        int operator()();\r\n    };\r\n    static_assert(!uniform_random_bit_generator<SignedValue>);\r\n\r\n    struct NoMin {\r\n        static constexpr unsigned int max() {\r\n            return 42;\r\n        }\r\n        unsigned int operator()();\r\n    };\r\n    static_assert(!uniform_random_bit_generator<NoMin>);\r\n\r\n    struct NonConstexprMin {\r\n        static unsigned int min() {\r\n            return 0;\r\n        }\r\n        static constexpr unsigned int max() {\r\n            return 42;\r\n        }\r\n        unsigned int operator()();\r\n    };\r\n    static_assert(!uniform_random_bit_generator<NonConstexprMin>);\r\n\r\n    struct BadMin {\r\n        static constexpr int min() {\r\n            return 0;\r\n        }\r\n        static constexpr unsigned int max() {\r\n            return 42;\r\n        }\r\n        unsigned int operator()();\r\n    };\r\n    static_assert(!uniform_random_bit_generator<BadMin>);\r\n\r\n    struct NoMax {\r\n        static constexpr unsigned int min() {\r\n            return 0;\r\n        }\r\n        unsigned int operator()();\r\n    };\r\n    static_assert(!uniform_random_bit_generator<NoMax>);\r\n\r\n    struct NonConstexprMax {\r\n        static constexpr unsigned int min() {\r\n            return 0;\r\n        }\r\n        static unsigned int max() {\r\n            return 42;\r\n        }\r\n        unsigned int operator()();\r\n    };\r\n    static_assert(!uniform_random_bit_generator<NonConstexprMax>);\r\n\r\n    struct BadMax {\r\n        static constexpr unsigned int min() {\r\n            return 0;\r\n        }\r\n        static constexpr int max() {\r\n            return 42;\r\n        }\r\n        unsigned int operator()();\r\n    };\r\n    static_assert(!uniform_random_bit_generator<BadMax>);\r\n\r\n    struct EmptyRange {\r\n        static constexpr unsigned int min() {\r\n            return 0;\r\n        }\r\n        static constexpr unsigned int max() {\r\n            return 0;\r\n        }\r\n        unsigned int operator()();\r\n    };\r\n    static_assert(!uniform_random_bit_generator<EmptyRange>);\r\n\r\n    struct ReversedRange {\r\n        static constexpr unsigned int min() {\r\n            return 42;\r\n        }\r\n        static constexpr unsigned int max() {\r\n            return 0;\r\n        }\r\n        unsigned int operator()();\r\n    };\r\n    static_assert(!uniform_random_bit_generator<ReversedRange>);\r\n\r\n    struct URBG {\r\n        static constexpr unsigned int min() {\r\n            return 0;\r\n        }\r\n        static constexpr unsigned int max() {\r\n            return 42;\r\n        }\r\n        unsigned int operator()();\r\n    };\r\n    static_assert(uniform_random_bit_generator<URBG>);\r\n    static_assert(!uniform_random_bit_generator<const URBG>);\r\n\r\n    struct ConstURBG {\r\n        static constexpr unsigned int min() {\r\n            return 0;\r\n        }\r\n        static constexpr unsigned int max() {\r\n            return 42;\r\n        }\r\n        unsigned int operator()() const;\r\n    };\r\n    static_assert(uniform_random_bit_generator<ConstURBG>);\r\n    static_assert(uniform_random_bit_generator<const ConstURBG>);\r\n} // namespace test_uniform_random_bit_generator\r\n\r\nint main() {\r\n    test_ranges_swap::runtime_tests();\r\n    test_swappable_with::example::test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0898R3_identity/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0898R3_identity/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nstruct S {\r\n    S()                    = delete;\r\n    S(const S&)            = delete;\r\n    S& operator=(const S&) = delete;\r\n};\r\n\r\ntemplate <typename T>\r\nusing test = T::is_transparent;\r\n\r\nint main() {\r\n    static_assert(identity{}(42) == 42);\r\n    static_assert(identity{}(4.2) == 4.2);\r\n\r\n    constexpr identity i;\r\n    assert(i(42) == 42);\r\n    assert(i(4.2) == 4.2);\r\n    static_assert(i(42) == 42);\r\n    static_assert(i(4.2) == 4.2);\r\n\r\n    static_assert(noexcept(identity{}(42)));\r\n    static_assert(noexcept(identity{}(4.2)));\r\n\r\n    vector<int> v = {42, 42, 42};\r\n    assert(identity{}(v) == v);\r\n    assert(i(v) == v);\r\n    assert(&i(v) == &v);\r\n    assert(noexcept(identity{}(v)));\r\n\r\n    static_assert(is_same_v<S&, decltype(identity{}(declval<S&>()))>);\r\n    static_assert(is_same_v<const S&, decltype(identity{}(declval<const S&>()))>);\r\n    static_assert(is_same_v<volatile S&, decltype(identity{}(declval<volatile S&>()))>);\r\n    static_assert(is_same_v<const volatile S&, decltype(identity{}(declval<const volatile S&>()))>);\r\n    static_assert(is_same_v<S&&, decltype(identity{}(declval<S>()))>);\r\n    static_assert(is_same_v<const S&&, decltype(identity{}(declval<const S>()))>);\r\n    static_assert(is_same_v<volatile S&&, decltype(identity{}(declval<volatile S>()))>);\r\n    static_assert(is_same_v<const volatile S&&, decltype(identity{}(declval<const volatile S>()))>);\r\n\r\n    static_assert(is_same_v<test<identity>, test<identity>>);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0912R5_coroutine/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\prefix.lst\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MD /await:strict /std:c++14\"\r\nASAN\tPM_CL=\"/EHsc /MD /await:strict /std:c++14 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /await:strict /std:c++14 /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MD /await:strict /std:c++14 /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /await:strict /std:c++14 /permissive- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MTd /await:strict /std:c++14 /permissive- /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /await:strict /std:c++14 /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MD /await:strict /std:c++14 /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /await:strict /std:c++17\"\r\nASAN\tPM_CL=\"/EHsc /MD /await:strict /std:c++17 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /await:strict /std:c++17 /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MD /await:strict /std:c++17 /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /await:strict /std:c++17 /permissive- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MTd /await:strict /std:c++17 /permissive- /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /await:strict /std:c++17 /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MD /await:strict /std:c++17 /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /std:c++20 /permissive\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++20 /permissive -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /std:c++20 /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++20 /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /std:c++20 /permissive- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++20 /permissive- /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /std:c++20 /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++20 /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /std:c++latest /permissive\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/clr /MD /std:c++20\"\r\nPM_CL=\"/clr /MDd /std:c++20\"\r\nPM_CL=\"/BE /c /EHsc /MD /std:c++20 /permissive-\"\r\nPM_CL=\"/BE /c /EHsc /MTd /std:c++latest /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MD /std:c++20 /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MTd /std:c++latest /permissive-\"\r\n"
  },
  {
    "path": "tests/std/tests/P0912R5_coroutine/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#if defined(__clang__) && defined(_M_ARM64EC) // TRANSITION, LLVM-158341\r\nint main() {}\r\n#else // ^^^ workaround / no workaround vvv\r\n\r\n#include <cassert>\r\n#include <coroutine>\r\n#include <exception>\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n#pragma warning(disable : 6397) // The address-of operator cannot return null pointer in well-defined code.\r\n\r\nint g_tasks_destroyed{0};\r\n\r\nstruct Task {\r\n    struct Promise {\r\n        int result{-1000};\r\n        coroutine_handle<> previous;\r\n\r\n        Task get_return_object() {\r\n            return Task{*this};\r\n        }\r\n\r\n        suspend_always initial_suspend() {\r\n            return {};\r\n        }\r\n\r\n        auto final_suspend() noexcept {\r\n            struct Awaiter {\r\n                bool await_ready() noexcept {\r\n                    return false;\r\n                }\r\n\r\n                void await_resume() noexcept {}\r\n\r\n                coroutine_handle<> await_suspend(coroutine_handle<Promise> h) noexcept {\r\n                    auto& pre = h.promise().previous;\r\n                    if (pre) {\r\n                        return pre; // resume awaiting coroutine\r\n                    }\r\n\r\n                    // If there is no previous coroutine to resume, we've reached the outermost coroutine.\r\n                    // Return a noop coroutine to allow control to return back to the caller.\r\n                    return noop_coroutine();\r\n                }\r\n            };\r\n\r\n            return Awaiter{};\r\n        }\r\n\r\n        void return_value(const int v) {\r\n            result = v;\r\n        }\r\n\r\n        void unhandled_exception() noexcept {\r\n            terminate();\r\n        }\r\n    };\r\n\r\n    using promise_type = Promise;\r\n\r\n    bool await_ready() const noexcept {\r\n        return false;\r\n    }\r\n\r\n    int await_resume() {\r\n        return coro.promise().result;\r\n    }\r\n\r\n    auto await_suspend(coroutine_handle<> enclosing) {\r\n        coro.promise().previous = enclosing;\r\n        return coro; // resume ourselves\r\n    }\r\n\r\n    Task(Task&& rhs) noexcept : coro(rhs.coro) {\r\n        rhs.coro = nullptr;\r\n    }\r\n\r\n    explicit Task(Promise& p) : coro(coroutine_handle<Promise>::from_promise(p)) {}\r\n\r\n    ~Task() {\r\n        ++g_tasks_destroyed;\r\n\r\n        if (coro) {\r\n            coro.destroy();\r\n        }\r\n    }\r\n\r\n    coroutine_handle<Promise> coro;\r\n};\r\n\r\nTask triangular_number(const int n) {\r\n    if (n == 0) {\r\n        co_return 0;\r\n    }\r\n\r\n    co_return n + co_await triangular_number(n - 1);\r\n}\r\n\r\nvoid test_noop_handle() { // Validate noop_coroutine_handle\r\n    const noop_coroutine_handle noop = noop_coroutine();\r\n    STATIC_ASSERT(noexcept(noop_coroutine()));\r\n\r\n    const coroutine_handle<> as_void = noop;\r\n    STATIC_ASSERT(noexcept(static_cast<coroutine_handle<>>(noop_coroutine())));\r\n\r\n    assert(noop);\r\n    assert(as_void);\r\n    STATIC_ASSERT(noexcept(static_cast<bool>(noop)));\r\n    STATIC_ASSERT(noexcept(static_cast<bool>(as_void)));\r\n\r\n    assert(!noop.done());\r\n    assert(!as_void.done());\r\n    STATIC_ASSERT(noexcept(noop.done()));\r\n    STATIC_ASSERT(noexcept(as_void.done()));\r\n\r\n    assert(noop);\r\n    assert(as_void);\r\n    noop();\r\n    as_void();\r\n    STATIC_ASSERT(noexcept(noop()));\r\n\r\n    assert(noop);\r\n    assert(as_void);\r\n    noop.resume();\r\n    as_void.resume();\r\n    STATIC_ASSERT(noexcept(noop.resume()));\r\n\r\n    assert(noop);\r\n    assert(as_void);\r\n    noop.destroy();\r\n    as_void.destroy();\r\n    STATIC_ASSERT(noexcept(noop.destroy()));\r\n\r\n    assert(noop);\r\n    assert(as_void);\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wtautological-undefined-compare\"\r\n#endif // __clang__\r\n    // Clang notices that this is always true and warns: \"reference cannot be bound to dereferenced null pointer\r\n    // in well-defined C++ code; comparison may be assumed to always evaluate to true\"\r\n    assert(&noop.promise() != nullptr);\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // __clang__\r\n    STATIC_ASSERT(noexcept(noop.promise()));\r\n\r\n    assert(noop);\r\n    assert(as_void);\r\n    assert(noop.address() != nullptr);\r\n    assert(noop.address() == as_void.address());\r\n    STATIC_ASSERT(noexcept(noop.address()));\r\n    STATIC_ASSERT(noexcept(as_void.address()));\r\n}\r\n\r\nint main() {\r\n    assert(g_tasks_destroyed == 0);\r\n\r\n    {\r\n        Task t               = triangular_number(10);\r\n        coroutine_handle<> h = t.coro;\r\n\r\n        assert(h == t.coro);\r\n        assert(h);\r\n        assert(!h.done());\r\n\r\n        h();\r\n\r\n        assert(h == t.coro);\r\n        assert(h);\r\n        assert(h.done());\r\n\r\n        assert(g_tasks_destroyed == 10); // triangular_number() called for [0, 9]\r\n\r\n        const int val = t.coro.promise().result;\r\n\r\n        assert(val == 55);\r\n    }\r\n\r\n    assert(g_tasks_destroyed == 11); // triangular_number() called for [0, 10]\r\n\r\n    {\r\n        // Also test GH-1422: hash<coroutine_handle<>>::operator() must be const\r\n        const hash<coroutine_handle<>> h;\r\n        (void) h(coroutine_handle<>{});\r\n    }\r\n\r\n    test_noop_handle();\r\n}\r\n\r\n#endif // ^^^ no workaround ^^^\r\n"
  },
  {
    "path": "tests/std/tests/P0919R3_heterogeneous_unordered_lookup/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0919R3_heterogeneous_unordered_lookup/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n#include <iterator>\r\n#include <memory>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nbool g_prohibit_allocations = false;\r\n\r\nclass prohibit_allocations {\r\npublic:\r\n    explicit prohibit_allocations(const bool value) : previous(g_prohibit_allocations) {\r\n        g_prohibit_allocations = value;\r\n    }\r\n\r\n    prohibit_allocations(const prohibit_allocations&)            = delete;\r\n    prohibit_allocations& operator=(const prohibit_allocations&) = delete;\r\n\r\n    ~prohibit_allocations() {\r\n        g_prohibit_allocations = previous;\r\n    }\r\n\r\nprivate:\r\n    const bool previous;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct test_allocator {\r\n    using value_type = T;\r\n\r\n    test_allocator() = default;\r\n    template <typename U>\r\n    test_allocator(const test_allocator<U>&) {}\r\n    test_allocator(const test_allocator&)            = default;\r\n    test_allocator& operator=(const test_allocator&) = default;\r\n\r\n    T* allocate(const size_t n) {\r\n        assert(!g_prohibit_allocations);\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* const p, const size_t n) {\r\n        allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <typename U>\r\n    bool operator==(const test_allocator<U>&) const noexcept {\r\n        return true;\r\n    }\r\n\r\n    template <typename U>\r\n    bool operator!=(const test_allocator<U>&) const noexcept {\r\n        return false;\r\n    }\r\n};\r\n\r\nstruct transparent_string_equal {\r\n    using is_transparent = void;\r\n    bool operator()(const string_view lhs, const string_view rhs) const noexcept {\r\n        return lhs == rhs;\r\n    }\r\n};\r\n\r\nstruct transparent_string_hasher {\r\n    using is_transparent = void;\r\n    size_t operator()(const string_view target) const noexcept {\r\n        return hash<string_view>{}(target);\r\n    }\r\n};\r\n\r\nstruct string_legacy_traits {\r\n    enum { bucket_size = 1 };\r\n\r\n    bool operator()(const string_view lhs, const string_view rhs) const noexcept {\r\n        return lhs < rhs;\r\n    }\r\n\r\n    size_t operator()(const string_view target) const noexcept {\r\n        return hash<string_view>{}(target);\r\n    }\r\n};\r\n\r\nusing test_str = basic_string<char, char_traits<char>, test_allocator<char>>;\r\n\r\nstatic_assert(is_same_v<unordered_set<size_t, hash<size_t>, equal_to<size_t>>::key_equal, equal_to<size_t>>);\r\nstatic_assert(is_same_v<unordered_map<size_t, int, hash<size_t>, equal_to<size_t>>::key_equal, equal_to<size_t>>);\r\nstatic_assert(is_same_v<unordered_set<size_t, hash<size_t>, equal_to<>>::key_equal, equal_to<>>);\r\nstatic_assert(is_same_v<unordered_map<size_t, int, hash<size_t>, equal_to<>>::key_equal, equal_to<>>);\r\n\r\nstatic_assert(is_same_v<unordered_set<string, transparent_string_hasher>::key_equal, equal_to<string>>);\r\nstatic_assert(is_same_v<unordered_map<string, int, transparent_string_hasher>::key_equal, equal_to<string>>);\r\nstatic_assert(is_same_v<unordered_set<string, transparent_string_hasher, transparent_string_equal>::key_equal,\r\n    transparent_string_equal>);\r\nstatic_assert(is_same_v<unordered_map<string, int, transparent_string_hasher, transparent_string_equal>::key_equal,\r\n    transparent_string_equal>);\r\n\r\nconstexpr string_view testStrings[] = {\r\n    // example inputs from the ordered container transparent comparisons\r\n    \"ape\", \"bat\", \"cat\", \"bear\", \"wolf\", \"raven\", \"giraffe\", \"panther\", \"unicorn\", \"direwolf\", \"elephant\",\r\n\r\n    // 1000 values generated by default-constructed mt19937\r\n    \"D091BB5C\", \"22AE9EF6\", \"E7E1FAEE\", \"D5C31F79\", \"2082352C\", \"F807B7DF\", \"E9D30005\", \"3895AFE1\", \"A1E24BBA\",\r\n    \"4EE4092B\", \"18F86863\", \"8C16A625\", \"474BA8C4\", \"3039CD1A\", \"8C006D5F\", \"FE2D7810\", \"F51F2AE7\", \"FF1816E4\",\r\n    \"F702EF59\", \"F7BADAFA\", \"285954A1\", \"B9D09511\", \"F878C4B3\", \"FB2A0137\", \"F508E4AA\", \"1C1FE652\", \"7C419418\",\r\n    \"CC50AA59\", \"CCDF2E5C\", \"4C0A1F3B\", \"2452A9DC\", \"01397D8D\", \"6BF88C31\", \"1CCA797A\", \"EA6DA4AE\", \"A3C78807\",\r\n    \"CACE1969\", \"E0E0D4AD\", \"F5A14BAB\", \"80F00988\", \"A7DE9F4C\", \"CC450CBA\", \"0924668F\", \"5C7DC380\", \"D96089C5\",\r\n    \"3640AC4C\", \"EF1A2E6D\", \"AE6D9426\", \"ADC1965B\", \"6613BA46\", \"C1FB41C2\", \"BD9B0ECD\", \"BE3DEDFC\", \"7989C8EE\",\r\n    \"6468FD6E\", \"6C0DF032\", \"A7CD6634\", \"2C826D8B\", \"2BD2E412\", \"4D4A2DBE\", \"B4BF6FA7\", \"CC1A8959\", \"08263282\",\r\n    \"51097330\", \"46E46CB0\", \"DF577EC2\", \"0BD1E364\", \"262C5564\", \"18DDA0C9\", \"FE7B45D9\", \"D2CE21C9\", \"D268409A\",\r\n    \"B1E049E1\", \"200BFA47\", \"512D6E73\", \"C3851EEE\", \"F341C081\", \"7D973E48\", \"08D17554\", \"A9E20D28\", \"70518CE6\",\r\n    \"203AC303\", \"61ADD0AB\", \"35D0430C\", \"C3F8E892\", \"0D1C8509\", \"CB92388E\", \"095436BF\", \"2FD6E208\", \"68A29AF9\",\r\n    \"7D61330B\", \"753EC6FC\", \"7211EFEA\", \"7CD15133\", \"A574C4FF\", \"CB41F198\", \"B598EEF6\", \"EBBE7347\", \"C1332568\",\r\n    \"CEBA5A70\", \"46A99459\", \"B4AD9F11\", \"AE00FEAA\", \"00B8B573\", \"A7B480B6\", \"B5F0B06C\", \"29A0EC27\", \"A4DAA010\",\r\n    \"1E76A1C5\", \"74BE9133\", \"7F94C950\", \"C61F6ED6\", \"F5B1C7A1\", \"92E195F8\", \"572384D4\", \"E0732C88\", \"95D41B68\",\r\n    \"CEE496C3\", \"394BBD52\", \"048CD47C\", \"C05309BE\", \"D23D2D63\", \"414DE9C5\", \"D2229F23\", \"818666A3\", \"F0A8B109\",\r\n    \"B2F6B127\", \"69A48341\", \"E4123C56\", \"6C548C8F\", \"F5941F61\", \"94B993AA\", \"8C165134\", \"2876763C\", \"237CE42E\",\r\n    \"C300D11B\", \"263821CA\", \"3AEB8202\", \"41EC0F84\", \"CF4AC36D\", \"D7393EE6\", \"FD0FC06A\", \"4118A30A\", \"551B54A4\",\r\n    \"D074F86F\", \"4CC1C54A\", \"3E57A703\", \"03774CDA\", \"EDE43895\", \"379CE627\", \"59988939\", \"E8490DDC\", \"325410E1\",\r\n    \"D9352F6A\", \"4047080A\", \"F47C081D\", \"9DB51A85\", \"C765D71F\", \"79297527\", \"FCCA2773\", \"5A065B97\", \"114DEE4F\",\r\n    \"D4B12F5F\", \"CB29360A\", \"95D3DE16\", \"983162A8\", \"8CBAAFB3\", \"BB98B27F\", \"EACD3439\", \"B1FAC842\", \"492CBEF1\",\r\n    \"AE08AB78\", \"C1D7DFD0\", \"646F1D40\", \"C0F463C4\", \"8FC23A81\", \"6164E623\", \"3543F2BC\", \"915CC253\", \"8701D0DF\",\r\n    \"136B2FDD\", \"677A359E\", \"0DCFACD0\", \"5A4EA31E\", \"87E25935\", \"97C34E42\", \"C77780F0\", \"5B396FBA\", \"EF1B52E6\",\r\n    \"F7080941\", \"2141888B\", \"278946B0\", \"919E6D64\", \"6518B459\", \"7829FC22\", \"6325D30E\", \"030C0399\", \"BA19B463\",\r\n    \"564DAB75\", \"63794F97\", \"2984C787\", \"ED702BBE\", \"CB563B4D\", \"6FA56696\", \"4FABC9ED\", \"DCD87A48\", \"874DF295\",\r\n    \"9ECFE9F0\", \"2A67F49F\", \"1E9AA4E1\", \"9A1B7D08\", \"78D22934\", \"43521602\", \"5718A361\", \"A771BA44\", \"87A3B97C\",\r\n    \"B0705C82\", \"B7526048\", \"BF86DCD7\", \"FD066EA4\", \"7356B1BB\", \"B872426D\", \"1575515D\", \"E99EADB3\", \"3A9E3C0F\",\r\n    \"8168599C\", \"E9D07A32\", \"8EEAB382\", \"27023EE8\", \"80D10FAC\", \"D368BDC2\", \"7664B5A7\", \"89D0CF46\", \"8BED7368\",\r\n    \"FF02AF49\", \"7294E430\", \"14034FBB\", \"DABD4CC4\", \"71535CF8\", \"9AAEEA20\", \"1B4D989D\", \"7FA09780\", \"F63EF3D2\",\r\n    \"FADC6788\", \"012FB568\", \"08C904FA\", \"C660883F\", \"FA1CCE2A\", \"D13AC8B8\", \"5CF9C9B3\", \"DE62C6BD\", \"ADF500AD\",\r\n    \"159D967E\", \"58A2C06C\", \"665827CB\", \"DB1AA208\", \"4286DDF1\", \"0B8905B4\", \"CCD149A4\", \"A8FD9757\", \"6E7122F0\",\r\n    \"BFFC21B1\", \"E9203368\", \"220C0724\", \"2E8D86CB\", \"FB7BFB5E\", \"43889687\", \"1869325B\", \"25420AFC\", \"485D46DB\",\r\n    \"22D56381\", \"CD572D60\", \"DE89EF2B\", \"13DAC708\", \"9467851D\", \"A09C428D\", \"8CC3A36C\", \"0212714E\", \"251BC1F6\",\r\n    \"AE274AF0\", \"DA603F48\", \"88AFD714\", \"9F3F014D\", \"704C7830\", \"59D803FB\", \"3315C9DC\", \"83645273\", \"23540E0E\",\r\n    \"66DCE437\", \"61E09244\", \"13728D90\", \"C32E0A94\", \"3D6B2529\", \"0A5C5094\", \"1F91D464\", \"40C1B904\", \"2F1494B9\",\r\n    \"8138AC02\", \"3D6D8755\", \"D2963CF5\", \"6AD203B6\", \"FB5234E0\", \"0CB62703\", \"D2CDF95B\", \"E718672D\", \"4D448DF1\",\r\n    \"F1DD92D7\", \"0C4613A1\", \"7DA944F1\", \"3F72F0C3\", \"7D3FA930\", \"8B4742BC\", \"5674C771\", \"E3420514\", \"E669EDD5\",\r\n    \"5805DE29\", \"5E86F504\", \"088449F4\", \"1C77C8A0\", \"29B1FCCC\", \"C7BE9961\", \"E09AEBE7\", \"63C5ECB9\", \"35D657E1\",\r\n    \"3DDF7AE4\", \"45D3249C\", \"6766C940\", \"7E10AD9C\", \"18B13E7F\", \"39320CA2\", \"21C90078\", \"7D84661C\", \"F12A3A21\",\r\n    \"F4772B41\", \"F4C53BAB\", \"A6E76B3B\", \"9340DED2\", \"C1EBC21F\", \"0F4DB654\", \"6F6C42E3\", \"3C1A8943\", \"8D899F74\",\r\n    \"5A6899BA\", \"0D9B6827\", \"D239C5CB\", \"5290106A\", \"03F17ADB\", \"67ACDC26\", \"0B039B90\", \"E88F1AFA\", \"2B42EE31\",\r\n    \"CF239E4D\", \"A62C6E93\", \"421FAE11\", \"BB522891\", \"213D9F32\", \"A5D2ADEB\", \"7E4AAB21\", \"736FBC75\", \"60E56773\",\r\n    \"8C08C64D\", \"B7EDA589\", \"4BDBAE33\", \"49AD9663\", \"BEA4300C\", \"9F997956\", \"305F5B0C\", \"CFD6F924\", \"AFD083DB\",\r\n    \"500085E0\", \"2EFA9644\", \"62BDECBD\", \"5E5501A5\", \"580BC7BB\", \"A02889AD\", \"D0D63DCD\", \"C7BCFC3C\", \"AB56454F\",\r\n    \"14C4A882\", \"612197C7\", \"EDEC3D2F\", \"75600D88\", \"C6951B28\", \"4DB9A52D\", \"7C9E604D\", \"E91AC974\", \"6F946DA2\",\r\n    \"7D160CF0\", \"72606B78\", \"C17B7257\", \"4E6CEB4E\", \"1BA9F219\", \"822D9F9A\", \"64C24DF6\", \"82C1ECCB\", \"DEC48F52\",\r\n    \"D1500CB6\", \"5C615E22\", \"CB7A1247\", \"EAC83D5E\", \"A4F2087E\", \"8B36D663\", \"60EC8B7D\", \"23E07770\", \"CFC3BCB6\",\r\n    \"332ADE50\", \"886741FC\", \"F2ECC125\", \"59C94057\", \"FD77D893\", \"F062680F\", \"3D759E10\", \"E03DC9C3\", \"043AB169\",\r\n    \"8CD70BCE\", \"637C48AF\", \"9F5A86F9\", \"C799B8ED\", \"96488FC2\", \"7A04F3E1\", \"352E9955\", \"8A467BFE\", \"4D1E7ADB\",\r\n    \"04B931C9\", \"788E6EA0\", \"E67267F5\", \"3B0145B6\", \"31CA7310\", \"D8249EEC\", \"E2D0C5D1\", \"31DC1298\", \"70F4055D\",\r\n    \"39D60297\", \"25D81F3B\", \"2BB385C9\", \"3D500890\", \"3A48350D\", \"CCB6120B\", \"6F89F2F9\", \"791783D6\", \"4FA4664E\",\r\n    \"16FEA67F\", \"EC629BBF\", \"A5014386\", \"6E221244\", \"A21075D9\", \"2F501F52\", \"959A12F4\", \"E7A64774\", \"BA060582\",\r\n    \"FAD0CA2F\", \"5AC9908F\", \"7059C853\", \"AE2F213E\", \"1C724F28\", \"B51305FC\", \"42108734\", \"298E5C9D\", \"68A1DD2B\",\r\n    \"223C8C36\", \"984B1BEF\", \"73161B54\", \"43204F20\", \"0AC40F25\", \"9A53ECA9\", \"CC200DD8\", \"B6123CC0\", \"2AE4EFAD\",\r\n    \"38C464C2\", \"D4CA75A4\", \"1E0F1559\", \"5330CF6E\", \"4BF2F32B\", \"A7E130FD\", \"519B7462\", \"6B919194\", \"6C963148\",\r\n    \"C82B32BB\", \"82030024\", \"1CFA2FA0\", \"15E45CE2\", \"FE584A91\", \"4332093F\", \"2E7B9117\", \"CD0F4B4D\", \"C34F792C\",\r\n    \"077AFAF5\", \"44136041\", \"EDC96297\", \"3E7FD864\", \"BAF6F6BA\", \"19C9FF6E\", \"7D157A58\", \"5825DFDE\", \"941A37E0\",\r\n    \"4818BABB\", \"3CBE9DC1\", \"F7F8D0CE\", \"75771DE9\", \"36B9CF69\", \"F68CF878\", \"9B1E1C75\", \"8BFB75AE\", \"39FF446D\",\r\n    \"85692875\", \"309DA59F\", \"3B49C509\", \"66CD636E\", \"7D286708\", \"69CD6A2E\", \"9FC266E3\", \"2B8F1988\", \"ADDBD3AF\",\r\n    \"4C8EA8E7\", \"65407C37\", \"A2EF9AA6\", \"5E10541B\", \"26CD9065\", \"FCEC6367\", \"C4ED1EF8\", \"09A9410F\", \"E24BC427\",\r\n    \"E29A5EDD\", \"F58F8C10\", \"E9CD2A63\", \"049FFDB7\", \"CBD2B4CC\", \"95356BB0\", \"19453535\", \"C4508CA2\", \"4309FD7E\",\r\n    \"53EA8DE9\", \"55D9F238\", \"210A7AEA\", \"AE02A6AB\", \"4ABDF123\", \"22F5256B\", \"D8DC2D8E\", \"B8A25D9D\", \"3B13600F\",\r\n    \"1B54BEDA\", \"808164B1\", \"A75CA457\", \"0068B861\", \"7E822EE1\", \"0335BE36\", \"C76FEF0E\", \"495DBCE8\", \"B70CAB9D\",\r\n    \"19445725\", \"E75A3B16\", \"627F5136\", \"E4137F41\", \"5AF821C1\", \"558BB5A6\", \"B85003E7\", \"B2E101C2\", \"10C101FC\",\r\n    \"32A3AA3D\", \"838C4690\", \"07D18800\", \"6C89D813\", \"BE7BA68D\", \"B096D0B9\", \"8001786A\", \"41026A58\", \"7ADC2D65\",\r\n    \"66C9FC5F\", \"E79BE068\", \"43B4BC3B\", \"9C203868\", \"EF2B0BE2\", \"9E1F6267\", \"78F76A0A\", \"DC04692D\", \"9C6500F3\",\r\n    \"CE348E12\", \"7D07E7EE\", \"93A40579\", \"83B78DE9\", \"2ED401C8\", \"3EB994DD\", \"3D6C2F3D\", \"553FD4DA\", \"E2F27231\",\r\n    \"809AD218\", \"0757306E\", \"989740B3\", \"7D6A2D71\", \"4F66622B\", \"2AFD45F7\", \"F687016B\", \"FA8AD0B3\", \"3B7E96F2\",\r\n    \"B6732508\", \"BF351D33\", \"801EE898\", \"5291851F\", \"78993F7E\", \"5177A95E\", \"0F432E84\", \"F3D5350C\", \"AE95B5E0\",\r\n    \"88E37A7B\", \"0ADCC451\", \"DF2E9F5B\", \"124A3FE8\", \"EF421E88\", \"858AD803\", \"AAC7FD11\", \"18C34C95\", \"4A2915BB\",\r\n    \"D1722F1A\", \"10C6360B\", \"D14AC42F\", \"3B5D0D66\", \"B8F1CD0D\", \"B468C613\", \"265D94FD\", \"31F28F03\", \"A8DBE3DD\",\r\n    \"6C16811B\", \"84C2A353\", \"EFA14DFF\", \"F914DC58\", \"246858C1\", \"A6244E68\", \"A4A782A4\", \"CCE276F9\", \"7904F936\",\r\n    \"742C1628\", \"6FDAD5D1\", \"6EB135B6\", \"3E8BBB60\", \"D347C3DF\", \"8183EF4E\", \"155E4713\", \"E82D7CF3\", \"22177EC5\",\r\n    \"1395C3B0\", \"2C633227\", \"B6C26847\", \"64147FFF\", \"9E012434\", \"D4D54D85\", \"3067D25F\", \"CDA949FD\", \"65A09982\",\r\n    \"0F7B0A12\", \"4714FDDD\", \"6635C1C5\", \"DBAC6554\", \"86E1558D\", \"E8B0113E\", \"6AB35EA6\", \"9E06008A\", \"A827F848\",\r\n    \"2E4A226E\", \"A0C2DCAB\", \"83D89830\", \"4ABF77E8\", \"D31B1042\", \"6E80B0F7\", \"5BFCAFB4\", \"03F6F6CE\", \"D0ED0B8A\",\r\n    \"FBEB99AF\", \"4B1B7DEF\", \"2ACB8C9C\", \"2C0FE9B1\", \"1B30FE94\", \"7E277559\", \"5F563EA0\", \"3200CDD8\", \"32B7E32A\",\r\n    \"DD43417D\", \"7D5C2B5B\", \"344643F9\", \"56E90A5F\", \"9DC40517\", \"F39E0DC7\", \"E0C7EBBF\", \"EB9AE161\", \"6478DAA3\",\r\n    \"0D7C3D4E\", \"F252E312\", \"BCE444B9\", \"2AACBCDB\", \"44E502AA\", \"F8CCF513\", \"6C3EF465\", \"906000DA\", \"8C41446A\",\r\n    \"992EB47B\", \"F1573608\", \"2197C153\", \"6AF14701\", \"911852C9\", \"FBA9538F\", \"8DEBDD8C\", \"4D2C26D1\", \"4F7C4522\",\r\n    \"B37B354F\", \"1EE2D92C\", \"AA952ED2\", \"BCDFDBF3\", \"8A043123\", \"3E232325\", \"B2B70B0D\", \"D2A6E5A6\", \"AAA192D4\",\r\n    \"2F7B5A6E\", \"2D9A16B1\", \"500B9889\", \"20C58D24\", \"E1B8C1BC\", \"FFC3BB81\", \"AC993839\", \"2BCE9702\", \"BD429ACC\",\r\n    \"08588715\", \"1002D574\", \"8FAACA38\", \"21AE04BC\", \"E1C200DD\", \"17072760\", \"AB4F12B3\", \"0220E53E\", \"30C03C0A\",\r\n    \"74DDDDC9\", \"5E71509D\", \"A261B3D2\", \"75F22283\", \"879E8C26\", \"FB4C9FE6\", \"7F745EF0\", \"280A27B6\", \"55F6D9E0\",\r\n    \"DB038AE1\", \"40B907F0\", \"A50F49F3\", \"3BD2275A\", \"6053602F\", \"2C546996\", \"30E06018\", \"9892367A\", \"6DA1FCF7\",\r\n    \"BA15AB48\", \"7B65CC3D\", \"E0A8A155\", \"1EE06716\", \"B5086B7B\", \"96E9F667\", \"3C19993C\", \"39E76F8F\", \"7A5DEDE2\",\r\n    \"62766632\", \"04A986AE\", \"953E9871\", \"BF5118F1\", \"40765DA0\", \"A79BF6F2\", \"4A5A51CC\", \"13FC31F4\", \"9DF9AB13\",\r\n    \"79076552\", \"43E97309\", \"FF18FD70\", \"D30A52A7\", \"88378B0F\", \"FB8FD412\", \"E6417027\", \"BAF195A7\", \"C5DCD5CD\",\r\n    \"580852DA\", \"3429986E\", \"95859146\", \"E838454A\", \"1B96C004\", \"5FF3B74D\", \"E803CF9C\", \"D91C5A75\", \"E130FC96\",\r\n    \"53A28FD0\", \"D158C194\", \"53A50385\", \"42BF11F5\", \"A8C206F5\", \"9827BB23\", \"96363AD9\", \"05C362A9\", \"0C8A29C4\",\r\n    \"6CDDCB78\", \"C51C7848\", \"500E585A\", \"7DE37864\", \"2957106E\", \"7CF9A0AB\", \"2DC39EE9\", \"6DDB3D2B\", \"6C423C98\",\r\n    \"650CE024\", \"181F69EB\", \"C6C5AD24\", \"9938D8C1\", \"F98980E3\", \"788E7DE8\", \"BF9E08BC\", \"B229BBE9\", \"A26EB92B\",\r\n    \"B32BD9AC\", \"127A67CA\", \"A376C062\", \"A22418D6\", \"089A42D0\", \"876757B3\", \"119D46DA\", \"4BD1A4A8\", \"51D149D4\",\r\n    \"5348AFEE\", \"87E6B8AF\", \"A191134A\", \"A789C0F8\", \"FE97E849\", \"6859BB5C\", \"841BB5DB\", \"D1EA4A06\", \"B975CFCA\",\r\n    \"B7E65F3F\", \"3EDDFC98\", \"F7F96715\", \"55142D20\", \"88057FBB\", \"BFA4D8D4\", \"533CBF5E\", \"AED6E43F\", \"1B0A83F1\",\r\n    \"AE67CCF0\", \"9C67C962\", \"142F0382\", \"C75F956A\", \"757CD939\", \"6C67691A\", \"B2B9C0A8\", \"174031E8\", \"1160E67B\",\r\n    \"443779D1\", \"11B3299A\", \"27560BE1\", \"86EC4732\", \"47EFF6B9\", \"4315A14C\", \"70A96B74\", \"7BBE7982\", \"86F2D3AE\",\r\n    \"217C7787\", \"7519C371\", \"182D452C\", \"E0185A62\", \"1ED1557A\", \"849F1010\", \"F8474049\", \"F1914086\", \"C19BAC85\",\r\n    \"A340E755\", \"44A73507\", \"F52B6E09\", \"B9937043\", \"3D9EF9F4\", \"6A6F6972\", \"AD1659E7\", \"7987252A\", \"4A0022C0\",\r\n    \"0E3168C9\", \"ABFB9EB5\", \"9D1E560E\", \"B1F4BA47\", \"7D993809\", \"1167F948\", \"E78BAA36\", \"4139ED77\", \"EF6A33D1\",\r\n    \"395AAFE9\", \"EB142D32\", \"AAF715E6\", \"4DC77E33\", \"D82A1596\", \"CA441C2B\", \"582EB04F\", \"39EA0A16\", \"C7D022DF\",\r\n    \"72EE825E\", \"ACE28FEF\", \"82967F6A\", \"01B81854\", \"3B0AB1A1\", \"9A27D844\", \"B63DD19C\", \"63036FC5\", \"FC051613\",\r\n    \"EA7E66EB\", \"A7BC0E30\", \"004B6F8A\", \"45CD80DE\", \"76631166\", \"78116769\", \"6CA2239F\", \"00C4AFDE\", \"75FE9D74\",\r\n    \"7248D6C0\", \"C5293013\", \"F88FCBBB\", \"528D833B\", \"4DFE6D59\", \"C8E4ACA6\", \"371162E7\", \"78AADCCB\", \"3F61BC3B\",\r\n    \"0927BF11\", \"CE739311\", \"2D061B1E\", \"7C82D0FA\", \"B8C52266\", \"68520BA8\", \"793660D8\", \"37337B3E\", \"2718BC8D\",\r\n    \"8A4DF5F5\", \"5753F130\", \"B9181DCE\", \"9B7DDC13\", \"48A02A1B\", \"31163787\", \"8AF902AA\", \"BD098A99\", \"C18447B7\",\r\n    \"3E2B642E\", \"54FC76A4\", \"EADC525A\", \"CD405695\", \"44E13850\", \"DB691951\", \"C3F7CF36\", \"03CFF145\", \"304C26AC\",\r\n    \"E28B9A3E\", \"49997AF9\", \"97D48BB6\", \"17533654\", \"16125513\", \"9382753B\", \"ECC4AB75\", \"AEF0E4A3\", \"E9E9869F\",\r\n    \"8BED86B3\", \"FB12E042\", \"6CFC90A6\", \"E667D955\", \"A4FA33B5\", \"F3207EB6\", \"A5CA44C1\", \"EF3CD4B0\", \"ADD40AC4\",\r\n    \"02218A17\", \"A2C2EAEF\", \"C71D8276\", \"F1F6EE43\", \"06A53DB2\", \"357CC25F\", \"967F1C3E\", \"B5937C41\", \"A6580857\",\r\n    \"3C799B6C\", \"54074DE7\", \"1E90C0A2\", \"1C6FB273\", \"9B78456A\", \"1FD05538\", \"733C3941\", \"F9527F4F\", \"756F08B1\",\r\n    \"8881BA01\", \"A975360D\", \"A98C82E2\", \"C5316E71\", \"B5505F48\", \"59A7E348\", \"1198DA00\", \"A9797612\", \"34B98139\",\r\n    \"6A895E81\", \"6EF53F4E\", \"D788AB48\", \"02DD8470\", \"D53A0971\", \"11BB305A\", \"41A61DF7\", \"57D2E616\", \"9D0BC340\",\r\n    \"4FEE4F80\"};\r\n\r\nconstexpr auto testNotInString = \"frobinate\"sv;\r\n\r\ntemplate <typename Container>\r\nvoid emplace_test_strings(Container& c) {\r\n    const auto startSize = c.size();\r\n    for (const auto& view : testStrings) {\r\n        if constexpr (is_same_v<typename Container::key_type, typename Container::value_type>) {\r\n            c.emplace(view);\r\n        } else {\r\n            c.emplace(view, view.size());\r\n        }\r\n    }\r\n\r\n    assert(c.size() == startSize + size(testStrings));\r\n}\r\n\r\ntemplate <typename StringLike>\r\nvoid assert_string(const StringLike& value, const string_view example) {\r\n    assert(value == example);\r\n}\r\n\r\ntemplate <typename StringLike>\r\nvoid assert_string(const pair<const StringLike, size_t>& value, const string_view example) {\r\n    assert(value.first == example);\r\n    assert(value.second == example.size());\r\n}\r\n\r\ntemplate <typename It>\r\nvoid assert_range_empty(const pair<It, It>& p) {\r\n    assert(p.first == p.second);\r\n}\r\n\r\ntemplate <typename Container>\r\nvoid assert_unique() {\r\n    Container cRaw;\r\n#if _HAS_CXX23\r\n    Container cRawToErase;\r\n    Container cRawToExtract;\r\n    Container cRawExtractTarget;\r\n#endif // _HAS_CXX23\r\n\r\n    emplace_test_strings(cRaw);\r\n#if _HAS_CXX23\r\n    emplace_test_strings(cRawToErase);\r\n    emplace_test_strings(cRawToExtract);\r\n#endif // _HAS_CXX23\r\n\r\n    // GH-5207 \"<xhash>: Some member functions of transparent hash containers fail to work with initializer lists\"\r\n    typename Container::key_type testNotInStringListSrc(testNotInString.data(), testNotInString.size());\r\n\r\n    // Test that transparent containers pass through the string_view; non-transparent containers\r\n    // are only passed in here with string_view value_type, so they also don't allocate.\r\n    [[maybe_unused]] prohibit_allocations prohibitor(true);\r\n    const Container& c = cRaw;\r\n    assert(c.find(testNotInString) == c.end());\r\n    assert(c.contains(testNotInString) == false);\r\n    assert(c.count(testNotInString) == 0);\r\n    assert_range_empty(c.equal_range(testNotInString));\r\n\r\n    assert(c.find({testNotInStringListSrc}) == c.end());\r\n    assert(c.contains({testNotInStringListSrc}) == false);\r\n    assert(c.count({testNotInStringListSrc}) == 0);\r\n    assert_range_empty(c.equal_range({testNotInStringListSrc}));\r\n\r\n    // Test non-const overloads.\r\n    assert(cRaw.find(testNotInString) == cRaw.end());\r\n    assert_range_empty(cRaw.equal_range(testNotInString));\r\n\r\n    assert(cRaw.find({testNotInStringListSrc}) == cRaw.end());\r\n    assert_range_empty(cRaw.equal_range({testNotInStringListSrc}));\r\n\r\n    for (const auto& example : testStrings) {\r\n        const auto target = c.find(example);\r\n        assert(target != c.end());\r\n        assert_string(*target, example);\r\n        assert(1 == c.count(example));\r\n        assert(c.contains(example));\r\n        const auto rangeTarget = c.equal_range(example);\r\n        assert(rangeTarget.first == target);\r\n        assert(next(rangeTarget.first) == rangeTarget.second);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    assert(cRawToErase.erase(testNotInString) == 0);\r\n    for (const auto& example : testStrings) {\r\n        assert(cRawToErase.erase(example) == 1);\r\n    }\r\n    assert(cRawToErase.empty());\r\n\r\n    assert(!cRawToExtract.extract(testNotInString));\r\n    for (const auto& example : testStrings) {\r\n        auto n = cRawToExtract.extract(example);\r\n        [[maybe_unused]] prohibit_allocations unprohibitor(false);\r\n        cRawExtractTarget.insert(move(n));\r\n    }\r\n    assert(cRawToExtract.empty());\r\n    assert(cRawExtractTarget.size() == size(testStrings));\r\n#endif // _HAS_CXX23\r\n}\r\n\r\ntemplate <typename Container>\r\nvoid assert_multi() {\r\n    Container cRaw;\r\n#if _HAS_CXX23\r\n    Container cRawToErase;\r\n    Container cRawToExtract;\r\n    Container cRawExtractTarget;\r\n#endif // _HAS_CXX23\r\n\r\n    const int dupes = 5;\r\n    for (int dupe = 0; dupe < dupes; ++dupe) {\r\n        emplace_test_strings(cRaw);\r\n#if _HAS_CXX23\r\n        emplace_test_strings(cRawToErase);\r\n        emplace_test_strings(cRawToExtract);\r\n#endif // _HAS_CXX23\r\n    }\r\n\r\n    // GH-5207 \"<xhash>: Some member functions of transparent hash containers fail to work with initializer lists\"\r\n    typename Container::key_type testNotInStringListSrc(testNotInString.data(), testNotInString.size());\r\n\r\n    // Test that transparent containers pass through the string_view; non-transparent containers\r\n    // are only passed in here with string_view value_type, so they also don't allocate.\r\n    [[maybe_unused]] prohibit_allocations prohibitor(true);\r\n    const Container& c = cRaw;\r\n    assert(c.find(testNotInString) == c.end());\r\n    assert(c.contains(testNotInString) == false);\r\n    assert(c.count(testNotInString) == 0);\r\n    assert_range_empty(c.equal_range(testNotInString));\r\n\r\n    assert(c.find({testNotInStringListSrc}) == c.end());\r\n    assert(c.contains({testNotInStringListSrc}) == false);\r\n    assert(c.count({testNotInStringListSrc}) == 0);\r\n    assert_range_empty(c.equal_range({testNotInStringListSrc}));\r\n\r\n    // Test non-const overloads.\r\n    assert(cRaw.find(testNotInString) == cRaw.end());\r\n    assert_range_empty(cRaw.equal_range(testNotInString));\r\n\r\n    assert(cRaw.find({testNotInStringListSrc}) == cRaw.end());\r\n    assert_range_empty(cRaw.equal_range({testNotInStringListSrc}));\r\n\r\n    for (const auto& example : testStrings) {\r\n        const auto target = c.find(example);\r\n        assert(target != c.end());\r\n        auto last = target;\r\n        for (int dupe = 0; dupe < dupes; ++dupe, ++last) {\r\n            assert_string(*last, example);\r\n        }\r\n\r\n        assert(dupes == c.count(example));\r\n        assert(c.contains(example));\r\n        const auto rangeTarget = c.equal_range(example);\r\n        assert(rangeTarget.first == target);\r\n        assert(rangeTarget.second == last);\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    assert(cRawToErase.erase(testNotInString) == 0);\r\n    for (const auto& example : testStrings) {\r\n        assert(cRawToErase.erase(example) == dupes);\r\n    }\r\n    assert(cRawToErase.empty());\r\n\r\n    assert(!cRawToExtract.extract(testNotInString));\r\n    for (const auto& example : testStrings) {\r\n        auto n = cRawToExtract.extract(example);\r\n        [[maybe_unused]] prohibit_allocations unprohibitor(false);\r\n        cRawExtractTarget.insert(move(n));\r\n    }\r\n    assert(cRawToExtract.size() == size(testStrings) * (dupes - 1));\r\n    assert(cRawExtractTarget.size() == size(testStrings));\r\n#endif // _HAS_CXX23\r\n}\r\n\r\n// Also test P0809 \"Comparing unordered containers\"\r\nstruct offset_hash {\r\n    size_t offset;\r\n\r\n    size_t operator()(const size_t target) const noexcept {\r\n        return target + offset;\r\n    }\r\n};\r\n\r\nvoid assert_P0809() {\r\n    unordered_set<size_t, offset_hash> a{8, offset_hash{0}};\r\n    unordered_set<size_t, offset_hash> b{8, offset_hash{10000000}};\r\n    static constexpr size_t testData[] = {1, 10, 1000, 10000, 100000, 1000000, 1729, 42};\r\n    a.insert(begin(testData), end(testData));\r\n    b.insert(begin(testData), end(testData));\r\n    assert(a == b);\r\n\r\n    unordered_multiset<size_t, offset_hash> c{8, offset_hash{0}};\r\n    unordered_multiset<size_t, offset_hash> d{8, offset_hash{10000000}};\r\n    for (int i = 0; i < 5; ++i) {\r\n        c.insert(begin(testData), end(testData));\r\n        d.insert(begin(testData), end(testData));\r\n    }\r\n\r\n    assert(c == d);\r\n}\r\n\r\nint main() {\r\n    assert_unique<unordered_set<string_view, hash<string_view>, equal_to<>, test_allocator<string_view>>>();\r\n    assert_unique<unordered_map<string_view, size_t, hash<string_view>, equal_to<>,\r\n        test_allocator<pair<const string_view, size_t>>>>();\r\n\r\n    assert_unique<unordered_set<test_str, transparent_string_hasher, equal_to<>, test_allocator<test_str>>>();\r\n    assert_unique<unordered_map<test_str, size_t, transparent_string_hasher, equal_to<>,\r\n        test_allocator<pair<const test_str, size_t>>>>();\r\n    assert_unique<\r\n        unordered_set<test_str, transparent_string_hasher, transparent_string_equal, test_allocator<test_str>>>();\r\n    assert_unique<unordered_map<test_str, size_t, transparent_string_hasher, transparent_string_equal,\r\n        test_allocator<pair<const test_str, size_t>>>>();\r\n\r\n    assert_multi<unordered_multiset<string_view, hash<string_view>, equal_to<>, test_allocator<string_view>>>();\r\n    assert_multi<unordered_multimap<string_view, size_t, hash<string_view>, equal_to<>,\r\n        test_allocator<pair<const string_view, size_t>>>>();\r\n    assert_multi<unordered_multiset<test_str, transparent_string_hasher, equal_to<>, test_allocator<test_str>>>();\r\n    assert_multi<unordered_multimap<test_str, size_t, transparent_string_hasher, equal_to<>,\r\n        test_allocator<pair<const test_str, size_t>>>>();\r\n    assert_multi<\r\n        unordered_multiset<test_str, transparent_string_hasher, transparent_string_equal, test_allocator<test_str>>>();\r\n    assert_multi<unordered_multimap<test_str, size_t, transparent_string_hasher, transparent_string_equal,\r\n        test_allocator<pair<const test_str, size_t>>>>();\r\n\r\n    assert_P0809();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0943R6_stdatomic_h/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0943R6_stdatomic_h/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <__msvc_cxx_stdatomic.hpp>\r\n\r\nstatic_assert(ATOMIC_BOOL_LOCK_FREE == 2);\r\nstatic_assert(ATOMIC_CHAR_LOCK_FREE == 2);\r\nstatic_assert(ATOMIC_CHAR16_T_LOCK_FREE == 2);\r\nstatic_assert(ATOMIC_CHAR32_T_LOCK_FREE == 2);\r\nstatic_assert(ATOMIC_WCHAR_T_LOCK_FREE == 2);\r\nstatic_assert(ATOMIC_SHORT_LOCK_FREE == 2);\r\nstatic_assert(ATOMIC_INT_LOCK_FREE == 2);\r\nstatic_assert(ATOMIC_LONG_LOCK_FREE == 2);\r\nstatic_assert(ATOMIC_LLONG_LOCK_FREE == 2);\r\nstatic_assert(ATOMIC_POINTER_LOCK_FREE == 2);\r\n\r\n#include <atomic>\r\n#include <type_traits>\r\n\r\nusing std::is_same_v;\r\n\r\nstatic_assert(is_same_v<_Atomic(int), std::atomic<int>>);\r\nstatic_assert(is_same_v<_Atomic(unsigned int), std::atomic<unsigned int>>);\r\nstatic_assert(is_same_v<_Atomic(float), std::atomic<float>>);\r\nstatic_assert(is_same_v<_Atomic(char), std::atomic<char>>);\r\n\r\nstatic_assert(is_same_v<std::memory_order, memory_order>);\r\nstatic_assert(std::memory_order_relaxed == memory_order_relaxed);\r\nstatic_assert(std::memory_order_consume == memory_order_consume);\r\nstatic_assert(std::memory_order_acquire == memory_order_acquire);\r\nstatic_assert(std::memory_order_release == memory_order_release);\r\nstatic_assert(std::memory_order_acq_rel == memory_order_acq_rel);\r\nstatic_assert(std::memory_order_seq_cst == memory_order_seq_cst);\r\n\r\nstatic_assert(is_same_v<std::atomic_flag, atomic_flag>);\r\n\r\nstatic_assert(is_same_v<std::atomic_bool, atomic_bool>);\r\nstatic_assert(is_same_v<std::atomic_char, atomic_char>);\r\nstatic_assert(is_same_v<std::atomic_schar, atomic_schar>);\r\nstatic_assert(is_same_v<std::atomic_uchar, atomic_uchar>);\r\nstatic_assert(is_same_v<std::atomic_short, atomic_short>);\r\nstatic_assert(is_same_v<std::atomic_ushort, atomic_ushort>);\r\nstatic_assert(is_same_v<std::atomic_int, atomic_int>);\r\nstatic_assert(is_same_v<std::atomic_uint, atomic_uint>);\r\nstatic_assert(is_same_v<std::atomic_long, atomic_long>);\r\nstatic_assert(is_same_v<std::atomic_ulong, atomic_ulong>);\r\nstatic_assert(is_same_v<std::atomic_llong, atomic_llong>);\r\nstatic_assert(is_same_v<std::atomic_ullong, atomic_ullong>);\r\n\r\n#ifdef __cpp_lib_char8_t\r\nstatic_assert(is_same_v<std::atomic_char8_t, atomic_char8_t>);\r\n#endif // __cpp_lib_char8_t\r\n\r\nstatic_assert(is_same_v<std::atomic_char16_t, atomic_char16_t>);\r\nstatic_assert(is_same_v<std::atomic_char32_t, atomic_char32_t>);\r\nstatic_assert(is_same_v<std::atomic_wchar_t, atomic_wchar_t>);\r\nstatic_assert(is_same_v<std::atomic_int8_t, atomic_int8_t>);\r\nstatic_assert(is_same_v<std::atomic_uint8_t, atomic_uint8_t>);\r\nstatic_assert(is_same_v<std::atomic_int16_t, atomic_int16_t>);\r\nstatic_assert(is_same_v<std::atomic_uint16_t, atomic_uint16_t>);\r\nstatic_assert(is_same_v<std::atomic_int32_t, atomic_int32_t>);\r\nstatic_assert(is_same_v<std::atomic_uint32_t, atomic_uint32_t>);\r\nstatic_assert(is_same_v<std::atomic_int64_t, atomic_int64_t>);\r\nstatic_assert(is_same_v<std::atomic_uint64_t, atomic_uint64_t>);\r\nstatic_assert(is_same_v<std::atomic_int_least8_t, atomic_int_least8_t>);\r\nstatic_assert(is_same_v<std::atomic_uint_least8_t, atomic_uint_least8_t>);\r\nstatic_assert(is_same_v<std::atomic_int_least16_t, atomic_int_least16_t>);\r\nstatic_assert(is_same_v<std::atomic_uint_least16_t, atomic_uint_least16_t>);\r\nstatic_assert(is_same_v<std::atomic_int_least32_t, atomic_int_least32_t>);\r\nstatic_assert(is_same_v<std::atomic_uint_least32_t, atomic_uint_least32_t>);\r\nstatic_assert(is_same_v<std::atomic_int_least64_t, atomic_int_least64_t>);\r\nstatic_assert(is_same_v<std::atomic_uint_least64_t, atomic_uint_least64_t>);\r\nstatic_assert(is_same_v<std::atomic_int_fast8_t, atomic_int_fast8_t>);\r\nstatic_assert(is_same_v<std::atomic_uint_fast8_t, atomic_uint_fast8_t>);\r\nstatic_assert(is_same_v<std::atomic_int_fast16_t, atomic_int_fast16_t>);\r\nstatic_assert(is_same_v<std::atomic_uint_fast16_t, atomic_uint_fast16_t>);\r\nstatic_assert(is_same_v<std::atomic_int_fast32_t, atomic_int_fast32_t>);\r\nstatic_assert(is_same_v<std::atomic_uint_fast32_t, atomic_uint_fast32_t>);\r\nstatic_assert(is_same_v<std::atomic_int_fast64_t, atomic_int_fast64_t>);\r\nstatic_assert(is_same_v<std::atomic_uint_fast64_t, atomic_uint_fast64_t>);\r\nstatic_assert(is_same_v<std::atomic_intptr_t, atomic_intptr_t>);\r\nstatic_assert(is_same_v<std::atomic_uintptr_t, atomic_uintptr_t>);\r\nstatic_assert(is_same_v<std::atomic_size_t, atomic_size_t>);\r\nstatic_assert(is_same_v<std::atomic_ptrdiff_t, atomic_ptrdiff_t>);\r\nstatic_assert(is_same_v<std::atomic_intmax_t, atomic_intmax_t>);\r\nstatic_assert(is_same_v<std::atomic_uintmax_t, atomic_uintmax_t>);\r\n\r\nnamespace test {\r\n    using ::atomic_compare_exchange_strong;\r\n    using ::atomic_compare_exchange_strong_explicit;\r\n    using ::atomic_compare_exchange_weak;\r\n    using ::atomic_compare_exchange_weak_explicit;\r\n    using ::atomic_exchange;\r\n    using ::atomic_exchange_explicit;\r\n    using ::atomic_fetch_add;\r\n    using ::atomic_fetch_add_explicit;\r\n    using ::atomic_fetch_and;\r\n    using ::atomic_fetch_and_explicit;\r\n    using ::atomic_fetch_or;\r\n    using ::atomic_fetch_or_explicit;\r\n    using ::atomic_fetch_sub;\r\n    using ::atomic_fetch_sub_explicit;\r\n    using ::atomic_fetch_xor;\r\n    using ::atomic_fetch_xor_explicit;\r\n    using ::atomic_flag_clear;\r\n    using ::atomic_flag_clear_explicit;\r\n    using ::atomic_flag_test_and_set;\r\n    using ::atomic_flag_test_and_set_explicit;\r\n    using ::atomic_is_lock_free;\r\n    using ::atomic_load;\r\n    using ::atomic_load_explicit;\r\n    using ::atomic_store;\r\n    using ::atomic_store_explicit;\r\n} // namespace test\r\n\r\nstatic_assert(std::atomic_thread_fence == atomic_thread_fence);\r\nstatic_assert(std::atomic_signal_fence == atomic_signal_fence);\r\n"
  },
  {
    "path": "tests/std/tests/P0952R2_new_generate_canonical/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0952R2_new_generate_canonical/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <__msvc_int128.hpp>\r\n#include <cassert>\r\n#include <cmath>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <random>\r\n\r\nusing namespace std;\r\n\r\nvoid test_lwg2524() {\r\n    mt19937_64 mt2(1);\r\n    mt2.discard(517517);\r\n    assert((generate_canonical<float, 32>) (mt2) < 1.0f);\r\n    assert((generate_canonical<float, 32>) (mt2) < 1.0f);\r\n    assert((generate_canonical<float, 32>) (mt2) < 1.0f);\r\n}\r\n\r\ntemplate <class Real, size_t Bits, class Engine>\r\nReal generate_with_ibe() {\r\n    independent_bits_engine<Engine, Bits, uint64_t> ibe;\r\n    return generate_canonical<Real, 64>(ibe);\r\n}\r\n\r\nint main() {\r\n    {\r\n        // edge case, Bits == 0\r\n        using Engine = ranlux24;\r\n        Engine eng;\r\n        assert((generate_canonical<double, 0, Engine>) (eng) == 0.0);\r\n        assert(eng() == Engine{}());\r\n    }\r\n\r\n    {\r\n        // float, URBG range is a power of two\r\n        using Engine                = ranlux24;\r\n        constexpr uint32_t values[] = {0xE57B2C, 0xF91555, 0xD9F2DE};\r\n        Engine eng;\r\n        for (const auto& value : values) {\r\n            assert(eng() == value);\r\n        }\r\n\r\n        const auto expected1 = ldexpf(0xE57B2C >> (1 * 24 - 24), -24);\r\n        const auto expected2 = ldexpf(0x91555'57B2C >> (2 * 20 - 24), -24);\r\n        const auto expected3 = ldexpf(0xDE'55'2C >> (3 * 8 - 24), -24);\r\n\r\n        assert((generate_with_ibe<float, 24, Engine>) () == expected1);\r\n        assert((generate_with_ibe<float, 20, Engine>) () == expected2);\r\n        assert((generate_with_ibe<float, 8, Engine>) () == expected3);\r\n    }\r\n\r\n    {\r\n        // double, URBG range is a power of two\r\n        using Engine                = mt19937_64;\r\n        constexpr uint64_t values[] = {0xC96D191C'F6'F6AEA6, 0x401F7AC7'8B'C80F1C, 0xB5EE8CB6AB'E457F8};\r\n        Engine eng;\r\n        for (const auto& value : values) {\r\n            assert(eng() == value);\r\n        }\r\n\r\n        const auto expected1 = ldexp(0xC96D191C'F6F'6AEA6 >> (1 * 64 - 53), -53);\r\n        const auto expected2 = ldexp(0x8B'C80F1C'F6'F6AEA6 >> (2 * 32 - 53), -53);\r\n        const auto expected3 =\r\n            ldexp(static_cast<uint64_t>(_Unsigned128{0x57F8'C80F1C'F6AEA6, 0xE4} >> (3 * 24 - 53)), -53);\r\n\r\n\r\n        assert((generate_with_ibe<double, 64, Engine>) () == expected1);\r\n        assert((generate_with_ibe<double, 32, Engine>) () == expected2);\r\n        assert((generate_with_ibe<double, 24, Engine>) () == expected3);\r\n    }\r\n\r\n    {\r\n        // $k \\in \\{1,2\\}$, URBG range is NOT a power of two\r\n        using Engine                = minstd_rand;\r\n        constexpr uint32_t values[] = {48271 - 1, 182605794 - 1}; // minstd_rand::min() == 1\r\n        Engine eng;\r\n        for (const auto& value : values) {\r\n            assert(eng() - Engine::min() == value);\r\n        }\r\n\r\n        constexpr uint64_t range = Engine::max() - Engine::min() + 1;\r\n        constexpr auto x1        = range / (1 << 24);\r\n        constexpr auto x2        = (range * range) / (1ULL << 53);\r\n        const float expected1    = ldexpf(static_cast<float>(values[0] / x1), -24);\r\n        const double expected2   = ldexp((values[0] + range * values[1]) / x2, -53);\r\n\r\n        // $k$ == 1\r\n        eng.seed();\r\n        assert((generate_canonical<float, 32, Engine>) (eng) == expected1);\r\n\r\n        // $k$ == 2\r\n        eng.seed();\r\n        assert((generate_canonical<double, 64, Engine>) (eng) == expected2);\r\n    }\r\n\r\n    {\r\n        // $k = 4, URBG range is NOT a power of two, 128-bit accumulator needed\r\n\r\n        // ZX81 generator, R = 65537, https://oeis.org/A357907\r\n        using Engine                = linear_congruential_engine<uint32_t, 75, 74, 65537>;\r\n        constexpr uint32_t values[] = {149, 11249, 57305, 38044};\r\n        Engine eng;\r\n        for (const auto& value : values) {\r\n            assert(eng() - Engine::min() == value);\r\n        }\r\n\r\n        constexpr _Unsigned128 range = Engine::max() - Engine::min() + 1;\r\n        constexpr auto x             = static_cast<uint64_t>((range * range * range * range) / (1ULL << 53));\r\n        const auto expected          = ldexp(\r\n            static_cast<uint64_t>((values[0] + range * (values[1] + range * (values[2] + range * values[3]))) / x),\r\n            -53);\r\n\r\n        eng.seed();\r\n        assert((generate_canonical<double, 64, Engine>) (eng) == expected);\r\n    }\r\n\r\n    test_lwg2524();\r\n\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0966R1_string_reserve_should_not_shrink/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0966R1_string_reserve_should_not_shrink/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_CXX20_STRING_RESERVE_WITHOUT_ARGUMENT_DEPRECATION_WARNING\r\n\r\n#include <cassert>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    // N4830 [string.capacity]/9:\r\n    // \"constexpr void reserve(size_type res_arg);\r\n    // Effects: A directive that informs a basic_string of a planned change in size, so that the storage\r\n    // allocation can be managed accordingly. After reserve(), capacity() is greater or equal to the\r\n    // argument of reserve if reallocation happens; and equal to the previous value of capacity() otherwise.\r\n    // Reallocation happens at this point if and only if the current capacity is less than the argument of reserve().\"\r\n\r\n    // [depr.string.capacity]/2:\r\n    // \"void reserve();\r\n    // Effects: After this call, capacity() has an unspecified value greater than or equal to size().\r\n    // [Note: This is a non-binding shrink to fit request. -end note]\"\r\n\r\n    // We've preserved our implementation's pre-C++20 behavior for reserve() without an argument,\r\n    // performing a shrink to fit for empty strings in large mode (i.e. owning dynamically allocated memory).\r\n\r\n    // Note that the exact values of capacity() are implementation-specific.\r\n\r\n    const char* const large = \"This is a very large string. Cute fluffy kittens. Meow! Purr!\";\r\n\r\n    string s(large);\r\n    s.append(1000, '-');\r\n    s.erase(55);\r\n\r\n    assert(s.size() == 55);\r\n    assert(s.capacity() == 1071);\r\n    s.reserve(55); // reserve(res_arg) won't shrink from large to less-large\r\n    assert(s.size() == 55);\r\n    assert(s.capacity() == 1071);\r\n    s.reserve(); // reserve() won't shrink from large to less-large\r\n    assert(s.size() == 55);\r\n    assert(s.capacity() == 1071);\r\n\r\n    s.erase(4);\r\n\r\n    assert(s.size() == 4);\r\n    assert(s.capacity() == 1071);\r\n#if _HAS_CXX20\r\n    s.reserve(4); // reserve(res_arg) won't shrink from large to small in C++20\r\n    assert(s.size() == 4);\r\n    assert(s.capacity() == 1071);\r\n#endif // _HAS_CXX20\r\n    s.reserve(); // reserve() won't shrink from large to small\r\n    assert(s.size() == 4);\r\n    assert(s.capacity() == 1071);\r\n\r\n    s.clear();\r\n\r\n    assert(s.size() == 0);\r\n    assert(s.capacity() == 1071);\r\n#if _HAS_CXX20\r\n    s.reserve(0); // reserve(res_arg) won't shrink from large to empty in C++20\r\n    assert(s.size() == 0);\r\n    assert(s.capacity() == 1071);\r\n#endif // _HAS_CXX20\r\n    s.reserve(); // reserve() WILL shrink from large to empty\r\n    assert(s.size() == 0);\r\n    assert(s.capacity() == 15);\r\n\r\n#if !_HAS_CXX20\r\n    s.assign(large);\r\n    s.append(1000, '-');\r\n    s.erase(4);\r\n\r\n    assert(s.size() == 4);\r\n    assert(s.capacity() == 1071);\r\n    s.reserve(4); // reserve(res_arg) WILL shrink from large to small in our pre-C++20 mode\r\n    assert(s.size() == 4);\r\n    assert(s.capacity() == 15);\r\n\r\n    s.assign(large);\r\n    s.append(1000, '-');\r\n    s.clear();\r\n\r\n    assert(s.size() == 0);\r\n    assert(s.capacity() == 1071);\r\n    s.reserve(0); // reserve(res_arg) WILL shrink from large to empty in our pre-C++20 mode\r\n    assert(s.size() == 0);\r\n    assert(s.capacity() == 15);\r\n#endif // !_HAS_CXX20\r\n\r\n    s.assign(\"small\");\r\n\r\n    assert(s.size() == 5);\r\n    assert(s.capacity() == 15);\r\n    s.reserve(5); // reserve(res_arg) won't shrink when small\r\n    assert(s.size() == 5);\r\n    assert(s.capacity() == 15);\r\n    s.reserve(); // reserve() won't shrink when small\r\n    assert(s.size() == 5);\r\n    assert(s.capacity() == 15);\r\n\r\n    s.clear();\r\n\r\n    assert(s.size() == 0);\r\n    assert(s.capacity() == 15);\r\n    s.reserve(0); // reserve(res_arg) won't shrink when small and empty\r\n    assert(s.size() == 0);\r\n    assert(s.capacity() == 15);\r\n    s.reserve(); // reserve() won't shrink when small and empty\r\n    assert(s.size() == 0);\r\n    assert(s.capacity() == 15);\r\n\r\n    // Test reserve(res_arg) with res_arg >= capacity():\r\n    s.assign(\"cat\");\r\n    assert(s.size() == 3);\r\n    assert(s.capacity() == 15);\r\n    s.reserve(15); // same capacity when small, no change\r\n    assert(s.size() == 3);\r\n    assert(s.capacity() == 15);\r\n    s.reserve(16); // increase capacity from small to large\r\n    assert(s.size() == 3);\r\n    assert(s.capacity() == 31);\r\n    s.reserve(31); // same capacity when large, no change\r\n    assert(s.size() == 3);\r\n    assert(s.capacity() == 31);\r\n    s.reserve(1000); // increase capacity \"exactly\" (with a bit of rounding)\r\n    assert(s.size() == 3);\r\n    assert(s.capacity() == 1007);\r\n    s.reserve(1008); // increase capacity geometrically\r\n    assert(s.size() == 3);\r\n    assert(s.capacity() == 1510);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P0980R1_constexpr_strings/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P0980R1_constexpr_strings/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma warning(disable : 4389) // signed/unsigned mismatch in arithmetic\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wsign-compare\"\r\n#endif // __clang__\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <iterator>\r\n#include <memory>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#if _HAS_CXX23\r\n#include <ranges> // for integer-class types in test_gh_2524_all()\r\n#endif // _HAS_CXX23\r\n\r\nusing namespace std;\r\n\r\nconstexpr auto literal_input     = \"Hello fluffy kittens\";\r\nconstexpr auto literal_input_u16 = u\"Hello fluffy kittens\";\r\nconstexpr auto literal_input_u32 = U\"Hello fluffy kittens\";\r\nconstexpr auto literal_input_w   = L\"Hello fluffy kittens\";\r\n\r\nconstexpr auto view_input     = \"Hello fluffy kittens\"sv;\r\nconstexpr auto view_input_u16 = u\"Hello fluffy kittens\"sv;\r\nconstexpr auto view_input_u32 = U\"Hello fluffy kittens\"sv;\r\nconstexpr auto view_input_w   = L\"Hello fluffy kittens\"sv;\r\n\r\n#ifdef __cpp_char8_t\r\nconstexpr auto literal_input_u8 = u8\"Hello fluffy kittens\";\r\nconstexpr auto view_input_u8    = u8\"Hello fluffy kittens\"sv;\r\n#endif // __cpp_char8_t\r\n\r\ntemplate <class CharType>\r\nconstexpr auto get_literal_input() {\r\n    if constexpr (is_same_v<CharType, char>) {\r\n        return literal_input;\r\n#ifdef __cpp_char8_t\r\n    } else if constexpr (is_same_v<CharType, char8_t>) {\r\n        return literal_input_u8;\r\n#endif // __cpp_char8_t\r\n    } else if constexpr (is_same_v<CharType, char16_t>) {\r\n        return literal_input_u16;\r\n    } else if constexpr (is_same_v<CharType, char32_t>) {\r\n        return literal_input_u32;\r\n    } else {\r\n        return literal_input_w;\r\n    }\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr auto get_view_input() {\r\n    if constexpr (is_same_v<CharType, char>) {\r\n        return view_input;\r\n#ifdef __cpp_char8_t\r\n    } else if constexpr (is_same_v<CharType, char8_t>) {\r\n        return view_input_u8;\r\n#endif // __cpp_char8_t\r\n    } else if constexpr (is_same_v<CharType, char16_t>) {\r\n        return view_input_u16;\r\n    } else if constexpr (is_same_v<CharType, char32_t>) {\r\n        return view_input_u32;\r\n    } else {\r\n        return view_input_w;\r\n    }\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr auto get_cat() {\r\n    if constexpr (is_same_v<CharType, char>) {\r\n        return \"kitten\";\r\n#ifdef __cpp_char8_t\r\n    } else if constexpr (is_same_v<CharType, char8_t>) {\r\n        return u8\"kitten\";\r\n#endif // __cpp_char8_t\r\n    } else if constexpr (is_same_v<CharType, char16_t>) {\r\n        return u\"kitten\";\r\n    } else if constexpr (is_same_v<CharType, char32_t>) {\r\n        return U\"kitten\";\r\n    } else {\r\n        return L\"kitten\";\r\n    }\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr auto get_cat_view() {\r\n    return basic_string_view<CharType>{get_cat<CharType>()};\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr auto get_dog() {\r\n    if constexpr (is_same_v<CharType, char>) {\r\n        return \"dog\";\r\n#ifdef __cpp_char8_t\r\n    } else if constexpr (is_same_v<CharType, char8_t>) {\r\n        return u8\"dog\";\r\n#endif // __cpp_char8_t\r\n    } else if constexpr (is_same_v<CharType, char16_t>) {\r\n        return u\"dog\";\r\n    } else if constexpr (is_same_v<CharType, char32_t>) {\r\n        return U\"dog\";\r\n    } else {\r\n        return L\"dog\";\r\n    }\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr auto get_dog_view() {\r\n    return basic_string_view<CharType>{get_dog<CharType>()};\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr auto get_no_needle() {\r\n    if constexpr (is_same_v<CharType, char>) {\r\n        return \"vxz\";\r\n#ifdef __cpp_char8_t\r\n    } else if constexpr (is_same_v<CharType, char8_t>) {\r\n        return u8\"vxz\";\r\n#endif // __cpp_char8_t\r\n    } else if constexpr (is_same_v<CharType, char16_t>) {\r\n        return u\"vxz\";\r\n    } else if constexpr (is_same_v<CharType, char32_t>) {\r\n        return U\"vxz\";\r\n    } else {\r\n        return L\"vxz\";\r\n    }\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr auto get_cute_and_scratchy() {\r\n    if constexpr (is_same_v<CharType, char>) {\r\n        return \"cute and scratchy \";\r\n#ifdef __cpp_char8_t\r\n    } else if constexpr (is_same_v<CharType, char8_t>) {\r\n        return u8\"cute and scratchy \";\r\n#endif // __cpp_char8_t\r\n    } else if constexpr (is_same_v<CharType, char16_t>) {\r\n        return u\"cute and scratchy \";\r\n    } else if constexpr (is_same_v<CharType, char32_t>) {\r\n        return U\"cute and scratchy \";\r\n    } else {\r\n        return L\"cute and scratchy \";\r\n    }\r\n}\r\n\r\ntemplate <class CharType>\r\nstruct string_view_convertible {\r\n    constexpr operator basic_string_view<CharType>() const {\r\n        if constexpr (is_same_v<CharType, char>) {\r\n            return view_input;\r\n#ifdef __cpp_char8_t\r\n        } else if constexpr (is_same_v<CharType, char8_t>) {\r\n            return view_input_u8;\r\n#endif // __cpp_char8_t\r\n        } else if constexpr (is_same_v<CharType, char16_t>) {\r\n            return view_input_u16;\r\n        } else if constexpr (is_same_v<CharType, char32_t>) {\r\n            return view_input_u32;\r\n        } else {\r\n            return view_input_w;\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class CharType, class POCCA, class POCMA, class POCS, class EQUAL>\r\nclass MyAlloc {\r\nprivate:\r\n    size_t _id;\r\n\r\n    [[nodiscard]] constexpr size_t equal_id() const noexcept {\r\n        if constexpr (is_always_equal::value) {\r\n            return 10;\r\n        } else {\r\n            return _id;\r\n        }\r\n    }\r\n\r\npublic:\r\n    [[nodiscard]] constexpr size_t id() const noexcept {\r\n        return _id;\r\n    }\r\n\r\n    using value_type = CharType;\r\n\r\n    using propagate_on_container_copy_assignment = POCCA;\r\n    using propagate_on_container_move_assignment = POCMA;\r\n    using propagate_on_container_swap            = POCS;\r\n    using is_always_equal                        = EQUAL;\r\n\r\n    constexpr explicit MyAlloc(const size_t off) : _id(off) {}\r\n\r\n    template <class U>\r\n    constexpr MyAlloc(const MyAlloc<U, POCCA, POCMA, POCS, EQUAL>& other) noexcept : _id(other.id()) {}\r\n\r\n    template <class U>\r\n    [[nodiscard]] constexpr bool operator==(const MyAlloc<U, POCCA, POCMA, POCS, EQUAL>& other) const noexcept {\r\n        return equal_id() == other.equal_id();\r\n    }\r\n\r\n    [[nodiscard]] constexpr CharType* allocate(const size_t numElements) {\r\n        return allocator<CharType>{}.allocate(numElements + equal_id()) + equal_id();\r\n    }\r\n\r\n    constexpr void deallocate(CharType* const first, const size_t numElements) noexcept {\r\n        allocator<CharType>{}.deallocate(first - equal_id(), numElements + equal_id());\r\n    }\r\n};\r\n\r\ntemplate <class CharType>\r\nusing StationaryAlloc = MyAlloc<CharType, false_type, false_type, false_type, false_type>;\r\ntemplate <class CharType>\r\nusing CopyAlloc = MyAlloc<CharType, true_type, false_type, false_type, false_type>;\r\ntemplate <class CharType>\r\nusing CopyEqualAlloc = MyAlloc<CharType, true_type, false_type, false_type, true_type>;\r\ntemplate <class CharType>\r\nusing MoveAlloc = MyAlloc<CharType, false_type, true_type, false_type, false_type>;\r\ntemplate <class CharType>\r\nusing MoveEqualAlloc = MyAlloc<CharType, false_type, true_type, false_type, true_type>;\r\ntemplate <class CharType>\r\nusing SwapAlloc = MyAlloc<CharType, false_type, false_type, true_type, false_type>;\r\ntemplate <class CharType>\r\nusing SwapEqualAlloc = MyAlloc<CharType, false_type, false_type, true_type, true_type>;\r\n\r\ntemplate <class CharType>\r\nconstexpr bool test_interface() {\r\n    using str = basic_string<CharType>;\r\n\r\n    { // constructors\r\n        // range constructors\r\n        str literal_constructed{get_literal_input<CharType>()};\r\n        assert(ranges::equal(literal_constructed, get_view_input<CharType>()));\r\n\r\n        str view_constructed(get_view_input<CharType>());\r\n        assert(ranges::equal(view_constructed, literal_constructed));\r\n\r\n        str initializer_list_constructed({CharType{'m'}, CharType{'e'}, CharType{'o'}, CharType{'w'}});\r\n        assert(ranges::equal(initializer_list_constructed, \"meow\"sv));\r\n\r\n        // special member functions\r\n        str default_constructed;\r\n        assert(default_constructed.empty());\r\n\r\n        str copy_constructed(literal_constructed);\r\n        assert(ranges::equal(copy_constructed, literal_constructed));\r\n\r\n        str move_constructed(move(copy_constructed));\r\n        assert(ranges::equal(move_constructed, literal_constructed));\r\n        assert(copy_constructed.empty());\r\n\r\n        str copy_assigned(get_dog<CharType>());\r\n        copy_assigned = literal_constructed;\r\n        assert(ranges::equal(copy_assigned, literal_constructed));\r\n\r\n        str move_assigned(get_dog<CharType>());\r\n        move_assigned = move(copy_assigned);\r\n        assert(ranges::equal(move_assigned, literal_constructed));\r\n        assert(copy_assigned.empty());\r\n\r\n        // Other constructors\r\n        str size_value_constructed(5, CharType{'a'});\r\n        assert(ranges::equal(size_value_constructed, \"aaaaa\"sv));\r\n\r\n        str copy_start_constructed(literal_constructed, 2);\r\n        assert(ranges::equal(copy_start_constructed, \"llo fluffy kittens\"sv));\r\n\r\n        str copy_start_length_constructed(literal_constructed, 2, 3);\r\n        assert(ranges::equal(copy_start_length_constructed, \"llo\"sv));\r\n\r\n        str ptr_size_constructed(get_literal_input<CharType>(), 2);\r\n        assert(ranges::equal(ptr_size_constructed, \"He\"sv));\r\n\r\n        str iterator_constructed(literal_constructed.begin(), literal_constructed.end());\r\n        assert(ranges::equal(iterator_constructed, literal_constructed));\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        str conversion_constructed(convertible);\r\n        assert(ranges::equal(conversion_constructed, literal_constructed));\r\n\r\n        str conversion_start_length_constructed(convertible, 2, 3);\r\n        assert(ranges::equal(conversion_start_length_constructed, \"llo\"sv));\r\n    }\r\n\r\n    { // allocator constructors\r\n        allocator<CharType> alloc;\r\n\r\n        // range constructors\r\n        str literal_constructed{get_literal_input<CharType>(), alloc};\r\n        assert(ranges::equal(literal_constructed, get_view_input<CharType>()));\r\n\r\n        str view_constructed{get_view_input<CharType>(), alloc};\r\n        assert(ranges::equal(view_constructed, literal_constructed));\r\n\r\n        str initializer_list_constructed({CharType{'m'}, CharType{'e'}, CharType{'o'}, CharType{'w'}}, alloc);\r\n        assert(ranges::equal(initializer_list_constructed, \"meow\"sv));\r\n\r\n        // special member functions\r\n        str default_constructed{alloc};\r\n        assert(default_constructed.empty());\r\n\r\n        str copy_constructed{literal_constructed, alloc};\r\n        assert(ranges::equal(copy_constructed, literal_constructed));\r\n\r\n        str move_constructed{move(copy_constructed), alloc};\r\n        assert(ranges::equal(move_constructed, literal_constructed));\r\n        assert(copy_constructed.empty());\r\n\r\n        // Other constructors\r\n        str size_value_constructed(5, CharType{'a'}, alloc);\r\n        assert(ranges::equal(size_value_constructed, \"aaaaa\"sv));\r\n\r\n        str copy_start_constructed(literal_constructed, 2, alloc);\r\n        assert(ranges::equal(copy_start_constructed, \"llo fluffy kittens\"sv));\r\n\r\n        str copy_start_length_constructed(literal_constructed, 2, 3, alloc);\r\n        assert(ranges::equal(copy_start_length_constructed, \"llo\"sv));\r\n\r\n        str ptr_size_constructed(get_literal_input<CharType>(), 2, alloc);\r\n        assert(ranges::equal(ptr_size_constructed, \"He\"sv));\r\n\r\n        str iterator_constructed(literal_constructed.begin(), literal_constructed.end(), alloc);\r\n        assert(ranges::equal(iterator_constructed, literal_constructed));\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        str conversion_constructed(convertible, alloc);\r\n        assert(ranges::equal(conversion_constructed, literal_constructed));\r\n\r\n        str conversion_start_length_constructed(convertible, 2, 3, alloc);\r\n        assert(ranges::equal(conversion_start_length_constructed, \"llo\"sv));\r\n    }\r\n\r\n    { // assignment operator\r\n        str literal_constructed = get_literal_input<CharType>();\r\n\r\n        str copy_assigned;\r\n        copy_assigned = literal_constructed;\r\n        assert(ranges::equal(copy_assigned, literal_constructed));\r\n\r\n        str move_assigned;\r\n        move_assigned = move(copy_assigned);\r\n        assert(ranges::equal(move_assigned, literal_constructed));\r\n        assert(copy_assigned.empty());\r\n\r\n        str literal_assigned;\r\n        literal_assigned = get_literal_input<CharType>();\r\n        assert(ranges::equal(literal_assigned, literal_constructed));\r\n\r\n        str char_assigned;\r\n        char_assigned = CharType{'!'};\r\n        assert(ranges::equal(char_assigned, \"!\"sv));\r\n\r\n        str initializer_list_assigned;\r\n        initializer_list_assigned = {CharType{'m'}, CharType{'e'}, CharType{'o'}, CharType{'w'}};\r\n        assert(ranges::equal(initializer_list_assigned, \"meow\"sv));\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        str conversion_assigned;\r\n        conversion_assigned = convertible;\r\n        assert(ranges::equal(conversion_assigned, literal_constructed));\r\n    }\r\n\r\n    { // assign\r\n        str literal_constructed = get_literal_input<CharType>();\r\n\r\n        str assign_size_char;\r\n        assign_size_char.assign(5, CharType{'a'});\r\n        assert(ranges::equal(assign_size_char, \"aaaaa\"sv));\r\n\r\n        str assign_str;\r\n        assign_str.assign(literal_constructed);\r\n        assert(ranges::equal(assign_str, literal_constructed));\r\n\r\n        str assign_str_pos;\r\n        assign_str_pos.assign(literal_constructed, 2);\r\n        assert(ranges::equal(assign_str_pos, \"llo fluffy kittens\"sv));\r\n\r\n        str assign_str_pos_len;\r\n        assign_str_pos_len.assign(literal_constructed, 2, 3);\r\n        assert(ranges::equal(assign_str_pos_len, \"llo\"sv));\r\n\r\n        str assign_moved_str;\r\n        assign_moved_str.assign(move(assign_str_pos_len));\r\n        assert(ranges::equal(assign_moved_str, \"llo\"sv));\r\n        assert(assign_str_pos_len.empty());\r\n\r\n        str assign_literal;\r\n        assign_literal.assign(get_literal_input<CharType>());\r\n        assert(ranges::equal(assign_literal, literal_constructed));\r\n\r\n        str assign_literal_count;\r\n        assign_literal_count.assign(get_literal_input<CharType>(), 2);\r\n        assert(ranges::equal(assign_literal_count, \"He\"sv));\r\n\r\n        str assign_iterator;\r\n        assign_iterator.assign(begin(get_view_input<CharType>()), end(get_view_input<CharType>()));\r\n        assert(ranges::equal(assign_iterator, get_view_input<CharType>()));\r\n\r\n        str assign_initializer_list;\r\n        assign_initializer_list.assign({CharType{'m'}, CharType{'e'}, CharType{'o'}, CharType{'w'}});\r\n        assert(ranges::equal(assign_initializer_list, \"meow\"sv));\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        str assign_conversion;\r\n        assign_conversion.assign(convertible);\r\n        assert(ranges::equal(assign_conversion, literal_constructed));\r\n\r\n        str assign_conversion_start_length;\r\n        assign_conversion_start_length.assign(convertible, 2, 3);\r\n        assert(ranges::equal(assign_conversion_start_length, \"llo\"sv));\r\n    }\r\n\r\n    { // allocator\r\n        str default_constructed;\r\n        [[maybe_unused]] const auto alloc = default_constructed.get_allocator();\r\n        static_assert(is_same_v<remove_const_t<decltype(alloc)>, allocator<CharType>>);\r\n    }\r\n\r\n    { // access\r\n        str literal_constructed             = get_literal_input<CharType>();\r\n        const str const_literal_constructed = get_literal_input<CharType>();\r\n\r\n        const auto at = literal_constructed.at(2);\r\n        static_assert(is_same_v<remove_const_t<decltype(at)>, CharType>);\r\n        assert(at == CharType{'l'});\r\n\r\n        literal_constructed.at(2) = CharType{'v'};\r\n        const auto at2            = literal_constructed.at(2);\r\n        static_assert(is_same_v<remove_const_t<decltype(at2)>, CharType>);\r\n        assert(at2 == CharType{'v'});\r\n\r\n        const auto cat = const_literal_constructed.at(2);\r\n        static_assert(is_same_v<remove_const_t<decltype(cat)>, CharType>);\r\n        assert(cat == CharType{'l'});\r\n\r\n        const auto op = literal_constructed[3];\r\n        static_assert(is_same_v<remove_const_t<decltype(op)>, CharType>);\r\n        assert(op == CharType{'l'});\r\n\r\n        literal_constructed[3] = CharType{'u'};\r\n        const auto op2         = literal_constructed[3];\r\n        static_assert(is_same_v<remove_const_t<decltype(op2)>, CharType>);\r\n        assert(op2 == CharType{'u'});\r\n\r\n        const auto cop = const_literal_constructed[3];\r\n        static_assert(is_same_v<remove_const_t<decltype(cop)>, CharType>);\r\n        assert(cop == CharType{'l'});\r\n\r\n        const auto f = literal_constructed.front();\r\n        static_assert(is_same_v<remove_const_t<decltype(f)>, CharType>);\r\n        assert(f == CharType{'H'});\r\n\r\n        const auto cf = const_literal_constructed.front();\r\n        static_assert(is_same_v<remove_const_t<decltype(cf)>, CharType>);\r\n        assert(cf == CharType{'H'});\r\n\r\n        const auto b = literal_constructed.back();\r\n        static_assert(is_same_v<remove_const_t<decltype(b)>, CharType>);\r\n        assert(b == CharType{'s'});\r\n\r\n        const auto cb = const_literal_constructed.back();\r\n        static_assert(is_same_v<remove_const_t<decltype(cb)>, CharType>);\r\n        assert(cb == CharType{'s'});\r\n\r\n        const auto d = literal_constructed.data();\r\n        static_assert(is_same_v<decltype(d), CharType* const>);\r\n        assert(*d == CharType{'H'});\r\n\r\n        const auto cd = const_literal_constructed.data();\r\n        static_assert(is_same_v<decltype(cd), const CharType* const>);\r\n        assert(*cd == CharType{'H'});\r\n\r\n        const auto cs = literal_constructed.c_str();\r\n        static_assert(is_same_v<decltype(cs), const CharType* const>);\r\n        assert(cs == literal_constructed.data());\r\n        assert(char_traits<CharType>::length(cs) == literal_constructed.size());\r\n    }\r\n\r\n    { // iterators\r\n        str literal_constructed             = get_literal_input<CharType>();\r\n        const str const_literal_constructed = get_literal_input<CharType>();\r\n\r\n        const auto b = literal_constructed.begin();\r\n        static_assert(is_same_v<remove_const_t<decltype(b)>, typename str::iterator>);\r\n        assert(*b == CharType{'H'});\r\n\r\n        const auto cb = literal_constructed.cbegin();\r\n        static_assert(is_same_v<remove_const_t<decltype(cb)>, typename str::const_iterator>);\r\n        assert(*cb == CharType{'H'});\r\n\r\n        const auto cb2 = const_literal_constructed.begin();\r\n        static_assert(is_same_v<remove_const_t<decltype(cb2)>, typename str::const_iterator>);\r\n        assert(*cb2 == CharType{'H'});\r\n\r\n        const auto e = literal_constructed.end();\r\n        static_assert(is_same_v<remove_const_t<decltype(e)>, typename str::iterator>);\r\n        assert(*prev(e) == CharType{'s'});\r\n\r\n        const auto ce = literal_constructed.cend();\r\n        static_assert(is_same_v<remove_const_t<decltype(ce)>, typename str::const_iterator>);\r\n        assert(*prev(ce) == CharType{'s'});\r\n\r\n        const auto ce2 = const_literal_constructed.end();\r\n        static_assert(is_same_v<remove_const_t<decltype(ce2)>, typename str::const_iterator>);\r\n        assert(*prev(ce2) == CharType{'s'});\r\n\r\n        const auto rb = literal_constructed.rbegin();\r\n        static_assert(is_same_v<remove_const_t<decltype(rb)>, reverse_iterator<typename str::iterator>>);\r\n        assert(*rb == CharType{'s'});\r\n\r\n        const auto crb = literal_constructed.crbegin();\r\n        static_assert(is_same_v<remove_const_t<decltype(crb)>, reverse_iterator<typename str::const_iterator>>);\r\n        assert(*crb == CharType{'s'});\r\n\r\n        const auto crb2 = const_literal_constructed.rbegin();\r\n        static_assert(is_same_v<remove_const_t<decltype(crb2)>, reverse_iterator<typename str::const_iterator>>);\r\n        assert(*crb2 == CharType{'s'});\r\n\r\n        const auto re = literal_constructed.rend();\r\n        static_assert(is_same_v<remove_const_t<decltype(re)>, reverse_iterator<typename str::iterator>>);\r\n        assert(*prev(re) == CharType{'H'});\r\n\r\n        const auto cre = literal_constructed.crend();\r\n        static_assert(is_same_v<remove_const_t<decltype(cre)>, reverse_iterator<typename str::const_iterator>>);\r\n        assert(*prev(cre) == CharType{'H'});\r\n\r\n        const auto cre2 = const_literal_constructed.rend();\r\n        static_assert(is_same_v<remove_const_t<decltype(cre2)>, reverse_iterator<typename str::const_iterator>>);\r\n        assert(*prev(cre2) == CharType{'H'});\r\n    }\r\n\r\n    { // capacity\r\n        str literal_constructed = get_literal_input<CharType>();\r\n\r\n        const auto e = literal_constructed.empty();\r\n        static_assert(is_same_v<remove_const_t<decltype(e)>, bool>);\r\n        assert(!e);\r\n\r\n        const auto s = literal_constructed.size();\r\n        static_assert(is_same_v<remove_const_t<decltype(s)>, size_t>);\r\n        assert(s == size(get_view_input<CharType>()));\r\n\r\n        const auto l = literal_constructed.length();\r\n        static_assert(is_same_v<remove_const_t<decltype(l)>, size_t>);\r\n        assert(l == s);\r\n\r\n        const auto ms = literal_constructed.max_size();\r\n        static_assert(is_same_v<remove_const_t<decltype(ms)>, size_t>);\r\n        if constexpr (is_same_v<CharType, char16_t> || is_same_v<CharType, char32_t> || is_same_v<CharType, wchar_t>) {\r\n            assert(ms == static_cast<size_t>(-1) / sizeof(CharType) - 1);\r\n        } else {\r\n            assert(ms == static_cast<size_t>(-1) / 2);\r\n        }\r\n\r\n        literal_constructed.reserve(20);\r\n\r\n        const auto c = literal_constructed.capacity();\r\n        static_assert(is_same_v<remove_const_t<decltype(c)>, size_t>);\r\n        if constexpr (is_same_v<CharType, char16_t> || is_same_v<CharType, char32_t> || is_same_v<CharType, wchar_t>) {\r\n            assert(c == 23);\r\n        } else {\r\n            assert(c == 31);\r\n        }\r\n\r\n        // make reserve actually do work\r\n        literal_constructed.reserve(35);\r\n        const auto c2 = literal_constructed.capacity();\r\n        if constexpr (is_same_v<CharType, char16_t> || is_same_v<CharType, wchar_t>) {\r\n            assert(c2 == 39);\r\n        } else if constexpr (is_same_v<CharType, char32_t>) {\r\n            assert(c2 == 35);\r\n        } else {\r\n            assert(c2 == 47);\r\n        }\r\n\r\n        // shrink back to previous size\r\n        literal_constructed.shrink_to_fit();\r\n\r\n        const auto c3 = literal_constructed.capacity();\r\n        if constexpr (is_same_v<CharType, char16_t> || is_same_v<CharType, char32_t> || is_same_v<CharType, wchar_t>) {\r\n            assert(c3 == 23);\r\n        } else {\r\n            assert(c3 == 31);\r\n        }\r\n\r\n        literal_constructed.erase(3);\r\n        literal_constructed.shrink_to_fit();\r\n\r\n        const auto c4 = literal_constructed.capacity();\r\n        assert(c4 == 16 / sizeof(CharType) - 1);\r\n    }\r\n\r\n    { // clear\r\n        str cleared = get_literal_input<CharType>();\r\n        cleared.clear();\r\n        assert(cleared.empty());\r\n        assert(cleared.capacity() == str{get_literal_input<CharType>()}.capacity());\r\n    }\r\n\r\n    { // insert\r\n        str insert_char               = get_literal_input<CharType>();\r\n        const CharType to_be_inserted = CharType{','};\r\n        insert_char.insert(insert_char.begin() + 5, to_be_inserted);\r\n        assert(ranges::equal(insert_char, \"Hello, fluffy kittens\"sv));\r\n\r\n        str insert_const_char = get_literal_input<CharType>();\r\n        insert_const_char.insert(insert_const_char.cbegin() + 5, to_be_inserted);\r\n        assert(ranges::equal(insert_const_char, \"Hello, fluffy kittens\"sv));\r\n\r\n        str insert_char_rvalue = get_literal_input<CharType>();\r\n        insert_char_rvalue.insert(insert_char_rvalue.begin() + 5, CharType{','});\r\n        assert(ranges::equal(insert_char_rvalue, \"Hello, fluffy kittens\"sv));\r\n\r\n        str insert_const_char_rvalue = get_literal_input<CharType>();\r\n        insert_const_char_rvalue.insert(insert_const_char_rvalue.cbegin() + 5, CharType{','});\r\n        assert(ranges::equal(insert_const_char_rvalue, \"Hello, fluffy kittens\"sv));\r\n\r\n        str insert_range(2, CharType{'b'});\r\n        const auto it = insert_range.insert(\r\n            insert_range.begin() + 1, begin(get_view_input<CharType>()), end(get_view_input<CharType>()));\r\n        assert(it == insert_range.begin() + 1);\r\n        assert(ranges::equal(insert_range, \"bHello fluffy kittensb\"sv));\r\n\r\n        str insert_const_range(2, CharType{'b'});\r\n        const auto cit = insert_const_range.insert(\r\n            insert_const_range.cbegin() + 1, begin(get_view_input<CharType>()), end(get_view_input<CharType>()));\r\n        assert(cit == insert_const_range.cbegin() + 1);\r\n        assert(ranges::equal(insert_const_range, \"bHello fluffy kittensb\"sv));\r\n\r\n        str insert_initializer_list = get_literal_input<CharType>();\r\n        const auto it_ilist         = insert_initializer_list.insert(insert_initializer_list.begin() + 6,\r\n                    {CharType{'c'}, CharType{'u'}, CharType{'t'}, CharType{'e'}, CharType{' '}});\r\n        assert(it_ilist == insert_initializer_list.begin() + 6);\r\n        assert(ranges::equal(insert_initializer_list, \"Hello cute fluffy kittens\"sv));\r\n\r\n        str insert_const_initializer_list = get_literal_input<CharType>();\r\n        const auto cit_ilist = insert_const_initializer_list.insert(insert_const_initializer_list.cbegin() + 6,\r\n            {CharType{'c'}, CharType{'u'}, CharType{'t'}, CharType{'e'}, CharType{' '}});\r\n        assert(cit_ilist == insert_const_initializer_list.cbegin() + 6);\r\n        assert(ranges::equal(insert_const_initializer_list, \"Hello cute fluffy kittens\"sv));\r\n\r\n        str insert_pos_str  = get_literal_input<CharType>();\r\n        const str to_insert = get_cute_and_scratchy<CharType>();\r\n        insert_pos_str.insert(6, to_insert);\r\n        assert(ranges::equal(insert_pos_str, \"Hello cute and scratchy fluffy kittens\"sv));\r\n\r\n        str insert_pos_substr = get_literal_input<CharType>();\r\n        insert_pos_substr.insert(6, to_insert, 0, 5);\r\n        assert(ranges::equal(insert_pos_substr, \"Hello cute fluffy kittens\"sv));\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        str insert_pos_conversion = get_literal_input<CharType>();\r\n        insert_pos_conversion.insert(6, convertible);\r\n        assert(ranges::equal(insert_pos_conversion, \"Hello Hello fluffy kittensfluffy kittens\"sv));\r\n\r\n        str insert_pos_conversion_substr = get_literal_input<CharType>();\r\n        insert_pos_conversion_substr.insert(6, convertible, 6, 7);\r\n        assert(ranges::equal(insert_pos_conversion_substr, \"Hello fluffy fluffy kittens\"sv));\r\n\r\n        str insert_pos_literal = get_literal_input<CharType>();\r\n        insert_pos_literal.insert(6, get_literal_input<CharType>());\r\n        assert(ranges::equal(insert_pos_literal, \"Hello Hello fluffy kittensfluffy kittens\"sv));\r\n\r\n        str insert_pos_literal_substr = get_literal_input<CharType>();\r\n        insert_pos_literal_substr.insert(6, get_literal_input<CharType>(), 6);\r\n        assert(ranges::equal(insert_pos_literal_substr, \"Hello Hello fluffy kittens\"sv));\r\n\r\n        str insert_pos_count_char = get_literal_input<CharType>();\r\n        insert_pos_count_char.insert(6, 3, CharType{'b'});\r\n        assert(ranges::equal(insert_pos_count_char, \"Hello bbbfluffy kittens\"sv));\r\n\r\n        str insert_iter_count_char = get_literal_input<CharType>();\r\n        insert_iter_count_char.insert(begin(insert_iter_count_char) + 5, 4, CharType{'o'});\r\n        assert(ranges::equal(insert_iter_count_char, \"Hellooooo fluffy kittens\"sv));\r\n    }\r\n\r\n    { // erase\r\n        str erase_pos_count = get_literal_input<CharType>();\r\n        erase_pos_count.erase(0, 6);\r\n        assert(ranges::equal(erase_pos_count, \"fluffy kittens\"sv));\r\n\r\n        str erase_iter = get_literal_input<CharType>();\r\n        erase_iter.erase(erase_iter.begin());\r\n        assert(ranges::equal(erase_iter, \"ello fluffy kittens\"sv));\r\n\r\n        str erase_const_iter = get_literal_input<CharType>();\r\n        erase_const_iter.erase(erase_const_iter.cbegin());\r\n        assert(ranges::equal(erase_const_iter, \"ello fluffy kittens\"sv));\r\n\r\n        str erase_iter_iter = get_literal_input<CharType>();\r\n        erase_iter_iter.erase(erase_iter_iter.begin(), erase_iter_iter.begin() + 6);\r\n        assert(ranges::equal(erase_iter_iter, \"fluffy kittens\"sv));\r\n\r\n        str erase_const_iter_iter = get_literal_input<CharType>();\r\n        erase_const_iter_iter.erase(erase_const_iter_iter.cbegin(), erase_const_iter_iter.cbegin() + 6);\r\n        assert(ranges::equal(erase_const_iter_iter, \"fluffy kittens\"sv));\r\n\r\n        str erased_free = get_literal_input<CharType>();\r\n        erase(erased_free, CharType{'l'});\r\n        assert(ranges::equal(erased_free, \"Heo fuffy kittens\"sv));\r\n\r\n        str erased_free_if = get_literal_input<CharType>();\r\n        erase_if(erased_free_if, [](const CharType val) { return val == CharType{'t'}; });\r\n        assert(ranges::equal(erased_free_if, \"Hello fluffy kiens\"sv));\r\n    }\r\n\r\n    { // push_back / pop_back\r\n        str pushed;\r\n        pushed.push_back(CharType{'y'});\r\n        assert(pushed.size() == 1);\r\n        assert(pushed.back() == CharType{'y'});\r\n\r\n        const CharType to_be_pushed = CharType{'z'};\r\n        pushed.push_back(to_be_pushed);\r\n        assert(pushed.size() == 2);\r\n        assert(pushed.back() == CharType{'z'});\r\n\r\n        pushed.pop_back();\r\n        assert(pushed.size() == 1);\r\n        assert(pushed.back() == CharType{'y'});\r\n    }\r\n\r\n    { // append\r\n        const str literal_constructed = get_literal_input<CharType>();\r\n\r\n        str append_size_char(2, CharType{'b'});\r\n        append_size_char.append(5, CharType{'a'});\r\n        assert(ranges::equal(append_size_char, \"bbaaaaa\"sv));\r\n\r\n        str append_str(2, CharType{'b'});\r\n        append_str.append(literal_constructed);\r\n        assert(ranges::equal(append_str, \"bbHello fluffy kittens\"sv));\r\n\r\n        str append_str_pos(2, CharType{'b'});\r\n        append_str_pos.append(literal_constructed, 2);\r\n        assert(ranges::equal(append_str_pos, \"bbllo fluffy kittens\"sv));\r\n\r\n        str append_str_pos_len(2, CharType{'b'});\r\n        append_str_pos_len.append(literal_constructed, 2, 3);\r\n        assert(ranges::equal(append_str_pos_len, \"bbllo\"sv));\r\n\r\n        str append_literal(2, CharType{'b'});\r\n        append_literal.append(get_literal_input<CharType>());\r\n        assert(ranges::equal(append_literal, \"bbHello fluffy kittens\"sv));\r\n\r\n        str append_literal_count(2, CharType{'b'});\r\n        append_literal_count.append(get_literal_input<CharType>(), 2);\r\n        assert(ranges::equal(append_literal_count, \"bbHe\"sv));\r\n\r\n        str append_iterator(2, CharType{'b'});\r\n        append_iterator.append(begin(get_view_input<CharType>()), end(get_view_input<CharType>()));\r\n        assert(ranges::equal(append_iterator, \"bbHello fluffy kittens\"sv));\r\n\r\n        str append_initializer_list(2, CharType{'b'});\r\n        append_initializer_list.append({CharType{'m'}, CharType{'e'}, CharType{'o'}, CharType{'w'}});\r\n        assert(ranges::equal(append_initializer_list, \"bbmeow\"sv));\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        str append_conversion(2, CharType{'b'});\r\n        append_conversion.append(convertible);\r\n        assert(ranges::equal(append_conversion, \"bbHello fluffy kittens\"sv));\r\n\r\n        str append_conversion_start_length(2, CharType{'b'});\r\n        append_conversion_start_length.append(convertible, 2, 3);\r\n        assert(ranges::equal(append_conversion_start_length, \"bbllo\"sv));\r\n    }\r\n\r\n    { // operator+=\r\n        str literal_constructed = get_literal_input<CharType>();\r\n\r\n        str plus_string(2, CharType{'b'});\r\n        plus_string += literal_constructed;\r\n        assert(ranges::equal(plus_string, \"bbHello fluffy kittens\"sv));\r\n\r\n        str plus_character(2, CharType{'b'});\r\n        plus_character += CharType{'a'};\r\n        assert(ranges::equal(plus_character, \"bba\"sv));\r\n\r\n        str plus_literal(2, CharType{'b'});\r\n        plus_literal += get_literal_input<CharType>();\r\n        assert(ranges::equal(plus_literal, \"bbHello fluffy kittens\"sv));\r\n\r\n        str plus_initializer_list(2, CharType{'b'});\r\n        plus_initializer_list += {CharType{'m'}, CharType{'e'}, CharType{'o'}, CharType{'w'}};\r\n        assert(ranges::equal(plus_initializer_list, \"bbmeow\"sv));\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        str plus_conversion(2, CharType{'b'});\r\n        plus_conversion += convertible;\r\n        assert(ranges::equal(plus_conversion, \"bbHello fluffy kittens\"sv));\r\n    }\r\n\r\n    { // compare\r\n        const str first  = get_literal_input<CharType>();\r\n        const str second = get_cat<CharType>();\r\n\r\n        const int comp_str_eq = first.compare(first);\r\n        assert(comp_str_eq == 0);\r\n\r\n        const int comp_str_less = first.compare(second);\r\n        assert(comp_str_less == -1);\r\n\r\n        const int comp_str_greater = second.compare(first);\r\n        assert(comp_str_greater == 1);\r\n\r\n        const int comp_pos_count_str_eq = first.compare(3, 7, first.substr(3, 7));\r\n        assert(comp_pos_count_str_eq == 0);\r\n\r\n        const int comp_pos_count_str_less = first.compare(0, 2, second);\r\n        assert(comp_pos_count_str_less == -1);\r\n\r\n        const int comp_pos_count_str_greater = second.compare(0, 2, first);\r\n        assert(comp_pos_count_str_greater == 1);\r\n\r\n        const int comp_pos_count_str_pos_eq = first.compare(3, 20, first, 3);\r\n        assert(comp_pos_count_str_pos_eq == 0);\r\n\r\n        const int comp_pos_count_str_pos_less = first.compare(0, 2, second, 2);\r\n        assert(comp_pos_count_str_pos_less == -1);\r\n\r\n        const int comp_pos_count_str_pos_greater = second.compare(0, 2, first, 6);\r\n        assert(comp_pos_count_str_pos_greater == 1);\r\n\r\n        const int comp_pos_count_str_pos_count_eq = first.compare(3, 5, first, 3, 5);\r\n        assert(comp_pos_count_str_pos_count_eq == 0);\r\n\r\n        const int comp_pos_count_str_pos_count_less = first.compare(0, 2, second, 2, 3);\r\n        assert(comp_pos_count_str_pos_count_less == -1);\r\n\r\n        const int comp_pos_count_str_pos_count_greater = second.compare(0, 2, first, 6, 4);\r\n        assert(comp_pos_count_str_pos_count_greater == 1);\r\n\r\n        const int comp_literal_eq = first.compare(get_literal_input<CharType>());\r\n        assert(comp_literal_eq == 0);\r\n\r\n        const int comp_literal_less = first.compare(get_cat<CharType>());\r\n        assert(comp_literal_less == -1);\r\n\r\n        const int comp_literal_greater = second.compare(get_literal_input<CharType>());\r\n        assert(comp_literal_greater == 1);\r\n\r\n        const int comp_pos_count_literal_eq = first.compare(13, 6, get_cat<CharType>());\r\n        assert(comp_pos_count_literal_eq == 0);\r\n\r\n        const int comp_pos_count_literal_less = first.compare(0, 2, get_cat<CharType>());\r\n        assert(comp_pos_count_literal_less == -1);\r\n\r\n        const int comp_pos_count_literal_greater = second.compare(0, 2, get_literal_input<CharType>());\r\n        assert(comp_pos_count_literal_greater == 1);\r\n\r\n        const int comp_pos_count_literal_count_eq = first.compare(13, 5, get_cat<CharType>(), 5);\r\n        assert(comp_pos_count_literal_count_eq == 0);\r\n\r\n        const int comp_pos_count_literal_count_less = first.compare(0, 2, get_cat<CharType>(), 2);\r\n        assert(comp_pos_count_literal_count_less == -1);\r\n\r\n        const int comp_pos_count_literal_count_greater = second.compare(0, 2, get_literal_input<CharType>(), 6);\r\n        assert(comp_pos_count_literal_count_greater == 1);\r\n\r\n        const int comp_pos_count_literal_pos_count_eq = first.compare(3, 5, get_literal_input<CharType>(), 3, 5);\r\n        assert(comp_pos_count_literal_pos_count_eq == 0);\r\n\r\n        const int comp_pos_count_literal_pos_count_less = first.compare(0, 2, get_cat<CharType>(), 2, 3);\r\n        assert(comp_pos_count_literal_pos_count_less == -1);\r\n\r\n        const int comp_pos_count_literal_pos_count_greater = second.compare(0, 2, get_literal_input<CharType>(), 6, 4);\r\n        assert(comp_pos_count_literal_pos_count_greater == 1);\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        const int comp_conversion_eq = first.compare(convertible);\r\n        assert(comp_conversion_eq == 0);\r\n\r\n        const int comp_conversion_less = first.compare(second);\r\n        assert(comp_conversion_less == -1);\r\n\r\n        const int comp_conversion_greater = second.compare(convertible);\r\n        assert(comp_conversion_greater == 1);\r\n\r\n        const int comp_pos_count_conversion_eq = first.compare(0, 20, convertible);\r\n        assert(comp_pos_count_conversion_eq == 0);\r\n\r\n        const int comp_pos_count_conversion_less = first.compare(5, 4, convertible);\r\n        assert(comp_pos_count_conversion_less == -1);\r\n\r\n        const int comp_pos_count_conversion_greater = second.compare(0, 2, convertible);\r\n        assert(comp_pos_count_conversion_greater == 1);\r\n\r\n        const int comp_pos_count_conversion_pos_eq = first.compare(3, 20, convertible, 3);\r\n        assert(comp_pos_count_conversion_pos_eq == 0);\r\n\r\n        const int comp_pos_count_conversion_pos_less = first.compare(0, 2, second, 2);\r\n        assert(comp_pos_count_conversion_pos_less == -1);\r\n\r\n        const int comp_pos_count_conversion_pos_greater = second.compare(0, 2, convertible, 6);\r\n        assert(comp_pos_count_conversion_pos_greater == 1);\r\n\r\n        const int comp_pos_count_conversion_pos_count_eq = first.compare(3, 5, convertible, 3, 5);\r\n        assert(comp_pos_count_conversion_pos_count_eq == 0);\r\n\r\n        const int comp_pos_count_conversion_pos_count_less = first.compare(0, 2, second, 2, 3);\r\n        assert(comp_pos_count_conversion_pos_count_less == -1);\r\n\r\n        const int comp_pos_count_conversion_pos_count_greater = second.compare(0, 2, convertible, 6, 4);\r\n        assert(comp_pos_count_conversion_pos_count_greater == 1);\r\n    }\r\n\r\n    { // starts_with\r\n        const str starts            = get_literal_input<CharType>();\r\n        const str input_string_true = starts.substr(0, 5);\r\n        assert(starts.starts_with(input_string_true));\r\n\r\n        const str input_string_false = get_cat<CharType>();\r\n        assert(!starts.starts_with(input_string_false));\r\n\r\n        assert(starts.starts_with(CharType{'H'}));\r\n        assert(!starts.starts_with(CharType{'h'}));\r\n\r\n        assert(starts.starts_with(get_literal_input<CharType>()));\r\n        assert(!input_string_false.starts_with(get_literal_input<CharType>()));\r\n    }\r\n\r\n    { // ends_with\r\n        const str ends              = get_literal_input<CharType>();\r\n        const str input_string_true = ends.substr(5);\r\n        assert(ends.ends_with(input_string_true));\r\n\r\n        const str input_string_false = get_cat<CharType>();\r\n        assert(!ends.ends_with(input_string_false));\r\n\r\n        assert(ends.ends_with(CharType{'s'}));\r\n        assert(!ends.ends_with(CharType{'S'}));\r\n\r\n        assert(ends.ends_with(get_literal_input<CharType>()));\r\n        assert(!input_string_false.ends_with(get_literal_input<CharType>()));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    { // contains\r\n        const str hello_fluffy_kittens = get_literal_input<CharType>(); // \"Hello fluffy kittens\"\r\n        constexpr auto kitten_ptr      = get_cat<CharType>(); // \"kitten\"\r\n        constexpr auto dog_ptr         = get_dog<CharType>(); // \"dog\"\r\n\r\n        assert(hello_fluffy_kittens.contains(kitten_ptr));\r\n        assert(hello_fluffy_kittens.contains(basic_string_view{kitten_ptr}));\r\n        assert(hello_fluffy_kittens.contains(CharType{'e'}));\r\n\r\n        assert(!hello_fluffy_kittens.contains(dog_ptr));\r\n        assert(!hello_fluffy_kittens.contains(basic_string_view{dog_ptr}));\r\n        assert(!hello_fluffy_kittens.contains(CharType{'z'}));\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    { // replace\r\n        const str input = get_dog<CharType>();\r\n\r\n        str replaced_pos_count_str = get_literal_input<CharType>();\r\n        replaced_pos_count_str.replace(13, 7, input);\r\n        assert(ranges::equal(replaced_pos_count_str, \"Hello fluffy dog\"sv));\r\n\r\n        str replaced_pos_count_str_shift = get_literal_input<CharType>();\r\n        replaced_pos_count_str_shift.replace(13, 2, input);\r\n        assert(ranges::equal(replaced_pos_count_str_shift, \"Hello fluffy dogttens\"sv));\r\n\r\n        str replaced_iter_str = get_literal_input<CharType>();\r\n        replaced_iter_str.replace(replaced_iter_str.cbegin() + 13, replaced_iter_str.cend(), input);\r\n        assert(ranges::equal(replaced_iter_str, \"Hello fluffy dog\"sv));\r\n\r\n        str replaced_iter_str_shift = get_literal_input<CharType>();\r\n        replaced_iter_str_shift.replace(\r\n            replaced_iter_str_shift.cbegin() + 13, replaced_iter_str_shift.cbegin() + 15, input);\r\n        assert(ranges::equal(replaced_iter_str_shift, \"Hello fluffy dogttens\"sv));\r\n\r\n        str replaced_pos_count_str_pos_count = get_literal_input<CharType>();\r\n        replaced_pos_count_str_pos_count.replace(13, 7, input, 1);\r\n        assert(ranges::equal(replaced_pos_count_str_pos_count, \"Hello fluffy og\"sv));\r\n\r\n        str replaced_pos_count_str_pos_count_less = get_literal_input<CharType>();\r\n        replaced_pos_count_str_pos_count_less.replace(13, 2, input, 1, 2);\r\n        assert(ranges::equal(replaced_pos_count_str_pos_count_less, \"Hello fluffy ogttens\"sv));\r\n\r\n        str replaced_iter_iter = get_literal_input<CharType>();\r\n        replaced_iter_iter.replace(\r\n            replaced_iter_iter.cbegin() + 13, replaced_iter_iter.cend(), input.begin(), input.end());\r\n        assert(ranges::equal(replaced_iter_iter, \"Hello fluffy dog\"sv));\r\n\r\n        str replaced_iter_iter_less = get_literal_input<CharType>();\r\n        replaced_iter_iter_less.replace(replaced_iter_iter_less.cbegin() + 13, replaced_iter_iter_less.cbegin() + 15,\r\n            input.begin() + 1, input.end());\r\n        assert(ranges::equal(replaced_iter_iter_less, \"Hello fluffy ogttens\"sv));\r\n\r\n        str replaced_pos_count_literal = get_literal_input<CharType>();\r\n        replaced_pos_count_literal.replace(13, 2, get_dog<CharType>());\r\n        assert(ranges::equal(replaced_pos_count_literal, \"Hello fluffy dogttens\"sv));\r\n\r\n        str replaced_pos_count_literal_count = get_literal_input<CharType>();\r\n        replaced_pos_count_literal_count.replace(13, 2, get_dog<CharType>(), 2);\r\n        assert(ranges::equal(replaced_pos_count_literal_count, \"Hello fluffy dottens\"sv));\r\n\r\n        str replaced_iter_literal = get_literal_input<CharType>();\r\n        replaced_iter_literal.replace(\r\n            replaced_iter_literal.cbegin() + 13, replaced_iter_literal.cbegin() + 15, get_dog<CharType>());\r\n        assert(ranges::equal(replaced_iter_literal, \"Hello fluffy dogttens\"sv));\r\n\r\n        str replaced_iter_literal_count = get_literal_input<CharType>();\r\n        replaced_iter_literal_count.replace(replaced_iter_literal_count.cbegin() + 13,\r\n            replaced_iter_literal_count.cbegin() + 15, get_dog<CharType>(), 2);\r\n        assert(ranges::equal(replaced_iter_literal_count, \"Hello fluffy dottens\"sv));\r\n\r\n        str replaced_pos_count_chars = get_literal_input<CharType>();\r\n        replaced_pos_count_chars.replace(13, 2, 5, CharType{'a'});\r\n        assert(ranges::equal(replaced_pos_count_chars, \"Hello fluffy aaaaattens\"sv));\r\n\r\n        str replaced_iter_chars = get_literal_input<CharType>();\r\n        replaced_iter_chars.replace(\r\n            replaced_iter_chars.cbegin() + 13, replaced_iter_chars.cbegin() + 15, 5, CharType{'a'});\r\n        assert(ranges::equal(replaced_iter_chars, \"Hello fluffy aaaaattens\"sv));\r\n\r\n        str replaced_iter_init = get_literal_input<CharType>();\r\n        replaced_iter_init.replace(replaced_iter_init.cbegin() + 13, replaced_iter_init.cbegin() + 15,\r\n            {CharType{'c'}, CharType{'u'}, CharType{'t'}, CharType{'e'}, CharType{' '}});\r\n        assert(ranges::equal(replaced_iter_init, \"Hello fluffy cute ttens\"sv));\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        str replaced_pos_count_conversion = get_dog<CharType>();\r\n        replaced_pos_count_conversion.replace(1, 5, convertible);\r\n        assert(ranges::equal(replaced_pos_count_conversion, \"dHello fluffy kittens\"sv));\r\n\r\n        str replaced_iter_conversion = get_dog<CharType>();\r\n        replaced_iter_conversion.replace(\r\n            replaced_iter_conversion.cbegin() + 1, replaced_iter_conversion.cbegin() + 2, convertible);\r\n        assert(ranges::equal(replaced_iter_conversion, \"dHello fluffy kittensg\"sv));\r\n\r\n        str replaced_pos_count_conversion_pos = get_dog<CharType>();\r\n        replaced_pos_count_conversion_pos.replace(1, 5, convertible, 6);\r\n        assert(ranges::equal(replaced_pos_count_conversion_pos, \"dfluffy kittens\"sv));\r\n\r\n        str replaced_pos_count_conversion_pos_count = get_dog<CharType>();\r\n        replaced_pos_count_conversion_pos_count.replace(1, 5, convertible, 6, 6);\r\n        assert(ranges::equal(replaced_pos_count_conversion_pos_count, \"dfluffy\"sv));\r\n    }\r\n\r\n    { // substr\r\n        const str input = get_literal_input<CharType>();\r\n\r\n        const str substr_pos = input.substr(6);\r\n        assert(ranges::equal(substr_pos, \"fluffy kittens\"sv));\r\n\r\n        const str substr_pos_count = input.substr(6, 6);\r\n        assert(ranges::equal(substr_pos_count, \"fluffy\"sv));\r\n    }\r\n\r\n    { // copy\r\n        const str input = get_literal_input<CharType>();\r\n\r\n        CharType copy_count[5];\r\n        input.copy(copy_count, 5);\r\n        assert(ranges::equal(copy_count, \"Hello\"sv));\r\n\r\n        CharType copy_count_pos[6];\r\n        input.copy(copy_count_pos, 6, 6);\r\n        assert(ranges::equal(copy_count_pos, \"fluffy\"sv));\r\n    }\r\n\r\n    { // resize\r\n        str resized = get_literal_input<CharType>();\r\n        resized.resize(3);\r\n        assert(ranges::equal(resized, \"Hel\"sv));\r\n\r\n        resized.resize(6, CharType{'a'});\r\n        assert(ranges::equal(resized, \"Helaaa\"sv));\r\n\r\n        // ensure we grow properly from small string\r\n        resized.resize(26, CharType{'a'});\r\n        assert(ranges::equal(resized, \"Helaaaaaaaaaaaaaaaaaaaaaaa\"sv));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    { // resize_and_overwrite\r\n        constexpr basic_string_view hello_fluffy_kittens = get_view_input<CharType>();\r\n        constexpr basic_string_view hello                = hello_fluffy_kittens.substr(0, 5);\r\n        constexpr basic_string_view dog                  = get_dog<CharType>();\r\n        constexpr basic_string_view kitten               = get_cat<CharType>();\r\n\r\n        str s;\r\n        s.resize_and_overwrite(5, [=](CharType* p, size_t n) {\r\n            assert(n == 5);\r\n            hello.copy(p, 5);\r\n            return 5u;\r\n        });\r\n\r\n        assert(s == hello);\r\n        assert(s.size() == 5);\r\n        assert(s.capacity() >= 5);\r\n        assert(s[5] == 0);\r\n\r\n        s.resize_and_overwrite(8, [=](CharType* p, size_t n) {\r\n            assert(n == 8);\r\n            assert(equal(hello.begin(), hello.end(), p, p + 5));\r\n            dog.copy(p, 3);\r\n            return 3u;\r\n        });\r\n\r\n        assert(s == dog);\r\n        assert(s.size() == 3);\r\n        assert(s.capacity() >= 3);\r\n        assert(s[3] == 0);\r\n\r\n        s.resize_and_overwrite(6, [=](CharType* p, size_t n) {\r\n            assert(n == 6);\r\n            assert(equal(dog.begin(), dog.end(), p, p + 3));\r\n            kitten.copy(p, 6);\r\n            return 6u;\r\n        });\r\n\r\n        assert(s == kitten);\r\n        assert(s.size() == 6);\r\n        assert(s.capacity() >= 6);\r\n        assert(s[6] == 0);\r\n\r\n        s.resize_and_overwrite(0, [=](CharType*, size_t n) {\r\n            assert(n == 0);\r\n            return 0u;\r\n        });\r\n\r\n        assert(s.size() == 0);\r\n        assert(s[0] == 0);\r\n\r\n        s = dog;\r\n\r\n        s.resize_and_overwrite(6, [=](CharType* p, size_t n) {\r\n            assert(n == 6);\r\n            assert(equal(dog.begin(), dog.end(), p, p + 3));\r\n            return 0u;\r\n        });\r\n\r\n        assert(s.size() == 0);\r\n        assert(s[0] == 0);\r\n\r\n        s = kitten;\r\n\r\n        s.resize_and_overwrite(3, [=](CharType* p, size_t n) {\r\n            assert(n == 3);\r\n            assert(equal(kitten.begin(), kitten.begin() + 3, p, p + 3));\r\n            dog.copy(p, 3);\r\n            return 3u;\r\n        });\r\n\r\n        assert(s == dog);\r\n        assert(s.size() == 3);\r\n        assert(s.capacity() >= 3);\r\n        assert(s[3] == 0);\r\n\r\n        s.resize_and_overwrite(20, [=](CharType* p, size_t n) {\r\n            assert(n == 20);\r\n            assert(equal(dog.begin(), dog.end(), p, p + 3));\r\n            hello_fluffy_kittens.copy(p, 20);\r\n            return 20u;\r\n        });\r\n\r\n        assert(s == hello_fluffy_kittens);\r\n        assert(s.size() == 20);\r\n        assert(s.capacity() >= 20);\r\n        assert(s[20] == 0);\r\n\r\n        s.resize_and_overwrite(3, [=](CharType* p, size_t n) {\r\n            assert(n == 3);\r\n            assert(equal(hello_fluffy_kittens.begin(), hello_fluffy_kittens.begin() + 3, p, p + 3));\r\n            dog.copy(p, 3);\r\n            return 3u;\r\n        });\r\n\r\n        assert(s == dog);\r\n        assert(s.size() == 3);\r\n        assert(s.capacity() >= 3);\r\n        assert(s[3] == 0);\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n    { // swap\r\n        constexpr basic_string_view<CharType> expected_first  = get_dog<CharType>();\r\n        constexpr basic_string_view<CharType> expected_second = get_cat<CharType>();\r\n        str first{get_cat<CharType>()};\r\n        str second{get_dog<CharType>()};\r\n        swap(first, second);\r\n\r\n        assert(ranges::equal(first, expected_first));\r\n        assert(ranges::equal(second, expected_second));\r\n\r\n        first.swap(second);\r\n        assert(ranges::equal(second, expected_first));\r\n        assert(ranges::equal(first, expected_second));\r\n    }\r\n\r\n    { // find\r\n        const str input     = get_literal_input<CharType>();\r\n        const str needle    = get_cat<CharType>();\r\n        const str no_needle = get_no_needle<CharType>();\r\n\r\n        const auto find_str = input.find(needle);\r\n        assert(find_str == 13u);\r\n\r\n        const auto find_str_none = input.find(no_needle);\r\n        assert(find_str_none == str::npos);\r\n\r\n        const auto find_str_pos = input.find(needle, 6);\r\n        assert(find_str_pos == 13u);\r\n\r\n        const auto find_str_pos_none = input.find(needle, 14);\r\n        assert(find_str_pos_none == str::npos);\r\n\r\n        const auto find_str_overflow = input.find(needle, 50);\r\n        assert(find_str_overflow == str::npos);\r\n\r\n        const auto find_literal = input.find(get_cat<CharType>());\r\n        assert(find_literal == 13u);\r\n\r\n        const auto find_literal_none = input.find(get_dog<CharType>());\r\n        assert(find_literal_none == str::npos);\r\n\r\n        const auto find_literal_pos = input.find(get_cat<CharType>(), 6);\r\n        assert(find_literal_pos == 13u);\r\n\r\n        const auto find_literal_pos_none = input.find(get_cat<CharType>(), 14);\r\n        assert(find_literal_pos_none == str::npos);\r\n\r\n        const auto find_literal_overflow = input.find(get_cat<CharType>(), 50);\r\n        assert(find_literal_overflow == str::npos);\r\n\r\n        const auto find_literal_pos_count = input.find(get_cat<CharType>(), 6, 4);\r\n        assert(find_literal_pos_count == 13u);\r\n\r\n        const auto find_literal_pos_count_none = input.find(get_dog<CharType>(), 14, 4);\r\n        assert(find_literal_pos_count_none == str::npos);\r\n\r\n        const auto find_char = input.find(CharType{'e'});\r\n        assert(find_char == 1u);\r\n\r\n        const auto find_char_none = input.find(CharType{'x'});\r\n        assert(find_char_none == str::npos);\r\n\r\n        const auto find_char_pos = input.find(CharType{'e'}, 4);\r\n        assert(find_char_pos == 17u);\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        const auto find_convertible = input.find(convertible);\r\n        assert(find_convertible == 0);\r\n\r\n        const auto find_convertible_pos = input.find(convertible, 2);\r\n        assert(find_convertible_pos == str::npos);\r\n    }\r\n\r\n    { // rfind\r\n        const str input     = get_literal_input<CharType>();\r\n        const str needle    = get_cat<CharType>();\r\n        const str no_needle = get_no_needle<CharType>();\r\n\r\n        const auto rfind_str = input.rfind(needle);\r\n        assert(rfind_str == 13u);\r\n\r\n        const auto rfind_str_none = input.rfind(no_needle);\r\n        assert(rfind_str_none == str::npos);\r\n\r\n        const auto rfind_str_pos = input.rfind(needle, 15);\r\n        assert(rfind_str_pos == 13u);\r\n\r\n        const auto rfind_str_pos_none = input.rfind(needle, 6);\r\n        assert(rfind_str_pos_none == str::npos);\r\n\r\n        const auto rfind_str_overflow = input.rfind(needle, 50);\r\n        assert(rfind_str_overflow == 13u);\r\n\r\n        const auto rfind_literal = input.rfind(get_cat<CharType>());\r\n        assert(rfind_literal == 13u);\r\n\r\n        const auto rfind_literal_none = input.rfind(get_dog<CharType>());\r\n        assert(rfind_literal_none == str::npos);\r\n\r\n        const auto rfind_literal_pos = input.rfind(get_cat<CharType>(), 15);\r\n        assert(rfind_literal_pos == 13u);\r\n\r\n        const auto rfind_literal_pos_none = input.rfind(get_cat<CharType>(), 6);\r\n        assert(rfind_literal_pos_none == str::npos);\r\n\r\n        const auto rfind_literal_overflow = input.rfind(get_cat<CharType>(), 50);\r\n        assert(rfind_literal_overflow == 13u);\r\n\r\n        const auto rfind_literal_pos_count = input.rfind(get_cat<CharType>(), 15, 4);\r\n        assert(rfind_literal_pos_count == 13u);\r\n\r\n        const auto rfind_literal_pos_count_none = input.rfind(get_dog<CharType>(), 6, 4);\r\n        assert(rfind_literal_pos_count_none == str::npos);\r\n\r\n        const auto rfind_char = input.rfind(CharType{'e'});\r\n        assert(rfind_char == 17u);\r\n\r\n        const auto rfind_char_none = input.rfind(CharType{'x'});\r\n        assert(rfind_char_none == str::npos);\r\n\r\n        const auto rfind_char_pos = input.rfind(CharType{'e'}, 4);\r\n        assert(rfind_char_pos == 1u);\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        const auto rfind_convertible = input.rfind(convertible);\r\n        assert(rfind_convertible == 0);\r\n\r\n        const auto rfind_convertible_pos = input.rfind(convertible, 5);\r\n        assert(rfind_convertible_pos == 0);\r\n    }\r\n\r\n    { // find_first_of\r\n        const str input     = get_literal_input<CharType>();\r\n        const str needle    = get_cat<CharType>();\r\n        const str no_needle = get_no_needle<CharType>();\r\n\r\n        const auto find_first_of_str = input.find_first_of(needle);\r\n        assert(find_first_of_str == 1u);\r\n\r\n        const auto find_first_of_str_none = input.find_first_of(no_needle);\r\n        assert(find_first_of_str_none == str::npos);\r\n\r\n        const auto find_first_of_str_pos = input.find_first_of(needle, 6);\r\n        assert(find_first_of_str_pos == 13u);\r\n\r\n        const auto find_first_of_str_pos_none = input.find_first_of(no_needle, 14);\r\n        assert(find_first_of_str_pos_none == str::npos);\r\n\r\n        const auto find_first_of_str_overflow = input.find_first_of(needle, 50);\r\n        assert(find_first_of_str_overflow == str::npos);\r\n\r\n        const auto find_first_of_literal = input.find_first_of(get_cat<CharType>());\r\n        assert(find_first_of_literal == 1u);\r\n\r\n        const auto find_first_of_literal_none = input.find_first_of(get_no_needle<CharType>());\r\n        assert(find_first_of_literal_none == str::npos);\r\n\r\n        const auto find_first_of_literal_pos = input.find_first_of(get_cat<CharType>(), 6);\r\n        assert(find_first_of_literal_pos == 13u);\r\n\r\n        const auto find_first_of_literal_pos_none = input.find_first_of(get_no_needle<CharType>(), 14);\r\n        assert(find_first_of_literal_pos_none == str::npos);\r\n\r\n        const auto find_first_of_literal_overflow = input.find_first_of(get_cat<CharType>(), 50);\r\n        assert(find_first_of_literal_overflow == str::npos);\r\n\r\n        const auto find_first_of_literal_pos_count = input.find_first_of(get_cat<CharType>(), 6, 4);\r\n        assert(find_first_of_literal_pos_count == 13u);\r\n\r\n        const auto find_first_of_literal_pos_count_none = input.find_first_of(get_no_needle<CharType>(), 14, 4);\r\n        assert(find_first_of_literal_pos_count_none == str::npos);\r\n\r\n        const auto find_first_of_char = input.find_first_of(CharType{'e'});\r\n        assert(find_first_of_char == 1u);\r\n\r\n        const auto find_first_of_char_none = input.find_first_of(CharType{'x'});\r\n        assert(find_first_of_char_none == str::npos);\r\n\r\n        const auto find_first_of_char_pos = input.find_first_of(CharType{'e'}, 4);\r\n        assert(find_first_of_char_pos == 17u);\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        const auto find_first_of_convertible = input.find_first_of(convertible);\r\n        assert(find_first_of_convertible == 0);\r\n\r\n        const auto find_first_of_convertible_pos = input.find_first_of(convertible, 2);\r\n        assert(find_first_of_convertible_pos == 2u);\r\n    }\r\n\r\n    { // find_first_not_of\r\n        const str input     = get_literal_input<CharType>();\r\n        const str needle    = get_cat<CharType>();\r\n        const str no_needle = get_no_needle<CharType>();\r\n\r\n        const auto find_first_not_of_str = input.find_first_not_of(needle);\r\n        assert(find_first_not_of_str == 0u);\r\n\r\n        const auto find_first_not_of_str_none = input.find_first_not_of(input);\r\n        assert(find_first_not_of_str_none == str::npos);\r\n\r\n        const auto find_first_not_of_str_pos = input.find_first_not_of(needle, 6);\r\n        assert(find_first_not_of_str_pos == 6u);\r\n\r\n        const auto find_first_not_of_str_pos_none = input.find_first_not_of(input, 14);\r\n        assert(find_first_not_of_str_pos_none == str::npos);\r\n\r\n        const auto find_first_not_of_str_overflow = input.find_first_not_of(needle, 50);\r\n        assert(find_first_not_of_str_overflow == str::npos);\r\n\r\n        const auto find_first_not_of_literal = input.find_first_not_of(get_cat<CharType>());\r\n        assert(find_first_not_of_literal == 0u);\r\n\r\n        const auto find_first_not_of_literal_none = input.find_first_not_of(get_literal_input<CharType>());\r\n        assert(find_first_not_of_literal_none == str::npos);\r\n\r\n        const auto find_first_not_of_literal_pos = input.find_first_not_of(get_cat<CharType>(), 6);\r\n        assert(find_first_not_of_literal_pos == 6u);\r\n\r\n        const auto find_first_not_of_literal_pos_none = input.find_first_not_of(get_literal_input<CharType>(), 2);\r\n        assert(find_first_not_of_literal_pos_none == str::npos);\r\n\r\n        const auto find_first_not_of_literal_overflow = input.find_first_not_of(get_cat<CharType>(), 50);\r\n        assert(find_first_not_of_literal_overflow == str::npos);\r\n\r\n        const auto find_first_not_of_literal_pos_count = input.find_first_not_of(get_cat<CharType>(), 6, 4);\r\n        assert(find_first_not_of_literal_pos_count == 6u);\r\n\r\n        const auto find_first_not_of_literal_pos_count_none =\r\n            input.find_first_not_of(get_literal_input<CharType>(), 14, 20);\r\n        assert(find_first_not_of_literal_pos_count_none == str::npos);\r\n\r\n        const auto find_first_not_of_char = input.find_first_not_of(CharType{'H'});\r\n        assert(find_first_not_of_char == 1u);\r\n\r\n        const auto find_first_not_of_char_pos = input.find_first_not_of(CharType{'e'}, 1);\r\n        assert(find_first_not_of_char_pos == 2u);\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        const auto find_first_not_of_convertible = input.find_first_not_of(convertible);\r\n        assert(find_first_not_of_convertible == str::npos);\r\n\r\n        const auto find_first_not_of_convertible_pos = input.find_first_not_of(convertible, 2);\r\n        assert(find_first_not_of_convertible_pos == str::npos);\r\n    }\r\n\r\n    { // find_last_of\r\n        const str input     = get_literal_input<CharType>();\r\n        const str needle    = get_cat<CharType>();\r\n        const str no_needle = get_no_needle<CharType>();\r\n\r\n        const auto find_last_of_str = input.find_last_of(needle);\r\n        assert(find_last_of_str == 18u);\r\n\r\n        const auto find_last_of_str_none = input.find_last_of(no_needle);\r\n        assert(find_last_of_str_none == str::npos);\r\n\r\n        const auto find_last_of_str_pos = input.find_last_of(needle, 6);\r\n        assert(find_last_of_str_pos == 1u);\r\n\r\n        const auto find_last_of_str_pos_none = input.find_last_of(no_needle, 14);\r\n        assert(find_last_of_str_pos_none == str::npos);\r\n\r\n        const auto find_last_of_str_overflow = input.find_last_of(needle, 50);\r\n        assert(find_last_of_str_overflow == 18u);\r\n\r\n        const auto find_last_of_literal = input.find_last_of(get_cat<CharType>());\r\n        assert(find_last_of_literal == 18u);\r\n\r\n        const auto find_last_of_literal_none = input.find_last_of(get_no_needle<CharType>());\r\n        assert(find_last_of_literal_none == str::npos);\r\n\r\n        const auto find_last_of_literal_pos = input.find_last_of(get_cat<CharType>(), 6);\r\n        assert(find_last_of_literal_pos == 1u);\r\n\r\n        const auto find_last_of_literal_pos_none = input.find_last_of(get_no_needle<CharType>(), 14);\r\n        assert(find_last_of_literal_pos_none == str::npos);\r\n\r\n        const auto find_last_of_literal_overflow = input.find_last_of(get_cat<CharType>(), 50);\r\n        assert(find_last_of_literal_overflow == 18u);\r\n\r\n        const auto find_last_of_literal_pos_count = input.find_last_of(get_cat<CharType>(), 6, 7);\r\n        assert(find_last_of_literal_pos_count == 1u);\r\n\r\n        const auto find_last_of_literal_pos_count_none = input.find_last_of(get_no_needle<CharType>(), 14, 4);\r\n        assert(find_last_of_literal_pos_count_none == str::npos);\r\n\r\n        const auto find_last_of_char = input.find_last_of(CharType{'e'});\r\n        assert(find_last_of_char == 17u);\r\n\r\n        const auto find_last_of_char_none = input.find_last_of(CharType{'x'});\r\n        assert(find_last_of_char_none == str::npos);\r\n\r\n        const auto find_last_of_char_pos = input.find_last_of(CharType{'e'}, 4);\r\n        assert(find_last_of_char_pos == 1u);\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        const auto find_last_of_convertible = input.find_last_of(convertible);\r\n        assert(find_last_of_convertible == 19u);\r\n\r\n        const auto find_last_of_convertible_pos = input.find_last_of(convertible, 4);\r\n        assert(find_last_of_convertible_pos == 4u);\r\n    }\r\n\r\n    { // find_last_not_of\r\n        const str input     = get_literal_input<CharType>();\r\n        const str needle    = get_cat<CharType>();\r\n        const str no_needle = get_no_needle<CharType>();\r\n\r\n        const auto find_last_not_of_str = input.find_last_not_of(needle);\r\n        assert(find_last_not_of_str == 19u);\r\n\r\n        const auto find_last_not_of_str_none = input.find_last_not_of(input);\r\n        assert(find_last_not_of_str_none == str::npos);\r\n\r\n        const auto find_last_not_of_str_pos = input.find_last_not_of(needle, 6);\r\n        assert(find_last_not_of_str_pos == 6u);\r\n\r\n        const auto find_last_not_of_str_pos_none = input.find_last_not_of(input, 14);\r\n        assert(find_last_not_of_str_pos_none == str::npos);\r\n\r\n        const auto find_last_not_of_str_overflow = input.find_last_not_of(needle, 50);\r\n        assert(find_last_not_of_str_overflow == 19u);\r\n\r\n        const auto find_last_not_of_literal = input.find_last_not_of(get_cat<CharType>());\r\n        assert(find_last_not_of_literal == 19u);\r\n\r\n        const auto find_last_not_of_literal_none = input.find_last_not_of(get_literal_input<CharType>());\r\n        assert(find_last_not_of_literal_none == str::npos);\r\n\r\n        const auto find_last_not_of_literal_pos = input.find_last_not_of(get_cat<CharType>(), 6);\r\n        assert(find_last_not_of_literal_pos == 6u);\r\n\r\n        const auto find_last_not_of_literal_pos_none = input.find_last_not_of(get_literal_input<CharType>(), 2);\r\n        assert(find_last_not_of_literal_pos_none == str::npos);\r\n\r\n        const auto find_last_not_of_literal_overflow = input.find_last_not_of(get_cat<CharType>(), 50);\r\n        assert(find_last_not_of_literal_overflow == 19u);\r\n\r\n        const auto find_last_not_of_literal_pos_count = input.find_last_not_of(get_cat<CharType>(), 6, 4);\r\n        assert(find_last_not_of_literal_pos_count == 6u);\r\n\r\n        const auto find_last_not_of_literal_pos_count_none =\r\n            input.find_last_not_of(get_literal_input<CharType>(), 14, 20);\r\n        assert(find_last_not_of_literal_pos_count_none == str::npos);\r\n\r\n        const auto find_last_not_of_char = input.find_last_not_of(CharType{'H'});\r\n        assert(find_last_not_of_char == 19u);\r\n\r\n        const auto find_last_not_of_char_pos = input.find_last_not_of(CharType{'e'}, 2);\r\n        assert(find_last_not_of_char_pos == 2u);\r\n\r\n        const string_view_convertible<CharType> convertible;\r\n        const auto find_last_not_of_convertible = input.find_last_not_of(convertible);\r\n        assert(find_last_not_of_convertible == str::npos);\r\n\r\n        const auto find_last_not_of_convertible_pos = input.find_last_not_of(convertible, 2);\r\n        assert(find_last_not_of_convertible_pos == str::npos);\r\n    }\r\n\r\n    { // operator+\r\n        const str first  = get_cat<CharType>();\r\n        const str second = get_dog<CharType>();\r\n\r\n        const str op_str_str = first + second;\r\n        assert(ranges::equal(op_str_str, \"kittendog\"sv));\r\n\r\n        const str op_str_literal = first + get_dog<CharType>();\r\n        assert(ranges::equal(op_str_literal, \"kittendog\"sv));\r\n\r\n        const str op_str_char = first + CharType{'!'};\r\n        assert(ranges::equal(op_str_char, \"kitten!\"sv));\r\n\r\n        const str op_literal_str = get_cat<CharType>() + second;\r\n        assert(ranges::equal(op_literal_str, \"kittendog\"sv));\r\n\r\n        const str op_char_str = CharType{'!'} + second;\r\n        assert(ranges::equal(op_char_str, \"!dog\"sv));\r\n\r\n        const str op_rstr_rstr = str{get_cat<CharType>()} + str{get_dog<CharType>()};\r\n        assert(ranges::equal(op_rstr_rstr, \"kittendog\"sv));\r\n\r\n        const str op_rstr_str = str{get_cat<CharType>()} + second;\r\n        assert(ranges::equal(op_rstr_str, \"kittendog\"sv));\r\n\r\n        const str op_rstr_literal = str{get_cat<CharType>()} + get_dog<CharType>();\r\n        assert(ranges::equal(op_rstr_literal, \"kittendog\"sv));\r\n\r\n        const str op_rstr_char = str{get_cat<CharType>()} + CharType{'!'};\r\n        assert(ranges::equal(op_rstr_char, \"kitten!\"sv));\r\n\r\n        const str op_str_rstr = first + str{get_dog<CharType>()};\r\n        assert(ranges::equal(op_str_rstr, \"kittendog\"sv));\r\n\r\n        const str op_literal_rstr = get_cat<CharType>() + str{get_dog<CharType>()};\r\n        assert(ranges::equal(op_literal_rstr, \"kittendog\"sv));\r\n\r\n        const str op_char_rstr = CharType{'!'} + str{get_dog<CharType>()};\r\n        assert(ranges::equal(op_char_rstr, \"!dog\"sv));\r\n    }\r\n\r\n    { // comparison\r\n        str first(get_view_input<CharType>());\r\n        str second(get_view_input<CharType>());\r\n        str third{get_cat<CharType>()};\r\n\r\n        const bool eq_str_str = first == second;\r\n        assert(eq_str_str);\r\n\r\n        const bool ne_str_str = first != third;\r\n        assert(ne_str_str);\r\n\r\n        const bool less_str_str = first < third;\r\n        assert(less_str_str);\r\n\r\n        const bool less_eq_str_str = first <= third;\r\n        assert(less_eq_str_str);\r\n\r\n        const bool greater_str_str = first > third;\r\n        assert(!greater_str_str);\r\n\r\n        const bool greater_eq_str_str = first >= third;\r\n        assert(!greater_eq_str_str);\r\n\r\n        const bool eq_str_literal = first == get_view_input<CharType>();\r\n        assert(eq_str_literal);\r\n\r\n        const bool ne_str_literal = first != get_cat<CharType>();\r\n        assert(ne_str_literal);\r\n\r\n        const bool less_str_literal = first < get_cat<CharType>();\r\n        assert(less_str_literal);\r\n\r\n        const bool less_eq_str_literal = first <= get_cat<CharType>();\r\n        assert(less_eq_str_literal);\r\n\r\n        const bool greater_str_literal = first > get_cat<CharType>();\r\n        assert(!greater_str_literal);\r\n\r\n        const bool greater_eq_str_literal = first >= get_cat<CharType>();\r\n        assert(!greater_eq_str_literal);\r\n\r\n        const bool eq_literal_str = get_view_input<CharType>() == second;\r\n        assert(eq_literal_str);\r\n\r\n        const bool ne_literal_str = get_view_input<CharType>() != third;\r\n        assert(ne_literal_str);\r\n\r\n        const bool less_literal_str = get_view_input<CharType>() < third;\r\n        assert(less_literal_str);\r\n\r\n        const bool less_eq_literal_str = get_view_input<CharType>() <= third;\r\n        assert(less_eq_literal_str);\r\n\r\n        const bool greater_literal_str = get_view_input<CharType>() > third;\r\n        assert(!greater_literal_str);\r\n\r\n        const bool greater_eq_literal_str = get_view_input<CharType>() >= third;\r\n        assert(!greater_eq_literal_str);\r\n\r\n        const strong_ordering spaceship_str_str_eq = first <=> second;\r\n        assert(spaceship_str_str_eq == strong_ordering::equal);\r\n\r\n        const strong_ordering spaceship_str_str_less = first <=> third;\r\n        assert(spaceship_str_str_less == strong_ordering::less);\r\n\r\n        const strong_ordering spaceship_str_str_greater = third <=> first;\r\n        assert(spaceship_str_str_greater == strong_ordering::greater);\r\n\r\n        const strong_ordering spaceship_str_literal_eq = first <=> get_view_input<CharType>();\r\n        assert(spaceship_str_literal_eq == strong_ordering::equal);\r\n\r\n        const strong_ordering spaceship_str_literal_less = first <=> get_cat<CharType>();\r\n        assert(spaceship_str_literal_less == strong_ordering::less);\r\n\r\n        const strong_ordering spaceship_str_literal_greater = third <=> get_dog<CharType>();\r\n        assert(spaceship_str_literal_greater == strong_ordering::greater);\r\n    }\r\n\r\n    { // basic_string_view conversion\r\n        str s                          = get_literal_input<CharType>();\r\n        basic_string_view<CharType> sv = s;\r\n        assert(ranges::equal(sv, \"Hello fluffy kittens\"sv));\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_udls() {\r\n    assert(ranges::equal(\"purr purr\"s, \"purr purr\"sv));\r\n#ifdef __cpp_char8_t\r\n    assert(ranges::equal(u8\"purr purr\"s, \"purr purr\"sv));\r\n#endif // __cpp_char8_t\r\n    assert(ranges::equal(u\"purr purr\"s, \"purr purr\"sv));\r\n    assert(ranges::equal(U\"purr purr\"s, \"purr purr\"sv));\r\n    assert(ranges::equal(L\"purr purr\"s, \"purr purr\"sv));\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class CharType>\r\nstruct CharLikeType {\r\n    constexpr CharLikeType() = default;\r\n    constexpr CharLikeType(CharType cc) : c(cc) {}\r\n    CharType c;\r\n};\r\n\r\ntemplate <class CharType>\r\nconstexpr bool test_iterators() {\r\n    using str               = basic_string<CharType>;\r\n    str literal_constructed = get_literal_input<CharType>();\r\n\r\n    { // assignment\r\n        auto it   = literal_constructed.begin();\r\n        auto it2  = literal_constructed.end();\r\n        auto cit  = literal_constructed.cbegin();\r\n        auto cit2 = literal_constructed.cend();\r\n\r\n        it  = it2;\r\n        cit = cit2;\r\n    }\r\n\r\n    { // op->\r\n        basic_string<CharLikeType<CharType>> bs{CharType{'x'}};\r\n        auto it = bs.begin();\r\n        auto c  = it->c;\r\n        assert(c == CharType{'x'});\r\n\r\n        auto cit = bs.cbegin();\r\n        auto cc  = cit->c;\r\n        assert(cc == CharType{'x'});\r\n    }\r\n\r\n    { // increment\r\n        auto it = literal_constructed.begin();\r\n        assert(*++it == CharType{'e'});\r\n        assert(*it++ == CharType{'e'});\r\n        assert(*it == CharType{'l'});\r\n\r\n        auto cit = literal_constructed.cbegin();\r\n        assert(*++cit == CharType{'e'});\r\n        assert(*cit++ == CharType{'e'});\r\n        assert(*cit == CharType{'l'});\r\n    }\r\n\r\n    { // advance\r\n        auto it = literal_constructed.begin() + 2;\r\n        assert(*it == CharType{'l'});\r\n        it += 2;\r\n        assert(*it == CharType{'o'});\r\n        it = 2 + it;\r\n        assert(*it == CharType{'f'});\r\n\r\n        auto cit = literal_constructed.cbegin() + 2;\r\n        assert(*cit == CharType{'l'});\r\n        cit += 2;\r\n        assert(*cit == CharType{'o'});\r\n        cit = 2 + cit;\r\n        assert(*cit == CharType{'f'});\r\n    }\r\n\r\n    { // decrement\r\n        auto it = literal_constructed.end();\r\n        assert(*--it == CharType{'s'});\r\n        assert(*it-- == CharType{'s'});\r\n        assert(*it == CharType{'n'});\r\n\r\n        auto cit = literal_constructed.cend();\r\n        assert(*--cit == CharType{'s'});\r\n        assert(*cit-- == CharType{'s'});\r\n        assert(*cit == CharType{'n'});\r\n    }\r\n\r\n    { // advance back\r\n        auto it = literal_constructed.end() - 2;\r\n        assert(*it == CharType{'n'});\r\n        it -= 2;\r\n        assert(*it == CharType{'t'});\r\n\r\n        auto cit = literal_constructed.cend() - 2;\r\n        assert(*cit == CharType{'n'});\r\n        cit -= 2;\r\n        assert(*cit == CharType{'t'});\r\n    }\r\n\r\n    { // difference\r\n        const auto it1 = literal_constructed.begin();\r\n        const auto it2 = literal_constructed.end();\r\n        assert(it2 - it1 == ssize(get_view_input<CharType>()));\r\n\r\n        const auto cit1 = literal_constructed.cbegin();\r\n        const auto cit2 = literal_constructed.cend();\r\n        assert(cit2 - cit1 == ssize(get_view_input<CharType>()));\r\n\r\n        assert(it2 - cit1 == ssize(get_view_input<CharType>()));\r\n        assert(cit2 - it1 == ssize(get_view_input<CharType>()));\r\n    }\r\n\r\n    { // comparison\r\n        const auto it1 = literal_constructed.begin();\r\n        const auto it2 = literal_constructed.begin();\r\n        const auto it3 = literal_constructed.end();\r\n\r\n        assert(it1 == it2);\r\n        assert(it1 != it3);\r\n        assert(it1 < it3);\r\n        assert(it1 <= it3);\r\n        assert(it3 > it1);\r\n        assert(it3 >= it1);\r\n\r\n        assert((it1 <=> it2) == strong_ordering::equal);\r\n        assert((it1 <=> it3) == strong_ordering::less);\r\n        assert((it3 <=> it1) == strong_ordering::greater);\r\n    }\r\n\r\n    { // access\r\n        const auto it = literal_constructed.begin() + 2;\r\n        it[2]         = CharType{'l'};\r\n        assert(literal_constructed[4] == CharType{'l'});\r\n\r\n        const auto cit = literal_constructed.cbegin() + 2;\r\n        assert(cit[2] == CharType{'l'});\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr bool test_growth() {\r\n    using str = basic_string<CharType>;\r\n    {\r\n        str v(1007, CharType{'a'});\r\n\r\n        assert(v.size() == 1007);\r\n        assert(v.capacity() == 1007);\r\n\r\n        v.resize(1008);\r\n\r\n        assert(v.size() == 1008);\r\n        assert(v.capacity() == 1510);\r\n    }\r\n\r\n    {\r\n        str v(1007, CharType{'a'});\r\n\r\n        assert(v.size() == 1007);\r\n        assert(v.capacity() == 1007);\r\n\r\n        v.resize(8007);\r\n\r\n        assert(v.size() == 8007);\r\n        if constexpr (is_same_v<CharType, char16_t> || is_same_v<CharType, char32_t> || is_same_v<CharType, wchar_t>) {\r\n            assert(v.capacity() == 8007);\r\n        } else {\r\n            assert(v.capacity() == 8015);\r\n        }\r\n    }\r\n\r\n    {\r\n        str v(1007, CharType{'a'});\r\n\r\n        assert(v.size() == 1007);\r\n        assert(v.capacity() == 1007);\r\n\r\n        v.push_back(CharType{'b'});\r\n\r\n        assert(v.size() == 1008);\r\n        assert(v.capacity() == 1510);\r\n    }\r\n\r\n    {\r\n        str v(1007, CharType{'a'});\r\n\r\n        assert(v.size() == 1007);\r\n        assert(v.capacity() == 1007);\r\n\r\n        str l(3, CharType{'b'});\r\n\r\n        v.insert(v.end(), l.begin(), l.end());\r\n\r\n        assert(v.size() == 1010);\r\n        assert(v.capacity() == 1510);\r\n    }\r\n\r\n    {\r\n        str v(1007, CharType{'a'});\r\n\r\n        assert(v.size() == 1007);\r\n        assert(v.capacity() == 1007);\r\n\r\n        str l(7000, CharType{'b'});\r\n\r\n        v.insert(v.end(), l.begin(), l.end());\r\n\r\n        assert(v.size() == 8007);\r\n        if constexpr (is_same_v<CharType, char16_t> || is_same_v<CharType, char32_t> || is_same_v<CharType, wchar_t>) {\r\n            assert(v.capacity() == 8007);\r\n        } else {\r\n            assert(v.capacity() == 8015);\r\n        }\r\n    }\r\n\r\n    {\r\n        str v(1007, CharType{'a'});\r\n\r\n        assert(v.size() == 1007);\r\n        assert(v.capacity() == 1007);\r\n\r\n        v.insert(v.end(), 3, CharType{'b'});\r\n\r\n        assert(v.size() == 1010);\r\n        assert(v.capacity() == 1510);\r\n    }\r\n\r\n    {\r\n        str v(1007, CharType{'a'});\r\n\r\n        assert(v.size() == 1007);\r\n        assert(v.capacity() == 1007);\r\n\r\n        v.insert(v.end(), 7000, CharType{'b'});\r\n\r\n        assert(v.size() == 8007);\r\n        if constexpr (is_same_v<CharType, char16_t> || is_same_v<CharType, char32_t> || is_same_v<CharType, wchar_t>) {\r\n            assert(v.capacity() == 8007);\r\n        } else {\r\n            assert(v.capacity() == 8015);\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr void test_copy_ctor() {\r\n    using Str = basic_string<CharType, char_traits<CharType>, StationaryAlloc<CharType>>;\r\n\r\n    { // Allocated\r\n        Str range_constructed(get_view_input<CharType>(), StationaryAlloc<CharType>{11});\r\n        Str copy_constructed(range_constructed);\r\n        assert(ranges::equal(range_constructed, get_view_input<CharType>()));\r\n        assert(ranges::equal(copy_constructed, get_view_input<CharType>()));\r\n        assert(range_constructed.get_allocator().id() == 11);\r\n        assert(copy_constructed.get_allocator().id() == 11);\r\n    }\r\n\r\n    { // SSO\r\n        Str range_constructed_sso(get_cat_view<CharType>(), StationaryAlloc<CharType>{11});\r\n        Str copy_constructed_sso(range_constructed_sso);\r\n        assert(ranges::equal(range_constructed_sso, get_cat_view<CharType>()));\r\n        assert(ranges::equal(copy_constructed_sso, get_cat_view<CharType>()));\r\n        assert(range_constructed_sso.get_allocator().id() == 11);\r\n        assert(copy_constructed_sso.get_allocator().id() == 11);\r\n    }\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr void test_copy_alloc_ctor(const size_t id1, const size_t id2) {\r\n    using Str = basic_string<CharType, char_traits<CharType>, StationaryAlloc<CharType>>;\r\n\r\n    { // Allocated\r\n        Str range_constructed(get_view_input<CharType>(), StationaryAlloc<CharType>{id1});\r\n        Str copy_constructed(range_constructed, StationaryAlloc<CharType>{id2});\r\n        assert(ranges::equal(range_constructed, get_view_input<CharType>()));\r\n        assert(ranges::equal(copy_constructed, get_view_input<CharType>()));\r\n        assert(range_constructed.get_allocator().id() == id1);\r\n        assert(copy_constructed.get_allocator().id() == id2);\r\n    }\r\n\r\n    { // SSO\r\n        Str range_constructed_sso(get_cat_view<CharType>(), StationaryAlloc<CharType>{id1});\r\n        Str copy_constructed_sso(range_constructed_sso, StationaryAlloc<CharType>{id2});\r\n        assert(ranges::equal(range_constructed_sso, get_cat_view<CharType>()));\r\n        assert(ranges::equal(copy_constructed_sso, get_cat_view<CharType>()));\r\n        assert(range_constructed_sso.get_allocator().id() == id1);\r\n        assert(copy_constructed_sso.get_allocator().id() == id2);\r\n    }\r\n}\r\n\r\ntemplate <class CharType, class Alloc>\r\nconstexpr void test_copy_assign(const size_t id1, const size_t id2, const size_t id3) {\r\n    using Str = basic_string<CharType, char_traits<CharType>, Alloc>;\r\n\r\n    { // Allocated to SSO\r\n        Str range_constructed(get_view_input<CharType>(), Alloc{id1});\r\n        Str copy_assigned(get_cat_view<CharType>(), Alloc{id2});\r\n\r\n        copy_assigned = range_constructed;\r\n        assert(ranges::equal(range_constructed, get_view_input<CharType>()));\r\n        assert(ranges::equal(copy_assigned, get_view_input<CharType>()));\r\n        assert(range_constructed.get_allocator().id() == id1);\r\n        assert(copy_assigned.get_allocator().id() == id3);\r\n    }\r\n\r\n    { // SSO to SSO\r\n        Str range_constructed(get_dog_view<CharType>(), Alloc{id1});\r\n        Str copy_assigned(get_cat_view<CharType>(), Alloc{id2});\r\n\r\n        copy_assigned = range_constructed;\r\n        assert(ranges::equal(range_constructed, get_dog_view<CharType>()));\r\n        assert(ranges::equal(copy_assigned, get_dog_view<CharType>()));\r\n        assert(range_constructed.get_allocator().id() == id1);\r\n        assert(copy_assigned.get_allocator().id() == id3);\r\n    }\r\n\r\n    { // SSO to Allocated\r\n        Str range_constructed(get_dog_view<CharType>(), Alloc{id1});\r\n        Str copy_assigned(get_view_input<CharType>(), Alloc{id2});\r\n\r\n        copy_assigned = range_constructed;\r\n        assert(ranges::equal(range_constructed, get_dog_view<CharType>()));\r\n        assert(ranges::equal(copy_assigned, get_dog_view<CharType>()));\r\n        assert(range_constructed.get_allocator().id() == id1);\r\n        assert(copy_assigned.get_allocator().id() == id3);\r\n    }\r\n\r\n    { // Allocated to Allocated\r\n        Str range_constructed(get_view_input<CharType>(), Alloc{id1});\r\n        Str copy_assigned(get_view_input<CharType>(), Alloc{id2});\r\n        copy_assigned.resize(30, 'a');\r\n\r\n        copy_assigned = range_constructed;\r\n        assert(ranges::equal(range_constructed, get_view_input<CharType>()));\r\n        assert(ranges::equal(copy_assigned, get_view_input<CharType>()));\r\n        assert(range_constructed.get_allocator().id() == id1);\r\n        assert(copy_assigned.get_allocator().id() == id3);\r\n    }\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr void test_move_ctor() {\r\n    using Str = basic_string<CharType, char_traits<CharType>, StationaryAlloc<CharType>>;\r\n\r\n    { // Allocated\r\n        // Iterators are taken over if the allocators are equal and source is large\r\n        Str range_constructed(get_view_input<CharType>(), StationaryAlloc<CharType>{11});\r\n        const auto test_it = range_constructed.begin();\r\n        Str move_constructed(move(range_constructed));\r\n\r\n        assert(test_it == move_constructed.begin());\r\n        assert(range_constructed.empty());\r\n        assert(ranges::equal(move_constructed, get_view_input<CharType>()));\r\n        assert(range_constructed.get_allocator().id() == 11);\r\n        assert(move_constructed.get_allocator().id() == 11);\r\n    }\r\n\r\n    { // SSO\r\n        Str range_constructed(get_cat_view<CharType>(), StationaryAlloc<CharType>{11});\r\n        Str move_constructed(move(range_constructed));\r\n\r\n        assert(range_constructed.empty());\r\n        assert(ranges::equal(move_constructed, get_cat_view<CharType>()));\r\n        assert(range_constructed.get_allocator().id() == 11);\r\n        assert(move_constructed.get_allocator().id() == 11);\r\n    }\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr void test_move_alloc_ctor(const size_t id1, const size_t id2) {\r\n    using Str = basic_string<CharType, char_traits<CharType>, StationaryAlloc<CharType>>;\r\n\r\n    { // Allocated\r\n        // Iterators are taken over if the allocators are equal and source is large\r\n        Str range_constructed(get_view_input<CharType>(), StationaryAlloc<CharType>{id1});\r\n        const auto test_it = range_constructed.begin();\r\n        Str move_constructed(move(range_constructed), StationaryAlloc<CharType>{id2});\r\n\r\n        assert(id1 != id2 || test_it == move_constructed.begin());\r\n        assert((id1 == id2) == range_constructed.empty());\r\n        assert(ranges::equal(move_constructed, get_view_input<CharType>()));\r\n        assert(range_constructed.get_allocator().id() == id1);\r\n        assert(move_constructed.get_allocator().id() == id2);\r\n    }\r\n\r\n    { // SSO\r\n        Str range_constructed(get_cat_view<CharType>(), StationaryAlloc<CharType>{id1});\r\n        Str move_constructed(move(range_constructed), StationaryAlloc<CharType>{id2});\r\n\r\n        assert((id1 == id2) == range_constructed.empty());\r\n        assert(ranges::equal(move_constructed, get_cat_view<CharType>()));\r\n        assert(range_constructed.get_allocator().id() == id1);\r\n        assert(move_constructed.get_allocator().id() == id2);\r\n    }\r\n}\r\n\r\ntemplate <class CharType, class Alloc>\r\nconstexpr void test_move_assign(const size_t id1, const size_t id2, const size_t id3) {\r\n    using Str = basic_string<CharType, char_traits<CharType>, Alloc>;\r\n    // Iterators are taken over if the allocators are equal and source is large\r\n\r\n    { // Allocated to SSO\r\n        Str range_constructed(get_view_input<CharType>(), Alloc{id1});\r\n        const auto test_it = range_constructed.begin();\r\n        Str move_assigned(get_cat_view<CharType>(), Alloc{id2});\r\n\r\n        move_assigned = move(range_constructed);\r\n        assert(id1 != id3 || test_it == move_assigned.begin());\r\n        assert((id1 == id3) == range_constructed.empty());\r\n        assert(ranges::equal(move_assigned, get_view_input<CharType>()));\r\n        assert(range_constructed.get_allocator().id() == id1);\r\n        assert(move_assigned.get_allocator().id() == id3);\r\n    }\r\n\r\n    { // SSO to SSO\r\n        Str range_constructed(get_dog_view<CharType>(), Alloc{id1});\r\n        Str move_assigned(get_cat_view<CharType>(), Alloc{id2});\r\n\r\n        move_assigned = move(range_constructed);\r\n        assert((id1 == id3) == range_constructed.empty());\r\n        assert(ranges::equal(move_assigned, get_dog_view<CharType>()));\r\n        assert(range_constructed.get_allocator().id() == id1);\r\n        assert(move_assigned.get_allocator().id() == id3);\r\n    }\r\n\r\n    { // SSO to Allocated\r\n        Str range_constructed(get_dog_view<CharType>(), Alloc{id1});\r\n        Str move_assigned(get_view_input<CharType>(), Alloc{id2});\r\n\r\n        move_assigned = move(range_constructed);\r\n        assert((id1 == id3) == range_constructed.empty());\r\n        assert(ranges::equal(move_assigned, get_dog_view<CharType>()));\r\n        assert(range_constructed.get_allocator().id() == id1);\r\n        assert(move_assigned.get_allocator().id() == id3);\r\n    }\r\n\r\n    { // Allocated to Allocated\r\n        Str range_constructed(get_view_input<CharType>(), Alloc{id1});\r\n        Str move_assigned(get_view_input<CharType>(), Alloc{id2});\r\n        move_assigned.resize(30, 'a');\r\n        const auto test_it = range_constructed.begin();\r\n\r\n        move_assigned = move(range_constructed);\r\n        assert(id1 != id3 || test_it == move_assigned.begin());\r\n        assert((id1 == id3) == range_constructed.empty());\r\n        assert(ranges::equal(move_assigned, get_view_input<CharType>()));\r\n        assert(range_constructed.get_allocator().id() == id1);\r\n        assert(move_assigned.get_allocator().id() == id3);\r\n    }\r\n}\r\n\r\ntemplate <class CharType, class Alloc>\r\nconstexpr void test_swap(const size_t id1, const size_t id2) {\r\n    using Str = basic_string<CharType, char_traits<CharType>, Alloc>;\r\n    { // Allocated to SSO\r\n        Str lhs(get_view_input<CharType>(), Alloc{id1});\r\n        Str rhs(get_cat_view<CharType>(), Alloc{id2});\r\n        const auto lhs_begin = lhs.begin();\r\n\r\n        lhs.swap(rhs);\r\n        assert(lhs_begin == rhs.begin());\r\n\r\n        assert(ranges::equal(lhs, get_cat_view<CharType>()));\r\n        assert(ranges::equal(rhs, get_view_input<CharType>()));\r\n\r\n        assert(lhs.get_allocator().id() == id2);\r\n        assert(rhs.get_allocator().id() == id1);\r\n    }\r\n\r\n    { // SSO to SSO\r\n        Str lhs(get_dog_view<CharType>(), Alloc{id1});\r\n        Str rhs(get_cat_view<CharType>(), Alloc{id2});\r\n\r\n        lhs.swap(rhs);\r\n        assert(ranges::equal(lhs, get_cat_view<CharType>()));\r\n        assert(ranges::equal(rhs, get_dog_view<CharType>()));\r\n\r\n        assert(lhs.get_allocator().id() == id2);\r\n        assert(rhs.get_allocator().id() == id1);\r\n    }\r\n\r\n    { // SSO to Allocated\r\n        Str lhs(get_dog_view<CharType>(), Alloc{id1});\r\n        Str rhs(get_view_input<CharType>(), Alloc{id2});\r\n        const auto rhs_begin = rhs.begin();\r\n\r\n        lhs.swap(rhs);\r\n        assert(rhs_begin == lhs.begin());\r\n\r\n        assert(ranges::equal(lhs, get_view_input<CharType>()));\r\n        assert(ranges::equal(rhs, get_dog_view<CharType>()));\r\n\r\n        assert(lhs.get_allocator().id() == id2);\r\n        assert(rhs.get_allocator().id() == id1);\r\n    }\r\n\r\n    { // Allocated to Allocated\r\n        Str lhs(get_view_input<CharType>(), Alloc{id1});\r\n        Str rhs(get_view_input<CharType>(), Alloc{id2});\r\n        rhs.resize(30, 'a');\r\n        const auto lhs_begin = lhs.begin();\r\n        const auto rhs_begin = rhs.begin();\r\n\r\n        Str expected_lhs = rhs;\r\n\r\n        lhs.swap(rhs);\r\n        assert(lhs_begin == rhs.begin());\r\n        assert(rhs_begin == lhs.begin());\r\n\r\n        assert(ranges::equal(lhs, expected_lhs));\r\n        assert(ranges::equal(rhs, get_view_input<CharType>()));\r\n\r\n        assert(lhs.get_allocator().id() == id2);\r\n        assert(rhs.get_allocator().id() == id1);\r\n    }\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr bool test_allocator_awareness() {\r\n    test_copy_ctor<CharType>();\r\n    test_copy_alloc_ctor<CharType>(11, 11); // equal allocators\r\n    test_copy_alloc_ctor<CharType>(11, 22); // non-equal allocators\r\n    test_copy_assign<CharType, StationaryAlloc<CharType>>(11, 11, 11); // non-POCCA, equal allocators\r\n    test_copy_assign<CharType, StationaryAlloc<CharType>>(11, 22, 22); // non-POCCA, non-equal allocators\r\n    test_copy_assign<CharType, CopyAlloc<CharType>>(11, 11, 11); // POCCA, equal allocators\r\n    test_copy_assign<CharType, CopyAlloc<CharType>>(11, 22, 11); // POCCA, non-equal allocators\r\n    test_copy_assign<CharType, CopyEqualAlloc<CharType>>(11, 22, 11); // POCCA, always-equal allocators\r\n\r\n    test_move_ctor<CharType>();\r\n    test_move_alloc_ctor<CharType>(11, 11); // equal allocators\r\n    test_move_alloc_ctor<CharType>(11, 22); // non-equal allocators\r\n\r\n    test_move_assign<CharType, StationaryAlloc<CharType>>(11, 11, 11); // non-POCMA, equal allocators\r\n    test_move_assign<CharType, StationaryAlloc<CharType>>(11, 22, 22); // non-POCMA, non-equal allocators\r\n    test_move_assign<CharType, MoveAlloc<CharType>>(11, 11, 11); // POCMA, equal allocators\r\n    test_move_assign<CharType, MoveAlloc<CharType>>(11, 22, 11); // POCMA, non-equal allocators\r\n    test_move_assign<CharType, MoveEqualAlloc<CharType>>(11, 22, 11); // POCMA, always-equal allocators\r\n\r\n    test_swap<CharType, StationaryAlloc<CharType>>(11, 11); // non-POCS, equal allocators\r\n    // UNDEFINED BEHAVIOR, NOT TESTED - non-POCS, non-equal allocators\r\n    test_swap<CharType, SwapAlloc<CharType>>(11, 11); // POCS, equal allocators\r\n    test_swap<CharType, SwapAlloc<CharType>>(11, 22); // POCS, non-equal allocators\r\n    test_swap<CharType, SwapEqualAlloc<CharType>>(11, 22); // POCS, always-equal allocators\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class CharType>\r\nconstexpr void test_all() {\r\n    test_interface<CharType>();\r\n    test_iterators<CharType>();\r\n    test_growth<CharType>();\r\n    test_allocator_awareness<CharType>();\r\n\r\n    static_assert(test_interface<CharType>());\r\n    static_assert(test_iterators<CharType>());\r\n    static_assert(test_growth<CharType>());\r\n    static_assert(test_allocator_awareness<CharType>());\r\n}\r\n\r\n#if _HAS_CXX23\r\ntemplate <class I>\r\nvoid test_gh_2524() { // COMPILE-ONLY\r\n    // GH-2524 resize_and_overwrite generates warning C4018 when Operation returns int\r\n    string s;\r\n    s.resize_and_overwrite(1, [](char* buffer, size_t) {\r\n        *buffer = 'x';\r\n        I i     = 1;\r\n        return i;\r\n    });\r\n}\r\n\r\nvoid test_gh_2524_all() { // COMPILE-ONLY\r\n    test_gh_2524<signed char>();\r\n    test_gh_2524<short>();\r\n    test_gh_2524<int>();\r\n    test_gh_2524<long>();\r\n    test_gh_2524<long long>();\r\n\r\n    test_gh_2524<unsigned char>();\r\n    test_gh_2524<unsigned short>();\r\n    test_gh_2524<unsigned int>();\r\n    test_gh_2524<unsigned long>();\r\n    test_gh_2524<unsigned long long>();\r\n\r\n    test_gh_2524<char>();\r\n#ifdef __cpp_char8_t\r\n    test_gh_2524<char8_t>();\r\n#endif // defined(__cpp_char8_t)\r\n    test_gh_2524<char16_t>();\r\n    test_gh_2524<char32_t>();\r\n    test_gh_2524<wchar_t>();\r\n\r\n    test_gh_2524<_Signed128>();\r\n    test_gh_2524<_Unsigned128>();\r\n}\r\n#endif // _HAS_CXX23\r\n\r\nint main() {\r\n    test_all<char>();\r\n#ifdef __cpp_char8_t\r\n    test_all<char8_t>();\r\n#endif // __cpp_char8_t\r\n    test_all<char16_t>();\r\n    test_all<char32_t>();\r\n    test_all<wchar_t>();\r\n\r\n    test_udls();\r\n    static_assert(test_udls());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1004R2_constexpr_vector/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1004R2_constexpr_vector/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <iterator>\r\n#include <memory>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr int input[] = {0, 1, 2, 3, 4, 5};\r\n\r\ntemplate <typename T>\r\nstruct soccc_allocator {\r\n    using value_type = T;\r\n\r\n    constexpr soccc_allocator() noexcept = default;\r\n    constexpr explicit soccc_allocator(const int id_) noexcept : id(id_), soccc_generation(0) {}\r\n    constexpr explicit soccc_allocator(const int id_, const int soccc_generation_) noexcept\r\n        : id(id_), soccc_generation(soccc_generation_) {}\r\n    template <typename U>\r\n    constexpr soccc_allocator(const soccc_allocator<U>& other) noexcept\r\n        : id(other.id), soccc_generation(other.soccc_generation) {}\r\n    constexpr soccc_allocator(const soccc_allocator& other) noexcept\r\n        : id(other.id + 1), soccc_generation(other.soccc_generation) {}\r\n\r\n    constexpr soccc_allocator& operator=(const soccc_allocator&) noexcept {\r\n        return *this;\r\n    }\r\n\r\n    constexpr soccc_allocator select_on_container_copy_construction() const noexcept {\r\n        return soccc_allocator(id, soccc_generation + 1);\r\n    }\r\n\r\n    template <typename U>\r\n    constexpr bool operator==(const soccc_allocator<U>&) const noexcept {\r\n        return true;\r\n    }\r\n\r\n    constexpr T* allocate(const size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    constexpr void deallocate(T* const p, const size_t n) noexcept {\r\n        allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class... Args>\r\n    constexpr void construct(T* const p, Args&&... args) {\r\n        construct_at(p, forward<Args>(args)...);\r\n    }\r\n\r\n    int id               = 0;\r\n    int soccc_generation = 0;\r\n};\r\n\r\nusing vec = vector<int, soccc_allocator<int>>;\r\n\r\nconstexpr bool test_interface() {\r\n    { // constructors\r\n\r\n        // Non allocator constructors\r\n        vec size_default_constructed(5);\r\n        assert(size_default_constructed.size() == 5);\r\n        assert(all_of(\r\n            size_default_constructed.begin(), size_default_constructed.end(), [](const int val) { return val == 0; }));\r\n\r\n        vec size_value_constructed(5, 7);\r\n        assert(size_value_constructed.size() == 5);\r\n        assert(all_of(\r\n            size_value_constructed.begin(), size_value_constructed.end(), [](const int val) { return val == 7; }));\r\n\r\n        vec range_constructed(begin(input), end(input));\r\n        assert(equal(range_constructed.begin(), range_constructed.end(), begin(input), end(input)));\r\n\r\n        vec initializer_list_constructed({2, 3, 4, 5});\r\n        assert(equal(\r\n            initializer_list_constructed.begin(), initializer_list_constructed.end(), begin(input) + 2, end(input)));\r\n\r\n        // special member functions\r\n        vec default_constructed;\r\n        assert(default_constructed.empty());\r\n        vec copy_constructed(size_default_constructed);\r\n        assert(equal(copy_constructed.begin(), copy_constructed.end(), size_default_constructed.begin(),\r\n            size_default_constructed.end()));\r\n\r\n        vec move_constructed(move(copy_constructed));\r\n        assert(equal(move_constructed.begin(), move_constructed.end(), size_default_constructed.begin(),\r\n            size_default_constructed.end()));\r\n\r\n        assert(copy_constructed.empty()); // implementation-specific assumption that moved-from is empty\r\n\r\n        vec copy_assigned = range_constructed;\r\n        assert(equal(copy_assigned.begin(), copy_assigned.end(), range_constructed.begin(), range_constructed.end()));\r\n\r\n        vec move_assigned = move(copy_assigned);\r\n        assert(equal(move_assigned.begin(), move_assigned.end(), range_constructed.begin(), range_constructed.end()));\r\n        assert(copy_assigned.empty()); // implementation-specific assumption that moved-from is empty\r\n\r\n        // allocator constructors\r\n        soccc_allocator<int> alloc(2, 3);\r\n        assert(alloc.id == 2);\r\n        assert(alloc.soccc_generation == 3);\r\n\r\n        vec al_default_constructed(alloc);\r\n        assert(al_default_constructed.empty());\r\n        assert(al_default_constructed.get_allocator().id == 4);\r\n        assert(al_default_constructed.get_allocator().soccc_generation == 3);\r\n\r\n        vec al_copy_constructed(size_value_constructed, alloc);\r\n        assert(all_of(al_copy_constructed.begin(), al_copy_constructed.end(), [](const int val) { return val == 7; }));\r\n        assert(al_copy_constructed.get_allocator().id == 4);\r\n        assert(al_copy_constructed.get_allocator().soccc_generation == 3);\r\n\r\n        vec al_move_constructed(move(al_copy_constructed), alloc);\r\n        assert(all_of(al_move_constructed.begin(), al_move_constructed.end(), [](const int val) { return val == 7; }));\r\n        assert(al_copy_constructed.empty()); // implementation-specific assumption that moved-from is empty\r\n        assert(al_move_constructed.get_allocator().id == 4);\r\n        assert(al_move_constructed.get_allocator().soccc_generation == 3);\r\n\r\n        vec al_size_default_constructed(5, alloc);\r\n        assert(al_size_default_constructed.size() == 5);\r\n        assert(all_of(al_size_default_constructed.begin(), al_size_default_constructed.end(),\r\n            [](const int val) { return val == 0; }));\r\n        assert(al_size_default_constructed.get_allocator().id == 4);\r\n        assert(al_size_default_constructed.get_allocator().soccc_generation == 3);\r\n\r\n        vec al_size_value_constructed(5, 7, alloc);\r\n        assert(al_size_value_constructed.size() == 5);\r\n        assert(all_of(al_size_value_constructed.begin(), al_size_value_constructed.end(),\r\n            [](const int val) { return val == 7; }));\r\n        assert(al_size_value_constructed.get_allocator().id == 4);\r\n        assert(al_size_value_constructed.get_allocator().soccc_generation == 3);\r\n\r\n        vec al_range_constructed(begin(input), end(input), alloc);\r\n        assert(equal(al_range_constructed.begin(), al_range_constructed.end(), begin(input), end(input)));\r\n        assert(al_range_constructed.get_allocator().id == 4);\r\n        assert(al_range_constructed.get_allocator().soccc_generation == 3);\r\n\r\n        vec al_initializer_list_constructed({2, 3, 4, 5}, alloc);\r\n        assert(equal(al_initializer_list_constructed.begin(), al_initializer_list_constructed.end(), begin(input) + 2,\r\n            end(input)));\r\n        assert(al_initializer_list_constructed.get_allocator().id == 4);\r\n        assert(al_initializer_list_constructed.get_allocator().soccc_generation == 3);\r\n    }\r\n\r\n    { // assignment\r\n        vec range_constructed(begin(input), end(input));\r\n\r\n        vec copy_constructed;\r\n        copy_constructed = range_constructed;\r\n        assert(equal(\r\n            copy_constructed.begin(), copy_constructed.end(), range_constructed.begin(), range_constructed.end()));\r\n\r\n        vec move_constructed;\r\n        move_constructed = move(copy_constructed);\r\n        assert(equal(\r\n            move_constructed.begin(), move_constructed.end(), range_constructed.begin(), range_constructed.end()));\r\n        assert(copy_constructed.empty()); // implementation-specific assumption that moved-from is empty\r\n\r\n        vec initializer_list_constructed;\r\n        initializer_list_constructed = {0, 1, 2, 3, 4, 5};\r\n        assert(\r\n            equal(initializer_list_constructed.begin(), initializer_list_constructed.end(), begin(input), end(input)));\r\n\r\n        vec assigned;\r\n        constexpr int expected_assign_value[] = {4, 4, 4, 4, 4};\r\n        assigned.assign(5, 4);\r\n        assert(equal(assigned.begin(), assigned.end(), begin(expected_assign_value), end(expected_assign_value)));\r\n\r\n        assigned.assign(begin(input), end(input));\r\n        assert(equal(assigned.begin(), assigned.end(), begin(input), end(input)));\r\n\r\n        constexpr int expected_assign_initializer[] = {2, 3, 4, 5};\r\n        assigned.assign({2, 3, 4, 5});\r\n        assert(equal(\r\n            assigned.begin(), assigned.end(), begin(expected_assign_initializer), end(expected_assign_initializer)));\r\n    }\r\n\r\n    { // allocator\r\n        vec default_constructed;\r\n        const auto alloc = default_constructed.get_allocator();\r\n        static_assert(is_same_v<remove_const_t<decltype(alloc)>, soccc_allocator<int>>);\r\n        assert(alloc.id == 1);\r\n        assert(alloc.soccc_generation == 0);\r\n    }\r\n\r\n    { // iterators\r\n        vec range_constructed(begin(input), end(input));\r\n        const vec const_range_constructed(begin(input), end(input));\r\n\r\n        const auto b = range_constructed.begin();\r\n        static_assert(is_same_v<remove_const_t<decltype(b)>, vec::iterator>);\r\n        assert(*b == 0);\r\n\r\n        const auto cb = range_constructed.cbegin();\r\n        static_assert(is_same_v<remove_const_t<decltype(cb)>, vec::const_iterator>);\r\n        assert(*cb == 0);\r\n\r\n        const auto cb2 = const_range_constructed.begin();\r\n        static_assert(is_same_v<remove_const_t<decltype(cb2)>, vec::const_iterator>);\r\n        assert(*cb2 == 0);\r\n\r\n        const auto e = range_constructed.end();\r\n        static_assert(is_same_v<remove_const_t<decltype(e)>, vec::iterator>);\r\n        assert(*prev(e) == 5);\r\n\r\n        const auto ce = range_constructed.cend();\r\n        static_assert(is_same_v<remove_const_t<decltype(ce)>, vec::const_iterator>);\r\n        assert(*prev(ce) == 5);\r\n\r\n        const auto ce2 = const_range_constructed.end();\r\n        static_assert(is_same_v<remove_const_t<decltype(ce2)>, vec::const_iterator>);\r\n        assert(*prev(ce2) == 5);\r\n\r\n        const auto rb = range_constructed.rbegin();\r\n        static_assert(is_same_v<remove_const_t<decltype(rb)>, reverse_iterator<vec::iterator>>);\r\n        assert(*rb == 5);\r\n\r\n        const auto crb = range_constructed.crbegin();\r\n        static_assert(is_same_v<remove_const_t<decltype(crb)>, reverse_iterator<vec::const_iterator>>);\r\n        assert(*crb == 5);\r\n\r\n        const auto crb2 = const_range_constructed.rbegin();\r\n        static_assert(is_same_v<remove_const_t<decltype(crb2)>, reverse_iterator<vec::const_iterator>>);\r\n        assert(*crb2 == 5);\r\n\r\n        const auto re = range_constructed.rend();\r\n        static_assert(is_same_v<remove_const_t<decltype(rb)>, reverse_iterator<vec::iterator>>);\r\n        assert(*prev(re) == 0);\r\n\r\n        const auto cre = range_constructed.crend();\r\n        static_assert(is_same_v<remove_const_t<decltype(cre)>, reverse_iterator<vec::const_iterator>>);\r\n        assert(*prev(cre) == 0);\r\n\r\n        const auto cre2 = const_range_constructed.rend();\r\n        static_assert(is_same_v<remove_const_t<decltype(cre2)>, reverse_iterator<vec::const_iterator>>);\r\n        assert(*prev(cre2) == 0);\r\n    }\r\n\r\n    { // access\r\n        vec range_constructed(begin(input), end(input));\r\n        const vec const_range_constructed(begin(input), end(input));\r\n\r\n        const auto at = range_constructed.at(2);\r\n        static_assert(is_same_v<remove_const_t<decltype(at)>, int>);\r\n        assert(at == 2);\r\n\r\n        range_constructed.at(2) = 3;\r\n\r\n        const auto at2 = range_constructed.at(2);\r\n        static_assert(is_same_v<remove_const_t<decltype(at2)>, int>);\r\n        assert(at2 == 3);\r\n\r\n        const auto cat = const_range_constructed.at(2);\r\n        static_assert(is_same_v<remove_const_t<decltype(cat)>, int>);\r\n        assert(cat == 2);\r\n\r\n        const auto op = range_constructed[3];\r\n        static_assert(is_same_v<remove_const_t<decltype(op)>, int>);\r\n        assert(op == 3);\r\n\r\n        range_constructed[3] = 4;\r\n        const auto op2       = range_constructed[3];\r\n        static_assert(is_same_v<remove_const_t<decltype(op2)>, int>);\r\n        assert(op2 == 4);\r\n\r\n        const auto cop = const_range_constructed[3];\r\n        static_assert(is_same_v<remove_const_t<decltype(cop)>, int>);\r\n        assert(cop == 3);\r\n\r\n        const auto f = range_constructed.front();\r\n        static_assert(is_same_v<remove_const_t<decltype(f)>, int>);\r\n        assert(f == 0);\r\n\r\n        const auto cf = const_range_constructed.front();\r\n        static_assert(is_same_v<remove_const_t<decltype(cf)>, int>);\r\n        assert(cf == 0);\r\n\r\n        const auto b = range_constructed.back();\r\n        static_assert(is_same_v<remove_const_t<decltype(b)>, int>);\r\n        assert(b == 5);\r\n\r\n        const auto cb = const_range_constructed.back();\r\n        static_assert(is_same_v<remove_const_t<decltype(cb)>, int>);\r\n        assert(cb == 5);\r\n\r\n        const auto d = range_constructed.data();\r\n        static_assert(is_same_v<remove_const_t<decltype(d)>, int*>);\r\n        assert(*d == 0);\r\n\r\n        const auto cd = const_range_constructed.data();\r\n        static_assert(is_same_v<remove_const_t<decltype(cd)>, const int*>);\r\n        assert(*cd == 0);\r\n    }\r\n\r\n    { // capacity\r\n        vec range_constructed(begin(input), end(input));\r\n\r\n        const auto e = range_constructed.empty();\r\n        static_assert(is_same_v<remove_const_t<decltype(e)>, bool>);\r\n        assert(!e);\r\n\r\n        const auto s = range_constructed.size();\r\n        static_assert(is_same_v<remove_const_t<decltype(s)>, size_t>);\r\n        assert(s == size(input));\r\n\r\n        const auto ms = range_constructed.max_size();\r\n        static_assert(is_same_v<remove_const_t<decltype(ms)>, size_t>);\r\n        assert(ms == static_cast<size_t>(-1) / sizeof(int));\r\n\r\n        range_constructed.reserve(20);\r\n\r\n        const auto c = range_constructed.capacity();\r\n        static_assert(is_same_v<remove_const_t<decltype(c)>, size_t>);\r\n        assert(c == 20);\r\n\r\n        range_constructed.shrink_to_fit();\r\n\r\n        const auto c2 = range_constructed.capacity();\r\n        static_assert(is_same_v<remove_const_t<decltype(c2)>, size_t>);\r\n        assert(c2 == 6);\r\n    }\r\n\r\n    { // modifiers\r\n        vec range_constructed(begin(input), end(input));\r\n\r\n        vec cleared = range_constructed;\r\n        cleared.clear();\r\n        assert(cleared.empty());\r\n        assert(cleared.capacity() == range_constructed.capacity());\r\n\r\n        vec inserted;\r\n\r\n        const int to_be_inserted = 3;\r\n        inserted.insert(inserted.begin(), to_be_inserted);\r\n        assert(inserted.size() == 1);\r\n        assert(inserted.front() == 3);\r\n\r\n        const int to_be_inserted2 = 4;\r\n        inserted.insert(inserted.cbegin(), to_be_inserted2);\r\n        assert(inserted.size() == 2);\r\n        assert(inserted.front() == 4);\r\n\r\n        inserted.insert(inserted.begin(), 1);\r\n        assert(inserted.size() == 3);\r\n        assert(inserted.front() == 1);\r\n\r\n        inserted.insert(inserted.cbegin(), 2);\r\n        assert(inserted.size() == 4);\r\n        assert(inserted.front() == 2);\r\n\r\n        const auto it = inserted.insert(inserted.begin(), begin(input), end(input));\r\n        assert(inserted.size() == 10);\r\n        assert(it == inserted.begin());\r\n\r\n        const auto it2 = inserted.insert(inserted.cbegin(), begin(input), end(input));\r\n        assert(inserted.size() == 16);\r\n        assert(it2 == inserted.begin());\r\n\r\n        const auto it3 = inserted.insert(inserted.begin(), {2, 3, 4});\r\n        assert(inserted.size() == 19);\r\n        assert(it3 == inserted.begin());\r\n\r\n        inserted.insert(inserted.cbegin(), {2, 3, 4});\r\n        assert(inserted.size() == 22);\r\n\r\n        inserted.insert(inserted.begin(), 4, 11);\r\n        assert(inserted.size() == 26);\r\n\r\n        vec emplaced;\r\n        emplaced.emplace(emplaced.cbegin(), 42);\r\n        assert(emplaced.size() == 1);\r\n        assert(emplaced.front() == 42);\r\n\r\n        emplaced.emplace_back(43);\r\n        assert(emplaced.size() == 2);\r\n        assert(emplaced.back() == 43);\r\n\r\n        emplaced.push_back(44);\r\n        assert(emplaced.size() == 3);\r\n        assert(emplaced.back() == 44);\r\n\r\n        const int to_be_pushed = 45;\r\n        emplaced.push_back(to_be_pushed);\r\n        assert(emplaced.size() == 4);\r\n        assert(emplaced.back() == 45);\r\n\r\n        emplaced.pop_back();\r\n        assert(emplaced.size() == 3);\r\n        assert(emplaced.back() == 44);\r\n\r\n        emplaced.resize(1);\r\n        assert(emplaced.size() == 1);\r\n        assert(emplaced.front() == 42);\r\n\r\n        emplaced.swap(inserted);\r\n        assert(inserted.size() == 1);\r\n        assert(inserted.front() == 42);\r\n        assert(emplaced.size() == 26);\r\n\r\n        emplaced.erase(emplaced.end() - 1);\r\n        assert(emplaced.size() == 25);\r\n\r\n        emplaced.erase(emplaced.begin(), emplaced.begin() + 2);\r\n        assert(emplaced.size() == 23);\r\n\r\n        emplaced.emplace(emplaced.cbegin(), 42);\r\n        assert(emplaced.size() == 24);\r\n        assert(emplaced.front() == 42);\r\n    }\r\n\r\n    { // swap\r\n        vec first{2, 3, 4};\r\n        vec second{5, 6, 7, 8};\r\n        swap(first, second);\r\n\r\n        constexpr int expected_first[]  = {5, 6, 7, 8};\r\n        constexpr int expected_second[] = {2, 3, 4};\r\n        assert(equal(first.begin(), first.end(), begin(expected_first), end(expected_first)));\r\n        assert(equal(second.begin(), second.end(), begin(expected_second), end(expected_second)));\r\n    }\r\n\r\n    { // erase\r\n        vec erased{1, 2, 3, 4, 2, 3, 2};\r\n        erase(erased, 2);\r\n        constexpr int expected_erased[] = {1, 3, 4, 3};\r\n        assert(equal(erased.begin(), erased.end(), begin(expected_erased), end(expected_erased)));\r\n\r\n        erase_if(erased, [](const int val) { return val < 4; });\r\n        constexpr int expected_erase_if[] = {4};\r\n        assert(equal(erased.begin(), erased.end(), begin(expected_erase_if), end(expected_erase_if)));\r\n    }\r\n\r\n    { // comparison\r\n        vec first(begin(input), end(input));\r\n        vec second(begin(input), end(input));\r\n        vec third{2, 3, 4};\r\n\r\n        const auto e = first == second;\r\n        static_assert(is_same_v<remove_const_t<decltype(e)>, bool>);\r\n        assert(e);\r\n\r\n        const auto ne = first != third;\r\n        static_assert(is_same_v<remove_const_t<decltype(ne)>, bool>);\r\n        assert(ne);\r\n\r\n        const auto l = first < third;\r\n        static_assert(is_same_v<remove_const_t<decltype(l)>, bool>);\r\n        assert(l);\r\n\r\n        const auto le = first <= third;\r\n        static_assert(is_same_v<remove_const_t<decltype(le)>, bool>);\r\n        assert(le);\r\n\r\n        const auto g = first > third;\r\n        static_assert(is_same_v<remove_const_t<decltype(g)>, bool>);\r\n        assert(!g);\r\n\r\n        const auto ge = first >= third;\r\n        static_assert(is_same_v<remove_const_t<decltype(ge)>, bool>);\r\n        assert(!ge);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_iterators() {\r\n    vec range_constructed(begin(input), end(input));\r\n\r\n    { // increment\r\n        auto it = range_constructed.begin();\r\n        assert(*++it == 1);\r\n        assert(*it++ == 1);\r\n        assert(*it == 2);\r\n\r\n        auto cit = range_constructed.cbegin();\r\n        assert(*++cit == 1);\r\n        assert(*cit++ == 1);\r\n        assert(*cit == 2);\r\n    }\r\n\r\n    { // advance\r\n        auto it = range_constructed.begin() + 2;\r\n        assert(*it == 2);\r\n        it += 2;\r\n        assert(*it == 4);\r\n\r\n        auto cit = range_constructed.cbegin() + 2;\r\n        assert(*cit == 2);\r\n        cit += 2;\r\n        assert(*cit == 4);\r\n    }\r\n\r\n    { // decrement\r\n        auto it = range_constructed.end();\r\n        assert(*--it == 5);\r\n        assert(*it-- == 5);\r\n        assert(*it == 4);\r\n\r\n        auto cit = range_constructed.cend();\r\n        assert(*--cit == 5);\r\n        assert(*cit-- == 5);\r\n        assert(*cit == 4);\r\n    }\r\n\r\n    { // advance back\r\n        auto it = range_constructed.end() - 2;\r\n        assert(*it == 4);\r\n        it -= 2;\r\n        assert(*it == 2);\r\n\r\n        auto cit = range_constructed.cend() - 2;\r\n        assert(*cit == 4);\r\n        cit -= 2;\r\n        assert(*cit == 2);\r\n    }\r\n\r\n    { // difference\r\n        const auto it1 = range_constructed.begin();\r\n        const auto it2 = range_constructed.end();\r\n        assert(it2 - it1 == ssize(input));\r\n\r\n        const auto cit1 = range_constructed.cbegin();\r\n        const auto cit2 = range_constructed.cend();\r\n        assert(cit2 - cit1 == ssize(input));\r\n\r\n        assert(it2 - cit1 == ssize(input));\r\n        assert(cit2 - it1 == ssize(input));\r\n    }\r\n\r\n    { // comparison\r\n        const auto it1 = range_constructed.begin();\r\n        const auto it2 = range_constructed.begin();\r\n        const auto it3 = range_constructed.end();\r\n\r\n        assert(it1 == it2);\r\n        assert(it1 != it3);\r\n        assert(it1 < it3);\r\n        assert(it1 <= it3);\r\n        assert(it3 > it1);\r\n        assert(it3 >= it1);\r\n    }\r\n\r\n    { // access\r\n        const auto it = range_constructed.begin() + 2;\r\n        it[2]         = 3;\r\n        assert(range_constructed[4] == 3);\r\n\r\n        const auto cit = range_constructed.cbegin() + 2;\r\n        assert(cit[2] == 3);\r\n\r\n        vector<pair<int, int>> vec2 = {{1, 2}, {2, 3}};\r\n        const auto it2              = vec2.begin();\r\n        assert(it2->second == 2);\r\n\r\n        const auto cit2 = vec2.cbegin();\r\n        assert(cit2->first == 1);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_growth() {\r\n    {\r\n        vector<int> v(1000, 1729);\r\n\r\n        assert(v.size() == 1000);\r\n        assert(v.capacity() == 1000);\r\n\r\n        v.resize(1003);\r\n\r\n        assert(v.size() == 1003);\r\n        assert(v.capacity() == 1500);\r\n    }\r\n\r\n    {\r\n        vector<int> v(1000, 1729);\r\n\r\n        assert(v.size() == 1000);\r\n        assert(v.capacity() == 1000);\r\n\r\n        v.resize(8000);\r\n\r\n        assert(v.size() == 8000);\r\n        assert(v.capacity() == 8000);\r\n    }\r\n\r\n    {\r\n        vector<int> v(1000, 1729);\r\n\r\n        assert(v.size() == 1000);\r\n        assert(v.capacity() == 1000);\r\n\r\n        v.push_back(47);\r\n\r\n        assert(v.size() == 1001);\r\n        assert(v.capacity() == 1500);\r\n    }\r\n\r\n    {\r\n        vector<int> v(1000, 1729);\r\n\r\n        assert(v.size() == 1000);\r\n        assert(v.capacity() == 1000);\r\n\r\n        vector<int> l(3, 47);\r\n\r\n        v.insert(v.end(), l.begin(), l.end());\r\n\r\n        assert(v.size() == 1003);\r\n        assert(v.capacity() == 1500);\r\n    }\r\n\r\n    {\r\n        vector<int> v(1000, 1729);\r\n\r\n        assert(v.size() == 1000);\r\n        assert(v.capacity() == 1000);\r\n\r\n        vector<int> l(7000, 47);\r\n\r\n        v.insert(v.end(), l.begin(), l.end());\r\n\r\n        assert(v.size() == 8000);\r\n        assert(v.capacity() == 8000);\r\n    }\r\n\r\n    {\r\n        vector<int> v(1000, 1729);\r\n\r\n        assert(v.size() == 1000);\r\n        assert(v.capacity() == 1000);\r\n\r\n        v.insert(v.end(), 3, 47);\r\n\r\n        assert(v.size() == 1003);\r\n        assert(v.capacity() == 1500);\r\n    }\r\n\r\n    {\r\n        vector<int> v(1000, 1729);\r\n\r\n        assert(v.size() == 1000);\r\n        assert(v.capacity() == 1000);\r\n\r\n        v.insert(v.end(), 7000, 47);\r\n\r\n        assert(v.size() == 8000);\r\n        assert(v.capacity() == 8000);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4582) // '%s': constructor is not implicitly called\r\n#pragma warning(disable : 4583) // '%s': destructor is not implicitly called\r\ntemplate <class T, size_t N>\r\nconstexpr void test_vector_of_array_impl() {\r\n    vector<T[N]> v(42);\r\n    for (const auto& a : v) {\r\n        for (const auto& elem : a) {\r\n            assert(elem == T{});\r\n        }\r\n    }\r\n}\r\n\r\nconstexpr bool test_vector_of_array() {\r\n    test_vector_of_array_impl<int, 1>();\r\n    test_vector_of_array_impl<int, 42>();\r\n\r\n#if !_HAS_CXX23\r\n    if (!is_constant_evaluated())\r\n#endif // !_HAS_CXX23\r\n    {\r\n        test_vector_of_array_impl<unique_ptr<vector<char>>, 1>();\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, GH-6155 (not yet reported to MSVC)\r\n        test_vector_of_array_impl<unique_ptr<vector<char>>, 42>();\r\n#endif // ^^^ no workaround ^^^\r\n    }\r\n\r\n    test_vector_of_array_impl<vector<long>, 1>();\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, GH-6155 (not yet reported to MSVC)\r\n    test_vector_of_array_impl<vector<long>, 42>();\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    return true;\r\n}\r\n#pragma warning(pop)\r\n\r\nint main() {\r\n    test_interface();\r\n    test_iterators();\r\n    test_growth();\r\n    test_vector_of_array();\r\n    static_assert(test_interface());\r\n    static_assert(test_iterators());\r\n    static_assert(test_growth());\r\n#ifndef __EDG__ // TRANSITION, DevCom-11008487\r\n    static_assert(test_vector_of_array());\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1004R2_constexpr_vector_bool/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1004R2_constexpr_vector_bool/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <iterator>\r\n#include <limits>\r\n#include <memory>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr bool input[]         = {true, false, true, true, false, true};\r\nstatic constexpr bool input_flipped[] = {false, true, false, false, true, false};\r\n\r\nstruct demoterator { // demote pointer to input iterator\r\n    using iterator_category = input_iterator_tag;\r\n    using value_type        = int;\r\n    using difference_type   = ptrdiff_t;\r\n    using reference         = const int&;\r\n    using pointer           = void;\r\n\r\n    constexpr bool operator==(const demoterator& that) const {\r\n        return ptr == that.ptr;\r\n    }\r\n\r\n    constexpr reference operator*() const {\r\n        return *ptr;\r\n    }\r\n\r\n    constexpr demoterator& operator++() {\r\n        ++ptr;\r\n        return *this;\r\n    }\r\n    constexpr void operator++(int) {\r\n        ++*this;\r\n    }\r\n\r\n    const int* ptr;\r\n};\r\n\r\n// Just long enough to force a reallocation when inserting\r\nstatic constexpr int num_arr[33] = { //\r\n    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, //\r\n    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, //\r\n    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, //\r\n    0, 1, 2};\r\n\r\ntemplate <typename T>\r\nstruct soccc_allocator {\r\n    using value_type = T;\r\n\r\n    constexpr soccc_allocator() noexcept = default;\r\n    constexpr explicit soccc_allocator(const int id_) noexcept : id(id_), soccc_generation(0) {}\r\n    constexpr explicit soccc_allocator(const int id_, const int soccc_generation_) noexcept\r\n        : id(id_), soccc_generation(soccc_generation_) {}\r\n    template <typename U>\r\n    constexpr soccc_allocator(const soccc_allocator<U>& other) noexcept\r\n        : id(other.id), soccc_generation(other.soccc_generation) {}\r\n    constexpr soccc_allocator(const soccc_allocator& other) noexcept\r\n        : id(other.id + 1), soccc_generation(other.soccc_generation) {}\r\n\r\n    constexpr soccc_allocator& operator=(const soccc_allocator&) noexcept {\r\n        return *this;\r\n    }\r\n\r\n    constexpr soccc_allocator select_on_container_copy_construction() const noexcept {\r\n        return soccc_allocator(id, soccc_generation + 1);\r\n    }\r\n\r\n    template <typename U>\r\n    constexpr bool operator==(const soccc_allocator<U>&) const noexcept {\r\n        return true;\r\n    }\r\n\r\n    constexpr T* allocate(const size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    constexpr void deallocate(T* const p, const size_t n) noexcept {\r\n        allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class... Args>\r\n    constexpr void construct(T* const p, Args&&... args) {\r\n        construct_at(p, forward<Args>(args)...);\r\n    }\r\n\r\n    int id               = 0;\r\n    int soccc_generation = 0;\r\n};\r\n\r\nusing vec = vector<bool, soccc_allocator<bool>>;\r\n\r\nconstexpr bool test_interface() {\r\n    { // constructors\r\n\r\n        // Non allocator constructors\r\n        vec size_default_constructed(5);\r\n        assert(size_default_constructed.size() == 5);\r\n        assert(all_of(\r\n            size_default_constructed.begin(), size_default_constructed.end(), [](const bool val) { return !val; }));\r\n\r\n        vec size_value_constructed(5, true);\r\n        assert(size_value_constructed.size() == 5);\r\n        assert(\r\n            all_of(size_value_constructed.begin(), size_value_constructed.end(), [](const bool val) { return val; }));\r\n\r\n        vec range_constructed(begin(input), end(input));\r\n        assert(equal(range_constructed.begin(), range_constructed.end(), begin(input), end(input)));\r\n\r\n        vec initializer_list_constructed({true, true, false, true});\r\n        assert(equal(\r\n            initializer_list_constructed.begin(), initializer_list_constructed.end(), begin(input) + 2, end(input)));\r\n\r\n        vec copy_assigned = range_constructed;\r\n        assert(equal(copy_assigned.begin(), copy_assigned.end(), range_constructed.begin(), range_constructed.end()));\r\n\r\n        vec move_assigned = move(copy_assigned);\r\n        assert(equal(move_assigned.begin(), move_assigned.end(), range_constructed.begin(), range_constructed.end()));\r\n        assert(copy_assigned.empty()); // implementation-specific assumption that moved-from is empty\r\n\r\n        // special member functions\r\n        vec default_constructed;\r\n        assert(default_constructed.empty());\r\n        vec copy_constructed(size_default_constructed);\r\n        assert(equal(copy_constructed.begin(), copy_constructed.end(), size_default_constructed.begin(),\r\n            size_default_constructed.end()));\r\n\r\n        vec move_constructed(move(copy_constructed));\r\n        assert(equal(move_constructed.begin(), move_constructed.end(), size_default_constructed.begin(),\r\n            size_default_constructed.end()));\r\n        assert(copy_constructed.empty()); // implementation-specific assumption that moved-from is empty\r\n\r\n        // allocator constructors\r\n        soccc_allocator<int> alloc(2, 3);\r\n        assert(alloc.id == 2);\r\n        assert(alloc.soccc_generation == 3);\r\n\r\n        vec al_default_constructed(alloc);\r\n        assert(al_default_constructed.empty());\r\n        assert(al_default_constructed.get_allocator().id == 4);\r\n        assert(al_default_constructed.get_allocator().soccc_generation == 3);\r\n\r\n        vec al_copy_constructed(size_value_constructed, alloc);\r\n        assert(all_of(al_copy_constructed.begin(), al_copy_constructed.end(), [](const bool val) { return val; }));\r\n        assert(al_copy_constructed.get_allocator().id == 4);\r\n        assert(al_copy_constructed.get_allocator().soccc_generation == 3);\r\n\r\n        vec al_move_constructed(move(al_copy_constructed), alloc);\r\n        assert(all_of(al_move_constructed.begin(), al_move_constructed.end(), [](const bool val) { return val; }));\r\n        assert(al_copy_constructed.empty()); // implementation-specific assumption that moved-from is empty\r\n        assert(al_move_constructed.get_allocator().id == 4);\r\n        assert(al_move_constructed.get_allocator().soccc_generation == 3);\r\n\r\n        vec al_size_default_constructed(5, alloc);\r\n        assert(al_size_default_constructed.size() == 5);\r\n        assert(all_of(al_size_default_constructed.begin(), al_size_default_constructed.end(),\r\n            [](const bool val) { return !val; }));\r\n        assert(al_size_default_constructed.get_allocator().id == 4);\r\n        assert(al_size_default_constructed.get_allocator().soccc_generation == 3);\r\n\r\n        vec al_size_value_constructed(5, true, alloc);\r\n        assert(al_size_value_constructed.size() == 5);\r\n        assert(all_of(\r\n            al_size_value_constructed.begin(), al_size_value_constructed.end(), [](const bool val) { return val; }));\r\n        assert(al_size_value_constructed.get_allocator().id == 4);\r\n        assert(al_size_value_constructed.get_allocator().soccc_generation == 3);\r\n\r\n        vec al_range_constructed(begin(input), end(input), alloc);\r\n        assert(equal(al_range_constructed.begin(), al_range_constructed.end(), begin(input), end(input)));\r\n        assert(al_range_constructed.get_allocator().id == 4);\r\n        assert(al_range_constructed.get_allocator().soccc_generation == 3);\r\n\r\n        vec al_initializer_list_constructed({true, true, false, true}, alloc);\r\n        assert(equal(al_initializer_list_constructed.begin(), al_initializer_list_constructed.end(), begin(input) + 2,\r\n            end(input)));\r\n        assert(al_initializer_list_constructed.get_allocator().id == 4);\r\n        assert(al_initializer_list_constructed.get_allocator().soccc_generation == 3);\r\n    }\r\n\r\n    { // assignment\r\n        vec range_constructed(begin(input), end(input));\r\n\r\n        vec copy_constructed;\r\n        copy_constructed = range_constructed;\r\n        assert(equal(\r\n            copy_constructed.begin(), copy_constructed.end(), range_constructed.begin(), range_constructed.end()));\r\n\r\n        vec move_constructed;\r\n        move_constructed = move(copy_constructed);\r\n        assert(equal(\r\n            move_constructed.begin(), move_constructed.end(), range_constructed.begin(), range_constructed.end()));\r\n        assert(copy_constructed.empty()); // implementation-specific assumption that moved-from is empty\r\n\r\n        vec initializer_list_constructed;\r\n        initializer_list_constructed = {true, false, true, true, false, true};\r\n        assert(\r\n            equal(initializer_list_constructed.begin(), initializer_list_constructed.end(), begin(input), end(input)));\r\n\r\n        vec assigned;\r\n        constexpr bool expected_assign_value[] = {true, true, true, true, true};\r\n        assigned.assign(5, true);\r\n        assert(equal(assigned.begin(), assigned.end(), begin(expected_assign_value), end(expected_assign_value)));\r\n\r\n        assigned.assign(begin(input), end(input));\r\n        assert(equal(assigned.begin(), assigned.end(), begin(input), end(input)));\r\n\r\n        constexpr bool expected_assign_initializer[] = {true, false, true, true, false, true};\r\n        assigned.assign({true, false, true, true, false, true});\r\n        assert(equal(\r\n            assigned.begin(), assigned.end(), begin(expected_assign_initializer), end(expected_assign_initializer)));\r\n    }\r\n\r\n    { // allocator\r\n        vec default_constructed;\r\n        const auto alloc = default_constructed.get_allocator();\r\n        static_assert(is_same_v<remove_const_t<decltype(alloc)>, soccc_allocator<bool>>);\r\n        assert(alloc.id == 2);\r\n        assert(alloc.soccc_generation == 0);\r\n    }\r\n\r\n    { // iterators\r\n        vec range_constructed(begin(input), end(input));\r\n        const vec const_range_constructed(begin(input), end(input));\r\n\r\n        const auto b = range_constructed.begin();\r\n        static_assert(is_same_v<remove_const_t<decltype(b)>, vec::iterator>);\r\n        assert(*b);\r\n\r\n        const auto cb = range_constructed.cbegin();\r\n        static_assert(is_same_v<remove_const_t<decltype(cb)>, vec::const_iterator>);\r\n        assert(*cb);\r\n\r\n        const auto cb2 = const_range_constructed.begin();\r\n        static_assert(is_same_v<remove_const_t<decltype(cb2)>, vec::const_iterator>);\r\n        assert(*cb2);\r\n\r\n        const auto e = range_constructed.end();\r\n        static_assert(is_same_v<remove_const_t<decltype(e)>, vec::iterator>);\r\n        assert(*prev(e));\r\n\r\n        const auto ce = range_constructed.cend();\r\n        static_assert(is_same_v<remove_const_t<decltype(ce)>, vec::const_iterator>);\r\n        assert(*prev(ce));\r\n\r\n        const auto ce2 = const_range_constructed.end();\r\n        static_assert(is_same_v<remove_const_t<decltype(ce2)>, vec::const_iterator>);\r\n        assert(*prev(ce2));\r\n\r\n        const auto rb = range_constructed.rbegin();\r\n        static_assert(is_same_v<remove_const_t<decltype(rb)>, reverse_iterator<vec::iterator>>);\r\n        assert(*rb);\r\n\r\n        const auto crb = range_constructed.crbegin();\r\n        static_assert(is_same_v<remove_const_t<decltype(crb)>, reverse_iterator<vec::const_iterator>>);\r\n        assert(*crb);\r\n\r\n        const auto crb2 = const_range_constructed.rbegin();\r\n        static_assert(is_same_v<remove_const_t<decltype(crb2)>, reverse_iterator<vec::const_iterator>>);\r\n        assert(*crb2);\r\n\r\n        const auto re = range_constructed.rend();\r\n        static_assert(is_same_v<remove_const_t<decltype(rb)>, reverse_iterator<vec::iterator>>);\r\n        assert(*prev(re));\r\n\r\n        const auto cre = range_constructed.crend();\r\n        static_assert(is_same_v<remove_const_t<decltype(cre)>, reverse_iterator<vec::const_iterator>>);\r\n        assert(*prev(cre));\r\n\r\n        const auto cre2 = const_range_constructed.rend();\r\n        static_assert(is_same_v<remove_const_t<decltype(cre2)>, reverse_iterator<vec::const_iterator>>);\r\n        assert(*prev(cre2));\r\n    }\r\n\r\n    { // access\r\n        vec range_constructed(begin(input), end(input));\r\n        const vec const_range_constructed(begin(input), end(input));\r\n\r\n        const auto at = range_constructed.at(2);\r\n        static_assert(is_same_v<remove_const_t<decltype(at)>, _Iter_ref_t<vec::iterator>>);\r\n        assert(at);\r\n\r\n        range_constructed.at(2) = false;\r\n\r\n        const auto at2 = range_constructed.at(2);\r\n        static_assert(is_same_v<remove_const_t<decltype(at2)>, _Iter_ref_t<vec::iterator>>);\r\n        assert(at2 == false);\r\n\r\n        const auto cat = const_range_constructed.at(2);\r\n        static_assert(is_same_v<remove_const_t<decltype(cat)>, _Iter_ref_t<vec::const_iterator>>);\r\n        assert(cat);\r\n\r\n        const auto op = range_constructed[3];\r\n        static_assert(is_same_v<remove_const_t<decltype(op)>, _Iter_ref_t<vec::iterator>>);\r\n        assert(op);\r\n\r\n        range_constructed[3] = true;\r\n        const auto op2       = range_constructed[3];\r\n        static_assert(is_same_v<remove_const_t<decltype(op2)>, _Iter_ref_t<vec::iterator>>);\r\n        assert(op2);\r\n\r\n        const auto cop = const_range_constructed[3];\r\n        static_assert(is_same_v<remove_const_t<decltype(cop)>, _Iter_ref_t<vec::const_iterator>>);\r\n        assert(cop);\r\n\r\n        const auto f = range_constructed.front();\r\n        static_assert(is_same_v<remove_const_t<decltype(f)>, _Iter_ref_t<vec::iterator>>);\r\n        assert(f);\r\n\r\n        const auto cf = const_range_constructed.front();\r\n        static_assert(is_same_v<remove_const_t<decltype(cf)>, _Iter_ref_t<vec::const_iterator>>);\r\n        assert(cf);\r\n\r\n        const auto b = range_constructed.back();\r\n        static_assert(is_same_v<remove_const_t<decltype(b)>, _Iter_ref_t<vec::iterator>>);\r\n        assert(b);\r\n\r\n        const auto cb = const_range_constructed.back();\r\n        static_assert(is_same_v<remove_const_t<decltype(cb)>, _Iter_ref_t<vec::const_iterator>>);\r\n        assert(cb);\r\n    }\r\n\r\n    { // capacity\r\n        vec range_constructed(begin(input), end(input));\r\n\r\n        const auto e = range_constructed.empty();\r\n        static_assert(is_same_v<remove_const_t<decltype(e)>, bool>);\r\n        assert(e == false);\r\n\r\n        const auto s = range_constructed.size();\r\n        static_assert(is_same_v<remove_const_t<decltype(s)>, size_t>);\r\n        assert(s == size(input));\r\n\r\n        const auto ms = range_constructed.max_size();\r\n        static_assert(is_same_v<remove_const_t<decltype(ms)>, size_t>);\r\n        assert(ms == static_cast<size_t>(numeric_limits<ptrdiff_t>::max()));\r\n\r\n        range_constructed.reserve(20);\r\n\r\n        const auto c = range_constructed.capacity();\r\n        static_assert(is_same_v<remove_const_t<decltype(c)>, size_t>);\r\n        assert(c == 32);\r\n\r\n        range_constructed.shrink_to_fit();\r\n\r\n        const auto c2 = range_constructed.capacity();\r\n        static_assert(is_same_v<remove_const_t<decltype(c2)>, size_t>);\r\n        assert(c2 == 32);\r\n    }\r\n\r\n    { // modifiers\r\n        vec range_constructed(begin(input), end(input));\r\n\r\n        vec flipped = range_constructed;\r\n        flipped.flip();\r\n        assert(flipped.size() == 6);\r\n        assert(equal(flipped.begin(), flipped.end(), begin(input_flipped), end(input_flipped)));\r\n        // {true, false, true, true, false, true};\r\n\r\n        vec cleared = range_constructed;\r\n        cleared.clear();\r\n        assert(cleared.empty());\r\n        assert(cleared.capacity() == range_constructed.capacity());\r\n\r\n        vec inserted;\r\n\r\n        const bool to_be_inserted = true;\r\n        inserted.insert(inserted.begin(), to_be_inserted);\r\n        assert(inserted.size() == 1);\r\n        assert(inserted.front());\r\n\r\n        const bool to_be_inserted2 = false;\r\n        inserted.insert(inserted.cbegin(), to_be_inserted2);\r\n        assert(inserted.size() == 2);\r\n        assert(inserted.front() == false);\r\n\r\n        inserted.insert(inserted.begin(), true);\r\n        assert(inserted.size() == 3);\r\n        assert(inserted.front());\r\n\r\n        inserted.insert(inserted.cbegin(), false);\r\n        assert(inserted.size() == 4);\r\n        assert(inserted.front() == false);\r\n\r\n        const auto it = inserted.insert(inserted.begin(), begin(input), end(input));\r\n        assert(inserted.size() == 10);\r\n        assert(it == inserted.begin());\r\n\r\n        const auto it2 = inserted.insert(inserted.cbegin(), begin(input), end(input));\r\n        assert(inserted.size() == 16);\r\n        assert(it2 == inserted.begin());\r\n\r\n        const auto it3 = inserted.insert(inserted.begin(), {true, false, true});\r\n        assert(inserted.size() == 19);\r\n        assert(it3 == inserted.begin());\r\n\r\n        inserted.insert(inserted.cbegin(), {false, true, false});\r\n        assert(inserted.size() == 22);\r\n\r\n        inserted.insert(inserted.cbegin(), 3, true);\r\n        assert(inserted.size() == 25);\r\n\r\n        vec emplaced;\r\n        emplaced.emplace(emplaced.cbegin(), false);\r\n        assert(emplaced.size() == 1);\r\n        assert(emplaced.front() == false);\r\n\r\n        emplaced.emplace_back(true);\r\n        assert(emplaced.size() == 2);\r\n        assert(emplaced.back());\r\n\r\n        emplaced.push_back(false);\r\n        assert(emplaced.size() == 3);\r\n        assert(emplaced.back() == false);\r\n\r\n        const bool to_be_pushed = true;\r\n        emplaced.push_back(to_be_pushed);\r\n        assert(emplaced.size() == 4);\r\n        assert(emplaced.back());\r\n\r\n        emplaced.pop_back();\r\n        assert(emplaced.size() == 3);\r\n        assert(emplaced.back() == false);\r\n\r\n        emplaced.resize(1);\r\n        assert(emplaced.size() == 1);\r\n        assert(emplaced.front() == false);\r\n\r\n        emplaced.swap(inserted);\r\n        assert(inserted.size() == 1);\r\n        assert(inserted.front() == false);\r\n        assert(emplaced.size() == 25);\r\n\r\n        emplaced.erase(emplaced.end() - 1);\r\n        assert(emplaced.size() == 24);\r\n\r\n        emplaced.erase(emplaced.begin(), emplaced.begin() + 2);\r\n        assert(emplaced.size() == 22);\r\n    }\r\n\r\n    {\r\n        // GH-2440: we were incorrectly reallocating _before_ orphaning iterators\r\n        // (resulting in UB) while inserting ranges of unknown length\r\n\r\n        vector<bool> input_inserted;\r\n        const auto result =\r\n            input_inserted.insert(input_inserted.end(), demoterator{begin(num_arr)}, demoterator{end(num_arr)});\r\n        static_assert(is_same_v<decltype(result), const vector<bool>::iterator>);\r\n        assert(result == input_inserted.begin());\r\n        assert(input_inserted.size() == size(num_arr));\r\n    }\r\n\r\n    { // swap\r\n        vec first{true, false, true};\r\n        vec second{false, false, true, false};\r\n        swap(first, second);\r\n\r\n        constexpr bool expected_first[]  = {false, false, true, false};\r\n        constexpr bool expected_second[] = {true, false, true};\r\n        assert(equal(first.begin(), first.end(), begin(expected_first), end(expected_first)));\r\n        assert(equal(second.begin(), second.end(), begin(expected_second), end(expected_second)));\r\n    }\r\n\r\n    { // erase\r\n        vec erased{false, false, true, false, true};\r\n        erase(erased, false);\r\n        constexpr bool expected_erased[] = {true, true};\r\n        assert(equal(erased.begin(), erased.end(), begin(expected_erased), end(expected_erased)));\r\n\r\n        vec erased_if{false, false, true, false, true};\r\n        erase_if(erased_if, [](const bool val) { return val; });\r\n        constexpr bool expected_erase_if[] = {false, false, false};\r\n        assert(equal(erased_if.begin(), erased_if.end(), begin(expected_erase_if), end(expected_erase_if)));\r\n    }\r\n\r\n    { // comparison\r\n        vec first(begin(input), end(input));\r\n        vec second(begin(input), end(input));\r\n        vec third{true, false, true};\r\n\r\n        const auto e = first == second;\r\n        static_assert(is_same_v<remove_const_t<decltype(e)>, bool>);\r\n        assert(e);\r\n\r\n        const auto ne = first != third;\r\n        static_assert(is_same_v<remove_const_t<decltype(ne)>, bool>);\r\n        assert(ne);\r\n\r\n        const auto l = first < third;\r\n        static_assert(is_same_v<remove_const_t<decltype(l)>, bool>);\r\n        assert(!l);\r\n\r\n        const auto le = first <= third;\r\n        static_assert(is_same_v<remove_const_t<decltype(le)>, bool>);\r\n        assert(!le);\r\n\r\n        const auto g = first > third;\r\n        static_assert(is_same_v<remove_const_t<decltype(g)>, bool>);\r\n        assert(g);\r\n\r\n        const auto ge = first >= third;\r\n        static_assert(is_same_v<remove_const_t<decltype(ge)>, bool>);\r\n        assert(ge);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_iterators() {\r\n    vec range_constructed(begin(input), end(input));\r\n\r\n    { // increment\r\n        auto it = range_constructed.begin();\r\n        assert(*++it == false);\r\n        assert(*it++ == false);\r\n        assert(*it);\r\n\r\n        auto cit = range_constructed.cbegin();\r\n        assert(*++cit == false);\r\n        assert(*cit++ == false);\r\n        assert(*cit);\r\n    }\r\n\r\n    { // advance\r\n        auto it = range_constructed.begin() + 2;\r\n        assert(*it);\r\n        it += 2;\r\n        assert(*it == false);\r\n\r\n        auto cit = range_constructed.cbegin() + 2;\r\n        assert(*cit);\r\n        cit += 2;\r\n        assert(*cit == false);\r\n    }\r\n\r\n    { // decrement\r\n        auto it = range_constructed.end();\r\n        assert(*--it);\r\n        assert(*it--);\r\n        assert(*it == false);\r\n\r\n        auto cit = range_constructed.cend();\r\n        assert(*--cit);\r\n        assert(*cit--);\r\n        assert(*cit == false);\r\n    }\r\n\r\n    { // advance back\r\n        auto it = range_constructed.end() - 2;\r\n        assert(*it == false);\r\n        it -= 2;\r\n        assert(*it);\r\n\r\n        auto cit = range_constructed.cend() - 2;\r\n        assert(*cit == false);\r\n        cit -= 2;\r\n        assert(*cit);\r\n    }\r\n\r\n    { // difference\r\n        const auto it1 = range_constructed.begin();\r\n        const auto it2 = range_constructed.end();\r\n        assert(it2 - it1 == ssize(input));\r\n\r\n        const auto cit1 = range_constructed.cbegin();\r\n        const auto cit2 = range_constructed.cend();\r\n        assert(cit2 - cit1 == ssize(input));\r\n\r\n        assert(it2 - cit1 == ssize(input));\r\n        assert(cit2 - it1 == ssize(input));\r\n    }\r\n\r\n    { // comparison\r\n        const auto it1 = range_constructed.begin();\r\n        const auto it2 = range_constructed.begin();\r\n        const auto it3 = range_constructed.end();\r\n\r\n        assert(it1 == it2);\r\n        assert(it1 != it3);\r\n        assert(it1 < it3);\r\n        assert(it1 <= it3);\r\n        assert(it3 > it1);\r\n        assert(it3 >= it1);\r\n    }\r\n\r\n    { // access\r\n        const auto it = range_constructed.begin() + 2;\r\n        it[2]         = false;\r\n        assert(range_constructed[4] == false);\r\n\r\n        const auto cit = range_constructed.cbegin() + 2;\r\n        assert(cit[2] == false);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test_interface();\r\n    test_iterators();\r\n    static_assert(test_interface());\r\n    static_assert(test_iterators());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1007R3_assume_aligned/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1007R3_assume_aligned/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <memory>\r\n\r\nconstexpr void can_change_value_via_assume_aligned(int* p) {\r\n    int* p1 = std::assume_aligned<256>(p);\r\n    p1[0]   = 10;\r\n    p1[1]   = -15;\r\n}\r\n\r\nconstexpr int can_read_value_via_assume_aligned_and_sum_it(int const* p, size_t size) {\r\n    int const* p1 = std::assume_aligned<256>(p);\r\n    int result    = 0;\r\n    for (size_t i = 0; i < size; ++i) {\r\n        result += p1[i];\r\n    }\r\n    return result;\r\n}\r\n\r\nconstexpr bool assume_aligned_can_change_value() {\r\n    alignas(256) int arr[2] = {0, 0};\r\n    can_change_value_via_assume_aligned(&arr[0]);\r\n    assert(arr[0] == 10);\r\n    assert(arr[1] == -15);\r\n    return true;\r\n}\r\n\r\nconstexpr bool assume_aligned_can_read_value() {\r\n    alignas(256) constexpr int arr[3] = {10, 11, 9};\r\n    assert(can_read_value_via_assume_aligned_and_sum_it(arr, 3) == 30);\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    assume_aligned_can_change_value();\r\n    static_assert(assume_aligned_can_change_value());\r\n\r\n    assume_aligned_can_read_value();\r\n    static_assert(assume_aligned_can_read_value());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1020R1_smart_pointer_for_overwrite/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1020R1_smart_pointer_for_overwrite/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <memory>\r\n#include <new>\r\n#include <stdexcept>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nconstexpr int uninitializedValue = 0xEE;\r\nconstexpr int initializedValue   = 106;\r\nsize_t allocationCount           = 0;\r\n\r\nstruct ReportAddress;\r\nvector<ReportAddress*> ascendingAddressBuffer;\r\nvector<ReportAddress*> descendingAddressBuffer;\r\n\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new'\r\n\r\n// According to N4849, the default behavior of operator new[](size) is to return\r\n// operator new(size), so only the latter needs to be replaced.\r\nvoid* operator new(size_t size) {\r\n    void* const p = ::operator new(size, nothrow);\r\n\r\n    if (p) {\r\n        return p;\r\n    } else {\r\n        throw bad_alloc();\r\n    }\r\n}\r\n\r\nvoid* operator new(size_t size, const nothrow_t&) noexcept {\r\n    void* const result = malloc(size == 0 ? 1 : size);\r\n    ++allocationCount;\r\n    if (result) {\r\n        memset(result, uninitializedValue, size);\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\n#ifdef __cpp_aligned_new\r\nvoid* operator new(size_t size, align_val_t align) {\r\n    void* const p = ::operator new(size, align, nothrow);\r\n\r\n    if (p) {\r\n        return p;\r\n    } else {\r\n        throw bad_alloc();\r\n    }\r\n}\r\n\r\nvoid* operator new(size_t size, align_val_t align, const nothrow_t&) noexcept {\r\n    void* const result = ::_aligned_malloc(size, static_cast<size_t>(align));\r\n    ++allocationCount;\r\n    if (result) {\r\n        memset(result, uninitializedValue, size);\r\n    }\r\n\r\n    return result;\r\n}\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n\r\ntemplate <typename T, typename = void>\r\nstruct unique_is_for_overwritable : false_type {};\r\n\r\ntemplate <typename T>\r\nstruct unique_is_for_overwritable<T, void_t<decltype(make_unique_for_overwrite<T>())>> : true_type {};\r\n\r\ntemplate <typename T>\r\nconstexpr bool unique_is_for_overwritable_v = unique_is_for_overwritable<T>::value;\r\n\r\nstruct DefaultInitializableInt {\r\n    int value;\r\n    DefaultInitializableInt() : value(initializedValue) {}\r\n};\r\n\r\nstruct alignas(32) HighlyAligned {\r\n    uint64_t a;\r\n    uint64_t b;\r\n    uint64_t c;\r\n    uint64_t d;\r\n};\r\n\r\nsize_t canCreate = 10; // Counter to force an exception when constructing a sufficiently large ReportAddress array\r\n\r\nstruct ReportAddress {\r\n    ReportAddress() {\r\n        if (canCreate > 0) {\r\n            ascendingAddressBuffer.push_back(this);\r\n            --canCreate;\r\n        } else {\r\n            throw runtime_error(\"Can't create more ReportAddress objects.\");\r\n        }\r\n    }\r\n\r\n    ~ReportAddress() {\r\n        ++canCreate;\r\n        descendingAddressBuffer.push_back(this);\r\n    }\r\n};\r\n\r\nvoid assert_ascending_init() {\r\n    for (size_t i = 1; i < ascendingAddressBuffer.size(); ++i) {\r\n        assert(ascendingAddressBuffer[i - 1] < ascendingAddressBuffer[i]);\r\n    }\r\n\r\n    ascendingAddressBuffer.clear();\r\n}\r\n\r\nvoid assert_descending_destruct() {\r\n    for (size_t i = 1; i < descendingAddressBuffer.size(); ++i) {\r\n        assert(descendingAddressBuffer[i - 1] > descendingAddressBuffer[i]);\r\n    }\r\n\r\n    descendingAddressBuffer.clear();\r\n}\r\n\r\nvoid assert_uninitialized(void* p, size_t size) {\r\n    unsigned char* chPtr = reinterpret_cast<unsigned char*>(p);\r\n    for (size_t offset = 0; offset < size; ++offset) {\r\n        assert(chPtr[offset] == uninitializedValue);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid assert_shared_use_get(const shared_ptr<T>& sp) {\r\n    assert(sp.use_count() == 1);\r\n    assert(sp.get() != nullptr);\r\n}\r\n\r\ntemplate <class T, class... Args>\r\nshared_ptr<T> make_shared_for_overwrite_assert(Args&&... vals) {\r\n    size_t aCount    = allocationCount;\r\n    shared_ptr<T> sp = make_shared_for_overwrite<T>(forward<Args>(vals)...);\r\n    assert_shared_use_get(sp);\r\n    assert(aCount + 1 == allocationCount);\r\n    return sp;\r\n}\r\n\r\ntemplate <class T, class... Args>\r\nvoid test_make_shared_init_destruct_order(Args&&... vals) {\r\n    try {\r\n        shared_ptr<T> sp = make_shared_for_overwrite<T>(forward<Args>(vals)...);\r\n        assert_shared_use_get(sp);\r\n    } catch (const runtime_error& exc) {\r\n        assert(exc.what() == \"Can't create more ReportAddress objects.\"sv);\r\n    }\r\n\r\n    assert_ascending_init();\r\n    assert_descending_destruct();\r\n}\r\n\r\nvoid test_make_unique_for_overwrite() {\r\n    static_assert(unique_is_for_overwritable_v<char>);\r\n    static_assert(!unique_is_for_overwritable_v<int[100]>);\r\n\r\n    auto p0 = make_unique_for_overwrite<int>();\r\n    assert_uninitialized(p0.get(), sizeof(int));\r\n\r\n    auto p1 = make_unique_for_overwrite<int[]>(100u);\r\n    assert_uninitialized(p1.get(), sizeof(int) * 100u);\r\n\r\n    auto p2 = make_unique_for_overwrite<DefaultInitializableInt>();\r\n    assert(p2->value == initializedValue);\r\n\r\n    auto p3 = make_unique_for_overwrite<DefaultInitializableInt[][89]>(2u);\r\n    for (size_t i = 0; i < 2; ++i) {\r\n        for (size_t j = 0; j < 89; ++j) {\r\n            assert(p3[i][j].value == initializedValue);\r\n        }\r\n    }\r\n\r\n    auto p4 = make_unique_for_overwrite<int[]>(0u); // p4 cannot be dereferenced\r\n}\r\n\r\nvoid test_make_shared_for_overwrite() {\r\n    auto p0 = make_shared_for_overwrite_assert<int>();\r\n    assert_uninitialized(addressof(*p0), sizeof(int));\r\n\r\n    auto p1 = make_shared_for_overwrite_assert<DefaultInitializableInt>();\r\n    assert(p1->value == initializedValue);\r\n\r\n    auto p2 = make_shared_for_overwrite_assert<HighlyAligned>();\r\n#ifdef __cpp_aligned_new\r\n    assert(reinterpret_cast<uintptr_t>(p2.get()) % alignof(HighlyAligned) == 0);\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n    assert_uninitialized(addressof(*p2), sizeof(HighlyAligned));\r\n\r\n    auto p3 = make_shared_for_overwrite_assert<int[100]>();\r\n    assert_uninitialized(addressof(p3[0]), sizeof(int) * 100u);\r\n\r\n    auto p4 = make_shared_for_overwrite_assert<DefaultInitializableInt[2][8]>();\r\n    for (ptrdiff_t i = 0; i < 2; ++i) {\r\n        for (ptrdiff_t j = 0; j < 8; ++j) {\r\n            assert(p4[i][j].value == initializedValue);\r\n        }\r\n    }\r\n\r\n    auto p5 = make_shared_for_overwrite_assert<HighlyAligned[10]>();\r\n#ifdef __cpp_aligned_new\r\n    assert(reinterpret_cast<uintptr_t>(p5.get()) % alignof(HighlyAligned) == 0);\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n    assert_uninitialized(addressof(p5[0]), sizeof(HighlyAligned) * 10u);\r\n\r\n    auto p6 = make_shared_for_overwrite_assert<DefaultInitializableInt[]>(100u);\r\n    for (ptrdiff_t i = 0; i < 100; ++i) {\r\n        assert(p6[i].value == initializedValue);\r\n    }\r\n\r\n    auto p7 = make_shared_for_overwrite_assert<DefaultInitializableInt[][8][9]>(2u);\r\n    for (ptrdiff_t i = 0; i < 2; ++i) {\r\n        for (ptrdiff_t j = 0; j < 8; ++j) {\r\n            for (ptrdiff_t k = 0; k < 9; ++k) {\r\n                assert(p7[i][j][k].value == initializedValue);\r\n            }\r\n        }\r\n    }\r\n\r\n    auto p8 = make_shared_for_overwrite_assert<int[]>(100u);\r\n    assert_uninitialized(addressof(p8[0]), sizeof(int) * 100u);\r\n\r\n    auto p9 = make_shared_for_overwrite_assert<int[]>(0u); // p9 cannot be dereferenced\r\n\r\n    auto p10 = make_shared_for_overwrite_assert<HighlyAligned[]>(10u);\r\n#ifdef __cpp_aligned_new\r\n    assert(reinterpret_cast<uintptr_t>(p10.get()) % alignof(HighlyAligned) == 0);\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n    assert_uninitialized(addressof(p10[0]), sizeof(HighlyAligned) * 10u);\r\n\r\n    test_make_shared_init_destruct_order<ReportAddress[5]>(); // success one dimensional\r\n\r\n    test_make_shared_init_destruct_order<ReportAddress[20]>(); // failure one dimensional\r\n\r\n    test_make_shared_init_destruct_order<ReportAddress[2][2][2]>(); // success multidimensional\r\n\r\n    test_make_shared_init_destruct_order<ReportAddress[3][3][3]>(); // failure multidimensional\r\n\r\n    test_make_shared_init_destruct_order<ReportAddress[]>(5u); // success one dimensional\r\n\r\n    test_make_shared_init_destruct_order<ReportAddress[]>(20u); // failure one dimensional\r\n\r\n    test_make_shared_init_destruct_order<ReportAddress[][2][2]>(2u); // success multidimensional\r\n\r\n    test_make_shared_init_destruct_order<ReportAddress[][3][3]>(3u); // failure multidimensional\r\n}\r\n\r\ntemplate <class T, class... Args>\r\nshared_ptr<T> allocate_shared_for_overwrite_assert(Args&&... vals) {\r\n    size_t aCount    = allocationCount;\r\n    shared_ptr<T> sp = allocate_shared_for_overwrite<T>(forward<Args>(vals)...);\r\n    assert_shared_use_get(sp);\r\n    assert(aCount + 1 == allocationCount);\r\n    return sp;\r\n}\r\n\r\ntemplate <class T, class... Args>\r\nvoid test_allocate_shared_init_destruct_order(Args&&... vals) {\r\n    allocator<remove_all_extents_t<T>> a{};\r\n\r\n    try {\r\n        shared_ptr<T> sp = allocate_shared_for_overwrite<T>(a, forward<Args>(vals)...);\r\n        assert_shared_use_get(sp);\r\n    } catch (const runtime_error& exc) {\r\n        assert(exc.what() == \"Can't create more ReportAddress objects.\"sv);\r\n    }\r\n\r\n    assert_ascending_init();\r\n    assert_descending_destruct();\r\n}\r\n\r\nvoid test_allocate_shared_for_overwrite() {\r\n    allocator<int> a0{};\r\n    auto p0 = allocate_shared_for_overwrite_assert<int>(a0);\r\n    assert_uninitialized(addressof(*p0), sizeof(int));\r\n\r\n    allocator<DefaultInitializableInt> a1{};\r\n    auto p1 = allocate_shared_for_overwrite_assert<DefaultInitializableInt>(a1);\r\n    assert(p1->value == initializedValue);\r\n\r\n    allocator<HighlyAligned> a2{};\r\n    auto p2 = allocate_shared_for_overwrite_assert<HighlyAligned>(a2);\r\n#ifdef __cpp_aligned_new\r\n    assert(reinterpret_cast<uintptr_t>(p2.get()) % alignof(HighlyAligned) == 0);\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n    assert_uninitialized(addressof(*p2), sizeof(HighlyAligned));\r\n\r\n    auto p3 = allocate_shared_for_overwrite_assert<int[100]>(a0);\r\n    assert_uninitialized(addressof(p3[0]), sizeof(int) * 100u);\r\n\r\n    auto p4 = allocate_shared_for_overwrite_assert<DefaultInitializableInt[2][8]>(a1);\r\n    for (ptrdiff_t i = 0; i < 2; ++i) {\r\n        for (ptrdiff_t j = 0; j < 8; ++j) {\r\n            assert(p4[i][j].value == initializedValue);\r\n        }\r\n    }\r\n\r\n    auto p5 = allocate_shared_for_overwrite_assert<HighlyAligned[10]>(a2);\r\n#ifdef __cpp_aligned_new\r\n    assert(reinterpret_cast<uintptr_t>(p5.get()) % alignof(HighlyAligned) == 0);\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n    assert_uninitialized(addressof(p5[0]), sizeof(HighlyAligned) * 10u);\r\n\r\n    auto p6 = allocate_shared_for_overwrite_assert<DefaultInitializableInt[]>(a1, 100u);\r\n    for (ptrdiff_t i = 0; i < 100; ++i) {\r\n        assert(p6[i].value == initializedValue);\r\n    }\r\n\r\n    auto p7 = allocate_shared_for_overwrite_assert<DefaultInitializableInt[][8][9]>(a1, 2u);\r\n    for (ptrdiff_t i = 0; i < 2; ++i) {\r\n        for (ptrdiff_t j = 0; j < 8; ++j) {\r\n            for (ptrdiff_t k = 0; k < 9; ++k) {\r\n                assert(p7[i][j][k].value == initializedValue);\r\n            }\r\n        }\r\n    }\r\n\r\n    auto p8 = allocate_shared_for_overwrite_assert<int[]>(a0, 100u);\r\n    assert_uninitialized(addressof(p8[0]), sizeof(int) * 100u);\r\n\r\n    auto p9 = allocate_shared_for_overwrite_assert<int[]>(a0, 0u); // p9 cannot be dereferenced\r\n\r\n    auto p10 = allocate_shared_for_overwrite_assert<HighlyAligned[]>(a2, 10u);\r\n#ifdef __cpp_aligned_new\r\n    assert(reinterpret_cast<uintptr_t>(p10.get()) % alignof(HighlyAligned) == 0);\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n    assert_uninitialized(addressof(p10[0]), sizeof(HighlyAligned) * 10u);\r\n\r\n    test_allocate_shared_init_destruct_order<ReportAddress[5]>(); // success one dimensional\r\n\r\n    test_allocate_shared_init_destruct_order<ReportAddress[20]>(); // failure one dimensional\r\n\r\n    test_allocate_shared_init_destruct_order<ReportAddress[2][2][2]>(); // success multidimensional\r\n\r\n    test_allocate_shared_init_destruct_order<ReportAddress[3][3][3]>(); // failure multidimensional\r\n\r\n    test_allocate_shared_init_destruct_order<ReportAddress[]>(5u); // success one dimensional\r\n\r\n    test_allocate_shared_init_destruct_order<ReportAddress[]>(20u); // failure one dimensional\r\n\r\n    test_allocate_shared_init_destruct_order<ReportAddress[][2][2]>(2u); // success multidimensional\r\n\r\n    test_allocate_shared_init_destruct_order<ReportAddress[][3][3]>(3u); // failure multidimensional\r\n}\r\n\r\nint main() {\r\n    test_make_unique_for_overwrite();\r\n    test_make_shared_for_overwrite();\r\n    test_allocate_shared_for_overwrite();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1023R0_constexpr_for_array_comparisons/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1023R0_constexpr_for_array_comparisons/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n\r\nusing namespace std;\r\n\r\nconstexpr array<int, 5> a0{{2, 8, 9, 1, 9}};\r\nconstexpr array<int, 3> a1{{2, 8, 9}};\r\nconstexpr array<int, 5> a2{{2, 8, 9, 1, 8}};\r\nconstexpr array<int, 0> a3{};\r\n\r\nconstexpr void test_operator_eq() {\r\n    assert(a0 == a0);\r\n    assert(a1 == a1);\r\n    assert(!(a0 == a2));\r\n    assert(a3 == a3);\r\n}\r\n\r\nconstexpr void test_operator_neq() {\r\n    assert(!(a0 != a0));\r\n    assert(!(a1 != a1));\r\n    assert(a0 != a2);\r\n    assert(!(a3 != a3));\r\n}\r\n\r\nconstexpr void test_operator_lt() {\r\n    assert(!(a0 < a0));\r\n    assert(!(a1 < a1));\r\n    assert(a2 < a0);\r\n    assert(!(a3 < a3));\r\n}\r\n\r\nconstexpr void test_operator_gt() {\r\n    assert(!(a0 > a0));\r\n    assert(!(a1 > a1));\r\n    assert(a0 > a2);\r\n    assert(!(a3 > a3));\r\n}\r\n\r\n\r\nconstexpr void test_operator_leq() {\r\n    assert(a0 <= a0);\r\n    assert(a1 <= a1);\r\n    assert(a2 <= a0);\r\n    assert(a3 <= a3);\r\n}\r\n\r\n\r\nconstexpr void test_operator_geq() {\r\n    assert(a0 >= a0);\r\n    assert(a1 >= a1);\r\n    assert(a0 >= a2);\r\n    assert(a3 >= a3);\r\n}\r\n\r\nconstexpr bool test() {\r\n    test_operator_eq();\r\n    test_operator_neq();\r\n    test_operator_lt();\r\n    test_operator_gt();\r\n    test_operator_leq();\r\n    test_operator_geq();\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test();\r\n    static_assert(test());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1032R1_miscellaneous_constexpr/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1032R1_miscellaneous_constexpr/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <iterator>\r\n#include <memory>\r\n#include <string_view>\r\n#include <tuple>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nstruct constexpr_container {\r\n    using value_type = int;\r\n    using iterator   = array<value_type, 6>::iterator;\r\n\r\n    array<value_type, 6> buffer{};\r\n    size_t selected = 0;\r\n\r\n    // Test back_insert_iterator\r\n    constexpr void push_back(const value_type i) {\r\n        buffer[selected++] = i;\r\n    }\r\n\r\n    // Test front_insert_iterator\r\n    constexpr void push_front(const value_type i) {\r\n        buffer[selected++] = i;\r\n    }\r\n\r\n    // Test insert_iterator\r\n    constexpr iterator insert(iterator where, const value_type i) {\r\n        *where = i;\r\n        return where;\r\n    }\r\n\r\n    // Fake begin to ensure that we insert at the correct position for insert_iterator\r\n    constexpr iterator begin() {\r\n        return next(buffer.begin());\r\n    }\r\n};\r\n\r\nconstexpr bool run_tests() {\r\n    // test pair piecewise constructor\r\n    {\r\n        const tuple<int, int, double, double> t1{1, 2, 0.5, 1.5};\r\n        const tuple<double, int> t2{2.5, 3};\r\n        const pair<tuple<int, int, double, double>, tuple<double, int>> meow{piecewise_construct, t1, t2};\r\n        assert(meow.first == t1);\r\n        assert(meow.second == t2);\r\n    }\r\n\r\n    // test pair assignment operator\r\n    {\r\n        pair<int, int> input{1, 2};\r\n        pair<int, int> copyAssignment{};\r\n        copyAssignment = input;\r\n        assert(copyAssignment.first == 1);\r\n        assert(copyAssignment.second == 2);\r\n\r\n        pair<int, int> moveAssignment{};\r\n        moveAssignment = move(input);\r\n        assert(moveAssignment.first == 1);\r\n        assert(moveAssignment.second == 2);\r\n\r\n        pair<double, double> copyAssignmentConvertible{};\r\n        copyAssignmentConvertible = copyAssignment;\r\n        assert(copyAssignmentConvertible.first == 1.0);\r\n        assert(copyAssignmentConvertible.second == 2.0);\r\n\r\n        pair<double, double> moveAssignmentConvertible{};\r\n        moveAssignmentConvertible = move(moveAssignment);\r\n        assert(moveAssignmentConvertible.first == 1.0);\r\n        assert(moveAssignmentConvertible.second == 2.0);\r\n    }\r\n\r\n    // test pair swap\r\n    {\r\n        pair<int, int> pair1{1, 2};\r\n        pair<int, int> pair2{3, 4};\r\n\r\n        swap(pair1, pair2);\r\n        assert(pair1.first == 3 && pair1.second == 4 && pair2.first == 1 && pair2.second == 2);\r\n\r\n        pair1.swap(pair2);\r\n        assert(pair1.first == 1 && pair1.second == 2 && pair2.first == 3 && pair2.second == 4);\r\n    }\r\n\r\n    // test empty tuple\r\n    {\r\n        allocator<int> alloc;\r\n        tuple<> tuple_alloc{allocator_arg, alloc};\r\n        tuple<> tuple_alloc_copy{allocator_arg, alloc, tuple_alloc};\r\n        tuple<> tuple_alloc_move{allocator_arg, alloc, move(tuple_alloc)};\r\n\r\n        tuple_alloc_copy = tuple_alloc;\r\n        tuple_alloc_move = move(tuple_alloc);\r\n\r\n        swap(tuple_alloc, tuple_alloc_copy);\r\n        tuple_alloc.swap(tuple_alloc_copy);\r\n    }\r\n\r\n    // test tuple\r\n    {\r\n        allocator<int> alloc;\r\n        tuple<short, int> conversionInput{static_cast<short>(1), 2};\r\n        const tuple<short, int> constConversionInput{static_cast<short>(3), 4};\r\n        pair<short, int> conversionInputPair{static_cast<short>(5), 6};\r\n        const pair<short, int> constConversionInputPair{static_cast<short>(7), 8};\r\n\r\n        tuple<int, double> tuple_alloc{allocator_arg, alloc};\r\n        assert(get<0>(tuple_alloc) == 0);\r\n        assert(get<1>(tuple_alloc) == 0.0);\r\n\r\n        tuple<int, double> tuple_alloc_non_forwarding_value{allocator_arg, alloc, {}, {}};\r\n        assert(get<0>(tuple_alloc_non_forwarding_value) == 0);\r\n        assert(get<1>(tuple_alloc_non_forwarding_value) == 0.0);\r\n\r\n        tuple<int, double> tuple_alloc_value{allocator_arg, alloc, 9, 9.5};\r\n        assert(get<0>(tuple_alloc_value) == 9);\r\n        assert(get<1>(tuple_alloc_value) == 9.5);\r\n\r\n        tuple<int, double> tuple_alloc_copy{allocator_arg, alloc, tuple_alloc};\r\n        assert(get<0>(tuple_alloc_copy) == 0);\r\n        assert(get<1>(tuple_alloc_copy) == 0.0);\r\n\r\n        tuple<int, double> tuple_alloc_move{allocator_arg, alloc, move(tuple_alloc)};\r\n        assert(get<0>(tuple_alloc_move) == 0);\r\n        assert(get<1>(tuple_alloc_move) == 0.0);\r\n\r\n        tuple<int, double> tuple_alloc_conversion{allocator_arg, alloc, static_cast<short>(11), 22};\r\n        assert(get<0>(tuple_alloc_conversion) == 11);\r\n        assert(get<1>(tuple_alloc_conversion) == 22.0);\r\n\r\n        tuple<int, double> tuple_alloc_conversion_tuple{allocator_arg, alloc, move(conversionInput)};\r\n        assert(get<0>(tuple_alloc_conversion_tuple) == 1);\r\n        assert(get<1>(tuple_alloc_conversion_tuple) == 2.0);\r\n\r\n        tuple<int, double> tuple_alloc_conversion_const_tuple{allocator_arg, alloc, constConversionInput};\r\n        assert(get<0>(tuple_alloc_conversion_const_tuple) == 3);\r\n        assert(get<1>(tuple_alloc_conversion_const_tuple) == 4.0);\r\n\r\n        tuple<int, double> tuple_alloc_conversion_pair{allocator_arg, alloc, move(conversionInputPair)};\r\n        assert(get<0>(tuple_alloc_conversion_pair) == 5);\r\n        assert(get<1>(tuple_alloc_conversion_pair) == 6.0);\r\n\r\n        tuple<int, double> tuple_alloc_conversion_const_pair{allocator_arg, alloc, constConversionInputPair};\r\n        assert(get<0>(tuple_alloc_conversion_const_pair) == 7);\r\n        assert(get<1>(tuple_alloc_conversion_const_pair) == 8.0);\r\n\r\n        tuple<int, double> tuple_assign{};\r\n\r\n        tuple_assign = tuple_alloc_value;\r\n        assert(get<0>(tuple_assign) == 9);\r\n        assert(get<1>(tuple_assign) == 9.5);\r\n\r\n        tuple_assign = move(tuple_alloc);\r\n        assert(get<0>(tuple_assign) == 0);\r\n        assert(get<1>(tuple_assign) == 0.0);\r\n\r\n        tuple_assign = move(conversionInput);\r\n        assert(get<0>(tuple_assign) == 1);\r\n        assert(get<1>(tuple_assign) == 2.0);\r\n\r\n        tuple_assign = constConversionInput;\r\n        assert(get<0>(tuple_assign) == 3);\r\n        assert(get<1>(tuple_assign) == 4.0);\r\n\r\n        tuple_assign = move(conversionInputPair);\r\n        assert(get<0>(tuple_assign) == 5);\r\n        assert(get<1>(tuple_assign) == 6.0);\r\n\r\n        tuple_assign = constConversionInputPair;\r\n        assert(get<0>(tuple_assign) == 7);\r\n        assert(get<1>(tuple_assign) == 8.0);\r\n\r\n        tuple<int, double> x{10, 20.5};\r\n        tuple<int, double> y{30, 40.5};\r\n\r\n        swap(x, y);\r\n        assert(get<0>(x) == 30 && get<1>(x) == 40.5 && get<0>(y) == 10 && get<1>(y) == 20.5);\r\n\r\n        x.swap(y);\r\n        assert(get<0>(x) == 10 && get<1>(x) == 20.5 && get<0>(y) == 30 && get<1>(y) == 40.5);\r\n    }\r\n\r\n    // test array swap\r\n    {\r\n        array<int, 2> array1{{1, 2}};\r\n        array<int, 2> array2{{3, 4}};\r\n\r\n        swap(array1, array2);\r\n        assert(array1[0] == 3 && array1[1] == 4 && array2[0] == 1 && array2[1] == 2);\r\n\r\n        array1.swap(array2);\r\n        assert(array1[0] == 1 && array1[1] == 2 && array2[0] == 3 && array2[1] == 4);\r\n\r\n        array<int, 0> array_empty1 = {};\r\n        array<int, 0> array_empty2 = {};\r\n\r\n        swap(array_empty1, array_empty2);\r\n        array_empty1.swap(array_empty2);\r\n    }\r\n\r\n    // test array::fill\r\n    {\r\n        array<int, 2> meow = {};\r\n        meow.fill(1);\r\n        assert(meow[0] == 1 && meow[1] == 1);\r\n\r\n        array<int, 0> empty = {};\r\n        empty.fill(1);\r\n    }\r\n\r\n    // test back_inserter/back_insert_iterator\r\n    {\r\n        constexpr_container input;\r\n        const int toBeCopied = 5;\r\n        auto tested          = back_inserter(input);\r\n\r\n        *tested++ = 42;\r\n        *++tested = 1729;\r\n        *tested++ = 1234;\r\n        tested    = 4;\r\n        tested    = toBeCopied;\r\n\r\n        assert(input.buffer[0] == 42 && input.buffer[1] == 1729 && input.buffer[2] == 1234 && input.buffer[3] == 4\r\n               && input.buffer[4] == 5 && input.buffer[5] == 0);\r\n    }\r\n\r\n    // test front_inserter/front_insert_iterator\r\n    {\r\n        constexpr_container input;\r\n        const int toBeCopied = 5;\r\n        auto tested          = front_inserter(input);\r\n\r\n        *tested++ = 42;\r\n        *++tested = 1729;\r\n        *tested++ = 1234;\r\n        tested    = 4;\r\n        tested    = toBeCopied;\r\n\r\n        assert(input.buffer[0] == 42 && input.buffer[1] == 1729 && input.buffer[2] == 1234 && input.buffer[3] == 4\r\n               && input.buffer[4] == 5 && input.buffer[5] == 0);\r\n    }\r\n\r\n    // test inserter/insert_iterator\r\n    {\r\n        constexpr_container input;\r\n        const int toBeCopied = 5;\r\n        auto tested          = inserter(input, input.begin());\r\n\r\n        *tested++ = 42;\r\n        *++tested = 1729;\r\n        *tested++ = 1234;\r\n        tested    = 4;\r\n        tested    = toBeCopied;\r\n\r\n        assert(input.buffer[0] == 0 && input.buffer[1] == 42 && input.buffer[2] == 1729 && input.buffer[3] == 1234\r\n               && input.buffer[4] == 4 && input.buffer[5] == 5);\r\n    }\r\n\r\n    // test default_searcher\r\n    {\r\n        string_view in     = \"This is some string\";\r\n        string_view needle = \"some\";\r\n        default_searcher meow{needle.begin(), needle.end()};\r\n        auto [first, last] = meow(in.begin(), in.end());\r\n        assert(first - in.begin() == 8);\r\n        assert(last - first == static_cast<ptrdiff_t>(needle.size()));\r\n    }\r\n\r\n    // test char_traits assign/copy/_Copy_s/move and basic_string_view::copy/_Copy_s\r\n    {\r\n        using Elem   = char;\r\n        using Traits = char_traits<Elem>;\r\n\r\n        const Elem src[20]{\"cute fluffy KITTENS\"};\r\n        Elem buf[20]{\"hungry evil ZOMBIES\"};\r\n        assert(buf == \"hungry evil ZOMBIES\"sv);\r\n\r\n        assert(Traits::copy(buf, src, 12) == buf);\r\n        assert(buf == \"cute fluffy ZOMBIES\"sv);\r\n\r\n        assert(Traits::assign(buf, 4, '1') == buf);\r\n        assert(buf == \"1111 fluffy ZOMBIES\"sv);\r\n\r\n        assert(Traits::move(buf, src, 19) == buf); // different arrays\r\n        assert(buf == \"cute fluffy KITTENS\"sv);\r\n\r\n        assert(Traits::move(buf, buf, 19) == buf); // self-assignment\r\n        assert(buf == \"cute fluffy KITTENS\"sv);\r\n\r\n        assert(Traits::move(buf + 5, buf + 12, 6) == buf + 5); // non-overlapping\r\n        assert(buf == \"cute KITTEN KITTENS\"sv);\r\n\r\n        const auto sv = \"..........abc......\"sv;\r\n        assert(sv.copy(buf, 4, 10) == 4);\r\n        assert(buf == \"abc. KITTEN KITTENS\"sv);\r\n\r\n        assert(sv.copy(buf, 19) == 19);\r\n        assert(buf == \"..........abc......\"sv);\r\n\r\n        assert(Traits::move(buf + 8, buf + 10, 2) == buf + 8); // adjacent, dest before src\r\n        assert(buf == \"........ababc......\"sv);\r\n\r\n        assert(Traits::move(buf + 13, buf + 9, 4) == buf + 13); // adjacent, dest after src\r\n        assert(buf == \"........ababcbabc..\"sv);\r\n\r\n        assert(Traits::move(buf + 4, buf + 8, 10) == buf + 4); // overlapping, dest before src\r\n        assert(buf == \"....ababcbabc.abc..\"sv);\r\n\r\n        assert(Traits::move(buf + 5, buf + 3, 11) == buf + 5); // overlapping, dest after src\r\n        assert(buf == \"....a.ababcbabc.c..\"sv);\r\n\r\n        assert(Traits::_Copy_s(buf, 20, src, 18) == buf);\r\n        assert(buf == \"cute fluffy KITTEN.\"sv);\r\n\r\n        assert(sv._Copy_s(buf, 20, 4, 10) == 4);\r\n        assert(buf == \"abc. fluffy KITTEN.\"sv);\r\n\r\n        assert(sv._Copy_s(buf, 20, 11) == 11);\r\n        assert(buf == \"..........a KITTEN.\"sv);\r\n    }\r\n\r\n    {\r\n        using Elem   = char16_t;\r\n        using Traits = char_traits<Elem>;\r\n\r\n        const Elem src[20]{u\"cute fluffy KITTENS\"};\r\n        Elem buf[20]{u\"hungry evil ZOMBIES\"};\r\n        assert(buf == u\"hungry evil ZOMBIES\"sv);\r\n\r\n        assert(Traits::copy(buf, src, 12) == buf);\r\n        assert(buf == u\"cute fluffy ZOMBIES\"sv);\r\n\r\n        assert(Traits::assign(buf, 4, u'1') == buf);\r\n        assert(buf == u\"1111 fluffy ZOMBIES\"sv);\r\n\r\n        assert(Traits::move(buf, src, 19) == buf); // different arrays\r\n        assert(buf == u\"cute fluffy KITTENS\"sv);\r\n\r\n        assert(Traits::move(buf, buf, 19) == buf); // self-assignment\r\n        assert(buf == u\"cute fluffy KITTENS\"sv);\r\n\r\n        assert(Traits::move(buf + 5, buf + 12, 6) == buf + 5); // non-overlapping\r\n        assert(buf == u\"cute KITTEN KITTENS\"sv);\r\n\r\n        const auto sv = u\"..........abc......\"sv;\r\n        assert(sv.copy(buf, 4, 10) == 4);\r\n        assert(buf == u\"abc. KITTEN KITTENS\"sv);\r\n\r\n        assert(sv.copy(buf, 19) == 19);\r\n        assert(buf == u\"..........abc......\"sv);\r\n\r\n        assert(Traits::move(buf + 8, buf + 10, 2) == buf + 8); // adjacent, dest before src\r\n        assert(buf == u\"........ababc......\"sv);\r\n\r\n        assert(Traits::move(buf + 13, buf + 9, 4) == buf + 13); // adjacent, dest after src\r\n        assert(buf == u\"........ababcbabc..\"sv);\r\n\r\n        assert(Traits::move(buf + 4, buf + 8, 10) == buf + 4); // overlapping, dest before src\r\n        assert(buf == u\"....ababcbabc.abc..\"sv);\r\n\r\n        assert(Traits::move(buf + 5, buf + 3, 11) == buf + 5); // overlapping, dest after src\r\n        assert(buf == u\"....a.ababcbabc.c..\"sv);\r\n\r\n        assert(Traits::_Copy_s(buf, 20, src, 18) == buf);\r\n        assert(buf == u\"cute fluffy KITTEN.\"sv);\r\n\r\n        assert(sv._Copy_s(buf, 20, 4, 10) == 4);\r\n        assert(buf == u\"abc. fluffy KITTEN.\"sv);\r\n\r\n        assert(sv._Copy_s(buf, 20, 11) == 11);\r\n        assert(buf == u\"..........a KITTEN.\"sv);\r\n    }\r\n\r\n    {\r\n        using Elem   = char32_t;\r\n        using Traits = char_traits<Elem>;\r\n\r\n        const Elem src[20]{U\"cute fluffy KITTENS\"};\r\n        Elem buf[20]{U\"hungry evil ZOMBIES\"};\r\n        assert(buf == U\"hungry evil ZOMBIES\"sv);\r\n\r\n        assert(Traits::copy(buf, src, 12) == buf);\r\n        assert(buf == U\"cute fluffy ZOMBIES\"sv);\r\n\r\n        assert(Traits::assign(buf, 4, U'1') == buf);\r\n        assert(buf == U\"1111 fluffy ZOMBIES\"sv);\r\n\r\n        assert(Traits::move(buf, src, 19) == buf); // different arrays\r\n        assert(buf == U\"cute fluffy KITTENS\"sv);\r\n\r\n        assert(Traits::move(buf, buf, 19) == buf); // self-assignment\r\n        assert(buf == U\"cute fluffy KITTENS\"sv);\r\n\r\n        assert(Traits::move(buf + 5, buf + 12, 6) == buf + 5); // non-overlapping\r\n        assert(buf == U\"cute KITTEN KITTENS\"sv);\r\n\r\n        const auto sv = U\"..........abc......\"sv;\r\n        assert(sv.copy(buf, 4, 10) == 4);\r\n        assert(buf == U\"abc. KITTEN KITTENS\"sv);\r\n\r\n        assert(sv.copy(buf, 19) == 19);\r\n        assert(buf == U\"..........abc......\"sv);\r\n\r\n        assert(Traits::move(buf + 8, buf + 10, 2) == buf + 8); // adjacent, dest before src\r\n        assert(buf == U\"........ababc......\"sv);\r\n\r\n        assert(Traits::move(buf + 13, buf + 9, 4) == buf + 13); // adjacent, dest after src\r\n        assert(buf == U\"........ababcbabc..\"sv);\r\n\r\n        assert(Traits::move(buf + 4, buf + 8, 10) == buf + 4); // overlapping, dest before src\r\n        assert(buf == U\"....ababcbabc.abc..\"sv);\r\n\r\n        assert(Traits::move(buf + 5, buf + 3, 11) == buf + 5); // overlapping, dest after src\r\n        assert(buf == U\"....a.ababcbabc.c..\"sv);\r\n\r\n        assert(Traits::_Copy_s(buf, 20, src, 18) == buf);\r\n        assert(buf == U\"cute fluffy KITTEN.\"sv);\r\n\r\n        assert(sv._Copy_s(buf, 20, 4, 10) == 4);\r\n        assert(buf == U\"abc. fluffy KITTEN.\"sv);\r\n\r\n        assert(sv._Copy_s(buf, 20, 11) == 11);\r\n        assert(buf == U\"..........a KITTEN.\"sv);\r\n    }\r\n\r\n    {\r\n        using Elem   = wchar_t;\r\n        using Traits = char_traits<Elem>;\r\n\r\n        const Elem src[20]{L\"cute fluffy KITTENS\"};\r\n        Elem buf[20]{L\"hungry evil ZOMBIES\"};\r\n        assert(buf == L\"hungry evil ZOMBIES\"sv);\r\n\r\n        assert(Traits::copy(buf, src, 12) == buf);\r\n        assert(buf == L\"cute fluffy ZOMBIES\"sv);\r\n\r\n        assert(Traits::assign(buf, 4, L'1') == buf);\r\n        assert(buf == L\"1111 fluffy ZOMBIES\"sv);\r\n\r\n        assert(Traits::move(buf, src, 19) == buf); // different arrays\r\n        assert(buf == L\"cute fluffy KITTENS\"sv);\r\n\r\n        assert(Traits::move(buf, buf, 19) == buf); // self-assignment\r\n        assert(buf == L\"cute fluffy KITTENS\"sv);\r\n\r\n        assert(Traits::move(buf + 5, buf + 12, 6) == buf + 5); // non-overlapping\r\n        assert(buf == L\"cute KITTEN KITTENS\"sv);\r\n\r\n        const auto sv = L\"..........abc......\"sv;\r\n        assert(sv.copy(buf, 4, 10) == 4);\r\n        assert(buf == L\"abc. KITTEN KITTENS\"sv);\r\n\r\n        assert(sv.copy(buf, 19) == 19);\r\n        assert(buf == L\"..........abc......\"sv);\r\n\r\n        assert(Traits::move(buf + 8, buf + 10, 2) == buf + 8); // adjacent, dest before src\r\n        assert(buf == L\"........ababc......\"sv);\r\n\r\n        assert(Traits::move(buf + 13, buf + 9, 4) == buf + 13); // adjacent, dest after src\r\n        assert(buf == L\"........ababcbabc..\"sv);\r\n\r\n        assert(Traits::move(buf + 4, buf + 8, 10) == buf + 4); // overlapping, dest before src\r\n        assert(buf == L\"....ababcbabc.abc..\"sv);\r\n\r\n        assert(Traits::move(buf + 5, buf + 3, 11) == buf + 5); // overlapping, dest after src\r\n        assert(buf == L\"....a.ababcbabc.c..\"sv);\r\n\r\n        assert(Traits::_Copy_s(buf, 20, src, 18) == buf);\r\n        assert(buf == L\"cute fluffy KITTEN.\"sv);\r\n\r\n        assert(sv._Copy_s(buf, 20, 4, 10) == 4);\r\n        assert(buf == L\"abc. fluffy KITTEN.\"sv);\r\n\r\n        assert(sv._Copy_s(buf, 20, 11) == 11);\r\n        assert(buf == L\"..........a KITTEN.\"sv);\r\n    }\r\n\r\n#ifdef __cpp_lib_char8_t\r\n    {\r\n        using Elem   = char8_t;\r\n        using Traits = char_traits<Elem>;\r\n\r\n        const Elem src[20]{u8\"cute fluffy KITTENS\"};\r\n        Elem buf[20]{u8\"hungry evil ZOMBIES\"};\r\n        assert(buf == u8\"hungry evil ZOMBIES\"sv);\r\n\r\n        assert(Traits::copy(buf, src, 12) == buf);\r\n        assert(buf == u8\"cute fluffy ZOMBIES\"sv);\r\n\r\n        assert(Traits::assign(buf, 4, u8'1') == buf);\r\n        assert(buf == u8\"1111 fluffy ZOMBIES\"sv);\r\n\r\n        assert(Traits::move(buf, src, 19) == buf); // different arrays\r\n        assert(buf == u8\"cute fluffy KITTENS\"sv);\r\n\r\n        assert(Traits::move(buf, buf, 19) == buf); // self-assignment\r\n        assert(buf == u8\"cute fluffy KITTENS\"sv);\r\n\r\n        assert(Traits::move(buf + 5, buf + 12, 6) == buf + 5); // non-overlapping\r\n        assert(buf == u8\"cute KITTEN KITTENS\"sv);\r\n\r\n        const auto sv = u8\"..........abc......\"sv;\r\n        assert(sv.copy(buf, 4, 10) == 4);\r\n        assert(buf == u8\"abc. KITTEN KITTENS\"sv);\r\n\r\n        assert(sv.copy(buf, 19) == 19);\r\n        assert(buf == u8\"..........abc......\"sv);\r\n\r\n        assert(Traits::move(buf + 8, buf + 10, 2) == buf + 8); // adjacent, dest before src\r\n        assert(buf == u8\"........ababc......\"sv);\r\n\r\n        assert(Traits::move(buf + 13, buf + 9, 4) == buf + 13); // adjacent, dest after src\r\n        assert(buf == u8\"........ababcbabc..\"sv);\r\n\r\n        assert(Traits::move(buf + 4, buf + 8, 10) == buf + 4); // overlapping, dest before src\r\n        assert(buf == u8\"....ababcbabc.abc..\"sv);\r\n\r\n        assert(Traits::move(buf + 5, buf + 3, 11) == buf + 5); // overlapping, dest after src\r\n        assert(buf == u8\"....a.ababcbabc.c..\"sv);\r\n\r\n        assert(Traits::_Copy_s(buf, 20, src, 18) == buf);\r\n        assert(buf == u8\"cute fluffy KITTEN.\"sv);\r\n\r\n        assert(sv._Copy_s(buf, 20, 4, 10) == 4);\r\n        assert(buf == u8\"abc. fluffy KITTEN.\"sv);\r\n\r\n        assert(sv._Copy_s(buf, 20, 11) == 11);\r\n        assert(buf == u8\"..........a KITTEN.\"sv);\r\n    }\r\n#endif // __cpp_lib_char8_t\r\n\r\n    // test char_traits::compare refactoring through basic_string_view (not part of P1032R1)\r\n    {\r\n        assert(\"cat\"sv == \"cat\"sv);\r\n        assert(\"cat\"sv < \"category\"sv);\r\n        assert(\"catastrophe\"sv > \"cat\"sv);\r\n        assert(\"catch\"sv < \"category\"sv);\r\n        assert(\"catenary\"sv > \"catapult\"sv);\r\n\r\n        assert(u\"cat\"sv == u\"cat\"sv);\r\n        assert(u\"cat\"sv < u\"category\"sv);\r\n        assert(u\"catastrophe\"sv > u\"cat\"sv);\r\n        assert(u\"catch\"sv < u\"category\"sv);\r\n        assert(u\"catenary\"sv > u\"catapult\"sv);\r\n\r\n        assert(U\"cat\"sv == U\"cat\"sv);\r\n        assert(U\"cat\"sv < U\"category\"sv);\r\n        assert(U\"catastrophe\"sv > U\"cat\"sv);\r\n        assert(U\"catch\"sv < U\"category\"sv);\r\n        assert(U\"catenary\"sv > U\"catapult\"sv);\r\n\r\n        assert(L\"cat\"sv == L\"cat\"sv);\r\n        assert(L\"cat\"sv < L\"category\"sv);\r\n        assert(L\"catastrophe\"sv > L\"cat\"sv);\r\n        assert(L\"catch\"sv < L\"category\"sv);\r\n        assert(L\"catenary\"sv > L\"catapult\"sv);\r\n\r\n        assert(u8\"cat\"sv == u8\"cat\"sv);\r\n        assert(u8\"cat\"sv < u8\"category\"sv);\r\n        assert(u8\"catastrophe\"sv > u8\"cat\"sv);\r\n        assert(u8\"catch\"sv < u8\"category\"sv);\r\n        assert(u8\"catenary\"sv > u8\"catapult\"sv);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(run_tests());\r\n    assert(run_tests());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1132R7_out_ptr/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1132R7_out_ptr/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nvoid test_raw_ptr() {\r\n    int i        = 5;\r\n    int* int_ptr = &i;\r\n\r\n    {\r\n        const auto f = [](int** ptr) {\r\n            assert(**ptr == 5);\r\n            static int i = 7;\r\n            *ptr         = &i;\r\n        };\r\n\r\n        f(inout_ptr(int_ptr));\r\n\r\n        assert(*int_ptr == 7);\r\n    }\r\n    {\r\n        const auto f = [](void** ptr) {\r\n            assert(*static_cast<int*>(*ptr) == 7);\r\n            static int i = 15;\r\n            *ptr         = &i;\r\n        };\r\n\r\n        f(inout_ptr(int_ptr));\r\n\r\n        assert(*int_ptr == 15);\r\n    }\r\n    // LWG-3897 inout_ptr will not update raw pointer to null\r\n    {\r\n        const auto delete_nullify = [](int** ptr) {\r\n            delete *ptr;\r\n            *ptr = nullptr;\r\n        };\r\n\r\n        int* ptr_allocated = new int{};\r\n\r\n        delete_nullify(inout_ptr(ptr_allocated));\r\n\r\n        assert(ptr_allocated == nullptr);\r\n    }\r\n}\r\n\r\nvoid test_shared_ptr() {\r\n    shared_ptr<int> int_ptr = make_shared<int>(5);\r\n\r\n    {\r\n        const auto f = [](int** ptr) { *ptr = new int(7); };\r\n\r\n        f(out_ptr(int_ptr, default_delete<int>{}));\r\n\r\n        assert(*int_ptr == 7);\r\n    }\r\n    {\r\n        const auto f = [](void** ptr) { *ptr = new int(15); };\r\n\r\n        f(out_ptr(int_ptr, default_delete<int>{}));\r\n\r\n        assert(*int_ptr == 15);\r\n    }\r\n\r\n    int count          = 0;\r\n    const auto deleter = [&count](int* ptr) {\r\n        ++count;\r\n        delete ptr;\r\n    };\r\n\r\n    {\r\n        const auto f = [](int** ptr) { *ptr = new int(23); };\r\n\r\n        f(out_ptr(int_ptr, deleter));\r\n\r\n        assert(count == 0);\r\n        assert(*int_ptr == 23);\r\n    }\r\n    {\r\n        const auto f = [](void** ptr) { *ptr = new int(32); };\r\n\r\n        f(out_ptr(int_ptr, deleter));\r\n\r\n        assert(count == 1);\r\n        assert(*int_ptr == 32);\r\n    }\r\n\r\n    // LWG-3734 Inconsistency in inout_ptr and out_ptr for empty case\r\n    {\r\n        const auto f = [](void** ptr) { *ptr = new int(42); };\r\n\r\n        {\r\n            auto temp_adaptor = out_ptr(int_ptr, deleter);\r\n            assert(int_ptr.get() == nullptr);\r\n            f(temp_adaptor);\r\n        }\r\n\r\n        assert(count == 2);\r\n        assert(*int_ptr == 42);\r\n    }\r\n\r\n    int_ptr.reset();\r\n    assert(count == 3);\r\n}\r\n\r\ntemplate <class Ptr, class Pointer = void, class... Args>\r\nvoid test_smart_ptr(Args&&... args) {\r\n    Ptr int_ptr{new int(5)};\r\n\r\n    {\r\n        const auto f = [](int** ptr) {\r\n            assert(**ptr == 5);\r\n            *ptr = new int(7);\r\n        };\r\n\r\n        f(inout_ptr<Pointer>(int_ptr, forward<Args>(args)...));\r\n\r\n        assert(*int_ptr == 7);\r\n    }\r\n    {\r\n        const auto f = [](int** ptr) { *ptr = new int(12); };\r\n\r\n        f(out_ptr<Pointer>(int_ptr, forward<Args>(args)...));\r\n\r\n        assert(*int_ptr == 12);\r\n    }\r\n    {\r\n        const auto f = [](void** ptr) {\r\n            assert(*static_cast<int*>(*ptr) == 12);\r\n            *ptr = new int(15);\r\n        };\r\n\r\n        f(inout_ptr<int*>(int_ptr, forward<Args>(args)...));\r\n\r\n        assert(*int_ptr == 15);\r\n    }\r\n    {\r\n        const auto f = [](void** ptr) { *ptr = new int(19); };\r\n\r\n        f(out_ptr<int*>(int_ptr, forward<Args>(args)...));\r\n\r\n        assert(*int_ptr == 19);\r\n    }\r\n\r\n    // LWG-3734 Inconsistency in inout_ptr and out_ptr for empty case\r\n    {\r\n        const auto f = [](void** ptr) { *ptr = new int(42); };\r\n\r\n        {\r\n            auto temp_adaptor = out_ptr<int*>(int_ptr);\r\n            assert(int_ptr.get() == nullptr);\r\n            f(temp_adaptor);\r\n        }\r\n\r\n        assert(*int_ptr == 42);\r\n    }\r\n\r\n    // LWG-3594 inout_ptr - inconsistent release() in destructor\r\n    {\r\n        const auto f = [](int** ptr) {\r\n            delete *ptr;\r\n            *ptr = nullptr;\r\n        };\r\n\r\n        f(inout_ptr<int*>(int_ptr, forward<Args>(args)...));\r\n\r\n        assert(int_ptr.get() == nullptr);\r\n    }\r\n}\r\n\r\nstruct reset_tag {};\r\n\r\nstruct resettable_ptr {\r\n    using element_type = int; // test having element_type only\r\n\r\n    unique_ptr<int> ptr;\r\n\r\n    explicit resettable_ptr(int* p) : ptr(p) {}\r\n\r\n    void reset() {\r\n        ptr.reset();\r\n    }\r\n\r\n    void reset(int* p, reset_tag) {\r\n        ptr.reset(p);\r\n    }\r\n\r\n    auto operator*() const {\r\n        return *ptr;\r\n    }\r\n\r\n    auto get() const {\r\n        return ptr.get();\r\n    }\r\n\r\n    void release() {\r\n        ptr.release();\r\n    }\r\n};\r\n\r\nstruct constructible_ptr {\r\n    using pointer = int*; // test having pointer only\r\n\r\n    unique_ptr<int> ptr;\r\n\r\n    constructible_ptr() = default;\r\n    explicit constructible_ptr(int* p) : ptr(p) {}\r\n    explicit constructible_ptr(int* p, reset_tag) : ptr(p) {}\r\n\r\n    auto operator*() const {\r\n        return *ptr;\r\n    }\r\n\r\n    auto get() const {\r\n        return ptr.get();\r\n    }\r\n\r\n    void release() {\r\n        ptr.release();\r\n    }\r\n};\r\n\r\nstruct resettable_ptr2 : resettable_ptr {\r\n    using resettable_ptr::resettable_ptr;\r\n\r\nprivate:\r\n    using resettable_ptr::element_type;\r\n};\r\n\r\ntemplate <>\r\nstruct pointer_traits<resettable_ptr2> {\r\n    using element_type = int; // test having only pointer_traits::element_type\r\n};\r\n\r\nstruct constructible_ptr2 : constructible_ptr {\r\n    using constructible_ptr::constructible_ptr;\r\n\r\nprivate:\r\n    using constructible_ptr::pointer;\r\n};\r\n\r\ntemplate <>\r\nstruct pointer_traits<constructible_ptr2> {\r\n    // test having nothing\r\n};\r\n\r\nint main() {\r\n    test_raw_ptr();\r\n    test_shared_ptr();\r\n    test_smart_ptr<unique_ptr<int>>();\r\n    test_smart_ptr<resettable_ptr>(reset_tag{});\r\n    test_smart_ptr<constructible_ptr>(reset_tag{});\r\n    test_smart_ptr<resettable_ptr2>(reset_tag{});\r\n    test_smart_ptr<constructible_ptr2, int*>(reset_tag{});\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1135R6_atomic_flag_test/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1135R6_atomic_flag_test/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <atomic>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <execution>\r\n#include <numeric>\r\n#include <vector>\r\n\r\nconstexpr auto mo = std::memory_order_seq_cst;\r\n\r\ntemplate <typename FlagType, typename IsSet, typename TestAndSet, typename Clear>\r\nvoid test_flags(const IsSet is_set, const TestAndSet test_and_set, const Clear clear) {\r\n    constexpr std::size_t unique      = 800;\r\n    constexpr std::size_t repetitions = 800;\r\n    constexpr std::size_t total       = unique * repetitions;\r\n    constexpr std::size_t dups        = total - unique;\r\n\r\n    FlagType flags[unique];\r\n    std::vector<FlagType*> ptrs;\r\n    ptrs.reserve(total);\r\n    for (std::size_t i = 0; i != repetitions; ++i) {\r\n        for (auto& flag : flags) {\r\n            ptrs.push_back(&flag);\r\n        }\r\n    }\r\n\r\n    using std::execution::par;\r\n\r\n    assert(std::transform_reduce(par, ptrs.begin(), ptrs.end(), 0, std::plus{}, is_set) == 0);\r\n    assert(std::transform_reduce(par, ptrs.begin(), ptrs.end(), 0, std::plus{}, test_and_set) == dups);\r\n    assert(std::transform_reduce(par, ptrs.begin(), ptrs.end(), 0, std::plus{}, is_set) == total);\r\n    assert(std::transform_reduce(par, ptrs.begin(), ptrs.end(), 0, std::plus{}, test_and_set) == total);\r\n    std::for_each(par, ptrs.begin(), ptrs.end(), clear);\r\n    assert(std::transform_reduce(par, ptrs.begin(), ptrs.end(), 0, std::plus{}, is_set) == 0);\r\n}\r\n\r\ntemplate <typename FlagType>\r\nvoid test_flags_members() {\r\n    const auto is_set       = [](const FlagType* f) { return f->test(); };\r\n    const auto test_and_set = [](FlagType* f) { return f->test_and_set(); };\r\n    const auto clear        = [](FlagType* f) { f->clear(); };\r\n\r\n    test_flags<FlagType>(is_set, test_and_set, clear);\r\n}\r\n\r\ntemplate <typename FlagType>\r\nvoid test_flags_members_mo() {\r\n    const auto is_set       = [](const FlagType* f) { return f->test(mo); };\r\n    const auto test_and_set = [](FlagType* f) { return f->test_and_set(mo); };\r\n    const auto clear        = [](FlagType* f) { f->clear(mo); };\r\n\r\n    test_flags<FlagType>(is_set, test_and_set, clear);\r\n}\r\n\r\ntemplate <typename FlagType>\r\nvoid test_flags_free() {\r\n    const auto is_set       = [](const FlagType* f) { return std::atomic_flag_test(f); };\r\n    const auto test_and_set = [](FlagType* f) { return std::atomic_flag_test_and_set(f); };\r\n    const auto clear        = [](FlagType* f) { std::atomic_flag_clear(f); };\r\n\r\n    test_flags<FlagType>(is_set, test_and_set, clear);\r\n}\r\n\r\ntemplate <typename FlagType>\r\nvoid test_flags_free_mo() {\r\n    const auto is_set       = [](const FlagType* f) { return std::atomic_flag_test_explicit(f, mo); };\r\n    const auto test_and_set = [](FlagType* f) { return std::atomic_flag_test_and_set_explicit(f, mo); };\r\n    const auto clear        = [](FlagType* f) { std::atomic_flag_clear_explicit(f, mo); };\r\n\r\n    test_flags<FlagType>(is_set, test_and_set, clear);\r\n}\r\n\r\ntemplate <typename FlagType>\r\nvoid test_flag_type() {\r\n    test_flags_members<FlagType>();\r\n    test_flags_free<FlagType>();\r\n    test_flags_members_mo<FlagType>();\r\n    test_flags_free_mo<FlagType>();\r\n}\r\n\r\nint main() {\r\n    test_flag_type<std::atomic_flag>();\r\n    test_flag_type<volatile std::atomic_flag>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1135R6_atomic_wait/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1135R6_atomic_wait/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <atomic>\r\n#include <cassert>\r\n#include <chrono>\r\n#include <cstring>\r\n#include <memory>\r\n#include <thread>\r\n\r\ntemplate <template <class> class Template, class UnderlyingType>\r\nvoid test_atomic_wait_func_impl(UnderlyingType& old_value, const UnderlyingType new_value,\r\n    const std::chrono::steady_clock::duration waiting_duration) {\r\n    constexpr int seq_max_size = 10;\r\n    char seq[seq_max_size + 1];\r\n    std::atomic<char*> base = seq;\r\n    auto add_seq            = [&](char ch) {\r\n        char* p = base.fetch_add(1, std::memory_order_relaxed);\r\n        assert(p - seq < seq_max_size);\r\n        *p = ch;\r\n    };\r\n\r\n    Template<UnderlyingType> a(old_value);\r\n    a.wait(new_value);\r\n\r\n    add_seq('1');\r\n\r\n    std::thread thd([&] {\r\n        std::this_thread::sleep_for(waiting_duration);\r\n        add_seq('2');\r\n        a.notify_all();\r\n        std::this_thread::sleep_for(waiting_duration);\r\n        add_seq('3');\r\n        a.store(old_value);\r\n        a.notify_one();\r\n        std::this_thread::sleep_for(waiting_duration);\r\n        add_seq('4');\r\n        a.store(new_value);\r\n        a.notify_one();\r\n#ifdef CAN_FAIL_ON_TIMING_ASSUMPTION\r\n        // timing assumption that the main thread evaluates the `wait(old_value)` before this timeout expires\r\n        std::this_thread::sleep_for(waiting_duration);\r\n        add_seq('6');\r\n#endif\r\n    });\r\n\r\n    a.wait(old_value);\r\n    const auto loaded = a.load();\r\n    assert(memcmp(&loaded, &new_value, sizeof(UnderlyingType)) == 0);\r\n\r\n    add_seq('5');\r\n\r\n    thd.join();\r\n\r\n    add_seq('\\0');\r\n\r\n#ifdef CAN_FAIL_ON_TIMING_ASSUMPTION\r\n    assert(strcmp(seq, \"123456\") == 0);\r\n#else\r\n    assert(strcmp(seq, \"12345\") == 0);\r\n#endif\r\n}\r\n\r\ntemplate <class UnderlyingType>\r\nvoid test_atomic_wait_func(UnderlyingType old_value, const UnderlyingType new_value,\r\n    const std::chrono::steady_clock::duration waiting_duration) {\r\n    test_atomic_wait_func_impl<std::atomic, UnderlyingType>(old_value, new_value, waiting_duration);\r\n    alignas(std::atomic_ref<UnderlyingType>::required_alignment) UnderlyingType old_value_for_ref = old_value;\r\n    test_atomic_wait_func_impl<std::atomic_ref, UnderlyingType>(old_value_for_ref, new_value, waiting_duration);\r\n}\r\n\r\ntemplate <class UnderlyingType>\r\nvoid test_atomic_wait_func_ptr(UnderlyingType old_value, const UnderlyingType new_value,\r\n    const std::chrono::steady_clock::duration waiting_duration) {\r\n    test_atomic_wait_func_impl<std::atomic, UnderlyingType>(old_value, new_value, waiting_duration);\r\n}\r\n\r\n\r\ntemplate <template <class> class Template, class UnderlyingType>\r\nvoid test_notify_all_notifies_all_impl(UnderlyingType& old_value, const UnderlyingType new_value,\r\n    const std::chrono::steady_clock::duration waiting_duration) {\r\n    Template<UnderlyingType> c(old_value);\r\n    const auto waitFn = [&c, old_value] { c.wait(old_value); };\r\n\r\n    std::thread w1{waitFn};\r\n    std::thread w2{waitFn};\r\n    std::thread w3{waitFn};\r\n\r\n    std::this_thread::sleep_for(waiting_duration);\r\n    c.store(new_value);\r\n    c.notify_all(); // if this doesn't really notify all, the following joins will deadlock\r\n\r\n    w1.join();\r\n    w2.join();\r\n    w3.join();\r\n}\r\n\r\ntemplate <class UnderlyingType>\r\nvoid test_notify_all_notifies_all(UnderlyingType old_value, const UnderlyingType new_value,\r\n    const std::chrono::steady_clock::duration waiting_duration) {\r\n    test_notify_all_notifies_all_impl<std::atomic, UnderlyingType>(old_value, new_value, waiting_duration);\r\n    alignas(std::atomic_ref<UnderlyingType>::required_alignment) UnderlyingType old_value_for_ref = old_value;\r\n    test_notify_all_notifies_all_impl<std::atomic_ref, UnderlyingType>(old_value_for_ref, new_value, waiting_duration);\r\n}\r\n\r\ntemplate <class UnderlyingType>\r\nvoid test_notify_all_notifies_all_ptr(UnderlyingType old_value, const UnderlyingType new_value,\r\n    const std::chrono::steady_clock::duration waiting_duration) {\r\n    // increased waiting_duration because timing assumption might not hold for atomic smart pointers\r\n    test_notify_all_notifies_all_impl<std::atomic, UnderlyingType>(old_value, new_value, 3 * waiting_duration);\r\n}\r\n\r\n\r\ntemplate <template <class> class Template, class UnderlyingType>\r\nvoid test_pad_bits_impl(const std::chrono::steady_clock::duration waiting_duration) {\r\n    alignas(std::atomic_ref<UnderlyingType>::required_alignment) UnderlyingType old_value;\r\n    memset(&old_value, 0x66, sizeof(UnderlyingType));\r\n    old_value.set(1);\r\n\r\n    UnderlyingType same_old_value;\r\n    memset(&same_old_value, 0x99, sizeof(UnderlyingType));\r\n    same_old_value.set(1);\r\n\r\n    Template<UnderlyingType> c(old_value);\r\n\r\n    bool trigger      = false;\r\n    const auto waitFn = [&c, same_old_value, &trigger] {\r\n        c.wait(same_old_value);\r\n        trigger = true;\r\n    };\r\n\r\n    std::thread w1{waitFn};\r\n\r\n    std::this_thread::sleep_for(waiting_duration);\r\n    assert(!trigger);\r\n\r\n    c.store(old_value);\r\n    c.notify_one();\r\n\r\n    std::this_thread::sleep_for(waiting_duration);\r\n    assert(!trigger);\r\n\r\n    UnderlyingType new_value;\r\n    memset(&new_value, 0x99, sizeof(UnderlyingType));\r\n    new_value.set(2);\r\n    c.store(new_value);\r\n    c.notify_one();\r\n\r\n#ifdef CAN_FAIL_ON_TIMING_ASSUMPTION\r\n    std::this_thread::sleep_for(waiting_duration);\r\n    assert(trigger);\r\n    w1.join();\r\n#else // ^^^ CAN_FAIL_ON_TIMING_ASSUMPTION / !CAN_FAIL_ON_TIMING_ASSUMPTION vvv\r\n    w1.join();\r\n    assert(trigger);\r\n#endif // ^^^ !CAN_FAIL_ON_TIMING_ASSUMPTION ^^^\r\n}\r\n\r\ntemplate <class UnderlyingType>\r\nvoid test_pad_bits(const std::chrono::steady_clock::duration waiting_duration) {\r\n    test_pad_bits_impl<std::atomic, UnderlyingType>(waiting_duration);\r\n    test_pad_bits_impl<std::atomic_ref, UnderlyingType>(waiting_duration);\r\n}\r\n\r\nstruct two_shorts {\r\n    short a;\r\n    short b;\r\n\r\n    friend bool operator==(two_shorts, two_shorts) = delete;\r\n};\r\n\r\nstruct three_chars {\r\n    char a;\r\n    char b;\r\n    char c;\r\n\r\n    friend bool operator==(three_chars, three_chars) = delete;\r\n};\r\n\r\nstruct big_char_like {\r\n    char value;\r\n    char unused[16];\r\n\r\n    explicit big_char_like(char value_) : value(value_), unused{} {}\r\n\r\n    friend bool operator==(big_char_like, big_char_like) = delete;\r\n};\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4324) // structure was padded due to alignment specifier\r\ntemplate <size_t size>\r\nstruct with_padding_bits {\r\n    alignas(size) char value;\r\n\r\n    void set(const char value_) {\r\n        value = value_;\r\n    }\r\n\r\n    friend bool operator==(with_padding_bits, with_padding_bits) = delete;\r\n};\r\n#pragma warning(pop)\r\n\r\ntemplate <class T, class U>\r\n[[nodiscard]] bool ownership_equal(const T& t, const U& u) {\r\n    return !t.owner_before(u) && !u.owner_before(t);\r\n}\r\n\r\ninline void test_gh_3602() {\r\n    // GH-3602 std::atomic<std::shared_ptr>::wait does not seem to care about control block difference. Is this a bug?\r\n    {\r\n        auto sp1    = std::make_shared<char>();\r\n        auto holder = [sp1] {};\r\n        auto sp2    = std::make_shared<decltype(holder)>(holder);\r\n        std::shared_ptr<char> sp3{sp2, sp1.get()};\r\n\r\n        std::atomic<std::shared_ptr<char>> asp{sp1};\r\n        asp.wait(sp3);\r\n    }\r\n    {\r\n        auto sp1    = std::make_shared<char>();\r\n        auto holder = [sp1] {};\r\n        auto sp2    = std::make_shared<decltype(holder)>(holder);\r\n        std::shared_ptr<char> sp3{sp2, sp1.get()};\r\n        std::weak_ptr<char> wp3{sp3};\r\n\r\n        std::atomic<std::weak_ptr<char>> awp{sp1};\r\n        awp.wait(wp3);\r\n    }\r\n\r\n    {\r\n        auto sp1    = std::make_shared<char>();\r\n        auto holder = [sp1] {};\r\n        auto sp2    = std::make_shared<decltype(holder)>(holder);\r\n        std::shared_ptr<char> sp3{sp2, sp1.get()};\r\n\r\n        std::atomic<std::shared_ptr<char>> asp{sp3};\r\n\r\n        std::thread t([&] {\r\n            std::this_thread::sleep_for(std::chrono::milliseconds(100));\r\n            asp = sp1;\r\n            asp.notify_one();\r\n        });\r\n\r\n        asp.wait(sp3);\r\n\r\n        t.join();\r\n    }\r\n\r\n    { // Also test shared_ptrs that own the null pointer.\r\n        int* const raw = nullptr;\r\n\r\n        std::shared_ptr<int> sp_empty;\r\n        std::shared_ptr<int> sp_also_empty;\r\n        std::shared_ptr<int> sp_original(raw);\r\n        std::shared_ptr<int> sp_copy(sp_original);\r\n        std::shared_ptr<int> sp_different(raw);\r\n\r\n        assert(ownership_equal(sp_empty, sp_also_empty));\r\n        assert(!ownership_equal(sp_original, sp_empty));\r\n        assert(ownership_equal(sp_original, sp_copy));\r\n        assert(!ownership_equal(sp_original, sp_different));\r\n\r\n        std::atomic<std::shared_ptr<int>> asp_empty;\r\n        asp_empty.wait(sp_original);\r\n\r\n        std::atomic<std::shared_ptr<int>> asp_copy{sp_copy};\r\n        asp_copy.wait(sp_empty);\r\n        asp_copy.wait(sp_different);\r\n    }\r\n}\r\n\r\ninline void test_atomic_wait() {\r\n    // wait for all the threads to be waiting; if this value is too small the test might be ineffective but should not\r\n    // fail due to timing assumptions except where otherwise noted; if it is too large the test will only take longer\r\n    // than necessary\r\n    constexpr std::chrono::milliseconds waiting_duration{100};\r\n    test_atomic_wait_func<char>(1, 2, waiting_duration);\r\n    test_atomic_wait_func<signed char>(1, 2, waiting_duration);\r\n    test_atomic_wait_func<unsigned char>(1, 2, waiting_duration);\r\n    test_atomic_wait_func<short>(1, 2, waiting_duration);\r\n    test_atomic_wait_func<unsigned short>(1, 2, waiting_duration);\r\n    test_atomic_wait_func<int>(1, 2, waiting_duration);\r\n    test_atomic_wait_func<unsigned int>(1, 2, waiting_duration);\r\n    test_atomic_wait_func<long>(1, 2, waiting_duration);\r\n    test_atomic_wait_func<unsigned long>(1, 2, waiting_duration);\r\n    test_atomic_wait_func<long long>(1, 2, waiting_duration);\r\n    test_atomic_wait_func<unsigned long long>(1, 2, waiting_duration);\r\n    test_atomic_wait_func<float>(1, 2, waiting_duration);\r\n    test_atomic_wait_func<double>(1, 2, waiting_duration);\r\n    test_atomic_wait_func<long double>(1, 2, waiting_duration);\r\n    test_atomic_wait_func<const void*>(\"1\", \"2\", waiting_duration);\r\n    test_atomic_wait_func(two_shorts{1, 1}, two_shorts{1, 2}, waiting_duration);\r\n    test_atomic_wait_func(three_chars{1, 1, 3}, three_chars{1, 2, 3}, waiting_duration);\r\n    test_atomic_wait_func(big_char_like{'a'}, big_char_like{'b'}, waiting_duration);\r\n\r\n    test_atomic_wait_func_ptr(std::make_shared<int>('a'), std::make_shared<int>('a'), waiting_duration);\r\n    test_atomic_wait_func_ptr(\r\n        std::weak_ptr{std::make_shared<int>('a')}, std::weak_ptr{std::make_shared<int>('a')}, waiting_duration);\r\n    test_atomic_wait_func_ptr(std::make_shared<int[]>(0), std::make_shared<int[]>(0), waiting_duration);\r\n    test_atomic_wait_func_ptr(\r\n        std::weak_ptr{std::make_shared<int[]>(0)}, std::weak_ptr{std::make_shared<int[]>(0)}, waiting_duration);\r\n    test_atomic_wait_func_ptr(std::make_shared<int[]>(1), std::make_shared<int[]>(1), waiting_duration);\r\n    test_atomic_wait_func_ptr(\r\n        std::weak_ptr{std::make_shared<int[]>(1)}, std::weak_ptr{std::make_shared<int[]>(1)}, waiting_duration);\r\n    test_atomic_wait_func_ptr(std::make_shared<int[2]>(), std::make_shared<int[2]>(), waiting_duration);\r\n    test_atomic_wait_func_ptr(\r\n        std::weak_ptr{std::make_shared<int[2]>()}, std::weak_ptr{std::make_shared<int[2]>()}, waiting_duration);\r\n    test_atomic_wait_func_ptr(std::make_shared<int[][2]>(2), std::make_shared<int[][2]>(2), waiting_duration);\r\n    test_atomic_wait_func_ptr(\r\n        std::weak_ptr{std::make_shared<int[][2]>(2)}, std::weak_ptr{std::make_shared<int[][2]>(2)}, waiting_duration);\r\n    test_atomic_wait_func_ptr(std::make_shared<int[2][2]>(), std::make_shared<int[2][2]>(), waiting_duration);\r\n    test_atomic_wait_func_ptr(\r\n        std::weak_ptr{std::make_shared<int[2][2]>()}, std::weak_ptr{std::make_shared<int[2][2]>()}, waiting_duration);\r\n\r\n    test_notify_all_notifies_all<char>(1, 2, waiting_duration);\r\n    test_notify_all_notifies_all<signed char>(1, 2, waiting_duration);\r\n    test_notify_all_notifies_all<unsigned char>(1, 2, waiting_duration);\r\n    test_notify_all_notifies_all<short>(1, 2, waiting_duration);\r\n    test_notify_all_notifies_all<unsigned short>(1, 2, waiting_duration);\r\n    test_notify_all_notifies_all<int>(1, 2, waiting_duration);\r\n    test_notify_all_notifies_all<unsigned int>(1, 2, waiting_duration);\r\n    test_notify_all_notifies_all<long>(1, 2, waiting_duration);\r\n    test_notify_all_notifies_all<unsigned long>(1, 2, waiting_duration);\r\n    test_notify_all_notifies_all<long long>(1, 2, waiting_duration);\r\n    test_notify_all_notifies_all<unsigned long long>(1, 2, waiting_duration);\r\n    test_notify_all_notifies_all<float>(1, 2, waiting_duration);\r\n    test_notify_all_notifies_all<double>(1, 2, waiting_duration);\r\n    test_notify_all_notifies_all<long double>(1, 2, waiting_duration);\r\n    test_notify_all_notifies_all<const void*>(\"1\", \"2\", waiting_duration);\r\n    test_notify_all_notifies_all(two_shorts{1, 1}, two_shorts{1, 2}, waiting_duration);\r\n    test_notify_all_notifies_all(three_chars{1, 1, 3}, three_chars{1, 2, 3}, waiting_duration);\r\n    test_notify_all_notifies_all(big_char_like{'a'}, big_char_like{'b'}, waiting_duration);\r\n\r\n    test_notify_all_notifies_all_ptr(std::make_shared<int>('a'), std::make_shared<int>('a'), waiting_duration);\r\n    test_notify_all_notifies_all_ptr(\r\n        std::weak_ptr{std::make_shared<int>('a')}, std::weak_ptr{std::make_shared<int>('a')}, waiting_duration);\r\n    test_notify_all_notifies_all_ptr(std::make_shared<int[]>(0), std::make_shared<int[]>(0), waiting_duration);\r\n    test_notify_all_notifies_all_ptr(\r\n        std::weak_ptr{std::make_shared<int[]>(0)}, std::weak_ptr{std::make_shared<int[]>(0)}, waiting_duration);\r\n    test_notify_all_notifies_all_ptr(std::make_shared<int[]>(1), std::make_shared<int[]>(1), waiting_duration);\r\n    test_notify_all_notifies_all_ptr(\r\n        std::weak_ptr{std::make_shared<int[]>(1)}, std::weak_ptr{std::make_shared<int[]>(1)}, waiting_duration);\r\n    test_notify_all_notifies_all_ptr(std::make_shared<int[2]>(), std::make_shared<int[2]>(), waiting_duration);\r\n    test_notify_all_notifies_all_ptr(\r\n        std::weak_ptr{std::make_shared<int[2]>()}, std::weak_ptr{std::make_shared<int[2]>()}, waiting_duration);\r\n    test_notify_all_notifies_all_ptr(std::make_shared<int[][2]>(2), std::make_shared<int[][2]>(2), waiting_duration);\r\n    test_notify_all_notifies_all_ptr(\r\n        std::weak_ptr{std::make_shared<int[][2]>(2)}, std::weak_ptr{std::make_shared<int[][2]>(2)}, waiting_duration);\r\n    test_notify_all_notifies_all_ptr(std::make_shared<int[2][2]>(), std::make_shared<int[2][2]>(), waiting_duration);\r\n    test_notify_all_notifies_all_ptr(\r\n        std::weak_ptr{std::make_shared<int[2][2]>()}, std::weak_ptr{std::make_shared<int[2][2]>()}, waiting_duration);\r\n\r\n#ifndef __clang__ // TRANSITION, LLVM-46685\r\n    test_pad_bits<with_padding_bits<2>>(waiting_duration);\r\n    test_pad_bits<with_padding_bits<4>>(waiting_duration);\r\n    test_pad_bits<with_padding_bits<8>>(waiting_duration);\r\n    test_pad_bits<with_padding_bits<16>>(waiting_duration);\r\n    test_pad_bits<with_padding_bits<32>>(waiting_duration);\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    test_gh_3602();\r\n}\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n// GH-140: STL: We should _STD qualify _Ugly function calls to avoid ADL\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\n\r\ntemplate <class T, class Tag>\r\nstruct tagged_trivial {\r\n    T t;\r\n};\r\n\r\ntemplate <class T>\r\nvoid test_incomplete_associated_class() { // COMPILE-ONLY\r\n    std::atomic<T> a;\r\n    a.wait(T{});\r\n    a.wait(T{}, std::memory_order_relaxed);\r\n    a.notify_one();\r\n    a.notify_all();\r\n\r\n    std::atomic_wait(std::addressof(a), T{});\r\n    std::atomic_wait_explicit(std::addressof(a), T{}, std::memory_order_relaxed);\r\n    std::atomic_notify_one(std::addressof(a));\r\n    std::atomic_notify_all(std::addressof(a));\r\n}\r\n\r\nvoid test_incomplete_associated_class_all() { // COMPILE-ONLY\r\n    test_incomplete_associated_class<tagged_trivial<uint8_t, holder<incomplete>>>();\r\n    test_incomplete_associated_class<tagged_trivial<uint16_t, holder<incomplete>>>();\r\n    test_incomplete_associated_class<tagged_trivial<uint32_t, holder<incomplete>>>();\r\n    test_incomplete_associated_class<tagged_trivial<uint64_t, holder<incomplete>>>();\r\n    test_incomplete_associated_class<tagged_trivial<uint64_t[2], holder<incomplete>>>();\r\n\r\n    test_incomplete_associated_class<tagged_trivial<uint8_t[3], holder<incomplete>>>();\r\n    test_incomplete_associated_class<tagged_trivial<uint16_t[3], holder<incomplete>>>();\r\n    test_incomplete_associated_class<tagged_trivial<uint32_t[3], holder<incomplete>>>();\r\n    test_incomplete_associated_class<tagged_trivial<uint64_t[3], holder<incomplete>>>();\r\n\r\n    test_incomplete_associated_class<tagged_trivial<uint8_t, holder<incomplete>>*>();\r\n    test_incomplete_associated_class<tagged_trivial<uint16_t, holder<incomplete>>*>();\r\n    test_incomplete_associated_class<tagged_trivial<uint32_t, holder<incomplete>>*>();\r\n    test_incomplete_associated_class<tagged_trivial<uint64_t, holder<incomplete>>*>();\r\n    test_incomplete_associated_class<tagged_trivial<uint64_t[2], holder<incomplete>>*>();\r\n\r\n    test_incomplete_associated_class<tagged_trivial<uint8_t[3], holder<incomplete>>*>();\r\n    test_incomplete_associated_class<tagged_trivial<uint16_t[3], holder<incomplete>>*>();\r\n    test_incomplete_associated_class<tagged_trivial<uint32_t[3], holder<incomplete>>*>();\r\n    test_incomplete_associated_class<tagged_trivial<uint64_t[3], holder<incomplete>>*>();\r\n}\r\n#endif // ^^^ no workaround ^^^\r\n\r\nint main() {\r\n    test_atomic_wait();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1135R6_barrier/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1135R6_barrier/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <atomic>\r\n#include <barrier>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <exception>\r\n#include <thread>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nvoid test() {\r\n    std::barrier b(2);\r\n\r\n    std::atomic<int> c{0};\r\n\r\n    std::thread t1([&] {\r\n        for (int i = 0; i < 5; ++i) {\r\n            auto token = b.arrive();\r\n            b.wait(std::move(token));\r\n            c.fetch_add(1, std::memory_order_relaxed);\r\n        }\r\n    });\r\n\r\n    std::thread t2([&] {\r\n        for (int i = 0; i < 3; ++i) {\r\n            b.arrive_and_wait();\r\n            c.fetch_add(1, std::memory_order_relaxed);\r\n        }\r\n        b.arrive_and_drop();\r\n    });\r\n\r\n    t1.join();\r\n    t2.join();\r\n\r\n    assert(c.load(std::memory_order_relaxed) == 8);\r\n}\r\n\r\nvoid test_with_functor() {\r\n    std::atomic<int> c{0};\r\n    std::atomic<int> called_times{0};\r\n\r\n    struct Functor {\r\n        void operator()() noexcept {\r\n            switch (called_times->fetch_add(1, std::memory_order_relaxed) + 1) {\r\n            case 1:\r\n                assert(c->load(std::memory_order_relaxed) == 0);\r\n                break;\r\n            case 2:\r\n                assert(c->load(std::memory_order_relaxed) == 2);\r\n                break;\r\n            case 3:\r\n                assert(c->load(std::memory_order_relaxed) == 4);\r\n                break;\r\n            case 4:\r\n                assert(c->load(std::memory_order_relaxed) == 6);\r\n                break;\r\n            case 5:\r\n                assert(c->load(std::memory_order_relaxed) == 7);\r\n                break;\r\n            default:\r\n                assert(false);\r\n                break;\r\n            }\r\n        }\r\n\r\n        std::atomic<int>* called_times;\r\n        std::atomic<int>* c;\r\n    } f = {&called_times, &c};\r\n\r\n    std::barrier b(2, f);\r\n\r\n    std::thread t1([&] {\r\n        for (int i = 0; i < 5; ++i) {\r\n            auto token = b.arrive();\r\n            b.wait(std::move(token));\r\n            c.fetch_add(1, std::memory_order_relaxed);\r\n        }\r\n    });\r\n\r\n    std::thread t2([&] {\r\n        for (int i = 0; i < 3; ++i) {\r\n            b.arrive_and_wait();\r\n            c.fetch_add(1, std::memory_order_relaxed);\r\n        }\r\n        b.arrive_and_drop();\r\n    });\r\n\r\n    t1.join();\r\n    t2.join();\r\n\r\n    assert(c.load(std::memory_order_relaxed) == 8);\r\n    assert(called_times.load(std::memory_order_relaxed) == 5);\r\n}\r\n\r\n\r\nvoid test_token() {\r\n    std::atomic<int> called_times{0};\r\n\r\n    auto f = [&]() noexcept { called_times.fetch_add(1, std::memory_order_relaxed); };\r\n\r\n    std::barrier b(2, f);\r\n    auto t1 = b.arrive();\r\n    auto t2 = std::move(t1);\r\n\r\n    assert(called_times.load(std::memory_order_relaxed) == 0);\r\n    auto t3 = b.arrive();\r\n    auto t4 = std::move(t3);\r\n\r\n    assert(called_times.load(std::memory_order_relaxed) == 1);\r\n    b.wait(std::move(t4));\r\n    assert(called_times.load(std::memory_order_relaxed) == 1);\r\n    b.wait(std::move(t2));\r\n    assert(called_times.load(std::memory_order_relaxed) == 1);\r\n}\r\n\r\nvoid barrier_callback_function() noexcept {}\r\n\r\nvoid test_functor_types() {\r\n    struct f1 {\r\n        void operator()() noexcept {}\r\n\r\n        f1(int, int, int) {}\r\n\r\n        f1(f1&&) noexcept   = default;\r\n        f1& operator=(f1&&) = delete;\r\n    };\r\n    std::barrier b1{1, f1{0, 0, 0}};\r\n    b1.arrive_and_wait();\r\n    static_assert(std::is_nothrow_constructible_v<std::barrier<f1>, std::ptrdiff_t, f1>); // strengthened\r\n\r\n    std::barrier b2{1, barrier_callback_function};\r\n    b2.arrive_and_wait();\r\n\r\n    std::barrier b3{1, []() noexcept {}};\r\n    b3.arrive_and_wait();\r\n\r\n    struct f2 {\r\n        void operator()() noexcept {}\r\n\r\n        f2() = default;\r\n        f2(f2&&) {\r\n            throw std::exception{};\r\n        }\r\n    };\r\n    try {\r\n        std::barrier b4{1, f2{}};\r\n        assert(false);\r\n        static_assert(!std::is_nothrow_constructible_v<std::barrier<f2>, std::ptrdiff_t, f2>);\r\n    } catch (const std::exception&) {\r\n    }\r\n}\r\n\r\nint main() {\r\n    static_assert(std::barrier<>::max() >= 5, \"barrier should support some number of arrivals\");\r\n\r\n    test();\r\n    test_with_functor();\r\n    test_token();\r\n    test_functor_types();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1135R6_latch/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1135R6_latch/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <latch>\r\n#include <thread>\r\n\r\nvoid test(const bool release_wait) {\r\n    std::latch l(5);\r\n\r\n    std::thread t1([&] { l.wait(); });\r\n\r\n    std::thread t2([&] { l.arrive_and_wait(2); });\r\n\r\n    l.count_down();\r\n\r\n    if (release_wait) {\r\n        l.arrive_and_wait(2);\r\n    } else {\r\n        l.count_down(2);\r\n    }\r\n\r\n    t1.join();\r\n    t2.join();\r\n}\r\n\r\nint main() {\r\n    static_assert(std::latch::max() >= 5, \"latch should support some number of count downs\");\r\n\r\n    test(true);\r\n    test(false);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1135R6_semaphore/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1135R6_semaphore/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <atomic>\r\n#include <cassert>\r\n#include <chrono>\r\n#include <cstddef>\r\n#include <latch>\r\n#include <limits>\r\n#include <semaphore>\r\n#include <thread>\r\n\r\nusing namespace std::chrono_literals;\r\n\r\nvoid wait_and_expect(std::atomic<int>& v, const int val, const std::chrono::milliseconds delay_duration) {\r\n#ifdef CAN_FAIL_ON_TIMING_ASSUMPTION\r\n    std::this_thread::sleep_for(delay_duration);\r\n    assert(v.load() == val);\r\n#else // ^^^ CAN_FAIL_ON_TIMING_ASSUMPTION / !CAN_FAIL_ON_TIMING_ASSUMPTION vvv\r\n    while (v.load() < val) {\r\n        std::this_thread::sleep_for(delay_duration);\r\n    }\r\n    assert(v.load() == val);\r\n#endif // ^^^ !CAN_FAIL_ON_TIMING_ASSUMPTION ^^^\r\n}\r\n\r\nvoid test_counting_semaphore_count(const std::chrono::milliseconds delay_duration) {\r\n    std::latch start{4};\r\n\r\n    std::counting_semaphore<4> s{2};\r\n    std::atomic<int> v{0};\r\n\r\n    auto thread_function = [&] {\r\n        start.arrive_and_wait();\r\n        for (int i = 0; i < 3; ++i) {\r\n            s.acquire();\r\n            v.fetch_add(1);\r\n        }\r\n    };\r\n\r\n    std::thread t1{thread_function};\r\n    std::thread t2{thread_function};\r\n    std::thread t3{thread_function};\r\n\r\n    start.arrive_and_wait();\r\n\r\n    wait_and_expect(v, 2, delay_duration);\r\n\r\n    s.release();\r\n\r\n    wait_and_expect(v, 3, delay_duration);\r\n\r\n    s.release(4);\r\n\r\n    wait_and_expect(v, 7, delay_duration);\r\n\r\n    s.release(4);\r\n\r\n    wait_and_expect(v, 9, delay_duration);\r\n\r\n    t1.join();\r\n    t2.join();\r\n    t3.join();\r\n}\r\n\r\nvoid test_binary_semaphore_count(const std::chrono::milliseconds delay_duration) {\r\n    std::latch start{3};\r\n\r\n    std::binary_semaphore s{1};\r\n\r\n    std::atomic<int> v{0};\r\n\r\n    auto thread_function = [&] {\r\n        start.arrive_and_wait();\r\n        for (int i = 0; i < 2; ++i) {\r\n            s.acquire();\r\n            v.fetch_add(1);\r\n        }\r\n    };\r\n\r\n    std::thread t1{thread_function};\r\n    std::thread t2{thread_function};\r\n\r\n    start.arrive_and_wait();\r\n\r\n    wait_and_expect(v, 1, delay_duration);\r\n\r\n    s.release();\r\n    wait_and_expect(v, 2, delay_duration);\r\n\r\n    s.release();\r\n    wait_and_expect(v, 3, delay_duration);\r\n\r\n    s.release();\r\n    wait_and_expect(v, 4, delay_duration);\r\n\r\n    s.release();\r\n    wait_and_expect(v, 4, delay_duration);\r\n\r\n    t1.join();\r\n    t2.join();\r\n}\r\n\r\ntemplate <class Semaphore>\r\nvoid test_semaphore_wait_for(const std::chrono::milliseconds delay_duration) {\r\n    std::latch start{2};\r\n\r\n    Semaphore s{0};\r\n\r\n    std::thread t([&] {\r\n        start.arrive_and_wait();\r\n\r\n        assert(s.try_acquire_for(delay_duration));\r\n        assert(!s.try_acquire_for(delay_duration * 16));\r\n    });\r\n\r\n    start.arrive_and_wait();\r\n\r\n    s.release();\r\n\r\n    std::this_thread::sleep_for(delay_duration * 4);\r\n\r\n    t.join();\r\n}\r\n\r\ntemplate <class Semaphore>\r\nvoid test_semaphore_wait_until(const std::chrono::milliseconds delay_duration) {\r\n    std::latch start{2};\r\n\r\n    Semaphore s{0};\r\n\r\n    std::thread t([&] {\r\n        start.arrive_and_wait();\r\n\r\n        assert(s.try_acquire_until(std::chrono::steady_clock::now() + delay_duration));\r\n        assert(!s.try_acquire_until(std::chrono::steady_clock::now() + delay_duration * 8));\r\n    });\r\n\r\n    start.arrive_and_wait();\r\n\r\n    s.release();\r\n\r\n    std::this_thread::sleep_for(delay_duration * 4);\r\n\r\n    t.join();\r\n}\r\n\r\nint main() {\r\n    constexpr auto max = std::numeric_limits<std::ptrdiff_t>::max();\r\n\r\n    static_assert(std::counting_semaphore<max>::max() >= max, \"semaphore should support some number of count downs\");\r\n    static_assert(std::counting_semaphore<5>::max() >= 5, \"semaphore should support some number of count downs\");\r\n    static_assert(std::binary_semaphore::max() >= 1, \"semaphore should support some number of count downs\");\r\n\r\n    constexpr auto delay_duration = 200ms;\r\n\r\n    test_counting_semaphore_count(delay_duration);\r\n    test_binary_semaphore_count(delay_duration);\r\n\r\n#ifdef CAN_FAIL_ON_TIMING_ASSUMPTION\r\n    test_semaphore_wait_for<std::counting_semaphore<>>(delay_duration);\r\n    test_semaphore_wait_until<std::counting_semaphore<>>(delay_duration);\r\n    test_semaphore_wait_for<std::binary_semaphore>(delay_duration);\r\n    test_semaphore_wait_until<std::binary_semaphore>(delay_duration);\r\n#endif // CAN_FAIL_ON_TIMING_ASSUMPTION\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1147R1_printing_volatile_pointers/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1147R1_printing_volatile_pointers/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <sstream>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename T>\r\nstring getTextValue(T* ptr) {\r\n    ostringstream out;\r\n    out << ptr;\r\n    return out.str();\r\n}\r\n\r\nvoid test(int value) {\r\n    int* p0          = &value;\r\n    volatile int* p1 = p0;\r\n\r\n    const string expected = getTextValue(p0);\r\n    const string actual   = getTextValue(p1);\r\n\r\n    assert(expected == actual);\r\n}\r\n\r\nint main() {\r\n    test(42);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1165R1_consistently_propagating_stateful_allocators/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1165R1_consistently_propagating_stateful_allocators/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <memory>\r\n#include <stdexcept>\r\n#include <string>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename T>\r\nstruct soccc_allocator {\r\n    using value_type = T;\r\n\r\n    explicit soccc_allocator(const int id_) noexcept : id(id_), soccc_generation(0) {}\r\n    explicit soccc_allocator(const int id_, const int soccc_generation_) noexcept\r\n        : id(id_), soccc_generation(soccc_generation_) {}\r\n    template <typename U>\r\n    soccc_allocator(const soccc_allocator<U>& other) noexcept\r\n        : id(other.id), soccc_generation(other.soccc_generation) {}\r\n    soccc_allocator(const soccc_allocator&) = default;\r\n\r\n    soccc_allocator& operator=(const soccc_allocator&) noexcept {\r\n        assert(false && \"no tested operations should assign allocators\");\r\n        return *this;\r\n    }\r\n\r\n    soccc_allocator select_on_container_copy_construction() const noexcept {\r\n        return soccc_allocator(id, soccc_generation + 1);\r\n    }\r\n\r\n    template <typename U>\r\n    bool operator==(const soccc_allocator<U>& other) const noexcept {\r\n        return id == other.id;\r\n    }\r\n\r\n    template <typename U>\r\n    bool operator!=(const soccc_allocator<U>& other) const noexcept {\r\n        return id != other.id;\r\n    }\r\n\r\n    T* allocate(const size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* const p, const size_t n) noexcept {\r\n        allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    int id;\r\n    int soccc_generation;\r\n};\r\n\r\nusing soccc_string = basic_string<char, char_traits<char>, soccc_allocator<char>>;\r\n\r\nvoid test_lvalue_lvalue() {\r\n    soccc_string lhs(soccc_allocator<char>(11));\r\n    soccc_string rhs(soccc_allocator<char>(22));\r\n    auto result = lhs + rhs; // SOCCC on left\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 1);\r\n}\r\n\r\nvoid test_lvalue_rvalue() {\r\n    soccc_string lhs(soccc_allocator<char>(11));\r\n    soccc_string rhs(soccc_allocator<char>(22));\r\n    auto result = lhs + move(rhs); // take rvalue's allocator\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 22);\r\n    assert(result.get_allocator().soccc_generation == 0);\r\n}\r\n\r\nvoid test_rvalue_lvalue() {\r\n    soccc_string lhs(soccc_allocator<char>(11));\r\n    soccc_string rhs(soccc_allocator<char>(22));\r\n    auto result = move(lhs) + rhs; // take rvalue's allocator\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 0);\r\n}\r\n\r\nvoid test_rvalue_rvalue() {\r\n    soccc_string lhs(soccc_allocator<char>(11));\r\n    soccc_string rhs(soccc_allocator<char>(22));\r\n    const auto initialRhsPtr = rhs.data();\r\n    auto result              = move(lhs) + move(rhs); // take left's allocator\r\n    assert(result.data() != initialRhsPtr);\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 0);\r\n}\r\n\r\nvoid test_rvalue_rvalue_big_left() {\r\n    soccc_string lhs(100, 'a', soccc_allocator<char>(11));\r\n    soccc_string rhs(soccc_allocator<char>(22));\r\n    const auto initialRhsPtr = rhs.data();\r\n    auto result              = move(lhs) + move(rhs); // take left's allocator\r\n    assert(result.data() != initialRhsPtr);\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 0);\r\n}\r\n\r\nvoid test_rvalue_rvalue_big_left_equal_allocator_equal_capacity() {\r\n    // not guaranteed by the standard, but a performance guarantee we want.\r\n    // set up lhs and rhs to have equal capacities such that concat exactly fills that capacity\r\n    soccc_string lhs(100, 'a', soccc_allocator<char>(11));\r\n    soccc_string rhs(100, 'a', soccc_allocator<char>(11));\r\n\r\n    // all else being equal, we should prefer the left buffer\r\n    lhs.resize(rhs.capacity() - rhs.size(), 'a');\r\n    assert(lhs.capacity() == rhs.capacity());\r\n\r\n    const auto initialLhsBuffer = lhs.data();\r\n    auto result                 = move(lhs) + move(rhs);\r\n    assert(result.data() == initialLhsBuffer);\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 0);\r\n}\r\n\r\nvoid test_rvalue_rvalue_one_more_than_capacity() {\r\n    // ensure that a result exactly one larger than the capacities of either of the inputs causes reallocation\r\n    soccc_string lhs(100, 'a', soccc_allocator<char>(11));\r\n    soccc_string rhs(100, 'a', soccc_allocator<char>(11));\r\n\r\n    lhs.resize(rhs.capacity() - rhs.size() + 1, 'a');\r\n    assert(lhs.capacity() == rhs.capacity());\r\n\r\n    const auto initialLhsBuffer = lhs.data();\r\n    const auto initialRhsBuffer = rhs.data();\r\n    auto result                 = move(lhs) + move(rhs); // take left's allocator\r\n    assert(result.data() != initialLhsBuffer);\r\n    assert(result.data() != initialRhsBuffer);\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 0);\r\n}\r\n\r\nvoid test_rvalue_rvalue_big_right() {\r\n    soccc_string lhs(soccc_allocator<char>(11));\r\n    soccc_string rhs(100, 'a', soccc_allocator<char>(22));\r\n    const auto initialRhsPtr = rhs.data();\r\n    auto result              = move(lhs) + move(rhs); // take left's allocator\r\n    assert(result.data() != initialRhsPtr);\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 0);\r\n}\r\n\r\nvoid test_rvalue_rvalue_big_right_equal_allocator() {\r\n    // not technically guaranteed by the standard, but an optimization we want to preserve\r\n    soccc_string lhs(1, 'b', soccc_allocator<char>(11));\r\n    soccc_string rhs(100, 'a', soccc_allocator<char>(11));\r\n    const auto initialRhsPtr = rhs.data();\r\n    auto result              = move(lhs) + move(rhs); // take left's allocator\r\n    assert(result.data() == initialRhsPtr); // took rhs's buffer\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 0);\r\n}\r\n\r\nvoid test_rvalue_rvalue_big_both() {\r\n    soccc_string lhs(100, 'a', soccc_allocator<char>(11));\r\n    lhs.resize(lhs.capacity(), 'a');\r\n    soccc_string rhs(100, 'a', soccc_allocator<char>(22));\r\n    rhs.resize(rhs.capacity(), 'a');\r\n    const auto initialRhsPtr = rhs.data();\r\n    auto result              = move(lhs) + move(rhs); // take left's allocator\r\n    assert(result.data() != initialRhsPtr);\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 0);\r\n}\r\n\r\nvoid test_lvalue_ntbs() {\r\n    soccc_string lhs(soccc_allocator<char>(11));\r\n    auto result = lhs + \"testString\"; // SOCCC on lvalue std::string\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 1);\r\n}\r\n\r\nvoid test_lvalue_char() {\r\n    soccc_string lhs(soccc_allocator<char>(11));\r\n    auto result = lhs + 'c'; // SOCCC on lvalue\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 1);\r\n}\r\n\r\nvoid test_rvalue_ntbs() {\r\n    soccc_string lhs(soccc_allocator<char>(11));\r\n    auto result = move(lhs) + \"testString\"; // take rvalue's allocator\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 0);\r\n}\r\n\r\nvoid test_rvalue_char() {\r\n    soccc_string lhs(soccc_allocator<char>(11));\r\n    auto result = move(lhs) + 'c'; // take rvalue\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 0);\r\n}\r\n\r\nvoid test_ntbs_lvalue() {\r\n    soccc_string rhs(soccc_allocator<char>(11));\r\n    auto result = \"testString\" + rhs; // SOCCC on lvalue std::string\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 1);\r\n}\r\n\r\nvoid test_char_lvalue() {\r\n    soccc_string rhs(soccc_allocator<char>(11));\r\n    auto result = 'c' + rhs; // SOCCC on lvalue\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 1);\r\n}\r\n\r\nvoid test_ntbs_rvalue() {\r\n    soccc_string rhs(soccc_allocator<char>(11));\r\n    auto result = \"testString\" + move(rhs); // take rvalue's allocator\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 0);\r\n}\r\n\r\nvoid test_char_rvalue() {\r\n    soccc_string rhs(soccc_allocator<char>(11));\r\n    auto result = 'c' + move(rhs); // take rvalue's allocator\r\n    assert(result[result.size()] == 0);\r\n    assert(result.get_allocator().id == 11);\r\n    assert(result.get_allocator().soccc_generation == 0);\r\n}\r\n\r\n// also test for length_error edge cases in lvalue concats when resolving GH-456\r\ntemplate <typename T, size_t MaxSize>\r\nstruct max_size_allocator {\r\n    using value_type = T;\r\n\r\n    template <typename U>\r\n    struct rebind {\r\n        using other = max_size_allocator<U, MaxSize>;\r\n    };\r\n\r\n    max_size_allocator() = default;\r\n    template <typename U>\r\n    max_size_allocator(const max_size_allocator<U, MaxSize>&) noexcept {}\r\n    max_size_allocator(const max_size_allocator&) = default;\r\n\r\n    max_size_allocator& operator=(const max_size_allocator&) noexcept {\r\n        assert(false && \"no tested operations should assign allocators\");\r\n        return *this;\r\n    }\r\n\r\n    template <typename U>\r\n    bool operator==(const max_size_allocator<U, MaxSize>&) const noexcept {\r\n        return true;\r\n    }\r\n\r\n    template <typename U>\r\n    bool operator!=(const max_size_allocator<U, MaxSize>&) const noexcept {\r\n        return false;\r\n    }\r\n\r\n    T* allocate(const size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* const p, const size_t n) noexcept {\r\n        allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    size_t max_size() const noexcept {\r\n        return MaxSize;\r\n    }\r\n};\r\n\r\ntemplate <typename A, typename B>\r\nvoid assert_concat(A&& a, B&& b, const string& expected) noexcept {\r\n    const auto& actual = forward<A>(a) + forward<B>(b);\r\n    assert(equal(actual.begin(), actual.end(), expected.begin(), expected.end()));\r\n    assert(actual[actual.size()] == 0);\r\n}\r\n\r\ntemplate <typename A, typename B>\r\nvoid assert_throws_length_error(A&& a, B&& b) noexcept {\r\n    try {\r\n        (void) (forward<A>(a) + forward<B>(b));\r\n        assert(false);\r\n    } catch (const length_error&) {\r\n    }\r\n}\r\n\r\ntemplate <size_t N>\r\nusing limited_string = basic_string<char, char_traits<char>, max_size_allocator<char, N>>;\r\n\r\ntemplate <size_t maxSize>\r\nvoid test_concat_perf_edge_cases() {\r\n    static_assert(maxSize >= 3, \"at least 3 characters needed in test\");\r\n    limited_string<maxSize> emptyStr;\r\n    const size_t trueMax = emptyStr.max_size(); // max_size() might be greater than allocator (in which case the small\r\n                                                // string optimization is always engaged)\r\n    string expectedSuffix;\r\n    expectedSuffix.reserve(trueMax);\r\n    expectedSuffix.append(trueMax - 1, 'a');\r\n    expectedSuffix.push_back('c');\r\n\r\n    string expectedPrefix;\r\n    expectedPrefix.reserve(trueMax);\r\n    expectedPrefix.push_back('c');\r\n    expectedPrefix.append(trueMax - 1, 'a');\r\n\r\n    string expectedFilled(trueMax, 'a');\r\n\r\n    limited_string<maxSize> zero(0, 'c');\r\n    limited_string<maxSize> one(1, 'c');\r\n    limited_string<maxSize> two(2, 'c');\r\n    limited_string<maxSize> oneLeft(trueMax - 1, 'a');\r\n    limited_string<maxSize> filled(trueMax, 'a');\r\n\r\n    assert_concat(zero, zero, \"\");\r\n    assert_concat(zero, filled, expectedFilled);\r\n    assert_concat(\"\", filled, expectedFilled);\r\n    assert_concat(filled, zero, expectedFilled);\r\n    assert_concat(filled, \"\", expectedFilled);\r\n\r\n    assert_concat(oneLeft, one, expectedSuffix);\r\n    assert_throws_length_error(filled, one);\r\n    assert_concat(oneLeft, \"c\", expectedSuffix);\r\n    assert_throws_length_error(filled, \"c\");\r\n    assert_concat(oneLeft, 'c', expectedSuffix);\r\n    assert_throws_length_error(filled, 'c');\r\n    assert_concat(one, oneLeft, expectedPrefix);\r\n    assert_throws_length_error(one, filled);\r\n    assert_concat(\"c\", oneLeft, expectedPrefix);\r\n    assert_throws_length_error(\"c\", filled);\r\n    assert_concat('c', oneLeft, expectedPrefix);\r\n    assert_throws_length_error('c', filled);\r\n\r\n    assert_throws_length_error(oneLeft, two);\r\n    assert_throws_length_error(oneLeft, \"cc\");\r\n    assert_throws_length_error(two, oneLeft);\r\n    assert_throws_length_error(\"cc\", oneLeft);\r\n}\r\n\r\nint main() {\r\n    test_lvalue_lvalue();\r\n    test_lvalue_rvalue();\r\n    test_rvalue_lvalue();\r\n    test_rvalue_rvalue();\r\n    test_rvalue_rvalue_big_left();\r\n    test_rvalue_rvalue_big_left_equal_allocator_equal_capacity();\r\n    test_rvalue_rvalue_one_more_than_capacity();\r\n    test_rvalue_rvalue_big_right();\r\n    test_rvalue_rvalue_big_right_equal_allocator();\r\n    test_rvalue_rvalue_big_both();\r\n    test_lvalue_ntbs();\r\n    test_lvalue_char();\r\n    test_rvalue_ntbs();\r\n    test_rvalue_char();\r\n    test_ntbs_lvalue();\r\n    test_char_lvalue();\r\n    test_ntbs_rvalue();\r\n    test_char_rvalue();\r\n    test_concat_perf_edge_cases<10>(); // test with small string optimization engaged\r\n    test_concat_perf_edge_cases<40>(); // test with small string optimization disengaged\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1169R4_static_call_operator/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1169R4_static_call_operator/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <functional>\r\n#include <future>\r\n#include <type_traits>\r\nusing namespace std;\r\n\r\nstruct F0 {\r\n    static char operator()();\r\n};\r\n\r\nstruct F1 {\r\n    static short operator()(float);\r\n};\r\n\r\nstruct F2 {\r\n    static int operator()(double*, double&);\r\n};\r\n\r\nstruct F3 {\r\n    static void operator()(const long&, long&&, const long&&);\r\n};\r\n\r\nstruct Base {\r\n    static bool operator()(unsigned int);\r\n};\r\n\r\nstruct Derived : Base {};\r\n\r\nstruct Nothrow {\r\n    static char16_t operator()(char32_t) noexcept;\r\n};\r\n\r\ntemplate <template <class> class Temp>\r\nvoid test_ctad() {\r\n    static_assert(is_same_v<decltype(Temp{F0{}}), Temp<char()>>);\r\n    static_assert(is_same_v<decltype(Temp{F1{}}), Temp<short(float)>>);\r\n    static_assert(is_same_v<decltype(Temp{F2{}}), Temp<int(double*, double&)>>);\r\n    static_assert(is_same_v<decltype(Temp{F3{}}), Temp<void(const long&, long&&, const long&&)>>);\r\n    static_assert(is_same_v<decltype(Temp{Derived{}}), Temp<bool(unsigned int)>>);\r\n    static_assert(is_same_v<decltype(Temp{Nothrow{}}), Temp<char16_t(char32_t)>>);\r\n\r\n    auto lambda = [](int* p, int** q) static { return *p + **q; };\r\n    static_assert(is_same_v<decltype(Temp{lambda}), Temp<int(int*, int**)>>);\r\n}\r\n\r\nvoid all_tests() {\r\n    test_ctad<function>();\r\n    test_ctad<packaged_task>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_deque_append_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_deque_append_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nvoid test_deque(const size_t presize, Rng&& rng, const int (&expected)[N]) {\r\n    deque<int> d(presize, -1);\r\n\r\n    d.append_range(forward<Rng>(rng));\r\n    const auto count = static_cast<ptrdiff_t>(presize);\r\n    assert(ranges::count(d | views::take(count), -1) == count);\r\n    assert(ranges::equal(d | views::drop(count), expected));\r\n}\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nvoid test_deque(const int (&expected)[N]) {\r\n    test_deque(0, Rng{expected}, expected);\r\n    test_deque(2, Rng{expected}, expected);\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_deque<R>(some_ints);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_view() {\r\n    test_deque<span<const int>>(some_ints);\r\n}\r\n\r\nvoid test_move_only_view() {\r\n    test_deque<move_only_view<input_iterator_tag, test::Common::no>>(some_ints);\r\n    test_deque<move_only_view<forward_iterator_tag, test::Common::no>>(some_ints);\r\n    test_deque<move_only_view<forward_iterator_tag, test::Common::yes>>(some_ints);\r\n    test_deque<move_only_view<bidirectional_iterator_tag, test::Common::no>>(some_ints);\r\n    test_deque<move_only_view<bidirectional_iterator_tag, test::Common::yes>>(some_ints);\r\n    test_deque<move_only_view<random_access_iterator_tag, test::Common::no>>(some_ints);\r\n    test_deque<move_only_view<random_access_iterator_tag, test::Common::yes>>(some_ints);\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_deque(0, some_ints, some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(from_range, some_ints);\r\n    test_deque(0, vec, some_ints);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_deque(0, lst, some_ints);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_view();\r\n    test_move_only_view();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_deque_assign_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_deque_assign_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nvoid test_deque(const size_t presize, Rng&& rng, Expected&& expected) {\r\n    deque<int> d(presize, -1);\r\n    d.assign_range(forward<Rng>(rng));\r\n    assert(ranges::equal(d, expected));\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_deque(0, R{some_ints}, some_ints);\r\n        test_deque(5, R{some_ints}, some_ints);\r\n        test_deque(11, R{some_ints}, some_ints);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const int> s{some_ints};\r\n    test_deque(0, s, some_ints);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_deque(0, move_only_view<input_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_deque(0, move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_deque(0, move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    test_deque(0, move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_deque(0, move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    test_deque(0, move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_deque(0, move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_deque(0, some_ints, some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_deque(0, vec, some_ints);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_deque(0, lst, some_ints);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_deque_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_deque_from_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nvoid test_deque(Rng&& rng, Expected&& expected) {\r\n    deque<int> d{from_range, forward<Rng>(rng)};\r\n    assert(ranges::equal(d, expected));\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_deque(R{some_ints}, some_ints);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nint main() {\r\n    // Validate views\r\n    { // copyable views\r\n        constexpr span<const int> s{some_ints};\r\n        test_deque(s, some_ints);\r\n    }\r\n\r\n    { // move-only views\r\n        test_deque(move_only_view<input_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_deque(move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_deque(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n        test_deque(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_deque(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n        test_deque(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_deque(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    }\r\n\r\n    // Validate non-views\r\n    test_deque(some_ints, some_ints); // C array\r\n\r\n    { // lvalue vector\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_deque(vec, some_ints);\r\n    }\r\n\r\n    { // lvalue forward_list\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_deque(lst, some_ints);\r\n    }\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_deque_insert_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_deque_insert_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nvoid test_deque(const size_t presize, Rng&& rng, Expected&& expected) {\r\n    deque<int> d(presize, -1);\r\n    const same_as<deque<int>::iterator> auto result =\r\n        d.insert_range(ranges::next(d.begin(), presize != 0), forward<Rng>(rng));\r\n    assert(result == ranges::next(d.begin(), presize != 0));\r\n    assert(ranges::equal(d, expected));\r\n}\r\n\r\nstatic constexpr int some_ints[]    = {0, 1, 2, 3, 4, 5, 6, 7};\r\nstatic constexpr int short_result[] = {\r\n    -1, 0, 1, 2, 3, 4, 5, 6, 7, -1, -1, -1, -1}; // result of inserting some_ints at offset 1 in a sequence of 5 -1s\r\nstatic constexpr int long_result[] = {\r\n    -1, 0, 1, 2, 3, 4, 5, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; // ditto, in a sequence of 11 -1s\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_deque(0, R{some_ints}, some_ints);\r\n        test_deque(5, R{some_ints}, short_result);\r\n        test_deque(11, R{some_ints}, long_result);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const int> s{some_ints};\r\n    test_deque(0, s, some_ints);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_deque(0, move_only_view<input_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_deque(0, move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_deque(0, move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    test_deque(0, move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_deque(0, move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    test_deque(0, move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_deque(0, move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_deque(0, some_ints, some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_deque(0, vec, some_ints);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_deque(0, lst, some_ints);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_deque_prepend_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_deque_prepend_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nvoid test_deque(const size_t presize, Rng&& rng, const int (&expected)[N]) {\r\n    deque<int> d(presize, -1);\r\n\r\n    d.prepend_range(forward<Rng>(rng));\r\n    assert(ranges::equal(d | views::take(ptrdiff_t{N}), expected));\r\n    assert(ranges::count(d | views::drop(ptrdiff_t{N}), -1) == static_cast<ptrdiff_t>(presize));\r\n}\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nvoid test_deque(const int (&expected)[N]) {\r\n    test_deque(0, Rng{expected}, expected);\r\n    test_deque(2, Rng{expected}, expected);\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_deque<R>(some_ints);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_view() {\r\n    test_deque<span<const int>>(some_ints);\r\n}\r\n\r\nvoid test_move_only_view() {\r\n    test_deque<move_only_view<input_iterator_tag, test::Common::no>>(some_ints);\r\n    test_deque<move_only_view<forward_iterator_tag, test::Common::no>>(some_ints);\r\n    test_deque<move_only_view<forward_iterator_tag, test::Common::yes>>(some_ints);\r\n    test_deque<move_only_view<bidirectional_iterator_tag, test::Common::no>>(some_ints);\r\n    test_deque<move_only_view<bidirectional_iterator_tag, test::Common::yes>>(some_ints);\r\n    test_deque<move_only_view<random_access_iterator_tag, test::Common::no>>(some_ints);\r\n    test_deque<move_only_view<random_access_iterator_tag, test::Common::yes>>(some_ints);\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_deque(0, some_ints, some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(from_range, some_ints);\r\n    test_deque(0, vec, some_ints);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_deque(0, lst, some_ints);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_view();\r\n    test_move_only_view();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_forward_list_assign_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_forward_list_assign_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nvoid test_flist(const size_t presize, Rng&& rng, Expected&& expected) {\r\n    forward_list<int> fl(presize, -1);\r\n    fl.assign_range(forward<Rng>(rng));\r\n    assert(ranges::equal(fl, expected));\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_flist(0, R{some_ints}, some_ints);\r\n        test_flist(5, R{some_ints}, some_ints);\r\n        test_flist(11, R{some_ints}, some_ints);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const int> s{some_ints};\r\n    test_flist(0, s, some_ints);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_flist(0, move_only_view<input_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_flist(0, move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_flist(0, move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    test_flist(0, move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_flist(0, move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    test_flist(0, move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_flist(0, move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_flist(0, some_ints, some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_flist(0, vec, some_ints);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_flist(0, lst, some_ints);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_forward_list_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_forward_list_from_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nvoid test_flist(Rng&& rng, Expected&& expected) {\r\n    forward_list<int> fl{from_range, forward<Rng>(rng)};\r\n    assert(ranges::equal(fl, expected));\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_flist(R{some_ints}, some_ints);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nint main() {\r\n    // Validate views\r\n    { // copyable views\r\n        constexpr span<const int> s{some_ints};\r\n        test_flist(s, some_ints);\r\n    }\r\n\r\n    { // move-only views\r\n        test_flist(move_only_view<input_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_flist(move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_flist(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n        test_flist(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_flist(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n        test_flist(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_flist(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    }\r\n\r\n    // Validate non-views\r\n    test_flist(some_ints, some_ints); // C array\r\n\r\n    { // lvalue vector\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_flist(vec, some_ints);\r\n    }\r\n\r\n    { // lvalue forward_list\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_flist(lst, some_ints);\r\n    }\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_forward_list_insert_range_after/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_forward_list_insert_range_after/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nvoid test_flist(const size_t presize, Rng&& rng, Expected&& expected) {\r\n    forward_list<int> fl(presize, -1);\r\n    const same_as<forward_list<int>::iterator> auto result =\r\n        fl.insert_range_after(ranges::next(fl.before_begin(), presize != 0), forward<Rng>(rng));\r\n    assert(result == ranges::next(fl.before_begin(), 8 + (presize != 0)));\r\n    assert(ranges::equal(fl, expected));\r\n}\r\n\r\nstatic constexpr int some_ints[]    = {0, 1, 2, 3, 4, 5, 6, 7};\r\nstatic constexpr int short_result[] = {\r\n    -1, 0, 1, 2, 3, 4, 5, 6, 7, -1, -1, -1, -1}; // result of inserting some_ints at offset 1 in a sequence of 5 -1s\r\nstatic constexpr int long_result[] = {\r\n    -1, 0, 1, 2, 3, 4, 5, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; // ditto, in a sequence of 11 -1s\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_flist(0, R{some_ints}, some_ints);\r\n        test_flist(5, R{some_ints}, short_result);\r\n        test_flist(11, R{some_ints}, long_result);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const int> s{some_ints};\r\n    test_flist(0, s, some_ints);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_flist(0, move_only_view<input_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_flist(0, move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_flist(0, move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    test_flist(0, move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_flist(0, move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    test_flist(0, move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_flist(0, move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_flist(0, some_ints, some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_flist(0, vec, some_ints);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_flist(0, lst, some_ints);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_forward_list_prepend_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_forward_list_prepend_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nvoid test_flist(const size_t presize, Rng&& rng, const int (&expected)[N]) {\r\n    forward_list<int> fl(presize, -1);\r\n\r\n    fl.prepend_range(forward<Rng>(rng));\r\n    assert(ranges::equal(fl | views::take(ptrdiff_t{N}), expected));\r\n    assert(ranges::count(fl | views::drop(ptrdiff_t{N}), -1) == static_cast<ptrdiff_t>(presize));\r\n}\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nvoid test_flist(const int (&expected)[N]) {\r\n    test_flist(0, Rng{expected}, expected);\r\n    test_flist(2, Rng{expected}, expected);\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_flist<R>(some_ints);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_view() {\r\n    test_flist<span<const int>>(some_ints);\r\n}\r\n\r\nvoid test_move_only_view() {\r\n    test_flist<move_only_view<input_iterator_tag, test::Common::no>>(some_ints);\r\n    test_flist<move_only_view<forward_iterator_tag, test::Common::no>>(some_ints);\r\n    test_flist<move_only_view<forward_iterator_tag, test::Common::yes>>(some_ints);\r\n    test_flist<move_only_view<bidirectional_iterator_tag, test::Common::no>>(some_ints);\r\n    test_flist<move_only_view<bidirectional_iterator_tag, test::Common::yes>>(some_ints);\r\n    test_flist<move_only_view<random_access_iterator_tag, test::Common::no>>(some_ints);\r\n    test_flist<move_only_view<random_access_iterator_tag, test::Common::yes>>(some_ints);\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_flist(0, some_ints, some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(from_range, some_ints);\r\n    test_flist(0, vec, some_ints);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_flist(0, lst, some_ints);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_view();\r\n    test_move_only_view();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_from_range/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <ranges>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nstatic_assert(same_as<decltype(from_range), const from_range_t>);\r\nstatic_assert(semiregular<from_range_t>);\r\n\r\nvoid helper(auto);\r\n\r\ntemplate <class T>\r\nconcept can_implicitly_construct = requires { helper<T>({}); };\r\n\r\nstatic_assert(!can_implicitly_construct<from_range_t>);\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_list_append_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_list_append_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <forward_list>\r\n#include <list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nvoid test_list(const size_t presize, Rng&& rng, const int (&expected)[N]) {\r\n    list<int> lst(presize, -1);\r\n\r\n    lst.append_range(forward<Rng>(rng));\r\n    const auto count = static_cast<ptrdiff_t>(presize);\r\n    assert(ranges::count(lst | views::take(count), -1) == count);\r\n    assert(ranges::equal(lst | views::drop(count), expected));\r\n}\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nvoid test_list(const int (&expected)[N]) {\r\n    test_list(0, Rng{expected}, expected);\r\n    test_list(2, Rng{expected}, expected);\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_list<R>(some_ints);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_view() {\r\n    test_list<span<const int>>(some_ints);\r\n}\r\n\r\nvoid test_move_only_view() {\r\n    test_list<move_only_view<input_iterator_tag, test::Common::no>>(some_ints);\r\n    test_list<move_only_view<forward_iterator_tag, test::Common::no>>(some_ints);\r\n    test_list<move_only_view<forward_iterator_tag, test::Common::yes>>(some_ints);\r\n    test_list<move_only_view<bidirectional_iterator_tag, test::Common::no>>(some_ints);\r\n    test_list<move_only_view<bidirectional_iterator_tag, test::Common::yes>>(some_ints);\r\n    test_list<move_only_view<random_access_iterator_tag, test::Common::no>>(some_ints);\r\n    test_list<move_only_view<random_access_iterator_tag, test::Common::yes>>(some_ints);\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_list(0, some_ints, some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(from_range, some_ints);\r\n    test_list(0, vec, some_ints);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_list(0, lst, some_ints);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_view();\r\n    test_move_only_view();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_list_assign_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_list_assign_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nvoid test_list(const size_t presize, Rng&& rng, Expected&& expected) {\r\n    list<int> lst(presize, -1);\r\n    lst.assign_range(forward<Rng>(rng));\r\n    assert(ranges::equal(lst, expected));\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_list(0, R{some_ints}, some_ints);\r\n        test_list(5, R{some_ints}, some_ints);\r\n        test_list(11, R{some_ints}, some_ints);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const int> s{some_ints};\r\n    test_list(0, s, some_ints);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_list(0, move_only_view<input_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_list(0, move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_list(0, move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    test_list(0, move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_list(0, move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    test_list(0, move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_list(0, move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_list(0, some_ints, some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_list(0, vec, some_ints);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_list(0, lst, some_ints);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_list_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_list_from_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nvoid test_list(Rng&& rng, Expected&& expected) {\r\n    list<int> lst{from_range, forward<Rng>(rng)};\r\n    assert(ranges::equal(lst, expected));\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_list(R{some_ints}, some_ints);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nint main() {\r\n    // Validate views\r\n    { // copyable views\r\n        constexpr span<const int> s{some_ints};\r\n        test_list(s, some_ints);\r\n    }\r\n\r\n    { // move-only views\r\n        test_list(move_only_view<input_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_list(move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_list(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n        test_list(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_list(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n        test_list(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_list(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    }\r\n\r\n    // Validate non-views\r\n    test_list(some_ints, some_ints); // C array\r\n\r\n    { // lvalue vector\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_list(vec, some_ints);\r\n    }\r\n\r\n    { // lvalue forward_list\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_list(lst, some_ints);\r\n    }\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_list_insert_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_list_insert_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nvoid test_list(const size_t presize, Rng&& rng, Expected&& expected) {\r\n    list<int> lst(presize, -1);\r\n    const same_as<list<int>::iterator> auto result =\r\n        lst.insert_range(ranges::next(lst.begin(), presize != 0), forward<Rng>(rng));\r\n    assert(result == ranges::next(lst.begin(), presize != 0));\r\n    assert(ranges::equal(lst, expected));\r\n}\r\n\r\nstatic constexpr int some_ints[]    = {0, 1, 2, 3, 4, 5, 6, 7};\r\nstatic constexpr int short_result[] = {\r\n    -1, 0, 1, 2, 3, 4, 5, 6, 7, -1, -1, -1, -1}; // result of inserting some_ints at offset 1 in a sequence of 5 -1s\r\nstatic constexpr int long_result[] = {\r\n    -1, 0, 1, 2, 3, 4, 5, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; // ditto, in a sequence of 11 -1s\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_list(0, R{some_ints}, some_ints);\r\n        test_list(5, R{some_ints}, short_result);\r\n        test_list(11, R{some_ints}, long_result);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const int> s{some_ints};\r\n    test_list(0, s, some_ints);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_list(0, move_only_view<input_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_list(0, move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_list(0, move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    test_list(0, move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_list(0, move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    test_list(0, move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_list(0, move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_list(0, some_ints, some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_list(0, vec, some_ints);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_list(0, lst, some_ints);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_list_prepend_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_list_prepend_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <forward_list>\r\n#include <list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nvoid test_list(const size_t presize, Rng&& rng, const int (&expected)[N]) {\r\n    list<int> lst(presize, -1);\r\n\r\n    lst.prepend_range(forward<Rng>(rng));\r\n    assert(ranges::equal(lst | views::take(ptrdiff_t{N}), expected));\r\n    assert(ranges::count(lst | views::drop(ptrdiff_t{N}), -1) == static_cast<ptrdiff_t>(presize));\r\n}\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nvoid test_list(const int (&expected)[N]) {\r\n    test_list(0, Rng{expected}, expected);\r\n    test_list(2, Rng{expected}, expected);\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_list<R>(some_ints);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_view() {\r\n    test_list<span<const int>>(some_ints);\r\n}\r\n\r\nvoid test_move_only_view() {\r\n    test_list<move_only_view<input_iterator_tag, test::Common::no>>(some_ints);\r\n    test_list<move_only_view<forward_iterator_tag, test::Common::no>>(some_ints);\r\n    test_list<move_only_view<forward_iterator_tag, test::Common::yes>>(some_ints);\r\n    test_list<move_only_view<bidirectional_iterator_tag, test::Common::no>>(some_ints);\r\n    test_list<move_only_view<bidirectional_iterator_tag, test::Common::yes>>(some_ints);\r\n    test_list<move_only_view<random_access_iterator_tag, test::Common::no>>(some_ints);\r\n    test_list<move_only_view<random_access_iterator_tag, test::Common::yes>>(some_ints);\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_list(0, some_ints, some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(from_range, some_ints);\r\n    test_list(0, vec, some_ints);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_list(0, lst, some_ints);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_view();\r\n    test_move_only_view();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_map_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_map_from_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <map>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr pair<int, int> expected_vals[] = {\r\n    {0, 20}, {1, 19}, {2, 18}, {3, 17}, {4, 16}, {5, 13}, {6, 12}, {7, 11}};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_map(Rng&& rng) {\r\n    if constexpr (is_reference_v<ranges::range_reference_t<Rng>>) {\r\n        map<int, int> m{from_range, forward<Rng>(rng)};\r\n        assert(ranges::equal(m, expected_vals, equal_to<pair<int, int>>{}));\r\n    }\r\n}\r\n\r\nstatic constexpr pair<int, int> some_pairs[] = {\r\n    {4, 16}, {2, 18}, {3, 17}, {0, 20}, {4, 15}, {5, 13}, {6, 12}, {4, 14}, {5, 13}, {7, 11}, {1, 19}};\r\n\r\nstruct map_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_map(R{some_pairs});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const pair<int, int>, test::Sized{is_random},\r\n    test::CanDifference{is_random}, IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef::no, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const pair<int, int>> s{some_pairs};\r\n    test_map(s);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_map(move_only_view<input_iterator_tag, test::Common::no>{some_pairs});\r\n    test_map(move_only_view<forward_iterator_tag, test::Common::no>{some_pairs});\r\n    test_map(move_only_view<forward_iterator_tag, test::Common::yes>{some_pairs});\r\n    test_map(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_pairs});\r\n    test_map(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_pairs});\r\n    test_map(move_only_view<random_access_iterator_tag, test::Common::no>{some_pairs});\r\n    test_map(move_only_view<random_access_iterator_tag, test::Common::yes>{some_pairs});\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_map(some_pairs);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n    test_map(vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n    test_map(lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<map_instantiator, const pair<int, int>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_map_insert_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_map_insert_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <map>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr pair<int, int> expected_vals[] = {\r\n    {0, 20}, {1, 19}, {2, 18}, {3, 17}, {4, 16}, {5, 13}, {6, 12}, {7, 11}};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_map(Rng&& rng) {\r\n    if constexpr (is_reference_v<ranges::range_reference_t<Rng>>) {\r\n        map<int, int> m;\r\n        m.insert_range(forward<Rng>(rng));\r\n        assert(ranges::equal(m, expected_vals, equal_to<pair<int, int>>{}));\r\n    }\r\n}\r\n\r\nstatic constexpr pair<int, int> some_pairs[] = {\r\n    {4, 16}, {2, 18}, {3, 17}, {0, 20}, {4, 15}, {5, 13}, {6, 12}, {4, 14}, {5, 13}, {7, 11}, {1, 19}};\r\n\r\nstruct map_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_map(R{some_pairs});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const pair<int, int>, test::Sized{is_random},\r\n    test::CanDifference{is_random}, IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef::no, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const pair<int, int>> s{some_pairs};\r\n    test_map(s);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_map(move_only_view<input_iterator_tag, test::Common::no>{some_pairs});\r\n    test_map(move_only_view<forward_iterator_tag, test::Common::no>{some_pairs});\r\n    test_map(move_only_view<forward_iterator_tag, test::Common::yes>{some_pairs});\r\n    test_map(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_pairs});\r\n    test_map(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_pairs});\r\n    test_map(move_only_view<random_access_iterator_tag, test::Common::no>{some_pairs});\r\n    test_map(move_only_view<random_access_iterator_tag, test::Common::yes>{some_pairs});\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_map(some_pairs);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n    test_map(vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n    test_map(lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<map_instantiator, const pair<int, int>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_multimap_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_multimap_from_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <map>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr pair<int, int> expected_vals[] = {\r\n    {0, 20}, {1, 19}, {2, 18}, {3, 17}, {4, 16}, {4, 15}, {4, 14}, {5, 13}, {5, 13}, {6, 12}, {7, 11}};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_multimap(Rng&& rng) {\r\n    if constexpr (is_reference_v<ranges::range_reference_t<Rng>>) {\r\n        multimap<int, int> m{from_range, forward<Rng>(rng)};\r\n        assert(ranges::equal(m, expected_vals, equal_to<pair<int, int>>{}));\r\n    }\r\n}\r\n\r\nstatic constexpr pair<int, int> some_pairs[] = {\r\n    {4, 16}, {2, 18}, {3, 17}, {0, 20}, {4, 15}, {5, 13}, {6, 12}, {4, 14}, {5, 13}, {7, 11}, {1, 19}};\r\n\r\nstruct multimap_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_multimap(R{some_pairs});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const pair<int, int>, test::Sized{is_random},\r\n    test::CanDifference{is_random}, IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef::no, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const pair<int, int>> s{some_pairs};\r\n    test_multimap(s);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_multimap(move_only_view<input_iterator_tag, test::Common::no>{some_pairs});\r\n    test_multimap(move_only_view<forward_iterator_tag, test::Common::no>{some_pairs});\r\n    test_multimap(move_only_view<forward_iterator_tag, test::Common::yes>{some_pairs});\r\n    test_multimap(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_pairs});\r\n    test_multimap(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_pairs});\r\n    test_multimap(move_only_view<random_access_iterator_tag, test::Common::no>{some_pairs});\r\n    test_multimap(move_only_view<random_access_iterator_tag, test::Common::yes>{some_pairs});\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_multimap(some_pairs);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n    test_multimap(vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n    test_multimap(lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<multimap_instantiator, const pair<int, int>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_multimap_insert_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_multimap_insert_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <map>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr pair<int, int> expected_vals[] = {\r\n    {0, 20}, {1, 19}, {2, 18}, {3, 17}, {4, 16}, {4, 15}, {4, 14}, {5, 13}, {5, 13}, {6, 12}, {7, 11}};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_multimap(Rng&& rng) {\r\n    if constexpr (is_reference_v<ranges::range_reference_t<Rng>>) {\r\n        multimap<int, int> m;\r\n        m.insert_range(forward<Rng>(rng));\r\n        assert(ranges::equal(m, expected_vals, equal_to<pair<int, int>>{}));\r\n    }\r\n}\r\n\r\nstatic constexpr pair<int, int> some_pairs[] = {\r\n    {4, 16}, {2, 18}, {3, 17}, {0, 20}, {4, 15}, {5, 13}, {6, 12}, {4, 14}, {5, 13}, {7, 11}, {1, 19}};\r\n\r\nstruct multimap_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_multimap(R{some_pairs});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const pair<int, int>, test::Sized{is_random},\r\n    test::CanDifference{is_random}, IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef::no, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const pair<int, int>> s{some_pairs};\r\n    test_multimap(s);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_multimap(move_only_view<input_iterator_tag, test::Common::no>{some_pairs});\r\n    test_multimap(move_only_view<forward_iterator_tag, test::Common::no>{some_pairs});\r\n    test_multimap(move_only_view<forward_iterator_tag, test::Common::yes>{some_pairs});\r\n    test_multimap(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_pairs});\r\n    test_multimap(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_pairs});\r\n    test_multimap(move_only_view<random_access_iterator_tag, test::Common::no>{some_pairs});\r\n    test_multimap(move_only_view<random_access_iterator_tag, test::Common::yes>{some_pairs});\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_multimap(some_pairs);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n    test_multimap(vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n    test_multimap(lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<multimap_instantiator, const pair<int, int>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_multiset_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_multiset_from_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <set>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr int expected_vals[] = {0, 1, 2, 3, 4, 4, 4, 5, 6, 7};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_multiset(Rng&& rng) {\r\n    if constexpr (is_reference_v<ranges::range_reference_t<Rng>>) {\r\n        multiset<int> m{from_range, forward<Rng>(rng)};\r\n        assert(ranges::equal(m, expected_vals));\r\n    }\r\n}\r\n\r\nstatic constexpr int some_ints[] = {4, 2, 3, 4, 0, 5, 4, 6, 7, 1};\r\n\r\nstruct multiset_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_multiset(R{some_ints});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>}, test::ProxyRef::no, test::CanView::yes,\r\n    test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const int> s{some_ints};\r\n    test_multiset(s);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_multiset(move_only_view<input_iterator_tag, test::Common::no>{some_ints});\r\n    test_multiset(move_only_view<forward_iterator_tag, test::Common::no>{some_ints});\r\n    test_multiset(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints});\r\n    test_multiset(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints});\r\n    test_multiset(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints});\r\n    test_multiset(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints});\r\n    test_multiset(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints});\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_multiset(some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_multiset(vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_multiset(lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<multiset_instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_multiset_insert_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_multiset_insert_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <set>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr int expected_vals[] = {0, 1, 2, 3, 4, 4, 4, 5, 6, 7};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_multiset(Rng&& rng) {\r\n    if constexpr (is_reference_v<ranges::range_reference_t<Rng>>) {\r\n        multiset<int> m;\r\n        m.insert_range(forward<Rng>(rng));\r\n        assert(ranges::equal(m, expected_vals));\r\n    }\r\n}\r\n\r\nstatic constexpr int some_ints[] = {4, 2, 3, 4, 0, 5, 4, 6, 7, 1};\r\n\r\nstruct multiset_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_multiset(R{some_ints});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>}, test::ProxyRef::no, test::CanView::yes,\r\n    test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const int> s{some_ints};\r\n    test_multiset(s);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_multiset(move_only_view<input_iterator_tag, test::Common::no>{some_ints});\r\n    test_multiset(move_only_view<forward_iterator_tag, test::Common::no>{some_ints});\r\n    test_multiset(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints});\r\n    test_multiset(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints});\r\n    test_multiset(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints});\r\n    test_multiset(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints});\r\n    test_multiset(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints});\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_multiset(some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_multiset(vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_multiset(lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<multiset_instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_priority_queue_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_priority_queue_from_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <queue>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nstruct accessible_adaptor : T {\r\n    using T::T;\r\n\r\n    auto& get_container() {\r\n        return this->c;\r\n    }\r\n    auto& get_container() const {\r\n        return this->c;\r\n    }\r\n};\r\n\r\ntemplate <ranges::input_range R, class... Args>\r\nvoid test_priority_queue(R&& r, Args&&... args) {\r\n    accessible_adaptor<priority_queue<int>> s{from_range, r, forward<Args>(args)...};\r\n    assert(ranges::is_heap(s.get_container()));\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 7, 1, 6, 2, 5, 3, 4};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_priority_queue(R{some_ints});\r\n        test_priority_queue(R{some_ints}, less<int>{});\r\n        test_priority_queue(R{some_ints}, less<int>{}, allocator<int>{});\r\n        test_priority_queue(R{some_ints}, allocator<int>{});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nint main() {\r\n    // Validate views\r\n    { // copyable views\r\n        constexpr span<const int> s{some_ints};\r\n        test_priority_queue(s);\r\n    }\r\n\r\n    { // move-only views\r\n        test_priority_queue(move_only_view<input_iterator_tag, test::Common::no>{some_ints});\r\n        test_priority_queue(move_only_view<forward_iterator_tag, test::Common::no>{some_ints});\r\n        test_priority_queue(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints});\r\n        test_priority_queue(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints});\r\n        test_priority_queue(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints});\r\n        test_priority_queue(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints});\r\n        test_priority_queue(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints});\r\n    }\r\n\r\n    // Validate non-views\r\n    test_priority_queue(some_ints); // C array\r\n\r\n    { // lvalue vector\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_priority_queue(vec);\r\n    }\r\n\r\n    { // lvalue forward_list\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_priority_queue(lst);\r\n    }\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_priority_queue_push_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_priority_queue_push_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <queue>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nstruct accessible_adaptor : T {\r\n    using T::T;\r\n\r\n    auto& get_container() {\r\n        return this->c;\r\n    }\r\n    auto& get_container() const {\r\n        return this->c;\r\n    }\r\n};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_priority_queue(const size_t presize, Rng&& rng) {\r\n    accessible_adaptor<priority_queue<int>> pq{less<int>{}, vector<int>(presize, -1)};\r\n\r\n    pq.push_range(forward<Rng>(rng));\r\n    const auto& container = pq.get_container();\r\n    assert(ranges::is_heap(container));\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 7, 1, 6, 2, 5, 3, 4};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_priority_queue() {\r\n    test_priority_queue(0, Rng{some_ints});\r\n    test_priority_queue(3, Rng{some_ints});\r\n}\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_priority_queue<R>();\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_view() {\r\n    test_priority_queue<span<const int>>();\r\n}\r\n\r\nvoid test_move_only_view() {\r\n    test_priority_queue<move_only_view<input_iterator_tag, test::Common::no>>();\r\n    test_priority_queue<move_only_view<forward_iterator_tag, test::Common::no>>();\r\n    test_priority_queue<move_only_view<forward_iterator_tag, test::Common::yes>>();\r\n    test_priority_queue<move_only_view<bidirectional_iterator_tag, test::Common::no>>();\r\n    test_priority_queue<move_only_view<bidirectional_iterator_tag, test::Common::yes>>();\r\n    test_priority_queue<move_only_view<random_access_iterator_tag, test::Common::no>>();\r\n    test_priority_queue<move_only_view<random_access_iterator_tag, test::Common::yes>>();\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_priority_queue(0, some_ints);\r\n    test_priority_queue(3, some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(from_range, some_ints);\r\n    test_priority_queue(0, vec);\r\n    test_priority_queue(3, vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(from_range, some_ints);\r\n    test_priority_queue(0, lst);\r\n    test_priority_queue(3, lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_view();\r\n    test_move_only_view();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_queue_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_queue_from_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <new>\r\n#include <queue>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nstruct accessible_adaptor : T {\r\n    using T::T;\r\n\r\n    auto& get_container() {\r\n        return this->c;\r\n    }\r\n    auto& get_container() const {\r\n        return this->c;\r\n    }\r\n};\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\ntemplate <ranges::input_range R, class... Args>\r\nvoid test_queue(R&& r, Args&&... args) {\r\n    accessible_adaptor<queue<int>> s{from_range, r, forward<Args>(args)...};\r\n    assert(ranges::equal(s.get_container(), some_ints));\r\n}\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_queue(R{some_ints});\r\n        test_queue(R{some_ints}, allocator<int>{});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nint main() {\r\n    // Validate views\r\n    { // copyable views\r\n        constexpr span<const int> s{some_ints};\r\n        test_queue(s);\r\n    }\r\n\r\n    { // move-only views\r\n        test_queue(move_only_view<input_iterator_tag, test::Common::no>{some_ints});\r\n        test_queue(move_only_view<forward_iterator_tag, test::Common::no>{some_ints});\r\n        test_queue(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints});\r\n        test_queue(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints});\r\n        test_queue(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints});\r\n        test_queue(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints});\r\n        test_queue(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints});\r\n    }\r\n\r\n    // Validate non-views\r\n    test_queue(some_ints); // C array\r\n\r\n    { // lvalue vector\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_queue(vec);\r\n    }\r\n\r\n    { // lvalue forward_list\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_queue(lst);\r\n    }\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_queue_push_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_queue_push_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <queue>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nstruct accessible_adaptor : T {\r\n    using T::T;\r\n\r\n    auto& get_container() {\r\n        return this->c;\r\n    }\r\n    auto& get_container() const {\r\n        return this->c;\r\n    }\r\n};\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nvoid test_queue(const size_t presize, Rng&& rng, const int (&expected)[N]) {\r\n    accessible_adaptor<queue<int>> d{deque<int>(presize, -1)};\r\n\r\n    d.push_range(forward<Rng>(rng));\r\n    const auto count      = static_cast<ptrdiff_t>(presize);\r\n    const auto& container = d.get_container();\r\n    assert(ranges::count(container | views::take(count), -1) == count);\r\n    assert(ranges::equal(container | views::drop(count), expected));\r\n}\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nvoid test_queue(const int (&expected)[N]) {\r\n    test_queue(0, Rng{expected}, expected);\r\n    test_queue(2, Rng{expected}, expected);\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_queue<R>(some_ints);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_view() {\r\n    test_queue<span<const int>>(some_ints);\r\n}\r\n\r\nvoid test_move_only_view() {\r\n    test_queue<move_only_view<input_iterator_tag, test::Common::no>>(some_ints);\r\n    test_queue<move_only_view<forward_iterator_tag, test::Common::no>>(some_ints);\r\n    test_queue<move_only_view<forward_iterator_tag, test::Common::yes>>(some_ints);\r\n    test_queue<move_only_view<bidirectional_iterator_tag, test::Common::no>>(some_ints);\r\n    test_queue<move_only_view<bidirectional_iterator_tag, test::Common::yes>>(some_ints);\r\n    test_queue<move_only_view<random_access_iterator_tag, test::Common::no>>(some_ints);\r\n    test_queue<move_only_view<random_access_iterator_tag, test::Common::yes>>(some_ints);\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_queue(0, some_ints, some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(from_range, some_ints);\r\n    test_queue(0, vec, some_ints);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_queue(0, lst, some_ints);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_view();\r\n    test_move_only_view();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_ranges_to_mappish/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_ranges_to_mappish/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <flat_map>\r\n#include <functional>\r\n#include <map>\r\n#include <memory>\r\n#include <ranges>\r\n#include <string_view>\r\n#include <unordered_map>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std::literals;\r\n\r\ntemplate <class T>\r\nstruct myalloc {\r\n    using value_type = T;\r\n\r\n    int state = 42;\r\n\r\n    myalloc() = default;\r\n    constexpr explicit myalloc(int i) noexcept : state{i} {}\r\n    template <class U>\r\n    constexpr myalloc(const myalloc<U>& that) noexcept : state{that.state} {}\r\n\r\n    [[nodiscard]] constexpr T* allocate(std::size_t n) const {\r\n        return std::allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    constexpr void deallocate(T* const p, const std::size_t n) const noexcept {\r\n        std::allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class U>\r\n    constexpr bool operator==(const myalloc<U>& that) const noexcept {\r\n        return state == that.state;\r\n    }\r\n};\r\n\r\nstruct mappish_instantiator {\r\n    static constexpr std::pair<int, std::string_view> some_pairs[]   = {{0, \"0\"}, {1, \"1a\"}, {1, \"1b\"}, {1, \"1c\"},\r\n          {2, \"2\"}, {3, \"3\"}, {4, \"4\"}, {5, \"5a\"}, {5, \"5b\"}, {6, \"6\"}, {7, \"7\"}};\r\n    static constexpr std::pair<int, std::string_view> unique_pairs[] = {\r\n        {0, \"0\"}, {1, \"1a\"}, {2, \"2\"}, {3, \"3\"}, {4, \"4\"}, {5, \"5a\"}, {6, \"6\"}, {7, \"7\"}};\r\n\r\n    enum class is_multi : bool { no, yes };\r\n\r\n    static constexpr auto any_pair_eq = [](auto x, auto y) { return x.first == y.first && x.second == y.second; };\r\n\r\n    template <template <class...> class C>\r\n    struct deduce_container_impl; // not defined\r\n    template <>\r\n    struct deduce_container_impl<std::map> {\r\n        template <class Key, class Val, class... Args>\r\n        using apply = std::map<Key, Val, std::less<Key>, Args...>;\r\n    };\r\n    template <>\r\n    struct deduce_container_impl<std::multimap> {\r\n        template <class Key, class Val, class... Args>\r\n        using apply = std::multimap<Key, Val, std::less<Key>, Args...>;\r\n    };\r\n    template <>\r\n    struct deduce_container_impl<std::unordered_map> {\r\n        template <class Key, class Val, class... Args>\r\n        using apply = std::unordered_map<Key, Val, std::hash<Key>, std::equal_to<Key>, Args...>;\r\n    };\r\n    template <>\r\n    struct deduce_container_impl<std::unordered_multimap> {\r\n        template <class Key, class Val, class... Args>\r\n        using apply = std::unordered_multimap<Key, Val, std::hash<Key>, std::equal_to<Key>, Args...>;\r\n    };\r\n    template <>\r\n    struct deduce_container_impl<std::flat_map> {\r\n        template <class Key, class Val, class... Args>\r\n        using apply = std::flat_map<Key, Val, std::less<Key>,\r\n            std::vector<Key, typename std::allocator_traits<Args>::template rebind_alloc<Key>...>,\r\n            std::vector<Val, typename std::allocator_traits<Args>::template rebind_alloc<Val>...>>;\r\n    };\r\n    template <>\r\n    struct deduce_container_impl<std::flat_multimap> {\r\n        template <class Key, class Val, class... Args>\r\n        using apply = std::flat_multimap<Key, Val, std::less<Key>,\r\n            std::vector<Key, typename std::allocator_traits<Args>::template rebind_alloc<Key>...>,\r\n            std::vector<Val, typename std::allocator_traits<Args>::template rebind_alloc<Val>...>>;\r\n    };\r\n\r\n    template <template <class...> class C, class Key, class Val, class... Args>\r\n    using deduce_container = deduce_container_impl<C>::template apply<Key, Val, Args...>;\r\n\r\n    template <template <class...> class C>\r\n    static void test_copy_move() {\r\n        using Container = C<int, std::string_view>;\r\n        const auto c    = ranges::to<Container>(some_pairs);\r\n\r\n        // validate the \"direct\" construction path with some copies and moves\r\n        {\r\n            std::same_as<Container> auto c0 = ranges::to<Container>(ranges::to<Container>(some_pairs));\r\n            assert(c0 == c);\r\n        }\r\n        {\r\n            std::same_as<Container> auto c1 = ranges::to<Container>(c);\r\n            assert(c1 == c);\r\n        }\r\n        {\r\n            std::same_as<Container> auto c2 = ranges::to<C>(ranges::to<Container>(some_pairs));\r\n            assert(c2 == c);\r\n        }\r\n        {\r\n            std::same_as<Container> auto c3 = ranges::to<C>(c);\r\n            assert(c3 == c);\r\n        }\r\n        {\r\n            std::same_as<Container> auto c4 = ranges::to<Container>(some_pairs) | ranges::to<Container>();\r\n            assert(c4 == c);\r\n        }\r\n        {\r\n            std::same_as<Container> auto c5 = c | ranges::to<Container>();\r\n            assert(c5 == c);\r\n        }\r\n        {\r\n            std::same_as<Container> auto c6 = ranges::to<Container>(some_pairs) | ranges::to<C>();\r\n            assert(c6 == c);\r\n        }\r\n        {\r\n            std::same_as<Container> auto c7 = c | ranges::to<C>();\r\n            assert(c7 == c);\r\n        }\r\n    }\r\n\r\n    template <ranges::input_range R, template <class...> class C, is_multi Multi>\r\n    static void test_mappish() {\r\n        auto& expected = []() -> auto& {\r\n            if constexpr (Multi == is_multi::yes) {\r\n                return some_pairs;\r\n            } else {\r\n                return unique_pairs;\r\n            }\r\n        }();\r\n\r\n        using Container = C<int, std::string_view>;\r\n        {\r\n            std::same_as<Container> auto c0 = ranges::to<Container>(R{some_pairs});\r\n            assert(ranges::is_permutation(c0, expected, any_pair_eq));\r\n        }\r\n        {\r\n            std::same_as<Container> auto c1 = ranges::to<C>(R{some_pairs});\r\n            assert(ranges::is_permutation(c1, expected, any_pair_eq));\r\n        }\r\n        {\r\n            std::same_as<Container> auto c2 = R{some_pairs} | ranges::to<Container>();\r\n            assert(ranges::is_permutation(c2, expected, any_pair_eq));\r\n        }\r\n        {\r\n            std::same_as<Container> auto c3 = R{some_pairs} | ranges::to<C>();\r\n            assert(ranges::is_permutation(c3, expected, any_pair_eq));\r\n        }\r\n\r\n        using Alloc = myalloc<std::pair<const int, std::string_view>>;\r\n        using T     = deduce_container<C, int, std::string_view, Alloc>;\r\n        constexpr bool is_flat =\r\n            std::_Is_specialization_v<T, std::flat_map> || std::_Is_specialization_v<T, std::flat_multimap>;\r\n\r\n        {\r\n            std::same_as<T> auto c4 = ranges::to<T>(R{some_pairs}, Alloc{13});\r\n            assert(ranges::is_permutation(c4, expected, any_pair_eq));\r\n\r\n            if constexpr (is_flat) {\r\n                const auto containers = std::move(c4).extract();\r\n                assert(containers.keys.get_allocator().state == 13);\r\n                assert(containers.values.get_allocator().state == 13);\r\n            } else {\r\n                assert(c4.get_allocator().state == 13);\r\n            }\r\n        }\r\n        {\r\n            std::same_as<T> auto c5 = ranges::to<C>(R{some_pairs}, Alloc{13});\r\n            assert(ranges::is_permutation(c5, expected, any_pair_eq));\r\n\r\n            if constexpr (is_flat) {\r\n                const auto containers = std::move(c5).extract();\r\n                assert(containers.keys.get_allocator().state == 13);\r\n                assert(containers.values.get_allocator().state == 13);\r\n            } else {\r\n                assert(c5.get_allocator().state == 13);\r\n            }\r\n        }\r\n        {\r\n            std::same_as<T> auto c6 = R{some_pairs} | ranges::to<T>(Alloc{13});\r\n            assert(ranges::is_permutation(c6, expected, any_pair_eq));\r\n\r\n            if constexpr (is_flat) {\r\n                const auto containers = std::move(c6).extract();\r\n                assert(containers.keys.get_allocator().state == 13);\r\n                assert(containers.values.get_allocator().state == 13);\r\n            } else {\r\n                assert(c6.get_allocator().state == 13);\r\n            }\r\n        }\r\n        {\r\n            std::same_as<T> auto c7 = R{some_pairs} | ranges::to<C>(Alloc{13});\r\n            assert(ranges::is_permutation(c7, expected, any_pair_eq));\r\n\r\n            if constexpr (is_flat) {\r\n                const auto containers = std::move(c7).extract();\r\n                assert(containers.keys.get_allocator().state == 13);\r\n                assert(containers.values.get_allocator().state == 13);\r\n            } else {\r\n                assert(c7.get_allocator().state == 13);\r\n            }\r\n        }\r\n    }\r\n\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        if constexpr (std::same_as<std::remove_cvref_t<ranges::range_reference_t<R>>,\r\n                          std::pair<int, std::string_view>>) {\r\n            test_mappish<R, std::map, is_multi::no>();\r\n            test_mappish<R, std::multimap, is_multi::yes>();\r\n            test_mappish<R, std::unordered_map, is_multi::no>();\r\n            test_mappish<R, std::unordered_multimap, is_multi::yes>();\r\n            test_mappish<R, std::flat_map, is_multi::no>();\r\n            test_mappish<R, std::flat_multimap, is_multi::yes>();\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    test_in<mappish_instantiator, const std::pair<int, std::string_view>>();\r\n    mappish_instantiator::test_copy_move<std::map>();\r\n    mappish_instantiator::test_copy_move<std::multimap>();\r\n    mappish_instantiator::test_copy_move<std::unordered_map>();\r\n    mappish_instantiator::test_copy_move<std::unordered_multimap>();\r\n    mappish_instantiator::test_copy_move<std::flat_map>();\r\n    mappish_instantiator::test_copy_move<std::flat_multimap>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_ranges_to_misc/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_ranges_to_misc/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <memory>\r\n#include <optional>\r\n#include <ranges>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nnamespace ranges = std::ranges;\r\n\r\nstruct secret_key_t {\r\n    explicit secret_key_t() = default;\r\n};\r\ninline constexpr secret_key_t secret_key;\r\n\r\nstruct reservable {\r\n    using value_type = int;\r\n\r\n    std::size_t cap_      = 0;\r\n    std::size_t reserved_ = 0;\r\n    std::size_t size_     = 0;\r\n\r\n    constexpr reservable(secret_key_t) {}\r\n\r\n    constexpr std::size_t capacity() const {\r\n        return cap_;\r\n    }\r\n    constexpr std::size_t max_size() const {\r\n        return ~std::size_t{};\r\n    }\r\n    constexpr std::size_t size() const {\r\n        return size_;\r\n    }\r\n    constexpr void reserve(const std::size_t n) {\r\n        if (n > cap_) {\r\n            assert(reserved_ == 0);\r\n            reserved_ = n;\r\n            cap_      = n;\r\n        }\r\n    }\r\n\r\n    constexpr void push_back(int) {\r\n        if (++size_ > cap_) {\r\n            assert(false);\r\n        }\r\n    }\r\n\r\n    int* begin(); // not defined\r\n    int* end(); // not defined\r\n};\r\n\r\nconstexpr bool test_reservable() {\r\n    int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};\r\n    {\r\n        std::same_as<reservable> auto r = some_ints | ranges::to<reservable>(secret_key);\r\n        assert(r.size_ == ranges::size(some_ints));\r\n        assert(r.cap_ == ranges::size(some_ints));\r\n        assert(r.reserved_ == ranges::size(some_ints));\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_common_constructible() {\r\n    struct common_constructible {\r\n        using value_type = int;\r\n\r\n        constexpr common_constructible(const int* const first, const int* const last, secret_key_t)\r\n            : first_{first}, last_{last}, args_{3} {}\r\n\r\n        constexpr common_constructible(const int* const first, const int* const last, secret_key_t, double)\r\n            : first_{first}, last_{last}, args_{4} {}\r\n\r\n        const int* begin() const; // not defined\r\n        const int* end() const; // not defined\r\n\r\n        const int* first_;\r\n        const int* last_;\r\n        int args_;\r\n    };\r\n\r\n    int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};\r\n\r\n    {\r\n        std::same_as<common_constructible> auto c0 = ranges::to<common_constructible>(some_ints, secret_key);\r\n        assert(c0.first_ == ranges::begin(some_ints));\r\n        assert(c0.last_ == ranges::end(some_ints));\r\n        assert(c0.args_ == 3);\r\n    }\r\n    {\r\n        std::same_as<common_constructible> auto c1 = some_ints | ranges::to<common_constructible>(secret_key);\r\n        assert(c1.first_ == ranges::begin(some_ints));\r\n        assert(c1.last_ == ranges::end(some_ints));\r\n        assert(c1.args_ == 3);\r\n    }\r\n\r\n    // Verify that more than one argument can be passed after the range:\r\n    {\r\n        std::same_as<common_constructible> auto c2 = ranges::to<common_constructible>(some_ints, secret_key, 3.14);\r\n        assert(c2.first_ == ranges::begin(some_ints));\r\n        assert(c2.last_ == ranges::end(some_ints));\r\n        assert(c2.args_ == 4);\r\n    }\r\n    {\r\n        std::same_as<common_constructible> auto c3 = some_ints | ranges::to<common_constructible>(secret_key, 3.14);\r\n        assert(c3.first_ == ranges::begin(some_ints));\r\n        assert(c3.last_ == ranges::end(some_ints));\r\n        assert(c3.args_ == 4);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_nested_range() {\r\n    int some_int_ervals[3][2][2] = {{{0, 1}, {2, 3}}, {{4, 5}, {6, 7}}, {{8, 9}, {10, 11}}};\r\n\r\n    using C = std::vector<std::vector<std::vector<int>>>;\r\n\r\n    {\r\n        std::same_as<C> auto c0 = ranges::to<C>(some_int_ervals);\r\n        assert(c0.size() == 3);\r\n        assert(c0[0].size() == 2);\r\n        assert(c0[0][0].size() == 2);\r\n        assert(c0[0][0][0] == 0);\r\n        assert(c0[0][0][1] == 1);\r\n        assert(c0[0][1][0] == 2);\r\n        assert(c0[0][1][1] == 3);\r\n        assert(c0[1][0][0] == 4);\r\n        assert(c0[1][0][1] == 5);\r\n        assert(c0[1][1][0] == 6);\r\n        assert(c0[1][1][1] == 7);\r\n        assert(c0[2][0][0] == 8);\r\n        assert(c0[2][0][1] == 9);\r\n        assert(c0[2][1][0] == 10);\r\n        assert(c0[2][1][1] == 11);\r\n    }\r\n    {\r\n        std::same_as<C> auto c0 = some_int_ervals | ranges::to<C>();\r\n        assert(c0.size() == 3);\r\n        assert(c0[0].size() == 2);\r\n        assert(c0[0][0].size() == 2);\r\n        assert(c0[0][0][0] == 0);\r\n        assert(c0[0][0][1] == 1);\r\n        assert(c0[0][1][0] == 2);\r\n        assert(c0[0][1][1] == 3);\r\n        assert(c0[1][0][0] == 4);\r\n        assert(c0[1][0][1] == 5);\r\n        assert(c0[1][1][0] == 6);\r\n        assert(c0[1][1][1] == 7);\r\n        assert(c0[2][0][0] == 8);\r\n        assert(c0[2][0][1] == 9);\r\n        assert(c0[2][1][0] == 10);\r\n        assert(c0[2][1][1] == 11);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class T, class A = std::allocator<T>>\r\nunion union_vector {\r\n    std::vector<T, A> vec_;\r\n\r\n    constexpr union_vector() : vec_() {}\r\n    constexpr union_vector(const union_vector& other) : vec_(other.vec_) {}\r\n    constexpr union_vector(union_vector&& other) noexcept : vec_(std::move(other.vec_)) {}\r\n\r\n    template <class U>\r\n        requires (!std::same_as<std::remove_cvref_t<U>, union_vector>)\r\n              && (!std::same_as<std::remove_cvref_t<U>, std::vector<T, A>>)\r\n              && requires(U&& u) { std::vector<T, A>(std::forward<U>(u)); }\r\n    constexpr explicit union_vector(U&& u) : vec_(std::forward<U>(u)) {}\r\n\r\n    template <class T1, class T2, class... Ts>\r\n        requires requires(T1&& t1, T2&& t2, Ts&&... ts) {\r\n            std::vector<T, A>(std::forward<T1>(t1), std::forward<T2>(t2), std::forward<Ts>(ts)...);\r\n        }\r\n    constexpr union_vector(T1&& t1, T2&& t2, Ts&&... ts)\r\n        : vec_(std::forward<T1>(t1), std::forward<T2>(t2), std::forward<Ts>(ts)...) {}\r\n\r\n    constexpr union_vector& operator=(const union_vector& other) {\r\n        vec_ = other.vec_;\r\n        return *this;\r\n    }\r\n    constexpr union_vector& operator=(union_vector&& other)\r\n        noexcept(std::is_nothrow_move_assignable_v<std::vector<T, A>>) {\r\n        vec_ = std::move(other.vec_);\r\n        return *this;\r\n    }\r\n\r\n    constexpr ~union_vector() noexcept {\r\n        vec_.~vector();\r\n    }\r\n};\r\n\r\ntemplate <ranges::input_range R, class A = std::allocator<ranges::range_value_t<R>>>\r\nunion_vector(std::from_range_t, R&&, A = A()) -> union_vector<ranges::range_value_t<R>, A>;\r\n\r\nconstexpr bool test_to_union() {\r\n    constexpr int src[]{42, 1729};\r\n\r\n    assert(ranges::equal(ranges::to<union_vector<long>>(src).vec_, src));\r\n    assert(ranges::equal((src | ranges::to<union_vector<long>>()).vec_, src));\r\n\r\n    static_assert(std::same_as<decltype(ranges::to<union_vector>(src)), union_vector<int>>);\r\n    assert(ranges::equal(ranges::to<union_vector>(src).vec_, src));\r\n\r\n    static_assert(std::same_as<decltype(src | ranges::to<union_vector>()), union_vector<int>>);\r\n    assert(ranges::equal((src | ranges::to<union_vector>()).vec_, src));\r\n\r\n    return true;\r\n}\r\n\r\nstruct ContainerLike {\r\n    template <std::input_iterator Iter>\r\n    constexpr ContainerLike(Iter first, Iter last) : dist(static_cast<std::ptrdiff_t>(ranges::distance(first, last))) {}\r\n\r\n    constexpr char* begin() {\r\n        return nullptr;\r\n    }\r\n    constexpr char* end() {\r\n        return nullptr;\r\n    }\r\n\r\n    std::ptrdiff_t dist;\r\n};\r\n\r\nconstexpr bool test_lwg3733() {\r\n    auto nul_termination = std::views::take_while([](char ch) { return ch != '\\0'; });\r\n    auto c               = nul_termination(\"1729\") | std::views::common | ranges::to<ContainerLike>();\r\n    assert(c.dist == 4);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_lwg3785() {\r\n    std::vector<int> vec{42, 1729};\r\n\r\n    auto expe1 = ranges::to<std::optional<std::vector<int>>>(vec);\r\n    assert(expe1.has_value());\r\n    assert(*expe1 == vec);\r\n\r\n    auto expe2 = vec | ranges::to<std::optional<std::vector<int>>>();\r\n    assert(expe2.has_value());\r\n    assert(*expe2 == vec);\r\n\r\n    auto expe3 = ranges::to<std::optional>(vec);\r\n    assert(expe3.has_value());\r\n    assert(*expe3 == vec);\r\n\r\n    auto expe4 = vec | ranges::to<std::optional>();\r\n    assert(expe4.has_value());\r\n    assert(*expe4 == vec);\r\n\r\n    return true;\r\n}\r\n\r\nenum class restriction_kind {\r\n    emplace_back,\r\n    push_back,\r\n    emplace,\r\n    insert,\r\n};\r\n\r\ntemplate <restriction_kind K, class T, class A = std::allocator<T>>\r\nclass restricted_vector : private std::vector<T, A> {\r\nprivate:\r\n    using base_type = std::vector<T, A>;\r\n\r\npublic:\r\n    using typename base_type::allocator_type;\r\n    using typename base_type::const_iterator;\r\n    using typename base_type::const_reverse_iterator;\r\n    using typename base_type::difference_type;\r\n    using typename base_type::iterator;\r\n    using typename base_type::pointer;\r\n    using typename base_type::reference;\r\n    using typename base_type::reverse_iterator;\r\n    using typename base_type::size_type;\r\n    using typename base_type::value_type;\r\n\r\n    restricted_vector() = default;\r\n    constexpr explicit restricted_vector(const A& alloc) noexcept : base_type(alloc) {}\r\n    constexpr explicit restricted_vector(const size_type n, const A& alloc = A()) : base_type(n, alloc) {}\r\n    constexpr restricted_vector(const size_type n, const T& val, const A& alloc = A()) : base_type(n, val, alloc) {}\r\n    constexpr restricted_vector(const std::initializer_list<T> il, const A& alloc = A()) : base_type(il, alloc) {}\r\n    constexpr restricted_vector(const restricted_vector& other, const A& alloc) : base_type(other, alloc) {}\r\n    constexpr restricted_vector(restricted_vector&& other, const A& alloc)\r\n        noexcept(std::allocator_traits<A>::is_always_equal::value)\r\n        : base_type(std::move(other), alloc) {}\r\n\r\n    using base_type::begin;\r\n    using base_type::cbegin;\r\n    using base_type::cend;\r\n    using base_type::crbegin;\r\n    using base_type::crend;\r\n    using base_type::end;\r\n    using base_type::rbegin;\r\n    using base_type::rend;\r\n\r\n    using base_type::back;\r\n    using base_type::front;\r\n    using base_type::operator[];\r\n    using base_type::at;\r\n    using base_type::data;\r\n\r\n    template <class... Args>\r\n    constexpr T& emplace_back(Args&&... args)\r\n        requires (K == restriction_kind::emplace_back)\r\n    {\r\n        return base_type::emplace_back(std::forward<Args>(args)...);\r\n    }\r\n\r\n    constexpr void push_back(const T& t)\r\n        requires (K == restriction_kind::push_back)\r\n    {\r\n        base_type::emplace_back(t);\r\n    }\r\n    constexpr void push_back(T&& t)\r\n        requires (K == restriction_kind::push_back)\r\n    {\r\n        base_type::emplace_back(std::move(t));\r\n    }\r\n\r\n    template <class... Args>\r\n    constexpr iterator emplace(const const_iterator it, Args&&... args)\r\n        requires (K == restriction_kind::emplace)\r\n    {\r\n        return base_type::emplace(it, std::forward<Args>(args)...);\r\n    }\r\n\r\n    constexpr iterator insert(const const_iterator it, const T& t)\r\n        requires (K == restriction_kind::insert)\r\n    {\r\n        return base_type::emplace(it, t);\r\n    }\r\n    constexpr iterator insert(const const_iterator it, T&& t)\r\n        requires (K == restriction_kind::insert)\r\n    {\r\n        return base_type::emplace(it, std::move(t));\r\n    }\r\n};\r\n\r\ntemplate <restriction_kind K>\r\nconstexpr void test_lwg4016_per_kind() {\r\n    using V = restricted_vector<K, int>;\r\n    {\r\n        std::same_as<V> auto vec = std::views::iota(0, 42) | ranges::to<V>();\r\n        assert(ranges::equal(vec, std::views::iota(0, 42)));\r\n    }\r\n    {\r\n        std::same_as<V> auto vec = std::views::iota(0, 42) | ranges::to<V>(std::allocator<int>{});\r\n        assert(ranges::equal(vec, std::views::iota(0, 42)));\r\n    }\r\n    {\r\n        std::same_as<V> auto vec = std::views::empty<int> | ranges::to<V>(std::size_t{42});\r\n        assert(ranges::equal(vec, std::views::repeat(0, 42)));\r\n    }\r\n    {\r\n        std::same_as<V> auto vec = std::views::empty<int> | ranges::to<V>(std::size_t{42}, std::allocator<int>{});\r\n        assert(ranges::equal(vec, std::views::repeat(0, 42)));\r\n    }\r\n    {\r\n        std::same_as<V> auto vec = ranges::to<V>(std::views::iota(0, 42), std::initializer_list<int>{-3, -2, -1});\r\n        assert(ranges::equal(vec, std::views::iota(-3, 42)));\r\n    }\r\n    {\r\n        std::same_as<V> auto vec =\r\n            ranges::to<V>(std::views::iota(0, 42), std::initializer_list<int>{-3, -2, -1}, std::allocator<int>{});\r\n        assert(ranges::equal(vec, std::views::iota(-3, 42)));\r\n    }\r\n    {\r\n        std::same_as<V> auto vec = ranges::to<V>(std::views::iota(0, 42), V{-3, -2, -1}, std::allocator<int>{});\r\n        assert(ranges::equal(vec, std::views::iota(-3, 42)));\r\n    }\r\n    {\r\n        V vec0{1, 2, 3};\r\n        std::same_as<V> auto vec = ranges::to<V>(std::views::iota(4, 7), vec0, std::allocator<int>{});\r\n        assert(ranges::equal(vec, std::views::iota(1, 7)));\r\n    }\r\n}\r\n\r\nconstexpr bool test_lwg4016() {\r\n    test_lwg4016_per_kind<restriction_kind::emplace_back>();\r\n    test_lwg4016_per_kind<restriction_kind::push_back>();\r\n    test_lwg4016_per_kind<restriction_kind::emplace>();\r\n    test_lwg4016_per_kind<restriction_kind::insert>();\r\n    return true;\r\n}\r\n\r\nstruct adl_only_range {\r\n    static constexpr int numbers[2]{42, 1729};\r\n\r\n    void begin() const = delete;\r\n    void end() const   = delete;\r\n\r\n    friend constexpr const int* begin(const adl_only_range&) {\r\n        return ranges::begin(numbers);\r\n    }\r\n    friend constexpr const int* end(const adl_only_range&) {\r\n        return ranges::end(numbers);\r\n    }\r\n};\r\n\r\nconstexpr bool test_lwg4016_regression() {\r\n    using vec = restricted_vector<restriction_kind::push_back, int>;\r\n\r\n    ranges::contiguous_range auto r = adl_only_range{};\r\n    auto v                          = r | ranges::to<vec>();\r\n    assert(ranges::equal(v, adl_only_range::numbers));\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test_reservable();\r\n    static_assert(test_reservable());\r\n\r\n    test_common_constructible();\r\n    static_assert(test_common_constructible());\r\n\r\n    test_nested_range();\r\n    static_assert(test_nested_range());\r\n\r\n    test_to_union();\r\n    static_assert(test_to_union());\r\n\r\n    test_lwg3733();\r\n    static_assert(test_lwg3733());\r\n\r\n    test_lwg3785();\r\n    static_assert(test_lwg3785());\r\n\r\n    test_lwg4016();\r\n    static_assert(test_lwg4016());\r\n\r\n    test_lwg4016_regression();\r\n    static_assert(test_lwg4016_regression());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_ranges_to_sequence/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_ranges_to_sequence/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <list>\r\n#include <ranges>\r\n#include <string>\r\n#include <string_view>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std::literals;\r\n\r\ntemplate <class T>\r\nstruct myalloc {\r\n    using value_type = T;\r\n\r\n    int state = 42;\r\n\r\n    myalloc() = default;\r\n    constexpr explicit myalloc(int i) noexcept : state{i} {}\r\n    template <class U>\r\n    constexpr myalloc(const myalloc<U>& that) noexcept : state{that.state} {}\r\n\r\n    [[nodiscard]] constexpr T* allocate(std::size_t n) const {\r\n        return std::allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    constexpr void deallocate(T* const p, const std::size_t n) const noexcept {\r\n        std::allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class U>\r\n    constexpr bool operator==(const myalloc<U>& that) const noexcept {\r\n        return state == that.state;\r\n    }\r\n};\r\n\r\nstruct sequence_instantiator {\r\n    template <template <class...> class C>\r\n    struct deduce_container_impl {\r\n        template <class... Args>\r\n        using apply = C<Args...>;\r\n    };\r\n    template <>\r\n    struct deduce_container_impl<std::basic_string> {\r\n        template <class T, class... Args>\r\n        using apply = std::basic_string<T, std::char_traits<T>, Args...>;\r\n    };\r\n\r\n    template <template <class...> class C, class T, class... Args>\r\n    using deduce_container = deduce_container_impl<C>::template apply<T, Args...>;\r\n\r\n    template <class>\r\n    static constexpr bool is_basic_string = false;\r\n    template <class CharT, class Traits, class Alloc>\r\n    static constexpr bool is_basic_string<std::basic_string<CharT, Traits, Alloc>> = true;\r\n\r\n    static constexpr auto meow = \"meow\"sv;\r\n\r\n    template <template <class...> class C>\r\n    static constexpr bool test_copy_move() {\r\n        const auto c = ranges::to<C<char>>(meow);\r\n\r\n        // validate the \"direct\" construction path with some copies and moves\r\n        {\r\n            std::same_as<C<char>> auto c0 = ranges::to<C<char>>(ranges::to<C<char>>(meow));\r\n            assert(c0 == c);\r\n        }\r\n        {\r\n            std::same_as<C<char>> auto c1 = ranges::to<C<char>>(c);\r\n            assert(c1 == c);\r\n        }\r\n        {\r\n            std::same_as<C<char>> auto c2 = ranges::to<C>(ranges::to<C<char>>(meow));\r\n            assert(c2 == c);\r\n        }\r\n        {\r\n            std::same_as<C<char>> auto c3 = ranges::to<C>(c);\r\n            assert(c3 == c);\r\n        }\r\n        {\r\n            std::same_as<C<char>> auto c4 = ranges::to<C<char>>(meow) | ranges::to<C<char>>();\r\n            assert(c4 == c);\r\n        }\r\n        {\r\n            std::same_as<C<char>> auto c5 = c | ranges::to<C<char>>();\r\n            assert(c5 == c);\r\n        }\r\n        {\r\n            std::same_as<C<char>> auto c6 = ranges::to<C<char>>(meow) | ranges::to<C>();\r\n            assert(c6 == c);\r\n        }\r\n        {\r\n            std::same_as<C<char>> auto c7 = c | ranges::to<C>();\r\n            assert(c7 == c);\r\n        }\r\n        if constexpr (!is_basic_string<C<char>>) { // LWG-3984 \"ranges::to's recursion branch may be ill-formed\"\r\n            auto owning                     = std::views::all(C<C<char>>{c});\r\n            std::same_as<C<C<int>>> auto c8 = owning | ranges::to<C<C<int>>>();\r\n            assert(\r\n                ranges::equal(c8, C<C<char>>{c}, [](const auto& r1, const auto& r2) { return ranges::equal(r1, r2); }));\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    template <ranges::input_range R, template <class...> class C>\r\n    static constexpr bool test_sequence() {\r\n        // validate from_range construction and deduction guides\r\n        {\r\n            std::same_as<C<char>> auto c0 = ranges::to<C<char>>(R{meow});\r\n            assert(ranges::equal(c0, meow));\r\n        }\r\n        {\r\n            std::same_as<C<char>> auto c1 = ranges::to<C>(R{meow});\r\n            assert(ranges::equal(c1, meow));\r\n        }\r\n        {\r\n            std::same_as<C<char>> auto c2 = R{meow} | ranges::to<C<char>>();\r\n            assert(ranges::equal(c2, meow));\r\n        }\r\n        {\r\n            std::same_as<C<char>> auto c3 = R{meow} | ranges::to<C>();\r\n            assert(ranges::equal(c3, meow));\r\n        }\r\n\r\n        // validate from_range construction and deduction guides with an extra argument\r\n        using Alloc = myalloc<char>;\r\n        using T     = deduce_container<C, char, Alloc>;\r\n\r\n        {\r\n            std::same_as<T> auto c4 = ranges::to<T>(R{meow}, Alloc{13});\r\n            assert(c4.get_allocator().state == 13);\r\n            assert(ranges::equal(c4, meow));\r\n        }\r\n        {\r\n            std::same_as<T> auto c5 = ranges::to<C>(R{meow}, Alloc{13});\r\n            assert(c5.get_allocator().state == 13);\r\n            assert(ranges::equal(c5, meow));\r\n        }\r\n        {\r\n            std::same_as<T> auto c6 = R{meow} | ranges::to<T>(Alloc{13});\r\n            assert(c6.get_allocator().state == 13);\r\n            assert(ranges::equal(c6, meow));\r\n        }\r\n        {\r\n            std::same_as<T> auto c7 = R{meow} | ranges::to<C>(Alloc{13});\r\n            assert(c7.get_allocator().state == 13);\r\n            assert(ranges::equal(c7, meow));\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_sequence<R, std::basic_string>();\r\n        test_sequence<R, std::deque>();\r\n        test_sequence<R, std::forward_list>();\r\n        test_sequence<R, std::list>();\r\n        test_sequence<R, std::vector>();\r\n\r\n        static_assert(test_sequence<R, std::basic_string>());\r\n        static_assert(test_sequence<R, std::vector>());\r\n    }\r\n};\r\n\r\nint main() {\r\n    test_in<sequence_instantiator, const char>();\r\n\r\n    sequence_instantiator::test_copy_move<std::basic_string>();\r\n    sequence_instantiator::test_copy_move<std::deque>();\r\n    sequence_instantiator::test_copy_move<std::forward_list>();\r\n    sequence_instantiator::test_copy_move<std::list>();\r\n    sequence_instantiator::test_copy_move<std::vector>();\r\n    static_assert(sequence_instantiator::test_copy_move<std::basic_string>());\r\n    static_assert(sequence_instantiator::test_copy_move<std::vector>());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_ranges_to_settish/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_ranges_to_settish/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <flat_set>\r\n#include <functional>\r\n#include <memory>\r\n#include <ranges>\r\n#include <set>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\ntemplate <class T>\r\nstruct myalloc {\r\n    using value_type = T;\r\n\r\n    int state = 42;\r\n\r\n    myalloc() = default;\r\n    constexpr explicit myalloc(int i) noexcept : state{i} {}\r\n    template <class U>\r\n    constexpr myalloc(const myalloc<U>& that) noexcept : state{that.state} {}\r\n\r\n    [[nodiscard]] constexpr T* allocate(std::size_t n) const {\r\n        return std::allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    constexpr void deallocate(T* const p, const std::size_t n) const noexcept {\r\n        std::allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class U>\r\n    constexpr bool operator==(const myalloc<U>& that) const noexcept {\r\n        return state == that.state;\r\n    }\r\n};\r\n\r\nstruct settish_instantiator {\r\n    static constexpr int some_ints[]   = {0, 1, 1, 1, 2, 3, 4, 5, 5, 6, 7};\r\n    static constexpr int unique_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\n    enum class is_multi : bool { no, yes };\r\n\r\n    template <template <class...> class C>\r\n    struct deduce_container_impl; // not defined\r\n    template <>\r\n    struct deduce_container_impl<std::set> {\r\n        template <class Key, class... Args>\r\n        using apply = std::set<Key, std::less<Key>, Args...>;\r\n    };\r\n    template <>\r\n    struct deduce_container_impl<std::multiset> {\r\n        template <class Key, class... Args>\r\n        using apply = std::multiset<Key, std::less<Key>, Args...>;\r\n    };\r\n    template <>\r\n    struct deduce_container_impl<std::unordered_set> {\r\n        template <class Key, class... Args>\r\n        using apply = std::unordered_set<Key, std::hash<Key>, std::equal_to<Key>, Args...>;\r\n    };\r\n    template <>\r\n    struct deduce_container_impl<std::unordered_multiset> {\r\n        template <class Key, class... Args>\r\n        using apply = std::unordered_multiset<Key, std::hash<Key>, std::equal_to<Key>, Args...>;\r\n    };\r\n    template <>\r\n    struct deduce_container_impl<std::flat_set> {\r\n        template <class Key, class... Args>\r\n        using apply = std::flat_set<Key, std::less<Key>,\r\n            std::vector<Key, typename std::allocator_traits<Args>::template rebind_alloc<Key>...>>;\r\n    };\r\n    template <>\r\n    struct deduce_container_impl<std::flat_multiset> {\r\n        template <class Key, class... Args>\r\n        using apply = std::flat_multiset<Key, std::less<Key>,\r\n            std::vector<Key, typename std::allocator_traits<Args>::template rebind_alloc<Key>...>>;\r\n    };\r\n\r\n    template <template <class...> class C, class Key, class... Args>\r\n    using deduce_container = deduce_container_impl<C>::template apply<Key, Args...>;\r\n\r\n    template <template <class...> class C>\r\n    static void test_copy_move() {\r\n        using Container = C<int>;\r\n        const auto c    = ranges::to<Container>(some_ints);\r\n\r\n        // validate the \"direct\" construction path with some copies and moves\r\n        {\r\n            std::same_as<Container> auto c0 = ranges::to<Container>(ranges::to<Container>(some_ints));\r\n            assert(c0 == c);\r\n        }\r\n        {\r\n            std::same_as<Container> auto c1 = ranges::to<Container>(c);\r\n            assert(c1 == c);\r\n        }\r\n        {\r\n            std::same_as<Container> auto c2 = ranges::to<C>(ranges::to<Container>(some_ints));\r\n            assert(c2 == c);\r\n        }\r\n        {\r\n            std::same_as<Container> auto c3 = ranges::to<C>(c);\r\n            assert(c3 == c);\r\n        }\r\n        {\r\n            std::same_as<Container> auto c4 = ranges::to<Container>(some_ints) | ranges::to<Container>();\r\n            assert(c4 == c);\r\n        }\r\n        {\r\n            std::same_as<Container> auto c5 = c | ranges::to<Container>();\r\n            assert(c5 == c);\r\n        }\r\n        {\r\n            std::same_as<Container> auto c6 = ranges::to<Container>(some_ints) | ranges::to<C>();\r\n            assert(c6 == c);\r\n        }\r\n        {\r\n            std::same_as<Container> auto c7 = c | ranges::to<C>();\r\n            assert(c7 == c);\r\n        }\r\n    }\r\n\r\n    template <ranges::input_range R, template <class...> class C, is_multi Multi>\r\n    static void test_settish() {\r\n        auto& expected = []() -> auto& {\r\n            if constexpr (Multi == is_multi::yes) {\r\n                return some_ints;\r\n            } else {\r\n                return unique_ints;\r\n            }\r\n        }();\r\n\r\n        using Container = C<int>;\r\n        {\r\n            std::same_as<Container> auto c0 = ranges::to<Container>(R{some_ints});\r\n            assert(ranges::is_permutation(c0, expected));\r\n        }\r\n        {\r\n            std::same_as<Container> auto c1 = ranges::to<C>(R{some_ints});\r\n            assert(ranges::is_permutation(c1, expected));\r\n        }\r\n        {\r\n            std::same_as<Container> auto c2 = R{some_ints} | ranges::to<Container>();\r\n            assert(ranges::is_permutation(c2, expected));\r\n        }\r\n        {\r\n            std::same_as<Container> auto c3 = R{some_ints} | ranges::to<C>();\r\n            assert(ranges::is_permutation(c3, expected));\r\n        }\r\n\r\n        using Alloc = myalloc<int>;\r\n        using T     = deduce_container<C, int, Alloc>;\r\n        constexpr bool is_flat =\r\n            std::_Is_specialization_v<T, std::flat_set> || std::_Is_specialization_v<T, std::flat_multiset>;\r\n\r\n        {\r\n            std::same_as<T> auto c4 = ranges::to<T>(R{some_ints}, Alloc{13});\r\n            assert(ranges::is_permutation(c4, expected));\r\n\r\n            if constexpr (is_flat) {\r\n                assert(std::move(c4).extract().get_allocator().state == 13);\r\n            } else {\r\n                assert(c4.get_allocator().state == 13);\r\n            }\r\n        }\r\n        {\r\n            std::same_as<T> auto c5 = ranges::to<C>(R{some_ints}, Alloc{13});\r\n            assert(ranges::is_permutation(c5, expected));\r\n\r\n            if constexpr (is_flat) {\r\n                assert(std::move(c5).extract().get_allocator().state == 13);\r\n            } else {\r\n                assert(c5.get_allocator().state == 13);\r\n            }\r\n        }\r\n        {\r\n            std::same_as<T> auto c6 = R{some_ints} | ranges::to<T>(Alloc{13});\r\n            assert(ranges::is_permutation(c6, expected));\r\n\r\n            if constexpr (is_flat) {\r\n                assert(std::move(c6).extract().get_allocator().state == 13);\r\n            } else {\r\n                assert(c6.get_allocator().state == 13);\r\n            }\r\n        }\r\n        {\r\n            std::same_as<T> auto c7 = R{some_ints} | ranges::to<C>(Alloc{13});\r\n            assert(ranges::is_permutation(c7, expected));\r\n\r\n            if constexpr (is_flat) {\r\n                assert(std::move(c7).extract().get_allocator().state == 13);\r\n            } else {\r\n                assert(c7.get_allocator().state == 13);\r\n            }\r\n        }\r\n    }\r\n\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_settish<R, std::set, is_multi::no>();\r\n        test_settish<R, std::multiset, is_multi::yes>();\r\n        test_settish<R, std::unordered_set, is_multi::no>();\r\n        test_settish<R, std::unordered_multiset, is_multi::yes>();\r\n        test_settish<R, std::flat_set, is_multi::no>();\r\n        test_settish<R, std::flat_multiset, is_multi::yes>();\r\n    }\r\n};\r\n\r\nint main() {\r\n    test_in<settish_instantiator, const int>();\r\n    settish_instantiator::test_copy_move<std::set>();\r\n    settish_instantiator::test_copy_move<std::multiset>();\r\n    settish_instantiator::test_copy_move<std::unordered_set>();\r\n    settish_instantiator::test_copy_move<std::unordered_multiset>();\r\n    settish_instantiator::test_copy_move<std::flat_set>();\r\n    settish_instantiator::test_copy_move<std::flat_multiset>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_set_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_set_from_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <set>\r\n#include <span>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr int expected_vals[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_set(Rng&& rng) {\r\n    if constexpr (is_reference_v<ranges::range_reference_t<Rng>>) {\r\n        set<int> m{from_range, forward<Rng>(rng)};\r\n        assert(ranges::equal(m, expected_vals));\r\n    }\r\n}\r\n\r\nstatic constexpr int some_ints[] = {4, 2, 3, 4, 0, 5, 4, 6, 7, 1};\r\n\r\nstruct set_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_set(R{some_ints});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>}, test::ProxyRef::no, test::CanView::yes,\r\n    test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const int> s{some_ints};\r\n    test_set(s);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_set(move_only_view<input_iterator_tag, test::Common::no>{some_ints});\r\n    test_set(move_only_view<forward_iterator_tag, test::Common::no>{some_ints});\r\n    test_set(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints});\r\n    test_set(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints});\r\n    test_set(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints});\r\n    test_set(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints});\r\n    test_set(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints});\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_set(some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_set(vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_set(lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<set_instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_set_insert_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_set_insert_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <set>\r\n#include <span>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr int expected_vals[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_set(Rng&& rng) {\r\n    if constexpr (is_reference_v<ranges::range_reference_t<Rng>>) {\r\n        set<int> m;\r\n        m.insert_range(forward<Rng>(rng));\r\n        assert(ranges::equal(m, expected_vals));\r\n    }\r\n}\r\n\r\nstatic constexpr int some_ints[] = {4, 2, 3, 4, 0, 5, 4, 6, 7, 1};\r\n\r\nstruct set_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_set(R{some_ints});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>}, test::ProxyRef::no, test::CanView::yes,\r\n    test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const int> s{some_ints};\r\n    test_set(s);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_set(move_only_view<input_iterator_tag, test::Common::no>{some_ints});\r\n    test_set(move_only_view<forward_iterator_tag, test::Common::no>{some_ints});\r\n    test_set(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints});\r\n    test_set(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints});\r\n    test_set(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints});\r\n    test_set(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints});\r\n    test_set(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints});\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_set(some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_set(vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_set(lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<set_instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_stack_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_stack_from_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <new>\r\n#include <ranges>\r\n#include <span>\r\n#include <stack>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nstruct accessible_adaptor : T {\r\n    using T::T;\r\n\r\n    auto& get_container() {\r\n        return this->c;\r\n    }\r\n    auto& get_container() const {\r\n        return this->c;\r\n    }\r\n};\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\ntemplate <ranges::input_range R, class... Args>\r\nvoid test_stack(R&& r, Args&&... args) {\r\n    accessible_adaptor<stack<int>> s{from_range, r, forward<Args>(args)...};\r\n    assert(ranges::equal(s.get_container(), some_ints));\r\n}\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_stack(R{some_ints});\r\n        test_stack(R{some_ints}, allocator<int>{});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nint main() {\r\n    // Validate views\r\n    { // copyable views\r\n        constexpr span<const int> s{some_ints};\r\n        test_stack(s);\r\n    }\r\n\r\n    { // move-only views\r\n        test_stack(move_only_view<input_iterator_tag, test::Common::no>{some_ints});\r\n        test_stack(move_only_view<forward_iterator_tag, test::Common::no>{some_ints});\r\n        test_stack(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints});\r\n        test_stack(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints});\r\n        test_stack(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints});\r\n        test_stack(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints});\r\n        test_stack(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints});\r\n    }\r\n\r\n    // Validate non-views\r\n    test_stack(some_ints); // C array\r\n\r\n    { // lvalue vector\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_stack(vec);\r\n    }\r\n\r\n    { // lvalue forward_list\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_stack(lst);\r\n    }\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_stack_push_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_stack_push_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <stack>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nstruct accessible_adaptor : T {\r\n    using T::T;\r\n\r\n    auto& get_container() {\r\n        return this->c;\r\n    }\r\n    auto& get_container() const {\r\n        return this->c;\r\n    }\r\n};\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nvoid test_stack(const size_t presize, Rng&& rng, const int (&expected)[N]) {\r\n    accessible_adaptor<stack<int>> d{deque<int>(presize, -1)};\r\n\r\n    d.push_range(forward<Rng>(rng));\r\n    const auto count      = static_cast<ptrdiff_t>(presize);\r\n    const auto& container = d.get_container();\r\n    assert(ranges::count(container | views::take(count), -1) == count);\r\n    assert(ranges::equal(container | views::drop(count), expected));\r\n}\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nvoid test_stack(const int (&expected)[N]) {\r\n    test_stack(0, Rng{expected}, expected);\r\n    test_stack(2, Rng{expected}, expected);\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_stack<R>(some_ints);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_view() {\r\n    test_stack<span<const int>>(some_ints);\r\n}\r\n\r\nvoid test_move_only_view() {\r\n    test_stack<move_only_view<input_iterator_tag, test::Common::no>>(some_ints);\r\n    test_stack<move_only_view<forward_iterator_tag, test::Common::no>>(some_ints);\r\n    test_stack<move_only_view<forward_iterator_tag, test::Common::yes>>(some_ints);\r\n    test_stack<move_only_view<bidirectional_iterator_tag, test::Common::no>>(some_ints);\r\n    test_stack<move_only_view<bidirectional_iterator_tag, test::Common::yes>>(some_ints);\r\n    test_stack<move_only_view<random_access_iterator_tag, test::Common::no>>(some_ints);\r\n    test_stack<move_only_view<random_access_iterator_tag, test::Common::yes>>(some_ints);\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_stack(0, some_ints, some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(from_range, some_ints);\r\n    test_stack(0, vec, some_ints);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_stack(0, lst, some_ints);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_view();\r\n    test_move_only_view();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_string_append_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_string_append_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, class T, size_t N>\r\nconstexpr bool test_string(const size_t capacity, const size_t presize, Rng&& rng, const T (&expected)[N]) {\r\n    // We need to test both reallocating and non-reallocating code paths,\r\n    // so we accept distinct capacity and size values for the initial container.\r\n    basic_string<T> str;\r\n    str.reserve(capacity);\r\n    str.resize(presize, T{'x'});\r\n\r\n    str.append_range(forward<Rng>(rng));\r\n    const auto length = static_cast<int>(presize);\r\n    assert(ranges::count(str | views::take(length), T{'x'}) == length);\r\n    assert(ranges::equal(str | views::drop(length), expected));\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <ranges::input_range Rng, class T, size_t N>\r\nconstexpr bool test_string(const T (&expected)[N]) {\r\n    test_string(0, 0, Rng{expected}, expected);\r\n    test_string(ranges::size(expected) + 2, 2, Rng{expected}, expected);\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr char some_chars[] = \"Hello, world!\";\r\n\r\nstruct string_instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        test_string<R>(some_chars);\r\n        static_assert(test_string<R>(some_chars));\r\n    }\r\n};\r\n\r\nstatic constexpr wchar_t some_wchars[] = L\"Hello, world!\";\r\n\r\nstruct wstring_instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        test_string<R>(some_wchars);\r\n        static_assert(test_string<R>(some_wchars));\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const char, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nconstexpr bool test_copyable_view() {\r\n    test_string<span<const char>>(some_chars);\r\n    test_string<span<const wchar_t>>(some_wchars);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_move_only_view() {\r\n    test_string<move_only_view<input_iterator_tag, test::Common::no>>(some_chars);\r\n    test_string<move_only_view<forward_iterator_tag, test::Common::no>>(some_chars);\r\n    test_string<move_only_view<forward_iterator_tag, test::Common::yes>>(some_chars);\r\n    test_string<move_only_view<bidirectional_iterator_tag, test::Common::no>>(some_chars);\r\n    test_string<move_only_view<bidirectional_iterator_tag, test::Common::yes>>(some_chars);\r\n    test_string<move_only_view<random_access_iterator_tag, test::Common::no>>(some_chars);\r\n    test_string<move_only_view<random_access_iterator_tag, test::Common::yes>>(some_chars);\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_c_array() {\r\n    test_string(0, 0, some_chars, some_chars);\r\n    test_string(0, 0, some_wchars, some_wchars);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_lvalue_vector() {\r\n    {\r\n        vector vec(from_range, some_chars);\r\n        test_string(0, 0, vec, some_chars);\r\n    }\r\n    {\r\n        vector vec(from_range, some_wchars);\r\n        test_string(0, 0, vec, some_wchars);\r\n    }\r\n    return true;\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    {\r\n        forward_list lst(ranges::begin(some_chars), ranges::end(some_chars));\r\n        test_string(0, 0, lst, some_chars);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(some_wchars), ranges::end(some_wchars));\r\n        test_string(0, 0, lst, some_wchars);\r\n    }\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_view();\r\n    static_assert(test_copyable_view());\r\n    test_move_only_view();\r\n    static_assert(test_move_only_view());\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    static_assert(test_c_array());\r\n    test_lvalue_vector();\r\n    static_assert(test_lvalue_vector());\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<string_instantiator, const char>();\r\n    test_in<wstring_instantiator, const wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_string_assign_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_string_assign_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, class T, size_t N>\r\nconstexpr bool test_string(const size_t capacity, const size_t presize, Rng&& rng, const T (&expected)[N]) {\r\n    basic_string<T> str;\r\n    str.reserve(capacity);\r\n    str.resize(presize, T{'x'});\r\n\r\n    str.assign_range(forward<Rng>(rng));\r\n    assert(ranges::equal(str, expected));\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <ranges::input_range Rng, class T, size_t N>\r\nconstexpr bool test_string(const T (&expected)[N]) {\r\n    test_string(0, 0, Rng{expected}, expected);\r\n    test_string(ranges::size(expected) + 2, 2, Rng{expected}, expected);\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr char some_chars[] = \"Hello, world!\";\r\n\r\nstruct string_instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        test_string<R>(some_chars);\r\n        static_assert(test_string<R>(some_chars));\r\n    }\r\n};\r\n\r\nstatic constexpr wchar_t some_wchars[] = L\"Hello, world!\";\r\n\r\nstruct wstring_instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        test_string<R>(some_wchars);\r\n        static_assert(test_string<R>(some_wchars));\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const char, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nconstexpr bool test_copyable_view() {\r\n    test_string<span<const char>>(some_chars);\r\n    test_string<span<const wchar_t>>(some_wchars);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_move_only_view() {\r\n    test_string<move_only_view<input_iterator_tag, test::Common::no>>(some_chars);\r\n    test_string<move_only_view<forward_iterator_tag, test::Common::no>>(some_chars);\r\n    test_string<move_only_view<forward_iterator_tag, test::Common::yes>>(some_chars);\r\n    test_string<move_only_view<bidirectional_iterator_tag, test::Common::no>>(some_chars);\r\n    test_string<move_only_view<bidirectional_iterator_tag, test::Common::yes>>(some_chars);\r\n    test_string<move_only_view<random_access_iterator_tag, test::Common::no>>(some_chars);\r\n    test_string<move_only_view<random_access_iterator_tag, test::Common::yes>>(some_chars);\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_c_array() {\r\n    test_string(0, 0, some_chars, some_chars);\r\n    test_string(0, 0, some_wchars, some_wchars);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_lvalue_vector() {\r\n    {\r\n        vector vec(from_range, some_chars);\r\n        test_string(0, 0, vec, some_chars);\r\n    }\r\n    {\r\n        vector vec(from_range, some_wchars);\r\n        test_string(0, 0, vec, some_wchars);\r\n    }\r\n    return true;\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    {\r\n        forward_list lst(ranges::begin(some_chars), ranges::end(some_chars));\r\n        test_string(0, 0, lst, some_chars);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(some_wchars), ranges::end(some_wchars));\r\n        test_string(0, 0, lst, some_wchars);\r\n    }\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_view();\r\n    static_assert(test_copyable_view());\r\n    test_move_only_view();\r\n    static_assert(test_move_only_view());\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    static_assert(test_c_array());\r\n    test_lvalue_vector();\r\n    static_assert(test_lvalue_vector());\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<string_instantiator, const char>();\r\n    test_in<wstring_instantiator, const wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_string_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_string_from_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma warning(disable : 4365) // conversion from 'X' to 'Y', signed/unsigned mismatch\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nstruct c_string {\r\n    const T* ptr_ = nullptr;\r\n\r\n    struct sentinel {\r\n        constexpr bool operator==(const T* p) const {\r\n            return *p == 0;\r\n        }\r\n    };\r\n\r\n    constexpr const T* begin() const {\r\n        return ptr_;\r\n    }\r\n    constexpr sentinel end() const {\r\n        return {};\r\n    }\r\n};\r\n\r\ntemplate <ranges::input_range Rng, class T>\r\nconstexpr bool test_string(Rng&& rng, const T* expected) {\r\n    basic_string<T> str(from_range, forward<Rng>(rng));\r\n    assert(ranges::equal(str, c_string<T>{expected}));\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr char hw[]    = \"Hello, world!\";\r\nstatic constexpr auto span_hw = span{hw}.first<span{hw}.size() - 1>();\r\n\r\nstatic constexpr signed char hw_s[] = \"Hello, world!\";\r\nstatic constexpr auto span_hw_s     = span{hw_s}.first<span{hw_s}.size() - 1>();\r\n\r\nstatic constexpr unsigned char hw_u[] = \"Hello, world!\";\r\nstatic constexpr auto span_hw_u       = span{hw_u}.first<span{hw_u}.size() - 1>();\r\n\r\nstruct string_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_string(R{span_hw}, hw);\r\n        static_assert(test_string(R{span_hw}, hw));\r\n    }\r\n};\r\n\r\n#ifdef __cpp_char8_t\r\nstatic constexpr char8_t hw_u8[] = u8\"Hello, world!\";\r\nstatic constexpr auto span_hw_u8 = span{hw_u8}.first<span{hw_u8}.size() - 1>();\r\n\r\nstruct u8string_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_string(R{span_hw_u8}, hw_u8);\r\n        static_assert(test_string(R{span_hw_u8}, hw_u8));\r\n    }\r\n};\r\n#endif // defined(__cpp_char8_t)\r\n\r\nstatic constexpr char16_t hw_u16[] = u\"Hello, world!\";\r\nstatic constexpr auto span_hw_u16  = span{hw_u16}.first<span{hw_u16}.size() - 1>();\r\n\r\nstatic constexpr int_least16_t hw_u16s[]{\r\n    u'H', u'e', u'l', u'l', u'o', u',', u' ', u'w', u'o', u'r', u'l', u'd', u'!', u'\\0'};\r\nstatic constexpr auto span_hw_u16s = span{hw_u16s}.first<span{hw_u16s}.size() - 1>();\r\n\r\nstatic constexpr uint_least16_t hw_u16u[]{\r\n    u'H', u'e', u'l', u'l', u'o', u',', u' ', u'w', u'o', u'r', u'l', u'd', u'!', u'\\0'};\r\nstatic constexpr auto span_hw_u16u = span{hw_u16u}.first<span{hw_u16u}.size() - 1>();\r\n\r\nstruct u16string_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_string(R{span_hw_u16}, hw_u16);\r\n        static_assert(test_string(R{span_hw_u16}, hw_u16));\r\n    }\r\n};\r\n\r\nstatic constexpr char32_t hw_u32[] = U\"Hello, world!\";\r\nstatic constexpr auto span_hw_u32  = span{hw_u32}.first<span{hw_u32}.size() - 1>();\r\n\r\nstatic constexpr int_least32_t hw_u32s[]{\r\n    U'H', U'e', U'l', U'l', U'o', U',', U' ', U'w', U'o', U'r', U'l', U'd', U'!', U'\\0'};\r\nstatic constexpr auto span_hw_u32s = span{hw_u32s}.first<span{hw_u32s}.size() - 1>();\r\n\r\nstatic constexpr uint_least32_t hw_u32u[]{\r\n    U'H', U'e', U'l', U'l', U'o', U',', U' ', U'w', U'o', U'r', U'l', U'd', U'!', U'\\0'};\r\nstatic constexpr auto span_hw_u32u = span{hw_u32u}.first<span{hw_u32u}.size() - 1>();\r\n\r\nstatic constexpr long hw_slong[]{U'H', U'e', U'l', U'l', U'o', U',', U' ', U'w', U'o', U'r', U'l', U'd', U'!', U'\\0'};\r\nstatic constexpr auto span_hw_slong = span{hw_slong}.first<span{hw_slong}.size() - 1>();\r\n\r\nstatic constexpr unsigned long hw_ulong[]{\r\n    U'H', U'e', U'l', U'l', U'o', U',', U' ', U'w', U'o', U'r', U'l', U'd', U'!', U'\\0'};\r\nstatic constexpr auto span_hw_ulong = span{hw_ulong}.first<span{hw_ulong}.size() - 1>();\r\n\r\nstruct u32string_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_string(R{span_hw_u32}, hw_u32);\r\n        static_assert(test_string(R{span_hw_u32}, hw_u32));\r\n    }\r\n};\r\n\r\nusing swchar_t = make_signed_t<wchar_t>;\r\nusing uwchar_t = make_unsigned_t<wchar_t>;\r\n\r\nstatic constexpr wchar_t whw[] = L\"Hello, world!\";\r\nstatic constexpr auto span_whw = span{whw}.first<span{whw}.size() - 1>();\r\n\r\nstatic constexpr swchar_t whw_s[]{L'H', L'e', L'l', L'l', L'o', L',', L' ', L'w', L'o', L'r', L'l', L'd', L'!', L'\\0'};\r\nstatic constexpr auto span_whw_s = span{whw_s}.first<span{whw_s}.size() - 1>();\r\n\r\nstatic constexpr uwchar_t whw_u[]{L'H', L'e', L'l', L'l', L'o', L',', L' ', L'w', L'o', L'r', L'l', L'd', L'!', L'\\0'};\r\nstatic constexpr auto span_whw_u = span{whw_u}.first<span{whw_u}.size() - 1>();\r\n\r\nstruct wstring_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_string(R{span_whw}, whw);\r\n        static_assert(test_string(R{span_whw}, whw));\r\n    }\r\n};\r\n\r\ntemplate <class Category, class CharT, test::Common IsCommon,\r\n    bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const CharT, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nconstexpr bool test_copyable_views() {\r\n    test_string(span_hw, hw);\r\n    test_string(span_hw_s, hw);\r\n    test_string(span_hw_u, hw);\r\n#ifdef __cpp_char8_t\r\n    test_string(span_hw_u8, hw);\r\n\r\n    test_string(span_hw_u8, hw_u8);\r\n    test_string(span_hw, hw_u8);\r\n    test_string(span_hw_s, hw_u8);\r\n    test_string(span_hw_u, hw_u8);\r\n#endif // defined(__cpp_char8_t)\r\n\r\n    test_string(span_hw_u16, hw_u16);\r\n    test_string(span_hw_u16s, hw_u16);\r\n    test_string(span_hw_u16u, hw_u16);\r\n    test_string(span_whw, hw_u16);\r\n\r\n    test_string(span_hw_u32, hw_u32);\r\n    test_string(span_hw_u32s, hw_u32);\r\n    test_string(span_hw_u32u, hw_u32);\r\n    test_string(span_hw_slong, hw_u32);\r\n    test_string(span_hw_ulong, hw_u32);\r\n\r\n    test_string(span_whw, whw);\r\n    test_string(span_whw_s, whw);\r\n    test_string(span_whw_u, whw);\r\n    test_string(span_hw_u16, whw);\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_move_only_views() {\r\n    test_string(move_only_view<input_iterator_tag, char, test::Common::no>{span_hw}, hw);\r\n    test_string(move_only_view<forward_iterator_tag, char, test::Common::no>{span_hw}, hw);\r\n    test_string(move_only_view<forward_iterator_tag, char, test::Common::yes>{span_hw}, hw);\r\n    test_string(move_only_view<bidirectional_iterator_tag, char, test::Common::no>{span_hw}, hw);\r\n    test_string(move_only_view<bidirectional_iterator_tag, char, test::Common::yes>{span_hw}, hw);\r\n    test_string(move_only_view<random_access_iterator_tag, char, test::Common::no>{span_hw}, hw);\r\n    test_string(move_only_view<random_access_iterator_tag, char, test::Common::yes>{span_hw}, hw);\r\n\r\n    test_string(move_only_view<input_iterator_tag, wchar_t, test::Common::no>{span_whw}, whw);\r\n    test_string(move_only_view<forward_iterator_tag, wchar_t, test::Common::no>{span_whw}, whw);\r\n    test_string(move_only_view<forward_iterator_tag, wchar_t, test::Common::yes>{span_whw}, whw);\r\n    test_string(move_only_view<bidirectional_iterator_tag, wchar_t, test::Common::no>{span_whw}, whw);\r\n    test_string(move_only_view<bidirectional_iterator_tag, wchar_t, test::Common::yes>{span_whw}, whw);\r\n    test_string(move_only_view<random_access_iterator_tag, wchar_t, test::Common::no>{span_whw}, whw);\r\n    test_string(move_only_view<random_access_iterator_tag, wchar_t, test::Common::yes>{span_whw}, whw);\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr char simple_hw[]{'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!'};\r\nstatic constexpr signed char simple_hw_s[]{'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!'};\r\nstatic constexpr unsigned char simple_hw_u[]{'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!'};\r\n#ifdef __cpp_char8_t\r\nstatic constexpr char8_t simple_hw_u8[]{\r\n    u8'H', u8'e', u8'l', u8'l', u8'o', u8',', u8' ', u8'w', u8'o', u8'r', u8'l', u8'd', u8'!'};\r\n#endif // defined(__cpp_char8_t)\r\n\r\nstatic constexpr char16_t simple_hw_u16[]{u'H', u'e', u'l', u'l', u'o', u',', u' ', u'w', u'o', u'r', u'l', u'd', u'!'};\r\nstatic constexpr int_least16_t simple_hw_u16s[]{\r\n    u'H', u'e', u'l', u'l', u'o', u',', u' ', u'w', u'o', u'r', u'l', u'd', u'!'};\r\nstatic constexpr uint_least16_t simple_hw_u16u[]{\r\n    u'H', u'e', u'l', u'l', u'o', u',', u' ', u'w', u'o', u'r', u'l', u'd', u'!'};\r\n\r\nstatic constexpr char32_t simple_hw_u32[]{U'H', U'e', U'l', U'l', U'o', U',', U' ', U'w', U'o', U'r', U'l', U'd', U'!'};\r\nstatic constexpr int_least32_t simple_hw_u32s[]{\r\n    U'H', U'e', U'l', U'l', U'o', U',', U' ', U'w', U'o', U'r', U'l', U'd', U'!'};\r\nstatic constexpr uint_least32_t simple_hw_u32u[]{\r\n    U'H', U'e', U'l', U'l', U'o', U',', U' ', U'w', U'o', U'r', U'l', U'd', U'!'};\r\nstatic constexpr long simple_hw_slong[]{U'H', U'e', U'l', U'l', U'o', U',', U' ', U'w', U'o', U'r', U'l', U'd', U'!'};\r\nstatic constexpr unsigned long simple_hw_ulong[]{\r\n    U'H', U'e', U'l', U'l', U'o', U',', U' ', U'w', U'o', U'r', U'l', U'd', U'!'};\r\n\r\nstatic constexpr wchar_t simple_whw[]{L'H', L'e', L'l', L'l', L'o', L',', L' ', L'w', L'o', L'r', L'l', L'd', L'!'};\r\nstatic constexpr swchar_t simple_whw_s[]{L'H', L'e', L'l', L'l', L'o', L',', L' ', L'w', L'o', L'r', L'l', L'd', L'!'};\r\nstatic constexpr uwchar_t simple_whw_u[]{L'H', L'e', L'l', L'l', L'o', L',', L' ', L'w', L'o', L'r', L'l', L'd', L'!'};\r\n\r\nconstexpr bool test_c_array() {\r\n    test_string(simple_hw, hw);\r\n    test_string(simple_hw_s, hw);\r\n    test_string(simple_hw_u, hw);\r\n#ifdef __cpp_char8_t\r\n    test_string(simple_hw_u8, hw);\r\n\r\n    test_string(simple_hw_u8, hw_u8);\r\n    test_string(simple_hw, hw_u8);\r\n    test_string(simple_hw_s, hw_u8);\r\n    test_string(simple_hw_u, hw_u8);\r\n#endif // defined(__cpp_char8_t)\r\n\r\n    test_string(simple_hw_u16, hw_u16);\r\n    test_string(simple_hw_u16s, hw_u16);\r\n    test_string(simple_hw_u16u, hw_u16);\r\n    test_string(simple_whw, hw_u16);\r\n\r\n    test_string(simple_hw_u32, hw_u32);\r\n    test_string(simple_hw_u32s, hw_u32);\r\n    test_string(simple_hw_u32u, hw_u32);\r\n    test_string(simple_hw_slong, hw_u32);\r\n    test_string(simple_hw_ulong, hw_u32);\r\n\r\n    test_string(simple_whw, whw);\r\n    test_string(simple_whw_s, whw);\r\n    test_string(simple_whw_u, whw);\r\n    test_string(simple_hw_u16, whw);\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_std_array() {\r\n    test_string(to_array(simple_hw), hw);\r\n    test_string(to_array(simple_hw_s), hw);\r\n    test_string(to_array(simple_hw_u), hw);\r\n#ifdef __cpp_char8_t\r\n    test_string(to_array(simple_hw_u8), hw);\r\n\r\n    test_string(to_array(simple_hw_u8), hw_u8);\r\n    test_string(to_array(simple_hw), hw_u8);\r\n    test_string(to_array(simple_hw_s), hw_u8);\r\n    test_string(to_array(simple_hw_u), hw_u8);\r\n#endif // defined(__cpp_char8_t)\r\n\r\n    test_string(to_array(simple_hw_u16), hw_u16);\r\n    test_string(to_array(simple_hw_u16s), hw_u16);\r\n    test_string(to_array(simple_hw_u16u), hw_u16);\r\n    test_string(to_array(simple_whw), hw_u16);\r\n\r\n    test_string(to_array(simple_hw_u32), hw_u32);\r\n    test_string(to_array(simple_hw_u32s), hw_u32);\r\n    test_string(to_array(simple_hw_u32u), hw_u32);\r\n    test_string(to_array(simple_hw_slong), hw_u32);\r\n    test_string(to_array(simple_hw_ulong), hw_u32);\r\n\r\n    test_string(to_array(simple_whw), whw);\r\n    test_string(to_array(simple_whw_s), whw);\r\n    test_string(to_array(simple_whw_u), whw);\r\n    test_string(to_array(simple_hw_u16), whw);\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_lvalue_vector() {\r\n    constexpr auto test_lvalue_vector_helper = []<class Span, class CharT>(const Span& sp, const CharT* cstr) {\r\n        vector vec(sp.data(), sp.data() + sp.size());\r\n        test_string(vec, cstr);\r\n    };\r\n\r\n    test_lvalue_vector_helper(span_hw, hw);\r\n    test_lvalue_vector_helper(span_hw_s, hw);\r\n    test_lvalue_vector_helper(span_hw_u, hw);\r\n#ifdef __cpp_char8_t\r\n    test_lvalue_vector_helper(span_hw_u8, hw);\r\n\r\n    test_lvalue_vector_helper(span_hw_u8, hw_u8);\r\n    test_lvalue_vector_helper(span_hw, hw_u8);\r\n    test_lvalue_vector_helper(span_hw_s, hw_u8);\r\n    test_lvalue_vector_helper(span_hw_u, hw_u8);\r\n#endif // defined(__cpp_char8_t)\r\n\r\n    test_lvalue_vector_helper(span_hw_u16, hw_u16);\r\n    test_lvalue_vector_helper(span_hw_u16s, hw_u16);\r\n    test_lvalue_vector_helper(span_hw_u16u, hw_u16);\r\n    test_lvalue_vector_helper(span_whw, hw_u16);\r\n\r\n    test_lvalue_vector_helper(span_hw_u32, hw_u32);\r\n    test_lvalue_vector_helper(span_hw_u32s, hw_u32);\r\n    test_lvalue_vector_helper(span_hw_u32u, hw_u32);\r\n    test_lvalue_vector_helper(span_hw_slong, hw_u32);\r\n    test_lvalue_vector_helper(span_hw_ulong, hw_u32);\r\n\r\n    test_lvalue_vector_helper(span_whw, whw);\r\n    test_lvalue_vector_helper(span_whw_s, whw);\r\n    test_lvalue_vector_helper(span_whw_u, whw);\r\n    test_lvalue_vector_helper(span_hw_u16, whw);\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    {\r\n        forward_list lst(span_hw.data(), span_hw.data() + span_hw.size());\r\n        test_string(lst, hw);\r\n    }\r\n#ifdef __cpp_char8_t\r\n    {\r\n        forward_list lst(span_hw_u8.data(), span_hw_u8.data() + span_hw_u8.size());\r\n        test_string(lst, hw_u8);\r\n    }\r\n#endif // defined(__cpp_char8_t)\r\n    {\r\n        forward_list lst(span_hw_u16.data(), span_hw_u16.data() + span_hw_u16.size());\r\n        test_string(lst, hw_u16);\r\n    }\r\n    {\r\n        forward_list lst(span_hw_u32.data(), span_hw_u32.data() + span_hw_u32.size());\r\n        test_string(lst, hw_u32);\r\n    }\r\n    {\r\n        forward_list lst(span_whw.data(), span_whw.data() + span_whw.size());\r\n        test_string(lst, whw);\r\n    }\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    static_assert(test_copyable_views());\r\n\r\n    test_move_only_views();\r\n    static_assert(test_move_only_views());\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    static_assert(test_c_array());\r\n\r\n    test_std_array();\r\n    static_assert(test_std_array());\r\n\r\n    test_lvalue_vector();\r\n    static_assert(test_lvalue_vector());\r\n\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<string_instantiator, const char>();\r\n    test_in<wstring_instantiator, const wchar_t>();\r\n\r\n#ifdef __cpp_char8_t\r\n    test_contiguous<u8string_instantiator, const char8_t>();\r\n#endif // defined(__cpp_char8_t)\r\n    test_contiguous<u16string_instantiator, const char16_t>();\r\n    test_contiguous<u32string_instantiator, const char32_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_string_insert_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_string_insert_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, class T, size_t N>\r\nconstexpr bool test_string(const size_t presize, const int offset, Rng&& rng, const T (&expected)[N]) {\r\n    assert(static_cast<size_t>(offset) <= presize);\r\n    basic_string<T> str(presize, T{'x'});\r\n    const same_as<typename basic_string<T>::iterator> auto result =\r\n        str.insert_range(str.begin() + offset, forward<Rng>(rng));\r\n    assert(result == str.begin() + offset);\r\n    const auto n = static_cast<int>(ranges::size(expected));\r\n    assert(ranges::count(str | views::take(offset), T{'x'}) == offset);\r\n    assert(ranges::equal(str | views::drop(offset) | views::take(n), expected));\r\n    assert(ranges::count(str | views::drop(offset + n), T{'x'}) == static_cast<int>(presize - offset));\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr char hw[]     = \"Hello, World!\";\r\nstatic constexpr wchar_t whw[] = L\"Hello, World!\";\r\n\r\nstruct string_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        constexpr auto& text = []() -> auto& {\r\n            if constexpr (is_same_v<ranges::range_value_t<R>, char>) {\r\n                return hw;\r\n            } else {\r\n                return whw;\r\n            }\r\n        }();\r\n\r\n        test_string(0, 0, R{text}, text);\r\n        static_assert(test_string(0, 0, R{text}, text));\r\n\r\n        test_string(5, 0, R{text}, text);\r\n        static_assert(test_string(5, 0, R{text}, text));\r\n\r\n        test_string(5, 2, R{text}, text);\r\n        static_assert(test_string(5, 2, R{text}, text));\r\n\r\n        test_string(5, 5, R{text}, text);\r\n        static_assert(test_string(5, 5, R{text}, text));\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const char, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nconstexpr bool test_copyable_views() {\r\n    test_string(0, 0, span<const char>{hw}, hw);\r\n    test_string(0, 0, span<const wchar_t>{whw}, whw);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_move_only_views() {\r\n    test_string(0, 0, move_only_view<input_iterator_tag, test::Common::no>{hw}, hw);\r\n    test_string(0, 0, move_only_view<forward_iterator_tag, test::Common::no>{hw}, hw);\r\n    test_string(0, 0, move_only_view<forward_iterator_tag, test::Common::yes>{hw}, hw);\r\n    test_string(0, 0, move_only_view<bidirectional_iterator_tag, test::Common::no>{hw}, hw);\r\n    test_string(0, 0, move_only_view<bidirectional_iterator_tag, test::Common::yes>{hw}, hw);\r\n    test_string(0, 0, move_only_view<random_access_iterator_tag, test::Common::no>{hw}, hw);\r\n    test_string(0, 0, move_only_view<random_access_iterator_tag, test::Common::yes>{hw}, hw);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_c_array() {\r\n    test_string(0, 0, hw, hw);\r\n    test_string(0, 0, whw, whw);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_lvalue_vector() {\r\n    {\r\n        vector vec(ranges::begin(hw), ranges::end(hw));\r\n        test_string(0, 0, vec, hw);\r\n    }\r\n    {\r\n        vector vec(ranges::begin(whw), ranges::end(whw));\r\n        test_string(0, 0, vec, whw);\r\n    }\r\n    return true;\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    {\r\n        forward_list lst(ranges::begin(hw), ranges::end(hw));\r\n        test_string(0, 0, lst, hw);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(whw), ranges::end(whw));\r\n        test_string(0, 0, lst, whw);\r\n    }\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    static_assert(test_copyable_views());\r\n    test_move_only_views();\r\n    static_assert(test_move_only_views());\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    static_assert(test_c_array());\r\n    test_lvalue_vector();\r\n    static_assert(test_lvalue_vector());\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<string_instantiator, const char>();\r\n    test_in<string_instantiator, const wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_string_replace_with_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_string_replace_with_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, class T, size_t N>\r\nconstexpr bool test_string(\r\n    const size_t presize, const int offset, const int length, Rng&& rng, const T (&expected)[N]) {\r\n    assert(static_cast<size_t>(offset) + length <= presize);\r\n    basic_string<T> str(from_range, views::iota(T{'a'}, T('a' + presize)));\r\n    same_as<basic_string<T>> auto& result =\r\n        str.replace_with_range(str.begin() + offset, str.begin() + offset + length, forward<Rng>(rng));\r\n    assert(&result == &str);\r\n\r\n    const auto n = static_cast<int>(ranges::size(expected));\r\n    assert(ranges::equal(str | views::take(offset), views::iota(T{'a'}, T('a' + offset))));\r\n    assert(ranges::equal(str | views::drop(offset) | views::take(n), expected));\r\n    assert(ranges::equal(str | views::drop(offset + n), views::iota(T('a' + offset + length), T('a' + presize))));\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr char hw[]     = \"Hello, World!\";\r\nstatic constexpr wchar_t whw[] = L\"Hello, World!\";\r\n\r\nstruct string_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        constexpr auto& text = []() -> auto& {\r\n            if constexpr (is_same_v<ranges::range_value_t<R>, char>) {\r\n                return hw;\r\n            } else {\r\n                return whw;\r\n            }\r\n        }();\r\n\r\n        // insert into empty\r\n        test_string(0, 0, 0, R{text}, text);\r\n        static_assert(test_string(0, 0, 0, R{text}, text));\r\n\r\n        // prepend\r\n        test_string(5, 0, 0, R{text}, text);\r\n        static_assert(test_string(5, 0, 0, R{text}, text));\r\n\r\n        // expansion\r\n        test_string(5, 2, 1, R{text}, text);\r\n        static_assert(test_string(5, 2, 1, R{text}, text));\r\n\r\n        // append\r\n        test_string(5, 5, 0, R{text}, text);\r\n        static_assert(test_string(5, 5, 0, R{text}, text));\r\n\r\n        // insert into non-empty\r\n        test_string(26, 5, 0, R{text}, text);\r\n        static_assert(test_string(26, 5, 0, R{text}, text));\r\n\r\n        // contraction\r\n        test_string(26, 5, 20, R{text}, text);\r\n        static_assert(test_string(26, 5, 20, R{text}, text));\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const char, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nconstexpr bool test_copyable_views() {\r\n    test_string(10, 4, 6, span<const char>{hw}, hw);\r\n    test_string(10, 4, 6, span<const wchar_t>{whw}, whw);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_move_only_views() {\r\n    test_string(4, 0, 1, move_only_view<input_iterator_tag, test::Common::no>{hw}, hw);\r\n    test_string(4, 0, 1, move_only_view<forward_iterator_tag, test::Common::no>{hw}, hw);\r\n    test_string(4, 0, 1, move_only_view<forward_iterator_tag, test::Common::yes>{hw}, hw);\r\n    test_string(4, 0, 1, move_only_view<bidirectional_iterator_tag, test::Common::no>{hw}, hw);\r\n    test_string(4, 0, 1, move_only_view<bidirectional_iterator_tag, test::Common::yes>{hw}, hw);\r\n    test_string(4, 0, 1, move_only_view<random_access_iterator_tag, test::Common::no>{hw}, hw);\r\n    test_string(4, 0, 1, move_only_view<random_access_iterator_tag, test::Common::yes>{hw}, hw);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_c_array() {\r\n    test_string(2, 1, 1, hw, hw);\r\n    test_string(2, 1, 1, whw, whw);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_lvalue_vector() {\r\n    {\r\n        vector vec(ranges::begin(hw), ranges::end(hw));\r\n        test_string(0, 0, 0, vec, hw);\r\n    }\r\n    {\r\n        vector vec(ranges::begin(whw), ranges::end(whw));\r\n        test_string(1, 0, 0, vec, whw);\r\n    }\r\n    return true;\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    {\r\n        forward_list lst(ranges::begin(hw), ranges::end(hw));\r\n        test_string(20, 1, 18, lst, hw);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(whw), ranges::end(whw));\r\n        test_string(20, 1, 18, lst, whw);\r\n    }\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    static_assert(test_copyable_views());\r\n    test_move_only_views();\r\n    static_assert(test_move_only_views());\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    static_assert(test_c_array());\r\n    test_lvalue_vector();\r\n    static_assert(test_lvalue_vector());\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<string_instantiator, const char>();\r\n    test_in<string_instantiator, const wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_unordered_map_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_unordered_map_from_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr pair<int, int> expected_vals[] = {\r\n    {0, 20}, {1, 19}, {2, 18}, {3, 17}, {4, 16}, {5, 13}, {6, 12}, {7, 11}};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_unordered_map(Rng&& rng) {\r\n    if constexpr (is_reference_v<ranges::range_reference_t<Rng>>) {\r\n        unordered_map<int, int> m{from_range, forward<Rng>(rng)};\r\n        unordered_map<int, int> e{begin(expected_vals), end(expected_vals)};\r\n        assert(m == e);\r\n    }\r\n}\r\n\r\nstatic constexpr pair<int, int> some_pairs[] = {\r\n    {4, 16}, {2, 18}, {3, 17}, {0, 20}, {4, 15}, {5, 13}, {6, 12}, {4, 14}, {5, 13}, {7, 11}, {1, 19}};\r\n\r\nstruct unordered_map_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_unordered_map(R{some_pairs});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const pair<int, int>, test::Sized{is_random},\r\n    test::CanDifference{is_random}, IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef::no, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const pair<int, int>> s{some_pairs};\r\n    test_unordered_map(s);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_unordered_map(move_only_view<input_iterator_tag, test::Common::no>{some_pairs});\r\n    test_unordered_map(move_only_view<forward_iterator_tag, test::Common::no>{some_pairs});\r\n    test_unordered_map(move_only_view<forward_iterator_tag, test::Common::yes>{some_pairs});\r\n    test_unordered_map(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_pairs});\r\n    test_unordered_map(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_pairs});\r\n    test_unordered_map(move_only_view<random_access_iterator_tag, test::Common::no>{some_pairs});\r\n    test_unordered_map(move_only_view<random_access_iterator_tag, test::Common::yes>{some_pairs});\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_unordered_map(some_pairs);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n    test_unordered_map(vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n    test_unordered_map(lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<unordered_map_instantiator, const pair<int, int>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_unordered_map_insert_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_unordered_map_insert_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr pair<int, int> expected_vals[] = {\r\n    {0, 20}, {1, 19}, {2, 18}, {3, 17}, {4, 16}, {5, 13}, {6, 12}, {7, 11}};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_unordered_map(Rng&& rng) {\r\n    if constexpr (is_reference_v<ranges::range_reference_t<Rng>>) {\r\n        unordered_map<int, int> m;\r\n        m.insert_range(forward<Rng>(rng));\r\n        unordered_map<int, int> e{begin(expected_vals), end(expected_vals)};\r\n        assert(m == e);\r\n    }\r\n}\r\n\r\nstatic constexpr pair<int, int> some_pairs[] = {\r\n    {4, 16}, {2, 18}, {3, 17}, {0, 20}, {4, 15}, {5, 13}, {6, 12}, {4, 14}, {5, 13}, {7, 11}, {1, 19}};\r\n\r\nstruct unordered_map_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_unordered_map(R{some_pairs});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const pair<int, int>, test::Sized{is_random},\r\n    test::CanDifference{is_random}, IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef::no, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const pair<int, int>> s{some_pairs};\r\n    test_unordered_map(s);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_unordered_map(move_only_view<input_iterator_tag, test::Common::no>{some_pairs});\r\n    test_unordered_map(move_only_view<forward_iterator_tag, test::Common::no>{some_pairs});\r\n    test_unordered_map(move_only_view<forward_iterator_tag, test::Common::yes>{some_pairs});\r\n    test_unordered_map(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_pairs});\r\n    test_unordered_map(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_pairs});\r\n    test_unordered_map(move_only_view<random_access_iterator_tag, test::Common::no>{some_pairs});\r\n    test_unordered_map(move_only_view<random_access_iterator_tag, test::Common::yes>{some_pairs});\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_unordered_map(some_pairs);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n    test_unordered_map(vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n    test_unordered_map(lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<unordered_map_instantiator, const pair<int, int>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_unordered_multimap_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_unordered_multimap_from_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr pair<int, int> expected_vals[] = {\r\n    {0, 20}, {1, 19}, {2, 18}, {3, 17}, {4, 16}, {4, 15}, {4, 14}, {5, 13}, {5, 13}, {6, 12}, {7, 11}};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_unordered_multimap(Rng&& rng) {\r\n    if constexpr (is_reference_v<ranges::range_reference_t<Rng>>) {\r\n        unordered_multimap<int, int> m{from_range, forward<Rng>(rng)};\r\n        unordered_multimap<int, int> e{begin(expected_vals), end(expected_vals)};\r\n        assert(m == e);\r\n    }\r\n}\r\n\r\nstatic constexpr pair<int, int> some_pairs[] = {\r\n    {4, 16}, {2, 18}, {3, 17}, {0, 20}, {4, 15}, {5, 13}, {6, 12}, {4, 14}, {5, 13}, {7, 11}, {1, 19}};\r\n\r\nstruct unordered_multimap_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_unordered_multimap(R{some_pairs});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const pair<int, int>, test::Sized{is_random},\r\n    test::CanDifference{is_random}, IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef::no, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const pair<int, int>> s{some_pairs};\r\n    test_unordered_multimap(s);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_unordered_multimap(move_only_view<input_iterator_tag, test::Common::no>{some_pairs});\r\n    test_unordered_multimap(move_only_view<forward_iterator_tag, test::Common::no>{some_pairs});\r\n    test_unordered_multimap(move_only_view<forward_iterator_tag, test::Common::yes>{some_pairs});\r\n    test_unordered_multimap(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_pairs});\r\n    test_unordered_multimap(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_pairs});\r\n    test_unordered_multimap(move_only_view<random_access_iterator_tag, test::Common::no>{some_pairs});\r\n    test_unordered_multimap(move_only_view<random_access_iterator_tag, test::Common::yes>{some_pairs});\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_unordered_multimap(some_pairs);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n    test_unordered_multimap(vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n    test_unordered_multimap(lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<unordered_multimap_instantiator, const pair<int, int>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_unordered_multimap_insert_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_unordered_multimap_insert_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr pair<int, int> expected_vals[] = {\r\n    {0, 20}, {1, 19}, {2, 18}, {3, 17}, {4, 16}, {4, 15}, {4, 14}, {5, 13}, {5, 13}, {6, 12}, {7, 11}};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_unordered_multimap(Rng&& rng) {\r\n    if constexpr (is_reference_v<ranges::range_reference_t<Rng>>) {\r\n        unordered_multimap<int, int> m;\r\n        m.insert_range(forward<Rng>(rng));\r\n        unordered_multimap<int, int> e{begin(expected_vals), end(expected_vals)};\r\n        assert(m == e);\r\n    }\r\n}\r\n\r\nstatic constexpr pair<int, int> some_pairs[] = {\r\n    {4, 16}, {2, 18}, {3, 17}, {0, 20}, {4, 15}, {5, 13}, {6, 12}, {4, 14}, {5, 13}, {7, 11}, {1, 19}};\r\n\r\nstruct unordered_multimap_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_unordered_multimap(R{some_pairs});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const pair<int, int>, test::Sized{is_random},\r\n    test::CanDifference{is_random}, IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef::no, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const pair<int, int>> s{some_pairs};\r\n    test_unordered_multimap(s);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_unordered_multimap(move_only_view<input_iterator_tag, test::Common::no>{some_pairs});\r\n    test_unordered_multimap(move_only_view<forward_iterator_tag, test::Common::no>{some_pairs});\r\n    test_unordered_multimap(move_only_view<forward_iterator_tag, test::Common::yes>{some_pairs});\r\n    test_unordered_multimap(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_pairs});\r\n    test_unordered_multimap(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_pairs});\r\n    test_unordered_multimap(move_only_view<random_access_iterator_tag, test::Common::no>{some_pairs});\r\n    test_unordered_multimap(move_only_view<random_access_iterator_tag, test::Common::yes>{some_pairs});\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_unordered_multimap(some_pairs);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n    test_unordered_multimap(vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_pairs), ranges::end(some_pairs));\r\n    test_unordered_multimap(lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<unordered_multimap_instantiator, const pair<int, int>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_unordered_multiset_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_unordered_multiset_from_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr int expected_vals[] = {0, 1, 2, 3, 4, 4, 4, 5, 6, 7};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_unordered_multiset(Rng&& rng) {\r\n    if constexpr (is_reference_v<ranges::range_reference_t<Rng>>) {\r\n        unordered_multiset<int> m{from_range, forward<Rng>(rng)};\r\n        unordered_multiset<int> e{begin(expected_vals), end(expected_vals)};\r\n        assert(m == e);\r\n    }\r\n}\r\n\r\nstatic constexpr int some_ints[] = {4, 2, 3, 4, 0, 5, 6, 4, 7, 1};\r\n\r\nstruct unordered_multiset_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_unordered_multiset(R{some_ints});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>}, test::ProxyRef::no, test::CanView::yes,\r\n    test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const int> s{some_ints};\r\n    test_unordered_multiset(s);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_unordered_multiset(move_only_view<input_iterator_tag, test::Common::no>{some_ints});\r\n    test_unordered_multiset(move_only_view<forward_iterator_tag, test::Common::no>{some_ints});\r\n    test_unordered_multiset(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints});\r\n    test_unordered_multiset(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints});\r\n    test_unordered_multiset(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints});\r\n    test_unordered_multiset(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints});\r\n    test_unordered_multiset(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints});\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_unordered_multiset(some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_unordered_multiset(vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_unordered_multiset(lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<unordered_multiset_instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_unordered_multiset_insert_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_unordered_multiset_insert_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr int expected_vals[] = {0, 1, 2, 3, 4, 4, 4, 5, 6, 7};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_unordered_multiset(Rng&& rng) {\r\n    if constexpr (is_reference_v<ranges::range_reference_t<Rng>>) {\r\n        unordered_multiset<int> m;\r\n        m.insert_range(forward<Rng>(rng));\r\n        unordered_multiset<int> e{begin(expected_vals), end(expected_vals)};\r\n        assert(m == e);\r\n    }\r\n}\r\n\r\nstatic constexpr int some_ints[] = {4, 2, 3, 4, 0, 5, 6, 4, 7, 1};\r\n\r\nstruct unordered_multiset_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_unordered_multiset(R{some_ints});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>}, test::ProxyRef::no, test::CanView::yes,\r\n    test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const int> s{some_ints};\r\n    test_unordered_multiset(s);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_unordered_multiset(move_only_view<input_iterator_tag, test::Common::no>{some_ints});\r\n    test_unordered_multiset(move_only_view<forward_iterator_tag, test::Common::no>{some_ints});\r\n    test_unordered_multiset(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints});\r\n    test_unordered_multiset(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints});\r\n    test_unordered_multiset(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints});\r\n    test_unordered_multiset(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints});\r\n    test_unordered_multiset(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints});\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_unordered_multiset(some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_unordered_multiset(vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_unordered_multiset(lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<unordered_multiset_instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_unordered_set_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_unordered_set_from_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr int expected_vals[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_unordered_set(Rng&& rng) {\r\n    if constexpr (is_reference_v<ranges::range_reference_t<Rng>>) {\r\n        unordered_set<int> m{from_range, forward<Rng>(rng)};\r\n        unordered_set<int> e{begin(expected_vals), end(expected_vals)};\r\n        assert(m == e);\r\n    }\r\n}\r\n\r\nstatic constexpr int some_ints[] = {4, 2, 3, 4, 0, 5, 4, 6, 7, 1};\r\n\r\nstruct unordered_set_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_unordered_set(R{some_ints});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>}, test::ProxyRef::no, test::CanView::yes,\r\n    test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const int> s{some_ints};\r\n    test_unordered_set(s);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_unordered_set(move_only_view<input_iterator_tag, test::Common::no>{some_ints});\r\n    test_unordered_set(move_only_view<forward_iterator_tag, test::Common::no>{some_ints});\r\n    test_unordered_set(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints});\r\n    test_unordered_set(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints});\r\n    test_unordered_set(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints});\r\n    test_unordered_set(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints});\r\n    test_unordered_set(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints});\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_unordered_set(some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_unordered_set(vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_unordered_set(lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<unordered_set_instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_unordered_set_insert_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_unordered_set_insert_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr int expected_vals[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\ntemplate <ranges::input_range Rng>\r\nvoid test_unordered_set(Rng&& rng) {\r\n    if constexpr (is_reference_v<ranges::range_reference_t<Rng>>) {\r\n        unordered_set<int> m;\r\n        m.insert_range(forward<Rng>(rng));\r\n        unordered_set<int> e{begin(expected_vals), end(expected_vals)};\r\n        assert(m == e);\r\n    }\r\n}\r\n\r\nstatic constexpr int some_ints[] = {4, 2, 3, 4, 0, 5, 4, 6, 7, 1};\r\n\r\nstruct unordered_set_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_unordered_set(R{some_ints});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>}, test::ProxyRef::no, test::CanView::yes,\r\n    test::Copyability::move_only>;\r\n\r\nvoid test_copyable_views() {\r\n    constexpr span<const int> s{some_ints};\r\n    test_unordered_set(s);\r\n}\r\n\r\nvoid test_move_only_views() {\r\n    test_unordered_set(move_only_view<input_iterator_tag, test::Common::no>{some_ints});\r\n    test_unordered_set(move_only_view<forward_iterator_tag, test::Common::no>{some_ints});\r\n    test_unordered_set(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints});\r\n    test_unordered_set(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints});\r\n    test_unordered_set(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints});\r\n    test_unordered_set(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints});\r\n    test_unordered_set(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints});\r\n}\r\n\r\nvoid test_c_array() {\r\n    test_unordered_set(some_ints);\r\n}\r\n\r\nvoid test_lvalue_vector() {\r\n    vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_unordered_set(vec);\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n    test_unordered_set(lst);\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    test_move_only_views();\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    test_lvalue_vector();\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<unordered_set_instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_vector_append_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_vector_append_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nconstexpr bool test_vector(const size_t capacity, const size_t presize, Rng&& rng, const int (&expected)[N]) {\r\n    // We need to test both reallocating and non-reallocating code paths,\r\n    // so we accept distinct capacity and size values for the initial container.\r\n    vector<int> vec;\r\n    vec.reserve(capacity);\r\n    vec.resize(presize, -1);\r\n\r\n    vec.append_range(forward<Rng>(rng));\r\n    const auto length = static_cast<ptrdiff_t>(presize);\r\n    assert(ranges::count(vec | views::take(length), -1) == length);\r\n    assert(ranges::equal(vec | views::drop(length), expected));\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nconstexpr bool test_vector(const int (&expected)[N]) {\r\n    test_vector(0, 0, Rng{expected}, expected);\r\n    test_vector(ranges::size(expected) + 2, 2, Rng{expected}, expected);\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\nstruct vector_instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        test_vector<R>(some_ints);\r\n        static_assert(test_vector<R>(some_ints));\r\n    }\r\n};\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nconstexpr bool test_vector_bool(const size_t capacity, const size_t presize, Rng&& rng, const int (&expected)[N]) {\r\n    // We need to test both reallocating and non-reallocating code paths,\r\n    // so we accept distinct capacity and size values for the initial container.\r\n    vector<bool> vec;\r\n    vec.reserve(capacity);\r\n    vec.resize(presize, true);\r\n\r\n    vec.append_range(forward<Rng>(rng));\r\n    const auto length = static_cast<ptrdiff_t>(presize);\r\n    assert(ranges::count(vec | views::take(length), true) == length);\r\n    assert(ranges::equal(vec | views::drop(length), expected, equal_to<bool>{}));\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <ranges::input_range Rng, size_t N>\r\nconstexpr bool test_vector_bool(const int (&expected)[N]) {\r\n    test_vector_bool(0, 0, Rng{expected}, expected);\r\n    test_vector_bool(ranges::size(expected) + 2, 2, Rng{expected}, expected);\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr int other_ints[80] = { //\r\n    0, 7, 0, 2, 3, 0, 0, 0, 4, 0, 0, 2, 5, 1, 0, 7, //\r\n    6, 3, 0, 7, 0, 5, 7, 0, 3, 4, 5, 0, 3, 0, 0, 2, //\r\n    2, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 0, 0, 0, //\r\n    0, 4, 2, 4, 0, 7, 0, 2, 0, 7, 1, 0, 6, 0, 0, 6, //\r\n    3, 5, 0, 7, 0, 7, 0, 0, 2, 3, 5, 2, 2, 0, 7, 3};\r\n\r\nstruct vector_boo_instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        test_vector_bool<R>(other_ints);\r\n        static_assert(test_vector_bool<R>(other_ints));\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nconstexpr bool test_copyable_view() {\r\n    test_vector<span<const int>>(some_ints);\r\n    test_vector_bool<span<const int>>(other_ints);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_move_only_view() {\r\n    test_vector<move_only_view<input_iterator_tag, test::Common::no>>(some_ints);\r\n    test_vector<move_only_view<forward_iterator_tag, test::Common::no>>(some_ints);\r\n    test_vector<move_only_view<forward_iterator_tag, test::Common::yes>>(some_ints);\r\n    test_vector<move_only_view<bidirectional_iterator_tag, test::Common::no>>(some_ints);\r\n    test_vector<move_only_view<bidirectional_iterator_tag, test::Common::yes>>(some_ints);\r\n    test_vector<move_only_view<random_access_iterator_tag, test::Common::no>>(some_ints);\r\n    test_vector<move_only_view<random_access_iterator_tag, test::Common::yes>>(some_ints);\r\n\r\n    test_vector_bool<move_only_view<input_iterator_tag, test::Common::no>>(other_ints);\r\n    test_vector_bool<move_only_view<forward_iterator_tag, test::Common::no>>(other_ints);\r\n    test_vector_bool<move_only_view<forward_iterator_tag, test::Common::yes>>(other_ints);\r\n    test_vector_bool<move_only_view<bidirectional_iterator_tag, test::Common::no>>(other_ints);\r\n    test_vector_bool<move_only_view<bidirectional_iterator_tag, test::Common::yes>>(other_ints);\r\n    test_vector_bool<move_only_view<random_access_iterator_tag, test::Common::no>>(other_ints);\r\n    test_vector_bool<move_only_view<random_access_iterator_tag, test::Common::yes>>(other_ints);\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_c_array() {\r\n    test_vector(0, 0, some_ints, some_ints);\r\n    test_vector_bool(0, 0, other_ints, other_ints);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_lvalue_vector() {\r\n    {\r\n        vector vec(from_range, some_ints);\r\n        test_vector(0, 0, vec, some_ints);\r\n    }\r\n    {\r\n        vector vec(from_range, other_ints);\r\n        test_vector_bool(0, 0, vec, other_ints);\r\n    }\r\n    return true;\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    {\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_vector(0, 0, lst, some_ints);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(other_ints), ranges::end(other_ints));\r\n        test_vector_bool(0, 0, lst, other_ints);\r\n    }\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_view();\r\n    static_assert(test_copyable_view());\r\n    test_move_only_view();\r\n    static_assert(test_move_only_view());\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    static_assert(test_c_array());\r\n    test_lvalue_vector();\r\n    static_assert(test_lvalue_vector());\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<vector_instantiator, const int>();\r\n    test_in<vector_boo_instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_vector_assign_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_vector_assign_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nconstexpr bool test_vector(const size_t presize, Rng&& rng, Expected&& expected) {\r\n    vector<int> vec(presize, -1);\r\n    vec.assign_range(forward<Rng>(rng));\r\n    assert(ranges::equal(vec, expected));\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\nstruct vector_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_vector(0, R{some_ints}, some_ints);\r\n        static_assert(test_vector(0, R{some_ints}, some_ints));\r\n\r\n        test_vector(5, R{some_ints}, some_ints);\r\n        static_assert(test_vector(5, R{some_ints}, some_ints));\r\n\r\n        test_vector(11, R{some_ints}, some_ints);\r\n        static_assert(test_vector(11, R{some_ints}, some_ints));\r\n    }\r\n};\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nconstexpr bool test_vector_bool(const size_t presize, Rng&& rng, Expected&& expected) {\r\n    vector<bool> vec(presize, true);\r\n    vec.assign_range(forward<Rng>(rng));\r\n    assert(ranges::equal(vec, expected, equal_to<bool>{}));\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr int other_ints[80] = { //\r\n    0, 7, 0, 2, 3, 0, 0, 0, 4, 0, 0, 2, 5, 1, 0, 7, //\r\n    6, 3, 0, 7, 0, 5, 7, 0, 3, 4, 5, 0, 3, 0, 0, 2, //\r\n    2, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 0, 0, 0, //\r\n    0, 4, 2, 4, 0, 7, 0, 2, 0, 7, 1, 0, 6, 0, 0, 6, //\r\n    3, 5, 0, 7, 0, 7, 0, 0, 2, 3, 5, 2, 2, 0, 7, 3};\r\nstatic constexpr auto first64_ints  = span{other_ints}.first<64>();\r\n\r\nstruct vector_boo_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_vector_bool(0, R{other_ints}, other_ints);\r\n        static_assert(test_vector_bool(0, R{other_ints}, other_ints));\r\n        test_vector_bool(40, R{other_ints}, other_ints);\r\n        static_assert(test_vector_bool(40, R{other_ints}, other_ints));\r\n        test_vector_bool(ranges::size(other_ints), R{other_ints}, other_ints);\r\n        static_assert(test_vector_bool(ranges::size(other_ints), R{other_ints}, other_ints));\r\n\r\n        test_vector_bool(0, R{first64_ints}, first64_ints);\r\n        static_assert(test_vector_bool(0, R{first64_ints}, first64_ints));\r\n        test_vector_bool(40, R{first64_ints}, first64_ints);\r\n        static_assert(test_vector_bool(40, R{first64_ints}, first64_ints));\r\n        test_vector_bool(64, R{first64_ints}, first64_ints);\r\n        static_assert(test_vector_bool(64, R{first64_ints}, first64_ints));\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nconstexpr bool test_copyable_views() {\r\n    {\r\n        constexpr span<const int> s{some_ints};\r\n        test_vector(0, s, some_ints);\r\n    }\r\n\r\n    {\r\n        constexpr span<const int> s{other_ints};\r\n        test_vector_bool(0, s, other_ints);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_move_only_views() {\r\n    {\r\n        test_vector(0, move_only_view<input_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_vector(0, move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_vector(0, move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n        test_vector(0, move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_vector(0, move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n        test_vector(0, move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_vector(0, move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    }\r\n\r\n    {\r\n        test_vector_bool(0, move_only_view<input_iterator_tag, test::Common::no>{other_ints}, other_ints);\r\n        test_vector_bool(0, move_only_view<forward_iterator_tag, test::Common::no>{other_ints}, other_ints);\r\n        test_vector_bool(0, move_only_view<forward_iterator_tag, test::Common::yes>{other_ints}, other_ints);\r\n        test_vector_bool(0, move_only_view<bidirectional_iterator_tag, test::Common::no>{other_ints}, other_ints);\r\n        test_vector_bool(0, move_only_view<bidirectional_iterator_tag, test::Common::yes>{other_ints}, other_ints);\r\n        test_vector_bool(0, move_only_view<random_access_iterator_tag, test::Common::no>{other_ints}, other_ints);\r\n        test_vector_bool(0, move_only_view<random_access_iterator_tag, test::Common::yes>{other_ints}, other_ints);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_c_array() {\r\n    test_vector(0, some_ints, some_ints);\r\n    test_vector_bool(0, other_ints, other_ints);\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_lvalue_vector() {\r\n    {\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_vector(0, vec, some_ints);\r\n    }\r\n    {\r\n        vector vec(ranges::begin(other_ints), ranges::end(other_ints));\r\n        test_vector_bool(0, vec, other_ints);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    {\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_vector(0, lst, some_ints);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(other_ints), ranges::end(other_ints));\r\n        test_vector_bool(0, lst, other_ints);\r\n    }\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    static_assert(test_copyable_views());\r\n    test_move_only_views();\r\n    static_assert(test_move_only_views());\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    static_assert(test_c_array());\r\n    test_lvalue_vector();\r\n    static_assert(test_lvalue_vector());\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<vector_instantiator, const int>();\r\n    test_in<vector_boo_instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_vector_from_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_vector_from_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nconstexpr bool test_vector(Rng&& rng, Expected&& expected) {\r\n    vector<int> vec(from_range, forward<Rng>(rng));\r\n    assert(ranges::equal(vec, expected));\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\n\r\nstruct vector_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_vector(R{some_ints}, some_ints);\r\n        static_assert(test_vector(R{some_ints}, some_ints));\r\n    }\r\n};\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nconstexpr bool test_vector_bool(Rng&& rng, Expected&& expected) {\r\n    vector<bool> vec(from_range, forward<Rng>(rng));\r\n    assert(ranges::equal(vec, expected, equal_to<bool>{}));\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr int other_ints[80] = { //\r\n    0, 7, 0, 2, 3, 0, 0, 0, 4, 0, 0, 2, 5, 1, 0, 7, //\r\n    6, 3, 0, 7, 0, 5, 7, 0, 3, 4, 5, 0, 3, 0, 0, 2, //\r\n    2, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 0, 0, 0, //\r\n    0, 4, 2, 4, 0, 7, 0, 2, 0, 7, 1, 0, 6, 0, 0, 6, //\r\n    3, 5, 0, 7, 0, 7, 0, 0, 2, 3, 5, 2, 2, 0, 7, 3};\r\nstatic constexpr auto first64_ints  = span{other_ints}.first<64>();\r\n\r\nstruct vector_boo_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_vector_bool(R{other_ints}, other_ints);\r\n        static_assert(test_vector_bool(R{other_ints}, other_ints));\r\n        test_vector_bool(R{first64_ints}, first64_ints);\r\n        static_assert(test_vector_bool(R{first64_ints}, first64_ints));\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nconstexpr bool test_copyable_views() {\r\n    {\r\n        constexpr span<const int> s{some_ints};\r\n        test_vector(s, some_ints);\r\n    }\r\n    {\r\n        constexpr span<const int> s{other_ints};\r\n        test_vector_bool(s, other_ints);\r\n        test_vector_bool(first64_ints, first64_ints);\r\n    }\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_move_only_views() {\r\n    test_vector(move_only_view<input_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_vector(move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_vector(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    test_vector(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_vector(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    test_vector(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n    test_vector(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n\r\n    test_vector_bool(move_only_view<input_iterator_tag, test::Common::no>{other_ints}, other_ints);\r\n    test_vector_bool(move_only_view<forward_iterator_tag, test::Common::no>{other_ints}, other_ints);\r\n    test_vector_bool(move_only_view<forward_iterator_tag, test::Common::yes>{other_ints}, other_ints);\r\n    test_vector_bool(move_only_view<bidirectional_iterator_tag, test::Common::no>{other_ints}, other_ints);\r\n    test_vector_bool(move_only_view<bidirectional_iterator_tag, test::Common::yes>{other_ints}, other_ints);\r\n    test_vector_bool(move_only_view<random_access_iterator_tag, test::Common::no>{other_ints}, other_ints);\r\n    test_vector_bool(move_only_view<random_access_iterator_tag, test::Common::yes>{other_ints}, other_ints);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_c_array() {\r\n    test_vector(some_ints, some_ints);\r\n    test_vector_bool(other_ints, other_ints);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_lvalue_vector() {\r\n    {\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_vector(vec, some_ints);\r\n    }\r\n    {\r\n        vector vec(ranges::begin(other_ints), ranges::end(other_ints));\r\n        test_vector_bool(vec, other_ints);\r\n    }\r\n    return true;\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    {\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_vector(lst, some_ints);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(other_ints), ranges::end(other_ints));\r\n        test_vector_bool(lst, other_ints);\r\n    }\r\n}\r\n\r\nstruct counted_item {\r\n    static int count;\r\n\r\n    counted_item() {\r\n        ++count;\r\n    }\r\n\r\n    counted_item(const counted_item&) {\r\n        ++count;\r\n    }\r\n\r\n    counted_item& operator=(const counted_item&) = default;\r\n\r\n    ~counted_item() {\r\n        --count;\r\n    }\r\n};\r\n\r\nint counted_item::count = 0;\r\n\r\nstatic_assert(!is_trivially_copy_constructible_v<counted_item>);\r\nstatic_assert(is_trivially_copy_assignable_v<counted_item>);\r\n\r\nvoid test_vso1591034() {\r\n    // _Uninitialized_copy was incorrectly using memmove for types that are\r\n    // trivially assignable but not trivially constructible.\r\n\r\n    counted_item::count = 0;\r\n    vector<counted_item> vec;\r\n\r\n    for (int j = 0; j != 6; ++j) {\r\n        vec.push_back(counted_item());\r\n    }\r\n\r\n    assert(counted_item::count == 6);\r\n}\r\n\r\nvoid test_LWG_3743() { // COMPILE-ONLY\r\n    ranges::subrange r(views::iota(0ULL) | views::take(5), 5);\r\n    (void) ranges::to<vector<unsigned long long>>(r, size_t{0});\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    static_assert(test_copyable_views());\r\n\r\n    test_move_only_views();\r\n    static_assert(test_move_only_views());\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    static_assert(test_c_array());\r\n\r\n    test_lvalue_vector();\r\n    static_assert(test_lvalue_vector());\r\n\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<vector_instantiator, const int>();\r\n    test_in<vector_boo_instantiator, const int>();\r\n\r\n    test_vso1591034();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_vector_insert_range/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1206R7_vector_insert_range/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nconstexpr bool test_vector(const size_t presize, Rng&& rng, Expected&& expected) {\r\n    vector<int> vec(presize, -1);\r\n    const same_as<vector<int>::iterator> auto result =\r\n        vec.insert_range(ranges::next(vec.begin(), presize != 0), forward<Rng>(rng));\r\n    assert(result == ranges::next(vec.begin(), presize != 0));\r\n    assert(ranges::equal(vec, expected));\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr int some_ints[]    = {0, 1, 2, 3, 4, 5, 6, 7};\r\nstatic constexpr int short_result[] = {\r\n    -1, 0, 1, 2, 3, 4, 5, 6, 7, -1, -1, -1, -1}; // result of inserting some_ints at offset 1 in a sequence of 5 -1s\r\nstatic constexpr int long_result[] = {\r\n    -1, 0, 1, 2, 3, 4, 5, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; // ditto, in a sequence of 11 -1s\r\n\r\nstruct vector_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_vector(0, R{some_ints}, some_ints);\r\n        static_assert(test_vector(0, R{some_ints}, some_ints));\r\n        test_vector(5, R{some_ints}, short_result);\r\n        static_assert(test_vector(5, R{some_ints}, short_result));\r\n        test_vector(11, R{some_ints}, long_result);\r\n        static_assert(test_vector(11, R{some_ints}, long_result));\r\n    }\r\n};\r\n\r\ntemplate <ranges::input_range Rng, ranges::random_access_range Expected>\r\nconstexpr bool test_vector_bool(const size_t presize, Rng&& rng, Expected&& expected) {\r\n    vector<bool> vec(presize, true);\r\n    const same_as<vector<bool>::iterator> auto result =\r\n        vec.insert_range(ranges::next(vec.begin(), presize != 0), forward<Rng>(rng));\r\n    assert(result == ranges::next(vec.begin(), presize != 0));\r\n    assert(ranges::equal(vec, expected, equal_to<bool>{}));\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr int other_ints[80]        = { //\r\n    0, 7, 0, 2, 3, 0, 0, 0, 4, 0, 0, 2, 5, 1, 0, 7, //\r\n    6, 3, 0, 7, 0, 5, 7, 0, 3, 4, 5, 0, 3, 0, 0, 2, //\r\n    2, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 0, 0, 0, //\r\n    0, 4, 2, 4, 0, 7, 0, 2, 0, 7, 1, 0, 6, 0, 0, 6, //\r\n    3, 5, 0, 7, 0, 7, 0, 0, 2, 3, 5, 2, 2, 0, 7, 3};\r\nstatic constexpr bool other_short_result[] = {true, false, true, true, true, true, true, true, true, true, true, true,\r\n    true}; // result of inserting other_ints at offset 1 in a sequence of 5 trues\r\nstatic constexpr bool other_long_result[]  = {true, false, true, true, true, true, true, true, true, true, true, true,\r\n     true, true, true, true, true, true, true}; // ditto, in a sequence of 11 trues\r\n\r\nstruct vector_boo_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        test_vector_bool(0, R{some_ints}, some_ints);\r\n        static_assert(test_vector_bool(0, R{some_ints}, some_ints));\r\n        test_vector_bool(5, R{some_ints}, other_short_result);\r\n        static_assert(test_vector_bool(5, R{some_ints}, other_short_result));\r\n        test_vector_bool(11, R{some_ints}, other_long_result);\r\n        static_assert(test_vector_bool(11, R{some_ints}, other_long_result));\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nconstexpr bool test_copyable_views() {\r\n    {\r\n        constexpr span<const int> s{some_ints};\r\n        test_vector(0, s, some_ints);\r\n    }\r\n    {\r\n        constexpr span<const int> s{other_ints};\r\n        test_vector_bool(0, s, other_ints);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_move_only_views() {\r\n    {\r\n        test_vector(0, move_only_view<input_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_vector(0, move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_vector(0, move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n        test_vector(0, move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_vector(0, move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n        test_vector(0, move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_vector(0, move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    }\r\n    {\r\n        test_vector_bool(0, move_only_view<input_iterator_tag, test::Common::no>{other_ints}, other_ints);\r\n        test_vector_bool(0, move_only_view<forward_iterator_tag, test::Common::no>{other_ints}, other_ints);\r\n        test_vector_bool(0, move_only_view<forward_iterator_tag, test::Common::yes>{other_ints}, other_ints);\r\n        test_vector_bool(0, move_only_view<bidirectional_iterator_tag, test::Common::no>{other_ints}, other_ints);\r\n        test_vector_bool(0, move_only_view<bidirectional_iterator_tag, test::Common::yes>{other_ints}, other_ints);\r\n        test_vector_bool(0, move_only_view<random_access_iterator_tag, test::Common::no>{other_ints}, other_ints);\r\n        test_vector_bool(0, move_only_view<random_access_iterator_tag, test::Common::yes>{other_ints}, other_ints);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_c_array() {\r\n    test_vector(0, some_ints, some_ints);\r\n    test_vector_bool(0, other_ints, other_ints);\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_lvalue_vector() {\r\n    {\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_vector(0, vec, some_ints);\r\n    }\r\n    {\r\n        vector vec(ranges::begin(other_ints), ranges::end(other_ints));\r\n        test_vector_bool(0, vec, other_ints);\r\n    }\r\n    return true;\r\n}\r\n\r\nvoid test_lvalue_forward_list() {\r\n    {\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_vector(0, lst, some_ints);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(other_ints), ranges::end(other_ints));\r\n        test_vector_bool(0, lst, other_ints);\r\n    }\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    test_copyable_views();\r\n    static_assert(test_copyable_views());\r\n    test_move_only_views();\r\n    static_assert(test_move_only_views());\r\n\r\n    // Validate non-views\r\n    test_c_array();\r\n    static_assert(test_c_array());\r\n    test_lvalue_vector();\r\n    static_assert(test_lvalue_vector());\r\n    test_lvalue_forward_list();\r\n\r\n    test_in<vector_instantiator, const int>();\r\n    test_in<vector_boo_instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1208R6_source_location/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"\"\r\n*\tPM_CL=\"/D_USE_DETAILED_FUNCTION_NAME_IN_SOURCE_LOCATION=0\"\r\n"
  },
  {
    "path": "tests/std/tests/P1208R6_source_location/header.h",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n#include <cassert>\r\n#include <source_location>\r\n#include <string_view>\r\n\r\nconstexpr void header_test() {\r\n    using namespace std;\r\n    const auto x = source_location::current();\r\n    assert(x.line() == __LINE__ - 1);\r\n#ifdef __clang__\r\n    assert(x.column() == 20);\r\n#elif defined(__EDG__)\r\n    assert(x.column() == 45);\r\n#else // ^^^ EDG / C1XX vvv\r\n    assert(x.column() == 37);\r\n#endif // ^^^ C1XX ^^^\r\n#if _USE_DETAILED_FUNCTION_NAME_IN_SOURCE_LOCATION\r\n    assert(x.function_name() == \"void __cdecl header_test(void)\"sv);\r\n#else // ^^^ detailed / basic vvv\r\n    assert(x.function_name() == \"header_test\"sv);\r\n#endif // ^^^ basic ^^^\r\n    assert(string_view{x.file_name()}.ends_with(\"header.h\"sv));\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1208R6_source_location/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include \"header.h\"\r\n#include <cassert>\r\n#include <functional>\r\n#include <source_location>\r\n#include <string_view>\r\n#include <type_traits>\r\nusing namespace std;\r\n\r\n#ifdef _M_IX86\r\n#define THISCALL_OR_CDECL \"__thiscall\"\r\n#else\r\n#define THISCALL_OR_CDECL \"__cdecl\"\r\n#endif\r\n\r\nstatic_assert(is_nothrow_default_constructible_v<source_location>);\r\nstatic_assert(is_nothrow_move_constructible_v<source_location>);\r\nstatic_assert(is_nothrow_move_assignable_v<source_location>);\r\nstatic_assert(is_nothrow_swappable_v<source_location>);\r\n\r\nconstexpr auto test_cpp = \"test.cpp\"sv;\r\n\r\nconstexpr auto g = source_location::current();\r\nstatic_assert(g.line() == __LINE__ - 1);\r\n#ifdef __clang__\r\nstatic_assert(g.column() == 20);\r\n#elif defined(__EDG__)\r\nstatic_assert(g.column() == 45);\r\n#else // ^^^ EDG / C1XX vvv\r\nstatic_assert(g.column() == 37);\r\n#endif // ^^^ C1XX ^^^\r\nstatic_assert(g.function_name() == \"\"sv);\r\nstatic_assert(string_view{g.file_name()}.ends_with(test_cpp));\r\n\r\nconstexpr int s_int_line = __LINE__ + 3;\r\nstruct s {\r\n    constexpr s(const source_location x = source_location::current()) : loc(x) {}\r\n    constexpr s(int) {}\r\n    source_location loc = source_location::current();\r\n};\r\n\r\nconstexpr int s2_int_line = __LINE__ + 3;\r\nstruct s2 {\r\n    constexpr s2(const source_location l = source_location::current()) : x{l} {}\r\n    constexpr s2(int) {}\r\n    s x = source_location::current();\r\n};\r\n\r\nconstexpr void copy_test() {\r\n    const auto rhs = source_location::current();\r\n    const auto lhs = rhs;\r\n    assert(lhs.line() == rhs.line());\r\n    assert(lhs.column() == rhs.column());\r\n    assert(string_view{lhs.function_name()} == string_view{rhs.function_name()});\r\n    assert(string_view{lhs.file_name()} == string_view{rhs.file_name()});\r\n}\r\n\r\nconstexpr void local_test() {\r\n    const auto x = source_location::current();\r\n    assert(x.line() == __LINE__ - 1);\r\n#ifdef __clang__\r\n    assert(x.column() == 20);\r\n#elif defined(__EDG__)\r\n    assert(x.column() == 45);\r\n#else // ^^^ EDG / C1XX vvv\r\n    assert(x.column() == 37);\r\n#endif // ^^^ C1XX ^^^\r\n#if _USE_DETAILED_FUNCTION_NAME_IN_SOURCE_LOCATION\r\n    assert(x.function_name() == \"void __cdecl local_test(void)\"sv);\r\n#else // ^^^ detailed / basic vvv\r\n    assert(x.function_name() == \"local_test\"sv);\r\n#endif // ^^^ basic ^^^\r\n    assert(string_view{x.file_name()}.ends_with(test_cpp));\r\n}\r\n\r\nconstexpr void argument_test(\r\n    const unsigned int line, const unsigned int column, const source_location x = source_location::current()) {\r\n    assert(x.line() == line);\r\n    assert(x.column() == column);\r\n#if _USE_DETAILED_FUNCTION_NAME_IN_SOURCE_LOCATION\r\n    assert(x.function_name() == \"bool __cdecl test(void)\"sv);\r\n#else // ^^^ detailed / basic vvv\r\n    assert(x.function_name() == \"test\"sv);\r\n#endif // ^^^ basic ^^^\r\n    assert(string_view{x.file_name()}.ends_with(test_cpp));\r\n}\r\n\r\nconstexpr void sloc_constructor_test() {\r\n    const s x;\r\n    assert(x.loc.line() == __LINE__ - 1);\r\n#ifdef __EDG__\r\n    assert(x.loc.column() == 14);\r\n#else // ^^^ defined(__EDG__) / !defined(__EDG__) vvv\r\n    assert(x.loc.column() == 13);\r\n#endif // ^^^ !defined(__EDG__) ^^^\r\n#if _USE_DETAILED_FUNCTION_NAME_IN_SOURCE_LOCATION\r\n    assert(x.loc.function_name() == \"void __cdecl sloc_constructor_test(void)\"sv);\r\n#else // ^^^ detailed / basic vvv\r\n    assert(x.loc.function_name() == \"sloc_constructor_test\"sv);\r\n#endif // ^^^ basic ^^^\r\n    assert(string_view{x.loc.file_name()}.ends_with(test_cpp));\r\n}\r\n\r\nconstexpr void different_constructor_test() {\r\n    const s x{1};\r\n    assert(x.loc.line() == s_int_line);\r\n#ifdef __clang__\r\n    assert(x.loc.column() == 15);\r\n#elif defined(__EDG__)\r\n    assert(x.loc.column() == 22);\r\n#else // ^^^ EDG / C1XX vvv\r\n    assert(x.loc.column() == 5);\r\n#endif // ^^^ C1XX ^^^\r\n#if !_USE_DETAILED_FUNCTION_NAME_IN_SOURCE_LOCATION\r\n    assert(x.loc.function_name() == \"s\"sv);\r\n#elif defined(__EDG__) // ^^^ basic / detailed EDG vvv\r\n    assert(x.loc.function_name() == \"__cdecl s::s(int)\"sv);\r\n#else // ^^^ detailed EDG / detailed Other vvv\r\n    assert(x.loc.function_name() == THISCALL_OR_CDECL \" s::s(int)\"sv);\r\n#endif // ^^^ detailed Other ^^^\r\n    assert(string_view{x.loc.file_name()}.ends_with(test_cpp));\r\n}\r\n\r\nconstexpr void sub_member_test() {\r\n    const s2 s;\r\n    assert(s.x.loc.line() == __LINE__ - 1);\r\n#ifdef __EDG__\r\n    assert(s.x.loc.column() == 15);\r\n#else // ^^^ defined(__EDG__) / !defined(__EDG__) vvv\r\n    assert(s.x.loc.column() == 14);\r\n#endif // ^^^ !defined(__EDG__) ^^^\r\n#if _USE_DETAILED_FUNCTION_NAME_IN_SOURCE_LOCATION\r\n    assert(s.x.loc.function_name() == \"void __cdecl sub_member_test(void)\"sv);\r\n#else // ^^^ detailed / basic vvv\r\n    assert(s.x.loc.function_name() == \"sub_member_test\"sv);\r\n#endif // ^^^ basic ^^^\r\n    assert(string_view{s.x.loc.file_name()}.ends_with(test_cpp));\r\n\r\n    const s2 s_i{1};\r\n    assert(s_i.x.loc.line() == s2_int_line);\r\n#ifdef __clang__\r\n    assert(s_i.x.loc.column() == 15);\r\n#elif defined(__EDG__)\r\n    assert(s_i.x.loc.column() == 23);\r\n#else // ^^^ EDG / C1XX vvv\r\n    assert(s_i.x.loc.column() == 5);\r\n#endif // ^^^ C1XX ^^^\r\n#if !_USE_DETAILED_FUNCTION_NAME_IN_SOURCE_LOCATION\r\n    assert(s_i.x.loc.function_name() == \"s2\"sv);\r\n#elif defined(__EDG__) // ^^^ basic / detailed EDG vvv\r\n    assert(s_i.x.loc.function_name() == \"__cdecl s2::s2(int)\"sv);\r\n#else // ^^^ detailed EDG / detailed Other vvv\r\n    assert(s_i.x.loc.function_name() == THISCALL_OR_CDECL \" s2::s2(int)\"sv);\r\n#endif // ^^^ detailed Other ^^^\r\n    assert(string_view{s_i.x.loc.file_name()}.ends_with(test_cpp));\r\n}\r\n\r\nconstexpr void lambda_test() {\r\n    const auto l1 = [loc = source_location::current()] { return loc; };\r\n    const auto l2 = [] { return source_location::current(); };\r\n    const auto x1 = l1();\r\n    const auto x2 = l2();\r\n    assert(x1.line() == __LINE__ - 4);\r\n    assert(x2.line() == __LINE__ - 4);\r\n#ifdef __clang__\r\n    assert(x1.column() == 28);\r\n    assert(x2.column() == 33);\r\n#elif defined(__EDG__)\r\n    assert(x1.column() == 53);\r\n    assert(x2.column() == 58);\r\n#else // ^^^ EDG / C1XX vvv\r\n    assert(x1.column() == 45);\r\n    assert(x2.column() == 50);\r\n#endif // ^^^ C1XX ^^^\r\n#if _USE_DETAILED_FUNCTION_NAME_IN_SOURCE_LOCATION\r\n    assert(x1.function_name() == \"void __cdecl lambda_test(void)\"sv);\r\n#else // ^^^ detailed / basic vvv\r\n    assert(x1.function_name() == \"lambda_test\"sv);\r\n#endif // ^^^ basic ^^^\r\n    const string_view fun2{x2.function_name()};\r\n#if !_USE_DETAILED_FUNCTION_NAME_IN_SOURCE_LOCATION\r\n#if !defined(__clang__) && !defined(__EDG__)\r\n    assert(fun2 == \"operator ()\"sv);\r\n#else // ^^^ C1XX / Other vvv\r\n    assert(fun2 == \"operator()\"sv);\r\n#endif // ^^^ Other ^^^\r\n#elif defined(__clang__) // ^^^ basic / detailed Clang vvv\r\n    assert(fun2 == \"auto \" THISCALL_OR_CDECL \" lambda_test()::(anonymous class)::operator()(void) const\"sv);\r\n#elif defined(__EDG__) // ^^^ detailed Clang / detailed EDG vvv\r\n    assert(fun2 == \"__cdecl lambda [](void)->auto::operator()(void)->auto\"sv);\r\n#else // ^^^ detailed EDG / detailed C1XX vvv\r\n    assert(fun2.starts_with(\"struct std::source_location \" THISCALL_OR_CDECL \" lambda_test::<lambda_\"sv));\r\n    assert(fun2.ends_with(\"::operator ()(void) const\"sv));\r\n#endif // ^^^ detailed C1XX ^^^\r\n    assert(string_view{x1.file_name()}.ends_with(test_cpp));\r\n    assert(string_view{x2.file_name()}.ends_with(test_cpp));\r\n}\r\n\r\ntemplate <class T>\r\nconstexpr source_location function_template() {\r\n    return source_location::current();\r\n}\r\n\r\nconstexpr void function_template_test() {\r\n    const auto x1 = function_template<void>();\r\n    assert(x1.line() == __LINE__ - 5);\r\n#ifdef __clang__\r\n    assert(x1.column() == 12);\r\n#elif defined(__EDG__)\r\n    assert(x1.column() == 37);\r\n#else // ^^^ EDG / C1XX vvv\r\n    assert(x1.column() == 29);\r\n#endif // ^^^ C1XX ^^^\r\n#if !_USE_DETAILED_FUNCTION_NAME_IN_SOURCE_LOCATION\r\n    assert(x1.function_name() == \"function_template\"sv);\r\n#elif defined(__clang__) // ^^^ basic / detailed Clang vvv\r\n    assert(x1.function_name() == \"source_location __cdecl function_template(void) [T = void]\"sv);\r\n#elif defined(__EDG__) // ^^^ detailed Clang / detailed EDG vvv\r\n    assert(x1.function_name() == \"std::source_location __cdecl function_template<void>(void)\"sv);\r\n#else // ^^^ detailed EDG / detailed C1XX vvv\r\n    assert(x1.function_name() == \"struct std::source_location __cdecl function_template<void>(void)\"sv);\r\n#endif // ^^^ detailed C1XX ^^^\r\n    assert(string_view{x1.file_name()}.ends_with(test_cpp));\r\n\r\n    const auto x2 = function_template<int>();\r\n    assert(x1.line() == x2.line());\r\n    assert(x1.column() == x2.column());\r\n#if !_USE_DETAILED_FUNCTION_NAME_IN_SOURCE_LOCATION\r\n    assert(x2.function_name() == \"function_template\"sv);\r\n#elif defined(__clang__) // ^^^ basic / detailed Clang vvv\r\n    assert(x2.function_name() == \"source_location __cdecl function_template(void) [T = int]\"sv);\r\n#elif defined(__EDG__) // ^^^ detailed Clang / detailed EDG vvv\r\n    assert(x2.function_name() == \"std::source_location __cdecl function_template<int>(void)\"sv);\r\n#else // ^^^ detailed EDG / detailed C1XX vvv\r\n    assert(x2.function_name() == \"struct std::source_location __cdecl function_template<int>(void)\"sv);\r\n#endif // ^^^ detailed C1XX ^^^\r\n    assert(string_view{x1.file_name()} == string_view{x2.file_name()});\r\n}\r\n\r\nconstexpr bool test() {\r\n    copy_test();\r\n    local_test();\r\n#ifdef __EDG__\r\n    argument_test(__LINE__, 31);\r\n#else // ^^^ defined(__EDG__) / !defined(__EDG__) vvv\r\n    argument_test(__LINE__, 5);\r\n#endif // ^^^ !defined(__EDG__) ^^^\r\n#ifdef __clang__\r\n    const auto loc = source_location::current();\r\n    argument_test(__LINE__ - 1, 22, loc);\r\n#elif defined(__EDG__)\r\n    const auto loc = source_location::current();\r\n    argument_test(__LINE__ - 1, 47, loc);\r\n#else // ^^^ EDG / C1XX vvv\r\n    const auto loc = source_location::current();\r\n    argument_test(__LINE__ - 1, 39, loc);\r\n#endif // ^^^ C1XX ^^^\r\n    sloc_constructor_test();\r\n    different_constructor_test();\r\n    sub_member_test();\r\n    lambda_test();\r\n    function_template_test();\r\n    header_test();\r\n    return true;\r\n}\r\n\r\n// Also test GH-2822 Failed to specialize std::invoke on operator() with default argument\r\n// std::source_location::current()\r\nvoid test_gh_2822() { // COMPILE-ONLY\r\n    invoke([](source_location = source_location::current()) {});\r\n}\r\n\r\nint main() {\r\n    test();\r\n    static_assert(test());\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1209R0_erase_if_erase/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1209R0_erase_if_erase/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <list>\r\n#include <map>\r\n#include <set>\r\n#include <string>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\n// Note that the standard actually requires these to be copyable. As an extension, we want to ensure we don't copy them,\r\n// because copying some functors (e.g. std::function) is comparatively expensive, and even for relatively cheap to copy\r\n// function objects we care (somewhat) about debug mode perf.\r\nstruct no_copy {\r\n    no_copy()                          = default;\r\n    no_copy(const no_copy&)            = delete;\r\n    no_copy(no_copy&&)                 = default;\r\n    no_copy& operator=(const no_copy&) = delete;\r\n    no_copy& operator=(no_copy&&)      = delete;\r\n};\r\n\r\nstruct is_vowel : no_copy {\r\n    constexpr bool operator()(const char c) const {\r\n        return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';\r\n    }\r\n};\r\n\r\nstruct is_odd : no_copy {\r\n    constexpr bool operator()(const int i) const {\r\n        return i % 2 != 0;\r\n    }\r\n};\r\n\r\nstruct is_first_odd : no_copy {\r\n    bool operator()(const std::pair<const int, int>& p) const {\r\n        return p.first % 2 != 0;\r\n    }\r\n};\r\n\r\nconstexpr bool test_string() {\r\n    std::string str1{\"cute fluffy kittens\"};\r\n    const auto str1_removed = std::erase_if(str1, is_vowel{});\r\n    assert(str1 == \"ct flffy kttns\");\r\n    assert(str1_removed == 5);\r\n\r\n    std::string str2{\"asynchronous beat\"};\r\n    const auto str2_removed = std::erase(str2, 'a');\r\n    assert(str2 == \"synchronous bet\");\r\n    assert(str2_removed == 2);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class SequenceContainer>\r\nconstexpr bool test_sequence_container() {\r\n    SequenceContainer c{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8, 4, 6, 2, 6, 4, 3, 3, 8, 3, 2, 7, 9, 5,\r\n        0, 2, 8, 8, 4, 1, 9, 7, 1, 6, 9, 3, 9, 9, 3, 7, 5, 1, 0};\r\n\r\n    {\r\n        const auto removed1 = std::erase_if(c, is_odd{});\r\n        assert(removed1 == 31);\r\n        const SequenceContainer expected1{4, 2, 6, 8, 2, 8, 4, 6, 2, 6, 4, 8, 2, 0, 2, 8, 8, 4, 6, 0};\r\n        assert(c == expected1);\r\n    }\r\n\r\n    {\r\n        const auto removed2 = std::erase(c, 8);\r\n        assert(removed2 == 5);\r\n        const SequenceContainer expected2{4, 2, 6, 2, 4, 6, 2, 6, 4, 2, 0, 2, 4, 6, 0};\r\n        assert(c == expected2);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n// Also test LWG-4135 \"The helper lambda of std::erase for list should specify return type as bool\"\r\n\r\ntemplate <bool B>\r\nstruct pinned_condition {\r\n    explicit pinned_condition()                          = default;\r\n    pinned_condition(const pinned_condition&)            = delete;\r\n    pinned_condition& operator=(const pinned_condition&) = delete;\r\n\r\n    operator bool() const {\r\n        return B;\r\n    }\r\n\r\n    pinned_condition<!B> operator!() const {\r\n        return {};\r\n    }\r\n};\r\n\r\nstruct lwg_4135_src {\r\n    static constexpr pinned_condition<true> result{};\r\n\r\n    friend void operator==(int&, const lwg_4135_src&) = delete;\r\n    friend void operator==(const lwg_4135_src&, int&) = delete;\r\n\r\n    friend const pinned_condition<true>& operator==(const lwg_4135_src&, const int&) {\r\n        return result;\r\n    }\r\n    friend const pinned_condition<true>& operator==(const int&, const lwg_4135_src&) {\r\n        return result;\r\n    }\r\n};\r\n\r\ntemplate <class ListContainer>\r\nvoid test_list_erase() {\r\n    ListContainer ls2{42, 1729};\r\n    const auto ls2_removed = std::erase(ls2, lwg_4135_src{});\r\n    assert(ls2.empty());\r\n    assert(ls2_removed == 2);\r\n}\r\n\r\nstatic_assert(test_string());\r\nstatic_assert(test_sequence_container<std::vector<int>>());\r\n\r\nint main() {\r\n    test_string();\r\n    test_sequence_container<std::deque<int>>();\r\n    test_sequence_container<std::forward_list<int>>();\r\n    test_sequence_container<std::list<int>>();\r\n    test_sequence_container<std::vector<int>>();\r\n\r\n    test_list_erase<std::forward_list<int>>();\r\n    test_list_erase<std::list<int>>();\r\n\r\n    std::map<int, int> m{{1, 10}, {2, 20}, {3, 30}, {4, 40}, {5, 50}, {6, 60}, {7, 70}};\r\n    const auto m_removed = std::erase_if(m, is_first_odd{});\r\n    assert((m == std::map<int, int>{{2, 20}, {4, 40}, {6, 60}}));\r\n    assert(m_removed == 4);\r\n\r\n    std::multimap<int, int> mm{{1, 10}, {2, 20}, {3, 30}, {4, 40}, {5, 50}, {6, 60}, {7, 70}};\r\n    const auto mm_removed = std::erase_if(mm, is_first_odd{});\r\n    assert((mm == std::multimap<int, int>{{2, 20}, {4, 40}, {6, 60}}));\r\n    assert(mm_removed == 4);\r\n\r\n    std::set<int> s{1, 2, 3, 4, 5, 6, 7};\r\n    const auto s_removed = std::erase_if(s, is_odd{});\r\n    assert((s == std::set<int>{2, 4, 6}));\r\n    assert(s_removed == 4);\r\n\r\n    std::multiset<int> ms{1, 2, 3, 4, 5, 6, 7};\r\n    const auto ms_removed = std::erase_if(ms, is_odd{});\r\n    assert((ms == std::multiset<int>{2, 4, 6}));\r\n    assert(ms_removed == 4);\r\n\r\n    // Note that unordered equality considers permutations.\r\n\r\n    std::unordered_map<int, int> um{{1, 10}, {2, 20}, {3, 30}, {4, 40}, {5, 50}, {6, 60}, {7, 70}};\r\n    const auto um_removed = std::erase_if(um, is_first_odd{});\r\n    assert((um == std::unordered_map<int, int>{{2, 20}, {4, 40}, {6, 60}}));\r\n    assert(um_removed == 4);\r\n\r\n    std::unordered_multimap<int, int> umm{{1, 10}, {2, 20}, {3, 30}, {4, 40}, {5, 50}, {6, 60}, {7, 70}};\r\n    const auto umm_removed = std::erase_if(umm, is_first_odd{});\r\n    assert((umm == std::unordered_multimap<int, int>{{2, 20}, {4, 40}, {6, 60}}));\r\n    assert(umm_removed == 4);\r\n\r\n    std::unordered_set<int> us{1, 2, 3, 4, 5, 6, 7};\r\n    const auto us_removed = std::erase_if(us, is_odd{});\r\n    assert((us == std::unordered_set<int>{2, 4, 6}));\r\n    assert(us_removed == 4);\r\n\r\n    std::unordered_multiset<int> ums{1, 2, 3, 4, 5, 6, 7};\r\n    const auto ums_removed = std::erase_if(ums, is_odd{});\r\n    assert((ums == std::unordered_multiset<int>{2, 4, 6}));\r\n    assert(ums_removed == 4);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1222R4_flat_set/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1222R4_flat_set/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <flat_set>\r\n#include <functional>\r\n#include <limits>\r\n#include <memory>\r\n#include <print>\r\n#include <random>\r\n#include <ranges>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <test_container_requirements.hpp>\r\n#include <test_death.hpp>\r\n#define TEST_ASSERT(...) assert((__VA_ARGS__))\r\n\r\nusing namespace std;\r\n\r\nenum class iterator_pair_construction : bool { allocator_first, allocator_last };\r\n\r\ntemplate <class R, class T>\r\nconcept container_compatible_range = ranges::input_range<R> && convertible_to<ranges::range_reference_t<R>, T>;\r\n\r\ntemplate <class T, class Alloc, iterator_pair_construction Choice>\r\nclass alternative_vector : private vector<T, Alloc> { // not allocator-aware, but can be uses-allocator constructed\r\nprivate:\r\n    using base_type = vector<T, Alloc>;\r\n\r\npublic:\r\n    using typename base_type::allocator_type;\r\n    using typename base_type::const_iterator;\r\n    using typename base_type::const_pointer;\r\n    using typename base_type::const_reference;\r\n    using typename base_type::const_reverse_iterator;\r\n    using typename base_type::difference_type;\r\n    using typename base_type::iterator;\r\n    using typename base_type::pointer;\r\n    using typename base_type::reference;\r\n    using typename base_type::reverse_iterator;\r\n    using typename base_type::size_type;\r\n    using typename base_type::value_type;\r\n\r\n    constexpr alternative_vector() noexcept(noexcept(Alloc())) : base_type(Alloc()) {}\r\n    constexpr alternative_vector(allocator_arg_t, const Alloc& a) : base_type(a) {}\r\n\r\n    constexpr explicit alternative_vector(size_type n, const T& v) : base_type(n, v) {}\r\n    constexpr explicit alternative_vector(allocator_arg_t, const Alloc& a, size_type n, const T& v)\r\n        : base_type(n, v, a) {}\r\n\r\n    template <class InputIt>\r\n    constexpr explicit alternative_vector(InputIt first, InputIt last) : base_type(first, last) {}\r\n    template <class InputIt>\r\n        requires (Choice == iterator_pair_construction::allocator_first)\r\n    constexpr explicit alternative_vector(allocator_arg_t, const Alloc& a, InputIt first, InputIt last)\r\n        : base_type(first, last, a) {}\r\n    template <class InputIt>\r\n        requires (Choice == iterator_pair_construction::allocator_last)\r\n    constexpr explicit alternative_vector(InputIt first, InputIt last, const Alloc& a) : base_type(first, last, a) {}\r\n\r\n    template <container_compatible_range<T> R>\r\n    constexpr explicit alternative_vector(from_range_t, R&& rg) : base_type(from_range, forward<R>(rg)) {}\r\n    template <container_compatible_range<T> R>\r\n    constexpr explicit alternative_vector(allocator_arg_t, const Alloc& a, from_range_t, R&& rg)\r\n        : base_type(from_range, forward<R>(rg), a) {}\r\n\r\n    constexpr alternative_vector(allocator_arg_t, const type_identity_t<Alloc>& a, const alternative_vector& other)\r\n        : base_type(other, a) {}\r\n    constexpr alternative_vector(allocator_arg_t, const type_identity_t<Alloc>& a, alternative_vector&& other)\r\n        : base_type(move(other), a) {}\r\n\r\n    constexpr explicit alternative_vector(initializer_list<T> il) : base_type(il) {}\r\n    constexpr explicit alternative_vector(allocator_arg_t, const Alloc& a, initializer_list<T> il) : base_type(il, a) {}\r\n\r\n    alternative_vector(const alternative_vector&) = default;\r\n    alternative_vector(alternative_vector&&)      = default;\r\n\r\n    alternative_vector& operator=(const alternative_vector&) = default;\r\n    alternative_vector& operator=(alternative_vector&&)      = default;\r\n    constexpr alternative_vector& operator=(initializer_list<T> il) {\r\n        base_type::operator=(il);\r\n        return *this;\r\n    }\r\n\r\n    using base_type::assign;\r\n    using base_type::assign_range;\r\n    using base_type::get_allocator;\r\n\r\n    using base_type::begin;\r\n    using base_type::end;\r\n    using base_type::rbegin;\r\n    using base_type::rend;\r\n\r\n    using base_type::cbegin;\r\n    using base_type::cend;\r\n    using base_type::crbegin;\r\n    using base_type::crend;\r\n\r\n    using base_type::capacity;\r\n    using base_type::empty;\r\n    using base_type::max_size;\r\n    using base_type::reserve;\r\n    using base_type::resize;\r\n    using base_type::shrink_to_fit;\r\n    using base_type::size;\r\n\r\n    using base_type::operator[];\r\n    using base_type::at;\r\n    using base_type::back;\r\n    using base_type::front;\r\n\r\n    using base_type::data;\r\n\r\n    using base_type::append_range;\r\n    using base_type::emplace_back;\r\n    using base_type::pop_back;\r\n    using base_type::push_back;\r\n\r\n    using base_type::emplace;\r\n    using base_type::erase;\r\n    using base_type::insert;\r\n    using base_type::insert_range;\r\n    using base_type::swap;\r\n\r\n    using base_type::clear;\r\n\r\n    friend auto operator<=>(const alternative_vector&, const alternative_vector&) = default;\r\n\r\n    friend constexpr void swap(alternative_vector& lhs, alternative_vector& rhs) noexcept(noexcept(lhs.swap(rhs))) {\r\n        lhs.swap(rhs);\r\n    }\r\n};\r\n\r\ntemplate <class T>\r\nvoid assert_all_requirements(const T& s) {\r\n    assert_container_requirements(s);\r\n    assert_reversible_container_requirements(s);\r\n    assert_three_way_comparability<T>();\r\n    assert_set_requirements<T>();\r\n\r\n    assert_noexcept_requirements(s);\r\n    assert_noexcept_requirements(const_cast<T&>(s));\r\n\r\n    assert_is_sorted_maybe_unique<_Is_specialization_v<T, flat_set>>(s);\r\n}\r\n\r\ntemplate <class T, class U = initializer_list<typename T::value_type>>\r\nvoid assert_all_requirements_and_equals(const T& s, const U& correct) {\r\n    assert_all_requirements(s);\r\n\r\n    if (!ranges::equal(s, correct)) {\r\n        println(\"Unexpected content!\\nExpected {}\\nActual {}\", correct, s);\r\n        assert(false);\r\n    }\r\n}\r\n\r\ntemplate <class C>\r\nvoid test_constructors() {\r\n    using lt = less<int>;\r\n    using gt = greater<int>;\r\n\r\n    // Test flat_set()\r\n    // and  flat_set(const key_compare&)\r\n    assert_all_requirements_and_equals(flat_set<int, lt, C>(), {});\r\n    assert_all_requirements_and_equals(flat_multiset<int, lt, C>(), {});\r\n    assert_all_requirements_and_equals(flat_set<int, lt, C>(lt{}), {});\r\n    assert_all_requirements_and_equals(flat_multiset<int, lt, C>(lt{}), {});\r\n\r\n    {\r\n        // Test flat_set(container_type, const key_compare& = key_compare())\r\n        flat_set fs1(C{3, 7, 1, 85, 222, 1});\r\n        flat_multiset fms1(C{3, 7, 1, 85, 7, 222, 1});\r\n        flat_set fs2(C{1, 2, 3, 3}, gt{});\r\n        flat_multiset fms2(C{1, 1, 2, 3}, gt{});\r\n        assert_all_requirements_and_equals(fs1, {1, 3, 7, 85, 222});\r\n        assert_all_requirements_and_equals(fms1, {1, 1, 3, 7, 7, 85, 222});\r\n        assert_all_requirements_and_equals(fs2, {3, 2, 1});\r\n        assert_all_requirements_and_equals(fms2, {3, 2, 1, 1});\r\n\r\n        // Test flat_set(const flat_set&)\r\n        // and  flat_set(flat_set&&)\r\n        flat_set fs3(fs1);\r\n        flat_multiset fms3(fms1);\r\n        flat_set fs4(move(fs2));\r\n        flat_multiset fms4(move(fms2));\r\n        assert_all_requirements_and_equals(fs3, {1, 3, 7, 85, 222});\r\n        assert_all_requirements_and_equals(fms3, {1, 1, 3, 7, 7, 85, 222});\r\n        assert_all_requirements_and_equals(fs4, {3, 2, 1});\r\n        assert_all_requirements_and_equals(fms4, {3, 2, 1, 1});\r\n    }\r\n\r\n    // Test flat_set(sorted_unique_t, container_type, const key_compare& = key_compare())\r\n    assert_all_requirements_and_equals(flat_set(sorted_unique, C{1, 200, 30000}), {1, 200, 30000});\r\n    assert_all_requirements_and_equals(flat_multiset(sorted_equivalent, C{-1, 3, 3}), {-1, 3, 3});\r\n    assert_all_requirements_and_equals(flat_set(sorted_unique, C{30000, 200, 1}, gt{}), {30000, 200, 1});\r\n    assert_all_requirements_and_equals(flat_multiset(sorted_equivalent, C{3, 3, -1}, gt{}), {3, 3, -1});\r\n\r\n    const int arr[] = {2, 7, 18, 28, 18, 28, 45, 90, 45, 23};\r\n\r\n    // Test flat_set(InIt, InIt, const key_compare& = key_compare())\r\n    assert_all_requirements_and_equals(flat_set(begin(arr), end(arr)), {2, 7, 18, 23, 28, 45, 90});\r\n    assert_all_requirements_and_equals(flat_multiset(begin(arr), end(arr)), {2, 7, 18, 18, 23, 28, 28, 45, 45, 90});\r\n    assert_all_requirements_and_equals(flat_set(begin(arr), end(arr), gt{}), {90, 45, 28, 23, 18, 7, 2});\r\n    assert_all_requirements_and_equals(\r\n        flat_multiset(begin(arr), end(arr), gt{}), {90, 45, 45, 28, 28, 23, 18, 18, 7, 2});\r\n\r\n    {\r\n        // Test flat_set(sorted_unique_t, InIt, InIt, const key_compare& = key_compare())\r\n        const int ua[] = {10, 20, 30}; // unique ascending\r\n        const int ea[] = {40, 50, 50, 60, 60, 60}; // equivalent ascending\r\n        const int ud[] = {66, 55, 44}; // unique descending\r\n        const int ed[] = {33, 22, 22, 11, 11, 11}; // equivalent descending\r\n        assert_all_requirements_and_equals(flat_set(sorted_unique, begin(ua), end(ua)), ua);\r\n        assert_all_requirements_and_equals(flat_multiset(sorted_equivalent, begin(ea), end(ea)), ea);\r\n        assert_all_requirements_and_equals(flat_set(sorted_unique, begin(ud), end(ud), gt{}), ud);\r\n        assert_all_requirements_and_equals(flat_multiset(sorted_equivalent, begin(ed), end(ed), gt{}), ed);\r\n    }\r\n\r\n    // Test flat_set(from_range_t, R&&)\r\n    // and  flat_set(from_range_t, R&&, const key_compare&)\r\n    assert_all_requirements_and_equals(flat_set(from_range, arr), {2, 7, 18, 23, 28, 45, 90});\r\n    assert_all_requirements_and_equals(flat_multiset(from_range, arr), {2, 7, 18, 18, 23, 28, 28, 45, 45, 90});\r\n    assert_all_requirements_and_equals(flat_set(from_range, arr, gt{}), {90, 45, 28, 23, 18, 7, 2});\r\n    assert_all_requirements_and_equals(flat_multiset(from_range, arr, gt{}), {90, 45, 45, 28, 28, 23, 18, 18, 7, 2});\r\n\r\n    // Test flat_set(initializer_list<value_type>, const key_compare& = key_compare())\r\n    assert_all_requirements_and_equals(flat_set({3, 7, 1, 85, 222, 1}), {1, 3, 7, 85, 222});\r\n    assert_all_requirements_and_equals(flat_multiset({3, 7, 1, 85, 7, 222, 1}), {1, 1, 3, 7, 7, 85, 222});\r\n    assert_all_requirements_and_equals(flat_set({1, 2, 3, 3}, gt{}), {3, 2, 1});\r\n    assert_all_requirements_and_equals(flat_multiset({1, 1, 2, 3}, gt{}), {3, 2, 1, 1});\r\n\r\n    // Test flat_set(sorted_unique_t, initializer_list<value_type>, const key_compare& = key_compare())\r\n    assert_all_requirements_and_equals(flat_set(sorted_unique, {1, 200, 30000}), {1, 200, 30000});\r\n    assert_all_requirements_and_equals(flat_multiset(sorted_equivalent, {-1, 3, 3}), {-1, 3, 3});\r\n    assert_all_requirements_and_equals(flat_set(sorted_unique, {30000, 200, 1}, gt{}), {30000, 200, 1});\r\n    assert_all_requirements_and_equals(flat_multiset(sorted_equivalent, {3, 3, -1}, gt{}), {3, 3, -1});\r\n}\r\n\r\ntemplate <iterator_pair_construction Choice>\r\nvoid test_allocator_extended_constructors() {\r\n    using vec = alternative_vector<int, allocator<int>, Choice>;\r\n    constexpr allocator<int> ator;\r\n    constexpr less<int> comp;\r\n    {\r\n        using fs = flat_set<int, less<int>, vec>;\r\n\r\n        fs s{3, 7, 1, 85, 222, 1};\r\n        fs s_expected{1, 3, 7, 85, 222};\r\n        flat_set<int> s_expected_plain{1, 3, 7, 85, 222};\r\n        vec v_raw{3, 7, 1, 85, 222, 1};\r\n        vec v_sorted_unique{1, 3, 7, 85, 222};\r\n\r\n        TEST_ASSERT(fs{ator} == fs{});\r\n        TEST_ASSERT(fs{comp, ator} == fs{});\r\n\r\n        TEST_ASSERT(flat_set{s, ator} == s_expected);\r\n        TEST_ASSERT(flat_set{s_expected, ator} == s_expected);\r\n        TEST_ASSERT(flat_set{move(s), ator} == s_expected);\r\n        TEST_ASSERT(flat_set{fs{s_expected}, ator} == s_expected);\r\n\r\n        TEST_ASSERT(flat_set{v_raw, ator} == s_expected);\r\n        TEST_ASSERT(fs{{3, 7, 1, 85, 222, 1}, ator} == s_expected);\r\n        TEST_ASSERT(fs{v_raw.begin(), v_raw.end(), ator} == s_expected);\r\n        TEST_ASSERT(flat_set{from_range, v_raw, ator} == s_expected_plain);\r\n\r\n        TEST_ASSERT(flat_set{v_raw, comp, ator} == s_expected);\r\n        TEST_ASSERT(fs{{3, 7, 1, 85, 222, 1}, comp, ator} == s_expected);\r\n        TEST_ASSERT(fs{v_raw.begin(), v_raw.end(), comp, ator} == s_expected);\r\n        TEST_ASSERT(flat_set{from_range, v_raw, comp, ator} == s_expected_plain);\r\n\r\n        TEST_ASSERT(flat_set{sorted_unique, v_sorted_unique, ator} == s_expected);\r\n        TEST_ASSERT(flat_set{sorted_unique, v_sorted_unique, comp, ator} == s_expected);\r\n\r\n        TEST_ASSERT(fs{sorted_unique, {1, 3, 7, 85, 222}, ator} == s_expected);\r\n        TEST_ASSERT(fs{sorted_unique, {1, 3, 7, 85, 222}, comp, ator} == s_expected);\r\n\r\n        TEST_ASSERT(fs{sorted_unique, v_sorted_unique.begin(), v_sorted_unique.end(), ator} == s_expected);\r\n        TEST_ASSERT(fs{sorted_unique, v_sorted_unique.begin(), v_sorted_unique.end(), comp, ator} == s_expected);\r\n    }\r\n    {\r\n        using fms = flat_multiset<int, less<int>, vec>;\r\n\r\n        fms s{3, 7, 1, 85, 222, 1};\r\n        fms s_expected{1, 1, 3, 7, 85, 222};\r\n        flat_multiset<int> s_expected_plain{1, 1, 3, 7, 85, 222};\r\n        vec v_raw{3, 7, 1, 85, 222, 1};\r\n        vec v_sorted_eq{1, 1, 3, 7, 85, 222};\r\n\r\n        TEST_ASSERT(fms{ator} == fms{});\r\n        TEST_ASSERT(fms{comp, ator} == fms{});\r\n\r\n        TEST_ASSERT(flat_multiset{s, ator} == s_expected);\r\n        TEST_ASSERT(flat_multiset{s_expected, ator} == s_expected);\r\n        TEST_ASSERT(flat_multiset{move(s), ator} == s_expected);\r\n        TEST_ASSERT(flat_multiset{fms{s_expected}, ator} == s_expected);\r\n\r\n        TEST_ASSERT(flat_multiset{v_raw, ator} == s_expected);\r\n        TEST_ASSERT(fms{{3, 7, 1, 85, 222, 1}, ator} == s_expected);\r\n        TEST_ASSERT(fms{v_raw.begin(), v_raw.end(), ator} == s_expected);\r\n        TEST_ASSERT(flat_multiset{from_range, v_raw, ator} == s_expected_plain);\r\n\r\n        TEST_ASSERT(flat_multiset{v_raw, comp, ator} == s_expected);\r\n        TEST_ASSERT(fms{{3, 7, 1, 85, 222, 1}, comp, ator} == s_expected);\r\n        TEST_ASSERT(fms{v_raw.begin(), v_raw.end(), comp, ator} == s_expected);\r\n        TEST_ASSERT(flat_multiset{from_range, v_raw, comp, ator} == s_expected_plain);\r\n\r\n        TEST_ASSERT(flat_multiset{sorted_equivalent, v_sorted_eq, ator} == s_expected);\r\n        TEST_ASSERT(flat_multiset{sorted_equivalent, v_sorted_eq, comp, ator} == s_expected);\r\n\r\n        TEST_ASSERT(fms{sorted_equivalent, {1, 1, 3, 7, 85, 222}, ator} == s_expected);\r\n        TEST_ASSERT(fms{sorted_equivalent, {1, 1, 3, 7, 85, 222}, comp, ator} == s_expected);\r\n\r\n        TEST_ASSERT(fms{sorted_equivalent, v_sorted_eq.begin(), v_sorted_eq.end(), ator} == s_expected);\r\n        TEST_ASSERT(fms{sorted_equivalent, v_sorted_eq.begin(), v_sorted_eq.end(), comp, ator} == s_expected);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_iterators_and_capacity() {\r\n    T t{11, 22, 33, 44};\r\n    const T& c = t;\r\n\r\n    {\r\n        const int arr[]{11, 22, 33, 44};\r\n        assert(equal(t.begin(), t.end(), begin(arr), end(arr)));\r\n        assert(equal(c.begin(), c.end(), begin(arr), end(arr)));\r\n        assert(equal(t.cbegin(), t.cend(), begin(arr), end(arr)));\r\n        assert(equal(c.cbegin(), c.cend(), begin(arr), end(arr)));\r\n    }\r\n    {\r\n        const int rev[]{44, 33, 22, 11};\r\n        assert(equal(t.rbegin(), t.rend(), begin(rev), end(rev)));\r\n        assert(equal(c.rbegin(), c.rend(), begin(rev), end(rev)));\r\n        assert(equal(t.crbegin(), t.crend(), begin(rev), end(rev)));\r\n        assert(equal(c.crbegin(), c.crend(), begin(rev), end(rev)));\r\n    }\r\n\r\n    {\r\n        const T zero;\r\n\r\n        assert(!t.empty());\r\n        assert(zero.empty());\r\n\r\n        assert(t.size() == 4);\r\n        assert(zero.size() == 0);\r\n\r\n        assert(t.max_size() > 10);\r\n        assert(zero.max_size() > 10);\r\n    }\r\n\r\n    // Finally, test replace() and clear().\r\n    typename T::container_type primes{17, 29, 47};\r\n    t.replace(move(primes));\r\n    assert(t.size() == 3);\r\n    assert(*t.begin() == 17);\r\n    t.clear();\r\n    assert(t.empty());\r\n}\r\n\r\ntemplate <template <class...> class Set>\r\nvoid test_always_reversible() {\r\n    // Test that flat_meow is unconditionally reversible.\r\n    class not_reversible : public vector<int> {\r\n    private:\r\n        using base = vector<int>;\r\n\r\n        using base::const_reverse_iterator;\r\n        using base::crbegin;\r\n        using base::crend;\r\n        using base::rbegin;\r\n        using base::rend;\r\n        using base::reverse_iterator;\r\n\r\n    public:\r\n        using base::base;\r\n    };\r\n\r\n    Set<int, greater<int>, not_reversible> fs({1, 2, 3});\r\n    assert_all_requirements_and_equals(fs, {3, 2, 1});\r\n    assert(fs.rbegin() + 3 == fs.rend());\r\n    assert(fs.crend() - fs.crbegin() == 3);\r\n}\r\n\r\ntemplate <class C>\r\nvoid test_insert_1() {\r\n    using lt = less<int>;\r\n\r\n    const vector<int> vec{0, 1, 2};\r\n    {\r\n        flat_set<int, lt, C> a{5, 5};\r\n        assert_all_requirements_and_equals(a, {5});\r\n        a.emplace();\r\n        assert_all_requirements_and_equals(a, {0, 5});\r\n        a.emplace(1);\r\n        assert_all_requirements_and_equals(a, {0, 1, 5});\r\n        a.insert(vec[2]);\r\n        assert_all_requirements_and_equals(a, {0, 1, 2, 5});\r\n        a.insert(2);\r\n        assert_all_requirements_and_equals(a, {0, 1, 2, 5});\r\n        a.insert(vec.rbegin(), vec.rend());\r\n        assert_all_requirements_and_equals(a, {0, 1, 2, 5});\r\n        a.insert(sorted_unique, vec.begin(), vec.end());\r\n        assert_all_requirements_and_equals(a, {0, 1, 2, 5});\r\n        a.insert_range(vec);\r\n        assert_all_requirements_and_equals(a, {0, 1, 2, 5});\r\n        a.insert_range(sorted_unique, vector<int>{2, 5, 8});\r\n        assert_all_requirements_and_equals(a, {0, 1, 2, 5, 8});\r\n        a.insert({6, 2, 3});\r\n        assert_all_requirements_and_equals(a, {0, 1, 2, 3, 5, 6, 8});\r\n        a.insert(sorted_unique, {4, 5});\r\n        assert_all_requirements_and_equals(a, {0, 1, 2, 3, 4, 5, 6, 8});\r\n    }\r\n    {\r\n        flat_multiset<int, lt, C> a{5, 5};\r\n        assert_all_requirements_and_equals(a, {5, 5});\r\n        a.emplace();\r\n        assert_all_requirements_and_equals(a, {0, 5, 5});\r\n        a.emplace(1);\r\n        assert_all_requirements_and_equals(a, {0, 1, 5, 5});\r\n        a.insert(vec[2]);\r\n        assert_all_requirements_and_equals(a, {0, 1, 2, 5, 5});\r\n        a.insert(2);\r\n        assert_all_requirements_and_equals(a, {0, 1, 2, 2, 5, 5});\r\n        a.insert(vec.rbegin(), vec.rend());\r\n        assert_all_requirements_and_equals(a, {0, 0, 1, 1, 2, 2, 2, 5, 5});\r\n        a.insert(sorted_equivalent, vec.begin(), vec.end());\r\n        assert_all_requirements_and_equals(a, {0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 5, 5});\r\n        a.insert_range(vec);\r\n        assert_all_requirements_and_equals(a, {0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 5, 5});\r\n        a.insert_range(sorted_equivalent, vector<int>{2, 8, 8});\r\n        assert_all_requirements_and_equals(a, {0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 5, 5, 8, 8});\r\n        a.insert({6, 2, 3});\r\n        assert_all_requirements_and_equals(a, {0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 5, 5, 6, 8, 8});\r\n        a.insert(sorted_equivalent, {4, 5});\r\n        assert_all_requirements_and_equals(a, {0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 5, 5, 5, 6, 8, 8});\r\n    }\r\n}\r\n\r\ntemplate <class C>\r\nvoid test_insert_2() {\r\n    using lt = less<int>;\r\n\r\n    const int val = 1;\r\n    {\r\n        flat_set<int, lt, C> a{0, 5};\r\n        assert_all_requirements_and_equals(a, {0, 5});\r\n        a.emplace_hint(a.end());\r\n        assert_all_requirements_and_equals(a, {0, 5});\r\n        a.emplace_hint(a.end(), 0);\r\n        assert_all_requirements_and_equals(a, {0, 5});\r\n        a.insert(a.begin(), 6);\r\n        assert_all_requirements_and_equals(a, {0, 5, 6});\r\n        a.insert(a.begin(), val);\r\n        assert_all_requirements_and_equals(a, {0, 1, 5, 6});\r\n    }\r\n    {\r\n        flat_multiset<int, lt, C> a{0, 5};\r\n        assert_all_requirements_and_equals(a, {0, 5});\r\n        a.emplace_hint(a.end());\r\n        assert_all_requirements_and_equals(a, {0, 0, 5});\r\n        a.emplace_hint(a.end(), 0);\r\n        assert_all_requirements_and_equals(a, {0, 0, 0, 5});\r\n        a.insert(a.begin(), 6);\r\n        assert_all_requirements_and_equals(a, {0, 0, 0, 5, 6});\r\n        a.insert(a.begin(), val);\r\n        assert_all_requirements_and_equals(a, {0, 0, 0, 1, 5, 6});\r\n    }\r\n\r\n    using gt = greater<int>;\r\n    {\r\n        flat_set<int, gt, C> a{5, 7, 9};\r\n        assert_all_requirements_and_equals(a, {9, 7, 5});\r\n        a.emplace_hint(a.end());\r\n        assert_all_requirements_and_equals(a, {9, 7, 5, 0});\r\n        a.emplace_hint(a.begin() + 1, 8);\r\n        assert_all_requirements_and_equals(a, {9, 8, 7, 5, 0});\r\n        a.insert(a.begin() + 3, 6);\r\n        assert_all_requirements_and_equals(a, {9, 8, 7, 6, 5, 0});\r\n        a.insert(a.end() - 1, val);\r\n        assert_all_requirements_and_equals(a, {9, 8, 7, 6, 5, 1, 0});\r\n    }\r\n    {\r\n        flat_multiset<int, gt, C> a{3, 1, 4, 1, 5, 9};\r\n        assert_all_requirements_and_equals(a, {9, 5, 4, 3, 1, 1});\r\n        a.emplace_hint(a.end());\r\n        assert_all_requirements_and_equals(a, {9, 5, 4, 3, 1, 1, 0});\r\n        a.emplace_hint(a.begin() + 2, 4);\r\n        assert_all_requirements_and_equals(a, {9, 5, 4, 4, 3, 1, 1, 0});\r\n        a.insert(a.begin() + 1, 6);\r\n        assert_all_requirements_and_equals(a, {9, 6, 5, 4, 4, 3, 1, 1, 0});\r\n        a.insert(a.end() - 3, val);\r\n        assert_all_requirements_and_equals(a, {9, 6, 5, 4, 4, 3, 1, 1, 1, 0});\r\n    }\r\n}\r\n\r\n// Test that hint to emplace/insert is respected, when possible; check returned iterator\r\ntemplate <class C>\r\nvoid test_insert_hint_is_respected() {\r\n    using lt = less<int>;\r\n\r\n    {\r\n        flat_multiset<int, lt, C> a{-1, -1, 1, 1};\r\n        bool problem_seen                      = false;\r\n        const auto assert_inserted_at_position = [&a, &problem_seen](\r\n                                                     const int expected_index, const auto insert_position) {\r\n            const auto expected_position = a.begin() + expected_index;\r\n            if (expected_position != insert_position) {\r\n                println(\"Wrong insert position: expected {}, actual {}\\nContainer after insert {}\", expected_index,\r\n                    insert_position - a.begin(), a);\r\n                problem_seen = true;\r\n            }\r\n        };\r\n\r\n        // hint is greater\r\n        assert_all_requirements_and_equals(a, {-1, -1, 1, 1});\r\n        assert_inserted_at_position(2, a.insert(a.end(), 0));\r\n        assert_all_requirements_and_equals(a, {-1, -1, 0, 1, 1});\r\n        assert_inserted_at_position(3, a.insert(a.find(1), 0));\r\n        assert_all_requirements_and_equals(a, {-1, -1, 0, 0, 1, 1});\r\n        assert_inserted_at_position(4, a.insert(a.find(1), 0));\r\n        assert_all_requirements_and_equals(a, {-1, -1, 0, 0, 0, 1, 1});\r\n        assert_inserted_at_position(5, a.insert(a.upper_bound(0), 0));\r\n        assert_all_requirements_and_equals(a, {-1, -1, 0, 0, 0, 0, 1, 1});\r\n\r\n        // hint is correct\r\n        assert_inserted_at_position(5, a.insert(a.upper_bound(0) - 1, 0));\r\n        assert_all_requirements_and_equals(a, {-1, -1, 0, 0, 0, 0, 0, 1, 1});\r\n        assert_inserted_at_position(6, a.insert(a.upper_bound(0) - 1, 0));\r\n        assert_all_requirements_and_equals(a, {-1, -1, 0, 0, 0, 0, 0, 0, 1, 1});\r\n        assert_inserted_at_position(6, a.insert(a.begin() + 6, 0));\r\n        assert_all_requirements_and_equals(a, {-1, -1, 0, 0, 0, 0, 0, 0, 0, 1, 1});\r\n        assert_inserted_at_position(4, a.insert(a.begin() + 4, 0));\r\n        assert_all_requirements_and_equals(a, {-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1});\r\n        assert_inserted_at_position(2, a.insert(a.begin() + 2, 0));\r\n        assert_all_requirements_and_equals(a, {-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1});\r\n        assert_inserted_at_position(2, a.emplace_hint(a.lower_bound(0), 0));\r\n        assert_all_requirements_and_equals(a, {-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1});\r\n\r\n        // hint is less\r\n        assert_inserted_at_position(2, a.emplace_hint(a.lower_bound(0) - 1, 0));\r\n        assert_all_requirements_and_equals(a, {-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1});\r\n        assert_inserted_at_position(2, a.insert(a.begin() + 1, 0));\r\n        assert_all_requirements_and_equals(a, {-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1});\r\n        assert_inserted_at_position(2, a.insert(a.begin(), 0));\r\n        assert_all_requirements_and_equals(a, {-1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1});\r\n\r\n        assert(!problem_seen);\r\n\r\n        assert(13 == erase_if(a, [](const auto value) { return value == 0; }));\r\n        assert_all_requirements_and_equals(a, {-1, -1, 1, 1});\r\n    }\r\n}\r\n\r\nvoid test_comparator_application() {\r\n    // The set must rely on its comparator to do the comparisons.\r\n    struct incomparable {\r\n        int key;\r\n        bool operator<(const incomparable&) const  = delete;\r\n        bool operator==(const incomparable&) const = delete;\r\n    };\r\n\r\n    flat_set<incomparable, key_comparator> fs{{0}, {3}, {1}, {0}, {5}};\r\n    assert(fs.contains(0));\r\n    assert(!fs.contains(2));\r\n    fs.insert(fs.begin(), incomparable{4});\r\n    fs.insert(2);\r\n    assert(fs.contains(4));\r\n    assert(fs.contains(incomparable{2}));\r\n\r\n    assert(fs.lower_bound(3) == fs.lower_bound(incomparable{3}));\r\n    fs.erase(2);\r\n    assert(!fs.contains(incomparable{2}));\r\n}\r\n\r\nvoid test_insert_transparent() {\r\n    // For flat_set::insert([hint,]auto&&), the input should be unchanged if the set already\r\n    // contains an equivalent element.\r\n    struct detect_conversion {\r\n        int key;\r\n        mutable bool converted = false;\r\n\r\n        explicit operator int() const {\r\n            converted = true;\r\n            return key;\r\n        }\r\n    };\r\n\r\n    flat_set<int, key_comparator> fs{0, 3, 5};\r\n    assert_all_requirements_and_equals(fs, {0, 3, 5});\r\n    detect_conversion detector{3};\r\n\r\n    assert(!detector.converted);\r\n    fs.insert(detector /*3*/);\r\n    assert_all_requirements_and_equals(fs, {0, 3, 5});\r\n    assert(!detector.converted);\r\n\r\n    detector.key = 1;\r\n\r\n    assert(!detector.converted);\r\n    fs.insert(detector /*1*/);\r\n    assert_all_requirements_and_equals(fs, {0, 1, 3, 5});\r\n    assert(detector.converted);\r\n\r\n    detector.converted = false;\r\n\r\n    assert(!detector.converted);\r\n    fs.insert(fs.end(), detector /*1*/);\r\n    assert_all_requirements_and_equals(fs, {0, 1, 3, 5});\r\n    assert(!detector.converted);\r\n\r\n    detector.key = 2;\r\n\r\n    assert(!detector.converted);\r\n    fs.insert(fs.begin(), detector /*2*/);\r\n    assert_all_requirements_and_equals(fs, {0, 1, 2, 3, 5});\r\n    assert(detector.converted);\r\n}\r\n\r\nvoid test_insert_using_invalid_hint(mt19937_64& eng) {\r\n    vector<int> seq(200);\r\n\r\n    {\r\n        uniform_int_distribution<int> dist_seq(0, 20);\r\n        for (auto& val : seq) {\r\n            val = dist_seq(eng);\r\n        }\r\n    }\r\n\r\n    {\r\n        flat_multiset<int> with_hint;\r\n        flat_multiset<int> no_hint;\r\n        for (const auto& val : seq) {\r\n            uniform_int_distribution<int> dist_idx(0, static_cast<int>(with_hint.size()));\r\n            auto random_hint = with_hint.begin() + dist_idx(eng);\r\n            with_hint.insert(random_hint, val);\r\n            no_hint.insert(val);\r\n        }\r\n\r\n        assert(with_hint == no_hint);\r\n    }\r\n\r\n    {\r\n        flat_set<int> with_hint;\r\n        flat_set<int> no_hint;\r\n        for (const auto& val : seq) {\r\n            uniform_int_distribution<int> dist_idx(0, static_cast<int>(with_hint.size()));\r\n            auto random_hint = with_hint.begin() + dist_idx(eng);\r\n            with_hint.insert(random_hint, val);\r\n            no_hint.insert(val);\r\n        }\r\n\r\n        assert(with_hint == no_hint);\r\n    }\r\n}\r\n\r\nvoid test_insert_upper_bound(mt19937_64& eng) {\r\n    // For flat_multiset's single-element insertion, the key should be inserted before the upper_bound.\r\n    struct test_position {\r\n        int key;\r\n        int extra;\r\n        bool operator==(const test_position&) const = default;\r\n    };\r\n\r\n    uniform_int_distribution<int> dist_seq(0, 20);\r\n\r\n    vector<test_position> seq(200);\r\n    for (int e = 0; auto& [key, extra] : seq) {\r\n        key   = dist_seq(eng);\r\n        extra = e++;\r\n    }\r\n\r\n    flat_multiset<test_position, key_comparator> fs;\r\n    for (const auto& val : seq) {\r\n        fs.insert(val);\r\n    }\r\n\r\n    // The result should be identical to as if doing stable_sort on seq.\r\n    ranges::stable_sort(seq, key_comparator{});\r\n    assert(ranges::equal(fs, seq));\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_spaceship_operator() {\r\n    static constexpr bool multi  = _Is_specialization_v<T, flat_multiset>;\r\n    static constexpr bool invert = is_same_v<typename T::key_compare, greater<typename T::key_type>>;\r\n\r\n    T a{3, 2, 2, 1};\r\n    T b{1, 2, 3};\r\n    assert((a <=> b) == (multi ? (invert ? strong_ordering::greater : strong_ordering::less) : strong_ordering::equal));\r\n\r\n    T c{3, 2};\r\n    assert((c <=> b) == (invert ? strong_ordering::less : strong_ordering::greater));\r\n\r\n    T d{5, 6, 7, 7, 8, 9};\r\n    T e{5, 6, 7, 8, 100};\r\n    assert((d <=> e) == strong_ordering::less);\r\n\r\n    T f{1, 2, 3, 4};\r\n    assert((f <=> a) == strong_ordering::greater);\r\n\r\n    // also test equality\r\n    assert(f == f);\r\n    assert(!(f != f));\r\n    assert(!(f == a));\r\n    assert(f != a);\r\n}\r\n\r\ntemplate <class T>\r\nstruct proxy_comparator {\r\n    bool operator()(const T& lhs, const T& rhs) const {\r\n        return m_less ? (lhs < rhs) : (lhs > rhs);\r\n    }\r\n\r\n    bool m_less = true;\r\n};\r\n\r\nvoid test_non_static_comparator() {\r\n    flat_set<int, proxy_comparator<int>> a{3, 2, 2, 1};\r\n    assert_all_requirements_and_equals(a, {1, 2, 3});\r\n    flat_set<int, proxy_comparator<int>> b({-1, 5, 9, 9, 9, 9, 9}, proxy_comparator<int>{.m_less = false});\r\n    assert_all_requirements_and_equals(b, {9, 5, -1});\r\n\r\n    auto aBackup = a;\r\n    a            = b;\r\n    assert_all_requirements_and_equals(a, {9, 5, -1});\r\n    a.insert_range(vector{7, 7, 3, 3, 2});\r\n    assert_all_requirements_and_equals(a, {9, 7, 5, 3, 2, -1});\r\n\r\n    a = move(aBackup);\r\n    assert_all_requirements_and_equals(a, {1, 2, 3});\r\n\r\n    a.insert(-100);\r\n    assert_all_requirements_and_equals(a, {-100, 1, 2, 3});\r\n\r\n    a = b;\r\n    assert_all_requirements_and_equals(a, {9, 5, -1});\r\n\r\n    a.insert(7);\r\n    assert_all_requirements_and_equals(a, {9, 7, 5, -1});\r\n}\r\n\r\ntemplate <template <class...> class Set>\r\nvoid test_extract_1() {\r\n    // Test that the container will be emptied, even if the container's move ctor exits via an exception.\r\n\r\n    static bool will_throw = false;\r\n\r\n    class test_exception : public vector<int> {\r\n    private:\r\n        using base = vector<int>;\r\n\r\n    public:\r\n        using base::base;\r\n        test_exception(const test_exception&)            = default;\r\n        test_exception& operator=(const test_exception&) = default;\r\n        test_exception& operator=(test_exception&&)      = default;\r\n\r\n        test_exception(test_exception&& other) : base(static_cast<base&&>(other)) {\r\n            if (will_throw) {\r\n                throw 0; // will be caught by \"catch (...)\"\r\n            }\r\n        }\r\n    };\r\n\r\n    will_throw = false;\r\n    Set<int, less<int>, test_exception> fs{4, 3, 2, 1};\r\n    assert_all_requirements_and_equals(fs, {1, 2, 3, 4});\r\n    auto extr = move(fs).extract();\r\n    assert(ranges::equal(extr, vector{1, 2, 3, 4}));\r\n    assert_all_requirements_and_equals(fs, {}); // assert empty\r\n\r\n    fs = {4, 3, 2, 1};\r\n    assert_all_requirements_and_equals(fs, {1, 2, 3, 4});\r\n    try {\r\n        will_throw = true;\r\n        (void) move(fs).extract();\r\n    } catch (...) {\r\n        will_throw = false;\r\n        assert_all_requirements_and_equals(fs, {}); // assert empty\r\n        return;\r\n    }\r\n\r\n    assert(false);\r\n}\r\n\r\ntemplate <template <class...> class Set>\r\nvoid test_extract_2() {\r\n    // Test that the container will be emptied, even if the container's move ctor doesn't empty the container.\r\n\r\n    class always_copy : public vector<int> {\r\n    private:\r\n        using base = vector<int>;\r\n\r\n    public:\r\n        using base::base;\r\n        always_copy(const always_copy&)            = default;\r\n        always_copy& operator=(const always_copy&) = default;\r\n\r\n        // the move ctor and assignment will not empty the container.\r\n        always_copy(always_copy&& other) noexcept /* intentional */ : always_copy(as_const(other)) {}\r\n        always_copy& operator=(always_copy&& other) noexcept /* intentional */ {\r\n            return operator=(as_const(other));\r\n        }\r\n    };\r\n\r\n    Set<int, less<int>, always_copy> fs{4, 3, 2, 1};\r\n    assert_all_requirements_and_equals(fs, {1, 2, 3, 4});\r\n    auto extr = move(fs).extract();\r\n    assert(ranges::equal(extr, vector{1, 2, 3, 4}));\r\n    assert_all_requirements_and_equals(fs, {}); // assert empty\r\n}\r\n\r\nvoid test_invariant_robustness() {\r\n    static int copy_limit   = 2;\r\n    constexpr int unlimited = (numeric_limits<int>::max)();\r\n\r\n    struct odd_key {\r\n        static void countdown() {\r\n            if (copy_limit == unlimited) {\r\n                return;\r\n            }\r\n\r\n            if (--copy_limit < 0) {\r\n                throw 0; // will be caught by \"catch (...)\".\r\n            }\r\n        }\r\n\r\n        int key;\r\n\r\n        odd_key(int k = 0) : key(k) {}\r\n\r\n        bool operator==(const odd_key&) const = default;\r\n\r\n        odd_key(const odd_key& other) {\r\n            countdown();\r\n            key = other.key;\r\n        }\r\n\r\n        odd_key(odd_key&& other) {\r\n            countdown();\r\n            key = exchange(other.key, 0);\r\n        }\r\n\r\n        odd_key& operator=(const odd_key& other) {\r\n            countdown();\r\n            key = other.key;\r\n            return *this;\r\n        }\r\n\r\n        odd_key& operator=(odd_key&& other) {\r\n            countdown();\r\n            key = exchange(other.key, 0);\r\n            return *this;\r\n        }\r\n    };\r\n\r\n    class odd_container : public vector<odd_key> {\r\n    private:\r\n        using base = vector<odd_key>;\r\n\r\n    public:\r\n        using base::base;\r\n        odd_container(const odd_container&) = default;\r\n\r\n        // this copy assignment operator cannot provide the strong guarantee for `this`:\r\n        odd_container& operator=(const odd_container& other) {\r\n            resize(other.size());\r\n            copy(other.begin(), other.end(), begin());\r\n            return *this;\r\n        }\r\n\r\n        // this move ctor cannot provide the strong guarantee for `other`,\r\n        // and even if it is successful, it will leave the elements of `other` in a moved-from state:\r\n        odd_container(odd_container&& other) {\r\n            reserve(other.size());\r\n            for (auto& e : other) {\r\n                push_back(move(e));\r\n            }\r\n        }\r\n\r\n        // this move assignment operator cannot provide the strong guarantee for `this` and `other`,\r\n        // and even if it is successful, it will leave the elements of `other` in a moved-from state:\r\n        odd_container& operator=(odd_container&& other) {\r\n            resize(other.size());\r\n            move(other.begin(), other.end(), begin());\r\n            return *this;\r\n        }\r\n    };\r\n\r\n    using SetT = flat_set<odd_key, key_comparator, odd_container>;\r\n\r\n    // copy assignment\r\n    {\r\n        copy_limit = unlimited;\r\n        SetT fs1{0, 1, 2, 3, 4};\r\n        SetT fs2{5, 6, 7, 8, 9};\r\n\r\n        assert(ranges::equal(fs1, vector{0, 1, 2, 3, 4}, {}, &odd_key::key));\r\n        assert(ranges::equal(fs2, vector{5, 6, 7, 8, 9}, {}, &odd_key::key));\r\n\r\n        bool caught = false;\r\n        try {\r\n            copy_limit = 2;\r\n            fs1        = fs2; // will throw after copying 2 odd_key.\r\n        } catch (...) {\r\n            copy_limit = unlimited;\r\n            assert_all_requirements(fs1);\r\n            caught = true;\r\n        }\r\n        assert(caught);\r\n    }\r\n\r\n    // move ctor\r\n    {\r\n        copy_limit = unlimited;\r\n        SetT fs1{0, 1, 2, 3, 4};\r\n        SetT fs2{move(fs1)};\r\n\r\n        assert_all_requirements(fs1);\r\n        assert(ranges::equal(fs2, vector{0, 1, 2, 3, 4}, {}, &odd_key::key));\r\n\r\n        bool caught = false;\r\n        try {\r\n            copy_limit = 2;\r\n            SetT fs3{move(fs2)}; // will throw after moving 2 odd_key.\r\n        } catch (...) {\r\n            copy_limit = unlimited;\r\n            assert_all_requirements(fs2);\r\n            caught = true;\r\n        }\r\n        assert(caught);\r\n    }\r\n\r\n    // move assignment\r\n    {\r\n        copy_limit = unlimited;\r\n        SetT fs1{0, 1, 2, 3, 4};\r\n        SetT fs2;\r\n        SetT fs3{5, 6, 7, 8, 9};\r\n        fs2 = move(fs1);\r\n\r\n        assert_all_requirements(fs1);\r\n        assert(ranges::equal(fs2, vector{0, 1, 2, 3, 4}, {}, &odd_key::key));\r\n        assert(ranges::equal(fs3, vector{5, 6, 7, 8, 9}, {}, &odd_key::key));\r\n\r\n        bool caught = false;\r\n        try {\r\n            copy_limit = 2;\r\n            fs2        = move(fs3); // will throw after moving 2 odd_key.\r\n        } catch (...) {\r\n            copy_limit = unlimited;\r\n            assert_all_requirements(fs2);\r\n            assert_all_requirements(fs3);\r\n            caught = true;\r\n        }\r\n        assert(caught);\r\n    }\r\n}\r\n\r\nvoid test_erase_1() {\r\n    flat_set<int> fs{1};\r\n    assert(1 == fs.erase(1));\r\n    assert_all_requirements_and_equals(fs, {});\r\n    const int numbers[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\r\n    fs.insert_range(numbers);\r\n    assert_all_requirements_and_equals(fs, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9});\r\n    fs.insert_range(numbers);\r\n    assert_all_requirements_and_equals(fs, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9});\r\n    assert(0 == fs.erase(-1));\r\n    assert(0 == fs.erase(10));\r\n    assert_all_requirements_and_equals(fs, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9});\r\n    {\r\n        const auto iter = fs.erase(fs.begin() + 3, fs.begin() + 6);\r\n        assert(fs.begin() + 3 == iter);\r\n        assert(6 == *iter);\r\n        assert_all_requirements_and_equals(fs, {0, 1, 2, 6, 7, 8, 9});\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n    operator T() && {\r\n        return move(t);\r\n    }\r\n};\r\n\r\nstatic_assert(is_convertible_v<holder<flat_set<int>::const_iterator>, flat_set<int>::const_iterator>);\r\n\r\nvoid test_erase_2() {\r\n    using C = flat_set<int, less<>>;\r\n    C fs{0, 1, 2, 3};\r\n    assert_all_requirements_and_equals(fs, {0, 1, 2, 3});\r\n    // this should be allowed per N5032 [associative.reqmts.general]/7.23.2 and /122-125:\r\n    fs.erase(holder<C::const_iterator>{fs.cbegin()});\r\n    assert_all_requirements_and_equals(fs, {1, 2, 3});\r\n    fs.erase(holder<C::iterator>{fs.begin()});\r\n    assert_all_requirements_and_equals(fs, {2, 3});\r\n    int i = 2;\r\n    fs.erase(ref(i));\r\n    assert_all_requirements_and_equals(fs, {3});\r\n}\r\n\r\nnamespace test_erase_compile_time {\r\n    template <class Cont, class OtherKey>\r\n    concept can_erase_key = requires(Cont c, OtherKey key) {\r\n        { c.erase(key) } -> same_as<typename Cont::size_type>;\r\n    };\r\n    template <class Cont>\r\n    concept can_erase_iterator_holder = requires(Cont c) {\r\n        { c.erase(holder<typename Cont::const_iterator>{c.begin()}) } -> same_as<typename Cont::iterator>;\r\n    };\r\n\r\n    using C = flat_set<int>;\r\n    static_assert(same_as<C::iterator, decltype(declval<C>().erase(declval<C::iterator>()))>);\r\n    static_assert(same_as<C::iterator, decltype(declval<C>().erase(declval<holder<C::iterator>>()))>);\r\n    static_assert(same_as<C::iterator, decltype(declval<C>().erase(declval<C::const_iterator>()))>);\r\n    static_assert(same_as<C::iterator, decltype(declval<C>().erase(declval<holder<C::const_iterator>>()))>);\r\n    static_assert(same_as<C::iterator, decltype(declval<C>().erase(declval<C::iterator>(), declval<C::iterator>()))>);\r\n    static_assert(same_as<C::size_type, decltype(declval<C>().erase(declval<holder<int>>()))>);\r\n    static_assert(same_as<C::size_type, decltype(declval<C>().erase(declval<int>()))>);\r\n\r\n    // Note that std::less<T> is not transparent, while std::less<> and ranges::less are\r\n\r\n    // erase key_type\r\n    static_assert(can_erase_key<flat_set<int, less<int>>, int>);\r\n    static_assert(can_erase_key<flat_set<int, less<>>, int>);\r\n    static_assert(can_erase_key<flat_set<int, ranges::less>, int>);\r\n\r\n    // erase wrapped key_type\r\n    static_assert(!can_erase_key<flat_set<int, less<int>>, holder<int>>);\r\n    static_assert(can_erase_key<flat_set<int, less<>>, holder<int>>);\r\n    static_assert(can_erase_key<flat_set<int, ranges::less>, holder<int>>);\r\n\r\n    // erase wrapped iterator - the member function template returning size_type must not be selected\r\n    static_assert(can_erase_iterator_holder<flat_set<int, less<int>>>);\r\n    static_assert(can_erase_iterator_holder<flat_set<int, less<>>>);\r\n    static_assert(can_erase_iterator_holder<flat_set<int, ranges::less>>);\r\n} // namespace test_erase_compile_time\r\n\r\ntemplate <class C>\r\nvoid test_erase_if() {\r\n    constexpr int erased_result[]{1, 3};\r\n    C fs{1, 2, 3, 4};\r\n    erase_if(fs, [](int n) { return n % 2 == 0; });\r\n    assert(fs.size() == 2);\r\n    assert(ranges::equal(fs, erased_result));\r\n}\r\n\r\ntemplate <template <class...> class Set>\r\nvoid test_observers() {\r\n    struct lt_with_state {\r\n        int state = 0;\r\n        bool operator()(int l, int r) const {\r\n            return l < r;\r\n        }\r\n    };\r\n\r\n    using SetT = Set<int, lt_with_state>;\r\n\r\n    SetT fs;\r\n    static_assert(is_same_v<typename SetT::key_compare, typename SetT::value_compare>);\r\n    static_assert(is_same_v<decltype(as_const(fs).key_comp()), typename SetT::key_compare>);\r\n    static_assert(is_same_v<decltype(as_const(fs).value_comp()), typename SetT::value_compare>);\r\n    assert(fs.key_comp().state == 0);\r\n    assert(fs.value_comp().state == 0);\r\n\r\n    SetT fs2(lt_with_state{2});\r\n    assert(fs2.key_comp().state == 2);\r\n    assert(fs2.value_comp().state == 2);\r\n}\r\n\r\ntemplate <template <class...> class Set>\r\nvoid test_set_operations() {\r\n    using SetT           = Set<int>;\r\n    using iterator       = SetT::iterator;\r\n    using const_iterator = SetT::const_iterator;\r\n\r\n    SetT fs{3, 2, 11, 11, 3, 8, 11, 20};\r\n\r\n    static_assert(is_same_v<decltype(fs.find(0)), iterator>);\r\n    static_assert(is_same_v<decltype(as_const(fs).find(0)), const_iterator>);\r\n\r\n    static_assert(is_same_v<decltype(as_const(fs).count(0)), typename SetT::size_type>);\r\n    static_assert(is_same_v<decltype(as_const(fs).contains(0)), bool>);\r\n\r\n    static_assert(is_same_v<decltype(fs.lower_bound(0)), iterator>);\r\n    static_assert(is_same_v<decltype(as_const(fs).lower_bound(0)), const_iterator>);\r\n    static_assert(is_same_v<decltype(fs.upper_bound(0)), iterator>);\r\n    static_assert(is_same_v<decltype(as_const(fs).upper_bound(0)), const_iterator>);\r\n\r\n    static_assert(is_same_v<decltype(fs.equal_range(0)), pair<iterator, iterator>>);\r\n    static_assert(is_same_v<decltype(as_const(fs).equal_range(0)), pair<const_iterator, const_iterator>>);\r\n\r\n    if constexpr (_Is_specialization_v<SetT, flat_set>) {\r\n        // flat_set:\r\n        assert_all_requirements_and_equals(fs, {2, 3, 8, 11, 20});\r\n\r\n        assert(fs.find(3) == fs.begin() + 1);\r\n        assert(fs.find(4) == fs.end());\r\n\r\n        assert(fs.count(1) == 0);\r\n        assert(fs.count(11) == 1);\r\n        assert(fs.contains(8));\r\n        assert(!fs.contains(12));\r\n\r\n        assert(fs.lower_bound(-1) == fs.begin());\r\n        assert(fs.lower_bound(3) == fs.find(3));\r\n        assert(fs.lower_bound(19) == fs.find(20));\r\n        assert(fs.lower_bound(20) + 1 == fs.end());\r\n\r\n        assert(fs.upper_bound(-1) == fs.begin());\r\n        assert(fs.upper_bound(20) == fs.end());\r\n        assert(fs.lower_bound(2) + 2 == fs.upper_bound(3));\r\n        assert(fs.upper_bound(8) == fs.find(11));\r\n\r\n        auto [first, last] = fs.equal_range(3);\r\n        assert(first + 1 == last);\r\n        tie(first, last) = fs.equal_range(12);\r\n        assert(first == last);\r\n    } else {\r\n        // flat_multiset:\r\n        assert_all_requirements_and_equals(fs, {2, 3, 3, 8, 11, 11, 11, 20});\r\n\r\n        assert(fs.find(3) == fs.begin() + 1);\r\n        assert(fs.find(4) == fs.end());\r\n\r\n        assert(fs.count(1) == 0);\r\n        assert(fs.count(11) == 3);\r\n        assert(fs.contains(8));\r\n        assert(!fs.contains(12));\r\n\r\n        assert(fs.lower_bound(-1) == fs.begin());\r\n        assert(fs.lower_bound(3) == fs.find(3));\r\n        assert(fs.lower_bound(19) == fs.find(20));\r\n        assert(fs.lower_bound(11) + 4 == fs.end());\r\n\r\n        assert(fs.upper_bound(-1) == fs.begin());\r\n        assert(fs.upper_bound(20) == fs.end());\r\n        assert(fs.lower_bound(3) + 6 == fs.upper_bound(11));\r\n        assert(fs.upper_bound(11) == fs.find(20));\r\n\r\n        auto [first, last] = fs.equal_range(3);\r\n        assert(first + 2 == last);\r\n        tie(first, last) = fs.equal_range(12);\r\n        assert(first == last);\r\n    }\r\n}\r\n\r\ntemplate <template <class...> class Set>\r\nvoid test_set_operations_transparent() {\r\n    struct shouldnt_convert {\r\n        int key;\r\n        /* implicit */ [[noreturn]] operator int() const {\r\n            abort();\r\n        }\r\n    };\r\n\r\n    Set<int, key_comparator> fs{0, 3, 5};\r\n    assert_all_requirements_and_equals(fs, {0, 3, 5});\r\n\r\n    assert(fs.find(shouldnt_convert{0}) == fs.begin());\r\n    assert(fs.count(shouldnt_convert{3}) == 1);\r\n    assert(!fs.contains(shouldnt_convert{1}));\r\n    assert(fs.lower_bound(shouldnt_convert{-1}) == fs.begin());\r\n    assert(fs.lower_bound(shouldnt_convert{8}) == fs.end());\r\n    assert(fs.upper_bound(shouldnt_convert{2}) == fs.find(3));\r\n    assert(fs.equal_range(shouldnt_convert{5}) == (pair{fs.begin() + 2, fs.end()}));\r\n\r\n    // Also test const overloads:\r\n    const auto& cfs = fs;\r\n    assert(cfs.find(shouldnt_convert{0}) == cfs.begin());\r\n    assert(cfs.count(shouldnt_convert{3}) == 1);\r\n    assert(!cfs.contains(shouldnt_convert{1}));\r\n    assert(cfs.lower_bound(shouldnt_convert{-1}) == cfs.begin());\r\n    assert(cfs.lower_bound(shouldnt_convert{8}) == cfs.end());\r\n    assert(cfs.upper_bound(shouldnt_convert{2}) == cfs.find(3));\r\n    assert(cfs.equal_range(shouldnt_convert{5}) == (pair{cfs.begin() + 2, cfs.end()}));\r\n}\r\n\r\nnamespace test_throwing_swap {\r\n    struct unique_exception {};\r\n\r\n    template <class T>\r\n    struct throwing_less {\r\n        static bool operator()(const T& left, const T& right) {\r\n            return left < right;\r\n        }\r\n\r\n        bool throws_;\r\n    };\r\n\r\n    template <class T>\r\n    void swap(throwing_less<T>& lhs, throwing_less<T>& rhs) {\r\n        if (lhs.throws_ || rhs.throws_) {\r\n            throw unique_exception{};\r\n        }\r\n    }\r\n} // namespace test_throwing_swap\r\n\r\ntemplate <template <class...> class FlatSetCont, template <class...> class AdaptedCont>\r\nvoid test_throwing_compare_single() {\r\n    using test_throwing_swap::unique_exception;\r\n    using comparator = test_throwing_swap::throwing_less<int>;\r\n\r\n    using set_type = FlatSetCont<int, comparator, AdaptedCont<int, allocator<int>>>;\r\n    static_assert(!is_nothrow_swappable_v<set_type>);\r\n    {\r\n        set_type s1{{1, 2, 3}, comparator{false}};\r\n        set_type s2{{4, 5, 6}, comparator{false}};\r\n        s1.swap(s2);\r\n        assert(ranges::equal(s1, initializer_list<int>{4, 5, 6}));\r\n        assert(ranges::equal(s2, initializer_list<int>{1, 2, 3}));\r\n    }\r\n    {\r\n        set_type s1{{1, 2, 3}, comparator{false}};\r\n        set_type s2{{4, 5, 6}, comparator{false}};\r\n        swap(s1, s2);\r\n        assert(ranges::equal(s1, initializer_list<int>{4, 5, 6}));\r\n        assert(ranges::equal(s2, initializer_list<int>{1, 2, 3}));\r\n    }\r\n    {\r\n        set_type s1{{1, 2, 3}, comparator{false}};\r\n        set_type s2{{4, 5, 6}, comparator{false}};\r\n        ranges::swap(s1, s2);\r\n        assert(ranges::equal(s1, initializer_list<int>{4, 5, 6}));\r\n        assert(ranges::equal(s2, initializer_list<int>{1, 2, 3}));\r\n    }\r\n    {\r\n        set_type s1{{1, 2, 3}, comparator{true}};\r\n        set_type s2{{4, 5, 6}, comparator{false}};\r\n        try {\r\n            s1.swap(s2);\r\n            assert(false);\r\n        } catch (const unique_exception&) {\r\n            assert(s1.empty());\r\n            assert(s2.empty());\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n    }\r\n    {\r\n        set_type s1{{1, 2, 3}, comparator{true}};\r\n        set_type s2{{4, 5, 6}, comparator{false}};\r\n        try {\r\n            swap(s1, s2);\r\n            assert(false);\r\n        } catch (const unique_exception&) {\r\n            assert(s1.empty());\r\n            assert(s2.empty());\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n    }\r\n    {\r\n        set_type s1{{1, 2, 3}, comparator{true}};\r\n        set_type s2{{4, 5, 6}, comparator{false}};\r\n        try {\r\n            ranges::swap(s1, s2);\r\n            assert(false);\r\n        } catch (const unique_exception&) {\r\n            assert(s1.empty());\r\n            assert(s2.empty());\r\n        } catch (...) {\r\n            assert(false);\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_throwing_compare_swap() {\r\n    test_throwing_compare_single<flat_set, vector>();\r\n    test_throwing_compare_single<flat_set, deque>();\r\n\r\n    test_throwing_compare_single<flat_multiset, vector>();\r\n    test_throwing_compare_single<flat_multiset, deque>();\r\n}\r\n\r\n// Test heterogeneous lookup and erase operations when the compare object does not satisfy strict_weak_order (GH-5992)\r\nenum class strange_int {};\r\n\r\n// No overload divless::operator()(strange_int, strange_int), does not satisfy std::strict_weak_order\r\nstruct divless {\r\n    using is_transparent = void;\r\n\r\n    template <class X, class Y>\r\n        requires (is_same_v<X, int> && is_same_v<Y, strange_int>)\r\n              || (is_same_v<X, strange_int> && is_same_v<Y, int>) || (is_same_v<X, int> && is_same_v<Y, int>)\r\n    constexpr bool operator()(X x, Y y) const noexcept {\r\n        if constexpr (is_same_v<X, strange_int>) {\r\n            return static_cast<int>(x) < y / 10;\r\n        } else if constexpr (is_same_v<Y, strange_int>) {\r\n            return x / 10 < static_cast<int>(y);\r\n        } else {\r\n            return x < y;\r\n        }\r\n    }\r\n};\r\nstatic_assert(!strict_weak_order<divless, int, strange_int>);\r\n\r\n// ranges:: algorithms can't be called with divless compare, as it does not satisfy std::strict_weak_order\r\nvoid test_non_strict_weak_order_compare() {\r\n    {\r\n        flat_set<int, divless> cont{1, 2, 11, 12};\r\n        assert(2 == cont.count(strange_int{0}));\r\n\r\n        assert(cont.contains(strange_int{0}));\r\n        assert(!cont.contains(strange_int{2}));\r\n\r\n        assert(cont.begin() + 2 == cont.lower_bound(strange_int{1}));\r\n        assert(cont.begin() + 2 == cont.upper_bound(strange_int{0}));\r\n\r\n        const auto [first, last] = cont.equal_range(strange_int{0});\r\n        assert(first == cont.begin());\r\n        assert(last == cont.begin() + 2);\r\n\r\n        assert(cont.begin() + 2 == cont.find(strange_int{1}));\r\n        assert(cont.end() == cont.find(strange_int{3}));\r\n\r\n        assert(2 == cont.erase(strange_int{0}));\r\n        assert_all_requirements_and_equals(cont, {11, 12});\r\n    }\r\n    {\r\n        flat_multiset<int, divless> cont{1, 2, 11, 12};\r\n        assert(2 == cont.count(strange_int{0}));\r\n\r\n        assert(cont.contains(strange_int{0}));\r\n        assert(!cont.contains(strange_int{2}));\r\n\r\n        assert(cont.begin() + 2 == cont.lower_bound(strange_int{1}));\r\n        assert(cont.begin() + 2 == cont.upper_bound(strange_int{0}));\r\n\r\n        const auto [first, last] = cont.equal_range(strange_int{0});\r\n        assert(first == cont.begin());\r\n        assert(last == cont.begin() + 2);\r\n\r\n        assert(cont.begin() + 2 == cont.find(strange_int{1}));\r\n        assert(cont.end() == cont.find(strange_int{3}));\r\n\r\n        assert(2 == cont.erase(strange_int{0}));\r\n        assert_all_requirements_and_equals(cont, {11, 12});\r\n    }\r\n}\r\n\r\nvoid run_normal_tests() {\r\n    mt19937_64 eng(42);\r\n\r\n    test_constructors<vector<int>>();\r\n    test_constructors<deque<int>>();\r\n    test_allocator_extended_constructors<iterator_pair_construction::allocator_first>();\r\n    test_allocator_extended_constructors<iterator_pair_construction::allocator_last>();\r\n\r\n    test_iterators_and_capacity<flat_set<int>>();\r\n    test_iterators_and_capacity<flat_multiset<int>>();\r\n    test_iterators_and_capacity<flat_set<int, less<int>, deque<int>>>();\r\n    test_iterators_and_capacity<flat_multiset<int, less<int>, deque<int>>>();\r\n\r\n    test_always_reversible<flat_set>();\r\n    test_always_reversible<flat_multiset>();\r\n\r\n    test_insert_1<vector<int>>();\r\n    test_insert_1<deque<int>>();\r\n    test_insert_2<vector<int>>();\r\n    test_insert_2<deque<int>>();\r\n    test_insert_hint_is_respected<vector<int>>();\r\n    test_insert_hint_is_respected<deque<int>>();\r\n    test_comparator_application();\r\n    test_insert_transparent();\r\n    test_insert_using_invalid_hint(eng);\r\n    test_insert_upper_bound(eng);\r\n\r\n    test_spaceship_operator<flat_set<int>>();\r\n    test_spaceship_operator<flat_multiset<int>>();\r\n    test_spaceship_operator<flat_set<int, greater<int>>>();\r\n    test_spaceship_operator<flat_multiset<int, greater<int>>>();\r\n    test_spaceship_operator<flat_set<int, less<int>, deque<int>>>();\r\n    test_spaceship_operator<flat_multiset<int, less<int>, deque<int>>>();\r\n    test_spaceship_operator<flat_set<int, greater<int>, deque<int>>>();\r\n    test_spaceship_operator<flat_multiset<int, greater<int>, deque<int>>>();\r\n\r\n    test_non_static_comparator();\r\n\r\n    test_extract_1<flat_set>();\r\n    test_extract_1<flat_multiset>();\r\n    test_extract_2<flat_set>();\r\n    test_extract_2<flat_multiset>();\r\n\r\n    test_invariant_robustness();\r\n    test_erase_1();\r\n    test_erase_2();\r\n\r\n    test_erase_if<flat_set<int>>();\r\n    test_erase_if<flat_multiset<int>>();\r\n\r\n    test_observers<flat_set>();\r\n    test_observers<flat_multiset>();\r\n\r\n    test_set_operations<flat_set>();\r\n    test_set_operations<flat_multiset>();\r\n    test_set_operations_transparent<flat_set>();\r\n    test_set_operations_transparent<flat_multiset>();\r\n\r\n    test_throwing_compare_swap();\r\n    test_non_strict_weak_order_compare();\r\n}\r\n\r\nenum class cont_type { multi, unique };\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_construct_unsorted_initializer_list() {\r\n    using C = conditional_t<type == cont_type::unique, flat_set<int>, flat_multiset<int>>;\r\n    const conditional_t<type == cont_type::unique, sorted_unique_t, sorted_equivalent_t> sorted;\r\n    C cont(sorted, {137, 42, 3337, 15});\r\n}\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_construct_unsorted_iter_iter() {\r\n    using C = conditional_t<type == cont_type::unique, flat_set<int>, flat_multiset<int>>;\r\n    const conditional_t<type == cont_type::unique, sorted_unique_t, sorted_equivalent_t> sorted;\r\n    typename C::container_type values{137, 42, 3337, 15};\r\n    C cont(sorted, values.begin(), values.end());\r\n}\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_construct_unsorted_container() {\r\n    using C = conditional_t<type == cont_type::unique, flat_set<int>, flat_multiset<int>>;\r\n    const conditional_t<type == cont_type::unique, sorted_unique_t, sorted_equivalent_t> sorted;\r\n    typename C::container_type values{137, 42, 3337, 15};\r\n    C cont(sorted, values);\r\n}\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_replace_unsorted_container() {\r\n    using C = conditional_t<type == cont_type::unique, flat_set<int>, flat_multiset<int>>;\r\n    C cont;\r\n    cont.replace({137, 42, 3337, 15});\r\n}\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_insert_unsorted_iter_iter() {\r\n    using C = conditional_t<type == cont_type::unique, flat_set<int>, flat_multiset<int>>;\r\n    const conditional_t<type == cont_type::unique, sorted_unique_t, sorted_equivalent_t> sorted;\r\n    typename C::container_type values{137, 42, 3337, 15};\r\n    C cont;\r\n    cont.insert(sorted, values.begin(), values.end());\r\n}\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_insert_unsorted_range() {\r\n    using C = conditional_t<type == cont_type::unique, flat_set<int>, flat_multiset<int>>;\r\n    const conditional_t<type == cont_type::unique, sorted_unique_t, sorted_equivalent_t> sorted;\r\n    typename C::container_type values{137, 42, 3337, 15};\r\n    C cont;\r\n    cont.insert_range(sorted, values);\r\n}\r\n\r\ntemplate <cont_type type>\r\nvoid test_death_insert_unsorted_initializer_list() {\r\n    using C = conditional_t<type == cont_type::unique, flat_set<int>, flat_multiset<int>>;\r\n    const conditional_t<type == cont_type::unique, sorted_unique_t, sorted_equivalent_t> sorted;\r\n    C cont;\r\n    cont.insert(sorted, {137, 42, 3337, 15});\r\n}\r\n\r\nvoid test_death_construct_duplicates_initializer_list() {\r\n    using C = flat_set<int>;\r\n    C cont(sorted_unique, {42, 137, 137, 3337});\r\n}\r\n\r\nvoid test_death_construct_duplicates_iter_iter() {\r\n    using C = flat_set<int>;\r\n    C::container_type values{42, 137, 137, 3337};\r\n    C cont(sorted_unique, values.begin(), values.end());\r\n}\r\n\r\nvoid test_death_construct_duplicates_container() {\r\n    using C = flat_set<int>;\r\n    C::container_type values{42, 137, 137, 3337};\r\n    C cont(sorted_unique, values);\r\n}\r\n\r\nvoid test_death_replace_duplicates_container() {\r\n    using C = flat_set<int>;\r\n    C cont;\r\n    cont.replace({42, 137, 137, 3337});\r\n}\r\n\r\nvoid test_death_insert_duplicates_iter_iter() {\r\n    using C = flat_set<int>;\r\n    C::container_type values{42, 137, 137, 3337};\r\n    C cont;\r\n    cont.insert(sorted_unique, values.begin(), values.end());\r\n}\r\n\r\nvoid test_death_insert_duplicates_range() {\r\n    using C = flat_set<int>;\r\n    C::container_type values{42, 137, 137, 3337};\r\n    C cont;\r\n    cont.insert_range(sorted_unique, values);\r\n}\r\n\r\nvoid test_death_insert_duplicates_initializer_list() {\r\n    using C = flat_set<int>;\r\n    C cont;\r\n    cont.insert(sorted_unique, {42, 137, 137, 3337});\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec([] { run_normal_tests(); });\r\n\r\n#if defined(_DEBUG)\r\n    exec.add_death_tests({\r\n\r\n        // Tests shared between flat_set and flat_map - violation of sorted elements\r\n        test_death_construct_unsorted_initializer_list<cont_type::unique>,\r\n        test_death_construct_unsorted_initializer_list<cont_type::multi>,\r\n        test_death_construct_unsorted_iter_iter<cont_type::unique>,\r\n        test_death_construct_unsorted_iter_iter<cont_type::multi>,\r\n        test_death_construct_unsorted_container<cont_type::unique>,\r\n        test_death_construct_unsorted_container<cont_type::multi>,\r\n        test_death_replace_unsorted_container<cont_type::unique>,\r\n        test_death_replace_unsorted_container<cont_type::multi>,\r\n        test_death_insert_unsorted_iter_iter<cont_type::unique>,\r\n        test_death_insert_unsorted_iter_iter<cont_type::multi>,\r\n        test_death_insert_unsorted_range<cont_type::unique>,\r\n        test_death_insert_unsorted_range<cont_type::multi>,\r\n        test_death_insert_unsorted_initializer_list<cont_type::unique>,\r\n        test_death_insert_unsorted_initializer_list<cont_type::multi>,\r\n\r\n        // Tests shared between flat_set and flat_map - violation of unique elements\r\n        test_death_construct_duplicates_initializer_list,\r\n        test_death_construct_duplicates_iter_iter,\r\n        test_death_construct_duplicates_container,\r\n        test_death_replace_duplicates_container,\r\n        test_death_insert_duplicates_iter_iter,\r\n        test_death_insert_duplicates_range,\r\n        test_death_insert_duplicates_initializer_list,\r\n    });\r\n#endif // defined(_DEBUG)\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1223R5_ranges_alg_find_last/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1223R5_ranges_alg_find_last/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::find_last(borrowed<false>{}, 42)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::find_last(borrowed<true>{}, 42)), ranges::subrange<int*>>);\r\n\r\ntemplate <class T, class U>\r\nconstexpr void check_value(const T& found, const U& value) {\r\n    if constexpr (same_as<T, P>) {\r\n        assert(found.first == value);\r\n        assert(found.second == 1729);\r\n    } else {\r\n        assert(found.peek().first == value);\r\n        assert(found.peek().second == 1729);\r\n    }\r\n}\r\n\r\nstruct instantiator {\r\n    static constexpr P haystack[6] = {{0, 42}, {2, 42}, {4, 42}, {0, 1729}, {2, 1729}, {4, 1729}};\r\n\r\n    template <ranges::forward_range Read>\r\n    static constexpr void call() {\r\n        using ranges::find_last, ranges::common_range, ranges::iterator_t;\r\n\r\n        for (const auto& [value, _] : haystack) {\r\n            { // Validate range overload [found case]\r\n                Read wrapped_input{haystack};\r\n                const auto result = find_last(wrapped_input, value, get_first);\r\n                static_assert(same_as<decltype(result), const ranges::subrange<iterator_t<Read>>>);\r\n                check_value(result.front(), value);\r\n            }\r\n            { // Validate iterator + sentinel overload [found case]\r\n                Read wrapped_input{haystack};\r\n                const auto result = find_last(wrapped_input.begin(), wrapped_input.end(), value, get_first);\r\n                static_assert(same_as<decltype(result), const ranges::subrange<iterator_t<Read>>>);\r\n                check_value(result.front(), value);\r\n            }\r\n        }\r\n        { // Validate range overload [not found case]\r\n            Read wrapped_input{haystack};\r\n            auto result = find_last(wrapped_input, 42, get_first);\r\n            static_assert(same_as<iterator_t<decltype(result)>, iterator_t<Read>>);\r\n            static_assert(common_range<decltype(result)>);\r\n            assert(result.begin() == wrapped_input.end());\r\n        }\r\n        { // Validate iterator + sentinel overload [not found case]\r\n            Read wrapped_input{haystack};\r\n            auto result = find_last(wrapped_input.begin(), wrapped_input.end(), 42, get_first);\r\n            static_assert(same_as<iterator_t<decltype(result)>, iterator_t<Read>>);\r\n            static_assert(common_range<decltype(result)>);\r\n            assert(result.begin() == wrapped_input.end());\r\n        }\r\n        { // Validate empty range\r\n            Read wrapped_empty{span<P, 0>{}};\r\n            auto iter_result  = find_last(wrapped_empty.begin(), wrapped_empty.end(), 0, get_first);\r\n            auto range_result = find_last(wrapped_empty, 0, get_first);\r\n            assert(iter_result.begin() == wrapped_empty.end());\r\n            assert(range_result.begin() == wrapped_empty.end());\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_fwd<instantiator, const P>(), true));\r\n    test_fwd<instantiator, const P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1223R5_ranges_alg_find_last_if/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1223R5_ranges_alg_find_last_if/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto matches = [](const int val) { return val == 42; };\r\nconstexpr auto equals  = [](auto x) { return [x](auto&& y) { return y == x; }; };\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::find_last_if(borrowed<false>{}, matches)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::find_last_if(borrowed<true>{}, matches)), ranges::subrange<int*>>);\r\n\r\ntemplate <class T, class U>\r\nconstexpr void check_value(const T& found, const U& value) {\r\n    if constexpr (same_as<T, P>) {\r\n        assert(found.first == value);\r\n        assert(found.second == 1729);\r\n    } else {\r\n        assert(found.peek().first == value);\r\n        assert(found.peek().second == 1729);\r\n    }\r\n}\r\n\r\nstruct instantiator {\r\n    static constexpr P haystack[6] = {{0, 42}, {2, 42}, {4, 42}, {0, 1729}, {2, 1729}, {4, 1729}};\r\n\r\n    template <ranges::forward_range Read>\r\n    static constexpr void call() {\r\n        using ranges::find_last_if, ranges::common_range, ranges::iterator_t;\r\n\r\n        for (const auto& [value, _] : haystack) {\r\n            { // Validate range overload [found case]\r\n                Read wrapped_input{haystack};\r\n                const auto result = find_last_if(wrapped_input, equals(value), get_first);\r\n                static_assert(same_as<decltype(result), const ranges::subrange<iterator_t<Read>>>);\r\n                check_value(result.front(), value);\r\n            }\r\n            { // Validate iterator + sentinel overload [found case]\r\n                Read wrapped_input{haystack};\r\n                const auto result = find_last_if(wrapped_input.begin(), wrapped_input.end(), equals(value), get_first);\r\n                static_assert(same_as<decltype(result), const ranges::subrange<iterator_t<Read>>>);\r\n                check_value(result.front(), value);\r\n            }\r\n        }\r\n        { // Validate range overload [not found case]\r\n            Read wrapped_input{haystack};\r\n            auto result = find_last_if(wrapped_input, equals(42), get_first);\r\n            static_assert(same_as<iterator_t<decltype(result)>, iterator_t<Read>>);\r\n            assert(result.begin() == wrapped_input.end());\r\n        }\r\n        { // Validate iterator + sentinel overload [not found case]\r\n            Read wrapped_input{haystack};\r\n            auto result = find_last_if(wrapped_input.begin(), wrapped_input.end(), equals(42), get_first);\r\n            static_assert(same_as<iterator_t<decltype(result)>, iterator_t<Read>>);\r\n            assert(result.begin() == wrapped_input.end());\r\n        }\r\n        { // Validate empty range\r\n            Read wrapped_empty{span<P, 0>{}};\r\n            auto iter_result  = find_last_if(wrapped_empty.begin(), wrapped_empty.end(), equals(0), get_first);\r\n            auto range_result = find_last_if(wrapped_empty, equals(0), get_first);\r\n            assert(iter_result.begin() == wrapped_empty.end());\r\n            assert(range_result.begin() == wrapped_empty.end());\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_fwd<instantiator, const P>(), true));\r\n    test_fwd<instantiator, const P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1223R5_ranges_alg_find_last_if_not/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1223R5_ranges_alg_find_last_if_not/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\nusing P = pair<int, int>;\r\n\r\nconstexpr auto not_matches = [](const int val) { return val != 42; };\r\nconstexpr auto not_equals  = [](auto x) { return [x](auto&& y) { return y != x; }; };\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::find_last_if_not(borrowed<false>{}, not_matches)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::find_last_if_not(borrowed<true>{}, not_matches)), ranges::subrange<int*>>);\r\n\r\ntemplate <class T, class U>\r\nconstexpr void check_value(const T& found, const U& value) {\r\n    if constexpr (same_as<T, P>) {\r\n        assert(found.first == value);\r\n        assert(found.second == 1729);\r\n    } else {\r\n        assert(found.peek().first == value);\r\n        assert(found.peek().second == 1729);\r\n    }\r\n}\r\n\r\nstruct instantiator {\r\n    static constexpr P haystack[6] = {{0, 42}, {2, 42}, {4, 42}, {0, 1729}, {2, 1729}, {4, 1729}};\r\n\r\n    template <ranges::forward_range Read>\r\n    static constexpr void call() {\r\n        using ranges::find_last_if_not, ranges::common_range, ranges::iterator_t;\r\n\r\n        for (const auto& [value, _] : haystack) {\r\n            { // Validate range overload [found case]\r\n                Read wrapped_input{haystack};\r\n                const auto result = find_last_if_not(wrapped_input, not_equals(value), get_first);\r\n                static_assert(same_as<decltype(result), const ranges::subrange<iterator_t<Read>>>);\r\n                check_value(result.front(), value);\r\n            }\r\n            { // Validate iterator + sentinel overload [found case]\r\n                Read wrapped_input{haystack};\r\n                const auto result =\r\n                    find_last_if_not(wrapped_input.begin(), wrapped_input.end(), not_equals(value), get_first);\r\n                static_assert(same_as<decltype(result), const ranges::subrange<iterator_t<Read>>>);\r\n                check_value(result.front(), value);\r\n            }\r\n        }\r\n        { // Validate range overload [not found case]\r\n            Read wrapped_input{haystack};\r\n            auto result = find_last_if_not(wrapped_input, not_equals(42), get_first);\r\n            static_assert(same_as<iterator_t<decltype(result)>, iterator_t<Read>>);\r\n            assert(result.begin() == wrapped_input.end());\r\n        }\r\n        { // Validate iterator + sentinel overload [not found case]\r\n            Read wrapped_input{haystack};\r\n            auto result = find_last_if_not(wrapped_input.begin(), wrapped_input.end(), not_equals(42), get_first);\r\n            static_assert(same_as<iterator_t<decltype(result)>, iterator_t<Read>>);\r\n            assert(result.begin() == wrapped_input.end());\r\n        }\r\n        { // Validate empty range\r\n            Read wrapped_empty{span<P, 0>{}};\r\n            auto iter_result  = find_last_if_not(wrapped_empty.begin(), wrapped_empty.end(), not_equals(0), get_first);\r\n            auto range_result = find_last_if_not(wrapped_empty, not_equals(0), get_first);\r\n            assert(iter_result.begin() == wrapped_empty.end());\r\n            assert(range_result.begin() == wrapped_empty.end());\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_fwd<instantiator, const P>(), true));\r\n    test_fwd<instantiator, const P>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1272R4_byteswap/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1272R4_byteswap/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <bit>\r\n#include <cassert>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename T>\r\nconstexpr bool test_byteswap(const auto src, const auto result) {\r\n    static_assert(noexcept(byteswap(T{})));\r\n    return byteswap(static_cast<T>(src)) == static_cast<T>(result);\r\n}\r\n\r\nconstexpr bool test_byteswap_all_types() {\r\n    assert(test_byteswap<bool>(true, true));\r\n\r\n    assert(test_byteswap<char>(0x13, 0x13));\r\n    assert(test_byteswap<signed char>(0x13, 0x13));\r\n    assert(test_byteswap<unsigned char>(0x13, 0x13));\r\n#ifdef __cpp_char8_t\r\n    assert(test_byteswap<char8_t>(0x13, 0x13));\r\n#endif\r\n\r\n    assert(test_byteswap<short>(0xAC34, 0x34AC));\r\n    assert(test_byteswap<unsigned short>(0xAC34, 0x34AC));\r\n    assert(test_byteswap<char16_t>(0xAC34, 0x34AC));\r\n    assert(test_byteswap<wchar_t>(0xAC34, 0x34AC));\r\n\r\n    assert(test_byteswap<int>(0x1234ABCD, 0xCDAB3412));\r\n    assert(test_byteswap<unsigned int>(0x1234ABCD, 0xCDAB3412));\r\n    assert(test_byteswap<long>(0x1234ABCD, 0xCDAB3412));\r\n    assert(test_byteswap<unsigned long>(0x1234ABCD, 0xCDAB3412));\r\n    assert(test_byteswap<char32_t>(0x1234ABCD, 0xCDAB3412));\r\n\r\n    assert(test_byteswap<long long>(0x1234567890ABCDEF, 0xEFCDAB9078563412));\r\n    assert(test_byteswap<unsigned long long>(0x1234567890ABCDEF, 0xEFCDAB9078563412));\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(test_byteswap_all_types());\r\n\r\nint main() {\r\n    test_byteswap_all_types();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1423R3_char8_t_remediation/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1423R3_char8_t_remediation/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_CXX20_U8PATH_DEPRECATION_WARNING 1\r\n#include <filesystem>\r\n#include <ostream>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <class Stream, class charT, class = void>\r\nconstexpr bool stream_insertable = false;\r\ntemplate <class Stream, class charT>\r\nconstexpr bool\r\n    stream_insertable<Stream, charT, std::void_t<decltype(std::declval<Stream&>() << std::declval<charT>())>> = true;\r\n\r\nSTATIC_ASSERT(stream_insertable<std::ostream, int>);\r\nSTATIC_ASSERT(stream_insertable<std::ostream, const int>);\r\nSTATIC_ASSERT(stream_insertable<std::ostream, int&>);\r\nSTATIC_ASSERT(stream_insertable<std::ostream, const int&>);\r\n\r\ntemplate <class Stream, class charT>\r\nconstexpr bool test_stream_insertion() {\r\n    // validate that expressions of type (possibly-const) charT and (possibly-const) charT* (possibly-const) are\r\n    // equivalently insertable into Stream\r\n    constexpr bool result = stream_insertable<Stream, charT>;\r\n    STATIC_ASSERT(stream_insertable<Stream, const charT> == result);\r\n    STATIC_ASSERT(stream_insertable<Stream, charT&> == result);\r\n    STATIC_ASSERT(stream_insertable<Stream, const charT&> == result);\r\n\r\n    using pointer = charT*;\r\n    STATIC_ASSERT(stream_insertable<Stream, pointer> == result);\r\n    STATIC_ASSERT(stream_insertable<Stream, const pointer> == result);\r\n    STATIC_ASSERT(stream_insertable<Stream, pointer&> == result);\r\n    STATIC_ASSERT(stream_insertable<Stream, const pointer&> == result);\r\n\r\n    using const_pointer = const charT*;\r\n    STATIC_ASSERT(stream_insertable<Stream, const_pointer> == result);\r\n    STATIC_ASSERT(stream_insertable<Stream, const const_pointer> == result);\r\n    STATIC_ASSERT(stream_insertable<Stream, const_pointer&> == result);\r\n    STATIC_ASSERT(stream_insertable<Stream, const const_pointer&> == result);\r\n\r\n    return result;\r\n}\r\n\r\n// Control cases\r\nSTATIC_ASSERT(test_stream_insertion<std::ostream, char>());\r\nSTATIC_ASSERT(test_stream_insertion<std::wostream, wchar_t>());\r\n\r\n#ifdef __cpp_char8_t\r\nSTATIC_ASSERT(!test_stream_insertion<std::ostream, char8_t>());\r\nSTATIC_ASSERT(!test_stream_insertion<std::wostream, char8_t>());\r\n#endif // __cpp_char8_t\r\n\r\n#ifdef _NATIVE_WCHAR_T_DEFINED\r\nSTATIC_ASSERT(test_stream_insertion<std::ostream, wchar_t>() == !_HAS_CXX20);\r\n#endif // _NATIVE_WCHAR_T_DEFINED\r\nSTATIC_ASSERT(test_stream_insertion<std::ostream, char16_t>() == !_HAS_CXX20);\r\nSTATIC_ASSERT(test_stream_insertion<std::ostream, char32_t>() == !_HAS_CXX20);\r\nSTATIC_ASSERT(test_stream_insertion<std::wostream, char16_t>() == !_HAS_CXX20);\r\nSTATIC_ASSERT(test_stream_insertion<std::wostream, char32_t>() == !_HAS_CXX20);\r\n\r\n#if _HAS_CXX17 && defined(__cpp_char8_t)\r\nvoid test_u8path() {\r\n    (void) std::filesystem::u8path(u8\"a\");\r\n    const std::basic_string_view sv{u8\"a\"};\r\n    (void) std::filesystem::u8path(sv);\r\n    (void) std::filesystem::u8path(sv.begin(), sv.end());\r\n}\r\n#endif // _HAS_CXX17 && defined(__cpp_char8_t)\r\n"
  },
  {
    "path": "tests/std/tests/P1425R4_queue_stack_constructors/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1425R4_queue_stack_constructors/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <memory>\r\n#include <queue>\r\n#include <set>\r\n#include <stack>\r\n#include <type_traits>\r\n#include <vector>\r\nusing namespace std;\r\n\r\nconstexpr int some_data[]       = {0, 1, 2, 3, 4, 5};\r\nconstexpr int additional_data[] = {6, 7, 8, 9, 10, 11};\r\n\r\ntemplate <typename T>\r\nstruct custom_allocator {\r\n    using value_type = T;\r\n\r\n    custom_allocator() noexcept = default;\r\n    template <typename U>\r\n    custom_allocator(const custom_allocator<U>&) noexcept {}\r\n\r\n    T* allocate(const size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* const p, const size_t n) noexcept {\r\n        allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class U>\r\n    bool operator==(const custom_allocator<U>&) const noexcept {\r\n        return true;\r\n    }\r\n\r\n#if !_HAS_CXX20\r\n    template <class U>\r\n    bool operator!=(const custom_allocator<U>&) const noexcept {\r\n        return false;\r\n    }\r\n#endif // !_HAS_CXX20\r\n};\r\n\r\ntemplate <class Range>\r\nvoid test_container() {\r\n    Range range{begin(some_data), end(some_data)};\r\n\r\n    int result;\r\n#if _HAS_CXX23\r\n    stack s1(range.begin(), range.end());\r\n    static_assert(is_same_v<decltype(s1), stack<int, deque<int, allocator<int>>>>);\r\n    assert(s1.size() == size(some_data));\r\n    result = 5;\r\n    while (!s1.empty()) {\r\n        assert(s1.top() == result--);\r\n        s1.pop();\r\n    }\r\n\r\n    stack s2(range.begin(), range.end(), custom_allocator<int>{});\r\n    static_assert(is_same_v<decltype(s2), stack<int, deque<int, custom_allocator<int>>>>);\r\n    assert(s2.size() == size(some_data));\r\n    result = 5;\r\n    while (!s2.empty()) {\r\n        assert(s2.top() == result--);\r\n        s2.pop();\r\n    }\r\n\r\n    queue q1(range.begin(), range.end());\r\n    static_assert(is_same_v<decltype(q1), queue<int, deque<int, allocator<int>>>>);\r\n    assert(q1.size() == size(some_data));\r\n    result = 0;\r\n    while (!q1.empty()) {\r\n        assert(q1.front() == result++);\r\n        q1.pop();\r\n    }\r\n\r\n    queue q2(range.begin(), range.end(), custom_allocator<int>{});\r\n    static_assert(is_same_v<decltype(q2), queue<int, deque<int, custom_allocator<int>>>>);\r\n    assert(q2.size() == size(some_data));\r\n    result = 0;\r\n    while (!q2.empty()) {\r\n        assert(q2.front() == result++);\r\n        q2.pop();\r\n    }\r\n#endif // _HAS_CXX23\r\n\r\n#if _HAS_CXX17\r\n    priority_queue pq1(range.begin(), range.end());\r\n    static_assert(is_same_v<decltype(pq1), priority_queue<int, vector<int>, less<int>>>);\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n    priority_queue<int, vector<int>, less<int>> pq1(range.begin(), range.end());\r\n#endif // !_HAS_CXX17\r\n    assert(pq1.size() == size(some_data));\r\n    result = 5;\r\n    while (!pq1.empty()) {\r\n        assert(pq1.top() == result--);\r\n        pq1.pop();\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    priority_queue pq2(range.begin(), range.end(), greater<int>{});\r\n    static_assert(is_same_v<decltype(pq2), priority_queue<int, vector<int>, greater<int>>>);\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n    priority_queue<int, vector<int>, greater<int>> pq2(range.begin(), range.end(), greater<int>{});\r\n#endif // !_HAS_CXX17\r\n    assert(pq2.size() == size(some_data));\r\n    result = 0;\r\n    while (!pq2.empty()) {\r\n        assert(pq2.top() == result++);\r\n        pq2.pop();\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    priority_queue pq3(range.begin(), range.end(), custom_allocator<int>{});\r\n    static_assert(is_same_v<decltype(pq3), priority_queue<int, vector<int, custom_allocator<int>>, less<int>>>);\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n    priority_queue<int, vector<int, custom_allocator<int>>, less<int>> pq3(\r\n        range.begin(), range.end(), custom_allocator<int>{});\r\n#endif // !_HAS_CXX17\r\n    assert(pq3.size() == size(some_data));\r\n    result = 5;\r\n    while (!pq3.empty()) {\r\n        assert(pq3.top() == result--);\r\n        pq3.pop();\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    priority_queue pq4(range.begin(), range.end(), greater<int>{}, custom_allocator<int>{});\r\n    static_assert(is_same_v<decltype(pq4), priority_queue<int, vector<int, custom_allocator<int>>, greater<int>>>);\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n    priority_queue<int, vector<int, custom_allocator<int>>, greater<int>> pq4(\r\n        range.begin(), range.end(), greater<int>{}, custom_allocator<int>{});\r\n#endif // !_HAS_CXX17\r\n    assert(pq4.size() == size(some_data));\r\n    result = 0;\r\n    while (!pq4.empty()) {\r\n        assert(pq4.top() == result++);\r\n        pq4.pop();\r\n    }\r\n\r\n    deque<int> cont(begin(additional_data), end(additional_data));\r\n#if _HAS_CXX17\r\n    priority_queue pq5(range.begin(), range.end(), greater<int>{}, cont);\r\n    static_assert(is_same_v<decltype(pq5), priority_queue<int, deque<int>, greater<int>>>);\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n    priority_queue<int, deque<int>, greater<int>> pq5(range.begin(), range.end(), greater<int>{}, cont);\r\n#endif // !_HAS_CXX17\r\n    assert(pq5.size() == size(some_data) + size(additional_data));\r\n    result = 0;\r\n    while (!pq5.empty()) {\r\n        assert(pq5.top() == result++);\r\n        pq5.pop();\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    priority_queue pq6(\r\n        range.begin(), range.end(), greater<int>{}, deque<int>{begin(additional_data), end(additional_data)});\r\n    static_assert(is_same_v<decltype(pq6), priority_queue<int, deque<int>, greater<int>>>);\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n    priority_queue<int, deque<int>, greater<int>> pq6(\r\n        range.begin(), range.end(), greater<int>{}, deque<int>{begin(additional_data), end(additional_data)});\r\n#endif // !_HAS_CXX17\r\n    assert(pq6.size() == size(some_data) + size(additional_data));\r\n    result = 0;\r\n    while (!pq6.empty()) {\r\n        assert(pq6.top() == result++);\r\n        pq6.pop();\r\n    }\r\n\r\n    deque<int, custom_allocator<int>> cont2(begin(additional_data), end(additional_data), custom_allocator<int>{});\r\n#if _HAS_CXX17\r\n    priority_queue pq7(range.begin(), range.end(), greater<int>{}, cont2, custom_allocator<int>{});\r\n    static_assert(is_same_v<decltype(pq7), priority_queue<int, deque<int, custom_allocator<int>>, greater<int>>>);\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n    priority_queue<int, deque<int, custom_allocator<int>>, greater<int>> pq7(\r\n        range.begin(), range.end(), greater<int>{}, cont2, custom_allocator<int>{});\r\n#endif // !_HAS_CXX17\r\n    assert(pq7.size() == size(some_data) + size(additional_data));\r\n    result = 0;\r\n    while (!pq7.empty()) {\r\n        assert(pq7.top() == result++);\r\n        pq7.pop();\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    priority_queue pq8(range.begin(), range.end(), greater<int>{},\r\n        deque<int, custom_allocator<int>>{begin(additional_data), end(additional_data)}, custom_allocator<int>{});\r\n    static_assert(is_same_v<decltype(pq8), priority_queue<int, deque<int, custom_allocator<int>>, greater<int>>>);\r\n#else // ^^^ _HAS_CXX17 / !_HAS_CXX17 vvv\r\n    priority_queue<int, deque<int, custom_allocator<int>>, greater<int>> pq8(range.begin(), range.end(), greater<int>{},\r\n        deque<int, custom_allocator<int>>{begin(additional_data), end(additional_data)}, custom_allocator<int>{});\r\n#endif // !_HAS_CXX17\r\n    assert(pq8.size() == size(some_data) + size(additional_data));\r\n    result = 0;\r\n    while (!pq8.empty()) {\r\n        assert(pq8.top() == result++);\r\n        pq8.pop();\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_container<deque<int>>();\r\n    test_container<forward_list<int>>();\r\n    test_container<vector<int>>();\r\n    test_container<set<int>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1502R1_standard_library_header_units/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n"
  },
  {
    "path": "tests/std/tests/P1502R1_standard_library_header_units/custom_format.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport json\r\nimport os\r\nimport re\r\n\r\nfrom stl.test.format import STLTestFormat, TestStep\r\nfrom stl.test.tests import TestType\r\n\r\n\r\n# Print noisy progress messages that are useful when working on this script.\r\nnoisyProgress = False\r\n\r\n\r\ndef loadJsonWithComments(filename):\r\n    # This is far from a general-purpose solution (it doesn't attempt to handle block comments like /**/\r\n    # and comments appearing within strings like \"cats // dogs\"), but it's sufficient for our purposes.\r\n    comment = re.compile('//.*')\r\n    with open(filename) as file:\r\n        replacedLines = [re.sub(comment, '', line) for line in file]\r\n        return json.loads(''.join(replacedLines))\r\n\r\n\r\ndef getAllHeaders(headerUnitsJsonFilename):\r\n    buildAsHeaderUnits = loadJsonWithComments(headerUnitsJsonFilename)['BuildAsHeaderUnits']\r\n\r\n    # We want to build everything that's mentioned in header-units.json, plus all of the\r\n    # headers that were commented out for providing macros that control header inclusion.\r\n    return buildAsHeaderUnits + ['version', 'yvals.h', 'yvals_core.h']\r\n\r\n\r\ndef getImportableCxxLibraryHeaders(sourcePath):\r\n    # This JSON With Comments file is shared between Python and Perl,\r\n    # reducing the number of things we need to update when adding new Standard headers.\r\n    jsonFilename = os.path.join(os.path.dirname(sourcePath), 'importable_cxx_library_headers.jsonc')\r\n    return loadJsonWithComments(jsonFilename)\r\n\r\n\r\nclass CustomTestFormat(STLTestFormat):\r\n    def getBuildSteps(self, test, litConfig, shared):\r\n        outputDir, outputBase = test.getTempPaths()\r\n        sourcePath = test.getSourcePath()\r\n\r\n        compileTestCppWithEdg = '/BE' in test.compileFlags\r\n        if compileTestCppWithEdg:\r\n            test.compileFlags.remove('/BE')\r\n\r\n        # This is a list of compiler options to consume the header units that we've built so far.\r\n        consumeBuiltHeaderUnits = []\r\n\r\n        # Output files:\r\n        objFilenames = []\r\n\r\n        if '/DTEST_TOPO_SORT' in test.compileFlags: # Build deduplicated header units:\r\n            # Compiler options, common to both scanning dependencies and building header units.\r\n            clOptions = ['/exportHeader', '/headerName:angle', '/translateInclude', '/Fo', '/MP']\r\n\r\n            # Store the list of headers to build.\r\n            allHeaders = getAllHeaders(os.path.join(litConfig.cxx_headers, 'header-units.json'))\r\n\r\n            # Generate JSON files that record how these headers depend on one another.\r\n            if noisyProgress:\r\n                print('Scanning dependencies...')\r\n            cmd = [test.cxx, *test.flags, *test.compileFlags, *clOptions, '/scanDependencies', '.\\\\', *allHeaders]\r\n            yield TestStep(cmd, shared.execDir, shared.env, False)\r\n\r\n            # The JSON files also record what object files will be produced.\r\n            # IFC filenames and OBJ filenames follow different patterns. For example:\r\n            # <filesystem> produces filesystem.ifc and filesystem.obj\r\n            # <xbit_ops.h> produces xbit_ops.h.ifc and xbit_ops.obj\r\n            # We can easily synthesize IFC filenames, but it's easier to get the OBJ filenames from the JSON files.\r\n\r\n            # This dictionary powers the topological sort.\r\n            # Key: Header name, e.g. 'bitset'.\r\n            # Value: List of dependencies that remain to be built, e.g. ['iosfwd', 'limits', 'xstring'].\r\n            remainingDependencies = {}\r\n\r\n            # Read the JSON files, storing the results in objFilenames and remainingDependencies.\r\n            for hdr in allHeaders:\r\n                with open(os.path.join(outputDir, f'{hdr}.module.json')) as file:\r\n                    jsonObject = json.load(file)\r\n                    objFilenames.append(jsonObject['rules'][0]['primary-output'])\r\n                    remainingDependencies[hdr] = [req['logical-name'] for req in jsonObject['rules'][0]['requires']]\r\n\r\n            # Build header units in topologically sorted order.\r\n            while len(remainingDependencies) > 0:\r\n                # When a header has no remaining dependencies, it is ready to be built.\r\n                readyToBuild = [hdr for hdr, dep in remainingDependencies.items() if len(dep) == 0]\r\n\r\n                # Each layer can be built in parallel.\r\n                if noisyProgress:\r\n                    print('Building deduplicated header units:', ' '.join(readyToBuild))\r\n                cmd = [test.cxx, *test.flags, *test.compileFlags, *clOptions, *consumeBuiltHeaderUnits, *readyToBuild]\r\n                yield TestStep(cmd, shared.execDir, shared.env, False)\r\n\r\n                # Update remainingDependencies by doing two things.\r\n                # hdr, dep is the current key-value pair.\r\n                # First, keep `if len(dep) > 0`. (Otherwise, we just built hdr.)\r\n                # Second, filter dep, eliminating anything that appears in readyToBuild. (If we're left with\r\n                # an empty list, then hdr will be ready to build in the next iteration.)\r\n                remainingDependencies = {\r\n                    hdr: [d for d in dep if d not in readyToBuild]\r\n                    for hdr, dep in remainingDependencies.items() if len(dep) > 0\r\n                }\r\n\r\n                # Add compiler options to consume the header units that we just built.\r\n                for hdr in readyToBuild:\r\n                    consumeBuiltHeaderUnits += ['/headerUnit:angle', f'{hdr}={hdr}.ifc']\r\n        else: # Build independent header units:\r\n            stlHeaders = getImportableCxxLibraryHeaders(sourcePath)\r\n            exportHeaderOptions = ['/exportHeader', '/headerName:angle', '/Fo', '/MP']\r\n            for hdr in stlHeaders:\r\n                consumeBuiltHeaderUnits += ['/headerUnit:angle', f'{hdr}={hdr}.ifc']\r\n                objFilenames.append(f'{hdr}.obj')\r\n\r\n            if noisyProgress:\r\n                print('Building independent header units...')\r\n            cmd = [test.cxx, *test.flags, *test.compileFlags, *exportHeaderOptions, *stlHeaders]\r\n            yield TestStep(cmd, shared.execDir, shared.env, False)\r\n\r\n        # For convenience, create a library file containing all of the object files that were produced.\r\n        libFilename = 'stl_header_units.lib'\r\n        if noisyProgress:\r\n            print('Creating library...')\r\n        cmd = ['lib.exe', '/nologo', f'/out:{libFilename}', *objFilenames]\r\n        if litConfig.target_arch.casefold() == 'arm64ec'.casefold():\r\n            cmd.append('/machine:arm64ec')\r\n        yield TestStep(cmd, shared.execDir, shared.env, False)\r\n\r\n        if compileTestCppWithEdg:\r\n            test.compileFlags.append('/BE')\r\n\r\n        if TestType.COMPILE in test.testType:\r\n            cmd = [test.cxx, '/c', sourcePath, *test.flags, *test.compileFlags, *consumeBuiltHeaderUnits]\r\n        elif TestType.RUN in test.testType:\r\n            shared.execFile = f'{outputBase}.exe'\r\n            cmd = [test.cxx, sourcePath, *test.flags, *test.compileFlags, *consumeBuiltHeaderUnits, libFilename,\r\n                    f'/Fe{shared.execFile}', '/link', *test.linkFlags]\r\n\r\n        if noisyProgress:\r\n            print('Compiling and running test...')\r\n        yield TestStep(cmd, shared.execDir, shared.env, False)\r\n"
  },
  {
    "path": "tests/std/tests/P1502R1_standard_library_header_units/custombuild.pl",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nuse strict;\r\nuse warnings;\r\n\r\nuse JSON::PP;\r\nuse Run;\r\nuse Try::Tiny;\r\n\r\nsub readFile\r\n{\r\n    my $filename = $_[0];\r\n    open(my $handle, \"<\", $filename) or Run::PrintError(__FILE__, __LINE__, \"Couldn't open $filename: $!\");\r\n    read($handle, my $string, -s $handle);\r\n    return $string;\r\n}\r\n\r\nsub loadJson\r\n{\r\n    my $filename = $_[0];\r\n    my $jsonStr = readFile($filename);\r\n    my $decoded = \"\";\r\n    try {\r\n        $decoded = JSON::PP->new->utf8->decode($jsonStr);\r\n    } catch {\r\n        Run::PrintError(__FILE__, __LINE__, \"Caught exception in loadJson.\");\r\n    };\r\n    return $decoded;\r\n}\r\n\r\nsub loadJsonWithComments\r\n{\r\n    my $filename = $_[0];\r\n    my $jsonStr = readFile($filename);\r\n    my $decoded = \"\";\r\n    try {\r\n        $decoded = JSON::PP->new->relaxed->utf8->decode($jsonStr);\r\n    } catch {\r\n        Run::PrintError(__FILE__, __LINE__, \"Caught exception in loadJsonWithComments.\");\r\n    };\r\n    return $decoded;\r\n}\r\n\r\nsub getAllHeaders\r\n{\r\n    my $headerUnitsJsonFilename = $_[0];\r\n    my $jsonObject = loadJsonWithComments($headerUnitsJsonFilename);\r\n    my @buildAsHeaderUnits = @{$jsonObject->{\"BuildAsHeaderUnits\"}};\r\n    # We want to build everything that's mentioned in header-units.json, plus all of the\r\n    # headers that were commented out for providing macros that control header inclusion.\r\n    push(@buildAsHeaderUnits, \"version\", \"yvals.h\", \"yvals_core.h\");\r\n    return @buildAsHeaderUnits;\r\n}\r\n\r\nsub getImportableCxxLibraryHeaders()\r\n{\r\n    # This JSON With Comments file is shared between Python and Perl,\r\n    # reducing the number of things we need to update when adding new Standard headers.\r\n    my $jsonObject = loadJsonWithComments(\"importable_cxx_library_headers.jsonc\");\r\n    return @{$jsonObject};\r\n}\r\n\r\nsub arrayDifference\r\n{\r\n    # (Perl) Takes two arrays by reference. Returns everything in the first array (minuend) that doesn't appear\r\n    # in the second array (subtrahend). Doesn't require the arrays to be sorted, so the complexity is O(M * N).\r\n    my @minuend = @{$_[0]};\r\n    my @subtrahend = @{$_[1]};\r\n\r\n    my @result = ();\r\n    foreach my $elem (@minuend) {\r\n        if (!grep($elem eq $_, @subtrahend)) {\r\n            push(@result, $elem);\r\n        }\r\n    }\r\n    return @result;\r\n}\r\n\r\nsub CustomBuildHook()\r\n{\r\n    my $cwd = Run::GetCWDName();\r\n\r\n    # This is a list of compiler options to consume the header units that we've built so far.\r\n    my @consumeBuiltHeaderUnits = ();\r\n\r\n    # Output files:\r\n    my @objFilenames = ();\r\n\r\n    if ($ENV{PM_CL} =~ m</DTEST_TOPO_SORT\\b>) { # Build deduplicated header units:\r\n        # Compiler options, common to both scanning dependencies and building header units.\r\n        my @clOptions = (\"/exportHeader\", \"/headerName:angle\", \"/translateInclude\", \"/Fo\", \"/MP\");\r\n\r\n        # Store the list of headers to build.\r\n        my $stlIncludeDir = $ENV{STL_INCLUDE_DIR};\r\n        my @allHeaders = getAllHeaders(\"$stlIncludeDir\\\\header-units.json\");\r\n\r\n        # Generate JSON files that record how these headers depend on one another.\r\n        Run::ExecuteCL(join(\" \", @clOptions, \"/scanDependencies\", \".\\\\\", @allHeaders));\r\n\r\n        # The JSON files also record what object files will be produced.\r\n        # IFC filenames and OBJ filenames follow different patterns. For example:\r\n        # <filesystem> produces filesystem.ifc and filesystem.obj\r\n        # <xbit_ops.h> produces xbit_ops.h.ifc and xbit_ops.obj\r\n        # We can easily synthesize IFC filenames, but it's easier to get the OBJ filenames from the JSON files.\r\n\r\n        # This dictionary powers the topological sort.\r\n        # Key: Header name, e.g. 'bitset'.\r\n        # Value: List of dependencies that remain to be built, e.g. ['iosfwd', 'limits', 'xstring'].\r\n        my %remainingDependencies;\r\n\r\n        # Read the JSON files, storing the results in objFilenames and remainingDependencies.\r\n        foreach my $hdr (@allHeaders) {\r\n            my $jsonObject = loadJson(\"$hdr.module.json\");\r\n            push(@objFilenames, $jsonObject->{\"rules\"}[0]{\"primary-output\"});\r\n\r\n            my @dep = ();\r\n            foreach my $req (@{$jsonObject->{\"rules\"}[0]{\"requires\"}}) {\r\n                push(@dep, $req->{\"logical-name\"});\r\n            }\r\n            $remainingDependencies{$hdr} = \\@dep;\r\n        }\r\n\r\n        # Build header units in topologically sorted order.\r\n        while (%remainingDependencies) {\r\n            # When a header has no remaining dependencies, it is ready to be built.\r\n            my @readyToBuild = ();\r\n            foreach my $hdr (keys(%remainingDependencies)) {\r\n                my @dep = @{$remainingDependencies{$hdr}};\r\n                if (!@dep) {\r\n                    push(@readyToBuild, $hdr);\r\n                }\r\n            }\r\n\r\n            # Each layer can be built in parallel.\r\n            Run::ExecuteCL(join(\" \", @clOptions, @consumeBuiltHeaderUnits, @readyToBuild));\r\n\r\n            # Update remainingDependencies by doing two things.\r\n\r\n            # (Perl) First, eliminate headers that we just built.\r\n            foreach my $hdr (@readyToBuild) {\r\n                delete $remainingDependencies{$hdr};\r\n            }\r\n\r\n            # hdr, dep is the current key-value pair.\r\n            foreach my $hdr (keys(%remainingDependencies)) {\r\n                my @dep = @{$remainingDependencies{$hdr}};\r\n\r\n                # Second, filter dep, eliminating anything that appears in readyToBuild. (If we're left with\r\n                # an empty list, then hdr will be ready to build in the next iteration.)\r\n                my @filtered = arrayDifference(\\@dep, \\@readyToBuild);\r\n\r\n                $remainingDependencies{$hdr} = \\@filtered;\r\n            }\r\n\r\n            # Add compiler options to consume the header units that we just built.\r\n            foreach my $hdr (@readyToBuild) {\r\n                push(@consumeBuiltHeaderUnits, \"/headerUnit:angle\", \"$hdr=$hdr.ifc\");\r\n            }\r\n        }\r\n    } else { # Build independent header units:\r\n        my @stlHeaders = getImportableCxxLibraryHeaders();\r\n        my @exportHeaderOptions = (\"/exportHeader\", \"/headerName:angle\", \"/Fo\", \"/MP\");\r\n\r\n        foreach my $hdr (@stlHeaders) {\r\n            push(@consumeBuiltHeaderUnits, \"/headerUnit:angle\", \"$hdr=$hdr.ifc\");\r\n            push(@objFilenames, \"$hdr.obj\");\r\n        }\r\n\r\n        Run::ExecuteCL(join(\" \", @exportHeaderOptions, @stlHeaders));\r\n    }\r\n\r\n    # For convenience, create a library file containing all of the object files that were produced.\r\n    my $libFilename = \"stl_header_units.lib\";\r\n    Run::ExecuteCommand(join(\" \", \"lib.exe\", \"/nologo\", \"/out:$libFilename\", @objFilenames));\r\n    # TRANSITION, when we test ARM64EC internally, add \"/machine:arm64ec\" here to match custom_format.py.\r\n\r\n    Run::ExecuteCL(join(\" \", \"test.cpp\", \"/Fe$cwd.exe\", @consumeBuiltHeaderUnits, $libFilename));\r\n}\r\n1\r\n"
  },
  {
    "path": "tests/std/tests/P1502R1_standard_library_header_units/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\..\\..\\universal_prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w14365 /D_ENFORCE_FACET_SPECIALIZATIONS=1 /Zc:preprocessor\"\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w14640 /Zc:threadSafeInit- /EHsc /DTEST_STANDARD=20 /std:c++20\"\r\n*\tPM_CL=\"/w14640 /Zc:threadSafeInit- /EHsc /DTEST_STANDARD=23 /std:c++latest\"\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/MD\"\r\n*\tPM_CL=\"/MDd\"\r\n*\tPM_CL=\"/MT\"\r\n*\tPM_CL=\"/MTd\"\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/DTEST_HEADER_UNITS /DTEST_TOPO_SORT\"\r\n*\tPM_CL=\"/DTEST_HEADER_UNITS\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"\"\r\nASAN\tPM_CL=\"-fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\n# PM_CL=\"/analyze:only /analyze:autolog-\" # TRANSITION, works correctly but slowly\r\n# PM_CL=\"/BE\" # TRANSITION, GH-1621 (See Modules (Including Header Units))\r\n"
  },
  {
    "path": "tests/std/tests/P1502R1_standard_library_header_units/importable_cxx_library_headers.jsonc",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// P1502R1_standard_library_header_units/test.cpp cites the definition of \"importable C++ library headers\".\r\n[\r\n    \"algorithm\",\r\n    \"any\",\r\n    \"array\",\r\n    \"atomic\",\r\n    \"barrier\",\r\n    \"bit\",\r\n    \"bitset\",\r\n    \"charconv\",\r\n    \"chrono\",\r\n    \"codecvt\",\r\n    \"compare\",\r\n    \"complex\",\r\n    \"concepts\",\r\n    \"condition_variable\",\r\n    \"coroutine\",\r\n    \"deque\",\r\n    \"exception\",\r\n    \"execution\",\r\n    \"expected\",\r\n    \"filesystem\",\r\n    \"flat_map\",\r\n    \"flat_set\",\r\n    \"format\",\r\n    \"forward_list\",\r\n    \"fstream\",\r\n    \"functional\",\r\n    \"future\",\r\n    \"generator\",\r\n    \"initializer_list\",\r\n    \"iomanip\",\r\n    \"ios\",\r\n    \"iosfwd\",\r\n    \"iostream\",\r\n    \"istream\",\r\n    \"iterator\",\r\n    \"latch\",\r\n    \"limits\",\r\n    \"list\",\r\n    \"locale\",\r\n    \"map\",\r\n    \"mdspan\",\r\n    \"memory\",\r\n    \"memory_resource\",\r\n    \"mutex\",\r\n    \"new\",\r\n    \"numbers\",\r\n    \"numeric\",\r\n    \"optional\",\r\n    \"ostream\",\r\n    \"print\",\r\n    \"queue\",\r\n    \"random\",\r\n    \"ranges\",\r\n    \"ratio\",\r\n    \"regex\",\r\n    \"scoped_allocator\",\r\n    \"semaphore\",\r\n    \"set\",\r\n    \"shared_mutex\",\r\n    \"source_location\",\r\n    \"span\",\r\n    \"spanstream\",\r\n    \"sstream\",\r\n    \"stack\",\r\n    \"stacktrace\",\r\n    \"stdexcept\",\r\n    \"stdfloat\",\r\n    \"stop_token\",\r\n    \"streambuf\",\r\n    \"string\",\r\n    \"string_view\",\r\n    \"strstream\",\r\n    \"syncstream\",\r\n    \"system_error\",\r\n    \"thread\",\r\n    \"tuple\",\r\n    \"type_traits\",\r\n    \"typeindex\",\r\n    \"typeinfo\",\r\n    \"unordered_map\",\r\n    \"unordered_set\",\r\n    \"utility\",\r\n    \"valarray\",\r\n    \"variant\",\r\n    \"vector\",\r\n    \"version\"\r\n]\r\n"
  },
  {
    "path": "tests/std/tests/P1502R1_standard_library_header_units/lit.local.cfg",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\nimport site\r\nsite.addsitedir(os.path.dirname(os.path.dirname(__file__)))\r\nimport P1502R1_standard_library_header_units.custom_format\r\n\r\nconfig.test_format = P1502R1_standard_library_header_units.custom_format.CustomTestFormat()\r\nconfig.parallelism_group = 'multi-threaded'\r\n"
  },
  {
    "path": "tests/std/tests/P1502R1_standard_library_header_units/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// N4868 [headers]/4:\r\n// \"The headers listed in Table 21 [...] are collectively known as the importable C++ library headers.\r\n// [Note 1: Importable C++ library headers can be imported as module units (10.3). - end note]\"\r\n// [tab:headers.cpp]: \"Table 21: C++ library headers\"\r\n\r\n// This EXCLUDES the <cmeow> headers in:\r\n// [tab:headers.cpp.c]: \"Table 22: C++ headers for C library facilities\"\r\n\r\nimport <algorithm>;\r\nimport <any>;\r\nimport <array>;\r\nimport <atomic>;\r\nimport <barrier>;\r\nimport <bit>;\r\nimport <bitset>;\r\nimport <charconv>;\r\nimport <chrono>;\r\nimport <codecvt>;\r\nimport <compare>;\r\nimport <complex>;\r\nimport <concepts>;\r\nimport <condition_variable>;\r\nimport <coroutine>;\r\nimport <deque>;\r\nimport <exception>;\r\nimport <execution>;\r\n#if TEST_STANDARD >= 23\r\nimport <expected>;\r\n#endif // TEST_STANDARD >= 23\r\nimport <filesystem>;\r\n#if TEST_STANDARD >= 23\r\nimport <flat_map>;\r\nimport <flat_set>;\r\n#endif // TEST_STANDARD >= 23\r\nimport <format>;\r\nimport <forward_list>;\r\nimport <fstream>;\r\nimport <functional>;\r\nimport <future>;\r\n#if TEST_STANDARD >= 23\r\nimport <generator>;\r\n#endif // TEST_STANDARD >= 23\r\nimport <initializer_list>;\r\nimport <iomanip>;\r\nimport <ios>;\r\nimport <iosfwd>;\r\nimport <iostream>;\r\nimport <istream>;\r\nimport <iterator>;\r\nimport <latch>;\r\nimport <limits>;\r\nimport <list>;\r\nimport <locale>;\r\nimport <map>;\r\n#if TEST_STANDARD >= 23\r\nimport <mdspan>;\r\n#endif // TEST_STANDARD >= 23\r\nimport <memory>;\r\nimport <memory_resource>;\r\nimport <mutex>;\r\nimport <new>;\r\nimport <numbers>;\r\nimport <numeric>;\r\nimport <optional>;\r\nimport <ostream>;\r\n#if TEST_STANDARD >= 23\r\nimport <print>;\r\n#endif // TEST_STANDARD >= 23\r\nimport <queue>;\r\nimport <random>;\r\nimport <ranges>;\r\nimport <ratio>;\r\nimport <regex>;\r\nimport <scoped_allocator>;\r\nimport <semaphore>;\r\nimport <set>;\r\nimport <shared_mutex>;\r\nimport <source_location>;\r\nimport <span>;\r\n#if TEST_STANDARD >= 23\r\nimport <spanstream>;\r\n#endif // TEST_STANDARD >= 23\r\nimport <sstream>;\r\nimport <stack>;\r\n#if TEST_STANDARD >= 23\r\nimport <stacktrace>;\r\n#endif // TEST_STANDARD >= 23\r\nimport <stdexcept>;\r\n#if TEST_STANDARD >= 23\r\nimport <stdfloat>;\r\n#endif // TEST_STANDARD >= 23\r\nimport <stop_token>;\r\nimport <streambuf>;\r\nimport <string>;\r\nimport <string_view>;\r\nimport <strstream>;\r\nimport <syncstream>;\r\nimport <system_error>;\r\nimport <thread>;\r\nimport <tuple>;\r\nimport <type_traits>;\r\nimport <typeindex>;\r\nimport <typeinfo>;\r\nimport <unordered_map>;\r\nimport <unordered_set>;\r\nimport <utility>;\r\nimport <valarray>;\r\nimport <variant>;\r\nimport <vector>;\r\nimport <version>;\r\n\r\n#include <assert.h> // intentionally not <cassert>\r\n#include <stdio.h> // intentionally not <cstdio>\r\n\r\n#include <force_include.hpp>\r\n\r\n// SPECIAL: This is order-dependent and must be included after all other Standard imports/includes.\r\n#include <test_header_units_and_modules.hpp>\r\n\r\nint main() {\r\n    all_cpp_header_tests();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1518R2_stop_overconstraining_allocators/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1518R2_stop_overconstraining_allocators/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <deque>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <list>\r\n#include <map>\r\n#include <memory_resource>\r\n#include <queue>\r\n#include <set>\r\n#include <stack>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\npmr::monotonic_buffer_resource mr;\r\n\r\ntemplate <template <class...> class Ctr>\r\nstruct SfinaeTester {\r\n    template <class... Args>\r\n    static auto f(int, Args&&... args) -> decltype(Ctr(static_cast<Args&&>(args)...)) {\r\n        return Ctr(static_cast<Args&&>(args)...);\r\n    }\r\n    template <class... Args>\r\n    static void f(long, Args&&...) {}\r\n\r\n    template <class... Args>\r\n    static auto test(Args&&... args) {\r\n        return f(0, static_cast<Args&&>(args)...);\r\n    }\r\n};\r\n\r\nvoid test_deque(pmr::deque<int>& px) {\r\n    [[maybe_unused]] auto x = SfinaeTester<deque>::test(px, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<deque>::test(move(px), &mr);\r\n}\r\n\r\nvoid test_forward_list(pmr::forward_list<int>& px) {\r\n    [[maybe_unused]] auto x = SfinaeTester<forward_list>::test(px, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<forward_list>::test(move(px), &mr);\r\n}\r\n\r\nvoid test_list(pmr::list<int>& px) {\r\n    [[maybe_unused]] auto x = SfinaeTester<list>::test(px, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<list>::test(move(px), &mr);\r\n}\r\n\r\nvoid test_vector(pmr::vector<int>& px) {\r\n    [[maybe_unused]] auto x = SfinaeTester<vector>::test(px, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<vector>::test(move(px), &mr);\r\n}\r\n\r\nvoid test_vector_bool(pmr::vector<bool>& px) {\r\n    [[maybe_unused]] auto x = SfinaeTester<vector>::test(px, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<vector>::test(move(px), &mr);\r\n}\r\n\r\nvoid test_map(pmr::map<int, int>& px) {\r\n    [[maybe_unused]] auto x = SfinaeTester<map>::test(px, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<map>::test(move(px), &mr);\r\n}\r\n\r\nvoid test_multimap(pmr::multimap<int, int>& px) {\r\n    [[maybe_unused]] auto x = SfinaeTester<multimap>::test(px, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<multimap>::test(move(px), &mr);\r\n}\r\n\r\nvoid test_multiset(pmr::multiset<int>& px) {\r\n    [[maybe_unused]] auto x = SfinaeTester<multiset>::test(px, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<multiset>::test(move(px), &mr);\r\n}\r\n\r\nvoid test_set(pmr::set<int>& px) {\r\n    [[maybe_unused]] auto x = SfinaeTester<set>::test(px, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<set>::test(move(px), &mr);\r\n}\r\n\r\nvoid test_unordered_map(pmr::unordered_map<int, int>& px) {\r\n    [[maybe_unused]] auto x = SfinaeTester<unordered_map>::test(px, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<unordered_map>::test(move(px), &mr);\r\n}\r\n\r\nvoid test_unordered_multimap(pmr::unordered_multimap<int, int>& px) {\r\n    [[maybe_unused]] auto x = SfinaeTester<unordered_multimap>::test(px, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<unordered_multimap>::test(move(px), &mr);\r\n}\r\n\r\nvoid test_unordered_multiset(pmr::unordered_multiset<int>& px) {\r\n    [[maybe_unused]] auto x = SfinaeTester<unordered_multiset>::test(px, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<unordered_multiset>::test(move(px), &mr);\r\n}\r\n\r\nvoid test_unordered_set(pmr::unordered_set<int>& px) {\r\n    [[maybe_unused]] auto x = SfinaeTester<unordered_set>::test(px, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<unordered_set>::test(move(px), &mr);\r\n}\r\n\r\nvoid test_priority_queue1(priority_queue<int, pmr::vector<int>>& px) {\r\n    [[maybe_unused]] auto x = SfinaeTester<priority_queue>::test(px, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<priority_queue>::test(move(px), &mr);\r\n}\r\n\r\nvoid test_queue1(queue<int, pmr::deque<int>>& px) {\r\n    [[maybe_unused]] auto x = SfinaeTester<queue>::test(px, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<queue>::test(move(px), &mr);\r\n}\r\n\r\nvoid test_stack1(stack<int, pmr::vector<int>>& px) {\r\n    [[maybe_unused]] auto x = SfinaeTester<stack>::test(px, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<stack>::test(move(px), &mr);\r\n}\r\n\r\nvoid test_priority_queue2(less<int> comp, pmr::vector<int>& pc) {\r\n    [[maybe_unused]] auto x = SfinaeTester<priority_queue>::test(comp, pc, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<priority_queue>::test(comp, move(pc), &mr);\r\n}\r\n\r\nvoid test_priority_queue3(int* begin, int* end, less<int> comp, pmr::vector<int>& pc) {\r\n    [[maybe_unused]] auto x = SfinaeTester<priority_queue>::test(begin, end, comp, pc, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<priority_queue>::test(begin, end, comp, move(pc), &mr);\r\n}\r\n\r\nvoid test_queue2(pmr::deque<int>& pc) {\r\n    [[maybe_unused]] auto x = SfinaeTester<queue>::test(pc, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<queue>::test(move(pc), &mr);\r\n}\r\n\r\nvoid test_stack2(pmr::vector<int>& pc) {\r\n    [[maybe_unused]] auto x = SfinaeTester<stack>::test(pc, &mr);\r\n    [[maybe_unused]] auto y = SfinaeTester<stack>::test(move(pc), &mr);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1522R1_difference_type/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1522R1_difference_type/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <__msvc_int128.hpp>\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <iterator>\r\n#include <limits>\r\n#include <type_traits>\r\n\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#include <concepts>\r\n\r\n#define CONSTEVAL consteval\r\n#define SAME_AS   std::same_as\r\n\r\nnamespace ordtest {\r\n    using std::strong_ordering;\r\n}\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n#define CONSTEVAL constexpr\r\n#define SAME_AS   std::is_same_v\r\n\r\nnamespace ordtest {\r\n    enum class strong_ordering : signed char {\r\n        less       = -1,\r\n        equal      = 0,\r\n        equivalent = 0,\r\n        greater    = 1,\r\n    };\r\n}\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nusing std::_Signed128;\r\nusing std::_Unsigned128;\r\n\r\nnamespace i128_udl_detail {\r\n    enum class u128_parse_status : unsigned char {\r\n        valid,\r\n        overflow,\r\n        invalid,\r\n    };\r\n\r\n    struct u128_parse_result {\r\n        u128_parse_status status_code;\r\n        _Unsigned128 value;\r\n    };\r\n\r\n    [[nodiscard]] CONSTEVAL unsigned int char_to_digit(const char c) noexcept {\r\n        if (c >= '0' && c <= '9') {\r\n            return static_cast<unsigned int>(c - '0');\r\n        }\r\n\r\n        if (c >= 'A' && c <= 'F') {\r\n            return static_cast<unsigned int>(c - 'A' + 10);\r\n        }\r\n\r\n        if (c >= 'a' && c <= 'f') {\r\n            return static_cast<unsigned int>(c - 'a' + 10);\r\n        }\r\n\r\n        return static_cast<unsigned int>(-1);\r\n    }\r\n\r\n    template <unsigned int Base, char... Chars>\r\n    struct parse_u128_impl {\r\n        [[nodiscard]] static CONSTEVAL u128_parse_result parse() noexcept {\r\n            constexpr char char_seq[]{Chars...};\r\n            constexpr auto u128_max = std::numeric_limits<_Unsigned128>::max();\r\n\r\n            _Unsigned128 val{};\r\n            for (const char c : char_seq) {\r\n                if (c == '\\'') {\r\n                    continue;\r\n                }\r\n\r\n                const unsigned int digit = char_to_digit(c);\r\n                if (digit == static_cast<unsigned int>(-1)) {\r\n                    return {u128_parse_status::invalid, _Unsigned128{}};\r\n                }\r\n\r\n                if (val > u128_max / Base || Base * val > u128_max - digit) {\r\n                    return {u128_parse_status::overflow, _Unsigned128{}};\r\n                }\r\n\r\n                val = Base * val + digit;\r\n            }\r\n            return {u128_parse_status::valid, val};\r\n        }\r\n    };\r\n\r\n    template <unsigned int Base>\r\n    struct parse_u128_impl<Base> {\r\n        [[nodiscard]] static CONSTEVAL u128_parse_result parse() noexcept {\r\n            return {u128_parse_status::valid, 0};\r\n        }\r\n    };\r\n\r\n    template <char... Chars>\r\n    struct parse_u128 : parse_u128_impl<10, Chars...> {};\r\n\r\n    template <char... Chars>\r\n    struct parse_u128<'0', 'X', Chars...> : parse_u128_impl<16, Chars...> {};\r\n\r\n    template <char... Chars>\r\n    struct parse_u128<'0', 'x', Chars...> : parse_u128_impl<16, Chars...> {};\r\n\r\n    template <char... Chars>\r\n    struct parse_u128<'0', 'B', Chars...> : parse_u128_impl<2, Chars...> {};\r\n\r\n    template <char... Chars>\r\n    struct parse_u128<'0', 'b', Chars...> : parse_u128_impl<2, Chars...> {};\r\n\r\n    template <char... Chars>\r\n    struct parse_u128<'0', Chars...> : parse_u128_impl<8, Chars...> {};\r\n} // namespace i128_udl_detail\r\n\r\ntemplate <char... Chars>\r\n[[nodiscard]] CONSTEVAL _Unsigned128 operator\"\"_u128() noexcept {\r\n    constexpr auto parsed_result = i128_udl_detail::parse_u128<Chars...>::parse();\r\n    static_assert(parsed_result.status_code != i128_udl_detail::u128_parse_status::invalid,\r\n        \"Invalid characters in the integer literal\");\r\n    static_assert(parsed_result.status_code != i128_udl_detail::u128_parse_status::overflow,\r\n        \"The integer literal is too large for an unsigned 128-bit number\");\r\n    return parsed_result.value;\r\n}\r\n\r\ntemplate <char... Chars>\r\n[[nodiscard]] CONSTEVAL _Signed128 operator\"\"_i128() noexcept {\r\n    constexpr auto parsed_result = i128_udl_detail::parse_u128<Chars...>::parse();\r\n    static_assert(parsed_result.status_code != i128_udl_detail::u128_parse_status::invalid,\r\n        \"Invalid characters in the integer literal\");\r\n    static_assert(parsed_result.status_code != i128_udl_detail::u128_parse_status::overflow\r\n                      && parsed_result.value._Word[1] < (static_cast<std::uint64_t>(1) << 63),\r\n        \"The integer literal is too large for a signed 128-bit number\");\r\n    return static_cast<_Signed128>(parsed_result.value);\r\n}\r\n\r\ntemplate <class I>\r\nconstexpr void check_equal(const I& x) {\r\n    assert(x == x);\r\n    assert(!(x != x));\r\n    assert(!(x < x));\r\n    assert(!(x > x));\r\n    assert(x <= x);\r\n    assert(x >= x);\r\n#if _HAS_CXX20\r\n    assert(x <=> x == 0);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\ntemplate <class I1, class I2>\r\nconstexpr void check_order(const I1& x, const I2& y, const ordtest::strong_ordering ord) {\r\n    assert((x == y) == (ord == ordtest::strong_ordering::equal));\r\n    assert((x != y) == (ord != ordtest::strong_ordering::equal));\r\n    assert((x < y) == (ord == ordtest::strong_ordering::less));\r\n    assert((x > y) == (ord == ordtest::strong_ordering::greater));\r\n    assert((x <= y) == (ord != ordtest::strong_ordering::greater));\r\n    assert((x >= y) == (ord != ordtest::strong_ordering::less));\r\n\r\n    assert((y == x) == (ord == ordtest::strong_ordering::equal));\r\n    assert((y != x) == (ord != ordtest::strong_ordering::equal));\r\n    assert((y < x) == (ord == ordtest::strong_ordering::greater));\r\n    assert((y > x) == (ord == ordtest::strong_ordering::less));\r\n    assert((y <= x) == (ord != ordtest::strong_ordering::less));\r\n    assert((y >= x) == (ord != ordtest::strong_ordering::greater));\r\n\r\n#if _HAS_CXX20\r\n    assert((x <=> y) == (ord <=> 0));\r\n    assert((y <=> x) == (0 <=> ord));\r\n#endif // _HAS_CXX20\r\n}\r\n\r\nconstexpr bool test_unsigned() {\r\n#if _HAS_CXX20\r\n    STATIC_ASSERT(std::regular<_Unsigned128>);\r\n    STATIC_ASSERT(std::three_way_comparable<_Unsigned128, ordtest::strong_ordering>);\r\n#endif // _HAS_CXX20\r\n\r\n    STATIC_ASSERT(std::numeric_limits<_Unsigned128>::is_specialized);\r\n    STATIC_ASSERT(std::numeric_limits<_Unsigned128>::is_exact);\r\n    STATIC_ASSERT(std::numeric_limits<_Unsigned128>::is_integer);\r\n    STATIC_ASSERT(!std::numeric_limits<_Unsigned128>::is_signed);\r\n    STATIC_ASSERT(std::numeric_limits<_Unsigned128>::is_bounded);\r\n    STATIC_ASSERT(std::numeric_limits<_Unsigned128>::min() == 0);\r\n    STATIC_ASSERT(std::numeric_limits<_Unsigned128>::max() == ~_Unsigned128{});\r\n    STATIC_ASSERT(std::numeric_limits<_Unsigned128>::digits == 128);\r\n    STATIC_ASSERT(std::numeric_limits<_Unsigned128>::radix == 2);\r\n    STATIC_ASSERT(std::numeric_limits<_Unsigned128>::is_modulo);\r\n\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<bool, _Unsigned128>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<char, _Unsigned128>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<signed char, _Unsigned128>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<unsigned char, _Unsigned128>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<wchar_t, _Unsigned128>, _Unsigned128>);\r\n#ifdef __cpp_char8_t\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<char8_t, _Unsigned128>, _Unsigned128>);\r\n#endif // __cpp_char8_t\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<char16_t, _Unsigned128>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<char32_t, _Unsigned128>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<short, _Unsigned128>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<unsigned short, _Unsigned128>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<int, _Unsigned128>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<unsigned int, _Unsigned128>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<long, _Unsigned128>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<unsigned long, _Unsigned128>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<long long, _Unsigned128>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<unsigned long long, _Unsigned128>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, _Unsigned128>, _Unsigned128>);\r\n\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, bool>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, char>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, signed char>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, unsigned char>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, wchar_t>, _Unsigned128>);\r\n#ifdef __cpp_char8_t\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, char8_t>, _Unsigned128>);\r\n#endif // __cpp_char8_t\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, char16_t>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, char32_t>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, short>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, unsigned short>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, int>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, unsigned int>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, long>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, unsigned long>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, long long>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, unsigned long long>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, _Signed128>, _Unsigned128>);\r\n\r\n    struct ConversionSource {\r\n        constexpr operator _Unsigned128() const {\r\n            return _Unsigned128{};\r\n        }\r\n    };\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, ConversionSource>, _Unsigned128>);\r\n\r\n    struct ConversionTarget {\r\n        constexpr ConversionTarget(_Unsigned128) {}\r\n    };\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Unsigned128, ConversionTarget>, ConversionTarget>);\r\n\r\n#if _HAS_CXX20\r\n    STATIC_ASSERT(std::_Integer_class<_Unsigned128>);\r\n    STATIC_ASSERT(std::_Integer_like<_Unsigned128>);\r\n    STATIC_ASSERT(!std::_Signed_integer_like<_Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::_Make_unsigned_like_t<_Unsigned128>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::_Make_signed_like_t<_Unsigned128>, _Signed128>);\r\n#endif // _HAS_CXX20\r\n\r\n    check_equal(_Unsigned128{});\r\n    check_equal(_Unsigned128{42});\r\n    check_equal(_Unsigned128{-42});\r\n    check_equal(_Unsigned128{0x11111111'11111111, 0x22222222'22222222});\r\n    check_equal(0x22222222'22222222'11111111'11111111_u128);\r\n\r\n    check_order(_Unsigned128{42}, _Unsigned128{-42}, ordtest::strong_ordering::less);\r\n    check_order(_Unsigned128{0, 42}, _Unsigned128{0, 52}, ordtest::strong_ordering::less); // ordered only by MSW\r\n    check_order(_Unsigned128{42}, _Unsigned128{52}, ordtest::strong_ordering::less); // ordered only by LSW\r\n    check_order(_Unsigned128{0x11111111'11111111, 0x22222222'22222222},\r\n        _Unsigned128{0x01010101'01010101, 0x01010101'01010101}, ordtest::strong_ordering::greater);\r\n    check_order(0x22222222'22222222'11111111'11111111_u128, 0x01010101'01010101'01010101'01010101_u128,\r\n        ordtest::strong_ordering::greater);\r\n\r\n    {\r\n        _Unsigned128 u{42};\r\n        assert(u._Word[0] == 42);\r\n        assert(u._Word[1] == 0);\r\n        u += _Unsigned128{0};\r\n        assert(u._Word[0] == 42);\r\n        assert(u._Word[1] == 0);\r\n\r\n        assert(static_cast<std::uint64_t>(u) == 42);\r\n        assert(static_cast<std::uint32_t>(u) == 42);\r\n        assert(static_cast<std::uint16_t>(u) == 42);\r\n        assert(static_cast<std::uint8_t>(u) == 42);\r\n\r\n        assert(static_cast<std::int64_t>(u) == 42);\r\n        assert(static_cast<std::int32_t>(u) == 42);\r\n        assert(static_cast<std::int16_t>(u) == 42);\r\n        assert(static_cast<std::int8_t>(u) == 42);\r\n\r\n        _Unsigned128 nu{-42};\r\n        assert(nu._Word[0] == 0ull - 42);\r\n        assert(nu._Word[1] == ~0ull);\r\n\r\n        assert(static_cast<std::uint64_t>(nu) == 0ull - 42);\r\n        assert(static_cast<std::uint32_t>(nu) == 0u - 42);\r\n        assert(static_cast<std::uint16_t>(nu) == 65536 - 42);\r\n        assert(static_cast<std::uint8_t>(nu) == 256 - 42);\r\n\r\n        assert(static_cast<std::int64_t>(nu) == -42);\r\n        assert(static_cast<std::int32_t>(nu) == -42);\r\n        assert(static_cast<std::int16_t>(nu) == -42);\r\n        assert(static_cast<std::int8_t>(nu) == -42);\r\n        {\r\n            _Unsigned128 sum = u + nu;\r\n            assert(sum._Word[0] == 0);\r\n            assert(sum._Word[1] == 0);\r\n\r\n            --sum;\r\n            assert(sum._Word[0] == 0ull - 1);\r\n            assert(sum._Word[1] == 0ull - 1);\r\n            --sum;\r\n            assert(sum._Word[0] == 0ull - 2);\r\n            assert(sum._Word[1] == 0ull - 1);\r\n            ++sum;\r\n            assert(sum._Word[0] == 0ull - 1);\r\n            assert(sum._Word[1] == 0ull - 1);\r\n            ++sum;\r\n            assert(sum._Word[0] == 0);\r\n            assert(sum._Word[1] == 0);\r\n        }\r\n        {\r\n            _Unsigned128 product = u * u;\r\n            assert(product._Word[0] == 42 * 42);\r\n            assert(product._Word[1] == 0);\r\n\r\n            product = nu * nu;\r\n            assert(product._Word[0] == 42 * 42);\r\n            assert(product._Word[1] == 0);\r\n\r\n            product = _Unsigned128{0x01010101'01010101, 0x01010101'01010101} * 5;\r\n            assert(product._Word[0] == 0x05050505'05050505);\r\n            assert(product._Word[1] == 0x05050505'05050505);\r\n            assert(product == 0x05050505'05050505'05050505'05050505_u128);\r\n\r\n            product = 5 * _Unsigned128{0x01010101'01010101, 0x01010101'01010101};\r\n            assert(product._Word[0] == 0x05050505'05050505);\r\n            assert(product._Word[1] == 0x05050505'05050505);\r\n\r\n            product = _Unsigned128{0x01010101'01010101, 0x01010101'01010101};\r\n            product *= product;\r\n            assert(product._Word[0] == 0x08070605'04030201);\r\n            assert(product._Word[1] == 0x100f0e0d'0c0b0a09);\r\n            assert(product == 0x100f0e0d'0c0b0a09'08070605'04030201_u128);\r\n            assert(+product == product);\r\n            assert(-product + product == 0);\r\n\r\n            product = _Unsigned128{0x01020304'05060708, 0x090a0b0c'0d0e0f00}\r\n                    * _Unsigned128{0x000f0e0d'0c0b0a09, 0x08070605'04030201};\r\n            assert(product._Word[0] == 0x6dc18e55'16d48f48);\r\n            assert(product._Word[1] == 0xdc1b6bce'43cd6c21);\r\n            assert(product == 0xdc1b6bce'43cd6c21'6dc18e55'16d48f48_u128);\r\n            assert(+product == product);\r\n            assert(-product + product == 0);\r\n\r\n            product <<= 11;\r\n            assert(product._Word[0] == 0x0c72a8b6'a47a4000);\r\n            assert(product._Word[1] == 0xdb5e721e'6b610b6e);\r\n            assert(product == 0xdb5e721e'6b610b6e'0c72a8b6'a47a4000_u128);\r\n            assert(+product == product);\r\n            assert(-product + product == 0);\r\n\r\n            product >>= 17;\r\n            assert(product._Word[0] == 0x85b70639'545b523d);\r\n            assert(product._Word[1] == 0x00006daf'390f35b0);\r\n            assert(product == 0x00006daf'390f35b0'85b70639'545b523d_u128);\r\n            assert(+product == product);\r\n            assert(-product + product == 0);\r\n        }\r\n    }\r\n    {\r\n        _Unsigned128 q = _Unsigned128{13} / _Unsigned128{4};\r\n        assert(q._Word[0] == 3);\r\n        assert(q._Word[1] == 0);\r\n\r\n        q = _Unsigned128{4} / _Unsigned128{13};\r\n        assert(q._Word[0] == 0);\r\n        assert(q._Word[1] == 0);\r\n\r\n        q = _Unsigned128{0x01010101'01010101, 0x01010101'01010101} / _Unsigned128{13};\r\n        assert(q._Word[0] == 0xc50013c5'0013c500);\r\n        assert(q._Word[1] == 0x0013c500'13c50013);\r\n        assert(q == 0x0013c500'13c50013'c50013c5'0013c500_u128);\r\n\r\n        q = _Unsigned128{0x22222222'22222222, 0x22222222'22222222}\r\n          / _Unsigned128{0x11111111'11111111, 0x11111111'11111111};\r\n        assert(q._Word[0] == 2);\r\n        assert(q._Word[1] == 0);\r\n\r\n        q = (_Unsigned128{1} << 66) / (_Unsigned128{1} << 13);\r\n        assert(q._Word[0] == 1ull << 53);\r\n        assert(q._Word[1] == 0);\r\n    }\r\n    {\r\n        auto tmp = ~_Unsigned128{};\r\n        assert(tmp._Word[0] == ~0ull);\r\n        assert(tmp._Word[1] == ~0ull);\r\n        auto q = tmp / std::uint32_t{1};\r\n        assert(q == tmp);\r\n        q = tmp / std::uint64_t{1};\r\n        assert(q == tmp);\r\n        q = tmp / _Unsigned128{1};\r\n        assert(q == tmp);\r\n\r\n        q = tmp / _Unsigned128{1ull << 32};\r\n        assert(q._Word[0] == ~0ull);\r\n        assert(q._Word[1] == 0xffffffff);\r\n    }\r\n    {\r\n        _Unsigned128 result{0x01010101'01010101, 0x01010101'01010101};\r\n        _Unsigned128 tmp;\r\n        for (tmp = 0xffu; static_cast<bool>(tmp); tmp <<= 8, result >>= 8) {\r\n            auto q = ~_Unsigned128{} / tmp;\r\n            assert(q == result);\r\n            auto m    = ~_Unsigned128{} % tmp;\r\n            auto p    = q * tmp;\r\n            auto diff = ~_Unsigned128{} - p;\r\n            assert(m == diff);\r\n        }\r\n        assert(tmp == 0);\r\n    }\r\n    {\r\n        _Unsigned128 tmp;\r\n        for (tmp = 1; static_cast<bool>(tmp); tmp <<= 1) {\r\n            assert(tmp % tmp == 0);\r\n        }\r\n        assert(tmp == 0);\r\n    }\r\n    {\r\n        const _Unsigned128 x{0x01020304'02030405, 0x03040506'04050607};\r\n        const _Unsigned128 y{0x07060504'06050403, 0x05040302'04030101};\r\n        assert(((x & y) == _Unsigned128{0x01020104'02010401, 0x01040102'04010001}));\r\n        assert(((x & y) == 0x01040102'04010001'01020104'02010401_u128));\r\n        auto tmp = x;\r\n        tmp &= y;\r\n        assert(tmp == (x & y));\r\n\r\n        assert(((x | y) == _Unsigned128{0x07060704'06070407, 0x07040706'04070707}));\r\n        assert(((x | y) == 0x07040706'04070707'07060704'06070407_u128));\r\n        tmp = x;\r\n        tmp |= y;\r\n        assert(tmp == (x | y));\r\n\r\n        assert(((x ^ y) == _Unsigned128{0x06040600'04060006, 0x06000604'00060706}));\r\n        assert(((x ^ y) == 0x06000604'00060706'06040600'04060006_u128));\r\n        tmp = x;\r\n        tmp ^= y;\r\n        assert(tmp == (x ^ y));\r\n    }\r\n    {\r\n        _Unsigned128 x{};\r\n        assert(++x == 1);\r\n        assert(--x == 0);\r\n        assert(x == std::numeric_limits<_Unsigned128>::min());\r\n        --x;\r\n        assert(x._Word[0] == ~0ull);\r\n        assert(x._Word[1] == ~0ull);\r\n        assert(x == std::numeric_limits<_Unsigned128>::max());\r\n        --x;\r\n        assert(x._Word[0] == (~0ull << 1));\r\n        assert(x._Word[1] == ~0ull);\r\n        x._Word[0] = 0;\r\n        x._Word[1] = 1;\r\n        --x;\r\n        assert(x._Word[0] == ~0ull);\r\n        assert(x._Word[1] == 0);\r\n        ++x;\r\n        assert(x._Word[0] == 0);\r\n        assert(x._Word[1] == 1);\r\n        ++x;\r\n        assert(x._Word[0] == 1);\r\n        assert(x._Word[1] == 1);\r\n        x._Word[0] = ~0ull;\r\n        x._Word[1] = static_cast<std::uint64_t>(std::numeric_limits<std::int64_t>::max());\r\n        ++x;\r\n        assert(x._Word[0] == 0);\r\n        assert(x._Word[1] == static_cast<std::uint64_t>(std::numeric_limits<std::int64_t>::min()));\r\n        --x;\r\n        assert(x._Word[0] == ~0ull);\r\n        assert(x._Word[1] == static_cast<std::uint64_t>(std::numeric_limits<std::int64_t>::max()));\r\n    }\r\n    {\r\n        STATIC_ASSERT(noexcept(0_u128));\r\n        STATIC_ASSERT(noexcept(42_u128));\r\n        STATIC_ASSERT(noexcept(4'2_u128));\r\n        STATIC_ASSERT(noexcept(052_u128));\r\n        STATIC_ASSERT(noexcept(05'2_u128));\r\n        STATIC_ASSERT(noexcept(0x2a_u128));\r\n        STATIC_ASSERT(noexcept(0X2a_u128));\r\n        STATIC_ASSERT(noexcept(0x2A_u128));\r\n        STATIC_ASSERT(noexcept(0X2A_u128));\r\n        STATIC_ASSERT(noexcept(0x2'A_u128));\r\n        STATIC_ASSERT(noexcept(0b101010_u128));\r\n        STATIC_ASSERT(noexcept(0b1'0101'0_u128));\r\n        STATIC_ASSERT(noexcept(0B101010_u128));\r\n        STATIC_ASSERT(noexcept(0B1'0101'0_u128));\r\n        STATIC_ASSERT(noexcept(0xABCDEF_u128));\r\n        STATIC_ASSERT(noexcept(340282366920938463463374607431768211455_u128));\r\n        STATIC_ASSERT(noexcept(0xffffffff'FFFFFFFF'ffffFFFF'FFFFffff_u128));\r\n\r\n        STATIC_ASSERT(42_u128 == 42);\r\n        STATIC_ASSERT(4'2_u128 == 42);\r\n        STATIC_ASSERT(42_u128 == 052_u128);\r\n        STATIC_ASSERT(4'2_u128 == 052_u128);\r\n        STATIC_ASSERT(42_u128 == 0x2a_u128);\r\n        STATIC_ASSERT(4'2_u128 == 0X2a_u128);\r\n        STATIC_ASSERT(42_u128 == 0b101010_u128);\r\n        STATIC_ASSERT(4'2_u128 == 0b101010_u128);\r\n        STATIC_ASSERT(42_u128 == 0B101010_u128);\r\n        STATIC_ASSERT(4'2_u128 == 0B101010_u128);\r\n        STATIC_ASSERT(11259375_u128 == 0xABCDEF_u128);\r\n        STATIC_ASSERT(\r\n            340'2823'6692'0938'4634'6337'4607'4317'6821'1455_u128 == 0xffffffff'FFFFFFFF'ffffFFFF'FFFFffff_u128);\r\n\r\n        STATIC_ASSERT(\r\n            340'282'366'920'938'463'463'374'607'431'768'211'455_u128 == std::numeric_limits<_Unsigned128>::max());\r\n        STATIC_ASSERT(0xffffffff'ffffffff'ffffffff'ffffffff_u128 == std::numeric_limits<_Unsigned128>::max());\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_signed() {\r\n#if _HAS_CXX20\r\n    STATIC_ASSERT(std::regular<_Signed128>);\r\n    STATIC_ASSERT(std::three_way_comparable<_Signed128, ordtest::strong_ordering>);\r\n#endif // _HAS_CXX20\r\n\r\n    STATIC_ASSERT(std::numeric_limits<_Signed128>::is_specialized);\r\n    STATIC_ASSERT(std::numeric_limits<_Signed128>::is_exact);\r\n    STATIC_ASSERT(std::numeric_limits<_Signed128>::is_integer);\r\n    STATIC_ASSERT(std::numeric_limits<_Signed128>::is_signed);\r\n    STATIC_ASSERT(std::numeric_limits<_Signed128>::is_bounded);\r\n    STATIC_ASSERT(std::numeric_limits<_Signed128>::min() == _Signed128{0, 1ull << 63});\r\n    STATIC_ASSERT(std::numeric_limits<_Signed128>::max() == _Signed128{~0ull, ~0ull >> 1});\r\n    STATIC_ASSERT(std::numeric_limits<_Signed128>::digits == 127);\r\n    STATIC_ASSERT(std::numeric_limits<_Signed128>::radix == 2);\r\n    STATIC_ASSERT(!std::numeric_limits<_Signed128>::is_modulo);\r\n\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<bool, _Signed128>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<char, _Signed128>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<signed char, _Signed128>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<unsigned char, _Signed128>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<wchar_t, _Signed128>, _Signed128>);\r\n#ifdef __cpp_char8_t\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<char8_t, _Signed128>, _Signed128>);\r\n#endif // __cpp_char8_t\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<char16_t, _Signed128>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<char32_t, _Signed128>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<short, _Signed128>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<unsigned short, _Signed128>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<int, _Signed128>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<unsigned int, _Signed128>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<long, _Signed128>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<unsigned long, _Signed128>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<long long, _Signed128>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<unsigned long long, _Signed128>, _Signed128>);\r\n\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, bool>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, char>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, signed char>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, unsigned char>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, wchar_t>, _Signed128>);\r\n#ifdef __cpp_char8_t\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, char8_t>, _Signed128>);\r\n#endif // __cpp_char8_t\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, char16_t>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, char32_t>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, short>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, unsigned short>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, int>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, unsigned int>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, long>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, unsigned long>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, long long>, _Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, unsigned long long>, _Signed128>);\r\n\r\n    struct ConversionSource {\r\n        constexpr operator _Signed128() const {\r\n            return _Signed128{};\r\n        }\r\n    };\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, ConversionSource>, _Signed128>);\r\n\r\n    struct ConversionTarget {\r\n        constexpr ConversionTarget(_Signed128) {}\r\n    };\r\n    STATIC_ASSERT(SAME_AS<std::common_type_t<_Signed128, ConversionTarget>, ConversionTarget>);\r\n\r\n#if _HAS_CXX20\r\n    STATIC_ASSERT(std::_Integer_class<_Signed128>);\r\n    STATIC_ASSERT(std::_Integer_like<_Signed128>);\r\n    STATIC_ASSERT(std::_Signed_integer_like<_Signed128>);\r\n    STATIC_ASSERT(SAME_AS<std::_Make_unsigned_like_t<_Signed128>, _Unsigned128>);\r\n    STATIC_ASSERT(SAME_AS<std::_Make_signed_like_t<_Signed128>, _Signed128>);\r\n#endif // _HAS_CXX20\r\n\r\n    check_equal(_Signed128{});\r\n    check_equal(_Signed128{42});\r\n    check_equal(_Signed128{-42});\r\n    check_equal(_Signed128{0x11111111'11111111, 0x22222222'22222222});\r\n    check_equal(0x22222222'22222222'11111111'11111111_i128);\r\n\r\n    check_order(_Signed128{42}, _Signed128{-42}, ordtest::strong_ordering::greater);\r\n    check_order(_Signed128{0x11111111'11111111, 0x22222222'22222222},\r\n        _Signed128{0x01010101'01010101, 0x01010101'01010101}, ordtest::strong_ordering::greater);\r\n    check_order(0x22222222'22222222'11111111'11111111_i128, 0x01010101'01010101'01010101'01010101_i128,\r\n        ordtest::strong_ordering::greater);\r\n    check_order(_Signed128{~0ull, ~0ull}, _Signed128{-1}, ordtest::strong_ordering::equal);\r\n\r\n    check_order(_Signed128{-2}, _Signed128{-1}, ordtest::strong_ordering::less);\r\n    check_order(_Signed128{-2}, _Signed128{1}, ordtest::strong_ordering::less);\r\n    check_order(_Signed128{2}, _Signed128{-1}, ordtest::strong_ordering::greater);\r\n    check_order(_Signed128{2}, _Signed128{1}, ordtest::strong_ordering::greater);\r\n\r\n    check_equal(_Signed128{0, 0});\r\n    check_order(_Signed128{0, (1ull << 63)}, _Signed128{0, 0}, ordtest::strong_ordering::less);\r\n    check_order(_Signed128{0, (1ull << 63)}, _Signed128{0, (1ull << 63)}, ordtest::strong_ordering::equal);\r\n    check_order(_Signed128{0, 0}, _Signed128{1, 0}, ordtest::strong_ordering::less);\r\n    check_order(_Signed128{0, (1ull << 63)}, _Signed128{1, 0}, ordtest::strong_ordering::less);\r\n    check_order(_Signed128{0, (1ull << 63)}, _Signed128{1, (1ull << 63)}, ordtest::strong_ordering::less);\r\n    check_order(_Signed128{0, 0}, _Signed128{0, 1}, ordtest::strong_ordering::less);\r\n    check_order(_Signed128{0, (1ull << 63)}, _Signed128{0, 1}, ordtest::strong_ordering::less);\r\n    check_order(_Signed128{0, (1ull << 63)}, _Signed128{0, 1 | (1ull << 63)}, ordtest::strong_ordering::less);\r\n    check_order(_Signed128{0, 0}, _Signed128{1, 1}, ordtest::strong_ordering::less);\r\n    check_order(_Signed128{0, (1ull << 63)}, _Signed128{1, 1}, ordtest::strong_ordering::less);\r\n    check_order(_Signed128{0, (1ull << 63)}, _Signed128{1, 1 | (1ull << 63)}, ordtest::strong_ordering::less);\r\n\r\n    assert((_Signed128{-2} == _Unsigned128{0ull - 2, ~0ull}));\r\n    assert((_Unsigned128{_Signed128{-2}} == _Unsigned128{0ull - 2, ~0ull}));\r\n    assert((_Signed128{-2} == _Signed128{_Unsigned128{0ull - 2, ~0ull}}));\r\n\r\n    {\r\n        _Signed128 u{42};\r\n        assert(u._Word[0] == 42);\r\n        assert(u._Word[1] == 0);\r\n        u += _Signed128{0};\r\n        assert(u._Word[0] == 42);\r\n        assert(u._Word[1] == 0);\r\n\r\n        assert(static_cast<std::uint64_t>(u) == 42);\r\n        assert(static_cast<std::uint32_t>(u) == 42);\r\n        assert(static_cast<std::uint16_t>(u) == 42);\r\n        assert(static_cast<std::uint8_t>(u) == 42);\r\n\r\n        assert(static_cast<std::int64_t>(u) == 42);\r\n        assert(static_cast<std::int32_t>(u) == 42);\r\n        assert(static_cast<std::int16_t>(u) == 42);\r\n        assert(static_cast<std::int8_t>(u) == 42);\r\n    }\r\n    {\r\n        _Signed128 nu{-42};\r\n        assert(nu._Word[0] == 0ull - 42);\r\n        assert(nu._Word[1] == ~0ull);\r\n\r\n        assert(static_cast<std::uint64_t>(nu) == 0ull - 42);\r\n        assert(static_cast<std::uint32_t>(nu) == 0u - 42);\r\n        assert(static_cast<std::uint16_t>(nu) == 65536 - 42);\r\n        assert(static_cast<std::uint8_t>(nu) == 256 - 42);\r\n\r\n        assert(static_cast<std::int64_t>(nu) == -42);\r\n        assert(static_cast<std::int32_t>(nu) == -42);\r\n        assert(static_cast<std::int16_t>(nu) == -42);\r\n        assert(static_cast<std::int8_t>(nu) == -42);\r\n    }\r\n\r\n    {\r\n        _Signed128 u{42};\r\n        _Signed128 v{13};\r\n        {\r\n            _Signed128 sum = u + v;\r\n            assert(sum._Word[0] == 55);\r\n            assert(sum._Word[1] == 0);\r\n            sum = v + u;\r\n            assert(sum._Word[0] == 55);\r\n            assert(sum._Word[1] == 0);\r\n        }\r\n        {\r\n            _Signed128 diff = u - v;\r\n            assert(diff._Word[0] == 29);\r\n            assert(diff._Word[1] == 0);\r\n            diff = v - u;\r\n            assert(diff._Word[0] == 0ull - 29);\r\n            assert(diff._Word[1] == ~0ull);\r\n        }\r\n        {\r\n            u              = -u;\r\n            _Signed128 sum = u + v;\r\n            assert(sum._Word[0] == 0ull - 29);\r\n            assert(sum._Word[1] == ~0ull);\r\n            sum = v + u;\r\n            assert(sum._Word[0] == 0ull - 29);\r\n            assert(sum._Word[1] == ~0ull);\r\n        }\r\n        {\r\n            _Signed128 diff = u - v;\r\n            assert(diff._Word[0] == 0ull - 55);\r\n            assert(diff._Word[1] == ~0ull);\r\n            diff = v - u;\r\n            assert(diff._Word[0] == 55);\r\n            assert(diff._Word[1] == 0);\r\n        }\r\n        {\r\n            u                  = -u;\r\n            _Signed128 product = u * v;\r\n            assert(product._Word[0] == 42 * 13);\r\n            assert(product._Word[1] == 0);\r\n            product = v * u;\r\n            assert(product._Word[0] == 42 * 13);\r\n            assert(product._Word[1] == 0);\r\n        }\r\n        {\r\n            v                  = -v;\r\n            _Signed128 product = u * v;\r\n            assert(product._Word[0] == 0ull - (42 * 13));\r\n            assert(product._Word[1] == ~0ull);\r\n            product = v * u;\r\n            assert(product._Word[0] == 0ull - (42 * 13));\r\n            assert(product._Word[1] == ~0ull);\r\n        }\r\n        {\r\n            u                  = -u;\r\n            _Signed128 product = u * v;\r\n            assert(product._Word[0] == 42 * 13);\r\n            assert(product._Word[1] == 0);\r\n            product = v * u;\r\n            assert(product._Word[0] == 42 * 13);\r\n            assert(product._Word[1] == 0);\r\n        }\r\n    }\r\n    {\r\n        auto product = _Signed128{0x01010101'01010101, 0x01010101'01010101} * 5;\r\n        assert(product == 0x05050505'05050505'05050505'05050505_i128);\r\n        assert(product._Word[0] == 0x05050505'05050505);\r\n        assert(product._Word[1] == 0x05050505'05050505);\r\n\r\n        product = 5 * _Signed128{0x01010101'01010101, 0x01010101'01010101};\r\n        assert(product == 0x05050505'05050505'05050505'05050505_i128);\r\n        assert(product._Word[0] == 0x05050505'05050505);\r\n        assert(product._Word[1] == 0x05050505'05050505);\r\n    }\r\n    {\r\n        _Signed128 product{0x01010101'01010101, 0x01010101'01010101};\r\n        product *= product;\r\n        assert(product == 0x100f0e0d'0c0b0a09'08070605'04030201_i128);\r\n        assert(product._Word[0] == 0x08070605'04030201);\r\n        assert(product._Word[1] == 0x100f0e0d'0c0b0a09);\r\n        assert(+product == product);\r\n        assert(-product + product == 0);\r\n    }\r\n    {\r\n        auto product =\r\n            _Signed128{0x01020304'05060708, 0x090a0b0c'0d0e0f00} * _Signed128{0x000f0e0d'0c0b0a09, 0x08070605'04030201};\r\n        assert(product == -0x23e49431'bc3293de'923e71aa'e92b70b8_i128);\r\n        assert(product._Word[0] == 0x6dc18e55'16d48f48);\r\n        assert(product._Word[1] == 0xdc1b6bce'43cd6c21);\r\n        assert(+product == product);\r\n        assert(-product + product == 0);\r\n\r\n        product <<= 11;\r\n        assert(product == -0x24a18de1'949ef491'f38d5749'5b85c000_i128);\r\n        assert(product._Word[0] == 0x0c72a8b6'a47a4000);\r\n        assert(product._Word[1] == 0xdb5e721e'6b610b6e);\r\n        assert(+product == product);\r\n        assert(-product + product == 0);\r\n\r\n        product >>= 17;\r\n        assert(product == -0x00001250'c6f0ca4f'7a48f9c6'aba4adc3_i128);\r\n        assert(product._Word[0] == 0x85b70639'545b523d);\r\n        assert(product._Word[1] == 0xffffedaf'390f35b0);\r\n        assert(+product == product);\r\n        assert(-product + product == 0);\r\n    }\r\n    {\r\n        _Signed128 q = _Signed128{13} / _Signed128{4};\r\n        assert(q._Word[0] == 3);\r\n        assert(q._Word[1] == 0);\r\n\r\n        q = _Signed128{4} / _Signed128{13};\r\n        assert(q._Word[0] == 0);\r\n        assert(q._Word[1] == 0);\r\n\r\n        q = _Signed128{13} / _Signed128{-4};\r\n        assert(q._Word[0] == 0ull - 3);\r\n        assert(q._Word[1] == ~0ull);\r\n\r\n        q = _Signed128{-4} / _Signed128{13};\r\n        assert(q._Word[0] == 0);\r\n        assert(q._Word[1] == 0);\r\n\r\n        q = _Signed128{-13} / _Signed128{4};\r\n        assert(q._Word[0] == 0ull - 3);\r\n        assert(q._Word[1] == ~0ull);\r\n\r\n        q = _Signed128{4} / _Signed128{-13};\r\n        assert(q._Word[0] == 0);\r\n        assert(q._Word[1] == 0);\r\n\r\n        q = _Signed128{-13} / _Signed128{-4};\r\n        assert(q._Word[0] == 3);\r\n        assert(q._Word[1] == 0);\r\n\r\n        q = _Signed128{-4} / _Signed128{-13};\r\n        assert(q._Word[0] == 0);\r\n        assert(q._Word[1] == 0);\r\n\r\n        q = _Signed128{0x01010101'01010101, 0x01010101'01010101} / _Signed128{13};\r\n        assert(q == 0x0013c500'13c50013'c50013c5'0013c500_i128);\r\n        assert(q._Word[0] == 0xc50013c5'0013c500);\r\n        assert(q._Word[1] == 0x0013c500'13c50013);\r\n\r\n        q = _Signed128{0x22222222'22222222, 0x22222222'22222222} / _Signed128{0x11111111'11111111, 0x11111111'11111111};\r\n        assert(q._Word[0] == 2);\r\n        assert(q._Word[1] == 0);\r\n\r\n        q = (_Signed128{1} << 66) / (_Signed128{1} << 13);\r\n        assert(q._Word[0] == 1ull << 53);\r\n        assert(q._Word[1] == 0);\r\n    }\r\n    {\r\n        auto tmp = ~_Signed128{};\r\n        assert(tmp._Word[0] == ~0ull);\r\n        assert(tmp._Word[1] == ~0ull);\r\n        _Signed128 q = tmp / std::uint32_t{1};\r\n        assert(q == tmp);\r\n        q = tmp / std::uint64_t{1};\r\n        assert(q == tmp);\r\n        q = tmp / _Signed128{1};\r\n        assert(q == tmp);\r\n\r\n        q = tmp / _Signed128{1ull << 32};\r\n        assert(q._Word[0] == 0);\r\n        assert(q._Word[1] == 0);\r\n    }\r\n    {\r\n        _Signed128 result{0x80808080'80808080, 0x00808080'80808080};\r\n        for (_Signed128 tmp = 0xffu; tmp > 0; tmp <<= 8, result >>= 8) {\r\n            auto q = std::numeric_limits<_Signed128>::max() / tmp;\r\n            assert(q == result);\r\n            auto m    = std::numeric_limits<_Signed128>::max() % tmp;\r\n            auto p    = q * tmp;\r\n            auto diff = std::numeric_limits<_Signed128>::max() - p;\r\n            assert(m == diff);\r\n        }\r\n    }\r\n    {\r\n        _Signed128 result = _Signed128{0x7f7f7f7f'7f7f7f80, 0xff7f7f7f'7f7f7f7f};\r\n        for (_Signed128 tmp = 0xffu; tmp > 0; tmp <<= 8, result = (result >> 8) + 1) {\r\n            auto q = std::numeric_limits<_Signed128>::min() / tmp;\r\n            assert(q == result);\r\n            auto m    = std::numeric_limits<_Signed128>::min() % tmp;\r\n            auto p    = q * tmp;\r\n            auto diff = std::numeric_limits<_Signed128>::min() - p;\r\n            assert(m == diff);\r\n        }\r\n    }\r\n    {\r\n        _Signed128 tmp;\r\n        for (tmp = 1; static_cast<bool>(tmp); tmp <<= 1) {\r\n            assert(tmp % tmp == 0);\r\n        }\r\n        assert(tmp == 0);\r\n    }\r\n    {\r\n        _Signed128 r = _Signed128{13} % _Signed128{4};\r\n        assert(r._Word[0] == 1);\r\n        assert(r._Word[1] == 0);\r\n\r\n        r = _Signed128{4} % _Signed128{13};\r\n        assert(r._Word[0] == 4);\r\n        assert(r._Word[1] == 0);\r\n\r\n        r = _Signed128{13} % _Signed128{-4};\r\n        assert(r._Word[0] == 1);\r\n        assert(r._Word[1] == 0);\r\n\r\n        r = _Signed128{-4} % _Signed128{13};\r\n        assert(r._Word[0] == 0ull - 4);\r\n        assert(r._Word[1] == ~0ull);\r\n\r\n        r = _Signed128{-13} % _Signed128{4};\r\n        assert(r._Word[0] == 0ull - 1);\r\n        assert(r._Word[1] == ~0ull);\r\n\r\n        r = _Signed128{4} % _Signed128{-13};\r\n        assert(r._Word[0] == 4);\r\n        assert(r._Word[1] == 0);\r\n\r\n        r = _Signed128{-13} % _Signed128{-4};\r\n        assert(r._Word[0] == 0ull - 1);\r\n        assert(r._Word[1] == ~0ull);\r\n\r\n        r = _Signed128{-4} % _Signed128{-13};\r\n        assert(r._Word[0] == 0ull - 4);\r\n        assert(r._Word[1] == ~0ull);\r\n    }\r\n    {\r\n        const _Signed128 x{0x01020304'02030405, 0x03040506'04050607};\r\n        const _Signed128 y{0x07060504'06050403, 0x05040302'04030101};\r\n        assert(((x & y) == _Signed128{0x01020104'02010401, 0x01040102'04010001}));\r\n        assert(((x & y) == 0x01040102'04010001'01020104'02010401_i128));\r\n        auto tmp = x;\r\n        tmp &= y;\r\n        assert(tmp == (x & y));\r\n\r\n        assert(((x | y) == _Signed128{0x07060704'06070407, 0x07040706'04070707}));\r\n        assert(((x | y) == 0x07040706'04070707'07060704'06070407_i128));\r\n        tmp = x;\r\n        tmp |= y;\r\n        assert(tmp == (x | y));\r\n\r\n        assert(((x ^ y) == _Signed128{0x06040600'04060006, 0x06000604'00060706}));\r\n        assert(((x ^ y) == 0x06000604'00060706'06040600'04060006_i128));\r\n        tmp = x;\r\n        tmp ^= y;\r\n        assert(tmp == (x ^ y));\r\n    }\r\n    {\r\n        _Signed128 x{};\r\n        assert(++x == 1);\r\n        assert(--x == 0);\r\n        --x;\r\n        assert(x._Word[0] == ~0ull);\r\n        assert(x._Word[1] == ~0ull);\r\n        --x;\r\n        assert(x._Word[0] == (~0ull << 1));\r\n        assert(x._Word[1] == ~0ull);\r\n        x._Word[0] = 0;\r\n        x._Word[1] = 1;\r\n        --x;\r\n        assert(x._Word[0] == ~0ull);\r\n        assert(x._Word[1] == 0);\r\n        ++x;\r\n        assert(x._Word[0] == 0);\r\n        assert(x._Word[1] == 1);\r\n        ++x;\r\n        assert(x._Word[0] == 1);\r\n        assert(x._Word[1] == 1);\r\n        x._Word[0] = ~0ull;\r\n        x._Word[1] = static_cast<std::uint64_t>(std::numeric_limits<std::int64_t>::max());\r\n        ++x;\r\n        assert(x._Word[0] == 0);\r\n        assert(x._Word[1] == static_cast<std::uint64_t>(std::numeric_limits<std::int64_t>::min()));\r\n        assert(x == std::numeric_limits<_Signed128>::min());\r\n        --x;\r\n        assert(x._Word[0] == ~0ull);\r\n        assert(x._Word[1] == static_cast<std::uint64_t>(std::numeric_limits<std::int64_t>::max()));\r\n        assert(x == std::numeric_limits<_Signed128>::max());\r\n    }\r\n    {\r\n        STATIC_ASSERT(noexcept(0_i128));\r\n        STATIC_ASSERT(noexcept(42_i128));\r\n        STATIC_ASSERT(noexcept(4'2_i128));\r\n        STATIC_ASSERT(noexcept(052_i128));\r\n        STATIC_ASSERT(noexcept(05'2_i128));\r\n        STATIC_ASSERT(noexcept(0x2a_i128));\r\n        STATIC_ASSERT(noexcept(0X2a_i128));\r\n        STATIC_ASSERT(noexcept(0x2A_i128));\r\n        STATIC_ASSERT(noexcept(0X2A_i128));\r\n        STATIC_ASSERT(noexcept(0x2'A_i128));\r\n        STATIC_ASSERT(noexcept(0b101010_i128));\r\n        STATIC_ASSERT(noexcept(0b1'0101'0_i128));\r\n        STATIC_ASSERT(noexcept(0B101010_i128));\r\n        STATIC_ASSERT(noexcept(0B1'0101'0_i128));\r\n        STATIC_ASSERT(noexcept(0xABCDEF_i128));\r\n        STATIC_ASSERT(noexcept(170141183460469231731687303715884105727_i128));\r\n        STATIC_ASSERT(noexcept(0x7fffffff'FFFFFFFF'ffffFFFF'FFFFffff_i128));\r\n\r\n        STATIC_ASSERT(42_i128 == 42);\r\n        STATIC_ASSERT(4'2_i128 == 42);\r\n        STATIC_ASSERT(42_i128 == 052_i128);\r\n        STATIC_ASSERT(4'2_i128 == 052_i128);\r\n        STATIC_ASSERT(42_i128 == 0x2a_i128);\r\n        STATIC_ASSERT(4'2_i128 == 0X2a_i128);\r\n        STATIC_ASSERT(42_i128 == 0b101010_i128);\r\n        STATIC_ASSERT(4'2_i128 == 0b101010_i128);\r\n        STATIC_ASSERT(42_i128 == 0B101010_i128);\r\n        STATIC_ASSERT(4'2_i128 == 0B101010_i128);\r\n        STATIC_ASSERT(11259375_i128 == 0xABCDEF_i128);\r\n        STATIC_ASSERT(\r\n            170'1411'8346'0469'2317'3168'7303'7158'8410'5727_i128 == 0x7fffffff'FFFFFFFF'ffffFFFF'FFFFffff_i128);\r\n\r\n        STATIC_ASSERT(\r\n            170'141'183'460'469'231'731'687'303'715'884'105'727_i128 == std::numeric_limits<_Signed128>::max());\r\n        STATIC_ASSERT(0x7fffffff'ffffffff'ffffffff'ffffffff_i128 == std::numeric_limits<_Signed128>::max());\r\n\r\n        STATIC_ASSERT(\r\n            -170'141'183'460'469'231'731'687'303'715'884'105'727_i128 - 1 == std::numeric_limits<_Signed128>::min());\r\n        STATIC_ASSERT(-0x7fffffff'ffffffff'ffffffff'ffffffff_i128 - 1 == std::numeric_limits<_Signed128>::min());\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class T>\r\nT val() noexcept;\r\n\r\n#if _HAS_CXX20\r\ntemplate <class T, class U>\r\nconcept CanConditional = requires { true ? val<T>() : val<U>(); };\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\ntemplate <class T, class U, class = void>\r\nconstexpr bool CanConditional = false;\r\n\r\ntemplate <class T, class U>\r\nconstexpr bool CanConditional<T, U, std::void_t<decltype(true ? val<T>() : val<U>())>> = true;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n\r\nconstexpr bool test_cross() {\r\n    // Test the behavior of cross-type operations.\r\n\r\n#define TEST(expr, result)                                                                 \\\r\n    do {                                                                                   \\\r\n        STATIC_ASSERT(SAME_AS<decltype((expr)), std::remove_const_t<decltype((result))>>); \\\r\n        assert((expr) == (result));                                                        \\\r\n    } while (0)\r\n\r\n    //////// Mixed integer-class operands\r\n\r\n    // With mixed operands, binary arithmetic operators convert the signed\r\n    // operand to unsigned, producing an unsigned result.\r\n\r\n    TEST(_Unsigned128{42} + _Signed128{-43}, _Unsigned128{-1});\r\n    TEST(_Signed128{42} + _Unsigned128{-43}, _Unsigned128{-1});\r\n    TEST(_Unsigned128{42} - _Signed128{-43}, _Unsigned128{42 + 43});\r\n    TEST(_Signed128{42} - _Unsigned128{-43}, _Unsigned128{42 + 43});\r\n    TEST(_Unsigned128{42} * _Signed128{-43}, _Unsigned128{42 * -43});\r\n    TEST(_Signed128{42} * _Unsigned128{-43}, _Unsigned128{42 * -43});\r\n    TEST(_Unsigned128{42} / _Signed128{-43}, _Unsigned128{0});\r\n    TEST(_Signed128{42} / _Unsigned128{-43}, _Unsigned128{0});\r\n    TEST(_Unsigned128{42} % _Signed128{-43}, _Unsigned128{42});\r\n    TEST(_Signed128{42} % _Unsigned128{-43}, _Unsigned128{42});\r\n    TEST(_Unsigned128{42} & _Signed128{43}, _Unsigned128{42});\r\n    TEST(_Signed128{42} & _Unsigned128{43}, _Unsigned128{42});\r\n    TEST(_Unsigned128{42} | _Signed128{43}, _Unsigned128{43});\r\n    TEST(_Signed128{42} | _Unsigned128{43}, _Unsigned128{43});\r\n    TEST(_Unsigned128{42} ^ _Signed128{43}, _Unsigned128{1});\r\n    TEST(_Signed128{42} ^ _Unsigned128{43}, _Unsigned128{1});\r\n\r\n    // Shifts yield a result of the left operand's type.\r\n\r\n    TEST(_Unsigned128{1} << _Signed128{43}, _Unsigned128{1ull << 43});\r\n    TEST(_Signed128{1} << _Unsigned128{43}, _Signed128{1ull << 43});\r\n    TEST(_Unsigned128{-1} << _Signed128{43}, (_Unsigned128{0ull - (1ull << 43), ~0ull}));\r\n    TEST(_Signed128{-1} << _Unsigned128{43}, (_Signed128{0ull - (1ull << 43), ~0ull}));\r\n\r\n    TEST((_Unsigned128{0, 1}) >> _Signed128{43}, _Unsigned128{1ull << 21});\r\n    TEST((_Signed128{0, 1}) >> _Unsigned128{43}, _Signed128{1ull << 21});\r\n    TEST((_Unsigned128{0, ~0ull} >> _Signed128{43}), (_Unsigned128{~((1ull << 21) - 1), (1ull << 21) - 1}));\r\n    TEST((_Signed128{0, ~0ull} >> _Unsigned128{43}), (_Signed128{~((1ull << 21) - 1), ~0ull}));\r\n\r\n    // Integer-class types are explicitly convertible to integer-like (the union\r\n    // of integer-class and integral) types. Integer-class types are implicitly\r\n    // convertible only to wider types, or types of the same width and\r\n    // signedness. Consequently, the conditional operator should reject integer-\r\n    // class operands with the same width but differing signedness.\r\n    STATIC_ASSERT(!CanConditional<_Unsigned128, _Signed128>);\r\n    STATIC_ASSERT(!CanConditional<_Signed128, _Unsigned128>);\r\n\r\n#if _HAS_CXX20\r\n    // Conversions between integer-class types with the same width and differing\r\n    // signedness are narrowing, so the three-way comparison operator should\r\n    // reject mixed operands of such types.\r\n    STATIC_ASSERT(!std::three_way_comparable_with<_Unsigned128, _Signed128>);\r\n    STATIC_ASSERT(!std::three_way_comparable_with<_Signed128, _Unsigned128>);\r\n#endif // _HAS_CXX20\r\n\r\n    // Other comparison operators behave as they do for operands of mixed\r\n    // integral types; when the operands have the same width, the signed operand\r\n    // converts to unsigned and the comparison is made.\r\n\r\n    TEST(_Unsigned128{42} == _Signed128{0}, false);\r\n    TEST(_Signed128{42} == _Unsigned128{42}, true);\r\n    TEST(_Unsigned128{42} != _Signed128{0}, true);\r\n    TEST(_Signed128{42} != _Unsigned128{42}, false);\r\n\r\n    TEST(_Unsigned128{42} < _Signed128{-43}, true);\r\n    TEST(_Signed128{42} < _Unsigned128{-43}, true);\r\n    TEST(_Unsigned128{42} > _Signed128{-43}, false);\r\n    TEST(_Signed128{42} > _Unsigned128{-43}, false);\r\n    TEST(_Unsigned128{42} <= _Signed128{-43}, true);\r\n    TEST(_Signed128{42} <= _Unsigned128{-43}, true);\r\n    TEST(_Unsigned128{42} >= _Signed128{-43}, false);\r\n    TEST(_Signed128{42} >= _Unsigned128{-43}, false);\r\n\r\n    // The logical binary operators behave just like they do for integral types;\r\n    // the individual operands are converted to bool and the operation performed\r\n    // normally.\r\n\r\n    TEST(_Unsigned128{42} && _Signed128{0}, false);\r\n    TEST(_Signed128{42} && _Unsigned128{0}, false);\r\n    TEST(_Unsigned128{42} || _Signed128{0}, true);\r\n    TEST(_Signed128{42} || _Unsigned128{0}, true);\r\n\r\n    // Assignments convert the RHS to the type of the LHS, just as for integral\r\n    // types.\r\n    {\r\n        _Unsigned128 u{};\r\n        _Unsigned128 x{42};\r\n        _Signed128 i{42};\r\n        _Signed128 y{13};\r\n        TEST(u = i, x);\r\n        u = 13;\r\n        TEST(i = u, y);\r\n\r\n        x = 26;\r\n        TEST(u += i, x);\r\n        y = 39;\r\n        TEST(i += u, y);\r\n\r\n        x = -13;\r\n        TEST(u -= i, x);\r\n        y = 52;\r\n        TEST(i -= u, y);\r\n\r\n        x = -26;\r\n        TEST(u *= _Signed128{2}, x);\r\n        y = 104;\r\n        TEST(i *= _Unsigned128{2}, y);\r\n\r\n        x = _Unsigned128{0x55555555'5555554c, 0x55555555'55555555};\r\n        TEST(u /= _Signed128{3}, x); // Yes, u is still unsigned =)\r\n        y = 34;\r\n        TEST(i /= _Unsigned128{3}, y);\r\n\r\n        x = 4;\r\n        TEST(u %= _Signed128{8}, x);\r\n        y = 2;\r\n        TEST(i %= _Unsigned128{8}, y);\r\n\r\n        x = 16;\r\n        TEST(u <<= _Signed128{2}, x);\r\n        y = 8;\r\n        TEST(i <<= _Unsigned128{2}, y);\r\n\r\n        x = 8;\r\n        TEST(u >>= _Signed128{1}, x);\r\n        y = 4;\r\n        TEST(i >>= _Unsigned128{1}, y);\r\n\r\n        x = 9;\r\n        TEST(u |= _Signed128{1}, x);\r\n        y = 5;\r\n        TEST(i |= _Unsigned128{1}, y);\r\n\r\n        x = 9;\r\n        TEST(u &= _Signed128{59}, x);\r\n        y = 1;\r\n        TEST(i &= _Unsigned128{59}, y);\r\n\r\n        x = 12;\r\n        TEST(u ^= _Signed128{5}, x);\r\n        y = 4;\r\n        TEST(i ^= _Unsigned128{5}, y);\r\n    }\r\n\r\n    //////// Mixed integer and integer-class operands\r\n\r\n    // With mixed operands, binary arithmetic operators convert the signed\r\n    // operand to unsigned, producing an unsigned result.\r\n\r\n    TEST(_Unsigned128{42} + -43, _Unsigned128{-1});\r\n    TEST(_Signed128{42} + -43, _Signed128{-1});\r\n    TEST(42 + _Signed128{-43}, _Signed128{-1});\r\n    TEST(42 + _Unsigned128{-43}, _Unsigned128{-1});\r\n    TEST(_Unsigned128{42} - -43, _Unsigned128{42 + 43});\r\n    TEST(_Signed128{42} - -43, _Signed128{42 + 43});\r\n    TEST(42 - _Signed128{-43}, _Signed128{42 + 43});\r\n    TEST(42 - _Unsigned128{-43}, _Unsigned128{42 + 43});\r\n    TEST(_Unsigned128{42} * -43, _Unsigned128{42 * -43});\r\n    TEST(_Signed128{42} * -43, _Signed128{42 * -43});\r\n    TEST(42 * _Signed128{-43}, _Signed128{42 * -43});\r\n    TEST(42 * _Unsigned128{-43}, _Unsigned128{42 * -43});\r\n    TEST(_Unsigned128{42} / -43, _Unsigned128{0});\r\n    TEST(_Signed128{42} / -43, _Signed128{0});\r\n    TEST(42 / _Signed128{-43}, _Signed128{0});\r\n    TEST(42 / _Unsigned128{-43}, _Unsigned128{0});\r\n    TEST(_Unsigned128{42} % -43, _Unsigned128{42});\r\n    TEST(_Signed128{42} % -43, _Signed128{42});\r\n    TEST(42 % _Signed128{-43}, _Signed128{42});\r\n    TEST(42 % _Unsigned128{-43}, _Unsigned128{42});\r\n    TEST(_Unsigned128{42} & 43, _Unsigned128{42});\r\n    TEST(_Signed128{42} & 43, _Signed128{42});\r\n    TEST(42 & _Signed128{43}, _Signed128{42});\r\n    TEST(42 & _Unsigned128{43}, _Unsigned128{42});\r\n    TEST(_Unsigned128{42} | 43, _Unsigned128{43});\r\n    TEST(_Signed128{42} | 43, _Signed128{43});\r\n    TEST(42 | _Signed128{43}, _Signed128{43});\r\n    TEST(42 | _Unsigned128{43}, _Unsigned128{43});\r\n    TEST(_Unsigned128{42} ^ 43, _Unsigned128{1});\r\n    TEST(_Signed128{42} ^ 43, _Signed128{1});\r\n    TEST(42 ^ _Signed128{43}, _Signed128{1});\r\n    TEST(42 ^ _Unsigned128{43}, _Unsigned128{1});\r\n\r\n    // Shifts yield a result of the left operand's type.\r\n\r\n    TEST(_Unsigned128{1} << 4, _Unsigned128{1ull << 4});\r\n    TEST(_Signed128{1} << 4, _Signed128{1ull << 4});\r\n    TEST(1 << _Signed128{4}, 16);\r\n    TEST(1 << _Unsigned128{4}, 16);\r\n\r\n    TEST((_Unsigned128{0, 1}) >> 3, _Unsigned128{1ull << 61});\r\n    TEST((_Signed128{0, 1}) >> 3, _Signed128{1ull << 61});\r\n    TEST(256 >> _Signed128{3}, 32);\r\n    TEST(256 >> _Unsigned128{3}, 32);\r\n\r\n    TEST(true ? _Unsigned128{42} : 13, _Unsigned128{42});\r\n    TEST(true ? _Signed128{42} : 13, _Signed128{42});\r\n    TEST(true ? 42 : _Signed128{13}, _Signed128{42});\r\n    TEST(true ? 42 : _Unsigned128{13}, _Unsigned128{42});\r\n\r\n#if _HAS_CXX20\r\n    // (meow <=> 0) here is a hack to get prvalues\r\n    TEST(4 <=> _Unsigned128{3}, (std::strong_ordering::greater <=> 0));\r\n    TEST(4 <=> _Signed128{3}, (std::strong_ordering::greater <=> 0));\r\n    TEST(_Signed128{4} <=> 3, (std::strong_ordering::greater <=> 0));\r\n    TEST(_Unsigned128{4} <=> 3, (std::strong_ordering::greater <=> 0));\r\n    TEST(3 <=> _Unsigned128{3}, (std::strong_ordering::equal <=> 0));\r\n    TEST(3 <=> _Signed128{3}, (std::strong_ordering::equal <=> 0));\r\n    TEST(_Signed128{3} <=> 3, (std::strong_ordering::equal <=> 0));\r\n    TEST(_Unsigned128{3} <=> 3, (std::strong_ordering::equal <=> 0));\r\n    TEST(-3 <=> _Unsigned128{3}, (std::strong_ordering::greater <=> 0));\r\n    TEST(-3 <=> _Signed128{3}, (std::strong_ordering::less <=> 0));\r\n    TEST(_Signed128{-3} <=> 3, (std::strong_ordering::less <=> 0));\r\n    TEST(_Unsigned128{-3} <=> 3, (std::strong_ordering::greater <=> 0));\r\n#endif // _HAS_CXX20\r\n\r\n    // Other comparison operators behave as they do for operands of mixed\r\n    // integral types; when the operands have the same width, the signed operand\r\n    // converts to unsigned and the comparison is made.\r\n\r\n    TEST(_Unsigned128{42} == 0, false);\r\n    TEST(_Signed128{42} == 42, true);\r\n    TEST(42 == _Signed128{0}, false);\r\n    TEST(42 == _Unsigned128{42}, true);\r\n    TEST(_Unsigned128{42} != 0, true);\r\n    TEST(_Signed128{42} != 42, false);\r\n    TEST(42 != _Signed128{0}, true);\r\n    TEST(42 != _Unsigned128{42}, false);\r\n\r\n    TEST(_Unsigned128{42} < -43, true);\r\n    TEST(_Signed128{42} < -43, false);\r\n    TEST(42 < _Signed128{-43}, false);\r\n    TEST(42 < _Unsigned128{-43}, true);\r\n    TEST(_Unsigned128{42} > -43, false);\r\n    TEST(_Signed128{42} > -43, true);\r\n    TEST(42 > _Signed128{-43}, true);\r\n    TEST(42 > _Unsigned128{-43}, false);\r\n    TEST(_Unsigned128{42} <= -43, true);\r\n    TEST(_Signed128{42} <= -43, false);\r\n    TEST(42 <= _Signed128{-43}, false);\r\n    TEST(42 <= _Unsigned128{-43}, true);\r\n    TEST(_Unsigned128{42} >= -43, false);\r\n    TEST(_Signed128{42} >= -43, true);\r\n    TEST(42 >= _Signed128{-43}, true);\r\n    TEST(42 >= _Unsigned128{-43}, false);\r\n\r\n    // The logical binary operators behave just like they do for integral types;\r\n    // the individual operands are converted to bool and the operation performed\r\n    // normally.\r\n\r\n    TEST(_Unsigned128{42} && 0, false);\r\n    TEST(_Signed128{42} && 0, false);\r\n    TEST(42 && _Signed128{0}, false);\r\n    TEST(42 && _Unsigned128{0}, false);\r\n    TEST(_Unsigned128{42} || 0, true);\r\n    TEST(_Signed128{42} || 0, true);\r\n    TEST(42 || _Signed128{0}, true);\r\n    TEST(42 || _Unsigned128{0}, true);\r\n\r\n    // Assignments convert the RHS to the type of the LHS, just as for integral\r\n    // types.\r\n    {\r\n        _Unsigned128 u;\r\n        _Signed128 i;\r\n        _Unsigned128 x = 42;\r\n        _Signed128 y   = 13;\r\n        TEST(u = 42, x);\r\n        TEST(i = 13, y);\r\n\r\n        x = 55;\r\n        TEST(u += 13, x);\r\n        y = 26;\r\n        TEST(i += 13, y);\r\n\r\n        x = -13;\r\n        TEST(u -= 68, x);\r\n        y = -6;\r\n        TEST(i -= 32, y);\r\n\r\n        x = -26;\r\n        TEST(u *= 2, x);\r\n        y = 12;\r\n        TEST(i *= -2, y);\r\n\r\n        x = _Unsigned128{0x55555555'5555554c, 0x55555555'55555555};\r\n        TEST(u /= 3, x); // Yes, u is still unsigned =)\r\n        y = 4;\r\n        TEST(i /= 3, y);\r\n\r\n        x = 4;\r\n        TEST(u %= 8, x);\r\n        y = 4;\r\n        TEST(i %= 8, y);\r\n\r\n        x = 16;\r\n        TEST(u <<= 2, x);\r\n        y = 16;\r\n        TEST(i <<= 2, y);\r\n\r\n        x = 8;\r\n        TEST(u >>= 1, x);\r\n        y = 8;\r\n        TEST(i >>= 1, y);\r\n\r\n        x = 9;\r\n        TEST(u |= 9, x);\r\n        y = 10;\r\n        TEST(i |= 2, y);\r\n\r\n        x = 9;\r\n        TEST(u &= 59, x);\r\n        y = 10;\r\n        TEST(i &= 59, y);\r\n\r\n        x = 12;\r\n        TEST(u ^= 5, x);\r\n        y = 15;\r\n        TEST(i ^= 5, y);\r\n    }\r\n#undef TEST\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test_unsigned();\r\n    STATIC_ASSERT(test_unsigned());\r\n    test_signed();\r\n    STATIC_ASSERT(test_signed());\r\n    test_cross();\r\n    STATIC_ASSERT(test_cross());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1614R2_spaceship/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/D_STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS=0\"\r\n*\tPM_CL=\"/D_STL_OPTIMIZE_SYSTEM_ERROR_OPERATORS=1\"\r\n"
  },
  {
    "path": "tests/std/tests/P1614R2_spaceship/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <charconv>\r\n#include <chrono>\r\n#include <compare>\r\n#include <concepts>\r\n#include <deque>\r\n#include <filesystem>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <iostream>\r\n#include <iterator>\r\n#include <limits>\r\n#include <list>\r\n#include <map>\r\n#include <memory>\r\n#include <memory_resource>\r\n#include <new>\r\n#include <optional>\r\n#include <queue>\r\n#include <ranges>\r\n#include <ratio>\r\n#include <regex>\r\n#include <scoped_allocator>\r\n#include <set>\r\n#include <stack>\r\n#include <string>\r\n#include <string_view>\r\n#include <system_error>\r\n#include <thread>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <typeindex>\r\n#include <typeinfo>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <valarray>\r\n#include <variant>\r\n#include <vector>\r\n\r\ntemplate <class T, class U>\r\nconcept HasSpaceshipWith = requires { std::declval<T>() <=> std::declval<U>(); };\r\n\r\nusing PartiallyOrdered = double;\r\n\r\nstruct WeaklyOrdered {\r\n    [[nodiscard]] constexpr bool operator==(const WeaklyOrdered&) const {\r\n        return true;\r\n    }\r\n\r\n    [[nodiscard]] constexpr std::weak_ordering operator<=>(const WeaklyOrdered&) const {\r\n        return std::weak_ordering::equivalent;\r\n    }\r\n};\r\n\r\nusing StronglyOrdered = int;\r\n\r\n// Activates synth-three-way in N4861 16.4.2.1 [expos.only.func]/2.\r\nstruct SynthOrdered {\r\n    int val;\r\n\r\n    constexpr SynthOrdered(const int x) : val{x} {}\r\n\r\n    [[nodiscard]] constexpr bool operator==(const SynthOrdered& other) const {\r\n        return val == other.val;\r\n    }\r\n\r\n    [[nodiscard]] constexpr bool operator<(const SynthOrdered& other) const {\r\n        return val < other.val;\r\n    }\r\n};\r\n\r\nstruct OrderedChar {\r\n    OrderedChar() = default;\r\n    OrderedChar(const char other) : c(other) {}\r\n\r\n    OrderedChar& operator=(const char& other) {\r\n        c = other;\r\n        return *this;\r\n    }\r\n\r\n    auto operator<=>(const OrderedChar&) const = default;\r\n\r\n    operator char() const {\r\n        return c;\r\n    }\r\n\r\n    char c;\r\n};\r\n\r\nstruct WeaklyOrderedChar : OrderedChar {};\r\nstruct WeaklyOrderedByOmissionChar : OrderedChar {};\r\nstruct PartiallyOrderedChar : OrderedChar {};\r\n\r\nnamespace std {\r\n    template <>\r\n    struct char_traits<OrderedChar> : char_traits<char> {\r\n        using char_type = OrderedChar;\r\n\r\n        static int compare(const char_type* first1, const char_type* first2, size_t count) {\r\n            for (; 0 < count; --count, ++first1, ++first2) {\r\n                if (*first1 != *first2) {\r\n                    return *first1 < *first2 ? -1 : +1;\r\n                }\r\n            }\r\n\r\n            return 0;\r\n        }\r\n\r\n        static bool eq(const char_type l, const char_type r) {\r\n            return l.c == r.c;\r\n        }\r\n    };\r\n\r\n    template <>\r\n    struct char_traits<WeaklyOrderedChar> : char_traits<OrderedChar> {\r\n        using char_type           = WeaklyOrderedChar;\r\n        using comparison_category = weak_ordering;\r\n    };\r\n\r\n    template <>\r\n    struct char_traits<WeaklyOrderedByOmissionChar> : char_traits<OrderedChar> {\r\n        using char_type = WeaklyOrderedByOmissionChar;\r\n\r\n    private:\r\n        using comparison_category = strong_ordering;\r\n    };\r\n\r\n    template <>\r\n    struct char_traits<PartiallyOrderedChar> : char_traits<OrderedChar> {\r\n        using char_type           = PartiallyOrderedChar;\r\n        using comparison_category = partial_ordering;\r\n    };\r\n} // namespace std\r\n\r\nstruct dummy_diagnostic : std::error_category {\r\n    const char* name() const noexcept override {\r\n        return \"dummy\";\r\n    }\r\n    std::string message(int) const override {\r\n        return \"\";\r\n    }\r\n};\r\n\r\ntemplate <class ReturnType, class SmallType, class EqualType, class LargeType>\r\nconstexpr bool spaceship_test(const SmallType& smaller, const EqualType& smaller_equal, const LargeType& larger) {\r\n    assert(smaller == smaller_equal);\r\n    assert(smaller_equal == smaller);\r\n    assert(smaller != larger);\r\n    assert(larger != smaller);\r\n    assert(smaller < larger);\r\n    assert(!(larger < smaller));\r\n    assert(larger > smaller);\r\n    assert(!(smaller > larger));\r\n    assert(smaller <= larger);\r\n    assert(!(larger <= smaller));\r\n    assert(larger >= smaller);\r\n    assert(!(smaller >= larger));\r\n    assert((smaller <=> larger) < 0);\r\n    assert((larger <=> smaller) > 0);\r\n    assert((smaller <=> smaller_equal) == 0);\r\n\r\n    static_assert(std::is_same_v<decltype(smaller <=> larger), ReturnType>);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class T>\r\nconstexpr bool has_synth_ordered = false;\r\ntemplate <class V>\r\nconstexpr bool has_synth_ordered<std::pair<const SynthOrdered, V>> = true;\r\ntemplate <>\r\ninline constexpr bool has_synth_ordered<SynthOrdered> = true;\r\n\r\ntemplate <class Container>\r\nconstexpr void ordered_containers_test(\r\n    const Container& smaller, const Container& smaller_equal, const Container& larger) {\r\n    using Elem = Container::value_type;\r\n\r\n    if constexpr (has_synth_ordered<Elem>) {\r\n        spaceship_test<std::weak_ordering>(smaller, smaller_equal, larger);\r\n    } else {\r\n        spaceship_test<std::strong_ordering>(smaller, smaller_equal, larger);\r\n    }\r\n}\r\n\r\ntemplate <class Container>\r\nvoid unordered_containers_test(\r\n    const Container& something, const Container& something_equal, const Container& different) {\r\n    assert(something == something_equal);\r\n    assert(something != different);\r\n}\r\n\r\ntemplate <class Iter, class ConstIter>\r\nconstexpr void ordered_iterator_test(const Iter& smaller, const Iter& smaller_equal, const Iter& larger,\r\n    const ConstIter& const_smaller, const ConstIter& const_smaller_equal, const ConstIter& const_larger) {\r\n    spaceship_test<std::strong_ordering>(smaller, smaller_equal, larger);\r\n    spaceship_test<std::strong_ordering>(const_smaller, const_smaller_equal, const_larger);\r\n    spaceship_test<std::strong_ordering>(const_smaller, smaller_equal, larger);\r\n}\r\n\r\ntemplate <class Iter, class ConstIter>\r\nvoid unordered_iterator_test(const Iter& something, const Iter& something_equal, const Iter& different,\r\n    const ConstIter& const_something, const ConstIter& const_something_equal, const ConstIter& const_different) {\r\n    assert(something == something_equal);\r\n    assert(something != different);\r\n\r\n    assert(const_something == const_something_equal);\r\n    assert(const_something != const_different);\r\n\r\n    assert(something == const_something_equal);\r\n    assert(something != const_different);\r\n}\r\n\r\ntemplate <class ErrorType>\r\nvoid diagnostics_test() {\r\n    dummy_diagnostic c_mem[2];\r\n    {\r\n        ErrorType e_smaller(0, c_mem[0]);\r\n        ErrorType e_equal(0, c_mem[0]);\r\n        ErrorType e_larger(1, c_mem[1]);\r\n\r\n        spaceship_test<std::strong_ordering>(e_smaller, e_equal, e_larger);\r\n    }\r\n    {\r\n        ErrorType e_smaller(0, c_mem[0]);\r\n        ErrorType e_larger(0, c_mem[1]);\r\n\r\n        assert(e_smaller < e_larger);\r\n        assert(!(e_larger < e_smaller));\r\n        assert((e_smaller <=> e_larger) < 0);\r\n        assert((e_larger <=> e_smaller) > 0);\r\n    }\r\n    {\r\n        ErrorType e_smaller(0, c_mem[0]);\r\n        ErrorType e_larger(1, c_mem[0]);\r\n\r\n        assert(e_smaller < e_larger);\r\n        assert(!(e_larger < e_smaller));\r\n        assert((e_smaller <=> e_larger) < 0);\r\n        assert((e_larger <=> e_smaller) > 0);\r\n    }\r\n}\r\n\r\ntemplate <template <class...> class TupleLike>\r\nconstexpr bool tuple_like_test() {\r\n    {\r\n        constexpr TupleLike<int, int> t1{1, 1};\r\n        constexpr TupleLike<int, int> t1_equal{1, 1};\r\n        constexpr TupleLike<int, int> t2{2, 1};\r\n\r\n        assert(spaceship_test<std::strong_ordering>(t1, t1_equal, t2));\r\n    }\r\n    {\r\n        constexpr TupleLike<int, double> t1{1, 1.0};\r\n        constexpr TupleLike<int, double> t1_equal{1, 1.0};\r\n        constexpr TupleLike<int, double> t2{2, 1.0};\r\n\r\n        assert(spaceship_test<std::partial_ordering>(t1, t1_equal, t2));\r\n    }\r\n\r\n    if constexpr (std::is_same_v<TupleLike<int, int>, std::tuple<int, int>>) {\r\n        {\r\n            constexpr TupleLike<int, double> t1{1, 1.0};\r\n            constexpr TupleLike<double, double> t1_equal{1.0, 1.0};\r\n            constexpr TupleLike<int, double> t2{2, 1.0};\r\n\r\n            assert(spaceship_test<std::partial_ordering>(t1, t1_equal, t2));\r\n        }\r\n        {\r\n            constexpr TupleLike<int, double> t1{1, 1.0};\r\n            constexpr TupleLike<int, double> t1_equal{1, 1.0};\r\n            constexpr TupleLike<double, double> t2{2.0, 1.0};\r\n\r\n            assert(spaceship_test<std::partial_ordering>(t1, t1_equal, t2));\r\n        }\r\n    }\r\n\r\n    static_assert(std::is_same_v<std::compare_three_way_result_t<TupleLike<PartiallyOrdered, PartiallyOrdered>>,\r\n        std::partial_ordering>);\r\n    static_assert(\r\n        std::is_same_v<std::compare_three_way_result_t<TupleLike<WeaklyOrdered, WeaklyOrdered>>, std::weak_ordering>);\r\n    static_assert(std::is_same_v<std::compare_three_way_result_t<TupleLike<StronglyOrdered, StronglyOrdered>>,\r\n        std::strong_ordering>);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class T>\r\nstruct derived_optional : std::optional<T> {\r\n    friend bool operator==(const derived_optional&, const derived_optional&) = default;\r\n};\r\n\r\ntemplate <auto SmallVal, decltype(SmallVal) EqualVal, decltype(EqualVal) LargeVal>\r\nconstexpr bool optional_test() {\r\n    using ReturnType = std::compare_three_way_result_t<decltype(SmallVal)>;\r\n\r\n    {\r\n        constexpr std::optional o1(SmallVal);\r\n        constexpr std::optional o1_equal(EqualVal);\r\n        constexpr std::optional o2(LargeVal);\r\n\r\n        assert(spaceship_test<ReturnType>(o1, o1_equal, o2));\r\n    }\r\n    {\r\n        constexpr std::optional<decltype(SmallVal)> o1(std::nullopt);\r\n        constexpr std::optional<decltype(EqualVal)> o1_equal(std::nullopt);\r\n        constexpr std::optional o2(LargeVal);\r\n\r\n        assert(spaceship_test<ReturnType>(o1, o1_equal, o2));\r\n    }\r\n    {\r\n        constexpr std::optional o1(SmallVal);\r\n        constexpr derived_optional<decltype(SmallVal)> derived1{std::optional(SmallVal)};\r\n        constexpr derived_optional<decltype(SmallVal)> derived2{std::optional(LargeVal)};\r\n\r\n        static_assert(!std::three_way_comparable<derived_optional<decltype(SmallVal)>>);\r\n\r\n        assert(spaceship_test<ReturnType>(o1, EqualVal, LargeVal));\r\n        assert(spaceship_test<ReturnType>(o1, derived1, derived2));\r\n    }\r\n    {\r\n        constexpr std::optional<decltype(SmallVal)> o1(std::nullopt);\r\n        constexpr std::optional o2(LargeVal);\r\n\r\n        assert(spaceship_test<ReturnType>(o1, std::nullopt, o2));\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <bool Equal>\r\nstruct compare_resource final : std::pmr::memory_resource {\r\nprivate:\r\n    void* do_allocate(size_t, size_t) override {\r\n        throw std::bad_alloc{};\r\n    }\r\n    void do_deallocate(void*, size_t, size_t) override {}\r\n    bool do_is_equal(const memory_resource&) const noexcept override {\r\n        return Equal;\r\n    }\r\n};\r\n\r\ntemplate <class T, bool Equal>\r\nstruct basic_compare_allocator : std::allocator<T> {\r\n    template <class U>\r\n    struct rebind {\r\n        using other = basic_compare_allocator<U, Equal>;\r\n    };\r\n\r\n    basic_compare_allocator() = default;\r\n    template <class U>\r\n    basic_compare_allocator(const basic_compare_allocator<U, Equal>&) {}\r\n};\r\n\r\ntemplate <class T, bool Ignored, class U, bool Equal>\r\nbool operator==(const basic_compare_allocator<T, Ignored>&, const basic_compare_allocator<U, Equal>&) {\r\n    return Equal;\r\n}\r\n\r\ntemplate <bool Equal>\r\nusing compare_allocator = basic_compare_allocator<int, Equal>;\r\n\r\nconstexpr bool test_vector() {\r\n    { // vector\r\n        std::vector<int> a1(3, 100);\r\n        std::vector<int> a2(3, 100);\r\n        std::vector<int> b1(2, 200);\r\n        ordered_containers_test(a1, a2, b1);\r\n        ordered_iterator_test(a1.begin(), a1.begin(), a1.end(), a1.cbegin(), a1.cbegin(), a1.cend());\r\n    }\r\n    { // vector SynthOrdered\r\n        std::vector<SynthOrdered> a = {10, 20, 30};\r\n        std::vector<SynthOrdered> b = {10, 20, 40};\r\n        ordered_containers_test(a, a, b);\r\n        ordered_iterator_test(a.begin(), a.begin(), a.end(), a.cbegin(), a.cbegin(), a.cend());\r\n    }\r\n    { // vector<bool>\r\n        std::vector<bool> c1 = {false, true, false};\r\n        std::vector<bool> c2 = {false, true, false};\r\n        std::vector<bool> d1 = {true, false};\r\n        ordered_containers_test(c1, c2, d1);\r\n        ordered_iterator_test(c1.begin(), c1.begin(), c1.end(), c1.cbegin(), c1.cbegin(), c1.cend());\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nvoid ordering_test_cases() {\r\n    { // constexpr array\r\n        constexpr std::array<int, 5> a0{{2, 8, 9, 1, 9}};\r\n        constexpr std::array<int, 3> a1{{2, 8, 9}};\r\n        constexpr std::array<int, 5> a2{{2, 8, 9, 1, 8}};\r\n\r\n        static_assert((a0 <=> a0) == 0);\r\n        static_assert((a1 <=> a1) == 0);\r\n        static_assert((a2 <=> a0) < 0);\r\n        static_assert((a0 <=> a2) > 0);\r\n    }\r\n    { // constexpr array SynthOrdered\r\n        constexpr std::array<SynthOrdered, 3> a = {10, 20, 30};\r\n        constexpr std::array<SynthOrdered, 3> b = {10, 20, 40};\r\n\r\n        static_assert((a <=> a) == 0);\r\n        static_assert((a <=> b) < 0);\r\n        static_assert((b <=> a) > 0);\r\n    }\r\n    { // array\r\n        std::array<int, 3> a1 = {100, 100, 100};\r\n        std::array<int, 3> a2 = {100, 100, 100};\r\n        std::array<int, 3> b1 = {200, 200};\r\n        ordered_containers_test(a1, a2, b1);\r\n        ordered_iterator_test(a1.begin(), a1.begin(), a1.end(), a1.cbegin(), a1.cbegin(), a1.cend());\r\n    }\r\n    { // array SynthOrdered\r\n        std::array<SynthOrdered, 3> a = {10, 20, 30};\r\n        std::array<SynthOrdered, 3> b = {10, 20, 40};\r\n        ordered_containers_test(a, a, b);\r\n        ordered_iterator_test(a.begin(), a.begin(), a.end(), a.cbegin(), a.cbegin(), a.cend());\r\n    }\r\n    { // deque\r\n        std::deque<int> a1(3, 100);\r\n        std::deque<int> a2(3, 100);\r\n        std::deque<int> b1(2, 200);\r\n        ordered_containers_test(a1, a2, b1);\r\n        ordered_iterator_test(a1.begin(), a1.begin(), a1.end(), a1.cbegin(), a1.cbegin(), a1.cend());\r\n    }\r\n    { // deque SynthOrdered\r\n        std::deque<SynthOrdered> a = {10, 20, 30};\r\n        std::deque<SynthOrdered> b = {10, 20, 40};\r\n        ordered_containers_test(a, a, b);\r\n        ordered_iterator_test(a.begin(), a.begin(), a.end(), a.cbegin(), a.cbegin(), a.cend());\r\n    }\r\n    { // list\r\n        std::list<int> a1(3, 100);\r\n        std::list<int> a2(3, 100);\r\n        std::list<int> b1(2, 200);\r\n        ordered_containers_test(a1, a2, b1);\r\n        unordered_iterator_test(a1.begin(), a1.begin(), a1.end(), a1.cbegin(), a1.cbegin(), a1.cend());\r\n    }\r\n    { // list SynthOrdered\r\n        std::list<SynthOrdered> a = {10, 20, 30};\r\n        std::list<SynthOrdered> b = {10, 20, 40};\r\n        ordered_containers_test(a, a, b);\r\n        unordered_iterator_test(a.begin(), a.begin(), a.end(), a.cbegin(), a.cbegin(), a.cend());\r\n    }\r\n    { // vector, vector SynthOrdered, vector<bool>\r\n        test_vector();\r\n        static_assert(test_vector());\r\n    }\r\n    { // forward_list\r\n        std::forward_list<int> a1(3, 100);\r\n        std::forward_list<int> a2(3, 100);\r\n        std::forward_list<int> b1(2, 200);\r\n        ordered_containers_test(a1, a2, b1);\r\n        unordered_iterator_test(a1.begin(), a1.begin(), a1.end(), a1.cbegin(), a1.cbegin(), a1.cend());\r\n    }\r\n    { // forward_list SynthOrdered\r\n        std::forward_list<SynthOrdered> a = {10, 20, 30};\r\n        std::forward_list<SynthOrdered> b = {10, 20, 40};\r\n        ordered_containers_test(a, a, b);\r\n        unordered_iterator_test(a.begin(), a.begin(), a.end(), a.cbegin(), a.cbegin(), a.cend());\r\n    }\r\n    { // map\r\n        std::map<std::string, int> a1;\r\n        a1[\"hi\"]   = 1;\r\n        a1[\"hola\"] = 2;\r\n        std::map<std::string, int> a2;\r\n        a2[\"hi\"]   = 1;\r\n        a2[\"hola\"] = 2;\r\n        std::map<std::string, int> b1;\r\n        b1[\"zoe\"]   = 3;\r\n        b1[\"koala\"] = 4;\r\n        ordered_containers_test(a1, a2, b1);\r\n        unordered_iterator_test(a1.begin(), a1.begin(), a1.end(), a1.cbegin(), a1.cbegin(), a1.cend());\r\n    }\r\n    { // map SynthOrdered\r\n        std::map<SynthOrdered, char> a = {{10, 'z'}, {20, 'z'}, {30, 'z'}};\r\n        std::map<SynthOrdered, char> b = {{10, 'z'}, {20, 'z'}, {40, 'z'}};\r\n        ordered_containers_test(a, a, b);\r\n        unordered_iterator_test(a.begin(), a.begin(), a.end(), a.cbegin(), a.cbegin(), a.cend());\r\n    }\r\n    { // multimap\r\n        std::multimap<char, int> a1 = {{'a', 1}, {'b', 2}, {'a', 3}};\r\n        std::multimap<char, int> a2 = {{'a', 1}, {'a', 3}, {'b', 2}};\r\n        std::multimap<char, int> b1 = {{'z', 4}, {'y', 90}, {'z', 12}};\r\n        ordered_containers_test(a1, a2, b1);\r\n        unordered_iterator_test(a1.begin(), a1.begin(), a1.end(), a1.cbegin(), a1.cbegin(), a1.cend());\r\n    }\r\n    { // multimap SynthOrdered\r\n        std::multimap<SynthOrdered, char> a = {{10, 'z'}, {20, 'z'}, {30, 'z'}};\r\n        std::multimap<SynthOrdered, char> b = {{10, 'z'}, {20, 'z'}, {40, 'z'}};\r\n        ordered_containers_test(a, a, b);\r\n        unordered_iterator_test(a.begin(), a.begin(), a.end(), a.cbegin(), a.cbegin(), a.cend());\r\n    }\r\n    { // set\r\n        std::set<int> a1;\r\n        a1.insert(10);\r\n        a1.insert(20);\r\n\r\n        std::set<int> a2;\r\n        a2.insert(10);\r\n        a2.insert(20);\r\n\r\n        std::set<int> b1;\r\n        b1.insert(30);\r\n        b1.insert(40);\r\n        ordered_containers_test(a1, a2, b1);\r\n        unordered_iterator_test(a1.begin(), a1.begin(), a1.end(), a1.cbegin(), a1.cbegin(), a1.cend());\r\n    }\r\n    { // set SynthOrdered\r\n        std::set<SynthOrdered> a = {10, 20, 30};\r\n        std::set<SynthOrdered> b = {10, 20, 40};\r\n        ordered_containers_test(a, a, b);\r\n        unordered_iterator_test(a.begin(), a.begin(), a.end(), a.cbegin(), a.cbegin(), a.cend());\r\n    }\r\n    { // multiset\r\n        std::multiset<int> a1;\r\n        a1.insert(10);\r\n        a1.insert(10);\r\n        a1.insert(20);\r\n\r\n        std::multiset<int> a2;\r\n        a2.insert(10);\r\n        a2.insert(20);\r\n        a2.insert(10);\r\n\r\n        std::multiset<int> b1;\r\n        b1.insert(30);\r\n        b1.insert(40);\r\n        b1.insert(40);\r\n        ordered_containers_test(a1, a2, b1);\r\n        unordered_iterator_test(a1.begin(), a1.begin(), a1.end(), a1.cbegin(), a1.cbegin(), a1.cend());\r\n    }\r\n    { // multiset SynthOrdered\r\n        std::multiset<SynthOrdered> a = {10, 20, 30};\r\n        std::multiset<SynthOrdered> b = {10, 20, 40};\r\n        ordered_containers_test(a, a, b);\r\n        unordered_iterator_test(a.begin(), a.begin(), a.end(), a.cbegin(), a.cbegin(), a.cend());\r\n    }\r\n    { // unordered_map\r\n        using stringmap = std::unordered_map<std::string, std::string>;\r\n        stringmap a     = {{\"cat\", \"tabby\"}, {\"dog\", \"poodle\"}, {\"bear\", \"grizzly\"}};\r\n        stringmap b     = {{\"dog\", \"poodle\"}, {\"bear\", \"grizzly\"}, {\"cat\", \"tabby\"}};\r\n        stringmap c     = {{\"cat\", \"siamese\"}, {\"dog\", \"lab\"}, {\"bear\", \"polar\"}};\r\n        unordered_containers_test(a, b, c);\r\n        unordered_iterator_test(a.begin(), a.begin(), a.end(), a.cbegin(), a.cbegin(), a.cend());\r\n    }\r\n    { // unordered_multimap\r\n        using stringmap = std::unordered_multimap<std::string, std::string>;\r\n        stringmap a     = {{\"cat\", \"tabby\"}, {\"dog\", \"poodle\"}, {\"cat\", \"siamese\"}, {\"dog\", \"poodle\"}};\r\n        stringmap b     = {{\"dog\", \"poodle\"}, {\"cat\", \"siamese\"}, {\"cat\", \"tabby\"}, {\"dog\", \"poodle\"}};\r\n        stringmap c     = {{\"cat\", \"siamese\"}, {\"dog\", \"lab\"}, {\"bear\", \"polar\"}};\r\n        unordered_containers_test(a, b, c);\r\n        unordered_iterator_test(a.begin(), a.begin(), a.end(), a.cbegin(), a.cbegin(), a.cend());\r\n    }\r\n    { // unordered_set\r\n        std::unordered_set<std::string> a = {\"cat\", \"dog\", \"bear\"};\r\n        std::unordered_set<std::string> b = {\"bear\", \"cat\", \"dog\"};\r\n        std::unordered_set<std::string> c = {\"mouse\", \"cat\", \"bear\", \"dog\"};\r\n        unordered_containers_test(a, b, c);\r\n        unordered_iterator_test(a.begin(), a.begin(), a.end(), a.cbegin(), a.cbegin(), a.cend());\r\n    }\r\n    { // unordered_multiset\r\n        std::unordered_multiset<std::string> a = {\"cat\", \"dog\", \"cat\"};\r\n        std::unordered_multiset<std::string> b = {\"cat\", \"cat\", \"dog\"};\r\n        std::unordered_multiset<std::string> c = {\"mouse\", \"cat\", \"bear\", \"dog\"};\r\n        unordered_containers_test(a, b, c);\r\n        unordered_iterator_test(a.begin(), a.begin(), a.end(), a.cbegin(), a.cbegin(), a.cend());\r\n    }\r\n    { // queue\r\n        std::deque<int> deq1(3, 100);\r\n        std::deque<int> deq2(2, 200);\r\n        std::queue<int> a(deq1);\r\n        std::queue<int> b(deq1);\r\n        std::queue<int> c(deq2);\r\n        ordered_containers_test(a, b, c);\r\n    }\r\n    { // queue SynthOrdered\r\n        std::queue<SynthOrdered> a{std::deque<SynthOrdered>{10, 20, 30}};\r\n        std::queue<SynthOrdered> b{std::deque<SynthOrdered>{10, 20, 40}};\r\n        ordered_containers_test(a, a, b);\r\n    }\r\n    { // stack\r\n        std::stack<int> a;\r\n        a.push(2);\r\n        a.push(2);\r\n        std::stack<int> b;\r\n        b.push(2);\r\n        b.push(2);\r\n        std::stack<int> c;\r\n        c.push(3);\r\n        c.push(3);\r\n        ordered_containers_test(a, b, c);\r\n    }\r\n    { // stack SynthOrdered\r\n        std::stack<SynthOrdered> a{std::deque<SynthOrdered>{10, 20, 30}};\r\n        std::stack<SynthOrdered> b{std::deque<SynthOrdered>{10, 20, 40}};\r\n        ordered_containers_test(a, a, b);\r\n    }\r\n    { // sub_match\r\n        const std::string s1{\"cats\"};\r\n        const std::string s2{\"meow\"};\r\n        const std::regex all(\".*\");\r\n        const std::regex each(\".\");\r\n        std::smatch m1;\r\n        std::smatch m2;\r\n        std::smatch m3;\r\n        std::smatch m4;\r\n\r\n        std::regex_match(s1, m1, all);\r\n        std::regex_match(s2, m2, all);\r\n        std::regex_search(s1, m3, each);\r\n        std::regex_search(s2, m4, each);\r\n\r\n        std::ssub_match sm1       = m1[0];\r\n        std::ssub_match sm1_equal = m1[0];\r\n        std::ssub_match sm2       = m2[0];\r\n        std::ssub_match sm3       = m3[0];\r\n        std::ssub_match sm4       = m4[0];\r\n\r\n        spaceship_test<std::strong_ordering>(sm1, sm1_equal, sm2);\r\n        spaceship_test<std::strong_ordering>(sm1, s1, s2);\r\n        spaceship_test<std::strong_ordering>(sm1, s1.c_str(), s2.c_str());\r\n        spaceship_test<std::strong_ordering>(sm3, 'c', 'm');\r\n        spaceship_test<std::strong_ordering>(s1, sm1, sm2);\r\n        spaceship_test<std::strong_ordering>(s1.c_str(), sm1, sm2);\r\n        spaceship_test<std::strong_ordering>('c', sm3, sm4);\r\n\r\n        using StronglyOrderedMatch = std::ssub_match;\r\n        using WeaklyOrderedMatch   = std::sub_match<std::basic_string<WeaklyOrderedChar>::const_iterator>;\r\n        using WeaklyOrderdByOmissionMatch =\r\n            std::sub_match<std::basic_string<WeaklyOrderedByOmissionChar>::const_iterator>;\r\n        using PartiallyOrderedMatch = std::sub_match<std::basic_string<PartiallyOrderedChar>::const_iterator>;\r\n\r\n        static_assert(std::is_same_v<std::compare_three_way_result_t<StronglyOrderedMatch>, std::strong_ordering>);\r\n        static_assert(std::is_same_v<std::compare_three_way_result_t<WeaklyOrderedMatch>, std::weak_ordering>);\r\n        static_assert(std::is_same_v<std::compare_three_way_result_t<WeaklyOrderdByOmissionMatch>, std::weak_ordering>);\r\n        static_assert(std::is_same_v<std::compare_three_way_result_t<PartiallyOrderedMatch>, std::partial_ordering>);\r\n    }\r\n    { // char_traits\r\n        static_assert(std::is_same_v<std::char_traits<char>::comparison_category, std::strong_ordering>);\r\n#ifdef __cpp_char8_t\r\n        static_assert(std::is_same_v<std::char_traits<char8_t>::comparison_category, std::strong_ordering>);\r\n#endif // __cpp_char8_t\r\n        static_assert(std::is_same_v<std::char_traits<char16_t>::comparison_category, std::strong_ordering>);\r\n        static_assert(std::is_same_v<std::char_traits<char32_t>::comparison_category, std::strong_ordering>);\r\n        static_assert(std::is_same_v<std::char_traits<wchar_t>::comparison_category, std::strong_ordering>);\r\n    }\r\n    { // charconv\r\n        char c[7] = \"123456\";\r\n\r\n        std::from_chars_result a1{c + 6, std::errc{}};\r\n        std::from_chars_result a2{c + 6, std::errc{}};\r\n        std::from_chars_result a3{c + 6, std::errc::result_out_of_range};\r\n        std::from_chars_result a4{c + 4, std::errc{}};\r\n\r\n        assert(a1 == a2);\r\n        assert(a1 != a3);\r\n        assert(a1 != a4);\r\n\r\n        std::to_chars_result b1{c + 6, std::errc{}};\r\n        std::to_chars_result b2{c + 6, std::errc{}};\r\n        std::to_chars_result b3{c + 6, std::errc::value_too_large};\r\n        std::to_chars_result b4{c + 4, std::errc{}};\r\n\r\n        assert(b1 == b2);\r\n        assert(b1 != b3);\r\n        assert(b1 != b4);\r\n    }\r\n    { // typeindex\r\n        std::type_index a1 = typeid(int);\r\n        std::type_index a2 = typeid(char);\r\n        std::type_index a3 = typeid(bool);\r\n        std::type_index a4 = typeid(int);\r\n        assert((a1 <=> a4) == std::strong_ordering::equal);\r\n        assert((a1 <=> a2) == std::strong_ordering::greater); // Implementation-specific assumption\r\n        assert((a1 <=> a3) == std::strong_ordering::less); // Implementation-specific assumption\r\n    }\r\n    { // Strings library\r\n        const std::string a1 = \"abcdef\";\r\n        const std::string a2 = \"abcdef\";\r\n        const std::string a3 = \"abcdefg\";\r\n        const std::string a4 = \"abcde\";\r\n        const std::string a5 = \"abddef\";\r\n        const std::string a6 = \"abbdef\";\r\n\r\n        assert((a1 <=> a2) == std::strong_ordering::equivalent);\r\n        assert((a1 <=> a3) == std::strong_ordering::less);\r\n        assert((a1 <=> a4) == std::strong_ordering::greater);\r\n        assert((a1 <=> a5) == std::strong_ordering::less);\r\n        assert((a1 <=> a6) == std::strong_ordering::greater);\r\n\r\n        assert(a1 == a2);\r\n        assert(a1 >= a2);\r\n        assert(a1 <= a2);\r\n        assert(a1 < a3);\r\n        assert(a1 <= a3);\r\n        assert(a1 != a3);\r\n        assert(a1 > a4);\r\n        assert(a1 >= a4);\r\n        assert(a1 != a4);\r\n        assert(a1 < a5);\r\n        assert(a1 <= a5);\r\n        assert(a1 != a5);\r\n        assert(a1 > a6);\r\n        assert(a1 >= a6);\r\n        assert(a1 != a6);\r\n\r\n        assert((a1 <=> \"aardvark\") == std::strong_ordering::greater);\r\n        assert((a1 <=> \"abcdef\") == std::strong_ordering::equivalent);\r\n        assert((a1 <=> \"zebra\") == std::strong_ordering::less);\r\n\r\n        assert((\"aardvark\" <=> a1) == std::strong_ordering::less);\r\n        assert((\"abcdef\" <=> a1) == std::strong_ordering::equivalent);\r\n        assert((\"zebra\" <=> a1) == std::strong_ordering::greater);\r\n    }\r\n    { // string iterators\r\n        std::string a1 = \"aaa\";\r\n        std::string a2 = \"aaa\";\r\n        std::string b1 = \"bb\";\r\n        ordered_containers_test(a1, a2, b1);\r\n        ordered_iterator_test(a1.begin(), a1.begin(), a1.end(), a1.cbegin(), a1.cbegin(), a1.cend());\r\n    }\r\n    { // string_view\r\n        const std::string_view a1 = \"abcdef\";\r\n        const std::string_view a2 = \"abcdef\";\r\n        const std::string_view a3 = \"abcdefg\";\r\n        const std::string_view a4 = \"abcde\";\r\n        const std::string_view a5 = \"abddef\";\r\n        const std::string_view a6 = \"abbdef\";\r\n\r\n        assert((a1 <=> a2) == std::strong_ordering::equivalent);\r\n        assert((a1 <=> a3) == std::strong_ordering::less);\r\n        assert((a1 <=> a4) == std::strong_ordering::greater);\r\n        assert((a1 <=> a5) == std::strong_ordering::less);\r\n        assert((a1 <=> a6) == std::strong_ordering::greater);\r\n\r\n        assert(a1 == a2);\r\n        assert(a1 >= a2);\r\n        assert(a1 <= a2);\r\n        assert(a1 < a3);\r\n        assert(a1 <= a3);\r\n        assert(a1 != a3);\r\n        assert(a1 > a4);\r\n        assert(a1 >= a4);\r\n        assert(a1 != a4);\r\n        assert(a1 < a5);\r\n        assert(a1 <= a5);\r\n        assert(a1 != a5);\r\n        assert(a1 > a6);\r\n        assert(a1 >= a6);\r\n        assert(a1 != a6);\r\n\r\n        assert((a1 <=> \"aardvark\") == std::strong_ordering::greater);\r\n        assert((a1 <=> \"abcdef\") == std::strong_ordering::equivalent);\r\n        assert((a1 <=> \"zebra\") == std::strong_ordering::less);\r\n\r\n        assert((\"aardvark\" <=> a1) == std::strong_ordering::less);\r\n        assert((\"abcdef\" <=> a1) == std::strong_ordering::equivalent);\r\n        assert((\"zebra\" <=> a1) == std::strong_ordering::greater);\r\n    }\r\n    { // constexpr string_view\r\n        constexpr std::string_view a1 = \"abcdef\";\r\n        constexpr std::string_view a2 = \"abcdef\";\r\n        constexpr std::string_view a3 = \"abcdefg\";\r\n        constexpr std::string_view a4 = \"abcde\";\r\n        constexpr std::string_view a5 = \"abddef\";\r\n        constexpr std::string_view a6 = \"abbdef\";\r\n\r\n        static_assert((a1 <=> a2) == std::strong_ordering::equivalent);\r\n        static_assert((a1 <=> a3) == std::strong_ordering::less);\r\n        static_assert((a1 <=> a4) == std::strong_ordering::greater);\r\n        static_assert((a1 <=> a5) == std::strong_ordering::less);\r\n        static_assert((a1 <=> a6) == std::strong_ordering::greater);\r\n\r\n        static_assert(a1 == a2);\r\n        static_assert(a1 >= a2);\r\n        static_assert(a1 <= a2);\r\n        static_assert(a1 < a3);\r\n        static_assert(a1 <= a3);\r\n        static_assert(a1 != a3);\r\n        static_assert(a1 > a4);\r\n        static_assert(a1 >= a4);\r\n        static_assert(a1 != a4);\r\n        static_assert(a1 < a5);\r\n        static_assert(a1 <= a5);\r\n        static_assert(a1 != a5);\r\n        static_assert(a1 > a6);\r\n        static_assert(a1 >= a6);\r\n        static_assert(a1 != a6);\r\n\r\n        static_assert((a1 <=> \"aardvark\") == std::strong_ordering::greater);\r\n        static_assert((a1 <=> \"abcdef\") == std::strong_ordering::equivalent);\r\n        static_assert((a1 <=> \"zebra\") == std::strong_ordering::less);\r\n\r\n        static_assert((\"aardvark\" <=> a1) == std::strong_ordering::less);\r\n        static_assert((\"abcdef\" <=> a1) == std::strong_ordering::equivalent);\r\n        static_assert((\"zebra\" <=> a1) == std::strong_ordering::greater);\r\n    }\r\n    { // string_view iterators\r\n        std::string_view a1 = \"aaa\";\r\n        std::string_view a2 = \"aaa\";\r\n        std::string_view b1 = \"bb\";\r\n        ordered_containers_test(a1, a2, b1);\r\n        ordered_iterator_test(a1.begin(), a1.begin(), a1.end(), a1.cbegin(), a1.cbegin(), a1.cend());\r\n    }\r\n    { // allocator\r\n        constexpr std::allocator<int> a1;\r\n        constexpr std::allocator<double> a2;\r\n\r\n        static_assert(a1 == a1);\r\n        static_assert(a1 == a2);\r\n        static_assert(!(a1 != a1));\r\n        static_assert(!(a1 != a2));\r\n    }\r\n    { // memory_resource\r\n        compare_resource<true> t1;\r\n        compare_resource<true>& t2 = t1;\r\n        compare_resource<false> f1;\r\n        compare_resource<false>& f2 = f1;\r\n\r\n        // same address\r\n        assert(t1 == t1);\r\n        assert(t1 == t2);\r\n        assert(f1 == f1);\r\n        assert(f1 == f2);\r\n\r\n        // dependent on is_equal(__)\r\n        assert(t1 == f1);\r\n        assert(f1 != t1);\r\n    }\r\n    { // polymorphic_allocator\r\n        compare_resource<false> rFalse;\r\n        compare_resource<true> rTrue;\r\n        std::pmr::polymorphic_allocator<int> p1 = &rFalse;\r\n        std::pmr::polymorphic_allocator<int> p2 = p1;\r\n        std::pmr::polymorphic_allocator<int> p3 = &rTrue;\r\n\r\n        // same resource address\r\n        assert(p1 == p1);\r\n        assert(p1 == p2);\r\n\r\n        // dependent on resource()::is_equal(__)\r\n        assert(p1 != p3);\r\n        assert(p3 == p1);\r\n    }\r\n    { // scoped_allocator_adaptor\r\n        // note: compare_allocator<T> equality is based on the T of the RHS\r\n        std::scoped_allocator_adaptor<compare_allocator<true>> s1;\r\n        std::scoped_allocator_adaptor<compare_allocator<true>> s2;\r\n        std::scoped_allocator_adaptor<compare_allocator<false>> s3;\r\n\r\n        assert(s1 == s1);\r\n        assert(s1 == s2);\r\n        assert(s1 != s3);\r\n\r\n        std::scoped_allocator_adaptor<compare_allocator<true>, compare_allocator<true>> s4{};\r\n        std::scoped_allocator_adaptor<compare_allocator<true>, compare_allocator<false>> s5{};\r\n\r\n        assert(s4 == s4);\r\n        assert(s5 != s5);\r\n    }\r\n    { // function\r\n        std::function<void(int)> f{};\r\n\r\n        assert(f == nullptr);\r\n        assert(nullptr == f);\r\n        assert(!(f != nullptr));\r\n        assert(!(nullptr != f));\r\n    }\r\n    { // Diagnostics Library\r\n        diagnostics_test<std::error_code>();\r\n        diagnostics_test<std::error_condition>();\r\n\r\n        dummy_diagnostic c_mem[2];\r\n        {\r\n            std::error_code e1(0, c_mem[0]);\r\n            std::error_condition e2(0, c_mem[0]);\r\n\r\n            assert(e1 == e2);\r\n            assert(e2 == e1);\r\n        }\r\n        {\r\n            std::error_code e1(0, c_mem[0]);\r\n            std::error_condition e2(0, c_mem[1]);\r\n\r\n            assert(e1 != e2);\r\n            assert(e2 != e1);\r\n        }\r\n        {\r\n            std::error_code e1(1, c_mem[0]);\r\n            std::error_condition e2(0, c_mem[0]);\r\n\r\n            assert(e1 != e2);\r\n            assert(e2 != e1);\r\n        }\r\n\r\n        spaceship_test<std::strong_ordering>(c_mem[0], c_mem[0], c_mem[1]);\r\n    }\r\n    { // optional\r\n        optional_test<0, 0, 1>();\r\n        static_assert(optional_test<0, 0, 1>());\r\n\r\n#if defined(__cpp_nontype_template_args) && __cpp_nontype_template_args >= 201911\r\n        optional_test<0.0, 0.0, 1.0>();\r\n        static_assert(optional_test<0.0, 0.0, 1.0>());\r\n#endif\r\n\r\n        static_assert(\r\n            std::is_same_v<std::compare_three_way_result_t<std::optional<WeaklyOrdered>, std::optional<WeaklyOrdered>>,\r\n                std::weak_ordering>);\r\n        static_assert(std::is_same_v<std::compare_three_way_result_t<std::optional<WeaklyOrdered>, WeaklyOrdered>,\r\n            std::weak_ordering>);\r\n        static_assert(std::is_same_v<std::compare_three_way_result_t<std::optional<WeaklyOrdered>, std::nullopt_t>,\r\n            std::strong_ordering>);\r\n    }\r\n    { // tuple\r\n        tuple_like_test<std::tuple>();\r\n        static_assert(tuple_like_test<std::tuple>());\r\n\r\n        {\r\n            constexpr std::tuple<> empty1;\r\n            constexpr std::tuple<> empty2;\r\n\r\n            static_assert(std::is_same_v<decltype(empty1 <=> empty2), std::strong_ordering>);\r\n            static_assert((empty1 <=> empty2) == std::strong_ordering::equal);\r\n        }\r\n    }\r\n    { // pair\r\n        tuple_like_test<std::pair>();\r\n        static_assert(tuple_like_test<std::pair>());\r\n    }\r\n    { // variant\r\n        using V = std::variant<int, long>;\r\n        constexpr V v0_0(std::in_place_index<0>, 0);\r\n        constexpr V v0_1(std::in_place_index<0>, 1);\r\n        constexpr V v1_0(std::in_place_index<1>, 0);\r\n        constexpr V v1_1(std::in_place_index<1>, 1);\r\n\r\n        spaceship_test<std::strong_ordering>(v0_0, v0_0, v0_1);\r\n        spaceship_test<std::strong_ordering>(v0_1, v0_1, v1_0);\r\n        spaceship_test<std::strong_ordering>(v1_0, v1_0, v1_1);\r\n\r\n        static_assert(spaceship_test<std::strong_ordering>(v0_0, v0_0, v0_1));\r\n        static_assert(spaceship_test<std::strong_ordering>(v0_1, v0_1, v1_0));\r\n        static_assert(spaceship_test<std::strong_ordering>(v1_0, v1_0, v1_1));\r\n\r\n        struct ThrowException {\r\n            operator int() {\r\n                throw \"woof\";\r\n            }\r\n        };\r\n        V valueless(std::in_place_index<1>, 1729L);\r\n        try {\r\n            valueless.emplace<0>(ThrowException{});\r\n        } catch (...) {\r\n            // ignore exception\r\n        }\r\n        assert(valueless.valueless_by_exception());\r\n        spaceship_test<std::strong_ordering>(valueless, valueless, v0_0);\r\n        spaceship_test<std::strong_ordering>(valueless, valueless, v1_1);\r\n\r\n        using M = std::monostate;\r\n        constexpr M m1{};\r\n        constexpr M m2{};\r\n        assert((m1 <=> m2) == 0);\r\n        static_assert((m1 <=> m2) == 0);\r\n    }\r\n    { // unique_ptr\r\n        std::unique_ptr<int> p1{nullptr};\r\n        std::unique_ptr<int>& p2 = p1;\r\n        std::unique_ptr<int> p3{new int};\r\n\r\n        spaceship_test<std::strong_ordering>(p1, p2, p3);\r\n        spaceship_test<std::strong_ordering>(p1, nullptr, p3);\r\n    }\r\n    { // shared_ptr\r\n        std::shared_ptr<int> p1{nullptr};\r\n        std::shared_ptr<int>& p2 = p1; // same managed ptr\r\n        std::shared_ptr<int> p3  = p2; // same stored ptr\r\n\r\n        std::shared_ptr<int> p4{new int};\r\n        std::shared_ptr<int> p5 = p4; // same stored ptr\r\n\r\n        spaceship_test<std::strong_ordering>(p1, p2, p4);\r\n        spaceship_test<std::strong_ordering>(p1, p3, p5);\r\n        spaceship_test<std::strong_ordering>(p1, nullptr, p4);\r\n    }\r\n    { // shared_ptr, heterogeneous\r\n        std::shared_ptr<const int> p1{};\r\n        std::shared_ptr<void> p2{};\r\n        std::shared_ptr<volatile int> p3{};\r\n\r\n        std::shared_ptr<int> p4{new int};\r\n\r\n        spaceship_test<std::strong_ordering>(p1, p2, p4);\r\n        spaceship_test<std::strong_ordering>(p1, p3, p4);\r\n        spaceship_test<std::strong_ordering>(p2, p3, p4);\r\n        spaceship_test<std::strong_ordering>(p1, nullptr, p4);\r\n    }\r\n    { // slice\r\n        std::slice a1(2, 3, 4);\r\n        std::slice a2(2, 3, 4);\r\n        std::slice a3(3, 3, 4);\r\n        std::slice a4(2, 4, 4);\r\n        std::slice a5(2, 3, 3);\r\n        assert(a1 == a2);\r\n        assert(a1 != a3);\r\n        assert(a1 != a4);\r\n        assert(a1 != a5);\r\n    }\r\n    { // chrono::duration\r\n        using std::chrono::hours;\r\n        using std::chrono::minutes;\r\n        using std::chrono::seconds;\r\n\r\n        spaceship_test<std::strong_ordering>(seconds{1}, seconds{1}, seconds{2});\r\n        spaceship_test<std::strong_ordering>(seconds{3600}, hours{1}, minutes{61});\r\n\r\n        using double_seconds     = std::chrono::duration<double>;\r\n        using float_milliseconds = std::chrono::duration<float, std::milli>;\r\n        using ntsc_fields        = std::chrono::duration<long long, std::ratio<1001, 60000>>;\r\n\r\n        spaceship_test<std::partial_ordering>(double_seconds{1}, float_milliseconds{1000}, ntsc_fields{60});\r\n\r\n        constexpr double_seconds nan_s{std::numeric_limits<double>::quiet_NaN()};\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, DevCom-445462\r\n        static_assert(nan_s <=> nan_s == std::partial_ordering::unordered);\r\n#endif // ^^^ no workaround ^^^\r\n        assert(nan_s <=> nan_s == std::partial_ordering::unordered);\r\n    }\r\n    { // chrono::time_point\r\n        using std::chrono::milliseconds;\r\n        using double_seconds = std::chrono::duration<double>;\r\n        using sys_tp         = std::chrono::system_clock::time_point;\r\n        using sys_ms         = std::chrono::time_point<std::chrono::system_clock, milliseconds>;\r\n        using sys_double_s   = std::chrono::time_point<std::chrono::system_clock, double_seconds>;\r\n\r\n        spaceship_test<std::strong_ordering>(sys_tp{}, sys_ms{}, sys_ms{milliseconds{1}});\r\n        spaceship_test<std::partial_ordering>(sys_tp{}, sys_double_s{}, sys_double_s{double_seconds{1}});\r\n\r\n        constexpr sys_double_s nan_tp{double_seconds{std::numeric_limits<double>::quiet_NaN()}};\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, DevCom-445462\r\n        static_assert(nan_tp <=> nan_tp == std::partial_ordering::unordered);\r\n#endif // ^^^ no workaround ^^^\r\n        assert(nan_tp <=> nan_tp == std::partial_ordering::unordered);\r\n\r\n        using steady_tp = std::chrono::steady_clock::time_point;\r\n        static_assert(!HasSpaceshipWith<sys_tp, steady_tp>);\r\n    }\r\n    { // filesystem::space_info\r\n        constexpr std::filesystem::space_info si1{4'000'000'000'000, 2'000'000'000'000, 1'000'000'000'000};\r\n        constexpr std::filesystem::space_info si2{4'000'000'000'000, 2'000'000'000'000, 1'000'000'000'000};\r\n        constexpr std::filesystem::space_info si3{4'000'000'000'000, 2'000'000'000'000, 2'000'000'000'000};\r\n        constexpr std::filesystem::space_info si4{4'000'000'000'000, 3'000'000'000'000, 1'000'000'000'000};\r\n        constexpr std::filesystem::space_info si5{3'000'000'000'000, 2'000'000'000'000, 1'000'000'000'000};\r\n\r\n        static_assert(si1 == si2);\r\n        static_assert(si1 != si3);\r\n        static_assert(si1 != si4);\r\n        static_assert(si1 != si5);\r\n\r\n        assert(si1 == si2);\r\n        assert(si1 != si3);\r\n        assert(si1 != si4);\r\n        assert(si1 != si5);\r\n    }\r\n    { // filesystem::path\r\n        const std::filesystem::path p1{R\"(a/b/c)\"};\r\n        const std::filesystem::path p2{LR\"(a\\b\\c)\"};\r\n        const std::filesystem::path p3{R\"(a/b/d)\"};\r\n\r\n        spaceship_test<std::strong_ordering>(p1, p2, p3);\r\n        unordered_containers_test(p1.begin(), p1.begin(), p1.end());\r\n    }\r\n    { // filesystem::file_status\r\n        std::filesystem::file_status s1;\r\n        s1.type(std::filesystem::file_type::regular);\r\n        s1.permissions(std::filesystem::perms{0755});\r\n\r\n        std::filesystem::file_status s2 = s1;\r\n\r\n        std::filesystem::file_status s3 = s1;\r\n        s3.type(std::filesystem::file_type::directory);\r\n\r\n        std::filesystem::file_status s4 = s1;\r\n        s4.permissions(std::filesystem::perms{0600});\r\n\r\n        assert(s1 == s2);\r\n        assert(s1 != s3);\r\n        assert(s1 != s4);\r\n    }\r\n    { // filesystem::directory_entry\r\n        const std::filesystem::directory_entry de1{u8R\"(a/b/c)\"};\r\n        const std::filesystem::directory_entry de2{uR\"(a\\b\\c)\"};\r\n        const std::filesystem::directory_entry de3{u8R\"(a/b/d)\"};\r\n\r\n        spaceship_test<std::strong_ordering>(de1, de2, de3);\r\n    }\r\n    { // thread::id\r\n        std::thread::id id1;\r\n        std::thread::id id1_equal;\r\n        std::thread::id id2 = std::this_thread::get_id();\r\n\r\n        // Implementation-specific assumption: std::thread::id{} occurs first in the unspecified total ordering.\r\n        spaceship_test<std::strong_ordering>(id1, id1_equal, id2);\r\n    }\r\n}\r\n\r\ntemplate <class Element, class Ordering>\r\nvoid test_element_ordering() {\r\n    if constexpr (!std::is_same_v<Element, SynthOrdered>) { // SynthOrdered inherently doesn't support <=> directly\r\n        static_assert(std::is_same_v<std::compare_three_way_result_t<Element>, Ordering>);\r\n    }\r\n\r\n    static_assert(std::is_same_v<std::compare_three_way_result_t<std::array<Element, 3>>, Ordering>);\r\n    static_assert(std::is_same_v<std::compare_three_way_result_t<std::deque<Element>>, Ordering>);\r\n    static_assert(std::is_same_v<std::compare_three_way_result_t<std::list<Element>>, Ordering>);\r\n    static_assert(std::is_same_v<std::compare_three_way_result_t<std::vector<Element>>, Ordering>);\r\n    static_assert(std::is_same_v<std::compare_three_way_result_t<std::forward_list<Element>>, Ordering>);\r\n\r\n    static_assert(std::is_same_v<std::compare_three_way_result_t<std::map<Element, Element>>, Ordering>);\r\n    static_assert(std::is_same_v<std::compare_three_way_result_t<std::multimap<Element, Element>>, Ordering>);\r\n\r\n    static_assert(std::is_same_v<std::compare_three_way_result_t<std::set<Element>>, Ordering>);\r\n    static_assert(std::is_same_v<std::compare_three_way_result_t<std::multiset<Element>>, Ordering>);\r\n\r\n    static_assert(std::is_same_v<std::compare_three_way_result_t<std::queue<Element>>, Ordering>);\r\n    static_assert(std::is_same_v<std::compare_three_way_result_t<std::stack<Element>>, Ordering>);\r\n}\r\n\r\nint main() {\r\n    ordering_test_cases();\r\n\r\n    test_element_ordering<PartiallyOrdered, std::partial_ordering>();\r\n    test_element_ordering<WeaklyOrdered, std::weak_ordering>();\r\n    test_element_ordering<StronglyOrdered, std::strong_ordering>();\r\n    test_element_ordering<SynthOrdered, std::weak_ordering>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1645R1_constexpr_numeric/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1645R1_constexpr_numeric/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <iterator>\r\n#include <numeric>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nstruct not_std_plus {\r\n    template <class T, class U>\r\n    constexpr decltype(auto) operator()(T&& t, U&& u) const {\r\n        return forward<T>(t) + forward<U>(u);\r\n    }\r\n};\r\n\r\nstruct not_std_minus {\r\n    template <class T, class U>\r\n    constexpr decltype(auto) operator()(T&& t, U&& u) const {\r\n        return forward<T>(t) - forward<U>(u);\r\n    }\r\n};\r\n\r\nstruct not_std_multiplies {\r\n    template <class T, class U>\r\n    constexpr decltype(auto) operator()(T&& t, U&& u) const {\r\n        return forward<T>(t) * forward<U>(u);\r\n    }\r\n};\r\n\r\nstruct plus_one {\r\n    constexpr int operator()(int a) const {\r\n        return a + 1;\r\n    }\r\n};\r\n\r\ntemplate <size_t N>\r\nconstexpr bool is_partial_sum(const int (&output)[N], int temp = 0) {\r\n    for (size_t idx = 0; idx < N; ++idx) {\r\n        temp += static_cast<int>(idx) + 1;\r\n        if (output[idx] != temp) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <size_t N>\r\nconstexpr bool is_exclusive_scan(const int (&output)[N]) {\r\n    int temp = 0;\r\n    for (size_t idx = 0; idx < N; ++idx) {\r\n        if (output[idx] != temp) {\r\n            return false;\r\n        }\r\n\r\n        temp += static_cast<int>(idx) + 1;\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <size_t N>\r\nconstexpr bool is_transform_inclusive_scan(const int (&output)[N], int temp = 0) {\r\n    for (size_t idx = 0; idx < N; ++idx) {\r\n        temp += static_cast<int>(idx) + 2;\r\n        if (output[idx] != temp) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <size_t N>\r\nconstexpr bool is_transform_exclusive_scan(const int (&output)[N]) {\r\n    int temp = 0;\r\n    for (size_t idx = 0; idx < N; ++idx) {\r\n        if (output[idx] != temp) {\r\n            return false;\r\n        }\r\n\r\n        temp += static_cast<int>(idx) + 2;\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool run_tests() {\r\n    int input[] = {0, 0, 0, 0, 0};\r\n    // test iota\r\n    iota(input, input + 0, 1);\r\n    for (size_t idx = 0; idx < size(input); ++idx) {\r\n        assert(input[idx] == 0);\r\n    }\r\n    iota(begin(input), end(input), 1);\r\n    for (size_t idx = 0; idx < size(input); ++idx) {\r\n        assert(input[idx] == static_cast<int>(idx) + 1);\r\n    }\r\n\r\n    // test accumulate\r\n    assert(accumulate(begin(input), end(input), 0) == 15);\r\n    assert(accumulate(begin(input), end(input), 1) == 16);\r\n    assert(accumulate(input, input + 0, 1) == 1);\r\n    assert(accumulate(begin(input), end(input), 0, not_std_plus{}) == 15);\r\n    assert(accumulate(begin(input), end(input), 1, not_std_plus{}) == 16);\r\n    assert(accumulate(input, input + 0, 1, not_std_plus{}) == 1);\r\n\r\n    // test reduce\r\n    assert(reduce(begin(input), end(input)) == 15);\r\n    assert(reduce(begin(input), end(input), 0) == 15);\r\n    assert(reduce(begin(input), end(input), 1) == 16);\r\n    assert(reduce(input, input + 0) == 0);\r\n    assert(reduce(input, input + 0, 1) == 1);\r\n    assert(reduce(begin(input), end(input), 0, not_std_plus{}) == 15);\r\n    assert(reduce(begin(input), end(input), 1, not_std_plus{}) == 16);\r\n    assert(reduce(input, input + 0, 1, not_std_plus{}) == 1);\r\n\r\n    int input2[] = {2, 3, 4, 5, 6};\r\n    static_assert(size(input) == size(input2));\r\n\r\n    // test inner_product\r\n    assert(inner_product(begin(input), end(input), begin(input2), 0) == 70);\r\n    assert(inner_product(begin(input), end(input), begin(input2), 1) == 71);\r\n    assert(inner_product(begin(input), input + 0, begin(input2), 0) == 0);\r\n    assert(inner_product(begin(input), input + 0, begin(input2), 1) == 1);\r\n    assert(inner_product(begin(input), end(input), begin(input2), 0, not_std_plus{}, not_std_multiplies{}) == 70);\r\n    assert(inner_product(begin(input), end(input), begin(input2), 1, not_std_plus{}, not_std_multiplies{}) == 71);\r\n    assert(inner_product(begin(input), input + 0, begin(input2), 0, not_std_plus{}, not_std_multiplies{}) == 0);\r\n    assert(inner_product(begin(input), input + 0, begin(input2), 1, not_std_plus{}, not_std_multiplies{}) == 1);\r\n\r\n    // test transform_reduce (1 range)\r\n    assert(transform_reduce(begin(input), end(input), 0, not_std_plus{}, plus_one{}) == 20);\r\n\r\n    // test transform_reduce (1.5 range)\r\n    assert(transform_reduce(begin(input), end(input), begin(input2), 0) == 70);\r\n    assert(transform_reduce(begin(input), end(input), begin(input2), 1) == 71);\r\n    assert(transform_reduce(begin(input), input + 0, begin(input2), 0) == 0);\r\n    assert(transform_reduce(begin(input), input + 0, begin(input2), 1) == 1);\r\n    assert(transform_reduce(begin(input), end(input), begin(input2), 0, not_std_plus{}, not_std_multiplies{}) == 70);\r\n    assert(transform_reduce(begin(input), end(input), begin(input2), 1, not_std_plus{}, not_std_multiplies{}) == 71);\r\n    assert(transform_reduce(begin(input), input + 0, begin(input2), 0, not_std_plus{}, not_std_multiplies{}) == 0);\r\n    assert(transform_reduce(begin(input), input + 0, begin(input2), 1, not_std_plus{}, not_std_multiplies{}) == 1);\r\n\r\n    // test partial_sum\r\n    {\r\n        int output[size(input)] = {};\r\n        assert(end(output) == partial_sum(begin(input), end(input), begin(output)));\r\n        assert(is_partial_sum(output));\r\n    }\r\n\r\n    {\r\n        int output[size(input)] = {};\r\n        assert(end(output) == partial_sum(begin(input), end(input), begin(output), not_std_plus{}));\r\n        assert(is_partial_sum(output));\r\n    }\r\n\r\n    // test inclusive_scan\r\n    {\r\n        int output[size(input)] = {};\r\n        assert(end(output) == inclusive_scan(begin(input), end(input), begin(output)));\r\n        assert(is_partial_sum(output));\r\n    }\r\n\r\n    {\r\n        int output[size(input)] = {};\r\n        assert(end(output) == inclusive_scan(begin(input), end(input), begin(output), not_std_plus{}));\r\n        assert(is_partial_sum(output));\r\n    }\r\n\r\n    {\r\n        int output[size(input)] = {};\r\n        assert(end(output) == inclusive_scan(begin(input), end(input), begin(output), not_std_plus{}, 1));\r\n        assert(is_partial_sum(output, 1));\r\n    }\r\n\r\n    // test exclusive_scan\r\n    {\r\n        int output[size(input)] = {};\r\n        assert(end(output) == exclusive_scan(begin(input), end(input), begin(output), 0));\r\n        assert(is_exclusive_scan(output));\r\n    }\r\n\r\n    {\r\n        int output[size(input)] = {};\r\n        assert(end(output) == exclusive_scan(begin(input), end(input), begin(output), 0, not_std_plus{}));\r\n        assert(is_exclusive_scan(output));\r\n    }\r\n\r\n    // test transform_inclusive_scan\r\n    {\r\n        int output[size(input)] = {};\r\n        assert(end(output) == transform_inclusive_scan(begin(input), end(input), begin(output), plus{}, plus_one{}));\r\n        assert(is_transform_inclusive_scan(output));\r\n    }\r\n\r\n    {\r\n        int output[size(input)] = {};\r\n        assert(end(output) == transform_inclusive_scan(begin(input), end(input), begin(output), plus{}, plus_one{}, 1));\r\n        assert(is_transform_inclusive_scan(output, 1));\r\n    }\r\n\r\n    // test transform_exclusive_scan\r\n    {\r\n        int output[size(input)] = {};\r\n        assert(end(output) == transform_exclusive_scan(begin(input), end(input), begin(output), 0, plus{}, plus_one{}));\r\n        assert(is_transform_exclusive_scan(output));\r\n    }\r\n\r\n    // test adjacent_difference\r\n    {\r\n        int output[size(input)] = {};\r\n        assert(end(output) == adjacent_difference(begin(input), end(input), begin(output)));\r\n        for (const int& o : output) {\r\n            assert(o == 1);\r\n        }\r\n    }\r\n\r\n    {\r\n        int output[size(input)] = {};\r\n        assert(end(output) == adjacent_difference(begin(input), end(input), begin(output), not_std_minus{}));\r\n        for (const int& o : output) {\r\n            assert(o == 1);\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(run_tests());\r\n    assert(run_tests());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1659R3_ranges_alg_ends_with/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1659R3_ranges_alg_ends_with/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <functional>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nconcept testable_range = ranges::input_range<T> && (ranges::forward_range<T> || ranges::sized_range<T>);\r\n\r\ntemplate <class T>\r\nconcept testable_sentinel =\r\n    ranges::input_range<T>\r\n    && (ranges::forward_range<T> || sized_sentinel_for<ranges::sentinel_t<T>, ranges::iterator_t<T>>);\r\n\r\nstruct instantiator {\r\n    static constexpr pair<int, int> haystack[]       = {{0, 42}, {1, 42}, {2, 42}, {4, 42}};\r\n    static constexpr pair<int, int> short_haystack[] = {{4, 42}};\r\n    static constexpr pair<long, long> long_needle[]  = {{13, 1}, {13, 2}, {13, 4}};\r\n    static constexpr pair<long, long> short_needle[] = {{13, 2}, {13, 4}};\r\n    static constexpr pair<long, long> wrong_needle[] = {{13, 2}, {13, 3}};\r\n\r\n    template <testable_range In1, testable_range In2>\r\n    static constexpr void test_range() {\r\n        using ranges::ends_with, ranges::equal_to;\r\n\r\n        {\r\n            const same_as<bool> auto match =\r\n                ends_with(In1{haystack}, In2{long_needle}, equal_to{}, get_first, get_second);\r\n            assert(match);\r\n        }\r\n        {\r\n            const same_as<bool> auto match =\r\n                ends_with(In1{haystack}, In2{short_needle}, equal_to{}, get_first, get_second);\r\n            assert(match);\r\n        }\r\n        {\r\n            const same_as<bool> auto match =\r\n                ends_with(In1{haystack}, In2{wrong_needle}, equal_to{}, get_first, get_second);\r\n            assert(!match);\r\n        }\r\n        {\r\n            const same_as<bool> auto match =\r\n                ends_with(In1{short_haystack}, In2{short_needle}, equal_to{}, get_first, get_second);\r\n            assert(!match);\r\n        }\r\n        {\r\n            const same_as<bool> auto match =\r\n                ends_with(In1{haystack}, In2{span<pair<long, long>, 0>{}}, equal_to{}, get_first, get_second);\r\n            assert(match);\r\n        }\r\n    }\r\n\r\n    template <testable_sentinel In1, testable_sentinel In2>\r\n    static constexpr void test_iterator_sentinel() {\r\n        using ranges::begin, ranges::end, ranges::ends_with, ranges::equal_to;\r\n\r\n        {\r\n            In1 h{haystack};\r\n            In2 n{long_needle};\r\n            const same_as<bool> auto match =\r\n                ends_with(begin(h), end(h), begin(n), end(n), equal_to{}, get_first, get_second);\r\n            assert(match);\r\n        }\r\n        {\r\n            In1 h{haystack};\r\n            In2 n{short_needle};\r\n            const same_as<bool> auto match =\r\n                ends_with(begin(h), end(h), begin(n), end(n), equal_to{}, get_first, get_second);\r\n            assert(match);\r\n        }\r\n        {\r\n            In1 h{haystack};\r\n            In2 n{wrong_needle};\r\n            const same_as<bool> auto match =\r\n                ends_with(begin(h), end(h), begin(n), end(n), equal_to{}, get_first, get_second);\r\n            assert(!match);\r\n        }\r\n        {\r\n            In1 h{short_haystack};\r\n            In2 n{short_needle};\r\n            const same_as<bool> auto match =\r\n                ends_with(begin(h), end(h), begin(n), end(n), equal_to{}, get_first, get_second);\r\n            assert(!match);\r\n        }\r\n        {\r\n            In1 h{haystack};\r\n            In2 n{span<pair<long, long>, 0>{}};\r\n            const same_as<bool> auto match =\r\n                ends_with(begin(h), end(h), begin(n), end(n), equal_to{}, get_first, get_second);\r\n            assert(match);\r\n        }\r\n    }\r\n\r\n    template <ranges::input_range In1, ranges::input_range In2>\r\n    static void call() {\r\n        if constexpr (testable_range<In1> && testable_range<In2>) {\r\n            test_range<In1, In2>();\r\n            static_assert((test_range<In1, In2>(), true));\r\n        }\r\n\r\n        if constexpr (testable_sentinel<In1> && testable_sentinel<In2>) {\r\n            test_iterator_sentinel<In1, In2>();\r\n            static_assert((test_iterator_sentinel<In1, In2>(), true));\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n#if !defined(_PREFAST_) && !defined(__EDG__) // TRANSITION, GH-1030 and GH-3567\r\n    test_in_in<instantiator, const pair<int, int>, const pair<long, long>>();\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1659R3_ranges_alg_starts_with/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1659R3_ranges_alg_starts_with/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <functional>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct instantiator {\r\n    static constexpr pair<int, int> haystack[]       = {{0, 42}, {2, 42}, {4, 42}};\r\n    static constexpr pair<int, int> short_haystack[] = {{0, 42}};\r\n    static constexpr pair<long, long> needle[]       = {{13, 0}, {13, 2}};\r\n    static constexpr pair<long, long> wrong_needle[] = {{13, 0}, {13, 3}};\r\n\r\n    template <ranges::input_range In1, ranges::input_range In2>\r\n    static constexpr void test() {\r\n        using ranges::begin, ranges::end, ranges::equal_to, ranges::starts_with;\r\n\r\n        // Validate range overload\r\n        {\r\n            const same_as<bool> auto match = starts_with(In1{haystack}, In2{needle}, equal_to{}, get_first, get_second);\r\n            assert(match);\r\n        }\r\n        {\r\n            const same_as<bool> auto match =\r\n                starts_with(In1{haystack}, In2{wrong_needle}, equal_to{}, get_first, get_second);\r\n            assert(!match);\r\n        }\r\n        {\r\n            const same_as<bool> auto match =\r\n                starts_with(In1{short_haystack}, In2{needle}, equal_to{}, get_first, get_second);\r\n            assert(!match);\r\n        }\r\n\r\n        // Validate iterator + sentinel overload\r\n        {\r\n            In1 h{haystack};\r\n            In2 n{needle};\r\n            const same_as<bool> auto match =\r\n                starts_with(begin(h), end(h), begin(n), end(n), equal_to{}, get_first, get_second);\r\n            assert(match);\r\n        }\r\n        {\r\n            In1 h{haystack};\r\n            In2 n{wrong_needle};\r\n            const same_as<bool> auto match =\r\n                starts_with(begin(h), end(h), begin(n), end(n), equal_to{}, get_first, get_second);\r\n            assert(!match);\r\n        }\r\n        {\r\n            In1 h{short_haystack};\r\n            In2 n{needle};\r\n            const same_as<bool> auto match =\r\n                starts_with(begin(h), end(h), begin(n), end(n), equal_to{}, get_first, get_second);\r\n            assert(!match);\r\n        }\r\n    }\r\n\r\n    template <ranges::input_range In1, ranges::input_range In2>\r\n    static void call() {\r\n        test<In1, In2>();\r\n        static_assert((test<In1, In2>(), true));\r\n    }\r\n};\r\n\r\nint main() {\r\n    { // infinite haystack\r\n        const same_as<bool> auto match = ranges::starts_with(views::iota(0), views::iota(0, 5));\r\n        assert(match);\r\n    }\r\n    { // infinite needle\r\n        const same_as<bool> auto match = ranges::starts_with(views::iota(0, 5), views::iota(0));\r\n        assert(!match);\r\n    }\r\n\r\n#if !defined(_PREFAST_) && !defined(__EDG__) // TRANSITION, GH-1030 and GH-3567\r\n    test_in_in<instantiator, const pair<int, int>, const pair<long, long>>();\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1682R3_to_underlying/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1682R3_to_underlying/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nconcept can_underlying = requires(T e) { to_underlying(e); };\r\n\r\nenum enum1 : char { a = '1' };\r\nenum class enum2 : int { b = 2 };\r\nenum class enum3 : long { c = 3 };\r\nenum class enum4 { d = 4 };\r\n\r\nstruct not_an_enum {};\r\n\r\nstatic_assert(can_underlying<enum1>);\r\nstatic_assert(can_underlying<enum2>);\r\nstatic_assert(can_underlying<enum3>);\r\nstatic_assert(can_underlying<enum4>);\r\nstatic_assert(!can_underlying<not_an_enum>);\r\nstatic_assert(!can_underlying<int>);\r\n\r\nstatic_assert(is_same_v<decltype(to_underlying(enum1::a)), char>);\r\nstatic_assert(is_same_v<decltype(to_underlying(enum2::b)), int>);\r\nstatic_assert(is_same_v<decltype(to_underlying(enum3::c)), long>);\r\nstatic_assert(is_same_v<decltype(to_underlying(enum4::d)), int>);\r\n\r\nstatic_assert(noexcept(to_underlying(enum1::a)));\r\n\r\nconstexpr bool test() {\r\n    assert(to_underlying(enum1::a) == '1');\r\n    assert(to_underlying(enum2::b) == 2);\r\n    assert(to_underlying(enum3::c) == 3);\r\n    assert(to_underlying(enum4::d) == 4);\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test();\r\n    static_assert(test());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1899R3_views_stride/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1899R3_views_stride/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewStride = requires(Rng&& r) { views::stride(forward<Rng>(r), 3); };\r\n\r\ntemplate <ranges::input_range Rng, class Expected>\r\nconstexpr bool test_one(Rng&& rng, Expected&& expected) {\r\n    using ranges::forward_range, ranges::bidirectional_range, ranges::random_access_range, ranges::common_range,\r\n        ranges::sized_range;\r\n    using ranges::stride_view, ranges::begin, ranges::end, ranges::cbegin, ranges::cend, ranges::iterator_t,\r\n        ranges::sentinel_t, ranges::const_iterator_t, ranges::const_sentinel_t, ranges::prev;\r\n\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n\r\n    using V = views::all_t<Rng>;\r\n    using R = stride_view<V>;\r\n\r\n    static_assert(ranges::view<R>);\r\n    static_assert(ranges::input_range<R>);\r\n    static_assert(forward_range<R> == forward_range<Rng>);\r\n    static_assert(bidirectional_range<R> == bidirectional_range<Rng>);\r\n    static_assert(random_access_range<R> == random_access_range<Rng>);\r\n    static_assert(!ranges::contiguous_range<R>);\r\n\r\n    // Validate non-default-initializability\r\n    static_assert(!is_default_constructible_v<R>);\r\n\r\n    // Validate borrowed_range\r\n    static_assert(ranges::borrowed_range<R> == ranges::borrowed_range<V>);\r\n\r\n    // Validate range adaptor object and range adaptor closure\r\n    constexpr auto closure = views::stride(3);\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewStride<Rng&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewStride<Rng&>) {\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::stride(rng, 3)), R>);\r\n        static_assert(noexcept(views::stride(rng, 3)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | closure), R>);\r\n        static_assert(noexcept(rng | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewStride<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewStride<const remove_reference_t<Rng>&>) {\r\n        using RC                   = stride_view<views::all_t<const remove_reference_t<Rng>&>>;\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::stride(as_const(rng), 3)), RC>);\r\n        static_assert(noexcept(views::stride(as_const(rng), 3)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), RC>);\r\n        static_assert(noexcept(as_const(rng) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(CanViewStride<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (CanViewStride<remove_reference_t<Rng>>) {\r\n        using RS                   = stride_view<views::all_t<remove_reference_t<Rng>>>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::stride(std::move(rng), 3)), RS>);\r\n        static_assert(noexcept(views::stride(std::move(rng), 3)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(std::move(rng) | closure), RS>);\r\n        static_assert(noexcept(std::move(rng) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewStride<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n    if constexpr (CanViewStride<const remove_reference_t<Rng>>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::stride(std::move(as_const(rng)), 3)), R>);\r\n        static_assert(noexcept(views::stride(std::move(as_const(rng)), 3)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(std::move(as_const(rng)) | closure), R>);\r\n        static_assert(noexcept(std::move(as_const(rng)) | closure) == is_noexcept);\r\n    }\r\n\r\n    // Validate deduction guide\r\n    same_as<R> auto r = stride_view{std::forward<Rng>(rng), 3};\r\n\r\n    // Validate stride_view::stride\r\n    {\r\n        const same_as<ranges::range_difference_t<V>> auto s = as_const(r).stride();\r\n        assert(s == 3);\r\n        static_assert(noexcept(as_const(r).stride()));\r\n    }\r\n\r\n    // Validate stride_view::size\r\n    static_assert(CanMemberSize<R> == sized_range<V>);\r\n    if constexpr (CanMemberSize<R>) {\r\n        same_as<_Make_unsigned_like_t<ranges::range_difference_t<V>>> auto s = r.size();\r\n        assert(s == ranges::size(expected));\r\n        static_assert(noexcept(r.size()) == noexcept(ranges::distance(rng)));\r\n    }\r\n\r\n    // Validate stride_view::size (const)\r\n    static_assert(CanMemberSize<const R> == sized_range<const V>);\r\n    if constexpr (CanMemberSize<const R>) {\r\n        same_as<_Make_unsigned_like_t<ranges::range_difference_t<const V>>> auto s = as_const(r).size();\r\n        assert(s == ranges::size(expected));\r\n        static_assert(noexcept(as_const(r).size()) == noexcept(ranges::distance(rng)));\r\n    }\r\n\r\n    const bool is_empty = ranges::empty(expected);\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    static_assert(CanMemberEmpty<R> == (forward_range<V> || sized_range<V>) );\r\n    static_assert(CanBool<R> == CanEmpty<R>);\r\n    if constexpr (CanMemberEmpty<R>) {\r\n        assert(r.empty() == is_empty);\r\n        assert(static_cast<bool>(r) == !is_empty);\r\n    }\r\n\r\n    // Validate view_interface::empty and operator bool (const)\r\n    static_assert(CanMemberEmpty<const R> == (forward_range<const Rng> || sized_range<const V>) );\r\n    static_assert(CanBool<const R> == CanEmpty<const R>);\r\n    if constexpr (CanMemberEmpty<const R>) {\r\n        assert(as_const(r).empty() == is_empty);\r\n        assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n    }\r\n\r\n    // Validate content\r\n    assert(ranges::equal(r, expected));\r\n    if (!forward_range<V>) { // intentionally not if constexpr\r\n        return true;\r\n    }\r\n\r\n    // Validate stride_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    {\r\n        const same_as<iterator_t<R>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(*i == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            auto r2                              = r;\r\n            const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate stride_view::begin (const)\r\n    static_assert(CanMemberBegin<const R> == ranges::range<const V>);\r\n    if constexpr (CanMemberBegin<const R>) {\r\n        const same_as<iterator_t<const R>> auto ci = as_const(r).begin();\r\n        if (!is_empty) {\r\n            assert(*ci == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            const auto cr2                              = r;\r\n            const same_as<iterator_t<const R>> auto ci2 = cr2.begin();\r\n            if (!is_empty) {\r\n                assert(*ci2 == *ci);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate stride_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    {\r\n        const same_as<sentinel_t<R>> auto s = r.end();\r\n        assert((r.begin() == s) == is_empty);\r\n        static_assert(common_range<R> == (common_range<V> && (sized_range<V> || !bidirectional_range<V>) ));\r\n        if constexpr (common_range<R> && bidirectional_range<V>) {\r\n            if (!is_empty) {\r\n                assert(*prev(s) == *prev(end(expected)));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*prev(r2.end()) == *prev(end(expected)));\r\n                }\r\n            }\r\n        }\r\n\r\n        if constexpr (!common_range<R>) {\r\n            static_assert(same_as<sentinel_t<R>, default_sentinel_t>);\r\n        }\r\n    }\r\n\r\n    // Validate stride_view::end (const)\r\n    static_assert(CanMemberEnd<const R> == ranges::range<const V>);\r\n    if constexpr (CanMemberEnd<const R>) {\r\n        const same_as<sentinel_t<const R>> auto cs = as_const(r).end();\r\n        assert((as_const(r).begin() == cs) == is_empty);\r\n        static_assert(common_range<const R> == //\r\n                      (common_range<const V> && (sized_range<const V> || !bidirectional_range<const V>) ));\r\n        if constexpr (common_range<const R> && bidirectional_range<const V>) {\r\n            if (!is_empty) {\r\n                assert(*prev(cs) == *prev(end(expected)));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                const auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*prev(r2.end()) == *prev(end(expected)));\r\n                }\r\n            }\r\n        }\r\n\r\n        if constexpr (!common_range<const R>) {\r\n            static_assert(same_as<sentinel_t<const R>, default_sentinel_t>);\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::cbegin\r\n    static_assert(CanMemberCBegin<R>);\r\n    {\r\n        const same_as<const_iterator_t<R>> auto i = r.cbegin();\r\n        if (!is_empty) {\r\n            assert(*i == *cbegin(expected));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            auto r2                                    = r;\r\n            const same_as<const_iterator_t<R>> auto i2 = r2.cbegin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::cbegin (const)\r\n    static_assert(CanMemberCBegin<const R> == ranges::range<const V>);\r\n    if constexpr (CanMemberCBegin<const R>) {\r\n        const same_as<const_iterator_t<const R>> auto ci = as_const(r).cbegin();\r\n        if (!is_empty) {\r\n            assert(*ci == *cbegin(expected));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            const auto cr2                                    = r;\r\n            const same_as<const_iterator_t<const R>> auto ci2 = cr2.cbegin();\r\n            if (!is_empty) {\r\n                assert(*ci2 == *ci);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::cend\r\n    static_assert(CanMemberCEnd<R>);\r\n    {\r\n        const same_as<const_sentinel_t<R>> auto s = r.cend();\r\n        assert((r.cbegin() == s) == is_empty);\r\n        static_assert(common_range<R> == (common_range<V> && (sized_range<V> || !bidirectional_range<V>) ));\r\n        if constexpr (common_range<R> && bidirectional_range<V>) {\r\n            if (!is_empty) {\r\n                assert(*prev(s) == *prev(cend(expected)));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*prev(r2.cend()) == *prev(cend(expected)));\r\n                }\r\n            }\r\n        }\r\n\r\n        if constexpr (!common_range<R>) {\r\n            static_assert(same_as<const_sentinel_t<R>, default_sentinel_t>);\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::cend (const)\r\n    static_assert(CanMemberCEnd<const R> == ranges::range<const V>);\r\n    if constexpr (CanMemberCEnd<const R>) {\r\n        const same_as<const_sentinel_t<const R>> auto cs = as_const(r).cend();\r\n        assert((as_const(r).cbegin() == cs) == is_empty);\r\n        static_assert(common_range<const R>\r\n                      == (common_range<const V> && (sized_range<const V> || !bidirectional_range<const V>) ));\r\n        if constexpr (common_range<const R> && bidirectional_range<const V>) {\r\n            if (!is_empty) {\r\n                assert(*prev(cs) == *prev(cend(expected)));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                const auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*prev(r2.cend()) == *prev(cend(expected)));\r\n                }\r\n            }\r\n        }\r\n\r\n        if constexpr (!common_range<const R>) {\r\n            static_assert(same_as<const_sentinel_t<const R>, default_sentinel_t>);\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::data\r\n    static_assert(!CanData<R>);\r\n    static_assert(!CanData<const R>);\r\n\r\n    if (is_empty) {\r\n        return true;\r\n    }\r\n\r\n    // Validate view_interface::operator[]\r\n    static_assert(CanIndex<R> == random_access_range<V>);\r\n    if constexpr (CanIndex<R>) {\r\n        assert(r[0] == expected[0]);\r\n    }\r\n\r\n    // Validate view_interface::operator[] (const)\r\n    static_assert(CanIndex<const R> == random_access_range<const V>);\r\n    if constexpr (CanIndex<const R>) {\r\n        assert(as_const(r)[0] == expected[0]);\r\n    }\r\n\r\n    // Validate view_interface::front\r\n    static_assert(CanMemberFront<R> == forward_range<V>);\r\n    if constexpr (CanMemberFront<R>) {\r\n        assert(r.front() == *begin(expected));\r\n    }\r\n\r\n    // Validate view_interface::front (const)\r\n    static_assert(CanMemberFront<const R> == forward_range<const V>);\r\n    if constexpr (CanMemberFront<const R>) {\r\n        assert(as_const(r).front() == *begin(expected));\r\n    }\r\n\r\n    // Validate view_interface::back\r\n    static_assert(CanMemberBack<R> == (bidirectional_range<V> && common_range<V> && sized_range<V>) );\r\n    if constexpr (CanMemberBack<R>) {\r\n        assert(r.back() == *prev(end(expected)));\r\n    }\r\n\r\n    // Validate view_interface::back (const)\r\n    static_assert(\r\n        CanMemberBack<const R> == (bidirectional_range<const V> && common_range<const V> && sized_range<const V>) );\r\n    if constexpr (CanMemberBack<const R>) {\r\n        assert(as_const(r).back() == *prev(end(expected)));\r\n    }\r\n\r\n    // Validate stride_view::iterator<not const>\r\n    {\r\n        // Check iterator_category\r\n        if constexpr (forward_range<R>) {\r\n            using IterCat = iterator_t<R>::iterator_category;\r\n            using C       = iterator_traits<iterator_t<V>>::iterator_category;\r\n            static_assert((derived_from<C, random_access_iterator_tag> && same_as<IterCat, random_access_iterator_tag>)\r\n                          || same_as<IterCat, C>);\r\n        }\r\n\r\n        if constexpr (forward_range<R>) {\r\n            [[maybe_unused]] const iterator_t<R> defaulted;\r\n        }\r\n        same_as<iterator_t<R>> auto i = r.begin();\r\n\r\n        // Comparisons with std::default_sentinel_t\r\n        assert(i != default_sentinel);\r\n        if constexpr (forward_range<R>) {\r\n            assert(ranges::next(i, r.end()) == default_sentinel);\r\n        }\r\n\r\n        // Equality operators\r\n        if constexpr (equality_comparable<iterator_t<V>>) {\r\n            assert(i == i);\r\n            if constexpr (forward_range<R>) {\r\n                assert(i != ranges::next(i, 1));\r\n            }\r\n        }\r\n\r\n        if constexpr (forward_range<R>) {\r\n            assert(*i++ == expected[0]);\r\n        } else {\r\n            static_assert(is_void_v<decltype(i++)>);\r\n        }\r\n        assert(*++i == expected[2]);\r\n\r\n        if constexpr (bidirectional_range<R>) {\r\n            assert(*i-- == expected[2]);\r\n            assert(*--i == expected[0]);\r\n        }\r\n\r\n        if constexpr (random_access_range<R>) {\r\n            i += 2;\r\n            assert(*i == expected[2]);\r\n\r\n            i -= 2;\r\n            assert(*i == expected[0]);\r\n\r\n            assert(i[2] == expected[2]);\r\n\r\n            const auto i2 = i + 2;\r\n            assert(*i2 == expected[2]);\r\n\r\n            const auto i3 = 2 + i;\r\n            assert(*i3 == expected[2]);\r\n\r\n            const auto i4 = i3 - 2;\r\n            assert(*i4 == expected[0]);\r\n\r\n            const same_as<ranges::range_difference_t<V>> auto diff1 = i2 - i;\r\n            assert(diff1 == 2);\r\n\r\n            const same_as<ranges::range_difference_t<V>> auto diff2 = i - i2;\r\n            assert(diff2 == -2);\r\n\r\n            // Comparisons\r\n            assert(i < i2);\r\n            assert(i2 <= i3);\r\n            assert(i3 > i4);\r\n            assert(i4 >= i);\r\n            if constexpr (three_way_comparable<iterator_t<V>>) {\r\n                assert(i <=> i2 == strong_ordering::less);\r\n                assert(i <=> i4 == strong_ordering::equal);\r\n                assert(i2 <=> i == strong_ordering::greater);\r\n            }\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<sentinel_t<V>, iterator_t<V>>) {\r\n            const auto i2   = r.begin();\r\n            const auto sen  = r.end();\r\n            const auto size = ranges::ssize(expected);\r\n\r\n            const same_as<ranges::range_difference_t<V>> auto diff3 = i2 - sen;\r\n            assert(diff3 == -size);\r\n\r\n            const same_as<ranges::range_difference_t<V>> auto diff4 = sen - i2;\r\n            assert(diff4 == size);\r\n        }\r\n\r\n        [[maybe_unused]] same_as<const iterator_t<V>&> decltype(auto) base_ref = as_const(i).base();\r\n        static_assert(noexcept(i.base()));\r\n        [[maybe_unused]] same_as<iterator_t<V>> decltype(auto) base_ref2 = std::move(i).base();\r\n    }\r\n\r\n    // Validate stride_view::iterator<const>\r\n    if constexpr (CanMemberBegin<const R>) {\r\n        // Check iterator_category\r\n        if constexpr (forward_range<const R>) {\r\n            using IterCat = iterator_t<const R>::iterator_category;\r\n            using C       = iterator_traits<iterator_t<const V>>::iterator_category;\r\n            static_assert((derived_from<C, random_access_iterator_tag> && same_as<IterCat, random_access_iterator_tag>)\r\n                          || same_as<IterCat, C>);\r\n        }\r\n\r\n        constexpr bool constructible_from_nonconst =\r\n            convertible_to<iterator_t<V>, iterator_t<const V>> && convertible_to<sentinel_t<V>, sentinel_t<const V>>;\r\n\r\n        if constexpr (forward_range<const R>) {\r\n            [[maybe_unused]] const iterator_t<const R> const_defaulted;\r\n        }\r\n        auto i                               = r.begin();\r\n        same_as<iterator_t<const R>> auto ci = as_const(r).begin();\r\n\r\n        // Comparisons with std::default_sentinel_t\r\n        assert(ci != default_sentinel);\r\n        if constexpr (forward_range<const R>) {\r\n            assert(ranges::next(ci, r.end()) == default_sentinel);\r\n        }\r\n\r\n        // Equality operators\r\n        if constexpr (equality_comparable<iterator_t<const V>>) {\r\n            assert(ci == ci);\r\n            if constexpr (forward_range<const R>) {\r\n                assert(ci != ranges::next(ci, 1));\r\n            }\r\n\r\n            if constexpr (constructible_from_nonconst) {\r\n                assert(ci == i);\r\n                if constexpr (forward_range<const R>) {\r\n                    assert(ci != ranges::next(i, 1));\r\n                }\r\n            }\r\n        }\r\n\r\n        if constexpr (forward_range<const R>) {\r\n            assert(*ci++ == expected[0]);\r\n        } else {\r\n            static_assert(is_void_v<decltype(i++)>);\r\n        }\r\n        assert(*++ci == expected[2]);\r\n\r\n        if constexpr (bidirectional_range<const R>) {\r\n            assert(*ci-- == expected[2]);\r\n            assert(*--ci == expected[0]);\r\n        }\r\n\r\n        if constexpr (random_access_range<const R>) {\r\n            ci += 2;\r\n            assert(*ci == expected[2]);\r\n\r\n            ci -= 2;\r\n            assert(*ci == expected[0]);\r\n\r\n            assert(ci[2] == expected[2]);\r\n\r\n            const auto ci2 = ci + 2;\r\n            assert(*ci2 == expected[2]);\r\n\r\n            const auto ci3 = 2 + ci;\r\n            assert(*ci3 == expected[2]);\r\n\r\n            const auto ci4 = ci3 - 2;\r\n            assert(*ci4 == expected[0]);\r\n\r\n            const same_as<ranges::range_difference_t<V>> auto diff1 = ci2 - ci;\r\n            assert(diff1 == 2);\r\n\r\n            const same_as<ranges::range_difference_t<V>> auto diff2 = ci - ci2;\r\n            assert(diff2 == -2);\r\n\r\n            // Comparisons\r\n            assert(ci < ci2);\r\n            assert(ci <= ci2);\r\n            assert(ci2 > ci);\r\n            assert(ci2 >= ci);\r\n            if constexpr (three_way_comparable<iterator_t<const V>>) {\r\n                assert(ci <=> ci2 == strong_ordering::less);\r\n                assert(ci <=> ci4 == strong_ordering::equal);\r\n                assert(ci2 <=> ci == strong_ordering::greater);\r\n            }\r\n\r\n            // Cross comparisons\r\n            if constexpr (constructible_from_nonconst) {\r\n                assert(i < ci2);\r\n                assert(i <= ci2);\r\n                assert(ci2 > i);\r\n                assert(ci2 >= i);\r\n                if constexpr (three_way_comparable<iterator_t<const V>>) {\r\n                    assert(i <=> ci2 == strong_ordering::less);\r\n                    assert(i <=> ci4 == strong_ordering::equal);\r\n                    assert(ci2 <=> i == strong_ordering::greater);\r\n                }\r\n            }\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<sentinel_t<const V>, iterator_t<const V>>) {\r\n            const auto i2   = as_const(r).begin();\r\n            const auto sen  = as_const(r).end();\r\n            const auto size = ranges::ssize(expected);\r\n\r\n            const same_as<ranges::range_difference_t<const V>> auto diff3 = i2 - sen;\r\n            assert(diff3 == -size);\r\n\r\n            const same_as<ranges::range_difference_t<const V>> auto diff4 = sen - i2;\r\n            assert(diff4 == size);\r\n        }\r\n\r\n        [[maybe_unused]] same_as<const iterator_t<const V>&> decltype(auto) base_ref = as_const(ci).base();\r\n        static_assert(noexcept(ci.base()));\r\n        [[maybe_unused]] same_as<iterator_t<const V>> decltype(auto) base_ref2 = std::move(ci).base();\r\n    }\r\n\r\n    // Validate stride_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V>) {\r\n        same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>);\r\n        assert(*b1.begin() == *begin(expected));\r\n    }\r\n\r\n    // Validate stride_view::base() &&\r\n    same_as<V> auto b2 = std::move(r).base();\r\n    static_assert(noexcept(std::move(r).base()) == is_nothrow_move_constructible_v<V>);\r\n    if (!is_empty) {\r\n        assert(*b2.begin() == *begin(expected));\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr int some_ints[]     = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};\r\nstatic constexpr int stride_result[] = {0, 3, 6, 9};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        R r{some_ints};\r\n        test_one(r, stride_result);\r\n    }\r\n};\r\n\r\ntemplate <test::CanDifference Difference>\r\nusing test_input_range = test::range<input_iterator_tag, const int, test::Sized::yes, Difference, test::Common::yes,\r\n    test::CanCompare::yes, test::ProxyRef::no>;\r\n\r\ntemplate <class Category, test::Common IsCommon, test::Sized IsSized>\r\nusing test_range =\r\n    test::range<Category, const int, IsSized, test::CanDifference{derived_from<Category, random_access_iterator_tag>},\r\n        IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n        test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nconstexpr void instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_in<instantiator, const int>();\r\n#else // ^^^ test all input and forward range permutations / test only \"interesting\" permutations vvv\r\n    using test::Common, test::Sized;\r\n\r\n    // When the base range is an input range, the view is sensitive to differencing\r\n    instantiator::call<test_input_range<test::CanDifference::yes>>();\r\n    instantiator::call<test_input_range<test::CanDifference::no>>();\r\n\r\n    // The view is sensitive to category, commonality, and size, but oblivious to differencing and proxyness\r\n    instantiator::call<test_range<input_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes, Sized::no>>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare::yes, test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>},\r\n    test::CanView::yes, test::Copyability::move_only>;\r\n\r\nint main() {\r\n    { // Validate views\r\n        // ... copyable\r\n        constexpr span<const int> s{some_ints};\r\n        static_assert(test_one(s, stride_result));\r\n        test_one(s, stride_result);\r\n    }\r\n\r\n    { // ... move-only\r\n        test_one(move_only_view<input_iterator_tag, test::Common::no>{some_ints}, stride_result);\r\n        test_one(move_only_view<input_iterator_tag, test::Common::yes>{some_ints}, stride_result);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, stride_result);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, stride_result);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, stride_result);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, stride_result);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, stride_result);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, stride_result);\r\n    }\r\n\r\n    { // Validate non-views\r\n        static_assert(test_one(some_ints, stride_result));\r\n        test_one(some_ints, stride_result);\r\n    }\r\n    {\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_one(vec, stride_result);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_one(lst, stride_result);\r\n    }\r\n\r\n    { // empty range\r\n        using Span = span<const int>;\r\n        static_assert(test_one(Span{}, Span{}));\r\n        test_one(Span{}, Span{});\r\n    }\r\n\r\n    static_assert((instantiation_test(), true));\r\n    instantiation_test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1899R3_views_stride_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1899R3_views_stride_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstddef>\r\n#include <limits>\r\n#include <ranges>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\r\n\r\nvoid test_view_negative_stride() {\r\n    [[maybe_unused]] auto v = ranges::stride_view(some_ints, -1); // stride must be greater than 0\r\n}\r\n\r\nvoid test_iterator_dereference_at_end() {\r\n    auto v  = ranges::stride_view(some_ints, 3);\r\n    auto it = v.end();\r\n    (void) *it; // cannot dereference stride_view end iterator\r\n}\r\n\r\nvoid test_iterator_preincrement_past_end() {\r\n    auto v  = ranges::stride_view(some_ints, 3);\r\n    auto it = v.end();\r\n    ++it; // cannot increment stride_view end iterator\r\n}\r\n\r\nvoid test_iterator_postincrement_past_end() {\r\n    auto v  = ranges::stride_view(some_ints, 3);\r\n    auto it = v.end();\r\n    it++; // cannot increment stride_view end iterator\r\n}\r\n\r\nvoid test_iterator_advance_past_end() {\r\n    auto v  = ranges::stride_view(some_ints, 3);\r\n    auto it = v.begin();\r\n    it += 5; // cannot advance stride_view iterator past end\r\n}\r\n\r\nvoid test_iterator_advance_past_end_with_integer_overflow() {\r\n    auto v  = ranges::stride_view(some_ints, 3);\r\n    auto it = v.begin();\r\n    it += (numeric_limits<ptrdiff_t>::max)() / 2; // cannot advance stride_view iterator past end (integer overflow)\r\n}\r\n\r\nvoid test_iterator_advance_negative_min() {\r\n    auto v  = ranges::stride_view(some_ints, 3);\r\n    auto it = v.begin();\r\n    it -= (numeric_limits<ptrdiff_t>::min)(); // cannot advance stride_view iterator past end (integer overflow)\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_view_negative_stride,\r\n        test_iterator_dereference_at_end,\r\n        test_iterator_preincrement_past_end,\r\n        test_iterator_postincrement_past_end,\r\n        test_iterator_advance_past_end,\r\n        test_iterator_advance_past_end_with_integer_overflow,\r\n        test_iterator_advance_negative_min,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P1951R1_default_arguments_pair_forward_ctor/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P1951R1_default_arguments_pair_forward_ctor/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <memory>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nvoid test() {\r\n    pair<int, unique_ptr<int>> p1{42, {}};\r\n    pair<unique_ptr<int>, int> p2{{}, 42};\r\n    pair<unique_ptr<int>, unique_ptr<int>> p3{{}, {}};\r\n    (void) p1;\r\n    (void) p2;\r\n    (void) p3;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2093R14_formatted_output/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"\"\r\n*\tPM_CL=\"/utf-8\"\r\n"
  },
  {
    "path": "tests/std/tests/P2093R14_formatted_output/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <fcntl.h>\r\n#include <filesystem>\r\n#include <format>\r\n#include <fstream>\r\n#include <io.h>\r\n#include <limits>\r\n#include <locale>\r\n#include <ostream>\r\n#include <print>\r\n#include <sstream>\r\n#include <string>\r\n#include <string_view>\r\n#include <vector>\r\n\r\n#pragma warning(push) // TRANSITION, OS-23694920\r\n#pragma warning(disable : 4668) // 'MEOW' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'\r\n#include <Windows.h>\r\n#pragma warning(pop)\r\n\r\n#include <temp_file_name.hpp>\r\n\r\nusing namespace std;\r\n\r\nnamespace test {\r\n    class win_console {\r\n    public:\r\n        win_console() {\r\n            // There's a trick you can do to create a FILE stream for a Win32 console:\r\n            //\r\n            //   1. Call _open_osfhandle() to create a file descriptor for the console screen\r\n            //      buffer handle.\r\n            //\r\n            //   2. Call _fdopen() to get a FILE* for the file descriptor.\r\n            constexpr DWORD screen_buffer_access = GENERIC_READ | GENERIC_WRITE;\r\n            console_handle =\r\n                CreateConsoleScreenBuffer(screen_buffer_access, 0, nullptr, CONSOLE_TEXTMODE_BUFFER, nullptr);\r\n\r\n            if (console_handle == INVALID_HANDLE_VALUE) {\r\n                return;\r\n            }\r\n\r\n            const int console_fd = _open_osfhandle(reinterpret_cast<intptr_t>(console_handle), _O_TEXT);\r\n\r\n            if (console_fd == -1) {\r\n                return;\r\n            }\r\n\r\n            file_stream_ptr = _fdopen(console_fd, \"w\");\r\n        }\r\n\r\n        ~win_console() {\r\n            delete_console();\r\n        }\r\n\r\n        win_console(const win_console&)            = delete;\r\n        win_console& operator=(const win_console&) = delete;\r\n\r\n        win_console(win_console&& rhs) noexcept\r\n            : console_handle(rhs.console_handle), file_stream_ptr(rhs.file_stream_ptr) {\r\n            rhs.console_handle  = nullptr;\r\n            rhs.file_stream_ptr = nullptr;\r\n        }\r\n\r\n        win_console& operator=(win_console&& rhs) noexcept {\r\n            delete_console();\r\n\r\n            console_handle     = rhs.console_handle;\r\n            rhs.console_handle = nullptr;\r\n\r\n            file_stream_ptr     = rhs.file_stream_ptr;\r\n            rhs.file_stream_ptr = nullptr;\r\n\r\n            return *this;\r\n        }\r\n\r\n        FILE* get_file_stream() const {\r\n            assert(is_console_valid());\r\n            return file_stream_ptr;\r\n        }\r\n\r\n        wstring get_console_line(const size_t line_number) const {\r\n            // We use the ReadConsoleOutputCharacterW() function to read lines of text which were written to\r\n            // the console. The neat thing here is that if we write to the console using the FILE* returned by\r\n            // win_console::get_file_stream() with std::print(), we can still use ReadConsoleOutputCharacterW()\r\n            // to get that text! This allows us to verify the output being written to the console and check for,\r\n            // e.g., invalid code point replacement.\r\n            const size_t line_char_width = get_line_character_width();\r\n            const COORD read_coords{.X = 0, .Y = static_cast<SHORT>(line_number)};\r\n\r\n            wstring output_str;\r\n            output_str.resize_and_overwrite(\r\n                line_char_width, [this, read_coords](wchar_t* const dest_ptr, const size_t allocated_size) {\r\n                    DWORD num_chars_read;\r\n                    const BOOL read_output_result = ReadConsoleOutputCharacterW(\r\n                        console_handle, dest_ptr, static_cast<DWORD>(allocated_size), read_coords, &num_chars_read);\r\n\r\n                    assert(read_output_result && \"ERROR: ReadConsoleOutputCharacterW() failed!\");\r\n                    return num_chars_read;\r\n                });\r\n\r\n            // By default, Windows fills console character cells with space characters. We want to remove\r\n            // those space characters which appear after the user's text.\r\n            const size_t lastValidChar = output_str.find_last_not_of(' ');\r\n\r\n            if (lastValidChar == wstring::npos) {\r\n                output_str.clear();\r\n            } else {\r\n                output_str = output_str.substr(0, lastValidChar + 1);\r\n            }\r\n\r\n            return output_str;\r\n        }\r\n\r\n    private:\r\n        void delete_console() {\r\n            if (is_console_valid()) {\r\n                // According to the MSDN, we don't call CloseHandle() on handles passed to _open_osfhandle(),\r\n                // and we don't call _close() on file descriptors passed to _fdopen(). So, our only clean-up\r\n                // task is to call fclose().\r\n                fclose(file_stream_ptr);\r\n\r\n                console_handle  = nullptr;\r\n                file_stream_ptr = nullptr;\r\n            }\r\n        }\r\n\r\n        size_t get_line_character_width() const {\r\n            CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info;\r\n\r\n            {\r\n                const BOOL get_screen_buffer_info_result =\r\n                    GetConsoleScreenBufferInfo(console_handle, &screen_buffer_info);\r\n                assert(get_screen_buffer_info_result && \"ERROR: GetConsoleScreenBufferInfo() failed!\");\r\n            }\r\n\r\n            return static_cast<size_t>(screen_buffer_info.dwSize.X);\r\n        }\r\n\r\n        bool is_console_valid() const {\r\n            return console_handle != nullptr && console_handle != INVALID_HANDLE_VALUE && file_stream_ptr != nullptr;\r\n        }\r\n\r\n    private:\r\n        HANDLE console_handle;\r\n        FILE* file_stream_ptr;\r\n    };\r\n\r\n    // We use Windows semaphores to synchronize the parent and child processes.\r\n    class win_semaphore {\r\n    public:\r\n        // Construct a new semaphore in the parent process.\r\n        win_semaphore() {\r\n            SECURITY_ATTRIBUTES semaphore_attributes{};\r\n            semaphore_attributes.nLength        = sizeof(SECURITY_ATTRIBUTES);\r\n            semaphore_attributes.bInheritHandle = TRUE; // The child process will inherit this handle.\r\n\r\n            m_handle = CreateSemaphoreW(&semaphore_attributes, 0, 1, nullptr);\r\n            assert(m_handle != nullptr);\r\n        }\r\n\r\n        // Construct an inherited semaphore in the child process.\r\n        explicit win_semaphore(const uintptr_t val) : m_handle(reinterpret_cast<HANDLE>(val)) {\r\n            assert(m_handle != nullptr);\r\n        }\r\n\r\n        win_semaphore(const win_semaphore&)            = delete;\r\n        win_semaphore& operator=(const win_semaphore&) = delete;\r\n\r\n        ~win_semaphore() {\r\n            const BOOL close_handle_succeeded = CloseHandle(m_handle);\r\n            assert(close_handle_succeeded);\r\n        }\r\n\r\n        // The parent process has to tell the child process what its inherited handles are.\r\n        [[nodiscard]] uintptr_t to_uintptr() const {\r\n            return reinterpret_cast<uintptr_t>(m_handle);\r\n        }\r\n\r\n        // win_semaphore imitates std::counting_semaphore's interface with release() and acquire().\r\n        void release() {\r\n            const BOOL release_semaphore_succeeded = ReleaseSemaphore(m_handle, 1, nullptr);\r\n            assert(release_semaphore_succeeded);\r\n        }\r\n\r\n        void acquire() {\r\n            const DWORD wait_result = WaitForSingleObject(m_handle, INFINITE);\r\n            assert(wait_result == WAIT_OBJECT_0);\r\n        }\r\n\r\n    private:\r\n        HANDLE m_handle;\r\n    };\r\n} // namespace test\r\n\r\nconst locale& get_utf8_locale() {\r\n#pragma warning(push)\r\n#pragma warning(disable : 4640) // construction of local static object is not thread-safe\r\n    static const locale utf8_locale{\"en-US.UTF-8\"};\r\n#pragma warning(pop)\r\n\r\n    return utf8_locale;\r\n}\r\n\r\nwstring string_to_wstring(const string_view str) {\r\n    using facet_type = codecvt<wchar_t, char, mbstate_t>;\r\n    const facet_type& facet{use_facet<facet_type>(get_utf8_locale())};\r\n\r\n    mbstate_t conversion_state{};\r\n    const size_t num_chars_required = static_cast<size_t>(\r\n        facet.length(conversion_state, str.data(), str.data() + str.size(), (numeric_limits<size_t>::max)()));\r\n\r\n    wstring output_str;\r\n    output_str.resize_and_overwrite(num_chars_required, [&](wchar_t* const dest_str_ptr, const size_t output_size) {\r\n        const char* src_end_ptr;\r\n        wchar_t* dest_end_ptr;\r\n        const codecvt_base::result conversion_result = facet.in(conversion_state, str.data(), str.data() + str.size(),\r\n            src_end_ptr, dest_str_ptr, dest_str_ptr + output_size, dest_end_ptr);\r\n\r\n        assert(conversion_result == codecvt_base::ok);\r\n\r\n        return dest_end_ptr - dest_str_ptr;\r\n    });\r\n\r\n    return output_str;\r\n}\r\n\r\nstring wstring_to_string(const wstring_view wide_str) {\r\n    using facet_type = codecvt<wchar_t, char, mbstate_t>;\r\n    const facet_type& facet{use_facet<facet_type>(get_utf8_locale())};\r\n\r\n    mbstate_t conversion_state{};\r\n    const size_t max_chars_required = wide_str.size() * facet.max_length();\r\n\r\n    string output_str;\r\n    output_str.resize_and_overwrite(max_chars_required, [&](char* const dest_str_ptr, const size_t output_size) {\r\n        const wchar_t* src_end_ptr;\r\n        char* dest_end_ptr;\r\n        const codecvt_base::result conversion_result = facet.out(conversion_state, wide_str.data(),\r\n            wide_str.data() + wide_str.size(), src_end_ptr, dest_str_ptr, dest_str_ptr + output_size, dest_end_ptr);\r\n\r\n        assert(conversion_result == codecvt_base::ok);\r\n\r\n        return dest_end_ptr - dest_str_ptr;\r\n    });\r\n\r\n    return output_str;\r\n}\r\n\r\nvoid maybe_flush_console_file_stream(const test::win_console& console) {\r\n    // std::print() and std::println() should automatically flush the stream if the Unicode\r\n    // API is being used, according to N4928 [print.fun]/7. So, as an additional check,\r\n    // we'll only call std::fflush() if the ordinary literal encoding is *NOT* UTF-8. This\r\n    // should work fine, assuming that our implementation is correct.\r\n    if constexpr (!_Is_ordinary_literal_encoding_utf8()) {\r\n        fflush(console.get_file_stream());\r\n    }\r\n}\r\n\r\nvoid test_print_optimizations() {\r\n    test::win_console test_console{};\r\n    FILE* const console_file_stream = test_console.get_file_stream();\r\n\r\n    size_t curr_line_number = 0;\r\n\r\n    const auto get_last_console_line_closure = [&test_console, &curr_line_number]() {\r\n        maybe_flush_console_file_stream(test_console);\r\n\r\n        return wstring_to_string(test_console.get_console_line(curr_line_number++));\r\n    };\r\n\r\n    stringstream test_str_stream{};\r\n\r\n    // Even if a string has no formatting arguments, std::format() will still replace escaped\r\n    // brace characters (i.e., {{ and }}) with a single brace character. We need to make sure\r\n    // that we do the same.\r\n    {\r\n        constexpr string_view escaped_braces_str{\"[{{a{{{{b c}}}}d}}]\"};\r\n        constexpr string_view expected_str{\"[{a{{b c}}d}][{a{{b c}}d}]\"};\r\n\r\n        print(console_file_stream, escaped_braces_str);\r\n        println(console_file_stream, escaped_braces_str);\r\n\r\n        const string last_console_line = get_last_console_line_closure();\r\n        assert(last_console_line == expected_str);\r\n\r\n        print(test_str_stream, escaped_braces_str);\r\n        println(test_str_stream, escaped_braces_str);\r\n\r\n        string str_stream_line;\r\n        getline(test_str_stream, str_stream_line);\r\n\r\n        assert(str_stream_line == expected_str);\r\n    }\r\n\r\n    // When writing out to a Unicode console, we transcode the string in segments of 8,192 bytes\r\n    // each. Splitting up the strings into segments requires ending each segment on a valid code\r\n    // point (if applicable). We need to make sure that the actual string is getting printed\r\n    // appropriately. Manual test:\r\n\r\n    /**********\r\n    #include <format>\r\n    #include <print>\r\n    #include <string>\r\n    using namespace std;\r\n\r\n    int main() {\r\n        string str;\r\n        for (int i = 10; i < 8190; i += 10) {\r\n            str += format(\"[{:.<8}]\", i);\r\n        }\r\n        str += \"[8189...]\";\r\n        println(\"{}\\xF0\\x9F\\x90\\x88\", str);\r\n    }\r\n    **********/\r\n}\r\n\r\nvoid test_invalid_code_points_console() {\r\n    if constexpr (!_Is_ordinary_literal_encoding_utf8()) {\r\n        if (GetConsoleOutputCP() != CP_UTF8) {\r\n            return; // With neither `/utf-8` nor a UTF-8 console output codepage, we can't run this part of the test.\r\n        }\r\n    }\r\n\r\n    test::win_console test_console{};\r\n    FILE* const console_file_stream = test_console.get_file_stream();\r\n    size_t curr_line_number         = 0;\r\n\r\n    using printed_string_type = format_string<>;\r\n\r\n    const auto test_valid_sequence_closure = [&](const printed_string_type printed_str) {\r\n        println(console_file_stream, printed_str);\r\n        maybe_flush_console_file_stream(test_console);\r\n\r\n        const wstring console_line{test_console.get_console_line(curr_line_number++)};\r\n        assert(wstring_to_string(console_line) == printed_str.get());\r\n    };\r\n\r\n    const auto test_invalid_sequence_closure = [&](const printed_string_type printed_str) {\r\n        println(console_file_stream, printed_str);\r\n        maybe_flush_console_file_stream(test_console);\r\n\r\n        const wstring console_line{test_console.get_console_line(curr_line_number++)};\r\n        const bool contains_replacement_character = console_line.contains(L'\\uFFFD');\r\n\r\n        if constexpr (_Is_ordinary_literal_encoding_utf8()) {\r\n            // It isn't necessarily well-documented how MultiByteToWideChar() (used internally by\r\n            // __std_print_to_unicode_console()) replaces invalid code points, except for the fact\r\n            // that if an invalid code point is encountered, then some amount of characters are\r\n            // replaced with a single U+FFFD character. So, we instead check that the string written\r\n            // to the console has at least one U+FFFD character if it is invalid. (The documentation\r\n            // for the function also implies that if the string provided to MultiByteToWideChar() isn't\r\n            // empty, then the string created by it also won't be empty.)\r\n            assert(printed_str.get().empty() || !console_line.empty());\r\n            assert(contains_replacement_character);\r\n        }\r\n\r\n        // There seems to be some inconsistent behavior with what happens when std::fputs() (used internally\r\n        // by std::print() et al. when writing to files or when the ordinary literal encoding isn't UTF-8) writes\r\n        // invalid code sequences to a FILE stream associated with a console. On some systems, it seems that\r\n        // these characters are dropped; on others, they seem to be replaced with U+FFFD. So, a check like\r\n        // \"assert(!contains_replacement_character)\" might pass on some systems and fail on others.\r\n    };\r\n\r\n    // Example UTF-8 Code Sequences from https://www.php.net/manual/en/reference.pcre.pattern.modifiers.php#54805\r\n\r\n    // Valid ASCII\r\n    test_valid_sequence_closure(\"a\");\r\n\r\n    // Valid 2 Octet Sequence\r\n    test_valid_sequence_closure(\"\\xC3\\xB1\");\r\n\r\n    // Invalid 2 Octet Sequence\r\n    test_invalid_sequence_closure(\"\\xC3\\x28\");\r\n\r\n    // Invalid Sequence Identifier\r\n    test_invalid_sequence_closure(\"\\xA0\\xA1\");\r\n\r\n    // Valid 3 Octet Sequence\r\n    test_valid_sequence_closure(\"\\xE2\\x82\\xA1\");\r\n\r\n    // Invalid 3 Octet Sequence (in 2nd Octet)\r\n    test_invalid_sequence_closure(\"\\xE2\\x28\\xA1\");\r\n\r\n    // Invalid 3 Octet Sequence (in 3rd Octet)\r\n    test_invalid_sequence_closure(\"\\xE2\\x82\\x28\");\r\n\r\n    // Skipped: 0xF0 0x90 0x8C 0xBC (MultiByteToWideChar() correctly finds that this is a valid\r\n    // UTF-8 code point, but the call to WriteConsoleW() seems to erroneously replace it with U+FFFD.)\r\n\r\n    // Invalid 4 Octet Sequence (in 2nd Octet)\r\n    test_invalid_sequence_closure(\"\\xF0\\x28\\x8C\\xBC\");\r\n\r\n    // Invalid 4 Octet Sequence (in 3rd Octet)\r\n    test_invalid_sequence_closure(\"\\xF0\\x90\\x28\\xBC\");\r\n\r\n    // Invalid 4 Octet Sequence (in 4th Octet)\r\n    test_invalid_sequence_closure(\"\\xF0\\x28\\x8C\\x25\");\r\n}\r\n\r\nFILE* checked_fopen_s(const string& filename, const char* const mode) {\r\n    FILE* ret;\r\n    const errno_t fopen_result = fopen_s(&ret, filename.c_str(), mode);\r\n    assert(fopen_result == 0);\r\n    return ret;\r\n}\r\n\r\nvoid test_invalid_code_points_file() {\r\n    // Unlike for the console API when the ordinary literal encoding is UTF-8, invalid code points shouldn't\r\n    // be replaced when writing to a file.\r\n    const string temp_file_name_str = temp_file_name();\r\n\r\n    FILE* temp_file_stream = checked_fopen_s(temp_file_name_str, \"w+b\");\r\n\r\n    using printed_string_type = format_string<>;\r\n\r\n    const auto test_sequence_closure = [&](const printed_string_type printed_str) {\r\n        rewind(temp_file_stream);\r\n        print(temp_file_stream, printed_str);\r\n        rewind(temp_file_stream);\r\n\r\n        string file_line_str;\r\n        file_line_str.resize_and_overwrite(\r\n            printed_str.get().size() + 1, [&](char* const dest_str_ptr, const size_t output_size) {\r\n                fgets(dest_str_ptr, static_cast<int>(output_size), temp_file_stream);\r\n                return output_size - 1;\r\n            });\r\n\r\n        assert(file_line_str == printed_str.get());\r\n    };\r\n\r\n    // Example UTF-8 Code Sequences from https://www.php.net/manual/en/reference.pcre.pattern.modifiers.php#54805\r\n\r\n    // Valid ASCII\r\n    test_sequence_closure(\"a\");\r\n\r\n    // Valid 2 Octet Sequence\r\n    test_sequence_closure(\"\\xC3\\xB1\");\r\n\r\n    // Invalid 2 Octet Sequence\r\n    test_sequence_closure(\"\\xC3\\x28\");\r\n\r\n    // Invalid Sequence Identifier\r\n    test_sequence_closure(\"\\xA0\\xA1\");\r\n\r\n    // Valid 3 Octet Sequence\r\n    test_sequence_closure(\"\\xE2\\x82\\xA1\");\r\n\r\n    // Invalid 3 Octet Sequence (in 2nd Octet)\r\n    test_sequence_closure(\"\\xE2\\x28\\xA1\");\r\n\r\n    // Invalid 3 Octet Sequence (in 3rd Octet)\r\n    test_sequence_closure(\"\\xE2\\x82\\x28\");\r\n\r\n    // Valid 4 Octet Sequence\r\n    test_sequence_closure(\"\\xF0\\x90\\x8C\\xBC\");\r\n\r\n    // Invalid 4 Octet Sequence (in 2nd Octet)\r\n    test_sequence_closure(\"\\xF0\\x28\\x8C\\xBC\");\r\n\r\n    // Invalid 4 Octet Sequence (in 3rd Octet)\r\n    test_sequence_closure(\"\\xF0\\x90\\x28\\xBC\");\r\n\r\n    // Invalid 4 Octet Sequence (in 4th Octet)\r\n    test_sequence_closure(\"\\xF0\\x28\\x8C\\x25\");\r\n\r\n    fclose(temp_file_stream);\r\n\r\n    filesystem::remove(temp_file_name_str);\r\n}\r\n\r\nvoid test_stream_flush_console() {\r\n    // If the ordinary literal encoding is UTF-8, then the FILE stream associated with\r\n    // a console should always be flushed before writing output during a call to std::print()\r\n    // and std::println(). Otherwise, the stream should *NOT* be flushed.\r\n    test::win_console temp_console{};\r\n    FILE* const console_file_stream = temp_console.get_file_stream();\r\n\r\n    print(console_file_stream, \"Hello,\");\r\n\r\n    {\r\n        const wstring extractedStr{temp_console.get_console_line(0)};\r\n\r\n        if constexpr (_Is_ordinary_literal_encoding_utf8()) {\r\n            assert(extractedStr == L\"Hello,\");\r\n        } else {\r\n            assert(extractedStr.empty());\r\n        }\r\n    }\r\n\r\n    println(console_file_stream, \" world!\");\r\n\r\n    {\r\n        const wstring extractedStr{temp_console.get_console_line(0)};\r\n\r\n        if constexpr (_Is_ordinary_literal_encoding_utf8()) {\r\n            assert(extractedStr == L\"Hello, world!\");\r\n        } else {\r\n            assert(extractedStr.empty());\r\n        }\r\n    }\r\n\r\n    maybe_flush_console_file_stream(temp_console);\r\n\r\n    {\r\n        const wstring extractedStr{temp_console.get_console_line(0)};\r\n        assert(extractedStr == L\"Hello, world!\");\r\n    }\r\n\r\n    print(console_file_stream, \"kitty\");\r\n    println(console_file_stream);\r\n    println(console_file_stream, \"cat\");\r\n\r\n    {\r\n        const wstring line0{temp_console.get_console_line(0)};\r\n        const wstring line1{temp_console.get_console_line(1)};\r\n        const wstring line2{temp_console.get_console_line(2)};\r\n\r\n        assert(line0 == L\"Hello, world!\");\r\n\r\n        if constexpr (_Is_ordinary_literal_encoding_utf8()) {\r\n            assert(line1 == L\"kitty\");\r\n            assert(line2 == L\"cat\");\r\n        } else {\r\n            assert(line1.empty());\r\n            assert(line2.empty());\r\n        }\r\n    }\r\n\r\n    maybe_flush_console_file_stream(temp_console);\r\n\r\n    {\r\n        const wstring line0{temp_console.get_console_line(0)};\r\n        const wstring line1{temp_console.get_console_line(1)};\r\n        const wstring line2{temp_console.get_console_line(2)};\r\n\r\n        assert(line0 == L\"Hello, world!\");\r\n        assert(line1 == L\"kitty\");\r\n        assert(line2 == L\"cat\");\r\n    }\r\n}\r\n\r\nvoid test_stream_flush_file() {\r\n    // Regardless of the ordinary literal encoding, neither std::print() nor std::println()\r\n    // should flush file streams which do not refer to consoles.\r\n    const string temp_file_name_str = temp_file_name();\r\n\r\n    {\r\n        ofstream output_file_stream{temp_file_name_str};\r\n\r\n        print(output_file_stream, \"Hello, \");\r\n\r\n        {\r\n            ifstream input_file_stream{temp_file_name_str};\r\n\r\n            string extracted_line_str;\r\n            getline(input_file_stream, extracted_line_str);\r\n\r\n            assert(extracted_line_str.empty());\r\n        }\r\n\r\n        println(output_file_stream, \"world!\");\r\n\r\n        {\r\n            ifstream input_file_stream{temp_file_name_str};\r\n\r\n            string extracted_line_str;\r\n            getline(input_file_stream, extracted_line_str);\r\n\r\n            assert(extracted_line_str.empty());\r\n        }\r\n\r\n        output_file_stream.flush();\r\n\r\n        {\r\n            ifstream input_file_stream{temp_file_name_str};\r\n\r\n            string extracted_line_str;\r\n            getline(input_file_stream, extracted_line_str);\r\n\r\n            assert(extracted_line_str == \"Hello, world!\");\r\n        }\r\n    }\r\n\r\n    filesystem::remove(temp_file_name_str);\r\n}\r\n\r\nvoid test_empty_strings_and_newlines() {\r\n    const string temp_file_name_str = temp_file_name();\r\n\r\n    {\r\n        ofstream output_file_stream{temp_file_name_str};\r\n\r\n        print(output_file_stream, \"NCC-1701\");\r\n        print(output_file_stream, \"\");\r\n        print(output_file_stream, \"-D\\n\");\r\n        print(output_file_stream, \"{{}} for {}!\\n\", \"impact\");\r\n\r\n        println(output_file_stream);\r\n        println(output_file_stream, \"I have {} cute {} kittens.\", 1729, \"fluffy\");\r\n        println(output_file_stream, \"\");\r\n        println(output_file_stream, \"What are an orthodontist's favorite characters? '{{' and '}}', of course!\");\r\n        println(output_file_stream, \"ONE\\nTWO\\n\");\r\n        println(output_file_stream, \"THREE\");\r\n    }\r\n\r\n    {\r\n        FILE* temp_file_stream = checked_fopen_s(temp_file_name_str, \"a\");\r\n\r\n        print(temp_file_stream, \"space\");\r\n        print(temp_file_stream, \"\");\r\n        print(temp_file_stream, \"time\\n\");\r\n\r\n        println(temp_file_stream, \"general\");\r\n        println(temp_file_stream);\r\n        println(temp_file_stream, \"relativity\");\r\n\r\n        fclose(temp_file_stream);\r\n    }\r\n\r\n    {\r\n        ifstream input_file_stream{temp_file_name_str};\r\n\r\n        vector<string> lines;\r\n        for (string str; getline(input_file_stream, str);) {\r\n            lines.push_back(str);\r\n        }\r\n\r\n        const vector<string> expected_lines{\r\n            \"NCC-1701-D\",\r\n            \"{} for impact!\",\r\n            \"\",\r\n            \"I have 1729 cute fluffy kittens.\",\r\n            \"\",\r\n            \"What are an orthodontist's favorite characters? '{' and '}', of course!\",\r\n            \"ONE\",\r\n            \"TWO\",\r\n            \"\",\r\n            \"THREE\",\r\n            \"spacetime\",\r\n            \"general\",\r\n            \"\",\r\n            \"relativity\",\r\n        };\r\n\r\n        assert(lines == expected_lines);\r\n    }\r\n\r\n    filesystem::remove(temp_file_name_str);\r\n}\r\n\r\nvoid all_tests() {\r\n    test_print_optimizations();\r\n\r\n    test_invalid_code_points_console();\r\n    test_invalid_code_points_file();\r\n\r\n    test_stream_flush_console();\r\n    test_stream_flush_file();\r\n\r\n    test_empty_strings_and_newlines();\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    // For clarity, we pass a --child option, instead of just detecting the semaphore values.\r\n    const bool is_child{argc == 4 && argv[1] == \"--child\"sv};\r\n\r\n    if (is_child) {\r\n        test::win_semaphore hello_semaphore{static_cast<uintptr_t>(stoull(argv[2]))};\r\n        test::win_semaphore goodbye_semaphore{static_cast<uintptr_t>(stoull(argv[3]))};\r\n\r\n        // We use the hello_semaphore to tell the parent process that we're ready for it to attach to our console.\r\n        hello_semaphore.release();\r\n\r\n        // Then, we use the goodbye_semaphore to wait for the parent process to finish its work.\r\n        goodbye_semaphore.acquire();\r\n    } else {\r\n        test::win_semaphore hello_semaphore{};\r\n        test::win_semaphore goodbye_semaphore{};\r\n\r\n        // This will receive the child process ID.\r\n        PROCESS_INFORMATION process_information{};\r\n\r\n        {\r\n            // Get the absolute path of our executable.\r\n            // This assumes that our test infrastructure doesn't use long paths.\r\n            wstring module_filename;\r\n            module_filename.resize_and_overwrite(MAX_PATH, [](wchar_t* const ptr, const size_t n) {\r\n                // resize_and_overwrite() prepares a buffer of size n + 1.\r\n                // GetModuleFileNameW() takes that buffer size.\r\n                const DWORD len = GetModuleFileNameW(nullptr, ptr, static_cast<DWORD>(n + 1));\r\n                assert(len != 0);\r\n                return len;\r\n            });\r\n\r\n            // CreateProcessW() requires the command line to be non-const, so we pass command_line.data() below.\r\n            // We use quotes to defend against module_filename containing spaces.\r\n            wstring command_line = format(LR\"(\"{}\" --child {} {})\", module_filename, hello_semaphore.to_uintptr(),\r\n                goodbye_semaphore.to_uintptr());\r\n\r\n            // The entire purpose of this code is to hide the child process's console window,\r\n            // to avoid rapid flickering during test runs.\r\n            STARTUPINFOW startup_info{};\r\n            startup_info.cb          = sizeof(STARTUPINFOW);\r\n            startup_info.dwFlags     = STARTF_USESHOWWINDOW;\r\n            startup_info.wShowWindow = SW_HIDE;\r\n\r\n            constexpr BOOL inherit_handles = TRUE;\r\n\r\n            // https://learn.microsoft.com/windows/win32/procthread/process-creation-flags\r\n            // \"The new process has a new console, instead of inheriting its parent's console (the default).\"\r\n            constexpr DWORD creation_flags = CREATE_NEW_CONSOLE;\r\n\r\n            const BOOL create_process_succeeded = CreateProcessW(module_filename.c_str(), command_line.data(), nullptr,\r\n                nullptr, inherit_handles, creation_flags, nullptr, nullptr, &startup_info, &process_information);\r\n            assert(create_process_succeeded);\r\n        }\r\n\r\n        // Wait for the child process to be ready before attaching to its console.\r\n        hello_semaphore.acquire();\r\n\r\n        {\r\n            // We want to do things like alter the output code page of our console, but we don't want\r\n            // to affect other tests which run concurrently. So, we want to detach this process from\r\n            // its current console, attach to the child process's console, and modify that one instead.\r\n\r\n            const BOOL free_console_succeeded = FreeConsole();\r\n            assert(free_console_succeeded);\r\n\r\n            const BOOL attach_console_succeeded = AttachConsole(process_information.dwProcessId);\r\n            assert(attach_console_succeeded);\r\n        }\r\n\r\n        all_tests(); // Run tests with the original console output codepage.\r\n\r\n        {\r\n            const BOOL set_console_output_cp_succeeded = SetConsoleOutputCP(CP_UTF8);\r\n            assert(set_console_output_cp_succeeded);\r\n        }\r\n\r\n        all_tests(); // Run tests with the console output codepage set to UTF-8.\r\n\r\n        // Tell the child process that we're done working with its console.\r\n        goodbye_semaphore.release();\r\n\r\n        {\r\n            const BOOL close_process_handle_succeeded = CloseHandle(process_information.hProcess);\r\n            assert(close_process_handle_succeeded);\r\n\r\n            const BOOL close_thread_handle_succeeded = CloseHandle(process_information.hThread);\r\n            assert(close_thread_handle_succeeded);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2136R3_invoke_r/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2136R3_invoke_r/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n#include <string>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nconstexpr int square(int n) {\r\n    return n * n;\r\n}\r\nconstexpr int square_noexcept(int n) noexcept {\r\n    return n * n;\r\n}\r\nconstexpr const char* cstring() noexcept;\r\n\r\nstruct Thing {\r\n    int n = 0;\r\n    constexpr int& moo() {\r\n        return n;\r\n    }\r\n};\r\n\r\nstruct RefQualified {\r\n    constexpr int operator()(int&&) && {\r\n        return 1;\r\n    }\r\n    constexpr int operator()(const int&) && {\r\n        return 2;\r\n    }\r\n    constexpr int operator()(int&&) & {\r\n        return 3;\r\n    }\r\n    constexpr int operator()(const int&) & {\r\n        return 4;\r\n    }\r\n};\r\n\r\nconstexpr bool test_invoke_r() {\r\n    auto v1 = invoke_r<long>(square, 3);\r\n    assert(v1 == 9L);\r\n    static_assert(is_same_v<decltype(v1), long>);\r\n\r\n    auto v2 = invoke_r<double>([]() -> int { return 5; });\r\n    assert(v2 == 5);\r\n    static_assert(is_same_v<decltype(v2), double>);\r\n    static_assert(is_void_v<decltype(invoke_r<void>(square, 1))>);\r\n\r\n    static_assert(!noexcept(invoke_r<int>(square, 3)));\r\n    static_assert(!noexcept(invoke(square, 3)));\r\n\r\n    constexpr bool has_noexcept_in_type =\r\n#ifdef __cpp_noexcept_function_type\r\n        true;\r\n#else\r\n        false;\r\n#endif\r\n    static_assert(noexcept(invoke(square_noexcept, 3)) == has_noexcept_in_type);\r\n    static_assert(noexcept(invoke_r<int>(square_noexcept, 3)) == has_noexcept_in_type);\r\n    static_assert(noexcept(invoke(cstring)) == has_noexcept_in_type);\r\n    static_assert(!noexcept(invoke_r<string>(cstring)));\r\n\r\n    Thing thing;\r\n    invoke_r<void>(&Thing::n, thing); // no nodiscard warning\r\n    static_assert(is_same_v<decltype(invoke(&Thing::moo, thing)), int&>);\r\n    static_assert(is_same_v<decltype(invoke_r<int>(&Thing::moo, thing)), int>);\r\n\r\n    auto lambda = [counter = 0]() mutable { return ++counter; };\r\n    assert(lambda() == 1);\r\n    assert(lambda() == 2);\r\n    assert(invoke_r<int>(lambda) == 3);\r\n    assert(invoke_r<int>(lambda) == 4);\r\n    assert(lambda() == 5);\r\n\r\n    int lvalue = 0;\r\n    assert(invoke_r<int>(RefQualified{}, 0) == 1);\r\n    assert(invoke_r<int>(RefQualified{}, lvalue) == 2);\r\n    RefQualified r;\r\n    assert(invoke_r<int>(r, 0) == 3);\r\n    assert(invoke_r<int>(r, lvalue) == 4);\r\n\r\n    return true;\r\n}\r\n\r\n// LWG-3655: The INVOKE operation and union types\r\nunion Union {\r\n    int x;\r\n};\r\nstatic_assert(is_invocable_v<int Union::*, Union>);\r\nstatic_assert(is_invocable_v<int Union::*, Union&>);\r\nstatic_assert(is_invocable_v<int Union::*, const Union>);\r\nstatic_assert(is_invocable_v<int Union::*, const Union&>);\r\n\r\nstatic_assert(is_invocable_v<void (Union::*)(), Union>);\r\nstatic_assert(is_invocable_v<void (Union::*)(), Union&>);\r\nstatic_assert(!is_invocable_v<void (Union::*)(), const Union>);\r\nstatic_assert(!is_invocable_v<void (Union::*)(), const Union&>);\r\n\r\nstatic_assert(is_invocable_v<void (Union::*)() const, Union>);\r\nstatic_assert(is_invocable_v<void (Union::*)() const, Union&>);\r\nstatic_assert(is_invocable_v<void (Union::*)() const, const Union>);\r\nstatic_assert(is_invocable_v<void (Union::*)() const, const Union&>);\r\n\r\nint main() {\r\n    test_invoke_r();\r\n    static_assert(test_invoke_r());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2162R2_std_visit_for_derived_classes_from_variant/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2162R2_std_visit_for_derived_classes_from_variant/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <utility>\r\n#include <variant>\r\n\r\nusing namespace std;\r\n\r\nstruct Disconnected {\r\n    int val;\r\n};\r\n\r\nstruct Connecting {\r\n    char val;\r\n};\r\n\r\nstruct Connected {\r\n    double val;\r\n};\r\n\r\nstruct State : variant<Disconnected, Connecting, Connected> {\r\n    using variant::variant;\r\n};\r\n\r\nvoid example1_from_p2162r2() {\r\n    State v1       = Disconnected{45};\r\n    const State v2 = Connecting{'d'};\r\n    visit([](auto x) { assert(x.val == 45); }, v1);\r\n    visit([](auto x) { assert(x.val == 'd'); }, v2);\r\n    visit([](auto x) { assert(x.val == 5.5); }, State{Connected{5.5}});\r\n    visit([](auto x) { assert(x.val == 45); }, move(v1));\r\n    visit([](auto x) { assert(x.val == 'd'); }, move(v2));\r\n}\r\n\r\nstruct Expr;\r\n\r\nstruct Neg {\r\n    shared_ptr<Expr> expr;\r\n};\r\n\r\nstruct Add {\r\n    shared_ptr<Expr> lhs;\r\n    shared_ptr<Expr> rhs;\r\n};\r\n\r\nstruct Mul {\r\n    shared_ptr<Expr> lhs;\r\n    shared_ptr<Expr> rhs;\r\n};\r\n\r\nstruct Expr : variant<int, Neg, Add, Mul> {\r\n    using variant::variant;\r\n};\r\n\r\nint eval(const Expr& expr) {\r\n    struct visitor {\r\n        int operator()(int i) const {\r\n            return i;\r\n        }\r\n        int operator()(const Neg& n) const {\r\n            return -eval(*n.expr);\r\n        }\r\n        int operator()(const Add& a) const {\r\n            return eval(*a.lhs) + eval(*a.rhs);\r\n        }\r\n        int operator()(const Mul& m) const {\r\n            return eval(*m.lhs) * eval(*m.rhs);\r\n        }\r\n    };\r\n    return visit(visitor{}, expr);\r\n}\r\n\r\nvoid example2_from_p2162r2() {\r\n    // (1) + (2*3)\r\n    const Expr e = Add{make_shared<Expr>(1), make_shared<Expr>(Mul{make_shared<Expr>(2), make_shared<Expr>(3)})};\r\n    assert(eval(e) == (1 + 2 * 3));\r\n}\r\n\r\nint main() {\r\n    example1_from_p2162r2();\r\n    example2_from_p2162r2();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2164R9_views_enumerate/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2164R9_views_enumerate/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewEnumerate = requires(Rng&& r) { views::enumerate(forward<Rng>(r)); };\r\n\r\nstruct ImmovableReference {\r\n    ImmovableReference(ImmovableReference&&) = delete;\r\n    operator int(); // not defined\r\n};\r\n\r\nstruct IteratorWithImmovableReference {\r\n    using value_type      = int;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    ImmovableReference operator*() const; // not defined\r\n    IteratorWithImmovableReference& operator++(); // not defined\r\n    void operator++(int); // not defined\r\n    bool operator==(default_sentinel_t) const; // not defined\r\n};\r\n\r\nstatic_assert(input_iterator<IteratorWithImmovableReference>);\r\n\r\nusing RangeWithImmovableReference = ranges::subrange<IteratorWithImmovableReference, default_sentinel_t>;\r\nstatic_assert(ranges::input_range<RangeWithImmovableReference>);\r\n\r\nstatic_assert(!CanViewEnumerate<RangeWithImmovableReference>);\r\n\r\ntemplate <ranges::input_range Rng, class Expected>\r\nconstexpr bool test_one(Rng&& rng, Expected&& expected) {\r\n    using ranges::enumerate_view, ranges::forward_range, ranges::bidirectional_range, ranges::random_access_range,\r\n        ranges::sized_range, ranges::common_range, ranges::iterator_t, ranges::sentinel_t, ranges::const_iterator_t,\r\n        ranges::const_sentinel_t, ranges::range_difference_t, ranges::range_rvalue_reference_t, ranges::cbegin,\r\n        ranges::cend, ranges::begin, ranges::end;\r\n\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n\r\n    using V = views::all_t<Rng>;\r\n    using R = enumerate_view<V>;\r\n\r\n    static_assert(ranges::view<R>);\r\n    static_assert(ranges::input_range<R>);\r\n    static_assert(forward_range<R> == forward_range<Rng>);\r\n    static_assert(bidirectional_range<R> == bidirectional_range<Rng>);\r\n    static_assert(random_access_range<R> == random_access_range<Rng>);\r\n    static_assert(!ranges::contiguous_range<R>);\r\n\r\n    // Validate default-initializability\r\n    static_assert(default_initializable<R> == default_initializable<V>);\r\n\r\n    // Validate borrowed_range\r\n    static_assert(ranges::borrowed_range<R> == ranges::borrowed_range<V>);\r\n\r\n    // Validate range closure object\r\n    // ... with lvalue argument\r\n    static_assert(CanViewEnumerate<Rng&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewEnumerate<Rng&>) {\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::enumerate(rng)), R>);\r\n        static_assert(noexcept(views::enumerate(rng)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | views::enumerate), R>);\r\n        static_assert(noexcept(rng | views::enumerate) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewEnumerate<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewEnumerate<const remove_reference_t<Rng>&>) {\r\n        using RC                   = enumerate_view<views::all_t<const remove_reference_t<Rng>&>>;\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::enumerate(as_const(rng))), RC>);\r\n        static_assert(noexcept(views::enumerate(as_const(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | views::enumerate), RC>);\r\n        static_assert(noexcept(as_const(rng) | views::enumerate) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(CanViewEnumerate<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (CanViewEnumerate<remove_reference_t<Rng>>) {\r\n        using RS                   = enumerate_view<views::all_t<remove_reference_t<Rng>>>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::enumerate(move(rng))), RS>);\r\n        static_assert(noexcept(views::enumerate(move(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | views::enumerate), RS>);\r\n        static_assert(noexcept(move(rng) | views::enumerate) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewEnumerate<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n    if constexpr (CanViewEnumerate<const remove_reference_t<Rng>>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::enumerate(move(as_const(rng)))), R>);\r\n        static_assert(noexcept(views::enumerate(move(as_const(rng)))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | views::enumerate), R>);\r\n        static_assert(noexcept(move(as_const(rng)) | views::enumerate) == is_noexcept);\r\n    }\r\n\r\n    // Validate deduction guide\r\n    same_as<R> auto r = enumerate_view{forward<Rng>(rng)};\r\n\r\n    // Validate enumerate_view::size\r\n    static_assert(CanMemberSize<R> == sized_range<V>);\r\n    if constexpr (CanMemberSize<R>) {\r\n        same_as<ranges::range_size_t<V>> auto s = r.size();\r\n        assert(_To_unsigned_like(s) == ranges::size(expected));\r\n        static_assert(noexcept(r.size()) == noexcept(ranges::size(rng))); // strengthened\r\n    }\r\n\r\n    // Validate enumerate_view::size (const)\r\n    static_assert(CanMemberSize<const R> == sized_range<const V>);\r\n    if constexpr (CanMemberSize<const R>) {\r\n        same_as<ranges::range_size_t<const V>> auto s = as_const(r).size();\r\n        assert(_To_unsigned_like(s) == ranges::size(expected));\r\n        static_assert(noexcept(as_const(r).size()) == noexcept(ranges::size(as_const(rng)))); // strengthened\r\n    }\r\n\r\n    const bool is_empty = ranges::empty(expected);\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    static_assert(CanMemberEmpty<R> == (forward_range<V> || sized_range<V>) );\r\n    static_assert(CanBool<R> == CanEmpty<R>);\r\n    if constexpr (CanMemberEmpty<R>) {\r\n        assert(r.empty() == is_empty);\r\n        assert(static_cast<bool>(r) == !is_empty);\r\n    }\r\n\r\n    // Validate view_interface::empty and operator bool (const)\r\n    static_assert(CanMemberEmpty<const R> == (forward_range<const V> || sized_range<const V>) );\r\n    static_assert(CanBool<const R> == CanEmpty<const R>);\r\n    if constexpr (CanMemberEmpty<const R>) {\r\n        assert(as_const(r).empty() == is_empty);\r\n        assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n    }\r\n\r\n    // Validate content\r\n    assert(ranges::equal(r, expected));\r\n    if (!forward_range<V>) { // intentionally not if constexpr\r\n        return true;\r\n    }\r\n\r\n    // Validate enumerate_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    {\r\n        const same_as<iterator_t<R>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(*i == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            auto r2                              = r;\r\n            const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate enumerate_view::begin (const)\r\n    static_assert(CanMemberBegin<const R> == ranges::range<const V>);\r\n    if constexpr (CanMemberBegin<const R>) {\r\n        const same_as<iterator_t<const R>> auto ci = as_const(r).begin();\r\n        if (!is_empty) {\r\n            assert(*ci == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            const auto cr2                              = r;\r\n            const same_as<iterator_t<const R>> auto ci2 = cr2.begin();\r\n            if (!is_empty) {\r\n                assert(*ci2 == *ci);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate enumerate_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    {\r\n        const same_as<sentinel_t<R>> auto s = r.end();\r\n        assert((r.begin() == s) == is_empty);\r\n\r\n        if constexpr (sentinel_for<sentinel_t<R>, iterator_t<const R>>) {\r\n            assert((as_const(r).begin() == s) == is_empty);\r\n        }\r\n\r\n        static_assert(common_range<R> == (forward_range<V> && common_range<V> && sized_range<V>) );\r\n        if constexpr (common_range<V> && sized_range<V> && bidirectional_range<V>) {\r\n            if (!is_empty) {\r\n                assert(*prev(s) == *prev(end(expected)));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*prev(r2.end()) == *prev(end(expected)));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate enumerate_view::end (const)\r\n    static_assert(CanMemberEnd<const R> == ranges::range<const V>);\r\n    if constexpr (CanMemberEnd<const R>) {\r\n        const same_as<sentinel_t<const R>> auto cs = as_const(r).end();\r\n        assert((as_const(r).begin() == cs) == is_empty);\r\n\r\n        if constexpr (sentinel_for<sentinel_t<const R>, iterator_t<R>>) {\r\n            assert((r.begin() == cs) == is_empty);\r\n        }\r\n\r\n        static_assert(\r\n            common_range<const R> == (forward_range<const V> && common_range<const V> && sized_range<const V>) );\r\n        if constexpr (common_range<const V> && sized_range<const V> && bidirectional_range<const V>) {\r\n            if (!is_empty) {\r\n                assert(*prev(cs) == *prev(end(expected)));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                const auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*prev(r2.end()) == *prev(end(expected)));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::cbegin\r\n    static_assert(CanMemberCBegin<R>);\r\n    static_assert(CanMemberCBegin<const R&> == ranges::range<const V>);\r\n    {\r\n        const same_as<const_iterator_t<R>> auto i = r.cbegin();\r\n        if (!is_empty) {\r\n            assert(*i == *cbegin(expected));\r\n        }\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2                                    = r;\r\n            const same_as<const_iterator_t<R>> auto i2 = r2.cbegin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n\r\n        if constexpr (CanCBegin<const R&>) {\r\n            const same_as<const_iterator_t<const R>> auto i3 = as_const(r).cbegin();\r\n            if (!is_empty) {\r\n                assert(*i3 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::cend\r\n    static_assert(CanMemberCEnd<R>);\r\n    static_assert(CanMemberCEnd<const R&> == ranges::range<const V>);\r\n    if (!is_empty) {\r\n        same_as<const_sentinel_t<R>> auto i = r.cend();\r\n        if constexpr (common_range<V> && sized_range<V> && bidirectional_range<V>) {\r\n            assert(*prev(i) == *prev(cend(expected)));\r\n        }\r\n\r\n        if constexpr (CanCEnd<const R&>) {\r\n            same_as<const_sentinel_t<const R>> auto i2 = as_const(r).cend();\r\n            if constexpr (common_range<const V> && sized_range<const V> && bidirectional_range<const V>) {\r\n                assert(*prev(i2) == *prev(cend(expected)));\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::data\r\n    static_assert(!CanData<R>);\r\n    static_assert(!CanData<const R>);\r\n\r\n    if (is_empty) {\r\n        return true;\r\n    }\r\n\r\n    // Validate view_interface::operator[]\r\n    static_assert(CanIndex<R> == random_access_range<V>);\r\n    if constexpr (CanIndex<R>) {\r\n        assert(r[0] == expected[0]);\r\n    }\r\n\r\n    // Validate view_interface::operator[] (const)\r\n    static_assert(CanIndex<const R> == random_access_range<const V>);\r\n    if constexpr (CanIndex<const R>) {\r\n        assert(as_const(r)[0] == expected[0]);\r\n    }\r\n\r\n    // Validate view_interface::front\r\n    static_assert(CanMemberFront<R> == forward_range<V>);\r\n    if constexpr (CanMemberFront<R>) {\r\n        assert(r.front() == *begin(expected));\r\n    }\r\n\r\n    // Validate view_interface::front (const)\r\n    static_assert(CanMemberFront<const R> == forward_range<const V>);\r\n    if constexpr (CanMemberFront<const R>) {\r\n        assert(as_const(r).front() == *begin(expected));\r\n    }\r\n\r\n    // Validate view_interface::back\r\n    static_assert(CanMemberBack<R> == (bidirectional_range<V> && common_range<V> && sized_range<V>) );\r\n    if constexpr (CanMemberBack<R>) {\r\n        assert(r.back() == *prev(end(expected)));\r\n    }\r\n\r\n    // Validate view_interface::back (const)\r\n    static_assert(\r\n        CanMemberBack<const R> == (bidirectional_range<const V> && common_range<const V> && sized_range<const V>) );\r\n    if constexpr (CanMemberBack<const R>) {\r\n        assert(as_const(r).back() == *prev(end(expected)));\r\n    }\r\n\r\n    { // Validate enumerate_view::iterator<not const>\r\n        // Check iterator_category\r\n        static_assert(same_as<typename iterator_t<R>::iterator_category, input_iterator_tag>);\r\n\r\n        if constexpr (forward_range<R>) {\r\n            [[maybe_unused]] const iterator_t<R> defaulted;\r\n        }\r\n\r\n        same_as<iterator_t<R>> auto i = r.begin();\r\n        assert(i.index() == 0);\r\n\r\n        { // Check comparisons\r\n            assert(i == i);\r\n            assert(!(i != i));\r\n            assert(!(i < i));\r\n            assert(i <= i);\r\n            assert(!(i > i));\r\n            assert(i >= i);\r\n            assert(i <=> i == strong_ordering::equal);\r\n\r\n            if constexpr (forward_range<R>) {\r\n                auto i2 = ranges::next(i, 1);\r\n                assert(!(i == i2));\r\n                assert(i != i2);\r\n                assert(i < i2);\r\n                assert(i <= i2);\r\n                assert(i2 > i);\r\n                assert(i2 >= i);\r\n                assert(i <=> i2 == strong_ordering::less);\r\n                assert(i2 <=> i == strong_ordering::greater);\r\n            }\r\n        }\r\n\r\n        if constexpr (forward_range<R>) {\r\n            assert(*i++ == expected[0]);\r\n        } else {\r\n            static_assert(is_void_v<decltype(i++)>);\r\n        }\r\n        assert(*++i == expected[2]);\r\n        assert(i.index() == 2);\r\n\r\n        if constexpr (bidirectional_range<R>) {\r\n            assert(*i-- == expected[2]);\r\n            assert(*--i == expected[0]);\r\n        }\r\n\r\n        if constexpr (random_access_range<R>) {\r\n            i += 2;\r\n            assert(*i == expected[2]);\r\n\r\n            i -= 2;\r\n            assert(*i == expected[0]);\r\n\r\n            assert(i[2] == expected[2]);\r\n\r\n            const auto i2 = i + 2;\r\n            assert(*i2 == expected[2]);\r\n\r\n            const auto i3 = 2 + i;\r\n            assert(*i3 == expected[2]);\r\n\r\n            const auto i4 = i3 - 2;\r\n            assert(*i4 == expected[0]);\r\n\r\n            const same_as<range_difference_t<V>> auto diff1 = i2 - i;\r\n            assert(diff1 == 2);\r\n\r\n            const same_as<range_difference_t<V>> auto diff2 = i - i2;\r\n            assert(diff2 == -2);\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<sentinel_t<V>, iterator_t<V>>) {\r\n            const auto i2   = r.begin();\r\n            const auto sen  = r.end();\r\n            const auto size = ranges::ssize(expected);\r\n\r\n            const same_as<range_difference_t<V>> auto diff3 = i2 - sen;\r\n            assert(diff3 == -size);\r\n\r\n            const same_as<range_difference_t<V>> auto diff4 = sen - i2;\r\n            assert(diff4 == size);\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<sentinel_t<const V>, iterator_t<V>>) {\r\n            const auto i2   = r.begin();\r\n            const auto csen = as_const(r).end();\r\n            const auto size = ranges::ssize(expected);\r\n\r\n            const same_as<range_difference_t<V>> auto diff3 = i2 - csen;\r\n            assert(diff3 == -size);\r\n\r\n            const same_as<range_difference_t<V>> auto diff4 = csen - i2;\r\n            assert(diff4 == size);\r\n        }\r\n\r\n        using IterMoveResult = tuple<range_difference_t<const Rng>, range_rvalue_reference_t<const Rng>>;\r\n        [[maybe_unused]] same_as<IterMoveResult> decltype(auto) moved = ranges::iter_move(i);\r\n        static_assert(noexcept(ranges::iter_move(i))\r\n                      == (noexcept(ranges::iter_move(i.base()))\r\n                          && is_nothrow_move_constructible_v<range_rvalue_reference_t<const Rng>>) );\r\n\r\n        [[maybe_unused]] same_as<const iterator_t<V>&> decltype(auto) i_base = as_const(i).base();\r\n        static_assert(noexcept(as_const(i).base()));\r\n\r\n        [[maybe_unused]] same_as<iterator_t<V>> decltype(auto) i_base2 = move(i).base();\r\n        static_assert(noexcept(move(i).base()) == is_nothrow_move_constructible_v<iterator_t<Rng>>); // strengthened\r\n    }\r\n\r\n    if constexpr (CanMemberBegin<const R>) { // Validate enumerate_view::iterator<const>\r\n        // Check iterator_category\r\n        static_assert(same_as<typename iterator_t<const R>::iterator_category, input_iterator_tag>);\r\n\r\n        constexpr bool constructible_from_nonconst =\r\n            convertible_to<iterator_t<V>, iterator_t<const V>> && convertible_to<sentinel_t<V>, sentinel_t<const V>>;\r\n        if constexpr (forward_range<const R>) {\r\n            [[maybe_unused]] const iterator_t<const R> const_defaulted;\r\n        }\r\n\r\n        same_as<iterator_t<R>> auto i        = r.begin();\r\n        same_as<iterator_t<const R>> auto ci = as_const(r).begin();\r\n        assert(ci.index() == 0);\r\n\r\n        { // Check comparisons\r\n            assert(ci == ci);\r\n            assert(!(ci != ci));\r\n            assert(!(ci < ci));\r\n            assert(ci <= ci);\r\n            assert(!(ci > ci));\r\n            assert(ci >= ci);\r\n            assert(ci <=> ci == strong_ordering::equal);\r\n\r\n            if constexpr (forward_range<R>) {\r\n                auto ci2 = ranges::next(ci, 1);\r\n                assert(!(ci == ci2));\r\n                assert(ci != ci2);\r\n                assert(ci < ci2);\r\n                assert(ci <= ci2);\r\n                assert(ci2 > ci);\r\n                assert(ci2 >= ci);\r\n                assert(ci <=> ci2 == strong_ordering::less);\r\n                assert(ci2 <=> ci == strong_ordering::greater);\r\n            }\r\n\r\n            if constexpr (constructible_from_nonconst) { // Check cross comparisons\r\n                assert(ci == i);\r\n                assert(!(ci < i));\r\n                assert(ci <= i);\r\n                assert(!(ci > i));\r\n                assert(ci >= i);\r\n                assert(ci <=> i == strong_ordering::equal);\r\n\r\n                if constexpr (forward_range<const R>) {\r\n                    auto i2 = ranges::next(i, 1);\r\n                    assert(ci != i2);\r\n                    assert(ci < i2);\r\n                    assert(ci <= i2);\r\n                    assert(i2 > ci);\r\n                    assert(i2 >= ci);\r\n                    assert(ci <=> i2 == strong_ordering::less);\r\n                    assert(i2 <=> ci == strong_ordering::greater);\r\n                }\r\n            }\r\n        }\r\n\r\n        if constexpr (forward_range<const R>) {\r\n            assert(*ci++ == expected[0]);\r\n        } else {\r\n            static_assert(is_void_v<decltype(ci++)>);\r\n        }\r\n        assert(*++ci == expected[2]);\r\n        assert(ci.index() == 2);\r\n\r\n        if constexpr (bidirectional_range<const R>) {\r\n            assert(*ci-- == expected[2]);\r\n            assert(*--ci == expected[0]);\r\n        }\r\n\r\n        if constexpr (random_access_range<const R>) {\r\n            ci += 2;\r\n            assert(*ci == expected[2]);\r\n\r\n            ci -= 2;\r\n            assert(*ci == expected[0]);\r\n\r\n            assert(ci[2] == expected[2]);\r\n\r\n            const auto ci2 = ci + 2;\r\n            assert(*ci2 == expected[2]);\r\n\r\n            const auto ci3 = 2 + ci;\r\n            assert(*ci3 == expected[2]);\r\n\r\n            const auto ci4 = ci3 - 2;\r\n            assert(*ci4 == expected[0]);\r\n\r\n            const same_as<range_difference_t<V>> auto diff1 = ci2 - ci;\r\n            assert(diff1 == 2);\r\n\r\n            const same_as<range_difference_t<V>> auto diff2 = ci - ci2;\r\n            assert(diff2 == -2);\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<sentinel_t<V>, iterator_t<const V>>) {\r\n            const auto ci2  = as_const(r).begin();\r\n            const auto sen  = r.end();\r\n            const auto size = ranges::ssize(expected);\r\n\r\n            const same_as<range_difference_t<const V>> auto diff3 = ci2 - sen;\r\n            assert(diff3 == -size);\r\n\r\n            const same_as<range_difference_t<const V>> auto diff4 = sen - ci2;\r\n            assert(diff4 == size);\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<sentinel_t<const V>, iterator_t<const V>>) {\r\n            const auto ci2  = as_const(r).begin();\r\n            const auto csen = as_const(r).end();\r\n            const auto size = ranges::ssize(expected);\r\n\r\n            const same_as<range_difference_t<const V>> auto diff3 = ci2 - csen;\r\n            assert(diff3 == -size);\r\n\r\n            const same_as<range_difference_t<const V>> auto diff4 = csen - ci2;\r\n            assert(diff4 == size);\r\n        }\r\n\r\n        using IterMoveResult = tuple<range_difference_t<const Rng>, range_rvalue_reference_t<const Rng>>;\r\n        [[maybe_unused]] same_as<IterMoveResult> decltype(auto) moved = ranges::iter_move(ci);\r\n        static_assert(noexcept(ranges::iter_move(ci))\r\n                      == (noexcept(ranges::iter_move(ci.base()))\r\n                          && is_nothrow_move_constructible_v<range_rvalue_reference_t<const Rng>>) );\r\n\r\n        [[maybe_unused]] same_as<const iterator_t<const V>&> decltype(auto) ci_base = as_const(ci).base();\r\n        static_assert(noexcept(as_const(ci).base()));\r\n\r\n        [[maybe_unused]] same_as<iterator_t<const V>> decltype(auto) ci_base2 = move(ci).base();\r\n        static_assert(noexcept(move(ci).base()) == is_nothrow_move_constructible_v<iterator_t<Rng>>);\r\n    }\r\n\r\n    // Validate enumerate_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V>) {\r\n        same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>); // strengthened\r\n        assert(*b1.begin() == get<1>(*begin(expected)));\r\n    }\r\n\r\n    // Validate enumerate_view::base() &&\r\n    [[maybe_unused]] same_as<V> auto b2 = move(r).base();\r\n    static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>); // strengthened\r\n    assert(*b2.begin() == get<1>(*begin(expected)));\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr int some_ints[]                          = {1, 22, 333, 4444, 55555, 666666};\r\nstatic constexpr tuple<ptrdiff_t, int> enumerate_result[] = {\r\n    {0, 1}, {1, 22}, {2, 333}, {3, 4444}, {4, 55555}, {5, 666666}};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        R r{some_ints};\r\n        test_one(r, enumerate_result);\r\n    }\r\n};\r\n\r\ntemplate <test::CanDifference Difference>\r\nusing test_input_range = test::range<input_iterator_tag, const int, test::Sized::yes, Difference, test::Common::yes,\r\n    test::CanCompare::yes, test::ProxyRef::yes>;\r\n\r\ntemplate <class Category, test::Common IsCommon, test::Sized IsSized>\r\nusing test_range =\r\n    test::range<Category, const int, IsSized, test::CanDifference{derived_from<Category, random_access_iterator_tag>},\r\n        IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n        test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nconstexpr void instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_in<instantiator, const int>();\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    using test::Common, test::Sized;\r\n\r\n    // When the base range is an input range, the view is sensitive to differencing\r\n    instantiator::call<test_input_range<test::CanDifference::yes>>();\r\n    instantiator::call<test_input_range<test::CanDifference::no>>();\r\n\r\n    // The view is sensitive to category, commonality, and size, but oblivious to proxyness and differencing\r\n    instantiator::call<test_range<input_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes, Sized::no>>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare::yes, test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>},\r\n    test::CanView::yes, test::Copyability::move_only>;\r\n\r\nint main() {\r\n    { // Validate views\r\n        // ... copyable\r\n        constexpr span<const int> s{some_ints};\r\n        static_assert(test_one(s, enumerate_result));\r\n        test_one(s, enumerate_result);\r\n    }\r\n\r\n    { // ... move-only\r\n        test_one(move_only_view<input_iterator_tag, test::Common::no>{some_ints}, enumerate_result);\r\n        test_one(move_only_view<input_iterator_tag, test::Common::yes>{some_ints}, enumerate_result);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, enumerate_result);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, enumerate_result);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, enumerate_result);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, enumerate_result);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, enumerate_result);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, enumerate_result);\r\n    }\r\n\r\n    { // Validate non-views\r\n        static_assert(test_one(some_ints, enumerate_result));\r\n        test_one(some_ints, enumerate_result);\r\n\r\n        auto vec = some_ints | ranges::to<vector>();\r\n        test_one(vec, enumerate_result);\r\n\r\n        auto lst = some_ints | ranges::to<forward_list>();\r\n        test_one(lst, enumerate_result);\r\n    }\r\n\r\n    { // Validate empty range\r\n        static_assert(test_one(span<const int>{}, span<tuple<ptrdiff_t, int>>{}));\r\n        test_one(span<const int>{}, span<tuple<ptrdiff_t, int>>{});\r\n    }\r\n\r\n    static_assert((instantiation_test(), true));\r\n    instantiation_test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2165R4_tuple_like_common_reference/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2165R4_tuple_like_common_reference/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <ranges>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\nusing ranges::subrange;\r\n\r\ntemplate <class T, class U>\r\nconcept CanCommonReference = requires { typename common_reference<T, U>::type; };\r\n\r\ntemplate <class T, class U, class Expected>\r\n    requires CanCommonReference<T, U>\r\nconstexpr bool test_common_reference =\r\n    same_as<common_reference_t<T, U>, Expected> && same_as<common_reference_t<U, T>, Expected>;\r\n\r\nstruct Sentinel {\r\n    bool operator==(const auto&) const; // not defined\r\n    operator unreachable_sentinel_t() const; // not defined\r\n};\r\n\r\ntemplate <>\r\nstruct std::common_type<Sentinel, unreachable_sentinel_t> {\r\n    using type = unreachable_sentinel_t;\r\n};\r\n\r\ntemplate <>\r\nstruct std::common_type<unreachable_sentinel_t, Sentinel> {\r\n    using type = unreachable_sentinel_t;\r\n};\r\n\r\nstatic_assert(test_common_reference<Sentinel, unreachable_sentinel_t, unreachable_sentinel_t>);\r\n\r\n// Test common_reference<tuple, tuple>\r\nstatic_assert(test_common_reference<tuple<>, tuple<>, tuple<>>);\r\nstatic_assert(test_common_reference<tuple<char&&>, tuple<const int&>, tuple<int>>);\r\nstatic_assert(test_common_reference<tuple<int&>, tuple<const int&>, tuple<const int&>>);\r\nstatic_assert(test_common_reference<tuple<int&>, tuple<int&&>, tuple<const int&>>);\r\nstatic_assert(test_common_reference<tuple<short, int, long>, tuple<long, int, short>, tuple<long, int, long>>);\r\n\r\n// Test common_reference<cvref tuple, cvref tuple>\r\nstatic_assert(test_common_reference<tuple<>&, tuple<>&&, const tuple<>&>);\r\nstatic_assert(\r\n    test_common_reference<const tuple<int, long>&, volatile tuple<int, long>&, const volatile tuple<int, long>&>);\r\nstatic_assert(test_common_reference<tuple<int&, const int&&, volatile int&>&,\r\n    const tuple<const int&, const int, const int&>, tuple<const int&, int, const volatile int&>>);\r\n\r\n// Test common_reference<tuple, tuple-like>, tuple-like is pair\r\nstatic_assert(test_common_reference<tuple<int, int>, pair<int, int>, tuple<int, int>>);\r\nstatic_assert(test_common_reference<tuple<int, long>, pair<short, long long>, tuple<int, long long>>);\r\nstatic_assert(\r\n    test_common_reference<tuple<int&, long&&>, pair<const int&, const long&&>, tuple<const int&, const long&&>>);\r\nstatic_assert(test_common_reference<tuple<short&, const volatile long&&>, pair<volatile int, long>, tuple<int, long>>);\r\n\r\n// Test common_reference<cvref tuple, cvref tuple-like>, tuple-like is pair\r\nstatic_assert(test_common_reference<tuple<int, int>&, pair<int, int>&, tuple<int&, int&>>);\r\nstatic_assert(test_common_reference<const tuple<int, int>&, const pair<int, int>&, tuple<const int&, const int&>>);\r\nstatic_assert(\r\n    test_common_reference<tuple<int&, long&&>&, const pair<const int&, const long&&>&, tuple<const int&, const long&>>);\r\nstatic_assert(test_common_reference<const tuple<short&, const volatile long&&>, const pair<volatile int, long>&,\r\n    tuple<int, long>>);\r\n\r\n// Test common_reference<tuple, tuple-like>, tuple-like is array\r\nstatic_assert(test_common_reference<tuple<>, array<int, 0>, tuple<>>);\r\nstatic_assert(test_common_reference<tuple<int>, array<int, 1>, tuple<int>>);\r\nstatic_assert(test_common_reference<tuple<int, long>, array<int, 2>, tuple<int, long>>);\r\nstatic_assert(test_common_reference<tuple<short, int&&, const long>, array<int, 3>, tuple<int, int, long>>);\r\nstatic_assert(test_common_reference<tuple<short&, int&&, const volatile long>, array<int, 3>, tuple<int, int, long>>);\r\n\r\n// Test common_reference<cvref tuple, cvref tuple-like>, tuple-like is array\r\nstatic_assert(test_common_reference<const tuple<>&, array<int, 0>, tuple<>>);\r\nstatic_assert(test_common_reference<tuple<int>&, array<int, 1>&, tuple<int&>>);\r\nstatic_assert(test_common_reference<const tuple<int, long>&&, array<int, 2>&, tuple<const int&, long>>);\r\n\r\n// Test common_reference<tuple, tuple-like>, tuple-like is ranges::subrange\r\nstatic_assert(test_common_reference<tuple<int*, int*>, subrange<int*, int*>, tuple<int*, int*>>);\r\nstatic_assert(\r\n    test_common_reference<tuple<int*, const int*>, subrange<const int*, int*>, tuple<const int*, const int*>>);\r\nstatic_assert(test_common_reference<tuple<int*, Sentinel>, subrange<int*, unreachable_sentinel_t>,\r\n    tuple<int*, unreachable_sentinel_t>>);\r\nstatic_assert(test_common_reference<tuple<const volatile int*, Sentinel>, subrange<int*, unreachable_sentinel_t>,\r\n    tuple<const volatile int*, unreachable_sentinel_t>>);\r\n\r\n// Test common_reference<cvref tuple, cvref tuple-like>, tuple-like is ranges::subrange\r\nstatic_assert(test_common_reference<const tuple<int*, int*>&&, const subrange<int*, int*>, tuple<int*, int*>>);\r\nstatic_assert(\r\n    test_common_reference<const tuple<int*, const int*>&, subrange<const int*, int*>, tuple<const int*, const int*>>);\r\n\r\n// Test invalid common_references\r\nstatic_assert(!CanCommonReference<tuple<int>, array<int, 2>>);\r\nstatic_assert(!CanCommonReference<tuple<int>, subrange<int*, int*>>);\r\nstatic_assert(!CanCommonReference<tuple<int>, pair<int, int>>);\r\n"
  },
  {
    "path": "tests/std/tests/P2165R4_tuple_like_common_type/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2165R4_tuple_like_common_type/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <ranges>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\nusing ranges::subrange;\r\n\r\ntemplate <class T, class U>\r\nconcept CanCommonType = requires { typename common_type<T, U>::type; };\r\n\r\ntemplate <class T, class U, class Expected>\r\n    requires CanCommonType<T, U>\r\nconstexpr bool test_common_type = same_as<common_type_t<T, U>, Expected> && same_as<common_type_t<U, T>, Expected>;\r\n\r\nstruct Sentinel {\r\n    bool operator==(const auto&) const; // not defined\r\n    operator unreachable_sentinel_t() const; // not defined\r\n};\r\n\r\ntemplate <>\r\nstruct std::common_type<Sentinel, unreachable_sentinel_t> {\r\n    using type = unreachable_sentinel_t;\r\n};\r\n\r\ntemplate <>\r\nstruct std::common_type<unreachable_sentinel_t, Sentinel> {\r\n    using type = unreachable_sentinel_t;\r\n};\r\n\r\nstatic_assert(test_common_type<Sentinel, unreachable_sentinel_t, unreachable_sentinel_t>);\r\n\r\n// Test common_type<tuple, tuple>\r\nstatic_assert(test_common_type<tuple<>, tuple<>, tuple<>>);\r\nstatic_assert(test_common_type<tuple<char>, tuple<int>, tuple<int>>);\r\nstatic_assert(test_common_type<tuple<int&>, tuple<const int&>, tuple<int>>);\r\nstatic_assert(test_common_type<tuple<int&>, tuple<int&&>, tuple<int>>);\r\nstatic_assert(test_common_type<tuple<short, long, long>, tuple<long, int, short>, tuple<long, long, long>>);\r\n\r\n// Test common_reference<cvref tuple, cvref tuple>\r\nstatic_assert(test_common_type<const tuple<>&, tuple<>&&, tuple<>>);\r\nstatic_assert(test_common_type<tuple<char>&, const tuple<int>&&, tuple<int>>);\r\nstatic_assert(test_common_type<tuple<int&>&, tuple<const int&>, tuple<int>>);\r\nstatic_assert(test_common_type<volatile tuple<int&>&, tuple<int&&>, tuple<int>>);\r\n\r\n// Test common_type<tuple, tuple-like>, tuple-like is pair\r\nstatic_assert(test_common_type<tuple<int, int>, pair<int, int>, tuple<int, int>>);\r\nstatic_assert(test_common_type<tuple<int, long>, pair<short, long long>, tuple<int, long long>>);\r\nstatic_assert(test_common_type<tuple<int&, long&&>, pair<const int&, const long&&>, tuple<int, long>>);\r\nstatic_assert(test_common_type<tuple<short&, const volatile long&&>, pair<volatile int, long>, tuple<int, long>>);\r\n\r\n// Test common_type<cvref tuple, cvref tuple-like>, tuple-like is pair\r\nstatic_assert(test_common_type<const tuple<int, int>&&, volatile pair<int, int>&, tuple<int, int>>);\r\nstatic_assert(test_common_type<volatile tuple<int, long>&&, const pair<short, long long>&&, tuple<int, long long>>);\r\n\r\n// Test common_type<tuple, tuple-like>, tuple-like is array\r\nstatic_assert(test_common_type<tuple<>, array<int, 0>, tuple<>>);\r\nstatic_assert(test_common_type<tuple<int>, array<int, 1>, tuple<int>>);\r\nstatic_assert(test_common_type<tuple<int, long>, array<int, 2>, tuple<int, long>>);\r\nstatic_assert(test_common_type<tuple<short, int, long>, array<int, 3>, tuple<int, int, long>>);\r\nstatic_assert(test_common_type<tuple<short&, int&&, const volatile long>, array<int, 3>, tuple<int, int, long>>);\r\n\r\n// Test common_type<cvref tuple, cvref tuple-like>, tuple-like is array\r\nstatic_assert(test_common_type<const tuple<>&&, volatile array<int, 0>&, tuple<>>);\r\nstatic_assert(test_common_type<const tuple<int>&, volatile array<int, 1>&&, tuple<int>>);\r\n\r\n// Test common_type<tuple, tuple-like>, tuple-like is ranges::subrange\r\nstatic_assert(test_common_type<tuple<int*, int*>, subrange<int*, int*>, tuple<int*, int*>>);\r\nstatic_assert(test_common_type<tuple<int*, const int*>, subrange<const int*, int*>, tuple<const int*, const int*>>);\r\nstatic_assert(test_common_type<tuple<int*, Sentinel>, subrange<int*, unreachable_sentinel_t>,\r\n    tuple<int*, unreachable_sentinel_t>>);\r\nstatic_assert(test_common_type<tuple<const volatile int*, Sentinel>, subrange<int*, unreachable_sentinel_t>,\r\n    tuple<const volatile int*, unreachable_sentinel_t>>);\r\n\r\n// Test common_type<cvref tuple, cvref tuple-like>, tuple-like is ranges::subrange\r\nstatic_assert(test_common_type<const tuple<int*, int*>&, volatile subrange<int*, int*>&&, tuple<int*, int*>>);\r\nstatic_assert(test_common_type<volatile tuple<int*, Sentinel>&, const subrange<int*, unreachable_sentinel_t>&&,\r\n    tuple<int*, unreachable_sentinel_t>>);\r\n\r\n// Test invalid common_types\r\nstatic_assert(!CanCommonType<tuple<int>, array<int, 2>>);\r\nstatic_assert(!CanCommonType<tuple<int>, subrange<int*, int*>>);\r\nstatic_assert(!CanCommonType<tuple<int>, pair<int, int>>);\r\n"
  },
  {
    "path": "tests/std/tests/P2165R4_tuple_like_operations/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2165R4_tuple_like_operations/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <functional>\r\n#include <memory>\r\n#include <ranges>\r\n#include <string>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\nusing ranges::subrange;\r\n\r\nnamespace test_apply {\r\n    struct TakeAnythingFn {\r\n        void operator()(auto&&...) const noexcept; // not defined\r\n    };\r\n\r\n    struct StrSentinel {\r\n        constexpr bool operator==(const char*) const; // not defined\r\n    };\r\n\r\n    template <class T>\r\n    concept CanApply = requires(T tuple_like) { apply(TakeAnythingFn{}, tuple_like); };\r\n\r\n    static_assert(CanApply<tuple<>>);\r\n    static_assert(CanApply<tuple<char, wchar_t>>);\r\n    static_assert(CanApply<tuple<char, signed char, unsigned char>>);\r\n    static_assert(CanApply<pair<int, unsigned int>>);\r\n    static_assert(CanApply<array<int, 0>>);\r\n    static_assert(CanApply<array<short, 1>>);\r\n    static_assert(CanApply<array<long, 2>>);\r\n    static_assert(CanApply<array<long long, 3>>);\r\n    static_assert(CanApply<subrange<wchar_t*, wchar_t*>>);\r\n    static_assert(CanApply<subrange<char*, StrSentinel>>);\r\n    static_assert(!CanApply<void>);\r\n    static_assert(!CanApply<int>);\r\n    static_assert(!CanApply<StrSentinel>);\r\n    static_assert(!CanApply<ranges::copy_result<int*, int*>>);\r\n\r\n    static constexpr int some_ints[] = {1, 2, 3};\r\n\r\n    constexpr bool test() {\r\n        { // Test apply with empty tuple-like types\r\n            true_type func;\r\n            assert(apply(func, tuple{}));\r\n            assert(apply(func, array<int, 0>{}));\r\n        }\r\n\r\n        { // Test apply with one-sized tuple-like types\r\n            identity func;\r\n            assert(apply(func, tuple{7}) == 7);\r\n            assert(apply(func, array{7}) == 7);\r\n        }\r\n\r\n        { // Test apply with pair-like types\r\n            minus func;\r\n            assert(apply(func, tuple{1, 1}) == 0);\r\n            assert(apply(func, pair{3, 3}) == 0);\r\n            assert(apply(func, array{5, 5}) == 0);\r\n\r\n            constexpr subrange rng = some_ints;\r\n            assert(apply(func, rng) == -3);\r\n        }\r\n\r\n        { // Test apply with big tuple-like types\r\n            auto func = [](auto&&... vals) { return (vals + ...); };\r\n            assert(apply(func, tuple{1, 2, 3}) == 6);\r\n            assert(apply(func, array{4, 5, 6}) == 15);\r\n        }\r\n\r\n        return true;\r\n    }\r\n} // namespace test_apply\r\n\r\nnamespace test_make_from_tuple {\r\n    template <class T, class Tuple>\r\n    concept CanMakeFromTuple = requires(Tuple tuple_like) {\r\n        { make_from_tuple<T>(tuple_like) } -> same_as<T>;\r\n    };\r\n\r\n    static_assert(CanMakeFromTuple<string, tuple<>>);\r\n    static_assert(CanMakeFromTuple<string, tuple<size_t, char>>);\r\n    static_assert(CanMakeFromTuple<wstring, tuple<size_t, wchar_t, allocator<wchar_t>>>);\r\n    static_assert(CanMakeFromTuple<tuple<int, unsigned int>, pair<int, unsigned int>>);\r\n    static_assert(CanMakeFromTuple<string, array<int, 0>>);\r\n    static_assert(CanMakeFromTuple<vector<int>, array<long, 2>>);\r\n    static_assert(CanMakeFromTuple<vector<wchar_t>, subrange<wchar_t*, wchar_t*>>);\r\n    static_assert(CanMakeFromTuple<vector<int>, subrange<int*, int*>>);\r\n    static_assert(!CanMakeFromTuple<int, void>);\r\n    static_assert(!CanMakeFromTuple<long, int>);\r\n    static_assert(!CanMakeFromTuple<void*, int*>);\r\n    static_assert(!CanMakeFromTuple<ranges::copy_result<int*, int*>, int*>);\r\n\r\n    constexpr bool test() {\r\n        { // Test make_from_tuple with empty tuple-like types\r\n            struct S {\r\n                constexpr bool operator==(const S&) const = default;\r\n            };\r\n\r\n            assert(make_from_tuple<S>(tuple{}) == S{});\r\n            assert(make_from_tuple<S>(array<int, 0>{}) == S{});\r\n        }\r\n\r\n        { // Test make_from_tuple with one-sized tuple-like types\r\n            assert(make_from_tuple<int>(tuple{7}) == 7);\r\n            assert(make_from_tuple<int>(array{7}) == 7);\r\n        }\r\n\r\n        { // Test make_from_tuple with pair-like types\r\n            struct S {\r\n                constexpr S(int* x_, int* y_) : x{x_}, y{y_} {}\r\n                constexpr bool operator==(const S&) const = default;\r\n\r\n                int* x;\r\n                int* y;\r\n            };\r\n\r\n            int a = 0;\r\n            int b = 1;\r\n            S expected_val{&a, &b};\r\n\r\n            assert(make_from_tuple<S>(tuple{&a, &b}) == expected_val);\r\n            assert(make_from_tuple<S>(pair{&a, &b}) == expected_val);\r\n            assert(make_from_tuple<S>(array{&a, &b}) == expected_val);\r\n            assert(make_from_tuple<S>(subrange{&a, &a + 1}) == (S{&a, &a + 1}));\r\n        }\r\n\r\n        { // Test make_from_tuple with big tuple-like types\r\n            struct NoIncrement {};\r\n            struct S {\r\n                constexpr S(NoIncrement, int x_, int y_, int z_) : x{x_}, y{y_}, z{z_} {}\r\n                constexpr S(int x_, int y_, int z_) : x{x_ + 1}, y{y_ + 1}, z{z_ + 1} {}\r\n                constexpr bool operator==(const S&) const = default;\r\n\r\n                int x;\r\n                int y;\r\n                int z;\r\n            };\r\n\r\n            S expected_val{NoIncrement{}, 2, 3, 4};\r\n            assert(make_from_tuple<S>(tuple{1, 2, 3}) == expected_val);\r\n            assert(make_from_tuple<S>(array{1, 2, 3}) == expected_val);\r\n        }\r\n\r\n        return true;\r\n    }\r\n} // namespace test_make_from_tuple\r\n\r\nnamespace test_tuple_cat {\r\n    template <class... Tuples>\r\n    concept CanTupleCat = requires(Tuples... tpls) { tuple_cat(tpls...); };\r\n\r\n    template <class Expected, class... Tuples>\r\n    concept CheckTupleCat = CanTupleCat<Tuples...> && same_as<decltype(tuple_cat(declval<Tuples>()...)), Expected>;\r\n\r\n    static_assert(CheckTupleCat<tuple<>, tuple<>, array<int, 0>>);\r\n    static_assert(CheckTupleCat<tuple<size_t, char, size_t, wchar_t>, tuple<size_t, char>, pair<size_t, wchar_t>>);\r\n    static_assert(CheckTupleCat<tuple<int*, int*>, array<int, 0>, subrange<int*, int*>>);\r\n    static_assert(CheckTupleCat<tuple<long, long, long, long>, array<long, 2>, pair<long, long>>);\r\n    static_assert(CheckTupleCat<tuple<int, wchar_t*, wchar_t*>, array<int, 1>, subrange<wchar_t*, wchar_t*>>);\r\n    static_assert(!CanTupleCat<void>);\r\n#ifndef __EDG__ // TRANSITION, VSO-1900281\r\n    static_assert(!CanTupleCat<int>);\r\n    static_assert(!CanTupleCat<int, tuple<int>>);\r\n    static_assert(!CanTupleCat<int, array<int, 1>>);\r\n    static_assert(!CanTupleCat<tuple<>, tuple<int>, int>);\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    constexpr bool test() {\r\n        // Test tuple_cat with empty tuple-like types\r\n        assert(tuple_cat(tuple{}, array<int, 0>{}) == tuple{});\r\n\r\n        // Test tuple_cat with one-sized tuple-like types\r\n        assert((tuple_cat(tuple{7}, array{8}) == tuple{7, 8}));\r\n\r\n        { // Test tuple_cat with pair-like types\r\n            int a = 0;\r\n            assert((tuple_cat(tuple{1, 2}, array{3, 4}, pair{5, 6}, subrange{&a, &a + 1})\r\n                    == tuple{1, 2, 3, 4, 5, 6, &a, &a + 1}));\r\n        }\r\n\r\n        // Test tuple_cat with big tuple-like types\r\n        assert((tuple_cat(tuple{1, 2, 3}, array{4, 5, 6}) == tuple{1, 2, 3, 4, 5, 6}));\r\n\r\n        return true;\r\n    }\r\n} // namespace test_tuple_cat\r\n\r\nstatic_assert(test_apply::test());\r\nstatic_assert(test_make_from_tuple::test());\r\nstatic_assert(test_tuple_cat::test());\r\n"
  },
  {
    "path": "tests/std/tests/P2165R4_tuple_like_pair/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2165R4_tuple_like_pair/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nstruct TmpInt {\r\n    constexpr TmpInt() : TmpInt(0) {}\r\n    constexpr TmpInt(int v) : val{v} {}\r\n\r\n    constexpr TmpInt(const TmpInt&) = default;\r\n    constexpr TmpInt(TmpInt&& other) : val{exchange(other.val, -1)} {}\r\n\r\n    constexpr TmpInt& operator=(const TmpInt&) = default;\r\n    constexpr TmpInt& operator=(TmpInt&& other) {\r\n        if (this != &other) {\r\n            val = exchange(other.val, -1);\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    int val;\r\n    constexpr bool operator==(const TmpInt&) const = default;\r\n};\r\n\r\ntemplate <template <class> class PairLike>\r\nconstexpr bool test_pair_like_constructor() {\r\n    // Test pair(pair-like) constructor with PairLike<int>&\r\n    static_assert(constructible_from<pair<int, int>, PairLike<int>&>);\r\n    static_assert(constructible_from<pair<int&, int&>, PairLike<int>&>);\r\n    static_assert(constructible_from<pair<const int&, const int&>, PairLike<int>&>);\r\n    static_assert(!constructible_from<pair<int&&, int&&>, PairLike<int>&>);\r\n    static_assert(!constructible_from<pair<const int&&, const int&&>, PairLike<int>&>);\r\n\r\n    // Test pair(pair-like) constructor with const PairLike<int>&\r\n    static_assert(constructible_from<pair<int, int>, const PairLike<int>&>);\r\n    static_assert(!constructible_from<pair<int&, int&>, const PairLike<int>&>);\r\n    static_assert(constructible_from<pair<const int&, const int&>, const PairLike<int>&>);\r\n    static_assert(!constructible_from<pair<int&&, int&&>, const PairLike<int>&>);\r\n    static_assert(!constructible_from<pair<const int&&, const int&&>, const PairLike<int>&>);\r\n\r\n    // Test pair(pair-like) constructor with PairLike<int>\r\n    static_assert(constructible_from<pair<int, int>, PairLike<int>>);\r\n    static_assert(!constructible_from<pair<int&, int&>, PairLike<int>>);\r\n    static_assert(constructible_from<pair<const int&, const int&>, PairLike<int>>);\r\n    static_assert(constructible_from<pair<int&&, int&&>, PairLike<int>>);\r\n    static_assert(constructible_from<pair<const int&&, const int&&>, PairLike<int>>);\r\n\r\n    // Test pair(pair-like) constructor with const PairLike<int>\r\n    static_assert(constructible_from<pair<int, int>, const PairLike<int>>);\r\n    static_assert(!constructible_from<pair<int&, int&>, const PairLike<int>>);\r\n    static_assert(constructible_from<pair<const int&, const int&>, const PairLike<int>>);\r\n    static_assert(!constructible_from<pair<int&&, int&&>, const PairLike<int>>);\r\n    static_assert(constructible_from<pair<const int&&, const int&&>, const PairLike<int>>);\r\n\r\n    PairLike<TmpInt> a = {1, 2};\r\n\r\n    pair<TmpInt, TmpInt> p1(a);\r\n    assert(p1.first == 1 && p1.second == 2 && get<0>(a) == 1 && get<1>(a) == 2);\r\n\r\n    pair<TmpInt&, TmpInt&> p2(a);\r\n    assert(&p2.first == &get<0>(a) && &p2.second == &get<1>(a));\r\n\r\n    pair<const TmpInt&, const TmpInt&> p3(a);\r\n    assert(&p3.first == &get<0>(a) && &p3.second == &get<1>(a));\r\n\r\n    pair<TmpInt, TmpInt> p4(as_const(a));\r\n    assert(p4.first == 1 && p4.second == 2 && get<0>(a) == 1 && get<1>(a) == 2);\r\n\r\n    pair<const TmpInt&, const TmpInt&> p5(as_const(a));\r\n    assert(&p5.first == &get<0>(a) && &p5.second == &get<1>(a));\r\n\r\n    pair<TmpInt, TmpInt> p6(std::move(a));\r\n    assert(p6.first == 1 && p6.second == 2 && get<0>(a) == -1 && get<1>(a) == -1);\r\n    tie(get<0>(a), get<1>(a)) = std::move(p6);\r\n\r\n    pair<const TmpInt&, const TmpInt&> p7(std::move(a));\r\n    assert(&p7.first == &get<0>(a) && &p7.second == &get<1>(a));\r\n\r\n    pair<TmpInt&&, TmpInt&&> p8(std::move(a));\r\n    assert(&p8.first == &get<0>(a) && &p8.second == &get<1>(a));\r\n\r\n    pair<const TmpInt&&, const TmpInt&&> p9(std::move(a));\r\n    assert(&p9.first == &get<0>(a) && &p9.second == &get<1>(a));\r\n\r\n    pair<TmpInt, TmpInt> p10(std::move(as_const(a)));\r\n    assert(p10.first == 1 && p10.second == 2 && get<0>(a) == 1 && get<1>(a) == 2);\r\n\r\n    pair<const TmpInt&, const TmpInt&> p11(std::move(as_const(a)));\r\n    assert(p11.first == 1 && p11.second == 2 && get<0>(a) == 1 && get<1>(a) == 2);\r\n\r\n    pair<const TmpInt&&, const TmpInt&&> p12(std::move(as_const(a)));\r\n    assert(p12.first == 1 && p12.second == 2 && get<0>(a) == 1 && get<1>(a) == 2);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <template <class> class PairLike>\r\nconstexpr bool test_pair_like_assignment() {\r\n    static_assert(is_assignable_v<pair<int, int>&, PairLike<int>&>);\r\n    static_assert(is_assignable_v<pair<int, int>&, const PairLike<int>&>);\r\n    static_assert(is_assignable_v<pair<int, int>&, PairLike<int>>);\r\n    static_assert(is_assignable_v<pair<int, int>&, const PairLike<int>>);\r\n\r\n    PairLike<TmpInt> a = {1, 2};\r\n\r\n    pair<TmpInt, TmpInt> p1;\r\n    p1 = a;\r\n    assert(p1.first == 1 && p1.second == 2 && get<0>(a) == 1 && get<1>(a) == 2);\r\n\r\n    pair<TmpInt, TmpInt> p2;\r\n    p2 = as_const(a);\r\n    assert(p2.first == 1 && p2.second == 2 && get<0>(a) == 1 && get<1>(a) == 2);\r\n\r\n    pair<TmpInt, TmpInt> p3;\r\n    p3 = std::move(a);\r\n    assert(p3.first == 1 && p3.second == 2 && get<0>(a) == -1 && get<1>(a) == -1);\r\n    tie(get<0>(a), get<1>(a)) = std::move(p3);\r\n\r\n    pair<TmpInt, TmpInt> p4;\r\n    p4 = std::move(as_const(a));\r\n    assert(p4.first == 1 && p4.second == 2 && get<0>(a) == 1 && get<1>(a) == 2);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <template <class> class PairLike>\r\nconstexpr bool test_pair_like_const_assignment() {\r\n    using Ref  = vector<bool>::reference;\r\n    using Pair = pair<Ref, Ref>;\r\n\r\n    static_assert(is_assignable_v<const Pair&, PairLike<bool>&>);\r\n    static_assert(is_assignable_v<const Pair&, const PairLike<bool>&>);\r\n    static_assert(is_assignable_v<const Pair&, PairLike<bool>>);\r\n    static_assert(is_assignable_v<const Pair&, const PairLike<bool>>);\r\n\r\n    vector<bool> bools = {false, true};\r\n    PairLike<bool> a   = {true, false};\r\n\r\n    const Pair p1{bools[0], bools[1]};\r\n    p1 = a;\r\n    assert(p1.first == true && p1.second == false);\r\n    bools = {false, true};\r\n\r\n    const Pair p2{bools[0], bools[1]};\r\n    p2 = as_const(a);\r\n    assert(p2.first == true && p2.second == false);\r\n    bools = {false, true};\r\n\r\n    const Pair p3{bools[0], bools[1]};\r\n    p3 = std::move(a);\r\n    assert(p3.first == true && p3.second == false);\r\n    bools = {false, true};\r\n\r\n    const Pair p4{bools[0], bools[1]};\r\n    p4 = std::move(as_const(a));\r\n    assert(p4.first == true && p4.second == false);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class T>\r\nusing BinaryTuple = tuple<T, T>;\r\n\r\ntemplate <class T>\r\nusing BinaryArray = array<T, 2>;\r\n\r\nint main() {\r\n    static_assert(test_pair_like_constructor<BinaryArray>());\r\n    assert(test_pair_like_constructor<BinaryArray>());\r\n    static_assert(test_pair_like_constructor<BinaryTuple>());\r\n    assert(test_pair_like_constructor<BinaryTuple>());\r\n\r\n    static_assert(test_pair_like_assignment<BinaryArray>());\r\n    assert(test_pair_like_assignment<BinaryArray>());\r\n    static_assert(test_pair_like_assignment<BinaryTuple>());\r\n    assert(test_pair_like_assignment<BinaryTuple>());\r\n\r\n    static_assert(test_pair_like_const_assignment<BinaryArray>());\r\n    assert(test_pair_like_const_assignment<BinaryArray>());\r\n    static_assert(test_pair_like_const_assignment<BinaryTuple>());\r\n    assert(test_pair_like_const_assignment<BinaryTuple>());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2165R4_tuple_like_relational_operators/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2165R4_tuple_like_relational_operators/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <compare>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <tuple>\r\n#include <utility>\r\n\r\nusing namespace std;\r\nusing ranges::subrange;\r\n\r\nstruct Incomparable {};\r\n\r\nstruct NeverCompare {\r\n    template <int = 0>\r\n    constexpr bool operator==(const NeverCompare&) const {\r\n        assert(false);\r\n        return true;\r\n    }\r\n\r\n    template <int = 0>\r\n    constexpr auto operator<=>(const NeverCompare&) const {\r\n        assert(false);\r\n        return strong_ordering::equal;\r\n    }\r\n};\r\n\r\ntemplate <class T, class U>\r\nconcept verify_comparisons = equality_comparable_with<T, U> && three_way_comparable_with<T, U>;\r\n\r\nconstexpr bool test() {\r\n    { // Check comparisons of empty tuple-like types\r\n        static_assert(verify_comparisons<tuple<>, array<int, 0>>);\r\n        static_assert(!verify_comparisons<tuple<>, array<Incomparable, 0>>);\r\n\r\n        static_assert(tuple{} == array<int, 0>{});\r\n\r\n        constexpr same_as<strong_ordering> auto cmp = (tuple{} <=> array<int, 0>{});\r\n        static_assert(is_eq(cmp));\r\n    }\r\n\r\n    { // Check comparisons of (tuple_size_v == 1) tuple-like types\r\n        static_assert(verify_comparisons<tuple<int>, array<int, 1>>);\r\n        static_assert(!verify_comparisons<tuple<int>, array<Incomparable, 1>>);\r\n        static_assert(tuple{5} == array{5});\r\n        static_assert(tuple{6} != array{7});\r\n        static_assert(is_eq(tuple{1} <=> array{1}));\r\n        static_assert(is_lt(tuple{1} <=> array{2}));\r\n        static_assert(is_gt(tuple{3} <=> array{2}));\r\n    }\r\n\r\n    { // Check comparisons of (tuple_size_v == 2) tuple-like types\r\n        static_assert(verify_comparisons<tuple<int, int>, array<int, 2>>);\r\n        static_assert(!verify_comparisons<tuple<int, int>, array<Incomparable, 2>>);\r\n        static_assert(!verify_comparisons<tuple<Incomparable, Incomparable>, array<Incomparable, 2>>);\r\n        static_assert(verify_comparisons<tuple<int, int>, pair<int, int>>);\r\n        static_assert(!verify_comparisons<tuple<int, int>, pair<int, Incomparable>>);\r\n        static_assert(!verify_comparisons<tuple<int*, int*>,\r\n            subrange<int*, int*>>); // subrange does not model equality_comparable\r\n\r\n        static_assert(tuple{1, 2} == array<int, 2>{1, 2});\r\n        static_assert(tuple<int, int>{2, 1} != array<int, 2>{1, 2});\r\n        static_assert(is_eq(tuple{1, 2} <=> array{1, 2}));\r\n        static_assert(is_lt(tuple{1, 1} <=> array{1, 2}));\r\n        static_assert(is_gt(tuple{2, 1} <=> array{1, 1}));\r\n\r\n        static_assert(tuple{1, 2} == pair{1, 2});\r\n        static_assert(tuple{2, 1} != pair{1, 2});\r\n        static_assert(is_eq(tuple{1, 2} <=> pair{1, 2}));\r\n        static_assert(is_lt(tuple{1, 1} <=> pair{1, 2}));\r\n        static_assert(is_gt(tuple{2, 1} <=> pair{1, 1}));\r\n\r\n        int a    = 0;\r\n        int b    = 1;\r\n        int c[2] = {2, 3};\r\n        static_assert(tuple{&c[0], &c[1]} == subrange{&c[0], &c[1]});\r\n        static_assert(tuple{&c[1], &c[0]} != subrange{&c[0], &c[1]});\r\n        static_assert(is_eq(tuple{&a, &b} <=> pair{&a, &b}));\r\n        static_assert(is_lt(tuple{&c[0], &c[0]} <=> pair{&c[0], &c[1]}));\r\n        static_assert(is_gt(tuple{&c[1], &c[0]} <=> pair{&c[0], &c[1]}));\r\n    }\r\n\r\n    { // Check comparisons of (tuple_size_v == 3) tuple-like types\r\n        static_assert(verify_comparisons<tuple<int, int, int>, array<int, 3>>);\r\n        static_assert(!verify_comparisons<tuple<int, Incomparable, int>, array<Incomparable, 3>>);\r\n        static_assert(tuple{1, 2, 3} == array{1, 2, 3});\r\n        static_assert(tuple{6, 7, 8} != array{7, 8, 9});\r\n        static_assert(is_eq(tuple{1, 2, 3} <=> array{1, 2, 3}));\r\n        static_assert(is_lt(tuple{1, 2, 3} <=> array{1, 2, 4}));\r\n        static_assert(is_gt(tuple{4, 3, 2} <=> array{3, 2, 1}));\r\n    }\r\n\r\n    { // Check short circuit evaluation\r\n        static_assert(tuple{0, NeverCompare{}} != pair{1, NeverCompare{}});\r\n        static_assert(is_lt(tuple{0, NeverCompare{}} <=> pair{1, NeverCompare{}}));\r\n        static_assert(is_gt(tuple{1, NeverCompare{}} <=> pair{0, NeverCompare{}}));\r\n    }\r\n\r\n    { // Check result type of three-way comparison\r\n        struct NeedsToSynth3Way {\r\n            bool operator<(const NeedsToSynth3Way&) const; // not defined\r\n        };\r\n\r\n        static_assert(same_as<strong_ordering, decltype(tuple{0, 1} <=> array{0, 2})>);\r\n        static_assert(same_as<weak_ordering, decltype(tuple{NeedsToSynth3Way{}} <=> array{NeedsToSynth3Way{}})>);\r\n        static_assert(same_as<partial_ordering, decltype(tuple{0, 1.f} <=> array{0, 2})>);\r\n    }\r\n\r\n    { // Check incorrect three-way comparisons\r\n        static_assert(!three_way_comparable_with<tuple<int>, array<int, 2>>);\r\n        static_assert(!three_way_comparable_with<tuple<int>, subrange<int*, int*>>);\r\n        static_assert(!three_way_comparable_with<tuple<int>, pair<int, int>>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(test());\r\n"
  },
  {
    "path": "tests/std/tests/P2165R4_tuple_like_tuple_members/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2165R4_tuple_like_tuple_members/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <memory_resource>\r\n#include <string>\r\n#include <string_view>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <template <class...> class Template, class T, size_t N, class Indices = make_index_sequence<N>>\r\nstruct repeat_type_injection_impl;\r\n\r\ntemplate <template <class...> class Template, class T, size_t N, size_t... Indices>\r\nstruct repeat_type_injection_impl<Template, T, N, index_sequence<Indices...>> {\r\n    template <size_t>\r\n    using repeat_type = T;\r\n\r\n    using type = Template<repeat_type<Indices>...>;\r\n};\r\n\r\ntemplate <template <class...> class Template, class T, size_t N>\r\nusing repeat_type_injection = repeat_type_injection_impl<Template, T, N>::type;\r\n\r\nstatic_assert(same_as<repeat_type_injection<tuple, int, 0>, tuple<>>);\r\nstatic_assert(same_as<repeat_type_injection<pair, int, 2>, pair<int, int>>);\r\nstatic_assert(same_as<repeat_type_injection<tuple, int, 4>, tuple<int, int, int, int>>);\r\n\r\nstruct TmpChar {\r\n    constexpr TmpChar() : TmpChar('\\0') {}\r\n    constexpr TmpChar(char c) : val{c} {}\r\n\r\n    constexpr TmpChar(const TmpChar&) = default;\r\n    constexpr TmpChar(TmpChar&& other) : val{exchange(other.val, '\\x7F')} {}\r\n\r\n    constexpr TmpChar& operator=(const TmpChar&) = default;\r\n    constexpr TmpChar& operator=(TmpChar&& other) {\r\n        if (this != &other) {\r\n            val = exchange(other.val, '\\x7F');\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    char val;\r\n    constexpr bool operator==(const TmpChar&) const = default;\r\n};\r\n\r\nstruct EvilComma {\r\n    constexpr EvilComma& operator=(size_t) {\r\n        return *this;\r\n    }\r\n\r\n    constexpr const EvilComma& operator=(size_t) const {\r\n        return *this;\r\n    }\r\n\r\n    constexpr void operator,(auto&&) const {\r\n        assert(false);\r\n    }\r\n};\r\n\r\ntemplate <size_t N, template <class...> class TplLike>\r\nstruct tester {\r\npublic:\r\n    template <class T>\r\n    using Tuple = repeat_type_injection<tuple, T, N>;\r\n\r\n    template <class T>\r\n    using TupleLike = repeat_type_injection<TplLike, T, N>;\r\n\r\n    static constexpr bool run() {\r\n        using Seq = make_index_sequence<N>;\r\n        static_assert(test_tuple_like_constructor(Seq{}));\r\n        static_assert(test_tuple_like_allocator_constructor(Seq{}));\r\n        static_assert(test_tuple_like_assignment(Seq{}));\r\n        static_assert(test_pair_like_const_assignment(Seq{}));\r\n        return true;\r\n    }\r\n\r\nprivate:\r\n    template <size_t... Indices>\r\n    static constexpr bool test_tuple_like_constructor(index_sequence<Indices...>) {\r\n        // Test tuple(tuple-like) constructor with TupleLike<int>&\r\n        static_assert(constructible_from<Tuple<int>, TupleLike<int>&>);\r\n        static_assert(constructible_from<Tuple<int&>, TupleLike<int>&>);\r\n        static_assert(constructible_from<Tuple<const int&>, TupleLike<int>&>);\r\n        static_assert(!constructible_from<Tuple<int&&>, TupleLike<int>&> || N == 0);\r\n        static_assert(!constructible_from<Tuple<const int&&>, TupleLike<int>&> || N == 0);\r\n\r\n        // Test tuple(tuple-like) constructor with const TupleLike<int>&\r\n        static_assert(constructible_from<Tuple<int>, const TupleLike<int>&>);\r\n        static_assert(!constructible_from<Tuple<int&>, const TupleLike<int>&> || N == 0);\r\n        static_assert(constructible_from<Tuple<const int&>, const TupleLike<int>&>);\r\n        static_assert(!constructible_from<Tuple<int&&>, const TupleLike<int>&> || N == 0);\r\n        static_assert(!constructible_from<Tuple<const int&&>, const TupleLike<int>&> || N == 0);\r\n\r\n        // Test tuple(tuple-like) constructor with TupleLike<int>\r\n        static_assert(constructible_from<Tuple<int>, TupleLike<int>>);\r\n        static_assert(!constructible_from<Tuple<int&>, TupleLike<int>> || N == 0);\r\n        static_assert(constructible_from<Tuple<const int&>, TupleLike<int>>);\r\n        static_assert(constructible_from<Tuple<int&&>, TupleLike<int>>);\r\n        static_assert(constructible_from<Tuple<const int&&>, TupleLike<int>>);\r\n\r\n        // Test tuple(tuple-like) constructor with const TupleLike<int>\r\n        static_assert(constructible_from<Tuple<int>, const TupleLike<int>>);\r\n        static_assert(!constructible_from<Tuple<int&>, const TupleLike<int>> || N == 0);\r\n        static_assert(constructible_from<Tuple<const int&>, const TupleLike<int>>);\r\n        static_assert(!constructible_from<Tuple<int&&>, const TupleLike<int>> || N == 0);\r\n        static_assert(constructible_from<Tuple<const int&&>, const TupleLike<int>>);\r\n\r\n        auto get_letter      = [](size_t Idx) { return static_cast<char>('A' + Idx); };\r\n        TupleLike<TmpChar> a = {get_letter(Indices)...}; // 'A', 'B', 'C', ...\r\n\r\n        Tuple<TmpChar> t1(a);\r\n        assert((get<Indices>(t1) == get_letter(Indices) && get<Indices>(a) == get_letter(Indices)) && ...);\r\n\r\n        Tuple<TmpChar&> t2(a);\r\n        assert((&get<Indices>(t2) == &get<Indices>(a)) && ...);\r\n\r\n        Tuple<const TmpChar&> t3(a);\r\n        assert((&get<Indices>(t3) == &get<Indices>(a)) && ...);\r\n\r\n        Tuple<TmpChar> t4(as_const(a));\r\n        assert((get<Indices>(t4) == get_letter(Indices) && get<Indices>(a) == get_letter(Indices)) && ...);\r\n\r\n        Tuple<const TmpChar&> t5(as_const(a));\r\n        assert((&get<Indices>(t5) == &get<Indices>(a)) && ...);\r\n\r\n        Tuple<TmpChar> t6(std::move(a));\r\n        assert((get<Indices>(t6) == get_letter(Indices) && get<Indices>(a) == '\\x7F') && ...);\r\n        ((get<Indices>(a) = std::move(get<Indices>(t6))), ...);\r\n\r\n        Tuple<const TmpChar&> t7(std::move(a));\r\n        assert((&get<Indices>(t7) == &get<Indices>(a)) && ...);\r\n\r\n        Tuple<TmpChar&&> t8(std::move(a));\r\n        assert((&get<Indices>(t8) == &get<Indices>(a)) && ...);\r\n\r\n        Tuple<const TmpChar&&> t9(std::move(a));\r\n        assert((&get<Indices>(t9) == &get<Indices>(a)) && ...);\r\n\r\n        Tuple<TmpChar> t10(std::move(as_const(a)));\r\n        assert((get<Indices>(t10) == get_letter(Indices) && get<Indices>(a) == get_letter(Indices)) && ...);\r\n\r\n        Tuple<const TmpChar&> t11(std::move(as_const(a)));\r\n        assert((get<Indices>(t11) == get_letter(Indices) && get<Indices>(a) == get_letter(Indices)) && ...);\r\n\r\n        Tuple<const TmpChar&&> t12(std::move(as_const(a)));\r\n        assert((get<Indices>(t12) == get_letter(Indices) && get<Indices>(a) == get_letter(Indices)) && ...);\r\n\r\n        // Check explicit specifier\r\n        static_assert(!convertible_to<string_view, string>);\r\n        static_assert(convertible_to<TupleLike<int>, Tuple<long>>);\r\n        static_assert(!convertible_to<TupleLike<string_view>, Tuple<string>> || N == 0);\r\n        static_assert(constructible_from<Tuple<string>, TupleLike<string_view>>);\r\n\r\n        return true;\r\n    }\r\n\r\n    template <size_t... Indices>\r\n    static constexpr bool test_tuple_like_allocator_constructor(index_sequence<Indices...>) {\r\n        // Test tuple(allocator_arg_t, Alloc, tuple-like)\r\n        static_assert(constructible_from<Tuple<string>, allocator_arg_t, allocator<char>, TupleLike<string>&>);\r\n        static_assert(constructible_from<Tuple<string>, allocator_arg_t, allocator<char>, const TupleLike<string>&>);\r\n        static_assert(constructible_from<Tuple<string>, allocator_arg_t, allocator<char>, TupleLike<string>>);\r\n        static_assert(constructible_from<Tuple<string>, allocator_arg_t, allocator<char>, const TupleLike<string>>);\r\n\r\n        if (!is_constant_evaluated()) {\r\n            using Alloc = pmr::polymorphic_allocator<char>;\r\n\r\n            array<byte, 128> buffer;\r\n            pmr::monotonic_buffer_resource resource{buffer.data(), buffer.size()};\r\n            auto get_str = [&](size_t Idx) { return pmr::string({static_cast<char>('A' + Idx)}, Alloc{&resource}); };\r\n\r\n            TupleLike<pmr::string> a = {get_str(Indices)...}; // \"A\"s, \"B\"s, \"C\"s, ...\r\n\r\n            Tuple<pmr::string> t1(allocator_arg, Alloc{&resource}, a);\r\n            assert((get<Indices>(t1).get_allocator() == get<Indices>(a).get_allocator()) && ...);\r\n            assert((ranges::equal(get<Indices>(t1), get_str(Indices)) //\r\n                       && ranges::equal(get<Indices>(a), get_str(Indices)))\r\n                   && ...);\r\n\r\n            array<byte, 128> extra_buffer;\r\n            pmr::monotonic_buffer_resource extra_resource{extra_buffer.data(), extra_buffer.size()};\r\n\r\n            Tuple<const pmr::string> t2(allocator_arg, Alloc{&extra_resource}, a);\r\n            assert((get<Indices>(t2).get_allocator() != get<Indices>(a).get_allocator()) && ...);\r\n            assert((ranges::equal(get<Indices>(t2), get_str(Indices)) //\r\n                       && ranges::equal(get<Indices>(a), get_str(Indices)))\r\n                   && ...);\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    template <size_t... Indices>\r\n    static constexpr bool test_tuple_like_assignment(index_sequence<Indices...>) {\r\n        // Test operator=(tuple-like)\r\n        static_assert(is_assignable_v<Tuple<int>&, TupleLike<int>&>);\r\n        static_assert(is_assignable_v<Tuple<int>&, const TupleLike<int>&>);\r\n        static_assert(is_assignable_v<Tuple<int>&, TupleLike<int>>);\r\n        static_assert(is_assignable_v<Tuple<int>&, const TupleLike<int>>);\r\n\r\n        auto get_letter      = [](size_t Idx) { return static_cast<char>('A' + Idx); };\r\n        TupleLike<TmpChar> a = {get_letter(Indices)...};\r\n\r\n        Tuple<TmpChar> t1;\r\n        t1 = a;\r\n        assert((get<Indices>(t1) == get_letter(Indices) && get<Indices>(a) == get_letter(Indices)) && ...);\r\n\r\n        Tuple<TmpChar> t2;\r\n        t2 = as_const(a);\r\n        assert((get<Indices>(t2) == get_letter(Indices) && get<Indices>(a) == get_letter(Indices)) && ...);\r\n\r\n        Tuple<TmpChar> t3;\r\n        t3 = std::move(a);\r\n        assert((get<Indices>(t3) == get_letter(Indices) && get<Indices>(a) == '\\x7F') && ...);\r\n        ((get<Indices>(a) = std::move(get<Indices>(t3))), ...);\r\n\r\n        Tuple<TmpChar> t4;\r\n        t4 = std::move(as_const(a));\r\n        assert((get<Indices>(t4) == get_letter(Indices) && get<Indices>(a) == get_letter(Indices)) && ...);\r\n\r\n        // Check comma hijacking\r\n        Tuple<EvilComma> t5;\r\n        t5 = TupleLike<size_t>{Indices...};\r\n\r\n        return true;\r\n    }\r\n\r\n    template <size_t... Indices>\r\n    static constexpr bool test_pair_like_const_assignment(index_sequence<Indices...>) {\r\n        using Ref = vector<bool>::reference;\r\n\r\n        // Test operator=(tuple-like) const\r\n        static_assert(is_assignable_v<const Tuple<Ref>&, TupleLike<bool>&>);\r\n        static_assert(is_assignable_v<const Tuple<Ref>&, const TupleLike<bool>&>);\r\n        static_assert(is_assignable_v<const Tuple<Ref>&, TupleLike<bool>>);\r\n        static_assert(is_assignable_v<const Tuple<Ref>&, const TupleLike<bool>>);\r\n\r\n        auto get_false_true = [](size_t Idx) { return static_cast<bool>(Idx % 2); };\r\n        auto get_true_false = [](size_t Idx) { return static_cast<bool>((Idx + 1) % 2); };\r\n\r\n        vector<bool> booleans = {get_false_true(Indices)...}; // false, true, false, true, ...\r\n        TupleLike<bool> a     = {get_true_false(Indices)...}; // true, false, true, false, ...\r\n\r\n        const Tuple<Ref> t1{booleans[Indices]...};\r\n        t1 = a;\r\n        assert((get<Indices>(t1) == get_true_false(Indices)) && ...);\r\n        booleans = {get_false_true(Indices)...};\r\n\r\n        const Tuple<Ref> t2{booleans[Indices]...};\r\n        t2 = as_const(a);\r\n        assert((get<Indices>(t2) == get_true_false(Indices)) && ...);\r\n        booleans = {get_false_true(Indices)...};\r\n\r\n        const Tuple<Ref> t3{booleans[Indices]...};\r\n        t3 = std::move(a);\r\n        assert((get<Indices>(t3) == get_true_false(Indices)) && ...);\r\n        booleans = {get_false_true(Indices)...};\r\n\r\n        const Tuple<Ref> t4{booleans[Indices]...};\r\n        t4 = std::move(as_const(a));\r\n        assert((get<Indices>(t4) == get_true_false(Indices)) && ...);\r\n\r\n        // Check comma hijacking\r\n        const Tuple<EvilComma> t5;\r\n        t5 = TupleLike<size_t>{Indices...};\r\n\r\n        return true;\r\n    }\r\n};\r\n\r\ntemplate <class...>\r\nstruct TupleLikeArrayImpl;\r\n\r\ntemplate <>\r\nstruct TupleLikeArrayImpl<> {\r\n    using type = array<int, 0>;\r\n};\r\n\r\ntemplate <class Head, class... Rest>\r\nstruct TupleLikeArrayImpl<Head, Rest...> {\r\n    using type = array<Head, 1 + sizeof...(Rest)>;\r\n};\r\n\r\ntemplate <class... Ts>\r\nusing TupleLikeArray = TupleLikeArrayImpl<Ts...>::type;\r\n\r\nint main() {\r\n    static_assert(tester<0, TupleLikeArray>::run());\r\n    static_assert(tester<1, TupleLikeArray>::run());\r\n    static_assert(tester<2, TupleLikeArray>::run());\r\n    static_assert(tester<2, pair>::run());\r\n    static_assert(tester<3, TupleLikeArray>::run());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2231R1_complete_constexpr_optional_variant/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2231R1_complete_constexpr_optional_variant/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <initializer_list>\r\n#include <optional>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <variant>\r\n\r\nusing namespace std;\r\n\r\nstruct With_trivial_destructor {\r\n    int _val = 0;\r\n    constexpr With_trivial_destructor(const int val) noexcept : _val(val) {}\r\n    constexpr With_trivial_destructor(initializer_list<int> vals) noexcept : _val(*vals.begin()) {}\r\n\r\n    constexpr bool operator==(const int right) const noexcept {\r\n        return _val == right;\r\n    }\r\n};\r\n\r\nstruct With_nontrivial_destructor {\r\n    int _val = 0;\r\n    constexpr With_nontrivial_destructor(const int val) noexcept : _val(val) {}\r\n    constexpr With_nontrivial_destructor(initializer_list<int> vals) noexcept : _val(*vals.begin()) {}\r\n    With_nontrivial_destructor(const With_nontrivial_destructor&)            = default;\r\n    With_nontrivial_destructor& operator=(const With_nontrivial_destructor&) = default;\r\n    constexpr ~With_nontrivial_destructor() {}\r\n\r\n    constexpr bool operator==(const int right) const noexcept {\r\n        return _val == right;\r\n    }\r\n};\r\n\r\nstruct Dummy {\r\n    int _val = 0;\r\n};\r\n\r\ntemplate <class T>\r\nconstexpr bool test_optional() {\r\n    { // empty construction\r\n        optional<T> default_constructed;\r\n        assert(!default_constructed.has_value());\r\n\r\n        optional<T> nullopt_constructed{nullopt};\r\n        assert(!nullopt_constructed.has_value());\r\n    }\r\n\r\n    { // construction from underlying type\r\n        const T input{42};\r\n        optional<T> construct_from_type{input};\r\n        assert(construct_from_type.has_value());\r\n        assert(*construct_from_type == 42);\r\n\r\n        optional<T> construct_from_type_rvalue{T{42}};\r\n        assert(construct_from_type_rvalue.has_value());\r\n        assert(*construct_from_type_rvalue == 42);\r\n\r\n        optional<T> assign_from_type;\r\n        assert(!assign_from_type.has_value());\r\n        assign_from_type = input;\r\n        assert(assign_from_type.has_value());\r\n        assert(*assign_from_type == 42);\r\n\r\n        optional<T> assign_from_type_rvalue;\r\n        assert(!assign_from_type_rvalue.has_value());\r\n        assign_from_type_rvalue = T{42};\r\n        assert(assign_from_type_rvalue.has_value());\r\n        assert(*assign_from_type_rvalue == 42);\r\n    }\r\n\r\n    { // construction from convertible type\r\n        const int input{42};\r\n        optional<T> construct_from_convertible_type{input};\r\n        assert(construct_from_convertible_type.has_value());\r\n        assert(*construct_from_convertible_type == 42);\r\n\r\n        optional<T> construct_from_convertible_type_rvalue{42};\r\n        assert(construct_from_convertible_type_rvalue.has_value());\r\n        assert(*construct_from_convertible_type_rvalue == 42);\r\n\r\n        optional<T> assign_from_convertible_type;\r\n        assert(!assign_from_convertible_type.has_value());\r\n        assign_from_convertible_type = input;\r\n        assert(assign_from_convertible_type.has_value());\r\n        assert(*assign_from_convertible_type == 42);\r\n\r\n        optional<T> assign_from_convertible_type_rvalue;\r\n        assert(!assign_from_convertible_type_rvalue.has_value());\r\n        assign_from_convertible_type_rvalue = 42;\r\n        assert(assign_from_convertible_type_rvalue.has_value());\r\n        assert(*assign_from_convertible_type_rvalue == 42);\r\n    }\r\n\r\n    { // construction from optional with same type\r\n        optional<T> constructed{42};\r\n        assert(constructed.has_value());\r\n        assert(*constructed == 42);\r\n\r\n        optional<T> copy_constructed{constructed};\r\n        assert(copy_constructed.has_value());\r\n        assert(*copy_constructed == 42);\r\n\r\n        optional<T> move_constructed{move(constructed)};\r\n        assert(move_constructed.has_value());\r\n        assert(*move_constructed == 42);\r\n\r\n        optional<T> copy_assigned;\r\n        assert(!copy_assigned.has_value());\r\n        copy_assigned = move_constructed;\r\n        assert(copy_assigned.has_value());\r\n        assert(*copy_assigned == 42);\r\n\r\n        optional<T> move_assigned;\r\n        assert(!move_assigned.has_value());\r\n        move_assigned = move(copy_assigned);\r\n        assert(move_assigned.has_value());\r\n        assert(*move_assigned == 42);\r\n    }\r\n\r\n    { // construction from optional with convertible types\r\n        optional<int> input{42};\r\n\r\n        optional<T> construct_from_convertible_optional{input};\r\n        assert(construct_from_convertible_optional.has_value());\r\n        assert(*construct_from_convertible_optional == 42);\r\n\r\n        optional<T> construct_from_convertible_optional_rvalue{optional<int>{3}};\r\n        assert(construct_from_convertible_optional_rvalue.has_value());\r\n        assert(*construct_from_convertible_optional_rvalue == 3);\r\n\r\n        optional<T> assign_from_convertible_optional;\r\n        assert(!assign_from_convertible_optional.has_value());\r\n        assign_from_convertible_optional = input;\r\n        assert(assign_from_convertible_optional.has_value());\r\n        assert(*assign_from_convertible_optional == 42);\r\n\r\n        optional<T> assign_from_convertible_optional_rvalue;\r\n        assert(!assign_from_convertible_optional_rvalue.has_value());\r\n        assign_from_convertible_optional_rvalue = optional<int>{3};\r\n        assert(assign_from_convertible_optional_rvalue.has_value());\r\n        assert(*assign_from_convertible_optional_rvalue == 3);\r\n    }\r\n\r\n    { // emplace\r\n        T input{42};\r\n        optional<T> emplace_copy;\r\n        assert(!emplace_copy.has_value());\r\n        emplace_copy.emplace(input);\r\n        assert(emplace_copy.has_value());\r\n        assert(*emplace_copy == 42);\r\n\r\n        optional<T> emplace_move;\r\n        assert(!emplace_move.has_value());\r\n        emplace_move.emplace(T{42});\r\n        assert(emplace_move.has_value());\r\n        assert(*emplace_move == 42);\r\n\r\n        optional<T> emplace_conversion;\r\n        assert(!emplace_conversion.has_value());\r\n        emplace_conversion.emplace(42);\r\n        assert(emplace_conversion.has_value());\r\n        assert(*emplace_conversion == 42);\r\n\r\n        optional<T> emplace_initializer_list;\r\n        assert(!emplace_initializer_list.has_value());\r\n        emplace_initializer_list.emplace({42, 43});\r\n        assert(emplace_initializer_list.has_value());\r\n        assert(*emplace_initializer_list == 42);\r\n    }\r\n\r\n    { // reset\r\n        optional<T> resetted{42};\r\n        resetted.reset();\r\n        assert(!resetted.has_value());\r\n    }\r\n\r\n    { // swap\r\n        optional<T> left{42};\r\n        optional<T> right{3};\r\n        assert(*left == 42);\r\n        assert(*right == 3);\r\n\r\n        left.swap(right);\r\n        assert(*left == 3);\r\n        assert(*right == 42);\r\n\r\n        swap(left, right);\r\n        assert(*left == 42);\r\n        assert(*right == 3);\r\n    }\r\n    return true;\r\n}\r\n\r\ntemplate <class T>\r\nconstexpr bool test_variant() {\r\n    { // construction from underlying type\r\n        const T input{42};\r\n        variant<Dummy, T> construct_from_type{input};\r\n        assert(construct_from_type.index() == 1);\r\n        assert(get<T>(construct_from_type) == 42);\r\n\r\n        variant<Dummy, T> construct_from_type_rvalue{T{42}};\r\n        assert(construct_from_type_rvalue.index() == 1);\r\n        assert(get<T>(construct_from_type_rvalue) == 42);\r\n\r\n        variant<Dummy, T> assign_from_type;\r\n        assert(assign_from_type.index() == 0);\r\n        assign_from_type = input;\r\n        assert(assign_from_type.index() == 1);\r\n        assert(get<T>(assign_from_type) == 42);\r\n\r\n        variant<Dummy, T> assign_from_type_rvalue;\r\n        assert(assign_from_type_rvalue.index() == 0);\r\n        assign_from_type_rvalue = T{42};\r\n        assert(assign_from_type_rvalue.index() == 1);\r\n        assert(get<T>(assign_from_type_rvalue) == 42);\r\n    }\r\n\r\n    { // construction from variant with same type\r\n        variant<Dummy, T> constructed{T{42}};\r\n        assert(constructed.index() == 1);\r\n        assert(get<T>(constructed) == 42);\r\n\r\n        variant<Dummy, T> copy_constructed{constructed};\r\n        assert(copy_constructed.index() == 1);\r\n        assert(get<T>(copy_constructed) == 42);\r\n\r\n        variant<Dummy, T> move_constructed{move(constructed)};\r\n        assert(move_constructed.index() == 1);\r\n        assert(get<T>(move_constructed) == 42);\r\n\r\n        variant<Dummy, T> copy_assigned;\r\n        assert(copy_assigned.index() == 0);\r\n        copy_assigned = constructed;\r\n        assert(copy_assigned.index() == 1);\r\n        assert(get<T>(copy_assigned) == 42);\r\n\r\n        variant<Dummy, T> move_assigned;\r\n        assert(move_assigned.index() == 0);\r\n        move_assigned = move(constructed);\r\n        assert(move_assigned.index() == 1);\r\n        assert(get<T>(move_assigned) == 42);\r\n    }\r\n\r\n    { // emplace type\r\n        T input{42};\r\n        variant<Dummy, T> emplace_copy;\r\n        assert(emplace_copy.index() == 0);\r\n        emplace_copy.template emplace<T>(input);\r\n        assert(emplace_copy.index() == 1);\r\n        assert(get<T>(emplace_copy) == 42);\r\n\r\n        variant<Dummy, T> emplace_move;\r\n        assert(emplace_move.index() == 0);\r\n        emplace_move.template emplace<T>(T{42});\r\n        assert(emplace_move.index() == 1);\r\n        assert(get<T>(emplace_move) == 42);\r\n\r\n        variant<Dummy, T> emplace_conversion;\r\n        assert(emplace_conversion.index() == 0);\r\n        emplace_conversion.template emplace<T>(42);\r\n        assert(emplace_conversion.index() == 1);\r\n        assert(get<T>(emplace_conversion) == 42);\r\n\r\n        variant<Dummy, T> emplace_initializer_list;\r\n        assert(emplace_initializer_list.index() == 0);\r\n        emplace_initializer_list.template emplace<T>({42, 43});\r\n        assert(emplace_initializer_list.index() == 1);\r\n        assert(get<T>(emplace_initializer_list) == 42);\r\n    }\r\n\r\n    { // emplace index\r\n        T input{42};\r\n        variant<Dummy, T> emplace_copy;\r\n        assert(emplace_copy.index() == 0);\r\n        emplace_copy.template emplace<1>(input);\r\n        assert(emplace_copy.index() == 1);\r\n        assert(get<T>(emplace_copy) == 42);\r\n\r\n        variant<Dummy, T> emplace_move;\r\n        assert(emplace_move.index() == 0);\r\n        emplace_move.template emplace<1>(T{42});\r\n        assert(emplace_move.index() == 1);\r\n        assert(get<T>(emplace_move) == 42);\r\n\r\n        variant<Dummy, T> emplace_conversion;\r\n        assert(emplace_conversion.index() == 0);\r\n        emplace_conversion.template emplace<1>(42);\r\n        assert(emplace_conversion.index() == 1);\r\n        assert(get<T>(emplace_conversion) == 42);\r\n\r\n        variant<Dummy, T> emplace_initializer_list;\r\n        assert(emplace_initializer_list.index() == 0);\r\n        emplace_initializer_list.template emplace<1>({42, 43});\r\n        assert(emplace_initializer_list.index() == 1);\r\n        assert(get<T>(emplace_initializer_list) == 42);\r\n    }\r\n\r\n    { // swap\r\n        variant<Dummy, T> left{T{42}};\r\n        variant<Dummy, T> right;\r\n        assert(left.index() == 1);\r\n        assert(get<T>(left) == 42);\r\n        assert(right.index() == 0);\r\n\r\n        left.swap(right);\r\n        assert(right.index() == 1);\r\n        assert(get<T>(right) == 42);\r\n        assert(left.index() == 0);\r\n\r\n        swap(left, right);\r\n        assert(left.index() == 1);\r\n        assert(get<T>(left) == 42);\r\n        assert(right.index() == 0);\r\n    }\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test_optional<With_trivial_destructor>();\r\n    test_optional<With_nontrivial_destructor>();\r\n    static_assert(test_optional<With_trivial_destructor>());\r\n    static_assert(test_optional<With_nontrivial_destructor>());\r\n\r\n    test_variant<With_trivial_destructor>();\r\n    test_variant<With_nontrivial_destructor>();\r\n    static_assert(test_variant<With_trivial_destructor>());\r\n    static_assert(test_variant<With_nontrivial_destructor>());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2255R2_invocation/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2255R2_invocation/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <functional>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nstruct LvalueTempFunctor {\r\n    int operator()() const& noexcept;\r\n    const int& operator()() const&& noexcept;\r\n};\r\n\r\nstatic_assert(is_invocable_r_v<const int&, int& (*) ()>);\r\nstatic_assert(!is_invocable_r_v<const int&, short& (*) ()>);\r\nstatic_assert(!is_invocable_r_v<const int&, int (*)()>);\r\nstatic_assert(!is_invocable_r_v<int&&, int (*)()>);\r\nstatic_assert(is_invocable_r_v<int, int (*)()>);\r\nstatic_assert(is_invocable_r_v<const int&, LvalueTempFunctor>);\r\nstatic_assert(!is_invocable_r_v<const int&, LvalueTempFunctor&>);\r\n\r\nstatic_assert(is_constructible_v<function<const int&()>, int& (*) ()>);\r\nstatic_assert(!is_constructible_v<function<const int&()>, short& (*) ()>);\r\nstatic_assert(!is_constructible_v<function<const int&()>, int (*)()>);\r\nstatic_assert(!is_constructible_v<function<const int&()>, LvalueTempFunctor>);\r\n\r\nstatic_assert(is_constructible_v<move_only_function<const int&()>, int& (*) ()>);\r\nstatic_assert(!is_constructible_v<move_only_function<const int&()>, short& (*) ()>);\r\nstatic_assert(!is_constructible_v<move_only_function<const int&()>, int (*)()>);\r\n\r\nstatic_assert(is_constructible_v<move_only_function<const int&() const>, int& (*) ()>);\r\nstatic_assert(!is_constructible_v<move_only_function<const int&() const>, short& (*) ()>);\r\nstatic_assert(!is_constructible_v<move_only_function<const int&() const>, int (*)()>);\r\n\r\nstatic_assert(!is_constructible_v<move_only_function<const int&() &>, LvalueTempFunctor>);\r\nstatic_assert(!is_constructible_v<move_only_function<const int&() const&>, LvalueTempFunctor>);\r\nstatic_assert(is_constructible_v<move_only_function<const int&() &&>, LvalueTempFunctor>);\r\nstatic_assert(is_constructible_v<move_only_function<const int&() const&&>, LvalueTempFunctor>);\r\n\r\n#ifdef __cpp_noexcept_function_type\r\nstatic_assert(is_nothrow_invocable_r_v<const int&, int& (*) () noexcept>);\r\nstatic_assert(!is_nothrow_invocable_r_v<const int&, short& (*) () noexcept>);\r\nstatic_assert(!is_nothrow_invocable_r_v<const int&, int (*)() noexcept>);\r\nstatic_assert(!is_nothrow_invocable_r_v<int&&, int (*)() noexcept>);\r\nstatic_assert(is_nothrow_invocable_r_v<int, int (*)() noexcept>);\r\nstatic_assert(is_nothrow_invocable_r_v<const int&, LvalueTempFunctor>);\r\nstatic_assert(!is_nothrow_invocable_r_v<const int&, LvalueTempFunctor&>);\r\n\r\nstatic_assert(is_constructible_v<move_only_function<const int&() noexcept>, int& (*) () noexcept>);\r\nstatic_assert(!is_constructible_v<move_only_function<const int&() noexcept>, short& (*) () noexcept>);\r\nstatic_assert(!is_constructible_v<move_only_function<const int&() noexcept>, int (*)() noexcept>);\r\n\r\nstatic_assert(is_constructible_v<move_only_function<const int&() const noexcept>, int& (*) () noexcept>);\r\nstatic_assert(!is_constructible_v<move_only_function<const int&() const noexcept>, short& (*) () noexcept>);\r\nstatic_assert(!is_constructible_v<move_only_function<const int&() const noexcept>, int (*)() noexcept>);\r\n\r\nstatic_assert(!is_constructible_v<move_only_function<const int&() & noexcept>, LvalueTempFunctor>);\r\nstatic_assert(!is_constructible_v<move_only_function<const int&() const & noexcept>, LvalueTempFunctor>);\r\nstatic_assert(is_constructible_v<move_only_function<const int&() && noexcept>, LvalueTempFunctor>);\r\nstatic_assert(is_constructible_v<move_only_function<const int&() const && noexcept>, LvalueTempFunctor>);\r\n#endif // defined(__cpp_noexcept_function_type)\r\n"
  },
  {
    "path": "tests/std/tests/P2255R2_reference_constructs_from_temporary/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2255R2_reference_constructs_from_temporary/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nenum class conv_explicitly : bool {\r\n    no,\r\n    yes,\r\n};\r\n\r\ntemplate <conv_explicitly Explicitly>\r\nstruct to_int_lvalue {\r\n    explicit(static_cast<bool>(Explicitly)) operator int&() const;\r\n};\r\n\r\ntemplate <conv_explicitly Explicitly>\r\nstruct to_int_xvalue {\r\n    explicit(static_cast<bool>(Explicitly)) operator int&&() const;\r\n};\r\n\r\ntemplate <conv_explicitly Explicitly>\r\nstruct to_int_prvalue {\r\n    explicit(static_cast<bool>(Explicitly)) operator int() const;\r\n};\r\n\r\ntemplate <class NonTempBindable>\r\nvoid test_one_non_temporary_bindable_type() {\r\n    static_assert(!reference_constructs_from_temporary<NonTempBindable, void>::value);\r\n\r\n    static_assert(!reference_constructs_from_temporary<NonTempBindable, void()>::value);\r\n    static_assert(!reference_constructs_from_temporary<NonTempBindable, void() const&>::value);\r\n\r\n    static_assert(!reference_constructs_from_temporary<NonTempBindable, int>::value);\r\n    static_assert(!reference_constructs_from_temporary<NonTempBindable, const int>::value);\r\n    static_assert(!reference_constructs_from_temporary<NonTempBindable, int[]>::value);\r\n    static_assert(!reference_constructs_from_temporary<NonTempBindable, const int[]>::value);\r\n    static_assert(!reference_constructs_from_temporary<NonTempBindable, int[42]>::value);\r\n    static_assert(!reference_constructs_from_temporary<NonTempBindable, const int[42]>::value);\r\n\r\n    static_assert(!reference_constructs_from_temporary<NonTempBindable, int&>::value);\r\n    static_assert(!reference_constructs_from_temporary<NonTempBindable, int&&>::value);\r\n    static_assert(!reference_constructs_from_temporary<NonTempBindable, const int&>::value);\r\n    static_assert(!reference_constructs_from_temporary<NonTempBindable, const int&&>::value);\r\n    static_assert(!reference_constructs_from_temporary<NonTempBindable, void (&)()>::value);\r\n    static_assert(!reference_constructs_from_temporary<NonTempBindable, void (&&)()>::value);\r\n\r\n    static_assert(!reference_constructs_from_temporary_v<NonTempBindable, void>);\r\n\r\n    static_assert(!reference_constructs_from_temporary_v<NonTempBindable, void()>);\r\n    static_assert(!reference_constructs_from_temporary_v<NonTempBindable, void() const&>);\r\n\r\n    static_assert(!reference_constructs_from_temporary_v<NonTempBindable, int>);\r\n    static_assert(!reference_constructs_from_temporary_v<NonTempBindable, const int>);\r\n    static_assert(!reference_constructs_from_temporary_v<NonTempBindable, int[]>);\r\n    static_assert(!reference_constructs_from_temporary_v<NonTempBindable, const int[]>);\r\n    static_assert(!reference_constructs_from_temporary_v<NonTempBindable, int[42]>);\r\n    static_assert(!reference_constructs_from_temporary_v<NonTempBindable, const int[42]>);\r\n\r\n    static_assert(!reference_constructs_from_temporary_v<NonTempBindable, int&>);\r\n    static_assert(!reference_constructs_from_temporary_v<NonTempBindable, int&&>);\r\n    static_assert(!reference_constructs_from_temporary_v<NonTempBindable, const int&>);\r\n    static_assert(!reference_constructs_from_temporary_v<NonTempBindable, const int&&>);\r\n    static_assert(!reference_constructs_from_temporary_v<NonTempBindable, void (&)()>);\r\n    static_assert(!reference_constructs_from_temporary_v<NonTempBindable, void (&&)()>);\r\n}\r\n\r\nvoid test_non_temporary_bindable_types() {\r\n    test_one_non_temporary_bindable_type<void>();\r\n\r\n    test_one_non_temporary_bindable_type<void()>();\r\n    test_one_non_temporary_bindable_type<void() const&>();\r\n\r\n    test_one_non_temporary_bindable_type<int>();\r\n    test_one_non_temporary_bindable_type<to_int_lvalue<conv_explicitly::yes>>();\r\n\r\n    test_one_non_temporary_bindable_type<int&>();\r\n    test_one_non_temporary_bindable_type<to_int_lvalue<conv_explicitly::yes>&>();\r\n\r\n    test_one_non_temporary_bindable_type<const volatile int&>();\r\n    test_one_non_temporary_bindable_type<const volatile to_int_lvalue<conv_explicitly::yes>&>();\r\n\r\n    test_one_non_temporary_bindable_type<void (&)()>();\r\n    test_one_non_temporary_bindable_type<void (&&)()>();\r\n}\r\n\r\ntemplate <class Obj>\r\nvoid test_one_cvref_to_object() {\r\n    static_assert(!reference_constructs_from_temporary<Obj&, Obj>::value);\r\n    static_assert(!reference_constructs_from_temporary<Obj&, const Obj>::value);\r\n    static_assert(!reference_constructs_from_temporary<Obj&, volatile Obj>::value);\r\n    static_assert(!reference_constructs_from_temporary<Obj&, const volatile Obj>::value);\r\n    static_assert(reference_constructs_from_temporary<const Obj&, Obj>::value);\r\n    static_assert(reference_constructs_from_temporary<const Obj&, const Obj>::value);\r\n    static_assert(reference_constructs_from_temporary<const Obj&, volatile Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(reference_constructs_from_temporary<const Obj&, const volatile Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(!reference_constructs_from_temporary<volatile Obj&, Obj>::value);\r\n    static_assert(!reference_constructs_from_temporary<volatile Obj&, const Obj>::value);\r\n    static_assert(!reference_constructs_from_temporary<volatile Obj&, volatile Obj>::value);\r\n    static_assert(!reference_constructs_from_temporary<volatile Obj&, const volatile Obj>::value);\r\n    static_assert(!reference_constructs_from_temporary<const volatile Obj&, Obj>::value);\r\n    static_assert(!reference_constructs_from_temporary<const volatile Obj&, const Obj>::value);\r\n    static_assert(!reference_constructs_from_temporary<const volatile Obj&, volatile Obj>::value);\r\n    static_assert(!reference_constructs_from_temporary<const volatile Obj&, const volatile Obj>::value);\r\n\r\n    static_assert(reference_constructs_from_temporary<Obj&&, Obj>::value);\r\n    static_assert(reference_constructs_from_temporary<Obj&&, const Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(reference_constructs_from_temporary<Obj&&, volatile Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(reference_constructs_from_temporary<Obj&&, const volatile Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(reference_constructs_from_temporary<const Obj&&, Obj>::value);\r\n    static_assert(reference_constructs_from_temporary<const Obj&&, const Obj>::value);\r\n    static_assert(reference_constructs_from_temporary<const Obj&&, volatile Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(reference_constructs_from_temporary<const Obj&&, const volatile Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(reference_constructs_from_temporary<volatile Obj&&, Obj>::value);\r\n    static_assert(reference_constructs_from_temporary<volatile Obj&&, const Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(reference_constructs_from_temporary<volatile Obj&&, volatile Obj>::value);\r\n    static_assert(reference_constructs_from_temporary<volatile Obj&&, const volatile Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(reference_constructs_from_temporary<const volatile Obj&&, Obj>::value);\r\n    static_assert(reference_constructs_from_temporary<const volatile Obj&&, const Obj>::value);\r\n    static_assert(reference_constructs_from_temporary<const volatile Obj&&, volatile Obj>::value);\r\n    static_assert(reference_constructs_from_temporary<const volatile Obj&&, const volatile Obj>::value);\r\n\r\n    static_assert(!reference_constructs_from_temporary_v<Obj&, Obj>);\r\n    static_assert(!reference_constructs_from_temporary_v<Obj&, const Obj>);\r\n    static_assert(!reference_constructs_from_temporary_v<Obj&, volatile Obj>);\r\n    static_assert(!reference_constructs_from_temporary_v<Obj&, const volatile Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<const Obj&, Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<const Obj&, const Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<const Obj&, volatile Obj> == is_scalar_v<Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<const Obj&, const volatile Obj> == is_scalar_v<Obj>);\r\n    static_assert(!reference_constructs_from_temporary_v<volatile Obj&, Obj>);\r\n    static_assert(!reference_constructs_from_temporary_v<volatile Obj&, const Obj>);\r\n    static_assert(!reference_constructs_from_temporary_v<volatile Obj&, volatile Obj>);\r\n    static_assert(!reference_constructs_from_temporary_v<volatile Obj&, const volatile Obj>);\r\n    static_assert(!reference_constructs_from_temporary_v<const volatile Obj&, Obj>);\r\n    static_assert(!reference_constructs_from_temporary_v<const volatile Obj&, const Obj>);\r\n    static_assert(!reference_constructs_from_temporary_v<const volatile Obj&, volatile Obj>);\r\n    static_assert(!reference_constructs_from_temporary_v<const volatile Obj&, const volatile Obj>);\r\n\r\n    static_assert(reference_constructs_from_temporary_v<Obj&&, Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<Obj&&, const Obj> == is_scalar_v<Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<Obj&&, volatile Obj> == is_scalar_v<Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<Obj&&, const volatile Obj> == is_scalar_v<Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<const Obj&&, Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<const Obj&&, const Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<const Obj&&, volatile Obj> == is_scalar_v<Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<const Obj&&, const volatile Obj> == is_scalar_v<Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<volatile Obj&&, Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<volatile Obj&&, const Obj> == is_scalar_v<Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<volatile Obj&&, volatile Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<volatile Obj&&, const volatile Obj> == is_scalar_v<Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<const volatile Obj&&, Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<const volatile Obj&&, const Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<const volatile Obj&&, volatile Obj>);\r\n    static_assert(reference_constructs_from_temporary_v<const volatile Obj&&, const volatile Obj>);\r\n}\r\n\r\nvoid test_object_types() {\r\n    test_one_cvref_to_object<int>();\r\n    test_one_cvref_to_object<int[1]>();\r\n    test_one_cvref_to_object<to_int_lvalue<conv_explicitly::yes>>();\r\n    test_one_cvref_to_object<to_int_lvalue<conv_explicitly::no>>();\r\n    test_one_cvref_to_object<to_int_xvalue<conv_explicitly::yes>>();\r\n    test_one_cvref_to_object<to_int_xvalue<conv_explicitly::no>>();\r\n}\r\n\r\ntemplate <conv_explicitly Explicitly>\r\nvoid test_to_int_ref() {\r\n    static_assert(!reference_constructs_from_temporary<int&, to_int_lvalue<Explicitly>>::value);\r\n    static_assert(!reference_constructs_from_temporary<const int&, to_int_lvalue<Explicitly>>::value);\r\n    static_assert(reference_constructs_from_temporary<const long&, to_int_lvalue<Explicitly>>::value\r\n                  == !static_cast<bool>(Explicitly));\r\n    static_assert(!reference_constructs_from_temporary<int&, to_int_xvalue<Explicitly>>::value);\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-2742607\r\n    static_assert(!reference_constructs_from_temporary<const int&, to_int_xvalue<Explicitly>>::value);\r\n#endif // ^^^ no workaround ^^^\r\n    static_assert(reference_constructs_from_temporary<const long&, to_int_xvalue<Explicitly>>::value\r\n                  == !static_cast<bool>(Explicitly));\r\n    static_assert(!reference_constructs_from_temporary<int&, to_int_prvalue<Explicitly>>::value);\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-2742607\r\n    static_assert(reference_constructs_from_temporary<const int&, to_int_prvalue<Explicitly>>::value);\r\n#endif // ^^^ no workaround ^^^\r\n    static_assert(reference_constructs_from_temporary<const long&, to_int_prvalue<Explicitly>>::value\r\n                  == !static_cast<bool>(Explicitly));\r\n\r\n    static_assert(!reference_constructs_from_temporary_v<int&, to_int_lvalue<Explicitly>>);\r\n    static_assert(!reference_constructs_from_temporary_v<const int&, to_int_lvalue<Explicitly>>);\r\n    static_assert(reference_constructs_from_temporary_v<const long&, to_int_lvalue<Explicitly>>\r\n                  == !static_cast<bool>(Explicitly));\r\n    static_assert(!reference_constructs_from_temporary_v<int&, to_int_xvalue<Explicitly>>);\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-2742607\r\n    static_assert(!reference_constructs_from_temporary_v<const int&, to_int_xvalue<Explicitly>>);\r\n#endif // ^^^ no workaround ^^^\r\n    static_assert(reference_constructs_from_temporary_v<const long&, to_int_xvalue<Explicitly>>\r\n                  == !static_cast<bool>(Explicitly));\r\n\r\n    static_assert(!reference_constructs_from_temporary_v<int&, to_int_prvalue<Explicitly>>);\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-2742607\r\n    static_assert(reference_constructs_from_temporary_v<const int&, to_int_prvalue<Explicitly>>);\r\n#endif // ^^^ no workaround ^^^\r\n    static_assert(reference_constructs_from_temporary_v<const long&, to_int_prvalue<Explicitly>>\r\n                  == !static_cast<bool>(Explicitly));\r\n}\r\n\r\nvoid test_to_int_ref_all() {\r\n    test_to_int_ref<conv_explicitly::no>();\r\n    test_to_int_ref<conv_explicitly::yes>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2255R2_reference_converts_from_temporary/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2255R2_reference_converts_from_temporary/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nenum class conv_explicitly : bool {\r\n    no,\r\n    yes,\r\n};\r\n\r\ntemplate <conv_explicitly Explicitly>\r\nstruct to_int_lvalue {\r\n    explicit(static_cast<bool>(Explicitly)) operator int&() const;\r\n};\r\n\r\ntemplate <conv_explicitly Explicitly>\r\nstruct to_int_xvalue {\r\n    explicit(static_cast<bool>(Explicitly)) operator int&&() const;\r\n};\r\n\r\ntemplate <conv_explicitly Explicitly>\r\nstruct to_int_prvalue {\r\n    explicit(static_cast<bool>(Explicitly)) operator int() const;\r\n};\r\n\r\ntemplate <class NonTempBindable>\r\nvoid test_one_non_temporary_bindable_type() {\r\n    static_assert(!reference_converts_from_temporary<NonTempBindable, void>::value);\r\n\r\n    static_assert(!reference_converts_from_temporary<NonTempBindable, void()>::value);\r\n    static_assert(!reference_converts_from_temporary<NonTempBindable, void() const&>::value);\r\n\r\n    static_assert(!reference_converts_from_temporary<NonTempBindable, int>::value);\r\n    static_assert(!reference_converts_from_temporary<NonTempBindable, const int>::value);\r\n    static_assert(!reference_converts_from_temporary<NonTempBindable, int[]>::value);\r\n    static_assert(!reference_converts_from_temporary<NonTempBindable, const int[]>::value);\r\n    static_assert(!reference_converts_from_temporary<NonTempBindable, int[42]>::value);\r\n    static_assert(!reference_converts_from_temporary<NonTempBindable, const int[42]>::value);\r\n\r\n    static_assert(!reference_converts_from_temporary<NonTempBindable, int&>::value);\r\n    static_assert(!reference_converts_from_temporary<NonTempBindable, int&&>::value);\r\n    static_assert(!reference_converts_from_temporary<NonTempBindable, const int&>::value);\r\n    static_assert(!reference_converts_from_temporary<NonTempBindable, const int&&>::value);\r\n    static_assert(!reference_converts_from_temporary<NonTempBindable, void (&)()>::value);\r\n    static_assert(!reference_converts_from_temporary<NonTempBindable, void (&&)()>::value);\r\n\r\n    static_assert(!reference_converts_from_temporary_v<NonTempBindable, void>);\r\n\r\n    static_assert(!reference_converts_from_temporary_v<NonTempBindable, void()>);\r\n    static_assert(!reference_converts_from_temporary_v<NonTempBindable, void() const&>);\r\n\r\n    static_assert(!reference_converts_from_temporary_v<NonTempBindable, int>);\r\n    static_assert(!reference_converts_from_temporary_v<NonTempBindable, const int>);\r\n    static_assert(!reference_converts_from_temporary_v<NonTempBindable, int[]>);\r\n    static_assert(!reference_converts_from_temporary_v<NonTempBindable, const int[]>);\r\n    static_assert(!reference_converts_from_temporary_v<NonTempBindable, int[42]>);\r\n    static_assert(!reference_converts_from_temporary_v<NonTempBindable, const int[42]>);\r\n\r\n    static_assert(!reference_converts_from_temporary_v<NonTempBindable, int&>);\r\n    static_assert(!reference_converts_from_temporary_v<NonTempBindable, int&&>);\r\n    static_assert(!reference_converts_from_temporary_v<NonTempBindable, const int&>);\r\n    static_assert(!reference_converts_from_temporary_v<NonTempBindable, const int&&>);\r\n    static_assert(!reference_converts_from_temporary_v<NonTempBindable, void (&)()>);\r\n    static_assert(!reference_converts_from_temporary_v<NonTempBindable, void (&&)()>);\r\n}\r\n\r\nvoid test_non_temporary_bindable_types() {\r\n    test_one_non_temporary_bindable_type<void>();\r\n\r\n    test_one_non_temporary_bindable_type<void()>();\r\n    test_one_non_temporary_bindable_type<void() const&>();\r\n\r\n    test_one_non_temporary_bindable_type<int>();\r\n    test_one_non_temporary_bindable_type<to_int_lvalue<conv_explicitly::yes>>();\r\n\r\n    test_one_non_temporary_bindable_type<int&>();\r\n    test_one_non_temporary_bindable_type<to_int_lvalue<conv_explicitly::yes>&>();\r\n\r\n    test_one_non_temporary_bindable_type<const volatile int&>();\r\n    test_one_non_temporary_bindable_type<const volatile to_int_lvalue<conv_explicitly::yes>&>();\r\n\r\n    test_one_non_temporary_bindable_type<void (&)()>();\r\n    test_one_non_temporary_bindable_type<void (&&)()>();\r\n}\r\n\r\ntemplate <class Obj>\r\nvoid test_one_cvref_to_object() {\r\n    static_assert(!reference_converts_from_temporary<Obj&, Obj>::value);\r\n    static_assert(!reference_converts_from_temporary<Obj&, const Obj>::value);\r\n    static_assert(!reference_converts_from_temporary<Obj&, volatile Obj>::value);\r\n    static_assert(!reference_converts_from_temporary<Obj&, const volatile Obj>::value);\r\n    static_assert(reference_converts_from_temporary<const Obj&, Obj>::value);\r\n    static_assert(reference_converts_from_temporary<const Obj&, const Obj>::value);\r\n    static_assert(reference_converts_from_temporary<const Obj&, volatile Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(reference_converts_from_temporary<const Obj&, const volatile Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(!reference_converts_from_temporary<volatile Obj&, Obj>::value);\r\n    static_assert(!reference_converts_from_temporary<volatile Obj&, const Obj>::value);\r\n    static_assert(!reference_converts_from_temporary<volatile Obj&, volatile Obj>::value);\r\n    static_assert(!reference_converts_from_temporary<volatile Obj&, const volatile Obj>::value);\r\n    static_assert(!reference_converts_from_temporary<const volatile Obj&, Obj>::value);\r\n    static_assert(!reference_converts_from_temporary<const volatile Obj&, const Obj>::value);\r\n    static_assert(!reference_converts_from_temporary<const volatile Obj&, volatile Obj>::value);\r\n    static_assert(!reference_converts_from_temporary<const volatile Obj&, const volatile Obj>::value);\r\n\r\n    static_assert(reference_converts_from_temporary<Obj&&, Obj>::value);\r\n    static_assert(reference_converts_from_temporary<Obj&&, const Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(reference_converts_from_temporary<Obj&&, volatile Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(reference_converts_from_temporary<Obj&&, const volatile Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(reference_converts_from_temporary<const Obj&&, Obj>::value);\r\n    static_assert(reference_converts_from_temporary<const Obj&&, const Obj>::value);\r\n    static_assert(reference_converts_from_temporary<const Obj&&, volatile Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(reference_converts_from_temporary<const Obj&&, const volatile Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(reference_converts_from_temporary<volatile Obj&&, Obj>::value);\r\n    static_assert(reference_converts_from_temporary<volatile Obj&&, const Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(reference_converts_from_temporary<volatile Obj&&, volatile Obj>::value);\r\n    static_assert(reference_converts_from_temporary<volatile Obj&&, const volatile Obj>::value == is_scalar_v<Obj>);\r\n    static_assert(reference_converts_from_temporary<const volatile Obj&&, Obj>::value);\r\n    static_assert(reference_converts_from_temporary<const volatile Obj&&, const Obj>::value);\r\n    static_assert(reference_converts_from_temporary<const volatile Obj&&, volatile Obj>::value);\r\n    static_assert(reference_converts_from_temporary<const volatile Obj&&, const volatile Obj>::value);\r\n\r\n    static_assert(!reference_converts_from_temporary_v<Obj&, Obj>);\r\n    static_assert(!reference_converts_from_temporary_v<Obj&, const Obj>);\r\n    static_assert(!reference_converts_from_temporary_v<Obj&, volatile Obj>);\r\n    static_assert(!reference_converts_from_temporary_v<Obj&, const volatile Obj>);\r\n    static_assert(reference_converts_from_temporary_v<const Obj&, Obj>);\r\n    static_assert(reference_converts_from_temporary_v<const Obj&, const Obj>);\r\n    static_assert(reference_converts_from_temporary_v<const Obj&, volatile Obj> == is_scalar_v<Obj>);\r\n    static_assert(reference_converts_from_temporary_v<const Obj&, const volatile Obj> == is_scalar_v<Obj>);\r\n    static_assert(!reference_converts_from_temporary_v<volatile Obj&, Obj>);\r\n    static_assert(!reference_converts_from_temporary_v<volatile Obj&, const Obj>);\r\n    static_assert(!reference_converts_from_temporary_v<volatile Obj&, volatile Obj>);\r\n    static_assert(!reference_converts_from_temporary_v<volatile Obj&, const volatile Obj>);\r\n    static_assert(!reference_converts_from_temporary_v<const volatile Obj&, Obj>);\r\n    static_assert(!reference_converts_from_temporary_v<const volatile Obj&, const Obj>);\r\n    static_assert(!reference_converts_from_temporary_v<const volatile Obj&, volatile Obj>);\r\n    static_assert(!reference_converts_from_temporary_v<const volatile Obj&, const volatile Obj>);\r\n\r\n    static_assert(reference_converts_from_temporary_v<Obj&&, Obj>);\r\n    static_assert(reference_converts_from_temporary_v<Obj&&, const Obj> == is_scalar_v<Obj>);\r\n    static_assert(reference_converts_from_temporary_v<Obj&&, volatile Obj> == is_scalar_v<Obj>);\r\n    static_assert(reference_converts_from_temporary_v<Obj&&, const volatile Obj> == is_scalar_v<Obj>);\r\n    static_assert(reference_converts_from_temporary_v<const Obj&&, Obj>);\r\n    static_assert(reference_converts_from_temporary_v<const Obj&&, const Obj>);\r\n    static_assert(reference_converts_from_temporary_v<const Obj&&, volatile Obj> == is_scalar_v<Obj>);\r\n    static_assert(reference_converts_from_temporary_v<const Obj&&, const volatile Obj> == is_scalar_v<Obj>);\r\n    static_assert(reference_converts_from_temporary_v<volatile Obj&&, Obj>);\r\n    static_assert(reference_converts_from_temporary_v<volatile Obj&&, const Obj> == is_scalar_v<Obj>);\r\n    static_assert(reference_converts_from_temporary_v<volatile Obj&&, volatile Obj>);\r\n    static_assert(reference_converts_from_temporary_v<volatile Obj&&, const volatile Obj> == is_scalar_v<Obj>);\r\n    static_assert(reference_converts_from_temporary_v<const volatile Obj&&, Obj>);\r\n    static_assert(reference_converts_from_temporary_v<const volatile Obj&&, const Obj>);\r\n    static_assert(reference_converts_from_temporary_v<const volatile Obj&&, volatile Obj>);\r\n    static_assert(reference_converts_from_temporary_v<const volatile Obj&&, const volatile Obj>);\r\n}\r\n\r\nvoid test_object_types() {\r\n    test_one_cvref_to_object<int>();\r\n    test_one_cvref_to_object<int[1]>();\r\n    test_one_cvref_to_object<to_int_lvalue<conv_explicitly::yes>>();\r\n    test_one_cvref_to_object<to_int_lvalue<conv_explicitly::no>>();\r\n    test_one_cvref_to_object<to_int_xvalue<conv_explicitly::yes>>();\r\n    test_one_cvref_to_object<to_int_xvalue<conv_explicitly::no>>();\r\n}\r\n\r\ntemplate <conv_explicitly Explicitly>\r\nvoid test_to_int_ref() {\r\n    static_assert(!reference_converts_from_temporary<int&, to_int_lvalue<Explicitly>>::value);\r\n    static_assert(!reference_converts_from_temporary<const int&, to_int_lvalue<Explicitly>>::value);\r\n    static_assert(reference_converts_from_temporary<const long&, to_int_lvalue<Explicitly>>::value\r\n                  == !static_cast<bool>(Explicitly));\r\n    static_assert(!reference_converts_from_temporary<int&, to_int_xvalue<Explicitly>>::value);\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-2742607\r\n    static_assert(!reference_converts_from_temporary<const int&, to_int_xvalue<Explicitly>>::value);\r\n#endif // ^^^ no workaround ^^^\r\n    static_assert(reference_converts_from_temporary<const long&, to_int_xvalue<Explicitly>>::value\r\n                  == !static_cast<bool>(Explicitly));\r\n    static_assert(!reference_converts_from_temporary<int&, to_int_prvalue<Explicitly>>::value);\r\n    static_assert(reference_converts_from_temporary<const int&, to_int_prvalue<Explicitly>>::value\r\n                  == !static_cast<bool>(Explicitly));\r\n    static_assert(reference_converts_from_temporary<const long&, to_int_prvalue<Explicitly>>::value\r\n                  == !static_cast<bool>(Explicitly));\r\n\r\n    static_assert(!reference_converts_from_temporary_v<int&, to_int_lvalue<Explicitly>>);\r\n    static_assert(!reference_converts_from_temporary_v<const int&, to_int_lvalue<Explicitly>>);\r\n    static_assert(\r\n        reference_converts_from_temporary_v<const long&, to_int_lvalue<Explicitly>> == !static_cast<bool>(Explicitly));\r\n    static_assert(!reference_converts_from_temporary_v<int&, to_int_xvalue<Explicitly>>);\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-2742607\r\n    static_assert(!reference_converts_from_temporary_v<const int&, to_int_xvalue<Explicitly>>);\r\n#endif // ^^^ no workaround ^^^\r\n    static_assert(\r\n        reference_converts_from_temporary_v<const long&, to_int_xvalue<Explicitly>> == !static_cast<bool>(Explicitly));\r\n\r\n    static_assert(!reference_converts_from_temporary_v<int&, to_int_prvalue<Explicitly>>);\r\n    static_assert(\r\n        reference_converts_from_temporary_v<const int&, to_int_prvalue<Explicitly>> == !static_cast<bool>(Explicitly));\r\n    static_assert(\r\n        reference_converts_from_temporary_v<const long&, to_int_prvalue<Explicitly>> == !static_cast<bool>(Explicitly));\r\n}\r\n\r\nvoid test_to_int_ref_all() {\r\n    test_to_int_ref<conv_explicitly::no>();\r\n    test_to_int_ref<conv_explicitly::yes>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2255R2_tuple_pair_construction/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2255R2_tuple_pair_construction/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\ntemplate <bool Expected, class TupleOrPair, class... Args>\r\nvoid assert_constref_constructible_single() {\r\n    static_assert(is_constructible_v<TupleOrPair, Args&...> == Expected);\r\n    static_assert(is_constructible_v<TupleOrPair, Args...> == Expected);\r\n    static_assert(is_constructible_v<TupleOrPair, const Args&...> == Expected);\r\n    static_assert(is_constructible_v<TupleOrPair, const Args...> == Expected);\r\n    if constexpr (sizeof...(Args) == 2) {\r\n        static_assert(is_constructible_v<TupleOrPair, pair<Args...>&> == Expected);\r\n        static_assert(is_constructible_v<TupleOrPair, const pair<Args...>&> == Expected);\r\n        static_assert(is_constructible_v<TupleOrPair, pair<Args...>> == Expected);\r\n        static_assert(is_constructible_v<TupleOrPair, const pair<Args...>> == Expected);\r\n    }\r\n    static_assert(is_constructible_v<TupleOrPair, tuple<Args...>&> == Expected);\r\n    static_assert(is_constructible_v<TupleOrPair, const tuple<Args...>&> == Expected);\r\n    static_assert(is_constructible_v<TupleOrPair, tuple<Args...>> == Expected);\r\n    static_assert(is_constructible_v<TupleOrPair, const tuple<Args...>> == Expected);\r\n}\r\n\r\ntemplate <bool Expected, class TupleOrPair, class... Args>\r\nvoid assert_mutref_constructible_single() {\r\n    static_assert(is_constructible_v<TupleOrPair, Args...> == Expected);\r\n    if constexpr (sizeof...(Args) == 2) {\r\n        static_assert(is_constructible_v<TupleOrPair, pair<Args...>> == Expected);\r\n    }\r\n    static_assert(is_constructible_v<TupleOrPair, tuple<Args...>> == Expected);\r\n}\r\n\r\nvoid assert_normal_constructible() {\r\n    assert_constref_constructible_single<true, tuple<const int&>, int>();\r\n    assert_constref_constructible_single<false, tuple<const int&>, long>();\r\n\r\n    assert_constref_constructible_single<true, tuple<const int&, const int&>, int, int>();\r\n    assert_constref_constructible_single<false, tuple<const int&, const int&>, long, int>();\r\n    assert_constref_constructible_single<false, tuple<const int&, const int&>, long, long>();\r\n\r\n    assert_constref_constructible_single<true, pair<const int&, const int&>, int, int>();\r\n    assert_constref_constructible_single<false, pair<const int&, const int&>, long, int>();\r\n    assert_constref_constructible_single<false, pair<const int&, const int&>, int, long>();\r\n\r\n    assert_mutref_constructible_single<true, tuple<int&&>, int>();\r\n    assert_mutref_constructible_single<false, tuple<int&&>, long>();\r\n\r\n    assert_mutref_constructible_single<true, tuple<int&&, int&&>, int, int>();\r\n    assert_mutref_constructible_single<false, tuple<int&&, int&&>, long, int>();\r\n    assert_mutref_constructible_single<false, tuple<int&&, int&&>, long, long>();\r\n\r\n    assert_mutref_constructible_single<true, pair<int&&, int&&>, int, int>();\r\n    assert_mutref_constructible_single<false, pair<int&&, int&&>, long, int>();\r\n    assert_mutref_constructible_single<false, pair<int&&, int&&>, int, long>();\r\n}\r\n\r\nstruct LvalueTempConverter {\r\n    operator int() &;\r\n    operator int&&() &&;\r\n    operator const int&() &&;\r\n};\r\n\r\ntemplate <class TupleOrPair, class... Args>\r\nvoid assert_lvalue_temp_converter_single() {\r\n    static_assert(!is_constructible_v<TupleOrPair, Args&..., LvalueTempConverter&>);\r\n    static_assert(is_constructible_v<TupleOrPair, Args..., LvalueTempConverter>);\r\n    if constexpr (sizeof...(Args) == 1) {\r\n        static_assert(!is_constructible_v<TupleOrPair, pair<Args&..., LvalueTempConverter&>>);\r\n        static_assert(is_constructible_v<TupleOrPair, pair<Args..., LvalueTempConverter>>);\r\n    }\r\n    static_assert(!is_constructible_v<TupleOrPair, tuple<Args&..., LvalueTempConverter&>>);\r\n    static_assert(is_constructible_v<TupleOrPair, tuple<Args..., LvalueTempConverter>>);\r\n}\r\n\r\nvoid assert_lvalue_temp_converter() {\r\n    assert_lvalue_temp_converter_single<tuple<const int&>>();\r\n    assert_lvalue_temp_converter_single<tuple<int&&>>();\r\n\r\n    assert_lvalue_temp_converter_single<tuple<const int&, const int&>, const int&>();\r\n    assert_lvalue_temp_converter_single<tuple<int&&, int&&>, int&&>();\r\n\r\n    assert_lvalue_temp_converter_single<pair<const int&, const int&>, const int&>();\r\n    assert_lvalue_temp_converter_single<pair<int&&, int&&>, int&&>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2273R3_constexpr_unique_ptr/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2273R3_constexpr_unique_ptr/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <typeinfo>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nstruct Dummy {\r\n    constexpr int test() const {\r\n        return 10;\r\n    }\r\n};\r\n\r\nconstexpr bool test_P2273R3_constexpr_unique_ptr() {\r\n    // [memory.syn]\r\n    {\r\n        auto p1 = make_unique<int>(42);\r\n        auto p2 = make_unique_for_overwrite<int>();\r\n        swap(p1, p2);\r\n        assert(p1 == p1);\r\n        assert(p1 != p2);\r\n\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, DevCom-1436243\r\n        auto p3 = make_unique<int[]>(10);\r\n        auto p4 = make_unique_for_overwrite<int[]>(4);\r\n        swap(p3, p4);\r\n        assert(p3 == p3);\r\n        assert(p3 != p4);\r\n#endif // ^^^ no workaround ^^^\r\n\r\n        auto p5 = unique_ptr<int>{nullptr};\r\n        assert(p5 == nullptr);\r\n        assert(nullptr == p5);\r\n        assert(!(p5 != nullptr));\r\n        assert(!(nullptr != p5));\r\n        assert(!(p5 < nullptr));\r\n        assert(!(nullptr < p5));\r\n        assert(p5 <= nullptr);\r\n        assert(nullptr <= p5);\r\n        assert(!(p5 > nullptr));\r\n        assert(!(nullptr > p5));\r\n        assert(p5 >= nullptr);\r\n        assert(nullptr >= p5);\r\n        assert((p5 <=> nullptr) == strong_ordering::equal);\r\n        assert((nullptr <=> p5) == strong_ordering::equal);\r\n    }\r\n\r\n    // changes in [unique.ptr.dltr.dflt] and [unique.ptr.dltr.dflt1]\r\n    // will be tested via destructors and copy assign/constructors\r\n\r\n    // [unique.ptr.single.general]\r\n    {\r\n        // constructors\r\n        auto p1 = unique_ptr<int>{new int{}};\r\n        auto d1 = default_delete<int>{};\r\n        auto p2 = unique_ptr<int>{new int{}, d1};\r\n        auto p3 = unique_ptr<int>{new int{}, default_delete<int>{}};\r\n        auto p4 = move(p3);\r\n        auto p5 = unique_ptr<int>{nullptr};\r\n        auto p6 = unique_ptr<int, default_delete<int>&>{new int{}, d1};\r\n        auto p7 = unique_ptr<int>{move(p6)};\r\n\r\n        // assignment\r\n        p3      = move(p4);\r\n        auto p8 = unique_ptr<int, default_delete<int>&>{new int{}, d1};\r\n        p7      = move(p8);\r\n        p1      = nullptr;\r\n\r\n        // observers\r\n        assert(*p2 == 0);\r\n        auto p9 = unique_ptr<Dummy>{new Dummy};\r\n        assert(p9->test() == 10);\r\n        assert(p2.get() != nullptr);\r\n        [[maybe_unused]] auto& d2 = p2.get_deleter();\r\n        [[maybe_unused]] auto& d3 = as_const(p2).get_deleter();\r\n        auto b1                   = static_cast<bool>(p2);\r\n        assert(b1);\r\n\r\n        // modifiers\r\n        p1.reset();\r\n        p1.reset(new int{});\r\n        auto manual_delete = p2.release();\r\n        delete manual_delete;\r\n        p5.swap(p1);\r\n    }\r\n\r\n    // [unique.ptr.runtime.general]\r\n    {\r\n        // constructors\r\n        auto p1 = unique_ptr<int[]>{new int[5]};\r\n        auto d1 = default_delete<int[]>{};\r\n        auto p2 = unique_ptr<int[]>{new int[5], d1};\r\n        auto p3 = unique_ptr<int[]>{new int[5], default_delete<int[]>{}};\r\n        auto p4 = move(p1);\r\n        auto p5 = unique_ptr<int[], default_delete<int[]>&>{new int[5], d1};\r\n        auto p6 = unique_ptr<int[]>{move(p5)};\r\n\r\n        // assignment\r\n        p1      = move(p4);\r\n        auto p7 = unique_ptr<int[], default_delete<int[]>&>{new int[5], d1};\r\n        p6      = move(p7);\r\n        p4      = nullptr;\r\n\r\n        // observers\r\n        p1[0] = 50;\r\n        assert(p1[0] == 50);\r\n        assert(p1.get() != nullptr);\r\n        [[maybe_unused]] auto& d2 = p1.get_deleter();\r\n        [[maybe_unused]] auto& d3 = as_const(p1).get_deleter();\r\n        auto b1                   = static_cast<bool>(p1);\r\n        assert(b1);\r\n\r\n        // modifiers\r\n        auto manual_delete = p1.release();\r\n        delete[] manual_delete;\r\n        p1.reset(new int[3]);\r\n        p1.reset(nullptr);\r\n        p1.reset();\r\n        p1.swap(p4);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(test_P2273R3_constexpr_unique_ptr());\r\n\r\n// Also test P1328R1 constexpr type_info::operator==()\r\nconstexpr bool test_P1328R1_constexpr_type_info_equality() {\r\n    assert(typeid(int) == typeid(int));\r\n    assert(typeid(int) != typeid(double));\r\n\r\n    assert(typeid(int) == typeid(int&)); // N4910 [expr.typeid]/5\r\n    assert(typeid(int) == typeid(const int&)); // N4910 [expr.typeid]/5\r\n    assert(typeid(int) == typeid(const int)); // N4910 [expr.typeid]/6\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(test_P1328R1_constexpr_type_info_equality());\r\n"
  },
  {
    "path": "tests/std/tests/P2278R4_basic_const_iterator/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2278R4_basic_const_iterator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <iterator>\r\n#include <memory>\r\n#include <ranges>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nconcept Pointer = is_pointer_v<T>;\r\n\r\ntemplate <class It>\r\nconcept HasPeek = requires(const It& iter) {\r\n    { iter.peek() } -> Pointer;\r\n    { iter.peek() } -> convertible_to<const iter_value_t<It>*>;\r\n};\r\n\r\nstatic_assert(!HasPeek<int*>);\r\nstatic_assert(!HasPeek<reverse_iterator<int*>>);\r\nstatic_assert(HasPeek<test::iterator<forward_iterator_tag, int>>);\r\n\r\ntemplate <input_iterator It>\r\nconstexpr void test_one(It iter) {\r\n    using ConstIt = basic_const_iterator<It>;\r\n    using Se      = test::sentinel<const iter_value_t<ConstIt>>;\r\n\r\n    // Validate iterator concepts\r\n    static_assert(input_iterator<ConstIt>);\r\n    static_assert(forward_iterator<ConstIt> == forward_iterator<It>);\r\n    static_assert(bidirectional_iterator<ConstIt> == bidirectional_iterator<It>);\r\n    static_assert(random_access_iterator<ConstIt> == random_access_iterator<It>);\r\n    static_assert(contiguous_iterator<ConstIt> == contiguous_iterator<It>);\r\n\r\n    // Validate nested types\r\n    static_assert(same_as<typename ConstIt::iterator_type, It>);\r\n    static_assert(same_as<typename ConstIt::value_type, iter_value_t<It>>);\r\n    static_assert(same_as<typename ConstIt::difference_type, iter_difference_t<It>>);\r\n    if constexpr (forward_iterator<It>) {\r\n        using Cat = iterator_traits<It>::iterator_category;\r\n        static_assert(same_as<typename ConstIt::iterator_category, Cat>);\r\n    }\r\n\r\n    // Validate default-initializability\r\n    static_assert(default_initializable<ConstIt> == default_initializable<It>);\r\n\r\n    same_as<ConstIt> auto citer = basic_const_iterator{iter};\r\n    if (!forward_iterator<It>) { // intentionally not if constexpr\r\n        return;\r\n    }\r\n\r\n    { // Validate basic_const_iterator::operator*()\r\n        same_as<iter_const_reference_t<It>> decltype(auto) val = *citer;\r\n        assert(val == *iter);\r\n        static_assert(noexcept(*citer) == noexcept(static_cast<iter_const_reference_t<It>>(*iter))); // strengthened\r\n    }\r\n\r\n    // Validate basic_const_iterator::operator->()\r\n    if constexpr (is_lvalue_reference_v<iter_reference_t<It>>\r\n                  && same_as<remove_cvref_t<iter_reference_t<It>>, iter_value_t<It>>) {\r\n        const same_as<const iter_value_t<It>*> auto ptr = citer.operator->();\r\n        assert(ptr == addressof(*citer));\r\n\r\n        if constexpr (contiguous_iterator<It>) {\r\n            static_assert(noexcept(citer.operator->()) == noexcept(to_address(iter))); // strengthened\r\n        } else {\r\n            static_assert(noexcept(citer.operator->()) == noexcept(addressof(*iter))); // strengthened\r\n        }\r\n    }\r\n\r\n    { // Validate basic_const_iterator::operator++()\r\n        same_as<ConstIt&> decltype(auto) citer2 = ++citer;\r\n        ++iter;\r\n        assert(citer2 == iter);\r\n        assert(*citer2 == *iter);\r\n        static_assert(noexcept(++citer) == noexcept(++iter)); // strengthened\r\n    }\r\n\r\n    // Validate basic_const_iterator::operator++(int)\r\n    if constexpr (forward_iterator<It>) {\r\n        same_as<ConstIt> decltype(auto) citer2 = citer++;\r\n        assert(citer2 == iter);\r\n        assert(*citer2 == *iter);\r\n        static_assert(\r\n            noexcept(citer++) == (noexcept(iter++) && is_nothrow_copy_constructible_v<ConstIt>) ); // strengthened\r\n    } else {\r\n        static_assert(is_void_v<decltype(citer++)>);\r\n        static_assert(noexcept(citer++) == noexcept(iter++)); // strengthened\r\n    }\r\n\r\n    iter++;\r\n    assert(citer == iter);\r\n    assert(*citer == *iter);\r\n\r\n    if constexpr (bidirectional_iterator<It>) {\r\n        { // Validate basic_const_iterator::operator--()\r\n            same_as<ConstIt&> decltype(auto) citer2 = --citer;\r\n            --iter;\r\n            assert(citer2 == iter);\r\n            assert(*citer2 == *iter);\r\n            static_assert(noexcept(--citer) == noexcept(--iter)); // strengthened\r\n        }\r\n\r\n        { // Validate basic_const_iterator::operator--(int)\r\n            same_as<ConstIt> decltype(auto) citer2 = citer--;\r\n            assert(citer2 == iter);\r\n            assert(*citer2 == *iter);\r\n            static_assert(\r\n                noexcept(citer--) == (noexcept(iter--) && is_nothrow_copy_constructible_v<ConstIt>) ); // strengthened\r\n\r\n            iter--;\r\n            assert(citer == iter);\r\n            assert(*citer == *iter);\r\n        }\r\n    }\r\n\r\n    if constexpr (random_access_iterator<It>) {\r\n        { // Validate basic_const_iterator::operator+=()\r\n            same_as<ConstIt&> decltype(auto) citer2 = (citer += 2);\r\n            iter += 2;\r\n            assert(citer2 == iter);\r\n            assert(*citer2 == *iter);\r\n            static_assert(noexcept(citer += 2) == noexcept(iter += 2)); // strengthened\r\n        }\r\n\r\n        { // Validate basic_const_iterator::operator-=()\r\n            same_as<ConstIt&> decltype(auto) citer2 = (citer -= 2);\r\n            iter -= 2;\r\n            assert(citer2 == iter);\r\n            assert(*citer2 == *iter);\r\n            static_assert(noexcept(citer -= 2) == noexcept(iter -= 2)); // strengthened\r\n        }\r\n\r\n        { // Validate basic_const_iterator::operator[]\r\n            same_as<iter_const_reference_t<It>> decltype(auto) val = citer[0];\r\n            assert(val == iter[0]);\r\n            static_assert(\r\n                noexcept(citer[0]) == noexcept(static_cast<iter_const_reference_t<It>>(iter[0]))); // strengthened\r\n        }\r\n\r\n        { // Validate operator{<, >, <=, >=, <=>}(const basic_const_iterator&, const basic_const_iterator&)\r\n            const same_as<ConstIt> auto citer2 = (citer + 1);\r\n            assert(citer < citer2);\r\n            assert(citer2 > citer);\r\n            assert(citer <= citer2);\r\n            assert(citer2 >= citer);\r\n            assert(citer2 <=> citer == partial_ordering::greater);\r\n\r\n            static_assert(noexcept(citer < citer2) == noexcept(citer.base() < citer2.base())); // strengthened\r\n            static_assert(noexcept(citer2 > citer) == noexcept(citer2.base() > citer.base())); // strengthened\r\n            static_assert(noexcept(citer <= citer2) == noexcept(citer.base() <= citer2.base())); // strengthened\r\n            static_assert(noexcept(citer2 >= citer) == noexcept(citer2.base() >= citer.base())); // strengthened\r\n            static_assert(noexcept(citer2 <=> citer) == noexcept(citer2.base() <=> citer.base())); // strengthened\r\n        }\r\n\r\n        iter += 2; // advance iter temporarily\r\n\r\n        { // Validate operator{<, >, <=, >=, <=>}(const basic_const_iterator&, const \"not same as\r\n          // basic_const_iterator\"&)\r\n            assert(citer < iter);\r\n            assert(!(citer > iter));\r\n            assert(citer <= iter);\r\n            assert(!(citer >= iter));\r\n            assert(citer <=> iter == partial_ordering::less);\r\n\r\n            static_assert(noexcept(citer < iter) == noexcept(citer.base() < iter)); // strengthened\r\n            static_assert(noexcept(!(citer > iter)) == noexcept(!(citer.base() > iter))); // strengthened\r\n            static_assert(noexcept(citer <= iter) == noexcept(citer.base() <= iter)); // strengthened\r\n            static_assert(noexcept(!(citer >= iter)) == noexcept(!(citer.base() >= iter))); // strengthened\r\n            static_assert(noexcept(citer <=> iter) == noexcept(citer.base() <=> iter)); // strengthened\r\n        }\r\n\r\n        { // Validate operator{<, >, <=, >=}(const \"not a const iterator\"&, const basic_const_iterator&)\r\n            assert(!(iter < citer));\r\n            assert(iter > citer);\r\n            assert(!(iter <= citer));\r\n            assert(iter >= citer);\r\n\r\n            static_assert(noexcept(!(iter < citer)) == noexcept(!(iter < citer.base()))); // strengthened\r\n            static_assert(noexcept(iter > citer) == noexcept(iter > citer.base())); // strengthened\r\n            static_assert(noexcept(!(iter <= citer)) == noexcept(!(iter <= citer.base()))); // strengthened\r\n            static_assert(noexcept(iter >= citer) == noexcept(iter >= citer.base())); // strengthened\r\n        }\r\n\r\n        { // Validate operator+(const basic_const_iterator&, difference_type)\r\n            const same_as<ConstIt> auto citer2 = (citer + 2);\r\n            const same_as<ConstIt> auto citer3 = (2 + citer);\r\n            assert(citer2 == citer3);\r\n            assert(*citer2 == *iter);\r\n\r\n            static_assert(noexcept(citer + 2) == noexcept(iter + 2)); // strengthened\r\n            static_assert(noexcept(2 + citer) == noexcept(2 + iter)); // strengthened\r\n        }\r\n\r\n        { // Validate operator-(const basic_const_iterator&, difference_type)\r\n            citer += 4;\r\n            const same_as<ConstIt> auto citer2 = (citer - 2);\r\n            assert(*citer2 == *iter);\r\n            citer -= 4;\r\n\r\n            static_assert(noexcept(citer - 2) == noexcept(iter - 2)); // strengthened\r\n        }\r\n\r\n        { // Validate operator-(const basic_const_iterator&, sized_sentinel)\r\n            assert(citer - citer == 0);\r\n            assert(citer - iter == -2);\r\n            assert(iter - citer == 2);\r\n            static_assert(noexcept(citer - citer) == noexcept(iter - iter)); // strengthened\r\n            static_assert(noexcept(citer - iter) == noexcept(iter - iter)); // strengthened\r\n            static_assert(noexcept(iter - citer) == noexcept(iter - iter)); // strengthened\r\n\r\n            if constexpr (HasPeek<It> && sized_sentinel_for<Se, It>) {\r\n                Se sent{iter.peek()};\r\n                assert(citer - sent == -2);\r\n                assert(sent - citer == 2);\r\n                static_assert(noexcept(citer - sent) == noexcept(iter - sent)); // strengthened\r\n                static_assert(noexcept(sent - citer) == noexcept(sent - iter)); // strengthened\r\n            }\r\n        }\r\n\r\n        iter -= 2;\r\n    }\r\n\r\n    // Validate to_address\r\n    if constexpr (contiguous_iterator<It> && HasPeek<It>) {\r\n        assert(to_address(citer) == iter.peek());\r\n    }\r\n\r\n    // Validate basic_const_iterator::operator==()\r\n    assert(citer == iter);\r\n    assert(iter == citer);\r\n    static_assert(noexcept(citer == iter) == noexcept(iter == iter));\r\n    if constexpr (HasPeek<It> && sentinel_for<Se, It>) {\r\n        Se sent{iter.peek()};\r\n        assert(citer == sent);\r\n        static_assert(noexcept(citer == sent) == noexcept(iter == sent)); // strengthened\r\n    }\r\n\r\n    { // Validate basic_const_iterator::iter_move()\r\n        using Expected = common_reference_t<const iter_value_t<It>&&, iter_rvalue_reference_t<It>>;\r\n        [[maybe_unused]] same_as<Expected> decltype(auto) val = ranges::iter_move(citer);\r\n        static_assert(\r\n            noexcept(ranges::iter_move(citer)) == noexcept(static_cast<Expected>(ranges::iter_move(citer.base()))));\r\n    }\r\n\r\n    { // Validate basic_const_iterator::base() const&\r\n        [[maybe_unused]] same_as<const It&> decltype(auto) base = citer.base();\r\n        static_assert(noexcept(citer.base()));\r\n    }\r\n\r\n    { // Validate basic_const_iterator::base() &&\r\n        [[maybe_unused]] same_as<It> decltype(auto) base = move(citer).base();\r\n        static_assert(noexcept(move(citer).base()) == is_nothrow_move_constructible_v<It>); // strengthened\r\n    }\r\n}\r\n\r\nvoid test_lwg3853() { // COMPILE-ONLY\r\n    basic_const_iterator<volatile int*> it;\r\n    [[maybe_unused]] same_as<const volatile int*> auto ptr = it.operator->();\r\n}\r\n\r\nstatic constexpr int some_ints[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};\r\n\r\n// Check LWG-3872\r\nusing Zipped = decltype(views::zip(some_ints) | views::as_const | views::as_rvalue);\r\nstatic_assert(same_as<ranges::range_reference_t<Zipped>, tuple<const int&&>>);\r\n\r\nstruct instantiator {\r\n    template <input_iterator It>\r\n    static constexpr void call() {\r\n        It iter{some_ints};\r\n        test_one(iter);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::CanDifference CanDiff>\r\nusing test_iterator = test::iterator<Category, const int, CanDiff, test::CanCompare::yes,\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nconstexpr void instantiation_test() {\r\n    using test::CanDifference;\r\n\r\n    // The iterator is sensitive to category and differencing, but oblivious to proxyness\r\n    instantiator::call<test_iterator<input_iterator_tag, CanDifference::no>>();\r\n    instantiator::call<test_iterator<forward_iterator_tag, CanDifference::no>>();\r\n    instantiator::call<test_iterator<bidirectional_iterator_tag, CanDifference::no>>();\r\n    instantiator::call<test_iterator<random_access_iterator_tag, CanDifference::no>>();\r\n    instantiator::call<test_iterator<contiguous_iterator_tag, CanDifference::no>>();\r\n\r\n    instantiator::call<test_iterator<input_iterator_tag, CanDifference::yes>>();\r\n    instantiator::call<test_iterator<forward_iterator_tag, CanDifference::yes>>();\r\n    instantiator::call<test_iterator<bidirectional_iterator_tag, CanDifference::yes>>();\r\n    instantiator::call<test_iterator<random_access_iterator_tag, CanDifference::yes>>();\r\n    instantiator::call<test_iterator<contiguous_iterator_tag, CanDifference::yes>>();\r\n}\r\n\r\ntemplate <class T>\r\nclass tracking_input_iterator {\r\npublic:\r\n    using value_type      = remove_const_t<T>;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    constexpr tracking_input_iterator() = default;\r\n\r\n    constexpr tracking_input_iterator(const tracking_input_iterator&) : copied{true} {}\r\n\r\n    constexpr tracking_input_iterator(tracking_input_iterator&&) : moved{true} {}\r\n\r\n    template <class U>\r\n        requires convertible_to<const U&, T>\r\n    constexpr tracking_input_iterator(const tracking_input_iterator<U>&) : copied{true} {}\r\n\r\n    template <class U>\r\n        requires convertible_to<U, T>\r\n    constexpr tracking_input_iterator(tracking_input_iterator<U>&&) : moved{true} {}\r\n\r\n    tracking_input_iterator& operator=(const tracking_input_iterator&) = default;\r\n    tracking_input_iterator& operator=(tracking_input_iterator&&)      = default;\r\n\r\n    constexpr tracking_input_iterator& operator++(); // not defined\r\n    constexpr void operator++(int); // not defined\r\n    T& operator*() const; // not defined\r\n\r\n    constexpr bool is_copied() const {\r\n        return copied;\r\n    }\r\n\r\n    constexpr bool is_moved() const {\r\n        return moved;\r\n    }\r\n\r\nprivate:\r\n    bool copied = false;\r\n    bool moved  = false;\r\n};\r\n\r\nstatic_assert(input_iterator<tracking_input_iterator<int>>);\r\nstatic_assert(!_Constant_iterator<tracking_input_iterator<int>>);\r\nstatic_assert(_Constant_iterator<tracking_input_iterator<const int>>);\r\n\r\n// P2836R1 basic_const_iterator Should Follow Its Underlying Type's Convertibility\r\nconstexpr void test_p2836r1() {\r\n    { // Code from P2836R1\r\n        vector<int> v;\r\n        auto t  = v | views::take_while([](const int x) { return x < 100; });\r\n        auto f  = [](vector<int>::const_iterator) {};\r\n        auto i2 = ranges::cbegin(t);\r\n        f(i2); // Error before P2836R1\r\n    }\r\n\r\n    {\r\n        tracking_input_iterator<int> i;\r\n        basic_const_iterator ci{i};\r\n\r\n        tracking_input_iterator<const float> j1 = ci;\r\n        assert(j1.is_copied());\r\n        assert(!j1.is_moved());\r\n\r\n        tracking_input_iterator<const long> j2 = move(ci);\r\n        assert(!j2.is_copied());\r\n        assert(j2.is_moved());\r\n\r\n        // Incorrect conversions\r\n        static_assert(!constructible_from<tracking_input_iterator<void* const>, const decltype(ci)&>);\r\n        static_assert(!constructible_from<tracking_input_iterator<void* const>, decltype(ci)>);\r\n\r\n        // Non-const target iterator\r\n        static_assert(!constructible_from<tracking_input_iterator<float>, const decltype(ci)&>);\r\n        static_assert(!constructible_from<tracking_input_iterator<long>, decltype(ci)>);\r\n    }\r\n}\r\n\r\n// GH-5321 \"<xutility>: basic_const_iterator<int *> Cannot Convert to basic_const_iterator<const int *>\"\r\nconstexpr void test_conversion_instantiation() {\r\n    struct Base {};\r\n    struct Derived : Base {};\r\n\r\n    {\r\n        basic_const_iterator<const int*> cit = basic_const_iterator<int*>{};\r\n        assert(cit.base() == nullptr);\r\n    }\r\n    {\r\n        int n{};\r\n        basic_const_iterator<const int*> cit = basic_const_iterator<int*>{&n};\r\n        assert(cit.base() == &n);\r\n    }\r\n    {\r\n        basic_const_iterator<Base*> cit = basic_const_iterator<Derived*>{};\r\n        assert(cit.base() == nullptr);\r\n    }\r\n    {\r\n        Derived d{};\r\n        basic_const_iterator<Base*> cit = basic_const_iterator<Derived*>{&d};\r\n        assert(cit.base() == static_cast<Base*>(&d));\r\n    }\r\n}\r\n\r\nconstexpr bool all_tests() {\r\n    instantiation_test();\r\n    test_p2836r1();\r\n    test_conversion_instantiation();\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(all_tests());\r\n    all_tests();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2278R4_const_span/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2278R4_const_span/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <concepts>\r\n#include <iterator>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nenum class Const : bool { no, yes };\r\nenum class Dynamic : bool { no, yes };\r\n\r\nstatic_assert(!to_underlying(Const::no) && to_underlying(Const::yes));\r\nstatic_assert(!to_underlying(Dynamic::no) && to_underlying(Dynamic::yes));\r\n\r\ntemplate <Const IsConst, Dynamic IsDynamic>\r\nconstexpr bool test() {\r\n    using T      = conditional_t<to_underlying(IsConst), const int, int>;\r\n    using Span   = span<T, to_underlying(IsDynamic) ? dynamic_extent : 3>;\r\n    using CIt    = Span::const_iterator;\r\n    using CRevIt = Span::const_reverse_iterator;\r\n\r\n    // Validate iterator properties\r\n    static_assert(contiguous_iterator<CIt>);\r\n    static_assert(random_access_iterator<CRevIt>);\r\n    static_assert(same_as<CIt, const_iterator<typename Span::iterator>>);\r\n    static_assert(same_as<CRevIt, const_iterator<typename Span::reverse_iterator>>);\r\n    static_assert(same_as<CIt, const_iterator<CIt>>);\r\n    static_assert(same_as<CRevIt, const_iterator<CRevIt>>);\r\n    static_assert(same_as<iter_value_t<CIt>, remove_cv_t<T>>);\r\n    static_assert(same_as<iter_value_t<CRevIt>, remove_cv_t<T>>);\r\n    static_assert(same_as<iter_reference_t<CIt>, const T&>);\r\n    static_assert(same_as<iter_reference_t<CRevIt>, const T&>);\r\n\r\n    T elems[3] = {1, 22, 333};\r\n    const Span s{elems};\r\n\r\n    { // Validate span::cbegin\r\n        same_as<CIt> auto it = s.cbegin();\r\n        assert(it == s.begin());\r\n        assert(*it == 1);\r\n        static_assert(noexcept(s.cbegin()));\r\n    }\r\n\r\n    { // Validate span::cend\r\n        same_as<CIt> auto it = s.cend();\r\n        assert(it == s.end());\r\n        assert(it[-1] == 333);\r\n        static_assert(noexcept(s.cend()));\r\n    }\r\n\r\n    { // Validate span::crbegin\r\n        same_as<CRevIt> auto it = s.crbegin();\r\n        assert(it == s.rbegin());\r\n        assert(*it == 333);\r\n        static_assert(noexcept(s.crbegin()));\r\n    }\r\n\r\n    { // Validate span::crend\r\n        same_as<CRevIt> auto it = s.crend();\r\n        assert(it == s.rend());\r\n        assert(it[-1] == 1);\r\n        static_assert(noexcept(s.crend()));\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(test<Const::no, Dynamic::no>());\r\n    static_assert(test<Const::yes, Dynamic::no>());\r\n    static_assert(test<Const::no, Dynamic::yes>());\r\n    static_assert(test<Const::yes, Dynamic::yes>());\r\n\r\n    test<Const::no, Dynamic::no>();\r\n    test<Const::yes, Dynamic::no>();\r\n    test<Const::no, Dynamic::yes>();\r\n    test<Const::yes, Dynamic::yes>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2278R4_ranges_const_iterator_machinery/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2278R4_ranges_const_iterator_machinery/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <deque>\r\n#include <forward_list>\r\n#include <istream>\r\n#include <list>\r\n#include <ranges>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class It>\r\nconcept CanIterConstRef = requires { typename iter_const_reference_t<It>; };\r\n\r\ntemplate <class It>\r\nconcept CanConstIterator = requires(It it) {\r\n    typename const_iterator<It>;\r\n    { make_const_iterator(move(it)) } -> same_as<const_iterator<It>>;\r\n};\r\n\r\ntemplate <class Se>\r\nconcept CanConstSentinel = requires(Se se) {\r\n    typename const_sentinel<Se>;\r\n    { make_const_sentinel(move(se)) } -> same_as<const_sentinel<Se>>;\r\n};\r\n\r\nstatic_assert(!CanIterConstRef<int>);\r\nstatic_assert(!CanIterConstRef<list<int>>);\r\nstatic_assert(!CanIterConstRef<deque<int>>);\r\n\r\nnamespace test_common_type {\r\n    struct CommonThing {};\r\n\r\n    template <class T>\r\n    struct InIter {\r\n        using value_type      = T;\r\n        using difference_type = ptrdiff_t;\r\n\r\n        value_type& operator*() const; // not defined\r\n        InIter& operator++(); // not defined\r\n        void operator++(int); // not defined\r\n        operator CommonThing() const; // not defined\r\n    };\r\n\r\n    static_assert(input_iterator<InIter<int>>);\r\n    static_assert(input_iterator<InIter<long>>);\r\n} // namespace test_common_type\r\n\r\ntemplate <class T, class U>\r\nstruct std::common_type<test_common_type::InIter<T>, test_common_type::InIter<U>> {\r\n    using type = test_common_type::CommonThing;\r\n};\r\n\r\nstatic_assert(common_with<test_common_type::InIter<int>, test_common_type::InIter<long>>);\r\n\r\nnamespace test_common_type {\r\n    template <class T, class U>\r\n    concept CanCommonType = requires { typename common_type_t<T, U>; };\r\n\r\n    // Validate invalid common types\r\n    static_assert(!CanCommonType<basic_const_iterator<int*>, long*>);\r\n    static_assert(!CanCommonType<int*, basic_const_iterator<long*>>);\r\n    static_assert(!CanCommonType<basic_const_iterator<int*>, basic_const_iterator<long*>>);\r\n    static_assert(!CanCommonType<basic_const_iterator<InIter<int>>, InIter<long>>);\r\n    static_assert(!CanCommonType<InIter<int>, basic_const_iterator<InIter<long>>>);\r\n    static_assert(!CanCommonType<basic_const_iterator<InIter<int>>, basic_const_iterator<InIter<long>>>);\r\n\r\n    // Validate common_type\r\n    static_assert(same_as<common_type_t<basic_const_iterator<int*>, const int*>, basic_const_iterator<const int*>>);\r\n    static_assert(same_as<common_type_t<const int*, basic_const_iterator<int*>>, basic_const_iterator<const int*>>);\r\n    static_assert(same_as<common_type_t<basic_const_iterator<const int*>, int*>, basic_const_iterator<const int*>>);\r\n    static_assert(same_as<common_type_t<int*, basic_const_iterator<const int*>>, basic_const_iterator<const int*>>);\r\n    static_assert(same_as<common_type_t<basic_const_iterator<int*>, basic_const_iterator<const int*>>,\r\n        basic_const_iterator<const int*>>);\r\n    static_assert(same_as<common_type_t<basic_const_iterator<const int*>, basic_const_iterator<int*>>,\r\n        basic_const_iterator<const int*>>);\r\n\r\n    static_assert(same_as<common_type_t<basic_const_iterator<volatile int*>, const int*>,\r\n        basic_const_iterator<const volatile int*>>);\r\n    static_assert(same_as<common_type_t<const int*, basic_const_iterator<volatile int*>>,\r\n        basic_const_iterator<const volatile int*>>);\r\n    static_assert(same_as<common_type_t<volatile int*, basic_const_iterator<const int*>>,\r\n        basic_const_iterator<const volatile int*>>);\r\n    static_assert(same_as<common_type_t<basic_const_iterator<const int*>, volatile int*>,\r\n        basic_const_iterator<const volatile int*>>);\r\n\r\n    template <class T, class U>\r\n        requires requires {\r\n            typename common_type_t<T, basic_const_iterator<U>>;\r\n            typename common_type_t<basic_const_iterator<T>, U>;\r\n            typename common_type_t<basic_const_iterator<T>, basic_const_iterator<U>>;\r\n        }\r\n    void test_lwg3862(); // not defined\r\n\r\n    template <class T, class U>\r\n    concept VerifyLWG3862 = requires { test_lwg3862<T, U>(); };\r\n\r\n    static_assert(!VerifyLWG3862<InIter<int>, InIter<long>>); // Hard error before LWG-3862\r\n} // namespace test_common_type\r\n\r\nnamespace test_pointer {\r\n    using Ptr = int*;\r\n    static_assert(CanIterConstRef<Ptr>);\r\n    static_assert(CanConstIterator<Ptr>);\r\n    static_assert(CanConstSentinel<Ptr>);\r\n    static_assert(same_as<iter_const_reference_t<Ptr>, const int&>);\r\n    static_assert(same_as<const_iterator<Ptr>, basic_const_iterator<Ptr>>);\r\n    static_assert(same_as<iter_reference_t<const_iterator<Ptr>>, const int&>);\r\n    static_assert(same_as<const_sentinel<Ptr>, basic_const_iterator<Ptr>>);\r\n    static_assert(same_as<iter_reference_t<const_sentinel<Ptr>>, const int&>);\r\n\r\n    using ConstPtr = const int*;\r\n    static_assert(CanIterConstRef<ConstPtr>);\r\n    static_assert(CanConstIterator<ConstPtr>);\r\n    static_assert(CanConstSentinel<ConstPtr>);\r\n    static_assert(same_as<iter_const_reference_t<ConstPtr>, const int&>);\r\n    static_assert(same_as<const_iterator<ConstPtr>, ConstPtr>);\r\n    static_assert(same_as<iter_reference_t<const_iterator<ConstPtr>>, const int&>);\r\n    static_assert(same_as<const_sentinel<ConstPtr>, ConstPtr>);\r\n} // namespace test_pointer\r\n\r\nnamespace test_random_access_iter {\r\n    using Iter = deque<int>::iterator;\r\n    static_assert(CanIterConstRef<Iter>);\r\n    static_assert(CanConstIterator<Iter>);\r\n    static_assert(CanConstSentinel<Iter>);\r\n    static_assert(same_as<iter_const_reference_t<Iter>, const int&>);\r\n    static_assert(same_as<const_iterator<Iter>, basic_const_iterator<Iter>>);\r\n    static_assert(same_as<iter_reference_t<const_iterator<Iter>>, const int&>);\r\n    static_assert(same_as<const_sentinel<Iter>, basic_const_iterator<Iter>>);\r\n    static_assert(same_as<iter_reference_t<const_sentinel<Iter>>, const int&>);\r\n\r\n    using ConstIter = deque<int>::const_iterator;\r\n    static_assert(CanIterConstRef<ConstIter>);\r\n    static_assert(CanConstIterator<ConstIter>);\r\n    static_assert(CanConstSentinel<ConstIter>);\r\n    static_assert(same_as<iter_const_reference_t<ConstIter>, const int&>);\r\n    static_assert(same_as<const_iterator<ConstIter>, ConstIter>);\r\n    static_assert(same_as<iter_reference_t<const_iterator<ConstIter>>, const int&>);\r\n    static_assert(same_as<const_sentinel<ConstIter>, ConstIter>);\r\n} // namespace test_random_access_iter\r\n\r\nnamespace test_bidirectional_iter {\r\n    using Iter = list<int>::iterator;\r\n    static_assert(CanIterConstRef<Iter>);\r\n    static_assert(CanConstIterator<Iter>);\r\n    static_assert(CanConstSentinel<Iter>);\r\n    static_assert(same_as<iter_const_reference_t<Iter>, const int&>);\r\n    static_assert(same_as<const_iterator<Iter>, basic_const_iterator<Iter>>);\r\n    static_assert(same_as<iter_reference_t<const_iterator<Iter>>, const int&>);\r\n    static_assert(same_as<const_sentinel<Iter>, basic_const_iterator<Iter>>);\r\n    static_assert(same_as<iter_reference_t<const_sentinel<Iter>>, const int&>);\r\n\r\n    using ConstIter = list<int>::const_iterator;\r\n    static_assert(CanIterConstRef<ConstIter>);\r\n    static_assert(CanConstIterator<ConstIter>);\r\n    static_assert(CanConstSentinel<ConstIter>);\r\n    static_assert(same_as<iter_const_reference_t<ConstIter>, const int&>);\r\n    static_assert(same_as<const_iterator<ConstIter>, ConstIter>);\r\n    static_assert(same_as<iter_reference_t<const_iterator<ConstIter>>, const int&>);\r\n    static_assert(same_as<const_sentinel<ConstIter>, ConstIter>);\r\n} // namespace test_bidirectional_iter\r\n\r\nnamespace test_forward_iter {\r\n    using Iter = forward_list<int>::iterator;\r\n    static_assert(CanIterConstRef<Iter>);\r\n    static_assert(CanConstIterator<Iter>);\r\n    static_assert(CanConstSentinel<Iter>);\r\n    static_assert(same_as<iter_const_reference_t<Iter>, const int&>);\r\n    static_assert(same_as<const_iterator<Iter>, basic_const_iterator<Iter>>);\r\n    static_assert(same_as<iter_reference_t<const_iterator<Iter>>, const int&>);\r\n    static_assert(same_as<const_sentinel<Iter>, basic_const_iterator<Iter>>);\r\n    static_assert(same_as<iter_reference_t<const_sentinel<Iter>>, const int&>);\r\n\r\n    using ConstIter = forward_list<int>::const_iterator;\r\n    static_assert(CanIterConstRef<ConstIter>);\r\n    static_assert(CanConstIterator<ConstIter>);\r\n    static_assert(CanConstSentinel<ConstIter>);\r\n    static_assert(same_as<iter_const_reference_t<ConstIter>, const int&>);\r\n    static_assert(same_as<const_iterator<ConstIter>, ConstIter>);\r\n    static_assert(same_as<iter_reference_t<const_iterator<ConstIter>>, const int&>);\r\n    static_assert(same_as<const_sentinel<ConstIter>, ConstIter>);\r\n} // namespace test_forward_iter\r\n\r\nnamespace test_input_iter {\r\n    using Iter = ranges::iterator_t<ranges::istream_view<int>>;\r\n    static_assert(CanIterConstRef<Iter>);\r\n    static_assert(CanConstIterator<Iter>);\r\n    static_assert(!CanConstSentinel<Iter>);\r\n    static_assert(same_as<iter_const_reference_t<Iter>, const int&>);\r\n    static_assert(same_as<const_iterator<Iter>, basic_const_iterator<Iter>>);\r\n    static_assert(same_as<iter_reference_t<const_iterator<Iter>>, const int&>);\r\n} // namespace test_input_iter\r\n\r\nnamespace test_prvalue_iter {\r\n    using TransformView = ranges::transform_view<ranges::ref_view<deque<float>>, int (*)(float)>;\r\n\r\n    using Iter = ranges::iterator_t<TransformView>;\r\n    static_assert(CanIterConstRef<Iter>);\r\n    static_assert(CanConstIterator<Iter>);\r\n    static_assert(CanConstSentinel<Iter>);\r\n    static_assert(same_as<iter_const_reference_t<Iter>, int>);\r\n    static_assert(same_as<const_iterator<Iter>, Iter>);\r\n    static_assert(same_as<iter_reference_t<const_iterator<Iter>>, int>);\r\n    static_assert(same_as<const_sentinel<Iter>, Iter>);\r\n    static_assert(same_as<iter_reference_t<const_sentinel<Iter>>, int>);\r\n\r\n    using ConstIter = ranges::iterator_t<const TransformView>;\r\n    static_assert(CanIterConstRef<ConstIter>);\r\n    static_assert(CanConstIterator<ConstIter>);\r\n    static_assert(CanConstSentinel<ConstIter>);\r\n    static_assert(same_as<iter_const_reference_t<ConstIter>, int>);\r\n    static_assert(same_as<const_iterator<ConstIter>, ConstIter>);\r\n    static_assert(same_as<iter_reference_t<const_iterator<ConstIter>>, int>);\r\n    static_assert(same_as<const_sentinel<ConstIter>, ConstIter>);\r\n} // namespace test_prvalue_iter\r\n\r\nnamespace test_vector_bool_iter {\r\n    using Iter = vector<bool>::iterator;\r\n    static_assert(CanIterConstRef<Iter>);\r\n    static_assert(CanConstIterator<Iter>);\r\n    static_assert(CanConstSentinel<Iter>);\r\n    static_assert(same_as<iter_const_reference_t<Iter>, bool>);\r\n    static_assert(same_as<const_iterator<Iter>, basic_const_iterator<Iter>>);\r\n    static_assert(same_as<iter_reference_t<const_iterator<Iter>>, bool>);\r\n    static_assert(same_as<const_sentinel<Iter>, basic_const_iterator<Iter>>);\r\n    static_assert(same_as<iter_reference_t<const_sentinel<Iter>>, bool>);\r\n\r\n    using ConstIter = vector<bool>::const_iterator;\r\n    static_assert(CanIterConstRef<ConstIter>);\r\n    static_assert(CanConstIterator<ConstIter>);\r\n    static_assert(CanConstSentinel<ConstIter>);\r\n    static_assert(same_as<iter_const_reference_t<ConstIter>, bool>);\r\n    static_assert(same_as<const_iterator<ConstIter>, ConstIter>);\r\n    static_assert(same_as<iter_reference_t<const_iterator<ConstIter>>, bool>);\r\n    static_assert(same_as<const_sentinel<ConstIter>, ConstIter>);\r\n} // namespace test_vector_bool_iter\r\n\r\n// Test standard sentinels\r\nstatic_assert(!CanIterConstRef<default_sentinel_t>);\r\nstatic_assert(!CanConstIterator<default_sentinel_t>);\r\nstatic_assert(CanConstSentinel<default_sentinel_t>);\r\nstatic_assert(same_as<const_sentinel<default_sentinel_t>, default_sentinel_t>);\r\n\r\nstatic_assert(!CanIterConstRef<unreachable_sentinel_t>);\r\nstatic_assert(!CanConstIterator<unreachable_sentinel_t>);\r\nstatic_assert(CanConstSentinel<unreachable_sentinel_t>);\r\nstatic_assert(same_as<const_sentinel<unreachable_sentinel_t>, unreachable_sentinel_t>);\r\n\r\nstruct NotSemiregular {\r\n    NotSemiregular()                      = default;\r\n    NotSemiregular(const NotSemiregular&) = delete;\r\n};\r\n\r\nstatic_assert(!CanConstSentinel<NotSemiregular>);\r\n"
  },
  {
    "path": "tests/std/tests/P2278R4_ranges_const_range_machinery/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2278R4_ranges_const_range_machinery/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <concepts>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <istream>\r\n#include <list>\r\n#include <ranges>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\n// New members (cbegin and cend) of `view_interface` are tested in `P0896R4_ranges_subrange\\test.cpp`.\r\n// Updated CPOs (cbegin, cdata, ...) are tested in `P0896R4_ranges_range_machinery\\test.cpp`\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Rng>\r\nconcept CanRangeConstIterator = requires { typename ranges::const_iterator_t<Rng>; };\r\n\r\ntemplate <class Rng>\r\nconcept CanRangeConstSentinel = requires { typename ranges::const_sentinel_t<Rng>; };\r\n\r\ntemplate <class Rng>\r\nconcept CanRangeConstReference = requires { typename ranges::range_const_reference_t<Rng>; };\r\n\r\nstatic_assert(!CanRangeConstIterator<void*>);\r\nstatic_assert(!CanRangeConstSentinel<void*>);\r\nstatic_assert(!CanRangeConstReference<void*>);\r\n\r\nnamespace test_array {\r\n    using Arr = int[10];\r\n    static_assert(CanRangeConstIterator<Arr>);\r\n    static_assert(CanRangeConstSentinel<Arr>);\r\n    static_assert(CanRangeConstReference<Arr>);\r\n    static_assert(same_as<ranges::const_iterator_t<Arr>, const int*>);\r\n    static_assert(same_as<ranges::const_sentinel_t<Arr>, const int*>);\r\n    static_assert(same_as<ranges::range_const_reference_t<Arr>, const int&>);\r\n    static_assert(!ranges::constant_range<Arr>);\r\n\r\n    using ConstArr = const Arr;\r\n    static_assert(CanRangeConstIterator<ConstArr>);\r\n    static_assert(CanRangeConstSentinel<ConstArr>);\r\n    static_assert(CanRangeConstReference<ConstArr>);\r\n    static_assert(same_as<ranges::const_iterator_t<ConstArr>, const int*>);\r\n    static_assert(same_as<ranges::const_sentinel_t<ConstArr>, const int*>);\r\n    static_assert(same_as<ranges::range_const_reference_t<ConstArr>, const int&>);\r\n    static_assert(ranges::constant_range<ConstArr>);\r\n} // namespace test_array\r\n\r\nnamespace test_random_access_range {\r\n    using Rng = deque<int>;\r\n    static_assert(CanRangeConstIterator<Rng>);\r\n    static_assert(CanRangeConstSentinel<Rng>);\r\n    static_assert(CanRangeConstReference<Rng>);\r\n    static_assert(same_as<ranges::const_iterator_t<Rng>, Rng::const_iterator>);\r\n    static_assert(same_as<ranges::const_sentinel_t<Rng>, Rng::const_iterator>);\r\n    static_assert(same_as<ranges::range_const_reference_t<Rng>, const int&>);\r\n    static_assert(!ranges::constant_range<Rng>);\r\n\r\n    using ConstRng = const deque<int>;\r\n    static_assert(CanRangeConstIterator<ConstRng>);\r\n    static_assert(CanRangeConstSentinel<ConstRng>);\r\n    static_assert(CanRangeConstReference<ConstRng>);\r\n    static_assert(same_as<ranges::const_iterator_t<ConstRng>, ConstRng::const_iterator>);\r\n    static_assert(same_as<ranges::const_sentinel_t<ConstRng>, ConstRng::const_iterator>);\r\n    static_assert(same_as<ranges::range_const_reference_t<ConstRng>, const int&>);\r\n    static_assert(ranges::constant_range<ConstRng>);\r\n} // namespace test_random_access_range\r\n\r\nnamespace test_bidirectional_range {\r\n    using Rng = list<int>;\r\n    static_assert(CanRangeConstIterator<Rng>);\r\n    static_assert(CanRangeConstSentinel<Rng>);\r\n    static_assert(CanRangeConstReference<Rng>);\r\n    static_assert(same_as<ranges::const_iterator_t<Rng>, Rng::const_iterator>);\r\n    static_assert(same_as<ranges::const_sentinel_t<Rng>, Rng::const_iterator>);\r\n    static_assert(same_as<ranges::range_const_reference_t<Rng>, const int&>);\r\n    static_assert(!ranges::constant_range<Rng>);\r\n\r\n    using ConstRng = const list<int>;\r\n    static_assert(CanRangeConstIterator<ConstRng>);\r\n    static_assert(CanRangeConstSentinel<ConstRng>);\r\n    static_assert(CanRangeConstReference<ConstRng>);\r\n    static_assert(same_as<ranges::const_iterator_t<ConstRng>, ConstRng::const_iterator>);\r\n    static_assert(same_as<ranges::const_sentinel_t<ConstRng>, ConstRng::const_iterator>);\r\n    static_assert(same_as<ranges::range_const_reference_t<ConstRng>, const int&>);\r\n    static_assert(ranges::constant_range<ConstRng>);\r\n} // namespace test_bidirectional_range\r\n\r\nnamespace test_forward_range {\r\n    using Rng = forward_list<int>;\r\n    static_assert(CanRangeConstIterator<Rng>);\r\n    static_assert(CanRangeConstSentinel<Rng>);\r\n    static_assert(CanRangeConstReference<Rng>);\r\n    static_assert(same_as<ranges::const_iterator_t<Rng>, Rng::const_iterator>);\r\n    static_assert(same_as<ranges::const_sentinel_t<Rng>, Rng::const_iterator>);\r\n    static_assert(same_as<ranges::range_const_reference_t<Rng>, const int&>);\r\n    static_assert(!ranges::constant_range<Rng>);\r\n\r\n    using ConstRng = const forward_list<int>;\r\n    static_assert(CanRangeConstIterator<ConstRng>);\r\n    static_assert(CanRangeConstSentinel<ConstRng>);\r\n    static_assert(CanRangeConstReference<ConstRng>);\r\n    static_assert(same_as<ranges::const_iterator_t<ConstRng>, ConstRng::const_iterator>);\r\n    static_assert(same_as<ranges::const_sentinel_t<ConstRng>, ConstRng::const_iterator>);\r\n    static_assert(same_as<ranges::range_const_reference_t<ConstRng>, const int&>);\r\n    static_assert(ranges::constant_range<ConstRng>);\r\n} // namespace test_forward_range\r\n\r\nnamespace test_input_range {\r\n    using Rng = ranges::istream_view<int>;\r\n    static_assert(CanRangeConstIterator<Rng>);\r\n    static_assert(CanRangeConstSentinel<Rng>);\r\n    static_assert(CanRangeConstReference<Rng>);\r\n    static_assert(same_as<ranges::const_iterator_t<Rng>, const_iterator<ranges::iterator_t<Rng>>>);\r\n    static_assert(same_as<ranges::const_sentinel_t<Rng>, default_sentinel_t>);\r\n    static_assert(same_as<ranges::range_const_reference_t<Rng>, const int&>);\r\n    static_assert(!ranges::constant_range<Rng>);\r\n} // namespace test_input_range\r\n\r\nnamespace test_prvalue_range {\r\n    using Rng = ranges::transform_view<ranges::ref_view<deque<float>>, int (*)(float)>;\r\n    static_assert(CanRangeConstIterator<Rng>);\r\n    static_assert(CanRangeConstSentinel<Rng>);\r\n    static_assert(CanRangeConstReference<Rng>);\r\n    static_assert(!same_as<ranges::const_iterator_t<Rng>, const_iterator<ranges::iterator_t<Rng>>>);\r\n    static_assert(!same_as<ranges::const_sentinel_t<Rng>, const_iterator<ranges::iterator_t<Rng>>>);\r\n    static_assert(same_as<ranges::range_const_reference_t<Rng>, int>);\r\n    static_assert(ranges::constant_range<Rng>);\r\n\r\n    using ConstRng = const Rng;\r\n    static_assert(CanRangeConstIterator<ConstRng>);\r\n    static_assert(CanRangeConstSentinel<ConstRng>);\r\n    static_assert(CanRangeConstReference<ConstRng>);\r\n    static_assert(same_as<ranges::const_iterator_t<ConstRng>, const_iterator<ranges::iterator_t<ConstRng>>>);\r\n    static_assert(same_as<ranges::const_sentinel_t<ConstRng>, const_iterator<ranges::iterator_t<ConstRng>>>);\r\n    static_assert(same_as<ranges::range_const_reference_t<ConstRng>, int>);\r\n    static_assert(ranges::constant_range<ConstRng>);\r\n} // namespace test_prvalue_range\r\n\r\nnamespace test_vector_bool {\r\n    using Vb = vector<bool>;\r\n    static_assert(CanRangeConstIterator<Vb>);\r\n    static_assert(CanRangeConstSentinel<Vb>);\r\n    static_assert(CanRangeConstReference<Vb>);\r\n    static_assert(same_as<ranges::const_iterator_t<Vb>, Vb::const_iterator>);\r\n    static_assert(same_as<ranges::const_sentinel_t<Vb>, Vb::const_iterator>);\r\n    static_assert(same_as<ranges::range_const_reference_t<Vb>, bool>);\r\n    static_assert(!ranges::constant_range<Vb>);\r\n\r\n    using ConstVb = const vector<bool>;\r\n    static_assert(CanRangeConstIterator<ConstVb>);\r\n    static_assert(CanRangeConstSentinel<ConstVb>);\r\n    static_assert(CanRangeConstReference<ConstVb>);\r\n    static_assert(same_as<ranges::const_iterator_t<ConstVb>, ConstVb::const_iterator>);\r\n    static_assert(same_as<ranges::const_sentinel_t<ConstVb>, ConstVb::const_iterator>);\r\n    static_assert(same_as<ranges::range_const_reference_t<ConstVb>, bool>);\r\n    static_assert(ranges::constant_range<ConstVb>);\r\n} // namespace test_vector_bool\r\n\r\ntemplate <class Rng>\r\nstatic constexpr void test_cpos(Rng&& rng) {\r\n    using ranges::iterator_t, ranges::sentinel_t;\r\n    using R = conditional_t<ranges::constant_range<const Rng&> && !ranges::constant_range<Rng&>, const Rng&, Rng&>;\r\n\r\n    { // Validate ranges::cbegin\r\n        using It = iterator_t<R>;\r\n\r\n        const same_as<const_iterator<It>> auto it = ranges::cbegin(rng);\r\n        if constexpr (equality_comparable<It>) {\r\n            if (ranges::forward_range<Rng>) { // intentionally not if constexpr\r\n                assert(it == ranges::begin(rng));\r\n            }\r\n        }\r\n\r\n        static_assert(noexcept(ranges::cbegin(rng))\r\n                      == (noexcept(ranges::begin(rng)) && is_nothrow_constructible_v<const_iterator<It>, It>) );\r\n    }\r\n\r\n    { // Validate ranges::cend\r\n        using Se = sentinel_t<R>;\r\n\r\n        const same_as<const_sentinel<Se>> auto se = ranges::cend(rng);\r\n        if constexpr (equality_comparable<Se>) {\r\n            assert(se == ranges::end(rng));\r\n        }\r\n\r\n        static_assert(noexcept(ranges::cend(rng))\r\n                      == (noexcept(ranges::end(rng)) && is_nothrow_constructible_v<const_sentinel<Se>, Se>) );\r\n    }\r\n\r\n    if constexpr (ranges::bidirectional_range<Rng>) {\r\n        if constexpr (CanRBegin<Rng>) { // Validate ranges::crbegin\r\n            using RevIt = decltype(ranges::rbegin(declval<R&>()));\r\n\r\n            const same_as<const_iterator<RevIt>> auto it = ranges::crbegin(rng);\r\n            assert(it == ranges::rbegin(rng));\r\n\r\n            static_assert(\r\n                noexcept(ranges::crbegin(rng))\r\n                == (noexcept(ranges::rbegin(rng)) && is_nothrow_constructible_v<const_iterator<RevIt>, RevIt>) );\r\n        }\r\n\r\n        if constexpr (CanREnd<Rng>) { // Validate ranges::crend\r\n            using RevSe = decltype(ranges::rend(declval<R&>()));\r\n\r\n            const same_as<const_sentinel<RevSe>> auto it = ranges::crend(rng);\r\n            assert(it == ranges::rend(rng));\r\n\r\n            static_assert(\r\n                noexcept(ranges::crend(rng))\r\n                == (noexcept(ranges::rend(rng)) && is_nothrow_constructible_v<const_sentinel<RevSe>, RevSe>) );\r\n        }\r\n    }\r\n\r\n    if constexpr (ranges::contiguous_range<Rng>) { // Validate ranges::cdata\r\n        const same_as<const ranges::range_value_t<Rng>*> auto ptr = ranges::cdata(rng);\r\n        assert(ptr == ranges::data(rng));\r\n\r\n        static_assert(noexcept(ranges::cdata(rng)) == noexcept(ranges::data(rng)));\r\n    }\r\n}\r\n\r\nstruct instantiator {\r\n    template <class Rng>\r\n    static constexpr void call() {\r\n        int some_ints[] = {1, 2, 3};\r\n        Rng rng{some_ints};\r\n        test_cpos(rng);\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_in<instantiator, const int>(), true));\r\n    test_in<instantiator, const int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2278R4_views_as_const/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2278R4_views_as_const/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewAsConst = requires(Rng&& r) { views::as_const(forward<Rng>(r)); };\r\n\r\ntemplate <class>\r\nstruct RefViewUnderlyingType {};\r\n\r\ntemplate <class T>\r\nstruct RefViewUnderlyingType<ranges::ref_view<T>> {\r\n    using type = T;\r\n};\r\n\r\ntemplate <class>\r\nconstexpr bool CanReconstructRefView = false;\r\n\r\ntemplate <class T>\r\nconstexpr bool CanReconstructRefView<ranges::ref_view<T>> = ranges::constant_range<const T>;\r\n\r\ntemplate <ranges::input_range Rng, class Expected>\r\nconstexpr bool test_one(Rng&& rng, Expected&& expected) {\r\n    using ranges::ref_view, ranges::as_const_view, ranges::begin, ranges::end, ranges::cbegin, ranges::cend,\r\n        ranges::iterator_t, ranges::sentinel_t, ranges::const_iterator_t, ranges::const_sentinel_t, ranges::prev,\r\n        ranges::forward_range, ranges::bidirectional_range, ranges::random_access_range, ranges::contiguous_range,\r\n        ranges::common_range, ranges::sized_range, ranges::constant_range;\r\n\r\n    using V = views::all_t<Rng>;\r\n    using R = as_const_view<V>;\r\n\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n\r\n    static_assert(ranges::view<R>);\r\n    static_assert(ranges::input_range<R> == ranges::input_range<V>);\r\n    static_assert(forward_range<R> == forward_range<V>);\r\n    static_assert(bidirectional_range<R> == bidirectional_range<V>);\r\n    static_assert(random_access_range<R> == random_access_range<V>);\r\n    static_assert(contiguous_range<R>\r\n                  == (contiguous_range<V> && is_lvalue_reference_v<iter_const_reference_t<ranges::iterator_t<V>>>) );\r\n    static_assert(constant_range<R>);\r\n\r\n    static_assert(!indirectly_writable<iterator_t<R>, ranges::range_value_t<Rng>>);\r\n    static_assert(!indirectly_writable<iterator_t<R>, ranges::range_reference_t<Rng>>);\r\n\r\n    // Validate default-initializability\r\n    static_assert(default_initializable<R> == default_initializable<V>);\r\n\r\n    // Validate borrowed_range\r\n    static_assert(ranges::borrowed_range<R> == ranges::borrowed_range<V>);\r\n\r\n    // Validate range adaptor object\r\n    if constexpr (constant_range<Rng>) { // range adaptor results in views::all_t\r\n        // ... with lvalue argument\r\n        static_assert(CanViewAsConst<Rng&> == (!is_view || copy_constructible<V>) );\r\n        if constexpr (CanViewAsConst<Rng&>) {\r\n            constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::as_const(forward<Rng>(rng))), V>);\r\n            static_assert(noexcept(views::as_const(forward<Rng>(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(forward<Rng>(rng) | views::as_const), V>);\r\n            static_assert(noexcept(forward<Rng>(rng) | views::as_const) == is_noexcept);\r\n        }\r\n\r\n        // ... with const lvalue argument\r\n        static_assert(CanViewAsConst<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n        if constexpr (CanViewAsConst<const remove_reference_t<Rng>&>) {\r\n            using VC                   = views::all_t<const remove_reference_t<Rng>&>;\r\n            constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::as_const(as_const(rng))), VC>);\r\n            static_assert(noexcept(views::as_const(as_const(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | views::as_const), VC>);\r\n            static_assert(noexcept(as_const(rng) | views::as_const) == is_noexcept);\r\n        }\r\n\r\n        // ... with rvalue argument\r\n        static_assert(CanViewAsConst<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n        if constexpr (CanViewAsConst<remove_reference_t<Rng>>) {\r\n            using VS                   = views::all_t<remove_reference_t<Rng>>;\r\n            constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::as_const(move(rng))), VS>);\r\n            static_assert(noexcept(views::as_const(move(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(rng) | views::as_const), VS>);\r\n            static_assert(noexcept(move(rng) | views::as_const) == is_noexcept);\r\n        }\r\n\r\n        // ... with const rvalue argument\r\n        static_assert(CanViewAsConst<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n        if constexpr (CanViewAsConst<const remove_reference_t<Rng>>) {\r\n            constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::as_const(move(as_const(rng)))), V>);\r\n            static_assert(noexcept(views::as_const(move(as_const(rng)))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(as_const(rng)) | views::as_const), V>);\r\n            static_assert(noexcept(move(as_const(rng)) | views::as_const) == is_noexcept);\r\n        }\r\n    } else if constexpr (_Is_specialization_v<remove_cvref_t<Rng>, ranges::empty_view>) {\r\n        // range adaptor results in empty_view<const X> reconstructed from empty_view<X>\r\n        using ConstEmpty = ranges::empty_view<const remove_reference_t<ranges::range_reference_t<Rng>>>;\r\n\r\n        { // ... with lvalue argument\r\n            static_assert(same_as<decltype(views::as_const(forward<Rng>(rng))), ConstEmpty>);\r\n            static_assert(noexcept(views::as_const(forward<Rng>(rng))));\r\n\r\n            static_assert(same_as<decltype(forward<Rng>(rng) | views::as_const), ConstEmpty>);\r\n            static_assert(noexcept(forward<Rng>(rng) | views::as_const));\r\n        }\r\n\r\n        { // ... with const lvalue argument\r\n            static_assert(same_as<decltype(views::as_const(as_const(rng))), ConstEmpty>);\r\n            static_assert(noexcept(views::as_const(as_const(rng))));\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | views::as_const), ConstEmpty>);\r\n            static_assert(noexcept(as_const(rng) | views::as_const));\r\n        }\r\n\r\n        { // ... with rvalue argument\r\n            static_assert(same_as<decltype(views::as_const(move(rng))), ConstEmpty>);\r\n            static_assert(noexcept(views::as_const(move(rng))));\r\n\r\n            static_assert(same_as<decltype(move(rng) | views::as_const), ConstEmpty>);\r\n            static_assert(noexcept(move(rng) | views::as_const));\r\n        }\r\n\r\n        { // ... with const rvalue argument\r\n            static_assert(same_as<decltype(views::as_const(move(as_const(rng)))), ConstEmpty>);\r\n            static_assert(noexcept(views::as_const(move(as_const(rng)))));\r\n\r\n            static_assert(same_as<decltype(move(as_const(rng)) | views::as_const), ConstEmpty>);\r\n            static_assert(noexcept(move(as_const(rng)) | views::as_const));\r\n        }\r\n    } else if constexpr (_Is_span_v<Rng>) { // range adaptor results in span<const X, E> reconstructed from span<X, E>\r\n        using ConstSpan = span<const typename V::element_type, V::extent>;\r\n\r\n        { // ... with lvalue argument\r\n            static_assert(same_as<decltype(views::as_const(forward<Rng>(rng))), ConstSpan>);\r\n            static_assert(noexcept(views::as_const(forward<Rng>(rng))));\r\n\r\n            static_assert(same_as<decltype(forward<Rng>(rng) | views::as_const), ConstSpan>);\r\n            static_assert(noexcept(forward<Rng>(rng) | views::as_const));\r\n        }\r\n\r\n        { // ... with const lvalue argument\r\n            static_assert(same_as<decltype(views::as_const(as_const(rng))), ConstSpan>);\r\n            static_assert(noexcept(views::as_const(as_const(rng))));\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | views::as_const), ConstSpan>);\r\n            static_assert(noexcept(as_const(rng) | views::as_const));\r\n        }\r\n\r\n        { // ... with rvalue argument\r\n            static_assert(same_as<decltype(views::as_const(move(rng))), ConstSpan>);\r\n            static_assert(noexcept(views::as_const(move(rng))));\r\n\r\n            static_assert(same_as<decltype(move(rng) | views::as_const), ConstSpan>);\r\n            static_assert(noexcept(move(rng) | views::as_const));\r\n        }\r\n\r\n        { // ... with const rvalue argument\r\n            static_assert(same_as<decltype(views::as_const(move(as_const(rng)))), ConstSpan>);\r\n            static_assert(noexcept(views::as_const(move(as_const(rng)))));\r\n\r\n            static_assert(same_as<decltype(move(as_const(rng)) | views::as_const), ConstSpan>);\r\n            static_assert(noexcept(move(as_const(rng)) | views::as_const));\r\n        }\r\n    } else if constexpr (CanReconstructRefView<Rng>) {\r\n        // range adaptor results in ref_view<const X> reconstructed from ref_view<X>\r\n        using ReconstructedRefView = ref_view<const typename RefViewUnderlyingType<V>::type>;\r\n\r\n        { // ... with lvalue argument\r\n            static_assert(same_as<decltype(views::as_const(forward<Rng>(rng))), ReconstructedRefView>);\r\n            static_assert(noexcept(views::as_const(forward<Rng>(rng))));\r\n\r\n            static_assert(same_as<decltype(forward<Rng>(rng) | views::as_const), ReconstructedRefView>);\r\n            static_assert(noexcept(forward<Rng>(rng) | views::as_const));\r\n        }\r\n\r\n        { // ... with const lvalue argument\r\n            static_assert(same_as<decltype(views::as_const(as_const(rng))), ReconstructedRefView>);\r\n            static_assert(noexcept(views::as_const(as_const(rng))));\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | views::as_const), ReconstructedRefView>);\r\n            static_assert(noexcept(as_const(rng) | views::as_const));\r\n        }\r\n\r\n        { // ... with rvalue argument\r\n            static_assert(same_as<decltype(views::as_const(move(rng))), ReconstructedRefView>);\r\n            static_assert(noexcept(views::as_const(move(rng))));\r\n\r\n            static_assert(same_as<decltype(move(rng) | views::as_const), ReconstructedRefView>);\r\n            static_assert(noexcept(move(rng) | views::as_const));\r\n        }\r\n\r\n        { // ... with const rvalue argument\r\n            static_assert(same_as<decltype(views::as_const(move(as_const(rng)))), ReconstructedRefView>);\r\n            static_assert(noexcept(views::as_const(move(as_const(rng)))));\r\n\r\n            static_assert(same_as<decltype(move(as_const(rng)) | views::as_const), ReconstructedRefView>);\r\n            static_assert(noexcept(move(as_const(rng)) | views::as_const));\r\n        }\r\n    } else if constexpr (is_lvalue_reference_v<Rng> && constant_range<const remove_cvref_t<Rng>>\r\n                         && !is_view) { // range adaptor results in ref_view<const X>\r\n        using ConstRefView = ranges::ref_view<const remove_cvref_t<Rng>>;\r\n\r\n        // ... with lvalue argument\r\n        static_assert(CanViewAsConst<Rng&> == copy_constructible<V>);\r\n        if constexpr (CanViewAsConst<Rng&>) {\r\n            static_assert(same_as<decltype(views::as_const(forward<Rng>(rng))), ConstRefView>);\r\n            static_assert(noexcept(views::as_const(forward<Rng>(rng))));\r\n\r\n            static_assert(same_as<decltype(forward<Rng>(rng) | views::as_const), ConstRefView>);\r\n            static_assert(noexcept(forward<Rng>(rng) | views::as_const));\r\n        }\r\n\r\n        // ... with const lvalue argument\r\n        static_assert(CanViewAsConst<const remove_reference_t<Rng>&> == copy_constructible<V>);\r\n        if constexpr (CanViewAsConst<const remove_reference_t<Rng>&>) {\r\n            static_assert(same_as<decltype(views::as_const(as_const(rng))), ConstRefView>);\r\n            static_assert(noexcept(views::as_const(as_const(rng))));\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | views::as_const), ConstRefView>);\r\n            static_assert(noexcept(as_const(rng) | views::as_const));\r\n        }\r\n    } else { // range adaptor results in as_const_view\r\n        // ... with lvalue argument\r\n        static_assert(CanViewAsConst<Rng&> == (!is_view || copy_constructible<V>) );\r\n        if constexpr (CanViewAsConst<Rng&>) {\r\n            constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::as_const(forward<Rng>(rng))), R>);\r\n            static_assert(noexcept(views::as_const(forward<Rng>(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(forward<Rng>(rng) | views::as_const), R>);\r\n            static_assert(noexcept(forward<Rng>(rng) | views::as_const) == is_noexcept);\r\n        }\r\n\r\n        // ... with const lvalue argument\r\n        static_assert(CanViewAsConst<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n        if constexpr (CanViewAsConst<const remove_reference_t<Rng>&>\r\n                      && !constant_range<const remove_reference_t<Rng>&>) {\r\n            using RC                   = as_const_view<views::all_t<const remove_reference_t<Rng>&>>;\r\n            constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::as_const(as_const(rng))), RC>);\r\n            static_assert(noexcept(views::as_const(as_const(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | views::as_const), RC>);\r\n            static_assert(noexcept(as_const(rng) | views::as_const) == is_noexcept);\r\n        }\r\n\r\n        // ... with rvalue argument\r\n        static_assert(CanViewAsConst<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n        if constexpr (CanViewAsConst<remove_reference_t<Rng>>) {\r\n            using RS                   = as_const_view<views::all_t<remove_reference_t<Rng>>>;\r\n            constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::as_const(move(rng))), RS>);\r\n            static_assert(noexcept(views::as_const(move(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(rng) | views::as_const), RS>);\r\n            static_assert(noexcept(move(rng) | views::as_const) == is_noexcept);\r\n        }\r\n\r\n        // ... with const rvalue argument\r\n        static_assert(CanViewAsConst<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n        if constexpr (CanViewAsConst<const remove_reference_t<Rng>>) {\r\n            constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::as_const(move(as_const(rng)))), R>);\r\n            static_assert(noexcept(views::as_const(move(as_const(rng)))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(move(as_const(rng)) | views::as_const), R>);\r\n            static_assert(noexcept(move(as_const(rng)) | views::as_const) == is_noexcept);\r\n        }\r\n    }\r\n\r\n    // Validate deduction guide\r\n    same_as<R> auto r = as_const_view{forward<Rng>(rng)};\r\n\r\n    // Validate as_const_view::size\r\n    static_assert(CanMemberSize<R> == sized_range<V>);\r\n    if constexpr (CanMemberSize<R>) {\r\n        same_as<ranges::range_size_t<V>> auto s = r.size();\r\n        assert(_To_unsigned_like(s) == ranges::size(expected));\r\n        static_assert(noexcept(r.size()) == noexcept(ranges::size(as_const(rng))));\r\n    }\r\n\r\n    // Validate as_const_view::size (const)\r\n    static_assert(CanMemberSize<const R> == sized_range<const V>);\r\n    if constexpr (CanMemberSize<const R>) {\r\n        same_as<ranges::range_size_t<const V>> auto s = as_const(r).size();\r\n        assert(_To_unsigned_like(s) == ranges::size(expected));\r\n        static_assert(noexcept(as_const(r).size()) == noexcept(ranges::size(rng)));\r\n    }\r\n\r\n    const bool is_empty = ranges::empty(expected);\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    static_assert(CanMemberEmpty<R> == (forward_range<V> || sized_range<V>) );\r\n    static_assert(CanBool<R> == CanEmpty<R>);\r\n    if constexpr (CanMemberEmpty<R>) {\r\n        assert(r.empty() == is_empty);\r\n        assert(static_cast<bool>(r) == !is_empty);\r\n    }\r\n\r\n    // Validate view_interface::empty and operator bool (const)\r\n    static_assert(CanMemberEmpty<const R> == (forward_range<const Rng> || sized_range<const V>) );\r\n    static_assert(CanBool<const R> == CanEmpty<const R>);\r\n    if constexpr (CanMemberEmpty<const R>) {\r\n        assert(as_const(r).empty() == is_empty);\r\n        assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n    }\r\n\r\n    assert(ranges::equal(r, expected));\r\n    if (!forward_range<V>) { // intentionally not if constexpr\r\n        return true;\r\n    }\r\n\r\n    // Validate as_const_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    {\r\n        const same_as<iterator_t<R>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            // (static analyzer doesn't realize that `i == nullptr` implies `is_empty`)\r\n#pragma warning(push)\r\n#pragma warning(disable : 6011) // Dereferencing NULL pointer 'i'\r\n            assert(*i == *begin(expected));\r\n#pragma warning(pop)\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            auto r2                              = r;\r\n            const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 6011) // Dereferencing NULL pointer 'i'\r\n                assert(*i2 == *i);\r\n#pragma warning(pop)\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate as_const_view::begin (const)\r\n    static_assert(CanMemberBegin<const R> == ranges::range<const V>);\r\n    if constexpr (CanMemberBegin<const R>) {\r\n        const same_as<iterator_t<const R>> auto ci = as_const(r).begin();\r\n        if (!is_empty) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 6011) // Dereferencing NULL pointer 'i'\r\n            assert(*ci == *begin(expected));\r\n#pragma warning(pop)\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            const auto cr2                              = r;\r\n            const same_as<iterator_t<const R>> auto ci2 = cr2.begin();\r\n            if (!is_empty) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 6011) // Dereferencing NULL pointer 'i'\r\n                assert(*ci2 == *ci);\r\n#pragma warning(pop)\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate as_const_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    {\r\n        const same_as<sentinel_t<R>> auto s = r.end();\r\n        assert((r.begin() == s) == is_empty);\r\n        static_assert(common_range<R> == common_range<V>);\r\n        if constexpr (common_range<R> && bidirectional_range<V>) {\r\n            if (!is_empty) {\r\n                assert(*prev(s) == *prev(end(expected)));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*prev(r2.end()) == *prev(end(expected)));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate as_const_view::end (const)\r\n    static_assert(CanMemberEnd<const R> == ranges::range<const V>);\r\n    if constexpr (CanMemberEnd<const R>) {\r\n        const same_as<sentinel_t<const R>> auto cs = as_const(r).end();\r\n        assert((as_const(r).begin() == cs) == is_empty);\r\n        static_assert(common_range<const R> == common_range<const V>);\r\n        if constexpr (common_range<const R> && bidirectional_range<const V>) {\r\n            if (!is_empty) {\r\n                assert(*prev(cs) == *prev(end(expected)));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                const auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*prev(r2.end()) == *prev(end(expected)));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::cbegin\r\n    static_assert(CanMemberCBegin<R>);\r\n    {\r\n        const same_as<const_iterator_t<R>> auto i = r.cbegin();\r\n        if (!is_empty) {\r\n            assert(*i == *cbegin(expected));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            auto r2                                    = r;\r\n            const same_as<const_iterator_t<R>> auto i2 = r2.cbegin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::cbegin (const)\r\n    static_assert(CanMemberCBegin<const R> == ranges::range<const V>);\r\n    if constexpr (CanMemberCBegin<const R>) {\r\n        const same_as<const_iterator_t<const R>> auto ci = as_const(r).cbegin();\r\n        if (!is_empty) {\r\n            assert(*ci == *cbegin(expected));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            const auto cr2                                    = r;\r\n            const same_as<const_iterator_t<const R>> auto ci2 = cr2.cbegin();\r\n            if (!is_empty) {\r\n                assert(*ci2 == *ci);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::cend\r\n    static_assert(CanMemberCEnd<R>);\r\n    {\r\n        const same_as<const_sentinel_t<R>> auto s = r.cend();\r\n        assert((r.cbegin() == s) == is_empty);\r\n        static_assert(common_range<R> == common_range<V>);\r\n        if constexpr (common_range<R> && bidirectional_range<V>) {\r\n            if (!is_empty) {\r\n                assert(*prev(s) == *prev(cend(expected)));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*prev(r2.cend()) == *prev(cend(expected)));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::cend (const)\r\n    static_assert(CanMemberCEnd<const R> == ranges::range<const V>);\r\n    if constexpr (CanMemberCEnd<const R>) {\r\n        const same_as<const_sentinel_t<const R>> auto cs = as_const(r).cend();\r\n        assert((as_const(r).cbegin() == cs) == is_empty);\r\n        static_assert(common_range<const R> == common_range<const V>);\r\n        if constexpr (common_range<const R> && bidirectional_range<const V>) {\r\n            if (!is_empty) {\r\n                assert(*prev(cs) == *prev(cend(expected)));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                const auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*prev(r2.cend()) == *prev(cend(expected)));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::data\r\n    static_assert(CanMemberData<R> == contiguous_range<R>);\r\n    static_assert(CanData<R&> == contiguous_range<R>);\r\n    if constexpr (contiguous_range<R>) {\r\n        const same_as<const remove_reference_t<ranges::range_reference_t<V>>*> auto ptr = r.data();\r\n        assert(ptr == to_address(r.begin()));\r\n    }\r\n\r\n    // Validate view_interface::data (const)\r\n    static_assert(CanMemberData<const R> == contiguous_range<const R>);\r\n    static_assert(CanData<const R&> == contiguous_range<const R>);\r\n    if constexpr (contiguous_range<const R>) {\r\n        const same_as<const remove_reference_t<ranges::range_reference_t<const V>>*> auto ptr = as_const(r).data();\r\n        assert(ptr == to_address(as_const(r).begin()));\r\n    }\r\n\r\n    if (!is_empty) {\r\n        // Validate view_interface::operator[]\r\n        static_assert(CanIndex<R> == random_access_range<V>);\r\n        if constexpr (CanIndex<R>) {\r\n            assert(r[0] == expected[0]);\r\n        }\r\n\r\n        // Validate view_interface::operator[] (const)\r\n        static_assert(CanIndex<const R> == random_access_range<const V>);\r\n        if constexpr (CanIndex<const R>) {\r\n            assert(as_const(r)[0] == expected[0]);\r\n        }\r\n\r\n        // Validate view_interface::front\r\n        static_assert(CanMemberFront<R> == forward_range<V>);\r\n        if constexpr (CanMemberFront<R>) {\r\n            assert(r.front() == *begin(expected));\r\n        }\r\n\r\n        // Validate view_interface::front (const)\r\n        static_assert(CanMemberFront<const R> == forward_range<const V>);\r\n        if constexpr (CanMemberFront<const R>) {\r\n            assert(as_const(r).front() == *begin(expected));\r\n        }\r\n\r\n        // Validate view_interface::back\r\n        static_assert(CanMemberBack<R> == (bidirectional_range<V> && common_range<V>) );\r\n        if constexpr (CanMemberBack<R>) {\r\n            assert(r.back() == *prev(end(expected)));\r\n        }\r\n\r\n        // Validate view_interface::back (const)\r\n        static_assert(CanMemberBack<const R> == (bidirectional_range<const V> && common_range<const V>) );\r\n        if constexpr (CanMemberBack<const R>) {\r\n            assert(as_const(r).back() == *prev(end(expected)));\r\n        }\r\n    }\r\n\r\n    // Validate as_const_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V>) {\r\n        same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b1.begin() == *begin(expected));\r\n        }\r\n    }\r\n\r\n    // Validate as_const_view::base() &&\r\n    same_as<V> auto b2 = move(r).base();\r\n    static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>);\r\n    if (!is_empty) {\r\n        assert(*b2.begin() == *begin(expected));\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr int some_ints[] = {0, 3, 6, 9, 12, 15};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        R r{some_ints};\r\n        test_one(r, span{some_ints});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, test::Sized IsSized>\r\nusing test_range =\r\n    test::range<Category, const int, IsSized, test::CanDifference{derived_from<Category, random_access_iterator_tag>},\r\n        IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n        test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nconstexpr bool instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_in<instantiator, const int>();\r\n#else // ^^^ test all input permutations / test only \"interesting\" permutations vvv\r\n    using test::Common, test::Sized;\r\n\r\n    // The view is sensitive to category, commonality, and size, but oblivious to differencing and proxyness\r\n    instantiator::call<test_range<input_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes, Sized::no>>();\r\n#endif // TEST_EVERYTHING\r\n    return true;\r\n}\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare::yes, test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>},\r\n    test::CanView::yes, test::Copyability::move_only>;\r\n\r\nint main() {\r\n#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, LLVM-62096 (fixed in Clang 21) and VSO-1901430\r\n    { // Validate views\r\n        // ... copyable\r\n        constexpr span<const int> s{some_ints};\r\n        static_assert(test_one(s, some_ints));\r\n        test_one(s, some_ints);\r\n    }\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    { // ... move-only\r\n        test_one(move_only_view<input_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_one(move_only_view<input_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    }\r\n\r\n    { // Validate non-views\r\n        static_assert(test_one(some_ints, some_ints));\r\n        test_one(some_ints, some_ints);\r\n\r\n        // Test with lvalue, rvalue, and wrapped in ref_view non-views\r\n        auto vec = some_ints | ranges::to<vector>();\r\n        test_one(vec, some_ints);\r\n        test_one(ranges::ref_view{vec}, some_ints);\r\n        test_one(some_ints | ranges::to<vector>(), some_ints);\r\n\r\n        auto lst = some_ints | ranges::to<forward_list>();\r\n        test_one(lst, some_ints);\r\n        test_one(ranges::ref_view{lst}, some_ints);\r\n        test_one(some_ints | ranges::to<forward_list>(), some_ints);\r\n    }\r\n\r\n    { // Validate single_view\r\n        static constexpr int one_int[1] = {333};\r\n        static_assert(test_one(views::single(333), one_int));\r\n        test_one(views::single(333), one_int);\r\n    }\r\n\r\n    { // Validate empty_view\r\n        array<int, 0> empty_arr;\r\n\r\n        static_assert(test_one(views::empty<int>, empty_arr));\r\n        test_one(views::empty<int>, empty_arr);\r\n        static_assert(test_one(as_const(views::empty<int>), empty_arr));\r\n        test_one(as_const(views::empty<int>), empty_arr);\r\n\r\n        static_assert(test_one(views::empty<const int>, empty_arr));\r\n        test_one(views::empty<const int>, empty_arr);\r\n        static_assert(test_one(as_const(views::empty<const int>), empty_arr));\r\n        test_one(as_const(views::empty<const int>), empty_arr);\r\n\r\n        static_assert(test_one(views::empty<volatile int>, empty_arr));\r\n        test_one(views::empty<volatile int>, empty_arr);\r\n        static_assert(test_one(as_const(views::empty<volatile int>), empty_arr));\r\n        test_one(as_const(views::empty<volatile int>), empty_arr);\r\n\r\n        static_assert(test_one(views::empty<const volatile int>, empty_arr));\r\n        test_one(views::empty<const volatile int>, empty_arr);\r\n        static_assert(test_one(as_const(views::empty<const volatile int>), empty_arr));\r\n        test_one(as_const(views::empty<const volatile int>), empty_arr);\r\n    }\r\n\r\n#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, LLVM-62096 (fixed in Clang 21) and VSO-1901430\r\n    { // empty range\r\n        using Span = span<int>;\r\n        static_assert(test_one(Span{}, Span{}));\r\n        test_one(Span{}, Span{});\r\n    }\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    static_assert(instantiation_test());\r\n    instantiation_test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_container_adaptors/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_container_adaptors/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n// derived from libc++'s test files:\r\n// * support/format.functions.common.h\r\n// * std/containers/container.adaptors/container.adaptors.format/format.functions.tests.h\r\n// * std/containers/container.adaptors/container.adaptors.format/format.functions.format.pass.cpp\r\n// * std/containers/container.adaptors/container.adaptors.format/format.functions.vformat.pass.cpp\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cctype>\r\n#include <charconv>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstring>\r\n#include <format>\r\n#include <functional>\r\n#include <iterator>\r\n#include <locale>\r\n#include <queue>\r\n#include <ranges>\r\n#include <stack>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <is_permissive.hpp>\r\n#include <test_format_support.hpp>\r\n\r\n#ifdef _DEBUG\r\n#define DEFAULT_IDL_SETTING 2\r\n#else\r\n#define DEFAULT_IDL_SETTING 0\r\n#endif\r\n\r\nusing namespace std;\r\n\r\n#define CSTR(Str) TYPED_LITERAL(CharT, Str)\r\n#define STR(Str)  basic_string(CSTR(Str))\r\n#define SV(Str)   basic_string_view(CSTR(Str))\r\n\r\nnamespace detail {\r\n    consteval string_view get_format_types() noexcept {\r\n        return \"aAbBcdeEfFgGopPsxX?\";\r\n    }\r\n\r\n    template <class CharT, size_t N>\r\n    basic_string<CharT> get_colons() {\r\n        return basic_string<CharT>(N, CharT(':'));\r\n    }\r\n\r\n    template <class CharT, /*format_types types,*/ size_t N>\r\n    vector<basic_string<CharT>> fmt_invalid_types(string_view valid) {\r\n        vector<basic_string<CharT>> result;\r\n        if constexpr (is_permissive_v<CharT>) {\r\n            for (const char c : get_format_types()) {\r\n                if (valid.find(c) == string_view::npos) {\r\n                    result.push_back(format(SV(\"{{{}{}}}\"), get_colons<CharT, N>(), c));\r\n                }\r\n            }\r\n        } else {\r\n            // ranges::to is not available in C++20.\r\n            ranges::copy(get_format_types() | views::filter([&](char type) {\r\n                return valid.find(type) == string_view::npos;\r\n            }) | views::transform([&](char type) { return format(SV(\"{{{}{}}}\"), get_colons<CharT, N>(), type); }),\r\n                back_inserter(result));\r\n        }\r\n        return result;\r\n    }\r\n} // namespace detail\r\n\r\n// Creates format string for the invalid types.\r\n//\r\n// valid contains a list of types that are valid.\r\n//\r\n// The return value is a collection of basic_strings, instead of\r\n// basic_string_views since the values are temporaries.\r\ntemplate <class CharT>\r\nvector<basic_string<CharT>> fmt_invalid_types(string_view valid) {\r\n    return detail::fmt_invalid_types<CharT, 1>(valid);\r\n}\r\n\r\n// Like fmt_invalid_types but when the format spec is for an underlying formatter.\r\ntemplate <class CharT>\r\nvector<basic_string<CharT>> fmt_invalid_nested_types(string_view valid) {\r\n    return detail::fmt_invalid_types<CharT, 2>(valid);\r\n}\r\n\r\ntemplate <class T>\r\nstruct context {};\r\n\r\ntemplate <>\r\nstruct context<char> {\r\n    using type = format_context;\r\n};\r\n\r\ntemplate <>\r\nstruct context<wchar_t> {\r\n    using type = wformat_context;\r\n};\r\n\r\ntemplate <class T>\r\nusing context_t = context<T>::type;\r\n\r\n// A user-defined type used to test the handle formatter.\r\nenum class status : uint16_t { foo = 0xAAAA, bar = 0x5555, foobar = 0xAA55 };\r\n\r\n// The formatter for a user-defined type used to test the handle formatter.\r\ntemplate <class CharT>\r\nstruct formatter<status, CharT> {\r\n    // During the 2023 Issaquah meeting LEWG made it clear a formatter is\r\n    // required to call its parse function. LWG-3892 Adds the wording for that\r\n    // requirement. Therefore this formatter is initialized in an invalid state.\r\n    // A call to parse sets it in a valid state and a call to format validates\r\n    // the state.\r\n    int type = -1;\r\n\r\n    constexpr auto parse(basic_format_parse_context<CharT>& parse_ctx) -> decltype(parse_ctx.begin()) {\r\n        auto begin = parse_ctx.begin();\r\n        auto end   = parse_ctx.end();\r\n        type       = 0;\r\n        if (begin == end) {\r\n            return begin;\r\n        }\r\n\r\n        switch (*begin) {\r\n        case CharT('x'):\r\n            break;\r\n        case CharT('X'):\r\n            type = 1;\r\n            break;\r\n        case CharT('s'):\r\n            type = 2;\r\n            break;\r\n        case CharT('}'):\r\n            return begin;\r\n        default:\r\n            throw_format_error(\"The type option contains an invalid value for a status formatting argument\");\r\n        }\r\n\r\n        ++begin;\r\n        if (begin != end && *begin != CharT('}')) {\r\n            throw_format_error(\"The format specifier should consume the input or end with a '}'\");\r\n        }\r\n\r\n        return begin;\r\n    }\r\n\r\n    template <class Out>\r\n    auto format(status s, basic_format_context<Out, CharT>& ctx) const -> decltype(ctx.out()) {\r\n        const char* names[] = {\"foo\", \"bar\", \"foobar\"};\r\n        char buffer[7];\r\n        const char* pbegin = names[0];\r\n        const char* pend   = names[0];\r\n        switch (type) {\r\n        case -1:\r\n            throw_format_error(\"The formatter's parse function has not been called.\");\r\n\r\n        case 0:\r\n            pbegin    = buffer;\r\n            buffer[0] = '0';\r\n            buffer[1] = 'x';\r\n            pend      = to_chars(&buffer[2], end(buffer), static_cast<uint16_t>(s), 16).ptr;\r\n            buffer[6] = '\\0';\r\n            break;\r\n\r\n        case 1:\r\n            pbegin    = buffer;\r\n            buffer[0] = '0';\r\n            buffer[1] = 'X';\r\n            pend      = to_chars(&buffer[2], end(buffer), static_cast<uint16_t>(s), 16).ptr;\r\n            transform(static_cast<const char*>(&buffer[2]), pend, &buffer[2],\r\n                [](char c) { return static_cast<char>(toupper(c)); });\r\n            buffer[6] = '\\0';\r\n            break;\r\n\r\n        case 2:\r\n            switch (s) {\r\n            case status::foo:\r\n                pbegin = names[0];\r\n                break;\r\n            case status::bar:\r\n                pbegin = names[1];\r\n                break;\r\n            case status::foobar:\r\n                pbegin = names[2];\r\n                break;\r\n            }\r\n            pend = pbegin + strlen(pbegin);\r\n            break;\r\n        }\r\n\r\n#if !defined(__clang__) && !defined(__EDG__)\r\n#pragma warning(push)\r\n#pragma warning(disable : 4365)\r\n#endif // !defined(__clang__) && !defined(__EDG__)\r\n        return copy(pbegin, pend, ctx.out());\r\n#if !defined(__clang__) && !defined(__EDG__)\r\n#pragma warning(pop)\r\n#endif // !defined(__clang__) && !defined(__EDG__)\r\n    }\r\n\r\nprivate:\r\n    [[noreturn]] void throw_format_error(const char* s) const {\r\n        throw format_error(s);\r\n    }\r\n};\r\n\r\n//\r\n// Char\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_char_default(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    // Note when no range-underlying-spec is present the char is escaped,\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']\"), SV(\"{}\"), input);\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // when one is present there is no escaping,\r\n    check(SV(\"[H, e, l, l, o]\"), SV(\"{::}\"), input);\r\n    check(SV(\"[H, e, l, l, o]\"), SV(\"{::<}\"), input);\r\n    // unless forced by the type specifier.\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']\"), SV(\"{::?}\"), input);\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']\"), SV(\"{::<?}\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']     \"), SV(\"{:30}\"), input);\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']*****\"), SV(\"{:*<30}\"), input);\r\n    check(SV(\"__['H', 'e', 'l', 'l', 'o']___\"), SV(\"{:_^30}\"), input);\r\n    check(SV(\"#####['H', 'e', 'l', 'l', 'o']\"), SV(\"{:#>30}\"), input);\r\n\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']     \"), SV(\"{:{}}\"), input, 30);\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']*****\"), SV(\"{:*<{}}\"), input, 30);\r\n    check(SV(\"__['H', 'e', 'l', 'l', 'o']___\"), SV(\"{:_^{}}\"), input, 30);\r\n    check(SV(\"#####['H', 'e', 'l', 'l', 'o']\"), SV(\"{:#>{}}\"), input, 30);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__'H', 'e', 'l', 'l', 'o'___\"), SV(\"{:_^28n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"[H   , e   , l   , l   , o   ]\"), SV(\"{::4}\"), input);\r\n    check(SV(\"[H***, e***, l***, l***, o***]\"), SV(\"{::*<4}\"), input);\r\n    check(SV(\"[_H__, _e__, _l__, _l__, _o__]\"), SV(\"{::_^4}\"), input);\r\n    check(SV(\"[:::H, :::e, :::l, :::l, :::o]\"), SV(\"{:::>4}\"), input);\r\n\r\n    check(SV(\"[H   , e   , l   , l   , o   ]\"), SV(\"{::{}}\"), input, 4);\r\n    check(SV(\"[H***, e***, l***, l***, o***]\"), SV(\"{::*<{}}\"), input, 4);\r\n    check(SV(\"[_H__, _e__, _l__, _l__, _o__]\"), SV(\"{::_^{}}\"), input, 4);\r\n    check(SV(\"[:::H, :::e, :::l, :::l, :::o]\"), SV(\"{:::>{}}\"), input, 4);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier for a character does not allow the sign option\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier for a character does not allow the sign option\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier for a character does not allow the sign option\", SV(\"{:: }\"), input);\r\n\r\n    check(SV(\"[72, 101, 108, 108, 111]\"), SV(\"{::-d}\"), input);\r\n    check(SV(\"[+72, +101, +108, +108, +111]\"), SV(\"{::+d}\"), input);\r\n    check(SV(\"[ 72,  101,  108,  108,  111]\"), SV(\"{:: d}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\r\n        \"The format specifier for a character does not allow the alternate form option\", SV(\"{::#}\"), input);\r\n\r\n    check(SV(\"[0x48, 0x65, 0x6c, 0x6c, 0x6f]\"), SV(\"{::#x}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The format specifier for a character does not allow the zero-padding option\", SV(\"{::05}\"), input);\r\n\r\n    check(SV(\"[00110, 00145, 00154, 00154, 00157]\"), SV(\"{::05o}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check(SV(\"[H, e, l, l, o]\"), SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"bBcdoxX?\")) {\r\n        check_exception(\"The type option contains an invalid value for a character formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format specifier\r\n    check(SV(\"^^[:H, :e, :l, :l, :o]^^^\"), SV(\"{:^^25::>2}\"), input);\r\n    check(SV(\"^^[:H, :e, :l, :l, :o]^^^\"), SV(\"{:^^{}::>2}\"), input, 25);\r\n    check(SV(\"^^[:H, :e, :l, :l, :o]^^^\"), SV(\"{:^^{}::>{}}\"), input, 25, 2);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>2}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 25);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_char_string(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"Hello\"), SV(\"{:s}\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"Hello   \"), SV(\"{:8s}\"), input);\r\n    check(SV(\"Hello***\"), SV(\"{:*<8s}\"), input);\r\n    check(SV(\"_Hello__\"), SV(\"{:_^8s}\"), input);\r\n    check(SV(\"###Hello\"), SV(\"{:#>8s}\"), input);\r\n\r\n    check(SV(\"Hello   \"), SV(\"{:{}s}\"), input, 8);\r\n    check(SV(\"Hello***\"), SV(\"{:*<{}s}\"), input, 8);\r\n    check(SV(\"_Hello__\"), SV(\"{:_^{}s}\"), input, 8);\r\n    check(SV(\"###Hello\"), SV(\"{:#>{}s}\"), input, 8);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<s}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<s}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: s}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#s}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0s}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.s}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:Ls}\"), input);\r\n\r\n    // *** n\r\n    check_exception(\"The n option and type s can't be used together\", SV(\"{:ns}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\r\n        \"The type option contains an invalid value for a character formatting argument\", SV(\"{::<s}\"), input);\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check_exception(\"Type s and an underlying format specification can't be used together\", SV(\"{:s:}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"bBcdoxX?\")) {\r\n        check_exception(\"The type option contains an invalid value for a character formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check_exception(\"Type s and an underlying format specification can't be used together\", SV(\"{:5s:5}\"), input);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_char_escaped_string(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(R\"(\"Hello\")\"), SV(\"{:?s}\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(R\"(\"Hello\"   )\"), SV(\"{:10?s}\"), input);\r\n    check(SV(R\"(\"Hello\"***)\"), SV(\"{:*<10?s}\"), input);\r\n    check(SV(R\"(_\"Hello\"__)\"), SV(\"{:_^10?s}\"), input);\r\n    check(SV(R\"(###\"Hello\")\"), SV(\"{:#>10?s}\"), input);\r\n\r\n    check(SV(R\"(\"Hello\"   )\"), SV(\"{:{}?s}\"), input, 10);\r\n    check(SV(R\"(\"Hello\"***)\"), SV(\"{:*<{}?s}\"), input, 10);\r\n    check(SV(R\"(_\"Hello\"__)\"), SV(\"{:_^{}?s}\"), input, 10);\r\n    check(SV(R\"(###\"Hello\")\"), SV(\"{:#>{}?s}\"), input, 10);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<?s}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<?s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::<?s}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-?s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+?s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: ?s}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#?s}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0?s}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.?s}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L?s}\"), input);\r\n\r\n    // *** n\r\n    check_exception(\"The n option and type ?s can't be used together\", SV(\"{:n?s}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check_exception(\"Type ?s and an underlying format specification can't be used together\", SV(\"{:?s:}\"), input);\r\n\r\n    // ***** Both have a format-spec\r\n    check_exception(\"Type ?s and an underlying format specification can't be used together\", SV(\"{:5?s:5}\"), input);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_char(TestFunction check, ExceptionTest check_exception) {\r\n    // These values are in numeric order when using ASCII, which is used by the priority_queue.\r\n    array input{CharT('H'), CharT('e'), CharT('l'), CharT('l'), CharT('o')};\r\n    test_char_default<CharT>(check, check_exception, queue{input.begin(), input.end()});\r\n    test_char_default<CharT>(check, check_exception, priority_queue{input.begin(), input.end(), greater{}});\r\n    test_char_default<CharT>(check, check_exception, stack{input.begin(), input.end()});\r\n\r\n    test_char_string<CharT>(check, check_exception, queue{input.begin(), input.end()});\r\n    test_char_string<CharT>(check, check_exception, priority_queue{input.begin(), input.end(), greater{}});\r\n    test_char_string<CharT>(check, check_exception, stack{input.begin(), input.end()});\r\n\r\n    test_char_escaped_string<CharT>(check, check_exception, queue{input.begin(), input.end()});\r\n    test_char_escaped_string<CharT>(check, check_exception, priority_queue{input.begin(), input.end(), greater{}});\r\n    test_char_escaped_string<CharT>(check, check_exception, stack{input.begin(), input.end()});\r\n\r\n    // LWG-3881 fixes formatting container adaptors backed by a string.\r\n    test_char_default<CharT>(check, check_exception, queue{basic_string<CharT>{input.begin(), input.end()}});\r\n    test_char_default<CharT>(\r\n        check, check_exception, priority_queue{greater{}, basic_string<CharT>{input.begin(), input.end()}});\r\n    test_char_default<CharT>(check, check_exception, stack{basic_string<CharT>{input.begin(), input.end()}});\r\n}\r\n\r\n//\r\n// char -> wchar_t\r\n//\r\n\r\ntemplate <class TestFunction, class ExceptionTest>\r\nvoid test_char_to_wchar(TestFunction check, ExceptionTest check_exception) {\r\n    array input{'H', 'e', 'l', 'l', 'o'};\r\n    test_char_default<wchar_t>(check, check_exception, queue{input.begin(), input.end()});\r\n    test_char_default<wchar_t>(check, check_exception, priority_queue{input.begin(), input.end(), greater{}});\r\n    test_char_default<wchar_t>(check, check_exception, stack{input.begin(), input.end()});\r\n\r\n    // The types s and ?s may only be used when using range_formatter<T, charT>\r\n    // where the types T and charT are the same. This means this can't be used for\r\n    // range_formatter<wchar_t, char> even when formatter<wchar_t, char> has a\r\n    // debug-enabled specialization.\r\n\r\n    using CharT = wchar_t;\r\n    check_exception(\r\n        \"Type s requires character type as formatting argument\", SV(\"{:s}\"), queue{input.begin(), input.end()});\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"),\r\n        priority_queue{input.begin(), input.end()});\r\n    check_exception(\r\n        \"Type s requires character type as formatting argument\", SV(\"{:s}\"), stack{input.begin(), input.end()});\r\n    check_exception(\r\n        \"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), queue{input.begin(), input.end()});\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"),\r\n        priority_queue{input.begin(), input.end()});\r\n    check_exception(\r\n        \"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), stack{input.begin(), input.end()});\r\n}\r\n\r\n//\r\n// Bool\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_bool(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"[true, true, false]\"), SV(\"{}\"), input);\r\n    check(SV(\"[true, true, false]^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"[true, true, false]^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"[true, true, false]     \"), SV(\"{:24}\"), input);\r\n    check(SV(\"[true, true, false]*****\"), SV(\"{:*<24}\"), input);\r\n    check(SV(\"__[true, true, false]___\"), SV(\"{:_^24}\"), input);\r\n    check(SV(\"#####[true, true, false]\"), SV(\"{:#>24}\"), input);\r\n\r\n    check(SV(\"[true, true, false]     \"), SV(\"{:{}}\"), input, 24);\r\n    check(SV(\"[true, true, false]*****\"), SV(\"{:*<{}}\"), input, 24);\r\n    check(SV(\"__[true, true, false]___\"), SV(\"{:_^{}}\"), input, 24);\r\n    check(SV(\"#####[true, true, false]\"), SV(\"{:#>{}}\"), input, 24);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__true, true, false___\"), SV(\"{:_^22n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"[true   , true   , false  ]\"), SV(\"{::7}\"), input);\r\n    check(SV(\"[true***, true***, false**]\"), SV(\"{::*<7}\"), input);\r\n    check(SV(\"[_true__, _true__, _false_]\"), SV(\"{::_^7}\"), input);\r\n    check(SV(\"[:::true, :::true, ::false]\"), SV(\"{:::>7}\"), input);\r\n\r\n    check(SV(\"[true   , true   , false  ]\"), SV(\"{::{}}\"), input, 7);\r\n    check(SV(\"[true***, true***, false**]\"), SV(\"{::*<{}}\"), input, 7);\r\n    check(SV(\"[_true__, _true__, _false_]\"), SV(\"{::_^{}}\"), input, 7);\r\n    check(SV(\"[:::true, :::true, ::false]\"), SV(\"{:::>{}}\"), input, 7);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier for a bool does not allow the sign option\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier for a bool does not allow the sign option\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier for a bool does not allow the sign option\", SV(\"{:: }\"), input);\r\n\r\n    check(SV(\"[1, 1, 0]\"), SV(\"{::-d}\"), input);\r\n    check(SV(\"[+1, +1, +0]\"), SV(\"{::+d}\"), input);\r\n    check(SV(\"[ 1,  1,  0]\"), SV(\"{:: d}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier for a bool does not allow the alternate form option\", SV(\"{::#}\"), input);\r\n\r\n    check(SV(\"[0x1, 0x1, 0x0]\"), SV(\"{::#x}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The format specifier for a bool does not allow the zero-padding option\", SV(\"{::05}\"), input);\r\n\r\n    check(SV(\"[00001, 00001, 00000]\"), SV(\"{::05o}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check(SV(\"[true, true, false]\"), SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"bBdosxX\")) {\r\n        check_exception(\"The type option contains an invalid value for a bool formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^[:::true, :::true, ::false]^^^\"), SV(\"{:^^32::>7}\"), input);\r\n    check(SV(\"^^[:::true, :::true, ::false]^^^\"), SV(\"{:^^{}::>7}\"), input, 32);\r\n    check(SV(\"^^[:::true, :::true, ::false]^^^\"), SV(\"{:^^{}::>{}}\"), input, 32, 7);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>5}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 32);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_bool(TestFunction check, ExceptionTest check_exception) {\r\n    array input{true, true, false};\r\n    test_bool<CharT>(check, check_exception, queue{input.begin(), input.end()});\r\n    test_bool<CharT>(check, check_exception, priority_queue{input.begin(), input.end()});\r\n    test_bool<CharT>(check, check_exception, stack{input.begin(), input.end()});\r\n}\r\n\r\n//\r\n// Integral\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_int(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"[-42, 1, 2, 42]\"), SV(\"{}\"), input);\r\n    check(SV(\"[-42, 1, 2, 42]^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"[-42, 1, 2, 42]^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"[-42, 1, 2, 42]     \"), SV(\"{:20}\"), input);\r\n    check(SV(\"[-42, 1, 2, 42]*****\"), SV(\"{:*<20}\"), input);\r\n    check(SV(\"__[-42, 1, 2, 42]___\"), SV(\"{:_^20}\"), input);\r\n    check(SV(\"#####[-42, 1, 2, 42]\"), SV(\"{:#>20}\"), input);\r\n\r\n    check(SV(\"[-42, 1, 2, 42]     \"), SV(\"{:{}}\"), input, 20);\r\n    check(SV(\"[-42, 1, 2, 42]*****\"), SV(\"{:*<{}}\"), input, 20);\r\n    check(SV(\"__[-42, 1, 2, 42]___\"), SV(\"{:_^{}}\"), input, 20);\r\n    check(SV(\"#####[-42, 1, 2, 42]\"), SV(\"{:#>{}}\"), input, 20);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__-42, 1, 2, 42___\"), SV(\"{:_^18n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"[  -42,     1,     2,    42]\"), SV(\"{::5}\"), input);\r\n    check(SV(\"[-42**, 1****, 2****, 42***]\"), SV(\"{::*<5}\"), input);\r\n    check(SV(\"[_-42_, __1__, __2__, _42__]\"), SV(\"{::_^5}\"), input);\r\n    check(SV(\"[::-42, ::::1, ::::2, :::42]\"), SV(\"{:::>5}\"), input);\r\n\r\n    check(SV(\"[  -42,     1,     2,    42]\"), SV(\"{::{}}\"), input, 5);\r\n    check(SV(\"[-42**, 1****, 2****, 42***]\"), SV(\"{::*<{}}\"), input, 5);\r\n    check(SV(\"[_-42_, __1__, __2__, _42__]\"), SV(\"{::_^{}}\"), input, 5);\r\n    check(SV(\"[::-42, ::::1, ::::2, :::42]\"), SV(\"{:::>{}}\"), input, 5);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check(SV(\"[-42, 1, 2, 42]\"), SV(\"{::-}\"), input);\r\n    check(SV(\"[-42, +1, +2, +42]\"), SV(\"{::+}\"), input);\r\n    check(SV(\"[-42,  1,  2,  42]\"), SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check(SV(\"[-0x2a, 0x1, 0x2, 0x2a]\"), SV(\"{::#x}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check(SV(\"[-0042, 00001, 00002, 00042]\"), SV(\"{::05}\"), input);\r\n    check(SV(\"[-002a, 00001, 00002, 0002a]\"), SV(\"{::05x}\"), input);\r\n    check(SV(\"[-0x2a, 0x001, 0x002, 0x02a]\"), SV(\"{::#05x}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check(SV(\"[-42, 1, 2, 42]\"), SV(\"{::L}\"), input); // does nothing in this test, but is accepted.\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"bBcdoxX\")) {\r\n        check_exception(\"The type option contains an invalid value for an integer formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^[::-42, ::::1, ::::2, :::42]^^^\"), SV(\"{:^^33::>5}\"), input);\r\n    check(SV(\"^^[::-42, ::::1, ::::2, :::42]^^^\"), SV(\"{:^^{}::>5}\"), input, 33);\r\n    check(SV(\"^^[::-42, ::::1, ::::2, :::42]^^^\"), SV(\"{:^^{}::>{}}\"), input, 33, 5);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>5}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 33);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_int(TestFunction check, ExceptionTest check_exception) {\r\n    array input{-42, 1, 2, 42};\r\n    test_int<CharT>(check, check_exception, queue{input.begin(), input.end()});\r\n    test_int<CharT>(check, check_exception, priority_queue{input.begin(), input.end(), greater{}});\r\n    test_int<CharT>(check, check_exception, stack{input.begin(), input.end()});\r\n}\r\n\r\n//\r\n// Floating point\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_floating_point(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]\"), SV(\"{}\"), input);\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]     \"), SV(\"{:27}\"), input);\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]*****\"), SV(\"{:*<27}\"), input);\r\n    check(SV(\"__[-42.5, 0, 1.25, 42.5]___\"), SV(\"{:_^27}\"), input);\r\n    check(SV(\"#####[-42.5, 0, 1.25, 42.5]\"), SV(\"{:#>27}\"), input);\r\n\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]     \"), SV(\"{:{}}\"), input, 27);\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]*****\"), SV(\"{:*<{}}\"), input, 27);\r\n    check(SV(\"__[-42.5, 0, 1.25, 42.5]___\"), SV(\"{:_^{}}\"), input, 27);\r\n    check(SV(\"#####[-42.5, 0, 1.25, 42.5]\"), SV(\"{:#>{}}\"), input, 27);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__-42.5, 0, 1.25, 42.5___\"), SV(\"{:_^25n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"[-42.5,     0,  1.25,  42.5]\"), SV(\"{::5}\"), input);\r\n    check(SV(\"[-42.5, 0****, 1.25*, 42.5*]\"), SV(\"{::*<5}\"), input);\r\n    check(SV(\"[-42.5, __0__, 1.25_, 42.5_]\"), SV(\"{::_^5}\"), input);\r\n    check(SV(\"[-42.5, ::::0, :1.25, :42.5]\"), SV(\"{:::>5}\"), input);\r\n\r\n    check(SV(\"[-42.5,     0,  1.25,  42.5]\"), SV(\"{::{}}\"), input, 5);\r\n    check(SV(\"[-42.5, 0****, 1.25*, 42.5*]\"), SV(\"{::*<{}}\"), input, 5);\r\n    check(SV(\"[-42.5, __0__, 1.25_, 42.5_]\"), SV(\"{::_^{}}\"), input, 5);\r\n    check(SV(\"[-42.5, ::::0, :1.25, :42.5]\"), SV(\"{:::>{}}\"), input, 5);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]\"), SV(\"{::-}\"), input);\r\n    check(SV(\"[-42.5, +0, +1.25, +42.5]\"), SV(\"{::+}\"), input);\r\n    check(SV(\"[-42.5,  0,  1.25,  42.5]\"), SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check(SV(\"[-42.5, 0., 1.25, 42.5]\"), SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check(SV(\"[-42.5, 00000, 01.25, 042.5]\"), SV(\"{::05}\"), input);\r\n    check(SV(\"[-42.5, 0000., 01.25, 042.5]\"), SV(\"{::#05}\"), input);\r\n\r\n    // *** precision ***\r\n    check(SV(\"[-42, 0, 1.2, 42]\"), SV(\"{::.2}\"), input);\r\n    check(SV(\"[-42.500, 0.000, 1.250, 42.500]\"), SV(\"{::.3f}\"), input);\r\n\r\n    check(SV(\"[-42, 0, 1.2, 42]\"), SV(\"{::.{}}\"), input, 2);\r\n    check(SV(\"[-42.500, 0.000, 1.250, 42.500]\"), SV(\"{::.{}f}\"), input, 3);\r\n\r\n    check_exception(\"The precision option does not contain a value or an argument index\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]\"), SV(\"{::L}\"), input); // does not require locales present\r\n\r\n#if !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n    locale::global(locale(\"fr-FR\"));\r\n    check(SV(\"[-42,5, 0, 1,25, 42,5]\"), SV(\"{::L}\"), input);\r\n\r\n    locale::global(locale(\"en-US\"));\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]\"), SV(\"{::L}\"), input);\r\n\r\n    locale::global(locale::classic());\r\n#endif // !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"aAeEfFgG\")) {\r\n        check_exception(\r\n            \"The type option contains an invalid value for a floating-point formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^[-42.5, ::::0, :1.25, :42.5]^^^\"), SV(\"{:^^33::>5}\"), input);\r\n    check(SV(\"^^[-42.5, ::::0, :1.25, :42.5]^^^\"), SV(\"{:^^{}::>5}\"), input, 33);\r\n    check(SV(\"^^[-42.5, ::::0, :1.25, :42.5]^^^\"), SV(\"{:^^{}::>{}}\"), input, 33, 5);\r\n\r\n    check(SV(\"^^[::-42, ::::0, ::1.2, :::42]^^^\"), SV(\"{:^^33::>5.2}\"), input);\r\n    check(SV(\"^^[::-42, ::::0, ::1.2, :::42]^^^\"), SV(\"{:^^{}::>5.2}\"), input, 33);\r\n    check(SV(\"^^[::-42, ::::0, ::1.2, :::42]^^^\"), SV(\"{:^^{}::>{}.2}\"), input, 33, 5);\r\n    check(SV(\"^^[::-42, ::::0, ::1.2, :::42]^^^\"), SV(\"{:^^{}::>{}.{}}\"), input, 33, 5, 2);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>5.2}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}.2}\"), input, 33);\r\n    check_exception(\"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}.{}}\"),\r\n        input, 33, 5);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_floating_point(TestFunction check, ExceptionTest check_exception) {\r\n    array input{-42.5l, 0.0l, 1.25l, 42.5l};\r\n    test_floating_point<CharT>(check, check_exception, queue{input.begin(), input.end()});\r\n    test_floating_point<CharT>(check, check_exception, priority_queue{input.begin(), input.end(), greater{}});\r\n    test_floating_point<CharT>(check, check_exception, stack{input.begin(), input.end()});\r\n}\r\n\r\n//\r\n// Pointer\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_pointer(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"[0x0]\"), SV(\"{}\"), input);\r\n    check(SV(\"[0x0]^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"[0x0]^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"[0x0]     \"), SV(\"{:10}\"), input);\r\n    check(SV(\"[0x0]*****\"), SV(\"{:*<10}\"), input);\r\n    check(SV(\"__[0x0]___\"), SV(\"{:_^10}\"), input);\r\n    check(SV(\"#####[0x0]\"), SV(\"{:#>10}\"), input);\r\n\r\n    check(SV(\"[0x0]     \"), SV(\"{:{}}\"), input, 10);\r\n    check(SV(\"[0x0]*****\"), SV(\"{:*<{}}\"), input, 10);\r\n    check(SV(\"__[0x0]___\"), SV(\"{:_^{}}\"), input, 10);\r\n    check(SV(\"#####[0x0]\"), SV(\"{:#>{}}\"), input, 10);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"_0x0_\"), SV(\"{:_^5n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"[  0x0]\"), SV(\"{::5}\"), input);\r\n    check(SV(\"[0x0**]\"), SV(\"{::*<5}\"), input);\r\n    check(SV(\"[_0x0_]\"), SV(\"{::_^5}\"), input);\r\n    check(SV(\"[::0x0]\"), SV(\"{:::>5}\"), input);\r\n\r\n    check(SV(\"[  0x0]\"), SV(\"{::{}}\"), input, 5);\r\n    check(SV(\"[0x0**]\"), SV(\"{::*<{}}\"), input, 5);\r\n    check(SV(\"[_0x0_]\"), SV(\"{::_^{}}\"), input, 5);\r\n    check(SV(\"[::0x0]\"), SV(\"{:::>{}}\"), input, 5);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check(SV(\"[0x0000]\"), SV(\"{::06}\"), input);\r\n    check(SV(\"[0x0000]\"), SV(\"{::06p}\"), input);\r\n    check(SV(\"[0X0000]\"), SV(\"{::06P}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"pP\")) {\r\n        check_exception(\"The type option contains an invalid value for a pointer formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^[::0x0]^^^\"), SV(\"{:^^12::>5}\"), input);\r\n    check(SV(\"^^[::0x0]^^^\"), SV(\"{:^^{}::>5}\"), input, 12);\r\n    check(SV(\"^^[::0x0]^^^\"), SV(\"{:^^{}::>{}}\"), input, 12, 5);\r\n\r\n    check(SV(\"^^[::0x0]^^^\"), SV(\"{:^^12::>5}\"), input);\r\n    check(SV(\"^^[::0x0]^^^\"), SV(\"{:^^{}::>5}\"), input, 12);\r\n    check(SV(\"^^[::0x0]^^^\"), SV(\"{:^^{}::>{}}\"), input, 12, 5);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>5}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 12);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_pointer(TestFunction check, ExceptionTest check_exception) {\r\n    array input{static_cast<void*>(nullptr)};\r\n    test_pointer<CharT>(check, check_exception, queue{input.begin(), input.end()});\r\n    test_pointer<CharT>(check, check_exception, priority_queue{input.begin(), input.end()});\r\n    test_pointer<CharT>(check, check_exception, stack{input.begin(), input.end()});\r\n}\r\n\r\n//\r\n// String\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_string(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(R\"([\"Hello\", \"world\"])\"), SV(\"{}\"), input);\r\n    check(SV(R\"([\"Hello\", \"world\"]^42)\"), SV(\"{}^42\"), input);\r\n    check(SV(R\"([\"Hello\", \"world\"]^42)\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(R\"([\"Hello\", \"world\"]     )\"), SV(\"{:23}\"), input);\r\n    check(SV(R\"([\"Hello\", \"world\"]*****)\"), SV(\"{:*<23}\"), input);\r\n    check(SV(R\"(__[\"Hello\", \"world\"]___)\"), SV(\"{:_^23}\"), input);\r\n    check(SV(R\"(#####[\"Hello\", \"world\"])\"), SV(\"{:#>23}\"), input);\r\n\r\n    check(SV(R\"([\"Hello\", \"world\"]     )\"), SV(\"{:{}}\"), input, 23);\r\n    check(SV(R\"([\"Hello\", \"world\"]*****)\"), SV(\"{:*<{}}\"), input, 23);\r\n    check(SV(R\"(__[\"Hello\", \"world\"]___)\"), SV(\"{:_^{}}\"), input, 23);\r\n    check(SV(R\"(#####[\"Hello\", \"world\"])\"), SV(\"{:#>{}}\"), input, 23);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(R\"(_\"Hello\", \"world\"_)\"), SV(\"{:_^18n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(R\"([Hello   , world   ])\"), SV(\"{::8}\"), input);\r\n    check(SV(R\"([Hello***, world***])\"), SV(\"{::*<8}\"), input);\r\n    check(SV(R\"([_Hello__, _world__])\"), SV(\"{::_^8}\"), input);\r\n    check(SV(R\"([:::Hello, :::world])\"), SV(\"{:::>8}\"), input);\r\n\r\n    check(SV(R\"([Hello   , world   ])\"), SV(\"{::{}}\"), input, 8);\r\n    check(SV(R\"([Hello***, world***])\"), SV(\"{::*<{}}\"), input, 8);\r\n    check(SV(R\"([_Hello__, _world__])\"), SV(\"{::_^{}}\"), input, 8);\r\n    check(SV(R\"([:::Hello, :::world])\"), SV(\"{:::>{}}\"), input, 8);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check(SV(R\"([Hel, wor])\"), SV(\"{::.3}\"), input);\r\n\r\n    check(SV(R\"([Hel, wor])\"), SV(\"{::.{}}\"), input, 3);\r\n\r\n    check_exception(\"The precision option does not contain a value or an argument index\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"s?\")) {\r\n        check_exception(\"The type option contains an invalid value for a string formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^25::>8}\"), input);\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^{}::>8}\"), input, 25);\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^{}::>{}}\"), input, 25, 8);\r\n\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^25::>8}\"), input);\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^{}::>8}\"), input, 25);\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^{}::>{}}\"), input, 25, 8);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>8}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 25);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_string(TestFunction check, ExceptionTest check_exception) {\r\n    array input{STR(\"Hello\"), STR(\"world\")};\r\n    test_string<CharT>(check, check_exception, queue{input.begin(), input.end()});\r\n    test_string<CharT>(check, check_exception, priority_queue{input.begin(), input.end(), greater{}});\r\n    test_string<CharT>(check, check_exception, stack{input.begin(), input.end()});\r\n}\r\n\r\n//\r\n// Handle\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_status(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"[0xaaaa, 0x5555, 0xaa55]\"), SV(\"{}\"), input);\r\n    check(SV(\"[0xaaaa, 0x5555, 0xaa55]^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"[0xaaaa, 0x5555, 0xaa55]^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"[0xaaaa, 0x5555, 0xaa55]     \"), SV(\"{:29}\"), input);\r\n    check(SV(\"[0xaaaa, 0x5555, 0xaa55]*****\"), SV(\"{:*<29}\"), input);\r\n    check(SV(\"__[0xaaaa, 0x5555, 0xaa55]___\"), SV(\"{:_^29}\"), input);\r\n    check(SV(\"#####[0xaaaa, 0x5555, 0xaa55]\"), SV(\"{:#>29}\"), input);\r\n\r\n    check(SV(\"[0xaaaa, 0x5555, 0xaa55]     \"), SV(\"{:{}}\"), input, 29);\r\n    check(SV(\"[0xaaaa, 0x5555, 0xaa55]*****\"), SV(\"{:*<{}}\"), input, 29);\r\n    check(SV(\"__[0xaaaa, 0x5555, 0xaa55]___\"), SV(\"{:_^{}}\"), input, 29);\r\n    check(SV(\"#####[0xaaaa, 0x5555, 0xaa55]\"), SV(\"{:#>{}}\"), input, 29);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__0xaaaa, 0x5555, 0xaa55___\"), SV(\"{:_^27n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check_exception(\"The type option contains an invalid value for a status formatting argument\", SV(\"{::*<7}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"sxX\")) {\r\n        check_exception(\"The type option contains an invalid value for a status formatting argument\", fmt, input);\r\n    }\r\n\r\n    check(SV(\"[0xaaaa, 0x5555, 0xaa55]\"), SV(\"{::x}\"), input);\r\n    check(SV(\"[0XAAAA, 0X5555, 0XAA55]\"), SV(\"{::X}\"), input);\r\n    check(SV(\"[foo, bar, foobar]\"), SV(\"{::s}\"), input);\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^[0XAAAA, 0X5555, 0XAA55]^^^\"), SV(\"{:^^29:X}\"), input);\r\n    check(SV(\"^^[0XAAAA, 0X5555, 0XAA55]^^^\"), SV(\"{:^^{}:X}\"), input, 29);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:X}\"), input);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_status(TestFunction check, ExceptionTest check_exception) {\r\n    array input{status::foo, status::bar, status::foobar};\r\n    test_status<CharT>(check, check_exception, queue{input.begin(), input.end()});\r\n    test_status<CharT>(check, check_exception, priority_queue{input.begin(), input.end(), less{}});\r\n    test_status<CharT>(check, check_exception, stack{input.begin(), input.end()});\r\n}\r\n\r\n//\r\n// Driver\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid format_tests(TestFunction check, ExceptionTest check_exception) {\r\n    test_char<CharT>(check, check_exception);\r\n    if (same_as<CharT, wchar_t>) { // avoid testing twice\r\n        test_char_to_wchar(check, check_exception);\r\n    }\r\n    test_bool<CharT>(check, check_exception);\r\n    test_int<CharT>(check, check_exception);\r\n    test_floating_point<CharT>(check, check_exception);\r\n    test_pointer<CharT>(check, check_exception);\r\n    test_string<CharT>(check, check_exception);\r\n\r\n    test_status<CharT>(check, check_exception); // Has its own handler with its own parser\r\n}\r\n\r\nauto test_format = []<class CharT, class... Args>(basic_string_view<CharT> expected,\r\n                       type_identity_t<basic_format_string<CharT, Args...>> fmt, Args&&... args) {\r\n    basic_string<CharT> out = format(fmt, forward<Args>(args)...);\r\n    assert(out == expected);\r\n};\r\n\r\nauto test_format_exception = []<class CharT, class... Args>(string_view, basic_string_view<CharT>, Args&&...) {\r\n    // After P2216 most exceptions thrown by format become ill-formed.\r\n    // Therefore this test does nothing.\r\n};\r\n\r\nauto test_vformat = []<class CharT, class... Args>(\r\n                        basic_string_view<CharT> expected, basic_string_view<CharT> fmt, Args&&... args) {\r\n    basic_string<CharT> out = vformat(fmt, make_format_args<context_t<CharT>>(args...));\r\n    assert(out == expected);\r\n};\r\n\r\nauto test_vformat_exception = []<class CharT, class... Args>([[maybe_unused]] string_view what,\r\n                                  [[maybe_unused]] basic_string_view<CharT> fmt, [[maybe_unused]] Args&&... args) {\r\n    try {\r\n        static_cast<void>(vformat(fmt, make_format_args<context_t<CharT>>(args...)));\r\n        assert(false);\r\n    } catch (const format_error&) {\r\n    } catch (...) {\r\n        assert(false);\r\n    }\r\n};\r\n\r\nint main() {\r\n    format_tests<char>(test_format, test_format_exception);\r\n    format_tests<wchar_t>(test_format, test_format_exception);\r\n\r\n    format_tests<char>(test_vformat, test_vformat_exception);\r\n    format_tests<wchar_t>(test_vformat, test_vformat_exception);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_debug_enabled_specializations/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_debug_enabled_specializations/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <format>\r\n#include <memory_resource>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <test_format_support.hpp>\r\n\r\n#define STR(Str) TYPED_LITERAL(CharT, Str)\r\n\r\nusing namespace std;\r\n\r\ntemplate <class F>\r\nconcept DebugEnabledSpecialization = is_default_constructible_v<F> && requires(F& fmt) {\r\n    { fmt.set_debug_format() } noexcept -> same_as<void>;\r\n};\r\n\r\ntemplate <class CharT>\r\nconsteval bool check_debug_enabled_specializations() {\r\n    static_assert(DebugEnabledSpecialization<formatter<char, CharT>>);\r\n    static_assert(DebugEnabledSpecialization<formatter<CharT, CharT>>);\r\n    static_assert(DebugEnabledSpecialization<formatter<CharT*, CharT>>);\r\n    static_assert(DebugEnabledSpecialization<formatter<const CharT*, CharT>>);\r\n    static_assert(DebugEnabledSpecialization<formatter<CharT[3], CharT>>);\r\n    static_assert(DebugEnabledSpecialization<formatter<basic_string<CharT>, CharT>>);\r\n    static_assert(DebugEnabledSpecialization<formatter<pmr::basic_string<CharT>, CharT>>);\r\n    static_assert(DebugEnabledSpecialization<formatter<basic_string_view<CharT>, CharT>>);\r\n\r\n    static_assert(!DebugEnabledSpecialization<formatter<signed char, CharT>>);\r\n    static_assert(!DebugEnabledSpecialization<formatter<short, CharT>>);\r\n    static_assert(!DebugEnabledSpecialization<formatter<int, CharT>>);\r\n    static_assert(!DebugEnabledSpecialization<formatter<long, CharT>>);\r\n    static_assert(!DebugEnabledSpecialization<formatter<long long, CharT>>);\r\n\r\n    static_assert(!DebugEnabledSpecialization<formatter<unsigned char, CharT>>);\r\n    // NB: formatter<unsigned short, CharT> is special case, see below\r\n    static_assert(!DebugEnabledSpecialization<formatter<unsigned int, CharT>>);\r\n    static_assert(!DebugEnabledSpecialization<formatter<unsigned long, CharT>>);\r\n    static_assert(!DebugEnabledSpecialization<formatter<unsigned long long, CharT>>);\r\n\r\n    static_assert(!DebugEnabledSpecialization<formatter<bool, CharT>>);\r\n    static_assert(!DebugEnabledSpecialization<formatter<nullptr_t, CharT>>);\r\n    static_assert(!DebugEnabledSpecialization<formatter<void*, CharT>>);\r\n    static_assert(!DebugEnabledSpecialization<formatter<const void*, CharT>>);\r\n\r\n    // NB: wchar_t might be defined as a typedef for unsigned short (with '/Zc:wchar_t-')\r\n    static_assert(DebugEnabledSpecialization<formatter<unsigned short, CharT>> == same_as<CharT, unsigned short>);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class CharT>\r\nstruct Holder {\r\n    char narrow_ch;\r\n    CharT ch;\r\n    const CharT* const_ptr;\r\n    basic_string<CharT> str;\r\n    CharT* non_const_ptr;\r\n    basic_string_view<CharT> str_view;\r\n    CharT arr[11];\r\n};\r\n\r\n// holder-format-specs:\r\n//   member debug-format(opt)\r\n// member:\r\n//   0 1 2 ... N (index of member object, single digit)\r\n// debug-format:\r\n//   $ (use debug format)\r\ntemplate <class CharT>\r\nstruct std::formatter<Holder<CharT>, CharT> {\r\npublic:\r\n    constexpr auto parse(basic_format_parse_context<CharT>& ctx) {\r\n        auto it = ctx.begin();\r\n        if (it == ctx.end() || *it == STR('}')) {\r\n            throw format_error{\"Invalid holder-format-specs.\"};\r\n        }\r\n\r\n        if (STR('0') <= *it && *it <= STR('9')) {\r\n            member_index = *it - STR('0');\r\n        } else {\r\n            throw format_error{\"Expected member index in holder-format-specs.\"};\r\n        }\r\n\r\n        ++it;\r\n        if (it == ctx.end() || *it == STR('}')) {\r\n            return it;\r\n        }\r\n\r\n        if (*it == '$') {\r\n            switch (member_index) {\r\n            case 0:\r\n                fmt0.set_debug_format();\r\n                break;\r\n            case 1:\r\n                fmt1.set_debug_format();\r\n                break;\r\n            case 2:\r\n                fmt2.set_debug_format();\r\n                break;\r\n            case 3:\r\n                fmt3.set_debug_format();\r\n                break;\r\n            case 4:\r\n                fmt4.set_debug_format();\r\n                break;\r\n            case 5:\r\n                fmt5.set_debug_format();\r\n                break;\r\n            case 6:\r\n                fmt6.set_debug_format();\r\n                break;\r\n            }\r\n        } else {\r\n            throw format_error{\"Unexpected symbols in holder-format-specs.\"};\r\n        }\r\n\r\n        ++it;\r\n        if (it != ctx.end() && *it != STR('}')) {\r\n            throw format_error{\"Expected '}' at the end of holder-format-specs.\"};\r\n        }\r\n\r\n        return it;\r\n    }\r\n\r\n    template <class FormatContext>\r\n    auto format(const Holder<CharT>& val, FormatContext& ctx) const {\r\n        switch (member_index) {\r\n        case 0:\r\n            return fmt0.format(val.narrow_ch, ctx);\r\n        case 1:\r\n            return fmt1.format(val.ch, ctx);\r\n        case 2:\r\n            return fmt2.format(val.const_ptr, ctx);\r\n        case 3:\r\n            return fmt3.format(val.str, ctx);\r\n        case 4:\r\n            return fmt4.format(val.non_const_ptr, ctx);\r\n        case 5:\r\n            return fmt5.format(val.str_view, ctx);\r\n        case 6:\r\n            return fmt6.format(val.arr, ctx);\r\n        }\r\n\r\n        unreachable();\r\n    }\r\n\r\nprivate:\r\n    int member_index{-1};\r\n\r\n    formatter<char, CharT> fmt0;\r\n    formatter<CharT, CharT> fmt1;\r\n    formatter<const CharT*, CharT> fmt2;\r\n    formatter<basic_string<CharT>, CharT> fmt3;\r\n    formatter<CharT*, CharT> fmt4;\r\n    formatter<basic_string_view<CharT>, CharT> fmt5;\r\n    formatter<CharT[11], CharT> fmt6;\r\n};\r\n\r\ntemplate <class CharT>\r\nvoid check_set_debug_format_function() {\r\n    Holder<CharT> val;\r\n\r\n    val.narrow_ch     = '\\t';\r\n    val.ch            = STR('\\t');\r\n    val.const_ptr     = STR(\"const\\tCharT\\t*\");\r\n    val.str           = STR(\"basic\\tstring\");\r\n    val.non_const_ptr = val.str.data();\r\n    val.str_view      = STR(\"basic\\tstring\\tview\");\r\n    ranges::copy(STR(\"CharT\\t[11]\\0\"sv), val.arr);\r\n\r\n    assert(format(STR(\"{:0}\"), val) == STR(\"\\t\"));\r\n    assert(format(STR(\"{:1}\"), val) == STR(\"\\t\"));\r\n    assert(format(STR(\"{:2}\"), val) == STR(\"const\\tCharT\\t*\"));\r\n    assert(format(STR(\"{:3}\"), val) == STR(\"basic\\tstring\"));\r\n    assert(format(STR(\"{:4}\"), val) == STR(\"basic\\tstring\"));\r\n    assert(format(STR(\"{:5}\"), val) == STR(\"basic\\tstring\\tview\"));\r\n    assert(format(STR(\"{:6}\"), val) == STR(\"CharT\\t[11]\"));\r\n\r\n    assert(format(STR(\"{:0$}\"), val) == STR(R\"('\\t')\"));\r\n    assert(format(STR(\"{:1$}\"), val) == STR(R\"('\\t')\"));\r\n    assert(format(STR(\"{:2$}\"), val) == STR(R\"(\"const\\tCharT\\t*\")\"));\r\n    assert(format(STR(\"{:3$}\"), val) == STR(R\"(\"basic\\tstring\")\"));\r\n    assert(format(STR(\"{:4$}\"), val) == STR(R\"(\"basic\\tstring\")\"));\r\n    assert(format(STR(\"{:5$}\"), val) == STR(R\"(\"basic\\tstring\\tview\")\"));\r\n    assert(format(STR(\"{:6$}\"), val) == STR(R\"(\"CharT\\t[11]\")\"));\r\n}\r\n\r\nvoid set_debug_format(auto&) {}\r\n\r\nstruct name_lookup_in_formatter_checker : formatter<int> {\r\n    auto parse(auto& ctx) { // COMPILE-ONLY\r\n        set_debug_format(*this);\r\n        return ctx.begin();\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert(check_debug_enabled_specializations<char>());\r\n    static_assert(check_debug_enabled_specializations<wchar_t>());\r\n\r\n    check_set_debug_format_function<char>();\r\n    check_set_debug_format_function<wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_escaping/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_escaping/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <format>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename CharT>\r\n[[nodiscard]] constexpr const CharT* choose_literal(const char* const str, const wchar_t* const wstr) noexcept {\r\n    if constexpr (is_same_v<CharT, char>) {\r\n        return str;\r\n    } else {\r\n        return wstr;\r\n    }\r\n}\r\n\r\n#define STR(Literal) (choose_literal<CharT>(Literal, L##Literal))\r\n\r\ntemplate <class charT, class... Args>\r\nauto make_testing_format_args(Args&&... vals) { // references to temporaries are risky, see P2905R2; we'll be careful\r\n    if constexpr (is_same_v<charT, wchar_t>) {\r\n        return make_wformat_args(vals...);\r\n    } else {\r\n        return make_format_args(vals...);\r\n    }\r\n}\r\n\r\ntemplate <class CharT, class T>\r\nvoid test_escaped_character() {\r\n    assert(format(STR(\"{:?}\"), T('\\t')) == STR(R\"('\\t')\"));\r\n    assert(format(STR(\"{:?}\"), T('\\n')) == STR(R\"('\\n')\"));\r\n    assert(format(STR(\"{:?}\"), T('\\r')) == STR(R\"('\\r')\"));\r\n    assert(format(STR(\"{:?}\"), T('\\\"')) == STR(R\"('\"')\"));\r\n    assert(format(STR(\"{:?}\"), T('\\'')) == STR(R\"('\\'')\"));\r\n    assert(format(STR(\"{:?}\"), T('\\\\')) == STR(R\"('\\\\')\"));\r\n\r\n    assert(format(STR(\"{:?}\"), T('\\0')) == STR(R\"('\\u{0}')\"));\r\n    assert(format(STR(\"{:?}\"), T('\\v')) == STR(R\"('\\u{b}')\"));\r\n    assert(format(STR(\"{:?}\"), T('\\f')) == STR(R\"('\\u{c}')\"));\r\n    assert(format(STR(\"{:?}\"), T('\\x7F')) == STR(R\"('\\u{7f}')\"));\r\n\r\n    assert(format(STR(\"{:?}\"), T(' ')) == STR(\"' '\"));\r\n    assert(format(STR(\"{:?}\"), T('~')) == STR(\"'~'\"));\r\n\r\n    if constexpr (is_same_v<CharT, wchar_t> && is_same_v<T, wchar_t>) {\r\n        assert(format(L\"{:?}\", L'\\xA0') == LR\"('\\u{a0}')\"); // U+00A0 NO-BREAK SPACE\r\n        assert(format(L\"{:?}\", L'\\x300') == LR\"('\\u{300}')\"); // U+0300 COMBINING GRAVE ACCENT\r\n\r\n        assert(format(L\"{:?}\", L'\\xA1') == L\"'\\xA1'\"); // U+00A1 INVERTED EXCLAMATION MARK\r\n\r\n        assert(format(L\"{:?}\", L'\\xD800') == LR\"('\\x{d800}')\");\r\n        assert(format(L\"{:?}\", L'\\xDFFF') == LR\"('\\x{dfff}')\");\r\n    }\r\n}\r\n\r\ntemplate <class CharT>\r\nvoid test_escaped_string() {\r\n    assert(format(STR(\"{:?}\"), STR(\"\\t\")) == STR(R\"(\"\\t\")\"));\r\n    assert(format(STR(\"{:?}\"), STR(\"\\n\")) == STR(R\"(\"\\n\")\"));\r\n    assert(format(STR(\"{:?}\"), STR(\"\\r\")) == STR(R\"(\"\\r\")\"));\r\n    assert(format(STR(\"{:?}\"), STR(\"\\\"\")) == STR(\"\\\"\\\\\\\"\\\"\"));\r\n    assert(format(STR(\"{:?}\"), STR(\"\\'\")) == STR(R\"(\"'\")\"));\r\n    assert(format(STR(\"{:?}\"), STR(\"\\\\\")) == STR(R\"(\"\\\\\")\"));\r\n\r\n    assert(format(STR(\"{:?}\"), STR(\"\\v\")) == STR(R\"(\"\\u{b}\")\"));\r\n    assert(format(STR(\"{:?}\"), STR(\"\\f\")) == STR(R\"(\"\\u{c}\")\"));\r\n    assert(format(STR(\"{:?}\"), STR(\"\\x7F\")) == STR(R\"(\"\\u{7f}\")\"));\r\n\r\n    assert(format(STR(\"{:?}\"), STR(\" \")) == STR(\"\\\" \\\"\"));\r\n    assert(format(STR(\"{:?}\"), STR(\"~\")) == STR(\"\\\"~\\\"\"));\r\n\r\n    assert(format(STR(\"[{:?}]\"), basic_string{STR(\"\\0 \\n \\t \\x02 \\x1b\"), 9}) == STR(R\"([\"\\u{0} \\n \\t \\u{2} \\u{1b}\"])\"));\r\n    assert(format(STR(\"[{:?}]\"), basic_string_view{STR(\"\\0 \\n \\t \\x02 \\x1b\"), 9})\r\n           == STR(R\"([\"\\u{0} \\n \\t \\u{2} \\u{1b}\"])\"));\r\n\r\n    if constexpr (is_same_v<CharT, wchar_t>) {\r\n        assert(format(L\"{:?}\", L\"\\xA0\") == LR\"(\"\\u{a0}\")\"); // U+00A0 NO-BREAK SPACE\r\n        assert(format(L\"{:?}\", L\"\\U0010FFFF\") == LR\"(\"\\u{10ffff}\")\"); // noncharacter\r\n        assert(format(L\"{:?}\", L\"\\x300\") == LR\"(\"\\u{300}\")\"); // U+0300 COMBINING GRAVE ACCENT\r\n\r\n        assert(format(L\"{:?}\", L\"\\xA1\") == L\"\\\"\\xA1\\\"\"); // U+00A1 INVERTED EXCLAMATION MARK\r\n        assert(format(L\"{:?}\", L\"\\U00010000\") == L\"\\\"\\U00010000\\\"\"); // U+10000 LINEAR B SYLLABLE B008 A\r\n\r\n        assert(format(L\"{:?}\", L\"\\xD800\") == L\"\\\"\\\\x{d800}\\\"\");\r\n        assert(format(L\"{:?}\", L\"\\xDFFF\") == L\"\\\"\\\\x{dfff}\\\"\");\r\n        assert(format(L\"{:?}\", L\"\\xDFFF\\xD800\") == L\"\\\"\\\\x{dfff}\\\\x{d800}\\\"\");\r\n\r\n        assert(format(L\"{:?}\", L\"\\xA0\\x300\") == L\"\\\"\\\\u{a0}\\\\u{300}\\\"\");\r\n        assert(format(L\"{:?}\", L\" \\x300\") == L\"\\\" \\x300\\\"\");\r\n        assert(format(L\"{:?}\", L\"~\\x300\") == L\"\\\"~\\x300\\\"\");\r\n    }\r\n}\r\n\r\ntemplate <class CharT, class T>\r\nvoid test_format_specs() {\r\n    assert(format(STR(\"{:5?}\"), T('\\n')) == STR(R\"('\\n' )\"));\r\n    try {\r\n        (void) vformat(STR(\"{:.3?}\"), make_testing_format_args<CharT>(T('\\n')));\r\n        assert(false);\r\n    } catch (const format_error&) {\r\n    }\r\n\r\n    assert(format(STR(\"{:5?}\"), STR(\"\\n\")) == STR(R\"(\"\\n\" )\"));\r\n    assert(format(STR(\"{:.3?}\"), STR(\"\\n\")) == STR(R\"(\"\\n)\"));\r\n    assert(format(STR(\"{:5.3?}\"), STR(\"\\n\")) == STR(R\"(\"\\n  )\"));\r\n    assert(format(STR(\"{:>5.3?}\"), STR(\"\\n\")) == STR(R\"(  \"\\n)\"));\r\n}\r\n\r\nint main() {\r\n    test_escaped_character<char, char>();\r\n    test_escaped_character<wchar_t, char>();\r\n    test_escaped_character<wchar_t, wchar_t>();\r\n\r\n    test_escaped_string<char>();\r\n    test_escaped_string<wchar_t>();\r\n\r\n    test_format_specs<char, char>();\r\n    test_format_specs<wchar_t, char>();\r\n    test_format_specs<wchar_t, wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_escaping_legacy_text_encoding/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This is `usual_latest_matrix.lst` with `/execution-charset:.932` added.\r\n# clang is excluded since it doesn't support non-UTF-8 execution charsets.\r\n\r\nRUNALL_INCLUDE ..\\prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w14640 /Zc:threadSafeInit- /EHsc /std:c++latest /execution-charset:.932\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/MD /D_ITERATOR_DEBUG_LEVEL=0 /permissive- /Zc:noexceptTypes-\"\r\nASAN\tPM_CL=\"/MD /permissive- /Zc:noexceptTypes- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MD /D_ITERATOR_DEBUG_LEVEL=1 /permissive-\"\r\nASAN\tPM_CL=\"/MD /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MD /D_ITERATOR_DEBUG_LEVEL=0 /permissive- /Zc:char8_t- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/MD /permissive- /Zc:char8_t- /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MDd /D_ITERATOR_DEBUG_LEVEL=0 /permissive- /Zc:wchar_t-\"\r\nASAN\tPM_CL=\"/MDd /permissive- /Zc:wchar_t- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MDd /D_ITERATOR_DEBUG_LEVEL=1 /permissive-\"\r\nASAN\tPM_CL=\"/MDd /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MDd /D_ITERATOR_DEBUG_LEVEL=2 /permissive- /fp:except /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/MDd /permissive- /fp:except /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MT /D_ITERATOR_DEBUG_LEVEL=0 /permissive-\"\r\nASAN\tPM_CL=\"/MT /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MT /D_ITERATOR_DEBUG_LEVEL=0 /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/MT /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MT /D_ITERATOR_DEBUG_LEVEL=1 /permissive-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/MTd /D_ITERATOR_DEBUG_LEVEL=0 /permissive- /fp:strict\"\r\nASAN\tPM_CL=\"/MTd /permissive- /fp:strict -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MTd /D_ITERATOR_DEBUG_LEVEL=1 /permissive-\"\r\nASAN\tPM_CL=\"/MTd /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MTd /D_ITERATOR_DEBUG_LEVEL=2 /permissive\"\r\nASAN\tPM_CL=\"/MTd /permissive -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MTd /D_ITERATOR_DEBUG_LEVEL=2 /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/MTd /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/permissive- /BE /c /MD\"\r\nPM_CL=\"/permissive- /BE /c /MTd\"\r\n# PM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /permissive- /MD\"\r\n# PM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /permissive- /MTd /fp:strict\"\r\n# PM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /permissive- /MT /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined\"\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_escaping_legacy_text_encoding/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <format>\r\n\r\nusing namespace std;\r\n\r\nvoid test_escaped_string() {\r\n    assert(format(\"{:?}\", \"\\x81\\x40\") == \"\\\"\\\\u{3000}\\\"\"); // U+3000 IDEOGRAPHIC SPACE\r\n\r\n    assert(format(\"{:?}\", \"\\x81\\x41\") == \"\\\"\\x81\\x41\\\"\");\r\n\r\n    assert(format(\"{:?}\", \"\\x81\") == \"\\\"\\\\x{81}\\\"\");\r\n    assert(format(\"{:?}\", \"\\xEB!\") == \"\\\"\\\\x{eb}!\\\"\");\r\n\r\n    assert(format(\"{:?}\", \"\\x81\\x40\\x40\\x81\") == \"\\\"\\\\u{3000}\\x40\\\\x{81}\\\"\");\r\n\r\n    assert(format(\"{:?}\", \"\\xFC\\x4B\") == \"\\\"\\u9ED1\\\"\");\r\n}\r\n\r\ntemplate <class TupleOrPair>\r\nvoid test_tuple_or_pair_escaping(TupleOrPair&& input) {\r\n    get<1>(input) = \"hell\\uff2f\"; // U+FF2F FULLWIDTH LATIN CAPITAL LETTER O\r\n    assert(format(\"{}\", input) == \"('*', \\\"hell\\uff2f\\\")\");\r\n    assert(format(\"{:#^16}\", input) == \"('*', \\\"hell\\uff2f\\\")#\");\r\n}\r\n\r\nint main() {\r\n    test_escaped_string();\r\n    test_tuple_or_pair_escaping(make_pair('*', \"\"));\r\n    test_tuple_or_pair_escaping(make_tuple('*', \"\"));\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_escaping_utf8/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/utf-8\"\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_escaping_utf8/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <clocale>\r\n#include <format>\r\n\r\nusing namespace std;\r\n\r\nvoid test_escaped_string() {\r\n    assert(format(\"{:?}\", \"\\u00A0\") == \"\\\"\\\\u{a0}\\\"\"); // U+00A0 NO-BREAK SPACE\r\n    assert(format(\"{:?}\", \"\\u0300\") == \"\\\"\\\\u{300}\\\"\"); // U+0300 COMBINING GRAVE ACCENT\r\n\r\n    assert(format(\"{:?}\", \"\\u00A1\") == \"\\\"\\u00A1\\\"\"); // U+00A1 INVERTED EXCLAMATION MARK\r\n    assert(format(\"{:?}\", \"\\U00010000\") == \"\\\"\\U00010000\\\"\"); // U+10000 LINEAR B SYLLABLE B008 A\r\n\r\n    assert(format(\"{:?}\", \"\\xC0\\x80\") == \"\\\"\\\\x{c0}\\\\x{80}\\\"\"); // ill-formed code unit sequence\r\n\r\n    assert(format(\"{:?}\", \"\\u00A0\\u0300\") == \"\\\"\\\\u{a0}\\\\u{300}\\\"\");\r\n    assert(format(\"{:?}\", \" \\u0300\") == \"\\\" \\u0300\\\"\");\r\n    assert(format(\"{:?}\", \"a\\u0300\") == \"\\\"a\\u0300\\\"\");\r\n}\r\n\r\ntemplate <class TupleOrPair>\r\nvoid test_tuple_or_pair_escaping(TupleOrPair&& input) {\r\n    get<1>(input) = \"hell\\u00d6\"; // U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS\r\n    assert(format(\"{}\", input) == \"('*', \\\"hell\\u00d6\\\")\");\r\n    assert(format(\"{:#^16}\", input) == \"#('*', \\\"hell\\u00d6\\\")#\");\r\n\r\n    get<1>(input) = \"hell\\uff2f\"; // U+FF2F FULLWIDTH LATIN CAPITAL LETTER O\r\n    assert(format(\"{}\", input) == \"('*', \\\"hell\\uff2f\\\")\");\r\n    assert(format(\"{:#^16}\", input) == \"('*', \\\"hell\\uff2f\\\")#\");\r\n}\r\n\r\nvoid run_test() {\r\n    test_escaped_string();\r\n    test_tuple_or_pair_escaping(make_pair('*', \"\"));\r\n    test_tuple_or_pair_escaping(make_tuple('*', \"\"));\r\n}\r\n\r\nint main() {\r\n    run_test();\r\n\r\n    assert(setlocale(LC_ALL, \".1252\") != nullptr);\r\n    run_test();\r\n\r\n    assert(setlocale(LC_ALL, \".932\") != nullptr);\r\n    run_test();\r\n\r\n    assert(setlocale(LC_ALL, \".UTF-8\") != nullptr);\r\n    run_test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_formattable/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_formattable/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n// derived from libc++'s test files:\r\n// * std/utilities/format/format.formattable/concept.formattable.compile.pass.cpp\r\n// * std/utilities/format/format.formattable/concept.formattable.float.compile.pass.cpp\r\n\r\n#include <array>\r\n#include <chrono>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <format>\r\n#include <forward_list>\r\n#include <list>\r\n#include <map>\r\n#include <memory>\r\n#include <optional>\r\n#include <queue>\r\n#include <set>\r\n#include <span>\r\n#include <stack>\r\n#include <stacktrace>\r\n#include <string>\r\n#include <string_view>\r\n#include <thread>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <valarray>\r\n#include <variant>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class CharT>\r\nconcept formatter_supporting_character_type = same_as<CharT, char> || same_as<CharT, wchar_t>;\r\n\r\ntemplate <class CharT>\r\nconcept encoded_character_type = same_as<CharT, char>\r\n#ifdef __cpp_char8_t\r\n                              || same_as<CharT, char8_t>\r\n#endif // defined(__cpp_char8_t)\r\n                              || same_as<CharT, char16_t> || same_as<CharT, char32_t> || same_as<CharT, wchar_t>;\r\n\r\ntemplate <class T>\r\nstruct alternative_allocator {\r\n    using value_type = T;\r\n\r\n    alternative_allocator() = default;\r\n    template <class U>\r\n    constexpr alternative_allocator(const alternative_allocator<U>&) noexcept {}\r\n\r\n    T* allocate(size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* p, size_t n) {\r\n        allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class U>\r\n    bool operator==(const alternative_allocator<U>&) const noexcept {\r\n        return true;\r\n    }\r\n};\r\n\r\ntemplate <class T, class CharT>\r\nvoid assert_is_not_formattable() {\r\n    static_assert(!formattable<T, CharT>);\r\n    static_assert(!formattable<T&, CharT>);\r\n    static_assert(!formattable<T&&, CharT>);\r\n    static_assert(!formattable<const T, CharT>);\r\n    static_assert(!formattable<const T&, CharT>);\r\n    static_assert(!formattable<const T&&, CharT>);\r\n}\r\n\r\ntemplate <class T, class CharT>\r\nvoid assert_is_formattable() {\r\n    // Only formatters for CharT == char || CharT == wchar_t are enabled for the standard formatters. When CharT is a\r\n    // different type the formatter should be disabled.\r\n    if constexpr (formatter_supporting_character_type<CharT>) {\r\n        static_assert(formattable<T, CharT>);\r\n        static_assert(formattable<T&, CharT>);\r\n        static_assert(formattable<T&&, CharT>);\r\n        static_assert(formattable<const T, CharT>);\r\n        static_assert(formattable<const T&, CharT>);\r\n        static_assert(formattable<const T&&, CharT>);\r\n    } else {\r\n        assert_is_not_formattable<T, CharT>();\r\n    }\r\n}\r\n\r\n// Tests for P0645 Text Formatting\r\ntemplate <class CharT>\r\nvoid test_P0645() {\r\n    assert_is_formattable<CharT, CharT>();\r\n\r\n    assert_is_formattable<CharT*, CharT>();\r\n    assert_is_formattable<const CharT*, CharT>();\r\n    assert_is_formattable<CharT[42], CharT>();\r\n    if constexpr (encoded_character_type<CharT>) { // string and string_view only work with proper character types\r\n        assert_is_formattable<basic_string<CharT>, CharT>();\r\n        assert_is_formattable<basic_string_view<CharT>, CharT>();\r\n    }\r\n\r\n    assert_is_formattable<bool, CharT>();\r\n\r\n    assert_is_formattable<signed char, CharT>();\r\n    assert_is_formattable<short, CharT>();\r\n    assert_is_formattable<int, CharT>();\r\n    assert_is_formattable<long, CharT>();\r\n    assert_is_formattable<long long, CharT>();\r\n\r\n    assert_is_formattable<unsigned char, CharT>();\r\n    assert_is_formattable<unsigned short, CharT>();\r\n    assert_is_formattable<unsigned int, CharT>();\r\n    assert_is_formattable<unsigned long, CharT>();\r\n    assert_is_formattable<unsigned long long, CharT>();\r\n\r\n    assert_is_formattable<float, CharT>();\r\n    assert_is_formattable<double, CharT>();\r\n    assert_is_formattable<long double, CharT>();\r\n\r\n    assert_is_formattable<nullptr_t, CharT>();\r\n    assert_is_formattable<void*, CharT>();\r\n    assert_is_formattable<const void*, CharT>();\r\n}\r\n\r\n// Tests the special formatter that converts a char to a wchar_t.\r\nvoid test_P0645_char_wchar_t() {\r\n    assert_is_formattable<char, wchar_t>();\r\n}\r\n\r\n// Tests for P1361 Integration of chrono with text formatting\r\ntemplate <class CharT>\r\nvoid test_P1361() {\r\n    // The chrono formatters require localization support.\r\n    // N4964 [time.format]/7\r\n    //   If the chrono-specs is omitted, the chrono object is formatted as if by\r\n    //   streaming it to basic_ostringstream<charT> os with the formatting\r\n    //   locale imbued and copying os.str() through the output iterator of the\r\n    //   context with additional padding and adjustments as specified by the format\r\n    //   specifiers.\r\n\r\n    assert_is_formattable<chrono::microseconds, CharT>();\r\n\r\n    assert_is_formattable<chrono::sys_time<chrono::microseconds>, CharT>();\r\n    assert_is_formattable<chrono::utc_time<chrono::microseconds>, CharT>();\r\n    assert_is_formattable<chrono::tai_time<chrono::microseconds>, CharT>();\r\n    assert_is_formattable<chrono::gps_time<chrono::microseconds>, CharT>();\r\n    assert_is_formattable<chrono::file_time<chrono::microseconds>, CharT>();\r\n    assert_is_formattable<chrono::local_time<chrono::microseconds>, CharT>();\r\n\r\n    assert_is_formattable<chrono::day, CharT>();\r\n    assert_is_formattable<chrono::month, CharT>();\r\n    assert_is_formattable<chrono::year, CharT>();\r\n\r\n    assert_is_formattable<chrono::weekday, CharT>();\r\n    assert_is_formattable<chrono::weekday_indexed, CharT>();\r\n    assert_is_formattable<chrono::weekday_last, CharT>();\r\n\r\n    assert_is_formattable<chrono::month_day, CharT>();\r\n    assert_is_formattable<chrono::month_day_last, CharT>();\r\n    assert_is_formattable<chrono::month_weekday, CharT>();\r\n    assert_is_formattable<chrono::month_weekday_last, CharT>();\r\n\r\n    assert_is_formattable<chrono::year_month, CharT>();\r\n    assert_is_formattable<chrono::year_month_day, CharT>();\r\n    assert_is_formattable<chrono::year_month_day_last, CharT>();\r\n    assert_is_formattable<chrono::year_month_weekday, CharT>();\r\n    assert_is_formattable<chrono::year_month_weekday_last, CharT>();\r\n\r\n    assert_is_formattable<chrono::hh_mm_ss<chrono::microseconds>, CharT>();\r\n\r\n    assert_is_formattable<chrono::sys_info, CharT>();\r\n    assert_is_formattable<chrono::local_info, CharT>();\r\n\r\n    assert_is_formattable<chrono::zoned_time<chrono::seconds>, CharT>();\r\n}\r\n\r\n// Tests for P2693 Formatting thread::id and stacktrace\r\ntemplate <class CharT>\r\nvoid test_P2693() {\r\n    assert_is_formattable<thread::id, CharT>();\r\n    if constexpr (same_as<CharT, char>) {\r\n        assert_is_formattable<stacktrace_entry, CharT>();\r\n        assert_is_formattable<stacktrace, CharT>();\r\n    } else {\r\n        assert_is_not_formattable<stacktrace_entry, CharT>();\r\n        assert_is_not_formattable<stacktrace, CharT>();\r\n    }\r\n}\r\n\r\ntemplate <class CharT, class Vector>\r\nvoid test_P2286_vector_bool() {\r\n    assert_is_formattable<typename Vector::reference, CharT>();\r\n\r\n    // The const_reference shall be bool.\r\n    assert_is_formattable<typename Vector::const_reference, CharT>();\r\n}\r\n\r\n// Tests for P2286 Formatting ranges\r\ntemplate <class CharT>\r\nvoid test_P2286() {\r\n    assert_is_formattable<array<int, 42>, CharT>();\r\n    assert_is_formattable<vector<int>, CharT>();\r\n    assert_is_formattable<deque<int>, CharT>();\r\n    assert_is_formattable<forward_list<int>, CharT>();\r\n    assert_is_formattable<list<int>, CharT>();\r\n\r\n    assert_is_formattable<set<int>, CharT>();\r\n    assert_is_formattable<map<int, int>, CharT>();\r\n    assert_is_formattable<multiset<int>, CharT>();\r\n    assert_is_formattable<multimap<int, int>, CharT>();\r\n\r\n    assert_is_formattable<unordered_set<int>, CharT>();\r\n    assert_is_formattable<unordered_map<int, int>, CharT>();\r\n    assert_is_formattable<unordered_multiset<int>, CharT>();\r\n    assert_is_formattable<unordered_multimap<int, int>, CharT>();\r\n\r\n    assert_is_formattable<span<int>, CharT>();\r\n\r\n    assert_is_formattable<valarray<int>, CharT>();\r\n\r\n    assert_is_formattable<pair<int, int>, CharT>();\r\n    assert_is_formattable<tuple<int>, CharT>();\r\n\r\n    test_P2286_vector_bool<CharT, vector<bool>>();\r\n    test_P2286_vector_bool<CharT, pmr::vector<bool>>();\r\n    test_P2286_vector_bool<CharT, vector<bool, alternative_allocator<bool>>>();\r\n}\r\n\r\n// Tests volatile qualified objects are no longer formattable.\r\ntemplate <class CharT>\r\nvoid test_LWG3631() {\r\n    assert_is_not_formattable<volatile CharT, CharT>();\r\n\r\n    assert_is_not_formattable<volatile bool, CharT>();\r\n\r\n    assert_is_not_formattable<volatile int, CharT>();\r\n    assert_is_not_formattable<volatile unsigned int, CharT>();\r\n\r\n    assert_is_not_formattable<volatile chrono::microseconds, CharT>();\r\n    assert_is_not_formattable<volatile chrono::sys_time<chrono::microseconds>, CharT>();\r\n    assert_is_not_formattable<volatile chrono::day, CharT>();\r\n\r\n    assert_is_not_formattable<array<volatile int, 42>, CharT>();\r\n\r\n    assert_is_not_formattable<pair<volatile int, int>, CharT>();\r\n    assert_is_not_formattable<pair<int, volatile int>, CharT>();\r\n    assert_is_not_formattable<pair<volatile int, volatile int>, CharT>();\r\n}\r\n\r\nstruct c {};\r\nenum e { a };\r\nenum class ec { a };\r\n\r\ntemplate <class CharT>\r\nvoid test_disabled() {\r\n    if constexpr (!same_as<CharT, char>) {\r\n        assert_is_not_formattable<char*, CharT>();\r\n        assert_is_not_formattable<const char*, CharT>();\r\n        assert_is_not_formattable<char[42], CharT>();\r\n        assert_is_not_formattable<string, CharT>();\r\n        assert_is_not_formattable<string_view, CharT>();\r\n    }\r\n\r\n    assert_is_not_formattable<c, CharT>();\r\n    assert_is_not_formattable<const c, CharT>();\r\n    assert_is_not_formattable<volatile c, CharT>();\r\n    assert_is_not_formattable<const volatile c, CharT>();\r\n\r\n    assert_is_not_formattable<e, CharT>();\r\n    assert_is_not_formattable<const e, CharT>();\r\n    assert_is_not_formattable<volatile e, CharT>();\r\n    assert_is_not_formattable<const volatile e, CharT>();\r\n\r\n    assert_is_not_formattable<ec, CharT>();\r\n    assert_is_not_formattable<const ec, CharT>();\r\n    assert_is_not_formattable<volatile ec, CharT>();\r\n    assert_is_not_formattable<const volatile ec, CharT>();\r\n\r\n    assert_is_not_formattable<int*, CharT>();\r\n    assert_is_not_formattable<const int*, CharT>();\r\n    assert_is_not_formattable<volatile int*, CharT>();\r\n    assert_is_not_formattable<const volatile int*, CharT>();\r\n\r\n    assert_is_not_formattable<c*, CharT>();\r\n    assert_is_not_formattable<const c*, CharT>();\r\n    assert_is_not_formattable<volatile c*, CharT>();\r\n    assert_is_not_formattable<const volatile c*, CharT>();\r\n\r\n    assert_is_not_formattable<e*, CharT>();\r\n    assert_is_not_formattable<const e*, CharT>();\r\n    assert_is_not_formattable<volatile e*, CharT>();\r\n    assert_is_not_formattable<const volatile e*, CharT>();\r\n\r\n    assert_is_not_formattable<ec*, CharT>();\r\n    assert_is_not_formattable<const ec*, CharT>();\r\n    assert_is_not_formattable<volatile ec*, CharT>();\r\n    assert_is_not_formattable<const volatile ec*, CharT>();\r\n\r\n    assert_is_not_formattable<void (*)(), CharT>();\r\n    assert_is_not_formattable<void (c::*)(), CharT>();\r\n    assert_is_not_formattable<void (c::*)() const, CharT>();\r\n\r\n    assert_is_not_formattable<optional<int>, CharT>();\r\n    assert_is_not_formattable<variant<int>, CharT>();\r\n\r\n    assert_is_not_formattable<shared_ptr<c>, CharT>();\r\n    assert_is_not_formattable<unique_ptr<c>, CharT>();\r\n\r\n    assert_is_not_formattable<array<c, 42>, CharT>();\r\n    assert_is_not_formattable<vector<c>, CharT>();\r\n    assert_is_not_formattable<deque<c>, CharT>();\r\n    assert_is_not_formattable<forward_list<c>, CharT>();\r\n    assert_is_not_formattable<list<c>, CharT>();\r\n\r\n    assert_is_not_formattable<set<c>, CharT>();\r\n    assert_is_not_formattable<map<c, int>, CharT>();\r\n    assert_is_not_formattable<multiset<c>, CharT>();\r\n    assert_is_not_formattable<multimap<c, int>, CharT>();\r\n\r\n    assert_is_not_formattable<unordered_set<c>, CharT>();\r\n    assert_is_not_formattable<unordered_map<c, int>, CharT>();\r\n    assert_is_not_formattable<unordered_multiset<c>, CharT>();\r\n    assert_is_not_formattable<unordered_multimap<c, int>, CharT>();\r\n\r\n    assert_is_not_formattable<stack<c>, CharT>();\r\n    assert_is_not_formattable<queue<c>, CharT>();\r\n    assert_is_not_formattable<priority_queue<c>, CharT>();\r\n\r\n    assert_is_not_formattable<span<c>, CharT>();\r\n\r\n    assert_is_not_formattable<valarray<c>, CharT>();\r\n\r\n    assert_is_not_formattable<pair<c, int>, CharT>();\r\n    assert_is_not_formattable<tuple<c>, CharT>();\r\n\r\n    assert_is_not_formattable<optional<c>, CharT>();\r\n    assert_is_not_formattable<variant<c>, CharT>();\r\n}\r\n\r\nstruct abstract {\r\n    virtual ~abstract() = 0;\r\n};\r\n\r\ntemplate <formatter_supporting_character_type CharT>\r\nstruct formatter<abstract, CharT> {\r\n    template <class ParseContext>\r\n    constexpr ParseContext::iterator parse(ParseContext& parse_ctx) {\r\n        return parse_ctx.begin();\r\n    }\r\n\r\n    template <class FormatContext>\r\n    FormatContext::iterator format(const abstract&, FormatContext& ctx) const {\r\n        return ctx.out();\r\n    }\r\n};\r\n\r\ntemplate <class CharT>\r\nvoid test_abstract_class() {\r\n    assert_is_formattable<abstract, CharT>();\r\n}\r\n\r\ntemplate <class CharT>\r\nvoid test() {\r\n    test_P0645<CharT>();\r\n    test_P1361<CharT>();\r\n    test_P2693<CharT>();\r\n    test_P2286<CharT>();\r\n    test_LWG3631<CharT>();\r\n    test_abstract_class<CharT>();\r\n    test_disabled<CharT>();\r\n}\r\n\r\nvoid test() {\r\n    test_P0645_char_wchar_t();\r\n    test<char>();\r\n    test<wchar_t>();\r\n#ifdef __cpp_char8_t\r\n    test<char8_t>();\r\n#endif // defined(__cpp_char8_t)\r\n    test<char16_t>();\r\n    test<char32_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_header_queue/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_header_queue/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// intentionally avoid including <format> to verify that the formatter specializations are defined in <queue>\r\n\r\n#include <concepts>\r\n#include <deque>\r\n#include <functional>\r\n#include <queue>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nstruct cannot_format {\r\n    friend auto operator<=>(cannot_format, cannot_format) = default;\r\n};\r\n\r\ntemplate <class T>\r\nvoid verify_semiregularity_for() {\r\n    static_assert(semiregular<T>);\r\n\r\n    T x;\r\n    T y = x;\r\n    T z = move(x);\r\n    x   = y;\r\n    x   = move(z);\r\n}\r\n\r\ntemplate <class T>\r\nvoid verify_disabled_for() {\r\n    static_assert(!is_default_constructible_v<T>);\r\n    static_assert(!is_copy_constructible_v<T>);\r\n    static_assert(!is_move_constructible_v<T>);\r\n    static_assert(!is_copy_assignable_v<T>);\r\n    static_assert(!is_move_assignable_v<T>);\r\n}\r\n\r\nvoid verify_formatters() {\r\n    verify_semiregularity_for<formatter<queue<int>, char>>();\r\n    verify_semiregularity_for<formatter<queue<int>, wchar_t>>();\r\n    verify_semiregularity_for<formatter<queue<int, pmr::deque<int>>, char>>();\r\n    verify_semiregularity_for<formatter<queue<int, pmr::deque<int>>, wchar_t>>();\r\n\r\n    verify_semiregularity_for<formatter<priority_queue<int>, char>>();\r\n    verify_semiregularity_for<formatter<priority_queue<int>, wchar_t>>();\r\n    verify_semiregularity_for<formatter<priority_queue<int, vector<int>, greater<>>, char>>();\r\n    verify_semiregularity_for<formatter<priority_queue<int, vector<int>, greater<>>, wchar_t>>();\r\n    verify_semiregularity_for<formatter<priority_queue<int, pmr::vector<int>>, char>>();\r\n    verify_semiregularity_for<formatter<priority_queue<int, pmr::vector<int>>, wchar_t>>();\r\n\r\n    verify_disabled_for<formatter<queue<cannot_format>, char>>();\r\n    verify_disabled_for<formatter<queue<cannot_format>, wchar_t>>();\r\n    verify_disabled_for<formatter<queue<cannot_format, pmr::deque<cannot_format>>, char>>();\r\n    verify_disabled_for<formatter<queue<cannot_format, pmr::deque<cannot_format>>, wchar_t>>();\r\n\r\n    verify_disabled_for<formatter<priority_queue<cannot_format>, char>>();\r\n    verify_disabled_for<formatter<priority_queue<cannot_format>, wchar_t>>();\r\n    verify_disabled_for<formatter<priority_queue<cannot_format, vector<cannot_format>, greater<>>, char>>();\r\n    verify_disabled_for<formatter<priority_queue<cannot_format, vector<cannot_format>, greater<>>, wchar_t>>();\r\n    verify_disabled_for<formatter<priority_queue<cannot_format, pmr::vector<cannot_format>>, char>>();\r\n    verify_disabled_for<formatter<priority_queue<cannot_format, pmr::vector<cannot_format>>, wchar_t>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_header_stack/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_header_stack/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// intentionally avoid including <format> to verify that the formatter specialization is defined in <stack>\r\n\r\n#include <concepts>\r\n#include <deque>\r\n#include <stack>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nstruct cannot_format {};\r\n\r\ntemplate <class T>\r\nvoid verify_semiregularity_for() {\r\n    static_assert(semiregular<T>);\r\n\r\n    T x;\r\n    T y = x;\r\n    T z = move(x);\r\n    x   = y;\r\n    x   = move(z);\r\n}\r\n\r\ntemplate <class T>\r\nvoid verify_disabled_for() {\r\n    static_assert(!is_default_constructible_v<T>);\r\n    static_assert(!is_copy_constructible_v<T>);\r\n    static_assert(!is_move_constructible_v<T>);\r\n    static_assert(!is_copy_assignable_v<T>);\r\n    static_assert(!is_move_assignable_v<T>);\r\n}\r\n\r\nvoid verify_formatters() {\r\n    verify_semiregularity_for<formatter<stack<int>, char>>();\r\n    verify_semiregularity_for<formatter<stack<int>, wchar_t>>();\r\n    verify_semiregularity_for<formatter<stack<int, pmr::deque<int>>, char>>();\r\n    verify_semiregularity_for<formatter<stack<int, pmr::deque<int>>, wchar_t>>();\r\n\r\n    verify_disabled_for<formatter<stack<cannot_format>, char>>();\r\n    verify_disabled_for<formatter<stack<cannot_format>, wchar_t>>();\r\n    verify_disabled_for<formatter<stack<cannot_format, pmr::deque<cannot_format>>, char>>();\r\n    verify_disabled_for<formatter<stack<cannot_format, pmr::deque<cannot_format>>, wchar_t>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_header_vector/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_header_vector/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// intentionally avoid including <format> to verify that the formatter specialization is defined in <vector>\r\n\r\n#include <concepts>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nvoid verify_semiregularity_for() {\r\n    static_assert(semiregular<T>);\r\n\r\n    T x;\r\n    T y = x;\r\n    T z = move(x);\r\n    x   = y;\r\n    x   = move(z);\r\n}\r\n\r\nvoid verify_formatters() {\r\n    verify_semiregularity_for<formatter<vector<bool>::reference, char>>();\r\n    verify_semiregularity_for<formatter<vector<bool>::reference, wchar_t>>();\r\n    verify_semiregularity_for<formatter<pmr::vector<bool>::reference, char>>();\r\n    verify_semiregularity_for<formatter<pmr::vector<bool>::reference, wchar_t>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_range_formatter/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_range_formatter/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <format>\r\n#include <ranges>\r\n#include <string_view>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <variant>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n#include <test_format_support.hpp>\r\n\r\n#define STR(Str) TYPED_LITERAL(CharT, Str)\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Category, class Element, test::Sized IsSized, test::CanDifference Diff, test::Common IsCommon,\r\n    test::CanCompare Eq, test::ProxyRef Proxy, test::CanView IsView, test::Copyability Copy, class CharT>\r\nstruct std::formatter<test::range<Category, Element, IsSized, Diff, IsCommon, Eq, Proxy, IsView, Copy>, CharT> {\r\npublic:\r\n    using range_type = test::range<Category, Element, IsSized, Diff, IsCommon, Eq, Proxy, IsView, Copy>;\r\n    using ref_type   = remove_cvref_t<ranges::range_reference_t<range_type>>;\r\n\r\n    template <class ParseContext>\r\n    constexpr auto parse(ParseContext& ctx) {\r\n        return underlying.parse(ctx);\r\n    }\r\n\r\n    template <class FormatContext>\r\n    auto format(const range_type& rng, FormatContext& ctx) const {\r\n        return underlying.format(rng, ctx);\r\n    }\r\n\r\nprivate:\r\n    range_formatter<ref_type, CharT> underlying;\r\n};\r\n\r\ntemplate <class Category, class Element, class CharT>\r\nstruct std::formatter<test::proxy_reference<Category, Element>, CharT> {\r\nprivate:\r\n    formatter<remove_cv_t<Element>, CharT> underlying;\r\n\r\npublic:\r\n    constexpr void set_debug_format()\r\n        requires requires { underlying.set_debug_format(); }\r\n    {\r\n        underlying.set_debug_format();\r\n    }\r\n\r\n    template <class ParseContext>\r\n    constexpr auto parse(ParseContext& ctx) {\r\n        return underlying.parse(ctx);\r\n    }\r\n\r\n    template <class FormatContext>\r\n    auto format(const test::proxy_reference<Category, Element>& proxy, FormatContext& ctx) const {\r\n        return underlying.format(static_cast<Element&>(proxy), ctx);\r\n    }\r\n};\r\n\r\nstruct FormatAsX {};\r\n\r\ntemplate <class CharT>\r\nstruct std::formatter<FormatAsX, CharT> {\r\npublic:\r\n    template <class ParseContext>\r\n    constexpr auto parse(ParseContext& ctx) {\r\n        auto it = ctx.begin();\r\n        if (it != ctx.end() && *it != '}') {\r\n            throw format_error{\"Expected empty spec\"};\r\n        }\r\n\r\n        return it;\r\n    }\r\n\r\n    template <class FormatContext>\r\n    auto format(FormatAsX, FormatContext& ctx) const {\r\n        return ranges::copy(STR(\"X\"sv), ctx.out()).out;\r\n    }\r\n};\r\n\r\n// NB: This struct will help us verify if 'range_formatter' handles creation of nested 'basic_format_context' correctly.\r\nstruct FormatNextArg {};\r\n\r\ntemplate <class CharT>\r\nstruct std::formatter<FormatNextArg, CharT> {\r\npublic:\r\n    template <class ParseContext>\r\n    constexpr auto parse(ParseContext& ctx) {\r\n        auto it = ctx.begin();\r\n        if (it != ctx.end() && *it != '}') {\r\n            throw format_error{\"Expected empty spec\"};\r\n        }\r\n\r\n        arg_id = ctx.next_arg_id();\r\n        return it;\r\n    }\r\n\r\n    template <class FormatContext>\r\n    auto format(FormatNextArg, FormatContext& ctx) const {\r\n        auto visitor = [&](auto arg) {\r\n            using T = decltype(arg);\r\n            if constexpr (same_as<T, monostate>) {\r\n                return ranges::copy(STR(\"monostate\"sv), ctx.out()).out;\r\n            } else if constexpr (same_as<T, typename basic_format_arg<FormatContext>::handle>) {\r\n                ctx.advance_to(ranges::copy(STR(\"handle: \"sv), ctx.out()).out);\r\n                basic_format_parse_context<CharT> parse_ctx(STR(\"\"sv));\r\n                arg.format(parse_ctx, ctx);\r\n                return ctx.out();\r\n            } else {\r\n                return format_to(ctx.out(), STR(\"{}\"), arg);\r\n            }\r\n        };\r\n\r\n        return visit_format_arg(visitor, ctx.arg(arg_id));\r\n    }\r\n\r\nprivate:\r\n    size_t arg_id;\r\n};\r\n\r\nstruct Debuggable {};\r\n\r\ntemplate <class CharT>\r\nstruct std::formatter<Debuggable, CharT> {\r\npublic:\r\n    constexpr void set_debug_format() {\r\n        if (!parse_called) {\r\n            throw format_error{\"Incorrect call to 'set_debug_format'; did you call 'parse' first?\"};\r\n        }\r\n\r\n        debug = true;\r\n    }\r\n\r\n    template <class ParseContext>\r\n    constexpr auto parse(ParseContext& ctx) {\r\n        parse_called = true;\r\n        auto it      = ctx.begin();\r\n        if (it == ctx.end() || *it == '}') {\r\n            return it;\r\n        }\r\n\r\n        if (*it == 'D') {\r\n            set_debug_format();\r\n            ++it;\r\n        }\r\n\r\n        if (it != ctx.end() && *it != '}') {\r\n            throw format_error{\"Incorrect format-spec.\"};\r\n        }\r\n\r\n        return it;\r\n    }\r\n\r\n    template <class FormatContext>\r\n    auto format(Debuggable, FormatContext& ctx) const {\r\n        return ranges::copy((debug ? STR(\"debug\"sv) : STR(\"regular\"sv)), ctx.out()).out;\r\n    }\r\n\r\nprivate:\r\n    bool debug        = false;\r\n    bool parse_called = false;\r\n};\r\n\r\ntemplate <template <class> class FmtFn, class CharT, class Range>\r\nvoid check_range_formatter() {\r\n    FmtFn<CharT> fmt;\r\n\r\n    // Check formatting with empty range-format-spec.\r\n    assert(fmt(STR(\"{}\"), Range(array<int, 0>{})) == STR(\"[]\"));\r\n    assert(fmt(STR(\"{}\"), Range(array{1})) == STR(\"[1]\"));\r\n    assert(fmt(STR(\"{:}\"), Range(array{2})) == STR(\"[2]\"));\r\n    assert(fmt(STR(\"{}\"), Range(array{3, 4})) == STR(\"[3, 4]\"));\r\n    assert(fmt(STR(\"{:}\"), Range(array{5, 6})) == STR(\"[5, 6]\"));\r\n    assert(fmt(STR(\"{:}\"), Range(array{7, 8, 9})) == STR(\"[7, 8, 9]\"));\r\n    assert(fmt(STR(\"{:}\"), Range(array{10, 11, 12, 13, 14})) == STR(\"[10, 11, 12, 13, 14]\"));\r\n    assert(fmt(STR(\"{0:}\"), Range(views::iota(15, 30) | ranges::to<vector>()))\r\n           == STR(\"[15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]\"));\r\n\r\n    // Check formatting with non-empty range-fill-and-align.\r\n    assert(fmt(STR(\"{:^}\"), Range(array{0})) == STR(\"[0]\"));\r\n    assert(fmt(STR(\"{:%<}\"), Range(array{1, 2})) == STR(\"[1, 2]\"));\r\n    assert(fmt(STR(\"{: >}\"), Range(array{3, 4, 5})) == STR(\"[3, 4, 5]\"));\r\n\r\n    // Check formatting with non-empty range-fill-and-align and width.\r\n    assert(fmt(STR(\"{:20}\"), Range(array{0})) == STR(\"[0]                 \"));\r\n    assert(fmt(STR(\"{:<10}\"), Range(array{1})) == STR(\"[1]       \"));\r\n    assert(fmt(STR(\"{:>10}\"), Range(array{2})) == STR(\"       [2]\"));\r\n    assert(fmt(STR(\"{:^11}\"), Range(array{3, 4})) == STR(\"  [3, 4]   \"));\r\n    assert(fmt(STR(\"{:*<10}\"), Range(array{5, 6})) == STR(\"[5, 6]****\"));\r\n    assert(fmt(STR(\"{0:=^{1}}\"), Range(array{7, 8, 9}), 20) == STR(\"=====[7, 8, 9]======\"));\r\n    assert(fmt(STR(\"{:_>{}}\"), Range(array{10, 11, 12}), 30) == STR(\"__________________[10, 11, 12]\"));\r\n    assert(fmt(STR(\"{::^20}\"), Range(array{13})) == STR(\"[         13         ]\"));\r\n\r\n    // Check 'n' option.\r\n    assert(fmt(STR(\"{:20n}\"), Range(array{0})) == STR(\"0                   \"));\r\n    assert(fmt(STR(\"{:<10n}\"), Range(array{1})) == STR(\"1         \"));\r\n    assert(fmt(STR(\"{:>10n}\"), Range(array{2})) == STR(\"         2\"));\r\n    assert(fmt(STR(\"{:^11n}\"), Range(array{3, 4})) == STR(\"   3, 4    \"));\r\n    assert(fmt(STR(\"{:*<10n}\"), Range(array{5, 6})) == STR(\"5, 6******\"));\r\n    assert(fmt(STR(\"{:=^{}n}\"), Range(array{7, 8, 9}), 20) == STR(\"======7, 8, 9=======\"));\r\n    assert(fmt(STR(\"{0:_>{1}n}\"), Range(array{10, 11, 12}), 30) == STR(\"____________________10, 11, 12\"));\r\n    assert(fmt(STR(\"{:>20n}\"), Range(array{13})) == STR(\"                  13\"));\r\n\r\n    if constexpr (Range::proxy_ref != test::ProxyRef::yes) { // Check 'm' type.\r\n        using Pair      = pair<int, char>;\r\n        using PairRange = Range::template RebindElement<const Pair>;\r\n\r\n        assert(fmt(STR(\"{:m}\"), PairRange(array<Pair, 0>{})) == STR(\"{}\"));\r\n        assert(fmt(STR(\"{:m}\"), PairRange(array{Pair{1, 'a'}, Pair{2, 'b'}})) == STR(\"{1: 'a', 2: 'b'}\"));\r\n        assert(fmt(STR(\"{:20m}\"), PairRange(array{Pair{3, 'c'}, Pair{4, 'd'}})) == STR(\"{3: 'c', 4: 'd'}    \"));\r\n        assert(fmt(STR(\"{:%>20m}\"), PairRange(array{Pair{5, 'e'}, Pair{6, 'f'}})) == STR(\"%%%%{5: 'e', 6: 'f'}\"));\r\n        assert(fmt(STR(\"{:_>20nm}\"), PairRange(array{Pair{7, 'g'}, Pair{8, '\\n'}})) == STR(\"_____7: 'g', 8: '\\\\n'\"));\r\n        assert(fmt(STR(\"{:_>20nm:}\"), PairRange(array{Pair{7, 'g'}, Pair{8, '\\n'}})) == STR(\"_____7: 'g', 8: '\\\\n'\"));\r\n\r\n        using Tuple      = tuple<const CharT*, int>;\r\n        using TupleRange = Range::template RebindElement<const Tuple>;\r\n\r\n        assert(fmt(STR(\"{:m}\"), TupleRange(array<Tuple, 0>{})) == STR(\"{}\"));\r\n        assert(\r\n            fmt(STR(\"{:m}\"), TupleRange(array{Tuple{STR(\"A\"), 1}, Tuple{STR(\"B\"), 2}})) == STR(R\"({\"A\": 1, \"B\": 2})\"));\r\n        assert(fmt(STR(\"{:20m}\"), TupleRange(array{Tuple{STR(\"C\"), 3}, Tuple{STR(\"D\"), 4}}))\r\n               == STR(R\"({\"C\": 3, \"D\": 4}    )\"));\r\n        assert(fmt(STR(\"{:%>20m}\"), TupleRange(array{Tuple{STR(\"\\n\"), 5}, Tuple{STR(\"\\t\"), 6}}))\r\n               == STR(R\"(%%{\"\\n\": 5, \"\\t\": 6})\"));\r\n        assert(fmt(STR(\"{:_>{}nm}\"), TupleRange(array{Tuple{STR(\"\\a\"), 7}, Tuple{STR(\"\\b\"), 8}}), 24)\r\n               == STR(R\"(__\"\\u{7}\": 7, \"\\u{8}\": 8)\"));\r\n        assert(fmt(STR(\"{0:_>{1}nm:}\"), TupleRange(array{Tuple{STR(\"AB\\tC\"), 9}, Tuple{STR(\"XY\\nZ\"), 10}}), 25)\r\n               == STR(R\"(__\"AB\\tC\": 9, \"XY\\nZ\": 10)\"));\r\n    }\r\n\r\n    if constexpr (Range::proxy_ref != test::ProxyRef::yes) { // Check 's' and '?s' types.\r\n        using CharRange = Range::template RebindElement<const CharT>;\r\n\r\n        assert(fmt(STR(\"{:>s}\"), CharRange(STR(\"Hello\"sv))) == STR(\"Hello\"));\r\n        assert(fmt(STR(\"{:s}\"), CharRange(STR(\"Hello\"sv))) == STR(\"Hello\"));\r\n        assert(fmt(STR(\"{:10s}\"), CharRange(STR(\"Hello\"sv))) == STR(\"Hello     \"));\r\n        assert(fmt(STR(\"{:>20s}\"), CharRange(STR(\"Hello\"sv))) == STR(\"               Hello\"));\r\n        assert(fmt(STR(\"{:_^20s}\"), CharRange(STR(\"Hello\"sv))) == STR(\"_______Hello________\"));\r\n\r\n        assert(fmt(STR(\"{:^?s}\"), CharRange(STR(\"Hell\\no\"sv))) == STR(R\"(\"Hell\\no\")\"));\r\n        assert(fmt(STR(\"{:?s}\"), CharRange(STR(\"Hel\\tlo\"sv))) == STR(R\"(\"Hel\\tlo\")\"));\r\n        assert(fmt(STR(\"{:10?s}\"), CharRange(STR(\"Hel\\nlo\"sv))) == STR(R\"(\"Hel\\nlo\" )\"));\r\n        assert(fmt(STR(\"{:>{}?s}\"), CharRange(STR(\"Hel\\alo\"sv)), 20) == STR(R\"(        \"Hel\\u{7}lo\")\"));\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, DevCom-1318584\r\n        assert(fmt(STR(\"{0:-^{1}?s}\"), CharRange(STR(\"H\\\"ello\"sv)), 20) == STR(R\"(-----\"H\\\"ello\"------)\"));\r\n#else // ^^^ no workaround / workaround vvv\r\n        assert(fmt(STR(\"{0:-^{1}?s}\"), CharRange(STR(\"H\\\"ello\"sv)), 20) == STR(\"-----\\\"H\\\\\\\"ello\\\"------\"));\r\n#endif // ^^^ workaround ^^^\r\n    }\r\n\r\n    // Check formatting with range-underlying-spec.\r\n    assert(fmt(STR(\"{:20:b}\"), Range(array{0})) == STR(\"[0]                 \"));\r\n    assert(fmt(STR(\"{:<10:#B}\"), Range(array{1})) == STR(\"[0B1]     \"));\r\n    assert(fmt(STR(\"{:>{}:+d}\"), Range(array{2}), 10) == STR(\"      [+2]\"));\r\n    assert(fmt(STR(\"{:^24:+#05}\"), Range(array{3, 4})) == STR(\"     [+0003, +0004]     \"));\r\n    assert(fmt(STR(\"{0:_<{1}:^^{2}}\"), Range(array{5, 6}), 20, 4) == STR(\"[^5^^, ^6^^]________\"));\r\n    assert(fmt(STR(\"{0:=^{1}}\"), Range(array{7, 8, 9}), 20) == STR(\"=====[7, 8, 9]======\"));\r\n    assert(fmt(STR(\"{:_>{}}\"), Range(array{10, 11, 12}), 30) == STR(\"__________________[10, 11, 12]\"));\r\n\r\n    { // Check formatting with range-underlying-spec when range_reference_t<R> has debug-enabled formatter.\r\n        using StringRange = Range::template RebindElement<const CharT* const>;\r\n\r\n        assert(fmt(STR(\"{}\"), StringRange(array{STR(\"0\"), STR(\"1\"), STR(\"2\")})) == STR(R\"([\"0\", \"1\", \"2\"])\"));\r\n        assert(fmt(STR(\"{:}\"), StringRange(array{STR(\"3\"), STR(\"4\"), STR(\"5\")})) == STR(R\"([\"3\", \"4\", \"5\"])\"));\r\n        assert(fmt(STR(\"{::}\"), StringRange(array{STR(\"6\"), STR(\"7\"), STR(\"8\")})) == STR(R\"([6, 7, 8])\"));\r\n        assert(fmt(STR(\"{::?}\"), StringRange(array{STR(\"9\"), STR(\"10\"), STR(\"11\")})) == STR(R\"([\"9\", \"10\", \"11\"])\"));\r\n        assert(fmt(STR(\"{::_^8?}\"), StringRange(array{STR(\"12\"), STR(\"13\"), STR(\"14\")}))\r\n               == STR(R\"([__\"12\"__, __\"13\"__, __\"14\"__])\"));\r\n        assert(fmt(STR(\"{::_^6}\"), StringRange(array{STR(\"15\"), STR(\"16\"), STR(\"17\")}))\r\n               == STR(R\"([__15__, __16__, __17__])\"));\r\n        assert(fmt(STR(\"{0:/^26:_^{2}}\"), StringRange(array{STR(\"18\"), STR(\"19\"), STR(\"20\")}), 8, 6)\r\n               == STR(R\"(/[__18__, __19__, __20__]/)\"));\r\n        assert(fmt(STR(\"{:/^{}n:_^6}\"), StringRange(array{STR(\"18\"), STR(\"19\"), STR(\"20\")}), 26)\r\n               == STR(R\"(//__18__, __19__, __20__//)\"));\r\n    }\r\n\r\n    { // Check formatting range of ranges.\r\n        using OuterRange = Range::template RebindElement<const Range>;\r\n\r\n        assert(fmt(STR(\"{}\"), OuterRange(array{Range(array{0, 1, 2}), Range(array{3, 4, 5}), Range(array{6, 7, 8})}))\r\n               == STR(\"[[0, 1, 2], [3, 4, 5], [6, 7, 8]]\"));\r\n        assert(fmt(STR(\"{::n}\"), OuterRange(array{Range(array{0, 1, 2}), Range(array{3, 4, 5}), Range(array{6, 7, 8})}))\r\n               == STR(\"[0, 1, 2, 3, 4, 5, 6, 7, 8]\"));\r\n        assert(fmt(STR(\"{0:_>{2}n:n}\"),\r\n                   OuterRange(array{Range(array{0, 1, 2}), Range(array{3, 4, 5}), Range(array{6, 7, 8})}), 20, 30)\r\n               == STR(\"_____0, 1, 2, 3, 4, 5, 6, 7, 8\"));\r\n\r\n        assert(fmt(STR(\"{:_<{}:*^{}:=^#{}x}\"),\r\n                   OuterRange(array{Range(array{0, 1, 2}), Range(array{3, 4, 5}), Range(array{6, 7, 8})}), 90, 25, 5)\r\n               == STR(\"[**[=0x0=, =0x1=, =0x2=]**, **[=0x3=, =0x4=, =0x5=]**, **[=0x6=, =0x7=, =0x8=]**]_________\"));\r\n    }\r\n\r\n    { // Check formatting range of 'FormatNextArg's.\r\n        using TestRange = Range::template RebindElement<const FormatNextArg>;\r\n\r\n        assert(fmt(STR(\"{}\"), TestRange(array<FormatNextArg, 1>{}), 0) == STR(\"[0]\"));\r\n        assert(fmt(STR(\"{}\"), TestRange(array<FormatNextArg, 1>{}), STR(\"mmm\")) == STR(\"[mmm]\"));\r\n        assert(fmt(STR(\"{}\"), TestRange(array<FormatNextArg, 1>{}), FormatAsX{}) == STR(\"[handle: X]\"));\r\n        assert(fmt(STR(\"{}\"), TestRange(array<FormatNextArg, 2>{}), FormatAsX{}) == STR(\"[handle: X, handle: X]\"));\r\n    }\r\n\r\n    { // Check formatting range of custom type with 'set_debug_format'.\r\n        using TestRange = Range::template RebindElement<const Debuggable>;\r\n\r\n        assert(fmt(STR(\"{}\"), TestRange(array<Debuggable, 1>{})) == STR(\"[debug]\"));\r\n        assert(fmt(STR(\"{:}\"), TestRange(array<Debuggable, 2>{})) == STR(\"[debug, debug]\"));\r\n        assert(fmt(STR(\"{::}\"), TestRange(array<Debuggable, 3>{})) == STR(\"[regular, regular, regular]\"));\r\n        assert(fmt(STR(\"{::D}\"), TestRange(array<Debuggable, 4>{})) == STR(\"[debug, debug, debug, debug]\"));\r\n    }\r\n}\r\n\r\ntemplate <class CharT, class Range>\r\nvoid check_incorrect_use_of_range_formatter() {\r\n    ExpectFormatError<CharT> fmt;\r\n\r\n    const array vals = {1, 2, 3};\r\n\r\n    { // damaged fields\r\n        fmt(STR(\"{\"), Range(vals));\r\n        fmt(STR(\"{}}\"), Range(vals));\r\n        fmt(STR(\"{{}\"), Range(vals));\r\n        fmt(STR(\"{:}}\"), Range(vals));\r\n    }\r\n\r\n    { // invalid range-format-spec\r\n        fmt(STR(\"{:*,20}\"), Range(vals));\r\n        fmt(STR(\"{:nn}\"), Range(vals));\r\n        fmt(STR(\"{:x:}\"), Range(vals));\r\n        fmt(STR(\"{:x}\"), Range(vals));\r\n        fmt(STR(\"{:mx}\"), Range(vals));\r\n        fmt(STR(\"{:ns}\"), Range(vals));\r\n        fmt(STR(\"{:n?s}\"), Range(vals));\r\n        fmt(STR(\"{:m}\"), Range(vals));\r\n        fmt(STR(\"{:s:x}\"), Range(vals));\r\n        fmt(STR(\"{:sz}\"), Range(vals));\r\n        fmt(STR(\"{:?s:x}\"), Range(vals));\r\n        fmt(STR(\"{:?}\"), Range(vals));\r\n        fmt(STR(\"{:?z}\"), Range(vals));\r\n        fmt(STR(\"{:mn}\"), Range(vals));\r\n    }\r\n\r\n    { // std-format-spec instead of range-format-spec\r\n        fmt(STR(\"{:+}\"), Range(vals));\r\n        fmt(STR(\"{:-}\"), Range(vals));\r\n        fmt(STR(\"{: }\"), Range(vals));\r\n        fmt(STR(\"{:#}\"), Range(vals));\r\n        fmt(STR(\"{:.2}\"), Range(vals));\r\n        fmt(STR(\"{:L}\"), Range(vals));\r\n    }\r\n\r\n    { // invalid range-underlying-spec\r\n        fmt(STR(\"{::=m}\"), Range(vals));\r\n        fmt(STR(\"{::##x}\"), Range(vals));\r\n        fmt(STR(\"{::L#o}\"), Range(vals));\r\n    }\r\n\r\n    { // mixed invalid specs\r\n        fmt(STR(\"{:+#}\"), Range(vals));\r\n        fmt(STR(\"{:::::}\"), Range(vals));\r\n        fmt(STR(\"{:-.3}\"), Range(vals));\r\n        fmt(STR(\"{: #}\"), Range(vals));\r\n        fmt(STR(\"{:#.4}\"), Range(vals));\r\n        fmt(STR(\"{:.3o}\"), Range(vals));\r\n        fmt(STR(\"{:X}\"), Range(vals));\r\n        fmt(STR(\"{:invalid for sure}\"), Range(vals));\r\n    }\r\n}\r\n\r\nstruct range_formatter_check_instantiator {\r\n    template <ranges::input_range R>\r\n    static void call() {\r\n        check_range_formatter<FormatFn, char, R>();\r\n        check_range_formatter<FormatFn, wchar_t, R>();\r\n\r\n        check_range_formatter<VFormatFn, char, R>();\r\n        check_range_formatter<VFormatFn, wchar_t, R>();\r\n\r\n        check_incorrect_use_of_range_formatter<char, R>();\r\n        check_incorrect_use_of_range_formatter<wchar_t, R>();\r\n    }\r\n};\r\n\r\nvoid instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_in<range_formatter_check_instantiator, const int>();\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    range_formatter_check_instantiator::call<test::range<test::input, const int>>();\r\n    range_formatter_check_instantiator::call<test::range<test::fwd, const int>>();\r\n    range_formatter_check_instantiator::call<test::range<test::bidi, const int>>();\r\n    range_formatter_check_instantiator::call<test::range<test::random, const int>>();\r\n    range_formatter_check_instantiator::call<test::range<test::contiguous, const int>>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\ntemplate <class CharT>\r\nconstexpr bool check_other_functions() {\r\n    using Sv = basic_string_view<CharT>;\r\n    range_formatter<int, CharT> fmt;\r\n\r\n    // Check 'set_separator'\r\n    fmt.set_separator(STR(\"; \"sv));\r\n    static_assert(same_as<decltype(fmt.set_separator(STR(\"\"sv))), void>);\r\n    static_assert(noexcept(fmt.set_separator(declval<Sv>())));\r\n\r\n    // Check 'set_brackets'\r\n    fmt.set_brackets(STR(\"<\"sv), STR(\">\"sv));\r\n    static_assert(same_as<decltype(fmt.set_brackets(STR(\"\"sv), STR(\"\"sv))), void>);\r\n    static_assert(noexcept(fmt.set_brackets(declval<Sv>(), declval<Sv>())));\r\n\r\n    // Check 'underlying'\r\n    [[maybe_unused]] same_as<formatter<int, CharT>&> decltype(auto) u1       = fmt.underlying();\r\n    [[maybe_unused]] same_as<const formatter<int, CharT>&> decltype(auto) u2 = as_const(fmt).underlying();\r\n    static_assert(noexcept(fmt.underlying()));\r\n    static_assert(noexcept(as_const(fmt).underlying()));\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class CharT>\r\nvoid check_range_formatter_with_arbitrary_format_context(basic_format_context<CharT*, CharT>& ctx) { // COMPILE-ONLY\r\n    range_formatter<int, CharT> fmt;\r\n    fmt.format(array{0}, ctx);\r\n}\r\n\r\ntemplate void check_range_formatter_with_arbitrary_format_context(basic_format_context<char*, char>&);\r\ntemplate void check_range_formatter_with_arbitrary_format_context(basic_format_context<wchar_t*, wchar_t>&);\r\n\r\ntemplate <class T, class CharT>\r\nconcept CanInstantiateRangeFormatter = requires { typename range_formatter<T, CharT>; };\r\n\r\ntemplate <class CharT>\r\nconsteval bool check_constraints() {\r\n    static_assert(CanInstantiateRangeFormatter<int, CharT>);\r\n    static_assert(!CanInstantiateRangeFormatter<const int, CharT>);\r\n    static_assert(!CanInstantiateRangeFormatter<int&, CharT>);\r\n    static_assert(!CanInstantiateRangeFormatter<int&&, CharT>);\r\n    static_assert(!CanInstantiateRangeFormatter<const int&&, CharT>);\r\n    static_assert(!CanInstantiateRangeFormatter<const volatile int&&, CharT>);\r\n\r\n    struct NotFormattable {};\r\n    static_assert(!CanInstantiateRangeFormatter<NotFormattable, CharT>);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class T>\r\nstruct WrappedVector : vector<T> {\r\n    using vector<T>::vector;\r\n};\r\n\r\ntemplate <class T, class CharT>\r\nstruct std::formatter<WrappedVector<T>, CharT> {\r\npublic:\r\n    template <class ParseContext>\r\n    constexpr auto parse(ParseContext& ctx) {\r\n        underlying.set_brackets(STR(\"<\"sv), STR(\">\"sv));\r\n        underlying.set_separator(STR(\"|\"sv));\r\n        return underlying.parse(ctx);\r\n    }\r\n\r\n    template <class FormatContext>\r\n    auto format(const WrappedVector<T>& rng, FormatContext& ctx) const {\r\n        return underlying.format(rng, ctx);\r\n    }\r\n\r\nprivate:\r\n    range_formatter<T, CharT> underlying;\r\n};\r\n\r\ntemplate <class CharT>\r\nvoid check_runtime_behavior_of_setters() {\r\n    {\r\n        const WrappedVector<int> v1{11, 22, 33, 44};\r\n        assert(format(STR(\"{}\"), v1) == STR(\"<11|22|33|44>\"));\r\n        assert(format(STR(\"{:}\"), v1) == STR(\"<11|22|33|44>\"));\r\n        assert(format(STR(\"{:n}\"), v1) == STR(\"11|22|33|44\"));\r\n    }\r\n\r\n    {\r\n        const WrappedVector<pair<int, char>> v2{{10, 'x'}, {20, 'y'}, {30, 'z'}};\r\n        assert(format(STR(\"{}\"), v2) == STR(\"<(10, 'x')|(20, 'y')|(30, 'z')>\"));\r\n        assert(format(STR(\"{:}\"), v2) == STR(\"<(10, 'x')|(20, 'y')|(30, 'z')>\"));\r\n        assert(format(STR(\"{:n}\"), v2) == STR(\"(10, 'x')|(20, 'y')|(30, 'z')\"));\r\n        assert(format(STR(\"{:m}\"), v2) == STR(\"{10: 'x', 20: 'y', 30: 'z'}\"));\r\n        assert(format(STR(\"{:nm}\"), v2) == STR(\"10: 'x', 20: 'y', 30: 'z'\"));\r\n    }\r\n}\r\n\r\nint main() {\r\n    instantiation_test();\r\n\r\n    static_assert(check_other_functions<char>());\r\n    static_assert(check_other_functions<wchar_t>());\r\n    check_other_functions<char>();\r\n    check_other_functions<wchar_t>();\r\n\r\n    static_assert(check_constraints<char>());\r\n    static_assert(check_constraints<wchar_t>());\r\n\r\n    check_runtime_behavior_of_setters<char>();\r\n    check_runtime_behavior_of_setters<wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_range_map/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_range_map/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n// derived from libc++'s test files:\r\n// * support/format.functions.common.h\r\n// * std/utilities/format/format.range/format.range.fmtmap/format.functions.tests.h\r\n// * std/utilities/format/format.range/format.range.fmtmap/format.functions.format.pass.cpp\r\n// * std/utilities/format/format.range/format.range.fmtmap/format.functions.vformat.pass.cpp\r\n\r\n#include <algorithm>\r\n#include <charconv>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <cstring>\r\n#include <flat_map>\r\n#include <format>\r\n#include <iterator>\r\n#include <map>\r\n#include <ranges>\r\n#include <string>\r\n#include <string_view>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <is_permissive.hpp>\r\n#include <test_format_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n#define CSTR(Str) TYPED_LITERAL(CharT, Str)\r\n#define STR(Str)  basic_string(CSTR(Str))\r\n#define SV(Str)   basic_string_view(CSTR(Str))\r\n\r\nnamespace detail {\r\n    consteval string_view get_format_types() noexcept {\r\n        return \"aAbBcdeEfFgGopPsxX?\";\r\n    }\r\n\r\n    template <class CharT, size_t N>\r\n    basic_string<CharT> get_colons() {\r\n        return basic_string<CharT>(N, CharT(':'));\r\n    }\r\n\r\n    template <class CharT, /*format_types types,*/ size_t N>\r\n    vector<basic_string<CharT>> fmt_invalid_types(string_view valid) {\r\n        vector<basic_string<CharT>> result;\r\n        if constexpr (is_permissive_v<CharT>) {\r\n            for (const char c : get_format_types()) {\r\n                if (valid.find(c) == string_view::npos) {\r\n                    result.push_back(format(SV(\"{{{}{}}}\"), get_colons<CharT, N>(), c));\r\n                }\r\n            }\r\n        } else {\r\n            // ranges::to is not available in C++20.\r\n            ranges::copy(get_format_types() | views::filter([&](char type) {\r\n                return valid.find(type) == string_view::npos;\r\n            }) | views::transform([&](char type) { return format(SV(\"{{{}{}}}\"), get_colons<CharT, N>(), type); }),\r\n                back_inserter(result));\r\n        }\r\n        return result;\r\n    }\r\n} // namespace detail\r\n\r\n// Creates format string for the invalid types.\r\n//\r\n// valid contains a list of types that are valid.\r\n//\r\n// The return value is a collection of basic_strings, instead of\r\n// basic_string_views since the values are temporaries.\r\ntemplate <class CharT>\r\nvector<basic_string<CharT>> fmt_invalid_types(string_view valid) {\r\n    return detail::fmt_invalid_types<CharT, 1>(valid);\r\n}\r\n\r\n// Like fmt_invalid_types but when the format spec is for an underlying formatter.\r\ntemplate <class CharT>\r\nvector<basic_string<CharT>> fmt_invalid_nested_types(string_view valid) {\r\n    return detail::fmt_invalid_types<CharT, 2>(valid);\r\n}\r\n\r\ntemplate <class T>\r\nstruct context {};\r\n\r\ntemplate <>\r\nstruct context<char> {\r\n    using type = format_context;\r\n};\r\n\r\ntemplate <>\r\nstruct context<wchar_t> {\r\n    using type = wformat_context;\r\n};\r\n\r\ntemplate <class T>\r\nusing context_t = context<T>::type;\r\n\r\n// A user-defined type used to test the handle formatter.\r\nenum class status : uint16_t { foo = 0xAAAA, bar = 0x5555, foobar = 0xAA55 };\r\n\r\n// The formatter for a user-defined type used to test the handle formatter.\r\ntemplate <class CharT>\r\nstruct formatter<status, CharT> {\r\n    // During the 2023 Issaquah meeting LEWG made it clear a formatter is\r\n    // required to call its parse function. LWG3892 Adds the wording for that\r\n    // requirement. Therefore this formatter is initialized in an invalid state.\r\n    // A call to parse sets it in a valid state and a call to format validates\r\n    // the state.\r\n    int type = -1;\r\n\r\n    constexpr auto parse(basic_format_parse_context<CharT>& parse_ctx) -> decltype(parse_ctx.begin()) {\r\n        auto begin = parse_ctx.begin();\r\n        auto end   = parse_ctx.end();\r\n        type       = 0;\r\n        if (begin == end) {\r\n            return begin;\r\n        }\r\n\r\n        switch (*begin) {\r\n        case CharT('x'):\r\n            break;\r\n        case CharT('X'):\r\n            type = 1;\r\n            break;\r\n        case CharT('s'):\r\n            type = 2;\r\n            break;\r\n        case CharT('}'):\r\n            return begin;\r\n        default:\r\n            throw_format_error(\"The type option contains an invalid value for a status formatting argument\");\r\n        }\r\n\r\n        ++begin;\r\n        if (begin != end && *begin != CharT('}')) {\r\n            throw_format_error(\"The format specifier should consume the input or end with a '}'\");\r\n        }\r\n\r\n        return begin;\r\n    }\r\n\r\n    template <class Out>\r\n    auto format(status s, basic_format_context<Out, CharT>& ctx) const -> decltype(ctx.out()) {\r\n        const char* names[] = {\"foo\", \"bar\", \"foobar\"};\r\n        char buffer[7];\r\n        const char* pbegin = names[0];\r\n        const char* pend   = names[0];\r\n        switch (type) {\r\n        case -1:\r\n            throw_format_error(\"The formatter's parse function has not been called.\");\r\n\r\n        case 0:\r\n            pbegin    = buffer;\r\n            buffer[0] = '0';\r\n            buffer[1] = 'x';\r\n            pend      = to_chars(&buffer[2], end(buffer), static_cast<uint16_t>(s), 16).ptr;\r\n            buffer[6] = '\\0';\r\n            break;\r\n\r\n        case 1:\r\n            pbegin    = buffer;\r\n            buffer[0] = '0';\r\n            buffer[1] = 'X';\r\n            pend      = to_chars(&buffer[2], end(buffer), static_cast<uint16_t>(s), 16).ptr;\r\n            transform(static_cast<const char*>(&buffer[2]), pend, &buffer[2],\r\n                [](char c) { return static_cast<char>(toupper(c)); });\r\n            buffer[6] = '\\0';\r\n            break;\r\n\r\n        case 2:\r\n            switch (s) {\r\n            case status::foo:\r\n                pbegin = names[0];\r\n                break;\r\n            case status::bar:\r\n                pbegin = names[1];\r\n                break;\r\n            case status::foobar:\r\n                pbegin = names[2];\r\n                break;\r\n            }\r\n            pend = pbegin + strlen(pbegin);\r\n            break;\r\n        }\r\n\r\n#if !defined(__clang__) && !defined(__EDG__)\r\n#pragma warning(push)\r\n#pragma warning(disable : 4365)\r\n#endif // !defined(__clang__) && !defined(__EDG__)\r\n        return copy(pbegin, pend, ctx.out());\r\n#if !defined(__clang__) && !defined(__EDG__)\r\n#pragma warning(pop)\r\n#endif // !defined(__clang__) && !defined(__EDG__)\r\n    }\r\n\r\nprivate:\r\n    [[noreturn]] void throw_format_error(const char* s) const {\r\n        throw format_error(s);\r\n    }\r\n};\r\n\r\n\r\n//\r\n// Char\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_char(TestFunction check, ExceptionTest check_exception) {\r\n    map<CharT, CharT> input{{CharT('a'), CharT('A')}, {CharT('c'), CharT('C')}, {CharT('b'), CharT('B')}};\r\n\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}\"), SV(\"{}\"), input);\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}     \"), SV(\"{:35}\"), input);\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}*****\"), SV(\"{:*<35}\"), input);\r\n    check(SV(\"__{'a': 'A', 'b': 'B', 'c': 'C'}___\"), SV(\"{:_^35}\"), input);\r\n    check(SV(\"#####{'a': 'A', 'b': 'B', 'c': 'C'}\"), SV(\"{:#>35}\"), input);\r\n\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}     \"), SV(\"{:{}}\"), input, 35);\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}*****\"), SV(\"{:*<{}}\"), input, 35);\r\n    check(SV(\"__{'a': 'A', 'b': 'B', 'c': 'C'}___\"), SV(\"{:_^{}}\"), input, 35);\r\n    check(SV(\"#####{'a': 'A', 'b': 'B', 'c': 'C'}\"), SV(\"{:#>{}}\"), input, 35);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__'a': 'A', 'b': 'B', 'c': 'C'___\"), SV(\"{:_^33n}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"__{'a': 'A', 'b': 'B', 'c': 'C'}___\"), SV(\"{:_^35m}\"), input); // the m type does the same as the default.\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n\r\n    check(SV(\"{'a': 'A'     , 'b': 'B'     , 'c': 'C'     }\"), SV(\"{::13}\"), input);\r\n    check(SV(\"{'a': 'A'*****, 'b': 'B'*****, 'c': 'C'*****}\"), SV(\"{::*<13}\"), input);\r\n    check(SV(\"{__'a': 'A'___, __'b': 'B'___, __'c': 'C'___}\"), SV(\"{::_^13}\"), input);\r\n    check(SV(\"{#####'a': 'A', #####'b': 'B', #####'c': 'C'}\"), SV(\"{::#>13}\"), input);\r\n\r\n    check(SV(\"{'a': 'A'     , 'b': 'B'     , 'c': 'C'     }\"), SV(\"{::{}}\"), input, 13);\r\n    check(SV(\"{'a': 'A'*****, 'b': 'B'*****, 'c': 'C'*****}\"), SV(\"{::*<{}}\"), input, 13);\r\n    check(SV(\"{__'a': 'A'___, __'b': 'B'___, __'c': 'C'___}\"), SV(\"{::_^{}}\"), input, 13);\r\n    check(SV(\"{#####'a': 'A', #####'b': 'B', #####'c': 'C'}\"), SV(\"{::#>{}}\"), input, 13);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}\"), SV(\"{::m}\"), input);\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}\"), SV(\"{::n}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{###'a': 'A', ###'b': 'B', ###'c': 'C'}^^^\"), SV(\"{:^^44:#>11}\"), input);\r\n    check(SV(\"^^{###'a': 'A', ###'b': 'B', ###'c': 'C'}^^^\"), SV(\"{:^^{}:#>11}\"), input, 44);\r\n    check(SV(\"^^{###'a': 'A', ###'b': 'B', ###'c': 'C'}^^^\"), SV(\"{:^^{}:#>{}}\"), input, 44, 11);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>11}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>{}}\"), input, 44);\r\n}\r\n\r\n//\r\n// char -> wchar_t\r\n//\r\n\r\ntemplate <class TestFunction, class ExceptionTest>\r\nvoid test_char_to_wchar(TestFunction check, ExceptionTest check_exception) {\r\n    flat_map<char, char> input{{'a', 'A'}, {'c', 'C'}, {'b', 'B'}};\r\n\r\n    using CharT = wchar_t;\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}\"), SV(\"{}\"), input);\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}     \"), SV(\"{:35}\"), input);\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}*****\"), SV(\"{:*<35}\"), input);\r\n    check(SV(\"__{'a': 'A', 'b': 'B', 'c': 'C'}___\"), SV(\"{:_^35}\"), input);\r\n    check(SV(\"#####{'a': 'A', 'b': 'B', 'c': 'C'}\"), SV(\"{:#>35}\"), input);\r\n\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}     \"), SV(\"{:{}}\"), input, 35);\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}*****\"), SV(\"{:*<{}}\"), input, 35);\r\n    check(SV(\"__{'a': 'A', 'b': 'B', 'c': 'C'}___\"), SV(\"{:_^{}}\"), input, 35);\r\n    check(SV(\"#####{'a': 'A', 'b': 'B', 'c': 'C'}\"), SV(\"{:#>{}}\"), input, 35);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__'a': 'A', 'b': 'B', 'c': 'C'___\"), SV(\"{:_^33n}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"__{'a': 'A', 'b': 'B', 'c': 'C'}___\"), SV(\"{:_^35m}\"), input); // the m type does the same as the default.\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"{'a': 'A'     , 'b': 'B'     , 'c': 'C'     }\"), SV(\"{::13}\"), input);\r\n    check(SV(\"{'a': 'A'*****, 'b': 'B'*****, 'c': 'C'*****}\"), SV(\"{::*<13}\"), input);\r\n    check(SV(\"{__'a': 'A'___, __'b': 'B'___, __'c': 'C'___}\"), SV(\"{::_^13}\"), input);\r\n    check(SV(\"{#####'a': 'A', #####'b': 'B', #####'c': 'C'}\"), SV(\"{::#>13}\"), input);\r\n\r\n    check(SV(\"{'a': 'A'     , 'b': 'B'     , 'c': 'C'     }\"), SV(\"{::{}}\"), input, 13);\r\n    check(SV(\"{'a': 'A'*****, 'b': 'B'*****, 'c': 'C'*****}\"), SV(\"{::*<{}}\"), input, 13);\r\n    check(SV(\"{__'a': 'A'___, __'b': 'B'___, __'c': 'C'___}\"), SV(\"{::_^{}}\"), input, 13);\r\n    check(SV(\"{#####'a': 'A', #####'b': 'B', #####'c': 'C'}\"), SV(\"{::#>{}}\"), input, 13);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}\"), SV(\"{::m}\"), input);\r\n    check(SV(\"{'a': 'A', 'b': 'B', 'c': 'C'}\"), SV(\"{::n}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{###'a': 'A', ###'b': 'B', ###'c': 'C'}^^^\"), SV(\"{:^^44:#>11}\"), input);\r\n    check(SV(\"^^{###'a': 'A', ###'b': 'B', ###'c': 'C'}^^^\"), SV(\"{:^^{}:#>11}\"), input, 44);\r\n    check(SV(\"^^{###'a': 'A', ###'b': 'B', ###'c': 'C'}^^^\"), SV(\"{:^^{}:#>{}}\"), input, 44, 11);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>11}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>{}}\"), input, 44);\r\n}\r\n\r\n//\r\n// Bool\r\n//\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_bool(TestFunction check, ExceptionTest check_exception) {\r\n    // duplicates are stored in order of insertion\r\n    multimap<bool, int> input{{true, 42}, {false, 0}, {true, 1}};\r\n\r\n    check(SV(\"{false: 0, true: 42, true: 1}\"), SV(\"{}\"), input);\r\n    check(SV(\"{false: 0, true: 42, true: 1}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{false: 0, true: 42, true: 1}^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{false: 0, true: 42, true: 1}     \"), SV(\"{:34}\"), input);\r\n    check(SV(\"{false: 0, true: 42, true: 1}*****\"), SV(\"{:*<34}\"), input);\r\n    check(SV(\"__{false: 0, true: 42, true: 1}___\"), SV(\"{:_^34}\"), input);\r\n    check(SV(\"#####{false: 0, true: 42, true: 1}\"), SV(\"{:#>34}\"), input);\r\n\r\n    check(SV(\"{false: 0, true: 42, true: 1}     \"), SV(\"{:{}}\"), input, 34);\r\n    check(SV(\"{false: 0, true: 42, true: 1}*****\"), SV(\"{:*<{}}\"), input, 34);\r\n    check(SV(\"__{false: 0, true: 42, true: 1}___\"), SV(\"{:_^{}}\"), input, 34);\r\n    check(SV(\"#####{false: 0, true: 42, true: 1}\"), SV(\"{:#>{}}\"), input, 34);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__false: 0, true: 42, true: 1___\"), SV(\"{:_^32n}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"__{false: 0, true: 42, true: 1}___\"), SV(\"{:_^34m}\"), input); // the m type does the same as the default.\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"{false: 0  , true: 42  , true: 1   }\"), SV(\"{::10}\"), input);\r\n    check(SV(\"{false: 0**, true: 42**, true: 1***}\"), SV(\"{::*<10}\"), input);\r\n    check(SV(\"{_false: 0_, _true: 42_, _true: 1__}\"), SV(\"{::_^10}\"), input);\r\n    check(SV(\"{##false: 0, ##true: 42, ###true: 1}\"), SV(\"{::#>10}\"), input);\r\n\r\n    check(SV(\"{false: 0  , true: 42  , true: 1   }\"), SV(\"{::{}}\"), input, 10);\r\n    check(SV(\"{false: 0**, true: 42**, true: 1***}\"), SV(\"{::*<{}}\"), input, 10);\r\n    check(SV(\"{_false: 0_, _true: 42_, _true: 1__}\"), SV(\"{::_^{}}\"), input, 10);\r\n    check(SV(\"{##false: 0, ##true: 42, ###true: 1}\"), SV(\"{::#>{}}\"), input, 10);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{##false: 0, ##true: 42, ###true: 1}^^^\"), SV(\"{:^^41:#>10}\"), input);\r\n    check(SV(\"^^{##false: 0, ##true: 42, ###true: 1}^^^\"), SV(\"{:^^{}:#>10}\"), input, 41);\r\n    check(SV(\"^^{##false: 0, ##true: 42, ###true: 1}^^^\"), SV(\"{:^^{}:#>{}}\"), input, 41, 10);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>10}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>{}}\"), input, 41);\r\n}\r\n\r\n//\r\n// Integral\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_int(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"{-42: 42, 1: -1, 42: -42}\"), SV(\"{}\"), input);\r\n    check(SV(\"{-42: 42, 1: -1, 42: -42}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{-42: 42, 1: -1, 42: -42}^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{-42: 42, 1: -1, 42: -42}     \"), SV(\"{:30}\"), input);\r\n    check(SV(\"{-42: 42, 1: -1, 42: -42}*****\"), SV(\"{:*<30}\"), input);\r\n    check(SV(\"__{-42: 42, 1: -1, 42: -42}___\"), SV(\"{:_^30}\"), input);\r\n    check(SV(\"#####{-42: 42, 1: -1, 42: -42}\"), SV(\"{:#>30}\"), input);\r\n\r\n    check(SV(\"{-42: 42, 1: -1, 42: -42}     \"), SV(\"{:{}}\"), input, 30);\r\n    check(SV(\"{-42: 42, 1: -1, 42: -42}*****\"), SV(\"{:*<{}}\"), input, 30);\r\n    check(SV(\"__{-42: 42, 1: -1, 42: -42}___\"), SV(\"{:_^{}}\"), input, 30);\r\n    check(SV(\"#####{-42: 42, 1: -1, 42: -42}\"), SV(\"{:#>{}}\"), input, 30);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__-42: 42, 1: -1, 42: -42___\"), SV(\"{:_^28n}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"__{-42: 42, 1: -1, 42: -42}___\"), SV(\"{:_^30m}\"), input); // the m type does the same as the default.\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"{-42: 42   , 1: -1     , 42: -42   }\"), SV(\"{::10}\"), input);\r\n    check(SV(\"{-42: 42***, 1: -1*****, 42: -42***}\"), SV(\"{::*<10}\"), input);\r\n    check(SV(\"{_-42: 42__, __1: -1___, _42: -42__}\"), SV(\"{::_^10}\"), input);\r\n    check(SV(\"{###-42: 42, #####1: -1, ###42: -42}\"), SV(\"{::#>10}\"), input);\r\n\r\n    check(SV(\"{-42: 42   , 1: -1     , 42: -42   }\"), SV(\"{::{}}\"), input, 10);\r\n    check(SV(\"{-42: 42***, 1: -1*****, 42: -42***}\"), SV(\"{::*<{}}\"), input, 10);\r\n    check(SV(\"{_-42: 42__, __1: -1___, _42: -42__}\"), SV(\"{::_^{}}\"), input, 10);\r\n    check(SV(\"{###-42: 42, #####1: -1, ###42: -42}\"), SV(\"{::#>{}}\"), input, 10);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{###-42: 42, #####1: -1, ###42: -42}^^^\"), SV(\"{:^^41:#>10}\"), input);\r\n    check(SV(\"^^{###-42: 42, #####1: -1, ###42: -42}^^^\"), SV(\"{:^^{}:#>10}\"), input, 41);\r\n    check(SV(\"^^{###-42: 42, #####1: -1, ###42: -42}^^^\"), SV(\"{:^^{}:#>{}}\"), input, 41, 10);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>10}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>{}}\"), input, 41);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_int(TestFunction check, ExceptionTest check_exception) {\r\n    test_int<CharT>(check, check_exception, map<int, int>{{1, -1}, {42, -42}, {-42, 42}});\r\n}\r\n\r\n//\r\n// Floating point\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_floating_point(TestFunction check, ExceptionTest check_exception) {\r\n    flat_multimap<double, double> input{{11.0, 42.0}, {11.0, -1.0}};\r\n\r\n    check(SV(\"{11: 42, 11: -1}\"), SV(\"{}\"), input);\r\n    check(SV(\"{11: 42, 11: -1}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{11: 42, 11: -1}^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{11: 42, 11: -1}     \"), SV(\"{:21}\"), input);\r\n    check(SV(\"{11: 42, 11: -1}*****\"), SV(\"{:*<21}\"), input);\r\n    check(SV(\"__{11: 42, 11: -1}___\"), SV(\"{:_^21}\"), input);\r\n    check(SV(\"#####{11: 42, 11: -1}\"), SV(\"{:#>21}\"), input);\r\n\r\n    check(SV(\"{11: 42, 11: -1}     \"), SV(\"{:{}}\"), input, 21);\r\n    check(SV(\"{11: 42, 11: -1}*****\"), SV(\"{:*<{}}\"), input, 21);\r\n    check(SV(\"__{11: 42, 11: -1}___\"), SV(\"{:_^{}}\"), input, 21);\r\n    check(SV(\"#####{11: 42, 11: -1}\"), SV(\"{:#>{}}\"), input, 21);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__11: 42, 11: -1___\"), SV(\"{:_^19n}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"__{11: 42, 11: -1}___\"), SV(\"{:_^21m}\"), input); // the m type does the same as the default.\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"{11: 42    , 11: -1    }\"), SV(\"{::10}\"), input);\r\n    check(SV(\"{11: 42****, 11: -1****}\"), SV(\"{::*<10}\"), input);\r\n    check(SV(\"{__11: 42__, __11: -1__}\"), SV(\"{::_^10}\"), input);\r\n    check(SV(\"{####11: 42, ####11: -1}\"), SV(\"{::#>10}\"), input);\r\n\r\n    check(SV(\"{11: 42    , 11: -1    }\"), SV(\"{::{}}\"), input, 10);\r\n    check(SV(\"{11: 42****, 11: -1****}\"), SV(\"{::*<{}}\"), input, 10);\r\n    check(SV(\"{__11: 42__, __11: -1__}\"), SV(\"{::_^{}}\"), input, 10);\r\n    check(SV(\"{####11: 42, ####11: -1}\"), SV(\"{::#>{}}\"), input, 10);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{####11: 42, ####11: -1}^^^\"), SV(\"{:^^29:#>10}\"), input);\r\n    check(SV(\"^^{####11: 42, ####11: -1}^^^\"), SV(\"{:^^{}:#>10}\"), input, 29);\r\n    check(SV(\"^^{####11: 42, ####11: -1}^^^\"), SV(\"{:^^{}:#>{}}\"), input, 29, 10);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>10}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>{}}\"), input, 29);\r\n}\r\n\r\n//\r\n// Pointer\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_pointer(TestFunction check, ExceptionTest check_exception) {\r\n    unordered_map<const void*, nullptr_t> input{{0, 0}};\r\n\r\n    check(SV(\"{0x0: 0x0}\"), SV(\"{}\"), input);\r\n    check(SV(\"{0x0: 0x0}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{0x0: 0x0}^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{0x0: 0x0}     \"), SV(\"{:15}\"), input);\r\n    check(SV(\"{0x0: 0x0}*****\"), SV(\"{:*<15}\"), input);\r\n    check(SV(\"__{0x0: 0x0}___\"), SV(\"{:_^15}\"), input);\r\n    check(SV(\"#####{0x0: 0x0}\"), SV(\"{:#>15}\"), input);\r\n\r\n    check(SV(\"{0x0: 0x0}     \"), SV(\"{:{}}\"), input, 15);\r\n    check(SV(\"{0x0: 0x0}*****\"), SV(\"{:*<{}}\"), input, 15);\r\n    check(SV(\"__{0x0: 0x0}___\"), SV(\"{:_^{}}\"), input, 15);\r\n    check(SV(\"#####{0x0: 0x0}\"), SV(\"{:#>{}}\"), input, 15);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__0x0: 0x0___\"), SV(\"{:_^13n}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"__{0x0: 0x0}___\"), SV(\"{:_^15m}\"), input); // the m type does the same as the default.\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"{0x0: 0x0     }\"), SV(\"{::13}\"), input);\r\n    check(SV(\"{0x0: 0x0*****}\"), SV(\"{::*<13}\"), input);\r\n    check(SV(\"{__0x0: 0x0___}\"), SV(\"{::_^13}\"), input);\r\n    check(SV(\"{#####0x0: 0x0}\"), SV(\"{::#>13}\"), input);\r\n\r\n    check(SV(\"{0x0: 0x0     }\"), SV(\"{::{}}\"), input, 13);\r\n    check(SV(\"{0x0: 0x0*****}\"), SV(\"{::*<{}}\"), input, 13);\r\n    check(SV(\"{__0x0: 0x0___}\"), SV(\"{::_^{}}\"), input, 13);\r\n    check(SV(\"{#####0x0: 0x0}\"), SV(\"{::#>{}}\"), input, 13);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{###0x0: 0x0}^^^\"), SV(\"{:^^18:#>11}\"), input);\r\n    check(SV(\"^^{###0x0: 0x0}^^^\"), SV(\"{:^^{}:#>11}\"), input, 18);\r\n    check(SV(\"^^{###0x0: 0x0}^^^\"), SV(\"{:^^{}:#>{}}\"), input, 18, 11);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>11}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>{}}\"), input, 18);\r\n}\r\n\r\n//\r\n// String\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_string(TestFunction check, ExceptionTest check_exception) {\r\n    map<basic_string<CharT>, basic_string<CharT>> input{{STR(\"hello\"), STR(\"HELLO\")}, {STR(\"world\"), STR(\"WORLD\")}};\r\n\r\n    check(SV(R\"({\"hello\": \"HELLO\", \"world\": \"WORLD\"})\"), SV(\"{}\"), input);\r\n    check(SV(R\"({\"hello\": \"HELLO\", \"world\": \"WORLD\"}^42)\"), SV(\"{}^42\"), input);\r\n    check(SV(R\"({\"hello\": \"HELLO\", \"world\": \"WORLD\"}^42)\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(R\"({\"hello\": \"HELLO\", \"world\": \"WORLD\"}     )\"), SV(\"{:41}\"), input);\r\n    check(SV(R\"({\"hello\": \"HELLO\", \"world\": \"WORLD\"}*****)\"), SV(\"{:*<41}\"), input);\r\n    check(SV(R\"(__{\"hello\": \"HELLO\", \"world\": \"WORLD\"}___)\"), SV(\"{:_^41}\"), input);\r\n    check(SV(R\"(#####{\"hello\": \"HELLO\", \"world\": \"WORLD\"})\"), SV(\"{:#>41}\"), input);\r\n\r\n    check(SV(R\"({\"hello\": \"HELLO\", \"world\": \"WORLD\"}     )\"), SV(\"{:{}}\"), input, 41);\r\n    check(SV(R\"({\"hello\": \"HELLO\", \"world\": \"WORLD\"}*****)\"), SV(\"{:*<{}}\"), input, 41);\r\n    check(SV(R\"(__{\"hello\": \"HELLO\", \"world\": \"WORLD\"}___)\"), SV(\"{:_^{}}\"), input, 41);\r\n    check(SV(R\"(#####{\"hello\": \"HELLO\", \"world\": \"WORLD\"})\"), SV(\"{:#>{}}\"), input, 41);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(R\"(__\"hello\": \"HELLO\", \"world\": \"WORLD\"___)\"), SV(\"{:_^39n}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(R\"(__{\"hello\": \"HELLO\", \"world\": \"WORLD\"}___)\"), SV(\"{:_^41m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(R\"({\"hello\": \"HELLO\"     , \"world\": \"WORLD\"     })\"), SV(\"{::21}\"), input);\r\n    check(SV(R\"({\"hello\": \"HELLO\"*****, \"world\": \"WORLD\"*****})\"), SV(\"{::*<21}\"), input);\r\n    check(SV(R\"({__\"hello\": \"HELLO\"___, __\"world\": \"WORLD\"___})\"), SV(\"{::_^21}\"), input);\r\n    check(SV(R\"({#####\"hello\": \"HELLO\", #####\"world\": \"WORLD\"})\"), SV(\"{::#>21}\"), input);\r\n\r\n    check(SV(R\"({\"hello\": \"HELLO\"     , \"world\": \"WORLD\"     })\"), SV(\"{::{}}\"), input, 21);\r\n    check(SV(R\"({\"hello\": \"HELLO\"*****, \"world\": \"WORLD\"*****})\"), SV(\"{::*<{}}\"), input, 21);\r\n    check(SV(R\"({__\"hello\": \"HELLO\"___, __\"world\": \"WORLD\"___})\"), SV(\"{::_^{}}\"), input, 21);\r\n    check(SV(R\"({#####\"hello\": \"HELLO\", #####\"world\": \"WORLD\"})\"), SV(\"{::#>{}}\"), input, 21);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n\r\n    check(SV(R\"(^^{#####\"hello\": \"HELLO\", #####\"world\": \"WORLD\"}^^^)\"), SV(\"{:^^51:#>21}\"), input);\r\n    check(SV(R\"(^^{#####\"hello\": \"HELLO\", #####\"world\": \"WORLD\"}^^^)\"), SV(\"{:^^{}:#>21}\"), input, 51);\r\n    check(SV(R\"(^^{#####\"hello\": \"HELLO\", #####\"world\": \"WORLD\"}^^^)\"), SV(\"{:^^{}:#>{}}\"), input, 51, 21);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>21}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>{}}\"), input, 51);\r\n}\r\n\r\n//\r\n// Handle\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_status(TestFunction check, ExceptionTest check_exception) {\r\n    unordered_multimap<status, status> input{{status::foobar, status::foo}, {status::foobar, status::bar}};\r\n\r\n    check(SV(\"{0xaa55: 0xaaaa, 0xaa55: 0x5555}\"), SV(\"{}\"), input);\r\n    check(SV(\"{0xaa55: 0xaaaa, 0xaa55: 0x5555}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{0xaa55: 0xaaaa, 0xaa55: 0x5555}^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{0xaa55: 0xaaaa, 0xaa55: 0x5555}     \"), SV(\"{:37}\"), input);\r\n    check(SV(\"{0xaa55: 0xaaaa, 0xaa55: 0x5555}*****\"), SV(\"{:*<37}\"), input);\r\n    check(SV(\"__{0xaa55: 0xaaaa, 0xaa55: 0x5555}___\"), SV(\"{:_^37}\"), input);\r\n    check(SV(\"#####{0xaa55: 0xaaaa, 0xaa55: 0x5555}\"), SV(\"{:#>37}\"), input);\r\n\r\n    check(SV(\"{0xaa55: 0xaaaa, 0xaa55: 0x5555}     \"), SV(\"{:{}}\"), input, 37);\r\n    check(SV(\"{0xaa55: 0xaaaa, 0xaa55: 0x5555}*****\"), SV(\"{:*<{}}\"), input, 37);\r\n    check(SV(\"__{0xaa55: 0xaaaa, 0xaa55: 0x5555}___\"), SV(\"{:_^{}}\"), input, 37);\r\n    check(SV(\"#####{0xaa55: 0xaaaa, 0xaa55: 0x5555}\"), SV(\"{:#>{}}\"), input, 37);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__0xaa55: 0xaaaa, 0xaa55: 0x5555___\"), SV(\"{:_^35n}\"), input);\r\n\r\n    // *** type ***\r\n    check(\r\n        SV(\"__{0xaa55: 0xaaaa, 0xaa55: 0x5555}___\"), SV(\"{:_^37}\"), input); // the m type does the same as the default.\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    // Underlying can't have a format-spec\r\n}\r\n\r\n//\r\n// Adaptor\r\n//\r\n\r\nclass adaptor {\r\n    using adaptee = map<int, int>;\r\n\r\npublic:\r\n    using key_type    = adaptee::key_type;\r\n    using mapped_type = adaptee::mapped_type;\r\n    using iterator    = adaptee::iterator;\r\n\r\n    iterator begin() {\r\n        return data_.begin();\r\n    }\r\n    iterator end() {\r\n        return data_.end();\r\n    }\r\n\r\n    explicit adaptor(map<int, int>&& data) : data_(move(data)) {}\r\n\r\nprivate:\r\n    adaptee data_;\r\n};\r\n\r\nstatic_assert(format_kind<adaptor> == range_format::map);\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_adaptor(TestFunction check, ExceptionTest check_exception) {\r\n    test_int<CharT>(check, check_exception, adaptor{map<int, int>{{1, -1}, {42, -42}, {-42, 42}}});\r\n}\r\n\r\n//\r\n// Driver\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid format_tests(TestFunction check, ExceptionTest check_exception) {\r\n    test_char<CharT>(check, check_exception);\r\n    if (same_as<CharT, wchar_t>) { // avoid testing twice\r\n        test_char_to_wchar(check, check_exception);\r\n    }\r\n    test_bool<CharT>(check, check_exception);\r\n    test_int<CharT>(check, check_exception);\r\n    test_floating_point<CharT>(check, check_exception);\r\n    test_pointer<CharT>(check, check_exception);\r\n    test_string<CharT>(check, check_exception);\r\n\r\n    test_status<CharT>(check, check_exception);\r\n\r\n    test_adaptor<CharT>(check, check_exception);\r\n}\r\n\r\nauto test_format = []<class CharT, class... Args>(basic_string_view<CharT> expected,\r\n                       type_identity_t<basic_format_string<CharT, Args...>> fmt, Args&&... args) {\r\n    basic_string<CharT> out = format(fmt, forward<Args>(args)...);\r\n    assert(out == expected);\r\n};\r\n\r\nauto test_format_exception = []<class CharT, class... Args>(string_view, basic_string_view<CharT>, Args&&...) {\r\n    // After P2216 most exceptions thrown by format become ill-formed.\r\n    // Therefore this test does nothing.\r\n};\r\n\r\nauto test_vformat = []<class CharT, class... Args>(\r\n                        basic_string_view<CharT> expected, basic_string_view<CharT> fmt, Args&&... args) {\r\n    basic_string<CharT> out = vformat(fmt, make_format_args<context_t<CharT>>(args...));\r\n    assert(out == expected);\r\n};\r\n\r\nauto test_vformat_exception = []<class CharT, class... Args>([[maybe_unused]] string_view what,\r\n                                  [[maybe_unused]] basic_string_view<CharT> fmt, [[maybe_unused]] Args&&... args) {\r\n    try {\r\n        static_cast<void>(vformat(fmt, make_format_args<context_t<CharT>>(args...)));\r\n        assert(false);\r\n    } catch (const format_error&) {\r\n    } catch (...) {\r\n        assert(false);\r\n    }\r\n};\r\n\r\nint main() {\r\n    format_tests<char>(test_format, test_format_exception);\r\n    format_tests<wchar_t>(test_format, test_format_exception);\r\n\r\n    format_tests<char>(test_vformat, test_vformat_exception);\r\n    format_tests<wchar_t>(test_vformat, test_vformat_exception);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_range_sequence/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_range_sequence/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n// derived from libc++'s test files:\r\n// * support/format.functions.common.h\r\n// * support/test_iterators.h\r\n// * std/utilities/format/format.range/format.range.formatter/format.functions.tests.h\r\n// * std/utilities/format/format.range/format.range.formatter/format.functions.format.pass.cpp\r\n// * std/utilities/format/format.range/format.range.formatter/format.functions.vformat.pass.cpp\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <charconv>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <cstring>\r\n#include <deque>\r\n#include <format>\r\n#include <iterator>\r\n#include <list>\r\n#include <ranges>\r\n#include <span>\r\n#include <string>\r\n#include <string_view>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <is_permissive.hpp>\r\n#include <test_format_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n#ifdef _DEBUG\r\n#define DEFAULT_IDL_SETTING 2\r\n#else\r\n#define DEFAULT_IDL_SETTING 0\r\n#endif\r\n\r\n#define CSTR(Str) TYPED_LITERAL(CharT, Str)\r\n#define STR(Str)  basic_string(CSTR(Str))\r\n#define SV(Str)   basic_string_view(CSTR(Str))\r\n\r\nnamespace detail {\r\n    consteval string_view get_format_types() noexcept {\r\n        return \"aAbBcdeEfFgGopPsxX?\";\r\n    }\r\n\r\n    template <class CharT, size_t N>\r\n    basic_string<CharT> get_colons() {\r\n        return basic_string<CharT>(N, CharT(':'));\r\n    }\r\n\r\n    template <class CharT, /*format_types types,*/ size_t N>\r\n    vector<basic_string<CharT>> fmt_invalid_types(string_view valid) {\r\n        vector<basic_string<CharT>> result;\r\n        if constexpr (is_permissive_v<CharT>) {\r\n            for (const char c : get_format_types()) {\r\n                if (valid.find(c) == string_view::npos) {\r\n                    result.push_back(format(SV(\"{{{}{}}}\"), get_colons<CharT, N>(), c));\r\n                }\r\n            }\r\n        } else {\r\n            // ranges::to is not available in C++20.\r\n            ranges::copy(get_format_types() | views::filter([&](char type) {\r\n                return valid.find(type) == string_view::npos;\r\n            }) | views::transform([&](char type) { return format(SV(\"{{{}{}}}\"), get_colons<CharT, N>(), type); }),\r\n                back_inserter(result));\r\n        }\r\n        return result;\r\n    }\r\n} // namespace detail\r\n\r\n// Creates format string for the invalid types.\r\n//\r\n// valid contains a list of types that are valid.\r\n//\r\n// The return value is a collection of basic_strings, instead of\r\n// basic_string_views since the values are temporaries.\r\ntemplate <class CharT>\r\nvector<basic_string<CharT>> fmt_invalid_types(string_view valid) {\r\n    return detail::fmt_invalid_types<CharT, 1>(valid);\r\n}\r\n\r\n// Like fmt_invalid_types but when the format spec is for an underlying formatter.\r\ntemplate <class CharT>\r\nvector<basic_string<CharT>> fmt_invalid_nested_types(string_view valid) {\r\n    return detail::fmt_invalid_types<CharT, 2>(valid);\r\n}\r\n\r\ntemplate <class T>\r\nstruct context {};\r\n\r\ntemplate <>\r\nstruct context<char> {\r\n    using type = format_context;\r\n};\r\n\r\ntemplate <>\r\nstruct context<wchar_t> {\r\n    using type = wformat_context;\r\n};\r\n\r\ntemplate <class T>\r\nusing context_t = context<T>::type;\r\n\r\n// A user-defined type used to test the handle formatter.\r\nenum class status : uint16_t { foo = 0xAAAA, bar = 0x5555, foobar = 0xAA55 };\r\n\r\n// The formatter for a user-defined type used to test the handle formatter.\r\ntemplate <class CharT>\r\nstruct formatter<status, CharT> {\r\n    // During the 2023 Issaquah meeting LEWG made it clear a formatter is\r\n    // required to call its parse function. LWG3892 Adds the wording for that\r\n    // requirement. Therefore this formatter is initialized in an invalid state.\r\n    // A call to parse sets it in a valid state and a call to format validates\r\n    // the state.\r\n    int type = -1;\r\n\r\n    constexpr auto parse(basic_format_parse_context<CharT>& parse_ctx) -> decltype(parse_ctx.begin()) {\r\n        auto begin = parse_ctx.begin();\r\n        auto end   = parse_ctx.end();\r\n        type       = 0;\r\n        if (begin == end) {\r\n            return begin;\r\n        }\r\n\r\n        switch (*begin) {\r\n        case CharT('x'):\r\n            break;\r\n        case CharT('X'):\r\n            type = 1;\r\n            break;\r\n        case CharT('s'):\r\n            type = 2;\r\n            break;\r\n        case CharT('}'):\r\n            return begin;\r\n        default:\r\n            throw_format_error(\"The type option contains an invalid value for a status formatting argument\");\r\n        }\r\n\r\n        ++begin;\r\n        if (begin != end && *begin != CharT('}')) {\r\n            throw_format_error(\"The format specifier should consume the input or end with a '}'\");\r\n        }\r\n\r\n        return begin;\r\n    }\r\n\r\n    template <class Out>\r\n    auto format(status s, basic_format_context<Out, CharT>& ctx) const -> decltype(ctx.out()) {\r\n        const char* names[] = {\"foo\", \"bar\", \"foobar\"};\r\n        char buffer[7];\r\n        const char* pbegin = names[0];\r\n        const char* pend   = names[0];\r\n        switch (type) {\r\n        case -1:\r\n            throw_format_error(\"The formatter's parse function has not been called.\");\r\n\r\n        case 0:\r\n            pbegin    = buffer;\r\n            buffer[0] = '0';\r\n            buffer[1] = 'x';\r\n            pend      = to_chars(&buffer[2], end(buffer), static_cast<uint16_t>(s), 16).ptr;\r\n            buffer[6] = '\\0';\r\n            break;\r\n\r\n        case 1:\r\n            pbegin    = buffer;\r\n            buffer[0] = '0';\r\n            buffer[1] = 'X';\r\n            pend      = to_chars(&buffer[2], end(buffer), static_cast<uint16_t>(s), 16).ptr;\r\n            transform(static_cast<const char*>(&buffer[2]), pend, &buffer[2],\r\n                [](char c) { return static_cast<char>(toupper(c)); });\r\n            buffer[6] = '\\0';\r\n            break;\r\n\r\n        case 2:\r\n            switch (s) {\r\n            case status::foo:\r\n                pbegin = names[0];\r\n                break;\r\n            case status::bar:\r\n                pbegin = names[1];\r\n                break;\r\n            case status::foobar:\r\n                pbegin = names[2];\r\n                break;\r\n            }\r\n            pend = pbegin + strlen(pbegin);\r\n            break;\r\n        }\r\n\r\n#if !defined(__clang__) && !defined(__EDG__)\r\n#pragma warning(push)\r\n#pragma warning(disable : 4365)\r\n#endif // !defined(__clang__) && !defined(__EDG__)\r\n        return copy(pbegin, pend, ctx.out());\r\n#if !defined(__clang__) && !defined(__EDG__)\r\n#pragma warning(pop)\r\n#endif // !defined(__clang__) && !defined(__EDG__)\r\n    }\r\n\r\nprivate:\r\n    [[noreturn]] void throw_format_error(const char* s) const {\r\n        throw format_error(s);\r\n    }\r\n};\r\n\r\n\r\ntemplate <class It>\r\nclass test_cpp20_input_iterator {\r\n    It it_;\r\n\r\npublic:\r\n    using value_type       = iter_value_t<It>;\r\n    using difference_type  = iter_difference_t<It>;\r\n    using iterator_concept = input_iterator_tag;\r\n\r\n    constexpr explicit test_cpp20_input_iterator(It it) : it_(it) {}\r\n    test_cpp20_input_iterator(test_cpp20_input_iterator&&)            = default;\r\n    test_cpp20_input_iterator& operator=(test_cpp20_input_iterator&&) = default;\r\n    constexpr decltype(auto) operator*() const {\r\n        return *it_;\r\n    }\r\n    constexpr test_cpp20_input_iterator& operator++() {\r\n        ++it_;\r\n        return *this;\r\n    }\r\n    constexpr void operator++(int) {\r\n        ++it_;\r\n    }\r\n\r\n    friend constexpr It base(const test_cpp20_input_iterator& i) {\r\n        return i.it_;\r\n    }\r\n\r\n    template <class T>\r\n    void operator,(T const&) = delete;\r\n};\r\ntemplate <class It>\r\ntest_cpp20_input_iterator(It) -> test_cpp20_input_iterator<It>;\r\n\r\nstatic_assert(input_iterator<test_cpp20_input_iterator<int*>>);\r\n\r\ntemplate <class It>\r\nclass test_forward_iterator {\r\n    It it_;\r\n\r\n    template <class U>\r\n    friend class test_forward_iterator;\r\n\r\npublic:\r\n    using iterator_category = forward_iterator_tag;\r\n    using value_type        = iterator_traits<It>::value_type;\r\n    using difference_type   = iterator_traits<It>::difference_type;\r\n    using pointer           = It;\r\n    using reference         = iterator_traits<It>::reference;\r\n\r\n    constexpr test_forward_iterator() : it_() {}\r\n    constexpr explicit test_forward_iterator(It it) : it_(it) {}\r\n\r\n    template <class U>\r\n    constexpr test_forward_iterator(const test_forward_iterator<U>& u) : it_(u.it_) {}\r\n\r\n    template <class U>\r\n        requires is_default_constructible_v<U>\r\n    constexpr test_forward_iterator(test_forward_iterator<U>&& other) : it_(other.it_) {\r\n        other.it_ = U();\r\n    }\r\n\r\n    constexpr reference operator*() const {\r\n        return *it_;\r\n    }\r\n\r\n    constexpr test_forward_iterator& operator++() {\r\n        ++it_;\r\n        return *this;\r\n    }\r\n    constexpr test_forward_iterator operator++(int) {\r\n        return test_forward_iterator(it_++);\r\n    }\r\n\r\n    friend constexpr bool operator==(const test_forward_iterator& x, const test_forward_iterator& y) {\r\n        return x.it_ == y.it_;\r\n    }\r\n    friend constexpr bool operator!=(const test_forward_iterator& x, const test_forward_iterator& y) {\r\n        return x.it_ != y.it_;\r\n    }\r\n\r\n    friend constexpr It base(const test_forward_iterator& i) {\r\n        return i.it_;\r\n    }\r\n\r\n    template <class T>\r\n    void operator,(T const&) = delete;\r\n};\r\ntemplate <class It>\r\ntest_forward_iterator(It) -> test_forward_iterator<It>;\r\n\r\ntemplate <class It>\r\nclass test_bidirectional_iterator {\r\n    It it_;\r\n\r\n    template <class U>\r\n    friend class test_bidirectional_iterator;\r\n\r\npublic:\r\n    using iterator_category = bidirectional_iterator_tag;\r\n    using value_type        = iterator_traits<It>::value_type;\r\n    using difference_type   = iterator_traits<It>::difference_type;\r\n    using pointer           = It;\r\n    using reference         = iterator_traits<It>::reference;\r\n\r\n    constexpr test_bidirectional_iterator() : it_() {}\r\n    constexpr explicit test_bidirectional_iterator(It it) : it_(it) {}\r\n\r\n    template <class U>\r\n    constexpr test_bidirectional_iterator(const test_bidirectional_iterator<U>& u) : it_(u.it_) {}\r\n\r\n    template <class U>\r\n        requires is_default_constructible_v<U>\r\n    constexpr test_bidirectional_iterator(test_bidirectional_iterator<U>&& u) : it_(u.it_) {\r\n        u.it_ = U();\r\n    }\r\n\r\n    constexpr reference operator*() const {\r\n        return *it_;\r\n    }\r\n\r\n    constexpr test_bidirectional_iterator& operator++() {\r\n        ++it_;\r\n        return *this;\r\n    }\r\n    constexpr test_bidirectional_iterator& operator--() {\r\n        --it_;\r\n        return *this;\r\n    }\r\n    constexpr test_bidirectional_iterator operator++(int) {\r\n        return test_bidirectional_iterator(it_++);\r\n    }\r\n    constexpr test_bidirectional_iterator operator--(int) {\r\n        return test_bidirectional_iterator(it_--);\r\n    }\r\n\r\n    friend constexpr bool operator==(const test_bidirectional_iterator& x, const test_bidirectional_iterator& y) {\r\n        return x.it_ == y.it_;\r\n    }\r\n    friend constexpr bool operator!=(const test_bidirectional_iterator& x, const test_bidirectional_iterator& y) {\r\n        return x.it_ != y.it_;\r\n    }\r\n\r\n    friend constexpr It base(const test_bidirectional_iterator& i) {\r\n        return i.it_;\r\n    }\r\n\r\n    template <class T>\r\n    void operator,(T const&) = delete;\r\n};\r\ntemplate <class It>\r\ntest_bidirectional_iterator(It) -> test_bidirectional_iterator<It>;\r\n\r\ntemplate <class It>\r\nclass test_random_access_iterator {\r\n    It it_;\r\n\r\n    template <class U>\r\n    friend class test_random_access_iterator;\r\n\r\npublic:\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = iterator_traits<It>::value_type;\r\n    using difference_type   = iterator_traits<It>::difference_type;\r\n    using pointer           = It;\r\n    using reference         = iterator_traits<It>::reference;\r\n\r\n    constexpr test_random_access_iterator() : it_() {}\r\n    constexpr explicit test_random_access_iterator(It it) : it_(it) {}\r\n\r\n    template <class U>\r\n    constexpr test_random_access_iterator(const test_random_access_iterator<U>& u) : it_(u.it_) {}\r\n\r\n    template <class U>\r\n        requires is_default_constructible_v<U>\r\n    constexpr test_random_access_iterator(test_random_access_iterator<U>&& u) : it_(u.it_) {\r\n        u.it_ = U();\r\n    }\r\n\r\n    constexpr reference operator*() const {\r\n        return *it_;\r\n    }\r\n    constexpr reference operator[](difference_type n) const {\r\n        return it_[n];\r\n    }\r\n\r\n    constexpr test_random_access_iterator& operator++() {\r\n        ++it_;\r\n        return *this;\r\n    }\r\n    constexpr test_random_access_iterator& operator--() {\r\n        --it_;\r\n        return *this;\r\n    }\r\n    constexpr test_random_access_iterator operator++(int) {\r\n        return test_random_access_iterator(it_++);\r\n    }\r\n    constexpr test_random_access_iterator operator--(int) {\r\n        return test_random_access_iterator(it_--);\r\n    }\r\n\r\n    constexpr test_random_access_iterator& operator+=(difference_type n) {\r\n        it_ += n;\r\n        return *this;\r\n    }\r\n    constexpr test_random_access_iterator& operator-=(difference_type n) {\r\n        it_ -= n;\r\n        return *this;\r\n    }\r\n    friend constexpr test_random_access_iterator operator+(test_random_access_iterator x, difference_type n) {\r\n        x += n;\r\n        return x;\r\n    }\r\n    friend constexpr test_random_access_iterator operator+(difference_type n, test_random_access_iterator x) {\r\n        x += n;\r\n        return x;\r\n    }\r\n    friend constexpr test_random_access_iterator operator-(test_random_access_iterator x, difference_type n) {\r\n        x -= n;\r\n        return x;\r\n    }\r\n    friend constexpr difference_type operator-(test_random_access_iterator x, test_random_access_iterator y) {\r\n        return x.it_ - y.it_;\r\n    }\r\n\r\n    friend constexpr bool operator==(const test_random_access_iterator& x, const test_random_access_iterator& y) {\r\n        return x.it_ == y.it_;\r\n    }\r\n    friend constexpr bool operator!=(const test_random_access_iterator& x, const test_random_access_iterator& y) {\r\n        return x.it_ != y.it_;\r\n    }\r\n    friend constexpr bool operator<(const test_random_access_iterator& x, const test_random_access_iterator& y) {\r\n        return x.it_ < y.it_;\r\n    }\r\n    friend constexpr bool operator<=(const test_random_access_iterator& x, const test_random_access_iterator& y) {\r\n        return x.it_ <= y.it_;\r\n    }\r\n    friend constexpr bool operator>(const test_random_access_iterator& x, const test_random_access_iterator& y) {\r\n        return x.it_ > y.it_;\r\n    }\r\n    friend constexpr bool operator>=(const test_random_access_iterator& x, const test_random_access_iterator& y) {\r\n        return x.it_ >= y.it_;\r\n    }\r\n\r\n    friend constexpr It base(const test_random_access_iterator& i) {\r\n        return i.it_;\r\n    }\r\n\r\n    template <class T>\r\n    void operator,(T const&) = delete;\r\n};\r\ntemplate <class It>\r\ntest_random_access_iterator(It) -> test_random_access_iterator<It>;\r\n\r\ntemplate <class It>\r\nclass test_contiguous_iterator {\r\n    static_assert(is_pointer_v<It>, \"Things probably break in this case\");\r\n\r\n    It it_;\r\n\r\n    template <class U>\r\n    friend class test_contiguous_iterator;\r\n\r\npublic:\r\n    using iterator_category = contiguous_iterator_tag;\r\n    using value_type        = iterator_traits<It>::value_type;\r\n    using difference_type   = iterator_traits<It>::difference_type;\r\n    using pointer           = It;\r\n    using reference         = iterator_traits<It>::reference;\r\n    using element_type      = remove_pointer_t<It>;\r\n\r\n    constexpr It base() const {\r\n        return it_;\r\n    }\r\n\r\n    constexpr test_contiguous_iterator() : it_() {}\r\n    constexpr explicit test_contiguous_iterator(It it) : it_(it) {}\r\n\r\n    template <class U>\r\n    constexpr test_contiguous_iterator(const test_contiguous_iterator<U>& u) : it_(u.it_) {}\r\n\r\n    template <class U>\r\n        requires is_default_constructible_v<U>\r\n    constexpr test_contiguous_iterator(test_contiguous_iterator<U>&& u) : it_(u.it_) {\r\n        u.it_ = U();\r\n    }\r\n\r\n    constexpr reference operator*() const {\r\n        return *it_;\r\n    }\r\n    constexpr pointer operator->() const {\r\n        return it_;\r\n    }\r\n    constexpr reference operator[](difference_type n) const {\r\n        return it_[n];\r\n    }\r\n\r\n    constexpr test_contiguous_iterator& operator++() {\r\n        ++it_;\r\n        return *this;\r\n    }\r\n    constexpr test_contiguous_iterator& operator--() {\r\n        --it_;\r\n        return *this;\r\n    }\r\n    constexpr test_contiguous_iterator operator++(int) {\r\n        return test_contiguous_iterator(it_++);\r\n    }\r\n    constexpr test_contiguous_iterator operator--(int) {\r\n        return test_contiguous_iterator(it_--);\r\n    }\r\n\r\n    constexpr test_contiguous_iterator& operator+=(difference_type n) {\r\n        it_ += n;\r\n        return *this;\r\n    }\r\n    constexpr test_contiguous_iterator& operator-=(difference_type n) {\r\n        it_ -= n;\r\n        return *this;\r\n    }\r\n    friend constexpr test_contiguous_iterator operator+(test_contiguous_iterator x, difference_type n) {\r\n        x += n;\r\n        return x;\r\n    }\r\n    friend constexpr test_contiguous_iterator operator+(difference_type n, test_contiguous_iterator x) {\r\n        x += n;\r\n        return x;\r\n    }\r\n    friend constexpr test_contiguous_iterator operator-(test_contiguous_iterator x, difference_type n) {\r\n        x -= n;\r\n        return x;\r\n    }\r\n    friend constexpr difference_type operator-(test_contiguous_iterator x, test_contiguous_iterator y) {\r\n        return x.it_ - y.it_;\r\n    }\r\n\r\n    friend constexpr bool operator==(const test_contiguous_iterator& x, const test_contiguous_iterator& y) {\r\n        return x.it_ == y.it_;\r\n    }\r\n    friend constexpr bool operator!=(const test_contiguous_iterator& x, const test_contiguous_iterator& y) {\r\n        return x.it_ != y.it_;\r\n    }\r\n    friend constexpr bool operator<(const test_contiguous_iterator& x, const test_contiguous_iterator& y) {\r\n        return x.it_ < y.it_;\r\n    }\r\n    friend constexpr bool operator<=(const test_contiguous_iterator& x, const test_contiguous_iterator& y) {\r\n        return x.it_ <= y.it_;\r\n    }\r\n    friend constexpr bool operator>(const test_contiguous_iterator& x, const test_contiguous_iterator& y) {\r\n        return x.it_ > y.it_;\r\n    }\r\n    friend constexpr bool operator>=(const test_contiguous_iterator& x, const test_contiguous_iterator& y) {\r\n        return x.it_ >= y.it_;\r\n    }\r\n\r\n    friend constexpr It base(const test_contiguous_iterator& i) {\r\n        return i.it_;\r\n    }\r\n\r\n    template <class T>\r\n    void operator,(T const&) = delete;\r\n};\r\ntemplate <class It>\r\ntest_contiguous_iterator(It) -> test_contiguous_iterator<It>;\r\n\r\n\r\n//\r\n// Char\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_char_default(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    // Note when no range-underlying-spec is present the char is escaped,\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']\"), SV(\"{}\"), input);\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // when one is present there is no escaping,\r\n    check(SV(\"[H, e, l, l, o]\"), SV(\"{::}\"), input);\r\n    check(SV(\"[H, e, l, l, o]\"), SV(\"{::<}\"), input);\r\n    // unless forced by the type specifier.\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']\"), SV(\"{::?}\"), input);\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']\"), SV(\"{::<?}\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']     \"), SV(\"{:30}\"), input);\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']*****\"), SV(\"{:*<30}\"), input);\r\n    check(SV(\"__['H', 'e', 'l', 'l', 'o']___\"), SV(\"{:_^30}\"), input);\r\n    check(SV(\"#####['H', 'e', 'l', 'l', 'o']\"), SV(\"{:#>30}\"), input);\r\n\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']     \"), SV(\"{:{}}\"), input, 30);\r\n    check(SV(\"['H', 'e', 'l', 'l', 'o']*****\"), SV(\"{:*<{}}\"), input, 30);\r\n    check(SV(\"__['H', 'e', 'l', 'l', 'o']___\"), SV(\"{:_^{}}\"), input, 30);\r\n    check(SV(\"#####['H', 'e', 'l', 'l', 'o']\"), SV(\"{:#>{}}\"), input, 30);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__'H', 'e', 'l', 'l', 'o'___\"), SV(\"{:_^28n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"[H   , e   , l   , l   , o   ]\"), SV(\"{::4}\"), input);\r\n    check(SV(\"[H***, e***, l***, l***, o***]\"), SV(\"{::*<4}\"), input);\r\n    check(SV(\"[_H__, _e__, _l__, _l__, _o__]\"), SV(\"{::_^4}\"), input);\r\n    check(SV(\"[:::H, :::e, :::l, :::l, :::o]\"), SV(\"{:::>4}\"), input);\r\n\r\n    check(SV(\"[H   , e   , l   , l   , o   ]\"), SV(\"{::{}}\"), input, 4);\r\n    check(SV(\"[H***, e***, l***, l***, o***]\"), SV(\"{::*<{}}\"), input, 4);\r\n    check(SV(\"[_H__, _e__, _l__, _l__, _o__]\"), SV(\"{::_^{}}\"), input, 4);\r\n    check(SV(\"[:::H, :::e, :::l, :::l, :::o]\"), SV(\"{:::>{}}\"), input, 4);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier for a character does not allow the sign option\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier for a character does not allow the sign option\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier for a character does not allow the sign option\", SV(\"{:: }\"), input);\r\n\r\n    check(SV(\"[72, 101, 108, 108, 111]\"), SV(\"{::-d}\"), input);\r\n    check(SV(\"[+72, +101, +108, +108, +111]\"), SV(\"{::+d}\"), input);\r\n    check(SV(\"[ 72,  101,  108,  108,  111]\"), SV(\"{:: d}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\r\n        \"The format specifier for a character does not allow the alternate form option\", SV(\"{::#}\"), input);\r\n\r\n    check(SV(\"[0x48, 0x65, 0x6c, 0x6c, 0x6f]\"), SV(\"{::#x}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The format specifier for a character does not allow the zero-padding option\", SV(\"{::05}\"), input);\r\n\r\n    check(SV(\"[00110, 00145, 00154, 00154, 00157]\"), SV(\"{::05o}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check(SV(\"[H, e, l, l, o]\"), SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"bBcdoxX?\")) {\r\n        check_exception(\"The type option contains an invalid value for a character formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^[:H, :e, :l, :l, :o]^^^\"), SV(\"{:^^25::>2}\"), input);\r\n    check(SV(\"^^[:H, :e, :l, :l, :o]^^^\"), SV(\"{:^^{}::>2}\"), input, 25);\r\n    check(SV(\"^^[:H, :e, :l, :l, :o]^^^\"), SV(\"{:^^{}::>{}}\"), input, 25, 2);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>2}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 25);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_char_string(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"Hello\"), SV(\"{:s}\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"Hello   \"), SV(\"{:8s}\"), input);\r\n    check(SV(\"Hello***\"), SV(\"{:*<8s}\"), input);\r\n    check(SV(\"_Hello__\"), SV(\"{:_^8s}\"), input);\r\n    check(SV(\"###Hello\"), SV(\"{:#>8s}\"), input);\r\n\r\n    check(SV(\"Hello   \"), SV(\"{:{}s}\"), input, 8);\r\n    check(SV(\"Hello***\"), SV(\"{:*<{}s}\"), input, 8);\r\n    check(SV(\"_Hello__\"), SV(\"{:_^{}s}\"), input, 8);\r\n    check(SV(\"###Hello\"), SV(\"{:#>{}s}\"), input, 8);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<s}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<s}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: s}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#s}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0s}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.s}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:Ls}\"), input);\r\n\r\n    // *** n\r\n    check_exception(\"The n option and type s can't be used together\", SV(\"{:ns}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\r\n        \"The type option contains an invalid value for a character formatting argument\", SV(\"{::<s}\"), input);\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check_exception(\"Type s and an underlying format specification can't be used together\", SV(\"{:s:}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"bBcdoxX?\")) {\r\n        check_exception(\"The type option contains an invalid value for a character formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check_exception(\"Type s and an underlying format specification can't be used together\", SV(\"{:5s:5}\"), input);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_char_escaped_string(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(R\"(\"\\\"Hello'\")\"), SV(\"{:?s}\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(R\"(\"\\\"Hello'\"   )\"), SV(\"{:13?s}\"), input);\r\n    check(SV(R\"(\"\\\"Hello'\"***)\"), SV(\"{:*<13?s}\"), input);\r\n    check(SV(R\"(_\"\\\"Hello'\"__)\"), SV(\"{:_^13?s}\"), input);\r\n    check(SV(R\"(###\"\\\"Hello'\")\"), SV(\"{:#>13?s}\"), input);\r\n\r\n    check(SV(R\"(\"\\\"Hello'\"   )\"), SV(\"{:{}?s}\"), input, 13);\r\n    check(SV(R\"(\"\\\"Hello'\"***)\"), SV(\"{:*<{}?s}\"), input, 13);\r\n    check(SV(R\"(_\"\\\"Hello'\"__)\"), SV(\"{:_^{}?s}\"), input, 13);\r\n    check(SV(R\"(###\"\\\"Hello'\")\"), SV(\"{:#>{}?s}\"), input, 13);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<?s}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<?s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::<?s}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-?s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+?s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: ?s}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#?s}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0?s}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.?s}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L?s}\"), input);\r\n\r\n    // *** n\r\n    check_exception(\"The n option and type ?s can't be used together\", SV(\"{:n?s}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check_exception(\"Type ?s and an underlying format specification can't be used together\", SV(\"{:?s:}\"), input);\r\n\r\n    // ***** Both have a format-spec\r\n    check_exception(\"Type ?s and an underlying format specification can't be used together\", SV(\"{:5?s:5}\"), input);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_char(TestFunction check, ExceptionTest check_exception) {\r\n    test_char_default<CharT>(check, check_exception, array{CharT('H'), CharT('e'), CharT('l'), CharT('l'), CharT('o')});\r\n\r\n    // This tests two different implementations in libc++. A basic_string_view\r\n    // formatter if the range is contiguous, a basic_string otherwise.\r\n    test_char_escaped_string<CharT>(check, check_exception,\r\n        array{CharT('\"'), CharT('H'), CharT('e'), CharT('l'), CharT('l'), CharT('o'), CharT('\\'')});\r\n    test_char_escaped_string<CharT>(check, check_exception,\r\n        list{CharT('\"'), CharT('H'), CharT('e'), CharT('l'), CharT('l'), CharT('o'), CharT('\\'')});\r\n\r\n    // This tests two different implementations in libc++. A basic_string_view\r\n    // formatter if the range is contiguous, a basic_string otherwise.\r\n    test_char_string<CharT>(check, check_exception, array{CharT('H'), CharT('e'), CharT('l'), CharT('l'), CharT('o')});\r\n    test_char_string<CharT>(check, check_exception, list{CharT('H'), CharT('e'), CharT('l'), CharT('l'), CharT('o')});\r\n}\r\n\r\n//\r\n// char -> wchar_t\r\n//\r\n\r\ntemplate <class TestFunction, class ExceptionTest>\r\nvoid test_char_to_wchar(TestFunction check, ExceptionTest check_exception) {\r\n    test_char_default<wchar_t>(check, check_exception, array{'H', 'e', 'l', 'l', 'o'});\r\n\r\n    // The types s and ?s may only be used when using range_formatter<T, charT>\r\n    // where the types T and charT are the same. This means this can't be used for\r\n    // range_formatter<wchar_t, char> even when formatter<wchar_t, char> has a\r\n    // debug-enabled specialization.\r\n\r\n    using CharT = wchar_t;\r\n    check_exception(\r\n        \"Type s requires character type as formatting argument\", SV(\"{:s}\"), array{'H', 'e', 'l', 'l', 'o'});\r\n    check_exception(\r\n        \"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), array{'H', 'e', 'l', 'l', 'o'});\r\n}\r\n\r\n//\r\n// Bool\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_bool(TestFunction check, ExceptionTest check_exception) {\r\n    array input{true, true, false};\r\n\r\n    check(SV(\"[true, true, false]\"), SV(\"{}\"), input);\r\n    check(SV(\"[true, true, false]^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"[true, true, false]^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"[true, true, false]     \"), SV(\"{:24}\"), input);\r\n    check(SV(\"[true, true, false]*****\"), SV(\"{:*<24}\"), input);\r\n    check(SV(\"__[true, true, false]___\"), SV(\"{:_^24}\"), input);\r\n    check(SV(\"#####[true, true, false]\"), SV(\"{:#>24}\"), input);\r\n\r\n    check(SV(\"[true, true, false]     \"), SV(\"{:{}}\"), input, 24);\r\n    check(SV(\"[true, true, false]*****\"), SV(\"{:*<{}}\"), input, 24);\r\n    check(SV(\"__[true, true, false]___\"), SV(\"{:_^{}}\"), input, 24);\r\n    check(SV(\"#####[true, true, false]\"), SV(\"{:#>{}}\"), input, 24);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__true, true, false___\"), SV(\"{:_^22n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"[true   , true   , false  ]\"), SV(\"{::7}\"), input);\r\n    check(SV(\"[true***, true***, false**]\"), SV(\"{::*<7}\"), input);\r\n    check(SV(\"[_true__, _true__, _false_]\"), SV(\"{::_^7}\"), input);\r\n    check(SV(\"[:::true, :::true, ::false]\"), SV(\"{:::>7}\"), input);\r\n\r\n    check(SV(\"[true   , true   , false  ]\"), SV(\"{::{}}\"), input, 7);\r\n    check(SV(\"[true***, true***, false**]\"), SV(\"{::*<{}}\"), input, 7);\r\n    check(SV(\"[_true__, _true__, _false_]\"), SV(\"{::_^{}}\"), input, 7);\r\n    check(SV(\"[:::true, :::true, ::false]\"), SV(\"{:::>{}}\"), input, 7);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier for a bool does not allow the sign option\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier for a bool does not allow the sign option\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier for a bool does not allow the sign option\", SV(\"{:: }\"), input);\r\n\r\n    check(SV(\"[1, 1, 0]\"), SV(\"{::-d}\"), input);\r\n    check(SV(\"[+1, +1, +0]\"), SV(\"{::+d}\"), input);\r\n    check(SV(\"[ 1,  1,  0]\"), SV(\"{:: d}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier for a bool does not allow the alternate form option\", SV(\"{::#}\"), input);\r\n\r\n    check(SV(\"[0x1, 0x1, 0x0]\"), SV(\"{::#x}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The format specifier for a bool does not allow the zero-padding option\", SV(\"{::05}\"), input);\r\n\r\n    check(SV(\"[00001, 00001, 00000]\"), SV(\"{::05o}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check(SV(\"[true, true, false]\"), SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"bBdosxX\")) {\r\n        check_exception(\"The type option contains an invalid value for a bool formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^[:::true, :::true, ::false]^^^\"), SV(\"{:^^32::>7}\"), input);\r\n    check(SV(\"^^[:::true, :::true, ::false]^^^\"), SV(\"{:^^{}::>7}\"), input, 32);\r\n    check(SV(\"^^[:::true, :::true, ::false]^^^\"), SV(\"{:^^{}::>{}}\"), input, 32, 7);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>5}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 32);\r\n}\r\n\r\n//\r\n// Integral\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_int(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"[1, 2, 42, -42]\"), SV(\"{}\"), input);\r\n    check(SV(\"[1, 2, 42, -42]^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"[1, 2, 42, -42]^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"[1, 2, 42, -42]     \"), SV(\"{:20}\"), input);\r\n    check(SV(\"[1, 2, 42, -42]*****\"), SV(\"{:*<20}\"), input);\r\n    check(SV(\"__[1, 2, 42, -42]___\"), SV(\"{:_^20}\"), input);\r\n    check(SV(\"#####[1, 2, 42, -42]\"), SV(\"{:#>20}\"), input);\r\n\r\n    check(SV(\"[1, 2, 42, -42]     \"), SV(\"{:{}}\"), input, 20);\r\n    check(SV(\"[1, 2, 42, -42]*****\"), SV(\"{:*<{}}\"), input, 20);\r\n    check(SV(\"__[1, 2, 42, -42]___\"), SV(\"{:_^{}}\"), input, 20);\r\n    check(SV(\"#####[1, 2, 42, -42]\"), SV(\"{:#>{}}\"), input, 20);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__1, 2, 42, -42___\"), SV(\"{:_^18n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"[    1,     2,    42,   -42]\"), SV(\"{::5}\"), input);\r\n    check(SV(\"[1****, 2****, 42***, -42**]\"), SV(\"{::*<5}\"), input);\r\n    check(SV(\"[__1__, __2__, _42__, _-42_]\"), SV(\"{::_^5}\"), input);\r\n    check(SV(\"[::::1, ::::2, :::42, ::-42]\"), SV(\"{:::>5}\"), input);\r\n\r\n    check(SV(\"[    1,     2,    42,   -42]\"), SV(\"{::{}}\"), input, 5);\r\n    check(SV(\"[1****, 2****, 42***, -42**]\"), SV(\"{::*<{}}\"), input, 5);\r\n    check(SV(\"[__1__, __2__, _42__, _-42_]\"), SV(\"{::_^{}}\"), input, 5);\r\n    check(SV(\"[::::1, ::::2, :::42, ::-42]\"), SV(\"{:::>{}}\"), input, 5);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check(SV(\"[1, 2, 42, -42]\"), SV(\"{::-}\"), input);\r\n    check(SV(\"[+1, +2, +42, -42]\"), SV(\"{::+}\"), input);\r\n    check(SV(\"[ 1,  2,  42, -42]\"), SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check(SV(\"[0x1, 0x2, 0x2a, -0x2a]\"), SV(\"{::#x}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check(SV(\"[00001, 00002, 00042, -0042]\"), SV(\"{::05}\"), input);\r\n    check(SV(\"[00001, 00002, 0002a, -002a]\"), SV(\"{::05x}\"), input);\r\n    check(SV(\"[0x001, 0x002, 0x02a, -0x2a]\"), SV(\"{::#05x}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check(SV(\"[1, 2, 42, -42]\"), SV(\"{::L}\"), input); // does nothing in this test, but is accepted.\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"bBcdoxX\")) {\r\n        check_exception(\"The type option contains an invalid value for an integer formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^[::::1, ::::2, :::42, ::-42]^^^\"), SV(\"{:^^33::>5}\"), input);\r\n    check(SV(\"^^[::::1, ::::2, :::42, ::-42]^^^\"), SV(\"{:^^{}::>5}\"), input, 33);\r\n    check(SV(\"^^[::::1, ::::2, :::42, ::-42]^^^\"), SV(\"{:^^{}::>{}}\"), input, 33, 5);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>5}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 33);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_int(TestFunction check, ExceptionTest check_exception) {\r\n    test_int<CharT>(check, check_exception, array{1, 2, 42, -42});\r\n    test_int<CharT>(check, check_exception, list{1, 2, 42, -42});\r\n    test_int<CharT>(check, check_exception, vector{1, 2, 42, -42});\r\n    array input{1, 2, 42, -42};\r\n    test_int<CharT>(check, check_exception, span{input});\r\n}\r\n\r\n//\r\n// Floating point\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_floating_point(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]\"), SV(\"{}\"), input);\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]     \"), SV(\"{:27}\"), input);\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]*****\"), SV(\"{:*<27}\"), input);\r\n    check(SV(\"__[-42.5, 0, 1.25, 42.5]___\"), SV(\"{:_^27}\"), input);\r\n    check(SV(\"#####[-42.5, 0, 1.25, 42.5]\"), SV(\"{:#>27}\"), input);\r\n\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]     \"), SV(\"{:{}}\"), input, 27);\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]*****\"), SV(\"{:*<{}}\"), input, 27);\r\n    check(SV(\"__[-42.5, 0, 1.25, 42.5]___\"), SV(\"{:_^{}}\"), input, 27);\r\n    check(SV(\"#####[-42.5, 0, 1.25, 42.5]\"), SV(\"{:#>{}}\"), input, 27);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__-42.5, 0, 1.25, 42.5___\"), SV(\"{:_^25n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"[-42.5,     0,  1.25,  42.5]\"), SV(\"{::5}\"), input);\r\n    check(SV(\"[-42.5, 0****, 1.25*, 42.5*]\"), SV(\"{::*<5}\"), input);\r\n    check(SV(\"[-42.5, __0__, 1.25_, 42.5_]\"), SV(\"{::_^5}\"), input);\r\n    check(SV(\"[-42.5, ::::0, :1.25, :42.5]\"), SV(\"{:::>5}\"), input);\r\n\r\n    check(SV(\"[-42.5,     0,  1.25,  42.5]\"), SV(\"{::{}}\"), input, 5);\r\n    check(SV(\"[-42.5, 0****, 1.25*, 42.5*]\"), SV(\"{::*<{}}\"), input, 5);\r\n    check(SV(\"[-42.5, __0__, 1.25_, 42.5_]\"), SV(\"{::_^{}}\"), input, 5);\r\n    check(SV(\"[-42.5, ::::0, :1.25, :42.5]\"), SV(\"{:::>{}}\"), input, 5);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]\"), SV(\"{::-}\"), input);\r\n    check(SV(\"[-42.5, +0, +1.25, +42.5]\"), SV(\"{::+}\"), input);\r\n    check(SV(\"[-42.5,  0,  1.25,  42.5]\"), SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check(SV(\"[-42.5, 0., 1.25, 42.5]\"), SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check(SV(\"[-42.5, 00000, 01.25, 042.5]\"), SV(\"{::05}\"), input);\r\n    check(SV(\"[-42.5, 0000., 01.25, 042.5]\"), SV(\"{::#05}\"), input);\r\n\r\n    // *** precision ***\r\n    check(SV(\"[-42, 0, 1.2, 42]\"), SV(\"{::.2}\"), input);\r\n    check(SV(\"[-42.500, 0.000, 1.250, 42.500]\"), SV(\"{::.3f}\"), input);\r\n\r\n    check(SV(\"[-42, 0, 1.2, 42]\"), SV(\"{::.{}}\"), input, 2);\r\n    check(SV(\"[-42.500, 0.000, 1.250, 42.500]\"), SV(\"{::.{}f}\"), input, 3);\r\n\r\n    check_exception(\"The precision option does not contain a value or an argument index\", SV(\"{::.}\"), input);\r\n\r\n#if !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n    // *** locale-specific form ***\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]\"), SV(\"{::L}\"), input); // does not require locales present\r\n\r\n    locale::global(locale(\"fr-FR\"));\r\n    check(SV(\"[-42,5, 0, 1,25, 42,5]\"), SV(\"{::L}\"), input);\r\n\r\n    locale::global(locale(\"en-US\"));\r\n    check(SV(\"[-42.5, 0, 1.25, 42.5]\"), SV(\"{::L}\"), input);\r\n\r\n    locale::global(locale::classic());\r\n#endif // !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"aAeEfFgG\")) {\r\n        check_exception(\r\n            \"The type option contains an invalid value for a floating-point formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^[-42.5, ::::0, :1.25, :42.5]^^^\"), SV(\"{:^^33::>5}\"), input);\r\n    check(SV(\"^^[-42.5, ::::0, :1.25, :42.5]^^^\"), SV(\"{:^^{}::>5}\"), input, 33);\r\n    check(SV(\"^^[-42.5, ::::0, :1.25, :42.5]^^^\"), SV(\"{:^^{}::>{}}\"), input, 33, 5);\r\n\r\n    check(SV(\"^^[::-42, ::::0, ::1.2, :::42]^^^\"), SV(\"{:^^33::>5.2}\"), input);\r\n    check(SV(\"^^[::-42, ::::0, ::1.2, :::42]^^^\"), SV(\"{:^^{}::>5.2}\"), input, 33);\r\n    check(SV(\"^^[::-42, ::::0, ::1.2, :::42]^^^\"), SV(\"{:^^{}::>{}.2}\"), input, 33, 5);\r\n    check(SV(\"^^[::-42, ::::0, ::1.2, :::42]^^^\"), SV(\"{:^^{}::>{}.{}}\"), input, 33, 5, 2);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>5.2}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}.2}\"), input, 33);\r\n    check_exception(\"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}.{}}\"),\r\n        input, 33, 5);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_floating_point(TestFunction check, ExceptionTest check_exception) {\r\n    test_floating_point<CharT>(check, check_exception, array{-42.5f, 0.0f, 1.25f, 42.5f});\r\n    test_floating_point<CharT>(check, check_exception, vector{-42.5, 0.0, 1.25, 42.5});\r\n\r\n    array input{-42.5l, 0.0l, 1.25l, 42.5l};\r\n    test_floating_point<CharT>(check, check_exception, span{input});\r\n}\r\n\r\n//\r\n// Pointer\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_pointer(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"[0x0]\"), SV(\"{}\"), input);\r\n    check(SV(\"[0x0]^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"[0x0]^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"[0x0]     \"), SV(\"{:10}\"), input);\r\n    check(SV(\"[0x0]*****\"), SV(\"{:*<10}\"), input);\r\n    check(SV(\"__[0x0]___\"), SV(\"{:_^10}\"), input);\r\n    check(SV(\"#####[0x0]\"), SV(\"{:#>10}\"), input);\r\n\r\n    check(SV(\"[0x0]     \"), SV(\"{:{}}\"), input, 10);\r\n    check(SV(\"[0x0]*****\"), SV(\"{:*<{}}\"), input, 10);\r\n    check(SV(\"__[0x0]___\"), SV(\"{:_^{}}\"), input, 10);\r\n    check(SV(\"#####[0x0]\"), SV(\"{:#>{}}\"), input, 10);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"_0x0_\"), SV(\"{:_^5n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"[  0x0]\"), SV(\"{::5}\"), input);\r\n    check(SV(\"[0x0**]\"), SV(\"{::*<5}\"), input);\r\n    check(SV(\"[_0x0_]\"), SV(\"{::_^5}\"), input);\r\n    check(SV(\"[::0x0]\"), SV(\"{:::>5}\"), input);\r\n\r\n    check(SV(\"[  0x0]\"), SV(\"{::{}}\"), input, 5);\r\n    check(SV(\"[0x0**]\"), SV(\"{::*<{}}\"), input, 5);\r\n    check(SV(\"[_0x0_]\"), SV(\"{::_^{}}\"), input, 5);\r\n    check(SV(\"[::0x0]\"), SV(\"{:::>{}}\"), input, 5);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check(SV(\"[0x0000]\"), SV(\"{::06}\"), input);\r\n    check(SV(\"[0x0000]\"), SV(\"{::06p}\"), input);\r\n    check(SV(\"[0X0000]\"), SV(\"{::06P}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"pP\")) {\r\n        check_exception(\"The type option contains an invalid value for a pointer formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^[::0x0]^^^\"), SV(\"{:^^12::>5}\"), input);\r\n    check(SV(\"^^[::0x0]^^^\"), SV(\"{:^^{}::>5}\"), input, 12);\r\n    check(SV(\"^^[::0x0]^^^\"), SV(\"{:^^{}::>{}}\"), input, 12, 5);\r\n\r\n    check(SV(\"^^[::0x0]^^^\"), SV(\"{:^^12::>5}\"), input);\r\n    check(SV(\"^^[::0x0]^^^\"), SV(\"{:^^{}::>5}\"), input, 12);\r\n    check(SV(\"^^[::0x0]^^^\"), SV(\"{:^^{}::>{}}\"), input, 12, 5);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>5}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 12);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_pointer(TestFunction check, ExceptionTest check_exception) {\r\n    test_pointer<CharT>(check, check_exception, array{nullptr});\r\n    test_pointer<CharT>(check, check_exception, array{static_cast<const void*>(nullptr)});\r\n    test_pointer<CharT>(check, check_exception, array{static_cast<void*>(nullptr)});\r\n}\r\n\r\n//\r\n// String\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_string(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(R\"([\"Hello\", \"world\"])\"), SV(\"{}\"), input);\r\n    check(SV(R\"([\"Hello\", \"world\"]^42)\"), SV(\"{}^42\"), input);\r\n    check(SV(R\"([\"Hello\", \"world\"]^42)\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(R\"([\"Hello\", \"world\"]     )\"), SV(\"{:23}\"), input);\r\n    check(SV(R\"([\"Hello\", \"world\"]*****)\"), SV(\"{:*<23}\"), input);\r\n    check(SV(R\"(__[\"Hello\", \"world\"]___)\"), SV(\"{:_^23}\"), input);\r\n    check(SV(R\"(#####[\"Hello\", \"world\"])\"), SV(\"{:#>23}\"), input);\r\n\r\n    check(SV(R\"([\"Hello\", \"world\"]     )\"), SV(\"{:{}}\"), input, 23);\r\n    check(SV(R\"([\"Hello\", \"world\"]*****)\"), SV(\"{:*<{}}\"), input, 23);\r\n    check(SV(R\"(__[\"Hello\", \"world\"]___)\"), SV(\"{:_^{}}\"), input, 23);\r\n    check(SV(R\"(#####[\"Hello\", \"world\"])\"), SV(\"{:#>{}}\"), input, 23);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(R\"(_\"Hello\", \"world\"_)\"), SV(\"{:_^18n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(R\"([Hello   , world   ])\"), SV(\"{::8}\"), input);\r\n    check(SV(R\"([Hello***, world***])\"), SV(\"{::*<8}\"), input);\r\n    check(SV(R\"([_Hello__, _world__])\"), SV(\"{::_^8}\"), input);\r\n    check(SV(R\"([:::Hello, :::world])\"), SV(\"{:::>8}\"), input);\r\n\r\n    check(SV(R\"([Hello   , world   ])\"), SV(\"{::{}}\"), input, 8);\r\n    check(SV(R\"([Hello***, world***])\"), SV(\"{::*<{}}\"), input, 8);\r\n    check(SV(R\"([_Hello__, _world__])\"), SV(\"{::_^{}}\"), input, 8);\r\n    check(SV(R\"([:::Hello, :::world])\"), SV(\"{:::>{}}\"), input, 8);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check(SV(R\"([Hel, wor])\"), SV(\"{::.3}\"), input);\r\n\r\n    check(SV(R\"([Hel, wor])\"), SV(\"{::.{}}\"), input, 3);\r\n\r\n    check_exception(\"The precision option does not contain a value or an argument index\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"s?\")) {\r\n        check_exception(\"The type option contains an invalid value for a string formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^25::>8}\"), input);\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^{}::>8}\"), input, 25);\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^{}::>{}}\"), input, 25, 8);\r\n\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^25::>8}\"), input);\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^{}::>8}\"), input, 25);\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^{}::>{}}\"), input, 25, 8);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>8}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 25);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_string(TestFunction check, ExceptionTest check_exception) {\r\n    test_string<CharT>(check, check_exception, array{CSTR(\"Hello\"), CSTR(\"world\")});\r\n    test_string<CharT>(check, check_exception, array{STR(\"Hello\"), STR(\"world\")});\r\n    test_string<CharT>(check, check_exception, array{SV(\"Hello\"), SV(\"world\")});\r\n}\r\n\r\n//\r\n// Handle\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_status(TestFunction check, ExceptionTest check_exception) {\r\n    array input{status::foo, status::bar, status::foobar};\r\n\r\n    check(SV(\"[0xaaaa, 0x5555, 0xaa55]\"), SV(\"{}\"), input);\r\n    check(SV(\"[0xaaaa, 0x5555, 0xaa55]^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"[0xaaaa, 0x5555, 0xaa55]^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"[0xaaaa, 0x5555, 0xaa55]     \"), SV(\"{:29}\"), input);\r\n    check(SV(\"[0xaaaa, 0x5555, 0xaa55]*****\"), SV(\"{:*<29}\"), input);\r\n    check(SV(\"__[0xaaaa, 0x5555, 0xaa55]___\"), SV(\"{:_^29}\"), input);\r\n    check(SV(\"#####[0xaaaa, 0x5555, 0xaa55]\"), SV(\"{:#>29}\"), input);\r\n\r\n    check(SV(\"[0xaaaa, 0x5555, 0xaa55]     \"), SV(\"{:{}}\"), input, 29);\r\n    check(SV(\"[0xaaaa, 0x5555, 0xaa55]*****\"), SV(\"{:*<{}}\"), input, 29);\r\n    check(SV(\"__[0xaaaa, 0x5555, 0xaa55]___\"), SV(\"{:_^{}}\"), input, 29);\r\n    check(SV(\"#####[0xaaaa, 0x5555, 0xaa55]\"), SV(\"{:#>{}}\"), input, 29);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__0xaaaa, 0x5555, 0xaa55___\"), SV(\"{:_^27n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check_exception(\"The type option contains an invalid value for a status formatting argument\", SV(\"{::*<7}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"sxX\")) {\r\n        check_exception(\"The type option contains an invalid value for a status formatting argument\", fmt, input);\r\n    }\r\n\r\n    check(SV(\"[0xaaaa, 0x5555, 0xaa55]\"), SV(\"{::x}\"), input);\r\n    check(SV(\"[0XAAAA, 0X5555, 0XAA55]\"), SV(\"{::X}\"), input);\r\n    check(SV(\"[foo, bar, foobar]\"), SV(\"{::s}\"), input);\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^[0XAAAA, 0X5555, 0XAA55]^^^\"), SV(\"{:^^29:X}\"), input);\r\n    check(SV(\"^^[0XAAAA, 0X5555, 0XAA55]^^^\"), SV(\"{:^^{}:X}\"), input, 29);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:X}\"), input);\r\n}\r\n\r\n//\r\n// Pair\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_pair_tuple(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    // [format.range.formatter]/3\r\n    //   For range_formatter<T, charT>, the format-spec in a\r\n    //   range-underlying-spec, if any, is interpreted by formatter<T, charT>.\r\n    //\r\n    //   template<class ParseContext>\r\n    //   constexpr typename ParseContext::iterator\r\n    //    parse(ParseContext& ctx);\r\n    // [format.tuple]/7\r\n    //   ... if e.set_debug_format() is a valid expression, calls\r\n    //   e.set_debug_format().\r\n    // So when there is no range-underlying-spec, there is no need to call parse\r\n    // thus the char element is not escaped.\r\n    // TODO FMT P2733 addresses this issue.\r\n    check(SV(\"[(1, 'a'), (42, '*')]\"), SV(\"{}\"), input);\r\n    check(SV(\"[(1, 'a'), (42, '*')]^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"[(1, 'a'), (42, '*')]^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"[(1, 'a'), (42, '*')]     \"), SV(\"{:26}\"), input);\r\n    check(SV(\"[(1, 'a'), (42, '*')]*****\"), SV(\"{:*<26}\"), input);\r\n    check(SV(\"__[(1, 'a'), (42, '*')]___\"), SV(\"{:_^26}\"), input);\r\n    check(SV(\"#####[(1, 'a'), (42, '*')]\"), SV(\"{:#>26}\"), input);\r\n\r\n    check(SV(\"[(1, 'a'), (42, '*')]     \"), SV(\"{:{}}\"), input, 26);\r\n    check(SV(\"[(1, 'a'), (42, '*')]*****\"), SV(\"{:*<{}}\"), input, 26);\r\n    check(SV(\"__[(1, 'a'), (42, '*')]___\"), SV(\"{:_^{}}\"), input, 26);\r\n    check(SV(\"#####[(1, 'a'), (42, '*')]\"), SV(\"{:#>{}}\"), input, 26);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__(1, 'a'), (42, '*')___\"), SV(\"{:_^24n}\"), input);\r\n    check(SV(\"____1: 'a', 42: '*'_____\"), SV(\"{:_^24nm}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"____{1: 'a', 42: '*'}_____\"), SV(\"{:_^26m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"[(1, 'a')   , (42, '*')  ]\"), SV(\"{::11}\"), input);\r\n    check(SV(\"[(1, 'a')***, (42, '*')**]\"), SV(\"{::*<11}\"), input);\r\n    check(SV(\"[_(1, 'a')__, _(42, '*')_]\"), SV(\"{::_^11}\"), input);\r\n    check(SV(\"[###(1, 'a'), ##(42, '*')]\"), SV(\"{::#>11}\"), input);\r\n\r\n    check(SV(\"[(1, 'a')   , (42, '*')  ]\"), SV(\"{::{}}\"), input, 11);\r\n    check(SV(\"[(1, 'a')***, (42, '*')**]\"), SV(\"{::*<{}}\"), input, 11);\r\n    check(SV(\"[_(1, 'a')__, _(42, '*')_]\"), SV(\"{::_^{}}\"), input, 11);\r\n    check(SV(\"[###(1, 'a'), ##(42, '*')]\"), SV(\"{::#>{}}\"), input, 11);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"[1: 'a', 42: '*']\"), SV(\"{::m}\"), input);\r\n    check(SV(\"[1, 'a', 42, '*']\"), SV(\"{::n}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^[###(1, 'a'), ##(42, '*')]^^^\"), SV(\"{:^^31:#>11}\"), input);\r\n    check(SV(\"^^[###(1, 'a'), ##(42, '*')]^^^\"), SV(\"{:^^31:#>11}\"), input);\r\n    check(SV(\"^^[###(1, 'a'), ##(42, '*')]^^^\"), SV(\"{:^^{}:#>11}\"), input, 31);\r\n    check(SV(\"^^[###(1, 'a'), ##(42, '*')]^^^\"), SV(\"{:^^{}:#>{}}\"), input, 31, 11);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>5}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>{}}\"), input, 31);\r\n\r\n    check(SV(\"1: 'a', 42: '*'\"), SV(\"{:n:m}\"), input);\r\n    check(SV(\"1, 'a', 42, '*'\"), SV(\"{:n:n}\"), input);\r\n    check(SV(\"{1: 'a', 42: '*'}\"), SV(\"{:m:m}\"), input);\r\n    check(SV(\"{1: 'a', 42: '*'}\"), SV(\"{:m:n}\"), input);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_pair_tuple(TestFunction check, ExceptionTest check_exception) {\r\n    test_pair_tuple<CharT>(check, check_exception, array{make_pair(1, CharT('a')), make_pair(42, CharT('*'))});\r\n    test_pair_tuple<CharT>(check, check_exception, array{make_tuple(1, CharT('a')), make_tuple(42, CharT('*'))});\r\n}\r\n\r\n//\r\n// Tuple 1\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_tuple_int(TestFunction check, ExceptionTest check_exception) {\r\n    array input{make_tuple(42), make_tuple(99)};\r\n\r\n    check(SV(\"[(42), (99)]\"), SV(\"{}\"), input);\r\n    check(SV(\"[(42), (99)]^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"[(42), (99)]^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"[(42), (99)]     \"), SV(\"{:17}\"), input);\r\n    check(SV(\"[(42), (99)]*****\"), SV(\"{:*<17}\"), input);\r\n    check(SV(\"__[(42), (99)]___\"), SV(\"{:_^17}\"), input);\r\n    check(SV(\"#####[(42), (99)]\"), SV(\"{:#>17}\"), input);\r\n\r\n    check(SV(\"[(42), (99)]     \"), SV(\"{:{}}\"), input, 17);\r\n    check(SV(\"[(42), (99)]*****\"), SV(\"{:*<{}}\"), input, 17);\r\n    check(SV(\"__[(42), (99)]___\"), SV(\"{:_^{}}\"), input, 17);\r\n    check(SV(\"#####[(42), (99)]\"), SV(\"{:#>{}}\"), input, 17);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__(42), (99)___\"), SV(\"{:_^15n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"[(42)   , (99)   ]\"), SV(\"{::7}\"), input);\r\n    check(SV(\"[(42)***, (99)***]\"), SV(\"{::*<7}\"), input);\r\n    check(SV(\"[_(42)__, _(99)__]\"), SV(\"{::_^7}\"), input);\r\n    check(SV(\"[###(42), ###(99)]\"), SV(\"{::#>7}\"), input);\r\n\r\n    check(SV(\"[(42)   , (99)   ]\"), SV(\"{::{}}\"), input, 7);\r\n    check(SV(\"[(42)***, (99)***]\"), SV(\"{::*<{}}\"), input, 7);\r\n    check(SV(\"[_(42)__, _(99)__]\"), SV(\"{::_^{}}\"), input, 7);\r\n    check(SV(\"[###(42), ###(99)]\"), SV(\"{::#>{}}\"), input, 7);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"[42, 99]\"), SV(\"{::n}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^[###(42), ###(99)]^^^\"), SV(\"{:^^23:#>7}\"), input);\r\n    check(SV(\"^^[###(42), ###(99)]^^^\"), SV(\"{:^^23:#>7}\"), input);\r\n    check(SV(\"^^[###(42), ###(99)]^^^\"), SV(\"{:^^{}:#>7}\"), input, 23);\r\n    check(SV(\"^^[###(42), ###(99)]^^^\"), SV(\"{:^^{}:#>{}}\"), input, 23, 7);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>5}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>{}}\"), input, 23);\r\n}\r\n\r\n//\r\n// Tuple 3\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_tuple_int_int_int(TestFunction check, ExceptionTest check_exception) {\r\n    array input{make_tuple(42, 99, 0), make_tuple(1, 10, 100)};\r\n\r\n    check(SV(\"[(42, 99, 0), (1, 10, 100)]\"), SV(\"{}\"), input);\r\n    check(SV(\"[(42, 99, 0), (1, 10, 100)]^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"[(42, 99, 0), (1, 10, 100)]^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"[(42, 99, 0), (1, 10, 100)]     \"), SV(\"{:32}\"), input);\r\n    check(SV(\"[(42, 99, 0), (1, 10, 100)]*****\"), SV(\"{:*<32}\"), input);\r\n    check(SV(\"__[(42, 99, 0), (1, 10, 100)]___\"), SV(\"{:_^32}\"), input);\r\n    check(SV(\"#####[(42, 99, 0), (1, 10, 100)]\"), SV(\"{:#>32}\"), input);\r\n\r\n    check(SV(\"[(42, 99, 0), (1, 10, 100)]     \"), SV(\"{:{}}\"), input, 32);\r\n    check(SV(\"[(42, 99, 0), (1, 10, 100)]*****\"), SV(\"{:*<{}}\"), input, 32);\r\n    check(SV(\"__[(42, 99, 0), (1, 10, 100)]___\"), SV(\"{:_^{}}\"), input, 32);\r\n    check(SV(\"#####[(42, 99, 0), (1, 10, 100)]\"), SV(\"{:#>{}}\"), input, 32);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__(42, 99, 0), (1, 10, 100)___\"), SV(\"{:_^30n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"[(42, 99, 0)   , (1, 10, 100)  ]\"), SV(\"{::14}\"), input);\r\n    check(SV(\"[(42, 99, 0)***, (1, 10, 100)**]\"), SV(\"{::*<14}\"), input);\r\n    check(SV(\"[_(42, 99, 0)__, _(1, 10, 100)_]\"), SV(\"{::_^14}\"), input);\r\n    check(SV(\"[###(42, 99, 0), ##(1, 10, 100)]\"), SV(\"{::#>14}\"), input);\r\n\r\n    check(SV(\"[(42, 99, 0)   , (1, 10, 100)  ]\"), SV(\"{::{}}\"), input, 14);\r\n    check(SV(\"[(42, 99, 0)***, (1, 10, 100)**]\"), SV(\"{::*<{}}\"), input, 14);\r\n    check(SV(\"[_(42, 99, 0)__, _(1, 10, 100)_]\"), SV(\"{::_^{}}\"), input, 14);\r\n    check(SV(\"[###(42, 99, 0), ##(1, 10, 100)]\"), SV(\"{::#>{}}\"), input, 14);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"[42, 99, 0, 1, 10, 100]\"), SV(\"{::n}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^[###(42, 99, 0), ##(1, 10, 100)]^^^\"), SV(\"{:^^37:#>14}\"), input);\r\n    check(SV(\"^^[###(42, 99, 0), ##(1, 10, 100)]^^^\"), SV(\"{:^^37:#>14}\"), input);\r\n    check(SV(\"^^[###(42, 99, 0), ##(1, 10, 100)]^^^\"), SV(\"{:^^{}:#>14}\"), input, 37);\r\n    check(SV(\"^^[###(42, 99, 0), ##(1, 10, 100)]^^^\"), SV(\"{:^^{}:#>{}}\"), input, 37, 14);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>5}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>{}}\"), input, 37);\r\n}\r\n\r\n//\r\n// Ranges\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_with_ranges(TestFunction check, ExceptionTest check_exception, auto&& iter) {\r\n    ranges::subrange range{move(iter), default_sentinel};\r\n    test_int<CharT>(check, check_exception, move(range));\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_with_ranges(TestFunction check, ExceptionTest check_exception) {\r\n    array input{1, 2, 42, -42};\r\n    test_with_ranges<CharT>(check, check_exception,\r\n        counted_iterator{test_cpp20_input_iterator<int*>(input.data()), static_cast<ptrdiff_t>(input.size())});\r\n    test_with_ranges<CharT>(check, check_exception,\r\n        counted_iterator{test_forward_iterator<int*>(input.data()), static_cast<ptrdiff_t>(input.size())});\r\n    test_with_ranges<CharT>(check, check_exception,\r\n        counted_iterator{test_bidirectional_iterator<int*>(input.data()), static_cast<ptrdiff_t>(input.size())});\r\n    test_with_ranges<CharT>(check, check_exception,\r\n        counted_iterator{test_random_access_iterator<int*>(input.data()), static_cast<ptrdiff_t>(input.size())});\r\n    test_with_ranges<CharT>(check, check_exception,\r\n        counted_iterator{test_contiguous_iterator<int*>(input.data()), static_cast<ptrdiff_t>(input.size())});\r\n}\r\n\r\n//\r\n// Adaptor\r\n//\r\n\r\ntemplate <class CharT>\r\nclass non_contiguous {\r\n    // A deque iterator is random access, but not contiguous.\r\n    using adaptee = deque<CharT>;\r\n\r\npublic:\r\n    using iterator = adaptee::iterator;\r\n    using pointer  = adaptee::pointer;\r\n\r\n    iterator begin() {\r\n        return data_.begin();\r\n    }\r\n    iterator end() {\r\n        return data_.end();\r\n    }\r\n\r\n    explicit non_contiguous(adaptee&& data) : data_(move(data)) {}\r\n\r\nprivate:\r\n    adaptee data_;\r\n};\r\n\r\ntemplate <class CharT>\r\nclass contiguous {\r\n    // A vector iterator is contiguous.\r\n    using adaptee = vector<CharT>;\r\n\r\npublic:\r\n    using iterator = adaptee::iterator;\r\n    using pointer  = adaptee::pointer;\r\n\r\n    iterator begin() {\r\n        return data_.begin();\r\n    }\r\n    iterator end() {\r\n        return data_.end();\r\n    }\r\n\r\n    explicit contiguous(adaptee&& data) : data_(move(data)) {}\r\n\r\nprivate:\r\n    adaptee data_;\r\n};\r\n\r\n// This tests two different implementations in libc++. A basic_string_view\r\n// formatter if the range is contiguous, a basic_string otherwise.\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_adaptor(TestFunction check, ExceptionTest check_exception) {\r\n    static_assert(format_kind<non_contiguous<CharT>> == range_format::sequence);\r\n    static_assert(ranges::sized_range<non_contiguous<CharT>>);\r\n    static_assert(!ranges::contiguous_range<non_contiguous<CharT>>);\r\n    test_char_string<CharT>(check, check_exception,\r\n        non_contiguous<CharT>{deque{CharT('H'), CharT('e'), CharT('l'), CharT('l'), CharT('o')}});\r\n\r\n    static_assert(format_kind<contiguous<CharT>> == range_format::sequence);\r\n    static_assert(ranges::sized_range<contiguous<CharT>>);\r\n    static_assert(ranges::contiguous_range<contiguous<CharT>>);\r\n    test_char_string<CharT>(\r\n        check, check_exception, contiguous<CharT>{vector{CharT('H'), CharT('e'), CharT('l'), CharT('l'), CharT('o')}});\r\n}\r\n\r\n//\r\n// Driver\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid format_tests(TestFunction check, ExceptionTest check_exception) {\r\n    test_char<CharT>(check, check_exception);\r\n    if (same_as<CharT, wchar_t>) { // avoid testing twice\r\n        test_char_to_wchar(check, check_exception);\r\n    }\r\n    test_bool<CharT>(check, check_exception);\r\n    test_int<CharT>(check, check_exception);\r\n    test_floating_point<CharT>(check, check_exception);\r\n    test_pointer<CharT>(check, check_exception);\r\n    test_string<CharT>(check, check_exception);\r\n\r\n    test_status<CharT>(check, check_exception); // Has its own handler with its own parser\r\n\r\n    test_pair_tuple<CharT>(check, check_exception);\r\n    test_tuple_int<CharT>(check, check_exception);\r\n    test_tuple_int_int_int<CharT>(check, check_exception);\r\n\r\n    if constexpr (!is_permissive_v<CharT>) {\r\n        test_with_ranges<CharT>(check, check_exception);\r\n    }\r\n\r\n    test_adaptor<CharT>(check, check_exception);\r\n}\r\n\r\nauto test_format = []<class CharT, class... Args>(basic_string_view<CharT> expected,\r\n                       type_identity_t<basic_format_string<CharT, Args...>> fmt, Args&&... args) {\r\n    basic_string<CharT> out = format(fmt, forward<Args>(args)...);\r\n    assert(out == expected);\r\n};\r\n\r\nauto test_format_exception = []<class CharT, class... Args>(string_view, basic_string_view<CharT>, Args&&...) {\r\n    // After P2216 most exceptions thrown by format become ill-formed.\r\n    // Therefore this test does nothing.\r\n};\r\n\r\nauto test_vformat = []<class CharT, class... Args>(\r\n                        basic_string_view<CharT> expected, basic_string_view<CharT> fmt, Args&&... args) {\r\n    basic_string<CharT> out = vformat(fmt, make_format_args<context_t<CharT>>(args...));\r\n    assert(out == expected);\r\n};\r\n\r\nauto test_vformat_exception = []<class CharT, class... Args>([[maybe_unused]] string_view what,\r\n                                  [[maybe_unused]] basic_string_view<CharT> fmt, [[maybe_unused]] Args&&... args) {\r\n    try {\r\n        static_cast<void>(vformat(fmt, make_format_args<context_t<CharT>>(args...)));\r\n        assert(false);\r\n    } catch (const format_error&) {\r\n    } catch (...) {\r\n        assert(false);\r\n    }\r\n};\r\n\r\nint main() {\r\n    format_tests<char>(test_format, test_format_exception);\r\n    format_tests<wchar_t>(test_format, test_format_exception);\r\n\r\n    format_tests<char>(test_vformat, test_vformat_exception);\r\n    format_tests<wchar_t>(test_vformat, test_vformat_exception);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_range_set/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_range_set/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n// derived from libc++'s test files:\r\n// * support/format.functions.common.h\r\n// * std/utilities/format/format.range/format.range.fmtset/format.functions.tests.h\r\n// * std/utilities/format/format.range/format.range.fmtset/format.functions.format.pass.cpp\r\n// * std/utilities/format/format.range/format.range.fmtset/format.functions.vformat.pass.cpp\r\n\r\n#include <algorithm>\r\n#include <charconv>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <cstring>\r\n#include <flat_set>\r\n#include <format>\r\n#include <iterator>\r\n#include <ranges>\r\n#include <set>\r\n#include <string>\r\n#include <string_view>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <is_permissive.hpp>\r\n#include <test_format_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n#define CSTR(Str) TYPED_LITERAL(CharT, Str)\r\n#define STR(Str)  basic_string(CSTR(Str))\r\n#define SV(Str)   basic_string_view(CSTR(Str))\r\n\r\nnamespace detail {\r\n    consteval string_view get_format_types() noexcept {\r\n        return \"aAbBcdeEfFgGopPsxX?\";\r\n    }\r\n\r\n    template <class CharT, size_t N>\r\n    basic_string<CharT> get_colons() {\r\n        return basic_string<CharT>(N, CharT(':'));\r\n    }\r\n\r\n    template <class CharT, /*format_types types,*/ size_t N>\r\n    vector<basic_string<CharT>> fmt_invalid_types(string_view valid) {\r\n        vector<basic_string<CharT>> result;\r\n        if constexpr (is_permissive_v<CharT>) {\r\n            for (const char c : get_format_types()) {\r\n                if (valid.find(c) == string_view::npos) {\r\n                    result.push_back(format(SV(\"{{{}{}}}\"), get_colons<CharT, N>(), c));\r\n                }\r\n            }\r\n        } else {\r\n            // ranges::to is not available in C++20.\r\n            ranges::copy(get_format_types() | views::filter([&](char type) {\r\n                return valid.find(type) == string_view::npos;\r\n            }) | views::transform([&](char type) { return format(SV(\"{{{}{}}}\"), get_colons<CharT, N>(), type); }),\r\n                back_inserter(result));\r\n        }\r\n        return result;\r\n    }\r\n} // namespace detail\r\n\r\n// Creates format string for the invalid types.\r\n//\r\n// valid contains a list of types that are valid.\r\n//\r\n// The return value is a collection of basic_strings, instead of\r\n// basic_string_views since the values are temporaries.\r\ntemplate <class CharT>\r\nvector<basic_string<CharT>> fmt_invalid_types(string_view valid) {\r\n    return detail::fmt_invalid_types<CharT, 1>(valid);\r\n}\r\n\r\n// Like fmt_invalid_types but when the format spec is for an underlying formatter.\r\ntemplate <class CharT>\r\nvector<basic_string<CharT>> fmt_invalid_nested_types(string_view valid) {\r\n    return detail::fmt_invalid_types<CharT, 2>(valid);\r\n}\r\n\r\ntemplate <class T>\r\nstruct context {};\r\n\r\ntemplate <>\r\nstruct context<char> {\r\n    using type = format_context;\r\n};\r\n\r\ntemplate <>\r\nstruct context<wchar_t> {\r\n    using type = wformat_context;\r\n};\r\n\r\ntemplate <class T>\r\nusing context_t = context<T>::type;\r\n\r\n// A user-defined type used to test the handle formatter.\r\nenum class status : uint16_t { foo = 0xAAAA, bar = 0x5555, foobar = 0xAA55 };\r\n\r\n// The formatter for a user-defined type used to test the handle formatter.\r\ntemplate <class CharT>\r\nstruct formatter<status, CharT> {\r\n    // During the 2023 Issaquah meeting LEWG made it clear a formatter is\r\n    // required to call its parse function. LWG3892 Adds the wording for that\r\n    // requirement. Therefore this formatter is initialized in an invalid state.\r\n    // A call to parse sets it in a valid state and a call to format validates\r\n    // the state.\r\n    int type = -1;\r\n\r\n    constexpr auto parse(basic_format_parse_context<CharT>& parse_ctx) -> decltype(parse_ctx.begin()) {\r\n        auto begin = parse_ctx.begin();\r\n        auto end   = parse_ctx.end();\r\n        type       = 0;\r\n        if (begin == end) {\r\n            return begin;\r\n        }\r\n\r\n        switch (*begin) {\r\n        case CharT('x'):\r\n            break;\r\n        case CharT('X'):\r\n            type = 1;\r\n            break;\r\n        case CharT('s'):\r\n            type = 2;\r\n            break;\r\n        case CharT('}'):\r\n            return begin;\r\n        default:\r\n            throw_format_error(\"The type option contains an invalid value for a status formatting argument\");\r\n        }\r\n\r\n        ++begin;\r\n        if (begin != end && *begin != CharT('}')) {\r\n            throw_format_error(\"The format specifier should consume the input or end with a '}'\");\r\n        }\r\n\r\n        return begin;\r\n    }\r\n\r\n    template <class Out>\r\n    auto format(status s, basic_format_context<Out, CharT>& ctx) const -> decltype(ctx.out()) {\r\n        const char* names[] = {\"foo\", \"bar\", \"foobar\"};\r\n        char buffer[7];\r\n        const char* pbegin = names[0];\r\n        const char* pend   = names[0];\r\n        switch (type) {\r\n        case -1:\r\n            throw_format_error(\"The formatter's parse function has not been called.\");\r\n\r\n        case 0:\r\n            pbegin    = buffer;\r\n            buffer[0] = '0';\r\n            buffer[1] = 'x';\r\n            pend      = to_chars(&buffer[2], end(buffer), static_cast<uint16_t>(s), 16).ptr;\r\n            buffer[6] = '\\0';\r\n            break;\r\n\r\n        case 1:\r\n            pbegin    = buffer;\r\n            buffer[0] = '0';\r\n            buffer[1] = 'X';\r\n            pend      = to_chars(&buffer[2], end(buffer), static_cast<uint16_t>(s), 16).ptr;\r\n            transform(static_cast<const char*>(&buffer[2]), pend, &buffer[2],\r\n                [](char c) { return static_cast<char>(toupper(c)); });\r\n            buffer[6] = '\\0';\r\n            break;\r\n\r\n        case 2:\r\n            switch (s) {\r\n            case status::foo:\r\n                pbegin = names[0];\r\n                break;\r\n            case status::bar:\r\n                pbegin = names[1];\r\n                break;\r\n            case status::foobar:\r\n                pbegin = names[2];\r\n                break;\r\n            }\r\n            pend = pbegin + strlen(pbegin);\r\n            break;\r\n        }\r\n\r\n#if !defined(__clang__) && !defined(__EDG__)\r\n#pragma warning(push)\r\n#pragma warning(disable : 4365)\r\n#endif // !defined(__clang__) && !defined(__EDG__)\r\n        return copy(pbegin, pend, ctx.out());\r\n#if !defined(__clang__) && !defined(__EDG__)\r\n#pragma warning(pop)\r\n#endif // !defined(__clang__) && !defined(__EDG__)\r\n    }\r\n\r\nprivate:\r\n    [[noreturn]] void throw_format_error(const char* s) const {\r\n        throw format_error(s);\r\n    }\r\n};\r\n\r\n\r\n//\r\n// Char\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_char_default(TestFunction check, ExceptionTest check_exception) {\r\n    set input{CharT('a'), CharT('c'), CharT('b')}; // input not sorted.\r\n\r\n    // Note when no range-underlying-spec is present the char is escaped,\r\n    check(SV(\"{'a', 'b', 'c'}\"), SV(\"{}\"), input);\r\n    check(SV(\"{'a', 'b', 'c'}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{'a', 'b', 'c'}^42\"), SV(\"{:}^42\"), input);\r\n    // when one is present there is no escaping,\r\n    check(SV(\"{a, b, c}\"), SV(\"{::}\"), input);\r\n    check(SV(\"{a, b, c}\"), SV(\"{::<}\"), input);\r\n    // unless forced by the type specifier.\r\n    check(SV(\"{'a', 'b', 'c'}\"), SV(\"{::?}\"), input);\r\n    check(SV(\"{'a', 'b', 'c'}\"), SV(\"{::<?}\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{'a', 'b', 'c'}     \"), SV(\"{:20}\"), input);\r\n    check(SV(\"{'a', 'b', 'c'}*****\"), SV(\"{:*<20}\"), input);\r\n    check(SV(\"__{'a', 'b', 'c'}___\"), SV(\"{:_^20}\"), input);\r\n    check(SV(\"#####{'a', 'b', 'c'}\"), SV(\"{:#>20}\"), input);\r\n\r\n    check(SV(\"{'a', 'b', 'c'}     \"), SV(\"{:{}}\"), input, 20);\r\n    check(SV(\"{'a', 'b', 'c'}*****\"), SV(\"{:*<{}}\"), input, 20);\r\n    check(SV(\"__{'a', 'b', 'c'}___\"), SV(\"{:_^{}}\"), input, 20);\r\n    check(SV(\"#####{'a', 'b', 'c'}\"), SV(\"{:#>{}}\"), input, 20);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__'a', 'b', 'c'___\"), SV(\"{:_^18n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"{a   , b   , c   }\"), SV(\"{::4}\"), input);\r\n    check(SV(\"{a***, b***, c***}\"), SV(\"{::*<4}\"), input);\r\n    check(SV(\"{_a__, _b__, _c__}\"), SV(\"{::_^4}\"), input);\r\n    check(SV(\"{:::a, :::b, :::c}\"), SV(\"{:::>4}\"), input);\r\n\r\n    check(SV(\"{a   , b   , c   }\"), SV(\"{::{}}\"), input, 4);\r\n    check(SV(\"{a***, b***, c***}\"), SV(\"{::*<{}}\"), input, 4);\r\n    check(SV(\"{_a__, _b__, _c__}\"), SV(\"{::_^{}}\"), input, 4);\r\n    check(SV(\"{:::a, :::b, :::c}\"), SV(\"{:::>{}}\"), input, 4);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier for a character does not allow the sign option\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier for a character does not allow the sign option\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier for a character does not allow the sign option\", SV(\"{:: }\"), input);\r\n\r\n    check(SV(\"{97, 98, 99}\"), SV(\"{::-d}\"), input);\r\n    check(SV(\"{+97, +98, +99}\"), SV(\"{::+d}\"), input);\r\n    check(SV(\"{ 97,  98,  99}\"), SV(\"{:: d}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\r\n        \"The format specifier for a character does not allow the alternate form option\", SV(\"{::#}\"), input);\r\n\r\n    check(SV(\"{0x61, 0x62, 0x63}\"), SV(\"{::#x}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The format specifier for a character does not allow the zero-padding option\", SV(\"{::05}\"), input);\r\n\r\n    check(SV(\"{00141, 00142, 00143}\"), SV(\"{::05o}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check(SV(\"{a, b, c}\"), SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"bBcdoxX?\")) {\r\n        check_exception(\"The type option contains an invalid value for a character formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{:a, :b, :c}^^^\"), SV(\"{:^^17::>2}\"), input);\r\n    check(SV(\"^^{:a, :b, :c}^^^\"), SV(\"{:^^{}::>2}\"), input, 17);\r\n    check(SV(\"^^{:a, :b, :c}^^^\"), SV(\"{:^^{}::>{}}\"), input, 17, 2);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>2}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 17);\r\n}\r\n\r\n// A set can be written as a string, based on\r\n//   [tab:formatter.range.type]\r\n//   s  T shall be charT. ...\r\n// This does not seem very useful, but it is allowed.\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_char_string(TestFunction check, [[maybe_unused]] ExceptionTest check_exception) {\r\n    flat_set input{CharT('a'), CharT('c'), CharT('b')}; // input not sorted.\r\n\r\n    check(SV(\"abc\"), SV(\"{:s}\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"abc   \"), SV(\"{:6s}\"), input);\r\n    check(SV(\"abc***\"), SV(\"{:*<6s}\"), input);\r\n    check(SV(\"_abc__\"), SV(\"{:_^6s}\"), input);\r\n    check(SV(\"###abc\"), SV(\"{:#>6s}\"), input);\r\n\r\n    check(SV(\"abc   \"), SV(\"{:{}s}\"), input, 6);\r\n    check(SV(\"abc***\"), SV(\"{:*<{}s}\"), input, 6);\r\n    check(SV(\"_abc__\"), SV(\"{:_^{}s}\"), input, 6);\r\n    check(SV(\"###abc\"), SV(\"{:#>{}s}\"), input, 6);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<s}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<s}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: s}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#s}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0s}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.s}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:Ls}\"), input);\r\n\r\n    // *** n\r\n    check_exception(\"The n option and type s can't be used together\", SV(\"{:ns}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\r\n        \"The type option contains an invalid value for a character formatting argument\", SV(\"{::<s}\"), input);\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check_exception(\"Type s and an underlying format specification can't be used together\", SV(\"{:s:}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"bBcdoxX?\")) {\r\n        check_exception(\"The type option contains an invalid value for a character formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check_exception(\"Type s and an underlying format specification can't be used together\", SV(\"{:5s:5}\"), input);\r\n}\r\n\r\n// A set can be written as a debug_string, based on\r\n//   [tab:formatter.range.type]\r\n//   ?s T shall be charT. ...\r\n// This does not seem very useful, but it is allowed.\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_char_escaped_string(TestFunction check, [[maybe_unused]] ExceptionTest check_exception) {\r\n    set input{CharT('a'), CharT('c'), CharT('b')}; // input not sorted.\r\n\r\n    check(SV(\"\\\"abc\\\"\"), SV(\"{:?s}\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(R\"(\"abc\"   )\"), SV(\"{:8?s}\"), input);\r\n    check(SV(R\"(\"abc\"***)\"), SV(\"{:*<8?s}\"), input);\r\n    check(SV(R\"(_\"abc\"__)\"), SV(\"{:_^8?s}\"), input);\r\n    check(SV(R\"(###\"abc\")\"), SV(\"{:#>8?s}\"), input);\r\n\r\n    check(SV(R\"(\"abc\"   )\"), SV(\"{:{}?s}\"), input, 8);\r\n    check(SV(R\"(\"abc\"***)\"), SV(\"{:*<{}?s}\"), input, 8);\r\n    check(SV(R\"(_\"abc\"__)\"), SV(\"{:_^{}?s}\"), input, 8);\r\n    check(SV(R\"(###\"abc\")\"), SV(\"{:#>{}?s}\"), input, 8);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<?s}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<?s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::<?s}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-?s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+?s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: ?s}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#?s}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0?s}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.?s}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L?s}\"), input);\r\n\r\n    // *** n\r\n    check_exception(\"The n option and type ?s can't be used together\", SV(\"{:n?s}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check_exception(\"Type ?s and an underlying format specification can't be used together\", SV(\"{:?s:}\"), input);\r\n\r\n    // ***** Both have a format-spec\r\n    check_exception(\"Type ?s and an underlying format specification can't be used together\", SV(\"{:5?s:5}\"), input);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_char(TestFunction check, ExceptionTest check_exception) {\r\n    test_char_default<CharT>(check, check_exception);\r\n    test_char_string<CharT>(check, check_exception);\r\n    test_char_escaped_string<CharT>(check, check_exception);\r\n}\r\n\r\n//\r\n// char -> wchar_t\r\n//\r\n\r\ntemplate <class TestFunction, class ExceptionTest>\r\nvoid test_char_to_wchar(TestFunction check, ExceptionTest check_exception) {\r\n    flat_set input{'a', 'c', 'b'}; // input not sorted.\r\n\r\n    using CharT = wchar_t;\r\n\r\n    // Note when no range-underlying-spec is present the char is escaped,\r\n    check(SV(\"{'a', 'b', 'c'}\"), SV(\"{}\"), input);\r\n    check(SV(\"{'a', 'b', 'c'}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{'a', 'b', 'c'}^42\"), SV(\"{:}^42\"), input);\r\n    // when one is present there is no escaping,\r\n    check(SV(\"{a, b, c}\"), SV(\"{::}\"), input);\r\n    check(SV(\"{a, b, c}\"), SV(\"{::<}\"), input);\r\n    // unless forced by the type specifier.\r\n    check(SV(\"{'a', 'b', 'c'}\"), SV(\"{::?}\"), input);\r\n    check(SV(\"{'a', 'b', 'c'}\"), SV(\"{::<?}\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{'a', 'b', 'c'}     \"), SV(\"{:20}\"), input);\r\n    check(SV(\"{'a', 'b', 'c'}*****\"), SV(\"{:*<20}\"), input);\r\n    check(SV(\"__{'a', 'b', 'c'}___\"), SV(\"{:_^20}\"), input);\r\n    check(SV(\"#####{'a', 'b', 'c'}\"), SV(\"{:#>20}\"), input);\r\n\r\n    check(SV(\"{'a', 'b', 'c'}     \"), SV(\"{:{}}\"), input, 20);\r\n    check(SV(\"{'a', 'b', 'c'}*****\"), SV(\"{:*<{}}\"), input, 20);\r\n    check(SV(\"__{'a', 'b', 'c'}___\"), SV(\"{:_^{}}\"), input, 20);\r\n    check(SV(\"#####{'a', 'b', 'c'}\"), SV(\"{:#>{}}\"), input, 20);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__'a', 'b', 'c'___\"), SV(\"{:_^18n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"{a   , b   , c   }\"), SV(\"{::4}\"), input);\r\n    check(SV(\"{a***, b***, c***}\"), SV(\"{::*<4}\"), input);\r\n    check(SV(\"{_a__, _b__, _c__}\"), SV(\"{::_^4}\"), input);\r\n    check(SV(\"{:::a, :::b, :::c}\"), SV(\"{:::>4}\"), input);\r\n\r\n    check(SV(\"{a   , b   , c   }\"), SV(\"{::{}}\"), input, 4);\r\n    check(SV(\"{a***, b***, c***}\"), SV(\"{::*<{}}\"), input, 4);\r\n    check(SV(\"{_a__, _b__, _c__}\"), SV(\"{::_^{}}\"), input, 4);\r\n    check(SV(\"{:::a, :::b, :::c}\"), SV(\"{:::>{}}\"), input, 4);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier for a character does not allow the sign option\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier for a character does not allow the sign option\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier for a character does not allow the sign option\", SV(\"{:: }\"), input);\r\n\r\n    check(SV(\"{97, 98, 99}\"), SV(\"{::-d}\"), input);\r\n    check(SV(\"{+97, +98, +99}\"), SV(\"{::+d}\"), input);\r\n    check(SV(\"{ 97,  98,  99}\"), SV(\"{:: d}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\r\n        \"The format specifier for a character does not allow the alternate form option\", SV(\"{::#}\"), input);\r\n\r\n    check(SV(\"{0x61, 0x62, 0x63}\"), SV(\"{::#x}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The format specifier for a character does not allow the zero-padding option\", SV(\"{::05}\"), input);\r\n\r\n    check(SV(\"{00141, 00142, 00143}\"), SV(\"{::05o}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check(SV(\"{a, b, c}\"), SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"bBcdoxX?\")) {\r\n        check_exception(\"The type option contains an invalid value for a character formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{:a, :b, :c}^^^\"), SV(\"{:^^17::>2}\"), input);\r\n    check(SV(\"^^{:a, :b, :c}^^^\"), SV(\"{:^^{}::>2}\"), input, 17);\r\n    check(SV(\"^^{:a, :b, :c}^^^\"), SV(\"{:^^{}::>{}}\"), input, 17, 2);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>2}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 17);\r\n\r\n    // The types s and ?s may only be used when using range_formatter<T, charT>\r\n    // where the types T and charT are the same. This means this can't be used for\r\n    // range_formatter<wchar_t, char> even when formatter<wchar_t, char> has a\r\n    // debug-enabled specialization.\r\n\r\n    using CharT = wchar_t;\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n}\r\n\r\n//\r\n// Bool\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_bool(TestFunction check, ExceptionTest check_exception) {\r\n    set input{true, false};\r\n\r\n    check(SV(\"{false, true}\"), SV(\"{}\"), input);\r\n    check(SV(\"{false, true}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{false, true}^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{false, true}     \"), SV(\"{:18}\"), input);\r\n    check(SV(\"{false, true}*****\"), SV(\"{:*<18}\"), input);\r\n    check(SV(\"__{false, true}___\"), SV(\"{:_^18}\"), input);\r\n    check(SV(\"#####{false, true}\"), SV(\"{:#>18}\"), input);\r\n\r\n    check(SV(\"{false, true}     \"), SV(\"{:{}}\"), input, 18);\r\n    check(SV(\"{false, true}*****\"), SV(\"{:*<{}}\"), input, 18);\r\n    check(SV(\"__{false, true}___\"), SV(\"{:_^{}}\"), input, 18);\r\n    check(SV(\"#####{false, true}\"), SV(\"{:#>{}}\"), input, 18);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__false, true___\"), SV(\"{:_^16n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"{false  , true   }\"), SV(\"{::7}\"), input);\r\n    check(SV(\"{false**, true***}\"), SV(\"{::*<7}\"), input);\r\n    check(SV(\"{_false_, _true__}\"), SV(\"{::_^7}\"), input);\r\n    check(SV(\"{::false, :::true}\"), SV(\"{:::>7}\"), input);\r\n\r\n    check(SV(\"{false  , true   }\"), SV(\"{::{}}\"), input, 7);\r\n    check(SV(\"{false**, true***}\"), SV(\"{::*<{}}\"), input, 7);\r\n    check(SV(\"{_false_, _true__}\"), SV(\"{::_^{}}\"), input, 7);\r\n    check(SV(\"{::false, :::true}\"), SV(\"{:::>{}}\"), input, 7);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier for a bool does not allow the sign option\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier for a bool does not allow the sign option\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier for a bool does not allow the sign option\", SV(\"{:: }\"), input);\r\n\r\n    check(SV(\"{0, 1}\"), SV(\"{::-d}\"), input);\r\n    check(SV(\"{+0, +1}\"), SV(\"{::+d}\"), input);\r\n    check(SV(\"{ 0,  1}\"), SV(\"{:: d}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier for a bool does not allow the alternate form option\", SV(\"{::#}\"), input);\r\n\r\n    check(SV(\"{0x0, 0x1}\"), SV(\"{::#x}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The format specifier for a bool does not allow the zero-padding option\", SV(\"{::05}\"), input);\r\n\r\n    check(SV(\"{00000, 00001}\"), SV(\"{::05o}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check(SV(\"{false, true}\"), SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"bBdosxX\")) {\r\n        check_exception(\"The type option contains an invalid value for a bool formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{::false, :::true}^^^\"), SV(\"{:^^23::>7}\"), input);\r\n    check(SV(\"^^{::false, :::true}^^^\"), SV(\"{:^^{}::>7}\"), input, 23);\r\n    check(SV(\"^^{::false, :::true}^^^\"), SV(\"{:^^{}::>{}}\"), input, 23, 7);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>5}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 23);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_bool_multiset(TestFunction check, ExceptionTest check_exception) {\r\n    multiset<bool, greater<bool>> input{true, false, true}; // unordered\r\n\r\n    check(SV(\"{true, true, false}\"), SV(\"{}\"), input);\r\n    check(SV(\"{true, true, false}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{true, true, false}^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{true, true, false}     \"), SV(\"{:24}\"), input);\r\n    check(SV(\"{true, true, false}*****\"), SV(\"{:*<24}\"), input);\r\n    check(SV(\"__{true, true, false}___\"), SV(\"{:_^24}\"), input);\r\n    check(SV(\"#####{true, true, false}\"), SV(\"{:#>24}\"), input);\r\n\r\n    check(SV(\"{true, true, false}     \"), SV(\"{:{}}\"), input, 24);\r\n    check(SV(\"{true, true, false}*****\"), SV(\"{:*<{}}\"), input, 24);\r\n    check(SV(\"__{true, true, false}___\"), SV(\"{:_^{}}\"), input, 24);\r\n    check(SV(\"#####{true, true, false}\"), SV(\"{:#>{}}\"), input, 24);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__true, true, false___\"), SV(\"{:_^22n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"{true   , true   , false  }\"), SV(\"{::7}\"), input);\r\n    check(SV(\"{true***, true***, false**}\"), SV(\"{::*<7}\"), input);\r\n    check(SV(\"{_true__, _true__, _false_}\"), SV(\"{::_^7}\"), input);\r\n    check(SV(\"{:::true, :::true, ::false}\"), SV(\"{:::>7}\"), input);\r\n\r\n    check(SV(\"{true   , true   , false  }\"), SV(\"{::{}}\"), input, 7);\r\n    check(SV(\"{true***, true***, false**}\"), SV(\"{::*<{}}\"), input, 7);\r\n    check(SV(\"{_true__, _true__, _false_}\"), SV(\"{::_^{}}\"), input, 7);\r\n    check(SV(\"{:::true, :::true, ::false}\"), SV(\"{:::>{}}\"), input, 7);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier for a bool does not allow the sign option\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier for a bool does not allow the sign option\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier for a bool does not allow the sign option\", SV(\"{:: }\"), input);\r\n\r\n    check(SV(\"{1, 1, 0}\"), SV(\"{::-d}\"), input);\r\n    check(SV(\"{+1, +1, +0}\"), SV(\"{::+d}\"), input);\r\n    check(SV(\"{ 1,  1,  0}\"), SV(\"{:: d}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier for a bool does not allow the alternate form option\", SV(\"{::#}\"), input);\r\n\r\n    check(SV(\"{0x1, 0x1, 0x0}\"), SV(\"{::#x}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The format specifier for a bool does not allow the zero-padding option\", SV(\"{::05}\"), input);\r\n\r\n    check(SV(\"{00001, 00001, 00000}\"), SV(\"{::05o}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check(SV(\"{true, true, false}\"), SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"bBdosxX\")) {\r\n        check_exception(\"The type option contains an invalid value for a bool formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{:::true, :::true, ::false}^^^\"), SV(\"{:^^32::>7}\"), input);\r\n    check(SV(\"^^{:::true, :::true, ::false}^^^\"), SV(\"{:^^{}::>7}\"), input, 32);\r\n    check(SV(\"^^{:::true, :::true, ::false}^^^\"), SV(\"{:^^{}::>{}}\"), input, 32, 7);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>5}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 32);\r\n}\r\n\r\n//\r\n// Integral\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_int(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"{-42, 1, 2, 42}\"), SV(\"{}\"), input);\r\n    check(SV(\"{-42, 1, 2, 42}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{-42, 1, 2, 42}^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{-42, 1, 2, 42}     \"), SV(\"{:20}\"), input);\r\n    check(SV(\"{-42, 1, 2, 42}*****\"), SV(\"{:*<20}\"), input);\r\n    check(SV(\"__{-42, 1, 2, 42}___\"), SV(\"{:_^20}\"), input);\r\n    check(SV(\"#####{-42, 1, 2, 42}\"), SV(\"{:#>20}\"), input);\r\n\r\n    check(SV(\"{-42, 1, 2, 42}     \"), SV(\"{:{}}\"), input, 20);\r\n    check(SV(\"{-42, 1, 2, 42}*****\"), SV(\"{:*<{}}\"), input, 20);\r\n    check(SV(\"__{-42, 1, 2, 42}___\"), SV(\"{:_^{}}\"), input, 20);\r\n    check(SV(\"#####{-42, 1, 2, 42}\"), SV(\"{:#>{}}\"), input, 20);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__-42, 1, 2, 42___\"), SV(\"{:_^18n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"{  -42,     1,     2,    42}\"), SV(\"{::5}\"), input);\r\n    check(SV(\"{-42**, 1****, 2****, 42***}\"), SV(\"{::*<5}\"), input);\r\n    check(SV(\"{_-42_, __1__, __2__, _42__}\"), SV(\"{::_^5}\"), input);\r\n    check(SV(\"{::-42, ::::1, ::::2, :::42}\"), SV(\"{:::>5}\"), input);\r\n\r\n    check(SV(\"{  -42,     1,     2,    42}\"), SV(\"{::{}}\"), input, 5);\r\n    check(SV(\"{-42**, 1****, 2****, 42***}\"), SV(\"{::*<{}}\"), input, 5);\r\n    check(SV(\"{_-42_, __1__, __2__, _42__}\"), SV(\"{::_^{}}\"), input, 5);\r\n    check(SV(\"{::-42, ::::1, ::::2, :::42}\"), SV(\"{:::>{}}\"), input, 5);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check(SV(\"{-42, 1, 2, 42}\"), SV(\"{::-}\"), input);\r\n    check(SV(\"{-42, +1, +2, +42}\"), SV(\"{::+}\"), input);\r\n    check(SV(\"{-42,  1,  2,  42}\"), SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check(SV(\"{-0x2a, 0x1, 0x2, 0x2a}\"), SV(\"{::#x}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check(SV(\"{-0042, 00001, 00002, 00042}\"), SV(\"{::05}\"), input);\r\n    check(SV(\"{-002a, 00001, 00002, 0002a}\"), SV(\"{::05x}\"), input);\r\n    check(SV(\"{-0x2a, 0x001, 0x002, 0x02a}\"), SV(\"{::#05x}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check(SV(\"{-42, 1, 2, 42}\"), SV(\"{::L}\"), input); // does nothing in this test, but is accepted.\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"bBcdoxX\")) {\r\n        check_exception(\"The type option contains an invalid value for an integer formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{::-42, ::::1, ::::2, :::42}^^^\"), SV(\"{:^^33::>5}\"), input);\r\n    check(SV(\"^^{::-42, ::::1, ::::2, :::42}^^^\"), SV(\"{:^^{}::>5}\"), input, 33);\r\n    check(SV(\"^^{::-42, ::::1, ::::2, :::42}^^^\"), SV(\"{:^^{}::>{}}\"), input, 33, 5);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>5}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 33);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_int(TestFunction check, ExceptionTest check_exception) {\r\n    test_int<CharT>(check, check_exception, set{1, 42, 2, -42}); // unsorted\r\n    test_int<CharT>(check, check_exception, multiset{1, 42, 2, -42}); // unsorted\r\n    test_int<CharT>(check, check_exception, flat_set{1, 42, 2, -42}); // unsorted\r\n    test_int<CharT>(check, check_exception, flat_multiset{1, 42, 2, -42}); // unsorted\r\n}\r\n\r\n//\r\n// Floating point\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_floating_point(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"{-42.5, 0, 1.25, 42.5}\"), SV(\"{}\"), input);\r\n    check(SV(\"{-42.5, 0, 1.25, 42.5}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{-42.5, 0, 1.25, 42.5}^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{-42.5, 0, 1.25, 42.5}     \"), SV(\"{:27}\"), input);\r\n    check(SV(\"{-42.5, 0, 1.25, 42.5}*****\"), SV(\"{:*<27}\"), input);\r\n    check(SV(\"__{-42.5, 0, 1.25, 42.5}___\"), SV(\"{:_^27}\"), input);\r\n    check(SV(\"#####{-42.5, 0, 1.25, 42.5}\"), SV(\"{:#>27}\"), input);\r\n\r\n    check(SV(\"{-42.5, 0, 1.25, 42.5}     \"), SV(\"{:{}}\"), input, 27);\r\n    check(SV(\"{-42.5, 0, 1.25, 42.5}*****\"), SV(\"{:*<{}}\"), input, 27);\r\n    check(SV(\"__{-42.5, 0, 1.25, 42.5}___\"), SV(\"{:_^{}}\"), input, 27);\r\n    check(SV(\"#####{-42.5, 0, 1.25, 42.5}\"), SV(\"{:#>{}}\"), input, 27);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__-42.5, 0, 1.25, 42.5___\"), SV(\"{:_^25n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"{-42.5,     0,  1.25,  42.5}\"), SV(\"{::5}\"), input);\r\n    check(SV(\"{-42.5, 0****, 1.25*, 42.5*}\"), SV(\"{::*<5}\"), input);\r\n    check(SV(\"{-42.5, __0__, 1.25_, 42.5_}\"), SV(\"{::_^5}\"), input);\r\n    check(SV(\"{-42.5, ::::0, :1.25, :42.5}\"), SV(\"{:::>5}\"), input);\r\n\r\n    check(SV(\"{-42.5,     0,  1.25,  42.5}\"), SV(\"{::{}}\"), input, 5);\r\n    check(SV(\"{-42.5, 0****, 1.25*, 42.5*}\"), SV(\"{::*<{}}\"), input, 5);\r\n    check(SV(\"{-42.5, __0__, 1.25_, 42.5_}\"), SV(\"{::_^{}}\"), input, 5);\r\n    check(SV(\"{-42.5, ::::0, :1.25, :42.5}\"), SV(\"{:::>{}}\"), input, 5);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check(SV(\"{-42.5, 0, 1.25, 42.5}\"), SV(\"{::-}\"), input);\r\n    check(SV(\"{-42.5, +0, +1.25, +42.5}\"), SV(\"{::+}\"), input);\r\n    check(SV(\"{-42.5,  0,  1.25,  42.5}\"), SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check(SV(\"{-42.5, 0., 1.25, 42.5}\"), SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check(SV(\"{-42.5, 00000, 01.25, 042.5}\"), SV(\"{::05}\"), input);\r\n    check(SV(\"{-42.5, 0000., 01.25, 042.5}\"), SV(\"{::#05}\"), input);\r\n\r\n    // *** precision ***\r\n    check(SV(\"{-42, 0, 1.2, 42}\"), SV(\"{::.2}\"), input);\r\n    check(SV(\"{-42.500, 0.000, 1.250, 42.500}\"), SV(\"{::.3f}\"), input);\r\n\r\n    check(SV(\"{-42, 0, 1.2, 42}\"), SV(\"{::.{}}\"), input, 2);\r\n    check(SV(\"{-42.500, 0.000, 1.250, 42.500}\"), SV(\"{::.{}f}\"), input, 3);\r\n\r\n    check_exception(\"The precision option does not contain a value or an argument index\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check(SV(\"{-42.5, 0, 1.25, 42.5}\"), SV(\"{::L}\"), input); // does not require locales present\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"aAeEfFgG\")) {\r\n        check_exception(\r\n            \"The type option contains an invalid value for a floating-point formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{-42.5, ::::0, :1.25, :42.5}^^^\"), SV(\"{:^^33::>5}\"), input);\r\n    check(SV(\"^^{-42.5, ::::0, :1.25, :42.5}^^^\"), SV(\"{:^^{}::>5}\"), input, 33);\r\n    check(SV(\"^^{-42.5, ::::0, :1.25, :42.5}^^^\"), SV(\"{:^^{}::>{}}\"), input, 33, 5);\r\n\r\n    check(SV(\"^^{::-42, ::::0, ::1.2, :::42}^^^\"), SV(\"{:^^33::>5.2}\"), input);\r\n    check(SV(\"^^{::-42, ::::0, ::1.2, :::42}^^^\"), SV(\"{:^^{}::>5.2}\"), input, 33);\r\n    check(SV(\"^^{::-42, ::::0, ::1.2, :::42}^^^\"), SV(\"{:^^{}::>{}.2}\"), input, 33, 5);\r\n    check(SV(\"^^{::-42, ::::0, ::1.2, :::42}^^^\"), SV(\"{:^^{}::>{}.{}}\"), input, 33, 5, 2);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>5.2}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}.2}\"), input, 33);\r\n    check_exception(\"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}.{}}\"),\r\n        input, 33, 5);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_floating_point(TestFunction check, ExceptionTest check_exception) {\r\n    test_floating_point<CharT>(check, check_exception, set{-42.5f, 0.0f, 1.25f, 42.5f});\r\n    test_floating_point<CharT>(check, check_exception, multiset{-42.5, 0.0, 1.25, 42.5});\r\n    test_floating_point<CharT>(check, check_exception, set{-42.5l, 0.0l, 1.25l, 42.5l});\r\n    test_floating_point<CharT>(check, check_exception, flat_set{-42.5f, 0.0f, 1.25f, 42.5f});\r\n    test_floating_point<CharT>(check, check_exception, flat_multiset{-42.5, 0.0, 1.25, 42.5});\r\n    test_floating_point<CharT>(check, check_exception, flat_set{-42.5l, 0.0l, 1.25l, 42.5l});\r\n}\r\n\r\n//\r\n// Pointer\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_pointer(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"{0x0}\"), SV(\"{}\"), input);\r\n    check(SV(\"{0x0}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{0x0}^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{0x0}     \"), SV(\"{:10}\"), input);\r\n    check(SV(\"{0x0}*****\"), SV(\"{:*<10}\"), input);\r\n    check(SV(\"__{0x0}___\"), SV(\"{:_^10}\"), input);\r\n    check(SV(\"#####{0x0}\"), SV(\"{:#>10}\"), input);\r\n\r\n    check(SV(\"{0x0}     \"), SV(\"{:{}}\"), input, 10);\r\n    check(SV(\"{0x0}*****\"), SV(\"{:*<{}}\"), input, 10);\r\n    check(SV(\"__{0x0}___\"), SV(\"{:_^{}}\"), input, 10);\r\n    check(SV(\"#####{0x0}\"), SV(\"{:#>{}}\"), input, 10);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"_0x0_\"), SV(\"{:_^5n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"{  0x0}\"), SV(\"{::5}\"), input);\r\n    check(SV(\"{0x0**}\"), SV(\"{::*<5}\"), input);\r\n    check(SV(\"{_0x0_}\"), SV(\"{::_^5}\"), input);\r\n    check(SV(\"{::0x0}\"), SV(\"{:::>5}\"), input);\r\n\r\n    check(SV(\"{  0x0}\"), SV(\"{::{}}\"), input, 5);\r\n    check(SV(\"{0x0**}\"), SV(\"{::*<{}}\"), input, 5);\r\n    check(SV(\"{_0x0_}\"), SV(\"{::_^{}}\"), input, 5);\r\n    check(SV(\"{::0x0}\"), SV(\"{:::>{}}\"), input, 5);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check(SV(\"{0x0000}\"), SV(\"{::06}\"), input);\r\n    check(SV(\"{0x0000}\"), SV(\"{::06p}\"), input);\r\n    check(SV(\"{0X0000}\"), SV(\"{::06P}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"pP\")) {\r\n        check_exception(\"The type option contains an invalid value for a pointer formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{::0x0}^^^\"), SV(\"{:^^12::>5}\"), input);\r\n    check(SV(\"^^{::0x0}^^^\"), SV(\"{:^^{}::>5}\"), input, 12);\r\n    check(SV(\"^^{::0x0}^^^\"), SV(\"{:^^{}::>{}}\"), input, 12, 5);\r\n\r\n    check(SV(\"^^{::0x0}^^^\"), SV(\"{:^^12::>5}\"), input);\r\n    check(SV(\"^^{::0x0}^^^\"), SV(\"{:^^{}::>5}\"), input, 12);\r\n    check(SV(\"^^{::0x0}^^^\"), SV(\"{:^^{}::>{}}\"), input, 12, 5);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>5}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 12);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_pointer(TestFunction check, ExceptionTest check_exception) {\r\n    // Note nullptr_t can only be equality compared so not used in a set.\r\n    test_pointer<CharT>(check, check_exception, unordered_set{static_cast<const void*>(nullptr)});\r\n    test_pointer<CharT>(check, check_exception, unordered_multiset{static_cast<void*>(nullptr)});\r\n}\r\n\r\n//\r\n// String\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_string(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(R\"({\"Hello\", \"world\"})\"), SV(\"{}\"), input);\r\n    check(SV(R\"({\"Hello\", \"world\"}^42)\"), SV(\"{}^42\"), input);\r\n    check(SV(R\"({\"Hello\", \"world\"}^42)\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(R\"({\"Hello\", \"world\"}     )\"), SV(\"{:23}\"), input);\r\n    check(SV(R\"({\"Hello\", \"world\"}*****)\"), SV(\"{:*<23}\"), input);\r\n    check(SV(R\"(__{\"Hello\", \"world\"}___)\"), SV(\"{:_^23}\"), input);\r\n    check(SV(R\"(#####{\"Hello\", \"world\"})\"), SV(\"{:#>23}\"), input);\r\n\r\n    check(SV(R\"({\"Hello\", \"world\"}     )\"), SV(\"{:{}}\"), input, 23);\r\n    check(SV(R\"({\"Hello\", \"world\"}*****)\"), SV(\"{:*<{}}\"), input, 23);\r\n    check(SV(R\"(__{\"Hello\", \"world\"}___)\"), SV(\"{:_^{}}\"), input, 23);\r\n    check(SV(R\"(#####{\"Hello\", \"world\"})\"), SV(\"{:#>{}}\"), input, 23);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(R\"(_\"Hello\", \"world\"_)\"), SV(\"{:_^18n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(R\"({Hello   , world   })\"), SV(\"{::8}\"), input);\r\n    check(SV(R\"({Hello***, world***})\"), SV(\"{::*<8}\"), input);\r\n    check(SV(R\"({_Hello__, _world__})\"), SV(\"{::_^8}\"), input);\r\n    check(SV(R\"({:::Hello, :::world})\"), SV(\"{:::>8}\"), input);\r\n\r\n    check(SV(R\"({Hello   , world   })\"), SV(\"{::{}}\"), input, 8);\r\n    check(SV(R\"({Hello***, world***})\"), SV(\"{::*<{}}\"), input, 8);\r\n    check(SV(R\"({_Hello__, _world__})\"), SV(\"{::_^{}}\"), input, 8);\r\n    check(SV(R\"({:::Hello, :::world})\"), SV(\"{:::>{}}\"), input, 8);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check(SV(R\"({Hel, wor})\"), SV(\"{::.3}\"), input);\r\n\r\n    check(SV(R\"({Hel, wor})\"), SV(\"{::.{}}\"), input, 3);\r\n\r\n    check_exception(\"The precision option does not contain a value or an argument index\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"s?\")) {\r\n        check_exception(\"The type option contains an invalid value for a string formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(R\"(^^{:::Hello, :::world}^^^)\"), SV(\"{:^^25::>8}\"), input);\r\n    check(SV(R\"(^^{:::Hello, :::world}^^^)\"), SV(\"{:^^{}::>8}\"), input, 25);\r\n    check(SV(R\"(^^{:::Hello, :::world}^^^)\"), SV(\"{:^^{}::>{}}\"), input, 25, 8);\r\n\r\n    check(SV(R\"(^^{:::Hello, :::world}^^^)\"), SV(\"{:^^25::>8}\"), input);\r\n    check(SV(R\"(^^{:::Hello, :::world}^^^)\"), SV(\"{:^^{}::>8}\"), input, 25);\r\n    check(SV(R\"(^^{:::Hello, :::world}^^^)\"), SV(\"{:^^{}::>{}}\"), input, 25, 8);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>8}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 25);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_string(TestFunction check, ExceptionTest check_exception) {\r\n    test_string<CharT>(check, check_exception, set{STR(\"Hello\"), STR(\"world\")});\r\n    test_string<CharT>(check, check_exception, set{SV(\"Hello\"), SV(\"world\")});\r\n    test_string<CharT>(check, check_exception, flat_set{STR(\"Hello\"), STR(\"world\")});\r\n    test_string<CharT>(check, check_exception, flat_set{SV(\"Hello\"), SV(\"world\")});\r\n}\r\n\r\n//\r\n// Handle\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_status(TestFunction check, ExceptionTest check_exception) {\r\n    set input{status::foo, status::bar, status::foobar}; // unordered input\r\n\r\n    check(SV(\"{0x5555, 0xaa55, 0xaaaa}\"), SV(\"{}\"), input);\r\n    check(SV(\"{0x5555, 0xaa55, 0xaaaa}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{0x5555, 0xaa55, 0xaaaa}^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{0x5555, 0xaa55, 0xaaaa}     \"), SV(\"{:29}\"), input);\r\n    check(SV(\"{0x5555, 0xaa55, 0xaaaa}*****\"), SV(\"{:*<29}\"), input);\r\n    check(SV(\"__{0x5555, 0xaa55, 0xaaaa}___\"), SV(\"{:_^29}\"), input);\r\n    check(SV(\"#####{0x5555, 0xaa55, 0xaaaa}\"), SV(\"{:#>29}\"), input);\r\n\r\n    check(SV(\"{0x5555, 0xaa55, 0xaaaa}     \"), SV(\"{:{}}\"), input, 29);\r\n    check(SV(\"{0x5555, 0xaa55, 0xaaaa}*****\"), SV(\"{:*<{}}\"), input, 29);\r\n    check(SV(\"__{0x5555, 0xaa55, 0xaaaa}___\"), SV(\"{:_^{}}\"), input, 29);\r\n    check(SV(\"#####{0x5555, 0xaa55, 0xaaaa}\"), SV(\"{:#>{}}\"), input, 29);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__0x5555, 0xaa55, 0xaaaa___\"), SV(\"{:_^27n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check_exception(\"The type option contains an invalid value for a status formatting argument\", SV(\"{::*<7}\"), input);\r\n\r\n    check(SV(\"{0x5555, 0xaa55, 0xaaaa}\"), SV(\"{::x}\"), input);\r\n    check(SV(\"{0X5555, 0XAA55, 0XAAAA}\"), SV(\"{::X}\"), input);\r\n    check(SV(\"{bar, foobar, foo}\"), SV(\"{::s}\"), input);\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{0X5555, 0XAA55, 0XAAAA}^^^\"), SV(\"{:^^29:X}\"), input);\r\n    check(SV(\"^^{0X5555, 0XAA55, 0XAAAA}^^^\"), SV(\"{:^^{}:X}\"), input, 29);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:X}\"), input);\r\n}\r\n\r\n//\r\n// Pair\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_pair_tuple(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"{(1, 'a'), (42, '*')}\"), SV(\"{}\"), input);\r\n    check(SV(\"{(1, 'a'), (42, '*')}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{(1, 'a'), (42, '*')}^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{(1, 'a'), (42, '*')}     \"), SV(\"{:26}\"), input);\r\n    check(SV(\"{(1, 'a'), (42, '*')}*****\"), SV(\"{:*<26}\"), input);\r\n    check(SV(\"__{(1, 'a'), (42, '*')}___\"), SV(\"{:_^26}\"), input);\r\n    check(SV(\"#####{(1, 'a'), (42, '*')}\"), SV(\"{:#>26}\"), input);\r\n\r\n    check(SV(\"{(1, 'a'), (42, '*')}     \"), SV(\"{:{}}\"), input, 26);\r\n    check(SV(\"{(1, 'a'), (42, '*')}*****\"), SV(\"{:*<{}}\"), input, 26);\r\n    check(SV(\"__{(1, 'a'), (42, '*')}___\"), SV(\"{:_^{}}\"), input, 26);\r\n    check(SV(\"#####{(1, 'a'), (42, '*')}\"), SV(\"{:#>{}}\"), input, 26);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__(1, 'a'), (42, '*')___\"), SV(\"{:_^24n}\"), input);\r\n    check(SV(\"____1: 'a', 42: '*'_____\"), SV(\"{:_^24nm}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"____{1: 'a', 42: '*'}_____\"), SV(\"{:_^26m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"{(1, 'a')   , (42, '*')  }\"), SV(\"{::11}\"), input);\r\n    check(SV(\"{(1, 'a')***, (42, '*')**}\"), SV(\"{::*<11}\"), input);\r\n    check(SV(\"{_(1, 'a')__, _(42, '*')_}\"), SV(\"{::_^11}\"), input);\r\n    check(SV(\"{###(1, 'a'), ##(42, '*')}\"), SV(\"{::#>11}\"), input);\r\n\r\n    check(SV(\"{(1, 'a')   , (42, '*')  }\"), SV(\"{::{}}\"), input, 11);\r\n    check(SV(\"{(1, 'a')***, (42, '*')**}\"), SV(\"{::*<{}}\"), input, 11);\r\n    check(SV(\"{_(1, 'a')__, _(42, '*')_}\"), SV(\"{::_^{}}\"), input, 11);\r\n    check(SV(\"{###(1, 'a'), ##(42, '*')}\"), SV(\"{::#>{}}\"), input, 11);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"{1: 'a', 42: '*'}\"), SV(\"{::m}\"), input);\r\n    check(SV(\"{1, 'a', 42, '*'}\"), SV(\"{::n}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{###(1, 'a'), ##(42, '*')}^^^\"), SV(\"{:^^31:#>11}\"), input);\r\n    check(SV(\"^^{###(1, 'a'), ##(42, '*')}^^^\"), SV(\"{:^^31:#>11}\"), input);\r\n    check(SV(\"^^{###(1, 'a'), ##(42, '*')}^^^\"), SV(\"{:^^{}:#>11}\"), input, 31);\r\n    check(SV(\"^^{###(1, 'a'), ##(42, '*')}^^^\"), SV(\"{:^^{}:#>{}}\"), input, 31, 11);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>5}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>{}}\"), input, 31);\r\n\r\n    check(SV(\"1: 'a', 42: '*'\"), SV(\"{:n:m}\"), input);\r\n    check(SV(\"1, 'a', 42, '*'\"), SV(\"{:n:n}\"), input);\r\n    check(SV(\"{1: 'a', 42: '*'}\"), SV(\"{:m:m}\"), input);\r\n    check(SV(\"{1: 'a', 42: '*'}\"), SV(\"{:m:n}\"), input);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_pair_tuple(TestFunction check, ExceptionTest check_exception) {\r\n    test_pair_tuple<CharT>(check, check_exception, set{make_pair(1, CharT('a')), make_pair(42, CharT('*'))});\r\n    test_pair_tuple<CharT>(check, check_exception, set{make_tuple(1, CharT('a')), make_tuple(42, CharT('*'))});\r\n    test_pair_tuple<CharT>(check, check_exception, flat_set{make_pair(1, CharT('a')), make_pair(42, CharT('*'))});\r\n    test_pair_tuple<CharT>(check, check_exception, flat_set{make_tuple(1, CharT('a')), make_tuple(42, CharT('*'))});\r\n}\r\n\r\n//\r\n// Tuple 1\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_tuple_int(TestFunction check, ExceptionTest check_exception) {\r\n    set input{make_tuple(42), make_tuple(99)};\r\n\r\n    check(SV(\"{(42), (99)}\"), SV(\"{}\"), input);\r\n    check(SV(\"{(42), (99)}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{(42), (99)}^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{(42), (99)}     \"), SV(\"{:17}\"), input);\r\n    check(SV(\"{(42), (99)}*****\"), SV(\"{:*<17}\"), input);\r\n    check(SV(\"__{(42), (99)}___\"), SV(\"{:_^17}\"), input);\r\n    check(SV(\"#####{(42), (99)}\"), SV(\"{:#>17}\"), input);\r\n\r\n    check(SV(\"{(42), (99)}     \"), SV(\"{:{}}\"), input, 17);\r\n    check(SV(\"{(42), (99)}*****\"), SV(\"{:*<{}}\"), input, 17);\r\n    check(SV(\"__{(42), (99)}___\"), SV(\"{:_^{}}\"), input, 17);\r\n    check(SV(\"#####{(42), (99)}\"), SV(\"{:#>{}}\"), input, 17);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__(42), (99)___\"), SV(\"{:_^15n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"{(42)   , (99)   }\"), SV(\"{::7}\"), input);\r\n    check(SV(\"{(42)***, (99)***}\"), SV(\"{::*<7}\"), input);\r\n    check(SV(\"{_(42)__, _(99)__}\"), SV(\"{::_^7}\"), input);\r\n    check(SV(\"{###(42), ###(99)}\"), SV(\"{::#>7}\"), input);\r\n\r\n    check(SV(\"{(42)   , (99)   }\"), SV(\"{::{}}\"), input, 7);\r\n    check(SV(\"{(42)***, (99)***}\"), SV(\"{::*<{}}\"), input, 7);\r\n    check(SV(\"{_(42)__, _(99)__}\"), SV(\"{::_^{}}\"), input, 7);\r\n    check(SV(\"{###(42), ###(99)}\"), SV(\"{::#>{}}\"), input, 7);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"{42, 99}\"), SV(\"{::n}\"), input);\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{::m}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{###(42), ###(99)}^^^\"), SV(\"{:^^23:#>7}\"), input);\r\n    check(SV(\"^^{###(42), ###(99)}^^^\"), SV(\"{:^^23:#>7}\"), input);\r\n    check(SV(\"^^{###(42), ###(99)}^^^\"), SV(\"{:^^{}:#>7}\"), input, 23);\r\n    check(SV(\"^^{###(42), ###(99)}^^^\"), SV(\"{:^^{}:#>{}}\"), input, 23, 7);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>5}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>{}}\"), input, 23);\r\n}\r\n\r\n//\r\n// Tuple 3\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_tuple_int_int_int(TestFunction check, ExceptionTest check_exception) {\r\n    flat_set input{make_tuple(42, 99, 0), make_tuple(1, 10, 100)}; // unsorted\r\n\r\n    check(SV(\"{(1, 10, 100), (42, 99, 0)}\"), SV(\"{}\"), input);\r\n    check(SV(\"{(1, 10, 100), (42, 99, 0)}^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"{(1, 10, 100), (42, 99, 0)}^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"{(1, 10, 100), (42, 99, 0)}     \"), SV(\"{:32}\"), input);\r\n    check(SV(\"{(1, 10, 100), (42, 99, 0)}*****\"), SV(\"{:*<32}\"), input);\r\n    check(SV(\"__{(1, 10, 100), (42, 99, 0)}___\"), SV(\"{:_^32}\"), input);\r\n    check(SV(\"#####{(1, 10, 100), (42, 99, 0)}\"), SV(\"{:#>32}\"), input);\r\n\r\n    check(SV(\"{(1, 10, 100), (42, 99, 0)}     \"), SV(\"{:{}}\"), input, 32);\r\n    check(SV(\"{(1, 10, 100), (42, 99, 0)}*****\"), SV(\"{:*<{}}\"), input, 32);\r\n    check(SV(\"__{(1, 10, 100), (42, 99, 0)}___\"), SV(\"{:_^{}}\"), input, 32);\r\n    check(SV(\"#####{(1, 10, 100), (42, 99, 0)}\"), SV(\"{:#>{}}\"), input, 32);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(\"__(1, 10, 100), (42, 99, 0)___\"), SV(\"{:_^30n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(\"{(1, 10, 100)  , (42, 99, 0)   }\"), SV(\"{::14}\"), input);\r\n    check(SV(\"{(1, 10, 100)**, (42, 99, 0)***}\"), SV(\"{::*<14}\"), input);\r\n    check(SV(\"{_(1, 10, 100)_, _(42, 99, 0)__}\"), SV(\"{::_^14}\"), input);\r\n    check(SV(\"{##(1, 10, 100), ###(42, 99, 0)}\"), SV(\"{::#>14}\"), input);\r\n\r\n    check(SV(\"{(1, 10, 100)  , (42, 99, 0)   }\"), SV(\"{::{}}\"), input, 14);\r\n    check(SV(\"{(1, 10, 100)**, (42, 99, 0)***}\"), SV(\"{::*<{}}\"), input, 14);\r\n    check(SV(\"{_(1, 10, 100)_, _(42, 99, 0)__}\"), SV(\"{::_^{}}\"), input, 14);\r\n    check(SV(\"{##(1, 10, 100), ###(42, 99, 0)}\"), SV(\"{::#>{}}\"), input, 14);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"{1, 10, 100, 42, 99, 0}\"), SV(\"{::n}\"), input);\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{::m}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::s}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(\"^^{##(1, 10, 100), ###(42, 99, 0)}^^^\"), SV(\"{:^^37:#>14}\"), input);\r\n    check(SV(\"^^{##(1, 10, 100), ###(42, 99, 0)}^^^\"), SV(\"{:^^37:#>14}\"), input);\r\n    check(SV(\"^^{##(1, 10, 100), ###(42, 99, 0)}^^^\"), SV(\"{:^^{}:#>14}\"), input, 37);\r\n    check(SV(\"^^{##(1, 10, 100), ###(42, 99, 0)}^^^\"), SV(\"{:^^{}:#>{}}\"), input, 37, 14);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>5}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}:#>{}}\"), input, 37);\r\n}\r\n\r\n//\r\n// Adaptor\r\n//\r\n\r\nclass adaptor {\r\n    using adaptee = set<int>;\r\n\r\npublic:\r\n    using key_type = adaptee::key_type;\r\n    using iterator = adaptee::iterator;\r\n\r\n    iterator begin() {\r\n        return data_.begin();\r\n    }\r\n    iterator end() {\r\n        return data_.end();\r\n    }\r\n\r\n    explicit adaptor(set<int>&& data) : data_(move(data)) {}\r\n\r\nprivate:\r\n    adaptee data_;\r\n};\r\n\r\nstatic_assert(format_kind<adaptor> == range_format::set);\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_adaptor(TestFunction check, ExceptionTest check_exception) {\r\n    test_int<CharT>(check, check_exception, adaptor{set{1, 42, 2, -42}});\r\n}\r\n\r\n//\r\n// Driver\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid format_tests(TestFunction check, ExceptionTest check_exception) {\r\n    test_char<CharT>(check, check_exception);\r\n\r\n    if (same_as<CharT, wchar_t>) { // avoid testing twice\r\n        test_char_to_wchar(check, check_exception);\r\n    }\r\n    test_bool<CharT>(check, check_exception);\r\n    test_bool_multiset<CharT>(check, check_exception);\r\n    test_int<CharT>(check, check_exception);\r\n    test_floating_point<CharT>(check, check_exception);\r\n    test_pointer<CharT>(check, check_exception);\r\n    test_string<CharT>(check, check_exception);\r\n\r\n    test_status<CharT>(check, check_exception); // Has its own handler with its own parser\r\n\r\n    test_pair_tuple<CharT>(check, check_exception);\r\n    test_tuple_int<CharT>(check, check_exception);\r\n    test_tuple_int_int_int<CharT>(check, check_exception);\r\n\r\n    test_adaptor<CharT>(check, check_exception);\r\n}\r\n\r\nauto test_format = []<class CharT, class... Args>(basic_string_view<CharT> expected,\r\n                       type_identity_t<basic_format_string<CharT, Args...>> fmt, Args&&... args) {\r\n    basic_string<CharT> out = format(fmt, forward<Args>(args)...);\r\n    assert(out == expected);\r\n};\r\n\r\nauto test_format_exception = []<class CharT, class... Args>(string_view, basic_string_view<CharT>, Args&&...) {\r\n    // After P2216 most exceptions thrown by format become ill-formed.\r\n    // Therefore this test does nothing.\r\n};\r\n\r\nauto test_vformat = []<class CharT, class... Args>(\r\n                        basic_string_view<CharT> expected, basic_string_view<CharT> fmt, Args&&... args) {\r\n    basic_string<CharT> out = vformat(fmt, make_format_args<context_t<CharT>>(args...));\r\n    assert(out == expected);\r\n};\r\n\r\nauto test_vformat_exception = []<class CharT, class... Args>([[maybe_unused]] string_view what,\r\n                                  [[maybe_unused]] basic_string_view<CharT> fmt, [[maybe_unused]] Args&&... args) {\r\n    try {\r\n        static_cast<void>(vformat(fmt, make_format_args<context_t<CharT>>(args...)));\r\n        assert(false);\r\n    } catch (const format_error&) {\r\n    } catch (...) {\r\n        assert(false);\r\n    }\r\n};\r\n\r\nint main() {\r\n    format_tests<char>(test_format, test_format_exception);\r\n    format_tests<wchar_t>(test_format, test_format_exception);\r\n\r\n    format_tests<char>(test_vformat, test_vformat_exception);\r\n    format_tests<wchar_t>(test_vformat, test_vformat_exception);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_range_string/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_range_string/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n// derived from libc++'s test files:\r\n// * support/format.functions.common.h\r\n// * std/utilities/format/format.range/format.range.fmtstr/format.functions.tests.h\r\n// * std/utilities/format/format.range/format.range.fmtstr/format.functions.format.pass.cpp\r\n// * std/utilities/format/format.range/format.range.fmtstr/format.functions.vformat.pass.cpp\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <charconv>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <cstring>\r\n#include <format>\r\n#include <iterator>\r\n#include <list>\r\n#include <ranges>\r\n#include <string>\r\n#include <string_view>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <is_permissive.hpp>\r\n#include <test_format_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n#define CSTR(Str) TYPED_LITERAL(CharT, Str)\r\n#define STR(Str)  basic_string(CSTR(Str))\r\n#define SV(Str)   basic_string_view(CSTR(Str))\r\n\r\nnamespace detail {\r\n    consteval string_view get_format_types() noexcept {\r\n        return \"aAbBcdeEfFgGopPsxX?\";\r\n    }\r\n\r\n    template <class CharT, size_t N>\r\n    basic_string<CharT> get_colons() {\r\n        return basic_string<CharT>(N, CharT(':'));\r\n    }\r\n\r\n    template <class CharT, /*format_types types,*/ size_t N>\r\n    vector<basic_string<CharT>> fmt_invalid_types(string_view valid) {\r\n        vector<basic_string<CharT>> result;\r\n        if constexpr (is_permissive_v<CharT>) {\r\n            for (const char c : get_format_types()) {\r\n                if (valid.find(c) == string_view::npos) {\r\n                    result.push_back(format(SV(\"{{{}{}}}\"), get_colons<CharT, N>(), c));\r\n                }\r\n            }\r\n        } else {\r\n            // ranges::to is not available in C++20.\r\n            ranges::copy(get_format_types() | views::filter([&](char type) {\r\n                return valid.find(type) == string_view::npos;\r\n            }) | views::transform([&](char type) { return format(SV(\"{{{}{}}}\"), get_colons<CharT, N>(), type); }),\r\n                back_inserter(result));\r\n        }\r\n        return result;\r\n    }\r\n} // namespace detail\r\n\r\n// Creates format string for the invalid types.\r\n//\r\n// valid contains a list of types that are valid.\r\n//\r\n// The return value is a collection of basic_strings, instead of\r\n// basic_string_views since the values are temporaries.\r\ntemplate <class CharT>\r\nvector<basic_string<CharT>> fmt_invalid_types(string_view valid) {\r\n    return detail::fmt_invalid_types<CharT, 1>(valid);\r\n}\r\n\r\n// Like fmt_invalid_types but when the format spec is for an underlying formatter.\r\ntemplate <class CharT>\r\nvector<basic_string<CharT>> fmt_invalid_nested_types(string_view valid) {\r\n    return detail::fmt_invalid_types<CharT, 2>(valid);\r\n}\r\n\r\ntemplate <class T>\r\nstruct context {};\r\n\r\ntemplate <>\r\nstruct context<char> {\r\n    using type = format_context;\r\n};\r\n\r\ntemplate <>\r\nstruct context<wchar_t> {\r\n    using type = wformat_context;\r\n};\r\n\r\ntemplate <class T>\r\nusing context_t = context<T>::type;\r\n\r\n\r\n//\r\n// Types\r\n//\r\n\r\ntemplate <class Container>\r\nclass test_range_format_string {\r\npublic:\r\n    explicit test_range_format_string(Container str) : str_(move(str)) {}\r\n\r\n    Container::const_iterator begin() const {\r\n        return str_.begin();\r\n    }\r\n    Container::const_iterator end() const {\r\n        return str_.end();\r\n    }\r\n\r\nprivate:\r\n    Container str_;\r\n};\r\n\r\ntemplate <class Container>\r\nconstexpr range_format std::format_kind<test_range_format_string<Container>> = range_format::string;\r\n\r\ntemplate <class Container>\r\nclass test_range_format_debug_string {\r\npublic:\r\n    explicit test_range_format_debug_string(Container str) : str_(move(str)) {}\r\n\r\n    Container::const_iterator begin() const {\r\n        return str_.begin();\r\n    }\r\n    Container::const_iterator end() const {\r\n        return str_.end();\r\n    }\r\n\r\nprivate:\r\n    Container str_;\r\n};\r\n\r\ntemplate <class Container>\r\nconstexpr range_format std::format_kind<test_range_format_debug_string<Container>> = range_format::debug_string;\r\n\r\n//\r\n// String\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_string(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"hello\"), SV(\"{}\"), input);\r\n    check(SV(\"hello^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"hello^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"hello     \"), SV(\"{:10}\"), input);\r\n    check(SV(\"hello*****\"), SV(\"{:*<10}\"), input);\r\n    check(SV(\"__hello___\"), SV(\"{:_^10}\"), input);\r\n    check(SV(\":::::hello\"), SV(\"{::>10}\"), input);\r\n\r\n    check(SV(\"hello     \"), SV(\"{:{}}\"), input, 10);\r\n    check(SV(\"hello*****\"), SV(\"{:*<{}}\"), input, 10);\r\n    check(SV(\"__hello___\"), SV(\"{:_^{}}\"), input, 10);\r\n    check(SV(\":::::hello\"), SV(\"{::>{}}\"), input, 10);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check(SV(\"hel\"), SV(\"{:.3}\"), input);\r\n    check(SV(\"hel\"), SV(\"{:.{}}\"), input, 3);\r\n\r\n    check(SV(\"hel  \"), SV(\"{:5.3}\"), input);\r\n    check(SV(\"hel  \"), SV(\"{:{}.{}}\"), input, 5, 3);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"hello\"), SV(\"{:s}\"), input);\r\n    check(SV(\"\\\"hello\\\"\"), SV(\"{:?}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s?\")) {\r\n        check_exception(\"The type option contains an invalid value for a string formatting argument\", fmt, input);\r\n    }\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_string(TestFunction check, ExceptionTest check_exception) {\r\n    // libc++ uses different containers for contiguous and non-contiguous ranges.\r\n    basic_string<CharT> input = STR(\"hello\");\r\n    test_string<CharT>(check, check_exception, test_range_format_string<basic_string<CharT>>{input});\r\n    test_string<CharT>(check, check_exception, test_range_format_string<basic_string_view<CharT>>{input});\r\n    test_string<CharT>(\r\n        check, check_exception, test_range_format_string<list<CharT>>{list<CharT>{input.begin(), input.end()}});\r\n}\r\n\r\n//\r\n// String range\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_range_string(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(R\"([Hello, world])\"), SV(\"{}\"), input);\r\n    check(SV(R\"([Hello, world]^42)\"), SV(\"{}^42\"), input);\r\n    check(SV(R\"([Hello, world]^42)\"), SV(\"{:}^42\"), input);\r\n\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(R\"([Hello, world]     )\"), SV(\"{:19}\"), input);\r\n    check(SV(R\"([Hello, world]*****)\"), SV(\"{:*<19}\"), input);\r\n    check(SV(R\"(__[Hello, world]___)\"), SV(\"{:_^19}\"), input);\r\n    check(SV(R\"(#####[Hello, world])\"), SV(\"{:#>19}\"), input);\r\n\r\n    check(SV(R\"([Hello, world]     )\"), SV(\"{:{}}\"), input, 19);\r\n    check(SV(R\"([Hello, world]*****)\"), SV(\"{:*<{}}\"), input, 19);\r\n    check(SV(R\"(__[Hello, world]___)\"), SV(\"{:_^{}}\"), input, 19);\r\n    check(SV(R\"(#####[Hello, world])\"), SV(\"{:#>{}}\"), input, 19);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(R\"(_Hello, world_)\"), SV(\"{:_^14n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(R\"([Hello   , world   ])\"), SV(\"{::8}\"), input);\r\n    check(SV(R\"([Hello***, world***])\"), SV(\"{::*<8}\"), input);\r\n    check(SV(R\"([_Hello__, _world__])\"), SV(\"{::_^8}\"), input);\r\n    check(SV(R\"([:::Hello, :::world])\"), SV(\"{:::>8}\"), input);\r\n\r\n    check(SV(R\"([Hello   , world   ])\"), SV(\"{::{}}\"), input, 8);\r\n    check(SV(R\"([Hello***, world***])\"), SV(\"{::*<{}}\"), input, 8);\r\n    check(SV(R\"([_Hello__, _world__])\"), SV(\"{::_^{}}\"), input, 8);\r\n    check(SV(R\"([:::Hello, :::world])\"), SV(\"{:::>{}}\"), input, 8);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check(SV(R\"([Hel, wor])\"), SV(\"{::.3}\"), input);\r\n\r\n    check(SV(R\"([Hel, wor])\"), SV(\"{::.{}}\"), input, 3);\r\n\r\n    check_exception(\"The precision option does not contain a value or an argument index\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"s?\")) {\r\n        check_exception(\"The type option contains an invalid value for a string formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^25::>8}\"), input);\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^{}::>8}\"), input, 25);\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^{}::>{}}\"), input, 25, 8);\r\n\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^25::>8}\"), input);\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^{}::>8}\"), input, 25);\r\n    check(SV(R\"(^^[:::Hello, :::world]^^^)\"), SV(\"{:^^{}::>{}}\"), input, 25, 8);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>8}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 25);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_range_string(TestFunction check, ExceptionTest check_exception) {\r\n    // libc++ uses different containers for contiguous and non-contiguous ranges.\r\n    array input{STR(\"Hello\"), STR(\"world\")};\r\n    test_range_string<CharT>(check, check_exception,\r\n        array{test_range_format_string<basic_string<CharT>>{input[0]},\r\n            test_range_format_string<basic_string<CharT>>{input[1]}});\r\n    test_range_string<CharT>(check, check_exception,\r\n        array{test_range_format_string<basic_string_view<CharT>>{input[0]},\r\n            test_range_format_string<basic_string_view<CharT>>{input[1]}});\r\n    test_range_string<CharT>(check, check_exception,\r\n        array{test_range_format_string<list<CharT>>{list<CharT>{input[0].begin(), input[0].end()}},\r\n            test_range_format_string<list<CharT>>{list<CharT>{input[1].begin(), input[1].end()}}});\r\n    test_range_string<CharT>(check, check_exception,\r\n        list{test_range_format_string<list<CharT>>{list<CharT>{input[0].begin(), input[0].end()}},\r\n            test_range_format_string<list<CharT>>{list<CharT>{input[1].begin(), input[1].end()}}});\r\n}\r\n\r\n//\r\n// Debug string\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_debug_string(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    check(SV(\"\\\"hello\\\"\"), SV(\"{}\"), input);\r\n    check(SV(\"\\\"hello\\\"^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"\\\"hello\\\"^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"\\\"hello\\\"     \"), SV(\"{:12}\"), input);\r\n    check(SV(\"\\\"hello\\\"*****\"), SV(\"{:*<12}\"), input);\r\n    check(SV(\"__\\\"hello\\\"___\"), SV(\"{:_^12}\"), input);\r\n    check(SV(\":::::\\\"hello\\\"\"), SV(\"{::>12}\"), input);\r\n\r\n    check(SV(\"\\\"hello\\\"     \"), SV(\"{:{}}\"), input, 12);\r\n    check(SV(\"\\\"hello\\\"*****\"), SV(\"{:*<{}}\"), input, 12);\r\n    check(SV(\"__\\\"hello\\\"___\"), SV(\"{:_^{}}\"), input, 12);\r\n    check(SV(\":::::\\\"hello\\\"\"), SV(\"{::>{}}\"), input, 12);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check(SV(\"\\\"he\"), SV(\"{:.3}\"), input);\r\n    check(SV(\"\\\"he\"), SV(\"{:.{}}\"), input, 3);\r\n\r\n    check(SV(\"\\\"he  \"), SV(\"{:5.3}\"), input);\r\n    check(SV(\"\\\"he  \"), SV(\"{:{}.{}}\"), input, 5, 3);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"\\\"hello\\\"\"), SV(\"{:s}\"), input); // escape overrides the type option s\r\n    check(SV(\"\\\"hello\\\"\"), SV(\"{:?}\"), input);\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s?\")) {\r\n        check_exception(\"The type option contains an invalid value for a string formatting argument\", fmt, input);\r\n    }\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_debug_string(TestFunction check, ExceptionTest check_exception) {\r\n    // libc++ uses different containers for contiguous and non-contiguous ranges.\r\n    basic_string<CharT> input = STR(\"hello\");\r\n    test_debug_string<CharT>(check, check_exception, test_range_format_debug_string<basic_string<CharT>>{input});\r\n    test_debug_string<CharT>(check, check_exception, test_range_format_debug_string<basic_string_view<CharT>>{input});\r\n    test_debug_string<CharT>(\r\n        check, check_exception, test_range_format_debug_string<list<CharT>>{list<CharT>{input.begin(), input.end()}});\r\n}\r\n\r\n//\r\n// Debug string range\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_range_debug_string(TestFunction check, ExceptionTest check_exception, auto&& input) {\r\n    // ***** underlying has no format-spec\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(R\"([\"Hello\", \"world\"]     )\"), SV(\"{:23}\"), input);\r\n    check(SV(R\"([\"Hello\", \"world\"]*****)\"), SV(\"{:*<23}\"), input);\r\n    check(SV(R\"(__[\"Hello\", \"world\"]___)\"), SV(\"{:_^23}\"), input);\r\n    check(SV(R\"(#####[\"Hello\", \"world\"])\"), SV(\"{:#>23}\"), input);\r\n\r\n    check(SV(R\"([\"Hello\", \"world\"]     )\"), SV(\"{:{}}\"), input, 23);\r\n    check(SV(R\"([\"Hello\", \"world\"]*****)\"), SV(\"{:*<{}}\"), input, 23);\r\n    check(SV(R\"(__[\"Hello\", \"world\"]___)\"), SV(\"{:_^{}}\"), input, 23);\r\n    check(SV(R\"(#####[\"Hello\", \"world\"])\"), SV(\"{:#>{}}\"), input, 23);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** n\r\n    check(SV(R\"(_\"Hello\", \"world\"_)\"), SV(\"{:_^18n}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check_exception(\"Type s requires character type as formatting argument\", SV(\"{:s}\"), input);\r\n    check_exception(\"Type ?s requires character type as formatting argument\", SV(\"{:?s}\"), input);\r\n\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_types<CharT>(\"s\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\", fmt, input);\r\n    }\r\n\r\n    // ***** Only underlying has a format-spec\r\n    check(SV(R\"([\"Hello\"   , \"world\"   ])\"), SV(\"{::10}\"), input);\r\n    check(SV(R\"([\"Hello\"***, \"world\"***])\"), SV(\"{::*<10}\"), input);\r\n    check(SV(R\"([_\"Hello\"__, _\"world\"__])\"), SV(\"{::_^10}\"), input);\r\n    check(SV(R\"([:::\"Hello\", :::\"world\"])\"), SV(\"{:::>10}\"), input);\r\n\r\n    check(SV(R\"([\"Hello\"   , \"world\"   ])\"), SV(\"{::{}}\"), input, 10);\r\n    check(SV(R\"([\"Hello\"***, \"world\"***])\"), SV(\"{::*<{}}\"), input, 10);\r\n    check(SV(R\"([_\"Hello\"__, _\"world\"__])\"), SV(\"{::_^{}}\"), input, 10);\r\n    check(SV(R\"([:::\"Hello\", :::\"world\"])\"), SV(\"{:::>{}}\"), input, 10);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{::}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::{<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::-}\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{::05}\"), input);\r\n\r\n    // *** precision ***\r\n    check(SV(R\"([\"He, \"wo])\"), SV(\"{::.3}\"), input);\r\n\r\n    check(SV(R\"([\"He, \"wo])\"), SV(\"{::.{}}\"), input, 3);\r\n\r\n    check_exception(\"The precision option does not contain a value or an argument index\", SV(\"{::.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{::L}\"), input);\r\n\r\n    // *** type ***\r\n    for (basic_string_view<CharT> fmt : fmt_invalid_nested_types<CharT>(\"s?\")) {\r\n        check_exception(\"The type option contains an invalid value for a string formatting argument\", fmt, input);\r\n    }\r\n\r\n    // ***** Both have a format-spec\r\n    check(SV(R\"(^^[:::\"Hello\", :::\"world\"]^^^)\"), SV(\"{:^^29::>10}\"), input);\r\n    check(SV(R\"(^^[:::\"Hello\", :::\"world\"]^^^)\"), SV(\"{:^^{}::>10}\"), input, 29);\r\n    check(SV(R\"(^^[:::\"Hello\", :::\"world\"]^^^)\"), SV(\"{:^^{}::>{}}\"), input, 29, 10);\r\n\r\n    check(SV(R\"(^^[:::\"Hello\", :::\"world\"]^^^)\"), SV(\"{:^^29::>10}\"), input);\r\n    check(SV(R\"(^^[:::\"Hello\", :::\"world\"]^^^)\"), SV(\"{:^^{}::>10}\"), input, 29);\r\n    check(SV(R\"(^^[:::\"Hello\", :::\"world\"]^^^)\"), SV(\"{:^^{}::>{}}\"), input, 29, 10);\r\n\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>10}\"), input);\r\n    check_exception(\r\n        \"The argument index value is too large for the number of arguments supplied\", SV(\"{:^^{}::>{}}\"), input, 29);\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_range_debug_string(TestFunction check, ExceptionTest check_exception) {\r\n    // libc++ uses different containers for contiguous and non-contiguous ranges.\r\n    array input{STR(\"Hello\"), STR(\"world\")};\r\n    test_range_debug_string<CharT>(check, check_exception,\r\n        array{test_range_format_debug_string<basic_string<CharT>>{input[0]},\r\n            test_range_format_debug_string<basic_string<CharT>>{input[1]}});\r\n    test_range_debug_string<CharT>(check, check_exception,\r\n        array{test_range_format_debug_string<basic_string_view<CharT>>{input[0]},\r\n            test_range_format_debug_string<basic_string_view<CharT>>{input[1]}});\r\n    test_range_debug_string<CharT>(check, check_exception,\r\n        array{test_range_format_debug_string<list<CharT>>{list<CharT>{input[0].begin(), input[0].end()}},\r\n            test_range_format_debug_string<list<CharT>>{list<CharT>{input[1].begin(), input[1].end()}}});\r\n    test_range_debug_string<CharT>(check, check_exception,\r\n        list{test_range_format_debug_string<list<CharT>>{list<CharT>{input[0].begin(), input[0].end()}},\r\n            test_range_format_debug_string<list<CharT>>{list<CharT>{input[1].begin(), input[1].end()}}});\r\n}\r\n\r\n//\r\n// Driver\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid format_tests(TestFunction check, ExceptionTest check_exception) {\r\n    test_string<CharT>(check, check_exception);\r\n    test_range_string<CharT>(check, check_exception);\r\n\r\n    test_debug_string<CharT>(check, check_exception);\r\n    test_range_debug_string<CharT>(check, check_exception);\r\n}\r\n\r\nauto test_format = []<class CharT, class... Args>(basic_string_view<CharT> expected,\r\n                       type_identity_t<basic_format_string<CharT, Args...>> fmt, Args&&... args) {\r\n    basic_string<CharT> out = format(fmt, forward<Args>(args)...);\r\n    assert(out == expected);\r\n};\r\n\r\nauto test_format_exception = []<class CharT, class... Args>(string_view, basic_string_view<CharT>, Args&&...) {\r\n    // After P2216 most exceptions thrown by format become ill-formed.\r\n    // Therefore this test does nothing.\r\n};\r\n\r\nauto test_vformat = []<class CharT, class... Args>(\r\n                        basic_string_view<CharT> expected, basic_string_view<CharT> fmt, Args&&... args) {\r\n    basic_string<CharT> out = vformat(fmt, make_format_args<context_t<CharT>>(args...));\r\n    assert(out == expected);\r\n};\r\n\r\nauto test_vformat_exception = []<class CharT, class... Args>([[maybe_unused]] string_view what,\r\n                                  [[maybe_unused]] basic_string_view<CharT> fmt, [[maybe_unused]] Args&&... args) {\r\n    try {\r\n        static_cast<void>(vformat(fmt, make_format_args<context_t<CharT>>(args...)));\r\n        assert(false);\r\n    } catch (const format_error&) {\r\n    } catch (...) {\r\n        assert(false);\r\n    }\r\n};\r\n\r\nint main() {\r\n    format_tests<char>(test_format, test_format_exception);\r\n    format_tests<wchar_t>(test_format, test_format_exception);\r\n\r\n    format_tests<char>(test_vformat, test_vformat_exception);\r\n    format_tests<wchar_t>(test_vformat, test_vformat_exception);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_range_string_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_range_string_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <format>\r\n#include <ranges>\r\n\r\n#include <range_algorithm_support.hpp>\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct based_huge_iterator {\r\n    const char* base_;\r\n    _Signed128 offset_;\r\n\r\n    using iterator_category = contiguous_iterator_tag;\r\n    using difference_type   = _Signed128;\r\n    using value_type        = char;\r\n\r\n    const char& operator*() const noexcept {\r\n        return base_[static_cast<ptrdiff_t>(offset_)];\r\n    }\r\n\r\n    based_huge_iterator& operator++() noexcept {\r\n        ++offset_;\r\n        return *this;\r\n    }\r\n    based_huge_iterator operator++(int) noexcept {\r\n        auto old = *this;\r\n        ++*this;\r\n        return old;\r\n    }\r\n\r\n    based_huge_iterator& operator--() noexcept {\r\n        --offset_;\r\n        return *this;\r\n    }\r\n    based_huge_iterator operator--(int) noexcept {\r\n        auto old = *this;\r\n        --*this;\r\n        return old;\r\n    }\r\n\r\n    based_huge_iterator& operator+=(difference_type n) noexcept {\r\n        offset_ += n;\r\n        return *this;\r\n    }\r\n\r\n    based_huge_iterator& operator-=(difference_type n) noexcept {\r\n        offset_ -= n;\r\n        return *this;\r\n    }\r\n\r\n    const char* operator->() const noexcept {\r\n        return base_ + static_cast<ptrdiff_t>(offset_);\r\n    }\r\n\r\n    const char& operator[](difference_type n) const noexcept {\r\n        return base_[static_cast<ptrdiff_t>(offset_ + n)];\r\n    }\r\n\r\n    friend based_huge_iterator operator+(based_huge_iterator i, difference_type n) noexcept {\r\n        return {i.base_, i.offset_ + n};\r\n    }\r\n    friend based_huge_iterator operator+(difference_type n, based_huge_iterator i) noexcept {\r\n        return {i.base_, i.offset_ + n};\r\n    }\r\n\r\n    friend based_huge_iterator operator-(based_huge_iterator i, difference_type n) noexcept {\r\n        return {i.base_, i.offset_ - n};\r\n    }\r\n    friend difference_type operator-(based_huge_iterator i, based_huge_iterator j) noexcept {\r\n        assert(i.base_ == j.base_);\r\n        return i.offset_ - j.offset_;\r\n    }\r\n\r\n    friend auto operator<=>(const based_huge_iterator&, const based_huge_iterator&) = default;\r\n};\r\n\r\nstruct based_huge_view : ranges::view_interface<based_huge_view> {\r\n    const char* base_;\r\n    _Signed128 size_;\r\n\r\n    based_huge_iterator begin() const noexcept {\r\n        return {base_, 0};\r\n    }\r\n\r\n    based_huge_iterator end() const noexcept {\r\n        return {base_, size_};\r\n    }\r\n};\r\n\r\nstatic_assert(ranges::contiguous_range<based_huge_view>);\r\n\r\nvoid test_case_invalid_range_size() {\r\n    based_huge_view v{.base_ = \"\", .size_ = static_cast<size_t>(PTRDIFF_MAX) + 1};\r\n    (void) format(\"{:s}\", v);\r\n}\r\n\r\nint main(int argc, char** argv) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#ifdef _DEBUG\r\n    exec.add_death_tests({\r\n        test_case_invalid_range_size,\r\n    });\r\n#endif // defined(_DEBUG)\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_tuple/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_tuple/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n//===----------------------------------------------------------------------===//\r\n//\r\n// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n// See https://llvm.org/LICENSE.txt for license information.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n//\r\n//===----------------------------------------------------------------------===//\r\n\r\n// derived from libc++'s test files:\r\n// * std/utilities/format/format.tuple/format.functions.tests.h\r\n// * std/utilities/format/format.tuple/format.functions.format.pass.cpp\r\n// * std/utilities/format/format.tuple/format.functions.vformat.pass.cpp\r\n\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <format>\r\n#include <iterator>\r\n#include <string>\r\n#include <string_view>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <test_format_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n#define CSTR(Str) TYPED_LITERAL(CharT, Str)\r\n#define STR(Str)  basic_string(CSTR(Str))\r\n#define SV(Str)   basic_string_view(CSTR(Str))\r\n\r\nenum class color { black, red, gold };\r\n\r\ntemplate <class CharT>\r\nstruct std::formatter<color, CharT> : std::formatter<basic_string_view<CharT>, CharT> {\r\n    static constexpr basic_string_view<CharT> color_names[] = {SV(\"black\"), SV(\"red\"), SV(\"gold\")};\r\n    auto format(color c, auto& ctx) const {\r\n        return formatter<basic_string_view<CharT>, CharT>::format(color_names[static_cast<int>(c)], ctx);\r\n    }\r\n};\r\n\r\n//\r\n// Generic tests for a tuple and pair with two elements.\r\n//\r\ntemplate <class CharT, class TestFunction, class ExceptionTest, class TupleOrPair>\r\nvoid test_tuple_or_pair_int_int(TestFunction check, ExceptionTest check_exception, TupleOrPair&& input) {\r\n    check(SV(\"(42, 99)\"), SV(\"{}\"), input);\r\n    check(SV(\"(42, 99)^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"(42, 99)^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"(42, 99)     \"), SV(\"{:13}\"), input);\r\n    check(SV(\"(42, 99)*****\"), SV(\"{:*<13}\"), input);\r\n    check(SV(\"__(42, 99)___\"), SV(\"{:_^13}\"), input);\r\n    check(SV(\"#####(42, 99)\"), SV(\"{:#>13}\"), input);\r\n\r\n    check(SV(\"(42, 99)     \"), SV(\"{:{}}\"), input, 13);\r\n    check(SV(\"(42, 99)*****\"), SV(\"{:*<{}}\"), input, 13);\r\n    check(SV(\"__(42, 99)___\"), SV(\"{:_^{}}\"), input, 13);\r\n    check(SV(\"#####(42, 99)\"), SV(\"{:#>{}}\"), input, 13);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"__42: 99___\"), SV(\"{:_^11m}\"), input);\r\n    check(SV(\"__42, 99___\"), SV(\"{:_^11n}\"), input);\r\n\r\n    for (CharT c : SV(\"aAbBcdeEfFgGopPsxX?\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\",\r\n            basic_string_view{STR(\"{:\") + c + STR(\"}\")}, input);\r\n    }\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest, class TupleOrPair>\r\nvoid test_tuple_or_pair_int_string(TestFunction check, ExceptionTest check_exception, TupleOrPair&& input) {\r\n    check(SV(\"(42, \\\"hello\\\")\"), SV(\"{}\"), input);\r\n    check(SV(\"(42, \\\"hello\\\")^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"(42, \\\"hello\\\")^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"(42, \\\"hello\\\")     \"), SV(\"{:18}\"), input);\r\n    check(SV(\"(42, \\\"hello\\\")*****\"), SV(\"{:*<18}\"), input);\r\n    check(SV(\"__(42, \\\"hello\\\")___\"), SV(\"{:_^18}\"), input);\r\n    check(SV(\"#####(42, \\\"hello\\\")\"), SV(\"{:#>18}\"), input);\r\n\r\n    check(SV(\"(42, \\\"hello\\\")     \"), SV(\"{:{}}\"), input, 18);\r\n    check(SV(\"(42, \\\"hello\\\")*****\"), SV(\"{:*<{}}\"), input, 18);\r\n    check(SV(\"__(42, \\\"hello\\\")___\"), SV(\"{:_^{}}\"), input, 18);\r\n    check(SV(\"#####(42, \\\"hello\\\")\"), SV(\"{:#>{}}\"), input, 18);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"__42: \\\"hello\\\"___\"), SV(\"{:_^16m}\"), input);\r\n    check(SV(\"__42, \\\"hello\\\"___\"), SV(\"{:_^16n}\"), input);\r\n\r\n    for (CharT c : SV(\"aAbBcdeEfFgGopPsxX?\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\",\r\n            basic_string_view{STR(\"{:\") + c + STR(\"}\")}, input);\r\n    }\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class TupleOrPair>\r\nvoid test_escaping(TestFunction check, TupleOrPair&& input) {\r\n    static_assert(same_as<remove_cvref_t<decltype(get<0>(input))>, CharT>);\r\n    static_assert(same_as<remove_cvref_t<decltype(get<1>(input))>, basic_string<CharT>>);\r\n\r\n    check(SV(R\"(('*', \"\"))\"), SV(\"{}\"), input);\r\n\r\n    // Char\r\n    get<0>(input) = CharT('\\t');\r\n    check(SV(R\"(('\\t', \"\"))\"), SV(\"{}\"), input);\r\n    get<0>(input) = CharT('\\n');\r\n    check(SV(R\"(('\\n', \"\"))\"), SV(\"{}\"), input);\r\n    get<0>(input) = CharT('\\0');\r\n    check(SV(R\"(('\\u{0}', \"\"))\"), SV(\"{}\"), input);\r\n\r\n    // String\r\n    if constexpr (is_same_v<CharT, wchar_t>) {\r\n        get<0>(input) = L'*';\r\n        get<1>(input) = L\"hell\\u00d6\"; // U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS\r\n        check(L\"('*', \\\"hell\\u00d6\\\")\"sv, L\"{}\"sv, input);\r\n        check(L\"#('*', \\\"hell\\u00d6\\\")#\"sv, L\"{:#^16}\"sv, input);\r\n\r\n        get<1>(input) = L\"hell\\uff2f\"; // U+FF2F FULLWIDTH LATIN CAPITAL LETTER O\r\n        check(L\"('*', \\\"hell\\uff2f\\\")\"sv, L\"{}\"sv, input);\r\n        check(L\"('*', \\\"hell\\uff2f\\\")#\"sv, L\"{:#^16}\"sv, input);\r\n    }\r\n}\r\n\r\n//\r\n// pair tests\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_pair_int_int(TestFunction check, ExceptionTest check_exception) {\r\n    test_tuple_or_pair_int_int<CharT>(check, check_exception, make_pair(42, 99));\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_pair_int_string(TestFunction check, ExceptionTest check_exception) {\r\n    test_tuple_or_pair_int_string<CharT>(check, check_exception, make_pair(42, SV(\"hello\")));\r\n    test_tuple_or_pair_int_string<CharT>(check, check_exception, make_pair(42, STR(\"hello\")));\r\n    test_tuple_or_pair_int_string<CharT>(check, check_exception, make_pair(42, CSTR(\"hello\")));\r\n}\r\n\r\n//\r\n// tuple tests\r\n//\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_tuple_int(TestFunction check, ExceptionTest check_exception) {\r\n    auto input = make_tuple(42);\r\n\r\n    check(SV(\"(42)\"), SV(\"{}\"), input);\r\n    check(SV(\"(42)^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"(42)^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"(42)     \"), SV(\"{:9}\"), input);\r\n    check(SV(\"(42)*****\"), SV(\"{:*<9}\"), input);\r\n    check(SV(\"__(42)___\"), SV(\"{:_^9}\"), input);\r\n    check(SV(\"#####(42)\"), SV(\"{:#>9}\"), input);\r\n\r\n    check(SV(\"(42)     \"), SV(\"{:{}}\"), input, 9);\r\n    check(SV(\"(42)*****\"), SV(\"{:*<{}}\"), input, 9);\r\n    check(SV(\"__(42)___\"), SV(\"{:_^{}}\"), input, 9);\r\n    check(SV(\"#####(42)\"), SV(\"{:#>{}}\"), input, 9);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check(SV(\"__42___\"), SV(\"{:_^7n}\"), input);\r\n\r\n    for (CharT c : SV(\"aAbBcdeEfFgGopPsxX?\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\",\r\n            basic_string_view{STR(\"{:\") + c + STR(\"}\")}, input);\r\n    }\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_tuple_int_string_color(TestFunction check, ExceptionTest check_exception) {\r\n    const auto input = make_tuple(42, SV(\"hello\"), color::red);\r\n\r\n    check(SV(\"(42, \\\"hello\\\", \\\"red\\\")\"), SV(\"{}\"), input);\r\n    check(SV(\"(42, \\\"hello\\\", \\\"red\\\")^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"(42, \\\"hello\\\", \\\"red\\\")^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"(42, \\\"hello\\\", \\\"red\\\")     \"), SV(\"{:25}\"), input);\r\n    check(SV(\"(42, \\\"hello\\\", \\\"red\\\")*****\"), SV(\"{:*<25}\"), input);\r\n    check(SV(\"__(42, \\\"hello\\\", \\\"red\\\")___\"), SV(\"{:_^25}\"), input);\r\n    check(SV(\"#####(42, \\\"hello\\\", \\\"red\\\")\"), SV(\"{:#>25}\"), input);\r\n\r\n    check(SV(\"(42, \\\"hello\\\", \\\"red\\\")     \"), SV(\"{:{}}\"), input, 25);\r\n    check(SV(\"(42, \\\"hello\\\", \\\"red\\\")*****\"), SV(\"{:*<{}}\"), input, 25);\r\n    check(SV(\"__(42, \\\"hello\\\", \\\"red\\\")___\"), SV(\"{:_^{}}\"), input, 25);\r\n    check(SV(\"#####(42, \\\"hello\\\", \\\"red\\\")\"), SV(\"{:#>{}}\"), input, 25);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** type ***\r\n    check_exception(\"Type m requires a pair or a tuple with two elements\", SV(\"{:m}\"), input);\r\n    check(SV(\"__42, \\\"hello\\\", \\\"red\\\"___\"), SV(\"{:_^23n}\"), input);\r\n\r\n    for (CharT c : SV(\"aAbBcdeEfFgGopPsxX?\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\",\r\n            basic_string_view{STR(\"{:\") + c + STR(\"}\")}, input);\r\n    }\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_tuple_int_int(TestFunction check, ExceptionTest check_exception) {\r\n    test_tuple_or_pair_int_int<CharT>(check, check_exception, make_tuple(42, 99));\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid test_tuple_int_string(TestFunction check, ExceptionTest check_exception) {\r\n    test_tuple_or_pair_int_string<CharT>(check, check_exception, make_tuple(42, SV(\"hello\")));\r\n    test_tuple_or_pair_int_string<CharT>(check, check_exception, make_tuple(42, STR(\"hello\")));\r\n    test_tuple_or_pair_int_string<CharT>(check, check_exception, make_tuple(42, CSTR(\"hello\")));\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest, class Nested>\r\nvoid test_nested(TestFunction check, ExceptionTest check_exception, Nested&& input) {\r\n    // N4971 [format.formatter.spec]/2\r\n    //   A debug-enabled specialization of formatter additionally provides a\r\n    //   public, constexpr, non-static member function set_debug_format()\r\n    //   which modifies the state of the formatter to be as if the type of the\r\n    //   std-format-spec parsed by the last call to parse were ?.\r\n    // pair and tuple are not debug-enabled specializations so the\r\n    // set_debug_format is not propagated. The paper\r\n    //   P2733 Fix handling of empty specifiers in format\r\n    // addressed this.\r\n\r\n    check(SV(\"(42, (\\\"hello\\\", \\\"red\\\"))\"), SV(\"{}\"), input);\r\n    check(SV(\"(42, (\\\"hello\\\", \\\"red\\\"))^42\"), SV(\"{}^42\"), input);\r\n    check(SV(\"(42, (\\\"hello\\\", \\\"red\\\"))^42\"), SV(\"{:}^42\"), input);\r\n\r\n    // *** align-fill & width ***\r\n    check(SV(\"(42, (\\\"hello\\\", \\\"red\\\"))     \"), SV(\"{:27}\"), input);\r\n    check(SV(\"(42, (\\\"hello\\\", \\\"red\\\"))*****\"), SV(\"{:*<27}\"), input);\r\n    check(SV(\"__(42, (\\\"hello\\\", \\\"red\\\"))___\"), SV(\"{:_^27}\"), input);\r\n    check(SV(\"#####(42, (\\\"hello\\\", \\\"red\\\"))\"), SV(\"{:#>27}\"), input);\r\n\r\n    check(SV(\"(42, (\\\"hello\\\", \\\"red\\\"))     \"), SV(\"{:{}}\"), input, 27);\r\n    check(SV(\"(42, (\\\"hello\\\", \\\"red\\\"))*****\"), SV(\"{:*<{}}\"), input, 27);\r\n    check(SV(\"__(42, (\\\"hello\\\", \\\"red\\\"))___\"), SV(\"{:_^{}}\"), input, 27);\r\n    check(SV(\"#####(42, (\\\"hello\\\", \\\"red\\\"))\"), SV(\"{:#>{}}\"), input, 27);\r\n\r\n    check_exception(\"The format string contains an invalid escape sequence\", SV(\"{:}<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{:{<}\"), input);\r\n    check_exception(\"The fill option contains an invalid value\", SV(\"{::<}\"), input);\r\n\r\n    // *** sign ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:-}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:+}\"), input);\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{: }\"), input);\r\n\r\n    // *** alternate form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:#}\"), input);\r\n\r\n    // *** zero-padding ***\r\n    check_exception(\"The width option should not have a leading zero\", SV(\"{:0}\"), input);\r\n\r\n    // *** precision ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:.}\"), input);\r\n\r\n    // *** locale-specific form ***\r\n    check_exception(\"The format specifier should consume the input or end with a '}'\", SV(\"{:L}\"), input);\r\n\r\n    // *** type ***\r\n    check(SV(\"__42: (\\\"hello\\\", \\\"red\\\")___\"), SV(\"{:_^25m}\"), input);\r\n    check(SV(\"__42, (\\\"hello\\\", \\\"red\\\")___\"), SV(\"{:_^25n}\"), input);\r\n\r\n    for (CharT c : SV(\"aAbBcdeEfFgGopPsxX?\")) {\r\n        check_exception(\"The format specifier should consume the input or end with a '}'\",\r\n            basic_string_view{STR(\"{:\") + c + STR(\"}\")}, input);\r\n    }\r\n}\r\n\r\ntemplate <class CharT, class TestFunction, class ExceptionTest>\r\nvoid run_tests(TestFunction check, ExceptionTest check_exception) {\r\n    test_pair_int_int<CharT>(check, check_exception);\r\n    test_pair_int_string<CharT>(check, check_exception);\r\n\r\n    test_tuple_int<CharT>(check, check_exception);\r\n    test_tuple_int_int<CharT>(check, check_exception);\r\n    test_tuple_int_string<CharT>(check, check_exception);\r\n    test_tuple_int_string_color<CharT>(check, check_exception);\r\n\r\n    test_nested<CharT>(check, check_exception, make_pair(42, make_pair(SV(\"hello\"), color::red)));\r\n    test_nested<CharT>(check, check_exception, make_pair(42, make_tuple(SV(\"hello\"), color::red)));\r\n    test_nested<CharT>(check, check_exception, make_tuple(42, make_pair(SV(\"hello\"), color::red)));\r\n    test_nested<CharT>(check, check_exception, make_tuple(42, make_tuple(SV(\"hello\"), color::red)));\r\n\r\n    test_escaping<CharT>(check, make_pair(CharT('*'), STR(\"\")));\r\n    test_escaping<CharT>(check, make_tuple(CharT('*'), STR(\"\")));\r\n\r\n    // Test const ref-qualified types.\r\n    check(SV(\"(42)\"), SV(\"{}\"), tuple<int>{42});\r\n    check(SV(\"(42)\"), SV(\"{}\"), tuple<const int>{42});\r\n\r\n    int answer = 42;\r\n    check(SV(\"(42)\"), SV(\"{}\"), tuple<int&>{answer});\r\n    check(SV(\"(42)\"), SV(\"{}\"), tuple<const int&>{answer});\r\n\r\n    check(SV(\"(42)\"), SV(\"{}\"), tuple<int&&>{42});\r\n    check(SV(\"(42)\"), SV(\"{}\"), tuple<const int&&>{42});\r\n}\r\n\r\ntemplate <class>\r\nstruct format_context_for_impl {};\r\n\r\ntemplate <>\r\nstruct format_context_for_impl<char> {\r\n    using type = format_context;\r\n};\r\n\r\ntemplate <>\r\nstruct format_context_for_impl<wchar_t> {\r\n    using type = wformat_context;\r\n};\r\n\r\ntemplate <class CharT>\r\nusing format_context_for = format_context_for_impl<CharT>::type;\r\n\r\nauto test_format = []<class CharT, class... Args>(basic_string_view<CharT> expected,\r\n                       type_identity_t<basic_format_string<CharT, Args...>> fmt, Args&&... args) {\r\n    auto out = format(fmt, forward<Args>(args)...);\r\n    assert(out == expected);\r\n};\r\n\r\nauto test_format_exception = []<class CharT, class... Args>(string_view, basic_string_view<CharT>, Args&&...) {\r\n    // After P2216 most exceptions thrown by format become ill-formed.\r\n    // Therefore this test does nothing.\r\n    // A basic ill-formed test is done in format.verify.cpp\r\n    // The exceptions are tested by other functions that don't use the basic-format-string as fmt argument.\r\n};\r\n\r\nauto test_vformat = []<class CharT, class... Args>(\r\n                        basic_string_view<CharT> expected, basic_string_view<CharT> fmt, Args&&... args) {\r\n    auto out = vformat(fmt, make_format_args<format_context_for<CharT>>(args...));\r\n    assert(out == expected);\r\n};\r\n\r\nauto test_vformat_exception = []<class CharT, class... Args>([[maybe_unused]] string_view what,\r\n                                  [[maybe_unused]] basic_string_view<CharT> fmt, [[maybe_unused]] Args&&... args) {\r\n    try {\r\n        (void) vformat(fmt, make_format_args<format_context_for<CharT>>(args...));\r\n        assert(false);\r\n    } catch (const format_error&) {\r\n    }\r\n};\r\n\r\n// Also test that functions taking non-constructible basic_format_context specializations can be well-formed,\r\n// despite the fact that they can't actually be called.\r\n\r\ntemplate <class CharT>\r\nvoid test_unconstructible_format_context_for_raw_ptr(basic_format_context<CharT*, CharT>& ctx) { // COMPILE-ONLY\r\n    formatter<tuple<basic_string<CharT>>, CharT> tuple_formatter;\r\n    tuple_formatter.format(make_tuple(basic_string<CharT>(STR(\"42\"))), ctx);\r\n}\r\n\r\ntemplate <class CharT>\r\nvoid test_unconstructible_format_context_for_back_inserter(\r\n    basic_format_context<back_insert_iterator<basic_string<CharT>>, CharT>& ctx) { // COMPILE-ONLY\r\n    formatter<tuple<basic_string<CharT>>, CharT> tuple_formatter;\r\n    tuple_formatter.format(make_tuple(basic_string<CharT>(STR(\"42\"))), ctx);\r\n}\r\n\r\nint main() {\r\n    run_tests<char>(test_format, test_format_exception);\r\n    run_tests<char>(test_vformat, test_vformat_exception);\r\n\r\n    run_tests<wchar_t>(test_format, test_format_exception);\r\n    run_tests<wchar_t>(test_vformat, test_vformat_exception);\r\n\r\n    (void) &test_unconstructible_format_context_for_raw_ptr<char>;\r\n    (void) &test_unconstructible_format_context_for_raw_ptr<wchar_t>;\r\n\r\n    (void) &test_unconstructible_format_context_for_back_inserter<char>;\r\n    (void) &test_unconstructible_format_context_for_back_inserter<wchar_t>;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_tuple_disambiguation/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_tuple_disambiguation/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <format>\r\n#include <string>\r\n#include <string_view>\r\n#include <tuple>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <test_format_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n#define CSTR(Str) TYPED_LITERAL(CharT, Str)\r\n#define STR(Str)  basic_string(CSTR(Str))\r\n#define SV(Str)   basic_string_view(CSTR(Str))\r\n\r\n// If a pair or tuple is not formattable as a tuple but is formattable as an input range,\r\n// it should be formattable as a range.\r\nnamespace not_formatted_as_tuple {\r\n    struct tag {};\r\n\r\n    template <class T, class A>\r\n    constexpr auto begin(tuple<tag, vector<T, A>>& t) noexcept {\r\n        return get<1>(t).begin();\r\n    }\r\n    template <class T, class A>\r\n    constexpr auto begin(const tuple<tag, vector<T, A>>& t) noexcept {\r\n        return get<1>(t).begin();\r\n    }\r\n\r\n    template <class T, class A>\r\n    constexpr auto end(tuple<tag, vector<T, A>>& t) noexcept {\r\n        return get<1>(t).end();\r\n    }\r\n    template <class T, class A>\r\n    constexpr auto end(const tuple<tag, vector<T, A>>& t) noexcept {\r\n        return get<1>(t).end();\r\n    }\r\n\r\n    template <class T, class A>\r\n    constexpr auto begin(pair<tag, vector<T, A>>& t) noexcept {\r\n        return get<1>(t).begin();\r\n    }\r\n    template <class T, class A>\r\n    constexpr auto begin(const pair<tag, vector<T, A>>& t) noexcept {\r\n        return get<1>(t).begin();\r\n    }\r\n\r\n    template <class T, class A>\r\n    constexpr auto end(pair<tag, vector<T, A>>& t) noexcept {\r\n        return get<1>(t).end();\r\n    }\r\n    template <class T, class A>\r\n    constexpr auto end(const pair<tag, vector<T, A>>& t) noexcept {\r\n        return get<1>(t).end();\r\n    }\r\n} // namespace not_formatted_as_tuple\r\n\r\n// If a pair or tuple is formattable both as a tuple and as an input range, it should be formattable as a tuple.\r\nnamespace formattable_as_tuple_and_range {\r\n    struct tag {};\r\n\r\n    template <class T, class A>\r\n    constexpr auto begin(tuple<tag, vector<T, A>>& t) noexcept {\r\n        return get<1>(t).begin();\r\n    }\r\n    template <class T, class A>\r\n    constexpr auto begin(const tuple<tag, vector<T, A>>& t) noexcept {\r\n        return get<1>(t).begin();\r\n    }\r\n\r\n    template <class T, class A>\r\n    constexpr auto end(tuple<tag, vector<T, A>>& t) noexcept {\r\n        return get<1>(t).end();\r\n    }\r\n    template <class T, class A>\r\n    constexpr auto end(const tuple<tag, vector<T, A>>& t) noexcept {\r\n        return get<1>(t).end();\r\n    }\r\n\r\n    template <class T, class A>\r\n    constexpr auto begin(pair<tag, vector<T, A>>& t) noexcept {\r\n        return get<1>(t).begin();\r\n    }\r\n    template <class T, class A>\r\n    constexpr auto begin(const pair<tag, vector<T, A>>& t) noexcept {\r\n        return get<1>(t).begin();\r\n    }\r\n\r\n    template <class T, class A>\r\n    constexpr auto end(pair<tag, vector<T, A>>& t) noexcept {\r\n        return get<1>(t).end();\r\n    }\r\n    template <class T, class A>\r\n    constexpr auto end(const pair<tag, vector<T, A>>& t) noexcept {\r\n        return get<1>(t).end();\r\n    }\r\n} // namespace formattable_as_tuple_and_range\r\n\r\ntemplate <class CharT>\r\nstruct std::formatter<formattable_as_tuple_and_range::tag, CharT> {\r\n    constexpr auto parse(basic_format_parse_context<CharT>& parse_ctx) {\r\n        if (parse_ctx.begin() != parse_ctx.end() && *parse_ctx.begin() != '}') {\r\n            throw format_error{\"empty specs expected\"};\r\n        }\r\n        return parse_ctx.begin();\r\n    }\r\n\r\n    template <class FmtCtx>\r\n    auto format(formattable_as_tuple_and_range::tag, FmtCtx& ctx) const {\r\n        ctx.advance_to(ranges::copy(SV(\"test-tag\"), ctx.out()).out);\r\n        return ctx.out();\r\n    }\r\n};\r\n\r\ntemplate <class CharT>\r\nvoid test() {\r\n    {\r\n        auto s = format(CSTR(\"{}\"), make_tuple(not_formatted_as_tuple::tag{}, vector{3, 1, 4, 1, 5, 9}));\r\n        assert(s == SV(\"[3, 1, 4, 1, 5, 9]\"));\r\n    }\r\n    {\r\n        auto s = format(CSTR(\"{}\"), make_pair(not_formatted_as_tuple::tag{}, vector{3, 1, 4, 1, 5, 9}));\r\n        assert(s == SV(\"[3, 1, 4, 1, 5, 9]\"));\r\n    }\r\n    {\r\n        auto s = format(CSTR(\"{}\"), make_tuple(formattable_as_tuple_and_range::tag{}, vector{3, 1, 4, 1, 5, 9}));\r\n        assert(s == SV(\"(test-tag, [3, 1, 4, 1, 5, 9])\"));\r\n    }\r\n    {\r\n        auto s = format(CSTR(\"{}\"), make_pair(formattable_as_tuple_and_range::tag{}, vector{3, 1, 4, 1, 5, 9}));\r\n        assert(s == SV(\"(test-tag, [3, 1, 4, 1, 5, 9])\"));\r\n    }\r\n}\r\n\r\nint main() {\r\n    test<char>();\r\n    test<wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_vector_bool_reference/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2286R8_text_formatting_vector_bool_reference/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <format>\r\n#include <locale>\r\n#include <memory>\r\n#include <memory_resource>\r\n#include <string>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#include <test_format_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n#define STR(Str) TYPED_LITERAL(CharT, Str)\r\n\r\ntemplate <class T>\r\nstruct alternative_allocator {\r\n    using value_type = T;\r\n\r\n    alternative_allocator() = default;\r\n    template <class U>\r\n    constexpr alternative_allocator(const alternative_allocator<U>&) noexcept {}\r\n\r\n    T* allocate(size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* p, size_t n) {\r\n        allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class U>\r\n    bool operator==(const alternative_allocator<U>&) const noexcept {\r\n        return true;\r\n    }\r\n};\r\n\r\n#ifdef _DEBUG\r\n#define DEFAULT_IDL_SETTING 2\r\n#else\r\n#define DEFAULT_IDL_SETTING 0\r\n#endif\r\n\r\n#if !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\ntemplate <class CharT>\r\nstruct yes_no_punct : numpunct<CharT> {\r\n    basic_string<CharT> do_truename() const override {\r\n        return STR(\"yes\");\r\n    }\r\n\r\n    basic_string<CharT> do_falsename() const override {\r\n        return STR(\"no\");\r\n    }\r\n};\r\n#endif // !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n\r\ntemplate <class CharT, class Alloc>\r\nvoid test_formatting_vector_bool_reference() {\r\n    vector<bool, Alloc> vb{false, true};\r\n\r\n    assert(format(STR(\"{}, {}\"), vb[0], vb[1]) == format(STR(\"{}, {}\"), false, true));\r\n    assert(format(STR(\"{:}, {:}\"), vb[0], vb[1]) == format(STR(\"{:}, {:}\"), false, true));\r\n    assert(format(STR(\"{:d}, {:x}\"), vb[0], vb[1]) == format(STR(\"{:d}, {:x}\"), false, true));\r\n\r\n#if !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n    locale loc{locale::classic(), new yes_no_punct<CharT>};\r\n\r\n    assert(format(loc, STR(\"{:L}\"), vb[1]) == STR(\"yes\"));\r\n    assert(format(loc, STR(\"{:L}\"), vb[0]) == STR(\"no\"));\r\n#endif // !defined(_DLL) || _ITERATOR_DEBUG_LEVEL == DEFAULT_IDL_SETTING\r\n}\r\n\r\nint main() {\r\n    test_formatting_vector_bool_reference<char, allocator<bool>>();\r\n    test_formatting_vector_bool_reference<char, pmr::polymorphic_allocator<bool>>();\r\n    test_formatting_vector_bool_reference<char, alternative_allocator<bool>>();\r\n\r\n    test_formatting_vector_bool_reference<wchar_t, allocator<bool>>();\r\n    test_formatting_vector_bool_reference<wchar_t, pmr::polymorphic_allocator<bool>>();\r\n    test_formatting_vector_bool_reference<wchar_t, alternative_allocator<bool>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2302R4_ranges_alg_contains/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2302R4_ranges_alg_contains/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct instantiator {\r\n    static constexpr pair<int, int> haystack[3] = {{0, 42}, {2, 42}, {4, 42}};\r\n\r\n    template <ranges::input_range In>\r\n    static constexpr void call() {\r\n        using ranges::contains, ranges::begin, ranges::end;\r\n\r\n        for (const auto& [value, _] : haystack) {\r\n            { // Validate range overload [found case]\r\n                const same_as<bool> auto result = contains(In{haystack}, value, get_first);\r\n                assert(result);\r\n            }\r\n            { // Validate iterator + sentinel overload [found case]\r\n                const In wrapped{haystack};\r\n                const same_as<bool> auto result = contains(begin(wrapped), end(wrapped), value, get_first);\r\n                assert(result);\r\n            }\r\n        }\r\n        {\r\n            // Validate range overload [not found case]\r\n            const same_as<bool> auto result = contains(In{haystack}, 42, get_first);\r\n            assert(!result);\r\n        }\r\n        {\r\n            // Validate iterator + sentinel overload [not found case]\r\n            const In wrapped{haystack};\r\n            const same_as<bool> auto result = contains(begin(wrapped), end(wrapped), 42, get_first);\r\n            assert(!result);\r\n        }\r\n        { // Validate memchr case\r\n            const char arr[5]{4, 8, 1, -15, 125};\r\n\r\n            // found case\r\n            same_as<bool> auto result = contains(arr, 1);\r\n            assert(result);\r\n\r\n            // not found case\r\n            result = contains(arr, 10);\r\n            assert(!result);\r\n        }\r\n        { // unreachable_sentinel case\r\n            const In wrapped{haystack};\r\n            const same_as<bool> auto result = contains(begin(wrapped), unreachable_sentinel, 2, get_first);\r\n            assert(result);\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_in<instantiator, const pair<int, int>>(), true));\r\n    test_in<instantiator, const pair<int, int>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2302R4_ranges_alg_contains_subrange/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2302R4_ranges_alg_contains_subrange/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nusing Elem1 = const pair<int, int>;\r\nusing Elem2 = const int;\r\n\r\nstruct instantiator {\r\n    static constexpr pair<int, int> haystack[] = {{0, 42}, {1, 42}, {2, 42}, {3, 42}, {4, 42}, {5, 42}};\r\n    static constexpr int needle[]              = {2, 3, 4};\r\n\r\n    template <ranges::forward_range Fwd1, ranges::forward_range Fwd2>\r\n    static constexpr void call() {\r\n        using ranges::contains_subrange, ranges::begin, ranges::end;\r\n\r\n        { // Validate range overload [found case]\r\n            const same_as<bool> auto result =\r\n                contains_subrange(Fwd1{haystack}, Fwd2{needle}, ranges::equal_to{}, get_first);\r\n            assert(result);\r\n        }\r\n        { // Validate iterator + sentinel overload [found case]\r\n            const Fwd1 wrap_hay{haystack};\r\n            const Fwd2 wrap_needle{needle};\r\n            const same_as<bool> auto result = contains_subrange(\r\n                begin(wrap_hay), end(wrap_hay), begin(wrap_needle), end(wrap_needle), ranges::equal_to{}, get_first);\r\n            assert(result);\r\n        }\r\n        { // Validate range overload [not found case]\r\n            const same_as<bool> auto result =\r\n                contains_subrange(Fwd1{haystack}, Fwd2{needle}, ranges::equal_to{}, get_second);\r\n            assert(!result);\r\n        }\r\n        { // Validate iterator + sentinel overload [not found case]\r\n            const Fwd1 wrap_hay{haystack};\r\n            const Fwd2 wrap_needle{needle};\r\n            const same_as<bool> auto result = contains_subrange(\r\n                begin(wrap_hay), end(wrap_hay), begin(wrap_needle), end(wrap_needle), ranges::equal_to{}, get_second);\r\n            assert(!result);\r\n        }\r\n        { // Validate empty needle case\r\n            const span<Elem1> empty;\r\n            const same_as<bool> auto result = contains_subrange(Fwd1{haystack}, Fwd1{empty});\r\n            assert(result);\r\n        }\r\n        { // Validate unreachable_sentinel case\r\n            const Fwd1 wrap_hay{haystack};\r\n            const Fwd2 wrap_needle{needle};\r\n            const same_as<bool> auto result = contains_subrange(begin(wrap_hay), unreachable_sentinel,\r\n                begin(wrap_needle), end(wrap_needle), ranges::equal_to{}, get_first);\r\n            assert(result);\r\n        }\r\n    }\r\n};\r\n\r\n#ifdef TEST_EVERYTHING\r\nint main() {\r\n    static_assert((test_fwd_fwd<instantiator, Elem1, Elem2>(), true));\r\n    test_fwd_fwd<instantiator, Elem1, Elem2>();\r\n}\r\n#else // ^^^ test all range combinations / test only interesting range combos vvv\r\ntemplate <class Elem, test::Sized IsSized>\r\nusing fwd_test_range = test::range<forward_iterator_tag, Elem, IsSized, test::CanDifference::no, test::Common::no,\r\n    test::CanCompare::yes, test::ProxyRef::yes>;\r\ntemplate <class Elem, test::Sized IsSized, test::Common IsCommon>\r\nusing random_test_range = test::range<random_access_iterator_tag, Elem, IsSized, test::CanDifference::no, IsCommon,\r\n    test::CanCompare::yes, test::ProxyRef::no>;\r\n\r\nconstexpr bool run_tests() {\r\n    // All (except contiguous) proxy reference types, since the algorithm doesn't really care. Cases with only 1 range\r\n    // sized are not interesting; common is interesting only in that it's necessary to trigger memcmp optimization.\r\n\r\n    using test::Common, test::Sized;\r\n\r\n    // both forward, non-common, and sized or unsized\r\n    instantiator::call<fwd_test_range<Elem1, Sized::no>, fwd_test_range<Elem2, Sized::no>>();\r\n    instantiator::call<fwd_test_range<Elem1, Sized::yes>, fwd_test_range<Elem2, Sized::yes>>();\r\n\r\n    // both random-access, and sized or unsized; all permutations of common\r\n    instantiator::call<random_test_range<Elem1, Sized::no, Common::no>,\r\n        random_test_range<Elem2, Sized::no, Common::no>>();\r\n    instantiator::call<random_test_range<Elem1, Sized::no, Common::no>,\r\n        random_test_range<Elem2, Sized::no, Common::yes>>();\r\n    instantiator::call<random_test_range<Elem1, Sized::no, Common::yes>,\r\n        random_test_range<Elem2, Sized::no, Common::no>>();\r\n    instantiator::call<random_test_range<Elem1, Sized::no, Common::yes>,\r\n        random_test_range<Elem2, Sized::no, Common::yes>>();\r\n    instantiator::call<random_test_range<Elem1, Sized::yes, Common::no>,\r\n        random_test_range<Elem2, Sized::yes, Common::no>>();\r\n    instantiator::call<random_test_range<Elem1, Sized::yes, Common::no>,\r\n        random_test_range<Elem2, Sized::yes, Common::yes>>();\r\n    instantiator::call<random_test_range<Elem1, Sized::yes, Common::yes>,\r\n        random_test_range<Elem2, Sized::yes, Common::no>>();\r\n    instantiator::call<random_test_range<Elem1, Sized::yes, Common::yes>,\r\n        random_test_range<Elem2, Sized::yes, Common::yes>>();\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(run_tests());\r\n    run_tests();\r\n}\r\n#endif // TEST_EVERYTHING\r\n"
  },
  {
    "path": "tests/std/tests/P2321R2_proxy_reference/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2321R2_proxy_reference/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\nusing namespace std;\r\n\r\nenum class State {\r\n    none,\r\n    copy_construct,\r\n    copy_construct_from_const,\r\n    move_construct,\r\n    move_construct_from_const,\r\n    copy_assign,\r\n    copy_assign_to_const,\r\n    move_assign,\r\n    move_assign_to_const,\r\n    swap,\r\n    swap_const,\r\n};\r\n\r\nstruct Meow {\r\n    Meow() = default;\r\n    constexpr Meow(Meow&) : state(State::copy_construct) {}\r\n    constexpr Meow(const Meow&) : state(State::copy_construct_from_const) {}\r\n    constexpr Meow(Meow&&) : state(State::move_construct) {}\r\n    constexpr Meow(const Meow&&) : state(State::move_construct_from_const) {}\r\n\r\n    constexpr Meow& operator=(Meow&)             = delete;\r\n    constexpr const Meow& operator=(Meow&) const = delete;\r\n\r\n    constexpr Meow& operator=(const Meow&) {\r\n        state = State::copy_assign;\r\n        return *this;\r\n    }\r\n    constexpr const Meow& operator=(const Meow&) const {\r\n        state = State::copy_assign_to_const;\r\n        return *this;\r\n    }\r\n    constexpr Meow& operator=(Meow&&) {\r\n        state = State::move_assign;\r\n        return *this;\r\n    }\r\n    constexpr const Meow& operator=(Meow&&) const {\r\n        state = State::move_assign_to_const;\r\n        return *this;\r\n    }\r\n\r\n    constexpr Meow& operator=(const Meow&&)             = delete;\r\n    constexpr const Meow& operator=(const Meow&&) const = delete;\r\n\r\n    friend constexpr void swap(Meow& left, Meow&) {\r\n        left.state = State::swap;\r\n    }\r\n    friend constexpr void swap(const Meow& left, const Meow&) {\r\n        left.state = State::swap_const;\r\n    }\r\n\r\n    mutable State state;\r\n};\r\n\r\nconstexpr bool test() {\r\n    { // Test pair and tuple\r\n        int val = 0;\r\n\r\n        pair<int&, Meow> pris{val, Meow{}};\r\n\r\n        // Test pair construction\r\n        pair<int&, Meow> pris2 = pris;\r\n        pair<int&, Meow> pris3 = as_const(pris);\r\n        pair<int&, Meow> pris4 = move(pris);\r\n        pair<int&, Meow> pris5 = move(as_const(pris));\r\n\r\n        pair<const int&, Meow> prcis1 = pris;\r\n        pair<const int&, Meow> prcis2 = as_const(pris);\r\n        pair<const int&, Meow> prcis3 = move(pris);\r\n        pair<const int&, Meow> prcis4 = move(as_const(pris));\r\n\r\n        assert(pris2.second.state == State::copy_construct);\r\n        assert(pris3.second.state == State::copy_construct_from_const);\r\n        assert(pris4.second.state == State::move_construct);\r\n        assert(pris5.second.state == State::move_construct_from_const);\r\n        assert(prcis1.second.state == State::copy_construct);\r\n        assert(prcis2.second.state == State::copy_construct_from_const);\r\n        assert(prcis3.second.state == State::move_construct);\r\n        assert(prcis4.second.state == State::move_construct_from_const);\r\n\r\n        // Test pair assignment from lvalue\r\n        pris2           = pris4;\r\n        as_const(pris3) = pris5;\r\n        pris4           = prcis1;\r\n        as_const(pris5) = prcis2;\r\n\r\n        assert(pris2.second.state == State::copy_assign);\r\n        assert(pris3.second.state == State::copy_assign_to_const);\r\n        assert(pris4.second.state == State::copy_assign);\r\n        assert(pris5.second.state == State::copy_assign_to_const);\r\n\r\n        // Test pair assignment from rvalue\r\n        pris2           = move(pris4);\r\n        as_const(pris3) = move(pris5);\r\n        pris4           = move(prcis1);\r\n        as_const(pris5) = move(prcis2);\r\n\r\n        assert(pris2.second.state == State::move_assign);\r\n        assert(pris3.second.state == State::move_assign_to_const);\r\n        assert(pris4.second.state == State::move_assign);\r\n        assert(pris5.second.state == State::move_assign_to_const);\r\n\r\n        // Test pair member swap\r\n        pris.swap(pris2);\r\n        as_const(pris2).swap(as_const(pris3));\r\n\r\n        assert(pris.second.state == State::swap);\r\n        assert(pris2.second.state == State::swap_const);\r\n\r\n        // Test pair non-member swap\r\n        swap(pris3, pris5);\r\n        swap(as_const(pris4), as_const(pris5));\r\n        assert(pris3.second.state == State::swap);\r\n        assert(pris4.second.state == State::swap_const);\r\n        static_assert(is_nothrow_swappable_v<pair<int&, int&>>);\r\n        static_assert(is_nothrow_swappable_v<const pair<int&, int&>>);\r\n        static_assert(!is_nothrow_swappable_v<pair<int&, Meow>>);\r\n        static_assert(!is_nothrow_swappable_v<const pair<int&, Meow>>);\r\n\r\n        // Test basic_common_reference and common_type specializations for pair\r\n        static_assert(is_same_v<common_reference_t<pair<int&, Meow>, pair<const int&, Meow>>, pair<const int&, Meow>>);\r\n        static_assert(is_same_v<common_reference_t<const pair<int&, Meow>, pair<const int&, Meow>>,\r\n            pair<const int&, const Meow>>);\r\n        static_assert(is_same_v<common_type_t<pair<int&, Meow>, pair<const int&, Meow>>, pair<int, Meow>>);\r\n\r\n        tuple<int&, Meow> tris{val, Meow{}};\r\n\r\n        // Test tuple construction (from tuple or pair)\r\n        tuple<int&, Meow> tris2 = tris;\r\n        tuple<int&, Meow> tris3 = as_const(tris);\r\n        tuple<int&, Meow> tris4 = move(tris);\r\n        tuple<int&, Meow> tris5 = move(as_const(tris));\r\n        tuple<int&, Meow> tris6 = pris;\r\n        tuple<int&, Meow> tris7 = as_const(pris);\r\n        tuple<int&, Meow> tris8 = move(pris);\r\n        tuple<int&, Meow> tris9 = move(as_const(pris));\r\n\r\n        tuple<const int&, Meow> trcis1 = tris;\r\n        tuple<const int&, Meow> trcis2 = as_const(tris);\r\n        tuple<const int&, Meow> trcis3 = move(tris);\r\n        tuple<const int&, Meow> trcis4 = move(as_const(tris));\r\n        tuple<const int&, Meow> trcis5 = pris;\r\n        tuple<const int&, Meow> trcis6 = as_const(pris);\r\n        tuple<const int&, Meow> trcis7 = move(pris);\r\n        tuple<const int&, Meow> trcis8 = move(as_const(pris));\r\n\r\n        assert(get<1>(tris2).state == State::copy_construct);\r\n        assert(get<1>(tris3).state == State::copy_construct_from_const);\r\n        assert(get<1>(tris4).state == State::move_construct);\r\n        assert(get<1>(tris5).state == State::move_construct_from_const);\r\n        assert(get<1>(tris6).state == State::copy_construct);\r\n        assert(get<1>(tris7).state == State::copy_construct_from_const);\r\n        assert(get<1>(tris8).state == State::move_construct);\r\n        assert(get<1>(tris9).state == State::move_construct_from_const);\r\n        assert(get<1>(trcis1).state == State::copy_construct);\r\n        assert(get<1>(trcis2).state == State::copy_construct_from_const);\r\n        assert(get<1>(trcis3).state == State::move_construct);\r\n        assert(get<1>(trcis4).state == State::move_construct_from_const);\r\n        assert(get<1>(trcis5).state == State::copy_construct);\r\n        assert(get<1>(trcis6).state == State::copy_construct_from_const);\r\n        assert(get<1>(trcis7).state == State::move_construct);\r\n        assert(get<1>(trcis8).state == State::move_construct_from_const);\r\n\r\n        // Test tuple uses-allocator construction\r\n        tuple<int&, Meow> tris10{allocator_arg, allocator<int>{}, tris};\r\n        tuple<int&, Meow> tris11{allocator_arg, allocator<int>{}, as_const(tris)};\r\n        tuple<int&, Meow> tris12{allocator_arg, allocator<int>{}, move(tris)};\r\n        tuple<int&, Meow> tris13{allocator_arg, allocator<int>{}, move(as_const(tris))};\r\n        tuple<int&, Meow> tris14{allocator_arg, allocator<int>{}, pris};\r\n        tuple<int&, Meow> tris15{allocator_arg, allocator<int>{}, as_const(pris)};\r\n        tuple<int&, Meow> tris16{allocator_arg, allocator<int>{}, move(pris)};\r\n        tuple<int&, Meow> tris17{allocator_arg, allocator<int>{}, move(as_const(pris))};\r\n\r\n        tuple<const int&, Meow> trcis9{allocator_arg, allocator<int>{}, tris};\r\n        tuple<const int&, Meow> trcis10{allocator_arg, allocator<int>{}, as_const(tris)};\r\n        tuple<const int&, Meow> trcis11{allocator_arg, allocator<int>{}, move(tris)};\r\n        tuple<const int&, Meow> trcis12{allocator_arg, allocator<int>{}, move(as_const(tris))};\r\n        tuple<const int&, Meow> trcis13{allocator_arg, allocator<int>{}, pris};\r\n        tuple<const int&, Meow> trcis14{allocator_arg, allocator<int>{}, as_const(pris)};\r\n        tuple<const int&, Meow> trcis15{allocator_arg, allocator<int>{}, move(pris)};\r\n        tuple<const int&, Meow> trcis16{allocator_arg, allocator<int>{}, move(as_const(pris))};\r\n\r\n        assert(get<1>(tris10).state == State::copy_construct);\r\n        assert(get<1>(tris11).state == State::copy_construct_from_const);\r\n        assert(get<1>(tris12).state == State::move_construct);\r\n        assert(get<1>(tris13).state == State::move_construct_from_const);\r\n        assert(get<1>(tris14).state == State::copy_construct);\r\n        assert(get<1>(tris15).state == State::copy_construct_from_const);\r\n        assert(get<1>(tris16).state == State::move_construct);\r\n        assert(get<1>(tris17).state == State::move_construct_from_const);\r\n        assert(get<1>(trcis9).state == State::copy_construct);\r\n        assert(get<1>(trcis10).state == State::copy_construct_from_const);\r\n        assert(get<1>(trcis11).state == State::move_construct);\r\n        assert(get<1>(trcis12).state == State::move_construct_from_const);\r\n        assert(get<1>(trcis13).state == State::copy_construct);\r\n        assert(get<1>(trcis14).state == State::copy_construct_from_const);\r\n        assert(get<1>(trcis15).state == State::move_construct);\r\n        assert(get<1>(trcis16).state == State::move_construct_from_const);\r\n\r\n        // Test tuple assignment from tuple lvalue\r\n        tris2           = tris;\r\n        as_const(tris3) = tris;\r\n        tris4           = trcis1;\r\n        as_const(tris5) = trcis2;\r\n\r\n        assert(get<1>(tris2).state == State::copy_assign);\r\n        assert(get<1>(tris3).state == State::copy_assign_to_const);\r\n        assert(get<1>(tris4).state == State::copy_assign);\r\n        assert(get<1>(tris5).state == State::copy_assign_to_const);\r\n\r\n        // Test tuple assignment from tuple rvalue\r\n        tris2           = move(tris);\r\n        as_const(tris3) = move(tris);\r\n        tris4           = move(trcis1);\r\n        as_const(tris5) = move(trcis2);\r\n\r\n        assert(get<1>(tris2).state == State::move_assign);\r\n        assert(get<1>(tris3).state == State::move_assign_to_const);\r\n        assert(get<1>(tris4).state == State::move_assign);\r\n        assert(get<1>(tris5).state == State::move_assign_to_const);\r\n\r\n        // Test tuple assignment from pair\r\n        tris2           = pris;\r\n        as_const(tris3) = pris;\r\n        tris4           = move(pris);\r\n        as_const(tris5) = move(pris);\r\n\r\n        assert(get<1>(tris2).state == State::copy_assign);\r\n        assert(get<1>(tris3).state == State::copy_assign_to_const);\r\n        assert(get<1>(tris4).state == State::move_assign);\r\n        assert(get<1>(tris5).state == State::move_assign_to_const);\r\n\r\n        // Test tuple member swap\r\n        tris2.swap(tris);\r\n        as_const(tris3).swap(tris);\r\n\r\n        assert(get<1>(tris2).state == State::swap);\r\n        assert(get<1>(tris3).state == State::swap_const);\r\n\r\n        // Test tuple non-member swap\r\n        swap(tris4, tris);\r\n        swap(as_const(tris5), as_const(tris));\r\n\r\n        assert(get<1>(tris4).state == State::swap);\r\n        assert(get<1>(tris5).state == State::swap_const);\r\n\r\n        static_assert(is_nothrow_swappable_v<tuple<int&, int&>>);\r\n        static_assert(is_nothrow_swappable_v<const tuple<int&, int&>>);\r\n        static_assert(!is_nothrow_swappable_v<tuple<int&, Meow>>);\r\n        static_assert(!is_nothrow_swappable_v<const tuple<int&, Meow>>);\r\n\r\n        // Test basic_common_reference and common_type specializations for tuple\r\n        static_assert(\r\n            is_same_v<common_reference_t<tuple<int&, Meow>, tuple<const int&, Meow>>, tuple<const int&, Meow>>);\r\n        static_assert(is_same_v<common_reference_t<const tuple<int&, Meow>, tuple<const int&, Meow>>,\r\n            tuple<const int&, const Meow>>);\r\n        static_assert(is_same_v<common_type_t<tuple<int&, Meow>, tuple<const int&, Meow>>, tuple<int, Meow>>);\r\n    }\r\n\r\n    { // Test vector<bool>::reference\r\n        static_assert(is_assignable_v<const vector<bool>::reference, bool>);\r\n        static_assert(is_assignable_v<const vector<bool>::reference&, bool>);\r\n\r\n        vector<bool> vb{false};\r\n        const vector<bool>::reference r = vb[0];\r\n\r\n        r = true;\r\n        assert(vb.front());\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test();\r\n    static_assert(test());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2321R2_views_adjacent/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2321R2_views_adjacent/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class R, size_t N>\r\nconcept CanViewAdjacent = requires(R&& r) { views::adjacent<N>(forward<R>(r)); };\r\n\r\ntemplate <class R, size_t N>\r\nconcept CanConstructAdjacentView = requires(R&& r) { ranges::adjacent_view<views::all_t<R>, N>{forward<R>(r)}; };\r\n\r\ntemplate <class T, class Indices>\r\nstruct repeated_tuple_impl;\r\n\r\ntemplate <class T, size_t... Indices>\r\nstruct repeated_tuple_impl<T, index_sequence<Indices...>> {\r\n    template <size_t>\r\n    using repeat_type = T;\r\n\r\n    using type = tuple<repeat_type<Indices>...>;\r\n};\r\n\r\ntemplate <class T, size_t N>\r\nusing repeated_tuple = repeated_tuple_impl<T, make_index_sequence<N>>::type;\r\n\r\nstatic_assert(same_as<repeated_tuple<int, 0>, tuple<>>);\r\nstatic_assert(same_as<repeated_tuple<int, 3>, tuple<int, int, int>>);\r\nstatic_assert(same_as<repeated_tuple<int, 5>, tuple<int, int, int, int, int>>);\r\n\r\n// Check views::pairwise\r\nstatic_assert(same_as<decltype(views::pairwise), decltype(views::adjacent<2>)>);\r\n\r\ntemplate <size_t N, ranges::forward_range Rng, class Expected>\r\nconstexpr bool test_one(Rng&& rng, Expected&& expected) {\r\n    using ranges::adjacent_view, ranges::forward_range, ranges::bidirectional_range, ranges::random_access_range,\r\n        ranges::sized_range, ranges::common_range, ranges::iterator_t, ranges::sentinel_t, ranges::const_iterator_t,\r\n        ranges::const_sentinel_t, ranges::range_difference_t, ranges::range_value_t, ranges::range_reference_t;\r\n\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n\r\n    using V = views::all_t<Rng>;\r\n    using R = adjacent_view<V, N>;\r\n\r\n    static_assert(ranges::view<R>);\r\n    static_assert(forward_range<R>);\r\n    static_assert(bidirectional_range<R> == bidirectional_range<Rng>);\r\n    static_assert(random_access_range<R> == random_access_range<Rng>);\r\n    static_assert(!ranges::contiguous_range<R>);\r\n\r\n    // Check default-initializability\r\n    static_assert(default_initializable<R> == default_initializable<V>);\r\n\r\n    // Check borrowed_range\r\n    static_assert(ranges::borrowed_range<R> == ranges::borrowed_range<V>);\r\n\r\n    // Check range closure object\r\n    constexpr auto closure = views::adjacent<N>;\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewAdjacent<Rng&, N> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewAdjacent<Rng&, N>) {\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(closure(rng)), R>);\r\n        static_assert(noexcept(closure(rng)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | closure), R>);\r\n        static_assert(noexcept(rng | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewAdjacent<const remove_reference_t<Rng>&, N> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewAdjacent<const remove_reference_t<Rng>&, N>) {\r\n        using RC                   = adjacent_view<views::all_t<const remove_reference_t<Rng>&>, N>;\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(closure(as_const(rng))), RC>);\r\n        static_assert(noexcept(closure(as_const(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), RC>);\r\n        static_assert(noexcept(as_const(rng) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(CanViewAdjacent<remove_reference_t<Rng>, N> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (CanViewAdjacent<remove_reference_t<Rng>, N>) {\r\n        using RS                   = adjacent_view<views::all_t<remove_reference_t<Rng>>, N>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(closure(move(rng))), RS>);\r\n        static_assert(noexcept(closure(move(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | closure), RS>);\r\n        static_assert(noexcept(move(rng) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewAdjacent<const remove_reference_t<Rng>, N> == (is_view && copy_constructible<V>) );\r\n    if constexpr (CanViewAdjacent<const remove_reference_t<Rng>, N>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(closure(move(as_const(rng)))), R>);\r\n        static_assert(noexcept(closure(move(as_const(rng)))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | closure), R>);\r\n        static_assert(noexcept(move(as_const(rng)) | closure) == is_noexcept);\r\n    }\r\n\r\n    R r{forward<Rng>(rng)};\r\n\r\n    // Check adjacent_view::size\r\n    static_assert(CanMemberSize<R> == sized_range<V>);\r\n    if constexpr (CanMemberSize<R>) {\r\n        same_as<ranges::range_size_t<V>> auto s = r.size();\r\n        assert(_To_unsigned_like(s) == ranges::size(expected));\r\n        static_assert(noexcept(r.size()) == noexcept(ranges::size(rng))); // strengthened\r\n    }\r\n\r\n    // Check adjacent_view::size (const)\r\n    static_assert(CanMemberSize<const R> == sized_range<const V>);\r\n    if constexpr (CanMemberSize<const R>) {\r\n        same_as<ranges::range_size_t<const V>> auto s = as_const(r).size();\r\n        assert(_To_unsigned_like(s) == ranges::size(expected));\r\n        static_assert(noexcept(as_const(r).size()) == noexcept(ranges::size(as_const(rng)))); // strengthened\r\n    }\r\n\r\n    const bool is_empty = ranges::empty(expected);\r\n\r\n    // Check view_interface::empty and operator bool\r\n    static_assert(CanMemberEmpty<R>);\r\n    static_assert(CanBool<R>);\r\n    assert(r.empty() == is_empty);\r\n    assert(static_cast<bool>(r) == !is_empty);\r\n\r\n    // Check view_interface::empty and operator bool (const)\r\n    static_assert(CanMemberEmpty<const R>);\r\n    static_assert(CanBool<const R>);\r\n    assert(as_const(r).empty() == is_empty);\r\n    assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n\r\n    // Check content\r\n    assert(ranges::equal(r, expected));\r\n\r\n    // Check adjacent_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    {\r\n        const same_as<iterator_t<R>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(*i == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            auto r2                              = r;\r\n            const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check adjacent_view::begin (const)\r\n    static_assert(CanMemberBegin<const R> == ranges::range<const V>);\r\n    if constexpr (CanMemberBegin<const R>) {\r\n        const same_as<iterator_t<const R>> auto ci = as_const(r).begin();\r\n        if (!is_empty) {\r\n            assert(*ci == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            const auto cr2                              = r;\r\n            const same_as<iterator_t<const R>> auto ci2 = cr2.begin();\r\n            if (!is_empty) {\r\n                assert(*ci2 == *ci);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check adjacent_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    {\r\n        const same_as<sentinel_t<R>> auto s = r.end();\r\n        assert((r.begin() == s) == is_empty);\r\n\r\n        if constexpr (sentinel_for<sentinel_t<R>, iterator_t<const R>>) {\r\n            assert((as_const(r).begin() == s) == is_empty);\r\n        }\r\n\r\n        static_assert(common_range<R> == common_range<V>);\r\n        if constexpr (common_range<V> && bidirectional_range<V>) {\r\n            if (!is_empty) {\r\n                assert(*prev(s) == *prev(end(expected)));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*prev(r2.end()) == *prev(end(expected)));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check adjacent_view::end (const)\r\n    static_assert(CanMemberEnd<const R> == ranges::range<const V>);\r\n    if constexpr (CanMemberEnd<const R>) {\r\n        const same_as<sentinel_t<const R>> auto cs = as_const(r).end();\r\n        assert((as_const(r).begin() == cs) == is_empty);\r\n\r\n        if constexpr (sentinel_for<sentinel_t<const R>, iterator_t<R>>) {\r\n            assert((r.begin() == cs) == is_empty);\r\n        }\r\n\r\n        static_assert(common_range<const R> == common_range<const V>);\r\n        if constexpr (common_range<const V> && bidirectional_range<const V>) {\r\n            if (!is_empty) {\r\n                assert(*prev(cs) == *prev(end(expected)));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                const auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*prev(r2.end()) == *prev(end(expected)));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check view_interface::cbegin\r\n    static_assert(CanMemberCBegin<R>);\r\n    static_assert(CanMemberCBegin<const R&> == ranges::range<const V>);\r\n    {\r\n        const same_as<const_iterator_t<R>> auto i = r.cbegin();\r\n        if (!is_empty) {\r\n            assert(*i == *cbegin(expected));\r\n        }\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2                                    = r;\r\n            const same_as<const_iterator_t<R>> auto i2 = r2.cbegin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n\r\n        if constexpr (CanCBegin<const R&>) {\r\n            const same_as<const_iterator_t<const R>> auto i3 = as_const(r).cbegin();\r\n            if (!is_empty) {\r\n                assert(*i3 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check view_interface::cend\r\n    static_assert(CanMemberCEnd<R>);\r\n    static_assert(CanMemberCEnd<const R&> == ranges::range<const V>);\r\n    if (!is_empty) {\r\n        same_as<const_sentinel_t<R>> auto i = r.cend();\r\n        if constexpr (common_range<V> && sized_range<V> && bidirectional_range<V>) {\r\n            assert(*prev(i) == *prev(cend(expected)));\r\n        }\r\n\r\n        if constexpr (CanCEnd<const R&>) {\r\n            same_as<const_sentinel_t<const R>> auto i2 = as_const(r).cend();\r\n            if constexpr (common_range<const V> && sized_range<const V> && bidirectional_range<const V>) {\r\n                assert(*prev(i2) == *prev(cend(expected)));\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check view_interface::data\r\n    static_assert(!CanData<R>);\r\n    static_assert(!CanData<const R>);\r\n\r\n    if (is_empty) {\r\n        return true;\r\n    }\r\n\r\n    // Check view_interface::operator[]\r\n    static_assert(CanIndex<R> == random_access_range<V>);\r\n    if constexpr (CanIndex<R>) {\r\n        assert(r[0] == expected[0]);\r\n    }\r\n\r\n    // Check view_interface::operator[] (const)\r\n    static_assert(CanIndex<const R> == random_access_range<const V>);\r\n    if constexpr (CanIndex<const R>) {\r\n        assert(as_const(r)[0] == expected[0]);\r\n    }\r\n\r\n    // Check view_interface::front\r\n    static_assert(CanMemberFront<R>);\r\n    assert(r.front() == *begin(expected));\r\n\r\n    // Check view_interface::front (const)\r\n    static_assert(CanMemberFront<const R>);\r\n    assert(as_const(r).front() == *begin(expected));\r\n\r\n    // Check view_interface::back\r\n    static_assert(CanMemberBack<R> == (bidirectional_range<V> && common_range<V>) );\r\n    if constexpr (CanMemberBack<R>) {\r\n        assert(r.back() == *prev(end(expected)));\r\n    }\r\n\r\n    // Check view_interface::back (const)\r\n    static_assert(CanMemberBack<const R> == (bidirectional_range<const V> && common_range<const V>) );\r\n    if constexpr (CanMemberBack<const R>) {\r\n        assert(as_const(r).back() == *prev(end(expected)));\r\n    }\r\n\r\n    { // Check adjacent_view::iterator<not const>\r\n        using BI = iterator_t<V>;\r\n        using I  = iterator_t<R>;\r\n        static_assert(forward_iterator<I>);\r\n\r\n        // Check iterator_category\r\n        static_assert(same_as<typename I::iterator_category, input_iterator_tag>);\r\n\r\n        // Check iterator_concept\r\n        using IterConcept = I::iterator_concept;\r\n        static_assert(random_access_range<V> == same_as<IterConcept, random_access_iterator_tag>);\r\n        static_assert(\r\n            (bidirectional_range<V> && !random_access_range<V>) == same_as<IterConcept, bidirectional_iterator_tag>);\r\n        static_assert((forward_range<V> && !bidirectional_range<V>) == same_as<IterConcept, forward_iterator_tag>);\r\n\r\n        // Check value_type\r\n        static_assert(same_as<typename I::value_type, repeated_tuple<range_value_t<V>, N>>);\r\n\r\n        // Check default-initializability\r\n        static_assert(default_initializable<I>);\r\n\r\n        auto i = r.begin();\r\n\r\n        { // Check dereference\r\n            same_as<repeated_tuple<range_reference_t<V>, N>> decltype(auto) v = *as_const(i);\r\n            assert(v == expected[0]);\r\n        }\r\n\r\n        { // Check pre-incrementation\r\n            same_as<I&> decltype(auto) i2 = ++i;\r\n            assert(&i2 == &i);\r\n            if (i != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                assert(*i == expected[1]);\r\n#pragma warning(pop)\r\n            }\r\n            i = r.begin();\r\n        }\r\n\r\n        { // Check post-incrementation\r\n            same_as<I> decltype(auto) i2 = i++;\r\n            assert(*i2 == expected[0]);\r\n            if (i != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                assert(*i == expected[1]);\r\n#pragma warning(pop)\r\n            }\r\n            i = r.begin();\r\n        }\r\n\r\n        { // Check equality comparisons\r\n            auto i2               = i;\r\n            same_as<bool> auto b1 = i == i2;\r\n            assert(b1);\r\n            ++i2;\r\n            same_as<bool> auto b2 = i != i2;\r\n            assert(b2);\r\n        }\r\n\r\n        if constexpr (bidirectional_range<V>) {\r\n            { // Check pre-decrementation\r\n                i = ranges::next(r.begin());\r\n\r\n                same_as<I&> decltype(auto) i2 = --i;\r\n                assert(&i2 == &i);\r\n                assert(*i2 == expected[0]);\r\n            }\r\n\r\n            { // Check post-decrementation\r\n                i = ranges::next(r.begin());\r\n\r\n                same_as<I> decltype(auto) i2 = i--;\r\n                if (i2 != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                    assert(*i2 == expected[1]);\r\n#pragma warning(pop)\r\n                }\r\n                assert(*i == expected[0]);\r\n            }\r\n        }\r\n\r\n        if constexpr (random_access_range<V>) {\r\n            { // Check advancement operators\r\n                same_as<I&> decltype(auto) i2 = (i += 1);\r\n                assert(&i2 == &i);\r\n                if (i != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                    assert(*i == expected[1]);\r\n#pragma warning(pop)\r\n                }\r\n\r\n                same_as<I&> decltype(auto) i3 = (i -= 1);\r\n                assert(&i3 == &i);\r\n                assert(*i == expected[0]);\r\n            }\r\n\r\n            { // Check subscript operator\r\n                same_as<repeated_tuple<range_reference_t<V>, N>> decltype(auto) v = i[0];\r\n                assert(v == expected[0]);\r\n            }\r\n\r\n            { // Check other comparisons\r\n                auto i2               = ranges::next(i);\r\n                same_as<bool> auto b1 = i < i2;\r\n                assert(b1);\r\n                same_as<bool> auto b2 = i2 > i;\r\n                assert(b2);\r\n                same_as<bool> auto b3 = i <= i2;\r\n                assert(b3);\r\n                same_as<bool> auto b4 = i2 >= i;\r\n                assert(b4);\r\n            }\r\n\r\n            if constexpr (three_way_comparable<BI>) { // Check 3way comparisons\r\n                using Cat              = compare_three_way_result_t<BI>;\r\n                auto i2                = i;\r\n                same_as<Cat> auto cmp1 = i <=> i2;\r\n                assert(cmp1 == Cat::equivalent);\r\n                ++i2;\r\n                assert((i <=> i2) == Cat::less);\r\n                assert((i2 <=> i) == Cat::greater);\r\n            }\r\n\r\n            { // Check operator+\r\n                same_as<I> auto i2 = i + 1;\r\n                if (i2 != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                    assert(*i2 == expected[1]);\r\n#pragma warning(pop)\r\n                }\r\n\r\n                same_as<I> auto i3 = 1 + i;\r\n                if (i3 != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                    assert(*i3 == expected[1]);\r\n#pragma warning(pop)\r\n                }\r\n            }\r\n\r\n            { // Check operator-(Iter, Diff)\r\n                same_as<I> auto i2 = ranges::next(i) - 1;\r\n                assert(*i2 == expected[0]);\r\n            }\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<BI, BI>) { // Check differencing\r\n            same_as<range_difference_t<V>> auto diff = i - i;\r\n            assert(diff == 0);\r\n            assert((i - ranges::next(i)) == -1);\r\n            assert((ranges::next(i) - i) == 1);\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<sentinel_t<R>, I>) { // Check differencing with sentinel<not const>\r\n            const auto s                                    = r.end();\r\n            const auto size                                 = ranges::ssize(expected);\r\n            const same_as<range_difference_t<V>> auto diff1 = i - s;\r\n            assert(diff1 == -size);\r\n            const same_as<range_difference_t<V>> auto diff2 = s - i;\r\n            assert(diff2 == size);\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<sentinel_t<const R>, I>) { // Check differencing with sentinel<const>\r\n            const auto s                                    = as_const(r).end();\r\n            const auto size                                 = ranges::ssize(expected);\r\n            const same_as<range_difference_t<V>> auto diff1 = i - s;\r\n            assert(diff1 == -size);\r\n            const same_as<range_difference_t<V>> auto diff2 = s - i;\r\n            assert(diff2 == size);\r\n        }\r\n\r\n        { // Check iter_move\r\n            same_as<repeated_tuple<iter_rvalue_reference_t<BI>, N>> decltype(auto) rval = iter_move(as_const(i));\r\n            assert(rval == expected[0]);\r\n            static_assert(noexcept(iter_move(i))\r\n                          == (noexcept(ranges::iter_move(declval<BI>()))\r\n                              && is_nothrow_move_constructible_v<iter_rvalue_reference_t<BI>>) );\r\n        }\r\n\r\n        if constexpr (indirectly_swappable<BI>) { // Check iter_swap\r\n            static_assert(is_void_v<decltype(ranges::iter_swap(as_const(i), as_const(i)))>);\r\n            static_assert(\r\n                noexcept(iter_swap(i, i)) == noexcept(ranges::iter_swap(declval<const BI&>(), declval<const BI&>())));\r\n            // Note: other tests are defined in 'test_iter_swap' function\r\n        }\r\n    }\r\n\r\n    // Check adjacent_view::iterator<const>\r\n    if constexpr (CanMemberBegin<const R>) {\r\n        using CBI = iterator_t<const V>;\r\n        using CI  = iterator_t<const R>;\r\n        static_assert(forward_iterator<CI>);\r\n\r\n        // Check iterator_category\r\n        static_assert(same_as<typename CI::iterator_category, input_iterator_tag>);\r\n\r\n        // Check iterator_concept\r\n        using IterConcept = CI::iterator_concept;\r\n        static_assert(random_access_range<const V> == same_as<IterConcept, random_access_iterator_tag>);\r\n        static_assert((bidirectional_range<const V> && !random_access_range<const V>)\r\n                      == same_as<IterConcept, bidirectional_iterator_tag>);\r\n        static_assert(\r\n            (forward_range<const V> && !bidirectional_range<const V>) == same_as<IterConcept, forward_iterator_tag>);\r\n\r\n        // Check value_type\r\n        static_assert(same_as<typename CI::value_type, repeated_tuple<range_value_t<const V>, N>>);\r\n\r\n        // Check default-initializability\r\n        static_assert(default_initializable<CI>);\r\n\r\n        iterator_t<R> i = r.begin();\r\n\r\n        // Check construction from non-const iterator\r\n        CI ci = i;\r\n\r\n        { // Check dereference\r\n            same_as<repeated_tuple<range_reference_t<const V>, N>> decltype(auto) v = *as_const(ci);\r\n            assert(v == expected[0]);\r\n        }\r\n\r\n        { // Check pre-incrementation\r\n            same_as<CI&> decltype(auto) ci2 = ++ci;\r\n            assert(&ci2 == &ci);\r\n            if (ci != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                assert(*ci == expected[1]);\r\n#pragma warning(pop)\r\n            }\r\n            ci = r.begin();\r\n        }\r\n\r\n        { // Check post-incrementation\r\n            same_as<CI> decltype(auto) ci2 = ci++;\r\n            assert(*ci2 == expected[0]);\r\n            if (ci != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                assert(*ci == expected[1]);\r\n#pragma warning(pop)\r\n            }\r\n            ci = r.begin();\r\n        }\r\n\r\n        { // Check equality comparisons\r\n            auto ci2              = ci;\r\n            same_as<bool> auto b1 = ci == ci2;\r\n            assert(b1);\r\n            ++ci2;\r\n            same_as<bool> auto b2 = ci != ci2;\r\n            assert(b2);\r\n        }\r\n\r\n        { // Check equality comparisons with non-const iterators\r\n            same_as<bool> auto b1 = ci == i;\r\n            assert(b1);\r\n            ++i;\r\n            same_as<bool> auto b2 = ci != i;\r\n            assert(b2);\r\n            i = r.begin();\r\n        }\r\n\r\n        if constexpr (bidirectional_range<const V>) {\r\n            { // Check pre-decrementation\r\n                ci = ranges::next(r.begin());\r\n\r\n                same_as<CI&> decltype(auto) ci2 = --ci;\r\n                assert(&ci2 == &ci);\r\n                assert(*ci2 == expected[0]);\r\n            }\r\n\r\n            { // Check post-decrementation\r\n                ci = ranges::next(r.begin());\r\n\r\n                same_as<CI> decltype(auto) ci2 = ci--;\r\n                if (ci2 != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                    assert(*ci2 == expected[1]);\r\n#pragma warning(pop)\r\n                }\r\n                assert(*ci == expected[0]);\r\n            }\r\n        }\r\n\r\n        if constexpr (random_access_range<const V>) {\r\n            { // Check advancement operators\r\n                same_as<CI&> decltype(auto) ci2 = (ci += 1);\r\n                assert(&ci2 == &ci);\r\n                if (ci != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                    assert(*ci == expected[1]);\r\n#pragma warning(pop)\r\n                }\r\n\r\n                same_as<CI&> decltype(auto) ci3 = (ci -= 1);\r\n                assert(&ci3 == &ci);\r\n                assert(*ci == expected[0]);\r\n            }\r\n\r\n            { // Check subscript operator\r\n                same_as<repeated_tuple<range_reference_t<const V>, N>> decltype(auto) v = ci[0];\r\n                assert(v == expected[0]);\r\n            }\r\n\r\n            { // Check comparisons\r\n                auto ci2              = ranges::next(ci);\r\n                same_as<bool> auto b1 = ci < ci2;\r\n                assert(b1);\r\n                same_as<bool> auto b2 = ci2 > ci;\r\n                assert(b2);\r\n                same_as<bool> auto b3 = ci <= ci2;\r\n                assert(b3);\r\n                same_as<bool> auto b4 = ci2 >= ci;\r\n                assert(b4);\r\n            }\r\n\r\n            { // Check comparisons with non-const iterators\r\n                ++i;\r\n                same_as<bool> auto b1 = ci < i;\r\n                assert(b1);\r\n                same_as<bool> auto b2 = i > ci;\r\n                assert(b2);\r\n                same_as<bool> auto b3 = ci <= i;\r\n                assert(b3);\r\n                same_as<bool> auto b4 = i >= ci;\r\n                assert(b4);\r\n                --i;\r\n            }\r\n\r\n            if constexpr (three_way_comparable<CBI>) { // Check 3way comparisons\r\n                using Cat              = compare_three_way_result_t<CBI>;\r\n                auto ci2               = ci;\r\n                same_as<Cat> auto cmp1 = ci <=> ci2;\r\n                assert(cmp1 == Cat::equivalent);\r\n                ++ci2;\r\n                assert((ci <=> ci2) == Cat::less);\r\n                assert((ci2 <=> ci) == Cat::greater);\r\n            }\r\n\r\n            if constexpr (three_way_comparable<CBI>) { // Check 3way comparisons with non-const iterators\r\n                using Cat              = compare_three_way_result_t<CBI>;\r\n                same_as<Cat> auto cmp1 = ci <=> i;\r\n                assert(cmp1 == Cat::equivalent);\r\n                ++i;\r\n                assert((ci <=> i) == Cat::less);\r\n                assert((i <=> ci) == Cat::greater);\r\n                --i;\r\n            }\r\n\r\n            { // Check operator+\r\n                same_as<CI> auto ci2 = ci + 1;\r\n                if (ci2 != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                    assert(*ci2 == expected[1]);\r\n#pragma warning(pop)\r\n                }\r\n\r\n                same_as<CI> auto ci3 = 1 + ci;\r\n                if (ci3 != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                    assert(*ci3 == expected[1]);\r\n#pragma warning(pop)\r\n                }\r\n            }\r\n\r\n            { // Check operator-(Iter, Diff)\r\n                same_as<CI> auto ci2 = ranges::next(ci) - 1;\r\n                assert(*ci2 == expected[0]);\r\n            }\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<CBI, CBI>) { // Check differencing\r\n            same_as<range_difference_t<const V>> auto diff = ci - ci;\r\n            assert(diff == 0);\r\n            assert((ci - ranges::next(ci)) == -1);\r\n            assert((ranges::next(ci) - ci) == 1);\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<sentinel_t<R>, CI>) { // Check differencing with sentinel<not const>\r\n            const auto s                                          = r.end();\r\n            const auto size                                       = ranges::ssize(expected);\r\n            const same_as<range_difference_t<const V>> auto diff1 = ci - s;\r\n            assert(diff1 == -size);\r\n            const same_as<range_difference_t<const V>> auto diff2 = s - ci;\r\n            assert(diff2 == size);\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<sentinel_t<const R>, CI>) { // Check differencing with sentinel<const>\r\n            const auto s                                          = as_const(r).end();\r\n            const auto size                                       = ranges::ssize(expected);\r\n            const same_as<range_difference_t<const V>> auto diff1 = ci - s;\r\n            assert(diff1 == -size);\r\n            const same_as<range_difference_t<const V>> auto diff2 = s - ci;\r\n            assert(diff2 == size);\r\n        }\r\n\r\n        { // Check iter_move\r\n            same_as<repeated_tuple<iter_rvalue_reference_t<CBI>, N>> decltype(auto) rval = iter_move(as_const(ci));\r\n            assert(rval == expected[0]);\r\n            static_assert(noexcept(iter_move(ci))\r\n                          == (noexcept(ranges::iter_move(declval<CBI>()))\r\n                              && is_nothrow_move_constructible_v<iter_rvalue_reference_t<CBI>>) );\r\n        }\r\n\r\n        if constexpr (indirectly_swappable<CBI>) { // Check iter_swap\r\n            static_assert(is_void_v<decltype(ranges::iter_swap(as_const(ci), as_const(ci)))>);\r\n            static_assert(noexcept(iter_swap(ci, ci))\r\n                          == noexcept(ranges::iter_swap(declval<const CBI&>(), declval<const CBI&>())));\r\n            // Note: other tests are defined in 'test_iter_swap' function\r\n        }\r\n    }\r\n\r\n    // Check adjacent_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V>) {\r\n        [[maybe_unused]] same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>); // strengthened\r\n    }\r\n\r\n    // Check adjacent_view::base() &&\r\n    [[maybe_unused]] same_as<V> auto b2 = move(r).base();\r\n    static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>); // strengthened\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <ranges::forward_range Rng>\r\nconstexpr void test_adjacent0(Rng&& rng) {\r\n    static_assert(!CanConstructAdjacentView<Rng, 0>);\r\n    using V = views::all_t<Rng>;\r\n    using E = ranges::empty_view<tuple<>>;\r\n\r\n    // Check range closure object\r\n    constexpr auto closure = views::adjacent<0>;\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewAdjacent<Rng&, 0> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewAdjacent<Rng&, 0>) {\r\n        static_assert(same_as<decltype(closure(rng)), E>);\r\n        static_assert(noexcept(closure(rng)));\r\n\r\n        static_assert(same_as<decltype(rng | closure), E>);\r\n        static_assert(noexcept(rng | closure));\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewAdjacent<const remove_reference_t<Rng>&, 0> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewAdjacent<const remove_reference_t<Rng>&, 0>) {\r\n        static_assert(same_as<decltype(closure(as_const(rng))), E>);\r\n        static_assert(noexcept(closure(as_const(rng))));\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), E>);\r\n        static_assert(noexcept(as_const(rng) | closure));\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(CanViewAdjacent<remove_reference_t<Rng>, 0> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (CanViewAdjacent<remove_reference_t<Rng>, 0>) {\r\n        static_assert(same_as<decltype(closure(move(rng))), E>);\r\n        static_assert(noexcept(closure(move(rng))));\r\n\r\n        static_assert(same_as<decltype(move(rng) | closure), E>);\r\n        static_assert(noexcept(move(rng) | closure));\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewAdjacent<const remove_reference_t<Rng>, 0> == (is_view && copy_constructible<V>) );\r\n    if constexpr (CanViewAdjacent<const remove_reference_t<Rng>, 0>) {\r\n        static_assert(same_as<decltype(closure(move(as_const(rng)))), E>);\r\n        static_assert(noexcept(closure(move(as_const(rng)))));\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | closure), E>);\r\n        static_assert(noexcept(move(as_const(rng)) | closure));\r\n    }\r\n}\r\n\r\ntemplate <size_t N, ranges::forward_range Rng>\r\n    requires indirectly_swappable<ranges::iterator_t<Rng>>\r\nconstexpr void test_iter_swap(Rng& rng) {\r\n    // This test assumes that 'ranges::size(views::adjacent<N>(rng))' is at least 2\r\n    auto r = views::adjacent<N>(rng);\r\n\r\n    { // Check iter_swap for adjacent_view::iterator<not const>\r\n        auto i      = r.begin();\r\n        auto first  = *i;\r\n        auto j      = ranges::next(i);\r\n        auto second = *j;\r\n\r\n        // It takes N+1 swaps to get to initial state\r\n        for ([[maybe_unused]] size_t _ : views::iota(0u, N)) {\r\n            iter_swap(as_const(i), as_const(j));\r\n        }\r\n        ranges::iter_swap(as_const(i), as_const(j));\r\n\r\n        assert(*i == first);\r\n        assert(*j == second);\r\n    }\r\n\r\n    // Check iter_swap for adjacent_view::iterator<const>\r\n    if constexpr (CanMemberBegin<const decltype(r)> && indirectly_swappable<ranges::iterator_t<const Rng>>) {\r\n        auto i      = as_const(r).begin();\r\n        auto first  = *i;\r\n        auto j      = ranges::next(i);\r\n        auto second = *j;\r\n\r\n        // It takes N+1 swaps to get to initial state\r\n        for ([[maybe_unused]] size_t _ : views::iota(0u, N)) {\r\n            iter_swap(as_const(i), as_const(j));\r\n        }\r\n        ranges::iter_swap(as_const(i), as_const(j));\r\n\r\n        assert(*i == first);\r\n        assert(*j == second);\r\n    }\r\n}\r\n\r\n// We have to use std::array instead of C-array, see LLVM-61025\r\nconstexpr auto some_ints        = array{1, 3, 5, 7, 11, 13};\r\nconstexpr auto adjacent1_result = to_array<repeated_tuple<int, 1>>({{1}, {3}, {5}, {7}, {11}, {13}});\r\nconstexpr auto pairwise_result  = to_array<repeated_tuple<int, 2>>({{1, 3}, {3, 5}, {5, 7}, {7, 11}, {11, 13}});\r\nconstexpr auto adjacent3_result = to_array<repeated_tuple<int, 3>>({{1, 3, 5}, {3, 5, 7}, {5, 7, 11}, {7, 11, 13}});\r\nconstexpr auto adjacent4_result = to_array<repeated_tuple<int, 4>>({{1, 3, 5, 7}, {3, 5, 7, 11}, {5, 7, 11, 13}});\r\nconstexpr auto adjacent5_result = to_array<repeated_tuple<int, 5>>({{1, 3, 5, 7, 11}, {3, 5, 7, 11, 13}});\r\nconstexpr auto adjacent6_result = to_array<repeated_tuple<int, 6>>({{1, 3, 5, 7, 11, 13}});\r\nconstexpr array<repeated_tuple<int, 7>, 0> adjacent7_result;\r\n\r\ntemplate <class ValTy, class Category, test::Common IsCommon, test::Sized IsSized>\r\nusing test_range =\r\n    test::range<Category, ValTy, IsSized, test::CanDifference{derived_from<Category, random_access_iterator_tag>},\r\n        IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n        test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nstruct instantiator {\r\n#ifdef TEST_EVERYTHING\r\n    template <ranges::forward_range R>\r\n    static constexpr void call() {\r\n        R r{some_ints};\r\n        test_one<1>(r, adjacent1_result);\r\n        test_one<2>(r, pairwise_result);\r\n        test_one<4>(r, adjacent4_result);\r\n        test_one<7>(r, adjacent7_result);\r\n        test_adjacent0(r);\r\n\r\n        // We cannot invoke 'test_iter_swap' in 'TEST_EVERYTHING' mode.\r\n    }\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    template <class Tag, test::Common IsCommon, test::Sized IsSized>\r\n    static constexpr void call() {\r\n        test_range<const int, Tag, IsCommon, IsSized> r{some_ints};\r\n        test_one<1>(r, adjacent1_result);\r\n        test_one<2>(r, pairwise_result);\r\n        test_one<4>(r, adjacent4_result);\r\n        test_one<7>(r, adjacent7_result);\r\n        test_adjacent0(r);\r\n\r\n        int swap_check[4] = {1, 2, 3, 4};\r\n        test_range<int, Tag, IsCommon, IsSized> swap_check_r{swap_check};\r\n        test_iter_swap<2>(swap_check_r);\r\n        test_iter_swap<3>(swap_check_r);\r\n    }\r\n#endif // TEST_EVERYTHING\r\n};\r\n\r\nconstexpr void instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_fwd<instantiator, const int>();\r\n#else // ^^^ test all forward range permutations / test only \"interesting\" permutations vvv\r\n    using test::Common, test::Sized;\r\n\r\n    // The view is sensitive to category, commonality, and size, but oblivious to proxyness and differencing\r\n    instantiator::call<forward_iterator_tag, Common::no, Sized::yes>();\r\n    instantiator::call<forward_iterator_tag, Common::no, Sized::no>();\r\n    instantiator::call<forward_iterator_tag, Common::yes, Sized::yes>();\r\n    instantiator::call<forward_iterator_tag, Common::yes, Sized::no>();\r\n\r\n    instantiator::call<bidirectional_iterator_tag, Common::no, Sized::yes>();\r\n    instantiator::call<bidirectional_iterator_tag, Common::no, Sized::no>();\r\n    instantiator::call<bidirectional_iterator_tag, Common::yes, Sized::yes>();\r\n    instantiator::call<bidirectional_iterator_tag, Common::yes, Sized::no>();\r\n\r\n    instantiator::call<random_access_iterator_tag, Common::no, Sized::yes>();\r\n    instantiator::call<random_access_iterator_tag, Common::no, Sized::no>();\r\n    instantiator::call<random_access_iterator_tag, Common::yes, Sized::yes>();\r\n    instantiator::call<random_access_iterator_tag, Common::yes, Sized::no>();\r\n\r\n    instantiator::call<contiguous_iterator_tag, Common::no, Sized::yes>();\r\n    instantiator::call<contiguous_iterator_tag, Common::no, Sized::no>();\r\n    instantiator::call<contiguous_iterator_tag, Common::yes, Sized::yes>();\r\n    instantiator::call<contiguous_iterator_tag, Common::yes, Sized::no>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\n// LWG-4098 views::adjacent<0> should reject non-forward ranges\r\ntemplate <size_t N, ranges::input_range Rng>\r\nconstexpr void test_input_only(Rng&&) {\r\n    if constexpr (!ranges::forward_range<Rng>) {\r\n        static_assert(!CanViewAdjacent<Rng&, N>);\r\n        static_assert(!CanViewAdjacent<Rng, N>);\r\n        static_assert(!CanConstructAdjacentView<Rng&, N>);\r\n        static_assert(!CanConstructAdjacentView<Rng, N>);\r\n    }\r\n\r\n    if constexpr (!ranges::forward_range<const Rng>) {\r\n        static_assert(!CanViewAdjacent<const Rng&, N>);\r\n        static_assert(!CanViewAdjacent<const Rng, N>);\r\n        static_assert(!CanConstructAdjacentView<const Rng&, N>);\r\n        static_assert(!CanConstructAdjacentView<const Rng, N>);\r\n    }\r\n}\r\n\r\nstruct input_only_instantiator {\r\n#ifdef TEST_EVERYTHING\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        R r{some_ints};\r\n        test_input_only<0>(r);\r\n        test_input_only<1>(r);\r\n        test_input_only<2>(r);\r\n        test_input_only<4>(r);\r\n        test_input_only<7>(r);\r\n    }\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    template <class Tag, test::Common IsCommon, test::Sized IsSized>\r\n    static constexpr void call() {\r\n        test_range<const int, Tag, IsCommon, IsSized> r{some_ints};\r\n        test_input_only<0>(r);\r\n        test_input_only<1>(r);\r\n        test_input_only<2>(r);\r\n        test_input_only<4>(r);\r\n        test_input_only<7>(r);\r\n    }\r\n#endif // TEST_EVERYTHING\r\n};\r\n\r\nconstexpr void instantiation_input_only_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_in<input_only_instantiator, const int>();\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    using test::Common, test::Sized;\r\n\r\n    // The view is sensitive to category, commonality, and size, but oblivious to proxyness and differencing\r\n    input_only_instantiator::call<input_iterator_tag, Common::no, Sized::yes>();\r\n    input_only_instantiator::call<input_iterator_tag, Common::no, Sized::no>();\r\n    input_only_instantiator::call<input_iterator_tag, Common::yes, Sized::yes>();\r\n    input_only_instantiator::call<input_iterator_tag, Common::yes, Sized::no>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare::yes, test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>},\r\n    test::CanView::yes, test::Copyability::move_only>;\r\n\r\nint main() {\r\n    { // Check views\r\n        // ... copyable\r\n        constexpr span<const int> s{some_ints};\r\n        static_assert(test_one<4>(s, adjacent4_result));\r\n        test_one<4>(s, adjacent4_result);\r\n    }\r\n\r\n    { // ... move-only\r\n        test_one<1>(move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, adjacent1_result);\r\n        test_one<2>(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, pairwise_result);\r\n        test_one<3>(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, adjacent3_result);\r\n        test_one<4>(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, adjacent4_result);\r\n        test_one<5>(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, adjacent5_result);\r\n        test_one<6>(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, adjacent6_result);\r\n    }\r\n\r\n    { // Check non-views\r\n        static_assert(test_one<2>(some_ints, pairwise_result));\r\n        test_one<2>(some_ints, pairwise_result);\r\n\r\n        auto vec = some_ints | ranges::to<vector>();\r\n        test_one<3>(vec, adjacent3_result);\r\n\r\n        auto lst = some_ints | ranges::to<forward_list>();\r\n        test_one<4>(lst, adjacent4_result);\r\n    }\r\n\r\n    { // Check empty range\r\n        static_assert(test_one<3>(span<const int>{}, span<tuple<int, int, int>>{}));\r\n        test_one<3>(span<const int>{}, span<tuple<int, int, int>>{});\r\n    }\r\n\r\n#ifndef _PREFAST_ // TRANSITION, GH-1030\r\n    static_assert((instantiation_test(), true));\r\n#endif\r\n    instantiation_test();\r\n\r\n#ifndef _PREFAST_ // TRANSITION, GH-1030\r\n    static_assert((instantiation_input_only_test(), true));\r\n#endif\r\n    instantiation_input_only_test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2321R2_views_adjacent_transform/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2321R2_views_adjacent_transform/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <ranges>\r\n#include <span>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class R, class F, size_t N>\r\nconcept CanViewAdjacentTransform =\r\n    requires(R&& r, F&& f) { views::adjacent_transform<N>(forward<R>(r), forward<F>(f)); };\r\n\r\ntemplate <class T, class Indices>\r\nstruct repeated_tuple_impl;\r\n\r\ntemplate <class T, size_t... Indices>\r\nstruct repeated_tuple_impl<T, index_sequence<Indices...>> {\r\n    template <size_t>\r\n    using repeat_type = T;\r\n\r\n    using type = tuple<repeat_type<Indices>...>;\r\n};\r\n\r\ntemplate <class T, size_t N>\r\nusing repeated_tuple = repeated_tuple_impl<T, make_index_sequence<N>>::type;\r\n\r\nstatic_assert(same_as<repeated_tuple<int, 0>, tuple<>>);\r\nstatic_assert(same_as<repeated_tuple<int, 3>, tuple<int, int, int>>);\r\nstatic_assert(same_as<repeated_tuple<int, 5>, tuple<int, int, int, int, int>>);\r\n\r\ntemplate <class Fn, class Ty, class Indices>\r\nstruct regular_invocable_with_repeated_type_impl;\r\n\r\ntemplate <class F, class T, size_t... Indices>\r\nstruct regular_invocable_with_repeated_type_impl<F, T, index_sequence<Indices...>> {\r\n    template <size_t>\r\n    using repeat_type = T;\r\n\r\n    static constexpr bool value = regular_invocable<F, repeat_type<Indices>...>;\r\n};\r\n\r\ntemplate <class Fn, class Ty, size_t Nx>\r\nconcept regular_invocable_with_repeated_type =\r\n    regular_invocable_with_repeated_type_impl<Fn, Ty, make_index_sequence<Nx>>::value;\r\n\r\nstatic_assert(regular_invocable_with_repeated_type<plus<int>, int, 2>);\r\nstatic_assert(!regular_invocable_with_repeated_type<plus<int>, int, 3>);\r\nstatic_assert(!regular_invocable_with_repeated_type<plus<int>, span<int>, 2>);\r\n\r\ntemplate <class Fn, class Ty, size_t Nx, class... Repeated>\r\nstruct invoke_result_with_repeated_type_impl : invoke_result_with_repeated_type_impl<Fn, Ty, Nx - 1, Ty, Repeated...> {\r\n};\r\n\r\ntemplate <class Fn, class Ty, class... Repeated>\r\nstruct invoke_result_with_repeated_type_impl<Fn, Ty, 0, Repeated...> {\r\n    using type = invoke_result_t<Fn, Repeated...>;\r\n};\r\n\r\ntemplate <class Fn, class Ty, size_t Nx>\r\nusing invoke_result_with_repeated_type = invoke_result_with_repeated_type_impl<Fn, Ty, Nx>::type;\r\n\r\nstatic_assert(same_as<invoke_result_with_repeated_type<plus<int>, int, 2>, int>);\r\nstatic_assert(same_as<invoke_result_with_repeated_type<equal_to<int>, int, 2>, bool>);\r\n\r\ntemplate <size_t N, ranges::forward_range Rng, class Expected, class Fn>\r\nconstexpr bool test_one(Rng&& rng, Fn func, Expected&& expected_rng) {\r\n    using ranges::adjacent_transform_view, ranges::adjacent_view, ranges::forward_range, ranges::bidirectional_range,\r\n        ranges::random_access_range, ranges::sized_range, ranges::common_range, ranges::iterator_t,\r\n        ranges::const_iterator_t, ranges::sentinel_t, ranges::const_sentinel_t, ranges::range_reference_t,\r\n        ranges::range_difference_t, ranges::begin, ranges::end;\r\n\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n\r\n    using V = views::all_t<Rng>;\r\n    using R = adjacent_transform_view<V, decay_t<Fn>, N>;\r\n\r\n    static_assert(ranges::view<R>);\r\n    static_assert(forward_range<R>);\r\n    static_assert(bidirectional_range<R> == bidirectional_range<Rng>);\r\n    static_assert(random_access_range<R> == random_access_range<Rng>);\r\n    static_assert(!ranges::contiguous_range<R>);\r\n\r\n    // Check default-initializability\r\n    static_assert(default_initializable<R> == default_initializable<V>);\r\n\r\n    // Check borrowed_range\r\n    static_assert(!ranges::borrowed_range<R>);\r\n\r\n    // Check range closure object\r\n    const auto closure = views::adjacent_transform<N>(func);\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewAdjacentTransform<Rng&, Fn, N> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewAdjacentTransform<Rng&, Fn, N>) {\r\n        constexpr bool is_noexcept =\r\n            !is_view || (is_nothrow_copy_constructible_v<V> && is_nothrow_copy_constructible_v<Fn>);\r\n\r\n        static_assert(same_as<decltype(views::adjacent_transform<N>(rng, func)), R>);\r\n        static_assert(noexcept(views::adjacent_transform<N>(rng, func)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(closure(rng)), R>);\r\n        static_assert(noexcept(closure(rng)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | closure), R>);\r\n        static_assert(noexcept(rng | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(\r\n        CanViewAdjacentTransform<const remove_reference_t<Rng>&, Fn, N> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewAdjacentTransform<const remove_reference_t<Rng>&, Fn, N>) {\r\n        using RC = adjacent_transform_view<views::all_t<const remove_reference_t<Rng>&>, Fn, N>;\r\n        constexpr bool is_noexcept =\r\n            !is_view || (is_nothrow_copy_constructible_v<V> && is_nothrow_copy_constructible_v<Fn>);\r\n\r\n        static_assert(same_as<decltype(views::adjacent_transform<N>(as_const(rng), func)), RC>);\r\n        static_assert(noexcept(views::adjacent_transform<N>(as_const(rng), func)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(closure(as_const(rng))), RC>);\r\n        static_assert(noexcept(closure(as_const(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), RC>);\r\n        static_assert(noexcept(as_const(rng) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(\r\n        CanViewAdjacentTransform<remove_reference_t<Rng>, Fn, N> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (CanViewAdjacentTransform<remove_reference_t<Rng>, Fn, N>) {\r\n        using RS                   = adjacent_transform_view<views::all_t<remove_reference_t<Rng>>, Fn, N>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V> && is_nothrow_copy_constructible_v<Fn>;\r\n\r\n        static_assert(same_as<decltype(views::adjacent_transform<N>(move(rng), func)), RS>);\r\n        static_assert(noexcept(views::adjacent_transform<N>(move(rng), func)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(closure(move(rng))), RS>);\r\n        static_assert(noexcept(closure(move(rng))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | closure), RS>);\r\n        static_assert(noexcept(move(rng) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(\r\n        CanViewAdjacentTransform<const remove_reference_t<Rng>, Fn, N> == (is_view && copy_constructible<V>) );\r\n    if constexpr (CanViewAdjacentTransform<const remove_reference_t<Rng>, Fn, N>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V> && is_nothrow_copy_constructible_v<Fn>;\r\n\r\n        static_assert(same_as<decltype(views::adjacent_transform<N>(move(as_const(rng)), func)), R>);\r\n        static_assert(noexcept(views::adjacent_transform<N>(move(as_const(rng)), func)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(closure(move(as_const(rng)))), R>);\r\n        static_assert(noexcept(closure(move(as_const(rng)))) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | closure), R>);\r\n        static_assert(noexcept(move(as_const(rng)) | closure) == is_noexcept);\r\n    }\r\n\r\n    // Check views::pairwise_transform\r\n    if constexpr (N == 2) {\r\n        using Pairwised  = decltype(views::pairwise_transform(forward<Rng>(rng), func));\r\n        using Adjacented = decltype(views::adjacent_transform<2>(forward<Rng>(rng), func));\r\n        static_assert(same_as<Pairwised, Adjacented>);\r\n    }\r\n\r\n    R r{forward<Rng>(rng), func};\r\n\r\n    // Check adjacent_transform_view::size\r\n    static_assert(CanMemberSize<R> == sized_range<V>);\r\n    if constexpr (CanMemberSize<R>) {\r\n        same_as<ranges::range_size_t<V>> auto s = r.size();\r\n        assert(_To_unsigned_like(s) == ranges::size(expected_rng));\r\n        static_assert(noexcept(r.size()) == noexcept(ranges::size(rng))); // strengthened\r\n    }\r\n\r\n    // Check adjacent_transform_view::size (const)\r\n    static_assert(CanMemberSize<const R> == sized_range<const V>);\r\n    if constexpr (CanMemberSize<const R>) {\r\n        same_as<ranges::range_size_t<const V>> auto s = as_const(r).size();\r\n        assert(_To_unsigned_like(s) == ranges::size(expected_rng));\r\n        static_assert(noexcept(as_const(r).size()) == noexcept(ranges::size(as_const(rng)))); // strengthened\r\n    }\r\n\r\n    const bool is_empty = ranges::empty(expected_rng);\r\n\r\n    // Check view_interface::empty and operator bool\r\n    static_assert(CanMemberEmpty<R>);\r\n    static_assert(CanBool<R>);\r\n    assert(r.empty() == is_empty);\r\n    assert(static_cast<bool>(r) == !is_empty);\r\n\r\n    // Check view_interface::empty and operator bool (const)\r\n    static_assert(CanMemberEmpty<const R>);\r\n    static_assert(CanBool<const R>);\r\n    assert(as_const(r).empty() == is_empty);\r\n    assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n\r\n    // Check content\r\n    assert(ranges::equal(r, expected_rng));\r\n\r\n    // Check adjacent_transform_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    {\r\n        const same_as<iterator_t<R>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(*i == *begin(expected_rng));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            auto r2                              = r;\r\n            const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check adjacent_transform_view::begin (const)\r\n    static_assert(\r\n        CanMemberBegin<const R>\r\n        == (ranges::range<const V> && regular_invocable_with_repeated_type<const Fn&, range_reference_t<const V>, N>) );\r\n    if constexpr (CanMemberBegin<const R>) {\r\n        const same_as<iterator_t<const R>> auto ci = as_const(r).begin();\r\n        if (!is_empty) {\r\n            assert(*ci == *begin(expected_rng));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            const auto cr2                              = r;\r\n            const same_as<iterator_t<const R>> auto ci2 = cr2.begin();\r\n            if (!is_empty) {\r\n                assert(*ci2 == *ci);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check adjacent_transform_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    {\r\n        const same_as<sentinel_t<R>> auto s = r.end();\r\n        assert((r.begin() == s) == is_empty);\r\n\r\n        if constexpr (sentinel_for<sentinel_t<R>, iterator_t<const R>>) {\r\n            assert((as_const(r).begin() == s) == is_empty);\r\n        }\r\n\r\n        static_assert(common_range<R> == common_range<V>);\r\n        if constexpr (common_range<V> && bidirectional_range<V>) {\r\n            if (!is_empty) {\r\n                assert(*ranges::prev(s) == *ranges::prev(end(expected_rng)));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*ranges::prev(r2.end()) == *ranges::prev(end(expected_rng)));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check adjacent_transform_view::end (const)\r\n    static_assert(\r\n        CanMemberEnd<const R>\r\n        == (ranges::range<const V> && regular_invocable_with_repeated_type<const Fn&, range_reference_t<const V>, N>) );\r\n    if constexpr (CanMemberEnd<const R>) {\r\n        const same_as<sentinel_t<const R>> auto cs = as_const(r).end();\r\n        assert((as_const(r).begin() == cs) == is_empty);\r\n\r\n        if constexpr (sentinel_for<sentinel_t<const R>, iterator_t<R>>) {\r\n            assert((r.begin() == cs) == is_empty);\r\n        }\r\n\r\n        static_assert(common_range<const R> == common_range<const V>);\r\n        if constexpr (common_range<const V> && bidirectional_range<const V>) {\r\n            if (!is_empty) {\r\n                assert(*ranges::prev(cs) == *ranges::prev(end(expected_rng)));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                const auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*ranges::prev(r2.end()) == *ranges::prev(end(expected_rng)));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check view_interface::cbegin\r\n    static_assert(CanMemberCBegin<R>);\r\n    static_assert(\r\n        CanMemberCBegin<const R&>\r\n        == (ranges::range<const V> && regular_invocable_with_repeated_type<const Fn&, range_reference_t<const V>, N>) );\r\n    {\r\n        const same_as<const_iterator_t<R>> auto i = r.cbegin();\r\n        if (!is_empty) {\r\n            assert(*i == *cbegin(expected_rng));\r\n        }\r\n\r\n        if constexpr (copyable<V>) {\r\n            auto r2                                    = r;\r\n            const same_as<const_iterator_t<R>> auto i2 = r2.cbegin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n\r\n        if constexpr (CanCBegin<const R&>) {\r\n            const same_as<const_iterator_t<const R>> auto i3 = as_const(r).cbegin();\r\n            if (!is_empty) {\r\n                assert(*i3 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check view_interface::cend\r\n    static_assert(CanMemberCEnd<R>);\r\n    static_assert(\r\n        CanMemberCEnd<const R&>\r\n        == (ranges::range<const V> && regular_invocable_with_repeated_type<const Fn&, range_reference_t<const V>, N>) );\r\n    if (!is_empty) {\r\n        same_as<const_sentinel_t<R>> auto i = r.cend();\r\n        if constexpr (common_range<V> && sized_range<V> && bidirectional_range<V>) {\r\n            assert(*ranges::prev(i) == *ranges::prev(cend(expected_rng)));\r\n        }\r\n\r\n        if constexpr (CanCEnd<const R&>) {\r\n            same_as<const_sentinel_t<const R>> auto i2 = as_const(r).cend();\r\n            if constexpr (common_range<const V> && sized_range<const V> && bidirectional_range<const V>) {\r\n                assert(*ranges::prev(i2) == *ranges::prev(cend(expected_rng)));\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check view_interface::data\r\n    static_assert(!CanData<R>);\r\n    static_assert(!CanData<const R>);\r\n\r\n    if (is_empty) {\r\n        return true;\r\n    }\r\n\r\n    // Check view_interface::operator[]\r\n    static_assert(CanIndex<R> == random_access_range<V>);\r\n    if constexpr (CanIndex<R>) {\r\n        assert(r[0] == expected_rng[0]);\r\n    }\r\n\r\n    // Check view_interface::operator[] (const)\r\n    static_assert(CanIndex<const R> == random_access_range<const V>);\r\n    if constexpr (CanIndex<const R>) {\r\n        assert(as_const(r)[0] == expected_rng[0]);\r\n    }\r\n\r\n    // Check view_interface::front\r\n    static_assert(CanMemberFront<R>);\r\n    assert(r.front() == *begin(expected_rng));\r\n\r\n    // Check view_interface::front (const)\r\n    static_assert(CanMemberFront<const R>);\r\n    assert(as_const(r).front() == *begin(expected_rng));\r\n\r\n    // Check view_interface::back\r\n    static_assert(CanMemberBack<R> == (bidirectional_range<V> && common_range<V>) );\r\n    if constexpr (CanMemberBack<R>) {\r\n        assert(r.back() == *prev(end(expected_rng)));\r\n    }\r\n\r\n    // Check view_interface::back (const)\r\n    static_assert(CanMemberBack<const R> == (bidirectional_range<const V> && common_range<const V>) );\r\n    if constexpr (CanMemberBack<const R>) {\r\n        assert(as_const(r).back() == *prev(end(expected_rng)));\r\n    }\r\n\r\n    { // Check adjacent_transform_view::iterator<not const>\r\n        using BI = iterator_t<V>;\r\n        using I  = iterator_t<R>;\r\n        static_assert(forward_iterator<I>);\r\n\r\n        // Check iterator_category\r\n        using IterCat = I::iterator_category;\r\n        if constexpr (!is_reference_v<invoke_result_with_repeated_type<Fn, range_reference_t<V>, N>>) {\r\n            static_assert(same_as<IterCat, input_iterator_tag>);\r\n        } else {\r\n            using BaseCat = iterator_traits<BI>::iterator_category;\r\n            if constexpr (derived_from<BaseCat, random_access_iterator_tag>) {\r\n                static_assert(same_as<IterCat, random_access_iterator_tag>);\r\n            } else if constexpr (derived_from<BaseCat, bidirectional_iterator_tag>) {\r\n                static_assert(same_as<IterCat, bidirectional_iterator_tag>);\r\n            } else if constexpr (derived_from<BaseCat, forward_iterator_tag>) {\r\n                static_assert(same_as<IterCat, forward_iterator_tag>);\r\n            } else {\r\n                static_assert(same_as<IterCat, input_iterator_tag>);\r\n            }\r\n        }\r\n\r\n        // Check iterator_concept\r\n        using IterConcept = I::iterator_concept;\r\n        static_assert(same_as<IterConcept, typename iterator_t<adjacent_view<V, N>>::iterator_concept>);\r\n\r\n        // Check value_type\r\n        static_assert(same_as<typename I::value_type,\r\n            remove_cvref_t<invoke_result_with_repeated_type<Fn&, range_reference_t<V>, N>>>);\r\n\r\n        // Check default-initializability\r\n        static_assert(default_initializable<I>);\r\n\r\n        auto i = r.begin();\r\n\r\n        { // Check dereference\r\n            same_as<invoke_result_with_repeated_type<Fn&, range_reference_t<V>, N>> decltype(auto) v = *as_const(i);\r\n            assert(v == expected_rng[0]);\r\n        }\r\n\r\n        { // Check pre-incrementation\r\n            same_as<I&> decltype(auto) i2 = ++i;\r\n            assert(&i2 == &i);\r\n            if (i != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                assert(*i == expected_rng[1]);\r\n#pragma warning(pop)\r\n            }\r\n            i = r.begin();\r\n        }\r\n\r\n        { // Check post-incrementation\r\n            same_as<I> decltype(auto) i2 = i++;\r\n            assert(*i2 == expected_rng[0]);\r\n            if (i != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                assert(*i == expected_rng[1]);\r\n#pragma warning(pop)\r\n            }\r\n            i = r.begin();\r\n        }\r\n\r\n        { // Check equality comparisons\r\n            auto i2               = i;\r\n            same_as<bool> auto b1 = i == i2;\r\n            assert(b1);\r\n            ++i2;\r\n            same_as<bool> auto b2 = i != i2;\r\n            assert(b2);\r\n        }\r\n\r\n        if constexpr (bidirectional_range<V>) {\r\n            { // Check pre-decrementation\r\n                i = ranges::next(r.begin());\r\n\r\n                same_as<I&> decltype(auto) i2 = --i;\r\n                assert(&i2 == &i);\r\n                assert(*i2 == expected_rng[0]);\r\n            }\r\n\r\n            { // Check post-decrementation\r\n                i = ranges::next(r.begin());\r\n\r\n                same_as<I> decltype(auto) i2 = i--;\r\n                if (i2 != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                    assert(*i2 == expected_rng[1]);\r\n#pragma warning(pop)\r\n                }\r\n                assert(*i == expected_rng[0]);\r\n            }\r\n        }\r\n\r\n        if constexpr (random_access_range<V>) {\r\n            { // Check advancement operators\r\n                same_as<I&> decltype(auto) i2 = (i += 1);\r\n                assert(&i2 == &i);\r\n                if (i != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                    assert(*i == expected_rng[1]);\r\n#pragma warning(pop)\r\n                }\r\n\r\n                same_as<I&> decltype(auto) i3 = (i -= 1);\r\n                assert(&i3 == &i);\r\n                assert(*i == expected_rng[0]);\r\n            }\r\n\r\n            { // Check subscript operator\r\n                same_as<invoke_result_with_repeated_type<Fn&, range_reference_t<V>, N>> decltype(auto) v = i[0];\r\n                assert(v == expected_rng[0]);\r\n            }\r\n\r\n            { // Check other comparisons\r\n                auto i2               = ranges::next(i);\r\n                same_as<bool> auto b1 = i < i2;\r\n                assert(b1);\r\n                same_as<bool> auto b2 = i2 > i;\r\n                assert(b2);\r\n                same_as<bool> auto b3 = i <= i2;\r\n                assert(b3);\r\n                same_as<bool> auto b4 = i2 >= i;\r\n                assert(b4);\r\n            }\r\n\r\n            if constexpr (three_way_comparable<BI>) { // Check 3way comparisons\r\n                using Cat              = compare_three_way_result_t<BI>;\r\n                auto i2                = i;\r\n                same_as<Cat> auto cmp1 = i <=> i2;\r\n                assert(cmp1 == Cat::equivalent);\r\n                ++i2;\r\n                assert((i <=> i2) == Cat::less);\r\n                assert((i2 <=> i) == Cat::greater);\r\n            }\r\n\r\n            { // Check operator+\r\n                same_as<I> auto i2 = i + 1;\r\n                if (i2 != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                    assert(*i2 == expected_rng[1]);\r\n#pragma warning(pop)\r\n                }\r\n\r\n                same_as<I> auto i3 = 1 + i;\r\n                if (i3 != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                    assert(*i3 == expected_rng[1]);\r\n#pragma warning(pop)\r\n                }\r\n            }\r\n\r\n            { // Check operator-(Iter, Diff)\r\n                same_as<I> auto i2 = ranges::next(i) - 1;\r\n                assert(*i2 == expected_rng[0]);\r\n            }\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<BI, BI>) { // Check differencing\r\n            same_as<range_difference_t<V>> auto diff = i - i;\r\n            assert(diff == 0);\r\n            assert((i - ranges::next(i)) == -1);\r\n            assert((ranges::next(i) - i) == 1);\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<sentinel_t<R>, I>) { // Check differencing with sentinel<not const>\r\n            const auto s                                    = r.end();\r\n            const auto size                                 = ranges::ssize(expected_rng);\r\n            const same_as<range_difference_t<V>> auto diff1 = i - s;\r\n            assert(diff1 == -size);\r\n            const same_as<range_difference_t<V>> auto diff2 = s - i;\r\n            assert(diff2 == size);\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<sentinel_t<const R>, I>) { // Check differencing with sentinel<const>\r\n            const auto s                                    = as_const(r).end();\r\n            const auto size                                 = ranges::ssize(expected_rng);\r\n            const same_as<range_difference_t<V>> auto diff1 = i - s;\r\n            assert(diff1 == -size);\r\n            const same_as<range_difference_t<V>> auto diff2 = s - i;\r\n            assert(diff2 == size);\r\n        }\r\n    }\r\n\r\n    // Check adjacent_transform_view::iterator<const>\r\n    if constexpr (CanMemberBegin<const R>) {\r\n        using CBI = iterator_t<const V>;\r\n        using CI  = iterator_t<const R>;\r\n        static_assert(forward_iterator<CI>);\r\n\r\n        // Check iterator_category\r\n        using IterCat = CI::iterator_category;\r\n        if constexpr (!is_reference_v<invoke_result_with_repeated_type<Fn, range_reference_t<const V>, N>>) {\r\n            static_assert(same_as<IterCat, input_iterator_tag>);\r\n        } else {\r\n            using BaseCat = iterator_traits<CBI>::iterator_category;\r\n            if constexpr (derived_from<BaseCat, random_access_iterator_tag>) {\r\n                static_assert(same_as<IterCat, random_access_iterator_tag>);\r\n            } else if constexpr (derived_from<BaseCat, bidirectional_iterator_tag>) {\r\n                static_assert(same_as<IterCat, bidirectional_iterator_tag>);\r\n            } else if constexpr (derived_from<BaseCat, forward_iterator_tag>) {\r\n                static_assert(same_as<IterCat, forward_iterator_tag>);\r\n            } else {\r\n                static_assert(same_as<IterCat, input_iterator_tag>);\r\n            }\r\n        }\r\n\r\n        // Check iterator_concept\r\n        using IterConcept = CI::iterator_concept;\r\n        static_assert(same_as<IterConcept, typename iterator_t<const adjacent_view<V, N>>::iterator_concept>);\r\n\r\n        // Check value_type\r\n        static_assert(same_as<typename CI::value_type,\r\n            remove_cvref_t<invoke_result_with_repeated_type<const Fn&, range_reference_t<const V>, N>>>);\r\n\r\n        // Check default-initializability\r\n        static_assert(default_initializable<CI>);\r\n\r\n        iterator_t<R> i = r.begin();\r\n\r\n        // Check construction from non-const iterator\r\n        CI ci = i;\r\n\r\n        { // Check dereference\r\n            same_as<invoke_result_with_repeated_type<const Fn&, range_reference_t<const V>, N>> decltype(auto) v =\r\n                *as_const(ci);\r\n            assert(v == expected_rng[0]);\r\n        }\r\n\r\n        { // Check pre-incrementation\r\n            same_as<CI&> decltype(auto) ci2 = ++ci;\r\n            assert(&ci2 == &ci);\r\n            if (ci != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                assert(*ci == expected_rng[1]);\r\n#pragma warning(pop)\r\n            }\r\n            ci = r.begin();\r\n        }\r\n\r\n        { // Check post-incrementation\r\n            same_as<CI> decltype(auto) ci2 = ci++;\r\n            assert(*ci2 == expected_rng[0]);\r\n            if (ci != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                assert(*ci == expected_rng[1]);\r\n#pragma warning(pop)\r\n            }\r\n            ci = r.begin();\r\n        }\r\n\r\n        { // Check equality comparisons\r\n            auto ci2              = ci;\r\n            same_as<bool> auto b1 = ci == ci2;\r\n            assert(b1);\r\n            ++ci2;\r\n            same_as<bool> auto b2 = ci != ci2;\r\n            assert(b2);\r\n        }\r\n\r\n        { // Check equality comparisons with non-const iterators\r\n            same_as<bool> auto b1 = ci == i;\r\n            assert(b1);\r\n            ++i;\r\n            same_as<bool> auto b2 = ci != i;\r\n            assert(b2);\r\n            i = r.begin();\r\n        }\r\n\r\n        if constexpr (bidirectional_range<const V>) {\r\n            { // Check pre-decrementation\r\n                ci = ranges::next(r.begin());\r\n\r\n                same_as<CI&> decltype(auto) ci2 = --ci;\r\n                assert(&ci2 == &ci);\r\n                assert(*ci2 == expected_rng[0]);\r\n            }\r\n\r\n            { // Check post-decrementation\r\n                ci = ranges::next(r.begin());\r\n\r\n                same_as<CI> decltype(auto) ci2 = ci--;\r\n                if (ci2 != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                    assert(*ci2 == expected_rng[1]);\r\n#pragma warning(pop)\r\n                }\r\n                assert(*ci == expected_rng[0]);\r\n            }\r\n        }\r\n\r\n        if constexpr (random_access_range<const V>) {\r\n            { // Check advancement operators\r\n                same_as<CI&> decltype(auto) ci2 = (ci += 1);\r\n                assert(&ci2 == &ci);\r\n                if (ci != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                    assert(*ci == expected_rng[1]);\r\n#pragma warning(pop)\r\n                }\r\n\r\n                same_as<CI&> decltype(auto) ci3 = (ci -= 1);\r\n                assert(&ci3 == &ci);\r\n                assert(*ci == expected_rng[0]);\r\n            }\r\n\r\n            { // Check subscript operator\r\n                same_as<invoke_result_with_repeated_type<const Fn&, range_reference_t<const V>, N>> decltype(auto) v =\r\n                    ci[0];\r\n                assert(v == expected_rng[0]);\r\n            }\r\n\r\n            { // Check comparisons\r\n                auto ci2              = ranges::next(ci);\r\n                same_as<bool> auto b1 = ci < ci2;\r\n                assert(b1);\r\n                same_as<bool> auto b2 = ci2 > ci;\r\n                assert(b2);\r\n                same_as<bool> auto b3 = ci <= ci2;\r\n                assert(b3);\r\n                same_as<bool> auto b4 = ci2 >= ci;\r\n                assert(b4);\r\n            }\r\n\r\n            { // Check comparisons with non-const iterators\r\n                ++i;\r\n                same_as<bool> auto b1 = ci < i;\r\n                assert(b1);\r\n                same_as<bool> auto b2 = i > ci;\r\n                assert(b2);\r\n                same_as<bool> auto b3 = ci <= i;\r\n                assert(b3);\r\n                same_as<bool> auto b4 = i >= ci;\r\n                assert(b4);\r\n                --i;\r\n            }\r\n\r\n            if constexpr (three_way_comparable<CBI>) { // Check 3way comparisons\r\n                using Cat              = compare_three_way_result_t<CBI>;\r\n                auto ci2               = ci;\r\n                same_as<Cat> auto cmp1 = ci <=> ci2;\r\n                assert(cmp1 == Cat::equivalent);\r\n                ++ci2;\r\n                assert((ci <=> ci2) == Cat::less);\r\n                assert((ci2 <=> ci) == Cat::greater);\r\n            }\r\n\r\n            if constexpr (three_way_comparable<CBI>) { // Check 3way comparisons with non-const iterators\r\n                using Cat              = compare_three_way_result_t<CBI>;\r\n                same_as<Cat> auto cmp1 = ci <=> i;\r\n                assert(cmp1 == Cat::equivalent);\r\n                ++i;\r\n                assert((ci <=> i) == Cat::less);\r\n                assert((i <=> ci) == Cat::greater);\r\n                --i;\r\n            }\r\n\r\n            { // Check operator+\r\n                same_as<CI> auto ci2 = ci + 1;\r\n                if (ci2 != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                    assert(*ci2 == expected_rng[1]);\r\n#pragma warning(pop)\r\n                }\r\n\r\n                same_as<CI> auto ci3 = 1 + ci;\r\n                if (ci3 != r.end()) {\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // The expression '_Param_(1)<1' is not true at this call.\r\n                    assert(*ci3 == expected_rng[1]);\r\n#pragma warning(pop)\r\n                }\r\n            }\r\n\r\n            { // Check operator-(Iter, Diff)\r\n                same_as<CI> auto ci2 = ranges::next(ci) - 1;\r\n                assert(*ci2 == expected_rng[0]);\r\n            }\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<CBI, CBI>) { // Check differencing\r\n            same_as<range_difference_t<const V>> auto diff = ci - ci;\r\n            assert(diff == 0);\r\n            assert((ci - ranges::next(ci)) == -1);\r\n            assert((ranges::next(ci) - ci) == 1);\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<sentinel_t<R>, CI>) { // Check differencing with sentinel<not const>\r\n            const auto s                                          = r.end();\r\n            const auto size                                       = ranges::ssize(expected_rng);\r\n            const same_as<range_difference_t<const V>> auto diff1 = ci - s;\r\n            assert(diff1 == -size);\r\n            const same_as<range_difference_t<const V>> auto diff2 = s - ci;\r\n            assert(diff2 == size);\r\n        }\r\n\r\n        if constexpr (sized_sentinel_for<sentinel_t<const R>, CI>) { // Check differencing with sentinel<const>\r\n            const auto s                                          = as_const(r).end();\r\n            const auto size                                       = ranges::ssize(expected_rng);\r\n            const same_as<range_difference_t<const V>> auto diff1 = ci - s;\r\n            assert(diff1 == -size);\r\n            const same_as<range_difference_t<const V>> auto diff2 = s - ci;\r\n            assert(diff2 == size);\r\n        }\r\n    }\r\n\r\n    // Check adjacent_transform_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V>) {\r\n        [[maybe_unused]] same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>); // strengthened\r\n    }\r\n\r\n    // Check adjacent_transform_view::base() &&\r\n    [[maybe_unused]] same_as<V> auto b2 = move(r).base();\r\n    static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>); // strengthened\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <ranges::forward_range Rng>\r\nconstexpr void test_adjacent0(Rng&& rng) {\r\n    auto func = [] { return 602; };\r\n    using Fn  = decltype(func);\r\n\r\n    using V = views::all_t<Rng>;\r\n    using E = ranges::empty_view<int>;\r\n\r\n    // Check range closure object\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n    const auto closure     = views::adjacent_transform<0>(func);\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewAdjacentTransform<Rng&, Fn, 0> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewAdjacentTransform<Rng&, Fn, 0>) {\r\n        static_assert(same_as<decltype(views::adjacent_transform<0>(rng, func)), E>);\r\n        static_assert(noexcept(views::adjacent_transform<0>(rng, func)) == is_nothrow_copy_constructible_v<Fn>);\r\n\r\n        static_assert(same_as<decltype(closure(rng)), E>);\r\n        static_assert(noexcept(closure(rng)) == is_nothrow_copy_constructible_v<Fn>);\r\n\r\n        static_assert(same_as<decltype(rng | closure), E>);\r\n        static_assert(noexcept(rng | closure) == is_nothrow_copy_constructible_v<Fn>);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(\r\n        CanViewAdjacentTransform<const remove_reference_t<Rng>&, Fn, 0> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewAdjacentTransform<const remove_reference_t<Rng>&, Fn, 0>) {\r\n        static_assert(same_as<decltype(views::adjacent_transform<0>(as_const(rng), func)), E>);\r\n        static_assert(\r\n            noexcept(views::adjacent_transform<0>(as_const(rng), func)) == is_nothrow_copy_constructible_v<Fn>);\r\n\r\n        static_assert(same_as<decltype(closure(as_const(rng))), E>);\r\n        static_assert(noexcept(closure(as_const(rng))) == is_nothrow_copy_constructible_v<Fn>);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), E>);\r\n        static_assert(noexcept(as_const(rng) | closure) == is_nothrow_copy_constructible_v<Fn>);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(\r\n        CanViewAdjacentTransform<remove_reference_t<Rng>, Fn, 0> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (CanViewAdjacentTransform<remove_reference_t<Rng>, Fn, 0>) {\r\n        static_assert(same_as<decltype(views::adjacent_transform<0>(move(rng), func)), E>);\r\n        static_assert(noexcept(views::adjacent_transform<0>(move(rng), func)) == is_nothrow_copy_constructible_v<Fn>);\r\n\r\n        static_assert(same_as<decltype(closure(move(rng))), E>);\r\n        static_assert(noexcept(closure(move(rng))) == is_nothrow_copy_constructible_v<Fn>);\r\n\r\n        static_assert(same_as<decltype(move(rng) | closure), E>);\r\n        static_assert(noexcept(move(rng) | closure) == is_nothrow_copy_constructible_v<Fn>);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(\r\n        CanViewAdjacentTransform<const remove_reference_t<Rng>, Fn, 0> == (is_view && copy_constructible<V>) );\r\n    if constexpr (CanViewAdjacentTransform<const remove_reference_t<Rng>, Fn, 0>) {\r\n        static_assert(same_as<decltype(views::adjacent_transform<0>(move(as_const(rng)), func)), E>);\r\n        static_assert(\r\n            noexcept(views::adjacent_transform<0>(move(as_const(rng)), func)) == is_nothrow_copy_constructible_v<Fn>);\r\n\r\n        static_assert(same_as<decltype(closure(move(as_const(rng)))), E>);\r\n        static_assert(noexcept(closure(move(as_const(rng)))) == is_nothrow_copy_constructible_v<Fn>);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | closure), E>);\r\n        static_assert(noexcept(move(as_const(rng)) | closure) == is_nothrow_copy_constructible_v<Fn>);\r\n    }\r\n}\r\n\r\n// We have to use std::array instead of C-array, see LLVM-61025\r\nconstexpr auto some_ints        = array{1, 3, 5, 7, 11, 13};\r\nconstexpr auto adjacent1_fn     = [](auto&& val) -> const int& { return val; };\r\nconstexpr auto adjacent1_result = array{1, 3, 5, 7, 11, 13};\r\nconstexpr auto pairwise_fn      = plus<int>{};\r\nconstexpr auto pairwise_result  = array{4, 8, 12, 18, 24};\r\nconstexpr auto adjacent3_fn     = [](auto... vals) { return (vals * ...); };\r\nconstexpr auto adjacent3_result = array{15, 105, 385, 1001};\r\nconstexpr auto adjacent4_fn     = [](auto... vals) { return (vals | ...); };\r\nconstexpr auto adjacent4_result = array{7, 15, 15};\r\nconstexpr auto adjacent5_fn     = [](auto... vals) { return (vals - ...); };\r\nconstexpr auto adjacent5_result = array{7, 7};\r\nconstexpr auto adjacent6_fn     = [](auto... vals) { return (... - vals); };\r\nconstexpr auto adjacent6_result = array{-38};\r\nconstexpr auto adjacent7_fn     = [](auto...) { return 0; };\r\nconstexpr array<int, 0> adjacent7_result{};\r\n\r\ntemplate <class Category, test::Common IsCommon, test::Sized IsSized>\r\nusing test_range =\r\n    test::range<Category, const int, IsSized, test::CanDifference{derived_from<Category, random_access_iterator_tag>},\r\n        IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n        test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nstruct instantiator {\r\n    template <ranges::forward_range R>\r\n    static constexpr void call() {\r\n        R r{some_ints};\r\n        test_one<1>(r, adjacent1_fn, adjacent1_result);\r\n        test_one<2>(r, pairwise_fn, pairwise_result);\r\n#ifndef _M_IX86 // fatal error C1060: compiler is out of heap space\r\n        test_one<4>(r, adjacent4_fn, adjacent4_result);\r\n#endif // !defined(_M_IX86)\r\n        test_one<7>(r, adjacent7_fn, adjacent7_result);\r\n        test_adjacent0(r);\r\n    }\r\n};\r\n\r\nconstexpr void instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_fwd<instantiator, const int>();\r\n#else // ^^^ test all forward range permutations / test only \"interesting\" permutations vvv\r\n    using test::Common, test::Sized;\r\n\r\n    // The view is sensitive to category, commonality, and size, but oblivious to proxyness and differencing\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes, Sized::no>>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\n// LWG-4098 views::adjacent<0> should reject non-forward ranges\r\ntemplate <size_t N, ranges::input_range Rng, class Fn>\r\nconstexpr void test_input_only(Rng&&, Fn&&) {\r\n    if constexpr (!ranges::forward_range<Rng>) {\r\n        static_assert(!CanViewAdjacentTransform<Rng&, Fn, N>);\r\n        static_assert(!CanViewAdjacentTransform<Rng, Fn, N>);\r\n    }\r\n\r\n    if constexpr (!ranges::forward_range<const Rng>) {\r\n        static_assert(!CanViewAdjacentTransform<const Rng&, Fn, N>);\r\n        static_assert(!CanViewAdjacentTransform<const Rng, Fn, N>);\r\n    }\r\n}\r\n\r\nstruct input_only_instantiator {\r\n#ifdef TEST_EVERYTHING\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        R r{some_ints};\r\n        auto nullary_fn = [] { return 1729; };\r\n        test_input_only<0>(r, nullary_fn);\r\n        test_input_only<1>(r, adjacent1_fn);\r\n        test_input_only<2>(r, pairwise_fn);\r\n        test_input_only<4>(r, adjacent4_fn);\r\n        test_input_only<7>(r, adjacent7_fn);\r\n    }\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    template <class Tag, test::Common IsCommon, test::Sized IsSized>\r\n    static constexpr void call() {\r\n        test_range<Tag, IsCommon, IsSized> r{some_ints};\r\n        auto nullary_fn = [] { return 1729; };\r\n        test_input_only<0>(r, nullary_fn);\r\n        test_input_only<1>(r, adjacent1_fn);\r\n        test_input_only<2>(r, pairwise_fn);\r\n        test_input_only<4>(r, adjacent4_fn);\r\n        test_input_only<7>(r, adjacent7_fn);\r\n    }\r\n#endif // TEST_EVERYTHING\r\n};\r\n\r\nconstexpr void instantiation_input_only_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_in<input_only_instantiator, const int>();\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    using test::Common, test::Sized;\r\n\r\n    // The view is sensitive to category, commonality, and size, but oblivious to proxyness and differencing\r\n    input_only_instantiator::call<input_iterator_tag, Common::no, Sized::yes>();\r\n    input_only_instantiator::call<input_iterator_tag, Common::no, Sized::no>();\r\n    input_only_instantiator::call<input_iterator_tag, Common::yes, Sized::yes>();\r\n    input_only_instantiator::call<input_iterator_tag, Common::yes, Sized::no>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\ntemplate <class Category, test::Common IsCommon, bool IsRandom = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{IsRandom}, test::CanDifference{IsRandom}, IsCommon,\r\n    test::CanCompare::yes, test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes,\r\n    test::Copyability::move_only>;\r\n\r\nint main() {\r\n    { // Check views\r\n        // ... copyable\r\n        constexpr span<const int> s{some_ints};\r\n        static_assert(test_one<4>(s, adjacent4_fn, adjacent4_result));\r\n        test_one<4>(s, adjacent4_fn, adjacent4_result);\r\n    }\r\n\r\n    { // ... move-only\r\n        test_one<1>(move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, adjacent1_fn, adjacent1_result);\r\n        test_one<2>(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, pairwise_fn, pairwise_result);\r\n        test_one<3>(\r\n            move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, adjacent3_fn, adjacent3_result);\r\n        test_one<4>(\r\n            move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, adjacent4_fn, adjacent4_result);\r\n        test_one<5>(\r\n            move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, adjacent5_fn, adjacent5_result);\r\n        test_one<6>(\r\n            move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, adjacent6_fn, adjacent6_result);\r\n    }\r\n\r\n    { // Check non-views\r\n        static_assert(test_one<2>(some_ints, pairwise_fn, pairwise_result));\r\n        test_one<2>(some_ints, pairwise_fn, pairwise_result);\r\n\r\n        auto vec = some_ints | ranges::to<vector>();\r\n        test_one<3>(vec, adjacent3_fn, adjacent3_result);\r\n\r\n        auto lst = some_ints | ranges::to<forward_list>();\r\n        test_one<4>(lst, adjacent4_fn, adjacent4_result);\r\n    }\r\n\r\n    { // Check empty range\r\n        constexpr auto to_float = [](int x, int y, int z) { return static_cast<float>(x + y + z); };\r\n        static_assert(test_one<3>(span<const int>{}, to_float, span<float>{}));\r\n        test_one<3>(span<const int>{}, to_float, span<float>{});\r\n    }\r\n\r\n    { // LWG-3947 Unexpected constraints on adjacent_transform_view::base()\r\n        struct weird_span : span<int>, ranges::view_base {\r\n            weird_span()                  = default;\r\n            weird_span(const weird_span&) = default;\r\n            weird_span(weird_span&)       = delete;\r\n\r\n            weird_span& operator=(const weird_span&) = default;\r\n        };\r\n        static_assert(!copy_constructible<weird_span>);\r\n\r\n        using weird_adjacent_transform_view = ranges::adjacent_transform_view<weird_span, ranges::equal_to, 2>;\r\n        static_assert(!CanMemberBase<weird_adjacent_transform_view&>);\r\n        static_assert(!CanMemberBase<const weird_adjacent_transform_view&>);\r\n        static_assert(!CanMemberBase<const weird_adjacent_transform_view>);\r\n        static_assert(CanMemberBase<weird_adjacent_transform_view>);\r\n    }\r\n\r\n#ifndef _PREFAST_ // TRANSITION, GH-1030\r\n    static_assert((instantiation_test(), true));\r\n#endif\r\n    instantiation_test();\r\n\r\n#ifndef _PREFAST_ // TRANSITION, GH-1030\r\n    static_assert((instantiation_input_only_test(), true));\r\n#endif\r\n    instantiation_input_only_test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2321R2_views_zip/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# NOTE: zip_view::_Iterator defines ADL overloads for iter_swap and iter_move,\r\n# so the test fails to compile unless /permissive- is set. This issue isn't\r\n# unique to zip_view; all view types whose iterators define overloads for these\r\n# functions have this requirement.\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/DTEST_INPUT\"\r\n*\tPM_CL=\"/DTEST_FORWARD\"\r\n*\tPM_CL=\"/DTEST_BIDIRECTIONAL\"\r\n*\tPM_CL=\"/DTEST_RANDOM\"\r\n"
  },
  {
    "path": "tests/std/tests/P2321R2_views_zip/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <memory>\r\n#include <ranges>\r\n#include <span>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class... RangeTypes>\r\nconcept CanViewZip = requires(RangeTypes&&... rngs) { views::zip(std::forward<RangeTypes>(rngs)...); };\r\n\r\ntemplate <class RangeType>\r\nusing AllView = views::all_t<RangeType>;\r\n\r\ntemplate <class ElementType>\r\nconcept CanTestElementType = // Required for iter_swap test\r\n    (copy_constructible<ElementType> && equality_comparable<ElementType> && swappable<ElementType>);\r\n\r\ntemplate <class Type1, size_t Type1Size, class Type2, size_t Type2Size, class Type3, size_t Type3Size>\r\n    requires (CanTestElementType<Type1> && CanTestElementType<Type2> && CanTestElementType<Type3>)\r\nclass three_element_test_container {\r\nprivate:\r\n    array<Type1, Type1Size> type_one_array;\r\n    array<Type2, Type2Size> type_two_array;\r\n    array<Type3, Type3Size> type_three_array;\r\n\r\npublic:\r\n    using element_tuple_type       = tuple<Type1, Type2, Type3>;\r\n    using const_element_tuple_type = tuple<const Type1, const Type2, const Type3>;\r\n\r\n    using reference_tuple_type              = tuple<Type1&, Type2&, Type3&>;\r\n    using const_reference_tuple_type        = tuple<const Type1&, const Type2&, const Type3&>;\r\n    using rvalue_reference_tuple_type       = tuple<Type1&&, Type2&&, Type3&&>;\r\n    using const_rvalue_reference_tuple_type = tuple<const Type1&&, const Type2&&, const Type3&&>;\r\n\r\n    static constexpr size_t smallest_array_size = (min) ({Type1Size, Type2Size, Type3Size});\r\n\r\n    constexpr three_element_test_container(const array<Type1, Type1Size>& type_one_init_arr,\r\n        const array<Type2, Type2Size>& type_two_init_arr, const array<Type3, Type3Size>& type_three_init_arr)\r\n        : type_one_array(type_one_init_arr), type_two_array(type_two_init_arr), type_three_array(type_three_init_arr) {}\r\n\r\n    template <size_t ElementIndex>\r\n    constexpr auto get_element_span() {\r\n        static_assert(ElementIndex < 3);\r\n\r\n        if constexpr (ElementIndex == 0) {\r\n            return span<Type1, Type1Size>{type_one_array};\r\n        } else if constexpr (ElementIndex == 1) {\r\n            return span<Type2, Type2Size>{type_two_array};\r\n        } else {\r\n            return span<Type3, Type3Size>{type_three_array};\r\n        }\r\n    }\r\n\r\n    template <size_t ElementIndex>\r\n    constexpr auto get_element_span() const {\r\n        static_assert(ElementIndex < 3);\r\n\r\n        if constexpr (ElementIndex == 0) {\r\n            return span<add_const_t<Type1>, Type1Size>{type_one_array};\r\n        } else if constexpr (ElementIndex == 1) {\r\n            return span<add_const_t<Type2>, Type2Size>{type_two_array};\r\n        } else {\r\n            return span<add_const_t<Type3>, Type3Size>{type_three_array};\r\n        }\r\n    }\r\n\r\n    template <size_t ElementIndex>\r\n    constexpr auto& get_underlying_element_array() {\r\n        static_assert(ElementIndex < 3);\r\n\r\n        if constexpr (ElementIndex == 0) {\r\n            return type_one_array;\r\n        } else if constexpr (ElementIndex == 1) {\r\n            return type_two_array;\r\n        } else {\r\n            return type_three_array;\r\n        }\r\n    }\r\n\r\n    template <size_t ElementIndex>\r\n    constexpr const auto& get_underlying_element_array() const {\r\n        static_assert(ElementIndex < 3);\r\n\r\n        if constexpr (ElementIndex == 0) {\r\n            return type_one_array;\r\n        } else if constexpr (ElementIndex == 1) {\r\n            return type_two_array;\r\n        } else {\r\n            return type_three_array;\r\n        }\r\n    }\r\n\r\n    constexpr reference_tuple_type get_expected_element_tuple(const size_t index) {\r\n        assert(index < smallest_array_size);\r\n        return reference_tuple_type{type_one_array[index], type_two_array[index], type_three_array[index]};\r\n    }\r\n\r\n    constexpr const_reference_tuple_type get_expected_element_tuple(const size_t index) const {\r\n        assert(index < smallest_array_size);\r\n        return const_reference_tuple_type{type_one_array[index], type_two_array[index], type_three_array[index]};\r\n    }\r\n\r\n    constexpr array<reference_tuple_type, smallest_array_size> get_element_tuple_arr() {\r\n        const auto make_tuple_arr_lambda = [this]<size_t... Indices>(index_sequence<Indices...>) {\r\n            return array{get_expected_element_tuple(Indices)...};\r\n        };\r\n\r\n        return make_tuple_arr_lambda(make_index_sequence<smallest_array_size>{});\r\n    }\r\n\r\n    constexpr array<const_reference_tuple_type, smallest_array_size> get_element_tuple_arr() const {\r\n        const auto make_tuple_arr_lambda = [this]<size_t... Indices>(index_sequence<Indices...>) {\r\n            return array{get_expected_element_tuple(Indices)...};\r\n        };\r\n\r\n        return make_tuple_arr_lambda(make_index_sequence<smallest_array_size>{});\r\n    }\r\n};\r\n\r\ntemplate <class Type, size_t Size>\r\n    requires (CanTestElementType<Type>)\r\nclass single_element_test_container {\r\nprivate:\r\n    array<Type, Size> element_array;\r\n\r\npublic:\r\n    using element_tuple_type       = tuple<Type>;\r\n    using const_element_tuple_type = tuple<const Type>;\r\n\r\n    using reference_tuple_type              = tuple<Type&>;\r\n    using const_reference_tuple_type        = tuple<const Type&>;\r\n    using rvalue_reference_tuple_type       = tuple<Type&&>;\r\n    using const_rvalue_reference_tuple_type = tuple<const Type&&>;\r\n\r\n    static constexpr size_t smallest_array_size = Size;\r\n\r\n    constexpr single_element_test_container(const array<Type, Size>& element_init_arr)\r\n        : element_array(element_init_arr) {}\r\n\r\n    constexpr auto get_element_span() {\r\n        return span<Type>{element_array};\r\n    }\r\n\r\n    constexpr auto get_element_span() const {\r\n        return span<add_const_t<Type>>{element_array};\r\n    }\r\n\r\n    constexpr auto& get_underlying_element_array() {\r\n        return element_array;\r\n    }\r\n\r\n    constexpr const auto& get_underlying_element_array() const {\r\n        return element_array;\r\n    }\r\n\r\n    constexpr reference_tuple_type get_expected_element_tuple(const size_t index) {\r\n        assert(index < smallest_array_size);\r\n        return reference_tuple_type{element_array[index]};\r\n    }\r\n\r\n    constexpr const_reference_tuple_type get_expected_element_tuple(const size_t index) const {\r\n        assert(index < smallest_array_size);\r\n        return const_reference_tuple_type{element_array[index]};\r\n    }\r\n\r\n    constexpr array<reference_tuple_type, smallest_array_size> get_element_tuple_arr() {\r\n        const auto make_tuple_arr_lambda = [this]<size_t... Indices>(index_sequence<Indices...>) {\r\n            return array{get_expected_element_tuple(Indices)...};\r\n        };\r\n\r\n        return make_tuple_arr_lambda(make_index_sequence<smallest_array_size>{});\r\n    }\r\n\r\n    constexpr array<const_reference_tuple_type, smallest_array_size> get_element_tuple_arr() const {\r\n        const auto make_tuple_arr_lambda = [this]<size_t... Indices>(index_sequence<Indices...>) {\r\n            return array{get_expected_element_tuple(Indices)...};\r\n        };\r\n\r\n        return make_tuple_arr_lambda(make_index_sequence<smallest_array_size>{});\r\n    }\r\n};\r\n\r\n// NOTE: views::zip shouldn't care about whether or not the views use proxy references,\r\n// but for our tests, we need to.\r\ntemplate <class T>\r\nstruct reference_type_solver {\r\n    using reference_type = const T&;\r\n};\r\n\r\ntemplate <class Category, class Element>\r\nstruct reference_type_solver<test::proxy_reference<Category, Element>> {\r\n    using reference_type = const Element&;\r\n};\r\n\r\ntemplate <class LHSTupleType, class RHSTupleType>\r\nconstexpr bool do_tuples_reference_same_objects(const LHSTupleType& lhs_tuple, const RHSTupleType& rhs_tuple) {\r\n    static_assert(tuple_size_v<LHSTupleType> == tuple_size_v<RHSTupleType>);\r\n\r\n    const auto evaluate_single_element_lambda = [&lhs_tuple, &rhs_tuple]<size_t CurrIndex>() {\r\n        using reference_type = reference_type_solver<tuple_element_t<CurrIndex, LHSTupleType>>::reference_type;\r\n        return addressof(static_cast<reference_type>(get<CurrIndex>(lhs_tuple)))\r\n            == addressof(static_cast<reference_type>(get<CurrIndex>(rhs_tuple)));\r\n    };\r\n\r\n    using index_sequence_type         = make_index_sequence<tuple_size_v<LHSTupleType>>;\r\n    const auto evaluate_tuples_lambda = [&evaluate_single_element_lambda]<size_t... Indices>(\r\n                                            index_sequence<Indices...>) {\r\n        return (evaluate_single_element_lambda.template operator()<Indices>() && ...);\r\n    };\r\n\r\n    return evaluate_tuples_lambda(index_sequence_type{});\r\n}\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4100) // unreferenced formal parameter\r\n\r\ntemplate <class TestContainerType, ranges::input_range... RangeTypes>\r\nconstexpr bool test_one(TestContainerType& test_container, RangeTypes&&... rngs) {\r\n    // Ignore instances where one of the generated test ranges does not model\r\n    // ranges::viewable_range.\r\n    if constexpr ((ranges::viewable_range<RangeTypes&> && ...)) {\r\n        using ZipType = ranges::zip_view<AllView<RangeTypes&>...>;\r\n\r\n        constexpr bool are_views = (ranges::view<remove_cvref_t<RangeTypes&>> && ...) && (sizeof...(RangeTypes) > 0);\r\n\r\n        static_assert(ranges::view<ZipType>);\r\n        static_assert(ranges::input_range<ZipType>);\r\n        static_assert(ranges::forward_range<ZipType> == (ranges::forward_range<RangeTypes&> && ...));\r\n        static_assert(ranges::bidirectional_range<ZipType> == (ranges::bidirectional_range<RangeTypes&> && ...));\r\n        static_assert(ranges::random_access_range<ZipType> == (ranges::random_access_range<RangeTypes&> && ...));\r\n        static_assert(\r\n            ranges::common_range<ZipType> == (sizeof...(RangeTypes) == 1 && (ranges::common_range<RangeTypes&> && ...))\r\n            || (!(ranges::bidirectional_range<RangeTypes&> && ...) && (ranges::common_range<RangeTypes&> && ...))\r\n            || ((ranges::random_access_range<RangeTypes&> && ...) && (ranges::sized_range<RangeTypes&> && ...)));\r\n\r\n        // Validate conditional default-initializability\r\n        static_assert(is_default_constructible_v<ZipType> == (is_default_constructible_v<AllView<RangeTypes>> && ...));\r\n\r\n        // Validate conditional borrowed_range\r\n        static_assert(ranges::borrowed_range<ZipType> == (ranges::borrowed_range<AllView<RangeTypes>> && ...));\r\n\r\n        // Validate range adaptor object\r\n\r\n        // ... with lvalue arguments\r\n        static_assert(CanViewZip<RangeTypes&...> == (!are_views || (copy_constructible<AllView<RangeTypes>> && ...)));\r\n        if constexpr (CanViewZip<RangeTypes&...>) {\r\n            using ExpectedZipType      = ZipType;\r\n            constexpr bool is_noexcept = (is_nothrow_copy_constructible_v<AllView<RangeTypes>> && ...);\r\n\r\n            static_assert(same_as<decltype(views::zip(rngs...)), ExpectedZipType>);\r\n            static_assert(noexcept(views::zip(rngs...)) == is_noexcept);\r\n        }\r\n\r\n        // ... with const lvalue arguments\r\n        static_assert(CanViewZip<const remove_reference_t<RangeTypes>&...>\r\n                      == (!are_views || (copy_constructible<AllView<RangeTypes>> && ...)));\r\n        if constexpr (CanViewZip<const remove_reference_t<RangeTypes>&...>) {\r\n            using ExpectedZipType      = ranges::zip_view<AllView<const remove_reference_t<RangeTypes>&>...>;\r\n            constexpr bool is_noexcept = (is_nothrow_copy_constructible_v<AllView<RangeTypes>> && ...);\r\n\r\n            static_assert(same_as<decltype(views::zip(as_const(rngs)...)), ExpectedZipType>);\r\n            static_assert(noexcept(views::zip(as_const(rngs)...)) == is_noexcept);\r\n        }\r\n\r\n        // ... with rvalue argument\r\n        static_assert(CanViewZip<remove_reference_t<RangeTypes>...>\r\n                      == (are_views || (movable<remove_reference_t<RangeTypes>> && ...)));\r\n        if constexpr (CanViewZip<remove_reference_t<RangeTypes>...>) {\r\n            using ExpectedZipType      = ranges::zip_view<AllView<remove_reference_t<RangeTypes>>...>;\r\n            constexpr bool is_noexcept = (is_nothrow_move_constructible_v<AllView<RangeTypes>> && ...);\r\n\r\n            static_assert(same_as<decltype(views::zip(std::move(rngs)...)), ExpectedZipType>);\r\n            static_assert(noexcept(views::zip(std::move(rngs)...)) == is_noexcept);\r\n        }\r\n\r\n        // ... with const rvalue argument\r\n        static_assert(CanViewZip<const remove_reference_t<RangeTypes>...>\r\n                      == (are_views && (copy_constructible<AllView<RangeTypes>> && ...)));\r\n        if constexpr (CanViewZip<const remove_reference_t<RangeTypes>...>) {\r\n            using ExpectedZipType      = ranges::zip_view<AllView<const remove_reference_t<RangeTypes>>...>;\r\n            constexpr bool is_noexcept = (is_nothrow_copy_constructible_v<AllView<RangeTypes>> && ...);\r\n\r\n            static_assert(same_as<decltype(views::zip(std::move(as_const(rngs))...)), ExpectedZipType>);\r\n            static_assert(noexcept(views::zip(std::move(as_const(rngs))...)) == is_noexcept);\r\n        }\r\n\r\n        // Validate deduction guide\r\n        same_as<ZipType> auto zipped_range = ranges::zip_view{std::forward<RangeTypes>(rngs)...};\r\n        const auto tuple_element_arr       = test_container.get_element_tuple_arr();\r\n        const auto const_tuple_element_arr = as_const(test_container).get_element_tuple_arr();\r\n\r\n        // Validate zip_view::size()\r\n        static_assert(CanMemberSize<ZipType> == (ranges::sized_range<AllView<RangeTypes>> && ...));\r\n        if constexpr (CanMemberSize<ZipType>) {\r\n            using expected_size_type =\r\n                _Make_unsigned_like_t<common_type_t<decltype(ranges::size(declval<AllView<RangeTypes>>()))...>>;\r\n            same_as<expected_size_type> auto zip_size = zipped_range.size();\r\n\r\n            assert(zip_size == ranges::size(tuple_element_arr));\r\n            static_assert(noexcept(zipped_range.size())\r\n                          == (noexcept(static_cast<expected_size_type>(declval<AllView<RangeTypes>>().size())) && ...));\r\n        }\r\n\r\n        static_assert(CanMemberSize<const ZipType> == (ranges::sized_range<const AllView<RangeTypes>> && ...));\r\n        if constexpr (CanMemberSize<const ZipType>) {\r\n            using expected_size_type =\r\n                _Make_unsigned_like_t<common_type_t<decltype(ranges::size(declval<const AllView<RangeTypes>>()))...>>;\r\n            same_as<expected_size_type> auto zip_size = as_const(zipped_range).size();\r\n\r\n            assert(zip_size == ranges::size(tuple_element_arr));\r\n            static_assert(\r\n                noexcept(as_const(zipped_range).size())\r\n                == (noexcept(static_cast<expected_size_type>(declval<const AllView<RangeTypes>>().size())) && ...));\r\n        }\r\n\r\n        const bool is_empty = ranges::empty(tuple_element_arr);\r\n\r\n        // Validate view_interface::empty() and view_interface::operator bool()\r\n        //\r\n        // From here on out, we'll be reusing concepts which we already verified to reduce\r\n        // redundancy.\r\n        static_assert(CanMemberEmpty<ZipType> == (ranges::sized_range<ZipType> || ranges::forward_range<ZipType>) );\r\n        if constexpr (CanMemberEmpty<ZipType>) {\r\n            assert(zipped_range.empty() == is_empty);\r\n        }\r\n\r\n        static_assert(CanMemberEmpty<const ZipType>\r\n                      == (ranges::sized_range<const ZipType> || ranges::forward_range<const ZipType>) );\r\n        if constexpr (CanMemberEmpty<const ZipType>) {\r\n            assert(as_const(zipped_range).empty() == is_empty);\r\n        }\r\n\r\n        static_assert(CanBool<ZipType> == CanMemberEmpty<ZipType>);\r\n        if constexpr (CanBool<ZipType>) {\r\n            assert(static_cast<bool>(zipped_range) != is_empty);\r\n        }\r\n\r\n        static_assert(CanBool<const ZipType> == CanMemberEmpty<const ZipType>);\r\n        if constexpr (CanBool<const ZipType>) {\r\n            assert(static_cast<bool>(as_const(zipped_range)) != is_empty);\r\n        }\r\n\r\n        // Validate contents of zipped range\r\n        assert(ranges::equal(zipped_range, tuple_element_arr, [](const auto& lhs_tuple, const auto& rhs_tuple) {\r\n            return do_tuples_reference_same_objects(lhs_tuple, rhs_tuple);\r\n        }));\r\n\r\n        if (!(ranges::forward_range<AllView<RangeTypes>> && ...)) { // intentionally not if constexpr\r\n            return true;\r\n        }\r\n\r\n        // Validate view_interface::data()\r\n        //\r\n        // This should never exist because zip_view's iterator never models contiguous_iterator.\r\n        static_assert(!contiguous_iterator<ranges::iterator_t<ZipType>>);\r\n        static_assert(!CanMemberData<ZipType>);\r\n        static_assert(!contiguous_iterator<ranges::iterator_t<const ZipType>>);\r\n        static_assert(!CanMemberData<const ZipType>);\r\n\r\n        // Validate view_interface::operator[]\r\n        static_assert(CanIndex<ZipType> == ranges::random_access_range<ZipType>);\r\n        if constexpr (CanIndex<ZipType>) {\r\n            assert(do_tuples_reference_same_objects(zipped_range[0], tuple_element_arr[0]));\r\n        }\r\n\r\n        static_assert(CanIndex<const ZipType> == ranges::random_access_range<const ZipType>);\r\n        if constexpr (CanIndex<const ZipType>) {\r\n            assert(do_tuples_reference_same_objects(as_const(zipped_range)[0], tuple_element_arr[0]));\r\n        }\r\n\r\n        // Validate view_interface::front()\r\n        static_assert(CanMemberFront<ZipType> == ranges::forward_range<ZipType>);\r\n        if constexpr (CanMemberFront<ZipType>) {\r\n            assert(do_tuples_reference_same_objects(zipped_range.front(), tuple_element_arr[0]));\r\n        }\r\n\r\n        static_assert(CanMemberFront<const ZipType> == ranges::forward_range<const ZipType>);\r\n        if constexpr (CanMemberFront<const ZipType>) {\r\n            assert(do_tuples_reference_same_objects(as_const(zipped_range).front(), const_tuple_element_arr[0]));\r\n        }\r\n\r\n        // Validate view_interface::back()\r\n        static_assert(\r\n            CanMemberBack<ZipType> == (ranges::bidirectional_range<ZipType> && ranges::common_range<ZipType>) );\r\n        if constexpr (CanMemberBack<ZipType>) {\r\n            assert(do_tuples_reference_same_objects(\r\n                zipped_range.back(), tuple_element_arr[TestContainerType::smallest_array_size - 1]));\r\n        }\r\n\r\n        static_assert(CanMemberBack<const ZipType>\r\n                      == (ranges::bidirectional_range<const ZipType> && ranges::common_range<const ZipType>) );\r\n        if constexpr (CanMemberBack<const ZipType>) {\r\n            assert(do_tuples_reference_same_objects(\r\n                as_const(zipped_range).back(), const_tuple_element_arr[TestContainerType::smallest_array_size - 1]));\r\n        }\r\n\r\n        // Validate zip_view::begin()\r\n        static_assert(CanMemberBegin<ZipType>);\r\n        {\r\n            const same_as<ranges::iterator_t<ZipType>> auto itr = zipped_range.begin();\r\n            assert(do_tuples_reference_same_objects(*itr, tuple_element_arr[0]));\r\n        }\r\n\r\n        static_assert(CanMemberBegin<const ZipType> == (ranges::range<const AllView<RangeTypes>> && ...));\r\n        if constexpr (CanMemberBegin<const ZipType>) {\r\n            assert(do_tuples_reference_same_objects(*(as_const(zipped_range).begin()), const_tuple_element_arr[0]));\r\n        }\r\n\r\n        // Validate zip_view::end()\r\n        static_assert(CanMemberEnd<ZipType>);\r\n        if constexpr (equality_comparable<ranges::iterator_t<ZipType>>) {\r\n            auto end = zipped_range.begin();\r\n            ranges::advance(end, TestContainerType::smallest_array_size);\r\n\r\n            assert(end == zipped_range.end());\r\n        }\r\n\r\n        static_assert(CanMemberEnd<const ZipType> == (ranges::range<const AllView<RangeTypes>> && ...));\r\n        if constexpr (CanMemberEnd<const ZipType> && equality_comparable<ranges::iterator_t<const ZipType>>) {\r\n            auto end = as_const(zipped_range).begin();\r\n            ranges::advance(end, TestContainerType::smallest_array_size);\r\n\r\n            assert(end == as_const(zipped_range).end());\r\n        }\r\n\r\n        // Validate view_interface::cbegin()\r\n        static_assert(CanMemberCBegin<ZipType>);\r\n        {\r\n            const same_as<ranges::const_iterator_t<ZipType>> auto itr = zipped_range.cbegin();\r\n            assert(do_tuples_reference_same_objects(*itr, tuple_element_arr[0]));\r\n        }\r\n\r\n        static_assert(CanMemberCBegin<const ZipType> == (ranges::range<const AllView<RangeTypes>> && ...));\r\n        if constexpr (CanMemberCBegin<const ZipType>) {\r\n            assert(do_tuples_reference_same_objects(*(as_const(zipped_range).cbegin()), const_tuple_element_arr[0]));\r\n        }\r\n\r\n        // Validate view_interface::cend()\r\n        static_assert(CanMemberCEnd<ZipType>);\r\n        if constexpr (equality_comparable<ranges::const_iterator_t<ZipType>>) {\r\n            auto end = zipped_range.cbegin();\r\n            ranges::advance(end, TestContainerType::smallest_array_size);\r\n\r\n            assert(end == zipped_range.cend());\r\n        }\r\n\r\n        static_assert(CanMemberCEnd<const ZipType> == (ranges::range<const AllView<RangeTypes>> && ...));\r\n        if constexpr (CanMemberCEnd<const ZipType> && equality_comparable<ranges::const_iterator_t<const ZipType>>) {\r\n            auto end = as_const(zipped_range).cbegin();\r\n            ranges::advance(end, TestContainerType::smallest_array_size);\r\n\r\n            assert(end == as_const(zipped_range).cend());\r\n        }\r\n\r\n        const auto validate_iterators_lambda = []<class LocalZipType, class ArrayType, class... LocalRangeTypes>(\r\n                                                   LocalZipType& relevant_range,\r\n                                                   const ArrayType& relevant_tuple_element_arr) {\r\n            constexpr bool is_const = same_as<LocalZipType, add_const_t<LocalZipType>>;\r\n\r\n            static_assert(is_default_constructible_v<ranges::iterator_t<LocalZipType>>\r\n                          == (is_default_constructible_v<ranges::iterator_t<LocalRangeTypes>> && ...));\r\n\r\n            same_as<ranges::iterator_t<LocalZipType>> auto itr = relevant_range.begin();\r\n\r\n            // Validate iterator operator overloads\r\n            if constexpr (ranges::forward_range<LocalZipType>) {\r\n                assert(do_tuples_reference_same_objects(*itr++, relevant_tuple_element_arr[0]));\r\n            } else {\r\n                // If LocalZipType does not model forward_range, we can still use the postfix operator\r\n                // which returns void.\r\n                itr++;\r\n            }\r\n\r\n            assert(do_tuples_reference_same_objects(*++itr, relevant_tuple_element_arr[2]));\r\n\r\n            if constexpr (ranges::bidirectional_range<LocalZipType>) {\r\n                assert(do_tuples_reference_same_objects(*itr--, relevant_tuple_element_arr[2]));\r\n                assert(do_tuples_reference_same_objects(*--itr, relevant_tuple_element_arr[0]));\r\n            }\r\n\r\n            if constexpr (ranges::random_access_range<LocalZipType>) {\r\n                itr += 2;\r\n                assert(do_tuples_reference_same_objects(*itr, relevant_tuple_element_arr[2]));\r\n\r\n                itr -= 2;\r\n                assert(do_tuples_reference_same_objects(*itr, relevant_tuple_element_arr[0]));\r\n\r\n                assert(do_tuples_reference_same_objects(itr[2], relevant_tuple_element_arr[2]));\r\n\r\n                const same_as<ranges::iterator_t<LocalZipType>> auto itr2 = (itr + 2);\r\n                assert(do_tuples_reference_same_objects(*itr2, relevant_tuple_element_arr[2]));\r\n\r\n                const same_as<ranges::iterator_t<LocalZipType>> auto itr3 = (2 + itr);\r\n                assert(do_tuples_reference_same_objects(*itr3, relevant_tuple_element_arr[2]));\r\n\r\n                const same_as<ranges::iterator_t<LocalZipType>> auto itr4 = itr3 - 2;\r\n                assert(do_tuples_reference_same_objects(*itr4, relevant_tuple_element_arr[0]));\r\n\r\n                using iterator_difference_type = common_type_t<ranges::range_difference_t<LocalRangeTypes>...>;\r\n\r\n                const same_as<iterator_difference_type> auto diff1 = (itr2 - itr);\r\n                assert(diff1 == static_cast<iterator_difference_type>(2));\r\n\r\n                const same_as<iterator_difference_type> auto diff2 = (itr - itr2);\r\n                assert(diff2 == static_cast<iterator_difference_type>(-2));\r\n\r\n                if constexpr ((equality_comparable<ranges::iterator_t<LocalRangeTypes>> && ...)) {\r\n                    assert(itr == itr4);\r\n                    assert(itr != itr2);\r\n                }\r\n\r\n                // Per LWG-3692: The only constraint placed on operator<=> for zip_view's iterator is that\r\n                // (ranges::random_access_range<LocalZipType>) is satisfied. We need no additional checks.\r\n                using three_way_ordering_category = decltype(itr <=> itr2);\r\n\r\n                assert(itr <=> itr4 == three_way_ordering_category::equivalent);\r\n                assert(itr <=> itr2 == three_way_ordering_category::less);\r\n                assert(itr2 <=> itr == three_way_ordering_category::greater);\r\n            }\r\n\r\n            // Validate [ADL::]iter_move()\r\n            if constexpr (is_const) {\r\n                static_assert(is_same_v<decltype(ranges::iter_move(itr)),\r\n                    tuple<decltype(ranges::iter_move(declval<ranges::iterator_t<const AllView<RangeTypes>>>()))...>>);\r\n            } else {\r\n                static_assert(is_same_v<decltype(ranges::iter_move(itr)),\r\n                    tuple<decltype(ranges::iter_move(declval<ranges::iterator_t<AllView<RangeTypes>>>()))...>>);\r\n            }\r\n\r\n            static_assert(\r\n                noexcept(ranges::iter_move(itr))\r\n                    == (noexcept(ranges::iter_move(declval<const ranges::iterator_t<LocalRangeTypes>&>())) && ...)\r\n                && (is_nothrow_move_constructible_v<ranges::range_rvalue_reference_t<LocalRangeTypes>> && ...));\r\n\r\n            assert(do_tuples_reference_same_objects(*itr, ranges::iter_move(itr)));\r\n\r\n            // Validate [ADL::]iter_swap()\r\n            if constexpr ((indirectly_swappable<ranges::iterator_t<LocalRangeTypes>> && ...)) {\r\n                const typename TestContainerType::element_tuple_type old_itr_value = *itr;\r\n\r\n                // itr is currently at relevant_range.begin() right now, so we assign itr2 to that\r\n                // instead of itr. This avoids copy construction, which is problematic for move-only\r\n                // ranges.\r\n                same_as<ranges::iterator_t<LocalZipType>> auto itr2 = relevant_range.begin();\r\n                itr2++;\r\n\r\n                const typename TestContainerType::element_tuple_type old_itr2_value = *itr2;\r\n\r\n                ranges::iter_swap(itr, itr2);\r\n\r\n                assert(*itr == old_itr2_value);\r\n                assert(*itr2 == old_itr_value);\r\n\r\n                // We can't test iter_swap()'s noexcept specifier without access to the member variables\r\n                // of the iterator.\r\n            }\r\n\r\n            // Validate sentinels\r\n            if constexpr (!ranges::common_range<LocalZipType>) {\r\n                static_assert(is_default_constructible_v<ranges::sentinel_t<LocalZipType>>\r\n                              == (is_default_constructible_v<ranges::sentinel_t<LocalRangeTypes>> && ...));\r\n\r\n                const same_as<ranges::iterator_t<LocalZipType>> auto itr2 = relevant_range.begin();\r\n                const same_as<ranges::sentinel_t<LocalZipType>> auto sen  = relevant_range.end();\r\n\r\n                if constexpr ((sentinel_for<ranges::sentinel_t<LocalRangeTypes>, ranges::iterator_t<LocalRangeTypes>>\r\n                                  && ...)) {\r\n                    auto advanced_itr = relevant_range.begin();\r\n                    ranges::advance(advanced_itr, TestContainerType::smallest_array_size);\r\n\r\n                    assert(advanced_itr == sen);\r\n                    assert(itr2 != sen);\r\n                }\r\n\r\n                if constexpr ((sized_sentinel_for<ranges::sentinel_t<LocalRangeTypes>,\r\n                                   ranges::iterator_t<LocalRangeTypes>>\r\n                                  && ...)) {\r\n                    using difference_type = common_type_t<ranges::range_difference_t<LocalRangeTypes>...>;\r\n\r\n                    const same_as<difference_type> auto diff1 = (itr2 - sen);\r\n                    const same_as<difference_type> auto diff2 = (sen - itr2);\r\n\r\n                    assert(diff1 == -(static_cast<difference_type>(TestContainerType::smallest_array_size)));\r\n                    assert(diff2 == static_cast<difference_type>(TestContainerType::smallest_array_size));\r\n                }\r\n            }\r\n        };\r\n\r\n        // Validate iterators and sentinels\r\n        if constexpr (CanMemberBegin<ZipType> && CanMemberEnd<ZipType>) {\r\n            validate_iterators_lambda\r\n                .template operator()<ZipType, decltype(tuple_element_arr), AllView<RangeTypes&>...>(\r\n                    zipped_range, tuple_element_arr);\r\n        }\r\n\r\n        if constexpr (CanMemberBegin<const ZipType> && CanMemberEnd<const ZipType>) {\r\n            validate_iterators_lambda\r\n                .template operator()<const ZipType, decltype(const_tuple_element_arr), const AllView<RangeTypes&>...>(\r\n                    as_const(zipped_range), const_tuple_element_arr);\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n#pragma warning(pop)\r\n\r\n// zip_view<RangeTypes...> is sensitive to the following:\r\n//\r\n//   - The categories of RangeTypes...\r\n//   - The commonality of RangeTypes...\r\n//   - Whether or not the size() member exists for each of RangeTypes..., as it is used by ranges::size()\r\n//   - Whether or not each range's iterator and sentinel models sized_sentinel_for\r\n//   - The sizeof...(RangeTypes)\r\n//\r\n// Other conditions are irrelevant.\r\n\r\n// TRANSITION, VSO-1655299: use a helper function as a workaround\r\ntemplate <class Category, test::Common IsCommon>\r\n[[nodiscard]] constexpr test::CanCompare test_range_can_compare() {\r\n    return test::CanCompare{to_bool(IsCommon) || derived_from<Category, forward_iterator_tag>};\r\n}\r\n\r\ntemplate <class Category, class Element, test::Sized IsSized, test::Common IsCommon, test::CanDifference Diff>\r\nusing test_range =\r\n    test::range<Category, Element, IsSized, Diff, IsCommon, test_range_can_compare<Category, IsCommon>()>;\r\n\r\nconstexpr array default_int_array{0, 1, 2, 3, 4, 5, 6};\r\n\r\nconstexpr single_element_test_container<int, 7> single_element_container_instance{default_int_array};\r\nconstexpr three_element_test_container<int, 7, float, 9, char, 5> three_element_container_instance{\r\n    default_int_array, array{0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f}, array{'a', 'b', 'c', 'd', 'e'}};\r\n\r\n// The typical instantiator struct isn't templated like this, so that it could then be used with the\r\n// existing testing machinery defined in range_algorithm_support.hpp. We can't use that stuff here,\r\n// however, because views::zip takes multiple template parameters.\r\n//\r\n// The idea here might be useful for other view types which take multiple range parameters. Feel\r\n// free to move something similar into range_algorithm_support.hpp if you feel that this could be\r\n// used in another test suite.\r\n\r\ntemplate <bool IsMoveOnly>\r\nclass range_type_solver {\r\nprotected:\r\n    template <class Category, class Element, test::Sized IsSized, test::Common IsCommon, test::CanDifference Diff>\r\n    using range_type = test::range<Category, Element, IsSized, Diff, IsCommon,\r\n        test_range_can_compare<Category, IsCommon>(), test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>},\r\n        test::CanView::yes, test::Copyability::move_only>;\r\n};\r\n\r\ntemplate <>\r\nclass range_type_solver<false> {\r\nprotected:\r\n    template <class Category, class Element, test::Sized IsSized, test::Common IsCommon, test::CanDifference Diff>\r\n    using range_type = test_range<Category, Element, IsSized, IsCommon, Diff>;\r\n};\r\n\r\ntemplate <bool IsMoveOnly, class Category, test::Sized IsSized, test::Common IsCommon, test::CanDifference Diff>\r\nclass instantiator_impl : private range_type_solver<IsMoveOnly> {\r\nprivate:\r\n    template <class OtherCategory, class Element, test::Sized OtherIsSized, test::Common OtherIsCommon,\r\n        test::CanDifference OtherDiff>\r\n    using range_type = range_type_solver<IsMoveOnly>::template range_type<OtherCategory, Element, OtherIsSized,\r\n        OtherIsCommon, OtherDiff>;\r\n\r\n    template <class... Types>\r\n    struct first_type_solver {};\r\n\r\n    template <class FirstType, class... OtherTypes>\r\n    struct first_type_solver<FirstType, OtherTypes...> {\r\n        using first_type = FirstType;\r\n    };\r\n\r\n    using standard_range_tuple_type = tuple<range_type<Category, int, IsSized, IsCommon, Diff>,\r\n        range_type<Category, float, IsSized, IsCommon, Diff>, range_type<Category, char, IsSized, IsCommon, Diff>>;\r\n\r\n    template <class OtherCategory>\r\n    struct differing_category_solver {\r\n        using category_type = input_iterator_tag;\r\n    };\r\n\r\n    template <>\r\n    struct differing_category_solver<input_iterator_tag> {\r\n        using category_type = forward_iterator_tag;\r\n    };\r\n\r\n    using differing_category_range_type =\r\n        range_type<typename differing_category_solver<Category>::category_type, int, IsSized, IsCommon, Diff>;\r\n    using differing_size_member_range_type =\r\n        range_type<Category, int, (IsSized == test::Sized::yes ? test::Sized::no : test::Sized::yes), IsCommon, Diff>;\r\n    using differing_is_common_range_type              = range_type<Category, int, IsSized,\r\n                     (IsCommon == test::Common::yes ? test::Common::no : test::Common::yes), Diff>;\r\n    using differing_iterator_sentinel_diff_range_type = range_type<Category, int, IsSized, IsCommon,\r\n        (Diff == test::CanDifference::yes ? test::CanDifference::no : test::CanDifference::yes)>;\r\n\r\n    template <class ContainerType>\r\n    static constexpr void test_single_range(ContainerType&& single_element_container) {\r\n        // Create a copy of the container. That way, we can always test iter_swap,\r\n        // even if container has const elements.\r\n        auto writable = single_element_container;\r\n        tuple_element_t<0, standard_range_tuple_type> single_range{writable.get_element_span()};\r\n\r\n        test_one(writable, single_range);\r\n    }\r\n\r\n    template <class DifferingRangeType, class ContainerType>\r\n    static constexpr void test_three_ranges(ContainerType&& three_element_container) {\r\n        // Create a copy of the container. That way, we can always test iter_swap,\r\n        // even if container has const elements.\r\n        auto writable = three_element_container;\r\n        DifferingRangeType first_range{writable.template get_element_span<0>()};\r\n        tuple_element_t<1, standard_range_tuple_type> second_range{writable.template get_element_span<1>()};\r\n        tuple_element_t<2, standard_range_tuple_type> third_range{writable.template get_element_span<2>()};\r\n\r\n        test_one(writable, first_range, second_range, third_range);\r\n    }\r\n\r\npublic:\r\n    static constexpr void call() {\r\n        // Test the single-range use of views::zip (i.e., sizeof...(RangeTypes) == 1).\r\n        test_single_range(single_element_container_instance);\r\n\r\n        // Test three ranges with views::zip with...\r\n\r\n        // all of their traits being the same, ...\r\n        test_three_ranges<tuple_element_t<0, standard_range_tuple_type>>(three_element_container_instance);\r\n\r\n        // one range having a different category, ...\r\n        test_three_ranges<differing_category_range_type>(three_element_container_instance);\r\n\r\n        // one range having a different path for ranges::size(), ...\r\n        test_three_ranges<differing_size_member_range_type>(three_element_container_instance);\r\n\r\n        // one range having a different commonality, ...\r\n        test_three_ranges<differing_is_common_range_type>(three_element_container_instance);\r\n\r\n        // and one range having iterators and sentinels which model sized_sentinel_for\r\n        // differently.\r\n        test_three_ranges<differing_iterator_sentinel_diff_range_type>(three_element_container_instance);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Sized IsSized, test::Common IsCommon, test::CanDifference Diff>\r\nclass instantiator : public instantiator_impl<false, Category, IsSized, IsCommon, Diff> {};\r\n\r\ntemplate <class Category, test::Sized IsSized, test::Common IsCommon, test::CanDifference Diff>\r\nclass move_only_view_instantiator : public instantiator_impl<true, Category, IsSized, IsCommon, Diff> {};\r\n\r\ntemplate <class Category, template <class, test::Sized, test::Common, test::CanDifference> class InstantiatorType>\r\nconstexpr bool instantiation_test_for_category() {\r\n    // Unlike previous tested range/view types, views::zip takes an unbounded parameter pack of ranges, so\r\n    // we cannot test every possible combination of sensitive inputs. However, every evaluated condition\r\n    // other than sizeof... is evaluated as (Condition && ...); so, if one condition fails, then the entire\r\n    // constraint should fail to be met.\r\n\r\n    using test::Sized, test::Common, test::CanDifference;\r\n\r\n#ifndef _PREFAST_ // TRANSITION, GH-1030\r\n    InstantiatorType<Category, Sized::no, Common::no, CanDifference::no>::call();\r\n    InstantiatorType<Category, Sized::no, Common::no, CanDifference::yes>::call();\r\n    InstantiatorType<Category, Sized::no, Common::yes, CanDifference::no>::call();\r\n    InstantiatorType<Category, Sized::no, Common::yes, CanDifference::yes>::call();\r\n    InstantiatorType<Category, Sized::yes, Common::no, CanDifference::no>::call();\r\n    InstantiatorType<Category, Sized::yes, Common::no, CanDifference::yes>::call();\r\n    InstantiatorType<Category, Sized::yes, Common::yes, CanDifference::no>::call();\r\n#endif // TRANSITION, GH-1030\r\n    InstantiatorType<Category, Sized::yes, Common::yes, CanDifference::yes>::call();\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <template <class, test::Sized, test::Common, test::CanDifference> class InstantiatorType>\r\nconstexpr bool instantiation_test() {\r\n    // The MSVC tends to run out of compiler heap space due to the sheer number of instantiations\r\n    // if we try to test everything at once. So, we split it up into segments based on category.\r\n\r\n#if defined(TEST_INPUT)\r\n    return instantiation_test_for_category<input_iterator_tag, InstantiatorType>();\r\n#elif defined(TEST_FORWARD) // ^^^ TEST_INPUT / TEST_FORWARD vvv\r\n    return instantiation_test_for_category<forward_iterator_tag, InstantiatorType>();\r\n#elif defined(TEST_BIDIRECTIONAL) // ^^^ TEST_FORWARD / TEST_BIDIRECTIONAL vvv\r\n    return instantiation_test_for_category<bidirectional_iterator_tag, InstantiatorType>();\r\n#elif defined(TEST_RANDOM) // ^^^ TEST_BIDIRECTIONAL / TEST_RANDOM vvv\r\n    return instantiation_test_for_category<random_access_iterator_tag, InstantiatorType>();\r\n#else // ^^^ TEST_RANDOM / UNKNOWN vvv\r\n    static_assert(false, \"ERROR: A defined test macro was never specified when executing test P2321R2_views_zip!\");\r\n    return false;\r\n#endif // ^^^ UNKNOWN ^^^\r\n}\r\n\r\nint main() {\r\n    // Validate views\r\n    { // ... copyable, single view\r\n        constexpr span<const int> int_span = single_element_container_instance.get_element_span();\r\n\r\n        static_assert(test_one(single_element_container_instance, int_span));\r\n        test_one(single_element_container_instance, int_span);\r\n    }\r\n\r\n    { // ... copyable, multiple views\r\n        constexpr span<const int> int_span     = three_element_container_instance.get_element_span<0>();\r\n        constexpr span<const float> float_span = three_element_container_instance.get_element_span<1>();\r\n        constexpr span<const char> char_span   = three_element_container_instance.get_element_span<2>();\r\n\r\n        static_assert(test_one(three_element_container_instance, int_span, float_span, char_span));\r\n        test_one(three_element_container_instance, int_span, float_span, char_span);\r\n    }\r\n\r\n    { // ... move-only, single and multiple views\r\n        static_assert(instantiation_test<move_only_view_instantiator>());\r\n        instantiation_test<move_only_view_instantiator>();\r\n    }\r\n\r\n    // Validate non-views\r\n    {\r\n        static_assert(test_one(\r\n            single_element_container_instance, single_element_container_instance.get_underlying_element_array()));\r\n        test_one(single_element_container_instance, single_element_container_instance.get_underlying_element_array());\r\n    }\r\n    {\r\n        static_assert(test_one(three_element_container_instance,\r\n            three_element_container_instance.get_underlying_element_array<0>(),\r\n            three_element_container_instance.get_underlying_element_array<1>(),\r\n            three_element_container_instance.get_underlying_element_array<2>()));\r\n        test_one(three_element_container_instance, three_element_container_instance.get_underlying_element_array<0>(),\r\n            three_element_container_instance.get_underlying_element_array<1>(),\r\n            three_element_container_instance.get_underlying_element_array<2>());\r\n    }\r\n\r\n    // Empty RangeTypes... parameter pack\r\n    static_assert(is_same_v<decltype(views::zip()), decay_t<decltype(views::empty<tuple<>>)>>);\r\n\r\n    static_assert(instantiation_test<instantiator>());\r\n    instantiation_test<instantiator>();\r\n}\r\n\r\nvoid test_noexcept_strengthening() { // COMPILE-ONLY\r\n    // This quickly verifies that various operations have been noexcept-strengthened.\r\n    // This isn't attempting to be exhaustive - it skips operations that haven't been strengthened, or that are\r\n    // difficult to test. Also, this isn't attempting to test corner cases for conditional noexcept.\r\n\r\n    int arr1[]{10, 20, 30};\r\n    int arr2[]{11, 22, 33};\r\n\r\n    {\r\n        static_assert(noexcept(ranges::zip_view{arr1, arr2}));\r\n        static_assert(noexcept(views::zip(arr1, arr2)));\r\n\r\n        ranges::zip_view zipped{arr1, arr2};\r\n\r\n        static_assert(noexcept(zipped.begin()));\r\n        static_assert(noexcept(zipped.end()));\r\n        static_assert(noexcept(zipped.size()));\r\n\r\n        auto it = zipped.begin();\r\n\r\n        static_assert(noexcept(*it));\r\n        static_assert(noexcept(++it));\r\n        static_assert(noexcept(it++));\r\n        static_assert(noexcept(--it));\r\n        static_assert(noexcept(it--));\r\n        static_assert(noexcept(it += 0));\r\n        static_assert(noexcept(it -= 0));\r\n        static_assert(noexcept(it[0]));\r\n        static_assert(noexcept(it == it));\r\n        static_assert(noexcept(it + 0));\r\n        static_assert(noexcept(0 + it));\r\n        static_assert(noexcept(it - 0));\r\n        static_assert(noexcept(it - it));\r\n        static_assert(noexcept(iter_move(it)));\r\n        static_assert(noexcept(iter_swap(it, it)));\r\n    }\r\n\r\n    {\r\n        ranges::zip_view zipped2{arr1, ranges::subrange{arr2, unreachable_sentinel}};\r\n\r\n        auto iter = zipped2.begin();\r\n        auto sent = zipped2.end();\r\n\r\n        // The unreachable_sentinel causes sent to be a zip_view::_Sentinel.\r\n        static_assert(!is_same_v<decltype(iter), decltype(sent)>);\r\n\r\n        static_assert(noexcept(iter == sent));\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2321R2_views_zip_transform/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# NOTE: zip_view::_Iterator (used internally by zip_transform_view) defines an ADL\r\n# overload for iter_move which causes an ambiguous symbol error when compiling\r\n# without /permissive- set. This occurs even though zip_transform_view::_Iterator\r\n# does not define an ADL overload for iter_move.\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/DTEST_INPUT\"\r\n*\tPM_CL=\"/DTEST_FORWARD\"\r\n*\tPM_CL=\"/DTEST_BIDIRECTIONAL\"\r\n*\tPM_CL=\"/DTEST_RANDOM\"\r\n"
  },
  {
    "path": "tests/std/tests/P2321R2_views_zip_transform/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <compare>\r\n#include <concepts>\r\n#include <functional>\r\n#include <ranges>\r\n#include <span>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class RangeType>\r\nusing AllView = views::all_t<RangeType>;\r\n\r\ntemplate <bool IsConst, class T>\r\nusing maybe_const = conditional_t<IsConst, const T, T>;\r\n\r\ntemplate <bool IsConst, class TransformType, ranges::input_range... RangeTypes>\r\nusing TransformResultType = invoke_result_t<maybe_const<IsConst, TransformType>&,\r\n    ranges::range_reference_t<maybe_const<IsConst, RangeTypes>>...>;\r\n\r\ntemplate <bool IsConst, class T>\r\nconstexpr auto& maybe_as_const(T& value) {\r\n    if constexpr (IsConst) {\r\n        return as_const(value);\r\n    } else {\r\n        return value;\r\n    }\r\n}\r\n\r\ntemplate <class Function, class... RangeTypes>\r\nconcept CanZipTransform =\r\n    (ranges::viewable_range<RangeTypes> && ...) && requires(Function&& func, RangeTypes&&... test_ranges) {\r\n        views::zip_transform(std::forward<Function>(func), std::forward<RangeTypes>(test_ranges)...);\r\n    };\r\n\r\ntemplate <class RangeType>\r\nconcept HasIteratorCategory = requires { typename ranges::iterator_t<RangeType>::iterator_category; };\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4365) // conversion from 'std::array<int,8>::size_type' to 'int', signed/unsigned mismatch\r\ntemplate <class TransformType, ranges::random_access_range TransformedElementsContainer, class LocalZipTransformType,\r\n    ranges::input_range... RangeTypes>\r\nconstexpr bool validate_iterators_sentinels(\r\n    LocalZipTransformType& relevant_range, const TransformedElementsContainer& transformed_elements) {\r\n#pragma warning(pop)\r\n    constexpr bool is_const = same_as<LocalZipTransformType, add_const_t<LocalZipTransformType>>;\r\n\r\n    using InnerView            = ranges::zip_view<AllView<RangeTypes>...>;\r\n    using BaseType             = maybe_const<is_const, InnerView>;\r\n    using ZipIteratorTupleType = tuple<ranges::iterator_t<maybe_const<is_const, AllView<RangeTypes>>>...>;\r\n\r\n    // Validate iterator type aliases\r\n    {\r\n        // Validate iterator_category\r\n        if constexpr (ranges::forward_range<BaseType>) {\r\n            static_assert(HasIteratorCategory<LocalZipTransformType>);\r\n\r\n            using Cat                = ranges::iterator_t<LocalZipTransformType>::iterator_category;\r\n            using transform_result_t = TransformResultType<is_const, TransformType, RangeTypes...>;\r\n\r\n            if constexpr (!is_reference_v<transform_result_t>) {\r\n                static_assert(same_as<Cat, input_iterator_tag>);\r\n            } else {\r\n                constexpr auto check_iterator_tags_closure = []<class TagType>() {\r\n                    return (derived_from<typename iterator_traits<\r\n                                             ranges::iterator_t<maybe_const<is_const, RangeTypes>>>::iterator_category,\r\n                                TagType>\r\n                            && ...);\r\n                };\r\n\r\n                if constexpr (check_iterator_tags_closure.template operator()<random_access_iterator_tag>()) {\r\n                    static_assert(same_as<Cat, random_access_iterator_tag>);\r\n                } else if constexpr (check_iterator_tags_closure.template operator()<bidirectional_iterator_tag>()) {\r\n                    static_assert(same_as<Cat, bidirectional_iterator_tag>);\r\n                } else if constexpr (check_iterator_tags_closure.template operator()<forward_iterator_tag>()) {\r\n                    static_assert(same_as<Cat, forward_iterator_tag>);\r\n                } else {\r\n                    static_assert(same_as<Cat, input_iterator_tag>);\r\n                }\r\n            }\r\n        } else {\r\n            static_assert(!HasIteratorCategory<LocalZipTransformType>);\r\n        }\r\n\r\n        // Validate iterator_concept\r\n        static_assert(same_as<typename ranges::iterator_t<LocalZipTransformType>::iterator_concept,\r\n            typename ranges::iterator_t<BaseType>::iterator_concept>);\r\n\r\n        // Validate value_type\r\n        static_assert(same_as<typename ranges::iterator_t<LocalZipTransformType>::value_type,\r\n            remove_cvref_t<TransformResultType<is_const, TransformType, RangeTypes...>>>);\r\n\r\n        // Validate difference_type\r\n        static_assert(same_as<typename ranges::iterator_t<LocalZipTransformType>::difference_type,\r\n            ranges::range_difference_t<BaseType>>);\r\n    }\r\n\r\n    // Validate iterator constructors\r\n    static_assert(is_default_constructible_v<ranges::iterator_t<LocalZipTransformType>>\r\n                  == is_default_constructible_v<ranges::iterator_t<BaseType>>);\r\n    static_assert(is_nothrow_default_constructible_v<ranges::iterator_t<LocalZipTransformType>>\r\n                  == is_nothrow_default_constructible_v<ranges::iterator_t<BaseType>>);\r\n\r\n    if constexpr (is_const && convertible_to<ranges::iterator_t<InnerView>, ranges::iterator_t<const InnerView>>) {\r\n        static_assert(noexcept(ranges::iterator_t<LocalZipTransformType>{\r\n                          declval<ranges::iterator_t<remove_const_t<LocalZipTransformType>>>()})\r\n                      == is_nothrow_convertible_v<ranges::iterator_t<InnerView>, ranges::iterator_t<const InnerView>>);\r\n    }\r\n\r\n    same_as<ranges::iterator_t<LocalZipTransformType>> auto itr = relevant_range.begin();\r\n\r\n    // Validate iterator operator overloads\r\n    {\r\n        const auto first_result = *itr;\r\n        assert(first_result == *ranges::begin(transformed_elements));\r\n\r\n        // NOTE: The actual noexcept specification for zip_transform_view::iterator::operator*() is as follows:\r\n        //\r\n        // Let Is be the pack 0, 1, ..., (sizeof...(Views)-1). The exception specification is equivalent to:\r\n        // noexcept(invoke(*parent_->fun_, *std::get<Is>(inner_.current_)...)).\r\n        //\r\n        // Notably, parent_t is a pointer and inner_.current_ is a tuple, and operator->() on a pointer and\r\n        // std::get(std::tuple<...>) are both noexcept. We thus simplify the noexcept check as follows:\r\n        static_assert(noexcept(*itr)\r\n                      == noexcept(invoke(*declval<const ranges::_Movable_box<TransformType>&>(),\r\n                          *declval<const ranges::iterator_t<maybe_const<is_const, AllView<RangeTypes>>>&>()...)));\r\n    }\r\n\r\n    static_assert(noexcept(++itr) == noexcept(++declval<ranges::iterator_t<BaseType>&>()));\r\n\r\n    if constexpr (ranges::forward_range<BaseType>) {\r\n        same_as<ranges::iterator_t<LocalZipTransformType>> auto duplicate_itr = itr++;\r\n        assert(*duplicate_itr == *ranges::begin(transformed_elements));\r\n        static_assert(noexcept(itr++) == is_nothrow_copy_constructible_v<ranges::iterator_t<LocalZipTransformType>>\r\n                      && noexcept(++itr));\r\n    } else {\r\n        itr++;\r\n        static_assert(noexcept(itr++) == noexcept(++itr));\r\n    }\r\n\r\n    assert(*++itr == transformed_elements[2]);\r\n\r\n    if constexpr (ranges::bidirectional_range<BaseType>) {\r\n        assert(*itr-- == transformed_elements[2]);\r\n        static_assert(noexcept(itr--) == is_nothrow_copy_constructible_v<ranges::iterator_t<LocalZipTransformType>>\r\n                      && noexcept(--itr));\r\n\r\n        assert(*--itr == transformed_elements[0]);\r\n        static_assert(noexcept(--itr) == noexcept(--declval<ranges::iterator_t<BaseType>&>()));\r\n    }\r\n\r\n    if constexpr (ranges::random_access_range<BaseType>) {\r\n        itr += 2;\r\n        assert(*itr == transformed_elements[2]);\r\n        static_assert(noexcept(itr += 2) == noexcept(declval<ranges::iterator_t<BaseType>&>() += 2));\r\n\r\n        itr -= 2;\r\n        assert(*itr == transformed_elements[0]);\r\n        static_assert(noexcept(itr -= 2) == noexcept(declval<ranges::iterator_t<BaseType>&>() -= 2));\r\n\r\n        assert(itr[2] == transformed_elements[2]);\r\n        {\r\n            constexpr bool is_random_access_noexcept =\r\n                noexcept(apply([]<class... IteratorTypes>(const IteratorTypes&... itrs) noexcept(\r\n                                   noexcept(invoke(*declval<const ranges::_Movable_box<TransformType>&>(),\r\n                                       itrs[static_cast<iter_difference_t<IteratorTypes>>(2)]...))) { return true; },\r\n                    declval<const ZipIteratorTupleType&>()));\r\n            static_assert(noexcept(itr[2]) == is_random_access_noexcept);\r\n        }\r\n\r\n        const same_as<ranges::iterator_t<LocalZipTransformType>> auto itr2 = itr + 2;\r\n        assert(*itr2 == transformed_elements[2]);\r\n        static_assert(noexcept(itr + 2) == noexcept(declval<const ranges::iterator_t<BaseType>&>() + 2)\r\n                      && is_nothrow_move_constructible_v<ranges::iterator_t<BaseType>>);\r\n\r\n        const same_as<ranges::iterator_t<LocalZipTransformType>> auto itr3 = 2 + itr;\r\n        assert(*itr3 == transformed_elements[2]);\r\n        static_assert(noexcept(2 + itr) == noexcept(declval<const ranges::iterator_t<BaseType>&>() + 2)\r\n                      && is_nothrow_move_constructible_v<ranges::iterator_t<BaseType>>);\r\n\r\n        const same_as<ranges::iterator_t<LocalZipTransformType>> auto itr4 = itr3 - 2;\r\n        assert(*itr4 == transformed_elements[0]);\r\n        static_assert(noexcept(itr3 - 2) == noexcept(declval<const ranges::iterator_t<BaseType>&>() - 2)\r\n                      && is_nothrow_move_constructible_v<ranges::iterator_t<BaseType>>);\r\n\r\n        using three_way_ordering_category = decltype(itr <=> itr2);\r\n\r\n        assert(itr <=> itr4 == three_way_ordering_category::equivalent);\r\n        assert(itr <=> itr2 == three_way_ordering_category::less);\r\n        assert(itr2 <=> itr == three_way_ordering_category::greater);\r\n\r\n        static_assert(noexcept(itr <=> itr2)\r\n                      == noexcept(declval<const ranges::iterator_t<BaseType>&>()\r\n                                  <=> declval<const ranges::iterator_t<BaseType>&>()));\r\n    }\r\n\r\n    if constexpr (equality_comparable<ranges::iterator_t<BaseType>>) {\r\n        same_as<ranges::iterator_t<LocalZipTransformType>> auto advanced_itr1 = relevant_range.begin();\r\n        ranges::advance(advanced_itr1, 2);\r\n\r\n        same_as<ranges::iterator_t<LocalZipTransformType>> auto advanced_itr2 = relevant_range.begin();\r\n        ranges::advance(advanced_itr2, 2);\r\n\r\n        assert(advanced_itr1 == advanced_itr2);\r\n        static_assert(noexcept(advanced_itr1 == advanced_itr2)\r\n                      == noexcept(declval<const ranges::iterator_t<BaseType>&>()\r\n                                  == declval<const ranges::iterator_t<BaseType>&>()));\r\n\r\n        assert(relevant_range.begin() != advanced_itr1);\r\n    }\r\n\r\n    if constexpr (!ranges::common_range<LocalZipTransformType>) {\r\n        // Validate sentinel constructors\r\n        static_assert(is_default_constructible_v<ranges::sentinel_t<LocalZipTransformType>>\r\n                      == is_default_constructible_v<ranges::sentinel_t<BaseType>>);\r\n        static_assert(is_nothrow_default_constructible_v<ranges::sentinel_t<LocalZipTransformType>>\r\n                      == is_nothrow_default_constructible_v<ranges::sentinel_t<BaseType>>);\r\n\r\n        if constexpr (is_const && convertible_to<ranges::sentinel_t<InnerView>, ranges::sentinel_t<const InnerView>>) {\r\n            static_assert(noexcept(ranges::sentinel_t<LocalZipTransformType>{\r\n                              declval<ranges::sentinel_t<remove_const_t<LocalZipTransformType>>>()})\r\n                          == is_nothrow_move_constructible_v<ranges::sentinel_t<BaseType>>);\r\n        }\r\n\r\n        const same_as<ranges::sentinel_t<LocalZipTransformType>> auto sentinel = relevant_range.end();\r\n\r\n        // Validate sentinel operator overloads\r\n        {\r\n            const auto validate_iterator_sentinel_equality_closure = [&]<bool IteratorConst>() {\r\n                using comparison_iterator_t = ranges::iterator_t<maybe_const<IteratorConst, InnerView>>;\r\n                using comparison_sentinel_t = ranges::sentinel_t<BaseType>;\r\n\r\n                if constexpr (sentinel_for<comparison_sentinel_t, comparison_iterator_t>) {\r\n                    auto end_iterator = relevant_range.begin();\r\n                    ranges::advance(end_iterator, ranges::size(transformed_elements));\r\n\r\n                    assert(end_iterator == sentinel);\r\n                    static_assert(noexcept(end_iterator == sentinel)\r\n                                  == noexcept(declval<const comparison_iterator_t&>()\r\n                                              == declval<const comparison_sentinel_t&>()));\r\n\r\n                    assert(itr != sentinel);\r\n                }\r\n            };\r\n\r\n            validate_iterator_sentinel_equality_closure.template operator()<false>();\r\n            validate_iterator_sentinel_equality_closure.template operator()<true>();\r\n        }\r\n\r\n        {\r\n            const auto validate_iterator_sentinel_difference_closure = [&]<bool IteratorConst>() {\r\n                using comparison_iterator_t = ranges::iterator_t<maybe_const<IteratorConst, InnerView>>;\r\n                using comparison_sentinel_t = ranges::sentinel_t<BaseType>;\r\n\r\n                if constexpr (sized_sentinel_for<comparison_sentinel_t, comparison_iterator_t>) {\r\n                    using difference_type = ranges::range_difference_t<maybe_const<IteratorConst, InnerView>>;\r\n\r\n                    const auto comparison_itr = maybe_as_const<IteratorConst>(relevant_range).begin();\r\n\r\n                    const same_as<difference_type> auto diff1 = sentinel - comparison_itr;\r\n                    assert(diff1 == static_cast<difference_type>(ranges::size(transformed_elements)));\r\n                    static_assert(\r\n                        noexcept(sentinel - comparison_itr)\r\n                        == noexcept(declval<const comparison_sentinel_t&>() - declval<const comparison_iterator_t&>()));\r\n\r\n                    const same_as<difference_type> auto diff2 = comparison_itr - sentinel;\r\n                    assert(diff2 == -static_cast<difference_type>(ranges::size(transformed_elements)));\r\n                    static_assert(\r\n                        noexcept(comparison_itr - sentinel)\r\n                        == noexcept(declval<const comparison_iterator_t&>() - declval<const comparison_sentinel_t&>()));\r\n                }\r\n            };\r\n\r\n            validate_iterator_sentinel_difference_closure.template operator()<false>();\r\n            validate_iterator_sentinel_difference_closure.template operator()<true>();\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4100) // unreferenced formal parameter\r\n\r\ntemplate <class TransformType_, ranges::random_access_range TransformedElementsContainer,\r\n    ranges::input_range... RangeTypes>\r\nconstexpr bool test_one(TransformType_&& transformer, const TransformedElementsContainer& transformed_elements,\r\n    RangeTypes&&... test_ranges) {\r\n    // Ignore instances where one of the generated test ranges does not model\r\n    // ranges::viewable_range.\r\n    if constexpr ((ranges::viewable_range<RangeTypes> && ...)) {\r\n        using TransformType    = remove_cvref_t<TransformType_>;\r\n        using ZipTransformType = ranges::zip_transform_view<TransformType, AllView<RangeTypes>...>;\r\n        using InnerView        = ranges::zip_view<AllView<RangeTypes>...>;\r\n\r\n        constexpr bool are_views = (ranges::view<remove_cvref_t<RangeTypes>> && ...) && (sizeof...(RangeTypes) > 0);\r\n\r\n        static_assert(ranges::view<ZipTransformType>);\r\n\r\n        // Validate commonality\r\n        static_assert(ranges::common_range<ZipTransformType> == ranges::common_range<InnerView>);\r\n\r\n        constexpr bool has_const_begin_end =\r\n            ranges::range<const InnerView>\r\n            && regular_invocable<const TransformType&, ranges::range_reference_t<const RangeTypes>...>;\r\n\r\n        if constexpr (has_const_begin_end) {\r\n            static_assert(ranges::common_range<const ZipTransformType> == ranges::common_range<const InnerView>);\r\n        }\r\n\r\n        // Validate conditional default-initializability\r\n        static_assert(is_default_constructible_v<ZipTransformType>\r\n                      == (is_default_constructible_v<ranges::_Movable_box<TransformType>>\r\n                          && is_default_constructible_v<InnerView>) );\r\n        static_assert(is_nothrow_default_constructible_v<ZipTransformType>\r\n                      == (is_nothrow_default_constructible_v<ranges::_Movable_box<TransformType>>\r\n                          && is_nothrow_default_constructible_v<InnerView>) );\r\n\r\n        // Validate range adaptor object\r\n        {\r\n            constexpr bool can_copy_construct_ranges = !are_views || (copy_constructible<AllView<RangeTypes>> && ...);\r\n            constexpr bool can_move_ranges           = are_views || (movable<remove_reference_t<RangeTypes>> && ...);\r\n\r\n            // ... with lvalue arguments\r\n            static_assert(CanZipTransform<TransformType, RangeTypes&...>\r\n                          == (can_copy_construct_ranges && move_constructible<TransformType>) );\r\n            if constexpr (CanZipTransform<TransformType, RangeTypes&...>) {\r\n                using ExpectedZipTransformType = ZipTransformType;\r\n                constexpr bool is_noexcept     = is_nothrow_move_constructible_v<ranges::_Movable_box<TransformType>>\r\n                                          && is_nothrow_constructible_v<InnerView, AllView<RangeTypes>&&...>;\r\n\r\n                static_assert(\r\n                    same_as<decltype(views::zip_transform(std::forward<TransformType_>(transformer), test_ranges...)),\r\n                        ExpectedZipTransformType>);\r\n                static_assert(noexcept(views::zip_transform(std::forward<TransformType_>(transformer), test_ranges...))\r\n                              == is_noexcept);\r\n            }\r\n\r\n            // ... with const lvalue arguments\r\n            static_assert(CanZipTransform<TransformType, const remove_reference_t<RangeTypes>&...>\r\n                          == (can_copy_construct_ranges && move_constructible<TransformType>) );\r\n            if constexpr (CanZipTransform<TransformType, const remove_reference_t<RangeTypes>&...>) {\r\n                using ExpectedZipTransformType =\r\n                    ranges::zip_transform_view<TransformType, AllView<const remove_reference_t<RangeTypes>&>...>;\r\n                constexpr bool is_noexcept = is_nothrow_move_constructible_v<ranges::_Movable_box<TransformType>>\r\n                                          && is_nothrow_constructible_v<InnerView, const AllView<RangeTypes>&&...>;\r\n\r\n                static_assert(same_as<decltype(views::zip_transform(\r\n                                          std::forward<TransformType_>(transformer), as_const(test_ranges)...)),\r\n                    ExpectedZipTransformType>);\r\n                static_assert(\r\n                    noexcept(views::zip_transform(std::forward<TransformType_>(transformer), as_const(test_ranges)...))\r\n                    == is_noexcept);\r\n            }\r\n\r\n            // ... with rvalue arguments\r\n            static_assert(CanZipTransform<TransformType, remove_reference_t<RangeTypes>...>\r\n                          == (can_move_ranges && move_constructible<TransformType>) );\r\n            if constexpr (CanZipTransform<TransformType, remove_reference_t<RangeTypes>...>) {\r\n                using ExpectedZipTransformType =\r\n                    ranges::zip_transform_view<TransformType, AllView<remove_reference_t<RangeTypes>>...>;\r\n                constexpr bool is_noexcept = is_nothrow_move_constructible_v<ranges::_Movable_box<TransformType>>\r\n                                          && is_nothrow_constructible_v<InnerView, AllView<RangeTypes>&&...>;\r\n\r\n                static_assert(same_as<decltype(views::zip_transform(\r\n                                          std::forward<TransformType_>(transformer), std::move(test_ranges)...)),\r\n                    ExpectedZipTransformType>);\r\n                static_assert(\r\n                    noexcept(views::zip_transform(std::forward<TransformType_>(transformer), std::move(test_ranges)...))\r\n                    == is_noexcept);\r\n            }\r\n\r\n            // ... with const rvalue arguments\r\n            static_assert(CanZipTransform<TransformType, const remove_reference_t<RangeTypes>...>\r\n                          == (are_views && (copy_constructible<AllView<RangeTypes>> && ...)\r\n                              && move_constructible<TransformType>) );\r\n            if constexpr (CanZipTransform<TransformType, const remove_reference_t<RangeTypes>...>) {\r\n                using ExpectedZipTransformType =\r\n                    ranges::zip_transform_view<TransformType, AllView<const remove_reference_t<RangeTypes>>...>;\r\n                constexpr bool is_noexcept = is_nothrow_move_constructible_v<ranges::_Movable_box<TransformType>>\r\n                                          && is_nothrow_constructible_v<InnerView, const AllView<RangeTypes>&&...>;\r\n\r\n                static_assert(same_as<decltype(views::zip_transform(std::forward<TransformType_>(transformer),\r\n                                          std::move(as_const(test_ranges))...)),\r\n                    ExpectedZipTransformType>);\r\n                static_assert(noexcept(views::zip_transform(\r\n                                  std::forward<TransformType_>(transformer), std::move(as_const(test_ranges))...))\r\n                              == is_noexcept);\r\n            }\r\n        }\r\n\r\n        if constexpr (move_constructible<TransformType>) {\r\n            // Validate deduction guide\r\n            same_as<ZipTransformType> auto zipped_transformed_range = ranges::zip_transform_view{\r\n                std::forward<TransformType_>(transformer), std::forward<RangeTypes>(test_ranges)...};\r\n\r\n            // Validate zip_transform_view::size()\r\n            static_assert(CanMemberSize<ZipTransformType> == ranges::sized_range<InnerView>);\r\n            if constexpr (CanMemberSize<ZipTransformType>) {\r\n                using expected_size_type                            = decltype(declval<InnerView&>().size());\r\n                same_as<expected_size_type> auto zip_transform_size = zipped_transformed_range.size();\r\n\r\n                assert(zip_transform_size == ranges::size(transformed_elements));\r\n                static_assert(noexcept(zipped_transformed_range.size()) == noexcept(declval<InnerView&>().size()));\r\n            }\r\n\r\n            static_assert(CanMemberSize<const ZipTransformType> == ranges::sized_range<const InnerView>);\r\n            if constexpr (CanMemberSize<const ZipTransformType>) {\r\n                using expected_size_type                            = decltype(declval<const InnerView&>().size());\r\n                same_as<expected_size_type> auto zip_transform_size = as_const(zipped_transformed_range).size();\r\n\r\n                assert(zip_transform_size == ranges::size(transformed_elements));\r\n                static_assert(noexcept(as_const(zipped_transformed_range).size())\r\n                              == noexcept(declval<const InnerView&>().size()));\r\n            }\r\n\r\n            const bool is_empty = ranges::empty(transformed_elements);\r\n\r\n            // We don't want an empty results range, since we still need to do additional testing.\r\n            assert(!is_empty);\r\n\r\n            // Validate view_interface::empty() and view_interface::operator bool()\r\n            //\r\n            // From here on out, we'll be reusing concepts which we already verified to reduce\r\n            // redundancy.\r\n            static_assert(CanMemberEmpty<ZipTransformType>\r\n                          == (ranges::sized_range<ZipTransformType> || ranges::forward_range<ZipTransformType>) );\r\n            if constexpr (CanMemberEmpty<ZipTransformType>) {\r\n                assert(zipped_transformed_range.empty() == is_empty);\r\n            }\r\n\r\n            static_assert(\r\n                CanMemberEmpty<const ZipTransformType>\r\n                == (ranges::sized_range<const ZipTransformType> || ranges::forward_range<const ZipTransformType>) );\r\n            if constexpr (CanMemberEmpty<const ZipTransformType>) {\r\n                assert(as_const(zipped_transformed_range).empty() == is_empty);\r\n            }\r\n\r\n            static_assert(CanBool<ZipTransformType> == CanMemberEmpty<ZipTransformType>);\r\n            if constexpr (CanBool<ZipTransformType>) {\r\n                assert(static_cast<bool>(zipped_transformed_range) != is_empty);\r\n            }\r\n\r\n            static_assert(CanBool<const ZipTransformType> == CanMemberEmpty<const ZipTransformType>);\r\n            if constexpr (CanBool<const ZipTransformType>) {\r\n                assert(static_cast<bool>(as_const(zipped_transformed_range)) != is_empty);\r\n            }\r\n\r\n            // Validate view_interface::cbegin() and view_interface::cend()\r\n            static_assert(CanMemberCBegin<ZipTransformType>);\r\n            static_assert(CanMemberCEnd<ZipTransformType>);\r\n            {\r\n                static_assert(\r\n                    is_same_v<decltype(zipped_transformed_range.cbegin()), ranges::const_iterator_t<ZipTransformType>>);\r\n                static_assert(\r\n                    is_same_v<decltype(zipped_transformed_range.cend()), ranges::const_sentinel_t<ZipTransformType>>);\r\n\r\n                if constexpr ((derived_from<remove_cvref_t<RangeTypes>, forward_iterator_tag> && ...)) {\r\n                    const auto cbegin_itr                = zipped_transformed_range.cbegin();\r\n                    [[maybe_unused]] const auto cend_sen = zipped_transformed_range.cend();\r\n\r\n                    assert(*cbegin_itr == *ranges::begin(transformed_elements));\r\n                    assert(static_cast<decltype(ranges::size(transformed_elements))>(\r\n                               ranges::distance(zipped_transformed_range.cbegin(), zipped_transformed_range.cend()))\r\n                           == ranges::size(transformed_elements));\r\n                }\r\n            }\r\n\r\n            static_assert(CanMemberCBegin<const ZipTransformType> == has_const_begin_end);\r\n            static_assert(CanMemberCEnd<const ZipTransformType> == has_const_begin_end);\r\n            if constexpr (has_const_begin_end) {\r\n                static_assert(is_same_v<decltype(as_const(zipped_transformed_range).cbegin()),\r\n                    ranges::const_iterator_t<const ZipTransformType>>);\r\n                static_assert(is_same_v<decltype(as_const(zipped_transformed_range).cend()),\r\n                    ranges::const_sentinel_t<const ZipTransformType>>);\r\n\r\n                if constexpr ((derived_from<remove_cvref_t<RangeTypes>, forward_iterator_tag> && ...)) {\r\n                    const same_as<ranges::const_iterator_t<const ZipTransformType>> auto cbegin_itr =\r\n                        as_const(zipped_transformed_range).cbegin();\r\n                    [[maybe_unused]] const same_as<ranges::const_sentinel_t<const ZipTransformType>> auto cend_sen =\r\n                        as_const(zipped_transformed_range).cend();\r\n\r\n                    assert(*cbegin_itr == *ranges::begin(transformed_elements));\r\n                    assert(static_cast<decltype(ranges::size(transformed_elements))>(ranges::distance(\r\n                               as_const(zipped_transformed_range).cbegin(), as_const(zipped_transformed_range).cend()))\r\n                           == ranges::size(transformed_elements));\r\n                }\r\n            }\r\n\r\n            // Validate contents of zip-transformed range\r\n            assert(ranges::equal(zipped_transformed_range, transformed_elements));\r\n\r\n            if (!(ranges::forward_range<AllView<RangeTypes>> && ...)) // intentionally not if constexpr\r\n            {\r\n                return true;\r\n            }\r\n\r\n            // Validate view_interface::data()\r\n            //\r\n            // This should never exist because zip_transform_view does not model\r\n            // std::contiguous_range.\r\n            static_assert(!ranges::contiguous_range<ZipTransformType>);\r\n            static_assert(!CanMemberData<ZipTransformType>);\r\n            static_assert(!ranges::contiguous_range<const ZipTransformType>);\r\n            static_assert(!CanMemberData<const ZipTransformType>);\r\n\r\n            // Validate view_interface::front()\r\n            {\r\n                const auto validate_front_closure = [&]<bool IsConst>() {\r\n                    static_assert(CanMemberFront<maybe_const<IsConst, ZipTransformType>>\r\n                                  == ranges::forward_range<maybe_const<IsConst, ZipTransformType>>);\r\n                    if constexpr (CanMemberFront<maybe_const<IsConst, ZipTransformType>>) {\r\n                        using transform_result_t = TransformResultType<IsConst, TransformType, RangeTypes...>;\r\n                        same_as<transform_result_t> auto first_result =\r\n                            maybe_as_const<IsConst>(zipped_transformed_range).front();\r\n\r\n                        assert(first_result == *ranges::begin(transformed_elements));\r\n                    }\r\n                };\r\n\r\n                validate_front_closure.template operator()<false>();\r\n                validate_front_closure.template operator()<true>();\r\n            }\r\n\r\n            // Validate view_interface::back()\r\n            {\r\n                const auto validate_back_closure = [&]<bool IsConst>() {\r\n                    static_assert(CanMemberBack<maybe_const<IsConst, ZipTransformType>>\r\n                                  == (ranges::bidirectional_range<maybe_const<IsConst, ZipTransformType>>\r\n                                      && ranges::common_range<maybe_const<IsConst, ZipTransformType>>) );\r\n                    if constexpr (CanMemberBack<maybe_const<IsConst, ZipTransformType>>) {\r\n                        using transform_result_t = TransformResultType<IsConst, TransformType, RangeTypes...>;\r\n                        same_as<transform_result_t> auto last_result =\r\n                            maybe_as_const<IsConst>(zipped_transformed_range).back();\r\n\r\n                        assert(last_result == *ranges::prev(ranges::end(transformed_elements)));\r\n                    }\r\n                };\r\n\r\n                validate_back_closure.template operator()<false>();\r\n                validate_back_closure.template operator()<true>();\r\n            }\r\n\r\n            // Validate view_interface::operator[]\r\n            {\r\n                const auto validate_random_access_closure = [&]<bool IsConst>() {\r\n                    static_assert(CanIndex<maybe_const<IsConst, ZipTransformType>>\r\n                                  == ranges::random_access_range<maybe_const<IsConst, ZipTransformType>>);\r\n                    if constexpr (CanIndex<maybe_const<IsConst, ZipTransformType>>) {\r\n                        using transform_result_t = TransformResultType<IsConst, TransformType, RangeTypes...>;\r\n                        same_as<transform_result_t> auto first_result =\r\n                            maybe_as_const<IsConst>(zipped_transformed_range)[0];\r\n\r\n                        assert(first_result == ranges::begin(transformed_elements)[0]);\r\n                    }\r\n                };\r\n\r\n                validate_random_access_closure.template operator()<false>();\r\n                validate_random_access_closure.template operator()<true>();\r\n            }\r\n\r\n            // Validate zip_transform_view::begin() and zip_transform_view::end()\r\n            static_assert(CanMemberBegin<ZipTransformType>);\r\n            static_assert(CanMemberEnd<ZipTransformType>);\r\n            {\r\n                const same_as<ranges::iterator_t<ZipTransformType>> auto begin_itr = zipped_transformed_range.begin();\r\n                [[maybe_unused]] const same_as<ranges::sentinel_t<ZipTransformType>> auto end_sentinel =\r\n                    zipped_transformed_range.end();\r\n\r\n                assert(*begin_itr == *ranges::begin(transformed_elements));\r\n                assert(static_cast<decltype(ranges::size(transformed_elements))>(\r\n                           ranges::distance(zipped_transformed_range.begin(), zipped_transformed_range.end()))\r\n                       == ranges::size(transformed_elements));\r\n\r\n                static_assert(noexcept(zipped_transformed_range.begin()) == noexcept(declval<InnerView&>().begin())\r\n                              && is_nothrow_move_constructible_v<ranges::iterator_t<InnerView>>);\r\n                static_assert(noexcept(zipped_transformed_range.end()) == noexcept(declval<InnerView&>().end())\r\n                              && is_nothrow_move_constructible_v<ranges::sentinel_t<InnerView>>);\r\n            }\r\n\r\n            static_assert(CanMemberBegin<const ZipTransformType> == has_const_begin_end);\r\n            static_assert(CanMemberEnd<const ZipTransformType> == has_const_begin_end);\r\n            if constexpr (has_const_begin_end) {\r\n                const same_as<ranges::iterator_t<const ZipTransformType>> auto begin_itr =\r\n                    as_const(zipped_transformed_range).begin();\r\n                [[maybe_unused]] const same_as<ranges::sentinel_t<const ZipTransformType>> auto end_sentinel =\r\n                    as_const(zipped_transformed_range).end();\r\n\r\n                assert(*begin_itr == *ranges::begin(transformed_elements));\r\n                assert(static_cast<decltype(ranges::size(transformed_elements))>(ranges::distance(\r\n                           as_const(zipped_transformed_range).begin(), as_const(zipped_transformed_range).end()))\r\n                       == ranges::size(transformed_elements));\r\n                static_assert(noexcept(as_const(zipped_transformed_range).begin())\r\n                                  == noexcept(declval<const InnerView&>().begin())\r\n                              && is_nothrow_move_constructible_v<ranges::iterator_t<const InnerView>>);\r\n                static_assert(\r\n                    noexcept(as_const(zipped_transformed_range).end()) == noexcept(declval<const InnerView&>().end())\r\n                    && is_nothrow_move_constructible_v<ranges::sentinel_t<const InnerView>>);\r\n            }\r\n\r\n            validate_iterators_sentinels<TransformType, TransformedElementsContainer,\r\n                decltype(zipped_transformed_range), RangeTypes...>(zipped_transformed_range, transformed_elements);\r\n            validate_iterators_sentinels<TransformType, TransformedElementsContainer,\r\n                decltype(as_const(zipped_transformed_range)), RangeTypes...>(\r\n                as_const(zipped_transformed_range), transformed_elements);\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n#pragma warning(pop)\r\n\r\nconstexpr auto one_element_transform_closure = [](const auto& a) { return a * 5; };\r\n\r\nconstexpr auto three_element_transform_closure = [](const auto& a, const auto& b, const auto& c) { return a * b + c; };\r\n\r\nconstexpr array test_element_array_one{0, 1, 2, 3, 4, 5, 6, 7};\r\nconstexpr array test_element_array_two{5, 13, 6, -4, 12};\r\nconstexpr array test_element_array_three{6534, 23, 62, -124, 6, 42, 9};\r\n\r\nconstexpr auto single_range_transform_results_array = []() {\r\n    auto transformed_elements_array{test_element_array_one};\r\n    ranges::transform(transformed_elements_array, transformed_elements_array.begin(), one_element_transform_closure);\r\n\r\n    return transformed_elements_array;\r\n}();\r\n\r\nconstexpr auto three_range_transform_results_array = []() {\r\n    constexpr size_t results_array_size =\r\n        (min) ((min) (test_element_array_one.size(), test_element_array_two.size()), test_element_array_three.size());\r\n    array<int, results_array_size> transformed_elements_array{};\r\n\r\n    for (auto [destValue, a, b, c] : views::zip(\r\n             transformed_elements_array, test_element_array_one, test_element_array_two, test_element_array_three)) {\r\n        destValue = three_element_transform_closure(a, b, c);\r\n    }\r\n\r\n    return transformed_elements_array;\r\n}();\r\n\r\n// zip_transform_view<RangeTypes...> is implemented in terms of zip_view<RangeTypes...>, so it inherits\r\n// its sensitivity towards all of the traits which zip_view<RangeTypes...> is sensitive to. This includes\r\n// the following:\r\n//\r\n//   - The categories of RangeTypes...\r\n//   - The commonality of RangeTypes...\r\n//   - Whether or not the size() member exists for each of RangeTypes..., as it is used by ranges::size()\r\n//   - Whether or not each range's iterator and sentinel models sized_sentinel_for\r\n//   - The sizeof...(RangeTypes)\r\n//\r\n// Other conditions are irrelevant.\r\n\r\ntemplate <bool IsMoveOnly>\r\nclass range_type_solver {\r\nprotected:\r\n    template <class Category, class Element, test::Sized IsSized, test::Common IsCommon, test::CanDifference Diff>\r\n    using range_type = test::range<Category, Element, IsSized, Diff, IsCommon,\r\n        (test::to_bool(IsCommon) ? test::CanCompare::yes\r\n                                 : test::CanCompare{derived_from<Category, forward_iterator_tag>}),\r\n        test::ProxyRef{derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes,\r\n        test::Copyability::move_only>;\r\n};\r\n\r\ntemplate <>\r\nclass range_type_solver<false> {\r\nprotected:\r\n    template <class Category, class Element, test::Sized IsSized, test::Common IsCommon, test::CanDifference Diff>\r\n    using range_type = test::range<Category, Element, IsSized, Diff, IsCommon,\r\n        (test::to_bool(IsCommon) ? test::CanCompare::yes\r\n                                 : test::CanCompare{derived_from<Category, forward_iterator_tag>})>;\r\n};\r\n\r\ntemplate <bool IsMoveOnly, class Category, test::Sized IsSized, test::Common IsCommon, test::CanDifference Diff>\r\nclass instantiator_impl : private range_type_solver<IsMoveOnly> {\r\nprivate:\r\n    template <class OtherCategory, class Element, test::Sized OtherIsSized, test::Common OtherIsCommon,\r\n        test::CanDifference OtherDiff>\r\n    using range_type = range_type_solver<IsMoveOnly>::template range_type<OtherCategory, Element, OtherIsSized,\r\n        OtherIsCommon, OtherDiff>;\r\n\r\n    using standard_range_type = range_type<Category, const int, IsSized, IsCommon, Diff>;\r\n\r\n    using differing_category_range_type =\r\n        range_type<conditional_t<same_as<Category, input_iterator_tag>, forward_iterator_tag, input_iterator_tag>,\r\n            const int, IsSized, IsCommon, Diff>;\r\n    using differing_size_member_range_type            = range_type<Category, const int,\r\n                   (IsSized == test::Sized::yes ? test::Sized::no : test::Sized::yes), IsCommon, Diff>;\r\n    using differing_is_common_range_type              = range_type<Category, const int, IsSized,\r\n                     (IsCommon == test::Common::yes ? test::Common::no : test::Common::yes), Diff>;\r\n    using differing_iterator_sentinel_diff_range_type = range_type<Category, const int, IsSized, IsCommon,\r\n        (Diff == test::CanDifference::yes ? test::CanDifference::no : test::CanDifference::yes)>;\r\n\r\n    static constexpr void test_single_range() {\r\n        standard_range_type single_range{span<const int>{test_element_array_one}};\r\n        test_one(one_element_transform_closure, single_range_transform_results_array, single_range);\r\n    }\r\n\r\n    template <class DifferingRangeType>\r\n    static constexpr void test_three_ranges() {\r\n        DifferingRangeType first_range{span<const int>{test_element_array_one}};\r\n        standard_range_type second_range{span<const int>{test_element_array_two}};\r\n        standard_range_type third_range{span<const int>{test_element_array_three}};\r\n\r\n        test_one(three_element_transform_closure, three_range_transform_results_array, first_range, second_range,\r\n            third_range);\r\n    }\r\n\r\npublic:\r\n    static constexpr void call() {\r\n        // Test the single-range use of views::zip_transform (i.e., sizeof...(RangeTypes) == 1).\r\n        test_single_range();\r\n\r\n        // Test three ranges with views::zip_transform with...\r\n\r\n        // all of their traits being the same, ...\r\n        test_three_ranges<standard_range_type>();\r\n\r\n        // one range having a different category, ...\r\n        test_three_ranges<differing_category_range_type>();\r\n\r\n        // one range having a different path for ranges::size(), ...\r\n        test_three_ranges<differing_size_member_range_type>();\r\n\r\n        // one range having a different commonality, ...\r\n        test_three_ranges<differing_is_common_range_type>();\r\n\r\n        // and one range having iterators and sentinels which model sized_sentinel_for\r\n        // differently.\r\n        test_three_ranges<differing_iterator_sentinel_diff_range_type>();\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Sized IsSized, test::Common IsCommon, test::CanDifference Diff>\r\nclass instantiator : public instantiator_impl<false, Category, IsSized, IsCommon, Diff> {};\r\n\r\ntemplate <class Category, test::Sized IsSized, test::Common IsCommon, test::CanDifference Diff>\r\nclass move_only_view_instantiator : public instantiator_impl<true, Category, IsSized, IsCommon, Diff> {};\r\n\r\ntemplate <class Category, template <class, test::Sized, test::Common, test::CanDifference> class InstantiatorType>\r\nconstexpr bool instantiation_test_for_category() {\r\n    using test::Sized, test::Common, test::CanDifference;\r\n\r\n#ifndef _PREFAST_ // TRANSITION, GH-1030\r\n    InstantiatorType<Category, Sized::no, Common::no, CanDifference::no>::call();\r\n    InstantiatorType<Category, Sized::no, Common::no, CanDifference::yes>::call();\r\n    InstantiatorType<Category, Sized::no, Common::yes, CanDifference::no>::call();\r\n    InstantiatorType<Category, Sized::no, Common::yes, CanDifference::yes>::call();\r\n    InstantiatorType<Category, Sized::yes, Common::no, CanDifference::no>::call();\r\n    InstantiatorType<Category, Sized::yes, Common::no, CanDifference::yes>::call();\r\n    InstantiatorType<Category, Sized::yes, Common::yes, CanDifference::no>::call();\r\n#endif // TRANSITION, GH-1030\r\n    InstantiatorType<Category, Sized::yes, Common::yes, CanDifference::yes>::call();\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <template <class, test::Sized, test::Common, test::CanDifference> class InstantiatorType>\r\nconstexpr bool instantiation_test() {\r\n#if defined(TEST_INPUT)\r\n    instantiation_test_for_category<input_iterator_tag, InstantiatorType>();\r\n#elif defined(TEST_FORWARD) // ^^^ TEST_INPUT / TEST_FORWARD vvv\r\n    instantiation_test_for_category<forward_iterator_tag, InstantiatorType>();\r\n#elif defined(TEST_BIDIRECTIONAL) // ^^^ TEST_FORWARD / TEST_BIDIRECTIONAL vvv\r\n    instantiation_test_for_category<bidirectional_iterator_tag, InstantiatorType>();\r\n#elif defined(TEST_RANDOM) // ^^^ TEST_BIDIRECTIONAL / TEST_RANDOM vvv\r\n    instantiation_test_for_category<random_access_iterator_tag, InstantiatorType>();\r\n#else // ^^^ TEST_RANDOM / UNKNOWN vvv\r\n    static_assert(\r\n        false, \"ERROR: A defined test macro was never specified when executing test P2321R2_views_zip_transform!\");\r\n#endif // ^^^ UNKNOWN ^^^\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool validate_empty_ranges() {\r\n    bool was_dummy_function_called = false;\r\n\r\n    struct DummyType {};\r\n\r\n    const auto dummy_function_closure = [&was_dummy_function_called]() {\r\n        was_dummy_function_called = true;\r\n        return DummyType{};\r\n    };\r\n\r\n    [[maybe_unused]] const auto useless_transform_view = views::zip_transform(dummy_function_closure);\r\n    assert(!was_dummy_function_called);\r\n\r\n    // When no ranges are used with the std::views::zip_transform CPO, the decayed return type of\r\n    // the provided function must not be void.\r\n    static_assert(\r\n        CanZipTransform<decltype([]() noexcept -> const auto& { return single_range_transform_results_array; })>);\r\n    static_assert(!CanZipTransform<decltype([]() noexcept -> void {})>);\r\n\r\n    return true;\r\n}\r\n\r\n// Also test GH-4414: \"<ranges>: zip_transform does not accept non const iterable ranges\"\r\nconstexpr bool test_gh_4414() {\r\n    auto evens_and_odds = views::zip_transform([](int even, int odd) { return even + odd; },\r\n        views::iota(0, 10) | views::filter([](int i) { return i % 2 == 0; }),\r\n        views::iota(0, 10) | views::filter([](int i) { return i % 2 != 0; }));\r\n\r\n    using ZippedTransformed = decltype(evens_and_odds);\r\n    static_assert(ranges::range<ZippedTransformed>);\r\n    static_assert(!ranges::range<const ZippedTransformed>);\r\n\r\n    constexpr int expected_results[]{1, 5, 9, 13, 17};\r\n    return ranges::equal(expected_results, evens_and_odds);\r\n}\r\n\r\nint main() {\r\n    // Empty RangeTypes... parameter pack\r\n    {\r\n        static_assert(validate_empty_ranges());\r\n        validate_empty_ranges();\r\n    }\r\n\r\n    // Validate views\r\n    {\r\n        // ... copyable, single view\r\n        constexpr span<const int> int_span{test_element_array_one};\r\n\r\n        static_assert(test_one(one_element_transform_closure, single_range_transform_results_array, int_span));\r\n        test_one(one_element_transform_closure, single_range_transform_results_array, int_span);\r\n    }\r\n\r\n    {\r\n        // ... copyable, multiple views\r\n        constexpr span<const int> first_span{test_element_array_one};\r\n        constexpr span<const int> second_span{test_element_array_two};\r\n        constexpr span<const int> third_span{test_element_array_three};\r\n\r\n        static_assert(test_one(\r\n            three_element_transform_closure, three_range_transform_results_array, first_span, second_span, third_span));\r\n        test_one(\r\n            three_element_transform_closure, three_range_transform_results_array, first_span, second_span, third_span);\r\n    }\r\n\r\n    {\r\n        // ... move-only, single and multiple views\r\n        static_assert(instantiation_test<move_only_view_instantiator>());\r\n        instantiation_test<move_only_view_instantiator>();\r\n    }\r\n\r\n    {\r\n        // ... immobile, single and multiple views\r\n        static_assert(instantiation_test<instantiator>());\r\n        instantiation_test<instantiator>();\r\n    }\r\n\r\n    // Validate non-views\r\n    {\r\n        static_assert(\r\n            test_one(one_element_transform_closure, single_range_transform_results_array, test_element_array_one));\r\n        test_one(one_element_transform_closure, single_range_transform_results_array, test_element_array_one);\r\n    }\r\n    {\r\n        static_assert(test_one(three_element_transform_closure, three_range_transform_results_array,\r\n            test_element_array_one, test_element_array_two, test_element_array_three));\r\n        test_one(three_element_transform_closure, three_range_transform_results_array, test_element_array_one,\r\n            test_element_array_two, test_element_array_three);\r\n    }\r\n    {\r\n        static_assert(test_gh_4414());\r\n        assert(test_gh_4414());\r\n    }\r\n\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2322R6_ranges_alg_fold/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2322R6_ranges_alg_fold/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <functional>\r\n#include <optional>\r\n#include <ranges>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct instantiator {\r\n    static constexpr double some_doubles[]  = {0.1, 0.2, 0.3};\r\n    static constexpr double left_sum        = 0.1 + 0.2 + 0.3;\r\n    static constexpr double left_difference = 0.1 - 0.2 - 0.3;\r\n    static constexpr double right_product   = 0.1 * (0.2 * 0.3);\r\n\r\n    static constexpr bool non_dependent() {\r\n        using ranges::fold_left, ranges::fold_left_first, ranges::fold_left_with_iter,\r\n            ranges::fold_left_first_with_iter, ranges::fold_right, ranges::fold_right_last,\r\n            ranges::fold_left_with_iter_result, ranges::fold_left_first_with_iter_result, ranges::begin, ranges::end;\r\n\r\n        constexpr auto empty_rng  = views::empty<const double>;\r\n        const auto vec_of_doubles = some_doubles | ranges::to<vector>();\r\n\r\n        { // Validate fold_left iterator+sentinel overload\r\n            const same_as<double> auto sum2 = fold_left(begin(vec_of_doubles), end(vec_of_doubles), 0.0, plus{});\r\n            assert(sum2 == left_sum);\r\n\r\n            const double single_value       = 3.14;\r\n            const same_as<double> auto sum3 = fold_left(begin(empty_rng), end(empty_rng), single_value, plus{});\r\n            assert(sum3 == single_value);\r\n        }\r\n\r\n        { // Validate fold_left range overload\r\n            const same_as<double> auto sum2 = fold_left(vec_of_doubles, 0.0, plus{});\r\n            assert(sum2 == left_sum);\r\n\r\n            const double single_value       = 3.14;\r\n            const same_as<double> auto sum3 = fold_left(empty_rng, single_value, plus{});\r\n            assert(sum3 == single_value);\r\n        }\r\n\r\n        { // Validate fold_left_first iterator+sentinel overload\r\n            const same_as<optional<double>> auto diff2 =\r\n                fold_left_first(begin(vec_of_doubles), end(vec_of_doubles), minus<double>{});\r\n            assert(diff2 == left_difference);\r\n\r\n            const same_as<optional<double>> auto diff3 =\r\n                fold_left_first(begin(empty_rng), end(empty_rng), minus<double>{});\r\n            assert(diff3 == nullopt);\r\n        }\r\n\r\n        { // Validate fold_left_first range overload\r\n            const same_as<optional<double>> auto diff2 = fold_left_first(vec_of_doubles, minus<double>{});\r\n            assert(diff2 == left_difference);\r\n\r\n            const same_as<optional<double>> auto diff3 = fold_left_first(empty_rng, minus<double>{});\r\n            assert(diff3 == nullopt);\r\n        }\r\n\r\n        { // Validate fold_left_with_iter iterator+sentinel overload\r\n            const same_as<fold_left_with_iter_result<vector<double>::const_iterator, double>> auto sum2 =\r\n                fold_left_with_iter(begin(vec_of_doubles), end(vec_of_doubles), 0.0, plus{});\r\n            assert(sum2.in == end(vec_of_doubles));\r\n            assert(sum2.value == left_sum);\r\n\r\n            const double single_value = 3.14;\r\n            const same_as<fold_left_with_iter_result<const double*, double>> auto sum3 =\r\n                fold_left_with_iter(begin(empty_rng), end(empty_rng), single_value, plus{});\r\n            assert(sum3.in == empty_rng.end());\r\n            assert(sum3.value == single_value);\r\n        }\r\n\r\n        { // Validate fold_left_with_iter range overload\r\n            const same_as<fold_left_with_iter_result<vector<double>::const_iterator, double>> auto sum2 =\r\n                fold_left_with_iter(vec_of_doubles, 0.0, plus{});\r\n            assert(sum2.in == end(vec_of_doubles));\r\n            assert(sum2.value == left_sum);\r\n\r\n            const same_as<fold_left_with_iter_result<ranges::dangling, double>> auto sum3 =\r\n                fold_left_with_iter(some_doubles | ranges::to<vector>(), 0.0, plus{});\r\n            assert(sum3.value == left_sum);\r\n\r\n            const double single_value = 3.14;\r\n            const same_as<fold_left_with_iter_result<const double*, double>> auto sum4 =\r\n                fold_left_with_iter(empty_rng, single_value, plus{});\r\n            assert(sum4.in == empty_rng.end());\r\n            assert(sum4.value == single_value);\r\n        }\r\n\r\n        { // Validate fold_left_first_with_iter iterator+sentinel overload\r\n            const same_as<fold_left_first_with_iter_result<vector<double>::const_iterator, optional<double>>> auto\r\n                diff2 = fold_left_first_with_iter(begin(vec_of_doubles), end(vec_of_doubles), minus<double>{});\r\n            assert(diff2.in == end(vec_of_doubles));\r\n            assert(diff2.value == left_difference);\r\n\r\n            const same_as<fold_left_first_with_iter_result<const double*, optional<double>>> auto diff3 =\r\n                fold_left_first_with_iter(begin(empty_rng), end(empty_rng), minus<double>{});\r\n            assert(diff3.in == end(empty_rng));\r\n            assert(diff3.value == nullopt);\r\n        }\r\n\r\n        { // Validate fold_left_first_with_iter range overload\r\n            const same_as<fold_left_first_with_iter_result<vector<double>::const_iterator, optional<double>>> auto\r\n                diff2 = fold_left_first_with_iter(vec_of_doubles, minus<double>{});\r\n            assert(diff2.in == end(vec_of_doubles));\r\n            assert(diff2.value == left_difference);\r\n\r\n            const same_as<fold_left_first_with_iter_result<const double*, optional<double>>> auto diff3 =\r\n                fold_left_first_with_iter(empty_rng, minus<double>{});\r\n            assert(diff3.in == end(empty_rng));\r\n            assert(diff3.value == nullopt);\r\n\r\n            const same_as<fold_left_first_with_iter_result<ranges::dangling, optional<double>>> auto diff4 =\r\n                fold_left_first_with_iter(some_doubles | ranges::to<vector>(), minus<double>{});\r\n            assert(diff4.value == left_difference);\r\n        }\r\n\r\n        { // Validate fold_right iterator+sentinel overload\r\n            const same_as<double> auto prod2 =\r\n                fold_right(begin(vec_of_doubles), end(vec_of_doubles), 1.0, multiplies{});\r\n            assert(prod2 == right_product);\r\n\r\n            const double single_value        = 3.14;\r\n            const same_as<double> auto prod3 = fold_right(begin(empty_rng), end(empty_rng), single_value, multiplies{});\r\n            assert(prod3 == single_value);\r\n        }\r\n\r\n        { // Validate fold_right range overload\r\n            const same_as<double> auto prod2 = fold_right(vec_of_doubles, 1.0, multiplies{});\r\n            assert(prod2 == right_product);\r\n\r\n            const double single_value        = 3.14;\r\n            const same_as<double> auto prod3 = fold_right(empty_rng, single_value, multiplies{});\r\n            assert(prod3 == single_value);\r\n        }\r\n\r\n        { // Validate fold_right_last iterator+sentinel overload\r\n            const same_as<optional<double>> auto prod2 =\r\n                fold_right_last(begin(vec_of_doubles), end(vec_of_doubles), multiplies{});\r\n            assert(prod2 == right_product);\r\n\r\n            const same_as<optional<double>> auto prod3 =\r\n                fold_right_last(begin(empty_rng), end(empty_rng), multiplies{});\r\n            assert(prod3 == nullopt);\r\n        }\r\n\r\n        { // Validate fold_right_last range overload\r\n            const same_as<optional<double>> auto prod2 = fold_right_last(vec_of_doubles, multiplies{});\r\n            assert(prod2 == right_product);\r\n\r\n            const same_as<optional<double>> auto prod3 = fold_right_last(empty_rng, multiplies{});\r\n            assert(prod3 == nullopt);\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    template <ranges::input_range Rng>\r\n    static constexpr void call() {\r\n        using ranges::fold_left, ranges::fold_left_first, ranges::fold_left_with_iter,\r\n            ranges::fold_left_first_with_iter, ranges::fold_right, ranges::fold_right_last,\r\n            ranges::fold_left_with_iter_result, ranges::fold_left_first_with_iter_result, ranges::begin, ranges::end;\r\n\r\n        { // Validate fold_left iterator+sentinel overload\r\n            const Rng wrapped{some_doubles};\r\n            const same_as<double> auto sum1 = fold_left(begin(wrapped), end(wrapped), 0.0, plus{});\r\n            assert(sum1 == left_sum);\r\n        }\r\n\r\n        { // Validate fold_left range overload\r\n            const same_as<double> auto sum1 = fold_left(Rng{some_doubles}, 0.0, plus{});\r\n            assert(sum1 == left_sum);\r\n        }\r\n\r\n        { // Validate fold_left_first iterator+sentinel overload\r\n            const Rng wrapped{some_doubles};\r\n            const same_as<optional<double>> auto diff1 = fold_left_first(begin(wrapped), end(wrapped), minus<double>{});\r\n            assert(diff1 == left_difference);\r\n        }\r\n\r\n        { // Validate fold_left_first range overload\r\n            const same_as<optional<double>> auto diff1 = fold_left_first(Rng{some_doubles}, minus<double>{});\r\n            assert(diff1 == left_difference);\r\n        }\r\n\r\n        { // Validate fold_left_with_iter iterator+sentinel overload\r\n            const Rng wrapped{some_doubles};\r\n            const same_as<fold_left_with_iter_result<ranges::iterator_t<Rng>, double>> auto sum1 =\r\n                fold_left_with_iter(begin(wrapped), end(wrapped), 0.0, plus{});\r\n            assert(sum1.in == end(wrapped));\r\n            assert(sum1.value == left_sum);\r\n        }\r\n\r\n        { // Validate fold_left_with_iter range overload\r\n            const Rng wrapped{some_doubles};\r\n            const same_as<fold_left_with_iter_result<ranges::iterator_t<Rng>, double>> auto sum1 =\r\n                fold_left_with_iter(wrapped, 0.0, plus{});\r\n            assert(sum1.in == end(wrapped));\r\n            assert(sum1.value == left_sum);\r\n        }\r\n\r\n        { // Validate fold_left_first_with_iter iterator+sentinel overload\r\n            const Rng wrapped{some_doubles};\r\n            const same_as<fold_left_first_with_iter_result<ranges::iterator_t<Rng>, optional<double>>> auto diff1 =\r\n                fold_left_first_with_iter(begin(wrapped), end(wrapped), minus<double>{});\r\n            assert(diff1.in == end(wrapped));\r\n            assert(diff1.value == left_difference);\r\n        }\r\n\r\n        { // Validate fold_left_first_with_iter range overload\r\n            const Rng wrapped{some_doubles};\r\n            const same_as<fold_left_first_with_iter_result<ranges::iterator_t<Rng>, optional<double>>> auto diff1 =\r\n                fold_left_first_with_iter(wrapped, minus<double>{});\r\n            assert(diff1.in == end(wrapped));\r\n            assert(diff1.value == left_difference);\r\n        }\r\n\r\n        if constexpr (ranges::bidirectional_range<Rng>) {\r\n            { // Validate fold_right iterator+sentinel overload\r\n                const Rng wrapped{some_doubles};\r\n                const same_as<double> auto prod1 = fold_right(begin(wrapped), end(wrapped), 1.0, multiplies{});\r\n                assert(prod1 == right_product);\r\n            }\r\n\r\n            { // Validate fold_right range overload\r\n                const same_as<double> auto prod1 = fold_right(Rng{some_doubles}, 1.0, multiplies{});\r\n                assert(prod1 == right_product);\r\n            }\r\n\r\n            { // Validate fold_right_last iterator+sentinel overload\r\n                const Rng wrapped{some_doubles};\r\n                const same_as<optional<double>> auto prod1 =\r\n                    fold_right_last(begin(wrapped), end(wrapped), multiplies{});\r\n                assert(prod1 == right_product);\r\n            }\r\n\r\n            { // Validate fold_right_last range overload\r\n                const same_as<optional<double>> auto prod1 = fold_right_last(Rng{some_doubles}, multiplies{});\r\n                assert(prod1 == right_product);\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nconstexpr bool test_in_value_result() {\r\n    using ranges::in_value_result;\r\n    static_assert(is_aggregate_v<in_value_result<int, int>>);\r\n    static_assert(is_trivially_copyable_v<in_value_result<int, int>>);\r\n    static_assert(is_trivially_default_constructible_v<in_value_result<int, int>>);\r\n\r\n    in_value_result<int*, int> res = {nullptr, 6};\r\n    { // Validate binding\r\n        auto [in, value] = res;\r\n        assert(in == nullptr);\r\n        assert(value == 6);\r\n    }\r\n\r\n    { // Validate conversion operator (const &)\r\n        in_value_result<const int*, long> long_res = res;\r\n        assert(long_res.in == nullptr);\r\n        assert(long_res.value == 6L);\r\n    }\r\n\r\n    { // Validate conversion operator (&&)\r\n        in_value_result<const int*, long long> long_long_res = std::move(res);\r\n        assert(long_long_res.in == nullptr);\r\n        assert(long_long_res.value == 6LL);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert((test_in<instantiator, const double>(), true));\r\n    test_in<instantiator, const double>();\r\n\r\n    static_assert((test_bidi<instantiator, const double>(), true));\r\n    test_bidi<instantiator, const double>();\r\n\r\n#if !(defined(_DEBUG) && defined(__EDG__)) // TRANSITION, VSO-1949414, see also GH-1566\r\n    static_assert(instantiator::non_dependent());\r\n#endif // ^^^ no workaround ^^^\r\n    instantiator::non_dependent();\r\n\r\n    static_assert(test_in_value_result());\r\n    assert(test_in_value_result());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2374R4_checked_arithmetic_operations/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2374R4_checked_arithmetic_operations/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <limits>\r\n#include <ranges>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\n// Check MSVC-STL internal machinery\r\n\r\ntemplate <class T>\r\nconstexpr void check_add_overflow() {\r\n    constexpr bool is_T_signed = numeric_limits<T>::is_signed;\r\n    T out;\r\n    const T minval = numeric_limits<T>::min();\r\n    const T maxval = numeric_limits<T>::max();\r\n\r\n    assert(!_Add_overflow(T{0}, T{0}, out) && out == T{0});\r\n    assert(!_Add_overflow(T{1}, T{1}, out) && out == T{2});\r\n    assert(!_Add_overflow(minval, T{0}, out) && out == minval);\r\n    assert(!_Add_overflow(maxval, T{0}, out) && out == maxval);\r\n    assert(!_Add_overflow(minval, maxval, out) && out == static_cast<T>(-1));\r\n    assert(_Add_overflow(maxval, T{1}, out));\r\n    assert(_Add_overflow(static_cast<T>(maxval / 2), maxval, out));\r\n    assert(!_Add_overflow(static_cast<T>(maxval / 2), static_cast<T>(maxval / 2), out)\r\n           && out == static_cast<T>(maxval - 1));\r\n    assert(_Add_overflow(maxval, maxval, out));\r\n\r\n    if constexpr (is_T_signed) {\r\n        assert(!_Add_overflow(T{1}, T{-1}, out) && out == T{0});\r\n        assert(_Add_overflow(minval, T{-1}, out));\r\n        assert(_Add_overflow(minval, minval, out));\r\n        assert(_Add_overflow(T{100}, T{28}, out) == (sizeof(T) == 1));\r\n    } else {\r\n        assert(_Add_overflow(T{200}, T{56}, out) == (sizeof(T) == 1));\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nconstexpr void check_mul_overflow() {\r\n    constexpr bool is_T_signed = numeric_limits<T>::is_signed;\r\n    T out;\r\n    const T minval = numeric_limits<T>::min();\r\n    const T maxval = numeric_limits<T>::max();\r\n\r\n    assert(!_Mul_overflow(T{0}, T{0}, out) && out == T{0});\r\n    assert(!_Mul_overflow(T{1}, T{1}, out) && out == T{1});\r\n    assert(!_Mul_overflow(minval, T{0}, out) && out == T{0});\r\n    assert(!_Mul_overflow(minval, T{1}, out) && out == minval);\r\n    assert(!_Mul_overflow(maxval, T{0}, out) && out == T{0});\r\n    assert(!_Mul_overflow(maxval, T{1}, out) && out == maxval);\r\n    assert(_Mul_overflow(maxval, maxval, out));\r\n    assert(_Mul_overflow(minval, maxval, out) == is_T_signed);\r\n    assert(_Mul_overflow(minval, minval, out) == is_T_signed);\r\n    assert(!_Mul_overflow(static_cast<T>(maxval / 2), T{2}, out) && out == static_cast<T>(maxval - 1));\r\n    assert(_Mul_overflow(T{0x77}, T{0x78}, out) == (sizeof(T) == 1));\r\n\r\n    if constexpr (is_T_signed) {\r\n        assert(_Mul_overflow(minval, T{-1}, out));\r\n        assert(!_Mul_overflow(maxval, T{-1}, out) && out == minval + 1);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nconstexpr void check_add_and_mul() {\r\n    check_add_overflow<T>();\r\n    check_mul_overflow<T>();\r\n}\r\n\r\nconstexpr bool test() {\r\n    check_add_and_mul<int8_t>();\r\n    check_add_and_mul<uint8_t>();\r\n    check_add_and_mul<int16_t>();\r\n    check_add_and_mul<uint16_t>();\r\n    check_add_and_mul<int32_t>();\r\n    check_add_and_mul<uint32_t>();\r\n    check_add_and_mul<int64_t>();\r\n    check_add_and_mul<uint64_t>();\r\n    check_add_and_mul<_Signed128>();\r\n    check_add_and_mul<_Unsigned128>();\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(test());\r\n    test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2374R4_views_cartesian_product/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2374R4_views_cartesian_product/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <list>\r\n#include <ranges>\r\n#include <span>\r\n#include <string_view>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\nusing ranges::bidirectional_range, ranges::random_access_range, ranges::sized_range, ranges::common_range,\r\n    ranges::iterator_t;\r\n\r\ntemplate <bool B, class T>\r\nusing maybe_const = conditional_t<B, const T, T>;\r\n\r\n// Helper concepts from [range.cartesian.view]\r\ntemplate <bool IsConst, class First, class... Rest>\r\nconcept CartesianProductIsRandomAccess =\r\n    (random_access_range<maybe_const<IsConst, First>> && ...\r\n        && (random_access_range<maybe_const<IsConst, Rest>> && sized_range<maybe_const<IsConst, Rest>>) );\r\n\r\ntemplate <class Rng>\r\nconcept CartesianProductCommonArg = common_range<Rng> || (sized_range<Rng> && random_access_range<Rng>);\r\n\r\ntemplate <bool IsConst, class First, class... Rest>\r\nconcept CartesianProductIsBidirectional =\r\n    (bidirectional_range<maybe_const<IsConst, First>> && ...\r\n        && (bidirectional_range<maybe_const<IsConst, Rest>> && CartesianProductCommonArg<maybe_const<IsConst, Rest>>) );\r\n\r\ntemplate <class First, class... Rest>\r\nconcept CartesianProductIsCommon = CartesianProductCommonArg<First>;\r\n\r\ntemplate <class... Ranges>\r\nconcept CartesianProductIsSized = (sized_range<Ranges> && ...);\r\n\r\ntemplate <bool IsConst, template <class> class FirstSent, class First, class... Rest>\r\nconcept CartesianIsSizedSentinel =\r\n    (sized_sentinel_for<FirstSent<maybe_const<IsConst, First>>, iterator_t<maybe_const<IsConst, First>>> && ...\r\n        && (sized_range<maybe_const<IsConst, Rest>>\r\n            && sized_sentinel_for<iterator_t<maybe_const<IsConst, Rest>>, iterator_t<maybe_const<IsConst, Rest>>>) );\r\n\r\ntemplate <class... Ranges>\r\nconcept CanViewCartesianProduct = requires(Ranges&&... rs) { views::cartesian_product(forward<Ranges>(rs)...); };\r\n\r\ntemplate <class T>\r\nconcept UnsignedIntegerLike = _Integer_like<T> && !_Signed_integer_like<T>;\r\n\r\ntemplate <class First, class... Rest>\r\nconstexpr bool is_iter_move_nothrow() {\r\n    constexpr bool is_inner_iter_move_nothrow = (noexcept(ranges::iter_move(declval<const iterator_t<First>&>())) && ...\r\n                                                 && noexcept(ranges::iter_move(declval<const iterator_t<Rest>&>())));\r\n    constexpr bool are_references_nothrow_movable =\r\n        conjunction_v<is_nothrow_move_constructible<ranges::range_rvalue_reference_t<First>>,\r\n            is_nothrow_move_constructible<ranges::range_rvalue_reference_t<Rest>>...>;\r\n    return is_inner_iter_move_nothrow && are_references_nothrow_movable;\r\n}\r\n\r\ntemplate <class First, class... Rest>\r\nconstexpr bool is_iter_swap_nothrow() {\r\n    return (noexcept(ranges::iter_swap(declval<const iterator_t<First>&>(), declval<const iterator_t<First>&>()))\r\n            && ... //\r\n            && noexcept(ranges::iter_swap(declval<const iterator_t<Rest>&>(), declval<const iterator_t<Rest>&>())));\r\n}\r\n\r\ntemplate <class Expected, ranges::input_range First, ranges::forward_range... Rest>\r\nconstexpr bool test_one(Expected&& expected_range, First&& first, Rest&&... rest) {\r\n    using ranges::cartesian_product_view, ranges::view, ranges::input_range, ranges::forward_range, ranges::range,\r\n        ranges::range_value_t, ranges::range_reference_t, ranges::range_rvalue_reference_t, ranges::range_difference_t,\r\n        ranges::sentinel_t, ranges::prev, ranges::const_iterator_t, ranges::const_sentinel_t;\r\n    using views::all_t;\r\n\r\n    using VFirst = all_t<First>;\r\n    using R      = cartesian_product_view<VFirst, all_t<Rest>...>;\r\n\r\n    constexpr bool is_view                = (view<remove_cvref_t<First>> && ... && view<remove_cvref_t<Rest>>);\r\n    constexpr bool all_copy_constructible = (copy_constructible<VFirst> && ... && copy_constructible<all_t<Rest>>);\r\n    constexpr bool is_bidirectional       = CartesianProductIsBidirectional<false, VFirst, all_t<Rest>...>;\r\n    constexpr bool is_const_bidirectional = CartesianProductIsBidirectional<true, VFirst, all_t<Rest>...>;\r\n    constexpr bool is_random_access       = CartesianProductIsRandomAccess<false, VFirst, all_t<Rest>...>;\r\n    constexpr bool is_const_random_access = CartesianProductIsRandomAccess<true, VFirst, all_t<Rest>...>;\r\n    constexpr bool is_sized               = CartesianProductIsSized<VFirst, all_t<Rest>...>;\r\n    constexpr bool is_const_sized         = CartesianProductIsSized<const VFirst, const all_t<Rest>...>;\r\n    constexpr bool is_common              = CartesianProductIsCommon<VFirst, all_t<Rest>...>;\r\n    constexpr bool is_const_common        = CartesianProductIsCommon<const VFirst, const all_t<Rest>...>;\r\n\r\n    static_assert(view<R>);\r\n    static_assert(input_range<R>);\r\n    static_assert(forward_range<R> == forward_range<First>);\r\n    static_assert(bidirectional_range<R> == is_bidirectional);\r\n    static_assert(random_access_range<R> == is_random_access);\r\n    static_assert(!ranges::contiguous_range<R>);\r\n    static_assert(sized_range<R> == is_sized);\r\n    static_assert(common_range<R> == is_common);\r\n\r\n    // Check non-default-initializability\r\n    static_assert(is_default_constructible_v<R>\r\n                  == (is_default_constructible_v<VFirst> && ... && is_default_constructible_v<all_t<Rest>>) );\r\n\r\n    // Check borrowed_range\r\n    static_assert(!ranges::borrowed_range<R>);\r\n\r\n    // Check range closure object\r\n    constexpr auto closure = views::cartesian_product;\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewCartesianProduct<First&, Rest&...>\r\n                  == (!is_view || (copy_constructible<VFirst> && ... && copy_constructible<all_t<Rest>>) ));\r\n    if constexpr (CanViewCartesianProduct<First&, Rest&...>) {\r\n        constexpr bool is_noexcept =\r\n            !is_view\r\n            || (is_nothrow_copy_constructible_v<VFirst> && ... && is_nothrow_copy_constructible_v<all_t<Rest>>);\r\n\r\n        static_assert(same_as<decltype(closure(first, rest...)), R>);\r\n        static_assert(noexcept(closure(first, rest...)) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewCartesianProduct<const remove_reference_t<First>&, const remove_reference_t<Rest>&...>\r\n                  == (!is_view || (copy_constructible<VFirst> && ... && copy_constructible<all_t<Rest>>) ));\r\n    if constexpr (CanViewCartesianProduct<const remove_reference_t<First>&, const remove_reference_t<Rest>&...>) {\r\n        using RC =\r\n            cartesian_product_view<all_t<const remove_reference_t<First>&>, all_t<const remove_reference_t<Rest>&>...>;\r\n        constexpr bool is_noexcept =\r\n            !is_view\r\n            || (is_nothrow_copy_constructible_v<VFirst> && ... && is_nothrow_copy_constructible_v<all_t<Rest>>);\r\n\r\n        static_assert(same_as<decltype(closure(as_const(first), as_const(rest)...)), RC>);\r\n        static_assert(noexcept(closure(as_const(first), as_const(rest)...)) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(CanViewCartesianProduct<remove_reference_t<First>, remove_reference_t<Rest>...>\r\n                  == (is_view || (movable<remove_reference_t<First>> && ... && movable<remove_reference_t<Rest>>) ));\r\n    if constexpr (CanViewCartesianProduct<remove_reference_t<First>, remove_reference_t<Rest>...>) {\r\n        using RS = cartesian_product_view<all_t<remove_reference_t<First>>, all_t<remove_reference_t<Rest>>...>;\r\n        constexpr bool is_noexcept =\r\n            (is_nothrow_move_constructible_v<VFirst> && ... && is_nothrow_move_constructible_v<all_t<Rest>>);\r\n\r\n        static_assert(same_as<decltype(closure(move(first), move(rest)...)), RS>);\r\n        static_assert(noexcept(closure(move(first), move(rest)...)) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewCartesianProduct<const remove_reference_t<First>, const remove_reference_t<Rest>...>\r\n                  == (is_view && (copy_constructible<VFirst> && ... && copy_constructible<all_t<Rest>>) ));\r\n    if constexpr (CanViewCartesianProduct<const remove_reference_t<First>, const remove_reference_t<Rest>...>) {\r\n        constexpr bool is_noexcept =\r\n            (is_nothrow_copy_constructible_v<VFirst> && ... && is_nothrow_copy_constructible_v<all_t<Rest>>);\r\n\r\n        static_assert(same_as<decltype(closure(move(as_const(first)), move(as_const(rest))...)), R>);\r\n        static_assert(noexcept(closure(move(as_const(first)), move(as_const(rest))...)) == is_noexcept);\r\n    }\r\n\r\n    // Check deduction guide\r\n    same_as<R> auto r = cartesian_product_view{forward<First>(first), forward<Rest>(rest)...};\r\n\r\n    // Check cartesian_product_view::size\r\n    static_assert(CanMemberSize<R> == is_sized);\r\n    if constexpr (CanMemberSize<R>) {\r\n        UnsignedIntegerLike auto s = r.size();\r\n        assert(s == ranges::size(expected_range));\r\n    }\r\n\r\n    // Check cartesian_product_view::size (const)\r\n    static_assert(CanMemberSize<const R> == is_const_sized);\r\n    if constexpr (CanMemberSize<const R>) {\r\n        UnsignedIntegerLike auto s = as_const(r).size();\r\n        assert(s == ranges::size(expected_range));\r\n    }\r\n\r\n    const bool is_empty = ranges::empty(expected_range);\r\n\r\n    // Check view_interface::empty and operator bool\r\n    static_assert(CanMemberEmpty<R> == (forward_range<VFirst> || is_sized));\r\n    static_assert(CanBool<R> == CanEmpty<R>);\r\n    if constexpr (CanMemberEmpty<R>) {\r\n        assert(r.empty() == is_empty);\r\n        assert(static_cast<bool>(r) == !is_empty);\r\n    }\r\n\r\n    // Check view_interface::empty and operator bool (const)\r\n    static_assert(CanMemberEmpty<const R> == (forward_range<const VFirst> || is_const_sized));\r\n    static_assert(CanBool<const R> == CanEmpty<const R>);\r\n    if constexpr (CanMemberEmpty<const R>) {\r\n        assert(as_const(r).empty() == is_empty);\r\n        assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n    }\r\n\r\n    assert(ranges::equal(r, expected_range));\r\n    if (!forward_range<VFirst>) { // intentionally not if constexpr\r\n        return true;\r\n    }\r\n\r\n    // Check cartesian_product_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    {\r\n        const same_as<iterator_t<R>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(*i == *begin(expected_range));\r\n        }\r\n\r\n        if constexpr (all_copy_constructible) {\r\n            auto r2                              = r;\r\n            const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check cartesian_product_view::begin (const)\r\n    static_assert(CanMemberBegin<const R> == (range<const VFirst> && ... && range<const all_t<Rest>>) );\r\n    if constexpr (CanMemberBegin<const R>) {\r\n        const same_as<iterator_t<const R>> auto ci = as_const(r).begin();\r\n        if (!is_empty) {\r\n            assert(*ci == *begin(expected_range));\r\n        }\r\n\r\n        if constexpr (all_copy_constructible) {\r\n            const auto r2                               = r;\r\n            const same_as<iterator_t<const R>> auto ci2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(*ci2 == *ci);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check cartesian_product_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    {\r\n        const same_as<sentinel_t<R>> auto s = r.end();\r\n        assert((r.begin() == s) == is_empty);\r\n        static_assert(common_range<R> == is_common);\r\n\r\n        if constexpr (same_as<sentinel_t<R>, default_sentinel_t>) {\r\n            static_assert(!is_common);\r\n            static_assert(noexcept(r.end()));\r\n        } else if constexpr (common_range<R> && is_bidirectional) {\r\n            if (!is_empty) {\r\n                assert(*prev(s) == *prev(end(expected_range)));\r\n            }\r\n\r\n            if constexpr (all_copy_constructible) {\r\n                auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*prev(r2.end()) == *prev(end(expected_range)));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check cartesian_product_view::end (const)\r\n    static_assert(CanMemberEnd<const R>);\r\n    if constexpr (CanMemberEnd<const R>) {\r\n        const same_as<sentinel_t<const R>> auto cs = as_const(r).end();\r\n        assert((r.begin() == cs) == is_empty);\r\n        static_assert(common_range<const R> == is_const_common);\r\n\r\n        if constexpr (same_as<sentinel_t<const R>, default_sentinel_t>) {\r\n            static_assert(!is_const_common);\r\n            static_assert(noexcept(as_const(r).end()));\r\n        } else if constexpr (common_range<const R> && is_const_bidirectional) {\r\n            if (!is_empty) {\r\n                assert(*prev(cs) == *prev(end(expected_range)));\r\n            }\r\n\r\n            if constexpr (all_copy_constructible) {\r\n                const auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*prev(r2.end()) == *prev(end(expected_range)));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check view_interface::cbegin\r\n    static_assert(CanMemberCBegin<R>);\r\n    static_assert(CanMemberCBegin<const R&> == (range<const VFirst> && ... && range<const all_t<Rest>>) );\r\n    {\r\n        const same_as<const_iterator_t<R>> auto i = r.cbegin();\r\n        if (!is_empty) {\r\n            assert(*i == *cbegin(expected_range));\r\n        }\r\n\r\n        if constexpr (all_copy_constructible) {\r\n            auto r2                                    = r;\r\n            const same_as<const_iterator_t<R>> auto i2 = r2.cbegin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n\r\n        if constexpr (CanCBegin<const R&>) {\r\n            const same_as<const_iterator_t<const R>> auto i3 = as_const(r).cbegin();\r\n            if (!is_empty) {\r\n                assert(*i3 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Check view_interface::cend\r\n    static_assert(CanMemberCEnd<R>);\r\n    static_assert(CanMemberCEnd<const R&>);\r\n    if (!is_empty) {\r\n        same_as<const_sentinel_t<R>> auto i = r.cend();\r\n        if constexpr (common_range<R> && is_bidirectional) {\r\n            assert(*prev(i) == *prev(cend(expected_range)));\r\n        }\r\n\r\n        if constexpr (CanCEnd<const R&>) {\r\n            same_as<const_sentinel_t<const R>> auto i2 = as_const(r).cend();\r\n            if constexpr (common_range<const R&> && is_const_bidirectional) {\r\n                assert(*prev(i2) == *prev(cend(expected_range)));\r\n            }\r\n        }\r\n    }\r\n\r\n    if (is_empty) {\r\n        return true;\r\n    }\r\n\r\n    // Check view_interface::data\r\n    static_assert(!CanData<R>);\r\n    static_assert(!CanData<const R>);\r\n\r\n    // Check view_interface::operator[]\r\n    static_assert(CanIndex<R> == is_random_access);\r\n    if constexpr (CanIndex<R>) {\r\n        assert(r[0] == expected_range[0]);\r\n    }\r\n\r\n    // Check view_interface::operator[] (const)\r\n    static_assert(CanIndex<const R> == is_const_random_access);\r\n    if constexpr (CanIndex<const R>) {\r\n        assert(as_const(r)[0] == expected_range[0]);\r\n    }\r\n\r\n    // Check view_interface::front\r\n    static_assert(CanMemberFront<R> == forward_range<VFirst>);\r\n    if constexpr (CanMemberFront<R>) {\r\n        assert(r.front() == *begin(expected_range));\r\n    }\r\n\r\n    // Check view_interface::front (const)\r\n    static_assert(CanMemberFront<const R> == forward_range<const VFirst>);\r\n    if constexpr (CanMemberFront<const R>) {\r\n        assert(as_const(r).front() == *begin(expected_range));\r\n    }\r\n\r\n    // Check view_interface::back\r\n    static_assert(CanMemberBack<R> == (is_bidirectional && is_common));\r\n    if constexpr (CanMemberBack<R>) {\r\n        assert(r.back() == *prev(end(expected_range)));\r\n    }\r\n\r\n    // Check view_interface::back (const)\r\n    static_assert(CanMemberBack<const R> == (is_const_bidirectional && is_const_common));\r\n    if constexpr (CanMemberBack<const R>) {\r\n        assert(as_const(r).back() == *prev(end(expected_range)));\r\n    }\r\n\r\n    { // Check cartesian_product_view::iterator<not const>\r\n        using I = iterator_t<R>;\r\n        static_assert(input_iterator<I>);\r\n\r\n        // Check iterator_category\r\n        static_assert(same_as<typename I::iterator_category, input_iterator_tag>);\r\n\r\n        // Check iterator_concept\r\n        using IterConcept = I::iterator_concept;\r\n        static_assert(is_random_access == same_as<IterConcept, random_access_iterator_tag>);\r\n        static_assert((is_bidirectional && !is_random_access) == same_as<IterConcept, bidirectional_iterator_tag>);\r\n        static_assert((forward_range<VFirst> && !is_bidirectional) == same_as<IterConcept, forward_iterator_tag>);\r\n\r\n        // Check value_type\r\n        static_assert(same_as<typename I::value_type, tuple<range_value_t<First>, range_value_t<Rest>...>>);\r\n\r\n        // Check default-initializability\r\n        static_assert(default_initializable<I> == default_initializable<iterator_t<VFirst>>);\r\n\r\n        auto i = r.begin();\r\n\r\n        { // Check dereference\r\n            same_as<tuple<range_reference_t<First>, range_reference_t<Rest>...>> decltype(auto) v = *as_const(i);\r\n            assert(v == expected_range[0]);\r\n        }\r\n\r\n        { // Check pre-incrementation\r\n            same_as<I&> decltype(auto) i2 = ++i;\r\n            assert(&i2 == &i);\r\n            if (i != r.end()) {\r\n                assert(*i == expected_range[1]);\r\n            }\r\n            i = r.begin();\r\n        }\r\n\r\n        if constexpr (forward_range<VFirst>) { // Check post-incrementation\r\n            same_as<I> decltype(auto) i2 = i++;\r\n            assert(*i2 == expected_range[0]);\r\n            if (i != r.end()) {\r\n                assert(*i == expected_range[1]);\r\n            }\r\n            i = r.begin();\r\n        } else {\r\n            static_assert(is_void_v<decltype(i++)>);\r\n        }\r\n\r\n        if constexpr (is_bidirectional) {\r\n            { // Check pre-decrementation\r\n                i = ranges::next(r.begin());\r\n\r\n                same_as<I&> decltype(auto) i2 = --i;\r\n                assert(&i2 == &i);\r\n                assert(*i2 == expected_range[0]);\r\n            }\r\n\r\n            { // Check post-decrementation\r\n                i = ranges::next(r.begin());\r\n\r\n                same_as<I> decltype(auto) i2 = i--;\r\n                if (i2 != r.end()) {\r\n                    assert(*i2 == expected_range[1]);\r\n                }\r\n                assert(*i == expected_range[0]);\r\n            }\r\n        }\r\n\r\n        if constexpr (is_random_access) {\r\n            const auto half_max_distance = ranges::distance(r) / 2;\r\n\r\n            { // Check advancement operators\r\n                same_as<I&> decltype(auto) i2 = (i += half_max_distance);\r\n                assert(&i2 == &i);\r\n                if (i != r.end()) {\r\n                    assert(*i == expected_range[static_cast<size_t>(half_max_distance)]);\r\n                }\r\n\r\n                same_as<I&> decltype(auto) i3 = (i -= half_max_distance);\r\n                assert(&i3 == &i);\r\n                assert(*i == expected_range[0]);\r\n            }\r\n\r\n            { // Check subscript operator\r\n                same_as<tuple<range_reference_t<First>, range_reference_t<Rest>...>> decltype(auto) v = i[0];\r\n                assert(v == expected_range[0]);\r\n            }\r\n\r\n            if constexpr (equality_comparable<iterator_t<VFirst>>) { // Check equality comparisons\r\n                auto i2               = r.begin();\r\n                same_as<bool> auto b1 = i == i2;\r\n                assert(b1);\r\n                ++i2;\r\n                same_as<bool> auto b2 = i != i2;\r\n                assert(b2);\r\n                same_as<bool> auto b3 = i2 != default_sentinel;\r\n                assert(b3);\r\n                ranges::advance(i2, r.end());\r\n                same_as<bool> auto b4 = i2 == default_sentinel;\r\n                assert(b4);\r\n            }\r\n\r\n            if constexpr ((random_access_range<VFirst> && ...\r\n                              && random_access_range<all_t<Rest>>) ) { // Check 3way comparisons\r\n                using Cat              = common_comparison_category_t<compare_three_way_result_t<iterator_t<VFirst>>,\r\n                                 compare_three_way_result_t<iterator_t<all_t<Rest>>>...>;\r\n                auto i2                = r.begin();\r\n                same_as<Cat> auto cmp1 = i <=> i2;\r\n                assert(cmp1 == Cat::equivalent);\r\n                ++i2;\r\n                assert((i <=> i2) == Cat::less);\r\n                assert((i2 <=> i) == Cat::greater);\r\n\r\n                same_as<bool> auto b1 = i < i2;\r\n                assert(b1);\r\n                same_as<bool> auto b2 = i2 > i;\r\n                assert(b2);\r\n                same_as<bool> auto b3 = i <= i2;\r\n                assert(b3);\r\n                same_as<bool> auto b4 = i2 >= i;\r\n                assert(b4);\r\n            }\r\n\r\n            { // Check operator+\r\n                same_as<I> auto i2 = i + half_max_distance;\r\n                if (i2 != r.end()) {\r\n                    assert(*i2 == expected_range[static_cast<size_t>(half_max_distance)]);\r\n                }\r\n\r\n                same_as<I> auto i3 = half_max_distance + i;\r\n                if (i3 != r.end()) {\r\n                    assert(*i3 == expected_range[static_cast<size_t>(half_max_distance)]);\r\n                }\r\n            }\r\n\r\n            { // Check operator-(Iter, Diff)\r\n                same_as<I> auto i2 = (i + half_max_distance) - half_max_distance;\r\n                assert(*i2 == expected_range[0]);\r\n            }\r\n        }\r\n\r\n        if constexpr (CartesianIsSizedSentinel<false, iterator_t, VFirst, all_t<Rest>...>) { // Check differencing\r\n            _Signed_integer_like auto diff = i - i;\r\n            assert(diff == 0);\r\n            assert(i - ranges::next(i) == -1);\r\n            assert(ranges::next(i) - i == 1);\r\n        }\r\n\r\n        static_assert(sized_sentinel_for<default_sentinel_t, I>\r\n                      == CartesianIsSizedSentinel<false, sentinel_t, VFirst, all_t<Rest>...>);\r\n        if constexpr (sized_sentinel_for<default_sentinel_t, I>) { // Check differencing with default_sentinel\r\n            const auto expected_size              = ranges::ssize(expected_range);\r\n            const _Signed_integer_like auto diff1 = i - default_sentinel;\r\n            assert(diff1 == -expected_size);\r\n            const _Signed_integer_like auto diff2 = default_sentinel - i;\r\n            assert(diff2 == expected_size);\r\n        }\r\n\r\n        { // Check iter_move (hidden friend available via ADL)\r\n            same_as<tuple<range_rvalue_reference_t<VFirst>, range_rvalue_reference_t<all_t<Rest>>...>> decltype(auto)\r\n                rval = iter_move(as_const(i));\r\n            assert(rval == expected_range[0]);\r\n            static_assert(noexcept(iter_move(i)) == is_iter_move_nothrow<VFirst, all_t<Rest>...>());\r\n        }\r\n\r\n        if constexpr ((indirectly_swappable<iterator_t<VFirst>> && ...\r\n                          && indirectly_swappable<iterator_t<all_t<Rest>>>) ) {\r\n            // Check iter_swap, other tests are defined in test_iter_swap function\r\n            static_assert(is_void_v<decltype(iter_swap(as_const(i), as_const(i)))>);\r\n            static_assert(noexcept(iter_swap(i, i)) == is_iter_swap_nothrow<VFirst, all_t<Rest>...>());\r\n        }\r\n    }\r\n\r\n    // Check cartesian_product_view::iterator<const>\r\n    if constexpr (CanMemberBegin<const R>) {\r\n        using CI = iterator_t<const R>;\r\n        static_assert(input_iterator<CI>);\r\n\r\n        // Check iterator_category\r\n        static_assert(same_as<typename CI::iterator_category, input_iterator_tag>);\r\n\r\n        // Check iterator_concept\r\n        using IterConcept = CI::iterator_concept;\r\n        static_assert(is_const_random_access == same_as<IterConcept, random_access_iterator_tag>);\r\n        static_assert(\r\n            (is_const_bidirectional && !is_const_random_access) == same_as<IterConcept, bidirectional_iterator_tag>);\r\n        static_assert(\r\n            (forward_range<const VFirst> && !is_const_bidirectional) == same_as<IterConcept, forward_iterator_tag>);\r\n\r\n        // Check value_type\r\n        static_assert(\r\n            same_as<typename CI::value_type, tuple<range_value_t<const First>, range_value_t<const Rest>...>>);\r\n\r\n        // Check default-initializability\r\n        static_assert(default_initializable<CI> == default_initializable<iterator_t<const VFirst>>);\r\n\r\n        // Check conversion from non-const iterator\r\n        if constexpr ((convertible_to<iterator_t<VFirst>, iterator_t<const VFirst>> && ...\r\n                          && convertible_to<iterator_t<Rest>, iterator_t<const Rest>>) ) {\r\n            auto i = r.begin();\r\n            [[maybe_unused]] CI ci{move(i)};\r\n        }\r\n\r\n        auto i = r.begin();\r\n        CI ci  = as_const(r).begin();\r\n\r\n        { // Check dereference\r\n            same_as<tuple<range_reference_t<const First>, range_reference_t<const Rest>...>> decltype(auto) v =\r\n                *as_const(ci);\r\n            assert(v == expected_range[0]);\r\n        }\r\n\r\n        { // Check pre-incrementation\r\n            same_as<CI&> decltype(auto) ci2 = ++ci;\r\n            assert(&ci2 == &ci);\r\n            if (ci != as_const(r).end()) {\r\n                assert(*ci == expected_range[1]);\r\n            }\r\n            ci = as_const(r).begin();\r\n        }\r\n\r\n        if constexpr (forward_range<const VFirst>) { // Check post-incrementation\r\n            same_as<CI> decltype(auto) ci2 = ci++;\r\n            assert(*ci2 == expected_range[0]);\r\n            if (ci != as_const(r).end()) {\r\n                assert(*ci == expected_range[1]);\r\n            }\r\n            ci = as_const(r).begin();\r\n        } else {\r\n            static_assert(is_void_v<decltype(ci++)>);\r\n        }\r\n\r\n        if constexpr (is_const_bidirectional) {\r\n            { // Check pre-decrementation\r\n                ci = ranges::next(r.begin());\r\n\r\n                same_as<CI&> decltype(auto) ci2 = --ci;\r\n                assert(&ci2 == &ci);\r\n                assert(*ci2 == expected_range[0]);\r\n            }\r\n\r\n            { // Check post-decrementation\r\n                ci = ranges::next(r.begin());\r\n\r\n                same_as<CI> decltype(auto) ci2 = ci--;\r\n                if (ci2 != r.end()) {\r\n                    assert(*ci2 == expected_range[1]);\r\n                }\r\n                assert(*ci == expected_range[0]);\r\n            }\r\n        }\r\n\r\n        if constexpr (is_const_random_access) {\r\n            const auto half_max_distance = ranges::distance(r) / 2;\r\n\r\n            { // Check advancement operators\r\n                same_as<CI&> decltype(auto) ci2 = (ci += half_max_distance);\r\n                assert(&ci2 == &ci);\r\n                if (ci != r.end()) {\r\n                    assert(*ci == expected_range[static_cast<size_t>(half_max_distance)]);\r\n                }\r\n\r\n                same_as<CI&> decltype(auto) ci3 = (ci -= half_max_distance);\r\n                assert(&ci3 == &ci);\r\n                assert(*ci == expected_range[0]);\r\n            }\r\n\r\n            { // Check subscript operator\r\n                same_as<tuple<range_reference_t<const First>, range_reference_t<const Rest>...>> decltype(auto) v =\r\n                    ci[0];\r\n                assert(v == expected_range[0]);\r\n            }\r\n\r\n            if constexpr (equality_comparable<iterator_t<const VFirst>>) { // Check equality comparisons\r\n                CI ci2                = as_const(r).begin();\r\n                same_as<bool> auto b1 = ci == ci2;\r\n                assert(b1);\r\n                ++ci2;\r\n                same_as<bool> auto b2 = ci != ci2;\r\n                assert(b2);\r\n                same_as<bool> auto b3 = ci2 != default_sentinel;\r\n                assert(b3);\r\n                ranges::advance(ci2, r.end());\r\n                same_as<bool> auto b4 = ci2 == default_sentinel;\r\n                assert(b4);\r\n            }\r\n\r\n            if constexpr (equality_comparable_with<iterator_t<const VFirst>,\r\n                              iterator_t<VFirst>>) { // Check equality comparisons (mixed)\r\n                CI ci2                = as_const(r).begin();\r\n                same_as<bool> auto b1 = i == ci2;\r\n                assert(b1);\r\n                ++ci2;\r\n                same_as<bool> auto b2 = i != ci2;\r\n                assert(b2);\r\n            }\r\n\r\n            if constexpr ((random_access_range<const VFirst> && ...\r\n                              && random_access_range<const all_t<Rest>>) ) { // Check 3way comparisons\r\n                using Cat = common_comparison_category_t<compare_three_way_result_t<iterator_t<const VFirst>>,\r\n                    compare_three_way_result_t<iterator_t<const all_t<Rest>>>...>;\r\n                CI ci2    = as_const(r).begin();\r\n                same_as<Cat> auto cmp1 = ci <=> ci2;\r\n                assert(cmp1 == Cat::equivalent);\r\n                ++ci2;\r\n                assert((ci <=> ci2) == Cat::less);\r\n                assert((ci2 <=> ci) == Cat::greater);\r\n\r\n                same_as<bool> auto b1 = ci < ci2;\r\n                assert(b1);\r\n                same_as<bool> auto b2 = ci2 > ci;\r\n                assert(b2);\r\n                same_as<bool> auto b3 = ci <= ci2;\r\n                assert(b3);\r\n                same_as<bool> auto b4 = ci2 >= ci;\r\n                assert(b4);\r\n            }\r\n\r\n            if constexpr ((random_access_range<const VFirst> && ...\r\n                              && random_access_range<const all_t<Rest>>) ) { // Check 3way comparisons (mixed)\r\n                using Cat = common_comparison_category_t<compare_three_way_result_t<iterator_t<const VFirst>>,\r\n                    compare_three_way_result_t<iterator_t<const all_t<Rest>>>...>;\r\n                CI ci2    = as_const(r).begin();\r\n                same_as<Cat> auto cmp1 = i <=> ci2;\r\n                assert(cmp1 == Cat::equivalent);\r\n                ++ci2;\r\n                assert((i <=> ci2) == Cat::less);\r\n                assert((ci2 <=> i) == Cat::greater);\r\n\r\n                same_as<bool> auto b1 = i < ci2;\r\n                assert(b1);\r\n                same_as<bool> auto b2 = ci2 > i;\r\n                assert(b2);\r\n                same_as<bool> auto b3 = i <= ci2;\r\n                assert(b3);\r\n                same_as<bool> auto b4 = ci2 >= i;\r\n                assert(b4);\r\n            }\r\n\r\n            { // Check operator+\r\n                same_as<CI> auto ci2 = ci + 1;\r\n                if (ci2 != r.end()) {\r\n                    assert(*ci2 == expected_range[1]);\r\n                }\r\n\r\n                same_as<CI> auto ci3 = 1 + ci;\r\n                if (ci3 != r.end()) {\r\n                    assert(*ci3 == expected_range[1]);\r\n                }\r\n            }\r\n\r\n            { // Check operator-(Iter, Diff)\r\n                same_as<CI> auto ci2 = ranges::next(ci) - 1;\r\n                assert(*ci2 == expected_range[0]);\r\n            }\r\n        }\r\n\r\n        if constexpr (CartesianIsSizedSentinel<false, iterator_t, const VFirst,\r\n                          const all_t<Rest>...>) { // Check differencing\r\n            _Signed_integer_like auto diff = ci - ci;\r\n            assert(diff == 0);\r\n            assert(ci - ranges::next(ci) == -1);\r\n            assert(ranges::next(ci) - ci == 1);\r\n        }\r\n\r\n        static_assert(sized_sentinel_for<default_sentinel_t, CI>\r\n                      == CartesianIsSizedSentinel<false, sentinel_t, const VFirst, const all_t<Rest>...>);\r\n        if constexpr (sized_sentinel_for<default_sentinel_t, CI>) { // Check differencing with default_sentinel\r\n            const auto expected_size              = ranges::ssize(expected_range);\r\n            const _Signed_integer_like auto diff1 = ci - default_sentinel;\r\n            assert(diff1 == -expected_size);\r\n            const _Signed_integer_like auto diff2 = default_sentinel - ci;\r\n            assert(diff2 == expected_size);\r\n        }\r\n\r\n        { // Check iter_move\r\n            same_as<tuple<range_rvalue_reference_t<const VFirst>,\r\n                range_rvalue_reference_t<const all_t<Rest>>...>> decltype(auto) rval = iter_move(as_const(ci));\r\n            assert(rval == expected_range[0]);\r\n            static_assert(noexcept(iter_move(ci)) == is_iter_move_nothrow<const VFirst, const all_t<Rest>...>());\r\n        }\r\n\r\n        if constexpr ((indirectly_swappable<iterator_t<const VFirst>> && ...\r\n                          && indirectly_swappable<iterator_t<const all_t<Rest>>>) ) {\r\n            // Check iter_swap, other tests are defined in test_iter_swap function\r\n            static_assert(is_void_v<decltype(iter_swap(as_const(ci), as_const(ci)))>);\r\n            static_assert(noexcept(iter_swap(ci, ci)) == is_iter_swap_nothrow<const VFirst, const all_t<Rest>...>());\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n// Check calling views::cartesian_product without arguments\r\nstatic_assert(same_as<decltype(views::cartesian_product()), decltype(views::single(tuple{}))>);\r\n\r\ntemplate <ranges::input_range... Rngs>\r\n    requires (indirectly_swappable<iterator_t<Rngs>> && ...)\r\nconstexpr void test_iter_swap(Rngs&... rngs) {\r\n    // This test assumes that 'ranges::size(rng)' is at least 2 for each rng in rngs\r\n    auto r    = views::cartesian_product(rngs...);\r\n    using R   = decltype(r);\r\n    using Val = ranges::range_value_t<R>;\r\n\r\n    { // Check iter_swap for cartesian_product_view::iterator<not const>\r\n        auto i     = r.begin();\r\n        Val first  = *i;\r\n        auto j     = ranges::next(i);\r\n        Val second = *j;\r\n\r\n        iter_swap(i, j);\r\n        assert(*i == second);\r\n        assert(*j == first);\r\n\r\n        ranges::iter_swap(i, j);\r\n        assert(*i == first);\r\n        assert(*j == second);\r\n\r\n        static_assert(noexcept(iter_swap(i, j)) == is_iter_swap_nothrow<Rngs&...>());\r\n    }\r\n\r\n    // Check iter_swap for cartesian_product_view::iterator<const>\r\n    if constexpr (((CanMemberBegin<const Rngs&> && indirectly_swappable<iterator_t<const Rngs&>>) && ...)) {\r\n        using CVal  = ranges::range_value_t<const R>;\r\n        auto i      = as_const(r).begin();\r\n        CVal first  = *i;\r\n        auto j      = ranges::next(i);\r\n        CVal second = *j;\r\n\r\n        iter_swap(i, j);\r\n        assert(*i == second);\r\n        assert(*j == first);\r\n\r\n        ranges::iter_swap(i, j);\r\n        assert(*i == first);\r\n        assert(*j == second);\r\n\r\n        static_assert(noexcept(iter_swap(i, j)) == is_iter_swap_nothrow<const Rngs&...>());\r\n    }\r\n}\r\n\r\nconstexpr tuple some_ranges = {\r\n    array{0, 1, 2, 3, 4},\r\n    array{11, 22, 33},\r\n    array{'7'},\r\n    array{\"4\"sv, \"2\"sv, \"0\"sv},\r\n};\r\n\r\n// Expected result of views::cartesian_product(get<0>(some_ranges))\r\nconstexpr array<tuple<int>, 5> expected_result_0{{{0}, {1}, {2}, {3}, {4}}};\r\n\r\n// Expected result of views::cartesian_product(get<0>(some_ranges), get<1>(some_ranges))\r\nconstexpr array<tuple<int, int>, 15> expected_result_1{{{0, 11}, {0, 22}, {0, 33}, {1, 11}, {1, 22}, {1, 33}, {2, 11},\r\n    {2, 22}, {2, 33}, {3, 11}, {3, 22}, {3, 33}, {4, 11}, {4, 22}, {4, 33}}};\r\n\r\n// Expected result of views::cartesian_product(get<0>(some_ranges), ..., get<2>(some_ranges))\r\nconstexpr array<tuple<int, int, char>, 15> expected_result_2{\r\n    {{0, 11, '7'}, {0, 22, '7'}, {0, 33, '7'}, {1, 11, '7'}, {1, 22, '7'}, {1, 33, '7'}, {2, 11, '7'}, {2, 22, '7'},\r\n        {2, 33, '7'}, {3, 11, '7'}, {3, 22, '7'}, {3, 33, '7'}, {4, 11, '7'}, {4, 22, '7'}, {4, 33, '7'}}};\r\n\r\n// Expected result of views::cartesian_product(get<0>(some_ranges), ..., get<3>(some_ranges))\r\nconstexpr array<tuple<int, int, char, string_view>, 45> expected_result_3{\r\n    {{0, 11, '7', \"4\"sv}, {0, 11, '7', \"2\"sv}, {0, 11, '7', \"0\"sv}, {0, 22, '7', \"4\"sv}, {0, 22, '7', \"2\"sv},\r\n        {0, 22, '7', \"0\"sv}, {0, 33, '7', \"4\"sv}, {0, 33, '7', \"2\"sv}, {0, 33, '7', \"0\"sv}, {1, 11, '7', \"4\"sv},\r\n        {1, 11, '7', \"2\"sv}, {1, 11, '7', \"0\"sv}, {1, 22, '7', \"4\"sv}, {1, 22, '7', \"2\"sv}, {1, 22, '7', \"0\"sv},\r\n        {1, 33, '7', \"4\"sv}, {1, 33, '7', \"2\"sv}, {1, 33, '7', \"0\"sv}, {2, 11, '7', \"4\"sv}, {2, 11, '7', \"2\"sv},\r\n        {2, 11, '7', \"0\"sv}, {2, 22, '7', \"4\"sv}, {2, 22, '7', \"2\"sv}, {2, 22, '7', \"0\"sv}, {2, 33, '7', \"4\"sv},\r\n        {2, 33, '7', \"2\"sv}, {2, 33, '7', \"0\"sv}, {3, 11, '7', \"4\"sv}, {3, 11, '7', \"2\"sv}, {3, 11, '7', \"0\"sv},\r\n        {3, 22, '7', \"4\"sv}, {3, 22, '7', \"2\"sv}, {3, 22, '7', \"0\"sv}, {3, 33, '7', \"4\"sv}, {3, 33, '7', \"2\"sv},\r\n        {3, 33, '7', \"0\"sv}, {4, 11, '7', \"4\"sv}, {4, 11, '7', \"2\"sv}, {4, 11, '7', \"0\"sv}, {4, 22, '7', \"4\"sv},\r\n        {4, 22, '7', \"2\"sv}, {4, 22, '7', \"0\"sv}, {4, 33, '7', \"4\"sv}, {4, 33, '7', \"2\"sv}, {4, 33, '7', \"0\"sv}}};\r\n\r\ntemplate <test::CanDifference Difference>\r\nstruct test_input_range {\r\n    template <class ValTy>\r\n    using type = test::range<input_iterator_tag, ValTy, test::Sized::yes, Difference, test::Common::yes,\r\n        test::CanCompare::yes, test::ProxyRef::no>;\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, test::Sized IsSized>\r\nstruct test_range {\r\n    template <class ValTy>\r\n    using type =\r\n        test::range<Category, ValTy, IsSized, test::CanDifference{derived_from<Category, random_access_iterator_tag>},\r\n            IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n            test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n};\r\n\r\nstruct instantiator {\r\n    template <class R>\r\n    static constexpr void call() {\r\n        typename R::template type<const int> r0{get<0>(some_ranges)};\r\n#ifndef __EDG__ // TRANSITION, VSO-1900293\r\n        test_one(expected_result_0, r0);\r\n#endif // ^^^ no workaround ^^^\r\n\r\n        if constexpr (ranges::forward_range<typename R::template type<const int>>) {\r\n            typename R::template type<const int> r1{get<1>(some_ranges)};\r\n            test_one(expected_result_1, r0, r1);\r\n\r\n#if !(defined(__clang__) && defined(_DEBUG) && !defined(_DLL)) // constexpr limit\r\n            typename R::template type<const char> r2{get<2>(some_ranges)};\r\n            test_one(expected_result_2, r0, r1, r2);\r\n#endif // \"Clang /MTd\" configuration\r\n\r\n            int swap_a1[] = {1, 2, 3};\r\n            typename R::template type<int> swap_r1{swap_a1};\r\n            int swap_a2[] = {9, 8, 7};\r\n            typename R::template type<int> swap_r2{swap_a2};\r\n            test_iter_swap(swap_r1, swap_r2);\r\n        }\r\n    }\r\n};\r\n\r\nconstexpr void instantiation_test() {\r\n    // The cartesian_product_view is sensitive to category, commonality, and size, but oblivious to\r\n    // differencing and proxyness.\r\n    using test::Common, test::Sized, test::CanDifference;\r\n\r\n    // When the base range is an input range, the view is sensitive to differencing\r\n    instantiator::call<test_input_range<CanDifference::yes>>();\r\n    instantiator::call<test_input_range<CanDifference::no>>();\r\n\r\n    instantiator::call<test_range<input_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes, Sized::no>>();\r\n}\r\n\r\ntemplate <class ValTy, class Category, test::Common IsCommon, test::Sized IsSized,\r\n    bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const ValTy, IsSized, test::CanDifference{is_random}, IsCommon,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\n// GH-3733: cartesian_product_view would incorrectly reject a call to size() claiming that big*big*big*0 is not\r\n// representable as range_size_t because big*big*big is not.\r\nconstexpr void test_gh_3733() {\r\n    const auto r1   = views::repeat(0, (numeric_limits<ptrdiff_t>::max)());\r\n    const auto r2   = views::repeat(1, 0);\r\n    const auto cart = views::cartesian_product(r1, r1, r1, r2);\r\n    assert(cart.size() == 0);\r\n    assert(as_const(cart).size() == 0);\r\n}\r\n\r\n// GH-4425 <ranges>: views::cartesian_product and views::filter emit\r\n// spurious warning C4324 'structure was padded due to alignment specifier'\r\nconstexpr void test_gh_4425() {\r\n    const vector<int> vec{11, 22, 33, 44};\r\n\r\n    const auto strictly_ascending = [](const auto& t) { return get<0>(t) < get<1>(t); };\r\n\r\n    const auto result = ranges::to<vector>(views::cartesian_product(vec, vec) | views::filter(strictly_ascending));\r\n\r\n    const vector<tuple<int, int>> correct{{11, 22}, {11, 33}, {11, 44}, {22, 33}, {22, 44}, {33, 44}};\r\n\r\n    assert(result == correct);\r\n}\r\n\r\nint main() {\r\n    // Check views\r\n#ifndef __EDG__ // TRANSITION, VSO-1900293\r\n    { // ... copyable\r\n        constexpr span<const int> s{get<0>(some_ranges)};\r\n        static_assert(test_one(expected_result_0, s));\r\n        test_one(expected_result_0, s);\r\n    }\r\n\r\n    { // ... modifiable elements (so iterators are indirectly swappable)\r\n        auto arr = get<0>(some_ranges);\r\n        span<int> s{arr};\r\n        test_one(expected_result_0, s);\r\n    }\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    { // ... move-only\r\n        using test::Common, test::Sized;\r\n        test_one(expected_result_3, //\r\n            move_only_view<int, input_iterator_tag, Common::no, Sized::yes>{get<0>(some_ranges)},\r\n            move_only_view<int, forward_iterator_tag, Common::no, Sized::yes>{get<1>(some_ranges)},\r\n            move_only_view<char, bidirectional_iterator_tag, Common::no, Sized::yes>{get<2>(some_ranges)},\r\n            move_only_view<string_view, random_access_iterator_tag, Common::no, Sized::yes>{get<3>(some_ranges)});\r\n        test_one(expected_result_3, //\r\n            move_only_view<int, input_iterator_tag, Common::no, Sized::no>{get<0>(some_ranges)},\r\n            move_only_view<int, forward_iterator_tag, Common::no, Sized::no>{get<1>(some_ranges)},\r\n            move_only_view<char, bidirectional_iterator_tag, Common::no, Sized::no>{get<2>(some_ranges)},\r\n            move_only_view<string_view, random_access_iterator_tag, Common::no, Sized::no>{get<3>(some_ranges)});\r\n        test_one(expected_result_2, //\r\n            move_only_view<int, forward_iterator_tag, Common::yes, Sized::yes>{get<0>(some_ranges)},\r\n            move_only_view<int, bidirectional_iterator_tag, Common::yes, Sized::yes>{get<1>(some_ranges)},\r\n            move_only_view<char, random_access_iterator_tag, Common::yes, Sized::yes>{get<2>(some_ranges)});\r\n        test_one(expected_result_2, //\r\n            move_only_view<int, forward_iterator_tag, Common::yes, Sized::no>{get<0>(some_ranges)},\r\n            move_only_view<int, bidirectional_iterator_tag, Common::yes, Sized::no>{get<1>(some_ranges)},\r\n            move_only_view<char, random_access_iterator_tag, Common::yes, Sized::no>{get<2>(some_ranges)});\r\n    }\r\n\r\n    // Check non-views\r\n    {\r\n        constexpr auto& r0 = get<0>(some_ranges);\r\n#ifndef __EDG__ // TRANSITION, VSO-1900293\r\n        static_assert(test_one(expected_result_0, r0));\r\n        test_one(expected_result_0, r0);\r\n#endif // ^^^ no workaround ^^^\r\n\r\n        auto r1 = get<1>(some_ranges) | ranges::to<vector>();\r\n        test_one(expected_result_1, r0, r1);\r\n\r\n        auto r2 = get<2>(some_ranges) | ranges::to<forward_list>();\r\n        test_one(expected_result_2, r0, r1, r2);\r\n\r\n        auto r3 = get<3>(some_ranges) | ranges::to<list>();\r\n        test_one(expected_result_3, r0, r1, r2, r3);\r\n    }\r\n\r\n#ifndef _PREFAST_ // TRANSITION, GH-1030\r\n    static_assert((instantiation_test(), true));\r\n#endif // TRANSITION, GH-1030\r\n    instantiation_test();\r\n\r\n    static_assert((test_gh_3733(), true));\r\n    test_gh_3733();\r\n\r\n    static_assert((test_gh_4425(), true));\r\n    test_gh_4425();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2374R4_views_cartesian_product_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2374R4_views_cartesian_product_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <limits>\r\n#include <ranges>\r\n#include <span>\r\n#include <utility>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\nconstexpr auto much_ints    = views::iota(0ull, (numeric_limits<unsigned long long>::max)());\r\nconstexpr array little_ints = {1, 2, 3, 4};\r\nvoid test_view_size() {\r\n    auto v = views::cartesian_product(much_ints, much_ints, much_ints);\r\n    // Size of cartesian product cannot be represented by _Size_type<false> (N4928 [range.cartesian.view]/10).\r\n    (void) v.size();\r\n}\r\n\r\nvoid test_view_const_size() {\r\n    auto v = views::cartesian_product(much_ints, much_ints, much_ints);\r\n    // Size of cartesian product cannot be represented by _Size_type<true> (N4928 [range.cartesian.view]/10).\r\n    (void) as_const(v).size();\r\n}\r\n\r\nvoid test_iterator_advance_past_end_with_small_offset() {\r\n    // This preconditions check works only when all ranges model ranges::sized_range\r\n    auto v = views::cartesian_product(little_ints, little_ints, little_ints);\r\n    auto i = v.begin();\r\n    // Cannot advance cartesian_product_view iterator past end (N4928 [range.cartesian.iterator]/19).\r\n    i += 65;\r\n}\r\n\r\nvoid test_iterator_advance_past_end_with_big_offset() {\r\n    // This preconditions check works only when all ranges model ranges::sized_range\r\n    auto v = views::cartesian_product(little_ints, little_ints, little_ints);\r\n    auto i = v.begin();\r\n    // Cannot advance cartesian_product_view iterator past end (N4928 [range.cartesian.iterator]/19).\r\n    i += 1000;\r\n}\r\n\r\nvoid test_iterator_advance_before_begin() {\r\n    auto v = views::cartesian_product(little_ints, little_ints, little_ints);\r\n    auto i = v.end();\r\n    // Cannot advance cartesian_product_view iterator before begin (N4928 [range.cartesian.iterator]/19).\r\n    i += -65;\r\n}\r\n\r\nvoid test_iterator_differencing() {\r\n    auto v  = views::cartesian_product(much_ints, much_ints, much_ints);\r\n    auto i1 = v.begin();\r\n    auto i2 = v.end();\r\n    // Scaled-sum cannot be represented by _Difference_type<false> (N4928 [range.cartesian.iterator]/8).\r\n    (void) (i2 - i1);\r\n}\r\n\r\nvoid test_iterator_and_default_sentinel_differencing() {\r\n    auto v = views::cartesian_product(much_ints, much_ints, much_ints);\r\n    auto i = v.begin();\r\n    // Scaled-sum cannot be represented by _Difference_type<false> (N4928 [range.cartesian.iterator]/8).\r\n    (void) (default_sentinel - i);\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_view_size,\r\n        test_view_const_size,\r\n        test_iterator_advance_past_end_with_small_offset,\r\n        test_iterator_advance_past_end_with_big_offset,\r\n        test_iterator_advance_before_begin,\r\n        test_iterator_differencing,\r\n        test_iterator_and_default_sentinel_differencing,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2374R4_views_cartesian_product_recommended_practices/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2374R4_views_cartesian_product_recommended_practices/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Check MSVC-STL internal machinery\r\n\r\n#include <array>\r\n#include <cstddef>\r\n#include <limits>\r\n#include <ranges>\r\n#include <span>\r\n#include <tuple>\r\n#include <utility>\r\n\r\nusing namespace std;\r\nusing ranges::_Compile_time_max_size, ranges::cartesian_product_view, ranges::sized_range, ranges::range_difference_t,\r\n    ranges::range_size_t, views::all_t;\r\n\r\ntemplate <class... Rngs>\r\nusing cpv_size_t = range_size_t<cartesian_product_view<Rngs...>>;\r\n\r\ntemplate <class... Rngs>\r\nusing cpv_difference_t = range_difference_t<cartesian_product_view<Rngs...>>;\r\n\r\ntemplate <class... Rngs>\r\nusing cpv_const_size_t = range_size_t<const cartesian_product_view<Rngs...>>;\r\n\r\ntemplate <class... Rngs>\r\nusing cpv_const_difference_t = range_difference_t<const cartesian_product_view<Rngs...>>;\r\n\r\n#ifdef _WIN64\r\nconstexpr bool is_64_bit = true;\r\n#else // ^^^ 64 bit / 32 bit vvv\r\nconstexpr bool is_64_bit = false;\r\n#endif // ^^^ 32 bit ^^^\r\n\r\nconstexpr void check_array() {\r\n    // Check '_Compile_time_max_size' type trait\r\n    static_assert(_Compile_time_max_size<int[3]> == 3);\r\n    static_assert(_Compile_time_max_size<int[9]> == 9);\r\n\r\n    // Check '_Compile_time_max_size' type trait for const arrays\r\n    static_assert(_Compile_time_max_size<const int[3]> == 3);\r\n    static_assert(_Compile_time_max_size<const int[9]> == 9);\r\n\r\n    // Computing cartesian product for small arrays does not require big range_size_t\r\n    using A1 = all_t<int (&)[4]>;\r\n    static_assert(sizeof(cpv_size_t<A1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_size_t<A1, A1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_size_t<A1, A1, A1>) <= sizeof(size_t));\r\n\r\n    // Same thing with range_difference_t<array>\r\n    static_assert(sizeof(cpv_difference_t<A1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<A1, A1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<A1, A1, A1>) <= sizeof(ptrdiff_t));\r\n\r\n    // Computing cartesian product for big arrays requires bigger types\r\n    using A2 = all_t<int (&)[500'000'000]>;\r\n    static_assert(sizeof(cpv_size_t<A2, A2, A2>) > sizeof(size_t));\r\n    static_assert(sizeof(cpv_difference_t<A2, A2, A2>) > sizeof(ptrdiff_t));\r\n}\r\n\r\nconstexpr void check_std_array() {\r\n    // Check '_Compile_time_max_size' type trait\r\n    static_assert(_Compile_time_max_size<array<int, 0>> == 0);\r\n    static_assert(_Compile_time_max_size<array<int, 3>> == 3);\r\n    static_assert(_Compile_time_max_size<array<int, 9>> == 9);\r\n\r\n    // Check '_Compile_time_max_size' type trait for const arrays\r\n    static_assert(_Compile_time_max_size<const array<int, 0>> == 0);\r\n    static_assert(_Compile_time_max_size<const array<int, 3>> == 3);\r\n    static_assert(_Compile_time_max_size<const array<int, 9>> == 9);\r\n\r\n    // Computing cartesian product for small arrays does not require big range_size_t\r\n    using A1 = all_t<array<int, 4>>;\r\n    static_assert(sizeof(cpv_size_t<A1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_size_t<A1, A1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_size_t<A1, A1, A1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_size_t<A1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_size_t<A1, A1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_size_t<A1, A1, A1>) <= sizeof(size_t));\r\n\r\n    // Same thing with range_difference_t<array>\r\n    static_assert(sizeof(cpv_difference_t<A1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<A1, A1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<A1, A1, A1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<A1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<A1, A1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<A1, A1, A1>) <= sizeof(ptrdiff_t));\r\n\r\n    // Computing cartesian product for big arrays requires bigger types\r\n    using A2 = all_t<array<int, 500'000'000>&>;\r\n    static_assert(sizeof(cpv_size_t<A2, A2, A2>) > sizeof(size_t));\r\n    static_assert(sizeof(cpv_difference_t<A2, A2, A2>) > sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_size_t<A2, A2, A2>) > sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_difference_t<A2, A2, A2>) > sizeof(ptrdiff_t));\r\n}\r\n\r\nconstexpr void check_span() {\r\n    // Check '_Compile_time_max_size' type trait\r\n    static_assert(_Compile_time_max_size<span<int, 0>> == 0);\r\n    static_assert(_Compile_time_max_size<span<int, 3>> == 3);\r\n    static_assert(_Compile_time_max_size<span<int, 9>> == 9);\r\n    static_assert(_Compile_time_max_size<span<int>> == (numeric_limits<span<int>::size_type>::max)());\r\n\r\n    // Check '_Compile_time_max_size' type trait for const spans\r\n    static_assert(_Compile_time_max_size<const span<int, 0>> == 0);\r\n    static_assert(_Compile_time_max_size<const span<int, 3>> == 3);\r\n    static_assert(_Compile_time_max_size<const span<int, 9>> == 9);\r\n    static_assert(_Compile_time_max_size<const span<int>> == (numeric_limits<span<int>::size_type>::max)());\r\n\r\n    // Computing cartesian product for small spans does not require big range_size_t\r\n    using S1 = all_t<span<int, 4>>;\r\n    static_assert(sizeof(cpv_size_t<S1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_size_t<S1, S1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_size_t<S1, S1, S1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_size_t<S1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_size_t<S1, S1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_size_t<S1, S1, S1>) <= sizeof(size_t));\r\n\r\n    // Same thing with range_difference_t<span>\r\n    static_assert(sizeof(cpv_difference_t<S1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<S1, S1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<S1, S1, S1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<S1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<S1, S1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<S1, S1, S1>) <= sizeof(ptrdiff_t));\r\n\r\n    // Computing cartesian product for big spans requires bigger types\r\n    using S2 = span<int, 500'000'000>;\r\n    static_assert(sizeof(cpv_size_t<S2, S2, S2>) > sizeof(size_t));\r\n    static_assert(sizeof(cpv_difference_t<S2, S2, S2>) > sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_size_t<S2, S2, S2>) > sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_difference_t<S2, S2, S2>) > sizeof(ptrdiff_t));\r\n}\r\n\r\nconstexpr void check_empty_view() {\r\n    using ranges::empty_view;\r\n\r\n    // Check '_Compile_time_max_size' type trait\r\n    static_assert(_Compile_time_max_size<empty_view<int>> == 0);\r\n    static_assert(_Compile_time_max_size<empty_view<const int>> == 0);\r\n    static_assert(_Compile_time_max_size<const empty_view<int>> == 0);\r\n    static_assert(_Compile_time_max_size<const empty_view<const int>> == 0);\r\n\r\n    using E = empty_view<int>;\r\n    static_assert(sizeof(cpv_size_t<E>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_difference_t<E>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_size_t<E, E>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_difference_t<E, E>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_size_t<E>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_difference_t<E>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_size_t<E, E>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_difference_t<E, E>) <= sizeof(ptrdiff_t));\r\n}\r\n\r\nconstexpr void check_single_view() {\r\n    using ranges::single_view;\r\n\r\n    // Check '_Compile_time_max_size' type trait\r\n    static_assert(_Compile_time_max_size<single_view<int>> == 1);\r\n    static_assert(_Compile_time_max_size<single_view<const int>> == 1);\r\n    static_assert(_Compile_time_max_size<const single_view<int>> == 1);\r\n    static_assert(_Compile_time_max_size<const single_view<const int>> == 1);\r\n\r\n    using S = single_view<int>;\r\n    static_assert(sizeof(cpv_size_t<S>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_difference_t<S>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_size_t<S, S>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_difference_t<S, S>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_size_t<S>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_difference_t<S>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_size_t<S, S>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_difference_t<S, S>) <= sizeof(ptrdiff_t));\r\n}\r\n\r\nenum class CheckConstAdaptor : bool { no, yes };\r\n\r\ntemplate <template <class, class...> class SimpleRangeAdaptor, CheckConstAdaptor CCA, class... Args>\r\nconstexpr void check_simple_range_adaptor() {\r\n    using ValTy = tuple<int>; // for ranges::elements_view\r\n    using V1    = SimpleRangeAdaptor<all_t<array<ValTy, 100>>, Args...>; // owning_view\r\n    using V2    = SimpleRangeAdaptor<span<ValTy, 500'000'000>, Args...>; // \"already view\"\r\n    using V3    = SimpleRangeAdaptor<all_t<array<ValTy, 500'000'000>&>, Args...>; // ref_view\r\n\r\n    // Check '_Compile_time_max_size' type trait\r\n    static_assert(_Compile_time_max_size<V1> == 100);\r\n    static_assert(_Compile_time_max_size<V2> == 500'000'000);\r\n    static_assert(_Compile_time_max_size<V3> == 500'000'000);\r\n\r\n    static_assert(\r\n        sized_range<V1> == (sized_range<V2> && sized_range<V3>) ); // If V1 is sized, then all of them should be\r\n    if constexpr (sized_range<V1>) {\r\n        static_assert(sizeof(cpv_size_t<V1>) <= sizeof(size_t));\r\n        static_assert(sizeof(cpv_size_t<V1, V1>) <= sizeof(size_t));\r\n        static_assert(sizeof(cpv_size_t<V2>) <= sizeof(size_t));\r\n        static_assert((sizeof(cpv_size_t<V2, V2>) <= sizeof(size_t)) == is_64_bit);\r\n        static_assert(sizeof(cpv_size_t<V3>) <= sizeof(size_t));\r\n        static_assert(sizeof(cpv_size_t<V3, V3, V3>) > sizeof(size_t));\r\n    }\r\n\r\n    static_assert(sizeof(cpv_difference_t<V1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V1, V1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V2>) <= sizeof(ptrdiff_t));\r\n    static_assert((sizeof(cpv_difference_t<V2, V2>) <= sizeof(ptrdiff_t)) == is_64_bit);\r\n    static_assert(sizeof(cpv_difference_t<V3>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V3, V3, V3>) > sizeof(ptrdiff_t));\r\n\r\n    static_assert(\r\n        to_underlying(CCA) == (ranges::range<const V1> && ranges::range<const V2> && ranges::range<const V3>) );\r\n    if constexpr (to_underlying(CCA)) {\r\n        static_assert(_Compile_time_max_size<const V1> == 100);\r\n        static_assert(_Compile_time_max_size<const V2> == 500'000'000);\r\n        static_assert(_Compile_time_max_size<const V3> == 500'000'000);\r\n\r\n        if constexpr (sized_range<const V1>) {\r\n            static_assert(sizeof(cpv_const_size_t<V1>) <= sizeof(size_t));\r\n            static_assert(sizeof(cpv_const_size_t<V1, V1>) <= sizeof(size_t));\r\n        }\r\n\r\n        if constexpr (sized_range<const V2>) {\r\n            static_assert(sizeof(cpv_const_size_t<V2>) <= sizeof(size_t));\r\n            static_assert(sizeof(cpv_const_size_t<V2, V2, V2>) > sizeof(size_t));\r\n        }\r\n\r\n        if constexpr (sized_range<const V3>) {\r\n            static_assert(sizeof(cpv_const_size_t<V3>) <= sizeof(size_t));\r\n            static_assert(sizeof(cpv_const_size_t<V3, V3, V3>) > sizeof(size_t));\r\n        }\r\n\r\n        static_assert(sizeof(cpv_const_difference_t<V1>) <= sizeof(ptrdiff_t));\r\n        static_assert(sizeof(cpv_const_difference_t<V1, V1>) <= sizeof(ptrdiff_t));\r\n        static_assert(sizeof(cpv_const_difference_t<V2>) <= sizeof(ptrdiff_t));\r\n        static_assert(sizeof(cpv_const_difference_t<V2, V2, V2>) > sizeof(ptrdiff_t));\r\n        static_assert(sizeof(cpv_const_difference_t<V3>) <= sizeof(ptrdiff_t));\r\n        static_assert(sizeof(cpv_const_difference_t<V3, V3, V3>) > sizeof(ptrdiff_t));\r\n    }\r\n}\r\n\r\nconstexpr void check_join_view() {\r\n    using V1 = ranges::join_view<all_t<array<array<int, 10>, 20>>>;\r\n    using V2 = ranges::join_view<all_t<array<span<int, 5'000'000>, 100>>>;\r\n\r\n    // Check '_Compile_time_max_size' type trait\r\n    static_assert(_Compile_time_max_size<V1> == 200);\r\n    static_assert(_Compile_time_max_size<V2> == 500'000'000);\r\n\r\n    static_assert(sizeof(cpv_difference_t<V1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V1, V1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V2>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V2, V2, V2>) > sizeof(ptrdiff_t));\r\n\r\n    static_assert(_Compile_time_max_size<const V1> == 200);\r\n    static_assert(_Compile_time_max_size<const V2> == 500'000'000);\r\n\r\n    static_assert(sizeof(cpv_const_difference_t<V1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<V1, V1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<V2>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<V2, V2, V2>) > sizeof(ptrdiff_t));\r\n\r\n#ifdef _WIN64\r\n    using V3 = ranges::join_view<all_t<span<span<int, 10'000'000'000>, 5'000'000'000>>>;\r\n    static_assert(_Compile_time_max_size<V3> == (numeric_limits<size_t>::max)());\r\n    static_assert(sizeof(cpv_difference_t<V3>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V3, V3, V3>) > sizeof(ptrdiff_t));\r\n    static_assert(_Compile_time_max_size<const V3> == (numeric_limits<size_t>::max)());\r\n    static_assert(sizeof(cpv_const_difference_t<V3>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<V3, V3, V3>) > sizeof(ptrdiff_t));\r\n#endif // ^^^ 64 bit ^^^\r\n}\r\n\r\nconstexpr void check_join_with_view() {\r\n    using V1 = ranges::join_with_view<all_t<array<array<int, 3>, 4>>, all_t<array<int, 2>>>;\r\n    using V2 = ranges::join_with_view<all_t<array<span<int, 100'000>, 100>&>, all_t<array<int, 2>>>;\r\n\r\n    // Check '_Compile_time_max_size' type trait\r\n    static_assert(_Compile_time_max_size<V1> == 18);\r\n    static_assert(_Compile_time_max_size<V2> == 10'000'198);\r\n\r\n    static_assert(sizeof(cpv_difference_t<V1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V1, V1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V2>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V2, V2, V2>) > sizeof(ptrdiff_t));\r\n\r\n    static_assert(_Compile_time_max_size<const V1> == 18);\r\n    static_assert(_Compile_time_max_size<const V2> == 10'000'198);\r\n\r\n    static_assert(sizeof(cpv_const_difference_t<V1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<V1, V1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<V2>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<V2, V2, V2>) > sizeof(ptrdiff_t));\r\n\r\n#ifdef _WIN64\r\n    using V3 = ranges::join_with_view<span<span<int, 10'000'000'000>, 5'000'000'000>, span<int, 1>>;\r\n    static_assert(_Compile_time_max_size<V3> == (numeric_limits<size_t>::max)());\r\n    static_assert(sizeof(cpv_difference_t<V3>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V3, V3, V3>) > sizeof(ptrdiff_t));\r\n    static_assert(_Compile_time_max_size<const V3> == (numeric_limits<size_t>::max)());\r\n    static_assert(sizeof(cpv_const_difference_t<V3>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<V3, V3, V3>) > sizeof(ptrdiff_t));\r\n#endif // ^^^ 64 bit ^^^\r\n\r\n    // Check '_Compile_time_max_size' when size of joined range is 0\r\n    using V4 = ranges::join_with_view<span<span<int, 5>, 0>, span<int, 2>>;\r\n    static_assert(_Compile_time_max_size<V4> == 0);\r\n    static_assert(sizeof(cpv_difference_t<V4>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V4, V4, V4>) <= sizeof(ptrdiff_t));\r\n    static_assert(_Compile_time_max_size<const V4> == 0);\r\n    static_assert(sizeof(cpv_const_difference_t<V4>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<V4, V4, V4>) <= sizeof(ptrdiff_t));\r\n}\r\n\r\ntemplate <template <class...> class ZipAdaptor>\r\nconstexpr void check_zip_adaptor() {\r\n    using ValTy = int;\r\n    using V1    = all_t<array<ValTy, 100>>; // owning_view\r\n    using V2    = span<ValTy, 100'000'000>; // \"already view\"\r\n    using V3    = all_t<array<ValTy, 500'000'000>&>; // ref_view\r\n    using Z1    = ZipAdaptor<V1, V2, V3>;\r\n    using Z2    = ZipAdaptor<V2, V3>;\r\n\r\n    // Check '_Compile_time_max_size' type trait\r\n    static_assert(_Compile_time_max_size<Z1> == 100);\r\n    static_assert(_Compile_time_max_size<Z2> == 100'000'000);\r\n\r\n    static_assert(sizeof(cpv_size_t<Z1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_size_t<Z1, Z1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_size_t<Z2>) <= sizeof(size_t));\r\n    static_assert((sizeof(cpv_size_t<Z2, Z2>) <= sizeof(size_t)) == is_64_bit);\r\n    static_assert(sizeof(cpv_size_t<Z2, Z2, Z2>) > sizeof(size_t));\r\n\r\n    static_assert(sizeof(cpv_difference_t<Z1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<Z1, Z1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<Z2>) <= sizeof(ptrdiff_t));\r\n    static_assert((sizeof(cpv_difference_t<Z2, Z2>) <= sizeof(ptrdiff_t)) == is_64_bit);\r\n    static_assert(sizeof(cpv_difference_t<Z2, Z2, Z2>) > sizeof(ptrdiff_t));\r\n\r\n    static_assert(_Compile_time_max_size<const Z1> == 100);\r\n    static_assert(_Compile_time_max_size<const Z2> == 100'000'000);\r\n\r\n    static_assert(sizeof(cpv_const_size_t<Z1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_size_t<Z1, Z1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_size_t<Z2>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_size_t<Z2, Z2, Z2>) > sizeof(size_t));\r\n\r\n    static_assert(sizeof(cpv_const_difference_t<Z1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<Z1, Z1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<Z2>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<Z2, Z2, Z2>) > sizeof(ptrdiff_t));\r\n}\r\n\r\ntemplate <template <class, size_t> class AdjacentAdaptor>\r\nconstexpr void check_adjacent_adaptor() {\r\n    using ValTy = int;\r\n    using V1    = AdjacentAdaptor<all_t<array<ValTy, 100>>, 1>; // owning_view\r\n    using V2    = AdjacentAdaptor<span<ValTy, 500'000'000>, 6>; // \"already view\"\r\n    using V3    = AdjacentAdaptor<all_t<array<ValTy, 500'000'000>&>, 11>; // ref_view\r\n\r\n    // Check '_Compile_time_max_size' type trait\r\n    static_assert(_Compile_time_max_size<V1> == 100);\r\n    static_assert(_Compile_time_max_size<V2> == 499'999'995);\r\n    static_assert(_Compile_time_max_size<V3> == 499'999'990);\r\n\r\n    static_assert(sizeof(cpv_size_t<V1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_size_t<V1, V1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_size_t<V2>) <= sizeof(size_t));\r\n    static_assert((sizeof(cpv_size_t<V2, V2>) <= sizeof(size_t)) == is_64_bit);\r\n    static_assert(sizeof(cpv_size_t<V3>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_size_t<V3, V3, V3>) > sizeof(size_t));\r\n\r\n    static_assert(sizeof(cpv_difference_t<V1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V1, V1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V2>) <= sizeof(ptrdiff_t));\r\n    static_assert((sizeof(cpv_difference_t<V2, V2>) <= sizeof(ptrdiff_t)) == is_64_bit);\r\n    static_assert(sizeof(cpv_difference_t<V3>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V3, V3, V3>) > sizeof(ptrdiff_t));\r\n\r\n    static_assert(_Compile_time_max_size<const V1> == 100);\r\n    static_assert(_Compile_time_max_size<const V2> == 499'999'995);\r\n    static_assert(_Compile_time_max_size<const V3> == 499'999'990);\r\n\r\n    static_assert(sizeof(cpv_const_size_t<V1>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_size_t<V1, V1>) <= sizeof(size_t));\r\n\r\n    static_assert(sizeof(cpv_const_size_t<V2>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_size_t<V2, V2, V2>) > sizeof(size_t));\r\n\r\n    static_assert(sizeof(cpv_const_size_t<V3>) <= sizeof(size_t));\r\n    static_assert(sizeof(cpv_const_size_t<V3, V3, V3>) > sizeof(size_t));\r\n\r\n    static_assert(sizeof(cpv_const_difference_t<V1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<V1, V1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<V2>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<V2, V2, V2>) > sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<V3>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<V3, V3, V3>) > sizeof(ptrdiff_t));\r\n}\r\n\r\nconstexpr void check_cartesian_product_view() {\r\n    using V1 = cartesian_product_view<all_t<array<int, 2>>, all_t<array<float, 3>>, all_t<array<char, 5>>>;\r\n    using V2 = cartesian_product_view<all_t<array<int, 200'000>&>, all_t<array<float, 300'000>&>, span<char, 500'000>>;\r\n\r\n    // Check '_Compile_time_max_size' type trait\r\n    static_assert(_Compile_time_max_size<V1> == 30);\r\n    static_assert(_Compile_time_max_size<V2> == 30'000'000'000'000'000);\r\n\r\n    static_assert(sizeof(cpv_difference_t<V1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V1, V1>) <= sizeof(ptrdiff_t));\r\n    static_assert((sizeof(cpv_difference_t<V2>) <= sizeof(ptrdiff_t)) == is_64_bit);\r\n    static_assert(sizeof(cpv_difference_t<V2, V2, V2>) > sizeof(ptrdiff_t));\r\n\r\n    static_assert(_Compile_time_max_size<const V1> == 30);\r\n    static_assert(_Compile_time_max_size<const V2> == 30'000'000'000'000'000);\r\n\r\n    static_assert(sizeof(cpv_const_difference_t<V1>) <= sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<V1, V1>) <= sizeof(ptrdiff_t));\r\n    static_assert((sizeof(cpv_const_difference_t<V2>) <= sizeof(ptrdiff_t)) == is_64_bit);\r\n    static_assert(sizeof(cpv_const_difference_t<V2, V2, V2>) > sizeof(ptrdiff_t));\r\n\r\n#ifdef _WIN64\r\n    using V3 = cartesian_product_view<span<int, 10'000'000'000'000>, span<float, 500'000'000'000>,\r\n        span<char, 900'000'000'000'000>>;\r\n    static_assert(_Compile_time_max_size<V3> == (numeric_limits<_Unsigned128>::max)());\r\n    static_assert(sizeof(cpv_difference_t<V3>) > sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_difference_t<V3, V3, V3>) > sizeof(ptrdiff_t));\r\n    static_assert(_Compile_time_max_size<const V3> == (numeric_limits<_Unsigned128>::max)());\r\n    static_assert(sizeof(cpv_const_difference_t<V3>) > sizeof(ptrdiff_t));\r\n    static_assert(sizeof(cpv_const_difference_t<V3, V3, V3>) > sizeof(ptrdiff_t));\r\n#endif // ^^^ 64 bit ^^^\r\n}\r\n\r\nstruct Pred {\r\n    bool operator()(auto&&) const; // not defined\r\n    bool operator()(auto&&, auto&&) const; // not defined\r\n};\r\n\r\nstruct Transformer {\r\n    float operator()(auto&&...) const; // not defined\r\n};\r\n\r\ntemplate <class View>\r\nusing CommonView = ranges::common_view<ranges::take_while_view<View, Pred>>;\r\n\r\ntemplate <class View>\r\nusing ElementsView = ranges::elements_view<View, 0>;\r\n\r\ntemplate <class... Views>\r\nusing ZipTransformView = ranges::zip_transform_view<Transformer, Views...>;\r\n\r\ntemplate <class View, size_t N>\r\nusing AdjacentTransformView = ranges::adjacent_transform_view<View, Transformer, N>;\r\n\r\nconstexpr bool test() {\r\n    // Containers\r\n    check_array();\r\n    check_std_array();\r\n    check_span();\r\n\r\n    // Range factories\r\n    check_empty_view();\r\n    check_single_view();\r\n\r\n    // Simple range adaptors (take one range and possibly extra arguments)\r\n    check_simple_range_adaptor<ranges::as_const_view, CheckConstAdaptor::yes>();\r\n    check_simple_range_adaptor<ranges::as_rvalue_view, CheckConstAdaptor::yes>();\r\n    check_simple_range_adaptor<ranges::chunk_view, CheckConstAdaptor::yes>();\r\n    check_simple_range_adaptor<ranges::chunk_by_view, CheckConstAdaptor::no, Pred>();\r\n    check_simple_range_adaptor<CommonView, CheckConstAdaptor::yes>();\r\n    check_simple_range_adaptor<ranges::drop_view, CheckConstAdaptor::yes>();\r\n    check_simple_range_adaptor<ranges::drop_while_view, CheckConstAdaptor::no, Pred>();\r\n    check_simple_range_adaptor<ElementsView, CheckConstAdaptor::yes>();\r\n    check_simple_range_adaptor<ranges::enumerate_view, CheckConstAdaptor::yes>();\r\n    check_simple_range_adaptor<ranges::filter_view, CheckConstAdaptor::no, Pred>();\r\n    check_simple_range_adaptor<ranges::lazy_split_view, CheckConstAdaptor::yes, ranges::single_view<tuple<int>>>();\r\n    check_simple_range_adaptor<ranges::split_view, CheckConstAdaptor::no, ranges::single_view<tuple<int>>>();\r\n    check_simple_range_adaptor<ranges::owning_view, CheckConstAdaptor::yes>();\r\n    check_simple_range_adaptor<ranges::ref_view, CheckConstAdaptor::yes>();\r\n    check_simple_range_adaptor<ranges::reverse_view, CheckConstAdaptor::yes>();\r\n    check_simple_range_adaptor<ranges::slide_view, CheckConstAdaptor::yes>();\r\n    check_simple_range_adaptor<ranges::stride_view, CheckConstAdaptor::yes>();\r\n    check_simple_range_adaptor<ranges::take_view, CheckConstAdaptor::yes>();\r\n    check_simple_range_adaptor<ranges::take_while_view, CheckConstAdaptor::yes, Pred>();\r\n    check_simple_range_adaptor<ranges::transform_view, CheckConstAdaptor::yes, Transformer>();\r\n\r\n    check_join_view();\r\n    check_join_with_view();\r\n    check_zip_adaptor<ranges::zip_view>();\r\n    check_zip_adaptor<ZipTransformView>();\r\n    check_adjacent_adaptor<ranges::adjacent_view>();\r\n    check_adjacent_adaptor<AdjacentTransformView>();\r\n    check_cartesian_product_view();\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(test());\r\n"
  },
  {
    "path": "tests/std/tests/P2387R3_bind_back/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2387R3_bind_back/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n#include <memory>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nconstexpr int f0() {\r\n    return 1729;\r\n}\r\n\r\nconstexpr int f1(int x) {\r\n    return x * 10;\r\n}\r\n\r\nconstexpr int f2(int x, int y) {\r\n    return x * 100 + y * 10;\r\n}\r\n\r\nconstexpr int f3(int x, int y, int z) {\r\n    return x * 1000 + y * 100 + z * 10;\r\n}\r\n\r\nstruct Cat {\r\n    string name;\r\n\r\n    constexpr string noise(const string& s) const {\r\n        return name + \" says \" + s;\r\n    }\r\n};\r\n\r\nstruct DetectQualifiers {\r\n    constexpr string_view operator()() & {\r\n        return \"modifiable lvalue\";\r\n    }\r\n\r\n    constexpr string_view operator()() const& {\r\n        return \"const lvalue\";\r\n    }\r\n\r\n    constexpr string_view operator()() && {\r\n        return \"modifiable rvalue\";\r\n    }\r\n\r\n    constexpr string_view operator()() const&& {\r\n        return \"const rvalue\";\r\n    }\r\n};\r\n\r\nconstexpr bool test_constexpr() {\r\n    // Test varying numbers of arguments.\r\n    assert(bind_back(f0)() == 1729);\r\n\r\n    assert(bind_back(f1)(2) == 20);\r\n    assert(bind_back(f1, 3)() == 30);\r\n\r\n    assert(bind_back(f2)(4, 5) == 450);\r\n    assert(bind_back(f2, 7)(6) == 670);\r\n    assert(bind_back(f2, 8, 9)() == 890);\r\n\r\n    assert(bind_back(f3)(2, 3, 4) == 2340);\r\n    assert(bind_back(f3, 4, 5)(3) == 3450);\r\n    assert(bind_back(f3, 5, 6)(4) == 4560);\r\n    assert(bind_back(f3, 5, 6, 7)() == 5670);\r\n\r\n    // Test function pointers.\r\n    assert(bind_back(&f0)() == 1729);\r\n    assert(bind_back(&f2, 7)(6) == 670);\r\n\r\n    // Test stateless lambdas.\r\n    assert(bind_back([] { return 11; })() == 11);\r\n    assert(bind_back([](int x, int y) { return x * 2 + y * 3; }, 10)(100) == 230);\r\n\r\n    // Test stateful lambdas.\r\n    int value = 0;\r\n\r\n    auto bound0 = bind_back([&value] { ++value; });\r\n    bound0();\r\n    assert(value == 1);\r\n    bound0();\r\n    assert(value == 2);\r\n\r\n    auto bound1 = bind_back([&value](int x, int y) { value = value * x + y; }, 10);\r\n    bound1(3);\r\n    assert(value == 16);\r\n    bound1(4);\r\n    assert(value == 74);\r\n\r\n    // Test PMFs.\r\n    Cat cat{\"Peppermint\"};\r\n    auto bound2 = bind_back(&Cat::noise, \"meow\");\r\n    assert(bound2(cat) == \"Peppermint says meow\"); // call with reference\r\n    auto bound3 = bind_back(&Cat::noise, \"MEOW\");\r\n    cat.name    = \"Fluffy\";\r\n    assert(bound3(&cat) == \"Fluffy says MEOW\"); // call with pointer\r\n    auto bound4 = bind_back(&Cat::noise, \"HISS\");\r\n    assert(bound4(ref(cat)) == \"Fluffy says HISS\"); // call with reference_wrapper\r\n\r\n    // Test \"perfect forwarding call wrapper\" behavior.\r\n    auto bound5 = bind_back(DetectQualifiers{});\r\n    assert(bound5() == \"modifiable lvalue\");\r\n    assert(as_const(bound5)() == \"const lvalue\");\r\n    assert(move(bound5)() == \"modifiable rvalue\");\r\n    assert(move(as_const(bound5))() == \"const rvalue\");\r\n\r\n    // Test movable-only types.\r\n    auto unique_lambda = [up1 = make_unique<int>(1200)](unique_ptr<int>&& up2) {\r\n        if (up1 && up2) {\r\n            return make_unique<int>(*up1 + *up2);\r\n        } else if (up1) {\r\n            return make_unique<int>(*up1 * -1);\r\n        } else if (up2) {\r\n            return make_unique<int>(*up2 * -10);\r\n        } else {\r\n            return make_unique<int>(-9000);\r\n        }\r\n    };\r\n    auto bound6 = bind_back(move(unique_lambda), make_unique<int>(34));\r\n    assert(*unique_lambda(make_unique<int>(56)) == -560);\r\n    assert(*move(bound6)() == 1234);\r\n    auto bound7 = move(bound6);\r\n    assert(*move(bound6)() == -9000);\r\n    assert(*move(bound7)() == 1234);\r\n\r\n    // Test decay when binding.\r\n    const int arr[] = {11, 22, 33};\r\n    const int three = 3;\r\n\r\n    auto bound8 = bind_back(\r\n        [](auto&& a, auto&& f, auto&& i) {\r\n            using FP = int (*)(int);\r\n            return is_same_v<decltype(a), const int*&> && is_same_v<decltype(f), FP&> && is_same_v<decltype(i), int&>;\r\n        },\r\n        arr, f1, three);\r\n    assert(bound8());\r\n\r\n    // Test forward when calling.\r\n    auto bound9 = bind_back([](auto&& a1, auto&& a2, auto&& a3, auto&& a4) {\r\n        constexpr bool same1 = is_same_v<decltype(a1), int&>;\r\n        constexpr bool same2 = is_same_v<decltype(a2), const int&>;\r\n        constexpr bool same3 = is_same_v<decltype(a3), int&&>;\r\n        constexpr bool same4 = is_same_v<decltype(a4), const int&&>;\r\n        return same1 && same2 && same3 && same4;\r\n    });\r\n    assert(bound9(value, three, 1729, move(three)));\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    assert(test_constexpr());\r\n    static_assert(test_constexpr());\r\n\r\n    // Also test GH-1292 \"bind_front violates [func.require]p8\" in which the return type of bind_front inadvertently\r\n    // depends on the value category and/or cv-qualification of its arguments.\r\n    {\r\n        struct S {\r\n            int i = 42;\r\n        };\r\n        S s;\r\n        auto lambda               = [](S x) { return x.i; };\r\n        auto returns_lambda       = [=] { return lambda; };\r\n        auto returns_const_lambda = [=]() -> const decltype(lambda) { return lambda; };\r\n        auto returns_const_S      = []() -> const S { return {}; };\r\n\r\n        using T = decltype(bind_back(lambda, s));\r\n        static_assert(is_same_v<decltype(bind_back(lambda, move(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(lambda, S{})), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_back(move(lambda), s)), T>);\r\n        static_assert(is_same_v<decltype(bind_back(move(lambda), move(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(move(lambda), S{})), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_back(returns_lambda(), s)), T>);\r\n        static_assert(is_same_v<decltype(bind_back(returns_lambda(), move(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(returns_lambda(), S{})), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_back(lambda, as_const(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(lambda, move(as_const(s)))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(lambda, returns_const_S())), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_back(move(lambda), as_const(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(move(lambda), move(as_const(s)))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(move(lambda), returns_const_S())), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_back(returns_lambda(), as_const(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(returns_lambda(), move(as_const(s)))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(returns_lambda(), returns_const_S())), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_back(as_const(lambda), s)), T>);\r\n        static_assert(is_same_v<decltype(bind_back(as_const(lambda), move(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(as_const(lambda), S{})), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_back(move(as_const(lambda)), s)), T>);\r\n        static_assert(is_same_v<decltype(bind_back(move(as_const(lambda)), move(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(move(as_const(lambda)), S{})), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_back(returns_const_lambda(), s)), T>);\r\n        static_assert(is_same_v<decltype(bind_back(returns_const_lambda(), move(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(returns_const_lambda(), S{})), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_back(as_const(lambda), as_const(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(as_const(lambda), move(as_const(s)))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(as_const(lambda), returns_const_S())), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_back(move(as_const(lambda)), as_const(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(move(as_const(lambda)), move(as_const(s)))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(move(as_const(lambda)), returns_const_S())), T>);\r\n\r\n        static_assert(is_same_v<decltype(bind_back(returns_const_lambda(), as_const(s))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(returns_const_lambda(), move(as_const(s)))), T>);\r\n        static_assert(is_same_v<decltype(bind_back(returns_const_lambda(), returns_const_S())), T>);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2387R3_pipe_support_for_user_defined_range_adaptors/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2387R3_pipe_support_for_user_defined_range_adaptors/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <ranges>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nconcept CanInstantiateRangeAdaptorClosure = requires { typename ranges::range_adaptor_closure<T>; };\r\n\r\nclass EmptyTestType {};\r\nclass IncompleteTestType;\r\n\r\nstatic_assert(CanInstantiateRangeAdaptorClosure<EmptyTestType>);\r\nstatic_assert(!CanInstantiateRangeAdaptorClosure<const EmptyTestType>);\r\nstatic_assert(!CanInstantiateRangeAdaptorClosure<volatile EmptyTestType>);\r\nstatic_assert(!CanInstantiateRangeAdaptorClosure<EmptyTestType&>);\r\nstatic_assert(!CanInstantiateRangeAdaptorClosure<int>);\r\nstatic_assert(CanInstantiateRangeAdaptorClosure<IncompleteTestType>);\r\n\r\ntemplate <class LHS, class RHS>\r\nconcept CanPipe = requires(LHS lhs, RHS rhs) { forward<LHS>(lhs) | forward<RHS>(rhs); };\r\n\r\ntemplate <class LHS, class RHS, class Ret>\r\nconcept CanPipe_R = requires(LHS lhs, RHS rhs) {\r\n    { forward<LHS>(lhs) | forward<RHS>(rhs) } -> same_as<Ret>;\r\n};\r\n\r\nusing TestRange = array<int, 1>;\r\n\r\ntemplate <class T>\r\nconstexpr bool is_range_adaptor_closure() {\r\n    return CanPipe<TestRange, T&> || CanPipe<TestRange, const T&> || CanPipe<TestRange, T&&>\r\n        || CanPipe<TestRange, const T&&>;\r\n}\r\n\r\nstruct IdentityRangeAdaptorClosure : ranges::range_adaptor_closure<IdentityRangeAdaptorClosure> {\r\n    template <class T>\r\n    constexpr decltype(auto) operator()(T&& range) const {\r\n        return forward<T>(range);\r\n    }\r\n};\r\n\r\n// Is not a range adaptor closure, because it is not a function object.\r\nstruct NotCallable : ranges::range_adaptor_closure<NotCallable> {};\r\nstatic_assert(!is_range_adaptor_closure<NotCallable>());\r\n\r\n// Is not a range adaptor closure, because it does not accept a range as argument.\r\nstruct NotCallableWithRange : ranges::range_adaptor_closure<NotCallableWithRange> {\r\n    void operator()() {}\r\n};\r\nstatic_assert(!is_range_adaptor_closure<NotCallableWithRange>());\r\n\r\n// Is not a range adaptor closure, because it doesn't derive from range_adaptor_closure.\r\nstruct NotDerivedFrom {\r\n    void operator()(const TestRange&) {}\r\n};\r\nstatic_assert(!is_range_adaptor_closure<NotDerivedFrom>());\r\n\r\n// Is not a range adaptor closure, because it inherits privately from range_adaptor_closure.\r\nstruct DerivedPrivately : private ranges::range_adaptor_closure<DerivedPrivately> {\r\n    void operator()(const TestRange&) {}\r\n};\r\nstatic_assert(!is_range_adaptor_closure<DerivedPrivately>());\r\n\r\n// Is not a range adaptor closure, because it inherits from the wrong specialization of range_adaptor_closure.\r\nstruct DerivedFromWrongSpecialization : ranges::range_adaptor_closure<IdentityRangeAdaptorClosure> {\r\n    void operator()(const TestRange&) {}\r\n};\r\nstatic_assert(!is_range_adaptor_closure<DerivedFromWrongSpecialization>());\r\n\r\n// Is not a range adaptor closure, because it has two base classes which are specializations of\r\n// range_adaptor_closure.\r\nstruct DerivedFromTwoSpecializations : ranges::range_adaptor_closure<DerivedFromTwoSpecializations>,\r\n                                       ranges::range_adaptor_closure<IdentityRangeAdaptorClosure> {\r\n    void operator()(const TestRange&) {}\r\n};\r\nstatic_assert(!is_range_adaptor_closure<DerivedFromTwoSpecializations>());\r\n\r\n// Is not a range adaptor closure, because it models ranges::range.\r\nstruct ModelsRange : ranges::range_adaptor_closure<ModelsRange> {\r\n    void operator()(const TestRange&) {}\r\n\r\n    int* begin() {\r\n        return nullptr;\r\n    }\r\n    int* begin() const {\r\n        return nullptr;\r\n    }\r\n    int* end() {\r\n        return nullptr;\r\n    }\r\n    int* end() const {\r\n        return nullptr;\r\n    }\r\n};\r\nstatic_assert(ranges::range<ModelsRange>);\r\nstatic_assert(!is_range_adaptor_closure<ModelsRange>());\r\n\r\nstruct RangeAdaptorClosureMemberRefQualTest : ranges::range_adaptor_closure<RangeAdaptorClosureMemberRefQualTest> {\r\n    constexpr ranges::empty_view<char> operator()(const auto&) & {\r\n        return views::empty<char>;\r\n    }\r\n\r\n    constexpr ranges::empty_view<short> operator()(const auto&) && {\r\n        return views::empty<short>;\r\n    }\r\n\r\n    constexpr ranges::empty_view<float> operator()(const auto&) const& {\r\n        return views::empty<float>;\r\n    }\r\n\r\n    constexpr ranges::empty_view<double> operator()(const auto&) const&& {\r\n        return views::empty<double>;\r\n    }\r\n};\r\nstatic_assert(CanPipe_R<TestRange, RangeAdaptorClosureMemberRefQualTest&, ranges::empty_view<char>>);\r\nstatic_assert(CanPipe_R<TestRange, RangeAdaptorClosureMemberRefQualTest&&, ranges::empty_view<short>>);\r\nstatic_assert(CanPipe_R<TestRange, RangeAdaptorClosureMemberRefQualTest const&, ranges::empty_view<float>>);\r\nstatic_assert(CanPipe_R<TestRange, RangeAdaptorClosureMemberRefQualTest const&&, ranges::empty_view<double>>);\r\n\r\nusing FirstIdentityThenMemberRefQualTest =\r\n    decltype(IdentityRangeAdaptorClosure{} | RangeAdaptorClosureMemberRefQualTest{});\r\nstatic_assert(CanPipe_R<TestRange, FirstIdentityThenMemberRefQualTest&, ranges::empty_view<char>>);\r\nstatic_assert(CanPipe_R<TestRange, FirstIdentityThenMemberRefQualTest&&, ranges::empty_view<short>>);\r\nstatic_assert(CanPipe_R<TestRange, FirstIdentityThenMemberRefQualTest const&, ranges::empty_view<float>>);\r\nstatic_assert(CanPipe_R<TestRange, FirstIdentityThenMemberRefQualTest const&&, ranges::empty_view<double>>);\r\n\r\nusing FirstTransformThenMemberRefQualTest =\r\n    decltype(views::transform([](auto x) { return x; }) | RangeAdaptorClosureMemberRefQualTest{});\r\nstatic_assert(CanPipe_R<TestRange, FirstTransformThenMemberRefQualTest&, ranges::empty_view<char>>);\r\nstatic_assert(CanPipe_R<TestRange, FirstTransformThenMemberRefQualTest&&, ranges::empty_view<short>>);\r\nstatic_assert(CanPipe_R<TestRange, FirstTransformThenMemberRefQualTest const&, ranges::empty_view<float>>);\r\nstatic_assert(CanPipe_R<TestRange, FirstTransformThenMemberRefQualTest const&&, ranges::empty_view<double>>);\r\n\r\nusing FirstMemberRefQualTestThenAll = decltype(RangeAdaptorClosureMemberRefQualTest{} | views::all);\r\nstatic_assert(CanPipe_R<TestRange, FirstMemberRefQualTestThenAll&, ranges::empty_view<char>>);\r\nstatic_assert(CanPipe_R<TestRange, FirstMemberRefQualTestThenAll&&, ranges::empty_view<short>>);\r\nstatic_assert(CanPipe_R<TestRange, FirstMemberRefQualTestThenAll const&, ranges::empty_view<float>>);\r\nstatic_assert(CanPipe_R<TestRange, FirstMemberRefQualTestThenAll const&&, ranges::empty_view<double>>);\r\n\r\nstruct RangeAdaptorClosureParameterRefQualTest\r\n    : ranges::range_adaptor_closure<RangeAdaptorClosureParameterRefQualTest> {\r\n    constexpr char operator()(TestRange&) {\r\n        return {};\r\n    }\r\n\r\n    constexpr short operator()(TestRange&&) {\r\n        return {};\r\n    }\r\n\r\n    constexpr float operator()(const TestRange&) {\r\n        return {};\r\n    }\r\n\r\n    constexpr double operator()(const TestRange&&) {\r\n        return {};\r\n    }\r\n};\r\nstatic_assert(CanPipe_R<TestRange&, RangeAdaptorClosureParameterRefQualTest, char>);\r\nstatic_assert(CanPipe_R<TestRange&&, RangeAdaptorClosureParameterRefQualTest, short>);\r\nstatic_assert(CanPipe_R<const TestRange&, RangeAdaptorClosureParameterRefQualTest, float>);\r\nstatic_assert(CanPipe_R<const TestRange&&, RangeAdaptorClosureParameterRefQualTest, double>);\r\n\r\nstruct MoveOnlyRangeAdaptorClosure : ranges::range_adaptor_closure<MoveOnlyRangeAdaptorClosure> {\r\n    MoveOnlyRangeAdaptorClosure()                                   = default;\r\n    MoveOnlyRangeAdaptorClosure(const MoveOnlyRangeAdaptorClosure&) = delete;\r\n    MoveOnlyRangeAdaptorClosure(MoveOnlyRangeAdaptorClosure&&)      = default;\r\n\r\n    void operator()(const TestRange&) {}\r\n};\r\nstatic_assert(CanPipe<TestRange, MoveOnlyRangeAdaptorClosure>);\r\nstatic_assert(CanPipe<TestRange, MoveOnlyRangeAdaptorClosure&>);\r\nstatic_assert(CanPipe<MoveOnlyRangeAdaptorClosure, IdentityRangeAdaptorClosure>);\r\nstatic_assert(CanPipe<IdentityRangeAdaptorClosure, MoveOnlyRangeAdaptorClosure>);\r\nstatic_assert(!CanPipe<MoveOnlyRangeAdaptorClosure&, IdentityRangeAdaptorClosure>);\r\nstatic_assert(!CanPipe<IdentityRangeAdaptorClosure, MoveOnlyRangeAdaptorClosure&>);\r\n\r\nclass TimesTwoAdaptor : public ranges::range_adaptor_closure<TimesTwoAdaptor> {\r\npublic:\r\n    template <ranges::range R>\r\n    constexpr auto operator()(R&& range) const {\r\n        return forward<R>(range) | views::transform([](auto x) { return x * 2; });\r\n    }\r\n};\r\n\r\nclass DividedByTwoAdaptor : public ranges::range_adaptor_closure<DividedByTwoAdaptor> {\r\npublic:\r\n    template <ranges::range R>\r\n    constexpr auto operator()(R&& range) const {\r\n        return forward<R>(range) | views::transform([](auto x) { return x / 2; });\r\n    }\r\n};\r\n\r\nconstexpr bool test_user_defined_adaptors() {\r\n    const array<int, 3> numbers{1, 2, 3};\r\n    const array<int, 3> numbers_times_two{2, 4, 6};\r\n    assert(ranges::equal(numbers_times_two, numbers | TimesTwoAdaptor{}));\r\n    assert(ranges::equal(numbers, (numbers | TimesTwoAdaptor{}) | DividedByTwoAdaptor{}));\r\n    assert(ranges::equal(numbers, numbers | (TimesTwoAdaptor{} | DividedByTwoAdaptor{})));\r\n    assert(ranges::equal(numbers_times_two,\r\n        (numbers | TimesTwoAdaptor{})\r\n            | (TimesTwoAdaptor{} | TimesTwoAdaptor{} | DividedByTwoAdaptor{} | DividedByTwoAdaptor{})));\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_mixing_of_range_adaptors() {\r\n    const array<int, 3> numbers{1, 2, 3};\r\n    assert(ranges::equal(numbers, numbers | (TimesTwoAdaptor{} | views::transform([](int x) { return x / 2; }))));\r\n\r\n    const auto mixed_pipeline = TimesTwoAdaptor{} | views::reverse | DividedByTwoAdaptor{} | views::reverse;\r\n    assert(ranges::equal(mixed_pipeline(numbers), numbers));\r\n    assert(ranges::equal(numbers | mixed_pipeline, numbers));\r\n\r\n    auto factory_pipeline = views::iota(1) | TimesTwoAdaptor{} | views::take(3);\r\n    assert(ranges::equal(factory_pipeline, array{2, 4, 6}));\r\n\r\n    return true;\r\n}\r\n\r\nstruct Pinned {\r\n    Pinned()                         = default;\r\n    Pinned(const Pinned&)            = delete;\r\n    Pinned& operator=(const Pinned&) = delete;\r\n};\r\n\r\nconstexpr Pinned pinned_object{};\r\n\r\nstruct PinnedReturningRaco : ranges::range_adaptor_closure<PinnedReturningRaco> {\r\n    constexpr const Pinned& operator()(ranges::range auto&&) const noexcept {\r\n        return pinned_object;\r\n    }\r\n};\r\n\r\nstruct RangeIdentity : ranges::range_adaptor_closure<RangeIdentity> {\r\n    constexpr auto&& operator()(ranges::range auto&& t) const noexcept {\r\n        return forward<decltype(t)>(t);\r\n    }\r\n};\r\n\r\nstruct ConstOnlyRangeIdentity : ranges::range_adaptor_closure<ConstOnlyRangeIdentity> {\r\n    constexpr auto&& operator()(ranges::range auto&& t) const noexcept {\r\n        return forward<decltype(t)>(t);\r\n    }\r\n    void operator()(ranges::range auto&&) = delete;\r\n};\r\n\r\nvoid test_perfect_forwarding_properties() { // COMPILE-ONLY\r\n    // GH-4153: <ranges>: operator|(_Left&& __l, _Right&& __r) should return decltype(auto)\r\n    // Intentionally avoid using some traits/concepts to test correctness in non-immediate contexts.\r\n    {\r\n        PinnedReturningRaco raco{};\r\n\r\n        static_assert(same_as<decltype(TestRange{} | raco), const Pinned&>);\r\n        static_assert(same_as<decltype(TestRange{} | as_const(raco)), const Pinned&>);\r\n        static_assert(same_as<decltype(TestRange{} | move(raco)), const Pinned&>);\r\n        static_assert(same_as<decltype(TestRange{} | move(as_const(raco))), const Pinned&>);\r\n\r\n        static_assert(same_as<decltype(raco(TestRange{})), const Pinned&>);\r\n        static_assert(same_as<decltype(as_const(raco)(TestRange{})), const Pinned&>);\r\n        static_assert(same_as<decltype(move(raco)(TestRange{})), const Pinned&>);\r\n        static_assert(same_as<decltype(move(as_const(raco))(TestRange{})), const Pinned&>);\r\n    }\r\n    {\r\n        auto combined_pipeline = RangeIdentity{} | PinnedReturningRaco{};\r\n\r\n        static_assert(same_as<decltype(TestRange{} | combined_pipeline), const Pinned&>);\r\n        static_assert(same_as<decltype(TestRange{} | as_const(combined_pipeline)), const Pinned&>);\r\n        static_assert(same_as<decltype(TestRange{} | move(combined_pipeline)), const Pinned&>);\r\n        static_assert(same_as<decltype(TestRange{} | move(as_const(combined_pipeline))), const Pinned&>);\r\n\r\n        static_assert(same_as<decltype(combined_pipeline(TestRange{})), const Pinned&>);\r\n        static_assert(same_as<decltype(as_const(combined_pipeline)(TestRange{})), const Pinned&>);\r\n        static_assert(same_as<decltype(move(combined_pipeline)(TestRange{})), const Pinned&>);\r\n        static_assert(same_as<decltype(move(as_const(combined_pipeline))(TestRange{})), const Pinned&>);\r\n    }\r\n    {\r\n        auto weird_pipeline     = ConstOnlyRangeIdentity{} | PinnedReturningRaco{};\r\n        using WeirdPipelineType = decltype(weird_pipeline);\r\n\r\n        static_assert(same_as<decltype(TestRange{} | as_const(weird_pipeline)), const Pinned&>);\r\n        static_assert(same_as<decltype(TestRange{} | move(as_const(weird_pipeline))), const Pinned&>);\r\n\r\n        static_assert(!CanPipe<WeirdPipelineType, TestRange>);\r\n        static_assert(!CanPipe<WeirdPipelineType&, TestRange>);\r\n\r\n        static_assert(same_as<decltype(as_const(weird_pipeline)(TestRange{})), const Pinned&>);\r\n        static_assert(same_as<decltype(move(as_const(weird_pipeline))(TestRange{})), const Pinned&>);\r\n\r\n        static_assert(!invocable<WeirdPipelineType, TestRange>);\r\n        static_assert(!invocable<WeirdPipelineType&, TestRange>);\r\n    }\r\n}\r\n\r\nint main() {\r\n    assert(test_user_defined_adaptors());\r\n    static_assert(test_user_defined_adaptors());\r\n\r\n    assert(test_mixing_of_range_adaptors());\r\n    static_assert(test_mixing_of_range_adaptors());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2401R0_conditional_noexcept_for_exchange/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2401R0_conditional_noexcept_for_exchange/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\n#define NOEXCEPT(...)     static_assert(noexcept(__VA_ARGS__), #__VA_ARGS__ \" should be noexcept\")\r\n#define NOT_NOEXCEPT(...) static_assert(!noexcept(__VA_ARGS__), #__VA_ARGS__ \" should NOT be noexcept\")\r\n\r\nstruct throwing_move_ctor {\r\n    throwing_move_ctor(int) noexcept {}\r\n    throwing_move_ctor(throwing_move_ctor&&) noexcept(false) {}\r\n};\r\n\r\nstruct throwing_move_assign {\r\n    throwing_move_assign(int) noexcept {}\r\n    throwing_move_assign(throwing_move_assign&&) noexcept {}\r\n    throwing_move_assign& operator=(throwing_move_assign&&) noexcept(false) {\r\n        return *this;\r\n    }\r\n};\r\n\r\nstruct throwing_assign_sometimes {\r\n    throwing_assign_sometimes(int) noexcept {}\r\n    throwing_assign_sometimes(throwing_assign_sometimes&&) noexcept {}\r\n    throwing_assign_sometimes& operator=(int&) noexcept(false) {\r\n        return *this;\r\n    }\r\n    throwing_assign_sometimes& operator=(int&&) noexcept(false) {\r\n        return *this;\r\n    }\r\n    throwing_assign_sometimes& operator=(double&) noexcept(false) {\r\n        return *this;\r\n    }\r\n    throwing_assign_sometimes& operator=(double&&) noexcept {\r\n        return *this;\r\n    }\r\n};\r\n\r\nNOEXCEPT(exchange(declval<int&>(), 1729));\r\nNOT_NOEXCEPT(exchange(declval<throwing_move_ctor&>(), throwing_move_ctor{1729}));\r\nNOT_NOEXCEPT(exchange(declval<throwing_move_assign&>(), throwing_move_assign{1729}));\r\nNOT_NOEXCEPT(exchange(declval<throwing_assign_sometimes&>(), declval<int&>()));\r\nNOT_NOEXCEPT(exchange(declval<throwing_assign_sometimes&>(), declval<int>()));\r\nNOT_NOEXCEPT(exchange(declval<throwing_assign_sometimes&>(), declval<double&>()));\r\nNOEXCEPT(exchange(declval<throwing_assign_sometimes&>(), declval<double>()));\r\n"
  },
  {
    "path": "tests/std/tests/P2404R3_move_only_types_for_comparison_concepts/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2404R3_move_only_types_for_comparison_concepts/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <compare>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <memory>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nstruct MoveOnly {\r\n    MoveOnly(int); // not defined\r\n    MoveOnly(const MoveOnly&)            = delete;\r\n    MoveOnly& operator=(const MoveOnly&) = delete;\r\n    MoveOnly(MoveOnly&&)                 = default;\r\n    MoveOnly& operator=(MoveOnly&&)      = default;\r\n\r\n    strong_ordering operator<=>(const MoveOnly&) const = default;\r\n    strong_ordering operator<=>(int) const; // not defined\r\n};\r\n\r\n// Check three_way_comparable_with\r\nstatic_assert(three_way_comparable_with<MoveOnly, int>);\r\nstatic_assert(three_way_comparable_with<int, MoveOnly>);\r\nstatic_assert(three_way_comparable_with<MoveOnly, int, strong_ordering>);\r\nstatic_assert(three_way_comparable_with<int, MoveOnly, strong_ordering>);\r\n\r\n// Check equality_comparable_with\r\nstatic_assert(equality_comparable_with<MoveOnly, int>);\r\nstatic_assert(equality_comparable_with<int, MoveOnly>);\r\nstatic_assert(equality_comparable_with<unique_ptr<int>, nullptr_t>);\r\nstatic_assert(equality_comparable_with<nullptr_t, unique_ptr<int>>);\r\n\r\n// Check totally_ordered_with\r\nstatic_assert(totally_ordered_with<MoveOnly, int>);\r\nstatic_assert(totally_ordered_with<int, MoveOnly>);\r\n\r\n// Check [diff.cpp20.concepts]\r\ntemplate <class T, class U>\r\n    requires equality_comparable_with<T, U>\r\nbool attempted_equals(const T&, const U&); // not defined\r\n\r\ntemplate <class T, class U>\r\n    requires common_reference_with<const remove_reference_t<T>&, const remove_reference_t<U>&>\r\nbool attempted_equals(const T&, const U&); // not defined\r\n\r\ntemplate <class T>\r\nconstexpr bool check_diff_cpp20_concepts = !requires(T p) { attempted_equals(p, nullptr); };\r\n\r\nstatic_assert(check_diff_cpp20_concepts<shared_ptr<int>>);\r\n"
  },
  {
    "path": "tests/std/tests/P2408R5_ranges_iterators_to_classic_algorithms/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2408R5_ranges_iterators_to_classic_algorithms/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <execution>\r\n#include <initializer_list>\r\n#include <ranges>\r\n#include <tuple>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T, class U>\r\nusing second = U;\r\ntemplate <class, class Input>\r\nInput second_v(Input x) {\r\n    return x;\r\n}\r\n\r\ntemplate <class I>\r\nstruct iterator_adaptor {\r\n    vector<int> v;\r\n    iterator_adaptor(initializer_list<int> il) : v(il) {}\r\n    iterator_adaptor(size_t n) : v(n) {}\r\n\r\n    using iterator       = I;\r\n    using const_iterator = I::Consterator;\r\n\r\n    iterator begin() {\r\n        return iterator{v.data()};\r\n    }\r\n    iterator end() {\r\n        return iterator{v.data() + v.size()};\r\n    }\r\n\r\n    const_iterator cbegin() const {\r\n        return const_iterator{v.data()};\r\n    }\r\n    const_iterator cend() const {\r\n        return const_iterator{v.data() + v.size()};\r\n    }\r\n};\r\n\r\ntemplate <class... Is>\r\nstruct helper {\r\n    helper(second<Is, initializer_list<int>>... ils) : tup(ils...) {}\r\n\r\n    helper(initializer_list<int> il)\r\n        requires (sizeof...(Is) > 1)\r\n        : tup(second_v<Is>(il.size())...) {\r\n        get<0>(tup).v.assign(il);\r\n    }\r\n\r\n    tuple<iterator_adaptor<Is>...> tup;\r\n};\r\n\r\ntemplate <size_t Idx, class... Is>\r\nauto hbegin(helper<Is...>& h) {\r\n    return get<Idx>(h.tup).begin();\r\n}\r\ntemplate <size_t Idx, class... Is>\r\nauto hend(helper<Is...>& h) {\r\n    return get<Idx>(h.tup).end();\r\n}\r\n\r\ntemplate <size_t Idx, class... Is>\r\nauto hcbegin(const helper<Is...>& h) {\r\n    return get<Idx>(h.tup).cbegin();\r\n}\r\ntemplate <size_t Idx, class... Is>\r\nauto hcend(const helper<Is...>& h) {\r\n    return get<Idx>(h.tup).cend();\r\n}\r\n\r\ntemplate <class It>\r\nstruct unary_algorithms {\r\n    static void call() {\r\n        if constexpr (forward_iterator<It>) {\r\n            // parallel algorithms\r\n            using execution::seq;\r\n            {\r\n                helper<It> h({1, 2, 3, 4, 5, 6, 7, 8, 9, 10});\r\n                auto res = reduce(seq, hcbegin<0>(h), hcend<0>(h), 0);\r\n                assert(res == 55);\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class I1, class I2>\r\nstruct binary_algorithms {\r\n    static void call() {\r\n        if constexpr (forward_iterator<I1> || _Is_cpp17_fwd_iter_v<I2>) {\r\n            helper<I1, I2> h({0, 0, 1, 2, 3, 3, 4, 5});\r\n            array exp{0, 1, 2, 3, 4, 5};\r\n            auto it = unique_copy(hcbegin<0>(h), hcend<0>(h), hbegin<1>(h));\r\n            assert(equal(hbegin<1>(h), it, exp.begin(), exp.end()));\r\n        }\r\n\r\n        if constexpr (forward_iterator<I1> && forward_iterator<I2>) {\r\n            {\r\n                helper<I1, I2> h{{0, 1, 2, 3, 4, 5}, {5, 4, 3, 2, 1, 0}};\r\n                assert(is_permutation(hcbegin<0>(h), hcend<0>(h), hcbegin<1>(h), hcend<1>(h)));\r\n            }\r\n\r\n            // parallel algorithms\r\n            using execution::seq;\r\n            {\r\n                helper<I1, I2> h{{0, 1, 2, 3, 4, 5}, {0, 1, 3, 4, 5}};\r\n                auto pr = mismatch(seq, hcbegin<0>(h), hcend<0>(h), hcbegin<1>(h), hcend<1>(h));\r\n                assert(distance(hcbegin<0>(h), pr.first) == 2);\r\n                assert(*pr.first == 2);\r\n                assert(*pr.second == 3);\r\n            }\r\n            if constexpr (_Is_cpp17_fwd_iter_v<I2>) {\r\n                helper<I1, I2> h{{0, 1, 2, 3, 4, 5}};\r\n                array expected{0, 1, 2, 4, 5};\r\n                auto it = copy_if(seq, hcbegin<0>(h), hcend<0>(h), hbegin<1>(h), [](int x) { return x != 3; });\r\n                assert(equal(hbegin<1>(h), it, expected.begin(), expected.end()));\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class I1, class I2, class I3>\r\nstruct ternary_algorithms {\r\n    static void call() {\r\n        if constexpr (forward_iterator<I1> && forward_iterator<I2> && forward_iterator<I3>) {\r\n            // parallel algorithms\r\n            using execution::seq;\r\n            if constexpr (_Is_cpp17_fwd_iter_v<I2> && _Is_cpp17_fwd_iter_v<I3>) {\r\n                helper<I1, I2, I3> h{{0, 1, 2, 3, 4, 5}};\r\n                array exp1{0, 1};\r\n                array exp2{2, 3, 4, 5};\r\n                auto pr = partition_copy(\r\n                    seq, hcbegin<0>(h), hcend<0>(h), hbegin<1>(h), hbegin<2>(h), [](int x) { return x < 2; });\r\n                assert(equal(hbegin<1>(h), pr.first, exp1.begin(), exp1.end()));\r\n                assert(equal(hbegin<2>(h), pr.second, exp2.begin(), exp2.end()));\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nusing input_iter  = test::iterator<input_iterator_tag, int, test::CanDifference::no, test::CanCompare::yes>;\r\nusing fwd_iter    = test::iterator<forward_iterator_tag, int>;\r\nusing bidi_iter   = test::iterator<bidirectional_iterator_tag, int>;\r\nusing random_iter = test::iterator<random_access_iterator_tag, int>;\r\nusing cpp17_fwd_iter =\r\n    test::iterator<forward_iterator_tag, int, test::CanDifference::no, test::CanCompare::yes, test::ProxyRef::no>;\r\nusing cpp17_bidi_iter =\r\n    test::iterator<bidirectional_iterator_tag, int, test::CanDifference::no, test::CanCompare::yes, test::ProxyRef::no>;\r\nusing cpp17_random_iter = test::iterator<random_access_iterator_tag, int, test::CanDifference::yes,\r\n    test::CanCompare::yes, test::ProxyRef::no>;\r\n\r\n// Sanity checks\r\nstatic_assert(!_Is_cpp17_fwd_iter_v<input_iter> && !forward_iterator<input_iter>);\r\nstatic_assert(!_Is_cpp17_fwd_iter_v<fwd_iter> && forward_iterator<fwd_iter>);\r\nstatic_assert(!_Is_cpp17_fwd_iter_v<bidi_iter> && bidirectional_iterator<bidi_iter>);\r\nstatic_assert(!_Is_cpp17_fwd_iter_v<random_iter> && random_access_iterator<random_iter>);\r\nstatic_assert(_Is_cpp17_fwd_iter_v<cpp17_fwd_iter> && forward_iterator<cpp17_fwd_iter>);\r\nstatic_assert(_Is_cpp17_bidi_iter_v<cpp17_bidi_iter> && bidirectional_iterator<cpp17_bidi_iter>);\r\nstatic_assert(_Is_cpp17_random_iter_v<cpp17_random_iter> && random_access_iterator<cpp17_random_iter>);\r\n\r\ntemplate <template <class...> class C>\r\nstruct instantiator {\r\n    template <class... Its>\r\n    struct curry_t {\r\n        using curry = instantiator<curry_t>;\r\n\r\n        static void call() {\r\n            C<input_iter, Its...>::call();\r\n            C<fwd_iter, Its...>::call();\r\n            C<bidi_iter, Its...>::call();\r\n            C<random_iter, Its...>::call();\r\n            C<cpp17_fwd_iter, Its...>::call();\r\n            C<cpp17_bidi_iter, Its...>::call();\r\n            C<cpp17_random_iter, Its...>::call();\r\n        }\r\n    };\r\n    using curry = curry_t<>::curry;\r\n\r\n    static void call() {\r\n        curry_t<>::call();\r\n    }\r\n};\r\n\r\nint main() {\r\n    instantiator<unary_algorithms>::call();\r\n    instantiator<binary_algorithms>::curry::call();\r\n    instantiator<ternary_algorithms>::curry::curry::call();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2415R2_owning_view/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2415R2_owning_view/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <memory>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range ImmobileR>\r\n    static constexpr void call() {\r\n        using R = ImmobileR::RebindAsMoveOnly;\r\n        using ranges::owning_view, ranges::begin, ranges::end, ranges::bidirectional_range, ranges::common_range,\r\n            ranges::contiguous_range, ranges::forward_range, ranges::input_range, ranges::random_access_range;\r\n        int input[3] = {0, 1, 2};\r\n\r\n        // properties\r\n        static_assert(ranges::enable_borrowed_range<owning_view<R>> == ranges::enable_borrowed_range<R>);\r\n\r\n        static_assert(ranges::view<owning_view<R>>);\r\n        static_assert(input_range<owning_view<R>>);\r\n        static_assert(forward_range<owning_view<R>> == forward_range<R>);\r\n        static_assert(bidirectional_range<owning_view<R>> == bidirectional_range<R>);\r\n        static_assert(random_access_range<owning_view<R>> == random_access_range<R>);\r\n        static_assert(contiguous_range<owning_view<R>> == contiguous_range<R>);\r\n\r\n        { // constructors and assignment operators\r\n            static_assert(constructible_from<owning_view<R>, R>);\r\n            static_assert(!constructible_from<owning_view<R>, R&>);\r\n            static_assert(!constructible_from<owning_view<R>, const R&>);\r\n            static_assert(!constructible_from<owning_view<R>, const R>);\r\n\r\n            static_assert(default_initializable<owning_view<R>> == default_initializable<R>);\r\n            static_assert(is_nothrow_default_constructible_v<owning_view<R>> == is_nothrow_default_constructible_v<R>);\r\n            if constexpr (default_initializable<R>) {\r\n                [[maybe_unused]] owning_view<R> default_constructed;\r\n            }\r\n\r\n            owning_view<R> converted{R{input}};\r\n            static_assert(is_nothrow_constructible_v<owning_view<R>, R> == is_nothrow_move_constructible_v<R>);\r\n\r\n            owning_view<R> move_constructed = move(converted);\r\n            if constexpr (forward_range<R>) {\r\n                assert(move_constructed.begin().peek() == begin(input));\r\n            }\r\n            assert(move_constructed.end().peek() == end(input));\r\n\r\n            if constexpr (movable<R>) {\r\n                int other_data[3] = {4, 5, 6};\r\n                owning_view<R> move_assigned{R{other_data}};\r\n                move_assigned = move(move_constructed);\r\n                if constexpr (forward_range<R>) {\r\n                    assert(move_assigned.begin().peek() == begin(input));\r\n                }\r\n                assert(move_assigned.end().peek() == end(input));\r\n            }\r\n        }\r\n\r\n        { // access\r\n            owning_view<R> test_view{R{input}};\r\n            same_as<R> auto& base = test_view.base();\r\n            static_assert(noexcept(test_view.base()));\r\n            assert(addressof(base) != nullptr);\r\n\r\n            same_as<const R> auto& cbase = as_const(test_view).base();\r\n            static_assert(noexcept(as_const(test_view).base()));\r\n            assert(addressof(cbase) == addressof(base));\r\n\r\n            same_as<R> auto&& rbase = move(test_view).base();\r\n            static_assert(noexcept(move(test_view).base()));\r\n            assert(addressof(rbase) == addressof(base));\r\n\r\n            same_as<const R> auto&& crbase = move(as_const(test_view)).base();\r\n            static_assert(noexcept(move(as_const(test_view)).base()));\r\n            assert(addressof(crbase) == addressof(base));\r\n        }\r\n\r\n        { // iterators\r\n            {\r\n                owning_view<R> test_view{R{input}};\r\n                same_as<ranges::iterator_t<R>> auto first = test_view.begin();\r\n                static_assert(noexcept(test_view.begin()) == noexcept(declval<R&>().begin()));\r\n                assert(first.peek() == input);\r\n\r\n                const same_as<ranges::sentinel_t<R>> auto last = test_view.end();\r\n                static_assert(noexcept(test_view.end()) == noexcept(declval<R&>().end()));\r\n                assert(last.peek() == end(input));\r\n            }\r\n\r\n            if constexpr (input_range<const R>) {\r\n                const owning_view<R> ctest_view{R{input}};\r\n                same_as<ranges::iterator_t<const R>> auto first = ctest_view.begin();\r\n                static_assert(noexcept(ctest_view.begin()) == noexcept(declval<const R&>().begin()));\r\n                assert(first.peek() == input);\r\n\r\n                const same_as<ranges::sentinel_t<const R>> auto last = ctest_view.end();\r\n                static_assert(noexcept(ctest_view.end()) == noexcept(declval<const R&>().end()));\r\n                assert(last.peek() == end(input));\r\n            }\r\n        }\r\n\r\n#if _HAS_CXX23\r\n        { // const iterators\r\n            {\r\n                owning_view<R> test_view{R{input}};\r\n                same_as<ranges::const_iterator_t<R>> auto first = test_view.cbegin();\r\n                assert(first.base().peek() == input);\r\n\r\n                same_as<ranges::const_sentinel_t<R>> auto last = test_view.cend();\r\n                if constexpr (_Is_specialization_v<decltype(last), basic_const_iterator>) {\r\n                    assert(last.base().peek() == end(input));\r\n                } else {\r\n                    assert(last.peek() == end(input));\r\n                }\r\n            }\r\n\r\n            if constexpr (input_range<const R>) {\r\n                const owning_view<R> ctest_view{R{input}};\r\n                same_as<ranges::const_iterator_t<const R>> auto first = ctest_view.cbegin();\r\n                assert(first.base().peek() == input);\r\n\r\n                same_as<ranges::const_sentinel_t<const R>> auto last = ctest_view.cend();\r\n                if constexpr (_Is_specialization_v<decltype(last), basic_const_iterator>) {\r\n                    assert(last.base().peek() == end(input));\r\n                } else {\r\n                    assert(last.peek() == end(input));\r\n                }\r\n            }\r\n        }\r\n#endif // _HAS_CXX23\r\n\r\n        { // empty\r\n            static_assert(CanMemberEmpty<owning_view<R>> == CanEmpty<R>);\r\n            if constexpr (CanEmpty<R>) {\r\n                owning_view<R> test_view{R{input}};\r\n\r\n                const same_as<bool> auto is_empty = test_view.empty();\r\n                static_assert(noexcept(test_view.empty()) == noexcept(ranges::empty(declval<R>())));\r\n                assert(!is_empty);\r\n\r\n                owning_view<R> empty_view{R{span<int, 0>{}}};\r\n                assert(empty_view.empty());\r\n\r\n                // view_interface::operator bool\r\n                assert(test_view);\r\n                assert(!empty_view);\r\n            }\r\n\r\n            static_assert(CanMemberEmpty<const owning_view<R>> == CanEmpty<const R>);\r\n            if constexpr (CanEmpty<const R>) {\r\n                const owning_view<R> test_view{R{input}};\r\n\r\n                const same_as<bool> auto is_empty = test_view.empty();\r\n                static_assert(noexcept(test_view.empty()) == noexcept(ranges::empty(declval<const R>())));\r\n                assert(!is_empty);\r\n\r\n                owning_view<R> empty_view{R{span<int, 0>{}}};\r\n                assert(empty_view.empty());\r\n\r\n                // view_interface::operator bool\r\n                assert(test_view);\r\n                assert(!empty_view);\r\n            }\r\n        }\r\n\r\n        { // size\r\n            static_assert(CanMemberSize<owning_view<R>> == ranges::sized_range<R>);\r\n            if constexpr (ranges::sized_range<R>) {\r\n                owning_view<R> test_view{R{input}};\r\n\r\n                const same_as<ranges::range_size_t<R>> auto ref_size = test_view.size();\r\n                assert(_To_unsigned_like(ref_size) == ranges::size(input));\r\n\r\n                static_assert(noexcept(test_view.size()) == noexcept(ranges::size(declval<R>())));\r\n            }\r\n\r\n            static_assert(CanMemberSize<const owning_view<R>> == ranges::sized_range<const R>);\r\n            if constexpr (ranges::sized_range<const R>) {\r\n                const owning_view<R> test_view{R{input}};\r\n\r\n                const same_as<ranges::range_size_t<const R>> auto ref_size = test_view.size();\r\n                assert(_To_unsigned_like(ref_size) == ranges::size(input));\r\n\r\n                static_assert(noexcept(test_view.size()) == noexcept(ranges::size(declval<const R>())));\r\n            }\r\n        }\r\n\r\n        { // data\r\n            static_assert(CanMemberData<owning_view<R>> == contiguous_range<R>);\r\n            if constexpr (contiguous_range<R>) {\r\n                owning_view<R> test_view{R{input}};\r\n\r\n                const same_as<int*> auto ptr = test_view.data();\r\n                assert(ptr == input);\r\n\r\n                static_assert(noexcept(test_view.data()) == noexcept(ranges::data(declval<R&>())));\r\n            }\r\n\r\n            static_assert(CanMemberData<const owning_view<R>> == contiguous_range<const R>);\r\n            if constexpr (contiguous_range<const R>) {\r\n                const owning_view<R> test_view{R{input}};\r\n\r\n                const same_as<int*> auto ptr = test_view.data();\r\n                assert(ptr == input);\r\n\r\n                static_assert(noexcept(test_view.data()) == noexcept(ranges::data(declval<const R&>())));\r\n            }\r\n        }\r\n\r\n        // CTAD\r\n        static_assert(same_as<decltype(owning_view{R{input}}), owning_view<R>>);\r\n\r\n        { // view_interface::back, ::front\r\n            static_assert(CanMemberFront<owning_view<R>> == forward_range<R>);\r\n            if constexpr (forward_range<R>) {\r\n                owning_view<R> test_view{R{input}};\r\n                assert(test_view.front() == input[0]);\r\n\r\n                static_assert(CanMemberBack<owning_view<R>> == (bidirectional_range<R> && common_range<R>) );\r\n                if constexpr (bidirectional_range<R> && common_range<R>) {\r\n                    assert(test_view.back() == input[2]);\r\n                }\r\n            }\r\n\r\n            static_assert(CanMemberFront<const owning_view<R>> == forward_range<const R>);\r\n            if constexpr (forward_range<const R>) {\r\n                const owning_view<R> test_view{R{input}};\r\n                assert(test_view.front() == input[0]);\r\n\r\n                static_assert(\r\n                    CanMemberBack<const owning_view<R>> == (bidirectional_range<const R> && common_range<const R>) );\r\n                if constexpr (bidirectional_range<const R> && common_range<const R>) {\r\n                    assert(test_view.back() == input[2]);\r\n                }\r\n            }\r\n        }\r\n\r\n        { // view_interface::operator[]\r\n            static_assert(CanIndex<owning_view<R>> == random_access_range<R>);\r\n            if constexpr (random_access_range<R>) {\r\n                owning_view<R> test_view{R{input}};\r\n                assert(test_view[0] == input[0]);\r\n                assert(test_view[1] == input[1]);\r\n                assert(test_view[2] == input[2]);\r\n            }\r\n\r\n            static_assert(CanIndex<const owning_view<R>> == random_access_range<const R>);\r\n            if constexpr (random_access_range<const R>) {\r\n                const owning_view<R> test_view{R{input}};\r\n                assert(test_view[0] == input[0]);\r\n                assert(test_view[1] == input[1]);\r\n                assert(test_view[2] == input[2]);\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_in<instantiator, int>(), true));\r\n    test_in<instantiator, int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2417R2_constexpr_bitset/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2417R2_constexpr_bitset/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <bitset>\r\n#include <cassert>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\nconstexpr bool test() {\r\n    bitset<5> x50;\r\n    const bitset<5> x51{0xf};\r\n    const bitset<5> x52{0x15};\r\n\r\n    assert(x50.to_ulong() == 0x00);\r\n    assert(x51.to_ulong() == 0x0f);\r\n    assert(x52.to_ulong() == 0x15);\r\n\r\n    // bitset operators\r\n    {\r\n        x50 = x50 | x51;\r\n        assert(x50.to_ulong() == 0x0f);\r\n        x50 = x50 ^ x52;\r\n        assert(x50.to_ulong() == 0x1a);\r\n        x50 = x50 & x51;\r\n        assert(x50.to_ulong() == 0x0a);\r\n        x50 = 0x00;\r\n    }\r\n\r\n    // bit reference\r\n    {\r\n        bitset<5>::reference ref1 = x50[2];\r\n        assert(~ref1);\r\n        const bitset<5>::reference ref2 = ref1;\r\n        assert(~ref2);\r\n        ref1 = true;\r\n        assert(ref1);\r\n        ref1.flip();\r\n        assert(~ref1);\r\n\r\n        x50    = 0x02;\r\n        x50[3] = x50[1];\r\n        assert(x50.to_ulong() == 0x0a);\r\n        x50 = 0x00;\r\n    }\r\n\r\n    // [bitset.cons], constructors\r\n    {\r\n        bitset<5> test_str1(string{\"10101\"});\r\n        bitset<5> test_str2(string{\"ab10101\"}, 2);\r\n        bitset<5> test_str3(string{\"ab10101cd\"}, 2, 5);\r\n        bitset<5> test_str4(string{\"ab1o1o1cd\"}, 2, 5, 'o');\r\n        bitset<5> test_str5(string{\"abxoxoxcd\"}, 2, 5, 'o', 'x');\r\n        assert(test_str1.to_ulong() == 0x15);\r\n        assert(test_str2.to_ulong() == 0x15);\r\n        assert(test_str3.to_ulong() == 0x15);\r\n        assert(test_str4.to_ulong() == 0x15);\r\n        assert(test_str5.to_ulong() == 0x15);\r\n    }\r\n    {\r\n        bitset<5> test_ptr1(\"10101\");\r\n        bitset<5> test_ptr2(\"10101abcd\", 5);\r\n        bitset<5> test_ptr3(\"1o1o1abcd\", 5, 'o');\r\n        bitset<5> test_ptr4(\"xoxoxabcd\", 5, 'o', 'x');\r\n        assert(test_ptr1.to_ulong() == 0x15);\r\n        assert(test_ptr2.to_ulong() == 0x15);\r\n        assert(test_ptr3.to_ulong() == 0x15);\r\n        assert(test_ptr4.to_ulong() == 0x15);\r\n    }\r\n\r\n    // [bitset.members], bitset operations\r\n    {\r\n        x50 |= x51;\r\n        assert(x50.to_ulong() == 0x0f);\r\n        x50 ^= x52;\r\n        assert(x50.to_ulong() == 0x1a);\r\n        x50 &= x51;\r\n        assert(x50.to_ulong() == 0x0a);\r\n        x50 <<= 2;\r\n        assert(x50.to_ulong() == 0x08);\r\n        x50 >>= 3;\r\n        assert(x50.to_ulong() == 0x01);\r\n        x50.set(2);\r\n        assert(x50.to_ulong() == 0x05);\r\n        x50.set(0, false);\r\n        assert(x50.to_ulong() == 0x04);\r\n        x50.set();\r\n        assert(x50.to_ulong() == 0x1f);\r\n        x50.reset(3);\r\n        assert(x50.to_ulong() == 0x17);\r\n        x50.reset();\r\n        assert(x50.to_ulong() == 0x00);\r\n        assert((~x50).to_ulong() == 0x1f);\r\n        assert(x50.to_ulong() == 0x00);\r\n        x50.flip(2);\r\n        assert(x50.to_ulong() == 0x04);\r\n        x50.flip();\r\n        assert(x50.to_ulong() == 0x1b);\r\n\r\n        // element access\r\n        bitset<5>::reference ref1 = x50[1];\r\n\r\n        assert(x50.to_ulong() == 0x1b);\r\n        assert(x50.to_ullong() == 0x1b);\r\n        assert(x50.to_string() == \"11011\");\r\n        assert(x50.to_string('o') == \"11o11\");\r\n        assert(x50.to_string('o', 'x') == \"xxoxx\");\r\n\r\n        assert(x50.count() == 4);\r\n        assert(x50.size() == 5);\r\n\r\n        assert(x50 == x50);\r\n        assert(x50 != x51);\r\n\r\n        assert(x50.test(1));\r\n        assert(!x50.test(2));\r\n        assert(x50.any());\r\n        assert(!x50.all());\r\n        assert(!x50.none());\r\n        x50.reset();\r\n        assert(!x50.any());\r\n        assert(!x50.all());\r\n        assert(x50.none());\r\n        x50.flip();\r\n        assert(x50.any());\r\n        assert(x50.all());\r\n        assert(!x50.none());\r\n\r\n        x50 = x51;\r\n        assert((x50 << 2).to_ulong() == 0x1c);\r\n        assert((x50 >> 2).to_ulong() == 0x03);\r\n    }\r\n\r\n    {\r\n        // bitset<150> stores two full 64-bit words and one partial 64-bit word.\r\n\r\n        // Test to_ulong() and to_ullong() for large bitsets:\r\n        bitset<150> big1{0x1234'5678};\r\n        assert(big1.to_ulong() == 0x1234'5678);\r\n        assert(big1.to_ullong() == 0x1234'5678);\r\n\r\n        bitset<150> big2{0x1234'5678'90ab'cdef};\r\n        assert(big2.to_ullong() == 0x1234'5678'90ab'cdef);\r\n\r\n        // Test is_constant_evaluated() codepaths:\r\n        assert(!big1.none());\r\n        assert(big1.any());\r\n        assert(!big1.all());\r\n\r\n        big1.set();\r\n        assert(!big1.none());\r\n        assert(big1.any());\r\n        assert(big1.all());\r\n\r\n        big1.reset();\r\n        assert(big1.none());\r\n        assert(!big1.any());\r\n        assert(!big1.all());\r\n\r\n        // Test operator==() by setting bits in each word:\r\n        big2.reset();\r\n        assert(big1 == big2);\r\n\r\n        big1[3] = true;\r\n        assert(big1 != big2);\r\n        big2[3] = true;\r\n        assert(big1 == big2);\r\n\r\n        big1[70] = true;\r\n        assert(big1 != big2);\r\n        big2[70] = true;\r\n        assert(big1 == big2);\r\n\r\n        big1[145] = true;\r\n        assert(big1 != big2);\r\n        big2[145] = true;\r\n        assert(big1 == big2);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    static_assert(test());\r\n    assert(test());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2438R2_substr_rvalue/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2438R2_substr_rvalue/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <memory>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#define TEST_ASSERT(...) assert((__VA_ARGS__))\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nclass payloaded_allocator {\r\nprivate:\r\n    int payload_ = 0;\r\n\r\npublic:\r\n    using value_type                             = T;\r\n    using size_type                              = size_t;\r\n    using difference_type                        = ptrdiff_t;\r\n    using propagate_on_container_move_assignment = true_type;\r\n    using propagate_on_container_swap            = true_type;\r\n\r\n    payloaded_allocator() = default;\r\n    constexpr explicit payloaded_allocator(int payload) noexcept : payload_{payload} {}\r\n\r\n    template <class U>\r\n    constexpr payloaded_allocator(const payloaded_allocator<U>& other) noexcept : payload_{other.get_payload()} {}\r\n\r\n    template <class U>\r\n    friend constexpr bool operator==(const payloaded_allocator& lhs, const payloaded_allocator<U>& rhs) noexcept {\r\n        return lhs.get_payload() == rhs.get_payload();\r\n    }\r\n\r\n    constexpr T* allocate(const size_t n) {\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    constexpr void deallocate(T* const p, const size_t n) {\r\n        return allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    constexpr int get_payload() const noexcept {\r\n        return payload_;\r\n    }\r\n};\r\n\r\ntemplate <class CharT>\r\nconsteval auto statically_widen_impl(string_view sv,\r\n#ifdef __cpp_char8_t\r\n    u8string_view svu8,\r\n#endif // __cpp_char8_t\r\n    u16string_view svu16, u32string_view svu32, wstring_view svw) noexcept {\r\n    if constexpr (is_same_v<CharT, char>) {\r\n        return sv;\r\n    }\r\n#ifdef __cpp_char8_t\r\n    else if constexpr (is_same_v<CharT, char8_t>) {\r\n        return svu8;\r\n    }\r\n#endif // __cpp_char8_t\r\n    else if constexpr (is_same_v<CharT, char16_t>) {\r\n        return svu16;\r\n    } else if constexpr (is_same_v<CharT, char32_t>) {\r\n        return svu32;\r\n    } else if constexpr (is_same_v<CharT, wchar_t>) {\r\n        return svw;\r\n    } else {\r\n        static_assert(!is_same_v<CharT, CharT>, \"Invalid character type\");\r\n    }\r\n}\r\n\r\n#ifdef __cpp_char8_t\r\n#define STATICALLY_WIDEN(CT, S) (statically_widen_impl<CT>(S##sv, u8##S##sv, u##S##sv, U##S##sv, L##S##sv))\r\n#else // ^^^ defined(__cpp_char8_t) / !defined(__cpp_char8_t) vvv\r\n#define STATICALLY_WIDEN(CT, S) (statically_widen_impl<CT>(S##sv, u##S##sv, U##S##sv, L##S##sv))\r\n#endif // ^^^ !defined(__cpp_char8_t) ^^^\r\n\r\ntemplate <class CharT>\r\nconstexpr bool test_rvalue_substr() {\r\n    struct str_test_case {\r\n        basic_string_view<CharT> str_view;\r\n        size_t offset;\r\n        size_t count;\r\n    };\r\n\r\n    constexpr str_test_case substring_test_cases[]{\r\n        {STATICALLY_WIDEN(CharT, \"nul\"), 1, 0},\r\n        {STATICALLY_WIDEN(CharT, \"str\"), 1, 2},\r\n        {STATICALLY_WIDEN(CharT, \"ful\"), 0, 3},\r\n        {STATICALLY_WIDEN(CharT, \"Empty\"), 4, 0},\r\n        {STATICALLY_WIDEN(CharT, \"Shorter\"), 5, 2},\r\n        {STATICALLY_WIDEN(CharT, \"Longer\"), 1, 5},\r\n        {STATICALLY_WIDEN(CharT, \"FullStr\"), 0, 7},\r\n        {STATICALLY_WIDEN(CharT, \"Empty substring\"), 12, 0},\r\n        {STATICALLY_WIDEN(CharT, \"Short substring\"), 9, 3},\r\n        {STATICALLY_WIDEN(CharT, \"Mid substring\"), 7, 5},\r\n        {STATICALLY_WIDEN(CharT, \"Longer string\"), 3, 9},\r\n        {STATICALLY_WIDEN(CharT, \"Maximal SSO len\"), 0, 15},\r\n        {STATICALLY_WIDEN(CharT, \"Take an empty substring from a long string\"), 35, 0},\r\n        {STATICALLY_WIDEN(CharT, \"Take a short substring from a long string\"), 21, 2},\r\n        {STATICALLY_WIDEN(CharT, \"Take some substring from a long string\"), 15, 6},\r\n        {STATICALLY_WIDEN(CharT, \"Take a longer substring from a long string\"), 20, 13},\r\n        {STATICALLY_WIDEN(CharT, \"Take a quite longer substring...\"), 10, 20},\r\n        {STATICALLY_WIDEN(CharT, \"Take the whole long string as a substring\"), 0, 41},\r\n    };\r\n\r\n    for (const auto& [str_view, offset, count] : substring_test_cases) {\r\n        using string_type = basic_string<CharT>;\r\n\r\n        const auto substring_view = str_view.substr(offset, count);\r\n        const auto suffix_view    = str_view.substr(offset);\r\n\r\n        // Non-portable implementation details\r\n        constexpr size_t sso_buffer_capacity = basic_string<CharT>{}.capacity();\r\n\r\n        TEST_ASSERT(string_type{string_type{str_view}, offset, count} == substring_view);\r\n        TEST_ASSERT(string_type{str_view}.substr(offset, count) == substring_view);\r\n        TEST_ASSERT(string_type{string_type{str_view}, offset} == suffix_view);\r\n        TEST_ASSERT(string_type{str_view}.substr(offset) == suffix_view);\r\n\r\n        // Test non-portable implementation details\r\n        {\r\n            string_type source_str{str_view};\r\n            const auto old_data = source_str.data();\r\n            string_type dest_str{move(source_str), offset, count};\r\n\r\n            TEST_ASSERT((dest_str.data() == old_data) == (dest_str.size() > sso_buffer_capacity));\r\n        }\r\n\r\n        {\r\n            string_type source_str{str_view};\r\n            const auto old_data = source_str.data();\r\n            string_type dest_str{move(source_str), offset};\r\n\r\n            TEST_ASSERT((dest_str.data() == old_data) == (dest_str.size() > sso_buffer_capacity));\r\n        }\r\n\r\n        {\r\n            string_type source_str{str_view};\r\n            const auto old_data = source_str.data();\r\n            auto dest_str       = move(source_str).substr(offset, count);\r\n\r\n            TEST_ASSERT((dest_str.data() == old_data) == (dest_str.size() > sso_buffer_capacity));\r\n        }\r\n\r\n        // Test non-portable implementation details for stateful allocators\r\n\r\n        using payloaded_string_type = basic_string<CharT, char_traits<CharT>, payloaded_allocator<CharT>>;\r\n\r\n        payloaded_allocator<CharT> non_default_allocator{42};\r\n        {\r\n            payloaded_string_type source_str{str_view};\r\n            const auto old_data = source_str.data();\r\n            payloaded_string_type dest_str{move(source_str), offset, count};\r\n\r\n            TEST_ASSERT((dest_str.data() == old_data) == (dest_str.size() > sso_buffer_capacity));\r\n        }\r\n        {\r\n            payloaded_string_type source_str{str_view, non_default_allocator};\r\n            const auto old_data = source_str.data();\r\n            payloaded_string_type dest_str{move(source_str), offset, count};\r\n\r\n            TEST_ASSERT(dest_str.data() != old_data);\r\n        }\r\n        {\r\n            payloaded_string_type source_str{str_view, non_default_allocator};\r\n            const auto old_data = source_str.data();\r\n            payloaded_string_type dest_str{move(source_str), offset, count, non_default_allocator};\r\n\r\n            TEST_ASSERT((dest_str.data() == old_data) == (dest_str.size() > sso_buffer_capacity));\r\n        }\r\n\r\n        {\r\n            payloaded_string_type source_str{str_view};\r\n            const auto old_data = source_str.data();\r\n            payloaded_string_type dest_str{move(source_str), offset};\r\n\r\n            TEST_ASSERT((dest_str.data() == old_data) == (dest_str.size() > sso_buffer_capacity));\r\n        }\r\n        {\r\n            payloaded_string_type source_str{str_view, non_default_allocator};\r\n            const auto old_data = source_str.data();\r\n            payloaded_string_type dest_str{move(source_str), offset};\r\n\r\n            TEST_ASSERT(dest_str.data() != old_data);\r\n        }\r\n        {\r\n            payloaded_string_type source_str{str_view, non_default_allocator};\r\n            const auto old_data = source_str.data();\r\n            payloaded_string_type dest_str{move(source_str), offset, non_default_allocator};\r\n\r\n            TEST_ASSERT((dest_str.data() == old_data) == (dest_str.size() > sso_buffer_capacity));\r\n        }\r\n\r\n        {\r\n            payloaded_string_type source_str{str_view};\r\n            const auto old_data = source_str.data();\r\n            auto dest_str       = move(source_str).substr(offset, count);\r\n\r\n            TEST_ASSERT((dest_str.data() == old_data) == (dest_str.size() > sso_buffer_capacity));\r\n        }\r\n        {\r\n            payloaded_string_type source_str{str_view, non_default_allocator};\r\n            const auto old_data = source_str.data();\r\n            auto dest_str       = move(source_str).substr(offset, count);\r\n\r\n            TEST_ASSERT(dest_str.data() != old_data);\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(test_rvalue_substr<char>());\r\n#ifdef __cpp_char8_t\r\nstatic_assert(test_rvalue_substr<char8_t>());\r\n#endif // __cpp_char8_t\r\nstatic_assert(test_rvalue_substr<char16_t>());\r\nstatic_assert(test_rvalue_substr<char32_t>());\r\nstatic_assert(test_rvalue_substr<wchar_t>());\r\n\r\nint main() {\r\n    (void) test_rvalue_substr<char>();\r\n#ifdef __cpp_char8_t\r\n    (void) test_rvalue_substr<char8_t>();\r\n#endif // __cpp_char8_t\r\n    (void) test_rvalue_substr<char16_t>();\r\n    (void) test_rvalue_substr<char32_t>();\r\n    (void) test_rvalue_substr<wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2440R1_ranges_alg_shift_left/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2440R1_ranges_alg_shift_left/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct int_wrapper {\r\n    int val                 = 10;\r\n    constexpr int_wrapper() = default;\r\n    constexpr int_wrapper(int x) : val{x} {}\r\n    constexpr int_wrapper(int_wrapper&& that) : val{exchange(that.val, -1)} {}\r\n    constexpr int_wrapper& operator=(int_wrapper&& that) {\r\n        val = exchange(that.val, -1);\r\n        return *this;\r\n    }\r\n    auto operator<=>(const int_wrapper&) const = default;\r\n};\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::shift_left(borrowed<false>{}, 1)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::shift_left(borrowed<true>{}, 1)), ranges::subrange<int*>>);\r\n\r\nstruct instantiator {\r\n    static constexpr int_wrapper expected_result[2] = {12345, 3333};\r\n    static constexpr int_wrapper expected_io[5]     = {12345, 3333, 44, -1, -1};\r\n\r\n    template <ranges::forward_range Rng>\r\n    static constexpr void call() {\r\n        if constexpr (permutable<ranges::iterator_t<Rng>>) {\r\n            using ranges::equal, ranges::iterator_t, ranges::begin, ranges::end;\r\n            {\r\n                int_wrapper io[5] = {13, 55, 44, 12345, 3333};\r\n                Rng range(io);\r\n\r\n                auto result = ranges::shift_left(range, 3);\r\n                static_assert(same_as<decltype(result), ranges::subrange<iterator_t<Rng>>>);\r\n                assert(equal(result, expected_result));\r\n                assert(equal(io, expected_io));\r\n            }\r\n            {\r\n                int_wrapper io[5] = {13, 55, 44, 12345, 3333};\r\n                Rng range(io);\r\n\r\n                auto result = ranges::shift_left(begin(range), end(range), 3);\r\n                static_assert(same_as<decltype(result), ranges::subrange<iterator_t<Rng>>>);\r\n                assert(equal(begin(result), end(result), begin(expected_result), end(expected_result)));\r\n                assert(equal(io, expected_io));\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_fwd<instantiator, int_wrapper>(), true));\r\n    test_fwd<instantiator, int_wrapper>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2440R1_ranges_alg_shift_right/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2440R1_ranges_alg_shift_right/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <ranges>\r\n#include <utility>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct int_wrapper {\r\n    int val                 = 10;\r\n    constexpr int_wrapper() = default;\r\n    constexpr int_wrapper(int x) : val{x} {}\r\n    constexpr int_wrapper(int_wrapper&& that) : val{exchange(that.val, -1)} {}\r\n    constexpr int_wrapper& operator=(int_wrapper&& that) {\r\n        val = exchange(that.val, -1);\r\n        return *this;\r\n    }\r\n    auto operator<=>(const int_wrapper&) const = default;\r\n};\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::shift_right(borrowed<false>{}, 1)), ranges::dangling>);\r\nstatic_assert(same_as<decltype(ranges::shift_right(borrowed<true>{}, 1)), ranges::subrange<int*>>);\r\n\r\nstruct instantiator {\r\n    template <ranges::forward_range Rng>\r\n    static constexpr void call() {\r\n        if constexpr (permutable<ranges::iterator_t<Rng>>) {\r\n            using ranges::equal, ranges::iterator_t, ranges::begin, ranges::end;\r\n            {\r\n                int_wrapper io[5] = {13, 55, 44, 12345, 3333};\r\n                Rng range(io);\r\n\r\n                auto result = ranges::shift_right(range, 2);\r\n                static_assert(same_as<decltype(result), ranges::subrange<iterator_t<Rng>>>);\r\n\r\n                int_wrapper expected_result[3] = {13, 55, 44};\r\n                int_wrapper expected_io[5]     = {-1, -1, 13, 55, 44};\r\n                assert(equal(result, expected_result));\r\n                assert(equal(io, expected_io));\r\n            }\r\n            {\r\n                int_wrapper io[5] = {13, 55, 44, 12345, 3333};\r\n                Rng range(io);\r\n\r\n                auto result = ranges::shift_right(begin(range), end(range), 2);\r\n                static_assert(same_as<decltype(result), ranges::subrange<iterator_t<Rng>>>);\r\n\r\n                int_wrapper expected_result[3] = {13, 55, 44};\r\n                int_wrapper expected_io[5]     = {-1, -1, 13, 55, 44};\r\n                assert(equal(result, expected_result));\r\n                assert(equal(io, expected_io));\r\n            }\r\n            {\r\n                int_wrapper io[5] = {13, 55, 44, 12345, 3333};\r\n                Rng range(io);\r\n\r\n                auto result = ranges::shift_right(begin(range), end(range), 5);\r\n\r\n                int_wrapper expected_io[5] = {13, 55, 44, 12345, 3333};\r\n                assert(equal(result, ranges::empty_view<int_wrapper>{}));\r\n                assert(equal(io, expected_io));\r\n            }\r\n            {\r\n                int_wrapper io[7] = {13, 55, 44, 12345, 3333, 5555, 7777};\r\n                Rng range(io);\r\n\r\n                auto result = ranges::shift_right(begin(range), end(range), 2);\r\n\r\n                int_wrapper expected_result[5] = {13, 55, 44, 12345, 3333};\r\n                assert(equal(result, expected_result));\r\n                assert(equal(begin(io) + 2, end(io), begin(expected_result), end(expected_result)));\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_fwd<instantiator, int_wrapper>(), true));\r\n    test_fwd<instantiator, int_wrapper>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2440R1_ranges_numeric_iota/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2440R1_ranges_numeric_iota/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <numeric>\r\n#include <ranges>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n// Validate that iota_result aliases out_value_result\r\nstatic_assert(same_as<ranges::iota_result<int*, long>, ranges::out_value_result<int*, long>>);\r\n\r\n// Validate dangling story\r\nstatic_assert(same_as<decltype(ranges::iota(borrowed<false>{}, 0L)), ranges::iota_result<ranges::dangling, long>>);\r\nstatic_assert(same_as<decltype(ranges::iota(borrowed<true>{}, 0L)), ranges::iota_result<int*, long>>);\r\n\r\nstruct instantiator {\r\n    template <ranges::output_range<const int&> Out>\r\n    static constexpr void call() {\r\n        using ranges::iterator_t, ranges::iota, ranges::iota_result;\r\n\r\n        {\r\n            int output[] = {13, 42, 1367};\r\n            Out out_wrapper{output};\r\n            same_as<iota_result<iterator_t<Out>, long>> auto result = iota(out_wrapper, 0L);\r\n            assert(result.out == out_wrapper.end());\r\n            assert(result.value == 3L);\r\n            for (int i = 0; i < 3; ++i) {\r\n                assert(i == output[i]);\r\n            }\r\n        }\r\n        {\r\n            int output[] = {13, 42, 1367};\r\n            Out out_wrapper{output};\r\n            same_as<iota_result<iterator_t<Out>, long>> auto result = iota(out_wrapper.begin(), out_wrapper.end(), 0L);\r\n            assert(result.out == out_wrapper.end());\r\n            assert(result.value == 3L);\r\n            for (int i = 0; i < 3; ++i) {\r\n                assert(i == output[i]);\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nint main() {\r\n    static_assert((test_out<instantiator, int>(), true));\r\n    test_out<instantiator, int>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2441R2_views_join_with/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2441R2_views_join_with/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <ranges>\r\n#include <span>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <variant>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\ntemplate <class Rng, class Delimiter>\r\nconcept CanViewJoinWith =\r\n    requires(Rng&& r, Delimiter&& d) { views::join_with(forward<Rng>(r), forward<Delimiter>(d)); };\r\n\r\ntemplate <bool IsElement>\r\nstruct delimiter_view_impl {\r\n    template <class Base, class>\r\n    using apply = ranges::single_view<ranges::range_value_t<Base>>;\r\n};\r\ntemplate <>\r\nstruct delimiter_view_impl<false> {\r\n    template <class, class Delimiter>\r\n    using apply = views::all_t<Delimiter>;\r\n};\r\ntemplate <class Base, class Delimiter>\r\nusing delimiter_view_t =\r\n    delimiter_view_impl<is_convertible_v<Delimiter, ranges::range_value_t<Base>>>::template apply<Base, Delimiter>;\r\n\r\ntemplate <ranges::input_range Outer, class Delimiter, ranges::forward_range Expected>\r\nconstexpr void test_one(Outer&& rng, Delimiter&& delimiter, Expected&& expected) {\r\n    using ranges::join_with_view, ranges::begin, ranges::end, ranges::prev, ranges::input_range, ranges::forward_range,\r\n        ranges::bidirectional_range, ranges::common_range, ranges::iterator_t, ranges::sentinel_t,\r\n        ranges::range_value_t, ranges::range_reference_t;\r\n\r\n    using Inner                     = range_value_t<Outer>;\r\n    constexpr bool deref_is_glvalue = is_reference_v<range_reference_t<Outer>>;\r\n\r\n    using V  = views::all_t<Outer>;\r\n    using DV = delimiter_view_t<Inner, Delimiter>;\r\n    using R  = join_with_view<V, DV>;\r\n\r\n    // Validate type properties\r\n    static_assert(ranges::view<R>);\r\n    static_assert(input_range<R>);\r\n    static_assert(forward_range<R> == (deref_is_glvalue && forward_range<Outer> && forward_range<Inner>) );\r\n    static_assert(bidirectional_range<R>\r\n                  == (deref_is_glvalue && bidirectional_range<Outer> && bidirectional_range<Inner>\r\n                      && common_range<Inner> && bidirectional_range<DV> && common_range<DV>) );\r\n    static_assert(!ranges::random_access_range<R>);\r\n\r\n    // Validate iterator_category\r\n    if constexpr (forward_range<R>) {\r\n        using OuterIter   = iterator_t<Outer>;\r\n        using InnerIter   = iterator_t<range_reference_t<Outer>>;\r\n        using PatternIter = iterator_t<DV>;\r\n        using OuterCat    = iterator_traits<OuterIter>::iterator_category;\r\n        using InnerCat    = iterator_traits<InnerIter>::iterator_category;\r\n        using PatternCat  = iterator_traits<PatternIter>::iterator_category;\r\n\r\n        if constexpr (!is_reference_v<common_reference_t<iter_reference_t<InnerIter>, iter_reference_t<PatternIter>>>) {\r\n            static_assert(same_as<typename iterator_t<R>::iterator_category, input_iterator_tag>);\r\n        } else if constexpr (derived_from<OuterCat, bidirectional_iterator_tag>\r\n                             && derived_from<InnerCat, bidirectional_iterator_tag>\r\n                             && derived_from<PatternCat, bidirectional_iterator_tag>\r\n                             && common_range<range_reference_t<Outer>> && common_range<DV>) {\r\n            static_assert(same_as<typename iterator_t<R>::iterator_category, bidirectional_iterator_tag>);\r\n        } else if constexpr (derived_from<OuterCat, forward_iterator_tag>\r\n                             && derived_from<InnerCat, forward_iterator_tag>\r\n                             && derived_from<PatternCat, forward_iterator_tag>) {\r\n            static_assert(same_as<typename iterator_t<R>::iterator_category, forward_iterator_tag>);\r\n        } else {\r\n            static_assert(same_as<typename iterator_t<R>::iterator_category, input_iterator_tag>);\r\n        }\r\n    }\r\n\r\n    if constexpr (forward_range<const R>) {\r\n        using OuterIter   = iterator_t<const Outer>;\r\n        using InnerIter   = iterator_t<range_reference_t<const Outer>>;\r\n        using PatternIter = iterator_t<const DV>;\r\n        using OuterCat    = iterator_traits<OuterIter>::iterator_category;\r\n        using InnerCat    = iterator_traits<InnerIter>::iterator_category;\r\n        using PatternCat  = iterator_traits<PatternIter>::iterator_category;\r\n\r\n        if constexpr (!is_reference_v<common_reference_t<iter_reference_t<InnerIter>, iter_reference_t<PatternIter>>>) {\r\n            static_assert(same_as<typename iterator_t<const R>::iterator_category, input_iterator_tag>);\r\n        } else if constexpr (derived_from<OuterCat, bidirectional_iterator_tag>\r\n                             && derived_from<InnerCat, bidirectional_iterator_tag>\r\n                             && derived_from<PatternCat, bidirectional_iterator_tag>\r\n                             && common_range<range_reference_t<const Outer>> && common_range<const DV>) {\r\n            static_assert(same_as<typename iterator_t<const R>::iterator_category, bidirectional_iterator_tag>);\r\n        } else if constexpr (derived_from<OuterCat, forward_iterator_tag>\r\n                             && derived_from<InnerCat, forward_iterator_tag>\r\n                             && derived_from<PatternCat, forward_iterator_tag>) {\r\n            static_assert(same_as<typename iterator_t<const R>::iterator_category, forward_iterator_tag>);\r\n        } else {\r\n            static_assert(same_as<typename iterator_t<const R>::iterator_category, input_iterator_tag>);\r\n        }\r\n    }\r\n\r\n    // Validate range adaptor object and range adaptor closure\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Outer>>;\r\n    const auto closure     = views::join_with(delimiter);\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewJoinWith<Outer&, Delimiter&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewJoinWith<Outer&, Delimiter&>) {\r\n        constexpr bool is_noexcept =\r\n            (!is_view || is_nothrow_copy_constructible_v<V>) && is_nothrow_copy_constructible_v<DV>;\r\n\r\n        static_assert(same_as<decltype(views::join_with(rng, delimiter)), R>);\r\n        static_assert(noexcept(views::join_with(rng, delimiter)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | closure), R>);\r\n        static_assert(noexcept(rng | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(\r\n        CanViewJoinWith<const remove_reference_t<Outer>&, Delimiter&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewJoinWith<const remove_reference_t<Outer>&, Delimiter&>) {\r\n        using RC = join_with_view<views::all_t<const remove_reference_t<Outer>&>, DV>;\r\n        constexpr bool is_noexcept =\r\n            (!is_view || is_nothrow_copy_constructible_v<V>) && is_nothrow_copy_constructible_v<DV>;\r\n\r\n        static_assert(same_as<decltype(views::join_with(as_const(rng), delimiter)), RC>);\r\n        static_assert(noexcept(views::join_with(as_const(rng), delimiter)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), RC>);\r\n        static_assert(noexcept(as_const(rng) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(\r\n        CanViewJoinWith<remove_reference_t<Outer>, Delimiter&> == (is_view || movable<remove_reference<Outer>>) );\r\n    if constexpr (CanViewJoinWith<remove_reference_t<Outer>, Delimiter&>) {\r\n        using RS                   = join_with_view<views::all_t<remove_reference_t<Outer>>, DV>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V> && is_nothrow_copy_constructible_v<DV>;\r\n\r\n        static_assert(same_as<decltype(views::join_with(move(rng), delimiter)), RS>);\r\n        static_assert(noexcept(views::join_with(move(rng), delimiter)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | closure), RS>);\r\n        static_assert(noexcept(move(rng) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewJoinWith<const remove_reference_t<Outer>, Delimiter&> == (is_view && copy_constructible<V>) );\r\n    if constexpr (CanViewJoinWith<const remove_reference_t<Outer>, Delimiter&>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V> && is_nothrow_copy_constructible_v<DV>;\r\n\r\n        static_assert(same_as<decltype(views::join_with(move(as_const(rng)), delimiter)), R>);\r\n        static_assert(noexcept(views::join_with(move(as_const(rng)), delimiter)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | closure), R>);\r\n        static_assert(noexcept(move(as_const(rng)) | closure) == is_noexcept);\r\n    }\r\n\r\n    // Validate deduction guide\r\n    same_as<R> auto r = join_with_view{forward<Outer>(rng), forward<Delimiter>(delimiter)};\r\n    assert(ranges::equal(r, expected));\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    const bool is_empty = ranges::empty(expected);\r\n    static_assert(CanEmpty<R> == forward_range<R>);\r\n    static_assert(CanMemberEmpty<R> == CanEmpty<R>);\r\n    static_assert(CanBool<R> == CanEmpty<R>);\r\n    if constexpr (CanMemberEmpty<R>) {\r\n        assert(r.empty() == is_empty);\r\n        assert(static_cast<bool>(r) == !is_empty);\r\n\r\n        static_assert(CanEmpty<const R> == forward_range<const R>);\r\n        static_assert(CanMemberEmpty<const R> == CanEmpty<const R>);\r\n        static_assert(CanBool<const R> == CanEmpty<const R>);\r\n        if constexpr (CanMemberEmpty<const R>) {\r\n            assert(as_const(r).empty() == is_empty);\r\n            assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n        }\r\n    }\r\n\r\n    // Validate join_with_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    static_assert(CanMemberBegin<const R&>\r\n                  == (forward_range<const V> && forward_range<const DV> && is_reference_v<range_reference_t<const V>>\r\n                      && input_range<range_reference_t<const V>>) );\r\n    if (forward_range<R>) { // intentionally not if constexpr\r\n        const auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(*i == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copy_constructible<R>) {\r\n            auto r2       = r;\r\n            const auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n\r\n        static_assert(CanMemberBegin<const R> == CanBegin<const R&>);\r\n        if constexpr (CanMemberBegin<const R>) {\r\n            const same_as<iterator_t<const R>> auto ci = as_const(r).begin();\r\n            if (!is_empty) {\r\n                assert(*ci == *i);\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                const auto r2                               = r;\r\n                const same_as<iterator_t<const R>> auto ci2 = r2.begin();\r\n                if (!is_empty) {\r\n                    assert(*ci2 == *i);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Also validate that join_with_view iterators are default-constructible\r\n    {\r\n        static_assert(is_default_constructible_v<iterator_t<R>>);\r\n        [[maybe_unused]] iterator_t<R> i;\r\n        if constexpr (CanMemberBegin<const R>) {\r\n            static_assert(is_default_constructible_v<iterator_t<const R>>);\r\n            [[maybe_unused]] iterator_t<const R> ci;\r\n        }\r\n    }\r\n\r\n    // Validate join_with_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    static_assert(CanMemberEnd<const R>\r\n                  == (forward_range<const V> && forward_range<const DV> && is_reference_v<range_reference_t<const V>>\r\n                      && input_range<range_reference_t<const V>>) );\r\n    static_assert(common_range<R>\r\n                  == (forward_range<V> && is_reference_v<range_reference_t<V>> && common_range<V>\r\n                      && forward_range<Inner> && common_range<Inner>) );\r\n    static_assert(common_range<const R>\r\n                  == (forward_range<const V> && forward_range<const DV> && is_reference_v<range_reference_t<const V>>\r\n                      && common_range<const V> && forward_range<range_reference_t<const V>>\r\n                      && common_range<range_reference_t<const V>>) );\r\n    const same_as<sentinel_t<R>> auto s = r.end();\r\n    if (!is_empty) {\r\n        if constexpr (bidirectional_range<R> && common_range<R>) {\r\n            assert(*prev(s) == *prev(end(expected)));\r\n\r\n            if constexpr (copyable<V>) {\r\n                auto r2 = r;\r\n                assert(*prev(r2.end()) == *prev(end(expected)));\r\n            }\r\n        }\r\n\r\n        static_assert(CanMemberEnd<const R> == CanEnd<const R&>);\r\n        if constexpr (CanMemberEnd<const R>) {\r\n            const same_as<sentinel_t<const R>> auto cs = as_const(r).end();\r\n            if constexpr (bidirectional_range<R> && common_range<R>) {\r\n                assert(*prev(cs) == *prev(end(expected)));\r\n\r\n                if constexpr (copyable<V>) {\r\n                    const auto r2                               = r;\r\n                    const same_as<sentinel_t<const R>> auto cs2 = r2.end();\r\n                    assert(*prev(cs2) == *prev(end(expected)));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::data\r\n    static_assert(!CanData<R>);\r\n    static_assert(!CanData<const R>);\r\n\r\n    // Validate view_interface::size\r\n    static_assert(!CanSize<R>);\r\n    static_assert(!CanSize<const R>);\r\n\r\n    // Validate view_interface::operator[]\r\n    static_assert(!CanIndex<R>);\r\n    static_assert(!CanIndex<const R>);\r\n\r\n    // Validate view_interface::front and back\r\n    static_assert(CanMemberFront<R> == forward_range<R>);\r\n    static_assert(CanMemberFront<const R> == forward_range<const R>);\r\n    if (!is_empty) {\r\n        if constexpr (CanMemberFront<R>) {\r\n            assert(r.front() == *begin(expected));\r\n        }\r\n\r\n        if constexpr (CanMemberFront<const R>) {\r\n            assert(as_const(r).front() == *begin(expected));\r\n        }\r\n    }\r\n\r\n    static_assert(CanMemberBack<R> == (bidirectional_range<R> && common_range<R>) );\r\n    static_assert(CanMemberBack<const R> == (bidirectional_range<const R> && common_range<const R>) );\r\n    if (!is_empty) {\r\n        if constexpr (CanMemberBack<R>) {\r\n            assert(r.back() == *prev(end(expected)));\r\n        }\r\n\r\n        if constexpr (CanMemberBack<const R>) {\r\n            assert(as_const(r).back() == *prev(end(expected)));\r\n        }\r\n    }\r\n\r\n    // Validate join_with_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V> && forward_range<V>) {\r\n        same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>);\r\n        if (!is_empty) {\r\n            auto bi1 = b1.begin();\r\n            if (!ranges::empty(*bi1)) {\r\n                auto&& inner_first = *bi1;\r\n                assert(*begin(inner_first) == *begin(expected));\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate join_view::base() && (NB: do this last since it leaves r moved-from)\r\n    if (forward_range<V>) { // intentionally not if constexpr\r\n        same_as<V> auto b2 = move(r).base();\r\n        static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>);\r\n        if constexpr (CanEmpty<Inner>) {\r\n            if (!is_empty) {\r\n                auto bi2 = b2.begin();\r\n                if (!ranges::empty(*bi2)) {\r\n                    auto&& inner_first = *bi2;\r\n                    assert(*begin(inner_first) == *begin(expected));\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nconstexpr string_view input[]         = {{}, \"This\"sv, \"is\"sv, {}, \"a\"sv, \"test\"sv, {}, {}};\r\nconstexpr string_view expected_single = \"*This*is**a*test**\";\r\nconstexpr string_view expected_range  = \"*#This*#is*#*#a*#test*#*#\";\r\nconstexpr string_view expected_empty  = \"Thisisatest\";\r\n\r\nstruct instantiator {\r\n    template <ranges::range Inner, ranges::input_range Outer>\r\n    static constexpr void call() {\r\n        static_assert(ranges::size(input) == 8);\r\n\r\n        { // Single-element delimiter\r\n            Inner inner_ranges[] = {Inner{span{input[0]}}, Inner{span{input[1]}}, Inner{span{input[2]}},\r\n                Inner{span{input[3]}}, Inner{span{input[4]}}, Inner{span{input[5]}}, Inner{span{input[6]}},\r\n                Inner{span{input[7]}}};\r\n            Outer r{inner_ranges};\r\n            test_one(r, '*', expected_single);\r\n\r\n            Outer empty{span<Inner, 0>{}};\r\n            test_one(empty, '*', views::empty<char>);\r\n        }\r\n        { // Empty delimiter\r\n            Inner inner_ranges[] = {Inner{span{input[0]}}, Inner{span{input[1]}}, Inner{span{input[2]}},\r\n                Inner{span{input[3]}}, Inner{span{input[4]}}, Inner{span{input[5]}}, Inner{span{input[6]}},\r\n                Inner{span{input[7]}}};\r\n            Outer r{inner_ranges};\r\n            test_one(r, views::empty<char>, expected_empty);\r\n\r\n            Outer empty{span<Inner, 0>{}};\r\n            test_one(empty, views::empty<char>, views::empty<char>);\r\n        }\r\n        { // Range delimiter\r\n            Inner inner_ranges[] = {Inner{span{input[0]}}, Inner{span{input[1]}}, Inner{span{input[2]}},\r\n                Inner{span{input[3]}}, Inner{span{input[4]}}, Inner{span{input[5]}}, Inner{span{input[6]}},\r\n                Inner{span{input[7]}}};\r\n            Outer r{inner_ranges};\r\n            test_one(r, \"*#\"sv, expected_range);\r\n\r\n            Outer empty{span<Inner, 0>{}};\r\n            test_one(empty, \"*#\"sv, views::empty<char>);\r\n        }\r\n#if defined(__clang__) || defined(__EDG__) // TRANSITION, LLVM-60293 and VSO-1900294\r\n        if constexpr (ranges::forward_range<Outer> || ranges::common_range<Outer>)\r\n#endif // ^^^ workaround ^^^\r\n        { // Range-of-rvalue delimiter\r\n            Inner inner_ranges[] = {Inner{span{input[0]}}, Inner{span{input[1]}}, Inner{span{input[2]}},\r\n                Inner{span{input[3]}}, Inner{span{input[4]}}, Inner{span{input[5]}}, Inner{span{input[6]}},\r\n                Inner{span{input[7]}}};\r\n            Outer r{inner_ranges};\r\n            test_one(r | views::as_rvalue, \"*#\"sv | views::as_rvalue, expected_range);\r\n\r\n            Outer empty{span<Inner, 0>{}};\r\n            test_one(empty | views::as_rvalue, \"*#\"sv | views::as_rvalue, views::empty<char>);\r\n        }\r\n    }\r\n};\r\n\r\nenum class RefOrView { reference, view };\r\n\r\ntemplate <class Category, test::CanView IsView, test::Common IsCommon,\r\n    bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing inner_test_range = test::range<Category, const char, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n    test::ProxyRef::no, IsView, test::Copyability::copyable>;\r\n\r\ntemplate <class Category, class Element, RefOrView RV, test::Common IsCommon,\r\n    bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing outer_test_range = test::range<Category, Element, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n    (RV == RefOrView::view ? test::ProxyRef::prvalue : test::ProxyRef::no), test::CanView::yes,\r\n    test::Copyability::copyable>;\r\n\r\nconstexpr bool instantiation_test() {\r\n    // The adaptor is sensitive to:\r\n    // * inner, outer, and pattern range common category (input, forward, bidi)\r\n    // * outer range's reference type referenceness vs. value type viewness\r\n    // * if the inner range models common_range\r\n    // * if the outer range models common_range\r\n    // * if the pattern range models common_range\r\n    // * if both inner and outer iterators are equality_comparable (the defaults for input-non-common and forward\r\n    // suffice to get coverage here)\r\n    using test::CanView, test::Common;\r\n\r\n    instantiator::call<inner_test_range<input_iterator_tag, CanView::no, Common::no>,\r\n        outer_test_range<input_iterator_tag, inner_test_range<input_iterator_tag, CanView::no, Common::no>,\r\n            RefOrView::reference, Common::no>>();\r\n    instantiator::call<inner_test_range<input_iterator_tag, CanView::no, Common::no>,\r\n        outer_test_range<input_iterator_tag, inner_test_range<input_iterator_tag, CanView::no, Common::no>,\r\n            RefOrView::reference, Common::yes>>();\r\n    instantiator::call<inner_test_range<input_iterator_tag, CanView::no, Common::yes>,\r\n        outer_test_range<input_iterator_tag, inner_test_range<input_iterator_tag, CanView::no, Common::yes>,\r\n            RefOrView::reference, Common::no>>();\r\n    instantiator::call<inner_test_range<input_iterator_tag, CanView::no, Common::yes>,\r\n        outer_test_range<input_iterator_tag, inner_test_range<input_iterator_tag, CanView::no, Common::yes>,\r\n            RefOrView::reference, Common::yes>>();\r\n    instantiator::call<inner_test_range<input_iterator_tag, CanView::yes, Common::no>,\r\n        outer_test_range<input_iterator_tag, inner_test_range<input_iterator_tag, CanView::yes, Common::no>,\r\n            RefOrView::view, Common::no>>();\r\n    instantiator::call<inner_test_range<input_iterator_tag, CanView::yes, Common::no>,\r\n        outer_test_range<input_iterator_tag, inner_test_range<input_iterator_tag, CanView::yes, Common::no>,\r\n            RefOrView::view, Common::yes>>();\r\n    instantiator::call<inner_test_range<input_iterator_tag, CanView::yes, Common::yes>,\r\n        outer_test_range<input_iterator_tag, inner_test_range<input_iterator_tag, CanView::yes, Common::yes>,\r\n            RefOrView::view, Common::no>>();\r\n    instantiator::call<inner_test_range<input_iterator_tag, CanView::yes, Common::yes>,\r\n        outer_test_range<input_iterator_tag, inner_test_range<input_iterator_tag, CanView::yes, Common::yes>,\r\n            RefOrView::view, Common::yes>>();\r\n    instantiator::call<inner_test_range<forward_iterator_tag, CanView::no, Common::no>,\r\n        outer_test_range<forward_iterator_tag, inner_test_range<forward_iterator_tag, CanView::no, Common::no>,\r\n            RefOrView::reference, Common::no>>();\r\n    instantiator::call<inner_test_range<forward_iterator_tag, CanView::no, Common::no>,\r\n        outer_test_range<forward_iterator_tag, inner_test_range<forward_iterator_tag, CanView::no, Common::no>,\r\n            RefOrView::reference, Common::yes>>();\r\n    instantiator::call<inner_test_range<forward_iterator_tag, CanView::no, Common::yes>,\r\n        outer_test_range<forward_iterator_tag, inner_test_range<forward_iterator_tag, CanView::no, Common::yes>,\r\n            RefOrView::reference, Common::no>>();\r\n    instantiator::call<inner_test_range<forward_iterator_tag, CanView::no, Common::yes>,\r\n        outer_test_range<forward_iterator_tag, inner_test_range<forward_iterator_tag, CanView::no, Common::yes>,\r\n            RefOrView::reference, Common::yes>>();\r\n    instantiator::call<inner_test_range<forward_iterator_tag, CanView::yes, Common::no>,\r\n        outer_test_range<forward_iterator_tag, inner_test_range<forward_iterator_tag, CanView::yes, Common::no>,\r\n            RefOrView::view, Common::no>>();\r\n    instantiator::call<inner_test_range<forward_iterator_tag, CanView::yes, Common::no>,\r\n        outer_test_range<forward_iterator_tag, inner_test_range<forward_iterator_tag, CanView::yes, Common::no>,\r\n            RefOrView::view, Common::yes>>();\r\n    instantiator::call<inner_test_range<forward_iterator_tag, CanView::yes, Common::yes>,\r\n        outer_test_range<forward_iterator_tag, inner_test_range<forward_iterator_tag, CanView::yes, Common::yes>,\r\n            RefOrView::view, Common::no>>();\r\n    instantiator::call<inner_test_range<forward_iterator_tag, CanView::yes, Common::yes>,\r\n        outer_test_range<forward_iterator_tag, inner_test_range<forward_iterator_tag, CanView::yes, Common::yes>,\r\n            RefOrView::view, Common::yes>>();\r\n    instantiator::call<inner_test_range<bidirectional_iterator_tag, CanView::no, Common::no>,\r\n        outer_test_range<bidirectional_iterator_tag,\r\n            inner_test_range<bidirectional_iterator_tag, CanView::no, Common::no>, RefOrView::reference, Common::no>>();\r\n    instantiator::call<inner_test_range<bidirectional_iterator_tag, CanView::no, Common::no>,\r\n        outer_test_range<bidirectional_iterator_tag,\r\n            inner_test_range<bidirectional_iterator_tag, CanView::no, Common::no>, RefOrView::reference,\r\n            Common::yes>>();\r\n    instantiator::call<inner_test_range<bidirectional_iterator_tag, CanView::no, Common::yes>,\r\n        outer_test_range<bidirectional_iterator_tag,\r\n            inner_test_range<bidirectional_iterator_tag, CanView::no, Common::yes>, RefOrView::reference,\r\n            Common::no>>();\r\n    instantiator::call<inner_test_range<bidirectional_iterator_tag, CanView::no, Common::yes>,\r\n        outer_test_range<bidirectional_iterator_tag,\r\n            inner_test_range<bidirectional_iterator_tag, CanView::no, Common::yes>, RefOrView::reference,\r\n            Common::yes>>();\r\n    instantiator::call<inner_test_range<bidirectional_iterator_tag, CanView::yes, Common::no>,\r\n        outer_test_range<bidirectional_iterator_tag,\r\n            inner_test_range<bidirectional_iterator_tag, CanView::yes, Common::no>, RefOrView::view, Common::no>>();\r\n    instantiator::call<inner_test_range<bidirectional_iterator_tag, CanView::yes, Common::no>,\r\n        outer_test_range<bidirectional_iterator_tag,\r\n            inner_test_range<bidirectional_iterator_tag, CanView::yes, Common::no>, RefOrView::view, Common::yes>>();\r\n    instantiator::call<inner_test_range<bidirectional_iterator_tag, CanView::yes, Common::yes>,\r\n        outer_test_range<bidirectional_iterator_tag,\r\n            inner_test_range<bidirectional_iterator_tag, CanView::yes, Common::yes>, RefOrView::view, Common::no>>();\r\n    instantiator::call<inner_test_range<bidirectional_iterator_tag, CanView::yes, Common::yes>,\r\n        outer_test_range<bidirectional_iterator_tag,\r\n            inner_test_range<bidirectional_iterator_tag, CanView::yes, Common::yes>, RefOrView::view, Common::yes>>();\r\n\r\n    return true;\r\n}\r\n\r\nstruct throwing_iterator {\r\n    struct tag {};\r\n\r\n    throwing_iterator() = default;\r\n    throwing_iterator(int j) : i(j) {}\r\n    throwing_iterator(const throwing_iterator& other) : i(other.i) {\r\n        if (i == 1) {\r\n            throw tag{};\r\n        }\r\n    }\r\n    throwing_iterator& operator=(const throwing_iterator&) = default;\r\n\r\n    using difference_type = ptrdiff_t;\r\n    using value_type      = int;\r\n\r\n    throwing_iterator& operator++() {\r\n        ++i;\r\n        return *this;\r\n    }\r\n    throwing_iterator operator++(int) {\r\n        return throwing_iterator{i++};\r\n    }\r\n    throwing_iterator& operator--() {\r\n        --i;\r\n        return *this;\r\n    }\r\n    throwing_iterator operator--(int) {\r\n        return throwing_iterator{i--};\r\n    }\r\n    int operator*() const {\r\n        return i;\r\n    }\r\n    bool operator==(const throwing_iterator& other) const {\r\n        return i == other.i;\r\n    }\r\n    int i;\r\n};\r\n\r\nvoid test_valueless_iterator() {\r\n    auto r = vector{\"0\"sv, \"\"sv} | views::join_with(ranges::subrange{throwing_iterator{0}, throwing_iterator{2}});\r\n\r\n    auto it = r.begin();\r\n    ++it;\r\n    ++it;\r\n    assert(*it == 1);\r\n    auto it2 = r.begin();\r\n    try {\r\n        it2 = it;\r\n        assert(false);\r\n    } catch (const throwing_iterator::tag&) {\r\n    }\r\n\r\n    try {\r\n        (void) *it2;\r\n        assert(false);\r\n    } catch (const bad_variant_access&) {\r\n    }\r\n    try {\r\n        (void) ++it2;\r\n        assert(false);\r\n    } catch (const bad_variant_access&) {\r\n    }\r\n    try {\r\n        (void) --it2;\r\n        assert(false);\r\n    } catch (const bad_variant_access&) {\r\n    }\r\n    try {\r\n        (void) ranges::iter_move(it2);\r\n        assert(false);\r\n    } catch (const bad_variant_access&) {\r\n    }\r\n}\r\n\r\n// GH-3014 \"<ranges>: list-initialization is misused\"\r\nstruct FakeStr {\r\n    const char* begin() {\r\n        return nullptr;\r\n    }\r\n\r\n    unreachable_sentinel_t end() {\r\n        return {};\r\n    }\r\n};\r\n\r\nvoid test_gh_3014() { // COMPILE-ONLY\r\n    struct FwdRange {\r\n        FakeStr* begin() {\r\n            return nullptr;\r\n        }\r\n\r\n        test::init_list_not_constructible_iterator<FakeStr> begin() const {\r\n            return nullptr;\r\n        }\r\n\r\n        FakeStr* end() {\r\n            return nullptr;\r\n        }\r\n\r\n        test::init_list_not_constructible_sentinel<FakeStr> end() const {\r\n            return nullptr;\r\n        }\r\n    };\r\n\r\n    auto r                                           = FwdRange{} | views::join_with('-');\r\n    [[maybe_unused]] decltype(as_const(r).begin()) i = r.begin(); // Check 'iterator(iterator<!Const> i)'\r\n    [[maybe_unused]] decltype(as_const(r).end()) s   = r.end(); // Check 'sentinel(sentinel<!Const> s)'\r\n}\r\n\r\nconstexpr bool test_lwg3698() {\r\n    // LWG-3698 \"regex_iterator and join_view don't work together very well\"\r\n    struct stashing_iterator {\r\n        using difference_type = int;\r\n        using value_type      = span<const int>;\r\n\r\n        int x = 1;\r\n\r\n        constexpr stashing_iterator& operator++() {\r\n            ++x;\r\n            return *this;\r\n        }\r\n        constexpr void operator++(int) {\r\n            ++x;\r\n        }\r\n        constexpr value_type operator*() const {\r\n            return {&x, &x + 1};\r\n        }\r\n        constexpr bool operator==(default_sentinel_t) const {\r\n            return x > 3;\r\n        }\r\n    };\r\n\r\n    auto r   = ranges::subrange{stashing_iterator{}, default_sentinel} | views::join_with(views::empty<int>);\r\n    auto r2  = r;\r\n    auto it  = r.begin();\r\n    auto it2 = r2.begin();\r\n\r\n    auto itcopy = it;\r\n    it          = ++it2;\r\n    assert(*itcopy == 1);\r\n\r\n    constexpr int expected_ints[] = {1, 2, 3, 5, 7};\r\n    span<const int> intervals[2]  = {{expected_ints + 0, expected_ints + 3}, {expected_ints + 3, expected_ints + 5}};\r\n\r\n    struct intricate_range {\r\n        span<const int>* p;\r\n\r\n        constexpr stashing_iterator begin() {\r\n            return {};\r\n        }\r\n        constexpr default_sentinel_t end() {\r\n            return {};\r\n        }\r\n        constexpr const span<const int>* begin() const {\r\n            return p;\r\n        }\r\n        constexpr const span<const int>* end() const {\r\n            return p + 2;\r\n        }\r\n    };\r\n\r\n    auto jwv = intricate_range{.p = intervals} | views::join_with(views::empty<int>);\r\n    auto cit = as_const(jwv).begin();\r\n    assert(*++cit == 2);\r\n    assert(*--cit == 1);\r\n    assert(ranges::equal(as_const(jwv), expected_ints));\r\n\r\n    return true;\r\n}\r\n\r\nvoid test_lwg3700() { // COMPILE-ONLY\r\n    // LWG-3700 \"The const begin of the join_view family does not require InnerRng to be a range\"\r\n    auto r  = views::iota(0, 5) | views::filter([](auto) { return true; });\r\n    auto j  = views::single(r) | views::join_with(-1);\r\n    using J = decltype(j);\r\n    static_assert(!CanMemberBegin<const J>);\r\n    static_assert(!CanMemberEnd<const J>);\r\n}\r\n\r\n// LWG-4074 \"compatible-joinable-ranges is underconstrained\"\r\n\r\ntemplate <bool CanCommonRead>\r\nstruct ValCommon;\r\n\r\ntemplate <bool CanCommonRead>\r\nstruct RefCommon;\r\n\r\ntemplate <bool CanCommonRead>\r\nstruct ValX {\r\n    operator ValCommon<CanCommonRead>() const;\r\n};\r\n\r\ntemplate <bool CanCommonRead>\r\nstruct RefX {\r\n    operator ValX<CanCommonRead>() const;\r\n    operator RefCommon<CanCommonRead>() const;\r\n};\r\n\r\ntemplate <bool CanCommonRead>\r\nstruct IterX {\r\n    using value_type      = ValX<CanCommonRead>;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    RefX<CanCommonRead> operator*() const;\r\n    IterX& operator++();\r\n    IterX operator++(int);\r\n\r\n    friend bool operator==(const IterX&, const IterX&);\r\n};\r\n\r\ntemplate <bool CanCommonRead>\r\nstruct ValY {\r\n    operator ValCommon<CanCommonRead>() const;\r\n};\r\n\r\ntemplate <bool CanCommonRead>\r\nstruct RefY {\r\n    operator ValY<CanCommonRead>() const;\r\n    operator RefCommon<CanCommonRead>() const;\r\n};\r\n\r\ntemplate <bool CanCommonRead>\r\nstruct IterY {\r\n    using value_type      = ValY<CanCommonRead>;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    RefY<CanCommonRead> operator*() const;\r\n    IterY& operator++();\r\n    IterY operator++(int);\r\n\r\n    friend bool operator==(const IterY&, const IterY&);\r\n};\r\n\r\ntemplate <bool CanCommonRead>\r\nstruct ValCommon {};\r\n\r\ntemplate <bool CanCommonRead>\r\nstruct std::common_type<ValX<CanCommonRead>, ValY<CanCommonRead>> {\r\n    using type = ValCommon<CanCommonRead>;\r\n};\r\ntemplate <bool CanCommonRead>\r\nstruct std::common_type<ValY<CanCommonRead>, ValX<CanCommonRead>> {\r\n    using type = ValCommon<CanCommonRead>;\r\n};\r\n\r\ntemplate <bool CanCommonRead>\r\nstruct RefCommon {\r\n    operator ValCommon<CanCommonRead>() const\r\n        requires CanCommonRead;\r\n};\r\n\r\ntemplate <bool CanCommonRead, template <class> class XQual, template <class> class YQual>\r\n    requires convertible_to<XQual<RefX<CanCommonRead>>, RefCommon<CanCommonRead>>\r\n          && convertible_to<YQual<RefY<CanCommonRead>>, RefCommon<CanCommonRead>>\r\nstruct std::basic_common_reference<RefX<CanCommonRead>, RefY<CanCommonRead>, XQual, YQual> {\r\n    using type = RefCommon<CanCommonRead>;\r\n};\r\n\r\ntemplate <bool CanCommonRead, template <class> class YQual, template <class> class XQual>\r\n    requires convertible_to<YQual<RefY<CanCommonRead>>, RefCommon<CanCommonRead>>\r\n          && convertible_to<XQual<RefX<CanCommonRead>>, RefCommon<CanCommonRead>>\r\nstruct std::basic_common_reference<RefY<CanCommonRead>, RefX<CanCommonRead>, YQual, XQual> {\r\n    using type = RefCommon<CanCommonRead>;\r\n};\r\n\r\nstatic_assert(!CanViewJoinWith<span<ranges::subrange<IterX<false>>>, ranges::subrange<IterY<false>>>);\r\nstatic_assert(CanViewJoinWith<span<ranges::subrange<IterX<true>>>, ranges::subrange<IterY<true>>>);\r\n\r\nstruct NonConstReadableRange {\r\n    const ranges::subrange<IterX<true>>* begin();\r\n    const ranges::subrange<IterX<true>>* end();\r\n\r\n    const ranges::subrange<IterX<false>>* begin() const;\r\n    const ranges::subrange<IterX<false>>* end() const;\r\n};\r\n\r\nstatic_assert(CanViewJoinWith<NonConstReadableRange&, ranges::subrange<IterY<true>>>);\r\nstatic_assert(!CanViewJoinWith<const NonConstReadableRange&, ranges::subrange<IterY<false>>>);\r\n\r\nint main() {\r\n    {\r\n        auto filtered_and_joined =\r\n            vector<vector<int>>{} | views::filter([](auto) { return true; }) | views::join_with(0);\r\n        assert(ranges::empty(filtered_and_joined));\r\n    }\r\n\r\n#ifndef _PREFAST_ // TRANSITION, GH-1030\r\n    static_assert(instantiation_test());\r\n#endif\r\n    instantiation_test();\r\n\r\n    test_valueless_iterator();\r\n\r\n    static_assert(test_lwg3698());\r\n    assert(test_lwg3698());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2442R1_signed128_div_ceil/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2442R1_signed128_div_ceil/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <__msvc_int128.hpp>\r\n#include <cassert>\r\n#include <limits>\r\n\r\nconstexpr void test() {\r\n    using std::_Signed128;\r\n\r\n    assert(_Signed128::_Div_ceil(0, 1) == 0);\r\n    assert(_Signed128::_Div_ceil(1, 1) == 1);\r\n    assert(_Signed128::_Div_ceil(2, 1) == 2);\r\n\r\n    assert(_Signed128::_Div_ceil(116, 3) == 39);\r\n    assert(_Signed128::_Div_ceil(205, 24) == 9);\r\n    assert(_Signed128::_Div_ceil(83, 1) == 83);\r\n    assert(_Signed128::_Div_ceil(240, 13) == 19);\r\n    assert(_Signed128::_Div_ceil(100, 13) == 8);\r\n\r\n    assert(_Signed128::_Div_ceil(149, 147) == 2);\r\n    assert(_Signed128::_Div_ceil(122, 152) == 1);\r\n    assert(_Signed128::_Div_ceil(154, 236) == 1);\r\n    assert(_Signed128::_Div_ceil(163, 251) == 1);\r\n    assert(_Signed128::_Div_ceil(89, 199) == 1);\r\n\r\n    assert(_Signed128::_Div_ceil(1069796746, 23678) == 45182);\r\n    assert(_Signed128::_Div_ceil(1200533627, 8126) == 147740);\r\n    assert(_Signed128::_Div_ceil(1483929008, 31399) == 47261);\r\n    assert(_Signed128::_Div_ceil(40124559, 11161) == 3596);\r\n    assert(_Signed128::_Div_ceil(616936466, 18476) == 33392);\r\n\r\n    assert(_Signed128::_Div_ceil(3823598863U, 26233) == 145756);\r\n    assert(_Signed128::_Div_ceil(1748736303, 60486) == 28912);\r\n    assert(_Signed128::_Div_ceil(3727652564U, 11487) == 324511);\r\n    assert(_Signed128::_Div_ceil(443086302, 51740) == 8564);\r\n    assert(_Signed128::_Div_ceil(2309966593U, 45205) == 51100);\r\n\r\n    assert(_Signed128::_Div_ceil(1688186001, 2331624069U) == 1);\r\n    assert(_Signed128::_Div_ceil(4072558058U, 202653587) == 21);\r\n    assert(_Signed128::_Div_ceil(551570633, 2681152300U) == 1);\r\n    assert(_Signed128::_Div_ceil(3166723164U, 852231237) == 4);\r\n    assert(_Signed128::_Div_ceil(3238568162U, 1640506845) == 2);\r\n\r\n    assert(_Signed128::_Div_ceil(6242708709713706173ULL, 986240334) == 6329804709ULL);\r\n    assert(_Signed128::_Div_ceil(5971429753141872861ULL, 773448951) == 7720522144ULL);\r\n    assert(_Signed128::_Div_ceil(3773313860741815071ULL, 2965323624U) == 1272479615);\r\n    assert(_Signed128::_Div_ceil(5545364762704150466ULL, 264975532) == 20927837076ULL);\r\n    assert(_Signed128::_Div_ceil(3730152929068983090ULL, 2492151938U) == 1496759838);\r\n\r\n    assert(_Signed128::_Div_ceil(10191699552117669113ULL, 3524412433243714339ULL) == 3);\r\n    assert(_Signed128::_Div_ceil(3073175754216384423ULL, 8155635103385767810ULL) == 1);\r\n    assert(_Signed128::_Div_ceil(14454347299931791225ULL, 1125386058911220070ULL) == 13);\r\n    assert(_Signed128::_Div_ceil(13659816168029181560ULL, 5789718827007400904ULL) == 3);\r\n    assert(_Signed128::_Div_ceil(1069287642992917145ULL, 738486755903428333ULL) == 2);\r\n\r\n    assert((_Signed128::_Div_ceil(_Signed128{1329496395917005583ULL, 4825206483521586190ULL}, 2328480880092472314ULL)\r\n            == _Signed128{1332872165572535026ULL, 2}));\r\n    assert(_Signed128::_Div_ceil(_Signed128{9730685006318077192ULL, 7232491004677529961ULL}, 7551609526229071216ULL)\r\n           == 17667215196349628672ULL);\r\n    assert((_Signed128::_Div_ceil(_Signed128{12172154442470927259ULL, 8777428261169746305ULL}, 8637741546317560676ULL)\r\n            == _Signed128{298314676997257110ULL, 1}));\r\n    assert((_Signed128::_Div_ceil(_Signed128{15481671640377153953ULL, 8903114101091695213ULL}, 6090891903637929972ULL)\r\n            == _Signed128{8517035596026637315ULL, 1}));\r\n    assert(_Signed128::_Div_ceil(_Signed128{15743145484066333195ULL, 805665491188157799ULL}, 6585636204170695090ULL)\r\n           == 2256715169835129064ULL);\r\n\r\n    assert(_Signed128::_Div_ceil(_Signed128{10731879507814251049ULL, 3873445590U},\r\n               _Signed128{12450032536891019435ULL, 9105649371241646359ULL})\r\n           == 1);\r\n    assert(_Signed128::_Div_ceil(_Signed128{6629798443635676577ULL, 2327383978U},\r\n               _Signed128{9839716022772647304ULL, 7922581345850742364ULL})\r\n           == 1);\r\n    assert(_Signed128::_Div_ceil(_Signed128{11339831796615584288ULL, 4257443653U},\r\n               _Signed128{4227111794755706639ULL, 670374651106134374ULL})\r\n           == 1);\r\n    assert(_Signed128::_Div_ceil(_Signed128{8670574441769227246ULL, 2507472313U},\r\n               _Signed128{6980882583348139841ULL, 4304389704649692956ULL})\r\n           == 1);\r\n    assert(_Signed128::_Div_ceil(0, _Signed128{6980882583348139841ULL, 4304389704649692956ULL}) == 0);\r\n\r\n    assert(_Signed128::_Div_ceil(_Signed128{6864055997479949219ULL, 8622452334377655874ULL},\r\n               _Signed128{2561354846261717143ULL, 1392383021258532795ULL})\r\n           == 7);\r\n    assert(_Signed128::_Div_ceil(_Signed128{939441510092257833ULL, 520549398019160129ULL},\r\n               _Signed128{2009633185566611151ULL, 8480432536590844791ULL})\r\n           == 1);\r\n    assert(_Signed128::_Div_ceil(_Signed128{10105653851413328809ULL, 6012530092550053736ULL},\r\n               _Signed128{5123113788439280060ULL, 6703818145194006067ULL})\r\n           == 1);\r\n    assert(_Signed128::_Div_ceil(_Signed128{10851415781288494064ULL, 6183428757366606812ULL},\r\n               _Signed128{2541106769657089592ULL, 2041369374582624895ULL})\r\n           == 4);\r\n    assert(_Signed128::_Div_ceil(_Signed128{3797056150347910189ULL, 6463249530114157684ULL},\r\n               _Signed128{12268041577665946814ULL, 7107698248126780543ULL})\r\n           == 1);\r\n\r\n    constexpr _Signed128 mx = std::numeric_limits<_Signed128>::max();\r\n    assert(_Signed128::_Div_ceil(mx, mx) == 1);\r\n    assert(_Signed128::_Div_ceil(mx - 1, mx) == 1);\r\n    assert(_Signed128::_Div_ceil(mx, mx - 1) == 2);\r\n    assert(_Signed128::_Div_ceil(mx, 1) == mx);\r\n    assert(_Signed128::_Div_ceil(mx, 2) == mx / 2 + 1);\r\n}\r\n\r\nint main() {\r\n    static_assert((test(), true));\r\n    test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2442R1_views_chunk/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2442R1_views_chunk/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <sstream>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewChunk = requires(Rng&& r) { views::chunk(forward<Rng>(r), 2); };\r\n\r\nconstexpr auto equal_ranges = [](auto&& left, auto&& right) { return ranges::equal(left, right); };\r\n\r\ntemplate <ranges::input_range Rng, class Expected>\r\nconstexpr bool test_one(Rng&& rng, Expected&& expected) {\r\n    using ranges::bidirectional_range, ranges::common_range, ranges::forward_range, ranges::input_range,\r\n        ranges::random_access_range, ranges::sized_range;\r\n    using ranges::chunk_view, ranges::begin, ranges::end, ranges::equal, ranges::iterator_t, ranges::sentinel_t,\r\n        ranges::prev;\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n\r\n    using V = views::all_t<Rng>;\r\n    using R = chunk_view<V>;\r\n\r\n    static_assert(ranges::view<R>);\r\n    static_assert(forward_range<R> == forward_range<Rng>);\r\n    static_assert(bidirectional_range<R> == bidirectional_range<Rng>);\r\n    static_assert(random_access_range<R> == random_access_range<Rng>);\r\n\r\n    // Validate non-default-initializability\r\n    static_assert(!is_default_constructible_v<R>);\r\n\r\n    // Validate borrowed_range\r\n    static_assert(ranges::borrowed_range<R> == (ranges::borrowed_range<V> && forward_range<V>) );\r\n\r\n    // Validate range adaptor object and range adaptor closure\r\n    constexpr auto closure = views::chunk(2);\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewChunk<Rng&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewChunk<Rng&>) {\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::chunk(rng, 2)), R>);\r\n        static_assert(noexcept(views::chunk(rng, 2)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | closure), R>);\r\n        static_assert(noexcept(rng | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewChunk<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewChunk<const remove_reference_t<Rng>&>) {\r\n        using RC                   = chunk_view<views::all_t<const remove_reference_t<Rng>&>>;\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(!is_default_constructible_v<RC>);\r\n\r\n        static_assert(same_as<decltype(views::chunk(as_const(rng), 2)), RC>);\r\n        static_assert(noexcept(views::chunk(as_const(rng), 2)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), RC>);\r\n        static_assert(noexcept(as_const(rng) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(CanViewChunk<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (CanViewChunk<remove_reference_t<Rng>>) {\r\n        using RS                   = chunk_view<views::all_t<remove_reference_t<Rng>>>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n\r\n        static_assert(!is_default_constructible_v<RS>);\r\n\r\n        static_assert(same_as<decltype(views::chunk(move(rng), 2)), RS>);\r\n        static_assert(noexcept(views::chunk(move(rng), 2)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | closure), RS>);\r\n        static_assert(noexcept(move(rng) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewChunk<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n    if constexpr (CanViewChunk<const remove_reference_t<Rng>>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::chunk(move(as_const(rng)), 2)), R>);\r\n        static_assert(noexcept(views::chunk(move(as_const(rng)), 2)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | closure), R>);\r\n        static_assert(noexcept(move(as_const(rng)) | closure) == is_noexcept);\r\n    }\r\n\r\n    // Validate deduction guide\r\n    same_as<R> auto r   = chunk_view{forward<Rng>(rng), 2};\r\n    const bool is_empty = ranges::empty(expected);\r\n\r\n    // Validate chunk_view::size\r\n    static_assert(CanMemberSize<R> == sized_range<V>);\r\n    if constexpr (CanMemberSize<R>) {\r\n        same_as<_Make_unsigned_like_t<ranges::range_difference_t<V>>> auto s = r.size();\r\n        assert(s == ranges::size(expected));\r\n        static_assert(noexcept(r.size()));\r\n    }\r\n\r\n    static_assert(CanMemberSize<const R> == sized_range<const V>);\r\n    if constexpr (CanMemberSize<const R>) {\r\n        same_as<_Make_unsigned_like_t<ranges::range_difference_t<const V>>> auto s = as_const(r).size();\r\n        assert(s == ranges::size(expected));\r\n        static_assert(noexcept(as_const(r).size()));\r\n    }\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    static_assert(CanMemberEmpty<R> == (sized_range<V> || forward_range<V>) );\r\n    static_assert(CanBool<R> == CanEmpty<R>);\r\n    if constexpr (CanMemberEmpty<R>) {\r\n        assert(r.empty() == is_empty);\r\n        assert(static_cast<bool>(r) == !is_empty);\r\n    } else {\r\n        static_assert(CanEmpty<R> == CanSize<R>);\r\n        if constexpr (CanEmpty<R>) {\r\n            assert(ranges::empty(r) == is_empty);\r\n            assert(static_cast<bool>(r) == !is_empty);\r\n        }\r\n    }\r\n\r\n    static_assert(\r\n        CanMemberEmpty<const R> == ((forward_range<Rng> && sized_range<const V>) || forward_range<const Rng>) );\r\n    static_assert(CanBool<const R> == CanEmpty<const R>);\r\n    if constexpr (CanMemberEmpty<const R>) {\r\n        assert(as_const(r).empty() == is_empty);\r\n        assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n    } else {\r\n        static_assert(CanEmpty<const R> == CanSize<const R>);\r\n        if constexpr (CanEmpty<const R>) {\r\n            assert(ranges::empty(as_const(r)) == is_empty);\r\n            assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n        }\r\n    }\r\n\r\n    // validate content\r\n    assert(equal(r, expected, equal_ranges));\r\n    if (!forward_range<V>) { // intentionally not if constexpr\r\n        return true;\r\n    }\r\n\r\n    // Validate chunk_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    {\r\n        const same_as<iterator_t<R>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(equal(*i, *begin(expected)));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            auto r2                              = r;\r\n            const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(equal(*i2, *i));\r\n            }\r\n        }\r\n    }\r\n\r\n    static_assert(CanMemberBegin<const R> == forward_range<const V>);\r\n    if constexpr (CanMemberBegin<const R>) {\r\n        const same_as<iterator_t<const R>> auto ci = as_const(r).begin();\r\n        if (!is_empty) {\r\n            assert(equal(*ci, *begin(expected)));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            const auto r2                               = r;\r\n            const same_as<iterator_t<const R>> auto ci2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(equal(*ci2, *ci));\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate chunk_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    {\r\n        const same_as<sentinel_t<R>> auto s = r.end();\r\n        assert((r.begin() == s) == is_empty);\r\n        static_assert(\r\n            common_range<R> == (forward_range<V> && common_range<V> && (sized_range<V> || !bidirectional_range<V>) ));\r\n        if constexpr (common_range<R> && bidirectional_range<V>) {\r\n            if (!is_empty) {\r\n                assert(equal(*prev(s), *prev(end(expected))));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(equal(*prev(r2.end()), *prev(end(expected))));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    static_assert(CanMemberEnd<const R> == input_range<const V>);\r\n    if constexpr (CanMemberEnd<const R>) {\r\n        if constexpr (CanMemberBegin<const R>) {\r\n            const same_as<sentinel_t<const R>> auto cs = as_const(r).end();\r\n            assert((r.begin() == cs) == is_empty);\r\n            static_assert(common_range<const R>\r\n                          == (forward_range<const V> && common_range<const V>\r\n                              && (sized_range<const V> || !bidirectional_range<const V>) ));\r\n            if constexpr (common_range<const R> && bidirectional_range<V>) {\r\n                if (!is_empty) {\r\n                    assert(equal(*prev(cs), *prev(end(expected))));\r\n                }\r\n\r\n                if constexpr (copy_constructible<V>) {\r\n                    const auto r2 = r;\r\n                    if (!is_empty) {\r\n                        assert(equal(*prev(r2.end()), *prev(end(expected))));\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            static_assert(same_as<decltype(as_const(r).end()), default_sentinel_t>);\r\n        }\r\n    }\r\n\r\n    if (is_empty) {\r\n        return true;\r\n    }\r\n\r\n    // Validate view_interface::data\r\n    static_assert(!CanData<R>);\r\n    static_assert(!CanData<const R>);\r\n\r\n    // Validate view_interface::operator[]\r\n    static_assert(CanIndex<R> == random_access_range<V>);\r\n    if constexpr (CanIndex<R>) {\r\n        assert(equal(r[0], expected[0]));\r\n    }\r\n\r\n    static_assert(CanIndex<const R> == random_access_range<const V>);\r\n    if constexpr (CanIndex<const R>) {\r\n        assert(equal(as_const(r)[0], expected[0]));\r\n    }\r\n\r\n    // Validate view_interface::front\r\n    static_assert(CanMemberFront<R> == forward_range<V>);\r\n    if constexpr (CanMemberFront<R>) {\r\n        assert(equal(r.front(), *begin(expected)));\r\n    }\r\n\r\n    static_assert(CanMemberFront<const R> == forward_range<const V>);\r\n    if constexpr (CanMemberFront<const R>) {\r\n        assert(equal(as_const(r).front(), *begin(expected)));\r\n    }\r\n\r\n    // Validate view_interface::back\r\n    static_assert(CanMemberBack<R> == (bidirectional_range<V> && common_range<V> && sized_range<V>) );\r\n    if constexpr (CanMemberBack<R>) {\r\n        assert(equal(r.back(), *prev(end(expected))));\r\n    }\r\n\r\n    static_assert(\r\n        CanMemberBack<const R> == (bidirectional_range<const V> && common_range<const V> && sized_range<const V>) );\r\n    if constexpr (CanMemberBack<const R>) {\r\n        assert(equal(as_const(r).back(), *prev(end(expected))));\r\n    }\r\n\r\n    // Validate chunk_view::iterator<NotConst>\r\n    {\r\n        if constexpr (forward_range<R>) {\r\n            [[maybe_unused]] const iterator_t<R> defaulted;\r\n        }\r\n        same_as<iterator_t<R>> auto i = r.begin();\r\n\r\n        if constexpr (forward_range<R>) {\r\n            assert(equal(*i++, expected[0]));\r\n        } else {\r\n            i++;\r\n        }\r\n        assert(equal(*++i, expected[2]));\r\n\r\n        if constexpr (bidirectional_range<R>) {\r\n            assert(equal(*i--, expected[2]));\r\n            assert(equal(*--i, expected[0]));\r\n        }\r\n\r\n        if constexpr (random_access_range<R>) {\r\n            i += 2;\r\n            assert(equal(*i, expected[2]));\r\n\r\n            i -= 2;\r\n            assert(equal(*i, expected[0]));\r\n\r\n            assert(equal(i[2], expected[2]));\r\n\r\n            const same_as<iterator_t<R>> auto i2 = i + 2;\r\n            assert(equal(*i2, expected[2]));\r\n\r\n            const same_as<iterator_t<R>> auto i3 = 2 + i;\r\n            assert(equal(*i3, expected[2]));\r\n\r\n            const same_as<iterator_t<R>> auto i4 = i3 - 2;\r\n            assert(equal(*i4, expected[0]));\r\n\r\n            const same_as<ranges::range_difference_t<V>> auto diff1 = i2 - i;\r\n            assert(diff1 == 2);\r\n\r\n            const same_as<ranges::range_difference_t<V>> auto diff2 = i - i2;\r\n            assert(diff2 == -2);\r\n\r\n            // comparisons\r\n            assert(i == i4);\r\n            assert(i != i2);\r\n\r\n            assert(i < i2);\r\n            assert(i <= i2);\r\n            assert(i2 > i);\r\n            assert(i2 >= i);\r\n\r\n            if constexpr (three_way_comparable<iterator_t<V>>) {\r\n                assert(i <=> i4 == strong_ordering::equal);\r\n                assert(i <=> i2 == strong_ordering::less);\r\n                assert(i2 <=> i == strong_ordering::greater);\r\n            }\r\n        }\r\n\r\n        if constexpr (!common_range<R>) {\r\n            if constexpr (forward_range<R>) {\r\n                [[maybe_unused]] const sentinel_t<R> sentinel_defaulted;\r\n            }\r\n\r\n            const auto i2   = r.begin();\r\n            const auto sen  = r.end();\r\n            const auto size = ranges::ssize(expected);\r\n\r\n            if constexpr (forward_range<R>) {\r\n                assert(next(r.begin(), size) == sen);\r\n            }\r\n            assert(i2 != sen);\r\n\r\n            if constexpr (sized_sentinel_for<sentinel_t<R>, iterator_t<R>>) {\r\n                const same_as<ranges::range_difference_t<V>> auto diff3 = i2 - sen;\r\n                assert(diff3 == -size);\r\n\r\n                const same_as<ranges::range_difference_t<V>> auto diff4 = sen - i2;\r\n                assert(diff4 == size);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate chunk_view::iterator<Const>\r\n    if constexpr (CanMemberBegin<const R>) {\r\n        [[maybe_unused]] const iterator_t<const R> const_defaulted;\r\n        auto i{r.begin()};\r\n        auto ci{as_const(r).begin()};\r\n\r\n        assert(equal(*ci++, expected[0]));\r\n        assert(equal(*++ci, expected[2]));\r\n\r\n        if constexpr (bidirectional_range<const R>) {\r\n            assert(equal(*ci--, expected[2]));\r\n            assert(equal(*--ci, expected[0]));\r\n        }\r\n\r\n        if constexpr (random_access_range<const R>) {\r\n            ci += 2;\r\n            assert(equal(*ci, expected[2]));\r\n\r\n            ci -= 2;\r\n            assert(equal(*ci, expected[0]));\r\n\r\n            assert(equal(ci[2], expected[2]));\r\n\r\n            const same_as<iterator_t<const R>> auto ci2 = ci + 2;\r\n            assert(equal(*ci2, expected[2]));\r\n\r\n            const same_as<iterator_t<const R>> auto ci3 = 2 + ci;\r\n            assert(equal(*ci3, expected[2]));\r\n\r\n            const same_as<iterator_t<const R>> auto ci4 = ci3 - 2;\r\n            assert(equal(*ci4, expected[0]));\r\n\r\n            const same_as<ranges::range_difference_t<V>> auto diff1 = ci2 - ci;\r\n            assert(diff1 == 2);\r\n\r\n            const same_as<ranges::range_difference_t<V>> auto diff2 = ci - ci2;\r\n            assert(diff2 == -2);\r\n\r\n            // comparisons\r\n            assert(ci == ci4);\r\n            assert(ci != ci2);\r\n\r\n            assert(ci < ci2);\r\n            assert(ci <= ci2);\r\n            assert(ci2 > ci);\r\n            assert(ci2 >= ci);\r\n\r\n            // cross comparisons\r\n            assert(ci == i);\r\n            assert(ci2 != i);\r\n\r\n            assert(i < ci2);\r\n            assert(i <= ci2);\r\n            assert(ci2 > i);\r\n            assert(ci2 >= i);\r\n\r\n            if constexpr (three_way_comparable<iterator_t<const V>>) {\r\n                assert(ci <=> ci4 == strong_ordering::equal);\r\n                assert(ci <=> ci2 == strong_ordering::less);\r\n                assert(ci2 <=> ci == strong_ordering::greater);\r\n            }\r\n        }\r\n\r\n        if constexpr (!common_range<const R>) {\r\n            [[maybe_unused]] const sentinel_t<const R> sentinel_defaulted;\r\n\r\n            const auto i2   = as_const(r).begin();\r\n            const auto sen  = r.end();\r\n            const auto size = ranges::ssize(expected);\r\n\r\n            assert(next(i2, size) == sen);\r\n            assert(i2 != sen);\r\n\r\n            if constexpr (sized_sentinel_for<sentinel_t<const R>, iterator_t<const R>>) {\r\n                const same_as<ranges::range_difference_t<const V>> auto diff3 = i2 - sen;\r\n                assert(diff3 == -size);\r\n\r\n                const same_as<ranges::range_difference_t<const V>> auto diff4 = sen - i2;\r\n                assert(diff4 == size);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate chunk_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V>) {\r\n        same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>);\r\n        assert(*b1.begin() == *begin(*begin(expected)));\r\n    }\r\n\r\n    // Validate chunk_view::base() && (NB: do this last since it leaves r moved-from)\r\n    same_as<V> auto b2 = move(r).base();\r\n    static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>);\r\n    if (!is_empty) {\r\n        assert(*b2.begin() == *begin(*begin(expected)));\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6};\r\nstatic constexpr span<const int> wrapped{some_ints};\r\nstatic constexpr span<const int> chunks_of_two[] = {\r\n    wrapped.subspan(0, 2), wrapped.subspan(2, 2), wrapped.subspan(4, 2), wrapped.subspan(6, 1)};\r\n\r\ntemplate <ranges::input_range Rng, class Expected>\r\nconstexpr bool test_input(Rng&& rng, Expected&& expected) {\r\n    using ranges::chunk_view, ranges::equal, ranges::iterator_t, ranges::sentinel_t;\r\n\r\n    using V  = views::all_t<Rng>;\r\n    using BI = iterator_t<V>;\r\n    using R  = chunk_view<V>;\r\n\r\n    same_as<R> auto r = chunk_view{forward<Rng>(rng), 2};\r\n    auto outer_iter   = r.begin();\r\n\r\n    auto val_ty = *outer_iter;\r\n    if constexpr (sized_sentinel_for<sentinel_t<Rng>, iterator_t<Rng>>) {\r\n        const same_as<_Make_unsigned_like_t<ranges::range_difference_t<V>>> auto s = val_ty.size(); // test LWG-3707\r\n        assert(s == 2);\r\n    }\r\n\r\n    auto inner_iter                            = val_ty.begin();\r\n    same_as<default_sentinel_t> auto inner_sen = val_ty.end();\r\n\r\n    { // Check iter_move (other tests are defined in 'test_lwg3851' function)\r\n        same_as<ranges::range_rvalue_reference_t<Rng>> decltype(auto) rval = iter_move(as_const(inner_iter));\r\n        assert(rval == expected[0][0]);\r\n        static_assert(noexcept(iter_move(inner_iter)) == noexcept(ranges::iter_move(declval<const BI&>())));\r\n    }\r\n\r\n    if constexpr (indirectly_swappable<BI>) { // Check iter_swap (other tests are defined in 'test_lwg3851' function)\r\n        static_assert(is_void_v<decltype(iter_swap(as_const(inner_iter), as_const(inner_iter)))>);\r\n        static_assert(noexcept(iter_swap(inner_iter, inner_iter))\r\n                      == noexcept(ranges::iter_swap(declval<const BI&>(), declval<const BI&>())));\r\n    }\r\n\r\n    assert(inner_iter != inner_sen);\r\n    if constexpr (sized_sentinel_for<sentinel_t<Rng>, iterator_t<Rng>>) {\r\n        assert(inner_sen - inner_iter == 2);\r\n        assert(inner_iter - inner_sen == -2);\r\n    }\r\n\r\n    ++inner_iter;\r\n    if constexpr (sized_sentinel_for<sentinel_t<Rng>, iterator_t<Rng>>) {\r\n        assert(inner_sen - inner_iter == 1);\r\n        assert(inner_iter - inner_sen == -1);\r\n    }\r\n\r\n    inner_iter++;\r\n    if constexpr (sized_sentinel_for<sentinel_t<Rng>, iterator_t<Rng>>) {\r\n        assert(inner_sen - inner_iter == 0);\r\n        assert(inner_iter - inner_sen == 0);\r\n    }\r\n    assert(inner_iter == inner_sen);\r\n\r\n    outer_iter++;\r\n    assert(equal(*outer_iter, expected[1]));\r\n    ++outer_iter;\r\n    assert(equal(*outer_iter, expected[2]));\r\n    ++outer_iter;\r\n\r\n    same_as<default_sentinel_t> auto outer_sen = r.end();\r\n    assert(outer_sen != outer_iter);\r\n\r\n    if constexpr (sized_sentinel_for<sentinel_t<Rng>, iterator_t<Rng>>) {\r\n        assert(outer_sen - outer_iter == 1);\r\n        assert(outer_iter - outer_sen == -1);\r\n    }\r\n\r\n    ++outer_iter;\r\n    assert(outer_sen == outer_iter);\r\n\r\n    return true;\r\n}\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        R r{some_ints};\r\n        test_one(r, chunks_of_two);\r\n\r\n        if constexpr (!ranges::forward_range<R>) {\r\n            R r2{some_ints};\r\n            test_input(r2, chunks_of_two);\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <test::CanDifference Difference>\r\nusing test_input_range = test::range<input_iterator_tag, const int, test::Sized::yes, Difference, test::Common::yes,\r\n    test::CanCompare::yes, test::ProxyRef::no>;\r\n\r\ntemplate <class Category, test::Common IsCommon, test::Sized IsSized>\r\nusing test_range =\r\n    test::range<Category, const int, IsSized, test::CanDifference{derived_from<Category, random_access_iterator_tag>},\r\n        IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n        test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nconstexpr void instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_in<instantiator, const int>();\r\n#else // ^^^ test all input range permutations / test only \"interesting\" permutations vvv\r\n    using test::CanDifference, test::Common, test::Sized;\r\n\r\n    // When the base range is an input range,\r\n    // the view is sensitive to differencing.\r\n    instantiator::call<test_input_range<CanDifference::yes>>();\r\n    instantiator::call<test_input_range<CanDifference::no>>();\r\n\r\n    // When the base range is a forward range,\r\n    // the view is sensitive to category, commonality, and size, but oblivious to differencing and proxyness.\r\n    instantiator::call<test_range<input_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, Sized::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes, Sized::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes, Sized::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes, Sized::no>>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\n// Check LWG-3851: 'chunk_view::inner-iterator missing custom iter_move and iter_swap'\r\nvoid test_lwg3851() {\r\n    { // Check 'iter_move'\r\n        istringstream ints{\"0 1 2 3 4\"};\r\n        auto v = views::istream<int>(ints) | views::chunk(2);\r\n        auto o = v.begin();\r\n        auto c = *o;\r\n        auto i = c.begin();\r\n\r\n        same_as<int&&> decltype(auto) rval = iter_move(i);\r\n        assert(rval == 0);\r\n    }\r\n\r\n    { // Check 'iter_swap'\r\n        istringstream ints1{\"0 1 2 3 4\"};\r\n        auto v1 = views::istream<int>(ints1) | views::chunk(2);\r\n        auto o1 = v1.begin();\r\n        auto c1 = *o1;\r\n        auto i1 = c1.begin();\r\n\r\n        istringstream ints2{\"5 6 7 8 9\"};\r\n        auto v2 = views::istream<int>(ints2) | views::chunk(2);\r\n        auto o2 = v2.begin();\r\n        auto c2 = *o2;\r\n        auto i2 = c2.begin();\r\n\r\n        iter_swap(as_const(i1), as_const(i2));\r\n        assert(*i1 == 5);\r\n        assert(*i2 == 0);\r\n    }\r\n}\r\n\r\nint main() {\r\n    { // Validate views\r\n        // ... copyable\r\n        constexpr span<const int> s{some_ints};\r\n        static_assert(test_one(s, chunks_of_two));\r\n        test_one(s, chunks_of_two);\r\n    }\r\n\r\n    { // ... move-only\r\n        test_one(move_only_view<input_iterator_tag, test::Common::no>{some_ints}, chunks_of_two);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, chunks_of_two);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, chunks_of_two);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, chunks_of_two);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, chunks_of_two);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, chunks_of_two);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, chunks_of_two);\r\n    }\r\n\r\n    { // Validate non-views\r\n        static_assert(test_one(some_ints, chunks_of_two));\r\n        test_one(some_ints, chunks_of_two);\r\n    }\r\n    {\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_one(vec, chunks_of_two);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_one(lst, chunks_of_two);\r\n    }\r\n\r\n    { // empty range\r\n        static_assert(test_one(span<const int, 0>{}, span<span<const int>>{}));\r\n        test_one(span<const int, 0>{}, span<span<const int>>{});\r\n    }\r\n\r\n    static_assert((instantiation_test(), true));\r\n    instantiation_test();\r\n\r\n    test_lwg3851();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2442R1_views_chunk_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\strict_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2442R1_views_chunk_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <ranges>\r\n#include <span>\r\n\r\n#include <range_algorithm_support.hpp>\r\n#include <test_death.hpp>\r\nusing namespace std;\r\nusing ranges::chunk_view;\r\n\r\nusing test_range = test::range<input_iterator_tag, const int, test::Sized::yes, test::CanDifference::yes,\r\n    test::Common::yes, test::CanCompare::yes, test::ProxyRef::no>;\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3};\r\n\r\nvoid test_view_negative_size_forward_range() {\r\n    auto r                  = span<const int>{some_ints};\r\n    [[maybe_unused]] auto v = chunk_view(r, -1); // chunk size must be greater than 0\r\n}\r\n\r\nvoid test_view_negative_size_input_range() {\r\n    auto r                  = test_range{some_ints};\r\n    [[maybe_unused]] auto v = chunk_view(r, -1); // chunk size must be greater than 0\r\n}\r\n\r\nvoid test_outer_iterator_preincrement_past_end() {\r\n    auto r  = test_range{some_ints};\r\n    auto v  = chunk_view(r, 4);\r\n    auto it = v.begin();\r\n    ++it;\r\n    ++it; // cannot increment chunk_view end iterator\r\n}\r\n\r\nvoid test_outer_iterator_postincrement_past_end() {\r\n    auto r  = test_range{some_ints};\r\n    auto v  = chunk_view(r, 4);\r\n    auto it = v.begin();\r\n    it++;\r\n    it++; // cannot increment chunk_view end iterator\r\n}\r\n\r\nvoid test_inner_iterator_preincrement_past_end() {\r\n    auto r  = test_range{some_ints};\r\n    auto v  = chunk_view(r, 1);\r\n    auto it = (*v.begin()).begin();\r\n    ++it;\r\n    ++it; // cannot increment chunk_view end iterator\r\n}\r\n\r\nvoid test_inner_iterator_postincrement_past_end() {\r\n    auto r  = test_range{some_ints};\r\n    auto v  = chunk_view(r, 1);\r\n    auto it = (*v.begin()).begin();\r\n    it++;\r\n    it++; // cannot increment chunk_view end iterator\r\n}\r\n\r\nvoid test_outer_iterator_dereference_at_end() {\r\n    auto r  = test_range{some_ints};\r\n    auto v  = chunk_view(r, 4);\r\n    auto it = v.begin();\r\n    ++it;\r\n    (void) *it; // cannot dereference chunk_view end iterator\r\n}\r\n\r\nvoid test_inner_iterator_dereference_at_end() {\r\n    auto r  = test_range{some_ints};\r\n    auto v  = chunk_view(r, 1);\r\n    auto it = (*v.begin()).begin();\r\n    it++;\r\n    (void) *it; // cannot dereference chunk_view end iterator\r\n}\r\n\r\nvoid test_fwd_iterator_advance_past_end() {\r\n    auto v  = chunk_view{span{some_ints}, 2};\r\n    auto it = v.begin();\r\n    it += 5; // cannot advance chunk_view iterator past end\r\n}\r\n\r\nvoid test_fwd_iterator_advance_past_end_with_integer_overflow() {\r\n    auto v  = chunk_view{span{some_ints}, 2};\r\n    auto it = v.begin();\r\n    it += (numeric_limits<ptrdiff_t>::max)() / 2; // cannot advance chunk_view iterator past end (integer overflow)\r\n}\r\n\r\nvoid test_fwd_iterator_advance_negative_min() {\r\n    auto v  = chunk_view{span{some_ints}, 2};\r\n    auto it = v.begin();\r\n    it -= (numeric_limits<ptrdiff_t>::min)(); // cannot advance chunk_view iterator past end (integer overflow)\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_view_negative_size_forward_range,\r\n        test_view_negative_size_input_range,\r\n        test_outer_iterator_preincrement_past_end,\r\n        test_outer_iterator_postincrement_past_end,\r\n        test_inner_iterator_preincrement_past_end,\r\n        test_inner_iterator_postincrement_past_end,\r\n        test_outer_iterator_dereference_at_end,\r\n        test_inner_iterator_dereference_at_end,\r\n        test_fwd_iterator_advance_past_end,\r\n        test_fwd_iterator_advance_past_end_with_integer_overflow,\r\n        test_fwd_iterator_advance_negative_min,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2442R1_views_slide/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2442R1_views_slide/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewSlide = requires(Rng&& r) { views::slide(forward<Rng>(r), 4); };\r\n\r\nconstexpr auto equal_ranges = [](auto&& left, auto&& right) { return ranges::equal(left, right); };\r\n\r\ntemplate <ranges::forward_range Rng, class Expected>\r\nconstexpr bool test_one(Rng&& rng, Expected&& expected) {\r\n    using ranges::bidirectional_range, ranges::common_range, ranges::random_access_range, ranges::sized_range;\r\n    using ranges::slide_view, ranges::begin, ranges::end, ranges::equal, ranges::iterator_t, ranges::sentinel_t,\r\n        ranges::prev;\r\n    constexpr bool is_view              = ranges::view<remove_cvref_t<Rng>>;\r\n    constexpr bool caches_nothing       = random_access_range<Rng> && sized_range<Rng>;\r\n    constexpr bool caches_last          = !caches_nothing && bidirectional_range<Rng> && common_range<Rng>;\r\n    constexpr bool caches_first         = !caches_nothing && !caches_last;\r\n    constexpr bool caches_nothing_const = random_access_range<const Rng> && sized_range<const Rng>;\r\n\r\n    using V = views::all_t<Rng>;\r\n    using R = slide_view<V>;\r\n\r\n    static_assert(ranges::view<R>);\r\n    static_assert(ranges::forward_range<R>);\r\n    static_assert(bidirectional_range<R> == bidirectional_range<Rng>);\r\n    static_assert(random_access_range<R> == random_access_range<Rng>);\r\n\r\n    // Validate non-default-initializability\r\n    static_assert(!is_default_constructible_v<R>);\r\n\r\n    // Validate borrowed_range\r\n    static_assert(ranges::borrowed_range<R> == ranges::borrowed_range<V>);\r\n\r\n    // Validate range adaptor object and range adaptor closure\r\n    constexpr auto closure = views::slide(4);\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewSlide<Rng&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewSlide<Rng&>) {\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::slide(rng, 4)), R>);\r\n        static_assert(noexcept(views::slide(rng, 4)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | closure), R>);\r\n        static_assert(noexcept(rng | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewSlide<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewSlide<const remove_reference_t<Rng>&>) {\r\n        using RC                   = slide_view<views::all_t<const remove_reference_t<Rng>&>>;\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(!is_default_constructible_v<RC>);\r\n\r\n        static_assert(same_as<decltype(views::slide(as_const(rng), 4)), RC>);\r\n        static_assert(noexcept(views::slide(as_const(rng), 4)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), RC>);\r\n        static_assert(noexcept(as_const(rng) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(CanViewSlide<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (CanViewSlide<remove_reference_t<Rng>>) {\r\n        using RS                   = slide_view<views::all_t<remove_reference_t<Rng>>>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n\r\n        static_assert(!is_default_constructible_v<RS>);\r\n\r\n        static_assert(same_as<decltype(views::slide(move(rng), 4)), RS>);\r\n        static_assert(noexcept(views::slide(move(rng), 4)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | closure), RS>);\r\n        static_assert(noexcept(move(rng) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewSlide<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n    if constexpr (CanViewSlide<const remove_reference_t<Rng>>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::slide(move(as_const(rng)), 4)), R>);\r\n        static_assert(noexcept(views::slide(move(as_const(rng)), 4)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | closure), R>);\r\n        static_assert(noexcept(move(as_const(rng)) | closure) == is_noexcept);\r\n    }\r\n\r\n    // Validate deduction guide\r\n    same_as<R> auto r = slide_view{forward<Rng>(rng), 4};\r\n    assert(equal(r, expected, equal_ranges));\r\n    const bool is_empty = ranges::empty(expected);\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    static_assert(CanMemberEmpty<R>);\r\n    static_assert(CanBool<R>);\r\n    assert(r.empty() == is_empty);\r\n    assert(static_cast<bool>(r) == !is_empty);\r\n\r\n    static_assert(CanMemberEmpty<const R> == caches_nothing_const);\r\n    static_assert(CanBool<const R> == CanEmpty<const R>);\r\n    if constexpr (CanMemberEmpty<const R>) {\r\n        assert(as_const(r).empty() == is_empty);\r\n        assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n    } else {\r\n        static_assert(CanEmpty<const R> == CanSize<const R>);\r\n        if constexpr (CanEmpty<const R>) {\r\n            assert(ranges::empty(as_const(r)) == is_empty);\r\n            assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n        }\r\n    }\r\n\r\n    // Validate slide_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    {\r\n        const same_as<iterator_t<R>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(equal(*i, *begin(expected)));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            auto r2                              = r;\r\n            const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(equal(*i2, *i));\r\n            }\r\n        }\r\n    }\r\n\r\n    static_assert(CanMemberBegin<const R> == (random_access_range<const V> && sized_range<const V>) );\r\n    if constexpr (CanMemberBegin<const R>) {\r\n        const same_as<iterator_t<const R>> auto ci = as_const(r).begin();\r\n        if (!is_empty) {\r\n            assert(equal(*ci, *begin(expected)));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            const auto r2                               = r;\r\n            const same_as<iterator_t<const R>> auto ci2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(equal(*ci2, *ci));\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate slide_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    {\r\n        const same_as<sentinel_t<R>> auto s = r.end();\r\n        assert((r.begin() == s) == is_empty);\r\n        static_assert(common_range<R> == (!caches_first || common_range<V>) );\r\n        if constexpr (common_range<R> && bidirectional_range<V>) {\r\n            if (!is_empty) {\r\n                assert(equal(*prev(s), *prev(end(expected))));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(equal(*prev(r2.end()), *prev(end(expected))));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    static_assert(CanMemberEnd<const R> == caches_nothing_const);\r\n    if constexpr (CanMemberEnd<const R>) {\r\n        const same_as<sentinel_t<const R>> auto cs = as_const(r).end();\r\n        assert((r.begin() == cs) == is_empty);\r\n        static_assert(common_range<const R> == (!caches_first || common_range<const V>) );\r\n        if constexpr (common_range<const R> && bidirectional_range<V>) {\r\n            if (!is_empty) {\r\n                assert(equal(*prev(cs), *prev(end(expected))));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                const auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(equal(*prev(r2.end()), *prev(end(expected))));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate slide_view::size\r\n    static_assert(CanMemberSize<R> == sized_range<V>);\r\n    if constexpr (CanMemberSize<R>) {\r\n        same_as<_Make_unsigned_like_t<ranges::range_difference_t<V>>> auto s = r.size();\r\n        assert(s == ranges::size(expected));\r\n        static_assert(noexcept(r.size()) == noexcept(ranges::size(rng))); // strengthened\r\n    }\r\n\r\n    static_assert(CanMemberSize<const R> == sized_range<const V>);\r\n    if constexpr (CanMemberSize<const R>) {\r\n        same_as<_Make_unsigned_like_t<ranges::range_difference_t<const V>>> auto s = as_const(r).size();\r\n        assert(s == ranges::size(expected));\r\n        static_assert(noexcept(as_const(r).size()) == noexcept(ranges::size(rng))); // strengthened\r\n    }\r\n\r\n    if (is_empty) {\r\n        return true;\r\n    }\r\n\r\n    // Validate view_interface::data\r\n    static_assert(!CanData<R>);\r\n    static_assert(!CanData<const R>);\r\n\r\n    // Validate view_interface::operator[]\r\n    static_assert(CanIndex<R> == random_access_range<V>);\r\n    if constexpr (CanIndex<R>) {\r\n        assert(equal(r[0], expected[0]));\r\n    }\r\n\r\n    static_assert(CanIndex<const R> == random_access_range<const V>);\r\n    if constexpr (CanIndex<const R>) {\r\n        assert(equal(as_const(r)[0], expected[0]));\r\n    }\r\n\r\n    // Validate view_interface::front\r\n    static_assert(CanMemberFront<R>);\r\n    assert(equal(r.front(), *begin(expected)));\r\n\r\n    static_assert(CanMemberFront<const R> == caches_nothing_const);\r\n    if constexpr (CanMemberFront<const R>) {\r\n        assert(equal(as_const(r).front(), *begin(expected)));\r\n    }\r\n\r\n    // Validate view_interface::back\r\n    static_assert(CanMemberBack<R> == (bidirectional_range<V> && (!caches_first || common_range<V>) ));\r\n    if constexpr (CanMemberBack<R>) {\r\n        assert(equal(r.back(), *prev(end(expected))));\r\n    }\r\n\r\n    static_assert(CanMemberBack<const R> == caches_nothing_const);\r\n    if constexpr (CanMemberBack<const R>) {\r\n        assert(equal(as_const(r).back(), *prev(end(expected))));\r\n    }\r\n\r\n    // validate iterators\r\n    {\r\n        [[maybe_unused]] const iterator_t<R> defaulted;\r\n        same_as<iterator_t<R>> auto i = r.begin();\r\n\r\n        assert(equal(*i++, expected[0]));\r\n        assert(equal(*++i, expected[2]));\r\n\r\n        if constexpr (bidirectional_range<R>) {\r\n            assert(equal(*i--, expected[2]));\r\n            assert(equal(*--i, expected[0]));\r\n        }\r\n\r\n        if constexpr (random_access_range<R>) {\r\n            i += 2;\r\n            assert(equal(*i, expected[2]));\r\n\r\n            i -= 2;\r\n            assert(equal(*i, expected[0]));\r\n\r\n            assert(equal(i[2], expected[2]));\r\n\r\n            const same_as<iterator_t<R>> auto i2 = i + 2;\r\n            assert(equal(*i2, expected[2]));\r\n\r\n            const same_as<iterator_t<R>> auto i3 = 2 + i;\r\n            assert(equal(*i3, expected[2]));\r\n\r\n            const same_as<iterator_t<R>> auto i4 = i3 - 2;\r\n            assert(equal(*i4, expected[0]));\r\n\r\n            const same_as<ranges::range_difference_t<V>> auto diff1 = i2 - i;\r\n            assert(diff1 == 2);\r\n\r\n            const same_as<ranges::range_difference_t<V>> auto diff2 = i - i2;\r\n            assert(diff2 == -2);\r\n\r\n            // comparisons\r\n            assert(i == i4);\r\n            assert(i != i2);\r\n\r\n            assert(i < i2);\r\n            assert(i <= i2);\r\n            assert(i2 > i);\r\n            assert(i2 >= i);\r\n\r\n            if constexpr (three_way_comparable<iterator_t<V>>) {\r\n                assert(i <=> i4 == strong_ordering::equal);\r\n                assert(i <=> i2 == strong_ordering::less);\r\n                assert(i2 <=> i == strong_ordering::greater);\r\n            }\r\n        }\r\n\r\n        if constexpr (!common_range<R>) {\r\n            [[maybe_unused]] const sentinel_t<R> sentinel_defaulted;\r\n\r\n            const auto i2   = r.begin();\r\n            const auto sen  = r.end();\r\n            const auto size = ranges::ssize(expected);\r\n\r\n            assert(next(i2, size) == sen);\r\n            assert(i2 != sen);\r\n\r\n            if constexpr (sized_sentinel_for<sentinel_t<V>, iterator_t<V>>) {\r\n                const same_as<ranges::range_difference_t<V>> auto diff1 = i2 - sen;\r\n                assert(diff1 == -size);\r\n\r\n                const same_as<ranges::range_difference_t<V>> auto diff2 = sen - i2;\r\n                assert(diff2 == size);\r\n            }\r\n        }\r\n    }\r\n\r\n    if constexpr (CanMemberBegin<const R>) {\r\n        [[maybe_unused]] const iterator_t<const R> const_defaulted;\r\n        iterator_t<R> i = r.begin();\r\n        iterator_t<const R> ci{i};\r\n\r\n        assert(equal(*ci++, expected[0]));\r\n        assert(equal(*++ci, expected[2]));\r\n\r\n        if constexpr (bidirectional_range<const R>) {\r\n            assert(equal(*ci--, expected[2]));\r\n            assert(equal(*--ci, expected[0]));\r\n        }\r\n\r\n        if constexpr (random_access_range<const R>) {\r\n            ci += 2;\r\n            assert(equal(*ci, expected[2]));\r\n\r\n            ci -= 2;\r\n            assert(equal(*ci, expected[0]));\r\n\r\n            assert(equal(ci[2], expected[2]));\r\n\r\n            const same_as<iterator_t<const R>> auto ci2 = ci + 2;\r\n            assert(equal(*ci2, expected[2]));\r\n\r\n            const same_as<iterator_t<const R>> auto ci3 = 2 + ci;\r\n            assert(equal(*ci3, expected[2]));\r\n\r\n            const same_as<iterator_t<const R>> auto ci4 = ci3 - 2;\r\n            assert(equal(*ci4, expected[0]));\r\n\r\n            const same_as<ranges::range_difference_t<V>> auto diff1 = ci2 - ci;\r\n            assert(diff1 == 2);\r\n\r\n            const same_as<ranges::range_difference_t<V>> auto diff2 = ci - ci2;\r\n            assert(diff2 == -2);\r\n\r\n            // comparisons\r\n            assert(ci == ci4);\r\n            assert(ci != ci2);\r\n\r\n            assert(ci < ci2);\r\n            assert(ci <= ci2);\r\n            assert(ci2 > ci);\r\n            assert(ci2 >= ci);\r\n\r\n            // cross comparisons\r\n            assert(ci == i);\r\n            assert(ci2 != i);\r\n\r\n            assert(i < ci2);\r\n            assert(i <= ci2);\r\n            assert(ci2 > i);\r\n            assert(ci2 >= i);\r\n\r\n            if constexpr (three_way_comparable<iterator_t<const V>>) {\r\n                assert(ci <=> ci4 == strong_ordering::equal);\r\n                assert(ci <=> ci2 == strong_ordering::less);\r\n                assert(ci2 <=> ci == strong_ordering::greater);\r\n            }\r\n        }\r\n\r\n        if constexpr (!common_range<const R>) {\r\n            [[maybe_unused]] const sentinel_t<const R> defaulted;\r\n\r\n            static_assert(!equality_comparable_with<sentinel_t<const R>, iterator_t<const R>>);\r\n        }\r\n    }\r\n\r\n    // Validate slide_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V>) {\r\n        same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>); // strengthened\r\n        assert(*b1.begin() == *begin(*begin(expected)));\r\n    }\r\n\r\n    // Validate slide_view::base() &&\r\n    same_as<V> auto b2 = move(r).base();\r\n    static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>); // strengthened\r\n    assert(*b2.begin() == *begin(*begin(expected)));\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3, 4, 5, 6, 7};\r\nstatic constexpr span<const int> wrapped{some_ints};\r\nstatic constexpr span<const int> slides_of_four[] = {\r\n    wrapped.subspan(0, 4), wrapped.subspan(1, 4), wrapped.subspan(2, 4), wrapped.subspan(3, 4), wrapped.subspan(4, 4)};\r\n\r\nstruct instantiator {\r\n    template <ranges::forward_range R>\r\n    static constexpr void call() {\r\n        R r{some_ints};\r\n        test_one(r, slides_of_four);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, test::Sized IsSized>\r\nusing test_range = test::range<Category, const int, IsSized,\r\n    test::CanDifference{derived_from<Category, random_access_iterator_tag> || IsSized == test::Sized::yes}, IsCommon,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nconstexpr void instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_fwd<instantiator, const int>();\r\n#else // ^^^ test all forward range permutations / test only \"interesting\" permutations vvv\r\n    // The view is sensitive to category, commonality, and size, but oblivious to differencing and proxyness.\r\n    using test::Common, test::Sized;\r\n\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, Sized::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes, Sized::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes, Sized::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes, Sized::no>>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\ntemplate <class Category, test::Common IsCommon, test::Sized IsSized,\r\n    bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, IsSized, test::CanDifference{is_random}, IsCommon,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nint main() {\r\n    // Validate views\r\n    { // ... copyable\r\n        constexpr span<const int> s{some_ints};\r\n        static_assert(test_one(s, slides_of_four));\r\n        test_one(s, slides_of_four);\r\n    }\r\n\r\n    { // ... move-only\r\n        using test::Common, test::Sized;\r\n        test_one(move_only_view<forward_iterator_tag, Common::no, Sized::yes>{some_ints}, slides_of_four);\r\n        test_one(move_only_view<forward_iterator_tag, Common::no, Sized::no>{some_ints}, slides_of_four);\r\n        test_one(move_only_view<forward_iterator_tag, Common::yes, Sized::yes>{some_ints}, slides_of_four);\r\n        test_one(move_only_view<forward_iterator_tag, Common::yes, Sized::no>{some_ints}, slides_of_four);\r\n        test_one(move_only_view<bidirectional_iterator_tag, Common::no, Sized::yes>{some_ints}, slides_of_four);\r\n        test_one(move_only_view<bidirectional_iterator_tag, Common::no, Sized::no>{some_ints}, slides_of_four);\r\n        test_one(move_only_view<bidirectional_iterator_tag, Common::yes, Sized::yes>{some_ints}, slides_of_four);\r\n        test_one(move_only_view<bidirectional_iterator_tag, Common::yes, Sized::no>{some_ints}, slides_of_four);\r\n        test_one(move_only_view<random_access_iterator_tag, Common::no, Sized::yes>{some_ints}, slides_of_four);\r\n        test_one(move_only_view<random_access_iterator_tag, Common::no, Sized::no>{some_ints}, slides_of_four);\r\n        test_one(move_only_view<random_access_iterator_tag, Common::yes, Sized::yes>{some_ints}, slides_of_four);\r\n        test_one(move_only_view<random_access_iterator_tag, Common::yes, Sized::no>{some_ints}, slides_of_four);\r\n    }\r\n\r\n    // Validate non-views\r\n    {\r\n        static_assert(test_one(some_ints, slides_of_four));\r\n        test_one(some_ints, slides_of_four);\r\n    }\r\n    {\r\n        vector vec(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_one(vec, slides_of_four);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(some_ints), ranges::end(some_ints));\r\n        test_one(lst, slides_of_four);\r\n    }\r\n\r\n    { // empty range\r\n        static_assert(test_one(span<const int, 0>{}, span<span<const int>>{}));\r\n        test_one(span<const int, 0>{}, span<span<const int>>{});\r\n    }\r\n\r\n    { // too short range\r\n        static_assert(test_one(span<const int, 3>{some_ints, some_ints + 3}, span<span<const int>>{}));\r\n        test_one(span<const int, 3>{some_ints, some_ints + 3}, span<span<const int>>{});\r\n    }\r\n\r\n    static_assert((instantiation_test(), true));\r\n    instantiation_test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2442R1_views_slide_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2442R1_views_slide_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <ranges>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\nusing ranges::slide_view;\r\n\r\nstatic constexpr int some_ints[] = {0, 1, 2, 3};\r\n\r\nvoid test_view_negative_window_size() {\r\n    slide_view(some_ints, -1); // window size must be positive\r\n}\r\n\r\nvoid test_view_zero_window_size() {\r\n    slide_view(some_ints, 0); // window size must be positive\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_view_negative_window_size,\r\n        test_view_zero_window_size,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2443R1_views_chunk_by/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2443R1_views_chunk_by/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <ranges>\r\n#include <span>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\nusing namespace std;\r\n\r\nconstexpr auto equal_ranges = [](auto&& left, auto&& right) { return ranges::equal(left, right); };\r\n\r\nusing Pred = less<>;\r\nconstexpr Pred pred{};\r\n\r\ntemplate <class Rng>\r\nconcept CanViewChunkBy = requires(Rng&& r) { views::chunk_by(forward<Rng>(r), pred); };\r\n\r\ntemplate <ranges::forward_range Rng, class Expected>\r\nconstexpr bool test_one(Rng&& rng, Expected&& expected) {\r\n    using ranges::chunk_by_view, ranges::begin, ranges::end, ranges::iterator_t, ranges::sentinel_t,\r\n        ranges::common_range, ranges::bidirectional_range, ranges::prev;\r\n    constexpr bool is_view = ranges::view<remove_cvref_t<Rng>>;\r\n\r\n    using V = views::all_t<Rng>;\r\n    using R = chunk_by_view<V, Pred>;\r\n    static_assert(ranges::view<R>);\r\n    static_assert(ranges::forward_range<R>);\r\n    static_assert(bidirectional_range<R> == bidirectional_range<Rng>);\r\n    static_assert(!ranges::random_access_range<R>);\r\n\r\n    // Validate range adaptor object and range adaptor closure\r\n    constexpr auto closure = views::chunk_by(pred);\r\n\r\n    // ... with lvalue argument\r\n    static_assert(CanViewChunkBy<Rng&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewChunkBy<Rng&>) {\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::chunk_by(rng, pred)), R>);\r\n        static_assert(noexcept(views::chunk_by(rng, pred)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(rng | closure), R>);\r\n        static_assert(noexcept(rng | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const lvalue argument\r\n    static_assert(CanViewChunkBy<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n    if constexpr (CanViewChunkBy<const remove_reference_t<Rng>&>) {\r\n        using RC                   = chunk_by_view<views::all_t<const remove_reference_t<Rng>&>, Pred>;\r\n        constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::chunk_by(as_const(rng), pred)), RC>);\r\n        static_assert(noexcept(views::chunk_by(as_const(rng), pred)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(as_const(rng) | closure), RC>);\r\n        static_assert(noexcept(as_const(rng) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with rvalue argument\r\n    static_assert(CanViewChunkBy<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n    if constexpr (CanViewChunkBy<remove_reference_t<Rng>>) {\r\n        using RS                   = chunk_by_view<views::all_t<remove_reference_t<Rng>>, Pred>;\r\n        constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::chunk_by(move(rng), pred)), RS>);\r\n        static_assert(noexcept(views::chunk_by(move(rng), pred)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(rng) | closure), RS>);\r\n        static_assert(noexcept(move(rng) | closure) == is_noexcept);\r\n    }\r\n\r\n    // ... with const rvalue argument\r\n    static_assert(CanViewChunkBy<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n    if constexpr (CanViewChunkBy<const remove_reference_t<Rng>>) {\r\n        constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n        static_assert(same_as<decltype(views::chunk_by(move(as_const(rng)), pred)), R>);\r\n        static_assert(noexcept(views::chunk_by(move(as_const(rng)), pred)) == is_noexcept);\r\n\r\n        static_assert(same_as<decltype(move(as_const(rng)) | closure), R>);\r\n        static_assert(noexcept(move(as_const(rng)) | closure) == is_noexcept);\r\n    }\r\n\r\n    // Validate deduction guide\r\n    same_as<R> auto r = chunk_by_view{forward<Rng>(rng), pred};\r\n    assert(ranges::equal(r, expected, equal_ranges));\r\n\r\n    { // Validate chunk_by_view::pred\r\n        [[maybe_unused]] same_as<Pred> auto pred_copy = as_const(r).pred();\r\n        static_assert(noexcept(as_const(r).pred()));\r\n    }\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    const bool is_empty = ranges::empty(expected);\r\n    static_assert(CanMemberEmpty<R>);\r\n    static_assert(CanBool<R>);\r\n    assert(r.empty() == is_empty);\r\n    assert(static_cast<bool>(r) == !is_empty);\r\n    static_assert(!CanMemberEmpty<const R>);\r\n    static_assert(!CanBool<const R>);\r\n\r\n    // Validate chunk_by_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    const same_as<iterator_t<R>> auto i = r.begin();\r\n    if (!is_empty) {\r\n        assert(ranges::equal(*i, *begin(expected)));\r\n    }\r\n\r\n    if constexpr (copy_constructible<V>) {\r\n        auto r2                              = r;\r\n        const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n        if (!is_empty) {\r\n            assert(ranges::equal(*i2, *i));\r\n        }\r\n    }\r\n\r\n    static_assert(!CanBegin<const R>);\r\n\r\n    // Validate chunk_by_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    same_as<sentinel_t<R>> auto s = r.end();\r\n    assert((r.begin() == s) == is_empty);\r\n    if constexpr (common_range<V>) {\r\n        static_assert(same_as<sentinel_t<R>, iterator_t<R>>);\r\n        if constexpr (bidirectional_range<V>) {\r\n            if (!is_empty) {\r\n                assert(ranges::equal(*prev(s), *prev(end(expected))));\r\n            }\r\n        }\r\n    } else {\r\n        static_assert(same_as<sentinel_t<R>, default_sentinel_t>);\r\n    }\r\n\r\n    if constexpr (bidirectional_range<V> && common_range<V> && copy_constructible<V>) {\r\n        auto r2 = r;\r\n        if (!is_empty) {\r\n            assert(ranges::equal(*prev(r2.end()), *prev(end(expected))));\r\n        }\r\n    }\r\n\r\n    static_assert(!CanEnd<const R>);\r\n\r\n    // Validate view_interface::data\r\n    static_assert(!CanData<R>);\r\n    static_assert(!CanData<const R>);\r\n\r\n    // Validate view_interface::size\r\n    static_assert(!CanSize<R>);\r\n    static_assert(!CanSize<const R>);\r\n\r\n    // Validate view_interface::operator[]\r\n    static_assert(!CanIndex<R>);\r\n    static_assert(!CanIndex<const R>);\r\n\r\n    if (!is_empty) {\r\n        // Validate view_interface::front and back\r\n        static_assert(CanMemberFront<R>);\r\n        assert(ranges::equal(r.front(), *begin(expected)));\r\n\r\n        static_assert(CanMemberBack<R> == (bidirectional_range<V> && common_range<V>) );\r\n        if constexpr (CanMemberBack<R>) {\r\n            assert(ranges::equal(r.back(), *prev(end(expected))));\r\n        }\r\n\r\n        static_assert(!CanMemberFront<const R>);\r\n        static_assert(!CanMemberBack<const R>);\r\n    }\r\n\r\n    // Validate chunk_by_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V>) {\r\n        same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b1.begin() == *begin(*begin(expected)));\r\n        }\r\n    }\r\n\r\n    // Validate chunk_by_view::base() && (NB: do this last since it leaves r moved-from)\r\n    same_as<V> auto b2 = move(r).base();\r\n    static_assert(noexcept(move(r).base()) == is_nothrow_move_constructible_v<V>);\r\n    if (!is_empty) {\r\n        assert(*b2.begin() == *begin(*begin(expected)));\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nstatic constexpr string_view some_chars                = \"01234321\"sv;\r\nstatic constexpr string_view expected_output[]         = {\"01234\"sv, \"3\"sv, \"2\"sv, \"1\"sv};\r\nstatic constexpr string_view expected_output_reverse[] = {\"1234\"sv, \"3\"sv, \"2\"sv, \"1\"sv, \"0\"sv};\r\n\r\nstruct instantiator {\r\n    template <ranges::forward_range R>\r\n    static constexpr void call() {\r\n        R r{some_chars};\r\n        test_one(r, expected_output);\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon>\r\nusing test_range = test::range<Category, const char, test::Sized::no,\r\n    test::CanDifference{derived_from<Category, random_access_iterator_tag>}, IsCommon,\r\n    test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nconstexpr void instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_fwd<instantiator, const char>();\r\n#else // ^^^ test all forward range permutations / test only \"interesting\" permutations vvv\r\n    // The view is sensitive to category and commonality, but oblivious to size, differencing, and proxyness.\r\n    using test::Common;\r\n\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes>>();\r\n#endif // TEST_EVERYTHING\r\n}\r\n\r\nvoid test_gh_2889() { // COMPILE-ONLY\r\n    // GH-2889 <ranges>: chunk_by_view's helper lambda does not specify return type\r\n    struct Bool { // NB: poor model of boolean-testable; don't use in runtime code.\r\n        Bool()            = default;\r\n        Bool(const Bool&) = delete;\r\n        Bool& operator!() {\r\n            return *this;\r\n        }\r\n        operator bool() {\r\n            return true;\r\n        }\r\n    };\r\n\r\n    Bool x[3];\r\n    auto r = x | views::chunk_by([](Bool& b, Bool&) -> Bool& { return b; });\r\n    (void) r.begin();\r\n}\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const char, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag>},\r\n    test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}, test::CanView::yes, test::Copyability::move_only>;\r\n\r\nint main() {\r\n    // Validate views\r\n    { // ... copyable\r\n        constexpr span<const char> s{some_chars};\r\n        static_assert(test_one(s, expected_output));\r\n        test_one(s, expected_output);\r\n    }\r\n    { // ... move-only\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::no>{some_chars}, expected_output);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::yes>{some_chars}, expected_output);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_chars}, expected_output);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_chars}, expected_output);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::no>{some_chars}, expected_output);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::yes>{some_chars}, expected_output);\r\n    }\r\n\r\n    // Validate non-views\r\n    {\r\n        static_assert(test_one(some_chars, expected_output));\r\n        test_one(some_chars, expected_output);\r\n    }\r\n    {\r\n        vector vec(ranges::begin(some_chars), ranges::end(some_chars));\r\n        test_one(vec, expected_output);\r\n    }\r\n    {\r\n        forward_list lst(ranges::begin(some_chars), ranges::end(some_chars));\r\n        test_one(lst, expected_output);\r\n    }\r\n\r\n    // chunk_by/reverse interaction test\r\n    {\r\n        auto cbr_pipe = views::chunk_by(pred) | views::reverse;\r\n        auto rcb_pipe = views::reverse | views::chunk_by(pred);\r\n\r\n        auto r0  = some_chars | cbr_pipe;\r\n        using R0 = decltype(r0);\r\n        static_assert(ranges::bidirectional_range<R0> && ranges::view<R0>);\r\n        assert(ranges::equal(r0, views::reverse(expected_output), equal_ranges));\r\n\r\n        auto r1  = some_chars | rcb_pipe;\r\n        using R1 = decltype(r1);\r\n        static_assert(ranges::bidirectional_range<R1> && ranges::view<R1>);\r\n        assert(ranges::equal(r1, expected_output_reverse, equal_ranges));\r\n    }\r\n\r\n    { // empty range\r\n        static_assert(test_one(span<const int, 0>{}, span<string_view, 0>{}));\r\n        test_one(span<const int, 0>{}, span<string_view, 0>{});\r\n    }\r\n\r\n    static_assert((instantiation_test(), true));\r\n    instantiation_test();\r\n\r\n    { // Validate that predicates are moved into the range adaptor closure, and into the view object from an rvalue\r\n      // closure\r\n        struct Fn {\r\n            Fn()     = default;\r\n            Fn(Fn&&) = default;\r\n            Fn(const Fn&) {\r\n                assert(false);\r\n            }\r\n            Fn& operator=(Fn&&) = default;\r\n\r\n            Fn& operator=(const Fn&) {\r\n                assert(false);\r\n                return *this;\r\n            }\r\n\r\n            bool operator()(int, int) const {\r\n                return true;\r\n            }\r\n        };\r\n\r\n        (void) views::chunk_by(Fn{})(span<int>{});\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2443R1_views_chunk_by_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2443R1_views_chunk_by_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <ranges>\r\n#include <vector>\r\n\r\n#include <test_death.hpp>\r\nusing namespace std;\r\n\r\nstatic int some_ints[] = {0, 1, 2, 3};\r\n\r\nstruct test_predicate {\r\n    struct tag {};\r\n\r\n    test_predicate() = default;\r\n    test_predicate(const test_predicate&) {\r\n        throw tag{};\r\n    }\r\n    test_predicate& operator=(const test_predicate&) = delete;\r\n\r\n    constexpr bool operator()(int i, int j) const {\r\n        return i == j;\r\n    }\r\n};\r\n\r\nauto with_no_predicate() {\r\n    using V = decltype(ranges::chunk_by_view{some_ints, test_predicate{}});\r\n    V r{some_ints, {}};\r\n    try {\r\n        r = V{some_ints, {}};\r\n    } catch (const test_predicate::tag&) {\r\n    }\r\n    return r;\r\n}\r\n\r\nvoid test_view_predicate() {\r\n    auto r = with_no_predicate();\r\n    (void) r.pred(); // chunk_by_view has no predicate\r\n}\r\n\r\nvoid test_view_begin() {\r\n    auto r = with_no_predicate();\r\n    (void) r.begin(); // cannot call begin on a chunk_by_view that holds no predicate\r\n}\r\n\r\nconstexpr auto lambda = [](int, int) { return true; };\r\nusing V               = decltype(ranges::chunk_by_view{some_ints, lambda});\r\n\r\nvoid test_operator_star_end_iterator() {\r\n    V r{some_ints, lambda};\r\n    ranges::iterator_t<V> i = ranges::next(r.begin(), r.end());\r\n    (void) (*i); // cannot dereference chunk_by_view end iterator\r\n}\r\n\r\nvoid test_operator_preincrement_after_end() {\r\n    V r{some_ints, lambda};\r\n    ranges::iterator_t<V> i = ranges::next(r.begin(), r.end());\r\n    ++i; // cannot increment chunk_by_view iterator past end\r\n}\r\n\r\nvoid test_operator_postincrement_after_end() {\r\n    V r{some_ints, lambda};\r\n    ranges::iterator_t<V> i = ranges::next(r.begin(), r.end());\r\n    i++; // cannot increment chunk_by_view iterator past end\r\n}\r\n\r\nvoid test_operator_predecrement_value_initialized_iterator() {\r\n    ranges::iterator_t<V> i{};\r\n    --i; // cannot decrement value-initialized chunk_by_view iterator\r\n}\r\n\r\nvoid test_operator_predecrement_before_begin() {\r\n    V r{some_ints, lambda};\r\n    ranges::iterator_t<V> i = r.begin();\r\n    --i; // cannot decrement chunk_by_view iterator before begin\r\n}\r\n\r\nvoid test_operator_postdecrement_value_initialized_iterator() {\r\n    ranges::iterator_t<V> i{};\r\n    i--; // cannot decrement value-initialized chunk_by_view iterator\r\n}\r\n\r\nvoid test_operator_postdecrement_before_begin() {\r\n    V r{some_ints, lambda};\r\n    ranges::iterator_t<V> i = r.begin();\r\n    i--; // cannot decrement chunk_by_view iterator before begin\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_view_predicate,\r\n        test_view_begin,\r\n\r\n        test_operator_star_end_iterator,\r\n        test_operator_preincrement_after_end,\r\n        test_operator_postincrement_after_end,\r\n        test_operator_predecrement_value_initialized_iterator,\r\n        test_operator_predecrement_before_begin,\r\n        test_operator_postdecrement_value_initialized_iterator,\r\n        test_operator_postdecrement_before_begin,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2445R1_forward_like/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2445R1_forward_like/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nstruct U {}; // class type so const-qualification is not stripped from a prvalue\r\nusing CU = const U;\r\nusing T  = int;\r\nusing CT = const T;\r\n\r\nU u{};\r\nconst U& cu = u;\r\n\r\nstatic_assert(is_same_v<decltype(forward_like<T>(U{})), U&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T>(CU{})), CU&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T>(u)), U&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T>(cu)), CU&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T>(std::move(u))), U&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T>(std::move(cu))), CU&&>);\r\n\r\nstatic_assert(is_same_v<decltype(forward_like<CT>(U{})), CU&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CT>(CU{})), CU&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CT>(u)), CU&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CT>(cu)), CU&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CT>(std::move(u))), CU&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CT>(std::move(cu))), CU&&>);\r\n\r\nstatic_assert(is_same_v<decltype(forward_like<T&>(U{})), U&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T&>(CU{})), CU&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T&>(u)), U&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T&>(cu)), CU&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T&>(std::move(u))), U&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T&>(std::move(cu))), CU&>);\r\n\r\nstatic_assert(is_same_v<decltype(forward_like<CT&>(U{})), CU&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CT&>(CU{})), CU&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CT&>(u)), CU&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CT&>(cu)), CU&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CT&>(std::move(u))), CU&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CT&>(std::move(cu))), CU&>);\r\n\r\nstatic_assert(is_same_v<decltype(forward_like<T&&>(U{})), U&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T&&>(CU{})), CU&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T&&>(u)), U&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T&&>(cu)), CU&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T&&>(std::move(u))), U&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T&&>(std::move(cu))), CU&&>);\r\n\r\nstatic_assert(is_same_v<decltype(forward_like<CT&&>(U{})), CU&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CT&&>(CU{})), CU&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CT&&>(u)), CU&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CT&&>(cu)), CU&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CT&&>(std::move(u))), CU&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CT&&>(std::move(cu))), CU&&>);\r\n\r\nstatic_assert(noexcept(forward_like<T>(u)));\r\n\r\nstatic_assert(is_same_v<decltype(forward_like<U&>(u)), U&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CU&>(cu)), CU&>);\r\nstatic_assert(is_same_v<decltype(forward_like<U&&>(std::move(u))), U&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CU&&>(std::move(cu))), CU&&>);\r\n\r\nstruct NoCtorCopyMove {\r\n    NoCtorCopyMove()                      = delete;\r\n    NoCtorCopyMove(const NoCtorCopyMove&) = delete;\r\n    NoCtorCopyMove(NoCtorCopyMove&&)      = delete;\r\n};\r\n\r\nstatic_assert(is_same_v<decltype(forward_like<CT&&>(declval<NoCtorCopyMove>())), const NoCtorCopyMove&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<CT&>(declval<NoCtorCopyMove>())), const NoCtorCopyMove&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T&&>(declval<NoCtorCopyMove>())), NoCtorCopyMove&&>);\r\nstatic_assert(is_same_v<decltype(forward_like<T&>(declval<NoCtorCopyMove>())), NoCtorCopyMove&>);\r\n\r\nstatic_assert(noexcept(forward_like<T>(declval<NoCtorCopyMove>())));\r\n\r\nconstexpr bool test() {\r\n    {\r\n        int val       = 1729;\r\n        auto&& result = forward_like<const double&>(val);\r\n        static_assert(is_same_v<decltype(result), const int&>);\r\n        assert(&result == &val);\r\n    }\r\n    {\r\n        int val       = 1729;\r\n        auto&& result = forward_like<double&>(val);\r\n        static_assert(is_same_v<decltype(result), int&>);\r\n        assert(&result == &val);\r\n    }\r\n    {\r\n        int val       = 1729;\r\n        auto&& result = forward_like<const double&&>(val);\r\n        static_assert(is_same_v<decltype(result), const int&&>);\r\n        assert(&result == &val);\r\n    }\r\n    {\r\n        int val       = 1729;\r\n        auto&& result = forward_like<double&&>(val);\r\n        static_assert(is_same_v<decltype(result), int&&>);\r\n        assert(&result == &val);\r\n    }\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    assert(test());\r\n    static_assert(test());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2446R2_views_as_rvalue/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2446R2_views_as_rvalue/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <forward_list>\r\n#include <iterator>\r\n#include <ranges>\r\n#include <span>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Rng>\r\nconcept CanViewAsRvalue = requires(Rng&& r) { views::as_rvalue(forward<Rng>(r)); };\r\n\r\ntemplate <ranges::input_range Rng, class Expected>\r\nconstexpr bool test_one(Rng&& rng, Expected&& expected) {\r\n    using ranges::as_rvalue_view, ranges::begin, ranges::end, ranges::iterator_t, ranges::sentinel_t, ranges::prev,\r\n        ranges::input_range, ranges::forward_range, ranges::bidirectional_range, ranges::random_access_range,\r\n        ranges::common_range, ranges::sized_range;\r\n    using V = views::all_t<Rng>;\r\n    using R = as_rvalue_view<V>;\r\n\r\n    constexpr bool is_view           = ranges::view<remove_cvref_t<Rng>>;\r\n    constexpr bool is_already_rvalue = same_as<ranges::range_rvalue_reference_t<V>, ranges::range_reference_t<V>>;\r\n\r\n    static_assert(ranges::view<R>);\r\n    static_assert(input_range<R> == input_range<V>);\r\n    static_assert(forward_range<R> == forward_range<V>);\r\n    static_assert(bidirectional_range<R> == bidirectional_range<V>);\r\n    static_assert(random_access_range<R> == random_access_range<V>);\r\n    static_assert(!ranges::contiguous_range<R>);\r\n\r\n    // Validate default-initializability\r\n    static_assert(default_initializable<R> == default_initializable<V>);\r\n\r\n    // Validate borrowed_range\r\n    static_assert(ranges::borrowed_range<R> == ranges::borrowed_range<V>);\r\n\r\n    // Validate range adaptor object\r\n    if constexpr (!is_already_rvalue) { // range adaptor results in as_rvalue_view\r\n        // ... with lvalue argument\r\n        static_assert(CanViewAsRvalue<Rng&> == (!is_view || copy_constructible<V>) );\r\n        if constexpr (CanViewAsRvalue<Rng&>) {\r\n            constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::as_rvalue(std::forward<Rng>(rng))), R>);\r\n            static_assert(noexcept(views::as_rvalue(std::forward<Rng>(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(std::forward<Rng>(rng) | views::as_rvalue), R>);\r\n            static_assert(noexcept(std::forward<Rng>(rng) | views::as_rvalue) == is_noexcept);\r\n        }\r\n\r\n        // ... with const lvalue argument\r\n        static_assert(CanViewAsRvalue<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n        if constexpr (CanViewAsRvalue<const remove_reference_t<Rng>&>) {\r\n            using RC                   = as_rvalue_view<views::all_t<const remove_reference_t<Rng>&>>;\r\n            constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::as_rvalue(as_const(rng))), RC>);\r\n            static_assert(noexcept(views::as_rvalue(as_const(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | views::as_rvalue), RC>);\r\n            static_assert(noexcept(as_const(rng) | views::as_rvalue) == is_noexcept);\r\n        }\r\n\r\n        // ... with rvalue argument\r\n        static_assert(CanViewAsRvalue<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n        if constexpr (CanViewAsRvalue<remove_reference_t<Rng>>) {\r\n            using RS                   = as_rvalue_view<views::all_t<remove_reference_t<Rng>>>;\r\n            constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::as_rvalue(std::move(rng))), RS>);\r\n            static_assert(noexcept(views::as_rvalue(std::move(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(std::move(rng) | views::as_rvalue), RS>);\r\n            static_assert(noexcept(std::move(rng) | views::as_rvalue) == is_noexcept);\r\n        }\r\n\r\n        // ... with const rvalue argument\r\n        static_assert(CanViewAsRvalue<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n        if constexpr (CanViewAsRvalue<const remove_reference_t<Rng>>) {\r\n            constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::as_rvalue(std::move(as_const(rng)))), R>);\r\n            static_assert(noexcept(views::as_rvalue(std::move(as_const(rng)))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(std::move(as_const(rng)) | views::as_rvalue), R>);\r\n            static_assert(noexcept(std::move(as_const(rng)) | views::as_rvalue) == is_noexcept);\r\n        }\r\n    } else { // range adaptor results in views::all_t\r\n        // ... with lvalue argument\r\n        static_assert(CanViewAsRvalue<Rng&> == (!is_view || copy_constructible<V>) );\r\n        if constexpr (CanViewAsRvalue<Rng&>) {\r\n            constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::as_rvalue(std::forward<Rng>(rng))), V>);\r\n            static_assert(noexcept(views::as_rvalue(std::forward<Rng>(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(std::forward<Rng>(rng) | views::as_rvalue), V>);\r\n            static_assert(noexcept(std::forward<Rng>(rng) | views::as_rvalue) == is_noexcept);\r\n        }\r\n\r\n        // ... with const lvalue argument\r\n        static_assert(CanViewAsRvalue<const remove_reference_t<Rng>&> == (!is_view || copy_constructible<V>) );\r\n        if constexpr (CanViewAsRvalue<const remove_reference_t<Rng>&>) {\r\n            using VC                   = views::all_t<const remove_reference_t<Rng>&>;\r\n            constexpr bool is_noexcept = !is_view || is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::as_rvalue(as_const(rng))), VC>);\r\n            static_assert(noexcept(views::as_rvalue(as_const(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(as_const(rng) | views::as_rvalue), VC>);\r\n            static_assert(noexcept(as_const(rng) | views::as_rvalue) == is_noexcept);\r\n        }\r\n\r\n        // ... with rvalue argument\r\n        static_assert(CanViewAsRvalue<remove_reference_t<Rng>> == (is_view || movable<remove_reference_t<Rng>>) );\r\n        if constexpr (CanViewAsRvalue<remove_reference_t<Rng>>) {\r\n            using VS                   = views::all_t<remove_reference_t<Rng>>;\r\n            constexpr bool is_noexcept = is_nothrow_move_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::as_rvalue(std::move(rng))), VS>);\r\n            static_assert(noexcept(views::as_rvalue(std::move(rng))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(std::move(rng) | views::as_rvalue), VS>);\r\n            static_assert(noexcept(std::move(rng) | views::as_rvalue) == is_noexcept);\r\n        }\r\n\r\n        // ... with const rvalue argument\r\n        static_assert(CanViewAsRvalue<const remove_reference_t<Rng>> == (is_view && copy_constructible<V>) );\r\n        if constexpr (CanViewAsRvalue<const remove_reference_t<Rng>>) {\r\n            constexpr bool is_noexcept = is_nothrow_copy_constructible_v<V>;\r\n\r\n            static_assert(same_as<decltype(views::as_rvalue(std::move(as_const(rng)))), V>);\r\n            static_assert(noexcept(views::as_rvalue(std::move(as_const(rng)))) == is_noexcept);\r\n\r\n            static_assert(same_as<decltype(std::move(as_const(rng)) | views::as_rvalue), V>);\r\n            static_assert(noexcept(std::move(as_const(rng)) | views::as_rvalue) == is_noexcept);\r\n        }\r\n    }\r\n\r\n    // Validate deduction guide\r\n    same_as<R> auto r = as_rvalue_view{std::forward<Rng>(rng)};\r\n\r\n    // Validate as_rvalue_view::size\r\n    static_assert(CanMemberSize<R> == sized_range<V>);\r\n    if constexpr (CanMemberSize<R>) {\r\n        same_as<ranges::range_size_t<V>> auto s = r.size();\r\n        assert(_To_unsigned_like(s) == ranges::size(expected));\r\n        static_assert(noexcept(r.size()) == noexcept(ranges::size(as_const(rng))));\r\n    }\r\n\r\n    // Validate as_rvalue_view::size (const)\r\n    static_assert(CanMemberSize<const R> == sized_range<const V>);\r\n    if constexpr (CanMemberSize<const R>) {\r\n        same_as<ranges::range_size_t<const V>> auto s = as_const(r).size();\r\n        assert(_To_unsigned_like(s) == ranges::size(expected));\r\n        static_assert(noexcept(as_const(r).size()) == noexcept(ranges::size(rng)));\r\n    }\r\n\r\n    const bool is_empty = ranges::empty(expected);\r\n\r\n    // Validate view_interface::empty and operator bool\r\n    static_assert(CanMemberEmpty<R> == (forward_range<V> || sized_range<V>) );\r\n    static_assert(CanBool<R> == CanEmpty<R>);\r\n    if constexpr (CanMemberEmpty<R>) {\r\n        assert(r.empty() == is_empty);\r\n        assert(static_cast<bool>(r) == !is_empty);\r\n    }\r\n\r\n    // Validate view_interface::empty and operator bool (const)\r\n    static_assert(CanMemberEmpty<const R> == (forward_range<const Rng> || sized_range<const V>) );\r\n    static_assert(CanBool<const R> == CanEmpty<const R>);\r\n    if constexpr (CanMemberEmpty<const R>) {\r\n        assert(as_const(r).empty() == is_empty);\r\n        assert(static_cast<bool>(as_const(r)) == !is_empty);\r\n    }\r\n\r\n    assert(ranges::equal(r, expected));\r\n    if (!forward_range<V>) { // intentionally not if constexpr\r\n        return true;\r\n    }\r\n\r\n    // Validate as_rvalue_view::begin\r\n    static_assert(CanMemberBegin<R>);\r\n    static_assert(same_as<iterator_t<R>, move_iterator<iterator_t<V>>>);\r\n    {\r\n        const same_as<iterator_t<R>> auto i = r.begin();\r\n        if (!is_empty) {\r\n            assert(*i == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            auto r2                              = r;\r\n            const same_as<iterator_t<R>> auto i2 = r2.begin();\r\n            if (!is_empty) {\r\n                assert(*i2 == *i);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate as_rvalue_view::begin (const)\r\n    static_assert(CanMemberBegin<const R> == ranges::range<const V>);\r\n    if constexpr (CanMemberBegin<const R>) {\r\n        const same_as<iterator_t<const R>> auto ci = as_const(r).begin();\r\n        if (!is_empty) {\r\n            assert(*ci == *begin(expected));\r\n        }\r\n\r\n        if constexpr (copy_constructible<V>) {\r\n            const auto cr2                              = r;\r\n            const same_as<iterator_t<const R>> auto ci2 = cr2.begin();\r\n            if (!is_empty) {\r\n                assert(*ci2 == *ci);\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate as_rvalue_view::end\r\n    static_assert(CanMemberEnd<R>);\r\n    if constexpr (common_range<V>) {\r\n        static_assert(same_as<sentinel_t<R>, move_iterator<iterator_t<V>>>);\r\n    } else {\r\n        static_assert(same_as<sentinel_t<R>, move_sentinel<sentinel_t<V>>>);\r\n    }\r\n\r\n    {\r\n        const same_as<sentinel_t<R>> auto s = r.end();\r\n        assert((r.begin() == s) == is_empty);\r\n        static_assert(common_range<R> == common_range<V>);\r\n        if constexpr (common_range<R> && bidirectional_range<V>) {\r\n            if (!is_empty) {\r\n                assert(*prev(s) == *prev(end(expected)));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*prev(r2.end()) == *prev(end(expected)));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate as_rvalue_view::end (const)\r\n    static_assert(CanMemberEnd<const R> == ranges::range<const V>);\r\n    if constexpr (CanMemberEnd<const R>) {\r\n        const same_as<sentinel_t<const R>> auto cs = as_const(r).end();\r\n        assert((as_const(r).begin() == cs) == is_empty);\r\n        static_assert(common_range<const R> == common_range<const V>);\r\n        if constexpr (common_range<const R> && bidirectional_range<const V>) {\r\n            if (!is_empty) {\r\n                assert(*prev(cs) == *prev(end(expected)));\r\n            }\r\n\r\n            if constexpr (copy_constructible<V>) {\r\n                const auto r2 = r;\r\n                if (!is_empty) {\r\n                    assert(*prev(r2.end()) == *prev(end(expected)));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Validate view_interface::data\r\n    static_assert(!CanData<R>);\r\n    static_assert(!CanData<const R>);\r\n\r\n    if (!is_empty) {\r\n        // Validate view_interface::operator[]\r\n        static_assert(CanIndex<R> == random_access_range<V>);\r\n        if constexpr (CanIndex<R>) {\r\n            assert(r[0] == expected[0]);\r\n        }\r\n\r\n        // Validate view_interface::operator[] (const)\r\n        static_assert(CanIndex<const R> == random_access_range<const V>);\r\n        if constexpr (CanIndex<const R>) {\r\n            assert(as_const(r)[0] == expected[0]);\r\n        }\r\n\r\n        // Validate view_interface::front\r\n        static_assert(CanMemberFront<R> == forward_range<V>);\r\n        if constexpr (CanMemberFront<R>) {\r\n            assert(r.front() == *begin(expected));\r\n        }\r\n\r\n        // Validate view_interface::front (const)\r\n        static_assert(CanMemberFront<const R> == forward_range<const V>);\r\n        if constexpr (CanMemberFront<const R>) {\r\n            assert(as_const(r).front() == *begin(expected));\r\n        }\r\n\r\n        // Validate view_interface::back\r\n        static_assert(CanMemberBack<R> == (bidirectional_range<V> && common_range<V>) );\r\n        if constexpr (CanMemberBack<R>) {\r\n            assert(r.back() == *prev(end(expected)));\r\n        }\r\n\r\n        // Validate view_interface::back (const)\r\n        static_assert(CanMemberBack<const R> == (bidirectional_range<const V> && common_range<const V>) );\r\n        if constexpr (CanMemberBack<const R>) {\r\n            assert(as_const(r).back() == *prev(end(expected)));\r\n        }\r\n    }\r\n\r\n    // Validate as_rvalue_view::base() const&\r\n    static_assert(CanMemberBase<const R&> == copy_constructible<V>);\r\n    if constexpr (copy_constructible<V>) {\r\n        same_as<V> auto b1 = as_const(r).base();\r\n        static_assert(noexcept(as_const(r).base()) == is_nothrow_copy_constructible_v<V>);\r\n        if (!is_empty) {\r\n            assert(*b1.begin() == *begin(expected));\r\n        }\r\n    }\r\n\r\n    // Validate as_rvalue::base() &&\r\n    same_as<V> auto b2 = std::move(r).base();\r\n    static_assert(noexcept(std::move(r).base()) == is_nothrow_move_constructible_v<V>);\r\n    if (!is_empty) {\r\n        assert(*b2.begin() == *begin(expected));\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr int some_ints[] = {0, 3, 6, 9, 12, 15};\r\n\r\nstruct instantiator {\r\n    template <ranges::input_range R>\r\n    static constexpr void call() {\r\n        R r{some_ints};\r\n        test_one(r, span{some_ints});\r\n    }\r\n};\r\n\r\ntemplate <class Category, test::Common IsCommon, test::Sized IsSized>\r\nusing test_range =\r\n    test::range<Category, const int, IsSized, test::CanDifference{derived_from<Category, random_access_iterator_tag>},\r\n        IsCommon, test::CanCompare{derived_from<Category, forward_iterator_tag> || IsCommon == test::Common::yes},\r\n        test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>}>;\r\n\r\nconstexpr bool instantiation_test() {\r\n#ifdef TEST_EVERYTHING\r\n    test_in<instantiator, const int>();\r\n#else // ^^^ test all input permutations / test only \"interesting\" permutations vvv\r\n    using test::Common, test::Sized;\r\n\r\n    // The view is sensitive to category, commonality, and size, but oblivious to differencing and proxyness\r\n    instantiator::call<test_range<input_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<input_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<forward_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<bidirectional_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<random_access_iterator_tag, Common::yes, Sized::no>>();\r\n\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no, Sized::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::no, Sized::no>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes, Sized::yes>>();\r\n    instantiator::call<test_range<contiguous_iterator_tag, Common::yes, Sized::no>>();\r\n#endif // TEST_EVERYTHING\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class Category, test::Common IsCommon, bool is_random = derived_from<Category, random_access_iterator_tag>>\r\nusing move_only_view = test::range<Category, const int, test::Sized{is_random}, test::CanDifference{is_random},\r\n    IsCommon, test::CanCompare::yes, test::ProxyRef{!derived_from<Category, contiguous_iterator_tag>},\r\n    test::CanView::yes, test::Copyability::move_only>;\r\n\r\nvoid test_example_from_p2446r2() {\r\n    const vector<string> pattern = {\"the\", \"quick\", \"brown\", \"fox\", \"ate\", \"a\", \"pterodactyl\"};\r\n\r\n    vector<string> words = pattern;\r\n    vector<string> new_words;\r\n    ranges::copy(words | views::as_rvalue, back_inserter(new_words)); // moves each string from words into new_words\r\n\r\n    assert(ranges::equal(new_words, pattern));\r\n    assert(words.size() == pattern.size()); // size of words is preserved\r\n    assert(ranges::all_of(words, ranges::empty)); // all strings from words are empty (implementation assumption)\r\n}\r\n\r\n// LWG-4083 \"views::as_rvalue should reject non-input ranges\"\r\nstruct OutputRvalueIterator {\r\n    using difference_type = int;\r\n    int operator*() const;\r\n    OutputRvalueIterator& operator++();\r\n    void operator++(int);\r\n};\r\nusing OutputRvalueRange = decltype(ranges::subrange{OutputRvalueIterator{}, unreachable_sentinel});\r\n\r\nstatic_assert(!CanViewAsRvalue<OutputRvalueRange>);\r\n\r\nint main() {\r\n    { // Validate views\r\n        // ... copyable\r\n        constexpr span<const int> s{some_ints};\r\n        static_assert(test_one(s, some_ints));\r\n        test_one(s, some_ints);\r\n    }\r\n\r\n    { // ... move-only\r\n        test_one(move_only_view<input_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_one(move_only_view<input_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_one(move_only_view<forward_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_one(move_only_view<bidirectional_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::no>{some_ints}, some_ints);\r\n        test_one(move_only_view<random_access_iterator_tag, test::Common::yes>{some_ints}, some_ints);\r\n    }\r\n\r\n    { // Validate non-views\r\n        static_assert(test_one(some_ints, some_ints));\r\n        test_one(some_ints, some_ints);\r\n        test_one(some_ints | ranges::to<vector>(), some_ints);\r\n        test_one(some_ints | ranges::to<forward_list>(), some_ints);\r\n    }\r\n\r\n    { // Validate some views\r\n        static_assert(test_one(views::iota(0, 10), views::iota(0, 10)));\r\n        test_one(views::iota(0, 10), views::iota(0, 10));\r\n\r\n        const string some_strings[] = {\"0\", \"3\", \"6\", \"9\", \"12\", \"15\"};\r\n        auto transformed            = some_ints | views::transform([](int x) { return to_string(x); });\r\n        test_one(transformed, some_strings);\r\n    }\r\n\r\n    { // empty range\r\n        using Span = span<string_view>;\r\n        static_assert(test_one(Span{}, Span{}));\r\n        test_one(Span{}, Span{});\r\n    }\r\n\r\n    static_assert(instantiation_test());\r\n    instantiation_test();\r\n\r\n    test_example_from_p2446r2();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2465R3_standard_library_modules/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n"
  },
  {
    "path": "tests/std/tests/P2465R3_standard_library_modules/classic.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// This translation unit exists to keep the classic #include directives isolated.\r\n\r\n#include <assert.h> // intentionally not <cassert>\r\n\r\n#include <force_include.hpp>\r\n\r\nvoid prepare_test_environment() {\r\n    assert(test_environment_preparer.succeeded());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2465R3_standard_library_modules/custom_format.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\n\r\nfrom stl.test.format import STLTestFormat, TestStep\r\nfrom stl.test.tests import TestType\r\n\r\n\r\nclass CustomTestFormat(STLTestFormat):\r\n    def getBuildSteps(self, test, litConfig, shared):\r\n        _, outputBase = test.getTempPaths()\r\n\r\n        stdIxx = os.path.join(litConfig.cxx_modules, 'std.ixx')\r\n        stdCompatIxx = os.path.join(litConfig.cxx_modules, 'std.compat.ixx')\r\n\r\n        testCpp = test.getSourcePath()\r\n        sourceDir = os.path.dirname(testCpp)\r\n        test2Cpp = os.path.join(sourceDir, 'test2.cpp')\r\n        test3Cpp = os.path.join(sourceDir, 'test3.cpp')\r\n        test4Cpp = os.path.join(sourceDir, 'test4.cpp')\r\n        classicCpp = os.path.join(sourceDir, 'classic.cpp')\r\n\r\n        # Dependency order is important here:\r\n        inputPaths = [stdIxx, stdCompatIxx, testCpp, test2Cpp, test3Cpp, test4Cpp, classicCpp]\r\n\r\n        cmd = [test.cxx, *inputPaths, *test.flags, *test.compileFlags]\r\n\r\n        if TestType.COMPILE in test.testType:\r\n            cmd += ['/c']\r\n        elif TestType.RUN in test.testType:\r\n            shared.execFile = f'{outputBase}.exe'\r\n            cmd += [f'/Fe{shared.execFile}', '/link', *test.linkFlags]\r\n\r\n        yield TestStep(cmd, shared.execDir, shared.env, False)\r\n"
  },
  {
    "path": "tests/std/tests/P2465R3_standard_library_modules/custombuild.pl",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nuse strict;\r\nuse warnings;\r\n\r\nuse Run;\r\n\r\nsub CustomBuildHook()\r\n{\r\n    my $cwd = Run::GetCWDName();\r\n\r\n    my $stlModulesDir = $ENV{STL_MODULES_DIR};\r\n\r\n    my $stdIxx = \"$stlModulesDir\\\\std.ixx\";\r\n    my $stdCompatIxx = \"$stlModulesDir\\\\std.compat.ixx\";\r\n\r\n    # Dependency order is important here:\r\n    my @inputPaths = ($stdIxx, $stdCompatIxx, \"test.cpp\", \"test2.cpp\", \"test3.cpp\", \"test4.cpp\", \"classic.cpp\");\r\n\r\n    Run::ExecuteCL(join(\" \", @inputPaths, \"/Fe$cwd.exe\"));\r\n}\r\n1\r\n"
  },
  {
    "path": "tests/std/tests/P2465R3_standard_library_modules/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\modules_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2465R3_standard_library_modules/lit.local.cfg",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\nimport site\r\nsite.addsitedir(os.path.dirname(os.path.dirname(__file__)))\r\nimport P2465R3_standard_library_modules.custom_format\r\n\r\nconfig.test_format = P2465R3_standard_library_modules.custom_format.CustomTestFormat()\r\n"
  },
  {
    "path": "tests/std/tests/P2465R3_standard_library_modules/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport std;\r\n\r\n#include <assert.h> // intentionally not <cassert>\r\n\r\n// SPECIAL: This is order-dependent and must be included after all other Standard imports/includes.\r\n#include <test_header_units_and_modules.hpp>\r\n\r\n// INTENTIONALLY AVOIDED: using namespace std;\r\n\r\nvoid prepare_test_environment();\r\nvoid all_std_cmeow_tests();\r\nvoid test_module_std_compat();\r\nvoid test_include_all_then_import_std();\r\nvoid test_include_all_then_import_std_compat();\r\n\r\nint main() {\r\n    prepare_test_environment(); // defined in classic.cpp\r\n    all_cpp_header_tests(); // defined in test_header_units_and_modules.hpp\r\n    all_std_cmeow_tests(); // defined below\r\n    test_module_std_compat(); // defined in test2.cpp\r\n    test_include_all_then_import_std(); // defined in test3.cpp\r\n    test_include_all_then_import_std_compat(); // defined in test4.cpp\r\n}\r\n\r\nvoid test_std_cassert() {\r\n    std::puts(\"Nothing to test in <cassert>, only macros.\");\r\n}\r\n\r\nvoid test_std_cctype() {\r\n    std::puts(\"Testing <cctype>.\");\r\n    assert(std::isalpha('b'));\r\n    assert(!std::isalpha('2'));\r\n}\r\n\r\nvoid test_std_cerrno() {\r\n    std::puts(\"Nothing to test in <cerrno>, only macros.\");\r\n}\r\n\r\nvoid test_std_cfenv() {\r\n    std::puts(\"Testing <cfenv>.\");\r\n    assert(std::fegetround() >= 0);\r\n}\r\n\r\nvoid test_std_cfloat() {\r\n    std::puts(\"Nothing to test in <cfloat>, only macros.\");\r\n}\r\n\r\nvoid test_std_cinttypes() {\r\n    std::puts(\"Testing <cinttypes>.\");\r\n    assert(std::strtoumax(\"0xABCDEF0123456789\", nullptr, 0) == 0xABCDEF0123456789ull);\r\n}\r\n\r\nvoid test_std_climits() {\r\n    std::puts(\"Nothing to test in <climits>, only macros.\");\r\n}\r\n\r\nvoid test_std_clocale() {\r\n    std::puts(\"Testing <clocale>.\");\r\n    const std::lconv* const ptr = std::localeconv();\r\n    assert(ptr != nullptr);\r\n}\r\n\r\nvoid test_std_cmath() {\r\n    std::puts(\"Testing <cmath>.\");\r\n\r\n    // Test C++'s Sufficient Additional Overloads\r\n    assert(std::sqrt(25.0) == 5.0);\r\n    assert(std::sqrt(25.0f) == 5.0f);\r\n    assert(std::sqrt(25) == 5.0);\r\n    static_assert(std::is_same_v<decltype(std::sqrt(25.0)), double>);\r\n    static_assert(std::is_same_v<decltype(std::sqrt(25.0f)), float>);\r\n    static_assert(std::is_same_v<decltype(std::sqrt(25)), double>);\r\n\r\n    // Test C's hypot(x, y), C++'s hypot(x, y, z), and Sufficient Additional Overloads\r\n    assert(std::hypot(3.0, 4.0) == 5.0);\r\n    assert(std::hypot(3.0f, 4.0f) == 5.0f);\r\n    assert(std::hypot(3, 4) == 5.0);\r\n    static_assert(std::is_same_v<decltype(std::hypot(3.0, 4.0)), double>);\r\n    static_assert(std::is_same_v<decltype(std::hypot(3.0f, 4.0f)), float>);\r\n    static_assert(std::is_same_v<decltype(std::hypot(3, 4)), double>);\r\n\r\n    assert(std::hypot(2.0, 3.0, 6.0) == 7.0);\r\n    assert(std::round(std::hypot(2.0f, 3.0f, 6.0f)) == 7.0f); // compensate for rounding error\r\n    assert(std::hypot(2, 3, 6) == 7.0);\r\n    static_assert(std::is_same_v<decltype(std::hypot(2.0, 3.0, 6.0)), double>);\r\n    static_assert(std::is_same_v<decltype(std::hypot(2.0f, 3.0f, 6.0f)), float>);\r\n    static_assert(std::is_same_v<decltype(std::hypot(2, 3, 6)), double>);\r\n\r\n    // Test C++'s lerp()\r\n    assert(std::lerp(100.0, 110.0, 0.25) == 102.5);\r\n\r\n    // Test C++'s Special Math\r\n    const double rz3 = std::riemann_zeta(3.0);\r\n    assert(rz3 > 1.2020569031);\r\n    assert(rz3 < 1.2020569032);\r\n}\r\n\r\nvoid test_std_csetjmp() {\r\n    std::puts(\"Testing <csetjmp>.\");\r\n    static_assert(sizeof(std::jmp_buf) > 0);\r\n}\r\n\r\nvoid test_std_csignal() {\r\n    std::puts(\"Testing <csignal>.\");\r\n    static_assert(sizeof(std::sig_atomic_t) > 0);\r\n}\r\n\r\nvoid test_std_cstdarg() {\r\n    std::puts(\"Testing <cstdarg>.\");\r\n    static_assert(sizeof(std::va_list) > 0);\r\n}\r\n\r\nvoid test_std_cstddef() {\r\n    std::puts(\"Testing <cstddef>.\");\r\n    static_assert(std::is_signed_v<std::ptrdiff_t>);\r\n\r\n    // Test C++'s byte\r\n    std::byte b{0x33};\r\n    b |= std::byte{0x85};\r\n    assert(std::to_integer<unsigned char>(b) == 0xB7);\r\n\r\n    // Test C++'s nullptr_t\r\n    static_assert(std::nullptr_t{} == nullptr);\r\n}\r\n\r\nvoid test_std_cstdint() {\r\n    std::puts(\"Testing <cstdint>.\");\r\n    static_assert(std::is_unsigned_v<std::uint16_t>);\r\n}\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4996) // was declared deprecated\r\nvoid test_std_cstdio() {\r\n    std::puts(\"Testing <cstdio>.\");\r\n    double dbl{0.0};\r\n    assert(std::sscanf(\"-3.25\", \"%lg\", &dbl) == 1);\r\n    assert(dbl == -3.25);\r\n}\r\n#pragma warning(pop)\r\n\r\nvoid test_std_cstdlib() {\r\n    std::puts(\"Testing <cstdlib>.\");\r\n    assert(std::strtod(\"7.125\", nullptr) == 7.125);\r\n}\r\n\r\nvoid test_std_cstring() {\r\n    std::puts(\"Testing <cstring>.\");\r\n    assert(std::strcmp(\"cats\", \"dogs\") < 0);\r\n}\r\n\r\nvoid test_std_ctime() {\r\n    std::puts(\"Testing <ctime>.\");\r\n    const std::time_t now = std::time(nullptr);\r\n    assert(now > 0);\r\n}\r\n\r\nvoid test_std_cuchar() {\r\n    std::puts(\"Testing <cuchar>.\");\r\n    char32_t c32{};\r\n    std::mbstate_t state{};\r\n    assert(std::mbrtoc32(&c32, \"x\", 1, &state) == 1);\r\n    assert(c32 == U'x');\r\n}\r\n\r\nvoid test_std_cwchar() {\r\n    std::puts(\"Testing <cwchar>.\");\r\n    assert(std::wcslen(L\"cute fluffy kittens\") == 19);\r\n}\r\n\r\nvoid test_std_cwctype() {\r\n    std::puts(\"Testing <cwctype>.\");\r\n    assert(std::iswalpha(L'b'));\r\n    assert(!std::iswalpha(L'2'));\r\n}\r\n\r\nvoid all_std_cmeow_tests() {\r\n    test_std_cassert();\r\n    test_std_cctype();\r\n    test_std_cerrno();\r\n    test_std_cfenv();\r\n    test_std_cfloat();\r\n    test_std_cinttypes();\r\n    test_std_climits();\r\n    test_std_clocale();\r\n    test_std_cmath();\r\n    test_std_csetjmp();\r\n    test_std_csignal();\r\n    test_std_cstdarg();\r\n    test_std_cstddef();\r\n    test_std_cstdint();\r\n    test_std_cstdio();\r\n    test_std_cstdlib();\r\n    test_std_cstring();\r\n    test_std_ctime();\r\n    test_std_cuchar();\r\n    test_std_cwchar();\r\n    test_std_cwctype();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2465R3_standard_library_modules/test2.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport std.compat;\r\n\r\n#include <assert.h> // intentionally not <cassert>\r\n\r\n// INTENTIONALLY AVOIDED: using namespace std;\r\n\r\nvoid test_export_import_std() {\r\n    ::puts(\"std.compat: Testing `export import std;`.\");\r\n\r\n    // Verify that std::vector is available:\r\n    const std::vector<int> v{10, 20, 30, 40, 50};\r\n    assert(v[2] == 30);\r\n\r\n    // Verify that `::operator new` is available:\r\n    const int* const ptr = new (std::nothrow) int{1729};\r\n    assert(ptr);\r\n    assert(*ptr == 1729);\r\n    delete ptr;\r\n\r\n    // Verify that the Sufficient Additional Overloads are available for std::sqrt():\r\n    assert(std::sqrt(25.0) == 5.0);\r\n    assert(std::sqrt(25.0f) == 5.0f);\r\n    assert(std::sqrt(25) == 5.0);\r\n    static_assert(std::is_same_v<decltype(std::sqrt(25.0)), double>);\r\n    static_assert(std::is_same_v<decltype(std::sqrt(25.0f)), float>);\r\n    static_assert(std::is_same_v<decltype(std::sqrt(25)), double>);\r\n}\r\n\r\ntemplate <typename Void, typename... Args>\r\nstruct IsGlobalHypotCallableImpl : std::false_type {};\r\n\r\ntemplate <typename... Args>\r\nstruct IsGlobalHypotCallableImpl<std::void_t<decltype(::hypot(std::declval<Args>()...))>, Args...> : std::true_type {};\r\n\r\ntemplate <typename... Args>\r\nconstexpr bool IsGlobalHypotCallable = IsGlobalHypotCallableImpl<void, Args...>::value;\r\n\r\nvoid test_binary_hypot() {\r\n    ::puts(\"std.compat: Testing binary hypot().\");\r\n\r\n    // hypot() is special. C's hypot(x, y) and C++'s Sufficient Additional Overloads\r\n    // are defined in the global namespace, then dragged into namespace std.\r\n    // C++'s hypot(x, y, z) (and its Sufficient Additional Overloads) are defined directly within namespace std.\r\n    // Therefore, the std.compat module should provide only 2-arg hypot() in the global namespace, not 3-arg.\r\n\r\n    static_assert(IsGlobalHypotCallable<double, double>);\r\n    static_assert(IsGlobalHypotCallable<float, float>);\r\n    static_assert(IsGlobalHypotCallable<int, int>);\r\n\r\n    static_assert(!IsGlobalHypotCallable<double, double, double>);\r\n    static_assert(!IsGlobalHypotCallable<float, float, float>);\r\n    static_assert(!IsGlobalHypotCallable<int, int, int>);\r\n\r\n    assert(::hypot(3.0, 4.0) == 5.0);\r\n    assert(::hypot(3.0f, 4.0f) == 5.0f);\r\n    assert(::hypot(3, 4) == 5.0);\r\n    static_assert(std::is_same_v<decltype(::hypot(3.0, 4.0)), double>);\r\n    static_assert(std::is_same_v<decltype(::hypot(3.0f, 4.0f)), float>);\r\n    static_assert(std::is_same_v<decltype(::hypot(3, 4)), double>);\r\n}\r\n\r\nvoid test_global_cassert() {\r\n    ::puts(\"std.compat: Nothing to test in <cassert>, only macros.\");\r\n}\r\n\r\nvoid test_global_cctype() {\r\n    ::puts(\"std.compat: Testing <cctype>.\");\r\n    assert(::isalpha('b'));\r\n    assert(!::isalpha('2'));\r\n}\r\n\r\nvoid test_global_cerrno() {\r\n    ::puts(\"std.compat: Nothing to test in <cerrno>, only macros.\");\r\n}\r\n\r\nvoid test_global_cfenv() {\r\n    ::puts(\"std.compat: Testing <cfenv>.\");\r\n    assert(::fegetround() >= 0);\r\n}\r\n\r\nvoid test_global_cfloat() {\r\n    ::puts(\"std.compat: Nothing to test in <cfloat>, only macros.\");\r\n}\r\n\r\nvoid test_global_cinttypes() {\r\n    ::puts(\"std.compat: Testing <cinttypes>.\");\r\n    assert(::strtoumax(\"0xABCDEF0123456789\", nullptr, 0) == 0xABCDEF0123456789ull);\r\n}\r\n\r\nvoid test_global_climits() {\r\n    ::puts(\"std.compat: Nothing to test in <climits>, only macros.\");\r\n}\r\n\r\nvoid test_global_clocale() {\r\n    ::puts(\"std.compat: Testing <clocale>.\");\r\n    const ::lconv* const ptr = ::localeconv();\r\n    assert(ptr != nullptr);\r\n}\r\n\r\nvoid test_global_cmath() {\r\n    ::puts(\"std.compat: Testing <cmath>.\");\r\n\r\n    // Verify that the Sufficient Additional Overloads are available for ::sqrt():\r\n    assert(::sqrt(25.0) == 5.0);\r\n    assert(::sqrt(25.0f) == 5.0f);\r\n    assert(::sqrt(25) == 5.0);\r\n    static_assert(std::is_same_v<decltype(::sqrt(25.0)), double>);\r\n    static_assert(std::is_same_v<decltype(::sqrt(25.0f)), float>);\r\n    static_assert(std::is_same_v<decltype(::sqrt(25)), double>);\r\n}\r\n\r\nvoid test_global_csetjmp() {\r\n    ::puts(\"std.compat: Testing <csetjmp>.\");\r\n    static_assert(sizeof(::jmp_buf) > 0);\r\n}\r\n\r\nvoid test_global_csignal() {\r\n    ::puts(\"std.compat: Testing <csignal>.\");\r\n    static_assert(sizeof(::sig_atomic_t) > 0);\r\n}\r\n\r\nvoid test_global_cstdarg() {\r\n    ::puts(\"std.compat: Testing <cstdarg>.\");\r\n    static_assert(sizeof(::va_list) > 0);\r\n}\r\n\r\nvoid test_global_cstddef() {\r\n    ::puts(\"std.compat: Testing <cstddef>.\");\r\n    static_assert(std::is_signed_v<::ptrdiff_t>);\r\n}\r\n\r\nvoid test_global_cstdint() {\r\n    ::puts(\"std.compat: Testing <cstdint>.\");\r\n    static_assert(std::is_unsigned_v<::uint16_t>);\r\n}\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4996) // was declared deprecated\r\nvoid test_global_cstdio() {\r\n    ::puts(\"std.compat: Testing <cstdio>.\");\r\n    double dbl{0.0};\r\n    assert(::sscanf(\"-3.25\", \"%lg\", &dbl) == 1);\r\n    assert(dbl == -3.25);\r\n}\r\n#pragma warning(pop)\r\n\r\nvoid test_global_cstdlib() {\r\n    ::puts(\"std.compat: Testing <cstdlib>.\");\r\n    assert(::strtod(\"7.125\", nullptr) == 7.125);\r\n}\r\n\r\nvoid test_global_cstring() {\r\n    ::puts(\"std.compat: Testing <cstring>.\");\r\n    assert(::strcmp(\"cats\", \"dogs\") < 0);\r\n}\r\n\r\nvoid test_global_ctime() {\r\n    ::puts(\"std.compat: Testing <ctime>.\");\r\n    const ::time_t now = ::time(nullptr);\r\n    assert(now > 0);\r\n}\r\n\r\nvoid test_global_cuchar() {\r\n    ::puts(\"std.compat: Testing <cuchar>.\");\r\n    char32_t c32{};\r\n    ::mbstate_t state{};\r\n    assert(::mbrtoc32(&c32, \"x\", 1, &state) == 1);\r\n    assert(c32 == U'x');\r\n}\r\n\r\nvoid test_global_cwchar() {\r\n    ::puts(\"std.compat: Testing <cwchar>.\");\r\n    assert(::wcslen(L\"cute fluffy kittens\") == 19);\r\n}\r\n\r\nvoid test_global_cwctype() {\r\n    ::puts(\"std.compat: Testing <cwctype>.\");\r\n    assert(::iswalpha(L'b'));\r\n    assert(!::iswalpha(L'2'));\r\n}\r\n\r\nvoid all_global_cmeow_tests() {\r\n    test_global_cassert();\r\n    test_global_cctype();\r\n    test_global_cerrno();\r\n    test_global_cfenv();\r\n    test_global_cfloat();\r\n    test_global_cinttypes();\r\n    test_global_climits();\r\n    test_global_clocale();\r\n    test_global_cmath();\r\n    test_global_csetjmp();\r\n    test_global_csignal();\r\n    test_global_cstdarg();\r\n    test_global_cstddef();\r\n    test_global_cstdint();\r\n    test_global_cstdio();\r\n    test_global_cstdlib();\r\n    test_global_cstring();\r\n    test_global_ctime();\r\n    test_global_cuchar();\r\n    test_global_cwchar();\r\n    test_global_cwctype();\r\n}\r\n\r\nvoid test_module_std_compat() {\r\n    test_export_import_std();\r\n    test_binary_hypot();\r\n    all_global_cmeow_tests();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2465R3_standard_library_modules/test3.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <__msvc_all_public_headers.hpp>\r\n\r\nimport std;\r\n\r\n// INTENTIONALLY AVOIDED: using namespace std;\r\n\r\nvoid test_include_all_then_import_std() {\r\n    // Verify that std::vector and std::ranges algorithms are available:\r\n    std::vector<int> v{31, 41, 59, 26, 53, 58, 97, 93};\r\n    assert(!std::ranges::is_sorted(v));\r\n    std::ranges::sort(v);\r\n    assert(std::ranges::is_sorted(v));\r\n    const std::vector<int> sorted{26, 31, 41, 53, 58, 59, 93, 97};\r\n    assert(v == sorted);\r\n\r\n    // Verify that the Sufficient Additional Overloads are available for std::sqrt():\r\n    assert(std::sqrt(25.0) == 5.0);\r\n    assert(std::sqrt(25.0f) == 5.0f);\r\n    assert(std::sqrt(25) == 5.0);\r\n    static_assert(std::is_same_v<decltype(std::sqrt(25.0)), double>);\r\n    static_assert(std::is_same_v<decltype(std::sqrt(25.0f)), float>);\r\n    static_assert(std::is_same_v<decltype(std::sqrt(25)), double>);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2465R3_standard_library_modules/test4.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <__msvc_all_public_headers.hpp>\r\n\r\nimport std.compat;\r\n\r\n// INTENTIONALLY AVOIDED: using namespace std;\r\n\r\nvoid test_include_all_then_import_std_compat() {\r\n    // Verify that std::vector and std::ranges algorithms are available:\r\n    std::vector<int> v{31, 41, 59, 26, 53, 58, 97, 93};\r\n    assert(!std::ranges::is_sorted(v));\r\n    std::ranges::sort(v);\r\n    assert(std::ranges::is_sorted(v));\r\n    const std::vector<int> sorted{26, 31, 41, 53, 58, 59, 93, 97};\r\n    assert(v == sorted);\r\n\r\n    // Verify that the Sufficient Additional Overloads are available for std::sqrt():\r\n    assert(std::sqrt(25.0) == 5.0);\r\n    assert(std::sqrt(25.0f) == 5.0f);\r\n    assert(std::sqrt(25) == 5.0);\r\n    static_assert(std::is_same_v<decltype(std::sqrt(25.0)), double>);\r\n    static_assert(std::is_same_v<decltype(std::sqrt(25.0f)), float>);\r\n    static_assert(std::is_same_v<decltype(std::sqrt(25)), double>);\r\n\r\n    // Verify that the Sufficient Additional Overloads are available for ::sqrt():\r\n    assert(::sqrt(25.0) == 5.0);\r\n    assert(::sqrt(25.0f) == 5.0f);\r\n    assert(::sqrt(25) == 5.0);\r\n    static_assert(std::is_same_v<decltype(::sqrt(25.0)), double>);\r\n    static_assert(std::is_same_v<decltype(::sqrt(25.0f)), float>);\r\n    static_assert(std::is_same_v<decltype(::sqrt(25)), double>);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2467R1_exclusive_mode_fstreams/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2467R1_exclusive_mode_fstreams/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <filesystem>\r\n#include <fstream>\r\n#include <ios>\r\n#include <type_traits>\r\n\r\nnamespace fs = std::filesystem;\r\n\r\nconst fs::path test_file{L\"test.dat\"};\r\n\r\nstruct CreateTempFile {\r\n    fs::path m_path;\r\n    CreateTempFile(const fs::path& path) : m_path(path) {\r\n        std::ofstream{path};\r\n    }\r\n\r\n    ~CreateTempFile() {\r\n        fs::remove(m_path);\r\n    }\r\n};\r\n\r\nvoid test_file_create(const std::ios_base::openmode mode) {\r\n    {\r\n        std::fstream file{test_file, mode};\r\n        assert(!file.fail());\r\n    }\r\n    assert(fs::exists(test_file));\r\n    fs::remove(test_file);\r\n}\r\n\r\nvoid test_file_already_exists(const std::ios_base::openmode mode) {\r\n    CreateTempFile tmp{test_file};\r\n    std::fstream file{test_file, mode};\r\n    assert(file.fail());\r\n}\r\n\r\nvoid test_file_create_fail(const std::ios_base::openmode bad_mode) {\r\n    {\r\n        std::fstream file{test_file, bad_mode};\r\n        assert(file.fail());\r\n    }\r\n    assert(!fs::exists(test_file));\r\n}\r\n\r\n// Also test GH-3401: <ios>: std::ios_base::openmode is not a bitmask type\r\nconstexpr bool test_gh_3401() {\r\n    using namespace std;\r\n    using IB        = ios_base;\r\n    auto test_flags = [](const auto first, const auto second) {\r\n        auto flags = first;\r\n        assert(flags & first);\r\n\r\n        flags |= second;\r\n        assert(flags & first);\r\n        assert(flags & second);\r\n\r\n        flags &= ~second;\r\n        assert(flags & first);\r\n        assert(!(flags & second));\r\n\r\n        flags = first | second;\r\n        assert(flags & first);\r\n        assert(flags & second);\r\n\r\n        flags = first ^ second;\r\n        assert(flags & first);\r\n        assert(flags & second);\r\n\r\n        flags ^= second;\r\n        assert(flags & first);\r\n        assert(!(flags & second));\r\n    };\r\n    test_flags(IB::binary, IB::app);\r\n    test_flags(IB::dec, IB::oct);\r\n    test_flags(IB::badbit, IB::failbit);\r\n    test_flags(IB::cur, IB::end);\r\n\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::beg)>, IB::seekdir>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::cur)>, IB::seekdir>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::end)>, IB::seekdir>);\r\n\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::in)>, IB::openmode>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::out)>, IB::openmode>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::ate)>, IB::openmode>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::app)>, IB::openmode>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::trunc)>, IB::openmode>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::binary)>, IB::openmode>);\r\n#if _HAS_CXX23\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::noreplace)>, IB::openmode>);\r\n#endif\r\n\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::goodbit)>, IB::iostate>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::eofbit)>, IB::iostate>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::failbit)>, IB::iostate>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::badbit)>, IB::iostate>);\r\n\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::skipws)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::unitbuf)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::uppercase)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::showbase)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::showpoint)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::showpos)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::left)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::right)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::internal)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::dec)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::oct)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::hex)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::scientific)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::fixed)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::boolalpha)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::adjustfield)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::basefield)>, IB::fmtflags>);\r\n    static_assert(is_same_v<remove_const_t<decltype(IB::floatfield)>, IB::fmtflags>);\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    using IB = std::ios_base;\r\n\r\n    test_file_create(IB::out | IB::noreplace);\r\n    test_file_create(IB::out | IB::trunc | IB::noreplace);\r\n    test_file_create(IB::out | IB::in | IB::trunc | IB::noreplace);\r\n    test_file_create(IB::out | IB::binary | IB::noreplace);\r\n    test_file_create(IB::out | IB::binary | IB::trunc | IB::noreplace);\r\n    test_file_create(IB::out | IB::in | IB::trunc | IB::binary | IB::noreplace);\r\n\r\n    test_file_already_exists(IB::out | IB::noreplace);\r\n    test_file_already_exists(IB::out | IB::trunc | IB::noreplace);\r\n    test_file_already_exists(IB::out | IB::in | IB::trunc | IB::noreplace);\r\n    test_file_already_exists(IB::out | IB::binary | IB::noreplace);\r\n    test_file_already_exists(IB::out | IB::binary | IB::trunc | IB::noreplace);\r\n    test_file_already_exists(IB::out | IB::in | IB::trunc | IB::binary | IB::noreplace);\r\n\r\n    test_file_create_fail(IB::in | IB::noreplace);\r\n    test_file_create_fail(IB::in | IB::trunc | IB::noreplace);\r\n    test_file_create_fail(IB::in | IB::binary | IB::noreplace);\r\n    test_file_create_fail(IB::in | IB::binary | IB::trunc | IB::noreplace);\r\n\r\n    test_gh_3401();\r\n    static_assert(test_gh_3401());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2474R2_views_repeat/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2474R2_views_repeat/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <ranges>\r\n#include <string>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T, class B>\r\nconcept CanViewRepeat = requires(T&& v, B b) { views::repeat(forward<T>(v), b); };\r\n\r\ntemplate <class R>\r\nconcept CanSize = requires(R& r) { ranges::size(r); };\r\n\r\ntemplate <class R>\r\nconcept CanTakeDrop = requires(R r) {\r\n    forward<R>(r) | views::take(1);\r\n    forward<R>(r) | views::drop(1);\r\n};\r\n\r\nstruct non_default {\r\n    int value{};\r\n    constexpr non_default(int v) : value(v) {}\r\n    constexpr bool operator==(const non_default&) const = default;\r\n};\r\nstruct move_only {\r\n    int value{};\r\n    constexpr move_only(int v) : value(v) {}\r\n    move_only(move_only&&)                            = default;\r\n    move_only& operator=(move_only&&)                 = default;\r\n    constexpr bool operator==(const move_only&) const = default;\r\n};\r\n\r\ntemplate <class T>\r\nconstexpr conditional_t<!is_copy_constructible_v<T> && is_move_constructible_v<T>, T&&, const T&> //\r\n    move_if_move_only(T& val) {\r\n    return move(val);\r\n}\r\n\r\ntemplate <class T, class B = unreachable_sentinel_t>\r\nconstexpr void test_common(T val, B bound = unreachable_sentinel) {\r\n    constexpr bool bounded = !same_as<B, unreachable_sentinel_t>;\r\n    using R                = ranges::repeat_view<T, B>;\r\n\r\n    static_assert(same_as<ranges::range_value_t<R>, T>);\r\n    static_assert(same_as<ranges::range_reference_t<R>, const T&>);\r\n    static_assert(same_as<ranges::range_reference_t<const R>, const T&>);\r\n\r\n    static_assert(ranges::random_access_range<R>);\r\n    static_assert(!ranges::contiguous_range<R>);\r\n    static_assert(ranges::common_range<R> == bounded);\r\n\r\n    static_assert(ranges::view<R>);\r\n    static_assert(movable<R> == movable<T>);\r\n    static_assert(copy_constructible<R> == copy_constructible<T>);\r\n    static_assert(copyable<R> == copyable<T>);\r\n    static_assert(default_initializable<R> == default_initializable<T>);\r\n    static_assert(is_nothrow_copy_constructible_v<R> == is_nothrow_copy_constructible_v<T>); // strengthened\r\n    static_assert(is_nothrow_copy_assignable_v<R> == is_nothrow_copy_assignable_v<T>); // strengthened\r\n    static_assert(is_nothrow_move_constructible_v<R> == is_nothrow_move_constructible_v<T>); // strengthened\r\n    static_assert(is_nothrow_move_assignable_v<R> == is_nothrow_move_assignable_v<T>); // strengthened\r\n\r\n    if constexpr (!bounded) {\r\n        static_assert(same_as<ranges::range_difference_t<R>, ptrdiff_t>);\r\n        static_assert(same_as<ranges::sentinel_t<R>, unreachable_sentinel_t>);\r\n    } else if constexpr (_Signed_integer_like<B>) {\r\n        static_assert(same_as<ranges::range_difference_t<R>, B>);\r\n    } else {\r\n        static_assert(same_as<ranges::range_difference_t<R>, ranges::_Iota_diff_t<B>>);\r\n    }\r\n\r\n    static_assert(ranges::common_range<const R> == bounded);\r\n    static_assert(same_as<ranges::iterator_t<const R>, ranges::iterator_t<R>>);\r\n\r\n    static_assert(same_as<ranges::range_difference_t<const R>, ranges::range_difference_t<R>>);\r\n\r\n    static_assert(CanSize<R> == bounded);\r\n\r\n    same_as<R> auto rng = views::repeat(move_if_move_only(val), bound);\r\n    if constexpr (copyable<T>) {\r\n        static_assert(noexcept(views::repeat(val, bound)) == is_nothrow_copy_constructible_v<T>); // strengthened\r\n        static_assert(noexcept(rng | views::drop(1)) == is_nothrow_copy_constructible_v<T>); // strengthened\r\n        static_assert(noexcept(rng | views::take(1)) == is_nothrow_copy_constructible_v<T>); // strengthened\r\n    }\r\n    static_assert(noexcept(views::repeat(move(val), bound)) == is_nothrow_move_constructible_v<T>); // strengthened\r\n    static_assert(noexcept(move(rng) | views::drop(1)) == is_nothrow_move_constructible_v<T>); // strengthened\r\n    static_assert(noexcept(move(rng) | views::take(1)) == is_nothrow_move_constructible_v<T>); // strengthened\r\n\r\n    if constexpr (bounded) {\r\n        B i = 0;\r\n        for (const auto& v : rng) {\r\n            assert(v == val);\r\n            ++i;\r\n        }\r\n        assert(i == bound);\r\n\r\n        static_assert(noexcept(rng.end())); // strengthened\r\n        assert(cmp_equal(rng.size(), bound));\r\n        static_assert(noexcept(rng.size())); // strengthened\r\n\r\n        constexpr int amount   = 3;\r\n        const auto dist        = ranges::distance(rng);\r\n        const auto take_amount = ranges::min(dist, amount);\r\n\r\n        const same_as<R> auto take = rng | views::take(amount);\r\n        assert(cmp_equal(take.size(), take_amount));\r\n\r\n        const auto drop_amount     = dist - ranges::min(dist, amount);\r\n        const same_as<R> auto drop = rng | views::drop(amount);\r\n        assert(cmp_equal(drop.size(), drop_amount));\r\n    } else {\r\n        auto it = rng.begin();\r\n        for (int i = 0; i < 10; ++i) {\r\n            assert(*it == val);\r\n            ++it;\r\n        }\r\n        static_assert(noexcept(rng.end()));\r\n\r\n        using ReconR = ranges::repeat_view<T, ranges::range_difference_t<R>>;\r\n\r\n        const same_as<ReconR> auto take = move_if_move_only(rng) | views::take(3);\r\n        assert(take.size() == 3);\r\n\r\n        const same_as<R> auto drop = move_if_move_only(rng) | views::drop(3);\r\n        static_assert(!CanSize<decltype(drop)>);\r\n    }\r\n\r\n    static_assert(noexcept(rng.begin())); // strengthened\r\n    using I = ranges::iterator_t<R>;\r\n    static_assert(same_as<typename I::iterator_concept, random_access_iterator_tag>);\r\n    static_assert(same_as<typename I::iterator_category, random_access_iterator_tag>);\r\n\r\n    static_assert(is_nothrow_default_constructible_v<I>);\r\n    assert(I{} == I{});\r\n    assert(!(I{} != I{}));\r\n    assert(!(I{} < I{}));\r\n    assert(!(I{} > I{}));\r\n    assert(I{} <= I{});\r\n    assert(I{} >= I{});\r\n    assert(I{} <=> I{} == 0);\r\n    assert(I{} - I{} == 0);\r\n\r\n    const I first  = rng.begin();\r\n    const I second = ranges::next(first);\r\n\r\n    assert(*first == *second);\r\n    assert(&*first == &*second);\r\n    static_assert(noexcept(*first));\r\n\r\n    {\r\n        I tmp = first;\r\n        static_assert(is_nothrow_copy_constructible_v<I>);\r\n\r\n        I i = move(tmp);\r\n        static_assert(is_nothrow_move_constructible_v<I>);\r\n\r\n        tmp = i;\r\n        static_assert(is_nothrow_copy_assignable_v<I>);\r\n\r\n        i = move(tmp);\r\n        static_assert(is_nothrow_move_assignable_v<I>);\r\n    }\r\n\r\n    assert(!(first == second));\r\n    assert(!(second == first));\r\n    static_assert(noexcept(first == second)); // strengthened\r\n\r\n    assert(first != second);\r\n    assert(second != first);\r\n    static_assert(noexcept(first != second)); // strengthened\r\n\r\n    assert(first < second);\r\n    assert(!(second < first));\r\n    static_assert(noexcept(first < second)); // strengthened\r\n\r\n    assert(!(first > second));\r\n    assert(second > first);\r\n    static_assert(noexcept(first > second)); // strengthened\r\n\r\n    assert(first <= second);\r\n    assert(!(second <= first));\r\n    static_assert(noexcept(first <= second)); // strengthened\r\n\r\n    assert(!(first >= second));\r\n    assert(second >= first);\r\n    static_assert(noexcept(first >= second)); // strengthened\r\n\r\n    assert((first <=> second) < 0);\r\n    assert((second <=> first) > 0);\r\n    static_assert(noexcept(first <=> second)); // strengthened\r\n\r\n    {\r\n        I i = first;\r\n\r\n        assert(&++i == &i);\r\n        assert(i == second);\r\n        static_assert(noexcept(++i)); // strengthened\r\n\r\n        i = first;\r\n\r\n        assert(i++ == first);\r\n        assert(i == second);\r\n        static_assert(noexcept(i++)); // strengthened\r\n\r\n        assert(&--i == &i);\r\n        assert(i == first);\r\n        static_assert(noexcept(--i)); // strengthened\r\n\r\n        i = second;\r\n\r\n        assert(i-- == second);\r\n        assert(i == first);\r\n        static_assert(noexcept(i--)); // strengthened\r\n\r\n        assert(i + 1 == second);\r\n        static_assert(noexcept(i + 1)); // strengthened\r\n\r\n        assert(1 + i == second);\r\n        static_assert(noexcept(1 + i)); // strengthened\r\n\r\n        assert(&(i += 1) == &i);\r\n        assert(i == second);\r\n        static_assert(noexcept(i += 1)); // strengthened\r\n        assert(i - 1 == first);\r\n        static_assert(noexcept(i - 1)); // strengthened\r\n\r\n        assert(&(i -= 1) == &i);\r\n        assert(i == first);\r\n        static_assert(noexcept(i -= 1)); // strengthened\r\n\r\n        assert(second - first == 1);\r\n        static_assert(noexcept(second - first)); // strengthened\r\n\r\n        assert(first[1] == *second);\r\n        assert(second[-1] == *first);\r\n        static_assert(noexcept(first[1])); // strengthened\r\n    }\r\n\r\n    const same_as<ranges::sentinel_t<R>> auto last = rng.end();\r\n    const bool is_empty                            = bound == 0;\r\n    assert((first == last) == is_empty);\r\n    static_assert(noexcept(first == last)); // strengthened\r\n    assert((first != last) != is_empty);\r\n    static_assert(noexcept(first != last)); // strengthened\r\n    if constexpr (bounded) {\r\n        assert(cmp_equal(last - first, rng.size()));\r\n        static_assert(noexcept(last - first)); // strengthened\r\n    }\r\n\r\n    const same_as<ranges::const_iterator_t<R>> auto cfirst = rng.cbegin();\r\n    assert(cfirst == first);\r\n    const same_as<ranges::const_sentinel_t<R>> auto clast = rng.cend();\r\n    if constexpr (ranges::common_range<R>) {\r\n        assert(clast == last);\r\n        assert(cmp_equal(clast - cfirst, rng.size()));\r\n    } else {\r\n        static_assert(same_as<remove_const_t<decltype(clast)>, unreachable_sentinel_t>);\r\n    }\r\n}\r\n\r\nstruct move_tester {\r\n    int x         = -1;\r\n    move_tester() = default;\r\n    constexpr move_tester(move_tester&& other) noexcept {\r\n        other.x = 1;\r\n    }\r\n};\r\n\r\nstruct forward_tester {\r\n    int x            = -1;\r\n    forward_tester() = default;\r\n    constexpr forward_tester(forward_tester& other) : x(1) {\r\n        other.x = 1;\r\n    }\r\n    constexpr forward_tester(forward_tester&& other) : x(2) {\r\n        other.x = 2;\r\n    }\r\n};\r\n\r\nstruct tuple_tester {\r\n    forward_tester y;\r\n    forward_tester z;\r\n};\r\n\r\nstruct rvalue_only_to_sentinel {\r\n    template <class Sent>\r\n    constexpr operator Sent() && noexcept {\r\n        if constexpr (is_same_v<Sent, unreachable_sentinel_t>) {\r\n            return {};\r\n        } else {\r\n            return Sent{1};\r\n        }\r\n    }\r\n};\r\n\r\n\r\ntemplate <class IntLike>\r\nconstexpr void test_iterator_arithmetic() {\r\n    auto rv    = views::repeat(0, IntLike{20u});\r\n    auto first = rv.begin();\r\n    auto last  = rv.end();\r\n    assert(last - first == 20);\r\n    first += 2;\r\n    last -= 3;\r\n    assert(last - first == 15);\r\n}\r\n\r\ntemplate <class T>\r\nconstexpr void test_piecewise_construction_from_empty_braces() {\r\n    ranges::repeat_view<T> r{piecewise_construct, {}, {}};\r\n    assert(r.front() == T{});\r\n}\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\n\r\nstruct adl_validator {\r\n    constexpr explicit adl_validator(holder<incomplete>*) noexcept {}\r\n};\r\n\r\nconstexpr void test_piecewise_construction_for_adl() {\r\n    constexpr holder<incomplete>* arg_ptr = nullptr;\r\n    // Intentionally std::-qualify make_tuple to avoid ADL.\r\n    {\r\n        (void) ranges::repeat_view<adl_validator>{piecewise_construct, std::make_tuple(arg_ptr)};\r\n    }\r\n    {\r\n        ranges::repeat_view<adl_validator, ptrdiff_t> r{piecewise_construct, std::make_tuple(arg_ptr)};\r\n        assert(r.size() == 0);\r\n    }\r\n    {\r\n        ranges::repeat_view<adl_validator, ptrdiff_t> r{\r\n            piecewise_construct, std::make_tuple(arg_ptr), std::make_tuple(ptrdiff_t{42})};\r\n        assert(r.size() == 42);\r\n    }\r\n}\r\n#endif // ^^^ no workaround ^^^\r\n\r\ntemplate <class Sent>\r\nconstexpr void test_make_sentinel_from_rvalue() {\r\n    ranges::repeat_view<int, Sent> r{piecewise_construct, make_tuple(42), make_tuple(rvalue_only_to_sentinel{})};\r\n    assert(r.front() == 42);\r\n    if constexpr (!is_same_v<Sent, unreachable_sentinel_t>) {\r\n        assert(r.size() == 1);\r\n    }\r\n}\r\n\r\nconstexpr bool test() {\r\n    using namespace string_literals;\r\n\r\n    test_common(7, 5);\r\n    test_common(7, 2);\r\n    test_common(7, 0);\r\n    test_common(3);\r\n    test_common<non_default>(3);\r\n    test_common<move_only>(3);\r\n    test_common(\"woof\"s, 5);\r\n    test_common(\"woof\"s, 2);\r\n    test_common(\"meow\"s);\r\n\r\n    static_assert(!CanViewRepeat<const move_tester&, int>);\r\n    static_assert(CanViewRepeat<move_tester&&, int>);\r\n    static_assert(CanSize<ranges::repeat_view<int, _Signed128>>);\r\n\r\n    {\r\n        move_tester to_move;\r\n        (void) views::repeat(move(to_move));\r\n        assert(to_move.x == 1);\r\n        using repeat_move = ranges::repeat_view<move_tester>;\r\n        static_assert(CanTakeDrop<repeat_move>);\r\n        static_assert(!CanTakeDrop<const repeat_move&>);\r\n    }\r\n    {\r\n        forward_tester to_copy;\r\n        forward_tester to_move;\r\n        ranges::repeat_view<tuple_tester> r(piecewise_construct, forward_as_tuple(to_copy, move(to_move)));\r\n        const auto& i = *r.begin();\r\n        assert(i.y.x == 1);\r\n        assert(i.z.x == 2);\r\n        assert(to_copy.x == 1);\r\n        assert(to_move.x == 2);\r\n    }\r\n\r\n    // GH-4251: <ranges>: repeat_view<T, unsigned int> emits truncation warnings\r\n    test_iterator_arithmetic<unsigned char>();\r\n    test_iterator_arithmetic<unsigned short>();\r\n    test_iterator_arithmetic<unsigned int>();\r\n    test_iterator_arithmetic<unsigned long>();\r\n    test_iterator_arithmetic<unsigned long long>();\r\n    test_iterator_arithmetic<signed char>();\r\n    test_iterator_arithmetic<short>();\r\n    test_iterator_arithmetic<int>();\r\n    test_iterator_arithmetic<long>();\r\n    test_iterator_arithmetic<long long>();\r\n    test_iterator_arithmetic<char>();\r\n#ifdef __cpp_char8_t\r\n    test_iterator_arithmetic<char8_t>();\r\n#endif // defined(__cpp_char8_t)\r\n    test_iterator_arithmetic<char16_t>();\r\n    test_iterator_arithmetic<char32_t>();\r\n    test_iterator_arithmetic<wchar_t>();\r\n    test_iterator_arithmetic<_Signed128>();\r\n\r\n    // GH-5387: \"<ranges>: Cannot construct repeat_view via {piecewise_construct, {}, {}}\"\r\n    test_piecewise_construction_from_empty_braces<int>();\r\n    test_piecewise_construction_from_empty_braces<string>();\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n    test_piecewise_construction_for_adl();\r\n#endif // ^^^ no workaround ^^^\r\n    test_make_sentinel_from_rvalue<int>();\r\n    test_make_sentinel_from_rvalue<_Signed128>();\r\n    test_make_sentinel_from_rvalue<unreachable_sentinel_t>();\r\n\r\n    return true;\r\n}\r\n\r\n// Check LWG-3875 \"std::ranges::repeat_view<T, IntegerClass>::iterator may be ill-formed\"\r\nstatic_assert(CanViewRepeat<string, long long>);\r\nstatic_assert(CanViewRepeat<string, unsigned long long>);\r\nstatic_assert(CanViewRepeat<string, _Signed128>);\r\nstatic_assert(\r\n    !CanViewRepeat<string, _Unsigned128>); // _Unsigned128 does not satisfy 'integer-like-with-usable-difference-type'\r\n\r\n// Check LWG-4053 \"Unary call to std::views::repeat does not decay the argument\" (affects CTAD only due to LWG-4054)\r\nstatic_assert(is_same_v<decltype(ranges::repeat_view(ranges::repeat_view(42))), ranges::repeat_view<int>>);\r\nstatic_assert(is_same_v<decltype(ranges::repeat_view(\"Hello world!\")), ranges::repeat_view<const char*>>);\r\nstatic_assert(is_same_v<decltype(ranges::repeat_view(test)), ranges::repeat_view<bool (*)()>>);\r\n\r\n// Check LWG-4054 \"Repeating a repeat_view should repeat the view\"\r\nstatic_assert(is_same_v<decltype(views::repeat(views::repeat(42))), ranges::repeat_view<ranges::repeat_view<int>>>);\r\nstatic_assert(is_same_v<decltype(views::repeat(\"Hello world!\")), ranges::repeat_view<const char*>>);\r\nstatic_assert(is_same_v<decltype(views::repeat(test)), ranges::repeat_view<bool (*)()>>);\r\n\r\n// Check GH-3392 \"<ranges>: views::repeat(...) | views::take(...) is not always a valid range\"\r\nstatic_assert(ranges::range<decltype(views::repeat('3', 100ull) | views::take(3))>);\r\nstatic_assert(ranges::range<decltype(views::repeat('3', 100ull) | views::drop(3))>);\r\n\r\nint main() {\r\n    assert(test());\r\n    static_assert(test());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2474R2_views_repeat_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2474R2_views_repeat_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstddef>\r\n#include <limits>\r\n#include <ranges>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\nusing ranges::repeat_view;\r\n\r\nvoid test_view_lvalue_negative() {\r\n    const int lvalue        = 1;\r\n    [[maybe_unused]] auto v = repeat_view(lvalue, -1); // bound must be positive\r\n}\r\n\r\nvoid test_view_rvalue_negative() {\r\n    [[maybe_unused]] auto v = repeat_view(1, -1); // bound must be positive\r\n}\r\n\r\nvoid test_iter_decrement() {\r\n    repeat_view v(1, 1);\r\n    auto it = v.begin();\r\n    --it; // can't decrement bound past 0\r\n}\r\n\r\nvoid test_iter_decrement_overflow() {\r\n    repeat_view v(1);\r\n    auto it = v.begin();\r\n    it += (numeric_limits<ptrdiff_t>::min)();\r\n    --it; // integer overflow\r\n}\r\n\r\nvoid test_iter_increment() {\r\n    repeat_view v(1);\r\n    auto it = v.begin();\r\n    it += (numeric_limits<ptrdiff_t>::max)();\r\n    ++it; // integer overflow\r\n}\r\n\r\nvoid test_iter_subtract_zero() {\r\n    repeat_view v(1, 1);\r\n    auto it = v.begin();\r\n    it -= 1; // can't subtract bound past 0\r\n}\r\n\r\nvoid test_iter_subtract_pos_overflow() {\r\n    repeat_view v(1);\r\n    auto it = v.begin();\r\n    it += (numeric_limits<ptrdiff_t>::max)();\r\n    it -= -1; // integer overflow\r\n}\r\n\r\nvoid test_iter_subtract_neg_overflow() {\r\n    repeat_view v(1);\r\n    auto it = v.begin();\r\n    it += (numeric_limits<ptrdiff_t>::min)();\r\n    it -= 1; // integer overflow\r\n}\r\n\r\nvoid test_iter_add_zero() {\r\n    repeat_view v(1, 1);\r\n    auto it = v.begin();\r\n    it += -1; // can't subtract bound past 0\r\n}\r\n\r\nvoid test_iter_add_pos_overflow() {\r\n    repeat_view v(1);\r\n    auto it = v.begin();\r\n    it += (numeric_limits<ptrdiff_t>::max)();\r\n    it += 1; // integer overflow\r\n}\r\n\r\nvoid test_iter_add_neg_overflow() {\r\n    repeat_view v(1);\r\n    auto it = v.begin();\r\n    it += (numeric_limits<ptrdiff_t>::min)();\r\n    it += -1; // integer overflow\r\n}\r\n\r\ntemplate <class I>\r\nusing iota_diff_t = ranges::range_difference_t<ranges::iota_view<I>>;\r\n\r\ntemplate <class U>\r\nconstexpr iota_diff_t<U> positive_huge_diff{iota_diff_t<U>{static_cast<U>(-1)} + 1};\r\n\r\ntemplate <class U>\r\nconstexpr iota_diff_t<U> negative_huge_diff{-iota_diff_t<U>{static_cast<U>(-1)} - 1};\r\n\r\ntemplate <class U>\r\nvoid test_iter_add_pos_huge() {\r\n    auto rv    = views::repeat(0, U{20u});\r\n    auto first = rv.begin();\r\n\r\n    using difference_type = ranges::range_difference_t<decltype(rv)>;\r\n    first += static_cast<difference_type>(positive_huge_diff<U>);\r\n}\r\n\r\ntemplate <class U>\r\nvoid test_iter_add_neg_huge() {\r\n    auto rv    = views::repeat(0, U{20u});\r\n    auto first = rv.begin();\r\n\r\n    using difference_type = ranges::range_difference_t<decltype(rv)>;\r\n    first += static_cast<difference_type>(negative_huge_diff<U>);\r\n}\r\n\r\ntemplate <class U>\r\nvoid test_iter_sub_pos_huge() {\r\n    auto rv    = views::repeat(0, U{20u});\r\n    auto first = rv.begin();\r\n\r\n    using difference_type = ranges::range_difference_t<decltype(rv)>;\r\n    first -= static_cast<difference_type>(positive_huge_diff<U>);\r\n}\r\n\r\ntemplate <class U>\r\nvoid test_iter_sub_neg_huge() {\r\n    auto rv    = views::repeat(0, U{20u});\r\n    auto first = rv.begin();\r\n\r\n    using difference_type = ranges::range_difference_t<decltype(rv)>;\r\n    first -= static_cast<difference_type>(negative_huge_diff<U>);\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_view_lvalue_negative,\r\n        test_view_rvalue_negative,\r\n        test_iter_decrement,\r\n        test_iter_decrement_overflow,\r\n        test_iter_increment,\r\n        test_iter_subtract_zero,\r\n        test_iter_subtract_pos_overflow,\r\n        test_iter_subtract_neg_overflow,\r\n        test_iter_add_zero,\r\n        test_iter_add_pos_overflow,\r\n        test_iter_add_neg_overflow,\r\n        // GH-4251: <ranges>: repeat_view<T, unsigned int> emits truncation warnings\r\n        test_iter_add_pos_huge<unsigned short>,\r\n        test_iter_add_pos_huge<unsigned int>,\r\n        test_iter_add_pos_huge<unsigned long long>,\r\n        test_iter_add_neg_huge<unsigned short>,\r\n        test_iter_add_neg_huge<unsigned int>,\r\n        test_iter_add_neg_huge<unsigned long long>,\r\n        test_iter_sub_pos_huge<unsigned short>,\r\n        test_iter_sub_pos_huge<unsigned int>,\r\n        test_iter_sub_pos_huge<unsigned long long>,\r\n        test_iter_sub_neg_huge<unsigned short>,\r\n        test_iter_sub_neg_huge<unsigned int>,\r\n        test_iter_sub_neg_huge<unsigned long long>,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2494R2_move_only_range_adaptors/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2494R2_move_only_range_adaptors/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <iterator>\r\n#include <ranges>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nstruct BaseTransform {\r\n    explicit BaseTransform(int v) : val(v) {}\r\n    int operator()(int x) const {\r\n        return val * x;\r\n    }\r\n    int val;\r\n};\r\n\r\nenum SmfKind {\r\n    Nothrow,\r\n    Throwing,\r\n    Deleted,\r\n};\r\n\r\ntemplate <SmfKind CCtor, SmfKind MCtor, SmfKind CAssign, SmfKind MAssign>\r\nstruct Transform : BaseTransform {\r\n    using BaseTransform::BaseTransform;\r\n\r\n    Transform(const Transform&) noexcept(CCtor == Nothrow)\r\n        requires (CCtor != Deleted)\r\n    = default;\r\n    Transform(const Transform&)\r\n        requires (CCtor == Deleted)\r\n    = delete;\r\n\r\n    Transform(Transform&&) noexcept(MCtor == Nothrow)\r\n        requires (MCtor != Deleted)\r\n    = default;\r\n    Transform(Transform&&)\r\n        requires (MCtor == Deleted)\r\n    = delete;\r\n\r\n    Transform& operator=(const Transform&) noexcept(CAssign == Nothrow)\r\n        requires (CAssign != Deleted)\r\n    = default;\r\n    Transform& operator=(const Transform&)\r\n        requires (CAssign == Deleted)\r\n    = delete;\r\n\r\n    Transform& operator=(Transform&&) noexcept(MAssign == Nothrow)\r\n        requires (MAssign != Deleted)\r\n    = default;\r\n    Transform& operator=(Transform&&)\r\n        requires (MAssign == Deleted)\r\n    = delete;\r\n};\r\n\r\ntemplate <SmfKind CCtor, SmfKind MCtor, SmfKind CAssign, SmfKind MAssign>\r\nvoid test_transform() {\r\n    using T = Transform<CCtor, MCtor, CAssign, MAssign>;\r\n    T t{11};\r\n\r\n    vector<int> v;\r\n    ranges::copy(array{0, 1, 2, 3, 4, 5} | views::transform(move(t)), back_inserter(v));\r\n    assert(ranges::equal(v, array{0, 11, 22, 33, 44, 55}));\r\n\r\n    if constexpr (is_copy_constructible_v<T>\r\n                      ? copyable<T> || (is_nothrow_copy_constructible_v<T> && is_nothrow_move_constructible_v<T>)\r\n                      : movable<T> || is_nothrow_move_constructible_v<T>) {\r\n        static_assert(sizeof(ranges::_Movable_box<T>) == sizeof(T));\r\n    } else {\r\n        static_assert(sizeof(ranges::_Movable_box<T>) == sizeof(T) + alignof(T));\r\n    }\r\n}\r\n\r\n// Test that _Movable_box's copy operations are properly constrained\r\ntemplate <bool CanDefault>\r\nstruct move_construct_only {\r\n    move_construct_only()\r\n        requires CanDefault;\r\n    move_construct_only(move_construct_only&&);\r\n};\r\nstatic_assert(copy_constructible<ranges::_Movable_box<int>>);\r\nstatic_assert(copyable<ranges::_Movable_box<int>>);\r\nstatic_assert(!copy_constructible<ranges::_Movable_box<move_construct_only<true>>>);\r\nstatic_assert(!copyable<ranges::_Movable_box<move_construct_only<true>>>);\r\nstatic_assert(!copy_constructible<ranges::_Movable_box<move_construct_only<false>>>);\r\nstatic_assert(!copyable<ranges::_Movable_box<move_construct_only<false>>>);\r\n\r\nint main() {\r\n    test_transform<Nothrow, Nothrow, Nothrow, Nothrow>();\r\n    test_transform<Throwing, Throwing, Throwing, Throwing>();\r\n\r\n    test_transform<Nothrow, Nothrow, Deleted, Deleted>();\r\n    test_transform<Nothrow, Throwing, Deleted, Deleted>();\r\n    test_transform<Throwing, Nothrow, Deleted, Deleted>();\r\n    test_transform<Throwing, Throwing, Deleted, Deleted>();\r\n\r\n    test_transform<Deleted, Nothrow, Deleted, Nothrow>();\r\n    test_transform<Deleted, Nothrow, Deleted, Throwing>();\r\n    test_transform<Deleted, Nothrow, Deleted, Deleted>();\r\n\r\n    test_transform<Deleted, Throwing, Deleted, Nothrow>();\r\n    test_transform<Deleted, Throwing, Deleted, Throwing>();\r\n    test_transform<Deleted, Throwing, Deleted, Deleted>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2502R2_generator/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2502R2_generator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#if defined(__clang__) && defined(_M_ARM64EC) // TRANSITION, LLVM-158341\r\nint main() {}\r\n#else // ^^^ workaround / no workaround vvv\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <atomic>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <forward_list>\r\n#include <generator>\r\n#include <memory>\r\n#include <memory_resource>\r\n#include <new>\r\n#include <ranges>\r\n#include <stdexcept>\r\n#include <string_view>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <typeinfo>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <test_generator_support.hpp>\r\n\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Traits, class ValueType, class ReferenceType, class RvalueReferenceType>\r\nconsteval bool static_checks() {\r\n    using G = Traits::generator;\r\n    static_assert(derived_from<G, ranges::view_interface<G>>);\r\n\r\n    // Specializations of generator are move-only input-and-no-stronger views\r\n    static_assert(ranges::view<G>);\r\n    static_assert(ranges::input_range<G>);\r\n    static_assert(!ranges::forward_range<G>);\r\n\r\n    static_assert(!copy_constructible<G>);\r\n    static_assert(!is_copy_assignable_v<G>);\r\n\r\n    static_assert(is_nothrow_destructible_v<G>);\r\n    static_assert(is_nothrow_move_constructible_v<G>);\r\n    static_assert(is_nothrow_move_assignable_v<G>);\r\n\r\n    // Verify the generator's associated types\r\n    static_assert(same_as<ranges::range_value_t<G>, ValueType>);\r\n    static_assert(same_as<ranges::range_difference_t<G>, ptrdiff_t>);\r\n    static_assert(same_as<ranges::range_reference_t<G>, ReferenceType>);\r\n    static_assert(same_as<ranges::range_rvalue_reference_t<G>, RvalueReferenceType>);\r\n    static_assert(same_as<typename G::yielded, typename Traits::yielded>);\r\n\r\n    // Verify end\r\n    static_assert(same_as<default_sentinel_t, ranges::sentinel_t<G>>);\r\n    static_assert(same_as<default_sentinel_t, decltype(declval<const G&>().end())>);\r\n    static_assert(noexcept(declval<G&>().end()));\r\n    static_assert(noexcept(declval<const G&>().end()));\r\n\r\n    // iterator properties are verified in P2502R2_generator_iterator\r\n    // promise properties are verified in P2502R2_generator_promise\r\n\r\n    // Non-portable size check\r\n    static_assert(sizeof(G) == sizeof(void*));\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(static_checks<gen_traits<int>, int, int&&, int&&>());\r\nstatic_assert(static_checks<gen_traits<const int&>, int, const int&, const int&&>());\r\nstatic_assert(static_checks<gen_traits<int&&>, int, int&&, int&&>());\r\nstatic_assert(static_checks<gen_traits<int&>, int, int&, int&&>());\r\n\r\nstatic_assert(static_checks<gen_traits<int, int>, int, int, int>());\r\nstatic_assert(static_checks<gen_traits<const int&, int>, int, const int&, const int&&>());\r\nstatic_assert(static_checks<gen_traits<int&&, int>, int, int&&, int&&>());\r\nstatic_assert(static_checks<gen_traits<int&, int>, int, int&, int&&>());\r\n\r\ntemplate <class Traits, class ValueType, class ReferenceType, class RvalueReferenceType, class R, class V, class A>\r\nvoid test_one(generator<R, V, A> g0, invocable<generator<R, V, A>> auto adaptor, ranges::input_range auto&& expected)\r\n    requires ranges::input_range<decltype(adaptor(move(g0)))>\r\n{\r\n    static_assert(same_as<generator<R, V, A>, typename Traits::generator>);\r\n    static_assert(static_checks<Traits, ValueType, ReferenceType, RvalueReferenceType>());\r\n\r\n    auto g1 = move(g0);\r\n    auto i  = ranges::cbegin(expected);\r\n    for (auto&& x : adaptor(move(g1))) {\r\n        assert(i != ranges::cend(expected));\r\n        assert(*i == x);\r\n        ++i;\r\n        // Verify iterator stays valid after move assignment\r\n        ranges::swap(g0, g1);\r\n    }\r\n    assert(i == ranges::cend(expected));\r\n}\r\n\r\ntemplate <class Traits, class ValueType, class ReferenceType, class RvalueReferenceType, class R, class V, class A,\r\n    ranges::input_range Ex>\r\nvoid test_one(generator<R, V, A> g0, Ex&& expected) {\r\n    return test_one<Traits, ValueType, ReferenceType, RvalueReferenceType>(move(g0), identity{}, forward<Ex>(expected));\r\n}\r\n\r\n// Some simple end-to-end tests, mostly from the Working Draft or P2502R2\r\ngenerator<int> ints(int start = 0) {\r\n    for (;;) {\r\n        co_yield start++;\r\n    }\r\n}\r\n\r\ntemplate <ranges::input_range Rng1, ranges::input_range Rng2>\r\ngenerator<tuple<ranges::range_reference_t<Rng1>, ranges::range_reference_t<Rng2>>,\r\n    tuple<ranges::range_value_t<Rng1>, ranges::range_value_t<Rng2>>>\r\n    co_zip(Rng1 r1, Rng2 r2) {\r\n    auto it1        = ranges::begin(r1);\r\n    auto it2        = ranges::begin(r2);\r\n    const auto end1 = ranges::end(r1);\r\n    const auto end2 = ranges::end(r2);\r\n    for (; it1 != end1 && it2 != end2; ++it1, ++it2) {\r\n        co_yield {*it1, *it2};\r\n    }\r\n}\r\n\r\nvoid zip_example() {\r\n    using V = tuple<int, int>;\r\n    using R = tuple<int&, int&>;\r\n\r\n    auto g0 = co_zip(array{1, 2, 3}, vector{10, 20, 30, 40, 50});\r\n    test_one<gen_traits<R, V>, V, R, R>(move(g0), array{tuple{1, 10}, tuple{2, 20}, tuple{3, 30}});\r\n\r\n    g0 = co_zip(array{3, 2, 1}, vector{10, 20, 30, 40, 50});\r\n    test_one<gen_traits<R, V>, V, R, R>(move(g0), array{tuple{3, 10}, tuple{2, 20}, tuple{1, 30}});\r\n}\r\n\r\ntemplate <class Reference = const int&>\r\ngenerator<Reference, int> co_upto(const int hi) {\r\n    assert(hi >= 0);\r\n    for (int i = 0; i < hi; ++i) {\r\n        co_yield i;\r\n    }\r\n}\r\n\r\nvoid test_weird_reference_types() {\r\n    constexpr int n = 32;\r\n    { // Test mutable lvalue reference type\r\n        auto r   = co_upto<int&>(n);\r\n        auto pos = r.begin();\r\n        for (int i = 0; i < n / 2; ++i, ++*pos, ++pos) {\r\n            assert(pos != r.end());\r\n            assert(*pos == 2 * i);\r\n        }\r\n        assert(pos == r.end());\r\n    }\r\n\r\n    { // Test with mutable rvalue reference type\r\n        constexpr size_t segment_size = 16;\r\n        auto woof                     = []() -> generator<vector<int>&&> {\r\n            vector<int> vec(segment_size);\r\n\r\n            co_yield vec; // When we yield an lvalue...\r\n            assert(vec.size() == segment_size); // ... the caller moves from a copy.\r\n\r\n            co_yield move(vec); // When we yield an rvalue...\r\n            assert(vec.size() == 0); // ... the caller moves from it.\r\n        };\r\n\r\n        for (auto vec : woof()) { // Intentionally by value\r\n            assert(vec.size() == segment_size);\r\n        }\r\n    }\r\n}\r\n\r\ngenerator<int> iota_repeater(const int hi, const int depth) {\r\n    if (depth > 0) {\r\n        co_yield ranges::elements_of(iota_repeater(hi, depth - 1));\r\n        co_yield ranges::elements_of(iota_repeater(hi, depth - 1));\r\n    } else {\r\n        co_yield ranges::elements_of(co_upto<int>(hi));\r\n    }\r\n}\r\n\r\nvoid recursive_test() {\r\n    auto might_throw = []() -> generator<int> {\r\n        co_yield 0;\r\n        throw runtime_error{\"error\"};\r\n    };\r\n\r\n    auto nested_ints = [=]() -> generator<int> {\r\n        try {\r\n            co_yield ranges::elements_of(might_throw());\r\n        } catch (const runtime_error& e) {\r\n            assert(e.what() == \"error\"sv);\r\n        }\r\n        co_yield 1;\r\n    };\r\n\r\n    test_one<gen_traits<int>, int, int&&, int&&>(iota_repeater(3, 2), array{0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2});\r\n    test_one<gen_traits<int>, int, int&&, int&&>(nested_ints(), array{0, 1});\r\n}\r\n\r\nvoid arbitrary_range_test() {\r\n    auto yield_arbitrary_ranges = []() -> generator<const int&> {\r\n        co_yield ranges::elements_of(vector<int>{40, 30, 20, 10});\r\n        co_yield ranges::elements_of(views::iota(0, 4));\r\n        forward_list<int> fl{500, 400, 300};\r\n        co_yield ranges::elements_of(fl);\r\n    };\r\n\r\n    test_one<gen_traits<const int&>, int, const int&, const int&&>(\r\n        yield_arbitrary_ranges(), array{40, 30, 20, 10, 0, 1, 2, 3, 500, 400, 300});\r\n}\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\n\r\nvoid adl_proof_test() {\r\n    using validator  = holder<incomplete>*;\r\n    auto yield_range = []() -> generator<validator> {\r\n        co_yield ranges::elements_of(\r\n            views::repeat(nullptr, 42) | views::transform([](nullptr_t) { return validator{}; }));\r\n    };\r\n\r\n    using R = decltype(yield_range());\r\n    static_assert(ranges::input_range<R>);\r\n\r\n    using It = ranges::iterator_t<R>;\r\n    static_assert(same_as<decltype(&declval<It&>()), It*>);\r\n\r\n    using Promise = R::promise_type;\r\n    static_assert(same_as<decltype(&declval<Promise&>()), Promise*>);\r\n\r\n    size_t i = 0;\r\n    for (const auto elem : yield_range()) {\r\n        ++i;\r\n        assert(elem == nullptr);\r\n    }\r\n    assert(i == 42);\r\n}\r\n#endif // ^^^ no workaround ^^^\r\n\r\n// Verify behavior with unerased allocator types\r\nvoid static_allocator_test() {\r\n    {\r\n        auto g = [](const int hi) -> generator<int, int, StatelessAlloc<char>> {\r\n            constexpr size_t n = 64;\r\n            int some_ints[n];\r\n            for (int i = 0; i < hi; ++i) {\r\n                co_yield some_ints[i % n] = i;\r\n            }\r\n        };\r\n\r\n        test_one<gen_traits<int, int, StatelessAlloc<char>>, int, int, int>(g(1024), views::iota(0, 1024));\r\n    }\r\n\r\n    {\r\n        auto g = [](allocator_arg_t, StatelessAlloc<int>, const int hi) -> generator<int, int, StatelessAlloc<char>> {\r\n            constexpr size_t n = 64;\r\n            int some_ints[n];\r\n            for (int i = 0; i < hi; ++i) {\r\n                co_yield some_ints[i % n] = i;\r\n            }\r\n        };\r\n\r\n        test_one<gen_traits<int, int, StatelessAlloc<char>>, int, int, int>(\r\n            g(allocator_arg, {}, 1024), views::iota(0, 1024));\r\n    }\r\n\r\n#ifndef __EDG__ // TRANSITION, VSO-1951821\r\n    {\r\n        auto g = [](allocator_arg_t, StatefulAlloc<int>, const int hi) -> generator<int, int, StatefulAlloc<char>> {\r\n            constexpr size_t n = 64;\r\n            int some_ints[n];\r\n            for (int i = 0; i < hi; ++i) {\r\n                co_yield some_ints[i % n] = i;\r\n            }\r\n        };\r\n\r\n        test_one<gen_traits<int, int, StatefulAlloc<char>>, int, int, int>(\r\n            g(allocator_arg, StatefulAlloc<int>{42}, 1024), views::iota(0, 1024));\r\n    }\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n\r\n// Verify behavior with erased allocator types\r\nvoid dynamic_allocator_test() {\r\n    auto g = [](allocator_arg_t, const auto&, const int hi) -> generator<int> {\r\n        constexpr size_t n = 64;\r\n        int some_ints[n];\r\n        for (int i = 0; i < hi; ++i) {\r\n            co_yield some_ints[i % n] = i;\r\n        }\r\n    };\r\n\r\n    test_one<gen_traits<int>, int, int&&, int&&>(g(allocator_arg, allocator<float>{}, 1024), views::iota(0, 1024));\r\n    test_one<gen_traits<int>, int, int&&, int&&>(g(allocator_arg, StatelessAlloc<float>{}, 1024), views::iota(0, 1024));\r\n#ifndef __EDG__ // TRANSITION, VSO-1951821\r\n    test_one<gen_traits<int>, int, int&&, int&&>(\r\n        g(allocator_arg, StatefulAlloc<float>{1729}, 1024), views::iota(0, 1024));\r\n#endif // ^^^ no workaround ^^^\r\n#ifdef __cpp_aligned_new\r\n    pmr::synchronized_pool_resource pool;\r\n    test_one<gen_traits<int>, int, int&&, int&&>(\r\n        g(allocator_arg, pmr::polymorphic_allocator<>{&pool}, 1024), views::iota(0, 1024));\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n}\r\n\r\nstatic atomic<bool> allow_allocation{true};\r\n\r\nvoid* operator new(const size_t n) {\r\n    if (allow_allocation) {\r\n        if (void* const result = malloc(n)) {\r\n            return result;\r\n        }\r\n    }\r\n    throw bad_alloc{};\r\n}\r\n\r\nvoid operator delete(void* const p) noexcept {\r\n    free(p);\r\n}\r\n\r\nvoid operator delete(void* const p, size_t) noexcept {\r\n    free(p);\r\n}\r\n\r\n#ifdef __cpp_aligned_new\r\nvoid* operator new(const size_t n, const align_val_t al) {\r\n    if (allow_allocation) {\r\n        if (void* const result = ::_aligned_malloc(n, static_cast<size_t>(al))) {\r\n            return result;\r\n        }\r\n    }\r\n    throw bad_alloc{};\r\n}\r\n\r\nvoid operator delete(void* const p, align_val_t) noexcept {\r\n    ::_aligned_free(p);\r\n}\r\n\r\nvoid operator delete(void* const p, size_t, align_val_t) noexcept {\r\n    ::_aligned_free(p);\r\n}\r\n#endif // ^^^ defined(__cpp_aligned_new) ^^^\r\n\r\nclass malloc_resource final : public pmr::memory_resource {\r\nprivate:\r\n    void* do_allocate(size_t bytes, size_t align) override {\r\n        assert(align <= __STDCPP_DEFAULT_NEW_ALIGNMENT__);\r\n        if (bytes == 0) {\r\n            bytes = 1;\r\n        }\r\n\r\n        if (void* const result = malloc(bytes)) {\r\n            return result;\r\n        }\r\n        throw bad_alloc{};\r\n    }\r\n\r\n    void do_deallocate(void* ptr, size_t, size_t align) noexcept override {\r\n        assert(align <= __STDCPP_DEFAULT_NEW_ALIGNMENT__);\r\n        free(ptr);\r\n    }\r\n\r\n    bool do_is_equal(const memory_resource& that) const noexcept override {\r\n        return typeid(malloc_resource) == typeid(that);\r\n    }\r\n};\r\n\r\nvoid pmr_generator_test() {\r\n    // Verify alias template\r\n    static_assert(same_as<pmr::generator<int>, generator<int, void, pmr::polymorphic_allocator<>>>);\r\n    static_assert(same_as<pmr::generator<int, int>, generator<int, int, pmr::polymorphic_allocator<>>>);\r\n    static_assert(same_as<pmr::generator<const int&, int>, generator<const int&, int, pmr::polymorphic_allocator<>>>);\r\n\r\n    // Simple end-to-end test\r\n    malloc_resource mr{};\r\n    auto g = [&mr](allocator_arg_t, pmr::polymorphic_allocator<> alloc, const int hi) -> pmr::generator<int, int> {\r\n        assert(alloc.resource() == &mr);\r\n\r\n        constexpr size_t n = 64;\r\n        int some_ints[n];\r\n        for (int i = 0; i < hi; ++i) {\r\n            co_yield some_ints[i % n] = i;\r\n        }\r\n    };\r\n\r\n    allow_allocation = false;\r\n    test_one<gen_traits<int, int, pmr::polymorphic_allocator<>>, int, int, int>(\r\n        g(allocator_arg, pmr::polymorphic_allocator<>{&mr}, 1024), views::iota(0, 1024));\r\n    allow_allocation = true;\r\n}\r\n\r\nint main() {\r\n    // End-to-end tests\r\n    test_one<gen_traits<int>, int, int&&, int&&>(ints(), views::take(3), array{0, 1, 2});\r\n    assert(ranges::equal(co_upto(6), views::iota(0, 6)));\r\n    zip_example();\r\n    test_weird_reference_types();\r\n    recursive_test();\r\n    arbitrary_range_test();\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n    // Verify generation of a range of pointers-to-incomplete\r\n    adl_proof_test();\r\n#endif // ^^^ no workaround ^^^\r\n\r\n    // Allocator tests\r\n    static_allocator_test();\r\n    dynamic_allocator_test();\r\n    pmr_generator_test();\r\n}\r\n\r\n#endif // ^^^ no workaround ^^^\r\n"
  },
  {
    "path": "tests/std/tests/P2502R2_generator_death/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2502R2_generator_death/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#if defined(__clang__) && defined(_M_ARM64EC) // TRANSITION, LLVM-158341\r\nint main() {}\r\n#else // ^^^ workaround / no workaround vvv\r\n\r\n#include <generator>\r\n#include <utility>\r\n\r\n#include <test_death.hpp>\r\n\r\nstd::generator<int> gen() {\r\n    co_return;\r\n}\r\n\r\nvoid test_begin_after_initial_suspend_point() {\r\n    auto g = gen();\r\n    (void) g.begin();\r\n    (void) g.begin();\r\n}\r\n\r\nvoid test_begin_after_moving_from() {\r\n    auto g  = gen();\r\n    auto g2 = std::move(g);\r\n    (void) g.begin();\r\n}\r\n\r\nvoid test_end_iterator_dereference() {\r\n    auto g = gen();\r\n    auto i = g.begin();\r\n    (void) *i;\r\n}\r\n\r\nvoid test_end_iterator_incrementation() {\r\n    auto g = gen();\r\n    auto i = g.begin();\r\n    ++i;\r\n}\r\n\r\nint main(int argc, char** argv) {\r\n    std_testing::death_test_executive exec;\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_begin_after_initial_suspend_point,\r\n        test_begin_after_moving_from,\r\n        test_end_iterator_dereference,\r\n        test_end_iterator_incrementation,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n\r\n#endif // ^^^ no workaround ^^^\r\n"
  },
  {
    "path": "tests/std/tests/P2502R2_generator_iterator/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2502R2_generator_iterator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#if defined(__clang__) && defined(_M_ARM64EC) // TRANSITION, LLVM-158341\r\nint main() {}\r\n#else // ^^^ workaround / no workaround vvv\r\n\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <generator>\r\n#include <memory>\r\n#include <memory_resource>\r\n#include <ranges>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <test_generator_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Ref, class V, class Alloc>\r\ngenerator<Ref, V, Alloc> generate_zero() {\r\n    co_return;\r\n}\r\n\r\ntemplate <class Ref, class V, class Alloc, class ValueType = gen_value_t<Ref, V>>\r\n    requires default_initializable<ValueType>\r\n          && (same_as<remove_cvref_t<Ref>, ValueType> || constructible_from<remove_cvref_t<Ref>, ValueType&>)\r\ngenerator<Ref, V, Alloc> generate_one() {\r\n    if constexpr (same_as<remove_cvref_t<Ref>, ValueType>) {\r\n        // non-proxy reference case\r\n        if constexpr (is_reference_v<Ref>) {\r\n            remove_reference_t<Ref> val{};\r\n            co_yield static_cast<Ref>(val);\r\n        } else {\r\n            co_yield ValueType{};\r\n        }\r\n    } else {\r\n        ValueType val{};\r\n        // proxy reference case\r\n        if constexpr (is_reference_v<Ref>) {\r\n            // yielding a non-prvalue proxy reference is super weird, but not forbidden\r\n            remove_reference_t<Ref> ref{val};\r\n            co_yield static_cast<Ref>(ref);\r\n        } else {\r\n            co_yield Ref{val};\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class Ref, class V, class Alloc>\r\ngenerator<Ref, V, Alloc> generate_one_recursively() {\r\n    co_yield ranges::elements_of{generate_zero<Ref, V, Alloc>()};\r\n    co_yield ranges::elements_of{generate_one<Ref, V, Alloc>()};\r\n    co_yield ranges::elements_of{generate_zero<Ref, V, Alloc>()};\r\n}\r\n\r\ntemplate <class Ref, class V = void, class Alloc = void>\r\nvoid test_one() {\r\n    using Gen  = generator<Ref, V, Alloc>;\r\n    using Iter = ranges::iterator_t<Gen>;\r\n    static_assert(input_iterator<Iter>);\r\n    static_assert(sizeof(Iter) == sizeof(void*)); // NB: implementation defined\r\n\r\n    // Test member types\r\n    static_assert(same_as<typename Iter::value_type, gen_value_t<Ref, V>>);\r\n    static_assert(same_as<typename Iter::difference_type, ptrdiff_t>);\r\n\r\n    // Test copying functions\r\n    static_assert(!is_copy_constructible_v<Iter>);\r\n    static_assert(!is_copy_assignable_v<Iter>);\r\n\r\n    { // Test move constructor\r\n        Gen g  = generate_zero<Ref, V, Alloc>();\r\n        Iter i = g.begin();\r\n        Iter j = move(i);\r\n        assert(j == default_sentinel);\r\n\r\n        static_assert(is_nothrow_move_constructible_v<Iter>);\r\n    }\r\n\r\n    { // Test move assignment operator\r\n        Gen g1 = generate_one<Ref, V, Alloc>();\r\n        Iter i = g1.begin();\r\n        Gen g2 = generate_zero<Ref, V, Alloc>();\r\n        Iter j = g2.begin();\r\n\r\n        same_as<Iter&> decltype(auto) k = (i = move(j));\r\n        assert(&k == &i);\r\n        assert(k == default_sentinel);\r\n        static_assert(is_nothrow_move_assignable_v<Iter>);\r\n    }\r\n\r\n    { // Test indirection\r\n        auto g = generate_one<Ref, V, Alloc>();\r\n        auto i = g.begin();\r\n\r\n        same_as<gen_reference_t<Ref, V>> decltype(auto) r = *i;\r\n\r\n        using ValueType = gen_value_t<Ref, V>;\r\n        if constexpr (default_initializable<ValueType> && equality_comparable<ValueType>) {\r\n            assert(r == ValueType{});\r\n        }\r\n    }\r\n\r\n    { // Test pre-incrementation\r\n        auto g = generate_one_recursively<Ref, V, Alloc>();\r\n        auto i = g.begin();\r\n\r\n        same_as<Iter&> decltype(auto) i_ref = ++i;\r\n        assert(&i_ref == &i);\r\n        assert(i_ref == default_sentinel);\r\n    }\r\n\r\n    { // Test post-incrementation\r\n        auto g = generate_one_recursively<Ref, V, Alloc>();\r\n        auto i = g.begin();\r\n        i++;\r\n        assert(i == default_sentinel);\r\n\r\n        static_assert(is_void_v<decltype(i++)>);\r\n    }\r\n\r\n    { // Test equal operator\r\n        auto g1 = generate_one<Ref, V, Alloc>();\r\n        auto i  = g1.begin();\r\n        auto g2 = generate_zero<Ref, V, Alloc>();\r\n        auto j  = g2.begin();\r\n\r\n        same_as<bool> decltype(auto) b1 = i == default_sentinel;\r\n        assert(!b1);\r\n\r\n        same_as<bool> decltype(auto) b2 = default_sentinel == j;\r\n        assert(b2);\r\n\r\n        same_as<bool> decltype(auto) b3 = i != default_sentinel;\r\n        assert(b3);\r\n\r\n        same_as<bool> decltype(auto) b4 = default_sentinel != j;\r\n        assert(!b4);\r\n    }\r\n}\r\n\r\ntemplate <class Ref, class V = void>\r\nvoid test_with_allocator() {\r\n    test_one<Ref, V>();\r\n    test_one<Ref, V, allocator<void>>();\r\n    test_one<Ref, V, pmr::polymorphic_allocator<void>>();\r\n    test_one<Ref, V, StatelessAlloc<void>>();\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_with_type() {\r\n    test_with_allocator<T>();\r\n    test_with_allocator<T&>();\r\n    test_with_allocator<const T&>();\r\n    test_with_allocator<T&&>();\r\n    test_with_allocator<const T&&>();\r\n\r\n    test_with_allocator<Proxy<T>, T>();\r\n    test_with_allocator<Proxy<T>&, T>();\r\n    test_with_allocator<const Proxy<T>&, T>();\r\n    test_with_allocator<Proxy<T>&&, T>();\r\n    test_with_allocator<const Proxy<T>&&, T>();\r\n}\r\n\r\nint main() {\r\n    test_with_type<int>();\r\n    test_with_type<float>();\r\n    test_with_type<string>();\r\n    test_with_type<MoveOnly>();\r\n}\r\n\r\n#endif // ^^^ no workaround ^^^\r\n"
  },
  {
    "path": "tests/std/tests/P2502R2_generator_promise/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2502R2_generator_promise/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#if defined(__clang__) && defined(_M_ARM64EC) // TRANSITION, LLVM-158341\r\nint main() {}\r\n#else // ^^^ workaround / no workaround vvv\r\n\r\n#include <cassert>\r\n#include <coroutine>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstdlib>\r\n#include <forward_list>\r\n#include <generator>\r\n#include <list>\r\n#include <memory>\r\n#include <memory_resource>\r\n#include <new>\r\n#include <ranges>\r\n#include <span>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <range_algorithm_support.hpp>\r\n#include <test_generator_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new[]': this instance has no annotations.\r\n\r\nvoid* operator new[](size_t) {\r\n    abort();\r\n}\r\n\r\nvoid operator delete[](void*) noexcept {\r\n    abort();\r\n}\r\n\r\ntemplate <class Promise, class... Args>\r\nconcept HasOperatorNew = requires(Args&&... args) {\r\n    { Promise::operator new(forward<Args>(args)...) } -> same_as<void*>;\r\n};\r\n\r\ntemplate <class Gen>\r\nstruct generator_allocator {};\r\n\r\ntemplate <class Ref, class V, class Alloc>\r\nstruct generator_allocator<generator<Ref, V, Alloc>> {\r\n    using type = Alloc;\r\n};\r\n\r\ntemplate <class Gen, class Range>\r\n    requires convertible_to<ranges::range_reference_t<Range&>, typename Gen::yielded>\r\nvoid test_yield_elements_of_range(typename Gen::promise_type& p) {\r\n    using Alloc = generator_allocator<Gen>::type;\r\n\r\n    {\r\n        using Awaitable = decltype(p.yield_value(ranges::elements_of{declval<Range&>()}));\r\n        static_assert(same_as<decltype(declval<Awaitable&>().await_ready()), bool>);\r\n    }\r\n\r\n    if constexpr (!is_void_v<Alloc>) {\r\n        using Awaitable = decltype(p.yield_value(ranges::elements_of{declval<Range&>(), declval<Alloc&>()}));\r\n        static_assert(same_as<decltype(declval<Awaitable&>().await_ready()), bool>);\r\n    }\r\n}\r\n\r\ntemplate <class Gen, class Alloc2>\r\nvoid test_operator_new(typename Gen::promise_type& p, const Alloc2& alloc2 = {}) {\r\n    using Promise = Gen::promise_type;\r\n    using Alloc   = generator_allocator<Gen>::type;\r\n\r\n    // Test 'operator new(size_t)'\r\n    constexpr bool has_op_new1 = HasOperatorNew<Promise, size_t>;\r\n    static_assert(has_op_new1 == (same_as<Alloc, void> || default_initializable<Alloc>) );\r\n    if constexpr (has_op_new1) {\r\n        const size_t size = __STDCPP_DEFAULT_NEW_ALIGNMENT__;\r\n        void* const mem   = p.operator new(size);\r\n        assert(reinterpret_cast<uintptr_t>(mem) % __STDCPP_DEFAULT_NEW_ALIGNMENT__ == 0);\r\n        p.operator delete(mem, size);\r\n    }\r\n\r\n    // Test 'operator new(size_t, allocator_arg_t, const Alloc2&, const Args&...)'\r\n    // This operator new is unconstrained.\r\n    if constexpr (same_as<Alloc, void> || convertible_to<const Alloc2&, Alloc>) {\r\n        const size_t size = __STDCPP_DEFAULT_NEW_ALIGNMENT__;\r\n        void* const mem   = p.operator new(size, allocator_arg, alloc2, 0, 0);\r\n        assert(reinterpret_cast<uintptr_t>(mem) % __STDCPP_DEFAULT_NEW_ALIGNMENT__ == 0);\r\n        p.operator delete(mem, size);\r\n    }\r\n\r\n    // Test 'operator new(size_t, const This&, allocator_arg_t, const Alloc2&, const Args&...)'\r\n    // This operator new is unconstrained.\r\n    struct S {};\r\n    if constexpr (same_as<Alloc, void> || convertible_to<const Alloc2&, Alloc>) {\r\n        const size_t size = __STDCPP_DEFAULT_NEW_ALIGNMENT__;\r\n        const S s;\r\n        void* const mem = p.operator new(size, s, allocator_arg, alloc2, 0, 0);\r\n        assert(reinterpret_cast<uintptr_t>(mem) % __STDCPP_DEFAULT_NEW_ALIGNMENT__ == 0);\r\n        p.operator delete(mem, size);\r\n    }\r\n}\r\n\r\ntemplate <class Ref, class V, class Alloc, bool TestingIncomplete>\r\nvoid test_one() {\r\n    using Gen     = generator<Ref, V, Alloc>;\r\n    using Promise = Gen::promise_type;\r\n    using Yielded = Gen::yielded;\r\n    static_assert(semiregular<Promise>);\r\n\r\n    Promise p;\r\n\r\n    // Test that operator& for promise_type resolves to the built-in version and doesn't involve ADL\r\n    static_assert(same_as<decltype(&p), Promise*>);\r\n    assert(&p == addressof(p));\r\n\r\n    // Test 'get_return_object'\r\n    static_assert(same_as<decltype(p.get_return_object()), Gen>);\r\n    static_assert(noexcept(p.get_return_object()));\r\n\r\n    // Test 'initial_suspend'\r\n    static_assert(same_as<decltype(p.initial_suspend()), suspend_always>);\r\n    static_assert(same_as<decltype(as_const(p).initial_suspend()), suspend_always>);\r\n    static_assert(noexcept(p.initial_suspend()));\r\n    static_assert(noexcept(as_const(p).initial_suspend()));\r\n\r\n    // Test 'final_suspend'\r\n    using FinalAwaitable = decltype(p.final_suspend());\r\n    static_assert(convertible_to<decltype(declval<FinalAwaitable&>().await_ready()), bool>);\r\n    static_assert(noexcept(p.final_suspend()));\r\n\r\n    // Test 'yield_value(yielded)'\r\n    static_assert(same_as<decltype(p.yield_value(declval<Yielded>())), suspend_always>);\r\n    static_assert(noexcept(p.yield_value(declval<Yielded>())));\r\n\r\n    // Test 'yield_value(const remove_reference_t<yielded>&)'\r\n    if constexpr (is_rvalue_reference_v<Yielded>\r\n                  && constructible_from<remove_cvref_t<Yielded>, const remove_reference_t<Yielded>&>) {\r\n        using Lval      = const remove_reference_t<Yielded>&;\r\n        using Awaitable = decltype(p.yield_value(declval<Lval>()));\r\n\r\n        static_assert(convertible_to<decltype(declval<Awaitable&>().await_ready()), bool>);\r\n        static_assert(is_void_v<decltype(declval<Awaitable&>().await_resume())>);\r\n        static_assert(noexcept(p.yield_value(declval<Lval>()))\r\n                      == is_nothrow_constructible_v<remove_cvref_t<Yielded>, Lval>); // strengthened\r\n    }\r\n\r\n    { // Test 'yield_value(elements_of<generator>)'\r\n        {\r\n            using Awaitable = decltype(p.yield_value(ranges::elements_of{declval<Gen&>()}));\r\n            static_assert(convertible_to<decltype(declval<Awaitable&>().await_ready()), bool>);\r\n        }\r\n\r\n        if constexpr (!is_void_v<Alloc>) {\r\n            using Awaitable = decltype(p.yield_value(ranges::elements_of{declval<Gen&>(), declval<Alloc&>()}));\r\n            static_assert(convertible_to<decltype(declval<Awaitable&>().await_ready()), bool>);\r\n        }\r\n    }\r\n\r\n    using ValTy = conditional_t<is_void_v<V>, remove_cvref_t<Ref>, V>;\r\n    if constexpr (!TestingIncomplete && convertible_to<ValTy&, Yielded>) {\r\n        // Test 'yield_value(ranges::elements_of<range>)'\r\n        test_yield_elements_of_range<Gen, vector<ValTy>>(p);\r\n        test_yield_elements_of_range<Gen, list<ValTy>>(p);\r\n        test_yield_elements_of_range<Gen, forward_list<ValTy>>(p);\r\n        test_yield_elements_of_range<Gen,\r\n            test::range<input_iterator_tag, ValTy, test::Sized::no, test::CanDifference::no, test::Common::no,\r\n                test::CanCompare::no, test::ProxyRef::no>>(p);\r\n    }\r\n\r\n    // Test 'await_transform'\r\n    static_assert(!requires(Promise& p) { p.await_transform(); });\r\n\r\n    // Test 'return_void'\r\n    static_assert(is_void_v<decltype(p.return_void())>);\r\n    static_assert(is_void_v<decltype(as_const(p).return_void())>);\r\n    static_assert(noexcept(p.return_void()));\r\n    static_assert(noexcept(as_const(p).return_void()));\r\n\r\n    // Test 'unhandled_exception'\r\n    static_assert(is_void_v<decltype(p.unhandled_exception())>);\r\n\r\n    // Test 'operator new(size_t, ARGS...)'\r\n    test_operator_new<Gen, allocator<void>>(p);\r\n    test_operator_new<Gen, pmr::polymorphic_allocator<void>>(p);\r\n    test_operator_new<Gen, StatelessAlloc<void, false_type, int>>(p);\r\n    if constexpr (same_as<Alloc, void>) {\r\n        test_operator_new<Gen, StatelessAlloc<void>>(p);\r\n        test_operator_new<Gen, StatelessAlloc<void, false_type>>(p);\r\n        test_operator_new<Gen, StatelessAlloc<void, true_type, int>>(p);\r\n    }\r\n\r\n    // Non-portable size check\r\n    static_assert(sizeof(Promise) == 2 * sizeof(void*));\r\n}\r\n\r\ntemplate <class Ref, class V, bool TestingIncomplete = false>\r\nvoid test_with_allocator() {\r\n    test_one<Ref, V, void, TestingIncomplete>();\r\n    test_one<Ref, V, allocator<void>, TestingIncomplete>();\r\n    test_one<Ref, V, pmr::polymorphic_allocator<void>, TestingIncomplete>();\r\n    test_one<Ref, V, StatelessAlloc<void>, TestingIncomplete>();\r\n    test_one<Ref, V, StatelessAlloc<void, false_type>, TestingIncomplete>();\r\n    test_one<Ref, V, StatelessAlloc<void, true_type, int>, TestingIncomplete>();\r\n    test_one<Ref, V, StatelessAlloc<void, false_type, int>, TestingIncomplete>();\r\n}\r\n\r\ntemplate <class T, bool TestingIncomplete = false>\r\nvoid test_with_type() {\r\n    test_with_allocator<T, void, TestingIncomplete>();\r\n    test_with_allocator<T&, void, TestingIncomplete>();\r\n    test_with_allocator<const T&, void, TestingIncomplete>();\r\n    test_with_allocator<T&&, void, TestingIncomplete>();\r\n    test_with_allocator<const T&&, void, TestingIncomplete>();\r\n\r\n    test_with_allocator<Proxy<T>, T, TestingIncomplete>();\r\n    test_with_allocator<Proxy<T>&, T, TestingIncomplete>();\r\n    test_with_allocator<const Proxy<T>&, T, TestingIncomplete>();\r\n    test_with_allocator<Proxy<T>&&, T, TestingIncomplete>();\r\n    test_with_allocator<const Proxy<T>&&, T, TestingIncomplete>();\r\n}\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\ntemplate <class T>\r\nstruct Holder {\r\n    T t;\r\n};\r\n\r\nstruct Incomplete;\r\n#endif // ^^^ no workaround ^^^\r\n\r\n// Also test LWG-4119:\r\n// \"generator::promise_type::yield_value(ranges::elements_of<R, Alloc>)'s nested generator may be ill-formed\"\r\ngenerator<span<int>> test_lwg_4119() { // COMPILE-ONLY\r\n    vector<vector<int>> v;\r\n    co_yield ranges::elements_of(v);\r\n}\r\n\r\nint main() {\r\n    test_with_type<int>();\r\n    test_with_type<float>();\r\n    test_with_type<string>();\r\n    test_with_type<MoveOnly>();\r\n    test_with_type<Immovable>();\r\n    test_with_allocator<vector<bool>::reference, bool>();\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n    test_with_type<Holder<Incomplete>*, true>();\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n\r\n#endif // ^^^ no workaround ^^^\r\n"
  },
  {
    "path": "tests/std/tests/P2505R5_monadic_functions_for_std_expected/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2505R5_monadic_functions_for_std_expected/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <expected>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nenum class IsNothrowConstructible : bool { Not, Yes };\r\nenum class IsNothrowConvertible : bool { Not, Yes };\r\n\r\ntemplate <class E>\r\n[[nodiscard]] constexpr bool IsYes(const E e) noexcept {\r\n    return e == E::Yes;\r\n}\r\n\r\nstruct convertible {\r\n    constexpr convertible(const int val) noexcept : _val(val) {}\r\n\r\n    [[nodiscard]] constexpr bool operator==(const int other) const noexcept {\r\n        return other == _val;\r\n    }\r\n\r\n    int _val = 0;\r\n};\r\n\r\nstruct Immovable {\r\n    constexpr Immovable(const int x) : v(x) {}\r\n    Immovable(const Immovable&)            = delete;\r\n    Immovable(Immovable&&)                 = delete;\r\n    Immovable& operator=(const Immovable&) = delete;\r\n    Immovable& operator=(Immovable&&)      = delete;\r\n    constexpr ~Immovable()                 = default;\r\n\r\n    int v;\r\n};\r\n\r\nstruct Thingy {\r\n    expected<int, int> x;\r\n    constexpr int member_func() const {\r\n        return 66;\r\n    }\r\n};\r\n\r\ntemplate <class Expected>\r\nconstexpr void test_impl(Expected&& engaged, Expected&& unengaged) {\r\n    assert(engaged.has_value());\r\n    assert(!unengaged.has_value());\r\n    static_assert(is_same_v<typename remove_cvref_t<Expected>::error_type, int>);\r\n    using Val = remove_cvref_t<Expected>::value_type;\r\n\r\n    const auto succeed = [](auto...) { return expected<int, int>{33}; };\r\n    const auto fail    = [](auto...) { return expected<int, int>{unexpect, 44}; };\r\n\r\n    {\r\n        decltype(auto) result = forward<Expected>(engaged).and_then(succeed);\r\n        static_assert(is_same_v<decltype(result), expected<int, int>>);\r\n        assert(result == 33);\r\n    }\r\n    {\r\n        decltype(auto) result = forward<Expected>(unengaged).and_then(succeed);\r\n        static_assert(is_same_v<decltype(result), expected<int, int>>);\r\n        assert(!result);\r\n        assert(result.error() == 22);\r\n    }\r\n    {\r\n        decltype(auto) result = forward<Expected>(engaged).and_then(fail);\r\n        static_assert(is_same_v<decltype(result), expected<int, int>>);\r\n        assert(!result);\r\n        assert(result.error() == 44);\r\n    }\r\n    {\r\n        decltype(auto) result = forward<Expected>(unengaged).and_then(fail);\r\n        static_assert(is_same_v<decltype(result), expected<int, int>>);\r\n        assert(!result);\r\n        assert(result.error() == 22);\r\n    }\r\n\r\n    if constexpr (!is_void_v<Val>) {\r\n        {\r\n            decltype(auto) result = forward<Expected>(engaged).and_then(&Thingy::x);\r\n            static_assert(is_same_v<decltype(result), expected<int, int>>);\r\n            assert(result == 11);\r\n        }\r\n        {\r\n            decltype(auto) result = forward<Expected>(unengaged).and_then(&Thingy::x);\r\n            static_assert(is_same_v<decltype(result), expected<int, int>>);\r\n            assert(!result);\r\n            assert(result.error() == 22);\r\n        }\r\n    }\r\n\r\n    const auto f       = [](auto...) { return 55; };\r\n    const auto immov   = [](auto...) { return Immovable{88}; };\r\n    const auto to_void = [](auto...) { return; };\r\n\r\n    {\r\n        decltype(auto) result = forward<Expected>(engaged).transform(f);\r\n        static_assert(is_same_v<decltype(result), expected<int, int>>);\r\n        assert(result == 55);\r\n    }\r\n    {\r\n        decltype(auto) result = forward<Expected>(unengaged).transform(f);\r\n        static_assert(is_same_v<decltype(result), expected<int, int>>);\r\n        assert(!result);\r\n        assert(result.error() == 22);\r\n    }\r\n\r\n    if constexpr (!is_void_v<Val>) {\r\n        {\r\n            decltype(auto) result = forward<Expected>(engaged).transform(&Thingy::member_func);\r\n            static_assert(is_same_v<decltype(result), expected<int, int>>);\r\n            assert(result == 66);\r\n        }\r\n        {\r\n            decltype(auto) result = forward<Expected>(unengaged).transform(&Thingy::member_func);\r\n            static_assert(is_same_v<decltype(result), expected<int, int>>);\r\n            assert(!result);\r\n            assert(result.error() == 22);\r\n        }\r\n    }\r\n\r\n    {\r\n        decltype(auto) result = forward<Expected>(engaged).transform(immov);\r\n        static_assert(is_same_v<decltype(result), expected<Immovable, int>>);\r\n        assert(result->v == 88);\r\n    }\r\n    {\r\n        decltype(auto) result = forward<Expected>(unengaged).transform(immov);\r\n        static_assert(is_same_v<decltype(result), expected<Immovable, int>>);\r\n        assert(!result);\r\n        assert(result.error() == 22);\r\n    }\r\n\r\n    {\r\n        decltype(auto) result = forward<Expected>(engaged).transform(to_void);\r\n        static_assert(is_same_v<decltype(result), expected<void, int>>);\r\n        assert(result);\r\n    }\r\n    {\r\n        decltype(auto) result = forward<Expected>(unengaged).transform(to_void);\r\n        static_assert(is_same_v<decltype(result), expected<void, int>>);\r\n        assert(!result);\r\n        assert(result.error() == 22);\r\n    }\r\n\r\n    const auto to_thingy = [](int i) { return Thingy{i}; };\r\n\r\n    {\r\n        decltype(auto) result = forward<Expected>(engaged).transform_error(to_thingy);\r\n        static_assert(is_same_v<decltype(result), expected<Val, Thingy>>);\r\n        assert(result);\r\n        if constexpr (!is_void_v<Val>) {\r\n            assert(result->x == 11);\r\n        }\r\n    }\r\n    {\r\n        decltype(auto) result = forward<Expected>(unengaged).transform_error(to_thingy);\r\n        static_assert(is_same_v<decltype(result), expected<Val, Thingy>>);\r\n        assert(!result);\r\n        assert(result.error().x == 22);\r\n    }\r\n    {\r\n        decltype(auto) result =\r\n            forward<Expected>(engaged).transform_error(to_thingy).transform_error(&Thingy::member_func);\r\n        static_assert(is_same_v<decltype(result), expected<Val, int>>);\r\n        assert(result);\r\n        if constexpr (!is_void_v<Val>) {\r\n            assert(result->x == 11);\r\n        }\r\n    }\r\n    {\r\n        decltype(auto) result =\r\n            forward<Expected>(unengaged).transform_error(to_thingy).transform_error(&Thingy::member_func);\r\n        static_assert(is_same_v<decltype(result), expected<Val, int>>);\r\n        assert(!result);\r\n        assert(result.error() == 66);\r\n    }\r\n\r\n    {\r\n        decltype(auto) result = forward<Expected>(engaged).transform_error(immov);\r\n        static_assert(is_same_v<decltype(result), expected<Val, Immovable>>);\r\n        assert(result);\r\n        if constexpr (!is_void_v<Val>) {\r\n            assert(result->x == 11);\r\n        }\r\n    }\r\n    {\r\n        decltype(auto) result = forward<Expected>(unengaged).transform_error(immov);\r\n        static_assert(is_same_v<decltype(result), expected<Val, Immovable>>);\r\n        assert(!result);\r\n        assert(result.error().v == 88);\r\n    }\r\n\r\n    const auto to_expected_thingy = [](auto...) {\r\n        if constexpr (is_void_v<Val>) {\r\n            return expected<void, int>{};\r\n        } else {\r\n            return expected<Val, int>{Thingy{77}};\r\n        }\r\n    };\r\n    {\r\n        decltype(auto) result = forward<Expected>(engaged).or_else(to_expected_thingy);\r\n        static_assert(is_same_v<decltype(result), expected<Val, int>>);\r\n        assert(result);\r\n        if constexpr (!is_void_v<Val>) {\r\n            assert(result.value().x == 11);\r\n        }\r\n    }\r\n    {\r\n        decltype(auto) result = forward<Expected>(unengaged).or_else(to_expected_thingy);\r\n        static_assert(is_same_v<decltype(result), expected<Val, int>>);\r\n        assert(result);\r\n        if constexpr (!is_void_v<Val>) {\r\n            assert(result.value().x == 77);\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <IsNothrowConstructible nothrowConstructible, IsNothrowConvertible nothrowConvertible>\r\nconstexpr void test_error_or() {\r\n    constexpr bool construction_is_noexcept = IsYes(nothrowConstructible);\r\n    constexpr bool conversion_is_noexcept   = IsYes(nothrowConvertible);\r\n    constexpr bool should_be_noexcept       = construction_is_noexcept && conversion_is_noexcept;\r\n\r\n    struct payload_error_or {\r\n        constexpr payload_error_or() noexcept : _val(55) {}\r\n        constexpr payload_error_or(const int val) noexcept : _val(val) {}\r\n        constexpr payload_error_or(const payload_error_or& other) noexcept(construction_is_noexcept)\r\n            : _val(other._val + 2) {}\r\n        constexpr payload_error_or(payload_error_or&& other) noexcept(construction_is_noexcept)\r\n            : _val(other._val + 3) {}\r\n        constexpr payload_error_or(const convertible& val) noexcept(conversion_is_noexcept) : _val(val._val + 4) {}\r\n        constexpr payload_error_or(convertible&& val) noexcept(conversion_is_noexcept) : _val(val._val + 5) {}\r\n\r\n        [[nodiscard]] constexpr bool operator==(const payload_error_or&) const noexcept = default;\r\n\r\n        int _val;\r\n    };\r\n\r\n    { // with payload argument\r\n        using Expected = expected<int, payload_error_or>;\r\n\r\n        Expected with_error{unexpect, 42};\r\n        const Expected const_with_error{unexpect, 1337};\r\n        assert(with_error.error_or(payload_error_or{1}) == 42 + 2);\r\n        assert(const_with_error.error_or(payload_error_or{1}) == 1337 + 2);\r\n        static_assert(noexcept(with_error.error_or(payload_error_or{1})) == construction_is_noexcept);\r\n        static_assert(noexcept(const_with_error.error_or(payload_error_or{1})) == construction_is_noexcept);\r\n\r\n        assert(move(with_error).error_or(payload_error_or{1}) == 42 + 3);\r\n        assert(move(const_with_error).error_or(payload_error_or{1}) == 1337 + 2);\r\n        static_assert(noexcept(move(with_error).error_or(payload_error_or{1})) == construction_is_noexcept);\r\n        static_assert(noexcept(move(const_with_error).error_or(payload_error_or{1})) == construction_is_noexcept);\r\n\r\n        const payload_error_or input{2000};\r\n        Expected with_value{in_place, 42};\r\n        const Expected const_with_value{in_place, 1337};\r\n        assert(with_value.error_or(payload_error_or{1}) == 1 + 3);\r\n        assert(const_with_value.error_or(input) == 2000 + 2);\r\n        static_assert(noexcept(with_value.error_or(payload_error_or{1})) == construction_is_noexcept);\r\n        static_assert(noexcept(const_with_value.error_or(input)) == construction_is_noexcept);\r\n\r\n        assert(move(with_value).error_or(payload_error_or{1}) == 1 + 3);\r\n        assert(move(const_with_value).error_or(input) == 2000 + 2);\r\n        static_assert(noexcept(move(with_value).error_or(payload_error_or{1})) == construction_is_noexcept);\r\n        static_assert(noexcept(move(const_with_value).error_or(input)) == construction_is_noexcept);\r\n    }\r\n\r\n    { // with convertible argument\r\n        using Expected = expected<int, payload_error_or>;\r\n\r\n        Expected with_error{unexpect, 42};\r\n        const Expected const_with_error{unexpect, 1337};\r\n        assert(with_error.error_or(convertible{1}) == 42 + 2);\r\n        assert(const_with_error.error_or(convertible{1}) == 1337 + 2);\r\n        static_assert(noexcept(with_error.error_or(convertible{1})) == should_be_noexcept);\r\n        static_assert(noexcept(const_with_error.error_or(convertible{1})) == should_be_noexcept);\r\n\r\n        assert(move(with_error).error_or(convertible{1}) == 42 + 3);\r\n        assert(move(const_with_error).error_or(convertible{1}) == 1337 + 2);\r\n        static_assert(noexcept(move(with_error).error_or(convertible{1})) == should_be_noexcept);\r\n        static_assert(noexcept(move(const_with_error).error_or(convertible{1})) == should_be_noexcept);\r\n\r\n        const convertible input{2000};\r\n        Expected with_value{in_place, 42};\r\n        const Expected const_with_value{in_place, 1337};\r\n        assert(with_value.error_or(convertible{1}) == 1 + 5);\r\n        assert(const_with_value.error_or(input) == 2000 + 4);\r\n        static_assert(noexcept(with_value.error_or(convertible{1})) == should_be_noexcept);\r\n        static_assert(noexcept(const_with_value.error_or(input)) == should_be_noexcept);\r\n\r\n        assert(move(with_value).error_or(convertible{1}) == 1 + 5);\r\n        assert(move(const_with_value).error_or(input) == 2000 + 4);\r\n        static_assert(noexcept(move(with_value).error_or(convertible{1})) == should_be_noexcept);\r\n        static_assert(noexcept(move(const_with_value).error_or(input)) == should_be_noexcept);\r\n    }\r\n\r\n    { // test error_or({})\r\n        using Expected = expected<int, payload_error_or>;\r\n\r\n        Expected with_error{unexpect, 42};\r\n        const Expected const_with_error{unexpect, 1337};\r\n        Expected with_value{in_place, 42};\r\n        const Expected const_with_value{in_place, 1337};\r\n\r\n        assert(with_error.error_or({}) == 42 + 2);\r\n        assert(const_with_error.error_or({}) == 1337 + 2);\r\n        assert(with_value.error_or({}) == 55 + 3);\r\n        assert(const_with_value.error_or({}) == 55 + 3);\r\n    }\r\n}\r\n\r\nconstexpr void test_error_or() noexcept {\r\n    test_error_or<IsNothrowConstructible::Not, IsNothrowConvertible::Not>();\r\n    test_error_or<IsNothrowConstructible::Not, IsNothrowConvertible::Yes>();\r\n    test_error_or<IsNothrowConstructible::Yes, IsNothrowConvertible::Not>();\r\n    test_error_or<IsNothrowConstructible::Yes, IsNothrowConvertible::Yes>();\r\n}\r\n\r\nconstexpr void test_monadic() {\r\n    {\r\n        expected<Thingy, int> engaged{Thingy{11}};\r\n        expected<Thingy, int> unengaged{unexpect, 22};\r\n        test_impl(engaged, unengaged);\r\n        test_impl(as_const(engaged), as_const(unengaged));\r\n        test_impl(move(engaged), move(unengaged));\r\n        test_impl(move(as_const(engaged)), move(as_const(unengaged)));\r\n    }\r\n\r\n    {\r\n        expected<void, int> engaged{};\r\n        expected<void, int> unengaged{unexpect, 22};\r\n        test_impl(engaged, unengaged);\r\n        test_impl(as_const(engaged), as_const(unengaged));\r\n        test_impl(move(engaged), move(unengaged));\r\n        test_impl(move(as_const(engaged)), move(as_const(unengaged)));\r\n    }\r\n}\r\n\r\nconstexpr bool test() {\r\n    test_error_or();\r\n    test_monadic();\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class T, template <class...> class Tmpl>\r\nconstexpr bool is_specialization_of = false;\r\n\r\ntemplate <template <class...> class Tmpl, class... Args>\r\nconstexpr bool is_specialization_of<Tmpl<Args...>, Tmpl> = true;\r\n\r\ntemplate <class T>\r\n    requires is_specialization_of<remove_cvref_t<T>, expected>\r\nusing expected_value_t = remove_cvref_t<T>::value_type;\r\n\r\ntemplate <class T>\r\n    requires is_specialization_of<remove_cvref_t<T>, expected>\r\nusing expected_error_t = remove_cvref_t<T>::error_type;\r\n\r\ntemplate <class R>\r\nstruct DefaultTransformer {\r\n    constexpr R operator()() const {\r\n        return R();\r\n    }\r\n\r\n    constexpr R operator()(auto&&) const {\r\n        return R();\r\n    }\r\n};\r\n\r\ntemplate <class T>\r\nconcept CanAndThen = is_specialization_of<remove_cvref_t<T>, expected> && requires(T&& t) {\r\n    forward<T>(t).and_then(DefaultTransformer<expected<void, expected_error_t<T>>>{});\r\n};\r\n\r\ntemplate <class T>\r\nconcept CanOrElse = is_specialization_of<remove_cvref_t<T>, expected> && requires(T&& t) {\r\n    forward<T>(t).or_else(DefaultTransformer<expected<expected_value_t<T>, char>>{});\r\n};\r\n\r\ntemplate <class T>\r\nconcept CanTransform = is_specialization_of<remove_cvref_t<T>, expected>\r\n                    && requires(T&& t) { forward<T>(t).transform(DefaultTransformer<expected_value_t<T>>{}); };\r\n\r\ntemplate <class T>\r\nconcept CanTransformError = is_specialization_of<remove_cvref_t<T>, expected> && requires(T&& t) {\r\n    forward<T>(t).transform_error(DefaultTransformer<expected_error_t<T>>{});\r\n};\r\n\r\nenum class HasMutCopy : bool { No, Yes };\r\n\r\nenum class HasConstCopy : bool { No, Yes };\r\n\r\nenum class HasMutMove : bool { No, Yes };\r\n\r\nenum class HasConstMove : bool { No, Yes };\r\n\r\ntemplate <HasMutCopy MutCopyStatus, HasConstCopy ConstCopyStatus, HasMutMove MutMoveStatus,\r\n    HasConstMove ConstMoveStatus>\r\nstruct State {\r\n    State() = default;\r\n    State(State&)\r\n        requires (static_cast<bool>(MutCopyStatus))\r\n    = default;\r\n    State(State&)\r\n        requires (!static_cast<bool>(MutCopyStatus))\r\n    = delete;\r\n    State(const State&)\r\n        requires (static_cast<bool>(ConstCopyStatus))\r\n    = default;\r\n    State(const State&)\r\n        requires (!static_cast<bool>(ConstCopyStatus))\r\n    = delete;\r\n    State(State&&)\r\n        requires (static_cast<bool>(MutMoveStatus))\r\n    = default;\r\n    State(State&&)\r\n        requires (!static_cast<bool>(MutMoveStatus))\r\n    = delete;\r\n    State(const State&&)\r\n        requires (!static_cast<bool>(ConstMoveStatus))\r\n    = delete;\r\n\r\n    template <class U = State>\r\n        requires (!static_cast<bool>(ConstCopyStatus) && static_cast<bool>(ConstMoveStatus))\r\n    constexpr State(const type_identity_t<U>&&) noexcept {}\r\n\r\n    State& operator=(const State&) = default;\r\n    State& operator=(State&&)      = default;\r\n};\r\n\r\ntemplate <int N>\r\nconstexpr bool test_monadic_constraints_impl() {\r\n    constexpr bool MutCopyStatus   = static_cast<bool>(N & 0b0001);\r\n    constexpr bool ConstCopyStatus = static_cast<bool>(N & 0b0010);\r\n    constexpr bool MutMoveStatus   = static_cast<bool>(N & 0b0100);\r\n    constexpr bool ConstMoveStatus = static_cast<bool>(N & 0b1000);\r\n\r\n    using T = State<static_cast<HasMutCopy>(MutCopyStatus), static_cast<HasConstCopy>(ConstCopyStatus),\r\n        static_cast<HasMutMove>(MutMoveStatus), static_cast<HasConstMove>(ConstMoveStatus)>;\r\n\r\n    static_assert(is_constructible_v<T, T&> == MutCopyStatus);\r\n    static_assert(is_constructible_v<T, const T&> == ConstCopyStatus);\r\n    static_assert(is_constructible_v<T, T> == MutMoveStatus);\r\n    static_assert(is_constructible_v<T, const T> == ConstMoveStatus);\r\n\r\n    static_assert(CanAndThen<expected<int, T>&> == MutCopyStatus || ConstCopyStatus);\r\n    static_assert(CanAndThen<const expected<int, T>&> == ConstCopyStatus);\r\n    static_assert(CanAndThen<expected<int, T>> == MutMoveStatus || ConstCopyStatus || ConstMoveStatus);\r\n    static_assert(CanAndThen<const expected<int, T>> == ConstMoveStatus || ConstCopyStatus);\r\n\r\n    static_assert(CanAndThen<expected<void, T>&> == MutCopyStatus || ConstCopyStatus);\r\n    static_assert(CanAndThen<const expected<void, T>&> == ConstCopyStatus);\r\n    static_assert(CanAndThen<expected<void, T>> == MutMoveStatus || ConstCopyStatus || ConstMoveStatus);\r\n    static_assert(CanAndThen<const expected<void, T>> == ConstMoveStatus || ConstCopyStatus);\r\n\r\n    static_assert(CanOrElse<expected<T, char>&> == MutCopyStatus || ConstCopyStatus);\r\n    static_assert(CanOrElse<const expected<T, char>&> == ConstCopyStatus);\r\n    static_assert(CanOrElse<expected<T, char>> == MutMoveStatus || ConstCopyStatus || ConstMoveStatus);\r\n    static_assert(CanOrElse<const expected<T, char>> == ConstMoveStatus || ConstCopyStatus);\r\n\r\n    static_assert(CanTransform<expected<int, T>&> == MutCopyStatus || ConstCopyStatus);\r\n    static_assert(CanTransform<const expected<int, T>&> == ConstCopyStatus);\r\n    static_assert(CanTransform<expected<int, T>> == MutMoveStatus || ConstCopyStatus || ConstMoveStatus);\r\n    static_assert(CanTransform<const expected<int, T>> == ConstMoveStatus || ConstCopyStatus);\r\n\r\n    static_assert(CanTransform<expected<void, T>&> == MutCopyStatus || ConstCopyStatus);\r\n    static_assert(CanTransform<const expected<void, T>&> == ConstCopyStatus);\r\n    static_assert(CanTransform<expected<void, T>> == MutMoveStatus || ConstCopyStatus || ConstMoveStatus);\r\n    static_assert(CanTransform<const expected<void, T>> == ConstMoveStatus || ConstCopyStatus);\r\n\r\n    static_assert(CanTransformError<expected<T, char>&> == MutCopyStatus || ConstCopyStatus);\r\n    static_assert(CanTransformError<const expected<T, char>&> == ConstCopyStatus);\r\n    static_assert(CanTransformError<expected<T, char>> == MutMoveStatus || ConstCopyStatus || ConstMoveStatus);\r\n    static_assert(CanTransformError<const expected<T, char>> == ConstMoveStatus || ConstCopyStatus);\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_monadic_constraints() {\r\n    static_assert(test_monadic_constraints_impl<0b0000>());\r\n    static_assert(test_monadic_constraints_impl<0b0001>());\r\n    static_assert(test_monadic_constraints_impl<0b0010>());\r\n    static_assert(test_monadic_constraints_impl<0b0011>());\r\n    static_assert(test_monadic_constraints_impl<0b0100>());\r\n    static_assert(test_monadic_constraints_impl<0b0101>());\r\n    static_assert(test_monadic_constraints_impl<0b0110>());\r\n    static_assert(test_monadic_constraints_impl<0b0111>());\r\n    static_assert(test_monadic_constraints_impl<0b1000>());\r\n    static_assert(test_monadic_constraints_impl<0b1001>());\r\n    static_assert(test_monadic_constraints_impl<0b1010>());\r\n    static_assert(test_monadic_constraints_impl<0b1011>());\r\n    static_assert(test_monadic_constraints_impl<0b1100>());\r\n    static_assert(test_monadic_constraints_impl<0b1101>());\r\n    static_assert(test_monadic_constraints_impl<0b1110>());\r\n    static_assert(test_monadic_constraints_impl<0b1111>());\r\n\r\n    return true;\r\n}\r\n\r\nint main() {\r\n    test();\r\n    static_assert(test());\r\n\r\n    assert(test_monadic_constraints());\r\n    static_assert(test_monadic_constraints());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2510R3_text_formatting_pointers/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2510R3_text_formatting_pointers/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cctype>\r\n#include <charconv>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cwctype>\r\n#include <format>\r\n#include <functional>\r\n#include <ranges>\r\n#include <string>\r\n#include <string_view>\r\n#include <system_error>\r\n\r\n#include <test_format_support.hpp>\r\n\r\n#define STR(Str) TYPED_LITERAL(CharT, Str)\r\n\r\nusing namespace std;\r\n\r\ntemplate <class CharT>\r\nbasic_string<CharT> pointer_to_string(const void* ptr) {\r\n    constexpr size_t hexits = 2 * sizeof(void*);\r\n    char buffer[hexits];\r\n    auto [end, ec] = to_chars(buffer, buffer + hexits, reinterpret_cast<uintptr_t>(ptr), 16);\r\n    assert(ec == errc{});\r\n    basic_string<CharT> out;\r\n    ranges::transform(buffer, end, back_inserter(out), [](char c) { return static_cast<CharT>(c); });\r\n    return out;\r\n}\r\n\r\ntemplate <class CharT>\r\nbasic_string<CharT> string_to_uppercase(const basic_string<CharT>& str) {\r\n    basic_string<CharT> out;\r\n    ranges::transform(str, back_inserter(out), [](auto c) {\r\n        if constexpr (same_as<CharT, char>) {\r\n            return static_cast<char>(toupper(static_cast<unsigned char>(c)));\r\n        } else if constexpr (same_as<CharT, wchar_t>) {\r\n            return static_cast<wchar_t>(towupper(static_cast<wint_t>(c)));\r\n        }\r\n    });\r\n    return out;\r\n}\r\n\r\ntemplate <ranges::input_range R, class T>\r\n    requires indirect_binary_predicate<ranges::equal_to, ranges::iterator_t<R>, const T*>\r\nconstexpr bool all_equal_to(R&& r, const T& val) {\r\n    return ranges::all_of(r, [&val](const auto& elem) { return val == elem; });\r\n}\r\n\r\nstatic_assert(all_equal_to(array{1, 1, 1, 1}, 1));\r\nstatic_assert(!all_equal_to(array{1, 1, 1, 1}, 2));\r\nstatic_assert(!all_equal_to(array{1, 1, 1, 2}, 1));\r\n\r\ntemplate <class CharT, template <class> class Fmt>\r\nvoid check_pointer_formatter() {\r\n    Fmt<CharT> fmt;\r\n    const int variable       = 0;\r\n    const void* const ptr    = &variable;\r\n    const auto rep           = pointer_to_string<CharT>(ptr);\r\n    const auto lowercase_rep = STR(\"0x\") + rep;\r\n    const auto uppercase_rep = STR(\"0X\") + string_to_uppercase(rep);\r\n\r\n    { // type == '\\0'\r\n        assert(fmt(STR(\"{}\"), ptr) == lowercase_rep);\r\n        assert(fmt(STR(\"{:}\"), ptr) == lowercase_rep);\r\n        assert(fmt(STR(\"{0}\"), ptr) == lowercase_rep);\r\n        assert(fmt(STR(\"{0:}\"), ptr) == lowercase_rep);\r\n    }\r\n\r\n    { // align only\r\n        assert(fmt(STR(\"{:<}\"), ptr) == lowercase_rep);\r\n        assert(fmt(STR(\"{:^}\"), ptr) == lowercase_rep);\r\n        assert(fmt(STR(\"{:>}\"), ptr) == lowercase_rep);\r\n    }\r\n\r\n    { // fill-and-align only\r\n        assert(fmt(STR(\"{:_<}\"), ptr) == lowercase_rep);\r\n        assert(fmt(STR(\"{:-^}\"), ptr) == lowercase_rep);\r\n        assert(fmt(STR(\"{:=>}\"), ptr) == lowercase_rep);\r\n    }\r\n\r\n    { // type == 'p' || type == 'P'\r\n        assert(fmt(STR(\"{:p}\"), ptr) == lowercase_rep);\r\n        assert(fmt(STR(\"{:P}\"), ptr) == uppercase_rep);\r\n    }\r\n\r\n    { // leading zero and type\r\n        assert(fmt(STR(\"{:0}\"), ptr) == lowercase_rep);\r\n        assert(fmt(STR(\"{:0p}\"), ptr) == lowercase_rep);\r\n        assert(fmt(STR(\"{:0P}\"), ptr) == uppercase_rep);\r\n    }\r\n\r\n    { // width only\r\n        const int pad  = static_cast<int>(25 - lowercase_rep.size());\r\n        const auto str = fmt(STR(\"{:25}\"), ptr);\r\n        assert(all_equal_to(views::take(str, pad), STR(' ')));\r\n        assert(ranges::equal(views::drop(str, pad), lowercase_rep));\r\n    }\r\n\r\n    { // width && align\r\n        const auto str = fmt(STR(\"{:<31}\"), ptr);\r\n        assert(ranges::equal(views::take(str, static_cast<ptrdiff_t>(lowercase_rep.size())), lowercase_rep));\r\n        assert(all_equal_to(views::drop(str, static_cast<ptrdiff_t>(lowercase_rep.size())), ' '));\r\n    }\r\n\r\n    { // width && fill-and-align (2)\r\n        const int w    = 22;\r\n        const int pad  = static_cast<int>(w - lowercase_rep.size());\r\n        const auto str = fmt(STR(\"{:*^{}}\"), ptr, w);\r\n        basic_string_view<CharT> v{str};\r\n\r\n        const int left_pad = pad / 2;\r\n        assert(all_equal_to(views::take(v, left_pad), STR('*')));\r\n        v.remove_prefix(static_cast<size_t>(left_pad));\r\n        assert(v.starts_with(lowercase_rep));\r\n        v.remove_prefix(lowercase_rep.size());\r\n        assert(all_equal_to(v, STR('*')));\r\n    }\r\n\r\n    { // leading zero && width && type == 'p'\r\n        const int w    = 35;\r\n        const auto str = fmt(STR(\"{:0{}p}\"), ptr, w);\r\n        basic_string_view<CharT> v{str};\r\n        assert(v.starts_with(STR(\"0x\")));\r\n        v.remove_prefix(2);\r\n        const int zero_count = w - static_cast<int>(lowercase_rep.size());\r\n        assert(all_equal_to(views::take(v, zero_count), STR('0')));\r\n        v.remove_prefix(static_cast<size_t>(zero_count));\r\n        assert(ranges::equal(v, views::drop(lowercase_rep, 2)));\r\n    }\r\n\r\n    { // leading zero && width && type == 'P'\r\n        const int w    = 39;\r\n        const auto str = fmt(STR(\"{1:0{0}P}\"), w, ptr);\r\n        basic_string_view<CharT> v{str};\r\n        assert(v.starts_with(STR(\"0X\")));\r\n        v.remove_prefix(2);\r\n        const int zero_count = w - static_cast<int>(uppercase_rep.size());\r\n        assert(all_equal_to(views::take(v, zero_count), STR('0')));\r\n        v.remove_prefix(static_cast<size_t>(zero_count));\r\n        assert(ranges::equal(v, views::drop(uppercase_rep, 2)));\r\n    }\r\n\r\n    { // align && leading zero (should have no effect) && width && type == 'p'\r\n        const int w        = 42;\r\n        const int pad      = static_cast<int>(w - lowercase_rep.size());\r\n        const auto str     = fmt(STR(\"{:^0{}p}\"), ptr, w);\r\n        const int left_pad = pad / 2;\r\n        basic_string_view<CharT> v{str};\r\n        assert(all_equal_to(views::take(v, left_pad), STR(' ')));\r\n        v.remove_prefix(static_cast<size_t>(left_pad));\r\n        assert(v.starts_with(lowercase_rep));\r\n        v.remove_prefix(lowercase_rep.size());\r\n        assert(all_equal_to(v, STR(' ')));\r\n    }\r\n\r\n    { // fill-and-align && leading zero (should have no effect) && width && type == 'P'\r\n        const int w    = 44;\r\n        const int pad  = static_cast<int>(w - uppercase_rep.size());\r\n        const auto str = fmt(STR(\"{1:#>0{0}P}\"), w, ptr);\r\n        basic_string_view<CharT> v{str};\r\n        assert(all_equal_to(views::take(v, pad), STR('#')));\r\n        v.remove_prefix(static_cast<size_t>(pad));\r\n        assert(ranges::equal(v, uppercase_rep));\r\n    }\r\n}\r\n\r\ntemplate <class CharT, template <class> class Fmt>\r\nvoid check_nullptr_t_formatter() {\r\n    Fmt<CharT> fmt;\r\n\r\n    { // type == '\\0'\r\n        assert(fmt(STR(\"{}\"), nullptr) == STR(\"0x0\"));\r\n        assert(fmt(STR(\"{:}\"), nullptr) == STR(\"0x0\"));\r\n        assert(fmt(STR(\"{0}\"), nullptr) == STR(\"0x0\"));\r\n        assert(fmt(STR(\"{0:}\"), nullptr) == STR(\"0x0\"));\r\n    }\r\n\r\n    { // align only\r\n        assert(fmt(STR(\"{:<}\"), nullptr) == STR(\"0x0\"));\r\n        assert(fmt(STR(\"{:^}\"), nullptr) == STR(\"0x0\"));\r\n        assert(fmt(STR(\"{:>}\"), nullptr) == STR(\"0x0\"));\r\n    }\r\n\r\n    { // fill-and-align only\r\n        assert(fmt(STR(\"{:_<}\"), nullptr) == STR(\"0x0\"));\r\n        assert(fmt(STR(\"{:-^}\"), nullptr) == STR(\"0x0\"));\r\n        assert(fmt(STR(\"{:=>}\"), nullptr) == STR(\"0x0\"));\r\n    }\r\n\r\n    { // type == 'p' || type == 'P'\r\n        assert(fmt(STR(\"{:p}\"), nullptr) == STR(\"0x0\"));\r\n        assert(fmt(STR(\"{:P}\"), nullptr) == STR(\"0X0\"));\r\n    }\r\n\r\n    { // leading zero and type\r\n        assert(fmt(STR(\"{:0}\"), nullptr) == STR(\"0x0\"));\r\n        assert(fmt(STR(\"{:0p}\"), nullptr) == STR(\"0x0\"));\r\n        assert(fmt(STR(\"{:0P}\"), nullptr) == STR(\"0X0\"));\r\n    }\r\n\r\n    { // width only\r\n        assert(fmt(STR(\"{:5}\"), nullptr) == STR(\"  0x0\"));\r\n        assert(fmt(STR(\"{:7}\"), nullptr) == STR(\"    0x0\"));\r\n        assert(fmt(STR(\"{:11}\"), nullptr) == STR(\"        0x0\"));\r\n    }\r\n\r\n    { // width && align\r\n        assert(fmt(STR(\"{:<5}\"), nullptr) == STR(\"0x0  \"));\r\n        assert(fmt(STR(\"{:^7}\"), nullptr) == STR(\"  0x0  \"));\r\n        assert(fmt(STR(\"{:>11}\"), nullptr) == STR(\"        0x0\"));\r\n    }\r\n\r\n    { // width && fill-and-align\r\n        assert(fmt(STR(\"{:#<5}\"), nullptr) == STR(\"0x0##\"));\r\n        assert(fmt(STR(\"{:*^7}\"), nullptr) == STR(\"**0x0**\"));\r\n        assert(fmt(STR(\"{:=>11}\"), nullptr) == STR(\"========0x0\"));\r\n    }\r\n\r\n    { // leading zero && width && type == '\\0'\r\n        assert(fmt(STR(\"{:05}\"), nullptr) == STR(\"0x000\"));\r\n        assert(fmt(STR(\"{:07}\"), nullptr) == STR(\"0x00000\"));\r\n        assert(fmt(STR(\"{:011}\"), nullptr) == STR(\"0x000000000\"));\r\n    }\r\n\r\n    { // leading zero && width && type == 'p'\r\n        assert(fmt(STR(\"{:05p}\"), nullptr) == STR(\"0x000\"));\r\n        assert(fmt(STR(\"{:07p}\"), nullptr) == STR(\"0x00000\"));\r\n        assert(fmt(STR(\"{:011p}\"), nullptr) == STR(\"0x000000000\"));\r\n    }\r\n\r\n    { // leading zero && width && type == 'P'\r\n        assert(fmt(STR(\"{:05P}\"), nullptr) == STR(\"0X000\"));\r\n        assert(fmt(STR(\"{:07P}\"), nullptr) == STR(\"0X00000\"));\r\n        assert(fmt(STR(\"{:011P}\"), nullptr) == STR(\"0X000000000\"));\r\n    }\r\n\r\n    { // align && leading zero (should have no effect) && width && type in ('\\0', 'p', 'P')\r\n        assert(fmt(STR(\"{:<05}\"), nullptr) == STR(\"0x0  \"));\r\n        assert(fmt(STR(\"{:^07p}\"), nullptr) == STR(\"  0x0  \"));\r\n        assert(fmt(STR(\"{:>011P}\"), nullptr) == STR(\"        0X0\"));\r\n    }\r\n\r\n    { // fill-and-align && leading zero (should have no effect) && width && type in ('\\0', 'p', 'P')\r\n        assert(fmt(STR(\"{:!<05}\"), nullptr) == STR(\"0x0!!\"));\r\n        assert(fmt(STR(\"{:@^07p}\"), nullptr) == STR(\"@@0x0@@\"));\r\n        assert(fmt(STR(\"{:#>011P}\"), nullptr) == STR(\"########0X0\"));\r\n    }\r\n}\r\n\r\ntemplate <class CharT, class PtrType>\r\nvoid check_invalid_format_spec() {\r\n    ExpectFormatError<CharT> fmt;\r\n    PtrType ptr = nullptr;\r\n\r\n    { // damaged fields\r\n        fmt(STR(\"{\"), ptr);\r\n        fmt(STR(\"{}}\"), ptr);\r\n        fmt(STR(\"{{}\"), ptr);\r\n        fmt(STR(\"{:}}\"), ptr);\r\n    }\r\n\r\n    { // sign || '#' || precision || 'L'\r\n        fmt(STR(\"{:+}\"), ptr);\r\n        fmt(STR(\"{:-}\"), ptr);\r\n        fmt(STR(\"{: }\"), ptr);\r\n        fmt(STR(\"{:#}\"), ptr);\r\n        fmt(STR(\"{:.2}\"), ptr);\r\n        fmt(STR(\"{:L}\"), ptr);\r\n    }\r\n\r\n    { // mixed invalid specs\r\n        fmt(STR(\"{:+#}\"), ptr);\r\n        fmt(STR(\"{:-.3}\"), ptr);\r\n        fmt(STR(\"{: #}\"), ptr);\r\n        fmt(STR(\"{:#.4}\"), ptr);\r\n        fmt(STR(\"{:.3o}\"), ptr);\r\n        fmt(STR(\"{:X}\"), ptr);\r\n        fmt(STR(\"{:invalid for sure}\"), ptr);\r\n    }\r\n}\r\n\r\ntemplate <class CharT>\r\nvoid test() {\r\n    check_pointer_formatter<CharT, FormatFn>();\r\n    check_pointer_formatter<CharT, VFormatFn>();\r\n    check_nullptr_t_formatter<CharT, FormatFn>();\r\n    check_nullptr_t_formatter<CharT, VFormatFn>();\r\n    check_invalid_format_spec<CharT, const void*>();\r\n    check_invalid_format_spec<CharT, nullptr_t>();\r\n}\r\n\r\nint main() {\r\n    test<char>();\r\n    test<wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2517R1_apply_conditional_noexcept/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2517R1_apply_conditional_noexcept/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <string>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nstruct NoexceptIf {\r\n    template <bool B, class... Ts>\r\n    void operator()(bool_constant<B>, Ts...) const noexcept(B);\r\n};\r\n\r\nstatic constexpr NoexceptIf noexcept_if;\r\n\r\nstatic_assert(noexcept(apply(noexcept_if, forward_as_tuple(true_type{}))));\r\nstatic_assert(!noexcept(apply(noexcept_if, forward_as_tuple(false_type{}))));\r\n\r\nstatic_assert(noexcept(apply(noexcept_if, forward_as_tuple(true_type{}, 0))));\r\nstatic_assert(noexcept(apply(noexcept_if, forward_as_tuple(true_type{}, string{}))));\r\nstatic_assert(!noexcept(apply(noexcept_if, forward_as_tuple(true_type{}, declval<const string&>()))));\r\n"
  },
  {
    "path": "tests/std/tests/P2538R1_adl_proof_std_projected/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2538R1_adl_proof_std_projected/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <functional>\r\n#include <iterator>\r\n#include <ranges>\r\n#include <utility>\r\n\r\ntemplate <class Tag>\r\nstruct tagged_truth {\r\n    template <class T>\r\n    constexpr bool operator()(T&&) const noexcept {\r\n        return true;\r\n    }\r\n};\r\n\r\ntemplate <class Tag>\r\nstruct tagged_zeroer {\r\n    template <class T>\r\n    constexpr int operator()(T&&) const noexcept {\r\n        return 0;\r\n    }\r\n};\r\n\r\ntemplate <class Tag>\r\nstruct tagged_true_comparator {\r\n    template <class T, class U>\r\n    constexpr bool operator()(T&&, U&&) const noexcept {\r\n        return true;\r\n    }\r\n};\r\n\r\ntemplate <class Tag>\r\nstruct tagged_equal {\r\n    template <class T, class U>\r\n    constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) == std::forward<U>(u)) {\r\n        return std::forward<T>(t) == std::forward<U>(u);\r\n    }\r\n};\r\n\r\ntemplate <class Tag>\r\nstruct tagged_less {\r\n    template <class T, class U>\r\n    constexpr auto operator()(T&& t, U&& u) const -> decltype(std::forward<T>(t) < std::forward<U>(u)) {\r\n        return std::forward<T>(t) < std::forward<U>(u);\r\n    }\r\n};\r\n\r\ntemplate <class Tag>\r\nstruct tagged_identity {\r\n    template <class T>\r\n    constexpr T&& operator()(T&& t) const noexcept {\r\n        return std::forward<T>(t);\r\n    }\r\n};\r\n\r\ntemplate <class Tag>\r\nstruct tagged_left_selector {\r\n    template <class T>\r\n    constexpr T operator()(T lhs, T) const noexcept {\r\n        return lhs;\r\n    }\r\n};\r\n\r\ntemplate <class Tag>\r\nstruct tagged_zero_equality {\r\n    template <class T>\r\n    constexpr auto operator()(T&& t) const -> decltype(std::forward<T>(t) == std::remove_cvref_t<T>{}) {\r\n        return std::forward<T>(t) == std::remove_cvref_t<T>{};\r\n    }\r\n};\r\n\r\ntemplate <class Tag>\r\nstruct tagged_base {};\r\n\r\ntemplate <class Tag>\r\nstruct tagged_derived : tagged_base<Tag> {};\r\n\r\ntemplate <class T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\n\r\nusing simple_truth         = tagged_truth<void>;\r\nusing simple_identity      = tagged_identity<void>;\r\nusing simple_left_selector = tagged_left_selector<void>;\r\nusing simple_zero_equality = tagged_zero_equality<void>;\r\n\r\nusing validator                  = holder<incomplete>*;\r\nusing validating_truth           = tagged_truth<holder<incomplete>>;\r\nusing validating_zeroer          = tagged_zeroer<holder<incomplete>>;\r\nusing validating_true_comparator = tagged_true_comparator<holder<incomplete>>;\r\nusing validating_equal           = tagged_equal<holder<incomplete>>;\r\nusing validating_less            = tagged_less<holder<incomplete>>;\r\nusing validating_identity        = tagged_identity<holder<incomplete>>;\r\nusing validating_left_selector   = tagged_left_selector<holder<incomplete>>;\r\nusing validating_zero_equality   = tagged_zero_equality<holder<incomplete>>;\r\nusing validating_derived         = tagged_derived<holder<incomplete>>;\r\nusing validating_base            = tagged_base<holder<incomplete>>;\r\n\r\nstatic_assert(std::sentinel_for<validating_base*, validating_derived*>);\r\n#ifndef __EDG__ // TRANSITION, DevCom-10581519\r\nstatic_assert(!std::sized_sentinel_for<validating_base*, validating_derived*>);\r\n#endif // ^^^ no workaround ^^^\r\n\r\ntemplate <class T>\r\nbool less_function(T lhs, T rhs) {\r\n    return lhs < rhs;\r\n}\r\n\r\nvoid test_ranges_algorithms() {\r\n    using namespace std::ranges;\r\n\r\n    int iarr[1]{};\r\n    validator varr[1]{};\r\n\r\n    validating_derived darr[1]{};\r\n    validating_derived* const dptr = darr;\r\n    validating_base* const bptr    = darr; // behaves as a non-sized sentinel\r\n\r\n    (void) all_of(varr, varr, simple_truth{});\r\n    (void) all_of(varr, simple_truth{});\r\n    (void) all_of(iarr, iarr, validating_truth{});\r\n    (void) all_of(iarr, validating_truth{});\r\n\r\n    (void) any_of(varr, varr, simple_truth{});\r\n    (void) any_of(varr, simple_truth{});\r\n    (void) any_of(iarr, iarr, validating_truth{});\r\n    (void) any_of(iarr, validating_truth{});\r\n\r\n    (void) none_of(varr, varr, simple_truth{});\r\n    (void) none_of(varr, simple_truth{});\r\n    (void) none_of(iarr, iarr, validating_truth{});\r\n    (void) none_of(iarr, validating_truth{});\r\n\r\n#if _HAS_CXX23\r\n    (void) contains(varr, varr, validator{});\r\n    (void) contains(varr, validator{});\r\n    (void) contains(iarr, iarr, 0, validating_identity{});\r\n    (void) contains(iarr, 0, validating_identity{});\r\n\r\n    (void) contains_subrange(varr, varr, varr, varr);\r\n    (void) contains_subrange(varr, varr);\r\n    (void) contains_subrange(iarr, iarr, iarr, iarr, validating_equal{});\r\n    // (void) contains_subrange(iarr, iarr, validating_equal{}); // needs to check ADL-found operator*\r\n    (void) contains_subrange(iarr, iarr, {}, validating_identity{});\r\n#endif // _HAS_CXX23\r\n\r\n    (void) for_each(varr, varr, simple_truth{});\r\n    (void) for_each(varr, simple_truth{});\r\n    (void) for_each(varr, varr, validating_truth{});\r\n    (void) for_each(varr, validating_truth{});\r\n    (void) for_each(iarr, iarr, validating_truth{});\r\n    (void) for_each(iarr, validating_truth{});\r\n\r\n    (void) for_each_n(varr, 0, simple_truth{});\r\n    (void) for_each_n(varr, 0, validating_truth{});\r\n    (void) for_each_n(iarr, 0, validating_truth{});\r\n\r\n    (void) find(varr, varr, validator{});\r\n    (void) find(varr, validator{});\r\n\r\n    (void) find_if(varr, varr, simple_truth{});\r\n    (void) find_if(varr, simple_truth{});\r\n    (void) find_if(iarr, iarr, validating_truth{});\r\n    (void) find_if(iarr, validating_truth{});\r\n\r\n    (void) find_if_not(varr, varr, simple_truth{});\r\n    (void) find_if_not(varr, simple_truth{});\r\n    (void) find_if_not(iarr, iarr, validating_truth{});\r\n    (void) find_if_not(iarr, validating_truth{});\r\n\r\n#if _HAS_CXX23\r\n    (void) find_last(varr, varr, validator{});\r\n    (void) find_last(varr, validator{});\r\n\r\n    (void) find_last_if(varr, varr, simple_truth{});\r\n    (void) find_last_if(varr, simple_truth{});\r\n    (void) find_last_if(iarr, iarr, validating_truth{});\r\n    (void) find_last_if(iarr, validating_truth{});\r\n\r\n    (void) find_last_if_not(varr, varr, simple_truth{});\r\n    (void) find_last_if_not(varr, simple_truth{});\r\n    (void) find_last_if_not(iarr, iarr, validating_truth{});\r\n    (void) find_last_if_not(iarr, validating_truth{});\r\n#endif // _HAS_CXX23\r\n\r\n    (void) find_end(varr, varr, varr, varr);\r\n    (void) find_end(varr, varr);\r\n    (void) find_end(varr, varr, varr, varr, validating_equal{});\r\n    (void) find_end(varr, varr, validating_equal{});\r\n    (void) find_end(iarr, iarr, iarr, iarr, validating_equal{});\r\n    (void) find_end(iarr, iarr, validating_equal{});\r\n    (void) find_end(dptr, bptr, dptr, bptr, validating_true_comparator{});\r\n\r\n    (void) find_first_of(varr, varr, varr, varr);\r\n    (void) find_first_of(varr, varr);\r\n    (void) find_first_of(varr, varr, varr, varr, validating_equal{});\r\n    (void) find_first_of(varr, varr, validating_equal{});\r\n    (void) find_first_of(iarr, iarr, iarr, iarr, validating_equal{});\r\n    (void) find_first_of(iarr, iarr, validating_equal{});\r\n\r\n    (void) adjacent_find(varr, varr);\r\n    (void) adjacent_find(varr);\r\n    (void) adjacent_find(iarr, iarr, validating_equal{});\r\n    (void) adjacent_find(iarr, iarr, {}, validating_identity{});\r\n    // (void) adjacent_find(iarr, validating_equal{}); // needs to check ADL-found swap\r\n    (void) adjacent_find(iarr, {}, validating_identity{});\r\n    (void) adjacent_find(dptr, bptr, validating_true_comparator{});\r\n\r\n    (void) count(varr, varr, validator{});\r\n    (void) count(varr, validator{});\r\n    (void) count(iarr, iarr, 0, validating_identity{});\r\n    (void) count(iarr, 0, validating_identity{});\r\n\r\n    (void) count_if(varr, varr, simple_truth{});\r\n    (void) count_if(varr, simple_truth{});\r\n    (void) count_if(iarr, iarr, validating_truth{});\r\n    (void) count_if(iarr, validating_truth{});\r\n\r\n    (void) mismatch(varr, varr, varr, varr);\r\n    (void) mismatch(varr, varr);\r\n    (void) mismatch(iarr, iarr, iarr, iarr, validating_equal{});\r\n    (void) mismatch(iarr, iarr, validating_equal{});\r\n    (void) mismatch(dptr, bptr, dptr, bptr, validating_true_comparator{});\r\n\r\n    (void) equal(varr, varr, varr, varr);\r\n    (void) equal(varr, varr);\r\n    (void) equal(iarr, iarr, iarr, iarr, validating_equal{});\r\n    (void) equal(iarr, iarr, validating_equal{});\r\n    (void) equal(dptr, bptr, dptr, bptr, validating_true_comparator{});\r\n\r\n    (void) is_permutation(varr, varr, varr, varr);\r\n    (void) is_permutation(varr, varr);\r\n    (void) is_permutation(varr, varr, varr, varr, validating_equal{});\r\n    (void) is_permutation(varr, varr, validating_equal{});\r\n    (void) is_permutation(iarr, iarr, iarr, iarr, validating_equal{});\r\n    (void) is_permutation(iarr, iarr, validating_equal{});\r\n    (void) is_permutation(iarr, iarr, iarr, iarr, {}, validating_identity{});\r\n    (void) is_permutation(iarr, iarr, {}, validating_identity{});\r\n    (void) is_permutation(dptr, bptr, dptr, bptr, validating_true_comparator{});\r\n\r\n    (void) search(varr, varr, varr, varr);\r\n    (void) search(varr, varr);\r\n    (void) search(iarr, iarr, iarr, iarr, validating_equal{});\r\n    (void) search(iarr, iarr, validating_equal{});\r\n    (void) search(dptr, bptr, dptr, bptr, validating_true_comparator{});\r\n\r\n    (void) search_n(varr, varr, 0, validator{});\r\n    (void) search_n(varr, 0, validator{});\r\n    (void) search_n(iarr, iarr, 0, 0, validating_equal{});\r\n    (void) search_n(iarr, 0, 0, validating_equal{});\r\n    (void) search_n(dptr, bptr, 0, validating_derived{}, validating_true_comparator{});\r\n\r\n#if _HAS_CXX23\r\n    (void) starts_with(varr, varr, varr, varr);\r\n    (void) starts_with(varr, varr);\r\n    (void) starts_with(iarr, iarr, iarr, iarr, validating_equal{});\r\n    (void) starts_with(iarr, iarr, validating_equal{});\r\n    (void) starts_with(dptr, bptr, dptr, bptr, validating_true_comparator{});\r\n\r\n    (void) ends_with(varr, varr, varr, varr);\r\n    (void) ends_with(varr, varr);\r\n    (void) ends_with(iarr, iarr, iarr, iarr, validating_equal{});\r\n    (void) ends_with(iarr, iarr, validating_equal{});\r\n    (void) ends_with(dptr, bptr, dptr, bptr, validating_true_comparator{});\r\n#endif // _HAS_CXX23\r\n\r\n    int iarr2[1]{};\r\n    validator varr2[1]{};\r\n\r\n    (void) copy_if(varr, varr + 1, varr2, simple_truth{});\r\n    (void) copy_if(varr, varr2, simple_truth{});\r\n    (void) copy_if(iarr, iarr + 1, iarr2, validating_truth{});\r\n    (void) copy_if(iarr, iarr2, validating_truth{});\r\n\r\n    (void) transform(varr, varr, varr2, std::identity{});\r\n    (void) transform(varr, varr2, std::identity{});\r\n    (void) transform(varr, varr, varr, varr, varr2, simple_left_selector{});\r\n    (void) transform(varr, varr, varr2, simple_left_selector{});\r\n    (void) transform(iarr, iarr, iarr2, validating_identity{});\r\n    (void) transform(iarr, iarr, iarr, iarr, iarr2, validating_left_selector{});\r\n    (void) transform(iarr, iarr, iarr2, validating_left_selector{});\r\n\r\n    (void) replace(varr, varr, validator{}, validator{});\r\n    (void) replace(varr, validator{}, validator{});\r\n    (void) replace(iarr, iarr, 0, 0, validating_identity{});\r\n    (void) replace(iarr, 0, 0, validating_identity{});\r\n\r\n    (void) replace_if(varr, varr, simple_truth{}, validator{});\r\n    (void) replace_if(varr, simple_truth{}, validator{});\r\n    (void) replace_if(iarr, iarr, validating_truth{}, 0);\r\n    (void) replace_if(iarr, validating_truth{}, 0);\r\n\r\n    (void) replace_copy(varr, varr, varr2, validator{}, validator{});\r\n    (void) replace_copy(varr, varr2, validator{}, validator{});\r\n    (void) replace_copy(iarr, iarr, iarr2, 0, 0, validating_identity{});\r\n    (void) replace_copy(iarr, iarr2, 0, 0, validating_identity{});\r\n\r\n    (void) replace_copy_if(varr, varr, varr2, simple_truth{}, validator{});\r\n    (void) replace_copy_if(varr, varr2, simple_truth{}, validator{});\r\n    (void) replace_copy_if(iarr, iarr, iarr2, validating_truth{}, 0);\r\n    (void) replace_copy_if(iarr, iarr2, validating_truth{}, 0);\r\n\r\n    using std::ranges::remove; // avoid ambiguity\r\n    (void) remove(varr, varr, validator{});\r\n    (void) remove(varr, validator{});\r\n\r\n    (void) remove_if(varr, varr, simple_truth{});\r\n    (void) remove_if(varr, simple_truth{});\r\n    (void) remove_if(iarr, iarr, validating_truth{});\r\n    (void) remove_if(iarr, validating_truth{});\r\n\r\n    (void) remove_copy(varr, varr, varr2, validator{});\r\n    (void) remove_copy(varr, varr2, validator{});\r\n\r\n    (void) remove_copy_if(varr, varr, varr2, simple_truth{});\r\n    (void) remove_copy_if(varr, varr2, simple_truth{});\r\n    (void) remove_copy_if(iarr, iarr, iarr2, validating_truth{});\r\n    (void) remove_copy_if(iarr, iarr2, validating_truth{});\r\n\r\n    (void) unique(varr, varr);\r\n    (void) unique(varr);\r\n    (void) unique(iarr, iarr, validating_equal{});\r\n    // (void) unique(iarr, validating_equal{}); // needs to check ADL-found swap\r\n    (void) unique(iarr, iarr, {}, validating_identity{});\r\n    (void) unique(iarr, {}, validating_identity{});\r\n\r\n    (void) unique_copy(varr, varr, varr2);\r\n    (void) unique_copy(varr, varr2);\r\n    (void) unique_copy(iarr, iarr, iarr2, validating_equal{});\r\n    // (void) unique_copy(iarr, iarr2, validating_equal{}); // needs to check ADL-found swap\r\n    (void) unique_copy(iarr, iarr, iarr2, {}, validating_identity{});\r\n    (void) unique_copy(iarr, iarr2, {}, validating_identity{});\r\n\r\n    sort(varr, varr);\r\n    sort(varr);\r\n    sort(varr, varr, less{});\r\n    // sort(varr, less{}); // need to check ADL-found operator==\r\n    sort(varr, &less_function<validator>);\r\n    sort(iarr, iarr, validating_less{});\r\n    // sort(iarr, validating_less{}); // need to check ADL-found swap\r\n    sort(iarr, iarr, {}, validating_identity{});\r\n\r\n    stable_sort(varr, varr);\r\n    stable_sort(varr);\r\n    stable_sort(varr, varr, less{});\r\n    // stable_sort(varr, less{}); // need to check ADL-found operator==\r\n    stable_sort(varr, &less_function<validator>);\r\n    stable_sort(iarr, iarr, validating_less{});\r\n    // stable_sort(iarr, validating_less{}); // need to check ADL-found swap\r\n    stable_sort(iarr, iarr, {}, validating_identity{});\r\n\r\n    partial_sort(varr, varr, varr);\r\n    partial_sort(varr, varr, static_cast<holder<incomplete>* const*>(varr)); // non-common\r\n    partial_sort(varr, varr);\r\n    partial_sort(subrange{varr, static_cast<holder<incomplete>* const*>(varr)}, varr); // non-common\r\n    partial_sort(varr, varr, varr, less{});\r\n    // partial_sort(varr, varr, less{}); // need to check ADL-found operator==\r\n    partial_sort(varr, varr, &less_function<validator>);\r\n    partial_sort(iarr, iarr, iarr, validating_less{});\r\n    partial_sort(iarr, iarr, iarr, {}, validating_identity{});\r\n    partial_sort(iarr, iarr, static_cast<const int*>(iarr), validating_less{}, validating_identity{}); // non-common\r\n    partial_sort(iarr, iarr, static_cast<const int*>(iarr), {}, validating_identity{}); // non-common\r\n    // partial_sort(iarr, iarr, validating_less{}); // need to check ADL-found swap\r\n    partial_sort(iarr, iarr, {}, validating_identity{});\r\n    partial_sort(subrange{iarr, static_cast<const int*>(iarr)}, iarr, validating_less{}); // non-common\r\n    partial_sort(subrange{iarr, static_cast<const int*>(iarr)}, iarr, {}, validating_identity{}); // non-common\r\n\r\n    void* vparr[2]{};\r\n\r\n    (void) partial_sort_copy(varr, varr, varr2, varr2);\r\n    (void) partial_sort_copy(varr, varr2);\r\n    (void) partial_sort_copy(varr, varr, vparr, vparr);\r\n    (void) partial_sort_copy(varr, vparr);\r\n    (void) partial_sort_copy(iarr, iarr, iarr2, iarr2, validating_less{});\r\n    (void) partial_sort_copy(iarr, iarr2, validating_less{});\r\n\r\n    (void) is_sorted(varr, varr);\r\n    (void) is_sorted(varr);\r\n    (void) is_sorted(iarr, iarr, validating_less{});\r\n    // (void) is_sorted(iarr, validating_less{}); // need to check ADL-found swap\r\n    (void) is_sorted(iarr, {}, validating_identity{});\r\n\r\n    (void) is_sorted_until(varr, varr);\r\n    (void) is_sorted_until(varr);\r\n    (void) is_sorted_until(iarr, iarr, validating_less{});\r\n    // (void) is_sorted_until(iarr, validating_less{}); // need to check ADL-found swap\r\n    (void) is_sorted_until(iarr, {}, validating_identity{});\r\n\r\n    nth_element(varr, varr, varr);\r\n    nth_element(varr, varr);\r\n    nth_element(iarr, iarr, iarr, validating_less{});\r\n    // nth_element(iarr, iarr, validating_less{}); // need to check ADL-found swap\r\n    nth_element(iarr, iarr, {}, validating_identity{});\r\n\r\n    (void) lower_bound(varr, varr, validator{});\r\n    (void) lower_bound(varr, validator{});\r\n    (void) lower_bound(iarr, iarr, 0, validating_less{});\r\n    (void) lower_bound(iarr, 0, validating_less{});\r\n\r\n    (void) upper_bound(varr, varr, validator{});\r\n    (void) upper_bound(varr, validator{});\r\n    (void) upper_bound(iarr, iarr, 0, validating_less{});\r\n    (void) upper_bound(iarr, 0, validating_less{});\r\n\r\n    (void) equal_range(varr, varr, validator{});\r\n    (void) equal_range(varr, validator{});\r\n    (void) equal_range(iarr, iarr, 0, validating_less{});\r\n    (void) equal_range(iarr, 0, validating_less{});\r\n\r\n    (void) binary_search(varr, varr, validator{});\r\n    (void) binary_search(varr, validator{});\r\n    (void) binary_search(iarr, iarr, 0, validating_less{});\r\n    (void) binary_search(iarr, 0, validating_less{});\r\n\r\n    (void) is_partitioned(varr, varr, simple_zero_equality{});\r\n    (void) is_partitioned(varr, simple_zero_equality{});\r\n    (void) is_partitioned(iarr, iarr, validating_zero_equality{});\r\n    (void) is_partitioned(iarr, validating_zero_equality{});\r\n\r\n    (void) partition(varr, varr, simple_zero_equality{});\r\n    (void) partition(varr, simple_zero_equality{});\r\n    (void) partition(iarr, iarr, validating_zero_equality{});\r\n    (void) partition(iarr, validating_zero_equality{});\r\n\r\n    (void) stable_partition(varr, varr, simple_zero_equality{});\r\n    (void) stable_partition(varr, simple_zero_equality{});\r\n    (void) stable_partition(iarr, iarr, validating_zero_equality{});\r\n    (void) stable_partition(iarr, validating_zero_equality{});\r\n\r\n    int iarr3[2]{};\r\n    validator varr3[2]{};\r\n\r\n    (void) partition_copy(varr, varr, varr2, varr3, simple_zero_equality{});\r\n    (void) partition_copy(varr, varr2, varr3, simple_zero_equality{});\r\n    (void) partition_copy(iarr, iarr, iarr2, iarr3, validating_zero_equality{});\r\n    (void) partition_copy(iarr, iarr2, iarr3, validating_zero_equality{});\r\n\r\n    (void) partition_point(varr, varr, simple_zero_equality{});\r\n    (void) partition_point(varr, simple_zero_equality{});\r\n    (void) partition_point(iarr, iarr, validating_zero_equality{});\r\n    (void) partition_point(iarr, validating_zero_equality{});\r\n    (void) partition_point(dptr, bptr, validating_zero_equality{}, validating_zeroer{});\r\n\r\n    (void) merge(varr, varr, varr2, varr2, varr3);\r\n    (void) merge(varr, varr2, varr3);\r\n    (void) merge(iarr, iarr, iarr2, iarr2, iarr3, validating_less{});\r\n    (void) merge(iarr, iarr2, iarr3, validating_less{});\r\n\r\n    (void) inplace_merge(varr, varr, varr);\r\n    (void) inplace_merge(varr, varr);\r\n    (void) inplace_merge(iarr, iarr, iarr, validating_less{});\r\n    (void) inplace_merge(iarr, iarr, {}, validating_identity{});\r\n\r\n    (void) includes(varr, varr, varr, varr);\r\n    (void) includes(varr, varr);\r\n    (void) includes(iarr, iarr, iarr, iarr, validating_less{});\r\n    (void) includes(iarr, iarr, validating_less{});\r\n\r\n    (void) set_union(varr, varr, varr, varr, varr3);\r\n    (void) set_union(varr, varr, varr3);\r\n    (void) set_union(iarr, iarr, iarr, iarr, iarr3, validating_less{});\r\n    (void) set_union(iarr, iarr, iarr3, validating_less{});\r\n\r\n    (void) set_intersection(varr, varr, varr, varr, varr3);\r\n    (void) set_intersection(varr, varr, varr3);\r\n    (void) set_intersection(iarr, iarr, iarr, iarr, iarr3, validating_less{});\r\n    (void) set_intersection(iarr, iarr, iarr3, validating_less{});\r\n\r\n    (void) set_difference(varr, varr, varr, varr, varr3);\r\n    (void) set_difference(varr, varr, varr3);\r\n    (void) set_difference(iarr, iarr, iarr, iarr, iarr3, validating_less{});\r\n    (void) set_difference(iarr, iarr, iarr3, validating_less{});\r\n\r\n    (void) set_symmetric_difference(varr, varr, varr, varr, varr3);\r\n    (void) set_symmetric_difference(varr, varr, varr3);\r\n    (void) set_symmetric_difference(iarr, iarr, iarr, iarr, iarr3, validating_less{});\r\n    (void) set_symmetric_difference(iarr, iarr, iarr3, validating_less{});\r\n\r\n    (void) push_heap(varr3, varr3 + 1);\r\n    (void) push_heap(varr3);\r\n    (void) push_heap(iarr3, iarr3 + 1, validating_less{});\r\n    (void) push_heap(iarr3, {}, validating_identity{});\r\n\r\n    (void) pop_heap(varr3, varr3 + 1);\r\n    (void) pop_heap(varr3);\r\n    (void) pop_heap(iarr3, iarr3 + 1, validating_less{});\r\n    (void) pop_heap(iarr3, {}, validating_identity{});\r\n\r\n    (void) make_heap(varr3, varr3 + 1);\r\n    (void) make_heap(varr3);\r\n    (void) make_heap(iarr3, iarr3 + 1, validating_less{});\r\n    (void) make_heap(iarr3, {}, validating_identity{});\r\n\r\n    (void) sort_heap(varr3, varr3 + 1);\r\n    (void) sort_heap(varr3);\r\n    (void) sort_heap(iarr3, iarr3 + 1, validating_less{});\r\n    (void) sort_heap(iarr3, {}, validating_identity{});\r\n\r\n    (void) is_heap(varr3, varr3 + 1);\r\n    (void) is_heap(varr3);\r\n    (void) is_heap(iarr3, iarr3 + 1, validating_less{});\r\n    (void) is_heap(iarr3, {}, validating_identity{});\r\n\r\n    (void) is_heap_until(varr3, varr3 + 1);\r\n    (void) is_heap_until(varr3);\r\n    (void) is_heap_until(iarr3, iarr3 + 1, validating_less{});\r\n    (void) is_heap_until(iarr3, {}, validating_identity{});\r\n\r\n    (void) min(+varr, +varr);\r\n    (void) min({+varr, +varr});\r\n    (void) min(varr);\r\n    (void) min(+iarr, +iarr, validating_less{});\r\n    (void) min({+iarr, +iarr}, {}, validating_identity{});\r\n    (void) min(iarr, validating_less{});\r\n\r\n    (void) max(+varr, +varr);\r\n    (void) max({+varr, +varr});\r\n    (void) max(varr);\r\n    (void) max(+iarr, +iarr, validating_less{});\r\n    (void) max({+iarr, +iarr}, {}, validating_identity{});\r\n    (void) max(iarr, validating_less{});\r\n\r\n    (void) minmax(+varr, +varr);\r\n    (void) minmax({+varr, +varr});\r\n    (void) minmax(varr);\r\n    (void) minmax(+iarr, +iarr, validating_less{});\r\n    (void) minmax({+iarr, +iarr}, {}, validating_identity{});\r\n    (void) minmax(iarr, validating_less{});\r\n\r\n    (void) min_element(varr, varr + 1);\r\n    (void) min_element(varr);\r\n    (void) min_element(iarr, iarr + 1, validating_less{});\r\n    (void) min_element(iarr, {}, validating_identity{});\r\n\r\n    (void) max_element(varr, varr + 1);\r\n    (void) max_element(varr);\r\n    (void) max_element(iarr, iarr + 1, validating_less{});\r\n    (void) max_element(iarr, {}, validating_identity{});\r\n\r\n    (void) minmax_element(varr, varr + 1);\r\n    (void) minmax_element(varr);\r\n    (void) minmax_element(iarr, iarr + 1, validating_less{});\r\n    (void) minmax_element(iarr, {}, validating_identity{});\r\n\r\n    (void) clamp(+varr, +varr, +varr);\r\n    (void) clamp(+iarr, +iarr, +iarr, validating_less{});\r\n\r\n    (void) lexicographical_compare(varr, varr, varr, varr);\r\n    (void) lexicographical_compare(varr, varr);\r\n    (void) lexicographical_compare(iarr, iarr, iarr, iarr, validating_less{});\r\n    (void) lexicographical_compare(iarr, iarr, validating_less{});\r\n\r\n    (void) next_permutation(varr, varr);\r\n    (void) next_permutation(varr);\r\n    (void) next_permutation(iarr, iarr, validating_less{});\r\n    (void) next_permutation(iarr, {}, validating_identity{});\r\n\r\n    (void) prev_permutation(varr, varr);\r\n    (void) prev_permutation(varr);\r\n    (void) prev_permutation(iarr, iarr, validating_less{});\r\n    (void) prev_permutation(iarr, {}, validating_identity{});\r\n}\r\n\r\n// Separated test for ranges::count and equality\r\nstatic_assert(std::equality_comparable<validator>);\r\nstatic_assert(std::indirectly_comparable<validator*, validator*, std::equal_to<>>);\r\nstatic_assert(std::sortable<validator*>);\r\n\r\nconstexpr bool test_ranges_count() {\r\n    using namespace std::ranges;\r\n\r\n    validator a[10]{};\r\n    assert(count(a, a + 10, nullptr) == 10);\r\n    assert(count(a, nullptr) == 10);\r\n    return true;\r\n}\r\nstatic_assert(test_ranges_count());\r\n#endif // ^^^ no workaround ^^^\r\n"
  },
  {
    "path": "tests/std/tests/P2609R3_relaxing_ranges_just_a_smidge/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2609R3_relaxing_ranges_just_a_smidge/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <memory>\r\n#include <ranges>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nvoid test() {\r\n    auto ints                  = views::iota(0, 5);\r\n    auto project_to_unique_ptr = []<movable T>(T v) { return make_unique<T>(move(v)); };\r\n\r\n    using It          = ranges::iterator_t<decltype(ints)>;\r\n    using Proj        = decltype(project_to_unique_ptr);\r\n    using ProjectedIt = projected<It, Proj>;\r\n\r\n    { // Check indirectly_unary_invocable\r\n        auto consume = [](auto) {};\r\n        static_assert(indirectly_unary_invocable<decltype(consume), ProjectedIt>);\r\n\r\n        ranges::for_each(ints, consume, project_to_unique_ptr);\r\n        ranges::for_each(ints.begin(), ints.end(), consume, project_to_unique_ptr);\r\n    }\r\n\r\n    { // Check indirectly_regular_unary_invocable\r\n        static_assert(indirectly_regular_unary_invocable<decltype([](auto) {}), ProjectedIt>);\r\n        using Check [[maybe_unused]] = projected<ProjectedIt, Proj>;\r\n    }\r\n\r\n    { // Check indirect_unary_predicate\r\n        auto unary_pred = [](auto) { return false; };\r\n        static_assert(indirect_unary_predicate<decltype(unary_pred), ProjectedIt>);\r\n\r\n        (void) ranges::find_if(ints, unary_pred, project_to_unique_ptr);\r\n        (void) ranges::find_if(ints.begin(), ints.end(), unary_pred, project_to_unique_ptr);\r\n        (void) ranges::count_if(ints, unary_pred, project_to_unique_ptr);\r\n        (void) ranges::count_if(ints.begin(), ints.end(), unary_pred, project_to_unique_ptr);\r\n    }\r\n\r\n    { // Check indirect_binary_predicate\r\n        auto binary_pred = [](auto, auto) { return false; };\r\n        static_assert(indirect_binary_predicate<decltype(binary_pred), ProjectedIt, ProjectedIt>);\r\n\r\n        (void) ranges::adjacent_find(ints, binary_pred, project_to_unique_ptr);\r\n        (void) ranges::adjacent_find(ints.begin(), ints.end(), binary_pred, project_to_unique_ptr);\r\n    }\r\n\r\n    { // Check indirect_equivalence_relation\r\n        auto rel = [](auto, auto) { return false; };\r\n        static_assert(indirect_equivalence_relation<decltype(rel), ProjectedIt>);\r\n\r\n        vector<int> out;\r\n        (void) ranges::unique_copy(ints, back_inserter(out), rel, project_to_unique_ptr);\r\n        (void) ranges::unique_copy(ints.begin(), ints.end(), back_inserter(out), rel, project_to_unique_ptr);\r\n    }\r\n\r\n    { // Check indirect_strict_weak_order\r\n        auto rel = [](auto x, auto y) { return x < y; };\r\n        static_assert(indirect_strict_weak_order<decltype(rel), ProjectedIt>);\r\n\r\n        (void) ranges::is_sorted_until(ints, rel, project_to_unique_ptr);\r\n        (void) ranges::is_sorted_until(ints.begin(), ints.end(), rel, project_to_unique_ptr);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2674R1_is_implicit_lifetime/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2674R1_is_implicit_lifetime/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstddef>\r\n#include <string>\r\n#include <type_traits>\r\nusing namespace std;\r\n\r\nenum UnscopedEnum { Enumerator };\r\nenum class ScopedEnum { Enumerator2 };\r\nclass IncompleteClass;\r\nstruct TrivialClass {};\r\nstruct DefaultedDestructorClass {\r\n    ~DefaultedDestructorClass() = default;\r\n};\r\nstruct DeletedDestructorClass {\r\n    ~DeletedDestructorClass() = delete;\r\n};\r\nstruct UserProvidedDestructorClass {\r\n    ~UserProvidedDestructorClass() {}\r\n};\r\nstruct StringAggregateWithImplicitlyDeclaredDestructor {\r\n    string juliette_andromeda_meow;\r\n    string clarissa_melpomene_meow;\r\n};\r\nstruct StringAggregateWithUserProvidedDestructor {\r\n    string chaos_engine_one;\r\n    string chaos_engine_two;\r\n    ~StringAggregateWithUserProvidedDestructor() {}\r\n};\r\n\r\nclass NonAggregateWithTrivialCtorAndTrivialDtor {\r\npublic:\r\n    NonAggregateWithTrivialCtorAndTrivialDtor()  = default;\r\n    ~NonAggregateWithTrivialCtorAndTrivialDtor() = default;\r\n\r\n    NonAggregateWithTrivialCtorAndTrivialDtor(const NonAggregateWithTrivialCtorAndTrivialDtor&)            = delete;\r\n    NonAggregateWithTrivialCtorAndTrivialDtor& operator=(const NonAggregateWithTrivialCtorAndTrivialDtor&) = delete;\r\n\r\n    void set_num(int x) {\r\n        num = x;\r\n    }\r\n    int get_num() const {\r\n        return num;\r\n    }\r\n\r\nprivate:\r\n    int num;\r\n};\r\n\r\nclass NonAggregateWithNonTrivialCtor {\r\npublic:\r\n    NonAggregateWithNonTrivialCtor()  = default;\r\n    ~NonAggregateWithNonTrivialCtor() = default;\r\n\r\n    NonAggregateWithNonTrivialCtor(const NonAggregateWithNonTrivialCtor&)            = delete;\r\n    NonAggregateWithNonTrivialCtor& operator=(const NonAggregateWithNonTrivialCtor&) = delete;\r\n\r\n    void set_num(int x) {\r\n        num = x;\r\n    }\r\n    int get_num() const {\r\n        return num;\r\n    }\r\n\r\nprivate:\r\n    int num{0}; // default member initializer => non-trivial default constructor, N5014 [class.default.ctor]/3.2\r\n};\r\n\r\nclass NonAggregateWithUserProvidedCtor {\r\npublic:\r\n    NonAggregateWithUserProvidedCtor() {}\r\n    ~NonAggregateWithUserProvidedCtor() = default;\r\n\r\n    NonAggregateWithUserProvidedCtor(const NonAggregateWithUserProvidedCtor&)            = delete;\r\n    NonAggregateWithUserProvidedCtor& operator=(const NonAggregateWithUserProvidedCtor&) = delete;\r\n\r\n    void set_num(int x) {\r\n        num = x;\r\n    }\r\n    int get_num() const {\r\n        return num;\r\n    }\r\n\r\nprivate:\r\n    int num;\r\n};\r\n\r\nclass NonAggregateWithDeletedDtor {\r\npublic:\r\n    NonAggregateWithDeletedDtor()  = default;\r\n    ~NonAggregateWithDeletedDtor() = delete;\r\n\r\n    NonAggregateWithDeletedDtor(const NonAggregateWithDeletedDtor&)            = delete;\r\n    NonAggregateWithDeletedDtor& operator=(const NonAggregateWithDeletedDtor&) = delete;\r\n\r\n    void set_num(int x) {\r\n        num = x;\r\n    }\r\n    int get_num() const {\r\n        return num;\r\n    }\r\n\r\nprivate:\r\n    int num;\r\n};\r\n\r\nclass NonAggregateWithUserProvidedDtor {\r\npublic:\r\n    NonAggregateWithUserProvidedDtor() = default;\r\n    ~NonAggregateWithUserProvidedDtor() {}\r\n\r\n    NonAggregateWithUserProvidedDtor(const NonAggregateWithUserProvidedDtor&)            = delete;\r\n    NonAggregateWithUserProvidedDtor& operator=(const NonAggregateWithUserProvidedDtor&) = delete;\r\n\r\n    void set_num(int x) {\r\n        num = x;\r\n    }\r\n    int get_num() const {\r\n        return num;\r\n    }\r\n\r\nprivate:\r\n    int num;\r\n};\r\n\r\n#ifdef __cpp_lib_is_implicit_lifetime\r\ntemplate <bool Val, typename T>\r\nconstexpr bool test_implicit_lifetime = is_implicit_lifetime_v<T> == Val && is_implicit_lifetime<T>::value == Val;\r\ntemplate <bool Val, typename T>\r\nconstexpr bool test_implicit_lifetime_cv = test_implicit_lifetime<Val, T> //\r\n                                        && test_implicit_lifetime<Val, const T> //\r\n                                        && test_implicit_lifetime<Val, volatile T> //\r\n                                        && test_implicit_lifetime<Val, const volatile T>;\r\n\r\n// Scalar types, N5014 [basic.types.general]/9\r\nstatic_assert(test_implicit_lifetime_cv<true, int>);\r\nstatic_assert(test_implicit_lifetime_cv<true, UnscopedEnum>);\r\nstatic_assert(test_implicit_lifetime_cv<true, ScopedEnum>);\r\nstatic_assert(test_implicit_lifetime_cv<true, void*>);\r\nstatic_assert(test_implicit_lifetime_cv<true, int*>);\r\nstatic_assert(test_implicit_lifetime_cv<true, void (*)()>);\r\nstatic_assert(test_implicit_lifetime_cv<true, int TrivialClass::*>);\r\nstatic_assert(test_implicit_lifetime_cv<true, int (TrivialClass::*)(int)>);\r\nstatic_assert(test_implicit_lifetime_cv<true, nullptr_t>);\r\n\r\n// Implicit-lifetime class types, N5014 [class.prop]/16:\r\n// \"A class S is an implicit-lifetime class if\r\n// - it is an aggregate whose destructor is not user-provided or\r\n// - it has at least one trivial eligible constructor and a trivial, non-deleted destructor.\"\r\nstatic_assert(test_implicit_lifetime_cv<true, TrivialClass>);\r\nstatic_assert(test_implicit_lifetime_cv<true, DefaultedDestructorClass>);\r\nstatic_assert(test_implicit_lifetime_cv<true, DeletedDestructorClass>);\r\nstatic_assert(test_implicit_lifetime_cv<false, UserProvidedDestructorClass>);\r\nstatic_assert(test_implicit_lifetime_cv<true, StringAggregateWithImplicitlyDeclaredDestructor>);\r\nstatic_assert(test_implicit_lifetime_cv<false, StringAggregateWithUserProvidedDestructor>);\r\nstatic_assert(test_implicit_lifetime_cv<true, NonAggregateWithTrivialCtorAndTrivialDtor>);\r\n#ifndef __clang__ // TRANSITION, LLVM-160610\r\nstatic_assert(test_implicit_lifetime_cv<false, NonAggregateWithNonTrivialCtor>);\r\nstatic_assert(test_implicit_lifetime_cv<false, NonAggregateWithUserProvidedCtor>);\r\n#endif // ^^^ no workaround ^^^\r\nstatic_assert(test_implicit_lifetime_cv<false, NonAggregateWithDeletedDtor>);\r\nstatic_assert(test_implicit_lifetime_cv<false, NonAggregateWithUserProvidedDtor>);\r\n\r\n// Arrays\r\nstatic_assert(test_implicit_lifetime_cv<true, int[]>);\r\nstatic_assert(test_implicit_lifetime_cv<true, int[2]>);\r\nstatic_assert(test_implicit_lifetime_cv<true, TrivialClass[]>);\r\nstatic_assert(test_implicit_lifetime_cv<true, TrivialClass[10]>);\r\nstatic_assert(test_implicit_lifetime_cv<true, UserProvidedDestructorClass[]>);\r\nstatic_assert(test_implicit_lifetime_cv<true, UserProvidedDestructorClass[12]>);\r\nstatic_assert(test_implicit_lifetime_cv<true, IncompleteClass[]>);\r\nstatic_assert(test_implicit_lifetime_cv<true, IncompleteClass[20]>);\r\n\r\nstatic_assert(test_implicit_lifetime_cv<false, void>);\r\nstatic_assert(test_implicit_lifetime<false, long&>);\r\nstatic_assert(test_implicit_lifetime<false, long&&>);\r\nstatic_assert(test_implicit_lifetime<false, const long&>);\r\nstatic_assert(test_implicit_lifetime<false, const long&&>);\r\n#endif // ^^^ defined(__cpp_lib_is_implicit_lifetime) ^^^\r\n"
  },
  {
    "path": "tests/std/tests/P2693R1_ostream_and_thread_id/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2693R1_ostream_and_thread_id/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <functional>\r\n#include <ios>\r\n#include <locale>\r\n#include <sstream>\r\n#include <string>\r\n#include <thread>\r\n\r\nusing namespace std;\r\n\r\n// copied from the 'test_format_support.hpp' header\r\ntemplate <class CharT>\r\nstruct choose_literal; // not defined\r\n\r\ntemplate <>\r\nstruct choose_literal<char> {\r\n    static constexpr const char* choose(const char* s, const wchar_t*) {\r\n        return s;\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct choose_literal<wchar_t> {\r\n    static constexpr const wchar_t* choose(const char*, const wchar_t* s) {\r\n        return s;\r\n    }\r\n};\r\n\r\n#define STR(Literal) (choose_literal<CharT>::choose(Literal, L##Literal))\r\n\r\ntemplate <class CharT>\r\nvoid check_fmtflags_and_locale(thread::id id) {\r\n    // changing fmtflags other than fill or align should not affect text representation of thread::id\r\n    auto make_text_rep = [id](ios_base::fmtflags flags = {}, ios_base::fmtflags mask = {}) {\r\n        basic_ostringstream<CharT> ss;\r\n        ss.setf(flags, mask);\r\n        ss << id;\r\n        return ss.str();\r\n    };\r\n\r\n    // changing locale should not affect text representation of thread::id\r\n    auto make_localized_text_rep = [id](const char* name) {\r\n        basic_ostringstream<CharT> ss;\r\n        try {\r\n            ss.imbue(locale{name});\r\n        } catch (...) {\r\n        }\r\n        ss << id;\r\n        return ss.str();\r\n    };\r\n\r\n    // changing precision should not affect text representation of thread::id\r\n    auto make_text_rep_with_precision = [id](int prec) {\r\n        basic_ostringstream<CharT> ss;\r\n        ss.precision(prec);\r\n        ss << id;\r\n        return ss.str();\r\n    };\r\n\r\n    const array<basic_string<CharT>, 14> reps = {\r\n        make_text_rep(),\r\n        make_text_rep(ios_base::fixed, ios_base::basefield),\r\n        make_text_rep(ios_base::hex | ios_base::uppercase, ios_base::basefield),\r\n        make_text_rep(ios_base::hex, ios_base::basefield),\r\n        make_text_rep(ios_base::oct | ios_base::showbase, ios_base::basefield),\r\n        make_text_rep(ios_base::oct, ios_base::basefield),\r\n        make_text_rep(ios_base::showpos, ios_base::basefield),\r\n        make_localized_text_rep(\"\"),\r\n        make_localized_text_rep(\"de-DE\"),\r\n        make_localized_text_rep(\"en-US\"),\r\n        make_localized_text_rep(\"pl-PL\"),\r\n        make_text_rep_with_precision(1),\r\n        make_text_rep_with_precision(6),\r\n        make_text_rep_with_precision(32),\r\n    };\r\n\r\n    // all text representations should be the same\r\n    assert(adjacent_find(reps.begin(), reps.end(), not_equal_to<>{}) == reps.end());\r\n}\r\n\r\ntemplate <class CharT>\r\nvoid check_fill_and_align() {\r\n    thread::id id;\r\n\r\n    { // Align left\r\n        basic_ostringstream<CharT> ss;\r\n        ss.setf(ios_base::left, ios_base::adjustfield);\r\n        ss.fill('*');\r\n        ss.width(5);\r\n        ss << id;\r\n        assert(ss.str() == STR(\"0****\"));\r\n    }\r\n\r\n    { // Align right\r\n        basic_ostringstream<CharT> ss;\r\n        ss.setf(ios_base::right, ios_base::adjustfield);\r\n        ss.fill(':');\r\n        ss.width(10);\r\n        ss << id;\r\n        assert(ss.str() == STR(\":::::::::0\"));\r\n    }\r\n\r\n    { // Align internal\r\n        basic_ostringstream<CharT> ss;\r\n        ss.setf(ios_base::internal, ios_base::adjustfield);\r\n        ss.fill('_');\r\n        ss.width(3);\r\n        ss << id;\r\n        assert(ss.str() == STR(\"__0\"));\r\n    }\r\n}\r\n\r\ntemplate <class CharT>\r\nvoid test() {\r\n    check_fmtflags_and_locale<CharT>(thread::id{});\r\n    check_fmtflags_and_locale<CharT>(this_thread::get_id());\r\n    check_fill_and_align<CharT>();\r\n}\r\n\r\nint main() {\r\n    test<char>();\r\n    test<wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2693R1_text_formatting_header_stacktrace/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2693R1_text_formatting_header_stacktrace/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// intentionally avoid including <format> to verify that the formatter specializations are defined in <stacktrace>\r\n\r\n#include <concepts>\r\n#include <stacktrace>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nvoid verify_semiregularity_for() {\r\n    static_assert(semiregular<T>);\r\n\r\n    T x;\r\n    T y = x;\r\n    T z = move(x);\r\n    x   = y;\r\n    x   = move(z);\r\n}\r\n\r\nvoid verify_formatters() {\r\n    verify_semiregularity_for<formatter<stacktrace_entry, char>>();\r\n    verify_semiregularity_for<formatter<stacktrace, char>>();\r\n    verify_semiregularity_for<formatter<pmr::stacktrace, char>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2693R1_text_formatting_header_thread/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2693R1_text_formatting_header_thread/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// intentionally avoid including <format> to verify that the formatter specialization is defined in <thread>\r\n\r\n#include <concepts>\r\n#include <thread>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nvoid verify_semiregularity_for() {\r\n    static_assert(semiregular<T>);\r\n\r\n    T x;\r\n    T y = x;\r\n    T z = move(x);\r\n    x   = y;\r\n    x   = move(z);\r\n}\r\n\r\nvoid verify_formatters() {\r\n    verify_semiregularity_for<formatter<thread::id, char>>();\r\n    verify_semiregularity_for<formatter<thread::id, wchar_t>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2693R1_text_formatting_stacktrace/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2693R1_text_formatting_stacktrace/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstdlib>\r\n#include <exception>\r\n#include <iostream>\r\n#include <memory_resource>\r\n#include <ranges>\r\n#include <stacktrace>\r\n#include <string>\r\n#include <type_traits>\r\n\r\n#include <test_format_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <template <class> class Fmt>\r\nvoid check_stacktrace_entry_formatter() {\r\n    Fmt<char> fmt;\r\n    const stacktrace_entry frame = stacktrace::current()[0];\r\n    const auto frame_str         = to_string(frame);\r\n\r\n    // empty format-spec\r\n    assert(fmt(\"{}\", frame) == frame_str);\r\n    assert(fmt(\"{:}\", frame) == frame_str);\r\n    assert(fmt(\"{0:}\", frame) == frame_str);\r\n\r\n    // align only\r\n    assert(fmt(\"{:<}\", frame) == frame_str);\r\n    assert(fmt(\"{:^}\", frame) == frame_str);\r\n    assert(fmt(\"{:>}\", frame) == frame_str);\r\n\r\n    // fill-and-align only\r\n    assert(fmt(\"{::<}\", frame) == frame_str);\r\n    assert(fmt(\"{:*^}\", frame) == frame_str);\r\n    assert(fmt(\"{:=>}\", frame) == frame_str);\r\n\r\n    { // width only\r\n        constexpr int width  = 560;\r\n        const int fill_width = static_cast<int>(width - clamp(frame_str.size(), size_t{0}, size_t{width}));\r\n\r\n        const auto s  = fmt(\"{:560}\", frame);\r\n        const auto it = ranges::mismatch(views::reverse(s), views::repeat(' ', fill_width)).in1;\r\n        assert(it.base() == s.end() - fill_width);\r\n        assert(ranges::equal(ranges::subrange{s.begin(), it.base()}, frame_str));\r\n    }\r\n\r\n    { // width only (replacement field)\r\n        constexpr int width  = 470;\r\n        const int fill_width = static_cast<int>(width - clamp(frame_str.size(), size_t{0}, size_t{width}));\r\n\r\n        const auto s  = fmt(\"{:{}}\", frame, width);\r\n        const auto it = ranges::mismatch(views::reverse(s), views::repeat(' ', fill_width)).in1;\r\n        assert(it.base() == s.end() - fill_width);\r\n        assert(ranges::equal(ranges::subrange{s.begin(), it.base()}, frame_str));\r\n    }\r\n\r\n    { // fill-and-align with width\r\n        constexpr int width  = 400;\r\n        const int fill_width = static_cast<int>(width - clamp(frame_str.size(), size_t{0}, size_t{width}));\r\n\r\n        {\r\n            const auto s  = fmt(\"{:=<400}\", frame);\r\n            const auto it = ranges::mismatch(views::reverse(s), views::repeat('=', fill_width)).in1;\r\n            assert(it.base() == s.end() - fill_width);\r\n            assert(ranges::equal(ranges::subrange{s.begin(), it.base()}, frame_str));\r\n        }\r\n\r\n        {\r\n            const auto s              = fmt(\"{::^400}\", frame);\r\n            const int left_fill_width = fill_width / 2;\r\n            const auto it1            = ranges::mismatch(s, views::repeat(':', left_fill_width)).in1;\r\n            assert(it1 == s.begin() + left_fill_width);\r\n\r\n            const int right_fill_width = fill_width - left_fill_width;\r\n            const auto it2             = ranges::mismatch(views::reverse(s), views::repeat(':', right_fill_width)).in1;\r\n            assert(it2.base() == s.end() - right_fill_width);\r\n\r\n            assert(ranges::equal(ranges::subrange{it1, it2.base()}, frame_str));\r\n        }\r\n\r\n        {\r\n            const auto s  = fmt(\"{:*>400}\", frame);\r\n            const auto it = ranges::mismatch(s, views::repeat('*', fill_width)).in1;\r\n            assert(it == s.begin() + fill_width);\r\n            assert(ranges::equal(ranges::subrange{it, s.end()}, frame_str));\r\n        }\r\n    }\r\n\r\n    { // fill-and-align with width (replacement field)\r\n        constexpr int width  = 390;\r\n        const int fill_width = static_cast<int>(width - clamp(frame_str.size(), size_t{0}, size_t{width}));\r\n\r\n        {\r\n            const auto s  = fmt(\"{:/<{}}\", frame, width);\r\n            const auto it = ranges::mismatch(views::reverse(s), views::repeat('/', fill_width)).in1;\r\n            assert(it.base() == s.end() - fill_width);\r\n            assert(ranges::equal(ranges::subrange{s.begin(), it.base()}, frame_str));\r\n        }\r\n\r\n        {\r\n            const auto s              = fmt(\"{::^{}}\", frame, width);\r\n            const int left_fill_width = fill_width / 2;\r\n            const auto it1            = ranges::mismatch(s, views::repeat(':', left_fill_width)).in1;\r\n            assert(it1 == s.begin() + left_fill_width);\r\n\r\n            const int right_fill_width = fill_width - left_fill_width;\r\n            const auto it2             = ranges::mismatch(views::reverse(s), views::repeat(':', right_fill_width)).in1;\r\n            assert(it2.base() == s.end() - right_fill_width);\r\n\r\n            assert(ranges::equal(ranges::subrange{it1, it2.base()}, frame_str));\r\n        }\r\n\r\n        {\r\n            const auto s  = fmt(\"{0:_>{1}}\", frame, width);\r\n            const auto it = ranges::mismatch(s, views::repeat('_', fill_width)).in1;\r\n            assert(it == s.begin() + fill_width);\r\n            assert(ranges::equal(ranges::subrange{it, s.end()}, frame_str));\r\n        }\r\n    }\r\n}\r\n\r\nvoid check_stacktrace_entry_formatter_with_invalid_fields() {\r\n    ExpectFormatError<char> fmt;\r\n    const stacktrace_entry frame;\r\n\r\n    { // damaged fields\r\n        fmt(\"{\", frame);\r\n        fmt(\"{:\", frame);\r\n        fmt(\"{}}\", frame);\r\n        fmt(\"}\", frame);\r\n    }\r\n\r\n    { // fill-and-align should not contain '{' or '}' characters\r\n        fmt(\"{:{^}\", frame);\r\n        fmt(\"{:{<}\", frame);\r\n    }\r\n\r\n    { // sign, #, 0, precision, L, or type options are not allowed in format-specs\r\n        fmt(\"{:+}\", frame);\r\n        fmt(\"{:#}\", frame);\r\n        fmt(\"{:0}\", frame);\r\n        fmt(\"{:.5}\", frame);\r\n        fmt(\"{:.{}}\", frame, 5);\r\n        fmt(\"{:L}\", frame);\r\n        fmt(\"{:d}\", frame);\r\n    }\r\n\r\n    { // invalid width replacement field\r\n        fmt(\"{0:{0}}\", frame, 5);\r\n        fmt(\"{0:{2}}\", frame, 5);\r\n    }\r\n\r\n    { // mixed invalid format-specs\r\n        fmt(\"{:+#0}\", frame);\r\n        fmt(\"{:=^8.8}\", frame);\r\n        fmt(\"{0:{1}.{1}}\", frame, 5);\r\n        fmt(\"{:Lx}\", frame);\r\n    }\r\n}\r\n\r\ntemplate <template <class> class Fmt>\r\nvoid check_basic_stacktrace_formatter() {\r\n    Fmt<char> fmt;\r\n\r\n    { // Allocator == allocator\r\n        stacktrace empty_trace;\r\n        assert(fmt(\"{}\", empty_trace) == to_string(empty_trace));\r\n\r\n        auto current_trace = stacktrace::current();\r\n        assert(fmt(\"{}\", current_trace) == to_string(current_trace));\r\n    }\r\n\r\n    { // Allocator == pmr::polymorphic_allocator\r\n        pmr::stacktrace empty_trace{pmr::new_delete_resource()};\r\n        assert(fmt(\"{}\", empty_trace) == to_string(empty_trace));\r\n\r\n        pmr::synchronized_pool_resource res;\r\n        auto current_trace = pmr::stacktrace::current(&res);\r\n        assert(fmt(\"{}\", current_trace) == to_string(current_trace));\r\n    }\r\n}\r\n\r\nvoid check_basic_stacktrace_formatter_with_invalid_specs() {\r\n    ExpectFormatError<char> fmt;\r\n    stacktrace trace;\r\n\r\n    { // damaged fields\r\n        fmt(\"{\", trace);\r\n        fmt(\"{:\", trace);\r\n        fmt(\"{}}\", trace);\r\n        fmt(\"}\", trace);\r\n    }\r\n\r\n    { // format-spec should be empty\r\n        fmt(\"{:{^}\", trace);\r\n        fmt(\"{:{<}\", trace);\r\n        fmt(\"{:+}\", trace);\r\n        fmt(\"{:#}\", trace);\r\n        fmt(\"{:0}\", trace);\r\n        fmt(\"{:.5}\", trace);\r\n        fmt(\"{:.{}}\", trace, 8);\r\n        fmt(\"{:L}\", trace);\r\n        fmt(\"{:d}\", trace);\r\n        fmt(\"{:+#0}\", trace);\r\n        fmt(\"{:=^5.5}\", trace);\r\n        fmt(\"{0:{1}.{1}}\", trace, 9);\r\n        fmt(\"{:Lx}\", trace);\r\n    }\r\n}\r\n\r\nint main() {\r\n    try {\r\n        check_stacktrace_entry_formatter<FormatFn>();\r\n        check_stacktrace_entry_formatter<VFormatFn>();\r\n        check_stacktrace_entry_formatter<MoveOnlyFormat>();\r\n        check_stacktrace_entry_formatter_with_invalid_fields();\r\n        check_basic_stacktrace_formatter<FormatFn>();\r\n        check_basic_stacktrace_formatter<VFormatFn>();\r\n        check_basic_stacktrace_formatter<MoveOnlyFormat>();\r\n        check_basic_stacktrace_formatter_with_invalid_specs();\r\n    } catch (const exception& e) {\r\n        cerr << \"Exception caught: \" << e.what() << endl;\r\n        exit(EXIT_FAILURE);\r\n    } catch (...) {\r\n        cerr << \"Unknown exception caught.\" << endl;\r\n        exit(EXIT_FAILURE);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P2693R1_text_formatting_thread_id/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P2693R1_text_formatting_thread_id/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <concepts>\r\n#include <cstddef>\r\n#include <execution>\r\n#include <ios>\r\n#include <locale>\r\n#include <ranges>\r\n#include <sstream>\r\n#include <string>\r\n#include <string_view>\r\n#include <thread>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <variant>\r\n\r\n#include <test_format_support.hpp>\r\n\r\n#define STR(Str) TYPED_LITERAL(CharT, Str)\r\n\r\nusing namespace std;\r\n\r\ntemplate <class CharT, template <class> class Fmt>\r\nvoid check_formatting_of_default_constructed_thread_id() {\r\n    Fmt<CharT> fmt;\r\n    thread::id id;\r\n\r\n    // empty format-spec\r\n    assert(fmt(STR(\"{}\"), id) == STR(\"0\"));\r\n    assert(fmt(STR(\"{:}\"), id) == STR(\"0\"));\r\n    assert(fmt(STR(\"{0:}\"), id) == STR(\"0\"));\r\n\r\n    // align only\r\n    assert(fmt(STR(\"{:<}\"), id) == STR(\"0\"));\r\n    assert(fmt(STR(\"{:^}\"), id) == STR(\"0\"));\r\n    assert(fmt(STR(\"{:>}\"), id) == STR(\"0\"));\r\n\r\n    // fill-and-align only\r\n    assert(fmt(STR(\"{::<}\"), id) == STR(\"0\"));\r\n    assert(fmt(STR(\"{:*^}\"), id) == STR(\"0\"));\r\n    assert(fmt(STR(\"{:=>}\"), id) == STR(\"0\"));\r\n\r\n    // width only\r\n    assert(fmt(STR(\"{:5}\"), id) == STR(\"    0\"));\r\n\r\n    // width only (replacement field)\r\n    assert(fmt(STR(\"{:{}}\"), id, 7) == STR(\"      0\"));\r\n\r\n    // fill-and-align with width\r\n    assert(fmt(STR(\"{:=<5}\"), id) == STR(\"0====\"));\r\n    assert(fmt(STR(\"{::^6}\"), id) == STR(\"::0:::\"));\r\n    assert(fmt(STR(\"{:*>7}\"), id) == STR(\"******0\"));\r\n\r\n    // fill-and-align with width (replacement field)\r\n    assert(fmt(STR(\"{:/<{}}\"), id, 7) == STR(\"0//////\"));\r\n    assert(fmt(STR(\"{::^{}}\"), id, 6) == STR(\"::0:::\"));\r\n    assert(fmt(STR(\"{0:_>{1}}\"), id, 5) == STR(\"____0\"));\r\n}\r\n\r\ntemplate <class CharT, template <class> class Fmt>\r\nvoid check_formatting_of_this_thread_id() {\r\n    Fmt<CharT> fmt;\r\n    const thread::id id = this_thread::get_id();\r\n    const auto id_str   = [id] {\r\n        // '_Get_underlying_id' is MSVC STL specific\r\n        if constexpr (same_as<CharT, wchar_t>) {\r\n            return to_wstring(id._Get_underlying_id());\r\n        } else {\r\n            return to_string(id._Get_underlying_id());\r\n        }\r\n    }();\r\n\r\n    // empty format-spec\r\n    assert(fmt(STR(\"{}\"), id) == id_str);\r\n    assert(fmt(STR(\"{:}\"), id) == id_str);\r\n    assert(fmt(STR(\"{0:}\"), id) == id_str);\r\n\r\n    // fill-and-align only\r\n    assert(fmt(STR(\"{::<}\"), id) == id_str);\r\n    assert(fmt(STR(\"{:*^}\"), id) == id_str);\r\n    assert(fmt(STR(\"{:=>}\"), id) == id_str);\r\n\r\n    { // width only\r\n        constexpr int width  = 13;\r\n        const int fill_width = static_cast<int>(width - id_str.size());\r\n\r\n        const auto s  = fmt(STR(\"{:13}\"), id);\r\n        const auto it = ranges::mismatch(s, views::repeat(STR(' '), fill_width)).in1;\r\n        assert(it == s.begin() + fill_width);\r\n        assert(ranges::equal(ranges::subrange{it, s.end()}, id_str));\r\n    }\r\n\r\n    { // width only (replacement field)\r\n        constexpr int width  = 15;\r\n        const int fill_width = static_cast<int>(width - id_str.size());\r\n\r\n        const auto s  = fmt(STR(\"{:{}}\"), id, width);\r\n        const auto it = ranges::mismatch(s, views::repeat(STR(' '), fill_width)).in1;\r\n        assert(it == s.begin() + fill_width);\r\n        assert(ranges::equal(ranges::subrange{it, s.end()}, id_str));\r\n    }\r\n\r\n    { // fill-and-align with width\r\n        constexpr int width  = 21;\r\n        const int fill_width = static_cast<int>(width - id_str.size());\r\n\r\n        {\r\n            const auto s  = fmt(STR(\"{:=<21}\"), id);\r\n            const auto it = ranges::mismatch(views::reverse(s), views::repeat(STR('='), fill_width)).in1;\r\n            assert(it.base() == s.end() - fill_width);\r\n            assert(ranges::equal(ranges::subrange{s.begin(), it.base()}, id_str));\r\n        }\r\n\r\n        {\r\n            const auto s              = fmt(STR(\"{::^21}\"), id);\r\n            const int left_fill_width = fill_width / 2;\r\n            const auto it1            = ranges::mismatch(s, views::repeat(STR(':'), left_fill_width)).in1;\r\n            assert(it1 == s.begin() + left_fill_width);\r\n\r\n            const int right_fill_width = fill_width - left_fill_width;\r\n            const auto it2 = ranges::mismatch(views::reverse(s), views::repeat(STR(':'), right_fill_width)).in1;\r\n            assert(it2.base() == s.end() - right_fill_width);\r\n\r\n            assert(ranges::equal(ranges::subrange{it1, it2.base()}, id_str));\r\n        }\r\n\r\n        {\r\n            const auto s  = fmt(STR(\"{:*>21}\"), id);\r\n            const auto it = ranges::mismatch(s, views::repeat(STR('*'), fill_width)).in1;\r\n            assert(it == s.begin() + fill_width);\r\n            assert(ranges::equal(ranges::subrange{it, s.end()}, id_str));\r\n        }\r\n    }\r\n\r\n    { // fill-and-align with width (replacement field)\r\n        constexpr int width  = 27;\r\n        const int fill_width = static_cast<int>(width - id_str.size());\r\n\r\n        {\r\n            const auto s  = fmt(STR(\"{:/<{}}\"), id, width);\r\n            const auto it = ranges::mismatch(views::reverse(s), views::repeat(STR('/'), fill_width)).in1;\r\n            assert(it.base() == s.end() - fill_width);\r\n            assert(ranges::equal(ranges::subrange{s.begin(), it.base()}, id_str));\r\n        }\r\n\r\n        {\r\n            const auto s              = fmt(STR(\"{::^{}}\"), id, width);\r\n            const int left_fill_width = fill_width / 2;\r\n            const auto it1            = ranges::mismatch(s, views::repeat(STR(':'), left_fill_width)).in1;\r\n            assert(it1 == s.begin() + left_fill_width);\r\n\r\n            const int right_fill_width = fill_width - left_fill_width;\r\n            const auto it2 = ranges::mismatch(views::reverse(s), views::repeat(STR(':'), right_fill_width)).in1;\r\n            assert(it2.base() == s.end() - right_fill_width);\r\n\r\n            assert(ranges::equal(ranges::subrange{it1, it2.base()}, id_str));\r\n        }\r\n\r\n        {\r\n            const auto s  = fmt(STR(\"{0:_>{1}}\"), id, width);\r\n            const auto it = ranges::mismatch(s, views::repeat(STR('_'), fill_width)).in1;\r\n            assert(it == s.begin() + fill_width);\r\n            assert(ranges::equal(ranges::subrange{it, s.end()}, id_str));\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class CharT, template <class> class FormatFn>\r\nvoid check_format_versus_ostream() {\r\n    FormatFn<CharT> fmt;\r\n    const thread::id id = this_thread::get_id();\r\n\r\n    { // empty format-spec\r\n        basic_ostringstream<CharT> ss;\r\n        ss << id;\r\n        assert(fmt(STR(\"{}\"), id) == ss.view());\r\n    }\r\n\r\n    { // fill-and-align only\r\n        basic_ostringstream<CharT> ss;\r\n        ss.fill('=');\r\n        ss.setf(ss.flags() | ios_base::left, ios_base::adjustfield);\r\n        ss << id;\r\n        assert(fmt(STR(\"{:=<}\"), id) == ss.view());\r\n    }\r\n\r\n    { // width only\r\n        constexpr int w = 20;\r\n        basic_ostringstream<CharT> ss;\r\n        ss.width(w);\r\n        ss << id;\r\n        assert(fmt(STR(\"{:20}\"), id) == ss.view());\r\n        assert(fmt(STR(\"{:{}}\"), id, w) == ss.view());\r\n    }\r\n\r\n    { // fill-and-align with width\r\n        constexpr int w = 30;\r\n        basic_ostringstream<CharT> ss;\r\n        ss.fill('*');\r\n        ss.setf(ss.flags() | ios_base::left, ios_base::adjustfield);\r\n        ss.width(w);\r\n        ss << id;\r\n        assert(fmt(STR(\"{:*<30}\"), id) == ss.view());\r\n        assert(fmt(STR(\"{:*<{}}\"), id, w) == ss.view());\r\n    }\r\n\r\n    { // check what happens if we change stream's locale, precision, and fmtflags other than fill and alignment\r\n        constexpr int w = 25;\r\n        basic_ostringstream<CharT> ss;\r\n        ss.imbue(locale{\"en-US\"});\r\n        ss.fill('x');\r\n        ss.setf(ss.flags() | ios_base::left | ios_base::hex | ios_base::uppercase | ios_base::showbase,\r\n            ios_base::adjustfield | ios_base::basefield);\r\n        ss.width(w);\r\n        ss.precision(99);\r\n        ss << id;\r\n        assert(fmt(STR(\"{:x<25}\"), id) == ss.view());\r\n        assert(fmt(STR(\"{:x<{}}\"), id, w) == ss.view());\r\n    }\r\n}\r\n\r\ntemplate <class CharT>\r\nvoid check_invalid_specs() {\r\n    ExpectFormatError<CharT> fmt;\r\n    const thread::id id = this_thread::get_id();\r\n\r\n    { // damaged fields\r\n        fmt(STR(\"{\"), id);\r\n        fmt(STR(\"{:\"), id);\r\n        fmt(STR(\"{}}\"), id);\r\n        fmt(STR(\"}\"), id);\r\n    }\r\n\r\n    { // fill-and-align should not contain '{' or '}' characters\r\n        fmt(STR(\"{:{^}\"), id);\r\n        fmt(STR(\"{:{<}\"), id);\r\n    }\r\n\r\n    { // sign, #, 0, precision, L, or type options are not allowed in format-specs\r\n        fmt(STR(\"{:+}\"), id);\r\n        fmt(STR(\"{:#}\"), id);\r\n        fmt(STR(\"{:0}\"), id);\r\n        fmt(STR(\"{:.5}\"), id);\r\n        fmt(STR(\"{:.{}}\"), id, 5);\r\n        fmt(STR(\"{:L}\"), id);\r\n        fmt(STR(\"{:d}\"), id);\r\n    }\r\n\r\n    { // mixed invalid format-specs\r\n        fmt(STR(\"{:+#0}\"), id);\r\n        fmt(STR(\"{:=^5.5}\"), id);\r\n        fmt(STR(\"{0:{1}.{1}}\"), id, 5);\r\n        fmt(STR(\"{:Lx}\"), id);\r\n    }\r\n}\r\n\r\n// Also test GH-4651 \"<format>: Underlying formatters of pair-or-tuple formatter cannot access format args\"\r\n\r\ntemplate <class CharT>\r\nusing default_format_parse_context = conditional_t<is_same_v<CharT, char>, format_parse_context,\r\n    conditional_t<is_same_v<CharT, wchar_t>, wformat_parse_context, void>>;\r\n\r\ntemplate <size_t I>\r\nstruct substitute_arg {};\r\n\r\ntemplate <size_t I, class CharT>\r\nstruct std::formatter<substitute_arg<I>, CharT> {\r\n    template <class ParseContext>\r\n    constexpr auto parse(ParseContext& ctx) {\r\n        auto it = ctx.begin();\r\n        if (it != ctx.end() && *it != '}') {\r\n            throw format_error{\"Expected empty spec\"};\r\n        }\r\n\r\n        ctx.check_arg_id(I);\r\n        return it;\r\n    }\r\n\r\n    template <class FormatContext>\r\n    auto format(substitute_arg<I>, FormatContext& ctx) const {\r\n        auto visitor = [&]<class T>(T val) -> FormatContext::iterator {\r\n            if constexpr (same_as<T, monostate>) {\r\n                return ranges::copy(STR(\"monostate\"sv), ctx.out()).out;\r\n            } else if constexpr (same_as<T, typename basic_format_arg<FormatContext>::handle>) {\r\n                default_format_parse_context<CharT> parse_ctx{STR(\"\")};\r\n                val.format(parse_ctx, ctx);\r\n                return ctx.out();\r\n            } else {\r\n                return format_to(ctx.out(), STR(\"{}\"), val);\r\n            }\r\n        };\r\n\r\n        return visit_format_arg(visitor, ctx.arg(I));\r\n    }\r\n};\r\n\r\ntemplate <class CharT>\r\nvoid check_substitute_arg_with_tuple_formatters() {\r\n    assert(format(STR(\"{0:}\"), tuple{substitute_arg<1>{}, substitute_arg<2>{}}, STR(\"thread::id\"), thread::id{})\r\n           == STR(\"(thread::id, 0)\"));\r\n    assert(format(STR(\"{0:}\"), pair{substitute_arg<1>{}, substitute_arg<2>{}}, STR(\"thread::id\"), thread::id{})\r\n           == STR(\"(thread::id, 0)\"));\r\n}\r\n\r\ntemplate <class CharT>\r\nvoid test() {\r\n    check_formatting_of_default_constructed_thread_id<CharT, FormatFn>();\r\n    check_formatting_of_default_constructed_thread_id<CharT, VFormatFn>();\r\n    check_formatting_of_default_constructed_thread_id<CharT, MoveOnlyFormat>();\r\n\r\n    check_substitute_arg_with_tuple_formatters<CharT>();\r\n\r\n    const array checks = {\r\n        // NB: those functions call 'this_thread::get_id' - let's check various ids\r\n        check_formatting_of_this_thread_id<CharT, FormatFn>,\r\n        check_formatting_of_this_thread_id<CharT, VFormatFn>,\r\n        check_formatting_of_this_thread_id<CharT, MoveOnlyFormat>,\r\n        check_format_versus_ostream<CharT, FormatFn>,\r\n        check_format_versus_ostream<CharT, VFormatFn>,\r\n        check_format_versus_ostream<CharT, MoveOnlyFormat>,\r\n        check_invalid_specs<CharT>,\r\n    };\r\n    for_each(execution::par, checks.begin(), checks.end(), [](auto f) { f(); });\r\n}\r\n\r\nint main() {\r\n    test<char>();\r\n    test<wchar_t>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P3016R6_inconsistent_begin_end/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P3016R6_inconsistent_begin_end/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <initializer_list>\r\n#include <iterator>\r\n#include <type_traits>\r\n#include <valarray>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nnamespace my {\r\n    template <class T>\r\n    void begin(std::initializer_list<T>);\r\n\r\n    template <class T>\r\n    void end(std::initializer_list<T>);\r\n\r\n    template <class T>\r\n    void empty(std::initializer_list<T>);\r\n\r\n    template <class T>\r\n    void data(std::initializer_list<T>);\r\n} // namespace my\r\n\r\n_CONSTEXPR17 bool test_initializer_list() {\r\n    // Check that free functions in std still can be invoked on std::initializer_list\r\n    std::initializer_list<int> il = {1, 2, 3};\r\n\r\n    using namespace std;\r\n    (void) begin(il);\r\n    (void) cbegin(il);\r\n    (void) end(il);\r\n    (void) cend(il);\r\n    (void) size(il);\r\n    (void) empty(il);\r\n    (void) data(il);\r\n\r\n    return true;\r\n}\r\n\r\n// test_valarray() is not constexpr because valarray is not a literal type\r\nbool test_valarray() {\r\n    // Check that free functions in std can be invoked on std::valarray\r\n    std::valarray<int> v{1};\r\n\r\n    using namespace std;\r\n    (void) begin(v);\r\n    (void) cbegin(v); // Did not compile before P3016R6\r\n    (void) end(v);\r\n    (void) cend(v); // Did not compile before P3016R6\r\n    (void) size(v);\r\n    // There are no members 'empty' and 'data' of valarray\r\n\r\n    return true;\r\n}\r\n\r\nconstexpr bool test_braced_init_list_iteration() {\r\n    int sum = 0;\r\n    for (int n : {1, 2, 3, 4}) {\r\n        sum += n;\r\n    }\r\n    return sum == 10;\r\n}\r\n\r\nint main() {\r\n    // Check that free functions in std can't be invoked with braced-initializer-list.\r\n    // If they could be invoked, the following expressions would be ambiguous between std:: and my::\r\n    using namespace std;\r\n    using namespace my;\r\n    STATIC_ASSERT(std::is_same_v<decltype(begin({1, 2, 3})), void>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(end({1, 2, 3})), void>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(empty({1, 2, 3})), void>);\r\n    STATIC_ASSERT(std::is_same_v<decltype(data({1, 2, 3})), void>);\r\n\r\n    test_initializer_list();\r\n    test_valarray();\r\n    test_braced_init_list_iteration();\r\n\r\n#if _HAS_CXX17\r\n    STATIC_ASSERT(test_initializer_list());\r\n#endif // _HAS_CXX17\r\n    STATIC_ASSERT(test_braced_init_list_iteration());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P3107R5_enabled_specializations/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_latest_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P3107R5_enabled_specializations/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <chrono>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <format>\r\n#include <functional>\r\n#include <list>\r\n#include <queue>\r\n#include <ranges>\r\n#include <stack>\r\n#include <stacktrace>\r\n#include <string>\r\n#include <string_view>\r\n#include <thread>\r\n#include <tuple>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nstruct unoptimized {};\r\n\r\ntemplate <class CharT>\r\nstruct std::formatter<unoptimized, CharT> : formatter<string_view, CharT> {\r\n    template <class FormatContext>\r\n    auto format(const unoptimized&, FormatContext& ctx) const {\r\n        return formatter<string_view, CharT>::format(\"unoptimized\", ctx);\r\n    }\r\n};\r\n\r\nstatic_assert(formattable<unoptimized, char>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<unoptimized>);\r\n\r\ntemplate <class T>\r\nstruct myalloc {\r\n    using value_type = T;\r\n\r\n    template <class U>\r\n    myalloc(const myalloc<U>&);\r\n\r\n    T* allocate(size_t);\r\n    void deallocate(T*, size_t) noexcept;\r\n\r\n    template <class U>\r\n    bool operator==(const myalloc<U>&) const;\r\n};\r\n\r\n// <chrono> ====================================================================\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::seconds>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<chrono::duration<unoptimized>>);\r\n\r\n// Other than `duration` itself, other <chrono> types that depend on `duration` should be unconditionally\r\n// enabled since they decompose `duration`s rather than formatting them directly.\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::sys_time<chrono::seconds>>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::sys_time<chrono::duration<unoptimized>>>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::utc_time<chrono::seconds>>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::utc_time<chrono::duration<unoptimized>>>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::tai_time<chrono::seconds>>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::tai_time<chrono::duration<unoptimized>>>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::gps_time<chrono::seconds>>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::gps_time<chrono::duration<unoptimized>>>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::file_time<chrono::seconds>>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::file_time<chrono::duration<unoptimized>>>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::local_time<chrono::seconds>>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::local_time<chrono::duration<unoptimized>>>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<decltype(chrono::local_time_format(chrono::local_seconds{}))>);\r\n\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::day>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::month>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::year>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::weekday>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::weekday_indexed>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::weekday_last>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::month_day>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::month_day_last>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::month_weekday>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::month_weekday_last>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::year_month>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::year_month_day>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::year_month_day_last>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::year_month_weekday>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::year_month_weekday_last>);\r\n\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::hh_mm_ss<chrono::seconds>>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::hh_mm_ss<chrono::duration<unoptimized>>>);\r\n\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::sys_info>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::local_info>);\r\n\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::zoned_time<chrono::seconds>>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<chrono::zoned_time<chrono::duration<unoptimized>>>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<chrono::zoned_time<chrono::seconds, long long>>);\r\n\r\n// <format> ====================================================================\r\nstatic_assert(enable_nonlocking_formatter_optimization<char>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<wchar_t>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<char*>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<wchar_t*>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<const char*>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<const wchar_t*>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<char[42]>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<wchar_t[42]>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<string>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<wstring>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<basic_string<char, char_traits<char>, myalloc<char>>>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<basic_string<wchar_t, char_traits<wchar_t>, myalloc<wchar_t>>>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<string_view>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<wstring_view>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<bool>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<signed char>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<unsigned char>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<short>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<unsigned short>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<int>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<unsigned int>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<long>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<unsigned long>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<long long>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<unsigned long long>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<float>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<double>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<long double>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<nullptr_t>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<void*>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<const void*>);\r\n\r\n// Extended to test LWG-4399 \"enable_nonlocking_formatter_optimization for pair and tuple needs remove_cvref_t\"\r\ntemplate <template <class, class> class PairOrTuple, class T, class U, bool Expected>\r\nconstexpr void test_lwg_4399_impl() {\r\n    static_assert(enable_nonlocking_formatter_optimization<PairOrTuple<T, U>> == Expected);\r\n    static_assert(enable_nonlocking_formatter_optimization<PairOrTuple<T&, U>> == Expected);\r\n    static_assert(enable_nonlocking_formatter_optimization<PairOrTuple<T, U&>> == Expected);\r\n    static_assert(enable_nonlocking_formatter_optimization<PairOrTuple<const T, U>> == Expected);\r\n    static_assert(enable_nonlocking_formatter_optimization<PairOrTuple<T, const U>> == Expected);\r\n    static_assert(enable_nonlocking_formatter_optimization<PairOrTuple<const T&, U>> == Expected);\r\n    static_assert(enable_nonlocking_formatter_optimization<PairOrTuple<T, const U&>> == Expected);\r\n}\r\n\r\ntemplate <class T, class U, bool Expected>\r\nconstexpr bool test_lwg_4399() {\r\n    test_lwg_4399_impl<pair, T, U, Expected>();\r\n    test_lwg_4399_impl<tuple, T, U, Expected>();\r\n    return true;\r\n}\r\n\r\nstatic_assert(test_lwg_4399<int, int, true>());\r\nstatic_assert(test_lwg_4399<unoptimized, int, false>());\r\nstatic_assert(test_lwg_4399<int, unoptimized, false>());\r\n\r\n// Validate that various ranges are unoptimized\r\nstatic_assert(!enable_nonlocking_formatter_optimization<list<int>>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<list<int, myalloc<int>>>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<list<unoptimized>>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<list<unoptimized, myalloc<unoptimized>>>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<vector<bool>>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<vector<bool, myalloc<bool>>>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<vector<int>>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<vector<int, myalloc<int>>>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<vector<unoptimized>>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<vector<unoptimized, myalloc<unoptimized>>>);\r\nusing R = decltype(vector<int>{} | views::take(3));\r\nstatic_assert(!enable_nonlocking_formatter_optimization<R>);\r\n\r\n// <queue> =====================================================================\r\nstatic_assert(!enable_nonlocking_formatter_optimization<queue<int>>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<queue<int, list<int>>>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<priority_queue<int>>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<priority_queue<int, deque<int>>>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<priority_queue<int, vector<int>, greater<int>>>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<priority_queue<int, deque<int>, greater<>>>);\r\n\r\n// <stack> =====================================================================\r\nstatic_assert(!enable_nonlocking_formatter_optimization<stack<int>>);\r\nstatic_assert(!enable_nonlocking_formatter_optimization<stack<int, vector<int>>>);\r\n\r\n// <stacktrace> ================================================================\r\nstatic_assert(enable_nonlocking_formatter_optimization<stacktrace_entry>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<stacktrace>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<basic_stacktrace<myalloc<stacktrace_entry>>>);\r\n\r\n// <thread> ====================================================================\r\nstatic_assert(enable_nonlocking_formatter_optimization<thread::id>);\r\n\r\n// <vector> ====================================================================\r\nstatic_assert(enable_nonlocking_formatter_optimization<vector<bool>::reference>);\r\nstatic_assert(enable_nonlocking_formatter_optimization<vector<bool, myalloc<bool>>::reference>);\r\n"
  },
  {
    "path": "tests/std/tests/P3349R1_contiguous_iterators_to_pointers/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"\"\r\n*\tPM_CL=\"/D_USE_STD_VECTOR_ALGORITHMS=0\"\r\n"
  },
  {
    "path": "tests/std/tests/P3349R1_contiguous_iterators_to_pointers/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <format>\r\n#include <functional>\r\n#include <iterator>\r\n#include <memory>\r\n#include <numeric>\r\n#include <ranges>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nstruct safe_iter_out_of_bounds_err {};\r\n\r\nenum class range_type { range_large = 5, range_medium = 4, range_small = 3 };\r\n\r\nbool safe_iter_nothrow_OOB_sign = false;\r\n\r\ntemplate <class T>\r\nconstexpr T* unwrap(T* ptr) noexcept {\r\n    return ptr;\r\n}\r\n\r\ntemplate <class T, bool Nothrow>\r\nclass safe_iter {\r\npublic:\r\n    using iterator_concept  = contiguous_iterator_tag;\r\n    using iterator_category = random_access_iterator_tag;\r\n    using value_type        = T;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = T*;\r\n    using reference         = T&;\r\n\r\n    constexpr safe_iter(pointer ptr, pointer range_first, pointer range_last) noexcept\r\n        : current_ptr{ptr}, range_first_ptr{range_first}, range_last_ptr{range_last} {\r\n        assert(current_ptr >= range_first_ptr);\r\n        assert(current_ptr <= range_last_ptr);\r\n    }\r\n    constexpr safe_iter() noexcept = default;\r\n\r\n    constexpr reference operator*() const noexcept(Nothrow) {\r\n        if (current_ptr < range_first_ptr || current_ptr >= range_last_ptr) {\r\n            if constexpr (Nothrow) {\r\n                safe_iter_nothrow_OOB_sign = true;\r\n            } else {\r\n                throw safe_iter_out_of_bounds_err{};\r\n            }\r\n        }\r\n        return *current_ptr;\r\n    }\r\n    constexpr pointer operator->() const noexcept { // must always be noexcept, see N5014 [pointer.conversion]/3\r\n        if constexpr (Nothrow) {\r\n            if (current_ptr < range_first_ptr || current_ptr > range_last_ptr) {\r\n                safe_iter_nothrow_OOB_sign = true;\r\n            }\r\n        }\r\n        return current_ptr;\r\n    }\r\n    constexpr reference operator[](difference_type n) const noexcept(Nothrow) {\r\n        return *(*this + n);\r\n    }\r\n\r\n    // When `Nothrow` is true, disables bounds checking during iterator increment/decrement\r\n    // (to verify `to_address` calls), logging out-of-bounds accesses instead of throwing.\r\n    // When `Nothrow` is false, throws immediately on bounds violation.\r\n    constexpr safe_iter& operator+=(difference_type offset) noexcept(Nothrow) {\r\n        current_ptr += offset;\r\n        if constexpr (!Nothrow) {\r\n            if (current_ptr < range_first_ptr || current_ptr > range_last_ptr) {\r\n                throw safe_iter_out_of_bounds_err{};\r\n            }\r\n        }\r\n        return *this;\r\n    }\r\n    constexpr safe_iter operator+(difference_type offset) const noexcept(Nothrow) {\r\n        auto tmp = *this;\r\n        tmp += offset;\r\n        return tmp;\r\n    }\r\n    friend constexpr safe_iter operator+(difference_type offset, const safe_iter& right) noexcept(Nothrow) {\r\n        return right + offset;\r\n    }\r\n    constexpr safe_iter& operator-=(difference_type offset) noexcept(Nothrow) {\r\n        return *this += -offset;\r\n    }\r\n    constexpr safe_iter operator-(difference_type offset) const noexcept(Nothrow) {\r\n        return *this + (-offset);\r\n    }\r\n    constexpr difference_type operator-(const safe_iter& right) const noexcept {\r\n        return current_ptr - right.current_ptr;\r\n    }\r\n\r\n    constexpr safe_iter& operator++() noexcept(Nothrow) {\r\n        return *this += 1;\r\n    }\r\n    constexpr safe_iter& operator--() noexcept(Nothrow) {\r\n        return *this -= 1;\r\n    }\r\n    constexpr safe_iter operator++(int) noexcept(Nothrow) {\r\n        auto temp = *this;\r\n        ++*this;\r\n        return temp;\r\n    }\r\n    constexpr safe_iter operator--(int) noexcept(Nothrow) {\r\n        auto temp = *this;\r\n        --*this;\r\n        return temp;\r\n    }\r\n\r\n    constexpr bool operator==(const safe_iter& right) const noexcept {\r\n        return current_ptr == right.current_ptr;\r\n    }\r\n    constexpr auto operator<=>(const safe_iter& right) const noexcept {\r\n        return current_ptr <=> right.current_ptr;\r\n    }\r\n\r\n    constexpr difference_type operator-(pointer right) const noexcept {\r\n        return current_ptr - right;\r\n    }\r\n    friend constexpr difference_type operator-(pointer left, const safe_iter& right) noexcept {\r\n        return left - right.current_ptr;\r\n    }\r\n    constexpr bool operator==(pointer right) const noexcept {\r\n        return current_ptr == right;\r\n    }\r\n\r\n    static constexpr safe_iter begin(ranges::contiguous_range auto&& rng) noexcept {\r\n        return {to_address(ranges::begin(rng)), to_address(ranges::begin(rng)), to_address(ranges::end(rng))};\r\n    }\r\n    static constexpr safe_iter end(ranges::contiguous_range auto&& rng) noexcept {\r\n        return {to_address(ranges::end(rng)), to_address(ranges::begin(rng)), to_address(ranges::end(rng))};\r\n    }\r\n\r\n    static constexpr pair<safe_iter, safe_iter> get_iters(ranges::contiguous_range auto&& rng, range_type type) {\r\n        const auto n = static_cast<underlying_type_t<range_type>>(type);\r\n        assert(n > 2);\r\n\r\n        // Avoid real out-of-bounds access (UB)\r\n\r\n        const auto range_dist = ranges::distance(rng);\r\n        const auto first_ptr  = to_address(ranges::begin(rng) + range_dist / n);\r\n        const auto last_ptr   = to_address(ranges::begin(rng) + range_dist * (n - 1) / n);\r\n\r\n        return {safe_iter{first_ptr, first_ptr, last_ptr}, safe_iter{last_ptr, first_ptr, last_ptr}};\r\n    }\r\n\r\n    friend constexpr pointer unwrap(const safe_iter& iter) noexcept {\r\n        return iter.current_ptr;\r\n    }\r\n\r\nprivate:\r\n    pointer current_ptr     = nullptr;\r\n    pointer range_first_ptr = nullptr;\r\n    pointer range_last_ptr  = nullptr;\r\n};\r\n\r\ntemplate <bool Nothrow, class Func>\r\nvoid single_test_pass(Func&& func) noexcept {\r\n    func();\r\n    if constexpr (Nothrow) {\r\n        assert(!safe_iter_nothrow_OOB_sign);\r\n    }\r\n}\r\ntemplate <bool Nothrow, class Func>\r\nvoid single_test_fail(Func&& func) noexcept {\r\n    if constexpr (Nothrow) {\r\n        func();\r\n        assert(exchange(safe_iter_nothrow_OOB_sign, false));\r\n    } else {\r\n        try {\r\n            func();\r\n            assert(false && \"should throw, but returned\");\r\n        } catch (const safe_iter_out_of_bounds_err&) {\r\n        }\r\n    }\r\n}\r\n\r\n#define PASS(expr) single_test_pass<Nothrow>([&]() { (void) (expr); })\r\n#define FAIL(expr) single_test_fail<Nothrow>([&]() { (void) (expr); })\r\n\r\n#define EXPR_WRAP_IS(expr)       ([&](auto&& i, auto&& s) { (void) (expr); })\r\n#define EXPR_WRAP_IN(expr)       ([&](auto&& i, auto&& n) { (void) (expr); })\r\n#define EXPR_WRAP_ISD(expr)      ([&](auto&& i, auto&& s, auto&& dst) { (void) (expr); })\r\n#define EXPR_WRAP_IS_DI_DS(expr) ([&](auto&& i, auto&& s, auto&& dst_i, auto&& dst_s) { (void) (expr); })\r\n\r\ntemplate <class T, size_t RangeSize, bool Nothrow>\r\nvoid test() {\r\n    using iter       = safe_iter<T, Nothrow>;\r\n    using const_iter = safe_iter<const T, Nothrow>;\r\n    static_assert(contiguous_iterator<iter>);\r\n    static_assert(contiguous_iterator<const_iter>);\r\n\r\n    // Allow unsafe sentinels\r\n    static_assert(sized_sentinel_for<typename iter::pointer, iter>);\r\n    static_assert(sized_sentinel_for<typename const_iter::pointer, const_iter>);\r\n\r\n    // Allows trivial container reuse for uninitialized memory algorithms\r\n    static_assert(is_trivially_destructible_v<T>);\r\n\r\n    vector<T> container_read(RangeSize);\r\n    iota(container_read.begin(), container_read.end(), static_cast<T>(0));\r\n\r\n    vector<T> container_read_unique(RangeSize);\r\n    iota(container_read_unique.begin(), container_read_unique.end(), static_cast<T>(RangeSize));\r\n    assert(ranges::find_first_of(container_read, container_read_unique) == ranges::end(container_read));\r\n\r\n    auto container_write   = container_read;\r\n    auto container_write_2 = container_read;\r\n\r\n#define GEN_RANGE_ITER(prefix, suffix, type, range, iter_type)                      \\\r\n    [[maybe_unused]] const auto [prefix##_first_##suffix, prefix##_last_##suffix] = \\\r\n        iter_type::get_iters(range, range_type::range_##type);                      \\\r\n    [[maybe_unused]] const auto prefix##_dist_##suffix =                            \\\r\n        ranges::distance(prefix##_first_##suffix, prefix##_last_##suffix);\r\n#define GEN_RANGE_ITERS(prefix, range, iter_type)       \\\r\n    GEN_RANGE_ITER(prefix, s, small, range, iter_type)  \\\r\n    GEN_RANGE_ITER(prefix, m, medium, range, iter_type) \\\r\n    GEN_RANGE_ITER(prefix, l, large, range, iter_type)\r\n\r\n    // Iterators with the same suffix refer to ranges of the same size\r\n    GEN_RANGE_ITERS(r, container_read, const_iter)\r\n    GEN_RANGE_ITERS(r2, container_read_unique, const_iter)\r\n    GEN_RANGE_ITERS(w, container_write, iter)\r\n    GEN_RANGE_ITERS(w2, container_write_2, iter)\r\n\r\n    // l m s  s m l\r\n    // [ ( <  > ) ]\r\n    assert(r_first_l < r_first_m);\r\n    assert(r_first_m < r_first_s);\r\n    assert(r_first_s < r_last_s);\r\n    assert(r_last_s < r_last_m);\r\n    assert(r_last_m < r_last_l);\r\n\r\n#undef GEN_RANGE_ITERS\r\n#undef GEN_RANGE_ITER\r\n\r\n    static constexpr auto tests_base = [](auto&& func, auto&& first, auto&& last_or_dist) {\r\n        PASS(func(first, last_or_dist));\r\n        FAIL(func(first - 1, last_or_dist));\r\n        FAIL(func(first, last_or_dist + 1));\r\n    };\r\n\r\n    // [i, s)\r\n    {\r\n        static constexpr auto tests_i_s = [](auto&& func, auto&& range_func, auto&& first, auto&& last) {\r\n            tests_base(func, first, last);\r\n            tests_base(range_func, first, last);\r\n            tests_base(range_func, first, to_address(last));\r\n        };\r\n\r\n#define EXPR_WRAP_IS_SMART(expr)                     \\\r\n    [&](auto&& i, auto&& s) {                        \\\r\n        if constexpr (requires { (void) (expr); }) { \\\r\n            (void) (expr);                           \\\r\n        } else {                                     \\\r\n            (void) to_address(i);                    \\\r\n            (void) to_address(i + (s - i));          \\\r\n        }                                            \\\r\n    }\r\n#define TESTR(expr) tests_i_s(EXPR_WRAP_IS_SMART(expr), EXPR_WRAP_IS(ranges::expr), r_first_m, r_last_m)\r\n#define TESTW(expr) tests_i_s(EXPR_WRAP_IS_SMART(expr), EXPR_WRAP_IS(ranges::expr), w_first_m, w_last_m)\r\n\r\n        // Tests ranges:: and std:: versions (when they exist)\r\n\r\n        // Ensures full range traversal (worst-case)\r\n        TESTR(adjacent_find(i, s));\r\n        TESTR(count(i, s, container_read_unique[0]));\r\n        TESTR(equal(i, s, unwrap(i), unwrap(s)));\r\n        TESTR(equal(unwrap(i), unwrap(s), i, s));\r\n        TESTR(find(i, s, container_read_unique[0]));\r\n        TESTR(find_end(i, s, unwrap(i), unwrap(s)));\r\n        TESTR(find_end(r_first_l, r_last_l, i, s));\r\n        TESTR(find_first_of(i, s, r2_first_s, r2_last_s));\r\n        TESTR(find_first_of(r2_first_l, r2_last_l, i, s));\r\n        TESTR(includes(i, s, r2_first_s, r2_last_s));\r\n        TESTR(includes(r_first_l, r_last_l, i, s));\r\n        TESTR(is_sorted(i, s));\r\n        TESTR(is_sorted_until(i, s));\r\n        TESTR(lexicographical_compare(i, s, unwrap(i), unwrap(s)));\r\n        TESTR(lexicographical_compare(unwrap(i), unwrap(s), i, s));\r\n        TESTR(max(ranges::subrange{i, s}));\r\n        TESTR(max_element(i, s));\r\n        TESTR(min(ranges::subrange{i, s}));\r\n        TESTR(min_element(i, s));\r\n        TESTR(minmax(ranges::subrange{i, s}));\r\n        TESTR(minmax_element(i, s));\r\n        TESTR(mismatch(i, s, unwrap(i), unwrap(s)));\r\n        TESTR(mismatch(unwrap(i), unwrap(s), i, s));\r\n        TESTR(search(i, s, unwrap(i), unwrap(s)));\r\n        TESTR(search(r_first_l, r_last_l, i, s));\r\n\r\n        TESTW(fill(i, s, container_read[0]));\r\n        TESTW(nth_element(i, i + (s - i) / 2, s));\r\n        TESTW(remove(i, s, container_read[0]));\r\n        TESTW(replace(i, s, container_read[0], container_read[1]));\r\n        TESTW(reverse(i, s));\r\n        TESTW(sort(i, s));\r\n        TESTW(stable_sort(i, s));\r\n        TESTW(uninitialized_fill(i, s, container_read[0]));\r\n        TESTW(unique(i, s));\r\n\r\n#if _HAS_CXX23\r\n        TESTR(contains(i, s, container_read_unique[0]));\r\n        TESTR(contains_subrange(i, s, unwrap(i), unwrap(s)));\r\n        TESTR(contains_subrange(r_first_l, r_last_l, i, s));\r\n        TESTR(ends_with(i, s, unwrap(i), unwrap(s)));\r\n        TESTR(ends_with(unwrap(i), unwrap(s), i, s));\r\n        TESTR(starts_with(i, s, unwrap(i), unwrap(s)));\r\n        TESTR(starts_with(unwrap(i), unwrap(s), i, s));\r\n\r\n        TESTW(iota(i, s, container_read[0]));\r\n        TESTW(shift_left(i, s, (s - i) / 2));\r\n        TESTW(shift_right(i, s, (s - i) / 2));\r\n#endif // _HAS_CXX23\r\n\r\n        // [i, s) -> [dst, ...) / [..., dst)\r\n        {\r\n            static constexpr auto tests_i_s_dst = [](auto&& func, auto&& range_func, auto&& dst_small, auto&& dst_big,\r\n                                                      auto&& src_first, auto&& src_last) {\r\n                tests_i_s(\r\n                    EXPR_WRAP_IS(func(i, s, dst_big)), EXPR_WRAP_IS(range_func(i, s, dst_big)), src_first, src_last);\r\n                FAIL(func(src_first, src_last, dst_small));\r\n                FAIL(range_func(src_first, src_last, dst_small));\r\n                FAIL(range_func(src_first, to_address(src_last), dst_small));\r\n            };\r\n            static constexpr auto tests_i_s_di_ds = [](auto&& func, auto&& range_func, auto&& dst_small_first,\r\n                                                        auto&& dst_small_last, auto&& dst_big_first, auto&& src_first,\r\n                                                        auto&& src_last) {\r\n                tests_i_s_dst(func, EXPR_WRAP_ISD(range_func(i, s, dst, unreachable_sentinel)), dst_small_first,\r\n                    dst_big_first, src_first, src_last);\r\n\r\n                const auto range_func_with_input_range = EXPR_WRAP_IS(range_func(src_first, src_last, i, s));\r\n                const auto range_func_with_input_range_i_s =\r\n                    EXPR_WRAP_IS(range_func(src_first, to_address(src_last), i, s));\r\n\r\n                tests_base(range_func_with_input_range, dst_small_first, dst_small_last);\r\n                tests_base(range_func_with_input_range, dst_small_first, to_address(dst_small_last));\r\n                tests_base(range_func_with_input_range_i_s, dst_small_first, dst_small_last);\r\n                tests_base(range_func_with_input_range_i_s, dst_small_first, to_address(dst_small_last));\r\n            };\r\n\r\n#define TEST2W(expr) \\\r\n    tests_i_s_dst(EXPR_WRAP_ISD(expr), EXPR_WRAP_ISD(ranges::expr), w_first_s, w_first_l, w2_first_m, w2_last_m)\r\n#define TEST2WB(expr) \\\r\n    tests_i_s_dst(EXPR_WRAP_ISD(expr), EXPR_WRAP_ISD(ranges::expr), w_last_s, w_last_l, w2_first_m, w2_last_m)\r\n#define TEST3W(expr, range_expr) \\\r\n    tests_i_s_di_ds(             \\\r\n        EXPR_WRAP_ISD(expr), EXPR_WRAP_IS_DI_DS(range_expr), w_first_s, w_last_s, w_first_l, w2_first_m, w2_last_m)\r\n\r\n            // These algorithms always traverse the entire input range, so we always use the write container.\r\n\r\n            TEST2W(copy(i, s, dst));\r\n            TEST2WB(copy_backward(i, s, dst));\r\n            TEST2W(move(i, s, dst));\r\n            TEST2WB(move_backward(i, s, dst));\r\n            TEST2W(replace_copy(i, s, dst, container_read[0], container_read[1]));\r\n            TEST2W(reverse_copy(i, s, dst));\r\n            TEST2W(rotate_copy(i, i + (s - i) / 2, s, dst));\r\n\r\n            TEST3W(swap_ranges(i, s, dst), ranges::swap_ranges(i, s, dst_i, dst_s));\r\n            TEST3W(uninitialized_copy(i, s, dst), ranges::uninitialized_copy(i, s, dst_i, dst_s));\r\n            TEST3W(uninitialized_move(i, s, dst), ranges::uninitialized_move(i, s, dst_i, dst_s));\r\n\r\n#undef TEST3W\r\n#undef TEST2WB\r\n#undef TEST2W\r\n\r\n            tests_base(EXPR_WRAP_IS(adjacent_difference(i, s, w_first_m, minus<T>{})), r_first_m,\r\n                r_last_m); // no ranges:: version\r\n            FAIL(adjacent_difference(r_first_m, r_last_m, w_first_s, minus<T>{}));\r\n        }\r\n\r\n#undef TESTW\r\n#undef TESTR\r\n#undef EXPR_WRAP_IS_SMART\r\n    }\r\n\r\n    // i + [0, n)\r\n    {\r\n#define TESTR(expr) tests_base(EXPR_WRAP_IN(expr), r_first_m, r_dist_m)\r\n#define TESTW(expr) tests_base(EXPR_WRAP_IN(expr), w_first_s, w_dist_s)\r\n\r\n        TESTR(copy_n(i, n, w_first_l));\r\n        TESTR(ranges::copy_n(i, n, w_first_l));\r\n\r\n        TESTW(fill_n(i, n, container_read[0]));\r\n        TESTW(ranges::fill_n(i, n, container_read[0]));\r\n\r\n        TESTR(uninitialized_copy_n(i, n, w_first_l));\r\n        TESTR(ranges::uninitialized_copy_n(i, n, w_first_l, unreachable_sentinel));\r\n        tests_base(EXPR_WRAP_IS(ranges::uninitialized_copy_n(r_first_m, r_dist_m, i, s)), w_first_s, w_last_s);\r\n\r\n        TESTW(uninitialized_move_n(i, n, w2_first_l));\r\n        TESTW(ranges::uninitialized_move_n(i, n, w2_first_l, unreachable_sentinel));\r\n        tests_base(EXPR_WRAP_IS(ranges::uninitialized_move_n(w_first_s, w_dist_s, i, s)), w2_first_s, w2_last_s);\r\n\r\n        TESTW(uninitialized_fill_n(i, n, container_read[0]));\r\n        TESTW(ranges::uninitialized_fill_n(i, n, container_read[0]));\r\n\r\n#undef TESTW\r\n#undef TESTR\r\n    }\r\n}\r\n\r\ntemplate <bool Nothrow>\r\nvoid test_matrix() {\r\n    // Ensures vectorization (and iterator-to-pointer conversion)\r\n    test<int8_t, 63, Nothrow>();\r\n    test<int16_t, 256, Nothrow>();\r\n    test<int32_t, 256, Nothrow>();\r\n    test<int64_t, 256, Nothrow>();\r\n\r\n    // remove_copy and unique_copy\r\n    {\r\n        using iter       = safe_iter<int, Nothrow>;\r\n        using const_iter = safe_iter<const int, Nothrow>;\r\n\r\n        const array src = {10, 20, 30, 40, 40, 50, 50};\r\n\r\n        const auto src_first    = const_iter::begin(src);\r\n        const auto src_last     = const_iter::end(src);\r\n        const auto src_last_ptr = to_address(src_last);\r\n\r\n        array<int, 5 + 1> dst;\r\n        const iter dst_first{\r\n            to_address(ranges::begin(dst)), to_address(ranges::begin(dst)), to_address(ranges::begin(dst) + 5)};\r\n\r\n        PASS(remove_copy(src_first, src_last, dst_first, 50));\r\n        FAIL(remove_copy(src_first, src_last, dst_first, 10));\r\n        PASS(ranges::remove_copy(src_first, src_last_ptr, dst_first, 50));\r\n        FAIL(ranges::remove_copy(src_first, src_last_ptr, dst_first, 10));\r\n\r\n        PASS(unique_copy(src_first, src_last, dst_first));\r\n        FAIL(unique_copy(src_first, src_last, dst_first + 1));\r\n        PASS(ranges::unique_copy(src_first, src_last_ptr, dst_first));\r\n        FAIL(ranges::unique_copy(src_first, src_last_ptr, dst_first + 1));\r\n    }\r\n\r\n    // search_n\r\n    {\r\n        using const_iter = safe_iter<const int, Nothrow>;\r\n\r\n        const array rng            = {10, 10, 20, 30, 30, 30};\r\n        const auto valid_first_ptr = to_address(rng.begin() + 1);\r\n        const auto valid_last_ptr  = to_address(rng.end() - 1);\r\n\r\n        const const_iter rng_first{valid_first_ptr, valid_first_ptr, valid_last_ptr};\r\n        const const_iter rng_last{valid_last_ptr, valid_first_ptr, valid_last_ptr};\r\n\r\n        PASS(search_n(rng_first, rng_last, 2, 30));\r\n        FAIL(search_n(rng_first, rng_last + 1, 3, 30));\r\n        FAIL(search_n(rng_first - 1, rng_last, 2, 10));\r\n\r\n        PASS(ranges::search_n(rng_first, valid_last_ptr, 2, 30));\r\n        FAIL(ranges::search_n(rng_first, valid_last_ptr + 1, 3, 30));\r\n        FAIL(ranges::search_n(rng_first - 1, valid_last_ptr, 2, 10));\r\n    }\r\n\r\n#if _HAS_CXX23\r\n    // format {:s} and {:?s}\r\n    {\r\n        const vector chars = ranges::to<vector<char>>(R\"(\"Hello, world!\")\");\r\n\r\n        const auto [chars_first, chars_last] =\r\n            safe_iter<const char, Nothrow>::get_iters(chars, range_type::range_medium);\r\n        const auto last_ptr = to_address(chars_last);\r\n\r\n        const ranges::subrange good_range{chars_first, last_ptr};\r\n        const ranges::subrange bad_range{chars_first, last_ptr + 1};\r\n        const ranges::subrange bad_range_2 = [&] {\r\n            if constexpr (Nothrow) {\r\n                return ranges::subrange{chars_first - 1, last_ptr};\r\n            } else {\r\n                return bad_range;\r\n            }\r\n        }();\r\n\r\n        static_assert(ranges::contiguous_range<decltype(good_range)>);\r\n        static_assert(ranges::contiguous_range<decltype(bad_range)>);\r\n        static_assert(ranges::contiguous_range<decltype(bad_range_2)>);\r\n\r\n        PASS(format(\"{:s}\", good_range));\r\n        FAIL(format(\"{:s}\", bad_range));\r\n        FAIL(format(\"{:s}\", bad_range_2));\r\n\r\n        PASS(format(\"{:?s}\", good_range));\r\n        FAIL(format(\"{:?s}\", bad_range));\r\n        FAIL(format(\"{:?s}\", bad_range_2));\r\n    }\r\n#endif // _HAS_CXX23\r\n}\r\n\r\nint main() {\r\n    test_matrix<true>();\r\n    test_matrix<false>();\r\n\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/P3503R3_packaged_task_promise_with_allocator/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/P3503R3_packaged_task_promise_with_allocator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <future>\r\n#include <memory>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nusing namespace std;\r\n\r\nptrdiff_t global_allocation_count   = 0;\r\nptrdiff_t global_deallocation_count = 0;\r\n\r\ntemplate <class T>\r\nstruct global_counting_allocator {\r\n    using value_type = T;\r\n\r\n    global_counting_allocator() = default;\r\n    template <class U>\r\n    constexpr global_counting_allocator(const global_counting_allocator<U>&) noexcept {}\r\n\r\n    T* allocate(size_t n) {\r\n        auto p = allocator<T>{}.allocate(n);\r\n        ++global_allocation_count;\r\n        return p;\r\n    }\r\n\r\n    void deallocate(T* p, size_t n) {\r\n        allocator<T>{}.deallocate(p, n);\r\n        ++global_deallocation_count;\r\n    }\r\n\r\n    template <class U>\r\n    friend constexpr bool operator==(global_counting_allocator, global_counting_allocator<U>) noexcept {\r\n        return true;\r\n    }\r\n#if !_HAS_CXX20\r\n    template <class U>\r\n    friend constexpr bool operator!=(global_counting_allocator, global_counting_allocator<U>) noexcept {\r\n        return false;\r\n    }\r\n#endif // !_HAS_CXX20\r\n};\r\n\r\ntemplate <class T>\r\nvoid test_implicit_conversion(T) noexcept;\r\n\r\ntemplate <class V, class T, class... Args>\r\nconstexpr bool is_copy_list_initializable_impl = false;\r\ntemplate <class T, class... Args>\r\nconstexpr bool\r\n    is_copy_list_initializable_impl<decltype(test_implicit_conversion<T>({declval<Args>()...})), T, Args...> = true;\r\n\r\ntemplate <class T, class... Args>\r\nconstexpr bool is_copy_list_initializable = is_copy_list_initializable_impl<void, T, Args...>;\r\n\r\ntemplate <class R>\r\nstruct large_functor {\r\n    unsigned char dummy_[64]{};\r\n\r\n    template <class... Args>\r\n    R operator()(Args&&...) const {\r\n        return R{};\r\n    }\r\n};\r\ntemplate <class R>\r\nstruct large_functor<R&> {\r\n    unsigned char dummy_[64]{};\r\n\r\n    template <class... Args>\r\n    R& operator()(Args&&...) const {\r\n        static R r{};\r\n        return r;\r\n    }\r\n};\r\ntemplate <>\r\nstruct large_functor<void> {\r\n    unsigned char dummy_[64]{};\r\n\r\n    template <class... Args>\r\n    void operator()(Args&&...) const {}\r\n};\r\n\r\nSTATIC_ASSERT(is_constructible_v<promise<int>>);\r\nSTATIC_ASSERT(is_constructible_v<promise<int>, const allocator_arg_t&, const allocator<int>&>);\r\nSTATIC_ASSERT(is_constructible_v<promise<int>, const allocator_arg_t&, const global_counting_allocator<int>&>);\r\n\r\nSTATIC_ASSERT(is_copy_list_initializable<promise<int>>);\r\nSTATIC_ASSERT(is_copy_list_initializable<promise<int>, const allocator_arg_t&, const allocator<int>&>);\r\nSTATIC_ASSERT(is_copy_list_initializable<promise<int>, const allocator_arg_t&, const global_counting_allocator<int>&>);\r\n\r\nSTATIC_ASSERT(is_constructible_v<packaged_task<int()>>);\r\nSTATIC_ASSERT(\r\n    is_constructible_v<packaged_task<int()>, const allocator_arg_t&, const allocator<int>&, large_functor<int>>);\r\nSTATIC_ASSERT(is_constructible_v<packaged_task<int()>, const allocator_arg_t&, const global_counting_allocator<int>&,\r\n    large_functor<int>>);\r\n\r\nSTATIC_ASSERT(is_copy_list_initializable<packaged_task<int()>>);\r\nSTATIC_ASSERT(!is_copy_list_initializable<packaged_task<int()>, const allocator_arg_t&, const allocator<int>&,\r\n    large_functor<int>>);\r\nSTATIC_ASSERT(!is_copy_list_initializable<packaged_task<int()>, const allocator_arg_t&,\r\n    const global_counting_allocator<int>&, large_functor<int>>);\r\n\r\nSTATIC_ASSERT(!uses_allocator_v<promise<int>, allocator<int>>);\r\nSTATIC_ASSERT(!uses_allocator_v<promise<int&>, allocator<int>>);\r\nSTATIC_ASSERT(!uses_allocator_v<promise<void>, allocator<int>>);\r\nSTATIC_ASSERT(!uses_allocator_v<promise<int>, global_counting_allocator<int>>);\r\nSTATIC_ASSERT(!uses_allocator_v<promise<int&>, global_counting_allocator<int>>);\r\nSTATIC_ASSERT(!uses_allocator_v<promise<void>, global_counting_allocator<int>>);\r\n\r\nSTATIC_ASSERT(!uses_allocator_v<packaged_task<int()>, allocator<int>>);\r\nSTATIC_ASSERT(!uses_allocator_v<packaged_task<int&()>, allocator<int>>);\r\nSTATIC_ASSERT(!uses_allocator_v<packaged_task<void()>, allocator<int>>);\r\nSTATIC_ASSERT(!uses_allocator_v<packaged_task<int()>, global_counting_allocator<int>>);\r\nSTATIC_ASSERT(!uses_allocator_v<packaged_task<int&()>, global_counting_allocator<int>>);\r\nSTATIC_ASSERT(!uses_allocator_v<packaged_task<void()>, global_counting_allocator<int>>);\r\n\r\ntemplate <class T>\r\nvoid test_construction_promise_in_tuple() {\r\n    {\r\n        tuple<promise<T>> t{allocator_arg, allocator<int>{}};\r\n        (void) t;\r\n    }\r\n    {\r\n        const auto old_alloc_cnt   = global_allocation_count;\r\n        const auto old_dealloc_cnt = global_deallocation_count;\r\n        {\r\n            tuple<promise<T>> t{allocator_arg, global_counting_allocator<int>{}};\r\n            (void) t;\r\n\r\n            assert(global_allocation_count == old_alloc_cnt);\r\n            assert(global_deallocation_count == old_dealloc_cnt);\r\n        }\r\n        assert(global_allocation_count == old_alloc_cnt);\r\n        assert(global_deallocation_count == old_dealloc_cnt);\r\n    }\r\n    {\r\n        tuple<promise<T>> t{allocator_arg, allocator<int>{}, promise<T>{}};\r\n        (void) t;\r\n    }\r\n    {\r\n        const auto old_alloc_cnt   = global_allocation_count;\r\n        const auto old_dealloc_cnt = global_deallocation_count;\r\n        {\r\n            tuple<promise<T>> t{allocator_arg, global_counting_allocator<int>{}, promise<T>{}};\r\n            (void) t;\r\n\r\n            assert(global_allocation_count == old_alloc_cnt);\r\n            assert(global_deallocation_count == old_dealloc_cnt);\r\n        }\r\n        assert(global_allocation_count == old_alloc_cnt);\r\n        assert(global_deallocation_count == old_dealloc_cnt);\r\n    }\r\n}\r\n\r\ntemplate <class F>\r\nvoid test_construction_packaged_task_in_tuple() {\r\n    {\r\n        tuple<packaged_task<F>> t{allocator_arg, allocator<int>{}};\r\n        (void) t;\r\n    }\r\n    {\r\n        const auto old_alloc_cnt   = global_allocation_count;\r\n        const auto old_dealloc_cnt = global_deallocation_count;\r\n        {\r\n            tuple<packaged_task<F>> t{allocator_arg, global_counting_allocator<int>{}};\r\n            (void) t;\r\n\r\n            assert(global_allocation_count == old_alloc_cnt);\r\n            assert(global_deallocation_count == old_dealloc_cnt);\r\n        }\r\n        assert(global_allocation_count == old_alloc_cnt);\r\n        assert(global_deallocation_count == old_dealloc_cnt);\r\n    }\r\n    {\r\n        tuple<packaged_task<F>> t{allocator_arg, allocator<int>{}, packaged_task<F>{}};\r\n        (void) t;\r\n    }\r\n    {\r\n        const auto old_alloc_cnt   = global_allocation_count;\r\n        const auto old_dealloc_cnt = global_deallocation_count;\r\n        {\r\n            tuple<packaged_task<F>> t{allocator_arg, global_counting_allocator<int>{}, packaged_task<F>{}};\r\n            (void) t;\r\n\r\n            assert(global_allocation_count == old_alloc_cnt);\r\n            assert(global_deallocation_count == old_dealloc_cnt);\r\n        }\r\n        assert(global_allocation_count == old_alloc_cnt);\r\n        assert(global_deallocation_count == old_dealloc_cnt);\r\n    }\r\n}\r\n\r\nstruct alloc_dealloc_count_result {\r\n    ptrdiff_t alloc_count;\r\n    ptrdiff_t dealloc_count;\r\n};\r\n\r\ntemplate <class F, class F2>\r\nvoid test_construction_packaged_task_reset(F2&& functor) {\r\n    assert(global_allocation_count == global_deallocation_count);\r\n\r\n    const auto old_cnts = [&functor]() -> alloc_dealloc_count_result {\r\n        packaged_task<F> pt{allocator_arg, global_counting_allocator<int>{}, forward<F2>(functor)};\r\n\r\n        const auto alloc_cnt1   = global_allocation_count;\r\n        const auto dealloc_cnt1 = global_deallocation_count;\r\n\r\n        pt.reset();\r\n\r\n        const auto alloc_cnt2   = global_allocation_count;\r\n        const auto dealloc_cnt2 = global_deallocation_count;\r\n\r\n#ifdef _CPPRTTI // TRANSITION, ABI, correct behavior should not rely on RTTI\r\n        assert(alloc_cnt2 > alloc_cnt1);\r\n#else // ^^^ defined(_CPPRTTI) / !defined(_CPPRTTI) vvv\r\n        assert(alloc_cnt2 == alloc_cnt1);\r\n#endif // ^^^ !defined(_CPPRTTI) ^^^\r\n        assert(dealloc_cnt2 > dealloc_cnt1);\r\n\r\n        return {alloc_cnt2, dealloc_cnt2};\r\n    }();\r\n\r\n    assert(global_allocation_count == old_cnts.alloc_count);\r\n    assert(global_deallocation_count > old_cnts.dealloc_count);\r\n    assert(global_allocation_count == global_deallocation_count);\r\n}\r\n\r\nint main() {\r\n    test_construction_promise_in_tuple<int>();\r\n    test_construction_promise_in_tuple<int&>();\r\n    test_construction_promise_in_tuple<void>();\r\n\r\n    test_construction_packaged_task_in_tuple<int()>();\r\n    test_construction_packaged_task_in_tuple<int&()>();\r\n    test_construction_packaged_task_in_tuple<void()>();\r\n\r\n    test_construction_packaged_task_reset<int()>(large_functor<int>{});\r\n    test_construction_packaged_task_reset<int&()>(large_functor<int&>{});\r\n    test_construction_packaged_task_reset<void()>(large_functor<void>{});\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_allocator_propagation/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_allocator_propagation/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <crtdbg.h>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <initializer_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <map>\r\n#include <memory>\r\n#include <new>\r\n#include <set>\r\n#include <sstream>\r\n#include <string>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Container>\r\n_CONSTEXPR20 void assert_equal(const Container& cont, initializer_list<typename Container::value_type> il) {\r\n    assert(equal(cont.begin(), cont.end(), il.begin(), il.end()));\r\n}\r\n\r\ntemplate <class Container>\r\n_CONSTEXPR20 void assert_is_permutation(const Container& cont, initializer_list<typename Container::value_type> il) {\r\n    assert(is_permutation(cont.begin(), cont.end(), il.begin(), il.end()));\r\n}\r\n\r\nclass test_leak {\r\nprivate:\r\n    char* res;\r\n\r\npublic:\r\n    test_leak(const test_leak&)            = delete;\r\n    test_leak& operator=(const test_leak&) = delete;\r\n\r\n    _CONSTEXPR20 test_leak() noexcept /* terminates */ : res(allocator<char>{}.allocate(1)) {}\r\n    _CONSTEXPR20 ~test_leak() {\r\n        allocator<char>{}.deallocate(res, 1);\r\n    }\r\n};\r\n\r\ntemplate <class T>\r\nclass nontrivial_pointer : private test_leak {\r\npublic:\r\n    T* ptr;\r\n    _CONSTEXPR20 nontrivial_pointer() noexcept : ptr(nullptr) {}\r\n    _CONSTEXPR20 explicit nontrivial_pointer(T* ptr_) noexcept : ptr(ptr_) {}\r\n    _CONSTEXPR20 /*implicit*/ nontrivial_pointer(nullptr_t) noexcept : ptr(nullptr) {}\r\n\r\n    _CONSTEXPR20 nontrivial_pointer(const nontrivial_pointer& other) noexcept : ptr(other.ptr) {}\r\n    template <class U, enable_if_t<is_convertible_v<U*, T*>, int> = 0>\r\n    _CONSTEXPR20 nontrivial_pointer(const nontrivial_pointer<U>& other) noexcept : ptr(other.ptr) {}\r\n    _CONSTEXPR20 nontrivial_pointer& operator=(const nontrivial_pointer& other) noexcept {\r\n        ptr = other.ptr;\r\n        return *this;\r\n    }\r\n\r\n    _CONSTEXPR20 ~nontrivial_pointer() = default;\r\n\r\n    _CONSTEXPR20 explicit operator bool() const noexcept {\r\n        return ptr != nullptr;\r\n    }\r\n    _CONSTEXPR20 add_lvalue_reference_t<T> operator*() const noexcept {\r\n        return *ptr;\r\n    }\r\n    _CONSTEXPR20 T* operator->() const noexcept {\r\n        return ptr;\r\n    }\r\n    template <class I, enable_if_t<is_integral_v<I>, int> = 0>\r\n    _CONSTEXPR20 add_lvalue_reference_t<T> operator[](I off) const noexcept {\r\n        return ptr[off];\r\n    }\r\n\r\n    _CONSTEXPR20 nontrivial_pointer& operator++() noexcept {\r\n        ++ptr;\r\n        return *this;\r\n    }\r\n    _CONSTEXPR20 nontrivial_pointer operator++(int) noexcept {\r\n        return nontrivial_pointer(ptr++);\r\n    }\r\n    _CONSTEXPR20 nontrivial_pointer& operator--() noexcept {\r\n        --ptr;\r\n        return *this;\r\n    }\r\n    _CONSTEXPR20 nontrivial_pointer operator--(int) noexcept {\r\n        return nontrivial_pointer(ptr--);\r\n    }\r\n    template <class I, enable_if_t<is_integral_v<I>, int> = 0>\r\n    _CONSTEXPR20 nontrivial_pointer& operator+=(I diff) noexcept {\r\n        ptr += diff;\r\n        return *this;\r\n    }\r\n    template <class I, enable_if_t<is_integral_v<I>, int> = 0>\r\n    _CONSTEXPR20 nontrivial_pointer& operator-=(I diff) noexcept {\r\n        ptr -= diff;\r\n        return *this;\r\n    }\r\n\r\n    template <class I, enable_if_t<is_integral_v<I>, int> = 0>\r\n    friend _CONSTEXPR20 nontrivial_pointer operator+(nontrivial_pointer ptr, I diff) noexcept {\r\n        return ptr += diff;\r\n    }\r\n    template <class I, enable_if_t<is_integral_v<I>, int> = 0>\r\n    friend _CONSTEXPR20 nontrivial_pointer operator+(I diff, nontrivial_pointer ptr) noexcept {\r\n        return ptr += diff;\r\n    }\r\n    friend _CONSTEXPR20 ptrdiff_t operator-(nontrivial_pointer lhs, nontrivial_pointer rhs) noexcept {\r\n        return lhs.ptr - rhs.ptr;\r\n    }\r\n    template <class I, enable_if_t<is_integral_v<I>, int> = 0>\r\n    friend _CONSTEXPR20 nontrivial_pointer operator-(nontrivial_pointer ptr, I diff) noexcept {\r\n        return ptr -= diff;\r\n    }\r\n\r\n    friend _CONSTEXPR20 bool operator==(nontrivial_pointer lhs, nontrivial_pointer rhs) noexcept {\r\n        return lhs.ptr == rhs.ptr;\r\n    }\r\n    friend _CONSTEXPR20 bool operator==(nontrivial_pointer ptr, nullptr_t) noexcept {\r\n        return !ptr;\r\n    }\r\n    friend _CONSTEXPR20 bool operator==(nullptr_t, nontrivial_pointer ptr) noexcept {\r\n        return !ptr;\r\n    }\r\n    friend _CONSTEXPR20 bool operator!=(nontrivial_pointer lhs, nontrivial_pointer rhs) noexcept {\r\n        return lhs.ptr != rhs.ptr;\r\n    }\r\n    friend _CONSTEXPR20 bool operator!=(nontrivial_pointer ptr, nullptr_t) noexcept {\r\n        return static_cast<bool>(ptr);\r\n    }\r\n    friend _CONSTEXPR20 bool operator!=(nullptr_t, nontrivial_pointer ptr) noexcept {\r\n        return static_cast<bool>(ptr);\r\n    }\r\n    friend _CONSTEXPR20 bool operator<(nontrivial_pointer lhs, nontrivial_pointer rhs) noexcept {\r\n        return lhs.ptr < rhs.ptr;\r\n    }\r\n    friend _CONSTEXPR20 bool operator<=(nontrivial_pointer lhs, nontrivial_pointer rhs) noexcept {\r\n        return lhs.ptr <= rhs.ptr;\r\n    }\r\n    friend _CONSTEXPR20 bool operator>(nontrivial_pointer lhs, nontrivial_pointer rhs) noexcept {\r\n        return lhs.ptr > rhs.ptr;\r\n    }\r\n    friend _CONSTEXPR20 bool operator>=(nontrivial_pointer lhs, nontrivial_pointer rhs) noexcept {\r\n        return lhs.ptr >= rhs.ptr;\r\n    }\r\n};\r\n\r\ntemplate <class T, bool IsVoid = is_void_v<T>>\r\nstruct impl_pointer_to {\r\n    // no pointer_to for void\r\n};\r\n\r\ntemplate <class T>\r\nstruct impl_pointer_to<T, false> {\r\n    static constexpr nontrivial_pointer<T> pointer_to(T& r) noexcept {\r\n        return nontrivial_pointer<T>(addressof(r));\r\n    }\r\n};\r\n\r\ntemplate <class T>\r\nstruct std::pointer_traits<nontrivial_pointer<T>> : impl_pointer_to<T> {\r\n    using pointer         = nontrivial_pointer<T>;\r\n    using element_type    = T;\r\n    using difference_type = ptrdiff_t;\r\n\r\n    template <class U>\r\n    using rebind = nontrivial_pointer<U>;\r\n};\r\n\r\ntemplate <class T>\r\nstruct std::iterator_traits<nontrivial_pointer<T>> {\r\n    using iterator_category = random_access_iterator_tag;\r\n    using difference_type   = ptrdiff_t;\r\n    using value_type        = remove_const_t<T>;\r\n    using reference         = add_lvalue_reference_t<T>;\r\n    using pointer           = nontrivial_pointer<T>;\r\n};\r\n\r\ntemplate <class T, class POCCA, class POCMA, class POCS, class EQUAL>\r\nclass MyAlloc {\r\nprivate:\r\n    size_t _id;\r\n\r\n    [[nodiscard]] constexpr size_t equal_id() const noexcept {\r\n        return is_always_equal::value ? 10 : _id;\r\n    }\r\n\r\npublic:\r\n    [[nodiscard]] constexpr size_t id() const noexcept {\r\n        return _id;\r\n    }\r\n\r\n    using value_type = T;\r\n    using pointer    = nontrivial_pointer<T>;\r\n\r\n    using propagate_on_container_copy_assignment = POCCA;\r\n    using propagate_on_container_move_assignment = POCMA;\r\n    using propagate_on_container_swap            = POCS;\r\n    using is_always_equal                        = EQUAL;\r\n\r\n    constexpr explicit MyAlloc(const size_t _id_) : _id(_id_) {}\r\n\r\n    template <class U>\r\n    constexpr MyAlloc(const MyAlloc<U, POCCA, POCMA, POCS, EQUAL>& other) noexcept : _id(other.id()) {}\r\n\r\n    template <class U>\r\n    [[nodiscard]] constexpr bool operator==(const MyAlloc<U, POCCA, POCMA, POCS, EQUAL>& other) const noexcept {\r\n        return equal_id() == other.equal_id();\r\n    }\r\n\r\n    template <class U>\r\n    [[nodiscard]] constexpr bool operator!=(const MyAlloc<U, POCCA, POCMA, POCS, EQUAL>& other) const noexcept {\r\n        return equal_id() != other.equal_id();\r\n    }\r\n\r\n    [[nodiscard]] constexpr pointer allocate(const size_t numElements) {\r\n        return pointer(allocator<T>{}.allocate(numElements + equal_id()) + equal_id());\r\n    }\r\n\r\n    constexpr void deallocate(pointer const first, const size_t numElements) noexcept {\r\n        allocator<T>{}.deallocate(_Unfancy(first - equal_id()), numElements + equal_id());\r\n    }\r\n};\r\n\r\ntemplate <class T>\r\nusing StationaryAlloc = MyAlloc<T, false_type, false_type, false_type, false_type>;\r\ntemplate <class T>\r\nusing CopyAlloc = MyAlloc<T, true_type, false_type, false_type, false_type>;\r\ntemplate <class T>\r\nusing CopyEqualAlloc = MyAlloc<T, true_type, false_type, false_type, true_type>;\r\ntemplate <class T>\r\nusing MoveAlloc = MyAlloc<T, false_type, true_type, false_type, false_type>;\r\ntemplate <class T>\r\nusing MoveEqualAlloc = MyAlloc<T, false_type, true_type, false_type, true_type>;\r\ntemplate <class T>\r\nusing SwapAlloc = MyAlloc<T, false_type, false_type, true_type, false_type>;\r\ntemplate <class T>\r\nusing SwapEqualAlloc = MyAlloc<T, false_type, false_type, true_type, true_type>;\r\n\r\n\r\ntemplate <template <class, class> class Sequence>\r\n_CONSTEXPR20 void test_sequence_copy_ctor() {\r\n    Sequence<int, StationaryAlloc<int>> src({10, 20, 30}, StationaryAlloc<int>(11));\r\n    auto src_it = src.begin();\r\n\r\n    Sequence<int, StationaryAlloc<int>> dst(src);\r\n    auto dst_it = dst.begin();\r\n\r\n    *src_it = 40;\r\n    *dst_it = 50;\r\n\r\n    src.push_back(60);\r\n    dst.push_back(70);\r\n\r\n    *prev(src.end()) += 8;\r\n    *prev(dst.end()) += 9;\r\n\r\n    assert_equal(src, {40, 20, 30, 68});\r\n    assert_equal(dst, {50, 20, 30, 79});\r\n\r\n    assert(src.get_allocator().id() == 11);\r\n    assert(dst.get_allocator().id() == 11);\r\n}\r\n\r\ntemplate <template <class, class> class Sequence>\r\n_CONSTEXPR20 void test_sequence_copy_alloc_ctor(const size_t id1, const size_t id2) {\r\n    Sequence<int, StationaryAlloc<int>> src({10, 20, 30}, StationaryAlloc<int>(id1));\r\n    auto src_it = src.begin();\r\n\r\n    Sequence<int, StationaryAlloc<int>> dst(src, StationaryAlloc<int>(id2));\r\n    auto dst_it = dst.begin();\r\n\r\n    *src_it = 40;\r\n    *dst_it = 50;\r\n\r\n    src.push_back(60);\r\n    dst.push_back(70);\r\n\r\n    *prev(src.end()) += 8;\r\n    *prev(dst.end()) += 9;\r\n\r\n    assert_equal(src, {40, 20, 30, 68});\r\n    assert_equal(dst, {50, 20, 30, 79});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id2);\r\n}\r\n\r\ntemplate <template <class, class> class Sequence, class Alloc>\r\n_CONSTEXPR20 void test_sequence_copy_assign(const size_t id1, const size_t id2, const size_t id3) {\r\n    Sequence<int, Alloc> src({10, 20, 30}, Alloc(id1));\r\n    Sequence<int, Alloc> dst({0, 0, 0}, Alloc(id2));\r\n\r\n    auto src_it = src.begin();\r\n    auto dst_it = dst.begin();\r\n\r\n    dst = src;\r\n\r\n    dst_it = dst.begin();\r\n\r\n    *src_it = 40;\r\n    *dst_it = 50;\r\n\r\n    src.push_back(60);\r\n    dst.push_back(70);\r\n\r\n    *prev(src.end()) += 8;\r\n    *prev(dst.end()) += 9;\r\n\r\n    assert_equal(src, {40, 20, 30, 68});\r\n    assert_equal(dst, {50, 20, 30, 79});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id3);\r\n}\r\n\r\ntemplate <template <class, class> class Sequence>\r\n_CONSTEXPR20 void test_sequence_move_ctor() {\r\n    Sequence<int, StationaryAlloc<int>> src({10, 20, 30}, StationaryAlloc<int>(11));\r\n    auto it1 = src.begin();\r\n\r\n    Sequence<int, StationaryAlloc<int>> dst(move(src));\r\n    auto it2 = next(dst.begin());\r\n\r\n    src         = {40, 50, 60};\r\n    auto src_it = src.begin();\r\n\r\n    *it1    = 70;\r\n    *it2    = 80;\r\n    *src_it = 90;\r\n\r\n    src.push_back(100);\r\n    dst.push_back(110);\r\n\r\n    *prev(src.end()) += 8;\r\n    *prev(dst.end()) += 9;\r\n\r\n    assert_equal(src, {90, 50, 60, 108});\r\n    assert_equal(dst, {70, 80, 30, 119});\r\n\r\n    assert(src.get_allocator().id() == 11);\r\n    assert(dst.get_allocator().id() == 11);\r\n}\r\n\r\ntemplate <template <class, class> class Sequence>\r\n_CONSTEXPR20 void test_sequence_move_alloc_ctor(const size_t id1, const size_t id2) {\r\n    Sequence<int, StationaryAlloc<int>> src({10, 20, 30}, StationaryAlloc<int>(id1));\r\n    auto it1 = src.begin();\r\n\r\n    Sequence<int, StationaryAlloc<int>> dst(move(src), StationaryAlloc<int>(id2));\r\n\r\n    if (id1 != id2) {\r\n        it1 = dst.begin();\r\n    }\r\n\r\n    auto it2 = next(dst.begin());\r\n\r\n    src         = {40, 50, 60};\r\n    auto src_it = src.begin();\r\n\r\n    *it1    = 70;\r\n    *it2    = 80;\r\n    *src_it = 90;\r\n\r\n    src.push_back(100);\r\n    dst.push_back(110);\r\n\r\n    *prev(src.end()) += 8;\r\n    *prev(dst.end()) += 9;\r\n\r\n    assert_equal(src, {90, 50, 60, 108});\r\n    assert_equal(dst, {70, 80, 30, 119});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id2);\r\n}\r\n\r\ntemplate <template <class, class> class Sequence, class Alloc>\r\n_CONSTEXPR20 void test_sequence_move_assign(const size_t id1, const size_t id2, const size_t id3) {\r\n    Sequence<int, Alloc> src({10, 20, 30}, Alloc(id1));\r\n    Sequence<int, Alloc> dst({0, 0, 0}, Alloc(id2));\r\n\r\n    auto it1 = src.begin();\r\n    auto it2 = dst.begin();\r\n\r\n    dst = move(src);\r\n\r\n    if (id1 != id3) {\r\n        it1 = dst.begin();\r\n    }\r\n\r\n    it2 = next(dst.begin());\r\n\r\n    src         = {40, 50, 60};\r\n    auto src_it = src.begin();\r\n\r\n    *it1    = 70;\r\n    *it2    = 80;\r\n    *src_it = 90;\r\n\r\n    src.push_back(100);\r\n    dst.push_back(110);\r\n\r\n    *prev(src.end()) += 8;\r\n    *prev(dst.end()) += 9;\r\n\r\n    assert_equal(src, {90, 50, 60, 108});\r\n    assert_equal(dst, {70, 80, 30, 119});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id3);\r\n}\r\n\r\ntemplate <template <class, class> class Sequence, class Alloc>\r\n_CONSTEXPR20 void test_sequence_swap(const size_t id1, const size_t id2) {\r\n    Sequence<int, Alloc> src({10, 20, 30}, Alloc(id1));\r\n    Sequence<int, Alloc> dst({40, 50, 60}, Alloc(id2));\r\n\r\n    auto it1 = src.begin();\r\n    auto it2 = dst.begin();\r\n\r\n    dst.swap(src);\r\n\r\n    *it1 = 70;\r\n    *it2 = 80;\r\n\r\n    src.push_back(100);\r\n    dst.push_back(110);\r\n\r\n    *prev(src.end()) += 8;\r\n    *prev(dst.end()) += 9;\r\n\r\n    assert_equal(src, {80, 50, 60, 108});\r\n    assert_equal(dst, {70, 20, 30, 119});\r\n\r\n    assert(src.get_allocator().id() == id2);\r\n    assert(dst.get_allocator().id() == id1);\r\n}\r\n\r\ntemplate <template <class, class> class Sequence>\r\n_CONSTEXPR20 bool test_sequence() {\r\n    test_sequence_copy_ctor<Sequence>();\r\n\r\n    test_sequence_copy_alloc_ctor<Sequence>(11, 11); // equal allocators\r\n    test_sequence_copy_alloc_ctor<Sequence>(11, 22); // non-equal allocators\r\n\r\n    test_sequence_copy_assign<Sequence, StationaryAlloc<int>>(11, 11, 11); // non-POCCA, equal allocators\r\n    test_sequence_copy_assign<Sequence, StationaryAlloc<int>>(11, 22, 22); // non-POCCA, non-equal allocators\r\n    test_sequence_copy_assign<Sequence, CopyAlloc<int>>(11, 11, 11); // POCCA, equal allocators\r\n    test_sequence_copy_assign<Sequence, CopyAlloc<int>>(11, 22, 11); // POCCA, non-equal allocators\r\n    test_sequence_copy_assign<Sequence, CopyEqualAlloc<int>>(11, 22, 11); // POCCA, always-equal allocators\r\n\r\n    test_sequence_move_ctor<Sequence>();\r\n\r\n    test_sequence_move_alloc_ctor<Sequence>(11, 11); // equal allocators\r\n    test_sequence_move_alloc_ctor<Sequence>(11, 22); // non-equal allocators\r\n\r\n    test_sequence_move_assign<Sequence, StationaryAlloc<int>>(11, 11, 11); // non-POCMA, equal allocators\r\n    test_sequence_move_assign<Sequence, StationaryAlloc<int>>(11, 22, 22); // non-POCMA, non-equal allocators\r\n    test_sequence_move_assign<Sequence, MoveAlloc<int>>(11, 11, 11); // POCMA, equal allocators\r\n    test_sequence_move_assign<Sequence, MoveAlloc<int>>(11, 22, 11); // POCMA, non-equal allocators\r\n    test_sequence_move_assign<Sequence, MoveEqualAlloc<int>>(11, 22, 11); // POCMA, always-equal allocators\r\n\r\n    test_sequence_swap<Sequence, StationaryAlloc<int>>(11, 11); // non-POCS, equal allocators\r\n    // UNDEFINED BEHAVIOR, NOT TESTED - non-POCS, non-equal allocators\r\n    test_sequence_swap<Sequence, SwapAlloc<int>>(11, 11); // POCS, equal allocators\r\n    test_sequence_swap<Sequence, SwapAlloc<int>>(11, 22); // POCS, non-equal allocators\r\n    test_sequence_swap<Sequence, SwapEqualAlloc<int>>(11, 22); // POCS, always-equal allocators\r\n\r\n    return true;\r\n}\r\n\r\n\r\ntemplate <class Alloc>\r\nvoid test_deque_shrink_to_fit_per_alloc() {\r\n    {\r\n        deque<int, Alloc> d(1729, 0, Alloc{42});\r\n        d.resize(0);\r\n        d.shrink_to_fit();\r\n        assert(d.get_allocator().id() == 42);\r\n    }\r\n    {\r\n        deque<int, Alloc> d(1729, 0, Alloc{42});\r\n        d.resize(128);\r\n        d.shrink_to_fit();\r\n        assert(d.get_allocator().id() == 42);\r\n    }\r\n}\r\n\r\nvoid test_deque_shrink_to_fit() { // regression test: MSVC STL's deque::shrink_to_fit used to rely on swap\r\n    test_deque_shrink_to_fit_per_alloc<StationaryAlloc<int>>();\r\n    test_deque_shrink_to_fit_per_alloc<CopyAlloc<int>>();\r\n    test_deque_shrink_to_fit_per_alloc<CopyEqualAlloc<int>>();\r\n    test_deque_shrink_to_fit_per_alloc<MoveAlloc<int>>();\r\n    test_deque_shrink_to_fit_per_alloc<MoveEqualAlloc<int>>();\r\n    test_deque_shrink_to_fit_per_alloc<SwapAlloc<int>>();\r\n    test_deque_shrink_to_fit_per_alloc<SwapEqualAlloc<int>>();\r\n}\r\n\r\n\r\nvoid test_flist_copy_ctor() {\r\n    forward_list<int, StationaryAlloc<int>> src({10, 20, 30}, StationaryAlloc<int>(11));\r\n    auto src_it = src.begin();\r\n\r\n    forward_list<int, StationaryAlloc<int>> dst(src);\r\n    auto dst_it = dst.begin();\r\n\r\n    *src_it = 40;\r\n    *dst_it = 50;\r\n\r\n    src.push_front(60);\r\n    dst.push_front(70);\r\n\r\n    *next(src.before_begin()) += 8;\r\n    *next(dst.before_begin()) += 9;\r\n\r\n    assert_equal(src, {68, 40, 20, 30});\r\n    assert_equal(dst, {79, 50, 20, 30});\r\n\r\n    assert(src.get_allocator().id() == 11);\r\n    assert(dst.get_allocator().id() == 11);\r\n}\r\n\r\nvoid test_flist_copy_alloc_ctor(const size_t id1, const size_t id2) {\r\n    forward_list<int, StationaryAlloc<int>> src({10, 20, 30}, StationaryAlloc<int>(id1));\r\n    auto src_it = src.begin();\r\n\r\n    forward_list<int, StationaryAlloc<int>> dst(src, StationaryAlloc<int>(id2));\r\n    auto dst_it = dst.begin();\r\n\r\n    *src_it = 40;\r\n    *dst_it = 50;\r\n\r\n    src.push_front(60);\r\n    dst.push_front(70);\r\n\r\n    *next(src.before_begin()) += 8;\r\n    *next(dst.before_begin()) += 9;\r\n\r\n    assert_equal(src, {68, 40, 20, 30});\r\n    assert_equal(dst, {79, 50, 20, 30});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id2);\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_flist_copy_assign(const size_t id1, const size_t id2, const size_t id3) {\r\n\r\n    forward_list<int, Alloc> src({10, 20, 30}, Alloc(id1));\r\n    forward_list<int, Alloc> dst({0, 0, 0}, Alloc(id2));\r\n\r\n    auto src_it = src.begin();\r\n    auto dst_it = dst.begin();\r\n\r\n    dst = src;\r\n\r\n    dst_it = dst.begin();\r\n\r\n    *src_it = 40;\r\n    *dst_it = 50;\r\n\r\n    src.push_front(60);\r\n    dst.push_front(70);\r\n\r\n    *next(src.before_begin()) += 8;\r\n    *next(dst.before_begin()) += 9;\r\n\r\n    assert_equal(src, {68, 40, 20, 30});\r\n    assert_equal(dst, {79, 50, 20, 30});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id3);\r\n}\r\n\r\nvoid test_flist_move_ctor() {\r\n    forward_list<int, StationaryAlloc<int>> src({10, 20, 30}, StationaryAlloc<int>(11));\r\n    auto it1 = src.begin();\r\n\r\n    forward_list<int, StationaryAlloc<int>> dst(move(src));\r\n    auto it2 = next(dst.begin());\r\n\r\n    src         = {40, 50, 60};\r\n    auto src_it = src.begin();\r\n\r\n    *it1    = 70;\r\n    *it2    = 80;\r\n    *src_it = 90;\r\n\r\n    src.push_front(100);\r\n    dst.push_front(110);\r\n\r\n    *next(src.before_begin()) += 8;\r\n    *next(dst.before_begin()) += 9;\r\n\r\n    assert_equal(src, {108, 90, 50, 60});\r\n    assert_equal(dst, {119, 70, 80, 30});\r\n\r\n    assert(src.get_allocator().id() == 11);\r\n    assert(dst.get_allocator().id() == 11);\r\n}\r\n\r\nvoid test_flist_move_alloc_ctor(const size_t id1, const size_t id2) {\r\n    forward_list<int, StationaryAlloc<int>> src({10, 20, 30}, StationaryAlloc<int>(id1));\r\n    auto it1 = src.begin();\r\n\r\n    forward_list<int, StationaryAlloc<int>> dst(move(src), StationaryAlloc<int>(id2));\r\n\r\n    if (id1 != id2) {\r\n        it1 = dst.begin();\r\n    }\r\n\r\n    auto it2 = next(dst.begin());\r\n\r\n    src         = {40, 50, 60};\r\n    auto src_it = src.begin();\r\n\r\n    *it1    = 70;\r\n    *it2    = 80;\r\n    *src_it = 90;\r\n\r\n    src.push_front(100);\r\n    dst.push_front(110);\r\n\r\n    *next(src.before_begin()) += 8;\r\n    *next(dst.before_begin()) += 9;\r\n\r\n    assert_equal(src, {108, 90, 50, 60});\r\n    assert_equal(dst, {119, 70, 80, 30});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id2);\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_flist_move_assign(const size_t id1, const size_t id2, const size_t id3) {\r\n\r\n    forward_list<int, Alloc> src({10, 20, 30}, Alloc(id1));\r\n    forward_list<int, Alloc> dst({0, 0, 0}, Alloc(id2));\r\n\r\n    auto it1 = src.begin();\r\n    auto it2 = dst.begin();\r\n\r\n    dst = move(src);\r\n\r\n    if (id1 != id3) {\r\n        it1 = dst.begin();\r\n    }\r\n\r\n    it2 = next(dst.begin());\r\n\r\n    src         = {40, 50, 60};\r\n    auto src_it = src.begin();\r\n\r\n    *it1    = 70;\r\n    *it2    = 80;\r\n    *src_it = 90;\r\n\r\n    src.push_front(100);\r\n    dst.push_front(110);\r\n\r\n    *next(src.before_begin()) += 8;\r\n    *next(dst.before_begin()) += 9;\r\n\r\n    assert_equal(src, {108, 90, 50, 60});\r\n    assert_equal(dst, {119, 70, 80, 30});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id3);\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_flist_swap(const size_t id1, const size_t id2) {\r\n\r\n    forward_list<int, Alloc> src({10, 20, 30}, Alloc(id1));\r\n    forward_list<int, Alloc> dst({40, 50, 60}, Alloc(id2));\r\n\r\n    auto it1 = src.begin();\r\n    auto it2 = dst.begin();\r\n\r\n    dst.swap(src);\r\n\r\n    *it1 = 70;\r\n    *it2 = 80;\r\n\r\n    src.push_front(100);\r\n    dst.push_front(110);\r\n\r\n    *next(src.before_begin()) += 8;\r\n    *next(dst.before_begin()) += 9;\r\n\r\n    assert_equal(src, {108, 80, 50, 60});\r\n    assert_equal(dst, {119, 70, 20, 30});\r\n\r\n    assert(src.get_allocator().id() == id2);\r\n    assert(dst.get_allocator().id() == id1);\r\n}\r\n\r\nvoid test_flist() {\r\n    test_flist_copy_ctor();\r\n\r\n    test_flist_copy_alloc_ctor(11, 11); // equal allocators\r\n    test_flist_copy_alloc_ctor(11, 22); // non-equal allocators\r\n\r\n    test_flist_copy_assign<StationaryAlloc<int>>(11, 11, 11); // non-POCCA, equal allocators\r\n    test_flist_copy_assign<StationaryAlloc<int>>(11, 22, 22); // non-POCCA, non-equal allocators\r\n    test_flist_copy_assign<CopyAlloc<int>>(11, 11, 11); // POCCA, equal allocators\r\n    test_flist_copy_assign<CopyAlloc<int>>(11, 22, 11); // POCCA, non-equal allocators\r\n    test_flist_copy_assign<CopyEqualAlloc<int>>(11, 22, 11); // POCCA, always-equal allocators\r\n\r\n    test_flist_move_ctor();\r\n\r\n    test_flist_move_alloc_ctor(11, 11); // equal allocators\r\n    test_flist_move_alloc_ctor(11, 22); // non-equal allocators\r\n\r\n    test_flist_move_assign<StationaryAlloc<int>>(11, 11, 11); // non-POCMA, equal allocators\r\n    test_flist_move_assign<StationaryAlloc<int>>(11, 22, 22); // non-POCMA, non-equal allocators\r\n    test_flist_move_assign<MoveAlloc<int>>(11, 11, 11); // POCMA, equal allocators\r\n    test_flist_move_assign<MoveAlloc<int>>(11, 22, 11); // POCMA, non-equal allocators\r\n    test_flist_move_assign<MoveEqualAlloc<int>>(11, 22, 11); // POCMA, always-equal allocators\r\n\r\n    test_flist_swap<StationaryAlloc<int>>(11, 11); // non-POCS, equal allocators\r\n    // UNDEFINED BEHAVIOR, NOT TESTED - non-POCS, non-equal allocators\r\n    test_flist_swap<SwapAlloc<int>>(11, 11); // POCS, equal allocators\r\n    test_flist_swap<SwapAlloc<int>>(11, 22); // POCS, non-equal allocators\r\n    test_flist_swap<SwapEqualAlloc<int>>(11, 22); // POCS, always-equal allocators\r\n}\r\n\r\n\r\n// NOTE: Having 4 elements of type char32_t bypasses the Small String Optimization.\r\n\r\n_CONSTEXPR20 void test_string_copy_ctor() {\r\n    basic_string<char32_t, char_traits<char32_t>, StationaryAlloc<char32_t>> src(\r\n        {5, 10, 20, 30}, StationaryAlloc<char32_t>(11));\r\n    auto src_it = src.begin();\r\n\r\n    basic_string<char32_t, char_traits<char32_t>, StationaryAlloc<char32_t>> dst(src);\r\n    auto dst_it = dst.begin();\r\n\r\n    *src_it = 40;\r\n    *dst_it = 50;\r\n\r\n    src.push_back(60);\r\n    dst.push_back(70);\r\n\r\n    *prev(src.end()) += 8;\r\n    *prev(dst.end()) += 9;\r\n\r\n    assert_equal(src, {40, 10, 20, 30, 68});\r\n    assert_equal(dst, {50, 10, 20, 30, 79});\r\n\r\n    assert(src.get_allocator().id() == 11);\r\n    assert(dst.get_allocator().id() == 11);\r\n}\r\n\r\n_CONSTEXPR20 void test_string_copy_alloc_ctor(const size_t id1, const size_t id2) {\r\n    basic_string<char32_t, char_traits<char32_t>, StationaryAlloc<char32_t>> src(\r\n        {5, 10, 20, 30}, StationaryAlloc<char32_t>(id1));\r\n    auto src_it = src.begin();\r\n\r\n    basic_string<char32_t, char_traits<char32_t>, StationaryAlloc<char32_t>> dst(src, StationaryAlloc<char32_t>(id2));\r\n    auto dst_it = dst.begin();\r\n\r\n    *src_it = 40;\r\n    *dst_it = 50;\r\n\r\n    src.push_back(60);\r\n    dst.push_back(70);\r\n\r\n    *prev(src.end()) += 8;\r\n    *prev(dst.end()) += 9;\r\n\r\n    assert_equal(src, {40, 10, 20, 30, 68});\r\n    assert_equal(dst, {50, 10, 20, 30, 79});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id2);\r\n}\r\n\r\ntemplate <class Alloc>\r\n_CONSTEXPR20 void test_string_copy_assign(const size_t id1, const size_t id2, const size_t id3) {\r\n\r\n    basic_string<char32_t, char_traits<char32_t>, Alloc> src({5, 10, 20, 30}, Alloc(id1));\r\n    basic_string<char32_t, char_traits<char32_t>, Alloc> dst({0, 0, 0, 0}, Alloc(id2));\r\n\r\n    auto src_it = src.begin();\r\n    auto dst_it = dst.begin();\r\n\r\n    dst = src;\r\n\r\n    dst_it = dst.begin();\r\n\r\n    *src_it = 40;\r\n    *dst_it = 50;\r\n\r\n    src.push_back(60);\r\n    dst.push_back(70);\r\n\r\n    *prev(src.end()) += 8;\r\n    *prev(dst.end()) += 9;\r\n\r\n    assert_equal(src, {40, 10, 20, 30, 68});\r\n    assert_equal(dst, {50, 10, 20, 30, 79});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id3);\r\n}\r\n\r\n_CONSTEXPR20 void test_string_copy_assign_pocca_sso() {\r\n    // GH-3862 fixed a bug where the POCCA codepath in basic_string's copy assignment operator mishandled\r\n    // the scenario where the string on the right hand side has a large capacity but a small size - so while\r\n    // the RHS has dynamically allocated memory, the LHS should activate the Small String Optimization.\r\n\r\n    using Al  = CopyAlloc<char>;\r\n    using Str = basic_string<char, char_traits<char>, Al>;\r\n\r\n    Str left{Al{11}};\r\n    Str right{Al{22}};\r\n\r\n    left.assign(5, 'a');\r\n\r\n    right.assign(1729, 'x');\r\n    right.assign(7, 'y');\r\n\r\n    assert(left == \"aaaaa\");\r\n    assert(right == \"yyyyyyy\");\r\n\r\n    left = right;\r\n\r\n    assert(left == \"yyyyyyy\");\r\n    assert(right == \"yyyyyyy\");\r\n}\r\n\r\n_CONSTEXPR20 void test_string_move_ctor() {\r\n    basic_string<char32_t, char_traits<char32_t>, StationaryAlloc<char32_t>> src(\r\n        {5, 10, 20, 30}, StationaryAlloc<char32_t>(11));\r\n    auto it1 = src.begin();\r\n\r\n    basic_string<char32_t, char_traits<char32_t>, StationaryAlloc<char32_t>> dst(move(src));\r\n    it1      = dst.begin(); // basic_string doesn't preserve iterators here\r\n    auto it2 = next(dst.begin());\r\n\r\n    src         = {6, 40, 50, 60};\r\n    auto src_it = src.begin();\r\n\r\n    *it1    = 70;\r\n    *it2    = 80;\r\n    *src_it = 90;\r\n\r\n    src.push_back(100);\r\n    dst.push_back(110);\r\n\r\n    *prev(src.end()) += 8;\r\n    *prev(dst.end()) += 9;\r\n\r\n    assert_equal(src, {90, 40, 50, 60, 108});\r\n    assert_equal(dst, {70, 80, 20, 30, 119});\r\n\r\n    assert(src.get_allocator().id() == 11);\r\n    assert(dst.get_allocator().id() == 11);\r\n}\r\n\r\n_CONSTEXPR20 void test_string_move_alloc_ctor(const size_t id1, const size_t id2) {\r\n    basic_string<char32_t, char_traits<char32_t>, StationaryAlloc<char32_t>> src(\r\n        {5, 10, 20, 30}, StationaryAlloc<char32_t>(id1));\r\n    auto it1 = src.begin();\r\n\r\n    basic_string<char32_t, char_traits<char32_t>, StationaryAlloc<char32_t>> dst(\r\n        move(src), StationaryAlloc<char32_t>(id2));\r\n    it1      = dst.begin(); // basic_string doesn't preserve iterators here\r\n    auto it2 = next(dst.begin());\r\n\r\n    src         = {6, 40, 50, 60};\r\n    auto src_it = src.begin();\r\n\r\n    *it1    = 70;\r\n    *it2    = 80;\r\n    *src_it = 90;\r\n\r\n    src.push_back(100);\r\n    dst.push_back(110);\r\n\r\n    *prev(src.end()) += 8;\r\n    *prev(dst.end()) += 9;\r\n\r\n    assert_equal(src, {90, 40, 50, 60, 108});\r\n    assert_equal(dst, {70, 80, 20, 30, 119});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id2);\r\n}\r\n\r\ntemplate <class Alloc>\r\n_CONSTEXPR20 void test_string_move_assign(const size_t id1, const size_t id2, const size_t id3) {\r\n\r\n    basic_string<char32_t, char_traits<char32_t>, Alloc> src({5, 10, 20, 30}, Alloc(id1));\r\n    basic_string<char32_t, char_traits<char32_t>, Alloc> dst({0, 0, 0, 0}, Alloc(id2));\r\n\r\n    auto it1 = src.begin();\r\n    auto it2 = dst.begin();\r\n\r\n    dst = move(src);\r\n\r\n    it1 = dst.begin(); // basic_string doesn't preserve iterators here\r\n    it2 = next(dst.begin());\r\n\r\n    src         = {6, 40, 50, 60};\r\n    auto src_it = src.begin();\r\n\r\n    *it1    = 70;\r\n    *it2    = 80;\r\n    *src_it = 90;\r\n\r\n    src.push_back(100);\r\n    dst.push_back(110);\r\n\r\n    *prev(src.end()) += 8;\r\n    *prev(dst.end()) += 9;\r\n\r\n    assert_equal(src, {90, 40, 50, 60, 108});\r\n    assert_equal(dst, {70, 80, 20, 30, 119});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id3);\r\n}\r\n\r\ntemplate <class Alloc>\r\n_CONSTEXPR20 void test_string_swap(const size_t id1, const size_t id2) {\r\n\r\n    basic_string<char32_t, char_traits<char32_t>, Alloc> src({5, 10, 20, 30}, Alloc(id1));\r\n    basic_string<char32_t, char_traits<char32_t>, Alloc> dst({6, 40, 50, 60}, Alloc(id2));\r\n\r\n    auto it1 = src.begin();\r\n    auto it2 = dst.begin();\r\n\r\n    dst.swap(src);\r\n\r\n    it1 = dst.begin(); // basic_string doesn't preserve iterators here\r\n    it2 = src.begin(); // basic_string doesn't preserve iterators here\r\n\r\n    *it1 = 70;\r\n    *it2 = 80;\r\n\r\n    src.push_back(100);\r\n    dst.push_back(110);\r\n\r\n    *prev(src.end()) += 8;\r\n    *prev(dst.end()) += 9;\r\n\r\n    assert_equal(src, {80, 40, 50, 60, 108});\r\n    assert_equal(dst, {70, 10, 20, 30, 119});\r\n\r\n    assert(src.get_allocator().id() == id2);\r\n    assert(dst.get_allocator().id() == id1);\r\n}\r\n\r\n#if _HAS_CXX20\r\nvoid test_string_move_to_stringbuf() {\r\n    // GH-4047 fixed a bug where basic_string forgets to destroy the pointer before switching to small\r\n    // mode. This will turn problematic if the pointer is non-trivial.\r\n    assert(!_CrtDumpMemoryLeaks());\r\n    {\r\n        using Alloc = StationaryAlloc<char>;\r\n        basic_string<char, char_traits<char>, Alloc> str(50, '0', Alloc(10));\r\n        basic_stringbuf<char, char_traits<char>, Alloc> strbuf(move(str));\r\n    }\r\n    assert(!_CrtDumpMemoryLeaks());\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n_CONSTEXPR20 bool test_string() {\r\n    test_string_copy_ctor();\r\n\r\n    test_string_copy_alloc_ctor(11, 11); // equal allocators\r\n    test_string_copy_alloc_ctor(11, 22); // non-equal allocators\r\n\r\n    test_string_copy_assign<StationaryAlloc<char32_t>>(11, 11, 11); // non-POCCA, equal allocators\r\n    test_string_copy_assign<StationaryAlloc<char32_t>>(11, 22, 22); // non-POCCA, non-equal allocators\r\n    test_string_copy_assign<CopyAlloc<char32_t>>(11, 11, 11); // POCCA, equal allocators\r\n    test_string_copy_assign<CopyAlloc<char32_t>>(11, 22, 11); // POCCA, non-equal allocators\r\n    test_string_copy_assign<CopyEqualAlloc<char32_t>>(11, 22, 11); // POCCA, always-equal allocators\r\n\r\n    test_string_copy_assign_pocca_sso();\r\n\r\n    test_string_move_ctor();\r\n\r\n    test_string_move_alloc_ctor(11, 11); // equal allocators\r\n    test_string_move_alloc_ctor(11, 22); // non-equal allocators\r\n\r\n    test_string_move_assign<StationaryAlloc<char32_t>>(11, 11, 11); // non-POCMA, equal allocators\r\n    test_string_move_assign<StationaryAlloc<char32_t>>(11, 22, 22); // non-POCMA, non-equal allocators\r\n    test_string_move_assign<MoveAlloc<char32_t>>(11, 11, 11); // POCMA, equal allocators\r\n    test_string_move_assign<MoveAlloc<char32_t>>(11, 22, 11); // POCMA, non-equal allocators\r\n    test_string_move_assign<MoveEqualAlloc<char32_t>>(11, 22, 11); // POCMA, always-equal allocators\r\n\r\n    test_string_swap<StationaryAlloc<char32_t>>(11, 11); // non-POCS, equal allocators\r\n    // UNDEFINED BEHAVIOR, NOT TESTED - non-POCS, non-equal allocators\r\n    test_string_swap<SwapAlloc<char32_t>>(11, 11); // POCS, equal allocators\r\n    test_string_swap<SwapAlloc<char32_t>>(11, 22); // POCS, non-equal allocators\r\n    test_string_swap<SwapEqualAlloc<char32_t>>(11, 22); // POCS, always-equal allocators\r\n\r\n#if _HAS_CXX20\r\n    if (!is_constant_evaluated()) {\r\n        test_string_move_to_stringbuf();\r\n    }\r\n#endif // _HAS_CXX20\r\n    return true;\r\n}\r\n\r\n\r\nconstexpr bool O = false;\r\nconstexpr bool I = true;\r\n\r\nvoid test_vb_copy_ctor() {\r\n    vector<bool, StationaryAlloc<bool>> src({I, I, I, O, I, I, I}, StationaryAlloc<bool>(11));\r\n    auto src_it = src.begin();\r\n\r\n    vector<bool, StationaryAlloc<bool>> dst(src);\r\n    auto dst_it = next(dst.begin());\r\n\r\n    *src_it = O;\r\n    *dst_it = O;\r\n\r\n    src.push_back(O);\r\n    dst.push_back(I);\r\n\r\n    *prev(src.end(), 2) = O;\r\n    *prev(dst.end(), 3) = O;\r\n\r\n    assert_equal(src, {O, I, I, O, I, I, O, O});\r\n    assert_equal(dst, {I, O, I, O, I, O, I, I});\r\n\r\n    assert(src.get_allocator().id() == 11);\r\n    assert(dst.get_allocator().id() == 11);\r\n}\r\n\r\nvoid test_vb_copy_alloc_ctor(const size_t id1, const size_t id2) {\r\n    vector<bool, StationaryAlloc<bool>> src({I, I, I, O, I, I, I}, StationaryAlloc<bool>(id1));\r\n    auto src_it = src.begin();\r\n\r\n    vector<bool, StationaryAlloc<bool>> dst(src, StationaryAlloc<bool>(id2));\r\n    auto dst_it = next(dst.begin());\r\n\r\n    *src_it = O;\r\n    *dst_it = O;\r\n\r\n    src.push_back(O);\r\n    dst.push_back(I);\r\n\r\n    *prev(src.end(), 2) = O;\r\n    *prev(dst.end(), 3) = O;\r\n\r\n    assert_equal(src, {O, I, I, O, I, I, O, O});\r\n    assert_equal(dst, {I, O, I, O, I, O, I, I});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id2);\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_vb_copy_assign(const size_t id1, const size_t id2, const size_t id3) {\r\n\r\n    vector<bool, Alloc> src({I, I, I, O, I, I, I}, Alloc(id1));\r\n    vector<bool, Alloc> dst({O, O, O, O, O, O, O}, Alloc(id2));\r\n\r\n    auto src_it = src.begin();\r\n    auto dst_it = next(dst.begin());\r\n\r\n    dst = src;\r\n\r\n    dst_it = next(dst.begin());\r\n\r\n    *src_it = O;\r\n    *dst_it = O;\r\n\r\n    src.push_back(O);\r\n    dst.push_back(I);\r\n\r\n    *prev(src.end(), 2) = O;\r\n    *prev(dst.end(), 3) = O;\r\n\r\n    assert_equal(src, {O, I, I, O, I, I, O, O});\r\n    assert_equal(dst, {I, O, I, O, I, O, I, I});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id3);\r\n}\r\n\r\nvoid test_vb_move_ctor() {\r\n    vector<bool, StationaryAlloc<bool>> src({I, I, I, O, I, I, I}, StationaryAlloc<bool>(11));\r\n    auto it1 = src.begin();\r\n\r\n    vector<bool, StationaryAlloc<bool>> dst(move(src));\r\n    auto it2 = next(dst.begin());\r\n\r\n    src         = {O, O, O, I, O, O, O};\r\n    auto src_it = src.begin();\r\n\r\n    *it1    = O;\r\n    *it2    = O;\r\n    *src_it = I;\r\n\r\n    src.push_back(O);\r\n    dst.push_back(I);\r\n\r\n    *prev(src.end(), 2) = I;\r\n    *prev(dst.end(), 3) = O;\r\n\r\n    assert_equal(src, {I, O, O, I, O, O, I, O});\r\n    assert_equal(dst, {O, O, I, O, I, O, I, I});\r\n\r\n    assert(src.get_allocator().id() == 11);\r\n    assert(dst.get_allocator().id() == 11);\r\n}\r\n\r\nvoid test_vb_move_alloc_ctor(const size_t id1, const size_t id2) {\r\n    vector<bool, StationaryAlloc<bool>> src({I, I, I, O, I, I, I}, StationaryAlloc<bool>(id1));\r\n    auto it1 = src.begin();\r\n\r\n    vector<bool, StationaryAlloc<bool>> dst(move(src), StationaryAlloc<bool>(id2));\r\n\r\n    if (id1 != id2) {\r\n        it1 = dst.begin();\r\n    }\r\n\r\n    auto it2 = next(dst.begin());\r\n\r\n    src         = {O, O, O, I, O, O, O};\r\n    auto src_it = src.begin();\r\n\r\n    *it1    = O;\r\n    *it2    = O;\r\n    *src_it = I;\r\n\r\n    src.push_back(O);\r\n    dst.push_back(I);\r\n\r\n    *prev(src.end(), 2) = I;\r\n    *prev(dst.end(), 3) = O;\r\n\r\n    assert_equal(src, {I, O, O, I, O, O, I, O});\r\n    assert_equal(dst, {O, O, I, O, I, O, I, I});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id2);\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_vb_move_assign(const size_t id1, const size_t id2, const size_t id3) {\r\n\r\n    vector<bool, Alloc> src({I, I, I, O, I, I, I}, Alloc(id1));\r\n    vector<bool, Alloc> dst({O, O, O, O, O, O, O}, Alloc(id2));\r\n\r\n    auto it1 = src.begin();\r\n    auto it2 = dst.begin();\r\n\r\n    dst = move(src);\r\n\r\n    if (id1 != id3) {\r\n        it1 = dst.begin();\r\n    }\r\n\r\n    it2 = next(dst.begin());\r\n\r\n    src         = {O, O, O, I, O, O, O};\r\n    auto src_it = src.begin();\r\n\r\n    *it1    = O;\r\n    *it2    = O;\r\n    *src_it = I;\r\n\r\n    src.push_back(O);\r\n    dst.push_back(I);\r\n\r\n    *prev(src.end(), 2) = I;\r\n    *prev(dst.end(), 3) = O;\r\n\r\n    assert_equal(src, {I, O, O, I, O, O, I, O});\r\n    assert_equal(dst, {O, O, I, O, I, O, I, I});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id3);\r\n}\r\n\r\ntemplate <class Alloc>\r\nvoid test_vb_swap(const size_t id1, const size_t id2) {\r\n\r\n    vector<bool, Alloc> src({I, I, I, O, I, I, I}, Alloc(id1));\r\n    vector<bool, Alloc> dst({O, O, O, I, O, O, O}, Alloc(id2));\r\n\r\n    auto it1 = src.begin();\r\n    auto it2 = dst.begin();\r\n\r\n    dst.swap(src);\r\n\r\n    *it1 = O;\r\n    *it2 = I;\r\n\r\n    src.push_back(I);\r\n    dst.push_back(O);\r\n\r\n    *prev(src.end(), 2) = I;\r\n    *prev(dst.end(), 3) = O;\r\n\r\n    assert_equal(src, {I, O, O, I, O, O, I, I});\r\n    assert_equal(dst, {O, I, I, O, I, O, I, O});\r\n\r\n    assert(src.get_allocator().id() == id2);\r\n    assert(dst.get_allocator().id() == id1);\r\n}\r\n\r\nvoid test_vb() {\r\n    test_vb_copy_ctor();\r\n\r\n    test_vb_copy_alloc_ctor(11, 11); // equal allocators\r\n    test_vb_copy_alloc_ctor(11, 22); // non-equal allocators\r\n\r\n    test_vb_copy_assign<StationaryAlloc<bool>>(11, 11, 11); // non-POCCA, equal allocators\r\n    test_vb_copy_assign<StationaryAlloc<bool>>(11, 22, 22); // non-POCCA, non-equal allocators\r\n    test_vb_copy_assign<CopyAlloc<bool>>(11, 11, 11); // POCCA, equal allocators\r\n    test_vb_copy_assign<CopyAlloc<bool>>(11, 22, 11); // POCCA, non-equal allocators\r\n    test_vb_copy_assign<CopyEqualAlloc<bool>>(11, 22, 11); // POCCA, always-equal allocators\r\n\r\n    test_vb_move_ctor();\r\n\r\n    test_vb_move_alloc_ctor(11, 11); // equal allocators\r\n    test_vb_move_alloc_ctor(11, 22); // non-equal allocators\r\n\r\n    test_vb_move_assign<StationaryAlloc<bool>>(11, 11, 11); // non-POCMA, equal allocators\r\n    test_vb_move_assign<StationaryAlloc<bool>>(11, 22, 22); // non-POCMA, non-equal allocators\r\n    test_vb_move_assign<MoveAlloc<bool>>(11, 11, 11); // POCMA, equal allocators\r\n    test_vb_move_assign<MoveAlloc<bool>>(11, 22, 11); // POCMA, non-equal allocators\r\n    test_vb_move_assign<MoveEqualAlloc<bool>>(11, 22, 11); // POCMA, always-equal allocators\r\n\r\n    test_vb_swap<StationaryAlloc<bool>>(11, 11); // non-POCS, equal allocators\r\n    // UNDEFINED BEHAVIOR, NOT TESTED - non-POCS, non-equal allocators\r\n    test_vb_swap<SwapAlloc<bool>>(11, 11); // POCS, equal allocators\r\n    test_vb_swap<SwapAlloc<bool>>(11, 22); // POCS, non-equal allocators\r\n    test_vb_swap<SwapEqualAlloc<bool>>(11, 22); // POCS, always-equal allocators\r\n}\r\n\r\n\r\nusing PCII = pair<const int, int>;\r\n\r\ntemplate <class K, class V, class C, class A>\r\nauto GetIter(map<K, V, C, A>& c) {\r\n    return prev(c.end());\r\n}\r\n\r\ntemplate <class K, class V, class C, class A>\r\nauto GetIter(multimap<K, V, C, A>& c) {\r\n    return prev(c.end());\r\n}\r\n\r\ntemplate <class K, class V, class H, class P, class A>\r\nauto GetIter(unordered_map<K, V, H, P, A>& c) {\r\n    return c.begin();\r\n}\r\n\r\ntemplate <class K, class V, class H, class P, class A>\r\nauto GetIter(unordered_multimap<K, V, H, P, A>& c) {\r\n    return c.begin();\r\n}\r\n\r\ntemplate <template <class> class Map>\r\nvoid test_map_copy_ctor() {\r\n\r\n    // Special: Test the (first, last, alloc) ctor.\r\n    const PCII arr[] = {{10, 100}, {20, 200}, {30, 300}};\r\n\r\n    typename Map<StationaryAlloc<PCII>>::type src(begin(arr), end(arr), StationaryAlloc<PCII>(11));\r\n    auto src_it = src.begin();\r\n\r\n    typename Map<StationaryAlloc<PCII>>::type dst(src);\r\n    auto dst_it = dst.begin();\r\n\r\n    assert(src_it->first * 10 == src_it->second);\r\n    assert(dst_it->first * 10 == dst_it->second);\r\n\r\n    src.emplace(40, 400);\r\n    dst.emplace(50, 500);\r\n\r\n    assert(GetIter(src)->first * 10 == GetIter(src)->second);\r\n    assert(GetIter(dst)->first * 10 == GetIter(dst)->second);\r\n\r\n    assert_is_permutation(src, {{10, 100}, {20, 200}, {30, 300}, {40, 400}});\r\n    assert_is_permutation(dst, {{10, 100}, {20, 200}, {30, 300}, {50, 500}});\r\n\r\n    assert(src.get_allocator().id() == 11);\r\n    assert(dst.get_allocator().id() == 11);\r\n}\r\n\r\ntemplate <template <class> class Map>\r\nvoid test_map_copy_alloc_ctor(const size_t id1, const size_t id2) {\r\n\r\n    typename Map<StationaryAlloc<PCII>>::type src({{10, 100}, {20, 200}, {30, 300}}, StationaryAlloc<PCII>(id1));\r\n    auto src_it = src.begin();\r\n\r\n    typename Map<StationaryAlloc<PCII>>::type dst(src, StationaryAlloc<PCII>(id2));\r\n    auto dst_it = dst.begin();\r\n\r\n    assert(src_it->first * 10 == src_it->second);\r\n    assert(dst_it->first * 10 == dst_it->second);\r\n\r\n    src.emplace(40, 400);\r\n    dst.emplace(50, 500);\r\n\r\n    assert(GetIter(src)->first * 10 == GetIter(src)->second);\r\n    assert(GetIter(dst)->first * 10 == GetIter(dst)->second);\r\n\r\n    assert_is_permutation(src, {{10, 100}, {20, 200}, {30, 300}, {40, 400}});\r\n    assert_is_permutation(dst, {{10, 100}, {20, 200}, {30, 300}, {50, 500}});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id2);\r\n}\r\n\r\ntemplate <template <class> class Map, class Alloc>\r\nvoid test_map_copy_assign(const size_t id1, const size_t id2, const size_t id3) {\r\n\r\n    typename Map<Alloc>::type src({{10, 100}, {20, 200}, {30, 300}}, Alloc(id1));\r\n    typename Map<Alloc>::type dst({{0, 0}, {0, 0}, {0, 0}}, Alloc(id2));\r\n\r\n    auto src_it = src.begin();\r\n    auto dst_it = dst.begin();\r\n\r\n    dst = src;\r\n\r\n    dst_it = dst.begin();\r\n\r\n    assert(src_it->first * 10 == src_it->second);\r\n    assert(dst_it->first * 10 == dst_it->second);\r\n\r\n    src.emplace(40, 400);\r\n    dst.emplace(50, 500);\r\n\r\n    assert(GetIter(src)->first * 10 == GetIter(src)->second);\r\n    assert(GetIter(dst)->first * 10 == GetIter(dst)->second);\r\n\r\n    assert_is_permutation(src, {{10, 100}, {20, 200}, {30, 300}, {40, 400}});\r\n    assert_is_permutation(dst, {{10, 100}, {20, 200}, {30, 300}, {50, 500}});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id3);\r\n}\r\n\r\ntemplate <template <class> class Map>\r\nvoid test_map_move_ctor() {\r\n\r\n    typename Map<StationaryAlloc<PCII>>::type src({{10, 100}, {20, 200}, {30, 300}}, StationaryAlloc<PCII>(11));\r\n    auto it1 = src.begin();\r\n\r\n    typename Map<StationaryAlloc<PCII>>::type dst(move(src));\r\n    auto it2 = next(dst.begin());\r\n\r\n    src         = {{40, 400}, {50, 500}, {60, 600}};\r\n    auto src_it = src.begin();\r\n\r\n    assert(it1->first * 10 == it1->second);\r\n    assert(it2->first * 10 == it2->second);\r\n    assert(src_it->first * 10 == src_it->second);\r\n\r\n    src.emplace(70, 700);\r\n    dst.emplace(80, 800);\r\n\r\n    assert(GetIter(src)->first * 10 == GetIter(src)->second);\r\n    assert(GetIter(dst)->first * 10 == GetIter(dst)->second);\r\n\r\n    assert_is_permutation(src, {{40, 400}, {50, 500}, {60, 600}, {70, 700}});\r\n    assert_is_permutation(dst, {{10, 100}, {20, 200}, {30, 300}, {80, 800}});\r\n\r\n    assert(src.get_allocator().id() == 11);\r\n    assert(dst.get_allocator().id() == 11);\r\n}\r\n\r\ntemplate <template <class> class Map>\r\nvoid test_map_move_alloc_ctor(const size_t id1, const size_t id2) {\r\n\r\n    typename Map<StationaryAlloc<PCII>>::type src({{10, 100}, {20, 200}, {30, 300}}, StationaryAlloc<PCII>(id1));\r\n    auto it1 = src.begin();\r\n\r\n    typename Map<StationaryAlloc<PCII>>::type dst(move(src), StationaryAlloc<PCII>(id2));\r\n\r\n    if (id1 != id2) {\r\n        it1 = dst.begin();\r\n    }\r\n\r\n    auto it2 = next(dst.begin());\r\n\r\n    src         = {{40, 400}, {50, 500}, {60, 600}};\r\n    auto src_it = src.begin();\r\n\r\n    assert(it1->first * 10 == it1->second);\r\n    assert(it2->first * 10 == it2->second);\r\n    assert(src_it->first * 10 == src_it->second);\r\n\r\n    src.emplace(70, 700);\r\n    dst.emplace(80, 800);\r\n\r\n    assert(GetIter(src)->first * 10 == GetIter(src)->second);\r\n    assert(GetIter(dst)->first * 10 == GetIter(dst)->second);\r\n\r\n    assert_is_permutation(src, {{40, 400}, {50, 500}, {60, 600}, {70, 700}});\r\n    assert_is_permutation(dst, {{10, 100}, {20, 200}, {30, 300}, {80, 800}});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id2);\r\n}\r\n\r\ntemplate <template <class> class Map, class Alloc>\r\nvoid test_map_move_assign(const size_t id1, const size_t id2, const size_t id3) {\r\n\r\n    typename Map<Alloc>::type src({{10, 100}, {20, 200}, {30, 300}}, Alloc(id1));\r\n    typename Map<Alloc>::type dst({{0, 0}, {0, 0}, {0, 0}}, Alloc(id2));\r\n\r\n    auto it1 = src.begin();\r\n    auto it2 = dst.begin();\r\n\r\n    dst = move(src);\r\n\r\n    if (id1 != id3) {\r\n        it1 = dst.begin();\r\n    }\r\n\r\n    it2 = next(dst.begin());\r\n\r\n    src         = {{40, 400}, {50, 500}, {60, 600}};\r\n    auto src_it = src.begin();\r\n\r\n    assert(it1->first * 10 == it1->second);\r\n    assert(it2->first * 10 == it2->second);\r\n    assert(src_it->first * 10 == src_it->second);\r\n\r\n    src.emplace(70, 700);\r\n    dst.emplace(80, 800);\r\n\r\n    assert(GetIter(src)->first * 10 == GetIter(src)->second);\r\n    assert(GetIter(dst)->first * 10 == GetIter(dst)->second);\r\n\r\n    assert_is_permutation(src, {{40, 400}, {50, 500}, {60, 600}, {70, 700}});\r\n    assert_is_permutation(dst, {{10, 100}, {20, 200}, {30, 300}, {80, 800}});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id3);\r\n}\r\n\r\ntemplate <template <class> class Map, class Alloc>\r\nvoid test_map_swap(const size_t id1, const size_t id2) {\r\n\r\n    typename Map<Alloc>::type src({{10, 100}, {20, 200}, {30, 300}}, Alloc(id1));\r\n    typename Map<Alloc>::type dst({{40, 400}, {50, 500}, {60, 600}}, Alloc(id2));\r\n\r\n    auto it1 = src.begin();\r\n    auto it2 = dst.begin();\r\n\r\n    dst.swap(src);\r\n\r\n    assert(it1->first * 10 == it1->second);\r\n    assert(it2->first * 10 == it2->second);\r\n\r\n    src.emplace(70, 700);\r\n    dst.emplace(80, 800);\r\n\r\n    assert(GetIter(src)->first * 10 == GetIter(src)->second);\r\n    assert(GetIter(dst)->first * 10 == GetIter(dst)->second);\r\n\r\n    assert_is_permutation(src, {{40, 400}, {50, 500}, {60, 600}, {70, 700}});\r\n    assert_is_permutation(dst, {{10, 100}, {20, 200}, {30, 300}, {80, 800}});\r\n\r\n    assert(src.get_allocator().id() == id2);\r\n    assert(dst.get_allocator().id() == id1);\r\n}\r\n\r\ntemplate <template <class> class Map>\r\nvoid test_map() {\r\n\r\n    test_map_copy_ctor<Map>();\r\n\r\n    test_map_copy_alloc_ctor<Map>(11, 11); // equal allocators\r\n    test_map_copy_alloc_ctor<Map>(11, 22); // non-equal allocators\r\n\r\n    test_map_copy_assign<Map, StationaryAlloc<PCII>>(11, 11, 11); // non-POCCA, equal allocators\r\n    test_map_copy_assign<Map, StationaryAlloc<PCII>>(11, 22, 22); // non-POCCA, non-equal allocators\r\n    test_map_copy_assign<Map, CopyAlloc<PCII>>(11, 11, 11); // POCCA, equal allocators\r\n    test_map_copy_assign<Map, CopyAlloc<PCII>>(11, 22, 11); // POCCA, non-equal allocators\r\n    test_map_copy_assign<Map, CopyEqualAlloc<PCII>>(11, 22, 11); // POCCA, always-equal allocators\r\n\r\n    test_map_move_ctor<Map>();\r\n\r\n    test_map_move_alloc_ctor<Map>(11, 11); // equal allocators\r\n    test_map_move_alloc_ctor<Map>(11, 22); // non-equal allocators\r\n\r\n    test_map_move_assign<Map, StationaryAlloc<PCII>>(11, 11, 11); // non-POCMA, equal allocators\r\n    test_map_move_assign<Map, StationaryAlloc<PCII>>(11, 22, 22); // non-POCMA, non-equal allocators\r\n    test_map_move_assign<Map, MoveAlloc<PCII>>(11, 11, 11); // POCMA, equal allocators\r\n    test_map_move_assign<Map, MoveAlloc<PCII>>(11, 22, 11); // POCMA, non-equal allocators\r\n    test_map_move_assign<Map, MoveEqualAlloc<PCII>>(11, 22, 11); // POCMA, always-equal allocators\r\n\r\n    test_map_swap<Map, StationaryAlloc<PCII>>(11, 11); // non-POCS, equal allocators\r\n    // UNDEFINED BEHAVIOR, NOT TESTED - non-POCS, non-equal allocators\r\n    test_map_swap<Map, SwapAlloc<PCII>>(11, 11); // POCS, equal allocators\r\n    test_map_swap<Map, SwapAlloc<PCII>>(11, 22); // POCS, non-equal allocators\r\n    test_map_swap<Map, SwapAlloc<PCII>>(11, 22); // POCS, always-equal allocators\r\n}\r\n\r\ntemplate <class Alloc>\r\nstruct OrderedMap {\r\n    using type = map<int, int, less<>, Alloc>;\r\n};\r\n\r\ntemplate <class Alloc>\r\nstruct OrderedMultimap {\r\n    using type = multimap<int, int, less<>, Alloc>;\r\n};\r\n\r\ntemplate <class Alloc>\r\nstruct UnorderedMap {\r\n    using type = unordered_map<int, int, hash<int>, equal_to<>, Alloc>;\r\n};\r\n\r\ntemplate <class Alloc>\r\nstruct UnorderedMultimap {\r\n    using type = unordered_multimap<int, int, hash<int>, equal_to<>, Alloc>;\r\n};\r\n\r\n\r\ntemplate <class K, class C, class A>\r\nauto GetIter(set<K, C, A>& c) {\r\n    return prev(c.end());\r\n}\r\n\r\ntemplate <class K, class C, class A>\r\nauto GetIter(multiset<K, C, A>& c) {\r\n    return prev(c.end());\r\n}\r\n\r\ntemplate <class K, class H, class P, class A>\r\nauto GetIter(unordered_set<K, H, P, A>& c) {\r\n    return c.begin();\r\n}\r\n\r\ntemplate <class K, class H, class P, class A>\r\nauto GetIter(unordered_multiset<K, H, P, A>& c) {\r\n    return c.begin();\r\n}\r\n\r\ntemplate <template <class> class Set>\r\nvoid test_set_copy_ctor() {\r\n\r\n    // Special: Test the (first, last, alloc) ctor.\r\n    const int arr[] = {10, 20, 30};\r\n\r\n    typename Set<StationaryAlloc<int>>::type src(begin(arr), end(arr), StationaryAlloc<int>(11));\r\n    auto src_it = src.begin();\r\n\r\n    typename Set<StationaryAlloc<int>>::type dst(src);\r\n    auto dst_it = dst.begin();\r\n\r\n    assert(*src_it % 10 == 0);\r\n    assert(*dst_it % 10 == 0);\r\n\r\n    src.emplace(40);\r\n    dst.emplace(50);\r\n\r\n    assert(*GetIter(src) % 10 == 0);\r\n    assert(*GetIter(dst) % 10 == 0);\r\n\r\n    assert_is_permutation(src, {10, 20, 30, 40});\r\n    assert_is_permutation(dst, {10, 20, 30, 50});\r\n\r\n    assert(src.get_allocator().id() == 11);\r\n    assert(dst.get_allocator().id() == 11);\r\n}\r\n\r\ntemplate <template <class> class Set>\r\nvoid test_set_copy_alloc_ctor(const size_t id1, const size_t id2) {\r\n\r\n    typename Set<StationaryAlloc<int>>::type src({10, 20, 30}, StationaryAlloc<int>(id1));\r\n    auto src_it = src.begin();\r\n\r\n    typename Set<StationaryAlloc<int>>::type dst(src, StationaryAlloc<int>(id2));\r\n    auto dst_it = dst.begin();\r\n\r\n    assert(*src_it % 10 == 0);\r\n    assert(*dst_it % 10 == 0);\r\n\r\n    src.emplace(40);\r\n    dst.emplace(50);\r\n\r\n    assert(*GetIter(src) % 10 == 0);\r\n    assert(*GetIter(dst) % 10 == 0);\r\n\r\n    assert_is_permutation(src, {10, 20, 30, 40});\r\n    assert_is_permutation(dst, {10, 20, 30, 50});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id2);\r\n}\r\n\r\ntemplate <template <class> class Set, class Alloc>\r\nvoid test_set_copy_assign(const size_t id1, const size_t id2, const size_t id3) {\r\n\r\n    typename Set<Alloc>::type src({10, 20, 30}, Alloc(id1));\r\n    typename Set<Alloc>::type dst({0, 0, 0}, Alloc(id2));\r\n\r\n    auto src_it = src.begin();\r\n    auto dst_it = dst.begin();\r\n\r\n    dst = src;\r\n\r\n    dst_it = dst.begin();\r\n\r\n    assert(*src_it % 10 == 0);\r\n    assert(*dst_it % 10 == 0);\r\n\r\n    src.emplace(40);\r\n    dst.emplace(50);\r\n\r\n    assert(*GetIter(src) % 10 == 0);\r\n    assert(*GetIter(dst) % 10 == 0);\r\n\r\n    assert_is_permutation(src, {10, 20, 30, 40});\r\n    assert_is_permutation(dst, {10, 20, 30, 50});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id3);\r\n}\r\n\r\ntemplate <template <class> class Set>\r\nvoid test_set_move_ctor() {\r\n\r\n    typename Set<StationaryAlloc<int>>::type src({10, 20, 30}, StationaryAlloc<int>(11));\r\n    auto it1 = src.begin();\r\n\r\n    typename Set<StationaryAlloc<int>>::type dst(move(src));\r\n    auto it2 = next(dst.begin());\r\n\r\n    src         = {40, 50, 60};\r\n    auto src_it = src.begin();\r\n\r\n    assert(*it1 % 10 == 0);\r\n    assert(*it2 % 10 == 0);\r\n    assert(*src_it % 10 == 0);\r\n\r\n    src.emplace(70);\r\n    dst.emplace(80);\r\n\r\n    assert(*GetIter(src) % 10 == 0);\r\n    assert(*GetIter(dst) % 10 == 0);\r\n\r\n    assert_is_permutation(src, {40, 50, 60, 70});\r\n    assert_is_permutation(dst, {10, 20, 30, 80});\r\n\r\n    assert(src.get_allocator().id() == 11);\r\n    assert(dst.get_allocator().id() == 11);\r\n}\r\n\r\ntemplate <template <class> class Set>\r\nvoid test_set_move_alloc_ctor(const size_t id1, const size_t id2) {\r\n\r\n    typename Set<StationaryAlloc<int>>::type src({10, 20, 30}, StationaryAlloc<int>(id1));\r\n    auto it1 = src.begin();\r\n\r\n    typename Set<StationaryAlloc<int>>::type dst(move(src), StationaryAlloc<int>(id2));\r\n\r\n    if (id1 != id2) {\r\n        it1 = dst.begin();\r\n    }\r\n\r\n    auto it2 = next(dst.begin());\r\n\r\n    src         = {40, 50, 60};\r\n    auto src_it = src.begin();\r\n\r\n    assert(*it1 % 10 == 0);\r\n    assert(*it2 % 10 == 0);\r\n    assert(*src_it % 10 == 0);\r\n\r\n    src.emplace(70);\r\n    dst.emplace(80);\r\n\r\n    assert(*GetIter(src) % 10 == 0);\r\n    assert(*GetIter(dst) % 10 == 0);\r\n\r\n    assert_is_permutation(src, {40, 50, 60, 70});\r\n    assert_is_permutation(dst, {10, 20, 30, 80});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id2);\r\n}\r\n\r\ntemplate <template <class> class Set, class Alloc>\r\nvoid test_set_move_assign(const size_t id1, const size_t id2, const size_t id3) {\r\n\r\n    typename Set<Alloc>::type src({10, 20, 30}, Alloc(id1));\r\n    typename Set<Alloc>::type dst({0, 0, 0}, Alloc(id2));\r\n\r\n    auto it1 = src.begin();\r\n    auto it2 = dst.begin();\r\n\r\n    dst = move(src);\r\n\r\n    if (id1 != id3) {\r\n        it1 = dst.begin();\r\n    }\r\n\r\n    it2 = next(dst.begin());\r\n\r\n    src         = {40, 50, 60};\r\n    auto src_it = src.begin();\r\n\r\n    assert(*it1 % 10 == 0);\r\n    assert(*it2 % 10 == 0);\r\n    assert(*src_it % 10 == 0);\r\n\r\n    src.emplace(70);\r\n    dst.emplace(80);\r\n\r\n    assert(*GetIter(src) % 10 == 0);\r\n    assert(*GetIter(dst) % 10 == 0);\r\n\r\n    assert_is_permutation(src, {40, 50, 60, 70});\r\n    assert_is_permutation(dst, {10, 20, 30, 80});\r\n\r\n    assert(src.get_allocator().id() == id1);\r\n    assert(dst.get_allocator().id() == id3);\r\n}\r\n\r\ntemplate <template <class> class Set, class Alloc>\r\nvoid test_set_swap(const size_t id1, const size_t id2) {\r\n\r\n    typename Set<Alloc>::type src({10, 20, 30}, Alloc(id1));\r\n    typename Set<Alloc>::type dst({40, 50, 60}, Alloc(id2));\r\n\r\n    auto it1 = src.begin();\r\n    auto it2 = dst.begin();\r\n\r\n    dst.swap(src);\r\n\r\n    assert(*it1 % 10 == 0);\r\n    assert(*it2 % 10 == 0);\r\n\r\n    src.emplace(70);\r\n    dst.emplace(80);\r\n\r\n    assert(*GetIter(src) % 10 == 0);\r\n    assert(*GetIter(dst) % 10 == 0);\r\n\r\n    assert_is_permutation(src, {40, 50, 60, 70});\r\n    assert_is_permutation(dst, {10, 20, 30, 80});\r\n\r\n    assert(src.get_allocator().id() == id2);\r\n    assert(dst.get_allocator().id() == id1);\r\n}\r\n\r\ntemplate <template <class> class Set>\r\nvoid test_set() {\r\n\r\n    test_set_copy_ctor<Set>();\r\n\r\n    test_set_copy_alloc_ctor<Set>(11, 11); // equal allocators\r\n    test_set_copy_alloc_ctor<Set>(11, 22); // non-equal allocators\r\n\r\n    test_set_copy_assign<Set, StationaryAlloc<int>>(11, 11, 11); // non-POCCA, equal allocators\r\n    test_set_copy_assign<Set, StationaryAlloc<int>>(11, 22, 22); // non-POCCA, non-equal allocators\r\n    test_set_copy_assign<Set, CopyAlloc<int>>(11, 11, 11); // POCCA, equal allocators\r\n    test_set_copy_assign<Set, CopyAlloc<int>>(11, 22, 11); // POCCA, non-equal allocators\r\n    test_set_copy_assign<Set, CopyEqualAlloc<int>>(11, 22, 11); // POCCA, always-equal allocators\r\n\r\n    test_set_move_ctor<Set>();\r\n\r\n    test_set_move_alloc_ctor<Set>(11, 11); // equal allocators\r\n    test_set_move_alloc_ctor<Set>(11, 22); // non-equal allocators\r\n\r\n    test_set_move_assign<Set, StationaryAlloc<int>>(11, 11, 11); // non-POCMA, equal allocators\r\n    test_set_move_assign<Set, StationaryAlloc<int>>(11, 22, 22); // non-POCMA, non-equal allocators\r\n    test_set_move_assign<Set, MoveAlloc<int>>(11, 11, 11); // POCMA, equal allocators\r\n    test_set_move_assign<Set, MoveAlloc<int>>(11, 22, 11); // POCMA, non-equal allocators\r\n    test_set_move_assign<Set, MoveEqualAlloc<int>>(11, 22, 11); // POCMA, always-equal allocators\r\n\r\n    test_set_swap<Set, StationaryAlloc<int>>(11, 11); // non-POCS, equal allocators\r\n    // UNDEFINED BEHAVIOR, NOT TESTED - non-POCS, non-equal allocators\r\n    test_set_swap<Set, SwapAlloc<int>>(11, 11); // POCS, equal allocators\r\n    test_set_swap<Set, SwapAlloc<int>>(11, 22); // POCS, non-equal allocators\r\n    test_set_swap<Set, SwapEqualAlloc<int>>(11, 22); // POCS, always-equal allocators\r\n}\r\n\r\ntemplate <class Alloc>\r\nstruct OrderedSet {\r\n    using type = set<int, less<>, Alloc>;\r\n};\r\n\r\ntemplate <class Alloc>\r\nstruct OrderedMultiset {\r\n    using type = multiset<int, less<>, Alloc>;\r\n};\r\n\r\ntemplate <class Alloc>\r\nstruct UnorderedSet {\r\n    using type = unordered_set<int, hash<int>, equal_to<>, Alloc>;\r\n};\r\n\r\ntemplate <class Alloc>\r\nstruct UnorderedMultiset {\r\n    using type = unordered_multiset<int, hash<int>, equal_to<>, Alloc>;\r\n};\r\n\r\n\r\n// Verify that stateful comparators are updated by <xtree>'s copy assign, move assign, and swap.\r\nvoid test_comparator_updates() {\r\n    {\r\n        set<int, function<bool(int, int)>, StationaryAlloc<int>> s1(\r\n            {101, 701, 201, 901}, less<>{}, StationaryAlloc<int>(11));\r\n        set<int, function<bool(int, int)>, StationaryAlloc<int>> s2(\r\n            {102, 702, 202, 902}, greater<>{}, StationaryAlloc<int>(22));\r\n\r\n        assert_equal(s1, {101, 201, 701, 901});\r\n        assert_equal(s2, {902, 702, 202, 102});\r\n\r\n        s1 = s2;\r\n\r\n        s1.insert(803);\r\n        s2.insert(804);\r\n\r\n        assert_equal(s1, {902, 803, 702, 202, 102});\r\n        assert_equal(s2, {902, 804, 702, 202, 102});\r\n    }\r\n\r\n    {\r\n        set<int, function<bool(int, int)>, StationaryAlloc<int>> s1(\r\n            {101, 701, 201, 901}, less<>{}, StationaryAlloc<int>(11));\r\n        set<int, function<bool(int, int)>, StationaryAlloc<int>> s2(\r\n            {102, 702, 202, 902}, greater<>{}, StationaryAlloc<int>(22));\r\n\r\n        assert_equal(s1, {101, 201, 701, 901});\r\n        assert_equal(s2, {902, 702, 202, 102});\r\n\r\n        s1 = move(s2);\r\n        s2.clear();\r\n\r\n        s1.insert(803);\r\n\r\n        s2.insert(10);\r\n        s2.insert(70);\r\n        s2.insert(20);\r\n        s2.insert(90);\r\n\r\n        assert_equal(s1, {902, 803, 702, 202, 102});\r\n        assert_equal(s2, {90, 70, 20, 10});\r\n    }\r\n\r\n    {\r\n        set<int, function<bool(int, int)>, SwapAlloc<int>> s1({101, 701, 201, 901}, less<>{}, SwapAlloc<int>(11));\r\n        set<int, function<bool(int, int)>, SwapAlloc<int>> s2({102, 702, 202, 902}, greater<>{}, SwapAlloc<int>(22));\r\n\r\n        assert_equal(s1, {101, 201, 701, 901});\r\n        assert_equal(s2, {902, 702, 202, 102});\r\n\r\n        s1.swap(s2);\r\n\r\n        s1.insert(803);\r\n        s2.insert(804);\r\n\r\n        assert_equal(s1, {902, 803, 702, 202, 102});\r\n        assert_equal(s2, {101, 201, 701, 804, 901});\r\n    }\r\n}\r\n\r\n\r\nint main() {\r\n    test_sequence<deque>();\r\n    test_sequence<list>();\r\n    test_sequence<vector>();\r\n\r\n#if _HAS_CXX20\r\n    static_assert(test_sequence<vector>());\r\n\r\n    static_assert(test_string());\r\n#endif // _HAS_CXX20\r\n\r\n    test_deque_shrink_to_fit();\r\n    test_flist();\r\n    test_string();\r\n    test_vb();\r\n\r\n    test_map<OrderedMap>();\r\n    test_map<OrderedMultimap>();\r\n    test_map<UnorderedMap>();\r\n    test_map<UnorderedMultimap>();\r\n\r\n    test_set<OrderedSet>();\r\n    test_set<OrderedMultiset>();\r\n    test_set<UnorderedSet>();\r\n    test_set<UnorderedMultiset>();\r\n\r\n    test_comparator_updates();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_any_calling_conventions/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_any_calling_conventions/a.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <any>\r\n#include <cassert>\r\n#include <utility>\r\n\r\n#include \"ab.hpp\"\r\n\r\nint small_but_nontrivial::constructions = 0;\r\nint small_but_nontrivial::defaults      = 0;\r\nint small_but_nontrivial::copies        = 0;\r\nint small_but_nontrivial::moves         = 0;\r\nint small_but_nontrivial::destructions  = 0;\r\n\r\nint __cdecl main() {\r\n    {\r\n        // Pass a std::any across TUs with different default calling conventions,\r\n        // copy / move / destroy it. Get back a std::any from the other TU,\r\n        // copy / move / destroy it as well.\r\n        std::any a = f(small_but_nontrivial{});\r\n        std::any b = a;\r\n        {\r\n            std::any c = std::move(a);\r\n        }\r\n    }\r\n\r\n    assert(small_but_nontrivial::constructions == small_but_nontrivial::destructions);\r\n    assert(small_but_nontrivial::constructions\r\n           == small_but_nontrivial::defaults + small_but_nontrivial::copies + small_but_nontrivial::moves);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_any_calling_conventions/ab.hpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma once\r\n#include <any>\r\n\r\nstd::any __cdecl f(std::any);\r\n\r\nstruct small_but_nontrivial {\r\n    static int constructions;\r\n    static int defaults;\r\n    static int copies;\r\n    static int moves;\r\n    static int destructions;\r\n\r\n    small_but_nontrivial() {\r\n        ++constructions;\r\n        ++defaults;\r\n    }\r\n    small_but_nontrivial(small_but_nontrivial&&) {\r\n        ++constructions;\r\n        ++moves;\r\n    }\r\n    small_but_nontrivial(const small_but_nontrivial&) {\r\n        ++constructions;\r\n        ++copies;\r\n    }\r\n    ~small_but_nontrivial() {\r\n        ++destructions;\r\n    }\r\n};\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_any_calling_conventions/b.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <any>\r\n#include <utility>\r\n\r\n#include \"ab.hpp\"\r\n\r\nstd::any __cdecl f(std::any a) {\r\n    std::any b = a;\r\n    {\r\n        std::any c = std::move(a);\r\n    }\r\n    return small_but_nontrivial{};\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_any_calling_conventions/custom_format.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\n\r\nfrom stl.test.format import STLTestFormat, TestStep\r\nfrom stl.test.tests import STLTest, TestType\r\n\r\n\r\nclass CustomTest(STLTest):\r\n    def __init__(self, suite, pathInSuite, litConfig, testConfig, envlstEntry, envNum):\r\n        STLTest.__init__(self, suite, pathInSuite, litConfig, testConfig, envlstEntry, envNum)\r\n        self.callingConventionA = envlstEntry.getEnvVal('CALLING_CONVENTION_A')\r\n        self.callingConventionB = envlstEntry.getEnvVal('CALLING_CONVENTION_B')\r\n\r\n\r\nclass CustomTestFormat(STLTestFormat):\r\n    def getTestsInDirectory(self, testSuite, pathInSuite, litConfig, localConfig, testClass=CustomTest):\r\n        return super().getTestsInDirectory(testSuite, pathInSuite, litConfig, localConfig, testClass)\r\n\r\n    def getBuildSteps(self, test, litConfig, shared):\r\n        exeSource = test.getSourcePath()\r\n        aSource = os.path.join(os.path.dirname(exeSource), 'a.cpp')\r\n\r\n        outputDir, outputBase = test.getTempPaths()\r\n        aObj = os.path.join(outputDir, 'a.obj')\r\n\r\n        cmd = [test.cxx, aSource, test.callingConventionA, *test.flags, '/c', *test.compileFlags, '/Fo' + aObj]\r\n\r\n        yield TestStep(cmd, shared.execDir, shared.env, False)\r\n\r\n        shared.execFile = outputBase + '.exe'\r\n        cmd = [test.cxx, exeSource, aObj, test.callingConventionB, *test.flags, *test.compileFlags,\r\n               '/Fe' + shared.execFile, '/link', *test.linkFlags]\r\n\r\n        if TestType.COMPILE in test.testType:\r\n            cmd = [test.cxx, '/c', exeSource, aObj, test.callingConventionB, *test.flags, *test.compileFlags]\r\n        elif TestType.RUN in test.testType:\r\n            shared.execFile = outputBase + '.exe'\r\n            cmd = [test.cxx, exeSource, aObj, test.callingConventionB, *test.flags, *test.compileFlags,\r\n                   '/Fe' + shared.execFile, '/link', *test.linkFlags]\r\n\r\n        yield TestStep(cmd, shared.execDir, shared.env, False)\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_any_calling_conventions/custombuild.pl",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nuse Run;\r\n\r\nsub CustomBuildHook()\r\n{\r\n    my $cwd = Run::GetCWDName();\r\n    Run::ExecuteCL(\"$ENV{CALLING_CONVENTION_A} /c a.cpp\");\r\n    Run::ExecuteCL(\"$ENV{CALLING_CONVENTION_B} b.cpp a.obj /Fe$cwd.exe\");\r\n}\r\n1\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_any_calling_conventions/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\fast_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tCALLING_CONVENTION_A=\"/Gd\"\r\n*\tCALLING_CONVENTION_A=\"/Gr\"\r\n*\tCALLING_CONVENTION_A=\"/Gv\"\r\n*\tCALLING_CONVENTION_A=\"/Gz\"\r\nRUNALL_CROSSLIST\r\n*\tCALLING_CONVENTION_B=\"/Gd\"\r\n*\tCALLING_CONVENTION_B=\"/Gr\"\r\n*\tCALLING_CONVENTION_B=\"/Gv\"\r\n*\tCALLING_CONVENTION_B=\"/Gz\"\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_any_calling_conventions/lit.local.cfg",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nconfig.suffixes = ['b[.]cpp$']\r\n\r\nimport os\r\nimport site\r\nsite.addsitedir(os.path.dirname(os.path.dirname(__file__)))\r\nimport VSO_0000000_any_calling_conventions.custom_format\r\n\r\nconfig.test_format = VSO_0000000_any_calling_conventions.custom_format.CustomTestFormat()\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_c_math_functions/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/DBOTH=1\"\r\n*\tPM_CL=\"/DCMATH=1\"\r\n*\tPM_CL=\"/DCSTDLIB=1\"\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_c_math_functions/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#if defined(BOTH)\r\n#include <cmath>\r\n#include <cstdlib>\r\n#elif defined(CMATH)\r\n#include <cmath>\r\n#elif defined(CSTDLIB)\r\n#include <cstdlib>\r\n#else\r\n#error This test requires one of BOTH, CMATH, or CSTDLIB to be defined.\r\n#endif\r\n\r\n#include <type_traits>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nSTATIC_ASSERT(std::is_same_v<decltype(abs(0)), int>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(abs(0L)), long>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(abs(0LL)), long long>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(abs(0.0F)), float>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(abs(0.0)), double>);\r\nSTATIC_ASSERT(std::is_same_v<decltype(abs(0.0L)), long double>);\r\n\r\n#undef STATIC_ASSERT\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_condition_variable_any_exceptions/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_condition_variable_any_exceptions/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <atomic>\r\n#include <cassert>\r\n#include <chrono>\r\n#include <condition_variable>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <mutex>\r\n#include <thread>\r\n#include <utility>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\n\r\nstruct lock_exception : exception {};\r\n\r\nstruct throwing_mutex {\r\n    deque<bool> lock_result;\r\n    deque<bool> unlock_result;\r\n    mutex state_lock;\r\n    mutex inner_lock;\r\n\r\n    void record_lock_result(const bool succeeds) {\r\n        lock_guard<mutex> lck(state_lock);\r\n        lock_result.push_back(succeeds);\r\n    }\r\n\r\n    void record_lock_success() {\r\n        record_lock_result(true);\r\n    }\r\n    void record_lock_failure() {\r\n        record_lock_result(false);\r\n    }\r\n\r\n    void record_unlock_result(const bool succeeds) {\r\n        lock_guard<mutex> lck(state_lock);\r\n        unlock_result.push_back(succeeds);\r\n    }\r\n\r\n    void record_unlock_success() {\r\n        record_unlock_result(true);\r\n    }\r\n    void record_unlock_failure() {\r\n        record_unlock_result(false);\r\n    }\r\n\r\n    void lock() {\r\n        bool success_desired;\r\n        {\r\n            lock_guard<mutex> lck(state_lock);\r\n            if (lock_result.empty()) {\r\n                puts(\"Tried to lock too many times!\");\r\n                abort();\r\n            }\r\n\r\n            success_desired = lock_result.front();\r\n            lock_result.pop_front();\r\n        }\r\n\r\n        if (success_desired) {\r\n            inner_lock.lock();\r\n        } else {\r\n            throw lock_exception();\r\n        }\r\n    }\r\n\r\n    void unlock() {\r\n        bool success_desired;\r\n        {\r\n            lock_guard<mutex> lck(state_lock);\r\n            if (unlock_result.empty()) {\r\n                puts(\"Tried to unlock too many times!\");\r\n                abort();\r\n            }\r\n\r\n            success_desired = unlock_result.front();\r\n            unlock_result.pop_front();\r\n        }\r\n\r\n        if (success_desired) {\r\n            inner_lock.unlock();\r\n        } else {\r\n            throw lock_exception();\r\n        }\r\n    }\r\n};\r\n\r\nvoid test_case_condition_variable_any_unlock_ex_should_have_no_effect() {\r\n    throwing_mutex mtx;\r\n    condition_variable_any tested_unit;\r\n\r\n    {\r\n        mtx.record_lock_success();\r\n        for (size_t idx = 0; idx < 5; ++idx) {\r\n            mtx.record_unlock_failure();\r\n        }\r\n\r\n        mtx.record_unlock_success();\r\n\r\n        unique_lock<throwing_mutex> mtx_lck(mtx);\r\n        for (size_t idx = 0; idx < 5; ++idx) {\r\n            try {\r\n                // no timing assumptions since we're failing to unlock the mutex\r\n                // which happens before we go to sleep\r\n                (void) tested_unit.wait_for(mtx_lck, 50ms);\r\n                abort();\r\n            } catch (const lock_exception&) {\r\n                assert(mtx_lck.owns_lock());\r\n            }\r\n        }\r\n    }\r\n\r\n    // before this change the throwing unlock would leave this thread irrevocably owning the\r\n    // condition variable mutex, just make sure another thread can wait\r\n    atomic<bool> done(false); // \"spinlock\"\r\n    thread t([&]() {\r\n        mtx.record_lock_success();\r\n        mtx.record_unlock_success();\r\n        mtx.record_lock_success();\r\n        mtx.record_unlock_success();\r\n        unique_lock<throwing_mutex> mtx_lck(mtx);\r\n        tested_unit.wait(mtx_lck);\r\n        done.store(true);\r\n    });\r\n\r\n    // this loop is just making sure notify_one is called after t has gone to sleep\r\n    for (;;) {\r\n        tested_unit.notify_one();\r\n        this_thread::yield();\r\n        if (done.load()) {\r\n            break;\r\n        }\r\n\r\n        this_thread::sleep_for(100ms);\r\n        if (done.load()) {\r\n            break;\r\n        }\r\n    }\r\n\r\n    t.join();\r\n}\r\n\r\nvoid test_case_condition_variable_any_lock_ex_should_terminate() {\r\n    throwing_mutex mtx;\r\n    condition_variable_any tested_unit;\r\n    mtx.record_lock_success();\r\n    mtx.record_unlock_success();\r\n    mtx.record_lock_failure();\r\n    unique_lock<throwing_mutex> mtx_lck(mtx);\r\n    // no timing assumptions since we're failing to relock the mutex, which\r\n    // terminates whether the condition variable times out or not\r\n    (void) tested_unit.wait_for(mtx_lck, 50ms);\r\n}\r\n\r\n// Also test VSO-299271 \"condition_variable_any::wait_until doesn't compile with less accurate time_points\"\r\nvoid test_case_condition_variable_any_less_accurate_time_points() {\r\n    condition_variable_any tested_unit;\r\n    const auto currentTime  = steady_clock::now();\r\n    const auto nextDeadline = time_point_cast<milliseconds>(currentTime) + 5ms;\r\n    recursive_mutex rm;\r\n    unique_lock<recursive_mutex> lck(rm);\r\n    (void) tested_unit.wait_until(lck, nextDeadline);\r\n}\r\n\r\nvoid normal_tests() {\r\n    test_case_condition_variable_any_unlock_ex_should_have_no_effect();\r\n    test_case_condition_variable_any_less_accurate_time_points();\r\n}\r\n\r\n// Test strengthened exception specification of condition_variable::wait\r\nstatic_assert(noexcept(declval<condition_variable&>().wait(declval<unique_lock<mutex>&>())),\r\n    \"condition_variable::wait that takes no predicate should be noexcept\");\r\n\r\n// Test strengthened exception specification of notify_all_at_thread_exit\r\nstatic_assert(noexcept(notify_all_at_thread_exit(declval<condition_variable&>(), declval<unique_lock<mutex>>())),\r\n    \"notify_all_at_thread_exit should be noexcept\");\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec(normal_tests);\r\n    exec.add_death_tests({test_case_condition_variable_any_lock_ex_should_terminate});\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_container_allocator_constructors/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_container_allocator_constructors/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <initializer_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <map>\r\n#include <new>\r\n#include <set>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\n\r\n// Break std::allocator by making calling new fail\r\n\r\nvoid* operator new(size_t) {\r\n    abort();\r\n}\r\n\r\nvoid* operator new(size_t, const nothrow_t&) noexcept {\r\n    abort();\r\n}\r\n\r\nvoid operator delete(void*) noexcept {\r\n    abort();\r\n}\r\n\r\nvoid operator delete(void*, const nothrow_t&) noexcept {\r\n    abort();\r\n}\r\n\r\nvoid* operator new[](size_t) {\r\n    abort();\r\n}\r\n\r\nvoid* operator new[](size_t, const nothrow_t&) noexcept {\r\n    abort();\r\n}\r\n\r\nvoid operator delete[](void*) noexcept {\r\n    abort();\r\n}\r\n\r\nvoid operator delete[](void*, const nothrow_t&) noexcept {\r\n    abort();\r\n}\r\n\r\nstruct ConstructT {};\r\n\r\nconstexpr ConstructT C{};\r\n\r\ntemplate <typename T>\r\nstruct Mallocator {\r\n    using value_type = T;\r\n\r\n    Mallocator() = delete;\r\n    explicit Mallocator(const ConstructT&) {}\r\n    Mallocator(const Mallocator&) = default;\r\n\r\n    template <typename U>\r\n    Mallocator(const Mallocator<U>&) {}\r\n\r\n    value_type* allocate(const size_t n) {\r\n        auto res = static_cast<value_type*>(calloc(n, sizeof(T)));\r\n        if (res == nullptr) {\r\n            throw bad_alloc();\r\n        }\r\n\r\n        return res;\r\n    }\r\n\r\n    void deallocate(value_type* p, size_t) {\r\n        free(p);\r\n    }\r\n};\r\n\r\ntemplate <class T, class U>\r\nbool operator==(const Mallocator<T>&, const Mallocator<U>&) {\r\n    return true;\r\n}\r\ntemplate <class T, class U>\r\nbool operator!=(const Mallocator<T>&, const Mallocator<U>&) {\r\n    return false;\r\n}\r\n\r\nint main() {\r\n    deque<int, Mallocator<int>>(42, Mallocator<int>(C));\r\n    forward_list<int, Mallocator<int>>(42, Mallocator<int>(C));\r\n    list<int, Mallocator<int>>(42, Mallocator<int>(C));\r\n    vector<int, Mallocator<int>>(42, Mallocator<int>(C));\r\n    vector<bool, Mallocator<bool>>(42, Mallocator<bool>(C));\r\n\r\n    const pair<int, int> map_input[]                           = {{42, 1729}, {1, 2}, {3, 4}};\r\n    const initializer_list<pair<const int, int>> map_init_list = {{42, 1729}, {1, 2}, {3, 4}}; // lifetime extended\r\n    using assoc_alloc_t                                        = Mallocator<pair<const int, int>>;\r\n    using map_t                                                = map<int, int, less<>, assoc_alloc_t>;\r\n    map_t(begin(map_input), end(map_input), assoc_alloc_t(C));\r\n    map_t(map_init_list, assoc_alloc_t(C));\r\n    using mmap_t = multimap<int, int, less<>, assoc_alloc_t>;\r\n    mmap_t(begin(map_input), end(map_input), assoc_alloc_t(C));\r\n    mmap_t(map_init_list, assoc_alloc_t(C));\r\n\r\n    const int set_input[]                     = {42, 1729, 1, 2, 3, 4};\r\n    const initializer_list<int> set_init_list = {42, 1729, 1, 2, 3, 4};\r\n    using set_t                               = set<int, less<>, Mallocator<int>>;\r\n    set_t(begin(set_input), end(set_input), Mallocator<int>(C));\r\n    set_t(set_init_list, Mallocator<int>(C));\r\n    using mset_t = multiset<int, less<>, Mallocator<int>>;\r\n    mset_t(begin(set_input), end(set_input), Mallocator<int>(C));\r\n    mset_t(set_init_list, Mallocator<int>(C));\r\n\r\n\r\n    using unordered_map_t = unordered_map<int, int, hash<int>, equal_to<>, assoc_alloc_t>;\r\n    unordered_map_t(2, assoc_alloc_t(C));\r\n    unordered_map_t(2, hash<int>(), assoc_alloc_t(C));\r\n    unordered_map_t(begin(map_input), end(map_input), 2, assoc_alloc_t(C));\r\n    unordered_map_t(begin(map_input), end(map_input), 2, hash<int>(), assoc_alloc_t(C));\r\n    unordered_map_t(map_init_list, 2, assoc_alloc_t(C));\r\n    unordered_map_t(map_init_list, 2, hash<int>(), assoc_alloc_t(C));\r\n    using unordered_mmap_t = unordered_multimap<int, int, hash<int>, equal_to<>, assoc_alloc_t>;\r\n    unordered_mmap_t(2, assoc_alloc_t(C));\r\n    unordered_mmap_t(2, hash<int>(), assoc_alloc_t(C));\r\n    unordered_mmap_t(begin(map_input), end(map_input), 2, assoc_alloc_t(C));\r\n    unordered_mmap_t(begin(map_input), end(map_input), 2, hash<int>(), assoc_alloc_t(C));\r\n    unordered_mmap_t(map_init_list, 2, assoc_alloc_t(C));\r\n    unordered_mmap_t(map_init_list, 2, hash<int>(), assoc_alloc_t(C));\r\n\r\n    using unordered_set_t = unordered_set<int, hash<int>, equal_to<>, Mallocator<int>>;\r\n    unordered_set_t(2, Mallocator<int>(C));\r\n    unordered_set_t(2, hash<int>(), Mallocator<int>(C));\r\n    unordered_set_t(begin(set_input), end(set_input), 2, Mallocator<int>(C));\r\n    unordered_set_t(begin(set_input), end(set_input), 2, hash<int>(), Mallocator<int>(C));\r\n    unordered_set_t(set_init_list, 2, Mallocator<int>(C));\r\n    unordered_set_t(set_init_list, 2, hash<int>(), Mallocator<int>(C));\r\n    using unordered_mset_t = unordered_multiset<int, hash<int>, equal_to<>, Mallocator<int>>;\r\n    unordered_mset_t(2, Mallocator<int>(C));\r\n    unordered_mset_t(2, hash<int>(), Mallocator<int>(C));\r\n    unordered_mset_t(begin(set_input), end(set_input), 2, Mallocator<int>(C));\r\n    unordered_mset_t(begin(set_input), end(set_input), 2, hash<int>(), Mallocator<int>(C));\r\n    unordered_mset_t(set_init_list, 2, Mallocator<int>(C));\r\n    unordered_mset_t(set_init_list, 2, hash<int>(), Mallocator<int>(C));\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_exception_ptr_rethrow_seh/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\eha_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_exception_ptr_rethrow_seh/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <exception>\r\n#include <excpt.h>\r\n\r\n#pragma warning(push) // TRANSITION, OS-23694920\r\n#pragma warning(disable : 4668) // 'MEOW' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'\r\n#include <Windows.h>\r\n#pragma warning(pop)\r\n\r\nULONG_PTR data[] = {0xC0FFEE, 1729};\r\n\r\nstd::exception_ptr GetNoncontinuableException() {\r\n    try {\r\n        RaiseException(1234, EXCEPTION_NONCONTINUABLE, 2, data);\r\n    } catch (...) {\r\n        return std::current_exception(); // depends on /EHa\r\n    }\r\n\r\n    puts(\"Test failed; you probably didn't compile with /EHa\");\r\n    abort();\r\n}\r\n\r\nstd::exception_ptr GetContinuableException() {\r\n    try {\r\n        RaiseException(1234, 0, 2, data);\r\n    } catch (...) {\r\n        return std::current_exception(); // depends on /EHa\r\n    }\r\n\r\n    puts(\"Test failed; you probably didn't compile with /EHa\");\r\n    abort();\r\n}\r\n\r\nvoid AssertExceptionRecordOk(const EXCEPTION_POINTERS* const pointers) {\r\n    assert(pointers->ExceptionRecord->ExceptionCode == 1234);\r\n    assert((pointers->ExceptionRecord->ExceptionFlags & EXCEPTION_NONCONTINUABLE) == EXCEPTION_NONCONTINUABLE);\r\n    assert(pointers->ExceptionRecord->ExceptionRecord == nullptr);\r\n    assert(pointers->ExceptionRecord->ExceptionAddress != nullptr);\r\n    assert(pointers->ExceptionRecord->NumberParameters == 2);\r\n    assert(pointers->ExceptionRecord->ExceptionInformation[0] == data[0]);\r\n    assert(pointers->ExceptionRecord->ExceptionInformation[1] == data[1]);\r\n}\r\n\r\nvoid Rethrow(const std::exception_ptr& ptr) {\r\n    // separate function to allow use in functions with __try/__except\r\n    std::rethrow_exception(ptr);\r\n}\r\n\r\nvoid AssertRethrowNoContinuationOK(const std::exception_ptr& ex) {\r\n    __try {\r\n        Rethrow(ex);\r\n    } __except (AssertExceptionRecordOk(GetExceptionInformation()), EXCEPTION_EXECUTE_HANDLER) {\r\n    }\r\n}\r\n\r\nDWORD RethrowContinuationFilter(int& phase, const EXCEPTION_POINTERS* const pointers) {\r\n    switch (phase++) {\r\n    case 0:\r\n        AssertExceptionRecordOk(pointers);\r\n        return static_cast<DWORD>(EXCEPTION_CONTINUE_EXECUTION);\r\n    case 1:\r\n        assert(pointers->ExceptionRecord->ExceptionCode == EXCEPTION_NONCONTINUABLE_EXCEPTION);\r\n        return static_cast<DWORD>(EXCEPTION_EXECUTE_HANDLER);\r\n    default:\r\n        abort();\r\n    }\r\n}\r\n\r\nvoid AssertRethrowContinuationFails(const std::exception_ptr& ex) {\r\n    int phase = 0;\r\n    __try {\r\n        Rethrow(ex);\r\n        abort();\r\n    } __except (RethrowContinuationFilter(phase, GetExceptionInformation())) {\r\n    }\r\n}\r\n\r\nint main() {\r\n    AssertRethrowNoContinuationOK(GetNoncontinuableException());\r\n    AssertRethrowNoContinuationOK(GetContinuableException());\r\n    AssertRethrowContinuationFails(GetNoncontinuableException());\r\n    AssertRethrowContinuationFails(GetContinuableException());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_fancy_pointers/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_fancy_pointers/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstddef>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <map>\r\n#include <memory>\r\n#include <new>\r\n#include <set>\r\n#include <sstream>\r\n#include <string>\r\n#include <syncstream>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <instantiate_containers_iterators_common.hpp>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <typename Val>\r\nclass fancy_pointer {\r\npublic:\r\n    typedef Val* rep_type;\r\n\r\n    rep_type rep;\r\n    unsigned char unused[4];\r\n\r\n    fancy_pointer() : rep(nullptr) {}\r\n\r\n    /* implicit */ fancy_pointer(std::nullptr_t) : rep(nullptr) {}\r\n    /* implicit */ fancy_pointer(int) = delete;\r\n\r\n    fancy_pointer& operator=(std::nullptr_t) {\r\n        rep = nullptr;\r\n        return *this;\r\n    }\r\n    fancy_pointer& operator=(int) = delete;\r\n\r\n    template <typename UVal, std::enable_if_t<std::is_convertible_v<UVal*, Val*>, int> = 0>\r\n    /* implicit */ fancy_pointer(const fancy_pointer<UVal>& other) : rep(other.rep) {}\r\n\r\n    // allow explicit conversion from fancy_pointer<cv void> to fancy_pointer<T>\r\n    template <typename UVal, std::enable_if_t<std::conjunction_v<std::negation<std::is_convertible<UVal*, Val*>>,\r\n                                                  std::is_void<UVal>, std::negation<std::is_void<Val>>>,\r\n                                 int> = 0>\r\n    explicit fancy_pointer(const fancy_pointer<UVal>& other) : rep(static_cast<Val*>(other.rep)) {}\r\n\r\n    // intentionally user-provided to test the Small String Optimization's union\r\n    fancy_pointer(const fancy_pointer& other) : rep(other.rep) {}\r\n    fancy_pointer& operator=(const fancy_pointer& other) {\r\n        rep = other.rep;\r\n        return *this;\r\n    }\r\n    ~fancy_pointer() {}\r\n\r\n    // evil, to test that std::addressof() is being used\r\n    void operator&() const = delete;\r\n\r\n    explicit operator bool() const {\r\n        return rep != nullptr;\r\n    }\r\n\r\n    std::add_lvalue_reference_t<Val> operator*() const {\r\n        return *rep;\r\n    }\r\n\r\n    Val* operator->() const {\r\n        return rep;\r\n    }\r\n\r\n    fancy_pointer& operator++() {\r\n        ++rep;\r\n        return *this;\r\n    }\r\n\r\n    fancy_pointer operator++(int) {\r\n        static_assert(false, \"avoid postincrement\");\r\n        fancy_pointer result = *this;\r\n        ++rep;\r\n        return result;\r\n    }\r\n\r\n    fancy_pointer& operator--() {\r\n        --rep;\r\n        return *this;\r\n    }\r\n\r\n    fancy_pointer operator--(int) {\r\n        static_assert(false, \"avoid postdecrement\");\r\n        fancy_pointer result = *this;\r\n        --rep;\r\n        return result;\r\n    }\r\n\r\n#ifdef _WIN64\r\n    fancy_pointer& operator+=(int rhs) {\r\n        rep += rhs;\r\n        return *this;\r\n    }\r\n#endif // _WIN64\r\n\r\n    fancy_pointer& operator+=(std::ptrdiff_t rhs) {\r\n        rep += rhs;\r\n        return *this;\r\n    }\r\n\r\n    fancy_pointer& operator+=(std::size_t rhs) {\r\n        rep += rhs;\r\n        return *this;\r\n    }\r\n\r\n#ifdef _WIN64\r\n    fancy_pointer operator+(int rhs) const {\r\n        return fancy_pointer{rep + rhs};\r\n    }\r\n#endif // _WIN64\r\n\r\n    fancy_pointer operator+(std::ptrdiff_t rhs) const {\r\n        return fancy_pointer{rep + rhs};\r\n    }\r\n\r\n    fancy_pointer operator+(std::size_t rhs) const {\r\n        return fancy_pointer{rep + rhs};\r\n    }\r\n\r\n#ifdef _WIN64\r\n    fancy_pointer& operator-=(int rhs) {\r\n        rep -= rhs;\r\n        return *this;\r\n    }\r\n#endif // _WIN64\r\n\r\n    fancy_pointer& operator-=(std::ptrdiff_t rhs) {\r\n        rep -= rhs;\r\n        return *this;\r\n    }\r\n\r\n    fancy_pointer& operator-=(std::size_t rhs) {\r\n        rep -= rhs;\r\n        return *this;\r\n    }\r\n\r\n#ifdef _WIN64\r\n    fancy_pointer operator-(int rhs) const {\r\n        return fancy_pointer{rep - rhs};\r\n    }\r\n#endif // _WIN64\r\n\r\n    fancy_pointer operator-(std::ptrdiff_t rhs) const {\r\n        return fancy_pointer{rep - rhs};\r\n    }\r\n\r\n    fancy_pointer operator-(std::size_t rhs) const {\r\n        return fancy_pointer{rep - rhs};\r\n    }\r\n\r\n#ifdef _WIN64\r\n    std::add_lvalue_reference_t<Val> operator[](int offset) const {\r\n        return rep[offset];\r\n    }\r\n#endif // _WIN64\r\n\r\n    std::add_lvalue_reference_t<Val> operator[](std::ptrdiff_t offset) const {\r\n        return rep[offset];\r\n    }\r\n\r\n    std::add_lvalue_reference_t<Val> operator[](std::size_t offset) const {\r\n        return rep[offset];\r\n    }\r\n\r\nprivate:\r\n    explicit fancy_pointer(rep_type cRep) : rep(cRep) {}\r\n};\r\n\r\ntemplate <typename T>\r\nauto operator+(std::ptrdiff_t lhs, const fancy_pointer<T>& rhs) -> decltype(rhs + lhs) {\r\n    return rhs + lhs;\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nauto operator-(const fancy_pointer<T>& lhs, const fancy_pointer<U>& rhs) -> decltype(lhs.rep - rhs.rep) {\r\n    return lhs.rep - rhs.rep;\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nauto operator==(const fancy_pointer<T>& lhs, const fancy_pointer<U>& rhs) -> decltype(lhs.rep == rhs.rep) {\r\n    return lhs.rep == rhs.rep;\r\n}\r\n\r\ntemplate <typename T>\r\nbool operator==(const fancy_pointer<T>& lhs, std::nullptr_t) {\r\n    return lhs.rep == nullptr;\r\n}\r\n\r\ntemplate <typename T>\r\nbool operator==(std::nullptr_t, const fancy_pointer<T>& rhs) {\r\n    return nullptr == rhs.rep;\r\n}\r\n\r\ntemplate <typename T>\r\nbool operator==(const fancy_pointer<T>&, int) = delete;\r\n\r\ntemplate <typename T>\r\nbool operator==(int, const fancy_pointer<T>&) = delete;\r\n\r\ntemplate <typename T, typename U>\r\nauto operator!=(const fancy_pointer<T>& lhs, const fancy_pointer<U>& rhs) -> decltype(lhs.rep != rhs.rep) {\r\n    return lhs.rep != rhs.rep;\r\n}\r\n\r\ntemplate <typename T>\r\nbool operator!=(const fancy_pointer<T>& lhs, std::nullptr_t) {\r\n    return lhs.rep != nullptr;\r\n}\r\n\r\ntemplate <typename T>\r\nbool operator!=(std::nullptr_t, const fancy_pointer<T>& rhs) {\r\n    return nullptr != rhs.rep;\r\n}\r\n\r\ntemplate <typename T>\r\nbool operator!=(const fancy_pointer<T>&, int) = delete;\r\n\r\ntemplate <typename T>\r\nbool operator!=(int, const fancy_pointer<T>&) = delete;\r\n\r\ntemplate <typename T, typename U>\r\nauto operator<(const fancy_pointer<T>& lhs, const fancy_pointer<U>& rhs) -> decltype(lhs.rep < rhs.rep) {\r\n    return lhs.rep < rhs.rep;\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nauto operator>(const fancy_pointer<T>& lhs, const fancy_pointer<U>& rhs) -> decltype(lhs.rep > rhs.rep) {\r\n    return lhs.rep > rhs.rep;\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nauto operator>=(const fancy_pointer<T>& lhs, const fancy_pointer<U>& rhs) -> decltype(lhs.rep >= rhs.rep) {\r\n    return lhs.rep >= rhs.rep;\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nauto operator<=(const fancy_pointer<T>& lhs, const fancy_pointer<U>& rhs) -> decltype(lhs.rep <= rhs.rep) {\r\n    return lhs.rep <= rhs.rep;\r\n}\r\n\r\ntemplate <typename Val, bool IsVoid = std::is_void_v<Val>>\r\nstruct impl_pointer_to {\r\n    static fancy_pointer<Val> pointer_to(Val& r) {\r\n        fancy_pointer<Val> result;\r\n        result.rep = std::addressof(r);\r\n        return result;\r\n    }\r\n};\r\n\r\ntemplate <typename Val>\r\nstruct impl_pointer_to<Val, true> {\r\n    // no pointer_to for void\r\n};\r\n\r\nnamespace std {\r\n    template <typename Val>\r\n    struct pointer_traits<fancy_pointer<Val>> : impl_pointer_to<Val> {\r\n        typedef fancy_pointer<Val> pointer;\r\n        typedef Val element_type;\r\n        typedef ptrdiff_t difference_type;\r\n\r\n        template <typename U>\r\n        using rebind = fancy_pointer<U>;\r\n    };\r\n\r\n    template <typename Val>\r\n    struct iterator_traits<fancy_pointer<Val>> {\r\n        typedef random_access_iterator_tag iterator_category;\r\n        typedef ptrdiff_t difference_type;\r\n        typedef remove_const_t<Val> value_type;\r\n        typedef Val& reference;\r\n        typedef fancy_pointer<Val> pointer;\r\n    };\r\n} // namespace std\r\n\r\ntemplate <typename Val>\r\nstruct fancy_allocator {\r\n    fancy_allocator() = default;\r\n\r\n    // See [allocator.requirements] table 28\r\n    typedef fancy_pointer<Val> pointer;\r\n    // default const_pointer\r\n    // default void_pointer\r\n    // default const_void_pointer\r\n    typedef Val value_type;\r\n    // default size_type\r\n    // default difference_type\r\n    // default rebind\r\n    pointer allocate(std::size_t n) {\r\n        std::allocator<Val> alloc;\r\n        pointer result;\r\n        result.rep = alloc.allocate(n);\r\n        return result;\r\n    }\r\n    // default allocate(n, y)\r\n    void deallocate(pointer p, std::size_t n) {\r\n        std::allocator<Val> alloc;\r\n        alloc.deallocate(p.rep, n);\r\n    }\r\n    // default max_size()\r\n    // operator==(a1, a2) declared as free function below\r\n    // operator!=(a1, a2) ditto\r\n    // operator==(a, b) ditto\r\n    // operator!=(a, b) ditto\r\n    fancy_allocator(const fancy_allocator&)            = default;\r\n    fancy_allocator(fancy_allocator&&)                 = default;\r\n    fancy_allocator& operator=(const fancy_allocator&) = delete;\r\n    fancy_allocator& operator=(fancy_allocator&&)      = delete;\r\n\r\n    template <typename U>\r\n    explicit fancy_allocator(const fancy_allocator<U>&) {}\r\n\r\n    template <typename C, typename... Args>\r\n    void construct(C* c, Args&&... args) {\r\n        ::new (static_cast<void*>(c)) C(std::forward<Args>(args)...);\r\n    }\r\n\r\n    template <typename C, typename... Args>\r\n    void construct(const fancy_pointer<C>&, Args&&...) {\r\n        // note: static_assert rather than =delete because we want allocator_traits to think we provide this\r\n        static_assert(false, \"construct takes unfancy pointer\");\r\n    }\r\n\r\n    template <typename C>\r\n    void destroy(C* c) {\r\n        c->~C();\r\n    }\r\n\r\n    template <typename C>\r\n    void destroy(const fancy_pointer<C>&) {\r\n        static_assert(false, \"destroy takes unfancy pointer\");\r\n    }\r\n\r\n    // default select_on_container_copy_construction\r\n    // default propagate_on_container_copy_assignment\r\n    // default propagate_on_container_move_assignment\r\n    // default propagate_on_container_swap\r\n    // default is_always_equal\r\n};\r\n\r\ntemplate <typename T, typename U>\r\nbool operator==(const fancy_allocator<T>&, const fancy_allocator<U>&) {\r\n    return true;\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nbool operator!=(const fancy_allocator<T>&, const fancy_allocator<U>&) {\r\n    return false;\r\n}\r\n\r\nstruct trivial {\r\n    bool operator<(const trivial&) const {\r\n        return false;\r\n    }\r\n\r\n    bool operator==(const trivial&) const {\r\n        return true;\r\n    }\r\n};\r\n\r\nusing T1 = int;\r\nusing T2 = trivial;\r\nusing T3 = std::vector<int>;\r\n\r\nusing V = double;\r\n\r\nstruct omni_hash {\r\n    template <typename X>\r\n    std::size_t operator()(const X&) const {\r\n        return 0;\r\n    }\r\n};\r\n\r\ntemplate class std::deque<T1, fancy_allocator<T1>>;\r\ntemplate class std::deque<T2, fancy_allocator<T2>>;\r\ntemplate class std::deque<T3, fancy_allocator<T3>>;\r\n\r\ntemplate class std::forward_list<T1, fancy_allocator<T1>>;\r\ntemplate class std::forward_list<T2, fancy_allocator<T2>>;\r\ntemplate class std::forward_list<T3, fancy_allocator<T3>>;\r\n\r\ntemplate class std::list<T1, fancy_allocator<T1>>;\r\ntemplate class std::list<T2, fancy_allocator<T2>>;\r\ntemplate class std::list<T3, fancy_allocator<T3>>;\r\n\r\ntemplate class std::vector<T1, fancy_allocator<T1>>;\r\ntemplate class std::vector<T2, fancy_allocator<T2>>;\r\ntemplate class std::vector<T3, fancy_allocator<T3>>;\r\n\r\ntemplate class std::vector<bool, fancy_allocator<bool>>;\r\n\r\ntemplate class std::map<T1, V, std::less<>, fancy_allocator<std::pair<const T1, V>>>;\r\ntemplate class std::map<T2, V, std::less<>, fancy_allocator<std::pair<const T2, V>>>;\r\ntemplate class std::map<T3, V, std::less<>, fancy_allocator<std::pair<const T3, V>>>;\r\n\r\ntemplate class std::multimap<T1, V, std::less<>, fancy_allocator<std::pair<const T1, V>>>;\r\ntemplate class std::multimap<T2, V, std::less<>, fancy_allocator<std::pair<const T2, V>>>;\r\ntemplate class std::multimap<T3, V, std::less<>, fancy_allocator<std::pair<const T3, V>>>;\r\n\r\ntemplate class std::set<T1, std::less<>, fancy_allocator<T1>>;\r\ntemplate class std::set<T2, std::less<>, fancy_allocator<T2>>;\r\ntemplate class std::set<T3, std::less<>, fancy_allocator<T3>>;\r\n\r\ntemplate class std::multiset<T1, std::less<>, fancy_allocator<T1>>;\r\ntemplate class std::multiset<T2, std::less<>, fancy_allocator<T2>>;\r\ntemplate class std::multiset<T3, std::less<>, fancy_allocator<T3>>;\r\n\r\ntemplate class std::unordered_map<T1, V, omni_hash, std::equal_to<>, fancy_allocator<std::pair<const T1, V>>>;\r\ntemplate class std::unordered_map<T2, V, omni_hash, std::equal_to<>, fancy_allocator<std::pair<const T2, V>>>;\r\ntemplate class std::unordered_map<T3, V, omni_hash, std::equal_to<>, fancy_allocator<std::pair<const T3, V>>>;\r\n\r\ntemplate class std::unordered_multimap<T1, V, omni_hash, std::equal_to<>, fancy_allocator<std::pair<const T1, V>>>;\r\ntemplate class std::unordered_multimap<T2, V, omni_hash, std::equal_to<>, fancy_allocator<std::pair<const T2, V>>>;\r\ntemplate class std::unordered_multimap<T3, V, omni_hash, std::equal_to<>, fancy_allocator<std::pair<const T3, V>>>;\r\n\r\ntemplate class std::unordered_set<T1, omni_hash, std::equal_to<>, fancy_allocator<T1>>;\r\ntemplate class std::unordered_set<T2, omni_hash, std::equal_to<>, fancy_allocator<T2>>;\r\ntemplate class std::unordered_set<T3, omni_hash, std::equal_to<>, fancy_allocator<T3>>;\r\n\r\ntemplate class std::unordered_multiset<T1, omni_hash, std::equal_to<>, fancy_allocator<T1>>;\r\ntemplate class std::unordered_multiset<T2, omni_hash, std::equal_to<>, fancy_allocator<T2>>;\r\ntemplate class std::unordered_multiset<T3, omni_hash, std::equal_to<>, fancy_allocator<T3>>;\r\n\r\ntemplate class std::basic_string<char, std::char_traits<char>, fancy_allocator<char>>;\r\ntemplate class std::basic_stringbuf<char, std::char_traits<char>, fancy_allocator<char>>;\r\n\r\n#if _HAS_CXX20\r\ntemplate class std::basic_syncbuf<char, std::char_traits<char>, fancy_allocator<char>>;\r\ntemplate class std::basic_osyncstream<char, std::char_traits<char>, fancy_allocator<char>>;\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(std::is_standard_layout_v<std::allocation_result<fancy_pointer<int>>>);\r\nSTATIC_ASSERT(!std::is_trivially_copyable_v<std::allocation_result<fancy_pointer<int>>>);\r\n\r\nSTATIC_ASSERT(std::is_same_v<decltype(std::allocator_traits<fancy_allocator<int>>::allocate_at_least(\r\n                                 std::declval<fancy_allocator<int>&>(), std::size_t{})),\r\n    std::allocation_result<fancy_pointer<int>>>);\r\n#endif // _HAS_CXX23\r\n\r\nvoid instantiate() {\r\n    random_iterators_test<std::deque<T1, fancy_allocator<T1>>>();\r\n    fwd_iterators_test<std::forward_list<T1, fancy_allocator<T1>>>();\r\n    bidi_iterators_test<std::list<T1, fancy_allocator<T1>>>();\r\n    random_iterators_test<std::vector<T1, fancy_allocator<T1>>>();\r\n    random_iterators_test<std::vector<bool, fancy_allocator<bool>>>();\r\n    bidi_iterators_test<std::set<int, std::less<>, fancy_allocator<int>>>();\r\n    random_iterators_test<std::basic_string<char, std::char_traits<char>, fancy_allocator<char>>>();\r\n}\r\n\r\n// Test that the fake vector _Hash uses to avoid allocator::construct is layout compatible with std::vector:\r\nusing vec      = std::vector<int>;\r\nusing hash_vec = std::_Hash_vec<std::allocator<int>>;\r\nSTATIC_ASSERT(sizeof(vec) == sizeof(hash_vec));\r\nSTATIC_ASSERT(alignof(vec) == alignof(hash_vec));\r\n\r\nusing vec_fancy      = std::vector<int, fancy_allocator<int>>;\r\nusing hash_vec_fancy = std::_Hash_vec<fancy_allocator<int>>;\r\nSTATIC_ASSERT(sizeof(vec_fancy) == sizeof(hash_vec_fancy));\r\nSTATIC_ASSERT(alignof(vec_fancy) == alignof(hash_vec_fancy));\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_has_static_rtti/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\rtti_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_has_static_rtti/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <exception>\r\n#include <functional>\r\n#include <memory>\r\n#include <regex>\r\n#include <stdexcept>\r\n#include <type_traits>\r\n#include <typeinfo>\r\n#include <utility>\r\n\r\n#if _HAS_CXX17\r\n#include <any> // verify that <any> can be included (with no effect) when static RTTI is disabled\r\n#endif // _HAS_CXX17\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <typename T, typename = void>\r\nstruct HasRethrowIfNested : false_type {};\r\n\r\ntemplate <typename T>\r\nstruct HasRethrowIfNested<T, void_t<decltype(rethrow_if_nested(declval<T>()))>> : true_type {};\r\n\r\n\r\ntemplate <typename T, typename U, typename = void>\r\nstruct HasDynamicPointerCast : false_type {};\r\n\r\ntemplate <typename T, typename U>\r\nstruct HasDynamicPointerCast<T, U, void_t<decltype(dynamic_pointer_cast<T>(declval<U>()))>> : true_type {};\r\n\r\n\r\ntemplate <typename T, typename U, typename = void>\r\nstruct HasGetDeleter : false_type {};\r\n\r\ntemplate <typename T, typename U>\r\nstruct HasGetDeleter<T, U, void_t<decltype(get_deleter<T>(declval<U>()))>> : true_type {};\r\n\r\n\r\ntemplate <typename T, typename = void>\r\nstruct HasTargetType : false_type {};\r\n\r\ntemplate <typename T>\r\nstruct HasTargetType<T, void_t<decltype(declval<T>().target_type())>> : true_type {};\r\n\r\n\r\ntemplate <typename T, typename U, typename = void>\r\nstruct HasTarget : false_type {};\r\n\r\ntemplate <typename T, typename U>\r\nstruct HasTarget<T, U, void_t<decltype(declval<T>().template target<U>())>> : true_type {};\r\n\r\n\r\nint main() {\r\n    {\r\n#ifdef _CPPRTTI\r\n        const runtime_error re(\"WOOF\");\r\n        rethrow_if_nested(re);\r\n\r\n        STATIC_ASSERT(HasRethrowIfNested<logic_error>::value);\r\n#else // _CPPRTTI\r\n        STATIC_ASSERT(!HasRethrowIfNested<logic_error>::value);\r\n#endif // _CPPRTTI\r\n    }\r\n\r\n    {\r\n#ifdef _CPPRTTI\r\n        const shared_ptr<exception> base      = make_shared<regex_error>(regex_constants::error_paren);\r\n        const shared_ptr<regex_error> derived = dynamic_pointer_cast<regex_error>(base);\r\n        assert(derived && derived->code() == regex_constants::error_paren);\r\n\r\n        STATIC_ASSERT(HasDynamicPointerCast<logic_error, shared_ptr<exception>>::value);\r\n#else // _CPPRTTI\r\n        STATIC_ASSERT(!HasDynamicPointerCast<logic_error, shared_ptr<exception>>::value);\r\n#endif // _CPPRTTI\r\n    }\r\n\r\n    {\r\n        shared_ptr<int> sp1(new int(11));\r\n        shared_ptr<int> sp2(new int(22), default_delete<int>{});\r\n        shared_ptr<int> sp3(new int(33), default_delete<int>{}, allocator<int>{});\r\n\r\n#if _HAS_STATIC_RTTI\r\n        assert(!get_deleter<default_delete<int>>(sp1));\r\n        assert(get_deleter<default_delete<int>>(sp2) != nullptr);\r\n        assert(get_deleter<default_delete<int>>(sp3) != nullptr);\r\n\r\n        STATIC_ASSERT(HasGetDeleter<default_delete<short>, shared_ptr<short>>::value);\r\n#else // _HAS_STATIC_RTTI\r\n        STATIC_ASSERT(!HasGetDeleter<default_delete<short>, shared_ptr<short>>::value);\r\n#endif // _HAS_STATIC_RTTI\r\n    }\r\n\r\n    {\r\n        function<int(int, int)> f(plus<>{});\r\n        const auto& c = f;\r\n\r\n        assert(f(123, 456) == 579);\r\n        assert(c(123, 456) == 579);\r\n\r\n#if _HAS_STATIC_RTTI\r\n        assert(f.target_type() == typeid(plus<>));\r\n        assert(c.target_type() == typeid(plus<>));\r\n        assert(f.target<plus<>>() != nullptr);\r\n        assert(c.target<plus<>>() != nullptr);\r\n        assert(!f.target<minus<>>());\r\n        assert(!c.target<minus<>>());\r\n\r\n        STATIC_ASSERT(HasTargetType<function<long(long, long)>>::value);\r\n        STATIC_ASSERT(HasTarget<function<long(long, long)>, multiplies<>>::value);\r\n        STATIC_ASSERT(HasTarget<const function<long(long, long)>, multiplies<>>::value);\r\n#else // _HAS_STATIC_RTTI\r\n        STATIC_ASSERT(!HasTargetType<function<long(long, long)>>::value);\r\n        STATIC_ASSERT(!HasTarget<function<long(long, long)>, multiplies<>>::value);\r\n        STATIC_ASSERT(!HasTarget<const function<long(long, long)>, multiplies<>>::value);\r\n#endif // _HAS_STATIC_RTTI\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_initialize_everything/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_initialize_everything/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstring>\r\n#include <initializer_list>\r\n#include <memory>\r\n#include <new>\r\n#include <string>\r\n#include <unordered_set>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\n#ifdef _WIN64\r\nconst size_t bad_size = 0xCCCC'CCCC'CCCC'CCCCULL;\r\n#else // ^^^ _WIN64 / !_WIN64 vvv\r\nconst size_t bad_size = 0xCCCC'CCCCUL;\r\n#endif // _WIN64\r\nconst unsigned long long default_state = 0xB01DFACEDEBAC1EULL;\r\n\r\ntemplate <typename T>\r\nstruct stateful_allocator {\r\n    unsigned long long state;\r\n\r\n    using value_type = T;\r\n    T* allocate(size_t n) {\r\n        return allocator<T>().allocate(n);\r\n    }\r\n\r\n    void deallocate(T* p, size_t n) {\r\n        allocator<T>().deallocate(p, n);\r\n    }\r\n\r\n    stateful_allocator() : state(default_state) {}\r\n    explicit stateful_allocator(unsigned long long s) : state(s) {}\r\n    stateful_allocator(const stateful_allocator&) = default;\r\n    template <typename U>\r\n    stateful_allocator(const stateful_allocator<U>& other) : state(other.state) {}\r\n\r\n    stateful_allocator& operator=(const stateful_allocator&) = delete;\r\n};\r\n\r\ntemplate <typename T, typename U>\r\nbool operator==(const stateful_allocator<T>& lhs, const stateful_allocator<U>& rhs) {\r\n    return lhs.state == rhs.state;\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nbool operator!=(const stateful_allocator<T>& lhs, const stateful_allocator<U>& rhs) {\r\n    return lhs.state != rhs.state;\r\n}\r\n\r\ntemplate <typename T>\r\nclass garbage_data {\r\nprivate:\r\n    alignas(T) unsigned char buf[sizeof(T)];\r\n    bool constructed;\r\n\r\npublic:\r\n    garbage_data() : constructed(false) {\r\n        memset(buf, 0xCC, sizeof(T));\r\n    }\r\n\r\n    garbage_data(const garbage_data&)            = delete;\r\n    garbage_data& operator=(const garbage_data&) = delete;\r\n\r\n    T& get() {\r\n        return *ptr();\r\n    }\r\n\r\n    T* ptr() {\r\n        return reinterpret_cast<T*>(buf);\r\n    }\r\n\r\n    T* operator->() {\r\n        return ptr();\r\n    }\r\n\r\n    ~garbage_data() {\r\n        if (constructed) {\r\n            ptr()->~T();\r\n        }\r\n    }\r\n\r\n    template <typename... Args>\r\n    void construct(Args&&... args) {\r\n        assert(!constructed);\r\n        ::new (static_cast<void*>(buf)) T(forward<Args>(args)...);\r\n        constructed = true;\r\n    }\r\n};\r\n\r\ntemplate <typename Alloc>\r\nvoid assert_string_invariants(basic_string<char, char_traits<char>, Alloc>& target, const char* const expected) {\r\n    const size_t expectedSize = strlen(expected);\r\n    assert(target.capacity() != bad_size);\r\n    assert(target.capacity() >= 15); // due to the small string optimization\r\n    assert(target.size() == expectedSize);\r\n    assert(target == expected);\r\n    const size_t oldSize = target.size();\r\n    target.push_back('a'); // in case the input is small\r\n    assert(target.size() == oldSize + 1);\r\n    assert(target[oldSize] == 'a');\r\n    const char longer[]      = \"some longer text to push over small string limit\";\r\n    const size_t longerChars = strlen(longer);\r\n    target.append(longer);\r\n    assert(target.size() == oldSize + 1 + longerChars);\r\n    assert(target.capacity() >= target.size());\r\n    assert(equal(target.end() - static_cast<ptrdiff_t>(longerChars), target.end(), longer,\r\n        longer + static_cast<ptrdiff_t>(longerChars)));\r\n}\r\n\r\nusing str_data_t       = garbage_data<string>;\r\nusing alloc_t          = stateful_allocator<char>;\r\nusing str_alloc_t      = basic_string<char, char_traits<char>, alloc_t>;\r\nusing str_data_alloc_t = garbage_data<str_alloc_t>;\r\n\r\nvoid test_case_string_construction_no_data() {\r\n    { // basic_string()\r\n        str_data_t testData;\r\n        testData.construct();\r\n        assert_string_invariants(testData.get(), \"\");\r\n\r\n        str_data_alloc_t testDataAlloc;\r\n        testDataAlloc.construct();\r\n        assert(testDataAlloc->get_allocator().state == default_state);\r\n        assert_string_invariants(testDataAlloc.get(), \"\");\r\n    }\r\n\r\n    { // basic_string(const Allocator& a)\r\n        str_data_alloc_t testDataAlloc;\r\n        testDataAlloc.construct(alloc_t{1729});\r\n        assert(testDataAlloc->get_allocator().state == 1729);\r\n        assert_string_invariants(testDataAlloc.get(), \"\");\r\n    }\r\n\r\n    { // basic_string(initializer_list<charT>, const Allocator& = Allocator());\r\n        str_data_t testData;\r\n        testData.construct(initializer_list<char>{'a', 'b'});\r\n        assert_string_invariants(testData.get(), \"ab\");\r\n\r\n        str_data_alloc_t testDataAlloc;\r\n        testDataAlloc.construct(initializer_list<char>{'a', 'b'});\r\n        assert(testDataAlloc->get_allocator().state == default_state);\r\n        assert_string_invariants(testDataAlloc.get(), \"ab\");\r\n\r\n        str_data_alloc_t testDataAlloc2;\r\n        testDataAlloc2.construct(initializer_list<char>{'a', 'b'}, alloc_t{42});\r\n        assert(testDataAlloc2->get_allocator().state == 42);\r\n        assert_string_invariants(testDataAlloc2.get(), \"ab\");\r\n    }\r\n}\r\n\r\nvoid test_case_string_construction(const string& source) {\r\n    const char* const sourceStr = source.c_str();\r\n    const str_alloc_t sourceAlloc(source.begin(), source.end(), alloc_t{1729});\r\n    const char oneChar[] = {source[1], '\\0'};\r\n\r\n\r\n    { // basic_string(const basic_string& str)\r\n        str_data_t testData;\r\n        testData.construct(source);\r\n        assert_string_invariants(testData.get(), sourceStr);\r\n\r\n        str_data_alloc_t testDataAlloc;\r\n        testDataAlloc.construct(sourceAlloc);\r\n        assert(testDataAlloc->get_allocator().state == 1729);\r\n        assert_string_invariants(testDataAlloc.get(), sourceStr);\r\n    }\r\n\r\n    { // basic_string(const basic_string&, const Allocator&)\r\n        str_data_alloc_t testDataAlloc;\r\n        testDataAlloc.construct(sourceAlloc, alloc_t{42});\r\n        assert(testDataAlloc->get_allocator().state == 42);\r\n        assert_string_invariants(testDataAlloc.get(), sourceStr);\r\n    }\r\n\r\n    { // basic_string(basic_string&& str)\r\n        string movedFrom{source};\r\n        str_data_t testData;\r\n        testData.construct(move(movedFrom));\r\n        assert_string_invariants(testData.get(), sourceStr);\r\n\r\n        str_alloc_t movedFromAlloc{sourceAlloc};\r\n        str_data_alloc_t testDataAlloc;\r\n        testDataAlloc.construct(move(movedFromAlloc));\r\n        assert(testDataAlloc->get_allocator().state == 1729);\r\n        assert_string_invariants(testDataAlloc.get(), sourceStr);\r\n    }\r\n\r\n    { // basic_string(basic_string&&, const Allocator&)\r\n        str_alloc_t movedFromAlloc{sourceAlloc};\r\n        str_data_alloc_t testDataAlloc;\r\n        testDataAlloc.construct(move(movedFromAlloc), alloc_t{42});\r\n        assert(testDataAlloc->get_allocator().state == 42);\r\n        assert_string_invariants(testDataAlloc.get(), sourceStr);\r\n    }\r\n\r\n    { // basic_string(const basic_string& str, size_type pos, const Allocator& a = Allocator());\r\n        str_data_t testData;\r\n        testData.construct(source, 1U);\r\n        assert_string_invariants(testData.get(), sourceStr + 1);\r\n\r\n        str_data_alloc_t testDataAlloc;\r\n        testDataAlloc.construct(sourceAlloc, 1U);\r\n        assert(testDataAlloc->get_allocator().state == default_state); // note: allocator not transferred\r\n        assert_string_invariants(testDataAlloc.get(), sourceStr + 1);\r\n\r\n        str_data_alloc_t testDataAlloc2;\r\n        testDataAlloc2.construct(sourceAlloc, 1U, alloc_t{42});\r\n        assert(testDataAlloc2->get_allocator().state == 42);\r\n        assert_string_invariants(testDataAlloc2.get(), sourceStr + 1);\r\n    }\r\n\r\n    { // basic_string(const basic_string& str, size_type pos, size_type n,\r\n        //              const Allocator& a = Allocator());\r\n        str_data_t testData;\r\n        testData.construct(source, 1U, 1U);\r\n        assert_string_invariants(testData.get(), oneChar);\r\n\r\n        str_data_alloc_t testDataAlloc;\r\n        testDataAlloc.construct(sourceAlloc, 1U, 1U);\r\n        assert(testDataAlloc->get_allocator().state == default_state); // note: allocator not transferred\r\n        assert_string_invariants(testDataAlloc.get(), oneChar);\r\n\r\n        str_data_alloc_t testDataAlloc2;\r\n        testDataAlloc2.construct(sourceAlloc, 1U, 1U, alloc_t{42});\r\n        assert(testDataAlloc2->get_allocator().state == 42);\r\n        assert_string_invariants(testDataAlloc2.get(), oneChar);\r\n    }\r\n\r\n    { // basic_string(const charT* s, const Allocator& a = Allocator());\r\n        str_data_t testData;\r\n        testData.construct(sourceStr);\r\n        assert_string_invariants(testData.get(), sourceStr);\r\n\r\n        str_data_alloc_t testDataAlloc;\r\n        testDataAlloc.construct(sourceStr);\r\n        assert(testDataAlloc->get_allocator().state == default_state);\r\n        assert_string_invariants(testDataAlloc.get(), sourceStr);\r\n\r\n        str_data_alloc_t testDataAlloc2;\r\n        testDataAlloc2.construct(sourceStr, alloc_t{42});\r\n        assert(testDataAlloc2->get_allocator().state == 42);\r\n        assert_string_invariants(testDataAlloc2.get(), sourceStr);\r\n    }\r\n\r\n    { // basic_string(const charT* s, size_type n, const Allocator& a = Allocator());\r\n        str_data_t testData;\r\n        testData.construct(sourceStr + 1, 1U);\r\n        assert_string_invariants(testData.get(), oneChar);\r\n\r\n        str_data_alloc_t testDataAlloc;\r\n        testDataAlloc.construct(sourceStr + 1, 1U);\r\n        assert(testDataAlloc->get_allocator().state == default_state);\r\n        assert_string_invariants(testDataAlloc.get(), oneChar);\r\n\r\n        str_data_alloc_t testDataAlloc2;\r\n        testDataAlloc2.construct(sourceStr + 1, 1U, alloc_t{42});\r\n        assert(testDataAlloc2->get_allocator().state == 42);\r\n        assert_string_invariants(testDataAlloc2.get(), oneChar);\r\n    }\r\n\r\n    { // basic_string(size_type n, charT c, const Allocator& a = Allocator());\r\n        str_data_t testData;\r\n        testData.construct(1U, source[1]);\r\n        assert_string_invariants(testData.get(), oneChar);\r\n\r\n        str_data_alloc_t testDataAlloc;\r\n        testDataAlloc.construct(1U, source[1]);\r\n        assert(testDataAlloc->get_allocator().state == default_state);\r\n        assert_string_invariants(testDataAlloc.get(), oneChar);\r\n\r\n        str_data_alloc_t testDataAlloc2;\r\n        testDataAlloc2.construct(1U, source[1], alloc_t{42});\r\n        assert(testDataAlloc2->get_allocator().state == 42);\r\n        assert_string_invariants(testDataAlloc2.get(), oneChar);\r\n    }\r\n\r\n    { // basic_string(InputIterator begin, InputIterator end, const Allocator& a = Allocator());\r\n        str_data_t testData;\r\n        testData.construct(source.begin(), source.end());\r\n        assert_string_invariants(testData.get(), sourceStr);\r\n\r\n        str_data_alloc_t testDataAlloc;\r\n        testDataAlloc.construct(source.begin(), source.end());\r\n        assert(testDataAlloc->get_allocator().state == default_state);\r\n        assert_string_invariants(testDataAlloc.get(), sourceStr);\r\n\r\n        str_data_alloc_t testDataAlloc2;\r\n        testDataAlloc2.construct(source.begin(), source.end(), alloc_t{42});\r\n        assert(testDataAlloc2->get_allocator().state == 42);\r\n        assert_string_invariants(testDataAlloc2.get(), sourceStr);\r\n    }\r\n}\r\n\r\nvoid test_case_VSO_802346_unordered_set() {\r\n    using TestType = garbage_data<unordered_set<int, hash<int>, equal_to<>, stateful_allocator<int>>>;\r\n    TestType source;\r\n    source.construct(size_t{}, stateful_allocator<int>(1234));\r\n    const auto oldBuckets = source.get().bucket_count();\r\n    assert(oldBuckets == unordered_set<int>().bucket_count());\r\n    TestType target;\r\n    target.construct(move(source.get()), stateful_allocator<int>(42));\r\n    assert(target.get().bucket_count() == oldBuckets);\r\n}\r\n\r\n// LWG-3195 \"What is the stored pointer value of an empty weak_ptr?\"\r\nvoid test_weak_ptr_construction() {\r\n    // NB: THIS IS SUPER NOT PORTABLE.\r\n    // TRANSITION, atomic<weak_ptr<T>>\r\n\r\n    int i = 42;\r\n    shared_ptr<int> x(shared_ptr<int>{}, &i);\r\n    const auto all_zero = [](const auto ptr) {\r\n        const auto first = reinterpret_cast<const char*>(ptr);\r\n        const auto last  = reinterpret_cast<const char*>(ptr + 1);\r\n        return all_of(first, last, [](const auto x) { return x == 0; });\r\n    };\r\n\r\n    { // Conversion from an empty shared_ptr lvalue with a non-null stored pointer value properly value-initializes\r\n        // both the control block and stored value pointers.\r\n        garbage_data<weak_ptr<int>> testData;\r\n        testData.construct(x);\r\n        assert(all_zero(testData.ptr()));\r\n    }\r\n\r\n    { // Conversion from an empty shared_ptr rvalue with a non-null stored pointer value properly value-initializes\r\n        // both the control block and stored value pointers.\r\n        garbage_data<weak_ptr<int>> testData;\r\n        testData.construct(shared_ptr<int>(x));\r\n        assert(all_zero(testData.ptr()));\r\n    }\r\n\r\n    x.reset(&i, [](int*) {});\r\n\r\n    const auto owner_eq = [](const auto& x, const auto& y) { return !(owner_less<>{}(x, y) || owner_less<>{}(y, x)); };\r\n\r\n    { // Conversion from a non-empty shared_ptr lvalue with a non-null stored pointer value properly initializes both\r\n        // the control block and stored value pointers.\r\n        garbage_data<weak_ptr<int>> testData;\r\n        testData.construct(x);\r\n        void* stored;\r\n        memcpy(&stored, testData.ptr(), sizeof(void*));\r\n        assert(stored == &i);\r\n        assert(owner_eq(testData.get(), x));\r\n    }\r\n\r\n    { // Conversion from a non-empty shared_ptr rvalue with a non-null stored pointer value properly initializes both\r\n        // the control block and stored value pointers.\r\n        garbage_data<weak_ptr<int>> testData;\r\n        testData.construct(shared_ptr<int>(x));\r\n        void* stored;\r\n        memcpy(&stored, testData.ptr(), sizeof(void*));\r\n        assert(stored == &i);\r\n        assert(owner_eq(testData.get(), x));\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_case_string_construction_no_data();\r\n    test_case_string_construction(\"abc\"); // < SSO\r\n    test_case_string_construction(\"abcd long text that is longer than the small string optimization\"); // > SSO\r\n    test_case_VSO_802346_unordered_set();\r\n    test_weak_ptr_construction();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_16_difference_type_1/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_16_difference_type_1/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// The instantiate_algorithm* tests take too long individually, so must be split into two parts.\r\n// instantiate_algorithms_op_deref.hpp contains the common test code.\r\n\r\n#define INSTANTIATE_ALGORITHMS_SPLIT_MODE 1\r\nusing test_difference_type = short;\r\n#include <instantiate_algorithms_op_deref.hpp>\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_16_difference_type_2/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_16_difference_type_2/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// The instantiate_algorithm* tests take too long individually, so must be split into two parts.\r\n// instantiate_algorithms_op_deref.hpp contains the common test code.\r\n\r\n#define INSTANTIATE_ALGORITHMS_SPLIT_MODE 2\r\nusing test_difference_type = short;\r\n#include <instantiate_algorithms_op_deref.hpp>\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_32_difference_type_1/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_32_difference_type_1/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// The instantiate_algorithm* tests take too long individually, so must be split into two parts.\r\n// instantiate_algorithms_op_deref.hpp contains the common test code.\r\n\r\n#define INSTANTIATE_ALGORITHMS_SPLIT_MODE 1\r\nusing test_difference_type = int;\r\n#include <instantiate_algorithms_op_deref.hpp>\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_32_difference_type_2/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_32_difference_type_2/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// The instantiate_algorithm* tests take too long individually, so must be split into two parts.\r\n// instantiate_algorithms_op_deref.hpp contains the common test code.\r\n\r\n#define INSTANTIATE_ALGORITHMS_SPLIT_MODE 2\r\nusing test_difference_type = int;\r\n#include <instantiate_algorithms_op_deref.hpp>\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_64_difference_type_1/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_64_difference_type_1/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// The instantiate_algorithm* tests take too long individually, so must be split into two parts.\r\n// instantiate_algorithms_op_deref.hpp contains the common test code.\r\n\r\n#define INSTANTIATE_ALGORITHMS_SPLIT_MODE 1\r\nusing test_difference_type = long long;\r\n#include <instantiate_algorithms_op_deref.hpp>\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_64_difference_type_2/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_64_difference_type_2/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// The instantiate_algorithm* tests take too long individually, so must be split into two parts.\r\n// instantiate_algorithms_op_deref.hpp contains the common test code.\r\n\r\n#define INSTANTIATE_ALGORITHMS_SPLIT_MODE 2\r\nusing test_difference_type = long long;\r\n#include <instantiate_algorithms_op_deref.hpp>\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_int_1/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_int_1/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// The instantiate_algorithm* tests take too long individually, so must be split into two parts.\r\n// instantiate_algorithms_int.hpp contains the common test code.\r\n\r\n#define INSTANTIATE_ALGORITHMS_SPLIT_MODE 1\r\n#include <instantiate_algorithms_int.hpp>\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_int_2/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_int_2/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// The instantiate_algorithm* tests take too long individually, so must be split into two parts.\r\n// instantiate_algorithms_int.hpp contains the common test code.\r\n\r\n#define INSTANTIATE_ALGORITHMS_SPLIT_MODE 2\r\n#include <instantiate_algorithms_int.hpp>\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_nontrivial_1/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_nontrivial_1/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// The instantiate_algorithm* tests take too long individually, so must be split into two parts.\r\n// instantiate_algorithms_nontrivial.hpp contains the common test code.\r\n\r\n#define INSTANTIATE_ALGORITHMS_SPLIT_MODE 1\r\n#include <instantiate_algorithms_nontrivial.hpp>\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_nontrivial_2/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_algorithms_nontrivial_2/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// The instantiate_algorithm* tests take too long individually, so must be split into two parts.\r\n// instantiate_algorithms_nontrivial.hpp contains the common test code.\r\n\r\n#define INSTANTIATE_ALGORITHMS_SPLIT_MODE 2\r\n#include <instantiate_algorithms_nontrivial.hpp>\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_containers/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_containers/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <bitset>\r\n#include <complex>\r\n#include <cstdio>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <initializer_list>\r\n#include <iterator>\r\n#include <list>\r\n#include <map>\r\n#include <memory>\r\n#include <numeric>\r\n#include <queue>\r\n#include <random>\r\n#include <set>\r\n#include <sstream>\r\n#include <stack>\r\n#include <string>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <valarray>\r\n#include <vector>\r\n\r\n#include <instantiate_containers_iterators_common.hpp>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <typename Tpl, typename Fx, size_t... Indices>\r\nvoid for_each_tuple_element_impl(Tpl&& Tuple, Fx Func, index_sequence<Indices...>) {\r\n    // call Func() on the Indices elements of Tuple\r\n    int ignored[] = {(static_cast<void>(Func(get<Indices>(forward<Tpl>(Tuple)))), 0)...};\r\n    (void) ignored;\r\n}\r\n\r\ntemplate <typename Tpl, typename Fx>\r\nvoid for_each_tuple_element(Tpl&& Tuple, Fx Func) { // call Func() on each element in Tuple\r\n    for_each_tuple_element_impl(\r\n        forward<Tpl>(Tuple), Func, make_index_sequence<tuple_size_v<remove_reference_t<Tpl>>>{});\r\n}\r\n\r\n// Use this type to ensure function templates are used instead\r\n// of regular member functions.\r\ntemplate <typename T>\r\nstruct convertible_type {\r\n    operator T() const {\r\n        return m_val;\r\n    }\r\n    T m_val;\r\n};\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\ntemplate <typename T>\r\nstruct tagged_falsity {\r\n    template <typename U>\r\n    bool operator()(U&&) const {\r\n        return false;\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nstruct tagged_less {\r\n    template <typename U, typename V>\r\n    bool operator()(const U& u, const V& v) const {\r\n        return u < v;\r\n    }\r\n};\r\n\r\ntemplate <typename Tag>\r\nstruct tagged_converter {\r\n    template <typename T, enable_if_t<is_scalar_v<T> || !is_convertible_v<T, bool>, int> = 0>\r\n    operator T() const {\r\n        return T{};\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nstruct holder {\r\n    T t;\r\n};\r\n\r\nstruct incomplete;\r\n\r\nusing validating_falsity   = tagged_falsity<holder<incomplete>>;\r\nusing validating_less      = tagged_less<holder<incomplete>>;\r\nusing validating_converter = tagged_converter<holder<incomplete>>;\r\n\r\nvector<shared_ptr<holder<incomplete>*>> unused_pointers_to_incompletable;\r\n#endif // ^^^ no workaround ^^^\r\n\r\ntemplate <typename T, typename U>\r\nvoid math_operators_test(T lhs, U rhs) {\r\n    USE_VALUE(lhs * rhs);\r\n    USE_VALUE(lhs / rhs);\r\n    USE_VALUE(lhs - rhs);\r\n    USE_VALUE(lhs + rhs);\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nvoid extended_math_operators_test(T lhs, U rhs) {\r\n    USE_VALUE(lhs % rhs);\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nvoid equals_math_operators_test(T lhs, U rhs) {\r\n    USE_VALUE(lhs *= rhs);\r\n    USE_VALUE(lhs /= rhs);\r\n    USE_VALUE(lhs -= rhs);\r\n    USE_VALUE(lhs += rhs);\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nvoid bitwise_and_logical_operators_test(T lhs, U rhs) {\r\n    USE_VALUE(lhs ^ rhs);\r\n    USE_VALUE(lhs & rhs);\r\n    USE_VALUE(lhs | rhs);\r\n    USE_VALUE(lhs << rhs);\r\n    USE_VALUE(lhs >> rhs);\r\n    USE_VALUE(lhs && rhs);\r\n    USE_VALUE(lhs || rhs);\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nvoid logical_operators_test(T lhs, U rhs) {\r\n    USE_VALUE(lhs && rhs);\r\n    USE_VALUE(lhs || rhs);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid typical_forward_only_iterator_test(T value) {\r\n    (void) begin(value);\r\n    (void) cbegin(value);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid typical_iterator_test(T value) {\r\n    typical_forward_only_iterator_test(value);\r\n    (void) rbegin(value);\r\n    (void) crbegin(value);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid typical_random_access_iterator_test(T value) {\r\n    typical_iterator_test(value);\r\n\r\n    random_access_iterator_test(begin(value));\r\n    random_access_iterator_test(rbegin(value));\r\n    random_access_iterator_test(cbegin(value));\r\n    random_access_iterator_test(crbegin(value));\r\n}\r\n\r\ntemplate <typename T>\r\nvoid construct_from_iterators_test(T value) {\r\n    auto containers = get_all_iterator_types_for(value);\r\n\r\n    for_each_tuple_element(containers, [&](auto c) {\r\n        T another(begin(c), end(c));\r\n        T another2(begin(c), end(c), value.get_allocator());\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n        validating_converter arr[1]{};\r\n        T another_no_adl(+arr, +arr);\r\n        T another_no_adl2(+arr, +arr, value.get_allocator());\r\n#endif // ^^^ no workaround ^^^\r\n    });\r\n}\r\n\r\ntemplate <typename T>\r\nvoid construct_tree_containers_from_iterators_test(T value) {\r\n    auto containers = get_all_iterator_types_for(value);\r\n\r\n    for_each_tuple_element(containers, [&](auto c) {\r\n        T another(begin(c), end(c));\r\n        T another2(begin(c), end(c), value.key_comp());\r\n        T another3(begin(c), end(c), value.key_comp(), value.get_allocator());\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n        validating_converter arr[1]{};\r\n        T another_no_adl(+arr, +arr);\r\n        T another_no_adl2(+arr, +arr, value.key_comp());\r\n        T another_no_adl3(+arr, +arr, value.key_comp(), value.get_allocator());\r\n#endif // ^^^ no workaround ^^^\r\n    });\r\n}\r\n\r\ntemplate <typename T>\r\nvoid construct_hash_containers_from_iterators_test(T value) {\r\n    auto containers = get_all_iterator_types_for(value);\r\n\r\n    for_each_tuple_element(containers, [&](auto c) {\r\n        T another(begin(c), end(c));\r\n        T another2(begin(c), end(c), value.bucket_count());\r\n        T another3(begin(c), end(c), value.bucket_count(), value.hash_function());\r\n        T another4(begin(c), end(c), value.bucket_count(), value.hash_function(), value.key_eq());\r\n        T another5(\r\n            begin(c), end(c), value.bucket_count(), value.hash_function(), value.key_eq(), value.get_allocator());\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n        validating_converter arr[1]{};\r\n        T another_no_adl(+arr, +arr);\r\n        T another_no_adl2(+arr, +arr, value.bucket_count());\r\n        T another_no_adl3(+arr, +arr, value.bucket_count(), value.hash_function());\r\n        T another_no_adl4(+arr, +arr, value.bucket_count(), value.hash_function(), value.key_eq());\r\n        T another_no_adl5(\r\n            +arr, +arr, value.bucket_count(), value.hash_function(), value.key_eq(), value.get_allocator());\r\n#endif // ^^^ no workaround ^^^\r\n    });\r\n}\r\n\r\ntemplate <typename T>\r\nvoid emplace_test(T value) {\r\n    convertible_type<typename T::value_type> element{};\r\n    value.emplace(element);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid emplace_front_test(T value) {\r\n    convertible_type<typename T::value_type> element{};\r\n    value.emplace_front(element);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid emplace_middle_back_test(T value) {\r\n    convertible_type<typename T::value_type> element{};\r\n    value.emplace(cbegin(value), element);\r\n    value.emplace_back(element);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid try_emplace_test(T value) {\r\n    convertible_type<typename T::key_type> key_element{};\r\n    convertible_type<typename T::mapped_type> mapped_element{};\r\n    value.try_emplace(key_element, mapped_element);\r\n    value.try_emplace(cbegin(value), key_element, mapped_element);\r\n    value.try_emplace(move(key_element), mapped_element);\r\n    value.try_emplace(cbegin(value), move(key_element), mapped_element);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid insert_or_assign_test(T value) {\r\n    convertible_type<typename T::key_type> key_element{};\r\n    convertible_type<typename T::mapped_type> mapped_element{};\r\n    value.insert_or_assign(key_element, mapped_element);\r\n    value.insert_or_assign(cbegin(value), key_element, mapped_element);\r\n    value.insert_or_assign(move(key_element), mapped_element);\r\n    value.insert_or_assign(cbegin(value), move(key_element), mapped_element);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid assign_test(T value) {\r\n    T another{};\r\n    another.assign(begin(value), end(value));\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n    validating_converter arr[1]{};\r\n    another.assign(+arr, +arr);\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n\r\ntemplate <typename T>\r\nvoid insert_with_iterator_test(T value) {\r\n    T another{};\r\n    another.insert(begin(value), end(value));\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n    validating_converter arr[1]{};\r\n    another.insert(+arr, +arr);\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n\r\ntemplate <typename T>\r\nvoid erase_if_test(T value) {\r\n#if _HAS_CXX20\r\n    auto pr1 = [](auto) { return false; };\r\n    std::erase_if(value, pr1);\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n    std::erase_if(value, validating_falsity{});\r\n#endif // ^^^ no workaround ^^^\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    (void) value;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n}\r\n\r\ntemplate <typename T>\r\nvoid erase_test(T value) {\r\n#if _HAS_CXX20\r\n    std::erase(value, static_cast<typename T::value_type>(1));\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    (void) value;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n}\r\n\r\ntemplate <typename T>\r\nvoid insert_with_iterator_specific_location_test(T value) {\r\n    T another{};\r\n    another.insert(cbegin(another), begin(value), end(value));\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n    validating_converter arr[1]{};\r\n    another.insert(cbegin(another), +arr, +arr);\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n\r\ntemplate <typename T>\r\nvoid insert_associative_direct_test(T value) {\r\n    convertible_type<typename T::value_type> value_element{};\r\n    value.insert(value_element);\r\n    value.insert(cbegin(value), value_element);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid list_operation_test(T value) {\r\n    auto pr1 = [](int) { return false; };\r\n    auto pr2 = [](int, int) { return false; };\r\n\r\n    T another{};\r\n    value.remove_if(pr1);\r\n    value.unique(pr2);\r\n    value.merge(another, pr2);\r\n    value.merge(move(another), pr2);\r\n    value.sort(pr2);\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n    value.remove_if(validating_falsity{});\r\n    value.unique(validating_less{});\r\n    value.merge(another, validating_less{});\r\n    value.merge(move(another), validating_less{});\r\n    value.sort(validating_less{});\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n\r\ntemplate <typename T>\r\nvoid tree_baseclass_test(T value) {\r\n    // Tests for anything inheriting from _Tree in <xtree>\r\n    convertible_type<typename T::value_type> value_element{};\r\n    convertible_type<typename T::key_type> key_element{};\r\n    value.insert(value_element);\r\n    value.insert(cbegin(value), value_element);\r\n    emplace_test(value);\r\n    value.emplace_hint(cbegin(value), value_element);\r\n    (void) value.find(key_element);\r\n\r\n    const T const_value{};\r\n    (void) const_value.find(key_element);\r\n\r\n    (void) value.count(key_element);\r\n    (void) value.lower_bound(key_element);\r\n    (void) const_value.lower_bound(key_element);\r\n    (void) value.upper_bound(key_element);\r\n    (void) const_value.upper_bound(key_element);\r\n    (void) value.equal_range(key_element);\r\n    (void) const_value.equal_range(key_element);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid hash_baseclass_test(T value) {\r\n    convertible_type<typename T::value_type> value_element{};\r\n    value.insert(value_element);\r\n    value.insert(cbegin(value), value_element);\r\n    emplace_test(value);\r\n    value.emplace_hint(cbegin(value), value_element);\r\n    T another{};\r\n    another.insert(begin(value), end(value));\r\n}\r\n\r\nvoid array_test() {\r\n    array<int, 5> value{{0, 1, 2, 3, 4}};\r\n    typical_random_access_iterator_test(value);\r\n    swap_test(value);\r\n    comparable_test(value);\r\n    (void) get<0>(value);\r\n    const array<int, 5> another{{0, 1, 2, 3, 4}};\r\n    (void) get<0>(another);\r\n    (void) get<0>(move(value));\r\n    (void) get<0>(move(another));\r\n\r\n    array<int, 0> another2{};\r\n    typical_random_access_iterator_test(another2);\r\n    swap_test(another2);\r\n    comparable_test(another2);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid bitset_operations_test(T value) {\r\n    T another = value;\r\n    (void) (value & another);\r\n    (void) (value | another);\r\n    (void) (value ^ another);\r\n\r\n    istringstream input(\"0010100101\");\r\n    input >> value;\r\n\r\n    ostringstream output;\r\n    output << value;\r\n\r\n    hash_test(value);\r\n}\r\n\r\nvoid bitset_test() {\r\n    bitset<5> value{};\r\n    bitset<5> another(string(\"0100010101\"));\r\n    bitset<5> another2(\"0100010101\");\r\n\r\n    bitset_operations_test(value);\r\n    bitset_operations_test(another);\r\n    bitset_operations_test(another2);\r\n}\r\n\r\nvoid deque_test() {\r\n    deque<int> value{};\r\n    swap_test(value);\r\n    comparable_test(value);\r\n    typical_random_access_iterator_test(value);\r\n    construct_from_iterators_test(value);\r\n    emplace_middle_back_test(value);\r\n    emplace_front_test(value);\r\n    assign_test(value);\r\n    insert_with_iterator_specific_location_test(value);\r\n    erase_if_test(value);\r\n    erase_test(value);\r\n}\r\n\r\nvoid forward_list_test() {\r\n    static_assert(\r\n        is_nothrow_default_constructible_v<forward_list<int>>, \"strengthened noexcept on forward_list::forward_list()\");\r\n    static_assert(is_nothrow_move_constructible_v<forward_list<int>>,\r\n        \"strengthened noexcept on forward_list::forward_list(forward_list&&)\");\r\n    static_assert(is_nothrow_move_assignable_v<forward_list<int>>,\r\n        \"strengthened noexcept on forward_list& forward_list::operator=(forward_list&&)\");\r\n\r\n    forward_list<int> value{};\r\n    swap_test(value);\r\n    comparable_test(value);\r\n    construct_from_iterators_test(value);\r\n\r\n    typical_forward_only_iterator_test(value);\r\n\r\n    assign_test(value);\r\n\r\n    forward_list<int> another;\r\n    another.insert_after(cbegin(another), begin(value), end(value));\r\n    another.emplace_front(1);\r\n    another.emplace_after(cbegin(another), 2);\r\n\r\n    list_operation_test(value);\r\n    erase_if_test(value);\r\n    erase_test(value);\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n    validating_converter arr[1]{};\r\n    another.insert_after(cbegin(another), +arr, +arr);\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n\r\nvoid initializer_list_test() {\r\n    initializer_list<int> value{};\r\n    (void) begin(value);\r\n    (void) end(value);\r\n}\r\n\r\nvoid list_test() {\r\n    list<int> value{};\r\n    swap_test(value);\r\n    comparable_test(value);\r\n    typical_iterator_test(value);\r\n    construct_from_iterators_test(value);\r\n    emplace_middle_back_test(value);\r\n    emplace_front_test(value);\r\n    assign_test(value);\r\n    insert_with_iterator_specific_location_test(value);\r\n    list_operation_test(value);\r\n    erase_if_test(value);\r\n    erase_test(value);\r\n}\r\n\r\nvoid map_test() {\r\n    map<int, int> value{};\r\n    tree_baseclass_test(value);\r\n    swap_test(value);\r\n    comparable_test(value);\r\n    typical_iterator_test(value);\r\n    construct_tree_containers_from_iterators_test(value);\r\n    emplace_test(value);\r\n    try_emplace_test(value);\r\n    insert_or_assign_test(value);\r\n    insert_associative_direct_test(value);\r\n    erase_if_test(value);\r\n}\r\n\r\nvoid multimap_test() {\r\n    multimap<int, int> value{};\r\n    tree_baseclass_test(value);\r\n    swap_test(value);\r\n    comparable_test(value);\r\n    typical_iterator_test(value);\r\n    construct_tree_containers_from_iterators_test(value);\r\n    emplace_test(value);\r\n    insert_with_iterator_test(value);\r\n    insert_associative_direct_test(value);\r\n    erase_if_test(value);\r\n}\r\n\r\nvoid priority_queue_test() {\r\n    priority_queue<int> value{};\r\n    vector<int> cont{};\r\n\r\n    priority_queue<int> another(begin(cont), end(cont));\r\n    priority_queue<int> another2(begin(cont), end(cont), less<int>());\r\n    priority_queue<int> another3(begin(cont), end(cont), less<int>(), cont);\r\n    priority_queue<int> another4(cont.get_allocator());\r\n    priority_queue<int> another5(less<int>(), cont.get_allocator());\r\n    priority_queue<int> another6(less<int>(), cont, cont.get_allocator());\r\n    priority_queue<int> another7(another6, cont.get_allocator());\r\n    priority_queue<int> another8(begin(cont), end(cont), less<int>(), move(cont));\r\n    priority_queue<int> another9(less<int>(), move(cont), cont.get_allocator());\r\n    priority_queue<int> another10(move(another9), cont.get_allocator());\r\n\r\n    emplace_test(value);\r\n    swap(value, another);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid stack_queue_test() {\r\n    T value{};\r\n    deque<int> cont{};\r\n\r\n    T another(cont.get_allocator());\r\n    T another2(value, cont.get_allocator());\r\n    T another3(cont, cont.get_allocator());\r\n    T another4(move(value), cont.get_allocator());\r\n    T another5(move(cont), cont.get_allocator());\r\n\r\n    emplace_test(value);\r\n    swap_test(value);\r\n    comparable_test(value);\r\n}\r\n\r\nvoid stack_test() {\r\n    stack_queue_test<stack<int>>();\r\n}\r\n\r\nvoid set_test() {\r\n    set<int> value{};\r\n    tree_baseclass_test(value);\r\n    swap_test(value);\r\n    comparable_test(value);\r\n    typical_iterator_test(value);\r\n    construct_tree_containers_from_iterators_test(value);\r\n    insert_with_iterator_test(value);\r\n    insert_associative_direct_test(value);\r\n    erase_if_test(value);\r\n}\r\n\r\nvoid multiset_test() {\r\n    multiset<int> value{};\r\n    tree_baseclass_test(value);\r\n    swap_test(value);\r\n    comparable_test(value);\r\n    typical_iterator_test(value);\r\n    construct_tree_containers_from_iterators_test(value);\r\n    emplace_test(value);\r\n    insert_with_iterator_test(value);\r\n    insert_associative_direct_test(value);\r\n    erase_if_test(value);\r\n}\r\n\r\nvoid queue_test() {\r\n    stack_queue_test<queue<int>>();\r\n}\r\n\r\ntemplate <typename T>\r\nvoid vector_test_impl() {\r\n    T value{};\r\n    swap_test(value);\r\n    comparable_test(value);\r\n    typical_random_access_iterator_test(value);\r\n    construct_from_iterators_test(value);\r\n    emplace_middle_back_test(value);\r\n    assign_test(value);\r\n    insert_with_iterator_specific_location_test(value);\r\n    erase_if_test(value);\r\n}\r\n\r\nvoid vector_test() {\r\n    vector_test_impl<vector<int>>();\r\n    vector_test_impl<vector<bool>>();\r\n\r\n    erase_test(vector<int>());\r\n#if _HAS_CXX20\r\n    vector<bool> vb;\r\n    std::erase(vb, true);\r\n#endif // _HAS_CXX20\r\n\r\n    hash_test(vector<bool>());\r\n}\r\n\r\ntemplate <typename CharType>\r\nvoid string_test_impl(const CharType* data) {\r\n    using T = basic_string<CharType>;\r\n    T value = data;\r\n    swap_test(value);\r\n    comparable_test(value);\r\n    typical_random_access_iterator_test(value);\r\n    construct_from_iterators_test(value);\r\n\r\n    T another = data;\r\n    another.append(begin(value), end(value));\r\n    assign_test(value);\r\n    insert_with_iterator_specific_location_test(value);\r\n\r\n    value.replace(cbegin(value), cend(value), begin(another), end(another));\r\n\r\n    const T const_value        = data;\r\n    T mut_value                = data;\r\n    const CharType* cstr_value = data;\r\n    const CharType char_value  = data[0];\r\n    (void) (const_value + const_value);\r\n    (void) (cstr_value + const_value);\r\n    (void) (char_value + const_value);\r\n    (void) (const_value + cstr_value);\r\n    (void) (const_value + char_value);\r\n    (void) (const_value + move(mut_value));\r\n    (void) (move(mut_value) + const_value);\r\n    (void) (move(mut_value) + move(mut_value));\r\n    (void) (cstr_value + move(mut_value));\r\n    (void) (char_value + move(mut_value));\r\n    (void) (move(mut_value) + cstr_value);\r\n    (void) (move(mut_value) + char_value);\r\n\r\n    comparable_test(const_value, cstr_value);\r\n    comparable_test(cstr_value, const_value);\r\n    hash_test(value);\r\n\r\n    erase_if_test(value);\r\n    erase_test(value);\r\n\r\n#ifndef _M_CEE // TRANSITION, VSO-1659496\r\n    validating_converter arr[1]{};\r\n    another.append(+arr, +arr);\r\n    another.replace(cbegin(another), cend(another), +arr, +arr);\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n\r\nvoid string_test() {\r\n    string_test_impl(\"test1\");\r\n    string_test_impl(L\"test2\");\r\n    string_test_impl(u\"test3\");\r\n    string_test_impl(U\"test4\");\r\n}\r\n\r\ntemplate <typename CharType>\r\nvoid stringstream_test_impl(const CharType* data) {\r\n    basic_string<CharType> value;\r\n\r\n    // basic_istream\r\n    basic_istringstream<CharType> input(data);\r\n    input >> value;\r\n    getline(input, value);\r\n\r\n    // basic_ostream\r\n    basic_ostringstream<CharType> output;\r\n    output << value;\r\n}\r\n\r\nvoid stringstream_test() {\r\n    stringstream_test_impl(\"test1\");\r\n    stringstream_test_impl(L\"test2\");\r\n\r\n    // stringstream_test_impl(u\"test3\"); would instantiate ctype<char16_t>\r\n    // stringstream_test_impl(U\"test4\"); would instantiate ctype<char32_t>\r\n}\r\n\r\nvoid unordered_map_test() {\r\n    unordered_map<int, int> value{};\r\n    hash_baseclass_test(value);\r\n    swap_test(value);\r\n    equality_test(value);\r\n    construct_hash_containers_from_iterators_test(value);\r\n    (void) begin(value); // no rbegin\r\n    (void) cbegin(value);\r\n    emplace_test(value);\r\n    try_emplace_test(value);\r\n    insert_or_assign_test(value);\r\n    insert_with_iterator_test(value);\r\n    insert_associative_direct_test(value);\r\n    erase_if_test(value);\r\n}\r\n\r\nvoid unordered_multimap_test() {\r\n    unordered_multimap<int, int> value{};\r\n    hash_baseclass_test(value);\r\n    swap_test(value);\r\n    equality_test(value);\r\n    construct_hash_containers_from_iterators_test(value);\r\n    insert_associative_direct_test(value);\r\n    emplace_test(value);\r\n    insert_with_iterator_test(value);\r\n    erase_if_test(value);\r\n}\r\n\r\nvoid unordered_set_test() {\r\n    unordered_set<int> value{};\r\n    hash_baseclass_test(value);\r\n    swap_test(value);\r\n    equality_test(value);\r\n    construct_hash_containers_from_iterators_test(value);\r\n    (void) begin(value); // no rbegin\r\n    (void) cbegin(value);\r\n    emplace_test(value);\r\n    insert_with_iterator_test(value);\r\n    insert_associative_direct_test(value);\r\n    erase_if_test(value);\r\n}\r\n\r\nvoid unordered_multiset_test() {\r\n    unordered_multiset<int> value{};\r\n    hash_baseclass_test(value);\r\n    swap_test(value);\r\n    equality_test(value);\r\n    construct_hash_containers_from_iterators_test(value);\r\n    insert_associative_direct_test(value);\r\n    emplace_test(value);\r\n    insert_with_iterator_test(value);\r\n    erase_if_test(value);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid extended_math_functions_test(T value) {\r\n    (void) abs(value);\r\n    (void) acos(value);\r\n    (void) asin(value);\r\n    (void) atan(value);\r\n    (void) cos(value);\r\n    (void) cosh(value);\r\n    (void) exp(value);\r\n    (void) log(value);\r\n    (void) log10(value);\r\n    (void) pow(value, value);\r\n    (void) sin(value);\r\n    (void) sinh(value);\r\n    (void) sqrt(value);\r\n    (void) tan(value);\r\n    (void) tanh(value);\r\n}\r\n\r\n// cbegin() calls begin() fully qualified, so cannot\r\n// find valarray non-member begin().\r\n\r\nnamespace std {\r\n    template <typename T>\r\n    const T* cbegin(valarray<T>& arr) {\r\n        return begin(arr); // unqualified\r\n    }\r\n} // namespace std\r\n\r\nvoid valarray_test() {\r\n    valarray<int> value{};\r\n    value.resize(20);\r\n    iota(begin(value), end(value), 1);\r\n\r\n    swap_test(value);\r\n    typical_forward_only_iterator_test(value);\r\n\r\n    math_operators_test(1, value);\r\n    math_operators_test(value, 1);\r\n    math_operators_test(value, value);\r\n    extended_math_operators_test(1, value);\r\n    extended_math_operators_test(value, 1);\r\n    extended_math_operators_test(value, value);\r\n    bitwise_and_logical_operators_test(1, value);\r\n    bitwise_and_logical_operators_test(value, 1);\r\n    bitwise_and_logical_operators_test(value, value);\r\n\r\n    comparable_test(value, 1);\r\n    comparable_test(1, value);\r\n    comparable_test(value, value);\r\n\r\n    valarray<double> val_dbl{};\r\n    extended_math_functions_test(val_dbl);\r\n    (void) atan2(val_dbl, val_dbl);\r\n    (void) atan2(val_dbl, 1.0);\r\n    (void) atan2(1.0, val_dbl);\r\n    (void) pow(val_dbl, 1.0);\r\n    (void) pow(1.0, val_dbl);\r\n\r\n    slice sl{0, 1, 2};\r\n    slice_array<int> sa = value[sl];\r\n    (void) sa;\r\n\r\n    gslice gsl{0, {1, 2}, {3, 4}};\r\n    gslice_array<int> gsa = value[gsl];\r\n\r\n    mask_array<int> ma = value[value > 2];\r\n\r\n    valarray<size_t> idx   = {1, 2, 3, 4, 5};\r\n    indirect_array<int> ia = value[idx];\r\n\r\n    // LWG-3074 \"Non-member functions for valarray should only deduce from the valarray\"\r\n    constexpr short sh = 1;\r\n    math_operators_test(sh, value);\r\n    math_operators_test(value, sh);\r\n    extended_math_operators_test(sh, value);\r\n    extended_math_operators_test(value, sh);\r\n    bitwise_and_logical_operators_test(sh, value);\r\n    bitwise_and_logical_operators_test(value, sh);\r\n    comparable_test(value, sh);\r\n    comparable_test(sh, value);\r\n    (void) atan2(val_dbl, sh);\r\n    (void) atan2(sh, val_dbl);\r\n    (void) pow(val_dbl, sh);\r\n    (void) pow(sh, val_dbl);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid complex_test_impl(T value) {\r\n    istringstream input(\"1\");\r\n    input >> value;\r\n\r\n    ostringstream output;\r\n    output << value;\r\n\r\n    math_operators_test(value, value);\r\n    equals_math_operators_test(value, value);\r\n\r\n    extended_math_functions_test(value);\r\n    (void) arg(value);\r\n    (void) conj(value);\r\n    (void) proj(value);\r\n    (void) norm(value);\r\n    (void) polar(1.0, 2.0);\r\n    STATIC_ASSERT(is_same_v<complex<double>, decltype(polar(1.0, 2.0))>);\r\n    (void) polar<float>(1.0, 2.0);\r\n    STATIC_ASSERT(is_same_v<complex<float>, decltype(polar<float>(1.0, 2.0))>);\r\n    (void) polar(1.0);\r\n    (void) imag(value);\r\n    (void) real(value);\r\n    (void) acosh(value);\r\n    (void) asinh(value);\r\n    (void) atanh(value);\r\n    (void) pow(value, 1);\r\n    (void) pow(1, value);\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nvoid complex_test_complex(T lhs, U rhs) {\r\n    equals_math_operators_test(lhs, rhs);\r\n    equals_math_operators_test(rhs, lhs);\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nvoid complex_test_pow_common_float(T complex_val, U arithmetic_val) {\r\n    (void) pow(complex_val, arithmetic_val);\r\n    (void) pow(arithmetic_val, complex_val);\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nvoid complex_test_arithmetic(T complex_val, U arithmetic_val) {\r\n    math_operators_test(complex_val, arithmetic_val);\r\n    math_operators_test(arithmetic_val, complex_val);\r\n    equals_math_operators_test(complex_val, arithmetic_val);\r\n    (void) pow(complex_val, arithmetic_val);\r\n    (void) pow(arithmetic_val, complex_val);\r\n}\r\n\r\nvoid complex_test() {\r\n    complex<float> cf        = 1if;\r\n    complex<double> cd       = 1i;\r\n    complex<long double> cld = 1il;\r\n\r\n    float f        = 2.0f;\r\n    double d       = 2.0;\r\n    long double ld = 2.0;\r\n    short s        = 2;\r\n    int i          = 2;\r\n\r\n    complex_test_impl(cf);\r\n    complex_test_impl(cd);\r\n    complex_test_impl(cld);\r\n\r\n    complex_test_complex(cf, cd);\r\n    complex_test_complex(cf, cld);\r\n    complex_test_arithmetic(cf, f);\r\n\r\n    complex_test_complex(cd, cf);\r\n    complex_test_complex(cd, cld);\r\n    complex_test_arithmetic(cd, d);\r\n\r\n    complex_test_complex(cld, cf);\r\n    complex_test_complex(cld, cd);\r\n    complex_test_arithmetic(cld, ld);\r\n\r\n    // no complex_test_pow_common_float for complex<int>\r\n    // complex<float/double/long double> don't have converting\r\n    // constructors for types that are not float/double/long double.\r\n\r\n    complex_test_pow_common_float(cf, d);\r\n    complex_test_pow_common_float(cf, ld);\r\n\r\n    complex_test_pow_common_float(cd, f);\r\n    complex_test_pow_common_float(cd, ld);\r\n\r\n    complex_test_pow_common_float(cld, f);\r\n    complex_test_pow_common_float(cld, d);\r\n\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cld, cld)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cld, ld)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cld, cd)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cld, d)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cld, s)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cld, i)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cld, cf)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cld, f)), complex<long double>>);\r\n\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cd, cld)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cd, ld)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cd, cd)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cd, d)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cd, s)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cd, i)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cd, cf)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cd, f)), complex<double>>);\r\n\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cf, cld)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cf, ld)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cf, cd)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cf, d)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cf, s)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cf, i)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cf, cf)), complex<float>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cf, f)), complex<float>>);\r\n\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cld, cld)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(ld, cld)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cd, cld)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(d, cld)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(s, cld)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(i, cld)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cf, cld)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(f, cld)), complex<long double>>);\r\n\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cld, cd)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(ld, cd)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cd, cd)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(d, cd)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(s, cd)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(i, cd)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cf, cd)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(f, cd)), complex<double>>);\r\n\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cld, cf)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(ld, cf)), complex<long double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cd, cf)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(d, cf)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(s, cf)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(i, cf)), complex<double>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(cf, cf)), complex<float>>);\r\n    STATIC_ASSERT(is_same_v<decltype(pow(f, cf)), complex<float>>);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_iterators_misc/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_iterators_misc/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _HAS_DEPRECATED_ADAPTOR_TYPEDEFS     1\r\n#define _HAS_DEPRECATED_ALLOCATOR_MEMBERS    1\r\n#define _HAS_DEPRECATED_NEGATORS             1\r\n#define _HAS_DEPRECATED_RAW_STORAGE_ITERATOR 1\r\n#define _HAS_DEPRECATED_TEMPORARY_BUFFER     1\r\n#define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING\r\n#define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING\r\n#define _SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING\r\n#define _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING\r\n#define _SILENCE_CXX17_RAW_STORAGE_ITERATOR_DEPRECATION_WARNING\r\n#define _SILENCE_CXX17_TEMPORARY_BUFFER_DEPRECATION_WARNING\r\n#define _SILENCE_CXX20_ATOMIC_INIT_DEPRECATION_WARNING\r\n#define _SILENCE_CXX20_CODECVT_FACETS_DEPRECATION_WARNING\r\n#define _SILENCE_CXX20_OLD_SHARED_PTR_ATOMIC_SUPPORT_DEPRECATION_WARNING\r\n#define _SILENCE_CXX20_REL_OPS_DEPRECATION_WARNING\r\n#define _SILENCE_CXX20_U8PATH_DEPRECATION_WARNING\r\n#define _SILENCE_CXX20_VOLATILE_DEPRECATION_WARNING\r\n#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <ccomplex>\r\n#include <cctype>\r\n#include <cerrno>\r\n#include <cfenv>\r\n#include <cfloat>\r\n#include <chrono>\r\n#include <cinttypes>\r\n#include <climits>\r\n#include <clocale>\r\n#include <cmath>\r\n#include <codecvt>\r\n#include <csetjmp>\r\n#include <csignal>\r\n#include <cstdalign>\r\n#include <cstdarg>\r\n#include <cstdbool>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <ctgmath>\r\n#include <ctime>\r\n#include <cuchar>\r\n#include <cwchar>\r\n#include <cwctype>\r\n#include <deque>\r\n#include <exception>\r\n#include <forward_list>\r\n#include <fstream>\r\n#include <functional>\r\n#include <initializer_list>\r\n#include <iomanip>\r\n#include <ios>\r\n#include <iosfwd>\r\n#include <iostream>\r\n#include <iso646.h>\r\n#include <istream>\r\n#include <iterator>\r\n#include <limits>\r\n#include <list>\r\n#include <locale>\r\n#include <memory>\r\n#include <new>\r\n#include <numeric>\r\n#include <ostream>\r\n#include <random>\r\n#include <ratio>\r\n#include <regex>\r\n#include <scoped_allocator>\r\n#include <sstream>\r\n#include <stdexcept>\r\n#include <streambuf>\r\n#include <string>\r\n#include <strstream>\r\n#include <system_error>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <typeindex>\r\n#include <typeinfo>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#if _HAS_CXX17\r\n#include <filesystem>\r\n// #include <any> // All templates instantiated in P0220R1_any\r\n// #include <optional> // All templates instantiated in P0220R1_optional\r\n// #include <variant> // All templates instantiated in P0088R3_variant\r\n#endif // _HAS_CXX17\r\n\r\n// Headers not allowed with /clr:pure\r\n#ifndef _M_CEE_PURE\r\n#include <atomic>\r\n#include <condition_variable>\r\n#include <future>\r\n#include <mutex>\r\n#include <shared_mutex>\r\n#include <thread>\r\n#endif // _M_CEE_PURE\r\n\r\n#include <experimental_filesystem.hpp>\r\n#include <instantiate_containers_iterators_common.hpp>\r\n\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n#ifndef _M_CEE_PURE\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(memory_order_relaxed == memory_order::relaxed);\r\nSTATIC_ASSERT(memory_order_consume == memory_order::consume);\r\nSTATIC_ASSERT(memory_order_acquire == memory_order::acquire);\r\nSTATIC_ASSERT(memory_order_release == memory_order::release);\r\nSTATIC_ASSERT(memory_order_acq_rel == memory_order::acq_rel);\r\nSTATIC_ASSERT(memory_order_seq_cst == memory_order::seq_cst);\r\n\r\n// LWG-3268\r\nSTATIC_ASSERT(memory_order::memory_order_relaxed == memory_order::relaxed);\r\nSTATIC_ASSERT(memory_order::memory_order_consume == memory_order::consume);\r\nSTATIC_ASSERT(memory_order::memory_order_acquire == memory_order::acquire);\r\nSTATIC_ASSERT(memory_order::memory_order_release == memory_order::release);\r\nSTATIC_ASSERT(memory_order::memory_order_acq_rel == memory_order::acq_rel);\r\nSTATIC_ASSERT(memory_order::memory_order_seq_cst == memory_order::seq_cst);\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <typename AtomicType>\r\nvoid atomic_read_test_impl(AtomicType& value) {\r\n    (void) atomic_is_lock_free(&value);\r\n    (void) atomic_load(&value);\r\n    (void) atomic_load_explicit(&value, memory_order_seq_cst);\r\n}\r\n\r\ntemplate <typename AtomicType, typename ValueType>\r\nvoid atomic_has_arithmetic_ops_test_impl(AtomicType& value, ValueType element, true_type) {\r\n    atomic_fetch_add(&value, element);\r\n    atomic_fetch_add_explicit(&value, element, memory_order_seq_cst);\r\n    atomic_fetch_sub(&value, element);\r\n    atomic_fetch_sub_explicit(&value, element, memory_order_seq_cst);\r\n    atomic_fetch_and(&value, element);\r\n    atomic_fetch_and_explicit(&value, element, memory_order_seq_cst);\r\n    atomic_fetch_or(&value, element);\r\n    atomic_fetch_or_explicit(&value, element, memory_order_seq_cst);\r\n    atomic_fetch_xor(&value, element);\r\n    atomic_fetch_xor_explicit(&value, element, memory_order_seq_cst);\r\n}\r\n\r\ntemplate <typename AtomicType, typename ValueType>\r\nvoid atomic_has_arithmetic_ops_test_impl(AtomicType&, ValueType, false_type) {}\r\n\r\ntemplate <typename AtomicType, typename ValueType>\r\nvoid atomic_write_test_impl(AtomicType& value, ValueType element) {\r\n    ValueType* ptr_element = &element;\r\n\r\n    atomic_init(&value, element);\r\n    atomic_store(&value, element);\r\n    atomic_store_explicit(&value, element, memory_order_seq_cst);\r\n    atomic_exchange(&value, element);\r\n    atomic_exchange_explicit(&value, element, memory_order_seq_cst);\r\n    atomic_compare_exchange_weak(&value, ptr_element, element);\r\n    atomic_compare_exchange_weak_explicit(&value, ptr_element, element, memory_order_seq_cst, memory_order_seq_cst);\r\n    atomic_compare_exchange_strong(&value, ptr_element, element);\r\n    atomic_compare_exchange_strong_explicit(&value, ptr_element, element, memory_order_seq_cst, memory_order_seq_cst);\r\n\r\n    atomic_has_arithmetic_ops_test_impl(value, element, negation<is_same<ValueType, bool>>());\r\n}\r\n\r\ntemplate <typename T>\r\nvoid atomic_test_impl(T element) {\r\n    atomic<T> value{element};\r\n    volatile atomic<T> v_value{element};\r\n    const atomic<T> c_value{element};\r\n    const volatile atomic<T> cv_value{element};\r\n\r\n    atomic_read_test_impl(value);\r\n    atomic_read_test_impl(v_value);\r\n    atomic_read_test_impl(c_value);\r\n    atomic_read_test_impl(cv_value);\r\n\r\n    atomic_write_test_impl(value, element);\r\n    atomic_write_test_impl(v_value, element);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid atomic_test_impl() {\r\n    T element{};\r\n    atomic_test_impl(element);\r\n}\r\n\r\nvoid atomic_test() {\r\n    int a = 0;\r\n    kill_dependency(a);\r\n\r\n    uint8_t one_byte = 0;\r\n    STATIC_ASSERT(sizeof(one_byte) == 1);\r\n\r\n    uint16_t two_bytes = 1;\r\n    STATIC_ASSERT(sizeof(two_bytes) == 2);\r\n\r\n    uint32_t four_bytes = 2;\r\n    STATIC_ASSERT(sizeof(four_bytes) == 4);\r\n\r\n    uint64_t eight_bytes = 3;\r\n    STATIC_ASSERT(sizeof(eight_bytes) == 8);\r\n\r\n    atomic_test_impl(one_byte);\r\n    atomic_test_impl(two_bytes);\r\n    atomic_test_impl(four_bytes);\r\n    atomic_test_impl(eight_bytes);\r\n\r\n    atomic_test_impl<bool>();\r\n    atomic_test_impl<char>();\r\n    atomic_test_impl<signed char>();\r\n    atomic_test_impl<unsigned char>();\r\n#ifdef __cpp_char8_t\r\n    atomic_test_impl<char8_t>();\r\n#endif // __cpp_char8_t\r\n    atomic_test_impl<char16_t>();\r\n    atomic_test_impl<char32_t>();\r\n    atomic_test_impl<wchar_t>();\r\n    atomic_test_impl<short>();\r\n    atomic_test_impl<unsigned short>();\r\n    atomic_test_impl<int>();\r\n    atomic_test_impl<unsigned int>();\r\n    atomic_test_impl<long>();\r\n    atomic_test_impl<unsigned long>();\r\n    atomic_test_impl<long long>();\r\n    atomic_test_impl<unsigned long long>();\r\n}\r\n#endif // _M_CEE_PURE\r\n\r\nvoid chrono_test() {\r\n    using namespace chrono;\r\n    treat_as_floating_point<float> a{};\r\n    duration_values<float> b{};\r\n    duration<float> c{};\r\n    (void) duration_cast<duration<float, ratio<2>>>(c);\r\n    duration<double> d(1.0f);\r\n    duration<double> e(c);\r\n\r\n    time_point<system_clock> time_pt = system_clock::now();\r\n\r\n    INSTANTIATE(common_type_t<duration<float>, duration<double>>);\r\n    INSTANTIATE(common_type_t<time_point<system_clock>, time_point<system_clock>>);\r\n\r\n    (void) a;\r\n    (void) b;\r\n    (void) d;\r\n    (void) e;\r\n\r\n    duration<float> dur1{};\r\n    duration<double, ratio<2>> dur2{};\r\n\r\n    (void) (dur1 + dur2);\r\n    (void) (dur1 - dur2);\r\n    (void) (1.f * dur2);\r\n    (void) (dur1 * 2.0);\r\n    (void) (dur1 / 2.0);\r\n    (void) (dur1 / dur2);\r\n\r\n    duration<int> dur3{};\r\n    duration<int, ratio<2>> dur4{};\r\n\r\n    (void) (dur3 % 2);\r\n    (void) (dur3 % dur4);\r\n\r\n    comparable_test(dur1, dur2);\r\n\r\n    (void) floor<duration<int>>(dur1);\r\n    (void) ceil<duration<int>>(dur1);\r\n\r\n    (void) round<duration<int>>(dur1); // float -> int\r\n    (void) round<duration<int>>(dur3); // int -> int\r\n\r\n    (void) abs(dur1);\r\n\r\n    (void) (time_pt + dur1);\r\n    (void) (dur1 + time_pt);\r\n    (void) (time_pt - dur1);\r\n    (void) (time_pt - time_pt);\r\n    comparable_test(time_pt);\r\n\r\n    (void) (time_point_cast<duration<float>>(time_pt));\r\n\r\n    (void) (floor<duration<float>>(time_pt));\r\n    (void) (ceil<duration<float>>(time_pt));\r\n}\r\n\r\n#ifndef _M_CEE_PURE\r\ntemplate <typename ConditionVariable>\r\nvoid condition_variable_test_impl() {\r\n    ConditionVariable cv{};\r\n    unique_lock<mutex> lock;\r\n\r\n    auto pr0  = []() { return true; };\r\n    auto soon = chrono::system_clock::now() + chrono::minutes(2);\r\n\r\n    cv.wait(lock);\r\n    cv.wait(lock, pr0);\r\n    (void) cv.wait_for(lock, chrono::seconds(1));\r\n    (void) cv.wait_for(lock, chrono::seconds(1), pr0);\r\n    (void) cv.wait_until(lock, soon);\r\n    (void) cv.wait_until(lock, soon, pr0);\r\n}\r\n\r\nvoid condition_variable_test() {\r\n    condition_variable_test_impl<condition_variable_any>();\r\n}\r\n#endif // _M_CEE_PURE\r\n\r\nvoid check_nested_exception_impl(const exception& ex) { // unroll nested exceptions\r\n    try {\r\n        rethrow_if_nested(ex);\r\n    } catch (const exception& e) {\r\n        check_nested_exception_impl(e);\r\n    } catch (...) {\r\n    }\r\n}\r\n\r\ntemplate <typename ThrowingFunction>\r\nvoid exception_test_impl(const ThrowingFunction& tf) {\r\n    try {\r\n        try {\r\n            tf();\r\n        } catch (...) {\r\n            throw_with_nested(\"WOOFx2\");\r\n        }\r\n    } catch (const exception& e) {\r\n        check_nested_exception_impl(e);\r\n    }\r\n}\r\n\r\nvoid exception_test() {\r\n    exception e{};\r\n    exception_ptr e_ptr = make_exception_ptr(e);\r\n\r\n    exception_test_impl([]() { throw 23; }); // can't nest\r\n    exception_test_impl([]() { throw runtime_error(\"WOOF\"); }); // can nest\r\n}\r\n\r\ntemplate <typename CharType>\r\nvoid experimental_filesystem_test_impl(const CharType* c_str) {\r\n    using namespace experimental::filesystem;\r\n\r\n    basic_string<CharType> str = c_str;\r\n\r\n    path p0(str.begin(), str.end());\r\n    path p1(c_str);\r\n    path p2(str);\r\n\r\n    locale default_locale{};\r\n    path p3(str.begin(), str.end(), default_locale);\r\n    path p4(c_str, default_locale);\r\n    path p5(str, default_locale);\r\n\r\n    p0 = c_str;\r\n    p1 = str;\r\n    p2.assign(str.begin(), str.end());\r\n    p3.assign(c_str);\r\n    p4.assign(str);\r\n    p5 /= c_str;\r\n    p0 /= str;\r\n    p0.append(str.begin(), str.end());\r\n    p0.append(c_str);\r\n    p0 += *c_str;\r\n    p0 += str;\r\n    p0 += c_str;\r\n    p0.concat(str.begin(), str.end());\r\n    p0.concat(str.begin());\r\n    p0.concat(c_str);\r\n    p0.concat(*c_str);\r\n    p0.concat(str);\r\n\r\n    (void) p0.string<CharType>(str.get_allocator());\r\n    (void) p0.generic_string<CharType>(str.get_allocator());\r\n\r\n    stringstream ss{};\r\n\r\n    ss << p0;\r\n    ss >> p0;\r\n\r\n    auto u8str = p0.u8string();\r\n    (void) u8path(u8str.begin(), u8str.end());\r\n    (void) u8path(u8str.c_str());\r\n}\r\n\r\nvoid experimental_filesystem_test() {\r\n    experimental_filesystem_test_impl(\"narrow\");\r\n    experimental_filesystem_test_impl(L\"wide\");\r\n#ifndef _M_CEE_PURE\r\n#ifdef __cpp_char8_t\r\n    experimental_filesystem_test_impl(u8\"utf8\");\r\n#endif // __cpp_char8_t\r\n    experimental_filesystem_test_impl(u\"utf16\");\r\n    experimental_filesystem_test_impl(U\"utf32\");\r\n#endif // _M_CEE_PURE\r\n}\r\n\r\n#if _HAS_CXX17\r\ntemplate <typename CharType>\r\nvoid standard_filesystem_test_impl(const CharType* c_str) {\r\n    using namespace filesystem;\r\n\r\n    basic_string<CharType> str = c_str;\r\n\r\n    path p0(str.begin(), str.end());\r\n    path p1(c_str);\r\n    path p2(str);\r\n\r\n    if constexpr (is_same_v<CharType, char>) {\r\n        locale default_locale{};\r\n        path p3(str.begin(), str.end(), default_locale);\r\n        path p4(c_str, default_locale);\r\n        path p5(str, default_locale);\r\n    }\r\n\r\n    p0 = c_str;\r\n    p0 = str;\r\n    p0.assign(str.begin(), str.end());\r\n    p0.assign(c_str);\r\n    p0.assign(str);\r\n    p0 /= c_str;\r\n    p0 /= str;\r\n    p0.append(str.begin(), str.end());\r\n    p0.append(c_str);\r\n    p0 += *c_str;\r\n    p0 += str;\r\n    p0 += c_str;\r\n    p0.concat(str.begin(), str.end());\r\n    p0.concat(str.begin());\r\n    p0.concat(c_str);\r\n    p0.concat(str);\r\n\r\n    (void) p0.string<CharType>(str.get_allocator());\r\n    (void) p0.generic_string<CharType>(str.get_allocator());\r\n\r\n    stringstream ss{};\r\n\r\n    ss << p0;\r\n    ss >> p0;\r\n\r\n    auto u8str = p0.u8string();\r\n    (void) u8path(u8str.begin(), u8str.end());\r\n    (void) u8path(u8str.c_str());\r\n}\r\n\r\nvoid standard_filesystem_test() {\r\n    standard_filesystem_test_impl(\"narrow\");\r\n    standard_filesystem_test_impl(L\"wide\");\r\n#ifndef _M_CEE_PURE\r\n#ifdef __cpp_char8_t\r\n    standard_filesystem_test_impl(u8\"utf8\");\r\n#endif // __cpp_char8_t\r\n    standard_filesystem_test_impl(u\"utf16\");\r\n    standard_filesystem_test_impl(U\"utf32\");\r\n#endif // _M_CEE_PURE\r\n}\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <typename CharType>\r\nvoid fstream_test_impl() {\r\n    basic_filebuf<CharType, char_traits<CharType>> fb;\r\n    basic_ifstream<CharType, char_traits<CharType>> ifs;\r\n    basic_ofstream<CharType, char_traits<CharType>> ofs;\r\n    basic_fstream<CharType, char_traits<CharType>> fs;\r\n\r\n    swap_test(fb);\r\n    swap_test(ifs);\r\n    swap_test(ofs);\r\n    swap_test(fs);\r\n}\r\n\r\nvoid fstream_test() {\r\n    fstream_test_impl<char>();\r\n    fstream_test_impl<wchar_t>();\r\n}\r\n\r\ntemplate <typename ReturnType, typename Function>\r\nvoid function_test_impl(Function func) {\r\n    function<ReturnType()> f0;\r\n    function<ReturnType()> f1 = nullptr;\r\n    function<ReturnType()> f2 = f0;\r\n    function<ReturnType()> f3 = move(f0);\r\n    function<ReturnType()> f4 = func;\r\n    const auto& cf            = f0;\r\n    f0                        = f1;\r\n    f0                        = move(f1);\r\n    f0                        = nullptr;\r\n    f0                        = func;\r\n    f0                        = ref(func);\r\n    swap_test(f0);\r\n    (void) !cf;\r\n    (void) cf();\r\n    (void) cf.target_type();\r\n    (void) f0.template target<ReturnType (*)()>();\r\n    (void) cf.template target<ReturnType (*)()>();\r\n    equality_test(f0, nullptr);\r\n    equality_test(nullptr, f0);\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n    function<ReturnType()> f5(allocator_arg, allocator<double>{});\r\n    function<ReturnType()> f6(allocator_arg, allocator<double>{}, nullptr);\r\n    function<ReturnType()> f7(allocator_arg, allocator<double>{}, f5);\r\n    function<ReturnType()> f8(allocator_arg, allocator<double>{}, move(f5));\r\n    function<ReturnType()> f9(allocator_arg, allocator<double>{}, func);\r\n    TRAIT_V(uses_allocator, function<ReturnType()>, allocator<double>);\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n}\r\n\r\nvoid functional_test() {\r\n    using namespace placeholders;\r\n\r\n    // different return types to trigger <type_traits>::_Invoke_ret\r\n    function_test_impl<void>([]() {});\r\n    function_test_impl<int>([]() { return 4; });\r\n    function_test_impl<vector<int>>([]() { return vector<int>{}; });\r\n\r\n    auto ph                  = _1;\r\n    const auto cph           = _2;\r\n    volatile auto vph        = _3;\r\n    const volatile auto cvph = _4;\r\n\r\n    TRAIT_V(is_placeholder, decltype(ph));\r\n    TRAIT_V(is_placeholder, decltype(cph));\r\n    TRAIT_V(is_placeholder, decltype(vph));\r\n    TRAIT_V(is_placeholder, decltype(cvph));\r\n\r\n    TRAIT_V(is_placeholder, int);\r\n    TRAIT_V(is_placeholder, const int);\r\n    TRAIT_V(is_placeholder, volatile int);\r\n    TRAIT_V(is_placeholder, const volatile int);\r\n\r\n    // implicit return type\r\n    auto be                  = bind([](int, int) {}, _1, 2);\r\n    const auto cbe           = be;\r\n    volatile auto vbe        = be;\r\n    const volatile auto cvbe = be;\r\n\r\n    auto not_be                  = []() {};\r\n    const auto not_cbe           = not_be;\r\n    volatile auto not_vbe        = not_be;\r\n    const volatile auto not_cvbe = not_be;\r\n\r\n    TRAIT_V(is_bind_expression, decltype(be));\r\n    TRAIT_V(is_bind_expression, decltype(cbe));\r\n    TRAIT_V(is_bind_expression, decltype(vbe));\r\n    TRAIT_V(is_bind_expression, decltype(cvbe));\r\n\r\n    TRAIT_V(is_bind_expression, decltype(not_be));\r\n    TRAIT_V(is_bind_expression, decltype(not_cbe));\r\n    TRAIT_V(is_bind_expression, decltype(not_vbe));\r\n    TRAIT_V(is_bind_expression, decltype(not_cvbe));\r\n\r\n    be(1);\r\n    cbe(2);\r\n    // volatile binder calls not supported\r\n\r\n    // with explicit return type\r\n    auto be_ret                  = bind<void>([](int, int) {}, _1, 2);\r\n    const auto cbe_ret           = be;\r\n    volatile auto vbe_ret        = be;\r\n    const volatile auto cvbe_ret = be;\r\n\r\n    TRAIT_V(is_bind_expression, decltype(be_ret));\r\n    TRAIT_V(is_bind_expression, decltype(cbe_ret));\r\n    TRAIT_V(is_bind_expression, decltype(vbe_ret));\r\n    TRAIT_V(is_bind_expression, decltype(cvbe_ret));\r\n\r\n    be_ret(3);\r\n    cbe_ret(4);\r\n    // volatile binder calls not supported\r\n}\r\n\r\n#ifndef _M_CEE_PURE\r\ntemplate <typename Future>\r\nvoid future_test_impl(Future& f) {\r\n    using namespace chrono;\r\n\r\n    (void) f.wait_for(seconds(3));\r\n    (void) f.wait_until(system_clock::now());\r\n}\r\n\r\nvoid future_test() {\r\n    auto bp = future_errc::broken_promise;\r\n    (void) bp;\r\n    bool iece = is_error_code_enum_v<decltype(bp)>;\r\n    (void) iece;\r\n\r\n    future<int> f{};\r\n    future<int&> fr{};\r\n    future<void> fv{};\r\n\r\n    shared_future<int> sf{};\r\n    shared_future<int&> sfr{};\r\n    shared_future<void> sfv{};\r\n\r\n    future_test_impl(f);\r\n    future_test_impl(fr);\r\n    future_test_impl(fv);\r\n    future_test_impl(sf);\r\n    future_test_impl(sfr);\r\n    future_test_impl(sfv);\r\n\r\n    promise<int> p(allocator_arg, allocator<double>{});\r\n    promise<int&> pr(allocator_arg, allocator<double>{});\r\n    promise<void> pv(allocator_arg, allocator<double>{});\r\n\r\n    swap_test(p);\r\n    swap_test(pr);\r\n    swap_test(pv);\r\n\r\n    packaged_task<void()> pt([]() {});\r\n    // GH-321: \"<future>: packaged_task can't be constructed from a move-only lambda\"\r\n    packaged_task<void()> pt2([uptr = unique_ptr<int>{}]() { (void) uptr; });\r\n\r\n    packaged_task<void()> pta(allocator_arg, allocator<double>{}, []() {});\r\n    // GH-321: \"<future>: packaged_task can't be constructed from a move-only lambda\"\r\n    packaged_task<void()> pta2(allocator_arg, allocator<double>{}, [uptr = unique_ptr<int>{}]() { (void) uptr; });\r\n\r\n    swap_test(pt);\r\n\r\n    (void) async([]() {});\r\n    (void) async(launch::async, []() {});\r\n\r\n    TRAIT_V(uses_allocator, promise<int>, allocator<double>);\r\n\r\n    TRAIT_V(uses_allocator, packaged_task<void()>, allocator<double>);\r\n}\r\n#endif // _M_CEE_PURE\r\n\r\ntemplate <typename IoManipOut, typename IoManipIn>\r\nvoid iomanip_test_impl(IoManipOut out, IoManipIn in) {\r\n    stringstream ss{};\r\n    ss << out;\r\n    ss >> in;\r\n}\r\n\r\ntemplate <typename IoManip>\r\nvoid iomanip_test_impl(IoManip iom) {\r\n    iomanip_test_impl(iom, iom);\r\n}\r\n\r\ntemplate <typename IoManip>\r\nvoid iomanip_test_impl_for_setfill(IoManip out) {\r\n    stringstream ss{};\r\n    ss << out;\r\n}\r\n\r\nvoid iomanip_test() {\r\n    auto sf           = setfill('*');\r\n    long double money = 123.45;\r\n    time_t t          = time(nullptr);\r\n    tm time{};\r\n    localtime_s(&time, &t);\r\n    string str = \"string with \\\" quotes \";\r\n\r\n    iomanip_test_impl_for_setfill(sf);\r\n    iomanip_test_impl(put_money(money), get_money(money));\r\n    iomanip_test_impl(put_time(&time, \"%c %Z\"), get_time(&time, \"%c %Z\"));\r\n    iomanip_test_impl(quoted(str.c_str()), quoted(str));\r\n    iomanip_test_impl(quoted(str));\r\n    iomanip_test_impl(resetiosflags(ios_base::basefield));\r\n    iomanip_test_impl(setiosflags(ios_base::basefield));\r\n    iomanip_test_impl(setbase(2));\r\n    iomanip_test_impl(setprecision(10));\r\n    iomanip_test_impl(setw(10));\r\n}\r\n\r\nvoid ios_test() {\r\n    stringstream ss{};\r\n    basic_ios<char, char_traits<char>> b_ios(ss.rdbuf());\r\n}\r\n\r\nvoid iosfwd_test() {\r\n    streampos sp; // fpos<char_traits<char>::state_type>\r\n    wstreampos wsp; // fpos<char_traits<wchar_t>::state_type>\r\n\r\n    INSTANTIATE(char_traits<char>);\r\n    INSTANTIATE(char_traits<wchar_t>);\r\n#ifdef __cpp_char8_t\r\n    INSTANTIATE(char_traits<char8_t>);\r\n#endif // __cpp_char8_t\r\n    INSTANTIATE(char_traits<char16_t>);\r\n    INSTANTIATE(char_traits<char32_t>);\r\n    INSTANTIATE(char_traits<unsigned short>);\r\n    // Other templates in iosfwd are forward decls.\r\n    // Will instantiate in the test for the header where they are defined.\r\n}\r\n\r\ntemplate <typename Container>\r\nvoid nonmember_reverse_iterator_functions_test() {\r\n    Container c{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};\r\n\r\n    (void) rbegin(c);\r\n    (void) crbegin(c);\r\n    (void) rend(c);\r\n    (void) crend(c);\r\n}\r\n\r\ntemplate <typename Container>\r\nvoid nonmember_iterator_functions_test() {\r\n    Container c{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};\r\n\r\n    (void) begin(c);\r\n    (void) cbegin(c);\r\n    (void) end(c);\r\n    (void) cend(c);\r\n}\r\n\r\nvoid iterators_test() {\r\n    fwd_iterators_test<forward_list<int>>();\r\n    fwd_iterators_test<list<int>>();\r\n    fwd_iterators_test<vector<int>>();\r\n\r\n    bidi_iterators_test<list<int>>();\r\n    bidi_iterators_test<vector<int>>();\r\n\r\n    nonmember_iterator_functions_test<int[]>();\r\n    nonmember_iterator_functions_test<initializer_list<int>>();\r\n    nonmember_iterator_functions_test<forward_list<int>>();\r\n    nonmember_iterator_functions_test<list<int>>();\r\n    nonmember_iterator_functions_test<vector<int>>();\r\n\r\n    nonmember_reverse_iterator_functions_test<int[]>();\r\n    nonmember_reverse_iterator_functions_test<initializer_list<int>>();\r\n    nonmember_reverse_iterator_functions_test<list<int>>();\r\n    nonmember_reverse_iterator_functions_test<vector<int>>();\r\n\r\n    int arr[]                = {1};\r\n    initializer_list<int> il = {2};\r\n    forward_list<int> flist{3};\r\n    list<int> lst{4};\r\n    vector<int> vec{5};\r\n\r\n    (void) size(arr);\r\n    (void) data(arr);\r\n    (void) empty(arr);\r\n\r\n    (void) size(il);\r\n    (void) data(il);\r\n    (void) empty(il);\r\n\r\n    (void) empty(flist);\r\n\r\n    (void) size(lst);\r\n    (void) empty(lst);\r\n\r\n    (void) size(vec);\r\n    (void) data(vec);\r\n    (void) empty(vec);\r\n\r\n#if _HAS_CXX20\r\n    (void) ssize(arr);\r\n    (void) ssize(il);\r\n    (void) ssize(lst);\r\n    (void) ssize(vec);\r\n#endif // _HAS_CXX20\r\n\r\n    deque<int> value{1, 2, 3};\r\n    auto it  = inserter(value, begin(value));\r\n    auto fit = front_inserter(value);\r\n    auto bit = back_inserter(value);\r\n\r\n    swap_test(it);\r\n    swap_test(fit);\r\n    swap_test(bit);\r\n\r\n    stringstream ss(\"1 2 3 4 5\");\r\n    istream_iterator<int> isi(ss);\r\n    ostream_iterator<int> osi(ss, \" \");\r\n    istreambuf_iterator<char> isbi(ss);\r\n    ostreambuf_iterator<char> osbi(ss);\r\n\r\n    equality_test(isi);\r\n    equality_test(isbi);\r\n    swap_test(isi);\r\n    swap_test(isbi);\r\n    swap_test(osi);\r\n    swap_test(osbi);\r\n}\r\n\r\nvoid istream_test() {\r\n    stringstream ss{};\r\n    istream is(ss.rdbuf());\r\n\r\n    wstringstream wss{};\r\n    wistream wis(wss.rdbuf());\r\n\r\n    unsigned short us{};\r\n    wis >> us;\r\n\r\n    iostream ios(ss.rdbuf());\r\n    wiostream wios(wss.rdbuf());\r\n\r\n    // /analyze doesn't like these being nullptr\r\n    char c_str[]           = \"1\";\r\n    signed char sc_str[]   = \"2\";\r\n    unsigned char uc_str[] = \"3\";\r\n\r\n    is >> c_str;\r\n    is >> *c_str;\r\n    is >> sc_str;\r\n    is >> *sc_str;\r\n    is >> uc_str;\r\n    is >> *uc_str;\r\n    move(is) >> c_str;\r\n    is >> ws; // io manipulator, not variable\r\n}\r\n\r\ntemplate <typename T>\r\nvoid numeric_limits_test_impl() {\r\n    INSTANTIATE(numeric_limits<T>);\r\n    INSTANTIATE(numeric_limits<const T>);\r\n    INSTANTIATE(numeric_limits<volatile T>);\r\n    INSTANTIATE(numeric_limits<const volatile T>);\r\n}\r\n\r\nvoid limits_test() {\r\n    numeric_limits_test_impl<bool>();\r\n    numeric_limits_test_impl<char>();\r\n    numeric_limits_test_impl<signed char>();\r\n    numeric_limits_test_impl<unsigned char>();\r\n#ifdef __cpp_char8_t\r\n    numeric_limits_test_impl<char8_t>();\r\n#endif // __cpp_char8_t\r\n    numeric_limits_test_impl<char16_t>();\r\n    numeric_limits_test_impl<char32_t>();\r\n    numeric_limits_test_impl<wchar_t>();\r\n    numeric_limits_test_impl<short>();\r\n    numeric_limits_test_impl<int>();\r\n    numeric_limits_test_impl<long>();\r\n    numeric_limits_test_impl<long long>();\r\n    numeric_limits_test_impl<unsigned short>();\r\n    numeric_limits_test_impl<unsigned int>();\r\n    numeric_limits_test_impl<unsigned long>();\r\n    numeric_limits_test_impl<unsigned long long>();\r\n    numeric_limits_test_impl<float>();\r\n    numeric_limits_test_impl<double>();\r\n    numeric_limits_test_impl<long double>();\r\n\r\n    numeric_limits_test_impl<string>();\r\n}\r\n\r\nvoid locale_test() {\r\n    char c{};\r\n    locale loc{};\r\n    // need all collates to instantiate <locale> _Lstrcoll and _Lstrxfrm\r\n    auto cc   = has_facet<collate<char>>(loc);\r\n    auto cw   = has_facet<collate<wchar_t>>(loc);\r\n    auto cbnc = has_facet<collate_byname<char>>(loc);\r\n    auto cbnw = has_facet<collate_byname<wchar_t>>(loc);\r\n    auto ctc  = has_facet<ctype<char>>(loc);\r\n    (void) isalnum(c, loc);\r\n    (void) isalpha(c, loc);\r\n    (void) isblank(c, loc);\r\n    (void) iscntrl(c, loc);\r\n    (void) isdigit(c, loc);\r\n    (void) isgraph(c, loc);\r\n    (void) islower(c, loc);\r\n    (void) isprint(c, loc);\r\n    (void) ispunct(c, loc);\r\n    (void) isspace(c, loc);\r\n    (void) isupper(c, loc);\r\n    (void) isxdigit(c, loc);\r\n    (void) tolower(c, loc);\r\n    (void) toupper(c, loc);\r\n\r\n    (void) cc;\r\n    (void) cw;\r\n    (void) cbnc;\r\n    (void) cbnw;\r\n    (void) ctc;\r\n}\r\n\r\ntemplate <typename OwnerLess, typename SmartPtr1, typename SmartPtr2>\r\nvoid owner_less_test_impl(OwnerLess ol, SmartPtr1 ptr1, SmartPtr2 ptr2) {\r\n    (void) ol(ptr1, ptr2);\r\n    (void) ol(ptr2, ptr1);\r\n}\r\n\r\ntemplate <typename OwnerLess, typename SmartPtr>\r\nvoid owner_less_test_impl(OwnerLess ol, SmartPtr ptr) {\r\n    // also tests _Ptr_base::owner_before\r\n    owner_less_test_impl(ol, ptr, ptr);\r\n}\r\n\r\nvoid shared_ptr_test_impl() {\r\n    shared_ptr<int> sptr0(new int());\r\n    shared_ptr<int> sptr1(new int(), default_delete<int>{});\r\n    shared_ptr<int> sptr2(nullptr, default_delete<int>{});\r\n    shared_ptr<int> sptr3(nullptr, default_delete<int>{}, allocator<int>{});\r\n    shared_ptr<int> sptr4(new int(), default_delete<int>{}, allocator<int>{});\r\n    shared_ptr<int> sptr5(sptr0, nullptr);\r\n    shared_ptr<void> sptr6(sptr1);\r\n    shared_ptr<int> sptr7(weak_ptr<int>{sptr2});\r\n#if _HAS_AUTO_PTR_ETC\r\n    shared_ptr<int> sptr8(auto_ptr<int>{});\r\n    sptr8 = auto_ptr<int>{};\r\n#endif // _HAS_AUTO_PTR_ETC\r\n    shared_ptr<void> sptr9(move(sptr3));\r\n    shared_ptr<int> sptr10(unique_ptr<int>{});\r\n\r\n    sptr4 = unique_ptr<int>{};\r\n    sptr6 = move(sptr5);\r\n    sptr9 = sptr7;\r\n\r\n    sptr10.reset(new int());\r\n    sptr0.reset(new int(), default_delete<int>{});\r\n    sptr0.reset(new int(), default_delete<int>{}, allocator<int>{});\r\n\r\n    comparable_test(sptr0, sptr6);\r\n    comparable_test(sptr0, nullptr);\r\n    comparable_test(nullptr, sptr0);\r\n    cout << sptr0;\r\n    swap_test(sptr0);\r\n\r\n    auto sptr11 = make_shared<int>(5);\r\n    auto sptr12 = allocate_shared<int>(allocator<int>{}, 6);\r\n\r\n    struct Cat {\r\n        virtual ~Cat() {}\r\n    };\r\n\r\n    struct Kitten : Cat {};\r\n\r\n    (void) static_pointer_cast<void>(sptr0);\r\n    (void) const_pointer_cast<const int>(sptr0);\r\n    (void) dynamic_pointer_cast<Kitten>(make_shared<Cat>());\r\n\r\n    (void) get_deleter<default_delete<int>>(sptr0);\r\n    hash_test(sptr0);\r\n\r\n    (void) atomic_is_lock_free(&sptr0);\r\n    (void) atomic_load(&sptr0);\r\n    (void) atomic_load_explicit(&sptr0, memory_order_seq_cst);\r\n    atomic_store(&sptr0, sptr0);\r\n    atomic_store_explicit(&sptr0, sptr0, memory_order_seq_cst);\r\n    atomic_exchange(&sptr0, sptr0);\r\n    atomic_exchange_explicit(&sptr0, sptr0, memory_order_seq_cst);\r\n    atomic_compare_exchange_weak(&sptr0, &sptr0, sptr0);\r\n    atomic_compare_exchange_weak_explicit(&sptr0, &sptr0, sptr0, memory_order_seq_cst, memory_order_seq_cst);\r\n    atomic_compare_exchange_strong(&sptr0, &sptr0, sptr0);\r\n    atomic_compare_exchange_strong_explicit(&sptr0, &sptr0, sptr0, memory_order_seq_cst, memory_order_seq_cst);\r\n}\r\n\r\nvoid weak_ptr_test_impl() {\r\n    weak_ptr<int> wptr0(make_shared<int>(5));\r\n    weak_ptr<void> wptr1(wptr0);\r\n    weak_ptr<void> wptr2(move(wptr0));\r\n\r\n    wptr1 = wptr0;\r\n    wptr2 = move(wptr0);\r\n    wptr0 = make_shared<int>(5);\r\n    swap_test(wptr0);\r\n}\r\n\r\nvoid unique_ptr_test_impl() {\r\n    default_delete<int> int_deleter{};\r\n    unique_ptr<int> uptr0{};\r\n    unique_ptr<int, default_delete<int>&> uptr1(new int(), int_deleter);\r\n    unique_ptr<int> uptr2(new int(), move(int_deleter));\r\n    unique_ptr<int> uptr3{move(uptr1)};\r\n#if _HAS_AUTO_PTR_ETC\r\n    unique_ptr<int> uptr4{auto_ptr<int>{}};\r\n    (void) uptr4;\r\n#endif // _HAS_AUTO_PTR_ETC\r\n\r\n    uptr3 = move(uptr1);\r\n\r\n    default_delete<int[]> int_arr_deleter{};\r\n    unique_ptr<int[]> uptr5{};\r\n    unique_ptr<int[]> uptr6{new int[5]};\r\n    unique_ptr<int[], default_delete<int[]>&> uptr7(new int[5], int_arr_deleter);\r\n    unique_ptr<int[]> uptr8{move(uptr7)};\r\n    uptr8 = move(uptr7);\r\n    uptr6.reset(new int[5]);\r\n\r\n    auto uptr9  = make_unique<int>(5);\r\n    auto uptr10 = make_unique<int[]>(5);\r\n\r\n    swap_test(uptr9);\r\n    comparable_test(uptr2, uptr5);\r\n    comparable_test(uptr1, nullptr);\r\n    comparable_test(nullptr, uptr10);\r\n    hash_test(uptr0);\r\n}\r\n\r\nvoid memory_test() {\r\n    shared_ptr_test_impl();\r\n    weak_ptr_test_impl();\r\n    unique_ptr_test_impl();\r\n\r\n    struct my_shared_from_this : enable_shared_from_this<my_shared_from_this> {\r\n        my_shared_from_this() {}\r\n    };\r\n    my_shared_from_this msft{};\r\n    default_delete<void> dd0{default_delete<int>{}};\r\n    (void) dd0;\r\n    default_delete<int[]> dd1{default_delete<int[]>{}};\r\n    dd1(new int[5]);\r\n\r\n#if _HAS_GARBAGE_COLLECTION_SUPPORT_DELETED_IN_CXX23\r\n    int* int_ptr{};\r\n    undeclare_reachable(int_ptr);\r\n#endif // _HAS_GARBAGE_COLLECTION_SUPPORT_DELETED_IN_CXX23\r\n\r\n    auto sptr = make_shared<int>(5);\r\n    auto wptr = weak_ptr<int>(sptr);\r\n    owner_less_test_impl(owner_less<shared_ptr<int>>{}, sptr);\r\n    owner_less_test_impl(owner_less<weak_ptr<int>>{}, weak_ptr<int>(sptr));\r\n    owner_less_test_impl(owner_less<void>{}, sptr, wptr);\r\n}\r\n\r\n#ifndef _M_CEE_PURE\r\ntemplate <typename Mutex>\r\nvoid timed_mutex_test_impl() {\r\n    Mutex mtx{};\r\n    (void) mtx.try_lock_for(chrono::seconds(1));\r\n    (void) mtx.try_lock_until(chrono::system_clock::now());\r\n}\r\n\r\nvoid mutex_test() {\r\n    mutex mtx{};\r\n    recursive_mutex rmtx{};\r\n    recursive_timed_mutex rtmtx{};\r\n\r\n    (void) try_lock(mtx, rmtx);\r\n    (void) try_lock(mtx, rmtx, rtmtx);\r\n    lock(mtx, rmtx);\r\n    lock(mtx, rmtx, rtmtx);\r\n    // lock_guard and scoped_lock instantiated in P0156R2_scoped_lock\r\n    unique_lock<recursive_timed_mutex> ul_mtx1{rtmtx, chrono::seconds(1)};\r\n    unique_lock<recursive_timed_mutex> ul_mtx2{rtmtx, chrono::system_clock::now()};\r\n\r\n    timed_mutex_test_impl<unique_lock<recursive_timed_mutex>>();\r\n    swap_test(ul_mtx2);\r\n    once_flag of{};\r\n    call_once(of, []() {});\r\n    condition_variable_test_impl<condition_variable>();\r\n\r\n    timed_mutex_test_impl<timed_mutex>();\r\n    timed_mutex_test_impl<recursive_timed_mutex>();\r\n}\r\n#endif // _M_CEE_PURE\r\n\r\nvoid ostream_test() {\r\n    stringstream ss{};\r\n    ostream os{ss.rdbuf()};\r\n\r\n    wstringstream wss{};\r\n    wostream wos{wss.rdbuf()};\r\n\r\n    unsigned short us{};\r\n    wos << us;\r\n\r\n    // /analyze doesn't like these being nullptr\r\n    char c_str[]     = \"1\";\r\n    wchar_t wc_str[] = L\"2\";\r\n\r\n    wos << c_str;\r\n    wos << *c_str;\r\n    os << c_str;\r\n    os << *c_str;\r\n    wos << wc_str;\r\n    wos << *wc_str;\r\n\r\n    signed char sc_str[]   = \"3\";\r\n    unsigned char uc_str[] = \"4\";\r\n\r\n    os << sc_str;\r\n    os << *sc_str;\r\n    os << uc_str;\r\n    os << *uc_str;\r\n\r\n    string str{};\r\n    os << str;\r\n    os << endl;\r\n    os << ends;\r\n    os << flush;\r\n    os << error_code{};\r\n}\r\n\r\ntemplate <typename Distribution>\r\nvoid distribution_test_impl(Distribution& d) {\r\n    random_device rd{};\r\n    mt19937 gen(rd());\r\n    (void) d(gen);\r\n    (void) d(gen, d.param());\r\n    equality_test(d);\r\n    cin >> d;\r\n    cout << d;\r\n}\r\n\r\ntemplate <typename Engine, typename SeedArg>\r\nvoid common_engine_test_impl(SeedArg& sa) {\r\n    Engine eng(sa);\r\n    eng.seed(sa);\r\n    equality_test(eng);\r\n    cin >> eng;\r\n    cout << eng;\r\n}\r\n\r\ntemplate <typename Engine>\r\nvoid engine_test_impl() {\r\n    seed_seq ss({1, 2, 3, 4, 5});\r\n    common_engine_test_impl<Engine>(ss);\r\n}\r\n\r\nvoid random_test() {\r\n    seed_seq ss0({1, 2, 3, 4, 5, 6});\r\n    vector<uint32_t> v{1, 2, 3, 4};\r\n    seed_seq ss1(v.begin(), v.end());\r\n    ss0.generate(v.begin(), v.end());\r\n    ss1.param(ostream_iterator<unsigned int>(cout, \" \"));\r\n\r\n    random_device rd{};\r\n    mt19937 gen(rd());\r\n    (void) generate_canonical<double, 10>(gen);\r\n\r\n    engine_test_impl<minstd_rand0>(); // linear_congruential_engine\r\n    engine_test_impl<mt19937>(); // mersenne_twister_engine\r\n    engine_test_impl<ranlux24_base>(); // subtract_with_carry_engine\r\n    engine_test_impl<ranlux24>(); // discard_block_engine\r\n    engine_test_impl<knuth_b>(); // shuffle_order_engine\r\n    engine_test_impl<independent_bits_engine<minstd_rand0, 2, uint32_t>>();\r\n    engine_test_impl<mt19937_64>();\r\n    engine_test_impl<ranlux48_base>();\r\n    engine_test_impl<ranlux48>();\r\n\r\n    uniform_int_distribution<> uni_int_d{};\r\n    bernoulli_distribution bern_d{};\r\n    geometric_distribution<> geo_d{};\r\n    poisson_distribution<> pois_d{};\r\n    binomial_distribution<> binom_d{};\r\n    uniform_real_distribution<> uni_real_d{};\r\n    exponential_distribution<> expon_d{};\r\n    normal_distribution<> norm_d{};\r\n    gamma_distribution<> gamma_d{};\r\n    weibull_distribution<> weib_d{};\r\n    extreme_value_distribution<> ext_v_d{};\r\n    lognormal_distribution<> log_norm_d{};\r\n    chi_squared_distribution<> chi_sq_d{};\r\n    cauchy_distribution<> cauchy_d{};\r\n    fisher_f_distribution<> fish_f_d{};\r\n    student_t_distribution<> stud_t_d{};\r\n    negative_binomial_distribution<> neg_bi_d{};\r\n    discrete_distribution<> disc_d1(v.begin(), v.end());\r\n    auto sq_func = [](double val) { return val * val; };\r\n    discrete_distribution<> disc_d2(5, 3.5, 7.5, sq_func);\r\n    piecewise_constant_distribution<> piece_const_d1(v.begin(), v.end(), v.begin());\r\n    piecewise_constant_distribution<> piece_const_d2{{1.0, 2.0, 3.0, 4.0, 5.0}, sq_func};\r\n    piecewise_constant_distribution<> piece_const_d3(4, 0.0, 10.0, sq_func);\r\n    piecewise_linear_distribution<> piece_line_d1(v.begin(), v.end(), v.begin());\r\n    piecewise_linear_distribution<> piece_line_d2({1.0, 2.0, 3.0, 4.0}, sq_func);\r\n    piecewise_linear_distribution<> piece_line_d3(4, 0.0, 10.0, sq_func);\r\n\r\n    distribution_test_impl(uni_int_d);\r\n    distribution_test_impl(bern_d);\r\n    distribution_test_impl(geo_d);\r\n    distribution_test_impl(pois_d);\r\n    distribution_test_impl(binom_d);\r\n    distribution_test_impl(uni_real_d);\r\n    distribution_test_impl(expon_d);\r\n    distribution_test_impl(norm_d);\r\n    distribution_test_impl(gamma_d);\r\n    distribution_test_impl(weib_d);\r\n    distribution_test_impl(ext_v_d);\r\n    distribution_test_impl(log_norm_d);\r\n    distribution_test_impl(chi_sq_d);\r\n    distribution_test_impl(cauchy_d);\r\n    distribution_test_impl(fish_f_d);\r\n    distribution_test_impl(stud_t_d);\r\n    distribution_test_impl(neg_bi_d);\r\n    distribution_test_impl(disc_d1);\r\n    distribution_test_impl(disc_d2);\r\n    distribution_test_impl(piece_const_d1);\r\n    distribution_test_impl(piece_const_d2);\r\n    distribution_test_impl(piece_const_d3);\r\n    distribution_test_impl(piece_line_d1);\r\n    distribution_test_impl(piece_line_d2);\r\n    distribution_test_impl(piece_line_d3);\r\n}\r\n\r\nvoid ratio_test() {\r\n    using half       = ratio<1, 2>;\r\n    using one        = ratio_add<half, half>;\r\n    using half_again = ratio_subtract<one, half>;\r\n    using quarter    = ratio_multiply<half, half>;\r\n    using two        = ratio_divide<one, half>;\r\n\r\n    TRAIT_V(ratio_equal, half, half);\r\n    TRAIT_V(ratio_not_equal, half_again, quarter);\r\n    TRAIT_V(ratio_less, half, two);\r\n    TRAIT_V(ratio_less_equal, half, half_again);\r\n    TRAIT_V(ratio_greater, one, half);\r\n    TRAIT_V(ratio_greater_equal, half, half_again);\r\n}\r\n\r\ntemplate <typename CharType>\r\nvoid regex_traits_test_impl() {\r\n    CharType buffer[10]{};\r\n    regex_traits<CharType> rt{};\r\n\r\n    rt.transform(begin(buffer), end(buffer));\r\n    rt.transform_primary(begin(buffer), end(buffer));\r\n    rt.lookup_classname(begin(buffer), end(buffer));\r\n    rt.lookup_collatename(begin(buffer), end(buffer));\r\n}\r\n\r\ntemplate <typename SubMatchType>\r\nvoid sub_match_test_impl() {\r\n    SubMatchType sm{};\r\n    using char_type = typename SubMatchType::value_type;\r\n\r\n    char_type value{};\r\n    basic_string<char_type> str{};\r\n\r\n    comparable_test(sm);\r\n    comparable_test(sm, &value);\r\n    comparable_test(&value, sm);\r\n    comparable_test(sm, value);\r\n    comparable_test(value, sm);\r\n    comparable_test(sm, str);\r\n    comparable_test(str, sm);\r\n\r\n    basic_stringstream<char_type> ss{};\r\n    ss << sm;\r\n}\r\n\r\ntemplate <typename MatchResultsType>\r\nvoid match_results_test_impl() {\r\n    MatchResultsType mr{};\r\n    using char_type = typename MatchResultsType::char_type;\r\n    basic_stringstream<char_type> ss{};\r\n    ostream_iterator<int, char_type> out_it(ss);\r\n    basic_string<char_type> str{};\r\n\r\n    char_type out_buffer[5]{};\r\n\r\n    mr.format(out_it, str.data(), str.data() + str.size());\r\n    mr.format(out_it, str);\r\n    mr.format(out_buffer, str.data(), str.data() + str.size());\r\n    mr.format(out_buffer, str);\r\n    str = mr.format(str);\r\n\r\n    equality_test(mr);\r\n    swap_test(mr);\r\n}\r\n\r\ntemplate <typename BasicRegexType>\r\nvoid basic_regex_test_impl() {\r\n    using char_type = typename BasicRegexType::value_type;\r\n    basic_string<char_type> str{};\r\n\r\n    BasicRegexType br1(str);\r\n    BasicRegexType br2(begin(str), end(str), regex_constants::ECMAScript);\r\n    BasicRegexType br3(begin(str), end(str));\r\n\r\n    br1 = str;\r\n    br2.assign(str);\r\n    br3.assign(begin(str), end(str));\r\n\r\n    swap_test(br1);\r\n\r\n    (void) regex_match(begin(str), end(str), br1);\r\n    (void) regex_match(str.c_str(), br1);\r\n\r\n    match_results<const char_type*> mrc{};\r\n    regex_match(str.c_str(), mrc, br1);\r\n\r\n    match_results<typename basic_string<char_type>::const_iterator> mrs{};\r\n    regex_match(str, mrs, br1);\r\n    (void) regex_match(str, br1);\r\n\r\n    regex_search(cbegin(str), cend(str), mrs, br1);\r\n    (void) regex_search(cbegin(str), cend(str), br1);\r\n    (void) regex_search(str.c_str(), br1);\r\n    regex_search(str.c_str(), mrc, br1);\r\n    regex_search(str, mrs, br1);\r\n    (void) regex_search(str, br1);\r\n\r\n    basic_stringstream<char_type> ss{};\r\n    ostream_iterator<int, char_type> out_it(ss);\r\n    char_type out_buffer[5] = {0};\r\n\r\n    regex_replace(out_it, cbegin(str), cend(str), br1, str);\r\n    regex_replace(out_buffer, cbegin(str), cend(str), br1, str);\r\n    regex_replace(out_it, begin(str), end(str), br1, str.c_str());\r\n    (void) regex_replace(str, br1, str);\r\n    (void) regex_replace(str, br1, str.c_str());\r\n    (void) regex_replace(str.c_str(), br1, str);\r\n    (void) regex_replace(str.c_str(), br1, str.c_str());\r\n}\r\n\r\ntemplate <typename RegexTokenIterator>\r\nvoid regex_token_iterator_test_impl() {\r\n    using it_type      = typename RegexTokenIterator::value_type::iterator;\r\n    int submatches[10] = {0};\r\n    it_type start{};\r\n    it_type finish{};\r\n    typename RegexTokenIterator::regex_type rgx{};\r\n    RegexTokenIterator rti0(start, finish, rgx, submatches);\r\n}\r\n\r\nvoid regex_test() {\r\n    regex_traits_test_impl<char>();\r\n    regex_traits_test_impl<wchar_t>();\r\n\r\n    sub_match_test_impl<csub_match>();\r\n    sub_match_test_impl<wcsub_match>();\r\n    sub_match_test_impl<ssub_match>();\r\n    sub_match_test_impl<wssub_match>();\r\n\r\n    match_results_test_impl<cmatch>();\r\n    match_results_test_impl<wcmatch>();\r\n    match_results_test_impl<smatch>();\r\n    match_results_test_impl<wsmatch>();\r\n\r\n    basic_regex_test_impl<regex>();\r\n    basic_regex_test_impl<wregex>();\r\n\r\n    cregex_iterator cri{};\r\n    wcregex_iterator wcri{};\r\n    sregex_iterator sri{};\r\n    wsregex_iterator wsri{};\r\n\r\n    regex_token_iterator_test_impl<cregex_token_iterator>();\r\n    regex_token_iterator_test_impl<wcregex_token_iterator>();\r\n    regex_token_iterator_test_impl<sregex_token_iterator>();\r\n    regex_token_iterator_test_impl<wsregex_token_iterator>();\r\n}\r\n\r\n// need custom minimal allocator to use for scoped_allocator_test to reach all template paths\r\ntemplate <typename T>\r\nstruct custom_allocator {\r\n    using value_type = T;\r\n\r\n    custom_allocator() {}\r\n\r\n    template <class U>\r\n    custom_allocator(const custom_allocator<U>&) {}\r\n\r\n    T* allocate(size_t) {\r\n        return nullptr;\r\n    }\r\n\r\n    void deallocate(T*, size_t) {}\r\n};\r\n\r\ntemplate <typename T, typename U>\r\nbool operator==(const custom_allocator<T>&, const custom_allocator<U>&) {\r\n    return true;\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nbool operator!=(const custom_allocator<T>& a, const custom_allocator<U>& b) {\r\n    return !(a == b);\r\n}\r\n\r\nvoid scoped_allocator_test() {\r\n    using my_vector_saa = scoped_allocator_adaptor<allocator<vector<int>>, allocator<int>>;\r\n    using my_double_saa = scoped_allocator_adaptor<allocator<vector<double>>, allocator<int>>;\r\n\r\n    INSTANTIATE(my_vector_saa::rebind<allocator<double>>);\r\n\r\n    allocator<vector<int>> vec_alloc{};\r\n    allocator<int> int_alloc{};\r\n\r\n    my_vector_saa saa1(move(vec_alloc), move(int_alloc));\r\n    my_double_saa saa2(saa1);\r\n    my_vector_saa saa3(move(saa2));\r\n    saa2 = move(saa1);\r\n    saa3 = saa2;\r\n\r\n    scoped_allocator_adaptor<custom_allocator<int>>\r\n        custom_saa{}; // needed to hit .construct paths with nonconvertible allocator\r\n\r\n    vector<int> val{};\r\n    vector<int>* ptr = &val;\r\n    custom_saa.construct(ptr, static_cast<size_t>(1), 2);\r\n\r\n    saa1.construct(ptr, static_cast<size_t>(1), 2);\r\n\r\n    tuple<int, int> tuple_val{};\r\n    tuple<int, int>* tuple_ptr = &tuple_val; // tuple needed to hit .construct paths with allocator_arg_t\r\n    saa1.construct(tuple_ptr, make_pair(1, 2));\r\n\r\n    using my_pair = pair<vector<int>, vector<int>>;\r\n    auto pair_ptr = static_cast<my_pair*>(malloc(sizeof(my_pair)));\r\n\r\n    custom_saa.construct(\r\n        pair_ptr, piecewise_construct, make_tuple(static_cast<size_t>(1), 2), make_tuple(static_cast<size_t>(1), 2));\r\n    saa1.construct(\r\n        pair_ptr, piecewise_construct, make_tuple(static_cast<size_t>(1), 2), make_tuple(static_cast<size_t>(1), 2));\r\n\r\n    using tuple_pair = pair<tuple<int, int>, tuple<int, int>>;\r\n    auto tp_ptr      = static_cast<tuple_pair*>(malloc(sizeof(tuple_pair)));\r\n    saa1.construct(tp_ptr, piecewise_construct, make_tuple(make_pair(1, 2)), make_tuple(make_pair(1, 2)));\r\n\r\n    saa1.construct(pair_ptr);\r\n    vector<int> vec{};\r\n    saa1.construct(pair_ptr, move(vec), move(vec));\r\n\r\n    my_pair vec_pair{};\r\n    saa1.construct(pair_ptr, vec_pair);\r\n    saa1.construct(pair_ptr, move(vec_pair));\r\n\r\n    equality_test(saa1); // same outer, same inner\r\n    equality_test(saa1, saa2); // different outer, same inner\r\n\r\n    scoped_allocator_adaptor<allocator<vector<double>>, allocator<double>> saa4;\r\n    equality_test(saa1, saa4); // different outer, different inner\r\n\r\n    scoped_allocator_adaptor<allocator<vector<int>>, allocator<double>> saa5{};\r\n    equality_test(saa1, saa5); // same outer, different inner\r\n\r\n    scoped_allocator_adaptor<allocator<vector<double>>> saa6; // different outer, missing inner\r\n    equality_test(saa1, saa6);\r\n\r\n    scoped_allocator_adaptor<allocator<vector<int>>> saa7; // same outer, missing inner\r\n    equality_test(saa1, saa7);\r\n}\r\n\r\n#ifndef _M_CEE_PURE\r\nvoid shared_mutex_test() {\r\n    using namespace chrono;\r\n\r\n    timed_mutex_test_impl<shared_timed_mutex>();\r\n\r\n    shared_timed_mutex stm{};\r\n    (void) stm.try_lock_shared_for(seconds(1));\r\n    (void) stm.try_lock_shared_until(system_clock::now());\r\n\r\n    shared_lock<shared_timed_mutex> sl1(stm, seconds(1));\r\n    shared_lock<shared_timed_mutex> sl2(stm, system_clock::now());\r\n\r\n    (void) sl1.try_lock_for(seconds(1));\r\n    (void) sl2.try_lock_until(system_clock::now());\r\n    swap_test(sl1);\r\n}\r\n#endif // _M_CEE_PURE\r\n\r\ntemplate <typename T>\r\nvoid sstream_test_impl() {\r\n    T val{};\r\n    swap_test(val);\r\n}\r\n\r\nvoid sstream_test() {\r\n    sstream_test_impl<stringbuf>();\r\n    sstream_test_impl<wstringbuf>();\r\n    sstream_test_impl<istringstream>();\r\n    sstream_test_impl<wistringstream>();\r\n    sstream_test_impl<ostringstream>();\r\n    sstream_test_impl<wostringstream>();\r\n    sstream_test_impl<stringstream>();\r\n    sstream_test_impl<wstringstream>();\r\n}\r\n\r\nvoid streambuf_test() {\r\n    stringstream ss{};\r\n    basic_streambuf<char>& bsbc = *ss.rdbuf();\r\n    (void) bsbc;\r\n\r\n    wstringstream wss{};\r\n    basic_streambuf<wchar_t>& bsbwc = *wss.rdbuf();\r\n    (void) bsbwc;\r\n\r\n    // istreambuf_iterator and ostreambuf_iterator covered in iterators test\r\n}\r\n\r\n#ifndef _M_CEE_PURE\r\nvoid thread_test() {\r\n    using namespace chrono;\r\n\r\n    thread thr([](int, int) {}, 1, 2);\r\n\r\n    this_thread::sleep_for(seconds(1));\r\n    this_thread::sleep_until(system_clock::now());\r\n\r\n    thread::id thr_id{};\r\n\r\n    cout << thr_id;\r\n    hash_test(thr_id);\r\n}\r\n#endif // _M_CEE_PURE\r\n\r\nvoid tuple_test() {\r\n    allocator<double> my_alloc{};\r\n    custom_allocator<double> custom_alloc{}; // to hit _Tuple_val non-convertible allocator\r\n\r\n    tuple<> empty_tuple1(allocator_arg, allocator<double>());\r\n    tuple<> empty_tuple2(allocator_arg, allocator<double>(), empty_tuple1);\r\n    (void) empty_tuple2;\r\n\r\n    tuple<int, int> tup1{};\r\n    tuple<const int&, const int&> tup2(tup1);\r\n    tuple<const int&, const int&> tup3(allocator_arg, my_alloc, tup1);\r\n    tuple<const char*, const char*> tup4(\"Hello\", \"World\");\r\n    tuple<const char*, const char*> tup5(allocator_arg, my_alloc, \"Hello\", \"World\");\r\n    tuple<string, string> tup6(\"Hello\", \"World\");\r\n    tuple<string, string> tup7(allocator_arg, my_alloc, \"Hello\", \"World\");\r\n\r\n    tup6 = tup4;\r\n    tup7 = move(tup5);\r\n\r\n    tuple<int, int> tup8(allocator_arg, my_alloc);\r\n    tuple<int, int> tup9(allocator_arg, my_alloc, tup8);\r\n    auto int_pair = make_pair(1, 2);\r\n    tuple<int, int> tup10(int_pair);\r\n    tuple<int, int> tup11(allocator_arg, my_alloc, int_pair);\r\n\r\n    tup10 = int_pair;\r\n\r\n    tuple<int, int> tup12(allocator_arg, my_alloc, move(tup9));\r\n    tuple<int, int> tup13(move(int_pair));\r\n    tuple<int, int> tup14(allocator_arg, my_alloc, move(int_pair));\r\n\r\n    tup11 = move(int_pair);\r\n\r\n    comparable_test(tup12);\r\n    swap_test(tup13);\r\n\r\n    // Extras to ensure hitting _Tuple_val specializations.\r\n    tuple<int> tup15(allocator_arg, custom_alloc, 1); // construct with non-convertible allocator.\r\n    tuple<tuple<int, int>> tup16(allocator_arg, my_alloc, tup14); // construct with leading allocator.\r\n    tuple<string> tup17(allocator_arg, my_alloc, \"MyStr\"); // construct with trailing allocator.\r\n\r\n    (void) get<0>(tup15);\r\n    (void) get<0>(move(tup16));\r\n\r\n    const tuple<string> tup17_c = tup17;\r\n    (void) get<0>(tup17_c);\r\n    (void) get<0>(move(tup17_c));\r\n\r\n    (void) get<int>(tup15);\r\n    (void) get<tuple<int, int>>(move(tup16));\r\n    (void) get<string>(tup17_c);\r\n    (void) get<string>(move(tup17_c));\r\n\r\n    (void) get<volatile int>(tuple<volatile int>{});\r\n    (void) get<const volatile int>(tuple<const volatile int>{});\r\n\r\n    int a = 1, b = 2;\r\n    tie(a, b) = make_tuple(a, b);\r\n    (void) forward_as_tuple(string{}, string{});\r\n\r\n    (void) tuple_cat(tup15, tup16);\r\n\r\n#if _HAS_CXX17\r\n    apply(plus<>{}, tup1);\r\n    (void) make_from_tuple<long>(tuple<int>(1729));\r\n#endif // _HAS_CXX17\r\n\r\n    pair<string, string> pair1(\r\n        piecewise_construct, make_tuple(\"Hello\", static_cast<size_t>(6)), make_tuple(\"World\", static_cast<size_t>(6)));\r\n\r\n    TRAIT_V(uses_allocator, tuple<int>, allocator<double>);\r\n}\r\n\r\nstruct utility_test_helper {};\r\n\r\nbool operator==(const utility_test_helper&, const utility_test_helper&) {\r\n    return true;\r\n}\r\n\r\nbool operator<(const utility_test_helper&, const utility_test_helper&) {\r\n    return false;\r\n}\r\n\r\nvoid utility_test() {\r\n    struct my_class1 {};\r\n    my_class1 mc1{};\r\n    swap_test(mc1);\r\n\r\n    // iter_swap covered in algorithms_test\r\n\r\n    int arr1[5] = {0};\r\n    int arr2[5] = {0};\r\n    swap(arr1, arr2);\r\n\r\n    pair<int, int> p1 = make_pair(1, 2);\r\n    pair<const int&, const int&> p2(p1);\r\n    p1 = p2;\r\n\r\n    // pair piecewise construct from tuple covered in tuple_test\r\n\r\n    pair<string, string> p3(\"Hello\", \"World\");\r\n    pair<const char*, const char*> p4(\"Hello\", \"World\");\r\n    pair<string, string> p5(move(p4));\r\n    p5 = move(p4);\r\n\r\n    swap_test(p3);\r\n    comparable_test(p1);\r\n\r\n    {\r\n        utility_test_helper uth{};\r\n        using namespace rel_ops;\r\n        USE_VALUE(uth != uth);\r\n        USE_VALUE(uth > uth);\r\n        USE_VALUE(uth <= uth);\r\n        USE_VALUE(uth >= uth);\r\n    }\r\n\r\n    TRAIT_V(tuple_size, array<int, 5>);\r\n    TRAIT_V(tuple_size, pair<int, double>);\r\n    TRAIT_V(tuple_size, tuple<int, int, int>);\r\n    TRAIT_V(tuple_size, const tuple<int, int, int>);\r\n    TRAIT_V(tuple_size, volatile tuple<int, int, int>);\r\n    TRAIT_V(tuple_size, const volatile tuple<int, int, int>);\r\n\r\n    INSTANTIATE(tuple_element_t<1, array<int, 5>>);\r\n    INSTANTIATE(tuple_element_t<0, pair<int, double>>);\r\n    INSTANTIATE(tuple_element_t<1, pair<int, double>>);\r\n    INSTANTIATE(tuple_element_t<2, tuple<int, int, int>>);\r\n    INSTANTIATE(tuple_element_t<2, const tuple<int, int, int>>);\r\n    INSTANTIATE(tuple_element_t<2, volatile tuple<int, int, int>>);\r\n    INSTANTIATE(tuple_element_t<2, const volatile tuple<int, int, int>>);\r\n\r\n    auto p6       = make_pair(1, string(\"test\"));\r\n    const auto p7 = as_const(p6);\r\n\r\n    (void) get<0>(p6);\r\n    (void) get<int>(p6);\r\n    (void) get<string>(p6);\r\n\r\n    (void) get<0>(p7);\r\n    (void) get<int>(p7);\r\n    (void) get<string>(p7);\r\n\r\n    (void) get<0>(move(p6));\r\n    (void) get<int>(move(p6));\r\n    (void) get<string>(move(p6));\r\n\r\n    (void) get<0>(move(p7));\r\n    (void) get<int>(move(p7));\r\n    (void) get<string>(move(p7));\r\n\r\n    exchange(p3, move(p5));\r\n}\r\n\r\nvoid typeindex_test() {\r\n    type_index ti(typeid(int));\r\n    hash_test(ti);\r\n}\r\n\r\ntemplate <typename FunctorArg, typename Arg>\r\nvoid functors_test_impl(Arg val) {\r\n    // Following from <type_traits> and <xutility>:\r\n    (void) plus<FunctorArg>()(val, val);\r\n    (void) minus<FunctorArg>()(val, val);\r\n    (void) multiplies<FunctorArg>()(val, val);\r\n    (void) equal_to<FunctorArg>()(val, val);\r\n    (void) less<FunctorArg>()(val, val);\r\n\r\n    (void) divides<FunctorArg>()(val, val);\r\n    (void) modulus<FunctorArg>()(val, val);\r\n    (void) negate<FunctorArg>()(val);\r\n    (void) not_equal_to<FunctorArg>()(val, val);\r\n    (void) greater<FunctorArg>()(val, val);\r\n    (void) greater_equal<FunctorArg>()(val, val);\r\n    (void) less_equal<FunctorArg>()(val, val);\r\n    (void) logical_and<FunctorArg>()(val, val);\r\n    (void) logical_or<FunctorArg>()(val, val);\r\n    (void) logical_not<FunctorArg>()(val);\r\n    (void) bit_and<FunctorArg>()(val, val);\r\n    (void) bit_or<FunctorArg>()(val, val);\r\n    (void) bit_xor<FunctorArg>()(val, val);\r\n    (void) bit_not<FunctorArg>()(val);\r\n}\r\n\r\nint real_unary_function(int) {\r\n    return 1;\r\n}\r\n\r\nint real_binary_function(int, int) {\r\n    return 1;\r\n}\r\n\r\nvoid xfunctional_test() {\r\n    functors_test_impl<int>(5);\r\n    functors_test_impl<void>(5);\r\n    (void) not1(negate<int>())(5); // not1 requires T::second_argument_type\r\n    (void) not2(less_equal<int>())(5, 5); // not2 requires T::second_argument_type\r\n\r\n#if _HAS_AUTO_PTR_ETC\r\n    auto b1 = bind1st(plus<int>(), 1);\r\n    auto b2 = bind2nd(plus<int>(), 2);\r\n\r\n    (void) b1;\r\n    (void) b2;\r\n\r\n    auto ptuf = ptr_fun(real_unary_function);\r\n    auto ptbf = ptr_fun(real_binary_function);\r\n\r\n    (void) ptuf;\r\n    (void) ptbf;\r\n\r\n    struct A {\r\n        int fn() {\r\n            return 1;\r\n        }\r\n        int fn1(int) {\r\n            return 2;\r\n        }\r\n        int cfn() const {\r\n            return 3;\r\n        }\r\n        int cfn1(int) const {\r\n            return 4;\r\n        }\r\n    };\r\n\r\n    auto mft   = mem_fun(&A::fn);\r\n    auto mft1  = mem_fun(&A::fn1);\r\n    auto cmft  = mem_fun(&A::cfn);\r\n    auto cmft1 = mem_fun(&A::cfn1);\r\n\r\n    auto mfrt   = mem_fun_ref(&A::fn);\r\n    auto mfrt1  = mem_fun_ref(&A::fn1);\r\n    auto cmfrt  = mem_fun_ref(&A::cfn);\r\n    auto cmfrt1 = mem_fun_ref(&A::cfn1);\r\n\r\n    (void) mft;\r\n    (void) mft1;\r\n    (void) cmft;\r\n    (void) cmft1;\r\n\r\n    (void) mfrt;\r\n    (void) mfrt1;\r\n    (void) cmfrt;\r\n    (void) cmfrt1;\r\n#endif // _HAS_AUTO_PTR_ETC\r\n}\r\n\r\ntemplate <typename CharType>\r\nvoid facet_unicode_and_native_wchart_test_impl() {\r\n    locale loc{};\r\n\r\n    // <codecvt>\r\n    codecvt_utf8<CharType> cvt_utf8{};\r\n    codecvt_utf16<CharType> cvt_utf16{};\r\n    codecvt_utf8_utf16<CharType> cvt_utf8_utf16{};\r\n}\r\n\r\ntemplate <typename CharType>\r\nvoid facet_all_test_impl() {\r\n    locale loc{};\r\n    auto ccvt    = has_facet<codecvt<CharType, char, mbstate_t>>(loc);\r\n    auto ccvt_bn = has_facet<codecvt_byname<CharType, char, mbstate_t>>(loc);\r\n    auto ct      = has_facet<ctype<CharType>>(loc);\r\n    auto ct_bn   = has_facet<ctype_byname<CharType>>(loc);\r\n\r\n    // <xlocmon>\r\n    auto mp        = has_facet<moneypunct<CharType, false>>(loc);\r\n    auto mpbn      = has_facet<moneypunct_byname<CharType, false>>(loc);\r\n    auto mp_intl   = has_facet<moneypunct<CharType, true>>(loc);\r\n    auto mpbn_intl = has_facet<moneypunct_byname<CharType, true>>(loc);\r\n    auto mg        = has_facet<money_get<CharType>>(loc);\r\n    auto mput      = has_facet<money_put<CharType>>(loc);\r\n\r\n    // <xlocnum>\r\n    auto np   = has_facet<numpunct<CharType>>(loc);\r\n    auto npbn = has_facet<numpunct_byname<CharType>>(loc);\r\n    auto ng   = has_facet<num_get<CharType>>(loc);\r\n    auto nput = has_facet<num_put<CharType>>(loc);\r\n\r\n    // <xloctime>\r\n    auto tg   = has_facet<time_get<CharType>>(loc);\r\n    auto tgbn = has_facet<time_get_byname<CharType>>(loc);\r\n    auto tp   = has_facet<time_put<CharType>>(loc);\r\n    auto tpbn = has_facet<time_put_byname<CharType>>(loc);\r\n\r\n    // <xlocmes>\r\n    auto locmes   = has_facet<messages<CharType>>(loc);\r\n    auto locmesbn = has_facet<messages_byname<CharType>>(loc);\r\n\r\n    facet_unicode_and_native_wchart_test_impl<CharType>();\r\n\r\n    (void) ccvt;\r\n    (void) ccvt_bn;\r\n    (void) ct;\r\n    (void) ct_bn;\r\n    (void) mp;\r\n    (void) mpbn;\r\n    (void) mp_intl;\r\n    (void) mpbn_intl;\r\n    (void) mg;\r\n    (void) mput;\r\n    (void) np;\r\n    (void) npbn;\r\n    (void) ng;\r\n    (void) nput;\r\n    (void) tg;\r\n    (void) tgbn;\r\n    (void) tp;\r\n    (void) tpbn;\r\n    (void) locmes;\r\n    (void) locmesbn;\r\n}\r\n\r\nvoid xlocale_test() {\r\n    locale loc1{};\r\n\r\n    loc1(string{\"Hello\"}, string{\"World\"});\r\n    loc1.combine<numpunct<char>>(loc1);\r\n    locale loc2(loc1, new codecvt_utf8<wchar_t>);\r\n    use_facet<moneypunct<char, true>>(loc2);\r\n\r\n    // This test also covers <codecvt>\r\n    facet_all_test_impl<char>();\r\n    facet_all_test_impl<wchar_t>();\r\n    facet_unicode_and_native_wchart_test_impl<char16_t>();\r\n    facet_unicode_and_native_wchart_test_impl<char32_t>();\r\n#ifndef _NATIVE_WCHAR_T_DEFINED\r\n    facet_all_test_impl<unsigned short>();\r\n#endif // _NATIVE_WCHAR_T_DEFINED\r\n}\r\n\r\nvoid xlocbuf_test() {\r\n    wbuffer_convert<codecvt_utf8<wchar_t>> wb_cvt{};\r\n    wstring_convert<codecvt_utf8<wchar_t>> ws_cvt{};\r\n}\r\n\r\nvoid xmemory_test() {\r\n    int* buff = get_temporary_buffer<int>(4).first;\r\n    raw_storage_iterator<int*, int> rsi(buff);\r\n    return_temporary_buffer(buff);\r\n    (void) rsi;\r\n\r\n    // uninitialized_* in algorithms_test\r\n\r\n#if _HAS_AUTO_PTR_ETC\r\n    struct Base {};\r\n    struct Derived : Base {};\r\n\r\n    auto_ptr<Derived> ap1{};\r\n    auto auto_ptr_source = []() { return auto_ptr<Derived>{}; };\r\n    auto_ptr<Base> ap2(auto_ptr_source()); // converts to auto_ptr_ref\r\n\r\n    USE_VALUE(static_cast<auto_ptr<Base>>(ap1));\r\n\r\n    auto_ptr<Base> ap3(ap1);\r\n    ap3 = ap1;\r\n#endif // _HAS_AUTO_PTR_ETC\r\n}\r\n\r\nvoid xmemory0_test() {\r\n    INSTANTIATE(pointer_traits<unique_ptr<int>>);\r\n\r\n    struct Base {};\r\n\r\n    struct Derived : Base {};\r\n\r\n    INSTANTIATE(pointer_traits<unique_ptr<Base>>::rebind<Derived>);\r\n    INSTANTIATE(pointer_traits<int*>);\r\n    INSTANTIATE(pointer_traits<Base*>::rebind<Derived*>);\r\n\r\n    INSTANTIATE(allocator_traits<allocator<int>>);\r\n    INSTANTIATE(allocator_traits<allocator<int>>::rebind_alloc<double>);\r\n    INSTANTIATE(allocator_traits<allocator<int>>::rebind_traits<double>);\r\n\r\n    allocator<int> ai{};\r\n    custom_allocator<int> cai{};\r\n    int* ptr{};\r\n\r\n    allocator_traits<custom_allocator<int>>::construct(cai, ptr, 5);\r\n    allocator_traits<custom_allocator<int>>::destroy(cai, ptr);\r\n\r\n    allocator_traits<allocator<int>>::construct(ai, ptr, 5);\r\n    allocator_traits<allocator<int>>::destroy(ai, ptr);\r\n\r\n    INSTANTIATE(allocator<int>::rebind<double>);\r\n\r\n    allocator<double> ad(ai);\r\n    ai = ad;\r\n\r\n    allocator<int> ai2(ad);\r\n\r\n    ai2.construct(ptr, 1);\r\n    ai2.destroy(ptr);\r\n\r\n    INSTANTIATE(allocator<double>::rebind<int>);\r\n\r\n    ad = ai2;\r\n    equality_test(ad, ai);\r\n}\r\n\r\nvoid xstddef_test() {\r\n#if _HAS_AUTO_PTR_ETC\r\n    INSTANTIATE(unary_function<int, int>);\r\n    INSTANTIATE(binary_function<int, int, int>);\r\n#endif // _HAS_AUTO_PTR_ETC\r\n\r\n    // plus<>, minus<>, multiplies<>, equal_to<>, less<> tested in xfunctional_test\r\n\r\n    hash_test<bool>();\r\n    hash_test<char>();\r\n    hash_test<signed char>();\r\n    hash_test<unsigned char>();\r\n#ifdef __cpp_char8_t\r\n    hash_test<char8_t>();\r\n#endif // __cpp_char8_t\r\n    hash_test<char16_t>();\r\n    hash_test<char32_t>();\r\n    hash_test<wchar_t>();\r\n    hash_test<short>();\r\n    hash_test<unsigned short>();\r\n    hash_test<int>();\r\n    hash_test<unsigned int>();\r\n    hash_test<long>();\r\n    hash_test<unsigned long>();\r\n    hash_test<long long>();\r\n    hash_test<unsigned long long>();\r\n    hash_test<float>();\r\n    hash_test<double>();\r\n    hash_test<long double>();\r\n    hash_test<void*>();\r\n    // is_function covered in traits_test\r\n\r\n    int value{};\r\n    (void) addressof(value);\r\n    (void) addressof(real_unary_function);\r\n}\r\n\r\ntemplate <typename T1>\r\nvoid xtgmath_integral_test_impl() {\r\n    T1 arg1{1};\r\n    int int_value{};\r\n    long long_value{};\r\n    long double ld_value{};\r\n\r\n    (void) acos(arg1);\r\n    (void) asin(arg1);\r\n    (void) atan(arg1);\r\n    (void) ceil(arg1);\r\n    (void) cos(arg1);\r\n    (void) cosh(arg1);\r\n    (void) exp(arg1);\r\n    (void) fabs(arg1);\r\n    (void) floor(arg1);\r\n    (void) frexp(arg1, &int_value);\r\n    (void) ldexp(arg1, int_value);\r\n    (void) log(arg1);\r\n    (void) log10(arg1);\r\n    (void) sin(arg1);\r\n    (void) sinh(arg1);\r\n    (void) sqrt(arg1);\r\n    (void) tan(arg1);\r\n    (void) tanh(arg1);\r\n    (void) acosh(arg1);\r\n    (void) asinh(arg1);\r\n    (void) atanh(arg1);\r\n    (void) cbrt(arg1);\r\n    (void) erf(arg1);\r\n    (void) erfc(arg1);\r\n    (void) expm1(arg1);\r\n    (void) exp2(arg1);\r\n    (void) ilogb(arg1);\r\n    (void) lgamma(arg1);\r\n    (void) llrint(arg1);\r\n    (void) llround(arg1);\r\n    (void) log1p(arg1);\r\n    (void) log2(arg1);\r\n    (void) logb(arg1);\r\n    (void) lrint(arg1);\r\n    (void) lround(arg1);\r\n    (void) nearbyint(arg1);\r\n    (void) nexttoward(arg1, ld_value);\r\n    (void) rint(arg1);\r\n    (void) round(arg1);\r\n    (void) scalbln(arg1, long_value);\r\n    (void) scalbn(arg1, int_value);\r\n    (void) tgamma(arg1);\r\n    (void) trunc(arg1);\r\n}\r\n\r\ntemplate <typename T1, typename T2, typename T3>\r\nvoid xtgmath_arithmetic_test_impl() {\r\n    T1 arg1{1};\r\n    T2 arg2{2};\r\n\r\n    int int_value{};\r\n\r\n    USE_VALUE(atan2(arg1, arg2));\r\n    USE_VALUE(fmod(arg1, arg2));\r\n    T3 arg3{3};\r\n    USE_VALUE(fma(arg1, arg2, arg3));\r\n    USE_VALUE(remquo(arg1, arg2, &int_value));\r\n    USE_VALUE(copysign(arg1, arg2));\r\n    USE_VALUE(fdim(arg1, arg2));\r\n    USE_VALUE(fmax(arg1, arg2));\r\n    USE_VALUE(fmin(arg1, arg2));\r\n    USE_VALUE(hypot(arg1, arg2));\r\n    USE_VALUE(nextafter(arg1, arg2));\r\n    USE_VALUE(remainder(arg1, arg2));\r\n}\r\n\r\nvoid xtgmath_test() {\r\n    xtgmath_integral_test_impl<int>();\r\n    xtgmath_arithmetic_test_impl<int, int, int>();\r\n    xtgmath_arithmetic_test_impl<int, int, float>();\r\n    xtgmath_arithmetic_test_impl<int, float, float>();\r\n    xtgmath_arithmetic_test_impl<float, float, float>();\r\n    xtgmath_arithmetic_test_impl<int, float, double>();\r\n    xtgmath_arithmetic_test_impl<int, double, double>();\r\n    xtgmath_arithmetic_test_impl<double, double, double>();\r\n    xtgmath_arithmetic_test_impl<float, float, double>();\r\n    xtgmath_arithmetic_test_impl<float, double, double>();\r\n}\r\n\r\nvoid xtr1common_test() {\r\n    INSTANTIATE(integral_constant<int, 5>);\r\n    INSTANTIATE(bool_constant<true>);\r\n    INSTANTIATE(enable_if<true>);\r\n    INSTANTIATE(enable_if<false>);\r\n    INSTANTIATE(conditional_t<true, int, double>);\r\n    INSTANTIATE(conditional_t<false, int, double>);\r\n    // rest of traits in this header tested in type_traits_test:\r\n    // is_same, remove_const, remove_volatile, remove_cv,\r\n    // is_integral, is_floating_point, is_arithmetic,\r\n    // remove_reference\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_type_traits/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_instantiate_type_traits/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _HAS_DEPRECATED_IS_LITERAL_TYPE 1\r\n#define _HAS_DEPRECATED_RESULT_OF       1\r\n#define _SILENCE_CXX17_IS_LITERAL_TYPE_DEPRECATION_WARNING\r\n#define _SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING\r\n#define _SILENCE_CXX20_IS_POD_DEPRECATION_WARNING\r\n#define _SILENCE_CXX23_ALIGNED_UNION_DEPRECATION_WARNING\r\n\r\n#include <array>\r\n#include <cstddef>\r\n#include <cstdio>\r\n#include <functional>\r\n#include <string>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <is_permissive.hpp>\r\n\r\n// lets INSTANTIATE macro be used for types that aren't default constructible.\r\n// Doesn't actually instantiate the type if not default constructible,\r\n// but it will inspect the type, which is the true purpose.\r\ntemplate <typename T, bool = std::is_default_constructible_v<T>>\r\nstruct instantiate_helper;\r\n\r\ntemplate <typename T>\r\nstruct instantiate_helper<T, true> {\r\n    using type = T;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct instantiate_helper<T, false> {\r\n    using type = int;\r\n};\r\n\r\n#define USE_VALUE(...)          \\\r\n    do {                        \\\r\n        auto val = __VA_ARGS__; \\\r\n        (void) val;             \\\r\n    } while (0)\r\n#define INSTANTIATE(...)                                      \\\r\n    do {                                                      \\\r\n        typename instantiate_helper<__VA_ARGS__>::type val{}; \\\r\n        (void) val;                                           \\\r\n    } while (0)\r\n#define TRAIT_V(TRAIT_NAME, ...) USE_VALUE(TRAIT_NAME##_v<__VA_ARGS__>)\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename T>\r\nvoid enum_traits_test_impl(true_type) {\r\n    INSTANTIATE(underlying_type_t<T>);\r\n}\r\n\r\ntemplate <typename>\r\nvoid enum_traits_test_impl(false_type) {}\r\n\r\ntemplate <typename T>\r\nvoid integral_traits_test_impl(true_type) {\r\n    INSTANTIATE(make_signed_t<T>);\r\n    INSTANTIATE(make_unsigned_t<T>);\r\n}\r\n\r\ntemplate <typename>\r\nvoid integral_traits_test_impl(false_type) {}\r\n\r\ntemplate <typename T, typename U>\r\nvoid constructible_traits_test_impl(true_type) {\r\n    INSTANTIATE(aligned_union_t<4, T, U>);\r\n    TRAIT_V(alignment_of, T);\r\n}\r\n\r\ntemplate <typename, typename>\r\nvoid constructible_traits_test_impl(false_type) {}\r\n\r\ntemplate <typename T>\r\nvoid common_type_test_impl(true_type) {\r\n    INSTANTIATE(common_type_t<T, T>);\r\n}\r\n\r\ntemplate <typename>\r\nvoid common_type_test_impl(false_type) {}\r\n\r\ntemplate <typename T, typename U = T>\r\nvoid type_traits_test_impl() {\r\n    TRAIT_V(is_void, T);\r\n    INSTANTIATE(add_const_t<T>);\r\n    INSTANTIATE(add_volatile_t<T>);\r\n    INSTANTIATE(add_cv_t<T>);\r\n    INSTANTIATE(add_lvalue_reference_t<T>);\r\n    INSTANTIATE(add_rvalue_reference_t<T>);\r\n    INSTANTIATE(remove_const_t<T>); // from xtr1common\r\n    INSTANTIATE(remove_volatile_t<T>); // from xtr1common\r\n    INSTANTIATE(remove_cv_t<T>); // from xtr1common\r\n    INSTANTIATE(remove_reference_t<T>); // from xtr1common\r\n    INSTANTIATE(remove_extent_t<T>);\r\n    INSTANTIATE(remove_all_extents_t<T>);\r\n    INSTANTIATE(remove_pointer_t<T>);\r\n    INSTANTIATE(add_pointer_t<T>);\r\n    TRAIT_V(is_array, T);\r\n    TRAIT_V(is_lvalue_reference, T);\r\n    TRAIT_V(is_rvalue_reference, T);\r\n    TRAIT_V(is_reference, T);\r\n    TRAIT_V(is_member_object_pointer, T);\r\n    TRAIT_V(is_member_function_pointer, T);\r\n    TRAIT_V(is_pointer, T);\r\n    TRAIT_V(is_null_pointer, T);\r\n    TRAIT_V(is_union, T);\r\n    TRAIT_V(is_class, T);\r\n    TRAIT_V(is_function, T);\r\n    TRAIT_V(is_fundamental, T);\r\n    TRAIT_V(is_arithmetic, T); // from xtr1common\r\n    TRAIT_V(is_object, T);\r\n    TRAIT_V(is_convertible, T, U);\r\n    TRAIT_V(is_enum, T);\r\n    TRAIT_V(is_compound, T);\r\n    TRAIT_V(is_member_pointer, T);\r\n    TRAIT_V(is_scalar, T);\r\n    TRAIT_V(is_const, T);\r\n    TRAIT_V(is_volatile, T);\r\n    TRAIT_V(is_pod, T);\r\n    TRAIT_V(is_abstract, T);\r\n    TRAIT_V(is_final, T);\r\n    TRAIT_V(is_standard_layout, T);\r\n    TRAIT_V(is_literal_type, T);\r\n    TRAIT_V(is_trivial, T);\r\n    TRAIT_V(is_trivially_copyable, T);\r\n    TRAIT_V(has_virtual_destructor, T);\r\n    TRAIT_V(is_constructible, T, U);\r\n    TRAIT_V(is_copy_constructible, T);\r\n    TRAIT_V(is_default_constructible, T);\r\n    TRAIT_V(is_move_constructible, T);\r\n    TRAIT_V(is_assignable, T, U);\r\n    TRAIT_V(is_copy_assignable, T);\r\n    TRAIT_V(is_move_assignable, T);\r\n    TRAIT_V(is_destructible, T);\r\n    TRAIT_V(is_trivially_constructible, T, U);\r\n    TRAIT_V(is_trivially_copy_constructible, T);\r\n    TRAIT_V(is_trivially_default_constructible, T);\r\n    TRAIT_V(is_trivially_move_constructible, T);\r\n    TRAIT_V(is_trivially_assignable, T, U);\r\n    TRAIT_V(is_trivially_destructible, T);\r\n    TRAIT_V(is_nothrow_constructible, T, U);\r\n    TRAIT_V(is_nothrow_copy_constructible, T);\r\n    TRAIT_V(is_nothrow_default_constructible, T);\r\n    TRAIT_V(is_nothrow_move_constructible, T);\r\n    TRAIT_V(is_nothrow_assignable, T, U);\r\n    TRAIT_V(is_nothrow_copy_assignable, T);\r\n    TRAIT_V(is_nothrow_move_assignable, T);\r\n    TRAIT_V(is_nothrow_destructible, T);\r\n    TRAIT_V(is_integral, T); // from xtr1common\r\n    TRAIT_V(is_floating_point, T); // from xtr1common\r\n    TRAIT_V(is_signed, T);\r\n    TRAIT_V(is_unsigned, T);\r\n#if _HAS_CXX20\r\n    TRAIT_V(is_bounded_array, T);\r\n    TRAIT_V(is_unbounded_array, T);\r\n#endif // _HAS_CXX20\r\n#if _HAS_CXX23\r\n    TRAIT_V(is_scoped_enum, T);\r\n#endif // _HAS_CXX23\r\n    TRAIT_V(rank, T);\r\n    TRAIT_V(extent, T);\r\n    TRAIT_V(is_same, T, U); // from xtr1common\r\n    TRAIT_V(is_base_of, T, U);\r\n    INSTANTIATE(decay_t<T>);\r\n    TRAIT_V(conjunction, is_reference<T>, is_lvalue_reference<T>);\r\n    TRAIT_V(disjunction, is_lvalue_reference<T>, is_reference<T>);\r\n    TRAIT_V(negation, is_reference<T>);\r\n#if _HAS_CXX17\r\n    TRAIT_V(is_swappable, T);\r\n    TRAIT_V(is_nothrow_swappable, T);\r\n    TRAIT_V(is_swappable_with, T, U);\r\n    if constexpr (!is_permissive || (is_lvalue_reference_v<T> && is_lvalue_reference_v<U>) ) { // avoid Evil Extension\r\n        TRAIT_V(is_nothrow_swappable_with, T, U);\r\n    }\r\n#endif // _HAS_CXX17\r\n#if _HAS_CXX20\r\n    INSTANTIATE(type_identity_t<T>);\r\n    INSTANTIATE(remove_cvref_t<T>); // from xtr1common\r\n#endif // _HAS_CXX20\r\n\r\n    enum_traits_test_impl<T>(is_enum<T>());\r\n    integral_traits_test_impl<T>(is_integral<T>());\r\n    constructible_traits_test_impl<T, U>(conjunction<is_constructible<T>, is_constructible<U>>());\r\n    common_type_test_impl<T>(conjunction<negation<is_volatile<T>>, is_constructible<T>>());\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nvoid type_traits_cv2_test_impl() {\r\n    type_traits_test_impl<T, U>();\r\n    type_traits_test_impl<T, add_const_t<U>>();\r\n    type_traits_test_impl<T, add_volatile_t<U>>();\r\n    type_traits_test_impl<T, add_cv_t<U>>();\r\n}\r\n\r\ntemplate <typename T, typename U = T>\r\nvoid type_traits_cv_test_impl() {\r\n    type_traits_cv2_test_impl<T, U>();\r\n    type_traits_cv2_test_impl<add_const_t<T>, U>();\r\n    type_traits_cv2_test_impl<add_volatile_t<T>, U>();\r\n    type_traits_cv2_test_impl<add_cv_t<T>, U>();\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nvoid type_traits_ref2_test_impl() {\r\n    type_traits_cv_test_impl<T, U>();\r\n    type_traits_cv_test_impl<T, add_lvalue_reference_t<U>>();\r\n    type_traits_cv_test_impl<T, add_rvalue_reference_t<U>>();\r\n}\r\n\r\ntemplate <typename T, typename U = T>\r\nvoid type_traits_ref_test_impl() {\r\n    type_traits_ref2_test_impl<T, U>();\r\n    type_traits_ref2_test_impl<add_lvalue_reference_t<T>, U>();\r\n    type_traits_ref2_test_impl<add_rvalue_reference_t<T>, U>();\r\n}\r\n\r\ntemplate <typename Callable, typename... Args>\r\nvoid type_traits_func_test_impl() {\r\n    INSTANTIATE(result_of<Callable(Args...)>);\r\n#if _HAS_CXX17\r\n    INSTANTIATE(invoke_result<Callable, Args...>);\r\n    INSTANTIATE(is_invocable<Callable, Args...>);\r\n    INSTANTIATE(is_nothrow_invocable<Callable, Args...>);\r\n    INSTANTIATE(is_invocable_r<int, Callable, Args...>);\r\n    INSTANTIATE(is_nothrow_invocable_r<int, Callable, Args...>);\r\n#endif // _HAS_CXX17\r\n}\r\n\r\nvoid type_traits_test() {\r\n    type_traits_ref_test_impl<void>();\r\n    type_traits_ref_test_impl<void*, int*>();\r\n    type_traits_ref_test_impl<int[]>();\r\n    type_traits_ref_test_impl<int[5]>();\r\n    type_traits_ref_test_impl<int[5][5]>();\r\n\r\n    type_traits_ref_test_impl<array<int, 5>>();\r\n    type_traits_ref_test_impl<string, const char*>();\r\n    type_traits_ref_test_impl<vector<int>, int>();\r\n    type_traits_ref_test_impl<decltype(printf)>();\r\n    type_traits_ref_test_impl<int(int)>();\r\n    type_traits_ref_test_impl<int(int, int)>();\r\n    type_traits_ref_test_impl<int(int, int, int)>();\r\n\r\n    struct A final {\r\n        void fn() {}\r\n        int x;\r\n        void (A::*fn_ptr)();\r\n    };\r\n    type_traits_ref_test_impl<A>();\r\n    type_traits_ref_test_impl<int A::*>();\r\n    type_traits_ref_test_impl<decltype(&A::fn)>();\r\n    type_traits_ref_test_impl<nullptr_t>();\r\n    union B {\r\n        int a;\r\n        double b;\r\n    };\r\n    type_traits_ref_test_impl<B>();\r\n    class C {\r\n    public:\r\n        virtual ~C() {}\r\n        virtual void fn() = 0;\r\n    };\r\n\r\n    type_traits_ref_test_impl<C>();\r\n    enum class D {};\r\n    type_traits_ref_test_impl<D>();\r\n    enum E {};\r\n    type_traits_ref_test_impl<E>();\r\n    type_traits_ref_test_impl<unsigned long>();\r\n    type_traits_ref_test_impl<double>();\r\n    type_traits_ref_test_impl<int>();\r\n    type_traits_ref_test_impl<short>();\r\n    type_traits_ref_test_impl<char>();\r\n    type_traits_ref_test_impl<unsigned int>();\r\n    class F : public C {\r\n    public:\r\n        virtual ~F() {}\r\n    };\r\n    type_traits_ref_test_impl<F, C>();\r\n    type_traits_ref_test_impl<pair<int, double>>();\r\n    type_traits_ref_test_impl<tuple<int, int, int>>();\r\n\r\n    INSTANTIATE(make_integer_sequence<int, 0>);\r\n    INSTANTIATE(index_sequence<1, 1, 2, 3, 5, 8, 13>);\r\n    INSTANTIATE(make_index_sequence<5>);\r\n    INSTANTIATE(index_sequence_for<int, int, int, int>);\r\n\r\n    auto e = forward<string&&>(string{});\r\n    string str{};\r\n    auto f               = move(str);\r\n    auto g               = move_if_noexcept(str);\r\n    auto lambda          = []() { return 5; };\r\n    auto noexcept_lambda = []() noexcept { return 5; };\r\n\r\n    A my_a{};\r\n    invoke(lambda);\r\n    invoke(noexcept_lambda);\r\n    invoke(&A::fn, my_a);\r\n    invoke(my_a.fn_ptr, my_a);\r\n\r\n    type_traits_func_test_impl<decltype(lambda)>();\r\n    type_traits_func_test_impl<decltype(lambda), int>();\r\n    type_traits_func_test_impl<decltype(noexcept_lambda)>();\r\n    type_traits_func_test_impl<decltype(noexcept_lambda), int>();\r\n    type_traits_func_test_impl<decltype(&A::fn), A>();\r\n    type_traits_func_test_impl<void, int>();\r\n    type_traits_func_test_impl<int, int>();\r\n    using fp = void (*)(int);\r\n    type_traits_func_test_impl<fp, int>();\r\n\r\n    USE_VALUE(ref(my_a));\r\n    auto ref_lambda = ref(lambda);\r\n    ref_lambda();\r\n    auto cref_lambda = cref(lambda);\r\n    cref_lambda();\r\n    const A const_a{};\r\n    USE_VALUE(cref(const_a));\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_list_iterator_debugging/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_list_iterator_debugging/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <memory>\r\n#include <stdexcept>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct non_noexcept_less_int {\r\n    bool operator()(int a, int b) /* neither const nor noexcept */ {\r\n        return a < b;\r\n    }\r\n};\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_ownership_of_element_transferred() {\r\n    list<int> list1{1, 3, 5};\r\n    list<int> list2{2, 4, 6};\r\n    auto transfer = list2.begin();\r\n    list1.merge(list2, Cmp{});\r\n    list1.erase(transfer); // OK, transfer is now a member of list1\r\n    static constexpr int expected[] = {1, 3, 4, 5, 6};\r\n    assert(equal(begin(expected), end(expected), list1.begin(), list1.end()));\r\n    assert(list2.empty());\r\n}\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_ownership_of_element_transferred_bad() {\r\n    list<int> list1{1, 3, 5};\r\n    list<int> list2{2, 4, 6};\r\n    auto transfer = list2.begin();\r\n    list1.merge(list2, Cmp{});\r\n    list2.erase(transfer); // Iterator incompatible, it became a member of list1\r\n}\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_ownership_of_end_not_transferred() {\r\n    list<int> list1{1, 3, 5};\r\n    list<int> list2{2, 4, 6};\r\n    auto noTransfer = list2.end();\r\n    list1.merge(list2, Cmp{});\r\n    list2.push_front(10);\r\n    list2.erase(--noTransfer); // OK, end is not transferred\r\n    static constexpr int expected[] = {1, 2, 3, 4, 5, 6};\r\n    assert(equal(begin(expected), end(expected), list1.begin(), list1.end()));\r\n    assert(list2.empty());\r\n}\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_empty_both() {\r\n    list<int> list1;\r\n    list<int> list2;\r\n    auto noTransfer = list2.end();\r\n    list1.merge(list2, Cmp{});\r\n    assert(list2.end() == noTransfer); // OK, stayed a member of list2\r\n}\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_empty_both_bad() {\r\n    list<int> list1;\r\n    list<int> list2;\r\n    auto noTransfer = list2.end();\r\n    list1.merge(list2, Cmp{});\r\n    (void) (list1.end() == noTransfer); // Iterator incompatible, still a member of list2\r\n}\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_empty_source() {\r\n    list<int> list1{1, 2, 3};\r\n    list<int> list2;\r\n    auto noTransfer = list2.end();\r\n    list1.merge(list2, Cmp{});\r\n    assert(list2.end() == noTransfer); // OK, stayed a member of list2\r\n}\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_empty_source_bad() {\r\n    list<int> list1{1, 2, 3};\r\n    list<int> list2;\r\n    auto noTransfer = list2.end();\r\n    list1.merge(list2, Cmp{});\r\n    (void) (list1.end() == noTransfer); // Iterator incompatible, still a member of list2\r\n}\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_empty_target() {\r\n    list<int> list1;\r\n    list<int> list2{1, 2, 3};\r\n    auto noTransfer = list2.end();\r\n    auto transfer   = list2.begin();\r\n    list1.merge(list2, Cmp{});\r\n    assert(list2.end() == noTransfer); // Ownership not transferred\r\n    assert(list1.begin() == transfer); // Ownership transferred to list1\r\n}\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_empty_target_bad() {\r\n    list<int> list1;\r\n    list<int> list2{1, 2, 3};\r\n    auto i = list2.begin();\r\n    list1.merge(list2, Cmp{});\r\n    (void) (list2.end() == i); // Iterator incompatible, was transferred to list1\r\n}\r\n\r\nstruct throw_cmp_less_int {\r\n    size_t remainingCompares;\r\n    explicit throw_cmp_less_int(size_t remainingCompares_) : remainingCompares(remainingCompares_) {}\r\n    throw_cmp_less_int(const throw_cmp_less_int&)            = delete;\r\n    throw_cmp_less_int& operator=(const throw_cmp_less_int&) = delete;\r\n\r\n    bool operator()(int a, int b) /* neither const nor noexcept */ {\r\n        if (remainingCompares == 0) {\r\n            throw runtime_error(\"either the algorithm is wrong or the user is evil (or both)\");\r\n        }\r\n\r\n        const bool result = a < b;\r\n        --remainingCompares;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        if (result) {\r\n            // _Debug_lt_pred will test the other direction\r\n            ++remainingCompares;\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        return result;\r\n    }\r\n};\r\n\r\nstruct throwing_merge_fixture {\r\n    static constexpr size_t startF1Size         = 8;\r\n    static constexpr size_t startF2Size         = 10;\r\n    static constexpr size_t startTotal          = startF1Size + startF2Size;\r\n    static constexpr size_t maxMergeComparisons = startTotal - 1;\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\n    static constexpr size_t ensureOrderedF1Size = 0;\r\n    static constexpr size_t ensureOrderedF2Size = 0;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 0 / _ITERATOR_DEBUG_LEVEL != 0 vvv\r\n    static constexpr size_t ensureOrderedF1Size = startF1Size - 1;\r\n    static constexpr size_t ensureOrderedF2Size = startF2Size - 1;\r\n#endif // _ITERATOR_DEBUG_LEVEL == 0\r\n    static constexpr size_t maxTotalComparisons = maxMergeComparisons + ensureOrderedF1Size + ensureOrderedF2Size;\r\n\r\n    list<int> list1;\r\n    list<int> list2;\r\n    vector<list<int>::const_iterator> iterators;\r\n\r\n    void assert_iterators_consistent() const {\r\n        size_t total = 0;\r\n        for (auto i = list1.begin(), e = list1.end(); i != e; ++i) {\r\n            ++total;\r\n            assert(iterators[static_cast<size_t>(*i)] == i); // also checks ownership transfer\r\n        }\r\n\r\n        for (auto i = list2.begin(), e = list2.end(); i != e; ++i) {\r\n            ++total;\r\n            assert(iterators[static_cast<size_t>(*i)] == i); // also checks ownership transfer\r\n        }\r\n\r\n        assert(total == startTotal);\r\n    }\r\n\r\n    throwing_merge_fixture() : list1{0, 1, 2, 3, 8, 10, 15, 16}, list2{4, 5, 6, 7, 9, 11, 12, 13, 14, 17} {\r\n        iterators.reserve(startTotal);\r\n        auto f1It = list1.cbegin();\r\n        auto f2It = list2.cbegin();\r\n        iterators.push_back(f1It);\r\n        iterators.push_back(++f1It);\r\n        iterators.push_back(++f1It);\r\n        iterators.push_back(++f1It);\r\n        iterators.push_back(f2It); // 4\r\n        iterators.push_back(++f2It);\r\n        iterators.push_back(++f2It);\r\n        iterators.push_back(++f2It);\r\n        iterators.push_back(++f1It); // 8\r\n        iterators.push_back(++f2It); // 9\r\n        iterators.push_back(++f1It); // 10\r\n        iterators.push_back(++f2It); // 11\r\n        iterators.push_back(++f2It);\r\n        iterators.push_back(++f2It);\r\n        iterators.push_back(++f2It);\r\n        iterators.push_back(++f1It); // 15\r\n        iterators.push_back(++f1It);\r\n        iterators.push_back(++f2It); // 17\r\n    }\r\n};\r\n\r\nvoid test_case_comparison_count() {\r\n    throwing_merge_fixture f;\r\n    list<int> startedEmpty;\r\n    {\r\n        throw_cmp_less_int cmp{throwing_merge_fixture::ensureOrderedF1Size};\r\n        startedEmpty.merge(f.list1, ref(cmp));\r\n    }\r\n\r\n    {\r\n        throw_cmp_less_int cmp{throwing_merge_fixture::ensureOrderedF1Size};\r\n        startedEmpty.merge(list<int>{}, ref(cmp));\r\n    }\r\n\r\n    {\r\n        throw_cmp_less_int cmp{throwing_merge_fixture::maxTotalComparisons};\r\n        startedEmpty.merge(f.list2, ref(cmp));\r\n    }\r\n}\r\n\r\nvoid test_case_partial_merge_throw() {\r\n    for (size_t idx = 0; idx <= throwing_merge_fixture::maxTotalComparisons; ++idx) {\r\n        throwing_merge_fixture f;\r\n        try {\r\n            throw_cmp_less_int cmp{idx};\r\n            f.list2.merge(f.list1, ref(cmp));\r\n            f.assert_iterators_consistent();\r\n            return;\r\n        } catch (const runtime_error&) {\r\n            f.assert_iterators_consistent();\r\n        }\r\n    }\r\n\r\n    abort();\r\n}\r\n\r\nstatic size_t liveness_alive_objects;\r\n\r\ntemplate <class T>\r\nstruct liveness_allocator {\r\n    using value_type = T;\r\n\r\n    liveness_allocator()                                     = default;\r\n    liveness_allocator(const liveness_allocator&)            = default;\r\n    liveness_allocator& operator=(const liveness_allocator&) = default;\r\n    template <class U, enable_if_t<!is_same_v<T, U>, int> = 0>\r\n    liveness_allocator(const liveness_allocator<U>&) {}\r\n\r\n    T* allocate(const size_t n) {\r\n        liveness_alive_objects += n;\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* const p, const size_t n) {\r\n        liveness_alive_objects -= n;\r\n        allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class B>\r\n    friend bool operator==(const liveness_allocator&, const liveness_allocator<B>&) noexcept {\r\n        return true;\r\n    }\r\n    template <class B>\r\n    friend bool operator!=(const liveness_allocator&, const liveness_allocator<B>&) noexcept {\r\n        return false;\r\n    }\r\n};\r\n\r\nstruct erase_fixture {\r\n    struct liveness_empty_asserter {\r\n        ~liveness_empty_asserter() {\r\n            assert(liveness_alive_objects == 0);\r\n        }\r\n    };\r\n    liveness_empty_asserter instance_empty; // destroyed after theList\r\n\r\n    list<int, liveness_allocator<int>> theList;\r\n\r\n    struct post_asserter {\r\n        list<int, liveness_allocator<int>>& theList;\r\n\r\n        ~post_asserter() {\r\n            // tests that erase actually deallocated\r\n            assert(liveness_alive_objects == (_ITERATOR_DEBUG_LEVEL != 0) + 1 + theList.size());\r\n            // tests that the whole container is iterable\r\n            assert(is_sorted(theList.begin(), theList.end()));\r\n        }\r\n    };\r\n    post_asserter instance_nonempty; // destroyed before theList\r\n\r\n    void assert_iterators_consistent(const vector<list<int>::const_iterator>& iterators) {\r\n        assert(theList.size() == iterators.size() - 1);\r\n        auto i = theList.begin();\r\n        assert(i == iterators[0]);\r\n        for (size_t idx = 1; idx < iterators.size(); ++idx) {\r\n            ++i;\r\n            assert(i == iterators[idx]);\r\n        }\r\n    }\r\n\r\n    vector<list<int>::const_iterator> get_iterators() {\r\n        vector<list<int>::const_iterator> iterators;\r\n        auto i = theList.cbegin();\r\n        for (size_t idx = 0; idx < theList.size(); ++idx) {\r\n            iterators.push_back(i);\r\n            ++i;\r\n        }\r\n\r\n        iterators.push_back(i);\r\n        return iterators;\r\n    }\r\n\r\n    erase_fixture() : instance_empty(), theList{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, instance_nonempty{theList} {}\r\n\r\n    void test_case_erase_one() {\r\n        auto iterators = get_iterators();\r\n        theList.erase(prev(theList.end()));\r\n        iterators[iterators.size() - 2] = iterators[iterators.size() - 1];\r\n        iterators.pop_back();\r\n        assert_iterators_consistent(iterators);\r\n    }\r\n\r\n    void test_case_range_erase_nothing() {\r\n        auto iterators = get_iterators();\r\n        theList.erase(theList.begin(), theList.begin());\r\n        assert_iterators_consistent(iterators);\r\n    }\r\n\r\n    void test_case_range_erase_one() {\r\n        auto iterators = get_iterators();\r\n        theList.erase(prev(theList.end()), theList.end());\r\n        iterators.erase(iterators.end() - 2);\r\n        assert_iterators_consistent(iterators);\r\n    }\r\n\r\n    void test_case_range_erase_some() {\r\n        auto iterators = get_iterators();\r\n        theList.erase(next(theList.begin()), prev(theList.end()));\r\n        iterators.erase(iterators.begin() + 1, iterators.begin() + static_cast<ptrdiff_t>(iterators.size() - 2));\r\n        assert_iterators_consistent(iterators);\r\n    }\r\n\r\n    void test_case_range_erase_all() {\r\n        auto iterators = get_iterators();\r\n        theList.erase(theList.begin(), theList.end());\r\n        iterators.erase(iterators.begin(), iterators.end() - 1);\r\n        assert_iterators_consistent(iterators);\r\n    }\r\n};\r\n\r\nvoid test_case_erase_one_bad() {\r\n    erase_fixture f;\r\n    auto i = f.theList.begin();\r\n    f.theList.erase(i);\r\n    (void) *i;\r\n}\r\n\r\nvoid test_case_range_erase_one_bad() {\r\n    erase_fixture f;\r\n    auto i = f.theList.end();\r\n    --i;\r\n    f.theList.erase(i, f.theList.end());\r\n    (void) *i;\r\n}\r\n\r\nvoid test_case_range_erase_some_bad_first() {\r\n    erase_fixture f;\r\n    auto first = f.theList.begin();\r\n    ++first;\r\n    f.theList.erase(first, f.theList.end());\r\n    (void) *first;\r\n}\r\n\r\nvoid test_case_range_erase_some_bad_middle() {\r\n    erase_fixture f;\r\n    auto middle = f.theList.begin();\r\n    ++middle;\r\n    ++middle;\r\n    f.theList.erase(next(f.theList.begin()), prev(f.theList.end()));\r\n    (void) *middle;\r\n}\r\n\r\nvoid test_case_range_erase_some_bad_last() {\r\n    erase_fixture f;\r\n    auto last = f.theList.end();\r\n    --last;\r\n    --last;\r\n    f.theList.erase(next(f.theList.begin()), prev(f.theList.end()));\r\n    (void) *last;\r\n}\r\n\r\nvoid test_case_range_erase_all_bad_first() {\r\n    erase_fixture f;\r\n    auto first = f.theList.begin();\r\n    f.theList.erase(f.theList.begin(), f.theList.end());\r\n    (void) *first;\r\n}\r\n\r\nvoid test_case_range_erase_all_bad_middle() {\r\n    erase_fixture f;\r\n    auto middle = f.theList.begin();\r\n    ++middle;\r\n    ++middle;\r\n    f.theList.erase(f.theList.begin(), f.theList.end());\r\n    (void) *middle;\r\n}\r\n\r\nvoid test_case_range_erase_all_bad_last() {\r\n    erase_fixture f;\r\n    auto last = f.theList.end();\r\n    --last;\r\n    f.theList.erase(f.theList.begin(), f.theList.end());\r\n    (void) *last;\r\n}\r\n\r\nvoid test_case_empty_front_bad() {\r\n    list<int> li;\r\n    (void) li.front();\r\n}\r\n\r\nvoid test_case_empty_cfront_bad() {\r\n    const list<int> li;\r\n    (void) li.front();\r\n}\r\n\r\nvoid test_case_empty_back_bad() {\r\n    list<int> li;\r\n    (void) li.back();\r\n}\r\n\r\nvoid test_case_empty_cback_bad() {\r\n    const list<int> li;\r\n    (void) li.back();\r\n}\r\n\r\nvoid test_case_pop_front_bad() {\r\n    list<int> li;\r\n    li.pop_front();\r\n}\r\n\r\nvoid test_case_pop_back_bad() {\r\n    list<int> li;\r\n    li.pop_back();\r\n}\r\n\r\nstruct splice_fixture {\r\n    list<int> source{0, 1, 2, 3, 4, 5};\r\n    list<int> target{6, 7};\r\n    vector<list<int>::const_iterator> iterators;\r\n\r\n    splice_fixture() {\r\n        {\r\n            const auto sEnd = source.cend();\r\n            for (auto it = source.cbegin(); it != sEnd; ++it) {\r\n                iterators.push_back(it);\r\n            }\r\n        }\r\n        {\r\n            const auto tEnd = target.cend();\r\n            for (auto it = target.cbegin(); it != tEnd; ++it) {\r\n                iterators.push_back(it);\r\n            }\r\n        }\r\n    }\r\n\r\n    ~splice_fixture() {\r\n        auto expected = iterators.cbegin();\r\n        {\r\n            const auto sEnd = source.cend();\r\n            for (auto it = source.cbegin(); it != sEnd; ++it) {\r\n                (void) *it; // asserts that the iterator is not invalidated\r\n                assert(*expected == it);\r\n                ++expected;\r\n            }\r\n        }\r\n\r\n        {\r\n            const auto tEnd = target.cend();\r\n            for (auto it = target.cbegin(); it != tEnd; ++it) {\r\n                (void) *it; // asserts that the iterator is not invalidated\r\n                assert(*expected == it);\r\n                ++expected;\r\n            }\r\n        }\r\n\r\n        assert(expected == iterators.cend());\r\n    }\r\n};\r\n\r\nvoid test_case_splices() {\r\n    for (int splices = 0; splices < 6; ++splices) {\r\n        splice_fixture f;\r\n        f.target.splice(f.target.begin(), f.source, prev(f.source.end(), splices), f.source.end());\r\n    }\r\n}\r\n\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec([] {\r\n        test_case_ownership_of_element_transferred<non_noexcept_less_int>();\r\n        test_case_ownership_of_element_transferred<less<>>();\r\n        test_case_ownership_of_end_not_transferred<non_noexcept_less_int>();\r\n        test_case_ownership_of_end_not_transferred<less<>>();\r\n        test_case_empty_both<non_noexcept_less_int>();\r\n        test_case_empty_both<less<>>();\r\n        test_case_empty_source<non_noexcept_less_int>();\r\n        test_case_empty_source<less<>>();\r\n        test_case_empty_target<non_noexcept_less_int>();\r\n        test_case_empty_target<less<>>();\r\n        test_case_comparison_count();\r\n        test_case_partial_merge_throw();\r\n        erase_fixture{}.test_case_erase_one();\r\n        erase_fixture{}.test_case_range_erase_nothing();\r\n        erase_fixture{}.test_case_range_erase_one();\r\n        erase_fixture{}.test_case_range_erase_some();\r\n        erase_fixture{}.test_case_range_erase_all();\r\n        test_case_splices();\r\n    });\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    exec.add_death_tests({\r\n        test_case_ownership_of_element_transferred_bad<non_noexcept_less_int>,\r\n        test_case_ownership_of_element_transferred_bad<less<>>,\r\n        test_case_empty_both_bad<non_noexcept_less_int>,\r\n        test_case_empty_both_bad<less<>>,\r\n        test_case_empty_source_bad<non_noexcept_less_int>,\r\n        test_case_empty_source_bad<less<>>,\r\n        test_case_empty_target_bad<non_noexcept_less_int>,\r\n        test_case_empty_target_bad<less<>>,\r\n        test_case_erase_one_bad,\r\n        test_case_range_erase_one_bad,\r\n        test_case_range_erase_some_bad_first,\r\n        test_case_range_erase_some_bad_middle,\r\n        test_case_range_erase_some_bad_last,\r\n        test_case_range_erase_all_bad_first,\r\n        test_case_range_erase_all_bad_middle,\r\n        test_case_range_erase_all_bad_last,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_case_empty_front_bad,\r\n        test_case_empty_cfront_bad,\r\n        test_case_empty_back_bad,\r\n        test_case_empty_cback_bad,\r\n        test_case_pop_front_bad,\r\n        test_case_pop_back_bad,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_list_unique_self_reference/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_list_unique_self_reference/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <forward_list>\r\n#include <initializer_list>\r\n#include <list>\r\n#include <set>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Container>\r\nvoid assert_equal(const Container& c, initializer_list<typename Container::value_type> expected) {\r\n    assert(equal(c.begin(), c.end(), expected.begin(), expected.end()));\r\n}\r\n\r\nstatic set<const void*> g_alive_noisy;\r\n\r\nstruct noisy_int {\r\n    int i;\r\n    noisy_int() : i() {\r\n        g_alive_noisy.insert(this);\r\n    }\r\n    /* implicit */ noisy_int(int i_) : i(i_) {\r\n        g_alive_noisy.insert(this);\r\n    }\r\n    noisy_int(const noisy_int& other) : i(other.i) {\r\n        g_alive_noisy.insert(this);\r\n    }\r\n    noisy_int& operator=(const noisy_int&) = delete;\r\n    ~noisy_int() {\r\n        g_alive_noisy.erase(this);\r\n    }\r\n\r\n    friend bool operator==(const noisy_int& lhs, const noisy_int& rhs) {\r\n        return lhs.i == rhs.i;\r\n    }\r\n\r\n    friend bool operator!=(const noisy_int& lhs, const noisy_int& rhs) {\r\n        return lhs.i != rhs.i;\r\n    }\r\n};\r\n\r\nstruct modal_compare {\r\n    noisy_int* mode;\r\n    explicit modal_compare(noisy_int* targetMode) : mode(targetMode) {}\r\n\r\n    bool operator()(const noisy_int& lhs, const noisy_int& rhs) const noexcept {\r\n        assert(g_alive_noisy.find(&lhs) != g_alive_noisy.end());\r\n        assert(g_alive_noisy.find(&rhs) != g_alive_noisy.end());\r\n        if (mode->i == 1) {\r\n            return lhs == rhs;\r\n        } else {\r\n            return lhs != rhs;\r\n        }\r\n    }\r\n};\r\n\r\ntemplate <class Container>\r\nvoid test() {\r\n    Container l{1, 1, 3, 4, 5, 6};\r\n    auto it = l.begin();\r\n    ++it;\r\n    noisy_int* firstMode = &*it;\r\n    ++it;\r\n    noisy_int* secondMode = &*it;\r\n\r\n    l.unique(modal_compare(firstMode));\r\n    assert_equal(l, {1, 3, 4, 5, 6});\r\n\r\n    l.unique(modal_compare(secondMode));\r\n    assert_equal(l, {1});\r\n}\r\n\r\nint main() {\r\n    test<forward_list<noisy_int>>();\r\n    test<list<noisy_int>>();\r\n    assert(g_alive_noisy.empty());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_matching_npos_address/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_matching_npos_address/custom_format.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\n\r\nfrom stl.test.format import STLTestFormat, TestStep\r\nfrom stl.test.tests import TestType\r\n\r\n\r\nclass CustomTestFormat(STLTestFormat):\r\n    def getBuildSteps(self, test, litConfig, shared):\r\n        exeSource = test.getSourcePath()\r\n        test2Source = os.path.join(os.path.dirname(exeSource), 'test2.cpp')\r\n\r\n        _, outputBase = test.getTempPaths()\r\n\r\n        if TestType.COMPILE in test.testType:\r\n            cmd = [test.cxx, '/c', exeSource, test2Source, *test.flags, *test.compileFlags]\r\n        elif TestType.RUN in test.testType:\r\n            shared.execFile = outputBase + '.exe'\r\n            cmd = [test.cxx, exeSource, test2Source, *test.flags, *test.compileFlags, '/Fe' + shared.execFile,\r\n                   '/link', *test.linkFlags]\r\n\r\n        yield TestStep(cmd, shared.execDir, shared.env, False)\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_matching_npos_address/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_matching_npos_address/lit.local.cfg",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\nimport site\r\nsite.addsitedir(os.path.dirname(os.path.dirname(__file__)))\r\nimport VSO_0000000_matching_npos_address.custom_format\r\n\r\nconfig.test_format = VSO_0000000_matching_npos_address.custom_format.CustomTestFormat()\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_matching_npos_address/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <string>\r\n\r\nextern \"C\" {\r\nextern const size_t* other_npos_address;\r\n}\r\n\r\nint main() {\r\n    static_assert(std::string::npos == static_cast<size_t>(-1), \"\");\r\n    assert(&std::string::npos == other_npos_address);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_matching_npos_address/test2.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <string>\r\n\r\nextern \"C\" {\r\nconst size_t* other_npos_address;\r\n}\r\n\r\nstruct init_npos_address {\r\n    init_npos_address() {\r\n        other_npos_address = &std::string::npos;\r\n    }\r\n};\r\n\r\nstatic init_npos_address before_main;\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_more_pair_tuple_sfinae/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_more_pair_tuple_sfinae/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <string>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n// LWG-2367 \"pair and tuple are not correctly implemented for is_constructible with no args\"\r\n\r\nstruct NoDefault {\r\n    NoDefault(int, int) {}\r\n};\r\n\r\nSTATIC_ASSERT(is_default_constructible_v<int>);\r\nSTATIC_ASSERT(!is_default_constructible_v<NoDefault>);\r\n\r\nSTATIC_ASSERT(is_default_constructible_v<pair<int, int>>);\r\nSTATIC_ASSERT(!is_default_constructible_v<pair<int, NoDefault>>);\r\nSTATIC_ASSERT(!is_default_constructible_v<pair<NoDefault, int>>);\r\nSTATIC_ASSERT(!is_default_constructible_v<pair<NoDefault, NoDefault>>);\r\n\r\nSTATIC_ASSERT(is_default_constructible_v<tuple<int, int>>);\r\nSTATIC_ASSERT(!is_default_constructible_v<tuple<int, NoDefault>>);\r\nSTATIC_ASSERT(!is_default_constructible_v<tuple<NoDefault, int>>);\r\nSTATIC_ASSERT(!is_default_constructible_v<tuple<NoDefault, NoDefault>>);\r\n\r\nSTATIC_ASSERT(is_constructible_v<tuple<int, int>, allocator_arg_t, allocator<int>>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<int, NoDefault>, allocator_arg_t, allocator<int>>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<NoDefault, int>, allocator_arg_t, allocator<int>>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<NoDefault, NoDefault>, allocator_arg_t, allocator<int>>);\r\n\r\n\r\n// LWG-2510 \"Tag types should not be DefaultConstructible\"\r\ntemplate <class T, class = void>\r\nconstexpr bool implicitly_default_constructible = false;\r\n\r\ntemplate <class T>\r\nvoid check_implicit_default_construction(const T&); // not defined\r\n\r\ntemplate <class T>\r\nconstexpr bool implicitly_default_constructible<T, void_t<decltype(check_implicit_default_construction<T>({}))>> = true;\r\n\r\nstruct ExplicitDefault {\r\n    explicit ExplicitDefault() = default;\r\n};\r\n\r\ntemplate <typename T>\r\nconstexpr bool OrdinaryDC = is_default_constructible_v<T> && implicitly_default_constructible<T>;\r\n\r\ntemplate <typename T>\r\nconstexpr bool ExplicitDC = is_default_constructible_v<T> && !implicitly_default_constructible<T>;\r\n\r\ntemplate <typename T>\r\nconstexpr bool VerbotenDC = !is_default_constructible_v<T> && !implicitly_default_constructible<T>;\r\n\r\nSTATIC_ASSERT(OrdinaryDC<int>);\r\nSTATIC_ASSERT(VerbotenDC<NoDefault>);\r\nSTATIC_ASSERT(ExplicitDC<ExplicitDefault>);\r\n\r\nusing Expl = ExplicitDefault;\r\nusing NOPE = NoDefault;\r\n\r\nSTATIC_ASSERT(OrdinaryDC<pair<long, long>>);\r\nSTATIC_ASSERT(ExplicitDC<pair<long, Expl>>);\r\nSTATIC_ASSERT(VerbotenDC<pair<long, NOPE>>);\r\nSTATIC_ASSERT(ExplicitDC<pair<Expl, long>>);\r\nSTATIC_ASSERT(ExplicitDC<pair<Expl, Expl>>);\r\nSTATIC_ASSERT(VerbotenDC<pair<Expl, NOPE>>);\r\nSTATIC_ASSERT(VerbotenDC<pair<NOPE, long>>);\r\nSTATIC_ASSERT(VerbotenDC<pair<NOPE, Expl>>);\r\nSTATIC_ASSERT(VerbotenDC<pair<NOPE, NOPE>>);\r\n\r\nSTATIC_ASSERT(OrdinaryDC<tuple<long, long>>);\r\nSTATIC_ASSERT(ExplicitDC<tuple<long, Expl>>);\r\nSTATIC_ASSERT(VerbotenDC<tuple<long, NOPE>>);\r\nSTATIC_ASSERT(ExplicitDC<tuple<Expl, long>>);\r\nSTATIC_ASSERT(ExplicitDC<tuple<Expl, Expl>>);\r\nSTATIC_ASSERT(VerbotenDC<tuple<Expl, NOPE>>);\r\nSTATIC_ASSERT(VerbotenDC<tuple<NOPE, long>>);\r\nSTATIC_ASSERT(VerbotenDC<tuple<NOPE, Expl>>);\r\nSTATIC_ASSERT(VerbotenDC<tuple<NOPE, NOPE>>);\r\nSTATIC_ASSERT(OrdinaryDC<tuple<long, long, long, long, long, long>>);\r\nSTATIC_ASSERT(ExplicitDC<tuple<long, long, long, long, Expl, long>>);\r\nSTATIC_ASSERT(VerbotenDC<tuple<long, long, long, long, NOPE, long>>);\r\n\r\n\r\n// LWG-2729 \"Missing SFINAE on std::pair::operator=\"\r\n// LWG-2958 \"Moves improperly defined as deleted\"\r\ntemplate <typename T, typename = void>\r\nstruct IsBraceAssignable : false_type {};\r\n\r\ntemplate <typename T>\r\nstruct IsBraceAssignable<T, void_t<decltype(declval<T&>() = {})>> : true_type {};\r\n\r\ntemplate <typename T>\r\nconstexpr bool IsBraceAssignableV = IsBraceAssignable<T>::value;\r\n\r\nstruct Copyable {\r\n    Copyable()                             = default;\r\n    Copyable(const ::Copyable&)            = default;\r\n    Copyable& operator=(const ::Copyable&) = default;\r\n};\r\n\r\nstruct Movable {\r\n    Movable()                       = default;\r\n    Movable(::Movable&&)            = default;\r\n    Movable& operator=(::Movable&&) = default;\r\n};\r\n\r\nstruct NonCopyable {\r\n    NonCopyable()                              = default;\r\n    NonCopyable(const NonCopyable&)            = delete;\r\n    NonCopyable& operator=(const NonCopyable&) = delete;\r\n};\r\n\r\nstruct Other {};\r\n\r\nstruct CopiesOther {\r\n    CopiesOther& operator=(const Other&) {\r\n        return *this;\r\n    }\r\n};\r\n\r\nstruct MovesOther {\r\n    MovesOther& operator=(Other&&) {\r\n        return *this;\r\n    }\r\n};\r\n\r\nstruct RejectsOther {\r\n    RejectsOther& operator=(const Other&) = delete;\r\n};\r\n\r\nstruct WeirdlyTakesOther {\r\n    WeirdlyTakesOther& operator=(const Other&) && {\r\n        return *this;\r\n    }\r\n};\r\n\r\nSTATIC_ASSERT(is_copy_assignable_v<::Copyable>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<::Movable>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<NonCopyable>);\r\n\r\nSTATIC_ASSERT(is_move_assignable_v<::Copyable>);\r\nSTATIC_ASSERT(is_move_assignable_v<::Movable>);\r\nSTATIC_ASSERT(!is_move_assignable_v<NonCopyable>);\r\n\r\nSTATIC_ASSERT(IsBraceAssignableV<::Copyable>);\r\nSTATIC_ASSERT(IsBraceAssignableV<::Movable>);\r\nSTATIC_ASSERT(!IsBraceAssignableV<NonCopyable>);\r\n\r\nSTATIC_ASSERT(is_assignable_v<CopiesOther&, const Other&>);\r\nSTATIC_ASSERT(!is_assignable_v<MovesOther&, const Other&>);\r\nSTATIC_ASSERT(!is_assignable_v<RejectsOther&, const Other&>);\r\nSTATIC_ASSERT(!is_assignable_v<WeirdlyTakesOther&, const Other&>);\r\nSTATIC_ASSERT(is_assignable_v<WeirdlyTakesOther, const Other&>);\r\n\r\nSTATIC_ASSERT(is_assignable_v<CopiesOther&, Other>);\r\nSTATIC_ASSERT(is_assignable_v<MovesOther&, Other>);\r\nSTATIC_ASSERT(!is_assignable_v<RejectsOther&, Other>);\r\nSTATIC_ASSERT(!is_assignable_v<WeirdlyTakesOther&, Other>);\r\nSTATIC_ASSERT(is_assignable_v<WeirdlyTakesOther, Other>);\r\n\r\nSTATIC_ASSERT(is_copy_assignable_v<pair<::Copyable, ::Copyable>>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<pair<::Copyable, ::Movable>>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<pair<::Copyable, NonCopyable>>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<pair<::Movable, ::Copyable>>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<pair<::Movable, ::Movable>>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<pair<::Movable, NonCopyable>>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<pair<NonCopyable, ::Copyable>>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<pair<NonCopyable, ::Movable>>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<pair<NonCopyable, NonCopyable>>);\r\n\r\nSTATIC_ASSERT(is_move_assignable_v<pair<::Copyable, ::Copyable>>);\r\nSTATIC_ASSERT(is_move_assignable_v<pair<::Copyable, ::Movable>>);\r\nSTATIC_ASSERT(!is_move_assignable_v<pair<::Copyable, NonCopyable>>);\r\nSTATIC_ASSERT(is_move_assignable_v<pair<::Movable, ::Copyable>>);\r\nSTATIC_ASSERT(is_move_assignable_v<pair<::Movable, ::Movable>>);\r\nSTATIC_ASSERT(!is_move_assignable_v<pair<::Movable, NonCopyable>>);\r\nSTATIC_ASSERT(!is_move_assignable_v<pair<NonCopyable, ::Copyable>>);\r\nSTATIC_ASSERT(!is_move_assignable_v<pair<NonCopyable, ::Movable>>);\r\nSTATIC_ASSERT(!is_move_assignable_v<pair<NonCopyable, NonCopyable>>);\r\n\r\nSTATIC_ASSERT(IsBraceAssignableV<pair<::Copyable, ::Copyable>>);\r\nSTATIC_ASSERT(IsBraceAssignableV<pair<::Copyable, ::Movable>>);\r\nSTATIC_ASSERT(!IsBraceAssignableV<pair<::Copyable, NonCopyable>>);\r\nSTATIC_ASSERT(IsBraceAssignableV<pair<::Movable, ::Copyable>>);\r\nSTATIC_ASSERT(IsBraceAssignableV<pair<::Movable, ::Movable>>);\r\nSTATIC_ASSERT(!IsBraceAssignableV<pair<::Movable, NonCopyable>>);\r\nSTATIC_ASSERT(!IsBraceAssignableV<pair<NonCopyable, ::Copyable>>);\r\nSTATIC_ASSERT(!IsBraceAssignableV<pair<NonCopyable, ::Movable>>);\r\nSTATIC_ASSERT(!IsBraceAssignableV<pair<NonCopyable, NonCopyable>>);\r\n\r\nSTATIC_ASSERT(is_assignable_v<pair<CopiesOther, int>&, const pair<Other, int>&>);\r\nSTATIC_ASSERT(!is_assignable_v<pair<MovesOther, int>&, const pair<Other, int>&>);\r\nSTATIC_ASSERT(!is_assignable_v<pair<RejectsOther, int>&, const pair<Other, int>&>);\r\nSTATIC_ASSERT(!is_assignable_v<pair<WeirdlyTakesOther, int>&, const pair<Other, int>&>);\r\n\r\nSTATIC_ASSERT(is_assignable_v<pair<int, CopiesOther>&, const pair<int, Other>&>);\r\nSTATIC_ASSERT(!is_assignable_v<pair<int, MovesOther>&, const pair<int, Other>&>);\r\nSTATIC_ASSERT(!is_assignable_v<pair<int, RejectsOther>&, const pair<int, Other>&>);\r\nSTATIC_ASSERT(!is_assignable_v<pair<int, WeirdlyTakesOther>&, const pair<int, Other>&>);\r\n\r\nSTATIC_ASSERT(is_assignable_v<pair<CopiesOther, int>&, pair<Other, int>>);\r\nSTATIC_ASSERT(is_assignable_v<pair<MovesOther, int>&, pair<Other, int>>);\r\nSTATIC_ASSERT(!is_assignable_v<pair<RejectsOther, int>&, pair<Other, int>>);\r\nSTATIC_ASSERT(!is_assignable_v<pair<WeirdlyTakesOther, int>&, pair<Other, int>>);\r\n\r\nSTATIC_ASSERT(is_assignable_v<pair<int, CopiesOther>&, pair<int, Other>>);\r\nSTATIC_ASSERT(is_assignable_v<pair<int, MovesOther>&, pair<int, Other>>);\r\nSTATIC_ASSERT(!is_assignable_v<pair<int, RejectsOther>&, pair<int, Other>>);\r\nSTATIC_ASSERT(!is_assignable_v<pair<int, WeirdlyTakesOther>&, pair<int, Other>>);\r\n\r\nSTATIC_ASSERT(is_copy_assignable_v<tuple<::Copyable, ::Copyable>>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<tuple<::Copyable, ::Movable>>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<tuple<::Copyable, NonCopyable>>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<tuple<::Movable, ::Copyable>>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<tuple<::Movable, ::Movable>>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<tuple<::Movable, NonCopyable>>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<tuple<NonCopyable, ::Copyable>>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<tuple<NonCopyable, ::Movable>>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<tuple<NonCopyable, NonCopyable>>);\r\n\r\nSTATIC_ASSERT(is_move_assignable_v<tuple<::Copyable, ::Copyable>>);\r\nSTATIC_ASSERT(is_move_assignable_v<tuple<::Copyable, ::Movable>>);\r\nSTATIC_ASSERT(!is_move_assignable_v<tuple<::Copyable, NonCopyable>>);\r\nSTATIC_ASSERT(is_move_assignable_v<tuple<::Movable, ::Copyable>>);\r\nSTATIC_ASSERT(is_move_assignable_v<tuple<::Movable, ::Movable>>);\r\nSTATIC_ASSERT(!is_move_assignable_v<tuple<::Movable, NonCopyable>>);\r\nSTATIC_ASSERT(!is_move_assignable_v<tuple<NonCopyable, ::Copyable>>);\r\nSTATIC_ASSERT(!is_move_assignable_v<tuple<NonCopyable, ::Movable>>);\r\nSTATIC_ASSERT(!is_move_assignable_v<tuple<NonCopyable, NonCopyable>>);\r\n\r\nSTATIC_ASSERT(IsBraceAssignableV<tuple<::Copyable, ::Copyable>>);\r\nSTATIC_ASSERT(IsBraceAssignableV<tuple<::Copyable, ::Movable>>);\r\nSTATIC_ASSERT(!IsBraceAssignableV<tuple<::Copyable, NonCopyable>>);\r\nSTATIC_ASSERT(IsBraceAssignableV<tuple<::Movable, ::Copyable>>);\r\nSTATIC_ASSERT(IsBraceAssignableV<tuple<::Movable, ::Movable>>);\r\nSTATIC_ASSERT(!IsBraceAssignableV<tuple<::Movable, NonCopyable>>);\r\nSTATIC_ASSERT(!IsBraceAssignableV<tuple<NonCopyable, ::Copyable>>);\r\nSTATIC_ASSERT(!IsBraceAssignableV<tuple<NonCopyable, ::Movable>>);\r\nSTATIC_ASSERT(!IsBraceAssignableV<tuple<NonCopyable, NonCopyable>>);\r\n\r\nSTATIC_ASSERT(is_assignable_v<tuple<CopiesOther, int>&, const tuple<Other, int>&>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<MovesOther, int>&, const tuple<Other, int>&>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<RejectsOther, int>&, const tuple<Other, int>&>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<WeirdlyTakesOther, int>&, const tuple<Other, int>&>);\r\n\r\nSTATIC_ASSERT(is_assignable_v<tuple<int, CopiesOther>&, const tuple<int, Other>&>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<int, MovesOther>&, const tuple<int, Other>&>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<int, RejectsOther>&, const tuple<int, Other>&>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<int, WeirdlyTakesOther>&, const tuple<int, Other>&>);\r\n\r\nSTATIC_ASSERT(is_assignable_v<tuple<CopiesOther, int>&, tuple<Other, int>>);\r\nSTATIC_ASSERT(is_assignable_v<tuple<MovesOther, int>&, tuple<Other, int>>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<RejectsOther, int>&, tuple<Other, int>>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<WeirdlyTakesOther, int>&, tuple<Other, int>>);\r\n\r\nSTATIC_ASSERT(is_assignable_v<tuple<int, CopiesOther>&, tuple<int, Other>>);\r\nSTATIC_ASSERT(is_assignable_v<tuple<int, MovesOther>&, tuple<int, Other>>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<int, RejectsOther>&, tuple<int, Other>>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<int, WeirdlyTakesOther>&, tuple<int, Other>>);\r\n\r\nSTATIC_ASSERT(is_assignable_v<tuple<CopiesOther, int>&, const pair<Other, int>&>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<MovesOther, int>&, const pair<Other, int>&>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<RejectsOther, int>&, const pair<Other, int>&>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<WeirdlyTakesOther, int>&, const pair<Other, int>&>);\r\n\r\nSTATIC_ASSERT(is_assignable_v<tuple<int, CopiesOther>&, const pair<int, Other>&>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<int, MovesOther>&, const pair<int, Other>&>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<int, RejectsOther>&, const pair<int, Other>&>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<int, WeirdlyTakesOther>&, const pair<int, Other>&>);\r\n\r\nSTATIC_ASSERT(is_assignable_v<tuple<CopiesOther, int>&, pair<Other, int>>);\r\nSTATIC_ASSERT(is_assignable_v<tuple<MovesOther, int>&, pair<Other, int>>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<RejectsOther, int>&, pair<Other, int>>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<WeirdlyTakesOther, int>&, pair<Other, int>>);\r\n\r\nSTATIC_ASSERT(is_assignable_v<tuple<int, CopiesOther>&, pair<int, Other>>);\r\nSTATIC_ASSERT(is_assignable_v<tuple<int, MovesOther>&, pair<int, Other>>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<int, RejectsOther>&, pair<int, Other>>);\r\nSTATIC_ASSERT(!is_assignable_v<tuple<int, WeirdlyTakesOther>&, pair<int, Other>>);\r\n\r\n\r\n// Verify workaround for LWG-2729 being unimplementable with tuples of\r\n// references to incomplete types. Without the workaround, MSVC diagnoses\r\n// a violation of the is_copy_assignable and is_move_assignable preconditions\r\n// when determining the deleted-ness of the class WebKit's special member\r\n// functions.\r\nstruct Incomplete;\r\nstruct WebKit {\r\n    tuple<Incomplete&> x;\r\n};\r\n\r\n\r\n// LWG-2796 \"tuple should be a literal type\"\r\nSTATIC_ASSERT(is_trivially_destructible_v<pair<int, int>>);\r\nSTATIC_ASSERT(!is_trivially_destructible_v<pair<int, string>>);\r\nSTATIC_ASSERT(!is_trivially_destructible_v<pair<string, int>>);\r\nSTATIC_ASSERT(!is_trivially_destructible_v<pair<string, string>>);\r\n\r\nSTATIC_ASSERT(is_trivially_destructible_v<tuple<>>);\r\n\r\nSTATIC_ASSERT(is_trivially_destructible_v<tuple<int>>);\r\nSTATIC_ASSERT(!is_trivially_destructible_v<tuple<string>>);\r\n\r\nSTATIC_ASSERT(is_trivially_destructible_v<tuple<int, int>>);\r\nSTATIC_ASSERT(!is_trivially_destructible_v<tuple<int, string>>);\r\nSTATIC_ASSERT(!is_trivially_destructible_v<tuple<string, int>>);\r\nSTATIC_ASSERT(!is_trivially_destructible_v<tuple<string, string>>);\r\n\r\n\r\n// N4387 \"Improving pair and tuple\"\r\n\r\nstruct No {};\r\nstruct Im {};\r\nstruct Ex {};\r\n\r\nstruct A {\r\n    A(Im) {}\r\n    explicit A(Ex) {}\r\n};\r\n\r\ntemplate <typename T, typename Arg>\r\nusing NotConstructible = bool_constant<!is_constructible_v<T, Arg> && !is_convertible_v<Arg, T>>;\r\n\r\ntemplate <typename T, typename Arg>\r\nusing ImplicitlyConstructible = bool_constant<is_constructible_v<T, Arg> && is_convertible_v<Arg, T>>;\r\n\r\ntemplate <typename T, typename Arg>\r\nusing ExplicitlyConstructible = bool_constant<is_constructible_v<T, Arg> && !is_convertible_v<Arg, T>>;\r\n\r\nSTATIC_ASSERT(NotConstructible<A, No>::value);\r\nSTATIC_ASSERT(ImplicitlyConstructible<A, Im>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<A, Ex>::value);\r\n\r\nusing UP = unique_ptr<int>;\r\n\r\nSTATIC_ASSERT(is_constructible_v<pair<int, int>, const int&, const int&>);\r\nSTATIC_ASSERT(!is_constructible_v<pair<int, UP>, const int&, const UP&>);\r\nSTATIC_ASSERT(!is_constructible_v<pair<UP, int>, const UP&, const int&>);\r\nSTATIC_ASSERT(!is_constructible_v<pair<UP, UP>, const UP&, const UP&>);\r\n\r\nSTATIC_ASSERT(is_constructible_v<tuple<int, int>, const int&, const int&>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<int, UP>, const int&, const UP&>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<UP, int>, const UP&, const int&>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<UP, UP>, const UP&, const UP&>);\r\n\r\nSTATIC_ASSERT(is_constructible_v<tuple<int, int>, allocator_arg_t, allocator<int>, const int&, const int&>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<int, UP>, allocator_arg_t, allocator<int>, const int&, const UP&>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<UP, int>, allocator_arg_t, allocator<int>, const UP&, const int&>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<UP, UP>, allocator_arg_t, allocator<int>, const UP&, const UP&>);\r\n\r\n\r\nSTATIC_ASSERT(is_constructible_v<pair<A, A>, Im, Im>);\r\nSTATIC_ASSERT(!is_constructible_v<pair<A, A>, Im, No>);\r\nSTATIC_ASSERT(!is_constructible_v<pair<A, A>, No, Im>);\r\nSTATIC_ASSERT(!is_constructible_v<pair<A, A>, No, No>);\r\n\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, Im, Im>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, Im, No>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, No, Im>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, No, No>);\r\n\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, Im, Im>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, Im, No>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, No, Im>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, No, No>);\r\n\r\nSTATIC_ASSERT(NotConstructible<tuple<A>, No>::value);\r\nSTATIC_ASSERT(ImplicitlyConstructible<tuple<A>, Im>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A>, Ex>::value);\r\n\r\n\r\nSTATIC_ASSERT(NotConstructible<pair<A, A>, const pair<No, No>&>::value);\r\nSTATIC_ASSERT(NotConstructible<pair<A, A>, const pair<No, Im>&>::value);\r\nSTATIC_ASSERT(NotConstructible<pair<A, A>, const pair<Im, No>&>::value);\r\nSTATIC_ASSERT(ImplicitlyConstructible<pair<A, A>, const pair<Im, Im>&>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<pair<A, A>, const pair<Im, Ex>&>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<pair<A, A>, const pair<Ex, Im>&>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<pair<A, A>, const pair<Ex, Ex>&>::value);\r\n\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A>, const tuple<No, No>&>::value);\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A>, const tuple<No, Im>&>::value);\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A>, const tuple<Im, No>&>::value);\r\nSTATIC_ASSERT(ImplicitlyConstructible<tuple<A, A>, const tuple<Im, Im>&>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A, A>, const tuple<Im, Ex>&>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A, A>, const tuple<Ex, Im>&>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A, A>, const tuple<Ex, Ex>&>::value);\r\n\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, const tuple<No, No>&>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, const tuple<No, Im>&>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, const tuple<Im, No>&>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, const tuple<Im, Im>&>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, const tuple<Im, Ex>&>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, const tuple<Ex, Im>&>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, const tuple<Ex, Ex>&>);\r\n\r\n\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A>, const pair<No, No>&>::value);\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A>, const pair<No, Im>&>::value);\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A>, const pair<Im, No>&>::value);\r\nSTATIC_ASSERT(ImplicitlyConstructible<tuple<A, A>, const pair<Im, Im>&>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A, A>, const pair<Im, Ex>&>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A, A>, const pair<Ex, Im>&>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A, A>, const pair<Ex, Ex>&>::value);\r\n\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, const pair<No, No>&>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, const pair<No, Im>&>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, const pair<Im, No>&>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, const pair<Im, Im>&>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, const pair<Im, Ex>&>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, const pair<Ex, Im>&>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, const pair<Ex, Ex>&>);\r\n\r\n\r\nSTATIC_ASSERT(NotConstructible<pair<A, A>, pair<No, No>>::value);\r\nSTATIC_ASSERT(NotConstructible<pair<A, A>, pair<No, Im>>::value);\r\nSTATIC_ASSERT(NotConstructible<pair<A, A>, pair<Im, No>>::value);\r\nSTATIC_ASSERT(ImplicitlyConstructible<pair<A, A>, pair<Im, Im>>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<pair<A, A>, pair<Im, Ex>>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<pair<A, A>, pair<Ex, Im>>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<pair<A, A>, pair<Ex, Ex>>::value);\r\n\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A>, tuple<No, No>>::value);\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A>, tuple<No, Im>>::value);\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A>, tuple<Im, No>>::value);\r\nSTATIC_ASSERT(ImplicitlyConstructible<tuple<A, A>, tuple<Im, Im>>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A, A>, tuple<Im, Ex>>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A, A>, tuple<Ex, Im>>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A, A>, tuple<Ex, Ex>>::value);\r\n\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, tuple<No, No>>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, tuple<No, Im>>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, tuple<Im, No>>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, tuple<Im, Im>>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, tuple<Im, Ex>>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, tuple<Ex, Im>>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, tuple<Ex, Ex>>);\r\n\r\n\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A>, pair<No, No>>::value);\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A>, pair<No, Im>>::value);\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A>, pair<Im, No>>::value);\r\nSTATIC_ASSERT(ImplicitlyConstructible<tuple<A, A>, pair<Im, Im>>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A, A>, pair<Im, Ex>>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A, A>, pair<Ex, Im>>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A, A>, pair<Ex, Ex>>::value);\r\n\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, pair<No, No>>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, pair<No, Im>>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, pair<Im, No>>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, pair<Im, Im>>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, pair<Im, Ex>>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, pair<Ex, Im>>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, pair<Ex, Ex>>);\r\n\r\n\r\nSTATIC_ASSERT(!is_constructible_v<tuple<int, int, int>, const int&, const int&>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<int, int, int>, const int&, const int&, const int&>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<int, int, int>, const int&, const int&, const int&, const int&>);\r\n\r\nSTATIC_ASSERT(!is_constructible_v<tuple<int, int, int>, short, short>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<int, int, int>, short, short, short>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<int, int, int>, short, short, short, short>);\r\n\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A, A>, const tuple<Im, Im>&>::value);\r\nSTATIC_ASSERT(ImplicitlyConstructible<tuple<A, A, A>, const tuple<Im, Im, Im>&>::value);\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A, A>, const tuple<Im, Im, Im, Im>&>::value);\r\n\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A, A>, const tuple<Ex, Ex>&>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A, A, A>, const tuple<Ex, Ex, Ex>&>::value);\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A, A>, const tuple<Ex, Ex, Ex, Ex>&>::value);\r\n\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A, A>, tuple<Im, Im>>::value);\r\nSTATIC_ASSERT(ImplicitlyConstructible<tuple<A, A, A>, tuple<Im, Im, Im>>::value);\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A, A>, tuple<Im, Im, Im, Im>>::value);\r\n\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A, A>, tuple<Ex, Ex>>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A, A, A>, tuple<Ex, Ex, Ex>>::value);\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A, A>, tuple<Ex, Ex, Ex, Ex>>::value);\r\n\r\nSTATIC_ASSERT(NotConstructible<tuple<A>, const pair<Im, Im>&>::value);\r\nSTATIC_ASSERT(ImplicitlyConstructible<tuple<A, A>, const pair<Im, Im>&>::value);\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A, A>, const pair<Im, Im>&>::value);\r\n\r\nSTATIC_ASSERT(NotConstructible<tuple<A>, const pair<Ex, Ex>&>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A, A>, const pair<Ex, Ex>&>::value);\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A, A>, const pair<Ex, Ex>&>::value);\r\n\r\nSTATIC_ASSERT(NotConstructible<tuple<A>, pair<Im, Im>>::value);\r\nSTATIC_ASSERT(ImplicitlyConstructible<tuple<A, A>, pair<Im, Im>>::value);\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A, A>, pair<Im, Im>>::value);\r\n\r\nSTATIC_ASSERT(NotConstructible<tuple<A>, pair<Ex, Ex>>::value);\r\nSTATIC_ASSERT(ExplicitlyConstructible<tuple<A, A>, pair<Ex, Ex>>::value);\r\nSTATIC_ASSERT(NotConstructible<tuple<A, A, A>, pair<Ex, Ex>>::value);\r\n\r\n\r\nSTATIC_ASSERT(!is_constructible_v<tuple<int, int, int>, allocator_arg_t, allocator<int>, const int&, const int&>);\r\nSTATIC_ASSERT(\r\n    is_constructible_v<tuple<int, int, int>, allocator_arg_t, allocator<int>, const int&, const int&, const int&>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<int, int, int>, allocator_arg_t, allocator<int>, const int&, const int&,\r\n    const int&, const int&>);\r\n\r\nSTATIC_ASSERT(!is_constructible_v<tuple<int, int, int>, allocator_arg_t, allocator<int>, short, short>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<int, int, int>, allocator_arg_t, allocator<int>, short, short, short>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<int, int, int>, allocator_arg_t, allocator<int>, short, short, short, short>);\r\n\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A, A>, allocator_arg_t, allocator<int>, const tuple<Im, Im>&>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A, A>, allocator_arg_t, allocator<int>, const tuple<Im, Im, Im>&>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A, A>, allocator_arg_t, allocator<int>, const tuple<Im, Im, Im, Im>&>);\r\n\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A, A>, allocator_arg_t, allocator<int>, const tuple<Ex, Ex>&>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A, A>, allocator_arg_t, allocator<int>, const tuple<Ex, Ex, Ex>&>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A, A>, allocator_arg_t, allocator<int>, const tuple<Ex, Ex, Ex, Ex>&>);\r\n\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A, A>, allocator_arg_t, allocator<int>, tuple<Im, Im>>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A, A>, allocator_arg_t, allocator<int>, tuple<Im, Im, Im>>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A, A>, allocator_arg_t, allocator<int>, tuple<Im, Im, Im, Im>>);\r\n\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A, A>, allocator_arg_t, allocator<int>, tuple<Ex, Ex>>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A, A>, allocator_arg_t, allocator<int>, tuple<Ex, Ex, Ex>>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A, A>, allocator_arg_t, allocator<int>, tuple<Ex, Ex, Ex, Ex>>);\r\n\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A>, allocator_arg_t, allocator<int>, const pair<Im, Im>&>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, const pair<Im, Im>&>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A, A>, allocator_arg_t, allocator<int>, const pair<Im, Im>&>);\r\n\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A>, allocator_arg_t, allocator<int>, const pair<Ex, Ex>&>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, const pair<Ex, Ex>&>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A, A>, allocator_arg_t, allocator<int>, const pair<Ex, Ex>&>);\r\n\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A>, allocator_arg_t, allocator<int>, pair<Im, Im>>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, pair<Im, Im>>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A, A>, allocator_arg_t, allocator<int>, pair<Im, Im>>);\r\n\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A>, allocator_arg_t, allocator<int>, pair<Ex, Ex>>);\r\nSTATIC_ASSERT(is_constructible_v<tuple<A, A>, allocator_arg_t, allocator<int>, pair<Ex, Ex>>);\r\nSTATIC_ASSERT(!is_constructible_v<tuple<A, A, A>, allocator_arg_t, allocator<int>, pair<Ex, Ex>>);\r\n\r\n// Also test that the internal constructor used for the piecewise_construct_t constructor of pair is not public.\r\nSTATIC_ASSERT(!is_constructible_v<pair<int, int>, tuple<>&, tuple<>&, make_index_sequence<0>, make_index_sequence<0>>);\r\nSTATIC_ASSERT(\r\n    !is_constructible_v<pair<int, int>, tuple<int>&, tuple<>&, make_index_sequence<1>, make_index_sequence<0>>);\r\nSTATIC_ASSERT(\r\n    !is_constructible_v<pair<int, int>, tuple<int>&, tuple<int>&, make_index_sequence<1>, make_index_sequence<1>>);\r\n\r\n\r\npair<int, int> func1() {\r\n    const int x = 17;\r\n    const int y = 29;\r\n    return {x, y};\r\n}\r\n\r\npair<string, string> func2() {\r\n    return {\"darth\", \"vader\"};\r\n}\r\n\r\ntuple<int, int, int> func3() {\r\n    const int x = 11;\r\n    const int y = 22;\r\n    const int z = 33;\r\n    return {x, y, z};\r\n}\r\n\r\ntuple<string, string, string> func4() {\r\n    return {\"red\", \"green\", \"blue\"};\r\n}\r\n\r\nvoid test_VSO_191303();\r\n\r\nvoid test_copy_move();\r\n\r\nvoid test_VSO_684710();\r\n\r\nint main() {\r\n    assert(func1() == make_pair(17, 29));\r\n    assert(func2() == make_pair(\"darth\"s, \"vader\"s));\r\n    assert(func3() == make_tuple(11, 22, 33));\r\n    assert(func4() == make_tuple(\"red\"s, \"green\"s, \"blue\"s));\r\n\r\n\r\n    // LWG-2549 \"Tuple EXPLICIT constructor templates that take tuple parameters\r\n    // end up taking references to temporaries and will create dangling references\"\r\n    {\r\n        tuple<int> t1(1729);\r\n        tuple<tuple<int>&&> t2(move(t1));\r\n\r\n        assert(&get<0>(t2) == &t1);\r\n        assert(&get<0>(get<0>(t2)) == &get<0>(t1));\r\n\r\n        const tuple<int> t3(2015);\r\n        tuple<const tuple<int>&> t4(t3);\r\n\r\n        assert(&get<0>(t4) == &t3);\r\n        assert(&get<0>(get<0>(t4)) == &get<0>(t3));\r\n    }\r\n\r\n\r\n    test_VSO_191303();\r\n\r\n    test_copy_move();\r\n\r\n    test_VSO_684710();\r\n}\r\n\r\n\r\n// Test VSO-191303 \"<tuple>: VC14.2 CTP1: std::tuple broken\"\r\n\r\nstruct None {};\r\n\r\ntemplate <typename T>\r\nstruct Optional {\r\n    T thing;\r\n\r\n    Optional(None) : thing() {}\r\n\r\n    template <typename Expr, typename = enable_if_t<!is_same_v<decay_t<Expr>, None>>>\r\n    Optional(Expr&& expr) : thing(forward<Expr>(expr)) {}\r\n};\r\n\r\nvoid test_VSO_191303() {\r\n    tuple<int, None> one{};\r\n\r\n    tuple<int, Optional<double>> two(one);\r\n}\r\n\r\n\r\n// Test:\r\n// VSO-215996 \"<tuple>: Wrong tuple constructor overload resolution causes stack overflow\"\r\n// VSO-216014 \"<tuple>: Tuple constructor overload resolution error\"\r\n\r\n// AbsorbingRef and AbsorbingVal need to appear to be omni-constructible,\r\n// so they use static_assert instead of =delete.\r\n\r\nstruct AbsorbingRef {\r\n    AbsorbingRef() {}\r\n\r\n    AbsorbingRef(const AbsorbingRef&) {}\r\n\r\n    template <typename T>\r\n    AbsorbingRef(const T&) {\r\n        STATIC_ASSERT(false);\r\n    }\r\n};\r\n\r\nstruct AbsorbingVal {\r\n    AbsorbingVal() {}\r\n\r\n    AbsorbingVal(const AbsorbingVal&) {}\r\n\r\n    template <typename U>\r\n    AbsorbingVal(U) {\r\n        STATIC_ASSERT(false);\r\n    }\r\n};\r\n\r\nvoid test_copy_move() {\r\n    tuple<AbsorbingRef> r1;\r\n    tuple<AbsorbingRef> r2(r1);\r\n    tuple<AbsorbingRef> r3 = r2;\r\n    tuple<AbsorbingRef> r4(move(r3));\r\n    tuple<AbsorbingRef> r5 = move(r4);\r\n\r\n    tuple<AbsorbingVal> v1;\r\n    tuple<AbsorbingVal> v2(v1);\r\n    tuple<AbsorbingVal> v3 = v2;\r\n    tuple<AbsorbingVal> v4(move(v3));\r\n    tuple<AbsorbingVal> v5 = move(v4);\r\n}\r\n\r\n// Test:\r\n// VSO-684710: \"[Feedback] <pair>: assignments from types convertible-to-pair do not compile\"\r\n\r\nvoid test_VSO_684710() {\r\n    using P = pair<int, int>;\r\n    P target{};\r\n\r\n    struct S1 {\r\n        operator P() const {\r\n            return P{};\r\n        }\r\n    };\r\n\r\n    target = S1{};\r\n    S1 s1{};\r\n    target = s1;\r\n\r\n    struct S2 {\r\n        P p;\r\n\r\n        operator P&&() {\r\n            return move(p);\r\n        }\r\n    };\r\n    target = S2{};\r\n    S2 s2{};\r\n    target = s2;\r\n\r\n    struct S3 {\r\n        P p;\r\n\r\n        operator const P&() const {\r\n            return p;\r\n        }\r\n    };\r\n    target = S3{};\r\n    S3 s3{};\r\n    target = s3;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_nullptr_stream_out/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_nullptr_stream_out/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <iosfwd>\r\n#include <istream>\r\n#include <ostream>\r\n#include <sstream>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <typename Istream, typename T, typename = void>\r\nconstexpr bool IstreamExtractable = false;\r\ntemplate <typename Istream, typename T>\r\nconstexpr bool IstreamExtractable<Istream, T, void_t<decltype(declval<Istream>() >> declval<T>())>> = true;\r\n\r\nclass PublicIstream : public istream {};\r\nclass PrivateIstream : private istream {};\r\nPrivateIstream& operator>>(PrivateIstream&, int&); // highly artificial test code, see below\r\n\r\ntemplate <typename Ostream, typename T, typename = void>\r\nconstexpr bool OstreamInsertable = false;\r\ntemplate <typename Ostream, typename T>\r\nconstexpr bool OstreamInsertable<Ostream, T, void_t<decltype(declval<Ostream>() << declval<T>())>> = true;\r\n\r\nclass PublicOstream : public ostream {};\r\nclass PrivateOstream : private ostream {};\r\nPrivateOstream& operator<<(PrivateOstream&, int); // highly artificial test code, see below\r\n\r\nint main() {\r\n#if _HAS_CXX17\r\n    // LWG-2221 \"No formatted output operator for nullptr\"\r\n    ostringstream os;\r\n    os << nullptr;\r\n    assert(os.str() == \"nullptr\");\r\n    wostringstream wos;\r\n    wos << nullptr;\r\n    assert(wos.str() == L\"nullptr\");\r\n#endif // _HAS_CXX17\r\n\r\n    // LWG-1203 \"More useful rvalue stream insertion\"\r\n    assert((ostringstream{} << 42).str() == \"42\");\r\n    int x;\r\n    assert((istringstream(\"42 1729\") >> x).str() == \"42 1729\");\r\n    assert(x == 42);\r\n\r\n    // Test GH-538 by verifying that LWG-1203 is constrained by \"publicly and unambiguously derived\".\r\n    // The \"highly artificial\" operator overloads above are ensuring that the streaming expressions are well-formed\r\n    // for lvalue PrivateIstream/PrivateOstream, so we can specifically test the inheritance constraint.\r\n    STATIC_ASSERT(IstreamExtractable<istream&, int&>);\r\n    STATIC_ASSERT(IstreamExtractable<istream, int&>);\r\n    STATIC_ASSERT(IstreamExtractable<PublicIstream&, int&>);\r\n    STATIC_ASSERT(IstreamExtractable<PublicIstream, int&>);\r\n    STATIC_ASSERT(IstreamExtractable<PrivateIstream&, int&>);\r\n    STATIC_ASSERT(!IstreamExtractable<PrivateIstream, int&>);\r\n\r\n    STATIC_ASSERT(OstreamInsertable<ostream&, int>);\r\n    STATIC_ASSERT(OstreamInsertable<ostream, int>);\r\n    STATIC_ASSERT(OstreamInsertable<PublicOstream&, int>);\r\n    STATIC_ASSERT(OstreamInsertable<PublicOstream, int>);\r\n    STATIC_ASSERT(OstreamInsertable<PrivateOstream&, int>);\r\n    STATIC_ASSERT(!OstreamInsertable<PrivateOstream, int>);\r\n\r\n    { // Test P3223R2 \"Making std::istream::ignore Less Surprising\"\r\n        istringstream in{\"\\xF0\\x9F\\xA4\\xA1 Clown Face\"};\r\n        decltype(auto) ret = in.ignore(100, '\\xA1');\r\n\r\n        STATIC_ASSERT(is_same_v<decltype(ret), istream&>);\r\n        assert(&ret == &static_cast<istream&>(in));\r\n        assert(in.gcount() == 4);\r\n\r\n        string s;\r\n        in >> s;\r\n        assert(s == \"Clown\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_path_stream_parameter/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_path_stream_parameter/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING\r\n\r\n#include <cassert>\r\n#include <fstream>\r\n#include <ios>\r\n#include <system_error>\r\n\r\n#include <experimental_filesystem.hpp>\r\n#include <test_filesystem_support.hpp>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    error_code ec;\r\n\r\n    {\r\n        namespace fs = experimental::filesystem;\r\n\r\n        const auto testDir = fs::temp_directory_path() / get_test_directory_subname(\"path_stream_parameter\");\r\n        fs::create_directories(testDir, ec);\r\n        assert(!ec);\r\n\r\n        {\r\n            const auto filebufPath = testDir / L\"filebuf_file\";\r\n            filebuf buf;\r\n            buf.open(filebufPath, ios::out | ios::trunc);\r\n            buf.close();\r\n            assert(fs::exists(filebufPath, ec));\r\n            assert(!ec);\r\n        }\r\n\r\n        const auto ofstreamFile     = testDir / L\"ofstream_file\";\r\n        const auto ofstreamOpenFile = testDir / L\"ofstream_open_file\";\r\n        {\r\n            ofstream ostr(ofstreamFile);\r\n            assert(ostr);\r\n            ostr << 1729;\r\n            assert(fs::exists(ofstreamFile, ec));\r\n            assert(!ec);\r\n            ostr.close();\r\n            ostr.open(ofstreamOpenFile);\r\n            ostr << 42;\r\n            assert(ostr);\r\n        }\r\n\r\n        assert(fs::exists(ofstreamOpenFile, ec));\r\n        assert(!ec);\r\n\r\n        const auto fstreamFile     = testDir / L\"fstream_file\";\r\n        const auto fstreamOpenFile = testDir / L\"fstream_open_file\";\r\n        {\r\n            fstream fstr(fstreamFile, ios::out | ios::trunc);\r\n            assert(fstr);\r\n            assert(fs::exists(fstreamFile, ec));\r\n            assert(!ec);\r\n            fstr.close();\r\n            fstr.open(fstreamOpenFile, ios::out | ios::trunc);\r\n            assert(fstr);\r\n        }\r\n\r\n        assert(fs::exists(fstreamOpenFile, ec));\r\n        assert(!ec);\r\n\r\n        {\r\n            ifstream istr(ofstreamFile);\r\n            assert(istr);\r\n            int temp;\r\n            assert(istr >> temp);\r\n            assert(temp == 1729);\r\n            istr.close();\r\n            istr.open(ofstreamOpenFile);\r\n            assert(istr);\r\n            assert(istr >> temp);\r\n            assert(temp == 42);\r\n        }\r\n\r\n        fs::remove_all(testDir, ec);\r\n        assert(!ec);\r\n    }\r\n\r\n#if _HAS_CXX17\r\n    {\r\n        const test_temp_directory testDir(\"path_stream_parameter\");\r\n\r\n        {\r\n            const auto filebufPath = testDir.directoryPath / L\"filebuf_file\";\r\n            filebuf buf;\r\n            buf.open(filebufPath, ios::out | ios::trunc);\r\n            buf.close();\r\n            assert(filesystem::exists(filebufPath, ec));\r\n            assert(!ec);\r\n        }\r\n\r\n        const auto ofstreamFile     = testDir.directoryPath / L\"ofstream_file\";\r\n        const auto ofstreamOpenFile = testDir.directoryPath / L\"ofstream_open_file\";\r\n        {\r\n            ofstream ostr(ofstreamFile);\r\n            assert(ostr);\r\n            ostr << 1729;\r\n            assert(filesystem::exists(ofstreamFile, ec));\r\n            assert(!ec);\r\n            ostr.close();\r\n            ostr.open(ofstreamOpenFile);\r\n            ostr << 42;\r\n            assert(ostr);\r\n        }\r\n\r\n        assert(filesystem::exists(ofstreamOpenFile, ec));\r\n        assert(!ec);\r\n\r\n        const auto fstreamFile     = testDir.directoryPath / L\"fstream_file\";\r\n        const auto fstreamOpenFile = testDir.directoryPath / L\"fstream_open_file\";\r\n        {\r\n            fstream fstr(fstreamFile, ios::out | ios::trunc);\r\n            assert(fstr);\r\n            assert(filesystem::exists(fstreamFile, ec));\r\n            assert(!ec);\r\n            fstr.close();\r\n            fstr.open(fstreamOpenFile, ios::out | ios::trunc);\r\n            assert(fstr);\r\n        }\r\n\r\n        assert(filesystem::exists(fstreamOpenFile, ec));\r\n        assert(!ec);\r\n\r\n        {\r\n            ifstream istr(ofstreamFile);\r\n            assert(istr);\r\n            int temp;\r\n            assert(istr >> temp);\r\n            assert(temp == 1729);\r\n            istr.close();\r\n            istr.open(ofstreamOpenFile);\r\n            assert(istr);\r\n            assert(istr >> temp);\r\n            assert(temp == 42);\r\n        }\r\n    }\r\n#endif // _HAS_CXX17\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_regex_interface/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_regex_interface/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdio>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <regex>\r\n#include <sstream>\r\n#include <string>\r\n#include <type_traits>\r\n\r\n#if _HAS_CXX17\r\n#include <memory_resource>\r\n#endif // _HAS_CXX17\r\n\r\nusing namespace std;\r\nusing namespace std::regex_constants;\r\n\r\nvoid test_devdiv_165070_regex_should_accept_wchar_t() {\r\n    // basic_regex's constructor from input iterators, as well as the\r\n    // sub_match/element comparators, were internally using std::string.\r\n    // This caused the ctor to truncate wchar_t to char, and caused the\r\n    // sub_match/wchar_t comparators to fail to compile.\r\n    //\r\n    // In order to verify the ctor fix, this test needs to use wchar_ts\r\n    // above 255.\r\n    //\r\n    // L\"\\x043A\\x043E\\x0448\\x043A\\x0430\" is \"koshka\", Russian for \"cat\".\r\n    // (\"sh\" is a single Russian letter.)\r\n    const wstring cat(L\"\\x043E.\\x043A\");\r\n\r\n    wistringstream iss(cat);\r\n\r\n    const istream_iterator<wchar_t, wchar_t> begin(iss);\r\n    const istream_iterator<wchar_t, wchar_t> end;\r\n\r\n    const wregex r(begin, end);\r\n    wcmatch m;\r\n\r\n    assert(regex_search(L\"\\x043A\\x043E\\x0448\\x043A\\x0430\", m, r));\r\n    assert(m[0] == L\"\\x043E\\x0448\\x043A\");\r\n    assert(m[0] != L'\\x043E');\r\n    assert(L'\\x043E' != m[0]);\r\n    assert(m[0] < L'\\x043F');\r\n    assert(L'\\x043F' >= m[0]);\r\n}\r\n\r\nvoid test_devdiv_822474_match_results_should_be_ready_after_regex_search() {\r\n    // DevDiv-822474 \"<regex>: match_results::ready() returns false after regex_search called [libs-conformance]\"\r\n\r\n    // N3797 28.10.1 [re.results.const]/3:\r\n    // match_results(const Allocator& a = Allocator());\r\n    // Postconditions: ready() returns false. size() returns 0.\r\n\r\n    // 28.11.2 [re.alg.match]/3:\r\n    // Postconditions: m.ready() == true in all cases.\r\n    // If the function returns false, then the effect on parameter m is\r\n    // unspecified except that m.size() returns 0 and m.empty() returns true.\r\n\r\n    const regex abc(\"abc\");\r\n    const regex meowpurr(\"me(ow)pu(rr)\");\r\n\r\n    cmatch m1;\r\n\r\n    // Test not-ready.\r\n    assert(!m1.ready());\r\n    assert(m1.size() == 0);\r\n\r\n    // Test not-ready ==> empty.\r\n    assert(!regex_match(\"xyz\", m1, abc));\r\n    assert(m1.ready());\r\n    assert(m1.size() == 0);\r\n\r\n    cmatch m2;\r\n\r\n    // Test not-ready ==> full.\r\n    assert(regex_match(\"abc\", m2, abc));\r\n    assert(m2.ready());\r\n    assert(m2.size() == 1);\r\n\r\n    // Test full ==> full.\r\n    assert(regex_match(\"meowpurr\", m2, meowpurr));\r\n    assert(m2.ready());\r\n    assert(m2.size() == 3);\r\n\r\n    // Test full ==> empty.\r\n    assert(!regex_match(\"xyz\", m2, abc));\r\n    assert(m2.ready());\r\n    assert(m2.size() == 0);\r\n}\r\n\r\nvoid test_dev10_900584_should_handle_quantified_alternates() {\r\n    const string s(\"12x34xx56x78\");\r\n    smatch m;\r\n    const regex r(\"^([0-9]|[0-9]x[0-9])+xx\");\r\n\r\n    assert(regex_search(s, m, r));\r\n    assert(m[0] == \"12x34xx\");\r\n}\r\n\r\nvoid test_devdiv_903531_regex_should_have_correct_suffix_matching() {\r\n    auto test_search = [](const string& s, const string& reg, const string::const_iterator match_begin,\r\n                           const string::const_iterator match_end) {\r\n        smatch m;\r\n        const regex r(reg);\r\n\r\n        assert(regex_search(s, m, r));\r\n\r\n        assert(m.size() == 1);\r\n        assert(!m.empty());\r\n\r\n        assert(m.prefix().first == s.begin());\r\n        assert(m.prefix().second == m[0].first);\r\n        assert(m.prefix().matched == (m.prefix().first != m.prefix().second));\r\n\r\n        assert(m.suffix().first == m[0].second);\r\n        assert(m.suffix().second == s.end());\r\n        assert(m.suffix().matched == (m.suffix().first != m.suffix().second));\r\n\r\n        assert(m[0].first == match_begin);\r\n        assert(m[0].second == match_end);\r\n        assert(m[0].matched);\r\n    };\r\n\r\n    const string s(\"aaabbbbccccc\");\r\n\r\n    const auto b_begin = s.begin() + 3;\r\n    const auto b_end   = s.begin() + 7;\r\n\r\n    test_search(s, \"a+b+c+\", s.begin(), s.end());\r\n    test_search(s, \"b+c+\", b_begin, s.end());\r\n    test_search(s, \"a+b+\", s.begin(), b_end);\r\n    test_search(s, \"b+\", b_begin, b_end);\r\n\r\n    smatch m;\r\n    const regex r(\"a+b+c+\");\r\n\r\n    assert(regex_match(s, m, r));\r\n\r\n    assert(m.size() == 1);\r\n    assert(!m.empty());\r\n\r\n    assert(m.prefix().first == s.begin());\r\n    assert(m.prefix().second == s.begin());\r\n    assert(!m.prefix().matched);\r\n\r\n    assert(m.suffix().first == s.end());\r\n    assert(m.suffix().second == s.end());\r\n    assert(!m.suffix().matched);\r\n\r\n    assert(m[0].first == s.begin());\r\n    assert(m[0].second == s.end());\r\n    assert(m[0].matched);\r\n}\r\n\r\nvoid test_dev10_505773_default_constructed_regex_should_not_match_empty_string() {\r\n    regex r;\r\n    assert(!regex_match(\"\", r));\r\n}\r\n\r\nvoid test_LWG_2195_allocator_extended_ctors_for_match_result() {\r\n    constexpr char input[] = {'a', 'b', '\\0', 'c', 'd'};\r\n    const regex pattern(\".(.).*\");\r\n\r\n    {\r\n        cmatch results;\r\n        assert(regex_match(begin(input), end(input), results, pattern));\r\n\r\n        cmatch r1{results, cmatch::allocator_type{}};\r\n        assert(r1 == results);\r\n\r\n        cmatch r2{move(results), cmatch::allocator_type{}};\r\n        assert(r2 == r1);\r\n\r\n        // strengthened exception specification\r\n        static_assert(is_nothrow_constructible_v<cmatch, cmatch, cmatch::allocator_type>,\r\n            \"Allocator-extended move construction should be noexcept when the allocator is stateless.\");\r\n    }\r\n#if _HAS_CXX17\r\n    {\r\n        pmr::cmatch results;\r\n        assert(regex_match(begin(input), end(input), results, pattern));\r\n\r\n        pmr::cmatch r1{results, pmr::cmatch::allocator_type{}};\r\n        assert(r1 == results);\r\n\r\n        pmr::cmatch r2{move(results), pmr::cmatch::allocator_type{}};\r\n        assert(r2 == r1);\r\n\r\n        static_assert(!is_nothrow_constructible_v<pmr::cmatch, pmr::cmatch, pmr::cmatch::allocator_type>,\r\n            \"Allocator-extended move construction shouldn't be noexcept when the allocator is stateful.\");\r\n    }\r\n#endif // _HAS_CXX17\r\n}\r\n\r\ntemplate <typename ContainerT>\r\nvoid test_LWG_2217_sub_match_should_not_slice_nulls() {\r\n    // LWG-2217: \"operator==(sub_match, string) slices on embedded '\\0's\"\r\n    const char input[] = {'a', 'b', '\\0', 'c', 'd'};\r\n    const ContainerT subject(begin(input), end(input));\r\n    const regex pattern(\".(.).*\");\r\n\r\n    match_results<typename ContainerT::const_iterator> results;\r\n    assert(regex_match(subject.begin(), subject.end(), results, pattern));\r\n\r\n    string test(begin(input), end(input));\r\n    assert(results[0] == test);\r\n    assert(test == results[0]);\r\n    assert(!(results[0] < test));\r\n    assert(!(test < results[0]));\r\n    assert(!(results[0] > test));\r\n    assert(!(test > results[0]));\r\n    test.back() = 'e';\r\n    assert(results[0] != test);\r\n    assert(test != results[0]);\r\n    assert(results[0] < test);\r\n    assert(!(test < results[0]));\r\n    assert(!(results[0] > test));\r\n    assert(test > results[0]);\r\n\r\n    assert(results[1] == 'b');\r\n    assert('b' == results[1]);\r\n    assert(!(results[1] < 'b'));\r\n    assert(!(results[1] > 'b'));\r\n    assert(!(results[1] < 'a'));\r\n    assert('a' < results[1]);\r\n    assert(results[1] > 'a');\r\n    assert(!('a' > results[1]));\r\n}\r\n\r\nconst string strEmpty;\r\nconst string strA(\"a\");\r\nconst string strAA(\"aa\");\r\nconst string strB(\"b\");\r\nconst string strGibberish(\"{match failed}\");\r\nconst string* const strExamples[] = {&strEmpty, &strA, &strAA, &strB};\r\n\r\n// test_case_sub_match_compare(left, op, right)\r\n// verifies that a sub_match made out of left and right causes left op right to be true\r\n// for all 3 sub_match::compare overloads and all *42* sub_match operators\r\n//\r\n// if str is nullptr, uses a sub_match with gibberish iterators but matched = false\r\ntemplate <typename ContainerT, typename CompareFunc>\r\nvoid test_case_sub_match_compare(const string* const left, CompareFunc compareFunc, const string* const right) {\r\n    typedef typename ContainerT::const_iterator Iterator;\r\n\r\n    const bool isLess    = compareFunc(-1, 0);\r\n    const bool isEqual   = compareFunc(0, 0);\r\n    const bool isGreater = compareFunc(1, 0);\r\n\r\n    const string& leftStr          = left == nullptr ? strEmpty : *left;\r\n    const string& leftContainerStr = left == nullptr ? strGibberish : *left;\r\n    const ContainerT leftContainer(leftContainerStr.begin(), leftContainerStr.end());\r\n    sub_match<Iterator> leftMatch;\r\n    leftMatch.first   = leftContainer.begin();\r\n    leftMatch.second  = leftContainer.end();\r\n    leftMatch.matched = left != nullptr;\r\n\r\n    const string& rightStr          = right == nullptr ? strEmpty : *right;\r\n    const string& rightContainerStr = right == nullptr ? strGibberish : *right;\r\n    const ContainerT rightContainer(rightContainerStr.begin(), rightContainerStr.end());\r\n    sub_match<Iterator> rightMatch;\r\n    rightMatch.first   = rightContainer.begin();\r\n    rightMatch.second  = rightContainer.end();\r\n    rightMatch.matched = right != nullptr;\r\n\r\n    printf(\"test_case_sub_match_compare(%s, OP, %s)\\n\", leftContainerStr.c_str(), rightContainerStr.c_str());\r\n\r\n    // compare(const sub_match&)\r\n    assert(compareFunc(leftMatch.compare(rightMatch), 0));\r\n    // compare(const string_type&)\r\n    assert(compareFunc(leftMatch.compare(rightStr), 0));\r\n    // compare(const value_type*)\r\n    assert(compareFunc(leftMatch.compare(rightStr.c_str()), 0));\r\n\r\n    // Operators are in N4567 28.9.2[re.submatch.op] order\r\n\r\n    // Operators against sub_match instances (note different order than others!)\r\n    assert(isEqual == (leftMatch == rightMatch));\r\n    assert(isEqual != (leftMatch != rightMatch));\r\n    assert(isLess == (leftMatch < rightMatch));\r\n    assert(isGreater != (leftMatch <= rightMatch));\r\n    assert(isLess != (leftMatch >= rightMatch)); // 5\r\n    assert(isGreater == (leftMatch > rightMatch));\r\n\r\n    // Operators with const basic_string& on left\r\n    assert(isEqual == (leftStr == rightMatch));\r\n    assert(isEqual != (leftStr != rightMatch));\r\n    assert(isLess == (leftStr < rightMatch));\r\n    assert(isGreater == (leftStr > rightMatch)); // 10\r\n    assert(isLess != (leftStr >= rightMatch));\r\n    assert(isGreater != (leftStr <= rightMatch));\r\n\r\n    // Operators with const basic_string& on right\r\n    assert(isEqual == (leftMatch == rightStr));\r\n    assert(isEqual != (leftMatch != rightStr));\r\n    assert(isLess == (leftMatch < rightStr)); // 15\r\n    assert(isGreater == (leftMatch > rightStr));\r\n    assert(isLess != (leftMatch >= rightStr));\r\n    assert(isGreater != (leftMatch <= rightStr));\r\n\r\n    // Operators with const value_type* on the left\r\n    assert(isEqual == (leftStr.c_str() == rightMatch));\r\n    assert(isEqual != (leftStr.c_str() != rightMatch)); // 20\r\n    assert(isLess == (leftStr.c_str() < rightMatch));\r\n    assert(isGreater == (leftStr.c_str() > rightMatch));\r\n    assert(isLess != (leftStr.c_str() >= rightMatch));\r\n    assert(isGreater != (leftStr.c_str() <= rightMatch));\r\n\r\n    // Operators with const value_type* on the right\r\n    assert(isEqual == (leftMatch == rightStr.c_str())); // 25\r\n    assert(isEqual != (leftMatch != rightStr.c_str()));\r\n    assert(isLess == (leftMatch < rightStr.c_str()));\r\n    assert(isGreater == (leftMatch > rightStr.c_str()));\r\n    assert(isLess != (leftMatch >= rightStr.c_str()));\r\n    assert(isGreater != (leftMatch <= rightStr.c_str())); // 30\r\n\r\n    // Operators with const value_type& on the left\r\n    if (leftStr.size() == 1) {\r\n        assert(isEqual == (leftStr[0] == rightMatch));\r\n        assert(isEqual != (leftStr[0] != rightMatch));\r\n        assert(isLess == (leftStr[0] < rightMatch));\r\n        assert(isGreater == (leftStr[0] > rightMatch));\r\n        assert(isLess != (leftStr[0] >= rightMatch)); // 35\r\n        assert(isGreater != (leftStr[0] <= rightMatch));\r\n    }\r\n\r\n    // Operators with const value_type& on the right\r\n    if (rightStr.size() == 1) {\r\n        assert(isEqual == (leftMatch == rightStr[0]));\r\n        assert(isEqual != (leftMatch != rightStr[0]));\r\n        assert(isLess == (leftMatch < rightStr[0]));\r\n        assert(isGreater == (leftMatch > rightStr[0])); // 40\r\n        assert(isLess != (leftMatch >= rightStr[0]));\r\n        assert(isGreater != (leftMatch <= rightStr[0]));\r\n    }\r\n}\r\n\r\ntemplate <typename ContainerT>\r\nvoid test_VSO_177524_sub_match_compare_should_not_construct_unnecessary_basic_strings() {\r\n    test_case_sub_match_compare<ContainerT>(nullptr, equal_to<>{}, nullptr);\r\n\r\n    for (const string* const left : strExamples) {\r\n        if (left->empty()) {\r\n            test_case_sub_match_compare<ContainerT>(left, equal_to<>{}, nullptr);\r\n            test_case_sub_match_compare<ContainerT>(nullptr, equal_to<>{}, left);\r\n        } else {\r\n            test_case_sub_match_compare<ContainerT>(left, greater<>{}, nullptr);\r\n            test_case_sub_match_compare<ContainerT>(nullptr, less<>{}, left);\r\n        }\r\n\r\n        for (const string* const right : strExamples) {\r\n            if (*left < *right) {\r\n                test_case_sub_match_compare<ContainerT>(left, less<>{}, right);\r\n            } else if (*left > *right) {\r\n                test_case_sub_match_compare<ContainerT>(left, greater<>{}, right);\r\n            } else {\r\n                test_case_sub_match_compare<ContainerT>(left, equal_to<>{}, right);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_VSO_180466_regex_replace_ARRAY() {\r\n    const regex pattern(\"d\");\r\n    const string format(\"x\");\r\n    const char input[]    = \"abcdefg\";\r\n    const char expected[] = \"abcxefg\";\r\n    char buff[sizeof(input)];\r\n\r\n    // tests that the following regex_replace calls don't emit _SCL_INSECURE_DEPRECATE_FN warnings\r\n    fill(begin(buff), end(buff), '\\0');\r\n    assert(end(buff) == regex_replace(buff, begin(input), end(input), pattern, format));\r\n    assert(equal(begin(buff), end(buff), begin(expected), end(expected)));\r\n    fill(begin(buff), end(buff), '\\0');\r\n    assert(end(buff) == regex_replace(buff, begin(input), end(input), pattern, format.c_str()));\r\n    assert(equal(begin(buff), end(buff), begin(expected), end(expected)));\r\n}\r\n\r\nvoid test_VSO_180466_regex_search_missing_Unchecked_call() {\r\n    const regex pattern(\"d\");\r\n    const string checked_input(\"abcdefg\");\r\n    assert(regex_search(begin(checked_input), end(checked_input), pattern));\r\n}\r\n\r\nvoid test_VSO_226914_match_prev_avail() {\r\n    // test exercises multiline mode\r\n    const char bol_haystack[] = {'\\n', 'a'};\r\n    const regex bol_anchor(R\"(^a)\", regex_constants::multiline);\r\n    assert(regex_match(bol_haystack + 1, end(bol_haystack), bol_anchor));\r\n    assert(!regex_match(bol_haystack + 1, end(bol_haystack), bol_anchor, match_not_bol));\r\n    assert(regex_match(bol_haystack + 1, end(bol_haystack), bol_anchor, match_prev_avail));\r\n    assert(regex_match(bol_haystack + 1, end(bol_haystack), bol_anchor, match_not_bol | match_prev_avail));\r\n\r\n    const char word_haystack_match[] = {'#', 'a'};\r\n    const auto word_haystack_mbegin  = word_haystack_match + 1;\r\n    const auto word_haystack_mend    = end(word_haystack_match);\r\n\r\n    const char word_haystack_fail[] = {'b', 'a'};\r\n    const auto word_haystack_fbegin = word_haystack_fail + 1;\r\n    const auto word_haystack_fend   = end(word_haystack_fail);\r\n\r\n    const regex word_anchor(R\"(\\ba)\");\r\n    const regex neg_word_anchor(R\"(\\Ba)\");\r\n\r\n    assert(regex_match(word_haystack_mbegin, word_haystack_mend, word_anchor));\r\n    assert(!regex_match(word_haystack_mbegin, word_haystack_mend, word_anchor, match_not_bow));\r\n    assert(regex_match(word_haystack_mbegin, word_haystack_mend, word_anchor, match_prev_avail));\r\n    assert(regex_match(word_haystack_mbegin, word_haystack_mend, word_anchor, match_not_bow | match_prev_avail));\r\n\r\n    assert(!regex_match(word_haystack_mbegin, word_haystack_mend, neg_word_anchor));\r\n    assert(regex_match(word_haystack_mbegin, word_haystack_mend, neg_word_anchor, match_not_bow));\r\n    assert(!regex_match(word_haystack_mbegin, word_haystack_mend, neg_word_anchor, match_prev_avail));\r\n    assert(!regex_match(word_haystack_mbegin, word_haystack_mend, neg_word_anchor, match_not_bow | match_prev_avail));\r\n\r\n    assert(regex_match(word_haystack_fbegin, word_haystack_fend, word_anchor));\r\n    assert(!regex_match(word_haystack_fbegin, word_haystack_fend, word_anchor, match_not_bow));\r\n    assert(!regex_match(word_haystack_fbegin, word_haystack_fend, word_anchor, match_prev_avail));\r\n    assert(!regex_match(word_haystack_fbegin, word_haystack_fend, word_anchor, match_not_bow | match_prev_avail));\r\n\r\n    assert(!regex_match(word_haystack_fbegin, word_haystack_fend, neg_word_anchor));\r\n    assert(regex_match(word_haystack_fbegin, word_haystack_fend, neg_word_anchor, match_not_bow));\r\n    assert(regex_match(word_haystack_fbegin, word_haystack_fend, neg_word_anchor, match_prev_avail));\r\n    assert(regex_match(word_haystack_fbegin, word_haystack_fend, neg_word_anchor, match_not_bow | match_prev_avail));\r\n}\r\n\r\nint main() {\r\n    test_devdiv_165070_regex_should_accept_wchar_t();\r\n    test_devdiv_822474_match_results_should_be_ready_after_regex_search();\r\n    test_dev10_900584_should_handle_quantified_alternates();\r\n    test_devdiv_903531_regex_should_have_correct_suffix_matching();\r\n    test_dev10_505773_default_constructed_regex_should_not_match_empty_string();\r\n    test_LWG_2195_allocator_extended_ctors_for_match_result();\r\n    test_LWG_2217_sub_match_should_not_slice_nulls<string>();\r\n    test_LWG_2217_sub_match_should_not_slice_nulls<list<char>>();\r\n    test_VSO_177524_sub_match_compare_should_not_construct_unnecessary_basic_strings<string>();\r\n    test_VSO_177524_sub_match_compare_should_not_construct_unnecessary_basic_strings<list<char>>();\r\n    test_VSO_180466_regex_replace_ARRAY();\r\n    test_VSO_180466_regex_search_missing_Unchecked_call();\r\n    test_VSO_226914_match_prev_avail();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_regex_use/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_regex_use/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <regex>\r\n#include <string>\r\n\r\n#include <test_regex_support.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::regex_constants;\r\n\r\nregex_fixture g_regexTester;\r\n\r\nvoid test_dev10_449367_case_insensitivity_should_work() {\r\n    g_regexTester.should_match(\"a\", \"a\");\r\n    g_regexTester.should_not_match(\"A\", \"a\");\r\n    g_regexTester.should_not_match(\"a\", \"A\");\r\n    g_regexTester.should_match(\"A\", \"A\");\r\n\r\n    g_regexTester.should_match(\"a\", \"[a]\");\r\n    g_regexTester.should_not_match(\"A\", \"[a]\");\r\n    g_regexTester.should_not_match(\"a\", \"[A]\");\r\n    g_regexTester.should_match(\"A\", \"[A]\");\r\n\r\n    g_regexTester.should_match(\"a\", \"[a-z]\");\r\n    g_regexTester.should_not_match(\"A\", \"[a-z]\");\r\n    g_regexTester.should_not_match(\"a\", \"[A-Z]\");\r\n    g_regexTester.should_match(\"A\", \"[A-Z]\");\r\n\r\n    g_regexTester.should_match(\"meow\", \"[a-z]+\");\r\n    g_regexTester.should_not_match(\"MeOw\", \"[a-z]+\");\r\n    g_regexTester.should_not_match(\"MEOW\", \"[a-z]+\");\r\n    g_regexTester.should_not_match(\"meow\", \"[A-Z]+\");\r\n    g_regexTester.should_not_match(\"MeOw\", \"[A-Z]+\");\r\n    g_regexTester.should_match(\"MEOW\", \"[A-Z]+\");\r\n\r\n    g_regexTester.should_match(\"a\", \"a\", ECMAScript | icase);\r\n    g_regexTester.should_match(\"A\", \"a\", ECMAScript | icase);\r\n    g_regexTester.should_match(\"a\", \"A\", ECMAScript | icase);\r\n    g_regexTester.should_match(\"A\", \"A\", ECMAScript | icase);\r\n\r\n    g_regexTester.should_match(\"a\", \"[a]\", ECMAScript | icase);\r\n    g_regexTester.should_match(\"A\", \"[a]\", ECMAScript | icase);\r\n    g_regexTester.should_match(\"a\", \"[A]\", ECMAScript | icase);\r\n    g_regexTester.should_match(\"A\", \"[A]\", ECMAScript | icase);\r\n\r\n    g_regexTester.should_match(\"a\", \"[a-z]\", ECMAScript | icase);\r\n    g_regexTester.should_match(\"A\", \"[a-z]\", ECMAScript | icase);\r\n    g_regexTester.should_match(\"a\", \"[A-Z]\", ECMAScript | icase);\r\n    g_regexTester.should_match(\"A\", \"[A-Z]\", ECMAScript | icase);\r\n\r\n    g_regexTester.should_match(\"meow\", \"[a-z]+\", ECMAScript | icase);\r\n    g_regexTester.should_match(\"MeOw\", \"[a-z]+\", ECMAScript | icase);\r\n    g_regexTester.should_match(\"MEOW\", \"[a-z]+\", ECMAScript | icase);\r\n    g_regexTester.should_match(\"meow\", \"[A-Z]+\", ECMAScript | icase);\r\n    g_regexTester.should_match(\"MeOw\", \"[A-Z]+\", ECMAScript | icase);\r\n    g_regexTester.should_match(\"MEOW\", \"[A-Z]+\", ECMAScript | icase);\r\n}\r\n\r\nvoid test_dev11_462743_regex_collate_should_not_disable_regex_icase() {\r\n    g_regexTester.should_not_match(\"kitty\", \"KITTY\");\r\n    g_regexTester.should_match(\"kitty\", \"KITTY\", ECMAScript | icase);\r\n    g_regexTester.should_match(\"kitty\", \"KITTY\", ECMAScript | icase | regex::collate);\r\n\r\n    g_regexTester.should_not_match(\"KITTY\", \"kitty\", ECMAScript);\r\n    g_regexTester.should_match(\"KITTY\", \"kitty\", ECMAScript | icase);\r\n    g_regexTester.should_match(\"KITTY\", \"kitty\", ECMAScript | icase | regex::collate);\r\n}\r\n\r\nvoid test_dev10_448906_regex_infinite_loops_incorrect_results() {\r\n    // ECMA-262 15.10.2.5 \"Term\":\r\n    // Step 1 of the RepeatMatcher's closure d states that, once the minimum number\r\n    // of repetitions has been satisfied, any more expansions of Atom that match\r\n    // the empty string are not considered for further repetitions.\r\n    g_regexTester.should_capture(\"xyyxxxyyyy\", \"(x|y*)+\", \"yyyy\");\r\n    g_regexTester.should_capture(\"xyyxxxyyyy\", \"(x|y+)+\", \"yyyy\");\r\n    g_regexTester.should_capture(\"xyyxxxyyyy\", \"(x|y*?)+\", \"y\");\r\n    g_regexTester.should_capture(\"xyyxxxyyyy\", \"(x|y+?)+\", \"y\");\r\n}\r\n\r\nvoid test_dev10_505773_regex_should_accept_empty_alternations() {\r\n    g_regexTester.should_not_match(\"a\", \"\");\r\n    g_regexTester.should_not_match(\"b\", \"\");\r\n    g_regexTester.should_not_match(\"ab\", \"\");\r\n\r\n    g_regexTester.should_match(\"\", \"a|\");\r\n    g_regexTester.should_match(\"a\", \"a|\");\r\n    g_regexTester.should_not_match(\"b\", \"a|\");\r\n    g_regexTester.should_not_match(\"ab\", \"a|\");\r\n\r\n    g_regexTester.should_match(\"\", \"|b\");\r\n    g_regexTester.should_not_match(\"a\", \"|b\");\r\n    g_regexTester.should_match(\"b\", \"|b\");\r\n    g_regexTester.should_not_match(\"ab\", \"|b\");\r\n\r\n    g_regexTester.should_not_match(\"\", \"a|b\");\r\n    g_regexTester.should_match(\"a\", \"a|b\");\r\n    g_regexTester.should_match(\"b\", \"a|b\");\r\n    g_regexTester.should_not_match(\"ab\", \"a|b\");\r\n\r\n    g_regexTester.should_match(\"\", \"|\");\r\n    g_regexTester.should_not_match(\"a\", \"|\");\r\n    g_regexTester.should_not_match(\"b\", \"|\");\r\n    g_regexTester.should_not_match(\"ab\", \"|\");\r\n}\r\n\r\nvoid test_dev11_821930_literal_dollar_replacement_characters() {\r\n    // Also test DevDiv-821930 \"<regex>: match_results formatting: _Format_default increment error [libs-conformance]\"\r\n\r\n    // N3797 28.5.2 [re.matchflag]:\r\n    // Element: format_default\r\n    // Effect(s) if set: When a regular expression match is to be replaced by a new string,\r\n    // the new string shall be constructed using the rules used by the ECMAScript replace\r\n    // function in ECMA-262, part 15.5.4.11 String.prototype.replace. In addition, during\r\n    // search and replace operations all non-overlapping occurrences of the regular expression\r\n    // shall be located and replaced, and sections of the input that did not match the\r\n    // expression shall be copied unchanged to the output string.\r\n\r\n    // ECMA-262 15.5.4.11:\r\n    // A $ in newstring that does not match any of the forms below is left as is.\r\n    // Characters  Replacement text\r\n    // $$          $\r\n    // $&          The matched substring.\r\n    // $`?         The portion of string that precedes the matched substring.\r\n    // $'?         The portion of string that follows the matched substring.\r\n    // $n          The nth capture, where n is a single digit 1-9 and $n is not followed by a decimal digit.\r\n    //             If n<=m and the nth capture is undefined, use the empty string instead.\r\n    //             If n>m, the result is implementation-defined.\r\n    // $nn         The nnth capture, where nn is a two-digit decimal number 01-99.\r\n    //             If nn<=m and the nnth capture is undefined, use the empty string instead.\r\n    //             If nn>m, the result is implementation-defined.\r\n\r\n    // N3797 28.5.2 [re.matchflag]:\r\n    // Element: format_sed\r\n    // Effect(s) if set: When a regular expression match is to be replaced by a new string,\r\n    // the new string shall be constructed using the rules used by the sed utility in POSIX.\r\n\r\n    // POSIX.1-2008:\r\n    // The replacement string shall be scanned from beginning to end. An <ampersand> ( '&' ) appearing\r\n    // in the replacement shall be replaced by the string matching the BRE. The special meaning of '&'\r\n    // in this context can be suppressed by preceding it by a <backslash>. The characters \"\\n\", where\r\n    // n is a digit, shall be replaced by the text matched by the corresponding back-reference expression.\r\n    // If the corresponding back-reference expression does not match, then the characters \"\\n\" shall be\r\n    // replaced by the empty string. The special meaning of \"\\n\" where n is a digit in this context, can\r\n    // be suppressed by preceding it by a <backslash>. For each other <backslash> encountered, the\r\n    // following character shall lose its special meaning (if any). The meaning of a <backslash>\r\n    // immediately followed by any character other than '&', <backslash>, a digit, or the delimiter\r\n    // character used for this command, is unspecified.\r\n\r\n    const string s(\"abcdefghijklmnopqrstuvwxyz\");\r\n    const string r(\"d(e.)(g.)(i.)(k)(.)(m)(.)(o)(.)(q.)(s.)(u.)w\");\r\n\r\n    g_regexTester.should_replace_to(s, r,\r\n        \"<$$><$$1><$$$$><$&><$`><$'><$1><$2><$8><$9>($01)($02)($08)($09)<$10><$11><$12><$114>[$0][$00][$007][$X]$\",\r\n        format_default | format_no_copy,\r\n        \"<$><$1><$$><defghijklmnopqrstuvw><abc><xyz><ef><gh><o><p>(ef)(gh)(o)(p)<qr><st><uv><st4>[$0][$00][$007][$X]$\");\r\n\r\n    g_regexTester.should_replace_to(s, r, R\"(<\\\\><\\\\1><\\\\\\\\><&><\\&><\\1><\\2><\\8><\\9><\\12>(\\0)(\\03)(\\X)\\)\",\r\n        format_sed | format_no_copy,\r\n        R\"(<\\><\\1><\\\\><defghijklmnopqrstuvw><&><ef><gh><o><p><ef2>(defghijklmnopqrstuvw)(defghijklmnopqrstuvw3)(X))\");\r\n\r\n    const string s2(\"aabbccddee\");\r\n    const string r2(\"(b.)(c.)(d.)\");\r\n\r\n    g_regexTester.should_replace_to(s2, r2, R\"(<$1><$2><$3><$4>)\", format_default | format_no_copy, \"<bb><cc><dd><>\");\r\n    g_regexTester.should_replace_to(s2, r2, R\"(<\\1><\\2><\\3><\\4>)\", format_sed | format_no_copy, \"<bb><cc><dd><>\");\r\n}\r\n\r\nvoid test_dev10_514062_regex_should_throw_regex_error_rather_than_crash_for_bogus_character_classes() {\r\n    g_regexTester.should_throw(\"[[::]]\", error_ctype);\r\n    g_regexTester.should_throw(\"[[..]]\", error_collate);\r\n    g_regexTester.should_throw(\"[[==]]\", error_collate);\r\n\r\n    g_regexTester.should_throw(\"[[:::]]\", error_ctype);\r\n    g_regexTester.should_throw(\"[[.:.]]\", error_collate);\r\n    g_regexTester.should_throw(\"[[=:=]]\", error_collate);\r\n\r\n    g_regexTester.should_throw(\"[[:.:]]\", error_ctype);\r\n    g_regexTester.should_throw(\"[[...]]\", error_collate);\r\n    g_regexTester.should_throw(\"[[=.=]]\", error_collate);\r\n\r\n    g_regexTester.should_throw(\"[[:=:]]\", error_ctype);\r\n    g_regexTester.should_throw(\"[[.=.]]\", error_collate);\r\n    g_regexTester.should_throw(\"[[===]]\", error_collate);\r\n\r\n    g_regexTester.should_throw(\"[[:a:b:]]\", error_ctype);\r\n    g_regexTester.should_throw(\"[[.a:b.]]\", error_collate);\r\n    g_regexTester.should_throw(\"[[=a:b=]]\", error_collate);\r\n\r\n    g_regexTester.should_throw(\"[[:a.b:]]\", error_ctype);\r\n    g_regexTester.should_throw(\"[[.a.b.]]\", error_collate);\r\n    g_regexTester.should_throw(\"[[=a.b=]]\", error_collate);\r\n\r\n    g_regexTester.should_throw(\"[[:a=b:]]\", error_ctype);\r\n    g_regexTester.should_throw(\"[[.a=b.]]\", error_collate);\r\n    g_regexTester.should_throw(\"[[=a=b=]]\", error_collate);\r\n}\r\n\r\nvoid test_dev10_767618_nested_quantifiers_should_match() {\r\n    g_regexTester.should_match(\r\n        \"some random sub.srt:ANSI:regexp\", \"^\\\"?([^\\\":]+?)\\\"?(?::\\\"?([^\\\":]+?)\\\"?(?::\\\"?([^\\\":]+?)\\\"?)?)?$\");\r\n\r\n    g_regexTester.should_match(\"kittens\", \"(.+?)?\");\r\n\r\n    g_regexTester.should_match(\"aaaaaa\", \"(a+)?aaa\");\r\n}\r\n\r\nvoid test_dev11_291918_more_nested_quantifiers_should_match() {\r\n    const string r1 = \"^([\\\\w|-]*)(((\\\\.)([\\\\w|-]+))*)(\\\\.)?(devices|ra)(-(.+))?(\\\\.)(live)(-int)?(\\\\.)(com/)(.*)\";\r\n    g_regexTester.should_match(\"server.ra-df.live.com/\", r1);\r\n    g_regexTester.should_match(\"abcz\", \"(a.+)?z\");\r\n\r\n    const string r2 = \"^npt=(?:(?:(?:(?:(\\\\d+(?:\\\\.\\\\d+)?)|((?:\\\\d+):(?:[0-5]\\\\d):(?:[0-5]\\\\d(?:\\\\.\"\r\n                      \"\\\\d+)?))))-(?:(?:(\\\\d+(?:\\\\.\\\\d+)?)|((?:\\\\d+):(?:[0-5]\\\\d):(?:[0-5]\\\\d(?:\\\\.\\\\d+)?))))?)|\"\r\n                      \"(-(?:(?:(?:\\\\d+(?:\\\\.\\\\d+)?)|(?:(?:\\\\d+):(?:[0-5]\\\\d):(?:[0-5]\\\\d(?:\\\\.\\\\d+)?))))))\";\r\n    g_regexTester.should_match(\"npt=30:23:15-40:28:10\", r2);\r\n    g_regexTester.should_match(\"npt=40-40:28:10\", r2);\r\n\r\n    const string r3 = \"(\\\\d+(\\\\.\\\\d+)?|\\\\d+:[0-5]\\\\d:[0-5]\\\\d(\\\\.\\\\d+)?)-(\\\\d+(\\\\.\\\\d+)?|\\\\d+:[0-5]\\\\\"\r\n                      \"d:[0-5]\\\\d(\\\\.\\\\d+)?)?|-(\\\\d+(\\\\.\\\\d+)?|\\\\d+:[0-5]\\\\d:[0-5]\\\\d(\\\\.\\\\d+)?)\";\r\n    g_regexTester.should_match(\"30:23:15-40:28:10\", r3);\r\n    g_regexTester.should_match(\"40-40:28:10\", r3);\r\n\r\n    g_regexTester.should_match(\"xxy\", \"(x+|x+y)?\");\r\n}\r\n\r\nvoid test_VSO_167760_nested_quantifiers_should_not_infinite_loop() {\r\n    g_regexTester.should_match(\"12345678901;phonecontext=IndiaDialPlan\", R\"(1?([2-9]\\d\\d[2-9]\\d{6})(\\s*\\S*)*)\");\r\n}\r\n\r\nvoid test_DDB_153116_replacements() {\r\n    g_regexTester.should_replace_to(\"abc def def ghi\", \"^\", \"X\", format_default, \"Xabc def def ghi\");\r\n    g_regexTester.should_replace_to(\"abc def def ghi\", \"$\", \"X\", format_default, \"abc def def ghiX\");\r\n    g_regexTester.should_replace_to(\"abc  def def  ghi\", \"\\\\b\", \"X\", format_default, \"XabcX  XdefX XdefX  XghiX\");\r\n    g_regexTester.should_replace_to(\"abc  def def  ghi\", \"\\\\B\", \"X\", format_default, \"aXbXc X dXeXf dXeXf X gXhXi\");\r\n    g_regexTester.should_replace_to(\"abc def def ghi\", \"(?=ef)\", \"X\", format_default, \"abc dXef dXef ghi\");\r\n    g_regexTester.should_replace_to(\"abc def def ghi\", \"(?!ef)\", \"X\", format_default, \"XaXbXcX XdeXfX XdeXfX XgXhXiX\");\r\n}\r\n\r\nvoid test_DDB_169529_replacements() {\r\n    g_regexTester.should_replace_to(\"if (b) { ++v[i]; }\", \"[\\\\.\\\\*\\\\+\\\\?\\\\|\\\\^\\\\$\\\\(\\\\)\\\\[\\\\]\\\\{\\\\}\\\\\\\\]\", \"\\\\$&\",\r\n        format_default, \"if \\\\(b\\\\) \\\\{ \\\\+\\\\+v\\\\[i\\\\]; \\\\}\");\r\n    g_regexTester.should_replace_to(\"AAAAAAAAAA\", \"A\", \"x\", format_default, \"xxxxxxxxxx\");\r\n    g_regexTester.should_replace_to(\"ABRACADABRA\", \"..A\", \"***\", format_default, \"A***C******\");\r\n}\r\n\r\nvoid test_dev11_900202_regex_should_accept_backreferences() {\r\n    const string pattern(R\"(([a-z]+)([0-9]+)<\\2><\\1>)\");\r\n    g_regexTester.should_match(\"abc123<123><abc>\", pattern);\r\n    g_regexTester.should_not_match(\"abc123<456><xyz>\", pattern);\r\n}\r\n\r\nvoid test_dev11_900202_regex_should_throw_for_self_referencing_backreferences() {\r\n    g_regexTester.should_throw(R\"(aaa(bbb)\\2ccc)\", error_backref);\r\n    g_regexTester.should_throw(R\"(ddd(eee\\1)fff)\", error_backref);\r\n}\r\n\r\nvoid test_dev10_897466_regex_should_support_more_than_31_capture_groups() {\r\n    g_regexTester.should_replace_to(\r\n        // subject\r\n        \"1x4x9x16x25x36x49x64x81x100x121x144x169x196x225x256x\"\r\n        \"289x324x361x400x441x484x529x576x625x676x729x784x841x\"\r\n        \"900x961x1024x1089x1156x1225x1296x1369x1444x1521x1600x\"\r\n        \"1681x1764x1849x1936x2025x2116x2209x2304x2401x2500x2601x\"\r\n        \"2704x2809x2916x3025x3136x3249x3364x3481x3600x3721x3844x\"\r\n        \"3969x4096x4225x4356x4489x4624x4761x4900x5041x5184x5329x\"\r\n        \"5476x5625x5776x5929x6084x6241x6400x6561x6724x6889x7056x\"\r\n        \"7225x7396x7569x7744x7921x8100x8281x8464x8649x8836x9025x\"\r\n        \"9216x9409x9604x9801x\",\r\n        // pattern\r\n        \"(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x\"\r\n        \"(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x\"\r\n        \"(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x\"\r\n        \"(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x\"\r\n        \"(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x\"\r\n        \"(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x\"\r\n        \"(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x\"\r\n        \"(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x\"\r\n        \"(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x\"\r\n        \"(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x(\\\\d+)x\",\r\n        // format\r\n        \"$99,$98,$97,$96,$95,$94,$93,$92,$91,$90,\"\r\n        \"$89,$88,$87,$86,$85,$84,$83,$82,$81,$80,\"\r\n        \"$79,$78,$77,$76,$75,$74,$73,$72,$71,$70,\"\r\n        \"$69,$68,$67,$66,$65,$64,$63,$62,$61,$60,\"\r\n        \"$59,$58,$57,$56,$55,$54,$53,$52,$51,$50,\"\r\n        \"$49,$48,$47,$46,$45,$44,$43,$42,$41,$40,\"\r\n        \"$39,$38,$37,$36,$35,$34,$33,$32,$31,$30,\"\r\n        \"$29,$28,$27,$26,$25,$24,$23,$22,$21,$20,\"\r\n        \"$19,$18,$17,$16,$15,$14,$13,$12,$11,$10,\"\r\n        \"$9,$8,$7,$6,$5,$4,$3,$2,$1,\",\r\n        // flags\r\n        format_default,\r\n        // expected\r\n        \"9801,9604,9409,9216,9025,8836,8649,8464,8281,8100,7921,\"\r\n        \"7744,7569,7396,7225,7056,6889,6724,6561,6400,6241,6084,\"\r\n        \"5929,5776,5625,5476,5329,5184,5041,4900,4761,4624,4489,\"\r\n        \"4356,4225,4096,3969,3844,3721,3600,3481,3364,3249,3136,\"\r\n        \"3025,2916,2809,2704,2601,2500,2401,2304,2209,2116,2025,\"\r\n        \"1936,1849,1764,1681,1600,1521,1444,1369,1296,1225,1156,\"\r\n        \"1089,1024,961,900,841,784,729,676,625,576,529,484,441,\"\r\n        \"400,361,324,289,256,225,196,169,144,121,100,81,64,49,\"\r\n        \"36,25,16,9,4,1,\");\r\n}\r\n\r\nvoid test_regex_should_throw_for_lookbehind() {\r\n    g_regexTester.should_throw(R\"((?<=abc))\", error_badrepeat);\r\n    g_regexTester.should_throw(R\"((?<!abc))\", error_badrepeat);\r\n}\r\n\r\nvoid test_regex_simple_loop_detection_enters_alternations_and_assertions() {\r\n    // Starting with test_VSO_167760_nested_quantifiers_should_not_infinite_loop above,\r\n    // which depends on _Simple_loop detection.\r\n\r\n    // If simple loop detection didn't enter both if branches, this would infinite loop:\r\n    g_regexTester.should_match(\"12345678923;phonecontext=IndiaDialPlan\",\r\n        // This branch doesn't match due to the x in the middle\r\n        R\"(1?([2-9]\\d\\d[2-9]\\d{6})x(\\s*\\S*)*)\"\r\n        \"|\"\r\n        // This branch will match\r\n        R\"(1?([2-9]\\d\\d[2-9]\\d{6})(\\s*\\S*)*)\");\r\n\r\n    // If simple loop detection doesn't enter assertions, the following would break\r\n    // for the same reason:\r\n    g_regexTester.should_match(\"12345678923;phonecontext=IndiaDialPlan\",\r\n        R\"(1(?=1?([2-9]\\d\\d[2-9]\\d{6})(\\s*\\S*)*)2345678923;phonecontext=IndiaDialPlan)\");\r\n    g_regexTester.should_not_match(\"12345678923;phonecontext=IndiaDialPlan\",\r\n        R\"(1(?!1?([2-9]\\d\\d[2-9]\\d{6})(\\s*\\S*)*)2345678923;phonecontext=IndiaDialPlan)\");\r\n}\r\n\r\nvoid test_VSO_159685_trailing_escape_should_throw_error_escape() {\r\n    g_regexTester.should_throw(R\"(\\)\", error_escape);\r\n    g_regexTester.should_throw(R\"([\\)\", error_escape);\r\n}\r\n\r\nvoid test_dev11_658169_regex_universe_character_classes_should_match_correctly() {\r\n    g_regexTester.should_not_match(\"X\", \"[]\");\r\n    g_regexTester.should_not_match(\"#\", \"[]\");\r\n    g_regexTester.should_not_match(\"\\n\", \"[]\");\r\n\r\n    g_regexTester.should_match(\"X\", \"[^]\");\r\n    g_regexTester.should_match(\"#\", \"[^]\");\r\n    g_regexTester.should_match(\"\\n\", \"[^]\");\r\n\r\n    g_regexTester.should_match(\"X\", R\"([\\w\\W])\");\r\n    g_regexTester.should_match(\"#\", R\"([\\w\\W])\");\r\n    g_regexTester.should_match(\"\\n\", R\"([\\w\\W])\");\r\n}\r\n\r\nvoid test_VSO_101318_ECMAScript_identity_escapes_should_be_lax() {\r\n    // Test the ambiguous cases that we now want to accept\r\n    g_regexTester.should_match(\"z\", \"\\\\z\");\r\n    g_regexTester.should_match(\"\\xB5\", \"\\\\\\xB5\"); // \\xB5 is the micro symbol in Latin-1\r\n    // ES6 explicitly says \"but not c\" so this should fail\r\n    g_regexTester.should_throw(\"\\\\c\", error_escape);\r\n    // Make sure w s and d still do what they're supposed to\r\n    g_regexTester.should_match(\"1\", \"\\\\d\");\r\n    g_regexTester.should_match(\"a\", \"\\\\D\");\r\n    g_regexTester.should_match(\" \", \"\\\\s\");\r\n    g_regexTester.should_match(\"a\", \"\\\\S\");\r\n    g_regexTester.should_match(\"a\", \"\\\\w\");\r\n    g_regexTester.should_match(\" \", \"\\\\W\");\r\n    // Make sure the SyntaxCharacter s are identity escapes\r\n    g_regexTester.should_match(\"^\", \"\\\\^\");\r\n    g_regexTester.should_match(\"$\", \"\\\\$\");\r\n    g_regexTester.should_match(R\"(\\)\", R\"(\\\\)\");\r\n    g_regexTester.should_match(\".\", \"\\\\.\");\r\n    g_regexTester.should_match(\"*\", \"\\\\*\");\r\n    g_regexTester.should_match(\"+\", \"\\\\+\");\r\n    g_regexTester.should_match(\"?\", \"\\\\?\");\r\n    g_regexTester.should_match(\"(\", \"\\\\(\");\r\n    g_regexTester.should_match(\")\", \"\\\\)\");\r\n    g_regexTester.should_match(\"[\", \"\\\\[\");\r\n    g_regexTester.should_match(\"]\", \"\\\\]\");\r\n    g_regexTester.should_match(\"{\", \"\\\\{\");\r\n    g_regexTester.should_match(\"}\", \"\\\\}\");\r\n    g_regexTester.should_match(\"|\", \"\\\\|\");\r\n    // / is explicitly called out as being allowed for Unicode IdentityEscape\r\n    g_regexTester.should_match(\"/\", \"\\\\/\");\r\n    // Make sure \"limited file escapes\" still operate\r\n    g_regexTester.should_match(\"\\f\", R\"(\\f)\");\r\n    g_regexTester.should_match(\"\\n\", R\"(\\n)\");\r\n    g_regexTester.should_match(\"\\r\", R\"(\\r)\");\r\n    g_regexTester.should_match(\"\\t\", R\"(\\t)\");\r\n    g_regexTester.should_match(\"\\v\", R\"(\\v)\");\r\n    // Make sure Unicode and hex escapes still are special\r\n    g_regexTester.should_throw(\"\\\\u\", error_escape);\r\n    g_regexTester.should_throw(\"\\\\x\", error_escape);\r\n}\r\n\r\nvoid test_VSO_208146_regex_should_special_case_optional_as_non_quantifier() {\r\n    // This tests that we can engage the \"simple loop\" optimization for a quantifier inside of a ?\r\n    // (before this change, the following match would have triggered a stack overflow)\r\n    // This example came from a customer\r\n    g_regexTester.should_match(\r\n        R\"(runLevel@Win32([],\"levels/WorkflowTests/TestLevel_Main\",\"TestLevel_Main\",True,True,False,False,False,False,)\"\r\n        R\"(True,False,True,False,False,False,False,False,False,False,True,False,True,False,False,False,False,False,-1,)\"\r\n        R\"(1052520,\"7155349B\",\"Globals/Sound/AudioSystem\",\"Sound/VoiceOverSystem\",\"\",\"\",\"\",\"\",ExecutionMode_GameView,P)\"\r\n        R\"(layAsMode_ClientAndServer,RunLevelConfigType_AutoAssign,Hardware_Autodetect,596,1742,[],\"\",\" \",False,False,)\"\r\n        R\"(\"\",False,00000000-0000-0000-0000-000000000000,\"\",\"\",\"\",3,1,\"Sequential\",30,True,1,1,\"png\",\"Single\",False,Tr)\"\r\n        R\"(ue,False,False,0,0,1,False,True,False,False,False,CllNone,0,0,0,0,False,False,False,0,\"\",1,False))\",\r\n        R\"((([^:]*):)?(.*?)(@(.*?))?(\\(.*\\))$)\");\r\n}\r\n\r\nvoid test_case_VSO_208146_regex_smoke_test_rewritten_zero_or_one_quantifier(const string& quantifier) {\r\n    const string ecmaPattern = \"before(x)\" + quantifier + \"?(x)\" + quantifier;\r\n    const regex ecma(ecmaPattern, ECMAScript);\r\n    cmatch results;\r\n    g_regexTester.verify(regex_match(\"before\", results, ecma));\r\n    g_regexTester.verify(results[0] == \"before\");\r\n    g_regexTester.verify(!results[1].matched);\r\n    g_regexTester.verify(!results[2].matched);\r\n    g_regexTester.verify(results.size() == 3);\r\n    g_regexTester.verify(regex_match(\"beforex\", results, ecma));\r\n    g_regexTester.verify(results[0] == \"beforex\");\r\n    g_regexTester.verify(!results[1].matched);\r\n    g_regexTester.verify(results[2] == \"x\");\r\n    g_regexTester.verify(results.size() == 3);\r\n    g_regexTester.verify(regex_match(\"beforexx\", results, ecma));\r\n    g_regexTester.verify(results[0] == \"beforexx\");\r\n    g_regexTester.verify(results[1] == \"x\");\r\n    g_regexTester.verify(results[2] == \"x\");\r\n    g_regexTester.verify(results.size() == 3);\r\n\r\n    const string erePattern = \"b\" + quantifier + \"(ba)*\";\r\n    const regex ere(erePattern, extended);\r\n    g_regexTester.verify(regex_search(\"\", results, ere));\r\n    g_regexTester.verify(results[0].matched);\r\n    g_regexTester.verify(results[0] == \"\");\r\n    g_regexTester.verify(!results[1].matched);\r\n    g_regexTester.verify(results.size() == 2);\r\n    g_regexTester.verify(regex_search(\"b\", results, ere));\r\n    g_regexTester.verify(results[0] == \"b\");\r\n    g_regexTester.verify(!results[1].matched);\r\n    g_regexTester.verify(results.size() == 2);\r\n    // Note that in the following ? must give up its match in order for the overall match to be longest\r\n    // (ECMA would match only \"b\")\r\n    g_regexTester.verify(regex_search(\"baba\", results, ere));\r\n    g_regexTester.verify(results[0] == \"baba\");\r\n    g_regexTester.verify(results[1] == \"ba\");\r\n    g_regexTester.verify(results.size() == 2);\r\n}\r\n\r\nvoid test_VSO_208146_regex_smoke_test_rewritten_op_question() {\r\n    test_case_VSO_208146_regex_smoke_test_rewritten_zero_or_one_quantifier(\"?\");\r\n}\r\n\r\nvoid test_VSO_208146_regex_smoke_test_rewritten_explicit_quantifier() {\r\n    test_case_VSO_208146_regex_smoke_test_rewritten_zero_or_one_quantifier(\"{0,1}\");\r\n}\r\n\r\nvoid test_VSO_225160_match_bol_flag() {\r\n    // After implementation of LWG-2503/GH-73: These tests make sure that\r\n    // we consistently implement the \"multiline\" option for ECMAScript\r\n    // (whether the ECMAScript flag is included or not)\r\n    for (syntax_option_type syntax : {multiline, ECMAScript | multiline}) {\r\n        for (string line_terminator : {\"\\n\", \"\\r\"}) {\r\n            const test_regex emptyAnchor(&g_regexTester, R\"(^)\", syntax);\r\n            emptyAnchor.should_search_match(\"\", \"\");\r\n            emptyAnchor.should_search_fail(\"\", match_not_bol);\r\n            emptyAnchor.should_search_match(line_terminator, \"\");\r\n            emptyAnchor.should_search_match(line_terminator, \"\", match_not_bol);\r\n\r\n            const test_regex beginCd(&g_regexTester, R\"(^cd)\", syntax);\r\n            beginCd.should_search_match(\"ab\" + line_terminator + \"cdefg\", \"cd\");\r\n            beginCd.should_search_match(\"ab\" + line_terminator + \"cdefg\", \"cd\", match_not_bol);\r\n\r\n            beginCd.should_search_match(\"cdefg\", \"cd\");\r\n            beginCd.should_search_fail(\"cdefg\", match_not_bol);\r\n            beginCd.should_search_match(line_terminator + \"cdefg\", \"cd\");\r\n            beginCd.should_search_match(line_terminator + \"cdefg\", \"cd\", match_not_bol);\r\n\r\n            beginCd.should_search_fail(\"ab\" + line_terminator + \"xcdefg\");\r\n            beginCd.should_search_fail(\"ab\" + line_terminator + \"xcdefg\", match_not_bol);\r\n        }\r\n\r\n        for (wstring line_terminator :\r\n            {L\"\\n\", L\"\\r\", L\"\\u2028\", L\"\\u2029\"}) { // U+2028 LINE SEPARATOR, U+2029 PARAGRAPH SEPARATOR\r\n            const test_wregex emptyAnchor(&g_regexTester, LR\"(^)\", syntax);\r\n            emptyAnchor.should_search_match(L\"\", L\"\");\r\n            emptyAnchor.should_search_fail(L\"\", match_not_bol);\r\n            emptyAnchor.should_search_match(line_terminator, L\"\");\r\n            emptyAnchor.should_search_match(line_terminator, L\"\", match_not_bol);\r\n\r\n            const test_wregex beginCd(&g_regexTester, LR\"(^cd)\", syntax);\r\n            beginCd.should_search_match(L\"ab\" + line_terminator + L\"cdefg\", L\"cd\");\r\n            beginCd.should_search_match(L\"ab\" + line_terminator + L\"cdefg\", L\"cd\", match_not_bol);\r\n\r\n            beginCd.should_search_match(L\"cdefg\", L\"cd\");\r\n            beginCd.should_search_fail(L\"cdefg\", match_not_bol);\r\n            beginCd.should_search_match(line_terminator + L\"cdefg\", L\"cd\");\r\n            beginCd.should_search_match(line_terminator + L\"cdefg\", L\"cd\", match_not_bol);\r\n\r\n            beginCd.should_search_fail(L\"ab\" + line_terminator + L\"xcdefg\");\r\n            beginCd.should_search_fail(L\"ab\" + line_terminator + L\"xcdefg\", match_not_bol);\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_VSO_225160_match_eol_flag() {\r\n    // Ditto multiline comment\r\n    for (syntax_option_type syntax : {multiline, ECMAScript | multiline}) {\r\n        for (string line_terminator : {\"\\n\", \"\\r\"}) {\r\n            const test_regex emptyAnchor(&g_regexTester, R\"($)\", syntax);\r\n            emptyAnchor.should_search_match(\"\", \"\");\r\n            emptyAnchor.should_search_fail(\"\", match_not_eol);\r\n            emptyAnchor.should_search_match(line_terminator, \"\");\r\n            emptyAnchor.should_search_match(line_terminator, \"\", match_not_eol);\r\n\r\n            const test_regex cdEnd(&g_regexTester, R\"(cd$)\", syntax);\r\n            cdEnd.should_search_match(\"abcd\" + line_terminator + \"efg\", \"cd\");\r\n            cdEnd.should_search_match(\"abcd\" + line_terminator + \"efg\", \"cd\", match_not_eol);\r\n\r\n            cdEnd.should_search_match(\"abcd\", \"cd\");\r\n            cdEnd.should_search_fail(\"abcd\", match_not_eol);\r\n            cdEnd.should_search_match(\"abcd\" + line_terminator, \"cd\");\r\n            cdEnd.should_search_match(\"abcd\" + line_terminator, \"cd\", match_not_eol);\r\n\r\n            cdEnd.should_search_fail(\"abcdx\" + line_terminator + \"efg\");\r\n            cdEnd.should_search_fail(\"abcdx\" + line_terminator + \"efg\", match_not_eol);\r\n        }\r\n\r\n        for (wstring line_terminator :\r\n            {L\"\\n\", L\"\\r\", L\"\\u2028\", L\"\\u2029\"}) { // U+2028 LINE SEPARATOR, U+2029 PARAGRAPH SEPARATOR\r\n            const test_wregex emptyAnchor(&g_regexTester, LR\"($)\", syntax);\r\n            emptyAnchor.should_search_match(L\"\", L\"\");\r\n            emptyAnchor.should_search_fail(L\"\", match_not_eol);\r\n            emptyAnchor.should_search_match(line_terminator, L\"\");\r\n            emptyAnchor.should_search_match(line_terminator, L\"\", match_not_eol);\r\n\r\n            const test_wregex cdEnd(&g_regexTester, LR\"(cd$)\", syntax);\r\n            cdEnd.should_search_match(L\"abcd\" + line_terminator + L\"efg\", L\"cd\");\r\n            cdEnd.should_search_match(L\"abcd\" + line_terminator + L\"efg\", L\"cd\", match_not_eol);\r\n\r\n            cdEnd.should_search_match(L\"abcd\", L\"cd\");\r\n            cdEnd.should_search_fail(L\"abcd\", match_not_eol);\r\n            cdEnd.should_search_match(L\"abcd\" + line_terminator, L\"cd\");\r\n            cdEnd.should_search_match(L\"abcd\" + line_terminator, L\"cd\", match_not_eol);\r\n\r\n            cdEnd.should_search_fail(L\"abcdx\" + line_terminator + L\"efg\");\r\n            cdEnd.should_search_fail(L\"abcdx\" + line_terminator + L\"efg\", match_not_eol);\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_VSO_226914_word_boundaries() {\r\n    const test_regex emptyAnchor(&g_regexTester, R\"(\\b)\");\r\n    emptyAnchor.should_search_fail(\"\");\r\n    emptyAnchor.should_search_fail(\"\", match_not_bow);\r\n    emptyAnchor.should_search_fail(\"\", match_not_eow);\r\n    emptyAnchor.should_search_fail(\"\", match_not_bow | match_not_eow);\r\n\r\n    const test_regex wordCd(&g_regexTester, R\"(\\bcd)\");\r\n    wordCd.should_search_match(\"cd\", \"cd\");\r\n    wordCd.should_search_fail(\"cd\", match_not_bow);\r\n    wordCd.should_search_match(\"cd\", \"cd\", match_not_eow);\r\n    wordCd.should_search_fail(\"cd\", match_not_bow | match_not_eow);\r\n    wordCd.should_search_match(\"#cd\", \"cd\");\r\n    wordCd.should_search_match(\"#cd\", \"cd\", match_not_bow);\r\n    wordCd.should_search_match(\"#cd\", \"cd\", match_not_eow);\r\n    wordCd.should_search_match(\"#cd\", \"cd\", match_not_bow | match_not_eow);\r\n\r\n    const test_regex cdWord(&g_regexTester, R\"(cd\\b)\");\r\n    cdWord.should_search_match(\"cd\", \"cd\");\r\n    cdWord.should_search_match(\"cd\", \"cd\", match_not_bow);\r\n    cdWord.should_search_fail(\"cd\", match_not_eow);\r\n    cdWord.should_search_fail(\"cd\", match_not_bow | match_not_eow);\r\n    cdWord.should_search_match(\"cd#\", \"cd\");\r\n    cdWord.should_search_match(\"cd#\", \"cd\", match_not_bow);\r\n    cdWord.should_search_match(\"cd#\", \"cd\", match_not_eow);\r\n    cdWord.should_search_match(\"cd#\", \"cd\", match_not_bow | match_not_eow);\r\n\r\n    const test_regex anyWordA(&g_regexTester, R\"(.\\ba)\");\r\n    anyWordA.should_search_match(\"#a\", \"#a\");\r\n    anyWordA.should_search_match(\"#a\", \"#a\", match_not_bow);\r\n    anyWordA.should_search_match(\"#a\", \"#a\", match_not_eow);\r\n    anyWordA.should_search_match(\"#a\", \"#a\", match_not_bow | match_not_eow);\r\n\r\n    anyWordA.should_search_fail(\"aa\");\r\n    anyWordA.should_search_fail(\"aa\", match_not_bow);\r\n    anyWordA.should_search_fail(\"aa\", match_not_eow);\r\n    anyWordA.should_search_fail(\"aa\", match_not_bow | match_not_eow);\r\n\r\n    const test_regex aWordAny(&g_regexTester, R\"(a\\b.)\");\r\n    aWordAny.should_search_match(\"a#\", \"a#\");\r\n    aWordAny.should_search_match(\"a#\", \"a#\", match_not_bow);\r\n    aWordAny.should_search_match(\"a#\", \"a#\", match_not_eow);\r\n    aWordAny.should_search_match(\"a#\", \"a#\", match_not_bow | match_not_eow);\r\n\r\n    aWordAny.should_search_fail(\"aa\");\r\n    aWordAny.should_search_fail(\"aa\", match_not_bow);\r\n    aWordAny.should_search_fail(\"aa\", match_not_eow);\r\n    aWordAny.should_search_fail(\"aa\", match_not_bow | match_not_eow);\r\n}\r\n\r\nvoid test_construction_from_nullptr_and_zero() {\r\n    {\r\n        regex re(nullptr, 0);\r\n        assert(re.mark_count() == 0);\r\n    }\r\n    {\r\n        wregex re(nullptr, 0);\r\n        assert(re.mark_count() == 0);\r\n    }\r\n}\r\n\r\nvoid test_gh_73() {\r\n    // GH-73: LWG-2503 multiline option should be added to syntax_option_type\r\n    for (syntax_option_type grammar : {basic, grep, extended, egrep, awk}) {\r\n        for (syntax_option_type multiline_mode : {syntax_option_type{}, multiline}) {\r\n            {\r\n                test_regex a_anchored_on_both_sides(&g_regexTester, \"^a$\", grammar | multiline_mode);\r\n                a_anchored_on_both_sides.should_search_match(\"a\", \"a\");\r\n                a_anchored_on_both_sides.should_search_fail(\"b\\na\");\r\n                a_anchored_on_both_sides.should_search_fail(\"a\\nb\");\r\n            }\r\n\r\n            {\r\n                test_regex a_anchored_front(&g_regexTester, \"^a\", grammar | multiline_mode);\r\n                a_anchored_front.should_search_match(\"a\", \"a\");\r\n                a_anchored_front.should_search_match(\"a\\n\", \"a\");\r\n                a_anchored_front.should_search_match(\"a\\nb\", \"a\");\r\n                a_anchored_front.should_search_fail(\"b\\na\");\r\n                a_anchored_front.should_search_fail(\"\\na\");\r\n            }\r\n\r\n            {\r\n                test_regex a_anchored_back(&g_regexTester, \"a$\", grammar | multiline_mode);\r\n                a_anchored_back.should_search_match(\"a\", \"a\");\r\n                a_anchored_back.should_search_match(\"\\na\", \"a\");\r\n                a_anchored_back.should_search_match(\"b\\na\", \"a\");\r\n                a_anchored_back.should_search_fail(\"a\\nb\");\r\n                a_anchored_back.should_search_fail(\"a\\n\");\r\n            }\r\n        }\r\n    }\r\n\r\n    for (syntax_option_type grammar : {syntax_option_type{}, ECMAScript}) {\r\n        {\r\n            test_regex a_anchored_on_both_sides(&g_regexTester, \"^a$\", grammar);\r\n            a_anchored_on_both_sides.should_search_match(\"a\", \"a\");\r\n            a_anchored_on_both_sides.should_search_fail(\"b\\na\");\r\n            a_anchored_on_both_sides.should_search_fail(\"a\\nb\");\r\n        }\r\n\r\n        {\r\n            test_regex a_anchored_front(&g_regexTester, \"^a\", grammar);\r\n            a_anchored_front.should_search_match(\"a\", \"a\");\r\n            a_anchored_front.should_search_match(\"a\\n\", \"a\");\r\n            a_anchored_front.should_search_match(\"a\\nb\", \"a\");\r\n            a_anchored_front.should_search_fail(\"b\\na\");\r\n            a_anchored_front.should_search_fail(\"\\na\");\r\n        }\r\n\r\n        {\r\n            test_regex a_anchored_back(&g_regexTester, \"a$\", grammar);\r\n            a_anchored_back.should_search_match(\"a\", \"a\");\r\n            a_anchored_back.should_search_match(\"\\na\", \"a\");\r\n            a_anchored_back.should_search_match(\"b\\na\", \"a\");\r\n            a_anchored_back.should_search_fail(\"a\\nb\");\r\n            a_anchored_back.should_search_fail(\"a\\n\");\r\n        }\r\n    }\r\n\r\n    for (syntax_option_type syntax : {multiline, ECMAScript | multiline}) {\r\n        {\r\n            test_regex a_anchored_on_both_sides(&g_regexTester, \"^a$\", syntax);\r\n            a_anchored_on_both_sides.should_search_match(\"a\", \"a\");\r\n            a_anchored_on_both_sides.should_search_match(\"b\\na\", \"a\");\r\n            a_anchored_on_both_sides.should_search_match(\"a\\nb\", \"a\");\r\n            a_anchored_on_both_sides.should_search_fail(\"a\\nb\", match_not_bol);\r\n            a_anchored_on_both_sides.should_search_fail(\"b\\na\", match_not_eol);\r\n        }\r\n\r\n        {\r\n            test_regex a_anchored_front(&g_regexTester, \"^a\", syntax);\r\n            a_anchored_front.should_search_match(\"a\", \"a\");\r\n            a_anchored_front.should_search_match(\"a\\n\", \"a\");\r\n            a_anchored_front.should_search_match(\"a\\nb\", \"a\");\r\n            a_anchored_front.should_search_match(\"b\\na\", \"a\");\r\n            a_anchored_front.should_search_match(\"\\na\", \"a\");\r\n            a_anchored_front.should_search_fail(\"a\", match_not_bol);\r\n            a_anchored_front.should_search_match(\"\\na\", \"a\", match_not_bol);\r\n            a_anchored_front.should_search_match(\"b\\na\", \"a\", match_not_bol);\r\n        }\r\n\r\n        {\r\n            test_regex a_anchored_back(&g_regexTester, \"a$\", syntax);\r\n            a_anchored_back.should_search_match(\"a\", \"a\");\r\n            a_anchored_back.should_search_match(\"\\na\", \"a\");\r\n            a_anchored_back.should_search_match(\"b\\na\", \"a\");\r\n            a_anchored_back.should_search_match(\"a\\nb\", \"a\");\r\n            a_anchored_back.should_search_match(\"a\\n\", \"a\");\r\n            a_anchored_back.should_search_fail(\"a\", match_not_eol);\r\n            a_anchored_back.should_search_match(\"a\\n\", \"a\", match_not_eol);\r\n            a_anchored_back.should_search_match(\"a\\nb\", \"a\", match_not_eol);\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_gh_731() {\r\n    // GH-731: <regex>: Incorrect behavior for capture groups\r\n    // GH-996: regex_search behaves incorrectly when the regex contains R\"(\\[)\"\r\n\r\n    // Several bugs were fixed in ECMAScript (depth-first) and POSIX (leftmost-longest) matching rules.\r\n    {\r\n        const test_regex ecma_regex(&g_regexTester, R\"((A+)\\s*(B+)?\\s*B*)\", ECMAScript);\r\n        ecma_regex.should_search_match_capture_groups(\"AAA BBB\", \"AAA BBB\", match_default, {{0, 3}, {4, 7}});\r\n    }\r\n    for (syntax_option_type option : {extended, egrep, awk}) {\r\n        const test_regex posix_regex(&g_regexTester, R\"((A+)[[:space:]]*(B+)?[[:space:]]*B*)\", option);\r\n        posix_regex.should_search_match_capture_groups(\"AAA BBB\", \"AAA BBB\", match_default, {{0, 3}, {4, 7}});\r\n    }\r\n\r\n    {\r\n        const test_regex ecma_regex(&g_regexTester, \".*(cat|concatenate)\", ECMAScript);\r\n        ecma_regex.should_search_match_capture_groups(\"WXconcatenateYZ\", \"WXconcat\", match_default, {{5, 8}});\r\n    }\r\n    for (syntax_option_type option : {extended, egrep, awk}) {\r\n        const test_regex posix_regex(&g_regexTester, \".*(cat|concatenate)\", option);\r\n        posix_regex.should_search_match_capture_groups(\"WXconcatenateYZ\", \"WXconcatenate\", match_default, {{2, 13}});\r\n    }\r\n\r\n    {\r\n        const test_regex ecma_regex(&g_regexTester, \"(aa|aabaac|ba|b|c)*\", ECMAScript);\r\n        ecma_regex.should_search_match_capture_groups(\"aabaac\", \"aaba\", match_default, {{2, 4}});\r\n    }\r\n    for (syntax_option_type option : {extended, egrep, awk}) {\r\n        const test_regex posix_regex(&g_regexTester, \"(aa|aabaac|ba|b|c)*\", option);\r\n        posix_regex.should_search_match_capture_groups(\"aabaac\", \"aabaac\", match_default, {{0, 6}});\r\n    }\r\n\r\n    {\r\n        const test_regex ecma_regex(&g_regexTester, \".*(a|bacc|baccc)\", ECMAScript);\r\n        ecma_regex.should_search_match_capture_groups(\"ddbacccd\", \"ddba\", match_default, {{3, 4}});\r\n    }\r\n    {\r\n        const test_regex ecma_regex(&g_regexTester, \".*?(a|bacc|baccc)\", ECMAScript);\r\n        ecma_regex.should_search_match_capture_groups(\"ddbacccd\", \"ddbacc\", match_default, {{2, 6}});\r\n    }\r\n    for (syntax_option_type option : {extended, egrep, awk}) {\r\n        const test_regex posix_regex(&g_regexTester, \".*(a|bacc|baccc)\", option);\r\n        posix_regex.should_search_match_capture_groups(\"ddbacccd\", \"ddbaccc\", match_default, {{2, 7}});\r\n    }\r\n\r\n    {\r\n        const test_regex ecma_regex(&g_regexTester, R\"(^[[:blank:]]*#([^\\n]*\\\\[[:space:]]+)*[^\\n]*)\", ECMAScript);\r\n        ecma_regex.should_search_match_capture_groups(\"#define some_symbol(x) \\\\  \\r\\n  cat();\\\\\\r\\n   printf(#x);\",\r\n            \"#define some_symbol(x) \\\\  \\r\\n  cat();\\\\\\r\\n   printf(#x);\", match_default, {{30, 42}});\r\n    }\r\n    {\r\n        const test_regex awk_regex(&g_regexTester, R\"(^[[:blank:]]*#([^\\n]*\\\\[[:space:]]+)*[^\\n]*)\", awk);\r\n        awk_regex.should_search_match_capture_groups(\"#define some_symbol(x) \\\\  \\r\\n  cat();\\\\\\r\\n   printf(#x);\",\r\n            \"#define some_symbol(x) \\\\  \\r\\n  cat();\\\\\\r\\n   printf(#x);\", match_default, {{28, 42}});\r\n    }\r\n    {\r\n        const test_regex extended_regex(&g_regexTester, \"^[[:blank:]]*#([^\\n]*\\\\\\\\[[:space:]]+)*[^\\n]*\", extended);\r\n        extended_regex.should_search_match_capture_groups(\"#define some_symbol(x) \\\\  \\r\\n  cat();\\\\\\r\\n   printf(#x);\",\r\n            \"#define some_symbol(x) \\\\  \\r\\n  cat();\\\\\\r\\n   printf(#x);\", match_default, {{28, 42}});\r\n    }\r\n\r\n    {\r\n        const test_regex ecma_regex(&g_regexTester, \"(ab*)*(ce|bbceef)\", ECMAScript);\r\n        ecma_regex.should_search_match_capture_groups(\"aababbbceef\", \"aababbbce\", match_default, {{3, 7}, {7, 9}});\r\n    }\r\n    for (syntax_option_type option : {extended, egrep, awk}) {\r\n        const test_regex posix_regex(&g_regexTester, \"(ab*)*(ce|bbceef)\", option);\r\n        posix_regex.should_search_match_capture_groups(\"aababbbceef\", \"aababbbceef\", match_default, {{3, 5}, {5, 11}});\r\n    }\r\n\r\n    {\r\n        // GH-996 test case\r\n        const test_regex ecma_regex(&g_regexTester, R\"( *((<<)|(\\[)|(.+)))\", ECMAScript);\r\n        ecma_regex.should_search_match_capture_groups(\r\n            \" [<</Category/Export>>]>>\", \" [\", match_default, {{1, 2}, {-1, -1}, {1, 2}, {-1, -1}});\r\n    }\r\n}\r\n\r\nvoid test_gh_992() {\r\n    // GH-992 <regex> mishandles locale-based character classes outside of the char range\r\n    {\r\n        const test_wregex neg_w_regex(&g_regexTester, LR\"(Y[\\W]*Z)\");\r\n        neg_w_regex.should_search_match(L\"xxxY      Zxxx\", L\"Y      Z\");\r\n        neg_w_regex.should_search_match(L\"xxxY  \\x2009   Zxxx\", L\"Y  \\x2009   Z\"); // U+2009 THIN SPACE\r\n        neg_w_regex.should_search_fail(L\"xxxY  \\x0078   Zxxx\"); // U+0078 LATIN SMALL LETTER X\r\n        neg_w_regex.should_search_fail(L\"xxxY  \\x03C7   Zxxx\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        neg_w_regex.should_search_fail(L\"xxxY  3   Zxxx\");\r\n        neg_w_regex.should_search_fail(L\"xxxY  \\x0662   Zxxx\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n    }\r\n    {\r\n        const test_wregex neg_s_regex(&g_regexTester, LR\"(Y[\\S]*Z)\");\r\n        neg_s_regex.should_search_match(L\"xxxYxx\\x0078xxxZxxx\", L\"Yxx\\x0078xxxZ\"); // U+0078 LATIN SMALL LETTER X\r\n        neg_s_regex.should_search_match(L\"xxxYxx\\x03C7xxxZxxx\", L\"Yxx\\x03C7xxxZ\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        neg_s_regex.should_search_match(L\"xxxYxx3xxxZxxx\", L\"Yxx3xxxZ\");\r\n        neg_s_regex.should_search_match(L\"xxxYxx\\x0662xxxZxxx\", L\"Yxx\\x0662xxxZ\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n        neg_s_regex.should_search_fail(L\"xxxYxx xxxZxxx\");\r\n        neg_s_regex.should_search_fail(L\"xxxYxx\\x2009xxxZxxx\"); // U+2009 THIN SPACE\r\n    }\r\n    for (const wstring& pattern : {LR\"(Y[\\D]*Z)\", LR\"(Y[\\W\\D]*Z)\"}) {\r\n        const test_wregex neg_d_regex(&g_regexTester, pattern);\r\n        neg_d_regex.should_search_match(L\"xxxYxx\\x0078xxxZxxx\", L\"Yxx\\x0078xxxZ\"); // U+0078 LATIN SMALL LETTER X\r\n        neg_d_regex.should_search_match(L\"xxxYxx\\x03C7xxxZxxx\", L\"Yxx\\x03C7xxxZ\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        neg_d_regex.should_search_match(L\"xxxYxx xxxZxxx\", L\"Yxx xxxZ\");\r\n        neg_d_regex.should_search_match(L\"xxxYxx\\x2009xxxZxxx\", L\"Yxx\\x2009xxxZ\"); // U+2009 THIN SPACE\r\n        neg_d_regex.should_search_fail(L\"xxxYxx3xxxZxxx\");\r\n        neg_d_regex.should_search_fail(L\"xxxYxx\\x0662xxxZxxx\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n    }\r\n    for (const wstring& pattern : {LR\"(Y[\\W\\S]*Z)\", LR\"(Y[\\S\\D]*Z)\", LR\"(Y[\\W\\S\\D]*Z)\"}) {\r\n        const test_wregex class_matches_all_regex(&g_regexTester, pattern);\r\n        class_matches_all_regex.should_search_match(\r\n            L\"xxxYxx\\x0078xxxZxxx\", L\"Yxx\\x0078xxxZ\"); // U+0078 LATIN SMALL LETTER X\r\n        class_matches_all_regex.should_search_match(\r\n            L\"xxxYxx\\x03C7xxxZxxx\", L\"Yxx\\x03C7xxxZ\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        class_matches_all_regex.should_search_match(L\"xxxYxx xxxZxxx\", L\"Yxx xxxZ\");\r\n        class_matches_all_regex.should_search_match(L\"xxxYxx\\x2009xxxZxxx\", L\"Yxx\\x2009xxxZ\"); // U+2009 THIN SPACE\r\n        class_matches_all_regex.should_search_match(L\"xxxYxx3xxxZxxx\", L\"Yxx3xxxZ\");\r\n        class_matches_all_regex.should_search_match(\r\n            L\"xxxYxx\\x0662xxxZxxx\", L\"Yxx\\x0662xxxZ\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n    }\r\n    {\r\n        const test_wregex neg_w_regex_skip(&g_regexTester, LR\"([\\W])\");\r\n        neg_w_regex_skip.should_search_match(L\"xxxx\\x2009xxxx\", L\"\\x2009\"); // U+2009 THIN SPACE\r\n        neg_w_regex_skip.should_search_fail(L\"xxxx\\x03C7xxxx\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        neg_w_regex_skip.should_search_fail(L\"xxxx\\x0662xxxx\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n    }\r\n    {\r\n        const test_wregex neg_s_regex_skip(&g_regexTester, LR\"([\\S])\");\r\n        neg_s_regex_skip.should_search_match(L\"  \\x03C7  \", L\"\\x03C7\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        neg_s_regex_skip.should_search_match(L\"  \\x0662  \", L\"\\x0662\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n        neg_s_regex_skip.should_search_fail(L\"  \\x2009  \"); // U+2009 THIN SPACE\r\n    }\r\n    {\r\n        const test_wregex neg_d_regex_skip(&g_regexTester, LR\"([\\D])\");\r\n        neg_d_regex_skip.should_search_match(L\"1623\\x03C7\"s + L\"253\", L\"\\x03C7\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        neg_d_regex_skip.should_search_match(L\"1623\\x2009\"s + L\"253\", L\"\\x2009\"); // U+2009 THIN SPACE\r\n        neg_d_regex_skip.should_search_fail(L\"1623\\x0662\"s + L\"253\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n    }\r\n    {\r\n        const test_wregex double_negative_w(&g_regexTester, LR\"([^\\W])\");\r\n        double_negative_w.should_search_match(L\"\\x03C7\", L\"\\x03C7\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        double_negative_w.should_search_match(L\"\\x0662\", L\"\\x0662\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n        double_negative_w.should_search_fail(L\"\\x2009\"); // U+2009 THIN SPACE\r\n    }\r\n    {\r\n        const test_wregex double_negative_s(&g_regexTester, LR\"([^\\S])\");\r\n        double_negative_s.should_search_fail(L\"\\x03C7\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        double_negative_s.should_search_fail(L\"\\x0662\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n        double_negative_s.should_search_match(L\"\\x2009\", L\"\\x2009\"); // U+2009 THIN SPACE\r\n    }\r\n    {\r\n        const test_wregex double_negative_d(&g_regexTester, LR\"([^\\D])\");\r\n        double_negative_d.should_search_fail(L\"\\x03C7\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        double_negative_d.should_search_match(L\"\\x0662\", L\"\\x0662\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n        double_negative_d.should_search_fail(L\"\\x2009\"); // U+2009 THIN SPACE\r\n    }\r\n    for (const wstring& pattern : {LR\"([\\w\\W])\", LR\"([\\s\\S])\", LR\"([\\d\\D])\"}) {\r\n        const test_wregex omni_regex(&g_regexTester, pattern);\r\n        omni_regex.should_search_match(L\"\\x03C7\", L\"\\x03C7\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        omni_regex.should_search_match(L\"\\x0662\", L\"\\x0662\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n        omni_regex.should_search_match(L\"\\x2009\", L\"\\x2009\"); // U+2009 THIN SPACE\r\n    }\r\n}\r\n\r\nvoid test_gh_993() {\r\n    // GH-993 regex::icase is not handled correctly for some input.\r\n    {\r\n        const wstring subject = L\" Copyright\";\r\n        const test_wregex case_regex(&g_regexTester, LR\"([a-z][a-z])\", ECMAScript);\r\n        const test_wregex icase_regex(&g_regexTester, LR\"([a-z][a-z])\", ECMAScript | icase);\r\n\r\n        case_regex.should_search_match(subject, L\"op\");\r\n        icase_regex.should_search_match(subject, L\"Co\");\r\n    }\r\n\r\n    {\r\n        const wstring subject = L\"blahZblah\";\r\n        const test_wregex Z_case_regex(&g_regexTester, LR\"([Z])\", ECMAScript);\r\n        const test_wregex Z_icase_regex(&g_regexTester, LR\"([Z])\", ECMAScript | icase);\r\n        const test_wregex z_case_regex(&g_regexTester, LR\"([z])\", ECMAScript);\r\n        const test_wregex z_icase_regex(&g_regexTester, LR\"([z])\", ECMAScript | icase);\r\n\r\n        Z_case_regex.should_search_match(subject, L\"Z\");\r\n        Z_icase_regex.should_search_match(subject, L\"Z\");\r\n        z_icase_regex.should_search_match(subject, L\"Z\");\r\n\r\n        z_case_regex.should_search_fail(subject);\r\n        z_case_regex.should_search_fail(subject, match_not_bow);\r\n        z_case_regex.should_search_fail(subject, match_not_eow);\r\n        z_case_regex.should_search_fail(subject, match_not_bow | match_not_eow);\r\n\r\n        const wstring lowercase_subject = L\"hungry_zombies\";\r\n        Z_case_regex.should_search_fail(lowercase_subject);\r\n        Z_icase_regex.should_search_match(lowercase_subject, L\"z\");\r\n        z_case_regex.should_search_match(lowercase_subject, L\"z\");\r\n        z_icase_regex.should_search_match(lowercase_subject, L\"z\");\r\n    }\r\n}\r\n\r\nvoid test_gh_997() {\r\n    // GH-997: <regex>: Grouping within repetition causes regex stack error\r\n    // GH-1528: <regex>: regex_match gets caught in recursive loop until stack overflow occurs\r\n    g_regexTester.should_match(string(2000, 'a'), \"(?:a)+\");\r\n    g_regexTester.should_match(string(2000, 'a'), \"(?:a|bc)+\");\r\n\r\n    {\r\n        test_wregex rgx(&g_regexTester, LR\"(^http[s]?://([^.]+\\.)*example\\.com/.*$)\", icase);\r\n\r\n        rgx.should_search_match(L\"https://www.example.com/meow\", L\"https://www.example.com/meow\");\r\n\r\n        rgx.should_search_fail(\r\n            L\"https://www.bogus.invalid/\"\r\n            L\"123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-\"\r\n            L\"123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-\"\r\n            L\"123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-\"\r\n            L\"123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-\"\r\n            L\"123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456.89-123456789-123456789.\"\r\n            L\"123456789-12345678.-123456789-123456789-1.3456789-123456789-123456789-123456789-123456789-123456789-\"\r\n            L\"123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-1234\");\r\n    }\r\n}\r\n\r\nvoid test_gh_4995() {\r\n    // GH-4995: R\"([\\d-e])\" should be rejected\r\n    g_regexTester.should_throw(R\"([\\d-e])\", error_range);\r\n    g_regexTester.should_throw(R\"([e-\\d])\", error_range);\r\n    g_regexTester.should_throw(R\"([\\w-\\d])\", error_range);\r\n    g_regexTester.should_throw(\"[[:digit:]-e]\", error_range);\r\n    g_regexTester.should_throw(\"[e-[:digit:]]\", error_range);\r\n    g_regexTester.should_throw(\"[[:alpha:]-[:digit:]]\", error_range);\r\n#ifndef _M_CEE_PURE\r\n    g_regexTester.should_throw(\"[[=a=]-e]\", error_range, ECMAScript | regex::collate);\r\n    g_regexTester.should_throw(\"[e-[=a=]]\", error_range, ECMAScript | regex::collate);\r\n    g_regexTester.should_throw(\"[[=a=]-[=b=]]\", error_range, ECMAScript | regex::collate);\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\n    // Test valid cases:\r\n    g_regexTester.should_not_match(\"b\", R\"([\\d-])\");\r\n    g_regexTester.should_match(\"5\", R\"([\\d-])\");\r\n    g_regexTester.should_match(\"-\", R\"([\\d-])\");\r\n\r\n    g_regexTester.should_not_match(\"b\", R\"([-\\d])\");\r\n    g_regexTester.should_match(\"5\", R\"([-\\d])\");\r\n    g_regexTester.should_match(\"-\", R\"([-\\d])\");\r\n\r\n    g_regexTester.should_match(\"b\", R\"([a-c\\d])\");\r\n    g_regexTester.should_match(\"5\", R\"([a-c\\d])\");\r\n    g_regexTester.should_not_match(\"-\", R\"([a-c\\d])\");\r\n\r\n    g_regexTester.should_match(\"b\", R\"([\\da-c])\");\r\n    g_regexTester.should_match(\"5\", R\"([\\da-c])\");\r\n    g_regexTester.should_not_match(\"-\", R\"([\\da-c])\");\r\n}\r\n\r\nvoid test_gh_5058() {\r\n    // GH-5058 \"<regex>: Small cleanups\" changed some default constructors to be defaulted.\r\n    // Verify that <regex> types are still const-default-constructible (N4993 [dcl.init.general]/8).\r\n    {\r\n        const regex r;\r\n        assert(!regex_match(\"cats\", r));\r\n    }\r\n    {\r\n        const csub_match csm;\r\n        assert(!csm.matched);\r\n        assert(csm.first == nullptr);\r\n        assert(csm.second == nullptr);\r\n    }\r\n    {\r\n        const ssub_match ssm;\r\n        assert(!ssm.matched);\r\n        assert(ssm.first == string::const_iterator{});\r\n        assert(ssm.second == string::const_iterator{});\r\n    }\r\n    {\r\n        const cmatch cmr;\r\n        assert(!cmr.ready());\r\n        assert(cmr.size() == 0);\r\n    }\r\n    {\r\n        const smatch smr;\r\n        assert(!smr.ready());\r\n        assert(smr.size() == 0);\r\n    }\r\n    {\r\n        const cregex_iterator cri;\r\n        assert(cri == cregex_iterator{});\r\n    }\r\n    {\r\n        const sregex_iterator sri;\r\n        assert(sri == sregex_iterator{});\r\n    }\r\n    {\r\n        const cregex_token_iterator crti;\r\n        assert(crti == cregex_token_iterator{});\r\n    }\r\n    {\r\n        const sregex_token_iterator srti;\r\n        assert(srti == sregex_token_iterator{});\r\n    }\r\n}\r\n\r\nvoid test_gh_5160() {\r\n    // GH-5160 fixed mishandled negated character class escapes\r\n    // outside character class definitions\r\n    {\r\n        const test_wregex neg_w_regex(&g_regexTester, LR\"(Y\\W*Z)\");\r\n        neg_w_regex.should_search_match(L\"xxxY      Zxxx\", L\"Y      Z\");\r\n        neg_w_regex.should_search_match(L\"xxxY  \\x2009   Zxxx\", L\"Y  \\x2009   Z\"); // U+2009 THIN SPACE\r\n        neg_w_regex.should_search_fail(L\"xxxY  \\x0078   Zxxx\"); // U+0078 LATIN SMALL LETTER X\r\n        neg_w_regex.should_search_fail(L\"xxxY  \\x03C7   Zxxx\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        neg_w_regex.should_search_fail(L\"xxxY  3   Zxxx\");\r\n        neg_w_regex.should_search_fail(L\"xxxY  \\x0662   Zxxx\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n    }\r\n    {\r\n        const test_wregex neg_s_regex(&g_regexTester, LR\"(Y\\S*Z)\");\r\n        neg_s_regex.should_search_match(L\"xxxYxx\\x0078xxxZxxx\", L\"Yxx\\x0078xxxZ\"); // U+0078 LATIN SMALL LETTER X\r\n        neg_s_regex.should_search_match(L\"xxxYxx\\x03C7xxxZxxx\", L\"Yxx\\x03C7xxxZ\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        neg_s_regex.should_search_match(L\"xxxYxx3xxxZxxx\", L\"Yxx3xxxZ\");\r\n        neg_s_regex.should_search_match(L\"xxxYxx\\x0662xxxZxxx\", L\"Yxx\\x0662xxxZ\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n        neg_s_regex.should_search_fail(L\"xxxYxx xxxZxxx\");\r\n        neg_s_regex.should_search_fail(L\"xxxYxx\\x2009xxxZxxx\"); // U+2009 THIN SPACE\r\n    }\r\n    {\r\n        const test_wregex neg_d_regex(&g_regexTester, LR\"(Y\\D*Z)\");\r\n        neg_d_regex.should_search_match(L\"xxxYxx\\x0078xxxZxxx\", L\"Yxx\\x0078xxxZ\"); // U+0078 LATIN SMALL LETTER X\r\n        neg_d_regex.should_search_match(L\"xxxYxx\\x03C7xxxZxxx\", L\"Yxx\\x03C7xxxZ\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        neg_d_regex.should_search_match(L\"xxxYxx xxxZxxx\", L\"Yxx xxxZ\");\r\n        neg_d_regex.should_search_match(L\"xxxYxx\\x2009xxxZxxx\", L\"Yxx\\x2009xxxZ\"); // U+2009 THIN SPACE\r\n        neg_d_regex.should_search_fail(L\"xxxYxx3xxxZxxx\");\r\n        neg_d_regex.should_search_fail(L\"xxxYxx\\x0662xxxZxxx\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n    }\r\n    {\r\n        const test_wregex neg_w_regex_skip(&g_regexTester, LR\"(\\W)\");\r\n        neg_w_regex_skip.should_search_match(L\"xxxx\\x2009xxxx\", L\"\\x2009\"); // U+2009 THIN SPACE\r\n        neg_w_regex_skip.should_search_fail(L\"xxxx\\x03C7xxxx\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        neg_w_regex_skip.should_search_fail(L\"xxxx\\x0662xxxx\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n    }\r\n    {\r\n        const test_wregex neg_s_regex_skip(&g_regexTester, LR\"(\\S)\");\r\n        neg_s_regex_skip.should_search_match(L\"  \\x03C7  \", L\"\\x03C7\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        neg_s_regex_skip.should_search_match(L\"  \\x0662  \", L\"\\x0662\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n        neg_s_regex_skip.should_search_fail(L\"  \\x2009  \"); // U+2009 THIN SPACE\r\n    }\r\n    {\r\n        const test_wregex neg_d_regex_skip(&g_regexTester, LR\"(\\D)\");\r\n        neg_d_regex_skip.should_search_match(L\"1623\\x03C7\"s + L\"253\", L\"\\x03C7\"); // U+03C7 GREEK SMALL LETTER CHI\r\n        neg_d_regex_skip.should_search_match(L\"1623\\x2009\"s + L\"253\", L\"\\x2009\"); // U+2009 THIN SPACE\r\n        neg_d_regex_skip.should_search_fail(L\"1623\\x0662\"s + L\"253\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n    }\r\n}\r\n\r\nvoid test_gh_5165_syntax_option(const syntax_option_type basic_or_grep) {\r\n    g_regexTester.should_not_match(\"yx\", \"y[^x]\", basic_or_grep);\r\n    g_regexTester.should_match(\"yz\", \"y[^x]\", basic_or_grep);\r\n    g_regexTester.should_match(\"y^\", \"y[^x]\", basic_or_grep);\r\n\r\n    g_regexTester.should_match(\"yx\", \"y[x^]\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"yz\", \"y[x^]\", basic_or_grep);\r\n    g_regexTester.should_match(\"y^\", \"y[x^]\", basic_or_grep);\r\n\r\n    g_regexTester.should_not_match(\"yx\", \"y[^x^]\", basic_or_grep);\r\n    g_regexTester.should_match(\"yz\", \"y[^x^]\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"y^\", \"y[^x^]\", basic_or_grep);\r\n\r\n    {\r\n        const test_regex no_anchor(&g_regexTester, \"meo[wW]\", basic_or_grep);\r\n        no_anchor.should_search_match(\"meow_machine\", \"meow\");\r\n        no_anchor.should_search_match(\"homeowner\", \"meow\");\r\n    }\r\n    {\r\n        const test_regex beginning_anchor(&g_regexTester, \"^meo[wW]\", basic_or_grep);\r\n        beginning_anchor.should_search_match(\"meow_machine\", \"meow\");\r\n        beginning_anchor.should_search_fail(\"homeowner\");\r\n    }\r\n    {\r\n        const test_regex middle_anchor(&g_regexTester, \"me^o[wW]\", basic_or_grep);\r\n        middle_anchor.should_search_fail(\"meow_machine\");\r\n        middle_anchor.should_search_fail(\"homeowner\");\r\n        middle_anchor.should_search_match(\"home^owner\", \"me^ow\");\r\n    }\r\n    {\r\n        const test_regex double_carets(&g_regexTester, \"^^meo[wW]\", basic_or_grep);\r\n        double_carets.should_search_fail(\"meow_machine\");\r\n        double_carets.should_search_fail(\"homeowner\");\r\n        double_carets.should_search_match(\"^meow_machine\", \"^meow\");\r\n        double_carets.should_search_fail(\"^^meow_machine\");\r\n        double_carets.should_search_fail(\"ho^meowner\");\r\n        double_carets.should_search_fail(\"ho^^meowner\");\r\n    }\r\n\r\n    g_regexTester.should_not_match(\"me^ow\", R\"(me\\(^o[wW]\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"meow\", R\"(me\\(^o[wW]\\))\", basic_or_grep);\r\n\r\n    {\r\n        const test_regex firstgroup_anchor(&g_regexTester, R\"(\\(^meo[wW]\\))\", basic_or_grep);\r\n        firstgroup_anchor.should_search_match(\"meow_machine\", \"meow\");\r\n        firstgroup_anchor.should_search_fail(\"^meow_machine\");\r\n        firstgroup_anchor.should_search_fail(\"homeowner\");\r\n        firstgroup_anchor.should_search_fail(\"ho^meowner\");\r\n    }\r\n    {\r\n        const test_regex prefixedgroup_anchor(&g_regexTester, R\"(.*\\(^meo[wW]\\))\", basic_or_grep);\r\n        prefixedgroup_anchor.should_search_match(\"meow_machine\", \"meow\");\r\n        prefixedgroup_anchor.should_search_fail(\"^meow_machine\");\r\n        prefixedgroup_anchor.should_search_fail(\"homeowner\");\r\n        prefixedgroup_anchor.should_search_fail(\"ho^meowner\");\r\n    }\r\n    {\r\n        const test_regex secondgroup_anchor(&g_regexTester, R\"(\\(.*\\)\\(^meo[wW]\\))\", basic_or_grep);\r\n        secondgroup_anchor.should_search_match(\"meow_machine\", \"meow\");\r\n        secondgroup_anchor.should_search_fail(\"^meow_machine\");\r\n        secondgroup_anchor.should_search_fail(\"homeowner\");\r\n        secondgroup_anchor.should_search_fail(\"ho^meowner\");\r\n    }\r\n    {\r\n        const test_regex nested_anchor(&g_regexTester, R\"(.*\\(^\\(^meo[wW]\\)\\))\", basic_or_grep);\r\n        nested_anchor.should_search_match(\"meow_machine\", \"meow\");\r\n        nested_anchor.should_search_fail(\"^meow_machine\");\r\n        nested_anchor.should_search_fail(\"^^meow_machine\");\r\n        nested_anchor.should_search_fail(\"homeowner\");\r\n        nested_anchor.should_search_fail(\"ho^meowner\");\r\n        nested_anchor.should_search_fail(\"ho^^meowner\");\r\n    }\r\n    {\r\n        const test_regex double_carets(&g_regexTester, R\"(.*\\(^^meo[wW]\\))\", basic_or_grep);\r\n        double_carets.should_search_fail(\"meow_machine\");\r\n        double_carets.should_search_match(\"^meow_machine\", \"^meow\");\r\n        double_carets.should_search_fail(\"^^meow_machine\");\r\n        double_carets.should_search_fail(\"homeowner\");\r\n        double_carets.should_search_fail(\"ho^meowner\");\r\n        double_carets.should_search_fail(\"ho^^meowner\");\r\n    }\r\n\r\n    // Validate correct handling of star at the\r\n    // beginning of an expression (with or without optional caret).\r\n    g_regexTester.should_match(\"*\", \"*\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"**\", \"*\", basic_or_grep);\r\n    g_regexTester.should_match(\"****\", \"**\", basic_or_grep);\r\n    g_regexTester.should_throw(\"***\", error_badrepeat, basic_or_grep);\r\n\r\n    g_regexTester.should_match(\"*\", \"^*\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"**\", \"^*\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"^*\", \"^*\", basic_or_grep);\r\n    g_regexTester.should_match(\"****\", \"^**\", basic_or_grep);\r\n    g_regexTester.should_throw(\"^***\", error_badrepeat, basic_or_grep);\r\n\r\n    g_regexTester.should_match(\"*aa\", \"*a*\", basic_or_grep);\r\n    g_regexTester.should_match(\"*a\", \"*a*\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"aa\", \"*a*\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"*a*\", \"*a*\", basic_or_grep);\r\n\r\n    g_regexTester.should_match(\"*aa\", \"^*a*\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"aa\", \"^*a*\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"*a*\", \"^*a*\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"^*a\", \"^*a*\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"^*aa\", \"^*a*\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"^*a*\", \"^*a*\", basic_or_grep);\r\n\r\n    g_regexTester.should_match(\"*\", R\"(\\(*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"**\", R\"(\\(*\\))\", basic_or_grep);\r\n    g_regexTester.should_match(\"****\", R\"(\\(**\\))\", basic_or_grep);\r\n    g_regexTester.should_throw(R\"(\\(***\\))\", error_badrepeat, basic_or_grep);\r\n\r\n    g_regexTester.should_match(\"*\", R\"(\\(^*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"**\", R\"(\\(^*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"^*\", R\"(\\(^*\\))\", basic_or_grep);\r\n    g_regexTester.should_match(\"***\", R\"(\\(^**\\))\", basic_or_grep);\r\n    g_regexTester.should_throw(R\"(\\(^***\\))\", error_badrepeat, basic_or_grep);\r\n\r\n    g_regexTester.should_match(\"*aa\", R\"(\\(*a*\\))\", basic_or_grep);\r\n    g_regexTester.should_match(\"*a\", R\"(\\(*a*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"aa\", R\"(\\(*a*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"*a*\", R\"(\\(*a*\\))\", basic_or_grep);\r\n\r\n    g_regexTester.should_match(\"*aa\", R\"(\\(^*a*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"aa\", R\"(\\(^*a*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"*a*\", R\"(\\(^*a*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"^*a\", R\"(\\(^*a*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"^*aa\", R\"(\\(^*a*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"^*a*\", R\"(\\(^*a*\\))\", basic_or_grep);\r\n\r\n    g_regexTester.should_match(\"*\", R\"(.*\\(^*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"**\", R\"(.*\\(^*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"^*\", R\"(.*\\(^*\\))\", basic_or_grep);\r\n    g_regexTester.should_match(\"***\", R\"(.*\\(^**\\))\", basic_or_grep);\r\n    g_regexTester.should_throw(R\"(.*\\(^***\\))\", error_badrepeat, basic_or_grep);\r\n\r\n    g_regexTester.should_match(\"*aa\", R\"(.*\\(^*a*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"aa\", R\"(.*\\(^*a*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"*a*\", R\"(.*\\(^*a*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"^*a\", R\"(.*\\(^*a*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"^*aa\", R\"(.*\\(^*a*\\))\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"^*a*\", R\"(.*\\(^*a*\\))\", basic_or_grep);\r\n\r\n    // Validate that there is no special behavior near bars,\r\n    // as they are alternation operators in regex modes other than basic or grep.\r\n    {\r\n        const test_regex middle_bar(&g_regexTester, \"^a|a\", basic_or_grep);\r\n        middle_bar.should_search_match(\"a|a\", \"a|a\");\r\n        middle_bar.should_search_fail(\"^a|a\");\r\n        middle_bar.should_search_fail(\"ba|a\");\r\n        middle_bar.should_search_fail(\"a\");\r\n    }\r\n    {\r\n        const test_regex group_middle_bar(&g_regexTester, R\"(^\\(a|a\\))\", basic_or_grep);\r\n        group_middle_bar.should_search_match(\"a|a\", \"a|a\");\r\n        group_middle_bar.should_search_fail(\"^a|a\");\r\n        group_middle_bar.should_search_fail(\"ba|a\");\r\n        group_middle_bar.should_search_fail(\"a\");\r\n    }\r\n    {\r\n        const test_regex middle_bar_with_caret(&g_regexTester, \"^a|^b\", basic_or_grep);\r\n        middle_bar_with_caret.should_search_match(\"a|^b\", \"a|^b\");\r\n        middle_bar_with_caret.should_search_fail(\"a|b\");\r\n        middle_bar_with_caret.should_search_fail(\"^a|^b\");\r\n        middle_bar_with_caret.should_search_fail(\"ca|^b\");\r\n        middle_bar_with_caret.should_search_fail(\"a\");\r\n        middle_bar_with_caret.should_search_fail(\"b\");\r\n    }\r\n    {\r\n        const test_regex group_middle_bar_with_caret(&g_regexTester, R\"(^\\(a|^b\\))\", basic_or_grep);\r\n        group_middle_bar_with_caret.should_search_match(\"a|^b\", \"a|^b\");\r\n        group_middle_bar_with_caret.should_search_fail(\"a|b\");\r\n        group_middle_bar_with_caret.should_search_fail(\"^a|^b\");\r\n        group_middle_bar_with_caret.should_search_fail(\"ca|^b\");\r\n        group_middle_bar_with_caret.should_search_fail(\"a\");\r\n        group_middle_bar_with_caret.should_search_fail(\"b\");\r\n    }\r\n\r\n    g_regexTester.should_match(\"ab\", \"a|*b\", basic_or_grep);\r\n    g_regexTester.should_match(\"a||b\", \"a|*b\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"a|*b\", \"a|*b\", basic_or_grep);\r\n    g_regexTester.should_throw(\"a|**b\", error_badrepeat, basic_or_grep);\r\n\r\n    g_regexTester.should_match(\"ab\", \"^a|*b\", basic_or_grep);\r\n    g_regexTester.should_match(\"a||b\", \"^a|*b\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"a|*b\", \"^a|*b\", basic_or_grep);\r\n    g_regexTester.should_throw(\"^a|**b\", error_badrepeat, basic_or_grep);\r\n\r\n    g_regexTester.should_match(\"a|b\", \"^a|^*b\", basic_or_grep);\r\n    g_regexTester.should_match(\"a|^^b\", \"^a|^*b\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"a|*b\", \"^a|^*b\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"a|^*b\", \"^a|^*b\", basic_or_grep);\r\n    g_regexTester.should_throw(\"^a|^**b\", error_badrepeat, basic_or_grep);\r\n}\r\n\r\nvoid test_gh_5165_basic() {\r\n    // test cases specific for basic regular expressions\r\n    {\r\n        const test_regex middle_nl(&g_regexTester, \"^a\\na\", basic);\r\n        middle_nl.should_search_match(\"a\\na\", \"a\\na\");\r\n        middle_nl.should_search_fail(\"^a\\na\");\r\n        middle_nl.should_search_fail(\"ba\\na\");\r\n        middle_nl.should_search_fail(\"a\");\r\n    }\r\n    {\r\n        const test_regex group_middle_nl(&g_regexTester, \"^\\\\(a\\na\\\\)\", basic);\r\n        group_middle_nl.should_search_match(\"a\\na\", \"a\\na\");\r\n        group_middle_nl.should_search_fail(\"^a\\na\");\r\n        group_middle_nl.should_search_fail(\"ba\\na\");\r\n        group_middle_nl.should_search_fail(\"a\");\r\n    }\r\n    {\r\n        const test_regex middle_nl_with_caret(&g_regexTester, \"^a\\n^b\", basic);\r\n        middle_nl_with_caret.should_search_match(\"a\\n^b\", \"a\\n^b\");\r\n        middle_nl_with_caret.should_search_fail(\"a\\nb\");\r\n        middle_nl_with_caret.should_search_fail(\"^a\\n^b\");\r\n        middle_nl_with_caret.should_search_fail(\"ca\\n^b\");\r\n        middle_nl_with_caret.should_search_fail(\"a\");\r\n        middle_nl_with_caret.should_search_fail(\"b\");\r\n    }\r\n    {\r\n        const test_regex group_middle_nl_with_caret(&g_regexTester, \"^\\\\(a\\n^b\\\\)\", basic);\r\n        group_middle_nl_with_caret.should_search_match(\"a\\n^b\", \"a\\n^b\");\r\n        group_middle_nl_with_caret.should_search_fail(\"a\\nb\");\r\n        group_middle_nl_with_caret.should_search_fail(\"^a\\n^b\");\r\n        group_middle_nl_with_caret.should_search_fail(\"ca\\n^b\");\r\n        group_middle_nl_with_caret.should_search_fail(\"a\");\r\n        group_middle_nl_with_caret.should_search_fail(\"b\");\r\n    }\r\n\r\n    g_regexTester.should_match(\"ab\", \"a\\n*b\", basic);\r\n    g_regexTester.should_match(\"a\\n\\nb\", \"a\\n*b\", basic);\r\n    g_regexTester.should_not_match(\"a\\n*b\", \"a\\n*b\", basic);\r\n    g_regexTester.should_match(\"a\\n\\nb\", \"^a\\n*b\", basic);\r\n    g_regexTester.should_throw(\"^a\\n**b\", error_badrepeat, basic);\r\n\r\n    g_regexTester.should_match(\"a\\nb\", \"^a\\n^*b\", basic);\r\n    g_regexTester.should_match(\"a\\n^^b\", \"^a\\n^*b\", basic);\r\n    g_regexTester.should_not_match(\"a\\n*b\", \"^a\\n^*b\", basic);\r\n    g_regexTester.should_not_match(\"a\\n^*b\", \"^a\\n^*b\", basic);\r\n    g_regexTester.should_throw(\"^a\\n^**b\", error_badrepeat, basic);\r\n}\r\n\r\nvoid test_gh_5165_grep() {\r\n    // test cases specific for grep mode\r\n    {\r\n        const test_regex middle_nl(&g_regexTester, \"^a\\na\", grep);\r\n        middle_nl.should_search_match(\"a\\na\", \"a\");\r\n        middle_nl.should_search_match(\"^a\\na\", \"a\");\r\n        middle_nl.should_search_match(\"ba\\na\", \"a\");\r\n        middle_nl.should_search_match(\"a\", \"a\");\r\n        middle_nl.should_search_fail(\"b\");\r\n    }\r\n    {\r\n        // This regular expression is not accepted by POSIX grep, but currently the regex parser does not reject it.\r\n        // If the parser is changed to reject it, adjust this test case.\r\n        const test_regex group_middle_nl(&g_regexTester, \"^\\\\(a\\na\\\\)\", grep);\r\n        group_middle_nl.should_search_match(\"a\\na\", \"a\\na\");\r\n        group_middle_nl.should_search_fail(\"^a\\na\");\r\n        group_middle_nl.should_search_fail(\"ba\\na\");\r\n        group_middle_nl.should_search_fail(\"a\");\r\n    }\r\n    {\r\n        const test_regex middle_nl_with_caret(&g_regexTester, \"^a\\n^b\", grep);\r\n        middle_nl_with_caret.should_search_match(\"a\\n^b\", \"a\");\r\n        middle_nl_with_caret.should_search_match(\"a\\nb\", \"a\");\r\n        middle_nl_with_caret.should_search_match(\"ab\", \"a\");\r\n        middle_nl_with_caret.should_search_match(\"a\", \"a\");\r\n        middle_nl_with_caret.should_search_match(\"b\", \"b\");\r\n        middle_nl_with_caret.should_search_match(\"ba\", \"b\");\r\n        middle_nl_with_caret.should_search_fail(\"^a\");\r\n        middle_nl_with_caret.should_search_fail(\"ca\");\r\n        middle_nl_with_caret.should_search_fail(\"^b\");\r\n        middle_nl_with_caret.should_search_fail(\"cb\");\r\n    }\r\n    {\r\n        // This regular expression is not accepted by POSIX grep, but currently the regex parser does not reject it.\r\n        // If the parser is changed to reject it, adjust this test case.\r\n        const test_regex group_middle_nl_with_caret(&g_regexTester, \"^\\\\(a\\n^b\\\\)\", grep);\r\n        group_middle_nl_with_caret.should_search_match(\"a\\n^b\", \"a\\n^b\");\r\n        group_middle_nl_with_caret.should_search_fail(\"a\\nb\");\r\n        group_middle_nl_with_caret.should_search_fail(\"^a\\n^b\");\r\n        group_middle_nl_with_caret.should_search_fail(\"ca\\n^b\");\r\n        group_middle_nl_with_caret.should_search_fail(\"a\");\r\n        group_middle_nl_with_caret.should_search_fail(\"b\");\r\n    }\r\n\r\n    g_regexTester.should_not_match(\"ab\", \"a\\n*b\", grep);\r\n    g_regexTester.should_not_match(\"a\\n\\nb\", \"a\\n*b\", grep);\r\n    g_regexTester.should_not_match(\"a\\n*b\", \"a\\n*b\", grep);\r\n    g_regexTester.should_match(\"a\", \"a\\n*b\", grep);\r\n    g_regexTester.should_match(\"*b\", \"a\\n*b\", grep);\r\n    g_regexTester.should_match(\"a\", \"a\\n**b\", grep);\r\n    g_regexTester.should_match(\"***b\", \"a\\n**b\", grep);\r\n\r\n    g_regexTester.should_not_match(\"ab\", \"^a\\n*b\", grep);\r\n    g_regexTester.should_not_match(\"a\\n\\nb\", \"^a\\n*b\", grep);\r\n    g_regexTester.should_not_match(\"a\\n*b\", \"^a\\n*b\", grep);\r\n    g_regexTester.should_match(\"a\", \"^a\\n*b\", grep);\r\n    g_regexTester.should_match(\"*b\", \"^a\\n*b\", grep);\r\n    g_regexTester.should_match(\"a\", \"^a\\n**b\", grep);\r\n    g_regexTester.should_match(\"****b\", \"^a\\n**b\", grep);\r\n\r\n    g_regexTester.should_not_match(\"a\\nb\", \"^a\\n^*b\", grep);\r\n    g_regexTester.should_not_match(\"a\\n^^b\", \"^a\\n^*b\", grep);\r\n    g_regexTester.should_not_match(\"a\\n*b\", \"^a\\n^*b\", grep);\r\n    g_regexTester.should_not_match(\"a\\n^*b\", \"^a\\n^*b\", grep);\r\n    g_regexTester.should_not_match(\"^*b\", \"^a\\n^*b\", grep);\r\n    g_regexTester.should_match(\"a\", \"^a\\n^*b\", grep);\r\n    g_regexTester.should_match(\"*b\", \"^a\\n^*b\", grep);\r\n    g_regexTester.should_not_match(\"**b\", \"^a\\n^*b\", grep);\r\n    g_regexTester.should_match(\"a\", \"^a\\n^**b\", grep);\r\n    g_regexTester.should_match(\"****b\", \"^a\\n^**b\", grep);\r\n}\r\n\r\nvoid test_gh_5165() {\r\n    // GH-5165: Revise caret parsing in basic and grep mode\r\n    test_gh_5165_syntax_option(basic);\r\n    test_gh_5165_syntax_option(grep);\r\n\r\n    test_gh_5165_basic();\r\n    test_gh_5165_grep();\r\n}\r\n\r\nvoid test_gh_5167() {\r\n    // GH-5167: Limit backreference parsing to single digit for basic regular expressions\r\n    g_regexTester.should_match(\"abab0\", R\"(\\(ab*\\)\\10)\", basic);\r\n    g_regexTester.should_match(\"abab0\", R\"(\\(ab*\\)\\10)\", grep);\r\n    g_regexTester.should_match(\"abbcdccdc5abb8\", R\"(\\(ab*\\)\\([cd]*\\)\\25\\18)\", basic);\r\n    g_regexTester.should_match(\"abbcdccdc5abb8\", R\"(\\(ab*\\)\\([cd]*\\)\\25\\18)\", grep);\r\n    g_regexTester.should_not_match(\"abbcdccdc5abb8\", R\"(\\(ab*\\)\\([cd]*\\)\\15\\28)\", basic);\r\n    g_regexTester.should_not_match(\"abbcdccdc5abb8\", R\"(\\(ab*\\)\\([cd]*\\)\\15\\28)\", grep);\r\n    g_regexTester.should_throw(R\"(abc\\1d)\", error_backref, basic);\r\n    g_regexTester.should_throw(R\"(abc\\1d)\", error_backref, grep);\r\n    g_regexTester.should_throw(R\"(abc\\10)\", error_backref, basic);\r\n    g_regexTester.should_throw(R\"(abc\\10)\", error_backref, grep);\r\n}\r\n\r\nvoid test_gh_5192() {\r\n    // GH-5192: Correct characters not matched by special character dot\r\n    for (const syntax_option_type option : {\r\n             regex_constants::basic,\r\n             regex_constants::extended,\r\n             regex_constants::awk,\r\n             regex_constants::grep,\r\n             regex_constants::egrep,\r\n         }) {\r\n        const test_regex caretDotStar(&g_regexTester, \"^.*\", option);\r\n        caretDotStar.should_search_match(\"abc\\nd\\re\\0f\"s, \"abc\\nd\\re\"s);\r\n        caretDotStar.should_search_match(\"abcd\\re\\ngh\\0i\"s, \"abcd\\re\\ngh\"s);\r\n\r\n        const test_wregex wCaretDotStar(&g_regexTester, L\"^.*\", option);\r\n        wCaretDotStar.should_search_match(L\"abc\\nd\\re\\0f\"s, L\"abc\\nd\\re\"s);\r\n        wCaretDotStar.should_search_match(L\"abcd\\re\\ngh\\0i\"s, L\"abcd\\re\\ngh\"s);\r\n        wCaretDotStar.should_search_match(L\"abc\\u2028d\\ne\\0f\"s, L\"abc\\u2028d\\ne\"s); // U+2028 LINE SEPARATOR\r\n        wCaretDotStar.should_search_match(L\"abc\\u2029d\\ne\\0f\"s, L\"abc\\u2029d\\ne\"s); // U+2029 PARAGRAPH SEPARATOR\r\n    }\r\n\r\n    for (const syntax_option_type option : {\r\n             regex_constants::ECMAScript,\r\n             syntax_option_type(),\r\n         }) {\r\n        const test_regex caretDotStar(&g_regexTester, \"^.*\", option);\r\n        caretDotStar.should_search_match(\"ab\\0c\\nd\\re\\0f\"s, \"ab\\0c\"s);\r\n        caretDotStar.should_search_match(\"ab\\0cd\\re\\ngh\\0i\"s, \"ab\\0cd\"s);\r\n\r\n        const test_wregex wCaretDotStar(&g_regexTester, L\"^.*\", option);\r\n        wCaretDotStar.should_search_match(L\"abc\\0\\nd\\re\\0f\"s, L\"abc\\0\"s);\r\n        wCaretDotStar.should_search_match(L\"ab\\0cd\\re\\ngh\\0i\"s, L\"ab\\0cd\"s);\r\n        wCaretDotStar.should_search_match(L\"ab\\0c\\u2028d\\ne\\0f\"s, L\"ab\\0c\"s); // U+2028 LINE SEPARATOR\r\n        wCaretDotStar.should_search_match(L\"a\\0bc\\u2029d\\ne\\0f\"s, L\"a\\0bc\"s); // U+2029 PARAGRAPH SEPARATOR\r\n    }\r\n}\r\n\r\nvoid test_gh_5214() {\r\n    // GH-5214 makes negated character class escapes not match characters not included in the negated character class\r\n    {\r\n        const test_wregex neg_word_regex(&g_regexTester, LR\"([\\W])\");\r\n        neg_word_regex.should_search_fail(L\"\\u0100\"); // U+0100 LATIN CAPITAL LETTER A WITH MACRON\r\n    }\r\n\r\n    {\r\n        const test_wregex neg_space_regex(&g_regexTester, LR\"([\\S])\");\r\n        neg_space_regex.should_search_fail(L\"\\u2028\"); // U+2028 LINE SEPARATOR\r\n    }\r\n\r\n    {\r\n        const test_wregex neg_digit_regex(&g_regexTester, LR\"([\\D])\");\r\n        neg_digit_regex.should_search_fail(L\"\\u0662\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n    }\r\n}\r\n\r\nvoid test_gh_5243() {\r\n    // GH-5243: <regex>: wregex with regular expression [\\w\\s] fails to match some spaces\r\n    for (wstring pattern : {LR\"([\\w])\", LR\"([\\w\\w])\"}) {\r\n        const test_wregex word_regex(&g_regexTester, pattern);\r\n        word_regex.should_search_match(L\"a\", L\"a\");\r\n        word_regex.should_search_match(L\"2\", L\"2\");\r\n        word_regex.should_search_match(L\"_\", L\"_\");\r\n        word_regex.should_search_match(L\"\\u00e4\", L\"\\u00e4\"); // U+00E4 LATIN SMALL LETTER A WITH DIAERESIS\r\n        word_regex.should_search_match(L\"\\u0662\", L\"\\u0662\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n        word_regex.should_search_fail(L\" \");\r\n        word_regex.should_search_fail(L\"\\u2028\"); // U+2028 LINE SEPARATOR\r\n        word_regex.should_search_fail(L\".\");\r\n        word_regex.should_search_fail(L\"-\");\r\n        word_regex.should_search_fail(L\"\\u203d\"); // U+203D INTERROBANG\r\n    }\r\n    {\r\n        const test_wregex space_regex(&g_regexTester, LR\"([\\s])\");\r\n        space_regex.should_search_fail(L\"a\");\r\n        space_regex.should_search_fail(L\"2\");\r\n        space_regex.should_search_fail(L\"_\");\r\n        space_regex.should_search_fail(L\"\\u00e4\"); // U+00E4 LATIN SMALL LETTER A WITH DIAERESIS\r\n        space_regex.should_search_fail(L\"\\u0662\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n        space_regex.should_search_match(L\" \", L\" \");\r\n        space_regex.should_search_match(L\"\\u2028\", L\"\\u2028\"); // U+2028 LINE SEPARATOR\r\n        space_regex.should_search_fail(L\".\");\r\n        space_regex.should_search_fail(L\"-\");\r\n        space_regex.should_search_fail(L\"\\u203d\"); // U+203D INTERROBANG\r\n    }\r\n    for (wstring pattern : {LR\"([\\w\\s])\", LR\"([\\s\\w])\"}) {\r\n        const test_wregex word_or_space_regex(&g_regexTester, pattern);\r\n        word_or_space_regex.should_search_match(L\"a\", L\"a\");\r\n        word_or_space_regex.should_search_match(L\"2\", L\"2\");\r\n        word_or_space_regex.should_search_match(L\"_\", L\"_\");\r\n        word_or_space_regex.should_search_match(L\"\\u00e4\", L\"\\u00e4\"); // U+00E4 LATIN SMALL LETTER A WITH DIAERESIS\r\n        word_or_space_regex.should_search_match(L\"\\u0662\", L\"\\u0662\"); // U+0662 ARABIC-INDIC DIGIT TWO\r\n        word_or_space_regex.should_search_match(L\" \", L\" \");\r\n        word_or_space_regex.should_search_match(L\"\\u2028\", L\"\\u2028\"); // U+2028 LINE SEPARATOR\r\n        word_or_space_regex.should_search_fail(L\".\");\r\n        word_or_space_regex.should_search_fail(L\"-\");\r\n        word_or_space_regex.should_search_fail(L\"\\u203d\"); // U+203D INTERROBANG\r\n    }\r\n}\r\n\r\n\r\nvoid test_gh_5245() {\r\n    // GH-5245: <regex>: Successful negative lookahead assertions\r\n    // sometimes mistakenly assign matches to capture groups\r\n    {\r\n        test_regex neg_assert(&g_regexTester, \"^(?!(a)b)..$\");\r\n        neg_assert.should_search_fail(\"ab\"); // rejected by the negative assertion\r\n        neg_assert.should_search_match_capture_groups(\"ac\", \"ac\", match_default, {{-1, -1}}); // test the fix\r\n        neg_assert.should_search_match_capture_groups(\"cb\", \"cb\", match_default, {{-1, -1}}); // never captures\r\n\r\n        // These 3-character and 4-character tests verify that after a lookahead assertion, we reset the position:\r\n        neg_assert.should_search_fail(\"abb\");\r\n        neg_assert.should_search_fail(\"acc\");\r\n        neg_assert.should_search_fail(\"cbb\");\r\n        neg_assert.should_search_fail(\"abab\");\r\n        neg_assert.should_search_fail(\"abcc\");\r\n        neg_assert.should_search_fail(\"accc\");\r\n    }\r\n\r\n    {\r\n        test_regex pos_assert(&g_regexTester, \"^(?=(a)b)..$\");\r\n        pos_assert.should_search_match_capture_groups(\"ab\", \"ab\", match_default, {{0, 1}}); // capture group retained\r\n        pos_assert.should_search_fail(\"ac\"); // rejected by the positive assertion midway through\r\n        pos_assert.should_search_fail(\"cb\"); // rejected by the positive assertion immediately\r\n\r\n        // These 3-character and 4-character tests verify that after a lookahead assertion, we reset the position:\r\n        pos_assert.should_search_fail(\"abb\");\r\n        pos_assert.should_search_fail(\"acc\");\r\n        pos_assert.should_search_fail(\"cbb\");\r\n        pos_assert.should_search_fail(\"abab\");\r\n        pos_assert.should_search_fail(\"abcc\");\r\n        pos_assert.should_search_fail(\"accc\");\r\n    }\r\n}\r\n\r\nvoid test_gh_5253() {\r\n    // GH-5253 cleaned up parsing logic for quantifiers that were applied to single characters\r\n    g_regexTester.should_match(\"abbb\", \"ab*\");\r\n    g_regexTester.should_not_match(\"abab\", \"ab*\");\r\n    g_regexTester.should_match(\"abbb\", \"(a)b*\");\r\n    g_regexTester.should_not_match(\"abab\", \"(a)b*\");\r\n    g_regexTester.should_match(\"abbb\", \"a(b)*\");\r\n    g_regexTester.should_not_match(\"abab\", \"a(b)*\");\r\n    g_regexTester.should_match(\"abbb\", \"(a)(b)*\");\r\n    g_regexTester.should_not_match(\"abab\", \"(a)(b)*\");\r\n    g_regexTester.should_not_match(\"abbb\", \"(ab)*\");\r\n    g_regexTester.should_match(\"abab\", \"(ab)*\");\r\n    g_regexTester.should_not_match(\"abbb\", \"(?:ab)*\");\r\n    g_regexTester.should_match(\"abab\", \"(?:ab)*\");\r\n    g_regexTester.should_match(\"aaaa\", \"a*\");\r\n    g_regexTester.should_not_match(\"b\", \"a*\");\r\n    g_regexTester.should_match(\"\", \"()*\");\r\n    g_regexTester.should_not_match(\"a\", \"()*\");\r\n}\r\n\r\nvoid test_gh_5362_syntax_option(const syntax_option_type basic_or_grep) {\r\n    {\r\n        const test_regex ending_anchor(&g_regexTester, \"meo[wW]$\", basic_or_grep);\r\n        ending_anchor.should_search_match(\"kitten_meow\", \"meow\");\r\n        ending_anchor.should_search_fail(\"homeowner\");\r\n    }\r\n    {\r\n        const test_regex middle_anchor(&g_regexTester, \"me$o[wW]\", basic_or_grep);\r\n        middle_anchor.should_search_fail(\"kitten_meow\");\r\n        middle_anchor.should_search_fail(\"homeowner\");\r\n        middle_anchor.should_search_match(\"home$owner\", \"me$ow\");\r\n    }\r\n    {\r\n        const test_regex double_dollars(&g_regexTester, \"meo[wW]$$\", basic_or_grep);\r\n        double_dollars.should_search_fail(\"kitten_meow\");\r\n        double_dollars.should_search_fail(\"homeowner\");\r\n        double_dollars.should_search_match(\"kitten_meow$\", \"meow$\");\r\n        double_dollars.should_search_fail(\"kitten_meow$$\");\r\n        double_dollars.should_search_fail(\"homeow$ner\");\r\n        double_dollars.should_search_fail(\"homeow$$ner\");\r\n    }\r\n\r\n    g_regexTester.should_not_match(\"me$ow\", R\"(\\(me$\\)o[wW])\", basic_or_grep);\r\n    g_regexTester.should_not_match(\"meow\", R\"(\\(me$\\)o[wW])\", basic_or_grep);\r\n\r\n    {\r\n        const test_regex singlegroup_anchor(&g_regexTester, R\"(\\(meo[wW]$\\))\", basic_or_grep);\r\n        singlegroup_anchor.should_search_match(\"kitten_meow\", \"meow\");\r\n        singlegroup_anchor.should_search_fail(\"kitten_meow$\");\r\n        singlegroup_anchor.should_search_fail(\"homeowner\");\r\n        singlegroup_anchor.should_search_fail(\"homeow$ner\");\r\n    }\r\n    {\r\n        const test_regex suffixedgroup_anchor(&g_regexTester, R\"(\\(meo[wW]$\\).*)\", basic_or_grep);\r\n        suffixedgroup_anchor.should_search_match(\"kitten_meow\", \"meow\");\r\n        suffixedgroup_anchor.should_search_fail(\"kitten_meow$\");\r\n        suffixedgroup_anchor.should_search_fail(\"homeowner\");\r\n        suffixedgroup_anchor.should_search_fail(\"homeow$ner\");\r\n    }\r\n    {\r\n        const test_regex firstgroup_anchor(&g_regexTester, R\"(\\(meo[wW]$\\)\\(.*\\))\", basic_or_grep);\r\n        firstgroup_anchor.should_search_match(\"kitten_meow\", \"meow\");\r\n        firstgroup_anchor.should_search_fail(\"kitten_meow$\");\r\n        firstgroup_anchor.should_search_fail(\"homeowner\");\r\n        firstgroup_anchor.should_search_fail(\"homeow$ner\");\r\n    }\r\n    {\r\n        const test_regex nested_anchor(&g_regexTester, R\"(\\(\\(meo[wW]$\\)$\\).*)\", basic_or_grep);\r\n        nested_anchor.should_search_match(\"kitten_meow\", \"meow\");\r\n        nested_anchor.should_search_fail(\"kitten_meow$\");\r\n        nested_anchor.should_search_fail(\"kitten_meow$$\");\r\n        nested_anchor.should_search_fail(\"homeowner\");\r\n        nested_anchor.should_search_fail(\"homeow$ner\");\r\n        nested_anchor.should_search_fail(\"homeow$$ner\");\r\n    }\r\n    {\r\n        const test_regex double_dollars(&g_regexTester, R\"(\\(meo[wW]$$\\).*)\", basic_or_grep);\r\n        double_dollars.should_search_fail(\"kitten_meow\");\r\n        double_dollars.should_search_match(\"kitten_meow$\", \"meow$\");\r\n        double_dollars.should_search_fail(\"kitten_meow$$\");\r\n        double_dollars.should_search_fail(\"homeowner\");\r\n        double_dollars.should_search_fail(\"homeow$ner\");\r\n        double_dollars.should_search_fail(\"homeow$$ner\");\r\n    }\r\n\r\n    // Validate that there is no special behavior near bars,\r\n    // as they are alternation operators in regex modes other than basic or grep.\r\n    {\r\n        const test_regex middle_bar(&g_regexTester, \"a|a$\", basic_or_grep);\r\n        middle_bar.should_search_match(\"a|a\", \"a|a\");\r\n        middle_bar.should_search_fail(\"a|a$\");\r\n        middle_bar.should_search_fail(\"a|ab\");\r\n        middle_bar.should_search_fail(\"a\");\r\n    }\r\n    {\r\n        const test_regex group_middle_bar(&g_regexTester, R\"(\\(a|a\\)$)\", basic_or_grep);\r\n        group_middle_bar.should_search_match(\"a|a\", \"a|a\");\r\n        group_middle_bar.should_search_fail(\"a|a$\");\r\n        group_middle_bar.should_search_fail(\"a|ab\");\r\n        group_middle_bar.should_search_fail(\"a\");\r\n    }\r\n    {\r\n        const test_regex middle_bar_with_dollar(&g_regexTester, \"a$|b$\", basic_or_grep);\r\n        middle_bar_with_dollar.should_search_match(\"a$|b\", \"a$|b\");\r\n        middle_bar_with_dollar.should_search_fail(\"a|b\");\r\n        middle_bar_with_dollar.should_search_fail(\"a$|b$\");\r\n        middle_bar_with_dollar.should_search_fail(\"a$|bc\");\r\n        middle_bar_with_dollar.should_search_fail(\"a\");\r\n        middle_bar_with_dollar.should_search_fail(\"b\");\r\n    }\r\n    {\r\n        const test_regex group_middle_bar_with_dollar(&g_regexTester, R\"(\\(a$|b\\)$)\", basic_or_grep);\r\n        group_middle_bar_with_dollar.should_search_match(\"a$|b\", \"a$|b\");\r\n        group_middle_bar_with_dollar.should_search_fail(\"a|b\");\r\n        group_middle_bar_with_dollar.should_search_fail(\"a$|b$\");\r\n        group_middle_bar_with_dollar.should_search_fail(\"a$|bc\");\r\n        group_middle_bar_with_dollar.should_search_fail(\"a\");\r\n        group_middle_bar_with_dollar.should_search_fail(\"b\");\r\n    }\r\n}\r\n\r\nvoid test_gh_5362_basic() {\r\n    // test cases specific for basic regular expressions\r\n    {\r\n        const test_regex middle_nl(&g_regexTester, \"a\\na$\", basic);\r\n        middle_nl.should_search_match(\"a\\na\", \"a\\na\");\r\n        middle_nl.should_search_fail(\"a\\na$\");\r\n        middle_nl.should_search_fail(\"a\\nab\");\r\n        middle_nl.should_search_fail(\"a\");\r\n    }\r\n    {\r\n        const test_regex group_middle_nl(&g_regexTester, \"\\\\(a\\na\\\\)$\", basic);\r\n        group_middle_nl.should_search_match(\"a\\na\", \"a\\na\");\r\n        group_middle_nl.should_search_fail(\"a\\na$\");\r\n        group_middle_nl.should_search_fail(\"a\\nab\");\r\n        group_middle_nl.should_search_fail(\"a\");\r\n    }\r\n    {\r\n        const test_regex middle_nl_with_dollar(&g_regexTester, \"a$\\nb$\", basic);\r\n        middle_nl_with_dollar.should_search_match(\"a$\\nb\", \"a$\\nb\");\r\n        middle_nl_with_dollar.should_search_fail(\"a\\nb\");\r\n        middle_nl_with_dollar.should_search_fail(\"a$\\nb$\");\r\n        middle_nl_with_dollar.should_search_fail(\"a$\\nbc\");\r\n        middle_nl_with_dollar.should_search_fail(\"a\");\r\n        middle_nl_with_dollar.should_search_fail(\"b\");\r\n    }\r\n    {\r\n        const test_regex group_middle_nl_with_dollar(&g_regexTester, \"\\\\(a$\\nb\\\\)$\", basic);\r\n        group_middle_nl_with_dollar.should_search_match(\"a$\\nb\", \"a$\\nb\");\r\n        group_middle_nl_with_dollar.should_search_fail(\"a\\nb\");\r\n        group_middle_nl_with_dollar.should_search_fail(\"a$\\nb$\");\r\n        group_middle_nl_with_dollar.should_search_fail(\"a$\\nbc\");\r\n        group_middle_nl_with_dollar.should_search_fail(\"a\");\r\n        group_middle_nl_with_dollar.should_search_fail(\"b\");\r\n    }\r\n}\r\n\r\nvoid test_gh_5362_grep() {\r\n    // test cases specific for grep mode\r\n    {\r\n        const test_regex middle_nl(&g_regexTester, \"a\\na$\", grep);\r\n        middle_nl.should_search_match(\"a\\na$\", \"a\");\r\n        middle_nl.should_search_match(\"a\\nab\", \"a\");\r\n        middle_nl.should_search_match(\"a\", \"a\");\r\n        middle_nl.should_search_fail(\"b\");\r\n    }\r\n    {\r\n        // This regular expression is not accepted by POSIX grep, but currently the regex parser does not reject it.\r\n        // If the parser is changed to reject it, adjust this test case.\r\n        const test_regex group_middle_nl(&g_regexTester, \"\\\\(a\\na\\\\)$\", grep);\r\n        group_middle_nl.should_search_match(\"a\\na\", \"a\\na\");\r\n        group_middle_nl.should_search_fail(\"a\\na$\");\r\n        group_middle_nl.should_search_fail(\"a\\nac\");\r\n        group_middle_nl.should_search_fail(\"a\");\r\n    }\r\n    {\r\n        const test_regex middle_nl_with_dollar(&g_regexTester, \"a$\\nb$\", grep);\r\n        middle_nl_with_dollar.should_search_match(\"a$\\nb\", \"b\");\r\n        middle_nl_with_dollar.should_search_match(\"a\\nb\", \"b\");\r\n        middle_nl_with_dollar.should_search_match(\"ba\", \"a\");\r\n        middle_nl_with_dollar.should_search_match(\"a\", \"a\");\r\n        middle_nl_with_dollar.should_search_match(\"b\", \"b\");\r\n        middle_nl_with_dollar.should_search_match(\"ab\", \"b\");\r\n        middle_nl_with_dollar.should_search_fail(\"a$\");\r\n        middle_nl_with_dollar.should_search_fail(\"ac\");\r\n        middle_nl_with_dollar.should_search_fail(\"b$\");\r\n        middle_nl_with_dollar.should_search_fail(\"bc\");\r\n    }\r\n    {\r\n        // This regular expression is not accepted by POSIX grep, but currently the regex parser does not reject it.\r\n        // If the parser is changed to reject it, adjust this test case.\r\n        const test_regex group_middle_nl_with_dollar(&g_regexTester, \"\\\\(a$\\nb\\\\)$\", grep);\r\n        group_middle_nl_with_dollar.should_search_match(\"a$\\nb\", \"a$\\nb\");\r\n        group_middle_nl_with_dollar.should_search_fail(\"a\\nb\");\r\n        group_middle_nl_with_dollar.should_search_fail(\"a$\\nb$\");\r\n        group_middle_nl_with_dollar.should_search_fail(\"a$\\nbc\");\r\n        group_middle_nl_with_dollar.should_search_fail(\"a\");\r\n        group_middle_nl_with_dollar.should_search_fail(\"b\");\r\n    }\r\n}\r\n\r\nvoid test_gh_5362() {\r\n    // GH-5362: `<regex>`: Properly parse dollar anchors in basic and grep mode\r\n    test_gh_5362_syntax_option(basic);\r\n    test_gh_5362_syntax_option(grep);\r\n\r\n    test_gh_5362_basic();\r\n    test_gh_5362_grep();\r\n}\r\n\r\nvoid test_gh_5364() {\r\n    // GH-5364 <regex>: Allow initial ] to start character ranges in POSIX regular expressions\r\n    for (syntax_option_type option : {basic, extended, awk, grep, egrep}) {\r\n        g_regexTester.should_match(\"]\", \"[]-_]\", option);\r\n        g_regexTester.should_match(\"^\", \"[]-_]\", option);\r\n        g_regexTester.should_match(\"_\", \"[]-_]\", option);\r\n        g_regexTester.should_not_match(\"-\", \"[]-_]\", option);\r\n\r\n        g_regexTester.should_not_match(\"]\", \"[^]-_]\", option);\r\n        g_regexTester.should_not_match(\"^\", \"[^]-_]\", option);\r\n        g_regexTester.should_not_match(\"_\", \"[^]-_]\", option);\r\n        g_regexTester.should_match(\"-\", \"[^]-_]\", option);\r\n\r\n        g_regexTester.should_match(\"]\", \"[]a]\", option);\r\n        g_regexTester.should_match(\"a\", \"[]a]\", option);\r\n        g_regexTester.should_not_match(\"_\", \"[]a]\", option);\r\n        g_regexTester.should_not_match(\"a]\", \"[]a]\", option);\r\n        g_regexTester.should_not_match(\"]a\", \"[]a]\", option);\r\n        g_regexTester.should_not_match(\"__\", \"[]a]\", option);\r\n\r\n        g_regexTester.should_not_match(\"]\", \"[^]a]\", option);\r\n        g_regexTester.should_not_match(\"a\", \"[^]a]\", option);\r\n        g_regexTester.should_match(\"_\", \"[^]a]\", option);\r\n        g_regexTester.should_not_match(\"a]\", \"[^]a]\", option);\r\n        g_regexTester.should_not_match(\"]a\", \"[^]a]\", option);\r\n        g_regexTester.should_not_match(\"__\", \"[^]a]\", option);\r\n\r\n        g_regexTester.should_throw(\"[]\", error_brack, option);\r\n        g_regexTester.should_throw(\"[^]\", error_brack, option);\r\n    }\r\n\r\n    g_regexTester.should_throw(\"[]-_]\", error_brack, ECMAScript);\r\n    g_regexTester.should_throw(\"[^]-_]\", error_brack, ECMAScript);\r\n    g_regexTester.should_throw(\"[]a]\", error_brack, ECMAScript);\r\n    g_regexTester.should_throw(\"[^]a]\", error_brack, ECMAScript);\r\n\r\n    g_regexTester.should_not_match(\"c\", \"[]\", ECMAScript);\r\n    g_regexTester.should_match(\"c\", \"[^]\", ECMAScript);\r\n}\r\n\r\nvoid test_gh_5365() {\r\n    // GH-5365: <regex>: Implementation divergence for capture group behavior:\r\n    // Capture groups were not correctly cleared at the beginning of repetitions in ECMAScript mode.\r\n    for (string pattern : {\"^(?:(a)|(b)|(c)|(d))+$\", \"^(?:(a)|(b)|(c)|(d))+?$\", \"^(?:(a)|(b)|(c)|(d)){4,}$\"}) {\r\n        test_regex captures_in_repeated_noncapturing_group(&g_regexTester, pattern);\r\n        captures_in_repeated_noncapturing_group.should_search_match_capture_groups(\r\n            \"acbd\", \"acbd\", match_default, {{-1, -1}, {-1, -1}, {-1, -1}, {3, 4}});\r\n        captures_in_repeated_noncapturing_group.should_search_match_capture_groups(\r\n            \"adcba\", \"adcba\", match_default, {{4, 5}, {-1, -1}, {-1, -1}, {-1, -1}});\r\n    }\r\n\r\n    {\r\n        test_regex captures_in_repeated_noncapturing_group(&g_regexTester, \"^(?:(a)|(b)|(c)|(d)){5}$\");\r\n        captures_in_repeated_noncapturing_group.should_search_fail(\"acbd\");\r\n        captures_in_repeated_noncapturing_group.should_search_match_capture_groups(\r\n            \"adcba\", \"adcba\", match_default, {{4, 5}, {-1, -1}, {-1, -1}, {-1, -1}});\r\n    }\r\n\r\n    {\r\n        test_regex captures_in_questionmark_quantifiers(&g_regexTester, \"(z)((a+)?(b+)?(c))*\");\r\n        captures_in_questionmark_quantifiers.should_search_match_capture_groups(\r\n            \"zaacbbbcac\", \"zaacbbbcac\", match_default, {{0, 1}, {8, 10}, {8, 9}, {-1, -1}, {9, 10}});\r\n        captures_in_questionmark_quantifiers.should_search_match_capture_groups(\r\n            \"zaacbbbcbbc\", \"zaacbbbcbbc\", match_default, {{0, 1}, {8, 11}, {-1, -1}, {8, 10}, {10, 11}});\r\n        captures_in_questionmark_quantifiers.should_search_match_capture_groups(\r\n            \"zaacbbbcabbc\", \"zaacbbbcabbc\", match_default, {{0, 1}, {8, 12}, {8, 9}, {9, 11}, {11, 12}});\r\n    }\r\n}\r\n\r\nvoid test_gh_5371() {\r\n    // GH-5371 <regex>: \\b and \\B are backwards on empty strings\r\n    g_regexTester.should_not_match(\"\", R\"(\\b)\");\r\n    g_regexTester.should_match(\"\", R\"(\\B)\");\r\n}\r\n\r\nvoid test_gh_5374() {\r\n    // GH-5374: <regex>: Back-references to unmatched capture groups\r\n    // should not match in POSIX basic regular expressions\r\n    for (syntax_option_type option : {basic, grep}) {\r\n        g_regexTester.should_not_match(\"\", R\"(\\(.\\)*\\1)\", option);\r\n        g_regexTester.should_match(\"\", R\"(\\(.*\\)\\1)\", option);\r\n        g_regexTester.should_not_match(\"bc\", R\"(\\(a\\)*b\\1c)\", option);\r\n        g_regexTester.should_match(\"bc\", R\"(\\(a*\\)b\\1c)\", option);\r\n    }\r\n\r\n    // ECMAScript's behavior is different:\r\n    g_regexTester.should_match(\"\", R\"((.)*\\1)\", ECMAScript);\r\n    g_regexTester.should_match(\"\", R\"((.*)\\1)\", ECMAScript);\r\n    g_regexTester.should_match(\"bc\", R\"((a)*b\\1c)\", ECMAScript);\r\n    g_regexTester.should_match(\"bc\", R\"((a*)b\\1c)\", ECMAScript);\r\n}\r\n\r\nvoid test_gh_5377() {\r\n    // GH-5377 <regex>: Do not reset matched capture groups in POSIX regexes\r\n    for (syntax_option_type option : {extended, awk, egrep}) {\r\n        test_regex abcd_regex(&g_regexTester, R\"(^((a)|(b)|(c)|(d))+$)\", option);\r\n        abcd_regex.should_search_match_capture_groups(\r\n            \"abcd\", \"abcd\", match_default, {{3, 4}, {0, 1}, {1, 2}, {2, 3}, {3, 4}});\r\n        abcd_regex.should_search_match_capture_groups(\r\n            \"acbd\", \"acbd\", match_default, {{3, 4}, {0, 1}, {2, 3}, {1, 2}, {3, 4}});\r\n        abcd_regex.should_search_match_capture_groups(\r\n            \"dcba\", \"dcba\", match_default, {{3, 4}, {3, 4}, {2, 3}, {1, 2}, {0, 1}});\r\n    }\r\n\r\n    for (syntax_option_type option : {basic, grep}) {\r\n        test_regex abcd_regex(&g_regexTester, R\"(^\\(\\(a\\)*\\(b\\)*\\(c\\)*\\(d\\)*\\)*$)\", option);\r\n        abcd_regex.should_search_match_capture_groups(\r\n            \"abcd\", \"abcd\", match_default, {{0, 4}, {0, 1}, {1, 2}, {2, 3}, {3, 4}});\r\n        abcd_regex.should_search_match_capture_groups(\r\n            \"acbd\", \"acbd\", match_default, {{2, 4}, {0, 1}, {2, 3}, {1, 2}, {3, 4}});\r\n        abcd_regex.should_search_match_capture_groups(\r\n            \"dcba\", \"dcba\", match_default, {{3, 4}, {3, 4}, {2, 3}, {1, 2}, {0, 1}});\r\n\r\n        test_regex backref_regex(&g_regexTester, R\"(^\\(\\(a\\)\\{0,1\\}\\(\\2b\\)\\{0,1\\}\\)*)\", option);\r\n        backref_regex.should_search_match_capture_groups(\"aaababb\", \"aaabab\", match_default, {{4, 6}, {1, 2}, {4, 6}});\r\n    }\r\n\r\n    {\r\n        // ECMAScript's behavior is different:\r\n        test_regex abcd_regex(&g_regexTester, R\"(^((a)|(b)|(c)|(d))+$)\", ECMAScript);\r\n        abcd_regex.should_search_match_capture_groups(\r\n            \"abcd\", \"abcd\", match_default, {{3, 4}, {-1, -1}, {-1, -1}, {-1, -1}, {3, 4}});\r\n        abcd_regex.should_search_match_capture_groups(\r\n            \"acbd\", \"acbd\", match_default, {{3, 4}, {-1, -1}, {-1, -1}, {-1, -1}, {3, 4}});\r\n        abcd_regex.should_search_match_capture_groups(\r\n            \"dcba\", \"dcba\", match_default, {{3, 4}, {3, 4}, {-1, -1}, {-1, -1}, {-1, -1}});\r\n\r\n        test_regex backref_regex(&g_regexTester, R\"(^((a){0,1}(\\2b){0,1})*)\", ECMAScript);\r\n        backref_regex.should_search_match_capture_groups(\r\n            \"aaababb\", \"aaababb\", match_default, {{6, 7}, {-1, -1}, {6, 7}});\r\n    }\r\n}\r\n\r\nvoid test_gh_5490() {\r\n    // GH-5490: Optional empty repetitions are illegal\r\n\r\n    // ECMA-262 15.10.2.5 \"Term\":\r\n    // \"If min is zero and y's endIndex is equal to x's endIndex, then return failure.\"\r\n    // So if no additional repetition is required due to minimum requirements, the match should be rejected.\r\n\r\n    // Similarly, POSIX 9.3.6 and 9.4.6 state that a null expression can only be matched if this is the only match or it\r\n    // is necessary to satisfy the minimum number of repetitions.\r\n    // Note the subtle difference that the empty match is allowed if it is the only match.\r\n    for (string pattern : {\"()*\", \"()?\", \"()*?\", \"()??\", \"(){0,}\", \"(){0,}?\", \"(){0,1}\", \"(){0,1}?\"}) {\r\n        test_regex quantified_empty_regex_ecma(&g_regexTester, pattern, ECMAScript);\r\n        quantified_empty_regex_ecma.should_search_match_capture_groups(\"\", \"\", match_default, {{-1, -1}});\r\n        quantified_empty_regex_ecma.should_search_match_capture_groups(\"b\", \"\", match_default, {{-1, -1}});\r\n\r\n        // empty groups are not allowed in EREs\r\n    }\r\n\r\n    for (string pattern : {\"()+\", \"()+?\", \"(){2,}?\", \"(){1}\"}) {\r\n        test_regex quantified_empty_regex_ecma(&g_regexTester, pattern, ECMAScript);\r\n        quantified_empty_regex_ecma.should_search_match_capture_groups(\"\", \"\", match_default, {{0, 0}});\r\n        quantified_empty_regex_ecma.should_search_match_capture_groups(\"b\", \"\", match_default, {{0, 0}});\r\n\r\n        // empty groups are not allowed in EREs\r\n    }\r\n\r\n    for (auto option : {basic, grep}) {\r\n        test_regex quantified_empty_regex_bre(&g_regexTester, R\"(\\(\\)*)\", option);\r\n        quantified_empty_regex_bre.should_search_match_capture_groups(\"\", \"\", match_default, {{0, 0}});\r\n        quantified_empty_regex_bre.should_search_match_capture_groups(\"b\", \"\", match_default, {{0, 0}});\r\n    }\r\n\r\n    for (auto option : {ECMAScript, extended, egrep, awk}) {\r\n        test_regex simple_sequence_regex_ecma_or_ere(&g_regexTester, \"(ab)*\", option);\r\n        simple_sequence_regex_ecma_or_ere.should_search_match_capture_groups(\"\", \"\", match_default, {{-1, -1}});\r\n        simple_sequence_regex_ecma_or_ere.should_search_match_capture_groups(\"b\", \"\", match_default, {{-1, -1}});\r\n        simple_sequence_regex_ecma_or_ere.should_search_match_capture_groups(\"ababcc\", \"abab\", match_default, {{2, 4}});\r\n    }\r\n\r\n    for (auto option : {basic, grep}) {\r\n        test_regex simple_sequence_regex_bre(&g_regexTester, R\"(\\(ab\\)*)\", option);\r\n        simple_sequence_regex_bre.should_search_match_capture_groups(\"\", \"\", match_default, {{-1, -1}});\r\n        simple_sequence_regex_bre.should_search_match_capture_groups(\"b\", \"\", match_default, {{-1, -1}});\r\n        simple_sequence_regex_bre.should_search_match_capture_groups(\"ababcc\", \"abab\", match_default, {{2, 4}});\r\n    }\r\n\r\n    for (string pattern : {\"(ab(?=ab))*\", \"(ab(?!cc))*\"}) {\r\n        test_regex nested_assertion_regex_ecma(&g_regexTester, pattern, ECMAScript);\r\n        nested_assertion_regex_ecma.should_search_match_capture_groups(\"\", \"\", match_default, {{-1, -1}});\r\n        nested_assertion_regex_ecma.should_search_match_capture_groups(\"b\", \"\", match_default, {{-1, -1}});\r\n        nested_assertion_regex_ecma.should_search_match_capture_groups(\"ababcc\", \"ab\", match_default, {{0, 2}});\r\n        nested_assertion_regex_ecma.should_search_match_capture_groups(\"abababcc\", \"abab\", match_default, {{2, 4}});\r\n    }\r\n\r\n    for (string pattern : {\"(a*)*\", \"(a?)*\", \"(a?)?\"}) {\r\n        test_regex nested_quantifier_regex_ecma(&g_regexTester, pattern, ECMAScript);\r\n        nested_quantifier_regex_ecma.should_search_match_capture_groups(\"\", \"\", match_default, {{-1, -1}});\r\n        nested_quantifier_regex_ecma.should_search_match_capture_groups(\"b\", \"\", match_default, {{-1, -1}});\r\n        nested_quantifier_regex_ecma.should_search_match_capture_groups(\"a\", \"a\", match_default, {{0, 1}});\r\n\r\n        for (auto option : {extended, egrep, awk}) {\r\n            test_regex nested_quantifier_regex_ere(&g_regexTester, pattern, option);\r\n            nested_quantifier_regex_ere.should_search_match_capture_groups(\"\", \"\", match_default, {{0, 0}});\r\n            nested_quantifier_regex_ere.should_search_match_capture_groups(\"b\", \"\", match_default, {{0, 0}});\r\n            nested_quantifier_regex_ere.should_search_match_capture_groups(\"a\", \"a\", match_default, {{0, 1}});\r\n        }\r\n    }\r\n\r\n    for (string pattern : {R\"(\\(a*\\)*)\", R\"(\\(a\\{0,1\\}\\)*)\", R\"(\\(a\\{0,1\\}\\)\\{0,1\\})\"}) {\r\n        for (auto option : {basic, grep}) {\r\n            test_regex nested_quantifier_regex_bre(&g_regexTester, pattern, option);\r\n            nested_quantifier_regex_bre.should_search_match_capture_groups(\"\", \"\", match_default, {{0, 0}});\r\n            nested_quantifier_regex_bre.should_search_match_capture_groups(\"b\", \"\", match_default, {{0, 0}});\r\n            nested_quantifier_regex_bre.should_search_match_capture_groups(\"a\", \"a\", match_default, {{0, 1}});\r\n        }\r\n    }\r\n\r\n    for (string pattern : {\"(a*)+\", \"(a?)+\"}) {\r\n        for (auto option : {ECMAScript, extended, egrep, awk}) {\r\n            test_regex plus_quantifier_regex_ecma_or_ere(&g_regexTester, pattern, option);\r\n            plus_quantifier_regex_ecma_or_ere.should_search_match_capture_groups(\"\", \"\", match_default, {{0, 0}});\r\n            plus_quantifier_regex_ecma_or_ere.should_search_match_capture_groups(\"b\", \"\", match_default, {{0, 0}});\r\n            plus_quantifier_regex_ecma_or_ere.should_search_match_capture_groups(\"a\", \"a\", match_default, {{0, 1}});\r\n        }\r\n    }\r\n\r\n    for (string pattern : {R\"(\\(a*\\)\\{1,\\})\", R\"(\\(a\\{0,1\\}\\)\\{1,\\})\"}) {\r\n        for (auto option : {basic, grep}) {\r\n            test_regex plus_quantifier_regex_bre(&g_regexTester, pattern, option);\r\n            plus_quantifier_regex_bre.should_search_match_capture_groups(\"\", \"\", match_default, {{0, 0}});\r\n            plus_quantifier_regex_bre.should_search_match_capture_groups(\"b\", \"\", match_default, {{0, 0}});\r\n            plus_quantifier_regex_bre.should_search_match_capture_groups(\"a\", \"a\", match_default, {{0, 1}});\r\n        }\r\n    }\r\n\r\n    for (string pattern : {\"(a*){1}\", \"(a?){1}\"}) {\r\n        for (auto option : {ECMAScript, extended, egrep, awk}) {\r\n            test_regex repeat_once_regex_ecma_or_ere(&g_regexTester, pattern, option);\r\n            repeat_once_regex_ecma_or_ere.should_search_match_capture_groups(\"\", \"\", match_default, {{0, 0}});\r\n            repeat_once_regex_ecma_or_ere.should_search_match_capture_groups(\"b\", \"\", match_default, {{0, 0}});\r\n            repeat_once_regex_ecma_or_ere.should_search_match_capture_groups(\"a\", \"a\", match_default, {{0, 1}});\r\n        }\r\n    }\r\n\r\n    for (string pattern : {R\"(\\(a*\\)\\{1\\})\", R\"(\\(a\\{0,1\\}\\)\\{1\\})\"}) {\r\n        for (auto option : {basic, grep}) {\r\n            test_regex repeat_once_regex_bre(&g_regexTester, pattern, option);\r\n            repeat_once_regex_bre.should_search_match_capture_groups(\"\", \"\", match_default, {{0, 0}});\r\n            repeat_once_regex_bre.should_search_match_capture_groups(\"b\", \"\", match_default, {{0, 0}});\r\n            // leftmost-longest rule according to Boost semantics\r\n            repeat_once_regex_bre.should_search_match_capture_groups(\"a\", \"a\", match_default, {{0, 1}});\r\n        }\r\n    }\r\n\r\n    for (string pattern : {\"(a*){2}\", \"(a?){2}\"}) {\r\n        test_regex repeat_twice_regex_ecma(&g_regexTester, pattern, ECMAScript);\r\n        repeat_twice_regex_ecma.should_search_match_capture_groups(\"\", \"\", match_default, {{0, 0}});\r\n        repeat_twice_regex_ecma.should_search_match_capture_groups(\"b\", \"\", match_default, {{0, 0}});\r\n        repeat_twice_regex_ecma.should_search_match_capture_groups(\"a\", \"a\", match_default, {{1, 1}});\r\n\r\n        for (auto option : {extended, egrep, awk}) {\r\n            test_regex repeat_twice_regex_ere(&g_regexTester, pattern, option);\r\n            repeat_twice_regex_ere.should_search_match_capture_groups(\"\", \"\", match_default, {{0, 0}});\r\n            repeat_twice_regex_ere.should_search_match_capture_groups(\"b\", \"\", match_default, {{0, 0}});\r\n            // leftmost-longest rule according to Boost semantics\r\n            repeat_twice_regex_ere.should_search_match_capture_groups(\"a\", \"a\", match_default, {{0, 1}});\r\n        }\r\n    }\r\n\r\n    for (string pattern : {R\"(\\(a*\\)\\{2\\})\", R\"(\\(a\\{0,1\\}\\)\\{2\\})\"}) {\r\n        for (auto option : {basic, grep}) {\r\n            test_regex repeat_twice_regex_bre(&g_regexTester, pattern, option);\r\n            repeat_twice_regex_bre.should_search_match_capture_groups(\"\", \"\", match_default, {{0, 0}});\r\n            repeat_twice_regex_bre.should_search_match_capture_groups(\"b\", \"\", match_default, {{0, 0}});\r\n            // leftmost-longest rule according to Boost semantics\r\n            repeat_twice_regex_bre.should_search_match_capture_groups(\"a\", \"a\", match_default, {{0, 1}});\r\n        }\r\n    }\r\n\r\n    for (string pattern : {\"(a?a?){2}\", \"(a?a?)+\"}) {\r\n        test_regex repeated_double_question_regex_ecma(&g_regexTester, pattern, ECMAScript);\r\n        repeated_double_question_regex_ecma.should_search_match_capture_groups(\"\", \"\", match_default, {{0, 0}});\r\n        repeated_double_question_regex_ecma.should_search_match_capture_groups(\"bbb\", \"\", match_default, {{0, 0}});\r\n        repeated_double_question_regex_ecma.should_search_match_capture_groups(\"aaa\", \"aaa\", match_default, {{2, 3}});\r\n\r\n        for (auto option : {extended, egrep, awk}) {\r\n            test_regex repeated_double_question_regex_ere(&g_regexTester, pattern, option);\r\n            repeated_double_question_regex_ere.should_search_match_capture_groups(\"\", \"\", match_default, {{0, 0}});\r\n            repeated_double_question_regex_ere.should_search_match_capture_groups(\"bbb\", \"\", match_default, {{0, 0}});\r\n            // leftmost-longest rule according to Boost semantics\r\n            repeated_double_question_regex_ere.should_search_match_capture_groups(\r\n                \"aaa\", \"aaa\", match_default, {{1, 3}});\r\n        }\r\n    }\r\n\r\n    for (string pattern : {R\"(\\(a\\{0,1\\}a\\{0,1\\}\\)\\{2\\})\", R\"(\\(a\\{0,1\\}a\\{0,1\\}\\)\\{1,\\})\"}) {\r\n        for (auto option : {basic, grep}) {\r\n            test_regex repeated_double_question_regex_bre(&g_regexTester, pattern, option);\r\n            repeated_double_question_regex_bre.should_search_match_capture_groups(\"\", \"\", match_default, {{0, 0}});\r\n            repeated_double_question_regex_bre.should_search_match_capture_groups(\"bbb\", \"\", match_default, {{0, 0}});\r\n            // leftmost-longest rule according to Boost semantics\r\n            repeated_double_question_regex_bre.should_search_match_capture_groups(\r\n                \"aaa\", \"aaa\", match_default, {{1, 3}});\r\n        }\r\n    }\r\n\r\n    {\r\n        test_regex backref_ecma(&g_regexTester, R\"(a(b?)+c\\1d)\", ECMAScript);\r\n        backref_ecma.should_search_fail(\"abcd\");\r\n        backref_ecma.should_search_match_capture_groups(\"acd\", \"acd\", match_default, {{1, 1}});\r\n        backref_ecma.should_search_match_capture_groups(\"abcbd\", \"abcbd\", match_default, {{1, 2}});\r\n    }\r\n\r\n    for (auto option : {basic, grep}) {\r\n        test_regex backref_bre(&g_regexTester, R\"(a\\(b\\{0,1\\}\\)\\{1,\\}c\\1d)\", option);\r\n        backref_bre.should_search_fail(\"abcd\");\r\n        backref_bre.should_search_match_capture_groups(\"acd\", \"acd\", match_default, {{1, 1}});\r\n        backref_bre.should_search_match_capture_groups(\"abcbd\", \"abcbd\", match_default, {{1, 2}});\r\n    }\r\n\r\n    {\r\n        test_regex backref_min_repeat_ecma(&g_regexTester, R\"((a?){3,4}b\\1c)\", ECMAScript);\r\n        backref_min_repeat_ecma.should_search_match_capture_groups(\"aabc\", \"aabc\", match_default, {{2, 2}});\r\n    }\r\n\r\n    for (auto option : {basic, grep}) {\r\n        test_regex backref_min_repeat_bre(&g_regexTester, R\"(\\(a\\{0,1\\}\\)\\{3,4\\}b\\1c)\", option);\r\n        backref_min_repeat_bre.should_search_match_capture_groups(\"aabc\", \"aabc\", match_default, {{2, 2}});\r\n    }\r\n}\r\n\r\nvoid test_gh_5509() {\r\n    // GH-5509 extended the matcher's skip optimization\r\n    // to regexes starting with a loop with at least one repetition,\r\n    // speeding up searches for such regexes\r\n\r\n    {\r\n        test_regex char_plus_regex(&g_regexTester, \"(a+)\");\r\n        char_plus_regex.should_search_match_capture_groups(\"blwerofaaweraf\", \"aa\", match_default, {{7, 9}});\r\n        char_plus_regex.should_search_fail(\"blwerofwerf\");\r\n    }\r\n\r\n    {\r\n        test_regex charclass_plus_regex(&g_regexTester, \"([fa]+)\");\r\n        charclass_plus_regex.should_search_match_capture_groups(\"blwerofaaweraf\", \"faa\", match_default, {{6, 9}});\r\n        charclass_plus_regex.should_search_fail(\"blwerower\");\r\n    }\r\n\r\n    {\r\n        test_regex string_plus_regex(&g_regexTester, \"((?:aw)+)\");\r\n        string_plus_regex.should_search_match_capture_groups(\"blwerofaawaweraf\", \"awaw\", match_default, {{8, 12}});\r\n        string_plus_regex.should_search_fail(\"blwerofaerwaf\");\r\n    }\r\n\r\n    {\r\n        test_regex anchored_string_plus_regex_multi(&g_regexTester, \"((?:^aw)+)\", multiline);\r\n        anchored_string_plus_regex_multi.should_search_match_capture_groups(\r\n            \"blwerofa\\nawaweraf\", \"aw\", match_default, {{9, 11}});\r\n        anchored_string_plus_regex_multi.should_search_fail(\"blwerof\\naerwaf\");\r\n    }\r\n\r\n    {\r\n        test_regex anchored_string_plus_regex(&g_regexTester, \"((?:^aw)+)\");\r\n        anchored_string_plus_regex.should_search_fail(\"blwerofa\\nawaweraf\");\r\n        anchored_string_plus_regex.should_search_fail(\"blwerof\\naerwaf\");\r\n    }\r\n\r\n    {\r\n        test_regex anchored_string_plus_regex_multi(&g_regexTester, \"((?:$\\naw)+)\", multiline);\r\n        anchored_string_plus_regex_multi.should_search_match_capture_groups(\r\n            \"blwerofa\\nawaweraf\", \"\\naw\", match_default, {{8, 11}});\r\n        anchored_string_plus_regex_multi.should_search_fail(\"blwerof\\naerwaf\");\r\n    }\r\n\r\n    {\r\n        test_regex anchored_string_plus_regex(&g_regexTester, \"((?:$\\naw)+)\");\r\n        anchored_string_plus_regex.should_search_fail(\"blwerofa\\nawaweraf\");\r\n        anchored_string_plus_regex.should_search_fail(\"blwerof\\naerwaf\");\r\n    }\r\n\r\n    {\r\n        test_regex string_star_string_regex(&g_regexTester, \"((?:aw)*fa)\");\r\n        string_star_string_regex.should_search_match_capture_groups(\r\n            \"blwerofaawawfaeraf\", \"fa\", match_default, {{6, 8}});\r\n        string_star_string_regex.should_search_match_capture_groups(\r\n            \"blweroawawfaeraf\", \"awawfa\", match_default, {{6, 12}});\r\n        string_star_string_regex.should_search_match(\"blwerofaerwaf\", \"fa\");\r\n        string_star_string_regex.should_search_fail(\"blweroerwaf\");\r\n    }\r\n}\r\n\r\nvoid test_gh_5576() {\r\n    // GH-5576 sped up searches for regexes that start with assertions\r\n    // by extending the skip heuristic in the matcher.\r\n    // We test here that the skip heuristic is correct\r\n    // for positive and negative lookahead assertions.\r\n    g_regexTester.should_replace_to(\"AbGweEfFllLLlffflElF\", \"(?=[[:lower:]][[:upper:]])[fFlL]{2}\", R\"(X$&)\",\r\n        match_default, \"AbGweEXfFlXlLLlffflEXlF\");\r\n    g_regexTester.should_replace_to(\"AbGweEfFllLLlffflElF\", \"(?![[:upper:]]|[[:lower:]]{2})[fFlL]{2}\", R\"(X$&)\",\r\n        match_default, \"AbGweEXfFlXlLLlffflEXlF\");\r\n}\r\n\r\nvoid test_gh_5672() {\r\n    // GH-5672: Speed up skip optimization for default `regex_traits` in `collate` mode\r\n    // The PR added a faster branch in the skip optimization when matching in collate mode\r\n    // for default `regex_traits<char>` and `regex_traits<wchar_t>`.\r\n    // The following tests check that searching still works correctly when the faster branch is engaged.\r\n    {\r\n        test_regex collating_re(&g_regexTester, \"g\", regex_constants::collate);\r\n\r\n        collating_re.should_search_match(\"abcdefghijklmnopqrstuvwxyz\", \"g\");\r\n        collating_re.should_search_fail(\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\");\r\n        collating_re.should_search_match(\"zyxwvutsrqponmlkjihgfedcba\", \"g\");\r\n        collating_re.should_search_fail(\"ZYXWVUTSRQPONMLKJIHGFEDCBA\");\r\n        collating_re.should_search_fail(\"zyxwvutsrqponmlkjihedcba\");\r\n    }\r\n\r\n    {\r\n        test_wregex collating_re(&g_regexTester, L\"g\", regex_constants::collate);\r\n\r\n        collating_re.should_search_match(L\"abcdefghijklmnopqrstuvwxyz\", L\"g\");\r\n        collating_re.should_search_fail(L\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\");\r\n        collating_re.should_search_match(L\"zyxwvutsrqponmlkjihgfedcba\", L\"g\");\r\n        collating_re.should_search_fail(L\"ZYXWVUTSRQPONMLKJIHGFEDCBA\");\r\n        collating_re.should_search_fail(L\"zyxwvutsrqponmlkjihedcba\");\r\n    }\r\n}\r\n\r\nvoid test_gh_5774() {\r\n    // GH-5774: Process non-greedy and longest-mode simple loops non-recursively.\r\n    // This extends our test coverage on non-greedy simple loops with bounded number of repetitions.\r\n    g_regexTester.should_not_match(\"\", \"a+?\");\r\n    g_regexTester.should_match(\"b\", \"a{0}?b\");\r\n    g_regexTester.should_not_match(\"ab\", \"a{0}?b\");\r\n    g_regexTester.should_match(\"ab\", \"a{0,1}?b\");\r\n    g_regexTester.should_not_match(\"aab\", \"a{0,1}?b\");\r\n    g_regexTester.should_match(\"aab\", \"a{0,2}?b\");\r\n    g_regexTester.should_match(\"aab\", \"a{1,2}?b\");\r\n    g_regexTester.should_not_match(\"aab\", \"a{1}?b\");\r\n    g_regexTester.should_not_match(\"aaab\", \"a{1,2}?b\");\r\n    g_regexTester.should_match(\"aaab\", \"a{1,3}?b\");\r\n}\r\n\r\nvoid test_gh_5790() {\r\n    // GH-5790: Process greedy simple loops non-recursively.\r\n    // This extends our test coverage on (mainly greedy) simple loops.\r\n    g_regexTester.should_not_match(\"\", \"a+\");\r\n    g_regexTester.should_match(\"b\", \"a{0}b\");\r\n    g_regexTester.should_not_match(\"ab\", \"a{0}b\");\r\n    g_regexTester.should_match(\"ab\", \"a{0,1}b\");\r\n    g_regexTester.should_not_match(\"aab\", \"a{0,1}b\");\r\n    g_regexTester.should_match(\"aab\", \"a{0,2}b\");\r\n    g_regexTester.should_match(\"aab\", \"a{1,2}b\");\r\n    g_regexTester.should_not_match(\"aab\", \"a{1}b\");\r\n    g_regexTester.should_not_match(\"aaab\", \"a{1,2}b\");\r\n    g_regexTester.should_match(\"aaab\", \"a{1,3}b\");\r\n\r\n    // Check that greedy and non-greedy search find the appropriate match.\r\n    // For the following regexes, greedy and leftmost-longest search yield the same matches.\r\n    for (syntax_option_type options : {ECMAScript, extended}) {\r\n        {\r\n            test_regex greedy_a_star(&g_regexTester, \"a*\", options);\r\n            greedy_a_star.should_search_match(\"aaaaaaaaaa\", \"aaaaaaaaaa\");\r\n        }\r\n\r\n        {\r\n            test_regex bounded_greedy_a_rep(&g_regexTester, \"a{5}\", options);\r\n            bounded_greedy_a_rep.should_search_match(\"aaaaaaaaaa\", \"aaaaa\");\r\n        }\r\n\r\n        {\r\n            test_regex upper_bounded_greedy_a_rep(&g_regexTester, \"a{0,5}\", options);\r\n            upper_bounded_greedy_a_rep.should_search_match(\"aaaaaaaaaa\", \"aaaaa\");\r\n        }\r\n\r\n        {\r\n            test_regex lower_bounded_greedy_a_rep(&g_regexTester, \"a{4,1000}\", options);\r\n            lower_bounded_greedy_a_rep.should_search_match(\"aaaaaaaaaa\", \"aaaaaaaaaa\");\r\n        }\r\n\r\n        {\r\n            test_regex lower_and_upper_bounded_greedy_a_rep(&g_regexTester, \"a{2,5}\", options);\r\n            lower_and_upper_bounded_greedy_a_rep.should_search_match(\"aaaaaaaaaa\", \"aaaaa\");\r\n        }\r\n\r\n        {\r\n            test_regex too_large_min_greedy_a_rep(&g_regexTester, \"a{11,1000}\", options);\r\n            too_large_min_greedy_a_rep.should_search_fail(\"aaaaaaaaaa\");\r\n        }\r\n    }\r\n\r\n    {\r\n        test_regex nongreedy_a_star(&g_regexTester, \"a*?\");\r\n        nongreedy_a_star.should_search_match(\"aaaaaaaaaa\", \"\");\r\n    }\r\n\r\n    {\r\n        test_regex bounded_nongreedy_a_rep(&g_regexTester, \"a{5}?\");\r\n        bounded_nongreedy_a_rep.should_search_match(\"aaaaaaaaaa\", \"aaaaa\");\r\n    }\r\n\r\n    {\r\n        test_regex upper_bounded_nongreedy_a_rep(&g_regexTester, \"a{0,5}?\");\r\n        upper_bounded_nongreedy_a_rep.should_search_match(\"aaaaaaaaaa\", \"\");\r\n    }\r\n\r\n    {\r\n        test_regex lower_bounded_nongreedy_a_rep(&g_regexTester, \"a{4,1000}?\");\r\n        lower_bounded_nongreedy_a_rep.should_search_match(\"aaaaaaaaaa\", \"aaaa\");\r\n    }\r\n\r\n    {\r\n        test_regex lower_and_upper_bounded_nongreedy_a_rep(&g_regexTester, \"a{2,5}?\");\r\n        lower_and_upper_bounded_nongreedy_a_rep.should_search_match(\"aaaaaaaaaa\", \"aa\");\r\n    }\r\n\r\n    {\r\n        test_regex too_large_min_nongreedy_a_rep(&g_regexTester, \"a{11,1000}?\");\r\n        too_large_min_nongreedy_a_rep.should_search_fail(\"aaaaaaaaaa\");\r\n    }\r\n}\r\n\r\nvoid test_gh_5792() {\r\n    // GH-5792: <regex>: regex_match() throws regex_error(error_stack)\r\n    // when a repeated pattern contains a lookahead assertion\r\n    g_regexTester.should_match(\"\", \"(?:(?=ab))*\");\r\n    g_regexTester.should_match(\"\", \"(?:(?!ab))*\");\r\n    g_regexTester.should_not_match(\"bc\", \"(?:(?=ab))+bc\");\r\n    g_regexTester.should_match(\"bc\", \"(?:(?!ab))+bc\");\r\n}\r\n\r\nvoid test_gh_5797() {\r\n    // GH-5797: <regex>: Loops with bounded number of repetitions and context-dependent empty alternative are mishandled\r\n    g_regexTester.should_match(\"bc\", \"(?:b|c|(?=bc)){3}\");\r\n    g_regexTester.should_match(\"bc\", \"(^|b|c){3}\");\r\n    g_regexTester.should_match(\"bc\", \"(^|b|c){3}\", regex_constants::extended);\r\n}\r\n\r\nvoid test_gh_5798() {\r\n    // GH-5798: <regex>: Process generic loops non-recursively.\r\n    // This extends our test coverage on non-simple loops,\r\n    // especially on bounds on the number of repetitions.\r\n    for (string quantifier_suffix : {\"\", \"?\"}) {\r\n        g_regexTester.should_not_match(\"\", \"(a|bc)+\" + quantifier_suffix);\r\n        g_regexTester.should_match(\"b\", \"(a|cd){0}?b\" + quantifier_suffix);\r\n        g_regexTester.should_not_match(\"ab\", \"(a|cd){0}?b\" + quantifier_suffix);\r\n        g_regexTester.should_match(\"ab\", \"(a|cd){0,1}?b\" + quantifier_suffix);\r\n        g_regexTester.should_not_match(\"aab\", \"(a|cd){0,1}?b\" + quantifier_suffix);\r\n        g_regexTester.should_match(\"acdb\", \"(a|cd){0,2}?b\" + quantifier_suffix);\r\n        g_regexTester.should_match(\"cdab\", \"(a|cd){1,2}?b\" + quantifier_suffix);\r\n        g_regexTester.should_not_match(\"acdb\", \"(a|cd){1}?b\" + quantifier_suffix);\r\n        g_regexTester.should_not_match(\"cdacdb\", \"(a|cd){1,2}?b\" + quantifier_suffix);\r\n        g_regexTester.should_match(\"cdacdb\", \"(a|cd){1,3}?b\" + quantifier_suffix);\r\n        g_regexTester.should_match(\"a\", \"(a|(?=^)){2}\" + quantifier_suffix);\r\n    }\r\n\r\n    // Check that greedy and non-greedy search find the appropriate match.\r\n    // For the following regexes, greedy and leftmost-longest search yield the same matches.\r\n    for (syntax_option_type options : {ECMAScript, extended}) {\r\n        {\r\n            test_regex greedy_a_or_bc_star(&g_regexTester, \"(a|bc)*\", options);\r\n            greedy_a_or_bc_star.should_search_match(\"aabcabcabcbcaa\", \"aabcabcabcbcaa\");\r\n        }\r\n\r\n        {\r\n            test_regex bounded_greedy_a_or_bc_rep(&g_regexTester, \"(a|bc){5}\", options);\r\n            bounded_greedy_a_or_bc_rep.should_search_match(\"aabcabcabcbcaa\", \"aabcabc\");\r\n        }\r\n\r\n        {\r\n            test_regex upper_bounded_greedy_a_or_bc_rep(&g_regexTester, \"(a|bc){0,5}\", options);\r\n            upper_bounded_greedy_a_or_bc_rep.should_search_match(\"aabcabcabcbcaa\", \"aabcabc\");\r\n        }\r\n\r\n        {\r\n            test_regex lower_bounded_greedy_a_or_bc_rep(&g_regexTester, \"(a|bc){4,1000}\", options);\r\n            lower_bounded_greedy_a_or_bc_rep.should_search_match(\"aabcabcabcbcaa\", \"aabcabcabcbcaa\");\r\n        }\r\n\r\n        {\r\n            test_regex lower_and_upper_bounded_greedy_a_or_bc_rep(&g_regexTester, \"(a|bc){2,5}\", options);\r\n            lower_and_upper_bounded_greedy_a_or_bc_rep.should_search_match(\"aabcabcabcbcaa\", \"aabcabc\");\r\n        }\r\n\r\n        {\r\n            test_regex too_large_min_greedy_a_or_bc_rep(&g_regexTester, \"(a|bc){11,1000}\", options);\r\n            too_large_min_greedy_a_or_bc_rep.should_search_fail(\"aabcabcabcbcaa\");\r\n        }\r\n    }\r\n\r\n    {\r\n        test_regex nongreedy_a_or_bc_star(&g_regexTester, \"(a|bc)*?\");\r\n        nongreedy_a_or_bc_star.should_search_match(\"aabcabcabcbcaa\", \"\");\r\n    }\r\n\r\n    {\r\n        test_regex bounded_nongreedy_a_or_bc_rep(&g_regexTester, \"(a|bc){5}?\");\r\n        bounded_nongreedy_a_or_bc_rep.should_search_match(\"aabcabcabcbcaa\", \"aabcabc\");\r\n    }\r\n\r\n    {\r\n        test_regex upper_bounded_nongreedy_a_or_bc_rep(&g_regexTester, \"(a|bc){0,5}?\");\r\n        upper_bounded_nongreedy_a_or_bc_rep.should_search_match(\"aabcabcabcbcaa\", \"\");\r\n    }\r\n\r\n    {\r\n        test_regex lower_bounded_nongreedy_a_or_bc_rep(&g_regexTester, \"(a|bc){4,1000}?\");\r\n        lower_bounded_nongreedy_a_or_bc_rep.should_search_match(\"aabcabcabcbcaa\", \"aabca\");\r\n    }\r\n\r\n    {\r\n        test_regex lower_and_upper_bounded_nongreedy_a_or_bc_rep(&g_regexTester, \"(a|bc){2,5}?\");\r\n        lower_and_upper_bounded_nongreedy_a_or_bc_rep.should_search_match(\"aabcabcabcbcaa\", \"aa\");\r\n    }\r\n\r\n    {\r\n        test_regex too_large_min_nongreedy_a_or_bc_rep(&g_regexTester, \"(a|bc){11,1000}?\");\r\n        too_large_min_nongreedy_a_or_bc_rep.should_search_fail(\"aabcabcabcbcaa\");\r\n    }\r\n}\r\n\r\nvoid test_gh_5865() {\r\n    // GH-5865: <regex>: Remove capture extent vectors from stack frames\r\n    // These tests check correct restoration of capturing groups\r\n    // when backtracking over positive lookahead assertions that matched successfully.\r\n    g_regexTester.should_capture(\"ab\", \"(?:(?=(.*))ab)*\", \"ab\");\r\n    g_regexTester.should_capture(\"abcd\", \"(?:(?=(.*))ab)*cd\", \"abcd\");\r\n    g_regexTester.should_capture(\"abab\", \"(?:(?=(.*))ab)*ab\", \"abab\");\r\n}\r\n\r\nvoid test_gh_5918() {\r\n    // GH-5918: Remove capture validity vectors from stack frames\r\n    // These tests verify that reset capturing groups are restored correctly when backtracking.\r\n    g_regexTester.should_match(\"ababa\", R\"((?:(a)(?:|b\\1b))*)\");\r\n    g_regexTester.should_match(\"ababa\", R\"((?:(a)(?:|b\\1b))*?)\");\r\n    g_regexTester.should_match(\"ababa\", R\"((?:(a)(?:|b\\1b)){2})\");\r\n}\r\n\r\nvoid test_gh_5939() {\r\n    // GH-5939: Avoid stack growth in simple loops\r\n    // This PR manipulates the stack while processing simple loops to avoid growing it.\r\n    // The following tests verify that backtracking from such loops still works\r\n    // and matches capturing groups even with these modifications to the stack.\r\n    g_regexTester.should_match(\"abcdd\", R\"(([abc])*?abcd\\1d)\");\r\n\r\n    g_regexTester.should_match(\"abb\", R\"((a)*ab\\1b)\");\r\n    g_regexTester.should_match(\"abb\", R\"((a){0,1}ab\\1b)\");\r\n    g_regexTester.should_not_match(\"abb\", R\"((a){1,1}ab\\1b)\");\r\n    g_regexTester.should_not_match(\"abb\", R\"((a){1,2}ab\\1b)\");\r\n    g_regexTester.should_match(\"aabab\", R\"((a){1,2}ab\\1b)\");\r\n    g_regexTester.should_match(\"abcdab\", R\"((?:([abc])([abc]))*cd\\1\\2)\");\r\n    g_regexTester.should_match(\"abcdab\", R\"((?:([abc])([abc])){0,1}cd\\1\\2)\");\r\n    g_regexTester.should_match(\"abbacdba\", R\"((?:([abc])([abc]))*cd\\1\\2)\");\r\n    g_regexTester.should_match(\"abbacdab\", R\"((?:([abc])([abc]))*bacd\\1\\2)\");\r\n    g_regexTester.should_match(\"abbacd\", R\"((?:([abc])([abc]))*abbacd\\1\\2)\");\r\n    g_regexTester.should_match(\"abbacdba\", R\"((?:([abc])([abc]))+cd\\1\\2)\");\r\n    g_regexTester.should_match(\"abbacdab\", R\"((?:([abc])([abc]))+bacd\\1\\2)\");\r\n    g_regexTester.should_match(\"abbacdab\", R\"((?:([abc])([abc])){0,2}bacd\\1\\2)\");\r\n    g_regexTester.should_match(\"abbacdab\", R\"((?:([abc])([abc])){1,2}bacd\\1\\2)\");\r\n    g_regexTester.should_not_match(\"abbacdab\", R\"((?:([abc])([abc]))+abbacd\\1\\2)\");\r\n    g_regexTester.should_match(\"abbacdba\", R\"((?:([abc])([abc])){2,}cd\\1\\2)\");\r\n    g_regexTester.should_not_match(\"abbacdab\", R\"((?:([abc])([abc])){2,}bacd\\1\\2)\");\r\n    g_regexTester.should_not_match(\"abbacdab\", R\"((?:([abc])([abc])){2,}abbacd\\1\\2)\");\r\n    g_regexTester.should_match(\"abcbbacdba\", R\"((?:([abc])([abc])){2,}cd\\1\\2)\");\r\n    g_regexTester.should_match(\"abcbbacdcb\", R\"((?:([abc])([abc])){2,}bacd\\1\\2)\");\r\n    g_regexTester.should_not_match(\"abcbbacdab\", R\"((?:([abc])([abc])){2,}abbacd\\1\\2)\");\r\n}\r\n\r\nvoid test_gh_5944() {\r\n    // GH-5944: <regex>: Revising the stack and complexity limits\r\n\r\n    // long strings should be matched successfully if the regex is simple\r\n    g_regexTester.should_match(string(20000000, 'a'), \"a+\");\r\n\r\n    // too much backtracking in complex regex expressions must result in a complexity exception\r\n    try {\r\n        regex re(\"a*[^b]*a*[^b]*a*[^b]*a*[^b]*a*[^b]*a*[^b]*\");\r\n        (void) regex_match(\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaab\", re);\r\n        assert(false);\r\n    } catch (const regex_error& ex) {\r\n        assert(ex.code() == error_complexity);\r\n    }\r\n}\r\n\r\nvoid test_gh_6022() {\r\n    // GH-6022: Optimize matching of branchless loops\r\n    g_regexTester.should_match(\"acddabb\", R\"((?:([ac])*d)*ab\\1b)\");\r\n    g_regexTester.should_match(\"acdaadabab\", R\"((?:([ac])*d)*ab\\1b)\");\r\n    g_regexTester.should_match(\"acddabcb\", R\"((?:([ac])*d)*dab\\1b)\");\r\n\r\n    g_regexTester.should_match(\"addabb\", R\"((?:(a){0,1}d)*ab\\1b)\");\r\n    g_regexTester.should_match(\"adadabab\", R\"((?:(a){0,1}d)*ab\\1b)\");\r\n    g_regexTester.should_match(\"adadabb\", R\"((?:(a){0,1}d)*adadab\\1b)\");\r\n    g_regexTester.should_not_match(\"adaddabab\", R\"((?:(a){0,1}d)*ab\\1b)\");\r\n    g_regexTester.should_not_match(\"dabb\", R\"((?:(a){1,1}d)+ab\\1b)\");\r\n    g_regexTester.should_not_match(\"addabb\", R\"((?:(a){1,2}d)+ab\\1b)\");\r\n    g_regexTester.should_not_match(\"adaadabb\", R\"((?:(a){1,2}d)+ab\\1b)\");\r\n\r\n    g_regexTester.should_match(\"bacabcdacdabbaddabbcdcdbc\", R\"((?:(?:([abc])([abc]))*d)+cd\\1\\2)\");\r\n    g_regexTester.should_not_match(\"bacabcdacdabbaddabbcdcdab\", R\"((?:(?:([abc])([abc]))*d)+dcd\\1\\2)\");\r\n    g_regexTester.should_not_match(\"bacabcdacdabbaddabbcdcdab\", R\"((?:(?:([abc])([abc]))*d)+bcdcd\\1\\2)\");\r\n    g_regexTester.should_match(\"bacabcdacdabbaddabbcdcd\", R\"((?:(?:([abc])([abc]))*d)*abbcdcd\\1\\2)\");\r\n    g_regexTester.should_match(\"bacabcdacdabbaddabbcdcdba\", R\"((?:(?:([abc])([abc]))*d)*dabbcdcd\\1\\2)\");\r\n    g_regexTester.should_not_match(\"bacabcdacdabbaddabbcdcdba\", R\"((?:(?:([abc])([abc]))*d)+ddabbcdcd\\1\\2)\");\r\n    g_regexTester.should_not_match(\"bacabcdacdabbaddabbcdcdab\", R\"((?:(?:([abc])([abc]))*d)+baddabbcdcd\\1\\2)\");\r\n    g_regexTester.should_match(\"bacabcdacdabbaddabbcdcdac\", R\"((?:(?:([abc])([abc]))*d)*abbaddabbcdcd\\1\\2)\");\r\n    g_regexTester.should_not_match(\"bacabcdacdabbaddabbcdcdac\", R\"((?:(?:([abc])([abc]))*d)*dabbaddabcdcd\\1\\2)\");\r\n    g_regexTester.should_match(\"bacabcdacdabbaddabbcdcdbc\", R\"((?:(?:([abc])([abc]))*d)*acdabbaddabbcdcd\\1\\2)\");\r\n    g_regexTester.should_not_match(\"bacabcdacdabbaddabbcdcdbc\", R\"((?:(?:([abc])([abc]))*d)*dacdabbaddabbcdcd\\1\\2)\");\r\n    g_regexTester.should_not_match(\"bacabcdacdabbaddabbcdcdca\", R\"((?:(?:([abc])([abc]))*d)*bcdacdabbaddabbcdcd\\1\\2)\");\r\n    g_regexTester.should_not_match(\r\n        \"bacabcdacdabbaddabbcdcdba\", R\"((?:(?:([abc])([abc]))*d)*cabcdacdabbaddabbcdcd\\1\\2)\");\r\n    g_regexTester.should_match(\"bacabcdacdabbaddabbcdcd\", R\"((?:(?:([abc])([abc]))*d)*bacabcdacdabbaddabbcdcd\\1\\2)\");\r\n\r\n    g_regexTester.should_match(\"abaaacaabaaaadab\", R\"((?:(a*)b(\\1*)a*c)+aabaaaad\\2b)\");\r\n}\r\n\r\nvoid test_gh_6118() {\r\n    // GH-6118: regex_search() sometimes incorrectly matches capturing groups\r\n    // regex_search() failed to reset capture groups between match attempts.\r\n    {\r\n        test_regex re_matching_inbetween(&g_regexTester, \"a|(b)c\");\r\n        re_matching_inbetween.should_search_match_capture_groups(\"ba\", \"a\", match_default, {{-1, -1}});\r\n    }\r\n\r\n    {\r\n        test_regex re_matching_at_end(&g_regexTester, \"$|(b)c\");\r\n        re_matching_at_end.should_search_match_capture_groups(\"b\", \"\", match_default, {{-1, -1}});\r\n    }\r\n}\r\n\r\nvoid test_gh_6147() {\r\n    // GH-6147: Implement small vector optimization for state frames\r\n    //\r\n    // This tests that the buffer doesn't contain uninitialized initial areas after several reallocations\r\n    // by forcing the creation of a sufficiently big vector followed by full backtracking.\r\n    g_regexTester.should_not_match(string(5000, 'a') + 'c', \"(a|b)*\");\r\n}\r\n\r\nint main() {\r\n    test_dev10_449367_case_insensitivity_should_work();\r\n    test_dev11_462743_regex_collate_should_not_disable_regex_icase();\r\n    test_dev10_448906_regex_infinite_loops_incorrect_results();\r\n    test_dev10_505773_regex_should_accept_empty_alternations();\r\n    test_dev11_821930_literal_dollar_replacement_characters();\r\n    test_dev10_514062_regex_should_throw_regex_error_rather_than_crash_for_bogus_character_classes();\r\n    test_dev10_767618_nested_quantifiers_should_match();\r\n    test_dev11_291918_more_nested_quantifiers_should_match();\r\n    test_VSO_167760_nested_quantifiers_should_not_infinite_loop();\r\n    test_DDB_153116_replacements();\r\n    test_DDB_169529_replacements();\r\n    test_dev11_900202_regex_should_accept_backreferences();\r\n    test_dev11_900202_regex_should_throw_for_self_referencing_backreferences();\r\n    test_dev10_897466_regex_should_support_more_than_31_capture_groups();\r\n    test_regex_should_throw_for_lookbehind();\r\n    test_regex_simple_loop_detection_enters_alternations_and_assertions();\r\n    test_VSO_159685_trailing_escape_should_throw_error_escape();\r\n    test_dev11_658169_regex_universe_character_classes_should_match_correctly();\r\n    test_VSO_101318_ECMAScript_identity_escapes_should_be_lax();\r\n    test_VSO_208146_regex_should_special_case_optional_as_non_quantifier();\r\n    test_VSO_208146_regex_smoke_test_rewritten_op_question();\r\n    test_VSO_208146_regex_smoke_test_rewritten_explicit_quantifier();\r\n    test_VSO_225160_match_bol_flag();\r\n    test_VSO_225160_match_eol_flag();\r\n    test_VSO_226914_word_boundaries();\r\n    test_construction_from_nullptr_and_zero();\r\n    test_gh_73();\r\n    test_gh_731();\r\n    test_gh_992();\r\n    test_gh_993();\r\n    test_gh_997();\r\n    test_gh_4995();\r\n    test_gh_5058();\r\n    test_gh_5160();\r\n    test_gh_5165();\r\n    test_gh_5167();\r\n    test_gh_5192();\r\n    test_gh_5214();\r\n    test_gh_5243();\r\n    test_gh_5245();\r\n    test_gh_5253();\r\n    test_gh_5362();\r\n    test_gh_5364();\r\n    test_gh_5365();\r\n    test_gh_5371();\r\n    test_gh_5374();\r\n    test_gh_5377();\r\n    test_gh_5490();\r\n    test_gh_5509();\r\n    test_gh_5576();\r\n    test_gh_5672();\r\n    test_gh_5774();\r\n    test_gh_5790();\r\n    test_gh_5792();\r\n    test_gh_5797();\r\n    test_gh_5798();\r\n    test_gh_5865();\r\n    test_gh_5918();\r\n    test_gh_5939();\r\n    test_gh_5944();\r\n    test_gh_6022();\r\n    test_gh_6118();\r\n    test_gh_6147();\r\n\r\n    return g_regexTester.result();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_string_view_idl/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_string_view_idl/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstddef>\r\n#include <string_view>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\nvoid test_case_operator_dereference_value_initialized_iterator() {\r\n    string_view::iterator it; // note: for IDL to work correctly, default init and value init are equivalent\r\n    (void) *it; // cannot dereference value-initialized string_view iterator\r\n}\r\n\r\nvoid test_case_operator_dereference_end_iterator() {\r\n    string_view sv(\"text\");\r\n    string_view::iterator it = sv.end();\r\n    (void) *it; // cannot dereference end string_view iterator\r\n}\r\n\r\nvoid test_case_operator_arrow_value_initialized_iterator() {\r\n    string_view::iterator it;\r\n    (void) it.operator->(); // cannot dereference value-initialized string_view iterator\r\n}\r\n\r\nvoid test_case_operator_arrow_end_iterator() {\r\n    string_view sv(\"text\");\r\n    string_view::iterator it = sv.end();\r\n    (void) it.operator->(); // cannot dereference end string_view iterator\r\n}\r\n\r\nvoid test_case_operator_preincrement_value_initialized_iterator() {\r\n    string_view::iterator it;\r\n    ++it; // cannot increment value-initialized string_view iterator\r\n}\r\n\r\nvoid test_case_operator_preincrement_off_end() {\r\n    string_view sv(\"text\");\r\n    string_view::iterator it = sv.begin();\r\n    for (size_t idx = 0; idx < 5; ++idx) {\r\n        ++it; // cannot increment string_view iterator past end\r\n    }\r\n}\r\n\r\nvoid test_case_operator_predecrement_value_initialized_iterator() {\r\n    string_view::iterator it;\r\n    --it; // cannot decrement value-initialized string_view iterator\r\n}\r\n\r\nvoid test_case_operator_predecrement_before_begin() {\r\n    string_view sv(\"text\");\r\n    string_view::iterator it = sv.begin();\r\n    --it; // cannot decrement string_view iterator before begin\r\n}\r\n\r\nvoid test_case_operator_advance_value_initialized_iterator() {\r\n    string_view::iterator it;\r\n    it += 1; // cannot seek value-initialized string_view iterator\r\n}\r\n\r\nvoid test_case_operator_advance_value_initialized_iterator_zero() {\r\n    string_view::iterator it;\r\n    it += 0; // OK\r\n}\r\n\r\nvoid test_case_operator_advance_before_begin() {\r\n    string_view sv(\"text\");\r\n    string_view::iterator it = sv.begin();\r\n    it += -1; // cannot seek string_view iterator before begin\r\n}\r\n\r\nvoid test_case_operator_advance_after_end() {\r\n    string_view sv(\"text\");\r\n    string_view::iterator it = sv.begin();\r\n    it += 5; // cannot seek string_view iterator after end\r\n}\r\n\r\nvoid test_case_operator_retreat_value_initialized_iterator() {\r\n    string_view::iterator it;\r\n    it -= 1; // cannot seek value-initialized string_view iterator\r\n}\r\n\r\nvoid test_case_operator_retreat_value_initialized_iterator_zero() {\r\n    string_view::iterator it;\r\n    it -= 0; // OK\r\n}\r\n\r\nvoid test_case_operator_retreat_before_begin() {\r\n    string_view sv(\"text\");\r\n    string_view::iterator it = sv.begin();\r\n    it -= 1; // cannot seek string_view iterator before begin\r\n}\r\n\r\nvoid test_case_operator_retreat_after_end() {\r\n    string_view sv(\"text\");\r\n    string_view::iterator it = sv.begin();\r\n    it -= -5; // cannot seek string_view iterator after end\r\n}\r\n\r\nvoid test_case_operator_subtract_incompatible_different_views() {\r\n    string_view sv1(\"text\");\r\n    string_view sv2(\"text2\");\r\n    (void) (sv1.begin() - sv2.begin()); // cannot subtract incompatible string_view iterators\r\n}\r\n\r\nvoid test_case_operator_subtract_incompatible_value_initialized() {\r\n    string_view sv1(\"text\");\r\n    (void) (sv1.begin() - string_view::iterator{}); // cannot subtract incompatible string_view iterators\r\n}\r\n\r\nvoid test_case_operator_equal_incompatible_different_views() {\r\n    string_view sv1(\"text\");\r\n    string_view sv2(\"text2\");\r\n    (void) (sv1.begin() == sv2.begin()); // cannot compare incompatible string_view iterators for equality\r\n}\r\n\r\nvoid test_case_operator_equal_incompatible_value_initialized() {\r\n    string_view sv1(\"text\");\r\n    (void) (sv1.begin() == string_view::iterator{}); // cannot compare incompatible string_view iterators for equality\r\n}\r\n\r\nvoid test_case_operator_less_incompatible_different_views() {\r\n    string_view sv1(\"text\");\r\n    string_view sv2(\"text2\");\r\n    (void) (sv1.begin() < sv2.begin()); // cannot compare incompatible string_view iterators\r\n}\r\n\r\nvoid test_case_operator_less_incompatible_value_initialized() {\r\n    string_view sv1(\"text\");\r\n    (void) (sv1.begin() < string_view::iterator{}); // cannot compare incompatible string_view iterators\r\n}\r\n\r\nvoid test_case_operator_subscript_out_of_range() {\r\n    string_view sv(\"text\");\r\n    (void) sv[4]; // string_view subscript out of range\r\n}\r\n\r\nvoid test_case_front_empty() {\r\n    string_view sv;\r\n    (void) sv.front(); // cannot call front on empty string_view\r\n}\r\n\r\nvoid test_case_back_empty() {\r\n    string_view sv;\r\n    (void) sv.back(); // cannot call back on empty string_view\r\n}\r\n\r\nvoid test_case_remove_prefix_too_large() {\r\n    string_view sv(\"text\");\r\n    sv.remove_prefix(5); // cannot remove prefix longer than total size\r\n}\r\n\r\nvoid test_case_remove_prefix_zero() {\r\n    string_view sv;\r\n    sv.remove_prefix(0); // OK\r\n}\r\n\r\nvoid test_case_remove_suffix_too_large() {\r\n    string_view sv(\"text\");\r\n    sv.remove_suffix(5); // cannot remove suffix longer than total size\r\n}\r\n\r\nvoid test_case_remove_suffix_zero() {\r\n    string_view sv;\r\n    sv.remove_suffix(0); // OK\r\n}\r\n\r\nvoid test_case_remove_prefix_incompatible() {\r\n    string_view sv(\"text\");\r\n    auto old_range = sv.begin();\r\n    sv.remove_prefix(1);\r\n    auto new_range = sv.begin();\r\n    (void) (old_range == new_range); // cannot compare incompatible string_view iterators for equality\r\n}\r\n\r\nvoid test_case_remove_suffix_incompatible() {\r\n    string_view sv(\"text\");\r\n    auto old_range = sv.begin();\r\n    sv.remove_suffix(1);\r\n    auto new_range = sv.begin();\r\n    (void) (old_range == new_range); // cannot compare incompatible string_view iterators for equality\r\n}\r\n\r\nvoid test_case_Copy_s() {\r\n    string_view sv(\"text\");\r\n    char buffer[2];\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // yay PREfast catches this mistake at compile time!\r\n    sv._Copy_s(buffer, 2, 4); // CRT invalid parameter handler (memcpy_s failed)\r\n#pragma warning(pop)\r\n}\r\n\r\nvoid test_case_null_constructor() {\r\n#pragma warning(push)\r\n#pragma warning(disable : 6387) // yay PREfast catches this mistake at compile time!\r\n    string_view sv(nullptr, 1); // non-zero size null string_view\r\n#pragma warning(pop)\r\n    (void) sv;\r\n}\r\n\r\nvoid test_case_null_constructor_zero() {\r\n    string_view sv(nullptr, 0); // OK\r\n    (void) sv;\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec([] {\r\n        test_case_operator_advance_value_initialized_iterator_zero();\r\n        test_case_operator_retreat_value_initialized_iterator_zero();\r\n        test_case_remove_prefix_zero();\r\n        test_case_remove_suffix_zero();\r\n        test_case_null_constructor_zero();\r\n    });\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_case_operator_dereference_value_initialized_iterator,\r\n        test_case_operator_dereference_end_iterator,\r\n        test_case_operator_arrow_value_initialized_iterator,\r\n        test_case_operator_arrow_end_iterator,\r\n        test_case_operator_preincrement_value_initialized_iterator,\r\n        test_case_operator_preincrement_off_end,\r\n        test_case_operator_predecrement_value_initialized_iterator,\r\n        test_case_operator_predecrement_before_begin,\r\n        test_case_operator_advance_value_initialized_iterator,\r\n        test_case_operator_advance_before_begin,\r\n        test_case_operator_advance_after_end,\r\n        test_case_operator_retreat_value_initialized_iterator,\r\n        test_case_operator_retreat_before_begin,\r\n        test_case_operator_retreat_after_end,\r\n        test_case_operator_subtract_incompatible_different_views,\r\n        test_case_operator_subtract_incompatible_value_initialized,\r\n        test_case_operator_equal_incompatible_different_views,\r\n        test_case_operator_equal_incompatible_value_initialized,\r\n        test_case_operator_less_incompatible_different_views,\r\n        test_case_operator_less_incompatible_value_initialized,\r\n        test_case_operator_subscript_out_of_range,\r\n        test_case_front_empty,\r\n        test_case_back_empty,\r\n        test_case_remove_prefix_too_large,\r\n        test_case_remove_suffix_too_large,\r\n        test_case_remove_prefix_incompatible,\r\n        test_case_remove_suffix_incompatible,\r\n        test_case_null_constructor,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    // basic_string_view::_Copy_s() is a non-Standard extension that's unconditionally checked.\r\n    // See: https://learn.microsoft.com/cpp/standard-library/basic-string-view-class#_copy_s\r\n    exec.add_death_tests({\r\n        test_case_Copy_s,\r\n    });\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_type_traits/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_type_traits/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _HAS_DEPRECATED_IS_LITERAL_TYPE 1\r\n#define _SILENCE_CXX17_IS_LITERAL_TYPE_DEPRECATION_WARNING\r\n#define _SILENCE_CXX20_IS_POD_DEPRECATION_WARNING\r\n\r\n#include <functional>\r\n#include <type_traits>\r\n#include <utility>\r\n\r\n#include <is_permissive.hpp>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n#define VERIFY_BASE_CHARACTERISTIC_V(BASE, ...)       \\\r\n    STATIC_ASSERT(BASE::value == __VA_ARGS__::value); \\\r\n    STATIC_ASSERT(is_base_of_v<BASE, __VA_ARGS__>)\r\n\r\n#define VERIFY_BASE_CHARACTERISTIC(BASE, ...)        \\\r\n    VERIFY_BASE_CHARACTERISTIC_V(BASE, __VA_ARGS__); \\\r\n    STATIC_ASSERT(is_same_v<BASE::type, __VA_ARGS__::type>)\r\n\r\n// Regression test for:\r\n// DevDiv-387795:  is_pod<void> should be false\r\n// DevDiv-424157:  is_assignable/is_trivially_assignable/is_trivially_move_assignable for void\r\n\r\n// N3376 20.9.4.1[meta.unary.cat]:  primary type categories:\r\nSTATIC_ASSERT(is_void_v<void>);\r\nSTATIC_ASSERT(!is_integral_v<void>);\r\nSTATIC_ASSERT(!is_floating_point_v<void>);\r\nSTATIC_ASSERT(!is_array_v<void>);\r\nSTATIC_ASSERT(!is_pointer_v<void>);\r\nSTATIC_ASSERT(!is_lvalue_reference_v<void>);\r\nSTATIC_ASSERT(!is_rvalue_reference_v<void>);\r\nSTATIC_ASSERT(!is_member_object_pointer_v<void>);\r\nSTATIC_ASSERT(!is_member_function_pointer_v<void>);\r\nSTATIC_ASSERT(!is_enum_v<void>);\r\nSTATIC_ASSERT(!is_union_v<void>);\r\nSTATIC_ASSERT(!is_class_v<void>);\r\nSTATIC_ASSERT(!is_function_v<void>);\r\n\r\n// N3376 20.9.4.2[meta.unary.comp]:  composite type categories:\r\nSTATIC_ASSERT(!is_reference_v<void>);\r\nSTATIC_ASSERT(!is_arithmetic_v<void>);\r\nSTATIC_ASSERT(is_fundamental_v<void>);\r\nSTATIC_ASSERT(!is_object_v<void>);\r\nSTATIC_ASSERT(!is_scalar_v<void>);\r\nSTATIC_ASSERT(!is_compound_v<void>);\r\nSTATIC_ASSERT(!is_member_pointer_v<void>);\r\n\r\n// N3376 20.9.4.3[meta.unary.prop]:  type properties:\r\nSTATIC_ASSERT(!is_const_v<void>);\r\nSTATIC_ASSERT(is_const_v<const void>);\r\nSTATIC_ASSERT(!is_const_v<volatile void>);\r\nSTATIC_ASSERT(is_const_v<const volatile void>);\r\nSTATIC_ASSERT(!is_volatile_v<void>);\r\nSTATIC_ASSERT(!is_volatile_v<const void>);\r\nSTATIC_ASSERT(is_volatile_v<volatile void>);\r\nSTATIC_ASSERT(is_volatile_v<const volatile void>);\r\nSTATIC_ASSERT(!is_trivial_v<void>);\r\nSTATIC_ASSERT(!is_trivially_copyable_v<void>);\r\nSTATIC_ASSERT(!is_standard_layout_v<void>);\r\nSTATIC_ASSERT(!is_pod_v<void>);\r\n\r\nSTATIC_ASSERT(is_literal_type_v<void>);\r\nSTATIC_ASSERT(is_literal_type_v<const void>);\r\nSTATIC_ASSERT(is_literal_type_v<volatile void>);\r\nSTATIC_ASSERT(is_literal_type_v<const volatile void>);\r\n\r\nSTATIC_ASSERT(!is_empty_v<void>);\r\nSTATIC_ASSERT(!is_polymorphic_v<void>);\r\nSTATIC_ASSERT(!is_abstract_v<void>);\r\nSTATIC_ASSERT(!is_signed_v<void>);\r\nSTATIC_ASSERT(!is_unsigned_v<void>);\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(!is_bounded_array_v<void>);\r\nSTATIC_ASSERT(!is_unbounded_array_v<void>);\r\n#endif // _HAS_CXX20\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(!is_scoped_enum_v<void>);\r\n#endif // _HAS_CXX23\r\n\r\nSTATIC_ASSERT(!is_constructible_v<void>);\r\nSTATIC_ASSERT(!is_default_constructible_v<void>);\r\nSTATIC_ASSERT(!is_copy_constructible_v<void>);\r\nSTATIC_ASSERT(!is_move_constructible_v<void>);\r\nSTATIC_ASSERT(!is_assignable_v<void, void>);\r\nSTATIC_ASSERT(!is_copy_assignable_v<void>);\r\nSTATIC_ASSERT(!is_move_assignable_v<void>);\r\nSTATIC_ASSERT(!is_destructible_v<void>);\r\nSTATIC_ASSERT(!is_destructible_v<const void>);\r\nSTATIC_ASSERT(!is_destructible_v<volatile void>);\r\nSTATIC_ASSERT(!is_destructible_v<const volatile void>);\r\n\r\nSTATIC_ASSERT(!is_trivially_constructible_v<void>);\r\nSTATIC_ASSERT(!is_trivially_default_constructible_v<void>);\r\nSTATIC_ASSERT(!is_trivially_copy_constructible_v<void>);\r\nSTATIC_ASSERT(!is_trivially_move_constructible_v<void>);\r\nSTATIC_ASSERT(!is_trivially_assignable_v<void, void>);\r\nSTATIC_ASSERT(!is_trivially_copy_assignable_v<void>);\r\nSTATIC_ASSERT(!is_trivially_move_assignable_v<void>);\r\nSTATIC_ASSERT(!is_trivially_destructible_v<void>);\r\nSTATIC_ASSERT(!is_trivially_destructible_v<const void>);\r\nSTATIC_ASSERT(!is_trivially_destructible_v<volatile void>);\r\nSTATIC_ASSERT(!is_trivially_destructible_v<const volatile void>);\r\n\r\nSTATIC_ASSERT(!is_nothrow_constructible_v<void>);\r\nSTATIC_ASSERT(!is_nothrow_default_constructible_v<void>);\r\nSTATIC_ASSERT(!is_nothrow_copy_constructible_v<void>);\r\nSTATIC_ASSERT(!is_nothrow_move_constructible_v<void>);\r\nSTATIC_ASSERT(!is_nothrow_assignable_v<void, void>);\r\nSTATIC_ASSERT(!is_nothrow_copy_assignable_v<void>);\r\nSTATIC_ASSERT(!is_nothrow_move_assignable_v<void>);\r\nSTATIC_ASSERT(!is_nothrow_destructible_v<void>);\r\nSTATIC_ASSERT(!is_nothrow_destructible_v<const void>);\r\nSTATIC_ASSERT(!is_nothrow_destructible_v<volatile void>);\r\nSTATIC_ASSERT(!is_nothrow_destructible_v<const volatile void>);\r\n\r\nSTATIC_ASSERT(!has_virtual_destructor_v<void>);\r\n\r\n// N3376 20.9.5[meta.unary.prop.query]:  type property queries\r\n// alignment_of does not accept void\r\nSTATIC_ASSERT(rank_v<void> == 0);\r\nSTATIC_ASSERT(extent_v<void> == 0);\r\nSTATIC_ASSERT(extent_v<void, 1> == 0);\r\n\r\n// N3376 20.9.6[meta.rel]:  type relations\r\nSTATIC_ASSERT(is_same_v<void, void>);\r\nSTATIC_ASSERT(is_same_v<const void, const void>);\r\nSTATIC_ASSERT(is_same_v<volatile void, volatile void>);\r\nSTATIC_ASSERT(is_same_v<const volatile void, const volatile void>);\r\nSTATIC_ASSERT(!is_same_v<const void, void>);\r\nSTATIC_ASSERT(!is_same_v<void, const void>);\r\n\r\nclass C {};\r\nSTATIC_ASSERT(!is_base_of_v<void, C>);\r\nSTATIC_ASSERT(!is_base_of_v<C, void>);\r\nSTATIC_ASSERT(!is_base_of_v<void, void>);\r\n\r\nSTATIC_ASSERT(is_convertible_v<void, void>);\r\nSTATIC_ASSERT(!is_convertible_v<int, void>);\r\nSTATIC_ASSERT(!is_convertible_v<void, int>);\r\n\r\n// N3376 20.9.7.1[meta.trans.cv]:  const-volatile modifications\r\nSTATIC_ASSERT(is_same_v<void, remove_const_t<void>>);\r\nSTATIC_ASSERT(is_same_v<void, remove_const_t<const void>>);\r\nSTATIC_ASSERT(is_same_v<volatile void, remove_const_t<volatile void>>);\r\nSTATIC_ASSERT(is_same_v<volatile void, remove_const_t<const volatile void>>);\r\n\r\nSTATIC_ASSERT(is_same_v<void, remove_volatile_t<void>>);\r\nSTATIC_ASSERT(is_same_v<const void, remove_volatile_t<const void>>);\r\nSTATIC_ASSERT(is_same_v<void, remove_volatile_t<volatile void>>);\r\nSTATIC_ASSERT(is_same_v<const void, remove_volatile_t<const volatile void>>);\r\n\r\nSTATIC_ASSERT(is_same_v<void, remove_cv_t<void>>);\r\nSTATIC_ASSERT(is_same_v<void, remove_cv_t<const void>>);\r\nSTATIC_ASSERT(is_same_v<void, remove_cv_t<volatile void>>);\r\nSTATIC_ASSERT(is_same_v<void, remove_cv_t<const volatile void>>);\r\n\r\nSTATIC_ASSERT(is_same_v<const void, add_const_t<void>>);\r\nSTATIC_ASSERT(is_same_v<const void, add_const_t<const void>>);\r\nSTATIC_ASSERT(is_same_v<const volatile void, add_const_t<volatile void>>);\r\nSTATIC_ASSERT(is_same_v<const volatile void, add_const_t<const volatile void>>);\r\n\r\nSTATIC_ASSERT(is_same_v<volatile void, add_volatile_t<void>>);\r\nSTATIC_ASSERT(is_same_v<const volatile void, add_volatile_t<const void>>);\r\nSTATIC_ASSERT(is_same_v<volatile void, add_volatile_t<volatile void>>);\r\nSTATIC_ASSERT(is_same_v<const volatile void, add_volatile_t<const volatile void>>);\r\n\r\nSTATIC_ASSERT(is_same_v<const volatile void, add_cv_t<void>>);\r\nSTATIC_ASSERT(is_same_v<const volatile void, add_cv_t<const void>>);\r\nSTATIC_ASSERT(is_same_v<const volatile void, add_cv_t<volatile void>>);\r\nSTATIC_ASSERT(is_same_v<const volatile void, add_cv_t<const volatile void>>);\r\n\r\n// N3376 20.9.7.2[meta.trans.ref]:  reference modifications\r\nSTATIC_ASSERT(is_same_v<void, remove_reference_t<void>>);\r\nSTATIC_ASSERT(is_same_v<void, add_lvalue_reference_t<void>>);\r\nSTATIC_ASSERT(is_same_v<void, add_rvalue_reference_t<void>>);\r\n\r\n// N3376 20.9.7.3[meta.trans.sign]:  sign modifications\r\n// Neither make_signed nor make_unsigned accept 'void'\r\n\r\n// N3376 20.9.7.4[meta.trans.arr]:  array modifications:\r\nSTATIC_ASSERT(is_same_v<void, remove_extent_t<void>>);\r\nSTATIC_ASSERT(is_same_v<void, remove_all_extents_t<void>>);\r\n\r\n// N3376 20.9.7.5[meta.trans.ptr]:  pointer modifications:\r\nSTATIC_ASSERT(is_same_v<void, remove_pointer_t<void>>);\r\nSTATIC_ASSERT(is_same_v<void*, add_pointer_t<void>>);\r\n\r\n// N3376 20.9.7.6[meta.trans.other]:  other transformations\r\n// aligned_union, underlying_type, and result_of do not accept void\r\nSTATIC_ASSERT(is_same_v<void, decay_t<void>>);\r\n\r\nSTATIC_ASSERT(is_same_v<void, common_type_t<void, void>>);\r\n\r\n// DDB.171837\r\nSTATIC_ASSERT(!is_const_v<int[3]>);\r\nSTATIC_ASSERT(is_const_v<const int[3]>);\r\nSTATIC_ASSERT(!is_const_v<volatile int[3]>);\r\nSTATIC_ASSERT(is_const_v<const volatile int[3]>);\r\n\r\nSTATIC_ASSERT(!is_const_v<int[]>);\r\nSTATIC_ASSERT(is_const_v<const int[]>);\r\nSTATIC_ASSERT(!is_const_v<volatile int[]>);\r\nSTATIC_ASSERT(is_const_v<const volatile int[]>);\r\n\r\nSTATIC_ASSERT(!is_volatile_v<int[3]>);\r\nSTATIC_ASSERT(!is_volatile_v<const int[3]>);\r\nSTATIC_ASSERT(is_volatile_v<volatile int[3]>);\r\nSTATIC_ASSERT(is_volatile_v<const volatile int[3]>);\r\n\r\nSTATIC_ASSERT(!is_volatile_v<int[]>);\r\nSTATIC_ASSERT(!is_volatile_v<const int[]>);\r\nSTATIC_ASSERT(is_volatile_v<volatile int[]>);\r\nSTATIC_ASSERT(is_volatile_v<const volatile int[]>);\r\n\r\n\r\nSTATIC_ASSERT(is_same_v<int[3], remove_const_t<int[3]>>);\r\nSTATIC_ASSERT(is_same_v<int[3], remove_const_t<const int[3]>>);\r\nSTATIC_ASSERT(is_same_v<volatile int[3], remove_const_t<volatile int[3]>>);\r\nSTATIC_ASSERT(is_same_v<volatile int[3], remove_const_t<const volatile int[3]>>);\r\n\r\nSTATIC_ASSERT(is_same_v<int[3], remove_volatile_t<int[3]>>);\r\nSTATIC_ASSERT(is_same_v<const int[3], remove_volatile_t<const int[3]>>);\r\nSTATIC_ASSERT(is_same_v<int[3], remove_volatile_t<volatile int[3]>>);\r\nSTATIC_ASSERT(is_same_v<const int[3], remove_volatile_t<const volatile int[3]>>);\r\n\r\nSTATIC_ASSERT(is_same_v<int[3], remove_cv_t<int[3]>>);\r\nSTATIC_ASSERT(is_same_v<int[3], remove_cv_t<const int[3]>>);\r\nSTATIC_ASSERT(is_same_v<int[3], remove_cv_t<volatile int[3]>>);\r\nSTATIC_ASSERT(is_same_v<int[3], remove_cv_t<const volatile int[3]>>);\r\n\r\nSTATIC_ASSERT(is_same_v<const int[3], add_const_t<int[3]>>);\r\nSTATIC_ASSERT(is_same_v<const int[3], add_const_t<const int[3]>>);\r\nSTATIC_ASSERT(is_same_v<const volatile int[3], add_const_t<volatile int[3]>>);\r\nSTATIC_ASSERT(is_same_v<const volatile int[3], add_const_t<const volatile int[3]>>);\r\n\r\nSTATIC_ASSERT(is_same_v<volatile int[3], add_volatile_t<int[3]>>);\r\nSTATIC_ASSERT(is_same_v<const volatile int[3], add_volatile_t<const int[3]>>);\r\nSTATIC_ASSERT(is_same_v<volatile int[3], add_volatile_t<volatile int[3]>>);\r\nSTATIC_ASSERT(is_same_v<const volatile int[3], add_volatile_t<const volatile int[3]>>);\r\n\r\nSTATIC_ASSERT(is_same_v<const volatile int[3], add_cv_t<int[3]>>);\r\nSTATIC_ASSERT(is_same_v<const volatile int[3], add_cv_t<const int[3]>>);\r\nSTATIC_ASSERT(is_same_v<const volatile int[3], add_cv_t<volatile int[3]>>);\r\nSTATIC_ASSERT(is_same_v<const volatile int[3], add_cv_t<const volatile int[3]>>);\r\n\r\n\r\nSTATIC_ASSERT(is_same_v<int[], remove_const_t<int[]>>);\r\nSTATIC_ASSERT(is_same_v<int[], remove_const_t<const int[]>>);\r\nSTATIC_ASSERT(is_same_v<volatile int[], remove_const_t<volatile int[]>>);\r\nSTATIC_ASSERT(is_same_v<volatile int[], remove_const_t<const volatile int[]>>);\r\n\r\nSTATIC_ASSERT(is_same_v<int[], remove_volatile_t<int[]>>);\r\nSTATIC_ASSERT(is_same_v<const int[], remove_volatile_t<const int[]>>);\r\nSTATIC_ASSERT(is_same_v<int[], remove_volatile_t<volatile int[]>>);\r\nSTATIC_ASSERT(is_same_v<const int[], remove_volatile_t<const volatile int[]>>);\r\n\r\nSTATIC_ASSERT(is_same_v<int[], remove_cv_t<int[]>>);\r\nSTATIC_ASSERT(is_same_v<int[], remove_cv_t<const int[]>>);\r\nSTATIC_ASSERT(is_same_v<int[], remove_cv_t<volatile int[]>>);\r\nSTATIC_ASSERT(is_same_v<int[], remove_cv_t<const volatile int[]>>);\r\n\r\nSTATIC_ASSERT(is_same_v<const int[], add_const_t<int[]>>);\r\nSTATIC_ASSERT(is_same_v<const int[], add_const_t<const int[]>>);\r\nSTATIC_ASSERT(is_same_v<const volatile int[], add_const_t<volatile int[]>>);\r\nSTATIC_ASSERT(is_same_v<const volatile int[], add_const_t<const volatile int[]>>);\r\n\r\nSTATIC_ASSERT(is_same_v<volatile int[], add_volatile_t<int[]>>);\r\nSTATIC_ASSERT(is_same_v<const volatile int[], add_volatile_t<const int[]>>);\r\nSTATIC_ASSERT(is_same_v<volatile int[], add_volatile_t<volatile int[]>>);\r\nSTATIC_ASSERT(is_same_v<const volatile int[], add_volatile_t<const volatile int[]>>);\r\n\r\nSTATIC_ASSERT(is_same_v<const volatile int[], add_cv_t<int[]>>);\r\nSTATIC_ASSERT(is_same_v<const volatile int[], add_cv_t<const int[]>>);\r\nSTATIC_ASSERT(is_same_v<const volatile int[], add_cv_t<volatile int[]>>);\r\nSTATIC_ASSERT(is_same_v<const volatile int[], add_cv_t<const volatile int[]>>);\r\n\r\n\r\n// DDB.172152\r\nSTATIC_ASSERT(is_array_v<int[3]>);\r\nSTATIC_ASSERT(is_array_v<const int[3]>);\r\nSTATIC_ASSERT(is_array_v<volatile int[3]>);\r\nSTATIC_ASSERT(is_array_v<const volatile int[3]>);\r\n\r\nSTATIC_ASSERT(is_array_v<int[]>);\r\nSTATIC_ASSERT(is_array_v<const int[]>);\r\nSTATIC_ASSERT(is_array_v<volatile int[]>);\r\nSTATIC_ASSERT(is_array_v<const volatile int[]>);\r\n\r\n// lvalue/rvalue references aren't arrays.\r\nSTATIC_ASSERT(!is_array_v<int (&)[3]>);\r\nSTATIC_ASSERT(!is_array_v<int (&)[]>);\r\nSTATIC_ASSERT(!is_array_v<int (&&)[3]>);\r\nSTATIC_ASSERT(!is_array_v<int (&&)[]>);\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(is_bounded_array_v<int[3]>);\r\nSTATIC_ASSERT(is_bounded_array_v<const int[3]>);\r\nSTATIC_ASSERT(is_bounded_array_v<volatile int[3]>);\r\nSTATIC_ASSERT(is_bounded_array_v<const volatile int[3]>);\r\n\r\nSTATIC_ASSERT(!is_bounded_array_v<int[]>);\r\nSTATIC_ASSERT(!is_bounded_array_v<const int[]>);\r\nSTATIC_ASSERT(!is_bounded_array_v<volatile int[]>);\r\nSTATIC_ASSERT(!is_bounded_array_v<const volatile int[]>);\r\n\r\nSTATIC_ASSERT(!is_unbounded_array_v<int[3]>);\r\nSTATIC_ASSERT(!is_unbounded_array_v<const int[3]>);\r\nSTATIC_ASSERT(!is_unbounded_array_v<volatile int[3]>);\r\nSTATIC_ASSERT(!is_unbounded_array_v<const volatile int[3]>);\r\n\r\nSTATIC_ASSERT(is_unbounded_array_v<int[]>);\r\nSTATIC_ASSERT(is_unbounded_array_v<const int[]>);\r\nSTATIC_ASSERT(is_unbounded_array_v<volatile int[]>);\r\nSTATIC_ASSERT(is_unbounded_array_v<const volatile int[]>);\r\n\r\n// lvalue/rvalue references aren't bounded/unbounded arrays.\r\nSTATIC_ASSERT(!is_bounded_array_v<int (&)[3]>);\r\nSTATIC_ASSERT(!is_bounded_array_v<int (&)[]>);\r\nSTATIC_ASSERT(!is_bounded_array_v<int (&&)[3]>);\r\nSTATIC_ASSERT(!is_bounded_array_v<int (&&)[]>);\r\nSTATIC_ASSERT(!is_unbounded_array_v<int (&)[3]>);\r\nSTATIC_ASSERT(!is_unbounded_array_v<int (&)[]>);\r\nSTATIC_ASSERT(!is_unbounded_array_v<int (&&)[3]>);\r\nSTATIC_ASSERT(!is_unbounded_array_v<int (&&)[]>);\r\n#endif // _HAS_CXX20\r\n\r\n\r\n// DDB.172154\r\nSTATIC_ASSERT(is_same_v<void, add_lvalue_reference_t<void>>);\r\nSTATIC_ASSERT(is_same_v<const void, add_lvalue_reference_t<const void>>);\r\nSTATIC_ASSERT(is_same_v<volatile void, add_lvalue_reference_t<volatile void>>);\r\nSTATIC_ASSERT(is_same_v<const volatile void, add_lvalue_reference_t<const volatile void>>);\r\n\r\n\r\n// DDB.172355\r\nSTATIC_ASSERT(is_convertible_v<void, void>);\r\nSTATIC_ASSERT(is_convertible_v<void, const void>);\r\nSTATIC_ASSERT(is_convertible_v<void, volatile void>);\r\nSTATIC_ASSERT(is_convertible_v<void, const volatile void>);\r\n\r\nSTATIC_ASSERT(is_convertible_v<const void, void>);\r\nSTATIC_ASSERT(is_convertible_v<const void, const void>);\r\nSTATIC_ASSERT(is_convertible_v<const void, volatile void>);\r\nSTATIC_ASSERT(is_convertible_v<const void, const volatile void>);\r\n\r\nSTATIC_ASSERT(is_convertible_v<volatile void, void>);\r\nSTATIC_ASSERT(is_convertible_v<volatile void, const void>);\r\nSTATIC_ASSERT(is_convertible_v<volatile void, volatile void>);\r\nSTATIC_ASSERT(is_convertible_v<volatile void, const volatile void>);\r\n\r\nSTATIC_ASSERT(is_convertible_v<const volatile void, void>);\r\nSTATIC_ASSERT(is_convertible_v<const volatile void, const void>);\r\nSTATIC_ASSERT(is_convertible_v<const volatile void, volatile void>);\r\nSTATIC_ASSERT(is_convertible_v<const volatile void, const volatile void>);\r\n\r\nSTATIC_ASSERT(!is_convertible_v<int, void>);\r\nSTATIC_ASSERT(!is_convertible_v<int, const void>);\r\nSTATIC_ASSERT(!is_convertible_v<int, volatile void>);\r\nSTATIC_ASSERT(!is_convertible_v<int, const volatile void>);\r\n\r\nSTATIC_ASSERT(!is_convertible_v<void, int>);\r\nSTATIC_ASSERT(!is_convertible_v<const void, int>);\r\nSTATIC_ASSERT(!is_convertible_v<volatile void, int>);\r\nSTATIC_ASSERT(!is_convertible_v<const volatile void, int>);\r\n\r\n// Verify simplifications after DevDiv-1195735 \"C1XX should select IsConst<const T> for IsConst<const int[3]>\" was\r\n// fixed.\r\nSTATIC_ASSERT(!is_const_v<int>);\r\nSTATIC_ASSERT(!is_const_v<int[3]>);\r\nSTATIC_ASSERT(!is_const_v<int[]>);\r\nSTATIC_ASSERT(is_const_v<const int>);\r\nSTATIC_ASSERT(is_const_v<const int[3]>);\r\nSTATIC_ASSERT(is_const_v<const int[]>);\r\nSTATIC_ASSERT(!is_const_v<int&>);\r\nSTATIC_ASSERT(!is_const_v<int&&>);\r\nSTATIC_ASSERT(!is_const_v<const int&>);\r\nSTATIC_ASSERT(!is_const_v<const int&&>);\r\nSTATIC_ASSERT(!is_const_v<int(int)>);\r\n\r\nSTATIC_ASSERT(is_same_v<int, remove_const_t<int>>);\r\nSTATIC_ASSERT(is_same_v<int[3], remove_const_t<int[3]>>);\r\nSTATIC_ASSERT(is_same_v<int[], remove_const_t<int[]>>);\r\nSTATIC_ASSERT(is_same_v<int, remove_const_t<const int>>);\r\nSTATIC_ASSERT(is_same_v<int[3], remove_const_t<const int[3]>>);\r\nSTATIC_ASSERT(is_same_v<int[], remove_const_t<const int[]>>);\r\nSTATIC_ASSERT(is_same_v<int&, remove_const_t<int&>>);\r\nSTATIC_ASSERT(is_same_v<int&&, remove_const_t<int&&>>);\r\nSTATIC_ASSERT(is_same_v<const int&, remove_const_t<const int&>>);\r\nSTATIC_ASSERT(is_same_v<const int&&, remove_const_t<const int&&>>);\r\nSTATIC_ASSERT(is_same_v<int(int), remove_const_t<int(int)>>);\r\n\r\nSTATIC_ASSERT(!is_volatile_v<int>);\r\nSTATIC_ASSERT(!is_volatile_v<int[3]>);\r\nSTATIC_ASSERT(!is_volatile_v<int[]>);\r\nSTATIC_ASSERT(is_volatile_v<volatile int>);\r\nSTATIC_ASSERT(is_volatile_v<volatile int[3]>);\r\nSTATIC_ASSERT(is_volatile_v<volatile int[]>);\r\nSTATIC_ASSERT(!is_volatile_v<int&>);\r\nSTATIC_ASSERT(!is_volatile_v<int&&>);\r\nSTATIC_ASSERT(!is_volatile_v<volatile int&>);\r\nSTATIC_ASSERT(!is_volatile_v<volatile int&&>);\r\nSTATIC_ASSERT(!is_volatile_v<int(int)>);\r\n\r\nSTATIC_ASSERT(is_same_v<int, remove_volatile_t<int>>);\r\nSTATIC_ASSERT(is_same_v<int[3], remove_volatile_t<int[3]>>);\r\nSTATIC_ASSERT(is_same_v<int[], remove_volatile_t<int[]>>);\r\nSTATIC_ASSERT(is_same_v<int, remove_volatile_t<volatile int>>);\r\nSTATIC_ASSERT(is_same_v<int[3], remove_volatile_t<volatile int[3]>>);\r\nSTATIC_ASSERT(is_same_v<int[], remove_volatile_t<volatile int[]>>);\r\nSTATIC_ASSERT(is_same_v<int&, remove_volatile_t<int&>>);\r\nSTATIC_ASSERT(is_same_v<int&&, remove_volatile_t<int&&>>);\r\nSTATIC_ASSERT(is_same_v<volatile int&, remove_volatile_t<volatile int&>>);\r\nSTATIC_ASSERT(is_same_v<volatile int&&, remove_volatile_t<volatile int&&>>);\r\nSTATIC_ASSERT(is_same_v<int(int), remove_volatile_t<int(int)>>);\r\n\r\n// Verify is_pointer simplification.\r\nusing FP  = int (*)(int);\r\nusing PMF = int (C::*)(int);\r\nusing PMD = int C::*;\r\nSTATIC_ASSERT(!is_pointer_v<double>);\r\nSTATIC_ASSERT(!is_pointer_v<const double>);\r\nSTATIC_ASSERT(!is_pointer_v<volatile double>);\r\nSTATIC_ASSERT(!is_pointer_v<const volatile double>);\r\nSTATIC_ASSERT(is_pointer_v<int*>);\r\nSTATIC_ASSERT(is_pointer_v<int* const>);\r\nSTATIC_ASSERT(is_pointer_v<int* volatile>);\r\nSTATIC_ASSERT(is_pointer_v<int* const volatile>);\r\nSTATIC_ASSERT(is_pointer_v<void*>);\r\nSTATIC_ASSERT(is_pointer_v<void* const>);\r\nSTATIC_ASSERT(is_pointer_v<void* volatile>);\r\nSTATIC_ASSERT(is_pointer_v<void* const volatile>);\r\nSTATIC_ASSERT(is_pointer_v<FP>);\r\nSTATIC_ASSERT(is_pointer_v<const FP>);\r\nSTATIC_ASSERT(is_pointer_v<volatile FP>);\r\nSTATIC_ASSERT(is_pointer_v<const volatile FP>);\r\nSTATIC_ASSERT(!is_pointer_v<PMF>);\r\nSTATIC_ASSERT(!is_pointer_v<const PMF>);\r\nSTATIC_ASSERT(!is_pointer_v<volatile PMF>);\r\nSTATIC_ASSERT(!is_pointer_v<const volatile PMF>);\r\nSTATIC_ASSERT(!is_pointer_v<PMD>);\r\nSTATIC_ASSERT(!is_pointer_v<const PMD>);\r\nSTATIC_ASSERT(!is_pointer_v<volatile PMD>);\r\nSTATIC_ASSERT(!is_pointer_v<const volatile PMD>);\r\n\r\n// devdiv198042_tr1_type_traits_is_function\r\nstruct test_abc1 {\r\n    test_abc1();\r\n    virtual ~test_abc1();\r\n    test_abc1(const test_abc1&);\r\n    test_abc1& operator=(const test_abc1&);\r\n    virtual void meow()  = 0;\r\n    virtual void meow2() = 0;\r\n};\r\n\r\ntypedef void meow5_t(int, bool, int*, int[], int, int, int, int, int, ...);\r\nSTATIC_ASSERT(is_function_v<meow5_t>);\r\n\r\ntypedef void (test_abc1::*vproc1)(...);\r\nSTATIC_ASSERT(is_member_function_pointer_v<vproc1>);\r\n\r\n// <P0013R1> Logical Operator Type Traits\r\ntemplate <bool val>\r\nstruct fake_bool {\r\n    static const bool value = val;\r\n};\r\n\r\ntemplate <bool val>\r\nstruct final_fake_bool final : fake_bool<val> {};\r\n\r\n//   <conjunction>\r\n// basic true cases\r\nVERIFY_BASE_CHARACTERISTIC(true_type, conjunction<>);\r\nVERIFY_BASE_CHARACTERISTIC(true_type, conjunction<true_type>);\r\nVERIFY_BASE_CHARACTERISTIC(true_type, conjunction<true_type, true_type>);\r\nVERIFY_BASE_CHARACTERISTIC(true_type, conjunction<true_type, true_type, true_type>);\r\n// more complex true cases\r\nVERIFY_BASE_CHARACTERISTIC(is_void<void>, conjunction<is_void<void>>);\r\nVERIFY_BASE_CHARACTERISTIC(is_void<void>, conjunction<is_const<const void>, is_void<void>>);\r\nVERIFY_BASE_CHARACTERISTIC(is_void<void>, conjunction<is_const<const void>, is_volatile<volatile void>, is_void<void>>);\r\n// basic false cases\r\nVERIFY_BASE_CHARACTERISTIC(false_type, conjunction<false_type>);\r\nVERIFY_BASE_CHARACTERISTIC(false_type, conjunction<true_type, false_type>);\r\nVERIFY_BASE_CHARACTERISTIC(false_type, conjunction<true_type, true_type, false_type>);\r\n// more complex false cases, selecting last trait\r\nVERIFY_BASE_CHARACTERISTIC(is_void<int>, conjunction<is_void<int>>);\r\nVERIFY_BASE_CHARACTERISTIC(is_void<int>, conjunction<is_const<const int>, is_void<int>>);\r\nVERIFY_BASE_CHARACTERISTIC(is_void<int>, conjunction<is_const<const int>, is_volatile<volatile int>, is_void<int>>);\r\n// more complex false cases, selecting not-the-last trait\r\nVERIFY_BASE_CHARACTERISTIC(is_void<int>, conjunction<is_void<int>, is_const<const int>, is_volatile<volatile int>>);\r\nVERIFY_BASE_CHARACTERISTIC(is_void<int>, conjunction<is_const<const int>, is_void<int>, is_volatile<volatile int>>);\r\n// short circuiting\r\nVERIFY_BASE_CHARACTERISTIC(is_void<int>, conjunction<is_void<int>, void>);\r\nVERIFY_BASE_CHARACTERISTIC(is_volatile<int>, conjunction<is_const<const int>, is_volatile<int>, void>);\r\nVERIFY_BASE_CHARACTERISTIC(is_const<int>, conjunction<is_const<int>, void, void>);\r\nVERIFY_BASE_CHARACTERISTIC(is_const<int>, conjunction<is_const<int>, void, void, void>);\r\n// non-integral_constant family\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<true>, conjunction<fake_bool<true>>);\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<true>, conjunction<fake_bool<true>, fake_bool<true>>);\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<true>, conjunction<fake_bool<true>, fake_bool<true>, fake_bool<true>>);\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<false>, conjunction<fake_bool<false>>);\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<false>, conjunction<fake_bool<false>, fake_bool<true>>);\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<false>, conjunction<fake_bool<true>, fake_bool<false>>);\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<false>, conjunction<fake_bool<true>, fake_bool<true>, fake_bool<false>>);\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<false>, conjunction<fake_bool<true>, fake_bool<false>, fake_bool<true>>);\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<false>, conjunction<fake_bool<false>, fake_bool<true>, fake_bool<true>>);\r\n//   </conjunction>\r\n//   <disjunction>\r\n// basic false cases\r\nVERIFY_BASE_CHARACTERISTIC(false_type, disjunction<>);\r\nVERIFY_BASE_CHARACTERISTIC(false_type, disjunction<false_type>);\r\nVERIFY_BASE_CHARACTERISTIC(false_type, disjunction<false_type, false_type>);\r\nVERIFY_BASE_CHARACTERISTIC(false_type, disjunction<false_type, false_type, false_type>);\r\n// more complex false cases\r\nVERIFY_BASE_CHARACTERISTIC(is_void<int>, disjunction<is_void<int>>);\r\nVERIFY_BASE_CHARACTERISTIC(is_void<int>, disjunction<is_const<int>, is_void<int>>);\r\nVERIFY_BASE_CHARACTERISTIC(is_void<int>, disjunction<is_const<int>, is_volatile<int>, is_void<int>>);\r\n// basic true cases\r\nVERIFY_BASE_CHARACTERISTIC(true_type, disjunction<true_type>);\r\nVERIFY_BASE_CHARACTERISTIC(true_type, disjunction<false_type, true_type>);\r\nVERIFY_BASE_CHARACTERISTIC(true_type, disjunction<false_type, false_type, true_type>);\r\n// more complex true cases, selecting the last trait\r\nVERIFY_BASE_CHARACTERISTIC(is_void<void>, disjunction<is_void<void>>);\r\nVERIFY_BASE_CHARACTERISTIC(is_void<void>, disjunction<is_const<int>, is_void<void>>);\r\nVERIFY_BASE_CHARACTERISTIC(is_void<void>, disjunction<is_const<int>, is_volatile<int>, is_void<void>>);\r\n// more complex true cases, selecting not-the-last trait\r\nVERIFY_BASE_CHARACTERISTIC(is_void<void>, disjunction<is_const<int>, is_void<void>, is_volatile<int>>);\r\nVERIFY_BASE_CHARACTERISTIC(is_void<void>, disjunction<is_void<void>, is_const<int>, is_volatile<int>>);\r\n// short circuiting\r\nVERIFY_BASE_CHARACTERISTIC(is_void<void>, disjunction<is_void<void>, void>);\r\nVERIFY_BASE_CHARACTERISTIC(is_void<void>, disjunction<is_const<int>, is_void<void>, void>);\r\nVERIFY_BASE_CHARACTERISTIC(is_void<void>, disjunction<is_void<void>, void, void>);\r\nVERIFY_BASE_CHARACTERISTIC(is_void<void>, disjunction<is_void<void>, void, void, void>);\r\n// non-integral_constant family\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<false>, disjunction<fake_bool<false>>);\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<false>, disjunction<fake_bool<false>, fake_bool<false>>);\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<false>, disjunction<fake_bool<false>, fake_bool<false>, fake_bool<false>>);\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<true>, disjunction<fake_bool<true>>);\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<true>, disjunction<fake_bool<true>, fake_bool<false>>);\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<true>, disjunction<fake_bool<false>, fake_bool<true>>);\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<true>, disjunction<fake_bool<false>, fake_bool<false>, fake_bool<true>>);\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<true>, disjunction<fake_bool<false>, fake_bool<true>, fake_bool<false>>);\r\nVERIFY_BASE_CHARACTERISTIC_V(fake_bool<true>, disjunction<fake_bool<true>, fake_bool<false>, fake_bool<false>>);\r\n//   </disjunction>\r\n//   <negation>\r\nVERIFY_BASE_CHARACTERISTIC(bool_constant<true>, negation<false_type>);\r\nVERIFY_BASE_CHARACTERISTIC(bool_constant<false>, negation<true_type>);\r\nSTATIC_ASSERT(is_base_of_v<bool_constant<true>, negation<final_fake_bool<false>>>);\r\nSTATIC_ASSERT(is_base_of_v<bool_constant<false>, negation<final_fake_bool<true>>>);\r\n//   </negation>\r\n// </P0013R1>\r\n\r\n\r\n// DDB-198043 \"[VS2008 / TR1] problems with is_pod and has_trivial_constructor\"\r\nstruct TrivialExceptConstruct {\r\n    TrivialExceptConstruct();\r\n    int i;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct Wrap {\r\n    T t;\r\n    int j;\r\n};\r\n\r\nSTATIC_ASSERT(!is_trivially_default_constructible_v<Wrap<TrivialExceptConstruct>>);\r\nSTATIC_ASSERT(!is_pod_v<Wrap<TrivialExceptConstruct>>);\r\n\r\n\r\n// VSO-152213 \"<type_traits>: is_function does not match qualified function types\"\r\n// VSO-154500 \"<type_traits>: [Feedback]std::is_function returns false for cv/ref qualified functions\"\r\n// C++14 LWG-2196 \"Specification of is_*[copy/move]_[constructible/assignable] unclear for non-referenceable types\"\r\n// C++17 LWG-2101 \"Some transformation types can produce impossible types\"\r\n\r\ntemplate <typename T>\r\nvoid test_function_type() {\r\n    // Primary type categories. Exactly one is true.\r\n    STATIC_ASSERT(!is_void_v<T>);\r\n    STATIC_ASSERT(!is_null_pointer_v<T>);\r\n    STATIC_ASSERT(!is_integral_v<T>);\r\n    STATIC_ASSERT(!is_floating_point_v<T>);\r\n    STATIC_ASSERT(!is_array_v<T>);\r\n    STATIC_ASSERT(!is_pointer_v<T>);\r\n    STATIC_ASSERT(!is_lvalue_reference_v<T>);\r\n    STATIC_ASSERT(!is_rvalue_reference_v<T>);\r\n    STATIC_ASSERT(!is_member_object_pointer_v<T>);\r\n    STATIC_ASSERT(!is_member_function_pointer_v<T>);\r\n    STATIC_ASSERT(!is_enum_v<T>);\r\n    STATIC_ASSERT(!is_union_v<T>);\r\n    STATIC_ASSERT(!is_class_v<T>);\r\n    STATIC_ASSERT(is_function_v<T>);\r\n\r\n    // Composite type traits. Function types are compound, but not anything else.\r\n    STATIC_ASSERT(!is_reference_v<T>);\r\n    STATIC_ASSERT(!is_arithmetic_v<T>);\r\n    STATIC_ASSERT(!is_fundamental_v<T>);\r\n    STATIC_ASSERT(!is_object_v<T>);\r\n    STATIC_ASSERT(!is_scalar_v<T>);\r\n    STATIC_ASSERT(is_compound_v<T>);\r\n    STATIC_ASSERT(!is_member_pointer_v<T>);\r\n\r\n    // Type properties, convenience forms. They're false for plain function types,\r\n    // and they're required to be false for non-referenceable types.\r\n    STATIC_ASSERT(!is_copy_constructible_v<T>);\r\n    STATIC_ASSERT(!is_move_constructible_v<T>);\r\n    STATIC_ASSERT(!is_copy_assignable_v<T>);\r\n    STATIC_ASSERT(!is_move_assignable_v<T>);\r\n#if _HAS_CXX17\r\n    STATIC_ASSERT(!is_swappable_v<T>);\r\n#endif // _HAS_CXX17\r\n    STATIC_ASSERT(!is_trivially_copy_constructible_v<T>);\r\n    STATIC_ASSERT(!is_trivially_move_constructible_v<T>);\r\n    STATIC_ASSERT(!is_trivially_copy_assignable_v<T>);\r\n    STATIC_ASSERT(!is_trivially_move_assignable_v<T>);\r\n    STATIC_ASSERT(!is_nothrow_copy_constructible_v<T>);\r\n    STATIC_ASSERT(!is_nothrow_move_constructible_v<T>);\r\n    STATIC_ASSERT(!is_nothrow_copy_assignable_v<T>);\r\n    STATIC_ASSERT(!is_nothrow_move_assignable_v<T>);\r\n#if _HAS_CXX17\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<T>);\r\n\r\n    STATIC_ASSERT(!has_unique_object_representations_v<T>);\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n    STATIC_ASSERT(is_same_v<remove_cvref_t<T>, T>);\r\n\r\n    STATIC_ASSERT(!is_bounded_array_v<T>);\r\n    STATIC_ASSERT(!is_unbounded_array_v<T>);\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n    STATIC_ASSERT(!is_scoped_enum_v<T>);\r\n#endif\r\n}\r\n\r\ntemplate <typename T>\r\nvoid test_plain_function_type() {\r\n    test_function_type<T>();\r\n\r\n    // These transformations work normally on plain function types.\r\n    STATIC_ASSERT(is_same_v<add_lvalue_reference_t<T>, T&>);\r\n    STATIC_ASSERT(is_same_v<add_rvalue_reference_t<T>, T&&>);\r\n    STATIC_ASSERT(is_same_v<add_pointer_t<T>, T*>);\r\n\r\n#if _HAS_CXX20\r\n    STATIC_ASSERT(is_same_v<remove_cvref_t<T&>, T>);\r\n    STATIC_ASSERT(is_same_v<remove_cvref_t<T&&>, T>);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\ntemplate <typename T>\r\nvoid test_weird_function_type() {\r\n    test_function_type<T>();\r\n\r\n    // These transformations are required to leave non-referenceable function types unchanged.\r\n    STATIC_ASSERT(is_same_v<add_lvalue_reference_t<T>, T>);\r\n    STATIC_ASSERT(is_same_v<add_rvalue_reference_t<T>, T>);\r\n    STATIC_ASSERT(is_same_v<add_pointer_t<T>, T>);\r\n}\r\n\r\nvoid test_all_function_types() {\r\n    test_plain_function_type<int(int)>();\r\n    test_weird_function_type<int(int) const>();\r\n    test_weird_function_type<int(int) volatile>();\r\n    test_weird_function_type<int(int) const volatile>();\r\n    test_weird_function_type<int(int) &>();\r\n    test_weird_function_type<int(int) const&>();\r\n    test_weird_function_type<int(int) volatile&>();\r\n    test_weird_function_type<int(int) const volatile&>();\r\n    test_weird_function_type<int(int) &&>();\r\n    test_weird_function_type<int(int) const&&>();\r\n    test_weird_function_type<int(int) volatile&&>();\r\n    test_weird_function_type<int(int) const volatile&&>();\r\n\r\n    test_plain_function_type<int(int, ...)>();\r\n    test_weird_function_type<int(int, ...) const>();\r\n    test_weird_function_type<int(int, ...) volatile>();\r\n    test_weird_function_type<int(int, ...) const volatile>();\r\n    test_weird_function_type<int(int, ...) &>();\r\n    test_weird_function_type<int(int, ...) const&>();\r\n    test_weird_function_type<int(int, ...) volatile&>();\r\n    test_weird_function_type<int(int, ...) const volatile&>();\r\n    test_weird_function_type<int(int, ...) &&>();\r\n    test_weird_function_type<int(int, ...) const&&>();\r\n    test_weird_function_type<int(int, ...) volatile&&>();\r\n    test_weird_function_type<int(int, ...) const volatile&&>();\r\n}\r\n\r\n// Test more transformations, just in case.\r\nSTATIC_ASSERT(is_same_v<add_lvalue_reference_t<int>, int&>);\r\nSTATIC_ASSERT(is_same_v<add_rvalue_reference_t<int>, int&&>);\r\nSTATIC_ASSERT(is_same_v<add_pointer_t<int>, int*>);\r\n\r\nSTATIC_ASSERT(is_same_v<add_lvalue_reference_t<int&>, int&>);\r\nSTATIC_ASSERT(is_same_v<add_rvalue_reference_t<int&>, int&>);\r\nSTATIC_ASSERT(is_same_v<add_pointer_t<int&>, int*>);\r\n\r\nSTATIC_ASSERT(is_same_v<add_lvalue_reference_t<int&&>, int&>);\r\nSTATIC_ASSERT(is_same_v<add_rvalue_reference_t<int&&>, int&&>);\r\nSTATIC_ASSERT(is_same_v<add_pointer_t<int&&>, int*>);\r\n\r\nSTATIC_ASSERT(is_same_v<add_lvalue_reference_t<void>, void>);\r\nSTATIC_ASSERT(is_same_v<add_rvalue_reference_t<void>, void>);\r\nSTATIC_ASSERT(is_same_v<add_pointer_t<void>, void*>);\r\n\r\n// Test simplified is_void.\r\nSTATIC_ASSERT(is_void_v<void>);\r\nSTATIC_ASSERT(is_void_v<const void>);\r\nSTATIC_ASSERT(is_void_v<volatile void>);\r\nSTATIC_ASSERT(is_void_v<const volatile void>);\r\n\r\nSTATIC_ASSERT(!is_void_v<int>);\r\nSTATIC_ASSERT(!is_void_v<const int>);\r\nSTATIC_ASSERT(!is_void_v<volatile int>);\r\nSTATIC_ASSERT(!is_void_v<const volatile int>);\r\n\r\n#if _HAS_CXX17\r\n// P0185R1 swappable traits\r\nnamespace swappable_trait_tests {\r\n    enum swap_kind { implicitly_unswappable, explicitly_unswappable, implicitly_swappable, hidden_swap, visible_swap };\r\n\r\n    template <swap_kind, bool>\r\n    struct type {};\r\n\r\n    template <bool Throws>\r\n    struct type<implicitly_unswappable, Throws> {\r\n        type()                  = default;\r\n        type(type&&)            = delete;\r\n        type& operator=(type&&) = delete;\r\n    };\r\n\r\n    template <bool Throws>\r\n    void swap(type<explicitly_unswappable, Throws>&, type<explicitly_unswappable, Throws>&) = delete;\r\n\r\n    template <bool Throws>\r\n    struct type<implicitly_swappable, Throws> {\r\n        type() = default;\r\n        type(type&&) noexcept(!Throws) {}\r\n        type& operator=(type&&) noexcept(!Throws) {\r\n            return *this;\r\n        }\r\n        type(const type&)            = default;\r\n        type& operator=(const type&) = default;\r\n    };\r\n\r\n    template <bool Throws>\r\n    struct type<hidden_swap, Throws> : type<implicitly_unswappable, Throws> {\r\n        friend void swap(type&, type&) noexcept(!Throws) {}\r\n    };\r\n\r\n    template <bool Throws>\r\n    struct type<visible_swap, Throws> : type<implicitly_unswappable, Throws> {};\r\n\r\n    template <bool Throws>\r\n    void swap(type<visible_swap, Throws>&, type<visible_swap, Throws>&) noexcept(!Throws) {}\r\n\r\n    STATIC_ASSERT(is_swappable_v<int>);\r\n    STATIC_ASSERT(!is_swappable_v<void>);\r\n    STATIC_ASSERT(is_swappable_v<void (*)(int, double)>);\r\n    STATIC_ASSERT(!is_swappable_v<void(int, double)>);\r\n    STATIC_ASSERT(is_swappable_v<long>);\r\n    STATIC_ASSERT(is_swappable_v<int[4]>);\r\n    STATIC_ASSERT(is_swappable_v<int[2][3][4][5]>);\r\n    STATIC_ASSERT(!is_swappable_v<double[]>);\r\n    STATIC_ASSERT(!is_swappable_v<int[][4]>);\r\n\r\n    STATIC_ASSERT(!is_swappable_v<type<implicitly_unswappable, true>>);\r\n    STATIC_ASSERT(!is_swappable_v<type<implicitly_unswappable, false>>);\r\n    STATIC_ASSERT(!is_swappable_v<type<explicitly_unswappable, true>>);\r\n    STATIC_ASSERT(!is_swappable_v<type<explicitly_unswappable, false>>);\r\n    STATIC_ASSERT(is_swappable_v<type<implicitly_swappable, true>>);\r\n    STATIC_ASSERT(is_swappable_v<type<implicitly_swappable, false>>);\r\n    STATIC_ASSERT(is_swappable_v<type<hidden_swap, true>>);\r\n    STATIC_ASSERT(is_swappable_v<type<hidden_swap, false>>);\r\n    STATIC_ASSERT(is_swappable_v<type<visible_swap, true>>);\r\n    STATIC_ASSERT(is_swappable_v<type<visible_swap, false>>);\r\n\r\n    STATIC_ASSERT(!is_swappable_v<type<implicitly_unswappable, true>[2]>);\r\n    STATIC_ASSERT(!is_swappable_v<type<implicitly_unswappable, false>[2]>);\r\n    STATIC_ASSERT(!is_swappable_v<type<explicitly_unswappable, true>[2]>);\r\n    STATIC_ASSERT(!is_swappable_v<type<explicitly_unswappable, false>[2]>);\r\n    STATIC_ASSERT(is_swappable_v<type<implicitly_swappable, true>[2]>);\r\n    STATIC_ASSERT(is_swappable_v<type<implicitly_swappable, false>[2]>);\r\n    STATIC_ASSERT(is_swappable_v<type<hidden_swap, true>[2]>);\r\n    STATIC_ASSERT(is_swappable_v<type<hidden_swap, false>[2]>);\r\n    STATIC_ASSERT(is_swappable_v<type<visible_swap, true>[2]>);\r\n    STATIC_ASSERT(is_swappable_v<type<visible_swap, false>[2]>);\r\n\r\n    STATIC_ASSERT(is_nothrow_swappable_v<int>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<void>);\r\n    STATIC_ASSERT(is_nothrow_swappable_v<void (*)(int, double)>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<void(int, double)>);\r\n    STATIC_ASSERT(is_nothrow_swappable_v<long>);\r\n    STATIC_ASSERT(is_nothrow_swappable_v<int[4]>);\r\n    STATIC_ASSERT(is_nothrow_swappable_v<int[2][3][4][5]>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<double[]>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<int[][4]>);\r\n\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<type<implicitly_unswappable, true>>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<type<implicitly_unswappable, false>>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<type<explicitly_unswappable, true>>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<type<explicitly_unswappable, false>>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<type<implicitly_swappable, true>>);\r\n    STATIC_ASSERT(is_nothrow_swappable_v<type<implicitly_swappable, false>>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<type<hidden_swap, true>>);\r\n    STATIC_ASSERT(is_nothrow_swappable_v<type<hidden_swap, false>>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<type<visible_swap, true>>);\r\n    STATIC_ASSERT(is_nothrow_swappable_v<type<visible_swap, false>>);\r\n\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<type<implicitly_unswappable, true>[2]>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<type<implicitly_unswappable, false>[2]>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<type<explicitly_unswappable, true>[2]>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<type<explicitly_unswappable, false>[2]>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<type<implicitly_swappable, true>[2]>);\r\n    STATIC_ASSERT(is_nothrow_swappable_v<type<implicitly_swappable, false>[2]>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<type<hidden_swap, true>[2]>);\r\n    STATIC_ASSERT(is_nothrow_swappable_v<type<hidden_swap, false>[2]>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_v<type<visible_swap, true>[2]>);\r\n    STATIC_ASSERT(is_nothrow_swappable_v<type<visible_swap, false>[2]>);\r\n\r\n    STATIC_ASSERT(!is_swappable_with_v<void, void>);\r\n    STATIC_ASSERT(!is_swappable_with_v<int, int>);\r\n    STATIC_ASSERT(!is_swappable_with_v<int&, double&>);\r\n    STATIC_ASSERT(!is_swappable_with_v<int (&)[4], bool (&)[4]>);\r\n    STATIC_ASSERT(!is_swappable_with_v<int (&)[3][4][1][2], int (&)[4][4][1][2]>);\r\n\r\n    STATIC_ASSERT(!is_nothrow_swappable_with_v<void, void>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_with_v<int, int>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_with_v<int&, double&>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_with_v<int (&)[4], bool (&)[4]>);\r\n    STATIC_ASSERT(!is_nothrow_swappable_with_v<int (&)[3][4][1][2], int (&)[4][4][1][2]>);\r\n} // namespace swappable_trait_tests\r\n#else // _HAS_CXX17\r\n// In C++14 mode, when std::swap() is unconstrained,\r\n// verify that we can explicitly specialize it for an immovable type.\r\n\r\nstruct Immovable {\r\n    Immovable() {}\r\n    ~Immovable() {}\r\n    Immovable(const Immovable&)            = delete;\r\n    Immovable& operator=(const Immovable&) = delete;\r\n};\r\n\r\nnamespace std {\r\n    template <>\r\n    void swap(Immovable&, Immovable&) {}\r\n} // namespace std\r\n\r\n#endif // _HAS_CXX17\r\n\r\nenum ExampleEnum { xExample, yExample };\r\nenum LLEnum : long long { xLongExample, yLongExample };\r\nenum class ExampleEnumClass { xExample, yExample };\r\nenum class LLEnumClass : long long { xLongExample, yLongExample };\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(!is_scoped_enum<ExampleEnum>::value);\r\nSTATIC_ASSERT(!is_scoped_enum_v<ExampleEnum>);\r\nSTATIC_ASSERT(!is_scoped_enum_v<test_abc1>);\r\nSTATIC_ASSERT(is_scoped_enum_v<ExampleEnumClass>);\r\nSTATIC_ASSERT(is_scoped_enum_v<LLEnumClass>);\r\nenum E { e = is_scoped_enum_v<E> };\r\nstatic_assert(!e, \"is_scoped_enum of an incomplete unscoped enum type is true\");\r\n#endif // _HAS_CXX23\r\n\r\n// P0258R2 has_unique_object_representations\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(!has_unique_object_representations_v<void>);\r\nSTATIC_ASSERT(!has_unique_object_representations_v<const void>);\r\nSTATIC_ASSERT(!has_unique_object_representations_v<volatile void>);\r\nSTATIC_ASSERT(!has_unique_object_representations_v<const volatile void>);\r\n\r\nSTATIC_ASSERT(has_unique_object_representations_v<int>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<const int>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<volatile int>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<const volatile int>);\r\n\r\nSTATIC_ASSERT(has_unique_object_representations_v<void*>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<const void*>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<volatile void*>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<const volatile void*>);\r\n\r\nSTATIC_ASSERT(has_unique_object_representations_v<int*>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<const int*>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<volatile int*>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<const volatile int*>);\r\n\r\nSTATIC_ASSERT(has_unique_object_representations_v<FP>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<const FP>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<volatile FP>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<const volatile FP>);\r\n\r\nSTATIC_ASSERT(has_unique_object_representations_v<PMF>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<const PMF>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<volatile PMF>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<const volatile PMF>);\r\n\r\nSTATIC_ASSERT(has_unique_object_representations_v<PMD>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<const PMD>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<volatile PMD>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<const volatile PMD>);\r\n\r\nSTATIC_ASSERT(has_unique_object_representations_v<bool>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<char>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<signed char>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<unsigned char>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<short>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<unsigned short>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<int>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<unsigned int>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<long>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<unsigned long>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<long long>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<unsigned long long>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<wchar_t>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<char16_t>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<char32_t>);\r\n\r\nSTATIC_ASSERT(!has_unique_object_representations_v<void>);\r\nSTATIC_ASSERT(!has_unique_object_representations_v<nullptr_t>);\r\nSTATIC_ASSERT(!has_unique_object_representations_v<float>);\r\nSTATIC_ASSERT(!has_unique_object_representations_v<double>);\r\nSTATIC_ASSERT(!has_unique_object_representations_v<long double>);\r\n\r\nstruct NoPadding {\r\n    int a;\r\n    int b;\r\n};\r\n\r\nSTATIC_ASSERT(has_unique_object_representations_v<NoPadding>);\r\n\r\nstruct Padding {\r\n    char a;\r\n    int b;\r\n};\r\n\r\nSTATIC_ASSERT(!has_unique_object_representations_v<Padding>);\r\n\r\nstruct TailPadding {\r\n    int a;\r\n    char b;\r\n};\r\n\r\nSTATIC_ASSERT(!has_unique_object_representations_v<TailPadding>);\r\n\r\nunion NoPaddingUnion {\r\n    int a;\r\n    unsigned int b;\r\n};\r\n\r\nSTATIC_ASSERT(has_unique_object_representations_v<NoPaddingUnion>);\r\n\r\nunion PaddingUnion {\r\n    int a;\r\n    long long b;\r\n};\r\n\r\nSTATIC_ASSERT(!has_unique_object_representations_v<PaddingUnion>);\r\n\r\nstruct NotTriviallyCopyable {\r\n    int x;\r\n    NotTriviallyCopyable(const NotTriviallyCopyable&) {}\r\n};\r\n\r\nSTATIC_ASSERT(!has_unique_object_representations_v<NotTriviallyCopyable>);\r\n\r\nSTATIC_ASSERT(has_unique_object_representations_v<ExampleEnum>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<LLEnum>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<ExampleEnumClass>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<LLEnumClass>);\r\n\r\n// function types tested above in test_function_type\r\n\r\n// N.B. because reference types aren't object types\r\nSTATIC_ASSERT(!has_unique_object_representations_v<int&>);\r\nSTATIC_ASSERT(!has_unique_object_representations_v<const int&>);\r\nSTATIC_ASSERT(!has_unique_object_representations_v<volatile int&>);\r\nSTATIC_ASSERT(!has_unique_object_representations_v<const volatile int&>);\r\n\r\nclass Empty {};\r\n\r\nSTATIC_ASSERT(!has_unique_object_representations_v<Empty>);\r\n\r\nstruct Compressed : Empty {\r\n    int x;\r\n};\r\n\r\nSTATIC_ASSERT(has_unique_object_representations_v<Compressed>);\r\n\r\nclass CompressedD : Compressed {};\r\n\r\nSTATIC_ASSERT(has_unique_object_representations_v<CompressedD>);\r\n\r\nSTATIC_ASSERT(has_unique_object_representations_v<int[42]>);\r\nSTATIC_ASSERT(has_unique_object_representations_v<int[]>);\r\nSTATIC_ASSERT(!has_unique_object_representations_v<double[42]>);\r\nSTATIC_ASSERT(!has_unique_object_representations_v<double[]>);\r\n\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX20\r\n// P0887R1 type_identity\r\ntemplate <typename T>\r\nconstexpr bool test_type_identity() {\r\n    STATIC_ASSERT(is_same_v<T, typename type_identity<T>::type>);\r\n    STATIC_ASSERT(is_same_v<T, type_identity_t<T>>);\r\n\r\n    if constexpr (!is_function_v<T>) {\r\n        STATIC_ASSERT(is_same_v<const T, typename type_identity<const T>::type>);\r\n        STATIC_ASSERT(is_same_v<volatile T, typename type_identity<volatile T>::type>);\r\n        STATIC_ASSERT(is_same_v<const volatile T, typename type_identity<const volatile T>::type>);\r\n\r\n        STATIC_ASSERT(is_same_v<const T, type_identity_t<const T>>);\r\n        STATIC_ASSERT(is_same_v<volatile T, type_identity_t<volatile T>>);\r\n        STATIC_ASSERT(is_same_v<const volatile T, type_identity_t<const volatile T>>);\r\n    }\r\n\r\n    if constexpr (!is_void_v<T>) {\r\n        STATIC_ASSERT(is_same_v<T&, typename type_identity<T&>::type>);\r\n        STATIC_ASSERT(is_same_v<T&&, typename type_identity<T&&>::type>);\r\n\r\n        STATIC_ASSERT(is_same_v<T&, type_identity_t<T&>>);\r\n        STATIC_ASSERT(is_same_v<T&&, type_identity_t<T&&>>);\r\n    }\r\n\r\n    if constexpr (!is_void_v<T> && !is_function_v<T>) {\r\n        STATIC_ASSERT(is_same_v<const T&, typename type_identity<const T&>::type>);\r\n        STATIC_ASSERT(is_same_v<volatile T&, typename type_identity<volatile T&>::type>);\r\n        STATIC_ASSERT(is_same_v<const volatile T&, typename type_identity<const volatile T&>::type>);\r\n        STATIC_ASSERT(is_same_v<const T&&, typename type_identity<const T&&>::type>);\r\n        STATIC_ASSERT(is_same_v<volatile T&&, typename type_identity<volatile T&&>::type>);\r\n        STATIC_ASSERT(is_same_v<const volatile T&&, typename type_identity<const volatile T&&>::type>);\r\n\r\n        STATIC_ASSERT(is_same_v<const T&, type_identity_t<const T&>>);\r\n        STATIC_ASSERT(is_same_v<volatile T&, type_identity_t<volatile T&>>);\r\n        STATIC_ASSERT(is_same_v<const volatile T&, type_identity_t<const volatile T&>>);\r\n        STATIC_ASSERT(is_same_v<const T&&, type_identity_t<const T&&>>);\r\n        STATIC_ASSERT(is_same_v<volatile T&&, type_identity_t<volatile T&&>>);\r\n        STATIC_ASSERT(is_same_v<const volatile T&&, type_identity_t<const volatile T&&>>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(test_type_identity<void>());\r\nstatic_assert(test_type_identity<int>());\r\nstatic_assert(test_type_identity<int*>());\r\nstatic_assert(test_type_identity<const int*>());\r\nstatic_assert(test_type_identity<volatile int*>());\r\nstatic_assert(test_type_identity<const volatile int*>());\r\nstatic_assert(test_type_identity<int[3]>());\r\nstatic_assert(test_type_identity<int[]>());\r\nstatic_assert(test_type_identity<int(int)>());\r\nstatic_assert(test_type_identity<int&(int)>());\r\nstatic_assert(test_type_identity<const int&(int)>());\r\nstatic_assert(test_type_identity<volatile int&(int)>());\r\nstatic_assert(test_type_identity<const volatile int&(int)>());\r\nstatic_assert(test_type_identity<int(int&)>());\r\nstatic_assert(test_type_identity<int(const int&)>());\r\nstatic_assert(test_type_identity<int(volatile int&)>());\r\nstatic_assert(test_type_identity<int(const volatile int&)>());\r\nstatic_assert(test_type_identity<int C::*>());\r\nstatic_assert(test_type_identity<const int C::*>());\r\nstatic_assert(test_type_identity<volatile int C::*>());\r\nstatic_assert(test_type_identity<const volatile int C::*>());\r\nstatic_assert(test_type_identity<int (C::*)(int)>());\r\nstatic_assert(test_type_identity<int (C::*)(int&)>());\r\nstatic_assert(test_type_identity<int (C::*)(const int&) const>());\r\nstatic_assert(test_type_identity<int (C::*)(volatile int&) volatile>());\r\nstatic_assert(test_type_identity<int (C::*)(const volatile int&) const volatile>());\r\nstatic_assert(test_type_identity<int (C::*)(int) &>());\r\nstatic_assert(test_type_identity<int (C::*)(int) const&>());\r\nstatic_assert(test_type_identity<int (C::*)(int) &&>());\r\nstatic_assert(test_type_identity<int (C::*)(int) const&&>());\r\nstatic_assert(test_type_identity<int& (C::*) (int)>());\r\nstatic_assert(test_type_identity<const int& (C::*) (int)>());\r\nstatic_assert(test_type_identity<volatile int& (C::*) (int)>());\r\nstatic_assert(test_type_identity<const volatile int& (C::*) (int)>());\r\n\r\n// P0550R2 remove_cvref\r\ntemplate <typename T>\r\nconstexpr bool test_remove_cvref() {\r\n    STATIC_ASSERT(is_same_v<T, typename remove_cvref<T>::type>);\r\n    STATIC_ASSERT(is_same_v<T, remove_cvref_t<T>>);\r\n\r\n    if constexpr (!is_function_v<T>) {\r\n        STATIC_ASSERT(is_same_v<T, typename remove_cvref<const T>::type>);\r\n        STATIC_ASSERT(is_same_v<T, typename remove_cvref<volatile T>::type>);\r\n        STATIC_ASSERT(is_same_v<T, typename remove_cvref<const volatile T>::type>);\r\n\r\n        STATIC_ASSERT(is_same_v<T, remove_cvref_t<const T>>);\r\n        STATIC_ASSERT(is_same_v<T, remove_cvref_t<volatile T>>);\r\n        STATIC_ASSERT(is_same_v<T, remove_cvref_t<const volatile T>>);\r\n    }\r\n\r\n    if constexpr (!is_void_v<T>) {\r\n        STATIC_ASSERT(is_same_v<T, typename remove_cvref<T&>::type>);\r\n        STATIC_ASSERT(is_same_v<T, typename remove_cvref<T&&>::type>);\r\n\r\n        STATIC_ASSERT(is_same_v<T, remove_cvref_t<T&>>);\r\n        STATIC_ASSERT(is_same_v<T, remove_cvref_t<T&&>>);\r\n    }\r\n\r\n    if constexpr (!is_void_v<T> && !is_function_v<T>) {\r\n        STATIC_ASSERT(is_same_v<T, typename remove_cvref<const T&>::type>);\r\n        STATIC_ASSERT(is_same_v<T, typename remove_cvref<volatile T&>::type>);\r\n        STATIC_ASSERT(is_same_v<T, typename remove_cvref<const volatile T&>::type>);\r\n        STATIC_ASSERT(is_same_v<T, typename remove_cvref<const T&&>::type>);\r\n        STATIC_ASSERT(is_same_v<T, typename remove_cvref<volatile T&&>::type>);\r\n        STATIC_ASSERT(is_same_v<T, typename remove_cvref<const volatile T&&>::type>);\r\n\r\n        STATIC_ASSERT(is_same_v<T, remove_cvref_t<const T&>>);\r\n        STATIC_ASSERT(is_same_v<T, remove_cvref_t<volatile T&>>);\r\n        STATIC_ASSERT(is_same_v<T, remove_cvref_t<const volatile T&>>);\r\n        STATIC_ASSERT(is_same_v<T, remove_cvref_t<const T&&>>);\r\n        STATIC_ASSERT(is_same_v<T, remove_cvref_t<volatile T&&>>);\r\n        STATIC_ASSERT(is_same_v<T, remove_cvref_t<const volatile T&&>>);\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(test_remove_cvref<void>());\r\nstatic_assert(test_remove_cvref<int>());\r\nstatic_assert(test_remove_cvref<int*>());\r\nstatic_assert(test_remove_cvref<const int*>());\r\nstatic_assert(test_remove_cvref<volatile int*>());\r\nstatic_assert(test_remove_cvref<const volatile int*>());\r\nstatic_assert(test_remove_cvref<int[3]>());\r\nstatic_assert(test_remove_cvref<int[]>());\r\nstatic_assert(test_remove_cvref<int(int)>());\r\nstatic_assert(test_remove_cvref<int&(int)>());\r\nstatic_assert(test_remove_cvref<const int&(int)>());\r\nstatic_assert(test_remove_cvref<volatile int&(int)>());\r\nstatic_assert(test_remove_cvref<const volatile int&(int)>());\r\nstatic_assert(test_remove_cvref<int(int&)>());\r\nstatic_assert(test_remove_cvref<int(const int&)>());\r\nstatic_assert(test_remove_cvref<int(volatile int&)>());\r\nstatic_assert(test_remove_cvref<int(const volatile int&)>());\r\nstatic_assert(test_remove_cvref<int C::*>());\r\nstatic_assert(test_remove_cvref<const int C::*>());\r\nstatic_assert(test_remove_cvref<volatile int C::*>());\r\nstatic_assert(test_remove_cvref<const volatile int C::*>());\r\nstatic_assert(test_remove_cvref<int (C::*)(int)>());\r\nstatic_assert(test_remove_cvref<int (C::*)(int&)>());\r\nstatic_assert(test_remove_cvref<int (C::*)(const int&) const>());\r\nstatic_assert(test_remove_cvref<int (C::*)(volatile int&) volatile>());\r\nstatic_assert(test_remove_cvref<int (C::*)(const volatile int&) const volatile>());\r\nstatic_assert(test_remove_cvref<int (C::*)(int) &>());\r\nstatic_assert(test_remove_cvref<int (C::*)(int) const&>());\r\nstatic_assert(test_remove_cvref<int (C::*)(int) &&>());\r\nstatic_assert(test_remove_cvref<int (C::*)(int) const&&>());\r\nstatic_assert(test_remove_cvref<int& (C::*) (int)>());\r\nstatic_assert(test_remove_cvref<const int& (C::*) (int)>());\r\nstatic_assert(test_remove_cvref<volatile int& (C::*) (int)>());\r\nstatic_assert(test_remove_cvref<const volatile int& (C::*) (int)>());\r\n#endif // _HAS_CXX20\r\n\r\n// VSO-707437 \"<type_traits>: [Feedback] Template parameter is ambiguous after VS update\"\r\ntemplate <typename T>\r\nvoid test_VSO_707437_c(T, add_const_t<T>*) {}\r\ntemplate <typename T>\r\nvoid test_VSO_707437_v(T, add_volatile_t<T>*) {}\r\ntemplate <typename T>\r\nvoid test_VSO_707437_cv(T, add_cv_t<T>*) {}\r\n\r\n#if _HAS_CXX20\r\ntemplate <typename T>\r\nvoid test_VSO_707437_i(T, type_identity_t<T>*) {}\r\n#endif // _HAS_CXX20\r\n\r\nvoid test_VSO_707437() {\r\n    test_VSO_707437_c(11L, nullptr);\r\n    test_VSO_707437_v(11L, nullptr);\r\n    test_VSO_707437_cv(11L, nullptr);\r\n\r\n#if _HAS_CXX20\r\n    test_VSO_707437_i(11L, nullptr);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\n// VSO-781535 \"[RWC][Regression][prod/fe] WebKit failed with error C2938\"\r\n// The compiler can't track that the type __underlying_type(T) is dependent on T, and so will diagnose this definition\r\n// as ill-formed (\"'std::enable_if_t<false,void>' : Failed to specialize alias template\") if we expose the intrinsic\r\n// directly in std::underlying_type_t.\r\ntemplate <typename E, enable_if_t<is_same_v<underlying_type_t<E>, bool>>* = nullptr>\r\nconstexpr bool isValidEnum(int) {\r\n    return true;\r\n}\r\ntemplate <typename>\r\nconstexpr bool isValidEnum(long) {\r\n    return false;\r\n}\r\nenum bool_enum : bool {};\r\nenum char_enum : char {};\r\nSTATIC_ASSERT(isValidEnum<bool_enum>(0));\r\nSTATIC_ASSERT(!isValidEnum<char_enum>(0));\r\n\r\n// Let's validate that __make_integer_seq doesn't have the same problem.\r\ntemplate <typename T, enable_if_t<is_same_v<make_integer_sequence<T, 0>, integer_sequence<long long>>>* = nullptr>\r\nconstexpr bool test_make_integer_sequence(int) {\r\n    return true;\r\n}\r\ntemplate <typename>\r\nconstexpr bool test_make_integer_sequence(long) {\r\n    return false;\r\n}\r\nSTATIC_ASSERT(test_make_integer_sequence<long long>(0));\r\nSTATIC_ASSERT(!test_make_integer_sequence<char>(0));\r\n\r\n\r\n// P0340R3 SFINAE-Friendly underlying_type\r\ntemplate <typename T, typename = void>\r\nstruct HasUnderlyingTypeStruct : false_type {};\r\n\r\ntemplate <typename T>\r\nstruct HasUnderlyingTypeStruct<T, void_t<typename underlying_type<T>::type>> : true_type {};\r\n\r\nSTATIC_ASSERT(HasUnderlyingTypeStruct<ExampleEnum>::value);\r\nSTATIC_ASSERT(HasUnderlyingTypeStruct<LLEnum>::value);\r\nSTATIC_ASSERT(HasUnderlyingTypeStruct<ExampleEnumClass>::value);\r\nSTATIC_ASSERT(HasUnderlyingTypeStruct<LLEnumClass>::value);\r\n\r\nSTATIC_ASSERT(!HasUnderlyingTypeStruct<int>::value);\r\nSTATIC_ASSERT(!HasUnderlyingTypeStruct<double>::value);\r\nSTATIC_ASSERT(!HasUnderlyingTypeStruct<ExampleEnum*>::value);\r\nSTATIC_ASSERT(!HasUnderlyingTypeStruct<ExampleEnum&>::value);\r\nSTATIC_ASSERT(!HasUnderlyingTypeStruct<ExampleEnum[3]>::value);\r\nSTATIC_ASSERT(!HasUnderlyingTypeStruct<ExampleEnum (&)[3]>::value);\r\nSTATIC_ASSERT(!HasUnderlyingTypeStruct<void>::value);\r\nSTATIC_ASSERT(!HasUnderlyingTypeStruct<ExampleEnum[]>::value);\r\n\r\ntemplate <typename T, typename = void>\r\nstruct HasUnderlyingTypeAlias : false_type {};\r\n\r\ntemplate <typename T>\r\nstruct HasUnderlyingTypeAlias<T, void_t<underlying_type_t<T>>> : true_type {};\r\n\r\nSTATIC_ASSERT(HasUnderlyingTypeAlias<ExampleEnum>::value);\r\nSTATIC_ASSERT(HasUnderlyingTypeAlias<LLEnum>::value);\r\nSTATIC_ASSERT(HasUnderlyingTypeAlias<ExampleEnumClass>::value);\r\nSTATIC_ASSERT(HasUnderlyingTypeAlias<LLEnumClass>::value);\r\n\r\nSTATIC_ASSERT(!HasUnderlyingTypeAlias<int>::value);\r\nSTATIC_ASSERT(!HasUnderlyingTypeAlias<double>::value);\r\nSTATIC_ASSERT(!HasUnderlyingTypeAlias<ExampleEnum*>::value);\r\nSTATIC_ASSERT(!HasUnderlyingTypeAlias<ExampleEnum&>::value);\r\nSTATIC_ASSERT(!HasUnderlyingTypeAlias<ExampleEnum[3]>::value);\r\nSTATIC_ASSERT(!HasUnderlyingTypeAlias<ExampleEnum (&)[3]>::value);\r\nSTATIC_ASSERT(!HasUnderlyingTypeAlias<void>::value);\r\nSTATIC_ASSERT(!HasUnderlyingTypeAlias<ExampleEnum[]>::value);\r\n\r\n#if _HAS_CXX20\r\n// Test the P0898R3 changes to <type_traits>:\r\n// * Addition of common_reference and basic_common_reference\r\n// * New fallback case for common_type\r\n\r\nnamespace {\r\n    template <class, class = void>\r\n    constexpr bool is_trait = false;\r\n    template <class T>\r\n    constexpr bool is_trait<T, void_t<typename T::type>> = true;\r\n\r\n    struct move_only {\r\n        move_only()                       = default;\r\n        move_only(move_only&&)            = default;\r\n        move_only& operator=(move_only&&) = default;\r\n    };\r\n\r\n    template <class T>\r\n    struct converts_from {\r\n        converts_from() = default;\r\n        constexpr converts_from(T) noexcept {}\r\n    };\r\n\r\n    template <int>\r\n    struct interconvertible {\r\n        interconvertible() = default;\r\n        template <int N>\r\n        explicit interconvertible(interconvertible<N>) {}\r\n    };\r\n\r\n    template <class... Ts>\r\n    struct derives_from : Ts... {};\r\n\r\n    struct simple_base {};\r\n    using simple_derived = derives_from<simple_base>;\r\n} // unnamed namespace\r\n\r\ntemplate <>\r\nstruct common_type<interconvertible<0>, interconvertible<1>> {\r\n    using type = interconvertible<2>;\r\n};\r\ntemplate <>\r\nstruct common_type<interconvertible<1>, interconvertible<0>> {\r\n    using type = interconvertible<2>;\r\n};\r\n\r\n// A slightly simplified variation of std::tuple\r\ntemplate <class...>\r\nstruct tuple_ish {};\r\n\r\ntemplate <class, class, class>\r\nstruct tuple_ish_helper {};\r\ntemplate <class... Ts, class... Us>\r\nstruct tuple_ish_helper<void_t<common_reference_t<Ts, Us>...>, tuple_ish<Ts...>, tuple_ish<Us...>> {\r\n    using type = tuple_ish<common_reference_t<Ts, Us>...>;\r\n};\r\n\r\ntemplate <class... Ts, class... Us, template <class> class TQual, template <class> class UQual>\r\nstruct basic_common_reference<tuple_ish<Ts...>, tuple_ish<Us...>, TQual, UQual>\r\n    : tuple_ish_helper<void, tuple_ish<TQual<Ts>...>, tuple_ish<UQual<Us>...>> {};\r\n\r\n// N4928 [meta.trans.other]/5.1: If sizeof...(T) is zero, there shall be no member type.\r\nSTATIC_ASSERT(!is_trait<common_reference<>>);\r\n\r\n\r\n// N4928 [meta.trans.other]/5.2: Otherwise, if sizeof...(T) is one, let T0 denote the sole type in the pack T. The\r\n// member typedef type shall denote the same type as T0.\r\nSTATIC_ASSERT(is_same_v<common_reference_t<void>, void>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int>, int>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int&>, int&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int&&>, int&&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int const>, int const>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int const&>, int const&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int const&&>, int const&&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int volatile[]>, int volatile[]>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int volatile (&)[]>, int volatile (&)[]>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int volatile (&&)[]>, int volatile (&&)[]>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<void (&)()>, void (&)()>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<void (&&)()>, void (&&)()>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<void() volatile>, void() volatile>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<void() &&>, void() &&>);\r\n\r\n\r\n// N5032 [meta.trans.other]/6.3.1:\r\n// \"Let R be COMMON-REF(T1, T2). If T1 and T2 are reference types, R is well-formed, and\r\n// is_convertible_v<add_pointer_t<T1>, add_pointer_t<R>> && is_convertible_v<add_pointer_t<T2>, add_pointer_t<R>>\r\n// is true, then the member typedef type denotes R.\"\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base&, simple_derived&>, simple_base&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base&, simple_derived const&>, simple_base const&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base&, simple_derived&&>, simple_base const&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base&, simple_derived const&&>, simple_base const&>);\r\n\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base const&, simple_derived&>, simple_base const&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base const&, simple_derived const&>, simple_base const&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base const&, simple_derived&&>, simple_base const&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base const&, simple_derived const&&>, simple_base const&>);\r\n\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base&&, simple_derived&>, simple_base const&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base&&, simple_derived const&>, simple_base const&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base&&, simple_derived&&>, simple_base&&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base&&, simple_derived const&&>, simple_base const&&>);\r\n\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base const&&, simple_derived&>, simple_base const&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base const&&, simple_derived const&>, simple_base const&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base const&&, simple_derived&&>, simple_base const&&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base const&&, simple_derived const&&>, simple_base const&&>);\r\n\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int (&)(), int (&)()>, int (&)()>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int (&&)(), int (&)()>, int (&)()>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int (&)(), int (&&)()>, int (&)()>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int (&&)(), int (&&)()>, int (&&)()>);\r\n\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int const volatile&&, int volatile&&>, int const volatile&&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int&&, int const&, int volatile&>, int const volatile&>);\r\n\r\ntemplate <class T = int>\r\nconstexpr bool strict_only_common_reference_cases() {\r\n    if constexpr (!is_permissive) {\r\n        STATIC_ASSERT(is_same_v<common_reference_t<T(&)[10], T(&&)[10]>, T const(&)[10]>);\r\n        STATIC_ASSERT(is_same_v<common_reference_t<T const(&)[10], T volatile(&)[10]>, T const volatile(&)[10]>);\r\n    }\r\n\r\n    return true;\r\n}\r\nSTATIC_ASSERT(strict_only_common_reference_cases());\r\n\r\n\r\n// N4928 [meta.trans.other]/5.3.2: Otherwise, if basic_common_reference<remove_cvref_t<T1>, remove_cvref_t<T2>,\r\n// XREF(T1), XREF(T2)>::type is well-formed, then the member typedef type denotes that type.\r\nSTATIC_ASSERT(is_same_v<common_reference_t<tuple_ish<int, short> const&, tuple_ish<int&, short volatile&>>,\r\n    tuple_ish<int const&, short const volatile&>>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<tuple_ish<int, short> volatile&, tuple_ish<int, short> const&>,\r\n    tuple_ish<int, short> const volatile&>);\r\n\r\n\r\n// N4928 [meta.trans.other]/5.3.3: Otherwise, if COND_RES(T1, T2) is well-formed, then the member typedef type\r\n// denotes that type.\r\nSTATIC_ASSERT(is_same_v<common_reference_t<void, void>, void>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<void const, void>, void>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<void volatile, void>, void>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<void const volatile, void>, void>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int, short>, int>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int, short&>, int>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int&, short&>, int>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int&, short>, int>);\r\n\r\n// tricky reference-to-volatile case\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int&&, int volatile&>, int>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int volatile&, int&&>, int>);\r\n\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int (&)[10], int (&)[11]>, int*>);\r\n\r\n// https://github.com/ericniebler/stl2/issues/338\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int&, converts_from<int&>>, converts_from<int&>>);\r\n\r\n\r\n// N4928 [meta.trans.other]/5.3.4: Otherwise, if common_type_t<T1, T2> is well-formed, then the member typedef type\r\n// denotes that type.\r\nSTATIC_ASSERT(is_same_v<common_reference_t<interconvertible<0>&, interconvertible<1> const&>, interconvertible<2>>);\r\n\r\nSTATIC_ASSERT(is_same_v<common_reference_t<move_only const&, move_only>, move_only>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<derives_from<move_only> const&, move_only>, move_only>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<move_only const&, derives_from<move_only>>, move_only>);\r\n\r\n\r\n// N4928 [meta.trans.other]/5.3.5: Otherwise, there shall be no member type.\r\nSTATIC_ASSERT(!is_trait<common_reference<tuple_ish<short> volatile&, tuple_ish<int, short> const&>>);\r\n\r\nSTATIC_ASSERT(!is_trait<common_reference<void() volatile, void() volatile>>);\r\nSTATIC_ASSERT(!is_trait<common_reference<void() volatile, int>>);\r\nSTATIC_ASSERT(!is_trait<common_reference<int, void() volatile>>);\r\nSTATIC_ASSERT(!is_trait<common_reference<void() &&, void() &&>>);\r\nSTATIC_ASSERT(!is_trait<common_reference<int*, void() &&>>);\r\nSTATIC_ASSERT(!is_trait<common_reference<void() &&, int (&)()>>);\r\nSTATIC_ASSERT(!is_trait<common_reference<void() volatile, void() &&>>);\r\n\r\n\r\n// N4928 [meta.trans.other]/5.4: Otherwise, if sizeof...(T) is greater than two, let T1, T2, and Rest, respectively,\r\n// denote the first, second, and (pack of) remaining types comprising T. Let C be the type\r\n// common_reference_t<T1, T2>. Then:\r\n// N4928 [meta.trans.other]/5.4.1: If there is such a type C, the member typedef type shall denote the same type, if\r\n// any, as common_reference_t<C, Rest...>.\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int, int, int>, int>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int&&, int const&, int volatile&>, int const volatile&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int&&, int const&, float&>, float>);\r\n\r\nSTATIC_ASSERT(is_same_v<common_reference_t<simple_base&, simple_derived const&, simple_derived&>, simple_base const&>);\r\nSTATIC_ASSERT(\r\n    is_same_v<common_reference_t<simple_base&, simple_derived&, simple_base&, simple_derived&>, simple_base&>);\r\n\r\n\r\n// N4928 [meta.trans.other]/5.4.2: Otherwise, there shall be no member type.\r\nSTATIC_ASSERT(!is_trait<common_reference<int, short, int, char*>>);\r\n\r\ntemplate <class T>\r\nstruct bad_reference_wrapper {\r\n    bad_reference_wrapper(T&);\r\n    bad_reference_wrapper(T&&) = delete;\r\n    operator T&() const;\r\n};\r\n\r\n// N4928 [meta.trans.other]/3.3.4 (per the proposed resolution of LWG-3205): Otherwise, if\r\n//   remove_cvref_t<decltype(false ? declval<const D1&>() : declval<const D2&>())>\r\n// denotes a type, let C denote that type.\r\nSTATIC_ASSERT(is_same_v<common_type_t<int, bad_reference_wrapper<int>>, int>);\r\nSTATIC_ASSERT(is_same_v<common_type_t<bad_reference_wrapper<double>, double>, double>);\r\n\r\n// P2655R3 common_reference_t Of reference_wrapper Should Be A Reference Type\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int&, reference_wrapper<int>>, int&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int&, reference_wrapper<int>&>, int&>);\r\nSTATIC_ASSERT(is_same_v<common_reference_t<int&, const reference_wrapper<int>&>, int&>);\r\n#endif // _HAS_CXX20\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_vector_algorithms/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"\"\r\n*\tPM_CL=\"/D_USE_STD_VECTOR_ALGORITHMS=0\"\r\n*\tPM_CL=\"/D_CALL_ALL_X64_VECTOR_ALGORITHMS_ON_ARM64EC\"\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_vector_algorithms/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <bitset>\r\n#include <cassert>\r\n#include <climits>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <functional>\r\n#include <limits>\r\n#include <list>\r\n#include <numeric>\r\n#include <random>\r\n#include <stdexcept>\r\n#include <string>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#include <ranges>\r\n#endif // _HAS_CXX20\r\n\r\n#include <test_is_sorted_until_support.hpp>\r\n#include <test_min_max_element_support.hpp>\r\n#include <test_vector_algorithms_support.hpp>\r\n\r\nusing namespace std;\r\n\r\n#pragma warning(disable : 4984) // 'if constexpr' is a C++17 language extension\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wc++17-extensions\" // constexpr if is a C++17 extension\r\n#endif // __clang__\r\n\r\ntemplate <class InIt, class OutIt, class BinOp>\r\nOutIt last_known_good_adj_diff(InIt first, InIt last, OutIt dest, BinOp binop) {\r\n    if (first == last) {\r\n        return dest;\r\n    }\r\n\r\n    auto val = *first;\r\n    *dest    = val;\r\n\r\n    for (++first, ++dest; first != last; ++first, ++dest) {\r\n        auto tmp = *first;\r\n        *dest    = binop(tmp, val);\r\n        val      = tmp;\r\n    }\r\n\r\n    return dest;\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_adj_diff(const vector<T>& input, vector<T>& output_expected, vector<T>& output_actual) {\r\n    // Avoid truncation warnings:\r\n    const auto subtract = [](const T& left, const T& right) { return static_cast<T>(left - right); };\r\n    const auto expected = last_known_good_adj_diff(input.begin(), input.end(), output_expected.begin(), subtract);\r\n    const auto actual   = adjacent_difference(input.begin(), input.end(), output_actual.begin(), subtract);\r\n\r\n    assert(actual - output_actual.begin() == expected - output_expected.begin());\r\n    assert(output_actual == output_expected);\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_adjacent_difference(mt19937_64& gen) {\r\n    using Limits = numeric_limits<T>;\r\n\r\n    uniform_int_distribution<conditional_t<sizeof(T) == 1, int, T>> dis(\r\n        is_signed_v<T> ? static_cast<T>(Limits::min() / 2) : Limits::min(),\r\n        is_signed_v<T> ? static_cast<T>(Limits::max() / 2) : Limits::max());\r\n\r\n    vector<T> input;\r\n    vector<T> output_expected;\r\n    vector<T> output_actual;\r\n\r\n    for (const auto& v : {&input, &output_expected, &output_actual}) {\r\n        v->reserve(dataCount);\r\n    }\r\n\r\n    test_case_adj_diff(input, output_expected, output_actual);\r\n    for (size_t attempts = 0; attempts < dataCount; ++attempts) {\r\n        input.push_back(static_cast<T>(dis(gen)));\r\n\r\n        for (const auto& v : {&output_expected, &output_actual}) {\r\n            v->assign(input.size(), 0);\r\n        }\r\n\r\n        test_case_adj_diff(input, output_expected, output_actual);\r\n    }\r\n}\r\n\r\nvoid test_adjacent_difference_with_heterogeneous_types() {\r\n    const vector<unsigned char> input = {10, 70, 20, 90};\r\n    vector<int> output(4);\r\n\r\n    const auto result = adjacent_difference(input.begin(), input.end(), output.begin());\r\n    assert(result == output.end());\r\n\r\n    const vector<int> expected = {10, 60, -50, 70};\r\n    assert(output == expected);\r\n}\r\n\r\ntemplate <class FwdIt>\r\nFwdIt last_known_good_adj_find(FwdIt first, FwdIt last) {\r\n    if (first == last) {\r\n        return last;\r\n    }\r\n\r\n    auto next = first;\r\n    for (++next; next != last; ++first, ++next) {\r\n        if (*first == *next) {\r\n            return first;\r\n        }\r\n    }\r\n\r\n    return last;\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_adj_find(const vector<T>& input) {\r\n    const auto actual   = adjacent_find(input.begin(), input.end());\r\n    const auto expected = last_known_good_adj_find(input.begin(), input.end());\r\n    assert(actual == expected);\r\n\r\n#if _HAS_CXX20\r\n    const auto actual_r = ranges::adjacent_find(input);\r\n    assert(actual_r == expected);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_adjacent_find(mt19937_64& gen) {\r\n    constexpr size_t replicaCount = 4;\r\n\r\n    using Limits = numeric_limits<T>;\r\n\r\n    uniform_int_distribution<conditional_t<sizeof(T) == 1, int, T>> dis(Limits::min(), Limits::max());\r\n\r\n    vector<T> original_input;\r\n    vector<T> input;\r\n\r\n    original_input.reserve(dataCount);\r\n    input.reserve(dataCount);\r\n\r\n    test_case_adj_find(input);\r\n    for (size_t attempts = 0; attempts < dataCount; ++attempts) {\r\n        original_input.push_back(static_cast<T>(dis(gen)));\r\n        input = original_input;\r\n\r\n        test_case_adj_find(input);\r\n\r\n        if (original_input.size() > 2) {\r\n            uniform_int_distribution<size_t> pos_dis(0, original_input.size() - 2);\r\n\r\n            for (size_t replicas = 0; replicas < replicaCount; ++replicas) {\r\n                const size_t replica_pos = pos_dis(gen);\r\n                input[replica_pos]       = input[replica_pos + 1];\r\n                test_case_adj_find(input);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class FwdIt, class T>\r\nptrdiff_t last_known_good_count(FwdIt first, FwdIt last, T v) {\r\n    ptrdiff_t result = 0;\r\n    for (; first != last; ++first) {\r\n        if (*first == v) {\r\n            ++result;\r\n        }\r\n    }\r\n    return result;\r\n}\r\n\r\n\r\ntemplate <class T>\r\nvoid test_case_count(const vector<T>& input, T v) {\r\n    auto expected = last_known_good_count(input.begin(), input.end(), v);\r\n    auto actual   = count(input.begin(), input.end(), v);\r\n    assert(expected == actual);\r\n#if _HAS_CXX20\r\n    auto actual_r = ranges::count(input, v);\r\n    assert(actual_r == expected);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_count_zero(const vector<T>& input, const ptrdiff_t n) {\r\n    const auto first = input.begin();\r\n    const auto last  = first + n;\r\n\r\n    assert(count(first, last, T{0}) == n);\r\n#if _HAS_CXX20\r\n    assert(ranges::count(first, last, T{0}) == n);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_count(mt19937_64& gen) {\r\n    using TD = conditional_t<sizeof(T) == 1, int, T>;\r\n    binomial_distribution<TD> dis(10);\r\n    vector<T> input;\r\n    input.reserve(dataCount);\r\n    test_case_count(input, static_cast<T>(dis(gen)));\r\n    for (size_t attempts = 0; attempts < dataCount; ++attempts) {\r\n        input.push_back(static_cast<T>(dis(gen)));\r\n        test_case_count(input, static_cast<T>(dis(gen)));\r\n    }\r\n\r\n    {\r\n        input.assign(1'000'000, T{0});\r\n\r\n        // test that counters don't overflow\r\n        test_count_zero(input, 1'000'000);\r\n\r\n        // Test the AVX2 maximum portion followed by all possible tail lengths, for 1-byte and 2-byte elements.\r\n        // It's okay to test these lengths for other elements, or other instruction sets.\r\n        for (ptrdiff_t i = 8'160; i < 8'192; ++i) {\r\n            test_count_zero(input, i);\r\n        }\r\n\r\n        for (ptrdiff_t i = 524'272; i < 524'288; ++i) {\r\n            test_count_zero(input, i);\r\n        }\r\n\r\n        // Test a random length.\r\n        uniform_int_distribution<ptrdiff_t> len(0, 999'999);\r\n        test_count_zero(input, len(gen));\r\n    }\r\n}\r\n\r\ntemplate <class FwdIt, class T, class Pred = equal_to<>>\r\nauto last_known_good_find(FwdIt first, FwdIt last, T v, Pred pred = {}) {\r\n    for (; first != last; ++first) {\r\n        if (pred(*first, v)) {\r\n            break;\r\n        }\r\n    }\r\n    return first;\r\n}\r\n\r\ntemplate <class FwdIt, class T, class Pred = equal_to<>>\r\nauto last_known_good_find_last(FwdIt first, FwdIt last, T v, Pred pred = {}) {\r\n    FwdIt last_save = last;\r\n    for (;;) {\r\n        if (last == first) {\r\n            return last_save;\r\n        }\r\n        --last;\r\n        if (pred(*last, v)) {\r\n            return last;\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class FwdItH, class FwdItN>\r\nauto last_known_good_find_first_of(FwdItH h_first, FwdItH h_last, FwdItN n_first, FwdItN n_last) {\r\n    for (; h_first != h_last; ++h_first) {\r\n        for (FwdItN n = n_first; n != n_last; ++n) {\r\n            if (*h_first == *n) {\r\n                return h_first;\r\n            }\r\n        }\r\n    }\r\n    return h_first;\r\n}\r\n\r\ntemplate <class RanItH, class RanItN>\r\nauto last_known_good_search(RanItH h_first, RanItH h_last, RanItN n_first, RanItN n_last) {\r\n    const ptrdiff_t n_len = n_last - n_first;\r\n\r\n    for (; h_last - h_first >= n_len; ++h_first) {\r\n        bool is_equal = true;\r\n\r\n        for (ptrdiff_t i = 0; i != n_len; ++i) {\r\n            if (*(h_first + i) != *(n_first + i)) {\r\n                is_equal = false;\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (is_equal) {\r\n            return h_first;\r\n        }\r\n    }\r\n\r\n    return h_last;\r\n}\r\n\r\ntemplate <class RanItH, class RanItN>\r\nauto last_known_good_find_end(RanItH h_first, RanItH h_last, RanItN n_first, RanItN n_last) {\r\n    const ptrdiff_t n_len = n_last - n_first;\r\n\r\n    if (n_len > h_last - h_first) {\r\n        return h_last;\r\n    }\r\n\r\n    auto h_mid = h_last - n_len;\r\n\r\n    for (;;) {\r\n        bool is_equal = true;\r\n\r\n        for (ptrdiff_t i = 0; i != n_len; ++i) {\r\n            if (*(h_mid + i) != *(n_first + i)) {\r\n                is_equal = false;\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (is_equal) {\r\n            return h_mid;\r\n        }\r\n\r\n        if (h_mid == h_first) {\r\n            return h_last;\r\n        }\r\n\r\n        --h_mid;\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_find(const vector<T>& input, T v) {\r\n    auto expected = last_known_good_find(input.begin(), input.end(), v);\r\n    auto actual   = find(input.begin(), input.end(), v);\r\n    assert(expected == actual);\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_find(mt19937_64& gen) {\r\n    using TD = conditional_t<sizeof(T) == 1, int, T>;\r\n    binomial_distribution<TD> dis(10);\r\n    vector<T> input;\r\n    input.reserve(dataCount);\r\n    test_case_find(input, static_cast<T>(dis(gen)));\r\n    for (size_t attempts = 0; attempts < dataCount; ++attempts) {\r\n        input.push_back(static_cast<T>(dis(gen)));\r\n        test_case_find(input, static_cast<T>(dis(gen)));\r\n    }\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class T, size_t N>\r\nstruct NormalArrayWrapper {\r\n    T m_arr[N];\r\n};\r\n\r\n// Also test GH-4454 \"vector_algorithms.cpp: __std_find_trivial_unsized_impl assumes N-byte elements are N-aligned\"\r\n#pragma pack(push, 1)\r\ntemplate <class T, size_t N>\r\nstruct PackedArrayWrapper {\r\n    uint8_t m_ignored; // to misalign the following array\r\n    T m_arr[N];\r\n};\r\n#pragma pack(pop)\r\n\r\n// GH-4449 <xutility>: ranges::find with unreachable_sentinel / __std_find_trivial_unsized_1 gives wrong result\r\ntemplate <class T, template <class, size_t> class ArrayWrapper>\r\nvoid test_gh_4449_impl() {\r\n    constexpr T desired_val{11};\r\n    constexpr T unwanted_val{22};\r\n\r\n    ArrayWrapper<T, 256> wrapper;\r\n    auto& arr = wrapper.m_arr;\r\n\r\n    constexpr int mid1 = 64;\r\n    constexpr int mid2 = 192;\r\n\r\n    ranges::fill(arr, arr + mid1, desired_val);\r\n    ranges::fill(arr + mid1, arr + mid2, unwanted_val);\r\n    ranges::fill(arr + mid2, end(arr), desired_val);\r\n\r\n    for (int idx = mid1; idx <= mid2; ++idx) { // when idx == mid2, the value is immediately found\r\n        const auto where = ranges::find(arr + idx, unreachable_sentinel, desired_val);\r\n\r\n        assert(where == arr + mid2);\r\n\r\n        arr[idx] = desired_val; // get ready for the next iteration\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_gh_4449() {\r\n    test_gh_4449_impl<T, NormalArrayWrapper>();\r\n    test_gh_4449_impl<T, PackedArrayWrapper>();\r\n}\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\ntemplate <class T>\r\nvoid test_case_find_last(const vector<T>& input, T v) {\r\n    auto expected = last_known_good_find_last(input.begin(), input.end(), v);\r\n    auto range    = ranges::find_last(input.begin(), input.end(), v);\r\n    auto actual   = range.begin();\r\n    assert(expected == actual);\r\n    assert(range.end() == input.end());\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_find_last(mt19937_64& gen) {\r\n    using TD = conditional_t<sizeof(T) == 1, int, T>;\r\n    binomial_distribution<TD> dis(10);\r\n    vector<T> input;\r\n    input.reserve(dataCount);\r\n    test_case_find_last(input, static_cast<T>(dis(gen)));\r\n    for (size_t attempts = 0; attempts < dataCount; ++attempts) {\r\n        input.push_back(static_cast<T>(dis(gen)));\r\n        test_case_find_last(input, static_cast<T>(dis(gen)));\r\n    }\r\n}\r\n#endif // _HAS_CXX23\r\n\r\ntemplate <class T>\r\nvoid test_case_find_first_of(const vector<T>& input_haystack, const vector<T>& input_needle) {\r\n    auto expected = last_known_good_find_first_of(\r\n        input_haystack.begin(), input_haystack.end(), input_needle.begin(), input_needle.end());\r\n    auto actual = find_first_of(input_haystack.begin(), input_haystack.end(), input_needle.begin(), input_needle.end());\r\n    assert(expected == actual);\r\n#if _HAS_CXX20\r\n    auto ranges_actual = ranges::find_first_of(input_haystack, input_needle);\r\n    assert(expected == ranges_actual);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\nconstexpr size_t haystackDataCount = 200;\r\nconstexpr size_t needleDataCount   = 35;\r\n\r\ntemplate <class T>\r\nvoid test_find_first_of(mt19937_64& gen) {\r\n    using TD = conditional_t<sizeof(T) == 1, int, T>;\r\n    uniform_int_distribution<TD> dis('a', 'z');\r\n    vector<T> input_haystack;\r\n    vector<T> input_needle;\r\n    input_haystack.reserve(haystackDataCount);\r\n    input_needle.reserve(needleDataCount);\r\n\r\n    for (;;) {\r\n        input_needle.clear();\r\n\r\n        test_case_find_first_of(input_haystack, input_needle);\r\n        for (size_t attempts = 0; attempts < needleDataCount; ++attempts) {\r\n            input_needle.push_back(static_cast<T>(dis(gen)));\r\n            test_case_find_first_of(input_haystack, input_needle);\r\n        }\r\n\r\n        if (input_haystack.size() == haystackDataCount) {\r\n            break;\r\n        }\r\n\r\n        input_haystack.push_back(static_cast<T>(dis(gen)));\r\n    }\r\n}\r\n\r\ntemplate <class C1, class C2>\r\nvoid test_find_first_of_containers() {\r\n    C1 haystack{'m', 'e', 'o', 'w', 'C', 'A', 'T', 'S'};\r\n    C2 needle{'R', 'S', 'T'};\r\n    const auto result = find_first_of(haystack.begin(), haystack.end(), needle.begin(), needle.end());\r\n    assert(result == haystack.begin() + 6);\r\n#if _HAS_CXX20\r\n    const auto ranges_result = ranges::find_first_of(haystack, needle);\r\n    assert(ranges_result == haystack.begin() + 6);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_search(const vector<T>& input_haystack, const vector<T>& input_needle) {\r\n    auto expected_search =\r\n        last_known_good_search(input_haystack.begin(), input_haystack.end(), input_needle.begin(), input_needle.end());\r\n    auto actual_search = search(input_haystack.begin(), input_haystack.end(), input_needle.begin(), input_needle.end());\r\n    assert(expected_search == actual_search);\r\n\r\n    auto expected_find_end = last_known_good_find_end(\r\n        input_haystack.begin(), input_haystack.end(), input_needle.begin(), input_needle.end());\r\n    auto actual_find_end =\r\n        find_end(input_haystack.begin(), input_haystack.end(), input_needle.begin(), input_needle.end());\r\n    assert(expected_find_end == actual_find_end);\r\n#if _HAS_CXX17\r\n    auto searcher_actual = search(\r\n        input_haystack.begin(), input_haystack.end(), default_searcher{input_needle.begin(), input_needle.end()});\r\n    assert(expected_search == searcher_actual);\r\n#endif // _HAS_CXX17\r\n#if _HAS_CXX20\r\n    auto ranges_actual_search = ranges::search(input_haystack, input_needle);\r\n    assert(expected_search == begin(ranges_actual_search));\r\n    if (expected_search != input_haystack.end()) {\r\n        assert(expected_search + static_cast<ptrdiff_t>(input_needle.size()) == end(ranges_actual_search));\r\n    } else {\r\n        assert(expected_search == end(ranges_actual_search));\r\n    }\r\n\r\n    auto ranges_actual_find_end = ranges::find_end(input_haystack, input_needle);\r\n    assert(expected_find_end == begin(ranges_actual_find_end));\r\n    if (expected_find_end != input_haystack.end()) {\r\n        assert(expected_find_end + static_cast<ptrdiff_t>(input_needle.size()) == end(ranges_actual_find_end));\r\n    } else {\r\n        assert(expected_find_end == end(ranges_actual_find_end));\r\n    }\r\n#endif // _HAS_CXX20\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_search(mt19937_64& gen) {\r\n    using TD = conditional_t<sizeof(T) == 1, int, T>;\r\n    uniform_int_distribution<TD> dis('0', '9');\r\n    vector<T> input_haystack;\r\n    vector<T> input_needle;\r\n    vector<T> temp;\r\n    input_haystack.reserve(haystackDataCount);\r\n    input_needle.reserve(needleDataCount);\r\n    temp.reserve(needleDataCount);\r\n\r\n    for (;;) {\r\n        input_needle.clear();\r\n\r\n        test_case_search(input_haystack, input_needle);\r\n        for (size_t attempts = 0; attempts < needleDataCount; ++attempts) {\r\n            input_needle.push_back(static_cast<T>(dis(gen)));\r\n            test_case_search(input_haystack, input_needle);\r\n\r\n            // For large needles the chance of a match is low, so test a guaranteed match\r\n            if (input_haystack.size() > input_needle.size() * 2) {\r\n                uniform_int_distribution<size_t> pos_dis(0, input_haystack.size() - input_needle.size());\r\n                const size_t pos             = pos_dis(gen);\r\n                const auto overwritten_first = input_haystack.begin() + static_cast<ptrdiff_t>(pos);\r\n                temp.assign(overwritten_first, overwritten_first + static_cast<ptrdiff_t>(input_needle.size()));\r\n                copy(input_needle.begin(), input_needle.end(), overwritten_first);\r\n                test_case_search(input_haystack, input_needle);\r\n                copy(temp.begin(), temp.end(), overwritten_first);\r\n            }\r\n        }\r\n\r\n        if (input_haystack.size() == haystackDataCount) {\r\n            break;\r\n        }\r\n\r\n        input_haystack.push_back(static_cast<T>(dis(gen)));\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_min_max_element(mt19937_64& gen) {\r\n    using Limits = numeric_limits<T>;\r\n\r\n    uniform_int_distribution<conditional_t<sizeof(T) == 1, int, T>> dis(Limits::min(), Limits::max());\r\n\r\n    vector<T> input;\r\n    input.reserve(dataCount);\r\n    test_case_min_max_element(input);\r\n    for (size_t attempts = 0; attempts < dataCount; ++attempts) {\r\n        input.push_back(static_cast<T>(dis(gen)));\r\n        test_case_min_max_element(input);\r\n    }\r\n}\r\n\r\nvoid test_min_max_element_pointers(mt19937_64& gen) {\r\n    const short arr[20]{};\r\n\r\n    uniform_int_distribution<size_t> dis(0, size(arr) - 1);\r\n\r\n    vector<const short*> input;\r\n    input.reserve(dataCount);\r\n    test_case_min_max_element(input);\r\n    for (size_t attempts = 0; attempts < dataCount; ++attempts) {\r\n        input.push_back(arr + dis(gen));\r\n        test_case_min_max_element(input);\r\n    }\r\n}\r\n\r\ntemplate <class ElementType, size_t VectorSize>\r\nvoid test_min_max_element_special_cases() {\r\n    constexpr size_t block_size_in_vectors  = 1 << (sizeof(ElementType) * CHAR_BIT);\r\n    constexpr size_t block_size_in_elements = block_size_in_vectors * VectorSize;\r\n    constexpr size_t num_blocks             = 4;\r\n    constexpr size_t tail_size              = 13;\r\n    constexpr size_t array_size             = num_blocks * block_size_in_elements + tail_size;\r\n    constexpr size_t last_block_first_elem  = (num_blocks - 1) * block_size_in_elements;\r\n    constexpr size_t last_vector_first_elem = (block_size_in_vectors - 1) * VectorSize;\r\n\r\n    vector<ElementType> v(array_size); // not array to avoid large data on stack\r\n\r\n    // all equal\r\n    fill(v.begin(), v.end(), ElementType{1});\r\n    assert(min_element(v.begin(), v.end()) == v.begin());\r\n    assert(max_element(v.begin(), v.end()) == v.begin());\r\n    assert(minmax_element(v.begin(), v.end()).first == v.begin());\r\n    assert(minmax_element(v.begin(), v.end()).second == v.end() - 1);\r\n\r\n    // same position in different blocks\r\n    fill(v.begin(), v.end(), ElementType{1});\r\n    for (size_t block_pos = 0; block_pos != num_blocks; ++block_pos) {\r\n        v[block_pos * block_size_in_elements + 20 * VectorSize + 2] = 0;\r\n        v[block_pos * block_size_in_elements + 20 * VectorSize + 5] = 0;\r\n        v[block_pos * block_size_in_elements + 25 * VectorSize + 6] = 2;\r\n        v[block_pos * block_size_in_elements + 25 * VectorSize + 9] = 2;\r\n    }\r\n    assert(min_element(v.begin(), v.end()) == v.begin() + 20 * VectorSize + 2);\r\n    assert(max_element(v.begin(), v.end()) == v.begin() + 25 * VectorSize + 6);\r\n    assert(minmax_element(v.begin(), v.end()).first == v.begin() + 20 * VectorSize + 2);\r\n    assert(minmax_element(v.begin(), v.end()).second == v.begin() + last_block_first_elem + 25 * VectorSize + 9);\r\n\r\n\r\n    // same block in different vectors\r\n    fill(v.begin(), v.end(), ElementType{1});\r\n    for (size_t vector_pos = 0; vector_pos != block_size_in_vectors; ++vector_pos) {\r\n        v[2 * block_size_in_elements + vector_pos * VectorSize + 2] = 0;\r\n        v[2 * block_size_in_elements + vector_pos * VectorSize + 5] = 0;\r\n        v[2 * block_size_in_elements + vector_pos * VectorSize + 6] = 2;\r\n        v[2 * block_size_in_elements + vector_pos * VectorSize + 9] = 2;\r\n    }\r\n    assert(min_element(v.begin(), v.end()) == v.begin() + 2 * block_size_in_elements + 2);\r\n    assert(max_element(v.begin(), v.end()) == v.begin() + 2 * block_size_in_elements + 6);\r\n    assert(minmax_element(v.begin(), v.end()).first == v.begin() + 2 * block_size_in_elements + 2);\r\n    assert(minmax_element(v.begin(), v.end()).second\r\n           == v.begin() + 2 * block_size_in_elements + last_vector_first_elem + 9);\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_is_sorted_until(mt19937_64& gen) {\r\n    using Limits = numeric_limits<T>;\r\n\r\n    uniform_int_distribution<conditional_t<sizeof(T) == 1, int, T>> dis(Limits::min(), Limits::max());\r\n\r\n    vector<T> original_input;\r\n    vector<T> input;\r\n    original_input.reserve(dataCount);\r\n    input.reserve(dataCount);\r\n\r\n    test_case_is_sorted_until(input, less<>{});\r\n    test_case_is_sorted_until(input, greater<>{});\r\n\r\n    for (size_t attempts = 0; attempts < dataCount; ++attempts) {\r\n        original_input.push_back(static_cast<T>(dis(gen)));\r\n        input = original_input;\r\n\r\n        uniform_int_distribution<ptrdiff_t> pos_dis{0, static_cast<ptrdiff_t>(input.size() - 1)};\r\n        auto it = input.begin() + pos_dis(gen);\r\n\r\n        sort(input.begin(), it, less<>{});\r\n        test_case_is_sorted_until(input, less<>{});\r\n\r\n        reverse(input.begin(), it);\r\n        test_case_is_sorted_until(input, greater<>{});\r\n    }\r\n}\r\n\r\n#if _HAS_CXX17\r\ntemplate <class InIt1, class InIt2>\r\nbool last_known_good_includes(InIt1 first1, InIt1 last1, InIt2 first2, InIt2 last2) {\r\n    while (first2 != last2) {\r\n        if (first1 == last1 || *first2 < *first1) {\r\n            return false;\r\n        }\r\n\r\n        if (!(*first1 < *first2)) {\r\n            ++first2;\r\n        }\r\n\r\n        ++first1;\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_includes(const vector<T>& hay, const vector<T>& needle) {\r\n    const bool expected = last_known_good_includes(hay.begin(), hay.end(), needle.begin(), needle.end());\r\n    const bool actual   = includes(hay.begin(), hay.end(), needle.begin(), needle.end());\r\n    assert(expected == actual);\r\n#if _HAS_CXX20\r\n    const bool actual_r = ranges::includes(hay, needle);\r\n    assert(expected == actual_r);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_includes(mt19937_64& gen) {\r\n    using Limits = numeric_limits<T>;\r\n\r\n    uniform_int_distribution<conditional_t<sizeof(T) == 1, int, T>> dis(Limits::min(), Limits::max());\r\n\r\n    vector<T> sorted_random_data(dataCount);\r\n    generate(sorted_random_data.begin(), sorted_random_data.end(), [&dis, &gen] { return static_cast<T>(dis(gen)); });\r\n    sort(sorted_random_data.begin(), sorted_random_data.end());\r\n\r\n    vector<T> hay;\r\n    vector<T> needle;\r\n    hay.reserve(dataCount);\r\n    needle.reserve(dataCount + 1);\r\n\r\n    test_case_includes(hay, needle);\r\n\r\n    for (size_t attempts = 0; attempts < dataCount; ++attempts) {\r\n        hay.push_back(sorted_random_data[attempts]);\r\n\r\n        uniform_int_distribution<size_t> len_dis(0, hay.size());\r\n\r\n        for (size_t needle_length = 0; needle_length < 4; ++needle_length) {\r\n            needle.resize(len_dis(gen));\r\n            sample(hay.begin(), hay.end(), needle.begin(), needle.size(), gen);\r\n            test_case_includes(hay, needle);\r\n\r\n            // Look for an additional random element, typically (but not always) resulting in a negative test.\r\n            needle.push_back(static_cast<T>(dis(gen)));\r\n            sort(needle.begin(), needle.end());\r\n            test_case_includes(hay, needle);\r\n        }\r\n    }\r\n}\r\n#endif // _HAS_CXX17\r\n\r\ntemplate <class FwdIt, class T>\r\nvoid last_known_good_replace(FwdIt first, FwdIt last, const T old_val, const T new_val) {\r\n    for (; first != last; ++first) {\r\n        if (*first == old_val) {\r\n            *first = new_val;\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class FwdIt, class OutIt, class T>\r\nvoid last_known_good_replace_copy(FwdIt first, FwdIt last, OutIt dest, const T old_val, const T new_val) {\r\n    for (; first != last; ++first, ++dest) {\r\n        if (*first == old_val) {\r\n            *dest = new_val;\r\n        } else {\r\n            *dest = *first;\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_replace(vector<T>& in_out_expected, vector<T>& in_out_actual, vector<T>& in_out_actual_r,\r\n    const T old_val, const T new_val) {\r\n    replace(in_out_actual.begin(), in_out_actual.end(), old_val, new_val);\r\n    last_known_good_replace(in_out_expected.begin(), in_out_expected.end(), old_val, new_val);\r\n    assert(in_out_expected == in_out_actual);\r\n\r\n#if _HAS_CXX20\r\n    ranges::replace(in_out_actual_r, old_val, new_val);\r\n    assert(in_out_expected == in_out_actual_r);\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    (void) in_out_actual_r;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_replace_copy(const vector<T>& input, vector<T>& out_expected, vector<T>& out_actual,\r\n    vector<T>& out_actual_r, const T old_val, const T new_val) {\r\n\r\n    replace_copy(input.begin(), input.end(), out_actual.begin(), old_val, new_val);\r\n    last_known_good_replace_copy(input.begin(), input.end(), out_expected.begin(), old_val, new_val);\r\n    assert(out_expected == out_actual);\r\n\r\n#if _HAS_CXX20\r\n    ranges::replace_copy(input, out_actual_r.begin(), old_val, new_val);\r\n    assert(out_expected == out_actual_r);\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    (void) out_actual_r;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_replace(mt19937_64& gen) {\r\n    // replace() is vectorized for 4 and 8 bytes only.\r\n    constexpr bool replace_is_vectorized = sizeof(T) >= 4;\r\n\r\n    using TD = conditional_t<sizeof(T) == 1, int, T>;\r\n    uniform_int_distribution<TD> dis(0, 9);\r\n\r\n    vector<T> source;\r\n    vector<T> out_expected;\r\n    vector<T> out_actual;\r\n    vector<T> out_actual_r;\r\n    vector<T> in_out_expected;\r\n    vector<T> in_out_actual;\r\n    vector<T> in_out_actual_r;\r\n\r\n    for (const auto& v : {&source, &out_expected, &out_actual, &out_actual_r}) {\r\n        v->reserve(dataCount);\r\n    }\r\n\r\n    if constexpr (replace_is_vectorized) {\r\n        for (const auto& v : {&in_out_expected, &in_out_actual, &in_out_actual_r}) {\r\n            v->reserve(dataCount);\r\n        }\r\n    }\r\n\r\n    {\r\n        const T old_val = static_cast<T>(dis(gen));\r\n        const T new_val = static_cast<T>(dis(gen));\r\n\r\n        if constexpr (replace_is_vectorized) {\r\n            test_case_replace(in_out_expected, in_out_actual, in_out_actual_r, old_val, new_val);\r\n        }\r\n        test_case_replace_copy(source, out_expected, out_actual, out_actual_r, old_val, new_val);\r\n    }\r\n\r\n    for (size_t attempts = 0; attempts < dataCount; ++attempts) {\r\n        source.push_back(static_cast<T>(dis(gen)));\r\n        const T old_val = static_cast<T>(dis(gen));\r\n        const T new_val = static_cast<T>(dis(gen));\r\n\r\n        for (const auto& v : {&in_out_expected, &in_out_actual, &in_out_actual_r}) {\r\n            *v = source;\r\n        }\r\n\r\n        for (const auto& v : {&out_expected, &out_actual, &out_actual_r}) {\r\n            v->assign(source.size(), T{0});\r\n        }\r\n\r\n        if constexpr (replace_is_vectorized) {\r\n            test_case_replace(in_out_expected, in_out_actual, in_out_actual_r, old_val, new_val);\r\n        }\r\n        test_case_replace_copy(source, out_expected, out_actual, out_actual_r, old_val, new_val);\r\n    }\r\n}\r\n\r\ntemplate <class BidIt>\r\nvoid last_known_good_reverse(BidIt first, BidIt last) {\r\n    for (; first != last && first != --last; ++first) {\r\n        iter_swap(first, last);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_reverse(vector<T>& actual, vector<T>& expected) {\r\n    expected = actual;\r\n    last_known_good_reverse(expected.begin(), expected.end());\r\n    reverse(actual.begin(), actual.end());\r\n    assert(expected == actual);\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_reverse(mt19937_64& gen) {\r\n    vector<T> actual;\r\n    vector<T> expected;\r\n    actual.reserve(dataCount);\r\n    expected.reserve(dataCount);\r\n    test_case_reverse(actual, expected);\r\n    for (size_t attempts = 0; attempts < dataCount; ++attempts) {\r\n        actual.push_back(static_cast<T>(gen())); // intentionally narrows\r\n        test_case_reverse(actual, expected);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_reverse_copy(vector<T>& input) {\r\n    auto expected = input;\r\n    last_known_good_reverse(expected.begin(), expected.end());\r\n    vector<T> output(input.size(), T{});\r\n    assert(reverse_copy(input.begin(), input.end(), output.begin()) == output.end());\r\n    assert(expected == output);\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_reverse_copy(mt19937_64& gen) {\r\n    vector<T> input;\r\n    input.reserve(dataCount);\r\n    test_case_reverse_copy(input);\r\n    for (size_t attempts = 0; attempts < dataCount; ++attempts) {\r\n        input.push_back(static_cast<T>(gen())); // intentionally narrows\r\n        test_case_reverse_copy(input);\r\n    }\r\n}\r\n\r\ntemplate <class RanIt>\r\nvoid last_known_good_rotate(\r\n    RanIt first, RanIt mid, RanIt last, vector<typename iterator_traits<RanIt>::value_type>& tmp) {\r\n    const auto size_left  = mid - first;\r\n    const auto size_right = last - mid;\r\n    if (size_left <= size_right) {\r\n        tmp.assign(first, mid);\r\n        move_backward(mid, last, last - size_left);\r\n        move(tmp.begin(), tmp.end(), last - size_left);\r\n    } else {\r\n        tmp.assign(mid, last);\r\n        move(first, mid, first + size_right);\r\n        move(tmp.begin(), tmp.end(), first);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_rotate(\r\n    vector<T>& actual, vector<T>& actual_r, vector<T>& expected, const ptrdiff_t pos, vector<T>& tmp) {\r\n    const ptrdiff_t shift = static_cast<ptrdiff_t>(expected.size()) - pos;\r\n    last_known_good_rotate(expected.begin(), expected.begin() + pos, expected.end(), tmp);\r\n    const auto it = rotate(actual.begin(), actual.begin() + pos, actual.end());\r\n    assert(expected == actual);\r\n    assert(it == actual.begin() + shift);\r\n#if _HAS_CXX20\r\n    const auto rng = ranges::rotate(actual_r.begin(), actual_r.begin() + pos, actual_r.end());\r\n    assert(expected == actual_r);\r\n    assert(begin(rng) == actual_r.begin() + shift);\r\n    assert(end(rng) == actual_r.end());\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    (void) actual_r;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_rotate(mt19937_64& gen, const size_t data_count = dataCount) {\r\n    vector<T> actual;\r\n    vector<T> actual_r;\r\n    vector<T> expected;\r\n    vector<T> tmp;\r\n    actual.reserve(data_count);\r\n    actual_r.reserve(data_count);\r\n    expected.reserve(data_count);\r\n    tmp.reserve(data_count);\r\n    test_case_rotate(actual, actual_r, expected, 0, tmp);\r\n    for (size_t attempts = 0; attempts < data_count; ++attempts) {\r\n        const T val = static_cast<T>(gen()); // intentionally narrows\r\n        actual.push_back(val);\r\n        actual_r.push_back(val);\r\n        expected.push_back(val);\r\n\r\n        uniform_int_distribution<ptrdiff_t> dis_pos(0, static_cast<ptrdiff_t>(attempts) + 1);\r\n\r\n        for (size_t pos_count = 0; pos_count != 5; ++pos_count) {\r\n            test_case_rotate(actual, actual_r, expected, dis_pos(gen), tmp);\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class FwdIt1, class FwdIt2>\r\nFwdIt2 last_known_good_swap_ranges(FwdIt1 first1, const FwdIt1 last1, FwdIt2 dest) {\r\n    for (; first1 != last1; ++first1, ++dest) {\r\n        iter_swap(first1, dest);\r\n    }\r\n\r\n    return dest;\r\n}\r\n\r\ntemplate <class FwdIt, class T>\r\nFwdIt last_known_good_remove(FwdIt first, FwdIt last, T val) {\r\n    FwdIt dest = first;\r\n\r\n    while (first != last) {\r\n        if (*first != val) {\r\n            *dest = *first;\r\n            ++dest;\r\n        }\r\n\r\n        ++first;\r\n    }\r\n\r\n    return dest;\r\n}\r\n\r\ntemplate <class InIt, class OutIt, class T>\r\nOutIt last_known_good_remove_copy(InIt first, InIt last, OutIt dest, T val) {\r\n    while (first != last) {\r\n        if (*first != val) {\r\n            *dest = *first;\r\n            ++dest;\r\n        }\r\n\r\n        ++first;\r\n    }\r\n\r\n    return dest;\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_remove(vector<T>& in_out_expected, vector<T>& in_out_actual, vector<T>& in_out_actual_r, const T val) {\r\n    auto rem_expected = last_known_good_remove(in_out_expected.begin(), in_out_expected.end(), val);\r\n    auto rem_actual   = remove(in_out_actual.begin(), in_out_actual.end(), val);\r\n    assert(equal(in_out_expected.begin(), rem_expected, in_out_actual.begin(), rem_actual));\r\n\r\n#if _HAS_CXX20\r\n    auto rem_actual_r = ranges::remove(in_out_actual_r, val);\r\n    assert(equal(in_out_expected.begin(), rem_expected, begin(in_out_actual_r), begin(rem_actual_r)));\r\n    assert(end(rem_actual_r) == in_out_actual_r.end());\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    (void) in_out_actual_r;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_remove_copy(\r\n    const vector<T>& source, vector<T>& out_expected, vector<T>& out_actual, vector<T>& out_actual_r, const T val) {\r\n    auto rem_expected = last_known_good_remove_copy(source.begin(), source.end(), out_expected.begin(), val);\r\n    auto rem_actual   = remove_copy(source.begin(), source.end(), out_actual.begin(), val);\r\n    assert(equal(out_expected.begin(), rem_expected, out_actual.begin(), rem_actual));\r\n    assert(equal(rem_expected, out_expected.end(), rem_actual, out_actual.end()));\r\n\r\n#if _HAS_CXX20\r\n    auto rem_actual_r = ranges::remove_copy(source, out_actual_r.begin(), val);\r\n    assert(equal(out_expected.begin(), rem_expected, out_actual_r.begin(), rem_actual_r.out));\r\n    assert(equal(rem_expected, out_expected.end(), rem_actual_r.out, out_actual_r.end()));\r\n    assert(rem_actual_r.in == source.end());\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    (void) out_actual_r;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_remove(mt19937_64& gen) {\r\n    using TD = conditional_t<sizeof(T) == 1, int, T>;\r\n    binomial_distribution<TD> dis(10);\r\n\r\n    vector<T> source;\r\n    vector<T> out_expected;\r\n    vector<T> out_actual;\r\n    vector<T> out_actual_r;\r\n    vector<T> in_out_expected;\r\n    vector<T> in_out_actual;\r\n    vector<T> in_out_actual_r;\r\n\r\n    for (const auto& v :\r\n        {&source, &in_out_expected, &in_out_actual, &in_out_actual_r, &out_expected, &out_actual, &out_actual_r}) {\r\n        v->reserve(dataCount);\r\n    }\r\n\r\n    test_case_remove(in_out_expected, in_out_actual, in_out_actual_r, static_cast<T>(dis(gen)));\r\n    test_case_remove_copy(source, out_expected, out_actual, out_actual_r, static_cast<T>(dis(gen)));\r\n\r\n    for (size_t attempts = 0; attempts < dataCount; ++attempts) {\r\n        source.push_back(static_cast<T>(dis(gen)));\r\n\r\n        for (const auto& v : {&in_out_expected, &in_out_actual, &in_out_actual_r}) {\r\n            *v = source;\r\n        }\r\n\r\n        for (const auto& v : {&out_expected, &out_actual, &out_actual_r}) {\r\n            v->assign(source.size(), T{0});\r\n        }\r\n\r\n        test_case_remove(in_out_expected, in_out_actual, in_out_actual_r, static_cast<T>(dis(gen)));\r\n        test_case_remove_copy(source, out_expected, out_actual, out_actual_r, static_cast<T>(dis(gen)));\r\n    }\r\n}\r\n\r\ntemplate <class FwdIt>\r\nFwdIt last_known_good_unique(FwdIt first, FwdIt last) {\r\n    if (first == last) {\r\n        return first;\r\n    }\r\n\r\n    FwdIt dest = first;\r\n    ++first;\r\n\r\n    while (first != last) {\r\n        if (*first != *dest) {\r\n            ++dest;\r\n            *dest = *first;\r\n        }\r\n\r\n        ++first;\r\n    }\r\n\r\n    ++dest;\r\n    return dest;\r\n}\r\n\r\ntemplate <class FwdItIn, class FwdItOut>\r\nFwdItOut last_known_good_unique_copy(FwdItIn first, FwdItIn last, FwdItOut dest) {\r\n    if (first == last) {\r\n        return dest;\r\n    }\r\n\r\n    *dest = *first;\r\n    ++first;\r\n\r\n    while (first != last) {\r\n        if (*first != *dest) {\r\n            ++dest;\r\n            *dest = *first;\r\n        }\r\n\r\n        ++first;\r\n    }\r\n\r\n    ++dest;\r\n    return dest;\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_unique(vector<T>& in_out_expected, vector<T>& in_out_actual, vector<T>& in_out_actual_r) {\r\n    auto un_expected = last_known_good_unique(in_out_expected.begin(), in_out_expected.end());\r\n    auto un_actual   = unique(in_out_actual.begin(), in_out_actual.end());\r\n    assert(equal(in_out_expected.begin(), un_expected, in_out_actual.begin(), un_actual));\r\n\r\n#if _HAS_CXX20\r\n    auto un_actual_r = ranges::unique(in_out_actual_r);\r\n    assert(equal(in_out_expected.begin(), un_expected, begin(in_out_actual_r), begin(un_actual_r)));\r\n    assert(end(un_actual_r) == in_out_actual_r.end());\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    (void) in_out_actual_r;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_unique_copy(\r\n    const vector<T>& source, vector<T>& out_expected, vector<T>& out_actual, vector<T>& out_actual_r) {\r\n    auto un_expected = last_known_good_unique_copy(source.begin(), source.end(), out_expected.begin());\r\n    auto un_actual   = unique_copy(source.begin(), source.end(), out_actual.begin());\r\n    assert(equal(out_expected.begin(), un_expected, out_actual.begin(), un_actual));\r\n    assert(equal(un_expected, out_expected.end(), un_actual, out_actual.end()));\r\n\r\n#if _HAS_CXX20\r\n    auto un_actual_r = ranges::unique_copy(source, out_actual_r.begin());\r\n    assert(equal(out_expected.begin(), un_expected, out_actual_r.begin(), un_actual_r.out));\r\n    assert(equal(un_expected, out_expected.end(), un_actual_r.out, out_actual_r.end()));\r\n    assert(un_actual_r.in == source.end());\r\n#else // ^^^ _HAS_CXX20 / !_HAS_CXX20 vvv\r\n    (void) out_actual_r;\r\n#endif // ^^^ !_HAS_CXX20 ^^^\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_unique(mt19937_64& gen) {\r\n    constexpr int number_of_values = 5;\r\n\r\n    struct unused_t {};\r\n\r\n    conditional_t<is_pointer_v<T>, array<remove_pointer_t<T>, number_of_values>, unused_t> ptr_val_array{};\r\n\r\n    using TD = conditional_t<sizeof(T) == 1 || is_pointer_v<T>, int, T>;\r\n    binomial_distribution<TD> dis(number_of_values);\r\n\r\n    vector<T> source;\r\n    vector<T> out_expected;\r\n    vector<T> out_actual;\r\n    vector<T> out_actual_r;\r\n    vector<T> in_out_expected;\r\n    vector<T> in_out_actual;\r\n    vector<T> in_out_actual_r;\r\n\r\n    for (const auto& v :\r\n        {&source, &in_out_expected, &in_out_actual, &in_out_actual_r, &out_expected, &out_actual, &out_actual_r}) {\r\n        v->reserve(dataCount);\r\n    }\r\n\r\n    test_case_unique(in_out_expected, in_out_actual, in_out_actual_r);\r\n    test_case_unique_copy(source, out_expected, out_actual, out_actual_r);\r\n    for (size_t attempts = 0; attempts < dataCount; ++attempts) {\r\n        if constexpr (is_pointer_v<T>) {\r\n            source.push_back(ptr_val_array.data() + dis(gen));\r\n        } else {\r\n            source.push_back(static_cast<T>(dis(gen)));\r\n        }\r\n\r\n        for (const auto& v : {&in_out_expected, &in_out_actual, &in_out_actual_r}) {\r\n            *v = source;\r\n        }\r\n\r\n        for (const auto& v : {&out_expected, &out_actual, &out_actual_r}) {\r\n            v->assign(source.size(), T{0});\r\n        }\r\n\r\n        test_case_unique(in_out_expected, in_out_actual, in_out_actual_r);\r\n        test_case_unique_copy(source, out_expected, out_actual, out_actual_r);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_swap_ranges(mt19937_64& gen) {\r\n    const auto fn = [&]() { return static_cast<T>(gen()); };\r\n    vector<T> left(dataCount);\r\n    vector<T> right(dataCount);\r\n    generate(left.begin(), left.end(), fn);\r\n    generate(right.begin(), right.end(), fn);\r\n\r\n    auto leftCopy  = left;\r\n    auto rightCopy = right;\r\n\r\n    for (ptrdiff_t attempts = 0; attempts < static_cast<ptrdiff_t>(dataCount); ++attempts) {\r\n        assert(right.begin() + attempts == swap_ranges(left.begin(), left.begin() + attempts, right.begin()));\r\n        last_known_good_swap_ranges(leftCopy.begin(), leftCopy.begin() + attempts, rightCopy.begin());\r\n        assert(left == leftCopy);\r\n        assert(right == rightCopy);\r\n\r\n        // also test unaligned input\r\n        const auto endOffset = min(static_cast<ptrdiff_t>(dataCount), attempts + 1);\r\n        assert(\r\n            right.begin() + (endOffset - 1) == swap_ranges(left.begin() + 1, left.begin() + endOffset, right.begin()));\r\n        last_known_good_swap_ranges(leftCopy.begin() + 1, leftCopy.begin() + endOffset, rightCopy.begin());\r\n        assert(left == leftCopy);\r\n        assert(right == rightCopy);\r\n    }\r\n}\r\n\r\n// GH-2683 \"std::swap of arrays, why is there no specialization for trivial types\"\r\ntemplate <class T, size_t N>\r\nvoid test_swap_arrays(mt19937_64& gen) {\r\n    const auto fn = [&]() { return static_cast<T>(gen()); };\r\n    T left[N];\r\n    T right[N];\r\n    generate(begin(left), end(left), fn);\r\n    generate(begin(right), end(right), fn);\r\n\r\n    const vector<T> origLeft(begin(left), end(left));\r\n    const vector<T> origRight(begin(right), end(right));\r\n\r\n    swap(left, right);\r\n\r\n    assert(equal(begin(left), end(left), origRight.begin(), origRight.end()));\r\n    assert(equal(begin(right), end(right), origLeft.begin(), origLeft.end()));\r\n\r\n#if _HAS_CXX20\r\n    ranges::swap(left, right);\r\n\r\n    assert(equal(begin(left), end(left), origLeft.begin(), origLeft.end()));\r\n    assert(equal(begin(right), end(right), origRight.begin(), origRight.end()));\r\n#endif // _HAS_CXX20\r\n}\r\n\r\nvoid test_vector_algorithms(mt19937_64& gen) {\r\n    test_adjacent_difference<char>(gen);\r\n    test_adjacent_difference<signed char>(gen);\r\n    test_adjacent_difference<unsigned char>(gen);\r\n    test_adjacent_difference<short>(gen);\r\n    test_adjacent_difference<unsigned short>(gen);\r\n    test_adjacent_difference<int>(gen);\r\n    test_adjacent_difference<unsigned int>(gen);\r\n    test_adjacent_difference<long long>(gen);\r\n    test_adjacent_difference<unsigned long long>(gen);\r\n\r\n    test_adjacent_difference_with_heterogeneous_types();\r\n\r\n    test_adjacent_find<char>(gen);\r\n    test_adjacent_find<signed char>(gen);\r\n    test_adjacent_find<unsigned char>(gen);\r\n    test_adjacent_find<short>(gen);\r\n    test_adjacent_find<unsigned short>(gen);\r\n    test_adjacent_find<int>(gen);\r\n    test_adjacent_find<unsigned int>(gen);\r\n    test_adjacent_find<long long>(gen);\r\n    test_adjacent_find<unsigned long long>(gen);\r\n\r\n    test_count<char>(gen);\r\n    test_count<signed char>(gen);\r\n    test_count<unsigned char>(gen);\r\n    test_count<short>(gen);\r\n    test_count<unsigned short>(gen);\r\n    test_count<int>(gen);\r\n    test_count<unsigned int>(gen);\r\n    test_count<long long>(gen);\r\n    test_count<unsigned long long>(gen);\r\n\r\n    test_find<char>(gen);\r\n    test_find<signed char>(gen);\r\n    test_find<unsigned char>(gen);\r\n    test_find<short>(gen);\r\n    test_find<unsigned short>(gen);\r\n    test_find<int>(gen);\r\n    test_find<unsigned int>(gen);\r\n    test_find<long long>(gen);\r\n    test_find<unsigned long long>(gen);\r\n\r\n#if _HAS_CXX20\r\n    test_gh_4449<uint8_t>();\r\n    test_gh_4449<uint16_t>();\r\n    test_gh_4449<uint32_t>();\r\n    test_gh_4449<uint64_t>();\r\n#endif // _HAS_CXX20\r\n\r\n#if _HAS_CXX23\r\n    test_find_last<char>(gen);\r\n    test_find_last<signed char>(gen);\r\n    test_find_last<unsigned char>(gen);\r\n    test_find_last<short>(gen);\r\n    test_find_last<unsigned short>(gen);\r\n    test_find_last<int>(gen);\r\n    test_find_last<unsigned int>(gen);\r\n    test_find_last<long long>(gen);\r\n    test_find_last<unsigned long long>(gen);\r\n#endif // _HAS_CXX23\r\n\r\n    test_find_first_of<char>(gen);\r\n    test_find_first_of<signed char>(gen);\r\n    test_find_first_of<unsigned char>(gen);\r\n    test_find_first_of<short>(gen);\r\n    test_find_first_of<unsigned short>(gen);\r\n    test_find_first_of<int>(gen);\r\n    test_find_first_of<unsigned int>(gen);\r\n    test_find_first_of<long long>(gen);\r\n    test_find_first_of<unsigned long long>(gen);\r\n\r\n    test_find_first_of_containers<vector<char>, vector<signed char>>();\r\n    test_find_first_of_containers<vector<char>, vector<unsigned char>>();\r\n    test_find_first_of_containers<vector<wchar_t>, vector<char>>();\r\n    test_find_first_of_containers<const vector<char>, const vector<char>>();\r\n    test_find_first_of_containers<vector<char>, const vector<char>>();\r\n    test_find_first_of_containers<const vector<wchar_t>, vector<wchar_t>>();\r\n    test_find_first_of_containers<vector<char>, vector<int>>();\r\n\r\n    test_search<char>(gen);\r\n    test_search<signed char>(gen);\r\n    test_search<unsigned char>(gen);\r\n    test_search<short>(gen);\r\n    test_search<unsigned short>(gen);\r\n    test_search<int>(gen);\r\n    test_search<unsigned int>(gen);\r\n    test_search<long long>(gen);\r\n    test_search<unsigned long long>(gen);\r\n\r\n    test_min_max_element<char>(gen);\r\n    test_min_max_element<signed char>(gen);\r\n    test_min_max_element<unsigned char>(gen);\r\n    test_min_max_element<short>(gen);\r\n    test_min_max_element<unsigned short>(gen);\r\n    test_min_max_element<int>(gen);\r\n    test_min_max_element<unsigned int>(gen);\r\n    test_min_max_element<long long>(gen);\r\n    test_min_max_element<unsigned long long>(gen);\r\n\r\n    test_min_max_element_pointers(gen);\r\n\r\n    test_min_max_element_special_cases<int8_t, 16>(); // SSE2 vectors\r\n    test_min_max_element_special_cases<int8_t, 32>(); // AVX2 vectors\r\n    test_min_max_element_special_cases<int8_t, 64>(); // AVX512 vectors\r\n\r\n    // Test VSO-1558536, a regression caused by GH-2447 that was specific to 64-bit types on x86.\r\n    test_case_min_max_element(vector<uint64_t>{10, 0x8000'0000ULL, 20, 30});\r\n    test_case_min_max_element(vector<uint64_t>{10, 20, 0xD000'0000'B000'0000ULL, 30, 0xC000'0000'A000'0000ULL});\r\n    test_case_min_max_element(vector<int64_t>{10, 0x8000'0000LL, 20, 30});\r\n    test_case_min_max_element(\r\n        vector<int64_t>{-6604286336755016904, -4365366089374418225, 6104371530830675888, -8582621853879131834});\r\n\r\n    test_is_sorted_until<char>(gen);\r\n    test_is_sorted_until<signed char>(gen);\r\n    test_is_sorted_until<unsigned char>(gen);\r\n    test_is_sorted_until<short>(gen);\r\n    test_is_sorted_until<unsigned short>(gen);\r\n    test_is_sorted_until<int>(gen);\r\n    test_is_sorted_until<unsigned int>(gen);\r\n    test_is_sorted_until<long long>(gen);\r\n    test_is_sorted_until<unsigned long long>(gen);\r\n\r\n    // std::includes has been there forever, but we use std::sample in the test, and that one is C++17\r\n#if _HAS_CXX17\r\n    test_includes<char>(gen);\r\n    test_includes<signed char>(gen);\r\n    test_includes<unsigned char>(gen);\r\n    test_includes<short>(gen);\r\n    test_includes<unsigned short>(gen);\r\n    test_includes<int>(gen);\r\n    test_includes<unsigned int>(gen);\r\n    test_includes<long long>(gen);\r\n    test_includes<unsigned long long>(gen);\r\n#endif // _HAS_CXX17\r\n\r\n    test_replace<char>(gen);\r\n    test_replace<signed char>(gen);\r\n    test_replace<unsigned char>(gen);\r\n    test_replace<short>(gen);\r\n    test_replace<unsigned short>(gen);\r\n    test_replace<int>(gen);\r\n    test_replace<unsigned int>(gen);\r\n    test_replace<long long>(gen);\r\n    test_replace<unsigned long long>(gen);\r\n\r\n    test_reverse<char>(gen);\r\n    test_reverse<signed char>(gen);\r\n    test_reverse<unsigned char>(gen);\r\n    test_reverse<short>(gen);\r\n    test_reverse<unsigned short>(gen);\r\n    test_reverse<int>(gen);\r\n    test_reverse<unsigned int>(gen);\r\n    test_reverse<long long>(gen);\r\n    test_reverse<unsigned long long>(gen);\r\n    test_reverse<float>(gen);\r\n    test_reverse<double>(gen);\r\n    test_reverse<long double>(gen);\r\n\r\n    test_reverse_copy<char>(gen);\r\n    test_reverse_copy<signed char>(gen);\r\n    test_reverse_copy<unsigned char>(gen);\r\n    test_reverse_copy<short>(gen);\r\n    test_reverse_copy<unsigned short>(gen);\r\n    test_reverse_copy<int>(gen);\r\n    test_reverse_copy<unsigned int>(gen);\r\n    test_reverse_copy<long long>(gen);\r\n    test_reverse_copy<unsigned long long>(gen);\r\n    test_reverse_copy<float>(gen);\r\n    test_reverse_copy<double>(gen);\r\n    test_reverse_copy<long double>(gen);\r\n\r\n    test_rotate<char>(gen, 20000); // one real long rotate run, as for smaller arrays some strategies aren't executed\r\n    test_rotate<signed char>(gen);\r\n    test_rotate<unsigned char>(gen);\r\n    test_rotate<short>(gen);\r\n    test_rotate<unsigned short>(gen);\r\n    test_rotate<int>(gen);\r\n    test_rotate<unsigned int>(gen);\r\n    test_rotate<long long>(gen);\r\n    test_rotate<unsigned long long>(gen);\r\n    test_rotate<float>(gen);\r\n    test_rotate<double>(gen);\r\n    test_rotate<long double>(gen);\r\n\r\n    test_remove<char>(gen);\r\n    test_remove<signed char>(gen);\r\n    test_remove<unsigned char>(gen);\r\n    test_remove<short>(gen);\r\n    test_remove<unsigned short>(gen);\r\n    test_remove<int>(gen);\r\n    test_remove<unsigned int>(gen);\r\n    test_remove<long long>(gen);\r\n    test_remove<unsigned long long>(gen);\r\n\r\n    test_unique<char>(gen);\r\n    test_unique<signed char>(gen);\r\n    test_unique<unsigned char>(gen);\r\n    test_unique<short>(gen);\r\n    test_unique<unsigned short>(gen);\r\n    test_unique<int>(gen);\r\n    test_unique<unsigned int>(gen);\r\n    test_unique<long long>(gen);\r\n    test_unique<unsigned long long>(gen);\r\n\r\n    test_unique<long*>(gen);\r\n\r\n    test_swap_ranges<char>(gen);\r\n    test_swap_ranges<short>(gen);\r\n    test_swap_ranges<int>(gen);\r\n    test_swap_ranges<unsigned int>(gen);\r\n    test_swap_ranges<unsigned long long>(gen);\r\n\r\n    test_swap_arrays<uint8_t, 1>(gen);\r\n    test_swap_arrays<uint16_t, 1>(gen);\r\n    test_swap_arrays<uint32_t, 1>(gen);\r\n    test_swap_arrays<uint64_t, 1>(gen);\r\n\r\n    test_swap_arrays<uint8_t, 47>(gen);\r\n    test_swap_arrays<uint16_t, 47>(gen);\r\n    test_swap_arrays<uint32_t, 47>(gen);\r\n    test_swap_arrays<uint64_t, 47>(gen);\r\n\r\n    test_swap_arrays<uint8_t, 512>(gen);\r\n    test_swap_arrays<uint16_t, 512>(gen);\r\n    test_swap_arrays<uint32_t, 512>(gen);\r\n    test_swap_arrays<uint64_t, 512>(gen);\r\n}\r\n\r\ntemplate <typename Container1, typename Container2>\r\nvoid test_two_containers() {\r\n    Container1 one                  = {10, 20, 30, 40, 50};\r\n    Container2 two                  = {-1, -1, -1, -1, -1};\r\n    static constexpr int reversed[] = {50, 40, 30, 20, 10};\r\n\r\n    assert(reverse_copy(one.begin(), one.end(), two.begin()) == two.end());\r\n    assert(equal(two.begin(), two.end(), begin(reversed), end(reversed)));\r\n\r\n    static constexpr int squares[] = {1, 4, 9, 16, 25};\r\n    static constexpr int cubes[]   = {1, 8, 27, 64, 125};\r\n    one.assign(begin(squares), end(squares));\r\n    two.assign(begin(cubes), end(cubes));\r\n\r\n    assert(swap_ranges(one.begin(), one.end(), two.begin()) == two.end());\r\n    assert(equal(one.begin(), one.end(), begin(cubes), end(cubes)));\r\n    assert(equal(two.begin(), two.end(), begin(squares), end(squares)));\r\n}\r\n\r\ntemplate <typename Container>\r\nvoid test_one_container() {\r\n    Container x                     = {10, 20, 30, 40, 50};\r\n    static constexpr int reversed[] = {50, 40, 30, 20, 10};\r\n\r\n    reverse(x.begin(), x.end());\r\n    assert(equal(x.begin(), x.end(), begin(reversed), end(reversed)));\r\n\r\n    test_two_containers<Container, vector<int>>();\r\n    test_two_containers<Container, deque<int>>();\r\n    test_two_containers<Container, list<int>>();\r\n}\r\n\r\ntemplate <size_t N>\r\nbool test_randomized_bitset(mt19937_64& gen) {\r\n    string str;\r\n    wstring wstr;\r\n    str.reserve(N);\r\n    wstr.reserve(N);\r\n\r\n    while (str.size() != N) {\r\n        uint64_t random_value = gen();\r\n\r\n        for (int bits = 0; bits < 64 && str.size() != N; ++bits) {\r\n            const auto character = '0' + (random_value & 1);\r\n            str.push_back(static_cast<char>(character));\r\n            wstr.push_back(static_cast<wchar_t>(character));\r\n            random_value >>= 1;\r\n        }\r\n    }\r\n\r\n    const bitset<N> b(str);\r\n\r\n    assert(b.to_string() == str);\r\n    assert(b.template to_string<wchar_t>() == wstr);\r\n\r\n    return true;\r\n}\r\n\r\ntemplate <size_t Base, size_t... Vals>\r\nvoid test_randomized_bitset_base(index_sequence<Vals...>, mt19937_64& gen) {\r\n    bool ignored[] = {test_randomized_bitset<Base + Vals>(gen)...};\r\n    (void) ignored;\r\n}\r\n\r\ntemplate <size_t Base, size_t Count>\r\nvoid test_randomized_bitset_base_count(mt19937_64& gen) {\r\n    test_randomized_bitset_base<Base>(make_index_sequence<Count>{}, gen);\r\n}\r\n\r\ntemplate <class F>\r\nvoid assert_throws_inv(F f) {\r\n    try {\r\n        f();\r\n        assert(false);\r\n    } catch (const invalid_argument&) {\r\n    }\r\n}\r\n\r\nvoid test_bitset(mt19937_64& gen) {\r\n    assert(bitset<0>(0x0ULL).to_string() == \"\");\r\n    assert(bitset<0>(0xFEDCBA9876543210ULL).to_string() == \"\");\r\n    assert(bitset<15>(0x6789ULL).to_string() == \"110011110001001\");\r\n    assert(bitset<15>(0xFEDCBA9876543210ULL).to_string() == \"011001000010000\");\r\n    assert(bitset<32>(0xABCD1234ULL).to_string() == \"10101011110011010001001000110100\");\r\n    assert(bitset<32>(0xFEDCBA9876543210ULL).to_string() == \"01110110010101000011001000010000\");\r\n    assert(bitset<45>(0x1701D1729FFFULL).to_string() == \"101110000000111010001011100101001111111111111\");\r\n    assert(bitset<45>(0xFEDCBA9876543210ULL).to_string() == \"110101001100001110110010101000011001000010000\");\r\n    assert(bitset<64>(0xFEDCBA9876543210ULL).to_string()\r\n           == \"1111111011011100101110101001100001110110010101000011001000010000\");\r\n    assert(bitset<75>(0xFEDCBA9876543210ULL).to_string()\r\n           == \"000000000001111111011011100101110101001100001110110010101000011001000010000\");\r\n\r\n    assert(bitset<0>(0x0ULL).to_string<wchar_t>() == L\"\");\r\n    assert(bitset<0>(0xFEDCBA9876543210ULL).to_string<wchar_t>() == L\"\");\r\n    assert(bitset<15>(0x6789ULL).to_string<wchar_t>() == L\"110011110001001\");\r\n    assert(bitset<15>(0xFEDCBA9876543210ULL).to_string<wchar_t>() == L\"011001000010000\");\r\n    assert(bitset<32>(0xABCD1234ULL).to_string<wchar_t>() == L\"10101011110011010001001000110100\");\r\n    assert(bitset<32>(0xFEDCBA9876543210ULL).to_string<wchar_t>() == L\"01110110010101000011001000010000\");\r\n    assert(bitset<45>(0x1701D1729FFFULL).to_string<wchar_t>() == L\"101110000000111010001011100101001111111111111\");\r\n    assert(bitset<45>(0xFEDCBA9876543210ULL).to_string<wchar_t>() == L\"110101001100001110110010101000011001000010000\");\r\n    assert(bitset<64>(0xFEDCBA9876543210ULL).to_string<wchar_t>()\r\n           == L\"1111111011011100101110101001100001110110010101000011001000010000\");\r\n    assert(bitset<75>(0xFEDCBA9876543210ULL).to_string<wchar_t>()\r\n           == L\"000000000001111111011011100101110101001100001110110010101000011001000010000\");\r\n\r\n    assert(bitset<64>(0xFEDCBA9876543210ULL).to_string('o', 'x')\r\n           == \"xxxxxxxoxxoxxxooxoxxxoxoxooxxooooxxxoxxooxoxoxooooxxooxooooxoooo\");\r\n    assert(bitset<64>(0xFEDCBA9876543210ULL).to_string<wchar_t>(L'o', L'x')\r\n           == L\"xxxxxxxoxxoxxxooxoxxxoxoxooxxooooxxxoxxooxoxoxooooxxooxooooxoooo\");\r\n\r\n#ifdef __cpp_lib_char8_t\r\n    assert(bitset<75>(0xFEDCBA9876543210ULL).to_string<char8_t>()\r\n           == u8\"000000000001111111011011100101110101001100001110110010101000011001000010000\");\r\n#endif // __cpp_lib_char8_t\r\n    assert(bitset<75>(0xFEDCBA9876543210ULL).to_string<char16_t>()\r\n           == u\"000000000001111111011011100101110101001100001110110010101000011001000010000\");\r\n    assert(bitset<75>(0xFEDCBA9876543210ULL).to_string<char32_t>()\r\n           == U\"000000000001111111011011100101110101001100001110110010101000011001000010000\"); // not vectorized\r\n\r\n    assert(bitset<0>(\"\").to_ullong() == 0);\r\n    assert(bitset<0>(\"1\").to_ullong() == 0);\r\n    assert_throws_inv([] { (void) bitset<0>(\"x\"); });\r\n\r\n    assert(bitset<45>(\"101110000000111010001011100101001111111111111\").to_ullong() == 0x1701D1729FFFULL);\r\n    assert(bitset<45>(\"110101001100001110110010101000011001000010000\").to_ullong() == 0x1A9876543210ULL);\r\n    assert(bitset<45>(\"111\").to_ullong() == 0x7);\r\n    assert_throws_inv([] { (void) bitset<45>(\"11x11\"); });\r\n    assert_throws_inv([] { (void) bitset<45>(\"111111111111111111111111111111111111111111111x\"); });\r\n    assert_throws_inv([] { (void) bitset<45>(\"x111111111111111111111111111111111111111111111\"); });\r\n\r\n    assert(bitset<64>(\"xxxxxxxoxxoxxxooxoxxxoxoxooxxooooxxxoxxooxoxoxooooxxooxooooxoooo\", string::npos, 'o', 'x')\r\n               .to_ullong()\r\n           == 0xFEDCBA9876543210ULL);\r\n    assert(bitset<64>(L\"xxxxxxxoxxoxxxooxoxxxoxoxooxxooooxxxoxxooxoxoxooooxxooxooooxoooo\", wstring::npos, L'o', L'x')\r\n               .to_ullong()\r\n           == 0xFEDCBA9876543210ULL);\r\n\r\n#ifdef __cpp_lib_char8_t\r\n    assert(bitset<75>(u8\"000000000001111111011011100101110101001100001110110010101000011001000010000\").to_ullong()\r\n           == 0xFEDCBA9876543210ULL);\r\n#endif // __cpp_lib_char8_t\r\n    assert(bitset<75>(u\"000000000001111111011011100101110101001100001110110010101000011001000010000\").to_ullong()\r\n           == 0xFEDCBA9876543210ULL);\r\n    assert(bitset<75>(U\"000000000001111111011011100101110101001100001110110010101000011001000010000\").to_ullong()\r\n           == 0xFEDCBA9876543210ULL); // not vectorized\r\n\r\n    test_randomized_bitset_base_count<512 - 5, 32 + 10>(gen);\r\n}\r\n\r\ntemplate <class T>\r\nsize_t last_known_good_find_first_of(const basic_string<T>& h, const basic_string<T>& n) {\r\n    for (size_t pos = 0, pos_max = h.size(); pos != pos_max; ++pos) {\r\n        if (n.find(h[pos]) != basic_string<T>::npos) {\r\n            return pos;\r\n        }\r\n    }\r\n\r\n    return basic_string<T>::npos;\r\n}\r\n\r\ntemplate <class T>\r\nsize_t last_known_good_find_first_not_of(const basic_string<T>& h, const basic_string<T>& n) {\r\n    for (size_t pos = 0, pos_max = h.size(); pos != pos_max; ++pos) {\r\n        if (n.find(h[pos]) == basic_string<T>::npos) {\r\n            return pos;\r\n        }\r\n    }\r\n\r\n    return basic_string<T>::npos;\r\n}\r\n\r\ntemplate <class T>\r\nsize_t last_known_good_find_last_of(const basic_string<T>& h, const basic_string<T>& n) {\r\n    size_t pos = h.size();\r\n    while (pos != 0) {\r\n        --pos;\r\n        if (n.find(h[pos]) != basic_string<T>::npos) {\r\n            return pos;\r\n        }\r\n    }\r\n\r\n    return basic_string<T>::npos;\r\n}\r\n\r\ntemplate <class T>\r\nsize_t last_known_good_find_last_not_of(const basic_string<T>& h, const basic_string<T>& n) {\r\n    size_t pos = h.size();\r\n    while (pos != 0) {\r\n        --pos;\r\n        if (n.find(h[pos]) == basic_string<T>::npos) {\r\n            return pos;\r\n        }\r\n    }\r\n\r\n    return basic_string<T>::npos;\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_string_find_first_of(const basic_string<T>& input_haystack, const basic_string<T>& input_needle) {\r\n    size_t expected = last_known_good_find_first_of(input_haystack, input_needle);\r\n    size_t actual   = input_haystack.find_first_of(input_needle);\r\n    assert(expected == actual);\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_string_find_first_not_of(const basic_string<T>& input_haystack, const basic_string<T>& input_needle) {\r\n    size_t expected = last_known_good_find_first_not_of(input_haystack, input_needle);\r\n    size_t actual   = input_haystack.find_first_not_of(input_needle);\r\n    assert(expected == actual);\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_string_find_last_of(const basic_string<T>& input_haystack, const basic_string<T>& input_needle) {\r\n    size_t expected = last_known_good_find_last_of(input_haystack, input_needle);\r\n    size_t actual   = input_haystack.find_last_of(input_needle);\r\n    assert(expected == actual);\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_string_find_last_not_of(const basic_string<T>& input_haystack, const basic_string<T>& input_needle) {\r\n    size_t expected = last_known_good_find_last_not_of(input_haystack, input_needle);\r\n    size_t actual   = input_haystack.find_last_not_of(input_needle);\r\n    assert(expected == actual);\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_string_find_ch(const basic_string<T>& input_haystack, const T value) {\r\n    ptrdiff_t expected;\r\n\r\n    const auto expected_iter = last_known_good_find(input_haystack.begin(), input_haystack.end(), value);\r\n\r\n    if (expected_iter != input_haystack.end()) {\r\n        expected = expected_iter - input_haystack.begin();\r\n    } else {\r\n        expected = -1;\r\n    }\r\n\r\n    const auto actual = static_cast<ptrdiff_t>(input_haystack.find(value));\r\n    assert(expected == actual);\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_string_rfind_ch(const basic_string<T>& input_haystack, const T value) {\r\n    ptrdiff_t expected;\r\n\r\n    const auto expected_iter = last_known_good_find_last(input_haystack.begin(), input_haystack.end(), value);\r\n\r\n    if (expected_iter != input_haystack.end()) {\r\n        expected = expected_iter - input_haystack.begin();\r\n    } else {\r\n        expected = -1;\r\n    }\r\n\r\n    const auto actual = static_cast<ptrdiff_t>(input_haystack.rfind(value));\r\n    assert(expected == actual);\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_string_find_str(const basic_string<T>& input_haystack, const basic_string<T>& input_needle) {\r\n    ptrdiff_t expected;\r\n    if (input_needle.empty()) {\r\n        expected = 0;\r\n    } else {\r\n        const auto expected_iter = last_known_good_search(\r\n            input_haystack.begin(), input_haystack.end(), input_needle.begin(), input_needle.end());\r\n\r\n        if (expected_iter != input_haystack.end()) {\r\n            expected = expected_iter - input_haystack.begin();\r\n        } else {\r\n            expected = -1;\r\n        }\r\n    }\r\n    const auto actual = static_cast<ptrdiff_t>(input_haystack.find(input_needle));\r\n    assert(expected == actual);\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_string_rfind_str(const basic_string<T>& input_haystack, const basic_string<T>& input_needle) {\r\n    ptrdiff_t expected;\r\n    if (input_needle.empty()) {\r\n        expected = static_cast<ptrdiff_t>(input_haystack.size());\r\n    } else {\r\n        const auto expected_iter = last_known_good_find_end(\r\n            input_haystack.begin(), input_haystack.end(), input_needle.begin(), input_needle.end());\r\n\r\n        if (expected_iter != input_haystack.end()) {\r\n            expected = expected_iter - input_haystack.begin();\r\n        } else {\r\n            expected = -1;\r\n        }\r\n    }\r\n    const auto actual = static_cast<ptrdiff_t>(input_haystack.rfind(input_needle));\r\n    assert(expected == actual);\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_string_find_not_ch(const basic_string<T>& input_haystack, const T value) {\r\n    ptrdiff_t expected;\r\n\r\n    const auto expected_iter =\r\n        last_known_good_find(input_haystack.begin(), input_haystack.end(), value, not_equal_to<>{});\r\n\r\n    if (expected_iter != input_haystack.end()) {\r\n        expected = expected_iter - input_haystack.begin();\r\n    } else {\r\n        expected = -1;\r\n    }\r\n\r\n    const auto actual = static_cast<ptrdiff_t>(input_haystack.find_first_not_of(value));\r\n    assert(expected == actual);\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_string_rfind_not_ch(const basic_string<T>& input_haystack, const T value) {\r\n    ptrdiff_t expected;\r\n\r\n    const auto expected_iter =\r\n        last_known_good_find_last(input_haystack.begin(), input_haystack.end(), value, not_equal_to<>{});\r\n\r\n    if (expected_iter != input_haystack.end()) {\r\n        expected = expected_iter - input_haystack.begin();\r\n    } else {\r\n        expected = -1;\r\n    }\r\n\r\n    const auto actual = static_cast<ptrdiff_t>(input_haystack.find_last_not_of(value));\r\n    assert(expected == actual);\r\n}\r\n\r\ntemplate <class T, class D>\r\nvoid test_basic_string_dis(mt19937_64& gen, D& dis) {\r\n    basic_string<T> input_haystack;\r\n    basic_string<T> input_haystack_not;\r\n    basic_string<T> input_needle;\r\n    basic_string<T> temp;\r\n    input_haystack.reserve(haystackDataCount);\r\n    input_haystack_not.reserve(haystackDataCount);\r\n    input_needle.reserve(needleDataCount);\r\n    temp.reserve(needleDataCount);\r\n\r\n    for (;;) {\r\n        const auto input_element = static_cast<T>(dis(gen));\r\n        test_case_string_find_ch(input_haystack, input_element);\r\n        test_case_string_rfind_ch(input_haystack, input_element);\r\n\r\n        input_needle.clear();\r\n\r\n        test_case_string_find_first_of(input_haystack, input_needle);\r\n        test_case_string_find_last_of(input_haystack, input_needle);\r\n        test_case_string_find_first_not_of(input_haystack, input_needle);\r\n        test_case_string_find_last_not_of(input_haystack, input_needle);\r\n        test_case_string_find_str(input_haystack, input_needle);\r\n        test_case_string_rfind_str(input_haystack, input_needle);\r\n\r\n        for (size_t attempts = 0; attempts < needleDataCount; ++attempts) {\r\n            input_needle.push_back(static_cast<T>(dis(gen)));\r\n            test_case_string_find_first_of(input_haystack, input_needle);\r\n            test_case_string_find_last_of(input_haystack, input_needle);\r\n            test_case_string_find_first_not_of(input_haystack, input_needle);\r\n            test_case_string_find_last_not_of(input_haystack, input_needle);\r\n            test_case_string_find_str(input_haystack, input_needle);\r\n            test_case_string_rfind_str(input_haystack, input_needle);\r\n\r\n            // For large needles the chance of a match is low, so test a guaranteed match\r\n            if (input_haystack.size() > input_needle.size() * 2) {\r\n                uniform_int_distribution<size_t> pos_dis(0, input_haystack.size() - input_needle.size());\r\n                const size_t pos             = pos_dis(gen);\r\n                const auto overwritten_first = input_haystack.begin() + static_cast<ptrdiff_t>(pos);\r\n                temp.assign(overwritten_first, overwritten_first + static_cast<ptrdiff_t>(input_needle.size()));\r\n                copy(input_needle.begin(), input_needle.end(), overwritten_first);\r\n                test_case_string_find_str(input_haystack, input_needle);\r\n                test_case_string_rfind_str(input_haystack, input_needle);\r\n                copy(temp.begin(), temp.end(), overwritten_first);\r\n            }\r\n        }\r\n\r\n        const auto input_not_ch = static_cast<T>(dis(gen));\r\n        input_haystack_not.assign(input_haystack.size(), input_not_ch);\r\n\r\n        test_case_string_find_not_ch(input_haystack_not, input_not_ch);\r\n        test_case_string_rfind_not_ch(input_haystack_not, input_not_ch);\r\n        if (!input_haystack_not.empty()) {\r\n            uniform_int_distribution<size_t> not_pos_dis(0, input_haystack_not.size() - 1);\r\n\r\n            for (size_t attempts = 0; attempts < needleDataCount; ++attempts) {\r\n                const size_t pos        = not_pos_dis(gen);\r\n                input_haystack_not[pos] = input_haystack[pos];\r\n                test_case_string_find_not_ch(input_haystack_not, input_not_ch);\r\n                test_case_string_rfind_not_ch(input_haystack_not, input_not_ch);\r\n            }\r\n        }\r\n\r\n        if (input_haystack.size() == haystackDataCount) {\r\n            break;\r\n        }\r\n\r\n        input_haystack.push_back(static_cast<T>(dis(gen)));\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_basic_string(mt19937_64& gen) {\r\n    using dis_int_type = conditional_t<is_signed_v<T>, int32_t, uint32_t>;\r\n\r\n    uniform_int_distribution<dis_int_type> dis_latin('a', 'z');\r\n    test_basic_string_dis<T>(gen, dis_latin);\r\n    if constexpr (sizeof(T) >= 2) {\r\n        uniform_int_distribution<dis_int_type> dis_greek(0x391, 0x3C9);\r\n        test_basic_string_dis<T>(gen, dis_greek);\r\n    }\r\n}\r\n\r\n// GH-5757 <string>: wstring::find_first_of crashes on some inputs\r\nvoid test_gh_5757_find_first_of() {\r\n    const wstring hay(40, L'e');\r\n    wstring needle;\r\n    needle.resize(32);\r\n\r\n    for (unsigned int k = 0; k != 32; k += 16) {\r\n        for (unsigned int i = 0; i != 8; ++i) {\r\n            needle[i + k] = static_cast<wchar_t>(L'a' + i);\r\n        }\r\n\r\n        for (unsigned int i = 8; i != 16; ++i) {\r\n            needle[i + k] = static_cast<wchar_t>(0xFF00 + i);\r\n        }\r\n    }\r\n\r\n    const auto pos = hay.find_first_of(needle);\r\n    assert(pos == 0);\r\n}\r\n\r\nvoid test_string(mt19937_64& gen) {\r\n    test_basic_string<char>(gen);\r\n    test_basic_string<wchar_t>(gen);\r\n#ifdef __cpp_lib_char8_t\r\n    test_basic_string<char8_t>(gen);\r\n#endif // __cpp_lib_char8_t\r\n    test_basic_string<char16_t>(gen);\r\n    test_basic_string<char32_t>(gen);\r\n    test_basic_string<unsigned long long>(gen);\r\n\r\n    test_gh_5757_find_first_of();\r\n}\r\n\r\nvoid test_various_containers() {\r\n    test_one_container<vector<int>>(); // contiguous, vectorizable\r\n    test_one_container<deque<int>>(); // random-access, not vectorizable\r\n    test_one_container<list<int>>(); // bidi, not vectorizable\r\n}\r\n\r\n#if _HAS_CXX20\r\nconstexpr bool test_constexpr() {\r\n    const int a[] = {20, 10, 30, 30, 30, 30, 40, 60, 50};\r\n\r\n    assert(count(begin(a), end(a), 30) == 4);\r\n    assert(ranges::count(a, 30) == 4);\r\n\r\n    assert(find(begin(a), end(a), 30) == begin(a) + 2);\r\n    assert(ranges::find(a, 30) == begin(a) + 2);\r\n\r\n#if _HAS_CXX23\r\n    assert(begin(ranges::find_last(a, 30)) == begin(a) + 5);\r\n    assert(end(ranges::find_last(a, 30)) == end(a));\r\n#endif // _HAS_CXX23\r\n\r\n    assert(min_element(begin(a), end(a)) == begin(a) + 1);\r\n    assert(max_element(begin(a), end(a)) == end(a) - 2);\r\n    assert(get<0>(minmax_element(begin(a), end(a))) == begin(a) + 1);\r\n    assert(get<1>(minmax_element(begin(a), end(a))) == end(a) - 2);\r\n\r\n    assert(ranges::min_element(a) == begin(a) + 1);\r\n    assert(ranges::max_element(a) == end(a) - 2);\r\n    assert(ranges::minmax_element(a).min == begin(a) + 1);\r\n    assert(ranges::minmax_element(a).max == end(a) - 2);\r\n\r\n    assert(ranges::min(a) == 10);\r\n    assert(ranges::max(a) == 60);\r\n    assert(ranges::minmax(a).min == 10);\r\n    assert(ranges::minmax(a).max == 60);\r\n\r\n    int b[size(a)];\r\n    reverse_copy(begin(a), end(a), begin(b));\r\n    assert(equal(rbegin(a), rend(a), begin(b), end(b)));\r\n\r\n    int c[size(a)];\r\n    ranges::reverse_copy(a, c);\r\n    assert(equal(rbegin(a), rend(a), begin(c), end(c)));\r\n\r\n    reverse(begin(b), end(b));\r\n    assert(equal(begin(a), end(a), begin(b), end(b)));\r\n\r\n    swap_ranges(begin(b), end(b), begin(c));\r\n    assert(equal(rbegin(a), rend(a), begin(b), end(b)));\r\n    assert(equal(begin(a), end(a), begin(c), end(c)));\r\n\r\n    ranges::swap_ranges(b, c);\r\n    assert(equal(begin(a), end(a), begin(b), end(b)));\r\n    assert(equal(rbegin(a), rend(a), begin(c), end(c)));\r\n\r\n    ranges::reverse(c);\r\n    assert(equal(begin(a), end(a), begin(c), end(c)));\r\n\r\n    return true;\r\n}\r\n\r\nstatic_assert(test_constexpr());\r\n#endif // _HAS_CXX20\r\n\r\nint main() {\r\n#if _HAS_CXX20\r\n    assert(test_constexpr());\r\n#endif // _HAS_CXX20\r\n    run_randomized_tests_with_different_isa_levels([](mt19937_64& gen) {\r\n#ifdef _CALL_ALL_X64_VECTOR_ALGORITHMS_ON_ARM64EC\r\n        // Test the algorithms that *aren't* vectorized for ARM64EC:\r\n        test_min_max_element<long long>(gen);\r\n        test_min_max_element<unsigned long long>(gen);\r\n\r\n        test_min_max_element_pointers(gen);\r\n\r\n        test_replace<int>(gen);\r\n        test_replace<unsigned int>(gen);\r\n        test_replace<long long>(gen);\r\n        test_replace<unsigned long long>(gen);\r\n\r\n        test_bitset(gen);\r\n#else // ^^^ defined(_CALL_ALL_X64_VECTOR_ALGORITHMS_ON_ARM64EC) / normal test coverage vvv\r\n        test_vector_algorithms(gen);\r\n        test_various_containers();\r\n        test_bitset(gen);\r\n        test_string(gen);\r\n#endif // ^^^ normal test coverage ^^^\r\n    });\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_vector_algorithms_floats/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\prefix.lst\r\nRUNALL_CROSSLIST\r\n# Copied from ..\\usual_matrix.lst, /fp options excluded, /clr and /clr:pure lines dropped\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17 /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++17 /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++20 /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++20 /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- /Zc:noexceptTypes-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- /Zc:noexceptTypes- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:char8_t- /w14640 /Zc:threadSafeInit- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:wchar_t- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- /Zc:wchar_t- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /w14640 /Zc:threadSafeInit- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++14 /w14640 /Zc:threadSafeInit- /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++17 /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++20 /permissive- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++20 /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /analyze:only /analyze:autolog- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- /analyze:only /analyze:autolog- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze:only /analyze:autolog- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/BE /c /EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/BE /c /EHsc /MDd /std:c++17 /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/BE /c /EHsc /MT /std:c++20 /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/BE /c /EHsc /MTd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit- --start-no-unused-arguments\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MDd /std:c++17 /w14640 /Zc:threadSafeInit- --start-no-unused-arguments\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++20 /permissive- /w14640 /Zc:threadSafeInit- --start-no-unused-arguments\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MTd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- --start-no-unused-arguments\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=undefined -fno-sanitize-recover=undefined --start-no-unused-arguments\"\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/fp:strict\"\r\n*\tPM_CL=\"/fp:precise\"\r\n*\tPM_CL=\"/fp:fast\"\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"\"\r\n*\tPM_CL=\"/D_USE_STD_VECTOR_ALGORITHMS=0\"\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_vector_algorithms_floats/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cstddef>\r\n#include <functional>\r\n#include <limits>\r\n#include <random>\r\n#include <vector>\r\n\r\n#include <test_is_sorted_until_support.hpp>\r\n#include <test_min_max_element_support.hpp>\r\n#include <test_vector_algorithms_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nvoid test_min_max_element_floating_with_values(mt19937_64& gen, const vector<T>& input_of_input) {\r\n    uniform_int_distribution<size_t> idx_dis(0, input_of_input.size() - 1);\r\n\r\n    vector<T> input;\r\n    input.reserve(dataCount);\r\n    test_case_min_max_element(input);\r\n    for (size_t attempts = 0; attempts < dataCount; ++attempts) {\r\n        input.push_back(input_of_input[idx_dis(gen)]);\r\n        test_case_min_max_element(input);\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvector<T> test_floating_input(mt19937_64& gen) {\r\n    normal_distribution<T> dis(0, 100000.0);\r\n\r\n    constexpr auto input_of_input_size = dataCount / 2;\r\n    vector<T> result(input_of_input_size);\r\n\r\n    for (auto& element : result) {\r\n        element = dis(gen);\r\n    }\r\n\r\n    result[0] = -0.0;\r\n    result[1] = +0.0;\r\n#ifndef _M_FP_FAST\r\n    result[2] = -numeric_limits<T>::infinity();\r\n    result[3] = +numeric_limits<T>::infinity();\r\n#endif // !defined(_M_FP_FAST)\r\n    return result;\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_min_max_element_floating_zero(mt19937_64& gen) {\r\n    test_min_max_element_floating_with_values<T>(gen, {-0.0, +0.0});\r\n    test_min_max_element_floating_with_values<T>(gen, {-0.0, +0.0, +1.0});\r\n    test_min_max_element_floating_with_values<T>(gen, {-0.0, +0.0, -1.0});\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_min_max_element_floating_zero_predef() {\r\n    for (size_t len = 2; len != 16; ++len) {\r\n        for (size_t pos = 0; pos != len; ++pos) {\r\n            vector<T> v(len, +0.0);\r\n            v[pos] = -0.0;\r\n            test_case_min_max_element(v);\r\n\r\n            for (size_t i = 0; i != pos; ++i) {\r\n                v[i] = +1.0;\r\n            }\r\n\r\n            test_case_min_max_element(v);\r\n\r\n            for (size_t i = 0; i != pos; ++i) {\r\n                v[i] = -1.0;\r\n            }\r\n\r\n            test_case_min_max_element(v);\r\n\r\n            for (size_t i = 0; i != pos; ++i) {\r\n                v[i] = +0.0;\r\n            }\r\n\r\n            for (size_t i = pos + 1; i != len; ++i) {\r\n                v[i] = +1.0;\r\n            }\r\n\r\n            test_case_min_max_element(v);\r\n\r\n            for (size_t i = pos + 1; i != len; ++i) {\r\n                v[i] = -1.0;\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_min_max_element_floating(mt19937_64& gen) {\r\n    test_min_max_element_floating_with_values(gen, test_floating_input<T>(gen));\r\n    test_min_max_element_floating_zero<T>(gen);\r\n    test_min_max_element_floating_zero_predef<T>();\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_is_sorted_until_floating_with_values(mt19937_64& gen, const vector<T>& input_of_input) {\r\n    uniform_int_distribution<size_t> idx_dis(0, input_of_input.size() - 1);\r\n\r\n    vector<T> original_input;\r\n    vector<T> input;\r\n    original_input.reserve(dataCount);\r\n    input.reserve(dataCount);\r\n\r\n    test_case_is_sorted_until(input, less<>{});\r\n    test_case_is_sorted_until(input, greater<>{});\r\n\r\n    for (size_t attempts = 0; attempts < dataCount; ++attempts) {\r\n        original_input.push_back(input_of_input[idx_dis(gen)]);\r\n        input = original_input;\r\n\r\n        uniform_int_distribution<ptrdiff_t> pos_dis{0, static_cast<ptrdiff_t>(input.size() - 1)};\r\n        auto it = input.begin() + pos_dis(gen);\r\n        sort(input.begin(), it, less<>{});\r\n\r\n        test_case_is_sorted_until(input, less<>{});\r\n        reverse(input.begin(), it);\r\n        test_case_is_sorted_until(input, greater<>{});\r\n    }\r\n}\r\n\r\nvoid test_vector_algorithms(mt19937_64& gen) {\r\n    test_min_max_element_floating<float>(gen);\r\n    test_min_max_element_floating<double>(gen);\r\n\r\n    test_is_sorted_until_floating_with_values(gen, test_floating_input<float>(gen));\r\n    test_is_sorted_until_floating_with_values(gen, test_floating_input<double>(gen));\r\n}\r\n\r\nint main() {\r\n    run_randomized_tests_with_different_isa_levels(test_vector_algorithms);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_vector_algorithms_mismatch_and_lex_compare/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"\"\r\n*\tPM_CL=\"/D_USE_STD_VECTOR_ALGORITHMS=0\"\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_vector_algorithms_mismatch_and_lex_compare/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdlib>\r\n#include <random>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#if _HAS_CXX20\r\n#include <compare>\r\n#include <ranges>\r\n#endif // _HAS_CXX20\r\n\r\n#include <test_vector_algorithms_support.hpp>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class FwdIt>\r\nauto last_known_good_mismatch(FwdIt first1, FwdIt last1, FwdIt first2, FwdIt last2) {\r\n    for (; first1 != last1 && first2 != last2; ++first1, ++first2) {\r\n        if (*first1 != *first2) {\r\n            break;\r\n        }\r\n    }\r\n\r\n    return make_pair(first1, first2);\r\n}\r\n\r\ntemplate <class FwdIt>\r\nbool last_known_good_lex_compare(pair<FwdIt, FwdIt> expected_mismatch, FwdIt last1, FwdIt last2) {\r\n    if (expected_mismatch.second == last2) {\r\n        return false;\r\n    } else if (expected_mismatch.first == last1) {\r\n        return true;\r\n    } else if (*expected_mismatch.first < *expected_mismatch.second) {\r\n        return true;\r\n    } else {\r\n        assert(*expected_mismatch.second < *expected_mismatch.first);\r\n        return false;\r\n    }\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class FwdIt>\r\nauto last_known_good_lex_compare_3way(pair<FwdIt, FwdIt> expected_mismatch, FwdIt last1, FwdIt last2) {\r\n    if (expected_mismatch.second == last2) {\r\n        if (expected_mismatch.first == last1) {\r\n            return strong_ordering::equal;\r\n        } else {\r\n            return strong_ordering::greater;\r\n        }\r\n    } else if (expected_mismatch.first == last1) {\r\n        return strong_ordering::less;\r\n    } else {\r\n        auto order = *expected_mismatch.first <=> *expected_mismatch.second;\r\n        assert(order != 0);\r\n        return order;\r\n    }\r\n}\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class T>\r\nauto test_case_mismatch_only(const vector<T>& a, const vector<T>& b) {\r\n    auto expected_mismatch = last_known_good_mismatch(a.begin(), a.end(), b.begin(), b.end());\r\n    auto actual_mismatch   = mismatch(a.begin(), a.end(), b.begin(), b.end());\r\n    assert(expected_mismatch == actual_mismatch);\r\n\r\n#if _HAS_CXX20\r\n    auto ranges_actual_mismatch = ranges::mismatch(a, b);\r\n    assert(get<0>(expected_mismatch) == ranges_actual_mismatch.in1);\r\n    assert(get<1>(expected_mismatch) == ranges_actual_mismatch.in2);\r\n#endif // _HAS_CXX20\r\n    return expected_mismatch;\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_case_mismatch_and_lex_compare_family(const vector<T>& a, const vector<T>& b) {\r\n    auto expected_mismatch = test_case_mismatch_only(a, b);\r\n\r\n    auto expected_lex = last_known_good_lex_compare(expected_mismatch, a.end(), b.end());\r\n    auto actual_lex   = lexicographical_compare(a.begin(), a.end(), b.begin(), b.end());\r\n    assert(expected_lex == actual_lex);\r\n\r\n#if _HAS_CXX20\r\n    auto ranges_actual_lex = ranges::lexicographical_compare(a, b);\r\n    assert(expected_lex == ranges_actual_lex);\r\n\r\n    auto expected_lex_3way = last_known_good_lex_compare_3way(expected_mismatch, a.end(), b.end());\r\n    auto actual_lex_3way   = lexicographical_compare_three_way(a.begin(), a.end(), b.begin(), b.end());\r\n    assert(expected_lex_3way == actual_lex_3way);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\ntemplate <class T>\r\nvoid test_mismatch_and_lex_compare_family(mt19937_64& gen) {\r\n    constexpr size_t shrinkCount   = 4;\r\n    constexpr size_t mismatchCount = 10;\r\n    using TD                       = conditional_t<sizeof(T) == 1, int, T>;\r\n    uniform_int_distribution<TD> dis('a', 'z');\r\n    vector<T> input_a;\r\n    vector<T> input_b;\r\n    input_a.reserve(dataCount);\r\n    input_b.reserve(dataCount);\r\n\r\n    for (;;) {\r\n        // equal\r\n        test_case_mismatch_and_lex_compare_family(input_a, input_b);\r\n\r\n        // different sizes\r\n        for (size_t i = 0; i != shrinkCount && !input_b.empty(); ++i) {\r\n            input_b.pop_back();\r\n            test_case_mismatch_and_lex_compare_family(input_a, input_b);\r\n            test_case_mismatch_and_lex_compare_family(input_b, input_a);\r\n        }\r\n\r\n        // actual mismatch (or maybe not, depending on random)\r\n        if (!input_b.empty()) {\r\n            uniform_int_distribution<size_t> mismatch_dis(0, input_a.size() - 1);\r\n\r\n            for (size_t attempts = 0; attempts < mismatchCount; ++attempts) {\r\n                const size_t possible_mismatch_pos = mismatch_dis(gen);\r\n                input_a[possible_mismatch_pos]     = static_cast<T>(dis(gen));\r\n                test_case_mismatch_and_lex_compare_family(input_a, input_b);\r\n                test_case_mismatch_and_lex_compare_family(input_b, input_a);\r\n            }\r\n        }\r\n\r\n        if (input_a.size() == dataCount) {\r\n            break;\r\n        }\r\n\r\n        input_a.push_back(static_cast<T>(dis(gen)));\r\n        input_b = input_a;\r\n    }\r\n}\r\n\r\n#if _HAS_CXX20\r\ntemplate <class T>\r\nstruct triplet {\r\n    T x;\r\n    T y;\r\n    T z;\r\n\r\n    bool operator==(const triplet&) const = default;\r\n};\r\n\r\ntemplate <class T>\r\nvoid test_mismatch_only_triplets(mt19937_64& gen) {\r\n    constexpr size_t shrinkCount   = 4;\r\n    constexpr size_t mismatchCount = 10;\r\n    using TD                       = conditional_t<sizeof(T) == 1, int, T>;\r\n    uniform_int_distribution<TD> dis('a', 'z');\r\n    vector<triplet<T>> input_a;\r\n    vector<triplet<T>> input_b;\r\n    input_a.reserve(dataCount);\r\n    input_b.reserve(dataCount);\r\n\r\n    for (;;) {\r\n        // equal\r\n        test_case_mismatch_only(input_a, input_b);\r\n\r\n        // different sizes\r\n        for (size_t i = 0; i != shrinkCount && !input_b.empty(); ++i) {\r\n            input_b.pop_back();\r\n            test_case_mismatch_only(input_a, input_b);\r\n            test_case_mismatch_only(input_b, input_a);\r\n        }\r\n\r\n        // actual mismatch (or maybe not, depending on random)\r\n        if (!input_b.empty()) {\r\n            uniform_int_distribution<size_t> mismatch_dis(0, input_a.size() - 1);\r\n\r\n            for (size_t attempts = 0; attempts < mismatchCount; ++attempts) {\r\n                const size_t possible_mismatch_pos = mismatch_dis(gen);\r\n                input_a[possible_mismatch_pos].x   = static_cast<T>(dis(gen));\r\n                input_a[possible_mismatch_pos].y   = static_cast<T>(dis(gen));\r\n                input_a[possible_mismatch_pos].z   = static_cast<T>(dis(gen));\r\n                test_case_mismatch_only(input_a, input_b);\r\n                test_case_mismatch_only(input_b, input_a);\r\n            }\r\n        }\r\n\r\n        if (input_a.size() == dataCount) {\r\n            break;\r\n        }\r\n\r\n        input_a.emplace_back();\r\n        input_a.back().x = static_cast<T>(dis(gen));\r\n        input_a.back().y = static_cast<T>(dis(gen));\r\n        input_a.back().z = static_cast<T>(dis(gen));\r\n        input_b          = input_a;\r\n    }\r\n}\r\n#endif // _HAS_CXX20\r\n\r\ntemplate <class C1, class C2>\r\nvoid test_mismatch_and_lex_compare_family_containers() {\r\n    C1 a{'m', 'e', 'o', 'w', ' ', 'C', 'A', 'T', 'S'};\r\n    C2 b{'m', 'e', 'o', 'w', ' ', 'K', 'I', 'T', 'T', 'E', 'N', 'S'};\r\n\r\n    const auto result_mismatch_4 = mismatch(a.begin(), a.end(), b.begin(), b.end());\r\n    const auto result_mismatch_3 = mismatch(a.begin(), a.end(), b.begin());\r\n    assert(get<0>(result_mismatch_4) == a.begin() + 5);\r\n    assert(get<1>(result_mismatch_4) == b.begin() + 5);\r\n    assert(get<0>(result_mismatch_3) == a.begin() + 5);\r\n    assert(get<1>(result_mismatch_3) == b.begin() + 5);\r\n\r\n    const auto result_lex = lexicographical_compare(a.begin(), a.end(), b.begin(), b.end());\r\n    assert(result_lex == true);\r\n\r\n#if _HAS_CXX20\r\n    const auto result_mismatch_r = ranges::mismatch(a, b);\r\n    assert(result_mismatch_r.in1 == a.begin() + 5);\r\n    assert(result_mismatch_r.in2 == b.begin() + 5);\r\n\r\n    const auto result_lex_r = ranges::lexicographical_compare(a, b);\r\n    assert(result_lex_r == true);\r\n\r\n    const auto result_lex_3way = lexicographical_compare_three_way(a.begin(), a.end(), b.begin(), b.end());\r\n    assert(result_lex_3way == strong_ordering::less);\r\n#endif // _HAS_CXX20\r\n}\r\n\r\nnamespace test_mismatch_sizes_and_alignments {\r\n    constexpr size_t range     = 33;\r\n    constexpr size_t alignment = 32;\r\n\r\n#pragma pack(push, 1)\r\n    template <class T, size_t Size, size_t PadSize>\r\n    struct with_pad {\r\n        char p[PadSize];\r\n        T v[Size];\r\n    };\r\n#pragma pack(pop)\r\n\r\n    template <class T, size_t Size, size_t PadSize>\r\n    char stack_array_various_alignments_impl() {\r\n#ifdef __clang__\r\n#if __has_feature(undefined_behavior_sanitizer)\r\n#define TESTING_UBSAN\r\n#endif\r\n#endif\r\n\r\n#ifdef TESTING_UBSAN\r\n        // Avoid testing misaligned inputs, which UBSan would reject.\r\n#else // ^^^ UBSan / no UBSan vvv\r\n        with_pad<T, Size + 1, PadSize + 1> a = {};\r\n        with_pad<T, Size + 1, PadSize + 1> b = {};\r\n        assert(mismatch(begin(a.v), end(a.v), begin(b.v), end(b.v)) == make_pair(end(a.v), end(b.v)));\r\n#endif // ^^^ no UBSan ^^^\r\n        return 0;\r\n    }\r\n\r\n    template <class T, size_t Size, size_t... PadSizes>\r\n    void stack_array_various_alignments(index_sequence<PadSizes...>) {\r\n        char ignored[] = {stack_array_various_alignments_impl<T, Size, PadSizes>()...};\r\n        (void) ignored;\r\n    }\r\n\r\n    template <class T, size_t Size>\r\n    char stack_array_impl() {\r\n        T a[Size + 1] = {};\r\n        T b[Size + 1] = {};\r\n        assert(mismatch(begin(a), end(a), begin(b), end(b)) == make_pair(end(a), end(b)));\r\n        stack_array_various_alignments<T, Size>(make_index_sequence<alignment>{});\r\n        return 0;\r\n    }\r\n\r\n    template <class T, size_t... Sizes>\r\n    void stack_array(index_sequence<Sizes...>) {\r\n        char ignored[] = {stack_array_impl<T, Sizes>()...};\r\n        (void) ignored;\r\n    }\r\n\r\n    template <class T>\r\n    void test() {\r\n        // stack with different sizes and alignments. ASan would catch out-of-range reads\r\n        stack_array<T>(make_index_sequence<range>{});\r\n\r\n        // vector with different sizes. ASan vector annotations would catch out-of-range reads\r\n        for (size_t i = 0; i != range; ++i) {\r\n            vector<T> a(i, 0);\r\n            vector<T> b(i, 0);\r\n            assert(mismatch(begin(a), end(a), begin(b), end(b)) == make_pair(end(a), end(b)));\r\n        }\r\n\r\n        // heap with different sizes. ASan would catch out-of-range reads\r\n        for (size_t i = 0; i != range; ++i) {\r\n            T* a = static_cast<T*>(calloc(i, sizeof(T)));\r\n            T* b = static_cast<T*>(calloc(i, sizeof(T)));\r\n            assert(mismatch(a, a + i, b, b + i) == make_pair(a + i, b + i));\r\n            free(a);\r\n            free(b);\r\n        }\r\n\r\n        // subarray from stack array. We would have wrong results if we run out of the range.\r\n        T a[range + 1] = {};\r\n        T b[range + 1] = {};\r\n        for (size_t i = 0; i != range; ++i) {\r\n            a[i + 1] = 1;\r\n            // whole range mismatch finds mismatch after past-the-end of the subarray\r\n            assert(mismatch(a, a + range + 1, b, b + range + 1) == make_pair(a + i + 1, b + i + 1));\r\n            // limited range mismatch gets to past-the-end of the subarray\r\n            assert(mismatch(a, a + i, b, b + i) == make_pair(a + i, b + i));\r\n            a[i + 1] = 0;\r\n        }\r\n    }\r\n} // namespace test_mismatch_sizes_and_alignments\r\n\r\nvoid test_vector_algorithms(mt19937_64& gen) {\r\n    test_mismatch_and_lex_compare_family<char>(gen);\r\n    test_mismatch_and_lex_compare_family<signed char>(gen);\r\n    test_mismatch_and_lex_compare_family<unsigned char>(gen);\r\n    test_mismatch_and_lex_compare_family<short>(gen);\r\n    test_mismatch_and_lex_compare_family<unsigned short>(gen);\r\n    test_mismatch_and_lex_compare_family<int>(gen);\r\n    test_mismatch_and_lex_compare_family<unsigned int>(gen);\r\n    test_mismatch_and_lex_compare_family<long long>(gen);\r\n    test_mismatch_and_lex_compare_family<unsigned long long>(gen);\r\n\r\n#if _HAS_CXX20\r\n    test_mismatch_only_triplets<char>(gen);\r\n    test_mismatch_only_triplets<signed char>(gen);\r\n    test_mismatch_only_triplets<unsigned char>(gen);\r\n    test_mismatch_only_triplets<short>(gen);\r\n    test_mismatch_only_triplets<unsigned short>(gen);\r\n    test_mismatch_only_triplets<int>(gen);\r\n    test_mismatch_only_triplets<unsigned int>(gen);\r\n    test_mismatch_only_triplets<long long>(gen);\r\n    test_mismatch_only_triplets<unsigned long long>(gen);\r\n#endif // _HAS_CXX20\r\n\r\n    test_mismatch_and_lex_compare_family_containers<vector<char>, vector<signed char>>();\r\n    test_mismatch_and_lex_compare_family_containers<vector<char>, vector<unsigned char>>();\r\n    test_mismatch_and_lex_compare_family_containers<vector<wchar_t>, vector<char>>();\r\n    test_mismatch_and_lex_compare_family_containers<const vector<char>, const vector<char>>();\r\n    test_mismatch_and_lex_compare_family_containers<vector<char>, const vector<char>>();\r\n    test_mismatch_and_lex_compare_family_containers<const vector<wchar_t>, vector<wchar_t>>();\r\n    test_mismatch_and_lex_compare_family_containers<vector<char>, vector<int>>();\r\n\r\n    test_mismatch_sizes_and_alignments::test<char>();\r\n    test_mismatch_sizes_and_alignments::test<short>();\r\n    test_mismatch_sizes_and_alignments::test<int>();\r\n    test_mismatch_sizes_and_alignments::test<long long>();\r\n}\r\n\r\nint main() {\r\n    run_randomized_tests_with_different_isa_levels(test_vector_algorithms);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_vector_algorithms_search_n/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"\"\r\n*\tPM_CL=\"/D_USE_STD_VECTOR_ALGORITHMS=0\"\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_vector_algorithms_search_n/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <iterator>\r\n#include <limits>\r\n#include <random>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\n#include <test_vector_algorithms_support.hpp>\r\n\r\n#pragma warning(disable : 4984) // if constexpr is a C++17 language extension\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wc++17-extensions\"\r\n#endif // __clang__\r\n\r\nusing namespace std;\r\n\r\ntemplate <class UnderlyingIt>\r\nstruct forward_iter_adaptor {\r\n    using iterator_category = forward_iterator_tag;\r\n    using reference         = typename UnderlyingIt::reference;\r\n    using value_type        = typename UnderlyingIt::value_type;\r\n    using pointer           = typename UnderlyingIt::pointer;\r\n    using difference_type   = ptrdiff_t;\r\n\r\n    constexpr forward_iter_adaptor() : ptr{} {}\r\n    constexpr explicit forward_iter_adaptor(const UnderlyingIt ptr_) : ptr(ptr_) {}\r\n\r\n    constexpr reference operator*() const {\r\n        return *ptr;\r\n    }\r\n    constexpr pointer operator->() const {\r\n        return ptr;\r\n    }\r\n    constexpr forward_iter_adaptor& operator++() {\r\n        ++ptr;\r\n        return *this;\r\n    }\r\n    constexpr forward_iter_adaptor operator++(int) {\r\n        forward_iter_adaptor old;\r\n        ++ptr;\r\n        return old;\r\n    }\r\n    constexpr bool operator==(const forward_iter_adaptor& o) const {\r\n        return ptr == o.ptr;\r\n    }\r\n    constexpr bool operator!=(const forward_iter_adaptor& o) const {\r\n        return ptr != o.ptr;\r\n    }\r\n\r\n    UnderlyingIt ptr;\r\n};\r\n\r\ntemplate <class FwdIt, class T>\r\nauto last_known_good_search_n(FwdIt first, const FwdIt last, const size_t count, const T val) {\r\n    // Deliberately using simple approach, not smart bidi/random iterators \"check from the other end\" stuff\r\n    if (count == 0) {\r\n        return first;\r\n    }\r\n\r\n    size_t found = 0;\r\n    FwdIt match{};\r\n    for (; first != last; ++first) {\r\n        if (*first == val) {\r\n            ++found;\r\n            if (found == 1) {\r\n                match = first;\r\n            }\r\n\r\n            if (found == count) {\r\n                return match;\r\n            }\r\n        } else {\r\n            found = 0;\r\n        }\r\n    }\r\n    return last;\r\n}\r\n\r\ntemplate <bool forward_only_iterators, class It, class T>\r\nvoid test_case_search_n(const It first, const It last, const size_t count, const T val) {\r\n    if constexpr (forward_only_iterators) {\r\n        using iter_type = forward_iter_adaptor<It>;\r\n        test_case_search_n<false>(iter_type(first), iter_type(last), count, val);\r\n    } else {\r\n        const auto expected = last_known_good_search_n(first, last, count, val);\r\n        const auto actual   = search_n(first, last, count, val);\r\n        assert(expected == actual);\r\n\r\n#if _HAS_CXX20\r\n        const auto ranges_actual = ranges::search_n(first, last, static_cast<ptrdiff_t>(count), val);\r\n        assert(expected == begin(ranges_actual));\r\n        if (expected == last) {\r\n            assert(end(ranges_actual) == last);\r\n        } else {\r\n            assert(distance(expected, end(ranges_actual)) == static_cast<ptrdiff_t>(count));\r\n        }\r\n#endif // _HAS_CXX20\r\n    }\r\n}\r\n\r\ntemplate <class T, bool forward_only_iterators = false>\r\nvoid test_search_n(mt19937_64& gen) {\r\n    constexpr size_t lengthCount  = 70;\r\n    constexpr size_t patternCount = 5;\r\n    using TD                      = conditional_t<sizeof(T) == 1, int, T>;\r\n    uniform_int_distribution<TD> dis((numeric_limits<T>::min)(), (numeric_limits<T>::max)());\r\n    vector<T> input_src;\r\n    vector<T> input;\r\n    input_src.reserve(dataCount);\r\n    input.reserve(dataCount);\r\n\r\n    for (;;) {\r\n        for (size_t count = 0; count != lengthCount; ++count) {\r\n            input = input_src;\r\n\r\n            const T val = static_cast<T>(dis(gen));\r\n\r\n            test_case_search_n<forward_only_iterators>(input.begin(), input.end(), count, val);\r\n\r\n            if (input.empty()) {\r\n                continue;\r\n            }\r\n\r\n            binomial_distribution<size_t> pattern_length_dis(count * 2, 0.5);\r\n            uniform_int_distribution<size_t> pos_dis(0, input.size() - 1);\r\n\r\n            for (size_t pattern = 0; pattern != patternCount; ++pattern) {\r\n                const size_t pattern_length = pattern_length_dis(gen);\r\n                const size_t pattern_pos    = pos_dis(gen);\r\n\r\n                if (pattern_length + pattern_pos <= input.size()) {\r\n                    fill_n(input.begin() + static_cast<ptrdiff_t>(pattern_pos), pattern_length, val);\r\n\r\n                    test_case_search_n<forward_only_iterators>(input.begin(), input.end(), count, val);\r\n                }\r\n            }\r\n        }\r\n\r\n        if (input.size() == dataCount) {\r\n            break;\r\n        }\r\n\r\n        input_src.push_back(static_cast<T>(dis(gen)));\r\n    }\r\n}\r\n\r\nvoid test_vector_algorithms(mt19937_64& gen) {\r\n    test_search_n<char>(gen);\r\n    test_search_n<signed char>(gen);\r\n    test_search_n<unsigned char>(gen);\r\n    test_search_n<short>(gen);\r\n    test_search_n<unsigned short>(gen);\r\n    test_search_n<int>(gen);\r\n    test_search_n<unsigned int>(gen);\r\n    test_search_n<long long>(gen);\r\n    test_search_n<unsigned long long>(gen);\r\n\r\n    // Test only one case with forward iterators. It is a different and complex code path, hence it's worth testing,\r\n    // but it is not vectorized, so there's no point in trying different types.\r\n    test_search_n<short, true>(gen);\r\n}\r\n\r\nint main() {\r\n    run_randomized_tests_with_different_isa_levels(test_vector_algorithms);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_wcfb01_idempotent_container_destructors/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_wcfb01_idempotent_container_destructors/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <new>\r\n#include <string>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n#if _MSVC_STL_DESTRUCTOR_TOMBSTONES\r\n#error This test is fundamentally incompatible with destructor tombstones.\r\n#endif\r\n\r\nint main() {\r\n    // Idempotent destruction is an abomination that our `string` and `vector` have historically allowed.\r\n    // We're preserving it for the time being, except when destructor tombstones are enabled.\r\n\r\n    // TRANSITION, ABI: In the next ABI-breaking release, we'll stop supporting this nonstandard usage.\r\n\r\n    { // small string\r\n        alignas(string) char buff[sizeof(string)];\r\n        string& s = *::new (buff) string;\r\n        s.~string();\r\n        s.~string();\r\n    }\r\n\r\n    { // big string\r\n        alignas(string) char buff[sizeof(string)];\r\n        string& s = *::new (buff) string(\"a really long string that is going to trigger separate allocation\");\r\n        s.~string();\r\n        s.~string();\r\n    }\r\n\r\n    using vecT = vector<int>;\r\n\r\n    { // empty vector\r\n        alignas(vecT) char buff[sizeof(vecT)];\r\n        vecT& v = *::new (buff) vecT;\r\n        v.~vecT();\r\n        v.~vecT();\r\n    }\r\n\r\n    { // data vector\r\n        alignas(vecT) char buff[sizeof(vecT)];\r\n        vecT& v = *::new (buff) vecT;\r\n        v.push_back(42);\r\n        v.~vecT();\r\n        v.~vecT();\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_wchar_t_filebuf_xsmeown/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0000000_wchar_t_filebuf_xsmeown/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <fstream>\r\n#include <ios>\r\n#include <iterator>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    wchar_t wideBuf[] = L\"hello world\";\r\n    char narrowBuf[]  = \"hello world\";\r\n    {\r\n        wfilebuf wf;\r\n        wf.open(\"test.dat\", ios::out | ios::trunc);\r\n        wf.sputn(wideBuf, static_cast<streamsize>(size(wideBuf)));\r\n    }\r\n\r\n    {\r\n        filebuf nf;\r\n        nf.open(\"test.dat\", ios::in | ios::binary);\r\n        char actualNarrow[size(narrowBuf)];\r\n        nf.sgetn(actualNarrow, static_cast<streamsize>(size(actualNarrow)));\r\n        assert(equal(begin(narrowBuf), end(narrowBuf), begin(actualNarrow), end(actualNarrow)));\r\n    }\r\n\r\n    {\r\n        filebuf wf;\r\n        wf.open(\"test.dat\", ios::in);\r\n        char actualWide[size(wideBuf)];\r\n        wf.sgetn(actualWide, static_cast<streamsize>(size(actualWide)));\r\n        assert(equal(begin(wideBuf), end(wideBuf), begin(actualWide), end(actualWide)));\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0095468_clr_exception_ptr_bad_alloc/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0095468_clr_exception_ptr_bad_alloc/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <exception>\r\n#include <new>\r\n\r\nusing namespace std;\r\n\r\n#if !defined(_DLL) || defined(_M_CEE_PURE) || defined(__EDG__)\r\n#define ENABLE_TEST 1\r\n#else\r\n#define ENABLE_TEST 0\r\n#endif // !defined(_DLL) || defined(_M_CEE_PURE) || defined(__EDG__)\r\n\r\n#pragma warning(disable : 4702) // unreachable code\r\n#pragma warning(disable : 28251) // Inconsistent annotation for 'new': this instance has no annotations.\r\n\r\n#if ENABLE_TEST\r\nvoid* operator new(size_t) {\r\n    throw bad_alloc();\r\n}\r\n\r\nstruct user_exception : exception {};\r\n#endif // ENABLE_TEST\r\n\r\nint main() {\r\n#if ENABLE_TEST\r\n    exception_ptr ptr = current_exception();\r\n    assert(\"current_exception returned non-null with no active exception\" && !ptr);\r\n\r\n    try {\r\n        throw user_exception();\r\n    } catch (const exception&) {\r\n        ptr = current_exception();\r\n    }\r\n\r\n    assert(\"current_exception didn't capture a thrown user_exception\" && ptr);\r\n\r\n    try {\r\n        rethrow_exception(ptr);\r\n    } catch (const user_exception&) {\r\n        return 0;\r\n    }\r\n\r\n    abort();\r\n#endif // ENABLE_TEST\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0095837_current_exception_dtor/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0095837_current_exception_dtor/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstring>\r\n#include <exception>\r\n#include <stdexcept>\r\n\r\nusing namespace std;\r\n\r\nstruct A {\r\n    ~A() noexcept {\r\n        assert(uncaught_exceptions() == 2);\r\n        try {\r\n            assert(uncaught_exceptions() == 2);\r\n            throw runtime_error(\"say what?\");\r\n        } catch (const exception&) {\r\n            assert(uncaught_exceptions() == 2);\r\n            auto c = current_exception();\r\n            try {\r\n                assert(uncaught_exceptions() == 2);\r\n                rethrow_exception(c);\r\n            } catch (const runtime_error& e) {\r\n                assert(uncaught_exceptions() == 2);\r\n                assert(strcmp(\"say what?\", e.what()) == 0);\r\n            }\r\n\r\n            assert(uncaught_exceptions() == 2);\r\n\r\n            try {\r\n                assert(uncaught_exceptions() == 2);\r\n                throw;\r\n            } catch (const runtime_error& e) {\r\n                assert(uncaught_exceptions() == 2);\r\n                assert(strcmp(\"say what?\", e.what()) == 0);\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nstruct B {\r\n    ~B() noexcept {\r\n        assert(uncaught_exceptions() == 1);\r\n        try {\r\n            assert(uncaught_exceptions() == 1);\r\n            A aa;\r\n            throw runtime_error(\"oh no!\");\r\n        } catch (const exception&) {\r\n            assert(uncaught_exceptions() == 1);\r\n            auto c = current_exception();\r\n            try {\r\n                assert(uncaught_exceptions() == 1);\r\n                rethrow_exception(c);\r\n            } catch (const runtime_error& e) {\r\n                assert(uncaught_exceptions() == 1);\r\n                assert(strcmp(\"oh no!\", e.what()) == 0);\r\n            }\r\n\r\n            assert(uncaught_exceptions() == 1);\r\n\r\n            try {\r\n                assert(uncaught_exceptions() == 1);\r\n                throw;\r\n            } catch (const runtime_error& e) {\r\n                assert(uncaught_exceptions() == 1);\r\n                assert(strcmp(\"oh no!\", e.what()) == 0);\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nvoid meow() {\r\n    B bb;\r\n    throw runtime_error(\"oh no\");\r\n}\r\n\r\nint main() {\r\n#if !(defined(__clang__) && defined(_M_IX86)) // TRANSITION, LLVM-158302\r\n    try {\r\n        meow();\r\n    } catch (...) {\r\n        assert(uncaught_exceptions() == 0);\r\n        assert(current_exception());\r\n    }\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0099869_pow_float_overflow/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0099869_pow_float_overflow/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cmath>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <limits>\r\n#include <map>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nvoid test_VSO_99869_pow_returned_zero_for_very_small_values() {\r\n    double negativeExponentResult        = pow(2.0, -1024);\r\n    double oneOverPositiveExponentResult = pow(1.0 / 2.0, 1024);\r\n    double doubleExponentResult          = pow(2.0, -1024.0);\r\n\r\n    if (negativeExponentResult != oneOverPositiveExponentResult\r\n        || oneOverPositiveExponentResult != doubleExponentResult) {\r\n        puts(\"The following results should all be the same:\");\r\n        printf(\"pow(2.0, -1024): %E\\n\", negativeExponentResult);\r\n        printf(\"pow(1.0/2.0, 1024): %E\\n\", oneOverPositiveExponentResult);\r\n        printf(\"pow(2.0, -1024.0): %E\\n\", doubleExponentResult);\r\n        abort();\r\n    }\r\n}\r\n\r\ntemplate <typename Target, typename Source>\r\nTarget reinterpret_as(Source f) {\r\n    STATIC_ASSERT(sizeof(Target) == sizeof(Source));\r\n    Target t;\r\n    memcpy(&t, &f, sizeof(t));\r\n    return t;\r\n}\r\n\r\nclass test_std_pow_against_crt {\r\n    uint32_t badClasses = 0;\r\n    map<uint32_t, uint32_t> ulpOff;\r\n\r\n    void single(uint32_t baseCandidate) {\r\n        float input   = reinterpret_as<float>(baseCandidate);\r\n        float powOut  = static_cast<float>(pow(input, 2));\r\n        float powfOut = powf(input, 2.0f);\r\n        int powClass  = fpclassify(powOut);\r\n        int powfClass = fpclassify(powfOut);\r\n        if (powClass != powfClass) {\r\n            ++badClasses;\r\n            printf(\"Bad class for 0x%08X (%E)\\n\", static_cast<unsigned int>(baseCandidate), input);\r\n            return;\r\n        }\r\n\r\n        auto powInt  = reinterpret_as<uint32_t>(powOut);\r\n        auto powfInt = reinterpret_as<uint32_t>(powfOut);\r\n        if (powInt != powfInt) {\r\n            uint32_t diff;\r\n            if (powInt > powfInt) {\r\n                diff = powInt - powfInt;\r\n            } else {\r\n                diff = powfInt - powInt;\r\n            }\r\n\r\n            ++ulpOff[diff];\r\n        }\r\n    }\r\n\r\npublic:\r\n    void exhaustive() {\r\n        for (uint32_t baseCandidate = 0u; baseCandidate < numeric_limits<uint32_t>::max(); ++baseCandidate) {\r\n            this->single(baseCandidate);\r\n        }\r\n\r\n        this->single(numeric_limits<uint32_t>::max());\r\n        for (auto const& p : ulpOff) {\r\n            printf(\r\n                \"%05u ULP off: %05u values\\n\", static_cast<unsigned int>(p.second), static_cast<unsigned int>(p.first));\r\n        }\r\n\r\n        assert(badClasses == 0);\r\n        assert(ulpOff.empty());\r\n    }\r\n};\r\n\r\nint main() {\r\n    test_VSO_99869_pow_returned_zero_for_very_small_values();\r\n\r\n    // This test takes too long to run in the normal battery of tests; but\r\n    // leaving the code here in case we make further changes to pow guts in the\r\n    // future.\r\n    // test_std_pow_against_crt{}.exhaustive();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0102478_moving_allocators/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0102478_moving_allocators/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _USE_HETEROGENEOUS_ALLOCATOR_COMPARE_IN_INTERNAL_CHECK\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <list>\r\n#include <map>\r\n#include <memory>\r\n#include <numeric>\r\n#include <regex>\r\n#include <set>\r\n#include <stdexcept>\r\n#include <string>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nvoid print_report_header() {\r\n    printf(\"%-30s| %-23s| %-8s| %-9s| %-10s| %-11s| %-10s\\n\", \"Type\", \"Test\", \"# Moves\", \"# Copies\", \"Result\",\r\n        \"# Expctd M\", \"# Expctd C\");\r\n}\r\n\r\nvoid print_report_entry(const string& type, const string& test, int num_moves, int num_copies, bool result,\r\n    int num_expected_moves, int num_expected_copies) {\r\n    printf(\"%-30s  %-23s  %-8d  %-9d  %-10s  %-11d  %-10d\\n\", type.data(), test.data(), num_moves, num_copies,\r\n        (result ? \"Pass\" : \"FAILED\"), num_expected_moves, num_expected_copies);\r\n}\r\n\r\nint& get_alloc_moved_count() {\r\n    static int s_alloc_moved_count = 0;\r\n    return s_alloc_moved_count;\r\n}\r\n\r\nvoid reset_alloc_moved() {\r\n    get_alloc_moved_count() = 0;\r\n}\r\n\r\nvoid trigger_alloc_moved() {\r\n    ++get_alloc_moved_count();\r\n}\r\n\r\nint& get_alloc_copied_count() {\r\n    static int s_alloc_copied_count = 0;\r\n    return s_alloc_copied_count;\r\n}\r\n\r\nvoid reset_alloc_copied() {\r\n    get_alloc_copied_count() = 0;\r\n}\r\n\r\nvoid trigger_alloc_copied() {\r\n    ++get_alloc_copied_count();\r\n}\r\n\r\nstruct test_info {\r\n    const char* type_name;\r\n    const char* test_name;\r\n    int count;\r\n};\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\nconstexpr array<test_info, 5> expected_moves_table{{\r\n    {\"*\", \"*\", 1},\r\n    {\"unordered_set\", \"*\", 2}, // unordered_* moves two allocators, one for list, and one for vector of list iterators.\r\n    {\"unordered_multiset\", \"*\", 2},\r\n    {\"unordered_map\", \"*\", 2},\r\n    {\"unordered_multimap\", \"*\", 2},\r\n}};\r\n\r\nconstexpr array<test_info, 2> expected_copies_table{{\r\n    {\"*\", \"*\", 0}, //\r\n    {\"deque\", \"*\", 1}, // deque always causes an additional copy due to creating the proxy allocator\r\n}};\r\n#else // _ITERATOR_DEBUG_LEVEL == 0\r\nconstexpr array<test_info, 5> expected_moves_table{{\r\n    {\"*\", \"*\", 1},\r\n    {\"unordered_set\", \"*\", 2}, // unordered_* have two allocators,\r\n                               // so copy two proxy allocators and have two move operations\r\n    {\"unordered_multiset\", \"*\", 2},\r\n    {\"unordered_map\", \"*\", 2},\r\n    {\"unordered_multimap\", \"*\", 2},\r\n}};\r\n\r\nconstexpr array<test_info, 6> expected_copies_table{{\r\n    {\"*\", \"*\", 1}, // IDL causes an additional copy due to a proxy allocator being created.\r\n    {\"vector\", \"bool\", 2}, // with IDL>0, _Vb_val also allocates a proxy,\r\n                           // so the extra copy is copying the allocator for that purpose\r\n    {\"unordered_set\", \"*\", 2}, // unordered_* have two allocators,\r\n                               // so copy two proxy allocators and have two move operations\r\n    {\"unordered_multiset\", \"*\", 2},\r\n    {\"unordered_map\", \"*\", 2},\r\n    {\"unordered_multimap\", \"*\", 2},\r\n}};\r\n#endif // _ITERATOR_DEBUG_LEVEL == 0\r\n\r\ntemplate <typename ExpectedTable>\r\nint query_expected_table(const ExpectedTable& table, const string& type_name, const string& test_name) {\r\n    const string star{\"*\"};\r\n\r\n    auto exact_match = find_if(begin(table), end(table),\r\n        [&](const test_info& other) { return type_name == other.type_name && test_name == other.test_name; });\r\n\r\n    if (exact_match != end(table)) {\r\n        return exact_match->count;\r\n    }\r\n\r\n    auto fuzzy_match = find_if(begin(table), end(table),\r\n        [&](const test_info& other) { return type_name == other.type_name && star == other.test_name; });\r\n\r\n    if (fuzzy_match != end(table)) {\r\n        return fuzzy_match->count;\r\n    }\r\n\r\n    auto fuzziest_match = find_if(begin(table), end(table),\r\n        [&](const test_info& other) { return star == other.type_name && star == other.test_name; });\r\n\r\n    if (fuzziest_match != end(table)) {\r\n        return fuzziest_match->count;\r\n    }\r\n\r\n    throw runtime_error(\"Missing entry for \" + type_name + \", \" + test_name);\r\n}\r\n\r\nint get_expected_copies(const string& type_name, const string& test_name) {\r\n    return query_expected_table(expected_copies_table, type_name, test_name);\r\n}\r\n\r\nint get_expected_moves(const string& type_name, const string& test_name) {\r\n    return query_expected_table(expected_moves_table, type_name, test_name);\r\n}\r\n\r\ntemplate <typename T>\r\nvoid move_test(T val, const string& type_name, const string& test_name) {\r\n    reset_alloc_moved();\r\n    reset_alloc_copied();\r\n\r\n    auto x = move(val);\r\n\r\n    int num_moves  = get_alloc_moved_count();\r\n    int num_copies = get_alloc_copied_count();\r\n\r\n    int num_expected_moves  = get_expected_moves(type_name, test_name);\r\n    int num_expected_copies = get_expected_copies(type_name, test_name);\r\n\r\n    bool passed = (num_moves == num_expected_moves) && (num_copies == num_expected_copies);\r\n\r\n    print_report_entry(type_name, test_name, num_moves, num_copies, passed, num_expected_moves, num_expected_copies);\r\n\r\n    // no copying of the allocator should occur, only moves.\r\n    assert(passed);\r\n}\r\n\r\ntemplate <typename T>\r\nclass Alloc {\r\npublic:\r\n    typedef T value_type;\r\n\r\n    Alloc() = default;\r\n\r\n    Alloc(const Alloc&) noexcept {\r\n        trigger_alloc_copied();\r\n    }\r\n\r\n    Alloc(Alloc&&) noexcept {\r\n        trigger_alloc_moved();\r\n    }\r\n\r\n    template <typename Other>\r\n    Alloc(const Alloc<Other>&) noexcept {\r\n        trigger_alloc_copied();\r\n    }\r\n\r\n    template <typename Other>\r\n    Alloc(Alloc<Other>&&) noexcept {\r\n        trigger_alloc_moved();\r\n    }\r\n\r\n    template <typename U>\r\n    bool operator==(const Alloc<U>&) const noexcept {\r\n        return true;\r\n    }\r\n\r\n    template <typename U>\r\n    bool operator!=(const Alloc<U>&) const noexcept {\r\n        return false;\r\n    }\r\n\r\n    T* allocate(size_t sz) const {\r\n        allocator<T> alloc;\r\n        return alloc.allocate(sz);\r\n    }\r\n\r\n    void deallocate(T* const p, size_t sz) const noexcept {\r\n        allocator<T> alloc;\r\n        alloc.deallocate(p, sz);\r\n    }\r\n};\r\n\r\ntemplate <typename... Ts>\r\nconst char* template_name(const vector<Ts...>&) {\r\n    return \"vector\";\r\n}\r\n\r\ntemplate <typename... Ts>\r\nconst char* template_name(const list<Ts...>&) {\r\n    return \"list\";\r\n}\r\n\r\ntemplate <typename... Ts>\r\nconst char* template_name(const deque<Ts...>&) {\r\n    return \"deque\";\r\n}\r\n\r\ntemplate <typename... Ts>\r\nconst char* template_name(const forward_list<Ts...>&) {\r\n    return \"forward_list\";\r\n}\r\n\r\ntemplate <typename... Ts>\r\nconst char* template_name(const set<Ts...>&) {\r\n    return \"set\";\r\n}\r\n\r\ntemplate <typename... Ts>\r\nconst char* template_name(const multiset<Ts...>&) {\r\n    return \"multiset\";\r\n}\r\n\r\ntemplate <typename... Ts>\r\nconst char* template_name(const unordered_set<Ts...>&) {\r\n    return \"unordered_set\";\r\n}\r\n\r\ntemplate <typename... Ts>\r\nconst char* template_name(const unordered_multiset<Ts...>&) {\r\n    return \"unordered_multiset\";\r\n}\r\n\r\ntemplate <typename... Ts>\r\nconst char* template_name(const map<Ts...>&) {\r\n    return \"map\";\r\n}\r\n\r\ntemplate <typename... Ts>\r\nconst char* template_name(const multimap<Ts...>&) {\r\n    return \"multimap\";\r\n}\r\n\r\ntemplate <typename... Ts>\r\nconst char* template_name(const unordered_map<Ts...>&) {\r\n    return \"unordered_map\";\r\n}\r\n\r\ntemplate <typename... Ts>\r\nconst char* template_name(const unordered_multimap<Ts...>&) {\r\n    return \"unordered_multimap\";\r\n}\r\n\r\ntemplate <typename T, template <typename...> class Container>\r\nstruct bind_alloc_container {};\r\n\r\ntemplate <typename T>\r\nstruct bind_alloc_container<T, vector> {\r\n    using type = vector<T, Alloc<T>>;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct bind_alloc_container<T, list> {\r\n    using type = list<T, Alloc<T>>;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct bind_alloc_container<T, deque> {\r\n    using type = deque<T, Alloc<T>>;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct bind_alloc_container<T, forward_list> {\r\n    using type = forward_list<T, Alloc<T>>;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct bind_alloc_container<T, set> {\r\n    using type = set<T, less<T>, Alloc<T>>;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct bind_alloc_container<T, multiset> {\r\n    using type = multiset<T, less<T>, Alloc<T>>;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct bind_alloc_container<T, unordered_set> {\r\n    using type = unordered_set<T, hash<T>, equal_to<T>, Alloc<T>>;\r\n};\r\n\r\ntemplate <typename T>\r\nstruct bind_alloc_container<T, unordered_multiset> {\r\n    using type = unordered_multiset<T, hash<T>, equal_to<T>, Alloc<T>>;\r\n};\r\n\r\ntemplate <typename Key, typename Value, template <typename...> class Dictionary>\r\nstruct bind_alloc_dictionary {};\r\n\r\ntemplate <typename Key, typename Value>\r\nstruct bind_alloc_dictionary<Key, Value, map> {\r\n    using type = map<Key, Value, less<Key>, Alloc<pair<const Key, Value>>>;\r\n};\r\n\r\ntemplate <typename Key, typename Value>\r\nstruct bind_alloc_dictionary<Key, Value, multimap> {\r\n    using type = multimap<Key, Value, less<Key>, Alloc<pair<const Key, Value>>>;\r\n};\r\n\r\ntemplate <typename Key, typename Value>\r\nstruct bind_alloc_dictionary<Key, Value, unordered_map> {\r\n    using type = unordered_map<Key, Value, hash<Key>, equal_to<Key>, Alloc<pair<const Key, Value>>>;\r\n};\r\n\r\ntemplate <typename Key, typename Value>\r\nstruct bind_alloc_dictionary<Key, Value, unordered_multimap> {\r\n    using type = unordered_multimap<Key, Value, hash<Key>, equal_to<Key>, Alloc<pair<const Key, Value>>>;\r\n};\r\n\r\ntemplate <typename T, template <typename...> class Container>\r\nusing container_t = typename bind_alloc_container<T, Container>::type;\r\n\r\ntemplate <typename Key, typename Value, template <typename...> class Dictionary>\r\nusing dictionary_t = typename bind_alloc_dictionary<Key, Value, Dictionary>::type;\r\n\r\ntemplate <template <typename...> class Container>\r\nvoid container_test() {\r\n    container_t<int, Container> empty_container;\r\n    string type_name = template_name(empty_container);\r\n\r\n    container_t<int, Container> int_container{1, 2, 3};\r\n    container_t<double, Container> double_container{2.5, 5.2, 11.9};\r\n    container_t<bool, Container> bool_container{true, false, true, false};\r\n\r\n    move_test(empty_container, type_name, \"empty\");\r\n    move_test(int_container, type_name, \"int\");\r\n    move_test(double_container, type_name, \"double\");\r\n    move_test(bool_container, type_name, \"bool\");\r\n}\r\n\r\ntemplate <template <typename...> class Dictionary>\r\nvoid dictionary_test() {\r\n    dictionary_t<int, int, Dictionary> empty_dictionary;\r\n    string type_name = template_name(empty_dictionary);\r\n\r\n    dictionary_t<int, char, Dictionary> number_letter_dictionary{{0, 'A'}, {1, 'B'}, {2, 'C'}};\r\n    dictionary_t<string, bool, Dictionary> word_check_dictionary{{\"notaword\", false}, {\"test\", true}};\r\n    dictionary_t<double, double, Dictionary> double_dictionary{{1.23, 23.4}, {3.14, 15.9}};\r\n\r\n    move_test(empty_dictionary, type_name, \"empty\");\r\n    move_test(number_letter_dictionary, type_name, \"int -> char\");\r\n    move_test(word_check_dictionary, type_name, \"string -> bool\");\r\n    move_test(double_dictionary, type_name, \"double -> double\");\r\n}\r\n\r\nvoid string_test() {\r\n    using str_type   = basic_string<char, char_traits<char>, Alloc<char>>;\r\n    string type_name = \"string\";\r\n\r\n    str_type empty_string;\r\n    str_type copied_from_raw_string = \"Test123\";\r\n    str_type copy_constructed{copied_from_raw_string};\r\n\r\n    move_test(empty_string, type_name, \"empty\");\r\n    move_test(copied_from_raw_string, type_name, \"copied from raw\");\r\n    move_test(copy_constructed, type_name, \"copy constructed\");\r\n}\r\n\r\nvoid match_results_char_test() {\r\n    match_results<const char*, Alloc<csub_match>> mrc;\r\n    string type_name = \"match_results\";\r\n\r\n    move_test(mrc, type_name, \"empty\");\r\n\r\n    basic_regex<char> rgc(\"(a*)(b+)\");\r\n    regex_match(\"xbbx\", mrc, rgc);\r\n\r\n    move_test(mrc, type_name, \"matched\");\r\n}\r\n\r\n// This test also checks to ensure that unordered containers that are moved from are still in a valid state.\r\nvoid test_moved_unordered_set_valid() {\r\n    array<int, 10> nums;\r\n    iota(begin(nums), end(nums), 0);\r\n\r\n    function<size_t(int)> hasher([](int val) { return hash<int>()(val); });\r\n\r\n    function<bool(int, int)> key_equal([](int lhs, int rhs) { return equal_to<int>()(lhs, rhs); });\r\n\r\n    using my_set = unordered_set<int, function<size_t(int)>, function<bool(int, int)>>;\r\n\r\n    my_set my_data(500, hasher, key_equal);\r\n    my_data.insert(begin(nums), end(nums));\r\n    my_set my_copy(my_data);\r\n    my_set new_my_data(move(my_data));\r\n\r\n    assert(my_copy.size() == nums.size());\r\n    assert(new_my_data.size() == nums.size());\r\n\r\n    // my_data is unspecified but valid - the hash function and key equality should still exist and work.\r\n    assert(my_copy.hash_function()(5) == my_data.hash_function()(5));\r\n    assert(my_copy.key_eq()(5, 5) == my_data.key_eq()(5, 5));\r\n\r\n    my_data.clear();\r\n    assert(my_data.empty());\r\n    assert(my_copy.bucket_count() > my_data.bucket_count());\r\n\r\n    my_data.insert(begin(nums), end(nums));\r\n    assert(my_data.size() == nums.size());\r\n\r\n    my_data.erase(5);\r\n    assert(my_data.size() == nums.size() - 1);\r\n}\r\n\r\nint main() {\r\n    print_report_header();\r\n\r\n    container_test<vector>();\r\n    container_test<list>();\r\n    container_test<deque>();\r\n    container_test<forward_list>();\r\n    container_test<set>();\r\n    container_test<multiset>();\r\n    container_test<unordered_set>();\r\n    container_test<unordered_multiset>();\r\n\r\n    dictionary_test<map>();\r\n    dictionary_test<multimap>();\r\n    dictionary_test<unordered_map>();\r\n    dictionary_test<unordered_multimap>();\r\n\r\n    string_test();\r\n\r\n    match_results_char_test();\r\n\r\n    test_moved_unordered_set_valid();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0104705_throwing_copy_in_current_exception/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0104705_throwing_copy_in_current_exception/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <exception>\r\n\r\nusing namespace std;\r\n\r\nstruct BasicLifetimeTracker {\r\n    static size_t allAlive;\r\n};\r\n\r\nsize_t BasicLifetimeTracker::allAlive = 0;\r\n\r\ntemplate <class T>\r\nstruct LifetimeTracker : BasicLifetimeTracker {\r\n    static size_t thisAlive;\r\n\r\n    static void AssertAlive(const size_t expected) {\r\n        assert(thisAlive == expected);\r\n    }\r\n\r\n    LifetimeTracker() {\r\n        ++thisAlive;\r\n        ++allAlive;\r\n    }\r\n\r\n    LifetimeTracker(const LifetimeTracker&) {\r\n        ++thisAlive;\r\n        ++allAlive;\r\n    }\r\n\r\n    LifetimeTracker& operator=(const LifetimeTracker&) = default;\r\n\r\n    ~LifetimeTracker() {\r\n        --thisAlive;\r\n        --allAlive;\r\n    }\r\n};\r\n\r\ntemplate <class T>\r\nsize_t LifetimeTracker<T>::thisAlive = 0;\r\n\r\ntemplate <size_t NestLevel>\r\nstruct EvilException : LifetimeTracker<EvilException<NestLevel>> {\r\n    EvilException() = default;\r\n    EvilException(const EvilException&) {\r\n        throw EvilException<NestLevel - 1>();\r\n    }\r\n};\r\n\r\ntemplate <>\r\nstruct EvilException<0> : LifetimeTracker<EvilException<0>> {};\r\n\r\n// The asserts about number of exceptions alive in this test are MSVC ABI assumptions:\r\n// We copy the exception object in throw (as mandated by the standard), current_exception (allowed by the standard),\r\n// and rethrow_exception (unclear compliance with the standard; P1675 looks to make it allowed)\r\n\r\nint main() {\r\n#if !(defined(__clang__) && defined(_M_IX86)) // TRANSITION, LLVM-158302\r\n    try {\r\n        throw EvilException<0>(); // copy 1\r\n    } catch (...) {\r\n        try {\r\n            rethrow_exception( // copy 3\r\n                current_exception() // copy 2\r\n            );\r\n        } catch (const EvilException<0>&) { // unwind destroys copy 2\r\n            LifetimeTracker<EvilException<0>>::AssertAlive(2);\r\n        }\r\n    }\r\n    assert(BasicLifetimeTracker::allAlive == 0);\r\n\r\n    {\r\n        exception_ptr ptr;\r\n        try {\r\n            throw EvilException<0>(); // copy 1\r\n        } catch (...) {\r\n            try {\r\n                ptr = current_exception(); // copy 2\r\n                rethrow_exception(ptr); // copy 3\r\n            } catch (const EvilException<0>&) {\r\n                LifetimeTracker<EvilException<0>>::AssertAlive(3);\r\n            }\r\n        }\r\n        LifetimeTracker<EvilException<0>>::AssertAlive(1); // *ptr\r\n    }\r\n\r\n    assert(BasicLifetimeTracker::allAlive == 0);\r\n\r\n    try {\r\n        throw EvilException<1>(); // copy 1\r\n    } catch (...) {\r\n        try {\r\n            rethrow_exception( // EvilException<0> copy 2\r\n                current_exception() // attempt copy 2, fails, making EvilException<0> copy 1\r\n            );\r\n        } catch (const EvilException<0>&) { // unwind destroys EvilException<0> copy 2\r\n            LifetimeTracker<EvilException<0>>::AssertAlive(1);\r\n            LifetimeTracker<EvilException<1>>::AssertAlive(1);\r\n        }\r\n    }\r\n    assert(BasicLifetimeTracker::allAlive == 0);\r\n\r\n    try {\r\n        throw EvilException<2>(); // copy 1\r\n    } catch (...) {\r\n        try {\r\n            rethrow_exception(current_exception() // attempt copy 2, fails,\r\n                                                  // making EvilException<1> copy 1,\r\n                                                  // copying that fails, making bad_exception\r\n            );\r\n        } catch (const bad_exception&) {\r\n            LifetimeTracker<EvilException<0>>::AssertAlive(0);\r\n            LifetimeTracker<EvilException<1>>::AssertAlive(0);\r\n            LifetimeTracker<EvilException<2>>::AssertAlive(1);\r\n        }\r\n    }\r\n    assert(BasicLifetimeTracker::allAlive == 0);\r\n#endif // ^^^ no workaround ^^^\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0104705_throwing_copy_in_current_exception_seh/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\eha_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0104705_throwing_copy_in_current_exception_seh/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <exception>\r\n#include <excpt.h>\r\n\r\n#pragma warning(push) // TRANSITION, OS-23694920\r\n#pragma warning(disable : 4668) // 'MEOW' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'\r\n#include <Windows.h>\r\n#pragma warning(pop)\r\n\r\nULONG_PTR data[] = {0xC0FFEE, 1729};\r\n\r\nstruct LifetimeTracker {\r\n    static size_t thisAlive;\r\n\r\n    static void AssertAlive(const size_t expected) {\r\n        assert(thisAlive == expected);\r\n    }\r\n\r\n    LifetimeTracker() {\r\n        ++thisAlive;\r\n    }\r\n\r\n    LifetimeTracker(const LifetimeTracker&) {\r\n        ++thisAlive;\r\n    }\r\n\r\n    LifetimeTracker& operator=(const LifetimeTracker&) = default;\r\n\r\n    ~LifetimeTracker() {\r\n        --thisAlive;\r\n    }\r\n};\r\n\r\nsize_t LifetimeTracker::thisAlive = 0;\r\n\r\nstruct EvilException : LifetimeTracker {\r\n    EvilException() = default;\r\n    EvilException(const EvilException&) {\r\n        RaiseException(1234, EXCEPTION_NONCONTINUABLE, 2, data);\r\n    }\r\n};\r\n\r\nvoid AssertExceptionRecordOk(const EXCEPTION_POINTERS* const pointers) {\r\n    assert(pointers->ExceptionRecord->ExceptionCode == 1234);\r\n    assert((pointers->ExceptionRecord->ExceptionFlags & EXCEPTION_NONCONTINUABLE) == EXCEPTION_NONCONTINUABLE);\r\n    assert(pointers->ExceptionRecord->ExceptionRecord == nullptr);\r\n    assert(pointers->ExceptionRecord->ExceptionAddress != nullptr);\r\n    assert(pointers->ExceptionRecord->NumberParameters == 2);\r\n    assert(pointers->ExceptionRecord->ExceptionInformation[0] == data[0]);\r\n    assert(pointers->ExceptionRecord->ExceptionInformation[1] == data[1]);\r\n}\r\n\r\nvoid Rethrow(const std::exception_ptr& ptr) {\r\n    // separate function to allow use in functions with __try/__except\r\n    std::rethrow_exception(ptr);\r\n}\r\n\r\nvoid AssertRethrowNoContinuationOK(const std::exception_ptr& ex) {\r\n    __try {\r\n        Rethrow(ex);\r\n    } __except (AssertExceptionRecordOk(GetExceptionInformation()), EXCEPTION_EXECUTE_HANDLER) {\r\n    }\r\n}\r\n\r\nint main() {\r\n    try {\r\n        throw EvilException();\r\n    } catch (...) {\r\n        AssertRethrowNoContinuationOK(std::current_exception());\r\n    }\r\n\r\n    LifetimeTracker::AssertAlive(0); // if this assert fails, double check that you built with /EHa\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0105317_expression_sfinae/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0105317_expression_sfinae/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <functional>\r\n#include <memory>\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n// Test:\r\n// N3462 \"std::result_of and SFINAE\"\r\n// VSO-105317 \"<type_traits>: [expression sfinae] std::result_of used in template function declaration can cause C2893\r\n// (probably ignores SFINAE rule)\" VSO-120635 \"<type_traits>: [expression sfinae] C++14 result_of must be\r\n// SFINAE-friendly\"\r\n\r\n#if _HAS_CXX17\r\ntemplate <typename Void, typename Callable, typename... Args>\r\nstruct HasInvokeResultT : false_type {\r\n    STATIC_ASSERT(!is_invocable_v<Callable, Args...>);\r\n    STATIC_ASSERT(!is_nothrow_invocable_v<Callable, Args...>);\r\n    STATIC_ASSERT(!is_invocable_r_v<void, Callable, Args...>);\r\n    STATIC_ASSERT(!is_nothrow_invocable_r_v<void, Callable, Args...>);\r\n};\r\n\r\ntemplate <typename Callable, typename... Args>\r\nstruct HasInvokeResultT<void_t<invoke_result_t<Callable, Args...>>, Callable, Args...> : true_type {\r\n    STATIC_ASSERT(is_invocable_v<Callable, Args...>);\r\n    STATIC_ASSERT(is_invocable_r_v<void, Callable, Args...>);\r\n};\r\n\r\ntemplate <typename A>\r\nstruct HasResultOfT;\r\n\r\ntemplate <typename Callable, typename... Args>\r\nstruct HasResultOfT<Callable(Args...)> : HasInvokeResultT<void, Callable, Args...>::type {};\r\n#else // _HAS_CXX17\r\ntemplate <typename A, typename = void>\r\nstruct HasResultOfT : false_type {};\r\n\r\ntemplate <typename A>\r\nstruct HasResultOfT<A, void_t<result_of_t<A>>> : true_type {};\r\n#endif // _HAS_CXX17\r\n\r\n\r\n// BAD: Integers aren't callable.\r\nSTATIC_ASSERT(!HasResultOfT<int(int, int)>::value);\r\n\r\n\r\n// GOOD: Function pointers are callable.\r\nusing FP = int (*)(int);\r\nSTATIC_ASSERT(HasResultOfT<FP(int)>::value);\r\n\r\n// BAD: Not enough arguments.\r\nSTATIC_ASSERT(!HasResultOfT<FP()>::value);\r\n\r\n// BAD: Too many arguments.\r\nSTATIC_ASSERT(!HasResultOfT<FP(int, int)>::value);\r\n\r\n// BAD: Can't convert argument.\r\nSTATIC_ASSERT(!HasResultOfT<FP(void*)>::value);\r\n\r\n// GOOD: User-defined conversion.\r\nstruct Okay {\r\n    operator int();\r\n};\r\nSTATIC_ASSERT(HasResultOfT<FP(Okay)>::value);\r\n\r\n// BAD: Multiple user-defined conversions.\r\nstruct MultipleUDCs {\r\n    operator Okay();\r\n};\r\nSTATIC_ASSERT(!HasResultOfT<FP(MultipleUDCs)>::value);\r\n\r\n// BAD: Inaccessible conversion.\r\nclass Inaccessible {\r\nprivate:\r\n    operator int();\r\n};\r\nSTATIC_ASSERT(!HasResultOfT<FP(Inaccessible)>::value);\r\n\r\n// BAD: Ambiguous conversion.\r\nstruct Ambiguous {\r\n    operator short();\r\n    operator unsigned short();\r\n};\r\nSTATIC_ASSERT(!HasResultOfT<FP(Ambiguous)>::value);\r\n\r\n// BAD: Explicit conversion.\r\nstruct Explicit {\r\n    explicit operator int();\r\n};\r\nSTATIC_ASSERT(!HasResultOfT<FP(Explicit)>::value);\r\n\r\n// GOOD: cv-qualifiers and ref-qualifiers.\r\nstruct Woof {\r\n    operator int() &;\r\n};\r\nSTATIC_ASSERT(HasResultOfT<FP(Woof&)>::value);\r\n\r\n// BAD: cv-qualifiers and ref-qualifiers.\r\nSTATIC_ASSERT(!HasResultOfT<FP(const Woof&)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<FP(Woof)>::value);\r\n\r\n// GOOD: Templated UDC.\r\nstruct Template {\r\n    template <typename T>\r\n    operator T();\r\n};\r\nSTATIC_ASSERT(HasResultOfT<FP(Template)>::value);\r\n\r\n// BAD: Template argument deduction failure.\r\nstruct Deduction {\r\n    template <typename T, typename U>\r\n    operator T();\r\n};\r\nSTATIC_ASSERT(!HasResultOfT<FP(Deduction)>::value);\r\n\r\n// BAD: Substitution failure.\r\nstruct Substitution {\r\n    template <typename T, typename = enable_if_t<!is_integral_v<T>>>\r\n    operator T();\r\n};\r\nSTATIC_ASSERT(!HasResultOfT<FP(Substitution)>::value);\r\n\r\n// GOOD: Reference binding.\r\nusing FP2 = int (*)(int&);\r\nSTATIC_ASSERT(HasResultOfT<FP2(int&)>::value);\r\n\r\n// BAD: Reference binding can't discard constness.\r\nSTATIC_ASSERT(!HasResultOfT<FP2(const int&)>::value);\r\n\r\n// GOOD: Rvalue references bind to rvalues.\r\nusing FP3 = int (*)(int&&);\r\nSTATIC_ASSERT(HasResultOfT<FP3(int)>::value);\r\n\r\n// BAD: Rvalue references can't bind to lvalues.\r\nSTATIC_ASSERT(!HasResultOfT<FP3(int&)>::value);\r\n\r\n\r\n// Function references behave like function pointers.\r\nusing FR = int (&)(int);\r\nSTATIC_ASSERT(HasResultOfT<FR(int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<FR()>::value);\r\nSTATIC_ASSERT(!HasResultOfT<FR(int, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<FR(void*)>::value);\r\nSTATIC_ASSERT(HasResultOfT<FR(Okay)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<FR(MultipleUDCs)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<FR(Inaccessible)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<FR(Ambiguous)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<FR(Explicit)>::value);\r\nSTATIC_ASSERT(HasResultOfT<FR(Woof&)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<FR(const Woof&)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<FR(Woof)>::value);\r\nSTATIC_ASSERT(HasResultOfT<FR(Template)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<FR(Deduction)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<FR(Substitution)>::value);\r\nusing FR2 = int (&)(int&);\r\nSTATIC_ASSERT(HasResultOfT<FR2(int&)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<FR2(const int&)>::value);\r\nusing FR3 = int (&)(int&&);\r\nSTATIC_ASSERT(HasResultOfT<FR3(int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<FR3(int&)>::value);\r\n\r\n\r\n// BAD: Totally empty classes aren't callable.\r\nstruct Empty {};\r\nSTATIC_ASSERT(!HasResultOfT<Empty(int)>::value);\r\n\r\n\r\n// Classes with function call operators behave like function pointers.\r\nstruct Functor {\r\n    int operator()(int);\r\n};\r\nSTATIC_ASSERT(HasResultOfT<Functor(int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Functor()>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Functor(int, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Functor(void*)>::value);\r\nSTATIC_ASSERT(HasResultOfT<Functor(Okay)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Functor(MultipleUDCs)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Functor(Inaccessible)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Functor(Ambiguous)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Functor(Explicit)>::value);\r\nSTATIC_ASSERT(HasResultOfT<Functor(Woof&)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Functor(const Woof&)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Functor(Woof)>::value);\r\nSTATIC_ASSERT(HasResultOfT<Functor(Template)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Functor(Deduction)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Functor(Substitution)>::value);\r\nstruct Functor2 {\r\n    int operator()(int&);\r\n};\r\nSTATIC_ASSERT(HasResultOfT<Functor2(int&)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Functor2(const int&)>::value);\r\nstruct Functor3 {\r\n    int operator()(int&&);\r\n};\r\nSTATIC_ASSERT(HasResultOfT<Functor3(int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Functor3(int&)>::value);\r\n\r\n// More scenarios.\r\nclass InaccessibleFunctor {\r\nprivate:\r\n    int operator()(int);\r\n};\r\nSTATIC_ASSERT(!HasResultOfT<InaccessibleFunctor(int)>::value);\r\nstruct AmbiguousFunctor {\r\n    int operator()(long);\r\n    int operator()(long long);\r\n};\r\nSTATIC_ASSERT(!HasResultOfT<AmbiguousFunctor(int)>::value);\r\nstruct OinkFunctor {\r\n    int operator()(int) &;\r\n};\r\nSTATIC_ASSERT(HasResultOfT<OinkFunctor&(int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<const OinkFunctor&(int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<OinkFunctor(int)>::value);\r\nstruct TemplateFunctor {\r\n    template <typename T>\r\n    int operator()(T);\r\n};\r\nSTATIC_ASSERT(HasResultOfT<TemplateFunctor(int)>::value);\r\nstruct DeductionFunctor {\r\n    template <typename T, typename U>\r\n    int operator()(T);\r\n};\r\nSTATIC_ASSERT(!HasResultOfT<DeductionFunctor(int)>::value);\r\nstruct SubstitutionFunctor {\r\n    template <typename T, typename = enable_if_t<!is_integral_v<T>>>\r\n    int operator()(T);\r\n};\r\nSTATIC_ASSERT(!HasResultOfT<SubstitutionFunctor(int)>::value);\r\n\r\n\r\n// Classes that are convertible to function pointers are also callable.\r\n// See N4527 13.3.1.1.2 [over.call.object]/2.\r\nstruct Conv {\r\n    operator FP();\r\n};\r\nSTATIC_ASSERT(HasResultOfT<Conv(int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Conv()>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Conv(int, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Conv(void*)>::value);\r\nSTATIC_ASSERT(HasResultOfT<Conv(Okay)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Conv(MultipleUDCs)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Conv(Inaccessible)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Conv(Ambiguous)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Conv(Explicit)>::value);\r\nSTATIC_ASSERT(HasResultOfT<Conv(Woof&)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Conv(const Woof&)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Conv(Woof)>::value);\r\nSTATIC_ASSERT(HasResultOfT<Conv(Template)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Conv(Deduction)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Conv(Substitution)>::value);\r\nstruct Conv2 {\r\n    operator FP2();\r\n};\r\nSTATIC_ASSERT(HasResultOfT<Conv2(int&)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Conv2(const int&)>::value);\r\nstruct Conv3 {\r\n    operator FP3();\r\n};\r\nSTATIC_ASSERT(HasResultOfT<Conv3(int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<Conv3(int&)>::value);\r\nclass InaccessibleConv {\r\nprivate:\r\n    operator FP();\r\n};\r\nSTATIC_ASSERT(!HasResultOfT<InaccessibleConv(int)>::value);\r\nusing FP4 = int (*)(long);\r\nusing FP5 = int (*)(long long);\r\nstruct AmbiguousConv {\r\n    operator FP4();\r\n    operator FP5();\r\n};\r\nSTATIC_ASSERT(!HasResultOfT<AmbiguousConv(int)>::value);\r\nstruct OinkConv {\r\n    operator FP() &;\r\n};\r\nSTATIC_ASSERT(HasResultOfT<OinkConv&(int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<const OinkConv&(int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<OinkConv(int)>::value);\r\n\r\n// BAD: Explicit conversions to function pointers aren't callable.\r\nstruct ExplicitConv {\r\n    explicit operator FP();\r\n};\r\nSTATIC_ASSERT(!HasResultOfT<ExplicitConv(int)>::value);\r\n\r\n\r\nstruct X {};\r\n\r\nstruct Unrelated {};\r\n\r\nclass InaccessibleDerived : private X {};\r\n\r\nstruct DerivedOne : X {};\r\nstruct DerivedTwo : X {};\r\nstruct AmbiguousDerived : DerivedOne, DerivedTwo {};\r\n\r\nstruct Pointer {\r\n    X& operator*();\r\n};\r\n\r\nclass InaccessiblePointer {\r\nprivate:\r\n    X& operator*();\r\n};\r\n\r\nstruct AmbiguousPointer {\r\n    template <typename = void>\r\n    X& operator*();\r\n    template <int = 0>\r\n    X& operator*();\r\n};\r\n\r\nstruct OinkPointer {\r\n    X& operator*() &;\r\n};\r\n\r\nstruct TemplatePointer {\r\n    template <typename T = void>\r\n    X& operator*();\r\n};\r\n\r\nstruct DeductionPointer {\r\n    template <typename T>\r\n    X& operator*();\r\n};\r\n\r\nstruct SubstitutionPointer {\r\n    template <typename T = void, typename = enable_if_t<!is_void_v<T>>>\r\n    X& operator*();\r\n};\r\n\r\n\r\n// GOOD: PMDs are callable.\r\nusing PMD = int X::*;\r\nSTATIC_ASSERT(HasResultOfT<PMD(X)>::value);\r\n\r\n// BAD: Zero arguments (important).\r\nSTATIC_ASSERT(!HasResultOfT<PMD()>::value);\r\n\r\n// BAD: Too many arguments.\r\nSTATIC_ASSERT(!HasResultOfT<PMD(X, int)>::value);\r\n\r\n// BAD: int is bogus.\r\nSTATIC_ASSERT(!HasResultOfT<PMD(int)>::value);\r\n\r\n// BAD: Also bogus.\r\nSTATIC_ASSERT(!HasResultOfT<PMD(Unrelated)>::value);\r\n\r\n// BAD: Inaccessible inheritance.\r\nSTATIC_ASSERT(!HasResultOfT<PMD(InaccessibleDerived)>::value);\r\n\r\n// BAD: Ambiguous inheritance.\r\nSTATIC_ASSERT(!HasResultOfT<PMD(AmbiguousDerived)>::value);\r\n\r\n// PMDs are also callable on reference_wrappers.\r\nSTATIC_ASSERT(HasResultOfT<PMD(reference_wrapper<X>)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMD(reference_wrapper<X>, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMD(reference_wrapper<int>)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMD(reference_wrapper<Unrelated>)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMD(reference_wrapper<InaccessibleDerived>)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMD(reference_wrapper<AmbiguousDerived>)>::value);\r\n\r\n// PMDs are also callable on pointers.\r\nSTATIC_ASSERT(HasResultOfT<PMD(X*)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMD(X*, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMD(int*)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMD(Unrelated*)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMD(InaccessibleDerived*)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMD(AmbiguousDerived*)>::value);\r\n\r\n// Smart pointer scenarios.\r\nSTATIC_ASSERT(HasResultOfT<PMD(Pointer)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMD(InaccessiblePointer)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMD(AmbiguousPointer)>::value);\r\nSTATIC_ASSERT(HasResultOfT<PMD(OinkPointer&)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMD(const OinkPointer&)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMD(OinkPointer)>::value);\r\nSTATIC_ASSERT(HasResultOfT<PMD(TemplatePointer)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMD(DeductionPointer)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMD(SubstitutionPointer)>::value);\r\n\r\n\r\n// PMFs have all of the issues that PMDs have. (There are a couple more cases for arity.)\r\nusing PMF = int (X::*)(int);\r\nSTATIC_ASSERT(HasResultOfT<PMF(X, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(X)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF()>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(X, int, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(int, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(Unrelated, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(InaccessibleDerived, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(AmbiguousDerived, int)>::value);\r\nSTATIC_ASSERT(HasResultOfT<PMF(reference_wrapper<X>, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(reference_wrapper<X>)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(reference_wrapper<X>, int, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(reference_wrapper<int>, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(reference_wrapper<Unrelated>, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(reference_wrapper<InaccessibleDerived>, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(reference_wrapper<AmbiguousDerived>, int)>::value);\r\nSTATIC_ASSERT(HasResultOfT<PMF(X*, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(X*)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(X*, int, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(int*, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(Unrelated*, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(InaccessibleDerived*, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(AmbiguousDerived*, int)>::value);\r\nSTATIC_ASSERT(HasResultOfT<PMF(Pointer, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(InaccessiblePointer, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(AmbiguousPointer, int)>::value);\r\nSTATIC_ASSERT(HasResultOfT<PMF(OinkPointer&, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(const OinkPointer&, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(OinkPointer, int)>::value);\r\nSTATIC_ASSERT(HasResultOfT<PMF(TemplatePointer, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(DeductionPointer, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(SubstitutionPointer, int)>::value);\r\n\r\n\r\n// PMFs also have all of the issues that function pointers have.\r\nSTATIC_ASSERT(!HasResultOfT<PMF(X, void*)>::value);\r\nSTATIC_ASSERT(HasResultOfT<PMF(X, Okay)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(X, MultipleUDCs)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(X, Inaccessible)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(X, Ambiguous)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(X, Explicit)>::value);\r\nSTATIC_ASSERT(HasResultOfT<PMF(X, Woof&)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(X, const Woof&)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(X, Woof)>::value);\r\nSTATIC_ASSERT(HasResultOfT<PMF(X, Template)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(X, Deduction)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF(X, Substitution)>::value);\r\nusing PMF2 = int (X::*)(int&);\r\nSTATIC_ASSERT(HasResultOfT<PMF2(X, int&)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF2(X, const int&)>::value);\r\nusing PMF3 = int (X::*)(int&&);\r\nSTATIC_ASSERT(HasResultOfT<PMF3(X, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF3(X, int&)>::value);\r\n\r\n\r\n// Finally, PMFs care about cv-qualifiers and ref-qualifiers.\r\nusing PMF4 = int (X::*)(int) &;\r\nSTATIC_ASSERT(HasResultOfT<PMF4(X&, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF4(const X&, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF4(X&&, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF4(const X&&, int)>::value);\r\nusing PMF5 = int (X::*)(int) &&;\r\nSTATIC_ASSERT(!HasResultOfT<PMF5(X&, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF5(const X&, int)>::value);\r\nSTATIC_ASSERT(HasResultOfT<PMF5(X&&, int)>::value);\r\nSTATIC_ASSERT(!HasResultOfT<PMF5(const X&&, int)>::value);\r\n\r\n\r\n#if _HAS_CXX17\r\n// Test:\r\n// P0604R0 invoke_result, is_invocable, is_nothrow_invocable\r\n\r\n// HasResultOfT also tests is_invocable.\r\n\r\n// Test is_invocable_r. (Same scenarios as std::function SFINAE below.)\r\nusing Long_FP_Short            = long (*)(short);\r\nusing Int_FP_Int               = int (*)(int);\r\nusing Long_FP_DoubleStar       = long (*)(double*);\r\nusing DoubleStar_FP_Short      = double* (*) (short);\r\nusing DoubleStar_FP_DoubleStar = double* (*) (double*);\r\nusing Void_FP_Short            = void (*)(short);\r\nusing Void_FP_DoubleStar       = void (*)(double*);\r\nusing SharedPtrInt_FP_Nullary  = shared_ptr<int> (*)();\r\nSTATIC_ASSERT(is_invocable_r_v<long, Long_FP_Short, short>);\r\nSTATIC_ASSERT(is_invocable_r_v<long, Int_FP_Int, short>);\r\nSTATIC_ASSERT(!is_invocable_r_v<long, Long_FP_DoubleStar, short>);\r\nSTATIC_ASSERT(!is_invocable_r_v<long, DoubleStar_FP_Short, short>);\r\nSTATIC_ASSERT(!is_invocable_r_v<long, DoubleStar_FP_DoubleStar, short>);\r\nSTATIC_ASSERT(!is_invocable_r_v<long, Void_FP_Short, short>);\r\nSTATIC_ASSERT(!is_invocable_r_v<long, Void_FP_DoubleStar, short>);\r\nSTATIC_ASSERT(is_invocable_r_v<void, Void_FP_Short, short>);\r\nSTATIC_ASSERT(is_invocable_r_v<void, Int_FP_Int, short>);\r\nSTATIC_ASSERT(!is_invocable_r_v<void, Void_FP_DoubleStar, short>);\r\nSTATIC_ASSERT(is_invocable_r_v<shared_ptr<const int>, SharedPtrInt_FP_Nullary>);\r\nSTATIC_ASSERT(!is_invocable_r_v<bool, SharedPtrInt_FP_Nullary>);\r\n\r\n// Finally, test is_nothrow_invocable and is_nothrow_invocable_r.\r\n\r\nstruct Kitty {\r\n    int operator()(int) noexcept;\r\n\r\n    int operator()(int, int);\r\n};\r\n\r\n// Not callable due to input.\r\nSTATIC_ASSERT(!is_invocable_v<Kitty, double*>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_v<Kitty, double*>);\r\n\r\n// Not callable due to output.\r\nSTATIC_ASSERT(!is_invocable_r_v<double*, Kitty, int>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_r_v<double*, Kitty, int>);\r\n\r\n// When the return type is void, does the invocation throw?\r\nSTATIC_ASSERT(is_invocable_v<Kitty, int>);\r\nSTATIC_ASSERT(is_nothrow_invocable_v<Kitty, int>);\r\nSTATIC_ASSERT(is_invocable_v<Kitty, int, int>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_v<Kitty, int, int>);\r\n\r\n// These PMD invocations don't throw.\r\nSTATIC_ASSERT(is_invocable_v<PMD, X>);\r\nSTATIC_ASSERT(is_nothrow_invocable_v<PMD, X>);\r\nSTATIC_ASSERT(is_invocable_v<PMD, reference_wrapper<X>>);\r\nSTATIC_ASSERT(is_nothrow_invocable_v<PMD, reference_wrapper<X>>);\r\nSTATIC_ASSERT(is_invocable_v<PMD, X*>);\r\nSTATIC_ASSERT(is_nothrow_invocable_v<PMD, X*>);\r\n\r\n// Test noexcept function types.\r\n#ifdef __cpp_noexcept_function_type\r\nusing FP_noexcept                                 = int (*)(int) noexcept;\r\nusing FR_noexcept                                 = int (&)(int) noexcept;\r\nusing PMF_noexcept                                = int (X::*)(int) noexcept;\r\ninline constexpr bool noexcept_in_the_type_system = true;\r\n#else // ^^^ __cpp_noexcept_function_type / !__cpp_noexcept_function_type vvv\r\nusing FP_noexcept                                 = int (*)(int);\r\nusing FR_noexcept                                 = int (&)(int);\r\nusing PMF_noexcept                                = int (X::*)(int);\r\ninline constexpr bool noexcept_in_the_type_system = false;\r\n#endif // __cpp_noexcept_function_type\r\n\r\nSTATIC_ASSERT(is_invocable_v<FP, int>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_v<FP, int>);\r\nSTATIC_ASSERT(is_invocable_v<FP_noexcept, int>);\r\nSTATIC_ASSERT(is_nothrow_invocable_v<FP_noexcept, int> == noexcept_in_the_type_system);\r\n\r\nSTATIC_ASSERT(is_invocable_v<FR, int>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_v<FR, int>);\r\nSTATIC_ASSERT(is_invocable_v<FR_noexcept, int>);\r\nSTATIC_ASSERT(is_nothrow_invocable_v<FR_noexcept, int> == noexcept_in_the_type_system);\r\n\r\nSTATIC_ASSERT(is_invocable_v<PMF, X, int>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_v<PMF, X, int>);\r\nSTATIC_ASSERT(is_invocable_v<PMF, reference_wrapper<X>, int>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_v<PMF, reference_wrapper<X>, int>);\r\nSTATIC_ASSERT(is_invocable_v<PMF, X*, int>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_v<PMF, X*, int>);\r\nSTATIC_ASSERT(is_invocable_v<PMF_noexcept, X, int>);\r\nSTATIC_ASSERT(is_nothrow_invocable_v<PMF_noexcept, X, int> == noexcept_in_the_type_system);\r\nSTATIC_ASSERT(is_invocable_v<PMF_noexcept, reference_wrapper<X>, int>);\r\nSTATIC_ASSERT(is_nothrow_invocable_v<PMF_noexcept, reference_wrapper<X>, int> == noexcept_in_the_type_system);\r\nSTATIC_ASSERT(is_invocable_v<PMF_noexcept, X*, int>);\r\nSTATIC_ASSERT(is_nothrow_invocable_v<PMF_noexcept, X*, int> == noexcept_in_the_type_system);\r\n\r\nstruct Conv_noexcept1 {\r\n    operator FP() noexcept;\r\n};\r\n\r\nstruct Conv_noexcept2 {\r\n    operator FP_noexcept();\r\n};\r\n\r\nstruct Conv_noexcept3 {\r\n    operator FP_noexcept() noexcept;\r\n};\r\n\r\nSTATIC_ASSERT(is_invocable_v<Conv, int>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_v<Conv, int>);\r\nSTATIC_ASSERT(is_invocable_v<Conv_noexcept1, int>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_v<Conv_noexcept1, int>);\r\nSTATIC_ASSERT(is_invocable_v<Conv_noexcept2, int>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_v<Conv_noexcept2, int>);\r\nSTATIC_ASSERT(is_invocable_v<Conv_noexcept3, int>);\r\nSTATIC_ASSERT(is_nothrow_invocable_v<Conv_noexcept3, int> == noexcept_in_the_type_system);\r\n\r\n// Test argument conversions.\r\nstruct Okay_noexcept {\r\n    operator int() noexcept;\r\n};\r\n\r\nSTATIC_ASSERT(is_invocable_v<FP_noexcept, Okay>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_v<FP_noexcept, Okay>);\r\nSTATIC_ASSERT(is_invocable_v<FP_noexcept, Okay_noexcept>);\r\nSTATIC_ASSERT(is_nothrow_invocable_v<FP_noexcept, Okay_noexcept> == noexcept_in_the_type_system);\r\n\r\n// When the return type is non-void, does the invocation throw?\r\nSTATIC_ASSERT(is_invocable_r_v<long, Kitty, int>);\r\nSTATIC_ASSERT(is_nothrow_invocable_r_v<long, Kitty, int>);\r\nSTATIC_ASSERT(is_invocable_r_v<long, Kitty, int, int>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_r_v<long, Kitty, int, int>);\r\n\r\n// When the return type is void, does the invocation throw?\r\nSTATIC_ASSERT(is_invocable_r_v<void, Kitty, int>);\r\nSTATIC_ASSERT(is_nothrow_invocable_r_v<void, Kitty, int>);\r\nSTATIC_ASSERT(is_invocable_r_v<void, Kitty, int, int>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_r_v<void, Kitty, int, int>);\r\n\r\nstruct Puppy {\r\n    explicit Puppy(int);\r\n    Puppy(long) noexcept;\r\n};\r\n\r\nstruct Zebra {\r\n    explicit Zebra(int) noexcept;\r\n    Zebra(long);\r\n};\r\n\r\n// When direct-inited from int, Puppy throws and Zebra doesn't.\r\nSTATIC_ASSERT(!is_nothrow_constructible_v<Puppy, int>);\r\nSTATIC_ASSERT(is_nothrow_constructible_v<Zebra, int>);\r\n\r\n// When the return type is non-void, does the conversion throw?\r\n// When copy-inited from int, Puppy doesn't throw and Zebra does.\r\nSTATIC_ASSERT(is_invocable_r_v<Puppy, Kitty, int>);\r\nSTATIC_ASSERT(is_nothrow_invocable_r_v<Puppy, Kitty, int>);\r\nSTATIC_ASSERT(is_invocable_r_v<Zebra, Kitty, int>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_r_v<Zebra, Kitty, int>);\r\n\r\n// Defend against regression of VSO-963790, in which is_invocable_r mishandles non-movable return types\r\nstruct NonMovable {\r\n    NonMovable(NonMovable&&)      = delete;\r\n    NonMovable(const NonMovable&) = delete;\r\n};\r\n\r\ntemplate <bool Nothrow>\r\nNonMovable getNonMovable() noexcept(Nothrow);\r\n\r\nSTATIC_ASSERT(is_invocable_r_v<NonMovable, decltype(&getNonMovable<false>)>);\r\nSTATIC_ASSERT(is_invocable_r_v<NonMovable, decltype(&getNonMovable<true>)>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_r_v<NonMovable, decltype(&getNonMovable<false>)>);\r\nSTATIC_ASSERT(is_nothrow_invocable_r_v<NonMovable, decltype(&getNonMovable<true>)> == noexcept_in_the_type_system);\r\n\r\ntemplate <bool Nothrow>\r\nstruct ConvertsToNonMovable {\r\n    operator NonMovable() const noexcept(Nothrow);\r\n};\r\n\r\ntemplate <bool Nothrow, bool NothrowReturn>\r\nConvertsToNonMovable<NothrowReturn> getConvertsToNonMovable() noexcept(Nothrow);\r\n\r\nSTATIC_ASSERT(is_invocable_r_v<NonMovable, decltype(&getConvertsToNonMovable<false, false>)>);\r\nSTATIC_ASSERT(is_invocable_r_v<NonMovable, decltype(&getConvertsToNonMovable<false, true>)>);\r\nSTATIC_ASSERT(is_invocable_r_v<NonMovable, decltype(&getConvertsToNonMovable<true, false>)>);\r\nSTATIC_ASSERT(is_invocable_r_v<NonMovable, decltype(&getConvertsToNonMovable<true, true>)>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_r_v<NonMovable, decltype(&getConvertsToNonMovable<false, false>)>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_r_v<NonMovable, decltype(&getConvertsToNonMovable<false, true>)>);\r\nSTATIC_ASSERT(!is_nothrow_invocable_r_v<NonMovable, decltype(&getConvertsToNonMovable<true, false>)>);\r\nSTATIC_ASSERT(is_nothrow_invocable_r_v<NonMovable, decltype(&getConvertsToNonMovable<true, true>)>\r\n              == noexcept_in_the_type_system);\r\n#endif // _HAS_CXX17\r\n\r\n\r\n// Test:\r\n// LWG-2132 \"std::function ambiguity\"\r\n// VSO-95177 \"<functional>: [expression sfinae] std::function implicit conversions, seems like the compiler stops after\r\n// one level\" VSO-108113 \"<functional>: [expression sfinae] C++11 compiler unable to distinguish different lambda\r\n// templates in overloaded parameter list\"\r\n\r\n// GOOD: Same input, same output.\r\nSTATIC_ASSERT(is_constructible_v<function<long(short)>, long (*)(short)>);\r\nSTATIC_ASSERT(is_assignable_v<function<long(short)>&, long (*)(short)>);\r\n\r\n// GOOD: Input conversion, output conversion.\r\nSTATIC_ASSERT(is_constructible_v<function<long(short)>, int (*)(int)>);\r\nSTATIC_ASSERT(is_assignable_v<function<long(short)>&, int (*)(int)>);\r\n\r\n// BAD: Input not convertible.\r\nSTATIC_ASSERT(!is_constructible_v<function<long(short)>, long (*)(double*)>);\r\nSTATIC_ASSERT(!is_assignable_v<function<long(short)>&, long (*)(double*)>);\r\n\r\n// BAD: Output not convertible.\r\nSTATIC_ASSERT(!is_constructible_v<function<long(short)>, double* (*) (short)>);\r\nSTATIC_ASSERT(!is_assignable_v<function<long(short)>&, double* (*) (short)>);\r\n\r\n// SUPER BAD.\r\nSTATIC_ASSERT(!is_constructible_v<function<long(short)>, double* (*) (double*)>);\r\nSTATIC_ASSERT(!is_assignable_v<function<long(short)>&, double* (*) (double*)>);\r\n\r\n// ALSO BAD: void output not convertible to non-void.\r\nSTATIC_ASSERT(!is_constructible_v<function<long(short)>, void (*)(short)>);\r\nSTATIC_ASSERT(!is_assignable_v<function<long(short)>&, void (*)(short)>);\r\n\r\n// ULTRA BAD.\r\nSTATIC_ASSERT(!is_constructible_v<function<long(short)>, void (*)(double*)>);\r\nSTATIC_ASSERT(!is_assignable_v<function<long(short)>&, void (*)(double*)>);\r\n\r\n\r\n// GOOD: Same input, same output.\r\nSTATIC_ASSERT(is_constructible_v<function<void(short)>, void (*)(short)>);\r\nSTATIC_ASSERT(is_assignable_v<function<void(short)>&, void (*)(short)>);\r\n\r\n// GOOD: Input conversion, output conversion.\r\nSTATIC_ASSERT(is_constructible_v<function<void(short)>, int (*)(int)>);\r\nSTATIC_ASSERT(is_assignable_v<function<void(short)>&, int (*)(int)>);\r\n\r\n// BAD: Input not convertible.\r\nSTATIC_ASSERT(!is_constructible_v<function<void(short)>, void (*)(double*)>);\r\nSTATIC_ASSERT(!is_assignable_v<function<void(short)>&, void (*)(double*)>);\r\n\r\n\r\n// GOOD: Output implicitly convertible.\r\nSTATIC_ASSERT(is_constructible_v<function<shared_ptr<const int>()>, shared_ptr<int> (*)()>);\r\nSTATIC_ASSERT(is_assignable_v<function<shared_ptr<const int>()>&, shared_ptr<int> (*)()>);\r\n\r\n// BAD: Output explicitly convertible, not implicitly.\r\nSTATIC_ASSERT(!is_constructible_v<function<bool()>, shared_ptr<int> (*)()>);\r\nSTATIC_ASSERT(!is_assignable_v<function<bool()>&, shared_ptr<int> (*)()>);\r\n\r\n\r\n// std::function invokes a decayed lvalue.\r\nSTATIC_ASSERT(is_constructible_v<function<int(int)>, OinkFunctor&>);\r\nSTATIC_ASSERT(is_assignable_v<function<int(int)>&, OinkFunctor&>);\r\n\r\nSTATIC_ASSERT(is_constructible_v<function<int(int)>, const OinkFunctor&>);\r\nSTATIC_ASSERT(is_assignable_v<function<int(int)>&, const OinkFunctor&>);\r\n\r\nSTATIC_ASSERT(is_constructible_v<function<int(int)>, OinkFunctor>);\r\nSTATIC_ASSERT(is_assignable_v<function<int(int)>&, OinkFunctor>);\r\n\r\n\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\nusing Tag = allocator_arg_t;\r\nusing Al  = allocator<int>;\r\nSTATIC_ASSERT(is_constructible_v<function<long(short)>, Tag, Al, long (*)(short)>);\r\nSTATIC_ASSERT(is_constructible_v<function<long(short)>, Tag, Al, int (*)(int)>);\r\nSTATIC_ASSERT(!is_constructible_v<function<long(short)>, Tag, Al, long (*)(double*)>);\r\nSTATIC_ASSERT(!is_constructible_v<function<long(short)>, Tag, Al, double* (*) (short)>);\r\nSTATIC_ASSERT(!is_constructible_v<function<long(short)>, Tag, Al, double* (*) (double*)>);\r\nSTATIC_ASSERT(!is_constructible_v<function<long(short)>, Tag, Al, void (*)(short)>);\r\nSTATIC_ASSERT(!is_constructible_v<function<long(short)>, Tag, Al, void (*)(double*)>);\r\nSTATIC_ASSERT(is_constructible_v<function<void(short)>, Tag, Al, void (*)(short)>);\r\nSTATIC_ASSERT(is_constructible_v<function<void(short)>, Tag, Al, int (*)(int)>);\r\nSTATIC_ASSERT(!is_constructible_v<function<void(short)>, Tag, Al, void (*)(double*)>);\r\nSTATIC_ASSERT(is_constructible_v<function<shared_ptr<const int>()>, Tag, Al, shared_ptr<int> (*)()>);\r\nSTATIC_ASSERT(!is_constructible_v<function<bool()>, Tag, Al, shared_ptr<int> (*)()>);\r\nSTATIC_ASSERT(is_constructible_v<function<int(int)>, Tag, Al, OinkFunctor&>);\r\nSTATIC_ASSERT(is_constructible_v<function<int(int)>, Tag, Al, const OinkFunctor&>);\r\nSTATIC_ASSERT(is_constructible_v<function<int(int)>, Tag, Al, OinkFunctor>);\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n\r\n\r\n// Finally, test overload resolution.\r\nint meow(const function<int(int)>& f1) {\r\n    return f1(10);\r\n}\r\n\r\nint meow(const function<int(int, int)>& f2) {\r\n    return f2(200, 20);\r\n}\r\n\r\nint meow(const function<int(int, int, int)>& f3) {\r\n    return f3(3000, 300, 30);\r\n}\r\n\r\n// LWG-2993 \"reference_wrapper<T> conversion from T&&\"\r\nstruct convertible_from_int {\r\n    convertible_from_int(int) {}\r\n};\r\n\r\nint lwg_2993(reference_wrapper<int>) {\r\n    return 1;\r\n}\r\n\r\nint lwg_2993(convertible_from_int) {\r\n    return 2;\r\n}\r\n\r\nint main() {\r\n    assert(meow([](int a) { return a + 5; }) == 15);\r\n    assert(meow([](int i, int j) { return i + j; }) == 220);\r\n    assert(meow([](int x, int y, int z) { return x + y - z; }) == 3270);\r\n\r\n    int eleven = 11;\r\n    assert(lwg_2993(ref(eleven)) == 1);\r\n    assert(lwg_2993(0) == 2);\r\n    STATIC_ASSERT(!is_constructible_v<reference_wrapper<double>, double>);\r\n    STATIC_ASSERT(is_constructible_v<reference_wrapper<double>, double&>);\r\n    STATIC_ASSERT(!is_constructible_v<reference_wrapper<double>, int>);\r\n    STATIC_ASSERT(!is_constructible_v<reference_wrapper<double>, int&>);\r\n    STATIC_ASSERT(!is_convertible_v<float, reference_wrapper<float>>);\r\n    STATIC_ASSERT(is_convertible_v<float&, reference_wrapper<float>>);\r\n    STATIC_ASSERT(!is_convertible_v<int, reference_wrapper<float>>);\r\n    STATIC_ASSERT(!is_convertible_v<int&, reference_wrapper<float>>);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0118461_min_max_noexcept/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0118461_min_max_noexcept/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n\r\nusing std::max;\r\nusing std::min;\r\n#if _HAS_CXX17\r\nusing std::clamp;\r\n#endif // _HAS_CXX17\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <bool IsNoexcept>\r\nstruct my_int {\r\n    bool operator<(const my_int& rhs) const noexcept(IsNoexcept) {\r\n        return m_val < rhs.m_val;\r\n    }\r\n    int m_val;\r\n};\r\n\r\ntemplate <typename T>\r\nvoid test_noexcept_predicates(const T& val) {\r\n    auto noexcept_pred = [](const T&, const T&) noexcept { return false; };\r\n    auto throwing_pred = [](const T&, const T&) noexcept(false) { return false; };\r\n\r\n    STATIC_ASSERT(noexcept(min(val, val, noexcept_pred)));\r\n    STATIC_ASSERT(noexcept(max(val, val, noexcept_pred)));\r\n    STATIC_ASSERT(!noexcept(min(val, val, throwing_pred)));\r\n    STATIC_ASSERT(!noexcept(max(val, val, throwing_pred)));\r\n\r\n    (void) val;\r\n}\r\n\r\n// Test note:\r\n// std::min/max inheriting noexcept status from operator< or a predicate is not standard behavior.\r\n// Instead, this was requested to help teams using OACR.\r\n// Previous to this change, std::min and std::max would always trigger OACR warnings\r\n// that std::min/max are throwing operations, even when using types that would not.\r\nvoid test_noexcept() {\r\n    my_int<false> throwing_val;\r\n    my_int<true> noexcept_val;\r\n\r\n    STATIC_ASSERT(noexcept(min(4, 5)));\r\n    STATIC_ASSERT(noexcept(max(4, 5)));\r\n\r\n    STATIC_ASSERT(!noexcept(min(throwing_val, throwing_val)));\r\n    STATIC_ASSERT(!noexcept(max(throwing_val, throwing_val)));\r\n    test_noexcept_predicates(throwing_val);\r\n\r\n    STATIC_ASSERT(noexcept(min(noexcept_val, noexcept_val)));\r\n    STATIC_ASSERT(noexcept(max(noexcept_val, noexcept_val)));\r\n    test_noexcept_predicates(noexcept_val);\r\n}\r\n\r\n#if _HAS_CXX17\r\n// Also test P0025R0 \"Remarks: Returns the first argument when it is equivalent to one of the boundary arguments.\"\r\nvoid test_clamp_returned_argument() {\r\n    struct {\r\n        int val;\r\n        int lower;\r\n        int upper;\r\n    } vals = {42, 42, 42};\r\n    assert(&clamp(vals.val, vals.lower, vals.upper) == &vals.val);\r\n\r\n    vals = {42, 42, 128};\r\n    assert(&clamp(vals.val, vals.lower, vals.upper) == &vals.val);\r\n\r\n    vals = {128, 42, 128};\r\n    assert(&clamp(vals.val, vals.lower, vals.upper) == &vals.val);\r\n}\r\n#endif // _HAS_CXX17\r\n\r\nint main() {\r\n    // test_noexcept is compile-only\r\n\r\n#if _HAS_CXX17\r\n    test_clamp_returned_argument();\r\n#endif // _HAS_CXX17\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0121275_filesystem_canonical_should_handle_many_double_dots/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0121275_filesystem_canonical_should_handle_many_double_dots/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <cwctype>\r\n#include <string>\r\n#include <system_error>\r\n\r\n#include <experimental_filesystem.hpp>\r\n\r\nusing namespace std;\r\nnamespace fs = std::experimental::filesystem;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nbool path_names_equal(const wstring& lhs, const wstring& rhs) {\r\n    // This isn't strictly the same as NTFS's rules; but getting NTFS rules would\r\n    // require <Windows.h>, and it's \"close enough\" as far as these tests care\r\n    return equal(lhs.begin(), lhs.end(), rhs.begin(), rhs.end(),\r\n        [](wchar_t lhs, wchar_t rhs) { return towupper(lhs) == towupper(rhs); });\r\n}\r\n\r\nbool path_names_equal(const fs::path& lhs, const fs::path& rhs) {\r\n    return path_names_equal(lhs.native(), rhs.native());\r\n}\r\n\r\nvoid assert_canonical_result(const fs::path& input, const fs::path& expected, const fs::path& actual, error_code ec) {\r\n    if (ec) {\r\n        printf(\"Test failed because canonicalizing \\\"%ls\\\" failed with \\\"%s\\\".\\n\", input.c_str(), ec.message().c_str());\r\n        abort();\r\n    }\r\n\r\n    if (!path_names_equal(expected, actual)) {\r\n        printf(\"Test failed because the canonical path of \\\"%ls\\\" should be \\\"%ls\\\" but was \\\"%ls\\\".\\n\", input.c_str(),\r\n            expected.c_str(), actual.c_str());\r\n        abort();\r\n    }\r\n}\r\n\r\nvoid assert_canonical_path_too_long(const fs::path& input, const char* const testCase) {\r\n    error_code ec;\r\n    fs::path actual = fs::canonical(input, ec);\r\n    if (actual != fs::path()) {\r\n        printf(\"Test failed because long \\\"%s\\\" path canonical() didn't return an empty path.\\n\", testCase);\r\n        abort();\r\n    }\r\n\r\n    if (ec != make_error_condition(errc::filename_too_long)) {\r\n        printf(\"Test failed because long \\\"%s\\\" path canonical() returned \\\"%s\\\" instead of errc::filename_too_long.\\n\",\r\n            testCase, ec.message().c_str());\r\n        abort();\r\n    }\r\n}\r\n\r\nvoid exec_test_case(const fs::path& expectedAnswer, const fs::path& input) {\r\n    error_code ec;\r\n    fs::path actualAnswer = fs::canonical(input, ec);\r\n    assert_canonical_result(input, expectedAnswer, actualAnswer, ec);\r\n}\r\n\r\nvoid exec_test_case_string(const fs::path& expectedAnswer, const fs::path& input) {\r\n    // This tests calling _Ugly stuff because we want to test the string based fallback.\r\n    fs::path canonicalPath;\r\n    fs::path absPath = fs::absolute(input);\r\n    _Canonicalize_string_only(canonicalPath, absPath);\r\n    assert_canonical_result(input, expectedAnswer, canonicalPath, error_code());\r\n}\r\n\r\nvoid exec_test_input_path_too_long_behavior() {\r\n    error_code ec;\r\n    wstring input(LR\"(C:\\Path\\That\\Is\\Too\\Long\\)\");\r\n    // 259 characters is the maximum length supported\r\n    input.append(259 - input.size(), L'c');\r\n    (void) fs::canonical(input, ec);\r\n    if (ec == make_error_condition(errc::filename_too_long)) {\r\n        puts(\"Test failed because canonicalizing max length string returned too long.\");\r\n        abort();\r\n    }\r\n\r\n    // 260+ characters should fail, because MAX_PATH includes the terminating\r\n    // null character\r\n    input.push_back(L'c');\r\n    assert_canonical_path_too_long(input, \"input 260\");\r\n    input.push_back(L'c');\r\n    assert_canonical_path_too_long(input, \"input 261\");\r\n}\r\n\r\nstruct test_case_example {\r\n    fs::path expected;\r\n    fs::path actual;\r\n};\r\n\r\nint main() {\r\n    const fs::path cp = fs::current_path();\r\n\r\n    const fs::path meow = cp / \"..//////////\" / cp.filename();\r\n\r\n    const test_case_example examples[] = {\r\n        {cp, \".\"},\r\n        {cp, meow},\r\n        {cp.parent_path(), \"sub/../sub/sub2/../../..\"},\r\n        {cp.parent_path(), \"..\"},\r\n        {cp, \"sub/sub2/sub3/././././../sub4/./../../..\"},\r\n    };\r\n\r\n    for (const auto& example : examples) {\r\n        exec_test_case(example.expected, example.actual);\r\n    }\r\n\r\n    for (const auto& example : examples) {\r\n        exec_test_case_string(example.expected, example.actual);\r\n    }\r\n\r\n    // These examples can't be done with the \"real\" canonical because we don't\r\n    // want tests to fail when the network is down.\r\n    const test_case_example string_only_examples[] = {{R\"(\\\\network\\)\", R\"(\\\\network\\path\\..\\.\\sub\\..\\)\"},\r\n        {R\"(\\\\network\\)\", R\"(\\\\network\\path\\..\\.\\sub\\..\\..\\..\\..\\..)\"},\r\n        {R\"(\\\\network\\sub)\", R\"(\\\\network\\path\\..\\.\\sub\\.\\)\"}};\r\n\r\n    for (const auto& example : string_only_examples) {\r\n        exec_test_case_string(example.expected, example.actual);\r\n    }\r\n\r\n    exec_test_input_path_too_long_behavior();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0121440_is_iterator_iterator_traits/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0121440_is_iterator_iterator_traits/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cstddef>\r\n#include <iterator>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nclass int_iterator // models InputIterator\r\n{\r\npublic:\r\n    explicit int_iterator(int* start) : m_ptr(start) {}\r\n\r\n    int_iterator(const int_iterator&)            = default;\r\n    int_iterator& operator=(const int_iterator&) = default;\r\n\r\n    int_iterator& operator++() { // prefix\r\n        ++m_ptr;\r\n        return *this;\r\n    }\r\n\r\n    void operator++(int) = delete; // avoid postincrement\r\n\r\n    int& operator*() const {\r\n        return *m_ptr;\r\n    }\r\n\r\n    bool operator==(const int_iterator& rhs) const {\r\n        return m_ptr == rhs.m_ptr;\r\n    }\r\n\r\n    bool operator!=(const int_iterator& rhs) const {\r\n        return m_ptr != rhs.m_ptr;\r\n    }\r\n\r\nprivate:\r\n    int* m_ptr;\r\n};\r\n\r\nnamespace std {\r\n    template <>\r\n    struct iterator_traits<int_iterator> {\r\n        using iterator_category = input_iterator_tag;\r\n        using difference_type   = ptrdiff_t;\r\n        using value_type        = int;\r\n        using pointer           = int*;\r\n        using reference         = int&;\r\n    };\r\n} // namespace std\r\n\r\n// Also test that forming iterator_traits<void *> does not cause a hard, not SFINAE-able, error\r\ntemplate <class Ty, enable_if_t<is_same_v<Ty, void*>, int> = 0>\r\nconstexpr bool iterator_traits_void_ptr_sfinae_test() {\r\n    return true;\r\n}\r\n\r\ntemplate <class Ty, class = typename iterator_traits<Ty>::iterator_category>\r\nconstexpr bool iterator_traits_void_ptr_sfinae_test() {\r\n    return false;\r\n}\r\n\r\nSTATIC_ASSERT(iterator_traits_void_ptr_sfinae_test<void*>());\r\nSTATIC_ASSERT(!iterator_traits_void_ptr_sfinae_test<int*>());\r\n\r\nint main() {\r\n    array<int, 5> arr{{1, 2, 3, 4, 5}};\r\n\r\n    int_iterator begin_arr(arr.data());\r\n    int_iterator end_arr(arr.data() + arr.size());\r\n\r\n    // the following will not compile if int_iterator is determined to not be an InputIterator:\r\n    vector<int> vec(begin_arr, end_arr);\r\n}\r\n\r\n// DevDiv-557214 \"std::forward_iterator_tag derives from std::output_iterator_tag\"\r\nSTATIC_ASSERT(is_base_of_v<input_iterator_tag, forward_iterator_tag>);\r\nSTATIC_ASSERT(is_base_of_v<forward_iterator_tag, bidirectional_iterator_tag>);\r\nSTATIC_ASSERT(is_base_of_v<bidirectional_iterator_tag, random_access_iterator_tag>);\r\n\r\nSTATIC_ASSERT(!is_base_of_v<output_iterator_tag, input_iterator_tag>);\r\nSTATIC_ASSERT(!is_base_of_v<output_iterator_tag, forward_iterator_tag>);\r\nSTATIC_ASSERT(!is_base_of_v<output_iterator_tag, bidirectional_iterator_tag>);\r\nSTATIC_ASSERT(!is_base_of_v<output_iterator_tag, random_access_iterator_tag>);\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0131167_associative_emplacement_allocations/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0131167_associative_emplacement_allocations/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <functional>\r\n#include <map>\r\n#include <memory>\r\n#include <set>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\ntemplate <class Iter>\r\nvoid assert_same_obj(const Iter& lhs, const Iter& rhs) {\r\n    assert(&*lhs == &*rhs);\r\n}\r\n\r\nstatic bool g_allow_allocations = true;\r\n\r\ntemplate <class T>\r\nstruct TestAlloc {\r\n    using value_type = T;\r\n\r\n    TestAlloc()                            = default;\r\n    TestAlloc(const TestAlloc&)            = default;\r\n    TestAlloc& operator=(const TestAlloc&) = default;\r\n\r\n    template <class U>\r\n    TestAlloc(const TestAlloc<U>&) {}\r\n\r\n    T* allocate(const size_t n) {\r\n        assert(g_allow_allocations);\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* const p, const size_t n) {\r\n        allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class U>\r\n    bool operator==(const TestAlloc<U>&) const {\r\n        return true;\r\n    }\r\n\r\n    template <class U>\r\n    bool operator!=(const TestAlloc<U>&) const {\r\n        return false;\r\n    }\r\n};\r\n\r\nstruct NoAllocGuard {\r\n    NoAllocGuard() {\r\n        g_allow_allocations = false;\r\n    }\r\n\r\n    NoAllocGuard(const NoAllocGuard&)            = delete;\r\n    NoAllocGuard& operator=(const NoAllocGuard&) = delete;\r\n\r\n    ~NoAllocGuard() {\r\n        g_allow_allocations = true;\r\n    }\r\n};\r\n\r\ntemplate <class Container, class FirstValue, class... Values>\r\nvoid test_emplaces(FirstValue& val1, Values&... valn) {\r\n    const FirstValue& constVal1 = val1;\r\n\r\n    {\r\n        Container c;\r\n        const auto insertPos = c.emplace(val1, valn...).first;\r\n        {\r\n            NoAllocGuard guard;\r\n            assert_same_obj(insertPos, c.emplace(val1, valn...).first);\r\n        }\r\n    }\r\n\r\n    {\r\n        Container c;\r\n        const auto insertPos = c.emplace(val1, valn...).first;\r\n        {\r\n            NoAllocGuard guard;\r\n            assert_same_obj(insertPos, c.emplace(constVal1, valn...).first);\r\n        }\r\n    }\r\n\r\n    {\r\n        Container c;\r\n        const auto insertPos = c.emplace(val1, valn...).first;\r\n        {\r\n            NoAllocGuard guard;\r\n            assert_same_obj(insertPos, c.emplace(move(val1), valn...).first);\r\n        }\r\n    }\r\n\r\n    {\r\n        Container c;\r\n        const auto insertPos = c.emplace(val1, valn...).first;\r\n        {\r\n            NoAllocGuard guard;\r\n            assert_same_obj(insertPos, c.emplace(move(constVal1), valn...).first);\r\n        }\r\n    }\r\n\r\n    {\r\n        Container c;\r\n        const auto insertPos = c.emplace(val1, valn...).first;\r\n        {\r\n            NoAllocGuard guard;\r\n            assert_same_obj(insertPos, c.emplace_hint(insertPos, val1, valn...));\r\n            assert_same_obj(insertPos, c.emplace_hint(c.end(), val1, valn...));\r\n        }\r\n    }\r\n\r\n    {\r\n        Container c;\r\n        const auto insertPos = c.emplace(val1, valn...).first;\r\n        {\r\n            NoAllocGuard guard;\r\n            assert_same_obj(insertPos, c.emplace_hint(insertPos, constVal1, valn...));\r\n            assert_same_obj(insertPos, c.emplace_hint(c.end(), constVal1, valn...));\r\n        }\r\n    }\r\n\r\n    {\r\n        Container c;\r\n        const auto insertPos = c.emplace(val1, valn...).first;\r\n        {\r\n            NoAllocGuard guard;\r\n            assert_same_obj(insertPos, c.emplace_hint(insertPos, move(val1), valn...));\r\n            assert_same_obj(insertPos, c.emplace_hint(c.end(), move(val1), valn...));\r\n        }\r\n    }\r\n\r\n    {\r\n        Container c;\r\n        const auto insertPos = c.emplace(val1, valn...).first;\r\n        {\r\n            NoAllocGuard guard;\r\n            assert_same_obj(insertPos, c.emplace_hint(insertPos, move(constVal1), valn...));\r\n            assert_same_obj(insertPos, c.emplace_hint(c.end(), move(constVal1), valn...));\r\n        }\r\n    }\r\n}\r\n\r\ntemplate <class SetContainer>\r\nvoid test_emplace_for_unique_set() {\r\n    int lvalueInt{42};\r\n    test_emplaces<SetContainer>(lvalueInt);\r\n}\r\n\r\ntemplate <class MapContainer>\r\nvoid test_emplace_for_unique_map() {\r\n    int lvalueInt{42};\r\n    test_emplaces<MapContainer>(lvalueInt, lvalueInt);\r\n\r\n    pair<const int, int> lvalueConstPair{42, 65};\r\n    pair<int, int> lvaluePair{42, 65};\r\n    pair<const int&, int> lvalueConstRefPair{lvalueInt, 65};\r\n    pair<int&, int> lvalueRefPair{lvalueInt, 65};\r\n    pair<const int&&, int> lvalueConstRefRefPair{move(lvalueInt), 65};\r\n    pair<int&&, int> lvalueRefRefPair{move(lvalueInt), 65};\r\n    test_emplaces<MapContainer>(lvalueConstPair);\r\n    test_emplaces<MapContainer>(lvaluePair);\r\n    test_emplaces<MapContainer>(lvalueConstRefPair);\r\n    test_emplaces<MapContainer>(lvalueRefPair);\r\n    test_emplaces<MapContainer>(lvalueConstRefRefPair);\r\n    test_emplaces<MapContainer>(lvalueRefRefPair);\r\n\r\n#if _HAS_CXX23\r\n    tuple<const int, int> lvalueConstTuple{42, 65};\r\n    tuple<int, int> lvalueTuple{42, 65};\r\n    tuple<const int&, int> lvalueConstRefTuple{lvalueInt, 65};\r\n    tuple<int&, int> lvalueRefTuple{lvalueInt, 65};\r\n    tuple<const int&&, int> lvalueConstRefRefTuple{move(lvalueInt), 65};\r\n    tuple<int&&, int> lvalueRefRefTuple{move(lvalueInt), 65};\r\n    test_emplaces<MapContainer>(lvalueConstTuple);\r\n    test_emplaces<MapContainer>(lvalueTuple);\r\n    test_emplaces<MapContainer>(lvalueConstRefTuple);\r\n    test_emplaces<MapContainer>(lvalueRefTuple);\r\n    test_emplaces<MapContainer>(lvalueConstRefRefTuple);\r\n    test_emplaces<MapContainer>(lvalueRefRefTuple);\r\n\r\n    array<int, 2> arr{42, 65};\r\n    array<const int, 2> constArr{42, 65};\r\n    test_emplaces<MapContainer>(arr);\r\n    test_emplaces<MapContainer>(constArr);\r\n#endif // _HAS_CXX23\r\n\r\n    tuple<int> tupleIntSixtyFive{65};\r\n\r\n    tuple<const int> lvalueConstOneTuple{42};\r\n    tuple<int> lvalueOneTuple{42};\r\n    tuple<const int&> lvalueConstRefOneTuple{lvalueInt};\r\n    tuple<int&> lvalueRefOneTuple{lvalueInt};\r\n    test_emplaces<MapContainer>(piecewise_construct, lvalueConstOneTuple, tupleIntSixtyFive);\r\n    test_emplaces<MapContainer>(piecewise_construct, lvalueOneTuple, tupleIntSixtyFive);\r\n    test_emplaces<MapContainer>(piecewise_construct, lvalueConstRefOneTuple, tupleIntSixtyFive);\r\n    test_emplaces<MapContainer>(piecewise_construct, lvalueRefOneTuple, tupleIntSixtyFive);\r\n}\r\n\r\n// also test that the optimization strategy does not mishandle volatile arguments\r\ntemplate <class SetContainer>\r\nvoid test_volatile_arguments_for_unique_set() {\r\n    using Key = typename SetContainer::value_type;\r\n\r\n    SetContainer s;\r\n\r\n    volatile Key x         = 0;\r\n    const volatile Key& cx = x;\r\n\r\n    s.emplace(x);\r\n    x = 1;\r\n    s.emplace(move(x));\r\n    x = 2;\r\n    s.emplace(cx);\r\n    x = 3;\r\n    s.emplace(move(cx));\r\n\r\n    x = 4;\r\n    s.emplace_hint(s.end(), x);\r\n    x = 5;\r\n    s.emplace_hint(s.end(), move(x));\r\n    x = 6;\r\n    s.emplace_hint(s.end(), cx);\r\n    x = 7;\r\n    s.emplace_hint(s.end(), move(cx));\r\n\r\n    assert((s == SetContainer{0, 1, 2, 3, 4, 5, 6, 7}));\r\n}\r\n\r\ntemplate <class MapContainer, class PairLike>\r\nvoid test_pair_like_volatile_for_unique_map() {\r\n    using First  = tuple_element_t<0, PairLike>;\r\n    using Second = tuple_element_t<1, PairLike>;\r\n\r\n    MapContainer m;\r\n\r\n    volatile remove_cv_t<remove_reference_t<First>> x = 0;\r\n    {\r\n        PairLike p{static_cast<First>(x), Second{}};\r\n        m.emplace(p);\r\n    }\r\n\r\n    x = 1;\r\n    {\r\n        PairLike p{static_cast<First>(x), Second{}};\r\n        m.emplace(move(p));\r\n    }\r\n\r\n    x = 2;\r\n    {\r\n        PairLike p{static_cast<First>(x), Second{}};\r\n        const auto& cp = p;\r\n        m.emplace(cp);\r\n    }\r\n\r\n    x = 3;\r\n    {\r\n        PairLike p{static_cast<First>(x), Second{}};\r\n        const auto& cp = p;\r\n        m.emplace(move(cp));\r\n    }\r\n\r\n    x = 4;\r\n    {\r\n        PairLike p{static_cast<First>(x), Second{}};\r\n        m.emplace_hint(m.end(), p);\r\n    }\r\n\r\n    x = 5;\r\n    {\r\n        PairLike p{static_cast<First>(x), Second{}};\r\n        m.emplace_hint(m.end(), move(p));\r\n    }\r\n\r\n    x = 6;\r\n    {\r\n        PairLike p{static_cast<First>(x), Second{}};\r\n        const auto& cp = p;\r\n        m.emplace_hint(m.end(), cp);\r\n    }\r\n\r\n    x = 7;\r\n    {\r\n        PairLike p{static_cast<First>(x), Second{}};\r\n        const auto& cp = p;\r\n        m.emplace_hint(m.end(), move(cp));\r\n    }\r\n\r\n    assert((m == MapContainer{{0, {}}, {1, {}}, {2, {}}, {3, {}}, {4, {}}, {5, {}}, {6, {}}, {7, {}}}));\r\n}\r\n\r\ntemplate <class MapContainer, class Tuple>\r\nvoid test_piecewise_volatile_for_unique_map() {\r\n    using First = tuple_element_t<0, Tuple>;\r\n\r\n    MapContainer m;\r\n\r\n    volatile remove_cv_t<remove_reference_t<First>> x = 0;\r\n    {\r\n        Tuple tp{static_cast<First>(x)};\r\n        m.emplace(piecewise_construct, tp, tuple<>{});\r\n    }\r\n\r\n    x = 1;\r\n    {\r\n        Tuple tp{static_cast<First>(x)};\r\n        m.emplace(piecewise_construct, move(tp), tuple<>{});\r\n    }\r\n\r\n    x = 2;\r\n    {\r\n        Tuple tp{static_cast<First>(x)};\r\n        const auto& ctp = tp;\r\n        m.emplace(piecewise_construct, ctp, tuple<>{});\r\n    }\r\n\r\n    x = 3;\r\n    {\r\n        Tuple tp{static_cast<First>(x)};\r\n        const auto& ctp = tp;\r\n        m.emplace(piecewise_construct, move(ctp), tuple<>{});\r\n    }\r\n\r\n    x = 4;\r\n    {\r\n        Tuple tp{static_cast<First>(x)};\r\n        m.emplace_hint(m.end(), piecewise_construct, tp, tuple<>{});\r\n    }\r\n\r\n    x = 5;\r\n    {\r\n        Tuple tp{static_cast<First>(x)};\r\n        m.emplace_hint(m.end(), piecewise_construct, move(tp), tuple<>{});\r\n    }\r\n\r\n    x = 6;\r\n    {\r\n        Tuple tp{static_cast<First>(x)};\r\n        const auto& ctp = tp;\r\n        m.emplace_hint(m.end(), piecewise_construct, ctp, tuple<>{});\r\n    }\r\n\r\n    x = 7;\r\n    {\r\n        Tuple tp{static_cast<First>(x)};\r\n        const auto& ctp = tp;\r\n        m.emplace_hint(m.end(), piecewise_construct, move(ctp), tuple<>{});\r\n    }\r\n\r\n    assert((m == MapContainer{{0, {}}, {1, {}}, {2, {}}, {3, {}}, {4, {}}, {5, {}}, {6, {}}, {7, {}}}));\r\n}\r\n\r\ntemplate <class MapContainer>\r\nvoid test_volatile_arguments_for_unique_map() {\r\n    using Key    = typename MapContainer::key_type;\r\n    using Mapped = typename MapContainer::mapped_type;\r\n\r\n    {\r\n        volatile Key x         = 0;\r\n        const volatile Key& cx = x;\r\n\r\n        MapContainer m;\r\n\r\n        m.emplace(x, Mapped{});\r\n        x = 1;\r\n        m.emplace(move(x), Mapped{});\r\n        x = 2;\r\n        m.emplace(cx, Mapped{});\r\n        x = 3;\r\n        m.emplace(move(cx), Mapped{});\r\n\r\n        x = 4;\r\n        m.emplace_hint(m.end(), x, Mapped{});\r\n        x = 5;\r\n        m.emplace_hint(m.end(), move(x), Mapped{});\r\n        x = 6;\r\n        m.emplace_hint(m.end(), cx, Mapped{});\r\n        x = 7;\r\n        m.emplace_hint(m.end(), move(cx), Mapped{});\r\n\r\n        assert((m == MapContainer{{0, {}}, {1, {}}, {2, {}}, {3, {}}, {4, {}}, {5, {}}, {6, {}}, {7, {}}}));\r\n    }\r\n\r\n    test_pair_like_volatile_for_unique_map<MapContainer, pair<volatile Key, Mapped>>();\r\n    test_pair_like_volatile_for_unique_map<MapContainer, pair<const volatile Key, Mapped>>();\r\n    test_pair_like_volatile_for_unique_map<MapContainer, pair<volatile Key&, Mapped>>();\r\n    test_pair_like_volatile_for_unique_map<MapContainer, pair<const volatile Key&, Mapped>>();\r\n    test_pair_like_volatile_for_unique_map<MapContainer, pair<volatile Key&&, Mapped>>();\r\n    test_pair_like_volatile_for_unique_map<MapContainer, pair<const volatile Key&&, Mapped>>();\r\n#if _HAS_CXX23\r\n    test_pair_like_volatile_for_unique_map<MapContainer, tuple<volatile Key, Mapped>>();\r\n    test_pair_like_volatile_for_unique_map<MapContainer, tuple<const volatile Key, Mapped>>();\r\n    test_pair_like_volatile_for_unique_map<MapContainer, tuple<volatile Key&, Mapped>>();\r\n    test_pair_like_volatile_for_unique_map<MapContainer, tuple<const volatile Key&, Mapped>>();\r\n    test_pair_like_volatile_for_unique_map<MapContainer, tuple<volatile Key&&, Mapped>>();\r\n    test_pair_like_volatile_for_unique_map<MapContainer, tuple<const volatile Key&&, Mapped>>();\r\n\r\n    test_pair_like_volatile_for_unique_map<MapContainer, array<volatile Key, 2>>();\r\n    test_pair_like_volatile_for_unique_map<MapContainer, array<const volatile Key, 2>>();\r\n#endif // _HAS_CXX23\r\n\r\n    test_piecewise_volatile_for_unique_map<MapContainer, tuple<volatile Key>>();\r\n    test_piecewise_volatile_for_unique_map<MapContainer, tuple<const volatile Key>>();\r\n    test_piecewise_volatile_for_unique_map<MapContainer, tuple<volatile Key&>>();\r\n    test_piecewise_volatile_for_unique_map<MapContainer, tuple<const volatile Key&>>();\r\n}\r\n\r\nint main() {\r\n    // This tests that unordered_(map|set) detect cases they can avoid allocating.\r\n    // It isn't strictly required by the standard, but we think it should be applicable to good implementations.\r\n    test_emplace_for_unique_set<set<int, less<>, TestAlloc<int>>>();\r\n    test_emplace_for_unique_set<unordered_set<int, hash<int>, equal_to<>, TestAlloc<int>>>();\r\n\r\n    test_emplace_for_unique_map<map<int, int, less<>, TestAlloc<pair<const int, int>>>>();\r\n    test_emplace_for_unique_map<unordered_map<int, int, hash<int>, equal_to<>, TestAlloc<pair<const int, int>>>>();\r\n\r\n    test_volatile_arguments_for_unique_set<set<int>>();\r\n    test_volatile_arguments_for_unique_set<unordered_set<int>>();\r\n\r\n    test_volatile_arguments_for_unique_map<map<int, long>>();\r\n    test_volatile_arguments_for_unique_map<unordered_map<int, long>>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0135428_custom_char_traits_string/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0135428_custom_char_traits_string/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <string>\r\n#include <utility>\r\n\r\n#include <constexpr_char_traits.hpp>\r\n\r\nusing namespace std;\r\n\r\nusing tstring = basic_string<char, constexpr_char_traits>; // disable memcpy optimizations in basic_string\r\n\r\nvoid test_case_move_from_small() {\r\n    tstring str(\"short\");\r\n    tstring moved_to(move(str));\r\n    assert(str[0] == '\\0'); // not technically standards-required, but required for\r\n                            // reasonable behavior on our implementation (repeated below)\r\n    assert(moved_to[0] == 's');\r\n}\r\n\r\nvoid test_case_move_from_large() {\r\n    tstring str(\"long string long enough to disable the small string optimization\");\r\n    // Index:    0    5   ^\r\n    tstring moved_to(move(str));\r\n    assert(str[0] == '\\0');\r\n    assert(moved_to[9] == 'n');\r\n}\r\n\r\nvoid test_case_move_assign_from_small_to_small() {\r\n    tstring str(\"short\");\r\n    tstring moved_to(\"old\");\r\n    moved_to = move(str);\r\n    assert(str[0] == '\\0');\r\n    assert(moved_to[1] == 'h');\r\n}\r\n\r\nvoid test_case_move_assign_from_small_to_large() {\r\n    tstring str(\"short\");\r\n    tstring moved_to(\"the quick brown fox jumps over the lazy dog\");\r\n    moved_to = move(str);\r\n    assert(str[0] == '\\0');\r\n    assert(moved_to[1] == 'h');\r\n}\r\n\r\nvoid test_case_move_assign_from_large_to_small() {\r\n    tstring str(\"steal the pointer to my guts!\");\r\n    tstring moved_to(\"short\");\r\n    moved_to = move(str);\r\n    assert(str[0] == '\\0');\r\n    assert(moved_to[10] == 'p');\r\n}\r\n\r\nvoid test_case_move_assign_from_large_to_large() {\r\n    tstring str(\"Sphinx of black quartz, judge my vow.\");\r\n    tstring moved_to(\"The five boxing wizards jump quickly.\");\r\n    moved_to = move(str);\r\n    assert(str[0] == '\\0');\r\n    assert(moved_to[4] == 'n');\r\n}\r\n\r\nvoid test_case_swap_small_small() {\r\n    tstring smallA(\"cute\");\r\n    tstring smallB(\"kittens\");\r\n    swap(smallA, smallB);\r\n    assert(smallB[0] == 'c');\r\n    assert(smallA[0] == 'k');\r\n}\r\n\r\nvoid test_case_swap_small_large() {\r\n    tstring smallA(\"cute\");\r\n    tstring largeB(\"kittens that are going to be put into a tiny cute container\");\r\n    swap(smallA, largeB);\r\n    assert(largeB[3] == 'e');\r\n    assert(smallA[3] == 't');\r\n}\r\n\r\nvoid test_case_swap_large_small() {\r\n    tstring largeA(\"cute containers are often large enough for many\");\r\n    tstring smallB(\"kittens\");\r\n    swap(largeA, smallB);\r\n    assert(smallB[3] == 'e');\r\n    assert(largeA[3] == 't');\r\n}\r\n\r\nvoid test_case_swap_large_large() {\r\n    tstring largeA(\"cute fluffy kittens are often even cuter in a large group\");\r\n    tstring largeB(\"hungry EVIL zombies need to be kept away from the cute kittens\");\r\n    swap(largeA, largeB);\r\n    assert(largeB[5] == 'f');\r\n    assert(largeA[5] == 'y');\r\n}\r\n\r\nint main() {\r\n    test_case_move_from_small();\r\n    test_case_move_from_large();\r\n    test_case_move_assign_from_small_to_small();\r\n    test_case_move_assign_from_small_to_large();\r\n    test_case_move_assign_from_large_to_small();\r\n    test_case_move_assign_from_large_to_large();\r\n    test_case_swap_small_small();\r\n    test_case_swap_small_large();\r\n    test_case_swap_large_small();\r\n    test_case_swap_large_large();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0144114_sleep_until/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0144114_sleep_until/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <ratio>\r\n#include <thread>\r\n\r\n#include <test_thread_support.hpp>\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\n\r\ntemplate <typename ClockType>\r\nvoid assert_sleep_until_invariants() {\r\n    watchdog wd(60s);\r\n    const auto target = ClockType::now() + 1s;\r\n    this_thread::sleep_until(target);\r\n    // When VSO-166543 \"wait_until and sleep_until functions don't behave correctly for user-defined clocks\"\r\n    // is fixed, this 100ms \"fudge factor\" must be removed.\r\n    const auto actual = ClockType::now() + 100ms;\r\n\r\n    assert(\"sleep_until did not wait long enough\" && target <= actual);\r\n}\r\n\r\nvoid test_high_resolution_clock_waits_should_not_return_immediately() {\r\n    // VSO-144114 \"<thread>: C++ (stdlib): sleep_until does not convert high_resolution_clock::time_point...\"\r\n    assert_sleep_until_invariants<high_resolution_clock>();\r\n}\r\n\r\nvoid test_sleep_for_should_compile_with_floating_durations() {\r\n    // VSO-122248 \"<thread>: std::this_thread::sleep_for(1.5s) error\"\r\n    // VSO-106920 (duplicate use in condition_variable)\r\n    // VSO-153606 (exact duplicate)\r\n    this_thread::sleep_for(duration<double, milli>(20.0));\r\n    this_thread::sleep_for(duration<float, milli>(20.0f));\r\n}\r\n\r\nstruct tomorrow_clock {\r\n    using rep        = system_clock::rep;\r\n    using period     = system_clock::period;\r\n    using duration   = system_clock::duration;\r\n    using time_point = std::chrono::time_point<tomorrow_clock, duration>;\r\n\r\n    static const bool is_steady = system_clock::is_steady;\r\n\r\n    static time_point now() noexcept {\r\n        const auto today = system_clock::now().time_since_epoch();\r\n        return static_cast<time_point>(today + 24h);\r\n    }\r\n};\r\n\r\nvoid test_sleep_until_works_with_user_defined_clocks() {\r\n    // VSO-99350 \"<thread>: std::this_thread::sleep_until doesn't work with user defined clocks\"\r\n    // VSO-123833 (exact duplicate)\r\n    assert_sleep_until_invariants<tomorrow_clock>();\r\n}\r\n\r\nint main() {\r\n    test_high_resolution_clock_waits_should_not_return_immediately();\r\n    test_sleep_for_should_compile_with_floating_durations();\r\n    test_sleep_until_works_with_user_defined_clocks();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0144294_unordered_map_max_bucket_count/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0144294_unordered_map_max_bucket_count/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n\r\ntemplate <typename T>\r\nvoid check_max_buckets_is_reasonable(const T& val) {\r\n    size_t max_buckets = val.max_bucket_count();\r\n    assert(max_buckets > 1000000);\r\n}\r\n\r\nint main() {\r\n    std::unordered_map<int, int> umap_test;\r\n    std::unordered_set<int> uset_test;\r\n\r\n    check_max_buckets_is_reasonable(umap_test);\r\n    check_max_buckets_is_reasonable(uset_test);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0149983_system_error_broken_pipe/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0149983_system_error_broken_pipe/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <system_error>\r\n\r\nint main() {\r\n    std::error_code ec{109, std::system_category()}; // 109 is ERROR_BROKEN_PIPE according to winerror.h\r\n    assert(ec == std::make_error_condition(std::errc::broken_pipe));\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0157762_feature_test_macros/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# The following lines are intended to match usual_matrix.lst but without /w14640 /Zc:threadSafeInit- and /Zc:noexceptTypes-\r\n# ASAN configurations are also omitted since this is effectively a preprocessor-only test.\r\n\r\nRUNALL_INCLUDE ..\\prefix.lst\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++20\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:wchar_t-\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /fp:except /Zc:preprocessor\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive-\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++20 /permissive-\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive-\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /fp:strict\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nPM_CL=\"/clr /MD /std:c++20\"\r\nPM_CL=\"/clr /MDd /std:c++20\"\r\nPM_CL=\"/clr:pure /MD /std:c++14\"\r\nPM_CL=\"/clr:pure /MDd /std:c++14\"\r\nPM_CL=\"/BE /c /EHsc /MD /std:c++14\"\r\nPM_CL=\"/BE /c /EHsc /MDd /std:c++17 /permissive-\"\r\nPM_CL=\"/BE /c /EHsc /MT /std:c++20 /permissive-\"\r\nPM_CL=\"/BE /c /EHsc /MTd /std:c++latest /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MD /std:c++14\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MDd /std:c++17\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++20 /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MTd /std:c++latest /permissive- /fp:strict\"\r\n\r\n# The following lines are extras not present in usual_matrix.lst\r\nPM_CL=\"/MT /std:c++latest /permissive- /EHsc /D_HAS_STD_BYTE=0\"\r\nPM_CL=\"/MT /std:c++latest /permissive- /EHsc /GR- /D_HAS_STATIC_RTTI=0\"\r\nPM_CL=\"/MT /std:c++14 /permissive- /EHsc /await:strict\"\r\nPM_CL=\"/MT /std:c++14 /permissive- /EHsc /Zc:char8_t\"\r\nPM_CL=\"/MT /std:c++17 /permissive- /EHsc /Zc:char8_t\"\r\nPM_CL=\"/MT /std:c++latest /permissive- /EHsc\"\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0157762_feature_test_macros/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <version>\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_adaptor_iterator_pair_constructor == 202106L);\r\n#elif defined(__cpp_lib_adaptor_iterator_pair_constructor)\r\n#error __cpp_lib_adaptor_iterator_pair_constructor is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_addressof_constexpr == 201603L);\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_algorithm_iterator_requirements == 202207L);\r\n#elif defined(__cpp_lib_algorithm_iterator_requirements)\r\n#error __cpp_lib_algorithm_iterator_requirements is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_allocate_at_least == 202302L);\r\n#elif defined(__cpp_lib_allocate_at_least)\r\n#error __cpp_lib_allocate_at_least is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_allocator_traits_is_always_equal == 201411L);\r\n\r\n#if _HAS_CXX17 && _HAS_STATIC_RTTI\r\nSTATIC_ASSERT(__cpp_lib_any == 201606L);\r\n#elif defined(__cpp_lib_any)\r\n#error __cpp_lib_any is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_apply == 201603L);\r\n#elif defined(__cpp_lib_apply)\r\n#error __cpp_lib_apply is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_array_constexpr == 201811L);\r\n#elif _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_array_constexpr == 201803L);\r\n#elif defined(__cpp_lib_array_constexpr)\r\n#error __cpp_lib_array_constexpr is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_as_const == 201510L);\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_associative_heterogeneous_erasure == 202110L);\r\n#elif defined(__cpp_lib_associative_heterogeneous_erasure)\r\n#error __cpp_lib_associative_heterogeneous_erasure is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_assume_aligned == 201811L);\r\n#elif defined(__cpp_lib_assume_aligned)\r\n#error __cpp_lib_assume_aligned is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_atomic_flag_test == 201907L);\r\n#elif defined(__cpp_lib_atomic_flag_test)\r\n#error __cpp_lib_atomic_flag_test is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_atomic_float == 201711L);\r\n#elif defined(__cpp_lib_atomic_float)\r\n#error __cpp_lib_atomic_float is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_atomic_is_always_lock_free == 201603L);\r\n#elif defined(__cpp_lib_atomic_is_always_lock_free)\r\n#error __cpp_lib_atomic_is_always_lock_free is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_atomic_lock_free_type_aliases == 201907L);\r\n#elif defined(__cpp_lib_atomic_lock_free_type_aliases)\r\n#error __cpp_lib_atomic_lock_free_type_aliases is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_atomic_ref == 201806L);\r\n#elif defined(__cpp_lib_atomic_ref)\r\n#error __cpp_lib_atomic_ref is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_atomic_shared_ptr == 201711L);\r\n#elif defined(__cpp_lib_atomic_shared_ptr)\r\n#error __cpp_lib_atomic_shared_ptr is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_atomic_value_initialization == 201911L);\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_atomic_wait == 201907L);\r\n#elif defined(__cpp_lib_atomic_wait)\r\n#error __cpp_lib_atomic_wait is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_barrier == 202302L);\r\n#elif defined(__cpp_lib_barrier)\r\n#error __cpp_lib_barrier is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_bind_back == 202202L);\r\n#elif defined(__cpp_lib_bind_back)\r\n#error __cpp_lib_bind_back is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_bind_front == 201907L);\r\n#elif defined(__cpp_lib_bind_front)\r\n#error __cpp_lib_bind_front is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_bit_cast == 201806L);\r\n#elif defined(__cpp_lib_bit_cast)\r\n#error __cpp_lib_bit_cast is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_bitops == 201907L);\r\n#elif defined(__cpp_lib_bitops)\r\n#error __cpp_lib_bitops is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_bool_constant == 201505L);\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_bounded_array_traits == 201902L);\r\n#elif defined(__cpp_lib_bounded_array_traits)\r\n#error __cpp_lib_bounded_array_traits is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_boyer_moore_searcher == 201603L);\r\n#elif defined(__cpp_lib_boyer_moore_searcher)\r\n#error __cpp_lib_boyer_moore_searcher is defined\r\n#endif\r\n\r\n#if _HAS_STD_BYTE\r\nSTATIC_ASSERT(__cpp_lib_byte == 201603L);\r\n#elif defined(__cpp_lib_byte)\r\n#error __cpp_lib_byte is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_byteswap == 202110L);\r\n#elif defined(__cpp_lib_byteswap)\r\n#error __cpp_lib_byteswap is defined\r\n#endif\r\n\r\n#if defined(__cpp_char8_t)\r\nSTATIC_ASSERT(__cpp_lib_char8_t == 201907L);\r\n#elif defined(__cpp_lib_char8_t)\r\n#error __cpp_lib_char8_t is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_chrono == 201907L);\r\n#elif _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_chrono == 201611L);\r\n#else\r\nSTATIC_ASSERT(__cpp_lib_chrono == 201510L);\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_chrono_udls == 201304L);\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_clamp == 201603L);\r\n#elif defined(__cpp_lib_clamp)\r\n#error __cpp_lib_clamp is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_common_reference == 202302L);\r\n#elif defined(__cpp_lib_common_reference)\r\n#error __cpp_lib_common_reference is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_common_reference_wrapper == 202302L);\r\n#elif defined(__cpp_lib_common_reference_wrapper)\r\n#error __cpp_lib_common_reference_wrapper is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_complex_udls == 201309L);\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_concepts == 202207L);\r\n#elif defined(__cpp_lib_concepts)\r\n#error __cpp_lib_concepts is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_constexpr_algorithms == 201806L);\r\n#elif defined(__cpp_lib_constexpr_algorithms)\r\n#error __cpp_lib_constexpr_algorithms is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_constexpr_bitset == 202207L);\r\n#elif defined(__cpp_lib_constexpr_bitset)\r\n#error __cpp_lib_constexpr_bitset is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_constexpr_charconv == 202207L);\r\n#elif defined(__cpp_lib_constexpr_charconv)\r\n#error __cpp_lib_constexpr_charconv is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_constexpr_complex == 201711L);\r\n#elif defined(__cpp_lib_constexpr_complex)\r\n#error __cpp_lib_constexpr_complex is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_constexpr_dynamic_alloc == 201907L);\r\n#elif defined(__cpp_lib_constexpr_dynamic_alloc)\r\n#error __cpp_lib_constexpr_dynamic_alloc is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_constexpr_functional == 201907L);\r\n#elif defined(__cpp_lib_constexpr_functional)\r\n#error __cpp_lib_constexpr_functional is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_constexpr_iterator == 201811L);\r\n#elif defined(__cpp_lib_constexpr_iterator)\r\n#error __cpp_lib_constexpr_iterator is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_constexpr_memory == 202202L);\r\n#elif _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_constexpr_memory == 201811L);\r\n#elif defined(__cpp_lib_constexpr_memory)\r\n#error __cpp_lib_constexpr_memory is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_constexpr_numeric == 201911L);\r\n#elif defined(__cpp_lib_constexpr_numeric)\r\n#error __cpp_lib_constexpr_numeric is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_constexpr_string == 201907L);\r\n#elif defined(__cpp_lib_constexpr_string)\r\n#error __cpp_lib_constexpr_string is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_constexpr_string_view == 201811L);\r\n#elif defined(__cpp_lib_constexpr_string_view)\r\n#error __cpp_lib_constexpr_string_view is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_constexpr_tuple == 201811L);\r\n#elif defined(__cpp_lib_constexpr_tuple)\r\n#error __cpp_lib_constexpr_tuple is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_constexpr_typeinfo == 202106L);\r\n#elif defined(__cpp_lib_constexpr_typeinfo)\r\n#error __cpp_lib_constexpr_typeinfo is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_constexpr_utility == 201811L);\r\n#elif defined(__cpp_lib_constexpr_utility)\r\n#error __cpp_lib_constexpr_utility is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_constexpr_vector == 201907L);\r\n#elif defined(__cpp_lib_constexpr_vector)\r\n#error __cpp_lib_constexpr_vector is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_containers_ranges == 202202L);\r\n#elif defined(__cpp_lib_containers_ranges)\r\n#error __cpp_lib_containers_ranges is defined\r\n#endif\r\n\r\n#ifdef __cpp_impl_coroutine\r\nSTATIC_ASSERT(__cpp_lib_coroutine == 201902L);\r\n#elif defined(__cpp_lib_coroutine)\r\n#error __cpp_lib_coroutine is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_destroying_delete == 201806L);\r\n#elif defined(__cpp_lib_destroying_delete)\r\n#error __cpp_lib_destroying_delete is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_enable_shared_from_this == 201603L);\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_endian == 201907L);\r\n#elif defined(__cpp_lib_endian)\r\n#error __cpp_lib_endian is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_erase_if == 202002L);\r\n#elif defined(__cpp_lib_erase_if)\r\n#error __cpp_lib_erase_if is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_exchange_function == 201304L);\r\n\r\n#if _HAS_CXX20 && !defined(_M_CEE_PURE)\r\nSTATIC_ASSERT(__cpp_lib_execution == 201902L);\r\n#elif _HAS_CXX17 && !defined(_M_CEE_PURE)\r\nSTATIC_ASSERT(__cpp_lib_execution == 201603L);\r\n#elif defined(__cpp_lib_execution)\r\n#error __cpp_lib_execution is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_expected == 202211L);\r\n#elif defined(__cpp_lib_expected)\r\n#error __cpp_lib_expected is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_filesystem == 201703L);\r\n#elif defined(__cpp_lib_filesystem)\r\n#error __cpp_lib_filesystem is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_flat_map == 202511L);\r\n#elif defined(__cpp_lib_flat_map)\r\n#error __cpp_lib_flat_map is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_flat_set == 202511L);\r\n#elif defined(__cpp_lib_flat_set)\r\n#error __cpp_lib_flat_set is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_format == 202304L);\r\n#elif defined(__cpp_lib_format)\r\n#error __cpp_lib_format is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_format_ranges == 202207L);\r\n#elif defined(__cpp_lib_format_ranges)\r\n#error __cpp_lib_format_ranges is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_format_uchar == 202311L);\r\n#elif defined(__cpp_lib_format_uchar)\r\n#error __cpp_lib_format_uchar is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_formatters == 202302L);\r\n#elif defined(__cpp_lib_formatters)\r\n#error __cpp_lib_formatters is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_forward_like == 202207L);\r\n#elif defined(__cpp_lib_forward_like)\r\n#error __cpp_lib_forward_like is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_freestanding_algorithm == 202311L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_freestanding_array == 202311L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_freestanding_char_traits == 202306L);\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_freestanding_charconv == 202306L);\r\n#elif defined(__cpp_lib_freestanding_charconv)\r\n#error __cpp_lib_freestanding_charconv is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_freestanding_cstdlib == 202306L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_freestanding_cstring == 202311L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_freestanding_cwchar == 202306L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_freestanding_errc == 202306L);\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_freestanding_expected == 202311L);\r\n#elif defined(__cpp_lib_freestanding_expected)\r\n#error __cpp_lib_freestanding_expected is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_freestanding_feature_test_macros == 202306L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_freestanding_functional == 202306L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_freestanding_iterator == 202306L);\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_freestanding_mdspan == 202311L);\r\n#elif defined(__cpp_lib_freestanding_mdspan)\r\n#error __cpp_lib_freestanding_mdspan is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_freestanding_memory == 202306L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_freestanding_operator_new == 202306L);\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_freestanding_optional == 202311L);\r\n#elif defined(__cpp_lib_freestanding_optional)\r\n#error __cpp_lib_freestanding_optional is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_freestanding_ranges == 202306L);\r\n#elif defined(__cpp_lib_freestanding_ranges)\r\n#error __cpp_lib_freestanding_ranges is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_freestanding_ratio == 202306L);\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_freestanding_string_view == 202311L);\r\n#elif defined(__cpp_lib_freestanding_string_view)\r\n#error __cpp_lib_freestanding_string_view is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_freestanding_tuple == 202306L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_freestanding_utility == 202306L);\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_freestanding_variant == 202311L);\r\n#elif defined(__cpp_lib_freestanding_variant)\r\n#error __cpp_lib_freestanding_variant is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_gcd_lcm == 201606L);\r\n#elif defined(__cpp_lib_gcd_lcm)\r\n#error __cpp_lib_gcd_lcm is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_generator == 202207L);\r\n#elif defined(__cpp_lib_generator)\r\n#error __cpp_lib_generator is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_generic_associative_lookup == 201304L);\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_generic_unordered_lookup == 201811L);\r\n#elif defined(__cpp_lib_generic_unordered_lookup)\r\n#error __cpp_lib_generic_unordered_lookup is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_hardware_interference_size == 201703L);\r\n#elif defined(__cpp_lib_hardware_interference_size)\r\n#error __cpp_lib_hardware_interference_size is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_has_unique_object_representations == 201606L);\r\n#elif defined(__cpp_lib_has_unique_object_representations)\r\n#error __cpp_lib_has_unique_object_representations is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_hypot == 201603L);\r\n#elif defined(__cpp_lib_hypot)\r\n#error __cpp_lib_hypot is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_incomplete_container_elements == 201505L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_initializer_list == 202511L);\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_int_pow2 == 202002L);\r\n#elif defined(__cpp_lib_int_pow2)\r\n#error __cpp_lib_int_pow2 is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_integer_comparison_functions == 202002L);\r\n#elif defined(__cpp_lib_integer_comparison_functions)\r\n#error __cpp_lib_integer_comparison_functions is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_integer_sequence == 201304L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_integral_constant_callable == 201304L);\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_interpolate == 201902L);\r\n#elif defined(__cpp_lib_interpolate)\r\n#error __cpp_lib_interpolate is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_invoke == 201411L);\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_invoke_r == 202106L);\r\n#elif defined(__cpp_lib_invoke_r)\r\n#error __cpp_lib_invoke_r is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ios_noreplace == 202207L);\r\n#elif defined(__cpp_lib_ios_noreplace)\r\n#error __cpp_lib_ios_noreplace is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_is_aggregate == 201703L);\r\n#elif defined(__cpp_lib_is_aggregate)\r\n#error __cpp_lib_is_aggregate is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_is_constant_evaluated == 201811L);\r\n#elif defined(__cpp_lib_is_constant_evaluated)\r\n#error __cpp_lib_is_constant_evaluated is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_is_final == 201402L);\r\n\r\n#if _HAS_CXX23 && !defined(__EDG__) // TRANSITION, GH-5738 tracking VSO-2581623 (EDG)\r\nSTATIC_ASSERT(__cpp_lib_is_implicit_lifetime == 202302L);\r\n#elif defined(__cpp_lib_is_implicit_lifetime)\r\n#error __cpp_lib_is_implicit_lifetime is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_is_invocable == 201703L);\r\n#elif defined(__cpp_lib_is_invocable)\r\n#error __cpp_lib_is_invocable is defined\r\n#endif\r\n\r\n#if _HAS_CXX20 && !defined(__clang__) // TRANSITION, LLVM-48860\r\nSTATIC_ASSERT(__cpp_lib_is_layout_compatible == 201907L);\r\n#elif defined(__cpp_lib_is_layout_compatible)\r\n#error __cpp_lib_is_layout_compatible is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_is_nothrow_convertible == 201806L);\r\n#elif defined(__cpp_lib_is_nothrow_convertible)\r\n#error __cpp_lib_is_nothrow_convertible is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_is_null_pointer == 201309L);\r\n\r\n#if _HAS_CXX20 && !defined(__clang__) // TRANSITION, LLVM-48860\r\nSTATIC_ASSERT(__cpp_lib_is_pointer_interconvertible == 201907L);\r\n#elif defined(__cpp_lib_is_pointer_interconvertible)\r\n#error __cpp_lib_is_pointer_interconvertible is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_is_scoped_enum == 202011L);\r\n#elif defined(__cpp_lib_is_scoped_enum)\r\n#error __cpp_lib_is_scoped_enum is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_is_swappable == 201603L);\r\n#elif defined(__cpp_lib_is_swappable)\r\n#error __cpp_lib_is_swappable is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_jthread == 201911L);\r\n#elif defined(__cpp_lib_jthread)\r\n#error __cpp_lib_jthread is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_latch == 201907L);\r\n#elif defined(__cpp_lib_latch)\r\n#error __cpp_lib_latch is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_launder == 201606L);\r\n#elif defined(__cpp_lib_launder)\r\n#error __cpp_lib_launder is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_list_remove_return_type == 201806L);\r\n#elif defined(__cpp_lib_list_remove_return_type)\r\n#error __cpp_lib_list_remove_return_type is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_logical_traits == 201510L);\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_make_from_tuple == 201606L);\r\n#elif defined(__cpp_lib_make_from_tuple)\r\n#error __cpp_lib_make_from_tuple is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_make_reverse_iterator == 201402L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_make_unique == 201304L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_map_try_emplace == 201411L);\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_math_constants == 201907L);\r\n#elif defined(__cpp_lib_math_constants)\r\n#error __cpp_lib_math_constants is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_math_special_functions == 201603L);\r\n#elif defined(__cpp_lib_math_special_functions)\r\n#error __cpp_lib_math_special_functions is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_mdspan == 202207L);\r\n#elif defined(__cpp_lib_mdspan)\r\n#error __cpp_lib_mdspan is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_memory_resource == 201603L);\r\n#elif defined(__cpp_lib_memory_resource)\r\n#error __cpp_lib_memory_resource is defined\r\n#endif\r\n\r\n#if _HAS_CXX20 && !defined(__clang__) && !defined(__EDG__) // TRANSITION, Clang and EDG support for modules\r\nSTATIC_ASSERT(__cpp_lib_modules == 202207L);\r\n#elif defined(__cpp_lib_modules)\r\n#error __cpp_lib_modules is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_move_iterator_concept == 202207L);\r\n#elif defined(__cpp_lib_move_iterator_concept)\r\n#error __cpp_lib_move_iterator_concept is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_move_only_function == 202110L);\r\n#elif defined(__cpp_lib_move_only_function)\r\n#error __cpp_lib_move_only_function is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_node_extract == 201606L);\r\n#elif defined(__cpp_lib_node_extract)\r\n#error __cpp_lib_node_extract is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_nonmember_container_access == 201411L);\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_not_fn == 201603L);\r\n#elif defined(__cpp_lib_not_fn)\r\n#error __cpp_lib_not_fn is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_null_iterators == 201304L);\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_optional == 202110L);\r\n#elif _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_optional == 202106L);\r\n#elif _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_optional == 201606L);\r\n#elif defined(__cpp_lib_optional)\r\n#error __cpp_lib_optional is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_out_ptr == 202311L);\r\n#elif defined(__cpp_lib_out_ptr)\r\n#error __cpp_lib_out_ptr is defined\r\n#endif\r\n\r\n#if _HAS_CXX17 && !defined(_M_CEE_PURE)\r\nSTATIC_ASSERT(__cpp_lib_parallel_algorithm == 201603L);\r\n#elif defined(__cpp_lib_parallel_algorithm)\r\n#error __cpp_lib_parallel_algorithm is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_polymorphic_allocator == 201902L);\r\n#elif defined(__cpp_lib_polymorphic_allocator)\r\n#error __cpp_lib_polymorphic_allocator is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_print == 202406L);\r\n#elif defined(__cpp_lib_print)\r\n#error __cpp_lib_print is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_quoted_string_io == 201304L);\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges == 202406L);\r\n#elif _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_ranges == 202110L);\r\n#elif defined(__cpp_lib_ranges)\r\n#error __cpp_lib_ranges is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_as_const == 202311L);\r\n#elif defined(__cpp_lib_ranges_as_const)\r\n#error __cpp_lib_ranges_as_const is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_as_rvalue == 202207L);\r\n#elif defined(__cpp_lib_ranges_as_rvalue)\r\n#error __cpp_lib_ranges_as_rvalue is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_cartesian_product == 202207L);\r\n#elif defined(__cpp_lib_ranges_cartesian_product)\r\n#error __cpp_lib_ranges_cartesian_product is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_chunk == 202202L);\r\n#elif defined(__cpp_lib_ranges_chunk)\r\n#error __cpp_lib_ranges_chunk is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_chunk_by == 202202L);\r\n#elif defined(__cpp_lib_ranges_chunk_by)\r\n#error __cpp_lib_ranges_chunk_by is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_contains == 202207L);\r\n#elif defined(__cpp_lib_ranges_contains)\r\n#error __cpp_lib_ranges_contains is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_enumerate == 202302L);\r\n#elif defined(__cpp_lib_ranges_enumerate)\r\n#error __cpp_lib_ranges_enumerate is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_find_last == 202207L);\r\n#elif defined(__cpp_lib_ranges_find_last)\r\n#error __cpp_lib_ranges_find_last is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_fold == 202207L);\r\n#elif defined(__cpp_lib_ranges_fold)\r\n#error __cpp_lib_ranges_fold is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_iota == 202202L);\r\n#elif defined(__cpp_lib_ranges_iota)\r\n#error __cpp_lib_ranges_iota is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_join_with == 202202L);\r\n#elif defined(__cpp_lib_ranges_join_with)\r\n#error __cpp_lib_ranges_join_with is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_repeat == 202207L);\r\n#elif defined(__cpp_lib_ranges_repeat)\r\n#error __cpp_lib_ranges_repeat is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_slide == 202202L);\r\n#elif defined(__cpp_lib_ranges_slide)\r\n#error __cpp_lib_ranges_slide is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_starts_ends_with == 202106L);\r\n#elif defined(__cpp_lib_ranges_starts_ends_with)\r\n#error __cpp_lib_ranges_starts_ends_with is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_stride == 202207L);\r\n#elif defined(__cpp_lib_ranges_stride)\r\n#error __cpp_lib_ranges_stride is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_to_container == 202202L);\r\n#elif defined(__cpp_lib_ranges_to_container)\r\n#error __cpp_lib_ranges_to_container is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_ranges_zip == 202110L);\r\n#elif defined(__cpp_lib_ranges_zip)\r\n#error __cpp_lib_ranges_zip is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_raw_memory_algorithms == 201606L);\r\n#elif defined(__cpp_lib_raw_memory_algorithms)\r\n#error __cpp_lib_raw_memory_algorithms is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_reference_from_temporary == 202202L);\r\n#elif defined(__cpp_lib_reference_from_temporary)\r\n#error __cpp_lib_reference_from_temporary is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_remove_cvref == 201711L);\r\n#elif defined(__cpp_lib_remove_cvref)\r\n#error __cpp_lib_remove_cvref is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_result_of_sfinae == 201210L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_robust_nonmodifying_seq_ops == 201304L);\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_sample == 201603L);\r\n#elif defined(__cpp_lib_sample)\r\n#error __cpp_lib_sample is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_scoped_lock == 201703L);\r\n#elif defined(__cpp_lib_scoped_lock)\r\n#error __cpp_lib_scoped_lock is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_semaphore == 201907L);\r\n#elif defined(__cpp_lib_semaphore)\r\n#error __cpp_lib_semaphore is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_shared_mutex == 201505L);\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_shared_ptr_arrays == 201707L);\r\n#else\r\nSTATIC_ASSERT(__cpp_lib_shared_ptr_arrays == 201611L);\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_shared_ptr_weak_type == 201606L);\r\n#elif defined(__cpp_lib_shared_ptr_weak_type)\r\n#error __cpp_lib_shared_ptr_weak_type is defined\r\n#endif\r\n\r\n#ifndef _M_CEE_PURE\r\nSTATIC_ASSERT(__cpp_lib_shared_timed_mutex == 201402L);\r\n#elif defined(__cpp_lib_shared_timed_mutex)\r\n#error __cpp_lib_shared_timed_mutex is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_shift == 202202L);\r\n#elif _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_shift == 201806L);\r\n#elif defined(__cpp_lib_shift)\r\n#error __cpp_lib_shift is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_smart_ptr_for_overwrite == 202002L);\r\n#elif defined(__cpp_lib_smart_ptr_for_overwrite)\r\n#error __cpp_lib_smart_ptr_for_overwrite is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_source_location == 201907L);\r\n#elif defined(__cpp_lib_source_location)\r\n#error __cpp_lib_source_location is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_span == 202002L);\r\n#elif defined(__cpp_lib_span)\r\n#error __cpp_lib_span is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_spanstream == 202106L);\r\n#elif defined(__cpp_lib_spanstream)\r\n#error __cpp_lib_spanstream is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_ssize == 201902L);\r\n#elif defined(__cpp_lib_ssize)\r\n#error __cpp_lib_ssize is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_stacktrace == 202011L);\r\n#elif defined(__cpp_lib_stacktrace)\r\n#error __cpp_lib_stacktrace is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_starts_ends_with == 201711L);\r\n#elif defined(__cpp_lib_starts_ends_with)\r\n#error __cpp_lib_starts_ends_with is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_stdatomic_h == 202011L);\r\n#elif defined(__cpp_lib_stdatomic_h)\r\n#error __cpp_lib_stdatomic_h is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_string_contains == 202011L);\r\n#elif defined(__cpp_lib_string_contains)\r\n#error __cpp_lib_string_contains is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_string_resize_and_overwrite == 202110L);\r\n#elif defined(__cpp_lib_string_resize_and_overwrite)\r\n#error __cpp_lib_string_resize_and_overwrite is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_string_udls == 201304L);\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_string_view == 201803L);\r\n#elif defined(__cpp_lib_string_view)\r\n#error __cpp_lib_string_view is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_syncbuf == 201803L);\r\n#elif defined(__cpp_lib_syncbuf)\r\n#error __cpp_lib_syncbuf is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_three_way_comparison == 201907L);\r\n#elif defined(__cpp_lib_three_way_comparison)\r\n#error __cpp_lib_three_way_comparison is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_to_address == 201711L);\r\n#elif defined(__cpp_lib_to_address)\r\n#error __cpp_lib_to_address is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_to_array == 201907L);\r\n#elif defined(__cpp_lib_to_array)\r\n#error __cpp_lib_to_array is defined\r\n#endif\r\n\r\n#if _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_to_chars == 201611L);\r\n#elif defined(__cpp_lib_to_chars)\r\n#error __cpp_lib_to_chars is defined\r\n#endif\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_to_underlying == 202102L);\r\n#elif defined(__cpp_lib_to_underlying)\r\n#error __cpp_lib_to_underlying is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_transformation_trait_aliases == 201304L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_transparent_operators == 201510L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_tuple_element_t == 201402L);\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_tuple_like == 202207L);\r\n#elif defined(__cpp_lib_tuple_like)\r\n#error __cpp_lib_tuple_like is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_tuples_by_type == 201304L);\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_type_identity == 201806L);\r\n#elif defined(__cpp_lib_type_identity)\r\n#error __cpp_lib_type_identity is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_type_trait_variable_templates == 201510L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_uncaught_exceptions == 201411L);\r\n\r\nSTATIC_ASSERT(__cpp_lib_unordered_map_try_emplace == 201411L);\r\n\r\n#if _HAS_CXX23\r\nSTATIC_ASSERT(__cpp_lib_unreachable == 202202L);\r\n#elif defined(__cpp_lib_unreachable)\r\n#error __cpp_lib_unreachable is defined\r\n#endif\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_unwrap_ref == 201811L);\r\n#elif defined(__cpp_lib_unwrap_ref)\r\n#error __cpp_lib_unwrap_ref is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_valarray == 202511L);\r\n\r\n#if _HAS_CXX20\r\nSTATIC_ASSERT(__cpp_lib_variant == 202106L);\r\n#elif _HAS_CXX17\r\nSTATIC_ASSERT(__cpp_lib_variant == 202102L);\r\n#elif defined(__cpp_lib_variant)\r\n#error __cpp_lib_variant is defined\r\n#endif\r\n\r\nSTATIC_ASSERT(__cpp_lib_void_t == 201411L);\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0174871_string_replace/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0174871_string_replace/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <stdexcept>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\nconst string g_input(\"0123456789\");\r\n\r\nvoid test_replace(\r\n    const size_t removedOffset, const size_t removedSize, const string& newContent, const char* const expected) {\r\n    string target(g_input);\r\n    target.replace(removedOffset, removedSize, newContent);\r\n    if (target != expected) {\r\n        printf(R\"(test_replace(%zu, %zu, \"%s\", \"%s\"):         bad answer: \"%s\")\"\r\n               \"\\n\",\r\n            removedOffset, removedSize, newContent.c_str(), expected, target.c_str());\r\n        abort();\r\n    }\r\n\r\n    string cTarget(g_input);\r\n    cTarget.replace(removedOffset, removedSize, newContent.c_str());\r\n    if (cTarget != expected) {\r\n        printf(R\"(test_replace(%zu, %zu, \"%s\", \"%s\"): bad c_str() answer: \"%s\")\"\r\n               \"\\n\",\r\n            removedOffset, removedSize, newContent.c_str(), expected, cTarget.c_str());\r\n        abort();\r\n    }\r\n}\r\n\r\nvoid test_self_replace(const size_t removedOffset, const size_t removedSize, const size_t addedOffset,\r\n    const size_t addedSize, const char* const expected) {\r\n    string target(g_input);\r\n    target.replace(removedOffset, removedSize, target, addedOffset, addedSize);\r\n    if (target != expected) {\r\n        printf(R\"(test_self_replace(%zu, %zu, %zu, %zu, \"%s\"):         bad answer: \"%s\")\"\r\n               \"\\n\",\r\n            removedOffset, removedSize, addedOffset, addedSize, expected, target.c_str());\r\n        abort();\r\n    }\r\n\r\n    string cTarget(g_input);\r\n    cTarget.replace(removedOffset, removedSize, cTarget.c_str() + addedOffset, addedSize);\r\n    if (cTarget != expected) {\r\n        printf(R\"(test_self_replace(%zu, %zu, %zu, %zu, \"%s\"): bad c_str() answer: \"%s\")\"\r\n               \"\\n\",\r\n            removedOffset, removedSize, addedOffset, addedSize, expected, cTarget.c_str());\r\n        abort();\r\n    }\r\n}\r\n\r\ntemplate <typename StringT>\r\nvoid test_index_boundary_cases_impl(StringT& exampleString) {\r\n    // operator[] allows accessing the terminating null character\r\n    // (see N4567 21.4.5 [string.access]/2)\r\n    // so IDL checks must not blow up accessing it:\r\n    assert(exampleString[exampleString.size()] == '\\0');\r\n\r\n    try {\r\n        assert(exampleString.at(exampleString.size() - 1) == 'e');\r\n    } catch (const out_of_range&) {\r\n        puts(\"Accessing string::at(string::size() - 1) should not throw out_of_range\");\r\n        abort();\r\n    }\r\n\r\n    try {\r\n        (void) exampleString.at(exampleString.size());\r\n        puts(\"Accessing string::at(string::size()) should throw out_of_range\");\r\n        abort();\r\n    } catch (const out_of_range&) {\r\n        // purposely do nothing on out_of_range\r\n    }\r\n}\r\n\r\nvoid test_index_boundary_cases() {\r\n    // boundary cases for at() and operator[]\r\n    string exampleString(\"example\");\r\n    test_index_boundary_cases_impl(exampleString);\r\n    test_index_boundary_cases_impl(static_cast<const string&>(exampleString));\r\n}\r\n\r\nvoid test_shrink_to_fit() {\r\n    const char shortStr[] = \"hello\";\r\n    string example{shortStr};\r\n    example.shrink_to_fit();\r\n    assert(example == shortStr);\r\n    example.resize(1789);\r\n    assert(strcmp(shortStr, example.c_str()) == 0);\r\n    example.resize(sizeof(shortStr) - 1);\r\n    example.shrink_to_fit(); // reenters small mode\r\n    assert(example == shortStr);\r\n\r\n    const char longerStr[] = \"the quick brown fox jumps over the lazy dog\";\r\n    example.resize(32768);\r\n    example = longerStr;\r\n    assert(example == longerStr);\r\n    example.shrink_to_fit(); // reallocates smaller buffer\r\n    assert(example == longerStr);\r\n}\r\n\r\nint main() {\r\n    // Plain replacements with shrinking / same size / growing\r\n    test_replace(3, 3, \"ab\", \"012ab6789\");\r\n    test_replace(3, 2, \"ab\", \"012ab56789\");\r\n    test_replace(3, 1, \"ab\", \"012ab456789\");\r\n    // Empty string removed\r\n    test_replace(3, 0, \"ab\", \"012ab3456789\");\r\n    // Empty string inserted\r\n    test_replace(3, 3, \"\", \"0126789\");\r\n    // Complete no-op\r\n    test_replace(3, 0, \"\", \"0123456789\");\r\n    // Boundary edge cases\r\n    test_replace(0, 0, \"a\", \"a0123456789\");\r\n    test_replace(0, 1, \"a\", \"a123456789\");\r\n    test_replace(9, 1, \"a\", \"012345678a\");\r\n    test_replace(10, 0, \"a\", \"0123456789a\");\r\n\r\n    // Self replacement cases are intended to align with the special cases in\r\n    // basic_string::replace(size_type _Off, size_type _N0,\r\n    //                       const _Myt& _Right, size_type _Roff, size_type _Count = npos)\r\n    test_self_replace(3, 1, 4, 1, \"0124456789\");\r\n    test_self_replace(3, 2, 4, 2, \"0124556789\"); // repeated\r\n    test_self_replace(3, 2, 2, 2, \"0122356789\"); // repeated\r\n    test_self_replace(3, 3, 3, 3, \"0123456789\"); // repeated\r\n    test_self_replace(0, 0, 0, 0, \"0123456789\"); // repeated\r\n    test_self_replace(0, 10, 0, 10, \"0123456789\"); // repeated\r\n    test_self_replace(10, 0, 10, 0, \"0123456789\"); // repeated\r\n    // \"no overlap\" case omitted\r\n    test_self_replace(3, 2, 5, 1, \"012556789\");\r\n    test_self_replace(3, 1, 1, 2, \"01212456789\");\r\n    test_self_replace(3, 1, 8, 2, \"01289456789\");\r\n    test_self_replace(3, 2, 3, 3, \"01234556789\");\r\n    test_self_replace(3, 2, 4, 3, \"01245656789\"); // repeated\r\n\r\n    // And one more case when shrinking where the substring is in the removed part\r\n    test_self_replace(3, 5, 4, 2, \"0124589\");\r\n\r\n    test_index_boundary_cases();\r\n    test_shrink_to_fit();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0180466_algorithm_overhauls/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0180466_algorithm_overhauls/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma warning(disable : 4018) // signed/unsigned mismatch in comparison\r\n#pragma warning(disable : 4365) // signed/unsigned mismatch in implicit conversion\r\n#pragma warning(disable : 4389) // signed/unsigned mismatch in arithmetic\r\n\r\n#ifdef __clang__\r\n#if __clang_major__ >= 21 // TRANSITION, unconditionally silence this warning when Clang 21 is available\r\n#pragma clang diagnostic ignored \"-Wcharacter-conversion\"\r\n#endif // __clang_major__ >= 21\r\n#pragma clang diagnostic ignored \"-Wsign-compare\"\r\n#endif // __clang__\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cassert>\r\n#include <functional>\r\n#include <iterator>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\nstruct move_only {\r\n    int val;\r\n\r\n    move_only(int val_) : val(val_) {}\r\n    move_only(const move_only&)            = delete;\r\n    move_only(move_only&&)                 = default;\r\n    move_only& operator=(const move_only&) = delete;\r\n    move_only& operator=(move_only&&)      = default;\r\n};\r\n\r\nbool operator==(const move_only& lhs, const move_only& rhs) {\r\n    return lhs.val == rhs.val;\r\n}\r\n\r\ntemplate <template <class, class> class Test, class Left>\r\nvoid test_all_numeric_types_impl() {\r\n    Test<Left, char>{}();\r\n    Test<Left, signed char>{}();\r\n    Test<Left, unsigned char>{}();\r\n    Test<Left, wchar_t>{}();\r\n#ifdef __cpp_char8_t\r\n    Test<Left, char8_t>{}();\r\n#endif // __cpp_char8_t\r\n    Test<Left, char16_t>{}();\r\n    Test<Left, char32_t>{}();\r\n    Test<Left, short>{}();\r\n    Test<Left, unsigned short>{}();\r\n    Test<Left, int>{}();\r\n    Test<Left, unsigned int>{}();\r\n    Test<Left, long>{}();\r\n    Test<Left, unsigned long>{}();\r\n    Test<Left, long long>{}();\r\n    Test<Left, unsigned long long>{}();\r\n    Test<Left, float>{}();\r\n    Test<Left, double>{}();\r\n    Test<Left, long double>{}();\r\n}\r\n\r\ntemplate <template <class, class> class Test>\r\nvoid test_all_numeric_types() {\r\n    test_all_numeric_types_impl<Test, char>();\r\n    test_all_numeric_types_impl<Test, signed char>();\r\n    test_all_numeric_types_impl<Test, unsigned char>();\r\n    test_all_numeric_types_impl<Test, wchar_t>();\r\n#ifdef __cpp_char8_t\r\n    test_all_numeric_types_impl<Test, char8_t>();\r\n#endif // __cpp_char8_t\r\n    test_all_numeric_types_impl<Test, char16_t>();\r\n    test_all_numeric_types_impl<Test, char32_t>();\r\n    test_all_numeric_types_impl<Test, short>();\r\n    test_all_numeric_types_impl<Test, unsigned short>();\r\n    test_all_numeric_types_impl<Test, int>();\r\n    test_all_numeric_types_impl<Test, unsigned int>();\r\n    test_all_numeric_types_impl<Test, long>();\r\n    test_all_numeric_types_impl<Test, unsigned long>();\r\n    test_all_numeric_types_impl<Test, long long>();\r\n    test_all_numeric_types_impl<Test, unsigned long long>();\r\n    test_all_numeric_types_impl<Test, float>();\r\n    test_all_numeric_types_impl<Test, double>();\r\n    test_all_numeric_types_impl<Test, long double>();\r\n#ifdef __cpp_lib_byte\r\n    Test<byte, byte>{}();\r\n#endif // __cpp_lib_byte\r\n}\r\n\r\nnamespace test_std_equal {\r\n    struct test_strings {\r\n        string a = \"a\";\r\n        string b = \"b\";\r\n        string c = \"c\";\r\n    };\r\n\r\n    void equal_should_respect_pred() {\r\n        const test_strings str1{};\r\n        const test_strings str2{};\r\n        const char* const equal_chars1[] = {str1.a.c_str(), str1.b.c_str(), str1.c.c_str()};\r\n\r\n        const char* const equal_chars2[] = {str2.a.c_str(), str2.b.c_str(), str2.c.c_str()};\r\n\r\n        // supplying a custom equal_to<string> compares the string contents, so the chars are equal\r\n        assert(\r\n            equal(begin(equal_chars1), end(equal_chars1), begin(equal_chars2), end(equal_chars2), equal_to<string>{}));\r\n        assert(equal(begin(equal_chars1), end(equal_chars1), equal_chars2, equal_to<string>{}));\r\n        // but other comparisons compare the pointer addresses so they aren't equal\r\n        assert(!equal(begin(equal_chars1), end(equal_chars1), equal_chars2));\r\n        assert(!equal(begin(equal_chars1), end(equal_chars1), begin(equal_chars2), end(equal_chars2)));\r\n        assert(!equal(begin(equal_chars1), end(equal_chars1), begin(equal_chars2), end(equal_chars2), equal_to<>{}));\r\n        assert(!equal(\r\n            begin(equal_chars1), end(equal_chars1), begin(equal_chars2), end(equal_chars2), equal_to<const char*>{}));\r\n        assert(!equal(\r\n            begin(equal_chars1), end(equal_chars1), begin(equal_chars2), end(equal_chars2), equal_to<const void*>{}));\r\n        assert(!equal(begin(equal_chars1), end(equal_chars1), begin(equal_chars2), end(equal_chars2), less<string>{}));\r\n    }\r\n\r\n    template <class Left, class Right>\r\n    struct test_equal_should_return_correct_numeric_result {\r\n        void operator()() const {\r\n            Left eq_lhs[]  = {static_cast<Left>(1), static_cast<Left>(2), static_cast<Left>(3)};\r\n            Left lt_lhs[]  = {static_cast<Left>(0), static_cast<Left>(1), static_cast<Left>(2)};\r\n            Right eq_rhs[] = {static_cast<Right>(1), static_cast<Right>(2), static_cast<Right>(3)};\r\n\r\n            // plain equal and not equal cases\r\n            assert(equal(eq_lhs, end(eq_lhs), eq_rhs, equal_to<>{}));\r\n            assert(!equal(lt_lhs, end(lt_lhs), eq_rhs, equal_to<>{}));\r\n\r\n            // unorthodox builtin comparison function\r\n            assert(equal(lt_lhs, end(lt_lhs), eq_rhs, less<>{}));\r\n\r\n            // ensure usual arithmetic conversions are handled correctly\r\n            eq_lhs[0] = static_cast<Left>(-1);\r\n            eq_rhs[0] = static_cast<Right>(-1);\r\n            assert(equal(eq_lhs, end(eq_lhs), eq_rhs) == (eq_lhs[0] == eq_rhs[0]));\r\n        }\r\n    };\r\n\r\n    void test() {\r\n        equal_should_respect_pred();\r\n        test_all_numeric_types<test_equal_should_return_correct_numeric_result>();\r\n    }\r\n} // namespace test_std_equal\r\n\r\nnamespace test_lexicographical_compare {\r\n    // examples in sort order\r\n    struct unsigned_data {\r\n        static const unsigned char fluff[];\r\n        static const unsigned char fluffy[];\r\n        static const unsigned char kitten[];\r\n        static const unsigned char neg[];\r\n    };\r\n\r\n    // note use of {'x'} syntax instead of \"x\" to avoid null terminators\r\n    const unsigned char unsigned_data::fluff[]  = {'f', 'l', 'u', 'f', 'f'}; // prefix of the following\r\n    const unsigned char unsigned_data::fluffy[] = {'f', 'l', 'u', 'f', 'f', 'y'};\r\n    const unsigned char unsigned_data::kitten[] = {'k', 'i', 't', 't', 'e', 'n'};\r\n    const unsigned char unsigned_data::neg[]    = {static_cast<unsigned char>('\\xB5')}; // mu character\r\n\r\n    struct signed_data {\r\n        static const signed char neg[];\r\n        static const signed char fluff[];\r\n        static const signed char fluffy[];\r\n        static const signed char kitten[];\r\n    };\r\n\r\n    const signed char signed_data::neg[]    = {static_cast<signed char>('\\xB5')};\r\n    const signed char signed_data::fluff[]  = {'f', 'l', 'u', 'f', 'f'};\r\n    const signed char signed_data::fluffy[] = {'f', 'l', 'u', 'f', 'f', 'y'};\r\n    const signed char signed_data::kitten[] = {'k', 'i', 't', 't', 'e', 'n'};\r\n\r\n    struct char_data {\r\n        static const char neg[];\r\n        static const char fluff[];\r\n        static const char fluffy[];\r\n        static const char kitten[];\r\n    };\r\n\r\n    const char char_data::neg[]    = {static_cast<char>('\\xB5')};\r\n    const char char_data::fluff[]  = {'f', 'l', 'u', 'f', 'f'};\r\n    const char char_data::fluffy[] = {'f', 'l', 'u', 'f', 'f', 'y'};\r\n    const char char_data::kitten[] = {'k', 'i', 't', 't', 'e', 'n'};\r\n\r\n#ifdef __cpp_char8_t\r\n    struct char8_data {\r\n        static const char8_t neg[];\r\n        static const char8_t fluff[];\r\n        static const char8_t fluffy[];\r\n        static const char8_t kitten[];\r\n    };\r\n\r\n    const char8_t char8_data::neg[]    = {static_cast<char8_t>('\\xB5')};\r\n    const char8_t char8_data::fluff[]  = {u8'f', u8'l', u8'u', u8'f', u8'f'};\r\n    const char8_t char8_data::fluffy[] = {u8'f', u8'l', u8'u', u8'f', u8'f', u8'y'};\r\n    const char8_t char8_data::kitten[] = {u8'k', u8'i', u8't', u8't', u8'e', u8'n'};\r\n#endif // __cpp_char8_t\r\n\r\n    template <class Data>\r\n    void test_case_non_pred(const bool should_treat_as_signed) {\r\n        // in ascending order\r\n        assert(lexicographical_compare(begin(Data::fluff), end(Data::fluff), begin(Data::fluffy), end(Data::fluffy)));\r\n        assert(lexicographical_compare(begin(Data::fluffy), end(Data::fluffy), begin(Data::kitten), end(Data::kitten)));\r\n        assert(lexicographical_compare(begin(Data::kitten), end(Data::kitten), begin(Data::neg), end(Data::neg))\r\n               != should_treat_as_signed);\r\n        // descending order\r\n        assert(lexicographical_compare(begin(Data::neg), end(Data::neg), begin(Data::kitten), end(Data::kitten))\r\n               == should_treat_as_signed);\r\n        assert(!lexicographical_compare(begin(Data::fluffy), end(Data::fluffy), begin(Data::fluff), end(Data::fluff)));\r\n        assert(\r\n            !lexicographical_compare(begin(Data::kitten), end(Data::kitten), begin(Data::fluffy), end(Data::fluffy)));\r\n        // equal\r\n        assert(\r\n            !lexicographical_compare(begin(Data::kitten), end(Data::kitten), begin(Data::kitten), end(Data::kitten)));\r\n    }\r\n\r\n    template <class Data, class Pred>\r\n    void test_case_pred(const bool should_treat_as_signed, const Pred pred) {\r\n        // differ only in length\r\n        assert(lexicographical_compare(\r\n            begin(Data::fluff), end(Data::fluff), begin(Data::fluffy), end(Data::fluffy), pred));\r\n        assert(!lexicographical_compare(\r\n            begin(Data::fluffy), end(Data::fluffy), begin(Data::fluff), end(Data::fluff), pred));\r\n\r\n        // differ in content\r\n        const bool is_less = pred('a', 'b');\r\n        assert(lexicographical_compare(\r\n                   begin(Data::fluffy), end(Data::fluffy), begin(Data::kitten), end(Data::kitten), pred)\r\n               == is_less);\r\n        assert(lexicographical_compare(begin(Data::kitten), end(Data::kitten), begin(Data::neg), end(Data::neg), pred)\r\n               == (is_less != should_treat_as_signed));\r\n\r\n        assert(lexicographical_compare(begin(Data::neg), end(Data::neg), begin(Data::kitten), end(Data::kitten), pred)\r\n               == (is_less == should_treat_as_signed));\r\n        assert(lexicographical_compare(\r\n                   begin(Data::kitten), end(Data::kitten), begin(Data::fluffy), end(Data::fluffy), pred)\r\n               == !is_less);\r\n\r\n        // equal\r\n        assert(!lexicographical_compare(\r\n            begin(Data::kitten), end(Data::kitten), begin(Data::kitten), end(Data::kitten), pred));\r\n    }\r\n\r\n    void test_changing_pred_does_not_change_length_behavior() {\r\n        const unsigned char prefix[] = {'a', 'b', 'c'};\r\n        const unsigned char full[]   = {'a', 'b', 'c', 'd'};\r\n        // basic tests\r\n        assert(lexicographical_compare(begin(prefix), end(prefix), begin(full), end(full), less<>{}));\r\n        assert(!lexicographical_compare(begin(full), end(full), begin(prefix), end(prefix), less<>{}));\r\n        // greater<>{} changes element-wise comparisons, but doesn't change length-wise comparisons\r\n        assert(lexicographical_compare(begin(prefix), end(prefix), begin(full), end(full), greater<>{}));\r\n        assert(!lexicographical_compare(begin(full), end(full), begin(prefix), end(prefix), greater<>{}));\r\n    }\r\n\r\n    template <class Left, class Right>\r\n    struct test_lex_compare_should_return_correct_numeric_result {\r\n        void operator()() const {\r\n            const Left eq_lhs[]  = {static_cast<Left>(1), static_cast<Left>(2), static_cast<Left>(3)};\r\n            const Left lt_lhs[]  = {static_cast<Left>(0), static_cast<Left>(1), static_cast<Left>(2)};\r\n            const Left gt_lhs[]  = {static_cast<Left>(2), static_cast<Left>(3), static_cast<Left>(4)};\r\n            const Right eq_rhs[] = {static_cast<Right>(1), static_cast<Right>(2), static_cast<Right>(3)};\r\n\r\n            // plain equal and not equal cases\r\n            assert(!lexicographical_compare(eq_lhs, end(eq_lhs), eq_rhs, end(eq_rhs)));\r\n            assert(lexicographical_compare(lt_lhs, end(lt_lhs), eq_rhs, end(eq_rhs)));\r\n\r\n            assert(!lexicographical_compare(eq_lhs, end(eq_lhs), eq_rhs, end(eq_rhs), less<>{}));\r\n            assert(lexicographical_compare(lt_lhs, end(lt_lhs), eq_rhs, end(eq_rhs), less<>{}));\r\n\r\n            assert(!lexicographical_compare(eq_lhs, end(eq_lhs), eq_rhs, end(eq_rhs), greater<>{}));\r\n            assert(!lexicographical_compare(lt_lhs, end(lt_lhs), eq_rhs, end(eq_rhs), greater<>{}));\r\n            assert(lexicographical_compare(gt_lhs, end(gt_lhs), eq_rhs, end(eq_rhs), greater<>{}));\r\n        }\r\n    };\r\n\r\n    void test() {\r\n        const bool char_is_signed = is_signed_v<char>;\r\n        test_case_non_pred<unsigned_data>(false);\r\n        test_case_non_pred<signed_data>(true);\r\n        test_case_non_pred<char_data>(char_is_signed);\r\n#ifdef __cpp_char8_t\r\n        test_case_non_pred<char8_data>(false);\r\n#endif // __cpp_char8_t\r\n\r\n        test_case_pred<unsigned_data>(false, less<>{});\r\n        test_case_pred<unsigned_data>(false, less<unsigned char>{});\r\n        test_case_pred<unsigned_data>(true, less<signed char>{});\r\n        test_case_pred<unsigned_data>(char_is_signed, less<char>{});\r\n#ifdef __cpp_char8_t\r\n        test_case_pred<unsigned_data>(false, less<char8_t>{});\r\n#endif // __cpp_char8_t\r\n        test_case_pred<unsigned_data>(false, greater<>{});\r\n        test_case_pred<unsigned_data>(false, greater<unsigned char>{});\r\n        test_case_pred<unsigned_data>(true, greater<signed char>{});\r\n        test_case_pred<unsigned_data>(char_is_signed, greater<char>{});\r\n#ifdef __cpp_char8_t\r\n        test_case_pred<unsigned_data>(false, greater<char8_t>{});\r\n#endif // __cpp_char8_t\r\n\r\n        test_case_pred<signed_data>(true, less<>{});\r\n        test_case_pred<signed_data>(false, less<unsigned char>{});\r\n        test_case_pred<signed_data>(true, less<signed char>{});\r\n        test_case_pred<signed_data>(char_is_signed, less<char>{});\r\n#ifdef __cpp_char8_t\r\n        test_case_pred<signed_data>(false, less<char8_t>{});\r\n#endif // __cpp_char8_t\r\n        test_case_pred<signed_data>(true, greater<>{});\r\n        test_case_pred<signed_data>(false, greater<unsigned char>{});\r\n        test_case_pred<signed_data>(true, greater<signed char>{});\r\n        test_case_pred<signed_data>(char_is_signed, greater<char>{});\r\n#ifdef __cpp_char8_t\r\n        test_case_pred<signed_data>(false, greater<char8_t>{});\r\n#endif // __cpp_char8_t\r\n\r\n        test_case_pred<char_data>(char_is_signed, less<>{});\r\n        test_case_pred<char_data>(false, less<unsigned char>{});\r\n        test_case_pred<char_data>(true, less<signed char>{});\r\n        test_case_pred<char_data>(char_is_signed, less<char>{});\r\n#ifdef __cpp_char8_t\r\n        test_case_pred<char_data>(false, less<char8_t>{});\r\n#endif // __cpp_char8_t\r\n        test_case_pred<char_data>(char_is_signed, greater<>{});\r\n        test_case_pred<char_data>(false, greater<unsigned char>{});\r\n        test_case_pred<char_data>(true, greater<signed char>{});\r\n        test_case_pred<char_data>(char_is_signed, greater<char>{});\r\n#ifdef __cpp_char8_t\r\n        test_case_pred<char_data>(false, greater<char8_t>{});\r\n#endif // __cpp_char8_t\r\n\r\n#ifdef __cpp_char8_t\r\n        test_case_pred<char8_data>(false, less<>{});\r\n        test_case_pred<char8_data>(false, less<unsigned char>{});\r\n        test_case_pred<char8_data>(true, less<signed char>{});\r\n        test_case_pred<char8_data>(char_is_signed, less<char>{});\r\n        test_case_pred<char8_data>(false, less<char8_t>{});\r\n        test_case_pred<char8_data>(false, greater<>{});\r\n        test_case_pred<char8_data>(false, greater<unsigned char>{});\r\n        test_case_pred<char8_data>(true, greater<signed char>{});\r\n        test_case_pred<char8_data>(char_is_signed, greater<char>{});\r\n        test_case_pred<char8_data>(false, greater<char8_t>{});\r\n#endif // __cpp_char8_t\r\n\r\n        test_changing_pred_does_not_change_length_behavior();\r\n        test_all_numeric_types<test_lex_compare_should_return_correct_numeric_result>();\r\n    }\r\n} // namespace test_lexicographical_compare\r\n\r\nnamespace test_std_copy {\r\n    void test() {\r\n        {\r\n            array<int, 4> target{{42, 43, 44, 45}};\r\n            array<int, 2> input{{1729, 1730}};\r\n            copy(input.begin(), input.end(), target.begin() + 1);\r\n            assert((target == array<int, 4>{{42, 1729, 1730, 45}}));\r\n        }\r\n        {\r\n            // GH-177: copy different-element-types ranges.\r\n            const array<short, 2> input{10, 20};\r\n            array<int, 2> target;\r\n            copy(input.begin(), input.end(), target.begin());\r\n            assert((target == array<int, 2>{{10, 20}}));\r\n        }\r\n        {\r\n            // GH-177: copy partial-overlapping ranges.\r\n            array<int, 4> input{10, 20, 30, 40};\r\n            copy(input.begin() + 1, input.end(), input.begin());\r\n            assert((input == array<int, 4>{{20, 30, 40, 40}}));\r\n        }\r\n    }\r\n} // namespace test_std_copy\r\n\r\nnamespace test_std_move {\r\n    void test() {\r\n        array<move_only, 4> target{{{42}, {43}, {44}, {45}}};\r\n        array<move_only, 2> input{{{1729}, {1730}}};\r\n        move(input.begin(), input.end(), target.begin() + 1);\r\n        assert((target == array<move_only, 4>{{{42}, {1729}, {1730}, {45}}}));\r\n    }\r\n} // namespace test_std_move\r\n\r\nnamespace test_std_copy_backward {\r\n    void test() {\r\n        array<int, 4> target{{42, 43, 44, 45}};\r\n        array<int, 2> input{{1729, 1730}};\r\n        copy_backward(input.begin(), input.end(), target.end());\r\n        assert((target == array<int, 4>{{42, 43, 1729, 1730}}));\r\n    }\r\n} // namespace test_std_copy_backward\r\n\r\nnamespace test_std_move_backward {\r\n    void test() {\r\n        array<move_only, 4> target{{{42}, {43}, {44}, {45}}};\r\n        array<move_only, 2> input{{{1729}, {1730}}};\r\n        move_backward(input.begin(), input.end(), target.end());\r\n        assert((target == array<move_only, 4>{{{42}, {43}, {1729}, {1730}}}));\r\n    }\r\n} // namespace test_std_move_backward\r\n\r\nint main() {\r\n    test_std_equal::test();\r\n    test_lexicographical_compare::test();\r\n    test_std_copy::test();\r\n    test_std_move::test();\r\n    test_std_copy_backward::test();\r\n    test_std_move_backward::test();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0180469_fill_family/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0180469_fill_family/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma warning(disable : 4242) // conversion from 'X' to 'Y', possible loss of data\r\n#pragma warning(disable : 4244) // conversion from 'X' to 'Y', possible loss of data (Yes, duplicated message.)\r\n// Note that this test *should* trigger 4242 and 4244 inside STL headers, because it\r\n// calls std::fill and std::uninitialized_fill with (small type*, small type*, big type)\r\n#pragma warning(disable : 4365) // conversion from 'X' to 'Y', signed/unsigned mismatch\r\n// Note that this test *should* trigger 4365 inside STL headers, because it\r\n// calls std::fill and std::uninitialized_fill with (signed*, signed*, unsigned)\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cmath>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <memory>\r\n#include <type_traits>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n// This thing is a workaround for C4309 \"truncation of constant value\"\r\ntemplate <typename T, typename U>\r\nremove_volatile_t<T> cast(U i) {\r\n    return static_cast<remove_volatile_t<T>>(i);\r\n}\r\n\r\n// Tests that `fillCall`(buffer, value, startIndex, endIndex) fills [startIndex, endIndex) with `value`\r\ntemplate <typename BuffT, typename CharT, typename Func>\r\nvoid test_case_fill(CharT value, Func fillCall) {\r\n    const BuffT debugValue = cast<BuffT>(0xCC);\r\n    BuffT buff[1024]       = {};\r\n    for (BuffT& c : buff) {\r\n        c = debugValue;\r\n    }\r\n\r\n    const size_t startIndex = 100;\r\n    const size_t endIndex   = 400;\r\n    fillCall(buff, value, startIndex, endIndex);\r\n\r\n    for (size_t idx = 0; idx < startIndex; ++idx) {\r\n        assert(buff[idx] == debugValue);\r\n    }\r\n\r\n    for (size_t idx = startIndex; idx < endIndex; ++idx) {\r\n        assert(buff[idx] == cast<BuffT>(value));\r\n    }\r\n\r\n    for (size_t idx = endIndex; idx < 1024; ++idx) {\r\n        assert(buff[idx] == debugValue);\r\n    }\r\n}\r\n\r\ntemplate <typename BuffT, typename CharT>\r\nvoid test_fill_volatile() {\r\n    const CharT testCases[] = {cast<CharT>(-100), cast<CharT>(-1), cast<CharT>(0), cast<CharT>(1), cast<CharT>(100)};\r\n\r\n    for (CharT testCase : testCases) {\r\n        test_case_fill<BuffT>(testCase,\r\n            [](BuffT* buff, CharT value, size_t start, size_t end) { fill(buff + start, buff + end, value); });\r\n\r\n        test_case_fill<BuffT>(testCase,\r\n            [](BuffT* buff, CharT value, size_t start, size_t end) { fill_n(buff + start, end - start, value); });\r\n    }\r\n}\r\n\r\ntemplate <typename BuffT, typename CharT>\r\nvoid test_fill() {\r\n    const CharT testCases[] = {cast<CharT>(-100), cast<CharT>(-1), cast<CharT>(0), cast<CharT>(1), cast<CharT>(100)};\r\n\r\n    for (CharT testCase : testCases) {\r\n        test_case_fill<BuffT>(testCase,\r\n            [](BuffT* buff, CharT value, size_t start, size_t end) { fill(buff + start, buff + end, value); });\r\n\r\n        test_case_fill<BuffT>(testCase,\r\n            [](BuffT* buff, CharT value, size_t start, size_t end) { fill_n(buff + start, end - start, value); });\r\n\r\n        test_case_fill<BuffT>(testCase, [](BuffT* buff, CharT value, size_t start, size_t end) {\r\n            uninitialized_fill(buff + start, buff + end, value);\r\n        });\r\n\r\n        test_case_fill<BuffT>(testCase, [](BuffT* buff, CharT value, size_t start, size_t end) {\r\n            uninitialized_fill_n(buff + start, end - start, value);\r\n        });\r\n    }\r\n}\r\n\r\nclass count_copies {\r\n    size_t* number_of_copies;\r\n\r\npublic:\r\n    explicit count_copies(size_t* c) : number_of_copies(c) {}\r\n    count_copies(const count_copies& other) : number_of_copies(other.number_of_copies) {\r\n        ++*number_of_copies;\r\n    }\r\n\r\n    count_copies& operator=(const count_copies&) = delete;\r\n};\r\n\r\n\r\n// Tests that `fillCall`(backingStorage*, n, /*instance of count_copies*/) is calling constructors\r\ntemplate <typename Func>\r\nvoid test_uninitialized_fill(Func fillCall) {\r\n    static_assert(sizeof(count_copies) == sizeof(size_t*), \"Bad count_copies size\");\r\n    size_t actualCopies = 0;\r\n    void* backingStorage[10];\r\n    fillCall(reinterpret_cast<count_copies*>(backingStorage), 10, count_copies(&actualCopies));\r\n    if (actualCopies != 10) {\r\n        printf(\"Expected 10 copies but got %zu\\n\", actualCopies);\r\n        abort();\r\n    }\r\n\r\n    for (void* storage : backingStorage) {\r\n        static_cast<count_copies*>(storage)->~count_copies();\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nvoid all_bits_zero_optimization_test_case(const T zero, const T nonzero) {\r\n    T arr[3];\r\n\r\n    fill(begin(arr), end(arr), zero);\r\n    for (const auto& elem : arr) {\r\n        assert(elem == T{});\r\n    }\r\n\r\n    fill(begin(arr), end(arr), nonzero);\r\n    for (const auto& elem : arr) {\r\n        assert(elem != T{});\r\n    }\r\n}\r\n\r\nint square(int x) {\r\n    return x * x;\r\n}\r\n\r\nvoid test_all_bits_zero_optimization() {\r\n    // Integral types (signed integer types, unsigned integer types, character types, bool):\r\n    all_bits_zero_optimization_test_case(int8_t{0}, int8_t{-1});\r\n    all_bits_zero_optimization_test_case(int16_t{0}, int16_t{-1});\r\n    all_bits_zero_optimization_test_case(int32_t{0}, int32_t{-1});\r\n    all_bits_zero_optimization_test_case(int64_t{0}, int64_t{-1});\r\n\r\n    all_bits_zero_optimization_test_case(uint8_t{0}, uint8_t{2});\r\n    all_bits_zero_optimization_test_case(uint16_t{0}, uint16_t{2});\r\n    all_bits_zero_optimization_test_case(uint32_t{0}, uint32_t{2});\r\n    all_bits_zero_optimization_test_case(uint64_t{0}, uint64_t{2});\r\n\r\n    all_bits_zero_optimization_test_case('\\0', 'x');\r\n    all_bits_zero_optimization_test_case(L'\\0', L'x');\r\n    all_bits_zero_optimization_test_case(u'\\0', u'x');\r\n    all_bits_zero_optimization_test_case(U'\\0', U'x');\r\n#ifdef __cpp_char8_t\r\n    all_bits_zero_optimization_test_case(u8'\\0', u8'x');\r\n#endif // __cpp_char8_t\r\n\r\n    all_bits_zero_optimization_test_case(false, true);\r\n\r\n    // Enumerations:\r\n    enum class Sm : uint8_t { Zero, One };\r\n    enum class Md : uint16_t { Zero, One };\r\n    enum class Lg : uint32_t { Zero, One };\r\n    enum class Xl : uint64_t { Zero, One };\r\n    all_bits_zero_optimization_test_case(Sm::Zero, Sm::One);\r\n    all_bits_zero_optimization_test_case(Md::Zero, Md::One);\r\n    all_bits_zero_optimization_test_case(Lg::Zero, Lg::One);\r\n    all_bits_zero_optimization_test_case(Xl::Zero, Xl::One);\r\n\r\n    // Pointers (both object pointers and function pointers):\r\n    const int taxicab{1729};\r\n    all_bits_zero_optimization_test_case(static_cast<const int*>(nullptr), &taxicab);\r\n    all_bits_zero_optimization_test_case(static_cast<int (*)(int)>(nullptr), &square);\r\n\r\n    // Floating-point:\r\n    all_bits_zero_optimization_test_case(0.0f, 1.0f);\r\n    all_bits_zero_optimization_test_case(0.0, 1.0);\r\n    all_bits_zero_optimization_test_case(0.0L, 1.0L);\r\n\r\n    // Floating-point negative zero:\r\n    {\r\n        float arr[] = {1.0f, 2.0f, 3.0f};\r\n        fill(begin(arr), end(arr), -0.0f);\r\n        for (const auto& elem : arr) {\r\n            assert(elem == 0.0f); // elem is positive or negative zero\r\n            assert(signbit(elem)); // elem is negative\r\n        }\r\n    }\r\n    {\r\n        double arr[] = {1.0, 2.0, 3.0};\r\n        fill(begin(arr), end(arr), -0.0);\r\n        for (const auto& elem : arr) {\r\n            assert(elem == 0.0); // elem is positive or negative zero\r\n            assert(signbit(elem)); // elem is negative\r\n        }\r\n    }\r\n    {\r\n        long double arr[] = {1.0L, 2.0L, 3.0L};\r\n        fill(begin(arr), end(arr), -0.0L);\r\n        for (const auto& elem : arr) {\r\n            assert(elem == 0.0L); // elem is positive or negative zero\r\n            assert(signbit(elem)); // elem is negative\r\n        }\r\n    }\r\n\r\n    // nullptr_t:\r\n    {\r\n        nullptr_t arr[3];\r\n        fill(begin(arr), end(arr), nullptr);\r\n        for (const auto& elem : arr) {\r\n            assert(elem == nullptr);\r\n        }\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_fill<char, char>();\r\n    test_fill<char, signed char>();\r\n    test_fill<char, unsigned char>();\r\n    test_fill<signed char, char>();\r\n    test_fill<signed char, signed char>();\r\n    test_fill<signed char, unsigned char>();\r\n    test_fill<unsigned char, char>();\r\n    test_fill<unsigned char, signed char>();\r\n    test_fill<unsigned char, unsigned char>();\r\n\r\n#ifdef __cpp_char8_t\r\n    test_fill<char8_t, char8_t>();\r\n    test_fill<char8_t, char>();\r\n    test_fill<char8_t, signed char>();\r\n    test_fill<char8_t, unsigned char>();\r\n    test_fill<char, char8_t>();\r\n    test_fill<signed char, char8_t>();\r\n    test_fill<unsigned char, char8_t>();\r\n#endif // __cpp_char8_t\r\n\r\n    test_fill<bool, bool>();\r\n\r\n#ifdef __cpp_lib_byte\r\n    test_fill<byte, byte>();\r\n#endif // __cpp_lib_byte\r\n\r\n    test_fill<int, int>();\r\n    test_fill<int, char>();\r\n    test_fill<char, int>();\r\n\r\n    test_fill_volatile<volatile char, char>(); // Test GH-1183\r\n#ifdef __cpp_lib_byte\r\n    test_fill_volatile<volatile byte, byte>(); // Test GH-1556\r\n#endif // __cpp_lib_byte\r\n\r\n    test_uninitialized_fill(\r\n        [](count_copies* buff, size_t n, const count_copies& src) { uninitialized_fill(buff, buff + n, src); });\r\n\r\n    test_uninitialized_fill(\r\n        [](count_copies* buff, size_t n, const count_copies& src) { uninitialized_fill_n(buff, n, src); });\r\n\r\n    test_all_bits_zero_optimization();\r\n\r\n    // Validate int is properly converted to bool\r\n    {\r\n        bool output[] = {false, true, false};\r\n        fill(output, output + 3, 5);\r\n        for (const bool& elem : output) {\r\n            assert(elem == true);\r\n        }\r\n    }\r\n    {\r\n        bool output[] = {false, true, false};\r\n        fill_n(output, 3, 5);\r\n        for (const bool& elem : output) {\r\n            assert(elem == true);\r\n        }\r\n    }\r\n    {\r\n        bool output[] = {false, true, false};\r\n        uninitialized_fill(output, output + 3, 5);\r\n        for (const bool& elem : output) {\r\n            assert(elem == true);\r\n        }\r\n    }\r\n    {\r\n        bool output[] = {false, true, false};\r\n        uninitialized_fill_n(output, 3, 5);\r\n        for (const bool& elem : output) {\r\n            assert(elem == true);\r\n        }\r\n    }\r\n\r\n    // Test (indirectly) _Uninitialized_fill_n with zero\r\n    {\r\n        vector<void*> vec(43, nullptr);\r\n        for (const auto& p : vec) {\r\n            assert(p == nullptr);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0191296_allocator_construct/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0191296_allocator_construct/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// This test is loosely derived from dev11_437519_container_requirements, except the specific condition tested for is\r\n// use of allocator::construct rather than constructing actual temporaries everywhere. Parts of\r\n// dev11_437519_container_requirements where regressions of this kind are unlikely and testing of them is very difficult\r\n// have been omitted.\r\n//\r\n// n3485 is the reference document for all language standard citations (unless otherwise noted).\r\n//\r\n// The primary difference vs. dev11_437519_container_requirements is that the value_type given to each of the containers\r\n// meets none of the type requirements related to construction, unless the construction goes through\r\n// allocator::construct.\r\n//\r\n// This is achieved by having the value_types' constructors all take struct alloc_key as their first argument, which\r\n// is supplied by the allocator::construct, but by none of the other direct interactions with the container.\r\n//\r\n\r\n#include <cstddef>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <iterator>\r\n#include <list>\r\n#include <map>\r\n#include <memory>\r\n#include <new>\r\n#include <set>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\n//\r\n//\r\n// GENERAL UTILITIES\r\n//\r\n//\r\n\r\nstruct alloc_key {};\r\n\r\nstruct key {};\r\n\r\ntemplate <typename T>\r\nstruct faux_predicate {\r\n    bool operator()(T const&) const {\r\n        return false;\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nstruct faux_compare {\r\n    bool operator()(T const&, T const&) const {\r\n        return false;\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nstruct default_constructible_compare {\r\n    default_constructible_compare()                                                = default;\r\n    default_constructible_compare(default_constructible_compare const&)            = default;\r\n    default_constructible_compare& operator=(default_constructible_compare const&) = delete;\r\n\r\n    bool operator()(T const&, T const&) const {\r\n        return false;\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nstruct copy_constructible_compare {\r\n    copy_constructible_compare() = delete;\r\n    copy_constructible_compare(key) {}\r\n    copy_constructible_compare(copy_constructible_compare const&)            = default;\r\n    copy_constructible_compare& operator=(copy_constructible_compare const&) = delete;\r\n\r\n    bool operator()(T const&, T const&) const {\r\n        return false;\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nstruct faux_hash {\r\n    std::size_t operator()(T const&) const {\r\n        return 0;\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nstruct default_constructible_hash {\r\n    default_constructible_hash()                                             = default;\r\n    default_constructible_hash(default_constructible_hash const&)            = default;\r\n    default_constructible_hash& operator=(default_constructible_hash const&) = delete;\r\n\r\n    bool operator()(T const&, T const&) const {\r\n        return false;\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nstruct copy_constructible_hash {\r\n    copy_constructible_hash() = delete;\r\n    copy_constructible_hash(key) {}\r\n    copy_constructible_hash(copy_constructible_hash const&)            = default;\r\n    copy_constructible_hash& operator=(copy_constructible_hash const&) = delete;\r\n\r\n    std::size_t operator()(T const&) const {\r\n        return 0;\r\n    }\r\n};\r\n\r\n//\r\n//\r\n// ALLOCATORS FOR TESTING ALLOCATOR CONCEPTS\r\n//\r\n//\r\n\r\ntemplate <typename T, bool POCCA = true, bool POCMA = true, bool POCS = true>\r\nstruct construct_applying_allocator {\r\n    using value_type = T;\r\n\r\n    template <typename Other>\r\n    struct rebind {\r\n        using other = construct_applying_allocator<Other, POCCA, POCMA, POCS>;\r\n    };\r\n\r\n    construct_applying_allocator()                                    = default;\r\n    construct_applying_allocator(const construct_applying_allocator&) = default;\r\n    template <typename Other>\r\n    construct_applying_allocator(const construct_applying_allocator<Other, POCCA, POCMA, POCS>&) {}\r\n\r\n    construct_applying_allocator& operator=(const construct_applying_allocator&) = default;\r\n\r\n    using propagate_on_container_copy_assignment = std::bool_constant<POCCA>;\r\n    using propagate_on_container_move_assignment = std::bool_constant<POCMA>;\r\n    using propagate_on_container_swap            = std::bool_constant<POCS>;\r\n    using is_always_equal                        = std::false_type;\r\n\r\n    template <typename Objty, typename... Types>\r\n    void construct(Objty* const ptr, Types&&... args) const {\r\n        ::new (static_cast<void*>(ptr)) Objty(alloc_key{}, std::forward<Types>(args)...);\r\n    }\r\n\r\n    template <typename Ty1, typename Ty2, typename... Types>\r\n    void construct(std::pair<Ty1, Ty2>* const ptr, Types&&... args) const {\r\n        ConstructPair(ptr, std::forward<Types>(args)...);\r\n    }\r\n\r\n    template <typename Ty1, typename Ty2>\r\n    static void ConstructPair(std::pair<Ty1, Ty2>* const ptr) {\r\n        ConstructPair(ptr, std::piecewise_construct, std::tuple<>{}, std::tuple<>{});\r\n    }\r\n\r\n    template <typename Ty1, typename Ty2, typename Arg1, typename Arg2>\r\n    static void ConstructPair(std::pair<Ty1, Ty2>* const ptr, Arg1&& arg1, Arg2&& arg2) {\r\n        ConstructPair(ptr, std::piecewise_construct, std::forward_as_tuple(std::forward<Arg1>(arg1)),\r\n            std::forward_as_tuple(std::forward<Arg2>(arg2)));\r\n    }\r\n\r\n    template <typename Ty1, typename Ty2, typename Arg1, typename Arg2>\r\n    static void ConstructPair(std::pair<Ty1, Ty2>* const ptr, const std::pair<Arg1, Arg2>& src) {\r\n        ConstructPair(\r\n            ptr, std::piecewise_construct, std::forward_as_tuple(src.first), std::forward_as_tuple(src.second));\r\n    }\r\n\r\n    template <typename Ty1, typename Ty2, typename Arg1, typename Arg2>\r\n    static void ConstructPair(std::pair<Ty1, Ty2>* const ptr, std::pair<Arg1, Arg2>&& src) {\r\n        ConstructPair(ptr, std::piecewise_construct, std::forward_as_tuple(std::forward<Arg1>(src.first)),\r\n            std::forward_as_tuple(std::forward<Arg2>(src.second)));\r\n    }\r\n\r\n    template <typename Ty1, typename Ty2, class... Types1, class... Types2>\r\n    static void ConstructPair(std::pair<Ty1, Ty2>* const ptr, std::piecewise_construct_t, std::tuple<Types1...> tup1,\r\n        std::tuple<Types2...> tup2) {\r\n        ::new (ptr) std::pair<Ty1, Ty2>(std::piecewise_construct,\r\n            std::tuple_cat(std::tuple<alloc_key>{}, std::tuple<Types1&&...>(std::move(tup1))),\r\n            std::tuple_cat(std::tuple<alloc_key>{}, std::tuple<Types2&&...>(std::move(tup2))));\r\n    }\r\n\r\n    T* allocate(const size_t n) {\r\n        return std::allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* const p, const size_t n) {\r\n        std::allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <typename Other>\r\n    bool operator==(const construct_applying_allocator<Other, POCCA, POCMA, POCS>&) const noexcept {\r\n        return true;\r\n    }\r\n\r\n    template <typename Other>\r\n    bool operator!=(const construct_applying_allocator<Other, POCCA, POCMA, POCS>&) const noexcept {\r\n        return false;\r\n    }\r\n};\r\n\r\n//\r\n//\r\n// CONCEPT TEST TYPES\r\n//\r\n//\r\n\r\n// These are test types that provide limited functionality and with which we can instantiate the\r\n// Standard Library containers.  The types that only model a single concept have their full name\r\n// spelled out; types that model several concepts are abbreviated (e.g. DefaultConstructible +\r\n// MoveInsertable is abbreviated as dc_mi).\r\n\r\nstruct emplace_argument {\r\n    emplace_argument() = default;\r\n    emplace_argument(key) {}\r\n};\r\n\r\n// clang-format off: make macros readable\r\n\r\n#define DEFINE_TYPE(name, def_ctor, copy_ctor, move_ctor, emp_ctor, swappable, copy_assign, move_assign, emp_assign) \\\r\n    class name {                                                                                                     \\\r\n    public:              name(key) { }                                                                               \\\r\n    public:              ~name() { }                                                                                 \\\r\n    private: def_ctor    name(alloc_key) { }                                                                         \\\r\n    private: copy_ctor   name(alloc_key, name const&) { }                                                            \\\r\n    private: move_ctor   name(alloc_key, name&&) { }                                                                 \\\r\n    private: emp_ctor    name(alloc_key, emplace_argument&&) { }                                                     \\\r\n    private: emp_ctor    name(alloc_key, emplace_argument&&, emplace_argument&&) { }                                 \\\r\n    private: emp_ctor    name(alloc_key, emplace_argument&&, emplace_argument&&, emplace_argument&&) { }             \\\r\n    private: swappable   friend void swap(name&, name&) {}                                                           \\\r\n    private: copy_assign name& operator=(name const&) { return *this; }                                              \\\r\n    private: move_assign name& operator=(name&&) { return *this; }                                                   \\\r\n    private: emp_assign  name& operator=(emplace_argument&&) { return *this; }                                       \\\r\n    private:             name() {}                                                                                   \\\r\n    private:             name(const name&) {}                                                                        \\\r\n    }\r\n\r\n#define YES public:\r\n\r\n//                                 default   copy   move   emplace                copy     move    emplace\r\n//                                  ctor     ctor   ctor    ctor     swappable   assign   assign   assign\r\nDEFINE_TYPE(erasable             ,         ,      ,      ,         ,           ,        ,        ,             );\r\nDEFINE_TYPE(default_constructible, YES     ,      ,      ,         ,           ,        ,        ,             );\r\nDEFINE_TYPE(copy_insertable      ,         , YES  , YES  ,         ,           ,        ,        ,             );\r\nDEFINE_TYPE(move_insertable      ,         ,      , YES  ,         ,           ,        ,        ,             );\r\nDEFINE_TYPE(emplace_constructible,         ,      ,      , YES     ,           ,        ,        ,             );\r\nDEFINE_TYPE(copy_assignable      ,         ,      ,      ,         , YES       , YES    , YES    ,             );\r\nDEFINE_TYPE(move_assignable      ,         ,      ,      ,         , YES       ,        , YES    ,             );\r\nDEFINE_TYPE(equality_comparable  ,         ,      ,      ,         ,           ,        ,        ,             );\r\nDEFINE_TYPE(less_comparable      ,         ,      ,      ,         ,           ,        ,        ,             );\r\nDEFINE_TYPE(ca_ci                ,         , YES  , YES  ,         , YES       , YES    , YES    ,             );\r\nDEFINE_TYPE(ci_ma                ,         , YES  , YES  ,         , YES       ,        , YES    ,             );\r\nDEFINE_TYPE(dc_mi                , YES     ,      , YES  ,         ,           ,        ,        ,             );\r\nDEFINE_TYPE(ec_ma_mi             ,         ,      , YES  , YES     , YES       ,        , YES    ,             );\r\nDEFINE_TYPE(ec_mi                ,         ,      , YES  , YES     ,           ,        ,        ,             );\r\nDEFINE_TYPE(ma_mi                ,         ,      , YES  ,         , YES       ,        , YES    ,             );\r\nDEFINE_TYPE(ec_ea                ,         ,      ,      , YES     ,           ,        ,        , YES         );\r\nDEFINE_TYPE(ec_ea_mi             ,         ,      , YES  , YES     ,           ,        ,        , YES         );\r\n\r\n#undef YES\r\n\r\n// clang-format on\r\n\r\nbool operator==(equality_comparable const&, equality_comparable const&) {\r\n    return true;\r\n}\r\nbool operator<(less_comparable const&, less_comparable const&) {\r\n    return false;\r\n}\r\n\r\n\r\n//\r\n//\r\n// CONTAINER TRAITS\r\n//\r\n//\r\n\r\nenum container_tag {\r\n    tag_deque        = (1 << 0),\r\n    tag_forward_list = (1 << 1),\r\n    tag_list         = (1 << 2),\r\n    tag_vector       = (1 << 3),\r\n\r\n    tag_map      = (1 << 4),\r\n    tag_multimap = (1 << 5),\r\n    tag_set      = (1 << 6),\r\n    tag_multiset = (1 << 7),\r\n\r\n    tag_unordered_map      = (1 << 8),\r\n    tag_unordered_multimap = (1 << 9),\r\n    tag_unordered_set      = (1 << 10),\r\n    tag_unordered_multiset = (1 << 11)\r\n};\r\n\r\nenum classification {\r\n    c_is_reversible            = (1 << 0),\r\n    c_is_optional              = (1 << 1),\r\n    c_is_sequence              = (1 << 2),\r\n    c_is_ordered_associative   = (1 << 3),\r\n    c_is_unordered_associative = (1 << 4),\r\n    c_is_unique_associative    = (1 << 5),\r\n\r\n    c_is_ordinary_sequence = (c_is_reversible | c_is_optional | c_is_sequence),\r\n    c_is_ordinary_unique_ordered_associative =\r\n        (c_is_reversible | c_is_optional | c_is_ordered_associative | c_is_unique_associative),\r\n    c_is_ordinary_nonunique_ordered_associative   = (c_is_reversible | c_is_optional | c_is_ordered_associative),\r\n    c_is_ordinary_unique_unordered_associative    = (c_is_unordered_associative | c_is_unique_associative),\r\n    c_is_ordinary_nonunique_unordered_associative = (c_is_unordered_associative),\r\n    c_is_forward_list                             = (c_is_optional | c_is_sequence)\r\n};\r\n\r\nstruct identity_bind_value {\r\n    template <typename V>\r\n    struct bind_value {\r\n        typedef V type;\r\n    };\r\n\r\n    typedef emplace_argument emplace_argument_type;\r\n\r\n    template <typename V>\r\n    static V construct_value() {\r\n        return {key()};\r\n    }\r\n};\r\n\r\nstruct map_associative_bind_value {\r\n    template <typename V>\r\n    struct bind_value {\r\n        typedef std::pair<V const, V> type;\r\n    };\r\n\r\n    typedef std::pair<emplace_argument, emplace_argument> emplace_argument_type;\r\n\r\n    template <typename V>\r\n    static std::pair<const V, V> construct_value() {\r\n        return {std::piecewise_construct, std::tuple<key>{}, std::tuple<key>{}};\r\n    }\r\n};\r\n\r\ntemplate <template <typename, typename> class C>\r\nstruct sequence_bind_container : identity_bind_value {\r\n    template <typename V, typename A = construct_applying_allocator<V>>\r\n    struct bind_container {\r\n        typedef C<V, A> type;\r\n    };\r\n};\r\n\r\ntemplate <template <typename, typename, typename, typename> class C>\r\nstruct ordered_map_associative_bind_container : map_associative_bind_value {\r\n    template <typename V, typename A = construct_applying_allocator<V>, typename P = faux_compare<V>>\r\n    struct bind_container {\r\n        typedef typename bind_value<V>::type value_type;\r\n        typedef typename std::allocator_traits<A>::template rebind_alloc<value_type> alloc_type;\r\n\r\n        typedef C<V, V, P, alloc_type> type;\r\n    };\r\n};\r\n\r\ntemplate <template <typename, typename, typename> class C>\r\nstruct ordered_set_associative_bind_container : identity_bind_value {\r\n    template <typename V, typename A = construct_applying_allocator<V>, typename P = faux_compare<V>>\r\n    struct bind_container {\r\n        typedef C<V, P, A> type;\r\n    };\r\n};\r\n\r\ntemplate <template <typename, typename, typename, typename, typename> class C>\r\nstruct unordered_map_associative_bind_container : map_associative_bind_value {\r\n    template <typename V, typename A = construct_applying_allocator<V>, typename H = faux_hash<V>,\r\n        typename P = faux_compare<V>>\r\n    struct bind_container {\r\n        typedef typename bind_value<V>::type value_type;\r\n        typedef typename std::allocator_traits<A>::template rebind_alloc<value_type> alloc_type;\r\n\r\n        typedef C<V, V, H, P, alloc_type> type;\r\n    };\r\n};\r\n\r\ntemplate <template <typename, typename, typename, typename> class C>\r\nstruct unordered_set_associative_bind_container : identity_bind_value {\r\n    template <typename V, typename A = construct_applying_allocator<V>, typename H = faux_hash<V>,\r\n        typename P = faux_compare<V>>\r\n    struct bind_container {\r\n        typedef C<V, H, P, A> type;\r\n    };\r\n};\r\n\r\ntemplate <container_tag Tag, classification Features>\r\nstruct container_traits_base {\r\n    static container_tag const tag       = Tag;\r\n    static classification const features = Features;\r\n};\r\n\r\ntemplate <container_tag Tag, classification Features, template <typename, typename> class C>\r\nstruct sequence_traits_base : container_traits_base<Tag, Features>, sequence_bind_container<C> {};\r\n\r\ntemplate <container_tag Tag, classification Features, template <typename, typename, typename, typename> class C>\r\nstruct ordered_map_associative_container_base : container_traits_base<Tag, Features>,\r\n                                                ordered_map_associative_bind_container<C> {};\r\n\r\ntemplate <container_tag Tag, classification Features, template <typename, typename, typename> class C>\r\nstruct ordered_set_associative_container_base : container_traits_base<Tag, Features>,\r\n                                                ordered_set_associative_bind_container<C> {};\r\n\r\ntemplate <container_tag Tag, classification Features,\r\n    template <typename, typename, typename, typename, typename> class C>\r\nstruct unordered_map_associative_container_base : container_traits_base<Tag, Features>,\r\n                                                  unordered_map_associative_bind_container<C> {};\r\n\r\ntemplate <container_tag Tag, classification Features, template <typename, typename, typename, typename> class C>\r\nstruct unordered_set_associative_container_base : container_traits_base<Tag, Features>,\r\n                                                  unordered_set_associative_bind_container<C> {};\r\n\r\ntemplate <container_tag>\r\nstruct container_traits;\r\n\r\ntemplate <>\r\nstruct container_traits<tag_deque> : sequence_traits_base<tag_deque, c_is_ordinary_sequence, std::deque> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_forward_list>\r\n    : sequence_traits_base<tag_forward_list, c_is_forward_list, std::forward_list> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_list> : sequence_traits_base<tag_list, c_is_ordinary_sequence, std::list> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_vector> : sequence_traits_base<tag_vector, c_is_ordinary_sequence, std::vector> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_map>\r\n    : ordered_map_associative_container_base<tag_map, c_is_ordinary_unique_ordered_associative, std::map> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_multimap>\r\n    : ordered_map_associative_container_base<tag_multimap, c_is_ordinary_nonunique_ordered_associative, std::multimap> {\r\n};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_multiset>\r\n    : ordered_set_associative_container_base<tag_multiset, c_is_ordinary_nonunique_ordered_associative, std::multiset> {\r\n};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_set>\r\n    : ordered_set_associative_container_base<tag_set, c_is_ordinary_unique_ordered_associative, std::set> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_unordered_map> : unordered_map_associative_container_base<tag_unordered_map,\r\n                                                 c_is_ordinary_unique_unordered_associative, std::unordered_map> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_unordered_multimap>\r\n    : unordered_map_associative_container_base<tag_unordered_multimap, c_is_ordinary_nonunique_unordered_associative,\r\n          std::unordered_multimap> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_unordered_multiset>\r\n    : unordered_set_associative_container_base<tag_unordered_multiset, c_is_ordinary_nonunique_unordered_associative,\r\n          std::unordered_multiset> {};\r\n\r\ntemplate <>\r\nstruct container_traits<tag_unordered_set> : unordered_set_associative_container_base<tag_unordered_set,\r\n                                                 c_is_ordinary_unique_unordered_associative, std::unordered_set> {};\r\n\r\n\r\n//\r\n//\r\n// TEST GENERATORS\r\n//\r\n//\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wunused-local-typedef\"\r\n#endif // __clang__\r\n\r\n#define GENERATE_CONTAINER_TYPEDEFS(opt_typename, name)                           \\\r\n    typedef opt_typename Traits::template bind_container<name>::type c_of_##name; \\\r\n    typedef opt_typename Traits::template bind_value<name>::type v_of_##name;\r\n\r\n#define GENERATE_ALL_CONTAINER_TYPEDEFS(unused, opt_typename)        \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, erasable)              \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, default_constructible) \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, copy_insertable)       \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, move_insertable)       \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, emplace_constructible) \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, copy_assignable)       \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, move_assignable)       \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, equality_comparable)   \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, less_comparable)       \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, ca_ci)                 \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, ci_ma)                 \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, dc_mi)                 \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, ec_ma_mi)              \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, ec_mi)                 \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, ma_mi)                 \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, ec_ea)                 \\\r\n    GENERATE_CONTAINER_TYPEDEFS(opt_typename, ec_ea_mi)\r\n\r\n#define DEFINE_TEST_IMPL(name, opt_typename, template_parameters, specialization, preface_text, ...) \\\r\n    template <template_parameters>                                                                   \\\r\n    struct name specialization {                                                                     \\\r\n        preface_text;                                                                                \\\r\n        typedef container_traits<Tag> Traits;                                                        \\\r\n                                                                                                     \\\r\n        name() {                                                                                     \\\r\n            GENERATE_ALL_CONTAINER_TYPEDEFS(unused, opt_typename);                                   \\\r\n            __VA_ARGS__                                                                              \\\r\n        }                                                                                            \\\r\n    }\r\n\r\n#define DEFINE_TEST(name, ...) \\\r\n    DEFINE_TEST_IMPL(name, typename, container_tag Tag, /* empty */, /* empty */, __VA_ARGS__)\r\n\r\n#define DEFINE_TEST_SPECIALIZATION(name, my_tag, ...) \\\r\n    DEFINE_TEST_IMPL(name, /* empty */, /* empty */, <my_tag>, static container_tag const Tag = my_tag;, __VA_ARGS__)\r\n\r\n// These macros prevent the test named 'name' from being run for the container specified by the\r\n// 'specialized_tag'.  The NOT_SUPPORTED_SPECIALIZATION macro should be used for tests that do not\r\n// pass because the container is specified as not supporting the operation being tested.\r\n\r\n#define NOT_SUPPORTED_SPECIALIZATION(name, specialized_tag) DEFINE_TEST_SPECIALIZATION(name, specialized_tag, {})\r\n\r\n\r\n//\r\n//\r\n// CONTAINER REQUIREMENTS (23.2.1[container.requirements.general]/Table 96)\r\n//\r\n//\r\n\r\n\r\nDEFINE_TEST(test_container_default_constructor, {\r\n    // X u; and X()\r\n    // [No Requires clause]\r\n    c_of_erasable a;\r\n    (c_of_erasable());\r\n});\r\n\r\n\r\nDEFINE_TEST(test_container_copy_constructor, {\r\n    // X(a), X u(a), and X u = a\r\n    // Requires:  T is CopyInsertable into X\r\n    c_of_copy_insertable a;\r\n    (c_of_copy_insertable(a));\r\n    c_of_copy_insertable u0(a);\r\n    c_of_copy_insertable u1 = a;\r\n});\r\n\r\n\r\nDEFINE_TEST(test_container_move_constructor, {\r\n    // X u(rv) and X u = rv\r\n    // [No Requires clause]\r\n    c_of_erasable rv;\r\n    c_of_erasable u0(std::move(rv));\r\n    c_of_erasable u1 = std::move(u0);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_container_swap, {\r\n    // a.swap(b) and swap(a, b)\r\n    // [No Requires clause]\r\n    c_of_erasable a;\r\n    c_of_erasable b;\r\n    a.swap(b);\r\n    swap(a, b);\r\n});\r\n\r\n\r\ntemplate <container_tag Tag>\r\nvoid check_all_container_requirements() {\r\n    test_container_default_constructor<Tag>();\r\n    test_container_copy_constructor<Tag>();\r\n    test_container_move_constructor<Tag>();\r\n    test_container_swap<Tag>();\r\n}\r\n\r\n//\r\n//\r\n// ALLOCATOR-AWARE CONTAINER REQUIREMENTS (23.2.1[container.requirements.general]/Table 99)\r\n//\r\n//\r\n\r\nDEFINE_TEST(test_allocator_aware_allocator_constructor_default, {\r\n    // X(m) and X u(m)\r\n    // [No Requires clause]\r\n    typename c_of_erasable::allocator_type m;\r\n    (c_of_erasable(m));\r\n    c_of_erasable u(m);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_allocator_aware_allocator_constructor_copy, {\r\n    // X(t, m) and X u(t, m)\r\n    // Requires:  T is CopyInsertable into X\r\n    typename c_of_copy_insertable::allocator_type m;\r\n    c_of_copy_insertable t;\r\n    (c_of_copy_insertable(t, m));\r\n    c_of_copy_insertable u(t, m);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_allocator_aware_allocator_constructor_move, {\r\n    // X(rv, m) and X u(rv, m)\r\n    // Requires:  T is MoveInsertable\r\n    typename c_of_move_insertable::allocator_type m;\r\n    (c_of_move_insertable(c_of_move_insertable(), m));\r\n    c_of_move_insertable u(c_of_move_insertable(), m);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_allocator_aware_assignment_from_rvalue_non_pocma, {\r\n    typedef\r\n        typename Traits::template bind_container<ma_mi, construct_applying_allocator<ma_mi, true, false, true>>::type\r\n            container_type;\r\n\r\n    // a = rv\r\n    // Requires:  If allocator_traits<allocator_type>::propagate_on_container_move_assignment::value\r\n    // is false, T is MoveInsertable into X and MoveAssignable.\r\n    {\r\n        container_type a;\r\n        a = container_type();\r\n    }\r\n});\r\n\r\n\r\nDEFINE_TEST(test_allocator_aware_assignment_from_rvalue_pocma, {\r\n    typedef typename Traits::template bind_container<erasable,\r\n        construct_applying_allocator<erasable, false, true, false>>::type container_type;\r\n\r\n    // a = rv\r\n    // [No Requires clause]\r\n    //\r\n    // (If the allocator _does_ propagate on move assignment, there are no additional requirements,\r\n    // so T needs only be Erasable.)\r\n    {\r\n        container_type a;\r\n        a = container_type();\r\n    }\r\n});\r\n\r\n\r\nDEFINE_TEST(test_allocator_aware_assignment_from_lvalue, {\r\n    // a = t\r\n    // Requires:  T is CopyInsertable into X and CopyAssignable\r\n    c_of_ca_ci a;\r\n    c_of_ca_ci const b;\r\n    a = b;\r\n});\r\n\r\n\r\ntemplate <container_tag Tag>\r\nvoid check_all_allocator_aware_requirements() {\r\n    test_allocator_aware_allocator_constructor_default<Tag>();\r\n    test_allocator_aware_allocator_constructor_copy<Tag>();\r\n    test_allocator_aware_allocator_constructor_move<Tag>();\r\n    test_allocator_aware_assignment_from_lvalue<Tag>();\r\n    test_allocator_aware_assignment_from_rvalue_non_pocma<Tag>();\r\n    test_allocator_aware_assignment_from_rvalue_pocma<Tag>();\r\n}\r\n\r\n\r\n//\r\n//\r\n// SEQUENCE CONTAINER REQUIREMENTS (23.2.3[sequence.reqmts]/Table 100)\r\n//\r\n//\r\n\r\nDEFINE_TEST(test_sequence_count_constructor_copy, {\r\n    // X(n, t) and X a(n, t)\r\n    // Requires:  T shall be CopyInsertable into X\r\n    c_of_copy_insertable(1, copy_insertable(key()));\r\n    c_of_copy_insertable a(1, copy_insertable(key()));\r\n});\r\n\r\n\r\nDEFINE_TEST(test_sequence_range_constructor, {\r\n    // X(i, j) and X a(i, j)\r\n    // Requires:  T shall be EmplaceConstructible into X from *i\r\n    std::move_iterator<emplace_argument*> const i;\r\n    c_of_emplace_constructible(i, i);\r\n    c_of_emplace_constructible a(i, i);\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_range_constructor, tag_vector,\r\n{\r\n    // X(i, j) and X a(i, j)\r\n    // Requires:  T shall be EmplaceConstructible into X from *i.  For vector, if the iterator does\r\n    // not meet the forward iterator requirements, T shall also be MoveInsertable into X.\r\n    {\r\n         std::move_iterator<emplace_argument*> i;\r\n         c_of_emplace_constructible(i, i);\r\n         c_of_emplace_constructible a(i, i);\r\n}\r\n{\r\n    std::move_iterator<emplace_argument*> i;\r\n    c_of_ec_mi(i, i);\r\n    c_of_ec_mi a(i, i);\r\n}\r\n});\r\n\r\nDEFINE_TEST(test_sequence_emplace, {\r\n    // a.emplace(p, args)\r\n    // Requires: T is EmplaceConstructible into X from args.\r\n    c_of_emplace_constructible a;\r\n    a.emplace(a.begin(), emplace_argument());\r\n    a.emplace(a.begin(), emplace_argument(), emplace_argument());\r\n    a.emplace(a.begin(), emplace_argument(), emplace_argument(), emplace_argument());\r\n});\r\n\r\nDEFINE_TEST(test_sequence_emplace_deque_vector, {\r\n    // a.emplace(p, args)\r\n    // Requires: T is EmplaceConstructible into X from args. For vector and deque, T is also\r\n    // MoveInsertable into X and MoveAssignable.\r\n    c_of_ec_ma_mi a;\r\n    a.emplace(a.begin(), emplace_argument());\r\n    a.emplace(a.begin(), emplace_argument(), emplace_argument());\r\n    a.emplace(a.begin(), emplace_argument(), emplace_argument(), emplace_argument());\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_emplace, tag_deque, { test_sequence_emplace_deque_vector<Tag>(); });\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_emplace, tag_vector, { test_sequence_emplace_deque_vector<Tag>(); });\r\nNOT_SUPPORTED_SPECIALIZATION(test_sequence_emplace, tag_forward_list);\r\n\r\n\r\nDEFINE_TEST(test_sequence_copy_insert_one, {\r\n    // a.insert(p, t)\r\n    // Requires:  T shall be CopyInsertable into X.\r\n    c_of_copy_insertable a;\r\n    copy_insertable const t((key()));\r\n    a.insert(a.begin(), t);\r\n});\r\n\r\nDEFINE_TEST(test_sequence_copy_insert_one_deque_vector, {\r\n    // a.insert(p, t)\r\n    // Requires:  T shall be CopyInsertable into X.  For vector and deque, T shall also be\r\n    // MoveAssignable.\r\n    c_of_ca_ci a;\r\n    ca_ci const t((key()));\r\n    a.insert(a.begin(), t);\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_copy_insert_one, tag_deque, { test_sequence_emplace_deque_vector<Tag>(); });\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_copy_insert_one, tag_vector, { test_sequence_emplace_deque_vector<Tag>(); });\r\nNOT_SUPPORTED_SPECIALIZATION(test_sequence_copy_insert_one, tag_forward_list);\r\n\r\n\r\nDEFINE_TEST(test_sequence_move_insert_one, {\r\n    // a.insert(p, rv)\r\n    // Requires:  T shall be MoveInsertable into X.\r\n    c_of_move_insertable a;\r\n    a.insert(a.begin(), move_insertable(key()));\r\n\r\n    // Return type:  iterator\r\n    static_assert(\r\n        std::is_same_v<decltype(a.insert(a.begin(), move_insertable(key()))), typename c_of_move_insertable::iterator>,\r\n        \"\");\r\n});\r\n\r\nDEFINE_TEST(test_sequence_move_insert_one_deque_vector, {\r\n    // a.insert(p, rv)\r\n    // Requires:  T shall be MoveInsertable into X.  For vector and deque, T shall also be\r\n    // MoveAssignable.\r\n    c_of_ma_mi a;\r\n    a.insert(a.begin(), ma_mi(key()));\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(\r\n    test_sequence_move_insert_one, tag_deque, { test_sequence_move_insert_one_deque_vector<Tag>(); });\r\nDEFINE_TEST_SPECIALIZATION(\r\n    test_sequence_move_insert_one, tag_vector, { test_sequence_move_insert_one_deque_vector<Tag>(); });\r\nNOT_SUPPORTED_SPECIALIZATION(test_sequence_move_insert_one, tag_forward_list);\r\n\r\n\r\nDEFINE_TEST(test_sequence_copy_insert_n, {\r\n    // a.insert(p, n, t)\r\n    // Requires:  T shall be CopyInsertable into X and CopyAssignable.\r\n    c_of_ca_ci a;\r\n    ca_ci const t((key()));\r\n    a.insert(a.begin(), 1, t);\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_sequence_copy_insert_n, tag_forward_list);\r\n\r\n\r\nDEFINE_TEST(test_sequence_range_insert, {\r\n    // a.insert(p, i, j)\r\n    // Requires:  T shall be EmplaceConstructible into X from *i.\r\n    c_of_emplace_constructible a;\r\n    std::move_iterator<emplace_argument*> const i;\r\n    a.insert(a.begin(), i, i);\r\n});\r\n\r\nDEFINE_TEST(test_sequence_range_insert_deque_vector,\r\n{\r\n    // a.insert(p, i, j)\r\n    // Requires:  T shall be EmplaceConstructible into X from *i.  For vector, if the iterator does\r\n    // not meet the forward iterator requirements, T shall also be MoveInsertable into X and\r\n    // MoveAssignable.\r\n\r\n    // SPEC:  There is no way to meet the specification here.  Inserting elements into the middle of\r\n    // a vector may require move construction and move assignment of elements after the insertion\r\n    // point.  The same is true for deque.  The specification should be altered to read as follows:\r\n    //\r\n    //     For deque and vector, T shall also be MoveInsertable into X and MoveAssignable.\r\n    //\r\n    // The test here verifies this behavior.\r\n    {\r\n        c_of_ec_ma_mi a;\r\n        std::move_iterator<emplace_argument*> const i;\r\n        a.insert(a.begin(), i, i);\r\n}\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_range_insert, tag_deque, { test_sequence_range_insert_deque_vector<Tag>(); });\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_range_insert, tag_vector, { test_sequence_range_insert_deque_vector<Tag>(); });\r\nNOT_SUPPORTED_SPECIALIZATION(test_sequence_range_insert, tag_forward_list);\r\n\r\nDEFINE_TEST(test_sequence_range_assign, {\r\n    // [N4606]\r\n    // a.assign(i, j)\r\n    // Requires:  T shall be EmplaceConstructible into X from *i and assignable from *i.\r\n\r\n    c_of_ec_ea a;\r\n    std::move_iterator<emplace_argument*> const i;\r\n    a.assign(i, i);\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(test_sequence_range_assign, tag_vector,\r\n{\r\n    // [N4606]\r\n    // a.assign(i, j)\r\n    // Requires:  T shall be EmplaceConstructible into X from *i and assignable from *i.\r\n    // For vector, if the iterator does not meet the forward iterator requirements (24.2.5),\r\n    // T shall also be MoveInsertable into X.\r\n\r\n    {\r\n        c_of_ec_ea a;\r\n        std::move_iterator<emplace_argument*> i;\r\n        a.assign(i, i);\r\n}\r\n\r\n{\r\n    c_of_ec_ea_mi a;\r\n    std::move_iterator<emplace_argument*> i;\r\n    a.assign(i, i);\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(test_sequence_assign_n, {\r\n    // a.assign(n, t)\r\n    // Requires:  T shall be CopyInsertable into X and CopyAssignable.\r\n    c_of_ca_ci a;\r\n    ca_ci const t((key()));\r\n    a.assign(1, t);\r\n});\r\n\r\n\r\ntemplate <container_tag Tag, bool = (container_traits<Tag>::features & c_is_sequence) != 0>\r\nstruct check_all_sequence_requirements {\r\n    check_all_sequence_requirements() {\r\n        test_sequence_count_constructor_copy<Tag>();\r\n        test_sequence_range_constructor<Tag>();\r\n\r\n        test_sequence_emplace<Tag>();\r\n        test_sequence_copy_insert_one<Tag>();\r\n        test_sequence_move_insert_one<Tag>();\r\n        test_sequence_copy_insert_n<Tag>();\r\n        test_sequence_range_insert<Tag>();\r\n\r\n        test_sequence_range_assign<Tag>();\r\n        test_sequence_assign_n<Tag>();\r\n    }\r\n};\r\n\r\ntemplate <container_tag Tag>\r\nstruct check_all_sequence_requirements<Tag, false> {};\r\n\r\n\r\n//\r\n//\r\n// OPTIONAL SEQUENCE CONTAINER REQUIREMENTS (23.2.3[sequence.reqmts]/Table 101)\r\n//\r\n//\r\nDEFINE_TEST(test_optional_sequence_emplace_front, {\r\n    // a.emplace_front(args)\r\n    // Requires:  T shall be EmplaceConstructible into X from args\r\n    c_of_emplace_constructible a;\r\n    a.emplace_front(emplace_argument());\r\n    a.emplace_front(emplace_argument(), emplace_argument());\r\n    a.emplace_front(emplace_argument(), emplace_argument(), emplace_argument());\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_optional_sequence_emplace_front, tag_vector);\r\n\r\n\r\nDEFINE_TEST(test_optional_sequence_emplace_back, {\r\n    // a.emplace_back(args)\r\n    // Requires:  T shall be EmplaceConstructible into X from args\r\n    c_of_emplace_constructible a;\r\n    a.emplace_back(emplace_argument());\r\n    a.emplace_back(emplace_argument(), emplace_argument());\r\n    a.emplace_back(emplace_argument(), emplace_argument(), emplace_argument());\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(test_optional_sequence_emplace_back, tag_vector, {\r\n    // a.emplace_back(args)\r\n    // Requires:  T shall be EmplaceConstructible into X from args.  For vector, T shall be\r\n    // MoveInsertable into X.\r\n    c_of_ec_mi a;\r\n    a.emplace_back(emplace_argument());\r\n    a.emplace_back(emplace_argument(), emplace_argument());\r\n    a.emplace_back(emplace_argument(), emplace_argument(), emplace_argument());\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_optional_sequence_emplace_back, tag_forward_list);\r\n\r\n\r\nDEFINE_TEST(test_optional_sequence_push_front,\r\n{\r\n    {\r\n        // a.push_front(t)\r\n        // Requires:  T shall be CopyInsertable into X\r\n        c_of_copy_insertable a;\r\n        copy_insertable const t((key()));\r\n        a.push_front(t);\r\n}\r\n\r\n{\r\n    // a.push_front(rv)\r\n    // Requires:  T shall be MoveInsertable into X\r\n    c_of_move_insertable a;\r\n    a.push_front(move_insertable(key()));\r\n}\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_optional_sequence_push_front, tag_vector);\r\n\r\n\r\nDEFINE_TEST(test_optional_sequence_push_back,\r\n{\r\n    {\r\n        // a.push_back(t)\r\n        // Requires:  T shall be CopyInsertable into X\r\n        c_of_copy_insertable a;\r\n        copy_insertable const t((key()));\r\n        a.push_back(t);\r\n}\r\n\r\n{\r\n    // a.push_back(rv)\r\n    // Requires:  T shall be MoveInsertable into X\r\n    c_of_move_insertable a;\r\n    a.push_back(move_insertable(key()));\r\n}\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_optional_sequence_push_back, tag_forward_list);\r\n\r\n\r\nDEFINE_TEST(test_optional_sequence_subscript, {\r\n    // a[n] and a.at(n)\r\n    // [No Requires clause]\r\n    c_of_erasable a;\r\n    c_of_erasable const b;\r\n\r\n    (void) a[0];\r\n    (void) b[0];\r\n\r\n    (void) a.at(0);\r\n    (void) b.at(0);\r\n});\r\n\r\nNOT_SUPPORTED_SPECIALIZATION(test_optional_sequence_subscript, tag_forward_list);\r\nNOT_SUPPORTED_SPECIALIZATION(test_optional_sequence_subscript, tag_list);\r\n\r\n\r\ntemplate <container_tag Tag, bool = (container_traits<Tag>::features & c_is_sequence) != 0>\r\nstruct check_all_optional_sequence_requirements {\r\n    check_all_optional_sequence_requirements() {\r\n        test_optional_sequence_emplace_front<Tag>();\r\n        test_optional_sequence_emplace_back<Tag>();\r\n        test_optional_sequence_push_front<Tag>();\r\n        test_optional_sequence_push_back<Tag>();\r\n        test_optional_sequence_subscript<Tag>();\r\n    }\r\n};\r\n\r\ntemplate <container_tag Tag>\r\nstruct check_all_optional_sequence_requirements<Tag, false> {};\r\n\r\n\r\n//\r\n//\r\n// ORDERED ASSOCIATIVE CONTAINER REQUIREMENTS (23.2.4[associative.reqmts]/Table 102)\r\n//\r\n//\r\n\r\nDEFINE_TEST(test_ordered_associative_default_constructor_with_comparator,\r\n{\r\n    // X(c) and X a(c);\r\n    // Requires:  key_compare is CopyConstructible\r\n    {\r\n        typedef typename Traits::template bind_container<\r\n            erasable,\r\n            construct_applying_allocator<erasable>,\r\n            copy_constructible_compare<erasable>\r\n        >::type container_type;\r\n\r\n        copy_constructible_compare<erasable> const c((key()));\r\n        (container_type(c));\r\n        container_type a(c);\r\n}\r\n\r\n// X() and X a;\r\n// Requires:  key_compare is DefaultConstructible\r\n{\r\n    typedef typename Traits::template bind_container<erasable, construct_applying_allocator<erasable>,\r\n        default_constructible_compare<erasable>>::type container_type;\r\n\r\n    (container_type());\r\n    container_type a;\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(test_ordered_associative_range_constructor_with_comparator, {\r\n    // SPEC:  These are the only two operations for which traits are specified for key_compare, but\r\n    // there are many other operations for which key_compare must meet other requirements (e.g. a\r\n    // call to a.key_comp() necessitates that the key_comp type is move constructible.\r\n    //\r\n    // In the rest of the tests, I have assumed std::less for the comparator, which meets any possible\r\n    // requirements, but it should be considered whether the comparator requirements should be more\r\n    // thoroughly specified.\r\n\r\n    std::move_iterator<typename Traits::emplace_argument_type*> i;\r\n    typename c_of_emplace_constructible::key_compare c;\r\n    c_of_emplace_constructible(i, i);\r\n    c_of_emplace_constructible a1(i, i);\r\n    c_of_emplace_constructible(i, i, c);\r\n    c_of_emplace_constructible a2(i, i, c);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_ordered_associative_emplace, {\r\n    // a_uniq.emplace(args), a_eq.emplace(args)\r\n    // Requires:  value_type shall be EmplaceConstructible into X from args\r\n    c_of_emplace_constructible a;\r\n    a.emplace(emplace_argument(), emplace_argument());\r\n\r\n    // a.emplace_hint(p, args)\r\n    // Requires:  equivalent to a.emplace(args)\r\n    a.emplace_hint(a.begin(), emplace_argument(), emplace_argument());\r\n});\r\n\r\n\r\nDEFINE_TEST(test_ordered_associative_insert, {\r\n    // a_uniq.insert(t) and a_eq.insert(t)\r\n    // Requires:  If t is a non-const rvalue expression, value_type shall be MoveInsertable into X;\r\n    // otherwise, value_type shall be CopyInsertable into X.\r\n    c_of_copy_insertable ac;\r\n    ac.insert(Traits::template construct_value<copy_insertable>());\r\n\r\n    // a.insert(p, t)\r\n    // Requires:  If t is a non-const rvalue expression, value_type shall be MoveInsertable into X;\r\n    // otherwise, value_type shall be CopyInsertable into X.\r\n    ac.insert(ac.begin(), Traits::template construct_value<copy_insertable>());\r\n\r\n    // Returns:  iterator\r\n\r\n    // a.insert(i, j)\r\n    // Requires:  value_type shall be EmplaceConstructible into X from *i\r\n    c_of_emplace_constructible ea;\r\n    std::move_iterator<typename Traits::emplace_argument_type*> i;\r\n    ea.insert(i, i);\r\n});\r\n\r\ntemplate <container_tag Tag, bool = (container_traits<Tag>::features & c_is_ordered_associative) != 0>\r\nstruct check_all_ordered_associative_requirements {\r\n    check_all_ordered_associative_requirements() {\r\n        test_ordered_associative_default_constructor_with_comparator<Tag>();\r\n        test_ordered_associative_range_constructor_with_comparator<Tag>();\r\n        test_ordered_associative_emplace<Tag>();\r\n        test_ordered_associative_insert<Tag>();\r\n    }\r\n};\r\n\r\ntemplate <container_tag Tag>\r\nstruct check_all_ordered_associative_requirements<Tag, false> {};\r\n\r\n\r\n//\r\n//\r\n// UNORDERED ASSOCIATIVE CONTAINER REQUIREMENTS (23.2.5[unord.req]/Table 103)\r\n//\r\n//\r\n\r\nDEFINE_TEST(test_unordered_associative_default_constructors,\r\n{\r\n    // X(n, hf, eq) and X a(n, hf, eq)\r\n    // Requires:  hasher and key_equal are CopyConstructible.\r\n    {\r\n        typedef typename Traits::template bind_container<\r\n            erasable,\r\n            construct_applying_allocator<erasable>,\r\n            copy_constructible_hash<erasable>,\r\n            copy_constructible_compare<erasable>\r\n        >::type container_type;\r\n\r\n        copy_constructible_hash<erasable> const hf((key()));\r\n        copy_constructible_compare<erasable> const eq((key()));\r\n        (container_type(0, hf, eq));\r\n        container_type a(0, hf, eq);\r\n}\r\n\r\n// X(n, hf) and X a(n, hf)\r\n// Requires:  hasher is CopyConstructible and key_equal is DefaultConstructible\r\n{\r\n    typedef typename Traits::template bind_container<erasable, construct_applying_allocator<erasable>,\r\n        copy_constructible_hash<erasable>, default_constructible_compare<erasable>>::type container_type;\r\n\r\n    copy_constructible_hash<erasable> const hf((key()));\r\n    (container_type(0, hf));\r\n    container_type a(0, hf);\r\n}\r\n\r\n// X(n) and X a(n)\r\n// Requires:  hasher and key_equal are DefaultConstructible\r\n{\r\n    (c_of_erasable(0));\r\n    c_of_erasable a(0);\r\n}\r\n\r\n// X() and X a\r\n// Requires:  hasher and key_equal are DefaultConstructible\r\n{\r\n    (c_of_erasable());\r\n    c_of_erasable a;\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(test_unordered_associative_range_constructors, {\r\n    std::move_iterator<typename Traits::emplace_argument_type*> i;\r\n\r\n    // X(i, j, n, hf, eq) and X a(i, j, n, hf, eq)\r\n    // Requires:  hasher and key_equal are CopyConstructible.  value_type is EmplaceConstructible\r\n    // into X from *i.\r\n    {\r\n        typedef typename Traits::template bind_container<emplace_constructible,\r\n            construct_applying_allocator<emplace_constructible>, copy_constructible_hash<emplace_constructible>,\r\n            copy_constructible_compare<emplace_constructible>>::type container_type;\r\n\r\n        copy_constructible_hash<emplace_constructible> const hf((key()));\r\n        copy_constructible_compare<emplace_constructible> const eq((key()));\r\n        (container_type(i, i, 0, hf, eq));\r\n        container_type a(i, i, 0, hf, eq);\r\n    }\r\n\r\n    // X(i, j, n, hf) and X a(i, j, n, hf)\r\n    // Requires:  hasher is CopyConstructible and key_equal is DefaultConstructible.  value_type is\r\n    // EmplaceConstructible into X from *i.\r\n    {\r\n        typedef typename Traits::template bind_container<emplace_constructible,\r\n            construct_applying_allocator<emplace_constructible>, copy_constructible_hash<emplace_constructible>,\r\n            default_constructible_compare<emplace_constructible>>::type container_type;\r\n\r\n        copy_constructible_hash<emplace_constructible> const hf((key()));\r\n        (container_type(i, i, 0, hf));\r\n        container_type a(i, i, 0, hf);\r\n    }\r\n\r\n    // X(i, j, n) and X a(i, j, n)\r\n    // Requires:  hasher and key_equal are DefaultConstructible.  value_type is EmplaceConstructible\r\n    // into X from *i.\r\n    {\r\n        (c_of_emplace_constructible(i, i, 0));\r\n        c_of_emplace_constructible a(i, i, 0);\r\n    }\r\n\r\n    // X(i, j) and X a(i, j)\r\n    // Requires:  hasher and key_equal are DefaultConstructible.  value_type is EmplaceConstructible\r\n    // into X from *i.\r\n    {\r\n        (c_of_emplace_constructible(i, i));\r\n        c_of_emplace_constructible a(i, i);\r\n    }\r\n});\r\n\r\n\r\nDEFINE_TEST(test_unordered_associative_rehash, {\r\n    c_of_erasable a;\r\n\r\n    // a.rehash(n)\r\n    // [No Requires clause]\r\n    a.rehash(0);\r\n\r\n    // a.reserve(n)\r\n    // [No Requires clause]\r\n    a.reserve(0);\r\n});\r\n\r\n\r\ntemplate <container_tag Tag, bool = (container_traits<Tag>::features & c_is_unordered_associative) != 0>\r\nstruct check_all_unordered_associative_requirements {\r\n    check_all_unordered_associative_requirements() {\r\n        test_unordered_associative_default_constructors<Tag>();\r\n        test_unordered_associative_range_constructors<Tag>();\r\n\r\n        // These operations are the same as their ordered counterparts\r\n        test_ordered_associative_emplace<Tag>();\r\n        test_ordered_associative_insert<Tag>();\r\n\r\n        test_unordered_associative_rehash<Tag>();\r\n    }\r\n};\r\n\r\ntemplate <container_tag Tag>\r\nstruct check_all_unordered_associative_requirements<Tag, false> {};\r\n\r\n\r\n//\r\n//\r\n// CONTAINER-SPECIFIC REQUIREMENTS (23.3[sequences], 23.4[associative], 23.5[unord]\r\n//\r\n// Whereas the tests above all verify container requirements specified in the Container Requirements\r\n// section of the specification (clause 23.2), the tests below verify container requirements\r\n// specified in the individual container specifications (in clauses 23.3, 23.4, and 23.5).  Tests\r\n// are only provided for operations for which the Requires clause is different or for operations\r\n// that are specific to the individual container (and are thus not tested in the above tests).\r\n//\r\n//\r\n\r\nDEFINE_TEST(test_specific_sequence_allocator_constructor, {\r\n    // explicit X(const Allocator& = Allocator());\r\n    // [No Requires clause]\r\n    //\r\n    // Applies to:  deque, forward_list, list, vector\r\n    c_of_erasable a((construct_applying_allocator<erasable>()));\r\n});\r\n\r\n\r\nDEFINE_TEST(test_specific_sequence_count_constructor_default, {\r\n    // explicit X(size_type n);\r\n    // Requires:  T shall be DefaultInsertable into X\r\n    //\r\n    // Applies to:  deque, forward_list, list, vector\r\n    c_of_default_constructible(1);\r\n    c_of_default_constructible a(1);\r\n});\r\n\r\n\r\nDEFINE_TEST(test_specific_sequence_count_constructor_copy, {\r\n    // X(size_type n, const T& value, const Allocator& = Allocator())\r\n    // Requires:  T shall be CopyInsertable into X\r\n    //\r\n    // Applies to:  deque, forward_list, list, vector\r\n    c_of_copy_insertable a(1, copy_insertable(key()), construct_applying_allocator<copy_insertable>());\r\n});\r\n\r\n\r\nDEFINE_TEST(test_specific_sequence_range_constructor, {\r\n    // X(InputIterator first, InputIterator last, const Allocator& = Allocator());\r\n    // [No Requires clause]\r\n    //\r\n    // Applies to:  deque, forward_list, list, vector\r\n    //\r\n    // SPEC:  This has no Requires clause in any of the four Sequence container specifications.  It\r\n    // should have the same requirements as the Sequence Container range constructor that does not\r\n    // accept an allocator (the constructor of the form 'X(i, j)').\r\n    //\r\n    // That Requires clause states:  \"T shall be EmplaceConstructible into X from *i.  For vector,\r\n    // if the iterator does not meet the forward iterator requirements, T shall also be\r\n    // MoveInsertable into X.\"\r\n    std::move_iterator<emplace_argument*> const i;\r\n    c_of_emplace_constructible a(i, i, construct_applying_allocator<emplace_constructible>());\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(test_specific_sequence_range_constructor, tag_vector,\r\n{\r\n    // X(InputIterator first, InputIterator last, const Allocator& = Allocator());\r\n    // [See the primary test for comments.]\r\n    //\r\n    // Requires:  T shall be EmplaceConstructible into X from *i.  For vector, if the iterator does\r\n    // not meet the forward iterator requirements, T shall also be MoveInsertable into X.\r\n    {\r\n         std::move_iterator<emplace_argument*> i;\r\n         c_of_emplace_constructible(i, i, construct_applying_allocator<emplace_constructible>());\r\n         c_of_emplace_constructible a(i, i, construct_applying_allocator<emplace_constructible>());\r\n}\r\n{\r\n    std::move_iterator<emplace_argument*> i;\r\n    c_of_ec_mi(i, i, construct_applying_allocator<ec_mi>());\r\n    c_of_ec_mi a(i, i, construct_applying_allocator<ec_mi>());\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(test_specific_common_list_operations,\r\n{\r\n    // void remove(const T& value);\r\n    // void remove_if(Predicate pred);\r\n    // [No Requires clause]\r\n    {\r\n        c_of_equality_comparable a;\r\n        c_of_erasable b;\r\n\r\n        a.remove(equality_comparable(key()));\r\n        b.remove_if(faux_predicate<erasable>());\r\n}\r\n\r\n// void unique();\r\n// void unique(BinaryPredicate pred);\r\n// [No Requires clause]\r\n//\r\n{\r\n    c_of_equality_comparable a;\r\n    c_of_erasable b;\r\n\r\n    a.unique();\r\n    b.unique(faux_compare<erasable>());\r\n}\r\n\r\n// void merge(forward_list& x);\r\n// void merge(forward_list&& x);\r\n// void merge(forward_list& x, Compare comp);\r\n// void merge(forward_list&& x, Compare comp);\r\n// [No relevant Requires clause]\r\n{\r\n    c_of_less_comparable a;\r\n    c_of_erasable b;\r\n\r\n    a.merge(a);\r\n    a.merge(c_of_less_comparable());\r\n\r\n    b.merge(b, faux_compare<erasable>());\r\n    b.merge(c_of_erasable(), faux_compare<erasable>());\r\n}\r\n\r\n// void sort();\r\n// void sort(Compare comp);\r\n// [No relevant Requires clause]\r\n{\r\n    c_of_less_comparable a;\r\n    c_of_erasable b;\r\n    a.sort();\r\n    b.sort(faux_compare<erasable>());\r\n}\r\n\r\n// void reverse();\r\n// [No Requires clause]\r\n{\r\n    c_of_erasable a;\r\n    a.reverse();\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(test_specific_ordered_associative_constructors,\r\n{\r\n    // X(c, allocator)\r\n    // [No Requires clause]\r\n    //\r\n    // SPEC:  The Requires clause should be the same as the Requires clause for the equivalent\r\n    // constructor in the Associative requirements (sans-allocator).  That states:  \"Requires:\r\n    // key_compare is CopyConstructible.\"\r\n    {\r\n        typedef typename Traits::template bind_container<\r\n            erasable,\r\n            construct_applying_allocator<erasable>,\r\n            copy_constructible_compare<erasable>\r\n        >::type container_type;\r\n\r\n        copy_constructible_compare<erasable> const c((key()));\r\n        container_type a(c, construct_applying_allocator<typename Traits::template bind_value<erasable>::type>());\r\n}\r\n\r\n// X(i, j, c) and X a(i, j, c);\r\n// [No Requires clause]\r\n//\r\n// SPEC:  The Requires clause should be the same as the Requires clause for the equivalent\r\n// constructor in the Associative requirements (sans-allocator).  That states:  \"Requires:\r\n// key_compare is CopyConstructible.  value_type is EmplaceConstructible into X from *i.\"\r\n\r\n{\r\n    typedef typename Traits::template bind_container<emplace_constructible,\r\n        construct_applying_allocator<emplace_constructible>, copy_constructible_compare<emplace_constructible>>::type\r\n        container_type;\r\n\r\n    copy_constructible_compare<emplace_constructible> const c((key()));\r\n    std::move_iterator<typename Traits::emplace_argument_type*> i;\r\n    (container_type(i, i, c));\r\n    container_type a(i, i, c);\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(test_specific_unordered_associative_constructors,\r\n{\r\n    // X(n, hf, eq, allocator)\r\n    // [No Requires clause]\r\n    //\r\n    // SPEC:  The Requires clause should be the same as the Requires clause for the equivalent\r\n    // constructor in the Unordered Associative requirements (sans-allocator).  That states:\r\n    // \"Requires:  hasher and key_equal are CopyConstructible.\"\r\n    {\r\n        typedef typename Traits::template bind_container<\r\n            erasable,\r\n            construct_applying_allocator<erasable>,\r\n            copy_constructible_hash<erasable>,\r\n            copy_constructible_compare<erasable>\r\n        >::type container_type;\r\n\r\n        copy_constructible_hash<erasable> const hf((key()));\r\n        copy_constructible_compare<erasable> const eq((key()));\r\n        using T = typename Traits::template bind_value<erasable>::type;\r\n        (container_type(0, hf, eq, construct_applying_allocator<T>()));\r\n        container_type a(0, hf, eq, construct_applying_allocator<T>());\r\n}\r\n\r\n// X(i, j, n, hf, eq, allocator)\r\n//\r\n// SPEC:  The Requires clause should be the same as the Requires clause for the equivalent\r\n// constructor in the Unordered Associative requirements (sans-allocator).  That states:\r\n// \"Requires:  hasher and key_equal are CopyConstructible.  value_type is EmplaceConstructible\r\n// into X from *i.\"\r\n{\r\n    typedef typename Traits::template bind_container<emplace_constructible,\r\n        construct_applying_allocator<emplace_constructible>, copy_constructible_hash<emplace_constructible>,\r\n        copy_constructible_compare<emplace_constructible>>::type container_type;\r\n    std::move_iterator<typename Traits::emplace_argument_type*> i;\r\n\r\n    copy_constructible_hash<emplace_constructible> const hf((key()));\r\n    copy_constructible_compare<emplace_constructible> const eq((key()));\r\n    (container_type(i, i, 0, hf, eq,\r\n        construct_applying_allocator<typename Traits::template bind_value<emplace_constructible>::type>()));\r\n    container_type a(i, i, 0, hf, eq,\r\n        construct_applying_allocator<typename Traits::template bind_value<emplace_constructible>::type>());\r\n}\r\n});\r\n\r\n\r\nDEFINE_TEST(check_all_specific_requirements, {});\r\n\r\nDEFINE_TEST_SPECIALIZATION(check_all_specific_requirements, tag_deque, {\r\n    test_specific_sequence_count_constructor_default<Tag>();\r\n    test_specific_sequence_count_constructor_copy<Tag>();\r\n    test_specific_sequence_range_constructor<Tag>();\r\n    test_specific_sequence_range_constructor<Tag>();\r\n\r\n    // void resize(size_type sz);\r\n    // Requires:  T shall be MoveInsertable and DefaultInsertable into *this\r\n    {\r\n        c_of_dc_mi a;\r\n        a.resize(1);\r\n    }\r\n\r\n    // void resize(size_type sz, const T& c);\r\n    // Requires:  T shall be MoveInsertable and CopyInsertable into *this\r\n    {\r\n        c_of_copy_insertable a;\r\n        a.resize(1, copy_insertable(key()));\r\n    }\r\n\r\n    // void shrink_to_fit();\r\n    // Requires:  T shall be MoveInsertable into *this\r\n    {\r\n        c_of_move_insertable a;\r\n        a.shrink_to_fit();\r\n    }\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(check_all_specific_requirements, tag_forward_list, {\r\n    test_specific_sequence_count_constructor_default<Tag>();\r\n    test_specific_sequence_count_constructor_copy<Tag>();\r\n    test_specific_sequence_range_constructor<Tag>();\r\n    test_specific_sequence_range_constructor<Tag>();\r\n\r\n    // iterator insert_after(const_iterator position, const T& x);\r\n    // iterator insert_after(const_iterator position, T&& x);\r\n    // [No relevant Requires clause]\r\n    //\r\n    // SPEC: Should require T:CopyInsertable for lvalue, T:MoveInsertable for rvalue\r\n    {\r\n        c_of_copy_insertable a;\r\n        a.insert_after(a.cbefore_begin(), copy_insertable(key()));\r\n    }\r\n\r\n    // iterator insert_after(const_iterator position, size_type n, const T& x);\r\n    // [No relevant Requires clause]\r\n    //\r\n    // SPEC:  Should require T:CopyInsertable\r\n    {\r\n        c_of_copy_insertable a;\r\n        a.insert_after(a.cbefore_begin(), 1, copy_insertable(key()));\r\n    }\r\n\r\n    // iterator insert_after(const_iterator position, InputIterator first, InputIterator last);\r\n    // [No relevant Requires clause]\r\n    //\r\n    // SPEC:  Should require T:EmplaceConstructible into *this from *first.\r\n    {\r\n        std::move_iterator<emplace_argument*> i;\r\n        c_of_emplace_constructible a;\r\n        a.insert_after(a.cbefore_begin(), i, i);\r\n    }\r\n\r\n    // iterator emplace_after(const_iterator position, Args&&... args);\r\n    // [No relevant Requires clause]\r\n    //\r\n    // SPEC:  Should require T:EmplaceConstructible from args\r\n    {\r\n        c_of_emplace_constructible a;\r\n        a.emplace_after(a.cbefore_begin(), emplace_argument());\r\n        a.emplace_after(a.cbefore_begin(), emplace_argument(), emplace_argument());\r\n        a.emplace_after(a.cbefore_begin(), emplace_argument(), emplace_argument(), emplace_argument());\r\n    }\r\n\r\n    // void resize(size_type sz);\r\n    // Requires:  T shall be DefaultInsertable into *this\r\n    {\r\n        c_of_default_constructible a;\r\n        a.resize(1);\r\n    }\r\n\r\n    // void resize(size_type sz, const value_type& c);\r\n    // Requires:  T shall be CopyInsertable into *this\r\n    {\r\n        c_of_copy_insertable a;\r\n        a.resize(1, copy_insertable(key()));\r\n    }\r\n\r\n    test_specific_common_list_operations<Tag>();\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(check_all_specific_requirements, tag_list, {\r\n    test_specific_sequence_count_constructor_default<Tag>();\r\n    test_specific_sequence_count_constructor_copy<Tag>();\r\n    test_specific_sequence_range_constructor<Tag>();\r\n    test_specific_sequence_range_constructor<Tag>();\r\n\r\n    // void resize(size_type sz);\r\n    // Requires:  T shall be DefaultInsertable into *this\r\n\r\n    // void resize(size_type sz, const T& c);\r\n    // Requires:  T shall be CopyInsertable into *this\r\n\r\n    test_specific_common_list_operations<Tag>();\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(check_all_specific_requirements, tag_vector, {\r\n    test_specific_sequence_count_constructor_default<Tag>();\r\n    test_specific_sequence_count_constructor_copy<Tag>();\r\n    test_specific_sequence_range_constructor<Tag>();\r\n    test_specific_sequence_range_constructor<Tag>();\r\n\r\n    // void reserve(size_type n); and void shrink_to_fit();\r\n    // Requires:  T shall be MoveInsertable into *this\r\n    {\r\n        c_of_move_insertable a;\r\n        a.reserve(1);\r\n        a.shrink_to_fit();\r\n    }\r\n\r\n    // void resize(size_type sz);\r\n    // Requires:  T shall be MoveInsertable and DefaultInsertable into *this\r\n    {\r\n        c_of_dc_mi a;\r\n        a.resize(1);\r\n    }\r\n\r\n    // void resize(size_type sz, const T& c);\r\n    // Requires:  T shall be MoveInsertable into *this and CopyInsertable into *this\r\n    {\r\n        c_of_copy_insertable a;\r\n        a.resize(1, copy_insertable(key()));\r\n    }\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(check_all_specific_requirements, tag_map, {\r\n    test_specific_ordered_associative_constructors<Tag>();\r\n\r\n    // T& operator[](const key_type& x);\r\n    // Requires:  key_type shall be CopyInsertable and mapped_type shall be DefaultInsertable into\r\n    // *this\r\n    {\r\n        std::map<copy_insertable, default_constructible, faux_compare<copy_insertable>,\r\n            construct_applying_allocator<std::pair<const copy_insertable, default_constructible>>>\r\n            a;\r\n\r\n        copy_insertable k((key()));\r\n        a[k];\r\n    }\r\n\r\n    // T& operator[](key_type& x);\r\n    // Requires:  mapped_type shall be DefaultInsertable into *this\r\n    //\r\n    // SPEC:  Presumably this should also say \"key_type shall be MoveInsertable into *this,\" given\r\n    // the Effects clause.\r\n    {\r\n        std::map<move_insertable, default_constructible, faux_compare<move_insertable>,\r\n            construct_applying_allocator<std::pair<const move_insertable, default_constructible>>>\r\n            a;\r\n\r\n        a[move_insertable(key())];\r\n    }\r\n\r\n    // T& at(const key_type& x);\r\n    // const T& at(const key_type& x) const;\r\n    // [No Requires clause]\r\n    {\r\n        c_of_erasable a;\r\n        c_of_erasable const b;\r\n\r\n        (void) a.at(erasable(key()));\r\n        (void) b.at(erasable(key()));\r\n    }\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(\r\n    check_all_specific_requirements, tag_multimap, { test_specific_ordered_associative_constructors<Tag>(); });\r\n\r\nDEFINE_TEST_SPECIALIZATION(\r\n    check_all_specific_requirements, tag_multiset, { test_specific_ordered_associative_constructors<Tag>(); });\r\n\r\nDEFINE_TEST_SPECIALIZATION(\r\n    check_all_specific_requirements, tag_set, { test_specific_ordered_associative_constructors<Tag>(); });\r\n\r\nDEFINE_TEST_SPECIALIZATION(check_all_specific_requirements, tag_unordered_map, {\r\n    test_specific_unordered_associative_constructors<Tag>();\r\n\r\n    // mapped_type& operator[](const key_type& k);\r\n    // mapped_type& operator[](key_type&& k);\r\n    // Requires:  mapped_type shall be DefaultInsertable into *this.  For the first operator,\r\n    // key_type shall be CopyInsertable into *this.  For the second operator, key_type shall be\r\n    // MoveConstructible.\r\n    {\r\n        std::unordered_map<copy_insertable, default_constructible, faux_hash<copy_insertable>,\r\n            faux_compare<copy_insertable>,\r\n            construct_applying_allocator<std::pair<const copy_insertable, default_constructible>>>\r\n            a;\r\n\r\n        copy_insertable k((key()));\r\n        a[k];\r\n\r\n        std::unordered_map<move_insertable, default_constructible, faux_hash<move_insertable>,\r\n            faux_compare<move_insertable>,\r\n            construct_applying_allocator<std::pair<const move_insertable, default_constructible>>>\r\n            b;\r\n\r\n        b[move_insertable(key())];\r\n    }\r\n\r\n    // mapped_type& at(const key_type& k);\r\n    // const mapped_type& at(const key_type& k) const;\r\n    // [No Requires clause]\r\n    {\r\n        c_of_erasable a;\r\n        c_of_erasable const b;\r\n\r\n        (void) a.at(erasable(key()));\r\n        (void) b.at(erasable(key()));\r\n    }\r\n});\r\n\r\nDEFINE_TEST_SPECIALIZATION(check_all_specific_requirements, tag_unordered_multimap,\r\n    { test_specific_unordered_associative_constructors<Tag>(); });\r\n\r\nDEFINE_TEST_SPECIALIZATION(check_all_specific_requirements, tag_unordered_multiset,\r\n    { test_specific_unordered_associative_constructors<Tag>(); });\r\n\r\nDEFINE_TEST_SPECIALIZATION(\r\n    check_all_specific_requirements, tag_unordered_set, { test_specific_unordered_associative_constructors<Tag>(); });\r\n\r\n\r\n//\r\n//\r\n// TEST DRIVER\r\n//\r\n//\r\n\r\ntemplate <container_tag Tag>\r\nvoid assert_container() {\r\n    check_all_container_requirements<Tag>();\r\n    check_all_allocator_aware_requirements<Tag>();\r\n\r\n    check_all_sequence_requirements<Tag>();\r\n    check_all_optional_sequence_requirements<Tag>();\r\n\r\n    check_all_ordered_associative_requirements<Tag>();\r\n\r\n    check_all_unordered_associative_requirements<Tag>();\r\n\r\n    check_all_specific_requirements<Tag>();\r\n}\r\n\r\nvoid assert_all() {\r\n    assert_container<tag_deque>();\r\n    assert_container<tag_forward_list>();\r\n    assert_container<tag_list>();\r\n    assert_container<tag_vector>();\r\n\r\n    assert_container<tag_map>();\r\n    assert_container<tag_multimap>();\r\n    assert_container<tag_multiset>();\r\n    assert_container<tag_set>();\r\n\r\n    assert_container<tag_unordered_map>();\r\n    assert_container<tag_unordered_multimap>();\r\n    assert_container<tag_unordered_multiset>();\r\n    assert_container<tag_unordered_set>();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0204655_heap_algorithms_integer_overflow/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0204655_heap_algorithms_integer_overflow/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <iterator>\r\n#include <limits>\r\n#include <numeric>\r\n#include <random>\r\n\r\nusing namespace std;\r\n\r\ntemplate <typename T, typename U>\r\nvoid assert_equal(const T& lhs, const U& rhs) {\r\n    assert(lhs == rhs);\r\n}\r\n\r\ntypedef short test_difference_type;\r\ntemplate <typename T>\r\nstruct small_diff_iterator {\r\n    typedef test_difference_type difference_type;\r\n    typedef T value_type;\r\n    typedef T* pointer;\r\n    typedef T& reference;\r\n    typedef random_access_iterator_tag iterator_category;\r\n\r\n    pointer base_ptr;\r\n\r\n    small_diff_iterator() : base_ptr() {}\r\n\r\n    explicit small_diff_iterator(pointer base_ptr) : base_ptr(base_ptr) {}\r\n\r\n    reference operator*() const {\r\n        return *base_ptr;\r\n    }\r\n\r\n    pointer operator->() const {\r\n        return base_ptr;\r\n    }\r\n\r\n    small_diff_iterator& operator++() {\r\n        ++base_ptr;\r\n        return *this;\r\n    }\r\n\r\n    void operator++(int) = delete; // avoid postincrement\r\n\r\n    small_diff_iterator& operator--() {\r\n        --base_ptr;\r\n        return *this;\r\n    }\r\n\r\n    void operator--(int) = delete; // avoid postdecrement\r\n\r\n    bool operator==(const small_diff_iterator& other) const {\r\n        return base_ptr == other.base_ptr;\r\n    }\r\n\r\n    bool operator!=(const small_diff_iterator& other) const {\r\n        return base_ptr != other.base_ptr;\r\n    }\r\n\r\n    bool operator<(const small_diff_iterator& other) const {\r\n        return base_ptr < other.base_ptr;\r\n    }\r\n\r\n    bool operator<=(const small_diff_iterator& other) const {\r\n        return base_ptr <= other.base_ptr;\r\n    }\r\n\r\n    bool operator>(const small_diff_iterator& other) const {\r\n        return base_ptr > other.base_ptr;\r\n    }\r\n\r\n    bool operator>=(const small_diff_iterator& other) const {\r\n        return base_ptr >= other.base_ptr;\r\n    }\r\n\r\n    small_diff_iterator& operator+=(difference_type n) {\r\n        base_ptr += n;\r\n        return *this;\r\n    }\r\n\r\n    small_diff_iterator& operator-=(difference_type n) {\r\n        base_ptr -= n;\r\n        return *this;\r\n    }\r\n\r\n    reference operator[](difference_type n) const = delete; // avoid subscript, N4849 [algorithms.requirements]/8\r\n};\r\ntemplate <typename T>\r\nsmall_diff_iterator<T> operator+(small_diff_iterator<T> lhs, test_difference_type rhs) {\r\n    return small_diff_iterator<T>{lhs.base_ptr + rhs};\r\n}\r\ntemplate <typename T>\r\nsmall_diff_iterator<T> operator+(test_difference_type lhs, small_diff_iterator<T> rhs) {\r\n    return small_diff_iterator<T>{lhs + rhs.base_ptr};\r\n}\r\ntemplate <typename T>\r\nsmall_diff_iterator<T> operator-(small_diff_iterator<T> lhs, test_difference_type rhs) {\r\n    return small_diff_iterator<T>{lhs.base_ptr - rhs};\r\n}\r\ntemplate <typename T>\r\ntest_difference_type operator-(small_diff_iterator<T> lhs, small_diff_iterator<T> rhs) {\r\n    return static_cast<test_difference_type>(lhs.base_ptr - rhs.base_ptr);\r\n}\r\n\r\ntemplate <typename T>\r\nstruct heap_test_fixture {\r\n    static const auto max_size = static_cast<size_t>(numeric_limits<test_difference_type>::max());\r\n\r\n    static T buff[max_size];\r\n\r\n    static void fill_monotonic(T val) {\r\n        iota(begin(buff), end(buff), val);\r\n    }\r\n\r\n    static void assert_sorted() {\r\n        assert(is_sorted(begin(buff), end(buff)));\r\n    }\r\n\r\n    static void assert_heap() {\r\n        assert(is_heap(begin(buff), end(buff)));\r\n    }\r\n\r\n    static void make_buff_heap() {\r\n        make_heap(small_diff_iterator<T>{buff}, small_diff_iterator<T>{buff + max_size});\r\n    }\r\n\r\n    static void sort_buff_heap() {\r\n        sort_heap(small_diff_iterator<T>{buff}, small_diff_iterator<T>{buff + max_size});\r\n    }\r\n};\r\n\r\ntemplate <typename T>\r\nT heap_test_fixture<T>::buff[heap_test_fixture<T>::max_size];\r\n\r\nstruct simple_chars_heap_test : heap_test_fixture<char> {\r\n    // This test is kept around mostly because it's easiest to debug what's going on inside the heap functions\r\n    static void test() {\r\n        const char small_value      = 42;\r\n        const char big_value        = 100;\r\n        const size_t division_point = 32; // constant doesn't matter, only following condition does\r\n        static_assert(sizeof(test_difference_type) * CHAR_BIT < division_point, \"\");\r\n        fill(begin(buff), end(buff) - division_point, small_value);\r\n        fill(end(buff) - division_point, end(buff), big_value);\r\n        // Before integer overflow bugs were fixed in push_heap / pop_heap, the following\r\n        // line triggered integer overflows resulting in infinite loops.\r\n        make_buff_heap();\r\n        assert_heap();\r\n        sort_buff_heap();\r\n        assert_sorted();\r\n    }\r\n};\r\n\r\nstruct monotonic_integers_heap_test : heap_test_fixture<int> {\r\n    static void test() {\r\n        fill_monotonic(100);\r\n        make_buff_heap();\r\n        assert_heap();\r\n        sort_buff_heap();\r\n        assert_sorted();\r\n    }\r\n};\r\n\r\nstruct random_order_integers_heap_test : heap_test_fixture<int> {\r\n    static void test() {\r\n        fill_monotonic(1729);\r\n        mt19937 r_gen(0);\r\n        shuffle(begin(buff), end(buff), r_gen);\r\n        assert(!is_sorted(begin(buff), end(buff)));\r\n        make_buff_heap();\r\n        assert_heap();\r\n\r\n        buff[max_size - 1] = 1'000'000;\r\n        push_heap(small_diff_iterator<int>{buff}, small_diff_iterator<int>{buff + max_size});\r\n        assert_equal(buff[0], 1'000'000);\r\n        assert(buff[max_size - 1] != 1'000'000);\r\n        pop_heap(small_diff_iterator<int>{buff}, small_diff_iterator<int>{buff + max_size});\r\n        assert_equal(buff[max_size - 1], 1'000'000);\r\n        assert_equal(buff[0], static_cast<int>(1729 + max_size - 1));\r\n        sort_heap(small_diff_iterator<int>{buff}, small_diff_iterator<int>{buff + max_size - 1});\r\n        assert_sorted();\r\n    }\r\n};\r\n\r\nvoid test_pop_heap_maintains_heap_at_each_step_test() {\r\n    const int start_value  = 314159;\r\n    const size_t buff_size = 1000;\r\n    int buff[buff_size];\r\n\r\n    iota(begin(buff), end(buff), start_value);\r\n    make_heap(begin(buff), end(buff));\r\n\r\n    for (int* logical_end = end(buff); logical_end != begin(buff); --logical_end) {\r\n        const int expected_value = start_value + static_cast<int>(logical_end - begin(buff)) - 1;\r\n        assert_equal(buff[0], expected_value);\r\n        assert(is_heap(begin(buff), logical_end));\r\n        pop_heap(begin(buff), logical_end);\r\n        assert_equal(logical_end[-1], expected_value);\r\n    }\r\n}\r\n\r\n// Also smoke test partial_sort which calls the heap functions' internal bits\r\n// without the heap functions' normal precondition checking.\r\nvoid test_partial_sort() {\r\n    mt19937 r_gen(0);\r\n    int all_numbers[100];\r\n    iota(begin(all_numbers), end(all_numbers), 0);\r\n    int buff[100];\r\n    copy(begin(all_numbers), end(all_numbers), buff);\r\n\r\n    // Test the degenerate case. Note that the standard doesn't guarantee this is\r\n    // a no-op but we want to avoid swapping elements in our implementation when we can.\r\n    {\r\n        shuffle(begin(buff), end(buff), r_gen);\r\n        int expected_first[100];\r\n        copy(begin(buff), end(buff), expected_first);\r\n        partial_sort(begin(buff), begin(buff), end(buff));\r\n        assert(equal(begin(buff), end(buff), begin(expected_first), end(expected_first)));\r\n    }\r\n\r\n    for (size_t division = 1; division <= size(buff); ++division) {\r\n        shuffle(begin(buff), end(buff), r_gen);\r\n        const auto first = begin(buff);\r\n        const auto mid   = first + division;\r\n        const auto last  = end(buff);\r\n        partial_sort(first, mid, last);\r\n        assert(is_sorted(first, mid));\r\n        assert(is_permutation(first, last, begin(all_numbers), end(all_numbers)));\r\n        assert_equal(static_cast<size_t>(buff[division - 1]), division - 1);\r\n    }\r\n}\r\n\r\nint main() {\r\n    simple_chars_heap_test::test();\r\n    monotonic_integers_heap_test::test();\r\n    random_order_integers_heap_test::test();\r\n    test_pop_heap_maintains_heap_at_each_step_test();\r\n    test_partial_sort();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0224478_scoped_allocator/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0224478_scoped_allocator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <new>\r\n#include <scoped_allocator>\r\n#include <tuple>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <class T>\r\nconstexpr bool is_lvalue_reference_to_const = false;\r\ntemplate <class T>\r\nconstexpr bool is_lvalue_reference_to_const<const T&> = true;\r\n\r\ntemplate <typename T>\r\nstruct VSO_129349_alloc : allocator<T> {\r\n    template <typename U>\r\n    struct rebind {\r\n        using other = VSO_129349_alloc<U>;\r\n    };\r\n\r\n    template <typename U>\r\n    VSO_129349_alloc(const U&) {}\r\n};\r\n\r\ntemplate <typename T>\r\nallocator<T> VSO_129349_make_alloc() {\r\n    return allocator<T>();\r\n}\r\n\r\nvoid test_case_VSO_129349_non_default_constructible_allocators() {\r\n    scoped_allocator_adaptor<VSO_129349_alloc<char>> a00(VSO_129349_make_alloc<char>());\r\n}\r\n\r\nvoid test_case_VSO_184838_scoped_allocator_assignment_conversions() {\r\n    allocator<vector<int>> vec_alloc{};\r\n    allocator<int> int_alloc{};\r\n    using my_vector_saa = scoped_allocator_adaptor<allocator<vector<int>>, allocator<int>>;\r\n\r\n    my_vector_saa saa1(move(vec_alloc), move(int_alloc));\r\n\r\n    using my_double_saa = scoped_allocator_adaptor<allocator<vector<double>>, allocator<int>>;\r\n    my_double_saa saa2(saa1);\r\n    saa2 = move(saa1);\r\n\r\n    vector<int> vec1{};\r\n    vector<int> vec2{};\r\n    using my_pair = pair<vector<int>, vector<int>>;\r\n    auto pair_ptr = static_cast<my_pair*>(malloc(sizeof(my_pair)));\r\n    saa1.construct(pair_ptr, move(vec1), move(vec2));\r\n    saa1.destroy(pair_ptr);\r\n    free(pair_ptr);\r\n}\r\n\r\nvoid test_case_VSO_224478_allow_stacking() {\r\n    vector<int, scoped_allocator_adaptor<scoped_allocator_adaptor<allocator<int>>>> vec;\r\n    vec.push_back(42);\r\n}\r\n\r\nint g_min_alloc_construct_count = 0;\r\n\r\ntemplate <typename T>\r\nstruct min_alloc {\r\n    using value_type = T;\r\n\r\n    min_alloc() = default;\r\n    template <typename U>\r\n    min_alloc(const min_alloc<U>&) {}\r\n    min_alloc(const min_alloc&)            = default;\r\n    min_alloc& operator=(const min_alloc&) = default;\r\n\r\n    value_type* allocate(size_t n) {\r\n        return allocator<T>().allocate(n);\r\n    }\r\n\r\n    void deallocate(value_type* p, size_t n) {\r\n        allocator<T>().deallocate(p, n);\r\n    }\r\n\r\n    template <typename U, typename... Args>\r\n    void construct(U* p, Args&&... args) {\r\n        ++g_min_alloc_construct_count;\r\n        ::new (static_cast<void*>(p)) U(forward<Args>(args)...);\r\n    }\r\n};\r\n\r\ntemplate <typename T, typename U>\r\nbool operator==(const min_alloc<T>&, const min_alloc<U>&) {\r\n    return true;\r\n}\r\n\r\ntemplate <typename T, typename U>\r\nbool operator!=(const min_alloc<T>&, const min_alloc<U>&) {\r\n    return false;\r\n}\r\n\r\nvoid test_case_VSO_224478_piecewise_construct_calls_allocator_construct() {\r\n    scoped_allocator_adaptor<min_alloc<pair<int, int>>> sa;\r\n    const auto ptr = sa.allocate(1);\r\n    sa.construct(ptr, piecewise_construct, tuple<int>(42), tuple<int>(1729));\r\n    assert(g_min_alloc_construct_count == 1);\r\n    sa.destroy(ptr);\r\n    sa.deallocate(ptr, 1);\r\n}\r\n\r\nstruct lwg_2586 {\r\n    using allocator_type = allocator<lwg_2586>;\r\n    lwg_2586(allocator_arg_t, allocator_type&&) {}\r\n    lwg_2586(const allocator_type&) {}\r\n\r\n    // Also test LWG-3187 \"P0591R4 reverted DR 2586 fixes to scoped_allocator_adaptor::construct()\"\r\n    template <class T, enable_if_t<is_lvalue_reference_to_const<T> && is_convertible_v<T, allocator_type>, int> = 0>\r\n    lwg_2586(T&&) {}\r\n    template <class T, enable_if_t<!is_lvalue_reference_to_const<T> || !is_convertible_v<T, allocator_type>, int> = 0>\r\n    lwg_2586(T&&) = delete;\r\n};\r\n\r\nvoid test_case_LWG_2586() {\r\n    // LWG-2586: \"Wrong value category used in scoped_allocator_adaptor::construct()\"\r\n    {\r\n        scoped_allocator_adaptor<allocator<lwg_2586>> sa;\r\n        const auto ptr = sa.allocate(1);\r\n        sa.construct(ptr);\r\n        sa.destroy(ptr);\r\n        sa.deallocate(ptr, 1);\r\n    }\r\n    {\r\n        scoped_allocator_adaptor<allocator<pair<lwg_2586, lwg_2586>>> sa;\r\n        const auto ptr = sa.allocate(1);\r\n        sa.construct(ptr);\r\n        sa.destroy(ptr);\r\n        sa.deallocate(ptr, 1);\r\n    }\r\n}\r\n\r\nstruct lwg_4312 {\r\n    using allocator_type = allocator<lwg_4312>;\r\n    lwg_4312(allocator_arg_t&&, const allocator_type&) {}\r\n    lwg_4312(allocator_arg_t&, const allocator_type&)       = delete;\r\n    lwg_4312(const allocator_arg_t&, const allocator_type&) = delete;\r\n\r\n    // Also test LWG-3187 \"P0591R4 reverted DR 2586 fixes to scoped_allocator_adaptor::construct()\"\r\n    template <class T, enable_if_t<is_lvalue_reference_to_const<T> && is_convertible_v<T, allocator_type>, int> = 0>\r\n    lwg_4312(allocator_arg_t&&, T&&) {}\r\n    template <class T, enable_if_t<!is_lvalue_reference_to_const<T> || !is_convertible_v<T, allocator_type>, int> = 0>\r\n    lwg_4312(allocator_arg_t&&, T&&) = delete;\r\n};\r\n\r\nvoid test_case_LWG_4312() {\r\n    // LWG-4312 \"Const and value category mismatch for allocator_arg_t/allocator_arg in the description of\r\n    // uses-allocator construction\"\r\n    {\r\n        scoped_allocator_adaptor<allocator<lwg_4312>> sa;\r\n        const auto ptr = sa.allocate(1);\r\n        sa.construct(ptr);\r\n        sa.destroy(ptr);\r\n        sa.deallocate(ptr, 1);\r\n    }\r\n    {\r\n        scoped_allocator_adaptor<allocator<pair<lwg_4312, lwg_4312>>> sa;\r\n        const auto ptr = sa.allocate(1);\r\n        sa.construct(ptr);\r\n        sa.destroy(ptr);\r\n        sa.deallocate(ptr, 1);\r\n    }\r\n}\r\n\r\nvoid test_case_move_rebind_one_alloc() {\r\n    scoped_allocator_adaptor<allocator<int>> sa;\r\n    scoped_allocator_adaptor<allocator<double>> target(move(sa));\r\n}\r\n\r\nnamespace test_LWG_2782 {\r\n    // LWG-2782: \"scoped_allocator_adaptor constructors must be constrained\"\r\n    // Verify prerequisites\r\n    STATIC_ASSERT(!is_constructible_v<allocator<int>, void*>);\r\n    STATIC_ASSERT(!is_constructible_v<allocator<int>, min_alloc<int>>);\r\n    STATIC_ASSERT(!is_constructible_v<allocator<int>, const min_alloc<int>&>);\r\n\r\n    using SA  = scoped_allocator_adaptor<allocator<int>>;\r\n    using SAA = scoped_allocator_adaptor<allocator<int>, allocator<int>>;\r\n    using SM  = scoped_allocator_adaptor<min_alloc<int>>;\r\n    using SMA = scoped_allocator_adaptor<min_alloc<int>, allocator<int>>;\r\n\r\n    // Actual tests\r\n    STATIC_ASSERT(is_constructible_v<SA, allocator<float>>);\r\n    STATIC_ASSERT(!is_constructible_v<SA, void*>);\r\n    STATIC_ASSERT(is_constructible_v<SAA, allocator<float>, allocator<float>>);\r\n    STATIC_ASSERT(!is_constructible_v<SAA, void*, allocator<int>>);\r\n\r\n    STATIC_ASSERT(is_constructible_v<SA, const scoped_allocator_adaptor<allocator<float>>&>);\r\n    STATIC_ASSERT(!is_constructible_v<SA, const SM&>);\r\n    STATIC_ASSERT(is_constructible_v<SAA, const scoped_allocator_adaptor<allocator<float>, allocator<int>>&>);\r\n    STATIC_ASSERT(!is_constructible_v<SAA, const SMA&>);\r\n\r\n    STATIC_ASSERT(is_constructible_v<SA, scoped_allocator_adaptor<allocator<float>>>);\r\n    STATIC_ASSERT(!is_constructible_v<SA, SM>);\r\n    STATIC_ASSERT(is_constructible_v<SAA, scoped_allocator_adaptor<allocator<float>, allocator<int>>>);\r\n    STATIC_ASSERT(!is_constructible_v<SAA, SMA>);\r\n} // namespace test_LWG_2782\r\n\r\nint main() {\r\n    test_case_VSO_129349_non_default_constructible_allocators();\r\n    test_case_VSO_184838_scoped_allocator_assignment_conversions();\r\n    test_case_VSO_224478_allow_stacking();\r\n    test_case_VSO_224478_piecewise_construct_calls_allocator_construct();\r\n    test_case_LWG_2586();\r\n    test_case_LWG_4312();\r\n    test_case_move_rebind_one_alloc();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0226079_mutex/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR\"\r\n*\tPM_CL=\"\"\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0226079_mutex/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <chrono>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <exception>\r\n#include <mutex>\r\n#include <shared_mutex>\r\n#include <string>\r\n#include <system_error>\r\n#include <thread>\r\n#include <utility>\r\n\r\n#pragma warning(push) // TRANSITION, OS-23694920\r\n#pragma warning(disable : 4668) // 'MEOW' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'\r\n#include <Windows.h>\r\n#pragma warning(pop)\r\n\r\nusing namespace std;\r\nusing namespace std::chrono;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n[[noreturn]] void api_unexpected(const char* const api_name) {\r\n    const DWORD lastError = ::GetLastError();\r\n    const string msg      = system_category().message(static_cast<int>(lastError));\r\n    printf(\"%s failed; GetLastError: 0x%08lX\\n%s\", api_name, lastError, msg.c_str());\r\n    abort();\r\n}\r\n\r\nHANDLE create_event() {\r\n    const HANDLE result = ::CreateEventW(nullptr, FALSE, FALSE, nullptr);\r\n    if (result == nullptr) {\r\n        api_unexpected(\"CreateEventW\");\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nvoid wait_event(const HANDLE event) {\r\n    const DWORD waitAnswer = ::WaitForSingleObject(event, INFINITE);\r\n    if (waitAnswer != WAIT_OBJECT_0) {\r\n        api_unexpected(\"WaitForSingleObject\");\r\n    }\r\n}\r\n\r\nvoid signal_event(const HANDLE event) {\r\n    if (::SetEvent(event) == 0) {\r\n        api_unexpected(\"SetEvent\");\r\n    }\r\n}\r\n\r\nvoid close_handle(const HANDLE h) {\r\n    if (::CloseHandle(h) == 0) {\r\n        api_unexpected(\"CloseHandle\");\r\n    }\r\n}\r\n\r\ntemplate <typename Mutex>\r\nclass other_mutex_thread {\r\n    enum class message { idle, shutdown, lock, tryLock, unlock, unlockDelayed };\r\n\r\n    Mutex& mtx;\r\n    const HANDLE backgroundEvent;\r\n    const HANDLE foregroundEvent;\r\n    thread thd;\r\n    message currentMessage;\r\n    bool tryLockSuccess;\r\n\r\n    void thread_func() {\r\n        for (;;) {\r\n            wait_event(backgroundEvent);\r\n            const message sentMessage = exchange(currentMessage, message::idle);\r\n            switch (sentMessage) {\r\n            case message::lock:\r\n                mtx.lock();\r\n                break;\r\n            case message::tryLock:\r\n                tryLockSuccess = mtx.try_lock();\r\n                break;\r\n            case message::unlockDelayed:\r\n                this_thread::sleep_for(50ms);\r\n                mtx.unlock();\r\n                break;\r\n            case message::unlock:\r\n                mtx.unlock();\r\n                break;\r\n            case message::shutdown:\r\n                // nothing to do\r\n                break;\r\n            case message::idle:\r\n            default:\r\n                assert(!\"Bad message received on background thread\");\r\n            }\r\n\r\n            signal_event(foregroundEvent);\r\n            if (sentMessage == message::shutdown) {\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    void send_message(const message msg) {\r\n        currentMessage = msg;\r\n        signal_event(backgroundEvent);\r\n        wait_event(foregroundEvent);\r\n    }\r\n\r\npublic:\r\n    explicit other_mutex_thread(Mutex& targetMtx)\r\n        : mtx(targetMtx), backgroundEvent(create_event()), foregroundEvent(create_event()),\r\n          thd(&other_mutex_thread::thread_func, this), currentMessage(message::idle), tryLockSuccess(false) {}\r\n\r\n    ~other_mutex_thread() {\r\n        close_handle(backgroundEvent);\r\n        close_handle(foregroundEvent);\r\n    }\r\n\r\n    void join() {\r\n        send_message(message::shutdown);\r\n        thd.join();\r\n    }\r\n\r\n    void lock() {\r\n        send_message(message::lock);\r\n    }\r\n\r\n    bool try_lock() {\r\n        send_message(message::tryLock);\r\n        return tryLockSuccess;\r\n    }\r\n\r\n    void unlock() {\r\n        send_message(message::unlock);\r\n    }\r\n\r\n    void unlock_delayed() {\r\n        currentMessage = message::unlockDelayed;\r\n        signal_event(backgroundEvent);\r\n    }\r\n\r\n    void finish_delayed() {\r\n        wait_event(foregroundEvent);\r\n    }\r\n};\r\n\r\ntemplate <typename Func>\r\nnanoseconds time_execution(Func&& f) {\r\n    const auto startTime = steady_clock::now();\r\n    forward<Func>(f)();\r\n    return duration_cast<nanoseconds>(steady_clock::now() - startTime);\r\n}\r\n\r\ntemplate <typename Mutex>\r\nstruct mutex_test_fixture {\r\n    Mutex mtx;\r\n    Mutex mtx2;\r\n    other_mutex_thread<Mutex> ot;\r\n\r\n    mutex_test_fixture() : mtx(), mtx2(), ot(mtx) {}\r\n\r\n    ~mutex_test_fixture() {\r\n        ot.join();\r\n    }\r\n\r\n    void test_lockable() {\r\n        mtx.lock();\r\n        mtx.unlock();\r\n        assert(mtx.try_lock());\r\n        mtx.unlock();\r\n\r\n        ot.lock();\r\n        assert(!mtx.try_lock());\r\n        ot.unlock();\r\n\r\n        test_guard<lock_guard<Mutex>>();\r\n        test_guard<unique_lock<Mutex>>();\r\n\r\n        { // unique_lock constructor, move constructor, move assignment\r\n            unique_lock<Mutex> ulOuter;\r\n            STATIC_ASSERT(noexcept(unique_lock<Mutex>()));\r\n            assert(!ulOuter.owns_lock());\r\n            assert(!ulOuter);\r\n            assert(ulOuter.mutex() == nullptr);\r\n\r\n            {\r\n                unique_lock<Mutex> ul(mtx);\r\n                assert(!ot.try_lock());\r\n                assert(ul.owns_lock());\r\n                assert(static_cast<bool>(ul));\r\n                assert(ul.mutex() == &mtx);\r\n\r\n                unique_lock<Mutex> ulMoveConstructed(move(ul));\r\n                assert(!ul);\r\n                assert(ul.mutex() == nullptr);\r\n                assert(static_cast<bool>(ulMoveConstructed));\r\n                assert(ulMoveConstructed.mutex() == &mtx);\r\n\r\n                ulOuter = move(ulMoveConstructed);\r\n                assert(!ulMoveConstructed);\r\n            }\r\n\r\n            assert(static_cast<bool>(ulOuter));\r\n        }\r\n\r\n        { // unique_lock defer\r\n            STATIC_ASSERT(noexcept(unique_lock<Mutex>(mtx, defer_lock)));\r\n            unique_lock<Mutex> ul(mtx, defer_lock);\r\n            assert(!ul);\r\n            assert(ot.try_lock());\r\n            ot.unlock();\r\n        }\r\n\r\n        { // unique_lock try_to_lock success\r\n            unique_lock<Mutex> ul(mtx, try_to_lock);\r\n            assert(static_cast<bool>(ul));\r\n            assert(!ot.try_lock());\r\n        }\r\n\r\n        assert(ot.try_lock());\r\n\r\n        { // unique_lock try_to_lock failure\r\n            unique_lock<Mutex> ul(mtx, try_to_lock);\r\n            assert(!ul);\r\n        }\r\n\r\n        ot.unlock();\r\n\r\n        { // swap with empty object\r\n            unique_lock<Mutex> ulLeft(mtx);\r\n            unique_lock<Mutex> ulRight;\r\n            assert(static_cast<bool>(ulLeft));\r\n            assert(!ulRight);\r\n            swap(ulLeft, ulRight);\r\n            assert(!ulLeft);\r\n            assert(static_cast<bool>(ulRight));\r\n        }\r\n\r\n        { // swap objects\r\n            unique_lock<Mutex> ulLeft(mtx);\r\n            unique_lock<Mutex> ulRight(mtx2);\r\n            assert(ulLeft.mutex() == &mtx);\r\n            assert(ulRight.mutex() == &mtx2);\r\n            STATIC_ASSERT(noexcept(swap(ulLeft, ulRight)));\r\n            swap(ulLeft, ulRight);\r\n            assert(ulLeft.mutex() == &mtx2);\r\n            assert(ulRight.mutex() == &mtx);\r\n            STATIC_ASSERT(noexcept(ulLeft.swap(ulRight)));\r\n            ulLeft.swap(ulRight);\r\n            assert(ulLeft.mutex() == &mtx);\r\n            assert(ulRight.mutex() == &mtx2);\r\n        }\r\n\r\n        { // lock/try_lock/unlock\r\n            unique_lock<Mutex> ul(mtx);\r\n            assert(!ot.try_lock());\r\n            ul.unlock();\r\n            assert(ot.try_lock());\r\n            assert(!ul.try_lock());\r\n            ot.unlock();\r\n            assert(ul.try_lock());\r\n            ul.unlock();\r\n            ul.lock();\r\n        }\r\n\r\n        { // release\r\n            unique_lock<Mutex> ul(mtx);\r\n            assert(&mtx == ul.release());\r\n        }\r\n\r\n        assert(!ot.try_lock());\r\n        mtx.unlock();\r\n    }\r\n\r\n    template <typename Guard>\r\n    void test_guard() {\r\n        {\r\n            Guard lg(mtx);\r\n            assert(!ot.try_lock());\r\n        }\r\n\r\n        {\r\n            mtx.lock();\r\n            Guard lg(mtx, adopt_lock);\r\n            assert(!ot.try_lock());\r\n        }\r\n\r\n        assert(ot.try_lock());\r\n        ot.unlock();\r\n    }\r\n\r\n    void test_timed_lockable() {\r\n        // Test acquiring locks successfully\r\n        assert(time_execution([this] { assert(mtx.try_lock_for(24h)); }) < 1h);\r\n        mtx.unlock();\r\n        assert(time_execution([this] { assert(mtx.try_lock_until(steady_clock::now() + 24h)); }) < 1h);\r\n        mtx.unlock();\r\n        assert(time_execution([this] {\r\n            unique_lock<Mutex> ul(mtx, defer_lock);\r\n            assert(ul.try_lock_for(24h));\r\n        }) < 1h);\r\n        assert(time_execution([this] {\r\n            unique_lock<Mutex> ul(mtx, 24h);\r\n            assert(ul.owns_lock());\r\n        }) < 1h);\r\n        assert(time_execution([this] {\r\n            unique_lock<Mutex> ul(mtx, defer_lock);\r\n            assert(ul.try_lock_until(steady_clock::now() + 24h));\r\n        }) < 1h);\r\n        assert(time_execution([this] {\r\n            unique_lock<Mutex> ul(mtx, steady_clock::now() + 24h);\r\n            assert(ul.owns_lock());\r\n        }) < 1h);\r\n\r\n        // Test failing to acquire locks on timeout\r\n        ot.lock();\r\n        assert(time_execution([this] { assert(!mtx.try_lock_for(50ms)); }) >= 50ms);\r\n        assert(time_execution([this] { assert(!mtx.try_lock_until(steady_clock::now() + 50ms)); }) >= 50ms);\r\n        assert(time_execution([this] {\r\n            unique_lock<Mutex> ul(mtx, defer_lock);\r\n            assert(!ul.try_lock_for(50ms));\r\n        }) >= 50ms);\r\n        assert(time_execution([this] {\r\n            unique_lock<Mutex> ul(mtx, 50ms);\r\n            assert(!ul.owns_lock());\r\n        }) >= 50ms);\r\n        assert(time_execution([this] {\r\n            unique_lock<Mutex> ul(mtx, defer_lock);\r\n            assert(!ul.try_lock_until(steady_clock::now() + 50ms));\r\n        }) >= 50ms);\r\n        assert(time_execution([this] {\r\n            unique_lock<Mutex> ul(mtx, steady_clock::now() + 50ms);\r\n            assert(!ul.owns_lock());\r\n        }) >= 50ms);\r\n        ot.unlock();\r\n    }\r\n\r\n    void test_recursive_lockable() {\r\n        mtx.lock();\r\n        assert(!ot.try_lock());\r\n        mtx.lock();\r\n        assert(!ot.try_lock());\r\n        assert(mtx.try_lock());\r\n        mtx.unlock();\r\n        assert(!ot.try_lock());\r\n        mtx.unlock();\r\n        mtx.unlock();\r\n        assert(ot.try_lock());\r\n        ot.unlock();\r\n    }\r\n};\r\n\r\nstruct throwing_mutex_threw : exception {\r\n    using exception::exception;\r\n};\r\n\r\nstruct throwing_mutex {\r\n    void lock() {\r\n        throw throwing_mutex_threw();\r\n    }\r\n\r\n    bool try_lock() {\r\n        throw throwing_mutex_threw();\r\n    }\r\n\r\n    void unlock() {}\r\n};\r\n\r\nvoid test_nonmember_lock() {\r\n    mutex mtx;\r\n    other_mutex_thread<mutex> ot(mtx);\r\n\r\n    recursive_mutex rMtx;\r\n    timed_mutex tMtx;\r\n\r\n    recursive_timed_mutex rtMtx;\r\n    other_mutex_thread<recursive_timed_mutex> rtOt(rtMtx);\r\n\r\n    lock(mtx, rMtx, tMtx, rtMtx);\r\n    mtx.unlock();\r\n    rMtx.unlock();\r\n    tMtx.unlock();\r\n    rtMtx.unlock();\r\n\r\n    ot.lock();\r\n    rtOt.lock();\r\n    ot.unlock_delayed(); // no timing assumptions: lock() retries until it\r\n    rtOt.unlock_delayed(); // can lock all input mutexes\r\n    lock(rtMtx, tMtx, mtx, rMtx);\r\n    mtx.unlock();\r\n    rMtx.unlock();\r\n    tMtx.unlock();\r\n    rtMtx.unlock();\r\n    ot.finish_delayed();\r\n    rtOt.finish_delayed();\r\n\r\n    throwing_mutex throwing;\r\n    try {\r\n        lock(rtMtx, mtx, throwing); // throws\r\n        abort();\r\n    } catch (const throwing_mutex_threw&) {\r\n        assert(ot.try_lock()); // check that other mutexes unlocked after throw\r\n        ot.unlock();\r\n        assert(rtOt.try_lock());\r\n        rtOt.unlock();\r\n    }\r\n\r\n    ot.join();\r\n    rtOt.join();\r\n}\r\n\r\nvoid test_nonmember_try_lock() {\r\n    mutex mtx;\r\n    other_mutex_thread<mutex> ot(mtx);\r\n\r\n    recursive_mutex rMtx;\r\n    timed_mutex tMtx;\r\n\r\n    recursive_timed_mutex rtMtx;\r\n    other_mutex_thread<recursive_timed_mutex> rtOt(rtMtx);\r\n\r\n    // try_lock with all mutexes unlocked\r\n    assert(try_lock(mtx, rMtx, tMtx, rtMtx) == -1);\r\n    mtx.unlock();\r\n    rMtx.unlock();\r\n    tMtx.unlock();\r\n    rtMtx.unlock();\r\n\r\n    // try_lock with some mutexes locked\r\n    rtOt.lock();\r\n    assert(try_lock(mtx, rMtx, tMtx, rtMtx) == 3);\r\n    assert(ot.try_lock());\r\n    ot.unlock();\r\n    rtOt.unlock();\r\n\r\n    // try_lock with throw\r\n    throwing_mutex throwing;\r\n    try {\r\n        (void) try_lock(mtx, rtMtx, throwing);\r\n        abort();\r\n    } catch (const throwing_mutex_threw&) {\r\n        assert(ot.try_lock()); // check that other mutexes unlocked after throw\r\n        ot.unlock();\r\n        assert(rtOt.try_lock());\r\n        rtOt.unlock();\r\n    }\r\n\r\n    ot.join();\r\n    rtOt.join();\r\n}\r\n\r\n// Also test VSO-1253916, in which RWC like the following broke when we annotated unique_lock with [[nodiscard]].\r\nunique_lock<shared_mutex> do_locked_things(unique_lock<shared_mutex> lck) {\r\n    return lck;\r\n}\r\n\r\nshared_lock<shared_mutex> do_shared_locked_things(shared_lock<shared_mutex> lck) {\r\n    return lck;\r\n}\r\n\r\nvoid test_vso_1253916() {\r\n    shared_mutex mtx;\r\n    do_locked_things(unique_lock<shared_mutex>{mtx});\r\n    do_shared_locked_things(shared_lock<shared_mutex>{mtx});\r\n}\r\n\r\n#ifndef _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR\r\nstruct test_constexpr_ctor {\r\n    constexpr test_constexpr_ctor() {}\r\n    mutex mtx;\r\n};\r\n\r\ntest_constexpr_ctor obj;\r\n#if _HAS_CXX20 && !defined(_M_CEE)\r\nconstinit test_constexpr_ctor obj2;\r\n#endif // _HAS_CXX20 && !defined(_M_CEE)\r\n#endif // !defined(_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR)\r\n\r\nint main() {\r\n    {\r\n        mutex_test_fixture<mutex> fixture;\r\n        fixture.test_lockable();\r\n    }\r\n\r\n    {\r\n        mutex_test_fixture<timed_mutex> fixture;\r\n        fixture.test_lockable();\r\n        fixture.test_timed_lockable();\r\n    }\r\n\r\n    {\r\n        mutex_test_fixture<recursive_mutex> fixture;\r\n        fixture.test_lockable();\r\n        fixture.test_recursive_lockable();\r\n    }\r\n\r\n    {\r\n        mutex_test_fixture<recursive_timed_mutex> fixture;\r\n        fixture.test_lockable();\r\n        fixture.test_timed_lockable();\r\n        fixture.test_recursive_lockable();\r\n    }\r\n\r\n    {\r\n        mutex_test_fixture<shared_mutex> fixture;\r\n        fixture.test_lockable();\r\n        // shared-ownership locking behavior tested in Dev11_1150223_shared_mutex\r\n    }\r\n\r\n    {\r\n        mutex_test_fixture<shared_timed_mutex> fixture;\r\n        fixture.test_lockable();\r\n        fixture.test_timed_lockable();\r\n    }\r\n\r\n    test_nonmember_lock();\r\n    test_nonmember_try_lock();\r\n\r\n    test_vso_1253916();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0234888_num_get_overflows/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0234888_num_get_overflows/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdint>\r\n#include <iostream>\r\n#include <limits>\r\n#include <locale>\r\n#include <sstream>\r\n#include <string>\r\n#include <type_traits>\r\n\r\n#pragma warning(disable : 4984) // if constexpr is a C++17 language extension\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wc++17-extensions\"\r\n#endif // __clang__\r\n\r\nusing namespace std;\r\n\r\ntemplate <class UInt>\r\nvoid test_case_unsigned(const string& maxValue, const string& maxValuePlusOne) {\r\n    // See N4944 [facet.num.get.virtuals]/3.9\r\n    // * \"zero, if the conversion function does not convert the entire field\"\r\n    {\r\n        istringstream src(\"-\"s);\r\n        UInt result = 42;\r\n        src >> result;\r\n        assert(result == 0);\r\n        assert(src.rdstate() == (ios_base::failbit | ios_base::eofbit));\r\n    }\r\n\r\n    // * \"if the field to be converted to a signed integer type\" doesn't apply here\r\n    // * \"the most positive representable value, if the field to be converted to an\r\n    //   unsigned integer type represents a value that cannot be represented in val\".\r\n    {\r\n        istringstream src(maxValuePlusOne);\r\n        UInt result = 42;\r\n        src >> result;\r\n        assert(result == numeric_limits<UInt>::max());\r\n        // If the conversion function does not convert the entire field, or if\r\n        // the field represents a value outside the range of representable values, ios_base::failbit\r\n        // is assigned to err.\r\n        assert(src.rdstate() == (ios_base::failbit | ios_base::eofbit));\r\n    }\r\n\r\n    // Check that it's actually assigning, not bitwise-OR-ing in failbit:\r\n    {\r\n        UInt result = 42;\r\n        istringstream src(maxValuePlusOne + \" \");\r\n        ios_base::iostate state = ios_base::badbit;\r\n        use_facet<num_get<char>>(src.getloc()).get(src, nullptr, src, state, result);\r\n        assert(state == ios_base::failbit); // asserts that badbit was cleared\r\n    }\r\n\r\n    // * \"the converted value, otherwise.\"\r\n    {\r\n        istringstream src(\"0\"s);\r\n        UInt result = 42;\r\n        src >> result;\r\n        assert(result == 0);\r\n        assert(src.rdstate() == ios_base::eofbit);\r\n    }\r\n\r\n    {\r\n        istringstream src(\"-0\"s);\r\n        UInt result = 42;\r\n        src >> result;\r\n        assert(result == 0);\r\n        assert(src.rdstate() == ios_base::eofbit);\r\n    }\r\n\r\n    {\r\n        istringstream src(maxValue);\r\n        UInt result = 42;\r\n        src >> result;\r\n        assert(result == numeric_limits<UInt>::max());\r\n        assert(src.rdstate() == ios_base::eofbit);\r\n    }\r\n\r\n    {\r\n        istringstream src(\"-\" + maxValue);\r\n        UInt result = 42;\r\n        src >> result;\r\n        assert(result == 1);\r\n        assert(src.rdstate() == ios_base::eofbit);\r\n    }\r\n}\r\n\r\ntemplate <class Int>\r\nvoid test_case_signed(\r\n    const string& minValueMinusOne, const string& minValue, const string& maxValue, const string& maxValuePlusOne) {\r\n    // See N4944 [facet.num.get.virtuals]/3.9\r\n    // * \"zero, if the conversion function does not convert the entire field\"\r\n    {\r\n        istringstream src(\"-\"s);\r\n        Int result = 42;\r\n        src >> result;\r\n        assert(result == 0);\r\n        assert(src.rdstate() == (ios_base::failbit | ios_base::eofbit));\r\n    }\r\n\r\n    // * \"the most positive (or negative) representable value, if the field to be\r\n    //   converted to a signed integer type represents a value too large positive\r\n    //   (or negative) to be represented in val.\"\r\n    {\r\n        istringstream src(minValueMinusOne);\r\n        Int result = 42;\r\n        src >> result;\r\n        assert(result == numeric_limits<Int>::min());\r\n        // If the conversion function does not convert the entire field, or if\r\n        // the field represents a value outside the range of representable values, ios_base::failbit\r\n        // is assigned to err.\r\n        assert(src.rdstate() == (ios_base::failbit | ios_base::eofbit));\r\n    }\r\n\r\n    {\r\n        istringstream src(maxValuePlusOne);\r\n        Int result = 42;\r\n        src >> result;\r\n        assert(result == numeric_limits<Int>::max());\r\n        assert(src.rdstate() == (ios_base::failbit | ios_base::eofbit));\r\n    }\r\n\r\n    // Check that it's actually assigning, not bitwise-OR-ing in failbit:\r\n    if constexpr (!is_same_v<Int, short> && !is_same_v<Int, int>) {\r\n        Int result = 42;\r\n        istringstream src(maxValuePlusOne + \" \");\r\n        ios_base::iostate state = ios_base::badbit;\r\n        use_facet<num_get<char>>(src.getloc()).get(src, nullptr, src, state, result);\r\n        assert(state == ios_base::failbit); // asserts that badbit was cleared\r\n    }\r\n\r\n    // * \"if the field to be converted to an unsigned integer type\" doesn't apply here\r\n\r\n    // * \"the converted value, otherwise.\"\r\n    {\r\n        istringstream src(\"0\"s);\r\n        Int result = 42;\r\n        src >> result;\r\n        assert(result == 0);\r\n        assert(src.rdstate() == ios_base::eofbit);\r\n    }\r\n\r\n    {\r\n        istringstream src(\"-0\"s);\r\n        Int result = 42;\r\n        src >> result;\r\n        assert(result == 0);\r\n        assert(src.rdstate() == ios_base::eofbit);\r\n    }\r\n\r\n    {\r\n        istringstream src(minValue);\r\n        Int result = 42;\r\n        src >> result;\r\n        assert(result == numeric_limits<Int>::min());\r\n        assert(src.rdstate() == ios_base::eofbit);\r\n    }\r\n\r\n    {\r\n        istringstream src(maxValue);\r\n        Int result = 42;\r\n        src >> result;\r\n        assert(result == numeric_limits<Int>::max());\r\n        assert(src.rdstate() == ios_base::eofbit);\r\n    }\r\n\r\n    {\r\n        istringstream src(\"-\" + maxValue);\r\n        Int result = 42;\r\n        src >> result;\r\n        assert(result == -numeric_limits<Int>::max());\r\n        assert(src.rdstate() == ios_base::eofbit);\r\n    }\r\n}\r\n\r\ntemplate <class Float>\r\nvoid test_case_float(const string& outOfRangeValue) {\r\n    // reals don't get any of the int special cases and always have the converted value\r\n    {\r\n        istringstream src(outOfRangeValue);\r\n        Float result = 17.49f;\r\n        src >> result;\r\n        assert(result == numeric_limits<Float>::infinity());\r\n        assert(src.rdstate() == (ios_base::failbit | ios_base::eofbit));\r\n    }\r\n\r\n    {\r\n        istringstream src(\"-\" + outOfRangeValue);\r\n        Float result = 17.49f;\r\n        src >> result;\r\n        assert(result == -numeric_limits<Float>::infinity());\r\n        assert(src.rdstate() == (ios_base::failbit | ios_base::eofbit));\r\n    }\r\n\r\n    // Check that it's actually assigning, not bitwise-OR-ing in failbit:\r\n    {\r\n        istringstream src(outOfRangeValue + \" \");\r\n        Float result            = 17.49f;\r\n        ios_base::iostate state = ios_base::badbit;\r\n        use_facet<num_get<char>>(src.getloc()).get(src, nullptr, src, state, result);\r\n        assert(state == ios_base::failbit); // asserts that badbit was cleared\r\n    }\r\n}\r\n\r\nvoid test_case_direct_float_without_intermediate_double() {\r\n    // Magic number from LWG-2403 which produces different results when converted to double\r\n    // and then rounded to float vs. being converted to float directly.\r\n    // Extra space at the end to avoid getting eofbit set.\r\n    const auto boundary       = \"1.999999821186065729339276231257827021181583404541015625 \"s;\r\n    const auto direct         = stof(boundary);\r\n    const auto indirectDouble = stod(boundary);\r\n    const auto indirect       = static_cast<float>(indirectDouble);\r\n    assert(direct != indirect);\r\n\r\n    {\r\n        istringstream src(boundary);\r\n        float actual;\r\n        src >> actual;\r\n        assert(src.good());\r\n        assert(actual == direct);\r\n    }\r\n\r\n    {\r\n        istringstream src(boundary);\r\n        double actual;\r\n        src >> actual;\r\n        assert(src.good());\r\n        assert(actual == indirectDouble);\r\n        assert(static_cast<float>(actual) == indirect);\r\n    }\r\n}\r\n\r\nvoid test_case_bool() {\r\n    const char* const badCases[] = {\"-1\", \"2\", \"2147483647\", \"2147483648\", \"-2147483648\"};\r\n    for (const auto& badCase : badCases) {\r\n        istringstream src(badCase);\r\n        bool result = false;\r\n        src >> result;\r\n        assert(result);\r\n        assert(src.rdstate() == (ios_base::failbit | ios_base::eofbit));\r\n    }\r\n\r\n    {\r\n        istringstream src(\"0\"s);\r\n        bool result = true;\r\n        src >> result;\r\n        assert(!result);\r\n        assert(src.rdstate() == ios_base::eofbit);\r\n    }\r\n\r\n    {\r\n        istringstream src(\"1\"s);\r\n        bool result = false;\r\n        src >> result;\r\n        assert(result);\r\n        assert(src.rdstate() == ios_base::eofbit);\r\n    }\r\n}\r\n\r\nvoid test_case_void_ptr() {\r\n    {\r\n        istringstream src(\"0xFFFFFFFF\"s);\r\n        void* result;\r\n        src >> result;\r\n        assert(reinterpret_cast<uintptr_t>(result) == 0xFFFFFFFF);\r\n        assert(src.rdstate() == ios_base::eofbit);\r\n    }\r\n\r\n#ifdef _WIN64\r\n    {\r\n        istringstream src(\"0xFFFFFFFFFFFFFFFF\"s);\r\n        void* result;\r\n        src >> result;\r\n        assert(reinterpret_cast<uintptr_t>(result) == 0xFFFFFFFFFFFFFFFF);\r\n        assert(src.rdstate() == ios_base::eofbit);\r\n    }\r\n#endif // _WIN64\r\n\r\n    {\r\n        istringstream src(\"0x10000000000000000\"s);\r\n        void* result;\r\n        src >> result;\r\n        assert(result == nullptr);\r\n        assert(src.rdstate() == (ios_base::failbit | ios_base::eofbit));\r\n    }\r\n\r\n    // Check that it's actually assigning, not bitwise-OR-ing in failbit:\r\n    {\r\n        istringstream src(\"0x10000000000000000 \"s);\r\n        void* result;\r\n        ios_base::iostate state = ios_base::badbit;\r\n        use_facet<num_get<char>>(src.getloc()).get(src, nullptr, src, state, result);\r\n        assert(result == nullptr);\r\n        assert(state == ios_base::failbit); // asserts that badbit was cleared\r\n    }\r\n}\r\n\r\nint main() {\r\n    test_case_unsigned<unsigned short>(\"65535\"s, \"65536\"s);\r\n    // also stress overflow in intermediate conversion to unsigned long:\r\n    test_case_unsigned<unsigned short>(\"65535\"s, \"4294967296\"s);\r\n    test_case_unsigned<unsigned int>(\"4294967295\"s, \"4294967296\"s);\r\n    test_case_unsigned<unsigned long>(\"4294967295\"s, \"4294967296\"s);\r\n    test_case_unsigned<unsigned long long>(\"18446744073709551615\"s, \"18446744073709551616\"s);\r\n\r\n    test_case_signed<short>(\"-32769\"s, \"-32768\"s, \"32767\"s, \"32768\"s);\r\n    // also stress overflow in intermediate conversion to long:\r\n    test_case_signed<short>(\"-2147483649\"s, \"-32768\"s, \"32767\"s, \"2147483648\"s);\r\n    test_case_signed<int>(\"-2147483649\"s, \"-2147483648\"s, \"2147483647\"s, \"2147483648\"s);\r\n    test_case_signed<long>(\"-2147483649\"s, \"-2147483648\"s, \"2147483647\"s, \"2147483648\"s);\r\n    test_case_signed<long long>(\r\n        \"-9223372036854775809\"s, \"-9223372036854775808\"s, \"9223372036854775807\"s, \"9223372036854775808\"s);\r\n\r\n    test_case_float<float>(\"1e39\"s);\r\n    test_case_float<float>(\"1e399\"s);\r\n    test_case_float<double>(\"1e399\"s);\r\n    test_case_float<long double>(\"1e399\"s);\r\n\r\n    test_case_direct_float_without_intermediate_double();\r\n    test_case_bool();\r\n    test_case_void_ptr();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0397980_codecvt_length/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\char8_t_impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0397980_codecvt_length/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING\r\n#define _SILENCE_CXX20_CODECVT_FACETS_DEPRECATION_WARNING\r\n#define _SILENCE_CXX20_CODECVT_CHAR8_T_FACETS_DEPRECATION_WARNING\r\n\r\n#undef _ENFORCE_FACET_SPECIALIZATIONS\r\n#define _ENFORCE_FACET_SPECIALIZATIONS 0\r\n\r\n#include <cassert>\r\n#include <codecvt>\r\n#include <cstdlib>\r\n#include <iterator>\r\n#include <locale>\r\n#include <ostream>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\n// Also validate deleted stream inserters for char8_t and pointer-to-char8_t, speculatively implemented from P1423R1.\r\n#ifdef __cpp_char8_t\r\ntemplate <class T>\r\nconstexpr auto f(int) -> decltype(declval<ostream&>() << declval<T&>(), true) {\r\n    return true;\r\n}\r\ntemplate <class T>\r\nconstexpr bool f(...) {\r\n    return false;\r\n}\r\nSTATIC_ASSERT(f<int>(0));\r\nSTATIC_ASSERT(!f<void>(0));\r\nSTATIC_ASSERT(!f<char8_t>(0));\r\nSTATIC_ASSERT(!f<char8_t*>(0));\r\nSTATIC_ASSERT(!f<const char8_t*>(0));\r\n#endif // __cpp_char8_t\r\n\r\nint main() {\r\n    {\r\n        static constexpr char str[] = \"\\x20\\xC3\\xB4\\xEA\\xAF\\x8D\"; // u8\"\\u0020\\u00F4\\uABCD\"\r\n        constexpr auto length       = static_cast<int>(sizeof(str) - 1);\r\n        {\r\n            auto& cvt = use_facet<codecvt<char16_t, char, mbstate_t>>(locale::classic());\r\n            {\r\n                // validate codecvt<char16_t, char, mbstate_t>::in\r\n                char16_t actual[3];\r\n                const char* last1 = nullptr;\r\n                char16_t* last2   = nullptr;\r\n                mbstate_t state{};\r\n                auto result = cvt.in(state, str, str + length, last1, begin(actual), end(actual), last2);\r\n                assert(result == codecvt_base::ok);\r\n                assert(last1 == str + length);\r\n                assert(last2 == end(actual));\r\n                assert(actual[0] == u'\\u0020');\r\n                assert(actual[1] == u'\\u00f4');\r\n                assert(actual[2] == u'\\uabcd');\r\n            }\r\n            {\r\n                // validate codecvt<char16_t, char, mbstate_t>::length()\r\n                mbstate_t state{};\r\n                int actual = cvt.length(state, str, str + length, ~size_t{0});\r\n                assert(actual == length);\r\n                actual = cvt.length(state, str, str + length, size_t{3});\r\n                assert(actual == length);\r\n            }\r\n        }\r\n        {\r\n            // validate codecvt_utf8<char16_t>::length()\r\n            codecvt_utf8<char16_t> cvt;\r\n            mbstate_t state{};\r\n            int actual = cvt.length(state, str, str + length, ~size_t{0});\r\n            assert(actual == length);\r\n            actual = cvt.length(state, str, str + length, size_t{3});\r\n            assert(actual == length);\r\n        }\r\n        {\r\n            // validate codecvt_utf8<wchar_t>::length()\r\n            codecvt_utf8<wchar_t> cvt;\r\n            mbstate_t state{};\r\n            int actual = cvt.length(state, str, str + length, ~size_t{0});\r\n            assert(actual == length);\r\n            actual = cvt.length(state, str, str + length, size_t{3});\r\n            assert(actual == length);\r\n        }\r\n        {\r\n            auto& cvt = use_facet<codecvt<char32_t, char, mbstate_t>>(locale::classic());\r\n            {\r\n                // validate codecvt<char32_t, char, mbstate_t>::in()\r\n                char32_t actual[3];\r\n                const char* last1 = nullptr;\r\n                char32_t* last2   = nullptr;\r\n                mbstate_t state{};\r\n                auto result = cvt.in(state, str, str + length, last1, begin(actual), end(actual), last2);\r\n                assert(result == codecvt_base::ok);\r\n                assert(last1 == str + length);\r\n                assert(last2 == end(actual));\r\n                assert(actual[0] == U'\\u0020');\r\n                assert(actual[1] == U'\\u00f4');\r\n                assert(actual[2] == U'\\uabcd');\r\n            }\r\n            {\r\n                // validate codecvt<char32_t, char, mbstate_t>::length()\r\n                mbstate_t state{};\r\n                int actual = cvt.length(state, str, str + length, ~size_t{0});\r\n                assert(actual == length);\r\n                actual = cvt.length(state, str, str + length, size_t{3});\r\n                assert(actual == length);\r\n            }\r\n        }\r\n        {\r\n            // validate codecvt_utf8<char32_t>::length()\r\n            codecvt_utf8<char32_t> cvt;\r\n            mbstate_t state{};\r\n            int actual = cvt.length(state, str, str + length, ~size_t{0});\r\n            assert(actual == length);\r\n            actual = cvt.length(state, str, str + length, size_t{3});\r\n            assert(actual == length);\r\n        }\r\n    }\r\n    {\r\n        static constexpr char str[] = \"\\x20\\xf4\\xe2\";\r\n        constexpr auto length       = static_cast<int>(sizeof(str) - 1);\r\n        {\r\n            auto& cvt = use_facet<codecvt<wchar_t, char, mbstate_t>>(locale::classic());\r\n            {\r\n                // validate codecvt<wchar_t, char, mbstate_t>::in()\r\n                wchar_t actual[3];\r\n                const char* last1 = nullptr;\r\n                wchar_t* last2    = nullptr;\r\n                mbstate_t state{};\r\n                auto result = cvt.in(state, str, str + length, last1, begin(actual), end(actual), last2);\r\n                assert(result == codecvt_base::ok);\r\n                assert(last1 == str + length);\r\n                assert(last2 == end(actual));\r\n                assert(actual[0] == L'\\u0020');\r\n                assert(actual[1] == L'\\u00f4');\r\n                assert(actual[2] == L'\\u00e2');\r\n            }\r\n            {\r\n                // validate codecvt<wchar_t, char, mbstate_t>::length()\r\n                mbstate_t state{};\r\n                int actual = cvt.length(state, str, str + length, ~size_t{0});\r\n                assert(actual == length);\r\n                actual = cvt.length(state, str, str + length, size_t{3});\r\n                assert(actual == length);\r\n            }\r\n        }\r\n        {\r\n            auto& cvt = use_facet<codecvt<unsigned short, char, mbstate_t>>(locale::classic()); // extension\r\n            {\r\n                // validate codecvt<unsigned short, char, mbstate_t>::in()\r\n                unsigned short actual[3];\r\n                const char* last1     = nullptr;\r\n                unsigned short* last2 = nullptr;\r\n                mbstate_t state{};\r\n                auto result = cvt.in(state, str, str + length, last1, begin(actual), end(actual), last2);\r\n                assert(result == codecvt_base::ok);\r\n                assert(last1 == str + length);\r\n                assert(last2 == end(actual));\r\n                assert(actual[0] == L'\\u0020');\r\n                assert(actual[1] == L'\\u00f4');\r\n                assert(actual[2] == L'\\u00e2');\r\n            }\r\n            {\r\n                // validate codecvt<unsigned short, char, mbstate_t>::length()\r\n                mbstate_t state{};\r\n                int actual = cvt.length(state, str, str + length, ~size_t{0});\r\n                assert(actual == length);\r\n                actual = cvt.length(state, str, str + length, size_t{3});\r\n                assert(actual == length);\r\n            }\r\n        }\r\n    }\r\n\r\n#if _HAS_CXX17 && defined(__cpp_char8_t)\r\n    {\r\n        static constexpr char8_t str[] = u8\"\\u0020\\u00F4\\uABCD\";\r\n        constexpr auto length          = static_cast<int>(sizeof(str) - 1);\r\n        {\r\n            auto& cvt = use_facet<codecvt<char32_t, char8_t, mbstate_t>>(locale::classic());\r\n            {\r\n                char32_t actual[3];\r\n                const char8_t* last1 = nullptr;\r\n                char32_t* last2      = nullptr;\r\n                mbstate_t state{};\r\n                auto result = cvt.in(state, str, str + length, last1, begin(actual), end(actual), last2);\r\n                assert(result == codecvt_base::ok);\r\n                assert(last1 == str + length);\r\n                assert(last2 == end(actual));\r\n                assert(actual[0] == U'\\u0020');\r\n                assert(actual[1] == U'\\u00f4');\r\n                assert(actual[2] == U'\\uabcd');\r\n            }\r\n            {\r\n                mbstate_t state{};\r\n                int actual = cvt.length(state, str, str + length, ~size_t{0});\r\n                assert(actual == length);\r\n                actual = cvt.length(state, str, str + length, size_t{3});\r\n                assert(actual == length);\r\n            }\r\n        }\r\n        {\r\n            auto& cvt = use_facet<codecvt<char16_t, char8_t, mbstate_t>>(locale::classic());\r\n            {\r\n                char16_t actual[3];\r\n                const char8_t* last1 = nullptr;\r\n                char16_t* last2      = nullptr;\r\n                mbstate_t state{};\r\n                auto result = cvt.in(state, str, str + length, last1, begin(actual), end(actual), last2);\r\n                assert(result == codecvt_base::ok);\r\n                assert(last1 == str + length);\r\n                assert(last2 == end(actual));\r\n                assert(actual[0] == u'\\u0020');\r\n                assert(actual[1] == u'\\u00f4');\r\n                assert(actual[2] == u'\\uabcd');\r\n            }\r\n            {\r\n                mbstate_t state{};\r\n                int actual = cvt.length(state, str, str + length, ~size_t{0});\r\n                assert(actual == length);\r\n                actual = cvt.length(state, str, str + length, size_t{3});\r\n                assert(actual == length);\r\n            }\r\n        }\r\n    }\r\n#endif // _HAS_CXX17 && defined(__cpp_char8_t)\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0429900_fast_debug_range_based_for/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0429900_fast_debug_range_based_for/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cassert>\r\n#include <deque>\r\n#include <forward_list>\r\n#include <list>\r\n#include <map>\r\n#include <memory>\r\n#include <regex>\r\n#include <set>\r\n#include <string>\r\n#include <unordered_map>\r\n#include <unordered_set>\r\n#include <vector>\r\n\r\n#if _HAS_CXX17\r\n#include <string_view>\r\n#endif // _HAS_CXX17\r\n\r\n#if _HAS_CXX23\r\n#include <flat_map>\r\n#include <flat_set>\r\n#endif // _HAS_CXX23\r\n\r\nusing namespace std;\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\ntemplate <typename T>\r\nvoid assert_same_address(const T& x, const T& y) {\r\n    assert(addressof(x) == addressof(y));\r\n}\r\n\r\ntemplate <typename Range>\r\nvoid assert_range_for_impl(Range& c) {\r\n    auto b = c.begin();\r\n    for (auto&& val : c) {\r\n        STATIC_ASSERT(is_same_v<remove_reference_t<decltype(val)>, remove_reference_t<decltype(*b)>>);\r\n        assert(b != c.end());\r\n\r\n        using RC = remove_const_t<Range>;\r\n#if _HAS_CXX23\r\n        if constexpr (_Is_specialization_v<RC, flat_map> || _Is_specialization_v<RC, flat_multimap>) {\r\n            assert_same_address(b->first, val.first);\r\n            assert_same_address(b->second, val.second);\r\n        } else\r\n#endif // _HAS_CXX23\r\n        {\r\n            if (is_same_v<RC, vector<bool>>) {\r\n                assert(*b == val);\r\n            } else {\r\n                assert_same_address(*b, val);\r\n            }\r\n        }\r\n\r\n        ++b;\r\n    }\r\n\r\n    assert(b == c.end());\r\n}\r\n\r\ntemplate <typename Range>\r\nvoid assert_range_for(Range& c) {\r\n    assert_range_for_impl(c);\r\n    assert_range_for_impl(static_cast<const Range&>(c));\r\n}\r\n\r\narray<char, 0> emptyArray;\r\narray<char, 2> elementsArray{{42, 67}};\r\n\r\ntemplate <typename Container>\r\nstruct DerivedEvilContainer : Container {\r\n    mutable bool beginCalled = false;\r\n    mutable bool endCalled   = false;\r\n\r\n    auto begin() const {\r\n        beginCalled = true;\r\n        return Container::begin();\r\n    }\r\n\r\n    auto end() const {\r\n        endCalled = true;\r\n        return Container::end();\r\n    }\r\n};\r\n\r\ntemplate <typename Container>\r\nstruct StlLikeContainer : Container {\r\n    mutable bool beginCalled = false;\r\n    mutable bool endCalled   = false;\r\n\r\n    using Container::_Unchecked_begin;\r\n    using Container::_Unchecked_end;\r\n\r\n    auto begin() const {\r\n        beginCalled = true;\r\n        return Container::begin();\r\n    }\r\n\r\n    auto end() const {\r\n        endCalled = true;\r\n        return Container::end();\r\n    }\r\n};\r\n\r\ntemplate <template <class...> class Container>\r\nvoid test_case_sequence_container() {\r\n    Container<char> testContainer;\r\n    assert_range_for(testContainer);\r\n    testContainer.assign(elementsArray.begin(), elementsArray.end());\r\n    assert_range_for(testContainer);\r\n\r\n\r\n    DerivedEvilContainer<Container<char>> dec;\r\n    dec.assign(elementsArray.begin(), elementsArray.end());\r\n    for (auto&& x : dec) {\r\n        (void) x;\r\n    }\r\n    assert(dec.beginCalled);\r\n    assert(dec.endCalled);\r\n\r\n#if !defined(__clang__) && !defined(__EDG__)\r\n    StlLikeContainer<Container<char>> stlLike;\r\n    stlLike.assign(elementsArray.begin(), elementsArray.end());\r\n    for (auto&& x : stlLike) {\r\n        (void) x;\r\n    }\r\n    assert(!stlLike.beginCalled);\r\n    assert(!stlLike.endCalled);\r\n#endif // !defined(__clang__) && !defined(__EDG__)\r\n}\r\n\r\ntemplate <template <class...> class Container>\r\nvoid test_case_set_container() {\r\n    Container<char> testContainer;\r\n    assert_range_for(testContainer);\r\n    testContainer.insert(elementsArray[0]);\r\n    testContainer.insert(elementsArray[1]);\r\n    assert_range_for(testContainer);\r\n}\r\n\r\ntemplate <template <class...> class Container>\r\nvoid test_case_map_container() {\r\n    Container<int, int> testContainer;\r\n    assert_range_for(testContainer);\r\n    testContainer.emplace(42, 1729);\r\n    testContainer.emplace(2048, 1000);\r\n    assert_range_for(testContainer);\r\n}\r\n\r\nint main() {\r\n    assert_range_for(emptyArray);\r\n    assert_range_for(elementsArray);\r\n\r\n    test_case_sequence_container<basic_string>();\r\n    test_case_sequence_container<deque>();\r\n    test_case_sequence_container<forward_list>();\r\n    test_case_sequence_container<list>();\r\n    test_case_sequence_container<vector>();\r\n\r\n    vector<bool> vb;\r\n    assert_range_for(vb);\r\n    vb.push_back(true);\r\n    vb.push_back(false);\r\n    assert_range_for(vb);\r\n\r\n    test_case_set_container<multiset>();\r\n    test_case_set_container<set>();\r\n    test_case_set_container<unordered_multiset>();\r\n    test_case_set_container<unordered_set>();\r\n#if _HAS_CXX23\r\n    test_case_set_container<flat_set>();\r\n    test_case_set_container<flat_multiset>();\r\n#endif // _HAS_CXX23\r\n\r\n    test_case_map_container<map>();\r\n    test_case_map_container<multimap>();\r\n    test_case_map_container<unordered_map>();\r\n    test_case_map_container<unordered_multimap>();\r\n#if _HAS_CXX23\r\n    test_case_map_container<flat_map>();\r\n    test_case_map_container<flat_multimap>();\r\n#endif // _HAS_CXX23\r\n\r\n    cmatch matchResults;\r\n    assert_range_for(matchResults);\r\n    const regex reg(\"(abc)(abc)\");\r\n    assert(regex_match(\"abcabc\", matchResults, reg));\r\n    assert(matchResults.size() == 3);\r\n    assert_range_for(matchResults);\r\n\r\n#if _HAS_CXX17\r\n    string_view emptySv;\r\n    assert_range_for(emptySv);\r\n    string_view contentSv(\"hungry EVIL zombies\");\r\n    assert_range_for(contentSv);\r\n#endif // _HAS_CXX17\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0474901_shift_jis_codecvt/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0474901_shift_jis_codecvt/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <exception>\r\n#include <fstream>\r\n#include <iostream>\r\n#include <locale>\r\n#include <string>\r\n\r\nint main() {\r\n    {\r\n        // Japan in Shift JIS/cp932\r\n        const char* const japan_932 = \"\\x93\\xfa\\x96\\x7b\";\r\n        constexpr auto mode         = std::ios_base::binary | std::ios_base::out | std::ios_base::trunc;\r\n        std::ofstream f(\"japan.txt\", mode);\r\n        f << japan_932;\r\n        f.close();\r\n    }\r\n\r\n    try {\r\n        std::wifstream test;\r\n        test.imbue(std::locale(\"Japanese_Japan.932\"));\r\n        test.open(\"japan.txt\");\r\n        // Japan in Unicode\r\n        const std::wstring cmp = L\"\\u65e5\\u672c\";\r\n        std::wstring ref;\r\n        test >> ref;\r\n        if (ref == cmp) {\r\n            std::cout << \"OK\\n\";\r\n            return 0;\r\n        }\r\n\r\n        std::cout << \"FAIL\\nREF\\n\";\r\n        for (const unsigned int cInt : ref) {\r\n            std::cout << std::hex << cInt << '\\n';\r\n        }\r\n\r\n        std::cout << \"EXP\\n\";\r\n        for (const unsigned int cInt : cmp) {\r\n            std::cout << std::hex << cInt << '\\n';\r\n        }\r\n    } catch (const std::exception& e) {\r\n        std::cout << \"No Locale: \" << e.what() << '\\n';\r\n    }\r\n\r\n    return 1;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0493909_is_aggregate/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_17_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0493909_is_aggregate/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <type_traits>\r\n\r\nusing namespace std;\r\n\r\nstatic_assert(!is_aggregate_v<int>);\r\nstatic_assert(!is_aggregate_v<const int>);\r\nstatic_assert(!is_aggregate_v<void>);\r\nstatic_assert(!is_aggregate_v<volatile void>);\r\nstatic_assert(!is_aggregate_v<const volatile char>);\r\nstatic_assert(!is_aggregate_v<bool>);\r\n\r\nstruct Empty {};\r\nstatic_assert(is_aggregate_v<Empty>);\r\n\r\nstatic_assert(is_base_of_v<false_type, is_aggregate<int>>);\r\nstatic_assert(is_base_of_v<true_type, is_aggregate<Empty>>);\r\n\r\nstruct NonAggDefaultCtor {\r\n    NonAggDefaultCtor() {}\r\n};\r\nstatic_assert(!is_aggregate_v<NonAggDefaultCtor>);\r\n\r\nstruct NonAggCustomCtor {\r\n    NonAggCustomCtor(int, int);\r\n};\r\nstatic_assert(!is_aggregate_v<NonAggCustomCtor>);\r\n\r\nstruct NonAggCopyCtor {\r\n    NonAggCopyCtor(const NonAggCopyCtor&);\r\n};\r\nstatic_assert(!is_aggregate_v<NonAggCopyCtor>);\r\n\r\nstruct NonAggMoveCtor {\r\n    NonAggMoveCtor(NonAggMoveCtor&&);\r\n};\r\nstatic_assert(!is_aggregate_v<NonAggMoveCtor>);\r\n\r\nstruct AggCopyAssign {\r\n    AggCopyAssign& operator=(const AggCopyAssign&);\r\n};\r\nstatic_assert(is_aggregate_v<AggCopyAssign>);\r\n\r\nstruct AggMoveAssign {\r\n    AggMoveAssign& operator=(AggMoveAssign&&);\r\n};\r\nstatic_assert(is_aggregate_v<AggMoveAssign>);\r\n\r\nstruct AggDtor {\r\n    ~AggDtor();\r\n};\r\nstatic_assert(is_aggregate_v<AggDtor>);\r\n\r\nstruct NonAggPrivateCtor {\r\nprivate:\r\n    NonAggPrivateCtor();\r\n};\r\nstatic_assert(!is_aggregate_v<NonAggPrivateCtor>);\r\n\r\nstruct NonAggProtectedCtor {\r\nprotected:\r\n    NonAggProtectedCtor();\r\n};\r\nstatic_assert(!is_aggregate_v<NonAggProtectedCtor>);\r\n\r\nstruct PreCxx20AggDeletedDefaultCtor {\r\n    PreCxx20AggDeletedDefaultCtor() = delete;\r\n};\r\n#if !_HAS_CXX20\r\nstatic_assert(is_aggregate_v<PreCxx20AggDeletedDefaultCtor>);\r\n#else\r\nstatic_assert(!is_aggregate_v<PreCxx20AggDeletedDefaultCtor>);\r\n#endif\r\n\r\nstruct PreCxx20AggDeletedCopyCtor {\r\n    PreCxx20AggDeletedCopyCtor(const PreCxx20AggDeletedCopyCtor&) = delete;\r\n};\r\n#if !_HAS_CXX20\r\nstatic_assert(is_aggregate_v<PreCxx20AggDeletedCopyCtor>);\r\n#else\r\nstatic_assert(!is_aggregate_v<PreCxx20AggDeletedCopyCtor>);\r\n#endif\r\n\r\nstruct PreCxx20AggDefaultedDefaultCtor {\r\n    PreCxx20AggDefaultedDefaultCtor() = default;\r\n};\r\n#if !_HAS_CXX20\r\nstatic_assert(is_aggregate_v<PreCxx20AggDefaultedDefaultCtor>);\r\n#else\r\nstatic_assert(!is_aggregate_v<PreCxx20AggDefaultedDefaultCtor>);\r\n#endif\r\n\r\nstruct NonAggExplicitDefaultCtor {\r\n    explicit NonAggExplicitDefaultCtor() = default;\r\n};\r\nstatic_assert(!is_aggregate_v<NonAggExplicitDefaultCtor>);\r\n\r\nstruct PreCxx20AggDefaultedMoveCtor {\r\n    PreCxx20AggDefaultedMoveCtor(PreCxx20AggDefaultedMoveCtor&&) = default;\r\n};\r\n#if !_HAS_CXX20\r\nstatic_assert(is_aggregate_v<PreCxx20AggDefaultedMoveCtor>);\r\n#else\r\nstatic_assert(!is_aggregate_v<PreCxx20AggDefaultedMoveCtor>);\r\n#endif\r\n\r\nstruct PreCxx20AggDeletedMoveCtor {\r\n    PreCxx20AggDeletedMoveCtor(PreCxx20AggDeletedMoveCtor&&) = delete;\r\n};\r\n#if !_HAS_CXX20\r\nstatic_assert(is_aggregate_v<PreCxx20AggDeletedMoveCtor>);\r\n#else\r\nstatic_assert(!is_aggregate_v<PreCxx20AggDeletedMoveCtor>);\r\n#endif\r\n\r\nclass ClassAgg {\r\npublic:\r\n    int x = 0;\r\n    NonAggDefaultCtor n;\r\n    int& mem_func();\r\n\r\nprivate:\r\n    void private_mem_func();\r\n    static const int private_static_mem = 0;\r\n};\r\nstatic_assert(is_aggregate_v<ClassAgg>);\r\n\r\nclass ClassNonAggPrivate {\r\nprivate:\r\n    int private_mem;\r\n\r\npublic:\r\n    void set(int x) {\r\n        private_mem = x;\r\n    }\r\n    int get() const {\r\n        return private_mem;\r\n    }\r\n};\r\nstatic_assert(!is_aggregate_v<ClassNonAggPrivate>);\r\n\r\nclass ClassNonAggProtected {\r\nprotected:\r\n    int protected_mem;\r\n};\r\nstatic_assert(!is_aggregate_v<ClassNonAggProtected>);\r\n\r\nunion Union {\r\n    int a;\r\n    double b = 3.14;\r\n    Empty c;\r\n};\r\nstatic_assert(is_aggregate_v<Union>);\r\n\r\nenum Enumeration { One };\r\nstatic_assert(!is_aggregate_v<Enumeration>);\r\n\r\nenum class EnumClass { One };\r\nstatic_assert(!is_aggregate_v<EnumClass>);\r\n\r\nstruct AggRef {\r\n    const int& ref_mem;\r\n};\r\nstatic_assert(is_aggregate_v<AggRef>);\r\n\r\nstruct AggBitField {\r\n    unsigned int a : 3;\r\n    unsigned int : 5;\r\n    char b : 8;\r\n    int : 0;\r\n};\r\nstatic_assert(is_aggregate_v<AggBitField>);\r\n\r\nstruct AggAnonymousUnion {\r\n    union {\r\n        int c;\r\n        double d;\r\n    };\r\n};\r\nstatic_assert(is_aggregate_v<AggAnonymousUnion>);\r\n\r\nstruct NonAggVirtualFunc {\r\n    int a;\r\n    virtual void virt_func();\r\n};\r\nstatic_assert(!is_aggregate_v<NonAggVirtualFunc>);\r\n\r\nstruct NonAggPureVirtualFunc {\r\n    virtual int pure_virt_f() = 0;\r\n};\r\nstatic_assert(!is_aggregate_v<NonAggPureVirtualFunc>);\r\n\r\nstruct Cxx14Agg {\r\n    int x;\r\n    Empty e;\r\n    NonAggDefaultCtor n;\r\n    Union u;\r\n    Empty* ep;\r\n    Enumeration em;\r\n};\r\nstatic_assert(is_aggregate_v<Cxx14Agg>);\r\n\r\nstruct Cxx17Agg : Cxx14Agg, ClassAgg {\r\n    int x;\r\n};\r\nstatic_assert(is_aggregate_v<Cxx17Agg>);\r\n\r\nstruct Cxx17AggNonInheritCtor : NonAggDefaultCtor {};\r\nstatic_assert(is_aggregate_v<Cxx17AggNonInheritCtor>);\r\n\r\nstruct NonAggInheritCtor : NonAggDefaultCtor {\r\n    using NonAggDefaultCtor::NonAggDefaultCtor;\r\n};\r\nstatic_assert(!is_aggregate_v<NonAggInheritCtor>);\r\n\r\nstruct NonAggPrivateBase : private Cxx14Agg {};\r\nstatic_assert(!is_aggregate_v<NonAggPrivateBase>);\r\n\r\nstruct NonAggProtectedBase : protected Cxx14Agg {};\r\nstatic_assert(!is_aggregate_v<NonAggProtectedBase>);\r\n\r\nstruct NonAggVirtualBase : virtual Cxx14Agg {};\r\nstatic_assert(!is_aggregate_v<NonAggVirtualBase>);\r\n\r\nstruct NonAggVirtualBaseFunc : NonAggVirtualFunc {};\r\nstatic_assert(!is_aggregate_v<NonAggVirtualBaseFunc>);\r\n\r\nstruct NonAggVirtualBaseIndirect : NonAggVirtualBase {};\r\nstatic_assert(!is_aggregate_v<NonAggVirtualBaseIndirect>);\r\n\r\nstruct Incomplete;\r\n\r\nstatic_assert(is_aggregate_v<int[10]>);\r\nstatic_assert(is_aggregate_v<int[]>);\r\nstatic_assert(is_aggregate_v<Cxx14Agg[]>);\r\nstatic_assert(is_aggregate_v<Cxx17Agg[]>);\r\nstatic_assert(is_aggregate_v<NonAggDefaultCtor[]>);\r\nstatic_assert(is_aggregate_v<int* [10]>);\r\nstatic_assert(is_aggregate_v<NonAggDefaultCtor[2][3]>);\r\nstatic_assert(is_aggregate_v<Empty[10]>);\r\nstatic_assert(is_aggregate_v<Incomplete[]>);\r\nstatic_assert(is_aggregate_v<Incomplete[10]>);\r\n\r\nstatic_assert(!is_aggregate_v<int&>);\r\nstatic_assert(!is_aggregate_v<const int*>);\r\nstatic_assert(!is_aggregate_v<const Cxx14Agg&>);\r\nstatic_assert(!is_aggregate_v<Cxx14Agg*>);\r\nstatic_assert(!is_aggregate_v<Incomplete*>);\r\n\r\ntemplate <typename T>\r\nstruct AggTemplateClass {\r\n    T value;\r\n};\r\nstatic_assert(is_aggregate_v<AggTemplateClass<int>>);\r\n\r\ntemplate <typename T>\r\nstruct NonAggTemplateClassCtor {\r\n    NonAggTemplateClassCtor() : value{} {}\r\n    T value;\r\n};\r\nstatic_assert(!is_aggregate_v<NonAggTemplateClassCtor<int>>);\r\n\r\nusing AliasedAgg = Cxx14Agg;\r\nstatic_assert(is_aggregate_v<AliasedAgg>);\r\n\r\nusing AliasedAggCxx17 = Cxx17Agg;\r\nstatic_assert(is_aggregate_v<AliasedAggCxx17>);\r\n\r\nusing AliasedNonAgg = NonAggDefaultCtor;\r\nstatic_assert(!is_aggregate_v<AliasedNonAgg>);\r\n\r\ntemplate <typename T>\r\nusing AggAliasedTemplateClass = AggTemplateClass<T>;\r\nstatic_assert(is_aggregate_v<AggAliasedTemplateClass<Cxx14Agg>>);\r\n\r\ntemplate <typename T>\r\nusing NonAggAliasedTemplateClass = NonAggTemplateClassCtor<T>;\r\nstatic_assert(!is_aggregate_v<NonAggAliasedTemplateClass<Cxx14Agg>>);\r\n\r\nint intObj;\r\nstatic_assert(!is_aggregate_v<decltype(intObj)>);\r\n\r\nCxx17Agg cxx17AggObj;\r\nstatic_assert(is_aggregate_v<decltype(cxx17AggObj)>);\r\n\r\nCxx14Agg cxx14AggObj;\r\nstatic_assert(is_aggregate_v<decltype(cxx14AggObj)>);\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0512710_terminate_current_exception_from_noexcept_function/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0512710_terminate_current_exception_from_noexcept_function/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <exception>\r\n#include <stdexcept>\r\n\r\nusing namespace std;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4702) // unreachable code\r\n[[noreturn]] void handleTerminate() noexcept {\r\n    assert(uncaught_exceptions() == 0);\r\n    exception_ptr e = current_exception();\r\n    assert(e);\r\n    try {\r\n        rethrow_exception(e);\r\n        abort();\r\n    } catch (const runtime_error&) {\r\n        assert(uncaught_exceptions() == 0);\r\n        exit(0);\r\n    }\r\n}\r\n#pragma warning(pop)\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wexceptions\"\r\n#endif // __clang__\r\nvoid meow() noexcept {\r\n#pragma warning(push)\r\n#pragma warning(disable : 4297) // 'meow': function assumed not to throw an exception but does\r\n    throw runtime_error(\"Runtime error happened\");\r\n#pragma warning(pop)\r\n}\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // __clang__\r\n\r\nint main() {\r\n    set_terminate(handleTerminate);\r\n    meow();\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0512710_terminate_current_exception_from_noexcept_function_2/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0512710_terminate_current_exception_from_noexcept_function_2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <exception>\r\n#include <stdexcept>\r\n\r\nusing namespace std;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4702) // unreachable code\r\n[[noreturn]] void handleTerminate() noexcept {\r\n    assert(uncaught_exceptions() == 1);\r\n    exception_ptr e = current_exception();\r\n    assert(e);\r\n    try {\r\n        rethrow_exception(e);\r\n        abort();\r\n    } catch (const runtime_error&) {\r\n        assert(uncaught_exceptions() == 1);\r\n        exit(0);\r\n    }\r\n}\r\n#pragma warning(pop)\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wexceptions\"\r\n#endif // __clang__\r\nstruct A {\r\n    ~A() noexcept {\r\n#pragma warning(push)\r\n#pragma warning(disable : 4297) // function assumed not to throw an exception but does\r\n        throw runtime_error(\"Runtime error happened\");\r\n#pragma warning(pop)\r\n    }\r\n};\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // __clang__\r\n\r\nint main() {\r\n    set_terminate(handleTerminate);\r\n    try {\r\n        A a;\r\n        throw 42;\r\n    } catch (int) {\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0512710_terminate_current_exception_from_unwind/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0512710_terminate_current_exception_from_unwind/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <exception>\r\n#include <stdexcept>\r\n\r\nusing namespace std;\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4702) // unreachable code\r\n[[noreturn]] void handleTerminate() noexcept {\r\n    assert(uncaught_exceptions() == 1);\r\n    exception_ptr e = current_exception();\r\n    assert(e);\r\n    try {\r\n        rethrow_exception(e);\r\n        abort();\r\n    } catch (const runtime_error&) {\r\n        assert(uncaught_exceptions() == 1);\r\n        exit(0);\r\n    }\r\n}\r\n#pragma warning(pop)\r\n\r\nstruct A {\r\n    ~A() noexcept(false) {\r\n        throw runtime_error(\"Runtime error happened\");\r\n    }\r\n};\r\n\r\nint main() {\r\n    set_terminate(handleTerminate);\r\n    try {\r\n        A a;\r\n        throw 42;\r\n    } catch (int) {\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0527559_pragma_managed/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\clr_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0527559_pragma_managed/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#pragma managed(push, off)\r\n#include <__msvc_all_public_headers.hpp>\r\n#pragma managed(pop)\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0575109_string_ambiguous_overloads/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0575109_string_ambiguous_overloads/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\n// VSO-575109 \"[RWC][std:c++latest][prod/fe] ClangLLVM failed with error C2593\"\r\n// was fixed by the PR for\r\n// LWG-2946 \"LWG 2758's resolution missed further corrections\"\r\n\r\nint main() {\r\n    string s({\"abc\", 2});\r\n    assert(s == \"ab\");\r\n    s = {\"def\", 2};\r\n    assert(s == \"de\");\r\n    s += {\"ghi\", 2};\r\n    assert(s == \"degh\");\r\n    s.append({\"jkl\", 2});\r\n    assert(s == \"deghjk\");\r\n    s.assign({\"mno\", 2});\r\n    assert(s == \"mn\");\r\n    s.insert(1, {\"pqr\", 2});\r\n    assert(s == \"mpqn\");\r\n    s.replace(1, 1, {\"stu\", 2});\r\n    assert(s == \"mstqn\");\r\n    s.replace(s.cbegin() + 1, s.cbegin() + 4, {\"vwx\", 2});\r\n    assert(s == \"mvwn\");\r\n\r\n    s = \"_ba_ab_xy_ab_ba_\";\r\n    assert(s.find({\"abc\", 2}) == 4);\r\n    assert(s.rfind({\"abc\", 2}) == 10);\r\n    assert(s.find_first_of({\"abc\", 2}) == 1);\r\n    assert(s.find_last_of({\"abc\", 2}) == 14);\r\n    assert(s.find_first_not_of({\"ab_\", 3}) == 7);\r\n    assert(s.find_last_not_of({\"ab_\", 3}) == 8);\r\n    assert(s.compare({\"_az\", 2}) > 0);\r\n    assert(s.compare({\"_cz\", 2}) < 0);\r\n    assert(s.compare(0, 2, {\"_az\", 2}) > 0);\r\n    assert(s.compare(0, 2, {\"_bz\", 2}) == 0);\r\n    assert(s.compare(0, 2, {\"_cz\", 2}) < 0);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0599804_seekg_zero/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0599804_seekg_zero/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <sstream>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    istringstream iss(\"42\");\r\n    int fortyTwo = 100;\r\n    iss >> fortyTwo;\r\n    assert(fortyTwo == 42);\r\n    assert(iss.rdstate() == ios_base::eofbit);\r\n    iss.seekg(0); // VSO-599804 caused by ignoring seek to 0 for non-nullptr buffers\r\n    assert(iss.rdstate() == ios_base::goodbit);\r\n    fortyTwo = 100;\r\n    iss >> fortyTwo;\r\n    assert(fortyTwo == 42);\r\n    assert(iss.rdstate() == ios_base::eofbit);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0644691_utf_8_codecvt/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0644691_utf_8_codecvt/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_CXX20_CODECVT_FACETS_DEPRECATION_WARNING\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <clocale>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <cstring>\r\n#include <exception>\r\n#include <fstream>\r\n#include <iostream>\r\n#include <locale>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\nstruct encoding_test_char {\r\n    const char* narrow;\r\n    const wchar_t* wide;\r\n};\r\n\r\nconst encoding_test_char utf_test_cases[] = {\r\n    {\"\\x61\", L\"\\u0061\"}, // U+0061 LATIN SMALL LETTER A\r\n    {\"\\x7F\", L\"\\u007F\"}, // U+007F DELETE, highest single encoding unit UTF-8\r\n    {\"\\xC2\\x80\", L\"\\u0080\"}, // U+0080 unspecified control character, lowest 2 encoding unit UTF-8\r\n    {\"\\xC2\\xA9\", L\"\\u00A9\"}, // U+00A9 COPYRIGHT SIGN\r\n    {\"\\xDF\\xBF\", L\"\\u07FF\"}, // U+07FF NKO TAMAN SIGN, highest 2 encoding unit UTF-8\r\n    {\"\\xE0\\xA0\\x80\", L\"\\u0800\"}, // U+0800 SAMARITAN LETTER ALAF, lowest 3 encoding unit UTF-8\r\n    {\"\\xE2\\x80\\xB1\", L\"\\u2031\"}, // U+2031 PER TEN THOUSAND SIGN\r\n    {\"\\xED\\x9F\\xBF\", L\"\\uD7FF\"}, // U+D7FF unencoded from the Hangul Jamo Extended-B block,\r\n                                 // last character before UTF-16 illegal region\r\n    {\"\\xED\\xA0\\x80\", nullptr}, // U+D800 beginning of surrogate range\r\n    {nullptr, L\"\\xD800\"}, //\r\n    {\"\\xED\\xBF\\xBF\", nullptr}, // U+DFFF end of surrogate range\r\n    {nullptr, L\"\\xDFFF\"},\r\n    {\"\\xEE\\x80\\x80\", L\"\\uE000\"}, // U+E000 unencoded from the private use area, first codepoint after surrogate range\r\n    {\"\\xEF\\xBF\\xBD\", L\"\\uFFFD\"}, // U+FFFD REPLACEMENT CHARACTER\r\n#if 0 // TRANSITION, VSO-653129\r\n    {\"\\xEF\\xBF\\xBF\", L\"\\uFFFF\"}, // U+FFFF NOT A CHARACTER, highest 3 encoding unit UTF-8, highest non-surrogate UTF-16\r\n#endif\r\n    // vvv TRANSITION, VSO-653059 vvv\r\n    // The following do not work today due to basic_filebuf's single wchar_t assumption, but should.\r\n    {\"\\xF0\\x90\\x80\\x80\", nullptr /* L\"\\U00010000\" */}, // U+10000 LINEAR B SYLLABLE B008 A,\r\n                                                       // lowest 4 encoding unit UTF-8 and UTF-16 with surrogate pair\r\n    {\"\\xF0\\x90\\x8D\\x88\", nullptr /* L\"\\U00010348\" */}, // U+10348 GOTHIC LETTER HWAIR\r\n    // ^^^ TRANSITION, VSO-653059 ^^^\r\n    {\"\\xC2\\x61\", nullptr}, // Wrong number of trailing bytes\r\n    {\"\\xE0\\xA0\\x61\", nullptr},\r\n\r\n    {\"\\xC0\\x80\", nullptr}, // overlong form: 2 bytes for U+0000 NULL\r\n    {\"\\xC0\\x81\", nullptr}, // overlong form: 2 bytes for U+0001 START OF HEADING\r\n\r\n    {\"\\xC1\\xBF\", nullptr}, // overlong form: 2 bytes for U+007F DELETE\r\n    {\"\\xE0\\x81\\xBF\", nullptr}, // overlong form: 3 bytes for U+007F DELETE\r\n    {\"\\xF0\\x80\\x81\\xBF\", nullptr}, // overlong form: 4 bytes for U+007F DELETE\r\n\r\n    {\"\\xD0\\xAF\", L\"\\u042F\"}, // U+042F CYRILLIC CAPITAL LETTER YA\r\n    {\"\\xE0\\x90\\xAF\", nullptr}, // overlong form: 3 bytes for U+042F CYRILLIC CAPITAL LETTER YA\r\n    {\"\\xF0\\x80\\x90\\xAF\", nullptr}, // overlong form: 4 bytes for U+042F CYRILLIC CAPITAL LETTER YA\r\n};\r\n\r\nvoid assert_empty_file(const wchar_t* const fileName) {\r\n    ifstream emptyTest(fileName, ios::in | ios::binary);\r\n    assert(emptyTest.seekg(0, ios::end).tellg() == 0);\r\n}\r\n\r\nvoid assert_empty_mbstate(const mbstate_t& tested) {\r\n    mbstate_t valueInit{};\r\n    assert(memcmp(&valueInit, &tested, sizeof(mbstate_t)) == 0);\r\n}\r\n\r\nvoid test_fstream(locale& loc) noexcept {\r\n    const wchar_t* const testFile = L\"VSO_644691_test.txt\";\r\n    string str;\r\n    wstring wStr;\r\n    wfstream wideStream;\r\n    wideStream.imbue(loc);\r\n    fstream narrowStream;\r\n    for (const auto& testCase : utf_test_cases) {\r\n        if (testCase.wide) {\r\n            wideStream.open(testFile, ios::trunc | ios::out | ios::binary);\r\n            if (testCase.narrow) {\r\n                assert(static_cast<bool>(wideStream << testCase.wide));\r\n                wideStream.close();\r\n                narrowStream.open(testFile, ios::in | ios::binary);\r\n                assert(static_cast<bool>(narrowStream >> str));\r\n                narrowStream.close();\r\n                assert(str == testCase.narrow);\r\n                wideStream.open(testFile, ios::in | ios::binary);\r\n                assert(static_cast<bool>(wideStream >> wStr));\r\n                wideStream.close();\r\n                assert(wStr == wStr);\r\n            } else {\r\n                assert(!(wideStream << testCase.wide));\r\n                wideStream.close();\r\n                assert_empty_file(testFile);\r\n            }\r\n        } else {\r\n            assert(testCase.narrow != nullptr);\r\n            narrowStream.open(testFile, ios::trunc | ios::out | ios::binary);\r\n            assert(static_cast<bool>(narrowStream << testCase.narrow));\r\n            narrowStream.close();\r\n            wideStream.open(testFile, ios::in | ios::binary);\r\n            wStr.clear();\r\n            assert(!(wideStream >> wStr));\r\n            assert(wStr.empty());\r\n            wideStream.close();\r\n        }\r\n    }\r\n}\r\n\r\nvoid assert_do_out_success(const codecvt<wchar_t, char, mbstate_t>& f, mbstate_t& state, const wchar_t* const wideFirst,\r\n    const wchar_t* const wideLast, const char* const narrowFirst, const char* const narrowLast) {\r\n    const wchar_t* wideNext = wideFirst;\r\n    string narrowOut(static_cast<size_t>(narrowLast - narrowFirst + 1), '\\0');\r\n    char* const outFirst = &narrowOut[0];\r\n    char* const outLast  = outFirst + narrowOut.size();\r\n    char* outNext        = outFirst;\r\n    assert(f.out(state, wideFirst, wideLast, wideNext, outFirst, outLast, outNext) == codecvt_base::ok);\r\n    assert_empty_mbstate(state);\r\n    assert(wideNext == wideLast);\r\n    assert(outLast - outNext == 1);\r\n    assert(equal(outFirst, outNext, narrowFirst, narrowLast));\r\n}\r\n\r\nvoid assert_do_out_failure(const codecvt<wchar_t, char, mbstate_t>& f, mbstate_t& state, const wchar_t* const wideFirst,\r\n    const wchar_t* const wideLast, const wchar_t* const widePrefix, const string& narrowPrefix) {\r\n    const wchar_t* wideNext = wideFirst;\r\n    string narrowOut;\r\n    narrowOut.resize(narrowPrefix.size() + 16); // 16 ought to be enough for anybody\r\n    char* const outFirst = &narrowOut[0];\r\n    char* const outLast  = outFirst + narrowOut.size();\r\n    char* outNext        = outFirst;\r\n    assert(f.out(state, wideFirst, wideLast, wideNext, outFirst, outLast, outNext) == codecvt_base::error);\r\n    assert_empty_mbstate(state);\r\n    assert(widePrefix == wideNext);\r\n    assert(equal(outFirst, outNext, narrowPrefix.begin(), narrowPrefix.end()));\r\n}\r\n\r\nvoid assert_do_in_success(const codecvt<wchar_t, char, mbstate_t>& f, mbstate_t& state, const char* const narrowFirst,\r\n    const char* const narrowLast, const wchar_t* const wideFirst, const wchar_t* const wideLast) {\r\n    const char* narrowNext = narrowFirst;\r\n    wstring wideIn(static_cast<size_t>(wideLast - wideFirst + 1), L'\\0');\r\n    wchar_t* const inFirst = &wideIn[0];\r\n    wchar_t* const inLast  = inFirst + wideIn.size();\r\n    wchar_t* inNext        = inFirst;\r\n    assert(f.in(state, narrowFirst, narrowLast, narrowNext, inFirst, inLast, inNext) == codecvt_base::ok);\r\n    assert_empty_mbstate(state);\r\n    assert(narrowNext == narrowLast);\r\n    assert(inLast - inNext == 1);\r\n    assert(equal(inFirst, inNext, wideFirst, wideLast));\r\n\r\n    fill(wideIn.begin(), wideIn.end(), L'\\0');\r\n    inNext                = inFirst;\r\n    narrowNext            = narrowFirst;\r\n    const char* lastOk[2] = {narrowFirst, narrowFirst};\r\n    for (const char* narrowLimit = narrowFirst; narrowLimit < narrowLast; ++narrowLimit) {\r\n        const auto beforeInNext     = inNext;\r\n        const auto beforeNarrowNext = narrowNext;\r\n        const auto result = f.in(state, beforeNarrowNext, narrowLimit, narrowNext, beforeInNext, inLast, inNext);\r\n        assert_empty_mbstate(state);\r\n        switch (result) {\r\n        case codecvt_base::ok:\r\n            lastOk[0] = exchange(lastOk[1], narrowNext);\r\n            if (beforeNarrowNext != narrowLimit) {\r\n                // 1 character was converted, so the wide characters should advance by 1 and the\r\n                // narrow range should be consumed\r\n                assert(beforeInNext + 1 == inNext);\r\n                assert(narrowNext == narrowLimit);\r\n                // everything converted so far should agree with what we expect the overall wide\r\n                // string to be\r\n                assert(equal(inFirst, inNext, wideFirst));\r\n                if (inNext != inFirst) { // also test partial because the wide buffer is too small\r\n                    wchar_t* const partialLast = inNext - 1;\r\n                    wchar_t* partialNext       = inFirst;\r\n                    narrowNext                 = narrowFirst;\r\n                    assert(f.in(state, narrowFirst, narrowLimit, narrowNext, inFirst, partialLast, partialNext)\r\n                           == codecvt_base::partial);\r\n                    assert(narrowNext == beforeNarrowNext); // we should stop 1 wide character before\r\n                    narrowNext = narrowLimit;\r\n                    assert(partialNext == partialLast); // entire wide buffer consumed\r\n                    assert(equal(inFirst, partialLast, wideFirst));\r\n                }\r\n            }\r\n            break;\r\n        case codecvt_base::partial:\r\n            // no extra characters could be converted, so the iterator positions should be unchanged\r\n            assert(beforeInNext == inNext);\r\n            assert(beforeNarrowNext == narrowNext);\r\n            // also test partial because partial character *and* wide buffer too small:\r\n            if (inFirst != inNext) {\r\n                wchar_t* const partialLast = inNext - 1;\r\n                wchar_t* partialNext       = inFirst;\r\n                narrowNext                 = narrowFirst;\r\n                assert(f.in(state, narrowFirst, narrowLimit, narrowNext, inFirst, partialLast, partialNext)\r\n                       == codecvt_base::partial);\r\n                assert(lastOk[0] == narrowNext);\r\n                narrowNext = beforeNarrowNext;\r\n                assert(partialNext == partialLast);\r\n                assert(equal(inFirst, partialLast, wideFirst));\r\n            }\r\n            break;\r\n        default:\r\n            abort();\r\n        }\r\n    }\r\n}\r\n\r\nvoid assert_do_in_failure(const codecvt<wchar_t, char, mbstate_t>& f, mbstate_t& state, const char* const narrowFirst,\r\n    const char* const narrowLast, const char* const narrowPrefix, const wstring& widePrefix) {\r\n    const char* narrowNext = narrowFirst;\r\n    wstring wideIn;\r\n    wideIn.resize(widePrefix.size() + 16); // 16 ought to be enough for anybody\r\n    wchar_t* const inFirst = &wideIn[0];\r\n    wchar_t* const inLast  = inFirst + wideIn.size();\r\n    wchar_t* inNext        = inFirst;\r\n    assert(f.in(state, narrowFirst, narrowLast, narrowNext, inFirst, inLast, inNext) == codecvt_base::error);\r\n    assert_empty_mbstate(state);\r\n    assert(narrowPrefix == narrowNext);\r\n    assert(equal(inFirst, inNext, widePrefix.begin(), widePrefix.end()));\r\n}\r\n\r\nvoid test_codecvt_encoding(\r\n    const codecvt<wchar_t, char, mbstate_t>& f, const string& narrowPrefix, const wstring& widePrefix) {\r\n    mbstate_t state{};\r\n    for (const auto& testCase : utf_test_cases) {\r\n        if (testCase.narrow) {\r\n            string narrow = narrowPrefix;\r\n            narrow.append(testCase.narrow);\r\n            const char* const narrowFirst = narrow.data();\r\n            const char* const narrowLast  = narrowFirst + narrow.size();\r\n            if (testCase.wide) {\r\n                wstring wide = widePrefix;\r\n                wide.append(testCase.wide);\r\n                const wchar_t* const wideFirst = wide.data();\r\n                const wchar_t* const wideLast  = wideFirst + wide.size();\r\n                assert_do_out_success(f, state, wideFirst, wideLast, narrowFirst, narrowLast);\r\n                assert_do_in_success(f, state, narrowFirst, narrowLast, wideFirst, wideLast);\r\n                if (widePrefix.size() <= 2 && narrowPrefix.size() <= 8) {\r\n                    test_codecvt_encoding(f, narrow, wide);\r\n                }\r\n            } else {\r\n                assert_do_in_failure(f, state, narrowFirst, narrowLast, narrowFirst + narrowPrefix.size(), widePrefix);\r\n            }\r\n        } else {\r\n            assert(testCase.wide != nullptr);\r\n            _Analysis_assume_(testCase.wide);\r\n            wstring wide = widePrefix;\r\n            wide.append(testCase.wide);\r\n            const wchar_t* const wideFirst = wide.data();\r\n            const wchar_t* const wideLast  = wideFirst + wide.size();\r\n            assert_do_out_failure(f, state, wideFirst, wideLast, wideFirst + widePrefix.size(), narrowPrefix);\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_codecvt_encoding(const codecvt<wchar_t, char, mbstate_t>& f) {\r\n    test_codecvt_encoding(f, string{}, wstring{});\r\n    test_codecvt_encoding(f, \"aaa\", L\"aaa\");\r\n}\r\n\r\nint main() {\r\n    try {\r\n        locale loc(\"en-US.UTF-8\");\r\n        test_fstream(loc);\r\n        test_codecvt_encoding(use_facet<codecvt<wchar_t, char, mbstate_t>>(loc));\r\n    } catch (const exception& ex) {\r\n        puts(\"Could not test UTF-8 on this platform, newer Windows 10 required.\");\r\n        puts(ex.what());\r\n        assert(false);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0663136_string_includes_cctype/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0663136_string_includes_cctype/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// #include <cctype>\r\n#include <string>\r\n\r\n// This file tests a nonstandard assumption that <string> includes <cctype>.\r\n\r\nint main() {\r\n    if (std::tolower('a') != 'a') {\r\n        return 1;\r\n    }\r\n\r\n    if (::tolower('a') != 'a') {\r\n        return 1;\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0664587_lcg_divide_by_zero/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0664587_lcg_divide_by_zero/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <random>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    // In VSO-664587, this caused divide by zero:\r\n    linear_congruential_engine<unsigned long long, 25214903917, 11, 0> eng;\r\n    assert(eng() == 25214903928ull);\r\n    assert(eng() == 8602081314781131043ull);\r\n    assert(eng() == 4749291277619109362ull);\r\n    assert(eng() == 15888805192744905749ull);\r\n    assert(eng() == 10851646879081865980ull);\r\n    assert(eng() == 10901909820910194007ull);\r\n    assert(eng() == 9139579755994322966ull);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0677157_flist_merge_edge_cases/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0677157_flist_merge_edge_cases/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <forward_list>\r\n#include <functional>\r\n#include <iterator>\r\n#include <stdexcept>\r\n#include <vector>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\nstruct non_noexcept_less_int {\r\n    bool operator()(int a, int b) /* neither const nor noexcept */ {\r\n        return a < b;\r\n    }\r\n};\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_ownership_of_element_transferred() {\r\n    forward_list<int> f1{1, 3, 5};\r\n    forward_list<int> f2{2, 4, 6};\r\n    auto i = f2.begin();\r\n    f1.merge(f2, Cmp{});\r\n    f1.erase_after(i); // OK, i is now a member of f1\r\n    static const int expected[] = {1, 2, 4, 5, 6};\r\n    assert(equal(begin(expected), end(expected), f1.begin(), f1.end()));\r\n    assert(f2.empty());\r\n}\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_ownership_of_element_transferred_bad() {\r\n    forward_list<int> f1{1, 3, 5};\r\n    forward_list<int> f2{2, 4, 6};\r\n    auto i = f2.begin();\r\n    f1.merge(f2, Cmp{});\r\n    f2.erase_after(i); // Iterator incompatible, it became a member of f1\r\n}\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_ownership_of_before_begin_not_transferred() {\r\n    forward_list<int> f1{1, 3, 5};\r\n    forward_list<int> f2{2, 4, 6};\r\n    auto i = f2.before_begin();\r\n    f1.merge(f2, Cmp{});\r\n    f2.push_front(10);\r\n    f2.erase_after(i); // OK, before_begin is not transferred\r\n    static const int expected[] = {1, 2, 3, 4, 5, 6};\r\n    assert(equal(begin(expected), end(expected), f1.begin(), f1.end()));\r\n    assert(f2.empty());\r\n}\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_empty_both() {\r\n    forward_list<int> f1;\r\n    forward_list<int> f2;\r\n    auto i = f2.before_begin();\r\n    f1.merge(f2, Cmp{});\r\n    assert(f2.before_begin() == i); // OK, stayed a member of f2\r\n}\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_empty_both_bad() {\r\n    forward_list<int> f1;\r\n    forward_list<int> f2;\r\n    auto i = f2.before_begin();\r\n    f1.merge(f2, Cmp{});\r\n    (void) (f1.before_begin() == i); // Iterator incompatible, still a member of f2\r\n}\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_empty_source() {\r\n    forward_list<int> f1{1, 2, 3};\r\n    forward_list<int> f2;\r\n    auto i = f2.before_begin();\r\n    f1.merge(f2, Cmp{});\r\n    assert(f2.before_begin() == i); // OK, stayed a member of f2\r\n}\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_empty_source_bad() {\r\n    forward_list<int> f1{1, 2, 3};\r\n    forward_list<int> f2;\r\n    auto i = f2.before_begin();\r\n    f1.merge(f2, Cmp{});\r\n    (void) (f1.before_begin() == i); // Iterator incompatible, still a member of f2\r\n}\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_empty_target() {\r\n    forward_list<int> f1;\r\n    forward_list<int> f2{1, 2, 3};\r\n    auto bi = f2.before_begin();\r\n    auto i  = f2.begin();\r\n    f1.merge(f2, Cmp{});\r\n    assert(f2.before_begin() == bi); // Ownership not transferred\r\n    assert(f1.begin() == i); // Ownership transferred to f1\r\n}\r\n\r\ntemplate <class Cmp>\r\nvoid test_case_empty_target_bad() {\r\n    forward_list<int> f1;\r\n    forward_list<int> f2{1, 2, 3};\r\n    auto i = f2.begin();\r\n    f1.merge(f2, Cmp{});\r\n    (void) (f2.before_begin() == i); // Iterator incompatible, was transferred to f1\r\n}\r\n\r\nstruct throw_cmp_less_int {\r\n    size_t remainingCompares;\r\n    explicit throw_cmp_less_int(size_t remainingCompares_) : remainingCompares(remainingCompares_) {}\r\n    throw_cmp_less_int(const throw_cmp_less_int&)            = delete;\r\n    throw_cmp_less_int& operator=(const throw_cmp_less_int&) = delete;\r\n\r\n    bool operator()(int a, int b) /* neither const nor noexcept */ {\r\n        if (remainingCompares == 0) {\r\n            throw runtime_error(\"either the algorithm is wrong or the user is evil (or both)\");\r\n        }\r\n\r\n        const bool result = a < b;\r\n        --remainingCompares;\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n        if (result) {\r\n            // _Debug_lt_pred will test the other direction\r\n            ++remainingCompares;\r\n        }\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n        return result;\r\n    }\r\n};\r\n\r\nstruct throwing_merge_fixture {\r\n    static constexpr size_t startF1Size         = 8;\r\n    static constexpr size_t startF2Size         = 10;\r\n    static constexpr size_t startTotal          = startF1Size + startF2Size;\r\n    static constexpr size_t maxMergeComparisons = startTotal - 1;\r\n#if _ITERATOR_DEBUG_LEVEL == 0\r\n    static constexpr size_t ensureOrderedF1Size = 0;\r\n    static constexpr size_t ensureOrderedF2Size = 0;\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL == 0 / _ITERATOR_DEBUG_LEVEL != 0 vvv\r\n    static constexpr size_t ensureOrderedF1Size = startF1Size - 1;\r\n    static constexpr size_t ensureOrderedF2Size = startF2Size - 1;\r\n#endif // _ITERATOR_DEBUG_LEVEL == 0\r\n    static constexpr size_t maxTotalComparisons = maxMergeComparisons + ensureOrderedF1Size + ensureOrderedF2Size;\r\n\r\n    forward_list<int> f1;\r\n    forward_list<int> f2;\r\n    vector<forward_list<int>::const_iterator> iterators;\r\n\r\n    void assert_iterators_consistent() const {\r\n        size_t total = 0;\r\n        for (auto i = f1.begin(), e = f1.end(); i != e; ++i) {\r\n            ++total;\r\n            assert(iterators[static_cast<size_t>(*i)] == i); // also checks ownership transfer\r\n        }\r\n\r\n        for (auto i = f2.begin(), e = f2.end(); i != e; ++i) {\r\n            ++total;\r\n            assert(iterators[static_cast<size_t>(*i)] == i); // also checks ownership transfer\r\n        }\r\n\r\n        assert(total == startTotal);\r\n    }\r\n\r\n    throwing_merge_fixture() : f1{0, 1, 2, 3, 8, 10, 15, 16}, f2{4, 5, 6, 7, 9, 11, 12, 13, 14, 17} {\r\n        iterators.reserve(startTotal);\r\n        auto f1It = f1.cbegin();\r\n        auto f2It = f2.cbegin();\r\n        iterators.push_back(f1It);\r\n        iterators.push_back(++f1It);\r\n        iterators.push_back(++f1It);\r\n        iterators.push_back(++f1It);\r\n        iterators.push_back(f2It); // 4\r\n        iterators.push_back(++f2It);\r\n        iterators.push_back(++f2It);\r\n        iterators.push_back(++f2It);\r\n        iterators.push_back(++f1It); // 8\r\n        iterators.push_back(++f2It); // 9\r\n        iterators.push_back(++f1It); // 10\r\n        iterators.push_back(++f2It); // 11\r\n        iterators.push_back(++f2It);\r\n        iterators.push_back(++f2It);\r\n        iterators.push_back(++f2It);\r\n        iterators.push_back(++f1It); // 15\r\n        iterators.push_back(++f1It);\r\n        iterators.push_back(++f2It); // 17\r\n    }\r\n};\r\n\r\nvoid test_case_comparison_count() {\r\n    throwing_merge_fixture f;\r\n    forward_list<int> startedEmpty;\r\n    {\r\n        throw_cmp_less_int cmp{throwing_merge_fixture::ensureOrderedF1Size};\r\n        startedEmpty.merge(f.f1, ref(cmp));\r\n    }\r\n\r\n    {\r\n        throw_cmp_less_int cmp{throwing_merge_fixture::ensureOrderedF1Size};\r\n        startedEmpty.merge(forward_list<int>{}, ref(cmp));\r\n    }\r\n\r\n    {\r\n        throw_cmp_less_int cmp{throwing_merge_fixture::maxTotalComparisons};\r\n        startedEmpty.merge(f.f2, ref(cmp));\r\n    }\r\n}\r\n\r\nvoid test_case_partial_merge_throw() {\r\n    for (size_t idx = 0; idx <= throwing_merge_fixture::maxTotalComparisons; ++idx) {\r\n        throwing_merge_fixture f;\r\n        try {\r\n            throw_cmp_less_int cmp{idx};\r\n            f.f2.merge(f.f1, ref(cmp));\r\n            f.assert_iterators_consistent();\r\n            return;\r\n        } catch (const runtime_error&) {\r\n            f.assert_iterators_consistent();\r\n        }\r\n    }\r\n\r\n    abort();\r\n}\r\n\r\nvoid test_case_front_bad() {\r\n    forward_list<int> f;\r\n    (void) f.front();\r\n}\r\n\r\nvoid test_case_cfront_bad() {\r\n    const forward_list<int> f;\r\n    (void) f.front();\r\n}\r\n\r\nvoid test_case_pop_front_bad() {\r\n    forward_list<int> f;\r\n    f.pop_front();\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec([] {\r\n        test_case_ownership_of_element_transferred<non_noexcept_less_int>();\r\n        test_case_ownership_of_element_transferred<less<>>();\r\n        test_case_ownership_of_before_begin_not_transferred<non_noexcept_less_int>();\r\n        test_case_ownership_of_before_begin_not_transferred<less<>>();\r\n        test_case_empty_both<non_noexcept_less_int>();\r\n        test_case_empty_both<less<>>();\r\n        test_case_empty_source<non_noexcept_less_int>();\r\n        test_case_empty_source<less<>>();\r\n        test_case_empty_target<non_noexcept_less_int>();\r\n        test_case_empty_target<less<>>();\r\n        test_case_comparison_count();\r\n        test_case_partial_merge_throw();\r\n    });\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    exec.add_death_tests({\r\n        test_case_ownership_of_element_transferred_bad<non_noexcept_less_int>,\r\n        test_case_ownership_of_element_transferred_bad<less<>>,\r\n        test_case_empty_both_bad<non_noexcept_less_int>,\r\n        test_case_empty_both_bad<less<>>,\r\n        test_case_empty_source_bad<non_noexcept_less_int>,\r\n        test_case_empty_source_bad<less<>>,\r\n        test_case_empty_target_bad<non_noexcept_less_int>,\r\n        test_case_empty_target_bad<less<>>,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n    exec.add_death_tests({\r\n        test_case_front_bad,\r\n        test_case_cfront_bad,\r\n        test_case_pop_front_bad,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL != 0\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0735700_fstream_read_over_4k/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0735700_fstream_read_over_4k/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <cstdio>\r\n#include <fstream>\r\n#include <numeric>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\nstring get_alphabet_repeats(const size_t targetLength) {\r\n    char alphabet[26];\r\n    constexpr auto alphaSize = size(alphabet);\r\n    iota(begin(alphabet), end(alphabet), 'a');\r\n    size_t repeats = (targetLength + alphaSize - 1) / alphaSize;\r\n    string expected;\r\n    expected.reserve(repeats * alphaSize);\r\n    for (size_t i = 0; i < repeats; ++i) {\r\n        expected.append(alphabet, alphaSize);\r\n    }\r\n\r\n    expected.resize(targetLength);\r\n    return expected;\r\n}\r\n\r\nvoid run_test(const string& expected, const ios::openmode mode) {\r\n    const auto expectedSize = static_cast<ptrdiff_t>(expected.size());\r\n    {\r\n        ofstream file(\"testing.txt\", ios::trunc | mode);\r\n        file.write(expected.data(), expectedSize);\r\n        assert(file.good());\r\n    }\r\n\r\n    {\r\n        const auto readAmount = expectedSize + 100;\r\n        string result(static_cast<size_t>(readAmount), '\\xFF');\r\n        ifstream file(\"testing.txt\", mode);\r\n        file.read(&result[0], readAmount);\r\n        assert(file.eof());\r\n        assert(!file.bad());\r\n        assert(file.gcount() == expectedSize);\r\n        const auto divider = result.begin() + expectedSize;\r\n        assert(equal(expected.begin(), expected.end(), result.begin(), divider));\r\n        assert(all_of(divider, result.end(), [](char ch) { return ch == '\\xFF'; }));\r\n    }\r\n\r\n    remove(\"testing.txt\");\r\n}\r\n\r\nint main() {\r\n    string testCase = get_alphabet_repeats(8192);\r\n    run_test(testCase, ios::openmode{});\r\n    run_test(testCase, ios::binary);\r\n    testCase.append(8100, '\\n');\r\n    run_test(testCase, ios::openmode{});\r\n    run_test(testCase, ios::binary);\r\n    testCase.assign(8100, '\\n');\r\n    run_test(testCase, ios::openmode{});\r\n    run_test(testCase, ios::binary);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0736657_unordered_assign_rehash/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0736657_unordered_assign_rehash/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <unordered_set>\r\n\r\nusing namespace std;\r\n\r\nvoid assert_set_is_iota(const unordered_set<int>& theSet, const int maxValue) {\r\n    assert(theSet.size() == static_cast<size_t>(maxValue));\r\n    for (int value = 0; value < maxValue; ++value) {\r\n        assert(theSet.count(value) == 1);\r\n    }\r\n}\r\n\r\nint main() {\r\n    unordered_set<int> source;\r\n    const auto initialBuckets = source.bucket_count();\r\n    // insert enough elements to force a rehash\r\n    int maxValue = 0;\r\n    for (; source.bucket_count() == initialBuckets; ++maxValue) {\r\n        source.emplace(maxValue);\r\n    }\r\n\r\n    unordered_set<int> target;\r\n    assert(target.bucket_count() < source.bucket_count());\r\n    target = source; // Test that this assignment actually rehashes\r\n    // The following is not technically guaranteed but is true of our implementation today:\r\n    assert(target.bucket_count() == source.bucket_count());\r\n\r\n    assert_set_is_iota(source, maxValue);\r\n    assert_set_is_iota(target, maxValue);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0744055_atomic_load_8_bytes_readonly/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\impure_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0744055_atomic_load_8_bytes_readonly/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <atomic>\r\n#include <cassert>\r\n#include <cstddef>\r\n#include <cstdint>\r\n#include <memory>\r\n\r\n#pragma warning(push) // TRANSITION, OS-23694920\r\n#pragma warning(disable : 4668) // 'MEOW' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'\r\n#include <Windows.h>\r\n#pragma warning(pop)\r\n\r\nint main() {\r\n    // See DevCom-274938, where a customer wanted to read a std::atomic from a read-only memory-mapped file.\r\n    // This was originally implemented with cmpxchg8b on x86 which raised a write access violation.\r\n\r\n    // https://learn.microsoft.com/windows/win32/api/memoryapi/nf-memoryapi-createfilemappingw\r\n    // \"If hFile is INVALID_HANDLE_VALUE, [...] CreateFileMapping creates a file mapping object of a\r\n    // specified size that is backed by the system paging file instead of by a file in the file system.\"\r\n    // \"The initial contents of the pages in a file mapping object\r\n    // backed by the operating system paging file are 0 (zero).\"\r\n\r\n    constexpr DWORD bufferSize = 200;\r\n    HANDLE hMapFile = CreateFileMappingW(INVALID_HANDLE_VALUE, nullptr, PAGE_READONLY, 0, bufferSize, nullptr);\r\n    assert(hMapFile);\r\n    void* view = MapViewOfFileEx(hMapFile, FILE_MAP_READ, 0, 0, bufferSize, nullptr);\r\n    assert(view);\r\n\r\n    using Atom               = std::atomic<std::uint64_t>;\r\n    std::size_t space        = bufferSize;\r\n    const auto adjusted_view = std::align(alignof(Atom), sizeof(Atom), view, space);\r\n    assert(adjusted_view == view);\r\n\r\n    // Formally UB, but we want std::atomic loads to work from read-only memory regions:\r\n    const auto a = reinterpret_cast<Atom*>(view);\r\n\r\n    // In the original repro, a->load() failed with an access violation.\r\n    assert(a->load() == 0);\r\n\r\n    UnmapViewOfFile(view);\r\n    CloseHandle(hMapFile);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0792651_unordered_set_rehash_invalidates_key/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0792651_unordered_set_rehash_invalidates_key/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cassert>\r\n#include <memory>\r\n#include <unordered_set>\r\n\r\nusing namespace std;\r\n\r\n// This test tests for a condition where, during a rehash, the container would invalidate a reference to the key to\r\n// insert.\r\n\r\nstruct hasher {\r\n    size_t operator()(const unique_ptr<int>&) const noexcept {\r\n        return 0;\r\n    }\r\n};\r\n\r\nstruct eq {\r\n    bool operator()(const unique_ptr<int>& p, const unique_ptr<int>& q) const noexcept {\r\n        if (p == nullptr) {\r\n            return q == nullptr;\r\n        }\r\n\r\n        if (q == nullptr) {\r\n            return false;\r\n        }\r\n        return *p == *q;\r\n    }\r\n};\r\n\r\nint main() {\r\n    int i = 0;\r\n    unordered_set<unique_ptr<int>, hasher, eq> uut;\r\n    uut.max_load_factor(0.5f);\r\n    const auto originalBucketCount = uut.bucket_count();\r\n    // insert nullptr because that's the moved from state; the bug made this element get returned:\r\n    uut.insert(unique_ptr<int>{});\r\n    // insert enough elements to be on the edge of a rehash:\r\n    while ((static_cast<float>(uut.size() + 1) / static_cast<float>(uut.bucket_count())) <= 0.5f) {\r\n        uut.insert(make_unique<int>(i++));\r\n    }\r\n\r\n    assert(originalBucketCount == uut.bucket_count());\r\n\r\n    // try to insert the next element and make sure what we get back is actually that element:\r\n    const auto inserted = uut.insert(make_unique<int>(i));\r\n    assert(inserted.second);\r\n    assert(**inserted.first == i);\r\n\r\n    // make sure the rehash actually happened:\r\n    assert(originalBucketCount != uut.bucket_count());\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0830211_container_debugging_range_checks/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0830211_container_debugging_range_checks/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <array>\r\n#include <cstddef>\r\n#include <deque>\r\n#include <string>\r\n#include <vector>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\n#pragma warning(disable : 4984) // 'if constexpr' is a C++17 language extension\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic ignored \"-Wc++17-extensions\" // constexpr if is a C++17 extension\r\n#endif\r\n\r\ntemplate <typename Traits>\r\nstruct TestCases {\r\n    using ContainerType     = typename Traits::ContainerType;\r\n    using IteratorType      = typename Traits::IteratorType; // ContainerType::(const_)?iterator\r\n    using ZeroContainerType = typename Traits::ZeroContainerType;\r\n\r\n    using MutableIteratorType = typename ContainerType::iterator; // never const_iterator\r\n\r\n    static void test_case_operator_dereference_value_initialized_iterator() {\r\n        IteratorType it; // note: for IDL to work correctly, default-init and value-init are equivalent\r\n        (void) *it;\r\n    }\r\n\r\n    static void test_case_operator_arrow_value_initialized_iterator() {\r\n        if constexpr (Traits::has_arrow) {\r\n            IteratorType it;\r\n            (void) it.operator->();\r\n        }\r\n    }\r\n\r\n    static void test_case_operator_preincrement_value_initialized_iterator() {\r\n        IteratorType it;\r\n        ++it;\r\n    }\r\n\r\n    static void test_case_operator_predecrement_value_initialized_iterator() {\r\n        IteratorType it;\r\n        --it;\r\n    }\r\n\r\n    static void test_case_operator_advance_value_initialized_iterator() {\r\n        IteratorType it;\r\n        it += 1;\r\n    }\r\n\r\n    static void test_case_operator_advance_value_initialized_iterator_zero() {\r\n        IteratorType it;\r\n        it += 0; // OK\r\n    }\r\n\r\n    static void test_case_operator_retreat_value_initialized_iterator() {\r\n        IteratorType it;\r\n        it -= 1;\r\n    }\r\n\r\n    static void test_case_operator_retreat_value_initialized_iterator_zero() {\r\n        IteratorType it;\r\n        it -= 0; // OK\r\n    }\r\n\r\n    static void test_case_operator_dereference_end_iterator() {\r\n        ContainerType a{false, true, false, true};\r\n        auto it = a.end();\r\n        (void) *it;\r\n    }\r\n\r\n    static void test_case_operator_arrow_end_iterator() {\r\n        if constexpr (Traits::has_arrow) {\r\n            ContainerType a{false, true, false, true};\r\n            auto it = a.end();\r\n            (void) it.operator->();\r\n        }\r\n    }\r\n\r\n    static void test_case_operator_preincrement_off_end() {\r\n        ContainerType a{false, true, false, true};\r\n        auto it = a.begin();\r\n        for (size_t idx = 0; idx < 5; ++idx) {\r\n            ++it;\r\n        }\r\n    }\r\n\r\n    static void test_case_operator_predecrement_before_begin() {\r\n        ContainerType a{false, true, false, true};\r\n        auto it = a.begin();\r\n        --it;\r\n    }\r\n\r\n    static void test_case_operator_advance_before_begin() {\r\n        ContainerType a{false, true, false, true};\r\n        auto it = a.begin();\r\n        it += -1;\r\n    }\r\n\r\n    static void test_case_operator_advance_after_end() {\r\n        ContainerType a{false, true, false, true};\r\n        auto it = a.begin();\r\n        it += 5;\r\n    }\r\n\r\n    static void test_case_operator_retreat_before_begin() {\r\n        ContainerType a{false, true, false, true};\r\n        auto it = a.begin();\r\n        it -= 1;\r\n    }\r\n\r\n    static void test_case_operator_retreat_after_end() {\r\n        ContainerType a{false, true, false, true};\r\n        auto it = a.begin();\r\n        it -= -5;\r\n    }\r\n\r\n    static void test_case_operator_subtract_incompatible_different_views() {\r\n        ContainerType a{false, true, false, true};\r\n        ContainerType b{false, true, false, true};\r\n        (void) (a.begin() - b.begin());\r\n    }\r\n\r\n    static void test_case_operator_subtract_incompatible_value_initialized() {\r\n        ContainerType a{false, true, false, true};\r\n        (void) (a.begin() - MutableIteratorType{});\r\n    }\r\n\r\n    static void test_case_operator_equal_incompatible_different_views() {\r\n        ContainerType a{false, true, false, true};\r\n        ContainerType b{false, true, false, true};\r\n        (void) (a.begin() == b.begin());\r\n    }\r\n\r\n    static void test_case_operator_equal_incompatible_value_initialized() {\r\n        ContainerType a{false, true, false, true};\r\n        (void) (a.begin() == MutableIteratorType{});\r\n    }\r\n\r\n    static void test_case_operator_less_incompatible_different_views() {\r\n        ContainerType a{false, true, false, true};\r\n        ContainerType b{false, true, false, true};\r\n        (void) (a.begin() < b.begin());\r\n    }\r\n\r\n    static void test_case_operator_less_incompatible_value_initialized() {\r\n        ContainerType a{false, true, false, true};\r\n        (void) (a.begin() < MutableIteratorType{});\r\n    }\r\n\r\n    static void test_case_operator_subscript_out_of_range_empty() {\r\n        ZeroContainerType a{};\r\n        (void) a[Traits::zero_offset];\r\n    }\r\n\r\n    static void test_case_operator_subscript_out_of_range() {\r\n        ContainerType a{false, true, false, true};\r\n#pragma warning(push)\r\n#pragma warning(disable : 28020) // Yay sometimes PREfast catches this one at compile time!\r\n        (void) a[Traits::zero_offset + 4];\r\n#pragma warning(pop)\r\n    }\r\n\r\n    static void test_case_front_empty() {\r\n        ZeroContainerType a{};\r\n        (void) a.front();\r\n    }\r\n\r\n    static void test_case_back_empty() {\r\n        ZeroContainerType a{};\r\n        (void) a.back();\r\n    }\r\n\r\n    static void negative_cases() {\r\n        test_case_operator_advance_value_initialized_iterator_zero();\r\n        test_case_operator_retreat_value_initialized_iterator_zero();\r\n    }\r\n\r\n    static void add_cases(std_testing::death_test_executive& exec) {\r\n#if _ITERATOR_DEBUG_LEVEL != 0\r\n        exec.add_death_tests({\r\n            test_case_operator_dereference_value_initialized_iterator,\r\n            test_case_operator_preincrement_value_initialized_iterator,\r\n            test_case_operator_predecrement_value_initialized_iterator,\r\n            test_case_operator_advance_value_initialized_iterator,\r\n            test_case_operator_retreat_value_initialized_iterator,\r\n            test_case_operator_dereference_end_iterator,\r\n            test_case_operator_preincrement_off_end,\r\n            test_case_operator_predecrement_before_begin,\r\n            test_case_operator_advance_before_begin,\r\n            test_case_operator_advance_after_end,\r\n            test_case_operator_retreat_before_begin,\r\n            test_case_operator_retreat_after_end,\r\n            test_case_operator_subtract_incompatible_different_views,\r\n            test_case_operator_subtract_incompatible_value_initialized,\r\n            test_case_operator_equal_incompatible_different_views,\r\n            test_case_operator_equal_incompatible_value_initialized,\r\n            test_case_operator_less_incompatible_different_views,\r\n            test_case_operator_less_incompatible_value_initialized,\r\n            test_case_operator_subscript_out_of_range_empty,\r\n            test_case_operator_subscript_out_of_range,\r\n            test_case_front_empty,\r\n            test_case_back_empty,\r\n        });\r\n\r\n        if constexpr (Traits::has_arrow) {\r\n            exec.add_death_tests({\r\n                test_case_operator_arrow_value_initialized_iterator,\r\n                test_case_operator_arrow_end_iterator,\r\n            });\r\n        }\r\n#else // ^^^ _ITERATOR_DEBUG_LEVEL != 0 / _ITERATOR_DEBUG_LEVEL == 0 vvv\r\n        (void) exec;\r\n#endif // ^^^ _ITERATOR_DEBUG_LEVEL == 0 ^^^\r\n    }\r\n};\r\n\r\n\r\nstruct ArrayTestCaseTraits {\r\n    using ContainerType     = array<int, 4>;\r\n    using IteratorType      = array<int, 4>::iterator;\r\n    using ZeroContainerType = array<int, 0>;\r\n\r\n    static constexpr size_t zero_offset = 0;\r\n    static constexpr bool has_arrow     = true;\r\n};\r\n\r\nstruct ConstArrayTestCaseTraits {\r\n    using ContainerType     = const array<int, 4>;\r\n    using IteratorType      = array<int, 4>::const_iterator;\r\n    using ZeroContainerType = const array<int, 0>;\r\n\r\n    static constexpr size_t zero_offset = 0;\r\n    static constexpr bool has_arrow     = true;\r\n};\r\n\r\nstruct VectorTestCaseTraits {\r\n    using ContainerType     = vector<int>;\r\n    using IteratorType      = vector<int>::iterator;\r\n    using ZeroContainerType = ContainerType;\r\n\r\n    static constexpr size_t zero_offset = 0;\r\n    static constexpr bool has_arrow     = true;\r\n};\r\n\r\nstruct ConstVectorTestCaseTraits {\r\n    using ContainerType     = const vector<int>;\r\n    using IteratorType      = vector<int>::const_iterator;\r\n    using ZeroContainerType = ContainerType;\r\n\r\n    static constexpr size_t zero_offset = 0;\r\n    static constexpr bool has_arrow     = true;\r\n};\r\n\r\nstruct VectorBoolTestCaseTraits {\r\n    using ContainerType     = vector<bool>;\r\n    using IteratorType      = vector<bool>::iterator;\r\n    using ZeroContainerType = ContainerType;\r\n\r\n    static constexpr size_t zero_offset = 0;\r\n    static constexpr bool has_arrow     = false;\r\n};\r\n\r\nstruct ConstVectorBoolTestCaseTraits {\r\n    using ContainerType     = const vector<bool>;\r\n    using IteratorType      = vector<bool>::const_iterator;\r\n    using ZeroContainerType = ContainerType;\r\n\r\n    static constexpr size_t zero_offset = 0;\r\n    static constexpr bool has_arrow     = false;\r\n};\r\n\r\nstruct DequeTestCaseTraits {\r\n    using ContainerType     = deque<int>;\r\n    using IteratorType      = deque<int>::iterator;\r\n    using ZeroContainerType = ContainerType;\r\n\r\n    static constexpr size_t zero_offset = 0;\r\n    static constexpr bool has_arrow     = true;\r\n};\r\n\r\nstruct ConstDequeTestCaseTraits {\r\n    using ContainerType     = const deque<int>;\r\n    using IteratorType      = deque<int>::const_iterator;\r\n    using ZeroContainerType = ContainerType;\r\n\r\n    static constexpr size_t zero_offset = 0;\r\n    static constexpr bool has_arrow     = true;\r\n};\r\n\r\nstruct StringTestCaseTraits {\r\n    using ContainerType     = string;\r\n    using IteratorType      = string::iterator;\r\n    using ZeroContainerType = ContainerType;\r\n\r\n    static constexpr size_t zero_offset = 1;\r\n    static constexpr bool has_arrow     = true;\r\n};\r\n\r\nstruct ConstStringTestCaseTraits {\r\n    using ContainerType     = const string;\r\n    using IteratorType      = string::const_iterator;\r\n    using ZeroContainerType = ContainerType;\r\n\r\n    static constexpr size_t zero_offset = 1;\r\n    static constexpr bool has_arrow     = true;\r\n};\r\n\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec([] {\r\n        TestCases<ArrayTestCaseTraits>::negative_cases();\r\n        TestCases<ConstArrayTestCaseTraits>::negative_cases();\r\n        TestCases<VectorTestCaseTraits>::negative_cases();\r\n        TestCases<ConstVectorTestCaseTraits>::negative_cases();\r\n        TestCases<VectorBoolTestCaseTraits>::negative_cases();\r\n        TestCases<ConstVectorBoolTestCaseTraits>::negative_cases();\r\n        TestCases<DequeTestCaseTraits>::negative_cases();\r\n        TestCases<ConstDequeTestCaseTraits>::negative_cases();\r\n        TestCases<StringTestCaseTraits>::negative_cases();\r\n        TestCases<ConstStringTestCaseTraits>::negative_cases();\r\n    });\r\n\r\n    TestCases<ArrayTestCaseTraits>::add_cases(exec);\r\n    TestCases<ConstArrayTestCaseTraits>::add_cases(exec);\r\n    TestCases<VectorTestCaseTraits>::add_cases(exec);\r\n    TestCases<ConstVectorTestCaseTraits>::add_cases(exec);\r\n    TestCases<VectorBoolTestCaseTraits>::add_cases(exec);\r\n    TestCases<ConstVectorBoolTestCaseTraits>::add_cases(exec);\r\n    TestCases<DequeTestCaseTraits>::add_cases(exec);\r\n    TestCases<ConstDequeTestCaseTraits>::add_cases(exec);\r\n    TestCases<StringTestCaseTraits>::add_cases(exec);\r\n    TestCases<ConstStringTestCaseTraits>::add_cases(exec);\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0849827_multicontainer_emplace_hint_position/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0849827_multicontainer_emplace_hint_position/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <iterator>\r\n#include <map>\r\n#include <utility>\r\n\r\nusing namespace std;\r\n\r\nstatic constexpr pair<const int, int> expected4[] = {\r\n    {0, 0},\r\n    {1, 0},\r\n    {2, 0},\r\n    {3, 0},\r\n};\r\n\r\nint main() {\r\n    // All zero special cases:\r\n    {\r\n        map<int, int> m;\r\n        m.emplace_hint(m.begin(), 2, 42);\r\n        assert((m.size() == 1 && *m.begin() == pair<const int, int>(2, 42)));\r\n    }\r\n\r\n    {\r\n        map<int, int> m;\r\n        m.emplace_hint(m.end(), 2, 42);\r\n        assert((m.size() == 1 && *m.begin() == pair<const int, int>(2, 42)));\r\n    }\r\n\r\n    {\r\n        multimap<int, int> m;\r\n        m.emplace_hint(m.begin(), 2, 42);\r\n        assert((m.size() == 1 && *m.begin() == pair<const int, int>(2, 42)));\r\n    }\r\n\r\n    {\r\n        multimap<int, int> m;\r\n        m.emplace_hint(m.end(), 2, 42);\r\n        assert((m.size() == 1 && *m.begin() == pair<const int, int>(2, 42)));\r\n    }\r\n\r\n    // Map begin/end special cases:\r\n    {\r\n        map<int, int> m{\r\n            {2, 0},\r\n            {3, 0},\r\n            {4, 0},\r\n        };\r\n\r\n        m.emplace_hint(m.end(), 6, 0);\r\n        m.emplace_hint(m.end(), 5, 0);\r\n        m.emplace_hint(m.begin(), 0, 0);\r\n        m.emplace_hint(m.begin(), 1, 0);\r\n\r\n        static constexpr pair<const int, int> expected[] = {\r\n            {0, 0},\r\n            {1, 0},\r\n            {2, 0},\r\n            {3, 0},\r\n            {4, 0},\r\n            {5, 0},\r\n            {6, 0},\r\n        };\r\n\r\n        assert(equal(m.begin(), m.end(), begin(expected), end(expected)));\r\n    }\r\n\r\n    {\r\n        // Inserted value goes immediately before the hint\r\n        map<int, int> m{\r\n            {0, 0},\r\n            {2, 0},\r\n            {3, 0},\r\n        };\r\n\r\n        m.emplace_hint(next(m.begin()), 1, 0);\r\n        assert(equal(m.begin(), m.end(), begin(expected4), end(expected4)));\r\n    }\r\n\r\n    {\r\n        // Inserted value goes before the hint, but not immediately before\r\n        map<int, int> m{\r\n            {1, 0},\r\n            {2, 0},\r\n            {3, 0},\r\n        };\r\n\r\n        m.emplace_hint(next(m.begin()), 0, 0);\r\n        assert(equal(m.begin(), m.end(), begin(expected4), end(expected4)));\r\n    }\r\n\r\n    {\r\n        // Inserted value goes immediately after the hint\r\n        map<int, int> m{\r\n            {0, 0},\r\n            {1, 0},\r\n            {3, 0},\r\n        };\r\n\r\n        m.emplace_hint(next(m.begin()), 2, 0);\r\n        assert(equal(m.begin(), m.end(), begin(expected4), end(expected4)));\r\n    }\r\n\r\n    {\r\n        // Inserted value goes after the hint, but isn't the hint's immediate successor\r\n        map<int, int> m{\r\n            {0, 0},\r\n            {1, 0},\r\n            {2, 0},\r\n        };\r\n\r\n        m.emplace_hint(next(m.begin()), 3, 0);\r\n        assert(equal(m.begin(), m.end(), begin(expected4), end(expected4)));\r\n    }\r\n\r\n    {\r\n        // Inserted value is exactly the hint (and no insertion occurs)\r\n        map<int, int> m{\r\n            {0, 0},\r\n            {1, 0},\r\n            {2, 0},\r\n            {3, 0},\r\n        };\r\n\r\n        const auto where = next(m.begin());\r\n        assert(where == m.emplace_hint(where, 1, 0));\r\n        assert(equal(m.begin(), m.end(), begin(expected4), end(expected4)));\r\n    }\r\n\r\n    // Multimap special cases:\r\n    {\r\n        multimap<int, int> m{\r\n            {1, 0},\r\n            {2, 0},\r\n            {3, 0},\r\n            {4, 2},\r\n            {4, 4},\r\n            {4, 5},\r\n            {5, 0},\r\n            {6, 0},\r\n            {7, 0},\r\n        };\r\n\r\n        m.emplace_hint(next(m.begin(), 4), 4, 3); // in the middle of 4s, should insert at position 6\r\n        // should insert at the beginning of the 4s:\r\n        m.emplace_hint(m.begin(), 4, 1);\r\n        m.emplace_hint(next(m.begin()), 4, 0);\r\n        // should insert at the end of the 4s:\r\n        m.emplace_hint(prev(m.end()), 4, 6);\r\n        m.emplace_hint(m.end(), 4, 7);\r\n\r\n        // other edge cases just to make sure we didn't break anything with this change :)\r\n        m.emplace_hint(m.begin(), 0, 0);\r\n        m.emplace_hint(m.end(), 8, 0);\r\n\r\n        static constexpr pair<const int, int> expected[] = {\r\n            {0, 0},\r\n            {1, 0},\r\n            {2, 0},\r\n            {3, 0},\r\n            {4, 0},\r\n            {4, 1},\r\n            {4, 2},\r\n            {4, 3},\r\n            {4, 4},\r\n            {4, 5},\r\n            {4, 6},\r\n            {4, 7},\r\n            {5, 0},\r\n            {6, 0},\r\n            {7, 0},\r\n            {8, 0},\r\n        };\r\n\r\n        assert(equal(m.begin(), m.end(), begin(expected), end(expected)));\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0938757_attribute_order/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\prefix.lst\r\nRUNALL_CROSSLIST\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MTd /std:c++latest /permissive- /D_PREFAST_ -Wno-ignored-attributes -Wno-assume\"\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0938757_attribute_order/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Defend against regression of VSO-938757 \"Headers are unfriendly to clang-cl with SAL annotation re-use\"\r\n//\r\n// Clang emits an error when it sees a non-standard attribute (__declspec()) before a standard attribute ([[nodiscard]])\r\n// in a declaration. To support reuse of the STL's SAL annotations in Clang we order our various attribute declarations\r\n// appropriately. This test guards against regression by compiling all headers with clang-cl after defining _PREFAST_ so\r\n// as to trigger the aforementioned errors.\r\n\r\n#include <__msvc_all_public_headers.hpp>\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0961751_hash_range_erase/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0961751_hash_range_erase/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _STL_INTERNAL_CHECK_EXHAUSTIVE\r\n#include <cassert>\r\n#include <cstdlib>\r\n#include <functional>\r\n#include <iterator>\r\n#include <limits>\r\n#include <memory>\r\n#include <stdexcept>\r\n#include <type_traits>\r\n#include <unordered_set>\r\n#include <utility>\r\n#include <vector>\r\n\r\n#include <test_death.hpp>\r\n\r\nusing namespace std;\r\n\r\nconstexpr auto size_max = (numeric_limits<size_t>::max)();\r\n\r\nstatic size_t liveness_alive_objects;\r\n\r\ntemplate <class T>\r\nstruct liveness_allocator {\r\n    using value_type = T;\r\n\r\n    liveness_allocator()                                     = default;\r\n    liveness_allocator(const liveness_allocator&)            = default;\r\n    liveness_allocator& operator=(const liveness_allocator&) = default;\r\n    template <class U, enable_if_t<!is_same_v<T, U>, int> = 0>\r\n    liveness_allocator(const liveness_allocator<U>&) {}\r\n\r\n    T* allocate(const size_t n) {\r\n        liveness_alive_objects += n;\r\n        return allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* const p, const size_t n) {\r\n        liveness_alive_objects -= n;\r\n        allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class B>\r\n    friend bool operator==(const liveness_allocator&, const liveness_allocator<B>&) noexcept {\r\n        return true;\r\n    }\r\n    template <class B>\r\n    friend bool operator!=(const liveness_allocator&, const liveness_allocator<B>&) noexcept {\r\n        return false;\r\n    }\r\n};\r\n\r\nstruct erase_fixture {\r\n    struct liveness_empty_asserter {\r\n        ~liveness_empty_asserter() {\r\n            assert(liveness_alive_objects == 0);\r\n        }\r\n    };\r\n    liveness_empty_asserter instance_empty; // destroyed after theHash\r\n\r\n    using container = unordered_set<int, hash<int>, equal_to<>, liveness_allocator<int>>;\r\n    using iterator  = container::iterator;\r\n    container theHash;\r\n\r\n    struct post_asserter {\r\n        container& theHash;\r\n\r\n        ~post_asserter() {\r\n            // tests that erase actually deallocated\r\n            assert(liveness_alive_objects\r\n                   == (_ITERATOR_DEBUG_LEVEL != 0) * 2 + 1 + theHash.size() + theHash.bucket_count() * 2);\r\n            theHash._Stl_internal_check_container_invariants();\r\n        }\r\n    };\r\n    post_asserter instance_nonempty; // destroyed before theHash\r\n\r\n    void assert_iterators_consistent(const vector<iterator>& iterators) {\r\n        assert(theHash.size() == iterators.size() - 1);\r\n        auto i = theHash.begin();\r\n        assert(i == iterators[0]);\r\n        for (size_t idx = 1; idx < iterators.size(); ++idx) {\r\n            ++i;\r\n            assert(i == iterators[idx]);\r\n        }\r\n    }\r\n\r\n    vector<iterator> get_iterators() {\r\n        vector<iterator> iterators;\r\n        auto i = theHash.cbegin();\r\n        for (size_t idx = 0; idx < theHash.size(); ++idx) {\r\n            iterators.push_back(i);\r\n            ++i;\r\n        }\r\n\r\n        iterators.push_back(i);\r\n        return iterators;\r\n    }\r\n\r\n    erase_fixture() : instance_empty(), theHash{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, instance_nonempty{theHash} {}\r\n\r\n    void test_case_erase_one() {\r\n        auto iterators = get_iterators();\r\n        theHash.erase(next(theHash.begin(), static_cast<ptrdiff_t>(theHash.size() - 1)));\r\n        iterators[iterators.size() - 2] = iterators[iterators.size() - 1];\r\n        iterators.pop_back();\r\n        assert_iterators_consistent(iterators);\r\n    }\r\n\r\n    void test_case_range_erase_nothing() {\r\n        auto iterators = get_iterators();\r\n        theHash.erase(theHash.begin(), theHash.begin());\r\n        assert_iterators_consistent(iterators);\r\n    }\r\n\r\n    void test_case_range_erase_one() {\r\n        auto iterators = get_iterators();\r\n        theHash.erase(next(theHash.begin(), static_cast<ptrdiff_t>(theHash.size() - 1)), theHash.end());\r\n        iterators.erase(iterators.end() - 2);\r\n        assert_iterators_consistent(iterators);\r\n    }\r\n\r\n    void test_case_range_erase_some() {\r\n        auto iterators = get_iterators();\r\n        theHash.erase(next(theHash.begin()), next(theHash.begin(), static_cast<ptrdiff_t>(theHash.size() - 1)));\r\n        iterators.erase(iterators.begin() + 1, iterators.begin() + static_cast<ptrdiff_t>(iterators.size() - 2));\r\n        assert_iterators_consistent(iterators);\r\n    }\r\n\r\n    void test_case_range_erase_all() {\r\n        auto iterators = get_iterators();\r\n        theHash.erase(theHash.begin(), theHash.end());\r\n        iterators.erase(iterators.begin(), iterators.end() - 1);\r\n        assert_iterators_consistent(iterators);\r\n    }\r\n};\r\n\r\nvoid test_case_erase_one_bad() {\r\n    erase_fixture f;\r\n    auto i = f.theHash.begin();\r\n    f.theHash.erase(i);\r\n    (void) *i;\r\n}\r\n\r\nvoid test_case_range_erase_one_bad() {\r\n    erase_fixture f;\r\n    auto i = f.theHash.begin();\r\n    f.theHash.erase(i, next(i));\r\n    (void) *i;\r\n}\r\n\r\nvoid test_case_range_erase_some_bad_first() {\r\n    erase_fixture f;\r\n    auto first = f.theHash.begin();\r\n    ++first;\r\n    f.theHash.erase(first, f.theHash.end());\r\n    (void) *first;\r\n}\r\n\r\nvoid test_case_range_erase_some_bad_middle() {\r\n    erase_fixture f;\r\n    auto middle = f.theHash.begin();\r\n    ++middle;\r\n    ++middle;\r\n    f.theHash.erase(next(f.theHash.begin()), next(f.theHash.begin(), static_cast<ptrdiff_t>(f.theHash.size() - 1)));\r\n    (void) *middle;\r\n}\r\n\r\nvoid test_case_range_erase_some_bad_last() {\r\n    erase_fixture f;\r\n    auto last = next(f.theHash.end(), static_cast<ptrdiff_t>(f.theHash.size() - 2));\r\n    f.theHash.erase(next(f.theHash.begin()), next(last));\r\n    (void) *last;\r\n}\r\n\r\nvoid test_case_range_erase_all_bad_first() {\r\n    erase_fixture f;\r\n    auto first = f.theHash.begin();\r\n    f.theHash.erase(f.theHash.begin(), f.theHash.end());\r\n    (void) *first;\r\n}\r\n\r\nvoid test_case_range_erase_all_bad_middle() {\r\n    erase_fixture f;\r\n    auto middle = f.theHash.begin();\r\n    ++middle;\r\n    ++middle;\r\n    f.theHash.erase(f.theHash.begin(), f.theHash.end());\r\n    (void) *middle;\r\n}\r\n\r\nvoid test_case_range_erase_all_bad_last() {\r\n    erase_fixture f;\r\n    auto last = next(f.theHash.end(), static_cast<ptrdiff_t>(f.theHash.size() - 1));\r\n    f.theHash.erase(f.theHash.begin(), f.theHash.end());\r\n    (void) *last;\r\n}\r\n\r\nstruct elem {\r\n    size_t memoized_hash;\r\n    size_t key;\r\n\r\n    friend bool operator==(const elem& lhs, const elem& rhs) noexcept {\r\n        return lhs.key == rhs.key;\r\n    }\r\n};\r\n\r\nstatic size_t allowed_hash_calls;\r\nstruct throwing_hash {\r\n    size_t operator()(const elem& e) const {\r\n        if (allowed_hash_calls == 0) {\r\n            throw runtime_error(\"example exception\");\r\n        }\r\n\r\n        --allowed_hash_calls;\r\n        return e.memoized_hash;\r\n    }\r\n};\r\n\r\nvoid fill_throwing_elems(unordered_set<elem, throwing_hash>& theHash) {\r\n    const size_t oldAllowed = exchange(allowed_hash_calls, size_max);\r\n    allowed_hash_calls      = size_max;\r\n    theHash.max_load_factor(2.0f);\r\n    for (size_t idx = 0; idx < 50; ++idx) {\r\n        theHash.insert({0, idx});\r\n    }\r\n    for (size_t idx = 50; idx < 100; ++idx) {\r\n        theHash.insert({size_max & (~size_t{15}), idx});\r\n    }\r\n    for (size_t idx = 100; idx < 150; ++idx) {\r\n        theHash.insert({size_max, idx});\r\n    }\r\n    // this loop will terminate because the max load factor is 2\r\n    const auto buckets = theHash.bucket_count();\r\n    for (size_t idx = 150; idx < buckets; ++idx) {\r\n        theHash.insert({idx, idx});\r\n    }\r\n    allowed_hash_calls = oldAllowed;\r\n}\r\n\r\nvoid test_case_throwing_hash_not_called_in_clear() {\r\n    unordered_set<elem, throwing_hash> theHash;\r\n    fill_throwing_elems(theHash);\r\n    allowed_hash_calls = 0; // ban calling the hash function\r\n    theHash.clear(); // should choose the 'bulk' strategy always\r\n    theHash.clear(); // should choose the 'no-op' strategy always\r\n    allowed_hash_calls = size_max;\r\n    theHash.insert({0, 0});\r\n    allowed_hash_calls = 0;\r\n    theHash.clear(); // would want to choose the 'elementwise' strategy, but can't do so because the hash is throwing\r\n}\r\n\r\nvoid test_case_consistent_after_throwing_hash() {\r\n    unordered_set<elem, throwing_hash> theHash;\r\n    fill_throwing_elems(theHash);\r\n    allowed_hash_calls = size_max;\r\n    size_t total_hash_calls;\r\n    { // determine how many hash calls are necessary\r\n        auto theCopy       = theHash;\r\n        allowed_hash_calls = size_max;\r\n        theCopy.erase(theCopy.begin(), theCopy.end());\r\n        total_hash_calls = size_max - allowed_hash_calls;\r\n    }\r\n\r\n    // throw for each number of calls less than that and make sure the container is okay\r\n    for (size_t callsNow = 0; callsNow < total_hash_calls; ++callsNow) {\r\n        allowed_hash_calls = size_max;\r\n        auto theCopy       = theHash;\r\n        try {\r\n            allowed_hash_calls = callsNow;\r\n            theCopy.erase(theCopy.begin(), theCopy.end());\r\n            abort();\r\n        } catch (const runtime_error&) {\r\n            allowed_hash_calls = size_max;\r\n            theCopy._Stl_internal_check_container_invariants();\r\n        }\r\n    }\r\n\r\n    allowed_hash_calls = total_hash_calls;\r\n    theHash.erase(theHash.begin(), theHash.end());\r\n}\r\n\r\nnamespace std {\r\n    template <>\r\n    struct hash<elem> {\r\n        size_t operator()(const elem& e) const noexcept {\r\n            return e.memoized_hash;\r\n        }\r\n    };\r\n} // namespace std\r\n\r\nstruct erase_bucket_consistency_fixture {\r\n    struct liveness_empty_asserter {\r\n        ~liveness_empty_asserter() {\r\n            assert(liveness_alive_objects == 0);\r\n        }\r\n    };\r\n    liveness_empty_asserter instance_empty; // destroyed after theHash\r\n\r\n    using container = unordered_set<elem, hash<elem>, equal_to<>, liveness_allocator<elem>>;\r\n    container theHash;\r\n\r\n    struct post_asserter {\r\n        container& theHash;\r\n\r\n        ~post_asserter() {\r\n            // tests that erase actually deallocated\r\n            assert(liveness_alive_objects\r\n                   == (_ITERATOR_DEBUG_LEVEL != 0) * 2 + 1 + theHash.size() + theHash.bucket_count() * 2);\r\n            assert(distance(theHash.begin(), theHash.end()) == static_cast<ptrdiff_t>(theHash.size()));\r\n            theHash._Stl_internal_check_container_invariants();\r\n        }\r\n    };\r\n    post_asserter instance_nonempty; // destroyed before theHash\r\n\r\n    size_t zeroBucket;\r\n    size_t midBucket;\r\n    size_t maxBucket;\r\n\r\n    erase_bucket_consistency_fixture() : instance_empty(), theHash(), instance_nonempty{theHash} {\r\n        // create 3 buckets of 5 elements each; assuming that these are different buckets is a nonstandard assumption\r\n        theHash.reserve(30);\r\n        for (size_t idx = 0; idx < 5; ++idx) {\r\n            theHash.insert({0, idx});\r\n        }\r\n        for (size_t idx = 5; idx < 10; ++idx) {\r\n            theHash.insert({size_max & (~size_t{15}), idx});\r\n        }\r\n        for (size_t idx = 10; idx < 15; ++idx) {\r\n            theHash.insert({size_max, idx});\r\n        }\r\n\r\n        zeroBucket = theHash.bucket({0, 0});\r\n        midBucket  = theHash.bucket({size_max & (~size_t{15}), 10});\r\n        maxBucket  = theHash.bucket({size_max, 20});\r\n    }\r\n\r\n    void assert_equal(size_t expected, size_t actual) {\r\n        assert(expected == actual);\r\n    }\r\n\r\n    void assert_buckets(size_t zero, size_t mid, size_t maxB) {\r\n        assert_equal(zero, theHash.bucket_size(zeroBucket));\r\n        assert_equal(mid, theHash.bucket_size(midBucket));\r\n        assert_equal(maxB, theHash.bucket_size(maxBucket));\r\n    }\r\n\r\n    void test_case_intra_first_bucket() {\r\n        theHash.erase(next(theHash.begin()), next(theHash.begin(), 4));\r\n        assert_buckets(2, 5, 5);\r\n    }\r\n\r\n    void test_case_prefix_first_bucket() {\r\n        theHash.erase(theHash.begin(), next(theHash.begin(), 4));\r\n        assert_buckets(1, 5, 5);\r\n    }\r\n\r\n    void test_case_first_first_bucket() {\r\n        theHash.erase(theHash.begin(), next(theHash.begin()));\r\n        assert_buckets(4, 5, 5);\r\n    }\r\n\r\n    void test_case_last_first_bucket() {\r\n        const auto i = next(theHash.begin(), 4);\r\n        theHash.erase(i, next(i));\r\n        assert_buckets(4, 5, 5);\r\n    }\r\n\r\n    void test_case_suffix_first_bucket() {\r\n        theHash.erase(next(theHash.begin(), 2), next(theHash.begin(), 5));\r\n        assert_buckets(2, 5, 5);\r\n    }\r\n\r\n    void test_case_whole_first_bucket() {\r\n        theHash.erase(theHash.begin(), next(theHash.begin(), 5));\r\n        assert_buckets(0, 5, 5);\r\n    }\r\n\r\n    void test_case_suffix_first_first_second_bucket() {\r\n        theHash.erase(next(theHash.begin()), next(theHash.begin(), 6));\r\n        assert_buckets(1, 4, 5);\r\n    }\r\n\r\n    void test_case_whole_first_first_second_bucket() {\r\n        theHash.erase(theHash.begin(), next(theHash.begin(), 6));\r\n        assert_buckets(0, 4, 5);\r\n    }\r\n\r\n    void test_case_suffix_first_prefix_second_bucket() {\r\n        theHash.erase(next(theHash.begin()), next(theHash.begin(), 7));\r\n        assert_buckets(1, 3, 5);\r\n    }\r\n\r\n    void test_case_whole_first_prefix_second_bucket() {\r\n        theHash.erase(theHash.begin(), next(theHash.begin(), 7));\r\n        assert_buckets(0, 3, 5);\r\n    }\r\n\r\n    void test_case_suffix_first_whole_second_bucket() {\r\n        theHash.erase(next(theHash.begin()), next(theHash.begin(), 10));\r\n        assert_buckets(1, 0, 5);\r\n    }\r\n\r\n    void test_case_whole_first_whole_second_bucket() {\r\n        theHash.erase(theHash.begin(), next(theHash.begin(), 10));\r\n        assert_buckets(0, 0, 5);\r\n    }\r\n\r\n    void test_case_suffix_first_first_third_bucket() {\r\n        theHash.erase(next(theHash.begin()), next(theHash.begin(), 11));\r\n        assert_buckets(1, 0, 4);\r\n    }\r\n\r\n    void test_case_whole_first_first_third_bucket() {\r\n        theHash.erase(theHash.begin(), next(theHash.begin(), 11));\r\n        assert_buckets(0, 0, 4);\r\n    }\r\n\r\n    void test_case_suffix_first_prefix_third_bucket() {\r\n        theHash.erase(next(theHash.begin()), next(theHash.begin(), 12));\r\n        assert_buckets(1, 0, 3);\r\n    }\r\n\r\n    void test_case_whole_first_prefix_third_bucket() {\r\n        theHash.erase(theHash.begin(), next(theHash.begin(), 12));\r\n        assert_buckets(0, 0, 3);\r\n    }\r\n\r\n    void test_case_all() {\r\n        theHash.erase(theHash.begin(), theHash.end());\r\n        assert_buckets(0, 0, 0);\r\n    }\r\n\r\n    void test_case_none() {\r\n        theHash.erase(theHash.begin(), theHash.begin());\r\n        assert_buckets(5, 5, 5);\r\n    }\r\n};\r\n\r\nstatic size_t counted_hash_calls;\r\nstruct counting_hash {\r\n    size_t operator()(const elem& e) const noexcept {\r\n        ++counted_hash_calls;\r\n        return e.memoized_hash;\r\n    }\r\n};\r\n\r\nvoid test_case_elementwise_clear_called() {\r\n    // this test case tests an implementation detail\r\n    size_t calls;\r\n    {\r\n        unordered_set<elem, counting_hash> theHash;\r\n        theHash.max_load_factor(0.1f); // 10 buckets per element\r\n        for (size_t idx = 1; idx < size_max / 2; idx <<= 1) {\r\n            theHash.insert({idx, idx});\r\n        }\r\n\r\n        // 10 buckets per element should choose the 'elementwise' strategy meaning the hash\r\n        // function should be called\r\n        counted_hash_calls = 0;\r\n        theHash.clear();\r\n        assert(counted_hash_calls != 0);\r\n        theHash.insert({0, 0});\r\n        calls = counted_hash_calls;\r\n    } // destroying the container shouldn't hash anything\r\n    assert(counted_hash_calls == calls);\r\n    counted_hash_calls = 0;\r\n}\r\n\r\nint main(int argc, char* argv[]) {\r\n    std_testing::death_test_executive exec([] {\r\n        erase_fixture{}.test_case_erase_one();\r\n        erase_fixture{}.test_case_range_erase_nothing();\r\n        erase_fixture{}.test_case_range_erase_one();\r\n        erase_fixture{}.test_case_range_erase_some();\r\n        erase_fixture{}.test_case_range_erase_all();\r\n        test_case_throwing_hash_not_called_in_clear();\r\n        test_case_consistent_after_throwing_hash();\r\n        erase_bucket_consistency_fixture{}.test_case_intra_first_bucket();\r\n        erase_bucket_consistency_fixture{}.test_case_prefix_first_bucket();\r\n        erase_bucket_consistency_fixture{}.test_case_first_first_bucket();\r\n        erase_bucket_consistency_fixture{}.test_case_last_first_bucket();\r\n        erase_bucket_consistency_fixture{}.test_case_suffix_first_bucket();\r\n        erase_bucket_consistency_fixture{}.test_case_whole_first_bucket();\r\n        erase_bucket_consistency_fixture{}.test_case_suffix_first_first_second_bucket();\r\n        erase_bucket_consistency_fixture{}.test_case_whole_first_first_second_bucket();\r\n        erase_bucket_consistency_fixture{}.test_case_suffix_first_prefix_second_bucket();\r\n        erase_bucket_consistency_fixture{}.test_case_whole_first_prefix_second_bucket();\r\n        erase_bucket_consistency_fixture{}.test_case_suffix_first_whole_second_bucket();\r\n        erase_bucket_consistency_fixture{}.test_case_whole_first_whole_second_bucket();\r\n        erase_bucket_consistency_fixture{}.test_case_suffix_first_first_third_bucket();\r\n        erase_bucket_consistency_fixture{}.test_case_whole_first_first_third_bucket();\r\n        erase_bucket_consistency_fixture{}.test_case_suffix_first_prefix_third_bucket();\r\n        erase_bucket_consistency_fixture{}.test_case_whole_first_prefix_third_bucket();\r\n        erase_bucket_consistency_fixture{}.test_case_all();\r\n        erase_bucket_consistency_fixture{}.test_case_none();\r\n        test_case_elementwise_clear_called();\r\n    });\r\n\r\n#if _ITERATOR_DEBUG_LEVEL == 2\r\n    exec.add_death_tests({\r\n        test_case_erase_one_bad,\r\n        test_case_range_erase_one_bad,\r\n        test_case_range_erase_some_bad_first,\r\n        test_case_range_erase_some_bad_middle,\r\n        test_case_range_erase_some_bad_last,\r\n        test_case_range_erase_all_bad_first,\r\n        test_case_range_erase_all_bad_middle,\r\n        test_case_range_erase_all_bad_last,\r\n    });\r\n#endif // _ITERATOR_DEBUG_LEVEL == 2\r\n\r\n    return exec.run(argc, argv);\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0971246_legacy_await_headers/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/EHsc /MT /std:c++latest /permissive-\"\r\n*\tPM_CL=\"/EHsc /MT /std:c++latest /permissive\"\r\n*\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- /await\"\r\n*\tPM_CL=\"/EHsc /MT /std:c++latest /permissive /await\"\r\n*\tPM_CL=\"/BE /c /EHsc /MD /std:c++latest /permissive-\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"\"\r\nASAN\tPM_CL=\"-fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\n"
  },
  {
    "path": "tests/std/tests/VSO_0971246_legacy_await_headers/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#define _SILENCE_EXPERIMENTAL_COROUTINE_DEPRECATION_WARNINGS\r\n\r\n#include <cstdio>\r\n#include <experimental/generator>\r\n#include <future>\r\n#include <optional>\r\n#include <vector>\r\n\r\nusing namespace std::experimental;\r\nusing namespace std;\r\n\r\ngenerator<int> g0() {\r\n    co_return;\r\n}\r\n\r\ngenerator<int> g1() {\r\n    co_yield 9;\r\n}\r\n\r\ngenerator<int> g2() {\r\n    co_yield 9;\r\n    co_yield 8;\r\n}\r\n\r\ngenerator<int> g3() {\r\n    throw 42;\r\n    co_return;\r\n}\r\n\r\ngenerator<int> g4() {\r\n    co_yield 1;\r\n    throw 42;\r\n}\r\n\r\nvoid dump(char const* name, vector<int> const& v, optional<int> e) {\r\n    printf(\"%s: (\", name);\r\n    for (auto const& elem : v) {\r\n        printf(\" %d\", elem);\r\n    }\r\n    if (e.has_value()) {\r\n        printf(\") except(%d)\", *e);\r\n    } else {\r\n        printf(\") noexcept\");\r\n    }\r\n}\r\n\r\nbool test_gen(char const* name, generator<int> g, vector<int> const& v, optional<int> e) {\r\n    vector<int> r;\r\n    optional<int> re;\r\n    try {\r\n        try {\r\n            r.insert(r.end(), g.begin(), g.end());\r\n        } catch (int evalue) {\r\n            re = evalue;\r\n        }\r\n    } catch (...) {\r\n        printf(\"%s: unexpected exception ...\\n\", name);\r\n        return false;\r\n    }\r\n    if (re == e && r == v) {\r\n        return true;\r\n    }\r\n\r\n    printf(\"unexpected result: \");\r\n    dump(name, r, re);\r\n    dump(\" , expected\", v, e);\r\n    putchar('\\n');\r\n    return false;\r\n}\r\n\r\n#ifdef _RESUMABLE_FUNCTIONS_SUPPORTED\r\nstruct Immovable {\r\n    int val;\r\n\r\n    explicit Immovable(int v) : val(v) {}\r\n\r\n    Immovable(Immovable const&)            = delete;\r\n    Immovable& operator=(Immovable const&) = delete;\r\n};\r\n\r\nImmovable imm1(1);\r\n\r\nfuture<Immovable&> fimm() {\r\n    co_return imm1;\r\n}\r\n\r\nfuture<void> f0() {\r\n    co_return;\r\n}\r\n\r\nfuture<int> f1() {\r\n    co_await f0();\r\n#if defined(__EDG__) // TRANSITION, VSO-974870\r\n    // error: initial value of reference to non-const must be an lvalue\r\n    // Immovable &r1 = co_await fimm();\r\n    //                 ^\r\n    auto& imm = imm1;\r\n#else // ^^^ workaround / no workaround vvv\r\n    auto& imm = co_await fimm();\r\n#endif // ^^^ no workaround ^^^\r\n    if (&imm != &imm1) {\r\n        puts(\"&imm != &imm1\");\r\n        co_return 1984;\r\n    }\r\n    co_return imm.val;\r\n}\r\n\r\nfuture<int> f2() {\r\n    auto x = f1();\r\n    auto y = co_await f1();\r\n    co_return co_await x + y + co_await f1() - 1;\r\n}\r\n\r\nfuture<int> f3() {\r\n    throw 3;\r\n    co_return 42;\r\n}\r\n\r\nfuture<int> f4() {\r\n    co_await f0();\r\n    throw 4;\r\n    co_return 42;\r\n}\r\n\r\nvoid dump(char const* name, optional<int> v) {\r\n    printf(\"%s: (\", name);\r\n    if (v) {\r\n        printf(\"%d) \", *v);\r\n    } else {\r\n        printf(\") \");\r\n    }\r\n}\r\n\r\nvoid dump(char const* name, optional<int> v, optional<int> e) {\r\n    dump(name, v);\r\n    dump(\"except\", e);\r\n}\r\n\r\nbool test_fut(char const* name, future<int> f, optional<int> v, optional<int> e) {\r\n    optional<int> result;\r\n    optional<int> except;\r\n    try {\r\n        result = f.get();\r\n    } catch (int c) {\r\n        except = c;\r\n    } catch (...) {\r\n        printf(\"%s: unexpected exception\\n\", name);\r\n        return false;\r\n    }\r\n\r\n    if (result == v && except == e) {\r\n        return true;\r\n    }\r\n\r\n    printf(\"unexpected result: \");\r\n    dump(name, result, except);\r\n    dump(\" , expected\", v, e);\r\n    putchar('\\n');\r\n    return false;\r\n}\r\n#endif // _RESUMABLE_FUNCTIONS_SUPPORTED\r\n\r\nbool test_all() {\r\n    bool success = true;\r\n\r\n    success = success && test_gen(\"g0\", g0(), {}, nullopt);\r\n    success = success && test_gen(\"g1\", g1(), {9}, nullopt);\r\n    success = success && test_gen(\"g2\", g2(), {9, 8}, nullopt);\r\n    success = success && test_gen(\"g3\", g3(), {}, 42);\r\n    success = success && test_gen(\"g4\", g4(), {1}, 42);\r\n#ifdef _RESUMABLE_FUNCTIONS_SUPPORTED\r\n    puts(\"testing future adapters\");\r\n    success = success && test_fut(\"f1\", f1(), 1, nullopt);\r\n    success = success && test_fut(\"f2\", f2(), 2, nullopt);\r\n    success = success && test_fut(\"f3\", f3(), nullopt, 3);\r\n    success = success && test_fut(\"f4\", f4(), nullopt, 4);\r\n#endif // _RESUMABLE_FUNCTIONS_SUPPORTED\r\n\r\n    return success;\r\n}\r\n\r\nint main() {\r\n    bool success = test_all();\r\n    puts(success ? \"pass\" : \"fail\");\r\n    return !success;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_1775715_user_defined_modules/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n"
  },
  {
    "path": "tests/std/tests/VSO_1775715_user_defined_modules/custom_format.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\n\r\nfrom stl.test.format import STLTestFormat, TestStep\r\nfrom stl.test.tests import TestType\r\n\r\n\r\nclass CustomTestFormat(STLTestFormat):\r\n    def getBuildSteps(self, test, litConfig, shared):\r\n        _, outputBase = test.getTempPaths()\r\n\r\n        testCpp = test.getSourcePath()\r\n        sourceDir = os.path.dirname(testCpp)\r\n        userIxx = os.path.join(sourceDir, 'user.ixx')\r\n\r\n        # Dependency order is important here:\r\n        inputPaths = [userIxx, testCpp]\r\n\r\n        cmd = [test.cxx, *inputPaths, *test.flags, *test.compileFlags]\r\n\r\n        if TestType.COMPILE in test.testType:\r\n            cmd += ['/c']\r\n        elif TestType.RUN in test.testType:\r\n            shared.execFile = f'{outputBase}.exe'\r\n            cmd += [f'/Fe{shared.execFile}', '/link', *test.linkFlags]\r\n\r\n        yield TestStep(cmd, shared.execDir, shared.env, False)\r\n"
  },
  {
    "path": "tests/std/tests/VSO_1775715_user_defined_modules/custombuild.pl",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nuse strict;\r\nuse warnings;\r\n\r\nuse Run;\r\n\r\nsub CustomBuildHook()\r\n{\r\n    my $cwd = Run::GetCWDName();\r\n\r\n    # Dependency order is important here:\r\n    my @inputPaths = (\"user.ixx\", \"test.cpp\");\r\n\r\n    Run::ExecuteCL(join(\" \", @inputPaths, \"/Fe$cwd.exe\"));\r\n}\r\n1\r\n"
  },
  {
    "path": "tests/std/tests/VSO_1775715_user_defined_modules/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\modules_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_1775715_user_defined_modules/lit.local.cfg",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\nimport site\r\nsite.addsitedir(os.path.dirname(os.path.dirname(__file__)))\r\nimport VSO_1775715_user_defined_modules.custom_format\r\n\r\nconfig.test_format = VSO_1775715_user_defined_modules.custom_format.CustomTestFormat()\r\n"
  },
  {
    "path": "tests/std/tests/VSO_1775715_user_defined_modules/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// Note: To properly test the fix for VSO-1775715, don't include any headers here.\r\n\r\nimport User;\r\n\r\nint main() {\r\n    user::prepare_test_environment();\r\n    user::test_vso_1775715(0, \"0 0 0b0 0B0 0x0 0X0 0\");\r\n    user::test_vso_1775715(77, \"77 77 0b1001101 0B1001101 0x4d 0X4D 0115\");\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_1775715_user_defined_modules/user.ixx",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nmodule;\r\n\r\n#include <cassert>\r\n#include <format>\r\n#include <string>\r\n\r\n#include <force_include.hpp>\r\n\r\nexport module User;\r\n\r\nnamespace user {\r\n    export void prepare_test_environment() {\r\n        assert(test_environment_preparer.succeeded());\r\n    }\r\n\r\n    // TRANSITION, VSO-2649620 reachability problem in modules\r\n    // The compiler does not export the bindings for `operator==` for a string\r\n    // and character pointer unless we force it with this export.\r\n    export using std::operator==;\r\n\r\n    // DevCom-10313766 VSO-1775715 \"Using std::format in a module\r\n    // requires including <format> header in .cpp files using that module\"\r\n    export template <class T>\r\n    void test_vso_1775715(const T& value, const char* const expected_str) {\r\n        const std::string actual_str = std::format(\"{0:#} {0:#d} {0:#b} {0:#B} {0:#x} {0:#X} {0:#o}\", value);\r\n        assert(actual_str == expected_str);\r\n    }\r\n} // namespace user\r\n"
  },
  {
    "path": "tests/std/tests/VSO_1804139_static_analysis_warning_with_single_element_array/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_1804139_static_analysis_warning_with_single_element_array/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// DevCom-10342063 VSO-1804139 False positive C28020 iterating over single element std::array\r\n\r\n#include <array>\r\n#include <cstddef>\r\nusing namespace std;\r\n\r\nbool IsSmallPrime(const int val) {\r\n    static constexpr array<int, 1> small_primes{2};\r\n\r\n    for (size_t i = 0; i < small_primes.size(); ++i) {\r\n        if (val == small_primes[i]) {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\nbool IsPrime(const int val) {\r\n    static constexpr array<int, 10> primes{2, 3, 5, 7, 11, 13, 17, 19, 23, 29};\r\n\r\n    for (size_t i = 0; i < primes.size(); ++i) {\r\n        if (val == primes[i]) {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    return false;\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/VSO_1925201_iter_traits/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_20_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_1925201_iter_traits/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <concepts>\r\n#include <iterator>\r\n\r\n// Defend against regression of DevCom-10532126, in which several function templates used\r\n// `_Iter_diff_t<meow>` as a parameter type instead of the specified\r\n// `typename iterator_traits<meow>::difference_type`. The two are equivalent in C++17, but in C++20\r\n// _Iter_diff_t<meow> becomes iter_difference_t<meow>. We thought the difference was not observable,\r\n// but it interferes with concept overloading.\r\n\r\nusing std::iter_value_t, std::iterator_traits, std::same_as;\r\nusing std::next, std::prev, std::shift_left, std::shift_right;\r\n\r\nstruct meow {};\r\n\r\nconstexpr meow* nil = nullptr;\r\n\r\ntemplate <class I>\r\nconcept Meowerator = same_as<iter_value_t<I>, meow>;\r\n\r\ntemplate <Meowerator I>\r\nvoid next(I, typename iterator_traits<I>::difference_type = 1) {}\r\n\r\ntemplate <Meowerator I>\r\nvoid prev(I, typename iterator_traits<I>::difference_type = 1) {}\r\n\r\ntemplate <Meowerator I>\r\nvoid shift_left(I, I, typename iterator_traits<I>::difference_type) {}\r\ntemplate <Meowerator I>\r\nvoid shift_right(I, I, typename iterator_traits<I>::difference_type) {}\r\n// Note that we intentionally do not test the ExecutionPolicy overloads of shift_meow. They are\r\n// constrained via an unspecified mechanism to \"not participate in overload resolution unless\r\n// is_execution_policy_v<ExecutionPolicy> is true\", effectively making concept overloading\r\n// impossible (or at least non-portable).\r\n\r\nstatic_assert(same_as<void, decltype(next(nil))>);\r\nstatic_assert(same_as<void, decltype(next(nil, 42))>);\r\n\r\nstatic_assert(same_as<void, decltype(prev(nil))>);\r\nstatic_assert(same_as<void, decltype(prev(nil, 42))>);\r\n\r\nstatic_assert(same_as<void, decltype(shift_left(nil, nil, 42))>);\r\nstatic_assert(same_as<void, decltype(shift_right(nil, nil, 42))>);\r\n"
  },
  {
    "path": "tests/std/tests/VSO_2252142_wrong_C5046/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_2252142_wrong_C5046/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <deque>\r\n#include <forward_list>\r\n#include <list>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\n\r\n// Test for DevCom-10745303 / VSO-2252142 \"C5046 is wrongly triggered in unevaluated context\"\r\n\r\n#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)\r\n\r\nusing namespace std;\r\n\r\ntemplate <class T>\r\nstruct convertible_to_any {\r\n    operator T() &&; // not defined, only used in unevaluated context\r\n};\r\n\r\ntemplate <class Cont, class = void>\r\nconstexpr bool has_emplace_back = false;\r\ntemplate <class Cont>\r\nconstexpr bool has_emplace_back<Cont,\r\n    void_t<decltype(declval<Cont&>().emplace_back(declval<convertible_to_any<typename Cont::value_type>>()))>> = true;\r\n\r\ntemplate <class Cont, class = void>\r\nconstexpr bool has_emplace_front = false;\r\ntemplate <class Cont>\r\nconstexpr bool has_emplace_front<Cont,\r\n    void_t<decltype(declval<Cont&>().emplace_front(declval<convertible_to_any<typename Cont::value_type>>()))>> = true;\r\n\r\nnamespace {\r\n    struct S2 {};\r\n} // unnamed namespace\r\n\r\n// Was emitting \"warning C5046: Symbol involving type with internal linkage not defined\"\r\n// as a consequence of our use of return type deduction for the pertinent container functions.\r\nSTATIC_ASSERT(has_emplace_back<vector<S2>>);\r\nSTATIC_ASSERT(has_emplace_back<deque<S2>>);\r\nSTATIC_ASSERT(has_emplace_front<deque<S2>>);\r\nSTATIC_ASSERT(has_emplace_front<forward_list<S2>>);\r\nSTATIC_ASSERT(has_emplace_back<list<S2>>);\r\nSTATIC_ASSERT(has_emplace_front<list<S2>>);\r\nSTATIC_ASSERT(has_emplace_back<vector<bool>>); // Cannot trigger this bug, but for consistency\r\n\r\n// N4988 [queue.defn] and [stack.defn] require the container adaptors to have `decltype(auto) emplace(Args&&... args)`,\r\n// allowing them to adapt both C++14-era and C++17-era containers.\r\n"
  },
  {
    "path": "tests/std/tests/VSO_2318081_bogus_const_overloading/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\usual_matrix.lst\r\n"
  },
  {
    "path": "tests/std/tests/VSO_2318081_bogus_const_overloading/test.compile.pass.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <cstddef>\r\n#include <iterator>\r\n#include <memory>\r\nusing namespace std;\r\n\r\n// VSO-2318081 \"[RWC][prod/fe][Regression] 4 projects failed with error C2440:\r\n// 'initializing': cannot convert from 'const llvm::Value *' to '_Ty'\"\r\n\r\nstruct Thing {};\r\n\r\nstruct BogusInIt {\r\n    using iterator_category = input_iterator_tag;\r\n    using value_type        = Thing*;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = void;\r\n    using reference         = Thing*;\r\n\r\n    BogusInIt& operator++();\r\n    BogusInIt operator++(int);\r\n    friend bool operator==(const BogusInIt&, const BogusInIt&);\r\n    friend bool operator!=(const BogusInIt&, const BogusInIt&);\r\n\r\n    // This single overload would be conforming:\r\n    // Thing* operator*() const;\r\n\r\n    // N4993 [iterator.cpp17.general]/1 and [tab:inputiterator] forbid overloading operator*()\r\n    // with varying return types, but uninitialized_meow() tolerated this before GH-5135.\r\n\r\n    // See LLVM-119084, reported on 2024-12-07. After that has been fixed and propagated throughout the ecosystem,\r\n    // we should consider making the STL strictly reject such bogus iterators and removing this test coverage.\r\n    Thing* operator*();\r\n    const Thing* operator*() const;\r\n};\r\n\r\nvoid test() {\r\n    BogusInIt src{};\r\n    Thing** dest{nullptr};\r\n\r\n    uninitialized_copy(src, src, dest);\r\n    uninitialized_copy_n(src, 0, dest);\r\n#if _HAS_CXX17\r\n    uninitialized_move(src, src, dest);\r\n    uninitialized_move_n(src, 0, dest);\r\n#endif // _HAS_CXX17\r\n}\r\n"
  },
  {
    "path": "tests/std/tests/callconv_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE .\\usual_matrix.lst\r\nPM_CL=\"/Gr /EHsc /MT /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/Gr /EHsc /MTd /std:c++latest /permissive /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/Gv /EHsc /MT /std:c++latest /permissive /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/Gv /EHsc /MTd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/Gz /EHsc /MT /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/Gz /EHsc /MTd /std:c++latest /permissive /w14640 /Zc:threadSafeInit-\"\r\n"
  },
  {
    "path": "tests/std/tests/char8_t_17_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE .\\usual_17_matrix.lst\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive- /Zc:char8_t\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++17 /permissive- /Zc:char8_t -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\n"
  },
  {
    "path": "tests/std/tests/char8_t_impure_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This is char8_t_matrix.lst, but without /clr:pure configurations.\r\n# Without /clr:pure, we can factor out \"/w14640 /Zc:threadSafeInit-\" to simplify.\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w14640 /Zc:threadSafeInit-\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++14 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++17 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++20\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++20 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive- /Zc:noexceptTypes-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- /Zc:noexceptTypes- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:wchar_t-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- /Zc:wchar_t- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /fp:except /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++14 /fp:except /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /permissive- /Zc:char8_t\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++14 /permissive- /Zc:char8_t -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++17 /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive- /Zc:char8_t\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++17 /permissive- /Zc:char8_t -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++20 /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++20 /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /fp:strict\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /fp:strict -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/clr /MD /std:c++20\"\r\nPM_CL=\"/clr /MDd /std:c++20\"\r\nPM_CL=\"/BE /c /EHsc /MD /std:c++14\"\r\nPM_CL=\"/BE /c /EHsc /MDd /std:c++17 /permissive-\"\r\nPM_CL=\"/BE /c /EHsc /MT /std:c++20 /permissive-\"\r\nPM_CL=\"/BE /c /EHsc /MTd /std:c++latest /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MD /std:c++14\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MDd /std:c++17\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++20 /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MTd /std:c++latest /permissive- /fp:strict\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++latest /permissive- /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined\"\r\n"
  },
  {
    "path": "tests/std/tests/char8_t_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE .\\usual_matrix.lst\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /permissive- /w14640 /Zc:threadSafeInit- /Zc:char8_t\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++14 /permissive- /w14640 /Zc:threadSafeInit- /Zc:char8_t -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive- /w14640 /Zc:threadSafeInit- /Zc:char8_t\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++17 /permissive- /w14640 /Zc:threadSafeInit- /Zc:char8_t -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\n"
  },
  {
    "path": "tests/std/tests/clr_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/w14640 /Zc:threadSafeInit-\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/clr /MD /std:c++20\"\r\nPM_CL=\"/clr /MDd /std:c++20\"\r\n"
  },
  {
    "path": "tests/std/tests/eha_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w14640 /Zc:threadSafeInit- /EHa\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14\"\r\nASAN\tPM_CL=\"/MD /std:c++14 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17\"\r\nASAN\tPM_CL=\"/MD /std:c++17 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++20\"\r\nASAN\tPM_CL=\"/MD /std:c++20 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:char8_t-\"\r\nASAN\tPM_CL=\"/MD /std:c++latest /permissive- /Zc:char8_t- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:wchar_t-\"\r\nASAN\tPM_CL=\"/MDd /std:c++latest /permissive- /Zc:wchar_t- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /fp:except\"\r\nASAN\tPM_CL=\"/MDd /std:c++14 /fp:except -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive-\"\r\nASAN\tPM_CL=\"/MDd /std:c++17 /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++20 /permissive-\"\r\nASAN\tPM_CL=\"/MDd /std:c++20 /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/MT /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /fp:strict /Zc:noexceptTypes-\"\r\nASAN\tPM_CL=\"/MTd /std:c++latest /permissive- /fp:strict /Zc:noexceptTypes- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive\"\r\nASAN\tPM_CL=\"/MTd /std:c++latest /permissive -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\n"
  },
  {
    "path": "tests/std/tests/fast_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This is for tests that take a long time to execute, so run only one configuration.\r\n# Keep synchronized with fast_no_asan_matrix.lst.\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MT /O2 /GL /std:c++latest /permissive- /analyze:autolog- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MT /O2 /GL /std:c++latest /permissive- /analyze:autolog- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\n"
  },
  {
    "path": "tests/std/tests/fast_no_asan_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This is identical to fast_matrix, but without the ASAN config.\r\n# TRANSITION, VSO-1886547 (Dev11_1158803_regex_thread_safety leaks memory with ASan)\r\n\r\n# This is for tests that take a long time to execute, so run only one configuration.\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MT /O2 /GL /std:c++latest /permissive- /analyze:autolog- /w14640 /Zc:threadSafeInit-\"\r\n"
  },
  {
    "path": "tests/std/tests/floating_point_model_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/FIfenv_prefix.hpp /w14640 /Zc:threadSafeInit- /EHsc /std:c++latest\"\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"\"\r\n*\tPM_CL=\"/arch:AVX2\"\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/fp:strict  /DFP_CONFIG_PRESET=1 /DTEST_FP_ROUNDING=1\"\r\n*\tPM_CL=\"/fp:precise /DFP_CONFIG_PRESET=2 /DTEST_FP_ROUNDING=1\"\r\n*\tPM_CL=\"/fp:precise /DFP_CONFIG_PRESET=2 /DTEST_FP_ROUNDING=0\"\r\n*\tPM_CL=\"/fp:fast    /DFP_CONFIG_PRESET=3 /DTEST_FP_ROUNDING=0\"\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/DWITH_FP_ABRUPT_UNDERFLOW=0\"\r\n*\tPM_CL=\"/DWITH_FP_ABRUPT_UNDERFLOW=1\" PM_LINK=\"loosefpmath.obj\"\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/DFP_CONTRACT_MODE=0 /clang:-ffp-contract=off\"\r\n*\tPM_CL=\"/DFP_CONTRACT_MODE=1 /clang:-ffp-contract=on\"\r\n*\tPM_CL=\"/DFP_CONTRACT_MODE=2 /clang:-ffp-contract=fast\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/Od /MDd\"\r\nASAN\tPM_CL=\"/Od /MDd -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/O2 /MD /permissive-\"\r\nASAN\tPM_CL=\"/O2 /MD /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/O2 /MT /GL\"\r\nASAN\tPM_CL=\"/O2 /MT /GL -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\n# TRANSITION, -Wno-unused-command-line-argument is needed for the internal test harness\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call -Wno-unused-command-line-argument -Wno-overriding-option /Od /MTd\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call -Wno-unused-command-line-argument -Wno-overriding-option /O2 /MT\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call -Wno-unused-command-line-argument -Wno-overriding-option /O2 /MD /Oi-\"\r\n"
  },
  {
    "path": "tests/std/tests/impure_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This is usual_matrix.lst, but without /clr:pure configurations.\r\n# Without /clr:pure, we can factor out \"/w14640 /Zc:threadSafeInit-\" to simplify.\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w14640 /Zc:threadSafeInit-\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++14 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++17 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++20\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++20 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive- /Zc:noexceptTypes-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- /Zc:noexceptTypes- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:wchar_t-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- /Zc:wchar_t- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /fp:except /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++14 /fp:except /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++17 /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++20 /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++20 /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /fp:strict\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /fp:strict -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/clr /MD /std:c++20\"\r\nPM_CL=\"/clr /MDd /std:c++20\"\r\nPM_CL=\"/BE /c /EHsc /MD /std:c++14\"\r\nPM_CL=\"/BE /c /EHsc /MDd /std:c++17 /permissive-\"\r\nPM_CL=\"/BE /c /EHsc /MT /std:c++20 /permissive-\"\r\nPM_CL=\"/BE /c /EHsc /MTd /std:c++latest /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MD /std:c++14\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MDd /std:c++17\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++20 /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MTd /std:c++latest /permissive- /fp:strict\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++latest /permissive- /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined\"\r\n"
  },
  {
    "path": "tests/std/tests/include_each_header_alone_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/DNO_TEST_ENVIRONMENT_PREPARER /EHsc /MTd /std:c++latest /permissive- /fp:strict /w14640 /Zc:threadSafeInit-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"/DNO_TEST_ENVIRONMENT_PREPARER -fno-ms-compatibility -fno-delayed-template-parsing /EHsc /MTd /std:c++latest /permissive- /fp:strict /w14640 /Zc:threadSafeInit-\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/DMEOW_HEADER=algorithm\"\r\nPM_CL=\"/DMEOW_HEADER=any\"\r\nPM_CL=\"/DMEOW_HEADER=array\"\r\nPM_CL=\"/DMEOW_HEADER=atomic\"\r\nPM_CL=\"/DMEOW_HEADER=barrier\"\r\nPM_CL=\"/DMEOW_HEADER=bit\"\r\nPM_CL=\"/DMEOW_HEADER=bitset\"\r\nPM_CL=\"/DMEOW_HEADER=charconv\"\r\nPM_CL=\"/DMEOW_HEADER=chrono\"\r\nPM_CL=\"/DMEOW_HEADER=codecvt\"\r\nPM_CL=\"/DMEOW_HEADER=compare\"\r\nPM_CL=\"/DMEOW_HEADER=complex\"\r\nPM_CL=\"/DMEOW_HEADER=concepts\"\r\nPM_CL=\"/DMEOW_HEADER=condition_variable\"\r\nPM_CL=\"/DMEOW_HEADER=coroutine\"\r\nPM_CL=\"/DMEOW_HEADER=deque\"\r\nPM_CL=\"/DMEOW_HEADER=exception\"\r\nPM_CL=\"/DMEOW_HEADER=execution\"\r\nPM_CL=\"/DMEOW_HEADER=expected\"\r\nPM_CL=\"/DMEOW_HEADER=filesystem\"\r\nPM_CL=\"/DMEOW_HEADER=flat_map\"\r\nPM_CL=\"/DMEOW_HEADER=flat_set\"\r\nPM_CL=\"/DMEOW_HEADER=format\"\r\nPM_CL=\"/DMEOW_HEADER=forward_list\"\r\nPM_CL=\"/DMEOW_HEADER=fstream\"\r\nPM_CL=\"/DMEOW_HEADER=functional\"\r\nPM_CL=\"/DMEOW_HEADER=future\"\r\nPM_CL=\"/DMEOW_HEADER=generator\"\r\nPM_CL=\"/DMEOW_HEADER=initializer_list\"\r\nPM_CL=\"/DMEOW_HEADER=iomanip\"\r\nPM_CL=\"/DMEOW_HEADER=ios\"\r\nPM_CL=\"/DMEOW_HEADER=iosfwd\"\r\nPM_CL=\"/DMEOW_HEADER=iostream\"\r\nPM_CL=\"/DMEOW_HEADER=iso646.h\"\r\nPM_CL=\"/DMEOW_HEADER=istream\"\r\nPM_CL=\"/DMEOW_HEADER=iterator\"\r\nPM_CL=\"/DMEOW_HEADER=latch\"\r\nPM_CL=\"/DMEOW_HEADER=limits\"\r\nPM_CL=\"/DMEOW_HEADER=list\"\r\nPM_CL=\"/DMEOW_HEADER=locale\"\r\nPM_CL=\"/DMEOW_HEADER=map\"\r\nPM_CL=\"/DMEOW_HEADER=mdspan\"\r\nPM_CL=\"/DMEOW_HEADER=memory\"\r\nPM_CL=\"/DMEOW_HEADER=memory_resource\"\r\nPM_CL=\"/DMEOW_HEADER=mutex\"\r\nPM_CL=\"/DMEOW_HEADER=new\"\r\nPM_CL=\"/DMEOW_HEADER=numbers\"\r\nPM_CL=\"/DMEOW_HEADER=numeric\"\r\nPM_CL=\"/DMEOW_HEADER=optional\"\r\nPM_CL=\"/DMEOW_HEADER=ostream\"\r\nPM_CL=\"/DMEOW_HEADER=print\"\r\nPM_CL=\"/DMEOW_HEADER=queue\"\r\nPM_CL=\"/DMEOW_HEADER=random\"\r\nPM_CL=\"/DMEOW_HEADER=ranges\"\r\nPM_CL=\"/DMEOW_HEADER=ratio\"\r\nPM_CL=\"/DMEOW_HEADER=regex\"\r\nPM_CL=\"/DMEOW_HEADER=scoped_allocator\"\r\nPM_CL=\"/DMEOW_HEADER=semaphore\"\r\nPM_CL=\"/DMEOW_HEADER=set\"\r\nPM_CL=\"/DMEOW_HEADER=shared_mutex\"\r\nPM_CL=\"/DMEOW_HEADER=source_location\"\r\nPM_CL=\"/DMEOW_HEADER=span\"\r\nPM_CL=\"/DMEOW_HEADER=spanstream\"\r\nPM_CL=\"/DMEOW_HEADER=sstream\"\r\nPM_CL=\"/DMEOW_HEADER=stack\"\r\nPM_CL=\"/DMEOW_HEADER=stacktrace\"\r\nPM_CL=\"/DMEOW_HEADER=stdatomic.h\"\r\nPM_CL=\"/DMEOW_HEADER=stdexcept\"\r\nPM_CL=\"/DMEOW_HEADER=stdfloat\"\r\nPM_CL=\"/DMEOW_HEADER=stop_token\"\r\nPM_CL=\"/DMEOW_HEADER=streambuf\"\r\nPM_CL=\"/DMEOW_HEADER=string\"\r\nPM_CL=\"/DMEOW_HEADER=string_view\"\r\nPM_CL=\"/DMEOW_HEADER=strstream\"\r\nPM_CL=\"/DMEOW_HEADER=syncstream\"\r\nPM_CL=\"/DMEOW_HEADER=system_error\"\r\nPM_CL=\"/DMEOW_HEADER=thread\"\r\nPM_CL=\"/DMEOW_HEADER=tuple\"\r\nPM_CL=\"/DMEOW_HEADER=type_traits\"\r\nPM_CL=\"/DMEOW_HEADER=typeindex\"\r\nPM_CL=\"/DMEOW_HEADER=typeinfo\"\r\nPM_CL=\"/DMEOW_HEADER=unordered_map\"\r\nPM_CL=\"/DMEOW_HEADER=unordered_set\"\r\nPM_CL=\"/DMEOW_HEADER=utility\"\r\nPM_CL=\"/DMEOW_HEADER=valarray\"\r\nPM_CL=\"/DMEOW_HEADER=variant\"\r\nPM_CL=\"/DMEOW_HEADER=vector\"\r\nPM_CL=\"/DMEOW_HEADER=version\"\r\nPM_CL=\"/DMEOW_HEADER=cassert\"\r\nPM_CL=\"/DMEOW_HEADER=ccomplex /D_SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING\"\r\nPM_CL=\"/DMEOW_HEADER=cctype\"\r\nPM_CL=\"/DMEOW_HEADER=cerrno\"\r\nPM_CL=\"/DMEOW_HEADER=cfenv\"\r\nPM_CL=\"/DMEOW_HEADER=cfloat\"\r\nPM_CL=\"/DMEOW_HEADER=cinttypes\"\r\nPM_CL=\"/DMEOW_HEADER=ciso646 /D_SILENCE_CXX20_CISO646_REMOVED_WARNING\"\r\nPM_CL=\"/DMEOW_HEADER=climits\"\r\nPM_CL=\"/DMEOW_HEADER=clocale\"\r\nPM_CL=\"/DMEOW_HEADER=cmath\"\r\nPM_CL=\"/DMEOW_HEADER=csetjmp\"\r\nPM_CL=\"/DMEOW_HEADER=csignal\"\r\nPM_CL=\"/DMEOW_HEADER=cstdalign /D_SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING\"\r\nPM_CL=\"/DMEOW_HEADER=cstdarg\"\r\nPM_CL=\"/DMEOW_HEADER=cstdbool /D_SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING\"\r\nPM_CL=\"/DMEOW_HEADER=cstddef\"\r\nPM_CL=\"/DMEOW_HEADER=cstdint\"\r\nPM_CL=\"/DMEOW_HEADER=cstdio\"\r\nPM_CL=\"/DMEOW_HEADER=cstdlib\"\r\nPM_CL=\"/DMEOW_HEADER=cstring\"\r\nPM_CL=\"/DMEOW_HEADER=ctgmath /D_SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING\"\r\nPM_CL=\"/DMEOW_HEADER=ctime\"\r\nPM_CL=\"/DMEOW_HEADER=cuchar\"\r\nPM_CL=\"/DMEOW_HEADER=cwchar\"\r\nPM_CL=\"/DMEOW_HEADER=cwctype\"\r\n"
  },
  {
    "path": "tests/std/tests/locale0_implib_cpp_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++20 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- /Zc:noexceptTypes-\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:char8_t- /w14640 /Zc:threadSafeInit- /Zc:preprocessor\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:wchar_t- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /fp:except /w14640 /Zc:threadSafeInit- /Zc:preprocessor\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++20 /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /analyze:only /analyze:autolog- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /fp:strict /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze:only /analyze:autolog- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/clr /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++20 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/clr /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++20 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/clr /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++20 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/clr /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++20 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/clr /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++20 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/clr /MD /J /std:c++20 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/clr /MDd /J /std:c++20 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/clr:pure /MD /std:c++14\"\r\nPM_CL=\"/clr:pure /MDd /std:c++14\"\r\nPM_CL=\"/BE /c /EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/BE /c /EHsc /MDd /std:c++17 /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/BE /c /EHsc /MT /std:c++20 /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/BE /c /EHsc /MTd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MDd /std:c++17 /w14640 /Zc:threadSafeInit-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++20 /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MTd /std:c++latest /permissive- /fp:strict /w14640 /Zc:threadSafeInit-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++latest /permissive- /fp:strict /w14640 /Zc:threadSafeInit- -fsanitize=undefined -fno-sanitize-recover=undefined\"\r\n"
  },
  {
    "path": "tests/std/tests/modules_20_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\..\\universal_prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w14365 /D_ENFORCE_FACET_SPECIALIZATIONS=1 /Zc:preprocessor\"\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w14640 /Zc:threadSafeInit- /EHsc /DTEST_STANDARD=20 /std:c++20\"\r\n*\tPM_CL=\"/w14640 /Zc:threadSafeInit- /EHsc /DTEST_STANDARD=23 /std:c++latest\"\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/MD\"\r\n*\tPM_CL=\"/MDd\"\r\n*\tPM_CL=\"/MT\"\r\n*\tPM_CL=\"/MTd\"\r\n*\tPM_CL=\"/MDd /analyze:only /analyze:autolog-\"\r\n*\tPM_CL=\"/MDd /GR- /D_HAS_STATIC_RTTI=0\"\r\n*\tPM_CL=\"/MDd /utf-8\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"\"\r\nASAN\tPM_CL=\"-fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\n"
  },
  {
    "path": "tests/std/tests/prefix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\..\\universal_prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/FIforce_include.hpp /w14365 /w14668 /w15267 /D_ENFORCE_FACET_SPECIALIZATIONS=1\"\r\n"
  },
  {
    "path": "tests/std/tests/rtti_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /analyze:autolog- /w14640 /Zc:threadSafeInit-\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/GR\"\r\nPM_CL=\"/GR-\"\r\nPM_CL=\"/GR- /D_HAS_STATIC_RTTI=0\"\r\n"
  },
  {
    "path": "tests/std/tests/strict_20_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This file is identical to usual_20_matrix.lst, except that all configurations include /permissive-.\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w14640 /Zc:threadSafeInit- /permissive-\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++20 /Zc:noexceptTypes-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++20 /Zc:noexceptTypes- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:char8_t- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /Zc:char8_t- /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /Zc:wchar_t-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /Zc:wchar_t- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++20 /fp:except /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++20 /fp:except /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /fp:strict\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /fp:strict -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/clr /MD /std:c++20\"\r\nPM_CL=\"/clr /MDd /std:c++20\"\r\nPM_CL=\"/std:c++20 /BE /c /EHsc /MD\"\r\nPM_CL=\"/std:c++latest /BE /c /EHsc /MTd\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++20 /MD\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++latest /MTd /fp:strict\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++latest /MT /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined\"\r\n"
  },
  {
    "path": "tests/std/tests/strict_latest_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This file is identical to usual_latest_matrix.lst, except that all configurations include /permissive-.\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w14640 /Zc:threadSafeInit- /EHsc /std:c++latest /permissive-\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/MD /D_ITERATOR_DEBUG_LEVEL=0 /Zc:noexceptTypes-\"\r\nASAN\tPM_CL=\"/MD /Zc:noexceptTypes- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MD /D_ITERATOR_DEBUG_LEVEL=1\"\r\nASAN\tPM_CL=\"/MD -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MD /D_ITERATOR_DEBUG_LEVEL=0 /Zc:char8_t- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/MD /Zc:char8_t- /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MDd /D_ITERATOR_DEBUG_LEVEL=0 /Zc:wchar_t-\"\r\nASAN\tPM_CL=\"/MDd /Zc:wchar_t- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MDd /D_ITERATOR_DEBUG_LEVEL=1\"\r\nASAN\tPM_CL=\"/MDd -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MDd /D_ITERATOR_DEBUG_LEVEL=2 /fp:except /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/MDd /fp:except /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MT /D_ITERATOR_DEBUG_LEVEL=0\"\r\nASAN\tPM_CL=\"/MT -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MT /D_ITERATOR_DEBUG_LEVEL=0 /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/MT /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MT /D_ITERATOR_DEBUG_LEVEL=1\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/MTd /D_ITERATOR_DEBUG_LEVEL=0 /fp:strict\"\r\nASAN\tPM_CL=\"/MTd /fp:strict -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MTd /D_ITERATOR_DEBUG_LEVEL=1\"\r\nASAN\tPM_CL=\"/MTd -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MTd /D_ITERATOR_DEBUG_LEVEL=2\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/MTd /D_ITERATOR_DEBUG_LEVEL=2 /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/MTd /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/BE /c /MD\"\r\nPM_CL=\"/BE /c /MTd\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /MD\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /MTd /fp:strict\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /MT /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined\"\r\n"
  },
  {
    "path": "tests/std/tests/usual_17_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w14640 /Zc:threadSafeInit-\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:noexceptTypes-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- /Zc:noexceptTypes- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++17 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++20\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++20 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:wchar_t-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- /Zc:wchar_t- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /fp:except /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- /fp:except /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++17 /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++20 /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++20 /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /fp:strict\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /fp:strict -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/clr /MD /std:c++20\"\r\nPM_CL=\"/clr /MDd /std:c++20\"\r\nPM_CL=\"/BE /c /EHsc /MD /std:c++latest /permissive-\"\r\nPM_CL=\"/BE /c /EHsc /MDd /std:c++17 /permissive-\"\r\nPM_CL=\"/BE /c /EHsc /MT /std:c++20 /permissive-\"\r\nPM_CL=\"/BE /c /EHsc /MTd /std:c++latest /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MD /std:c++latest /permissive- --start-no-unused-arguments\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MDd /std:c++17 --start-no-unused-arguments\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++20 /permissive- --start-no-unused-arguments\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MTd /std:c++latest /permissive- /fp:strict --start-no-unused-arguments\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++latest /permissive- /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined --start-no-unused-arguments\"\r\n"
  },
  {
    "path": "tests/std/tests/usual_20_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w14640 /Zc:threadSafeInit-\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++20 /permissive- /Zc:noexceptTypes-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++20 /permissive- /Zc:noexceptTypes- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:char8_t-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- /Zc:char8_t- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:wchar_t- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- /Zc:wchar_t- /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++20 /permissive- /fp:except /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++20 /permissive- /fp:except /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /fp:strict\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /fp:strict -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/clr /MD /std:c++20\"\r\nPM_CL=\"/clr /MDd /std:c++20\"\r\nPM_CL=\"/BE /c /EHsc /MD /std:c++20 /permissive-\"\r\nPM_CL=\"/BE /c /EHsc /MTd /std:c++latest /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++20 /permissive- /MD --start-no-unused-arguments\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++latest /permissive- /MTd /fp:strict --start-no-unused-arguments\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++latest /permissive- /MT /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined --start-no-unused-arguments\"\r\n"
  },
  {
    "path": "tests/std/tests/usual_latest_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w14640 /Zc:threadSafeInit- /EHsc /std:c++latest\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/MD /D_ITERATOR_DEBUG_LEVEL=0 /permissive- /Zc:noexceptTypes-\"\r\nASAN\tPM_CL=\"/MD /permissive- /Zc:noexceptTypes- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MD /D_ITERATOR_DEBUG_LEVEL=1 /permissive-\"\r\nASAN\tPM_CL=\"/MD /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MD /D_ITERATOR_DEBUG_LEVEL=0 /permissive- /Zc:char8_t-\"\r\nASAN\tPM_CL=\"/MD /permissive- /Zc:char8_t- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MDd /D_ITERATOR_DEBUG_LEVEL=0 /permissive- /Zc:wchar_t- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/MDd /permissive- /Zc:wchar_t- /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MDd /D_ITERATOR_DEBUG_LEVEL=1 /permissive-\"\r\nASAN\tPM_CL=\"/MDd /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MDd /D_ITERATOR_DEBUG_LEVEL=2 /permissive- /fp:except /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/MDd /permissive- /fp:except /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MT /D_ITERATOR_DEBUG_LEVEL=0 /permissive-\"\r\nASAN\tPM_CL=\"/MT /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MT /D_ITERATOR_DEBUG_LEVEL=0 /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/MT /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MT /D_ITERATOR_DEBUG_LEVEL=1 /permissive-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/MTd /D_ITERATOR_DEBUG_LEVEL=0 /permissive- /fp:strict\"\r\nASAN\tPM_CL=\"/MTd /permissive- /fp:strict -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MTd /D_ITERATOR_DEBUG_LEVEL=1 /permissive-\"\r\nASAN\tPM_CL=\"/MTd /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MTd /D_ITERATOR_DEBUG_LEVEL=2 /permissive\"\r\nASAN\tPM_CL=\"/MTd /permissive -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/MTd /D_ITERATOR_DEBUG_LEVEL=2 /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/MTd /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/BE /c /MD /permissive-\"\r\nPM_CL=\"/BE /c /MTd /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /permissive- /MD --start-no-unused-arguments\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /permissive- /MTd /fp:strict --start-no-unused-arguments\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /permissive- /MT /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined --start-no-unused-arguments\"\r\n"
  },
  {
    "path": "tests/std/tests/usual_matrix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#\r\n# When updating this list, update VSO_0157762_feature_test_macros\\env.lst consistently.\r\n#\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17 /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++17 /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++20 /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++20 /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- /Zc:noexceptTypes-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- /Zc:noexceptTypes- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:char8_t- /w14640 /Zc:threadSafeInit- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- /Zc:char8_t- /Zc:preprocessor /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /Zc:wchar_t- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- /Zc:wchar_t- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /fp:except /w14640 /Zc:threadSafeInit- /Zc:preprocessor\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++14 /fp:except /w14640 /Zc:threadSafeInit- /Zc:preprocessor -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++17 /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++20 /permissive- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++20 /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /analyze:only /analyze:autolog- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- /analyze:only /analyze:autolog- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /fp:strict /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /fp:strict /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze:only /analyze:autolog- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/clr /MD /std:c++20 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/clr /MDd /std:c++20 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/clr:pure /MD /std:c++14\"\r\nPM_CL=\"/clr:pure /MDd /std:c++14\"\r\nPM_CL=\"/BE /c /EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/BE /c /EHsc /MDd /std:c++17 /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/BE /c /EHsc /MT /std:c++20 /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/BE /c /EHsc /MTd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit- --start-no-unused-arguments\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MDd /std:c++17 /w14640 /Zc:threadSafeInit- --start-no-unused-arguments\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++20 /permissive- /w14640 /Zc:threadSafeInit- --start-no-unused-arguments\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MTd /std:c++latest /permissive- /fp:strict /w14640 /Zc:threadSafeInit- --start-no-unused-arguments\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /MT /std:c++latest /permissive- /fp:strict /w14640 /Zc:threadSafeInit- -fsanitize=undefined -fno-sanitize-recover=undefined --start-no-unused-arguments\"\r\n"
  },
  {
    "path": "tests/tr1/CMakeLists.txt",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nexecute_process(\r\n  COMMAND \"${Python_EXECUTABLE}\" \"${STL_SOURCE_DIR}/tools/scripts/check_test_lst_paths.py\" \"${CMAKE_CURRENT_SOURCE_DIR}\"\r\n  COMMAND_ERROR_IS_FATAL ANY\r\n)\r\n\r\nset(TR1_EXPECTED_RESULTS \"${CMAKE_CURRENT_SOURCE_DIR}/expected_results.txt\")\r\nset(TR1_TEST_OUTPUT_DIR \"${STL_TEST_OUTPUT_DIR}/tr1\")\r\n\r\nconfigure_file(\r\n  ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in\r\n  ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg)\r\n\r\nset(TR1_LIT_CONFIG_MAP \"map_config(\\\"${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg\\\", \\\"${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg\\\")\\n\")\r\nset_property(GLOBAL APPEND_STRING PROPERTY STL_LIT_CONFIG_MAP ${TR1_LIT_CONFIG_MAP})\r\nset_property(GLOBAL APPEND PROPERTY STL_LIT_TEST_DIRS \"${CMAKE_CURRENT_SOURCE_DIR}/tests\")\r\n"
  },
  {
    "path": "tests/tr1/README.md",
    "content": "# The `tr1` Legacy Test Suite\r\n\r\nThis is a legacy test suite. We regularly run it because it provides a small amount of additional test coverage.\r\nWe maintain this test suite in response to breaking changes as the product code evolves.\r\nHowever, cleaning up this test suite is low priority, and we don't add new tests for new features here.\r\n\r\nNote that the name `tr1` is an historical artifact. This test suite was originally added in the [TR1] era\r\n(between VS 2008 and VS 2010) and was slightly expanded in later years before being frozen into its current state.\r\n\r\n# License\r\n\r\nCopyright (c) Microsoft Corporation.\r\n\r\nSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n[TR1]: https://en.wikipedia.org/wiki/C%2B%2B_Technical_Report_1\r\n"
  },
  {
    "path": "tests/tr1/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++14 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++17 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++20\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++20 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++14 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++17 /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++20 /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++20 /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/clr /MD /std:c++20\"\r\nPM_CL=\"/clr /MDd /std:c++20\"\r\nPM_CL=\"/clr:pure /MD /std:c++14\"\r\nPM_CL=\"/clr:pure /MDd /std:c++14\"\r\nPM_CL=\"/BE /c /EHsc /MD /std:c++14\"\r\nPM_CL=\"/BE /c /EHsc /MDd /std:c++17 /permissive-\"\r\nPM_CL=\"/BE /c /EHsc /MT /std:c++20 /permissive-\"\r\nPM_CL=\"/BE /c /EHsc /MTd /std:c++latest /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call -Wno-deprecated-declarations -Wno-self-assign /EHsc /MD /std:c++14\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call -Wno-deprecated-declarations -Wno-self-assign /EHsc /MDd /std:c++17\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call -Wno-deprecated-declarations -Wno-self-assign /EHsc /MT /std:c++20 /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call -Wno-deprecated-declarations -Wno-self-assign /EHsc /MTd /std:c++latest /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call -Wno-deprecated-declarations -Wno-self-assign /EHsc /MT /std:c++latest /permissive- -fsanitize=undefined -fno-sanitize-recover=undefined\"\r\n"
  },
  {
    "path": "tests/tr1/env_minus_md_idl.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14 /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17 /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++17 /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14 /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++14 /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++17 /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /analyze:only /analyze:autolog- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- /analyze:only /analyze:autolog- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze:only /analyze:autolog- /w14640 /Zc:threadSafeInit-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog- /w14640 /Zc:threadSafeInit- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/clr /MD /std:c++20 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/clr /MDd /std:c++20 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/clr:pure /MD /std:c++14\"\r\nPM_CL=\"/clr:pure /MDd /std:c++14\"\r\nPM_CL=\"/BE /c /EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/BE /c /EHsc /MDd /std:c++17 /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_CL=\"/BE /c /EHsc /MTd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call -Wno-deprecated-declarations -Wno-self-assign /EHsc /MD /std:c++14 /w14640 /Zc:threadSafeInit-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call -Wno-deprecated-declarations -Wno-self-assign /EHsc /MDd /std:c++17 /w14640 /Zc:threadSafeInit-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call -Wno-deprecated-declarations -Wno-self-assign /EHsc /MTd /std:c++latest /permissive- /w14640 /Zc:threadSafeInit-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call -Wno-deprecated-declarations -Wno-self-assign /EHsc /MT /std:c++latest /permissive- /w14640 /Zc:threadSafeInit- -fsanitize=undefined -fno-sanitize-recover=undefined\"\r\n"
  },
  {
    "path": "tests/tr1/env_minus_pure.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE .\\prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/w14640 /Zc:threadSafeInit-\"\r\nRUNALL_CROSSLIST\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++14\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++14 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=0 /std:c++17\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++17 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MD /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MD /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++14\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++14 -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MDd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++17 /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MDd /std:c++17 /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MT /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MT /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=0 /std:c++latest /permissive-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=1 /std:c++latest /permissive-\"\r\n# No corresponding ASAN config, since the above differs from another config only in IDL\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze:only /analyze:autolog-\"\r\nASAN\tPM_CL=\"/EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi\" PM_LINK=\"/debug\"\r\nPM_CL=\"/clr /MD /std:c++20\"\r\nPM_CL=\"/clr /MDd /std:c++20\"\r\nPM_CL=\"/BE /c /EHsc /MD /std:c++14\"\r\nPM_CL=\"/BE /c /EHsc /MDd /std:c++17 /permissive-\"\r\nPM_CL=\"/BE /c /EHsc /MTd /std:c++latest /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call -Wno-deprecated-declarations -Wno-self-assign /EHsc /MD /std:c++14\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call -Wno-deprecated-declarations -Wno-self-assign /EHsc /MDd /std:c++17\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call -Wno-deprecated-declarations -Wno-self-assign /EHsc /MTd /std:c++latest /permissive-\"\r\nPM_COMPILER=\"clang-cl\" PM_CL=\"-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call -Wno-deprecated-declarations -Wno-self-assign /EHsc /MT /std:c++latest /permissive- -fsanitize=undefined -fno-sanitize-recover=undefined\"\r\n"
  },
  {
    "path": "tests/tr1/expected_results.txt",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n"
  },
  {
    "path": "tests/tr1/include/tcvt.h",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test a codecvt facet\r\n#ifndef MYNAME\r\n#error do not include this header directly\r\n#endif // MYNAME\r\n\r\n#include <cstdlib>\r\n#include <fstream>\r\n#include <iostream>\r\n#include <string>\r\n\r\nusing namespace std;\r\n\r\n// define macros if freestanding\r\n#ifndef SUMMARIZE\r\n#define CHECK_INT(x, y)\r\n#define CHECK_MSG(msg, ok)\r\n\r\nint leave_chk(const char* fname) { // display message and quit\r\n    cout << \"#PASSED: \" << fname << endl;\r\n    return 0;\r\n}\r\n#endif // SUMMARIZE\r\n\r\n#ifndef NCHARS\r\n#define NCHARS 0x100\r\n#endif // NCHARS\r\n\r\n#ifndef MYWCHAR\r\n#define MYWCHAR wchar_t\r\n#define Mywchar MYWCHAR\r\n#endif // MYWCHAR\r\n\r\n#ifndef MYWC_MAX\r\n#define MYWCMAX 0xffff\r\n#endif // MYWC_MAX\r\n\r\ntypedef basic_istream<MYWCHAR> Myistream;\r\ntypedef basic_ostream<MYWCHAR> Myostream;\r\ntypedef basic_string<MYWCHAR> Mystring;\r\ntypedef STD wstring_convert<MYNAME, MYWCHAR> Mysconvert;\r\n\r\ntypedef basic_filebuf<char> Mybfilebuf;\r\n\r\nbool test_write(const char* fname, const Mystring& mystring) { // write sequences of wide chars to file\r\n    Mybfilebuf mybbuf;\r\n\r\n    mybbuf.open(fname, ios_base::binary | ios_base::out);\r\n    if (!mybbuf.is_open()) { // open failed, give up\r\n#ifndef TERSE\r\n        cout << \"can't write to \" << fname << endl;\r\n#endif // TERSE\r\n\r\n        CHECK_MSG(\"can't open file for writing\", 0);\r\n        return false;\r\n    }\r\n\r\n    STD wbuffer_convert<MYNAME, MYWCHAR> mybuf(&mybbuf);\r\n    Myostream mystr(&mybuf);\r\n\r\n    for (size_t idx = 0; idx < mystring.size(); ++idx) {\r\n        if (mystr.write(&mystring[idx], 1)) {\r\n            CHECK(1);\r\n        } else { // write failed, quit\r\n#ifndef TERSE\r\n            cout << hex << \"write failed for \" << (unsigned long) mystring[idx] << endl;\r\n#endif // TERSE\r\n\r\n            CHECK_INT((int) idx, -1);\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\r\nbool test_read(const char* fname, const Mystring& mystring) { // read sequences of wide chars from file\r\n    Mybfilebuf mybbuf;\r\n\r\n    mybbuf.open(fname, ios_base::binary | ios_base::in);\r\n    if (!mybbuf.is_open()) { // open failed, give up\r\n#ifndef TERSE\r\n        cout << \"can't read from \" << fname << endl;\r\n#endif // TERSE\r\n\r\n        CHECK_MSG(\"can't open file for reading\", 0);\r\n        return false;\r\n    }\r\n\r\n    STD wbuffer_convert<MYNAME, MYWCHAR> mybuf(&mybbuf);\r\n    Myistream mystr(&mybuf);\r\n\r\n    MYWCHAR ch;\r\n    for (size_t idx = 0; idx < mystring.size(); ++idx) { // read a wide char and test for expected value\r\n        ch = (MYWCHAR) (-1);\r\n        if (mystr.read(&ch, 1) && ch == mystring[idx]) {\r\n            CHECK(1);\r\n        } else { // read failed, quit\r\n#ifndef TERSE\r\n            cout << hex << \"read failed for \" << (unsigned long) mystring[idx] << \", got \" << (unsigned long) ch\r\n                 << endl;\r\n#endif // TERSE\r\n\r\n            CHECK_INT((int) idx, -1);\r\n            return false;\r\n        }\r\n    }\r\n    if (mystr.read(&ch, 1)) { // read too much, complain\r\n        CHECK_MSG(\"end of file not reached\", 0);\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\n\r\nvoid test_main() { // write a file and read it back\r\n    const char* fname = \"testfile.txt\";\r\n    Mystring mystring;\r\n\r\n#if defined(MYMAKE)\r\n    mystring = MYMAKE();\r\n\r\n#else // defined(MYMAKE)\r\n    Mysconvert myconv(\"\"); // don't throw on bad codes\r\n\r\n    for (unsigned long ch = 0; ch <= MYWC_MAX && mystring.size() < NCHARS; ++ch) { // add a wide character if valid\r\n        string buf = myconv.to_bytes((MYWCHAR) ch);\r\n        if (0 < buf.size() && ch != (unsigned long) WEOF) {\r\n            mystring.insert(mystring.end(), (MYWCHAR) ch);\r\n        }\r\n    }\r\n#endif // defined(MYMAKE)\r\n\r\n    if (test_write(fname, mystring)) {\r\n        test_read(fname, mystring);\r\n    }\r\n    remove(fname);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/include/tdefs.h",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#ifndef TDEFS_H\r\n#define TDEFS_H\r\n#include <stdio.h>\r\n#include <stdlib.h>\r\n#include <string.h>\r\n\r\n#ifdef __cplusplus\r\n#include <cstdio> // pick up C++ library defines\r\n#include <exception>\r\n#endif // __cplusplus\r\n\r\n// When compiling /clr:pure we need to include <new> to ensure that we get the\r\n// __clrcall declarations of operator new and delete.\r\n#if defined(__cplusplus) && defined(_M_CEE_PURE)\r\n#include <new>\r\n#endif // defined(__cplusplus) && defined(_M_CEE_PURE)\r\n\r\n// Define the following macros on the command line:\r\n\r\n// AFMT -- defined to print floating-point values in %a instead of %f format\r\n// TERSE -- defined to quiet informative messages (default is OFF)\r\n// VERBOSE -- defined to turn on additional messages (default is OFF)\r\n\r\n// For the following macros, this header will auto adapt if no definition\r\n// occurs on the compile command line:\r\n\r\n// NO_EXCEPTIONS -- defined to disable all uses of exceptions\r\n\r\n// EPS_ULPD -- permissible ULP error for double (default is 4)\r\n// EPS_ULPF -- permissible ULP error for float (default is 4)\r\n// EPS_ULPL -- permissible ULP error for long double (default is 4)\r\n\r\n// MACROS\r\n#if !defined(__cplusplus)\r\n#define CSTD\r\n#define STD\r\n#else // C headers in global, C++ headers in std\r\n#define CSTD ::\r\n#define STD  std::\r\n#endif // namespaces\r\n\r\n#if !_HAS_EXCEPTIONS\r\n#define NO_EXCEPTIONS 1\r\n#else // !_HAS_EXCEPTIONS\r\n#define NO_EXCEPTIONS 0\r\n#endif // !_HAS_EXCEPTIONS\r\n\r\n#define CHECK0(ok, ch, test) check_one(ok, ch, #test, __FILE__, __LINE__, test)\r\n#define CHECK(test)          CHK_RESULT(#test, test)\r\n\r\n#define CHECK_DOUBLE(left, right) \\\r\n    check_double(#left \" == \" #right, __FILE__, __LINE__, (double) (left), (double) (right))\r\n#define CHECK_INT(left, right)    check_int(#left \" == \" #right, __FILE__, __LINE__, (int) (left), (int) (right))\r\n#define CHECK_SIZE_T(left, right) check_size_t(#left \" == \" #right, __FILE__, __LINE__, (left), (right))\r\n#define CHECK_PTR(left, right)    check_ptr(#left \" == \" #right, __FILE__, __LINE__, left, right)\r\n\r\n#define CHECK_MEM(left, right, count)  check_mem(#left \" == \" #right, __FILE__, __LINE__, left, right, (int) (count))\r\n#define CHECK_STR(left, right)         check_str(#left \" == \" #right, __FILE__, __LINE__, left, right)\r\n#define CHECK_WMEM(left, right, count) check_wmem(#left \" == \" #right, __FILE__, __LINE__, left, right, (int) (count))\r\n#define CHECK_WSTR(left, right)        check_wstr(#left \" == \" #right, __FILE__, __LINE__, left, right)\r\n#define CHECK_STRING(left, right)      check_str(#left \" == \" #right, __FILE__, __LINE__, left.c_str(), right.c_str())\r\n#define CHECK_WSTRING(left, right)     check_wstr(#left \" == \" #right, __FILE__, __LINE__, left.c_str(), right.c_str())\r\n\r\n#define CHECK_TYPE_LONG(left, right, file_name, line_number) \\\r\n    check_type(#left \" == \" #right, file_name, line_number, typeid(left), typeid(right))\r\n#define CHECK_TYPE(left, right) CHECK_TYPE_LONG(left, right, __FILE__, __LINE__)\r\n\r\n#define CHECK_MSG(label, test)  CHK_RESULT(label, test)\r\n#define CHK_RESULT(label, test) results(label, __FILE__, __LINE__, test)\r\n#define SUMMARIZE               leave_chk(__FILE__)\r\n\r\n#define EXIT_STATUS (0 < total_fail ? 1 : 0)\r\n\r\n// OBJECTS\r\nint total_pass = 0;\r\nint total_fail = 0;\r\n\r\n#ifdef AFMT\r\nint afmt = 1;\r\n#else // AFMT\r\nint afmt = 0;\r\n#endif // AFMT\r\n\r\n#ifdef TERSE\r\nint terse = 1;\r\n#else // TERSE\r\nint terse = 0;\r\n#endif // TERSE\r\n\r\n#ifdef VERBOSE\r\nint verbose = 1;\r\n#else // VERBOSE\r\nint verbose = 0;\r\n#endif // VERBOSE\r\n\r\n// FUNCTIONS\r\nint check_one(int ok, unsigned int ch, const char* label, const char* file_name, int line_number,\r\n    int test) { // accumulate and maybe display failures\r\n    if (test != 0) { // succeeded, display if verbose\r\n        if (verbose) {\r\n            CSTD printf(\" PASS test %.3d at line %.3d in %s for %#.2x: %s\\n\", total_pass + total_fail + 1, line_number,\r\n                file_name, ch, label);\r\n        }\r\n    } else { // failed, accumulate and maybe display\r\n        ++total_fail;\r\n        ok = 0;\r\n        if (!terse) {\r\n            CSTD printf(\" FAIL test %.3d at line %.3d in %s for %#.2x: %s\\n\", total_pass + total_fail + 1, line_number,\r\n                file_name, ch, label);\r\n        }\r\n    }\r\n    return ok;\r\n}\r\n\r\nvoid results(const char* label, const char* file_name, int line_number, int test) { // display results\r\n    if (test != 0) { // pass, count and maybe display\r\n        ++total_pass;\r\n        if (verbose) {\r\n            CSTD printf(\r\n                \" PASS test %.3d at line %.3d in %s: %s\\n\", total_pass + total_fail, line_number, file_name, label);\r\n        }\r\n    } else { // fail, count and display\r\n        ++total_fail;\r\n        CSTD printf(\" FAIL test %.3d at line %.3d in %s: %s\\n\", total_pass + total_fail, line_number, file_name, label);\r\n    }\r\n}\r\n\r\nvoid check_int(const char* label, const char* file_name, int line_number, int left, int right) {\r\n    int ans = left == right;\r\n\r\n    if (!terse && !ans) {\r\n        CSTD printf(\" GOT %d != %d\\n\", left, right);\r\n    }\r\n    results(label, file_name, line_number, ans);\r\n}\r\n\r\nvoid check_size_t(const char* label, const char* file_name, int line_number, size_t left, size_t right) {\r\n    int ans = left == right;\r\n\r\n    if (!terse && !ans) {\r\n        CSTD printf(\" GOT %zu != %zu\\n\", left, right);\r\n    }\r\n    results(label, file_name, line_number, ans);\r\n}\r\n\r\nvoid check_mem(const char* label, const char* file_name, int line_number, const void* left, const void* right,\r\n    int length) { // check for buffer equality\r\n    int ans        = 0;\r\n    int n          = length;\r\n    const char* s1 = (const char*) left;\r\n    const char* s2 = (const char*) right;\r\n\r\n    for (; 0 <= --n && *s1 == *s2; ++s1, ++s2) {\r\n        ;\r\n    }\r\n\r\n    if (n <= 0) {\r\n        ans = 1;\r\n    }\r\n\r\n    if (!terse && !ans) { // put differing strings\r\n        CSTD printf(\" GOT \\\"\");\r\n        for (n = length, s1 = (const char*) left; 0 <= --n; ++s1) {\r\n            CSTD printf(\"%c\", *s1);\r\n        }\r\n        CSTD printf(\"\\\" != \\\"\");\r\n        for (n = length, s2 = (const char*) right; 0 <= --n; ++s2) {\r\n            CSTD printf(\"%c\", *s2);\r\n        }\r\n        CSTD printf(\"\\\"\\n\");\r\n    }\r\n    results(label, file_name, line_number, ans);\r\n}\r\n\r\nvoid check_ptr(const char* label, const char* file_name, int line_number, const void* left,\r\n    const void* right) { // check for pointer equality\r\n    int ans = left == right;\r\n\r\n    if (!terse && !ans) {\r\n        CSTD printf(\" GOT %p != %p\\n\", left, right);\r\n    }\r\n    results(label, file_name, line_number, ans);\r\n}\r\n\r\nvoid check_str(const char* label, const char* file_name, int line_number, const char* left,\r\n    const char* right) { // check for NTBS equality\r\n    int ans        = 0;\r\n    const char* s1 = left;\r\n    const char* s2 = right;\r\n\r\n    for (; *s1 == *s2; ++s1, ++s2) {\r\n        if (*s1 == '\\0') { // equal through NUL terminator\r\n            ans = 1;\r\n            break;\r\n        }\r\n    }\r\n    if (!terse && !ans) {\r\n        CSTD printf(\" GOT \\\"%s\\\" != \\\"%s\\\"\\n\", left, right);\r\n    }\r\n    results(label, file_name, line_number, ans);\r\n}\r\n\r\nvoid check_wmem(const char* label, const char* file_name, int line_number, const wchar_t* left, const wchar_t* right,\r\n    int length) { // check for wide buffer equality\r\n    int ans           = 0;\r\n    int n             = length;\r\n    const wchar_t* s1 = left;\r\n    const wchar_t* s2 = right;\r\n\r\n    for (; 0 <= --n && *s1 == *s2; ++s1, ++s2) {\r\n        ;\r\n    }\r\n\r\n    if (n <= 0) {\r\n        ans = 1;\r\n    }\r\n\r\n    if (!terse && !ans) { // put differing strings\r\n        CSTD printf(\" GOT L\\\"\");\r\n        for (n = length; 0 <= --n; ++left) {\r\n            CSTD printf(\"%c\", (char) *left);\r\n        }\r\n        CSTD printf(\"\\\" != \\\"\");\r\n        for (n = length; 0 <= --n; ++right) {\r\n            CSTD printf(\"%c\", (char) *right);\r\n        }\r\n        CSTD printf(\"\\\"\\n\");\r\n    }\r\n    results(label, file_name, line_number, ans);\r\n}\r\n\r\nvoid check_wstr(const char* label, const char* file_name, int line_number, const wchar_t* left,\r\n    const wchar_t* right) { // check for NTBS equality\r\n    int ans           = 0;\r\n    const wchar_t* s1 = left;\r\n    const wchar_t* s2 = right;\r\n\r\n    for (; *s1 == *s2; ++s1, ++s2) {\r\n        if (*s1 == L'\\0') { // equal through NUL terminator\r\n            ans = 1;\r\n            break;\r\n        }\r\n    }\r\n    if (!terse && !ans) { // failure, print wide strings\r\n        CSTD printf(\" GOT L\\\"\");\r\n        for (; *left != L'\\0'; ++left) {\r\n            CSTD printf(\"%c\", (char) *left);\r\n        }\r\n        CSTD printf(\"\\\" != L\\\"\");\r\n        for (; *right != L'\\0'; ++right) {\r\n            CSTD printf(\"%c\", (char) *right);\r\n        }\r\n        CSTD printf(\"\\\"\\n\");\r\n    }\r\n    results(label, file_name, line_number, ans);\r\n}\r\n\r\n#ifdef __cplusplus\r\n#include <typeinfo>\r\n\r\nvoid check_type(const char* label, const char* file_name, int line_number, const STD type_info& left,\r\n    const STD type_info& right) { // check for int equality\r\n    int ans = left == right;\r\n\r\n    if (!terse && !ans) {\r\n        CSTD printf(\" GOT %s != %s\\n\", left.name(), right.name());\r\n    }\r\n    results(label, file_name, line_number, ans);\r\n}\r\n#endif // __cplusplus\r\n\r\nvoid check_double(const char* label, const char* file_name, int line_number, double left, double right) {\r\n    int ans = left == right;\r\n\r\n    if (!terse && !ans) { // print hex or decimal floating-point\r\n        if (afmt) {\r\n            CSTD printf(\" GOT %a != %a\\n\", left, right);\r\n        } else {\r\n            CSTD printf(\" GOT %f != %f\\n\", left, right);\r\n        }\r\n    }\r\n    results(label, file_name, line_number, ans);\r\n}\r\n\r\nint leave_chk(const char* file_name) { // print summary on exit\r\n    if (!terse || 0 < total_fail) {\r\n        CSTD printf(\"***** %d erroneous test cases in %s *****\\n\", total_fail, file_name);\r\n    }\r\n\r\n    if (!terse) {\r\n        CSTD printf(\"***** %d successful test cases in %s *****\\n\", total_pass, file_name);\r\n    }\r\n\r\n    if (0 < total_fail) {\r\n        CSTD printf(\"#FAILED: %s\\n\", file_name);\r\n    } else {\r\n        CSTD printf(\"#PASSED: %s\\n\", file_name);\r\n    }\r\n\r\n    return EXIT_STATUS;\r\n}\r\n\r\n#ifdef COMPLEX_TYPE\r\n#if CPP_COMPLEX\r\n#include <complex>\r\n\r\ntypedef STD complex<float> Flt_complex;\r\ntypedef STD complex<double> Dbl_complex;\r\ntypedef STD complex<long double> Ldbl_complex;\r\n\r\n#elif defined(_Fcomplex)\r\ntypedef _CSTD _Fcomplex Flt_complex;\r\ntypedef _CSTD _Dcomplex Dbl_complex;\r\ntypedef _CSTD _Lcomplex Ldbl_complex;\r\n\r\n#else // language version\r\ntypedef float complex Flt_complex;\r\ntypedef double _Complex Dbl_complex;\r\ntypedef long double _Complex Ldbl_complex;\r\n#endif // language version\r\n#endif // COMPLEX_TYPE\r\n\r\n#ifdef FLOAT_TYPE\r\n#include <float.h>\r\n\r\n#ifdef EPS\r\n#define EPS_ULPD EPS // define all ulp from command line\r\n#define EPS_ULPF EPS\r\n#define EPS_ULPL EPS\r\n#endif // EPS\r\n\r\n#ifndef EPS_ULPD\r\n#define EPS_ULPD 4 // default tolerance is 4 ulp\r\n#endif // EPS_ULPD\r\n\r\n#ifndef EPS_ULPF\r\n#define EPS_ULPF 4\r\n#endif // EPS_ULPF\r\n\r\n#ifndef EPS_ULPL\r\n#define EPS_ULPL 4\r\n#endif // EPS_ULPL\r\n\r\n#define IS_DOUBLE  1 // FLOAT_TYPE selects type (if defined)\r\n#define IS_FLOAT   2\r\n#define IS_LDOUBLE 3\r\n\r\n#define epsd ((double) (EPS_ULPD * DBL_EPSILON))\r\n#define epsf ((float) (EPS_ULPF * FLT_EPSILON))\r\n#define epsl ((long double) (EPS_ULPL * LDBL_EPSILON))\r\n\r\n#if FLOAT_TYPE == IS_DOUBLE\r\n#define eps0 ((double) DBL_EPSILON)\r\ntypedef double Float_type;\r\nint ulp = EPS_ULPD;\r\n\r\n#elif FLOAT_TYPE == IS_FLOAT\r\n#define eps0 ((float) FLT_EPSILON)\r\ntypedef float Float_type;\r\nint ulp = EPS_ULPF;\r\n\r\n#elif FLOAT_TYPE == IS_LDOUBLE\r\n#define eps0 ((long double) LDBL_EPSILON)\r\ntypedef long double Float_type;\r\nint ulp = EPS_ULPL;\r\n#endif // value of FLOAT_TYPE\r\n\r\nint approx2(Float_type d1, Float_type d2, Float_type sensitivity) { // test for approximate equality\r\n    if (isunordered(d1, d2)) { // at least one NaN\r\n        if (!terse) { // report NaNs\r\n            if (isnan(d1)) {\r\n                CSTD printf(\"approx(x, y): x is a NaN\\n\");\r\n            }\r\n\r\n            if (isnan(d2)) {\r\n                CSTD printf(\"approx(x, y): y is a NaN\\n\");\r\n            }\r\n        }\r\n        return 0;\r\n    } else { // compare finite values\r\n        Float_type err;\r\n\r\n        if (d2 != (Float_type) 0) {\r\n            err = (d2 - d1) / d2;\r\n        } else {\r\n            err = d1;\r\n        }\r\n\r\n        if (err < (Float_type) 0) {\r\n            err = -err;\r\n        }\r\n\r\n        sensitivity += static_cast<Float_type>(ulp);\r\n        if (err <= sensitivity * eps0) { // close enough, maybe display then succeed\r\n            if (verbose) {\r\n                CSTD printf(\"difference is %.2g ulp (<= %.2g ulp)\"\r\n                            \" for %.5Lg vs. %.5Lg\\n\",\r\n                    (double) (err / eps0), (double) sensitivity, (long double) d1, (long double) d2);\r\n            }\r\n            return 1;\r\n        } else { // too different, maybe display then fail\r\n            if (!terse) {\r\n                CSTD printf(\"difference is %.2g ulp (> %.2g ulp)\"\r\n                            \" for %.5Lg vs. %.5Lg\\n\",\r\n                    (double) (err / eps0), (double) sensitivity, (long double) d1, (long double) d2);\r\n            }\r\n            return 0;\r\n        }\r\n    }\r\n}\r\n\r\nint approx(Float_type d1, Float_type d2) { // test for approximate equality\r\n    return approx2(d1, d2, 0);\r\n}\r\n\r\n#ifdef COMPLEX_TYPE\r\n#if COMPLEX_TYPE == IS_DOUBLE\r\n#if CPP_COMPLEX\r\n#define cmplx(re, im) Dbl_complex(re, im)\r\n\r\n#else // __cplusplus\r\nDbl_complex cmplx(double re, double im) { // construct a double complex value from parts\r\n    Dbl_complex ans;\r\n\r\n    ((double*) &ans)[0] = re;\r\n    ((double*) &ans)[1] = im;\r\n    return ans;\r\n}\r\n#endif // __cplusplus\r\n\r\n#elif COMPLEX_TYPE == IS_FLOAT\r\n#if CPP_COMPLEX\r\n#define cmplx(re, im) Flt_complex(re, im)\r\n\r\n#else // __cplusplus\r\nFlt_complex cmplx(float re, float im) { // construct a float complex value from parts\r\n    Flt_complex ans;\r\n\r\n    ((float*) &ans)[0] = re;\r\n    ((float*) &ans)[1] = im;\r\n    return ans;\r\n}\r\n#endif // __cplusplus\r\n\r\n#elif COMPLEX_TYPE == IS_LDOUBLE\r\n#if CPP_COMPLEX\r\n#define cmplx(re, im) Ldbl_complex(re, im)\r\n\r\n#else // __cplusplus\r\nLdbl_complex cmplx(long double re, long double im) { // construct a long double complex value from parts\r\n    Ldbl_complex ans;\r\n\r\n    ((long double*) &ans)[0] = re;\r\n    ((long double*) &ans)[1] = im;\r\n    return ans;\r\n}\r\n#endif // __cplusplus\r\n#endif // value of COMPLEX_TYPE\r\n#endif // COMPLEX_TYPE\r\n#endif // FLOAT_TYPE\r\n\r\n#ifdef __cplusplus\r\nclass Copyable_int { // wrap an integer, copyable\r\npublic:\r\n    Copyable_int(int v = 0) : val(v) { // construct from value\r\n    }\r\n\r\n    Copyable_int(const Copyable_int& x) : val(x.val) { // construct from copied value\r\n    }\r\n\r\n    Copyable_int& operator=(const Copyable_int& x) { // copy value\r\n        val = x.val;\r\n        return *this;\r\n    }\r\n\r\n    operator int() const { // convert to int\r\n        return val;\r\n    }\r\n\r\n    bool operator==(const Copyable_int& x) const { // compare for equality\r\n        return val == x.val;\r\n    }\r\n\r\n    bool operator!=(const Copyable_int& x) const { // compare for equality\r\n        return val != x.val;\r\n    }\r\n\r\n    bool operator<(const Copyable_int& x) const { // compare for order\r\n        return val < x.val;\r\n    }\r\n\r\n    int val;\r\n\r\n    Copyable_int(Copyable_int&& x) : val(x.val) { // construct from moved value\r\n        x.val = -1;\r\n    }\r\n\r\n    Copyable_int& operator=(Copyable_int&& x) { // move value\r\n        val   = x.val;\r\n        x.val = -1;\r\n        return *this;\r\n    }\r\n};\r\n\r\nclass Movable_int : public Copyable_int { // wrap a move-only integer\r\npublic:\r\n    typedef Copyable_int Mybase;\r\n\r\n    Movable_int(int v = 0) : Mybase(v) { // construct from value\r\n    }\r\n\r\n    Movable_int(int v1, int v2) : Mybase(v2 + (v1 << 4)) { // construct from two values\r\n    }\r\n\r\n    Movable_int(int v1, int v2, int v3) : Mybase(v3 + (v2 << 4) + (v1 << 8)) { // construct from three values\r\n    }\r\n\r\n    Movable_int(int v1, int v2, int v3, int v4)\r\n        : Mybase(v4 + (v3 << 4) + (v2 << 8) + (v1 << 12)) { // construct from four values\r\n    }\r\n\r\n    Movable_int(int v1, int v2, int v3, int v4, int v5)\r\n        : Mybase(v5 + (v4 << 4) + (v3 << 8) + (v2 << 12) + (v1 << 16)) { // construct from five values\r\n    }\r\n\r\n    Movable_int(Movable_int&& right) : Mybase(right.val) { // construct from moved value\r\n        right.val = -1;\r\n    }\r\n\r\n    Movable_int& operator=(Movable_int&& right) { // assign from moved value\r\n        if (this != &right) { // different, move it\r\n            val       = right.val;\r\n            right.val = -1;\r\n        }\r\n        return *this;\r\n    }\r\n\r\n    operator int() const { // convert to int\r\n        return val;\r\n    }\r\n\r\n    bool operator==(const Movable_int& x) const { // compare for equality\r\n        return val == x.val;\r\n    }\r\n\r\n    bool operator!=(const Movable_int& x) const { // compare for equality\r\n        return val != x.val;\r\n    }\r\n\r\n    bool operator<(const Movable_int& x) const { // compare for order\r\n        return val < x.val;\r\n    }\r\n\r\n    Movable_int(const Movable_int&)            = delete;\r\n    Movable_int& operator=(const Movable_int&) = delete;\r\n};\r\n#endif // __cplusplus\r\n\r\n// FUNCTION main\r\n#ifdef TEST_NAMEX\r\n#define TEST_NAME TEST_NAMEX\r\n#endif // TEST_NAMEX\r\n\r\n#ifdef TEST_NAME\r\nvoid test_main(void);\r\n\r\nint main(int argc, char** argv) { // call test, print summary, return\r\n    int nextarg;\r\n    CSTD setvbuf(stdout, nullptr, _IONBF, 0); // disable output buffering\r\n\r\n    for (nextarg = 1; nextarg < argc; ++nextarg) {\r\n        if (strcmp(argv[nextarg], \"-v\") == 0) {\r\n            verbose = 1;\r\n        } else if (strcmp(argv[nextarg], \"-t\") == 0) {\r\n            terse = 1;\r\n        } else {\r\n            printf(\"UNEXPECTED argument: %s\\n\", argv[nextarg]);\r\n        }\r\n    }\r\n\r\n#ifndef __cplusplus\r\n    test_main(); // call C test function\r\n\r\n#else // __cplusplus\r\n#if NO_EXCEPTIONS\r\n    test_main(); // call C++ test function\r\n\r\n#else // NO_EXCEPTIONS\r\n    try { // run tests and catch exceptions\r\n        test_main(); // call C++ test function\r\n    } catch (const STD exception& ex) { // report library exception\r\n        printf(\"****** LIBRARY EXCEPTION THROWN: %s\\n\\n\", ex.what());\r\n        ++total_fail;\r\n    } catch (const char* msg) { // report string exception\r\n        printf(\"****** STRING EXCEPTION THROWN: %s\\n\\n\", msg);\r\n        ++total_fail;\r\n    } catch (...) { // report unknown exception\r\n        printf(\"UNKNOWN EXCEPTION THROWN\\n\");\r\n        ++total_fail;\r\n    }\r\n#endif // NO_EXCEPTIONS\r\n#endif // __cplusplus\r\n\r\n#ifndef TEST_NAMEX\r\n    CSTD puts(\"FINISHED testing \" TEST_NAME);\r\n#endif // TEST_NAMEX\r\n\r\n    return leave_chk(TEST_NAME);\r\n}\r\n#endif // TEST_NAME\r\n#endif // TDEFS_H\r\n"
  },
  {
    "path": "tests/tr1/include/tfuns.h",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// common header for functional?.cpp\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 5215) // '%s' a function parameter with volatile qualified type is deprecated in C++20\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wdeprecated-volatile\"\r\n#endif // __clang__\r\n\r\nstruct funobj;\r\nstatic int f0();\r\nstatic int f1(const volatile funobj);\r\nstatic int f2(const volatile funobj, int);\r\nstatic int f3(const volatile funobj, int, int);\r\nstatic int f4(const volatile funobj, int, int, int);\r\nstatic int f5(const volatile funobj, int, int, int, int);\r\nstatic int f6(const volatile funobj, int, int, int, int, int);\r\nstatic int f7(const volatile funobj, int, int, int, int, int, int);\r\nstatic int f8(const volatile funobj, int, int, int, int, int, int, int);\r\nstatic int f9(const volatile funobj, int, int, int, int, int, int, int, int);\r\nstatic int f10(const volatile funobj, int, int, int, int, int, int, int, int, int);\r\ntypedef int (*tf0)();\r\ntypedef int (*tf1)(const volatile funobj);\r\ntypedef int (*tf2)(const volatile funobj, int);\r\ntypedef int (*tf3)(const volatile funobj, int, int);\r\ntypedef int (*tf4)(const volatile funobj, int, int, int);\r\ntypedef int (*tf5)(const volatile funobj, int, int, int, int);\r\ntypedef int (*tf6)(const volatile funobj, int, int, int, int, int);\r\ntypedef int (*tf7)(const volatile funobj, int, int, int, int, int, int);\r\ntypedef int (*tf8)(const volatile funobj, int, int, int, int, int, int, int);\r\ntypedef int (*tf9)(const volatile funobj, int, int, int, int, int, int, int, int);\r\ntypedef int (*tf10)(const volatile funobj, int, int, int, int, int, int, int, int, int);\r\n\r\nstruct funobj { // general purpose function object\r\n    typedef int result_type;\r\n\r\n    funobj(int i = 0) : i0(i) {}\r\n\r\n    funobj(const volatile funobj& f) : i0(f.i0) {}\r\n\r\n    funobj(const funobj& f) : i0(f.i0) {}\r\n\r\n    funobj(funobj&& f) : i0(f.i0) {}\r\n\r\n    int get() const volatile { // return stored data value\r\n        return i0;\r\n    }\r\n    int operator()() const { // function call operator\r\n        return ::f0();\r\n    }\r\n    int operator()(funobj fn) const { // function call operator\r\n        return ::f1(fn);\r\n    }\r\n    int operator()(funobj fn, int i1) const { // function call operator\r\n        return ::f2(fn, i1);\r\n    }\r\n    int operator()(funobj fn, int i1, int i2) const { // function call operator\r\n        return ::f3(fn, i1, i2);\r\n    }\r\n    int operator()(funobj fn, int i1, int i2, int i3) const { // function call operator\r\n        return ::f4(fn, i1, i2, i3);\r\n    }\r\n    int operator()(funobj fn, int i1, int i2, int i3, int i4) const { // function call operator\r\n        return ::f5(fn, i1, i2, i3, i4);\r\n    }\r\n    int operator()(funobj fn, int i1, int i2, int i3, int i4, int i5) const { // function call operator\r\n        return ::f6(fn, i1, i2, i3, i4, i5);\r\n    }\r\n    int operator()(funobj fn, int i1, int i2, int i3, int i4, int i5,\r\n        int i6) const { // function call operator\r\n        return ::f7(fn, i1, i2, i3, i4, i5, i6);\r\n    }\r\n    int operator()(funobj fn, int i1, int i2, int i3, int i4, int i5, int i6, int i7) const { // function call operator\r\n        return ::f8(fn, i1, i2, i3, i4, i5, i6, i7);\r\n    }\r\n    int operator()(\r\n        funobj fn, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8) const { // function call operator\r\n        return ::f9(fn, i1, i2, i3, i4, i5, i6, i7, i8);\r\n    }\r\n    int operator()(funobj fn, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8,\r\n        int i9) const { // function call operator\r\n        return ::f10(fn, i1, i2, i3, i4, i5, i6, i7, i8, i9);\r\n    }\r\n\r\n    int f1() { // member function with zero arguments\r\n        return ::f1(*this);\r\n    }\r\n    int f2(int i1) { // member function with one argument\r\n        return ::f2(*this, i1);\r\n    }\r\n    int f3(int i1, int i2) { // member function with two arguments\r\n        return ::f3(*this, i1, i2);\r\n    }\r\n    int f4(int i1, int i2, int i3) { // member function with three arguments\r\n        return ::f4(*this, i1, i2, i3);\r\n    }\r\n    int f5(int i1, int i2, int i3, int i4) { // member function with four arguments\r\n        return ::f5(*this, i1, i2, i3, i4);\r\n    }\r\n    int f6(int i1, int i2, int i3, int i4, int i5) { // member function with five arguments\r\n        return ::f6(*this, i1, i2, i3, i4, i5);\r\n    }\r\n    int f7(int i1, int i2, int i3, int i4, int i5,\r\n        int i6) { // member function with six arguments\r\n        return ::f7(*this, i1, i2, i3, i4, i5, i6);\r\n    }\r\n    int f8(int i1, int i2, int i3, int i4, int i5, int i6, int i7) { // member function with seven arguments\r\n        return ::f8(*this, i1, i2, i3, i4, i5, i6, i7);\r\n    }\r\n    int f9(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8) { // member function with eight arguments\r\n        return ::f9(*this, i1, i2, i3, i4, i5, i6, i7, i8);\r\n    }\r\n    int f10(\r\n        int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9) { // member function with nine arguments\r\n        return ::f10(*this, i1, i2, i3, i4, i5, i6, i7, i8, i9);\r\n    }\r\n\r\n    int cf1() const { // const member function with no arguments\r\n        return ::f1(*this);\r\n    }\r\n    int cf2(int i1) const { // const member function with one argument\r\n        return ::f2(*this, i1);\r\n    }\r\n    int cf3(int i1, int i2) const { // const member function with two arguments\r\n        return ::f3(*this, i1, i2);\r\n    }\r\n    int cf4(int i1, int i2, int i3) const { // const member function with three arguments\r\n        return ::f4(*this, i1, i2, i3);\r\n    }\r\n    int cf5(int i1, int i2, int i3, int i4) const { // const member function with four arguments\r\n        return ::f5(*this, i1, i2, i3, i4);\r\n    }\r\n    int cf6(int i1, int i2, int i3, int i4, int i5) const { // const member function with five arguments\r\n        return ::f6(*this, i1, i2, i3, i4, i5);\r\n    }\r\n    int cf7(int i1, int i2, int i3, int i4, int i5, int i6) const { // const member function with six arguments\r\n        return ::f7(*this, i1, i2, i3, i4, i5, i6);\r\n    }\r\n    int cf8(int i1, int i2, int i3, int i4, int i5, int i6, int i7) const {\r\n        // const member function with seven arguments\r\n        return ::f8(*this, i1, i2, i3, i4, i5, i6, i7);\r\n    }\r\n    int cf9(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8) const {\r\n        // const member function with eight arguments\r\n        return ::f9(*this, i1, i2, i3, i4, i5, i6, i7, i8);\r\n    }\r\n    int cf10(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9) const {\r\n        // const member function with nine arguments\r\n        return ::f10(*this, i1, i2, i3, i4, i5, i6, i7, i8, i9);\r\n    }\r\n\r\n    int vf1() volatile { // volatile member function with no arguments\r\n        return ::f1(*this);\r\n    }\r\n    int vf2(int i1) volatile { // volatile member function with one argument\r\n        return ::f2(*this, i1);\r\n    }\r\n    int vf3(int i1, int i2) volatile { // volatile member function with two arguments\r\n        return ::f3(*this, i1, i2);\r\n    }\r\n    int vf4(int i1, int i2, int i3) volatile { // volatile member function with three arguments\r\n        return ::f4(*this, i1, i2, i3);\r\n    }\r\n    int vf5(int i1, int i2, int i3, int i4) volatile { // volatile member function with four arguments\r\n        return ::f5(*this, i1, i2, i3, i4);\r\n    }\r\n    int vf6(int i1, int i2, int i3, int i4, int i5) volatile { // volatile member function with five arguments\r\n        return ::f6(*this, i1, i2, i3, i4, i5);\r\n    }\r\n    int vf7(int i1, int i2, int i3, int i4, int i5, int i6) volatile { // volatile member function with six arguments\r\n        return ::f7(*this, i1, i2, i3, i4, i5, i6);\r\n    }\r\n    int vf8(int i1, int i2, int i3, int i4, int i5, int i6, int i7) volatile {\r\n        // volatile member function with seven arguments\r\n        return ::f8(*this, i1, i2, i3, i4, i5, i6, i7);\r\n    }\r\n    int vf9(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8) volatile {\r\n        // volatile member function with eight arguments\r\n        return ::f9(*this, i1, i2, i3, i4, i5, i6, i7, i8);\r\n    }\r\n    int vf10(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9) volatile {\r\n        // volatile member function with nine arguments\r\n        return ::f10(*this, i1, i2, i3, i4, i5, i6, i7, i8, i9);\r\n    }\r\n\r\n    int cvf1() const volatile { // const volatile member function with no arguments\r\n        return ::f1(*this);\r\n    }\r\n    int cvf2(int i1) const volatile { // const volatile member function with one argument\r\n        return ::f2(*this, i1);\r\n    }\r\n    int cvf3(int i1, int i2) const volatile { // const volatile member function with two arguments\r\n        return ::f3(*this, i1, i2);\r\n    }\r\n    int cvf4(int i1, int i2, int i3) const volatile { // const volatile member function with three arguments\r\n        return ::f4(*this, i1, i2, i3);\r\n    }\r\n    int cvf5(int i1, int i2, int i3, int i4) const volatile { // const volatile member function with four arguments\r\n        return ::f5(*this, i1, i2, i3, i4);\r\n    }\r\n    int cvf6(int i1, int i2, int i3, int i4, int i5) const volatile {\r\n        // const volatile member function with five arguments\r\n        return ::f6(*this, i1, i2, i3, i4, i5);\r\n    }\r\n    int cvf7(int i1, int i2, int i3, int i4, int i5, int i6) const volatile {\r\n        // const volatile member function with six arguments\r\n        return ::f7(*this, i1, i2, i3, i4, i5, i6);\r\n    }\r\n    int cvf8(int i1, int i2, int i3, int i4, int i5, int i6, int i7) const volatile {\r\n        // const volatile member function with seven arguments\r\n        return ::f8(*this, i1, i2, i3, i4, i5, i6, i7);\r\n    }\r\n    int cvf9(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8) const volatile {\r\n        // const volatile member function with eight arguments\r\n        return ::f9(*this, i1, i2, i3, i4, i5, i6, i7, i8);\r\n    }\r\n    int cvf10(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9) const volatile {\r\n        // const volatile member function with nine arguments\r\n        return ::f10(*this, i1, i2, i3, i4, i5, i6, i7, i8, i9);\r\n    }\r\n    int i0;\r\n};\r\n\r\ntypedef int (funobj::*mf1)();\r\ntypedef int (funobj::*mf2)(int);\r\ntypedef int (funobj::*mf3)(int, int);\r\ntypedef int (funobj::*mf4)(int, int, int);\r\ntypedef int (funobj::*mf5)(int, int, int, int);\r\ntypedef int (funobj::*mf6)(int, int, int, int, int);\r\ntypedef int (funobj::*mf7)(int, int, int, int, int, int);\r\ntypedef int (funobj::*mf8)(int, int, int, int, int, int, int);\r\ntypedef int (funobj::*mf9)(int, int, int, int, int, int, int, int);\r\ntypedef int (funobj::*mf10)(int, int, int, int, int, int, int, int, int);\r\n\r\ntypedef int (funobj::*cmf1)() const;\r\ntypedef int (funobj::*cmf2)(int) const;\r\ntypedef int (funobj::*cmf3)(int, int) const;\r\ntypedef int (funobj::*cmf4)(int, int, int) const;\r\ntypedef int (funobj::*cmf5)(int, int, int, int) const;\r\ntypedef int (funobj::*cmf6)(int, int, int, int, int) const;\r\ntypedef int (funobj::*cmf7)(int, int, int, int, int, int) const;\r\ntypedef int (funobj::*cmf8)(int, int, int, int, int, int, int) const;\r\ntypedef int (funobj::*cmf9)(int, int, int, int, int, int, int, int) const;\r\ntypedef int (funobj::*cmf10)(int, int, int, int, int, int, int, int, int) const;\r\n\r\ntypedef int (funobj::*vmf1)() volatile;\r\ntypedef int (funobj::*vmf2)(int) volatile;\r\ntypedef int (funobj::*vmf3)(int, int) volatile;\r\ntypedef int (funobj::*vmf4)(int, int, int) volatile;\r\ntypedef int (funobj::*vmf5)(int, int, int, int) volatile;\r\ntypedef int (funobj::*vmf6)(int, int, int, int, int) volatile;\r\ntypedef int (funobj::*vmf7)(int, int, int, int, int, int) volatile;\r\ntypedef int (funobj::*vmf8)(int, int, int, int, int, int, int) volatile;\r\ntypedef int (funobj::*vmf9)(int, int, int, int, int, int, int, int) volatile;\r\ntypedef int (funobj::*vmf10)(int, int, int, int, int, int, int, int, int) volatile;\r\n\r\ntypedef int (funobj::*cvmf1)() const volatile;\r\ntypedef int (funobj::*cvmf2)(int) const volatile;\r\ntypedef int (funobj::*cvmf3)(int, int) const volatile;\r\ntypedef int (funobj::*cvmf4)(int, int, int) const volatile;\r\ntypedef int (funobj::*cvmf5)(int, int, int, int) const volatile;\r\ntypedef int (funobj::*cvmf6)(int, int, int, int, int) const volatile;\r\ntypedef int (funobj::*cvmf7)(int, int, int, int, int, int) const volatile;\r\ntypedef int (funobj::*cvmf8)(int, int, int, int, int, int, int) const volatile;\r\ntypedef int (funobj::*cvmf9)(int, int, int, int, int, int, int, int) const volatile;\r\ntypedef int (funobj::*cvmf10)(int, int, int, int, int, int, int, int, int) const volatile;\r\n\r\ntypedef int funobj::* md0;\r\ntypedef int* funobj::* md1;\r\n\r\nstruct sp { // simplistic smart pointer\r\n    sp(funobj& f) : ptr(&f) {}\r\n    funobj& operator*() { // return reference to funobj\r\n        return *ptr;\r\n    }\r\n\r\n    const funobj& operator*() const { // return reference to const funobj\r\n        return *ptr;\r\n    }\r\n\r\nprivate:\r\n    funobj* ptr;\r\n};\r\n\r\nstatic int f0() { // static function with no arguments\r\n    return 1;\r\n}\r\nstatic int f1(const volatile funobj fn) { // static function with one argument\r\n    return fn.get();\r\n}\r\nstatic int f2(const volatile funobj fn, int i1) { // static function with two arguments\r\n    return fn.get() + i1;\r\n}\r\nstatic int f3(const volatile funobj fn, int i1, int i2) { // static function with three arguments\r\n    return fn.get() + i1 + i2;\r\n}\r\nstatic int f4(const volatile funobj fn, int i1, int i2, int i3) { // static function with four arguments\r\n    return fn.get() + i1 + i2 + i3;\r\n}\r\nstatic int f5(const volatile funobj fn, int i1, int i2, int i3, int i4) { // static function with five arguments\r\n    return fn.get() + i1 + i2 + i3 + i4;\r\n}\r\nstatic int f6(const volatile funobj fn, int i1, int i2, int i3, int i4,\r\n    int i5) { // static function with six arguments\r\n    return fn.get() + i1 + i2 + i3 + i4 + i5;\r\n}\r\nstatic int f7(\r\n    const volatile funobj fn, int i1, int i2, int i3, int i4, int i5, int i6) { // static function with seven arguments\r\n    return fn.get() + i1 + i2 + i3 + i4 + i5 + i6;\r\n}\r\nstatic int f8(const volatile funobj fn, int i1, int i2, int i3, int i4, int i5, int i6,\r\n    int i7) { // static function with eight arguments\r\n    return fn.get() + i1 + i2 + i3 + i4 + i5 + i6 + i7;\r\n}\r\nstatic int f9(const volatile funobj fn, int i1, int i2, int i3, int i4, int i5, int i6, int i7,\r\n    int i8) { // static function with nine arguments\r\n    return fn.get() + i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8;\r\n}\r\nstatic int f10(const volatile funobj fn, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8,\r\n    int i9) { // static function with ten arguments\r\n    return fn.get() + i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9;\r\n}\r\n\r\nint arg[] = { // arguments\r\n    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};\r\nint res[] = { // results\r\n    0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190};\r\n\r\n#define RESULT(n, o) (res[n + o] - res[o])\r\n\r\n#define CALL0(fobj)           \\\r\n    {                         \\\r\n        CHECK_INT(fobj(), 1); \\\r\n    }\r\n#define CALL1x(fobj, funobj)                   \\\r\n    {                                          \\\r\n        for (int i = 0; i < 10; ++i) {         \\\r\n            funobj f0(arg[i]);                 \\\r\n            CHECK_INT(fobj(f0), RESULT(1, i)); \\\r\n        }                                      \\\r\n    }\r\n#define CALL1(fobj)                          \\\r\n    {                                        \\\r\n        CALL1x(fobj, funobj);                \\\r\n        CALL1x(fobj, const funobj);          \\\r\n        CALL1x(fobj, volatile funobj);       \\\r\n        CALL1x(fobj, const volatile funobj); \\\r\n    }\r\n#define CALL2x(fobj, funobj)                               \\\r\n    {                                                      \\\r\n        for (int i = 0; i < 10; ++i) {                     \\\r\n            funobj f0(arg[i]);                             \\\r\n            CHECK_INT(fobj(f0, arg[i + 1]), RESULT(2, i)); \\\r\n        }                                                  \\\r\n    }\r\n#define CALL2(fobj)                          \\\r\n    {                                        \\\r\n        CALL2x(fobj, funobj);                \\\r\n        CALL2x(fobj, const funobj);          \\\r\n        CALL2x(fobj, volatile funobj);       \\\r\n        CALL2x(fobj, const volatile funobj); \\\r\n    }\r\n#define CALL3x(fobj, funobj)                                           \\\r\n    {                                                                  \\\r\n        for (int i = 0; i < 10; ++i) {                                 \\\r\n            funobj f0(arg[i]);                                         \\\r\n            CHECK_INT(fobj(f0, arg[i + 1], arg[i + 2]), RESULT(3, i)); \\\r\n        }                                                              \\\r\n    }\r\n#define CALL3(fobj)                          \\\r\n    {                                        \\\r\n        CALL3x(fobj, funobj);                \\\r\n        CALL3x(fobj, const funobj);          \\\r\n        CALL3x(fobj, volatile funobj);       \\\r\n        CALL3x(fobj, const volatile funobj); \\\r\n    }\r\n#define CALL4x(fobj, funobj)                                                       \\\r\n    {                                                                              \\\r\n        for (int i = 0; i < 10; ++i) {                                             \\\r\n            funobj f0(arg[i]);                                                     \\\r\n            CHECK_INT(fobj(f0, arg[i + 1], arg[i + 2], arg[i + 3]), RESULT(4, i)); \\\r\n        }                                                                          \\\r\n    }\r\n#define CALL4(fobj)                          \\\r\n    {                                        \\\r\n        CALL4x(fobj, funobj);                \\\r\n        CALL4x(fobj, const funobj);          \\\r\n        CALL4x(fobj, volatile funobj);       \\\r\n        CALL4x(fobj, const volatile funobj); \\\r\n    }\r\n#define CALL5x(fobj, funobj)                                                                   \\\r\n    {                                                                                          \\\r\n        for (int i = 0; i < 10; ++i) {                                                         \\\r\n            funobj f0(arg[i]);                                                                 \\\r\n            CHECK_INT(fobj(f0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4]), RESULT(5, i)); \\\r\n        }                                                                                      \\\r\n    }\r\n#define CALL5(fobj)                          \\\r\n    {                                        \\\r\n        CALL5x(fobj, funobj);                \\\r\n        CALL5x(fobj, const funobj);          \\\r\n        CALL5x(fobj, volatile funobj);       \\\r\n        CALL5x(fobj, const volatile funobj); \\\r\n    }\r\n#define CALL6x(fobj, funobj)                                                                               \\\r\n    {                                                                                                      \\\r\n        for (int i = 0; i < 10; ++i) {                                                                     \\\r\n            funobj f0(arg[i]);                                                                             \\\r\n            CHECK_INT(fobj(f0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5]), RESULT(6, i)); \\\r\n        }                                                                                                  \\\r\n    }\r\n#define CALL6(fobj)                          \\\r\n    {                                        \\\r\n        CALL6x(fobj, funobj);                \\\r\n        CALL6x(fobj, const funobj);          \\\r\n        CALL6x(fobj, volatile funobj);       \\\r\n        CALL6x(fobj, const volatile funobj); \\\r\n    }\r\n#define CALL7x(fobj, funobj)                                                                                           \\\r\n    {                                                                                                                  \\\r\n        for (int i = 0; i < 10; ++i) {                                                                                 \\\r\n            funobj f0(arg[i]);                                                                                         \\\r\n            CHECK_INT(fobj(f0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5], arg[i + 6]), RESULT(7, i)); \\\r\n        }                                                                                                              \\\r\n    }\r\n#define CALL7(fobj)                          \\\r\n    {                                        \\\r\n        CALL7x(fobj, funobj);                \\\r\n        CALL7x(fobj, const funobj);          \\\r\n        CALL7x(fobj, volatile funobj);       \\\r\n        CALL7x(fobj, const volatile funobj); \\\r\n    }\r\n#define CALL8x(fobj, funobj)                                                                                        \\\r\n    {                                                                                                               \\\r\n        for (int i = 0; i < 10; ++i) {                                                                              \\\r\n            funobj f0(arg[i]);                                                                                      \\\r\n            CHECK_INT(fobj(f0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5], arg[i + 6], arg[i + 7]), \\\r\n                RESULT(8, i));                                                                                      \\\r\n        }                                                                                                           \\\r\n    }\r\n#define CALL8(fobj)                          \\\r\n    {                                        \\\r\n        CALL8x(fobj, funobj);                \\\r\n        CALL8x(fobj, const funobj);          \\\r\n        CALL8x(fobj, volatile funobj);       \\\r\n        CALL8x(fobj, const volatile funobj); \\\r\n    }\r\n#define CALL9x(fobj, funobj)                                                                                       \\\r\n    {                                                                                                              \\\r\n        for (int i = 0; i < 10; ++i) {                                                                             \\\r\n            funobj f0(arg[i]);                                                                                     \\\r\n            CHECK_INT(fobj(f0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5], arg[i + 6], arg[i + 7], \\\r\n                          arg[i + 8]),                                                                             \\\r\n                RESULT(9, i));                                                                                     \\\r\n        }                                                                                                          \\\r\n    }\r\n#define CALL9(fobj)                          \\\r\n    {                                        \\\r\n        CALL9x(fobj, funobj);                \\\r\n        CALL9x(fobj, const funobj);          \\\r\n        CALL9x(fobj, volatile funobj);       \\\r\n        CALL9x(fobj, const volatile funobj); \\\r\n    }\r\n#define CALL10x(fobj, funobj)                                                                                      \\\r\n    {                                                                                                              \\\r\n        for (int i = 0; i < 10; ++i) {                                                                             \\\r\n            funobj f0(arg[i]);                                                                                     \\\r\n            CHECK_INT(fobj(f0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5], arg[i + 6], arg[i + 7], \\\r\n                          arg[i + 8], arg[i + 9]),                                                                 \\\r\n                RESULT(10, i));                                                                                    \\\r\n        }                                                                                                          \\\r\n    }\r\n#define CALL10(fobj)                          \\\r\n    {                                         \\\r\n        CALL10x(fobj, funobj);                \\\r\n        CALL10x(fobj, const funobj);          \\\r\n        CALL10x(fobj, volatile funobj);       \\\r\n        CALL10x(fobj, const volatile funobj); \\\r\n    }\r\n\r\n#define CALL1m(fobj)                            \\\r\n    {                                           \\\r\n        for (int i = 0; i < 10; ++i) {          \\\r\n            funobj f0(arg[i]);                  \\\r\n            funobj* fp = &f0;                   \\\r\n            sp sp0(f0);                         \\\r\n            CHECK_INT(fobj(f0), RESULT(1, i));  \\\r\n            CHECK_INT(fobj(fp), RESULT(1, i));  \\\r\n            CHECK_INT(fobj(sp0), RESULT(1, i)); \\\r\n        }                                       \\\r\n    }\r\n#define CALL2m(fobj)                                        \\\r\n    {                                                       \\\r\n        for (int i = 0; i < 10; ++i) {                      \\\r\n            funobj f0(arg[i]);                              \\\r\n            funobj* fp = &f0;                               \\\r\n            sp sp0(f0);                                     \\\r\n            CHECK_INT(fobj(f0, arg[i + 1]), RESULT(2, i));  \\\r\n            CHECK_INT(fobj(fp, arg[i + 1]), RESULT(2, i));  \\\r\n            CHECK_INT(fobj(sp0, arg[i + 1]), RESULT(2, i)); \\\r\n        }                                                   \\\r\n    }\r\n#define CALL3m(fobj)                                                    \\\r\n    {                                                                   \\\r\n        for (int i = 0; i < 10; ++i) {                                  \\\r\n            funobj f0(arg[i]);                                          \\\r\n            funobj* fp = &f0;                                           \\\r\n            sp sp0(f0);                                                 \\\r\n            CHECK_INT(fobj(f0, arg[i + 1], arg[i + 2]), RESULT(3, i));  \\\r\n            CHECK_INT(fobj(fp, arg[i + 1], arg[i + 2]), RESULT(3, i));  \\\r\n            CHECK_INT(fobj(sp0, arg[i + 1], arg[i + 2]), RESULT(3, i)); \\\r\n        }                                                               \\\r\n    }\r\n#define CALL4m(fobj)                                                                \\\r\n    {                                                                               \\\r\n        for (int i = 0; i < 10; ++i) {                                              \\\r\n            funobj f0(arg[i]);                                                      \\\r\n            funobj* fp = &f0;                                                       \\\r\n            sp sp0(f0);                                                             \\\r\n            CHECK_INT(fobj(f0, arg[i + 1], arg[i + 2], arg[i + 3]), RESULT(4, i));  \\\r\n            CHECK_INT(fobj(fp, arg[i + 1], arg[i + 2], arg[i + 3]), RESULT(4, i));  \\\r\n            CHECK_INT(fobj(sp0, arg[i + 1], arg[i + 2], arg[i + 3]), RESULT(4, i)); \\\r\n        }                                                                           \\\r\n    }\r\n#define CALL5m(fobj)                                                                            \\\r\n    {                                                                                           \\\r\n        for (int i = 0; i < 10; ++i) {                                                          \\\r\n            funobj f0(arg[i]);                                                                  \\\r\n            funobj* fp = &f0;                                                                   \\\r\n            sp sp0(f0);                                                                         \\\r\n            CHECK_INT(fobj(f0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4]), RESULT(5, i));  \\\r\n            CHECK_INT(fobj(fp, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4]), RESULT(5, i));  \\\r\n            CHECK_INT(fobj(sp0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4]), RESULT(5, i)); \\\r\n        }                                                                                       \\\r\n    }\r\n#define CALL6m(fobj)                                                                                        \\\r\n    {                                                                                                       \\\r\n        for (int i = 0; i < 10; ++i) {                                                                      \\\r\n            funobj f0(arg[i]);                                                                              \\\r\n            funobj* fp = &f0;                                                                               \\\r\n            sp sp0(f0);                                                                                     \\\r\n            CHECK_INT(fobj(f0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5]), RESULT(6, i));  \\\r\n            CHECK_INT(fobj(fp, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5]), RESULT(6, i));  \\\r\n            CHECK_INT(fobj(sp0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5]), RESULT(6, i)); \\\r\n        }                                                                                                   \\\r\n    }\r\n#define CALL7m(fobj)                                                                                                   \\\r\n    {                                                                                                                  \\\r\n        for (int i = 0; i < 10; ++i) {                                                                                 \\\r\n            funobj f0(arg[i]);                                                                                         \\\r\n            funobj* fp = &f0;                                                                                          \\\r\n            sp sp0(f0);                                                                                                \\\r\n            CHECK_INT(fobj(f0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5], arg[i + 6]), RESULT(7, i)); \\\r\n            CHECK_INT(fobj(fp, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5], arg[i + 6]), RESULT(7, i)); \\\r\n            CHECK_INT(                                                                                                 \\\r\n                fobj(sp0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5], arg[i + 6]), RESULT(7, i));      \\\r\n        }                                                                                                              \\\r\n    }\r\n#define CALL8m(fobj)                                                                                                 \\\r\n    {                                                                                                                \\\r\n        for (int i = 0; i < 10; ++i) {                                                                               \\\r\n            funobj f0(arg[i]);                                                                                       \\\r\n            funobj* fp = &f0;                                                                                        \\\r\n            sp sp0(f0);                                                                                              \\\r\n            CHECK_INT(fobj(f0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5], arg[i + 6], arg[i + 7]),  \\\r\n                RESULT(8, i));                                                                                       \\\r\n            CHECK_INT(fobj(fp, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5], arg[i + 6], arg[i + 7]),  \\\r\n                RESULT(8, i));                                                                                       \\\r\n            CHECK_INT(fobj(sp0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5], arg[i + 6], arg[i + 7]), \\\r\n                RESULT(8, i));                                                                                       \\\r\n        }                                                                                                            \\\r\n    }\r\n#define CALL9m(fobj)                                                                                                \\\r\n    {                                                                                                               \\\r\n        for (int i = 0; i < 10; ++i) {                                                                              \\\r\n            funobj f0(arg[i]);                                                                                      \\\r\n            funobj* fp = &f0;                                                                                       \\\r\n            sp sp0(f0);                                                                                             \\\r\n            CHECK_INT(fobj(f0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5], arg[i + 6], arg[i + 7],  \\\r\n                          arg[i + 8]),                                                                              \\\r\n                RESULT(9, i));                                                                                      \\\r\n            CHECK_INT(fobj(fp, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5], arg[i + 6], arg[i + 7],  \\\r\n                          arg[i + 8]),                                                                              \\\r\n                RESULT(9, i));                                                                                      \\\r\n            CHECK_INT(fobj(sp0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5], arg[i + 6], arg[i + 7], \\\r\n                          arg[i + 8]),                                                                              \\\r\n                RESULT(9, i));                                                                                      \\\r\n        }                                                                                                           \\\r\n    }\r\n#define CALL10m(fobj)                                                                                               \\\r\n    {                                                                                                               \\\r\n        for (int i = 0; i < 10; ++i) {                                                                              \\\r\n            funobj f0(arg[i]);                                                                                      \\\r\n            funobj* fp = &f0;                                                                                       \\\r\n            sp sp0(f0);                                                                                             \\\r\n            CHECK_INT(fobj(f0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5], arg[i + 6], arg[i + 7],  \\\r\n                          arg[i + 8], arg[i + 9]),                                                                  \\\r\n                RESULT(10, i));                                                                                     \\\r\n            CHECK_INT(fobj(fp, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5], arg[i + 6], arg[i + 7],  \\\r\n                          arg[i + 8], arg[i + 9]),                                                                  \\\r\n                RESULT(10, i));                                                                                     \\\r\n            CHECK_INT(fobj(sp0, arg[i + 1], arg[i + 2], arg[i + 3], arg[i + 4], arg[i + 5], arg[i + 6], arg[i + 7], \\\r\n                          arg[i + 8], arg[i + 9]),                                                                  \\\r\n                RESULT(10, i));                                                                                     \\\r\n        }                                                                                                           \\\r\n    }\r\n\r\ntemplate <class Res, class Fty>\r\nvoid match_result_type(Fty) {\r\n    CHECK_TYPE(typename Fty::result_type, Res);\r\n}\r\n\r\ntemplate <class Ty, class = void>\r\nstruct has_result_type_helper : STD false_type {};\r\n\r\ntemplate <class Ty>\r\nstruct has_result_type_helper<Ty, STD void_t<typename Ty::result_type>> : STD true_type {};\r\n\r\ntemplate <class Fty>\r\nbool has_result_type(Fty) {\r\n    return has_result_type_helper<Fty>::value;\r\n}\r\n\r\ntemplate <class T>\r\nconst T& fake_lvalue(const T&& t) { // C++11 12.2 [class.temporary]/5: \"A temporary bound to a reference\r\n                                    // parameter in a function call (5.2.2) persists until the completion\r\n                                    // of the full-expression containing the call.\"\r\n    return t;\r\n}\r\n\r\n#ifdef __clang__\r\n#pragma clang diagnostic pop\r\n#endif // __clang__\r\n\r\n#pragma warning(pop)\r\n"
  },
  {
    "path": "tests/tr1/include/tspec_random.h",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// common header for random distribution tests\r\n#include <iostream>\r\n#include <random>\r\nusing namespace std;\r\n\r\n// COMMON TYPES\r\n#define FLIT(x)                x\r\n#define BINSIZE                100\r\n#define SAMPLESIZE             100000\r\n#define CHI_SQUARED_FAIL_LIMIT 125.0\r\n\r\n#define TESTR(fun) do_random_test<fun##_type>::gen_data(fun##_dist, fun##_vals, fun##_smaller_ok, fun##_larger_ok)\r\n\r\ntypedef struct One_arg { // argument plus return value\r\n    Float_type arg1;\r\n    Float_type ans;\r\n    Float_type sensitivity;\r\n} One_arg;\r\n\r\n#include \"tspec_random_defs.h\"\r\n\r\ntemplate <class Ty>\r\nclass do_random_test { // template for running a random distribution test\r\npublic:\r\n    template <class _Distribution>\r\n    static void gen_data(\r\n        _Distribution& _Dist, One_arg* tab, int smaller_ok, int larger_ok) { // generate random data with given _Dist\r\n                                                                             // and compare against expected results\r\n        Ty rand_value;\r\n        double prob_want[BINSIZE];\r\n        double want_count[BINSIZE];\r\n        int got_count[BINSIZE];\r\n        int over_bin, under_bin, junk_bin;\r\n\r\n        // load wanted probabilities from data\r\n        int i;\r\n        for (i = 0; i < 10; ++i) {\r\n            prob_want[(int) tab[i].arg1] = tab[i].ans;\r\n        }\r\n\r\n        // collect random sample data from given distribution\r\n        mt19937 gen;\r\n        i = 0;\r\n        for (; i < BINSIZE; ++i) {\r\n            got_count[i] = 0;\r\n        }\r\n\r\n        over_bin  = 0;\r\n        under_bin = 0;\r\n        junk_bin  = 0;\r\n\r\n        _Dist.reset();\r\n        for (i = 0; i < SAMPLESIZE; i++) { // generate a random number using the given distribution\r\n                                           // and engine and build the histogram with results\r\n            rand_value = _Dist(gen);\r\n\r\n            Ty zero = (Ty) 0; // to quiet diagnostics\r\n            if (zero <= rand_value && rand_value < (Ty) BINSIZE) { // increase the count of the proper bin\r\n                got_count[(int) rand_value]++;\r\n            } else if (rand_value < zero) {\r\n                ++under_bin;\r\n            } else if ((Ty) (BINSIZE - 1) < rand_value) {\r\n                ++over_bin;\r\n            } else {\r\n                ++junk_bin;\r\n            }\r\n        }\r\n\r\n        int tc0 = 0;\r\n        if (verbose) {\r\n            printf(\"bin\\twant(bin)\\tgot(bin)\\n\");\r\n        }\r\n\r\n        // Compute results\r\n        for (i = 0; i < BINSIZE; ++i) { // compute results for each bin\r\n            want_count[i] = (double) (prob_want[i] * SAMPLESIZE);\r\n\r\n            if ((int) i == (int) tab[tc0].arg1) {\r\n                ++tc0;\r\n                if (verbose) {\r\n                    printf(\"%.2d\\t%.9g\\t%d\\n\", i, want_count[i], got_count[i]);\r\n                }\r\n            }\r\n        }\r\n\r\n        // Do chi squared test\r\n        double chi_squared = 0;\r\n        int tc             = 0;\r\n\r\n        for (i = 0; i < BINSIZE; i++) {\r\n            if ((int) i == (int) tab[tc].arg1) {\r\n                ++tc;\r\n                if (0 < want_count[i]) { // avoid divide by zero and count empty bins\r\n                    double want_diff = got_count[i] - (double) want_count[i];\r\n                    chi_squared += (want_diff * want_diff) / (double) want_count[i];\r\n                } else if (0 < got_count[i]) {\r\n                    chi_squared += got_count[i];\r\n                }\r\n            }\r\n        }\r\n\r\n        // Check results\r\n        int under_bin_ok = 1;\r\n        int over_bin_ok  = 1;\r\n\r\n        if (0 < under_bin && !smaller_ok) {\r\n            under_bin_ok = 0;\r\n        }\r\n\r\n        if (0 < over_bin && !larger_ok) {\r\n            over_bin_ok = 0;\r\n        }\r\n\r\n        CHECK_MSG(\"smaller values not ok\\n\", under_bin_ok);\r\n        CHECK_MSG(\"larger values not ok\\n\", over_bin_ok);\r\n        CHECK_MSG(\"invalid values generated\\n\", junk_bin == 0);\r\n        CHECK_MSG(\"chi squared too high\\n\", chi_squared < CHI_SQUARED_FAIL_LIMIT);\r\n    }\r\n};\r\n\r\nvoid test_random() { // test all of the distributions\r\n    TESTR(bernoulli_distribution);\r\n    TESTR(binomial_distribution);\r\n    TESTR(exponential_distribution);\r\n    TESTR(gamma_distribution);\r\n    TESTR(geometric_distribution);\r\n    TESTR(normal_distribution);\r\n    TESTR(poisson_distribution);\r\n    TESTR(uniform_int_distribution);\r\n    TESTR(uniform_real_distribution);\r\n    TESTR(cauchy_distribution);\r\n    TESTR(chi_squared_distribution);\r\n    TESTR(extreme_value_distribution);\r\n    TESTR(fisher_f_distribution);\r\n    TESTR(lognormal_distribution);\r\n    TESTR(negative_binomial_distribution);\r\n    TESTR(weibull_distribution);\r\n    TESTR(student_t_distribution);\r\n    TESTR(discrete_distribution);\r\n    TESTR(piecewise_constant_distribution);\r\n    TESTR(piecewise_linear_distribution);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/include/tspec_random_defs.h",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// common header for random distribution tests\r\n\r\ntypedef unsigned int bernoulli_distribution_type;\r\nbernoulli_distribution bernoulli_distribution_dist(0.1);\r\nint bernoulli_distribution_smaller_ok = 0;\r\nint bernoulli_distribution_larger_ok  = 1;\r\n\r\nOne_arg bernoulli_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(0.9000000000000000221), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(0.0), FLIT(0.0)},\r\n};\r\n\r\ntypedef unsigned int binomial_distribution_type;\r\nbinomial_distribution<binomial_distribution_type> binomial_distribution_dist(500, 0.14);\r\nint binomial_distribution_smaller_ok = 0;\r\nint binomial_distribution_larger_ok  = 1;\r\n\r\nOne_arg binomial_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(1.7751114354849962758e-33), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(4.1357571813233832335e-20), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(1.0667596861038720127e-12), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(7.7882289340192345399e-08), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(0.0001107644245134541864), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(0.0077458464221360464121), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(0.045989309489316600178), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(0.033223156045591555051), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(0.0037651429261223163908), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(8.0798037229550803347e-05), FLIT(0.0)},\r\n};\r\n\r\ntypedef double exponential_distribution_type;\r\nexponential_distribution<exponential_distribution_type> exponential_distribution_dist(0.9);\r\nint exponential_distribution_smaller_ok = 0;\r\nint exponential_distribution_larger_ok  = 1;\r\n\r\nOne_arg exponential_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(0.59343034025940089028), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(2.9775178645003367278e-05), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(1.4939601216788643781e-09), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(7.4958974109841988164e-14), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(3.7610426932183981179e-18), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(1.8870912133193438463e-22), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(9.4684201639300156424e-27), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(4.7507497129946777994e-31), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(2.3836735637797403083e-35), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(1.1960006318835876534e-39), FLIT(0.0)},\r\n};\r\n\r\ntypedef double gamma_distribution_type;\r\ngamma_distribution<gamma_distribution_type> gamma_distribution_dist(33.33);\r\nint gamma_distribution_smaller_ok = 0;\r\nint gamma_distribution_larger_ok  = 1;\r\n\r\nOne_arg gamma_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(1.3673309796216089079e-38), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(2.6988940302906503063e-07), FLIT(17.0)},\r\n    {FLIT(22.0), FLIT(0.010638974806815103269), FLIT(10.0)},\r\n    {FLIT(33.0), FLIT(0.068471582683104090239), FLIT(1.0)},\r\n    {FLIT(44.0), FLIT(0.011132866486719340122), FLIT(13.0)},\r\n    {FLIT(55.0), FLIT(0.00023592964425101634248), FLIT(26.0)},\r\n    {FLIT(66.0), FLIT(1.3678876793096542283e-06), FLIT(47.0)},\r\n    {FLIT(77.0), FLIT(3.2322794791835488387e-09), FLIT(65.0)},\r\n    {FLIT(88.0), FLIT(3.9534813028245743808e-12), FLIT(44.0)},\r\n    {FLIT(99.0), FLIT(2.9218019755081229669e-15), FLIT(72.0)},\r\n};\r\n\r\ntypedef unsigned int geometric_distribution_type;\r\ngeometric_distribution<geometric_distribution_type> geometric_distribution_dist(0.0005);\r\nint geometric_distribution_smaller_ok = 0;\r\nint geometric_distribution_larger_ok  = 1;\r\n\r\nOne_arg geometric_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(0.00050000000000000001042), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(0.00049725686469780528559), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(0.00049452877897818289451), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(0.00049181566027505028547), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(0.00048911742647530489972), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(0.00048643399591633880052), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(0.0004837652873835672886), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(0.0004811112201079708531), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(0.00047847171376365051293), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(0.00047584668846539719722), FLIT(0.0)},\r\n};\r\n\r\ntypedef double normal_distribution_type;\r\nnormal_distribution<normal_distribution_type> normal_distribution_dist(70.0, 10.0);\r\nint normal_distribution_smaller_ok = 1;\r\nint normal_distribution_larger_ok  = 1;\r\n\r\nOne_arg normal_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(1.3203144217523378428e-12), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(1.4982381152267289312e-09), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(5.0747930194168739104e-07), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(5.1308856680145541142e-05), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(0.0015484773020573848902), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(0.013949457964912981289), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(0.037510319421371528247), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(0.030108253639676330755), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(0.0072137592969240046241), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(0.00051591526875394339882), FLIT(0.0)},\r\n};\r\n\r\ntypedef unsigned int poisson_distribution_type;\r\npoisson_distribution<poisson_distribution_type> poisson_distribution_dist(99.99);\r\nint poisson_distribution_smaller_ok = 0;\r\nint poisson_distribution_larger_ok  = 1;\r\n\r\nOne_arg poisson_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(3.7574633611456447220e-44), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(9.4028885517711230718e-30), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(3.3355900250355996632e-21), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(4.3129639100861158652e-15), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(1.4072926384674739807e-10), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(2.9432374732049666489e-07), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(6.8573146564132530047e-05), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(0.0025682333322709681791), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(0.020080267686946835088), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(0.03986496337366227799), FLIT(0.0)},\r\n};\r\n\r\ntypedef unsigned int uniform_int_distribution_type;\r\nuniform_int_distribution<uniform_int_distribution_type> uniform_int_distribution_dist(10, 90);\r\nint uniform_int_distribution_smaller_ok = 0;\r\nint uniform_int_distribution_larger_ok  = 0;\r\n\r\nOne_arg uniform_int_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(0.012345679012345678328), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(0.012345679012345678328), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(0.012345679012345678328), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(0.012345679012345678328), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(0.012345679012345678328), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(0.012345679012345678328), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(0.012345679012345678328), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(0.012345679012345678328), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(0.0), FLIT(0.0)},\r\n};\r\n\r\ntypedef double uniform_real_distribution_type;\r\nuniform_real_distribution<uniform_real_distribution_type> uniform_real_distribution_dist(40.2, 60.5);\r\nint uniform_real_distribution_smaller_ok = 0;\r\nint uniform_real_distribution_larger_ok  = 0;\r\n\r\nOne_arg uniform_real_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(0.049261083743842366821), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(0.049261083743842366821), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(0.0), FLIT(0.0)},\r\n};\r\n\r\ntypedef double cauchy_distribution_type;\r\ncauchy_distribution<cauchy_distribution_type> cauchy_distribution_dist(50.0, 20.0);\r\nint cauchy_distribution_smaller_ok = 1;\r\nint cauchy_distribution_larger_ok  = 1;\r\n\r\nOne_arg cauchy_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(0.0022337169205865663528), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(0.0033825494626492065912), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(0.0055065420833932529275), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(0.0094707128833737101724), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(0.014794448700373018234), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(0.014794448700373018234), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(0.0094707128833737101724), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(0.0055065420833932529275), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(0.0033825494626492065912), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(0.0022337169205865663528), FLIT(0.0)},\r\n};\r\n\r\ntypedef double chi_squared_distribution_type;\r\nchi_squared_distribution<chi_squared_distribution_type> chi_squared_distribution_dist(25);\r\nint chi_squared_distribution_smaller_ok = 0;\r\nint chi_squared_distribution_larger_ok  = 1;\r\n\r\nOne_arg chi_squared_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(6.3560983166287375127e-14), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(0.0063777771780991199258), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(0.058180658367338024261), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(0.023160221299317922812), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(0.0024827864750023610763), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(0.00012884902663430578971), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(4.2164357002313538093e-06), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(1.0026741000440351133e-07), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(1.8865426080766510405e-09), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(2.9673311806562293539e-11), FLIT(0.0)},\r\n};\r\n\r\ntypedef double extreme_value_distribution_type;\r\nextreme_value_distribution<extreme_value_distribution_type> extreme_value_distribution_dist(100.0, 50.0);\r\nint extreme_value_distribution_smaller_ok = 1;\r\nint extreme_value_distribution_larger_ok  = 1;\r\n\r\nOne_arg extreme_value_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(9.7367891314001451391e-05), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(0.00033126932474906436652), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(0.00084739624916670380599), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(0.0017241855032130344335), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(0.002919441358705740507), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(0.0042656576399787964755), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(0.0055371368821154568625), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(0.0065364835202489889043), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(0.007150000321596400658), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(0.0073570958848930461184), FLIT(0.0)},\r\n};\r\n\r\ntypedef double fisher_f_distribution_type;\r\nfisher_f_distribution<fisher_f_distribution_type> fisher_f_distribution_dist(100, 100);\r\nint fisher_f_distribution_smaller_ok = 0;\r\nint fisher_f_distribution_larger_ok  = 1;\r\n\r\nOne_arg fisher_f_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(0.5), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(8.3260041343146971517e-28), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(4.2575806932815351998e-41), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(2.4240885834500787410e-49), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(2.4676780498616531735e-55), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(4.8054910094320747983e-60), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(6.3076208593219290698e-64), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(3.1490831086709536890e-67), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(4.2223904306022199285e-70), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(1.2110718493018566369e-72), FLIT(0.0)},\r\n};\r\n\r\ntypedef double lognormal_distribution_type;\r\nlognormal_distribution<lognormal_distribution_type> lognormal_distribution_dist(-20.0, 500.0);\r\nint lognormal_distribution_smaller_ok = 0;\r\nint lognormal_distribution_larger_ok  = 1;\r\n\r\nOne_arg lognormal_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(0.51595343685283079349), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(6.9355142249137168195e-05), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(3.5429500293984065392e-05), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(2.3792899005689961879e-05), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(1.7910450638045969073e-05), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(1.4360112403848483223e-05), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(1.1984448090128025368e-05), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(1.0283225697318154478e-05), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(9.0049387871531233869e-06), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(8.0093079994869283491e-06), FLIT(0.0)},\r\n};\r\n\r\ntypedef unsigned int negative_binomial_distribution_type;\r\nnegative_binomial_distribution<negative_binomial_distribution_type> negative_binomial_distribution_dist(500, 0.86);\r\nint negative_binomial_distribution_smaller_ok = 0;\r\nint negative_binomial_distribution_larger_ok  = 1;\r\n\r\nOne_arg negative_binomial_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(1.7751114354849962758e-33), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(9.8082107740810993668e-21), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(9.7374291700601843825e-14), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(4.4439009331195199142e-09), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(6.4236461000209705694e-06), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(0.00074357566972747151432), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(0.011927027268930044667), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(0.03809102681328114388), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(0.031327529759048136638), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(0.0080383675820337816691), FLIT(0.0)},\r\n};\r\n\r\ntypedef double student_t_distribution_type;\r\nstudent_t_distribution<student_t_distribution_type> student_t_distribution_dist(50);\r\nint student_t_distribution_smaller_ok = 1;\r\nint student_t_distribution_larger_ok  = 1;\r\n\r\nOne_arg student_t_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(0.33893717744987772456), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(2.8302556845392191973e-15), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(9.8646847974168315934e-28), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(5.0235340239736209210e-36), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(4.0067552393902051078e-42), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(6.3124603112886710814e-47), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(6.9923295528041351860e-51), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(3.0486632921900762651e-54), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(3.6637663518242480349e-57), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(9.6049691218903256753e-60), FLIT(0.0)},\r\n};\r\n\r\ntypedef double weibull_distribution_type;\r\nweibull_distribution<weibull_distribution_type> weibull_distribution_dist(12.0, 55.0);\r\nint weibull_distribution_smaller_ok = 0;\r\nint weibull_distribution_larger_ok  = 1;\r\n\r\nOne_arg weibull_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(1.3051118293416215321e-21), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(7.5405081073014867302e-09), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(1.1823551312791094216e-05), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(0.00093528583410685574294), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(0.019648901274758198697), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(0.078893724763520273192), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(0.00011119556052245381853), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(2.3884382333075901134e-25), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(1.5132191001912599564e-124), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(0.0), FLIT(0.0)},\r\n};\r\n\r\nint _Random_test_fun_1(double x) {\r\n    return (int) x - 50;\r\n}\r\n\r\ntypedef double piecewise_constant_distribution_type;\r\npiecewise_constant_distribution<piecewise_constant_distribution_type> piecewise_constant_distribution_dist(\r\n    8, 50.0, 100.0, _Random_test_fun_1);\r\nint piecewise_constant_distribution_smaller_ok = 0;\r\nint piecewise_constant_distribution_larger_ok  = 0;\r\n\r\nOne_arg piecewise_constant_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(0.0024489795918367346), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(0.012244897959183673), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(0.022857142857142857), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(0.0326530612244898), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(0.037551020408163265), FLIT(0.0)},\r\n};\r\n\r\ntypedef double piecewise_linear_distribution_type;\r\npiecewise_linear_distribution<piecewise_linear_distribution_type> piecewise_linear_distribution_dist(\r\n    8, 50.0, 100.0, _Random_test_fun_1);\r\nint piecewise_linear_distribution_smaller_ok = 0;\r\nint piecewise_linear_distribution_larger_ok  = 0;\r\n\r\nOne_arg piecewise_linear_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(0.0), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(0.004467005076142132), FLIT(0.0)},\r\n    {FLIT(66.0), FLIT(0.013401015228426396), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(0.02233502538071066), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(0.03126903553299493), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(0.04020304568527919), FLIT(0.0)},\r\n};\r\n\r\nint _Random_test_fun_2(double x) {\r\n    return (int) x;\r\n}\r\n\r\ntypedef unsigned int discrete_distribution_type;\r\ndiscrete_distribution<discrete_distribution_type> discrete_distribution_dist(100, 70, 90, _Random_test_fun_2);\r\nint discrete_distribution_smaller_ok = 0;\r\nint discrete_distribution_larger_ok  = 0;\r\n\r\nOne_arg discrete_distribution_vals[] = {\r\n    {FLIT(0.0), FLIT(0.0088050314465408802827), FLIT(0.0)},\r\n    {FLIT(11.0), FLIT(0.009056603773584906077), FLIT(0.0)},\r\n    {FLIT(22.0), FLIT(0.0093081761006289301386), FLIT(0.0)},\r\n    {FLIT(33.0), FLIT(0.0095597484276729559337), FLIT(0.0)},\r\n    {FLIT(44.0), FLIT(0.0098113207547169817292), FLIT(0.0)},\r\n    {FLIT(55.0), FLIT(0.010188679245283018688), FLIT(72510786453261.0)},\r\n    {FLIT(66.0), FLIT(0.010440251572327044483), FLIT(0.0)},\r\n    {FLIT(77.0), FLIT(0.010691823899371068543), FLIT(0.0)},\r\n    {FLIT(88.0), FLIT(0.010943396226415094337), FLIT(0.0)},\r\n    {FLIT(99.0), FLIT(0.011194968553459120135), FLIT(0.0)},\r\n};\r\n"
  },
  {
    "path": "tests/tr1/include/typetr.h",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// common header for type_traits?.cpp\r\n\r\n// check that X is one of the boolean wrapper types\r\ntemplate <class X>\r\nstruct is_bool_wrapper { // most types are not boolean wrappers\r\n    static const bool value = false;\r\n};\r\n\r\ntemplate <>\r\nstruct is_bool_wrapper<STD false_type> { // false_type is a boolean wrapper\r\n    static const bool value = true;\r\n};\r\n\r\ntemplate <>\r\nstruct is_bool_wrapper<STD true_type> { // true_type is a boolean wrapper\r\n    static const bool value = true;\r\n};\r\n\r\n#define T_INTEGRAL_CONSTANT(Ty, NTy, val) \\\r\n    CHECK_TYPE(Ty::type, Ty);             \\\r\n    CHECK_TYPE(Ty::value_type, NTy);      \\\r\n    CHECK_INT(Ty::value, val);            \\\r\n    CHECK_INT((NTy) Ty(), val)\r\n\r\n#define CHECK_BASE(X)                                                                                       \\\r\n    CHECK_INT((STD is_base_of<STD true_type, X>::value || STD is_base_of<STD false_type, X>::value), true); \\\r\n    CHECK_INT(is_bool_wrapper<X::type>::value, true);\r\n\r\n#define T_BASIC_TRAITS(X, b) \\\r\n    CHECK_BASE(X);           \\\r\n    CHECK_INT(X::value, b)\r\n\r\n// MACROS FOR TESTING TYPE TRAITS\r\n#define T_TEST(trait, X, b) T_BASIC_TRAITS(STD trait<X>, b)\r\n#define T_TEST_CV(trait, X, b)               \\\r\n    do {                                     \\\r\n        typedef X XX;                        \\\r\n        T_TEST(trait, XX, b);                \\\r\n        T_TEST(trait, const XX, b);          \\\r\n        T_TEST(trait, volatile XX, b);       \\\r\n        T_TEST(trait, const volatile XX, b); \\\r\n    } while (0)\r\n#define T_TEST_CONST(trait, X)                  \\\r\n    do {                                        \\\r\n        typedef X XX;                           \\\r\n        T_TEST(trait, XX, false);               \\\r\n        T_TEST(trait, const XX, true);          \\\r\n        T_TEST(trait, volatile XX, false);      \\\r\n        T_TEST(trait, const volatile XX, true); \\\r\n    } while (0)\r\n#define T_TEST_VOLATILE(trait, X)               \\\r\n    do {                                        \\\r\n        typedef X XX;                           \\\r\n        T_TEST(trait, XX, false);               \\\r\n        T_TEST(trait, const XX, false);         \\\r\n        T_TEST(trait, volatile XX, true);       \\\r\n        T_TEST(trait, const volatile XX, true); \\\r\n    } while (0)\r\n\r\n// MACROS FOR TESTING is_pod W/O COMPILER SUPPORT\r\n#define T_POD(X, res) CHECK_INT(STD is_pod<X>::value, res)\r\n\r\n#define T_POD_CV(X, res)               \\\r\n    do {                               \\\r\n        typedef X XX;                  \\\r\n        T_POD(XX, res);                \\\r\n        T_POD(const XX, res);          \\\r\n        T_POD(volatile XX, res);       \\\r\n        T_POD(const volatile XX, res); \\\r\n    } while (0)\r\n\r\n// MACROS FOR TESTING has_trivial_* TRAITS W/O COMPILER SUPPORT\r\n#define T_TRIVIAL(trait, X, res) CHECK_INT(STD trait<X>::value, res)\r\n\r\n#define T_TRIVIAL_C(trait, X, b)       \\\r\n    do {                               \\\r\n        typedef X XX;                  \\\r\n        T_TRIVIAL(trait, XX, b);       \\\r\n        T_TRIVIAL(trait, const XX, b); \\\r\n    } while (0)\r\n\r\n#define T_TRIVIAL_V(trait, X, b)          \\\r\n    do {                                  \\\r\n        typedef X XX;                     \\\r\n        T_TRIVIAL(trait, XX, b);          \\\r\n        T_TRIVIAL(trait, volatile XX, b); \\\r\n    } while (0)\r\n\r\n#define T_TRIVIAL_CV(trait, X, b)               \\\r\n    do {                                        \\\r\n        typedef X XX;                           \\\r\n        T_TRIVIAL(trait, XX, b);                \\\r\n        T_TRIVIAL(trait, const XX, b);          \\\r\n        T_TRIVIAL(trait, volatile XX, b);       \\\r\n        T_TRIVIAL(trait, const volatile XX, b); \\\r\n    } while (0)\r\n\r\n// MACROS FOR TESTING TRAITS WITH UNSPECIFIED RESULT W/O COMPILER SUPPORT\r\n#define T_UNSPEC(trait, X, res) CHECK_INT(STD trait<X>::value, res)\r\n\r\n#define T_UNSPEC_C(trait, X, b)       \\\r\n    do {                              \\\r\n        typedef X XX;                 \\\r\n        T_UNSPEC(trait, XX, b);       \\\r\n        T_UNSPEC(trait, const XX, b); \\\r\n    } while (0)\r\n\r\n#define T_UNSPEC_V(trait, X, b)          \\\r\n    do {                                 \\\r\n        typedef X XX;                    \\\r\n        T_UNSPEC(trait, XX, b);          \\\r\n        T_UNSPEC(trait, volatile XX, b); \\\r\n    } while (0)\r\n\r\n#define T_UNSPEC_CV(trait, X, b)               \\\r\n    do {                                       \\\r\n        typedef X XX;                          \\\r\n        T_UNSPEC(trait, XX, b);                \\\r\n        T_UNSPEC(trait, const XX, b);          \\\r\n        T_UNSPEC(trait, volatile XX, b);       \\\r\n        T_UNSPEC(trait, const volatile XX, b); \\\r\n    } while (0)\r\n\r\n// MACROS FOR TESTING TRAITS WITH NO BASE W/O COMPILER SUPPORT\r\n#define T_NOBASE(trait, X, res) CHECK_INT(STD trait<X>::value, res)\r\n\r\n#define T_NOBASE_CV(trait, X, b)               \\\r\n    do {                                       \\\r\n        typedef X XX;                          \\\r\n        T_NOBASE(trait, XX, b);                \\\r\n        T_NOBASE(trait, const XX, b);          \\\r\n        T_NOBASE(trait, volatile XX, b);       \\\r\n        T_NOBASE(trait, const volatile XX, b); \\\r\n    } while (0)\r\n\r\n// TYPES\r\nstruct A { // abstract class\r\n    virtual void f() = 0;\r\n};\r\n\r\nstruct B { // dummy class for member pointers\r\n    virtual ~B() noexcept {}\r\n};\r\n\r\nstruct C : B { // derived dummy class\r\n};\r\n\r\nstruct D { // empty class\r\n};\r\n\r\nstruct M { // movable class\r\n    M();\r\n    M(M&&);\r\n    M& operator=(M&&);\r\n};\r\n\r\nstruct T { // throwing class\r\n    T() noexcept(false);\r\n    T(const T&) noexcept(false);\r\n    ~T() noexcept(false);\r\n    T& operator=(const T&) noexcept(false);\r\n};\r\n\r\nunion U { // dummy union\r\n    int i;\r\n    double d;\r\n};\r\n\r\ntypedef int B::* pmo;\r\ntypedef const int B::* pmoc;\r\ntypedef volatile int B::* pmov;\r\ntypedef const volatile int B::* pmocv;\r\ntypedef void (B::*pmf)();\r\ntypedef void (B::*pmfc)() const;\r\ntypedef void (B::*pmfv)() volatile;\r\ntypedef void (B::*pmfcv)() const volatile;\r\n\r\ntypedef int arr_t[20];\r\nenum enum_t { one, two, three };\r\ntypedef void (*pf)();\r\ntypedef void(func)();\r\n\r\ntypedef int ARR0;\r\ntypedef ARR0 ARR1[2];\r\ntypedef ARR1 ARR2[3];\r\ntypedef ARR2 ARR3[4];\r\ntypedef ARR3 ARR4[5];\r\ntypedef ARR4 ARR5[6];\r\ntypedef ARR5 ARRN[];\r\n\r\ntypedef int I;\r\ntypedef const int CI;\r\ntypedef volatile int VI;\r\ntypedef const volatile int CVI;\r\n\r\ntypedef I* IP;\r\ntypedef I* const ICP;\r\ntypedef I* volatile IVP;\r\ntypedef I* const volatile ICVP;\r\n\r\ntypedef CI* CIP;\r\ntypedef CI* const CICP;\r\ntypedef CI* volatile CIVP;\r\ntypedef CI* const volatile CICVP;\r\n\r\ntypedef VI* VIP;\r\ntypedef VI* const VICP;\r\ntypedef VI* volatile VIVP;\r\ntypedef VI* const volatile VICVP;\r\n\r\ntypedef CVI* CVIP;\r\ntypedef CVI* const CVICP;\r\ntypedef CVI* volatile CVIVP;\r\ntypedef CVI* const volatile CVICVP;\r\n"
  },
  {
    "path": "tests/tr1/lit.cfg",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nlit_config.fatal(\r\n    \"You seem to be running Lit directly -- you should be running Lit through \"\r\n    \"<build>/tests/utils/stl-lit/stl-lit.py, which will ensure that the right Lit configuration \"\r\n    \"file is used.\")\r\n"
  },
  {
    "path": "tests/tr1/lit.site.cfg.in",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nimport os\r\nimport site\r\nsite.addsitedir(\"@STL_TEST_UTILS_DIR@\")\r\nsite.addsitedir(os.path.join(\"@LIBCXX_SOURCE_DIR@\", \"utils\"))\r\nimport stl.test.config\r\nimport stl.test.features\r\nimport stl.test.file_parsing\r\nimport stl.test.format\r\nimport stl.test.params\r\n\r\nconfig.name           = 'tr1'\r\nconfig.suffixes       = ['test[.]cpp$']\r\nconfig.test_exec_root = \"@TR1_TEST_OUTPUT_DIR@\"\r\nconfig.test_format    = stl.test.format.STLTestFormat()\r\nconfig.substitutions.append(('%{cxx_std}', ''))\r\n\r\nlit_config.expected_results = getattr(lit_config, 'expected_results', dict())\r\nlit_config.include_dirs     = getattr(lit_config, 'include_dirs', dict())\r\nlit_config.library_dirs     = getattr(lit_config, 'library_dirs', dict())\r\nlit_config.test_subdirs     = getattr(lit_config, 'test_subdirs', dict())\r\n\r\nlit_config.expected_results[config.name] = stl.test.file_parsing.parse_result_file('@TR1_EXPECTED_RESULTS@')\r\nlit_config.include_dirs[config.name]     = \\\r\n    ['@STL_TESTED_HEADERS_DIR@', '@STL_SOURCE_DIR@/tests/tr1/include', '@STL_SOURCE_DIR@/tests/std/include']\r\nlit_config.library_dirs[config.name]     = ['@STL_LIBRARY_OUTPUT_DIRECTORY@', '@TOOLSET_LIB@']\r\nlit_config.test_subdirs[config.name]     = ['@CMAKE_CURRENT_SOURCE_DIR@/tests']\r\n\r\nlit_config.cxx_runtime = '@STL_RUNTIME_OUTPUT_DIRECTORY@'\r\nlit_config.target_arch = '@VCLIBS_TARGET_ARCHITECTURE@'\r\nlit_config.build_only  = '@TESTS_BUILD_ONLY@'.lower() in ['1', 'true', 'on']\r\n\r\n# Add parameters and features to the config\r\nstl.test.config.configure(\r\n    stl.test.params.getDefaultParameters(config, lit_config),\r\n    stl.test.features.getDefaultFeatures(config, lit_config),\r\n    config,\r\n    lit_config\r\n)\r\n"
  },
  {
    "path": "tests/tr1/prefix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\universal_prefix.lst\r\nRUNALL_CROSSLIST\r\n*\tPM_CL=\"/FIforce_include.hpp /w14668 /w15267 /D_ENFORCE_FACET_SPECIALIZATIONS=1 /D_CRT_SECURE_NO_WARNINGS\"\r\n"
  },
  {
    "path": "tests/tr1/run.pl",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nuse strict;\r\nuse File::Basename;\r\n\r\n# This file is part of a Microsoft-internal legacy test harness, which we hope to replace in the future.\r\n# Within the Microsoft-internal repo, this uses run.pl and run.pm in src\\qa\\VC\\shared\\testenv\\bin .\r\n\r\nmy $path = $ENV{PATH};\r\n$path =~ s/\\//\\\\/g;\r\n\r\n# pick out just *:*\\testenv\\bin from the path\r\n$path =~ m/.*?([^\\;]*\\\\testenv\\\\bin)($|\\\\$|\\\\;|;).*/i;\r\n\r\nmy $testenv = $1;\r\nmy $testdir = dirname($0); # $0 contains the full path including the filename, dirname($0) extracts the directory path.\r\n\r\n# add testenv to perllib so we don't have to search for it in other files.\r\nif ($ENV{PERLLIB})\r\n{\r\n    $ENV{PERLLIB} = $ENV{PERLLIB} . \";\" . $testenv;\r\n}\r\nelse\r\n{\r\n    $ENV{PERLLIB} = $testenv;\r\n}\r\n\r\nif ($ENV{PM_COMPILER} && $ENV{PM_COMPILER} eq \"clang-cl\" && $ENV{CLANG_TARGET} && $ENV{CLANG_TARGET} =~ /^(-m32|-m64)$/)\r\n{\r\n    $ENV{PM_COMPILER} .= \" \" . $ENV{CLANG_TARGET};\r\n}\r\n\r\n# add additional compiler flags if the compiler is cl.exe.\r\nif (not $ENV{PM_COMPILER})\r\n{\r\n    $ENV{PM_CL} .= \" \" . $ENV{PM_CL_MSVC};\r\n}\r\n\r\nmy $RunPL = \"\";\r\nif ($ENV{PM_CL} && $ENV{PM_CL} =~ m/[\\-\\/]BE / )\r\n{\r\n    $RunPL = $testdir . \"\\\\runbe.pl\";\r\n}\r\nelse\r\n{\r\n    $RunPL = $testenv . \"\\\\run.pl\";\r\n}\r\n\r\nprint \"Executing: \\\"$RunPL\\\"\\n\";\r\nexit(system(\"perl -w $RunPL\")>>8);\r\n"
  },
  {
    "path": "tests/tr1/runbe.pl",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nuse strict;\r\nuse Run;\r\n\r\nif ($ENV{HAS_EDG} && $ENV{HAS_EDG} eq \"yes\")\r\n{\r\n    my $callString = Run::CreateCompilandString();\r\n\r\n    if (Run::ExecuteCL($callString) == 0)\r\n    {\r\n        Run::Pass();\r\n    }\r\n    else\r\n    {\r\n        Run::Fail();\r\n    }\r\n}\r\nelse\r\n{\r\n    Run::Pass();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/test.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\ntests\\algorithm\r\ntests\\array\r\ntests\\atomic\r\ntests\\bitset\r\ntests\\cctype\r\ntests\\cerrno\r\ntests\\cfloat\r\ntests\\chrono\r\ntests\\ciso646\r\ntests\\climits\r\ntests\\clocale\r\ntests\\cmath1\r\ntests\\cmath2\r\ntests\\cmath3\r\ntests\\codecvt\r\ntests\\complex1\r\ntests\\complex2\r\ntests\\complex3\r\ntests\\csetjmp\r\ntests\\csignal\r\ntests\\cstdarg\r\ntests\\cstdbool\r\ntests\\cstddef\r\ntests\\cstdint\r\ntests\\cstdio\r\ntests\\cstring\r\ntests\\ctime\r\ntests\\cwchar1\r\ntests\\cwchar2\r\ntests\\cwctype\r\ntests\\deque\r\ntests\\exception\r\ntests\\filesystem1\r\ntests\\forward_list\r\ntests\\fstream1\r\ntests\\fstream2\r\ntests\\functional\r\ntests\\functional1\r\ntests\\functional2\r\ntests\\functional3\r\ntests\\functional4\r\ntests\\functional5\r\ntests\\functional6\r\ntests\\functional7\r\ntests\\functional7a\r\ntests\\functional8\r\ntests\\functional9\r\ntests\\future\r\ntests\\future1\r\ntests\\initializer_list\r\ntests\\iomanip\r\ntests\\ios\r\ntests\\iosfwd\r\ntests\\iostream1\r\ntests\\istream1\r\ntests\\istream2\r\ntests\\iterator\r\ntests\\limits\r\ntests\\list\r\ntests\\locale1\r\ntests\\locale2\r\ntests\\locale3\r\ntests\\locale4\r\ntests\\locale7\r\ntests\\locale8\r\ntests\\map\r\ntests\\memory\r\ntests\\memory1\r\ntests\\memory2\r\ntests\\memory3\r\ntests\\new\r\ntests\\numeric\r\ntests\\ostream1\r\ntests\\ostream2\r\ntests\\queue\r\ntests\\random1\r\ntests\\random2\r\ntests\\random4\r\ntests\\random5\r\ntests\\random6\r\ntests\\ratio\r\ntests\\regex1\r\ntests\\regex2\r\ntests\\regex3\r\ntests\\regex4\r\ntests\\scoped_allocator\r\ntests\\set\r\ntests\\sstream1\r\ntests\\sstream2\r\ntests\\stack\r\ntests\\stdexcept\r\ntests\\streambuf1\r\ntests\\streambuf2\r\ntests\\string1\r\ntests\\string2\r\ntests\\strstream\r\ntests\\system_error\r\ntests\\tuple\r\ntests\\type_traits1\r\ntests\\type_traits2\r\ntests\\type_traits3\r\ntests\\type_traits4\r\ntests\\type_traits5\r\ntests\\type_traits6\r\ntests\\type_traits7\r\ntests\\typeindex\r\ntests\\typeinfo\r\ntests\\unordered_map\r\ntests\\unordered_set\r\ntests\\utility\r\ntests\\utility1\r\ntests\\valarray\r\ntests\\vector\r\n"
  },
  {
    "path": "tests/tr1/tests/algorithm/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <algorithm>\r\n#define TEST_NAME \"<algorithm>\"\r\n\r\n#define _HAS_AUTO_PTR_ETC                1\r\n#define _HAS_DEPRECATED_ADAPTOR_TYPEDEFS 1\r\n\r\n#include \"tdefs.h\"\r\n#include <algorithm>\r\n#include <ctype.h>\r\n#include <functional>\r\n#include <random>\r\n#include <string.h>\r\n\r\n// FUNCTION OBJECTS\r\nSTD equal_to<char> equf;\r\nSTD less<char> lessf;\r\n\r\nbool cmp_chars(char c1, char c2) { // compare caseless for equality\r\n    return CSTD tolower(c1) == CSTD tolower(c2);\r\n}\r\n\r\nvoid test_single(char* first, char*) { // test single-element template functions\r\n    CHECK_INT(STD max('0', '2'), '2');\r\n    CHECK_INT(STD max('0', '2', lessf), '2');\r\n\r\n    CHECK_INT(STD min('0', '2'), '0');\r\n    CHECK_INT(STD min('0', '2', lessf), '0');\r\n\r\n    CHECK_INT(STD minmax('0', '2').first, '0');\r\n    CHECK_INT(STD minmax('0', '2').second, '2');\r\n    CHECK_INT(STD minmax('0', '2', lessf).first, '0');\r\n    CHECK_INT(STD minmax('0', '2', lessf).second, '2');\r\n\r\n    STD initializer_list<char> ilist1{'0'};\r\n    STD initializer_list<char> ilist2{'1', '2'};\r\n    STD initializer_list<char> ilist3{'0', '1', '2'};\r\n\r\n    CHECK_INT(STD max(ilist1), '0');\r\n    CHECK_INT(STD max(ilist3), '2');\r\n    CHECK_INT(STD max(ilist1, lessf), '0');\r\n    CHECK_INT(STD max(ilist3, lessf), '2');\r\n\r\n    CHECK_INT(STD min(ilist2), '1');\r\n    CHECK_INT(STD min(ilist3), '0');\r\n    CHECK_INT(STD min(ilist2, lessf), '1');\r\n    CHECK_INT(STD min(ilist3, lessf), '0');\r\n\r\n    CHECK_INT(STD minmax(ilist1).first, '0');\r\n    CHECK_INT(STD minmax(ilist1).second, '0');\r\n    CHECK_INT(STD minmax(ilist3).first, '0');\r\n    CHECK_INT(STD minmax(ilist3).second, '2');\r\n    CHECK_INT(STD minmax(ilist1, lessf).first, '0');\r\n    CHECK_INT(STD minmax(ilist1, lessf).second, '0');\r\n    CHECK_INT(STD minmax(ilist3, lessf).first, '0');\r\n    CHECK_INT(STD minmax(ilist3, lessf).second, '2');\r\n\r\n    CSTD strcpy(first, \"abcdefg\");\r\n    STD swap(first[0], first[1]);\r\n    CHECK_STR(first, \"bacdefg\");\r\n    STD iter_swap(&first[0], &first[1]);\r\n    CHECK_STR(first, \"abcdefg\");\r\n\r\n    {\r\n        Movable_int mi0(0);\r\n        Movable_int mi1(1);\r\n        STD swap(mi0, mi1);\r\n        CHECK_INT(mi0.val, 1);\r\n        CHECK_INT(mi1.val, 0);\r\n    }\r\n\r\n    {\r\n        char arr1[] = {\"abc\"};\r\n        char arr2[] = {\"def\"};\r\n        STD swap(arr1, arr2);\r\n        CHECK_STR(&arr1[0], \"def\");\r\n        CHECK_STR(&arr2[0], \"abc\");\r\n    }\r\n}\r\n\r\nvoid test_find(char* first, char* last) { // test searching template functions\r\n    CSTD strcpy(first, \"abccefg\");\r\n    CHECK_INT(*STD max_element(first, last), 'g');\r\n    CHECK_INT(*STD max_element(first, last, lessf), 'g');\r\n    CHECK_INT(*STD min_element(first, last), 'a');\r\n    CHECK_INT(*STD min_element(first, last, lessf), 'a');\r\n\r\n    CHECK_INT(*STD minmax_element(first, last).second, 'g');\r\n    CHECK_INT(*STD minmax_element(first, last, lessf).second, 'g');\r\n    CHECK_INT(*STD minmax_element(first, last).first, 'a');\r\n    CHECK_INT(*STD minmax_element(first, last, lessf).first, 'a');\r\n\r\n    CHECK(STD is_permutation(first, last, first));\r\n    CHECK(STD is_permutation(first, last, \"abcgfec\"));\r\n    CHECK(!STD is_permutation(first, last, \"abcgfed\"));\r\n\r\n    CHECK(STD is_permutation(first, last, first, &cmp_chars));\r\n    CHECK(STD is_permutation(first, last, \"aBCgfec\", &cmp_chars));\r\n    CHECK(!STD is_permutation(first, last, \"abcgfed\", &cmp_chars));\r\n\r\n    CHECK(STD is_permutation(first, last, // added with C++14\r\n        first, last));\r\n    const char* p1 = \"abcgfecxx\";\r\n    CHECK(STD is_permutation(first, last, p1, p1 + 7));\r\n    CHECK(!STD is_permutation(first, last, p1, p1 + CSTD strlen(p1)));\r\n    const char* p2 = \"abcgfedxx\";\r\n    CHECK(!STD is_permutation(first, last, p2, p2 + 7));\r\n    CHECK(!STD is_permutation(first, last, p2, p2 + CSTD strlen(p2)));\r\n\r\n    CHECK(STD is_permutation(first, last, first, last, &cmp_chars));\r\n    const char* p3 = \"aBCgfecxx\";\r\n    CHECK(STD is_permutation(first, last, p3, p3 + 7, &cmp_chars));\r\n    CHECK(!STD is_permutation(first, last, p3, p3 + CSTD strlen(p3), &cmp_chars));\r\n    const char* p4 = \"abcgfedxx\";\r\n    CHECK(!STD is_permutation(first, last, p4, p4 + 7, &cmp_chars));\r\n    CHECK(!STD is_permutation(first, last, p4, p4 + CSTD strlen(p4), &cmp_chars));\r\n\r\n    CHECK(STD equal(first, last, first));\r\n    CHECK(STD equal(first, last, first, equf));\r\n\r\n    CHECK(STD equal(first, last, first, last)); // added with C++14\r\n    CHECK(STD equal(first, last, first, last, equf));\r\n\r\n    CHECK(STD lexicographical_compare(first, last - 1, first, last));\r\n    CHECK(STD lexicographical_compare(first, last - 1, first, last, lessf));\r\n\r\n    CHECK_PTR(STD mismatch(first, last, first).second, last);\r\n    CHECK_PTR(STD mismatch(first, last, first, equf).second, last);\r\n\r\n    CHECK_PTR(STD mismatch(first, last, first, last).second, last); // added with C++14\r\n    CHECK_PTR(STD mismatch(first, last, first, last, equf).second, last);\r\n\r\n    char array[5] = {\"abcd\"};\r\n    CHECK(STD equal(array, array + 4, array));\r\n    CHECK(STD equal(array, array + 4, array, equf));\r\n    CHECK_PTR(STD mismatch(array, array + 4, array).second, array + 4);\r\n    CHECK_PTR(STD mismatch(array, array + 4, array, equf).second, array + 4);\r\n\r\n    CHECK_PTR(STD find(first, last, 'c'), first + 2);\r\n    CHECK_PTR(STD find_if(first, last, STD bind2nd(equf, 'c')), first + 2);\r\n    CHECK_PTR(STD adjacent_find(first, last), first + 2);\r\n    CHECK_PTR(STD adjacent_find(first, last, equf), first + 2);\r\n    CHECK_INT(STD count(first, last, 'c'), 2);\r\n    CHECK_INT(STD count_if(first, last, STD bind2nd(equf, 'c')), 2);\r\n    CHECK_PTR(STD search(first, last, first + 2, last), first + 2);\r\n    CHECK_PTR(STD search(first, last, first + 2, last, equf), first + 2);\r\n    CHECK_PTR(STD search_n(first, last, 2, 'c'), first + 2);\r\n    CHECK_PTR(STD search_n(first, last, 2, 'c', equf), first + 2);\r\n    CHECK_PTR(STD find_end(first, last, first + 2, last), first + 2);\r\n    CHECK_PTR(STD find_end(first, last, first + 2, last, equf), first + 2);\r\n    CHECK_PTR(STD find_first_of(first, last, first + 2, last), first + 2);\r\n    CHECK_PTR(STD find_first_of(first, last, first + 2, last, equf), first + 2);\r\n\r\n    CSTD strcpy(first, \"aabb\");\r\n    CHECK(STD all_of(first, first + 2, STD bind2nd(equf, 'a')));\r\n    CHECK(!STD all_of(first, first + 3, STD bind2nd(equf, 'a')));\r\n    CHECK(!STD any_of(first, first + 2, STD bind2nd(equf, 'b')));\r\n    CHECK(STD any_of(first, first + 3, STD bind2nd(equf, 'b')));\r\n    CHECK(!STD none_of(first, first + 2, STD bind2nd(equf, 'a')));\r\n    CHECK(STD none_of(first, first + 2, STD bind2nd(equf, 'b')));\r\n    CHECK_PTR(STD find_if_not(first, last, STD bind2nd(equf, 'a')), first + 2);\r\n}\r\n\r\n// TEST GENERATING TEMPLATE FUNCTIONS\r\nCSTD size_t gen_count = 0;\r\nvoid count_c(char ch) { // count calls with value 'c'\r\n    if (ch == 'c') {\r\n        ++gen_count;\r\n    }\r\n}\r\n\r\nchar gen_x() { // return literal x\r\n    return 'x';\r\n}\r\n\r\nvoid test_generate(char* first, char* last, char* dest) { // test generating template functions\r\n    STD plus<char> plusf;\r\n\r\n    CSTD strcpy(first, \"abccefg\");\r\n    STD for_each(first, last, &count_c);\r\n    CHECK_INT(gen_count, 2);\r\n    STD generate(first, first + 2, &gen_x);\r\n    CHECK_STR(first, \"xxccefg\");\r\n    CHECK_PTR(STD generate_n(first + 3, last - first - 3, &gen_x), last);\r\n    CHECK_STR(first, \"xxcxxxx\");\r\n    CHECK_PTR(STD transform(first, last, dest, STD bind2nd(plusf, '\\1')), dest + 7);\r\n    CHECK_STR(dest, \"yydyyyy\");\r\n    CHECK_PTR(STD transform(first, last, \"\\1\\1\\1\\2\\1\\1\\1\", dest, plusf), dest + 7);\r\n    CHECK_STR(dest, \"yydzyyy\");\r\n\r\n    char array1[5] = {\"\"};\r\n    char array2[5] = {\"\\1\\2\\3\\4\"};\r\n    CSTD strcpy(first, \"abcd\");\r\n    CHECK_PTR(STD generate_n(array1, 4, &gen_x), &array1[4]);\r\n    CHECK_STR(array1, \"xxxx\");\r\n    CHECK_PTR(STD transform(first, first + 4, array1, STD bind2nd(plusf, '\\1')), array1 + 4);\r\n    CHECK_STR(array1, \"bcde\");\r\n    CHECK_PTR(STD transform(first, first + 4, &array2[0], array1, plusf), array1 + 4);\r\n    CHECK_PTR(STD transform(first, first + 4, array2, &array1[0], plusf), array1 + 4);\r\n    CHECK_PTR(STD transform(first, first + 4, array2, array1, plusf), array1 + 4);\r\n    CHECK_STR(array1, \"bdfh\");\r\n}\r\n\r\nvoid test_copy(char* first, char* last, char* dest) { // test copying template functions\r\n    char array1[5];\r\n    char array2[5];\r\n\r\n    CSTD strcpy(array1, \"xxxx\");\r\n    CSTD strcpy(array2, \"xxxx\");\r\n\r\n    CSTD strcpy(first, \"abcdefg\");\r\n    CHECK_PTR(STD copy(first, first + 3, first + 3), first + 6);\r\n    CHECK_STR(first, \"abcabcg\");\r\n    CHECK_PTR(STD copy(first, first + 4, array2), array2 + 4);\r\n    CHECK_STR(array2, \"abca\");\r\n\r\n    CHECK_PTR(STD copy_backward(first + 4, first + 7, first + 3), first);\r\n    CHECK_STR(first, \"bcgabcg\");\r\n    CHECK_PTR(STD copy_backward(first, first + 4, array2 + 4), array2);\r\n    CHECK_STR(array2, \"bcga\");\r\n\r\n    STD fill(first, first + 3, 'x');\r\n    CHECK_STR(first, \"xxxabcg\");\r\n    CSTD strcpy(array2, \"xxxx\");\r\n    STD fill(array2, array2 + 4, 'z');\r\n    CHECK_STR(array2, \"zzzz\");\r\n    CHECK_PTR(STD fill_n(first, 2, 'y'), first + 2);\r\n    CHECK_STR(first, \"yyxabcg\");\r\n    CHECK_PTR(STD fill_n(array2, 4, 'w'), &array2[4]);\r\n    CHECK_STR(array2, \"wwww\");\r\n\r\n    STD swap_ranges(first, first + 3, first + 3);\r\n    CHECK_STR(first, \"abcyyxg\");\r\n\r\n    STD replace(first, last, 'y', 'c');\r\n    CHECK_STR(first, \"abcccxg\");\r\n    STD replace_if(first, last, STD bind2nd(equf, 'c'), 'z');\r\n    CHECK_STR(first, \"abzzzxg\");\r\n    STD replace_copy(first, last, dest, 'z', 'c');\r\n    CHECK_STR(dest, \"abcccxg\");\r\n    STD replace_copy_if(first, last, dest, STD bind2nd(equf, 'z'), 'y');\r\n    CHECK_STR(dest, \"abyyyxg\");\r\n\r\n    CSTD strcpy(array2, \"xxxx\");\r\n    CSTD strcpy(first, \"abcdefg\");\r\n    STD swap_ranges(first, first + 3, array2);\r\n    CHECK_STR(first, \"xxxdefg\");\r\n    CHECK_STR(array2, \"abcx\");\r\n    STD replace_copy(first, first + 4, array2, 'x', 'c');\r\n    CHECK_STR(array2, \"cccd\");\r\n    STD replace_copy_if(first, first + 4, array2, STD bind2nd(equf, 'x'), 'y');\r\n    CHECK_STR(array2, \"yyyd\");\r\n\r\n    {\r\n        CSTD strcpy(first, \"abcdefg\");\r\n        CHECK_PTR(STD move(first, first + 3, first + 3), first + 6);\r\n        CHECK_STR(first, \"abcabcg\");\r\n        CSTD strcpy(array2, \"xxxx\");\r\n        CHECK_PTR(STD move(first, first + 4, array2), array2 + 4);\r\n        CHECK_STR(array2, \"abca\");\r\n\r\n        CHECK_PTR(STD move_backward(first + 4, first + 7, first + 3), first);\r\n        CHECK_STR(first, \"bcgabcg\");\r\n        CHECK_PTR(STD move_backward(first, first + 4, array2 + 4), array2);\r\n        CHECK_STR(array2, \"bcga\");\r\n\r\n        Movable_int mi[2];\r\n        CHECK_PTR(STD move(&mi[0], &mi[1], &mi[1]), &mi[2]);\r\n        CHECK_INT(mi[0].val, -1);\r\n        CHECK_INT(mi[1].val, 0);\r\n\r\n        CHECK_PTR(STD move_backward(&mi[1], &mi[2], &mi[1]), &mi[0]);\r\n        CHECK_INT(mi[0].val, 0);\r\n        CHECK_INT(mi[1].val, -1);\r\n    }\r\n\r\n    CSTD strcpy(first, \"aabbxxx\");\r\n    CHECK_PTR(STD copy_n(first, 2, first + 2), first + 4);\r\n    CHECK_STR(first, \"aaaaxxx\");\r\n\r\n    CSTD strcpy(array1, \"aabb\");\r\n    CSTD strcpy(array2, \"xxxx\");\r\n    CHECK_PTR(STD copy_n(&array1[0], 4, array2), array2 + 4);\r\n    CHECK_PTR(STD copy_n(array1, 4, &array2[0]), array2 + 4);\r\n    CHECK_PTR(STD copy_n(array1, 4, array2), array2 + 4);\r\n    CHECK_STR(array2, \"aabb\");\r\n\r\n    CSTD strcpy(first, \"ababxxx\");\r\n    CHECK_PTR(STD copy_if(first, first + 4, first + 4, STD bind2nd(equf, 'a')), first + 6);\r\n    CHECK_STR(first, \"ababaax\");\r\n    CSTD strcpy(array2, \"xxxx\");\r\n    CHECK_PTR(STD copy_if(first, first + 4, array2, STD bind2nd(equf, 'a')), array2 + 2);\r\n    CHECK_STR(array2, \"aaxx\");\r\n}\r\n\r\nstruct rand_gen { // uniform random number generator\r\n    STD mt19937 mt;\r\n\r\n    typedef CSTD size_t result_type;\r\n\r\n    result_type operator()() { // get random value\r\n        return mt() & 0xfffff;\r\n    }\r\n\r\n    static constexpr result_type(min)() { // get minimum value\r\n        return 0;\r\n    }\r\n\r\n    static constexpr result_type(max)() { // get maximum value\r\n        return 0xfffff;\r\n    }\r\n};\r\n\r\nstruct equ_mi1 { // test if Movable_int == 1\r\n    bool operator()(const Movable_int& left) { // test\r\n        return left.val == 1;\r\n    }\r\n};\r\n\r\nstruct equ_mi2 { // test if Movable_ints are equal\r\n    bool operator()(const Movable_int& left,\r\n        const Movable_int& right) { // test\r\n        return left.val == right.val;\r\n    }\r\n};\r\n\r\nstruct lt_mi2 { // test if Movable_ints are ordered\r\n    bool operator()(const Movable_int& left,\r\n        const Movable_int& right) { // test\r\n        return left.val < right.val;\r\n    }\r\n};\r\n\r\nstruct gt_mi2 { // test if Movable_ints are reverse ordered\r\n    bool operator()(const Movable_int& left,\r\n        const Movable_int& right) { // test\r\n        return right.val < left.val;\r\n    }\r\n};\r\n\r\nvoid test_mutate(char* first, char* last, char* dest) { // test mutating template functions\r\n    char array[5] = {\"xxxx\"};\r\n\r\n    CSTD strcpy(first, \"abcdefg\");\r\n    CSTD strcpy(dest, first);\r\n    (void) STD remove(first, last, 'c');\r\n    CHECK_STR(first, \"abdefgg\");\r\n    (void) STD remove_if(first, last, STD bind2nd(equf, 'd'));\r\n    CHECK_STR(first, \"abefggg\");\r\n    STD remove_copy(first, last, dest, 'e');\r\n    CHECK_STR(dest, \"abfgggg\");\r\n    STD remove_copy_if(first, last, dest, STD bind2nd(equf, 'e'));\r\n    CHECK_STR(dest, \"abfgggg\");\r\n\r\n    STD remove_copy(first, first + 4, array, 'b');\r\n    CHECK_STR(array, \"aefx\");\r\n    STD remove_copy_if(first, first + 4, array, STD bind2nd(equf, 'a'));\r\n    CHECK_STR(array, \"befx\");\r\n\r\n    {\r\n        Movable_int mi1(1);\r\n        Movable_int mia1[3];\r\n        mia1[1].val = 1;\r\n        (void) STD remove(&mia1[0], &mia1[3], mi1);\r\n        CHECK_INT(mia1[0].val, 0);\r\n        CHECK_INT(mia1[1].val, 0);\r\n        CHECK_INT(mia1[2].val, -1);\r\n\r\n        Movable_int mia2[3];\r\n        mia2[1].val = 1;\r\n        (void) STD remove_if(&mia2[0], &mia2[3], equ_mi1());\r\n        CHECK_INT(mia2[0].val, 0);\r\n        CHECK_INT(mia2[1].val, 0);\r\n        CHECK_INT(mia2[2].val, -1);\r\n    }\r\n\r\n    (void) STD unique(dest, dest + 8);\r\n    CHECK_STR(dest, \"abfg\");\r\n    (void) STD unique(dest, dest + 5, lessf);\r\n    CHECK_STR(dest, \"a\");\r\n    STD unique_copy(first, last + 1, dest);\r\n    CHECK_STR(dest, \"abefg\");\r\n    STD unique_copy(first, last + 1, dest, equf);\r\n    CHECK_STR(dest, \"abefg\");\r\n\r\n    CSTD strcpy(first, \"aabbbcc\");\r\n    CSTD strcpy(array, \"xxxx\");\r\n    STD unique_copy(first, last, array);\r\n    CHECK_STR(array, \"abcx\");\r\n    CSTD strcpy(array, \"xxxx\");\r\n    STD unique_copy(first, last, array, equf);\r\n    CHECK_STR(array, \"abcx\");\r\n\r\n    {\r\n        Movable_int mi1(1);\r\n        Movable_int mia1[3];\r\n        mia1[2].val = 1;\r\n        (void) STD unique(&mia1[0], &mia1[3]);\r\n        CHECK_INT(mia1[0].val, 0);\r\n        CHECK_INT(mia1[1].val, 1);\r\n        CHECK_INT(mia1[2].val, -1);\r\n\r\n        Movable_int mia2[3];\r\n        mia2[2].val = 1;\r\n        (void) STD unique(&mia2[0], &mia2[3], equ_mi2());\r\n        CHECK_INT(mia2[0].val, 0);\r\n        CHECK_INT(mia2[1].val, 1);\r\n        CHECK_INT(mia2[2].val, -1);\r\n    }\r\n\r\n    CSTD strcpy(first, \"abefggg\");\r\n    STD reverse(first, last);\r\n    CHECK_STR(first, \"gggfeba\");\r\n    STD reverse_copy(first, last, dest);\r\n    CHECK_STR(dest, \"abefggg\");\r\n    STD rotate(first, first + 2, last);\r\n    CHECK_STR(first, \"gfebagg\");\r\n    STD rotate_copy(first, first + 2, last, dest);\r\n    CHECK_STR(dest, \"ebagggf\");\r\n\r\n    CSTD strcpy(array, \"xxxx\");\r\n    STD reverse_copy(first, first + 4, array);\r\n    CHECK_STR(array, \"befg\");\r\n    CSTD strcpy(array, \"xxxx\");\r\n    STD rotate_copy(first, first + 2, first + 4, array);\r\n    CHECK_STR(array, \"ebgf\");\r\n\r\n    STD random_shuffle(first, last);\r\n\r\n    STD mt19937 mt;\r\n    auto rng_func = [&mt](CSTD size_t nmax) { // return random value in [0, nmax)\r\n        STD uniform_int_distribution<CSTD size_t> dist{0, nmax - 1};\r\n        return dist(mt);\r\n    };\r\n    STD random_shuffle(first, last, rng_func);\r\n\r\n    rand_gen urng;\r\n    STD shuffle(first, last, urng);\r\n\r\n    {\r\n        Movable_int mi1(1);\r\n        Movable_int mia1[3];\r\n        mia1[0].val = 0;\r\n        mia1[1].val = 1;\r\n        mia1[2].val = 2;\r\n        STD reverse(&mia1[0], &mia1[3]);\r\n        CHECK_INT(mia1[0].val, 2);\r\n        CHECK_INT(mia1[1].val, 1);\r\n        CHECK_INT(mia1[2].val, 0);\r\n\r\n        Movable_int mia2[3];\r\n        mia2[0].val = 0;\r\n        mia2[1].val = 1;\r\n        mia2[2].val = 2;\r\n        STD rotate(&mia2[0], &mia2[1], &mia2[3]);\r\n        CHECK_INT(mia2[0].val, 1);\r\n        CHECK_INT(mia2[1].val, 2);\r\n        CHECK_INT(mia2[2].val, 0);\r\n    }\r\n}\r\n\r\nbool cmp_caseless(char c1, char c2) { // compare as lowercase\r\n    return CSTD tolower(c1) < CSTD tolower(c2);\r\n}\r\n\r\nvoid test_order(char* first, char* last, char* dest) { // test ordering template functions\r\n    STD greater<char> greatf;\r\n\r\n    CSTD strcpy(first, \"gfedcba\");\r\n    STD stable_partition(first, last, STD bind2nd(lessf, 'd'));\r\n    CHECK_STR(first, \"cbagfed\");\r\n    CHECK_PTR(STD partition(first, last, STD bind2nd(equf, 'd')), first + 1);\r\n    STD sort(first, last);\r\n    CHECK_STR(first, \"abcdefg\");\r\n    STD sort(first, last, greatf);\r\n    CHECK_STR(first, \"gfedcba\");\r\n\r\n    {\r\n        CSTD strcpy(first, \"gfedcba\");\r\n        STD pair<char*, char*> ans = STD partition_copy(first, last, dest, dest + 3, STD bind2nd(lessf, 'd'));\r\n        CHECK_PTR(ans.first, dest + 3);\r\n        CHECK_PTR(ans.second, dest + 7);\r\n        CHECK_STR(dest, \"cbagfed\");\r\n\r\n        char array1[5] = {\"xxxx\"};\r\n        char array2[5] = {\"xxxx\"};\r\n        ans            = STD partition_copy(first, last, &array1[0], array2, STD bind2nd(lessf, 'd'));\r\n        ans            = STD partition_copy(first, last, array1, &array2[0], STD bind2nd(lessf, 'd'));\r\n        ans            = STD partition_copy(first, last, array1, array2, STD bind2nd(lessf, 'd'));\r\n        CHECK_PTR(ans.first, &array1[3]);\r\n        CHECK_PTR(ans.second, &array2[4]);\r\n        CHECK_STR(array1, \"cbax\");\r\n        CHECK_STR(array2, \"gfed\");\r\n\r\n        CHECK(!STD is_partitioned(first, last, STD bind2nd(lessf, 'd')));\r\n        CHECK(STD is_partitioned(dest, dest + 7, STD bind2nd(lessf, 'd')));\r\n        CHECK_PTR(STD partition_point(dest, dest + 7, STD bind2nd(lessf, 'd')), dest + 3);\r\n    }\r\n\r\n    {\r\n        Movable_int mi1(1);\r\n        Movable_int mia1[3];\r\n        mia1[1].val = 1;\r\n        STD stable_partition(&mia1[0], &mia1[3], equ_mi1());\r\n        CHECK_INT(mia1[0].val, 1);\r\n        CHECK_INT(mia1[1].val, 0);\r\n        CHECK_INT(mia1[2].val, 0);\r\n        STD partition(&mia1[0], &mia1[3], equ_mi1());\r\n        CHECK_INT(mia1[0].val, 1);\r\n        CHECK_INT(mia1[1].val, 0);\r\n        CHECK_INT(mia1[2].val, 0);\r\n\r\n        Movable_int mia2[3];\r\n        mia2[0].val = 1;\r\n        mia2[1].val = 0;\r\n        mia2[2].val = 2;\r\n        STD sort(&mia2[0], &mia2[3]);\r\n        CHECK_INT(mia2[0].val, 0);\r\n        CHECK_INT(mia2[1].val, 1);\r\n        CHECK_INT(mia2[2].val, 2);\r\n\r\n        STD sort(&mia2[0], &mia2[3], gt_mi2());\r\n        CHECK_INT(mia2[0].val, 2);\r\n        CHECK_INT(mia2[1].val, 1);\r\n        CHECK_INT(mia2[2].val, 0);\r\n    }\r\n\r\n    CSTD strcpy(first, \"gfedcba\");\r\n    STD partial_sort(first, first + 2, last);\r\n    CHECK_INT(first[0], 'a');\r\n    CHECK_INT(first[1], 'b');\r\n    STD partial_sort(first, first + 2, last, greatf);\r\n    CHECK_INT(first[0], 'g');\r\n    CHECK_INT(first[1], 'f');\r\n    STD stable_sort(first, last);\r\n    CHECK_STR(first, \"abcdefg\");\r\n    STD rotate(first, first + 2, last);\r\n    STD inplace_merge(first, last - 2, last);\r\n    CHECK_STR(first, \"abcdefg\");\r\n    STD rotate(first, first + 2, last);\r\n    STD inplace_merge(first, last - 2, last, lessf);\r\n    CHECK_STR(first, \"abcdefg\");\r\n\r\n    {\r\n        Movable_int mi1(1);\r\n        Movable_int mia1[3];\r\n        mia1[0].val = 2;\r\n        mia1[1].val = 1;\r\n        mia1[2].val = 0;\r\n        STD partial_sort(&mia1[0], &mia1[2], &mia1[3]);\r\n        CHECK_INT(mia1[0].val, 0);\r\n        CHECK_INT(mia1[1].val, 1);\r\n        CHECK_INT(mia1[2].val, 2);\r\n        STD partial_sort(&mia1[0], &mia1[2], &mia1[3], gt_mi2());\r\n        CHECK_INT(mia1[0].val, 2);\r\n        CHECK_INT(mia1[1].val, 1);\r\n        CHECK_INT(mia1[2].val, 0);\r\n\r\n        Movable_int mia2[3];\r\n        mia2[0].val = 1;\r\n        mia2[1].val = 0;\r\n        mia2[2].val = 2;\r\n        STD stable_sort(&mia2[0], &mia2[3]);\r\n        CHECK_INT(mia2[0].val, 0);\r\n        CHECK_INT(mia2[1].val, 1);\r\n        CHECK_INT(mia2[2].val, 2);\r\n\r\n        STD stable_sort(&mia2[0], &mia2[3], gt_mi2());\r\n        CHECK_INT(mia2[0].val, 2);\r\n        CHECK_INT(mia2[1].val, 1);\r\n        CHECK_INT(mia2[2].val, 0);\r\n    }\r\n\r\n    {\r\n        CSTD strcpy(dest, \"tuvwxyz\");\r\n        STD partial_sort_copy(first, last, dest, dest + 1);\r\n        CHECK_STR(dest, \"auvwxyz\");\r\n        STD partial_sort_copy(first, last, dest, dest + 1, greatf);\r\n        CHECK_STR(dest, \"guvwxyz\");\r\n        STD nth_element(first, first + 2, last, greatf);\r\n        CHECK_INT(first[2], 'e');\r\n        STD nth_element(first, first + 2, last);\r\n        CHECK_INT(first[2], 'c');\r\n\r\n        CSTD strcpy(first, \"dCcbBba\");\r\n        STD stable_sort(first, last, &cmp_caseless);\r\n        CHECK_STR(first, \"abBbCcd\");\r\n        STD stable_sort(first, last);\r\n        CHECK_STR(first, \"BCabbcd\");\r\n        STD merge(first + 2, last, first, first + 2, dest);\r\n        CHECK_STR(dest, \"BCabbcd\");\r\n        STD merge(first + 2, last, first, first + 2, dest, &cmp_caseless);\r\n        CHECK_STR(dest, \"abbBcCd\");\r\n\r\n        char array[5] = {\"xxxx\"};\r\n        STD merge(first + 2, first + 4, first, first + 2, array);\r\n        CHECK_STR(array, \"BCab\");\r\n        STD merge(first + 2, first + 4, first + 4, first + 6, array, &cmp_caseless);\r\n        CHECK_STR(array, \"abbc\");\r\n    }\r\n\r\n    {\r\n        Movable_int mi1(1);\r\n        Movable_int mia1[3];\r\n        mia1[0].val = 1;\r\n        mia1[1].val = 2;\r\n        mia1[2].val = 0;\r\n        STD nth_element(&mia1[0], &mia1[1], &mia1[3]);\r\n        CHECK_INT(mia1[1].val, 1);\r\n        STD nth_element(&mia1[0], &mia1[0], &mia1[3], gt_mi2());\r\n        CHECK_INT(mia1[0].val, 2);\r\n\r\n        Movable_int mia2[3];\r\n        mia2[0].val = 1;\r\n        mia2[1].val = 0;\r\n        mia2[2].val = 2;\r\n        STD inplace_merge(&mia2[0], &mia2[1], &mia2[3]);\r\n        CHECK_INT(mia2[0].val, 0);\r\n        CHECK_INT(mia2[1].val, 1);\r\n        CHECK_INT(mia2[2].val, 2);\r\n\r\n        mia2[0].val = 1;\r\n        mia2[1].val = 0;\r\n        mia2[2].val = 2;\r\n        STD inplace_merge(&mia2[0], &mia2[2], &mia2[3], gt_mi2());\r\n        CHECK_INT(mia2[0].val, 2);\r\n        CHECK_INT(mia2[1].val, 1);\r\n        CHECK_INT(mia2[2].val, 0);\r\n    }\r\n\r\n    STD sort(first, last);\r\n    CHECK(STD is_sorted(first, last));\r\n    CHECK(STD is_sorted_until(first, last) == last);\r\n    STD sort(first, last, lessf);\r\n    CHECK(STD is_sorted(first, last, lessf));\r\n    CHECK(STD is_sorted_until(first, last, lessf) == last);\r\n}\r\n\r\nvoid test_search(char* first, char* last) { // test searching template functions\r\n    char val = 'c';\r\n\r\n    CSTD strcpy(first, \"abcccfg\");\r\n    CHECK_PTR(STD lower_bound(first, last, val), first + 2);\r\n    CHECK_PTR(STD lower_bound(first, last, val, lessf), first + 2);\r\n    CHECK_PTR(STD upper_bound(first, last, val), first + 5);\r\n    CHECK_PTR(STD upper_bound(first, last, val, lessf), first + 5);\r\n    CHECK_PTR(STD equal_range(first, last, val).first, first + 2);\r\n    CHECK_PTR(STD equal_range(first, last, val, lessf).second, first + 5);\r\n    CHECK(STD binary_search(first, last, val));\r\n    CHECK(STD binary_search(first, last, val, lessf));\r\n    CHECK(STD includes(first, last, first + 3, last));\r\n    CHECK(STD includes(first, last, first + 3, last, lessf));\r\n}\r\n\r\nvoid test_set(char* first, char* last, char* dest) { // test set template functions\r\n    CSTD strcpy(first, \"abccefg\");\r\n    CSTD strcpy(dest, first);\r\n    STD set_union(first, first + 3, first + 3, last, dest);\r\n    CHECK_STR(dest, \"abcefgg\");\r\n    STD set_union(first, first + 3, first + 3, last, dest, lessf);\r\n    CHECK_STR(dest, \"abcefgg\");\r\n    STD set_intersection(first, first + 3, first + 3, last, dest);\r\n    CHECK_STR(dest, \"cbcefgg\");\r\n    STD set_intersection(first, first + 3, first + 3, last, dest, lessf);\r\n    CHECK_STR(dest, \"cbcefgg\");\r\n    STD set_difference(first, first + 3, first + 3, last, dest);\r\n    CHECK_STR(dest, \"abcefgg\");\r\n    STD set_difference(first, first + 3, first + 3, last, dest, lessf);\r\n    CHECK_STR(dest, \"abcefgg\");\r\n    STD set_symmetric_difference(first, first + 3, first + 3, last, dest);\r\n    CHECK_STR(dest, \"abefggg\");\r\n    STD set_symmetric_difference(first, first + 3, first + 3, last, dest, lessf);\r\n    CHECK_STR(dest, \"abefggg\");\r\n\r\n    CSTD strcpy(first, \"abbc\");\r\n    char array[5] = {\"xxxx\"};\r\n    STD set_union(first, first + 2, first + 2, first + 4, array);\r\n    CHECK_STR(array, \"abcx\");\r\n    STD set_union(first, first + 2, first + 2, first + 4, array, lessf);\r\n    CHECK_STR(array, \"abcx\");\r\n    CSTD strcpy(array, \"xxxx\");\r\n    STD set_intersection(first, first + 2, first + 2, first + 4, array);\r\n    CHECK_STR(array, \"bxxx\");\r\n    STD set_intersection(first, first + 2, first + 2, first + 4, array, lessf);\r\n    CHECK_STR(array, \"bxxx\");\r\n    CSTD strcpy(array, \"xxxx\");\r\n    STD set_difference(first, first + 2, first + 2, first + 4, array);\r\n    CHECK_STR(array, \"axxx\");\r\n    STD set_difference(first, first + 2, first + 2, first + 4, array, lessf);\r\n    CHECK_STR(array, \"axxx\");\r\n    CSTD strcpy(array, \"xxxx\");\r\n    STD set_symmetric_difference(first, first + 2, first + 2, first + 4, array);\r\n    CHECK_STR(array, \"acxx\");\r\n    STD set_symmetric_difference(first, first + 2, first + 2, first + 4, array, lessf);\r\n    CHECK_STR(array, \"acxx\");\r\n}\r\n\r\nvoid test_heap(char* first, char* last) { // test heap template functions\r\n    CSTD strcpy(first, \"abccefg\");\r\n    STD make_heap(first, last);\r\n    CHECK_INT(first[0], 'g');\r\n    STD make_heap(first, last, lessf);\r\n    CHECK_INT(first[0], 'g');\r\n    STD pop_heap(first, last);\r\n    CHECK_INT(last[-1], 'g');\r\n    CHECK_INT(first[0], 'f');\r\n    STD pop_heap(first, last - 1, lessf);\r\n    CHECK_INT(last[-2], 'f');\r\n    CHECK_INT(first[0], 'e');\r\n\r\n    STD push_heap(first, last - 1);\r\n    CHECK_INT(first[0], 'f');\r\n    STD push_heap(first, last, lessf);\r\n    CHECK_INT(first[0], 'g');\r\n    STD sort_heap(first, last);\r\n    CHECK_STR(first, \"abccefg\");\r\n    STD make_heap(first, last, lessf);\r\n    STD sort_heap(first, last, lessf);\r\n    CHECK_STR(first, \"abccefg\");\r\n\r\n    {\r\n        Movable_int mi1(1);\r\n        Movable_int mia1[3];\r\n        mia1[0].val = 1;\r\n        mia1[1].val = 2;\r\n        mia1[2].val = 0;\r\n        STD make_heap(&mia1[0], &mia1[3]);\r\n        CHECK_INT(mia1[0].val, 2);\r\n        STD make_heap(&mia1[0], &mia1[3], lt_mi2());\r\n        CHECK_INT(mia1[0], 2);\r\n        STD pop_heap(&mia1[0], &mia1[3]);\r\n        CHECK_INT(mia1[2].val, 2);\r\n        CHECK_INT(mia1[0].val, 1);\r\n        STD pop_heap(&mia1[0], &mia1[2], lt_mi2());\r\n        CHECK_INT(mia1[1].val, 1);\r\n        CHECK_INT(mia1[0].val, 0);\r\n\r\n        STD push_heap(&mia1[0], &mia1[2]);\r\n        CHECK_INT(mia1[0], 1);\r\n        STD push_heap(&mia1[0], &mia1[3], lt_mi2());\r\n        CHECK_INT(mia1[0], 2);\r\n        STD sort_heap(&mia1[0], &mia1[3]);\r\n        CHECK_INT(mia1[0], 0);\r\n        CHECK_INT(mia1[1], 1);\r\n        CHECK_INT(mia1[2], 2);\r\n        STD make_heap(&mia1[0], &mia1[3], lt_mi2());\r\n        STD sort_heap(&mia1[0], &mia1[3], lt_mi2());\r\n        CHECK_INT(mia1[0], 0);\r\n        CHECK_INT(mia1[1], 1);\r\n        CHECK_INT(mia1[2], 2);\r\n    }\r\n\r\n    STD make_heap(first, last);\r\n    CHECK(STD is_heap(first, last));\r\n    CHECK(STD is_heap_until(first, last) == last);\r\n    STD make_heap(first, last, lessf);\r\n    CHECK(STD is_heap(first, last, lessf));\r\n    CHECK(STD is_heap_until(first, last, lessf) == last);\r\n}\r\n\r\nvoid test_permute(char* first, char* last) { // test permuting template functions\r\n    CSTD strcpy(first, \"abcdefg\");\r\n    STD next_permutation(first, last);\r\n    CHECK_STR(first, \"abcdegf\");\r\n    STD next_permutation(first, last, lessf);\r\n    CHECK_STR(first, \"abcdfeg\");\r\n    STD prev_permutation(first, last);\r\n    CHECK_STR(first, \"abcdegf\");\r\n    STD prev_permutation(first, last, lessf);\r\n    CHECK_STR(first, \"abcdefg\");\r\n}\r\n\r\nvoid test_main() { // test basic workings of algorithms\r\n    char buf[]  = \"abccefg\";\r\n    char dest[] = \"1234567\";\r\n    char *first = buf, *last = buf + 7;\r\n\r\n    test_single(first, last);\r\n    test_find(first, last);\r\n    test_generate(first, last, dest);\r\n    test_copy(first, last, dest);\r\n    test_mutate(first, last, dest);\r\n    test_order(first, last, dest);\r\n    test_search(first, last);\r\n    test_set(first, last, dest);\r\n    test_heap(first, last);\r\n    test_permute(first, last);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/array/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <array> STD header\r\n#define TEST_NAME \"<array>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <array>\r\n#include <stdexcept>\r\n\r\nvoid test_main() { // test header <array>\r\n    STD array<int, 0> a0 = {};\r\n\r\n    const STD array<int, 0> a0c = {};\r\n\r\n    CHECK_INT(a0.size(), 0);\r\n    CHECK_INT(a0.max_size(), 0);\r\n    CHECK(a0.empty());\r\n\r\n    STD array<int, 0> a0a;\r\n    a0.swap(a0a);\r\n    CHECK(a0.empty() && a0a.empty());\r\n    CHECK_INT(a0.end() - a0.begin(), 0);\r\n    CHECK_INT(a0c.end() - a0c.begin(), 0);\r\n    CHECK_INT(a0.rend() - a0.rbegin(), 0);\r\n    CHECK_INT(a0c.rend() - a0c.rbegin(), 0);\r\n\r\n    { // check const iterators generators\r\n        CHECK_INT(a0.cend() - a0.cbegin(), 0);\r\n        CHECK_INT(a0c.cend() - a0c.cbegin(), 0);\r\n        CHECK_INT(a0.crend() - a0.crbegin(), 0);\r\n        CHECK_INT(a0c.crend() - a0c.crbegin(), 0);\r\n        a0.fill(1);\r\n        CHECK(a0.empty());\r\n    }\r\n\r\n#if NO_EXCEPTIONS\r\n#else // NO_EXCEPTIONS\r\n    bool ok;\r\n\r\n    ok = false;\r\n    try { // test exception for invalid index\r\n        (void) a0.at(0);\r\n    } catch (const STD out_of_range&) { // handle invalid index\r\n        ok = true;\r\n    }\r\n    CHECK_MSG(\"'array<int,0>::at' throws range_error\", ok);\r\n\r\n    ok = false;\r\n    try { // test exception for invalid index\r\n        (void) a0c.at(0);\r\n    } catch (const STD out_of_range&) { // handle invalid index\r\n        ok = true;\r\n    }\r\n    CHECK_MSG(\"'array<int,0>::at const' throws range_error\", ok);\r\n#endif // NO_EXCEPTIONS\r\n\r\n    typedef STD array<int, 10> arr10;\r\n    arr10 a1;\r\n    const arr10 a1c = {{0}};\r\n    CHECK_INT(a1.size(), 10);\r\n    CHECK_INT(a1.max_size(), 10);\r\n    CHECK_INT(a1c.size(), 10);\r\n    CHECK(!a1.empty());\r\n    CHECK(!a1c.empty());\r\n\r\n    arr10 a2 = {{1}};\r\n    CHECK_INT(a2.size(), 10);\r\n    CHECK_INT(a2.at(0), 1);\r\n    CHECK_INT(a2[0], 1);\r\n    CHECK_INT(a2.data()[0], 1);\r\n    CHECK_INT(a2.at(1), 0);\r\n    CHECK_INT(a2[1], 0);\r\n    CHECK_INT(a2.data()[1], 0);\r\n\r\n    arr10 a2a = {{2}};\r\n    a2a.swap(a2);\r\n    CHECK_INT(a2[0], 2);\r\n    CHECK_INT(a2a[0], 1);\r\n\r\n#if NO_EXCEPTIONS\r\n#else // NO_EXCEPTIONS\r\n    ok = false;\r\n    try { // test exception for invalid index\r\n        (void) a1.at(11);\r\n    } catch (const STD out_of_range&) { // handle invalid index\r\n        ok = true;\r\n    }\r\n    CHECK_MSG(\"'array<int,N>::at' throws range_error\", ok);\r\n\r\n    ok = false;\r\n    try { // test exception for invalid index\r\n        (void) a1c.at(11);\r\n    } catch (const STD out_of_range&) { // handle invalid index\r\n        ok = true;\r\n    }\r\n    CHECK_MSG(\"'array<int,N>::at const' throws range_error\", ok);\r\n#endif // NO_EXCEPTIONS\r\n\r\n    const arr10 a10 = {{9, 8, 7, 6, 5, 4, 3, 2, 1, 0}};\r\n    CHECK_INT(a10.size(), 10);\r\n    CHECK_INT(a10.at(0), 9);\r\n    CHECK_INT(a10[0], 9);\r\n    CHECK_INT(a10[9], 0);\r\n\r\n    a1 = a10;\r\n    CHECK_INT(a1.size(), 10);\r\n    CHECK_INT(a1.front(), 9);\r\n    a1.front() = 8;\r\n    CHECK_INT(a1.front(), 8);\r\n    CHECK_INT(a1.back(), 0);\r\n    a1.back() = 2;\r\n    CHECK_INT(a1.back(), 2);\r\n    CHECK_INT(a1.end() - a1.begin(), 10);\r\n    CHECK_INT(a1c.end() - a1c.begin(), 10);\r\n    CHECK_INT(a10.end() - a10.begin(), 10);\r\n\r\n    arr10 a3(a10);\r\n    CHECK(a10 == a3);\r\n    CHECK(a3 != a2);\r\n    CHECK(a2 < a3);\r\n    CHECK(a2 <= a3);\r\n    CHECK(a3 > a2);\r\n    CHECK(a3 >= a2);\r\n\r\n    a1.fill(4);\r\n    CHECK_INT(a1.front(), 4);\r\n    CHECK_INT(a1.back(), 4);\r\n\r\n    typedef STD array<int, 3> arr3;\r\n\r\n    CHECK_INT(STD tuple_size<arr3>::value, 3);\r\n\r\n    typedef STD tuple_element<0, arr3>::type tp0;\r\n    typedef STD tuple_element<1, arr3>::type tp1;\r\n    typedef STD tuple_element<2, arr3>::type tp2;\r\n    CHECK_TYPE(tp0, int);\r\n    CHECK_TYPE(tp1, int);\r\n    CHECK_TYPE(tp2, int);\r\n\r\n    arr3 arr        = {{0, 1, 2}};\r\n    const arr3 carr = {{3, 4, 5}};\r\n    CHECK_INT(STD get<0>(arr), 0);\r\n    CHECK_INT(STD get<1>(arr), 1);\r\n    CHECK_INT(STD get<2>(arr), 2);\r\n    CHECK_INT(STD get<0>(carr), 3);\r\n    CHECK_INT(STD get<1>(carr), 4);\r\n    CHECK_INT(STD get<2>(carr), 5);\r\n\r\n    {\r\n        STD array<Movable_int, 3> a20;\r\n\r\n        Movable_int mi(STD get<0>(STD move(a20)));\r\n        CHECK_INT(mi.val, 0);\r\n        CHECK_INT(a20[0].val, -1);\r\n\r\n        STD array<Copyable_int, 3> a22, a23(a22);\r\n        CHECK(a22 == a23);\r\n        a22 = a23;\r\n        CHECK(a22 == a23);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/atomic/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\..\\env_minus_pure.lst\r\n"
  },
  {
    "path": "tests/tr1/tests/atomic/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <atomic> C++11 header\r\n#define TEST_NAME \"<atomic>\"\r\n\r\n#define _SILENCE_CXX20_ATOMIC_INIT_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include <atomic>\r\n#include <limits>\r\n#include <memory>\r\n#include <type_traits>\r\n\r\n// PROPERTIES OF ATOMIC TYPES\r\ntemplate <class Atom>\r\nstruct remove_pointer;\r\n\r\ntemplate <class Ty>\r\nstruct remove_pointer<Ty*> { // struct to define pointer type that has same increment as Ty *\r\n    typedef Ty base_type;\r\n};\r\n\r\nint get_lock_free_for_type(char*) { // return lock-free flag for type char\r\n    return ATOMIC_CHAR_LOCK_FREE;\r\n}\r\n\r\nint get_lock_free_for_type(signed char*) { // return lock-free flag for type signed char\r\n    return ATOMIC_CHAR_LOCK_FREE;\r\n}\r\n\r\nint get_lock_free_for_type(unsigned char*) { // return lock-free flag for type unsigned char\r\n    return ATOMIC_CHAR_LOCK_FREE;\r\n}\r\n\r\nint get_lock_free_for_type(char16_t*) { // return lock-free flag for type char16_t\r\n    return ATOMIC_CHAR16_T_LOCK_FREE;\r\n}\r\n\r\nint get_lock_free_for_type(char32_t*) { // return lock-free flag for type char32_t\r\n    return ATOMIC_CHAR32_T_LOCK_FREE;\r\n}\r\n\r\nint get_lock_free_for_type(wchar_t*) { // return lock-free flag for type wchar_t\r\n    return ATOMIC_WCHAR_T_LOCK_FREE;\r\n}\r\n\r\nint get_lock_free_for_type(short*) { // return lock-free flag for type short\r\n    return ATOMIC_SHORT_LOCK_FREE;\r\n}\r\n\r\nint get_lock_free_for_type(unsigned short*) { // return lock-free flag for type unsigned short\r\n    return ATOMIC_SHORT_LOCK_FREE;\r\n}\r\n\r\nint get_lock_free_for_type(int*) { // return lock-free flag for type int\r\n    return ATOMIC_INT_LOCK_FREE;\r\n}\r\n\r\nint get_lock_free_for_type(unsigned int*) { // return lock-free flag for type unsigned int\r\n    return ATOMIC_INT_LOCK_FREE;\r\n}\r\n\r\nint get_lock_free_for_type(long*) { // return lock-free flag for type long\r\n    return ATOMIC_LONG_LOCK_FREE;\r\n}\r\n\r\nint get_lock_free_for_type(unsigned long*) { // return lock-free flag for type unsigned long\r\n    return ATOMIC_LONG_LOCK_FREE;\r\n}\r\n\r\nint get_lock_free_for_type(long long*) { // return lock-free flag for type long long\r\n    return ATOMIC_LLONG_LOCK_FREE;\r\n}\r\n\r\nint get_lock_free_for_type(unsigned long long*) { // return lock-free flag for type unsigned long long\r\n    return ATOMIC_LLONG_LOCK_FREE;\r\n}\r\n\r\ntemplate <class Ty>\r\nint get_lock_free_for_type(Ty*) { // return lock-free flag for type Ty\r\n    return 1;\r\n}\r\n\r\n// TEMPLATE CLASS n_bytes\r\ntemplate <CSTD size_t sz>\r\nstruct n_bytes { // struct for testing atomic<UDT>\r\n    unsigned char data[sz];\r\n};\r\n\r\ntemplate <CSTD size_t sz>\r\nbool operator==(const n_bytes<sz>& left, const n_bytes<sz>& right) { // compare for equality\r\n    return memcmp(&left.data, &right.data, sz) == 0;\r\n}\r\n\r\n// INITIALIZATION\r\ntemplate <class Mtype, class Atom, bool use_atomic_init>\r\nstruct initializer_helper;\r\n\r\ntemplate <class Mtype, class Atom>\r\nstruct initializer_helper<Mtype, Atom, true> { // initialize C-style types\r\n    static void init(Atom& atom, Mtype value) {\r\n        STD atomic_init(&atom, value);\r\n    }\r\n};\r\n\r\ntemplate <class Mtype, class Atom>\r\nstruct initializer_helper<Mtype, Atom, false> { // initialize C++-style types\r\n    static void init(Atom& atom, Mtype value) {\r\n        Atom temp(value);\r\n        memcpy((void*) &atom, (const void*) &temp, sizeof(atom));\r\n    }\r\n};\r\n\r\ntemplate <class Mtype, class Atom>\r\nstruct initializer : initializer_helper<Mtype, Atom,\r\n                         STD is_integral<Mtype>::value> { // atomics managing integral types are always C-style types\r\n};\r\n\r\ntemplate <class Ty>\r\nstruct initializer<Ty*, STD atomic<Ty*>>\r\n    : initializer_helper<Ty*, STD atomic<Ty*>, true> { // atomic<Ty *> is a C-style type\r\n};\r\n\r\ntemplate <class Ty>\r\nstruct initializer<Ty*, volatile STD atomic<Ty*>>\r\n    : initializer_helper<Ty*, volatile STD atomic<Ty*>, true> { // volatile atomic<Ty *> is a C-style type\r\n};\r\n\r\n// ENUM memory_order\r\nstatic bool check_memory_order(STD memory_order) { // used to test that memory_order is defined\r\n    return true;\r\n}\r\n\r\nstatic void test_memory_order_enum() { // test that all required values exist and are distinct\r\n    CHECK_INT(check_memory_order(STD memory_order_relaxed), true);\r\n    CHECK_INT(check_memory_order(STD memory_order_consume), true);\r\n    CHECK_INT(check_memory_order(STD memory_order_acquire), true);\r\n    CHECK_INT(check_memory_order(STD memory_order_release), true);\r\n    CHECK_INT(check_memory_order(STD memory_order_acq_rel), true);\r\n    CHECK_INT(check_memory_order(STD memory_order_seq_cst), true);\r\n    CHECK_INT(STD memory_order_relaxed != STD memory_order_consume, true);\r\n    CHECK_INT(STD memory_order_relaxed != STD memory_order_acquire, true);\r\n    CHECK_INT(STD memory_order_relaxed != STD memory_order_release, true);\r\n    CHECK_INT(STD memory_order_relaxed != STD memory_order_acq_rel, true);\r\n    CHECK_INT(STD memory_order_relaxed != STD memory_order_seq_cst, true);\r\n    CHECK_INT(STD memory_order_consume != STD memory_order_acquire, true);\r\n    CHECK_INT(STD memory_order_consume != STD memory_order_release, true);\r\n    CHECK_INT(STD memory_order_consume != STD memory_order_acq_rel, true);\r\n    CHECK_INT(STD memory_order_consume != STD memory_order_seq_cst, true);\r\n    CHECK_INT(STD memory_order_acquire != STD memory_order_release, true);\r\n    CHECK_INT(STD memory_order_acquire != STD memory_order_acq_rel, true);\r\n    CHECK_INT(STD memory_order_acquire != STD memory_order_seq_cst, true);\r\n    CHECK_INT(STD memory_order_release != STD memory_order_acq_rel, true);\r\n    CHECK_INT(STD memory_order_release != STD memory_order_seq_cst, true);\r\n    CHECK_INT(STD memory_order_acq_rel != STD memory_order_seq_cst, true);\r\n}\r\n\r\nstatic void test_kill_dependency() { // test kill_dependency template function\r\n    CHECK_TYPE(int, STD kill_dependency(1));\r\n    CHECK_INT(1, STD kill_dependency(1));\r\n    CHECK_INT(-1, STD kill_dependency(-1));\r\n    CHECK_TYPE(double, STD kill_dependency(1.0));\r\n    CHECK_INT(1.0, STD kill_dependency(1.0));\r\n    CHECK_INT(-1.0, STD kill_dependency(-1.0));\r\n}\r\n\r\n// LOCK-FREE PROPERTY\r\n#define CHECK_LOCK_FREE(value)                    \\\r\n    if (!terse)                                   \\\r\n        printf(\"%s reports %d\\n\", #value, value); \\\r\n    CHECK_INT(value == 2, 1)\r\n\r\nstatic void test_lock_free_property() { // test that the lock-free property macros have appropriate values\r\n    CHECK_LOCK_FREE(ATOMIC_BOOL_LOCK_FREE);\r\n    CHECK_LOCK_FREE(ATOMIC_CHAR_LOCK_FREE);\r\n    CHECK_LOCK_FREE(ATOMIC_CHAR16_T_LOCK_FREE);\r\n    CHECK_LOCK_FREE(ATOMIC_CHAR32_T_LOCK_FREE);\r\n    CHECK_LOCK_FREE(ATOMIC_WCHAR_T_LOCK_FREE);\r\n    CHECK_LOCK_FREE(ATOMIC_SHORT_LOCK_FREE);\r\n    CHECK_LOCK_FREE(ATOMIC_INT_LOCK_FREE);\r\n    CHECK_LOCK_FREE(ATOMIC_LONG_LOCK_FREE);\r\n    CHECK_LOCK_FREE(ATOMIC_LLONG_LOCK_FREE);\r\n    CHECK_LOCK_FREE(ATOMIC_POINTER_LOCK_FREE);\r\n}\r\n\r\n// TEST SEMANTICS OF atomic_flag\r\nstatic void test_atomic_flag() { // test properties of atomic_flag\r\n    STD atomic_flag flag = ATOMIC_FLAG_INIT;\r\n    bool value           = flag.test_and_set();\r\n    CHECK_INT(value, false);\r\n    value = flag.test_and_set(STD memory_order_acq_rel);\r\n    CHECK_INT(value, true);\r\n    flag.clear();\r\n    value = flag.test_and_set();\r\n    CHECK_INT(value, false);\r\n    flag.clear(STD memory_order_release);\r\n    value = flag.test_and_set();\r\n    CHECK_INT(value, false);\r\n\r\n    volatile STD atomic_flag vflag = ATOMIC_FLAG_INIT;\r\n    value                          = vflag.test_and_set();\r\n    CHECK_INT(value, false);\r\n    value = vflag.test_and_set(STD memory_order_release);\r\n    CHECK_INT(value, true);\r\n    vflag.clear();\r\n    value = vflag.test_and_set();\r\n    CHECK_INT(value, false);\r\n    flag.clear(STD memory_order_relaxed);\r\n    value = flag.test_and_set();\r\n    CHECK_INT(value, false);\r\n\r\n    value = STD atomic_flag_test_and_set(&flag);\r\n    CHECK_INT(value, true);\r\n    STD atomic_flag_clear(&flag);\r\n    value = STD atomic_flag_test_and_set_explicit(&flag, STD memory_order_relaxed);\r\n    CHECK_INT(value, false);\r\n    value = STD atomic_flag_test_and_set_explicit(&flag, STD memory_order_release);\r\n    CHECK_INT(value, true);\r\n    STD atomic_flag_clear_explicit(&flag, STD memory_order_release);\r\n    value = STD atomic_flag_test_and_set(&flag);\r\n    CHECK_INT(value, false);\r\n}\r\n\r\n// TEST SEMANTICS OF ATOMIC TYPES\r\ntemplate <class Mtype>\r\nstruct values {\r\n    static Mtype zero() {\r\n        return 0;\r\n    }\r\n    static Mtype not_zero() {\r\n        return STD numeric_limits<Mtype>::max();\r\n    }\r\n};\r\n\r\ntemplate <class Ty>\r\nstruct values<Ty*> {\r\n    static Ty* zero() {\r\n        return nullptr;\r\n    }\r\n    static Ty* not_zero() {\r\n        return (Ty*) (-1);\r\n    }\r\n};\r\n\r\ntemplate <CSTD size_t sz>\r\nstruct values<n_bytes<sz>> {\r\n    static n_bytes<sz> zero() {\r\n        n_bytes<sz> tmp = {{0}};\r\n        return tmp;\r\n    }\r\n    static n_bytes<sz> not_zero() {\r\n        n_bytes<sz> tmp = {{static_cast<unsigned char>(-1)}};\r\n        return tmp;\r\n    }\r\n};\r\n\r\ntemplate <class Mtype, class Atom>\r\nvoid test_atomic_aggregate_initialization() { // test aggregate initialization\r\n    Atom atom = ATOMIC_VAR_INIT(0);\r\n    CHECK_INT(STD atomic_load(&atom) == values<Mtype>::zero(), true);\r\n}\r\n\r\ntemplate <class Mtype, class Atom>\r\nvoid test_atomic_ctor_initialization() { // test construction from object of managed type\r\n                                         // note: constructor initialization is not enabled for\r\n                                         // atomic_integral types if the compiler\r\n                                         // does not support =delete and =default\r\n    Mtype object{};\r\n    Atom atom(object);\r\n    CHECK_INT(atom.load() == object, true);\r\n}\r\n\r\ntemplate <class Mtype, class Atom>\r\nvoid test_atomic_core_nonmembers() { // test core non-member functions for all atomic types\r\n    Atom atom{};\r\n    const Atom& c_atom = atom;\r\n    const Mtype zero   = values<Mtype>::zero();\r\n    const Mtype other  = values<Mtype>::not_zero();\r\n\r\n    // initialization\r\n    STD atomic_init(&atom, other);\r\n    CHECK_INT(STD atomic_load(&atom) == other, true);\r\n    STD atomic_init(&atom, zero);\r\n    CHECK_INT(STD atomic_load(&atom) == zero, true);\r\n\r\n    // atomic_is_lock_free\r\n    switch (get_lock_free_for_type((Mtype*) nullptr)) { // check that atomic_is_lock_free gives result consistent\r\n                                                        // with the corresponding macro\r\n    case 0:\r\n        CHECK_INT(STD atomic_is_lock_free(&c_atom), false);\r\n        break;\r\n    case 1:\r\n        CHECK_INT(STD atomic_is_lock_free(&c_atom) == false || STD atomic_is_lock_free(&c_atom) == true, true);\r\n        break;\r\n    case 2:\r\n        CHECK_INT(STD atomic_is_lock_free(&c_atom), true);\r\n        break;\r\n    }\r\n\r\n    // atomic_store/atomic_store_explicit\r\n    STD atomic_store(&atom, other);\r\n    CHECK_INT(STD atomic_load(&atom) == other, true);\r\n    STD atomic_store_explicit(&atom, zero, STD memory_order_relaxed);\r\n\r\n    // atomic_load/atomic_load_explicit\r\n    CHECK_INT(STD atomic_load(&c_atom) == zero, true);\r\n    STD atomic_store(&atom, other);\r\n    CHECK_INT(STD atomic_load(&c_atom) == other, true);\r\n    CHECK_INT(STD atomic_load_explicit(&c_atom, STD memory_order_relaxed) == other, true);\r\n    STD atomic_store(&atom, zero);\r\n    CHECK_INT(STD atomic_load_explicit(&c_atom, STD memory_order_seq_cst) == zero, true);\r\n\r\n    // atomic_exchange/atomic_exchange_explicit\r\n    CHECK_INT(STD atomic_exchange(&atom, other) == zero, true);\r\n    CHECK_INT(STD atomic_exchange(&atom, zero) == other, true);\r\n    CHECK_INT(STD atomic_exchange_explicit(&atom, other, STD memory_order_relaxed) == zero, true);\r\n    CHECK_INT(STD atomic_exchange_explicit(&atom, zero, STD memory_order_seq_cst) == other, true);\r\n\r\n    // atomic_compare_exchange_weak/atomic_compare_exchange_weak_explicit\r\n    Mtype value = zero;\r\n    STD atomic_store(&atom, zero);\r\n    CHECK_INT(STD atomic_compare_exchange_weak(&atom, &value, other) == true, true);\r\n    CHECK_INT(value == zero, true);\r\n    CHECK_INT(STD atomic_load(&atom) == other, true);\r\n    CHECK_INT(STD atomic_compare_exchange_weak(&atom, &value, zero), false);\r\n    CHECK_INT(value == other, true);\r\n    CHECK_INT(STD atomic_load(&atom) == other, true);\r\n\r\n    value = zero;\r\n    STD atomic_store(&atom, zero);\r\n    CHECK_INT(STD atomic_compare_exchange_weak_explicit(\r\n                  &atom, &value, other, STD memory_order_acq_rel, STD memory_order_relaxed),\r\n        true);\r\n    CHECK_INT(value == zero, true);\r\n    CHECK_INT(STD atomic_load(&atom) == other, true);\r\n    CHECK_INT(STD atomic_compare_exchange_weak_explicit(\r\n                  &atom, &value, zero, STD memory_order_seq_cst, STD memory_order_relaxed),\r\n        false);\r\n    CHECK_INT(value == other, true);\r\n    CHECK_INT(STD atomic_load(&atom) == other, true);\r\n\r\n    // atomic_compare_exchange_strong/atomic_compare_exchange_strong_explicit\r\n    value = zero;\r\n    STD atomic_store(&atom, zero);\r\n    CHECK_INT(STD atomic_compare_exchange_strong(&atom, &value, other), true);\r\n    CHECK_INT(value == zero, true);\r\n    CHECK_INT(STD atomic_load(&atom) == other, true);\r\n    CHECK_INT(STD atomic_compare_exchange_strong(&atom, &value, zero), false);\r\n    CHECK_INT(value == other, true);\r\n    CHECK_INT(STD atomic_load(&atom) == other, true);\r\n\r\n    value = zero;\r\n    STD atomic_store(&atom, zero);\r\n    CHECK_INT(STD atomic_compare_exchange_strong_explicit(\r\n                  &atom, &value, other, STD memory_order_acq_rel, STD memory_order_relaxed),\r\n        true);\r\n    CHECK_INT(value == zero, true);\r\n    CHECK_INT(STD atomic_load(&atom) == other, true);\r\n    CHECK_INT(STD atomic_compare_exchange_strong_explicit(\r\n                  &atom, &value, zero, STD memory_order_seq_cst, STD memory_order_relaxed),\r\n        false);\r\n    CHECK_INT(value == other, true);\r\n    CHECK_INT(STD atomic_load(&atom) == other, true);\r\n}\r\n\r\ntemplate <class Mtype, class Atom>\r\nvoid test_atomic_core_members() { // test core member functions for all atomic types\r\n    Atom atom;\r\n    const Mtype zero = values<Mtype>::zero();\r\n    const Mtype one  = values<Mtype>::not_zero();\r\n    initializer<Mtype, Atom>::init(atom, zero);\r\n\r\n    const Atom& c_atom = static_cast<const Atom&>(atom);\r\n    const Mtype other  = one;\r\n\r\n    // is_lock_free\r\n    switch (get_lock_free_for_type((Mtype*) nullptr)) { // check that is_lock_free gives result consistent\r\n                                                        // with the corresponding macro\r\n    case 0:\r\n        CHECK_INT(c_atom.is_lock_free(), false);\r\n        break;\r\n    case 1:\r\n        CHECK_INT(c_atom.is_lock_free() == false || c_atom.is_lock_free() == true, true);\r\n        break;\r\n    case 2:\r\n        CHECK_INT(c_atom.is_lock_free(), true);\r\n        break;\r\n    }\r\n\r\n    // load/store/operator Ty\r\n    CHECK_INT(c_atom.load() == zero, true);\r\n    CHECK_INT(c_atom.load(STD memory_order_relaxed) == zero, true);\r\n    CHECK_INT(static_cast<Mtype>(c_atom) == zero, true);\r\n\r\n    atom.store(other);\r\n    CHECK_INT(static_cast<Mtype>(c_atom) == other, true);\r\n    atom.store(zero, STD memory_order_seq_cst);\r\n    CHECK_INT(c_atom.load() == zero, true);\r\n\r\n    // assign from Ty\r\n    atom = other;\r\n    CHECK_INT(c_atom.load() == other, true);\r\n\r\n    // exchange\r\n    CHECK_INT(atom.exchange(zero) == other, true);\r\n    CHECK_INT(c_atom.load() == zero, true);\r\n\r\n    // compare_exchange_weak\r\n    Mtype value = zero;\r\n    atom        = value;\r\n    CHECK_INT(atom.compare_exchange_weak(value, other), true);\r\n    CHECK_INT(value == zero, true);\r\n    CHECK_INT(atom.load() == other, true);\r\n    CHECK_INT(atom.compare_exchange_weak(value, zero), false);\r\n    CHECK_INT(value == other, true);\r\n    CHECK_INT(atom.load() == other, true);\r\n\r\n    value = zero;\r\n    atom  = zero;\r\n    CHECK_INT(atom.compare_exchange_weak(value, other, STD memory_order_seq_cst), true);\r\n    CHECK_INT(value == zero, true);\r\n    CHECK_INT(atom.load() == other, true);\r\n    CHECK_INT(atom.compare_exchange_weak(value, zero, STD memory_order_relaxed, STD memory_order_relaxed), false);\r\n    CHECK_INT(value == other, true);\r\n    CHECK_INT(atom.load() == other, true);\r\n\r\n    // compare_exchange_strong\r\n    value = zero;\r\n    atom  = zero;\r\n    CHECK_INT(atom.compare_exchange_strong(value, other), true);\r\n    CHECK_INT(value == zero, true);\r\n    CHECK_INT(atom.load() == other, true);\r\n    CHECK_INT(atom.compare_exchange_strong(value, zero), false);\r\n    CHECK_INT(value == other, true);\r\n    CHECK_INT(atom.load() == other, true);\r\n\r\n    value = zero;\r\n    atom  = zero;\r\n    CHECK_INT(atom.compare_exchange_strong(value, other, STD memory_order_seq_cst), true);\r\n    CHECK_INT(value == zero, true);\r\n    CHECK_INT(atom.load() == other, true);\r\n    CHECK_INT(atom.compare_exchange_strong(value, zero, STD memory_order_relaxed, STD memory_order_relaxed), false);\r\n    CHECK_INT(value == other, true);\r\n    CHECK_INT(atom.load() == other, true);\r\n}\r\n\r\ntemplate <class Mtype, class Atom>\r\nvoid test_atomic_arithmetic_nonmembers() { // test arithmetic non-member functions for all supported types\r\n    Atom atom;\r\n    initializer<Mtype, Atom>::init(atom, 0);\r\n\r\n    CHECK_INT(STD atomic_fetch_add(&atom, 1), 0);\r\n    CHECK_INT(STD atomic_load(&atom), 1);\r\n    CHECK_INT(STD atomic_fetch_add_explicit(&atom, 1, STD memory_order_relaxed), 1);\r\n    CHECK_INT(STD atomic_load(&atom), 2);\r\n\r\n    CHECK_INT(STD atomic_fetch_sub(&atom, 1), 2);\r\n    CHECK_INT(STD atomic_load(&atom), 1);\r\n    CHECK_INT(STD atomic_fetch_sub_explicit(&atom, 1, STD memory_order_relaxed), 1);\r\n    CHECK_INT(STD atomic_load(&atom), 0);\r\n\r\n    STD atomic_store(&atom, 0x07);\r\n    CHECK_INT(STD atomic_fetch_and(&atom, 0x0E), 0x07);\r\n    CHECK_INT(STD atomic_load(&atom), 0x06);\r\n    CHECK_INT(STD atomic_fetch_and_explicit(&atom, 0x04, STD memory_order_relaxed), 0x06);\r\n    CHECK_INT(STD atomic_load(&atom), 0x04);\r\n\r\n    CHECK_INT(STD atomic_fetch_or(&atom, 0x06), 0x04);\r\n    CHECK_INT(STD atomic_load(&atom), 0x06);\r\n    CHECK_INT(STD atomic_fetch_or_explicit(&atom, 0x03, STD memory_order_relaxed), 0x06);\r\n    CHECK_INT(STD atomic_load(&atom), 0x07);\r\n\r\n    CHECK_INT(STD atomic_fetch_xor(&atom, 0x0D), 0x07);\r\n    CHECK_INT(STD atomic_load(&atom), 0x0A);\r\n    CHECK_INT(STD atomic_fetch_xor_explicit(&atom, 0x08, STD memory_order_relaxed), 0x0A);\r\n    CHECK_INT(STD atomic_load(&atom), 0x02);\r\n}\r\n\r\ntemplate <class Mtype, class Atom>\r\nvoid test_atomic_arithmetic_members() { // test arithmetic member functions for all supported types\r\n    Atom atom;\r\n    initializer<Mtype, Atom>::init(atom, 0);\r\n\r\n    CHECK_INT(atom++, 0);\r\n    CHECK_INT(atom.load(), 1);\r\n    CHECK_INT(++atom, 2);\r\n    CHECK_INT(atom.load(), 2);\r\n\r\n    CHECK_INT(atom--, 2);\r\n    CHECK_INT(atom.load(), 1);\r\n    CHECK_INT(--atom, 0);\r\n    CHECK_INT(atom.load(), 0);\r\n\r\n    atom = 0x07;\r\n    CHECK_INT(atom &= 0x0E, 0x06);\r\n    CHECK_INT(atom.load(), 0x06);\r\n    CHECK_INT(atom &= 0x04, 0x04);\r\n    CHECK_INT(atom.load(), 0x04);\r\n\r\n    CHECK_INT(atom |= 0x06, 0x06);\r\n    CHECK_INT(atom.load(), 0x06);\r\n    CHECK_INT(atom |= 0x03, 0x07);\r\n    CHECK_INT(atom.load(), 0x07);\r\n\r\n    CHECK_INT(atom ^= 0x0D, 0x0A);\r\n    CHECK_INT(atom.load(), 0x0A);\r\n    CHECK_INT(atom ^= 0x08, 0x02);\r\n    CHECK_INT(atom.load(), 0x02);\r\n\r\n    atom = 0;\r\n    CHECK_INT(atom.fetch_add(1), 0);\r\n    CHECK_INT(atom.load(), 1);\r\n    CHECK_INT(atom.fetch_add(1, STD memory_order_relaxed), 1);\r\n    CHECK_INT(atom.load(), 2);\r\n\r\n    CHECK_INT(atom.fetch_sub(1), 2);\r\n    CHECK_INT(atom.load(), 1);\r\n    CHECK_INT(atom.fetch_sub(1, STD memory_order_relaxed), 1);\r\n    CHECK_INT(atom.load(), 0);\r\n\r\n    atom = 0x07;\r\n    CHECK_INT(atom.fetch_and(0x0E), 0x07);\r\n    CHECK_INT(atom.load(), 0x06);\r\n    CHECK_INT(atom.fetch_and(0x04, STD memory_order_relaxed), 0x06);\r\n    CHECK_INT(atom.load(), 0x04);\r\n\r\n    CHECK_INT(atom.fetch_or(0x06), 0x04);\r\n    CHECK_INT(atom.load(), 0x06);\r\n    CHECK_INT(atom.fetch_or(0x03, STD memory_order_relaxed), 0x06);\r\n    CHECK_INT(atom.load(), 0x07);\r\n\r\n    CHECK_INT(atom.fetch_xor(0x0D), 0x07);\r\n    CHECK_INT(atom.load(), 0x0A);\r\n    CHECK_INT(atom.fetch_xor(0x08, STD memory_order_relaxed), 0x0A);\r\n    CHECK_INT(atom.load(), 0x02);\r\n}\r\n\r\ntemplate <class Mtype, class Atom>\r\nvoid test_atomic_address_arithmetic_nonmembers() { // test arithmetic non-member functions for address types\r\n    typename remove_pointer<Mtype>::base_type data[3];\r\n    Atom atom;\r\n    STD atomic_init(&atom, data);\r\n    CHECK_PTR(STD atomic_load(&atom), data);\r\n\r\n    CHECK_PTR(STD atomic_fetch_add(&atom, 1), data);\r\n    CHECK_PTR(STD atomic_load(&atom), data + 1);\r\n    CHECK_PTR(STD atomic_fetch_add_explicit(&atom, 1, STD memory_order_relaxed), data + 1);\r\n    CHECK_PTR(STD atomic_load(&atom), data + 2);\r\n\r\n    CHECK_PTR(STD atomic_fetch_sub(&atom, 1), data + 2);\r\n    CHECK_PTR(STD atomic_load(&atom), data + 1);\r\n    CHECK_PTR(STD atomic_fetch_sub_explicit(&atom, 1, STD memory_order_relaxed), data + 1);\r\n    CHECK_PTR(STD atomic_load(&atom), data);\r\n}\r\n\r\ntemplate <class Mtype, class Atom>\r\nvoid test_atomic_address_arithmetic_members() { // test arithmetic non-member functions for address types\r\n    typename remove_pointer<Mtype>::base_type data[2] = {0};\r\n    Atom atom;\r\n    STD atomic_init(&atom, data);\r\n    CHECK_PTR(STD atomic_load(&atom), data);\r\n\r\n    // fetch_add/fetch_sub\r\n    atom = &data[0];\r\n    CHECK_PTR(atom.fetch_add(1), data);\r\n    CHECK_PTR(atom.load(), data + 1);\r\n    CHECK_PTR(atom.fetch_add(1, STD memory_order_relaxed), data + 1);\r\n    CHECK_PTR(atom.load(), data + 2);\r\n\r\n    CHECK_PTR(atom.fetch_sub(1), data + 2);\r\n    CHECK_PTR(atom.load(), data + 1);\r\n    CHECK_PTR(atom.fetch_sub(1, STD memory_order_relaxed), data + 1);\r\n    CHECK_PTR(atom.load(), data);\r\n\r\n    // operator+=/operator-=\r\n    atom = data;\r\n    CHECK_PTR(atom += 1, data + 1);\r\n    CHECK_PTR(atom.load(), data + 1);\r\n    CHECK_PTR(atom += 1, data + 2);\r\n    CHECK_PTR(atom.load(), data + 2);\r\n\r\n    CHECK_PTR(atom -= 1, data + 1);\r\n    CHECK_PTR(atom.load(), data + 1);\r\n    CHECK_PTR(atom -= 1, data);\r\n    CHECK_PTR(atom.load(), data);\r\n}\r\n\r\ntemplate <class Mtype, class Atom>\r\nvoid test_atomic_address_template_incr_decr() { // test increment and decrement for all address types\r\n    typename remove_pointer<Mtype>::base_type data[2] = {0};\r\n    Atom atom;\r\n    STD atomic_init(&atom, data);\r\n\r\n    CHECK_PTR(atom++, data);\r\n    CHECK_PTR(atom.load(), data + 1);\r\n    CHECK_PTR(++atom, data + 2);\r\n    CHECK_PTR(atom.load(), data + 2);\r\n\r\n    CHECK_PTR(atom--, data + 2);\r\n    CHECK_PTR(atom.load(), data + 1);\r\n    CHECK_PTR(--atom, data);\r\n    CHECK_PTR(atom.load(), data);\r\n}\r\n\r\n// TEST SEMANTICS OF atomic_bool AND atomic<bool>\r\ntemplate <class Mtype, class Atom>\r\nvoid do_test_atomic_bool() { // test core operations for atomic bool\r\n    test_atomic_core_nonmembers<Mtype, Atom>();\r\n    test_atomic_core_members<Mtype, Atom>();\r\n}\r\n\r\ntemplate <class Mtype, class Atom>\r\nvoid do_test_atomic_bool_aggregate() { // test atomic_bool\r\n    test_atomic_aggregate_initialization<Mtype, Atom>();\r\n    do_test_atomic_bool<Mtype, Atom>();\r\n}\r\n\r\ntemplate <class Mtype, class Atom>\r\nvoid do_test_atomic_bool_template() { // test atomic<bool>\r\n    test_atomic_ctor_initialization<Mtype, Atom>();\r\n    do_test_atomic_bool<Mtype, Atom>();\r\n}\r\n\r\nstatic void test_atomic_bool() { // test operations on atomic bool\r\n    typedef bool Mtype;\r\n    typedef STD atomic_bool Atom;\r\n    typedef STD atomic<Mtype> AtomTemplate;\r\n    do_test_atomic_bool_aggregate<Mtype, Atom>();\r\n    do_test_atomic_bool_aggregate<Mtype, volatile Atom>();\r\n    do_test_atomic_bool_template<Mtype, AtomTemplate>();\r\n    do_test_atomic_bool_template<Mtype, volatile AtomTemplate>();\r\n}\r\n\r\n// TEST SEMANTICS OF atomic_integral AND atomic<integral>\r\ntemplate <class Mtype, class Atom>\r\nvoid do_test_atomic_integral() { // test core and arithmetic operations for atomic integral types\r\n    test_atomic_core_nonmembers<Mtype, Atom>();\r\n    test_atomic_core_members<Mtype, Atom>();\r\n    test_atomic_arithmetic_nonmembers<Mtype, Atom>();\r\n    test_atomic_arithmetic_members<Mtype, Atom>();\r\n}\r\n\r\ntemplate <class Mtype, class Atom>\r\nvoid do_test_atomic_integral_aggregate() { // test atomic_integral types\r\n    test_atomic_aggregate_initialization<Mtype, Atom>();\r\n    do_test_atomic_integral<Mtype, Atom>();\r\n}\r\n\r\ntemplate <class Mtype, class Atom>\r\nvoid do_test_atomic_integral_template() { // test atomic<integral> types\r\n    test_atomic_ctor_initialization<Mtype, Atom>();\r\n    do_test_atomic_integral<Mtype, Atom>();\r\n}\r\n\r\ntemplate <class Mtype, class Atom>\r\nvoid test_atomic_integral() { // test operations on atomic integral types\r\n    typedef STD atomic<Mtype> AtomTemplate;\r\n    do_test_atomic_integral_aggregate<Mtype, Atom>();\r\n    do_test_atomic_integral_aggregate<Mtype, volatile Atom>();\r\n    do_test_atomic_integral_template<Mtype, AtomTemplate>();\r\n    do_test_atomic_integral_template<Mtype, volatile AtomTemplate>();\r\n}\r\n\r\n// TEST SEMANTICS OF atomic<Ty*>\r\ntemplate <class Mtype, class Atom>\r\nvoid do_test_atomic_address_nonmembers() { // test core and arithmetic non-member operations\r\n                                           // on atomic address types\r\n    test_atomic_core_nonmembers<Mtype, Atom>();\r\n    test_atomic_address_arithmetic_nonmembers<Mtype, Atom>();\r\n}\r\n\r\ntemplate <class Mtype, class Atom>\r\nvoid do_test_atomic_address_members() { // test core and arithmetic member operations\r\n                                        // on atomic address types\r\n    test_atomic_core_members<Mtype, Atom>();\r\n    test_atomic_address_arithmetic_members<Mtype, Atom>();\r\n}\r\n\r\ntemplate <class Mtype, class Atom>\r\nvoid do_test_atomic_address_template() { // test atomic<Ty*>\r\n                                         // note: non-member address operations act on void*, not Ty*\r\n    test_atomic_ctor_initialization<Mtype, Atom>();\r\n    do_test_atomic_address_members<Mtype, Atom>();\r\n    do_test_atomic_address_nonmembers<Mtype, Atom>();\r\n    test_atomic_address_template_incr_decr<Mtype, Atom>();\r\n}\r\n\r\nstatic void test_atomic_address() { // test atomic<void*>, atomic<short*>, atomic<long*>\r\n    test_atomic_core_members<void*, STD atomic<void*>>();\r\n    test_atomic_core_nonmembers<void*, STD atomic<void*>>();\r\n    test_atomic_core_members<void*, volatile STD atomic<void*>>();\r\n    test_atomic_core_nonmembers<void*, volatile STD atomic<void*>>();\r\n\r\n    do_test_atomic_address_template<short*, STD atomic<short*>>();\r\n    do_test_atomic_address_template<short*, volatile STD atomic<short*>>();\r\n\r\n    do_test_atomic_address_template<long*, STD atomic<long*>>();\r\n    do_test_atomic_address_template<long*, volatile STD atomic<long*>>();\r\n}\r\n\r\n// TEST SEMANTICS OF atomic<UDT>\r\ntemplate <class Mtype, class Atom>\r\nvoid do_test_atomic_udt() { // test core operations on atomic<UDT>\r\n    test_atomic_ctor_initialization<Mtype, Atom>();\r\n    test_atomic_core_members<Mtype, Atom>();\r\n}\r\n\r\ntemplate <CSTD size_t sz>\r\nstatic void test_atomic_n_bytes() { // test core operations on atomic<n_bytes<sz>>\r\n    typedef n_bytes<sz> Mtype;\r\n    typedef STD atomic<Mtype> Atom;\r\n    do_test_atomic_udt<Mtype, Atom>();\r\n}\r\n\r\nstatic void test_atomic_udt() { // test atomic<n_bytes<sz>> for various sizes\r\n    test_atomic_n_bytes<1>();\r\n    test_atomic_n_bytes<2>();\r\n    test_atomic_n_bytes<3>();\r\n    test_atomic_n_bytes<4>();\r\n    test_atomic_n_bytes<5>();\r\n    test_atomic_n_bytes<6>();\r\n    test_atomic_n_bytes<7>();\r\n    test_atomic_n_bytes<8>();\r\n    test_atomic_n_bytes<9>();\r\n    test_atomic_n_bytes<10>();\r\n}\r\n\r\n// TEST FENCES\r\nstatic void test_fences() { // test that fence functions exist\r\n                            // these have no easily testable semantics\r\n    STD atomic_thread_fence(STD memory_order_relaxed);\r\n    STD atomic_signal_fence(STD memory_order_seq_cst);\r\n}\r\n\r\n// TEST TYPEDEFS\r\nstatic void test_typedefs() { // test that atomic typedefs exist\r\n    CHECK_TYPE(STD atomic_int8_t, STD atomic<int8_t>);\r\n    CHECK_TYPE(STD atomic_uint8_t, STD atomic<uint8_t>);\r\n    CHECK_TYPE(STD atomic_int16_t, STD atomic<int16_t>);\r\n    CHECK_TYPE(STD atomic_uint16_t, STD atomic<uint16_t>);\r\n    CHECK_TYPE(STD atomic_int32_t, STD atomic<int32_t>);\r\n    CHECK_TYPE(STD atomic_uint32_t, STD atomic<uint32_t>);\r\n    CHECK_TYPE(STD atomic_int64_t, STD atomic<int64_t>);\r\n    CHECK_TYPE(STD atomic_uint64_t, STD atomic<uint64_t>);\r\n\r\n    CHECK_TYPE(STD atomic_int_least8_t, STD atomic<int_least8_t>);\r\n    CHECK_TYPE(STD atomic_uint_least8_t, STD atomic<uint_least8_t>);\r\n    CHECK_TYPE(STD atomic_int_least16_t, STD atomic<int_least16_t>);\r\n    CHECK_TYPE(STD atomic_uint_least16_t, STD atomic<uint_least16_t>);\r\n    CHECK_TYPE(STD atomic_int_least32_t, STD atomic<int_least32_t>);\r\n    CHECK_TYPE(STD atomic_uint_least32_t, STD atomic<uint_least32_t>);\r\n    CHECK_TYPE(STD atomic_int_least64_t, STD atomic<int_least64_t>);\r\n    CHECK_TYPE(STD atomic_uint_least64_t, STD atomic<uint_least64_t>);\r\n\r\n    CHECK_TYPE(STD atomic_int_fast8_t, STD atomic<int_fast8_t>);\r\n    CHECK_TYPE(STD atomic_uint_fast8_t, STD atomic<uint_fast8_t>);\r\n    CHECK_TYPE(STD atomic_int_fast16_t, STD atomic<int_fast16_t>);\r\n    CHECK_TYPE(STD atomic_uint_fast16_t, STD atomic<uint_fast16_t>);\r\n    CHECK_TYPE(STD atomic_int_fast32_t, STD atomic<int_fast32_t>);\r\n    CHECK_TYPE(STD atomic_uint_fast32_t, STD atomic<uint_fast32_t>);\r\n    CHECK_TYPE(STD atomic_int_fast64_t, STD atomic<int_fast64_t>);\r\n    CHECK_TYPE(STD atomic_uint_fast64_t, STD atomic<uint_fast64_t>);\r\n\r\n    CHECK_TYPE(STD atomic_intptr_t, STD atomic<intptr_t>);\r\n    CHECK_TYPE(STD atomic_uintptr_t, STD atomic<uintptr_t>);\r\n    CHECK_TYPE(STD atomic_size_t, STD atomic<size_t>);\r\n    CHECK_TYPE(STD atomic_ptrdiff_t, STD atomic<ptrdiff_t>);\r\n    CHECK_TYPE(STD atomic_intmax_t, STD atomic<intmax_t>);\r\n    CHECK_TYPE(STD atomic_uintmax_t, STD atomic<uintmax_t>);\r\n}\r\n// RUN TESTS\r\nvoid test_main() { // test header <atomic>\r\n    test_memory_order_enum();\r\n    test_kill_dependency();\r\n    test_lock_free_property();\r\n    test_atomic_flag();\r\n    test_atomic_bool();\r\n    test_atomic_integral<char, STD atomic_char>();\r\n    test_atomic_integral<signed char, STD atomic_schar>();\r\n    test_atomic_integral<unsigned char, STD atomic_uchar>();\r\n    test_atomic_integral<char16_t, STD atomic_char16_t>();\r\n    test_atomic_integral<char32_t, STD atomic_char32_t>();\r\n    test_atomic_integral<wchar_t, STD atomic_wchar_t>();\r\n    test_atomic_integral<short, STD atomic_short>();\r\n    test_atomic_integral<unsigned short, STD atomic_ushort>();\r\n    test_atomic_integral<int, STD atomic_int>();\r\n    test_atomic_integral<unsigned int, STD atomic_uint>();\r\n    test_atomic_integral<long, STD atomic_long>();\r\n    test_atomic_integral<unsigned long, STD atomic_ulong>();\r\n    test_atomic_integral<long long, STD atomic_llong>();\r\n    test_atomic_integral<unsigned long long, STD atomic_ullong>();\r\n    test_atomic_address();\r\n    test_atomic_udt();\r\n    test_fences();\r\n    test_typedefs();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/bitset/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <bitset>\r\n#define TEST_NAME \"<bitset>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <bitset>\r\n#include <sstream>\r\n#include <string>\r\n\r\nvoid test_main() { // test basic workings of bitset definitions\r\n    STD bitset<5> x50;\r\n    STD bitset<5> x51(0xf);\r\n    STD bitset<5> x52(STD string(\"xx10101ab\"), 2, 5);\r\n    STD bitset<5> x53(x52);\r\n    STD string str;\r\n\r\n    CHECK_INT(x50.to_ulong(), 0x00);\r\n    CHECK_INT(x51.to_ulong(), 0x0f);\r\n    CHECK_INT(x52.to_ulong(), 0x15);\r\n    CHECK_INT(x53.to_ulong(), 0x15);\r\n\r\n    // test arithmetic\r\n    x50 |= x51;\r\n    CHECK_INT(x50.to_ulong(), 0x0f);\r\n    x50 ^= x52;\r\n    CHECK_INT(x50.to_ulong(), 0x1a);\r\n    x50 &= x51;\r\n    CHECK_INT(x50.to_ulong(), 0x0a);\r\n    x50 <<= 2;\r\n    CHECK_INT(x50.to_ulong(), 0x08);\r\n    x50 >>= 3;\r\n    CHECK_INT(x50.to_ulong(), 0x01);\r\n    x50.set(2);\r\n    CHECK_INT(x50.to_ulong(), 0x05);\r\n    x50.set(0, 0);\r\n    CHECK_INT(x50.to_ulong(), 0x04);\r\n    x50.set();\r\n    CHECK_INT(x50.to_ulong(), 0x1f);\r\n    x50.reset(3);\r\n    CHECK_INT(x50.to_ulong(), 0x17);\r\n    x50.reset();\r\n    CHECK_INT(x50.to_ulong(), 0x00);\r\n    x50.flip(2);\r\n    CHECK_INT(x50.to_ulong(), 0x04);\r\n    x50.flip();\r\n    CHECK_INT(x50.to_ulong(), 0x1b);\r\n\r\n    str = x50.to_string<char, STD char_traits<char>, STD allocator<char>>();\r\n    CHECK_STR(str.c_str(), \"11011\");\r\n\r\n    CHECK_INT(x50.count(), 4);\r\n    CHECK_INT(x52.count(), 3);\r\n    CHECK_INT(x50.size(), 5);\r\n    CHECK_INT(x51.size(), 5);\r\n    CHECK(x50 == x50);\r\n    CHECK(x50 != x51);\r\n    CHECK(x50.test(1));\r\n    CHECK(!x50.test(2));\r\n    CHECK(x50.any());\r\n    CHECK(!x50.none());\r\n    x50.reset();\r\n    CHECK(!x50.any());\r\n    CHECK(x50.none());\r\n\r\n    // test friend arithmetic functions\r\n    STD string sx1a(\"11010\");\r\n    STD bitset<5> bx05(0x05);\r\n    STD bitset<5> bx1f(0x1f);\r\n    STD bitset<5> bx1a(sx1a);\r\n\r\n    x50 = x51;\r\n    CHECK_INT((x50 << 2).to_ulong(), 0x1c);\r\n    CHECK_INT((x50 >> 2).to_ulong(), 0x03);\r\n    CHECK((x50 & x52) == bx05);\r\n    CHECK((x50 | x52) == bx1f);\r\n    CHECK((x50 ^ x52) == bx1a);\r\n\r\n    {\r\n        STD bitset<5> x54(\"11111\");\r\n        CHECK(!x51.all());\r\n        CHECK(x54.all());\r\n        CHECK_INT((int) x54.to_ullong(), 0x1f);\r\n\r\n        STD hash<STD bitset<5>> hasher;\r\n        CHECK_INT(hasher(x54), hasher(x54));\r\n    }\r\n\r\n    // test I/O\r\n    STD istringstream ins(\"1 0101 11000\");\r\n    STD ostringstream outs;\r\n    ins >> x50;\r\n    CHECK_INT(x50.to_ulong(), 0x01);\r\n    outs << x50 << ' ';\r\n    ins >> x50;\r\n    CHECK_INT(x50.to_ulong(), 0x05);\r\n    outs << x50 << ' ';\r\n    ins >> x50;\r\n    CHECK_INT(x50.to_ulong(), 0x18);\r\n    outs << x50;\r\n    CHECK_STR(outs.str().c_str(), \"00001 00101 11000\");\r\n\r\n    // test larger bitset\r\n    STD bitset<153> x153a;\r\n    STD bitset<153> x153b;\r\n\r\n    (x153a.set(100) >>= 99) <<= 1;\r\n    CHECK_INT(x153a.to_ulong(), 0x04);\r\n    x153b.set(121);\r\n    CHECK(x153b.any());\r\n    CHECK(!x153b.test(105));\r\n    CHECK(x153b.test(121));\r\n    CHECK_INT(x153b.count(), 1);\r\n    CHECK(((x153a | x153b) ^ x153b) == x153a);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/cctype/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <cctype>\r\n#define TEST_NAME \"<cctype>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <cctype>\r\n\r\n#define STDx STD\r\n\r\nvoid test_cpp() { // test C++ header\r\n#undef OK\r\n#ifdef isalpha\r\n#define OK 0\r\n#undef isalpha\r\n#else // isalpha\r\n#define OK 1\r\n#endif // isalpha\r\n    CHECK_MSG(\"isalpha is not a macro\", OK);\r\n    CHECK(STDx isalpha((int) 'a') != 0);\r\n\r\n#undef OK\r\n#ifdef isblank\r\n#define OK 0\r\n#undef isblank\r\n#else // isblank\r\n#define OK 1\r\n#endif // isblank\r\n    CHECK_MSG(\"isblank is not a macro\", OK);\r\n    CHECK(STDx isblank((int) 'a') == 0);\r\n\r\n#undef OK\r\n#ifdef isalnum\r\n#define OK 0\r\n#undef isalnum\r\n#else // isalnum\r\n#define OK 1\r\n#endif // isalnum\r\n    CHECK_MSG(\"isalnum is not a macro\", OK);\r\n    CHECK(STDx isalnum((int) 'a') != 0);\r\n\r\n#undef OK\r\n#ifdef iscntrl\r\n#define OK 0\r\n#undef iscntrl\r\n#else // iscntrl\r\n#define OK 1\r\n#endif // iscntrl\r\n    CHECK_MSG(\"iscntrl is not a macro\", OK);\r\n    CHECK(STDx iscntrl((int) 'a') == 0);\r\n\r\n#undef OK\r\n#ifdef isdigit\r\n#define OK 0\r\n#undef isdigit\r\n#else // isdigit\r\n#define OK 1\r\n#endif // isdigit\r\n    CHECK_MSG(\"isdigit is not a macro\", OK);\r\n    CHECK(STDx isdigit((int) 'a') == 0);\r\n\r\n#undef OK\r\n#ifdef isgraph\r\n#define OK 0\r\n#undef isgraph\r\n#else // isgraph\r\n#define OK 1\r\n#endif // isgraph\r\n    CHECK_MSG(\"isgraph is not a macro\", OK);\r\n    CHECK(STDx isgraph((int) 'a') != 0);\r\n\r\n#undef OK\r\n#ifdef islower\r\n#define OK 0\r\n#undef islower\r\n#else // islower\r\n#define OK 1\r\n#endif // islower\r\n    CHECK_MSG(\"islower is not a macro\", OK);\r\n    CHECK(STDx islower((int) 'a') != 0);\r\n\r\n#undef OK\r\n#ifdef isprint\r\n#define OK 0\r\n#undef isprint\r\n#else // isprint\r\n#define OK 1\r\n#endif // isprint\r\n    CHECK_MSG(\"isprint is not a macro\", OK);\r\n    CHECK(STDx isprint((int) 'a') != 0);\r\n\r\n#undef OK\r\n#ifdef ispunct\r\n#define OK 0\r\n#undef ispunct\r\n#else // ispunct\r\n#define OK 1\r\n#endif // ispunct\r\n    CHECK_MSG(\"ispunct is not a macro\", OK);\r\n    CHECK(STDx ispunct((int) 'a') == 0);\r\n\r\n#undef OK\r\n#ifdef isspace\r\n#define OK 0\r\n#undef isspace\r\n#else // isspace\r\n#define OK 1\r\n#endif // isspace\r\n    CHECK_MSG(\"isspace is not a macro\", OK);\r\n    CHECK(STDx isspace((int) 'a') == 0);\r\n\r\n#undef OK\r\n#ifdef isupper\r\n#define OK 0\r\n#undef isupper\r\n#else // isupper\r\n#define OK 1\r\n#endif // isupper\r\n    CHECK_MSG(\"isupper is not a macro\", OK);\r\n    CHECK(STDx isupper((int) 'a') == 0);\r\n\r\n#undef OK\r\n#ifdef isxdigit\r\n#define OK 0\r\n#undef isxdigit\r\n#else // isxdigit\r\n#define OK 1\r\n#endif // isxdigit\r\n    CHECK_MSG(\"isxdigit is not a macro\", OK);\r\n    CHECK(STDx isxdigit((int) 'a') != 0);\r\n\r\n    CHECK_INT(STDx tolower((int) 'A'), 'a');\r\n    CHECK_INT(STDx toupper((int) 'a'), 'A');\r\n}\r\n\r\nvoid test_main() { // test basic workings of cctype definitions\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/cerrno/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <cerrno>\r\n#define TEST_NAME \"<cerrno>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <cerrno>\r\n\r\nvoid test_cpp() { // test C++ header\r\n#undef OK\r\n#ifndef errno\r\n#define OK 0\r\n#else // errno\r\n#define OK 1\r\n#endif // errno\r\n    CHECK_MSG(\"errno is a macro\", OK);\r\n}\r\n\r\nvoid test_main() { // test basic workings of cerrno definitions\r\n    CHECK_INT(errno, 0);\r\n\r\n#if 0 < ERANGE\r\n    errno = ERANGE;\r\n    CHECK_INT(errno, ERANGE);\r\n#else // 0 < ERANGE\r\n    CHECK_MSG(\"ERANGE is defined\", 0);\r\n#endif // 0 < ERANGE\r\n\r\n#if 0 < EDOM\r\n    errno = EDOM;\r\n    CHECK_INT(errno, EDOM);\r\n#else // 0 < EDOM\r\n    CHECK_MSG(\"EDOM is defined\", 0);\r\n#endif // 0 < EDOM\r\n\r\n#if 0 < EILSEQ\r\n    errno = EILSEQ;\r\n    CHECK_INT(errno, EILSEQ);\r\n#else // 0 < EILSEQ\r\n    CHECK_MSG(\"EILSEQ is defined\", 0);\r\n#endif // 0 < EILSEQ\r\n\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/cfloat/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <cfloat>\r\n#define TEST_NAME \"<cfloat>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <cfloat>\r\n\r\nvoid test_cpp() { // test C++ header\r\n    static int radix = FLT_RADIX;\r\n\r\n    CHECK_INT(radix, FLT_RADIX);\r\n    CHECK(-1 <= FLT_ROUNDS && FLT_ROUNDS <= 3);\r\n\r\n    CHECK(10 <= DBL_DIG);\r\n    CHECK(DBL_EPSILON <= 1e-9);\r\n    CHECK(0 < DBL_MANT_DIG);\r\n    CHECK(0 < DBL_DIG);\r\n    CHECK(1e37 < DBL_MAX);\r\n    CHECK(37 <= DBL_MAX_10_EXP);\r\n    CHECK(DBL_MIN <= 1e-37);\r\n    CHECK(DBL_MIN_10_EXP <= -37);\r\n\r\n    CHECK(6 <= FLT_DIG);\r\n    CHECK(FLT_EPSILON <= 1e-5);\r\n    CHECK(0 < FLT_MANT_DIG);\r\n    CHECK(0 < FLT_DIG);\r\n    CHECK(1e37 < FLT_MAX);\r\n    CHECK(37 <= FLT_MAX_10_EXP);\r\n    CHECK(FLT_MIN <= 1e-37);\r\n    CHECK(FLT_MIN_10_EXP <= -37);\r\n\r\n    CHECK(10 <= LDBL_DIG);\r\n    CHECK(LDBL_EPSILON <= 1e-9);\r\n    CHECK(0 < LDBL_MANT_DIG);\r\n    CHECK(0 < LDBL_DIG);\r\n    CHECK(1e37 < LDBL_MAX);\r\n    CHECK(37 <= LDBL_MAX_10_EXP);\r\n    CHECK(LDBL_MIN <= 1e-37);\r\n    CHECK(LDBL_MIN_10_EXP <= -37);\r\n\r\n    CHECK(10 <= DECIMAL_DIG); // C99 only\r\n    CHECK(-1 <= FLT_EVAL_METHOD && FLT_EVAL_METHOD <= 2);\r\n}\r\n\r\nvoid test_main() { // test basic workings of cfloat definitions\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/chrono/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\..\\env_minus_pure.lst\r\n"
  },
  {
    "path": "tests/tr1/tests/chrono/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <chrono> C++11 header\r\n#define TEST_NAME \"<chrono>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <chrono>\r\n#include <iostream>\r\n#include <time.h>\r\n#include <typeinfo>\r\n\r\nnamespace {\r\n\r\n    void t_common_type() {\r\n        typedef STD common_type<signed char, unsigned char> c_sc_uc;\r\n        CHECK_TYPE(c_sc_uc::type, int);\r\n        typedef STD common_type<int, float> c_i_f;\r\n        CHECK_TYPE(c_i_f::type, float);\r\n        typedef STD common_type<long long, unsigned long long> c_ll_ull;\r\n        CHECK_TYPE(c_ll_ull::type, unsigned long long);\r\n\r\n        typedef STD chrono::duration<int, STD ratio<2, 3>> di;\r\n        typedef STD chrono::duration<long, STD ratio<4, 9>> dl;\r\n        typedef STD ratio<2, 9> r;\r\n        typedef STD common_type<di, dl> c_di_dl;\r\n        CHECK_TYPE(c_di_dl::type::rep, long);\r\n        CHECK_TYPE(c_di_dl::type::period, r);\r\n\r\n        typedef STD chrono::time_point<STD chrono::system_clock, di> ti;\r\n        typedef STD chrono::time_point<STD chrono::system_clock, dl> tl;\r\n        typedef STD chrono::time_point<STD chrono::system_clock, c_di_dl::type> res;\r\n        typedef STD common_type<ti, tl> c_ti_tl;\r\n        CHECK_TYPE(c_ti_tl::type, res);\r\n    }\r\n\r\n    void t_treat_as_floating_point() {\r\n        CHECK_INT(STD chrono::treat_as_floating_point<char>::value, false);\r\n        CHECK_INT(STD chrono::treat_as_floating_point<short>::value, false);\r\n        CHECK_INT(STD chrono::treat_as_floating_point<unsigned int>::value, false);\r\n        CHECK_INT(STD chrono::treat_as_floating_point<int>::value, false);\r\n        CHECK_INT(STD chrono::treat_as_floating_point<long>::value, false);\r\n        CHECK_INT(STD chrono::treat_as_floating_point<unsigned long>::value, false);\r\n        CHECK_INT(STD chrono::treat_as_floating_point<float>::value, true);\r\n        CHECK_INT(STD chrono::treat_as_floating_point<double>::value, true);\r\n        CHECK_INT(STD chrono::treat_as_floating_point<long double>::value, true);\r\n    }\r\n\r\n    void t_duration_values() {\r\n        typedef STD chrono::duration_values<int> d_i;\r\n        CHECK_INT(d_i::zero(), 0);\r\n        CHECK_INT(d_i::min(), STD numeric_limits<int>::lowest());\r\n        CHECK_INT(d_i::max(), STD numeric_limits<int>::max());\r\n\r\n        typedef STD chrono::duration_values<double> d_d;\r\n        CHECK_DOUBLE(d_d::zero(), 0.0);\r\n        CHECK_DOUBLE(d_d::min(), STD numeric_limits<double>::lowest());\r\n        CHECK_DOUBLE(d_d::max(), STD numeric_limits<double>::max());\r\n    }\r\n\r\n    template <class Rep, class Period>\r\n    void test_arithmetic_op(const STD chrono::duration<Rep, Period>& d1, const STD chrono::duration<Rep, Period>& d2) {\r\n        CHECK_INT(d1.count(), d2.count());\r\n    }\r\n\r\n    void t_duration() {\r\n        // nested typedefs\r\n        typedef STD ratio<1, 1> r_1_1;\r\n        typedef STD chrono::duration<int, r_1_1> d_i_r_1_1;\r\n        CHECK_TYPE(d_i_r_1_1::rep, int);\r\n        CHECK_TYPE(d_i_r_1_1::period, r_1_1);\r\n\r\n        typedef STD ratio<1, 60> r_1_60;\r\n        typedef STD chrono::duration<long, r_1_60> d_l_r_1_60;\r\n        CHECK_TYPE(d_l_r_1_60::rep, long);\r\n        CHECK_TYPE(d_l_r_1_60::period, r_1_60);\r\n\r\n        // constructors\r\n        d_i_r_1_1 d0(0L);\r\n        CHECK_INT(d0.count(), 0);\r\n        d_i_r_1_1 d1(1L);\r\n        CHECK_INT(d1.count(), 1);\r\n\r\n        d_l_r_1_60 d2(d1);\r\n        CHECK_INT(d2.count(), 60);\r\n\r\n        // copy and assign\r\n        d_i_r_1_1 d3(d1);\r\n        CHECK_INT(d3.count(), d1.count());\r\n        d3 = d0;\r\n        CHECK_INT(d3.count(), d0.count());\r\n\r\n        // arithmetic member functions\r\n        CHECK_INT((+d1).count(), d1.count());\r\n        CHECK_INT(d1.count(), 1);\r\n        CHECK_INT((-d1).count(), -d1.count());\r\n        CHECK_INT(d1.count(), 1);\r\n\r\n        CHECK_INT((++d1).count(), 2);\r\n        CHECK_INT(d1.count(), 2);\r\n        CHECK_INT((d1++).count(), 2);\r\n        CHECK_INT(d1.count(), 3);\r\n\r\n        CHECK_INT((--d1).count(), 2);\r\n        CHECK_INT(d1.count(), 2);\r\n        CHECK_INT((d1--).count(), 2);\r\n        CHECK_INT(d1.count(), 1);\r\n\r\n        d3 += d1;\r\n        CHECK_INT(d3.count(), 1);\r\n        d3 -= d1;\r\n        CHECK_INT(d3.count(), 0);\r\n\r\n        d1 *= 4;\r\n        CHECK_INT(d1.count(), 4);\r\n        d1 /= 2;\r\n        CHECK_INT(d1.count(), 2);\r\n        d1 %= 2;\r\n        CHECK_INT(d1.count(), 0);\r\n\r\n        // arithmetic non-member functions\r\n        typedef STD chrono::duration<int, STD ratio<2, 3>> di;\r\n        typedef STD chrono::duration<long, STD ratio<4, 9>> dl;\r\n        di d4(3);\r\n        dl d5(4);\r\n        STD chrono::duration<long, STD ratio<2, 9>> res_plus(17);\r\n        test_arithmetic_op(d4 + d5, res_plus);\r\n        STD chrono::duration<long, STD ratio<2, 9>> res_minus(1);\r\n        test_arithmetic_op(d4 - d5, res_minus);\r\n\r\n        STD chrono::duration<long, STD ratio<2, 3>> res_times(6);\r\n        test_arithmetic_op(d4 * 2L, res_times);\r\n        test_arithmetic_op(2L * d4, res_times);\r\n\r\n        STD chrono::duration<long, STD ratio<2, 3>> res_divide0(1);\r\n        test_arithmetic_op(d4 / 3L, res_divide0);\r\n        CHECK_TYPE(d4 / d5, long);\r\n        CHECK_INT(d4 / d5, 1);\r\n\r\n        // comparisons\r\n        di d6(6);\r\n        dl d7(9);\r\n        CHECK_INT(d6 == d7, true);\r\n        CHECK_INT(d4 == d5, false);\r\n        CHECK_INT(d6 != d7, false);\r\n        CHECK_INT(d4 != d5, true);\r\n\r\n        CHECK_INT(d6 < d7, false);\r\n        CHECK_INT(d4 < d5, false);\r\n        CHECK_INT(d5 < d4, true);\r\n        CHECK_INT(d6 <= d7, true);\r\n        CHECK_INT(d4 <= d5, false);\r\n        CHECK_INT(d5 <= d4, true);\r\n\r\n        CHECK_INT(d6 > d7, false);\r\n        CHECK_INT(d4 > d5, true);\r\n        CHECK_INT(d5 > d4, false);\r\n        CHECK_INT(d6 >= d7, true);\r\n        CHECK_INT(d4 >= d5, true);\r\n        CHECK_INT(d5 >= d4, false);\r\n\r\n        // special values\r\n        typedef STD chrono::duration_values<int> dvi;\r\n        CHECK_INT(di::zero().count(), dvi::zero());\r\n        CHECK_INT(di::min().count(), dvi::min());\r\n        CHECK_INT(di::max().count(), dvi::max());\r\n\r\n        // duration_cast\r\n        d5 = STD chrono::duration_cast<dl>(d4);\r\n        CHECK_INT(d5.count(), 4);\r\n\r\n        // convenience typedefs\r\n        STD chrono::minutes mins = STD chrono::duration_cast<STD chrono::minutes>(STD chrono::hours(1));\r\n        CHECK_INT(mins.count(), 60);\r\n        STD chrono::seconds secs = STD chrono::duration_cast<STD chrono::seconds>(STD chrono::minutes(1));\r\n        CHECK_INT(secs.count(), 60);\r\n        STD chrono::milliseconds msecs = STD chrono::duration_cast<STD chrono::milliseconds>(STD chrono::seconds(1));\r\n        CHECK_INT(msecs.count(), 1000);\r\n        STD chrono::microseconds mmsecs =\r\n            STD chrono::duration_cast<STD chrono::microseconds>(STD chrono::milliseconds(1));\r\n        CHECK_INT(mmsecs.count(), 1000);\r\n    }\r\n\r\n    template <class Clock>\r\n    void test_clock(bool tp_known, bool steady_known, bool steady) {\r\n        typedef STD chrono::duration<typename Clock::rep, typename Clock::period> dur;\r\n        CHECK_TYPE(typename Clock::duration, dur);\r\n        typedef STD chrono::time_point<Clock, typename Clock::duration> tp;\r\n        if (tp_known) {\r\n            CHECK_TYPE(typename Clock::time_point, tp);\r\n        }\r\n        static_assert(STD is_same_v<decltype(Clock::is_steady), const bool>, \"incorrect is_steady type\");\r\n        if (steady_known) {\r\n            CHECK_INT(Clock::is_steady, steady);\r\n        }\r\n        CHECK_INT(Clock::now() < Clock::time_point::max(), true);\r\n    }\r\n\r\n    void t_clocks() {\r\n        test_clock<STD chrono::high_resolution_clock>(false, false, false);\r\n        test_clock<STD chrono::system_clock>(true, false, false);\r\n        test_clock<STD chrono::steady_clock>(false, true, true);\r\n        CHECK_INT(STD chrono::system_clock::duration::min() <= STD chrono::system_clock::duration::zero(), true);\r\n\r\n        time_t t = time(nullptr);\r\n\r\n        STD chrono::system_clock::time_point tp = STD chrono::system_clock::from_time_t(t);\r\n        CHECK_INT(t, STD chrono::system_clock::to_time_t(tp));\r\n    }\r\n\r\n    struct my_clock {\r\n        typedef int rep;\r\n        typedef STD ratio<2, 1> period;\r\n        typedef STD chrono::duration<rep, period> duration;\r\n        typedef STD chrono::time_point<my_clock> time_point;\r\n        static const bool is_steady = false;\r\n\r\n        static time_point now() {\r\n            return time_point(duration(3));\r\n        }\r\n    };\r\n\r\n    void t_time_point() {\r\n        typedef long rep;\r\n        typedef STD ratio<1, 1> r_1_1;\r\n        typedef STD chrono::duration<rep, r_1_1> dur;\r\n        typedef STD chrono::duration<int, STD ratio<2, 1>> dur1;\r\n        typedef STD chrono::time_point<my_clock, dur> tp;\r\n        typedef STD chrono::time_point<my_clock, dur1> tp1;\r\n\r\n        // nested typedefs\r\n        CHECK_TYPE(tp::clock, my_clock);\r\n        CHECK_TYPE(tp::duration, dur);\r\n        CHECK_TYPE(tp::rep, rep);\r\n        CHECK_TYPE(tp::period, r_1_1);\r\n\r\n        bool is_steady = my_clock::is_steady; // to quiet diagnostics\r\n        if (is_steady) {\r\n            my_clock::now();\r\n        }\r\n\r\n        // constructors, time_since_epoch\r\n        tp t0;\r\n        CHECK_INT(t0.time_since_epoch() == tp::duration::zero(), true);\r\n        dur d1(1);\r\n        tp t1(d1);\r\n        CHECK_INT(t1.time_since_epoch() == d1, true);\r\n        STD chrono::minutes d2(1);\r\n        tp t2(d2);\r\n        CHECK_INT(t2.time_since_epoch() == d2, true);\r\n\r\n        // arithmetic member functions\r\n        t1 += dur1(1);\r\n        CHECK_INT(t1.time_since_epoch() == dur(3), true);\r\n        t1 -= dur1(1);\r\n        CHECK_INT(t1.time_since_epoch() == dur(1), true);\r\n\r\n        // arithmetic member functions\r\n        CHECK_INT((t1 + dur1(1)).time_since_epoch() == dur(3), true);\r\n        CHECK_INT((dur1(1) + t1).time_since_epoch() == dur(3), true);\r\n        CHECK_INT((t1 - dur1(1)).time_since_epoch() == dur(-1), true);\r\n        tp1 t3(dur1(2));\r\n        CHECK_INT(t1 - t3 == dur(-3), true);\r\n\r\n        // comparisons\r\n        tp t4(dur(1));\r\n        tp t5(dur(2));\r\n        tp1 t6(dur1(1));\r\n        CHECK_INT(t5 == t6, true);\r\n        CHECK_INT(t4 == t6, false);\r\n        CHECK_INT(t5 != t6, false);\r\n        CHECK_INT(t4 != t6, true);\r\n\r\n        CHECK_INT(t5 < t6, false);\r\n        CHECK_INT(t4 < t6, true);\r\n        CHECK_INT(t5 < t4, false);\r\n        CHECK_INT(t5 <= t6, true);\r\n        CHECK_INT(t4 <= t6, true);\r\n        CHECK_INT(t5 <= t4, false);\r\n\r\n        CHECK_INT(t5 > t6, false);\r\n        CHECK_INT(t4 > t6, false);\r\n        CHECK_INT(t5 > t4, true);\r\n        CHECK_INT(t5 >= t6, true);\r\n        CHECK_INT(t4 >= t6, false);\r\n        CHECK_INT(t5 >= t4, true);\r\n\r\n        // special values\r\n        CHECK_INT(tp::min() == tp(dur::min()), true);\r\n        CHECK_INT(tp::max() == tp(dur::max()), true);\r\n\r\n        // time_point_cast\r\n        CHECK_INT(STD chrono::time_point_cast<dur1>(t5) == t6, true);\r\n\r\n        // time_t conversions\r\n        time_t t = time(nullptr);\r\n        if (t != -1) {\r\n            STD chrono::system_clock::time_point now = STD chrono::system_clock::from_time_t(t);\r\n            CHECK_INT(t == STD chrono::system_clock::to_time_t(now), true);\r\n        }\r\n    }\r\n\r\n} // unnamed namespace\r\n\r\nvoid test_main() {\r\n    t_common_type();\r\n    t_treat_as_floating_point();\r\n    t_duration_values();\r\n    t_duration();\r\n    t_clocks();\r\n    t_time_point();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/ciso646/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <ciso646>\r\n#define _SILENCE_CXX20_CISO646_REMOVED_WARNING\r\n#define TEST_NAME \"<ciso646>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <ciso646>\r\n\r\nvoid test_cpp() { // test C++ header\r\n    int i = 3 bitand 1;\r\n    int j = 4 bitor 8;\r\n\r\n    CHECK(i == 1 and j == 12);\r\n    CHECK(i == 0 or not(j == 0));\r\n    i or_eq j;\r\n    CHECK(i == 13);\r\n    j and_eq compl 4;\r\n    CHECK(j == 8);\r\n    i xor_eq j xor 9;\r\n    CHECK(i == 12);\r\n}\r\n\r\nvoid test_main() { // test basic workings of ciso646 definitions\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/climits/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <climits>\r\n#define TEST_NAME \"<climits>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <climits>\r\n\r\nvoid test_cpp() { // test C++ header\r\n    static const char char_val[]         = {CHAR_MAX, CHAR_MIN};\r\n    static const signed char schar_val[] = {SCHAR_MAX, SCHAR_MIN};\r\n    static const short shrt_val[]        = {SHRT_MAX, SHRT_MIN};\r\n    static const int int_val[]           = {INT_MAX, INT_MIN};\r\n    static const long long_val[]         = {LONG_MAX, LONG_MIN};\r\n\r\n    static const unsigned char uchar_val[]  = {UCHAR_MAX};\r\n    static const unsigned short ushrt_val[] = {USHRT_MAX};\r\n    static const unsigned int uint_val[]    = {UINT_MAX};\r\n    static const unsigned long ulong_val[]  = {ULONG_MAX};\r\n\r\n    CHECK_INT(char_val[0], CHAR_MAX);\r\n    CHECK_INT(char_val[1], CHAR_MIN);\r\n    CHECK_INT(schar_val[0], SCHAR_MAX);\r\n    CHECK_INT(schar_val[1], SCHAR_MIN);\r\n    CHECK_INT(shrt_val[0], SHRT_MAX);\r\n    CHECK_INT(shrt_val[1], SHRT_MIN);\r\n    CHECK_INT(int_val[0], INT_MAX);\r\n    CHECK_INT(int_val[1], INT_MIN);\r\n    CHECK(long_val[0] == LONG_MAX);\r\n    CHECK(long_val[1] == LONG_MIN);\r\n\r\n    CHECK(uchar_val[0] == UCHAR_MAX);\r\n    CHECK(ushrt_val[0] == USHRT_MAX);\r\n    CHECK(uint_val[0] == UINT_MAX);\r\n    CHECK(ulong_val[0] == ULONG_MAX);\r\n\r\n    static const long long long_long_val[]           = {LLONG_MAX, LLONG_MIN}; // C99 only\r\n    static const unsigned long long ulong_long_val[] = {ULLONG_MAX};\r\n\r\n    CHECK(long_long_val[0] == LLONG_MAX);\r\n    CHECK(long_long_val[1] == LLONG_MIN);\r\n    CHECK(ulong_long_val[0] == ULLONG_MAX);\r\n}\r\n\r\nvoid test_main() { // test basic workings of climits definitions\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/clocale/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <clocale>\r\n#define TEST_NAME \"<clocale>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <clocale>\r\n\r\n#define STDx STD\r\n\r\nvoid test_cpp() { // test C++ header\r\n    static const int cats[] = {\r\n#ifndef LC_MESSAGES\r\n        0,\r\n#else // LC_MESSAGES\r\n        LC_MESSAGES,\r\n#endif // LC_MESSAGES\r\n        LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME};\r\n    STDx lconv* p = (STDx lconv*) nullptr;\r\n\r\n    CHECK(cats[1] == LC_ALL); // to quiet diagnostics\r\n    CHECK(STDx setlocale(LC_ALL, \"\") != nullptr);\r\n    CHECK(STDx localeconv() != p);\r\n}\r\n\r\nvoid test_main() { // test basic workings of clocale definitions\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/cmath1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <cmath>, part 1\r\n#define TEST_NAME  \"<cmath>, part 1\"\r\n#define FLOAT_TYPE IS_DOUBLE\r\n\r\n#include \"tdefs.h\"\r\n#include <cmath>\r\n\r\nstatic const double e      = (double) 2.7182818284590452353602874713526625L;\r\nstatic const double ln2    = (double) 0.69314718055994530941723212145817657L;\r\nstatic const double pi3by4 = (double) 2.35619449019234492884698253745962716L;\r\nstatic const double piby4  = (double) 0.78539816339744830961566084581987572L;\r\nstatic const double rthalf = (double) 0.70710678118654752440084436210484904L;\r\n\r\n#define STDx STD\r\n\r\nvoid test_cpp() { // test C++ header\r\n    double x;\r\n    int xexp;\r\n\r\n    x = HUGE_VAL;\r\n    CHECK(x == HUGE_VAL);\r\n\r\n    CHECK(STDx ceil(5.1) == 6.0);\r\n    CHECK(STDx fabs(-5.0) == 5.0);\r\n    CHECK(STDx floor(5.1) == 5.0);\r\n    CHECK(STDx fmod(-7.0, 3.0) == -1.0);\r\n    CHECK(approx(STDx frexp(96.0, &xexp), 0.75) && xexp == 7);\r\n    CHECK(STDx ldexp(-3.0, 4) == -48.0);\r\n    CHECK(approx(STDx modf(-11.7, &x), -11.7 + 11.0) && x == -11.0);\r\n\r\n    CHECK(approx(STDx acos(-rthalf), pi3by4));\r\n    CHECK(approx(STDx asin(-rthalf), -piby4));\r\n    CHECK(approx(STDx atan(-1.0), -piby4));\r\n    CHECK(approx(STDx atan2(-1.0, 0.0), -2.0 * piby4));\r\n    CHECK(approx(STDx cos(-piby4), rthalf));\r\n    CHECK(approx(STDx sin(-pi3by4), -rthalf));\r\n    CHECK(approx(STDx tan(-piby4), -1.0));\r\n\r\n    CHECK(approx(STDx cosh(-1.0), (e + 1.0 / e) / 2.0));\r\n    CHECK(approx(STDx exp(ln2), 2.0));\r\n    CHECK(approx(STDx log(e * e * e), 3.0));\r\n    CHECK(approx(STDx log10(1e5), 5.0));\r\n    CHECK(approx(STDx pow(2.0, -0.5), rthalf));\r\n    CHECK(approx(STDx sinh(-1.0), -(e - 1.0 / e) / 2.0));\r\n    CHECK(approx(STDx sqrt(2.0), 1.0 / rthalf));\r\n    CHECK(approx(STDx tanh(-1.0), -(e * e - 1.0) / (e * e + 1.0)));\r\n\r\n    double (*pabs)(double) = &STD abs; // C++ overloads\r\n    CHECK((*pabs)(-rthalf) == rthalf);\r\n}\r\n\r\nvoid test_main() { // test basic workings of cmath definitions\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/cmath2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <cmath>, part 2\r\n#define TEST_NAME  \"<cmath>, part 2\"\r\n#define FLOAT_TYPE IS_FLOAT\r\n\r\n#include \"tdefs.h\"\r\n#include <cmath>\r\n\r\nstatic const float e      = (float) 2.7182818284590452353602874713526625L;\r\nstatic const float ln2    = (float) 0.69314718055994530941723212145817657L;\r\nstatic const float pi3by4 = (float) 2.35619449019234492884698253745962716L;\r\nstatic const float piby4  = (float) 0.78539816339744830961566084581987572L;\r\nstatic const float rthalf = (float) 0.70710678118654752440084436210484904L;\r\n\r\n#define STDx STD\r\n\r\nvoid test_cpp() { // test C++ header\r\n    float x;\r\n    int xexp;\r\n\r\n    CHECK(STDx ceilf(5.1F) == 6.0F);\r\n    CHECK(STDx fabsf(-5.0F) == 5.0F);\r\n    CHECK(STDx floorf(5.1F) == 5.0F);\r\n    CHECK(STDx fmodf(-7.0F, 3.0F) == -1.0F);\r\n    CHECK(approx(STDx frexpf(96.0F, &xexp), 0.75F) && xexp == 7);\r\n    CHECK(STDx ldexpf(-3.0F, 4) == -48.0F);\r\n    CHECK(approx(STDx modff(-11.7F, &x), -11.7F + 11.0F) && x == -11.0F);\r\n\r\n    CHECK(approx(STDx acosf(-rthalf), pi3by4));\r\n    CHECK(approx(STDx asinf(-rthalf), -piby4));\r\n    CHECK(approx(STDx atanf(-1.0F), -piby4));\r\n    CHECK(approx(STDx atan2f(-1.0F, 0.0F), -2.0F * piby4));\r\n    CHECK(approx(STDx cosf(-piby4), rthalf));\r\n    CHECK(approx(STDx sinf(-pi3by4), -rthalf));\r\n    CHECK(approx(STDx tanf(-piby4), -1.0F));\r\n\r\n    CHECK(approx(STDx coshf(-1.0F), (e + 1.0F / e) / 2.0F));\r\n    CHECK(approx(STDx expf(ln2), 2.0F));\r\n    CHECK(approx(STDx logf(e * e * e), 3.0F));\r\n    CHECK(approx(STDx log10f(1e5F), 5.0F));\r\n    CHECK(approx(STDx powf(2.0F, -0.5F), rthalf));\r\n    CHECK(approx(STDx sinhf(-1.0F), -(e - 1.0F / e) / 2.0F));\r\n    CHECK(approx(STDx sqrtf(2.0F), 1.0F / rthalf));\r\n    CHECK(approx(STDx tanhf(-1.0F), -(e * e - 1.0F) / (e * e + 1.0F)));\r\n\r\n    float (*pabs)(float) = &STDx abs; // C++ overloads\r\n    CHECK((*pabs)(-rthalf) == rthalf);\r\n\r\n    float (*pceil)(float) = &STDx ceil;\r\n    CHECK((*pceil)(5.1F) == 6.0F);\r\n    float (*pfabs)(float) = &STDx fabs;\r\n    CHECK((*pfabs)(-5.0F) == 5.0F);\r\n    float (*pfloor)(float) = &STDx floor;\r\n    CHECK((*pfloor)(5.1F) == 5.0F);\r\n    float (*pfmod)(float, float) = &STDx fmod;\r\n    CHECK((*pfmod)(-7.0F, 3.0F) == -1.0F);\r\n    float (*pfrexp)(float, int*) = &STDx frexp;\r\n    CHECK(approx((*pfrexp)(96.0F, &xexp), 0.75F) && xexp == 7);\r\n    float (*pldexp)(float, int) = &STDx ldexp;\r\n    CHECK((*pldexp)(-3.0F, 4) == -48.0F);\r\n    float (*pmodf)(float, float*) = &STDx modf;\r\n    CHECK(approx((*pmodf)(-11.7F, &x), -11.7F + 11.0F) && x == -11.0F);\r\n\r\n    float (*pacos)(float) = &STDx acos;\r\n    CHECK(approx((*pacos)(-rthalf), pi3by4));\r\n    float (*pasin)(float) = &STDx asin;\r\n    CHECK(approx((*pasin)(-rthalf), -piby4));\r\n    float (*patan)(float) = &STDx atan;\r\n    CHECK(approx((*patan)(-1.0F), -piby4));\r\n    float (*patan2)(float, float) = &STDx atan2;\r\n    CHECK(approx((*patan2)(-1.0F, 0.0F), -2.0F * piby4));\r\n    float (*pcos)(float) = &STDx cos;\r\n    CHECK(approx((*pcos)(-piby4), rthalf));\r\n    float (*psin)(float) = &STDx sin;\r\n    CHECK(approx((*psin)(-pi3by4), -rthalf));\r\n    float (*ptan)(float) = &STDx tan;\r\n    CHECK(approx((*ptan)(-piby4), -1.0F));\r\n\r\n    float (*pcosh)(float) = &STDx cosh;\r\n    CHECK(approx((*pcosh)(-1.0F), (e + 1.0F / e) / 2.0F));\r\n    float (*pexp)(float) = &STDx exp;\r\n    CHECK(approx((*pexp)(ln2), 2.0F));\r\n    float (*plog)(float) = &STDx log;\r\n    CHECK(approx((*plog)(e * e * e), 3.0F));\r\n    float (*plog10)(float) = &STDx log10;\r\n    CHECK(approx((*plog10)(1e5), 5.0F));\r\n    float (*ppow)(float, float) = &STDx pow;\r\n    CHECK(approx((*ppow)(2.0F, -0.5F), rthalf));\r\n    float (*psinh)(float) = &STDx sinh;\r\n    CHECK(approx((*psinh)(-1.0F), -(e - 1.0F / e) / 2.0F));\r\n    float (*psqrt)(float) = &STDx sqrt;\r\n    CHECK(approx((*psqrt)(2.0F), 1.0F / rthalf));\r\n    float (*ptanh)(float) = &STDx tanh;\r\n    CHECK(approx((*ptanh)(-1.0F), -(e * e - 1.0F) / (e * e + 1.0F)));\r\n}\r\n\r\nvoid test_main() { // test basic workings of cmath definitions\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/cmath3/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <cmath>, part 3\r\n#define TEST_NAME  \"<cmath>, part 3\"\r\n#define FLOAT_TYPE IS_LDOUBLE\r\n\r\n#include \"tdefs.h\"\r\n#include <cmath>\r\n\r\nstatic const long double e      = 2.7182818284590452353602874713526625L;\r\nstatic const long double ln2    = 0.69314718055994530941723212145817657L;\r\nstatic const long double pi3by4 = 2.35619449019234492884698253745962716L;\r\nstatic const long double piby4  = 0.78539816339744830961566084581987572L;\r\nstatic const long double rthalf = 0.70710678118654752440084436210484904L;\r\n\r\n#define STDx STD\r\n\r\nvoid test_cpp() { // test C++ header\r\n    long double x;\r\n    int xexp;\r\n\r\n    CHECK(STDx ceill(5.1L) == 6.0L);\r\n    CHECK(STDx fabsl(-5.0L) == 5.0L);\r\n    CHECK(STDx floorl(5.1L) == 5.0L);\r\n    CHECK(STDx fmodl(-7.0L, 3.0L) == -1.0L);\r\n    CHECK(approx(STDx frexpl(96.0L, &xexp), 0.75L) && xexp == 7);\r\n    CHECK(STDx ldexpl(-3.0L, 4) == -48.0L);\r\n    CHECK(approx(STDx modfl(-11.7L, &x), -11.7L + 11.0L) && x == -11.0L);\r\n\r\n    CHECK(approx(STDx acosl(-rthalf), pi3by4));\r\n    CHECK(approx(STDx asinl(-rthalf), -piby4));\r\n    CHECK(approx(STDx atanl(-1.0L), -piby4));\r\n    CHECK(approx(STDx atan2l(-1.0L, 0.0L), -2.0L * piby4));\r\n    CHECK(approx(STDx cosl(-piby4), rthalf));\r\n    CHECK(approx(STDx sinl(-pi3by4), -rthalf));\r\n    CHECK(approx(STDx tanl(-piby4), -1.0L));\r\n\r\n    CHECK(approx(STDx coshl(-1.0L), (e + 1.0L / e) / 2.0L));\r\n    CHECK(approx(STDx expl(ln2), 2.0L));\r\n    CHECK(approx(STDx logl(e * e * e), 3.0L));\r\n    CHECK(approx(STDx log10l(1e5L), 5.0L));\r\n    CHECK(approx(STDx powl(2.0L, -0.5L), rthalf));\r\n    CHECK(approx(STDx sinhl(-1.0L), -(e - 1.0L / e) / 2.0L));\r\n    CHECK(approx(STDx sqrtl(2.0L), 1.0L / rthalf));\r\n    CHECK(approx(STDx tanhl(-1.0L), -(e * e - 1.0L) / (e * e + 1.0L)));\r\n\r\n    long double (*pabs)(long double) = &STDx abs; // C++ overloads\r\n    CHECK((*pabs)(-rthalf) == rthalf);\r\n\r\n    long double (*pceil)(long double) = &STDx ceil;\r\n    CHECK((*pceil)(5.1L) == 6.0L);\r\n    long double (*pfabs)(long double) = &STDx fabs;\r\n    CHECK((*pfabs)(-5.0L) == 5.0L);\r\n    long double (*pfloor)(long double) = &STDx floor;\r\n    CHECK((*pfloor)(5.1L) == 5.0L);\r\n    long double (*pfmod)(long double, long double) = &STDx fmod;\r\n    CHECK((*pfmod)(-7.0L, 3.0L) == -1.0L);\r\n    long double (*pfrexp)(long double, int*) = &STDx frexp;\r\n    CHECK(approx((*pfrexp)(96.0L, &xexp), 0.75L) && xexp == 7);\r\n    long double (*pldexp)(long double, int) = &STDx ldexp;\r\n    CHECK((*pldexp)(-3.0L, 4) == -48.0L);\r\n    long double (*pmodf)(long double, long double*) = &STDx modf;\r\n    CHECK(approx((*pmodf)(-11.7L, &x), -11.7L + 11.0L) && x == -11.0L);\r\n\r\n    long double (*pacos)(long double) = &STDx acos;\r\n    CHECK(approx((*pacos)(-rthalf), pi3by4));\r\n    long double (*pasin)(long double) = &STDx asin;\r\n    CHECK(approx((*pasin)(-rthalf), -piby4));\r\n    long double (*patan)(long double) = &STDx atan;\r\n    CHECK(approx((*patan)(-1.0L), -piby4));\r\n    long double (*patan2)(long double, long double) = &STDx atan2;\r\n    CHECK(approx((*patan2)(-1.0L, 0.0L), -2.0L * piby4));\r\n    long double (*pcos)(long double) = &STDx cos;\r\n    CHECK(approx((*pcos)(-piby4), rthalf));\r\n    long double (*psin)(long double) = &STDx sin;\r\n    CHECK(approx((*psin)(-pi3by4), -rthalf));\r\n    long double (*ptan)(long double) = &STDx tan;\r\n    CHECK(approx((*ptan)(-piby4), -1.0L));\r\n\r\n    long double (*pcosh)(long double) = &STDx cosh;\r\n    CHECK(approx((*pcosh)(-1.0L), (e + 1.0L / e) / 2.0L));\r\n    long double (*pexp)(long double) = &STDx exp;\r\n    CHECK(approx((*pexp)(ln2), 2.0L));\r\n    long double (*plog)(long double) = &STDx log;\r\n    CHECK(approx((*plog)(e * e * e), 3.0L));\r\n    long double (*plog10)(long double) = &STDx log10;\r\n    CHECK(approx((*plog10)(1e5), 5.0L));\r\n    long double (*ppow)(long double, long double) = &STDx pow;\r\n    CHECK(approx((*ppow)(2.0L, -0.5L), rthalf));\r\n    long double (*psinh)(long double) = &STDx sinh;\r\n    CHECK(approx((*psinh)(-1.0L), -(e - 1.0L / e) / 2.0L));\r\n    long double (*psqrt)(long double) = &STDx sqrt;\r\n    CHECK(approx((*psqrt)(2.0L), 1.0L / rthalf));\r\n    long double (*ptanh)(long double) = &STDx tanh;\r\n    CHECK(approx((*ptanh)(-1.0L), -(e * e - 1.0L) / (e * e + 1.0L)));\r\n}\r\n\r\nvoid test_main() { // test basic workings of cmath definitions\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/codecvt/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <codecvt>\r\n#define TEST_NAME \"<codecvt>\"\r\n\r\n#define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING\r\n\r\n#undef _ENFORCE_FACET_SPECIALIZATIONS\r\n#define _ENFORCE_FACET_SPECIALIZATIONS 0\r\n\r\n#include \"tdefs.h\"\r\n#include <codecvt>\r\n#include <iostream>\r\n#include <locale>\r\n#include <sstream>\r\n#include <string>\r\n\r\ntemplate <class Cvt>\r\nvoid test_write(Cvt*, int maxval = 0x10ffff) { // test codecvt writes\r\n    typedef typename Cvt::intern_type char_type;\r\n    STD stringbuf ostrbuf;\r\n    STD wbuffer_convert<Cvt, char_type> ocvtbuf(&ostrbuf);\r\n    STD basic_ostream<char_type> sink(&ocvtbuf);\r\n\r\n    int ch;\r\n    for (ch = 1; ch <= maxval; ch <<= 1) {\r\n        sink.put((char_type) ch);\r\n    }\r\n\r\n    STD stringbuf istrbuf(ostrbuf.str());\r\n    STD wbuffer_convert<Cvt, char_type> icvtbuf(&istrbuf);\r\n    STD basic_istream<char_type> source(&icvtbuf);\r\n    for (ch = 1; ch <= maxval; ch <<= 1) {\r\n        CHECK_INT(source.get(), ch);\r\n    }\r\n}\r\n\r\nvoid test_main() { // test wbuffer_convert\r\n    test_write((STD codecvt_utf8<unsigned int>*) nullptr);\r\n    test_write((STD codecvt_utf16<unsigned int>*) nullptr);\r\n    test_write((STD codecvt_utf8_utf16<unsigned short>*) nullptr, 0xffff);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/complex1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <complex>, part 1\r\n#define TEST_NAME    \"<complex>, part 1\"\r\n#define CPP_COMPLEX  1\r\n#define COMPLEX_TYPE IS_DOUBLE\r\n#define FLOAT_TYPE   IS_DOUBLE\r\n\r\n#include \"tdefs.h\"\r\n#include <complex>\r\n#include <sstream>\r\n#include <string>\r\n\r\nvoid test_main() { // test basic workings of complex<double> definitions\r\n    Dbl_complex fc0, fc1(1), fc2(2, 2);\r\n\r\n    CHECK(STD real(fc0) == 0 && STD imag(fc0) == 0);\r\n    CHECK(STD real(fc1) == 1 && STD imag(fc1) == 0);\r\n    CHECK(STD real(fc2) == 2 && STD imag(fc2) == 2);\r\n    fc0 += fc2;\r\n    CHECK(STD real(fc0) == 2 && STD imag(fc0) == 2);\r\n    fc0 -= fc1;\r\n    CHECK(STD real(fc0) == 1 && STD imag(fc0) == 2);\r\n    fc0 *= fc2;\r\n    CHECK(STD real(fc0) == -2 && STD imag(fc0) == 6);\r\n    fc0 /= fc2;\r\n    CHECK(STD real(fc0) == 1 && STD imag(fc0) == 2);\r\n\r\n    // test arithmetic\r\n    Ldbl_complex lc(-4, -5);\r\n    fc0 = Dbl_complex(lc);\r\n    CHECK(STD real(fc0) == -4 && STD imag(fc0) == -5);\r\n    fc0 = Flt_complex(3, 4);\r\n    fc0 = Ldbl_complex(3, 4);\r\n    fc0 += fc0;\r\n    fc0 = 2.0 + fc2 + 3.0;\r\n    CHECK(STD real(fc0) == 7 && STD imag(fc0) == 2);\r\n    fc0 = 2.0 - fc2 - 3.0;\r\n    CHECK(STD real(fc0) == -3 && STD imag(fc0) == -2);\r\n    fc0 = 2.0 * fc2 * 3.0;\r\n    CHECK(STD real(fc0) == 12 && STD imag(fc0) == 12);\r\n    fc0 = 8.0 / fc2 / 2.0;\r\n    CHECK(STD real(fc0) == 1 && STD imag(fc0) == -1);\r\n    fc0 = +fc1 + -fc2;\r\n    CHECK(STD real(fc0) == -1 && STD imag(fc0) == -2);\r\n    CHECK(fc2 == fc2 && fc1 == 1.0 && 1.0 == fc1);\r\n    CHECK(fc1 != fc2 && fc1 != 0.0 && 3.0 != fc1);\r\n\r\n    // test I/O\r\n    STD istringstream istr(\"(3, -1) (002,  2e1)\");\r\n    STD ostringstream ostr;\r\n    istr >> fc0;\r\n    CHECK(STD real(fc0) == 3 && STD imag(fc0) == -1);\r\n    ostr << fc0;\r\n    istr >> fc0;\r\n    CHECK(STD real(fc0) == 2 && STD imag(fc0) == 20);\r\n    ostr << fc0;\r\n    CHECK(ostr.str() == \"(3,-1)(2,20)\");\r\n\r\n    // test math functions\r\n    static const double e      = (double) 2.7182818284590452353602874713526625L;\r\n    static const double ln2    = (double) 0.69314718055994530941723212145817657L;\r\n    static const double piby4  = (double) 0.78539816339744830961566084581987572L;\r\n    static const double rthalf = (double) 0.70710678118654752440084436210484904L;\r\n    const double cosh1x        = rthalf * (e + 1 / e) / 2;\r\n    const double sinh1x        = rthalf * (e - 1 / e) / 2;\r\n\r\n    CHECK(approx(STD abs(Dbl_complex(5, -12)), 13));\r\n    CHECK(STD arg(fc1) == 0 && approx(STD arg(fc2), piby4));\r\n    CHECK(STD conj(fc2) == Dbl_complex(2, -2));\r\n\r\n    CHECK(STD norm(Dbl_complex(3, -4)) == 25 && STD norm(fc2) == 8);\r\n    CHECK(STD proj(fc2) == fc2);\r\n    CHECK((STD proj(Dbl_complex(-INFINITY, 3))) == (Dbl_complex(INFINITY, 0.0)));\r\n    CHECK(STD real(STD proj(3)) == 3);\r\n\r\n    CHECK_DOUBLE(STD real(3), 3.0); // test promotions\r\n    CHECK_DOUBLE(STD imag(3), 0.0);\r\n    CHECK_DOUBLE(STD real(STD conj(3)), 3.0);\r\n    CHECK_DOUBLE(STD abs(4), 4.0);\r\n    CHECK_DOUBLE(STD norm(4), 16.0);\r\n    CHECK_DOUBLE(STD arg(5), 0.0);\r\n    CHECK_DOUBLE(STD real(STD proj(3)), 3.0);\r\n\r\n    CHECK_DOUBLE(STD real(STD pow(cmplx(3.0, 0.0), 1)), 3.0);\r\n    CHECK_DOUBLE(STD real(STD pow(2.0, cmplx(2.0, 0.0))), 4.0);\r\n\r\n    fc0 = STD cos(Dbl_complex(piby4, -1));\r\n    CHECK(approx(STD real(fc0), cosh1x) && approx(STD imag(fc0), sinh1x));\r\n    fc0 = STD cosh(Dbl_complex(-1, piby4));\r\n    CHECK(approx(STD real(fc0), cosh1x) && approx(STD imag(fc0), -sinh1x));\r\n    fc0 = STD exp(fc1);\r\n    CHECK(approx(STD real(fc0), e) && STD imag(fc0) == 0);\r\n    fc0 = STD exp(Dbl_complex(1, -piby4));\r\n    CHECK(approx(STD real(fc0), e * rthalf) && approx(STD imag(fc0), -e * rthalf));\r\n    fc0 = STD log(Dbl_complex(1, -1));\r\n    CHECK(approx(STD real(fc0), ln2 / 2) && approx(STD imag(fc0), -piby4));\r\n    fc0 = STD polar(1.0, -piby4);\r\n    CHECK(approx(STD real(fc0), rthalf) && approx(STD imag(fc0), -rthalf));\r\n    fc0 = STD pow(fc2, fc2);\r\n    fc0 = STD pow(fc2, 3.0);\r\n    CHECK(approx(STD real(fc0), -16) && approx(STD imag(fc0), 16));\r\n    fc0 = STD pow(2.0, fc2);\r\n    fc0 = STD sin(Dbl_complex(piby4, -1));\r\n    CHECK(approx(STD real(fc0), cosh1x) && approx(STD imag(fc0), -sinh1x));\r\n    fc0 = STD sinh(Dbl_complex(-1, piby4));\r\n    CHECK(approx(STD real(fc0), -sinh1x) && approx(STD imag(fc0), cosh1x));\r\n    fc0 = STD sqrt(Dbl_complex(0, -1));\r\n    CHECK(approx(STD real(fc0), rthalf) && approx(STD imag(fc0), -rthalf));\r\n\r\n    fc0 = STD acos(Dbl_complex(cosh1x, sinh1x));\r\n    CHECK(approx(STD real(fc0), piby4));\r\n    fc0 = STD acosh(Dbl_complex(cosh1x, -sinh1x));\r\n    CHECK(approx(STD real(fc0), 1));\r\n\r\n    fc0 = STD asin(Dbl_complex(-cosh1x, sinh1x));\r\n    CHECK(approx(STD real(fc0), -piby4));\r\n    fc0 = STD asinh(Dbl_complex(sinh1x, -cosh1x));\r\n    CHECK(approx(STD real(fc0), 1));\r\n\r\n    fc0 = STD atan(Dbl_complex(-1, 0));\r\n    CHECK(approx(STD real(fc0), -piby4));\r\n    fc0 = STD atanh(Dbl_complex(0, -1));\r\n    CHECK(approx(STD real(fc0), 0));\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/complex2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <complex>, part 2\r\n#define TEST_NAME    \"<complex>, part 2\"\r\n#define CPP_COMPLEX  1\r\n#define COMPLEX_TYPE IS_FLOAT\r\n#define FLOAT_TYPE   IS_FLOAT\r\n\r\n#include \"tdefs.h\"\r\n#include <complex>\r\n#include <sstream>\r\n#include <string>\r\n\r\nvoid test_main() { // test basic workings of complex<float> definitions\r\n    Flt_complex fc0, fc1(1), fc2(2, 2);\r\n\r\n    CHECK(STD real(fc0) == 0 && STD imag(fc0) == 0);\r\n    CHECK(STD real(fc1) == 1 && STD imag(fc1) == 0);\r\n    CHECK(STD real(fc2) == 2 && STD imag(fc2) == 2);\r\n    fc0 += fc2;\r\n    CHECK(STD real(fc0) == 2 && STD imag(fc0) == 2);\r\n    fc0 -= fc1;\r\n    CHECK(STD real(fc0) == 1 && STD imag(fc0) == 2);\r\n    fc0 *= fc2;\r\n    CHECK(STD real(fc0) == -2 && STD imag(fc0) == 6);\r\n    fc0 /= fc2;\r\n    CHECK(STD real(fc0) == 1 && STD imag(fc0) == 2);\r\n\r\n    // test arithmetic\r\n    Dbl_complex dc(2, 3);\r\n    fc0 = Flt_complex(dc);\r\n    CHECK(STD real(fc0) == 2 && STD imag(fc0) == 3);\r\n    Ldbl_complex lc(-4, -5);\r\n    fc0 = Flt_complex(lc);\r\n    CHECK(STD real(fc0) == -4 && STD imag(fc0) == -5);\r\n    fc0 = Dbl_complex(3, 4);\r\n    fc0 = Ldbl_complex(3, 4);\r\n    fc0 += fc0;\r\n    fc0 = 2.0F + fc2 + 3.0F;\r\n    CHECK(STD real(fc0) == 7 && STD imag(fc0) == 2);\r\n    fc0 = 2.0F - fc2 - 3.0F;\r\n    CHECK(STD real(fc0) == -3 && STD imag(fc0) == -2);\r\n    fc0 = 2.0F * fc2 * 3.0F;\r\n    CHECK(STD real(fc0) == 12 && STD imag(fc0) == 12);\r\n    fc0 = 8.0F / fc2 / 2.0F;\r\n    CHECK(STD real(fc0) == 1 && STD imag(fc0) == -1);\r\n    fc0 = +fc1 + -fc2;\r\n    CHECK(STD real(fc0) == -1 && STD imag(fc0) == -2);\r\n    CHECK(fc2 == fc2 && fc1 == 1.0F && 1.0F == fc1);\r\n    CHECK(fc1 != fc2 && fc1 != 0.0F && 3.0F != fc1);\r\n\r\n    // test I/O\r\n    STD istringstream istr(\"(3, -1) (002,  2e1)\");\r\n    STD ostringstream ostr;\r\n    istr >> fc0;\r\n    CHECK(STD real(fc0) == 3 && STD imag(fc0) == -1);\r\n    ostr << fc0;\r\n    istr >> fc0;\r\n    CHECK(STD real(fc0) == 2 && STD imag(fc0) == 20);\r\n    ostr << fc0;\r\n    CHECK(ostr.str() == \"(3,-1)(2,20)\");\r\n\r\n    // test math functions\r\n    static const float e      = (float) 2.7182818284590452353602874713526625L;\r\n    static const float ln2    = (float) 0.69314718055994530941723212145817657L;\r\n    static const float piby4  = (float) 0.78539816339744830961566084581987572L;\r\n    static const float rthalf = (float) 0.70710678118654752440084436210484904L;\r\n    const float cosh1x        = (float) (rthalf * (e + 1 / e) / 2);\r\n    const float sinh1x        = (float) (rthalf * (e - 1 / e) / 2);\r\n\r\n    CHECK(approx(STD abs(Flt_complex(5, -12)), 13));\r\n    CHECK(STD arg(fc1) == 0 && approx(STD arg(fc2), piby4));\r\n    CHECK(STD conj(fc2) == Flt_complex(2, -2));\r\n\r\n    CHECK(STD norm(Flt_complex(3, -4)) == 25 && STD norm(fc2) == 8);\r\n    CHECK(STD proj(fc2) == fc2);\r\n    CHECK((STD proj(Flt_complex(-INFINITY, 3))) == (Flt_complex(INFINITY, 0.0)));\r\n    CHECK(STD real(STD proj(3.0F)) == 3.0F);\r\n\r\n    fc0 = STD cos(Flt_complex(piby4, -1));\r\n    CHECK(approx(STD real(fc0), cosh1x) && approx(STD imag(fc0), sinh1x));\r\n    fc0 = STD cosh(Flt_complex(-1, piby4));\r\n    CHECK(approx(STD real(fc0), cosh1x) && approx(STD imag(fc0), -sinh1x));\r\n    fc0 = STD exp(fc1);\r\n    CHECK(approx(STD real(fc0), e) && STD imag(fc0) == 0);\r\n    fc0 = STD exp(Flt_complex(1, -piby4));\r\n    CHECK(approx(STD real(fc0), e * rthalf) && approx(STD imag(fc0), -e * rthalf));\r\n    fc0 = STD log(Flt_complex(1, -1));\r\n    CHECK(approx(STD real(fc0), ln2 / 2) && approx(STD imag(fc0), -piby4));\r\n    CHECK(STD norm(Flt_complex(3, -4)) == 25 && STD norm(fc2) == 8);\r\n    fc0 = STD polar(1.0F, -piby4);\r\n    CHECK(approx(STD real(fc0), rthalf) && approx(STD imag(fc0), -rthalf));\r\n    fc0 = STD pow(fc2, fc2);\r\n    fc0 = STD pow(fc2, 3.0F);\r\n    CHECK(approx(STD real(fc0), -16) && approx(STD imag(fc0), 16));\r\n    fc0 = STD pow(2.0F, fc2);\r\n    fc0 = STD sin(Flt_complex(piby4, -1));\r\n    CHECK(approx(STD real(fc0), cosh1x) && approx(STD imag(fc0), -sinh1x));\r\n    fc0 = STD sinh(Flt_complex(-1, piby4));\r\n    CHECK(approx(STD real(fc0), -sinh1x) && approx(STD imag(fc0), cosh1x));\r\n    fc0 = STD sqrt(Flt_complex(0, -1));\r\n    CHECK(approx(STD real(fc0), rthalf) && approx(STD imag(fc0), -rthalf));\r\n\r\n    fc0 = STD acos(Flt_complex(cosh1x, sinh1x));\r\n    CHECK(approx(STD real(fc0), piby4));\r\n    fc0 = STD acosh(Flt_complex(cosh1x, -sinh1x));\r\n    CHECK(approx(STD real(fc0), 1));\r\n\r\n    fc0 = STD asin(Flt_complex(-cosh1x, sinh1x));\r\n    CHECK(approx(STD real(fc0), -piby4));\r\n    fc0 = STD asinh(Flt_complex(sinh1x, -cosh1x));\r\n    CHECK(approx(STD real(fc0), 1));\r\n\r\n    fc0 = STD atan(Flt_complex(-1, 0));\r\n    CHECK(approx(STD real(fc0), -piby4));\r\n    fc0 = STD atanh(Flt_complex(0, -1));\r\n    CHECK(approx(STD real(fc0), 0));\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/complex3/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <complex>, part 3\r\n#define TEST_NAME    \"<complex>, part 3\"\r\n#define CPP_COMPLEX  1\r\n#define COMPLEX_TYPE IS_LDOUBLE\r\n#define FLOAT_TYPE   IS_LDOUBLE\r\n\r\n#include \"tdefs.h\"\r\n#include <complex>\r\n#include <sstream>\r\n#include <string>\r\n\r\nvoid test_main() { // test basic workings of complex<long double> definitions\r\n    Ldbl_complex fc0, fc1(1), fc2(2, 2);\r\n\r\n    CHECK(STD real(fc0) == 0 && STD imag(fc0) == 0);\r\n    CHECK(STD real(fc1) == 1 && STD imag(fc1) == 0);\r\n    CHECK(STD real(fc2) == 2 && STD imag(fc2) == 2);\r\n    fc0 += fc2;\r\n    CHECK(STD real(fc0) == 2 && STD imag(fc0) == 2);\r\n    fc0 -= fc1;\r\n    CHECK(STD real(fc0) == 1 && STD imag(fc0) == 2);\r\n    fc0 *= fc2;\r\n    CHECK(STD real(fc0) == -2 && STD imag(fc0) == 6);\r\n    fc0 /= fc2;\r\n    CHECK(STD real(fc0) == 1 && STD imag(fc0) == 2);\r\n\r\n    // test arithmetic\r\n    Dbl_complex dc(2, 3);\r\n    fc0 = Flt_complex(dc);\r\n    CHECK(STD real(fc0) == 2 && STD imag(fc0) == 3);\r\n    Ldbl_complex lc(-4, -5);\r\n    fc0 = Dbl_complex(lc);\r\n    CHECK(STD real(fc0) == -4 && STD imag(fc0) == -5);\r\n    fc0 += fc0;\r\n    fc0 = 2.0L + fc2 + 3.0L;\r\n    CHECK(STD real(fc0) == 7 && STD imag(fc0) == 2);\r\n    fc0 = 2.0L - fc2 - 3.0L;\r\n    CHECK(STD real(fc0) == -3 && STD imag(fc0) == -2);\r\n    fc0 = 2.0L * fc2 * 3.0L;\r\n    CHECK(STD real(fc0) == 12 && STD imag(fc0) == 12);\r\n    fc0 = 8.0L / fc2 / 2.0L;\r\n    CHECK(STD real(fc0) == 1 && STD imag(fc0) == -1);\r\n    fc0 = +fc1 + -fc2;\r\n    CHECK(STD real(fc0) == -1 && STD imag(fc0) == -2);\r\n    CHECK(fc2 == fc2 && fc1 == 1.0L && 1.0L == fc1);\r\n    CHECK(fc1 != fc2 && fc1 != 0.0L && 3.0L != fc1);\r\n\r\n    // test I/O\r\n    STD istringstream istr(\"(3, -1) (002,  2e1)\");\r\n    STD ostringstream ostr;\r\n    istr >> fc0;\r\n    CHECK(STD real(fc0) == 3 && STD imag(fc0) == -1);\r\n    ostr << fc0;\r\n    istr >> fc0;\r\n    CHECK(STD real(fc0) == 2 && STD imag(fc0) == 20);\r\n    ostr << fc0;\r\n    CHECK(ostr.str() == \"(3,-1)(2,20)\");\r\n\r\n    // test math functions\r\n    static const long double e      = 2.7182818284590452353602874713526625L;\r\n    static const long double ln2    = 0.69314718055994530941723212145817657L;\r\n    static const long double piby4  = 0.78539816339744830961566084581987572L;\r\n    static const long double rthalf = 0.70710678118654752440084436210484904L;\r\n    const long double cosh1x        = rthalf * (e + 1 / e) / 2;\r\n    const long double sinh1x        = rthalf * (e - 1 / e) / 2;\r\n\r\n    CHECK(approx(STD abs(Ldbl_complex(5, -12)), 13));\r\n    CHECK(STD arg(fc1) == 0 && approx(STD arg(fc2), piby4));\r\n    CHECK(STD conj(fc2) == Ldbl_complex(2, -2));\r\n\r\n    CHECK(STD norm(Ldbl_complex(3, -4)) == 25 && STD norm(fc2) == 8);\r\n    CHECK(STD proj(fc2) == fc2);\r\n    CHECK((STD proj(Ldbl_complex(-INFINITY, 3))) == (Ldbl_complex(INFINITY, 0.0)));\r\n    CHECK(STD real(STD proj(3.0L)) == 3.0L);\r\n\r\n    fc0 = STD cos(Ldbl_complex(piby4, -1));\r\n    CHECK(approx(STD real(fc0), cosh1x) && approx(STD imag(fc0), sinh1x));\r\n    fc0 = STD cosh(Ldbl_complex(-1, piby4));\r\n    CHECK(approx(STD real(fc0), cosh1x) && approx(STD imag(fc0), -sinh1x));\r\n    fc0 = STD exp(fc1);\r\n    CHECK(approx(STD real(fc0), e) && STD imag(fc0) == 0);\r\n    fc0 = STD exp(Ldbl_complex(1, -piby4));\r\n    CHECK(approx(STD real(fc0), e * rthalf) && approx(STD imag(fc0), -e * rthalf));\r\n    fc0 = STD log(Ldbl_complex(1, -1));\r\n    CHECK(approx(STD real(fc0), ln2 / 2) && approx(STD imag(fc0), -piby4));\r\n    CHECK(STD norm(Ldbl_complex(3, -4)) == 25 && STD norm(fc2) == 8);\r\n    fc0 = STD polar(1.0L, -piby4);\r\n    CHECK(approx(STD real(fc0), rthalf) && approx(STD imag(fc0), -rthalf));\r\n    fc0 = STD pow(fc2, fc2);\r\n    fc0 = STD pow(fc2, 3.0L);\r\n    CHECK(approx(STD real(fc0), -16) && approx(STD imag(fc0), 16));\r\n    fc0 = STD pow(2.0L, fc2);\r\n    fc0 = STD sin(Ldbl_complex(piby4, -1));\r\n    CHECK(approx(STD real(fc0), cosh1x) && approx(STD imag(fc0), -sinh1x));\r\n    fc0 = STD sinh(Ldbl_complex(-1, piby4));\r\n    CHECK(approx(STD real(fc0), -sinh1x) && approx(STD imag(fc0), cosh1x));\r\n    fc0 = STD sqrt(Ldbl_complex(0, -1));\r\n    CHECK(approx(STD real(fc0), rthalf) && approx(STD imag(fc0), -rthalf));\r\n\r\n    fc0 = STD acos(Ldbl_complex(cosh1x, sinh1x));\r\n    CHECK(approx(STD real(fc0), piby4));\r\n    fc0 = STD acosh(Ldbl_complex(cosh1x, -sinh1x));\r\n    CHECK(approx(STD real(fc0), 1));\r\n\r\n    fc0 = STD asin(Ldbl_complex(-cosh1x, sinh1x));\r\n    CHECK(approx(STD real(fc0), -piby4));\r\n    fc0 = STD asinh(Ldbl_complex(sinh1x, -cosh1x));\r\n    CHECK(approx(STD real(fc0), 1));\r\n\r\n    fc0 = STD atan(Ldbl_complex(-1, 0));\r\n    CHECK(approx(STD real(fc0), -piby4));\r\n    fc0 = STD atanh(Ldbl_complex(0, -1));\r\n    CHECK(approx(STD real(fc0), 0));\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/csetjmp/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\..\\env_minus_pure.lst\r\n"
  },
  {
    "path": "tests/tr1/tests/csetjmp/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <csetjmp>\r\n#define TEST_NAME \"<csetjmp>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <csetjmp>\r\n\r\n#pragma warning(disable : 4611) // interaction between '_setjmp' and C++ object destruction is non-portable\r\n#pragma warning(disable : 4793) // function compiled as native\r\n\r\n#define STDx STD\r\n\r\nvoid test_cpp() { // test C++ header\r\n    STDx jmp_buf jbuf;\r\n    volatile int ctr = 0;\r\n\r\n    switch (setjmp(jbuf)) { // jump among cases\r\n    case 0:\r\n        ctr = ctr + 1;\r\n        CHECK_INT(ctr, 1);\r\n        STDx longjmp(jbuf, 5);\r\n\r\n    case 5:\r\n        ctr = ctr + 1;\r\n        CHECK_INT(ctr, 2);\r\n        break;\r\n\r\n    default:\r\n        CHECK_MSG(\"longjmp returns properly\", 0);\r\n    }\r\n\r\n#undef OK\r\n#ifndef setjmp\r\n#define OK 0\r\n#else // setjmp\r\n#define OK 1\r\n#endif // setjmp\r\n    CHECK_MSG(\"setjmp is a macro\", OK);\r\n}\r\n\r\nvoid test_main() { // test basic workings of csetjmp definitions\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/csignal/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <csignal>\r\n#define TEST_NAME \"<csignal>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <csignal>\r\n\r\n#ifdef _M_CEE_PURE\r\nvoid test_main() { // test nothing\r\n}\r\n#else // _M_CEE_PURE\r\nextern \"C\" {\r\ntypedef void (*Psig)(int);\r\n\r\nSTD sig_atomic_t ctr = 0;\r\n\r\nvoid field_int(int sig) { // handle SIGINT and return\r\n    CHECK_INT(sig, SIGINT);\r\n    ++ctr;\r\n}\r\n} // extern \"C\"\r\n\r\nvoid test_cpp() { // test C++ header\r\n    CHECK(STD signal(SIGINT, &field_int) == SIG_DFL);\r\n    CHECK(STD raise(SIGINT) == 0);\r\n    STD signal(SIGINT, SIG_DFL);\r\n    CHECK_INT(ctr, 1);\r\n}\r\n\r\nvoid test_main() { // test basic workings of csignal definitions\r\n    static const int sigs[]  = {SIGABRT, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERM};\r\n    static const Psig rets[] = {SIG_DFL, SIG_ERR, SIG_IGN};\r\n\r\n    CHECK(sigs[0] != sigs[1]);\r\n    CHECK(rets[0] != rets[1]);\r\n\r\n    test_cpp();\r\n}\r\n#endif // _M_CEE_PURE\r\n"
  },
  {
    "path": "tests/tr1/tests/cstdarg/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <cstdarg>\r\n#define TEST_NAME \"<cstdarg>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <cstdarg>\r\n#include <string.h>\r\n\r\n#pragma warning(disable : 4793) // function compiled as native\r\n\r\nvoid test_cpp(int first, ...) { // test C++ header\r\n    CSTD va_list ap, ap2;\r\n\r\n    va_start(ap, first);\r\n\r\n    va_copy(ap2, ap); // C99 only\r\n\r\n    CHECK_MEM(&ap2, &ap, sizeof(CSTD va_list));\r\n    CHECK_INT(first, 1);\r\n    CHECK_INT(va_arg(ap, int), 2);\r\n    va_end(ap);\r\n}\r\n\r\nvoid test_main() { // test basic workings of cstdarg definitions\r\n    test_cpp(1, 2);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/cstdbool/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <cstdbool>\r\n#define TEST_NAME \"<cstdbool>\"\r\n\r\n#define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include <cstdbool>\r\n\r\nvoid test_cpp() { // test C++ header\r\n#undef OK\r\n#ifdef bool\r\n#define OK 0\r\n#else // bool\r\n#define OK 1\r\n#endif // bool\r\n    CHECK_MSG(\"bool is not a macro\", OK);\r\n\r\n#undef OK\r\n#ifdef false\r\n#define OK 0\r\n#else // false\r\n#define OK 1\r\n#endif // false\r\n    CHECK_MSG(\"false is not a macro\", OK);\r\n\r\n#undef OK\r\n#ifdef true\r\n#define OK 0\r\n#else // true\r\n#define OK 1\r\n#endif // true\r\n    CHECK_MSG(\"true is not a macro\", OK);\r\n}\r\n\r\nvoid test_main() { // test basic workings of cstdbool definitions\r\n    bool f = false;\r\n    bool t = true;\r\n\r\n    CHECK_INT(false, 0);\r\n    CHECK_INT(true, 1);\r\n    CHECK_INT(f, false);\r\n    CHECK_INT(t, true);\r\n    CHECK_INT(__bool_true_false_are_defined, 1);\r\n\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/cstddef/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <cstddef>\r\n#define TEST_NAME \"<cstddef>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <cstddef>\r\n#include <limits.h>\r\n\r\n#define STDx STD\r\n\r\n// type definitions\r\ntypedef struct {\r\n    char f1;\r\n    struct {\r\n        float flt;\r\n    } f2;\r\n    int f3;\r\n} Str;\r\n\r\nvoid test_cpp() { // test C++ header\r\n    static const STDx size_t offs[] = {offsetof(Str, f1), offsetof(Str, f2), offsetof(Str, f3)};\r\n    STDx ptrdiff_t pdiff            = &offs[2] - &offs[0];\r\n    wchar_t wc                      = L'Z';\r\n    Str x                           = {1, {2}, 3};\r\n    char* ps                        = (char*) &x;\r\n\r\n    CHECK_INT(sizeof(STDx size_t), sizeof(sizeof(char)));\r\n    CHECK_INT(pdiff, &offs[2] - &offs[0]);\r\n    CHECK_INT(wc, L'Z');\r\n    CHECK(offs[0] < offs[1]);\r\n    CHECK_INT((long) *(float*) (ps + offs[1]), 2);\r\n}\r\n\r\nvoid test_main() { // test basic workings of cstddef definitions\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/cstdint/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <cstdint>\r\n#define TEST_NAME \"<cstdint>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <cstdint>\r\n\r\n#define STDx STD\r\n\r\n#ifndef INT_LEAST8_MAX\r\n#define INT_LEAST8_MAX 0x7f\r\n#endif // INT_LEAST8_MAX\r\n\r\n#ifndef INT_LEAST16_MAX\r\n#define INT_LEAST16_MAX 0x7fff\r\n#endif // INT_LEAST16_MAX\r\n\r\n#ifndef INT_LEAST32_MAX\r\n#define INT_LEAST32_MAX 0x7fffffff\r\n#endif // INT_LEAST32_MAX\r\n\r\n#ifndef INT_LEAST64_MAX\r\n#define INT_LEAST64_MAX 0x7fffffffffffffffLL\r\n#endif // INT_LEAST8_MAX\r\n\r\n#ifndef UINT_LEAST8_MAX\r\n#define UINT_LEAST8_MAX 0xff\r\n#endif // UINT_LEAST8_MAX\r\n\r\n#ifndef UINT_LEAST16_MAX\r\n#define UINT_LEAST16_MAX 0xffff\r\n#endif // UINT_LEAST16_MAX\r\n\r\n#ifndef UINT_LEAST32_MAX\r\n#define UINT_LEAST32_MAX 0xffffffff\r\n#endif // UINT_LEAST32_MAX\r\n\r\n#ifndef UINT_LEAST64_MAX\r\n#define UINT_LEAST64_MAX 0xffffffffffffffffULL\r\n#endif // UINT_LEAST8_MAX\r\n\r\n#ifndef INTMAX_MAX\r\n#define INTMAX_MAX 0x7fffffffffffffffLL\r\n#endif // INTMAX_MAX\r\n\r\n#ifndef UINTMAX_MAX\r\n#define UINTMAX_MAX 0xffffffffffffffffULL\r\n#endif // UINTMAX_MAX\r\n\r\nvoid test_cpp() { // test C++ header\r\n    static const STDx int8_t int8_val[]   = {INT8_MAX};\r\n    static const STDx int16_t int16_val[] = {INT16_MAX};\r\n    static const STDx int32_t int32_val[] = {INT32_MAX};\r\n    static const STDx int64_t int64_val[] = {INT64_MAX};\r\n\r\n    static const STDx uint8_t uint8_val[]   = {UINT_LEAST8_MAX};\r\n    static const STDx uint16_t uint16_val[] = {UINT_LEAST16_MAX};\r\n    static const STDx uint32_t uint32_val[] = {UINT_LEAST32_MAX};\r\n    static const STDx uint64_t uint64_val[] = {UINT_LEAST64_MAX};\r\n\r\n    static const STDx int_least8_t int_least8_val[]   = {INT8_C(0) + INT_LEAST8_MAX};\r\n    static const STDx int_least16_t int_least16_val[] = {INT16_C(0) + INT_LEAST16_MAX};\r\n    static const STDx int_least32_t int_least32_val[] = {INT32_C(0) + INT_LEAST32_MAX};\r\n    static const STDx int_least64_t int_least64_val[] = {INT64_C(0) + INT_LEAST64_MAX};\r\n\r\n    static const STDx uint_least8_t uint_least8_val[]   = {UINT8_C(0) + UINT_LEAST8_MAX};\r\n    static const STDx uint_least16_t uint_least16_val[] = {UINT16_C(0) + UINT_LEAST16_MAX};\r\n    static const STDx uint_least32_t uint_least32_val[] = {UINT32_C(0) + UINT_LEAST32_MAX};\r\n    static const STDx uint_least64_t uint_least64_val[] = {UINT64_C(0) + UINT_LEAST64_MAX};\r\n\r\n    static const STDx int_fast8_t int_fast8_val[]   = {INT_FAST8_MAX};\r\n    static const STDx int_fast16_t int_fast16_val[] = {INT_FAST16_MAX};\r\n    static const STDx int_fast32_t int_fast32_val[] = {INT_FAST32_MAX};\r\n    static const STDx int_fast64_t int_fast64_val[] = {INT_FAST64_MAX};\r\n\r\n    static const STDx uint_fast8_t uint_fast8_val[]   = {UINT_FAST8_MAX};\r\n    static const STDx uint_fast16_t uint_fast16_val[] = {UINT_FAST16_MAX};\r\n    static const STDx uint_fast32_t uint_fast32_val[] = {UINT_FAST32_MAX};\r\n    static const STDx uint_fast64_t uint_fast64_val[] = {UINT_FAST64_MAX};\r\n\r\n    static const STDx intmax_t intmax_val[] = {INTMAX_C(0) + INTMAX_MAX};\r\n    static const STDx intptr_t intptr_val[] = {INTPTR_MAX};\r\n\r\n    static const STDx uintmax_t uintmax_val[] = {UINTMAX_C(0) + UINTMAX_MAX};\r\n    static const STDx uintptr_t uintptr_val[] = {UINTPTR_MAX};\r\n\r\n    CHECK_INT(int8_val[0], INT8_MAX);\r\n    CHECK_INT(int16_val[0], INT16_MAX);\r\n    CHECK_INT(int32_val[0], INT32_MAX);\r\n    CHECK(int64_val[0] == INT64_MAX);\r\n\r\n    CHECK(uint8_val[0] == UINT8_MAX);\r\n    CHECK(uint16_val[0] == UINT16_MAX);\r\n    CHECK(uint32_val[0] == UINT32_MAX);\r\n    CHECK(uint64_val[0] == UINT64_MAX);\r\n\r\n    CHECK_INT(int_least8_val[0], INT_LEAST8_MAX);\r\n    CHECK_INT(int_least16_val[0], INT_LEAST16_MAX);\r\n    CHECK_INT(int_least32_val[0], INT_LEAST32_MAX);\r\n    CHECK(int_least64_val[0] == INT_LEAST64_MAX);\r\n\r\n    CHECK(uint_least8_val[0] == UINT_LEAST8_MAX);\r\n    CHECK(uint_least16_val[0] == UINT_LEAST16_MAX);\r\n    CHECK(uint_least32_val[0] == UINT_LEAST32_MAX);\r\n    CHECK(uint_least64_val[0] == UINT_LEAST64_MAX);\r\n\r\n    CHECK_INT(int_fast8_val[0], INT_FAST8_MAX);\r\n    CHECK_INT(int_fast16_val[0], INT_FAST16_MAX);\r\n    CHECK_INT(int_fast32_val[0], INT_FAST32_MAX);\r\n    CHECK(int_fast64_val[0] == INT_FAST64_MAX);\r\n\r\n    CHECK(uint_fast8_val[0] == UINT_FAST8_MAX);\r\n    CHECK(uint_fast16_val[0] == UINT_FAST16_MAX);\r\n    CHECK(uint_fast32_val[0] == UINT_FAST32_MAX);\r\n    CHECK(uint_fast64_val[0] == UINT_FAST64_MAX);\r\n\r\n    CHECK(intmax_val[0] == INTMAX_MAX);\r\n    CHECK(intptr_val[0] == INTPTR_MAX);\r\n\r\n    CHECK(uintmax_val[0] == UINTMAX_MAX);\r\n    CHECK(uintptr_val[0] == UINTPTR_MAX);\r\n}\r\n\r\nvoid test_main() { // test basic workings of cstdint definitions\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/cstdio/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <cstdio>\r\n#define TEST_NAMEX \"<cstdio>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <assert.h>\r\n#include <cstdio>\r\n#include <errno.h>\r\n#include <stdarg.h>\r\n#include <string.h>\r\n\r\n#include <temp_file_name.hpp>\r\n\r\n#undef clearerr // tested in stdio2.c\r\n#undef feof\r\n#undef ferror\r\n#undef getc\r\n#undef getchar\r\n#undef putc\r\n#undef putchar\r\n\r\n#define STDx STD\r\n\r\n#include <stddef.h>\r\n#include <stdint.h>\r\n\r\n#pragma warning(disable : 4793) // function compiled as native\r\n\r\nstatic int vfs(const char* fmt, ...) { // test vfscanf\r\n    int ans;\r\n    va_list ap;\r\n\r\n    va_start(ap, fmt);\r\n    ans = STDx vfscanf(stdin, fmt, ap);\r\n    va_end(ap);\r\n    return ans;\r\n}\r\n\r\nstatic int vs(const char* fmt, ...) { // test vscanf\r\n    int ans;\r\n    va_list ap;\r\n\r\n    va_start(ap, fmt);\r\n    ans = STDx vscanf(fmt, ap);\r\n    va_end(ap);\r\n    return ans;\r\n}\r\n\r\nstatic void vfp(const char* fmt, ...) { // test vfprintf\r\n    va_list ap;\r\n\r\n    va_start(ap, fmt);\r\n    STDx vfprintf(stdout, fmt, ap);\r\n    va_end(ap);\r\n}\r\n\r\nstatic void vp(const char* fmt, ...) { // test vprintf\r\n    va_list ap;\r\n\r\n    va_start(ap, fmt);\r\n    STDx vprintf(fmt, ap);\r\n    va_end(ap);\r\n}\r\n\r\nstatic void vsp(char* s, const char* fmt, ...) { // test vsprintf\r\n    va_list ap;\r\n\r\n    va_start(ap, fmt);\r\n    STDx vsprintf(s, fmt, ap);\r\n    va_end(ap);\r\n}\r\n\r\nvoid test_cpp() { // test C++ header\r\n    char buf[32], ch;\r\n    int in;\r\n    long lo;\r\n    short sh;\r\n\r\n    CHECK_INT(STDx sprintf(buf, \"%2c|%-4d|%.4o|%#lX\", 'a', -4, 8, 12L), 16);\r\n    CHECK_STR(buf, \" a|-4  |0010|0XC\");\r\n    CHECK_INT(STDx sscanf(buf, \" %c|%hd |%i|%lx\", &ch, &sh, &in, &lo), 4);\r\n    CHECK_INT(ch, 'a');\r\n    CHECK_INT(sh, -4);\r\n    CHECK_INT(in, 8);\r\n    CHECK_INT(lo, 12);\r\n\r\n    { // test file I/O\r\n        const char* tn;\r\n        STDx FILE* pf;\r\n        STDx fpos_t fp1;\r\n        int in1;\r\n        long off;\r\n\r\n        const auto temp_name = temp_file_name();\r\n        tn                   = temp_name.c_str();\r\n        assert((pf = STDx fopen(tn, \"w+\")) != nullptr);\r\n\r\n        STDx setbuf(pf, (char*) nullptr);\r\n        CHECK_INT(STDx fprintf(pf, \"123\\n\"), 4);\r\n        CHECK((off = STDx ftell(pf)) != -1);\r\n        CHECK_INT(STDx fprintf(pf, \"456\\n\"), 4);\r\n        CHECK(STDx fgetpos(pf, &fp1) == 0);\r\n        CHECK_INT(STDx fprintf(pf, \"789\\n\"), 4);\r\n        STDx rewind(pf);\r\n        CHECK_INT(STDx fscanf(pf, \"%i\", &in1), 1);\r\n        CHECK_INT(in1, 123);\r\n        CHECK(STDx fsetpos(pf, &fp1) == 0);\r\n        CHECK_INT(STDx fscanf(pf, \"%i\", &in1), 1);\r\n        CHECK_INT(in1, 789);\r\n        CHECK(STDx fseek(pf, off, SEEK_SET) == 0);\r\n        CHECK_INT(STDx fscanf(pf, \"%i\", &in1), 1);\r\n        CHECK_INT(in1, 456);\r\n        assert(STDx fclose(pf) == 0 && STDx freopen(tn, \"r\", stdin) == stdin);\r\n        CHECK(STDx setvbuf(stdin, buf, _IOLBF, sizeof(buf)) == 0);\r\n        CHECK_INT(STDx scanf(\"%i\", &in1), 1);\r\n        CHECK_INT(in1, 123);\r\n\r\n        CHECK_INT(vs(\"%i\", &in1), 1); // test C99 functions\r\n        CHECK_INT(in1, 456);\r\n        CHECK_INT(vfs(\"%i\", &in1), 1);\r\n        CHECK_INT(in1, 789);\r\n\r\n        CHECK(STDx fclose(stdin) == 0);\r\n        STDx remove(tn);\r\n    }\r\n\r\n    { // test character I/O\r\n        char tname[L_tmpnam];\r\n        char tn[100];\r\n        STDx FILE* pf;\r\n\r\n        const auto temp_name1 = temp_file_name();\r\n        CHECK(temp_name1.size() < sizeof(tname));\r\n        CSTD strcpy_s(tname, sizeof(tname), temp_name1.c_str());\r\n\r\n        const auto temp_name2 = temp_file_name();\r\n        CHECK(temp_name2.size() < sizeof(tn));\r\n        CSTD strcpy_s(tn, sizeof(tn), temp_name2.c_str());\r\n\r\n        CHECK(CSTD strcmp(tn, tname) != 0);\r\n        assert((pf = STDx fopen(tname, \"w\")) != nullptr);\r\n\r\n        CHECK(STDx feof(pf) == 0);\r\n        CHECK(STDx ferror(pf) == 0);\r\n        CHECK_INT(STDx fgetc(pf), EOF);\r\n        CHECK(STDx feof(pf) == 0);\r\n        CHECK(STDx ferror(pf) != 0);\r\n        STDx clearerr(pf);\r\n        CHECK(STDx ferror(pf) == 0);\r\n\r\n        CHECK_INT(STDx fputc('a', pf), 'a');\r\n        CHECK_INT(STDx putc('b', pf), 'b');\r\n        CHECK(0 <= STDx fputs(\"cde\\n\", pf));\r\n        CHECK(0 <= STDx fputs(\"fghij\\n\", pf));\r\n        CHECK(STDx fflush(pf) == 0);\r\n        CHECK_INT(STDx fwrite(\"klmnopq\\n\", 2, 4, pf), 4);\r\n        CHECK(STDx fclose(pf) == 0);\r\n\r\n        assert(STDx freopen(tname, \"r\", stdin) == stdin);\r\n        CHECK_INT(STDx fgetc(stdin), 'a');\r\n        CHECK_INT(STDx getc(stdin), 'b');\r\n        CHECK_INT(STDx getchar(), 'c');\r\n        CHECK_PTR(STDx fgets(buf, sizeof(buf), stdin), buf);\r\n        CHECK_STR(buf, \"de\\n\");\r\n        CHECK_INT(STDx ungetc('x', stdin), 'x');\r\n\r\n        CHECK_PTR(STDx fgets(buf, sizeof(buf), stdin), buf);\r\n        CHECK_STR(buf, \"xfghij\\n\");\r\n\r\n        CHECK_INT(STDx fread(buf, 2, 4, stdin), 4);\r\n        buf[8] = '\\0';\r\n        CHECK_STR(buf, \"klmnopq\\n\");\r\n        CHECK_INT(STDx getchar(), EOF);\r\n        CHECK(STDx feof(stdin) != 0);\r\n        CHECK(STDx fclose(stdin) == 0);\r\n\r\n        STDx remove(tn);\r\n        CHECK(STDx rename(tname, tn) == 0);\r\n        CHECK(STDx fopen(tname, \"r\") == nullptr);\r\n        CHECK((pf = STDx fopen(tn, \"r\")) != nullptr && STDx fclose(pf) == 0);\r\n        CHECK(STDx remove(tn) == 0);\r\n        CHECK(STDx fopen(tn, \"r\") == nullptr);\r\n        assert((pf = STDx tmpfile()) != nullptr);\r\n        CHECK_INT(STDx fputc('x', pf), 'x');\r\n        errno = EDOM;\r\n        if (!terse) {\r\n            STDx perror(\"Domain error reported as\");\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_main() { // test basic workings of cstdio definitions\r\n    char buf[32];\r\n\r\n    test_cpp();\r\n\r\n    if (!terse) { // print with different v* functions\r\n        vsp(buf, \"FIN%c%s\", 'I', \"SHED\");\r\n        vfp(\"%s testing %s\", buf, \"<cstdio>\");\r\n        vp(\"\\n\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/cstring/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <cstring>\r\n#define TEST_NAME \"<cstring>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <cstring>\r\n#include <errno.h>\r\n\r\n#define STDx STD\r\n\r\nextern \"C\" {\r\nconst void* (*pmemchr2)(const void*, int, STDx size_t) = &STDx memchr;\r\nconst char* (*pstrchr2)(const char*, int)              = &STDx strchr;\r\nconst char* (*pstrpbrk2)(const char*, const char*)     = &STDx strpbrk;\r\nconst char* (*pstrrchr2)(const char*, int)             = &STDx strrchr;\r\nconst char* (*pstrstr2)(const char*, const char*)      = &STDx strstr;\r\n}\r\n\r\nvoid test_cpp() { // test C++ header\r\n    char s[20] = {0};\r\n    STDx size_t n;\r\n    STDx size_t zero          = 0;\r\n    static const char abcde[] = \"abcde\";\r\n    static const char abcdx[] = \"abcdx\";\r\n\r\n    CHECK_PTR(STDx memchr(&abcde[0], 'c', 5), &abcde[2]);\r\n    CHECK(STDx memcmp(&abcde[0], &abcdx[0], 4) == 0);\r\n\r\n    // the following tests are interrelated\r\n    CHECK_PTR(STDx memcpy(s, &abcde[0], 6), s);\r\n    CHECK_STR(s, \"abcde\");\r\n    CHECK_PTR(STDx memmove(s + 1, s, 3), s + 1);\r\n    CHECK_STR(s, \"aabce\");\r\n    CHECK_PTR(STDx memmove(s, s + 2, 3), s);\r\n    CHECK_STR(s, \"bcece\");\r\n\r\n    CHECK_PTR(STDx memset(s, '*', 10), s);\r\n\r\n    CHECK_STR(s, \"**********\");\r\n    CHECK_PTR(STDx memset(s + 2, '%', zero), s + 2);\r\n    CHECK_STR(s, \"**********\");\r\n\r\n    CHECK_PTR(STDx strcat((char*) STDx memcpy(s, &abcde[0], 6), \"fg\"), s);\r\n    CHECK_PTR(STDx strchr(&abcde[0], 'c'), &abcde[2]);\r\n    CHECK(STDx strcmp(&abcde[0], \"abcde\") == 0);\r\n    CHECK(STDx strcoll(&abcde[0], \"abcde\") == 0);\r\n    CHECK_PTR(STDx strcpy(s, &abcde[0]), s);\r\n    CHECK_STR(s, &abcde[0]);\r\n    CHECK_INT(STDx strcspn(&abcde[0], \"xdy\"), 3);\r\n    CHECK(STDx strerror(EDOM) != nullptr);\r\n    CHECK_INT(STDx strlen(&abcde[0]), 5);\r\n    CHECK_PTR(STDx strncat(STDx strcpy(s, &abcde[0]), \"fg\", 1), s);\r\n    CHECK_STR(s, \"abcdef\");\r\n    CHECK(STDx strncmp(&abcde[0], &abcdx[0], 4) == 0);\r\n    CHECK_PTR(STDx strncpy(s, &abcde[0], 7), s);\r\n    CHECK_MEM(s, \"abcde\\0\", 7);\r\n    CHECK_PTR(STDx strpbrk(&abcde[0], \"xdy\"), &abcde[3]);\r\n    CHECK_PTR(STDx strrchr(&abcde[0], 'c'), &abcde[2]);\r\n    CHECK_STR(STDx strrchr(\"ababa\", 'b'), \"ba\");\r\n    CHECK_INT(STDx strspn(&abcde[0], \"abce\"), 3);\r\n    CHECK_PTR(STDx strstr(&abcde[0], \"cd\"), &abcde[2]);\r\n    CHECK_PTR(STDx strtok(STDx strcpy(s, &abcde[0]), \"ac\"), &s[1]);\r\n    n = STDx strxfrm((char*) nullptr, &abcde[0], 0);\r\n    if (n < sizeof(s) - 1) { // buffer big enough, check results\r\n        CHECK_INT(STDx strxfrm(s, &abcde[0], n + 1), n);\r\n        CHECK_INT(STDx strlen(s), n);\r\n    }\r\n\r\n    // test overloads\r\n    void* (*pmemchr1)(void*, int, STDx size_t) = &STDx memchr;\r\n    CHECK_PTR((*pmemchr1)((void*) &abcde[0], 'c', 5), &abcde[2]);\r\n    // const void *(*pmemchr2)(const void *, int, STDx size_t) = &STDx memchr;\r\n    CHECK_PTR((*pmemchr2)(&abcde[0], 'c', 5), &abcde[2]);\r\n\r\n    char* (*pstrchr1)(char*, int) = &STDx strchr;\r\n    CHECK_PTR((*pstrchr1)((char*) &abcde[0], 'c'), &abcde[2]);\r\n    // const char *(*pstrchr2)(const char *, int) = &STDx strchr;\r\n    CHECK_PTR((*pstrchr2)(&abcde[0], 'c'), &abcde[2]);\r\n\r\n    char* (*pstrpbrk1)(char*, const char*) = &STDx strpbrk;\r\n    CHECK_PTR((*pstrpbrk1)((char*) &abcde[0], \"xdy\"), &abcde[3]);\r\n    // const char *(*pstrpbrk2)(const char *, const char *) = &STDx strpbrk;\r\n    CHECK_PTR((*pstrpbrk2)(&abcde[0], \"xdy\"), &abcde[3]);\r\n\r\n    char* (*pstrrchr1)(char*, int) = &STDx strrchr;\r\n    CHECK_PTR((*pstrrchr1)((char*) &abcde[0], 'c'), &abcde[2]);\r\n    // const char *(*pstrrchr2)(const char *, int) = &STDx strrchr;\r\n    CHECK_PTR((*pstrrchr2)(&abcde[0], 'c'), &abcde[2]);\r\n\r\n    char* (*pstrstr1)(char*, const char*) = &STDx strstr;\r\n    CHECK_PTR((*pstrstr1)((char*) &abcde[0], \"cd\"), &abcde[2]);\r\n    // const char *(*pstrstr2)(const char *, const char *) = &STDx strstr;\r\n    CHECK_PTR((*pstrstr2)(&abcde[0], \"cd\"), &abcde[2]);\r\n}\r\n\r\nvoid test_main() { // test basic workings of cstring definitions\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/ctime/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <ctime>\r\n#define TEST_NAME \"<ctime>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <ctime>\r\n\r\n#define STDx STD\r\n\r\nvoid test_cpp() { // test C++ header\r\n    char buf[32];\r\n    STDx clock_t tc = STDx clock();\r\n    STDx tm ts1;\r\n    STDx time_t tt1 = 85;\r\n    STDx time_t tt2 = 170;\r\n    const char* dstr;\r\n\r\n    tt1 = STDx time(&tt2);\r\n    CHECK(tt1 == tt2);\r\n\r\n    ts1.tm_sec   = 15;\r\n    ts1.tm_min   = 55;\r\n    ts1.tm_hour  = 6;\r\n    ts1.tm_mday  = 2;\r\n    ts1.tm_mon   = 11;\r\n    ts1.tm_year  = 79;\r\n    ts1.tm_isdst = -1;\r\n    tt1          = STDx mktime(&ts1);\r\n    CHECK_INT(ts1.tm_wday, 0);\r\n    CHECK_INT(ts1.tm_yday, 335);\r\n\r\n    STDx strftime(buf, sizeof(buf), \"%a|%A|%b|%B\", &ts1);\r\n    CHECK_STR(buf, \"Sun|Sunday|Dec|December\");\r\n    STDx strftime(buf, sizeof(buf), \"%d|%H|%I|%j|%m|%M|%p\", &ts1);\r\n    CHECK_STR(buf, \"02|06|06|336|12|55|AM\");\r\n    STDx strftime(buf, sizeof(buf), \"%S|%U|%w|%W|%y|%Y|%%\", &ts1);\r\n    CHECK_STR(buf, \"15|48|0|48|79|1979|%\");\r\n\r\n    ++ts1.tm_sec;\r\n    tt2 = STDx mktime(&ts1);\r\n    CHECK(STDx difftime(tt1, tt2) < 0.0);\r\n\r\n    dstr = \"Sun Dec  2 06:55:15 1979\\n\";\r\n\r\n    CHECK_STR(STDx asctime(STDx localtime(&tt1)), dstr);\r\n    CHECK_INT(STDx strftime(buf, sizeof(buf), \"%S\", STDx gmtime(&tt2)), 2);\r\n    CHECK_STR(buf, \"16\");\r\n    CHECK(tc <= STDx clock());\r\n}\r\n\r\nvoid test_main() { // test basic workings of ctime definitions\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/cwchar1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <cwchar>, part 1\r\n#define TEST_NAMEX \"<cwchar>, part 1\"\r\n\r\n#include \"tdefs.h\"\r\n#include <assert.h>\r\n#include <cwchar>\r\n#include <stdarg.h>\r\n#include <stdlib.h>\r\n#include <string.h>\r\n\r\n#include <temp_file_name.hpp>\r\n\r\n#pragma warning(disable : 4793) // function compiled as native\r\n\r\n\r\n#undef clearerr // tested in stdio2.c\r\n#undef feof\r\n#undef ferror\r\n#undef getc\r\n#undef getchar\r\n#undef putc\r\n#undef putchar\r\n\r\n#define STDx STD\r\n\r\n#define BUF_SIZE 32\r\n\r\nstatic int vfs(const wchar_t* fmt, ...) { // test vfwscanf\r\n    int ans;\r\n    va_list ap;\r\n\r\n    va_start(ap, fmt);\r\n    ans = STDx vfwscanf(stdin, fmt, ap);\r\n    va_end(ap);\r\n    return ans;\r\n}\r\n\r\nstatic int vs(const wchar_t* fmt, ...) { // test vwscanf\r\n    int ans;\r\n    va_list ap;\r\n\r\n    va_start(ap, fmt);\r\n    ans = STDx vwscanf(fmt, ap);\r\n    va_end(ap);\r\n    return ans;\r\n}\r\n\r\nstatic int vfp(CSTD FILE* pf, const wchar_t* fmt, ...) { // test vfwprintf\r\n    int ans;\r\n    CSTD va_list ap;\r\n\r\n    va_start(ap, fmt);\r\n    ans = STDx vfwprintf(pf, fmt, ap);\r\n    va_end(ap);\r\n    return ans;\r\n}\r\n\r\nstatic int vp(const wchar_t* fmt, ...) { // test vwprintf\r\n    int ans;\r\n    CSTD va_list ap;\r\n\r\n    va_start(ap, fmt);\r\n    printf(\"\"); // in case simple call sets narrow/wide mode\r\n    ans = STDx vwprintf(fmt, ap);\r\n    va_end(ap);\r\n    return ans;\r\n}\r\n\r\nstatic void vsp(wchar_t* s, CSTD size_t n, const wchar_t* fmt, ...) { // test vswprintf\r\n    va_list ap;\r\n\r\n    va_start(ap, fmt);\r\n    STDx vswprintf(s, n, fmt, ap);\r\n    va_end(ap);\r\n}\r\n\r\nvoid test_cpp() { // test C++ header\r\n    typedef STDx wint_t wint_t;\r\n\r\n    wchar_t buf[BUF_SIZE], ch;\r\n    int in;\r\n    long lo;\r\n    short sh;\r\n\r\n    CHECK_INT(STDx swprintf(buf, BUF_SIZE, L\"%2c|%-4d|%.4o|%#lX\", L'a', -4, 8, 12L), 16);\r\n    CHECK_WSTR(buf, L\" a|-4  |0010|0XC\");\r\n    CHECK_INT(STDx swscanf(buf, L\" %lc|%hd |%i|%lx\", &ch, &sh, &in, &lo), 4);\r\n    CHECK_INT(ch, L'a');\r\n    CHECK_INT(sh, -4);\r\n    CHECK_INT(in, 8);\r\n    CHECK_INT(lo, 12);\r\n\r\n    { // test file I/O\r\n        const char* tn;\r\n        CSTD FILE* pf;\r\n        CSTD fpos_t fp1;\r\n        int in1;\r\n        long off;\r\n\r\n        const auto temp_name = temp_file_name();\r\n        tn                   = temp_name.c_str();\r\n        assert((pf = CSTD fopen(tn, \"w+\")) != nullptr);\r\n        CHECK_INT(STDx fwide(pf, 0), 0);\r\n        CHECK_INT(STDx fwprintf(pf, L\"123\\n\"), 4);\r\n\r\n        CHECK((off = CSTD ftell(pf)) != -1);\r\n        CHECK_INT(vfp(pf, L\"%ls\\n\", L\"456\"), 4);\r\n        CHECK_INT(vp(L\"\"), 0);\r\n        CHECK(CSTD fgetpos(pf, &fp1) == 0);\r\n        CHECK_INT(STDx fwprintf(pf, L\"789\\n\"), 4);\r\n        CSTD rewind(pf);\r\n        CHECK_INT(STDx fwscanf(pf, L\"%i\", &in1), 1);\r\n        CHECK_INT(in1, 123);\r\n        CHECK(CSTD fsetpos(pf, &fp1) == 0);\r\n        CHECK_INT(STDx fwscanf(pf, L\"%i\", &in1), 1);\r\n        CHECK_INT(in1, 789);\r\n        CHECK(CSTD fseek(pf, off, SEEK_SET) == 0);\r\n        CHECK_INT(STDx fwscanf(pf, L\"%i\", &in1), 1);\r\n        CHECK_INT(in1, 456);\r\n        assert(CSTD fclose(pf) == 0 && CSTD freopen(tn, \"r\", stdin) == stdin);\r\n\r\n        CHECK_INT(STDx wscanf(L\"%i\", &in1), 1);\r\n        CHECK_INT(in1, 123);\r\n\r\n        CHECK_INT(vs(L\"%i\", &in1), 1);\r\n        CHECK_INT(in1, 456);\r\n        CHECK_INT(vfs(L\"%i\", &in1), 1);\r\n        CHECK_INT(in1, 789);\r\n\r\n        CHECK(CSTD fclose(stdin) == 0);\r\n        CSTD remove(tn);\r\n    }\r\n\r\n    { // test character I/O\r\n        CSTD FILE* pf;\r\n        wchar_t wmacs[]     = {WCHAR_MAX, WCHAR_MIN};\r\n        STDx wint_t wintval = WEOF;\r\n\r\n        CHECK(wmacs[1] < wmacs[0]);\r\n\r\n        char* tname;\r\n        const char* tn;\r\n        const auto temp_name1 = temp_file_name();\r\n        tn                    = temp_name1.c_str();\r\n        tname                 = (char*) CSTD malloc(CSTD strlen(tn) + 1);\r\n        CSTD strcpy(tname, tn);\r\n\r\n        const auto temp_name2 = temp_file_name();\r\n        tn                    = temp_name2.c_str();\r\n        CHECK(CSTD strcmp(tn, tname) != 0);\r\n        assert((pf = CSTD fopen(tname, \"w\")) != nullptr);\r\n        CHECK_INT(STDx fgetwc(pf), wintval);\r\n\r\n        CHECK(CSTD feof(pf) == 0);\r\n        CHECK(CSTD ferror(pf) != 0);\r\n        CSTD clearerr(pf);\r\n        CHECK(CSTD ferror(pf) == 0);\r\n        CHECK_INT(STDx fputwc(L'a', pf), L'a');\r\n        CHECK_INT(STDx putwc(L'b', pf), L'b');\r\n        CHECK(0 <= STDx fputws(L\"cde\\n\", pf));\r\n        CHECK(0 <= STDx fputws(L\"fghij\\n\", pf));\r\n        CHECK(CSTD fflush(pf) == 0);\r\n        CHECK(CSTD fclose(pf) == 0);\r\n\r\n        assert(CSTD freopen(tname, \"r\", stdin) == stdin);\r\n        CHECK_INT(STDx fgetwc(stdin), L'a');\r\n        CHECK_INT(STDx getwc(stdin), L'b');\r\n        CHECK_INT(STDx getwchar(), L'c');\r\n        CHECK_PTR(STDx fgetws(buf, BUF_SIZE, stdin), buf);\r\n        CHECK_WSTR(buf, L\"de\\n\");\r\n        wintval = STDx ungetwc(L'x', stdin);\r\n        CHECK_INT(wintval, L'x');\r\n        CHECK_PTR(STDx fgetws(buf, BUF_SIZE, stdin), buf);\r\n        CHECK_WSTR(buf, L\"xfghij\\n\");\r\n        CHECK_INT(STDx getwchar(), WEOF);\r\n        CHECK(CSTD feof(stdin) != 0);\r\n        CHECK(CSTD fclose(stdin) == 0);\r\n\r\n        CSTD remove(tn);\r\n        CHECK(CSTD rename(tname, tn) == 0);\r\n        CHECK(CSTD fopen(tname, \"r\") == nullptr);\r\n        CHECK((pf = CSTD fopen(tn, \"r\")) != nullptr && CSTD fclose(pf) == 0);\r\n        CHECK(CSTD remove(tn) == 0);\r\n        CHECK(CSTD fopen(tn, \"r\") == nullptr);\r\n        assert((pf = CSTD tmpfile()) != nullptr);\r\n        CHECK_INT(STDx fputwc(L'x', pf), L'x');\r\n    }\r\n}\r\n\r\nvoid test_main() { // test basic workings of cwchar definitions\r\n    wchar_t buf[BUF_SIZE];\r\n\r\n    test_cpp();\r\n\r\n    if (!terse) { // print with different v* functions\r\n        vsp(buf, BUF_SIZE, L\"FIN%c%ls\", 'I', L\"SHED\");\r\n        CSTD printf(\"%ls testing <cwchar>, part 1\\n\", buf);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/cwchar2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <cwchar>, part 2\r\n#define TEST_NAME \"<cwchar>, part 2\"\r\n\r\n#include \"tdefs.h\"\r\n#include <cwchar>\r\n#include <limits.h>\r\n#include <time.h>\r\n\r\n#define STDx STD\r\n\r\n#define BUF_SIZE 32\r\n\r\n#include <math.h>\r\n\r\nextern \"C\" {\r\nconst wchar_t* (*pmemchr2)(const wchar_t*, wchar_t, CSTD size_t) = &STDx wmemchr;\r\nconst wchar_t* (*pwcspbrk2)(const wchar_t*, const wchar_t*)      = &STDx wcspbrk;\r\nconst wchar_t* (*pwcschr2)(const wchar_t*, wchar_t)              = &STDx wcschr;\r\nconst wchar_t* (*pwcsrchr2)(const wchar_t*, wchar_t)             = &STDx wcsrchr;\r\nconst wchar_t* (*pwcsstr2)(const wchar_t*, const wchar_t*)       = &STDx wcsstr;\r\n} // extern \"C\"\r\n\r\nvoid test_cpp() { // test C++ header\r\n    { // test wide stdlib functions\r\n        char str[10 < MB_LEN_MAX ? MB_LEN_MAX : 10];\r\n        const char* pc;\r\n        STDx mbstate_t mbst;\r\n        wchar_t *s1, wc, wcs[10];\r\n        const wchar_t* pwc;\r\n        static const char abc[] = \"abc\";\r\n        static STDx mbstate_t mbst0;\r\n\r\n        CHECK(1 <= MB_CUR_MAX && MB_CUR_MAX <= MB_LEN_MAX);\r\n        CHECK(STDx wcstod(L\"28G\", &s1) == 28.0 && s1 != nullptr && *s1 == L'G');\r\n        CHECK(STDx wcstol(L\"-a0\", &s1, 11) == -110 && s1 != nullptr && *s1 == L'\\0');\r\n        CHECK(STDx wcstoul(L\"0xFFg\", &s1, 16) == 255 && s1 != nullptr && *s1 == L'g');\r\n        CHECK(STDx mbsinit((const STDx mbstate_t*) nullptr) != 0 && STDx mbsinit(&mbst0) != 0);\r\n\r\n        mbst = mbst0;\r\n        CHECK(STDx mbsinit(&mbst) != 0);\r\n        CHECK_INT(STDx mbrlen(abc + 2, 9, &mbst), 1);\r\n        CHECK_INT(STDx mbrlen(abc + 3, 9, &mbst), 0);\r\n\r\n        CHECK(STDx mbsinit(&mbst) != 0);\r\n        CHECK_INT(STDx mbrtowc(&wc, abc + 2, 9, &mbst), 1);\r\n        CHECK_INT(wc, L'c');\r\n        CHECK_INT(STDx mbrtowc(&wc, abc + 3, 9, &mbst), 0);\r\n        CHECK_INT(wc, L'\\0');\r\n\r\n        CHECK(STDx mbsinit(&mbst) != 0);\r\n        pc = &abc[0];\r\n        CHECK_INT(STDx mbsrtowcs(wcs, &pc, 10, &mbst), 3);\r\n        CHECK(pc == nullptr);\r\n\r\n        CHECK(STDx mbsinit(&mbst) != 0);\r\n        CHECK_INT(STDx wcrtomb(str, wcs[0], &mbst), 1);\r\n        CHECK_INT(*str, 'a');\r\n        CHECK_INT(STDx wcrtomb(str, wcs[1], &mbst), 1);\r\n        CHECK_INT(*str, 'b');\r\n\r\n        CHECK(STDx mbsinit(&mbst) != 0);\r\n        pwc = (const wchar_t*) wcs;\r\n        CHECK_INT(STDx wcsrtombs(str, &pwc, 10, &mbst), 3);\r\n        CHECK(pwc == nullptr);\r\n        CHECK(STDx mbsinit(&mbst) != 0);\r\n        CHECK_STR(str, &abc[0]);\r\n\r\n        CHECK_INT(STDx btowc('a'), L'a');\r\n        CHECK_INT(STDx wctob(L'a'), 'a');\r\n\r\n        { // test C99 stuff\r\n            CHECK(STDx wcstof(L\"28G\", &s1) == 28.0 && s1 != nullptr && *s1 == L'G');\r\n            CHECK(isnan(STDx wcstof(L\"NaN\", &s1)) && s1 != nullptr && *s1 == L'\\0');\r\n            CHECK(STDx wcstod(L\"Infx\", &s1) == INFINITY && s1 != nullptr && *s1 == L'x');\r\n            CHECK(STDx wcstold(L\"28G\", &s1) == 28.0 && s1 != nullptr && *s1 == L'G');\r\n            CHECK(STDx wcstoll(L\"-a0\", &s1, 11) == -110 && s1 != nullptr && *s1 == L'\\0');\r\n            CHECK(STDx wcstoull(L\"0xFFg\", &s1, 16) == 255 && s1 != nullptr && *s1 == L'g');\r\n        }\r\n    }\r\n\r\n    { // test wide string functions\r\n        wchar_t s[20] = {0};\r\n        CSTD size_t n;\r\n        static const wchar_t abcde[] = {L\"abcde\"};\r\n        static const wchar_t abcdx[] = {L\"abcdx\"};\r\n\r\n        CHECK_PTR(STDx wmemchr(&abcde[0], L'c', 5), &abcde[2]);\r\n        CHECK(STDx wmemcmp(&abcde[0], &abcdx[0], 4) == 0);\r\n\r\n        // the following tests are interrelated\r\n        CHECK_PTR(STDx wmemcpy(s, &abcde[0], 6), s);\r\n        CHECK_WSTR(s, L\"abcde\");\r\n        CHECK_PTR(STDx wmemmove(s + 1, s, 3), s + 1);\r\n        CHECK_WSTR(s, L\"aabce\");\r\n        CHECK_PTR(STDx wmemmove(s, s + 2, 3), s);\r\n        CHECK_WSTR(s, L\"bcece\");\r\n        CHECK_PTR(STDx wmemset(s, L'*', 10), s);\r\n        CHECK_WSTR(s, L\"**********\");\r\n        CHECK_PTR(STDx wmemset(s + 2, L'%', 0), s + 2);\r\n        CHECK_WSTR(s, L\"**********\");\r\n\r\n        CHECK_PTR(STDx wcscat(STDx wmemcpy(s, &abcde[0], 6), L\"fg\"), s);\r\n        CHECK_PTR(STDx wcschr(&abcde[0], L'c'), &abcde[2]);\r\n        CHECK(STDx wcscmp(&abcde[0], L\"abcde\") == 0);\r\n        CHECK(STDx wcscoll(&abcde[0], L\"abcde\") == 0);\r\n        CHECK_PTR(STDx wcscpy(s, &abcde[0]), s);\r\n        CHECK_WSTR(s, &abcde[0]);\r\n        CHECK_INT(STDx wcscspn(&abcde[0], L\"xdy\"), 3);\r\n        CHECK_INT(STDx wcslen(&abcde[0]), 5);\r\n        CHECK_PTR(STDx wcsncat(STDx wcscpy(s, &abcde[0]), L\"fg\", 1), s);\r\n        CHECK_WSTR(s, L\"abcdef\");\r\n        CHECK(STDx wcsncmp(&abcde[0], &abcdx[0], 4) == 0);\r\n        CHECK_PTR(STDx wcsncpy(s, &abcde[0], 7), s);\r\n        CHECK_WMEM(s, L\"abcde\\0\", 7);\r\n        CHECK_PTR(STDx wcspbrk(&abcde[0], L\"xdy\"), &abcde[3]);\r\n        CHECK_PTR(STDx wcsrchr(&abcde[0], L'c'), &abcde[2]);\r\n        CHECK_WSTR(STDx wcsrchr(L\"ababa\", L'b'), L\"ba\");\r\n        CHECK_INT(STDx wcsspn(&abcde[0], L\"abce\"), 3);\r\n        CHECK_PTR(STDx wcsstr(&abcde[0], L\"cd\"), &abcde[2]);\r\n\r\n        wchar_t* temp;\r\n        CHECK_PTR(STDx wcstok(STDx wcscpy(s, &abcde[0]), L\"ac\", &temp), &s[1]);\r\n\r\n        n = STDx wcsxfrm((wchar_t*) nullptr, &abcde[0], 0);\r\n        if (n < sizeof(s) / sizeof(wchar_t) - 1) { // buffer big enough, check results\r\n            CHECK_INT(STDx wcsxfrm(s, &abcde[0], n + 1), n);\r\n            CHECK_INT(STDx wcslen(s), n);\r\n        }\r\n\r\n        // test overloads\r\n        wchar_t* (*pmemchr1)(wchar_t*, wchar_t, CSTD size_t) = &STDx wmemchr;\r\n        CHECK_PTR((*pmemchr1)((wchar_t*) &abcde[0], L'c', 5), &abcde[2]);\r\n        // const wchar_t *(*pmemchr2)(const wchar_t *, wchar_t, CSTD size_t) = &STDx wmemchr;\r\n        CHECK_PTR((*pmemchr2)(&abcde[0], L'c', 5), &abcde[2]);\r\n\r\n        wchar_t* (*pwcschr1)(wchar_t*, wchar_t) = &STDx wcschr;\r\n        CHECK_PTR((*pwcschr1)((wchar_t*) &abcde[0], L'c'), &abcde[2]);\r\n        // const wchar_t *(*pwcschr2)(const wchar_t *, wchar_t) = &STDx wcschr;\r\n        CHECK_PTR((*pwcschr2)(&abcde[0], L'c'), &abcde[2]);\r\n\r\n        wchar_t* (*pwcspbrk1)(wchar_t*, const wchar_t*) = &STDx wcspbrk;\r\n        CHECK_PTR((*pwcspbrk1)((wchar_t*) &abcde[0], L\"xdy\"), &abcde[3]);\r\n        // const wchar_t *(*pwcspbrk2)(const wchar_t *, const wchar_t *) = &STDx wcspbrk;\r\n        CHECK_PTR((*pwcspbrk2)(&abcde[0], L\"xdy\"), &abcde[3]);\r\n\r\n        wchar_t* (*pwcsrchr1)(wchar_t*, wchar_t) = &STDx wcsrchr;\r\n        CHECK_PTR((*pwcsrchr1)((wchar_t*) &abcde[0], L'c'), &abcde[2]);\r\n        // const wchar_t *(*pwcsrchr2)(const wchar_t *, wchar_t) = &STDx wcsrchr;\r\n        CHECK_PTR((*pwcsrchr2)(&abcde[0], L'c'), &abcde[2]);\r\n\r\n        wchar_t* (*pwcsstr1)(wchar_t*, const wchar_t*) = &STDx wcsstr;\r\n        CHECK_PTR((*pwcsstr1)((wchar_t*) &abcde[0], L\"cd\"), &abcde[2]);\r\n        // const wchar_t *(*pwcsstr2)(const wchar_t *, const wchar_t *) = &STDx wcsstr;\r\n        CHECK_PTR((*pwcsstr2)(&abcde[0], L\"cd\"), &abcde[2]);\r\n    }\r\n\r\n    { // test wide time functions\r\n        CSTD tm ts1;\r\n        CSTD time_t tt1 = 85;\r\n        CSTD time_t tt2 = 170;\r\n        wchar_t buf[BUF_SIZE];\r\n\r\n        tt1 = CSTD time(&tt2);\r\n        CHECK(tt1 == tt2);\r\n\r\n        ts1.tm_sec   = 15;\r\n        ts1.tm_min   = 55;\r\n        ts1.tm_hour  = 6;\r\n        ts1.tm_mday  = 2;\r\n        ts1.tm_mon   = 11;\r\n        ts1.tm_year  = 79;\r\n        ts1.tm_isdst = -1;\r\n        tt1          = mktime(&ts1);\r\n        CHECK_INT(ts1.tm_wday, 0);\r\n        CHECK_INT(ts1.tm_yday, 335);\r\n\r\n        STDx wcsftime(buf, BUF_SIZE, L\"%a|%A|%b|%B\", &ts1);\r\n        CHECK_WSTR(buf, L\"Sun|Sunday|Dec|December\");\r\n        STDx wcsftime(buf, BUF_SIZE, L\"%d|%H|%I|%j|%m|%M|%p\", &ts1);\r\n        CHECK_WSTR(buf, L\"02|06|06|336|12|55|AM\");\r\n        STDx wcsftime(buf, BUF_SIZE, L\"%S|%U|%w|%W|%y|%Y|%%\", &ts1);\r\n        CHECK_WSTR(buf, L\"15|48|0|48|79|1979|%\");\r\n\r\n        ++ts1.tm_sec;\r\n        tt2 = CSTD mktime(&ts1);\r\n        CHECK(CSTD difftime(tt1, tt2) < 0.0);\r\n        CHECK_INT(STDx wcsftime(buf, BUF_SIZE, L\"%S\", CSTD gmtime(&tt2)), 2);\r\n        CHECK_WSTR(buf, L\"16\");\r\n        time(&tt1);\r\n        CHECK(0 < STDx wcsftime(buf, BUF_SIZE, L\"%c\", CSTD localtime(&tt1)));\r\n    }\r\n}\r\n\r\nvoid test_main() { // test basic workings of cwchar definitions\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/cwctype/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <cwctype>\r\n#define TEST_NAME \"<cwctype>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <cwctype>\r\n\r\n#define STDx STD\r\n\r\nvoid test_cpp() { // test C++ header\r\n    typedef STDx wint_t wint_t;\r\n\r\n    wchar_t wc;\r\n    STDx wctrans_t tr = STDx wctrans(\"toupper\");\r\n    STDx wctype_t ty  = STDx wctype(\"alnum\");\r\n    wint_t weof       = WEOF;\r\n\r\n    CHECK(weof != 0);\r\n    CHECK(tr != 0);\r\n    CHECK(ty != 0);\r\n    CHECK(STDx iswctype(L'3', STDx wctype(\"digit\")) != 0);\r\n    wc = STDx towctrans(L'B', STDx wctrans(\"tolower\"));\r\n    CHECK_INT(STDx towlower(L'B'), wc);\r\n\r\n    CHECK(STDx iswalpha(L'a') != 0);\r\n\r\n    CHECK(STDx iswblank(L'a') == 0);\r\n\r\n    CHECK(STDx iswalnum(L'a') != 0);\r\n    CHECK(STDx iswcntrl(L'a') == 0);\r\n    CHECK(STDx iswdigit(L'a') == 0);\r\n    CHECK(STDx iswgraph(L'a') != 0);\r\n    CHECK(STDx iswlower(L'a') != 0);\r\n    CHECK(STDx iswprint(L'a') != 0);\r\n    CHECK(STDx iswpunct(L'a') == 0);\r\n    CHECK(STDx iswspace(L'a') == 0);\r\n    CHECK(STDx iswupper(L'a') == 0);\r\n    CHECK(STDx iswxdigit(L'a') != 0);\r\n    CHECK_INT(STDx towlower(L'a'), L'a');\r\n    CHECK_INT(STDx towupper(L'a'), L'A');\r\n}\r\n\r\nvoid test_main() { // test basic workings of cwctype definitions\r\n    test_cpp();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/deque/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <deque>\r\n#define TEST_NAME \"<deque>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <deque>\r\n#include <stddef.h>\r\n\r\ntypedef STD allocator<char> Myal;\r\ntypedef STD deque<char, Myal> Mycont;\r\n\r\nvoid test_main() { // test basic workings of deque definitions\r\n    char ch     = '\\0';\r\n    char carr[] = \"abc\";\r\n\r\n    Mycont::allocator_type* p_alloc = (Myal*) nullptr;\r\n    Mycont::pointer p_ptr           = (char*) nullptr;\r\n    Mycont::const_pointer p_cptr    = (const char*) nullptr;\r\n    Mycont::reference p_ref         = ch;\r\n    Mycont::const_reference p_cref  = (const char&) ch;\r\n    Mycont::size_type* p_size       = (CSTD size_t*) nullptr;\r\n    Mycont::difference_type* p_diff = (CSTD ptrdiff_t*) nullptr;\r\n    Mycont::value_type* p_val       = (char*) nullptr;\r\n\r\n    p_alloc = p_alloc; // to quiet diagnostics\r\n    p_ptr   = p_ptr;\r\n    p_cptr  = p_cptr;\r\n    p_ref   = p_cref;\r\n    p_size  = p_size;\r\n    p_diff  = p_diff;\r\n    p_val   = p_val;\r\n\r\n    Mycont v0;\r\n    Myal al = v0.get_allocator();\r\n    Mycont v0a(al);\r\n    CHECK(v0.empty());\r\n    CHECK_INT(v0.size(), 0);\r\n    CHECK_INT(v0a.size(), 0);\r\n    CHECK(v0a.get_allocator() == al);\r\n\r\n    Mycont v1(5), v1a(6, 'x'), v1b(7, 'y', al);\r\n    CHECK_INT(v1.size(), 5);\r\n    CHECK_INT(v1.back(), '\\0');\r\n    CHECK_INT(v1a.size(), 6);\r\n    CHECK_INT(v1a.back(), 'x');\r\n    CHECK_INT(v1b.size(), 7);\r\n    CHECK_INT(v1b.back(), 'y');\r\n\r\n    Mycont v2(v1a);\r\n    CHECK_INT(v2.size(), 6);\r\n    CHECK_INT(v2.front(), 'x');\r\n\r\n    Mycont v2a(v2, al);\r\n    CHECK_INT(v2a.size(), 6);\r\n    CHECK_INT(v2a.front(), 'x');\r\n\r\n    Mycont v3(v1a.begin(), v1a.end());\r\n    CHECK_INT(v3.size(), 6);\r\n    CHECK_INT(v3.front(), 'x');\r\n\r\n    const Mycont v4(v1a.begin(), v1a.end(), al);\r\n    CHECK_INT(v4.size(), 6);\r\n    CHECK_INT(v4.front(), 'x');\r\n    v0 = v4;\r\n    CHECK_INT(v0.size(), 6);\r\n    CHECK_INT(v0.front(), 'x');\r\n    CHECK_INT(v0[0], 'x');\r\n    CHECK_INT(v0.at(5), 'x');\r\n\r\n    v0.resize(8);\r\n    CHECK_INT(v0.size(), 8);\r\n    CHECK_INT(v0.back(), '\\0');\r\n    v0.resize(10, 'z');\r\n    CHECK_INT(v0.size(), 10);\r\n    CHECK_INT(v0.back(), 'z');\r\n    CHECK(v0.size() <= v0.max_size());\r\n\r\n    STD deque<char>* p_cont = &v0;\r\n    p_cont                  = p_cont; // to quiet diagnostics\r\n\r\n    { // check iterator generators\r\n        Mycont::iterator p_it(v0.begin());\r\n        Mycont::const_iterator p_cit(v4.begin());\r\n        Mycont::reverse_iterator p_rit(v0.rbegin());\r\n        Mycont::const_reverse_iterator p_crit(v4.rbegin());\r\n        CHECK_INT(*p_it, 'x');\r\n        CHECK_INT(*--(p_it = v0.end()), 'z');\r\n        CHECK_INT(*p_cit, 'x');\r\n        CHECK_INT(*--(p_cit = v4.end()), 'x');\r\n        CHECK_INT(*p_rit, 'z');\r\n        CHECK_INT(*--(p_rit = v0.rend()), 'x');\r\n        CHECK_INT(*p_crit, 'x');\r\n        CHECK_INT(*--(p_crit = v4.rend()), 'x');\r\n\r\n        Mycont::const_iterator p_it1 = Mycont::const_iterator();\r\n        Mycont::const_iterator p_it2 = Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    { // check const iterators generators\r\n        Mycont::const_iterator p_it(v0.cbegin());\r\n        Mycont::const_iterator p_cit(v4.cbegin());\r\n        Mycont::const_reverse_iterator p_rit(v0.crbegin());\r\n        Mycont::const_reverse_iterator p_crit(v4.crbegin());\r\n        CHECK_INT(*p_it, 'x');\r\n        CHECK_INT(*--(p_it = v0.cend()), 'z');\r\n        CHECK_INT(*p_cit, 'x');\r\n        CHECK_INT(*--(p_cit = v4.cend()), 'x');\r\n        CHECK_INT(*p_rit, 'z');\r\n        CHECK_INT(*--(p_rit = v0.crend()), 'x');\r\n        CHECK_INT(*p_crit, 'x');\r\n        CHECK_INT(*--(p_crit = v4.crend()), 'x');\r\n\r\n        Mycont::const_iterator p_it1 = Mycont::const_iterator();\r\n        Mycont::const_iterator p_it2 = Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    CHECK_INT(v0.front(), 'x');\r\n    CHECK_INT(v4.front(), 'x');\r\n    v0.push_front('a');\r\n    CHECK_INT(v0.front(), 'a');\r\n    v0.pop_front();\r\n    CHECK_INT(v0.front(), 'x');\r\n    CHECK_INT(v4.front(), 'x');\r\n\r\n    v0.push_back('a');\r\n    CHECK_INT(v0.back(), 'a');\r\n    v0.pop_back();\r\n    CHECK_INT(v0.back(), 'z');\r\n    CHECK_INT(v4.back(), 'x');\r\n\r\n    {\r\n        Mycont v5;\r\n        v5.resize(10);\r\n        CHECK_INT(v5.size(), 10);\r\n        CHECK_INT(v5[9], 0);\r\n\r\n        Mycont v6(20, 'x');\r\n        Mycont v7(STD move(v6));\r\n        CHECK_INT(v6.size(), 0);\r\n        CHECK_INT(v7.size(), 20);\r\n\r\n        Mycont v6a(20, 'x');\r\n        Mycont v7a(STD move(v6a), al);\r\n        CHECK_INT(v6a.size(), 0);\r\n        CHECK_INT(v7a.size(), 20);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_INT(v7.size(), 0);\r\n        CHECK_INT(v8.size(), 20);\r\n\r\n        Mycont v8a(STD move(v8), Myal());\r\n        CHECK_INT(v8.size(), 0);\r\n        CHECK_INT(v8a.size(), 20);\r\n\r\n        STD deque<Movable_int> v9;\r\n        v9.resize(10);\r\n        CHECK_INT(v9.size(), 10);\r\n        CHECK_INT(v9[9].val, 0);\r\n\r\n        STD deque<Movable_int> v10;\r\n        Movable_int mi1(1);\r\n        v10.push_back(STD move(mi1));\r\n        CHECK_INT(mi1.val, -1);\r\n        CHECK_INT(v10[0].val, 1);\r\n\r\n        Movable_int mi2(2);\r\n        v10.push_front(STD move(mi2));\r\n        CHECK_INT(mi2.val, -1);\r\n        CHECK_INT(v10[0].val, 2);\r\n\r\n        Movable_int mi3(3);\r\n        v10.insert(v10.begin(), STD move(mi3));\r\n        CHECK_INT(mi3.val, -1);\r\n        CHECK_INT(v10[0].val, 3);\r\n\r\n        v10.emplace_front();\r\n        CHECK_INT(v10[0].val, 0);\r\n        v10.emplace_front(2);\r\n        CHECK_INT(v10[0].val, 2);\r\n        v10.emplace_front(3, 2);\r\n        CHECK_INT(v10[0].val, 0x32);\r\n        v10.emplace_front(4, 3, 2);\r\n        CHECK_INT(v10[0].val, 0x432);\r\n        v10.emplace_front(5, 4, 3, 2);\r\n        CHECK_INT(v10[0].val, 0x5432);\r\n        v10.emplace_front(6, 5, 4, 3, 2);\r\n        CHECK_INT(v10[0].val, 0x65432);\r\n\r\n        v10.emplace_back();\r\n        CHECK_INT(v10.back().val, 0);\r\n        v10.emplace_back(2);\r\n        CHECK_INT(v10.back().val, 2);\r\n        v10.emplace_back(3, 2);\r\n        CHECK_INT(v10.back().val, 0x32);\r\n        v10.emplace_back(4, 3, 2);\r\n        CHECK_INT(v10.back().val, 0x432);\r\n        v10.emplace_back(5, 4, 3, 2);\r\n        CHECK_INT(v10.back().val, 0x5432);\r\n        v10.emplace_back(6, 5, 4, 3, 2);\r\n        CHECK_INT(v10.back().val, 0x65432);\r\n\r\n        v10.emplace(v10.begin() + 1);\r\n        CHECK_INT(v10[1].val, 0);\r\n        v10.emplace(v10.begin() + 1, 2);\r\n        CHECK_INT(v10[1].val, 2);\r\n        v10.emplace(v10.begin() + 1, 3, 2);\r\n        CHECK_INT(v10[1].val, 0x32);\r\n        v10.emplace(v10.begin() + 1, 4, 3, 2);\r\n        CHECK_INT(v10[1].val, 0x432);\r\n        v10.emplace(v10.begin() + 1, 5, 4, 3, 2);\r\n        CHECK_INT(v10[1].val, 0x5432);\r\n        v10.emplace(v10.begin() + 1, 6, 5, 4, 3, 2);\r\n        CHECK_INT(v10[1].val, 0x65432);\r\n    }\r\n\r\n    { // check for lvalue stealing\r\n        STD deque<Copyable_int> v11;\r\n        Copyable_int ci1(1);\r\n        v11.push_back(ci1);\r\n        CHECK_INT(ci1.val, 1);\r\n        CHECK_INT(v11[0].val, 1);\r\n\r\n        Copyable_int ci2(2);\r\n        v11.push_front(ci2);\r\n        CHECK_INT(ci2.val, 2);\r\n        CHECK_INT(v11[0].val, 2);\r\n\r\n        Copyable_int ci3(3);\r\n        v11.insert(v11.begin(), ci3);\r\n        CHECK_INT(ci3.val, 3);\r\n        CHECK_INT(v11[0].val, 3);\r\n        CHECK_INT(v11[1].val, 2);\r\n\r\n        STD deque<Copyable_int> v12(v11);\r\n        CHECK(v11 == v12);\r\n        v11 = v12;\r\n        CHECK(v11 == v12);\r\n\r\n        STD deque<Copyable_int> v13(STD make_move_iterator(v11.begin()), STD make_move_iterator(v11.end()));\r\n        CHECK_INT(v13.front().val, 3);\r\n        CHECK_INT(v11.front().val, -1);\r\n    }\r\n\r\n    v0.assign(v4.begin(), v4.end());\r\n    CHECK_INT(v0.size(), v4.size());\r\n    CHECK_INT(v0.front(), v4.front());\r\n    v0.assign(4, 'w');\r\n    CHECK_INT(v0.size(), 4);\r\n    CHECK_INT(v0.front(), 'w');\r\n    CHECK_INT(*v0.insert(v0.begin(), 'a'), 'a');\r\n    CHECK_INT(v0.front(), 'a');\r\n    CHECK_INT(*++v0.begin(), 'w');\r\n    CHECK_INT(*v0.insert(v0.begin(), 2, 'b'), 'b');\r\n    CHECK_INT(v0.front(), 'b');\r\n    CHECK_INT(*++v0.begin(), 'b');\r\n    CHECK_INT(*++ ++v0.begin(), 'a');\r\n    CHECK_INT(*v0.insert(v0.end(), v4.begin(), v4.end()), *v4.begin());\r\n    CHECK_INT(v0.back(), v4.back());\r\n    CHECK_INT(*v0.insert(v0.end(), carr, carr + 3), *carr);\r\n    CHECK_INT(v0.back(), 'c');\r\n    v0.erase(v0.begin());\r\n    CHECK_INT(v0.front(), 'b');\r\n    CHECK_INT(*++v0.begin(), 'a');\r\n    v0.erase(v0.begin(), ++v0.begin());\r\n    CHECK_INT(v0.front(), 'a');\r\n\r\n    { // test added C++11 functionality\r\n        Mycont v0x;\r\n        v0x.push_back('a');\r\n        v0x.shrink_to_fit();\r\n        CHECK_INT(v0x.front(), 'a');\r\n    }\r\n\r\n    {\r\n        STD initializer_list<char> init{'a', 'b', 'c'};\r\n        Mycont v11(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11[2], 'c');\r\n\r\n        v11.clear();\r\n        v11 = init;\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11[2], 'c');\r\n\r\n        CHECK_INT(*v11.insert(v11.begin() + 1, init), *init.begin());\r\n        CHECK_INT(v11.size(), 6);\r\n        CHECK_INT(v11[2], 'b');\r\n\r\n        v11.assign(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11[2], 'c');\r\n    }\r\n\r\n    v0.clear();\r\n    CHECK(v0.empty());\r\n    v0.swap(v1);\r\n    CHECK(!v0.empty());\r\n    CHECK(v1.empty());\r\n    STD swap(v0, v1);\r\n    CHECK(v0.empty());\r\n    CHECK(!v1.empty());\r\n    CHECK(v1 == v1);\r\n    CHECK(v0 < v1);\r\n    CHECK(v0 != v1);\r\n    CHECK(v1 > v0);\r\n    CHECK(v0 <= v1);\r\n    CHECK(v1 >= v0);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/exception/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\..\\env_minus_pure.lst\r\n"
  },
  {
    "path": "tests/tr1/tests/exception/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <exception>\r\n#define TEST_NAME \"<exception>\"\r\n\r\n#define _HAS_DEPRECATED_UNCAUGHT_EXCEPTION 1\r\n#define _SILENCE_CXX17_UNCAUGHT_EXCEPTION_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include <exception>\r\n#include <setjmp.h>\r\n\r\n#pragma warning(disable : 4611) // interaction between '_setjmp' and C++ object destruction is non-portable\r\n#pragma warning(disable : 4793) // function compiled as native\r\n\r\n#if NO_EXCEPTIONS\r\nvoid test_main() { // (don't) test exceptions\r\n}\r\n#else // NO_EXCEPTIONS\r\n\r\n#define STDx STD\r\n\r\nstatic CSTD jmp_buf jbuf;\r\n\r\nvoid jmpback() { // longjmp back to caller\r\n    CSTD longjmp(jbuf, 1);\r\n}\r\n\r\nvoid try_terminate() { // test terminate machinery\r\n    STDx terminate_handler save_hand = STDx set_terminate(&jmpback);\r\n\r\n    CHECK(STDx get_terminate() == &jmpback);\r\n\r\n    if (setjmp(jbuf) == 0) { // try calling terminate\r\n        int zero = 0;\r\n\r\n        if (zero == 0) {\r\n            STDx terminate();\r\n        }\r\n        CHECK_MSG(\"terminate() doesn't return\", 0);\r\n    }\r\n    CHECK(STDx set_terminate(save_hand) == &jmpback);\r\n}\r\n\r\n#pragma warning(push)\r\n#pragma warning(disable : 4702) // unreachable code\r\nvoid try_unexpected() { // test unexpected machinery\r\n#if _HAS_UNEXPECTED\r\n    STDx unexpected_handler save_hand = STDx set_unexpected(&jmpback);\r\n\r\n    CHECK(STDx get_unexpected() == &jmpback);\r\n\r\n    if (setjmp(jbuf) == 0) { // try calling unexpected\r\n        STDx unexpected();\r\n        CHECK_MSG(\"unexpected() doesn't return\", 0);\r\n    }\r\n    CHECK(STDx set_unexpected(save_hand) == &jmpback);\r\n#endif // _HAS_UNEXPECTED\r\n}\r\n#pragma warning(pop)\r\n\r\nvoid test_main() { // test basic workings of exception definitions\r\n    STD bad_exception bex1, bex2(bex1);\r\n    STD exception ex1, ex2(bex1);\r\n\r\n    ex1  = ex2;\r\n    bex1 = bex2;\r\n    CHECK(ex1.what() != nullptr);\r\n\r\n    try_terminate();\r\n    try_unexpected();\r\n    CHECK(!STD uncaught_exception());\r\n    CHECK(STD uncaught_exceptions() == 0);\r\n}\r\n#endif // NO_EXCEPTIONS\r\n"
  },
  {
    "path": "tests/tr1/tests/filesystem1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <experimental/filesystem>\r\n#define TEST_NAME \"<experimental/filesystem>\"\r\n\r\n#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include <fstream>\r\n#include <sstream>\r\n\r\n#include <experimental_filesystem.hpp>\r\n\r\n#define TMP_NAME(suf)         \"tmp_name\" suf\r\n#define CHECK_TBL(str, field) CHECK_STRING(native_to_char(str), fix_bslash(STD string(field)))\r\n\r\n#define PFX STD experimental::filesystem::\r\n\r\n#define GAMMA16 01623\r\n#define GAMMA8  \"\\316\\223\"\r\n\r\n#define ALT(x, y)           y\r\n#define NEVER_HAS_ROOT_NAME false\r\n#define ROOT_NAME           \"c:\"\r\n#define PREFSLASH           \"\\\\\"\r\n\r\n#define BSLASH \"\\\\\"\r\n#define SLASH  \"/\"\r\n\r\ntypedef PFX path::string_type path_string_type;\r\ntypedef PFX path::value_type path_value_type;\r\n\r\nSTD string fix_bslash(const STD string& tbl_str) { // convert table entry to preferred\r\n    STD string str;\r\n    for (size_t idx = 0; idx < tbl_str.size(); ++idx) {\r\n        if (tbl_str[idx] == '/' || tbl_str[idx] == '\\\\') {\r\n            str.append((size_t) 1, BSLASH[0]);\r\n        } else {\r\n            str.append((size_t) 1, tbl_str[idx]);\r\n        }\r\n    }\r\n    return str;\r\n}\r\n\r\nSTD string native_to_char(const path_string_type& path_str) { // convert native to string\r\n    STD string str;\r\n    for (size_t idx = 0; idx < path_str.size(); ++idx) {\r\n        str.append((size_t) 1, (char) path_str[idx]);\r\n    }\r\n    return str;\r\n}\r\n\r\nstruct Path_data {\r\n    const char* pd_path;\r\n    const char* pd_fields;\r\n    const char* pd_string;\r\n    const char* pd_file_string;\r\n    const char* pd_root_path_string;\r\n    const char* pd_root_name;\r\n    const char* pd_root_directory;\r\n    const char* pd_relative_path_string;\r\n    const char* pd_branch_path_string;\r\n    const char* pd_leaf;\r\n    const char* pd_remove_leaf_string;\r\n};\r\n\r\nPath_data path_data[] = { // path data examples from N1975\r\n    {\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"}, {\".\", \".\", \".\", \".\", \"\", \"\", \"\", \".\", \"\", \".\", \".\"},\r\n    {\"..\", \"..\", \"..\", \"..\", \"\", \"\", \"\", \"..\", \"\", \"..\", \"..\"},\r\n    {\"cat\", \"cat\", \"cat\", \"cat\", \"\", \"\", \"\", \"cat\", \"\", \"cat\", \"cat\"},\r\n\r\n    {\"/\", \"/\", \"/\", ALT(\"/\", \"\\\\\"), \"/\", \"\", \"/\", \"\", \"\", \"/\", \"/\"},\r\n    {\"/cat\", \"/|cat\", \"/cat\", ALT(\"/cat\", \"\\\\cat\"), \"/\", \"\", \"/\", \"cat\", \"/\", \"cat\", \"/\"},\r\n    {\"cat/\", \"cat|.\", \"cat/\", ALT(\"cat/\", \"cat\\\\\"), \"\", \"\", \"\", \"cat/\", \"cat\", \".\", \"cat\"},\r\n    {\"/cat/\", \"/|cat|.\", \"/cat/\", ALT(\"/cat/\", \"\\\\cat\\\\\"), \"/\", \"\", \"/\", \"cat/\", \"/cat\", \".\", \"/cat\"},\r\n\r\n    {\"cat/dog\", \"cat|dog\", \"cat/dog\", ALT(\"cat/dog\", \"cat\\\\dog\"), \"\", \"\", \"\", \"cat/dog\", \"cat\", \"dog\", \"cat\"},\r\n    {\"/cat/dog\", \"/|cat|dog\", \"/cat/dog\", ALT(\"/cat/dog\", \"\\\\cat\\\\dog\"), \"/\", \"\", \"/\", \"cat/dog\", \"/cat\", \"dog\",\r\n        \"/cat\"},\r\n    {\"///cat///\", \"/|cat|.\", \"///cat///\", ALT(\"///cat///\", \"\\\\cat\\\\\\\\\\\\\"), \"/\", \"\", \"/\", \"cat///\", \"/cat\", \".\",\r\n        \"///cat\"},\r\n    {\"///cat///dog\", \"/|cat|dog\", \"///cat///dog\", ALT(\"///cat///dog\", \"\\\\cat\\\\\\\\\\\\dog\"), \"/\", \"\", \"/\", \"cat///dog\",\r\n        \"/cat\", \"dog\", \"///cat\"},\r\n\r\n    {\"/.\", \"/|.\", \"/.\", ALT(\"/.\", \"\\\\.\"), \"/\", \"\", \"/\", \".\", \"/\", \".\", \"/\"},\r\n    {\"./\", \".|.\", \"./\", ALT(\"./\", \".\\\\\"), \"\", \"\", \"\", \"./\", \".\", \".\", \".\"},\r\n    {\"/..\", \"/|..\", \"/..\", ALT(\"/..\", \"\\\\..\"), \"/\", \"\", \"/\", \"..\", \"/\", \"..\", \"/\"},\r\n    {\"../\", \"..|.\", \"../\", ALT(\"../\", \"..\\\\\"), \"\", \"\", \"\", \"../\", \"..\", \".\", \"..\"},\r\n\r\n    {\"cat/.\", \"cat|.\", \"cat/.\", ALT(\"cat/.\", \"cat\\\\.\"), \"\", \"\", \"\", \"cat/.\", \"cat\", \".\", \"cat\"},\r\n    {\"cat/..\", \"cat|..\", \"cat/..\", ALT(\"cat/..\", \"cat\\\\..\"), \"\", \"\", \"\", \"cat/..\", \"cat\", \"..\", \"cat\"},\r\n    {\"cat/./\", \"cat|.|.\", \"cat/./\", ALT(\"cat/./\", \"cat\\\\.\\\\\"), \"\", \"\", \"\", \"cat/./\", \"cat/.\", \".\", \"cat/.\"},\r\n    {\"cat/./dog\", \"cat|.|dog\", \"cat/./dog\", ALT(\"cat/./dog\", \"cat\\\\.\\\\dog\"), \"\", \"\", \"\", \"cat/./dog\", \"cat/.\", \"dog\",\r\n        \"cat/.\"},\r\n    {\"cat/..\", \"cat|..\", \"cat/..\", ALT(\"cat/..\", \"cat\\\\..\"), \"\", \"\", \"\", \"cat/..\", \"cat\", \"..\", \"cat\"},\r\n    {\"cat/../\", \"cat|..|.\", \"cat/../\", ALT(\"cat/../\", \"cat\\\\..\\\\\"), \"\", \"\", \"\", \"cat/../\", \"cat/..\", \".\", \"cat/..\"},\r\n    {\"cat/../dog\", \"cat|..|dog\", \"cat/../dog\", ALT(\"cat/../dog\", \"cat\\\\..\\\\dog\"), \"\", \"\", \"\", \"cat/../dog\", \"cat/..\",\r\n        \"dog\", \"cat/..\"},\r\n\r\n    {\"c:\", \"c:\", \"c:\", \"c:\", ALT(\"\", \"c:\"), ALT(\"\", \"c:\"), \"\", ALT(\"c:\", \"\"), \"\", \"c:\", ALT(\"c:\", \"c:\")},\r\n    {\"c:/\", ALT(\"c:|.\", \"c:|/\"), \"c:/\", ALT(\"c:/\", \"c:\\\\\"), ALT(\"\", \"c:/\"), ALT(\"\", \"c:\"), ALT(\"\", \"/\"), ALT(\"c:/\", \"\"),\r\n        \"c:\", ALT(\".\", \"/\"), ALT(\"c:\", \"c:/\")},\r\n    {\"c:cat\", ALT(\"c:cat\", \"c:|cat\"), \"c:cat\", \"c:cat\", ALT(\"\", \"c:\"), ALT(\"\", \"c:\"), \"\", ALT(\"c:cat\", \"cat\"),\r\n        ALT(\"\", \"c:\"), ALT(\"c:cat\", \"cat\"), ALT(\"c:cat\", \"c:\")},\r\n    {\"c:/cat\", ALT(\"c:|cat\", \"c:|/|cat\"), \"c:/cat\", ALT(\"c:/cat\", \"c:\\\\cat\"), ALT(\"\", \"c:/\"), ALT(\"\", \"c:\"),\r\n        ALT(\"\", \"/\"), ALT(\"c:/cat\", \"cat\"), ALT(\"c:\", \"c:/\"), \"cat\", ALT(\"c:\", \"c:/\")},\r\n    {\"c:cat/\", ALT(\"c:cat|.\", \"c:|cat|.\"), \"c:cat/\", ALT(\"c:cat/\", \"c:cat\\\\\"), ALT(\"\", \"c:\"), ALT(\"\", \"c:\"), \"\",\r\n        ALT(\"c:cat/\", \"cat/\"), \"c:cat\", \".\", \"c:cat\"},\r\n    {\"c:/cat/\", ALT(\"c:|cat|.\", \"c:|/|cat|.\"), \"c:/cat/\", ALT(\"c:/cat/\", \"c:\\\\cat\\\\\"), ALT(\"\", \"c:/\"), ALT(\"\", \"c:\"),\r\n        ALT(\"\", \"/\"), ALT(\"c:/cat/\", \"cat/\"), \"c:/cat\", \".\", \"c:/cat\"},\r\n    {\"c:/cat/dog\", ALT(\"c:|cat|dog\", \"c:|/|cat|dog\"), \"c:/cat/dog\", ALT(\"c:/cat/dog\", \"c:\\\\cat\\\\dog\"), ALT(\"\", \"c:/\"),\r\n        ALT(\"\", \"c:\"), ALT(\"\", \"/\"), ALT(\"c:/cat/dog\", \"cat/dog\"), \"c:/cat\", \"dog\", \"c:/cat\"},\r\n\r\n    {\"prn:\", \"prn:\", \"prn:\", \"prn:\", ALT(\"\", \"prn:\"), ALT(\"\", \"prn:\"), \"\", ALT(\"prn:\", \"\"), \"\", \"prn:\", \"prn:\"},\r\n\r\n    {\"c:\\\\\", ALT(\"c:\\\\\", \"c:|/\"), ALT(\"c:\\\\\", \"c:/\"), \"c:\\\\\", ALT(\"\", \"c:/\"), ALT(\"\", \"c:\"), ALT(\"\", \"/\"),\r\n        ALT(\"c:\\\\\", \"\"), ALT(\"\", \"c:\"), ALT(\"c:\\\\\", \"/\"), ALT(\"c:\\\\\", \"c:/\")},\r\n    {\"c:cat\", ALT(\"c:cat\", \"c:|cat\"), \"c:cat\", \"c:cat\", ALT(\"\", \"c:\"), ALT(\"\", \"c:\"), \"\", ALT(\"c:cat\", \"cat\"),\r\n        ALT(\"\", \"c:\"), ALT(\"c:cat\", \"cat\"), ALT(\"c:cat\", \"c:\")},\r\n    {\"c:\\\\cat\", ALT(\"c:\\\\cat\", \"c:|/|cat\"), ALT(\"c:\\\\cat\", \"c:/cat\"), \"c:\\\\cat\", ALT(\"\", \"c:/\"), ALT(\"\", \"c:\"),\r\n        ALT(\"\", \"/\"), ALT(\"c:\\\\cat\", \"cat\"), ALT(\"\", \"c:/\"), ALT(\"c:\\\\cat\", \"cat\"), ALT(\"c:\\\\cat\", \"c:/\")},\r\n    {\"c:cat\\\\\", ALT(\"c:cat\\\\\", \"c:|cat|.\"), ALT(\"c:cat\\\\\", \"c:cat/\"), \"c:cat\\\\\", ALT(\"\", \"c:\"), ALT(\"\", \"c:\"), \"\",\r\n        ALT(\"c:cat\\\\\", \"cat/\"), ALT(\"\", \"c:cat\"), ALT(\"c:cat\\\\\", \".\"), ALT(\"c:cat\\\\\", \"c:cat\")},\r\n    {\"c:\\\\cat\\\\\", ALT(\"c:\\\\cat\\\\\", \"c:|/|cat|.\"), ALT(\"c:\\\\cat\\\\\", \"c:/cat/\"), \"c:\\\\cat\\\\\", ALT(\"\", \"c:/\"),\r\n        ALT(\"\", \"c:\"), ALT(\"\", \"/\"), ALT(\"c:\\\\cat\\\\\", \"cat/\"), ALT(\"\", \"c:/cat\"), ALT(\"c:\\\\cat\\\\\", \".\"),\r\n        ALT(\"c:\\\\cat\\\\\", \"c:/cat\")},\r\n    {\"c:\\\\cat/\", ALT(\"c:\\\\cat|.\", \"c:|/|cat|.\"), ALT(\"c:\\\\cat/\", \"c:/cat/\"), ALT(\"c:\\\\cat/\", \"c:\\\\cat\\\\\"),\r\n        ALT(\"\", \"c:/\"), ALT(\"\", \"c:\"), ALT(\"\", \"/\"), ALT(\"c:\\\\cat/\", \"cat/\"), ALT(\"c:\\\\cat\", \"c:/cat\"), \".\",\r\n        ALT(\"c:\\\\cat\", \"c:/cat\")},\r\n    {\"c:/cat\\\\dog\", ALT(\"c:|cat\\\\dog\", \"c:|/|cat|dog\"), ALT(\"c:/cat\\\\dog\", \"c:/cat/dog\"),\r\n        ALT(\"c:/cat\\\\dog\", \"c:\\\\cat\\\\dog\"), ALT(\"\", \"c:/\"), ALT(\"\", \"c:\"), ALT(\"\", \"/\"), ALT(\"c:/cat\\\\dog\", \"cat/dog\"),\r\n        ALT(\"c:\", \"c:/cat\"), ALT(\"cat\\\\dog\", \"dog\"), ALT(\"c:\", \"c:/cat\")},\r\n    {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr}};\r\n\r\nvoid test_path_data() { // test path accesses against data tables\r\n    const Path_data* pd              = &path_data[0];\r\n    static PFX path::value_type psep = PFX path::preferred_separator;\r\n\r\n    CHECK_INT(psep, PREFSLASH[0]);\r\n    for (; pd->pd_path != nullptr; ++pd) { // test a sample path\r\n        path_string_type str;\r\n        PFX path p(fix_bslash(pd->pd_path));\r\n        PFX path path2;\r\n\r\n        str.clear();\r\n        PFX path::iterator pi = p.begin();\r\n        for (int i = 0; i < 10 && pi != p.end(); ++i, ++pi) {\r\n            if (str.empty()) {\r\n                str.append(*pi);\r\n            } else { // append with separator\r\n                str.append(1, '|');\r\n                str.append(*pi);\r\n            }\r\n        }\r\n        CHECK_TBL(str, pd->pd_fields);\r\n\r\n        str.clear();\r\n        pi = p.end();\r\n        if (pi != p.begin()) {\r\n            for (int i = 0; i < 10; ++i) { // prepend an element\r\n                --pi;\r\n                if (str.empty()) {\r\n                    str.append(*pi);\r\n                } else { // prepend with separator\r\n                    str.insert((size_t) 0, (size_t) 1, '|');\r\n                    str.insert((size_t) 0, *pi);\r\n                }\r\n\r\n                if (pi == p.begin()) {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        CHECK_TBL(str, pd->pd_fields);\r\n\r\n        str = p.native();\r\n        CHECK_TBL(str, pd->pd_string);\r\n\r\n        path2 = p.root_path();\r\n        str   = path2.native();\r\n        CHECK_TBL(str, pd->pd_root_path_string);\r\n\r\n        str = p.root_name();\r\n        CHECK_TBL(str, pd->pd_root_name);\r\n\r\n        str = p.root_directory();\r\n        CHECK_TBL(str, pd->pd_root_directory);\r\n\r\n        path2 = p.relative_path();\r\n        str   = path2.native();\r\n        CHECK_TBL(str, pd->pd_relative_path_string);\r\n\r\n        path2 = p.parent_path();\r\n        str   = path2.native();\r\n        CHECK_TBL(str, pd->pd_branch_path_string);\r\n\r\n        str = p.filename();\r\n        CHECK_TBL(str, pd->pd_leaf);\r\n\r\n        path2 = p;\r\n        CHECK_PTR(&path2.remove_filename(), &path2);\r\n        str = path2.native();\r\n        CHECK_TBL(str, pd->pd_remove_leaf_string);\r\n    }\r\n}\r\n\r\nvoid test_path() { // test struct path\r\n    // test constructors, assignments, etc.\r\n    STD string str(\"abc\");\r\n    PFX path p(str);\r\n    CHECK(p == PFX path(str.c_str()));\r\n    CHECK(p == PFX path(str.begin(), str.end()));\r\n\r\n    p = STD string(\"def\");\r\n    CHECK(p != PFX path(str));\r\n    CHECK(p == PFX path(\"def\"));\r\n    p = \"ghi\";\r\n    CHECK(p == PFX path(\"ghi\"));\r\n    p.assign(str.begin(), str.end());\r\n    CHECK(p == PFX path(str));\r\n\r\n    p = \"jkl\";\r\n    CHECK(p == PFX path(\"jkl\"));\r\n    p.assign(\"mno\");\r\n    CHECK(p == PFX path(\"mno\"));\r\n\r\n    { // test basic constructors\r\n        PFX path p0;\r\n\r\n        char arr[] = \"abc\";\r\n        PFX path p1(arr);\r\n        CHECK(p1 == PFX path(\"abc\"));\r\n    }\r\n\r\n    { // test wstring constructor\r\n        STD wstring str0(L\"abc\");\r\n        PFX path p0(str0);\r\n        CHECK(p0 == PFX path(str0.c_str()));\r\n        CHECK(p0 == PFX path(str0.begin(), str0.end()));\r\n    }\r\n\r\n    { // test copies, moves\r\n        PFX path p1(str);\r\n        PFX path p2(p1);\r\n        CHECK(p2 == PFX path(str));\r\n        p1 = \"def\";\r\n        p2 = p1;\r\n        CHECK(p2 == PFX path(\"def\"));\r\n\r\n        PFX path::iterator pi1(p1.begin());\r\n        PFX path p1x = *pi1;\r\n        CHECK(p1x == PFX path(\"def\"));\r\n        p1  = \"abc\";\r\n        pi1 = p1.begin();\r\n        CHECK(*pi1 == PFX path(\"abc\"));\r\n\r\n        PFX path p3(STD move(p2));\r\n        CHECK(p3 == PFX path(\"def\"));\r\n        p3 = STD move(p1);\r\n        CHECK(p3 == PFX path(str));\r\n    }\r\n\r\n    p = \"abc\";\r\n    p /= p;\r\n    CHECK(p == PFX path(\"abc/abc\"));\r\n    p /= str;\r\n    CHECK(p == PFX path(\"abc/abc/abc\"));\r\n    p /= \"def\";\r\n    CHECK(p == PFX path(\"abc/abc/abc/def\"));\r\n    p.append(str.begin(), str.end());\r\n    CHECK(p == PFX path(\"abc/abc/abc/def/abc\"));\r\n    p.append(\"xyz\");\r\n    CHECK(p == PFX path(\"abc/abc/abc/def/abc/xyz\"));\r\n\r\n    p = \"abc\";\r\n    p += p;\r\n    CHECK(p == PFX path(\"abcabc\"));\r\n    p += PFX path(str);\r\n    CHECK(p == PFX path(\"abcabcabc\"));\r\n    p += \"d\";\r\n    CHECK(p == PFX path(\"abcabcabcd\"));\r\n    p += 'e';\r\n    CHECK(p == PFX path(\"abcabcabcde\"));\r\n    p += L'f';\r\n    CHECK(p == PFX path(\"abcabcabcdef\"));\r\n\r\n    p.concat(str.begin(), str.end());\r\n    CHECK(p == PFX path(\"abcabcabcdefabc\"));\r\n    p.concat(\"xyz\");\r\n    CHECK(p == PFX path(\"abcabcabcdefabcxyz\"));\r\n    p.concat(STD wstring(L\"XYZ\"));\r\n    CHECK(p == PFX path(\"abcabcabcdefabcxyzXYZ\"));\r\n\r\n    // test path modifiers\r\n    p.clear();\r\n    CHECK(p == PFX path(\"\"));\r\n\r\n    p = PFX path(\"a/b\");\r\n    p.make_preferred();\r\n    CHECK_STR(p.string().c_str(), \"a\" PREFSLASH \"b\");\r\n\r\n    p = PFX path(\"a/b\");\r\n    p.remove_filename();\r\n    CHECK_STR(p.string().c_str(), \"a\");\r\n\r\n    p = PFX path(\"a/b\");\r\n    p.replace_filename(PFX path(\"c\"));\r\n    CHECK_STR(p.string().c_str(), PFX path(\"a/c\").string().c_str());\r\n\r\n    p = PFX path(\"a/b.bat\");\r\n    p.replace_extension(PFX path(\"exe\"));\r\n    CHECK_STR(p.string().c_str(), PFX path(\"a/b.exe\").string().c_str());\r\n\r\n    p.clear();\r\n    PFX path path2(str);\r\n    p.swap(path2);\r\n\r\n    // test native format observers\r\n    CHECK(p.native()[0] == 'a');\r\n    CHECK(p.c_str()[0] == 'a');\r\n    CHECK(((PFX path::string_type) p)[0] == 'a');\r\n    CHECK((p.string<wchar_t, STD char_traits<wchar_t>, STD allocator<wchar_t>>()[0] == L'a'));\r\n    CHECK(p.string()[0] == 'a');\r\n    CHECK(p.wstring()[0] == L'a');\r\n    CHECK(p.u8string()[0] == 'a');\r\n\r\n    // test generic format observers\r\n    CHECK((p.generic_string<wchar_t, STD char_traits<wchar_t>, STD allocator<wchar_t>>()[0] == L'a'));\r\n    CHECK(p.generic_string()[0] == 'a');\r\n    CHECK(p.generic_wstring()[0] == L'a');\r\n\r\n    CHECK(p.generic_u8string()[0] == 'a');\r\n\r\n    // test compare\r\n    CHECK(PFX path(\"abc\").compare(PFX path(\"abd\")) < 0);\r\n    CHECK(PFX path(\"abc\").compare(PFX path(\"abc\")) == 0);\r\n    CHECK(PFX path(\"abc\").compare(PFX path(\"abb\")) > 0);\r\n\r\n    // test decomposition\r\n    PFX path tp = \"/abc/def.ext\";\r\n    CHECK(PFX path(ROOT_NAME).root_name() == PFX path(ROOT_NAME));\r\n    CHECK(tp.root_directory() == PFX path(\"/\"));\r\n    CHECK(tp.root_path() == PFX path(\"/\"));\r\n    CHECK(tp.relative_path() == PFX path(\"abc/def.ext\"));\r\n    CHECK(tp.parent_path() == PFX path(\"/abc\"));\r\n    CHECK(tp.filename() == PFX path(\"def.ext\"));\r\n    CHECK(tp.stem() == PFX path(\"def\"));\r\n    CHECK(tp.extension() == PFX path(\".ext\"));\r\n\r\n    // test queries\r\n    CHECK(PFX path().empty() && !PFX path(\"x\").empty());\r\n    CHECK((PFX path(ROOT_NAME).has_root_name() || NEVER_HAS_ROOT_NAME) && !PFX path(\"x\").has_root_name());\r\n    CHECK(PFX path(\"/\").has_root_directory() && !PFX path(\"x\").has_root_directory());\r\n    CHECK(PFX path(\"x\").has_relative_path() && !PFX path(\"/\").has_relative_path());\r\n    CHECK(PFX path(\"/x\").has_parent_path() && !PFX path(\"x\").has_parent_path());\r\n    CHECK(PFX path(\"/x\").has_filename() && !PFX path(\"\").has_filename());\r\n    CHECK(PFX path(\"x.abc\").has_extension() && !PFX path(\"x\").has_extension());\r\n\r\n    CHECK(PFX path(\"c:/abc\").is_absolute());\r\n    CHECK(!PFX path(\"/abc\").is_absolute());\r\n    CHECK(PFX path(\"/abc\").is_relative());\r\n    CHECK(!PFX path(\"c:/abc\").is_relative());\r\n\r\n    { // test path iterators\r\n        PFX path pit(\"abc/def\");\r\n        PFX path::iterator it = pit.begin();\r\n        CHECK_INT(*it->c_str(), 'a');\r\n        CHECK_INT(*(++it)->c_str(), 'd');\r\n        CHECK(++it == pit.end());\r\n    }\r\n\r\n    // test path non-member functions\r\n    CHECK(p == PFX path(\"abc\"));\r\n    CHECK(path2 == PFX path());\r\n    STD swap(p, path2);\r\n    CHECK(p == PFX path());\r\n    CHECK(path2 == PFX path(\"abc\"));\r\n\r\n    CHECK_INT(PFX hash_value(path2), PFX hash_value(PFX path(\"abc\")));\r\n\r\n    CHECK(PFX path(\"abc\") == PFX path(\"abc\") && !(PFX path(\"abc\") == PFX path(\"def\")));\r\n    CHECK(PFX path(\"abc\") != PFX path(\"def\") && !(PFX path(\"abc\") != PFX path(\"abc\")));\r\n    CHECK(PFX path(\"abc\") < PFX path(\"def\") && !(PFX path(\"abc\") < PFX path(\"abc\")));\r\n    CHECK(PFX path(\"abc\") >= PFX path(\"abc\") && !(PFX path(\"abc\") >= PFX path(\"def\")));\r\n    CHECK(PFX path(\"def\") > PFX path(\"abc\") && !(PFX path(\"abc\") > PFX path(\"def\")));\r\n    CHECK(PFX path(\"abc\") <= PFX path(\"abc\") && !(PFX path(\"def\") <= PFX path(\"abc\")));\r\n\r\n    STD basic_istringstream<path_value_type> istr(PFX path(\"xyz\").native());\r\n    istr >> p;\r\n    CHECK(p == PFX path(\"xyz\"));\r\n\r\n    STD basic_ostringstream<path_value_type> ostr;\r\n    ostr << p;\r\n    CHECK(p == PFX path(ostr.str()));\r\n\r\n    { // test network prefix\r\n        STD string netstr(\"\\\\\\\\server\\\\directory\\\\filename.txt\");\r\n        PFX path p0(netstr);\r\n        if (p0.has_root_name()) { // skip for Posix\r\n            CHECK_STRING(native_to_char(p0.native()), STD string(\"\\\\\\\\server\\\\directory\\\\filename.txt\"));\r\n            CHECK_STRING(native_to_char(p0.root_name()), STD string(\"\\\\\\\\server\"));\r\n            CHECK_STRING(native_to_char(p0.make_preferred()), netstr);\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_errors() { // test error codes\r\n    STD error_code ec(STD make_error_code(STD errc::operation_not_permitted));\r\n\r\n    PFX filesystem_error be0(\"message0\");\r\n    CHECK(CSTD strstr(be0.what(), \"message0\") != nullptr);\r\n    CHECK(be0.code() == ec);\r\n    CHECK_STR(be0.path1().string().c_str(), \"\");\r\n    CHECK_STR(be0.path2().string().c_str(), \"\");\r\n\r\n    PFX filesystem_error be1(\"message1\", STD error_code(ec));\r\n    CHECK(CSTD strstr(be1.what(), \"message1\") != nullptr);\r\n    CHECK(be1.code() == ec);\r\n    CHECK_STR(be1.path1().string().c_str(), \"\");\r\n    CHECK_STR(be1.path2().string().c_str(), \"\");\r\n\r\n    PFX filesystem_error be2(\"message2\", PFX path(\"abc\"), STD error_code());\r\n    CHECK(CSTD strstr(be2.what(), \"message2\") != nullptr);\r\n    CHECK(!be2.code());\r\n    CHECK_STR(be2.path1().string().c_str(), \"abc\");\r\n    CHECK_STR(be2.path2().string().c_str(), \"\");\r\n\r\n    PFX filesystem_error be3(\"message3\", PFX path(\"abc\"), PFX path(\"def\"), STD error_code(ec));\r\n    CHECK(CSTD strstr(be3.what(), \"message3\") != nullptr);\r\n    CHECK(be3.code() == ec);\r\n    CHECK_STR(be3.path1().string().c_str(), \"abc\");\r\n    CHECK_STR(be3.path2().string().c_str(), \"def\");\r\n}\r\n\r\nvoid test_enums() { // test enumerations\r\n    CHECK_INT((int) PFX file_type::not_found, -1);\r\n    CHECK_INT((int) PFX file_type::none, 0);\r\n    CHECK_INT((int) PFX file_type::regular, 1);\r\n    CHECK_INT((int) PFX file_type::directory, 2);\r\n    CHECK_INT((int) PFX file_type::symlink, 3);\r\n    CHECK_INT((int) PFX file_type::block, 4);\r\n    CHECK_INT((int) PFX file_type::character, 5);\r\n    CHECK_INT((int) PFX file_type::fifo, 6);\r\n    CHECK_INT((int) PFX file_type::socket, 7);\r\n    CHECK_INT((int) PFX file_type::unknown, 8);\r\n\r\n    CHECK_INT((int) PFX copy_options::none, 0);\r\n    CHECK_INT((int) PFX copy_options::skip_existing, 1);\r\n    CHECK_INT((int) PFX copy_options::overwrite_existing, 2);\r\n    CHECK_INT((int) PFX copy_options::update_existing, 4);\r\n    CHECK_INT((int) PFX copy_options::recursive, 8);\r\n    CHECK_INT((int) PFX copy_options::copy_symlinks, 16);\r\n    CHECK_INT((int) PFX copy_options::skip_symlinks, 32);\r\n    CHECK_INT((int) PFX copy_options::directories_only, 64);\r\n    CHECK_INT((int) PFX copy_options::create_symlinks, 128);\r\n    CHECK_INT((int) PFX copy_options::create_hard_links, 256);\r\n\r\n    CHECK_INT((int) PFX perms::none, 0);\r\n    CHECK_INT((int) PFX perms::owner_read, 0400);\r\n    CHECK_INT((int) PFX perms::owner_write, 0200);\r\n    CHECK_INT((int) PFX perms::owner_exec, 0100);\r\n    CHECK_INT((int) PFX perms::owner_all, 0700);\r\n    CHECK_INT((int) PFX perms::group_read, 0040);\r\n    CHECK_INT((int) PFX perms::group_write, 0020);\r\n    CHECK_INT((int) PFX perms::group_exec, 0010);\r\n    CHECK_INT((int) PFX perms::group_all, 0070);\r\n    CHECK_INT((int) PFX perms::others_read, 0004);\r\n    CHECK_INT((int) PFX perms::others_write, 0002);\r\n    CHECK_INT((int) PFX perms::others_exec, 0001);\r\n    CHECK_INT((int) PFX perms::others_all, 0007);\r\n    CHECK_INT((int) PFX perms::all, 0777);\r\n    CHECK_INT((int) PFX perms::set_uid, 04000);\r\n    CHECK_INT((int) PFX perms::set_gid, 02000);\r\n    CHECK_INT((int) PFX perms::sticky_bit, 01000);\r\n    CHECK_INT((int) PFX perms::mask, 07777);\r\n    CHECK_INT((int) PFX perms::unknown, 0xffff);\r\n    CHECK_INT((int) PFX perms::add_perms, 0x10000);\r\n    CHECK_INT((int) PFX perms::remove_perms, 0x20000);\r\n    CHECK_INT((int) PFX perms::resolve_symlinks, 0x40000);\r\n\r\n    CHECK_INT((int) PFX directory_options::none, 0);\r\n    CHECK((int) PFX directory_options::follow_directory_symlink != 0);\r\n}\r\n\r\nvoid test_file_status() { // test file_status\r\n    PFX file_status fs0;\r\n    CHECK(fs0.type() == PFX file_type::none);\r\n    CHECK(fs0.permissions() == PFX perms::unknown);\r\n\r\n    PFX file_status fs1(PFX file_type::regular);\r\n    CHECK(fs1.type() == PFX file_type::regular);\r\n    CHECK(fs1.permissions() == PFX perms::unknown);\r\n\r\n    PFX file_status fs2(PFX file_type::regular, PFX perms::all);\r\n    CHECK(fs2.type() == PFX file_type::regular);\r\n    CHECK(fs2.permissions() == PFX perms::all);\r\n    CHECK((PFX perms::all | PFX perms::group_all) == PFX perms::all);\r\n}\r\n\r\nvoid test_directory_entry() { // test directory_entry\r\n    PFX directory_entry de0;\r\n    CHECK(de0.path() == PFX path());\r\n    CHECK(de0.status().type() == PFX file_type::none);\r\n    CHECK(de0.status().permissions() == PFX perms::unknown);\r\n    CHECK(de0.symlink_status().type() == PFX file_type::none);\r\n    CHECK(de0.symlink_status().permissions() == PFX perms::unknown);\r\n\r\n    PFX directory_entry de1(PFX path(\"abc\"));\r\n    CHECK(de1.path() == PFX path(\"abc\"));\r\n    CHECK(de1.status().type() == PFX file_type::none);\r\n    CHECK(de1.status().permissions() == PFX perms::unknown);\r\n    CHECK(de1.symlink_status().type() == PFX file_type::none);\r\n    CHECK(de1.symlink_status().permissions() == PFX perms::unknown);\r\n\r\n    PFX directory_entry de2(PFX path(\"abc\"), PFX file_status(PFX file_type::regular));\r\n    CHECK(de2.path() == PFX path(\"abc\"));\r\n    CHECK(de2.status().type() == PFX file_type::regular);\r\n    CHECK(de2.status().permissions() == PFX perms::unknown);\r\n    CHECK(de2.symlink_status().type() == PFX file_type::none);\r\n    CHECK(de2.symlink_status().permissions() == PFX perms::unknown);\r\n\r\n    PFX directory_entry de3(\r\n        PFX path(\"abc\"), PFX file_status(PFX file_type::regular), PFX file_status(PFX file_type::fifo));\r\n    CHECK(de3.path() == PFX path(\"abc\"));\r\n    CHECK(de3.status().type() == PFX file_type::regular);\r\n    CHECK(de3.status().permissions() == PFX perms::unknown);\r\n    CHECK(de3.symlink_status().type() == PFX file_type::fifo);\r\n    CHECK(de3.symlink_status().permissions() == PFX perms::unknown);\r\n\r\n    de0 = de1;\r\n    CHECK(de0 == de1);\r\n    CHECK(de0.path() == PFX path(\"abc\"));\r\n    de0 = de2;\r\n    CHECK(de0.status().type() == PFX file_type::regular);\r\n    de0 = STD move(de1);\r\n    CHECK(de0.status().type() == PFX file_type::none);\r\n\r\n    PFX directory_entry de4(de0);\r\n    CHECK(de4 == de0);\r\n    CHECK(de4.path() == PFX path(\"abc\"));\r\n    PFX directory_entry de5(STD move(de4));\r\n    CHECK(de5 == de0);\r\n    CHECK(de5.path() == PFX path(\"abc\"));\r\n\r\n    de1.assign(PFX path(\"def\"));\r\n    CHECK(de1.path() == PFX path(\"def\"));\r\n    CHECK(de1.status().type() == PFX file_type::none);\r\n    CHECK(de1.status().permissions() == PFX perms::unknown);\r\n    CHECK(de1.symlink_status().type() == PFX file_type::none);\r\n    CHECK(de1.symlink_status().permissions() == PFX perms::unknown);\r\n\r\n    de1.assign(PFX path(\"ghi\"), PFX file_status(PFX file_type::regular));\r\n    CHECK(de1.path() == PFX path(\"ghi\"));\r\n    CHECK(de1.status().type() == PFX file_type::regular);\r\n    CHECK(de1.status().permissions() == PFX perms::unknown);\r\n    CHECK(de1.symlink_status().type() == PFX file_type::none);\r\n    CHECK(de1.symlink_status().permissions() == PFX perms::unknown);\r\n\r\n    de1.assign(PFX path(\"/x/jkl\"), PFX file_status(PFX file_type::regular), PFX file_status(PFX file_type::fifo));\r\n    CHECK(de1.path() == PFX path(\"/x/jkl\"));\r\n    CHECK(de1.status().type() == PFX file_type::regular);\r\n    CHECK(de1.status().permissions() == PFX perms::unknown);\r\n    CHECK(de1.symlink_status().type() == PFX file_type::fifo);\r\n    CHECK(de1.symlink_status().permissions() == PFX perms::unknown);\r\n\r\n    de1.replace_filename(PFX path(\"mno\"));\r\n    CHECK(de1.path() == PFX path(\"/x/mno\"));\r\n    CHECK(de1.status().type() == PFX file_type::none);\r\n    CHECK(de1.status().permissions() == PFX perms::unknown);\r\n    CHECK(de1.symlink_status().type() == PFX file_type::none);\r\n    CHECK(de1.symlink_status().permissions() == PFX perms::unknown);\r\n\r\n    de1.replace_filename(PFX path(\"pqr\"), PFX file_status(PFX file_type::regular));\r\n    CHECK(de1.path() == PFX path(\"/x/pqr\"));\r\n    CHECK(de1.status().type() == PFX file_type::regular);\r\n    CHECK(de1.status().permissions() == PFX perms::unknown);\r\n    CHECK(de1.symlink_status().type() == PFX file_type::none);\r\n    CHECK(de1.symlink_status().permissions() == PFX perms::unknown);\r\n\r\n    STD error_code errcode;\r\n    de1.replace_filename(\r\n        PFX path(\"stu\"), PFX file_status(PFX file_type::directory), PFX file_status(PFX file_type::fifo));\r\n    CHECK(de1.path() == PFX path(\"/x/stu\"));\r\n    CHECK(de1.status(errcode).type() == PFX file_type::directory);\r\n    CHECK(de1.status().permissions() == PFX perms::unknown);\r\n    CHECK(de1.symlink_status(errcode).type() == PFX file_type::fifo);\r\n    CHECK(de1.symlink_status().permissions() == PFX perms::unknown);\r\n\r\n    CHECK(de1 == de1);\r\n    CHECK(de1 <= de1);\r\n    CHECK(de1 >= de1);\r\n    CHECK(!(de1 != de1));\r\n    CHECK(!(de1 < de1));\r\n    CHECK(!(de1 > de1));\r\n}\r\n\r\nvoid test_directory_iterator() { // test directory_iterator\r\n    STD error_code errcode;\r\n    PFX path tp(TMP_NAME(\"1\"));\r\n    PFX remove_all(tp);\r\n\r\n    CHECK(PFX create_directory(tp));\r\n    CHECK(PFX is_directory(tp));\r\n\r\n    { // check for no files\r\n        PFX directory_iterator first0(tp), first(STD move(first0));\r\n        PFX directory_iterator last0, last;\r\n        last = STD move(last0);\r\n        CHECK(first == last);\r\n    }\r\n\r\n    { // check for one file\r\n        PFX path pathx(\"x\");\r\n        PFX path tpx(tp / pathx);\r\n        STD ofstream ofs(tpx);\r\n        ofs.close();\r\n\r\n        PFX directory_iterator first0(tp, errcode);\r\n        PFX directory_iterator first(first0);\r\n        PFX directory_iterator last0, last;\r\n        last = last0;\r\n        CHECK(first != last);\r\n\r\n        PFX directory_entry de1 = *first;\r\n        PFX path p              = de1;\r\n        CHECK(p.filename() == pathx.native());\r\n\r\n        // test copies, moves\r\n        PFX directory_entry de2(de1);\r\n        p = de2;\r\n        CHECK(p.filename() == pathx.native());\r\n\r\n        PFX directory_entry de3;\r\n        de3 = de1;\r\n        p   = de3;\r\n        CHECK(p.filename() == pathx.native());\r\n\r\n        PFX directory_entry de4(STD move(de1));\r\n        p = de4;\r\n        CHECK(p.filename() == pathx.native());\r\n\r\n        de4 = PFX directory_entry();\r\n        de4 = STD move(de2);\r\n        p   = de4;\r\n        CHECK(p.filename() == pathx.native());\r\n\r\n        PFX directory_iterator di1(tp);\r\n        PFX directory_iterator di2(STD move(di1));\r\n        p = *di2;\r\n        CHECK(p.filename() == pathx.native());\r\n\r\n        PFX directory_iterator di3;\r\n        di3 = STD move(di2);\r\n        p   = *di3;\r\n        CHECK(di3->path().filename() == pathx.native());\r\n        CHECK(p.filename() == pathx.native());\r\n        PFX directory_iterator di3a = di3;\r\n        CHECK(++di3 == last);\r\n        CHECK(di3.increment(errcode) == last);\r\n        CHECK(errcode != STD error_code());\r\n\r\n        CHECK(PFX begin(di3) == di3);\r\n        CHECK(PFX end(di3) == PFX directory_iterator());\r\n\r\n        PFX remove(tpx);\r\n    }\r\n    PFX remove_all(tp);\r\n}\r\n\r\nvoid test_recursive_directory_iterator() { // test recursive_directory_iterator\r\n    STD error_code errcode;\r\n    PFX path tp(TMP_NAME(\"1\"));\r\n    PFX remove_all(tp);\r\n\r\n    CHECK(PFX create_directory(tp));\r\n    CHECK(PFX is_directory(tp));\r\n\r\n    { // check for no files\r\n        PFX recursive_directory_iterator first0(tp);\r\n        PFX recursive_directory_iterator first(STD move(first0));\r\n        PFX recursive_directory_iterator last0, last;\r\n        last = STD move(last0);\r\n        CHECK(first == last);\r\n    }\r\n\r\n    { // check for one file\r\n        PFX path pathx(\"x\");\r\n        PFX path tpx(tp / pathx);\r\n        STD ofstream ofs(tpx);\r\n        ofs.close();\r\n\r\n        PFX recursive_directory_iterator first0(tp, errcode);\r\n        PFX recursive_directory_iterator first(first0);\r\n        PFX recursive_directory_iterator last0, last;\r\n        last = last0;\r\n        CHECK(first != last);\r\n\r\n        PFX directory_entry de1 = *first;\r\n        PFX path p              = de1;\r\n        CHECK(p.filename() == pathx.native());\r\n\r\n        PFX recursive_directory_iterator di0(tp, PFX directory_options::follow_directory_symlink);\r\n        CHECK(di0.options() == PFX directory_options::follow_directory_symlink);\r\n        CHECK_INT(di0.depth(), 0);\r\n        CHECK(di0.recursion_pending());\r\n        di0.disable_recursion_pending();\r\n        CHECK(!di0.recursion_pending());\r\n\r\n        CHECK(PFX begin(di0) == di0);\r\n        CHECK(PFX end(di0) == PFX recursive_directory_iterator());\r\n\r\n        PFX recursive_directory_iterator di1(tp, PFX directory_options::none, errcode);\r\n        PFX recursive_directory_iterator di2(STD move(di1));\r\n        p = *di2;\r\n        CHECK(p.filename() == pathx.native());\r\n\r\n        PFX recursive_directory_iterator di3;\r\n        di3 = STD move(di2);\r\n        p   = *di3;\r\n        CHECK(p.filename() == pathx.native());\r\n        CHECK(++di3 == last);\r\n\r\n        PFX path pathy(\"y\");\r\n        PFX path tpy(tp / pathy);\r\n        CHECK(PFX create_directory(tpy));\r\n        CHECK(PFX is_directory(tpy));\r\n        PFX recursive_directory_iterator first1(tp);\r\n\r\n        CHECK(first1 != last);\r\n        p = *first1;\r\n        CHECK(!PFX is_directory(p));\r\n        CHECK(p.filename() == pathx.native());\r\n\r\n        CHECK(++first1 != last);\r\n        p = *first1;\r\n        CHECK(PFX is_directory(p));\r\n        CHECK(p.filename() == pathy.native());\r\n\r\n        CHECK(++first1 == last);\r\n        CHECK(first1.increment(errcode) == last);\r\n        CHECK(errcode != STD error_code());\r\n\r\n        di3.pop();\r\n        CHECK(di3 == PFX recursive_directory_iterator());\r\n\r\n        CHECK_INT(PFX remove_all(tp), 1);\r\n    }\r\n\r\n    PFX remove_all(tp);\r\n}\r\n\r\nvoid test_ops() { // test operations\r\n    STD error_code errcode;\r\n    PFX path tpx(TMP_NAME(\"1\"));\r\n    PFX path tpy(TMP_NAME(\"2\"));\r\n    PFX path tpz(TMP_NAME(\"3\"));\r\n\r\n    PFX remove(tpx);\r\n    STD ofstream ofs(tpx);\r\n    ofs << \"hello\\n\";\r\n    ofs.close();\r\n    CHECK(6 <= PFX file_size(tpx));\r\n\r\n    // path operator/(const path&, const path&)\r\n    CHECK(PFX path(\"abc\") / PFX path(\"def\") == PFX path(\"abc/def\"));\r\n\r\n    // path absolute(const path&, const path& = current_path());\r\n    CHECK((PFX absolute(PFX path(\"abc\"))).is_absolute());\r\n    CHECK((PFX absolute(PFX path(ROOT_NAME \"abc\"), PFX current_path())).is_absolute());\r\n\r\n    // path canonical(const path&, const path& _Base = current_path());\r\n    // path canonical(const path&, error_code&);\r\n    // path canonical(const path&, const path&, error_code&);\r\n    PFX path abcAbsolute = PFX absolute(\"abc\");\r\n    PFX remove(abcAbsolute);\r\n    PFX create_directory(abcAbsolute);\r\n    CHECK((PFX canonical(PFX path(\"abc\"))).is_absolute());\r\n    CHECK((PFX canonical(abcAbsolute, PFX current_path())).is_absolute());\r\n    CHECK((PFX canonical(PFX path(\"abc\"), errcode)).is_absolute());\r\n    CHECK((PFX canonical(abcAbsolute, PFX current_path(), errcode)).is_absolute());\r\n    PFX remove(abcAbsolute);\r\n\r\n    { // test file/directory copy\r\n        // void copy(const path&, const path&);\r\n        // void copy(const path&, const path&, error_code&) noexcept;\r\n        // void copy(const path&, const path&, copy_options);\r\n        // void copy(const path&, const path&, copy_options, error_code&) noexcept;\r\n        PFX path tpv(TMP_NAME(\"4\"));\r\n        PFX path tpw(TMP_NAME(\"5\"));\r\n        PFX path tpw1 = tpw / PFX path(\"x\");\r\n        PFX path tpw2 = tpw1 / PFX path(\"y\");\r\n        PFX path tpw3 = tpw1 / PFX path(\"data\");\r\n        PFX remove(tpw3);\r\n        PFX remove(tpw2);\r\n        PFX remove(tpw1);\r\n        PFX remove(tpw);\r\n        PFX remove(tpv);\r\n\r\n        CHECK(PFX create_directories(tpw2));\r\n        CHECK(PFX is_directory(tpw2));\r\n        CHECK(PFX is_directory(tpw1));\r\n        CHECK(PFX is_directory(tpw));\r\n\r\n        PFX copy(tpx, tpw3);\r\n        CHECK(PFX exists(tpw3));\r\n        PFX remove(tpw3);\r\n        PFX copy(tpx, tpw3, errcode);\r\n        CHECK(PFX exists(tpw3));\r\n        PFX remove(tpw3);\r\n        PFX copy(tpx, tpw3, PFX copy_options::copy_symlinks);\r\n        CHECK(PFX exists(tpw3));\r\n        PFX remove(tpw3);\r\n        PFX copy(tpx, tpw3,\r\n            PFX copy_options(PFX copy_options::directories_only | PFX copy_options::create_hard_links\r\n                             | PFX copy_options::create_symlinks));\r\n        CHECK(!PFX exists(tpw3));\r\n\r\n        PFX copy(tpw, tpv, PFX copy_options(PFX copy_options::recursive | PFX copy_options::skip_symlinks), errcode);\r\n        CHECK(PFX exists(tpv));\r\n        PFX remove(tpw3);\r\n        PFX remove(tpw2);\r\n        PFX remove(tpw1);\r\n        PFX remove(tpw);\r\n        PFX remove_all(tpv);\r\n    }\r\n\r\n    // bool copy_file(const path&, const path&, copy_options = copy_options::none);\r\n    // bool copy_file(const path&, const path&, error_code&) noexcept;\r\n    // bool copy_file(const path&, const path&, copy_options, error_code&) noexcept;\r\n    PFX remove(tpy);\r\n    PFX remove(tpz);\r\n    PFX copy_file(tpx, tpy);\r\n    PFX remove(tpy);\r\n\r\n    PFX copy_file(tpx, tpy, PFX copy_options::none);\r\n    PFX copy_file(tpx, tpy, PFX copy_options::overwrite_existing);\r\n    PFX copy_file(tpx, tpy, PFX copy_options::update_existing, errcode);\r\n    PFX copy_file(tpx, tpy, PFX copy_options::skip_existing, errcode);\r\n    CHECK_INT(PFX file_size(tpx), PFX file_size(tpy));\r\n    PFX remove(tpy);\r\n\r\n    // void copy_symlink(const path&, const path&);\r\n    // void copy_symlink(const path&, const path&, error_code&) noexcept;\r\n    try { // link may legitimately fail\r\n        PFX create_symlink(PFX current_path(), tpy);\r\n        PFX copy_symlink(tpy, tpz);\r\n        CHECK(PFX exists(tpz));\r\n        PFX remove(tpz);\r\n        STD error_code ec;\r\n        PFX create_symlink(PFX current_path(), tpz);\r\n        PFX copy_symlink(tpy, tpz, ec);\r\n        CHECK(PFX exists(tpz));\r\n    } catch (...) { // link failed\r\n    }\r\n    PFX remove(tpy);\r\n    PFX remove(tpz);\r\n\r\n    { // test create_directories\r\n        // bool create_directories(const path&);\r\n        // bool create_directories(const path&, error_code&) noexcept;\r\n        PFX path tpw(TMP_NAME(\"4\"));\r\n        PFX path tpw1 = tpw / PFX path(\"x\");\r\n        PFX path tpw2 = tpw1 / PFX path(\"y\");\r\n        PFX remove(tpw2);\r\n        PFX remove(tpw1);\r\n        PFX remove(tpw);\r\n\r\n        CHECK(PFX create_directories(tpw2));\r\n        CHECK(PFX is_directory(tpw2));\r\n        CHECK(PFX is_directory(tpw1));\r\n        CHECK(PFX is_directory(tpw));\r\n        PFX remove(tpw2);\r\n        PFX remove(tpw1);\r\n        PFX remove(tpw);\r\n    }\r\n    // bool create_directory(const path&);\r\n    // bool create_directory(const path&, error_code&) noexcept;\r\n    // void create_directory(const path&, const path&);\r\n    // void create_directory(const path&, const path& error_code&) noexcept;\r\n    PFX create_directory(tpy);\r\n    CHECK(PFX is_directory(tpy));\r\n    PFX remove(tpy);\r\n    PFX create_directory(tpy, errcode);\r\n    CHECK(PFX is_directory(tpy));\r\n    PFX remove(tpy);\r\n\r\n    PFX create_directory(tpy, PFX current_path());\r\n    CHECK(PFX is_directory(tpy));\r\n    PFX remove(tpy);\r\n    PFX create_directory(tpy, PFX current_path(), errcode);\r\n    CHECK(PFX is_directory(tpy));\r\n    PFX remove(tpy);\r\n\r\n    // void create_directory_symlink(const path&, const path&);\r\n    // void create_directory_symlink(const path&, const path&, error_code&) noexcept;\r\n    try { // link may legitimately fail\r\n        PFX create_directory_symlink(PFX current_path(), tpy);\r\n        CHECK(PFX exists(tpy));\r\n        STD error_code ec;\r\n        PFX create_directory_symlink(PFX current_path(), tpz, ec);\r\n        CHECK(PFX exists(tpz));\r\n    } catch (...) { // link failed\r\n        if (!terse) {\r\n            CSTD printf(\"symlink not supported\\n\");\r\n        }\r\n    }\r\n    PFX remove(tpy);\r\n    PFX remove(tpz);\r\n\r\n    // void create_hard_link(const path&, const path&);\r\n    // void create_hard_link(const path&, const path&, error_code&) noexcept;\r\n    PFX remove(tpx);\r\n    PFX remove(tpy);\r\n\r\n    STD ofstream ofs2(tpx);\r\n    ofs2 << \"hello\\n\";\r\n    ofs2.close();\r\n    CHECK(6 <= PFX file_size(tpx));\r\n\r\n    try { // link may legitimately fail\r\n        PFX create_hard_link(tpx, tpy);\r\n        STD error_code ec;\r\n        PFX create_hard_link(tpx, tpz, ec);\r\n        CHECK(PFX exists(tpz));\r\n    } catch (...) { // link failed\r\n        if (!terse) {\r\n            CSTD printf(\"hard link not supported\\n\");\r\n        }\r\n    }\r\n    PFX remove(tpy);\r\n    PFX remove(tpz);\r\n\r\n    // void create_symlink(const path&, const path&);\r\n    // void create_symlink(const path&, const path&, error_code&) noexcept;\r\n    try { // link may legitimately fail\r\n        PFX create_symlink(tpx, tpy);\r\n        CHECK(PFX exists(tpy));\r\n        STD error_code ec;\r\n        PFX create_symlink(tpx, tpz, ec);\r\n        CHECK(PFX exists(tpz));\r\n    } catch (...) { // link failed\r\n    }\r\n    PFX remove(tpy);\r\n    PFX remove(tpz);\r\n\r\n    // path current_path();\r\n    // path current_path(error_code&) noexcept;\r\n    // void current_path(const path&);\r\n    // void current_path(const path&, error_code&) noexcept;\r\n    PFX path tp = PFX current_path();\r\n    PFX current_path(tp);\r\n    CHECK(tp == PFX current_path());\r\n\r\n    // bool equivalent(const path&, const path&);\r\n    // bool equivalent(const path&, const path&, error_code&) noexcept;\r\n    CHECK(PFX equivalent(tpx, tpx));\r\n    CHECK(!PFX equivalent(tpx, PFX path(\"/\")));\r\n\r\n    // bool exists(file_status) noexcept;\r\n    // bool exists(const path&);\r\n    // bool exists(const path&, error_code&) noexcept;\r\n    CHECK(PFX exists(PFX status(tpx)));\r\n    CHECK(PFX exists(tpx));\r\n    CHECK(PFX exists(tpx, errcode));\r\n\r\n    // uintmax_t file_size(const path&);\r\n    // uintmax_t file_size(const path&, error_code&) noexcept;\r\n    CHECK(6 <= PFX file_size(tpx));\r\n    CHECK(6 <= PFX file_size(tpx, errcode));\r\n\r\n    // uintmax_t hard_link_count(const path&);\r\n    // uintmax_t hard_link_count(const path&, error_code&) noexcept;\r\n    CHECK_INT(PFX hard_link_count(tpx), 1);\r\n    CHECK_INT(PFX hard_link_count(tpx, errcode), 1);\r\n\r\n    // bool is_block_file(file_status) noexcept;\r\n    // bool is_block_file(const path&);\r\n    // bool is_block_file(const path&, error_code&) noexcept;\r\n    CHECK(!PFX is_block_file(PFX status(tpx)));\r\n    CHECK(!PFX is_block_file(tpx));\r\n    CHECK(!PFX is_block_file(tpx, errcode));\r\n\r\n    // bool is_character_file(file_status) noexcept;\r\n    // bool is_character_file(const path&);\r\n    // bool is_character_file(const path&, error_code&) noexcept;\r\n    CHECK(!PFX is_character_file(PFX status(tpx)));\r\n    CHECK(!PFX is_character_file(tpx));\r\n    CHECK(!PFX is_character_file(tpx, errcode));\r\n\r\n    // bool is_directory(file_status) noexcept;\r\n    // bool is_directory(const path&);\r\n    // bool is_directory(const path&, error_code&) noexcept;\r\n    CHECK(!PFX is_directory(PFX status(tpx)));\r\n    CHECK(!PFX is_directory(tpx));\r\n    CHECK(!PFX is_directory(tpx, errcode));\r\n\r\n    // bool is_empty(const path&);\r\n    // bool is_empty(const path&, error_code&) noexcept;\r\n    CHECK(!PFX is_empty(tpx));\r\n    CHECK(!PFX is_empty(tpx, errcode));\r\n\r\n    // bool is_fifo(file_status) noexcept;\r\n    // bool is_fifo(const path&);\r\n    // bool is_fifo(const path&, error_code&) noexcept;\r\n    CHECK(!PFX is_fifo(PFX status(tpx)));\r\n    CHECK(!PFX is_fifo(tpx));\r\n    CHECK(!PFX is_fifo(tpx, errcode));\r\n\r\n    // bool is_other(file_status) noexcept;\r\n    // bool is_other(const path&);\r\n    // bool is_other(const path&, error_code&) noexcept;\r\n    CHECK(!PFX is_other(PFX status(tpx)));\r\n    CHECK(!PFX is_other(tpx));\r\n    CHECK(!PFX is_other(tpx, errcode));\r\n\r\n    // bool is_regular_file(file_status) noexcept;\r\n    // bool is_regular_file(const path&);\r\n    // bool is_regular_file(const path&, error_code&) noexcept;\r\n    CHECK(PFX is_regular_file(PFX status(tpx)));\r\n    CHECK(PFX is_regular_file(tpx));\r\n    CHECK(PFX is_regular_file(tpx, errcode));\r\n\r\n    // bool is_socket(file_status) noexcept;\r\n    // bool is_socket(const path&);\r\n    // bool is_socket(const path&, error_code&) noexcept;\r\n    CHECK(!PFX is_socket(PFX status(tpx)));\r\n    CHECK(!PFX is_socket(tpx));\r\n    CHECK(!PFX is_socket(tpx, errcode));\r\n\r\n    // bool is_symlink(file_status) noexcept;\r\n    // bool is_symlink(const path&);\r\n    // bool is_symlink(const path&, error_code&) noexcept;\r\n    CHECK(!PFX is_symlink(PFX status(tpx)));\r\n    CHECK(!PFX is_symlink(tpx));\r\n    CHECK(!PFX is_symlink(tpx, errcode));\r\n\r\n    // typedef chrono::time_point<chrono::system_clock> file_time_type;\r\n    // file_time_type last_write_time(const path&, error_code&) noexcept;\r\n    // file_time_type last_write_time(const path&);\r\n    // void last_write_time(const path&, file_time_type, error_code&) noexcept;\r\n    // void last_write_time(const path&, file_time_type);\r\n    PFX file_time_type wt = PFX last_write_time(\".\");\r\n    time_t cwt            = STD chrono::system_clock::to_time_t(wt);\r\n    CHECK(cwt != (time_t) -1);\r\n    PFX last_write_time(tpx, wt);\r\n    PFX file_time_type wt2 = PFX last_write_time(tpx);\r\n    CHECK(wt == wt2);\r\n\r\n    wt  = PFX last_write_time(\".\", errcode);\r\n    cwt = STD chrono::system_clock::to_time_t(wt);\r\n    CHECK(cwt != (time_t) -1);\r\n    PFX last_write_time(tpx, wt, errcode);\r\n    wt2 = PFX last_write_time(tpx);\r\n    CHECK(wt == wt2);\r\n\r\n    // void permissions(const path&, perms);\r\n    // void permissions(const path&, perms, error_code&) noexcept;\r\n    PFX perms mask = PFX perms(PFX perms::others_write | PFX perms::group_write | PFX perms::owner_write);\r\n    PFX copy(tpx, tpy);\r\n    PFX permissions(tpy, mask);\r\n    CHECK(PFX perms(PFX status(tpy).permissions() & mask) != PFX perms::none);\r\n    PFX permissions(tpy, PFX perms(mask | PFX perms::remove_perms));\r\n    CHECK(PFX perms(PFX status(tpy).permissions() & mask) == PFX perms::none);\r\n    PFX permissions(tpy, PFX perms(mask | PFX perms::add_perms));\r\n    CHECK(PFX perms(PFX status(tpy).permissions() & mask) != PFX perms::none);\r\n    PFX remove(tpy);\r\n\r\n    // path read_symlink(const path&);\r\n    // path read_symlink(const path&, error_code&) noexcept;\r\n    try { // link may legitimately fail\r\n        PFX create_symlink(tpx, tpy);\r\n        CHECK(PFX read_symlink(tpx) == tpy);\r\n        STD error_code ec;\r\n        PFX create_symlink(tpx, tpz, ec);\r\n        CHECK(PFX read_symlink(tpx) == tpz);\r\n    } catch (...) { // link failed\r\n    }\r\n    PFX remove(tpy);\r\n    PFX remove(tpz);\r\n\r\n    // bool remove(const path&);\r\n    // bool remove(const path&, error_code&) noexcept;\r\n    PFX copy(tpx, tpy);\r\n    CHECK(PFX exists(tpy));\r\n    PFX remove(tpy);\r\n    CHECK(!PFX exists(tpy));\r\n\r\n    PFX copy(tpx, tpy);\r\n    CHECK(PFX exists(tpy));\r\n    PFX remove(tpy, errcode);\r\n    CHECK(!PFX exists(tpy));\r\n\r\n    // uintmax_t remove_all(const path&);\r\n    // uintmax_t remove_all(const path&, error_code&) noexcept;\r\n    PFX path tpw(TMP_NAME(\"5\"));\r\n    PFX path tpw1 = tpw / PFX path(\"x\");\r\n    PFX path tpw2 = tpw1 / PFX path(\"y\");\r\n    PFX remove(tpw2);\r\n    PFX remove(tpw1);\r\n    PFX remove(tpw);\r\n\r\n    CHECK(PFX create_directories(tpw2));\r\n    CHECK(PFX is_directory(tpw));\r\n    PFX remove_all(tpw);\r\n    CHECK(!PFX exists(tpw));\r\n\r\n    CHECK(PFX create_directories(tpw2));\r\n    CHECK(PFX is_directory(tpw));\r\n    PFX remove_all(tpw, errcode);\r\n    CHECK(!PFX exists(tpw));\r\n\r\n    // void rename(const path&, const path&);\r\n    // void rename(const path&, const path&, error_code&) noexcept;\r\n    PFX rename(tpx, tpz);\r\n    CHECK(!PFX exists(tpx));\r\n    CHECK(PFX exists(tpz));\r\n    PFX rename(tpz, tpx);\r\n    CHECK(!PFX exists(tpz));\r\n    CHECK(PFX exists(tpx));\r\n\r\n    // void resize_file(const path&, uintmax_t);\r\n    // void resize(const path&, uintmax_t, error_code&) noexcept;\r\n    PFX resize_file(tpx, 50);\r\n    CHECK_INT(PFX file_size(tpx), 50);\r\n    PFX resize_file(tpx, 4, errcode);\r\n    CHECK_INT(PFX file_size(tpx), 4);\r\n\r\n    // space_info space(const path&);\r\n    // space_info space(const path&, error_code&) noexcept;\r\n    PFX space_info spinfo = PFX space(PFX path(\"/\"));\r\n    CHECK(0 < spinfo.capacity);\r\n    CHECK(0 < spinfo.free);\r\n    CHECK(0 < spinfo.available);\r\n\r\n    // file_status status(const path&);\r\n    // file_status status(const path&, error_code&) noexcept;\r\n    // bool status_known(file_status) noexcept;\r\n    CHECK(PFX status_known(PFX status(tpx)));\r\n    CHECK(PFX status_known(PFX status(tpx, errcode)));\r\n\r\n    // file_status symlink_status(const path&);\r\n    // file_status symlink_status(const path&, error_code&) noexcept;\r\n    CHECK(PFX status_known(PFX symlink_status(tpx)));\r\n    CHECK(PFX status_known(PFX symlink_status(tpx, errcode)));\r\n\r\n    // path system_complete(const path&);\r\n    // path system_complete(const path&, error_code&) noexcept;\r\n    CHECK(PFX system_complete(tpx).is_absolute());\r\n    CHECK(PFX system_complete(tpx, errcode).is_absolute());\r\n\r\n    // path temp_directory_path();\r\n    // path temp_directory_path(error_code&) noexcept;\r\n    CHECK(PFX exists(PFX temp_directory_path()));\r\n    CHECK(PFX is_directory(PFX temp_directory_path(errcode), errcode));\r\n\r\n    PFX remove_all(tpx);\r\n}\r\n\r\nvoid test_fstream() { // test against fstream\r\n    PFX path tp(TMP_NAME(\"1\"));\r\n    PFX remove(tp);\r\n\r\n    // test output file opening\r\n    STD ofstream ofs(tp);\r\n    CHECK(ofs.is_open());\r\n    ofs.close();\r\n\r\n    PFX remove_all(tp);\r\n}\r\n\r\nvoid test_main() { // test basic workings of filesystem definitions\r\n    test_path_data();\r\n\r\n    test_path();\r\n    test_errors();\r\n    test_enums();\r\n    test_file_status();\r\n    test_directory_entry();\r\n    test_directory_iterator();\r\n    test_recursive_directory_iterator();\r\n    test_ops();\r\n    test_fstream();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/forward_list/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <forward_list>\r\n#define TEST_NAME \"<forward_list>\"\r\n\r\n#define _HAS_AUTO_PTR_ETC                1\r\n#define _HAS_DEPRECATED_ADAPTOR_TYPEDEFS 1\r\n\r\n#include \"tdefs.h\"\r\n#include <forward_list>\r\n#include <functional>\r\n#include <stddef.h>\r\n\r\ntypedef STD allocator<char> Myal;\r\ntypedef STD forward_list<char, Myal> Mycont;\r\n\r\nCSTD size_t size(const Mycont& flist) { // get size of list\r\n    CSTD size_t ans           = 0;\r\n    Mycont::const_iterator it = flist.begin();\r\n    for (; it != flist.end(); ++it) {\r\n        ++ans;\r\n    }\r\n    return ans;\r\n}\r\n\r\nMycont::const_iterator before_end(const Mycont& flist) { // get iterator for last element of list\r\n    Mycont::const_iterator it = flist.before_begin();\r\n    Mycont::const_iterator it2;\r\n    for (it2 = it; ++it2 != flist.end(); it = it2) {\r\n        ;\r\n    }\r\n    return it;\r\n}\r\n\r\nMycont::value_type back(const Mycont& flist) { // get last element of list\r\n    return *before_end(flist);\r\n}\r\n\r\nvoid test_main() { // test basic workings of forward_list definitions\r\n    char ch     = '\\0';\r\n    char carr[] = \"abc\";\r\n\r\n    Mycont::allocator_type* p_alloc = (Myal*) nullptr;\r\n    Mycont::pointer p_ptr           = (char*) nullptr;\r\n    Mycont::const_pointer p_cptr    = (const char*) nullptr;\r\n    Mycont::reference p_ref         = ch;\r\n    Mycont::const_reference p_cref  = (const char&) ch;\r\n    Mycont::size_type* p_size       = (CSTD size_t*) nullptr;\r\n    Mycont::difference_type* p_diff = (CSTD ptrdiff_t*) nullptr;\r\n    Mycont::value_type* p_val       = (char*) nullptr;\r\n\r\n    p_alloc = p_alloc; // to quiet diagnostics\r\n    p_ptr   = p_ptr;\r\n    p_cptr  = p_cptr;\r\n    p_ref   = p_cref;\r\n    p_size  = p_size;\r\n    p_diff  = p_diff;\r\n    p_val   = p_val;\r\n\r\n    Mycont v0;\r\n    Myal al = v0.get_allocator();\r\n    Mycont v0a(al);\r\n    CHECK(v0.empty());\r\n    CHECK_INT(size(v0), 0);\r\n    CHECK_INT(size(v0a), 0);\r\n    CHECK(v0a.get_allocator() == al);\r\n\r\n    Mycont v1(5), v1a(6, 'x'), v1b(7, 'y', al);\r\n    CHECK_INT(size(v1), 5);\r\n    CHECK_INT(v1.front(), '\\0');\r\n    CHECK_INT(size(v1a), 6);\r\n    CHECK_INT(v1a.front(), 'x');\r\n    CHECK_INT(size(v1b), 7);\r\n    CHECK_INT(v1b.front(), 'y');\r\n\r\n    Mycont v2(v1a);\r\n    CHECK_INT(size(v2), 6);\r\n    CHECK_INT(v2.front(), 'x');\r\n\r\n    Mycont v2a(v1a, al);\r\n    CHECK_INT(size(v2a), 6);\r\n    CHECK_INT(v2a.front(), 'x');\r\n\r\n    Mycont v3(v1a.begin(), v1a.end());\r\n    CHECK_INT(size(v3), 6);\r\n    CHECK_INT(v3.front(), 'x');\r\n\r\n    const Mycont v4(v1a.begin(), v1a.end(), al);\r\n    CHECK_INT(size(v4), 6);\r\n    CHECK_INT(v4.front(), 'x');\r\n    v0 = v4;\r\n    CHECK_INT(size(v0), 6);\r\n    CHECK_INT(v0.front(), 'x');\r\n\r\n    v0.resize(8);\r\n    CHECK_INT(size(v0), 8);\r\n    CHECK_INT(back(v0), '\\0');\r\n    v0.resize(10, 'z');\r\n    CHECK_INT(size(v0), 10);\r\n    CHECK_INT(back(v0), 'z');\r\n    CHECK(size(v0) <= v0.max_size());\r\n\r\n    STD forward_list<char>* p_cont = &v0;\r\n\r\n    p_cont = p_cont; // to quiet diagnostics\r\n\r\n    { // check iterator generators\r\n        Mycont::iterator p_it(v0.begin());\r\n        Mycont::const_iterator p_cit(v4.begin());\r\n        CHECK_INT(*p_it, 'x');\r\n        CHECK_INT(*p_cit, 'x');\r\n\r\n        Mycont::const_iterator p_it1 = Mycont::const_iterator();\r\n        Mycont::const_iterator p_it2 = Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    Mycont::iterator p_bit(v0.before_begin());\r\n    Mycont::const_iterator p_bcit(v0.before_begin());\r\n    Mycont::const_iterator p_bccit(v0.cbefore_begin());\r\n    CHECK_INT(*++p_bit, 'x');\r\n    CHECK_INT(*++p_bcit, 'x');\r\n    CHECK_INT(*++p_bccit, 'x');\r\n\r\n    { // check const iterators generators\r\n        Mycont::const_iterator p_it(v0.cbegin());\r\n        Mycont::const_iterator p_cit(v4.cbegin());\r\n        CHECK_INT(*p_it, 'x');\r\n        CHECK_INT(*p_cit, 'x');\r\n\r\n        Mycont::const_iterator p_it1 = Mycont::const_iterator();\r\n        Mycont::const_iterator p_it2 = Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    CHECK_INT(v0.front(), 'x');\r\n    CHECK_INT(v4.front(), 'x');\r\n    v0.push_front('a');\r\n    CHECK_INT(v0.front(), 'a');\r\n    v0.pop_front();\r\n    CHECK_INT(v0.front(), 'x');\r\n    CHECK_INT(v4.front(), 'x');\r\n\r\n    {\r\n        Mycont v5;\r\n        v5.resize(10);\r\n        CHECK_INT(size(v5), 10);\r\n        CHECK_INT(*++v5.begin(), 0);\r\n\r\n        Mycont v6(20, 'x');\r\n        Mycont v7(STD move(v6));\r\n        CHECK_INT(size(v6), 0);\r\n        CHECK_INT(size(v7), 20);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_INT(size(v7), 0);\r\n        CHECK_INT(size(v8), 20);\r\n\r\n        Mycont v8a(STD move(v8), Myal());\r\n        CHECK_INT(size(v8), 0);\r\n        CHECK_INT(size(v8a), 20);\r\n\r\n        STD forward_list<Movable_int> v9;\r\n        v9.resize(10);\r\n        CHECK_INT((*++v9.begin()).val, 0);\r\n\r\n        STD forward_list<Movable_int> v10;\r\n\r\n        Movable_int mi2(2);\r\n        v10.push_front(STD move(mi2));\r\n        CHECK_INT(mi2.val, -1);\r\n        CHECK_INT(v10.front().val, 2);\r\n\r\n        Movable_int mi3(3);\r\n        STD forward_list<Movable_int>::iterator it = v10.insert_after(v10.before_begin(), STD move(mi3));\r\n        CHECK(it == v10.begin());\r\n        CHECK_INT(mi3.val, -1);\r\n        CHECK_INT(v10.front().val, 3);\r\n\r\n        v10.emplace_front();\r\n        CHECK_INT(v10.front().val, 0);\r\n        v10.emplace_front(2);\r\n        CHECK_INT(v10.front().val, 2);\r\n        v10.emplace_front(3, 2);\r\n        CHECK_INT(v10.front().val, 0x32);\r\n        v10.emplace_front(4, 3, 2);\r\n        CHECK_INT(v10.front().val, 0x432);\r\n        v10.emplace_front(5, 4, 3, 2);\r\n        CHECK_INT(v10.front().val, 0x5432);\r\n        v10.emplace_front(6, 5, 4, 3, 2);\r\n        CHECK_INT(v10.front().val, 0x65432);\r\n\r\n        v10.emplace_after(v10.begin());\r\n        CHECK_INT((*++v10.begin()).val, 0);\r\n        v10.emplace_after(v10.begin(), 2);\r\n        CHECK_INT((*++v10.begin()).val, 2);\r\n        v10.emplace_after(v10.begin(), 3, 2);\r\n        CHECK_INT((*++v10.begin()).val, 0x32);\r\n        v10.emplace_after(v10.begin(), 4, 3, 2);\r\n        CHECK_INT((*++v10.begin()).val, 0x432);\r\n        v10.emplace_after(v10.begin(), 5, 4, 3, 2);\r\n        CHECK_INT((*++v10.begin()).val, 0x5432);\r\n        v10.emplace_after(v10.begin(), 6, 5, 4, 3, 2);\r\n        CHECK_INT((*++v10.begin()).val, 0x65432);\r\n    }\r\n\r\n    { // check for lvalue stealing\r\n        STD forward_list<Copyable_int> v11;\r\n\r\n        Copyable_int ci2(2);\r\n        v11.push_front(ci2);\r\n        CHECK_INT(ci2.val, 2);\r\n        CHECK_INT(v11.front().val, 2);\r\n\r\n        Copyable_int ci3(3);\r\n        STD forward_list<Copyable_int>::iterator it = v11.insert_after(v11.before_begin(), ci3);\r\n        CHECK(it == v11.begin());\r\n        CHECK_INT(ci3.val, 3);\r\n        CHECK_INT(v11.front().val, 3);\r\n\r\n        STD forward_list<Copyable_int> v12(v11);\r\n        CHECK(v11 == v12);\r\n        v11 = v12;\r\n        CHECK(v11 == v12);\r\n\r\n        STD forward_list<Copyable_int> v13(STD make_move_iterator(v11.begin()), STD make_move_iterator(v11.end()));\r\n        CHECK_INT(v13.front().val, 3);\r\n        CHECK_INT(v11.front().val, -1);\r\n    }\r\n\r\n    v0.assign(v4.begin(), v4.end());\r\n    CHECK_INT(size(v0), size(v4));\r\n    CHECK_INT(v0.front(), v4.front());\r\n    v0.assign(4, 'w');\r\n    CHECK_INT(size(v0), 4);\r\n    CHECK_INT(v0.front(), 'w');\r\n    CHECK_INT(*v0.insert_after(v0.before_begin(), 'a'), 'a');\r\n    CHECK_INT(v0.front(), 'a');\r\n    CHECK_INT(*++v0.begin(), 'w');\r\n    Mycont::iterator it = v0.insert_after(v0.before_begin(), 2, 'b');\r\n    CHECK(it == ++v0.begin());\r\n    CHECK_INT(v0.front(), 'b');\r\n    CHECK_INT(*++v0.begin(), 'b');\r\n    CHECK_INT(*++ ++v0.begin(), 'a');\r\n    it = v0.insert_after(before_end(v0), v4.begin(), v4.end());\r\n    CHECK(++it == v0.end());\r\n    CHECK_INT(back(v0), back(v4));\r\n    it = v0.insert_after(before_end(v0), carr, carr + 3);\r\n    CHECK(++it == v0.end());\r\n    CHECK_INT(back(v0), 'c');\r\n    v0.erase_after(v0.before_begin());\r\n    CHECK_INT(v0.front(), 'b');\r\n    CHECK_INT(*++v0.begin(), 'a');\r\n    v0.erase_after(v0.before_begin(), ++v0.begin());\r\n    CHECK_INT(v0.front(), 'a');\r\n\r\n    v0.clear();\r\n    CHECK(v0.empty());\r\n    v0.swap(v1);\r\n    CHECK(!v0.empty());\r\n    CHECK(v1.empty());\r\n    STD swap(v0, v1);\r\n    CHECK(v0.empty());\r\n    CHECK(!v1.empty());\r\n    CHECK(v1 == v1);\r\n    CHECK(v0 < v1);\r\n    CHECK(v0 != v1);\r\n    CHECK(v1 > v0);\r\n    CHECK(v0 <= v1);\r\n    CHECK(v1 >= v0);\r\n\r\n    v0.insert_after(v0.before_begin(), carr, carr + 3);\r\n    v1.splice_after(v1.before_begin(), v0);\r\n    CHECK(v0.empty());\r\n    CHECK_INT(v1.front(), 'a');\r\n    v0.splice_after(before_end(v0), v1, v1.before_begin());\r\n    CHECK_INT(size(v0), 1);\r\n    CHECK_INT(v0.front(), 'a');\r\n    v0.splice_after(v0.before_begin(), v1, v1.before_begin(), v1.end());\r\n    CHECK_INT(v0.front(), 'b');\r\n    CHECK(v1.empty());\r\n    v0.remove('b');\r\n    CHECK_INT(v0.front(), 'c');\r\n    v0.remove_if(STD binder2nd<STD not_equal_to<char>>(STD not_equal_to<char>(), 'c'));\r\n    CHECK_INT(v0.front(), 'c');\r\n    CHECK_INT(size(v0), 1);\r\n\r\n    v0.merge(v1, STD greater<char>());\r\n    CHECK_INT(v0.front(), 'c');\r\n    CHECK_INT(size(v0), 1);\r\n    v0.insert_after(v0.before_begin(), carr, carr + 3);\r\n    v0.unique();\r\n    CHECK_INT(back(v0), 'c');\r\n    CHECK_INT(size(v0), 3);\r\n    v0.unique(STD not_equal_to<char>());\r\n    CHECK_INT(v0.front(), 'a');\r\n    CHECK_INT(size(v0), 1);\r\n    v1.insert_after(v1.before_begin(), carr, carr + 3);\r\n    v0.merge(v1);\r\n    CHECK_INT(back(v0), 'c');\r\n    CHECK_INT(size(v0), 4);\r\n    v0.sort(STD greater<char>());\r\n    CHECK_INT(back(v0), 'a');\r\n    CHECK_INT(size(v0), 4);\r\n    v0.sort();\r\n    CHECK_INT(back(v0), 'c');\r\n    CHECK_INT(size(v0), 4);\r\n    v0.reverse();\r\n    CHECK_INT(back(v0), 'a');\r\n    CHECK_INT(size(v0), 4);\r\n\r\n    v0.clear();\r\n    v1.clear();\r\n    v0.insert_after(v0.before_begin(), carr, carr + 3);\r\n    v1.splice_after(v1.before_begin(), STD move(v0));\r\n    CHECK(v0.empty());\r\n    CHECK_INT(v1.front(), 'a');\r\n    v0.splice_after(before_end(v0), STD move(v1), v1.before_begin());\r\n    CHECK_INT(size(v0), 1);\r\n    CHECK_INT(v0.front(), 'a');\r\n    v0.splice_after(v0.before_begin(), STD move(v1), v1.before_begin(), v1.end());\r\n    CHECK_INT(v0.front(), 'b');\r\n    CHECK(v1.empty());\r\n\r\n    v0.assign(1, 'c');\r\n    v1.assign(2, 'b');\r\n    v0.merge(STD move(v1), STD greater<char>());\r\n    CHECK_INT(v0.front(), 'c');\r\n\r\n    v0.assign(1, 'c');\r\n    v1.assign(2, 'b');\r\n    v0.merge(STD move(v1));\r\n    CHECK_INT(v0.front(), 'b');\r\n\r\n    {\r\n        STD initializer_list<char> init{'a', 'b', 'c'};\r\n        Mycont v11(init);\r\n        CHECK_INT(size(v11), 3);\r\n        CHECK_INT(v11.front(), 'a');\r\n\r\n        v11.clear();\r\n        v11 = init;\r\n        CHECK_INT(size(v11), 3);\r\n        CHECK_INT(v11.front(), 'a');\r\n\r\n        Mycont::iterator it0 = v11.insert_after(v11.begin(), init);\r\n        CHECK_INT(*it0, 'c');\r\n        CHECK_INT(size(v11), 6);\r\n        CHECK_INT(*++v11.begin(), 'a');\r\n\r\n        v11.assign(init);\r\n        CHECK_INT(size(v11), 3);\r\n        CHECK_INT(v11.front(), 'a');\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/fstream1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <fstream>, part 1\r\n#define TEST_NAME \"<fstream>, part 1\"\r\n\r\n#include \"tdefs.h\"\r\n#include <assert.h>\r\n#include <fstream>\r\n#include <string>\r\n\r\n#include <temp_file_name.hpp>\r\n\r\nvoid test_main() { // test basic workings of char fstream definitions\r\n    STD string tn_str = temp_file_name();\r\n    const char* tn    = tn_str.c_str();\r\n\r\n    // test output file opening\r\n    STD ofstream ofs(tn);\r\n    CHECK(ofs.is_open());\r\n    ofs.close();\r\n\r\n    STD ofstream ofs_str(tn_str);\r\n    CHECK(ofs_str.is_open());\r\n    ofs_str.close();\r\n    ofs_str.open(STD string(tn));\r\n    ofs_str.close();\r\n\r\n    CHECK(!ofs.is_open());\r\n    CHECK(!ofs.fail());\r\n    ofs.close();\r\n    CHECK(ofs.fail());\r\n    CHECK(ofs.rdbuf()->close() == nullptr);\r\n\r\n    {\r\n        typedef STD filebuf Mycont;\r\n        Mycont v6;\r\n        CHECK(v6.open(tn, STD ios::in | STD ios::out) == &v6);\r\n        Mycont v7(STD move(v6));\r\n        CHECK(!v6.is_open());\r\n        CHECK(v7.is_open());\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK(!v7.is_open());\r\n        CHECK(v8.is_open());\r\n    }\r\n\r\n    // test output file operations\r\n    ofs.clear();\r\n    ofs.open(tn, STD ios::out | STD ios::trunc);\r\n    CHECK(ofs.is_open());\r\n    CHECK(ofs.rdbuf()->is_open());\r\n    ofs << \"this is a test\" << STD endl;\r\n    ofs.close();\r\n    CHECK(!ofs.is_open());\r\n    CHECK(ofs.good());\r\n    CHECK(ofs.rdbuf()->open(tn, STD ios::app | STD ios::out) != nullptr);\r\n    ofs << \"this is only a test\" << STD endl;\r\n    ofs.close();\r\n    CHECK(!ofs.is_open());\r\n    CHECK(ofs.good());\r\n\r\n    {\r\n        typedef STD ofstream Mycont;\r\n        Mycont v6;\r\n        v6.open(tn, STD ios::in | STD ios::out);\r\n        CHECK(v6.is_open());\r\n        Mycont v7(STD move(v6));\r\n        CHECK(!v6.is_open());\r\n        CHECK(v7.is_open());\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK(!v7.is_open());\r\n        CHECK(v8.is_open());\r\n    }\r\n\r\n    { // test ofstream typedefs\r\n        STD ofstream::char_type* pc   = (char*) nullptr;\r\n        STD ofstream::int_type* pi    = (int*) nullptr;\r\n        STD ofstream::pos_type* pp    = (STD streampos*) nullptr;\r\n        STD ofstream::off_type* po    = (STD streamoff*) nullptr;\r\n        STD ofstream::traits_type* pt = (STD char_traits<char>*) nullptr;\r\n\r\n        pc = pc; // to quiet diagnostics\r\n        pi = pi;\r\n        pp = pp;\r\n        po = po;\r\n        pt = pt;\r\n    }\r\n\r\n    // test input file opening\r\n    STD ifstream ifs(tn);\r\n    CHECK(ifs.is_open());\r\n    ifs.close();\r\n\r\n    STD ifstream ifs_str(tn_str);\r\n    CHECK(ifs_str.is_open());\r\n    ifs_str.close();\r\n    ifs_str.open(STD string(tn));\r\n    ifs_str.close();\r\n\r\n    CHECK(!ifs.is_open());\r\n    CHECK(!ifs.fail());\r\n    ifs.close();\r\n    CHECK(ifs.fail());\r\n    CHECK(ifs.rdbuf()->close() == nullptr);\r\n\r\n    // test input file operations\r\n    char buf[50];\r\n\r\n    ifs.clear();\r\n    ifs.open(tn, STD ios::in);\r\n    CHECK(ifs.is_open());\r\n    CHECK(ifs.rdbuf()->is_open());\r\n    ifs.getline(buf, sizeof(buf));\r\n    CHECK_STR(buf, \"this is a test\");\r\n\r\n    STD streampos p1 = ifs.rdbuf()->pubseekoff(0, STD ios::cur);\r\n    ifs.getline(buf, sizeof(buf));\r\n    CHECK_STR(buf, \"this is only a test\");\r\n    CHECK(ifs.rdbuf()->pubseekpos(p1) == p1);\r\n    ifs.getline(buf, sizeof(buf));\r\n    CHECK_STR(buf, \"this is only a test\");\r\n    ifs.rdbuf()->pubseekoff(0, STD ios::beg);\r\n    ifs.getline(buf, sizeof(buf));\r\n    CHECK_STR(buf, \"this is a test\");\r\n    ifs.close();\r\n    CHECK(!ifs.is_open());\r\n    CHECK(ifs.good());\r\n\r\n    {\r\n        typedef STD ifstream Mycont;\r\n        Mycont v6;\r\n        v6.open(tn, STD ios::in | STD ios::out);\r\n        CHECK(v6.is_open());\r\n        Mycont v7(STD move(v6));\r\n        CHECK(!v6.is_open());\r\n        CHECK(v7.is_open());\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK(!v7.is_open());\r\n        CHECK(v8.is_open());\r\n    }\r\n\r\n    { // test istream typedefs\r\n        STD ifstream::char_type* pc   = (char*) nullptr;\r\n        STD ifstream::int_type* pi    = (int*) nullptr;\r\n        STD ifstream::pos_type* pp    = (STD streampos*) nullptr;\r\n        STD ifstream::off_type* po    = (STD streamoff*) nullptr;\r\n        STD ifstream::traits_type* pt = (STD char_traits<char>*) nullptr;\r\n\r\n        pc = pc; // to quiet diagnostics\r\n        pi = pi;\r\n        pp = pp;\r\n        po = po;\r\n        pt = pt;\r\n    }\r\n\r\n    // test combined file operations\r\n    STD filebuf fb;\r\n\r\n    fb.open(tn_str, STD ios::in | STD ios::out);\r\n    fb.close();\r\n\r\n    STD istream nifs(&fb);\r\n    STD ostream nofs(nifs.rdbuf());\r\n    STD streambuf* psb = &fb;\r\n    STD istream* pis   = &nifs;\r\n    STD ostream* pos   = &nofs;\r\n\r\n    psb = psb; // to quiet diagnostics\r\n    pis = pis;\r\n    pos = pos;\r\n\r\n    CHECK(!fb.is_open());\r\n    CHECK(fb.open(tn, STD ios::in | STD ios::out) == &fb);\r\n    CHECK(fb.is_open());\r\n    CHECK(nifs.good());\r\n    CHECK(nofs.good());\r\n    nifs.rdbuf()->pubseekoff(0, STD ios::end);\r\n    nofs << \"this is still just a test\" << STD endl;\r\n    nifs.rdbuf()->pubseekoff(0, STD ios::beg);\r\n    nifs.getline(buf, sizeof(buf));\r\n    CHECK_STR(buf, \"this is a test\");\r\n    nifs.getline(buf, sizeof(buf));\r\n    CHECK_STR(buf, \"this is only a test\");\r\n    nifs.getline(buf, sizeof(buf));\r\n    CHECK_STR(buf, \"this is still just a test\");\r\n    CHECK(fb.close() == &fb);\r\n\r\n    STD ofstream nnofs(tn, STD ios::in | STD ios::out | STD ios::ate);\r\n    CHECK(nnofs.is_open());\r\n    nnofs << \"one last test\" << STD endl;\r\n    nnofs.close();\r\n\r\n    {\r\n        typedef STD fstream Mycont;\r\n        Mycont v6;\r\n        v6.open(tn, STD ios::in | STD ios::out);\r\n        CHECK(v6.is_open());\r\n        Mycont v7(STD move(v6));\r\n        CHECK(!v6.is_open());\r\n        CHECK(v7.is_open());\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK(!v7.is_open());\r\n        CHECK(v8.is_open());\r\n    }\r\n\r\n    { // test filebuf typedefs\r\n        STD filebuf::char_type* pc   = (char*) nullptr;\r\n        STD filebuf::int_type* pi    = (int*) nullptr;\r\n        STD filebuf::pos_type* pp    = (STD streampos*) nullptr;\r\n        STD filebuf::off_type* po    = (STD streamoff*) nullptr;\r\n        STD filebuf::traits_type* pt = (STD char_traits<char>*) nullptr;\r\n\r\n        pc = pc; // to quiet diagnostics\r\n        pi = pi;\r\n        pp = pp;\r\n        po = po;\r\n        pt = pt;\r\n    }\r\n\r\n    { // test fstream\r\n        STD fstream nfs(tn);\r\n        CHECK(nfs.is_open());\r\n        nfs.close();\r\n\r\n        STD fstream nfs_str(tn_str);\r\n        CHECK(nfs_str.is_open());\r\n        nfs_str.close();\r\n        nfs_str.open(STD string(tn));\r\n        nfs_str.close();\r\n\r\n        pis = &nfs;\r\n        pos = &nfs;\r\n\r\n        nfs.open(tn);\r\n        CHECK(nfs.is_open());\r\n        CHECK(nfs.good());\r\n        nfs.rdbuf()->pubseekoff(0, STD ios::end);\r\n        nfs << \"one more last test\" << STD endl;\r\n        nfs.rdbuf()->pubseekoff(0, STD ios::beg);\r\n        nfs.getline(buf, sizeof(buf));\r\n        CHECK_STR(buf, \"this is a test\");\r\n        nfs.getline(buf, sizeof(buf));\r\n        CHECK_STR(buf, \"this is only a test\");\r\n        nfs.getline(buf, sizeof(buf));\r\n        CHECK_STR(buf, \"this is still just a test\");\r\n        nfs.getline(buf, sizeof(buf));\r\n        CHECK_STR(buf, \"one last test\");\r\n        nfs.getline(buf, sizeof(buf));\r\n        CHECK_STR(buf, \"one more last test\");\r\n\r\n        STD basic_filebuf<char>* pfb1                        = &fb;\r\n        STD basic_filebuf<char, STD char_traits<char>>* pfb2 = pfb1;\r\n        pfb2                                                 = pfb2;\r\n\r\n        STD basic_fstream<char>* pf1                        = &nfs;\r\n        STD basic_fstream<char, STD char_traits<char>>* pf2 = pf1;\r\n        pf2                                                 = pf2;\r\n\r\n        STD basic_ifstream<char>* pif1                        = &ifs;\r\n        STD basic_ifstream<char, STD char_traits<char>>* pif2 = pif1;\r\n        pif2                                                  = pif2;\r\n\r\n        STD basic_ofstream<char>* pof1                        = &ofs;\r\n        STD basic_ofstream<char, STD char_traits<char>>* pof2 = pof1;\r\n        pof2                                                  = pof2;\r\n    }\r\n\r\n    { // test fstream typedefs\r\n        STD fstream::char_type* pc   = (char*) nullptr;\r\n        STD fstream::int_type* pi    = (int*) nullptr;\r\n        STD fstream::pos_type* pp    = (STD streampos*) nullptr;\r\n        STD fstream::off_type* po    = (STD streamoff*) nullptr;\r\n        STD fstream::traits_type* pt = (STD char_traits<char>*) nullptr;\r\n\r\n        pc = pc; // to quiet diagnostics\r\n        pi = pi;\r\n        pp = pp;\r\n        po = po;\r\n        pt = pt;\r\n    }\r\n\r\n    CSTD remove(tn);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/fstream2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <fstream>, part 2\r\n#define TEST_NAME \"<fstream>, part 2\"\r\n\r\n#include \"tdefs.h\"\r\n#include <assert.h>\r\n#include <fstream>\r\n#include <wchar.h>\r\n\r\n#include <temp_file_name.hpp>\r\n\r\nvoid test_main() { // test basic workings of wide fstream definitions\r\n    const auto temp_name = temp_file_name();\r\n    const char* tn       = temp_name.c_str();\r\n\r\n    // test output file opening\r\n    STD wofstream ofs(tn);\r\n    CHECK(ofs.is_open());\r\n    ofs.close();\r\n\r\n    // test input file opening\r\n    STD wifstream ifs(tn);\r\n    CHECK(ifs.is_open());\r\n    ifs.close();\r\n\r\n    // test closed file closing\r\n    CHECK(!ifs.is_open());\r\n    CHECK(!ifs.fail());\r\n    ifs.close();\r\n    CHECK(ifs.fail());\r\n    CHECK(ifs.rdbuf()->close() == nullptr);\r\n    CHECK(!ofs.is_open());\r\n    CHECK(!ofs.fail());\r\n    ofs.close();\r\n    CHECK(ofs.fail());\r\n    CHECK(ofs.rdbuf()->close() == nullptr);\r\n\r\n    {\r\n        typedef STD wfilebuf Mycont;\r\n        Mycont v6;\r\n        CHECK(v6.open(tn, STD ios::in | STD ios::out) == &v6);\r\n        Mycont v7(STD move(v6));\r\n        CHECK(!v6.is_open());\r\n        CHECK(v7.is_open());\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK(!v7.is_open());\r\n        CHECK(v8.is_open());\r\n    }\r\n\r\n    // test output file operations\r\n    ofs.clear(), ofs.open(tn, STD ios::out | STD ios::trunc);\r\n    CHECK(ofs.is_open());\r\n    CHECK(ofs.rdbuf()->is_open());\r\n    ofs << L\"this is a test\" << STD endl;\r\n    ofs.close();\r\n    CHECK(!ofs.is_open());\r\n    CHECK(ofs.good());\r\n    CHECK(ofs.rdbuf()->open(tn, STD ios::app | STD ios::out) != nullptr);\r\n    ofs << L\"this is only a test\" << STD endl;\r\n    ofs.close();\r\n    CHECK(!ofs.is_open());\r\n    CHECK(ofs.good());\r\n\r\n    {\r\n        typedef STD wofstream Mycont;\r\n        Mycont v6;\r\n        v6.open(tn, STD ios::in | STD ios::out);\r\n        CHECK(v6.is_open());\r\n        Mycont v7(STD move(v6));\r\n        CHECK(!v6.is_open());\r\n        CHECK(v7.is_open());\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK(!v7.is_open());\r\n        CHECK(v8.is_open());\r\n    }\r\n\r\n    { // test wofstream typedefs\r\n        STD wofstream::char_type* pc   = (wchar_t*) nullptr;\r\n        STD wofstream::int_type* pi    = (CSTD wint_t*) nullptr;\r\n        STD wofstream::pos_type* pp    = (STD wstreampos*) nullptr;\r\n        STD wofstream::off_type* po    = (STD streamoff*) nullptr;\r\n        STD wofstream::traits_type* pt = (STD char_traits<wchar_t>*) nullptr;\r\n\r\n        pc = pc; // to quiet diagnostics\r\n        pi = pi;\r\n        pp = pp;\r\n        po = po;\r\n        pt = pt;\r\n    }\r\n\r\n    // test input file operations\r\n    wchar_t buf[50];\r\n\r\n    ifs.clear(), ifs.open(tn, STD ios::in);\r\n    CHECK(ifs.is_open());\r\n    CHECK(ifs.rdbuf()->is_open());\r\n    ifs.getline(buf, sizeof(buf) / sizeof(buf[0]));\r\n    CHECK_WSTR(buf, L\"this is a test\");\r\n\r\n    STD streampos p1 = ifs.rdbuf()->pubseekoff(0, STD ios::cur);\r\n    ifs.getline(buf, sizeof(buf) / sizeof(buf[0]));\r\n    CHECK_WSTR(buf, L\"this is only a test\");\r\n    CHECK(ifs.rdbuf()->pubseekpos(p1) == p1);\r\n    ifs.getline(buf, sizeof(buf) / sizeof(buf[0]));\r\n    CHECK_WSTR(buf, L\"this is only a test\");\r\n    ifs.rdbuf()->pubseekoff(0, STD ios::beg);\r\n    ifs.getline(buf, sizeof(buf) / sizeof(buf[0]));\r\n    CHECK_WSTR(buf, L\"this is a test\");\r\n    ifs.close();\r\n    CHECK(!ifs.is_open());\r\n    CHECK(ifs.good());\r\n\r\n    {\r\n        typedef STD wifstream Mycont;\r\n        Mycont v6;\r\n        v6.open(tn, STD ios::in | STD ios::out);\r\n        CHECK(v6.is_open());\r\n        Mycont v7(STD move(v6));\r\n        CHECK(!v6.is_open());\r\n        CHECK(v7.is_open());\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK(!v7.is_open());\r\n        CHECK(v8.is_open());\r\n    }\r\n\r\n    { // test istream typedefs\r\n        STD wifstream::char_type* pc   = (wchar_t*) nullptr;\r\n        STD wifstream::int_type* pi    = (CSTD wint_t*) nullptr;\r\n        STD wifstream::pos_type* pp    = (STD wstreampos*) nullptr;\r\n        STD wifstream::off_type* po    = (STD streamoff*) nullptr;\r\n        STD wifstream::traits_type* pt = (STD char_traits<wchar_t>*) nullptr;\r\n\r\n        pc = pc; // to quiet diagnostics\r\n        pi = pi;\r\n        pp = pp;\r\n        po = po;\r\n        pt = pt;\r\n    }\r\n\r\n    // test combined file operations\r\n    STD wfilebuf fb;\r\n    STD wistream nifs(&fb);\r\n    STD wostream nofs(nifs.rdbuf());\r\n    STD wstreambuf* psb = &fb;\r\n    STD wistream* pis   = &nifs;\r\n    STD wostream* pos   = &nofs;\r\n\r\n    psb = psb; // to quiet diagnostics\r\n    pis = pis;\r\n    pos = pos;\r\n\r\n    CHECK(!fb.is_open());\r\n    CHECK(fb.open(tn, STD ios::in | STD ios::out) == &fb);\r\n    CHECK(fb.is_open());\r\n    CHECK(nifs.good());\r\n    CHECK(nofs.good());\r\n    nifs.rdbuf()->pubseekoff(0, STD ios::end);\r\n    nofs << L\"this is still just a test\" << STD endl;\r\n    nifs.rdbuf()->pubseekoff(0, STD ios::beg);\r\n    nifs.getline(buf, sizeof(buf) / sizeof(buf[0]));\r\n    CHECK_WSTR(buf, L\"this is a test\");\r\n    nifs.getline(buf, sizeof(buf) / sizeof(buf[0]));\r\n    CHECK_WSTR(buf, L\"this is only a test\");\r\n    nifs.getline(buf, sizeof(buf) / sizeof(buf[0]));\r\n    CHECK_WSTR(buf, L\"this is still just a test\");\r\n    CHECK(fb.close() == &fb);\r\n\r\n    STD wofstream nnofs(tn, STD ios::in | STD ios::out | STD ios::ate);\r\n    CHECK(nnofs.is_open());\r\n    nnofs << L\"one last test\" << STD endl;\r\n    nnofs.close();\r\n\r\n    {\r\n        typedef STD wfstream Mycont;\r\n        Mycont v6;\r\n        v6.open(tn, STD ios::in | STD ios::out);\r\n        CHECK(v6.is_open());\r\n        Mycont v7(STD move(v6));\r\n        CHECK(!v6.is_open());\r\n        CHECK(v7.is_open());\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK(!v7.is_open());\r\n        CHECK(v8.is_open());\r\n    }\r\n\r\n    { // test wfilebuf typedefs\r\n        STD wfilebuf::char_type* pc   = (wchar_t*) nullptr;\r\n        STD wfilebuf::int_type* pi    = (CSTD wint_t*) nullptr;\r\n        STD wfilebuf::pos_type* pp    = (STD wstreampos*) nullptr;\r\n        STD wfilebuf::off_type* po    = (STD streamoff*) nullptr;\r\n        STD wfilebuf::traits_type* pt = (STD char_traits<wchar_t>*) nullptr;\r\n\r\n        pc = pc; // to quiet diagnostics\r\n        pi = pi;\r\n        pp = pp;\r\n        po = po;\r\n        pt = pt;\r\n    }\r\n\r\n    { // test fstream and template equivalents\r\n        STD wfstream nfs(tn);\r\n\r\n        pis = &nfs;\r\n        pos = &nfs;\r\n\r\n        CHECK(nfs.is_open());\r\n        CHECK(nfs.good());\r\n        nfs.rdbuf()->pubseekoff(0, STD ios::end);\r\n        nfs << L\"one more last test\" << STD endl;\r\n        nfs.rdbuf()->pubseekoff(0, STD ios::beg);\r\n        nfs.getline(buf, sizeof(buf) / sizeof(buf[0]));\r\n        CHECK_WSTR(buf, L\"this is a test\");\r\n        nfs.getline(buf, sizeof(buf) / sizeof(buf[0]));\r\n        CHECK_WSTR(buf, L\"this is only a test\");\r\n        nfs.getline(buf, sizeof(buf) / sizeof(buf[0]));\r\n        CHECK_WSTR(buf, L\"this is still just a test\");\r\n        nfs.getline(buf, sizeof(buf) / sizeof(buf[0]));\r\n        CHECK_WSTR(buf, L\"one last test\");\r\n        nfs.getline(buf, sizeof(buf) / sizeof(buf[0]));\r\n        CHECK_WSTR(buf, L\"one more last test\");\r\n\r\n        STD basic_filebuf<wchar_t>* pfb1                           = &fb;\r\n        STD basic_filebuf<wchar_t, STD char_traits<wchar_t>>* pfb2 = pfb1;\r\n        pfb2                                                       = pfb2;\r\n\r\n        STD basic_fstream<wchar_t>* pf1                           = &nfs;\r\n        STD basic_fstream<wchar_t, STD char_traits<wchar_t>>* pf2 = pf1;\r\n        pf2                                                       = pf2;\r\n\r\n        STD basic_ifstream<wchar_t>* pif1                           = &ifs;\r\n        STD basic_ifstream<wchar_t, STD char_traits<wchar_t>>* pif2 = pif1;\r\n        pif2                                                        = pif2;\r\n\r\n        STD basic_ofstream<wchar_t>* pof1                           = &ofs;\r\n        STD basic_ofstream<wchar_t, STD char_traits<wchar_t>>* pof2 = pof1;\r\n        pof2                                                        = pof2;\r\n    }\r\n\r\n    { // test wfstream typedefs\r\n        STD wfstream::char_type* pc   = (wchar_t*) nullptr;\r\n        STD wfstream::int_type* pi    = (CSTD wint_t*) nullptr;\r\n        STD wfstream::pos_type* pp    = (STD wstreampos*) nullptr;\r\n        STD wfstream::off_type* po    = (STD streamoff*) nullptr;\r\n        STD wfstream::traits_type* pt = (STD char_traits<wchar_t>*) nullptr;\r\n\r\n        pc = pc; // to quiet diagnostics\r\n        pi = pi;\r\n        pp = pp;\r\n        po = po;\r\n        pt = pt;\r\n    }\r\n\r\n    CSTD remove(tn);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/functional/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <functional>\r\n#define TEST_NAME \"<functional>\"\r\n\r\n#define _HAS_AUTO_PTR_ETC                1\r\n#define _HAS_DEPRECATED_ADAPTOR_TYPEDEFS 1\r\n#define _HAS_DEPRECATED_NEGATORS         1\r\n#define _SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include <algorithm>\r\n#include <functional>\r\n#include <string.h>\r\n#include <string>\r\n\r\nvoid test_simple(char* first, char* last, char* dest) { // test simple function objects\r\n    typedef STD unary_function<char, int> Uf;\r\n    Uf::argument_type* pa0 = (char*) nullptr;\r\n    Uf::result_type* pr0   = (int*) nullptr;\r\n\r\n    typedef STD binary_function<char, int, float> Bf;\r\n    Bf::first_argument_type* pa1  = (char*) nullptr;\r\n    Bf::second_argument_type* pa2 = (int*) nullptr;\r\n    Bf::result_type* pr1          = (float*) nullptr;\r\n\r\n    char* mid = first + 2;\r\n\r\n    pa0 = pa0; // to quiet diagnostics\r\n    pr0 = pr0;\r\n    pa1 = pa1;\r\n    pa2 = pa2;\r\n    pr1 = pr1;\r\n\r\n    CSTD strcpy(first, \"\\4\\3\\2\\1\");\r\n    CSTD strcpy(dest, \"abcd\");\r\n    STD transform(first, mid, mid, dest, STD plus<char>());\r\n    CHECK_MEM(dest, \"\\6\\4cd\", 4);\r\n    STD transform(first, mid, mid, dest, STD minus<char>());\r\n    CHECK_MEM(dest, \"\\2\\2cd\", 4);\r\n    STD transform(first, mid, mid, dest, STD multiplies<char>());\r\n    CHECK_MEM(dest, \"\\10\\3cd\", 4);\r\n    STD transform(first, mid, mid, dest, STD divides<char>());\r\n    CHECK_MEM(dest, \"\\2\\3cd\", 4);\r\n    STD transform(first, mid, first + 1, dest, STD modulus<char>());\r\n    CHECK_MEM(dest, \"\\1\\1cd\", 4);\r\n    STD transform(first, mid, dest, STD negate<char>());\r\n    CHECK_INT(((signed char*) dest)[0], -4);\r\n    CHECK_INT(((signed char*) dest)[1], -3);\r\n\r\n    STD transform(first, mid, \"\\4\\4\", dest, STD equal_to<char>());\r\n    CHECK_MEM(dest, \"\\1\\0cd\", 4);\r\n    STD transform(first, mid, \"\\4\\4\", dest, STD not_equal_to<char>());\r\n    CHECK_MEM(dest, \"\\0\\1cd\", 4);\r\n    STD transform(first, mid, \"\\3\\3\", dest, STD greater<char>());\r\n    CHECK_MEM(dest, \"\\1\\0cd\", 4);\r\n    STD transform(first, mid, \"\\4\\4\", dest, STD less<char>());\r\n    CHECK_MEM(dest, \"\\0\\1cd\", 4);\r\n    STD transform(first, mid, \"\\4\\4\", dest, STD greater_equal<char>());\r\n    CHECK_MEM(dest, \"\\1\\0cd\", 4);\r\n    STD transform(first, mid, \"\\3\\3\", dest, STD less_equal<char>());\r\n    CHECK_MEM(dest, \"\\0\\1cd\", 4);\r\n\r\n    STD transform(last - 1, last + 1, \"\\1\\0\", dest, STD logical_and<char>());\r\n    CHECK_MEM(dest, \"\\1\\0cd\", 4);\r\n    STD transform(last - 1, last + 1, dest, STD logical_not<char>());\r\n    CHECK_MEM(dest, \"\\0\\1cd\", 4);\r\n    STD transform(last - 1, last + 1, \"\\0\\0\", dest, STD logical_or<char>());\r\n    CHECK_MEM(dest, \"\\1\\0cd\", 4);\r\n\r\n    STD transform(first, mid, mid, dest, STD bit_and<char>());\r\n    CHECK_MEM(dest, \"\\0\\1cd\", 4);\r\n    STD transform(first, mid, mid, dest, STD bit_or<char>());\r\n    CHECK_MEM(dest, \"\\6\\3cd\", 4);\r\n    STD transform(first, mid, mid, dest, STD bit_xor<char>());\r\n    CHECK_MEM(dest, \"\\6\\2cd\", 4);\r\n}\r\n\r\nclass Mybind1st : public STD binder1st<STD minus<char>> {\r\npublic:\r\n    typedef STD binder1st<STD minus<char>> Mybase;\r\n    typedef STD minus<char> Myop;\r\n\r\n    Mybind1st(const STD minus<char>& func, char left) : Mybase(func, left) { // construct from functor and left operand\r\n    }\r\n\r\n    Myop getop() const { // return protected op\r\n        return op;\r\n    }\r\n\r\n    char getval() const { // return protected value\r\n        return value;\r\n    }\r\n};\r\n\r\nclass Mybind2nd : public STD binder2nd<STD minus<char>> {\r\npublic:\r\n    typedef STD binder2nd<STD minus<char>> Mybase;\r\n    typedef STD minus<char> Myop;\r\n\r\n    Mybind2nd(const STD minus<char>& func, char right)\r\n        : Mybase(func, right) { // construct from functor and right operand\r\n    }\r\n\r\n    Myop getop() const { // return protected op\r\n        return op;\r\n    }\r\n\r\n    char getval() const { // return protected value\r\n        return value;\r\n    }\r\n};\r\n\r\nvoid test_compound(char* first, char* last, char* dest) { // test compound function objects\r\n    char* mid = first + 2;\r\n    STD logical_not<char> not_op;\r\n    STD unary_negate<STD logical_not<char>> unop(not_op);\r\n\r\n    CSTD strcpy(first, \"\\4\\3\\2\\1\");\r\n    CSTD strcpy(dest, \"abcd\");\r\n    STD transform(last - 1, last + 1, dest, unop);\r\n    STD transform(last - 1, last + 1, dest + 2, STD not1(STD logical_not<char>()));\r\n    CHECK_MEM(dest, \"\\1\\0\\1\\0\", 4);\r\n\r\n    STD less<char> less_op;\r\n    STD binary_negate<STD less<char>> binop(less_op);\r\n    STD transform(first, mid, \"\\5\\2\", dest, binop);\r\n    STD transform(first, mid, \"\\5\\2\", dest + 2, STD not2(STD less<char>()));\r\n    CHECK_MEM(dest, \"\\0\\1\\0\\1\", 4);\r\n\r\n    STD plus<char> plus_op;\r\n    STD binder1st<STD plus<char>> add1(plus_op, '\\1');\r\n    STD transform(first, mid, dest, add1);\r\n    STD transform(mid, last, dest + 2, STD bind1st(STD plus<char>(), '\\1'));\r\n    CHECK_MEM(dest, \"\\5\\4\\3\\2\", 4);\r\n\r\n    STD minus<char> minus_op;\r\n    STD binder2nd<STD minus<char>> sub1(minus_op, '\\1');\r\n    STD transform(first, mid, dest, sub1);\r\n    STD transform(mid, last, dest + 2, STD bind2nd(STD minus<char>(), '\\1'));\r\n    CHECK_MEM(dest, \"\\3\\2\\1\\0\", 4);\r\n}\r\n\r\n// functions to test pointer function objects\r\nchar ufn(char ch) { // unary increment function\r\n    return (char) (ch + 1);\r\n}\r\n\r\nchar bfn(char ch1, char ch2) { // binary add function\r\n    return (char) (ch1 + ch2);\r\n}\r\n\r\nstruct Myclass { // non-const functor\r\n    char fn0() { // return 7\r\n        return '\\7';\r\n    }\r\n\r\n    char fn1(char ch) { // increment argument\r\n        return (char) (ch + 1);\r\n    }\r\n} mycl;\r\n\r\nstruct Mycclass { // const functor\r\n    char fn0() const { // return 7\r\n        return '\\7';\r\n    }\r\n\r\n    char fn1(char ch) const {\r\n        return (char) (ch + 1);\r\n    }\r\n} myccl;\r\n\r\nvoid test_pointer(char* first, char* last, char* dest) { // test pointer function objects\r\n    char* mid = first + 2;\r\n\r\n    CSTD strcpy(first, \"\\4\\3\\2\\1\");\r\n    CSTD strcpy(dest, \"abcd\");\r\n    STD pointer_to_unary_function<char, char> uf(ufn);\r\n\r\n    STD transform(first, mid, dest, uf);\r\n    STD transform(mid, last, dest + 2, STD ptr_fun(ufn));\r\n    CHECK_MEM(dest, \"\\5\\4\\3\\2\", 4);\r\n    STD pointer_to_binary_function<char, char, char> bf(bfn);\r\n    STD transform(first, mid, \"\\2\\2\", dest, bf);\r\n    STD transform(mid, last, \"\\2\\2\", dest + 2, STD ptr_fun(bfn));\r\n    CHECK_MEM(dest, \"\\6\\5\\4\\3\", 4);\r\n\r\n    STD mem_fun_t<char, Myclass> mf(&Myclass::fn0);\r\n    CHECK_INT(mf(&mycl), '\\7');\r\n    CHECK_INT(STD mem_fun(&Myclass::fn0)(&mycl), '\\7');\r\n    STD mem_fun1_t<char, Myclass, char> mf1(&Myclass::fn1);\r\n    CHECK_INT(mf1(&mycl, '\\3'), '\\4');\r\n    CHECK_INT(STD mem_fun(&Myclass::fn1)(&mycl, '\\3'), '\\4');\r\n    STD mem_fun_ref_t<char, Myclass> mfr(&Myclass::fn0);\r\n    CHECK_INT(mfr(mycl), '\\7');\r\n    CHECK_INT(STD mem_fun_ref(&Myclass::fn0)(mycl), '\\7');\r\n    STD mem_fun1_ref_t<char, Myclass, char> mf1r(&Myclass::fn1);\r\n    CHECK_INT(mf1r(mycl, '\\3'), '\\4');\r\n    CHECK_INT(STD mem_fun_ref(&Myclass::fn1)(mycl, '\\3'), '\\4');\r\n\r\n    STD const_mem_fun_t<char, Mycclass> cmf(&Mycclass::fn0);\r\n    CHECK_INT(cmf(&myccl), '\\7');\r\n    CHECK_INT(STD mem_fun(&Mycclass::fn0)(&myccl), '\\7');\r\n    STD const_mem_fun1_t<char, Mycclass, char> cmf1(&Mycclass::fn1);\r\n    CHECK_INT(cmf1(&myccl, '\\3'), '\\4');\r\n    CHECK_INT(STD mem_fun(&Mycclass::fn1)(&myccl, '\\3'), '\\4');\r\n    STD const_mem_fun_ref_t<char, Mycclass> cmfr(&Mycclass::fn0);\r\n    CHECK_INT(cmfr(myccl), '\\7');\r\n    CHECK_INT(STD mem_fun_ref(&Mycclass::fn0)(myccl), '\\7');\r\n    STD const_mem_fun1_ref_t<char, Mycclass, char> cmf1r(&Mycclass::fn1);\r\n    CHECK_INT(cmf1r(myccl, '\\3'), '\\4');\r\n    CHECK_INT(STD mem_fun_ref(&Mycclass::fn1)(myccl, '\\3'), '\\4');\r\n}\r\n\r\nvoid test_main() { // test basic workings of functional definitions\r\n    char buf[]  = \"\\4\\3\\2\\1\";\r\n    char dest[] = \"abcd\";\r\n    char *first = buf, *last = buf + 4;\r\n\r\n    test_simple(first, last, dest);\r\n    test_compound(first, last, dest);\r\n    test_pointer(first, last, dest);\r\n\r\n    CSTD size_t hash_val = STD hash<int>()(3);\r\n    (void) hash_val;\r\n\r\n    hash_val = STD hash<double>()(3.0);\r\n    hash_val = STD hash<STD string>()(STD string(\"abc\"));\r\n    hash_val = STD hash<STD wstring>()(STD wstring(L\"abc\"));\r\n    hash_val = STD hash<long long>()((long long) 3);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/functional1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <functional>, original contents\r\n#define TEST_NAME \"<functional>, part 1\"\r\n\r\n#define _HAS_AUTO_PTR_ETC                1\r\n#define _HAS_DEPRECATED_ADAPTOR_TYPEDEFS 1\r\n#define _HAS_DEPRECATED_NEGATORS         1\r\n#define _SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING\r\n\r\n#pragma warning(disable : 4242) // conversion from 'X' to 'Y', possible loss of data\r\n#pragma warning(disable : 4244) // conversion from 'X' to 'Y', possible loss of data (Yes, duplicated message.)\r\n\r\n#include \"tdefs.h\"\r\n#include <algorithm>\r\n#include <functional>\r\n#include <string.h>\r\n\r\nvoid test_simple(char* first, char* last, char* dest) { // test simple function objects\r\n    typedef STD unary_function<char, int> Uf;\r\n    Uf::argument_type* pa0 = (char*) nullptr;\r\n    Uf::result_type* pr0   = (int*) nullptr;\r\n\r\n    typedef STD binary_function<char, int, float> Bf;\r\n    Bf::first_argument_type* pa1  = (char*) nullptr;\r\n    Bf::second_argument_type* pa2 = (int*) nullptr;\r\n    Bf::result_type* pr1          = (float*) nullptr;\r\n\r\n    char* mid = first + 2;\r\n\r\n    pa0 = pa0; // to quiet diagnostics\r\n    pr0 = pr0;\r\n    pa1 = pa1;\r\n    pa2 = pa2;\r\n    pr1 = pr1;\r\n\r\n    CSTD strcpy(first, \"\\4\\3\\2\\1\");\r\n    CSTD strcpy(dest, \"abcd\");\r\n    STD transform(first, mid, mid, dest, STD plus<char>());\r\n    CHECK_MEM(dest, \"\\6\\4cd\", 4);\r\n    STD transform(first, mid, mid, dest, STD minus<char>());\r\n    CHECK_MEM(dest, \"\\2\\2cd\", 4);\r\n    STD transform(first, mid, mid, dest, STD multiplies<char>());\r\n    CHECK_MEM(dest, \"\\10\\3cd\", 4);\r\n    STD transform(first, mid, mid, dest, STD divides<char>());\r\n    CHECK_MEM(dest, \"\\2\\3cd\", 4);\r\n    STD transform(first, mid, first + 1, dest, STD modulus<char>());\r\n    CHECK_MEM(dest, \"\\1\\1cd\", 4);\r\n    STD transform(first, mid, dest, STD negate<char>());\r\n    CHECK_INT(((signed char*) dest)[0], -4);\r\n    CHECK_INT(((signed char*) dest)[1], -3);\r\n\r\n    STD transform(first, mid, \"\\4\\4\", dest, STD equal_to<char>());\r\n    CHECK_MEM(dest, \"\\1\\0cd\", 4);\r\n    STD transform(first, mid, \"\\4\\4\", dest, STD not_equal_to<char>());\r\n    CHECK_MEM(dest, \"\\0\\1cd\", 4);\r\n    STD transform(first, mid, \"\\3\\3\", dest, STD greater<char>());\r\n    CHECK_MEM(dest, \"\\1\\0cd\", 4);\r\n    STD transform(first, mid, \"\\4\\4\", dest, STD less<char>());\r\n    CHECK_MEM(dest, \"\\0\\1cd\", 4);\r\n    STD transform(first, mid, \"\\4\\4\", dest, STD greater_equal<char>());\r\n    CHECK_MEM(dest, \"\\1\\0cd\", 4);\r\n    STD transform(first, mid, \"\\3\\3\", dest, STD less_equal<char>());\r\n    CHECK_MEM(dest, \"\\0\\1cd\", 4);\r\n\r\n    STD transform(last - 1, last + 1, \"\\1\\0\", dest, STD logical_and<char>());\r\n    CHECK_MEM(dest, \"\\1\\0cd\", 4);\r\n    STD transform(last - 1, last + 1, dest, STD logical_not<char>());\r\n    CHECK_MEM(dest, \"\\0\\1cd\", 4);\r\n    STD transform(last - 1, last + 1, \"\\0\\0\", dest, STD logical_or<char>());\r\n    CHECK_MEM(dest, \"\\1\\0cd\", 4);\r\n\r\n    STD transform(first, mid, mid, dest, STD bit_and<char>());\r\n    CHECK_MEM(dest, \"\\0\\1cd\", 4);\r\n    STD transform(first, mid, mid, dest, STD bit_or<char>());\r\n    CHECK_MEM(dest, \"\\6\\3cd\", 4);\r\n    STD transform(first, mid, mid, dest, STD bit_xor<char>());\r\n    CHECK_MEM(dest, \"\\6\\2cd\", 4);\r\n\r\n    CSTD strcpy(first, \"\\4\\3\\2\\1\");\r\n    CSTD strcpy(dest, \"abcd\");\r\n    STD transform(first, mid, mid, dest, STD plus<>());\r\n    CHECK_MEM(dest, \"\\6\\4cd\", 4);\r\n    STD transform(first, mid, mid, dest, STD minus<>());\r\n    CHECK_MEM(dest, \"\\2\\2cd\", 4);\r\n    STD transform(first, mid, mid, dest, STD multiplies<>());\r\n    CHECK_MEM(dest, \"\\10\\3cd\", 4);\r\n    STD transform(first, mid, mid, dest, STD divides<>());\r\n    CHECK_MEM(dest, \"\\2\\3cd\", 4);\r\n    STD transform(first, mid, first + 1, dest, STD modulus<>());\r\n    CHECK_MEM(dest, \"\\1\\1cd\", 4);\r\n    STD transform(first, mid, dest, STD negate<>());\r\n    CHECK_INT(((signed char*) dest)[0], -4);\r\n    CHECK_INT(((signed char*) dest)[1], -3);\r\n\r\n    STD transform(first, mid, \"\\4\\4\", dest, STD equal_to<>());\r\n    CHECK_MEM(dest, \"\\1\\0cd\", 4);\r\n    STD transform(first, mid, \"\\4\\4\", dest, STD not_equal_to<>());\r\n    CHECK_MEM(dest, \"\\0\\1cd\", 4);\r\n    STD transform(first, mid, \"\\3\\3\", dest, STD greater<>());\r\n    CHECK_MEM(dest, \"\\1\\0cd\", 4);\r\n    STD transform(first, mid, \"\\4\\4\", dest, STD less<>());\r\n    CHECK_MEM(dest, \"\\0\\1cd\", 4);\r\n    STD transform(first, mid, \"\\4\\4\", dest, STD greater_equal<>());\r\n    CHECK_MEM(dest, \"\\1\\0cd\", 4);\r\n    STD transform(first, mid, \"\\3\\3\", dest, STD less_equal<>());\r\n    CHECK_MEM(dest, \"\\0\\1cd\", 4);\r\n\r\n    STD transform(last - 1, last + 1, \"\\1\\0\", dest, STD logical_and<>());\r\n    CHECK_MEM(dest, \"\\1\\0cd\", 4);\r\n    STD transform(last - 1, last + 1, dest, STD logical_not<>());\r\n    CHECK_MEM(dest, \"\\0\\1cd\", 4);\r\n    STD transform(last - 1, last + 1, \"\\0\\0\", dest, STD logical_or<>());\r\n    CHECK_MEM(dest, \"\\1\\0cd\", 4);\r\n\r\n    STD transform(first, mid, mid, dest, STD bit_and<>());\r\n    CHECK_MEM(dest, \"\\0\\1cd\", 4);\r\n    STD transform(first, mid, mid, dest, STD bit_or<>());\r\n    CHECK_MEM(dest, \"\\6\\3cd\", 4);\r\n    STD transform(first, mid, mid, dest, STD bit_xor<>());\r\n    CHECK_MEM(dest, \"\\6\\2cd\", 4);\r\n\r\n    STD transform(last - 1, last + 1, dest, STD bit_not<>());\r\n    CHECK_MEM(dest, \"\\376\\377cd\", 4);\r\n}\r\n\r\nclass Mybind1st : public STD binder1st<STD minus<char>> {\r\npublic:\r\n    typedef STD binder1st<STD minus<char>> Mybase;\r\n    typedef STD minus<char> Myop;\r\n\r\n    Mybind1st(const STD minus<char>& func, char left) : Mybase(func, left) { // construct from functor and left operand\r\n    }\r\n\r\n    Myop getop() const { // return protected op\r\n        return op;\r\n    }\r\n\r\n    char getval() const { // return protected value\r\n        return value;\r\n    }\r\n};\r\n\r\nclass Mybind2nd : public STD binder2nd<STD minus<char>> {\r\npublic:\r\n    typedef STD binder2nd<STD minus<char>> Mybase;\r\n    typedef STD minus<char> Myop;\r\n\r\n    Mybind2nd(const STD minus<char>& func, char right)\r\n        : Mybase(func, right) { // construct from functor and right operand\r\n    }\r\n\r\n    Myop getop() const { // return protected op\r\n        return op;\r\n    }\r\n\r\n    char getval() const { // return protected value\r\n        return value;\r\n    }\r\n};\r\n\r\nvoid test_compound(char* first, char* last, char* dest) { // test compound function objects\r\n    char* mid = first + 2;\r\n    STD logical_not<char> not_op;\r\n    STD unary_negate<STD logical_not<char>> unop(not_op);\r\n\r\n    CSTD strcpy(first, \"\\4\\3\\2\\1\");\r\n    CSTD strcpy(dest, \"abcd\");\r\n    STD transform(last - 1, last + 1, dest, unop);\r\n    STD transform(last - 1, last + 1, dest + 2, STD not1(STD logical_not<char>()));\r\n    CHECK_MEM(dest, \"\\1\\0\\1\\0\", 4);\r\n\r\n    STD less<char> less_op;\r\n    STD binary_negate<STD less<char>> binop(less_op);\r\n    STD transform(first, mid, \"\\5\\2\", dest, binop);\r\n    STD transform(first, mid, \"\\5\\2\", dest + 2, STD not2(STD less<char>()));\r\n    CHECK_MEM(dest, \"\\0\\1\\0\\1\", 4);\r\n\r\n    STD plus<char> plus_op;\r\n    STD binder1st<STD plus<char>> add1(plus_op, '\\1');\r\n    STD transform(first, mid, dest, add1);\r\n    STD transform(mid, last, dest + 2, STD bind1st(STD plus<char>(), '\\1'));\r\n    CHECK_MEM(dest, \"\\5\\4\\3\\2\", 4);\r\n\r\n    STD minus<char> minus_op;\r\n    STD binder2nd<STD minus<char>> sub1(minus_op, '\\1');\r\n    STD transform(first, mid, dest, sub1);\r\n    STD transform(mid, last, dest + 2, STD bind2nd(STD minus<char>(), '\\1'));\r\n    CHECK_MEM(dest, \"\\3\\2\\1\\0\", 4);\r\n}\r\n\r\n// functions to test pointer function objects\r\nchar ufn(char ch) { // unary increment function\r\n    return (char) (ch + 1);\r\n}\r\n\r\nchar bfn(char ch1, char ch2) { // binary add function\r\n    return (char) (ch1 + ch2);\r\n}\r\n\r\nstruct Myclass { // non-const functor\r\n    char fn0() { // return 7\r\n        return '\\7';\r\n    }\r\n\r\n    char fn1(char ch) { // increment argument\r\n        return (char) (ch + 1);\r\n    }\r\n} mycl;\r\n\r\nstruct Mycclass { // const functor\r\n    char fn0() const { // return 7\r\n        return '\\7';\r\n    }\r\n\r\n    char fn1(char ch) const {\r\n        return (char) (ch + 1);\r\n    }\r\n} myccl;\r\n\r\nvoid test_pointer(char* first, char* last, char* dest) { // test pointer function objects\r\n    char* mid = first + 2;\r\n\r\n    CSTD strcpy(first, \"\\4\\3\\2\\1\");\r\n    CSTD strcpy(dest, \"abcd\");\r\n    STD pointer_to_unary_function<char, char> uf(ufn);\r\n\r\n    STD transform(first, mid, dest, uf);\r\n    STD transform(mid, last, dest + 2, STD ptr_fun(ufn));\r\n    CHECK_MEM(dest, \"\\5\\4\\3\\2\", 4);\r\n    STD pointer_to_binary_function<char, char, char> bf(bfn);\r\n    STD transform(first, mid, \"\\2\\2\", dest, bf);\r\n    STD transform(mid, last, \"\\2\\2\", dest + 2, STD ptr_fun(bfn));\r\n    CHECK_MEM(dest, \"\\6\\5\\4\\3\", 4);\r\n\r\n    STD mem_fun_t<char, Myclass> mf(&Myclass::fn0);\r\n    CHECK_INT(mf(&mycl), '\\7');\r\n    CHECK_INT(STD mem_fun(&Myclass::fn0)(&mycl), '\\7');\r\n    STD mem_fun1_t<char, Myclass, char> mf1(&Myclass::fn1);\r\n    CHECK_INT(mf1(&mycl, '\\3'), '\\4');\r\n    CHECK_INT(STD mem_fun(&Myclass::fn1)(&mycl, '\\3'), '\\4');\r\n    STD mem_fun_ref_t<char, Myclass> mfr(&Myclass::fn0);\r\n    CHECK_INT(mfr(mycl), '\\7');\r\n    CHECK_INT(STD mem_fun_ref(&Myclass::fn0)(mycl), '\\7');\r\n    STD mem_fun1_ref_t<char, Myclass, char> mf1r(&Myclass::fn1);\r\n    CHECK_INT(mf1r(mycl, '\\3'), '\\4');\r\n    CHECK_INT(STD mem_fun_ref(&Myclass::fn1)(mycl, '\\3'), '\\4');\r\n\r\n    STD const_mem_fun_t<char, Mycclass> cmf(&Mycclass::fn0);\r\n    CHECK_INT(cmf(&myccl), '\\7');\r\n    CHECK_INT(STD mem_fun(&Mycclass::fn0)(&myccl), '\\7');\r\n    STD const_mem_fun1_t<char, Mycclass, char> cmf1(&Mycclass::fn1);\r\n    CHECK_INT(cmf1(&myccl, '\\3'), '\\4');\r\n    CHECK_INT(STD mem_fun(&Mycclass::fn1)(&myccl, '\\3'), '\\4');\r\n    STD const_mem_fun_ref_t<char, Mycclass> cmfr(&Mycclass::fn0);\r\n    CHECK_INT(cmfr(myccl), '\\7');\r\n    CHECK_INT(STD mem_fun_ref(&Mycclass::fn0)(myccl), '\\7');\r\n    STD const_mem_fun1_ref_t<char, Mycclass, char> cmf1r(&Mycclass::fn1);\r\n    CHECK_INT(cmf1r(myccl, '\\3'), '\\4');\r\n    CHECK_INT(STD mem_fun_ref(&Mycclass::fn1)(myccl, '\\3'), '\\4');\r\n}\r\n\r\nvoid test_main() { // test basic workings of functional definitions\r\n    char buf[]  = \"\\4\\3\\2\\1\";\r\n    char dest[] = \"abcd\";\r\n    char *first = buf, *last = buf + 4;\r\n\r\n    test_simple(first, last, dest);\r\n    test_compound(first, last, dest);\r\n    test_pointer(first, last, dest);\r\n\r\n    CSTD size_t hash_val = STD hash<int>()(3);\r\n    hash_val             = STD hash<double>()(3.0);\r\n\r\n    // NOTE: string hash overloads moved to <string>\r\n    // hash_val = STD hash<STD string>()(STD string(\"abc\"));\r\n    // hash_val = STD hash<STD wstring>()(STD wstring(L\"abc\"));\r\n\r\n    hash_val = STD hash<bool>()(true);\r\n    hash_val = STD hash<char>()('3');\r\n    hash_val = STD hash<signed char>()('3');\r\n    hash_val = STD hash<unsigned char>()('3');\r\n    hash_val = STD hash<char16_t>()('3');\r\n    hash_val = STD hash<char32_t>()('3');\r\n    hash_val = STD hash<wchar_t>()(L'3');\r\n    hash_val = STD hash<short>()(3);\r\n    hash_val = STD hash<unsigned short>()(3);\r\n    // hash_val = STD hash<int>()(3);\r\n    hash_val = STD hash<unsigned int>()(3);\r\n    hash_val = STD hash<long>()(3);\r\n    hash_val = STD hash<unsigned long>()(3);\r\n    hash_val = STD hash<long long>()(3);\r\n    hash_val = STD hash<unsigned long long>()(3);\r\n    hash_val = STD hash<float>()(3);\r\n    // hash_val = STD hash<double>()(3);\r\n    hash_val = STD hash<long double>()(3);\r\n    hash_val = STD hash<size_t*>()(&hash_val);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/functional2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <functional>, part 2\r\n#define TEST_NAME \"<functional>, part 2\"\r\n\r\n#include \"tdefs.h\"\r\n#include \"tfuns.h\"\r\n#include <functional>\r\n\r\nvoid t_reference_wrapper() { // test reference_wrapper's operator()\r\n    // POINTER TO FUNCTION\r\n    CALL0(STD cref(fake_lvalue(&f0)));\r\n    CALL1(STD cref(fake_lvalue(&f1)));\r\n    CALL2x(STD cref(fake_lvalue(&f2)), funobj);\r\n    CALL3x(STD cref(fake_lvalue(&f3)), funobj);\r\n    CALL4x(STD cref(fake_lvalue(&f4)), funobj);\r\n    CALL5x(STD cref(fake_lvalue(&f5)), funobj);\r\n    CALL6x(STD cref(fake_lvalue(&f6)), funobj);\r\n    CALL7x(STD cref(fake_lvalue(&f7)), funobj);\r\n    CALL8x(STD cref(fake_lvalue(&f8)), funobj);\r\n    CALL9x(STD cref(fake_lvalue(&f9)), funobj);\r\n    CALL10x(STD cref(fake_lvalue(&f10)), funobj);\r\n\r\n    // FUNCTION OBJECT\r\n    funobj fo;\r\n    CALL0(STD cref(fo));\r\n    CALL1(STD cref(fo));\r\n    CALL2(STD cref(fo));\r\n    CALL3(STD cref(fo));\r\n    CALL4(STD cref(fo));\r\n    CALL5(STD cref(fo));\r\n    CALL6(STD cref(fo));\r\n    CALL7(STD cref(fo));\r\n    CALL8(STD cref(fo));\r\n    CALL9(STD cref(fo));\r\n    CALL10(STD cref(fo));\r\n\r\n    CALL0(STD ref(fo));\r\n    CALL1(STD ref(fo));\r\n    CALL2(STD ref(fo));\r\n    CALL3(STD ref(fo));\r\n    CALL4(STD ref(fo));\r\n    CALL5(STD ref(fo));\r\n    CALL6(STD ref(fo));\r\n    CALL7(STD ref(fo));\r\n    CALL8(STD ref(fo));\r\n    CALL9(STD ref(fo));\r\n    CALL10(STD ref(fo));\r\n\r\n    // POINTER TO MEMBER FUNCTION\r\n    CALL1m(STD cref(fake_lvalue(&funobj::f1)));\r\n    CALL1m(STD cref(fake_lvalue(&funobj::cf1)));\r\n    CALL1m(STD cref(fake_lvalue(&funobj::vf1)));\r\n    CALL1m(STD cref(fake_lvalue(&funobj::cvf1)));\r\n    CALL2m(STD cref(fake_lvalue(&funobj::f2)));\r\n    CALL2m(STD cref(fake_lvalue(&funobj::cf2)));\r\n    CALL2m(STD cref(fake_lvalue(&funobj::vf2)));\r\n    CALL2m(STD cref(fake_lvalue(&funobj::cvf2)));\r\n    CALL3m(STD cref(fake_lvalue(&funobj::f3)));\r\n    CALL3m(STD cref(fake_lvalue(&funobj::cf3)));\r\n    CALL3m(STD cref(fake_lvalue(&funobj::vf3)));\r\n    CALL3m(STD cref(fake_lvalue(&funobj::cvf3)));\r\n    CALL4m(STD cref(fake_lvalue(&funobj::f4)));\r\n    CALL4m(STD cref(fake_lvalue(&funobj::cf4)));\r\n    CALL4m(STD cref(fake_lvalue(&funobj::vf4)));\r\n    CALL4m(STD cref(fake_lvalue(&funobj::cvf4)));\r\n    CALL5m(STD cref(fake_lvalue(&funobj::f5)));\r\n    CALL5m(STD cref(fake_lvalue(&funobj::cf5)));\r\n    CALL5m(STD cref(fake_lvalue(&funobj::vf5)));\r\n    CALL5m(STD cref(fake_lvalue(&funobj::cvf5)));\r\n    CALL6m(STD cref(fake_lvalue(&funobj::f6)));\r\n    CALL6m(STD cref(fake_lvalue(&funobj::cf6)));\r\n    CALL6m(STD cref(fake_lvalue(&funobj::vf6)));\r\n    CALL6m(STD cref(fake_lvalue(&funobj::cvf6)));\r\n    CALL7m(STD cref(fake_lvalue(&funobj::f7)));\r\n    CALL7m(STD cref(fake_lvalue(&funobj::cf7)));\r\n    CALL7m(STD cref(fake_lvalue(&funobj::vf7)));\r\n    CALL7m(STD cref(fake_lvalue(&funobj::cvf7)));\r\n    CALL8m(STD cref(fake_lvalue(&funobj::f8)));\r\n    CALL8m(STD cref(fake_lvalue(&funobj::cf8)));\r\n    CALL8m(STD cref(fake_lvalue(&funobj::vf8)));\r\n    CALL8m(STD cref(fake_lvalue(&funobj::cvf8)));\r\n    CALL9m(STD cref(fake_lvalue(&funobj::f9)));\r\n    CALL9m(STD cref(fake_lvalue(&funobj::cf9)));\r\n    CALL9m(STD cref(fake_lvalue(&funobj::vf9)));\r\n    CALL9m(STD cref(fake_lvalue(&funobj::cvf9)));\r\n    CALL10m(STD cref(fake_lvalue(&funobj::f10)));\r\n    CALL10m(STD cref(fake_lvalue(&funobj::cf10)));\r\n    CALL10m(STD cref(fake_lvalue(&funobj::vf10)));\r\n    CALL10m(STD cref(fake_lvalue(&funobj::cvf10)));\r\n\r\n    // POINTER TO MEMBER DATA\r\n    CALL1m(STD cref(fake_lvalue(&funobj::i0)));\r\n\r\n    // ref(reference_wrapper<T>)\r\n    int i = 3;\r\n\r\n    STD reference_wrapper<int> ri = STD ref(STD ref(i));\r\n    CHECK_INT(ri.get(), 3);\r\n    ri.get() = 4;\r\n    CHECK_INT(i, 4);\r\n    STD reference_wrapper<const int> cri = STD cref(STD cref(i));\r\n    CHECK_INT(cri.get(), 4);\r\n}\r\n\r\nvoid test_main() { // test header <functional>\r\n    t_reference_wrapper();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/functional3/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <functional>, part 3\r\n#define TEST_NAME \"<functional>, part 3\"\r\n\r\n#define _HAS_DEPRECATED_RESULT_OF 1\r\n#define _SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include \"tfuns.h\"\r\n#include <functional>\r\n\r\nvoid t_result_of() { // test result_of for reference_wrapper objects\r\n    // POINTER TO FUNCTION\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<tf0>()>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<tf1>(funobj)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<tf2>(funobj, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<tf3>(funobj, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<tf4>(funobj, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<tf5>(funobj, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<tf6>(funobj, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<tf7>(funobj, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<tf8>(funobj, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<tf9>(funobj, int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(\r\n        STD result_of<STD reference_wrapper<tf10>(funobj, int, int, int, int, int, int, int, int, int)>::type, int);\r\n\r\n    // FUNCTION OBJECT\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<funobj>()>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<funobj>(int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<funobj>(int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<funobj>(int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<funobj>(int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<funobj>(int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<funobj>(int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<funobj>(int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<funobj>(int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<funobj>(int, int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(\r\n        STD result_of<STD reference_wrapper<funobj>(int, int, int, int, int, int, int, int, int, int)>::type, int);\r\n\r\n    // POINTER TO MEMBER FUNCTION\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<mf1>(funobj)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<mf2>(funobj, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<mf3>(funobj, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<mf4>(funobj, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<mf5>(funobj, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<mf6>(funobj, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<mf7>(funobj, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<mf8>(funobj, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<mf9>(funobj, int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(\r\n        STD result_of<STD reference_wrapper<mf10>(funobj, int, int, int, int, int, int, int, int, int)>::type, int);\r\n\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cmf1>(funobj)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cmf2>(funobj, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cmf3>(funobj, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cmf4>(funobj, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cmf5>(funobj, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cmf6>(funobj, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cmf7>(funobj, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cmf8>(funobj, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cmf9>(funobj, int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(\r\n        STD result_of<STD reference_wrapper<cmf10>(funobj, int, int, int, int, int, int, int, int, int)>::type, int);\r\n\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<vmf1>(funobj)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<vmf2>(funobj, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<vmf3>(funobj, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<vmf4>(funobj, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<vmf5>(funobj, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<vmf6>(funobj, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<vmf7>(funobj, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<vmf8>(funobj, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<vmf9>(funobj, int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(\r\n        STD result_of<STD reference_wrapper<vmf10>(funobj, int, int, int, int, int, int, int, int, int)>::type, int);\r\n\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cvmf1>(funobj)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cvmf2>(funobj, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cvmf3>(funobj, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cvmf4>(funobj, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cvmf5>(funobj, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cvmf6>(funobj, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cvmf7>(funobj, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cvmf8>(funobj, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<cvmf9>(funobj, int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(\r\n        STD result_of<STD reference_wrapper<cvmf10>(funobj, int, int, int, int, int, int, int, int, int)>::type, int);\r\n\r\n    // POINTER TO MEMBER DATA\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<md1>(funobj&)>::type, int*);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<md1>(const funobj&)>::type, int*);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<md1>(volatile funobj&)>::type, int*);\r\n    CHECK_TYPE(STD result_of<STD reference_wrapper<md1>(const volatile funobj&)>::type, int*);\r\n}\r\n\r\nvoid test_main() { // test header <functional>\r\n    t_result_of();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/functional4/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <functional>, part 4\r\n#define TEST_NAME \"<functional>, part 4\"\r\n\r\n#pragma warning(disable : 5215) // '%s' a function parameter with a volatile qualified type is deprecated in C++20\r\n\r\n#include \"tdefs.h\"\r\n#include \"tfuns.h\"\r\n#include <functional>\r\n\r\n#define CHECK_BASE_OPS(fn, res)     \\\r\n    CHECK_INT(fn == nullptr, res);  \\\r\n    CHECK_INT(nullptr == fn, res);  \\\r\n    CHECK_INT(fn != nullptr, !res); \\\r\n    CHECK_INT(nullptr != fn, !res)\r\n\r\n#define CHECK_OPS(fn, tgt, tgt_t)                     \\\r\n    CHECK_BASE_OPS(fn, false);                        \\\r\n    CHECK_INT(fn.target_type() == typeid(tgt), true); \\\r\n    CHECK_INT(fn.target<tgt_t>() == nullptr, false)\r\n\r\n#define CHECK_NULL_OPS(fn)    \\\r\n    CHECK_BASE_OPS(fn, true); \\\r\n    CHECK_INT(fn.target_type() == typeid(void), true)\r\n\r\nvoid t_function() { // test STD function\r\n    typedef STD function<int()> Fty0;\r\n    typedef STD function<int(funobj)> Fty1;\r\n    typedef STD function<int(funobj, int)> Fty2;\r\n    typedef STD function<int(funobj, int, int)> Fty3;\r\n    typedef STD function<int(funobj, int, int, int)> Fty4;\r\n\r\n    typedef STD function<int(funobj, int, int, int, int)> Fty5;\r\n    typedef STD function<int(funobj, int, int, int, int, int)> Fty6;\r\n    typedef STD function<int(funobj, int, int, int, int, int, int)> Fty7;\r\n    typedef STD function<int(funobj, int, int, int, int, int, int, int)> Fty8;\r\n    typedef STD function<int(funobj, int, int, int, int, int, int, int, int)> Fty9;\r\n    typedef STD function<int(funobj, int, int, int, int, int, int, int, int, int)> Fty10;\r\n\r\n    // CONSTRUCT FROM NULL POINTER CONSTANT\r\n    Fty0 fobj0p(nullptr);\r\n    CHECK_NULL_OPS(fobj0p);\r\n    Fty1 fobj1p(nullptr);\r\n    CHECK_NULL_OPS(fobj1p);\r\n    Fty2 fobj2p(nullptr);\r\n    CHECK_NULL_OPS(fobj2p);\r\n    Fty3 fobj3p(nullptr);\r\n    CHECK_NULL_OPS(fobj3p);\r\n    Fty4 fobj4p(nullptr);\r\n    CHECK_NULL_OPS(fobj4p);\r\n\r\n    Fty5 fobj5p(nullptr);\r\n    CHECK_NULL_OPS(fobj5p);\r\n    Fty6 fobj6p(nullptr);\r\n    CHECK_NULL_OPS(fobj6p);\r\n    Fty7 fobj7p(nullptr);\r\n    CHECK_NULL_OPS(fobj7p);\r\n    Fty8 fobj8p(nullptr);\r\n    CHECK_NULL_OPS(fobj8p);\r\n    Fty9 fobj9p(nullptr);\r\n    CHECK_NULL_OPS(fobj9p);\r\n    Fty10 fobj10p(nullptr);\r\n    CHECK_NULL_OPS(fobj10p);\r\n\r\n    Fty0 fobj0;\r\n    CHECK_NULL_OPS(fobj0);\r\n    Fty1 fobj1;\r\n    CHECK_NULL_OPS(fobj1);\r\n    Fty2 fobj2;\r\n    CHECK_NULL_OPS(fobj2);\r\n    Fty3 fobj3;\r\n    CHECK_NULL_OPS(fobj3);\r\n    Fty4 fobj4;\r\n    CHECK_NULL_OPS(fobj4);\r\n\r\n    Fty5 fobj5;\r\n    CHECK_NULL_OPS(fobj5);\r\n    Fty6 fobj6;\r\n    CHECK_NULL_OPS(fobj6);\r\n    Fty7 fobj7;\r\n    CHECK_NULL_OPS(fobj7);\r\n    Fty8 fobj8;\r\n    CHECK_NULL_OPS(fobj8);\r\n    Fty9 fobj9;\r\n    CHECK_NULL_OPS(fobj9);\r\n    Fty10 fobj10;\r\n    CHECK_NULL_OPS(fobj10);\r\n\r\n    // POINTER TO FUNCTION\r\n#if _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n    STD allocator<int> al;\r\n    Fty0 fobj0x(STD allocator_arg, al, fobj0);\r\n\r\n    Fty0 fobj0y(STD move(fobj0x));\r\n    fobj0x = STD move(fobj0y);\r\n\r\n    fobj0y = &f0;\r\n\r\n    Fty0 fobj0z(STD allocator_arg, al, STD move(fobj0y));\r\n\r\n    Fty0 fobj0a1(STD allocator_arg, al);\r\n    Fty0 fobj0a2(STD allocator_arg, al, nullptr);\r\n    Fty0 fobj0a3(STD allocator_arg, al, fobj0a1);\r\n    Fty0 fobj0a4(STD allocator_arg, al, &f0);\r\n\r\n    typedef STD uses_allocator<Fty0, STD allocator<int>> function_uses_allocator;\r\n    CHECK_INT(function_uses_allocator::value, true);\r\n#endif // _HAS_FUNCTION_ALLOCATOR_SUPPORT\r\n\r\n    fobj0 = &f0;\r\n    CHECK_OPS(fobj0, &f0, tf0);\r\n    CALL0(fobj0);\r\n    fobj0 = nullptr;\r\n    CHECK_NULL_OPS(fobj0);\r\n    fobj1 = &f1;\r\n    CHECK_OPS(fobj1, &f1, tf1);\r\n    CALL1(fobj1);\r\n    fobj1 = nullptr;\r\n    CHECK_NULL_OPS(fobj1);\r\n    fobj2 = &f2;\r\n    CHECK_OPS(fobj2, &f2, tf2);\r\n    CALL2(fobj2);\r\n    fobj2 = nullptr;\r\n    CHECK_NULL_OPS(fobj2);\r\n    fobj3 = &f3;\r\n    CHECK_OPS(fobj3, &f3, tf3);\r\n    CALL3(fobj3);\r\n    fobj3 = nullptr;\r\n    CHECK_NULL_OPS(fobj3);\r\n    fobj4 = &f4;\r\n    CHECK_OPS(fobj4, &f4, tf4);\r\n    CALL4(fobj4);\r\n    fobj4 = nullptr;\r\n    CHECK_NULL_OPS(fobj4);\r\n\r\n    fobj5 = &f5;\r\n    CHECK_OPS(fobj5, &f5, tf5);\r\n    CALL5(fobj5);\r\n    fobj5 = nullptr;\r\n    CHECK_NULL_OPS(fobj5);\r\n    fobj6 = &f6;\r\n    CHECK_OPS(fobj6, &f6, tf6);\r\n    CALL6(fobj6);\r\n    fobj6 = nullptr;\r\n    CHECK_NULL_OPS(fobj6);\r\n    fobj7 = &f7;\r\n    CHECK_OPS(fobj7, &f7, tf7);\r\n    CALL7(fobj7);\r\n    fobj7 = nullptr;\r\n    CHECK_NULL_OPS(fobj7);\r\n    fobj8 = &f8;\r\n    CHECK_OPS(fobj8, &f8, tf8);\r\n    CALL8(fobj8);\r\n    fobj8 = nullptr;\r\n    CHECK_NULL_OPS(fobj8);\r\n    fobj9 = &f9;\r\n    CHECK_OPS(fobj9, &f9, tf9);\r\n    CALL9(fobj9);\r\n    fobj9 = nullptr;\r\n    CHECK_NULL_OPS(fobj9);\r\n    fobj10 = &f10;\r\n    CHECK_OPS(fobj10, &f10, tf10);\r\n    CALL10(fobj10);\r\n    fobj10 = nullptr;\r\n    CHECK_NULL_OPS(fobj10);\r\n\r\n    // FUNCTION OBJECT\r\n    funobj fo;\r\n    fobj0 = fo;\r\n    CHECK_OPS(fobj0, fo, funobj);\r\n    CALL0(fobj0);\r\n    fobj1 = fo;\r\n    CHECK_OPS(fobj1, fo, funobj);\r\n    CALL1(fobj1);\r\n    fobj2 = fo;\r\n    CHECK_OPS(fobj2, fo, funobj);\r\n    CALL2(fobj2);\r\n    fobj3 = fo;\r\n    CHECK_OPS(fobj3, fo, funobj);\r\n    CALL3(fobj3);\r\n    fobj4 = fo;\r\n    CHECK_OPS(fobj4, fo, funobj);\r\n    CALL4(fobj4);\r\n\r\n    fobj5 = fo;\r\n    CHECK_OPS(fobj5, fo, funobj);\r\n    CALL5(fobj5);\r\n    fobj6 = fo;\r\n    CHECK_OPS(fobj6, fo, funobj);\r\n    CALL6(fobj6);\r\n    fobj7 = fo;\r\n    CHECK_OPS(fobj7, fo, funobj);\r\n    CALL7(fobj7);\r\n    fobj8 = fo;\r\n    CHECK_OPS(fobj8, fo, funobj);\r\n    CALL8(fobj8);\r\n    fobj9 = fo;\r\n    CHECK_OPS(fobj9, fo, funobj);\r\n    CALL9(fobj9);\r\n    fobj10 = fo;\r\n    CHECK_OPS(fobj10, fo, funobj);\r\n    CALL10(fobj10);\r\n\r\n    // POINTER TO MEMBER FUNCTION\r\n    fobj1 = &funobj::f1;\r\n    CHECK_OPS(fobj1, &funobj::f1, mf1);\r\n    CALL1(fobj1);\r\n    fobj1 = &funobj::cf1;\r\n    CHECK_OPS(fobj1, &funobj::cf1, cmf1);\r\n    CALL1(fobj1);\r\n    fobj1 = &funobj::vf1;\r\n    CHECK_OPS(fobj1, &funobj::vf1, vmf1);\r\n    CALL1(fobj1);\r\n    fobj1 = &funobj::cvf1;\r\n    CHECK_OPS(fobj1, &funobj::cvf1, cvmf1);\r\n    CALL1(fobj1);\r\n    fobj1 = nullptr;\r\n\r\n    fobj2 = &funobj::f2;\r\n    CHECK_OPS(fobj2, &funobj::f2, mf2);\r\n    CALL2(fobj2);\r\n    fobj2 = &funobj::cf2;\r\n    CHECK_OPS(fobj2, &funobj::cf2, cmf2);\r\n    CALL2(fobj2);\r\n    fobj2 = &funobj::vf2;\r\n    CHECK_OPS(fobj2, &funobj::vf2, vmf2);\r\n    CALL2(fobj2);\r\n    fobj2 = &funobj::cvf2;\r\n    CHECK_OPS(fobj2, &funobj::cvf2, cvmf2);\r\n    CALL2(fobj2);\r\n    fobj2 = nullptr;\r\n\r\n    fobj3 = &funobj::f3;\r\n    CHECK_OPS(fobj3, &funobj::f3, mf3);\r\n    CALL3(fobj3);\r\n    fobj3 = &funobj::cf3;\r\n    CHECK_OPS(fobj3, &funobj::cf3, cmf3);\r\n    CALL3(fobj3);\r\n    fobj3 = &funobj::vf3;\r\n    CHECK_OPS(fobj3, &funobj::vf3, vmf3);\r\n    CALL3(fobj3);\r\n    fobj3 = &funobj::cvf3;\r\n    CHECK_OPS(fobj3, &funobj::cvf3, cvmf3);\r\n    CALL3(fobj3);\r\n    fobj3 = nullptr;\r\n\r\n    fobj4 = &funobj::f4;\r\n    CHECK_OPS(fobj4, &funobj::f4, mf4);\r\n    CALL4(fobj4);\r\n    fobj4 = &funobj::cf4;\r\n    CHECK_OPS(fobj4, &funobj::cf4, cmf4);\r\n    CALL4(fobj4);\r\n    fobj4 = &funobj::vf4;\r\n    CHECK_OPS(fobj4, &funobj::vf4, vmf4);\r\n    CALL4(fobj4);\r\n    fobj4 = &funobj::cvf4;\r\n    CHECK_OPS(fobj4, &funobj::cvf4, cvmf4);\r\n    CALL4(fobj4);\r\n    fobj4 = nullptr;\r\n\r\n    fobj5 = &funobj::f5;\r\n    CHECK_OPS(fobj5, &funobj::f5, mf5);\r\n    CALL5(fobj5);\r\n    fobj5 = &funobj::cf5;\r\n    CHECK_OPS(fobj5, &funobj::cf5, cmf5);\r\n    CALL5(fobj5);\r\n    fobj5 = &funobj::vf5;\r\n    CHECK_OPS(fobj5, &funobj::vf5, vmf5);\r\n    CALL5(fobj5);\r\n    fobj5 = &funobj::cvf5;\r\n    CHECK_OPS(fobj5, &funobj::cvf5, cvmf5);\r\n    CALL5(fobj5);\r\n    fobj5 = nullptr;\r\n\r\n    fobj6 = &funobj::f6;\r\n    CHECK_OPS(fobj6, &funobj::f6, mf6);\r\n    CALL6(fobj6);\r\n    fobj6 = &funobj::cf6;\r\n    CHECK_OPS(fobj6, &funobj::cf6, cmf6);\r\n    CALL6(fobj6);\r\n    fobj6 = &funobj::vf6;\r\n    CHECK_OPS(fobj6, &funobj::vf6, vmf6);\r\n    CALL6(fobj6);\r\n    fobj6 = &funobj::cvf6;\r\n    CHECK_OPS(fobj6, &funobj::cvf6, cvmf6);\r\n    CALL6(fobj6);\r\n    fobj6 = nullptr;\r\n\r\n    fobj7 = &funobj::f7;\r\n    CHECK_OPS(fobj7, &funobj::f7, mf7);\r\n    CALL7(fobj7);\r\n    fobj7 = &funobj::cf7;\r\n    CHECK_OPS(fobj7, &funobj::cf7, cmf7);\r\n    CALL7(fobj7);\r\n    fobj7 = &funobj::vf7;\r\n    CHECK_OPS(fobj7, &funobj::vf7, vmf7);\r\n    CALL7(fobj7);\r\n    fobj7 = &funobj::cvf7;\r\n    CHECK_OPS(fobj7, &funobj::cvf7, cvmf7);\r\n    CALL7(fobj7);\r\n    fobj7 = nullptr;\r\n\r\n    fobj8 = &funobj::f8;\r\n    CHECK_OPS(fobj8, &funobj::f8, mf8);\r\n    CALL8(fobj8);\r\n    fobj8 = &funobj::cf8;\r\n    CHECK_OPS(fobj8, &funobj::cf8, cmf8);\r\n    CALL8(fobj8);\r\n    fobj8 = &funobj::vf8;\r\n    CHECK_OPS(fobj8, &funobj::vf8, vmf8);\r\n    CALL8(fobj8);\r\n    fobj8 = &funobj::cvf8;\r\n    CHECK_OPS(fobj8, &funobj::cvf8, cvmf8);\r\n    CALL8(fobj8);\r\n    fobj8 = nullptr;\r\n\r\n    fobj9 = &funobj::f9;\r\n    CHECK_OPS(fobj9, &funobj::f9, mf9);\r\n    CALL9(fobj9);\r\n    fobj9 = &funobj::cf9;\r\n    CHECK_OPS(fobj9, &funobj::cf9, cmf9);\r\n    CALL9(fobj9);\r\n    fobj9 = &funobj::vf9;\r\n    CHECK_OPS(fobj9, &funobj::vf9, vmf9);\r\n    CALL9(fobj9);\r\n    fobj9 = &funobj::cvf9;\r\n    CHECK_OPS(fobj9, &funobj::cvf9, cvmf9);\r\n    CALL9(fobj9);\r\n    fobj9 = nullptr;\r\n\r\n    fobj10 = &funobj::f10;\r\n    CHECK_OPS(fobj10, &funobj::f10, mf10);\r\n    CALL10(fobj10);\r\n    fobj10 = &funobj::cf10;\r\n    CHECK_OPS(fobj10, &funobj::cf10, cmf10);\r\n    CALL10(fobj10);\r\n    fobj10 = &funobj::vf10;\r\n    CHECK_OPS(fobj10, &funobj::vf10, vmf10);\r\n    CALL10(fobj10);\r\n    fobj10 = &funobj::cvf10;\r\n    CHECK_OPS(fobj10, &funobj::cvf10, cvmf10);\r\n    CALL10(fobj10);\r\n    fobj10 = nullptr;\r\n\r\n    // POINTER TO MEMBER DATA\r\n    fobj1 = &funobj::i0;\r\n    CHECK_OPS(fobj1, &funobj::i0, md0);\r\n    CALL1(fobj1);\r\n}\r\n\r\nstatic int fun1(int i) { // static function with one argument\r\n    return i;\r\n}\r\n\r\nstatic int fun2(int i) { // static function with one argument\r\n    return 2 * i;\r\n}\r\n\r\nstruct Fat {\r\n    Fat(int barg = 0) : base(barg) { // construct\r\n    }\r\n\r\n    int operator()(int i) { // member operator with one argument\r\n        return i + base;\r\n    }\r\n\r\n    int base;\r\n    char pad[200];\r\n};\r\n\r\nvoid t_swap() { // test function swap\r\n    typedef STD function<int(int)> F1;\r\n    F1 f1 = &fun1;\r\n    CHECK_INT(f1(3), 3);\r\n    F1 f2 = &fun2;\r\n    CHECK_INT(f2(3), 6);\r\n    STD swap(f1, f1);\r\n    CHECK_INT(f1(3), 3);\r\n\r\n    STD swap(f1, f2);\r\n    CHECK_INT(f1(3), 6);\r\n    CHECK_INT(f2(3), 3);\r\n    STD swap(f1, f2);\r\n    CHECK_INT(f1(3), 3);\r\n    CHECK_INT(f2(3), 6);\r\n\r\n    Fat fun3(1);\r\n    F1 f3 = fun3;\r\n    CHECK_INT(f3(5), 6);\r\n    STD swap(f2, f3);\r\n    CHECK_INT(f2(5), 6);\r\n    CHECK_INT(f3(5), 10);\r\n    STD swap(f2, f3);\r\n    CHECK_INT(f2(5), 10);\r\n    CHECK_INT(f3(5), 6);\r\n\r\n    Fat fun4(2);\r\n    F1 f4 = fun4;\r\n    CHECK_INT(f4(5), 7);\r\n    STD swap(f3, f4);\r\n    CHECK_INT(f3(5), 7);\r\n    CHECK_INT(f4(5), 6);\r\n}\r\n\r\nvoid test_main() { // test header <functional>\r\n    t_swap();\r\n    t_function();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/functional5/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <functional>, part 5\r\n#define TEST_NAME \"<functional>, part 5\"\r\n\r\n#define _HAS_DEPRECATED_RESULT_OF 1\r\n#define _SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include \"tfuns.h\"\r\n#include <functional>\r\n\r\nstatic void t_mem_fn() { // test STD mem_fn\r\n    // POINTER TO MEMBER FUNCTION\r\n    CALL1m(STD mem_fn(&funobj::f1));\r\n    CALL1m(STD mem_fn(&funobj::cf1));\r\n    CALL1m(STD mem_fn(&funobj::vf1));\r\n    CALL1m(STD mem_fn(&funobj::cvf1));\r\n    CALL2m(STD mem_fn(&funobj::f2));\r\n    CALL2m(STD mem_fn(&funobj::cf2));\r\n    CALL2m(STD mem_fn(&funobj::vf2));\r\n    CALL2m(STD mem_fn(&funobj::cvf2));\r\n    CALL3m(STD mem_fn(&funobj::f3));\r\n    CALL3m(STD mem_fn(&funobj::cf3));\r\n    CALL3m(STD mem_fn(&funobj::vf3));\r\n    CALL3m(STD mem_fn(&funobj::cvf3));\r\n    CALL4m(STD mem_fn(&funobj::f4));\r\n    CALL4m(STD mem_fn(&funobj::cf4));\r\n    CALL4m(STD mem_fn(&funobj::vf4));\r\n    CALL4m(STD mem_fn(&funobj::cvf4));\r\n    CALL5m(STD mem_fn(&funobj::f5));\r\n    CALL5m(STD mem_fn(&funobj::cf5));\r\n    CALL5m(STD mem_fn(&funobj::vf5));\r\n    CALL5m(STD mem_fn(&funobj::cvf5));\r\n    CALL6m(STD mem_fn(&funobj::f6));\r\n    CALL6m(STD mem_fn(&funobj::cf6));\r\n    CALL6m(STD mem_fn(&funobj::vf6));\r\n    CALL6m(STD mem_fn(&funobj::cvf6));\r\n    CALL7m(STD mem_fn(&funobj::f7));\r\n    CALL7m(STD mem_fn(&funobj::cf7));\r\n    CALL7m(STD mem_fn(&funobj::vf7));\r\n    CALL7m(STD mem_fn(&funobj::cvf7));\r\n    CALL8m(STD mem_fn(&funobj::f8));\r\n    CALL8m(STD mem_fn(&funobj::cf8));\r\n    CALL8m(STD mem_fn(&funobj::vf8));\r\n    CALL8m(STD mem_fn(&funobj::cvf8));\r\n    CALL9m(STD mem_fn(&funobj::f9));\r\n    CALL9m(STD mem_fn(&funobj::cf9));\r\n    CALL9m(STD mem_fn(&funobj::vf9));\r\n    CALL9m(STD mem_fn(&funobj::cvf9));\r\n    CALL10m(STD mem_fn(&funobj::f10));\r\n    CALL10m(STD mem_fn(&funobj::cf10));\r\n    CALL10m(STD mem_fn(&funobj::vf10));\r\n    CALL10m(STD mem_fn(&funobj::cvf10));\r\n\r\n    // POINTER TO MEMBER DATA\r\n    CALL1m(STD mem_fn(&funobj::i0));\r\n}\r\n\r\n#define CHECK_MEM_FN1(fn, r)  check_mem_fn(fn, r, __FILE__, __LINE__)\r\n#define CHECK_MEM_FN2(fn, r)  check_mem_fn(fn, r, 1, __FILE__, __LINE__)\r\n#define CHECK_MEM_FN3(fn, r)  check_mem_fn(fn, r, 1, 2, __FILE__, __LINE__)\r\n#define CHECK_MEM_FN4(fn, r)  check_mem_fn(fn, r, 1, 2, 3, __FILE__, __LINE__)\r\n#define CHECK_MEM_FN5(fn, r)  check_mem_fn(fn, r, 1, 2, 3, 4, __FILE__, __LINE__)\r\n#define CHECK_MEM_FN6(fn, r)  check_mem_fn(fn, r, 1, 2, 3, 4, 5, __FILE__, __LINE__)\r\n#define CHECK_MEM_FN7(fn, r)  check_mem_fn(fn, r, 1, 2, 3, 4, 5, 6, __FILE__, __LINE__)\r\n#define CHECK_MEM_FN8(fn, r)  check_mem_fn(fn, r, 1, 2, 3, 4, 5, 6, 7, __FILE__, __LINE__)\r\n#define CHECK_MEM_FN9(fn, r)  check_mem_fn(fn, r, 1, 2, 3, 4, 5, 6, 7, 8, __FILE__, __LINE__)\r\n#define CHECK_MEM_FN10(fn, r) check_mem_fn(fn, r, 1, 2, 3, 4, 5, 6, 7, 8, 9, __FILE__, __LINE__)\r\n\r\ntemplate <class Fty, class Ret>\r\nvoid check_mem_fn(Fty, Ret, const char* file_name, int line_number) {\r\n    CHECK_TYPE_LONG(typename STD result_of<Fty(funobj)>::type, Ret, file_name, line_number);\r\n}\r\n\r\ntemplate <class Fty, class Ret>\r\nvoid check_mem_fn(Fty, Ret, int, const char* file_name, int line_number) {\r\n    CHECK_TYPE_LONG(typename STD result_of<Fty(funobj, int)>::type, Ret, file_name, line_number);\r\n}\r\n\r\ntemplate <class Fty, class Ret>\r\nvoid check_mem_fn(Fty, Ret, int, int, const char* file_name, int line_number) {\r\n    CHECK_TYPE_LONG(typename STD result_of<Fty(funobj, int, int)>::type, Ret, file_name, line_number);\r\n}\r\n\r\ntemplate <class Fty, class Ret>\r\nvoid check_mem_fn(Fty, Ret, int, int, int, const char* file_name, int line_number) {\r\n    CHECK_TYPE_LONG(typename STD result_of<Fty(funobj, int, int, int)>::type, Ret, file_name, line_number);\r\n}\r\n\r\ntemplate <class Fty, class Ret>\r\nvoid check_mem_fn(Fty, Ret, int, int, int, int, const char* file_name, int line_number) {\r\n    CHECK_TYPE_LONG(typename STD result_of<Fty(funobj, int, int, int, int)>::type, Ret, file_name, line_number);\r\n}\r\n\r\ntemplate <class Fty, class Ret>\r\nvoid check_mem_fn(Fty, Ret, int, int, int, int, int, const char* file_name, int line_number) {\r\n    CHECK_TYPE_LONG(typename STD result_of<Fty(funobj, int, int, int, int, int)>::type, Ret, file_name, line_number);\r\n}\r\n\r\ntemplate <class Fty, class Ret>\r\nvoid check_mem_fn(Fty, Ret, int, int, int, int, int, int, const char* file_name, int line_number) {\r\n    CHECK_TYPE_LONG(\r\n        typename STD result_of<Fty(funobj, int, int, int, int, int, int)>::type, Ret, file_name, line_number);\r\n}\r\n\r\ntemplate <class Fty, class Ret>\r\nvoid check_mem_fn(Fty, Ret, int, int, int, int, int, int, int, const char* file_name, int line_number) {\r\n    CHECK_TYPE_LONG(\r\n        typename STD result_of<Fty(funobj, int, int, int, int, int, int, int)>::type, Ret, file_name, line_number);\r\n}\r\n\r\ntemplate <class Fty, class Ret>\r\nvoid check_mem_fn(Fty, Ret, int, int, int, int, int, int, int, int, const char* file_name, int line_number) {\r\n    CHECK_TYPE_LONG(\r\n        typename STD result_of<Fty(funobj, int, int, int, int, int, int, int, int)>::type, Ret, file_name, line_number);\r\n}\r\n\r\ntemplate <class Fty, class Ret>\r\nvoid check_mem_fn(Fty, Ret, int, int, int, int, int, int, int, int, int, const char* file_name, int line_number) {\r\n    CHECK_TYPE_LONG(typename STD result_of<Fty(funobj, int, int, int, int, int, int, int, int, int)>::type, Ret,\r\n        file_name, line_number);\r\n}\r\n\r\nvoid t_result_of() { // test result_of for mem_fn objects\r\n    // POINTER TO MEMBER FUNCTION\r\n    CHECK_MEM_FN1(&funobj::f1, 0);\r\n    CHECK_MEM_FN2(&funobj::f2, 0);\r\n    CHECK_MEM_FN3(&funobj::f3, 0);\r\n    CHECK_MEM_FN4(&funobj::f4, 0);\r\n    CHECK_MEM_FN5(&funobj::f5, 0);\r\n    CHECK_MEM_FN6(&funobj::f6, 0);\r\n    CHECK_MEM_FN7(&funobj::f7, 0);\r\n    CHECK_MEM_FN8(&funobj::f8, 0);\r\n    CHECK_MEM_FN9(&funobj::f9, 0);\r\n    CHECK_MEM_FN10(&funobj::f10, 0);\r\n\r\n    CHECK_MEM_FN1(&funobj::cf1, 0);\r\n    CHECK_MEM_FN2(&funobj::cf2, 0);\r\n    CHECK_MEM_FN3(&funobj::cf3, 0);\r\n    CHECK_MEM_FN4(&funobj::cf4, 0);\r\n    CHECK_MEM_FN5(&funobj::cf5, 0);\r\n    CHECK_MEM_FN6(&funobj::cf6, 0);\r\n    CHECK_MEM_FN7(&funobj::cf7, 0);\r\n    CHECK_MEM_FN8(&funobj::cf8, 0);\r\n    CHECK_MEM_FN9(&funobj::cf9, 0);\r\n    CHECK_MEM_FN10(&funobj::cf10, 0);\r\n\r\n    CHECK_MEM_FN1(&funobj::vf1, 0);\r\n    CHECK_MEM_FN2(&funobj::vf2, 0);\r\n    CHECK_MEM_FN3(&funobj::vf3, 0);\r\n    CHECK_MEM_FN4(&funobj::vf4, 0);\r\n    CHECK_MEM_FN5(&funobj::vf5, 0);\r\n    CHECK_MEM_FN6(&funobj::vf6, 0);\r\n    CHECK_MEM_FN7(&funobj::vf7, 0);\r\n    CHECK_MEM_FN8(&funobj::vf8, 0);\r\n    CHECK_MEM_FN9(&funobj::vf9, 0);\r\n    CHECK_MEM_FN10(&funobj::vf10, 0);\r\n\r\n    CHECK_MEM_FN1(&funobj::cvf1, 0);\r\n    CHECK_MEM_FN2(&funobj::cvf2, 0);\r\n    CHECK_MEM_FN3(&funobj::cvf3, 0);\r\n    CHECK_MEM_FN4(&funobj::cvf4, 0);\r\n    CHECK_MEM_FN5(&funobj::cvf5, 0);\r\n    CHECK_MEM_FN6(&funobj::cvf6, 0);\r\n    CHECK_MEM_FN7(&funobj::cvf7, 0);\r\n    CHECK_MEM_FN8(&funobj::cvf8, 0);\r\n    CHECK_MEM_FN9(&funobj::cvf9, 0);\r\n    CHECK_MEM_FN10(&funobj::cvf10, 0);\r\n\r\n    CHECK_MEM_FN1(&funobj::i0, 0);\r\n}\r\n\r\nvoid test_main() { // test header <functional>\r\n    t_mem_fn();\r\n    t_result_of();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/functional6/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <functional>, part 6\r\n#define TEST_NAME \"<functional>, part 6\"\r\n\r\n#define _HAS_DEPRECATED_ADAPTOR_TYPEDEFS 1\r\n#define _SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include \"tfuns.h\"\r\n#include <functional>\r\n#include <iostream>\r\n\r\n#define PH1  STD placeholders::_1\r\n#define PH2  STD placeholders::_2\r\n#define PH3  STD placeholders::_3\r\n#define PH4  STD placeholders::_4\r\n#define PH5  STD placeholders::_5\r\n#define PH6  STD placeholders::_6\r\n#define PH7  STD placeholders::_7\r\n#define PH8  STD placeholders::_8\r\n#define PH9  STD placeholders::_9\r\n#define PH10 STD placeholders::_10\r\n\r\nstatic void t_bad() { // test bad_function_call\r\n#if NO_EXCEPTIONS\r\n#else // NO_EXCEPTIONS\r\n    typedef double(Fd)(double);\r\n    typedef STD function<Fd> Myfunc;\r\n    bool ok = false;\r\n\r\n    try { // test exception for empty function object\r\n        Myfunc fd1;\r\n        STD cout << fd1(3) << STD endl;\r\n    } catch (const STD bad_function_call&) { // handle bad call\r\n        ok = true;\r\n    }\r\n    CHECK_MSG(\"empty function throws bad_function_call\", ok);\r\n#endif // NO_EXCEPTIONS\r\n}\r\n\r\nstatic void t_bind() { // test STD bind\r\n    bool ans;\r\n    typedef decltype(STD bind(&f0)) bind0;\r\n    CHECK(STD is_bind_expression<bind0>::value);\r\n    ans = STD is_convertible<STD is_bind_expression<bind0>, STD true_type>::value;\r\n    CHECK(ans);\r\n\r\n    typedef decltype(PH3) ph3;\r\n    CHECK_INT(STD is_placeholder<ph3>::value, 3);\r\n    ans = STD is_convertible<STD is_placeholder<ph3>, STD integral_constant<int, 3>>::value;\r\n    CHECK(ans);\r\n\r\n    CHECK(!STD is_bind_expression<int>::value);\r\n    ans = STD is_convertible<STD is_bind_expression<int>, STD false_type>::value;\r\n    CHECK(ans);\r\n\r\n    CHECK_INT(STD is_placeholder<int>::value, 0);\r\n    ans = STD is_convertible<STD is_placeholder<int>, STD integral_constant<int, 0>>::value;\r\n    CHECK(ans);\r\n\r\n    // POINTER TO FUNCTION\r\n    CALL0(STD bind(&f0));\r\n    CALL1(STD bind(&f1, PH1));\r\n    CALL2(STD bind(&f2, PH1, PH2));\r\n    CALL3(STD bind(&f3, PH1, PH2, PH3));\r\n    CALL4(STD bind(&f4, PH1, PH2, PH3, PH4));\r\n    CALL5(STD bind(&f5, PH1, PH2, PH3, PH4, PH5));\r\n    CALL6(STD bind(&f6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    CALL7(STD bind(&f7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    CALL8(STD bind(&f8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    CALL9(STD bind(&f9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    CALL10(STD bind(&f10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n\r\n    match_result_type<int>(STD bind(&f0));\r\n    match_result_type<int>(STD bind(&f1, PH1));\r\n    match_result_type<int>(STD bind(&f2, PH1, PH2));\r\n    match_result_type<int>(STD bind(&f3, PH1, PH2, PH3));\r\n    match_result_type<int>(STD bind(&f4, PH1, PH2, PH3, PH4));\r\n    match_result_type<int>(STD bind(&f5, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<int>(STD bind(&f6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<int>(STD bind(&f7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<int>(STD bind(&f8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<int>(STD bind(&f9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<int>(STD bind(&f10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n\r\n    // FUNCTION OBJECT\r\n    funobj fo;\r\n    CALL0(STD bind(fo));\r\n    CALL1(STD bind(fo, PH1));\r\n    CALL2(STD bind(fo, PH1, PH2));\r\n    CALL3(STD bind(fo, PH1, PH2, PH3));\r\n    CALL4(STD bind(fo, PH1, PH2, PH3, PH4));\r\n    CALL5(STD bind(fo, PH1, PH2, PH3, PH4, PH5));\r\n    CALL6(STD bind(fo, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    CALL7(STD bind(fo, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    CALL8(STD bind(fo, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    CALL9(STD bind(fo, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    CALL10(STD bind(fo, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n\r\n    match_result_type<int>(STD bind(fo));\r\n    match_result_type<int>(STD bind(fo, PH1));\r\n    match_result_type<int>(STD bind(fo, PH1, PH2));\r\n    match_result_type<int>(STD bind(fo, PH1, PH2, PH3));\r\n    match_result_type<int>(STD bind(fo, PH1, PH2, PH3, PH4));\r\n    match_result_type<int>(STD bind(fo, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<int>(STD bind(fo, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<int>(STD bind(fo, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<int>(STD bind(fo, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<int>(STD bind(fo, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<int>(STD bind(fo, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n}\r\n\r\nstruct funobj_no_nested { // callable type with no nested result_type\r\n    template <class Fty>\r\n    struct result { // make non-decltype version of result_of happy\r\n        typedef int type;\r\n    };\r\n    int operator()();\r\n    template <class T1>\r\n    int operator()(T1);\r\n    template <class T1, class T2>\r\n    int operator()(T1, T2);\r\n    template <class T1, class T2, class T3>\r\n    int operator()(T1, T2, T3);\r\n    template <class T1, class T2, class T3, class T4>\r\n    int operator()(T1, T2, T3, T4);\r\n};\r\n\r\nstatic void t_bind_no_nested() {\r\n    funobj_no_nested fn;\r\n    CHECK_INT(has_result_type(STD bind(fn)), false);\r\n    CHECK_INT(has_result_type(STD bind(fn, PH1)), false);\r\n    CHECK_INT(has_result_type(STD bind(fn, PH1, PH2)), false);\r\n    CHECK_INT(has_result_type(STD bind(fn, PH1, PH2, PH3)), false);\r\n    CHECK_INT(has_result_type(STD bind(fn, PH1, PH2, PH3, PH4)), false);\r\n}\r\n\r\nvoid test_main() { // test header <functional>\r\n    t_bad();\r\n    t_bind();\r\n    t_bind_no_nested();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/functional7/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <functional>, part 7\r\n#define TEST_NAME \"<functional>, part 7\"\r\n\r\n#define _HAS_DEPRECATED_ADAPTOR_TYPEDEFS 1\r\n#define _SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include \"tfuns.h\"\r\n#include <functional>\r\n\r\n#define PH1  STD placeholders::_1\r\n#define PH2  STD placeholders::_2\r\n#define PH3  STD placeholders::_3\r\n#define PH4  STD placeholders::_4\r\n#define PH5  STD placeholders::_5\r\n#define PH6  STD placeholders::_6\r\n#define PH7  STD placeholders::_7\r\n#define PH8  STD placeholders::_8\r\n#define PH9  STD placeholders::_9\r\n#define PH10 STD placeholders::_10\r\n\r\nstatic void t_bind() { // test STD bind\r\n    // POINTER TO MEMBER FUNCTION\r\n    CALL1m(STD bind(&funobj::f1, PH1));\r\n    CALL1m(STD bind(&funobj::cf1, PH1));\r\n    CALL1m(STD bind(&funobj::vf1, PH1));\r\n    CALL1m(STD bind(&funobj::cvf1, PH1));\r\n    CALL2m(STD bind(&funobj::f2, PH1, PH2));\r\n    CALL2m(STD bind(&funobj::cf2, PH1, PH2));\r\n    CALL2m(STD bind(&funobj::vf2, PH1, PH2));\r\n    CALL2m(STD bind(&funobj::cvf2, PH1, PH2));\r\n    CALL3m(STD bind(&funobj::f3, PH1, PH2, PH3));\r\n    CALL3m(STD bind(&funobj::cf3, PH1, PH2, PH3));\r\n    CALL3m(STD bind(&funobj::vf3, PH1, PH2, PH3));\r\n    CALL3m(STD bind(&funobj::cvf3, PH1, PH2, PH3));\r\n    CALL4m(STD bind(&funobj::f4, PH1, PH2, PH3, PH4));\r\n    CALL4m(STD bind(&funobj::cf4, PH1, PH2, PH3, PH4));\r\n    CALL4m(STD bind(&funobj::vf4, PH1, PH2, PH3, PH4));\r\n    CALL4m(STD bind(&funobj::cvf4, PH1, PH2, PH3, PH4));\r\n    CALL5m(STD bind(&funobj::f5, PH1, PH2, PH3, PH4, PH5));\r\n    CALL5m(STD bind(&funobj::cf5, PH1, PH2, PH3, PH4, PH5));\r\n    CALL5m(STD bind(&funobj::vf5, PH1, PH2, PH3, PH4, PH5));\r\n    CALL5m(STD bind(&funobj::cvf5, PH1, PH2, PH3, PH4, PH5));\r\n    CALL6m(STD bind(&funobj::f6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    CALL6m(STD bind(&funobj::cf6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    CALL6m(STD bind(&funobj::vf6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    CALL6m(STD bind(&funobj::cvf6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    CALL7m(STD bind(&funobj::f7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    CALL7m(STD bind(&funobj::cf7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    CALL7m(STD bind(&funobj::vf7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    CALL7m(STD bind(&funobj::cvf7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    CALL8m(STD bind(&funobj::f8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    CALL8m(STD bind(&funobj::cf8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    CALL8m(STD bind(&funobj::vf8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    CALL8m(STD bind(&funobj::cvf8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    CALL9m(STD bind(&funobj::f9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    CALL9m(STD bind(&funobj::cf9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    CALL9m(STD bind(&funobj::vf9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    CALL9m(STD bind(&funobj::cvf9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    CALL10m(STD bind(&funobj::f10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n    CALL10m(STD bind(&funobj::cf10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n    CALL10m(STD bind(&funobj::vf10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n    CALL10m(STD bind(&funobj::cvf10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n\r\n    match_result_type<int>(STD bind(&funobj::f1, PH1));\r\n    match_result_type<int>(STD bind(&funobj::cf1, PH1));\r\n    match_result_type<int>(STD bind(&funobj::vf1, PH1));\r\n    match_result_type<int>(STD bind(&funobj::cvf1, PH1));\r\n    match_result_type<int>(STD bind(&funobj::f2, PH1, PH2));\r\n    match_result_type<int>(STD bind(&funobj::cf2, PH1, PH2));\r\n    match_result_type<int>(STD bind(&funobj::vf2, PH1, PH2));\r\n    match_result_type<int>(STD bind(&funobj::cvf2, PH1, PH2));\r\n    match_result_type<int>(STD bind(&funobj::f3, PH1, PH2, PH3));\r\n    match_result_type<int>(STD bind(&funobj::cf3, PH1, PH2, PH3));\r\n    match_result_type<int>(STD bind(&funobj::vf3, PH1, PH2, PH3));\r\n    match_result_type<int>(STD bind(&funobj::cvf3, PH1, PH2, PH3));\r\n    match_result_type<int>(STD bind(&funobj::f4, PH1, PH2, PH3, PH4));\r\n    match_result_type<int>(STD bind(&funobj::cf4, PH1, PH2, PH3, PH4));\r\n    match_result_type<int>(STD bind(&funobj::vf4, PH1, PH2, PH3, PH4));\r\n    match_result_type<int>(STD bind(&funobj::cvf4, PH1, PH2, PH3, PH4));\r\n    match_result_type<int>(STD bind(&funobj::f5, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<int>(STD bind(&funobj::cf5, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<int>(STD bind(&funobj::vf5, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<int>(STD bind(&funobj::cvf5, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<int>(STD bind(&funobj::f6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<int>(STD bind(&funobj::cf6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<int>(STD bind(&funobj::vf6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<int>(STD bind(&funobj::cvf6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<int>(STD bind(&funobj::f7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<int>(STD bind(&funobj::cf7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<int>(STD bind(&funobj::vf7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<int>(STD bind(&funobj::cvf7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<int>(STD bind(&funobj::f8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<int>(STD bind(&funobj::cf8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<int>(STD bind(&funobj::vf8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<int>(STD bind(&funobj::cvf8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<int>(STD bind(&funobj::f9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<int>(STD bind(&funobj::cf9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<int>(STD bind(&funobj::vf9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<int>(STD bind(&funobj::cvf9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<int>(STD bind(&funobj::f10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n    match_result_type<int>(STD bind(&funobj::cf10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n    match_result_type<int>(STD bind(&funobj::vf10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n    match_result_type<int>(STD bind(&funobj::cvf10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n\r\n    // POINTER TO MEMBER DATA\r\n    CALL1(STD bind(&funobj::i0, PH1));\r\n    CHECK_INT(has_result_type(STD bind(&funobj::i0, PH1)), false);\r\n}\r\n\r\nvoid test_main() { // test header <functional>\r\n    t_bind();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/functional7a/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <functional>, part 7a\r\n#define TEST_NAME \"<functional>, part 7a\"\r\n\r\n#define _HAS_DEPRECATED_ADAPTOR_TYPEDEFS 1\r\n#define _SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include \"tfuns.h\"\r\n#include <functional>\r\n\r\n#define PH1  STD placeholders::_1\r\n#define PH2  STD placeholders::_2\r\n#define PH3  STD placeholders::_3\r\n#define PH4  STD placeholders::_4\r\n#define PH5  STD placeholders::_5\r\n#define PH6  STD placeholders::_6\r\n#define PH7  STD placeholders::_7\r\n#define PH8  STD placeholders::_8\r\n#define PH9  STD placeholders::_9\r\n#define PH10 STD placeholders::_10\r\n\r\nstatic void t_bind() { // test STD bind with forced return type\r\n    // POINTER TO FUNCTION\r\n    match_result_type<double>(STD bind<double>(&f0));\r\n    match_result_type<double>(STD bind<double>(&f1, PH1));\r\n    match_result_type<double>(STD bind<double>(&f2, PH1, PH2));\r\n    match_result_type<double>(STD bind<double>(&f3, PH1, PH2, PH3));\r\n    match_result_type<double>(STD bind<double>(&f4, PH1, PH2, PH3, PH4));\r\n    match_result_type<double>(STD bind<double>(&f5, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<double>(STD bind<double>(&f6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<double>(STD bind<double>(&f7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<double>(STD bind<double>(&f8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<double>(STD bind<double>(&f9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<double>(STD bind<double>(&f10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n\r\n    match_result_type<int>(STD bind<int>(&f0));\r\n    match_result_type<int>(STD bind<int>(&f1, PH1));\r\n    match_result_type<int>(STD bind<int>(&f2, PH1, PH2));\r\n    match_result_type<int>(STD bind<int>(&f3, PH1, PH2, PH3));\r\n    match_result_type<int>(STD bind<int>(&f4, PH1, PH2, PH3, PH4));\r\n    match_result_type<int>(STD bind<int>(&f5, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<int>(STD bind<int>(&f6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<int>(STD bind<int>(&f7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<int>(STD bind<int>(&f8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<int>(STD bind<int>(&f9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<int>(STD bind<int>(&f10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n\r\n    // FUNCTION OBJECT\r\n    funobj fo;\r\n    match_result_type<double>(STD bind<double>(fo));\r\n    match_result_type<double>(STD bind<double>(fo, PH1));\r\n    match_result_type<double>(STD bind<double>(fo, PH1, PH2));\r\n    match_result_type<double>(STD bind<double>(fo, PH1, PH2, PH3));\r\n    match_result_type<double>(STD bind<double>(fo, PH1, PH2, PH3, PH4));\r\n    match_result_type<double>(STD bind<double>(fo, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<double>(STD bind<double>(fo, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<double>(STD bind<double>(fo, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<double>(STD bind<double>(fo, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<double>(STD bind<double>(fo, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<double>(STD bind<double>(fo, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n\r\n    match_result_type<int>(STD bind<int>(fo));\r\n    match_result_type<int>(STD bind<int>(fo, PH1));\r\n    match_result_type<int>(STD bind<int>(fo, PH1, PH2));\r\n    match_result_type<int>(STD bind<int>(fo, PH1, PH2, PH3));\r\n    match_result_type<int>(STD bind<int>(fo, PH1, PH2, PH3, PH4));\r\n    match_result_type<int>(STD bind<int>(fo, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<int>(STD bind<int>(fo, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<int>(STD bind<int>(fo, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<int>(STD bind<int>(fo, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<int>(STD bind<int>(fo, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<int>(STD bind<int>(fo, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n\r\n    // POINTER TO MEMBER FUNCTION\r\n    match_result_type<double>(STD bind<double>(&funobj::f1, PH1));\r\n    match_result_type<double>(STD bind<double>(&funobj::cf1, PH1));\r\n    match_result_type<double>(STD bind<double>(&funobj::vf1, PH1));\r\n    match_result_type<double>(STD bind<double>(&funobj::cvf1, PH1));\r\n    match_result_type<double>(STD bind<double>(&funobj::f2, PH1, PH2));\r\n    match_result_type<double>(STD bind<double>(&funobj::cf2, PH1, PH2));\r\n    match_result_type<double>(STD bind<double>(&funobj::vf2, PH1, PH2));\r\n    match_result_type<double>(STD bind<double>(&funobj::cvf2, PH1, PH2));\r\n    match_result_type<double>(STD bind<double>(&funobj::f3, PH1, PH2, PH3));\r\n    match_result_type<double>(STD bind<double>(&funobj::cf3, PH1, PH2, PH3));\r\n    match_result_type<double>(STD bind<double>(&funobj::vf3, PH1, PH2, PH3));\r\n    match_result_type<double>(STD bind<double>(&funobj::cvf3, PH1, PH2, PH3));\r\n    match_result_type<double>(STD bind<double>(&funobj::f4, PH1, PH2, PH3, PH4));\r\n    match_result_type<double>(STD bind<double>(&funobj::cf4, PH1, PH2, PH3, PH4));\r\n    match_result_type<double>(STD bind<double>(&funobj::vf4, PH1, PH2, PH3, PH4));\r\n    match_result_type<double>(STD bind<double>(&funobj::cvf4, PH1, PH2, PH3, PH4));\r\n    match_result_type<double>(STD bind<double>(&funobj::f5, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<double>(STD bind<double>(&funobj::cf5, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<double>(STD bind<double>(&funobj::vf5, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<double>(STD bind<double>(&funobj::cvf5, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<double>(STD bind<double>(&funobj::f6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<double>(STD bind<double>(&funobj::cf6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<double>(STD bind<double>(&funobj::vf6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<double>(STD bind<double>(&funobj::cvf6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<double>(STD bind<double>(&funobj::f7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<double>(STD bind<double>(&funobj::cf7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<double>(STD bind<double>(&funobj::vf7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<double>(STD bind<double>(&funobj::cvf7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<double>(STD bind<double>(&funobj::f8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<double>(STD bind<double>(&funobj::cf8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<double>(STD bind<double>(&funobj::vf8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<double>(STD bind<double>(&funobj::cvf8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<double>(STD bind<double>(&funobj::f9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<double>(STD bind<double>(&funobj::cf9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<double>(STD bind<double>(&funobj::vf9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<double>(STD bind<double>(&funobj::cvf9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<double>(STD bind<double>(&funobj::f10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n    match_result_type<double>(STD bind<double>(&funobj::cf10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n    match_result_type<double>(STD bind<double>(&funobj::vf10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n    match_result_type<double>(STD bind<double>(&funobj::cvf10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n\r\n    match_result_type<int>(STD bind<int>(&funobj::f1, PH1));\r\n    match_result_type<int>(STD bind<int>(&funobj::cf1, PH1));\r\n    match_result_type<int>(STD bind<int>(&funobj::vf1, PH1));\r\n    match_result_type<int>(STD bind<int>(&funobj::cvf1, PH1));\r\n    match_result_type<int>(STD bind<int>(&funobj::f2, PH1, PH2));\r\n    match_result_type<int>(STD bind<int>(&funobj::cf2, PH1, PH2));\r\n    match_result_type<int>(STD bind<int>(&funobj::vf2, PH1, PH2));\r\n    match_result_type<int>(STD bind<int>(&funobj::cvf2, PH1, PH2));\r\n    match_result_type<int>(STD bind<int>(&funobj::f3, PH1, PH2, PH3));\r\n    match_result_type<int>(STD bind<int>(&funobj::cf3, PH1, PH2, PH3));\r\n    match_result_type<int>(STD bind<int>(&funobj::vf3, PH1, PH2, PH3));\r\n    match_result_type<int>(STD bind<int>(&funobj::cvf3, PH1, PH2, PH3));\r\n    match_result_type<int>(STD bind<int>(&funobj::f4, PH1, PH2, PH3, PH4));\r\n    match_result_type<int>(STD bind<int>(&funobj::cf4, PH1, PH2, PH3, PH4));\r\n    match_result_type<int>(STD bind<int>(&funobj::vf4, PH1, PH2, PH3, PH4));\r\n    match_result_type<int>(STD bind<int>(&funobj::cvf4, PH1, PH2, PH3, PH4));\r\n    match_result_type<int>(STD bind<int>(&funobj::f5, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<int>(STD bind<int>(&funobj::cf5, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<int>(STD bind<int>(&funobj::vf5, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<int>(STD bind<int>(&funobj::cvf5, PH1, PH2, PH3, PH4, PH5));\r\n    match_result_type<int>(STD bind<int>(&funobj::f6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<int>(STD bind<int>(&funobj::cf6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<int>(STD bind<int>(&funobj::vf6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<int>(STD bind<int>(&funobj::cvf6, PH1, PH2, PH3, PH4, PH5, PH6));\r\n    match_result_type<int>(STD bind<int>(&funobj::f7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<int>(STD bind<int>(&funobj::cf7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<int>(STD bind<int>(&funobj::vf7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<int>(STD bind<int>(&funobj::cvf7, PH1, PH2, PH3, PH4, PH5, PH6, PH7));\r\n    match_result_type<int>(STD bind<int>(&funobj::f8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<int>(STD bind<int>(&funobj::cf8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<int>(STD bind<int>(&funobj::vf8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<int>(STD bind<int>(&funobj::cvf8, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8));\r\n    match_result_type<int>(STD bind<int>(&funobj::f9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<int>(STD bind<int>(&funobj::cf9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<int>(STD bind<int>(&funobj::vf9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<int>(STD bind<int>(&funobj::cvf9, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9));\r\n    match_result_type<int>(STD bind<int>(&funobj::f10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n    match_result_type<int>(STD bind<int>(&funobj::cf10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n    match_result_type<int>(STD bind<int>(&funobj::vf10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n    match_result_type<int>(STD bind<int>(&funobj::cvf10, PH1, PH2, PH3, PH4, PH5, PH6, PH7, PH8, PH9, PH10));\r\n\r\n    // POINTER TO MEMBER DATA\r\n    CALL1(STD bind<double>(&funobj::i0, PH1));\r\n    match_result_type<double>(STD bind<double>(&funobj::i0, PH1));\r\n}\r\n\r\nvoid test_main() { // test header <functional>\r\n    t_bind();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/functional8/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <functional>, part 8\r\n#define TEST_NAME \"<functional>, part 8\"\r\n\r\n#include \"tdefs.h\"\r\n#include <functional>\r\n#include <iostream>\r\n\r\ntemplate <class T>\r\nconst T& fake_lvalue(const T&& t) { // C++11 12.2 [class.temporary]/5: \"A temporary bound to a reference\r\n                                    // parameter in a function call (5.2.2) persists until the completion\r\n                                    // of the full-expression containing the call.\"\r\n    return t;\r\n}\r\n\r\nvoid returns_void() {}\r\n\r\nchar f0() {\r\n    return 0;\r\n}\r\n\r\nint f1(int) {\r\n    return 1;\r\n}\r\n\r\ndouble f2(int, int) {\r\n    return 2.0;\r\n}\r\n\r\nchar f3(int, int, int) {\r\n    return 3;\r\n}\r\n\r\nint f4(int, int, int, int) {\r\n    return 4;\r\n}\r\n\r\ndouble f5(int, int, int, int, int) {\r\n    return 5.0;\r\n}\r\n\r\nchar f6(int, int, int, int, int, int) {\r\n    return 6;\r\n}\r\n\r\nint f7(int, int, int, int, int, int, int) {\r\n    return 7;\r\n}\r\n\r\ndouble f8(int, int, int, int, int, int, int, int) {\r\n    return 8.0;\r\n}\r\n\r\nchar f9(int, int, int, int, int, int, int, int, int) {\r\n    return 9;\r\n}\r\n\r\nint f10(int, int, int, int, int, int, int, int, int, int) {\r\n    return 10;\r\n}\r\n\r\nstruct S {\r\n    S() : di(1), df(2.0), cdd(3.0), vdd(4.0), cvdd(5.0) { // default constructor\r\n    }\r\n\r\n    S(const S& x) : di(x.di), df(x.df), cdd(x.cdd), vdd(x.vdd), cvdd(x.cvdd) { // copy constructor\r\n    }\r\n\r\n    S(const volatile S& x) : di(x.di), df(x.df), cdd(x.cdd), vdd(x.vdd), cvdd(x.cvdd) { // volatile copy constructor\r\n    }\r\n\r\n    S& operator=(const S&); // to quiet diagnostics\r\n\r\n    int di;\r\n    float df;\r\n    const double cdd;\r\n    volatile double vdd;\r\n    const volatile double cvdd;\r\n\r\n    int& gdi() {\r\n        return di;\r\n    }\r\n\r\n    const int& gdi() const {\r\n        return di;\r\n    }\r\n\r\n    volatile int& gdi() volatile {\r\n        return di;\r\n    }\r\n\r\n    const volatile int& gdi() const volatile {\r\n        return di;\r\n    }\r\n\r\n    void returns_void() {}\r\n\r\n    char f0() {\r\n        return 0;\r\n    }\r\n\r\n    int f1(int) {\r\n        return 1;\r\n    }\r\n\r\n    double f2(int, int) {\r\n        return 2.0;\r\n    }\r\n\r\n    char f3(int, int, int) {\r\n        return 3;\r\n    }\r\n\r\n    int f4(int, int, int, int) {\r\n        return 4;\r\n    }\r\n\r\n    double f5(int, int, int, int, int) {\r\n        return 5.0;\r\n    }\r\n\r\n    char f6(int, int, int, int, int, int) {\r\n        return 6;\r\n    }\r\n\r\n    int f7(int, int, int, int, int, int, int) {\r\n        return 7;\r\n    }\r\n\r\n    double f8(int, int, int, int, int, int, int, int) {\r\n        return 8.0;\r\n    }\r\n\r\n    char f9(int, int, int, int, int, int, int, int, int) {\r\n        return 9;\r\n    }\r\n\r\n    char cf0() const {\r\n        return 10;\r\n    }\r\n\r\n    int cf1(int) const {\r\n        return 11;\r\n    }\r\n\r\n    double cf2(int, int) const {\r\n        return 12.0;\r\n    }\r\n\r\n    char cf3(int, int, int) const {\r\n        return 13;\r\n    }\r\n\r\n    int cf4(int, int, int, int) const {\r\n        return 14;\r\n    }\r\n\r\n    double cf5(int, int, int, int, int) const {\r\n        return 15.0;\r\n    }\r\n\r\n    char cf6(int, int, int, int, int, int) const {\r\n        return 16;\r\n    }\r\n\r\n    int cf7(int, int, int, int, int, int, int) const {\r\n        return 17;\r\n    }\r\n\r\n    double cf8(int, int, int, int, int, int, int, int) const {\r\n        return 18.0;\r\n    }\r\n\r\n    char cf9(int, int, int, int, int, int, int, int, int) const {\r\n        return 19;\r\n    }\r\n\r\n    char vf0() volatile {\r\n        return 20;\r\n    }\r\n\r\n    int vf1(int) volatile {\r\n        return 21;\r\n    }\r\n\r\n    double vf2(int, int) volatile {\r\n        return 22.0;\r\n    }\r\n\r\n    char vf3(int, int, int) volatile {\r\n        return 23;\r\n    }\r\n\r\n    int vf4(int, int, int, int) volatile {\r\n        return 24;\r\n    }\r\n\r\n    double vf5(int, int, int, int, int) volatile {\r\n        return 25.0;\r\n    }\r\n\r\n    char vf6(int, int, int, int, int, int) volatile {\r\n        return 26;\r\n    }\r\n\r\n    int vf7(int, int, int, int, int, int, int) volatile {\r\n        return 27;\r\n    }\r\n\r\n    double vf8(int, int, int, int, int, int, int, int) volatile {\r\n        return 28.0;\r\n    }\r\n\r\n    char vf9(int, int, int, int, int, int, int, int, int) volatile {\r\n        return 29;\r\n    }\r\n\r\n    char cvf0() const volatile {\r\n        return 30;\r\n    }\r\n\r\n    int cvf1(int) const volatile {\r\n        return 31;\r\n    }\r\n\r\n    double cvf2(int, int) const volatile {\r\n        return 32.0;\r\n    }\r\n\r\n    char cvf3(int, int, int) const volatile {\r\n        return 33;\r\n    }\r\n\r\n    int cvf4(int, int, int, int) const volatile {\r\n        return 34;\r\n    }\r\n\r\n    double cvf5(int, int, int, int, int) const volatile {\r\n        return 35.0;\r\n    }\r\n\r\n    char cvf6(int, int, int, int, int, int) const volatile {\r\n        return 36;\r\n    }\r\n\r\n    int cvf7(int, int, int, int, int, int, int) const volatile {\r\n        return 37;\r\n    }\r\n\r\n    double cvf8(int, int, int, int, int, int, int, int) const volatile {\r\n        return 38.0;\r\n    }\r\n\r\n    char cvf9(int, int, int, int, int, int, int, int, int) const volatile {\r\n        return 39;\r\n    }\r\n};\r\n\r\nstruct Fn0 {\r\n    char operator()() const {\r\n        return 0;\r\n    }\r\n};\r\n\r\nstruct Fn1 {\r\n    int operator()(int) const {\r\n        return 1;\r\n    }\r\n};\r\n\r\nstruct Fn2 {\r\n    double operator()(int, int) const {\r\n        return 2.0;\r\n    }\r\n};\r\n\r\nstruct Fn3 {\r\n    char operator()(int, int, int) const {\r\n        return 3;\r\n    }\r\n};\r\n\r\nstruct Fn4 {\r\n    int operator()(int, int, int, int) const {\r\n        return 4;\r\n    }\r\n};\r\n\r\nstruct Fn5 {\r\n    double operator()(int, int, int, int, int) const {\r\n        return 5.0;\r\n    }\r\n};\r\n\r\nstruct Fn6 {\r\n    char operator()(int, int, int, int, int, int) const {\r\n        return 6;\r\n    }\r\n};\r\n\r\nstruct Fn7 {\r\n    int operator()(int, int, int, int, int, int, int) const {\r\n        return 7;\r\n    }\r\n};\r\n\r\nstruct Fn8 {\r\n    double operator()(int, int, int, int, int, int, int, int) const {\r\n        return 8.0;\r\n    }\r\n};\r\n\r\nstruct Fn9 {\r\n    char operator()(int, int, int, int, int, int, int, int, int) const {\r\n        return 9;\r\n    }\r\n};\r\n\r\nstruct Fn10 {\r\n    int operator()(int, int, int, int, int, int, int, int, int, int) const {\r\n        return 10;\r\n    }\r\n};\r\n\r\nstruct S0 {};\r\n\r\nstatic void tref0() {\r\n    S s;\r\n    const S cs;\r\n    volatile S vs;\r\n    const volatile S cvs;\r\n    S* sp                  = &s;\r\n    const S* csp           = &cs;\r\n    volatile S* vsp        = &vs;\r\n    const volatile S* cvsp = &cvs;\r\n    int one                = 1;\r\n\r\n    // reference_wrapper FOR DATA MEMBERS\r\n    // CALL WITH OBJECTS\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::di))(s));\r\n    CHECK_INT(s.di, STD cref(fake_lvalue(&S::di))(s));\r\n    CHECK_TYPE(float, STD cref(fake_lvalue(&S::df))(s));\r\n    CHECK_DOUBLE(s.df, STD cref(fake_lvalue(&S::df))(s));\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::cdd))(s));\r\n    CHECK_DOUBLE(s.cdd, STD cref(fake_lvalue(&S::cdd))(s));\r\n\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::di))(cs));\r\n    CHECK_INT(cs.di, STD cref(fake_lvalue(&S::di))(cs));\r\n    CHECK_TYPE(float, STD cref(fake_lvalue(&S::df))(cs));\r\n    CHECK_DOUBLE(cs.df, STD cref(fake_lvalue(&S::df))(cs));\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::cdd))(cs));\r\n    CHECK_DOUBLE(cs.cdd, STD cref(fake_lvalue(&S::cdd))(cs));\r\n\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::di))(vs));\r\n    CHECK_INT(vs.di, STD cref(fake_lvalue(&S::di))(vs));\r\n    CHECK_TYPE(float, STD cref(fake_lvalue(&S::df))(vs));\r\n    CHECK_DOUBLE(vs.df, STD cref(fake_lvalue(&S::df))(vs));\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::cdd))(vs));\r\n    CHECK_DOUBLE(vs.cdd, STD cref(fake_lvalue(&S::cdd))(vs));\r\n\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::di))(cvs));\r\n    CHECK_INT(cvs.di, STD cref(fake_lvalue(&S::di))(cvs));\r\n    CHECK_TYPE(float, STD cref(fake_lvalue(&S::df))(cvs));\r\n    CHECK_DOUBLE(cvs.df, STD cref(fake_lvalue(&S::df))(cvs));\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::cdd))(cvs));\r\n    CHECK_DOUBLE(cvs.cdd, STD cref(fake_lvalue(&S::cdd))(cvs));\r\n\r\n    // call with pointers\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::di))(sp));\r\n    CHECK_INT(s.di, STD cref(fake_lvalue(&S::di))(sp));\r\n    CHECK_TYPE(float, STD cref(fake_lvalue(&S::df))(sp));\r\n    CHECK_DOUBLE(s.df, STD cref(fake_lvalue(&S::df))(sp));\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::cdd))(sp));\r\n    CHECK_DOUBLE(s.cdd, STD cref(fake_lvalue(&S::cdd))(sp));\r\n\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::di))(csp));\r\n    CHECK_INT(cs.di, STD cref(fake_lvalue(&S::di))(csp));\r\n    CHECK_TYPE(float, STD cref(fake_lvalue(&S::df))(csp));\r\n    CHECK_DOUBLE(cs.df, STD cref(fake_lvalue(&S::df))(csp));\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::cdd))(csp));\r\n    CHECK_DOUBLE(cs.cdd, STD cref(fake_lvalue(&S::cdd))(csp));\r\n\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::di))(vsp));\r\n    CHECK_INT(vs.di, STD cref(fake_lvalue(&S::di))(vsp));\r\n    CHECK_TYPE(float, STD cref(fake_lvalue(&S::df))(vsp));\r\n    CHECK_DOUBLE(vs.df, STD cref(fake_lvalue(&S::df))(vsp));\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::cdd))(vsp));\r\n    CHECK_DOUBLE(vs.cdd, STD cref(fake_lvalue(&S::cdd))(vsp));\r\n\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::di))(cvsp));\r\n    CHECK_INT(cvs.di, STD cref(fake_lvalue(&S::di))(cvsp));\r\n    CHECK_TYPE(float, STD cref(fake_lvalue(&S::df))(cvsp));\r\n    CHECK_DOUBLE(cvs.df, STD cref(fake_lvalue(&S::df))(cvsp));\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::cdd))(cvsp));\r\n    CHECK_DOUBLE(cvs.cdd, STD cref(fake_lvalue(&S::cdd))(cvsp));\r\n\r\n    // MODIFY DATA MEMBER\r\n    STD cref(fake_lvalue(&S::di))(s)++;\r\n    CHECK_INT(s.di, 2);\r\n    STD cref(fake_lvalue(&S::df))(vs) = 4.0;\r\n    CHECK_DOUBLE(vs.df, 4.0);\r\n\r\n    // reference_wrapper FOR FUNCTIONS\r\n    // CALL 0-ARGUMENT FUNCTION RETURNING VOID\r\n    CHECK_MSG(\"incorrect return type for member function returning void\",\r\n        typeid(STD cref(fake_lvalue(&returns_void))()) == typeid(void));\r\n    // CALL 0-ARGUMENT FUNCTION\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&f0))());\r\n    CHECK_INT(0, STD cref(fake_lvalue(&f0))());\r\n\r\n    // CALL 1-ARGUMENT FUNCTION\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&f1))(one));\r\n    CHECK_INT(1, STD cref(fake_lvalue(&f1))(one));\r\n\r\n    // CALL 2-ARGUMENT FUNCTION\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&f2))(one, one));\r\n    CHECK_DOUBLE(2.0, STD cref(fake_lvalue(&f2))(one, one));\r\n\r\n    // CALL 3-ARGUMENT FUNCTION\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&f3))(one, one, one));\r\n    CHECK_INT(3, STD cref(fake_lvalue(&f3))(one, one, one));\r\n\r\n    // CALL 4-ARGUMENT FUNCTION\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&f4))(one, one, one, one));\r\n    CHECK_INT(4, STD cref(fake_lvalue(&f4))(one, one, one, one));\r\n\r\n    // CALL 5-ARGUMENT FUNCTION\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&f5))(one, one, one, one, one));\r\n    CHECK_DOUBLE(5.0, STD cref(fake_lvalue(&f5))(one, one, one, one, one));\r\n\r\n    // CALL 6-ARGUMENT FUNCTION\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&f6))(one, one, one, one, one, one));\r\n    CHECK_INT(6, STD cref(fake_lvalue(&f6))(one, one, one, one, one, one));\r\n\r\n    // CALL 7-ARGUMENT FUNCTION\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&f7))(one, one, one, one, one, one, one));\r\n    CHECK_INT(7, STD cref(fake_lvalue(&f7))(one, one, one, one, one, one, one));\r\n\r\n    // CALL 8-ARGUMENT FUNCTION\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&f8))(one, one, one, one, one, one, one, one));\r\n    CHECK_DOUBLE(8.0, STD cref(fake_lvalue(&f8))(one, one, one, one, one, one, one, one));\r\n\r\n    // CALL 9-ARGUMENT FUNCTION\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&f9))(one, one, one, one, one, one, one, one, one));\r\n    CHECK_INT(9, STD cref(fake_lvalue(&f9))(one, one, one, one, one, one, one, one, one));\r\n\r\n    // CALL 10-ARGUMENT FUNCTION\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&f10))(one, one, one, one, one, one, one, one, one, one));\r\n    CHECK_INT(10, STD cref(fake_lvalue(&f10))(one, one, one, one, one, one, one, one, one, one));\r\n\r\n    // reference_wrapper FOR MEMBER FUNCTIONS\r\n    // CALL 0-ARGUMENT MEMBER FUNCTION RETURNING VOID\r\n    CHECK_MSG(\"incorrect return type for member function returning void\",\r\n        typeid(STD cref(fake_lvalue(&S::returns_void))(sp)) == typeid(void));\r\n    // CALL 0-ARGUMENT MEMBER FUNCTIONS\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&S::f0))(sp));\r\n    CHECK_INT(0, STD cref(fake_lvalue(&S::f0))(sp));\r\n\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&S::cf0))(csp));\r\n    CHECK_INT(10, STD cref(fake_lvalue(&S::cf0))(sp));\r\n    CHECK_INT(10, STD cref(fake_lvalue(&S::cf0))(csp));\r\n\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&S::vf0))(vsp));\r\n    CHECK_INT(20, STD cref(fake_lvalue(&S::vf0))(sp));\r\n    CHECK_INT(20, STD cref(fake_lvalue(&S::vf0))(vsp));\r\n\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&S::cvf0))(cvsp));\r\n    CHECK_INT(30, STD cref(fake_lvalue(&S::cvf0))(sp));\r\n    CHECK_INT(30, STD cref(fake_lvalue(&S::cvf0))(csp));\r\n    CHECK_INT(30, STD cref(fake_lvalue(&S::cvf0))(vsp));\r\n    CHECK_INT(30, STD cref(fake_lvalue(&S::cvf0))(cvsp));\r\n\r\n    // CALL 1-ARGUMENT MEMBER FUNCTIONS\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::f1))(sp, one));\r\n    CHECK_INT(1, STD cref(fake_lvalue(&S::f1))(sp, one));\r\n\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::cf1))(csp, one));\r\n    CHECK_INT(11, STD cref(fake_lvalue(&S::cf1))(sp, one));\r\n    CHECK_INT(11, STD cref(fake_lvalue(&S::cf1))(csp, one));\r\n\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::vf1))(vsp, one));\r\n    CHECK_INT(21, STD cref(fake_lvalue(&S::vf1))(sp, one));\r\n    CHECK_INT(21, STD cref(fake_lvalue(&S::vf1))(vsp, one));\r\n\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::cvf1))(cvsp, one));\r\n    CHECK_INT(31, STD cref(fake_lvalue(&S::cvf1))(sp, one));\r\n    CHECK_INT(31, STD cref(fake_lvalue(&S::cvf1))(csp, one));\r\n    CHECK_INT(31, STD cref(fake_lvalue(&S::cvf1))(vsp, one));\r\n    CHECK_INT(31, STD cref(fake_lvalue(&S::cvf1))(cvsp, one));\r\n\r\n    // CALL 2-ARGUMENT MEMBER FUNCTIONS\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::f2))(sp, one, one));\r\n    CHECK_DOUBLE(2.0, STD cref(fake_lvalue(&S::f2))(sp, one, one));\r\n\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::cf2))(csp, one, one));\r\n    CHECK_DOUBLE(12.0, STD cref(fake_lvalue(&S::cf2))(sp, one, one));\r\n    CHECK_DOUBLE(12.0, STD cref(fake_lvalue(&S::cf2))(csp, one, one));\r\n\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::vf2))(vsp, one, one));\r\n    CHECK_DOUBLE(22.0, STD cref(fake_lvalue(&S::vf2))(sp, one, one));\r\n    CHECK_DOUBLE(22.0, STD cref(fake_lvalue(&S::vf2))(vsp, one, one));\r\n\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::cvf2))(cvsp, one, one));\r\n    CHECK_DOUBLE(32.0, STD cref(fake_lvalue(&S::cvf2))(sp, one, one));\r\n    CHECK_DOUBLE(32.0, STD cref(fake_lvalue(&S::cvf2))(csp, one, one));\r\n    CHECK_DOUBLE(32.0, STD cref(fake_lvalue(&S::cvf2))(vsp, one, one));\r\n    CHECK_DOUBLE(32.0, STD cref(fake_lvalue(&S::cvf2))(cvsp, one, one));\r\n\r\n    // CALL 3-ARGUMENT MEMBER FUNCTIONS\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&S::f3))(sp, one, one, one));\r\n    CHECK_INT(3, STD cref(fake_lvalue(&S::f3))(sp, one, one, one));\r\n\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&S::cf3))(csp, one, one, one));\r\n    CHECK_INT(13, STD cref(fake_lvalue(&S::cf3))(sp, one, one, one));\r\n    CHECK_INT(13, STD cref(fake_lvalue(&S::cf3))(csp, one, one, one));\r\n\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&S::vf3))(vsp, one, one, one));\r\n    CHECK_INT(23, STD cref(fake_lvalue(&S::vf3))(sp, one, one, one));\r\n    CHECK_INT(23, STD cref(fake_lvalue(&S::vf3))(vsp, one, one, one));\r\n\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&S::cvf3))(cvsp, one, one, one));\r\n    CHECK_INT(33, STD cref(fake_lvalue(&S::cvf3))(sp, one, one, one));\r\n    CHECK_INT(33, STD cref(fake_lvalue(&S::cvf3))(csp, one, one, one));\r\n    CHECK_INT(33, STD cref(fake_lvalue(&S::cvf3))(vsp, one, one, one));\r\n    CHECK_INT(33, STD cref(fake_lvalue(&S::cvf3))(cvsp, one, one, one));\r\n\r\n    // CALL 4-ARGUMENT MEMBER FUNCTIONS\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::f4))(sp, one, one, one, one));\r\n    CHECK_INT(4, STD cref(fake_lvalue(&S::f4))(sp, one, one, one, one));\r\n\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::cf4))(csp, one, one, one, one));\r\n    CHECK_INT(14, STD cref(fake_lvalue(&S::cf4))(sp, one, one, one, one));\r\n    CHECK_INT(14, STD cref(fake_lvalue(&S::cf4))(csp, one, one, one, one));\r\n\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::vf4))(vsp, one, one, one, one));\r\n    CHECK_INT(24, STD cref(fake_lvalue(&S::vf4))(sp, one, one, one, one));\r\n    CHECK_INT(24, STD cref(fake_lvalue(&S::vf4))(vsp, one, one, one, one));\r\n\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::cvf4))(cvsp, one, one, one, one));\r\n    CHECK_INT(34, STD cref(fake_lvalue(&S::cvf4))(sp, one, one, one, one));\r\n    CHECK_INT(34, STD cref(fake_lvalue(&S::cvf4))(csp, one, one, one, one));\r\n    CHECK_INT(34, STD cref(fake_lvalue(&S::cvf4))(vsp, one, one, one, one));\r\n    CHECK_INT(34, STD cref(fake_lvalue(&S::cvf4))(cvsp, one, one, one, one));\r\n\r\n    // CALL 5-ARGUMENT MEMBER FUNCTIONS\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::f5))(sp, one, one, one, one, one));\r\n    CHECK_DOUBLE(5.0, STD cref(fake_lvalue(&S::f5))(sp, one, one, one, one, one));\r\n\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::cf5))(csp, one, one, one, one, one));\r\n    CHECK_DOUBLE(15.0, STD cref(fake_lvalue(&S::cf5))(sp, one, one, one, one, one));\r\n    CHECK_DOUBLE(15.0, STD cref(fake_lvalue(&S::cf5))(csp, one, one, one, one, one));\r\n\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::vf5))(vsp, one, one, one, one, one));\r\n    CHECK_DOUBLE(25.0, STD cref(fake_lvalue(&S::vf5))(sp, one, one, one, one, one));\r\n    CHECK_DOUBLE(25.0, STD cref(fake_lvalue(&S::vf5))(vsp, one, one, one, one, one));\r\n\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::cvf5))(cvsp, one, one, one, one, one));\r\n    CHECK_DOUBLE(35.0, STD cref(fake_lvalue(&S::cvf5))(sp, one, one, one, one, one));\r\n    CHECK_DOUBLE(35.0, STD cref(fake_lvalue(&S::cvf5))(csp, one, one, one, one, one));\r\n    CHECK_DOUBLE(35.0, STD cref(fake_lvalue(&S::cvf5))(vsp, one, one, one, one, one));\r\n    CHECK_DOUBLE(35.0, STD cref(fake_lvalue(&S::cvf5))(cvsp, one, one, one, one, one));\r\n\r\n    // CALL 6-ARGUMENT MEMBER FUNCTIONS\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&S::f6))(sp, one, one, one, one, one, one));\r\n    CHECK_INT(6, STD cref(fake_lvalue(&S::f6))(sp, one, one, one, one, one, one));\r\n\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&S::cf6))(csp, one, one, one, one, one, one));\r\n    CHECK_INT(16, STD cref(fake_lvalue(&S::cf6))(sp, one, one, one, one, one, one));\r\n    CHECK_INT(16, STD cref(fake_lvalue(&S::cf6))(csp, one, one, one, one, one, one));\r\n\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&S::vf6))(vsp, one, one, one, one, one, one));\r\n    CHECK_INT(26, STD cref(fake_lvalue(&S::vf6))(sp, one, one, one, one, one, one));\r\n    CHECK_INT(26, STD cref(fake_lvalue(&S::vf6))(vsp, one, one, one, one, one, one));\r\n\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&S::cvf6))(cvsp, one, one, one, one, one, one));\r\n    CHECK_INT(36, STD cref(fake_lvalue(&S::cvf6))(sp, one, one, one, one, one, one));\r\n    CHECK_INT(36, STD cref(fake_lvalue(&S::cvf6))(csp, one, one, one, one, one, one));\r\n    CHECK_INT(36, STD cref(fake_lvalue(&S::cvf6))(vsp, one, one, one, one, one, one));\r\n    CHECK_INT(36, STD cref(fake_lvalue(&S::cvf6))(cvsp, one, one, one, one, one, one));\r\n\r\n    // CALL 7-ARGUMENT MEMBER FUNCTIONS\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::f7))(sp, one, one, one, one, one, one, one));\r\n    CHECK_INT(7, STD cref(fake_lvalue(&S::f7))(sp, one, one, one, one, one, one, one));\r\n\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::cf7))(csp, one, one, one, one, one, one, one));\r\n    CHECK_INT(17, STD cref(fake_lvalue(&S::cf7))(sp, one, one, one, one, one, one, one));\r\n    CHECK_INT(17, STD cref(fake_lvalue(&S::cf7))(csp, one, one, one, one, one, one, one));\r\n\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::vf7))(vsp, one, one, one, one, one, one, one));\r\n    CHECK_INT(27, STD cref(fake_lvalue(&S::vf7))(sp, one, one, one, one, one, one, one));\r\n    CHECK_INT(27, STD cref(fake_lvalue(&S::vf7))(vsp, one, one, one, one, one, one, one));\r\n\r\n    CHECK_TYPE(int, STD cref(fake_lvalue(&S::cvf7))(cvsp, one, one, one, one, one, one, one));\r\n    CHECK_INT(37, STD cref(fake_lvalue(&S::cvf7))(sp, one, one, one, one, one, one, one));\r\n    CHECK_INT(37, STD cref(fake_lvalue(&S::cvf7))(csp, one, one, one, one, one, one, one));\r\n    CHECK_INT(37, STD cref(fake_lvalue(&S::cvf7))(vsp, one, one, one, one, one, one, one));\r\n    CHECK_INT(37, STD cref(fake_lvalue(&S::cvf7))(cvsp, one, one, one, one, one, one, one));\r\n\r\n    // CALL 8-ARGUMENT MEMBER FUNCTIONS\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::f8))(sp, one, one, one, one, one, one, one, one));\r\n    CHECK_DOUBLE(8.0, STD cref(fake_lvalue(&S::f8))(sp, one, one, one, one, one, one, one, one));\r\n\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::cf8))(csp, one, one, one, one, one, one, one, one));\r\n    CHECK_DOUBLE(18.0, STD cref(fake_lvalue(&S::cf8))(sp, one, one, one, one, one, one, one, one));\r\n    CHECK_DOUBLE(18.0, STD cref(fake_lvalue(&S::cf8))(csp, one, one, one, one, one, one, one, one));\r\n\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::vf8))(vsp, one, one, one, one, one, one, one, one));\r\n    CHECK_DOUBLE(28.0, STD cref(fake_lvalue(&S::vf8))(sp, one, one, one, one, one, one, one, one));\r\n    CHECK_DOUBLE(28.0, STD cref(fake_lvalue(&S::vf8))(vsp, one, one, one, one, one, one, one, one));\r\n\r\n    CHECK_TYPE(double, STD cref(fake_lvalue(&S::cvf8))(cvsp, one, one, one, one, one, one, one, one));\r\n    CHECK_DOUBLE(38.0, STD cref(fake_lvalue(&S::cvf8))(sp, one, one, one, one, one, one, one, one));\r\n    CHECK_DOUBLE(38.0, STD cref(fake_lvalue(&S::cvf8))(csp, one, one, one, one, one, one, one, one));\r\n    CHECK_DOUBLE(38.0, STD cref(fake_lvalue(&S::cvf8))(vsp, one, one, one, one, one, one, one, one));\r\n    CHECK_DOUBLE(38.0, STD cref(fake_lvalue(&S::cvf8))(cvsp, one, one, one, one, one, one, one, one));\r\n\r\n    // CALL 9-ARGUMENT MEMBER FUNCTIONS\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&S::f9))(sp, one, one, one, one, one, one, one, one, one));\r\n    CHECK_INT(9, STD cref(fake_lvalue(&S::f9))(sp, one, one, one, one, one, one, one, one, one));\r\n\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&S::cf9))(csp, one, one, one, one, one, one, one, one, one));\r\n    CHECK_INT(19, STD cref(fake_lvalue(&S::cf9))(sp, one, one, one, one, one, one, one, one, one));\r\n    CHECK_INT(19, STD cref(fake_lvalue(&S::cf9))(csp, one, one, one, one, one, one, one, one, one));\r\n\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&S::vf9))(vsp, one, one, one, one, one, one, one, one, one));\r\n    CHECK_INT(29, STD cref(fake_lvalue(&S::vf9))(sp, one, one, one, one, one, one, one, one, one));\r\n    CHECK_INT(29, STD cref(fake_lvalue(&S::vf9))(vsp, one, one, one, one, one, one, one, one, one));\r\n\r\n    CHECK_TYPE(char, STD cref(fake_lvalue(&S::cvf9))(cvsp, one, one, one, one, one, one, one, one, one));\r\n    CHECK_INT(39, STD cref(fake_lvalue(&S::cvf9))(sp, one, one, one, one, one, one, one, one, one));\r\n    CHECK_INT(39, STD cref(fake_lvalue(&S::cvf9))(csp, one, one, one, one, one, one, one, one, one));\r\n    CHECK_INT(39, STD cref(fake_lvalue(&S::cvf9))(vsp, one, one, one, one, one, one, one, one, one));\r\n    CHECK_INT(39, STD cref(fake_lvalue(&S::cvf9))(cvsp, one, one, one, one, one, one, one, one, one));\r\n}\r\n\r\nvoid test_main() { // test header <functional>\r\n    typedef STD reference_wrapper<int> rwi;\r\n    typedef STD reference_wrapper<const int> rwci;\r\n    int i = 3, j = 4;\r\n\r\n    rwi rw0 = rwi(i);\r\n    CHECK_INT(rw0, 3);\r\n    rwi rw1(j);\r\n    CHECK_INT(rw1, 4);\r\n    rw1 = rw0;\r\n    CHECK_INT(rw0, 3);\r\n\r\n    int& ir0 = rw1;\r\n    CHECK_INT(ir0, i);\r\n    ir0 = 5;\r\n    CHECK_INT(ir0, 5);\r\n    CHECK_INT(i, 5);\r\n    CHECK_INT(rw1, 5);\r\n    const int& cir0 = rwci(j);\r\n    CHECK_INT(cir0, j);\r\n\r\n    int& ir1 = rw1.get();\r\n    CHECK_INT(ir1, i);\r\n    const int& cir1 = rwci(j).get();\r\n    CHECK_INT(cir1, j);\r\n\r\n    tref0();\r\n\r\n    rwi rw2 = STD ref(i);\r\n    CHECK_INT(rw2, i);\r\n    rwci rw3 = STD cref(i);\r\n    CHECK_INT(rw3, i);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/functional9/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <functional>, part 9\r\n#define TEST_NAME \"<functional>, part 9\"\r\n\r\n#include \"tdefs.h\"\r\n#include \"tfuns.h\"\r\n#include <functional>\r\n\r\n#define PH1  STD placeholders::_1\r\n#define PH2  STD placeholders::_2\r\n#define PH3  STD placeholders::_3\r\n#define PH4  STD placeholders::_4\r\n#define PH5  STD placeholders::_5\r\n#define PH6  STD placeholders::_6\r\n#define PH7  STD placeholders::_7\r\n#define PH8  STD placeholders::_8\r\n#define PH9  STD placeholders::_9\r\n#define PH10 STD placeholders::_10\r\n\r\ntemplate <class Wrapper>\r\nvoid call1(Wrapper wrapper) {\r\n    CHECK_INT(wrapper(funobj(2)), 2);\r\n}\r\n\r\ntemplate <class Wrapper>\r\nvoid call2(Wrapper wrapper) {\r\n    CHECK_INT(wrapper(funobj(2), 3), 5);\r\n}\r\n\r\ntemplate <class Wrapper>\r\nvoid call3(Wrapper wrapper) {\r\n    CHECK_INT(wrapper(funobj(2), 3, 4), 9);\r\n}\r\n\r\ntemplate <class Wrapper>\r\nvoid call4(Wrapper wrapper) {\r\n    CHECK_INT(wrapper(funobj(2), 3, 4, 5), 14);\r\n}\r\n\r\ntemplate <class Wrapper>\r\nvoid call5(Wrapper wrapper) {\r\n    CHECK_INT(wrapper(funobj(2), 3, 4, 5, 6), 20);\r\n}\r\n\r\nint sum0() {\r\n    return 0;\r\n}\r\nint sum1(int v1) {\r\n    return v1;\r\n}\r\nint sum4(int v1, int v2, int v3, int v4) {\r\n    return v1 + v2 + v3 + v4;\r\n}\r\n\r\nstatic void t_invoke() { // test invoke\r\n    CHECK_INT(STD invoke(sum0), 0);\r\n    CHECK_INT(STD invoke(sum1, 5), 5);\r\n    CHECK_INT(STD invoke(sum4, 1, 3, 5, 7), 16);\r\n}\r\n\r\nvoid test_main() { // test header <functional>\r\n    // reference_wrapper::operator() with rvalues\r\n    call1(STD cref(fake_lvalue(&f1)));\r\n    call2(STD cref(fake_lvalue(&f2)));\r\n    call3(STD cref(fake_lvalue(&f3)));\r\n    call4(STD cref(fake_lvalue(&f4)));\r\n    call5(STD cref(fake_lvalue(&f5)));\r\n\r\n    call1(STD cref(fake_lvalue(&funobj::cf1)));\r\n    call2(STD cref(fake_lvalue(&funobj::cf2)));\r\n    call3(STD cref(fake_lvalue(&funobj::cf3)));\r\n    call4(STD cref(fake_lvalue(&funobj::cf4)));\r\n    call5(STD cref(fake_lvalue(&funobj::cf5)));\r\n\r\n    call1(funobj());\r\n    call2(funobj());\r\n    call3(funobj());\r\n    call4(funobj());\r\n    call5(funobj());\r\n\r\n    call1(STD mem_fn(&funobj::cf1));\r\n    call2(STD mem_fn(&funobj::cf2));\r\n    call3(STD mem_fn(&funobj::cf3));\r\n    call4(STD mem_fn(&funobj::cf4));\r\n    call5(STD mem_fn(&funobj::cf5));\r\n\r\n    call1(STD bind(&funobj::cf1, PH1));\r\n    call2(STD bind(&funobj::cf2, PH1, PH2));\r\n    call3(STD bind(&funobj::cf3, PH1, PH2, PH3));\r\n    call4(STD bind(&funobj::cf4, PH1, PH2, PH3, PH4));\r\n    call5(STD bind(&funobj::cf5, PH1, PH2, PH3, PH4, PH5));\r\n\r\n    t_invoke();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/future/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\..\\env_minus_pure.lst\r\n"
  },
  {
    "path": "tests/tr1/tests/future/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <future> C++0x header\r\n#define TEST_NAME \"<future>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <future>\r\n\r\nstatic int counted_allocator_instances = 0;\r\nstatic bool counted_allocator_used     = false;\r\n\r\ntemplate <class Ty>\r\nclass counted_allocator { // allocator with instrumented constructor, destructor\r\n    typedef STD allocator<Ty> MyAllocTy;\r\n\r\npublic:\r\n    typedef Ty value_type;\r\n\r\n    counted_allocator() throw() { // construct\r\n        ++counted_allocator_instances;\r\n    }\r\n    counted_allocator(const counted_allocator&) throw() { // construct copy\r\n        ++counted_allocator_instances;\r\n    }\r\n    template <class Other>\r\n    counted_allocator(const counted_allocator<Other>&) throw() { // construct copy\r\n        ++counted_allocator_instances;\r\n    }\r\n    ~counted_allocator() throw() { // destroy\r\n        --counted_allocator_instances;\r\n    }\r\n\r\n    Ty* allocate(size_t sz) { // allocate\r\n        counted_allocator_used = true;\r\n        return MyAllocTy{}.allocate(sz);\r\n    }\r\n    void deallocate(Ty* p, size_t n) { // deallocate\r\n        MyAllocTy{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class Other>\r\n    bool operator==(const counted_allocator<Other>&) const {\r\n        return true;\r\n    }\r\n\r\n    template <class Other>\r\n    bool operator!=(const counted_allocator<Other>&) const {\r\n        return false;\r\n    }\r\n};\r\n\r\nstatic STD error_code brk(STD future_errc::broken_promise);\r\nstatic STD error_code rtr(STD future_errc::future_already_retrieved);\r\nstatic STD error_code sat(STD future_errc::promise_already_satisfied);\r\nstatic STD error_code nst(STD future_errc::no_state);\r\n\r\nstatic bool check_future_errc(STD future_errc) { // bind to future_errc values\r\n    return 1;\r\n}\r\n\r\nstatic bool check_launch(STD launch) { // bind to launch values\r\n    return 1;\r\n}\r\n\r\nstatic bool check_future_status(STD future_status) { // bind to future_status values\r\n    return 1;\r\n}\r\n\r\nstatic void test_enums() { // test future_errc, launch, and future_status\r\n    CHECK_MSG(\"future_errc\", check_future_errc(STD future_errc::broken_promise));\r\n    CHECK_MSG(\"future_errc\", check_future_errc(STD future_errc::future_already_retrieved));\r\n    CHECK_MSG(\"future_errc\", check_future_errc(STD future_errc::promise_already_satisfied));\r\n    CHECK_MSG(\"future_errc\", check_future_errc(STD future_errc::no_state));\r\n    CHECK_INT(STD is_error_code_enum<STD future_errc>::value, true);\r\n\r\n    CHECK_MSG(\"launch\", check_launch(STD launch::async));\r\n    CHECK_MSG(\"launch\", check_launch(STD launch::deferred));\r\n    CHECK_MSG(\"launch\", check_launch(STD launch::async | STD launch::deferred));\r\n\r\n    CHECK_MSG(\"future_status\", check_future_status(STD future_status::ready));\r\n    CHECK_MSG(\"future_status\", check_future_status(STD future_status::timeout));\r\n    CHECK_MSG(\"future_status\", check_future_status(STD future_status::deferred));\r\n}\r\n\r\nstatic void test_error_code(STD future_errc code) { // test error_code and error_condition\r\n    STD error_code eco = STD make_error_code(code);\r\n    CHECK_INT((int) eco.value() == (int) code, true);\r\n    CHECK_INT(eco.category() == STD future_category(), true);\r\n\r\n    STD error_condition ecn = STD make_error_condition(code);\r\n    CHECK_INT((int) ecn.value() == (int) code, true);\r\n    CHECK_INT(ecn.category() == STD future_category(), true);\r\n}\r\n\r\nbool is_error_category(const STD error_category*) { // return true for pointer to error_category\r\n    return true;\r\n}\r\nbool is_error_category(const void*) { // return false for other pointers\r\n    return false;\r\n}\r\n\r\nstatic void test_error_handling() { // test future_category and error codes\r\n    CHECK_STR(STD future_category().name(), \"future\");\r\n    CHECK_INT(is_error_category(&STD future_category()), true);\r\n\r\n    test_error_code(STD future_errc::broken_promise);\r\n    test_error_code(STD future_errc::future_already_retrieved);\r\n    test_error_code(STD future_errc::promise_already_satisfied);\r\n    test_error_code(STD future_errc::no_state);\r\n}\r\n\r\nbool is_logic_error(const STD logic_error*) { // return true for pointer to logic_error\r\n    return true;\r\n}\r\nbool is_logic_error(const void*) { // return false for other pointers\r\n    return false;\r\n}\r\n\r\nstatic void test_future_error() { // test class future_error\r\n    STD error_code code = STD make_error_code(STD future_errc::broken_promise);\r\n    STD future_error fe(code);\r\n    CHECK_INT(is_logic_error(&fe), true);\r\n    CHECK_INT(fe.code() == code, true);\r\n    STD string what_msg = fe.what();\r\n    CHECK_INT(what_msg.find(code.message()) != STD string::npos, true);\r\n}\r\n\r\nstatic void test_promise_core() { // test construction, copying, moving, assigning, swapping\r\n    STD promise<int> pr0;\r\n    bool thrown = false;\r\n    try { // set value on default-constructed object\r\n        pr0.set_value(3);\r\n    } catch (...) { // shouldn't get here\r\n        thrown = true;\r\n    }\r\n    CHECK_INT(thrown, false);\r\n    thrown = false;\r\n    try { // set value a second time\r\n        pr0.set_value(3);\r\n    } catch (const STD future_error& err) { // should get here, promise already satisfied\r\n        CHECK_INT(err.code().value() == sat.value(), true);\r\n        thrown = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(thrown, true);\r\n\r\n    STD promise<int> pr1(STD move(pr0));\r\n    thrown = false;\r\n    try { // set value on moved-from object\r\n        pr0.set_value(3);\r\n    } catch (const STD future_error& err) { // should get here, no state\r\n        CHECK_INT(err.code().value() == nst.value(), true);\r\n        thrown = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(thrown, true);\r\n    thrown = false;\r\n    try { // set value on moved-to object\r\n        pr1.set_value(3);\r\n    } catch (const STD future_error& err) { // should get here, promise already satisfied\r\n        CHECK_INT(err.code().value() == sat.value(), true);\r\n        thrown = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(thrown, true);\r\n\r\n    pr0    = STD move(pr1);\r\n    thrown = false;\r\n    try { // set value on moved-to object\r\n        pr0.set_value(3);\r\n    } catch (const STD future_error& err) { // should get here, promise already satisfied\r\n        CHECK_INT(err.code().value() == sat.value(), true);\r\n        thrown = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(thrown, true);\r\n    thrown = false;\r\n    try { // set value on moved-from object\r\n        pr1.set_value(3);\r\n    } catch (const STD future_error& err) { // should get here, no state\r\n        CHECK_INT(err.code().value() == nst.value(), true);\r\n        thrown = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(thrown, true);\r\n\r\n    STD swap(pr0, pr1);\r\n    thrown = false;\r\n    try { // set value on swapped object\r\n        pr0.set_value(3);\r\n    } catch (const STD future_error& err) { // should get here, no state\r\n        CHECK_INT(err.code().value() == nst.value(), true);\r\n        thrown = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(thrown, true);\r\n    thrown = false;\r\n    try { // set value on swapped object\r\n        pr1.set_value(3);\r\n    } catch (const STD future_error& err) { // should get here, promise already satisfied\r\n        CHECK_INT(err.code().value() == sat.value(), true);\r\n        thrown = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(thrown, true);\r\n\r\n    pr0.swap(pr1);\r\n    thrown = false;\r\n    try { // set value on swapped object\r\n        pr0.set_value(3);\r\n    } catch (const STD future_error& err) { // should get here, promise already satisfied\r\n        CHECK_INT(err.code().value() == sat.value(), true);\r\n        thrown = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(thrown, true);\r\n    thrown = false;\r\n    try { // set value on swapped object\r\n        pr1.set_value(3);\r\n    } catch (const STD future_error& err) { // should get here, no state\r\n        CHECK_INT(err.code().value() == nst.value(), true);\r\n        thrown = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(thrown, true);\r\n\r\n    thrown = false;\r\n    try { // try to get future\r\n        (void) pr1.get_future();\r\n    } catch (const STD future_error& err) { // should get here, no state\r\n        CHECK_INT(err.code().value() == nst.value(), true);\r\n        thrown = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(thrown, true);\r\n\r\n    int i = 0;\r\n    try { // try to get future\r\n        (void) pr0.get_future();\r\n        ++i;\r\n        (void) pr0.get_future();\r\n        ++i;\r\n    } catch (const STD future_error& err) { // should get here after second attempt: future already retrieved\r\n        CHECK_INT(err.code().value() == rtr.value(), true);\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(i, 1);\r\n\r\n    thrown = false;\r\n    STD future<int> f;\r\n    {\r\n        STD promise<int> pr2;\r\n        f = pr2.get_future();\r\n    }\r\n    try {\r\n        f.get();\r\n    } catch (...) { // should get here, shared state abandoned\r\n        thrown = true;\r\n    }\r\n    CHECK_INT(thrown, true);\r\n}\r\n\r\ntemplate <class Ty>\r\nstatic void call_promise_setter(STD promise<Ty>* pr, int which) { // try to set a result\r\n    switch (which) { // result determined by value of which\r\n    case 0:\r\n        pr->set_value(3);\r\n        break;\r\n    case 1:\r\n        pr->set_exception(STD make_exception_ptr(0));\r\n        break;\r\n    case 2:\r\n        pr->set_value_at_thread_exit(3);\r\n        break;\r\n    case 3:\r\n        pr->set_exception_at_thread_exit(STD make_exception_ptr(0));\r\n        break;\r\n    }\r\n}\r\n\r\ntemplate <class Ty>\r\nstatic void call_promise_setter_from_thread(\r\n    STD promise<Ty>* pr, int which, bool should_throw) { // try to set a result, should succeed if should_throw is false\r\n    bool thrown = false;\r\n    try { // try to set a result\r\n        call_promise_setter(pr, which);\r\n    } catch (const STD future_error& err) { // if we get here, the promise has already been satisfied\r\n        CHECK_INT(err.code().value() == sat.value(), true);\r\n        thrown = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(thrown, should_throw);\r\n}\r\n\r\ntemplate <class Ty>\r\nstatic void test_promise_satisfied(\r\n    STD promise<Ty>& pr, int which) { // set result according to which, then try to set again four ways\r\n    STD thread thr0(&call_promise_setter_from_thread<Ty>, &pr, which, false);\r\n    thr0.join();\r\n    for (int i = 0; i < 4; ++i) { // try to set again, should throw exception\r\n        STD thread thr(&call_promise_setter_from_thread<Ty>, &pr, i, true);\r\n        thr.join();\r\n    }\r\n}\r\n\r\nstatic void test_promise_setters() { // set result four ways, try to set again four ways\r\n    for (int i = 0; i < 4; ++i) { // set result, check\r\n        STD promise<int> pr;\r\n        test_promise_satisfied(pr, i);\r\n    }\r\n}\r\n\r\ntemplate <class Ty>\r\nstatic void do_create_promise_with_allocator(\r\n    counted_allocator<int> alloc) { // create a promise object with an allocator\r\n    STD promise<Ty> pr(STD allocator_arg, alloc);\r\n    STD future<Ty> fut = pr.get_future();\r\n}\r\n\r\ntemplate <class Ty>\r\nstatic void do_test_promise_allocator() { // check that allocator is managed correctly with promise\r\n    counted_allocator_instances = 0;\r\n    counted_allocator_used      = false;\r\n    counted_allocator<int> alloc;\r\n    do_create_promise_with_allocator<Ty>(alloc);\r\n    CHECK_INT(counted_allocator_instances, 1);\r\n    CHECK_INT(counted_allocator_used, true);\r\n}\r\n\r\nstatic void test_promise_allocator() { // test promise with allocator\r\n    typedef STD uses_allocator<STD promise<int>, STD allocator<int>> promise_uses_allocator;\r\n    CHECK_INT(promise_uses_allocator::value, false);\r\n\r\n    do_test_promise_allocator<int>();\r\n    do_test_promise_allocator<int&>();\r\n    do_test_promise_allocator<void>();\r\n}\r\n\r\nstatic void test_promise() { // do basic tests for promise\r\n    test_promise_core();\r\n    test_promise_setters();\r\n    test_promise_allocator();\r\n}\r\n\r\ntemplate <class Arg>\r\nstruct future_factory { // template to generate future<Arg> object and test its get() member\r\n    static STD future<Arg> make_future() { // generate future<Arg> object\r\n        STD promise<Arg> pr;\r\n        pr.set_value(val);\r\n        return pr.get_future();\r\n    }\r\n    template <class Future>\r\n    static bool get_and_check(Future& f) { // test its get() member\r\n        return f.get() == val;\r\n    }\r\n    static Arg val;\r\n};\r\ntemplate <class Arg>\r\nArg future_factory<Arg>::val = Arg();\r\n\r\ntemplate <class Arg>\r\nstruct future_factory<Arg&> { // template to generate future<Arg&> object and test its get() member\r\n    static STD future<Arg&> make_future() { // generate future<Arg&> object\r\n        STD promise<Arg&> pr;\r\n        pr.set_value(val);\r\n        return pr.get_future();\r\n    }\r\n    template <class Future>\r\n    static bool get_and_check(Future& f) { // test its get() member\r\n        return f.get() == val;\r\n    }\r\n    static Arg val;\r\n};\r\ntemplate <class Arg>\r\nArg future_factory<Arg&>::val = Arg();\r\n\r\ntemplate <>\r\nstruct future_factory<void> { // template to generate future<void> object and test its get() member\r\n    static STD future<void> make_future() { // generate future<void> object\r\n        STD promise<void> pr;\r\n        pr.set_value();\r\n        return pr.get_future();\r\n    }\r\n    template <class Future>\r\n    static bool get_and_check(Future& f) { // test its get() member\r\n        f.get(); // do not remove\r\n        return true;\r\n    }\r\n};\r\n\r\ntemplate <class Future, class Arg, bool get_only_once>\r\nstruct test_futures { // class for testing various future types\r\n    static void test_core() { // test Future's core operations\r\n        Future f0;\r\n        CHECK_INT(f0.valid(), false);\r\n        Future f1;\r\n        CHECK_INT(f0.valid(), false);\r\n        CHECK_INT(f1.valid(), false);\r\n\r\n        Future f0x(future_factory<Arg>::make_future());\r\n        f0 = STD move(f0x);\r\n        CHECK_INT(f0.valid(), true);\r\n        CHECK_INT(future_factory<Arg>::get_and_check(f0), true);\r\n        CHECK_INT(f0.valid(), !get_only_once);\r\n        f1 = STD move(f0);\r\n        CHECK_INT(f1.valid(), !get_only_once);\r\n        bool thrown = false;\r\n        try { // try to get() a second tome\r\n            f1.get();\r\n            CHECK_MSG(\"shouldn't get here\", !get_only_once);\r\n        } catch (const STD future_error& err) { // should get here if get_only_once is true\r\n            CHECK_INT(err.code().value() == nst.value(), true);\r\n            thrown = true;\r\n        }\r\n        CHECK_INT(thrown, get_only_once);\r\n    }\r\n\r\n    static void test_copy(bool unique) { // test copying\r\n        Future f0 = future_factory<Arg>::make_future();\r\n        Future f1 = f0;\r\n        CHECK_INT(f0.valid(), !unique);\r\n        CHECK_INT(f1.valid(), true);\r\n        Future f2;\r\n        f2 = f1;\r\n        CHECK_INT(f1.valid(), !unique);\r\n        CHECK_INT(f2.valid(), true);\r\n    }\r\n\r\n    static void test_move(bool unique) { // test copying\r\n        Future f0 = future_factory<Arg>::make_future();\r\n        Future f1 = STD move(f0);\r\n        CHECK_INT(f0.valid(), !unique);\r\n        CHECK_INT(f1.valid(), true);\r\n        Future f2;\r\n        f2 = STD move(f1);\r\n        CHECK_INT(f1.valid(), !unique);\r\n        CHECK_INT(f2.valid(), true);\r\n    }\r\n};\r\n\r\nstatic void test_future() { // test STD future\r\n    test_futures<STD future<int>, int, true>::test_core();\r\n    test_futures<STD future<int&>, int&, true>::test_core();\r\n    test_futures<STD future<void>, void, true>::test_core();\r\n    test_futures<STD future<int>, int, true>::test_move(true);\r\n    test_futures<STD future<int&>, int&, true>::test_move(true);\r\n    test_futures<STD future<void>, void, true>::test_move(true);\r\n}\r\n\r\nstatic void test_shared_future() { // test STD shared_future\r\n    test_futures<STD shared_future<int>, int, false>::test_core();\r\n    test_futures<STD shared_future<int&>, int&, false>::test_core();\r\n    test_futures<STD shared_future<void>, void, false>::test_core();\r\n    test_futures<STD shared_future<int>, int, true>::test_copy(false);\r\n    test_futures<STD shared_future<int&>, int&, true>::test_copy(false);\r\n    test_futures<STD shared_future<void>, void, true>::test_copy(false);\r\n\r\n    STD future<int> f0(future_factory<int>::make_future());\r\n    STD shared_future<int> sf0 = f0.share();\r\n    CHECK(sf0.valid());\r\n\r\n    STD future<int&> f1(future_factory<int&>::make_future());\r\n    STD shared_future<int&> sf1 = f1.share();\r\n    CHECK(sf1.valid());\r\n\r\n    STD future<void> f2(future_factory<void>::make_future());\r\n    STD shared_future<void> sf2 = f2.share();\r\n    CHECK(sf2.valid());\r\n}\r\n\r\nint func(int i) { // simple function for call from packaged_task\r\n    STD this_thread::sleep_for(STD chrono::microseconds(10));\r\n    return i - 1;\r\n}\r\n\r\ntypedef decltype(func) Func_type;\r\n\r\nstatic int func_res = 0;\r\nint& funcr(int i) { // simple function for call from packaged_task\r\n    STD this_thread::sleep_for(STD chrono::microseconds(10));\r\n    func_res = i - 1;\r\n    return func_res;\r\n}\r\ntypedef decltype(funcr) Funcr_type;\r\n\r\nvoid funcv(int i) { // simple function for call from packaged_task\r\n    STD this_thread::sleep_for(STD chrono::microseconds(10));\r\n    func_res = i - 1;\r\n    return;\r\n}\r\ntypedef decltype(funcv) Funcv_type;\r\n\r\nstruct fnobj { // simple function object for call from packaged_task\r\n    int operator()(int i) { // function call operator\r\n        STD this_thread::sleep_for(STD chrono::microseconds(10));\r\n        return i + 1;\r\n    }\r\n    typedef int result_type;\r\n};\r\n\r\nstruct fnobjr { // simple function object for call from packaged_task\r\n    int& operator()(int i) { // function call operator\r\n        STD this_thread::sleep_for(STD chrono::microseconds(10));\r\n        func_res = i + 1;\r\n        return func_res;\r\n    }\r\n    typedef int& result_type;\r\n};\r\n\r\nstruct fnobjv { // simple function object for call from packaged_task\r\n    void operator()(int i) { // function call operator\r\n        STD this_thread::sleep_for(STD chrono::microseconds(10));\r\n        func_res = i + 1;\r\n        return;\r\n    }\r\n    typedef void result_type;\r\n};\r\n\r\nstatic void test_packaged_task_core() { // test core of packaged_task\r\n    STD packaged_task<Func_type> pt0;\r\n    CHECK_INT(pt0.valid(), false);\r\n    bool caught = false;\r\n    try { // try to get future from default-constructed object\r\n        (void) pt0.get_future();\r\n    } catch (const STD future_error& exc) { // should get here, no state\r\n        CHECK_INT(exc.code().value() == nst.value(), true);\r\n        caught = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(caught, true);\r\n\r\n    caught = false;\r\n    try { // try to call function on default-constructed object\r\n        pt0(3);\r\n    } catch (const STD future_error& exc) { // should get here, no state\r\n        CHECK_INT(exc.code().value() == nst.value(), true);\r\n        caught = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(caught, true);\r\n\r\n    STD packaged_task<Func_type> pt1(func);\r\n    CHECK_INT(pt1.valid(), true);\r\n    caught = false;\r\n    try { // call function object\r\n        STD future<int> f1 = pt1.get_future();\r\n        pt1(3);\r\n        CHECK_INT(f1.get(), 2);\r\n    } catch (...) { // shouldn't get here\r\n        caught = true;\r\n    }\r\n    CHECK_INT(caught, false);\r\n\r\n    caught = false;\r\n    try { // try to get future a second time\r\n        (void) pt1.get_future();\r\n    } catch (const STD future_error& exc) { // should get here, future already retrieved\r\n        CHECK_INT(exc.code().value() == rtr.value(), true);\r\n        caught = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(caught, true);\r\n\r\n    caught = false;\r\n    try { // try to call function again\r\n        pt1(3);\r\n    } catch (const STD future_error& exc) { // should get here, future already satisfied\r\n        CHECK_INT(exc.code().value() == sat.value(), true);\r\n        caught = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(caught, true);\r\n\r\n    pt1.reset();\r\n    CHECK_INT(pt1.valid(), true);\r\n\r\n    caught = false;\r\n    try { // try to call after reset\r\n        STD future<int> f1 = pt1.get_future();\r\n        CHECK_INT(f1.valid(), true);\r\n        pt1(3);\r\n        CHECK_INT(f1.get(), 2);\r\n    } catch (...) { // shouldn't get here\r\n        caught = true;\r\n    }\r\n    CHECK_INT(caught, false);\r\n\r\n    fnobj fn;\r\n    STD packaged_task<Func_type> pt2(fn);\r\n    CHECK_INT(pt2.valid(), true);\r\n    caught = false;\r\n    try { // call function object\r\n        STD future<int> f2 = pt2.get_future();\r\n        pt2(3);\r\n        CHECK_INT(f2.get(), 4);\r\n    } catch (...) { // shouldn't get here\r\n        caught = true;\r\n    }\r\n    CHECK_INT(caught, false);\r\n\r\n    caught = false;\r\n    try {\r\n        STD packaged_task<Func_type> pt3;\r\n        pt3(3);\r\n    } catch (...) { // should get here, shared state abandoned\r\n        caught = true;\r\n    }\r\n    CHECK_INT(caught, true);\r\n}\r\n\r\nstatic void test_packaged_task_core_r() { // test core of packaged_task for function returning reference\r\n    STD packaged_task<Funcr_type> pt0;\r\n    CHECK_INT(pt0.valid(), false);\r\n    bool caught = false;\r\n    try { // try to get future from default-constructed object\r\n        (void) pt0.get_future();\r\n    } catch (const STD future_error& exc) { // should get here, no state\r\n        CHECK_INT(exc.code().value() == nst.value(), true);\r\n        caught = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(caught, true);\r\n\r\n    caught = false;\r\n    try { // try to call function on default-constructed object\r\n        pt0(3);\r\n    } catch (const STD future_error& exc) { // should get here, no state\r\n        CHECK_INT(exc.code().value() == nst.value(), true);\r\n        caught = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(caught, true);\r\n\r\n    STD packaged_task<Funcr_type> pt1(funcr);\r\n    CHECK_INT(pt1.valid(), true);\r\n    caught = false;\r\n    try { // call function object\r\n        STD future<int&> f1 = pt1.get_future();\r\n        func_res            = 0;\r\n        pt1(3);\r\n        CHECK_INT(f1.get(), 2);\r\n        CHECK_INT(func_res, 2);\r\n    } catch (...) { // shouldn't get here\r\n        caught = true;\r\n    }\r\n    CHECK_INT(caught, false);\r\n\r\n    caught = false;\r\n    try { // try to get future a second time\r\n        (void) pt1.get_future();\r\n    } catch (const STD future_error& exc) { // should get here, future already retrieved\r\n        CHECK_INT(exc.code().value() == rtr.value(), true);\r\n        caught = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(caught, true);\r\n\r\n    caught = false;\r\n    try { // try to call function again\r\n        pt1(3);\r\n    } catch (const STD future_error& exc) { // should get here, future already satisfied\r\n        CHECK_INT(exc.code().value() == sat.value(), true);\r\n        caught = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(caught, true);\r\n\r\n    pt1.reset();\r\n    CHECK_INT(pt1.valid(), true);\r\n\r\n    caught = false;\r\n    try { // try to call after reset\r\n        STD future<int&> f1 = pt1.get_future();\r\n        CHECK_INT(f1.valid(), true);\r\n        func_res = 0;\r\n        pt1(3);\r\n        CHECK_INT(f1.get(), 2);\r\n        CHECK_INT(func_res, 2);\r\n    } catch (...) { // shouldn't get here\r\n        caught = true;\r\n    }\r\n    CHECK_INT(caught, false);\r\n\r\n    fnobjr fn;\r\n    STD packaged_task<Funcr_type> pt2(fn);\r\n    CHECK_INT(pt2.valid(), true);\r\n    caught = false;\r\n    try { // call function object\r\n        STD future<int&> f2 = pt2.get_future();\r\n        func_res            = 0;\r\n        pt2(3);\r\n        CHECK_INT(f2.get(), 4);\r\n        CHECK_INT(func_res, 4);\r\n    } catch (...) { // shouldn't get here\r\n        caught = true;\r\n    }\r\n    CHECK_INT(caught, false);\r\n\r\n    caught = false;\r\n    try {\r\n        STD packaged_task<Funcr_type> pt3;\r\n        pt3(3);\r\n    } catch (...) { // should get here, shared state abandoned\r\n        caught = true;\r\n    }\r\n    CHECK_INT(caught, true);\r\n}\r\n\r\nstatic void test_packaged_task_core_v() { // test core of packaged_task for function returning void\r\n    STD packaged_task<Funcv_type> pt0;\r\n    CHECK_INT(pt0.valid(), false);\r\n    bool caught = false;\r\n    try { // try to get future from default-constructed object\r\n        (void) pt0.get_future();\r\n    } catch (const STD future_error& exc) { // should get here, no state\r\n        CHECK_INT(exc.code().value() == nst.value(), true);\r\n        caught = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(caught, true);\r\n\r\n    caught = false;\r\n    try { // try to call function on default-constructed object\r\n        pt0(3);\r\n    } catch (const STD future_error& exc) { // should get here, no state\r\n        CHECK_INT(exc.code().value() == nst.value(), true);\r\n        caught = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(caught, true);\r\n\r\n    STD packaged_task<Funcv_type> pt1(funcv);\r\n    CHECK_INT(pt1.valid(), true);\r\n    caught = false;\r\n    try { // call function object\r\n        STD future<void> f1 = pt1.get_future();\r\n        func_res            = 0;\r\n        pt1(3);\r\n        f1.get();\r\n        CHECK_INT(func_res, 2);\r\n    } catch (...) { // shouldn't get here\r\n        caught = true;\r\n    }\r\n    CHECK_INT(caught, false);\r\n\r\n    caught = false;\r\n    try { // try to get future a second time\r\n        (void) pt1.get_future();\r\n    } catch (const STD future_error& exc) { // should get here, future already retrieved\r\n        CHECK_INT(exc.code().value() == rtr.value(), true);\r\n        caught = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(caught, true);\r\n\r\n    caught = false;\r\n    try { // try to call function again\r\n        pt1(3);\r\n    } catch (const STD future_error& exc) { // should get here, future already satisfied\r\n        CHECK_INT(exc.code().value() == sat.value(), true);\r\n        caught = true;\r\n    } catch (...) { // shouldn't get here\r\n    }\r\n    CHECK_INT(caught, true);\r\n\r\n    pt1.reset();\r\n    CHECK_INT(pt1.valid(), true);\r\n\r\n    caught = false;\r\n    try { // try to call after reset\r\n        STD future<void> f1 = pt1.get_future();\r\n        CHECK_INT(f1.valid(), true);\r\n        func_res = 0;\r\n        pt1(3);\r\n        f1.get();\r\n        CHECK_INT(func_res, 2);\r\n    } catch (...) { // shouldn't get here\r\n        caught = true;\r\n    }\r\n    CHECK_INT(caught, false);\r\n\r\n    fnobjv fn;\r\n    STD packaged_task<Funcv_type> pt2(fn);\r\n    CHECK_INT(pt2.valid(), true);\r\n    caught = false;\r\n    try { // call function object\r\n        STD future<void> f2 = pt2.get_future();\r\n        func_res            = 0;\r\n        pt2(3);\r\n        f2.get();\r\n        CHECK_INT(func_res, 4);\r\n    } catch (...) { // shouldn't get here\r\n        caught = true;\r\n    }\r\n    CHECK_INT(caught, false);\r\n\r\n    caught = false;\r\n    try {\r\n        STD packaged_task<Funcv_type> pt3;\r\n        pt3(3);\r\n    } catch (...) { // should get here, shared state abandoned\r\n        caught = true;\r\n    }\r\n    CHECK_INT(caught, true);\r\n\r\n    caught = false;\r\n    STD packaged_task<Funcv_type> pt3(fn);\r\n    try { // try to call after reset, shared state must be abandoned\r\n          // by reset\r\n        STD future<void> f1 = pt3.get_future();\r\n        CHECK_INT(f1.valid(), true);\r\n        pt3.reset();\r\n        f1.get();\r\n    } catch (const STD future_error& exc) { // should get here, shared state abandoned\r\n        CHECK_INT(exc.code().value() == brk.value(), true);\r\n        caught = true;\r\n    }\r\n    CHECK_INT(caught, true);\r\n\r\n    caught = false;\r\n    try { // try to call after reset, shared state must be abandoned\r\n          // by packaged_task destructor\r\n        STD future<void> f1;\r\n        {\r\n            STD packaged_task<Funcv_type> pt4(fn);\r\n            f1 = pt4.get_future();\r\n            CHECK_INT(f1.valid(), true);\r\n        }\r\n        f1.get();\r\n    } catch (const STD future_error& exc) { // should get here, shared state abandoned\r\n        CHECK_INT(exc.code().value() == brk.value(), true);\r\n        caught = true;\r\n    }\r\n    CHECK_INT(caught, true);\r\n}\r\n\r\nstatic void test_packaged_task_allocator() { // test packaged_task with allocator\r\n    typedef STD uses_allocator<STD packaged_task<Func_type>, STD allocator<Func_type>> packaged_task_uses_allocator;\r\n    CHECK_INT(packaged_task_uses_allocator::value, false);\r\n}\r\n\r\nstatic void test_packaged_task() { // do basic tests for packaged_task\r\n    test_packaged_task_core();\r\n    test_packaged_task_core_r();\r\n    test_packaged_task_core_v();\r\n    test_packaged_task_allocator();\r\n}\r\n\r\nstatic void test_async0() { // test function template async with function returning value\r\n    fnobj fn;\r\n    STD future<int> f0 = STD async(STD launch::async, fn, 1);\r\n    f0.wait();\r\n    CHECK_INT(f0.get(), 2);\r\n    STD future<int> f1 = STD async(STD launch::deferred, fn, 3);\r\n    f1.wait();\r\n    CHECK_INT(f1.get(), 4);\r\n    STD future<int> f2 = STD async(STD launch::async | STD launch::deferred, fn, 5);\r\n    f2.wait();\r\n    CHECK_INT(f2.get(), 6);\r\n    STD future<int> f3 = STD async(STD launch::deferred, fn, 7);\r\n    f3.wait();\r\n    CHECK_INT(f3.get(), 8);\r\n    STD future<int> f4 = STD async(fn, 9);\r\n    f4.wait();\r\n    CHECK_INT(f4.get(), 10);\r\n}\r\n\r\nstatic void test_asyncr() { // test function template async with function returning reference\r\n    fnobjr fn;\r\n    func_res            = 0;\r\n    STD future<int&> f0 = STD async(STD launch::async, fn, 1);\r\n    f0.wait();\r\n    CHECK_INT(f0.get(), 2);\r\n    CHECK_INT(func_res, 2);\r\n    STD future<int&> f1 = STD async(STD launch::deferred, fn, 3);\r\n    f1.wait();\r\n    CHECK_INT(f1.get(), 4);\r\n    CHECK_INT(func_res, 4);\r\n    STD future<int&> f2 = STD async(STD launch::async | STD launch::deferred, fn, 5);\r\n    f2.wait();\r\n    CHECK_INT(f2.get(), 6);\r\n    CHECK_INT(func_res, 6);\r\n    STD future<int&> f3 = STD async(STD launch::deferred, fn, 7);\r\n    f3.wait();\r\n    CHECK_INT(f3.get(), 8);\r\n    CHECK_INT(func_res, 8);\r\n    STD future<int&> f4 = STD async(fn, 9);\r\n    f4.wait();\r\n    CHECK_INT(f4.get(), 10);\r\n    CHECK_INT(func_res, 10);\r\n}\r\n\r\nstatic void test_asyncv() { // test function template async with function returning void\r\n    fnobjv fn;\r\n    func_res            = 0;\r\n    STD future<void> f0 = STD async(STD launch::async, fn, 1);\r\n    f0.wait();\r\n    f0.get();\r\n    CHECK_INT(func_res, 2);\r\n    STD future<void> f1 = STD async(STD launch::deferred, fn, 3);\r\n    f1.wait();\r\n    f1.get();\r\n    CHECK_INT(func_res, 4);\r\n    STD future<void> f2 = STD async(STD launch::async | STD launch::deferred, fn, 5);\r\n    f2.wait();\r\n    f2.get();\r\n    CHECK_INT(func_res, 6);\r\n    STD future<void> f3 = STD async(STD launch::deferred, fn, 7);\r\n    f3.wait();\r\n    f3.get();\r\n    CHECK_INT(func_res, 8);\r\n    STD future<void> f4 = STD async(fn, 9);\r\n    f4.wait();\r\n    f4.get();\r\n    CHECK_INT(func_res, 10);\r\n}\r\n\r\nstatic void test_asyncdtor() { // test that futures created with std::async\r\n                               // and std::launch::async policy block in the dtor\r\n    int n = 0;\r\n    {\r\n        STD future<void> f1 = STD async(STD launch::async, [&n] {\r\n            STD this_thread::sleep_for(STD chrono::milliseconds(10));\r\n            n = 1;\r\n        });\r\n    }\r\n    CHECK_INT(n, 1);\r\n}\r\n\r\nstatic void test_async() { // test function async\r\n    test_async0();\r\n    test_asyncr();\r\n    test_asyncv();\r\n    test_asyncdtor();\r\n}\r\n\r\nvoid test_main() { // test header <future>\r\n    test_enums();\r\n    test_error_handling();\r\n    test_future_error();\r\n    test_promise();\r\n    test_future();\r\n    test_shared_future();\r\n    test_packaged_task();\r\n    test_async();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/future1/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\..\\env_minus_pure.lst\r\n"
  },
  {
    "path": "tests/tr1/tests/future1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <future> C++0x header\r\n#define TEST_NAME \"<future> with multiple threads\"\r\n\r\n#include \"tdefs.h\"\r\n#include <condition_variable>\r\n#include <future>\r\n#include <mutex>\r\n#include <thread>\r\n\r\ntemplate <template <class T> class Future, class Ty>\r\nclass future_tester_base { // base class for testing future types with set and get in\r\n                           // separate threads\r\npublic:\r\n    future_tester_base() = default;\r\n\r\n    future_tester_base(const future_tester_base&)            = delete;\r\n    future_tester_base& operator=(const future_tester_base&) = delete;\r\n    virtual ~future_tester_base() {}\r\n\r\n    typedef STD promise<Ty> MyPromise;\r\n    typedef Future<Ty> MyFuture;\r\n    void run_tests() { // run four test variants\r\n        run_test(set_before_get, set_a_value);\r\n        run_test(set_after_get, set_a_value);\r\n        run_test(set_before_get, set_an_exception);\r\n        run_test(set_after_get, set_an_exception);\r\n    }\r\n\r\nprotected:\r\n    MyPromise pr;\r\n    MyFuture fut;\r\n\r\nprivate:\r\n    void run_test(int when, int what) { // run test; when determines order of set and get,\r\n                                        // what determines whether result is a value or an exception\r\n        status = ready;\r\n        STD unique_lock<STD mutex> lock(mtx);\r\n\r\n        pr = MyPromise();\r\n\r\n        if (when == set_after_get) {\r\n            fut = pr.get_future();\r\n        }\r\n\r\n        if (what == set_a_value) {\r\n            STD thread thr0(&future_tester_base::set_value, this);\r\n            thr = STD move(thr0);\r\n        } else if (what == set_an_exception) {\r\n            STD thread thr0(&future_tester_base::set_exception, this);\r\n            thr = STD move(thr0);\r\n        }\r\n\r\n        while (status == ready) {\r\n            cnd.wait(lock);\r\n        }\r\n\r\n        if (when == set_before_get) {\r\n            fut = pr.get_future();\r\n        }\r\n\r\n        if (what == set_a_value) {\r\n            check_value();\r\n        } else if (what == set_an_exception) { // get() should throw exception\r\n            bool thrown = false;\r\n            try { // try to get()\r\n                fut.get();\r\n            } catch (int i) { // catch the exception\r\n                CHECK_INT(i, 3);\r\n                thrown = true;\r\n            }\r\n            CHECK_INT(thrown, true);\r\n        }\r\n        status = done;\r\n        cnd.notify_all();\r\n        thr.join();\r\n    }\r\n    void set_value() { // set a value as the result\r\n        STD unique_lock<STD mutex> lock(mtx);\r\n        do_set_value();\r\n        status = set;\r\n        cnd.notify_all();\r\n    }\r\n    void check_value() { // check the value of the result\r\n        do_check_value();\r\n    }\r\n    virtual void do_set_value()   = 0;\r\n    virtual void do_check_value() = 0;\r\n    void set_exception() { // set an exception as the result\r\n        STD unique_lock<STD mutex> lock(mtx);\r\n        STD exception_ptr ptr = STD make_exception_ptr(3);\r\n        pr.set_exception(ptr);\r\n        status = set;\r\n        cnd.notify_all();\r\n    }\r\n    STD mutex mtx;\r\n    STD condition_variable cnd;\r\n    STD thread thr;\r\n    enum { ready, set, done } status;\r\n    enum { set_before_get, set_after_get };\r\n    enum { set_a_value, set_an_exception };\r\n};\r\n\r\ntemplate <template <class T> class Future>\r\nclass future_value_tester : public future_tester_base<Future, int> { // class for testing Future<T>\r\n    void do_set_value() override { // set the value\r\n        this->pr.set_value(3);\r\n    }\r\n    void do_check_value() override { // check the value\r\n        CHECK_INT(this->fut.get(), 3);\r\n    }\r\n};\r\n\r\ntemplate <template <class T> class Future>\r\nclass future_reference_tester : public future_tester_base<Future, int&> { // class for testing Future<T&>\r\npublic:\r\n    future_reference_tester() : value(0) { // construct\r\n    }\r\n\r\nprivate:\r\n    void do_set_value() override { // set the value\r\n        value = 3;\r\n        this->pr.set_value(value);\r\n    }\r\n    void do_check_value() override { // check the value\r\n        CHECK_INT(this->fut.get(), 3);\r\n    }\r\n    int value;\r\n};\r\n\r\ntemplate <template <class T> class Future>\r\nclass future_void_tester : public future_tester_base<Future, void> { // class for testing Future<void>\r\n    void do_set_value() override { // set the value\r\n        this->pr.set_value();\r\n    }\r\n    void do_check_value() override { // get the value\r\n        this->fut.get(); // do not remove\r\n    }\r\n};\r\n\r\nstatic void test_future() { // run tests on STD future\r\n    future_value_tester<STD future> fval;\r\n    fval.run_tests();\r\n    future_reference_tester<STD future> fref;\r\n    fref.run_tests();\r\n    future_void_tester<STD future> fvoid;\r\n    fvoid.run_tests();\r\n}\r\n\r\nvoid test_main() { // test header <future> with multiple threads\r\n    test_future();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/initializer_list/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <initializer_list> header\r\n#define TEST_NAME \"<initializer_list>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <initializer_list>\r\n#include <stdexcept>\r\n\r\nvoid test_main() { // test header <initializer_list>\r\n    typedef STD initializer_list<char> Ty;\r\n    Ty init0;\r\n    CHECK_INT(init0.size(), 0);\r\n    CHECK_PTR(init0.begin(), init0.end());\r\n\r\n    CHECK_TYPE(Ty::value_type, char);\r\n    CHECK_TYPE(Ty::size_type, CSTD size_t);\r\n    CHECK_TYPE(Ty::const_reference, const char&);\r\n    CHECK_TYPE(Ty::iterator, const char*);\r\n    CHECK_TYPE(Ty::const_iterator, const char*);\r\n    CHECK_TYPE(Ty::reference, char&);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/iomanip/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <iomanip>\r\n#define TEST_NAME \"<iomanip>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <iomanip>\r\n#include <iostream>\r\n#include <sstream>\r\n\r\nstruct Smanip { // store function pointer and argument value\r\n    Smanip(void (*left)(STD ios_base&, char), char val)\r\n        : pfun(left), manarg(val) { // construct from function pointer and argument value\r\n    }\r\n\r\n    void (*pfun)(STD ios_base&, char); // the function pointer\r\n    char manarg; // the argument value\r\n};\r\n\r\nSTD istream& operator>>(\r\n    STD istream& istr, const Smanip& manip) { // extract by calling function with input stream and argument\r\n    (*manip.pfun)(istr, manip.manarg);\r\n    return istr;\r\n}\r\n\r\nSTD ostream& operator<<(\r\n    STD ostream& ostr, const Smanip& manip) { // insert by calling function with output stream and argument\r\n    (*manip.pfun)(ostr, manip.manarg);\r\n    return ostr;\r\n}\r\n\r\nstatic void fltfun(STD ios_base& iostr, char code) { // set fixed/scientific and uppercase flags\r\n    STD ios_base::fmtflags fl;\r\n\r\n    switch (code) {\r\n    case 'f':\r\n        fl = STD ios_base::fixed;\r\n        break;\r\n    case 'e':\r\n        fl = STD ios_base::scientific;\r\n        break;\r\n    case 'E':\r\n        fl = STD ios_base::scientific | STD ios_base::uppercase;\r\n        break;\r\n    case 'G':\r\n        fl = STD ios_base::uppercase;\r\n        break;\r\n    default:\r\n        fl = (STD ios_base::fmtflags) 0;\r\n        break;\r\n    }\r\n\r\n    iostr.setf(fl, STD ios_base::floatfield | STD ios_base::uppercase);\r\n}\r\n\r\nSmanip fpfmt(char code) { // inserter to set floating-point flags\r\n    return Smanip(&fltfun, code);\r\n}\r\n\r\nstatic void intfun(STD ios_base& iostr, char code) { // set dec/hex/oct and uppercase flags\r\n    STD ios_base::fmtflags fl;\r\n\r\n    switch (code) {\r\n    case 'd':\r\n        fl = STD ios_base::dec;\r\n        break;\r\n    case 'o':\r\n        fl = STD ios_base::oct;\r\n        break;\r\n    case 'x':\r\n        fl = STD ios_base::hex;\r\n        break;\r\n    case 'X':\r\n        fl = STD ios_base::hex | STD ios_base::uppercase;\r\n        break;\r\n    default:\r\n        fl = (STD ios_base::fmtflags) 0;\r\n        break;\r\n    }\r\n\r\n    iostr.setf(fl, STD ios_base::basefield | STD ios_base::uppercase);\r\n}\r\n\r\nSmanip intfmt(char code) { // extractor/inserter to set integer flags\r\n    return Smanip(&intfun, code);\r\n}\r\n\r\nvoid test_quoted(const char* in, const char* escaped, char delim = '\"', char escape = '\\\\') { // test quoted\r\n    STD stringstream sbuf;\r\n    sbuf << STD quoted(in, delim, escape);\r\n    CHECK(sbuf.good());\r\n    CHECK_STR(sbuf.str().c_str(), escaped);\r\n\r\n    STD string str;\r\n    sbuf >> STD quoted(str, delim, escape);\r\n    CHECK(sbuf.good());\r\n    CHECK_STR(str.c_str(), in);\r\n}\r\n\r\nvoid test_main() { // test basic workings of iomanip definitions\r\n    STD cin.flags((STD ios_base::fmtflags) 0);\r\n    CHECK_INT(STD cin.flags(), (STD ios_base::fmtflags) 0);\r\n    STD cin >> STD setiosflags(STD ios_base::left | STD ios_base::showpoint);\r\n    CHECK_INT(STD cin.flags(), (STD ios_base::left | STD ios_base::showpoint));\r\n    STD cin >> STD resetiosflags(STD ios_base::showpoint);\r\n    CHECK_INT(STD cin.flags(), STD ios_base::left);\r\n\r\n    STD cin >> STD setbase(8);\r\n    CHECK_INT(STD cin.flags(), STD ios_base::left | STD ios_base::oct);\r\n    STD cin >> STD setbase(10);\r\n    CHECK_INT(STD cin.flags(), STD ios_base::left | STD ios_base::dec);\r\n    STD cin >> STD setbase(16);\r\n    CHECK_INT(STD cin.flags(), STD ios_base::left | STD ios_base::hex);\r\n    STD cin >> STD setbase(-23);\r\n    CHECK_INT(STD cin.flags(), STD ios_base::left);\r\n\r\n    CHECK_INT(STD wcout.fill(), L' ');\r\n    STD wcout << STD setfill(L'*');\r\n    CHECK_INT(STD wcout.fill(), L'*');\r\n\r\n    CHECK_INT(STD cout.fill(), ' ');\r\n    STD cout << STD setfill('*');\r\n    CHECK_INT(STD cout.fill(), '*');\r\n    CHECK_INT(STD cout.precision(), 6);\r\n    STD cout << STD setprecision(17);\r\n    CHECK_INT(STD cout.precision(), 17);\r\n    CHECK_INT(STD cout.width(), 0);\r\n    STD cout << STD setw(-60);\r\n    CHECK_INT(STD cout.width(), -60);\r\n\r\n    // test user-defined instantiations\r\n    STD cout << STD resetiosflags((STD ios_base::fmtflags) ~0) << fpfmt('E');\r\n    CHECK_INT(STD cout.flags(), STD ios_base::scientific | STD ios_base::uppercase);\r\n    STD cout << intfmt('x');\r\n    CHECK_INT(STD cout.flags(), STD ios_base::hex | STD ios_base::scientific);\r\n    STD cin >> STD resetiosflags((STD ios_base::fmtflags) ~0) >> intfmt('X');\r\n    CHECK_INT(STD cin.flags(), STD ios_base::hex | STD ios_base::uppercase);\r\n\r\n    { // test money_get/put\r\n        STD stringstream sbuf;\r\n        sbuf << STD put_money(STD string(\"123\"));\r\n        CHECK_STR(sbuf.str().c_str(), \"123\");\r\n\r\n        STD string ans;\r\n        sbuf >> STD get_money(ans);\r\n        CHECK_STR(ans.c_str(), \"123\");\r\n    }\r\n\r\n    { // test time_get/put\r\n        STD stringstream sbuf;\r\n        CSTD tm tbuf{};\r\n        tbuf.tm_mon = 2;\r\n        sbuf << STD put_time(&tbuf, \"%B\");\r\n        CHECK_STR(sbuf.str().c_str(), \"March\");\r\n\r\n        tbuf.tm_mon = 0;\r\n        sbuf >> STD get_time(&tbuf, \"%B\");\r\n        CHECK_INT(tbuf.tm_mon, 2);\r\n    }\r\n\r\n    { // test quoted\r\n        test_quoted(\"abc\", \"\\\"abc\\\"\");\r\n        test_quoted(\"ab\\\"c\", \"\\\"ab\\\\\\\"c\\\"\");\r\n        test_quoted(\"a\\\"b\\\"c\", \"\\\"a\\\\\\\"b\\\\\\\"c\\\"\");\r\n\r\n        test_quoted(\"abc\", \"|abc|\", '|');\r\n        test_quoted(\"ab|c\", \"|ab@|c|\", '|', '@');\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/ios/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <ios>\r\n#define TEST_NAME \"<ios>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <exception>\r\n#include <ios>\r\n#include <iostream>\r\n#include <limits.h>\r\n#include <string.h>\r\n\r\n// static data\r\nstatic const STD ios_base::fmtflags ffl[] = {STD ios_base::dec, STD ios_base::fixed, STD ios_base::hex,\r\n    STD ios_base::internal, STD ios_base::left, STD ios_base::oct, STD ios_base::right, STD ios_base::scientific,\r\n    STD ios_base::showbase, STD ios_base::showpoint, STD ios_base::showpos, STD ios_base::skipws, STD ios_base::unitbuf,\r\n    STD ios_base::uppercase, STD ios_base::boolalpha, STD ios_base::adjustfield, STD ios_base::basefield,\r\n    STD ios_base::floatfield};\r\n\r\nstatic const STD ios_base::iostate ifl[] = {\r\n    STD ios_base::badbit, STD ios_base::eofbit, STD ios_base::failbit, STD ios_base::goodbit};\r\n\r\nstatic const STD ios_base::openmode ofl[] = {STD ios_base::app, STD ios_base::ate, STD ios_base::binary,\r\n    STD ios_base::in, STD ios_base::out, STD ios_base::trunc};\r\n\r\nstatic const STD ios_base::seekdir sfl[] = {STD ios_base::beg, STD ios_base::cur, STD ios_base::end};\r\n\r\nstatic STD ios_base::Init init_object;\r\n\r\nstruct myios : public STD ios { // makes protected functions public\r\n    myios(STD streambuf* sb = nullptr) : STD ios(sb) { // initialize\r\n    }\r\n\r\n    void move(myios&& other) { // move from other\r\n        STD ios::move(STD move(other));\r\n    }\r\n\r\n    void move(myios& other) { // move from other\r\n        STD ios::move(other);\r\n    }\r\n\r\n    void swap(myios& other) { // swap with other\r\n        STD ios::swap(other);\r\n    }\r\n\r\n    void set_rdbuf(STD streambuf* sb) { // set stream buffer pointer\r\n        STD ios::set_rdbuf(sb);\r\n    }\r\n};\r\n\r\nvoid test_main() { // test basic workings of ios definitions\r\n    STD ios* pi = &STD cin;\r\n    STD ios* po = &STD cout;\r\n    STD ios x(pi->rdbuf());\r\n    STD streamoff* pso = (STD streamoff*) nullptr;\r\n    STD streampos* psp = (STD streampos*) nullptr;\r\n    STD ios_base::failure fail_ex(\"message\");\r\n    STD exception* pex = &fail_ex;\r\n    STD ios_base* pb   = (STD ios_base*) nullptr;\r\n\r\n    setvbuf(stdout, nullptr, _IONBF, 0);\r\n\r\n    STD wios* pwi = &STD wcin;\r\n    STD wios* pwo = &STD wcout;\r\n    STD wios wx(pwi->rdbuf());\r\n\r\n    pb = pwi;\r\n    pb = pwo;\r\n    pb = pb; // to quiet diagnostics\r\n\r\n    pb  = pi;\r\n    pb  = pb;\r\n    pb  = po;\r\n    pso = pso; // to quiet diagnostics\r\n    psp = psp;\r\n\r\n    CHECK(ffl[0] != ffl[1]);\r\n    CHECK(ifl[0] != ifl[1]);\r\n    CHECK(ofl[0] != ofl[1]);\r\n    CHECK(sfl[0] != sfl[1]);\r\n    CHECK(CSTD memcmp(pex->what(), \"message\", 7) == 0);\r\n\r\n    // test fmtflags groups\r\n    CHECK_INT(STD ios_base::left | STD ios_base::right | STD ios_base::internal, STD ios_base::adjustfield);\r\n    CHECK_INT(STD ios_base::dec | STD ios_base::oct | STD ios_base::hex, STD ios_base::basefield);\r\n    CHECK_INT(STD ios_base::scientific | STD ios_base::fixed, STD ios_base::floatfield);\r\n\r\n    // test assignment and control functions\r\n    CHECK(x && true);\r\n    CHECK(!x == 0);\r\n\r\n    CHECK_PTR(x.tie(&STD cerr), nullptr);\r\n    CHECK_PTR(x.tie(), &STD cerr);\r\n\r\n    CHECK_PTR(x.rdbuf(po->rdbuf()), pi->rdbuf());\r\n    CHECK_PTR(x.rdbuf(), po->rdbuf());\r\n\r\n    x.clear();\r\n    CHECK(x.good());\r\n    CHECK_INT(x.rdstate(), STD ios_base::goodbit);\r\n    x.clear(STD ios_base::badbit);\r\n    CHECK(x.bad());\r\n    CHECK_INT(x.rdstate(), STD ios_base::badbit);\r\n    x.setstate(STD ios_base::failbit);\r\n    CHECK(x.fail());\r\n    CHECK(!x.eof());\r\n    x.setstate(STD ios_base::eofbit);\r\n    CHECK_INT(x.rdstate(), STD ios_base::badbit | STD ios_base::eofbit | STD ios_base::failbit);\r\n\r\n    x.clear(STD ios_base::eofbit);\r\n    pi->clear(STD ios_base::failbit);\r\n    CHECK_INT(x.copyfmt(*pi).rdstate(), STD ios_base::eofbit);\r\n    x.exceptions(STD ios_base::badbit);\r\n    CHECK_INT(x.exceptions(), STD ios_base::badbit);\r\n\r\n    {\r\n        myios x1(pi->rdbuf());\r\n        myios x2(po->rdbuf());\r\n        x2.setstate(STD ios_base::eofbit);\r\n        CHECK_INT(x1.rdstate(), 0);\r\n        CHECK_INT(x2.rdstate(), STD ios_base::eofbit);\r\n\r\n        x1.move(STD move(x2));\r\n        CHECK_INT(x1.rdstate(), STD ios_base::eofbit);\r\n        CHECK_INT(x2.rdstate(), 0);\r\n        CHECK_PTR(x1.rdbuf(), nullptr);\r\n        CHECK_PTR(x2.rdbuf(), po->rdbuf());\r\n\r\n        x1.move(x2);\r\n        CHECK_INT(x1.rdstate(), 0);\r\n        CHECK_INT(x2.rdstate(), STD ios_base::eofbit);\r\n        CHECK_PTR(x1.rdbuf(), nullptr);\r\n        CHECK_PTR(x2.rdbuf(), po->rdbuf());\r\n\r\n        x1.move(STD move(x2));\r\n        CHECK_INT(x1.rdstate(), STD ios_base::eofbit);\r\n        CHECK_INT(x2.rdstate(), 0);\r\n        CHECK_PTR(x1.rdbuf(), nullptr);\r\n        CHECK_PTR(x2.rdbuf(), po->rdbuf());\r\n\r\n        x1.set_rdbuf(nullptr);\r\n        CHECK_INT(x1.rdstate(), STD ios_base::eofbit);\r\n        CHECK_PTR(x1.rdbuf(), nullptr);\r\n        x1.set_rdbuf(pi->rdbuf());\r\n        CHECK_INT(x1.rdstate(), STD ios_base::eofbit);\r\n        CHECK_PTR(x1.rdbuf(), pi->rdbuf());\r\n\r\n        x1.swap(x2);\r\n        CHECK_INT(x1.rdstate(), 0);\r\n        CHECK_INT(x2.rdstate(), STD ios_base::eofbit);\r\n        CHECK_PTR(x1.rdbuf(), pi->rdbuf());\r\n        CHECK_PTR(x2.rdbuf(), po->rdbuf());\r\n    }\r\n\r\n    // test format control functions\r\n    CHECK_INT(x.flags(STD ios_base::oct), STD ios_base::skipws | STD ios_base::dec);\r\n    CHECK_INT(x.flags(), STD ios_base::oct);\r\n    CHECK_INT(x.setf(STD ios_base::showbase), STD ios_base::oct);\r\n    CHECK_INT(x.setf(STD ios_base::scientific), STD ios_base::oct | STD ios_base::showbase);\r\n    CHECK_INT(x.setf((STD ios_base::fmtflags) ~0, STD ios_base::unitbuf),\r\n        STD ios_base::oct | STD ios_base::scientific | STD ios_base::showbase);\r\n    x.unsetf(STD ios_base::oct | STD ios_base::showbase);\r\n    CHECK_INT(x.flags(), STD ios_base::scientific | STD ios_base::unitbuf);\r\n    x.setf(STD ios_base::boolalpha);\r\n    CHECK_INT(x.flags(), STD ios_base::boolalpha | STD ios_base::scientific | STD ios_base::unitbuf);\r\n    x.unsetf(STD ios_base::boolalpha);\r\n    CHECK_INT(x.flags(), STD ios_base::scientific | STD ios_base::unitbuf);\r\n\r\n    x.clear(STD ios_base::floatfield);\r\n    x.setf(STD ios_base::scientific | STD ios_base::fixed);\r\n    CHECK_INT(x.flags(), STD ios_base::scientific | STD ios_base::fixed | STD ios_base::unitbuf);\r\n\r\n    CHECK_INT(x.precision(INT_MIN), 6);\r\n    CHECK_INT(x.precision(), INT_MIN);\r\n    CHECK_INT(x.width(INT_MAX), 0);\r\n    CHECK_INT(x.width(), INT_MAX);\r\n    CHECK_INT(x.fill('y'), ' ');\r\n    CHECK_INT(x.fill(), 'y');\r\n\r\n    // test additional storage\r\n    int i = pi->xalloc();\r\n    int j = pi->xalloc();\r\n\r\n    CHECK_INT(i, j - 1);\r\n    CHECK_INT(pi->iword(i), 0);\r\n    CHECK_PTR(pi->pword(j), nullptr);\r\n    pi->iword(i)            = 3;\r\n    pi->pword(j)            = (void*) &STD cout;\r\n    x.copyfmt(*pi).iword(j) = 4;\r\n    CHECK_INT(pi->iword(i), 3);\r\n    CHECK_PTR(pi->pword(i), nullptr);\r\n    CHECK_INT(pi->iword(j), 0);\r\n    CHECK_PTR(pi->pword(j), (void*) &STD cout);\r\n    CHECK_INT(x.iword(i), 3);\r\n    CHECK_PTR(x.pword(i), nullptr);\r\n    CHECK_INT(x.iword(j), 4);\r\n    CHECK_PTR(x.pword(j), (void*) &STD cout);\r\n\r\n    // test manipulators\r\n    pi->unsetf((STD ios_base::fmtflags) ~0);\r\n    STD dec(STD fixed(STD internal(STD showbase(STD showpoint(*pi)))));\r\n    CHECK_INT(pi->flags(), STD ios_base::dec | STD ios_base::fixed | STD ios_base::internal | STD ios_base::showbase\r\n                               | STD ios_base::showpoint);\r\n    po->unsetf((STD ios_base::fmtflags) ~0);\r\n    STD hex(STD left(STD scientific(STD showpos(STD skipws(STD boolalpha(*po))))));\r\n    CHECK_INT(po->flags(), STD ios_base::hex | STD ios_base::left | STD ios_base::scientific | STD ios_base::showpos\r\n                               | STD ios_base::skipws | STD ios_base::boolalpha);\r\n    STD noshowbase(STD noshowpoint(STD noshowpos(STD noskipws(STD noboolalpha(*po)))));\r\n    STD uppercase(STD oct(STD right(*po)));\r\n    CHECK_INT(\r\n        po->flags(), STD ios_base::oct | STD ios_base::right | STD ios_base::scientific | STD ios_base::uppercase);\r\n    STD scientific(STD nouppercase(*po));\r\n    CHECK_INT(po->flags(), STD ios_base::oct | STD ios_base::right | STD ios_base::scientific);\r\n\r\n    STD hexfloat(*po);\r\n    CHECK_INT(po->flags(), STD ios_base::oct | STD ios_base::right | STD ios_base::scientific | STD ios_base::fixed);\r\n\r\n    STD defaultfloat(*po);\r\n    CHECK_INT(po->flags(), STD ios_base::oct | STD ios_base::right);\r\n\r\n    STD hexfloat(*po);\r\n    CHECK_INT(po->flags(), STD ios_base::oct | STD ios_base::right | STD ios_base::scientific | STD ios_base::fixed);\r\n\r\n    STD error_code ec1 = STD make_error_code(STD io_errc::stream);\r\n    CHECK(ec1.value() == (int) STD io_errc::stream);\r\n    CHECK(ec1.category() == STD iostream_category());\r\n\r\n    STD error_condition ec2 = STD make_error_condition(STD io_errc::stream);\r\n    CHECK(ec2.value() == (int) STD io_errc::stream);\r\n    CHECK(ec2.category() == STD iostream_category());\r\n\r\n    STD ios_base::failure fail_ex2((const char*) \"message\", ec1);\r\n    STD system_error* pse = &fail_ex2;\r\n    pse                   = pse; // to quiet diagnostics\r\n\r\n    // test template equivalence\r\n    STD basic_ios<char, STD char_traits<char>>* pbi        = (STD ios*) nullptr;\r\n    STD basic_ios<wchar_t, STD char_traits<wchar_t>>* pwbi = (STD wios*) nullptr;\r\n\r\n    pbi  = pbi; // to quiet diagnostics\r\n    pwbi = pwbi;\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/iosfwd/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <iosfwd>\r\n#define TEST_NAME \"<iosfwd>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <cwchar>\r\n#include <iosfwd>\r\n\r\n#define STDx STD\r\n\r\nvoid test_main() { // test basic workings of iosfwd declarations\r\n    STD ios* p1       = (STD ios*) nullptr;\r\n    STD streambuf* p2 = (STD streambuf*) nullptr;\r\n    STD istream* p3   = (STD istream*) nullptr;\r\n    STD ostream* p4   = (STD ostream*) nullptr;\r\n\r\n    STD stringbuf* p6     = (STD stringbuf*) nullptr;\r\n    STD istringstream* p7 = (STD istringstream*) nullptr;\r\n    STD ostringstream* p8 = (STD ostringstream*) nullptr;\r\n\r\n    STD filebuf* p10  = (STD filebuf*) nullptr;\r\n    STD ifstream* p11 = (STD ifstream*) nullptr;\r\n    STD ofstream* p12 = (STD ofstream*) nullptr;\r\n\r\n    STD streampos* p14 = (STD streampos*) nullptr;\r\n\r\n    p1  = p1; // to quiet diagnostics\r\n    p2  = p2;\r\n    p3  = p3;\r\n    p4  = p4;\r\n    p6  = p6;\r\n    p7  = p7;\r\n    p8  = p8;\r\n    p10 = p10;\r\n    p11 = p11;\r\n    p12 = p12;\r\n    p14 = p14;\r\n\r\n    STD fpos<STDx mbstate_t>* p15 = (STD fpos<STDx mbstate_t>*) nullptr;\r\n\r\n    p15 = p15;\r\n\r\n    STD basic_ios<char>* tp1       = p1;\r\n    STD basic_streambuf<char>* tp2 = p2;\r\n    STD basic_istream<char>* tp3   = p3;\r\n    STD basic_ostream<char>* tp4   = p4;\r\n\r\n    STD basic_stringbuf<char>* tp6     = p6;\r\n    STD basic_istringstream<char>* tp7 = p7;\r\n    STD basic_ostringstream<char>* tp8 = p8;\r\n\r\n    STD basic_filebuf<char>* tp10  = p10;\r\n    STD basic_ifstream<char>* tp11 = p11;\r\n    STD basic_ofstream<char>* tp12 = p12;\r\n\r\n    tp1  = tp1; // to quiet diagnostics\r\n    tp2  = tp2;\r\n    tp3  = tp3;\r\n    tp4  = tp4;\r\n    tp6  = tp6;\r\n    tp7  = tp7;\r\n    tp8  = tp8;\r\n    tp10 = tp10;\r\n    tp11 = tp11;\r\n    tp12 = tp12;\r\n\r\n    STD wios* wp1       = (STD wios*) nullptr;\r\n    STD wstreambuf* wp2 = (STD wstreambuf*) nullptr;\r\n    STD wistream* wp3   = (STD wistream*) nullptr;\r\n    STD wostream* wp4   = (STD wostream*) nullptr;\r\n\r\n    STD wstringbuf* wp6     = (STD wstringbuf*) nullptr;\r\n    STD wistringstream* wp7 = (STD wistringstream*) nullptr;\r\n    STD wostringstream* wp8 = (STD wostringstream*) nullptr;\r\n\r\n    STD wfilebuf* wp10  = (STD wfilebuf*) nullptr;\r\n    STD wifstream* wp11 = (STD wifstream*) nullptr;\r\n    STD wofstream* wp12 = (STD wofstream*) nullptr;\r\n\r\n    STD wstreampos* wp14 = (STD wstreampos*) nullptr;\r\n\r\n    STD basic_ios<wchar_t>* twp1       = wp1;\r\n    STD basic_streambuf<wchar_t>* twp2 = wp2;\r\n    STD basic_istream<wchar_t>* twp3   = wp3;\r\n    STD basic_ostream<wchar_t>* twp4   = wp4;\r\n\r\n    STD basic_stringbuf<wchar_t>* twp6     = wp6;\r\n    STD basic_istringstream<wchar_t>* twp7 = wp7;\r\n    STD basic_ostringstream<wchar_t>* twp8 = wp8;\r\n\r\n    STD basic_filebuf<wchar_t>* twp10  = wp10;\r\n    STD basic_ifstream<wchar_t>* twp11 = wp11;\r\n    STD basic_ofstream<wchar_t>* twp12 = wp12;\r\n\r\n    STD char_traits<char>* tp20         = (STD char_traits<char>*) nullptr;\r\n    STD char_traits<wchar_t>* tp21      = (STD char_traits<wchar_t>*) nullptr;\r\n    STD char_traits<int>* tp22          = (STD char_traits<int>*) nullptr;\r\n    STD allocator<float>* tp23          = (STD allocator<float>*) nullptr;\r\n    STD istreambuf_iterator<char>* tp24 = (STD istreambuf_iterator<char>*) nullptr;\r\n    STD ostreambuf_iterator<char>* tp25 = (STD ostreambuf_iterator<char>*) nullptr;\r\n\r\n    wp14 = wp14; // to quiet diagnostics\r\n\r\n    twp1  = twp1;\r\n    twp2  = twp2;\r\n    twp3  = twp3;\r\n    twp4  = twp4;\r\n    twp6  = twp6;\r\n    twp7  = twp7;\r\n    twp8  = twp8;\r\n    twp10 = twp10;\r\n    twp11 = twp11;\r\n    twp12 = twp12;\r\n\r\n    tp20 = tp20;\r\n    tp21 = tp21;\r\n    tp22 = tp22;\r\n    tp23 = tp23;\r\n    tp24 = tp24;\r\n    tp25 = tp25;\r\n\r\n    STD wiostream* wp5     = (STD wiostream*) nullptr;\r\n    STD wstringstream* wp9 = (STD wstringstream*) nullptr;\r\n    STD wfstream* wp13     = (STD wfstream*) nullptr;\r\n\r\n    STD basic_iostream<wchar_t>* twp5     = wp5;\r\n    STD basic_stringstream<wchar_t>* twp9 = wp9;\r\n    STD basic_fstream<wchar_t>* twp13     = wp13;\r\n\r\n    twp5  = twp5; // to quiet diagnostics\r\n    twp9  = twp9;\r\n    twp13 = twp13;\r\n\r\n    CHECK_MSG(\"<iosfwd> compiles\", 1);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/iostream1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <iostream>\r\n#define TEST_NAME \"<iostream>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <iostream>\r\n\r\nvoid test_main() { // test basic workings of iostream definitions\r\n    CHECK(STD cin.good());\r\n    CHECK_INT(STD cin.exceptions(), STD ios::goodbit);\r\n    CHECK_INT(STD cin.flags(), STD ios::skipws | STD ios::dec);\r\n    CHECK_INT(STD cin.precision(), 6);\r\n    CHECK_INT(STD cin.width(), 0);\r\n    CHECK_INT(STD cin.fill(), ' ');\r\n\r\n    CHECK(STD cout.good());\r\n    CHECK_INT(STD cout.exceptions(), STD ios::goodbit);\r\n    CHECK_INT(STD cout.flags(), STD ios::skipws | STD ios::dec);\r\n    CHECK_INT(STD cout.precision(), 6);\r\n    CHECK_INT(STD cout.width(), 0);\r\n    CHECK_INT(STD cout.fill(), ' ');\r\n\r\n    CHECK(STD cerr.good());\r\n    CHECK_INT(STD cerr.exceptions(), STD ios::goodbit);\r\n    CHECK_INT(STD cerr.flags(), STD ios::skipws | STD ios::dec | STD ios::unitbuf);\r\n    CHECK_INT(STD cerr.precision(), 6);\r\n    CHECK_INT(STD cerr.width(), 0);\r\n    CHECK_INT(STD cerr.fill(), ' ');\r\n\r\n    CHECK(STD clog.good());\r\n    CHECK_INT(STD clog.exceptions(), STD ios::goodbit);\r\n    CHECK_INT(STD clog.flags(), STD ios::skipws | STD ios::dec);\r\n    CHECK_INT(STD clog.precision(), 6);\r\n    CHECK_INT(STD clog.width(), 0);\r\n    CHECK_INT(STD clog.fill(), ' ');\r\n\r\n    if (!terse) { // not terse, try to write on output streams\r\n        STD cout << \"Can write on streams:\" << STD endl;\r\n        STD cout << \"\\tcout\" << STD endl;\r\n        STD cerr << \"\\tcerr\" << STD endl;\r\n        STD clog << \"\\tclog\" << STD endl;\r\n\r\n        CHECK(STD cout.good());\r\n        CHECK(STD cerr.good());\r\n        CHECK(STD clog.good());\r\n    }\r\n\r\n    CHECK(STD wcin.good());\r\n    CHECK_INT(STD wcin.exceptions(), STD ios::goodbit);\r\n    CHECK_INT(STD wcin.flags(), STD ios::skipws | STD ios::dec);\r\n    CHECK_INT(STD wcin.precision(), 6);\r\n    CHECK_INT(STD wcin.width(), 0);\r\n    CHECK_INT(STD wcin.fill(), ' ');\r\n\r\n    CHECK(STD wcout.good());\r\n    CHECK_INT(STD wcout.exceptions(), STD ios::goodbit);\r\n    CHECK_INT(STD wcout.flags(), STD ios::skipws | STD ios::dec);\r\n    CHECK_INT(STD wcout.precision(), 6);\r\n    CHECK_INT(STD wcout.width(), 0);\r\n    CHECK_INT(STD wcout.fill(), ' ');\r\n\r\n    CHECK(STD wcerr.good());\r\n    CHECK_INT(STD wcerr.exceptions(), STD ios::goodbit);\r\n    CHECK_INT(STD wcerr.flags(), STD ios::skipws | STD ios::dec | STD ios::unitbuf);\r\n    CHECK_INT(STD wcerr.precision(), 6);\r\n    CHECK_INT(STD wcerr.width(), 0);\r\n    CHECK_INT(STD wcerr.fill(), ' ');\r\n\r\n    CHECK(STD wclog.good());\r\n    CHECK_INT(STD wclog.exceptions(), STD ios::goodbit);\r\n    CHECK_INT(STD wclog.flags(), STD ios::skipws | STD ios::dec);\r\n    CHECK_INT(STD wclog.precision(), 6);\r\n    CHECK_INT(STD wclog.width(), 0);\r\n    CHECK_INT(STD wclog.fill(), ' ');\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/istream1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <istream>, part 1\r\n#define TEST_NAME \"<istream>, part 1\"\r\n\r\n#include \"tdefs.h\"\r\n#include <istream>\r\n#include <sstream>\r\n\r\n// class Boolx\r\nclass Boolx { // wrap an int\r\npublic:\r\n    Boolx(int v) : val(v) { // construct from value\r\n    }\r\n\r\n    int value() const { // get value\r\n        return val;\r\n    }\r\n\r\n    int value(int v) { // set value\r\n        return val = v;\r\n    }\r\n\r\nprivate:\r\n    int val;\r\n};\r\n\r\nSTD istream& operator>>(STD istream& istr, Boolx& b) { // extract a Boolx\r\n    STD ios_base::iostate state = STD ios_base::goodbit;\r\n    const STD istream::sentry ok(istr, false);\r\n\r\n    if (ok) { // state okay, extract Y or N\r\n        const int c = istr.rdbuf()->sbumpc();\r\n\r\n        if (c == 'Y') {\r\n            b.value(1);\r\n        } else if (c == 'N') {\r\n            b.value(0);\r\n        } else { // report failure\r\n            istr.rdbuf()->sputbackc((char) c);\r\n            state = STD ios::failbit;\r\n        }\r\n    }\r\n    istr.setstate(state);\r\n    return istr;\r\n}\r\n\r\nvoid test_main() { // test basic workings of istream definitions\r\n    static const char input[] = \"s1 s2 s3\"\r\n                                \"   abc\"\r\n                                \" 1 23 -456 +7890   0012 00034 0\"\r\n                                \" -12 34\"\r\n                                \" 12 +3.4567e+0004-8900e-2\"\r\n                                \" 0x8.000p-2\"\r\n                                \" N  Y\"\r\n                                \" false true\"\r\n                                \" 0 1\"\r\n                                \"line of text\\n\"\r\n                                \"rest of stream\";\r\n    STD stringbuf strinput(input);\r\n    STD istream ins(&strinput);\r\n\r\n    STD istream::char_type* pc   = (char*) nullptr;\r\n    STD istream::int_type* pi    = (int*) nullptr;\r\n    STD istream::pos_type* pp    = (STD streampos*) nullptr;\r\n    STD istream::off_type* po    = (STD streamoff*) nullptr;\r\n    STD istream::traits_type* pt = (STD char_traits<char>*) nullptr;\r\n\r\n    pc = pc; // to quiet diagnostics\r\n    pi = pi;\r\n    pp = pp;\r\n    po = po;\r\n    pt = pt;\r\n\r\n    CHECK(ins.good());\r\n    CHECK((ins.flags() & STD ios_base::showbase) == 0);\r\n    ins >> STD showbase;\r\n    CHECK((ins.flags() & STD ios_base::showbase) != 0);\r\n\r\n    {\r\n        typedef STD istringstream Mycont;\r\n        STD stringbuf sbuf;\r\n        STD ostream ostr(&sbuf);\r\n\r\n        Mycont v6;\r\n        v6.tie(&ostr);\r\n        Mycont v7(STD move(v6));\r\n        CHECK_PTR(v6.tie(), nullptr);\r\n        CHECK_PTR(v7.tie(), &ostr);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_PTR(v7.tie(), nullptr);\r\n        CHECK_PTR(v8.tie(), &ostr);\r\n\r\n        v7.swap(v8);\r\n        CHECK_PTR(v7.tie(), &ostr);\r\n        CHECK_PTR(v8.tie(), nullptr);\r\n\r\n        STD swap(v7, v8);\r\n        CHECK_PTR(v7.tie(), nullptr);\r\n        CHECK_PTR(v8.tie(), &ostr);\r\n\r\n        char ch;\r\n        sbuf.str(\"x\");\r\n        STD istream(&sbuf) >> ch;\r\n        CHECK_INT(ch, 'x');\r\n\r\n        signed char sch;\r\n        sbuf.str(\"x\");\r\n        STD istream(&sbuf) >> sch;\r\n        CHECK_INT(sch, 'x');\r\n\r\n        unsigned char uch;\r\n        sbuf.str(\"x\");\r\n        STD istream(&sbuf) >> uch;\r\n        CHECK_INT(uch, 'x');\r\n\r\n        char cha[10] = {0};\r\n        sbuf.str(\"x\");\r\n        STD istream(&sbuf) >> cha;\r\n        CHECK_STR(&cha[0], \"x\");\r\n\r\n        signed char scha[10] = {0};\r\n        sbuf.str(\"x\");\r\n        STD istream(&sbuf) >> scha;\r\n        CHECK_STR((char*) &scha[0], \"x\");\r\n\r\n        unsigned char ucha[10] = {0};\r\n        sbuf.str(\"x\");\r\n        STD istream(&sbuf) >> ucha;\r\n        CHECK_STR((char*) &ucha[0], \"x\");\r\n    }\r\n\r\n    // test string extractors\r\n    char s1[10];\r\n    signed char s2[10];\r\n    unsigned char s3[10];\r\n\r\n    ins >> s1 >> s2 >> s3;\r\n    CHECK_STR(s1, \"s1\");\r\n    CHECK_STR((char*) s2, \"s2\");\r\n    CHECK_STR((char*) s3, \"s3\");\r\n\r\n    // test character extractors\r\n    char ch, sch, uch;\r\n\r\n    ins >> STD noskipws >> STD ws >> ch >> sch >> uch >> STD skipws;\r\n    CHECK_INT(ch, 'a');\r\n    CHECK_INT(sch, 'b');\r\n    CHECK_INT(uch, 'c');\r\n\r\n    // test integer extractors\r\n    int i;\r\n    long lo;\r\n    short sh;\r\n    unsigned int ui;\r\n    unsigned long ulo;\r\n    unsigned short ush;\r\n    void* p;\r\n\r\n    ins >> sh >> STD hex >> ush >> STD oct >> i >> STD dec >> ui;\r\n    CHECK_INT(sh, 1);\r\n    CHECK_INT(ush, 0x23);\r\n    CHECK_INT(i, -0456);\r\n    CHECK_INT(ui, 7890);\r\n\r\n    ins >> lo >> ulo >> p;\r\n    CHECK_INT(lo, 12);\r\n    CHECK_INT(ulo, 34);\r\n    CHECK_PTR(p, nullptr);\r\n\r\n    // test long long extractors\r\n    long long llo;\r\n    unsigned long long ullo;\r\n\r\n    ins >> llo >> ullo;\r\n    CHECK(llo == -12);\r\n    CHECK(ullo == 34);\r\n\r\n    // test floating-point extractors\r\n    double db;\r\n    float fl;\r\n    long double ldb;\r\n\r\n    ins >> fl >> db >> ldb;\r\n    CHECK(fl == 12.0);\r\n    CHECK(db == 34567.0);\r\n    CHECK(ldb == -89.0);\r\n\r\n    ins >> STD hexfloat >> db;\r\n    CHECK(db == 2.0);\r\n\r\n    // test Boolx extractor\r\n    Boolx no(0), yes(1);\r\n\r\n    CHECK_INT(no.value(), 0);\r\n    CHECK_INT(yes.value(), 1);\r\n    ins >> yes >> no;\r\n    CHECK_INT(no.value(), 1);\r\n    CHECK_INT(yes.value(), 0);\r\n\r\n    // test bool extractors\r\n    bool b0 = 1, b1 = 0;\r\n    ins >> STD boolalpha >> b0 >> b1;\r\n    CHECK(!b0);\r\n    CHECK(b1);\r\n    ins >> STD noboolalpha >> b1 >> b0;\r\n    CHECK(b0);\r\n    CHECK(!b1);\r\n\r\n    // test positioning functions\r\n    char buf[20];\r\n    STD streampos pos = ins.tellg();\r\n\r\n    CHECK(pos != (STD streampos) (-1));\r\n    CHECK_PTR(&ins.ignore(), &ins);\r\n    CHECK_INT(ins.peek(), 'i');\r\n    CHECK_PTR(&ins.putback('l'), &ins);\r\n    CHECK_PTR(&ins.read(buf, 4), &ins);\r\n    CHECK_MEM(buf, \"line\", 3);\r\n    CHECK_PTR(&ins.ignore(20, 'f'), &ins);\r\n    CHECK_INT(ins.gcount(), 3);\r\n    CHECK_INT(ins.readsome(buf, 5), 5);\r\n    CHECK_MEM(buf, \" text\", 5);\r\n    CHECK_PTR(&ins.unget(), &ins);\r\n    CHECK_INT(ins.peek(), 't');\r\n    CHECK_PTR(&ins.ignore(100), &ins);\r\n    CHECK_INT(ins.get(), EOF);\r\n    CHECK(!ins.good());\r\n    ins.clear();\r\n\r\n    CHECK_PTR(&ins.seekg(pos), &ins);\r\n    CHECK_PTR(&ins.getline(buf, sizeof(buf), ' '), &ins);\r\n    CHECK_STR(buf, \"line\");\r\n    CHECK_INT(ins.gcount(), 5);\r\n    CHECK_PTR(&ins.seekg(0, STD ios_base::cur), &ins);\r\n    CHECK_PTR(&ins.getline(buf, sizeof(buf)), &ins);\r\n    CHECK_STR(buf, \"of text\");\r\n\r\n    // test streambuf extractor and get functions\r\n    char sbuf[20], ubuf[20];\r\n    STD stringbuf strbuf;\r\n\r\n    ins >> (STD streambuf*) &strbuf;\r\n    ins.rdbuf(&strbuf);\r\n    ins.get(buf, sizeof(buf), 'o');\r\n    CHECK_STR(buf, \"rest \");\r\n    ins.get(sbuf, sizeof(sbuf), 's');\r\n    CHECK_STR(sbuf, \"of \");\r\n    ins.get(ubuf, sizeof(ubuf));\r\n    CHECK_STR(ubuf, \"stream\");\r\n    CHECK(ins.sync() == 0);\r\n\r\n    // test template equivalence\r\n    STD basic_istream<char, STD char_traits<char>>* pbi   = (STD istream*) nullptr;\r\n    STD basic_iostream<char, STD char_traits<char>>* pbio = (STD iostream*) nullptr;\r\n\r\n    pbi  = pbi; // to quiet diagnostics\r\n    pbio = pbio;\r\n\r\n    // test iostream\r\n    STD stringbuf strsb;\r\n    STD iostream iostr(&strsb);\r\n    STD istream* pistr = &iostr;\r\n    STD ostream* postr = &iostr;\r\n\r\n    pistr = pistr; // to quiet diagnostics\r\n    postr = postr;\r\n\r\n    iostr << \"this is a test\\n\";\r\n    iostr.getline(buf, sizeof(buf));\r\n    CHECK_STR(buf, \"this is a test\");\r\n\r\n    {\r\n        typedef STD stringstream Mycont;\r\n        STD ostream ostr(&strsb);\r\n\r\n        Mycont v6;\r\n        v6.tie(&ostr);\r\n        Mycont v7(STD move(v6));\r\n        CHECK_PTR(v6.tie(), nullptr);\r\n        CHECK_PTR(v7.tie(), &ostr);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_PTR(v7.tie(), nullptr);\r\n        CHECK_PTR(v8.tie(), &ostr);\r\n\r\n        v7.swap(v8);\r\n        CHECK_PTR(v7.tie(), &ostr);\r\n        CHECK_PTR(v8.tie(), nullptr);\r\n\r\n        STD swap(v7, v8);\r\n        CHECK_PTR(v7.tie(), nullptr);\r\n        CHECK_PTR(v8.tie(), &ostr);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/istream2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <istream>, part 2\r\n#define TEST_NAME \"<istream>, part 2\"\r\n\r\n#include \"tdefs.h\"\r\n#include <istream>\r\n#include <sstream>\r\n#include <wchar.h>\r\n\r\n// class Boolx\r\nclass Boolx { // wrap an int\r\npublic:\r\n    Boolx(int v) : val(v) { // construct from value\r\n    }\r\n\r\n    int value() const { // get value\r\n        return val;\r\n    }\r\n\r\n    int value(int v) { // set value\r\n        return val = v;\r\n    }\r\n\r\nprivate:\r\n    int val;\r\n};\r\n\r\nSTD wistream& operator>>(STD wistream& istr, Boolx& b) { // extract a Boolx\r\n    STD ios_base::iostate state = STD ios_base::goodbit;\r\n    const STD wistream::sentry ok(istr, false);\r\n\r\n    if (ok) { // state okay, extract Y or N\r\n        const CSTD wint_t c = istr.rdbuf()->sbumpc();\r\n\r\n        if (c == L'Y') {\r\n            b.value(1);\r\n        } else if (c == L'N') {\r\n            b.value(0);\r\n        } else { // report failure\r\n            istr.rdbuf()->sputbackc(c);\r\n            state = STD ios::failbit;\r\n        }\r\n    }\r\n    istr.setstate(state);\r\n    return istr;\r\n}\r\n\r\nvoid test_main() { // test basic workings of istream definitions\r\n    static const wchar_t input[] = L\"s1\"\r\n                                   L\"   a\"\r\n                                   L\" 1 23 -456 +7890   0012 00034 0\"\r\n                                   L\" -12 34\"\r\n                                   L\" 12 +3.4567e+0004-8900e-2\"\r\n                                   L\" 0x8.000p-2\"\r\n                                   L\" N  Y\"\r\n                                   L\" false true\"\r\n                                   L\" 0 1\"\r\n                                   L\"line of text\\n\"\r\n                                   L\"rest of stream\";\r\n    STD wstringbuf strinput(input);\r\n    STD wistream ins(&strinput);\r\n\r\n    STD wistream::char_type* pc   = (wchar_t*) nullptr;\r\n    STD wistream::int_type* pi    = (CSTD wint_t*) nullptr;\r\n    STD wistream::pos_type* pp    = (STD wstreampos*) nullptr;\r\n    STD wistream::off_type* po    = (STD streamoff*) nullptr;\r\n    STD wistream::traits_type* pt = (STD char_traits<wchar_t>*) nullptr;\r\n\r\n    pc = pc; // to quiet diagnostics\r\n    pi = pi;\r\n    pp = pp;\r\n    po = po;\r\n    pt = pt;\r\n\r\n    CHECK(ins.good());\r\n    CHECK((ins.flags() & STD ios_base::showbase) == 0);\r\n    ins >> STD showbase;\r\n    CHECK((ins.flags() & STD ios_base::showbase) != 0);\r\n\r\n    {\r\n        typedef STD wistringstream Mycont;\r\n        STD wstringbuf sbuf;\r\n        STD wostream ostr(&sbuf);\r\n\r\n        Mycont v6;\r\n        v6.tie(&ostr);\r\n        Mycont v7(STD move(v6));\r\n        CHECK_PTR(v6.tie(), nullptr);\r\n        CHECK_PTR(v7.tie(), &ostr);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_PTR(v7.tie(), nullptr);\r\n        CHECK_PTR(v8.tie(), &ostr);\r\n\r\n        v7.swap(v8);\r\n        CHECK_PTR(v7.tie(), &ostr);\r\n        CHECK_PTR(v8.tie(), nullptr);\r\n\r\n        STD swap(v7, v8);\r\n        CHECK_PTR(v7.tie(), nullptr);\r\n        CHECK_PTR(v8.tie(), &ostr);\r\n\r\n        wchar_t ch;\r\n        sbuf.str(L\"x\");\r\n        STD wistream(&sbuf) >> ch;\r\n        CHECK_INT(ch, 'x');\r\n\r\n        wchar_t cha[10] = {0};\r\n        sbuf.str(L\"x\");\r\n        STD wistream(&sbuf) >> cha;\r\n        CHECK_WSTR(&cha[0], L\"x\");\r\n    }\r\n\r\n    // test string extractor\r\n    wchar_t s1[10];\r\n\r\n    ins >> s1;\r\n    CHECK_WSTR(s1, L\"s1\");\r\n\r\n    // test character extractor\r\n    wchar_t ch;\r\n\r\n    ins >> STD noskipws >> STD ws >> ch >> STD skipws;\r\n    CHECK_INT(ch, L'a');\r\n\r\n    // test integer extractors\r\n    int i;\r\n    long lo;\r\n    short sh;\r\n    unsigned int ui;\r\n    unsigned long ulo;\r\n    unsigned short ush;\r\n    void* p;\r\n\r\n    ins >> sh >> STD hex >> ush >> STD oct >> i >> STD dec >> ui;\r\n    CHECK_INT(sh, 1);\r\n    CHECK_INT(ush, 0x23);\r\n    CHECK_INT(i, -0456);\r\n    CHECK_INT(ui, 7890);\r\n\r\n    ins >> lo >> ulo >> p;\r\n    CHECK_INT(lo, 12);\r\n    CHECK_INT(ulo, 34);\r\n    CHECK_PTR(p, nullptr);\r\n\r\n    // test long long extractors\r\n    long long llo;\r\n    unsigned long long ullo;\r\n\r\n    ins >> llo >> ullo;\r\n    CHECK(llo == -12);\r\n    CHECK(ullo == 34);\r\n\r\n    // test floating-point extractors\r\n    double db;\r\n    float fl;\r\n    long double ldb;\r\n\r\n    ins >> fl >> db >> ldb;\r\n    CHECK(fl == 12.0);\r\n    CHECK(db == 34567.0);\r\n    CHECK(ldb == -89.0);\r\n\r\n    ins >> STD hexfloat >> db;\r\n    CHECK(db == 2.0);\r\n\r\n    // test Boolx extractor\r\n    Boolx no(0), yes(1);\r\n\r\n    CHECK_INT(no.value(), 0);\r\n    CHECK_INT(yes.value(), 1);\r\n    ins >> yes >> no;\r\n    CHECK_INT(no.value(), 1);\r\n    CHECK_INT(yes.value(), 0);\r\n\r\n    // test bool extractors\r\n    bool b0 = 1, b1 = 0;\r\n    ins >> STD boolalpha >> b0 >> b1;\r\n    CHECK(!b0);\r\n    CHECK(b1);\r\n    ins >> STD noboolalpha >> b1 >> b0;\r\n    CHECK(b0);\r\n    CHECK(!b1);\r\n\r\n    // test positioning functions\r\n    wchar_t buf[20];\r\n    STD wstreampos pos = ins.tellg();\r\n\r\n    CHECK(pos != (STD wstreampos) (-1));\r\n    CHECK_PTR(&ins.ignore(), &ins);\r\n    CHECK_INT(ins.peek(), L'i');\r\n    CHECK_PTR(&ins.putback(L'l'), &ins);\r\n    CHECK_PTR(&ins.read(buf, 4), &ins);\r\n    CHECK_WMEM(buf, L\"line\", 3);\r\n    CHECK_PTR(&ins.ignore(20, L'f'), &ins);\r\n    CHECK_INT(ins.gcount(), 3);\r\n    CHECK_INT(ins.readsome(buf, 5), 5);\r\n    CHECK_WMEM(buf, L\" text\", 5);\r\n    CHECK_PTR(&ins.unget(), &ins);\r\n    CHECK_INT(ins.peek(), L't');\r\n    CHECK_PTR(&ins.ignore(100), &ins);\r\n    CHECK_INT(ins.get(), WEOF);\r\n    CHECK(!ins.good());\r\n    ins.clear();\r\n\r\n    CHECK_PTR(&ins.seekg(pos), &ins);\r\n    CHECK_PTR(&ins.getline(buf, sizeof(buf) / sizeof(wchar_t), L' '), &ins);\r\n    CHECK_WSTR(buf, L\"line\");\r\n    CHECK_INT(ins.gcount(), 5);\r\n    CHECK_PTR(&ins.seekg(0, STD ios_base::cur), &ins);\r\n    CHECK_PTR(&ins.getline(buf, sizeof(buf) / sizeof(wchar_t)), &ins);\r\n    CHECK_WSTR(buf, L\"of text\");\r\n\r\n    // test streambuf extractor and get functions\r\n    wchar_t sbuf[20], ubuf[20];\r\n    STD wstringbuf strbuf;\r\n\r\n    ins >> (STD wstreambuf*) &strbuf;\r\n    ins.rdbuf(&strbuf);\r\n    ins.get(buf, sizeof(buf) / sizeof(wchar_t), L'o');\r\n    CHECK_WSTR(buf, L\"rest \");\r\n    ins.get(sbuf, sizeof(sbuf) / sizeof(wchar_t), L's');\r\n    CHECK_WSTR(sbuf, L\"of \");\r\n    ins.get(ubuf, sizeof(ubuf) / sizeof(wchar_t));\r\n    CHECK_WSTR(ubuf, L\"stream\");\r\n    CHECK(ins.sync() == 0);\r\n\r\n    // test template equivalence\r\n    STD basic_istream<wchar_t, STD char_traits<wchar_t>>* pbi   = (STD wistream*) nullptr;\r\n    STD basic_iostream<wchar_t, STD char_traits<wchar_t>>* pbio = (STD wiostream*) nullptr;\r\n\r\n    pbi  = pbi; // to quiet diagnostics\r\n    pbio = pbio;\r\n\r\n    // test wiostream\r\n    STD wstringbuf strsb;\r\n    STD wiostream iostr(&strsb);\r\n    STD wistream* pistr = &iostr;\r\n    STD wostream* postr = &iostr;\r\n\r\n    pistr = pistr; // to quiet diagnostics\r\n    postr = postr;\r\n\r\n    iostr << L\"this is a test\\n\";\r\n    iostr.getline(buf, sizeof(buf) / sizeof(wchar_t));\r\n    CHECK_WSTR(buf, L\"this is a test\");\r\n\r\n    {\r\n        typedef STD wstringstream Mycont;\r\n        STD wostream ostr(&strsb);\r\n\r\n        Mycont v6;\r\n        v6.tie(&ostr);\r\n        Mycont v7(STD move(v6));\r\n        CHECK_PTR(v6.tie(), nullptr);\r\n        CHECK_PTR(v7.tie(), &ostr);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_PTR(v7.tie(), nullptr);\r\n        CHECK_PTR(v8.tie(), &ostr);\r\n\r\n        v7.swap(v8);\r\n        CHECK_PTR(v7.tie(), &ostr);\r\n        CHECK_PTR(v8.tie(), nullptr);\r\n\r\n        STD swap(v7, v8);\r\n        CHECK_PTR(v7.tie(), nullptr);\r\n        CHECK_PTR(v8.tie(), &ostr);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/iterator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <iterator>\r\n#define TEST_NAME \"<iterator>\"\r\n\r\n#define _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include <deque>\r\n#include <iterator>\r\n#include <sstream>\r\n#include <stddef.h>\r\n#include <string>\r\n\r\ntypedef STD char_traits<char> Char_traits_char;\r\ntypedef STD basic_istream<char, STD char_traits<char>> Char_istream;\r\ntypedef STD basic_ostream<char, STD char_traits<char>> Char_ostream;\r\ntypedef STD basic_streambuf<char, STD char_traits<char>> Char_streambuf;\r\n\r\n#define MAKE_PTRIT(str) &*strit\r\ntypedef const char* CPtrIt;\r\ntypedef char* PtrIt;\r\n\r\nvoid takes_ran_tag(STD random_access_iterator_tag) { // callable only with random-access iterator\r\n}\r\n\r\nvoid test_prop() { // test iterator properties\r\n    STD random_access_iterator_tag* ran_tag = (STD random_access_iterator_tag*) nullptr;\r\n    STD bidirectional_iterator_tag* bid_tag = ran_tag;\r\n    STD forward_iterator_tag* fwd_tag       = bid_tag;\r\n    STD input_iterator_tag* in_tag          = fwd_tag;\r\n    STD output_iterator_tag* out_tag        = nullptr;\r\n\r\n    in_tag  = in_tag; // to quiet diagnostics\r\n    out_tag = out_tag;\r\n\r\n    typedef STD iterator<STD input_iterator_tag, float, short, float*, float&> Iter;\r\n    float fl                        = 0.0f;\r\n    Iter::iterator_category* it_tag = (STD input_iterator_tag*) nullptr;\r\n    Iter::value_type* it_val        = (float*) nullptr;\r\n    Iter::difference_type* it_dist  = (short*) nullptr;\r\n    Iter::pointer it_ptr            = (float*) nullptr;\r\n    Iter::reference it_ref          = fl;\r\n\r\n    it_tag  = it_tag; // to quiet diagnostics\r\n    it_val  = it_val;\r\n    it_dist = it_dist;\r\n    it_ptr  = it_ptr;\r\n    it_ptr  = &it_ref;\r\n\r\n    typedef STD iterator_traits<Iter> Traits;\r\n    Traits::iterator_category* tr_tag = (STD input_iterator_tag*) nullptr;\r\n    Traits::value_type* tr_val        = (float*) nullptr;\r\n    Traits::difference_type* tr_dist  = (short*) nullptr;\r\n    Traits::pointer tr_ptr            = (float*) nullptr;\r\n    Traits::reference tr_ref          = fl;\r\n\r\n    tr_tag  = tr_tag; // to quiet diagnostics\r\n    tr_val  = tr_val;\r\n    tr_dist = tr_dist;\r\n    tr_ptr  = tr_ptr;\r\n    tr_ptr  = &tr_ref;\r\n\r\n    typedef STD iterator_traits<PtrIt> Ptraits;\r\n    char ch = '\\0';\r\n    takes_ran_tag(Ptraits::iterator_category());\r\n    Ptraits::value_type* ptr_val       = (char*) nullptr;\r\n    Ptraits::difference_type* ptr_dist = (CSTD ptrdiff_t*) nullptr;\r\n    Ptraits::pointer ptr_ptr           = (char*) nullptr;\r\n    Ptraits::reference ptr_ref         = ch;\r\n\r\n    ptr_val  = ptr_val; // to quiet diagnostics\r\n    ptr_dist = ptr_dist;\r\n    ptr_ptr  = ptr_ptr;\r\n    ptr_ptr  = &ptr_ref;\r\n\r\n    typedef STD iterator_traits<CPtrIt> CPtraits;\r\n    takes_ran_tag(CPtraits::iterator_category());\r\n    CPtraits::value_type* cptr_val       = (char*) nullptr;\r\n    CPtraits::difference_type* cptr_dist = (CSTD ptrdiff_t*) nullptr;\r\n    CPtraits::pointer cptr_ptr           = (char*) nullptr;\r\n    CPtraits::reference cptr_ref         = ch;\r\n\r\n    cptr_val  = cptr_val; // to quiet diagnostics\r\n    cptr_dist = cptr_dist;\r\n    cptr_ptr  = cptr_ptr;\r\n    cptr_ptr  = &cptr_ref;\r\n\r\n    const char* pc = \"abcdefg\";\r\n    STD advance(pc, 4);\r\n    CHECK_INT(*pc, 'e');\r\n    STD advance(pc, -1);\r\n    CHECK_INT(*pc, 'd');\r\n    CHECK_INT(STD distance(pc, pc + 3), 3);\r\n\r\n    const char* pc2 = \"abcdefg\";\r\n    CHECK_INT(*STD next(pc2), 'b');\r\n    pc2 = STD next(pc2, 3);\r\n    CHECK_INT(*pc2, 'd');\r\n    CHECK_INT(*STD prev(pc2), 'c');\r\n    CHECK_INT(*STD prev(pc2, 2), 'b');\r\n}\r\n\r\ntypedef STD reverse_iterator<PtrIt> RevIt;\r\n\r\nclass MyrevIt : public RevIt {\r\npublic:\r\n    MyrevIt(RevIt::iterator_type p) : RevIt(p) { // construct from iterator p\r\n    }\r\n\r\n    RevIt::iterator_type get_current() const { // get value\r\n        return current;\r\n    }\r\n};\r\n\r\nvoid test_revit() { // test reverse_iterator\r\n    const char abcdefg[] = \"abcdefg\";\r\n    STD deque<char> str(&abcdefg[0], &abcdefg[7]);\r\n    STD deque<char>::iterator strit = str.begin() + 3;\r\n    PtrIt pcit                      = MAKE_PTRIT(strit);\r\n    RevIt::iterator_type* p_iter    = (PtrIt*) nullptr;\r\n    RevIt rit0, rit(pcit);\r\n    (void) rit0;\r\n\r\n    p_iter = p_iter; // to quiet diagnostics\r\n\r\n    CHECK_PTR(&*rit.base(), &*pcit);\r\n    CHECK_INT(*rit, 'c');\r\n    CHECK_INT(*++rit, 'b');\r\n    CHECK_INT(*rit++, 'b');\r\n    CHECK_INT(*rit, 'a');\r\n    CHECK_INT(*--rit, 'b');\r\n    CHECK_INT(*rit--, 'b');\r\n    CHECK_INT(*rit, 'c');\r\n    CHECK_INT(*(rit += 2), 'a');\r\n    CHECK_INT(*(rit -= 2), 'c');\r\n    CHECK_INT(*(rit + 2), 'a');\r\n    CHECK_INT(*rit, 'c');\r\n    CHECK_INT(*(rit - 2), 'e');\r\n    CHECK_INT(*rit, 'c');\r\n    CHECK_INT(rit[2], 'a');\r\n    CHECK(rit == rit);\r\n    CHECK(!(rit != rit));\r\n    CHECK(!(rit < rit));\r\n    CHECK(rit < rit + 1);\r\n    CHECK(!(rit > rit));\r\n    CHECK(rit <= rit);\r\n    CHECK(rit >= rit);\r\n    CHECK_INT((rit + 2) - rit, 2);\r\n\r\n    MyrevIt myrit(pcit);\r\n    CHECK(myrit.get_current() == pcit);\r\n}\r\n\r\nvoid test_movit() { // test move_iterator\r\n    typedef STD move_iterator<PtrIt> MovIt;\r\n\r\n    STD string str(\"abcde\");\r\n    STD string::iterator strit   = str.begin() + 2;\r\n    PtrIt pcit                   = MAKE_PTRIT(strit);\r\n    MovIt::iterator_type* p_iter = (PtrIt*) nullptr;\r\n    MovIt mit0, mit(pcit);\r\n    (void) mit0;\r\n\r\n    p_iter = p_iter; // to quiet diagnostics\r\n\r\n    CHECK_PTR(&*mit.base(), &*pcit);\r\n    CHECK_INT(*mit, 'c');\r\n    CHECK_INT(*++mit, 'd');\r\n    CHECK_INT(*mit++, 'd');\r\n    CHECK_INT(*mit, 'e');\r\n    CHECK_INT(*--mit, 'd');\r\n    CHECK_INT(*mit--, 'd');\r\n    CHECK_INT(*mit, 'c');\r\n    CHECK_INT(*(mit += 2), 'e');\r\n    CHECK_INT(*(mit -= 2), 'c');\r\n    CHECK_INT(*(mit + 2), 'e');\r\n    CHECK_INT(*mit, 'c');\r\n    CHECK_INT(*(mit - 2), 'a');\r\n    CHECK_INT(*mit, 'c');\r\n    CHECK_INT(mit[2], 'e');\r\n    CHECK(mit == mit);\r\n    CHECK(!(mit != mit));\r\n    CHECK(!(mit < mit));\r\n    CHECK(mit < mit + 1);\r\n    CHECK(!(mit > mit));\r\n    CHECK(mit <= mit);\r\n    CHECK(mit >= mit);\r\n    CHECK_INT((mit + 2) - mit, 2);\r\n\r\n    MovIt mymit(pcit);\r\n    CHECK(mymit.base() == pcit);\r\n\r\n    Movable_int mi1(3);\r\n    Movable_int mi2 = *STD make_move_iterator(&mi1);\r\n    CHECK_INT(mi1.val, -1);\r\n    CHECK_INT(mi2.val, 3);\r\n}\r\n\r\n// test insertion iterators\r\ntypedef STD deque<char> Cont;\r\ntypedef STD back_insert_iterator<Cont> BackIt;\r\ntypedef STD front_insert_iterator<Cont> FrontIt;\r\ntypedef STD insert_iterator<Cont> InsIt;\r\n\r\nclass MybackIt : public BackIt {\r\npublic:\r\n    MybackIt(BackIt::container_type& c) : BackIt(c) { // construct from container\r\n    }\r\n\r\n    BackIt::container_type* get_container() const { // get pointer to container\r\n        return container;\r\n    }\r\n};\r\n\r\nclass MyfrontIt : public FrontIt {\r\npublic:\r\n    MyfrontIt(FrontIt::container_type& c) : FrontIt(c) { // construct from container\r\n    }\r\n\r\n    FrontIt::container_type* get_container() const { // get pointer to container\r\n        return container;\r\n    }\r\n};\r\n\r\nclass MyinsIt : public InsIt {\r\npublic:\r\n    MyinsIt(InsIt::container_type& c, Cont::iterator it) : InsIt(c, it) { // construct from container and iterator\r\n    }\r\n\r\n    InsIt::container_type* get_container() const { // get pointer to container\r\n        return container;\r\n    }\r\n\r\n    Cont::iterator get_iterator() const { // return iterator\r\n        return iter;\r\n    }\r\n};\r\n\r\nvoid test_inserts() { // test insertion iterators\r\n    Cont c0;\r\n    BackIt::container_type* pbi_cont = (Cont*) nullptr;\r\n    BackIt::value_type* pbi_val      = (char*) nullptr;\r\n    BackIt bit(c0);\r\n\r\n    pbi_cont = pbi_cont; // to quiet diagnostics\r\n    pbi_val  = pbi_val;\r\n\r\n    *bit   = 'a', ++bit;\r\n    *bit++ = 'b';\r\n    CHECK_INT(c0[0], 'a');\r\n    CHECK_INT(c0[1], 'b');\r\n\r\n    MybackIt mybkit(c0);\r\n    CHECK_PTR(mybkit.get_container(), &c0);\r\n    *STD back_inserter(c0)++ = 'x';\r\n    CHECK_INT(c0[2], 'x');\r\n\r\n    {\r\n        typedef STD deque<Movable_int> Mycont2;\r\n        typedef STD back_insert_iterator<Mycont2> MyBackIt2;\r\n        Mycont2 c1;\r\n        MyBackIt2 bi1(c1);\r\n        Movable_int mi1(3);\r\n        *bi1 = STD move(mi1);\r\n        CHECK_INT(mi1.val, -1);\r\n        CHECK_INT(c1[0].val, 3);\r\n    }\r\n\r\n    FrontIt::container_type* pfi_cont = (Cont*) nullptr;\r\n    FrontIt::value_type* pfi_val      = (char*) nullptr;\r\n    FrontIt fit(c0);\r\n\r\n    pfi_cont = pfi_cont; // to quiet diagnostics\r\n    pfi_val  = pfi_val;\r\n\r\n    *fit   = 'c', ++fit;\r\n    *fit++ = 'd';\r\n    CHECK_INT(c0[0], 'd');\r\n    CHECK_INT(c0[1], 'c');\r\n\r\n    MyfrontIt myfrit(c0);\r\n    CHECK_PTR(myfrit.get_container(), &c0);\r\n    *STD front_inserter(c0)++ = 'y';\r\n    CHECK_INT(c0[0], 'y');\r\n\r\n    {\r\n        typedef STD deque<Movable_int> Mycont2;\r\n        typedef STD front_insert_iterator<Mycont2> MyFrontIt2;\r\n        Mycont2 c1;\r\n        MyFrontIt2 bi1(c1);\r\n        Movable_int mi1(3);\r\n        *bi1 = STD move(mi1);\r\n        CHECK_INT(mi1.val, -1);\r\n        CHECK_INT(c1[0].val, 3);\r\n    }\r\n\r\n    InsIt::container_type* pii_cont = (Cont*) nullptr;\r\n    InsIt::value_type* pii_val      = (char*) nullptr;\r\n    InsIt iit(c0, c0.begin());\r\n\r\n    pii_cont = pii_cont; // to quiet diagnostics\r\n    pii_val  = pii_val;\r\n\r\n    *iit   = 'e', ++iit;\r\n    *iit++ = 'f';\r\n    CHECK_INT(c0[0], 'e');\r\n    CHECK_INT(c0[1], 'f');\r\n\r\n    MyinsIt myinsit(c0, c0.begin());\r\n    CHECK_PTR(myinsit.get_container(), &c0);\r\n    CHECK(myinsit.get_iterator() == c0.begin());\r\n    *STD inserter(c0, c0.begin())++ = 'z';\r\n    CHECK_INT(c0[0], 'z');\r\n\r\n    {\r\n        typedef STD deque<Movable_int> Mycont2;\r\n        typedef STD insert_iterator<Mycont2> MyBackIt2;\r\n        Mycont2 c1;\r\n        MyBackIt2 bi1(c1, c1.begin());\r\n        Movable_int mi1(3);\r\n        *bi1 = STD move(mi1);\r\n        CHECK_INT(mi1.val, -1);\r\n        CHECK_INT(c1[0].val, 3);\r\n    }\r\n}\r\n\r\nvoid test_istreamit() { // test istream_iterator\r\n    STD istringstream istr(\"0 1 2 3\");\r\n    typedef STD istream_iterator<int, char, Char_traits_char, CSTD ptrdiff_t> IstrIt;\r\n    IstrIt::char_type* p_char       = (char*) nullptr;\r\n    IstrIt::traits_type* p_traits   = (Char_traits_char*) nullptr;\r\n    IstrIt::istream_type* p_istream = (STD istream*) nullptr;\r\n    IstrIt iit0, iit(istr);\r\n    int n;\r\n\r\n    p_char    = p_char; // to quiet diagnostics\r\n    p_traits  = p_traits;\r\n    p_istream = p_istream;\r\n\r\n    for (n = 0; n < 5 && iit != iit0; ++n) {\r\n        CHECK_INT(*iit++, n);\r\n    }\r\n    CHECK(!(iit != iit0));\r\n    CHECK_INT(n, 4);\r\n}\r\n\r\nvoid test_ostreamit() { // test ostream_iterator\r\n    STD ostringstream ostr0, ostr;\r\n    typedef STD ostream_iterator<int, char, Char_traits_char> OstrIt;\r\n    OstrIt::value_type* p_val       = (int*) nullptr;\r\n    OstrIt::char_type* p_char       = (char*) nullptr;\r\n    OstrIt::traits_type* p_traits   = (Char_traits_char*) nullptr;\r\n    OstrIt::ostream_type* p_ostream = (Char_ostream*) nullptr;\r\n    OstrIt oit0(ostr0), oit(ostr, \"||\");\r\n\r\n    p_val     = p_val; // to quiet diagnostics\r\n    p_char    = p_char;\r\n    p_traits  = p_traits;\r\n    p_ostream = p_ostream;\r\n\r\n    *oit0   = 1, ++oit0;\r\n    *oit0++ = 2;\r\n    CHECK_STR(ostr0.str().c_str(), \"12\");\r\n\r\n    *oit   = 1, ++oit;\r\n    *oit++ = 2;\r\n    CHECK_STR(ostr.str().c_str(), \"1||2||\");\r\n}\r\n\r\nvoid test_istrbufit() { // test istreambuf_iterator\r\n    STD istringstream istr(\"0123\"), istr1(\"\");\r\n    typedef STD istreambuf_iterator<char, Char_traits_char> IsbIt;\r\n    IsbIt::char_type* p_char           = (char*) nullptr;\r\n    IsbIt::traits_type* p_traits       = (Char_traits_char*) nullptr;\r\n    IsbIt::int_type* p_int             = (int*) nullptr;\r\n    IsbIt::streambuf_type* p_streambuf = (Char_streambuf*) nullptr;\r\n    IsbIt::istream_type* p_istream     = (Char_istream*) nullptr;\r\n    IsbIt iit0, iit(istr), iit1(istr1.rdbuf());\r\n\r\n    p_char      = p_char; // to quiet diagnostics\r\n    p_traits    = p_traits;\r\n    p_int       = p_int;\r\n    p_streambuf = p_streambuf;\r\n    p_istream   = p_istream;\r\n\r\n    int n;\r\n    for (n = 0; n < 5 && iit != iit0; ++n) {\r\n        CHECK_INT(*iit++, n + '0');\r\n    }\r\n    CHECK(!(iit != iit0));\r\n    CHECK_INT(n, 4);\r\n    CHECK(iit0.equal(iit1));\r\n}\r\n\r\nvoid test_ostrbufit() { // test ostreambuf_iterator\r\n    STD ostringstream ostr;\r\n    typedef STD ostreambuf_iterator<char, Char_traits_char> OsbIt;\r\n    OsbIt::char_type* p_char           = (char*) nullptr;\r\n    OsbIt::traits_type* p_traits       = (Char_traits_char*) nullptr;\r\n    OsbIt::streambuf_type* p_streambuf = (Char_streambuf*) nullptr;\r\n    OsbIt::ostream_type* p_ostream     = (Char_ostream*) nullptr;\r\n    OsbIt oit0((OsbIt::streambuf_type*) nullptr), oit(ostr);\r\n\r\n    p_char      = p_char; // to quiet diagnostics\r\n    p_traits    = p_traits;\r\n    p_streambuf = p_streambuf;\r\n    p_ostream   = p_ostream;\r\n\r\n    *oit0++ = 'x';\r\n    CHECK(oit0.failed());\r\n\r\n    *oit   = '1', ++oit;\r\n    *oit++ = '2';\r\n    CHECK_STR(ostr.str().c_str(), \"12\");\r\n    CHECK(!oit.failed());\r\n}\r\n\r\nvoid test_begin_end() { // test begin/end\r\n    int arr[] = {1, 2, 3};\r\n    CHECK_PTR(STD begin(arr) + 3, STD end(arr));\r\n    CHECK_INT(*STD begin(arr), 1);\r\n\r\n    CHECK_PTR(STD cbegin(arr) + 3, STD end(arr));\r\n    CHECK_INT(*STD cbegin(arr), 1);\r\n\r\n    STD deque<int> c0;\r\n    c0.push_back(1);\r\n    CHECK(STD begin(c0) + 1 == STD end(c0));\r\n    CHECK_INT(*STD begin(c0), 1);\r\n\r\n    CHECK(STD cbegin(c0) + 1 == STD cend(c0));\r\n    CHECK_INT(*STD cbegin(c0), 1);\r\n}\r\n\r\nvoid test_size_data() { // test size/empty/data\r\n    int arr[] = {1, 2, 3};\r\n    CHECK_INT(STD size(arr), 3);\r\n    CHECK(!STD empty(arr));\r\n    CHECK_PTR(STD data(arr), &arr[0]);\r\n    CHECK_INT(*STD begin(arr), 1);\r\n\r\n    STD string c0(\"xyz\");\r\n    CHECK_INT(STD size(c0), 3);\r\n    CHECK(!STD empty(c0));\r\n    CHECK_PTR(STD data(c0), c0.data());\r\n\r\n    STD initializer_list<char> ilist{c0[0], c0[1], c0[2]};\r\n    CHECK_INT(STD size(ilist), 3);\r\n    CHECK_PTR(STD data(ilist), ilist.begin());\r\n}\r\n\r\nvoid test_main() { // test basic properties of iterator definitions\r\n    test_prop();\r\n    test_revit();\r\n    test_inserts();\r\n    test_istreamit();\r\n    test_ostreamit();\r\n    test_istrbufit();\r\n    test_ostrbufit();\r\n    test_movit();\r\n    test_begin_end();\r\n    test_size_data();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/limits/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <limits>\r\n#define TEST_NAME \"<limits>\"\r\n\r\n#define _SILENCE_CXX23_DENORM_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include <float.h>\r\n#include <limits.h>\r\n#include <limits>\r\n#include <wchar.h>\r\n\r\nstruct Mytype { // wrap an int\r\n    Mytype(int valarg = 0) : val(valarg) { // construct from integer\r\n    }\r\n\r\n    bool operator==(const Mytype& right) const { // compare with right\r\n        return val == right.val;\r\n    }\r\n\r\n    int val;\r\n};\r\n\r\nvoid test_main() { // test basic workings of limits definitions\r\n    static const STD float_denorm_style fds[] = {STD denorm_indeterminate, STD denorm_absent, STD denorm_present};\r\n    static const STD float_round_style frs[]  = {STD round_indeterminate, STD round_toward_zero, STD round_to_nearest,\r\n         STD round_toward_infinity, STD round_toward_neg_infinity};\r\n    int i, j, ok;\r\n\r\n    for (ok = 1, i = sizeof(fds) / sizeof(fds[0]); 0 < i;) {\r\n        for (j = --i; 0 < j;) { // test an (i, j) pair\r\n            int testno = i * 0x100 + j;\r\n            ok         = CHECK0(ok, testno, fds[i] != fds[--j]);\r\n        }\r\n    }\r\n    CHECK_MSG(\"float_denorm_style values are distinct\", ok);\r\n\r\n    for (ok = 1, i = sizeof(frs) / sizeof(frs[0]); 0 < i;) {\r\n        for (j = --i; 0 < j;) { // test an (i, j) pair\r\n            int testno = i * 0x100 + j;\r\n            ok         = CHECK0(ok, testno, frs[i] != frs[--j]);\r\n        }\r\n    }\r\n    CHECK_MSG(\"float_round_style values are distinct\", ok);\r\n\r\n    { // check limits template\r\n        typedef STD numeric_limits<Mytype> Lim;\r\n        CHECK(!Lim::is_specialized);\r\n        CHECK(!Lim::is_signed);\r\n        CHECK(!Lim::is_integer);\r\n        CHECK(!Lim::is_exact);\r\n        CHECK(!Lim::is_bounded);\r\n        CHECK(!Lim::is_modulo);\r\n\r\n        CHECK(Lim::min() == Mytype(0));\r\n        CHECK(Lim::max() == Mytype(0));\r\n        CHECK(Lim::lowest() == Mytype(0));\r\n\r\n        CHECK_INT(Lim::digits, 0);\r\n        CHECK_INT(Lim::digits10, 0);\r\n        CHECK_INT(Lim::max_digits10, 0);\r\n        CHECK_INT(Lim::radix, 0);\r\n\r\n        CHECK(!Lim::has_infinity);\r\n        CHECK(!Lim::has_quiet_NaN);\r\n        CHECK(!Lim::has_signaling_NaN);\r\n        CHECK(!Lim::has_denorm_loss);\r\n        CHECK(!Lim::is_iec559);\r\n\r\n        CHECK(Lim::epsilon() == Mytype(0));\r\n        CHECK(Lim::round_error() == Mytype(0));\r\n        CHECK(Lim::infinity() == Mytype(0));\r\n        CHECK(Lim::quiet_NaN() == Mytype(0));\r\n        CHECK(Lim::signaling_NaN() == Mytype(0));\r\n        CHECK(Lim::denorm_min() == Mytype(0));\r\n\r\n        CHECK_INT(Lim::min_exponent, 0);\r\n        CHECK_INT(Lim::min_exponent10, 0);\r\n        CHECK_INT(Lim::max_exponent, 0);\r\n        CHECK_INT(Lim::max_exponent10, 0);\r\n\r\n        CHECK_INT(Lim::has_denorm, STD denorm_absent);\r\n        CHECK_INT(Lim::round_style, STD round_toward_zero);\r\n    }\r\n\r\n    { // check limits<bool>\r\n        typedef STD numeric_limits<bool> Lim;\r\n        CHECK(Lim::is_specialized);\r\n        CHECK(!Lim::is_signed);\r\n        CHECK(Lim::is_integer);\r\n        CHECK(Lim::is_exact);\r\n        CHECK(Lim::is_bounded);\r\n        CHECK(!Lim::is_modulo);\r\n\r\n        CHECK_INT(Lim::min(), false);\r\n        CHECK_INT(Lim::max(), true);\r\n        CHECK(Lim::lowest() == Lim::min());\r\n\r\n        CHECK_INT(Lim::digits, 1);\r\n        CHECK_INT(Lim::digits10, 0);\r\n        CHECK_INT(Lim::max_digits10, 0);\r\n        CHECK_INT(Lim::radix, 2);\r\n    }\r\n\r\n    { // check limits<char>\r\n        typedef STD numeric_limits<char> Lim;\r\n        CHECK(Lim::is_specialized);\r\n        CHECK_INT(Lim::is_signed, (CHAR_MIN != 0));\r\n        CHECK(Lim::is_integer);\r\n        CHECK(Lim::is_exact);\r\n        CHECK(Lim::is_bounded);\r\n        CHECK_INT(Lim::is_modulo, (CHAR_MIN == 0));\r\n\r\n        CHECK_INT(Lim::min(), CHAR_MIN);\r\n        CHECK_INT(Lim::max(), CHAR_MAX);\r\n        CHECK(Lim::lowest() == Lim::min());\r\n\r\n        CHECK_INT(Lim::digits, CHAR_BIT * sizeof(char) - (CHAR_MIN != 0 ? 1 : 0));\r\n        CHECK_INT(Lim::digits10, (CHAR_BIT * sizeof(char) - (CHAR_MIN != 0 ? 1 : 0)) * 301L / 1000);\r\n        CHECK_INT(Lim::max_digits10, 0);\r\n        CHECK_INT(Lim::radix, 2);\r\n    }\r\n\r\n    { // check limits<signed char>\r\n        typedef STD numeric_limits<signed char> Lim;\r\n        CHECK(Lim::is_specialized);\r\n        CHECK(Lim::is_signed);\r\n        CHECK(Lim::is_integer);\r\n        CHECK(Lim::is_exact);\r\n        CHECK(Lim::is_bounded);\r\n        CHECK(!Lim::is_modulo);\r\n\r\n        CHECK_INT(Lim::min(), SCHAR_MIN);\r\n        CHECK_INT(Lim::max(), SCHAR_MAX);\r\n        CHECK(Lim::lowest() == Lim::min());\r\n\r\n        CHECK_INT(Lim::digits, CHAR_BIT * sizeof(char) - 1);\r\n        CHECK_INT(Lim::digits10, (CHAR_BIT * sizeof(char) - 1) * 301L / 1000);\r\n        CHECK_INT(Lim::max_digits10, 0);\r\n        CHECK_INT(Lim::radix, 2);\r\n    }\r\n\r\n    { // check limits<unsigned char>\r\n        typedef STD numeric_limits<unsigned char> Lim;\r\n        CHECK(Lim::is_specialized);\r\n        CHECK(!Lim::is_signed);\r\n        CHECK(Lim::is_integer);\r\n        CHECK(Lim::is_exact);\r\n        CHECK(Lim::is_bounded);\r\n        CHECK(Lim::is_modulo);\r\n\r\n        CHECK_INT(Lim::min(), 0);\r\n        CHECK_INT(Lim::max(), UCHAR_MAX);\r\n        CHECK(Lim::lowest() == Lim::min());\r\n\r\n        CHECK_INT(Lim::digits, CHAR_BIT * sizeof(char));\r\n        CHECK_INT(Lim::digits10, CHAR_BIT * sizeof(char) * 301L / 1000);\r\n        CHECK_INT(Lim::max_digits10, 0);\r\n        CHECK_INT(Lim::radix, 2);\r\n    }\r\n\r\n    { // check limits<wchar_t>\r\n        typedef STD numeric_limits<wchar_t> Lim;\r\n        CHECK(Lim::is_specialized);\r\n        CHECK_INT(Lim::is_signed, (WCHAR_MIN != 0));\r\n        CHECK(Lim::is_integer);\r\n        CHECK(Lim::is_exact);\r\n        CHECK(Lim::is_bounded);\r\n        CHECK(Lim::is_modulo);\r\n\r\n        CHECK_INT(Lim::min(), WCHAR_MIN);\r\n        CHECK_INT(Lim::max(), WCHAR_MAX);\r\n        CHECK(Lim::lowest() == Lim::min());\r\n\r\n        CHECK_INT(Lim::digits, CHAR_BIT * sizeof(wchar_t) - (WCHAR_MIN != 0 ? 1 : 0));\r\n        CHECK_INT(Lim::digits10, (CHAR_BIT * sizeof(wchar_t) - (WCHAR_MIN != 0 ? 1 : 0)) * 301L / 1000);\r\n        CHECK_INT(Lim::max_digits10, 0);\r\n        CHECK_INT(Lim::radix, 2);\r\n    }\r\n\r\n    { // check limits<signed short>\r\n        typedef STD numeric_limits<signed short> Lim;\r\n        CHECK(Lim::is_specialized);\r\n        CHECK(Lim::is_signed);\r\n        CHECK(Lim::is_integer);\r\n        CHECK(Lim::is_exact);\r\n        CHECK(Lim::is_bounded);\r\n        CHECK(!Lim::is_modulo);\r\n\r\n        CHECK_INT(Lim::min(), SHRT_MIN);\r\n        CHECK_INT(Lim::max(), SHRT_MAX);\r\n        CHECK(Lim::lowest() == Lim::min());\r\n\r\n        CHECK_INT(Lim::digits, CHAR_BIT * sizeof(short) - 1);\r\n        CHECK_INT(Lim::digits10, (CHAR_BIT * sizeof(short) - 1) * 301L / 1000);\r\n        CHECK_INT(Lim::max_digits10, 0);\r\n        CHECK_INT(Lim::radix, 2);\r\n    }\r\n\r\n    { // check limits<unsigned short>\r\n        typedef STD numeric_limits<unsigned short> Lim;\r\n        CHECK(Lim::is_specialized);\r\n        CHECK(!Lim::is_signed);\r\n        CHECK(Lim::is_integer);\r\n        CHECK(Lim::is_exact);\r\n        CHECK(Lim::is_bounded);\r\n        CHECK(Lim::is_modulo);\r\n\r\n        CHECK_INT(Lim::min(), 0);\r\n        CHECK_INT(Lim::max(), USHRT_MAX);\r\n        CHECK(Lim::lowest() == Lim::min());\r\n\r\n        CHECK_INT(Lim::digits, CHAR_BIT * sizeof(short));\r\n        CHECK_INT(Lim::digits10, CHAR_BIT * sizeof(short) * 301L / 1000);\r\n        CHECK_INT(Lim::max_digits10, 0);\r\n        CHECK_INT(Lim::radix, 2);\r\n    }\r\n\r\n    { // check limits<signed int>\r\n        typedef STD numeric_limits<signed int> Lim;\r\n        CHECK(Lim::is_specialized);\r\n        CHECK(Lim::is_signed);\r\n        CHECK(Lim::is_integer);\r\n        CHECK(Lim::is_exact);\r\n        CHECK(Lim::is_bounded);\r\n        CHECK(!Lim::is_modulo);\r\n\r\n        CHECK_INT(Lim::min(), INT_MIN);\r\n        CHECK_INT(Lim::max(), INT_MAX);\r\n        CHECK(Lim::lowest() == Lim::min());\r\n\r\n        CHECK_INT(Lim::digits, CHAR_BIT * sizeof(int) - 1);\r\n        CHECK_INT(Lim::digits10, (CHAR_BIT * sizeof(int) - 1) * 301L / 1000);\r\n        CHECK_INT(Lim::max_digits10, 0);\r\n        CHECK_INT(Lim::radix, 2);\r\n    }\r\n\r\n    { // check limits<unsigned int>\r\n        typedef STD numeric_limits<unsigned int> Lim;\r\n        CHECK(Lim::is_specialized);\r\n        CHECK(!Lim::is_signed);\r\n        CHECK(Lim::is_integer);\r\n        CHECK(Lim::is_exact);\r\n        CHECK(Lim::is_bounded);\r\n        CHECK(Lim::is_modulo);\r\n\r\n        CHECK_INT(Lim::min(), 0);\r\n        CHECK_INT(Lim::max(), UINT_MAX);\r\n        CHECK(Lim::lowest() == Lim::min());\r\n\r\n        CHECK_INT(Lim::digits, CHAR_BIT * sizeof(int));\r\n        CHECK_INT(Lim::digits10, CHAR_BIT * sizeof(int) * 301L / 1000);\r\n        CHECK_INT(Lim::max_digits10, 0);\r\n        CHECK_INT(Lim::radix, 2);\r\n    }\r\n\r\n    { // check limits<signed long>\r\n        typedef STD numeric_limits<signed long> Lim;\r\n        CHECK(Lim::is_specialized);\r\n        CHECK(Lim::is_signed);\r\n        CHECK(Lim::is_integer);\r\n        CHECK(Lim::is_exact);\r\n        CHECK(Lim::is_bounded);\r\n        CHECK(!Lim::is_modulo);\r\n\r\n        CHECK(Lim::min() == LONG_MIN);\r\n        CHECK(Lim::max() == LONG_MAX);\r\n        CHECK(Lim::lowest() == Lim::min());\r\n\r\n        CHECK_INT(Lim::digits, CHAR_BIT * sizeof(long) - 1);\r\n        CHECK_INT(Lim::digits10, (CHAR_BIT * sizeof(long) - 1) * 301L / 1000);\r\n        CHECK_INT(Lim::max_digits10, 0);\r\n        CHECK_INT(Lim::radix, 2);\r\n    }\r\n\r\n    { // check limits<unsigned long>\r\n        typedef STD numeric_limits<unsigned long> Lim;\r\n        CHECK(Lim::is_specialized);\r\n        CHECK(!Lim::is_signed);\r\n        CHECK(Lim::is_integer);\r\n        CHECK(Lim::is_exact);\r\n        CHECK(Lim::is_bounded);\r\n        CHECK(Lim::is_modulo);\r\n\r\n        CHECK_INT(Lim::min(), 0);\r\n        CHECK(Lim::max() == ULONG_MAX);\r\n        CHECK(Lim::lowest() == Lim::min());\r\n\r\n        CHECK_INT(Lim::digits, CHAR_BIT * sizeof(long));\r\n        CHECK_INT(Lim::digits10, CHAR_BIT * sizeof(long) * 301L / 1000);\r\n        CHECK_INT(Lim::max_digits10, 0);\r\n        CHECK_INT(Lim::radix, 2);\r\n    }\r\n\r\n    { // check limits<signed long long>\r\n        typedef STD numeric_limits<long long> Lim;\r\n        CHECK(Lim::is_specialized);\r\n        CHECK(Lim::is_signed);\r\n        CHECK(Lim::is_integer);\r\n        CHECK(Lim::is_exact);\r\n        CHECK(Lim::is_bounded);\r\n        CHECK(!Lim::is_modulo);\r\n\r\n        CHECK(Lim::min() == LLONG_MIN);\r\n        CHECK(Lim::max() == LLONG_MAX);\r\n        CHECK(Lim::lowest() == Lim::min());\r\n\r\n        CHECK_INT(Lim::digits, CHAR_BIT * sizeof(long long) - 1);\r\n        CHECK_INT(Lim::digits10, (CHAR_BIT * sizeof(long long) - 1) * 301L / 1000);\r\n        CHECK_INT(Lim::max_digits10, 0);\r\n        CHECK_INT(Lim::radix, 2);\r\n    }\r\n\r\n    { // check limits<unsigned long long>\r\n        typedef STD numeric_limits<unsigned long long> Lim;\r\n        CHECK(Lim::is_specialized);\r\n        CHECK(!Lim::is_signed);\r\n        CHECK(Lim::is_integer);\r\n        CHECK(Lim::is_exact);\r\n        CHECK(Lim::is_bounded);\r\n        CHECK(Lim::is_modulo);\r\n\r\n        CHECK(Lim::min() == 0);\r\n        CHECK(Lim::max() == ULLONG_MAX);\r\n        CHECK(Lim::lowest() == Lim::min());\r\n\r\n        CHECK_INT(Lim::digits, CHAR_BIT * sizeof(long long));\r\n        CHECK_INT(Lim::digits10, CHAR_BIT * sizeof(long long) * 301L / 1000);\r\n        CHECK_INT(Lim::max_digits10, 0);\r\n        CHECK_INT(Lim::radix, 2);\r\n    }\r\n\r\n    { // check limits<float>\r\n        typedef STD numeric_limits<float> Lim;\r\n        CHECK(Lim::is_specialized);\r\n        CHECK(Lim::is_signed);\r\n        CHECK(!Lim::is_integer);\r\n        CHECK(!Lim::is_exact);\r\n        CHECK(Lim::is_bounded);\r\n        CHECK(!Lim::is_modulo);\r\n\r\n        CHECK(Lim::min() == FLT_MIN);\r\n        CHECK(Lim::max() == FLT_MAX);\r\n        CHECK(Lim::lowest() == -Lim::max());\r\n        CHECK(Lim::epsilon() == FLT_EPSILON);\r\n\r\n        CHECK_INT(Lim::digits, FLT_MANT_DIG);\r\n        CHECK_INT(Lim::digits10, FLT_DIG);\r\n        CHECK_INT(Lim::max_digits10, 2 + FLT_MANT_DIG * 301L / 1000);\r\n\r\n        CHECK_INT(Lim::max_exponent, FLT_MAX_EXP);\r\n        CHECK_INT(Lim::max_exponent10, FLT_MAX_10_EXP);\r\n        CHECK_INT(Lim::min_exponent, FLT_MIN_EXP);\r\n        CHECK_INT(Lim::min_exponent10, FLT_MIN_10_EXP);\r\n    }\r\n\r\n    { // check limits<double>\r\n        typedef STD numeric_limits<double> Lim;\r\n        CHECK(Lim::is_specialized);\r\n        CHECK(Lim::is_signed);\r\n        CHECK(!Lim::is_integer);\r\n        CHECK(!Lim::is_exact);\r\n        CHECK(Lim::is_bounded);\r\n        CHECK(!Lim::is_modulo);\r\n\r\n        CHECK(Lim::min() == DBL_MIN);\r\n        CHECK(Lim::max() == DBL_MAX);\r\n        CHECK(Lim::lowest() == -Lim::max());\r\n        CHECK(Lim::epsilon() == DBL_EPSILON);\r\n\r\n        CHECK_INT(Lim::digits, DBL_MANT_DIG);\r\n        CHECK_INT(Lim::digits10, DBL_DIG);\r\n        CHECK_INT(Lim::max_digits10, 2 + DBL_MANT_DIG * 301L / 1000);\r\n\r\n        CHECK_INT(Lim::max_exponent, DBL_MAX_EXP);\r\n        CHECK_INT(Lim::max_exponent10, DBL_MAX_10_EXP);\r\n        CHECK_INT(Lim::min_exponent, DBL_MIN_EXP);\r\n        CHECK_INT(Lim::min_exponent10, DBL_MIN_10_EXP);\r\n    }\r\n\r\n    { // check limits<long double>\r\n        typedef STD numeric_limits<long double> Lim;\r\n        CHECK(Lim::is_specialized);\r\n        CHECK(Lim::is_signed);\r\n        CHECK(!Lim::is_integer);\r\n        CHECK(!Lim::is_exact);\r\n        CHECK(Lim::is_bounded);\r\n        CHECK(!Lim::is_modulo);\r\n\r\n        CHECK(Lim::min() == LDBL_MIN);\r\n        CHECK(Lim::max() == LDBL_MAX);\r\n        CHECK(Lim::lowest() == -Lim::max());\r\n        CHECK(Lim::epsilon() == LDBL_EPSILON);\r\n\r\n        CHECK_INT(Lim::digits, LDBL_MANT_DIG);\r\n        CHECK_INT(Lim::digits10, LDBL_DIG);\r\n        CHECK_INT(Lim::max_digits10, 2 + LDBL_MANT_DIG * 301L / 1000);\r\n\r\n        CHECK_INT(Lim::max_exponent, LDBL_MAX_EXP);\r\n        CHECK_INT(Lim::max_exponent10, LDBL_MAX_10_EXP);\r\n        CHECK_INT(Lim::min_exponent, LDBL_MIN_EXP);\r\n        CHECK_INT(Lim::min_exponent10, LDBL_MIN_10_EXP);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/list/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <list>\r\n#define TEST_NAME \"<list>\"\r\n\r\n#define _HAS_AUTO_PTR_ETC                1\r\n#define _HAS_DEPRECATED_ADAPTOR_TYPEDEFS 1\r\n\r\n#include \"tdefs.h\"\r\n#include <functional>\r\n#include <list>\r\n#include <stddef.h>\r\n\r\ntypedef STD allocator<char> Myal;\r\ntypedef STD list<char, Myal> Mycont;\r\n\r\nvoid test_main() { // test basic workings of list definitions\r\n    char ch     = '\\0';\r\n    char carr[] = \"abc\";\r\n\r\n    Mycont::allocator_type* p_alloc = (Myal*) nullptr;\r\n    Mycont::pointer p_ptr           = (char*) nullptr;\r\n    Mycont::const_pointer p_cptr    = (const char*) nullptr;\r\n    Mycont::reference p_ref         = ch;\r\n    Mycont::const_reference p_cref  = (const char&) ch;\r\n    Mycont::size_type* p_size       = (CSTD size_t*) nullptr;\r\n    Mycont::difference_type* p_diff = (CSTD ptrdiff_t*) nullptr;\r\n    Mycont::value_type* p_val       = (char*) nullptr;\r\n\r\n    p_alloc = p_alloc; // to quiet diagnostics\r\n    p_ptr   = p_ptr;\r\n    p_cptr  = p_cptr;\r\n    p_ref   = p_cref;\r\n    p_size  = p_size;\r\n    p_diff  = p_diff;\r\n    p_val   = p_val;\r\n\r\n    Mycont v0;\r\n    Myal al = v0.get_allocator();\r\n    Mycont v0a(al);\r\n    CHECK(v0.empty());\r\n    CHECK_INT(v0.size(), 0);\r\n    CHECK_INT(v0a.size(), 0);\r\n    CHECK(v0a.get_allocator() == al);\r\n\r\n    Mycont v1(5), v1a(6, 'x'), v1b(7, 'y', al);\r\n    CHECK_INT(v1.size(), 5);\r\n    CHECK_INT(v1.back(), '\\0');\r\n    CHECK_INT(v1a.size(), 6);\r\n    CHECK_INT(v1a.back(), 'x');\r\n    CHECK_INT(v1b.size(), 7);\r\n    CHECK_INT(v1b.back(), 'y');\r\n\r\n    Mycont v2(v1a);\r\n    CHECK_INT(v2.size(), 6);\r\n    CHECK_INT(v2.front(), 'x');\r\n\r\n    Mycont v2a(v1a, al);\r\n    CHECK_INT(v2.size(), 6);\r\n    CHECK_INT(v2a.front(), 'x');\r\n\r\n    Mycont v3(v1a.begin(), v1a.end());\r\n    CHECK_INT(v3.size(), 6);\r\n    CHECK_INT(v3.front(), 'x');\r\n\r\n    const Mycont v4(v1a.begin(), v1a.end(), al);\r\n    CHECK_INT(v4.size(), 6);\r\n    CHECK_INT(v4.front(), 'x');\r\n    v0 = v4;\r\n    CHECK_INT(v0.size(), 6);\r\n    CHECK_INT(v0.front(), 'x');\r\n\r\n    v0.resize(8);\r\n    CHECK_INT(v0.size(), 8);\r\n    CHECK_INT(v0.back(), '\\0');\r\n    v0.resize(10, 'z');\r\n    CHECK_INT(v0.size(), 10);\r\n    CHECK_INT(v0.back(), 'z');\r\n    CHECK(v0.size() <= v0.max_size());\r\n\r\n    STD list<char>* p_cont = &v0;\r\n    p_cont                 = p_cont; // to quiet diagnostics\r\n\r\n    { // check iterator generators\r\n        Mycont::iterator p_it(v0.begin());\r\n        Mycont::const_iterator p_cit(v4.begin());\r\n        Mycont::reverse_iterator p_rit(v0.rbegin());\r\n        Mycont::const_reverse_iterator p_crit(v4.rbegin());\r\n        CHECK_INT(*p_it, 'x');\r\n        CHECK_INT(*--(p_it = v0.end()), 'z');\r\n        CHECK_INT(*p_cit, 'x');\r\n        CHECK_INT(*--(p_cit = v4.end()), 'x');\r\n        CHECK_INT(*p_rit, 'z');\r\n        CHECK_INT(*--(p_rit = v0.rend()), 'x');\r\n        CHECK_INT(*p_crit, 'x');\r\n        CHECK_INT(*--(p_crit = v4.rend()), 'x');\r\n\r\n        Mycont::const_iterator p_it1 = Mycont::const_iterator();\r\n        Mycont::const_iterator p_it2 = Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    { // check const iterators generators\r\n        Mycont::const_iterator p_it(v0.cbegin());\r\n        Mycont::const_iterator p_cit(v4.cbegin());\r\n        Mycont::const_reverse_iterator p_rit(v0.crbegin());\r\n        Mycont::const_reverse_iterator p_crit(v4.crbegin());\r\n        CHECK_INT(*p_it, 'x');\r\n        CHECK_INT(*--(p_it = v0.cend()), 'z');\r\n        CHECK_INT(*p_cit, 'x');\r\n        CHECK_INT(*--(p_cit = v4.cend()), 'x');\r\n        CHECK_INT(*p_rit, 'z');\r\n        CHECK_INT(*--(p_rit = v0.crend()), 'x');\r\n        CHECK_INT(*p_crit, 'x');\r\n        CHECK_INT(*--(p_crit = v4.crend()), 'x');\r\n\r\n        Mycont::const_iterator p_it1 = Mycont::const_iterator();\r\n        Mycont::const_iterator p_it2 = Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    CHECK_INT(v0.front(), 'x');\r\n    CHECK_INT(v4.front(), 'x');\r\n    v0.push_front('a');\r\n    CHECK_INT(v0.front(), 'a');\r\n    v0.pop_front();\r\n    CHECK_INT(v0.front(), 'x');\r\n    CHECK_INT(v4.front(), 'x');\r\n\r\n    v0.push_back('a');\r\n    CHECK_INT(v0.back(), 'a');\r\n    v0.pop_back();\r\n    CHECK_INT(v0.back(), 'z');\r\n    CHECK_INT(v4.back(), 'x');\r\n\r\n    {\r\n        Mycont v5;\r\n        v5.resize(10);\r\n        CHECK_INT(v5.size(), 10);\r\n        CHECK_INT(*++v5.begin(), 0);\r\n\r\n        Mycont v6(20, 'x');\r\n        Mycont v7(STD move(v6));\r\n        CHECK_INT(v6.size(), 0);\r\n        CHECK_INT(v7.size(), 20);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_INT(v7.size(), 0);\r\n        CHECK_INT(v8.size(), 20);\r\n\r\n        Mycont v8a(STD move(v8), Myal());\r\n        CHECK_INT(v8.size(), 0);\r\n        CHECK_INT(v8a.size(), 20);\r\n\r\n        STD list<Movable_int> v9;\r\n        v9.resize(10);\r\n        CHECK_INT(v9.size(), 10);\r\n        CHECK_INT((*++v9.begin()).val, 0);\r\n\r\n        STD list<Movable_int> v10;\r\n        Movable_int mi1(1);\r\n        v10.push_back(STD move(mi1));\r\n        CHECK_INT(mi1.val, -1);\r\n        CHECK_INT(v10.front().val, 1);\r\n\r\n        Movable_int mi2(2);\r\n        v10.push_front(STD move(mi2));\r\n        CHECK_INT(mi2.val, -1);\r\n        CHECK_INT(v10.front().val, 2);\r\n\r\n        Movable_int mi3(3);\r\n        v10.insert(v10.begin(), STD move(mi3));\r\n        CHECK_INT(mi3.val, -1);\r\n        CHECK_INT(v10.front().val, 3);\r\n\r\n        v10.emplace_front();\r\n        CHECK_INT(v10.front().val, 0);\r\n        v10.emplace_front(2);\r\n        CHECK_INT(v10.front().val, 2);\r\n        v10.emplace_front(3, 2);\r\n        CHECK_INT(v10.front().val, 0x32);\r\n        v10.emplace_front(4, 3, 2);\r\n        CHECK_INT(v10.front().val, 0x432);\r\n        v10.emplace_front(5, 4, 3, 2);\r\n        CHECK_INT(v10.front().val, 0x5432);\r\n        v10.emplace_front(6, 5, 4, 3, 2);\r\n        CHECK_INT(v10.front().val, 0x65432);\r\n\r\n        v10.emplace_back();\r\n        CHECK_INT(v10.back().val, 0);\r\n        v10.emplace_back(2);\r\n        CHECK_INT(v10.back().val, 2);\r\n        v10.emplace_back(3, 2);\r\n        CHECK_INT(v10.back().val, 0x32);\r\n        v10.emplace_back(4, 3, 2);\r\n        CHECK_INT(v10.back().val, 0x432);\r\n        v10.emplace_back(5, 4, 3, 2);\r\n        CHECK_INT(v10.back().val, 0x5432);\r\n        v10.emplace_back(6, 5, 4, 3, 2);\r\n        CHECK_INT(v10.back().val, 0x65432);\r\n\r\n        v10.emplace(++v10.begin());\r\n        CHECK_INT((*++v10.begin()).val, 0);\r\n        v10.emplace(++v10.begin(), 2);\r\n        CHECK_INT((*++v10.begin()).val, 2);\r\n        v10.emplace(++v10.begin(), 3, 2);\r\n        CHECK_INT((*++v10.begin()).val, 0x32);\r\n        v10.emplace(++v10.begin(), 4, 3, 2);\r\n        CHECK_INT((*++v10.begin()).val, 0x432);\r\n        v10.emplace(++v10.begin(), 5, 4, 3, 2);\r\n        CHECK_INT((*++v10.begin()).val, 0x5432);\r\n        v10.emplace(++v10.begin(), 6, 5, 4, 3, 2);\r\n        CHECK_INT((*++v10.begin()).val, 0x65432);\r\n    }\r\n\r\n    { // check for lvalue stealing\r\n        STD list<Copyable_int> v11;\r\n        Copyable_int ci1(1);\r\n        v11.push_back(ci1);\r\n        CHECK_INT(ci1.val, 1);\r\n        CHECK_INT(v11.back().val, 1);\r\n\r\n        Copyable_int ci2(2);\r\n        v11.push_front(ci2);\r\n        CHECK_INT(ci2.val, 2);\r\n        CHECK_INT(v11.front().val, 2);\r\n\r\n        Copyable_int ci3(3);\r\n        v11.insert(v11.begin(), ci3);\r\n        CHECK_INT(ci3.val, 3);\r\n        CHECK_INT(v11.front().val, 3);\r\n        CHECK_INT(v11.back().val, 1);\r\n\r\n        STD list<Copyable_int> v12(v11);\r\n        CHECK(v11 == v12);\r\n        v11 = v12;\r\n        CHECK(v11 == v12);\r\n\r\n        STD list<Copyable_int> v13(STD make_move_iterator(v11.begin()), STD make_move_iterator(v11.end()));\r\n        CHECK_INT(v13.front().val, 3);\r\n        CHECK_INT(v11.front().val, -1);\r\n    }\r\n\r\n    v0.assign(v4.begin(), v4.end());\r\n    CHECK_INT(v0.size(), v4.size());\r\n    CHECK_INT(v0.front(), v4.front());\r\n    v0.assign(4, 'w');\r\n    CHECK_INT(v0.size(), 4);\r\n    CHECK_INT(v0.front(), 'w');\r\n    CHECK_INT(*v0.insert(v0.begin(), 'a'), 'a');\r\n    CHECK_INT(v0.front(), 'a');\r\n    CHECK_INT(*++v0.begin(), 'w');\r\n    CHECK_INT(*v0.insert(v0.begin(), 2, 'b'), 'b');\r\n    CHECK_INT(v0.front(), 'b');\r\n    CHECK_INT(*++v0.begin(), 'b');\r\n    CHECK_INT(*++ ++v0.begin(), 'a');\r\n    CHECK_INT(*v0.insert(v0.end(), v4.begin(), v4.end()), *v4.begin());\r\n    CHECK_INT(v0.back(), v4.back());\r\n    CHECK_INT(*v0.insert(v0.end(), carr, carr + 3), *carr);\r\n    CHECK_INT(v0.back(), 'c');\r\n    v0.erase(v0.begin());\r\n    CHECK_INT(v0.front(), 'b');\r\n    CHECK_INT(*++v0.begin(), 'a');\r\n    v0.erase(v0.begin(), ++v0.begin());\r\n    CHECK_INT(v0.front(), 'a');\r\n\r\n    v0.clear();\r\n    CHECK(v0.empty());\r\n    v0.swap(v1);\r\n    CHECK(!v0.empty());\r\n    CHECK(v1.empty());\r\n    STD swap(v0, v1);\r\n    CHECK(v0.empty());\r\n    CHECK(!v1.empty());\r\n    CHECK(v1 == v1);\r\n    CHECK(v0 < v1);\r\n    CHECK(v0 != v1);\r\n    CHECK(v1 > v0);\r\n    CHECK(v0 <= v1);\r\n    CHECK(v1 >= v0);\r\n\r\n    v0.insert(v0.begin(), carr, carr + 3);\r\n    v1.splice(v1.begin(), v0);\r\n    CHECK(v0.empty());\r\n    CHECK_INT(v1.front(), 'a');\r\n    v0.splice(v0.end(), v1, v1.begin());\r\n    CHECK_INT(v0.size(), 1);\r\n    CHECK_INT(v0.front(), 'a');\r\n    v0.splice(v0.begin(), v1, v1.begin(), v1.end());\r\n    CHECK_INT(v0.front(), 'b');\r\n    CHECK(v1.empty());\r\n    v0.remove('b');\r\n    CHECK_INT(v0.front(), 'c');\r\n    v0.remove_if(STD binder2nd<STD not_equal_to<char>>(STD not_equal_to<char>(), 'c'));\r\n    CHECK_INT(v0.front(), 'c');\r\n    CHECK_INT(v0.size(), 1);\r\n\r\n    v0.merge(v1, STD greater<char>());\r\n    CHECK_INT(v0.front(), 'c');\r\n    CHECK_INT(v0.size(), 1);\r\n    v0.insert(v0.begin(), carr, carr + 3);\r\n    v0.unique();\r\n    CHECK_INT(v0.back(), 'c');\r\n    CHECK_INT(v0.size(), 3);\r\n    v0.unique(STD not_equal_to<char>());\r\n    CHECK_INT(v0.front(), 'a');\r\n    CHECK_INT(v0.size(), 1);\r\n    v1.insert(v1.begin(), carr, carr + 3);\r\n    v0.merge(v1);\r\n    CHECK_INT(v0.back(), 'c');\r\n    CHECK_INT(v0.size(), 4);\r\n    v0.sort(STD greater<char>());\r\n    CHECK_INT(v0.back(), 'a');\r\n    CHECK_INT(v0.size(), 4);\r\n    v0.sort();\r\n    CHECK_INT(v0.back(), 'c');\r\n    CHECK_INT(v0.size(), 4);\r\n    v0.reverse();\r\n    CHECK_INT(v0.back(), 'a');\r\n    CHECK_INT(v0.size(), 4);\r\n\r\n    v0.clear();\r\n    v1.clear();\r\n    v0.insert(v0.begin(), carr, carr + 3);\r\n    v1.splice(v1.begin(), STD move(v0));\r\n    CHECK(v0.empty());\r\n    CHECK_INT(v1.front(), 'a');\r\n    v0.splice(v0.end(), STD move(v1), v1.begin());\r\n    CHECK_INT(v0.size(), 1);\r\n    CHECK_INT(v0.front(), 'a');\r\n    v0.splice(v0.begin(), STD move(v1), v1.begin(), v1.end());\r\n    CHECK_INT(v0.front(), 'b');\r\n    CHECK(v1.empty());\r\n\r\n    v0.assign(1, 'c');\r\n    v1.assign(2, 'b');\r\n    v0.merge(STD move(v1), STD greater<char>());\r\n    CHECK_INT(v0.front(), 'c');\r\n\r\n    v0.assign(1, 'c');\r\n    v1.assign(2, 'b');\r\n    v0.merge(STD move(v1));\r\n    CHECK_INT(v0.front(), 'b');\r\n\r\n    {\r\n        STD initializer_list<char> init{'a', 'b', 'c'};\r\n        Mycont v11(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11.back(), 'c');\r\n\r\n        v11.clear();\r\n        v11 = init;\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11.back(), 'c');\r\n\r\n        CHECK_INT(*v11.insert(++v11.begin(), init), *init.begin());\r\n        CHECK_INT(v11.size(), 6);\r\n        CHECK_INT(*++v11.begin(), 'a');\r\n\r\n        v11.assign(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11.back(), 'c');\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/locale1/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\..\\env_minus_md_idl.lst\r\n"
  },
  {
    "path": "tests/tr1/tests/locale1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <locale>, part 1\r\n#define TEST_NAME \"<locale>, part 1\"\r\n\r\n#include \"tdefs.h\"\r\n#include <iterator>\r\n#include <locale>\r\n#include <sstream>\r\n#include <string>\r\n#include <wchar.h>\r\n\r\n#define ADD_FACET(loc, pfac) STD locale(loc, pfac)\r\n#define HAS_FACET(loc, Fac)  STD has_facet<Fac>(loc)\r\n#define USE_FACET(loc, Fac)  STD use_facet<Fac>(loc)\r\n\r\nSTD locale loc;\r\n\r\nvoid test_codecvt() { // test codecvt<char, char, mbstate_t>\r\n    typedef STD codecvt<char, char, CSTD mbstate_t> Myfac;\r\n    const Myfac* pf       = &USE_FACET(loc, Myfac);\r\n    STD locale loc_byname = ADD_FACET(loc, (new STD codecvt_byname<char, char, CSTD mbstate_t>(\"C\")));\r\n\r\n    STD locale loc_byname_str = ADD_FACET(loc, (new STD codecvt_byname<char, char, CSTD mbstate_t>(STD string(\"C\"))));\r\n\r\n    const STD codecvt_base* pbase = pf;\r\n    STD locale::id* pid           = &pf->id;\r\n    Myfac::intern_type* pin       = (char*) nullptr;\r\n    Myfac::extern_type* pex       = (char*) nullptr;\r\n    Myfac::state_type* pst        = (CSTD mbstate_t*) nullptr;\r\n\r\n    STD codecvt_base::result res_tab[] = {\r\n        STD codecvt_base::error, STD codecvt_base::noconv, STD codecvt_base::ok, STD codecvt_base::partial};\r\n\r\n    pbase = pbase; // to quiet diagnostics;\r\n    pid   = pid;\r\n    pin   = pin;\r\n    pex   = pex;\r\n    pst   = pst;\r\n\r\n    int i, j, ok;\r\n\r\n    for (ok = 1, i = sizeof(res_tab) / sizeof(res_tab[0]); 0 < i;) {\r\n        for (j = --i; 0 < j;) { // test an (i, j) pair\r\n            int testno = i * 0x100 + j;\r\n            ok         = CHECK0(ok, testno, res_tab[i] != res_tab[--j]);\r\n        }\r\n    }\r\n    CHECK_MSG(\"codecvt_base::result values are distinct\", ok);\r\n\r\n    const char ibuf[] = \"abc\";\r\n    const char* inext;\r\n    char obuf[10];\r\n    char* onext;\r\n    static CSTD mbstate_t st0; // initial state\r\n    CSTD mbstate_t st;\r\n    STD codecvt_base::result ans;\r\n\r\n    CHECK(-1 <= pf->encoding());\r\n    CHECK_INT(pf->max_length(), 1);\r\n\r\n    st = st0;\r\n    CHECK_INT(pf->length(st, ibuf, ibuf + 3, 1), 1);\r\n    st = st0;\r\n    CHECK_INT(pf->length(st, ibuf, ibuf + 3, 10), 3);\r\n\r\n    st    = st0;\r\n    inext = nullptr;\r\n    onext = nullptr;\r\n    ans   = pf->out(st, ibuf, ibuf + 3, inext, obuf, obuf + 10, onext);\r\n    if (ans == STD codecvt_base::noconv) { // no conversion, acceptable\r\n        CHECK_INT(ans, STD codecvt_base::noconv);\r\n        CHECK(pf->always_noconv());\r\n        CHECK_PTR(inext, ibuf);\r\n        CHECK_PTR(onext, obuf);\r\n    } else { // converted, should succeed\r\n        CHECK_INT(ans, STD codecvt_base::ok);\r\n        CHECK(!pf->always_noconv());\r\n        CHECK_PTR(inext, ibuf + 3);\r\n        CHECK_PTR(onext, obuf + 3);\r\n        CHECK_MEM(obuf, \"abc\", 3);\r\n    }\r\n\r\n    onext = nullptr;\r\n    ans   = pf->unshift(st, obuf, obuf + 10, onext);\r\n    CHECK(ans == STD codecvt_base::noconv || ans == STD codecvt_base::ok);\r\n    CHECK_PTR(onext, obuf);\r\n\r\n    st    = st0;\r\n    inext = nullptr;\r\n    onext = nullptr;\r\n    ans   = pf->in(st, ibuf, ibuf + 3, inext, obuf, obuf + 10, onext);\r\n    if (ans == STD codecvt_base::noconv) { // no conversion, acceptable\r\n        CHECK_INT(ans, STD codecvt_base::noconv);\r\n        CHECK_PTR(inext, ibuf);\r\n        CHECK_PTR(onext, obuf);\r\n    } else { // converted, should succeed\r\n        CHECK_INT(ans, STD codecvt_base::ok);\r\n        CHECK_PTR(inext, ibuf + 3);\r\n        CHECK_PTR(onext, obuf + 3);\r\n        CHECK_MEM(obuf, \"abc\", 3);\r\n    }\r\n}\r\n\r\nstruct Myxctype : public STD ctype<char> { // get protected members\r\n    typedef STD ctype<char> Myfac;\r\n\r\n    Myxctype(const mask* tab_arg) : Myfac(tab_arg) { // construct with specified table\r\n    }\r\n\r\n    const mask* get_table() const { // get table\r\n        return table();\r\n    }\r\n\r\n    const mask* get_classic_table() const { // get classic table\r\n        return classic_table();\r\n    }\r\n};\r\n\r\nvoid test_ctype() { // test ctype<char>\r\n    typedef STD ctype<char> Myfac;\r\n    const Myfac* pf       = &USE_FACET(loc, Myfac);\r\n    STD locale loc_byname = ADD_FACET(loc, (new STD ctype_byname<char>(\"C\")));\r\n\r\n    STD locale loc_byname_str = ADD_FACET(loc, (new STD ctype_byname<char>(STD string(\"C\"))));\r\n\r\n    const STD ctype_base* pbase = pf;\r\n    STD locale::id* pid         = &pf->id;\r\n    Myfac::char_type* pc        = (char*) nullptr;\r\n    STD ctype_base::mask mbuf[10];\r\n    char r2d2[]   = {'R', '2', 'd', '2', '\\0'};\r\n    char r2d2_b[] = \"R2d2\";\r\n    const char* pend_b;\r\n    const char* pend;\r\n\r\n    pid   = pid; // to quiet diagnostics\r\n    pc    = pc;\r\n    pbase = pbase;\r\n\r\n    CHECK(pf->is(STD ctype_base::alnum, 'a'));\r\n    pend = pf->is(r2d2, r2d2 + 4, mbuf);\r\n    CHECK_PTR(pend, r2d2 + 4);\r\n    CHECK_INT(mbuf[1] & STD ctype_base::digit, STD ctype_base::digit);\r\n    pend = pf->scan_is(STD ctype_base::lower, r2d2, r2d2 + 4);\r\n    CHECK_PTR(pend, r2d2 + 2);\r\n    pend = pf->scan_not(STD ctype_base::alpha, r2d2, r2d2 + 4);\r\n    CHECK_PTR(pend, r2d2 + 1);\r\n\r\n    CHECK_INT(pf->toupper('a'), 'A');\r\n    pend = pf->toupper(r2d2, r2d2 + 4);\r\n    CHECK_PTR(pend, r2d2 + 4);\r\n    CHECK_INT(r2d2[2], 'D');\r\n    CHECK_INT(pf->tolower('A'), 'a');\r\n    pend = pf->tolower(r2d2, r2d2 + 4);\r\n    CHECK_PTR(pend, r2d2 + 4);\r\n    CHECK_INT(r2d2[2], 'd');\r\n\r\n    CHECK_INT(pf->widen('a'), 'a');\r\n    pend_b = pf->widen(r2d2_b, r2d2_b + 4, r2d2);\r\n    CHECK_PTR(pend_b, r2d2_b + 4);\r\n    CHECK_INT(r2d2[0], 'R');\r\n    CHECK_INT(pf->narrow('a', '\\0'), 'a');\r\n    r2d2_b[0] = '.';\r\n    pend      = pf->narrow(r2d2, r2d2 + 4, 'x', r2d2_b);\r\n    CHECK_PTR(pend, r2d2 + 4);\r\n    CHECK_INT(r2d2_b[0], 'R');\r\n\r\n    CHECK(STD isalnum('a', loc));\r\n    CHECK(STD isalpha('a', loc));\r\n    CHECK(!STD isblank('a', loc));\r\n    CHECK(!STD iscntrl('a', loc));\r\n    CHECK(!STD isdigit('a', loc));\r\n    CHECK(STD isgraph('a', loc));\r\n    CHECK(STD islower('a', loc));\r\n    CHECK(STD isprint('a', loc));\r\n    CHECK(!STD ispunct('a', loc));\r\n    CHECK(!STD isspace('a', loc));\r\n    CHECK(!STD isupper('a', loc));\r\n    CHECK(STD isxdigit('a', loc));\r\n\r\n    { // test ctype<char> specifics\r\n        STD ctype_base::mask masks[] = {STD ctype_base::alnum, STD ctype_base::alpha,\r\n            // STD ctype_base::blank,\r\n            STD ctype_base::cntrl, STD ctype_base::digit, STD ctype_base::graph, STD ctype_base::lower,\r\n            STD ctype_base::print, STD ctype_base::punct, STD ctype_base::space, STD ctype_base::upper,\r\n            STD ctype_base::xdigit};\r\n\r\n        int i, j, ok;\r\n\r\n        for (ok = 1, i = sizeof(masks) / sizeof(masks[0]); 0 < i;) {\r\n            for (j = --i; 0 < j;) { // test an (i, j) pair\r\n                int testno = i * 0x100 + j;\r\n                ok         = CHECK0(ok, testno, masks[i] != masks[--j]);\r\n            }\r\n        }\r\n        CHECK_MSG(\"ctype_base::mask values are distinct\", ok);\r\n\r\n        Myxctype* pf3        = new Myxctype(masks);\r\n        STD locale loc_masks = ADD_FACET(loc, pf3);\r\n\r\n        CHECK(256 <= pf->table_size);\r\n        CHECK_PTR(pf3->get_table(), masks);\r\n        CHECK_INT(pf3->get_classic_table()[static_cast<int>('3')] & STD ctype_base::digit, STD ctype_base::digit);\r\n    }\r\n}\r\n\r\nstruct Myxnpunct : public STD numpunct<char> { // specify numeric punctuation\r\nprotected:\r\n    char do_decimal_point() const override { // return decimal point\r\n        return '_';\r\n    }\r\n\r\n    char do_thousands_sep() const override { // return thousands separator\r\n        return ';';\r\n    }\r\n\r\n    STD string do_grouping() const override { // return grouping rule\r\n        return \"\\2\";\r\n    }\r\n\r\n    STD string do_truename() const override { // return name for true\r\n        return \"yes\";\r\n    }\r\n\r\n    STD string do_falsename() const override { // return name for false\r\n        return \"no\";\r\n    }\r\n};\r\n\r\nstruct Myxctype2 : public STD ctype<char> { // get protected members\r\n    Myxctype2() { // default construct\r\n    }\r\n\r\n    char do_widen(char ch) const override { // widen a character\r\n        if (ch == '-') {\r\n            return '@';\r\n        } else if (ch == '0') {\r\n            return 'A';\r\n        } else if (ch == '1') {\r\n            return 'b';\r\n        } else {\r\n            return ch;\r\n        }\r\n    }\r\n\r\n    const char* do_widen(const char* first, const char* last,\r\n        char* dest) const override { // widen a character sequence\r\n        for (; first != last; ++first, ++dest) {\r\n            *dest = do_widen(*first);\r\n        }\r\n        return first;\r\n    }\r\n};\r\n\r\nvoid test_num_get() { // test num_get<char, istreambuf_iterator<char> >\r\n    typedef STD istreambuf_iterator<char> Myiter;\r\n    typedef STD num_get<char, Myiter> Myfac;\r\n    const Myfac* pf      = &USE_FACET(loc, Myfac);\r\n    STD locale::id* pid  = &pf->id;\r\n    Myfac::char_type* pc = (char*) nullptr;\r\n    Myfac::iter_type* pi = (Myiter*) nullptr;\r\n\r\n    pid = pid; // to quiet diagnostics\r\n    pc  = pc;\r\n    pi  = pi;\r\n\r\n    STD istringstream istr(\" 1 no -123 4;56 789 012 3_ 0;45 6_78e2 0 \");\r\n    STD locale loc_mypunct   = ADD_FACET(loc, new Myxnpunct);\r\n    STD ios_base::iostate st = STD ios_base::goodbit;\r\n    Myiter iit0, iit(istr);\r\n\r\n    istr.imbue(loc_mypunct);\r\n\r\n    bool bo = false;\r\n    iit     = pf->get(++iit, iit0, istr, st, bo);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK(bo);\r\n    istr.setf(STD ios_base::boolalpha);\r\n    iit = pf->get(++iit, iit0, istr, st, bo);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK(!bo);\r\n\r\n    long lo = 0;\r\n    iit     = pf->get(++iit, iit0, istr, st, lo);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_INT(lo, -123);\r\n\r\n    unsigned short ush = 0;\r\n    iit                = pf->get(++iit, iit0, istr, st, ush);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_INT(ush, 456);\r\n\r\n    unsigned int ui = 0;\r\n    iit             = pf->get(++iit, iit0, istr, st, ui);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_INT(ui, 789);\r\n\r\n    unsigned long ul = 0;\r\n    iit              = pf->get(++iit, iit0, istr, st, ul);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_INT(ul, 12);\r\n\r\n    float fl = 0.0F;\r\n    iit      = pf->get(++iit, iit0, istr, st, fl);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK(fl == 3.0f);\r\n\r\n    double db = 0.0;\r\n    iit       = pf->get(++iit, iit0, istr, st, db);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK(db == 45.0);\r\n\r\n    long double ld = 0.0L;\r\n    iit            = pf->get(++iit, iit0, istr, st, ld);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK(ld == 678.0L);\r\n\r\n    void* pv = nullptr;\r\n    iit      = pf->get(++iit, iit0, istr, st, pv);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_PTR(pv, nullptr);\r\n\r\n    { // check for widen calls\r\n        STD istringstream istr2(\" @3Ab @45bA \");\r\n        STD locale loc_myctype = ADD_FACET(loc, new Myxctype2);\r\n\r\n        st  = STD ios_base::goodbit;\r\n        iit = Myiter(istr2);\r\n\r\n        istr2.imbue(loc_myctype);\r\n\r\n        lo  = 0;\r\n        iit = pf->get(++iit, iit0, istr2, st, lo);\r\n        CHECK_INT(*iit, ' ');\r\n        CHECK_INT(lo, -301);\r\n\r\n        fl  = 0.0F;\r\n        iit = pf->get(++iit, iit0, istr2, st, fl);\r\n        CHECK_INT(*iit, ' ');\r\n        CHECK(fl == -4510.0f);\r\n    }\r\n}\r\n\r\nvoid test_num_put() { // test num_put<char, ostreambuf_iterator<char> >\r\n    typedef STD ostreambuf_iterator<char> Myiter;\r\n    typedef STD num_put<char, Myiter> Myfac;\r\n    const Myfac* pf      = &USE_FACET(loc, Myfac);\r\n    STD locale::id* pid  = &pf->id;\r\n    Myfac::char_type* pc = (char*) nullptr;\r\n    Myfac::iter_type* pi = (Myiter*) nullptr;\r\n\r\n    pid = pid; // to quiet diagnostics\r\n    pc  = pc;\r\n    pi  = pi;\r\n\r\n    STD ostringstream ostr;\r\n    STD locale loc_mypunct = ADD_FACET(loc, new Myxnpunct);\r\n    Myiter oit(ostr);\r\n\r\n    ostr.imbue(loc_mypunct);\r\n\r\n    oit = pf->put(oit, ostr, '*', false);\r\n    ostr.setf(STD ios_base::boolalpha);\r\n    oit = pf->put(oit, ostr, '*', true);\r\n    CHECK_STR(ostr.str().c_str(), \"0yes\");\r\n\r\n    ostr.str(\"\");\r\n    oit = Myiter(ostr);\r\n    ostr.width(8);\r\n    ostr.setf(STD ios_base::internal);\r\n    oit = pf->put(oit, ostr, '*', -1234L);\r\n    CHECK_STR(ostr.str().c_str(), \"-**12;34\");\r\n\r\n    ostr.str(\"\");\r\n    oit = Myiter(ostr);\r\n    ostr.width(8);\r\n    ostr.setf(STD ios_base::left, STD ios_base::adjustfield);\r\n    ostr.setf(STD ios_base::hex, STD ios_base::basefield);\r\n    oit = pf->put(oit, ostr, '*', 0xbeefLU);\r\n    CHECK_STR(ostr.str().c_str(), \"be;ef***\");\r\n\r\n    ostr.str(\"\");\r\n    oit = Myiter(ostr);\r\n    ostr.setf(STD ios_base::left, STD ios_base::adjustfield);\r\n    oit = pf->put(oit, ostr, '*', 1234.5);\r\n    CHECK_STR(ostr.str().c_str(), \"12;34_5\");\r\n\r\n    ostr.str(\"\");\r\n    oit = Myiter(ostr);\r\n    ostr.setf(STD ios_base::left, STD ios_base::adjustfield);\r\n    ostr.setf(STD ios_base::scientific, STD ios_base::floatfield);\r\n    oit = pf->put(oit, ostr, '*', -6789.0L);\r\n\r\n    CHECK_STR(ostr.str().c_str(), \"-6_789000e+03\");\r\n\r\n    ostr.str(\"\");\r\n    oit = Myiter(ostr);\r\n    oit = pf->put(oit, ostr, '*', (void*) &oit);\r\n    CHECK(0 < ostr.str().size());\r\n\r\n    { // check for widen calls\r\n        STD ostringstream ostr2;\r\n        STD locale loc_myctype = ADD_FACET(loc, new Myxctype2);\r\n\r\n        ostr2.imbue(loc_myctype);\r\n\r\n        ostr2.str(\"\");\r\n        oit = Myiter(ostr2);\r\n        oit = pf->put(oit, ostr2, '*', -301L);\r\n        CHECK_STR(ostr2.str().c_str(), \"@3Ab\");\r\n\r\n        ostr2.str(\"\");\r\n        oit = Myiter(ostr2);\r\n        oit = pf->put(oit, ostr2, '*', -4501.0F);\r\n        CHECK_STR(ostr2.str().c_str(), \"@45Ab\");\r\n    }\r\n}\r\n\r\nvoid test_numpunct() { // test numpunct<char>\r\n    typedef STD numpunct<char> Myfac;\r\n    STD locale loc_mypunct = ADD_FACET(loc, new Myxnpunct);\r\n    const Myfac* pf        = &USE_FACET(loc_mypunct, Myfac);\r\n    STD locale loc_byname  = ADD_FACET(loc, (new STD numpunct_byname<char>(\"C\")));\r\n\r\n    STD locale loc_byname_str = ADD_FACET(loc, (new STD numpunct_byname<char>(STD string(\"C\"))));\r\n\r\n    STD locale::id* pid      = &pf->id;\r\n    Myfac::char_type* pc     = (char*) nullptr;\r\n    Myfac::string_type* pstr = (STD string*) nullptr;\r\n\r\n    pid  = pid; // to quiet diagnostics\r\n    pc   = pc;\r\n    pstr = pstr;\r\n\r\n    CHECK_INT(pf->decimal_point(), '_');\r\n    CHECK_INT(pf->thousands_sep(), ';');\r\n    CHECK_STR(pf->grouping().c_str(), \"\\2\");\r\n    CHECK_STR(pf->truename().c_str(), \"yes\");\r\n    CHECK_STR(pf->falsename().c_str(), \"no\");\r\n}\r\n\r\nvoid test_main() { // test basic workings of locale definitions\r\n    STD locale::category cats[] = {STD locale::none, STD locale::collate, STD locale::ctype, STD locale::monetary,\r\n        STD locale::numeric, STD locale::time, STD locale::messages, STD locale::all};\r\n    STD locale* ploc            = (STD locale*) nullptr;\r\n    STD locale::facet* pfac     = (STD locale::facet*) nullptr;\r\n    STD locale::id* pid         = (STD locale::id*) nullptr;\r\n    STD locale::category* pcat  = (int*) nullptr;\r\n\r\n    ploc = ploc; // to quiet diagnostics\r\n    pfac = pfac;\r\n    pid  = pid;\r\n    pcat = pcat;\r\n\r\n    int i, j, ok;\r\n\r\n    for (ok = 1, i = sizeof(cats) / sizeof(cats[0]); 0 < i;) {\r\n        for (j = --i; 0 < j;) { // test an (i, j) pair\r\n            int testno = i * 0x100 + j;\r\n            ok         = CHECK0(ok, testno, cats[i] != cats[--j]);\r\n        }\r\n    }\r\n    CHECK_MSG(\"locale::category values are distinct\", ok);\r\n\r\n    STD locale::category allcats = 0;\r\n    for (i = 1; i < 7; ++i) {\r\n        allcats |= cats[i];\r\n    }\r\n    CHECK_INT(cats[7] & allcats, allcats);\r\n\r\n    STD locale cloc(\"C\");\r\n    STD locale partial_cloc(loc, \"C\", STD locale::numeric);\r\n    STD locale partial_loc = ADD_FACET(loc, new STD ctype<char>(nullptr));\r\n    STD locale partial_loc2(loc, partial_loc, STD locale::time);\r\n\r\n    STD locale cloc_str(STD string(\"C\"));\r\n    STD locale partial_cloc_str(loc, STD string(\"C\"), STD locale::numeric);\r\n\r\n    partial_loc2 = loc.combine<STD ctype<wchar_t>>(partial_cloc);\r\n    typedef STD numpunct<char> Mynpunct;\r\n\r\n    CHECK(loc == STD locale::classic());\r\n    STD locale::global(partial_loc);\r\n    CHECK(loc != STD locale());\r\n    STD locale::global(loc);\r\n    CHECK(HAS_FACET(loc, Mynpunct));\r\n    CHECK_INT(USE_FACET(loc, Mynpunct).decimal_point(), '.');\r\n\r\n    CHECK_STR(loc.name().c_str(), \"C\");\r\n    CHECK_STR(partial_loc.name().c_str(), \"*\");\r\n\r\n    test_codecvt();\r\n    test_ctype();\r\n    test_num_get();\r\n    test_num_put();\r\n    test_numpunct();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/locale2/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\..\\env_minus_md_idl.lst\r\n"
  },
  {
    "path": "tests/tr1/tests/locale2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <locale>, part 2\r\n#define TEST_NAME \"<locale>, part 2\"\r\n\r\n#include \"tdefs.h\"\r\n#include <locale>\r\n#include <sstream>\r\n#include <string>\r\n#include <wchar.h>\r\n\r\n#define ADD_FACET(loc, pfac) STD locale(loc, pfac)\r\n#define HAS_FACET(loc, Fac)  STD has_facet<Fac>(loc)\r\n#define USE_FACET(loc, Fac)  STD use_facet<Fac>(loc)\r\n\r\nSTD locale loc;\r\n\r\nvoid test_codecvt() { // test codecvt<wchar_t, char, mbstate_t>\r\n    typedef STD codecvt<wchar_t, char, CSTD mbstate_t> Myfac;\r\n    const Myfac* pf               = &USE_FACET(loc, Myfac);\r\n    STD locale loc_byname         = ADD_FACET(loc, (new STD codecvt_byname<wchar_t, char, CSTD mbstate_t>(\"C\")));\r\n    const STD codecvt_base* pbase = pf;\r\n    STD locale::id* pid           = &pf->id;\r\n    Myfac::intern_type* pin       = (wchar_t*) nullptr;\r\n    Myfac::extern_type* pex       = (char*) nullptr;\r\n    Myfac::state_type* pst        = (CSTD mbstate_t*) nullptr;\r\n\r\n    pbase = pbase; // to quiet diagnostics;\r\n    pid   = pid;\r\n    pin   = pin;\r\n    pex   = pex;\r\n    pst   = pst;\r\n\r\n    const wchar_t ibuf[] = {L'a', L'b', L'c'};\r\n    const wchar_t* inext;\r\n    char obuf[32];\r\n    char* onext;\r\n    static CSTD mbstate_t st0; // initial state\r\n    CSTD mbstate_t st;\r\n    STD codecvt_base::result ans;\r\n\r\n    CHECK(-1 <= pf->encoding());\r\n    CHECK(1 <= pf->max_length());\r\n\r\n    st    = st0;\r\n    inext = nullptr;\r\n    onext = nullptr;\r\n    ans   = pf->out(st, ibuf, ibuf + 3, inext, obuf, obuf + sizeof(obuf), onext);\r\n    if (ans == STD codecvt_base::noconv) { // no conversion, acceptable\r\n        CHECK_INT(ans, STD codecvt_base::noconv);\r\n        CHECK(pf->always_noconv());\r\n        CHECK_PTR(inext, ibuf);\r\n        CHECK_PTR(onext, obuf);\r\n\r\n        const char bibuf[] = \"abc\";\r\n        st                 = st0;\r\n        CHECK_INT(pf->length(st, bibuf, bibuf + 3, 10), 3);\r\n    } else { // converted, should succeed\r\n        CHECK_INT(ans, STD codecvt_base::ok);\r\n        CHECK(!pf->always_noconv());\r\n        CHECK_PTR(inext, ibuf + 3);\r\n\r\n        st                 = st0;\r\n        const char* binext = nullptr;\r\n        wchar_t* wonext    = nullptr;\r\n        wchar_t wobuf[10];\r\n        ans = pf->in(st, obuf, onext, binext, wobuf, wobuf + 10, wonext);\r\n        CHECK_PTR(wonext, wobuf + 3);\r\n        CHECK_WMEM(wobuf, L\"abc\", 3);\r\n\r\n        st = st0;\r\n        CHECK_INT(pf->length(st, obuf, onext, onext - obuf), onext - obuf);\r\n    }\r\n\r\n    onext = nullptr;\r\n    ans   = pf->unshift(st, obuf, obuf + 10, onext);\r\n    CHECK(ans == STD codecvt_base::noconv || ans == STD codecvt_base::ok);\r\n    CHECK_PTR(onext, obuf);\r\n}\r\n\r\nvoid test_ctype() { // test ctype<wchar_t>\r\n    typedef STD ctype<wchar_t> Myfac;\r\n    const Myfac* pf             = &USE_FACET(loc, Myfac);\r\n    STD locale loc_byname       = ADD_FACET(loc, new STD ctype_byname<wchar_t>(\"C\"));\r\n    const STD ctype_base* pbase = pf;\r\n    Myfac::char_type* pc        = (wchar_t*) nullptr;\r\n    STD locale::id* pid         = &pf->id;\r\n    STD ctype_base::mask mbuf[10];\r\n    wchar_t r2d2[] = {L'R', L'2', L'd', L'2', L'\\0'};\r\n    char r2d2_b[]  = \"R2d2\";\r\n    const char* pend_b;\r\n    const wchar_t* pend;\r\n\r\n    pid   = pid; // to quiet diagnostics\r\n    pc    = pc;\r\n    pbase = pbase;\r\n\r\n    CHECK(pf->is(STD ctype_base::alnum, L'a'));\r\n    pend = pf->is(r2d2, r2d2 + 4, mbuf);\r\n    CHECK_PTR(pend, r2d2 + 4);\r\n    CHECK_INT(mbuf[1] & STD ctype_base::digit, STD ctype_base::digit);\r\n    pend = pf->scan_is(STD ctype_base::lower, r2d2, r2d2 + 4);\r\n    CHECK_PTR(pend, r2d2 + 2);\r\n    pend = pf->scan_not(STD ctype_base::alpha, r2d2, r2d2 + 4);\r\n    CHECK_PTR(pend, r2d2 + 1);\r\n\r\n    CHECK_INT(pf->toupper(L'a'), L'A');\r\n    pend = pf->toupper(r2d2, r2d2 + 4);\r\n    CHECK_PTR(pend, r2d2 + 4);\r\n    CHECK_INT(r2d2[2], L'D');\r\n    CHECK_INT(pf->tolower(L'A'), L'a');\r\n    pend = pf->tolower(r2d2, r2d2 + 4);\r\n    CHECK_PTR(pend, r2d2 + 4);\r\n    CHECK_INT(r2d2[2], L'd');\r\n\r\n    CHECK_INT(pf->widen('a'), L'a');\r\n    pend_b = pf->widen(r2d2_b, r2d2_b + 4, r2d2);\r\n    CHECK_PTR(pend_b, r2d2_b + 4);\r\n    CHECK_INT(r2d2[0], L'R');\r\n    CHECK_INT(pf->narrow(L'a', '\\0'), 'a');\r\n    r2d2_b[0] = L'.';\r\n    pend      = pf->narrow(r2d2, r2d2 + 4, 'x', r2d2_b);\r\n    CHECK_PTR(pend, r2d2 + 4);\r\n    CHECK_INT(r2d2_b[0], 'R');\r\n\r\n    CHECK(STD isalnum(L'a', loc));\r\n    CHECK(STD isalpha(L'a', loc));\r\n    CHECK(!STD isblank(L'a', loc));\r\n    CHECK(!STD iscntrl(L'a', loc));\r\n    CHECK(!STD isdigit(L'a', loc));\r\n    CHECK(STD isgraph(L'a', loc));\r\n    CHECK(STD islower(L'a', loc));\r\n    CHECK(STD isprint(L'a', loc));\r\n    CHECK(!STD ispunct(L'a', loc));\r\n    CHECK(!STD isspace(L'a', loc));\r\n    CHECK(!STD isupper(L'a', loc));\r\n    CHECK(STD isxdigit(L'a', loc));\r\n}\r\n\r\nstruct Myxnpunct : public STD numpunct<wchar_t> { // specify numeric punctuation\r\nprotected:\r\n    wchar_t do_decimal_point() const override { // return decimal point\r\n        return L'_';\r\n    }\r\n\r\n    wchar_t do_thousands_sep() const override { // return thousands separator\r\n        return L';';\r\n    }\r\n\r\n    STD string do_grouping() const override { // return grouping rule\r\n        return \"\\2\";\r\n    }\r\n\r\n    STD wstring do_truename() const override { // return name for true\r\n        return L\"yes\";\r\n    }\r\n\r\n    STD wstring do_falsename() const override { // return name for false\r\n        return L\"no\";\r\n    }\r\n};\r\n\r\nstruct Myxctype2 : public STD ctype<wchar_t> { // get protected members\r\n    Myxctype2() { // default construct\r\n    }\r\n\r\n    wchar_t do_widen(char ch) const override { // widen a character\r\n        if (ch == '-') {\r\n            return L'@';\r\n        } else if (ch == '0') {\r\n            return L'A';\r\n        } else if (ch == '1') {\r\n            return L'b';\r\n        } else {\r\n            return (wchar_t) ch;\r\n        }\r\n    }\r\n\r\n    const char* do_widen(const char* first, const char* last,\r\n        wchar_t* dest) const override { // widen a character sequence\r\n        for (; first != last; ++first, ++dest) {\r\n            *dest = do_widen(*first);\r\n        }\r\n        return first;\r\n    }\r\n};\r\n\r\nvoid test_num_get() { // test num_get<wchar_t, istreambuf_iterator<wchar_t> >\r\n    typedef STD istreambuf_iterator<wchar_t> Myiter;\r\n    typedef STD num_get<wchar_t, Myiter> Myfac;\r\n    const Myfac* pf      = &USE_FACET(loc, Myfac);\r\n    STD locale::id* pid  = &pf->id;\r\n    Myfac::char_type* pc = (wchar_t*) nullptr;\r\n    Myfac::iter_type* pi = (Myiter*) nullptr;\r\n\r\n    pid = pid; // to quiet diagnostics\r\n    pc  = pc;\r\n    pi  = pi;\r\n\r\n    STD wistringstream istr(L\" 1 no -123 4;56 789 012 3_ 0;45 6_78e2 0 \");\r\n    STD locale loc_mypunct   = ADD_FACET(loc, new Myxnpunct);\r\n    STD ios_base::iostate st = STD ios_base::goodbit;\r\n    Myiter iit0, iit(istr);\r\n\r\n    istr.imbue(loc_mypunct);\r\n\r\n    bool bo = false;\r\n    iit     = pf->get(++iit, iit0, istr, st, bo);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK(bo);\r\n    istr.setf(STD ios_base::boolalpha);\r\n    iit = pf->get(++iit, iit0, istr, st, bo);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK(!bo);\r\n\r\n    long lo = 0;\r\n    iit     = pf->get(++iit, iit0, istr, st, lo);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_INT(lo, -123);\r\n\r\n    unsigned short ush = 0;\r\n    iit                = pf->get(++iit, iit0, istr, st, ush);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_INT(ush, 456);\r\n\r\n    unsigned int ui = 0;\r\n    iit             = pf->get(++iit, iit0, istr, st, ui);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_INT(ui, 789);\r\n\r\n    unsigned long ul = 0;\r\n    iit              = pf->get(++iit, iit0, istr, st, ul);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_INT(ul, 12);\r\n\r\n    float fl = 0.0F;\r\n    iit      = pf->get(++iit, iit0, istr, st, fl);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK(fl == 3.0f);\r\n\r\n    double db = 0.0;\r\n    iit       = pf->get(++iit, iit0, istr, st, db);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK(db == 45.0);\r\n\r\n    long double ld = 0.0L;\r\n    iit            = pf->get(++iit, iit0, istr, st, ld);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK(ld == 678.0L);\r\n\r\n    void* pv = nullptr;\r\n    iit      = pf->get(++iit, iit0, istr, st, pv);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_PTR(pv, nullptr);\r\n\r\n    { // check for widen calls\r\n        STD wistringstream istr2(L\" @3Ab @45bA \");\r\n        STD locale loc_myctype = ADD_FACET(loc, new Myxctype2);\r\n\r\n        st  = STD ios_base::goodbit;\r\n        iit = Myiter(istr2);\r\n\r\n        istr2.imbue(loc_myctype);\r\n\r\n        lo  = 0;\r\n        iit = pf->get(++iit, iit0, istr2, st, lo);\r\n        CHECK_INT(*iit, L' ');\r\n        CHECK_INT(lo, -301);\r\n\r\n        fl  = 0.0F;\r\n        iit = pf->get(++iit, iit0, istr2, st, fl);\r\n        CHECK_INT(*iit, L' ');\r\n        CHECK(fl == -4510.0f);\r\n    }\r\n}\r\n\r\nvoid test_num_put() { // test num_put<wchar_t, ostreambuf_iterator<wchar_t> >\r\n    typedef STD ostreambuf_iterator<wchar_t> Myiter;\r\n    typedef STD num_put<wchar_t, Myiter> Myfac;\r\n    const Myfac* pf      = &USE_FACET(loc, Myfac);\r\n    STD locale::id* pid  = &pf->id;\r\n    Myfac::char_type* pc = (wchar_t*) nullptr;\r\n    Myfac::iter_type* pi = (Myiter*) nullptr;\r\n\r\n    pid = pid; // to quiet diagnostics\r\n    pc  = pc;\r\n    pi  = pi;\r\n\r\n    STD wostringstream ostr;\r\n    STD locale loc_mypunct = ADD_FACET(loc, new Myxnpunct);\r\n    Myiter oit(ostr);\r\n\r\n    ostr.imbue(loc_mypunct);\r\n\r\n    oit = pf->put(oit, ostr, L'*', false);\r\n    ostr.setf(STD ios_base::boolalpha);\r\n    oit = pf->put(oit, ostr, L'*', true);\r\n    CHECK_WSTR(ostr.str().c_str(), L\"0yes\");\r\n\r\n    ostr.str(L\"\");\r\n    oit = Myiter(ostr);\r\n    ostr.width(8);\r\n    ostr.setf(STD ios_base::internal);\r\n    oit = pf->put(oit, ostr, L'*', -1234L);\r\n    CHECK_WSTR(ostr.str().c_str(), L\"-**12;34\");\r\n\r\n    ostr.str(L\"\");\r\n    oit = Myiter(ostr);\r\n    ostr.width(8);\r\n    ostr.setf(STD ios_base::left, STD ios_base::adjustfield);\r\n    ostr.setf(STD ios_base::hex, STD ios_base::basefield);\r\n    oit = pf->put(oit, ostr, L'*', 0xbeefLU);\r\n    CHECK_WSTR(ostr.str().c_str(), L\"be;ef***\");\r\n\r\n    ostr.str(L\"\");\r\n    oit = Myiter(ostr);\r\n    ostr.setf(STD ios_base::left, STD ios_base::adjustfield);\r\n    oit = pf->put(oit, ostr, L'*', 1234.5);\r\n    CHECK_WSTR(ostr.str().c_str(), L\"12;34_5\");\r\n\r\n    ostr.str(L\"\");\r\n    oit = Myiter(ostr);\r\n    ostr.setf(STD ios_base::left, STD ios_base::adjustfield);\r\n    ostr.setf(STD ios_base::scientific, STD ios_base::floatfield);\r\n    oit = pf->put(oit, ostr, L'*', -6789.0L);\r\n\r\n    CHECK_WSTR(ostr.str().c_str(), L\"-6_789000e+03\");\r\n\r\n    ostr.str(L\"\");\r\n    oit = Myiter(ostr);\r\n    oit = pf->put(oit, ostr, L'*', (void*) &oit);\r\n    CHECK(0 < ostr.str().size());\r\n\r\n    { // check for widen calls\r\n        STD wostringstream ostr2;\r\n        STD locale loc_myctype = ADD_FACET(loc, new Myxctype2);\r\n\r\n        ostr2.imbue(loc_myctype);\r\n\r\n        ostr2.str(L\"\");\r\n        oit = Myiter(ostr2);\r\n        oit = pf->put(oit, ostr2, L'*', -301L);\r\n        CHECK_WSTR(ostr2.str().c_str(), L\"@3Ab\");\r\n\r\n        ostr2.str(L\"\");\r\n        oit = Myiter(ostr2);\r\n        oit = pf->put(oit, ostr2, L'*', -4501.0F);\r\n        CHECK_WSTR(ostr2.str().c_str(), L\"@45Ab\");\r\n    }\r\n}\r\n\r\nvoid test_numpunct() { // test numpunct<wchar_t>\r\n    typedef STD numpunct<wchar_t> Myfac;\r\n    STD locale loc_mypunct   = ADD_FACET(loc, new Myxnpunct);\r\n    const Myfac* pf          = &USE_FACET(loc_mypunct, Myfac);\r\n    STD locale::id* pid      = &pf->id;\r\n    Myfac::char_type* pc     = (wchar_t*) nullptr;\r\n    Myfac::string_type* pstr = (STD wstring*) nullptr;\r\n\r\n    pid  = pid; // to quiet diagnostics\r\n    pc   = pc;\r\n    pstr = pstr;\r\n\r\n    CHECK_INT(pf->decimal_point(), L'_');\r\n    CHECK_INT(pf->thousands_sep(), L';');\r\n    CHECK_STR(pf->grouping().c_str(), \"\\2\");\r\n    CHECK_WSTR(pf->truename().c_str(), L\"yes\");\r\n    CHECK_WSTR(pf->falsename().c_str(), L\"no\");\r\n}\r\n\r\nvoid test_main() { // test basic workings of locale definitions\r\n    test_codecvt();\r\n    test_ctype();\r\n    test_num_get();\r\n    test_num_put();\r\n    test_numpunct();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/locale3/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\..\\env_minus_md_idl.lst\r\n"
  },
  {
    "path": "tests/tr1/tests/locale3/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <locale>, part 3\r\n#define TEST_NAME \"<locale>, part 3\"\r\n\r\n#include \"tdefs.h\"\r\n#include <iomanip> // for get/put_money\r\n#include <iterator>\r\n#include <locale>\r\n#include <sstream>\r\n#include <string>\r\n#include <time.h>\r\n\r\n#define ADD_FACET(loc, pfac) STD locale(loc, pfac)\r\n#define HAS_FACET(loc, Fac)  STD has_facet<Fac>(loc)\r\n#define USE_FACET(loc, Fac)  STD use_facet<Fac>(loc)\r\n\r\nSTD locale loc;\r\n\r\nvoid test_collate() { // test collate<char>\r\n    typedef STD collate<char> Myfac;\r\n    const Myfac* pf       = &USE_FACET(loc, Myfac);\r\n    STD locale loc_byname = ADD_FACET(loc, new STD collate_byname<char>(\"C\"));\r\n\r\n    STD locale loc_byname_str = ADD_FACET(loc, (new STD collate_byname<char>(STD string(\"C\"))));\r\n\r\n    STD locale::id* pid      = &pf->id;\r\n    Myfac::char_type* pc     = (char*) nullptr;\r\n    Myfac::string_type* pstr = (STD string*) nullptr;\r\n    const STD string abc(\"abc\"), abd(\"abd\");\r\n    STD string xabc = pf->transform(&abc[0], &abc[0] + 3);\r\n    STD string xabd = pf->transform(&abd[0], &abd[0] + 3);\r\n\r\n    pid  = pid; // to quiet diagnostics\r\n    pc   = pc;\r\n    pstr = pstr;\r\n\r\n    CHECK(pf->compare(&abc[0], &abc[0] + 3, &abd[0], &abd[0] + 3));\r\n    CHECK(!pf->compare(&abc[0], &abc[0] + 3, &abc[0], &abc[0] + 3));\r\n    CHECK(xabc < xabd);\r\n\r\n    CHECK(loc(abc, abd));\r\n    CHECK(!loc(abc, abc));\r\n}\r\n\r\nvoid test_messages() { // test messages<char>\r\n    typedef STD messages<char> Myfac;\r\n    const Myfac* pf       = &USE_FACET(loc, Myfac);\r\n    STD locale loc_byname = ADD_FACET(loc, new STD messages_byname<char>(\"C\"));\r\n\r\n    STD locale loc_byname_str = ADD_FACET(loc, (new STD messages_byname<char>(STD string(\"C\"))));\r\n\r\n    const STD messages_base* pbase   = pf;\r\n    STD locale::id* pid              = &pf->id;\r\n    Myfac::char_type* pc             = (char*) nullptr;\r\n    Myfac::string_type* pstr         = (STD string*) nullptr;\r\n    STD messages_base::catalog* pcat = (int*) nullptr;\r\n\r\n    pbase = pbase; // to quiet diagnostics;\r\n    pid   = pid;\r\n    pc    = pc;\r\n    pstr  = pstr;\r\n    pcat  = pcat;\r\n\r\n    STD string dflt(\"default\");\r\n    STD messages_base::catalog cat = pf->open(STD string(\"abc\"), loc);\r\n    STD string msg                 = pf->get(cat, 0, 0, dflt);\r\n    CHECK_STR(msg.c_str(), dflt.c_str());\r\n    pf->close(cat);\r\n}\r\n\r\nstruct Myxmpunct : public STD moneypunct<char, false> { // specify money punctuation\r\nprotected:\r\n    char do_decimal_point() const override { // return decimal point\r\n        return '_';\r\n    }\r\n\r\n    char do_thousands_sep() const override { // return thousands separator\r\n        return ';';\r\n    }\r\n\r\n    STD string do_grouping() const override { // return grouping rule\r\n        return \"\\2\";\r\n    }\r\n\r\n    STD string do_curr_symbol() const override { // return currency symbol\r\n        return \"@@\";\r\n    }\r\n\r\n    STD string do_positive_sign() const override { // return positive sign\r\n        return \"+\";\r\n    }\r\n\r\n    STD string do_negative_sign() const override { // return negative sign\r\n        return \"-\";\r\n    }\r\n\r\n    int do_frac_digits() const override { // return number of fraction digits\r\n        return 4;\r\n    }\r\n\r\n    pattern do_neg_format() const override { // return pattern for negative format\r\n        static STD money_base::pattern pat = {\r\n            {STD money_base::sign, STD money_base::symbol, STD money_base::value, STD money_base::none}};\r\n        return pat;\r\n    }\r\n\r\n    pattern do_pos_format() const override { // return pattern for positive format\r\n        static STD money_base::pattern pat = {\r\n            {STD money_base::sign, STD money_base::none, STD money_base::symbol, STD money_base::value}};\r\n        return pat;\r\n    }\r\n};\r\n\r\nstruct Myxctype2 : public STD ctype<char> { // get protected members\r\n    Myxctype2() { // default construct\r\n    }\r\n\r\n    char do_widen(char ch) const override { // widen a character\r\n        if (ch == '-') {\r\n            return '@';\r\n        } else if (ch == '0') {\r\n            return 'A';\r\n        } else if (ch == '1') {\r\n            return 'b';\r\n        } else {\r\n            return ch;\r\n        }\r\n    }\r\n\r\n    const char* do_widen(const char* first, const char* last,\r\n        char* dest) const override { // widen a character sequence\r\n        for (; first != last; ++first, ++dest) {\r\n            *dest = do_widen(*first);\r\n        }\r\n        return first;\r\n    }\r\n\r\n    char do_narrow(char ch, char) const override { // narrow a character\r\n        if (ch == 'P') {\r\n            return '%';\r\n        } else if (ch == 'K') {\r\n            return ':';\r\n        } else if (ch == 'Z') {\r\n            return 'H';\r\n        } else {\r\n            return ch;\r\n        }\r\n    }\r\n\r\n    const char* do_narrow(\r\n        const char* first, const char* last, char, char* dest) const override { // narrow a character sequence\r\n        for (; first != last; ++first, ++dest) {\r\n            *dest = do_narrow(*first, '\\0');\r\n        }\r\n        return first;\r\n    }\r\n};\r\n\r\nvoid test_money_get() { // test money_get<char, istreambuf_iterator<char> >\r\n    typedef STD istreambuf_iterator<char> Myiter;\r\n    typedef STD money_get<char, Myiter> Myfac;\r\n    const Myfac* pf          = &USE_FACET(loc, Myfac);\r\n    STD locale::id* pid      = &pf->id;\r\n    Myfac::char_type* pc     = (char*) nullptr;\r\n    Myfac::iter_type* pi     = (Myiter*) nullptr;\r\n    Myfac::string_type* pstr = (STD string*) nullptr;\r\n\r\n    pid  = pid; // to quiet diagnostics\r\n    pc   = pc;\r\n    pi   = pi;\r\n    pstr = pstr;\r\n\r\n    STD istringstream istr;\r\n    STD locale loc_mypunct   = ADD_FACET(loc, new Myxmpunct);\r\n    STD ios_base::iostate st = STD ios_base::goodbit;\r\n    Myiter iit0, iit;\r\n\r\n    istr.imbue(loc_mypunct);\r\n\r\n    long double units = 0.0L;\r\n    st                = STD ios_base::goodbit;\r\n    istr.str(\"@@1_0000 \");\r\n    iit = pf->get(Myiter(istr), iit0, false, istr, st, units);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK(units == 10000.0L);\r\n\r\n    STD string digits;\r\n    st = STD ios_base::goodbit;\r\n    istr.str(\"-@@1;23 \");\r\n    iit = pf->get(Myiter(istr), iit0, false, istr, st, digits);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_STR(digits.c_str(), \"-1230000\");\r\n\r\n    units = 0.0L;\r\n    istr.str(\"@@1_0000 \");\r\n    istr >> STD get_money(units);\r\n    CHECK(units == 10000.0L);\r\n\r\n    digits = \"\";\r\n    istr.str(\"-@@1;23 \");\r\n    istr >> STD get_money(digits);\r\n    CHECK_STR(digits.c_str(), \"-1230000\");\r\n\r\n    { // check for widen calls\r\n        STD istringstream istr2(\"-bAA2 \");\r\n        STD locale loc_myctype = ADD_FACET(loc, new Myxctype2);\r\n        istr2.imbue(loc_myctype);\r\n\r\n        units = 0.0L;\r\n        st    = STD ios_base::goodbit;\r\n        iit   = pf->get(Myiter(istr2), iit0, false, istr2, st, units);\r\n        CHECK_INT(*iit, ' ');\r\n        CHECK_DOUBLE(units, -1002.0L);\r\n\r\n        digits = \"\";\r\n        st     = STD ios_base::goodbit;\r\n        istr2.str(\"-b23A \");\r\n        iit = pf->get(Myiter(istr2), iit0, false, istr2, st, digits);\r\n        CHECK_INT(*iit, ' ');\r\n        CHECK_STR(digits.c_str(), \"@b23A\");\r\n    }\r\n}\r\n\r\nvoid test_money_put() { // test money_put<char, ostreambuf_iterator<char> >\r\n    typedef STD ostreambuf_iterator<char> Myiter;\r\n    typedef STD money_put<char, Myiter> Myfac;\r\n    const Myfac* pf          = &USE_FACET(loc, Myfac);\r\n    STD locale::id* pid      = &pf->id;\r\n    Myfac::char_type* pc     = (char*) nullptr;\r\n    Myfac::iter_type* pi     = (Myiter*) nullptr;\r\n    Myfac::string_type* pstr = (STD string*) nullptr;\r\n\r\n    pid  = pid; // to quiet diagnostics\r\n    pc   = pc;\r\n    pi   = pi;\r\n    pstr = pstr;\r\n\r\n    STD ostringstream ostr;\r\n    STD locale loc_mypunct = ADD_FACET(loc, new Myxmpunct);\r\n    Myiter oit(ostr);\r\n\r\n    ostr.imbue(loc_mypunct);\r\n\r\n    oit = pf->put(oit, false, ostr, '*', 10000.0L);\r\n    CHECK_STR(ostr.str().c_str(), \"+1_0000\");\r\n\r\n    ostr.str(\"\");\r\n    oit = Myiter(ostr);\r\n    ostr.setf(STD ios_base::showbase);\r\n    ostr.width(14);\r\n    oit = pf->put(oit, false, ostr, '*', STD string(\"-1234567\"));\r\n    CHECK_STR(ostr.str().c_str(), \"**-@@1;23_4567\");\r\n\r\n    ostr.str(\"\");\r\n    ostr << STD put_money(10000.0L);\r\n    CHECK_STR(ostr.str().c_str(), \"+@@1_0000\");\r\n\r\n    ostr.str(\"\");\r\n    ostr << STD put_money(STD string(\"-1234567\"));\r\n    CHECK_STR(ostr.str().c_str(), \"-@@1;23_4567\");\r\n\r\n    { // check for widen calls\r\n        STD ostringstream ostr2;\r\n        STD locale loc_myctype = ADD_FACET(loc, new Myxctype2);\r\n        ostr2.imbue(loc_myctype);\r\n\r\n        ostr2.str(\"\");\r\n        oit = Myiter(ostr2);\r\n        ostr2.setf(STD ios_base::showbase);\r\n        oit = pf->put(oit, false, ostr2, '*', -10002.0L);\r\n        CHECK_STR(ostr2.str().c_str(), \"-bAAA2\");\r\n\r\n        ostr2.str(\"\");\r\n        oit = Myiter(ostr2);\r\n        ostr2.setf(STD ios_base::showbase);\r\n        ostr2.width(14);\r\n        oit = pf->put(oit, false, ostr2, '*', STD string(\"@345Ab\"));\r\n        CHECK_STR(ostr2.str().c_str(), \"********-345Ab\");\r\n    }\r\n}\r\n\r\nvoid test_moneypunct() { // test moneypunct<char, false>\r\n    typedef STD moneypunct<char, false> Myfac;\r\n    STD locale loc_mypunct = ADD_FACET(loc, new Myxmpunct);\r\n    const Myfac* pf        = &USE_FACET(loc_mypunct, Myfac);\r\n    STD locale loc_byname  = ADD_FACET(loc, (new STD moneypunct_byname<char, false>(\"C\")));\r\n\r\n    STD locale loc_byname_str = ADD_FACET(loc, (new STD moneypunct_byname<char, false>(STD string(\"C\"))));\r\n\r\n    const STD money_base* pbase = pf;\r\n    STD locale::id* pid         = &pf->id;\r\n    Myfac::char_type* pc        = (char*) nullptr;\r\n    Myfac::string_type* pstr    = (STD string*) nullptr;\r\n    STD money_base::part part   = STD money_base::space;\r\n    STD money_base::pattern npat;\r\n\r\n    pid   = pid; // to quiet diagnostics\r\n    pc    = pc;\r\n    pstr  = pstr;\r\n    pbase = pbase;\r\n    part  = part;\r\n\r\n    CHECK_INT(pf->decimal_point(), '_');\r\n    CHECK_INT(pf->thousands_sep(), ';');\r\n    CHECK_STR(pf->grouping().c_str(), \"\\2\");\r\n    CHECK_STR(pf->curr_symbol().c_str(), \"@@\");\r\n    CHECK_STR(pf->positive_sign().c_str(), \"+\");\r\n    CHECK_STR(pf->negative_sign().c_str(), \"-\");\r\n    CHECK_INT(pf->frac_digits(), 4);\r\n\r\n    npat = pf->neg_format();\r\n    CHECK_INT(npat.field[0], STD money_base::sign);\r\n    CHECK_INT(npat.field[1], STD money_base::symbol);\r\n    CHECK_INT(npat.field[2], STD money_base::value);\r\n    CHECK_INT(npat.field[3], STD money_base::none);\r\n\r\n    npat = pf->pos_format();\r\n    CHECK_INT(npat.field[0], STD money_base::sign);\r\n    CHECK_INT(npat.field[1], STD money_base::none);\r\n    CHECK_INT(npat.field[2], STD money_base::symbol);\r\n    CHECK_INT(npat.field[3], STD money_base::value);\r\n    CHECK(!Myfac::intl);\r\n\r\n    { // test international punctuation\r\n        typedef STD moneypunct<char, true> Myfac2;\r\n        const Myfac2* pf2 = &USE_FACET(loc_mypunct, Myfac2);\r\n        STD money_base::pattern npat2;\r\n\r\n        npat2 = pf2->neg_format();\r\n        CHECK_INT(npat2.field[0], STD money_base::symbol);\r\n        CHECK_INT(npat2.field[1], STD money_base::sign);\r\n        CHECK_INT(npat2.field[2], STD money_base::none);\r\n        CHECK_INT(npat2.field[3], STD money_base::value);\r\n\r\n        npat2 = pf2->pos_format();\r\n        CHECK_INT(npat2.field[0], STD money_base::symbol);\r\n        CHECK_INT(npat2.field[1], STD money_base::sign);\r\n        CHECK_INT(npat2.field[2], STD money_base::none);\r\n        CHECK_INT(npat2.field[3], STD money_base::value);\r\n        CHECK(Myfac2::intl);\r\n    }\r\n}\r\n\r\nvoid test_time_get() { // test time_get<char, istreambuf_iterator<char> >\r\n    typedef STD istreambuf_iterator<char> Myiter;\r\n    typedef STD time_get<char, Myiter> Myfac;\r\n    const Myfac* pf       = &USE_FACET(loc, Myfac);\r\n    STD locale loc_byname = ADD_FACET(loc, (new STD time_get_byname<char, STD istreambuf_iterator<char>>(\"C\")));\r\n\r\n    STD locale loc_byname_str =\r\n        ADD_FACET(loc, (new STD time_get_byname<char, STD istreambuf_iterator<char>>(STD string(\"C\"))));\r\n\r\n    const STD time_base* pbase = pf;\r\n    STD locale::id* pid        = &pf->id;\r\n    Myfac::char_type* pc       = (char*) nullptr;\r\n    Myfac::iter_type* pi       = (Myiter*) nullptr;\r\n\r\n    STD time_base::dateorder order_tab[] = {\r\n        STD time_base::no_order, STD time_base::dmy, STD time_base::mdy, STD time_base::ymd, STD time_base::ydm};\r\n\r\n    pbase = pbase; // to quiet diagnostics;\r\n    pid   = pid;\r\n    pc    = pc;\r\n    pi    = pi;\r\n\r\n    STD time_base::dateorder order = pf->date_order();\r\n    CHECK(order == order_tab[0] || order == order_tab[1] || order == order_tab[2] || order == order_tab[3]\r\n          || order == order_tab[4]);\r\n\r\n    STD istringstream istr;\r\n    STD ios_base::iostate st = STD ios_base::goodbit;\r\n    Myiter iit0, iit(istr);\r\n    CSTD tm tvec{};\r\n\r\n    istr.str(\"Monday Tue \");\r\n    st  = STD ios_base::goodbit;\r\n    iit = pf->get_weekday(Myiter(istr), iit0, istr, st, &tvec);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_INT(tvec.tm_wday, 1);\r\n    iit = pf->get_weekday(++iit, iit0, istr, st, &tvec);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_INT(tvec.tm_wday, 2);\r\n\r\n    istr.str(\"October Nov \");\r\n    st  = STD ios_base::goodbit;\r\n    iit = pf->get_monthname(Myiter(istr), iit0, istr, st, &tvec);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_INT(tvec.tm_mon, 9);\r\n    iit = pf->get_monthname(++iit, iit0, istr, st, &tvec);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_INT(tvec.tm_mon, 10);\r\n\r\n    istr.str(\"1978 \");\r\n    st  = STD ios_base::goodbit;\r\n    iit = pf->get_year(Myiter(istr), iit0, istr, st, &tvec);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_INT(tvec.tm_year, 78);\r\n\r\n    // test time and date against time_put output\r\n    typedef STD ostreambuf_iterator<char> Myoiter;\r\n    typedef STD time_put<char, Myoiter> Myofac;\r\n    const Myofac* pof = &USE_FACET(loc, Myofac);\r\n    STD ostringstream ostr;\r\n    CSTD tm tvec0{};\r\n    CSTD tm tvecx{};\r\n\r\n    tvecx.tm_sec   = 15;\r\n    tvecx.tm_min   = 55;\r\n    tvecx.tm_hour  = 6;\r\n    tvecx.tm_mday  = 2;\r\n    tvecx.tm_mon   = 11;\r\n    tvecx.tm_year  = 79;\r\n    tvecx.tm_isdst = -1;\r\n    CSTD mktime(&tvecx);\r\n\r\n    pof->put(Myoiter(ostr), ostr, '*', &tvecx, 'X', '\\0');\r\n    ostr << ' ';\r\n    istr.str(ostr.str());\r\n    tvec = tvec0;\r\n\r\n    st  = STD ios_base::goodbit;\r\n    iit = pf->get_time(Myiter(istr), iit0, istr, st, &tvec);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_INT(tvec.tm_sec, 15);\r\n    CHECK_INT(tvec.tm_min, 55);\r\n    CHECK_INT(tvec.tm_hour, 6);\r\n\r\n    ostr.str(\"\");\r\n    pof->put(Myoiter(ostr), ostr, '*', &tvecx, 'x', '\\0');\r\n    ostr << ' ';\r\n    istr.str(ostr.str());\r\n    tvec = tvec0;\r\n\r\n    st  = STD ios_base::goodbit;\r\n    iit = pf->get_date(Myiter(istr), iit0, istr, st, &tvec);\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_INT(tvec.tm_mday, 2);\r\n    CHECK_INT(tvec.tm_mon, 11);\r\n    CHECK_INT(tvec.tm_year, 79);\r\n\r\n    tvec = tvec0;\r\n    istr.str(\"Mon \");\r\n    st  = STD ios_base::goodbit;\r\n    iit = pf->get(Myiter(istr), iit0, istr, st, &tvec, 'a');\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_INT(tvec.tm_wday, 1);\r\n\r\n    tvec = tvec0;\r\n    istr.str(\"October \");\r\n    st  = STD ios_base::goodbit;\r\n    iit = pf->get(Myiter(istr), iit0, istr, st, &tvec, 'b');\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_INT(tvec.tm_mon, 9);\r\n\r\n    tvec = tvec0;\r\n    istr.str(\"  Mon \");\r\n    st              = STD ios_base::goodbit;\r\n    const char* fmt = \" %a\";\r\n    iit             = pf->get(Myiter(istr), iit0, istr, st, &tvec, fmt, fmt + CSTD strlen(fmt));\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_INT(tvec.tm_wday, 1);\r\n\r\n    tvec = tvec0;\r\n    istr.str(\"  October \");\r\n    st  = STD ios_base::goodbit;\r\n    fmt = \" %b\";\r\n    iit = pf->get(Myiter(istr), iit0, istr, st, &tvec, fmt, fmt + CSTD strlen(fmt));\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_INT(tvec.tm_mon, 9);\r\n\r\n    tvec = tvec0;\r\n    istr.str(\"December 02 06:55:15 1979 \");\r\n    st  = STD ios_base::goodbit;\r\n    fmt = \" %c\";\r\n    iit = pf->get(Myiter(istr), iit0, istr, st, &tvec, fmt, fmt + CSTD strlen(fmt));\r\n    CHECK_INT(*iit, ' ');\r\n    CHECK_INT(tvec.tm_year, 79);\r\n\r\n    { // check for narrow/widen calls\r\n        STD istringstream istr2(\"12K34K56 \");\r\n        STD locale loc_myctype = ADD_FACET(loc, new Myxctype2);\r\n        istr2.imbue(loc_myctype);\r\n\r\n        st  = STD ios_base::goodbit;\r\n        iit = pf->get_time(Myiter(istr2), iit0, istr2, st, &tvec);\r\n        CHECK_INT(*iit, ' ');\r\n        CHECK_INT(tvec.tm_sec, 56);\r\n        CHECK_INT(tvec.tm_min, 34);\r\n        CHECK_INT(tvec.tm_hour, 12);\r\n    }\r\n}\r\n\r\nvoid test_time_put() { // test time_put<char, ostreambuf_iterator<char> >\r\n    typedef STD ostreambuf_iterator<char> Myiter;\r\n    typedef STD time_put<char, Myiter> Myfac;\r\n    const Myfac* pf       = &USE_FACET(loc, Myfac);\r\n    STD locale loc_byname = ADD_FACET(loc, (new STD time_put_byname<char, STD ostreambuf_iterator<char>>(\"C\")));\r\n\r\n    STD locale loc_byname_str =\r\n        ADD_FACET(loc, (new STD time_put_byname<char, STD ostreambuf_iterator<char>>(STD string(\"C\"))));\r\n\r\n    STD locale::id* pid  = &pf->id;\r\n    Myfac::char_type* pc = (char*) nullptr;\r\n    Myfac::iter_type* pi = (Myiter*) nullptr;\r\n\r\n    pid = pid; // to quiet diagnostics;\r\n    pc  = pc;\r\n    pi  = pi;\r\n\r\n    STD ostringstream ostr;\r\n    CSTD tm tvec{};\r\n\r\n    tvec.tm_sec   = 15;\r\n    tvec.tm_min   = 55;\r\n    tvec.tm_hour  = 6;\r\n    tvec.tm_mday  = 2;\r\n    tvec.tm_mon   = 11;\r\n    tvec.tm_year  = 79;\r\n    tvec.tm_isdst = -1;\r\n    CSTD mktime(&tvec);\r\n\r\n    pf->put(Myiter(ostr), ostr, '*', &tvec, 'a', '\\0');\r\n    CHECK_STR(ostr.str().c_str(), \"Sun\");\r\n\r\n    const char fmt[] = {\"%A %B %d %H:%M:%S %Y %%AM\"};\r\n    ostr.str(\"\");\r\n    pf->put(Myiter(ostr), ostr, '*', &tvec, fmt, fmt + sizeof(fmt) - 1);\r\n    CHECK_STR(ostr.str().c_str(), \"Sunday December 02 06:55:15 1979 %AM\");\r\n\r\n    { // check for narrow/widen calls\r\n        STD ostringstream ostr2;\r\n        STD locale loc_myctype = ADD_FACET(loc, new Myxctype2);\r\n        ostr2.imbue(loc_myctype);\r\n\r\n        pf->put(Myiter(ostr2), ostr2, '*', &tvec, 'H', '\\0');\r\n        CHECK_STR(ostr2.str().c_str(), \"06\");\r\n\r\n        const char fmt2[] = {\"%A %B %d PZ:PM:PS %Y %%AM\"};\r\n        ostr2.str(\"\");\r\n        pf->put(Myiter(ostr2), ostr2, '*', &tvec, fmt2, fmt2 + sizeof(fmt2) / sizeof(char) - 1);\r\n        CHECK_STR(ostr2.str().c_str(), \"Sunday December 02 06:55:15 1979 %AM\");\r\n    }\r\n}\r\n\r\nvoid test_main() { // test basic workings of locale definitions\r\n    test_collate();\r\n    test_messages();\r\n    test_money_get();\r\n    test_money_put();\r\n    test_moneypunct();\r\n    test_time_get();\r\n    test_time_put();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/locale4/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\..\\env_minus_md_idl.lst\r\n"
  },
  {
    "path": "tests/tr1/tests/locale4/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <locale>, part 4\r\n#define TEST_NAME \"<locale>, part 4\"\r\n\r\n#include \"tdefs.h\"\r\n#include <locale>\r\n#include <sstream>\r\n#include <string>\r\n#include <time.h>\r\n#include <wchar.h>\r\n\r\n#define ADD_FACET(loc, pfac) STD locale(loc, pfac)\r\n#define HAS_FACET(loc, Fac)  STD has_facet<Fac>(loc)\r\n#define USE_FACET(loc, Fac)  STD use_facet<Fac>(loc)\r\n\r\nSTD locale loc;\r\n\r\nvoid test_collate() { // test collate<wchar_t>\r\n    typedef STD collate<wchar_t> Myfac;\r\n    const Myfac* pf          = &USE_FACET(loc, Myfac);\r\n    STD locale loc_byname    = ADD_FACET(loc, new STD collate_byname<wchar_t>(\"C\"));\r\n    STD locale::id* pid      = &pf->id;\r\n    Myfac::char_type* pc     = (wchar_t*) nullptr;\r\n    Myfac::string_type* pstr = (STD wstring*) nullptr;\r\n    const STD wstring abc(L\"abc\"), abd(L\"abd\");\r\n    STD wstring xabc = pf->transform(&abc[0], &abc[0] + 3);\r\n    STD wstring xabd = pf->transform(&abd[0], &abd[0] + 3);\r\n\r\n    pid  = pid; // to quiet diagnostics\r\n    pc   = pc;\r\n    pstr = pstr;\r\n\r\n    CHECK(pf->compare(&abc[0], &abc[0] + 3, &abd[0], &abd[0] + 3));\r\n    CHECK(!pf->compare(&abc[0], &abc[0] + 3, &abc[0], &abc[0] + 3));\r\n    CHECK(xabc < xabd);\r\n\r\n    CHECK(loc(abc, abd));\r\n    CHECK(!loc(abc, abc));\r\n}\r\n\r\nvoid test_messages() { // test messages<wchar_t>\r\n    typedef STD messages<wchar_t> Myfac;\r\n    const Myfac* pf                  = &USE_FACET(loc, Myfac);\r\n    STD locale loc_byname            = ADD_FACET(loc, new STD messages_byname<wchar_t>(\"C\"));\r\n    const STD messages_base* pbase   = pf;\r\n    STD locale::id* pid              = &pf->id;\r\n    Myfac::char_type* pc             = (wchar_t*) nullptr;\r\n    Myfac::string_type* pstr         = (STD wstring*) nullptr;\r\n    STD messages_base::catalog* pcat = (int*) nullptr;\r\n\r\n    pbase = pbase; // to quiet diagnostics;\r\n    pid   = pid;\r\n    pc    = pc;\r\n    pstr  = pstr;\r\n    pcat  = pcat;\r\n\r\n    STD wstring dflt(L\"default\");\r\n    STD messages_base::catalog cat = pf->open(STD string(\"abc\"), loc);\r\n    STD wstring msg                = pf->get(cat, 0, 0, dflt);\r\n    CHECK_WSTR(msg.c_str(), dflt.c_str());\r\n    pf->close(cat);\r\n}\r\n\r\nstruct Myxmpunct : public STD moneypunct<wchar_t, false> { // specify money punctuation\r\nprotected:\r\n    wchar_t do_decimal_point() const override { // return decimal point\r\n        return L'_';\r\n    }\r\n\r\n    wchar_t do_thousands_sep() const override { // return thousands separator\r\n        return L';';\r\n    }\r\n\r\n    STD string do_grouping() const override { // return grouping rule\r\n        return \"\\2\";\r\n    }\r\n\r\n    STD wstring do_curr_symbol() const override { // return currency symbol\r\n        return L\"@@\";\r\n    }\r\n\r\n    STD wstring do_positive_sign() const override { // return positive sign\r\n        return L\"+\";\r\n    }\r\n\r\n    STD wstring do_negative_sign() const override { // return negative sign\r\n        return L\"-\";\r\n    }\r\n\r\n    int do_frac_digits() const override { // return number of fraction digits\r\n        return 4;\r\n    }\r\n\r\n    pattern do_neg_format() const override { // return pattern for negative format\r\n        static STD money_base::pattern pat = {\r\n            {STD money_base::sign, STD money_base::symbol, STD money_base::value, STD money_base::none}};\r\n        return pat;\r\n    }\r\n\r\n    pattern do_pos_format() const override { // return pattern for positive format\r\n        static STD money_base::pattern pat = {\r\n            {STD money_base::sign, STD money_base::none, STD money_base::symbol, STD money_base::value}};\r\n        return pat;\r\n    }\r\n};\r\n\r\nstruct Myxctype2 : public STD ctype<wchar_t> { // get protected members\r\n    Myxctype2() { // default construct\r\n    }\r\n\r\n    wchar_t do_widen(char ch) const override { // widen a character\r\n        if (ch == '-') {\r\n            return L'@';\r\n        } else if (ch == '0') {\r\n            return L'A';\r\n        } else if (ch == '1') {\r\n            return L'b';\r\n        } else {\r\n            return (wchar_t) ch;\r\n        }\r\n    }\r\n\r\n    const char* do_widen(const char* first, const char* last,\r\n        wchar_t* dest) const override { // widen a character sequence\r\n        for (; first != last; ++first, ++dest) {\r\n            *dest = do_widen(*first);\r\n        }\r\n        return first;\r\n    }\r\n\r\n    char do_narrow(wchar_t ch, char) const override { // narrow a character\r\n        if (ch == L'P') {\r\n            return '%';\r\n        } else if (ch == L'K') {\r\n            return ':';\r\n        } else if (ch == L'Z') {\r\n            return 'H';\r\n        } else {\r\n            return (char) ch;\r\n        }\r\n    }\r\n\r\n    const wchar_t* do_narrow(\r\n        const wchar_t* first, const wchar_t* last, char, char* dest) const override { // narrow a character sequence\r\n        for (; first != last; ++first, ++dest) {\r\n            *dest = do_narrow(*first, '\\0');\r\n        }\r\n        return first;\r\n    }\r\n};\r\n\r\nvoid test_money_get() { // test money_get<wchar_t, istreambuf_iterator<wchar_t> >\r\n    typedef STD istreambuf_iterator<wchar_t> Myiter;\r\n    typedef STD money_get<wchar_t, Myiter> Myfac;\r\n    typedef STD moneypunct<wchar_t, false> Mympunct;\r\n    const Myfac* pf          = &USE_FACET(loc, Myfac);\r\n    STD locale::id* pid      = &pf->id;\r\n    Myfac::char_type* pc     = (wchar_t*) nullptr;\r\n    Myfac::iter_type* pi     = (Myiter*) nullptr;\r\n    Myfac::string_type* pstr = (STD wstring*) nullptr;\r\n\r\n    pid  = pid; // to quiet diagnostics\r\n    pc   = pc;\r\n    pi   = pi;\r\n    pstr = pstr;\r\n\r\n    STD wistringstream istr;\r\n    STD locale loc_mympunct  = ADD_FACET(loc, (Mympunct*) new Myxmpunct);\r\n    STD ios_base::iostate st = STD ios_base::goodbit;\r\n    Myiter iit0, iit;\r\n\r\n    istr.imbue(loc_mympunct);\r\n\r\n    long double units = 0.0L;\r\n    st                = STD ios_base::goodbit;\r\n    istr.str(L\"@@1_0000 \");\r\n    iit = pf->get(Myiter(istr), iit0, false, istr, st, units);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK(units == 10000.0L);\r\n\r\n    STD wstring digits;\r\n    st = STD ios_base::goodbit;\r\n    istr.str(L\"-@@1;23 \");\r\n    iit = pf->get(Myiter(istr), iit0, false, istr, st, digits);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_WSTR(digits.c_str(), L\"-1230000\");\r\n\r\n    { // check for widen calls\r\n        STD wistringstream istr2(L\"-bAA2 \");\r\n        STD locale loc_myctype = ADD_FACET(loc, new Myxctype2);\r\n        istr2.imbue(loc_myctype);\r\n\r\n        units = 0.0L;\r\n        st    = STD ios_base::goodbit;\r\n        iit   = pf->get(Myiter(istr2), iit0, false, istr2, st, units);\r\n        CHECK_INT(*iit, L' ');\r\n        CHECK_DOUBLE(units, -1002.0L);\r\n\r\n        digits = L\"\";\r\n        st     = STD ios_base::goodbit;\r\n        istr2.str(L\"-b23A \");\r\n        iit = pf->get(Myiter(istr2), iit0, false, istr2, st, digits);\r\n        CHECK_INT(*iit, L' ');\r\n        CHECK_WSTR(digits.c_str(), L\"@b23A\");\r\n    }\r\n}\r\n\r\nvoid test_money_put() { // test money_put<wchar_t, ostreambuf_iterator<wchar_t> >\r\n    typedef STD ostreambuf_iterator<wchar_t> Myiter;\r\n    typedef STD money_put<wchar_t, Myiter> Myfac;\r\n    typedef STD moneypunct<wchar_t, false> Mympunct;\r\n    const Myfac* pf          = &USE_FACET(loc, Myfac);\r\n    STD locale::id* pid      = &pf->id;\r\n    Myfac::char_type* pc     = (wchar_t*) nullptr;\r\n    Myfac::iter_type* pi     = (Myiter*) nullptr;\r\n    Myfac::string_type* pstr = (STD wstring*) nullptr;\r\n\r\n    pid  = pid; // to quiet diagnostics\r\n    pc   = pc;\r\n    pi   = pi;\r\n    pstr = pstr;\r\n\r\n    STD wostringstream ostr;\r\n    STD locale loc_mympunct = ADD_FACET(loc, (Mympunct*) new Myxmpunct);\r\n    Myiter oit(ostr);\r\n\r\n    ostr.imbue(loc_mympunct);\r\n\r\n    oit = pf->put(oit, false, ostr, L'*', 10000.0L);\r\n    CHECK_WSTR(ostr.str().c_str(), L\"+1_0000\");\r\n\r\n    ostr.str(L\"\");\r\n    oit = Myiter(ostr);\r\n    ostr.setf(STD ios_base::showbase);\r\n    ostr.width(14);\r\n    oit = pf->put(oit, false, ostr, L'*', STD wstring(L\"-1234567\"));\r\n    CHECK_WSTR(ostr.str().c_str(), L\"**-@@1;23_4567\");\r\n\r\n    { // check for widen calls\r\n        STD wostringstream ostr2;\r\n        STD locale loc_myctype = ADD_FACET(loc, new Myxctype2);\r\n        ostr2.imbue(loc_myctype);\r\n\r\n        ostr2.str(L\"\");\r\n        oit = Myiter(ostr2);\r\n        ostr2.setf(STD ios_base::showbase);\r\n        oit = pf->put(oit, false, ostr2, L'*', -10002.0L);\r\n        CHECK_WSTR(ostr2.str().c_str(), L\"-bAAA2\");\r\n\r\n        ostr2.str(L\"\");\r\n        oit = Myiter(ostr2);\r\n        ostr2.setf(STD ios_base::showbase);\r\n        ostr2.width(14);\r\n        oit = pf->put(oit, false, ostr2, L'*', STD wstring(L\"@345Ab\"));\r\n        CHECK_WSTR(ostr2.str().c_str(), L\"********-345Ab\");\r\n    }\r\n}\r\n\r\nvoid test_moneypunct() { // test moneypunct<wchar_t>\r\n    typedef STD moneypunct<wchar_t, false> Myfac;\r\n    STD locale loc_mypunct = ADD_FACET(loc, (Myfac*) new Myxmpunct);\r\n\r\n    { // test local punctuation\r\n        const Myfac* pf             = &USE_FACET(loc_mypunct, Myfac);\r\n        const STD money_base* pbase = pf;\r\n        STD locale::id* pid         = &pf->id;\r\n        Myfac::char_type* pc        = (wchar_t*) nullptr;\r\n        Myfac::string_type* pstr    = (STD wstring*) nullptr;\r\n        STD money_base::part part   = STD money_base::none;\r\n        STD money_base::pattern npat;\r\n\r\n        pid   = pid; // to quiet diagnostics\r\n        pc    = pc;\r\n        pstr  = pstr;\r\n        pbase = pbase;\r\n        part  = part;\r\n\r\n        CHECK_INT(pf->decimal_point(), L'_');\r\n        CHECK_INT(pf->thousands_sep(), L';');\r\n        CHECK_STR(pf->grouping().c_str(), \"\\2\");\r\n        CHECK_WSTR(pf->curr_symbol().c_str(), L\"@@\");\r\n        CHECK_WSTR(pf->positive_sign().c_str(), L\"+\");\r\n        CHECK_WSTR(pf->negative_sign().c_str(), L\"-\");\r\n        CHECK_INT(pf->frac_digits(), 4);\r\n\r\n        npat = pf->neg_format();\r\n        CHECK_INT(npat.field[0], STD money_base::sign);\r\n        CHECK_INT(npat.field[1], STD money_base::symbol);\r\n        CHECK_INT(npat.field[2], STD money_base::value);\r\n        CHECK_INT(npat.field[3], STD money_base::none);\r\n\r\n        npat = pf->pos_format();\r\n        CHECK_INT(npat.field[0], STD money_base::sign);\r\n        CHECK_INT(npat.field[1], STD money_base::none);\r\n        CHECK_INT(npat.field[2], STD money_base::symbol);\r\n        CHECK_INT(npat.field[3], STD money_base::value);\r\n        CHECK(!Myfac::intl);\r\n    }\r\n\r\n    { // test international punctuation\r\n        typedef STD moneypunct<wchar_t, true> Myfac2;\r\n        const Myfac2* pf = &USE_FACET(loc_mypunct, Myfac2);\r\n        STD money_base::pattern npat;\r\n\r\n        npat = pf->neg_format();\r\n        CHECK_INT(npat.field[0], STD money_base::symbol);\r\n        CHECK_INT(npat.field[1], STD money_base::sign);\r\n        CHECK_INT(npat.field[2], STD money_base::none);\r\n        CHECK_INT(npat.field[3], STD money_base::value);\r\n\r\n        npat = pf->pos_format();\r\n        CHECK_INT(npat.field[0], STD money_base::symbol);\r\n        CHECK_INT(npat.field[1], STD money_base::sign);\r\n        CHECK_INT(npat.field[2], STD money_base::none);\r\n        CHECK_INT(npat.field[3], STD money_base::value);\r\n        CHECK(Myfac2::intl);\r\n    }\r\n}\r\n\r\nvoid test_time_get() { // test time_get<wchar_t, istreambuf_iterator<wchar_t> >\r\n    typedef STD istreambuf_iterator<wchar_t> Myiter;\r\n    typedef STD time_get<wchar_t, Myiter> Myfac;\r\n    const Myfac* pf       = &USE_FACET(loc, Myfac);\r\n    STD locale loc_byname = ADD_FACET(loc, (new STD time_get_byname<wchar_t, STD istreambuf_iterator<wchar_t>>(\"C\")));\r\n    const STD time_base* pbase = pf;\r\n    STD locale::id* pid        = &pf->id;\r\n    Myfac::char_type* pc       = (wchar_t*) nullptr;\r\n    Myfac::iter_type* pi       = (Myiter*) nullptr;\r\n\r\n    STD time_base::dateorder order_tab[] = {\r\n        STD time_base::no_order, STD time_base::dmy, STD time_base::mdy, STD time_base::ymd, STD time_base::ydm};\r\n\r\n    pbase = pbase; // to quiet diagnostics;\r\n    pid   = pid;\r\n    pc    = pc;\r\n    pi    = pi;\r\n\r\n    STD time_base::dateorder order = pf->date_order();\r\n    CHECK(order == order_tab[0] || order == order_tab[1] || order == order_tab[2] || order == order_tab[3]\r\n          || order == order_tab[4]);\r\n\r\n    STD wistringstream istr;\r\n    STD ios_base::iostate st = STD ios_base::goodbit;\r\n    Myiter iit0, iit(istr);\r\n    CSTD tm tvec{};\r\n\r\n    istr.str(L\"Monday Tue \");\r\n    st  = STD ios_base::goodbit;\r\n    iit = pf->get_weekday(Myiter(istr), iit0, istr, st, &tvec);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_INT(tvec.tm_wday, 1);\r\n    iit = pf->get_weekday(++iit, iit0, istr, st, &tvec);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_INT(tvec.tm_wday, 2);\r\n\r\n    istr.str(L\"October Nov \");\r\n    st  = STD ios_base::goodbit;\r\n    iit = pf->get_monthname(Myiter(istr), iit0, istr, st, &tvec);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_INT(tvec.tm_mon, 9);\r\n    iit = pf->get_monthname(++iit, iit0, istr, st, &tvec);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_INT(tvec.tm_mon, 10);\r\n\r\n    istr.str(L\"1978 \");\r\n    st  = STD ios_base::goodbit;\r\n    iit = pf->get_year(Myiter(istr), iit0, istr, st, &tvec);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_INT(tvec.tm_year, 78);\r\n\r\n    // test time and date against time_put output\r\n    typedef STD ostreambuf_iterator<wchar_t> Myoiter;\r\n    typedef STD time_put<wchar_t, Myoiter> Myofac;\r\n    const Myofac* pof = &USE_FACET(loc, Myofac);\r\n    STD wostringstream ostr;\r\n    CSTD tm tvec0{};\r\n    CSTD tm tvecx{};\r\n\r\n    tvecx.tm_sec   = 15;\r\n    tvecx.tm_min   = 55;\r\n    tvecx.tm_hour  = 6;\r\n    tvecx.tm_mday  = 2;\r\n    tvecx.tm_mon   = 11;\r\n    tvecx.tm_year  = 79;\r\n    tvecx.tm_isdst = -1;\r\n    CSTD mktime(&tvecx);\r\n\r\n    pof->put(Myoiter(ostr), ostr, L'*', &tvecx, L'X', L'\\0');\r\n    ostr << L' ';\r\n    istr.str(ostr.str());\r\n    tvec = tvec0;\r\n\r\n    st  = STD ios_base::goodbit;\r\n    iit = pf->get_time(Myiter(istr), iit0, istr, st, &tvec);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_INT(tvec.tm_sec, 15);\r\n    CHECK_INT(tvec.tm_min, 55);\r\n    CHECK_INT(tvec.tm_hour, 6);\r\n\r\n    ostr.str(L\"\");\r\n    pof->put(Myoiter(ostr), ostr, L'*', &tvecx, L'x', L'\\0');\r\n    ostr << L' ';\r\n    istr.str(ostr.str());\r\n    tvec = tvec0;\r\n\r\n    st  = STD ios_base::goodbit;\r\n    iit = pf->get_date(Myiter(istr), iit0, istr, st, &tvec);\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_INT(tvec.tm_mday, 2);\r\n    CHECK_INT(tvec.tm_mon, 11);\r\n    CHECK_INT(tvec.tm_year, 79);\r\n\r\n    tvec = tvec0;\r\n    istr.str(L\"Mon \");\r\n    st  = STD ios_base::goodbit;\r\n    iit = pf->get(Myiter(istr), iit0, istr, st, &tvec, 'a');\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_INT(tvec.tm_wday, 1);\r\n\r\n    tvec = tvec0;\r\n    istr.str(L\"October \");\r\n    st  = STD ios_base::goodbit;\r\n    iit = pf->get(Myiter(istr), iit0, istr, st, &tvec, 'b');\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_INT(tvec.tm_mon, 9);\r\n\r\n    tvec = tvec0;\r\n    istr.str(L\"  Mon \");\r\n    st                 = STD ios_base::goodbit;\r\n    const wchar_t* fmt = L\" %a\";\r\n    iit                = pf->get(Myiter(istr), iit0, istr, st, &tvec, fmt, fmt + CSTD wcslen(fmt));\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_INT(tvec.tm_wday, 1);\r\n\r\n    tvec = tvec0;\r\n    istr.str(L\"  October \");\r\n    st  = STD ios_base::goodbit;\r\n    fmt = L\" %b\";\r\n    iit = pf->get(Myiter(istr), iit0, istr, st, &tvec, fmt, fmt + CSTD wcslen(fmt));\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_INT(tvec.tm_mon, 9);\r\n\r\n    tvec = tvec0;\r\n    istr.str(L\"December 02 06:55:15 1979 \");\r\n    st  = STD ios_base::goodbit;\r\n    fmt = L\" %c\";\r\n    iit = pf->get(Myiter(istr), iit0, istr, st, &tvec, fmt, fmt + CSTD wcslen(fmt));\r\n    CHECK_INT(*iit, L' ');\r\n    CHECK_INT(tvec.tm_year, 79);\r\n\r\n    { // check for narrow/widen calls\r\n        STD wistringstream istr2(L\"12K34K56 \");\r\n        STD locale loc_myctype = ADD_FACET(loc, new Myxctype2);\r\n        istr2.imbue(loc_myctype);\r\n\r\n        st  = STD ios_base::goodbit;\r\n        iit = pf->get_time(Myiter(istr2), iit0, istr2, st, &tvec);\r\n        CHECK_INT(*iit, L' ');\r\n        CHECK_INT(tvec.tm_sec, 56);\r\n        CHECK_INT(tvec.tm_min, 34);\r\n        CHECK_INT(tvec.tm_hour, 12);\r\n    }\r\n}\r\n\r\nvoid test_time_put() { // test time_put<wchar_t, ostreambuf_iterator<wchar_t> >\r\n    typedef STD ostreambuf_iterator<wchar_t> Myiter;\r\n    typedef STD time_put<wchar_t, Myiter> Myfac;\r\n    const Myfac* pf       = &USE_FACET(loc, Myfac);\r\n    STD locale loc_byname = ADD_FACET(loc, (new STD time_put_byname<wchar_t, STD ostreambuf_iterator<wchar_t>>(\"C\")));\r\n    STD locale::id* pid   = &pf->id;\r\n    Myfac::char_type* pc  = (wchar_t*) nullptr;\r\n    Myfac::iter_type* pi  = (Myiter*) nullptr;\r\n\r\n    pid = pid; // to quiet diagnostics;\r\n    pc  = pc;\r\n    pi  = pi;\r\n\r\n    STD wostringstream ostr;\r\n    CSTD tm tvec{};\r\n\r\n    tvec.tm_sec   = 15;\r\n    tvec.tm_min   = 55;\r\n    tvec.tm_hour  = 6;\r\n    tvec.tm_mday  = 2;\r\n    tvec.tm_mon   = 11;\r\n    tvec.tm_year  = 79;\r\n    tvec.tm_isdst = -1;\r\n    CSTD mktime(&tvec);\r\n\r\n    pf->put(Myiter(ostr), ostr, L'*', &tvec, L'a', L'\\0');\r\n    CHECK_WSTR(ostr.str().c_str(), L\"Sun\");\r\n\r\n    const wchar_t fmt[] = {L\"%A %B %d %H:%M:%S %Y %%AM\"};\r\n    ostr.str(L\"\");\r\n    pf->put(Myiter(ostr), ostr, L'*', &tvec, fmt, fmt + sizeof(fmt) / sizeof(wchar_t) - 1);\r\n    CHECK_WSTR(ostr.str().c_str(), L\"Sunday December 02 06:55:15 1979 %AM\");\r\n\r\n    { // check for narrow/widen calls\r\n        STD wostringstream ostr2;\r\n        STD locale loc_myctype = ADD_FACET(loc, new Myxctype2);\r\n        ostr2.imbue(loc_myctype);\r\n\r\n        pf->put(Myiter(ostr2), ostr2, L'*', &tvec, 'H', '\\0');\r\n        CHECK_WSTR(ostr2.str().c_str(), L\"06\");\r\n\r\n        const wchar_t fmt2[] = {L\"%A %B %d PZ:PM:PS %Y %%AM\"};\r\n        ostr2.str(L\"\");\r\n        pf->put(Myiter(ostr2), ostr2, L'*', &tvec, fmt2, fmt2 + sizeof(fmt2) / sizeof(wchar_t) - 1);\r\n        CHECK_WSTR(ostr2.str().c_str(), L\"Sunday December 02 06:55:15 1979 %AM\");\r\n    }\r\n}\r\n\r\nvoid test_main() { // test basic workings of locale definitions\r\n    test_collate();\r\n    test_messages();\r\n    test_money_get();\r\n    test_money_put();\r\n    test_moneypunct();\r\n    test_time_get();\r\n    test_time_put();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/locale7/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <locale>, part 7\r\n#define TEST_NAME \"<locale>, part 7\"\r\n\r\n#define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include <codecvt>\r\n#include <iostream>\r\n#include <locale>\r\n#include <sstream>\r\n#include <string>\r\n\r\ntypedef STD codecvt_utf8<wchar_t> Mycvt;\r\ntypedef STD wbuffer_convert<Mycvt> Mybuffer;\r\n\r\nvoid test_read() { // test wbuffer_convert reads\r\n    STD stringbuf strbuf(\"Hello world\");\r\n    Mybuffer cvtbuf(&strbuf);\r\n    STD wistream source(&cvtbuf);\r\n    STD wstring wans;\r\n\r\n    STD getline(source, wans);\r\n    CHECK_WSTR(wans.c_str(), L\"Hello world\");\r\n    CHECK_PTR(cvtbuf.rdbuf(), &strbuf);\r\n    cvtbuf.rdbuf(STD cin.rdbuf());\r\n    CHECK_PTR(cvtbuf.rdbuf(), STD cin.rdbuf());\r\n}\r\n\r\nvoid test_write() { // test wbuffer_convert writes\r\n    STD stringbuf strbuf;\r\n    Mybuffer cvtbuf(&strbuf);\r\n    STD wostream sink(&cvtbuf);\r\n    STD string ans;\r\n\r\n    sink << L\"Hello world\";\r\n    ans = strbuf.str();\r\n    CHECK_STR(ans.c_str(), \"Hello world\");\r\n    CHECK_PTR(cvtbuf.rdbuf(), &strbuf);\r\n    cvtbuf.rdbuf(STD cout.rdbuf());\r\n    CHECK_PTR(cvtbuf.rdbuf(), STD cout.rdbuf());\r\n}\r\n\r\nvoid test_main() { // test wbuffer_convert\r\n    STD stringbuf strbuf;\r\n    static CSTD mbstate_t state;\r\n\r\n    Mybuffer cvtbuf0;\r\n    Mybuffer cvtbuf1(&strbuf);\r\n    Mybuffer cvtbuf2(&strbuf, new Mycvt);\r\n    Mybuffer cvtbuf3(&strbuf, new Mycvt, state);\r\n    state = cvtbuf0.state();\r\n\r\n    test_read();\r\n    test_write();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/locale8/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <locale>, part 8\r\n#define TEST_NAME \"<locale>, part 8\"\r\n\r\n#define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include <codecvt>\r\n#include <iostream>\r\n#include <locale>\r\n#include <string>\r\n\r\ntypedef STD codecvt_utf8_utf16<wchar_t> Mycvt;\r\ntypedef STD wstring_convert<Mycvt> Mystrcvt;\r\n\r\nvoid test_from_bytes() { // test conversions from bytes to wide\r\n    Mystrcvt strcvt;\r\n    STD string str(\"hello\");\r\n    const char* ptr = &*str.begin();\r\n\r\n    CHECK_INT(strcvt.converted(), 0);\r\n    CHECK_WSTR(strcvt.from_bytes('x').c_str(), L\"x\");\r\n    CHECK_INT(strcvt.converted(), 1);\r\n    CHECK_WSTR(strcvt.from_bytes(\"abc\").c_str(), L\"abc\");\r\n    CHECK_INT(strcvt.converted(), 3);\r\n    CHECK_WSTR(strcvt.from_bytes(str).c_str(), L\"hello\");\r\n    CHECK_INT(strcvt.converted(), 5);\r\n    CHECK_WSTR(strcvt.from_bytes(ptr + 1, ptr + 4).c_str(), L\"ell\");\r\n    CHECK_INT(strcvt.converted(), 3);\r\n\r\n    // check error handling\r\n    const char* mesg = \"from_bytes didn't throw\";\r\n    char bad         = (char) '\\x80'; // not first byte\r\n\r\n#if NO_EXCEPTIONS\r\n#else // NO_EXCEPTIONS\r\n    try { // convert a bad byte\r\n        (void) strcvt.from_bytes(bad);\r\n    } catch (STD range_error) { // expected behavior\r\n        mesg = \"ok\";\r\n    } catch (...) { // wrong exception\r\n        mesg = \"from_bytes threw wrong exception\";\r\n    }\r\n    CHECK_STR(mesg, \"ok\");\r\n#endif // NO_EXCEPTIONS\r\n\r\n    Mystrcvt strcvt2(\"err\", L\"ERR\");\r\n    char bad2[] = {\r\n        // embedded bad byte\r\n        'a',\r\n        'a',\r\n        'a',\r\n        'a',\r\n        'a',\r\n        'a',\r\n        'a',\r\n        'a',\r\n        (char) '\\x80', // not first byte\r\n        'b',\r\n        0,\r\n    };\r\n\r\n    CHECK_WSTR(strcvt2.from_bytes(bad2).c_str(), L\"ERR\");\r\n}\r\n\r\nvoid test_to_bytes() { // test wstring_convert from wide to bytes\r\n    Mystrcvt strcvt;\r\n    STD wstring wstr(L\"hello\");\r\n    const wchar_t* wptr = &*wstr.begin();\r\n\r\n    Mystrcvt::byte_string* pbs = (STD string*) nullptr;\r\n    Mystrcvt::wide_string* pws = (STD wstring*) nullptr;\r\n    Mystrcvt::state_type* pst  = (CSTD mbstate_t*) nullptr;\r\n    Mystrcvt::int_type* pit    = (STD char_traits<wchar_t>::int_type*) nullptr;\r\n\r\n    (void) pbs; // to quiet diagnostics\r\n    (void) pws;\r\n    (void) pst;\r\n    (void) pit;\r\n\r\n    CHECK_INT(strcvt.converted(), 0);\r\n    CHECK_STR(strcvt.to_bytes(L'x').c_str(), \"x\");\r\n    CHECK_INT(strcvt.converted(), 1);\r\n    CHECK_STR(strcvt.to_bytes(L\"abc\").c_str(), \"abc\");\r\n    CHECK_INT(strcvt.converted(), 3);\r\n    CHECK_STR(strcvt.to_bytes(wstr).c_str(), \"hello\");\r\n    CHECK_INT(strcvt.converted(), 5);\r\n    CHECK_STR(strcvt.to_bytes(wptr + 1, wptr + 4).c_str(), \"ell\");\r\n    CHECK_INT(strcvt.converted(), 3);\r\n\r\n    // check error handling\r\n    const char* mesg = \"to_bytes didn't throw\";\r\n    wchar_t bad[]    = {\r\n        // bad two-word sequence\r\n        (wchar_t) 0xd800, // first of two words\r\n        (wchar_t) 0xd800, // not second word\r\n        0,\r\n    };\r\n\r\n#if NO_EXCEPTIONS\r\n#else // NO_EXCEPTIONS\r\n    try { // convert a bad wchar_t sequence\r\n        (void) strcvt.to_bytes(bad);\r\n    } catch (STD range_error) { // expected behavior\r\n        mesg = \"ok\";\r\n    } catch (...) { // wrong exception\r\n        mesg = \"to_bytes threw wrong exception\";\r\n    }\r\n    CHECK_STR(mesg, \"ok\");\r\n#endif // NO_EXCEPTIONS\r\n\r\n    Mystrcvt strcvt2(\"ERR\");\r\n    wchar_t bad2[] = {\r\n        // embedded bad two-word sequence\r\n        L'a',\r\n        L'a',\r\n        L'a',\r\n        L'a',\r\n        L'a',\r\n        L'a',\r\n        L'a',\r\n        L'a',\r\n        (wchar_t) 0xd800, // first of two words\r\n        (wchar_t) 0xd800, // not second word\r\n        L'b',\r\n        0,\r\n    };\r\n\r\n    CHECK_STR(strcvt2.to_bytes(bad2).c_str(), \"ERR\");\r\n}\r\n\r\nvoid test_main() { // test wstring_convert\r\n    static CSTD mbstate_t state;\r\n\r\n    Mystrcvt strcvt0;\r\n    Mystrcvt strcvt1(new Mycvt);\r\n    Mystrcvt strcvt2(new Mycvt, state);\r\n    state = strcvt0.state();\r\n\r\n    test_from_bytes();\r\n    test_to_bytes();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/map/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <map>\r\n#define TEST_NAME \"<map>\"\r\n\r\n#define _HAS_AUTO_PTR_ETC 1\r\n\r\n#include \"tdefs.h\"\r\n#include <functional>\r\n#include <map>\r\n#include <stddef.h>\r\n\r\nstruct Wrapped_char { // wrap a char\r\n    Wrapped_char(char ch = 0) : mych(ch) { // construct from char\r\n    }\r\n\r\n    operator char() const { // cast to char\r\n        return mych;\r\n    }\r\n\r\n    char mych;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct Myless : public STD binary_function<_Ty, _Ty, bool> { // functor for operator<\r\n    typedef int is_transparent;\r\n\r\n    bool operator()(const _Ty& _Left, const _Ty& _Right) const { // apply operator< to operands\r\n        return (char) _Left < (char) _Right;\r\n    }\r\n};\r\n\r\ntemplate <class Mypred>\r\nvoid test_map() { // test map\r\n    typedef STD pair<const char, int> Myval;\r\n    typedef STD allocator<Myval> Myal;\r\n    typedef STD map<char, int, Mypred, Myal> Mycont;\r\n\r\n    Myval x, xarr[3], xarr2[3];\r\n    for (int i = 0; i < 3; ++i) { // initialize arrays\r\n        new (&xarr[i]) Myval((char) ('a' + i), 1 + i);\r\n        new (&xarr2[i]) Myval((char) ('d' + i), 4 + i);\r\n    }\r\n\r\n    typename Mycont::key_type* p_key         = (char*) nullptr;\r\n    typename Mycont::mapped_type* p_mapped   = (int*) nullptr;\r\n    typename Mycont::key_compare* p_kcomp    = (Mypred*) nullptr;\r\n    typename Mycont::allocator_type* p_alloc = (Myal*) nullptr;\r\n    typename Mycont::value_type* p_val       = (Myval*) nullptr;\r\n    typename Mycont::value_compare* p_vcomp  = nullptr;\r\n    typename Mycont::pointer p_ptr           = (Myval*) nullptr;\r\n    typename Mycont::const_pointer p_cptr    = (const Myval*) nullptr;\r\n    typename Mycont::reference p_ref         = x;\r\n    typename Mycont::const_reference p_cref  = (const Myval&) x;\r\n    typename Mycont::size_type* p_size       = (CSTD size_t*) nullptr;\r\n    typename Mycont::difference_type* p_diff = (CSTD ptrdiff_t*) nullptr;\r\n\r\n    p_key    = p_key; // to quiet diagnostics\r\n    p_mapped = p_mapped;\r\n    p_kcomp  = p_kcomp;\r\n    p_alloc  = p_alloc;\r\n    p_val    = p_val;\r\n    p_vcomp  = p_vcomp;\r\n    p_ptr    = p_ptr;\r\n    p_cptr   = p_cptr;\r\n    p_ptr    = &p_ref;\r\n    p_cptr   = &p_cref;\r\n    p_size   = p_size;\r\n    p_diff   = p_diff;\r\n\r\n    Mycont v0;\r\n    Myal al = v0.get_allocator();\r\n    Mypred pred;\r\n    Mycont v0a(pred), v0b(pred, al);\r\n    CHECK(v0.empty());\r\n    CHECK_INT(v0.size(), 0);\r\n    CHECK_INT(v0a.size(), 0);\r\n    CHECK(v0a.get_allocator() == al);\r\n    CHECK_INT(v0b.size(), 0);\r\n    CHECK(v0b.get_allocator() == al);\r\n\r\n    Mycont v1(xarr, xarr + 3);\r\n    CHECK_INT(v1.size(), 3);\r\n    CHECK_INT((*v1.begin()).first, 'a');\r\n\r\n    Mycont v2(xarr, xarr + 3, pred);\r\n    CHECK_INT(v2.size(), 3);\r\n    CHECK_INT((*v2.begin()).first, 'a');\r\n\r\n    Mycont v3(xarr, xarr + 3, pred, al);\r\n    CHECK_INT(v3.size(), 3);\r\n    CHECK_INT((*v3.begin()).first, 'a');\r\n\r\n    const Mycont v4(xarr, xarr + 3);\r\n    CHECK_INT(v4.size(), 3);\r\n    CHECK_INT((*v4.begin()).first, 'a');\r\n    v0 = v4;\r\n    CHECK_INT(v0.size(), 3);\r\n    CHECK_INT((*v0.begin()).first, 'a');\r\n    CHECK(v0.size() <= v0.max_size());\r\n\r\n    STD map<char, int, Mypred>* p_cont = &v0;\r\n\r\n    p_cont = p_cont; // to quiet diagnostics\r\n\r\n    { // check iterator generators\r\n        typename Mycont::iterator p_it(v1.begin());\r\n        typename Mycont::const_iterator p_cit(v4.begin());\r\n        typename Mycont::reverse_iterator p_rit(v1.rbegin());\r\n        typename Mycont::const_reverse_iterator p_crit(v4.rbegin());\r\n        CHECK_INT((*p_it).first, 'a');\r\n        CHECK_INT((*p_it).second, 1);\r\n        CHECK_INT((*--(p_it = v1.end())).first, 'c');\r\n        CHECK_INT((*p_cit).first, 'a');\r\n        CHECK_INT((*--(p_cit = v4.end())).first, 'c');\r\n        CHECK_INT((*p_rit).first, 'c');\r\n        CHECK_INT((*p_rit).second, 3);\r\n        CHECK_INT((*--(p_rit = v1.rend())).first, 'a');\r\n        CHECK_INT((*p_crit).first, 'c');\r\n        CHECK_INT((*--(p_crit = v4.rend())).first, 'a');\r\n\r\n        typename Mycont::const_iterator p_it1 = typename Mycont::const_iterator();\r\n        typename Mycont::const_iterator p_it2 = typename Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    { // check const iterators generators\r\n        typename Mycont::const_iterator p_it(v1.cbegin());\r\n        typename Mycont::const_iterator p_cit(v4.cbegin());\r\n        typename Mycont::const_reverse_iterator p_rit(v1.crbegin());\r\n        typename Mycont::const_reverse_iterator p_crit(v4.crbegin());\r\n        CHECK_INT((*p_it).first, 'a');\r\n        CHECK_INT((*p_it).second, 1);\r\n        CHECK_INT((*--(p_it = v1.cend())).first, 'c');\r\n        CHECK_INT((*p_cit).first, 'a');\r\n        CHECK_INT((*--(p_cit = v4.cend())).first, 'c');\r\n        CHECK_INT((*p_rit).first, 'c');\r\n        CHECK_INT((*p_rit).second, 3);\r\n        CHECK_INT((*--(p_rit = v1.crend())).first, 'a');\r\n        CHECK_INT((*p_crit).first, 'c');\r\n        CHECK_INT((*--(p_crit = v4.crend())).first, 'a');\r\n\r\n        typename Mycont::const_iterator p_it1 = typename Mycont::const_iterator();\r\n        typename Mycont::const_iterator p_it2 = typename Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    v0.clear(); // differs from multimap\r\n    STD pair<typename Mycont::iterator, bool> pib = v0.insert(Myval('d', 4));\r\n    CHECK_INT((*pib.first).first, 'd');\r\n    CHECK(pib.second);\r\n    CHECK_INT((*--v0.end()).first, 'd');\r\n    pib = v0.insert(Myval('d', 5));\r\n    CHECK_INT((*pib.first).first, 'd');\r\n    CHECK_INT((*pib.first).second, 4);\r\n    CHECK(!pib.second);\r\n    CHECK((*v0.insert(v0.begin(), Myval('e', 5))).first == 'e');\r\n    v0.insert(xarr, xarr + 3);\r\n    CHECK_INT(v0.size(), 5);\r\n    CHECK_INT((*v0.begin()).first, 'a');\r\n    v0.insert(xarr2, xarr2 + 3);\r\n    CHECK_INT(v0.size(), 6);\r\n    CHECK_INT((*--v0.end()).first, 'f');\r\n    CHECK_INT(v0['c'], 3);\r\n    v0.erase(v0.begin());\r\n    CHECK_INT(v0.size(), 5);\r\n    CHECK_INT((*v0.begin()).first, 'b');\r\n    v0.erase(v0.begin(), ++v0.begin());\r\n    CHECK_INT(v0.size(), 4);\r\n    CHECK_INT((*v0.begin()).first, 'c');\r\n    v0.insert(Myval('y', 99));\r\n    CHECK_INT(v0.erase('x'), 0);\r\n    CHECK_INT(v0.erase('y'), 1);\r\n\r\n    { // test added C++11 functionality\r\n        Mycont v0c(al);\r\n        CHECK_INT(v0c.size(), 0);\r\n        CHECK(v0c.get_allocator() == al);\r\n\r\n        Mycont v1x(xarr, xarr + 3);\r\n        CHECK_INT(v1x.at('c'), 3);\r\n        Mycont v2x(v1x, al);\r\n        CHECK_INT(v2x.at('c'), 3);\r\n    }\r\n\r\n    v0.clear();\r\n    CHECK(v0.empty());\r\n    v0.swap(v1);\r\n    CHECK(!v0.empty());\r\n    CHECK(v1.empty());\r\n    STD swap(v0, v1);\r\n    CHECK(v0.empty());\r\n    CHECK(!v1.empty());\r\n    CHECK(v1 == v1);\r\n    CHECK(v0 < v1);\r\n    CHECK(v0 != v1);\r\n    CHECK(v1 > v0);\r\n    CHECK(v0 <= v1);\r\n    CHECK(v1 >= v0);\r\n\r\n    CHECK(v0.key_comp()('a', 'c'));\r\n    CHECK(!v0.key_comp()('a', 'a'));\r\n    CHECK(v0.value_comp()(Myval('a', 0), Myval('c', 0)));\r\n    CHECK(!v0.value_comp()(Myval('a', 0), Myval('a', 1)));\r\n    CHECK_INT((*v4.find('a')).first, 'a');\r\n    CHECK_INT(v4.count('x'), 0);\r\n    CHECK_INT(v4.count('a'), 1);\r\n    CHECK_INT((*v4.lower_bound('a')).first, 'a');\r\n    CHECK((*v4.upper_bound('a')).first == 'b');\r\n\r\n    STD pair<typename Mycont::const_iterator, typename Mycont::const_iterator> pcc = v4.equal_range('a');\r\n    CHECK_INT((*pcc.first).first, 'a');\r\n    CHECK_INT((*pcc.second).first, 'b');\r\n\r\n    {\r\n        Mycont v6;\r\n        v6.insert(Myval('a', 1));\r\n        v6.insert(Myval('b', 2));\r\n        Mycont v7(STD move(v6));\r\n        CHECK_INT(v6.size(), 0);\r\n        CHECK_INT(v7.size(), 2);\r\n\r\n        Mycont v6a;\r\n        v6a.insert(Myval('a', 1));\r\n        v6a.insert(Myval('b', 2));\r\n        Mycont v7a(STD move(v6a), al);\r\n        CHECK_INT(v6a.size(), 0);\r\n        CHECK_INT(v7a.size(), 2);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_INT(v7.size(), 0);\r\n        CHECK_INT(v8.size(), 2);\r\n\r\n        typedef STD map<Movable_int, int> Mycont2;\r\n        Mycont2 v9;\r\n        v9.insert(STD pair<Movable_int, int>(Movable_int('a'), 1));\r\n        CHECK_INT(v9.size(), 1);\r\n        CHECK_INT(v9.begin()->first.val, 'a');\r\n\r\n        Mycont2 v10;\r\n        STD pair<Movable_int, int> pmi1(Movable_int('e'), 5);\r\n        v10.insert(STD move(pmi1));\r\n        CHECK_INT(pmi1.first.val, -1);\r\n        CHECK_INT(v10.begin()->first.val, 'e');\r\n\r\n        STD pair<Movable_int, int> pmi2(Movable_int('d'), 4);\r\n        v10.insert(v10.end(), STD move(pmi2));\r\n        CHECK_INT(pmi2.first.val, -1);\r\n        CHECK_INT(v10.begin()->first.val, 'd');\r\n\r\n        Movable_int mi3('c');\r\n        CHECK_INT(v10[STD move(mi3)], 0);\r\n        CHECK_INT(mi3.val, -1);\r\n        CHECK_INT(v10.begin()->first.val, 'c');\r\n\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end());\r\n        CHECK_INT(v10.begin()->first.val, 0);\r\n        CHECK_INT(v10.begin()->second, 0);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 'b', 2);\r\n        CHECK_INT(v10.begin()->first.val, 'b');\r\n        CHECK_INT(v10.begin()->second, 2);\r\n\r\n        v10.clear();\r\n        v10.emplace();\r\n        CHECK_INT(v10.begin()->first.val, 0);\r\n        CHECK_INT(v10.begin()->second, 0);\r\n\r\n        v10.clear();\r\n        v10.emplace('b', 2);\r\n        CHECK_INT(v10.begin()->first.val, 'b');\r\n        CHECK_INT(v10.begin()->second, 2);\r\n\r\n        v8.clear(); // copyable key\r\n        v8.try_emplace('b', 2);\r\n        CHECK_INT(v8.begin()->first, 'b');\r\n        CHECK_INT(v8.begin()->second, 2);\r\n\r\n        v8.try_emplace('b', 3);\r\n        CHECK_INT(v8.begin()->first, 'b');\r\n        CHECK_INT(v8.begin()->second, 2);\r\n\r\n        v8.insert_or_assign('b', 3);\r\n        CHECK_INT(v8.begin()->first, 'b');\r\n        CHECK_INT(v8.begin()->second, 3);\r\n\r\n        v10.clear(); // movable key\r\n        v10.try_emplace('b', 2);\r\n        CHECK_INT(v10.begin()->first.val, 'b');\r\n        CHECK_INT(v10.begin()->second, 2);\r\n\r\n        v10.try_emplace('b', 3);\r\n        CHECK_INT(v10.begin()->first.val, 'b');\r\n        CHECK_INT(v10.begin()->second, 2);\r\n\r\n        v10.insert_or_assign('b', 3);\r\n        CHECK_INT(v10.begin()->first.val, 'b');\r\n        CHECK_INT(v10.begin()->second, 3);\r\n    }\r\n\r\n    { // check for lvalue stealing\r\n        typedef STD map<Copyable_int, int> Mycont3;\r\n        Mycont3 v11;\r\n        STD pair<Copyable_int, int> pci1(Copyable_int('d'), 4);\r\n        v11.insert(pci1);\r\n        CHECK_INT(pci1.first.val, 'd');\r\n        CHECK_INT(v11.begin()->first.val, 'd');\r\n\r\n        STD pair<Copyable_int, int> pci2(Copyable_int('c'), 3);\r\n        v11.clear();\r\n        v11.insert(v11.end(), pci2);\r\n        CHECK_INT(pci2.first.val, 'c');\r\n        CHECK_INT(v11.begin()->first.val, 'c');\r\n\r\n        Mycont3 v12(v11);\r\n        CHECK(v11 == v12);\r\n    }\r\n\r\n    {\r\n        STD initializer_list<Myval> init{xarr[0], xarr[1], xarr[2]};\r\n        Mycont v11(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11.begin()->first, 'a');\r\n\r\n        Mycont v11a(init, al);\r\n        CHECK_INT(v11a.size(), 3);\r\n        CHECK_INT(v11a.begin()->first, 'a');\r\n\r\n        v11.clear();\r\n        v11 = init;\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11.begin()->first, 'a');\r\n\r\n        v11.clear();\r\n        v11.insert(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11.begin()->first, 'a');\r\n    }\r\n}\r\n\r\ntemplate <class Mypred>\r\nvoid test_multimap() { // test multimap\r\n    typedef STD pair<const char, int> Myval;\r\n    typedef STD allocator<Myval> Myal;\r\n    typedef STD multimap<char, int, Mypred, Myal> Mycont;\r\n\r\n    Myval x, xarr[3], xarr2[3];\r\n    for (int i = 0; i < 3; ++i) { // initialize arrays\r\n        new (&xarr[i]) Myval((char) ('a' + i), 1 + i);\r\n        new (&xarr2[i]) Myval((char) ('d' + i), 4 + i);\r\n    }\r\n\r\n    typename Mycont::key_type* p_key         = (char*) nullptr;\r\n    typename Mycont::mapped_type* p_mapped   = (int*) nullptr;\r\n    typename Mycont::key_compare* p_kcomp    = (Mypred*) nullptr;\r\n    typename Mycont::allocator_type* p_alloc = (Myal*) nullptr;\r\n    typename Mycont::value_type* p_val       = (Myval*) nullptr;\r\n    typename Mycont::value_compare* p_vcomp  = nullptr;\r\n    typename Mycont::pointer p_ptr           = (Myval*) nullptr;\r\n    typename Mycont::const_pointer p_cptr    = (const Myval*) nullptr;\r\n    typename Mycont::reference p_ref         = x;\r\n    typename Mycont::const_reference p_cref  = (const Myval&) x;\r\n    typename Mycont::size_type* p_size       = (CSTD size_t*) nullptr;\r\n    typename Mycont::difference_type* p_diff = (CSTD ptrdiff_t*) nullptr;\r\n\r\n    p_key    = p_key; // to quiet diagnostics\r\n    p_mapped = p_mapped;\r\n    p_kcomp  = p_kcomp;\r\n    p_alloc  = p_alloc;\r\n    p_val    = p_val;\r\n    p_vcomp  = p_vcomp;\r\n    p_ptr    = p_ptr;\r\n    p_cptr   = p_cptr;\r\n    p_ptr    = &p_ref;\r\n    p_cptr   = &p_cref;\r\n    p_size   = p_size;\r\n    p_diff   = p_diff;\r\n\r\n    Mycont v0;\r\n    Myal al = v0.get_allocator();\r\n    Mypred pred;\r\n    Mycont v0a(pred), v0b(pred, al);\r\n    CHECK(v0.empty());\r\n    CHECK_INT(v0.size(), 0);\r\n    CHECK_INT(v0a.size(), 0);\r\n    CHECK(v0a.get_allocator() == al);\r\n    CHECK_INT(v0b.size(), 0);\r\n    CHECK(v0b.get_allocator() == al);\r\n\r\n    Mycont v1(xarr, xarr + 3);\r\n    CHECK_INT(v1.size(), 3);\r\n    CHECK_INT((*v1.begin()).first, 'a');\r\n\r\n    Mycont v2(xarr, xarr + 3, pred);\r\n    CHECK_INT(v2.size(), 3);\r\n    CHECK_INT((*v2.begin()).first, 'a');\r\n\r\n    Mycont v3(xarr, xarr + 3, pred, al);\r\n    CHECK_INT(v3.size(), 3);\r\n    CHECK_INT((*v3.begin()).first, 'a');\r\n\r\n    const Mycont v4(xarr, xarr + 3);\r\n    CHECK_INT(v4.size(), 3);\r\n    CHECK_INT((*v4.begin()).first, 'a');\r\n    v0 = v4;\r\n    CHECK_INT(v0.size(), 3);\r\n    CHECK_INT((*v0.begin()).first, 'a');\r\n    CHECK(v0.size() <= v0.max_size());\r\n\r\n    STD multimap<char, int, Mypred>* p_cont = &v0;\r\n\r\n    p_cont = p_cont; // to quiet diagnostics\r\n\r\n    { // check iterator generators\r\n        typename Mycont::iterator p_it(v1.begin());\r\n        typename Mycont::const_iterator p_cit(v4.begin());\r\n        typename Mycont::reverse_iterator p_rit(v1.rbegin());\r\n        typename Mycont::const_reverse_iterator p_crit(v4.rbegin());\r\n        CHECK_INT((*p_it).first, 'a');\r\n        CHECK_INT((*p_it).second, 1);\r\n        CHECK_INT((*--(p_it = v1.end())).first, 'c');\r\n        CHECK_INT((*p_cit).first, 'a');\r\n        CHECK_INT((*--(p_cit = v4.end())).first, 'c');\r\n        CHECK_INT((*p_rit).first, 'c');\r\n        CHECK_INT((*p_rit).second, 3);\r\n        CHECK_INT((*--(p_rit = v1.rend())).first, 'a');\r\n        CHECK_INT((*p_crit).first, 'c');\r\n        CHECK_INT((*--(p_crit = v4.rend())).first, 'a');\r\n\r\n        typename Mycont::const_iterator p_it1 = typename Mycont::const_iterator();\r\n        typename Mycont::const_iterator p_it2 = typename Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    { // check const iterators generators\r\n        typename Mycont::const_iterator p_it(v1.cbegin());\r\n        typename Mycont::const_iterator p_cit(v4.cbegin());\r\n        typename Mycont::const_reverse_iterator p_rit(v1.crbegin());\r\n        typename Mycont::const_reverse_iterator p_crit(v4.crbegin());\r\n        CHECK_INT((*p_it).first, 'a');\r\n        CHECK_INT((*p_it).second, 1);\r\n        CHECK_INT((*--(p_it = v1.cend())).first, 'c');\r\n        CHECK_INT((*p_cit).first, 'a');\r\n        CHECK_INT((*--(p_cit = v4.cend())).first, 'c');\r\n        CHECK_INT((*p_rit).first, 'c');\r\n        CHECK_INT((*p_rit).second, 3);\r\n        CHECK_INT((*--(p_rit = v1.crend())).first, 'a');\r\n        CHECK_INT((*p_crit).first, 'c');\r\n        CHECK_INT((*--(p_crit = v4.crend())).first, 'a');\r\n\r\n        typename Mycont::const_iterator p_it1 = typename Mycont::const_iterator();\r\n        typename Mycont::const_iterator p_it2 = typename Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    v0.clear(); // differs from map\r\n    CHECK_INT((*v0.insert(Myval('d', 4))).first, 'd');\r\n    CHECK_INT((*--v0.end()).first, 'd');\r\n    CHECK_INT((*v0.insert(Myval('d', 5))).first, 'd');\r\n    CHECK_INT(v0.size(), 2);\r\n    CHECK_INT((*v0.insert(v0.begin(), Myval('e', 5))).first, 'e');\r\n    v0.insert(xarr, xarr + 3);\r\n    CHECK_INT(v0.size(), 6);\r\n    CHECK_INT((*v0.begin()).first, 'a');\r\n    v0.insert(xarr2, xarr2 + 3);\r\n    CHECK_INT(v0.size(), 9);\r\n    CHECK_INT((*--v0.end()).first, 'f');\r\n    v0.erase(v0.begin());\r\n    CHECK_INT(v0.size(), 8);\r\n    CHECK_INT((*v0.begin()).first, 'b');\r\n    v0.erase(v0.begin(), ++v0.begin());\r\n    CHECK_INT(v0.size(), 7);\r\n    CHECK_INT((*v0.begin()).first, 'c');\r\n    v0.insert(Myval('y', 98));\r\n    v0.insert(Myval('y', 99));\r\n    CHECK_INT(v0.erase('x'), 0);\r\n    CHECK_INT(v0.erase('y'), 2);\r\n\r\n    { // test added C++11 functionality\r\n        Mycont v0c(al);\r\n        CHECK_INT(v0c.size(), 0);\r\n        CHECK(v0c.get_allocator() == al);\r\n    }\r\n\r\n    v0.clear();\r\n    CHECK(v0.empty());\r\n    v0.swap(v1);\r\n    CHECK(!v0.empty());\r\n    CHECK(v1.empty());\r\n    STD swap(v0, v1);\r\n    CHECK(v0.empty());\r\n    CHECK(!v1.empty());\r\n    CHECK(v1 == v1);\r\n    CHECK(v0 < v1);\r\n    CHECK(v0 != v1);\r\n    CHECK(v1 > v0);\r\n    CHECK(v0 <= v1);\r\n    CHECK(v1 >= v0);\r\n\r\n    CHECK(v0.key_comp()('a', 'c'));\r\n    CHECK(!v0.key_comp()('a', 'a'));\r\n    CHECK(v0.value_comp()(Myval('a', 0), Myval('c', 0)));\r\n    CHECK(!v0.value_comp()(Myval('a', 0), Myval('a', 1)));\r\n    CHECK_INT((*v4.find('a')).first, 'a');\r\n    CHECK_INT(v4.count('x'), 0);\r\n    CHECK_INT(v4.count('a'), 1);\r\n    CHECK_INT((*v4.lower_bound('a')).first, 'a');\r\n    CHECK((*v4.upper_bound('a')).first == 'b');\r\n\r\n    STD pair<typename Mycont::const_iterator, typename Mycont::const_iterator> pcc = v4.equal_range('a');\r\n    CHECK_INT((*pcc.first).first, 'a');\r\n    CHECK_INT((*pcc.second).first, 'b');\r\n\r\n    {\r\n        Mycont v6;\r\n        v6.insert(Myval('a', 1));\r\n        v6.insert(Myval('b', 2));\r\n        Mycont v7(STD move(v6));\r\n        CHECK_INT(v6.size(), 0);\r\n        CHECK_INT(v7.size(), 2);\r\n\r\n        Mycont v6a;\r\n        v6a.insert(Myval('a', 1));\r\n        v6a.insert(Myval('b', 2));\r\n        Mycont v7a(STD move(v6a), al);\r\n        CHECK_INT(v6a.size(), 0);\r\n        CHECK_INT(v7a.size(), 2);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_INT(v7.size(), 0);\r\n        CHECK_INT(v8.size(), 2);\r\n\r\n        typedef STD multimap<Movable_int, int> Mycont2;\r\n        Mycont2 v9;\r\n        v9.insert(STD pair<Movable_int, int>(Movable_int('a'), 1));\r\n        CHECK_INT(v9.size(), 1);\r\n        CHECK_INT(v9.begin()->first.val, 'a');\r\n\r\n        Mycont2 v10;\r\n        STD pair<Movable_int, int> pmi1(Movable_int('d'), 4);\r\n        v10.insert(STD move(pmi1));\r\n        CHECK_INT(pmi1.first.val, -1);\r\n        CHECK_INT(v10.begin()->first.val, 'd');\r\n\r\n        STD pair<Movable_int, int> pmi2(Movable_int('c'), 3);\r\n        v10.insert(v10.end(), STD move(pmi2));\r\n        CHECK_INT(pmi2.first.val, -1);\r\n        CHECK_INT(v10.begin()->first.val, 'c');\r\n\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end());\r\n        CHECK_INT(v10.begin()->first.val, 0);\r\n        CHECK_INT(v10.begin()->second, 0);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 'b', 2);\r\n        CHECK_INT(v10.begin()->first.val, 'b');\r\n        CHECK_INT(v10.begin()->second, 2);\r\n\r\n        v10.clear();\r\n        v10.emplace();\r\n        CHECK_INT(v10.begin()->first.val, 0);\r\n        CHECK_INT(v10.begin()->second, 0);\r\n\r\n        v10.clear();\r\n        v10.emplace('b', 2);\r\n        CHECK_INT(v10.begin()->first.val, 'b');\r\n        CHECK_INT(v10.begin()->second, 2);\r\n    }\r\n\r\n    { // check for lvalue stealing\r\n        typedef STD multimap<Copyable_int, int> Mycont3;\r\n        Mycont3 v11;\r\n        STD pair<Copyable_int, int> pci1(Copyable_int('d'), 4);\r\n        v11.insert(pci1);\r\n        CHECK_INT(pci1.first.val, 'd');\r\n        CHECK_INT(v11.begin()->first.val, 'd');\r\n\r\n        STD pair<Copyable_int, int> pci2(Copyable_int('c'), 3);\r\n        v11.clear();\r\n        v11.insert(v11.end(), pci2);\r\n        CHECK_INT(pci2.first.val, 'c');\r\n        CHECK_INT(v11.begin()->first.val, 'c');\r\n\r\n        Mycont3 v12(v11);\r\n        CHECK(v11 == v12);\r\n    }\r\n\r\n    {\r\n        STD initializer_list<Myval> init{xarr[0], xarr[1], xarr[2]};\r\n        Mycont v11(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11.begin()->first, 'a');\r\n\r\n        Mycont v11a(init, al);\r\n        CHECK_INT(v11a.size(), 3);\r\n        CHECK_INT(v11a.begin()->first, 'a');\r\n\r\n        v11.clear();\r\n        v11 = init;\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11.begin()->first, 'a');\r\n\r\n        v11.clear();\r\n        v11.insert(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11.begin()->first, 'a');\r\n    }\r\n}\r\n\r\nvoid test_main() { // test basic workings of map definitions\r\n    test_map<STD less<char>>();\r\n    test_map<Myless<Wrapped_char>>();\r\n    test_multimap<STD less<char>>();\r\n    test_multimap<Myless<Wrapped_char>>();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/memory/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <memory>\r\n#define TEST_NAME \"<memory>\"\r\n\r\n#define _HAS_AUTO_PTR_ETC                    1\r\n#define _HAS_DEPRECATED_ALLOCATOR_MEMBERS    1\r\n#define _HAS_DEPRECATED_RAW_STORAGE_ITERATOR 1\r\n#define _HAS_DEPRECATED_TEMPORARY_BUFFER     1\r\n#define _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING\r\n#define _SILENCE_CXX17_RAW_STORAGE_ITERATOR_DEPRECATION_WARNING\r\n#define _SILENCE_CXX17_TEMPORARY_BUFFER_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include <memory>\r\n#include <new>\r\n#include <stddef.h>\r\n\r\nstatic CSTD size_t cnt;\r\n\r\nclass Myint { // wrap an integer\r\npublic:\r\n    Myint(int x) : val(x) { // initialize with x and count\r\n        ++cnt;\r\n    }\r\n    Myint(const Myint& x) : val(x.val) { // initialize with copy and count\r\n        ++cnt;\r\n    }\r\n\r\n    ~Myint() noexcept { // destroy and count\r\n        --cnt;\r\n    }\r\n\r\n    int get_val() const { // get stored value\r\n        return val;\r\n    }\r\n\r\nprivate:\r\n    int val;\r\n};\r\n\r\ntypedef STD allocator<float> Myal;\r\n\r\nMyal get_al() { // return an allocator\r\n    static Myal al;\r\n\r\n    return al;\r\n}\r\n\r\nvoid test_alloc() { // test allocators\r\n    float fl                     = 0.0F;\r\n    Myal::size_type* p_size      = (CSTD size_t*) nullptr;\r\n    Myal::difference_type* p_val = (CSTD ptrdiff_t*) nullptr;\r\n    Myal::pointer* p_ptr         = (float**) nullptr;\r\n    Myal::const_pointer* p_cptr  = (const float**) nullptr;\r\n    Myal::reference p_ref        = fl;\r\n    Myal::const_reference p_cref = (const float&) fl;\r\n    Myal::value_type* p_dist     = (float*) nullptr;\r\n\r\n    Myal::rebind<int>::other::pointer* p_iptr = (int**) nullptr;\r\n\r\n    Myal al0 = get_al(), al(al0);\r\n\r\n    p_size = p_size; // to quiet diagnostics\r\n    p_val  = p_val;\r\n    p_ptr  = p_ptr;\r\n    p_cptr = p_cptr;\r\n    p_ref  = p_cref;\r\n    p_ref  = p_ref;\r\n    p_dist = p_dist;\r\n    p_iptr = p_iptr;\r\n\r\n    STD allocator<void>::pointer* pv_ptr        = (void**) nullptr;\r\n    STD allocator<void>::const_pointer* pv_cptr = (const void**) nullptr;\r\n    STD allocator<void>::value_type* pv_dist    = (void*) nullptr;\r\n\r\n    STD allocator<void>::rebind<int>::other::pointer* pv_iptr = (int**) nullptr;\r\n\r\n    STD allocator<void> alv0, alv(alv0);\r\n    alv = alv0;\r\n\r\n    pv_ptr  = pv_ptr; // to quiet diagnostics\r\n    pv_cptr = pv_cptr;\r\n    pv_dist = pv_dist;\r\n    pv_iptr = pv_iptr;\r\n\r\n    float* pfl = al0.address(fl);\r\n    CHECK_PTR(pfl, &fl);\r\n    pfl = al.allocate(3, nullptr);\r\n    al.construct(&pfl[2], 2.0F);\r\n    CHECK(pfl[2] == 2.0F);\r\n    al.destroy(&pfl[2]);\r\n\r\n    float three = 3.0F;\r\n    al.construct(&pfl[1], STD move(three));\r\n    CHECK(pfl[1] == 3.0F);\r\n    al.destroy(&pfl[2]);\r\n\r\n    {\r\n        STD allocator<Movable_int> al_mi;\r\n        Movable_int* pmi = al_mi.allocate(1);\r\n        al_mi.construct(pmi, 2, 3);\r\n        CHECK_INT(pmi->val, 0x23);\r\n        al_mi.destroy(pmi);\r\n        al_mi.deallocate(pmi, 1);\r\n    }\r\n\r\n    al.deallocate(pfl, 3);\r\n    CHECK(0 < al0.max_size());\r\n    CHECK(al0 == al);\r\n    CHECK(!(al0 != al0));\r\n}\r\n\r\nvoid test_uninit() { // test uninitialized copy and fill\r\n    cnt      = 0;\r\n    Myint* p = (Myint*) operator new(8 * sizeof(Myint));\r\n\r\n    STD uninitialized_fill(p, p + 2, 3);\r\n    CHECK_INT(p[1].get_val(), 3);\r\n    CHECK_INT(cnt, 2);\r\n    STD uninitialized_fill_n(p + 2, 2, 5);\r\n    CHECK_INT(p[3].get_val(), 5);\r\n    CHECK_INT(cnt, 4);\r\n    CHECK_PTR(STD uninitialized_copy(p + 1, p + 3, p + 4), p + 6);\r\n    CHECK_INT(p[4].get_val(), 3);\r\n    CHECK_INT(cnt, 6);\r\n    CHECK_INT(p[5].get_val(), 5);\r\n\r\n    CHECK_PTR(STD uninitialized_copy_n(p + 1, 2, p + 6), p + 8);\r\n    CHECK_INT(p[6].get_val(), 3);\r\n    CHECK_INT(cnt, 8);\r\n    CHECK_INT(p[7].get_val(), 5);\r\n    CHECK_PTR(STD uninitialized_fill_n(p + 2, 2, 5), p + 4);\r\n\r\n    CHECK_PTR(STD addressof(cnt), &cnt);\r\n    operator delete(p);\r\n}\r\n\r\nvoid test_tempbuf() { // test temporary buffers\r\n    STD pair<short*, CSTD ptrdiff_t> tbuf = STD get_temporary_buffer<short>(5);\r\n\r\n    CHECK(tbuf.first != nullptr && tbuf.second == 5);\r\n\r\n    typedef STD raw_storage_iterator<short*, short> Rit;\r\n    Rit it(tbuf.first);\r\n\r\n    for (short i = 0; i < 5; ++i) { // fill the buffer\r\n        *it++ = i;\r\n        CHECK_INT(tbuf.first[i], i);\r\n    }\r\n    STD return_temporary_buffer(tbuf.first);\r\n}\r\n\r\nvoid test_autoptr() { // test auto_ptr\r\n    typedef STD auto_ptr<Myint> Myptr;\r\n    Myptr::element_type* p_elem = (Myint*) nullptr;\r\n    Myptr p0;\r\n\r\n    p_elem = p_elem; // to quiet diagnostics\r\n\r\n    CHECK_PTR(p0.get(), nullptr);\r\n    { // test explicit allocation and freeing\r\n        cnt = 0;\r\n        Myptr p1(new Myint(3));\r\n        Myint* p = p1.get();\r\n        CHECK_INT(cnt, 1);\r\n        CHECK_INT(p->get_val(), 3);\r\n        CHECK_INT((*p1).get_val(), 3);\r\n        CHECK_INT(p1.release()->get_val(), 3);\r\n        CHECK_PTR(p1.get(), nullptr);\r\n        delete (p);\r\n        CHECK_INT(cnt, 0);\r\n    }\r\n    CHECK_INT(cnt, 0);\r\n\r\n    { // test auto freeing\r\n        cnt = 0;\r\n        Myptr p2(new Myint(5));\r\n        CHECK_INT(cnt, 1);\r\n    }\r\n    CHECK_INT(cnt, 0);\r\n\r\n    { // test transfers\r\n        cnt = 0;\r\n        Myptr p3(new Myint(7)), p4(p3);\r\n        CHECK_INT(cnt, 1);\r\n        CHECK_PTR(p3.get(), nullptr);\r\n        CHECK_INT(p4.get()->get_val(), 7);\r\n        p3 = p4;\r\n        CHECK_PTR(p4.get(), nullptr);\r\n        CHECK_INT(p3.get()->get_val(), 7);\r\n        p3.reset();\r\n        CHECK_PTR(p3.get(), nullptr);\r\n        CHECK_INT(cnt, 0);\r\n        p4.reset();\r\n        CHECK_PTR(p4.get(), nullptr);\r\n    }\r\n    CHECK_INT(cnt, 0);\r\n}\r\n\r\n#if _HAS_GARBAGE_COLLECTION_SUPPORT_DELETED_IN_CXX23\r\nvoid test_gc() { // test garbage collection control\r\n    char x;\r\n    STD declare_reachable(&x);\r\n    CHECK_PTR(STD undeclare_reachable(&x), &x);\r\n    STD declare_no_pointers(&x, sizeof(x));\r\n    STD undeclare_no_pointers(&x, sizeof(x));\r\n    CHECK((int) STD get_pointer_safety() == (int) STD pointer_safety::relaxed\r\n          || (int) STD get_pointer_safety() == (int) STD pointer_safety::preferred\r\n          || (int) STD get_pointer_safety() == (int) STD pointer_safety::strict);\r\n}\r\n#endif // _HAS_GARBAGE_COLLECTION_SUPPORT_DELETED_IN_CXX23\r\n\r\nvoid test_main() { // test basic properties of memory definitions\r\n    test_alloc();\r\n    test_uninit();\r\n    test_tempbuf();\r\n    test_autoptr();\r\n#if _HAS_GARBAGE_COLLECTION_SUPPORT_DELETED_IN_CXX23\r\n    test_gc();\r\n#endif // _HAS_GARBAGE_COLLECTION_SUPPORT_DELETED_IN_CXX23\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/memory1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <memory>, part 1\r\n#define TEST_NAME \"<memory>, part 1\"\r\n\r\n#define _HAS_AUTO_PTR_ETC                 1\r\n#define _HAS_DEPRECATED_SHARED_PTR_UNIQUE 1\r\n#define _SILENCE_CXX17_SHARED_PTR_UNIQUE_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include <memory>\r\n#include <sstream>\r\n#include <string>\r\n\r\nstatic void t_bad_weak_ptr() { // test bad_weak_ptr\r\n    STD bad_weak_ptr ptr;\r\n    STD exception* eptr = &ptr;\r\n\r\n    eptr = eptr; // to quiet diagnostics\r\n    CHECK_STR(ptr.what(), \"bad_weak_ptr\");\r\n}\r\n\r\nstruct X0 { // counted object\r\n    X0() { // construct and increment count\r\n        ++objects;\r\n    }\r\n    X0(const X0&) { // construct copy and increment count\r\n        ++objects;\r\n    }\r\n    virtual void f() { // empty\r\n    }\r\n    virtual ~X0() noexcept { // decrement count\r\n        --objects;\r\n    }\r\n    static int objects;\r\n};\r\nint X0::objects;\r\n\r\nstruct X;\r\n\r\nstruct X1 { // alternate base object\r\n    virtual STD shared_ptr<X> getX();\r\n    virtual ~X1() noexcept { // do nothing\r\n    }\r\n};\r\n\r\nstruct X : public X0, virtual public X1, public STD enable_shared_from_this<X> { // slightly complicated base type\r\n    void f() override {}\r\n    STD shared_ptr<X> getX() override { // return shared_ptr to this\r\n        STD shared_ptr<X> sp = shared_from_this();\r\n        CHECK_PTR(sp.get(), this);\r\n        return sp;\r\n    }\r\n};\r\n\r\nSTD shared_ptr<X> X1::getX() { // return shared_ptr object\r\n    return STD shared_ptr<X>();\r\n}\r\n\r\nstruct X2 : X { // test type\r\n};\r\n\r\nstruct deleter { // deleter test object\r\n    static int called;\r\n    void operator()(X0* ip) { // increment count, delete object\r\n        ++called;\r\n        delete ip;\r\n    }\r\n};\r\nint deleter::called;\r\n\r\nstatic void t_shared_ptr() { // test shared_ptr interface\r\n\r\n    { // shared_ptr(), operator (user-defined, equivalent to bool)\r\n        deleter::called = 0;\r\n        STD shared_ptr<X0> sp0;\r\n        CHECK_INT(sp0.use_count(), 0);\r\n        CHECK_PTR(sp0.get(), nullptr);\r\n        CHECK(!sp0);\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // shared_ptr(_U*(0))\r\n        deleter::called = 0;\r\n        STD shared_ptr<X0> sp0((X0*) nullptr);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_PTR(sp0.get(), nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // shared_ptr(_U*), operator (user-defined, equivalent to bool)\r\n        deleter::called = 0;\r\n        X0* it          = new X0;\r\n        STD shared_ptr<X0> sp0(it);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_PTR(sp0.get(), it);\r\n\r\n        CHECK(sp0 != nullptr);\r\n\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // shared_ptr(_U*(0), _D)\r\n        deleter::called = 0;\r\n        STD shared_ptr<X0> sp0((X0*) nullptr, deleter());\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_PTR(sp0.get(), nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp0) != nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 1);\r\n\r\n    { // shared_ptr(_U*, _D)\r\n        deleter::called = 0;\r\n        X0* it          = new X0;\r\n        STD shared_ptr<X0> sp0(it, deleter());\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_PTR(sp0.get(), it);\r\n        CHECK(STD get_deleter<deleter>(sp0) != nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 1);\r\n\r\n    { // shared_ptr(_V*, _D)\r\n        deleter::called = 0;\r\n        X2* it          = new X2;\r\n        STD shared_ptr<X0> sp0(it, deleter());\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_PTR(sp0.get(), it);\r\n        CHECK(STD get_deleter<deleter>(sp0) != nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 1);\r\n\r\n    { // shared_ptr(shared_ptr(0))\r\n        deleter::called = 0;\r\n        STD shared_ptr<X0> sp0;\r\n        STD shared_ptr<X0> sp1(sp0);\r\n        CHECK_INT(sp0.use_count(), 0);\r\n        CHECK_PTR(sp0.get(), nullptr);\r\n        CHECK_INT(sp1.use_count(), 0);\r\n        CHECK_PTR(sp1.get(), nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp1) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // shared_ptr(shared_ptr(_U*))\r\n        deleter::called = 0;\r\n        X0* it          = new X0;\r\n        STD shared_ptr<X0> sp0(it);\r\n        STD shared_ptr<X0> sp1(sp0);\r\n        CHECK_INT(sp0.use_count(), 2);\r\n        CHECK_PTR(sp0.get(), it);\r\n        CHECK_INT(sp1.use_count(), 2);\r\n        CHECK_PTR(sp1.get(), it);\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp1) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // shared_ptr(shared_ptr(_U*, _D))\r\n        deleter::called = 0;\r\n        X0* it          = new X0;\r\n        STD shared_ptr<X0> sp0(it, deleter());\r\n        STD shared_ptr<X0> sp1(sp0);\r\n        CHECK_INT(sp0.use_count(), 2);\r\n        CHECK_PTR(sp0.get(), it);\r\n        CHECK_INT(sp1.use_count(), 2);\r\n        CHECK_PTR(sp1.get(), it);\r\n        CHECK(STD get_deleter<deleter>(sp0) != nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp1) != nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 1);\r\n\r\n    { // shared_ptr(shared_ptr(_V*, _D))\r\n        deleter::called = 0;\r\n        X2* it          = new X2;\r\n        STD shared_ptr<X2> sp0(it, deleter());\r\n        STD shared_ptr<X0> sp1(sp0);\r\n        CHECK_INT(sp0.use_count(), 2);\r\n        CHECK_PTR(sp0.get(), it);\r\n        CHECK_INT(sp1.use_count(), 2);\r\n        CHECK_PTR(sp1.get(), it);\r\n        CHECK(STD get_deleter<deleter>(sp0) != nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp1) != nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 1);\r\n\r\n    { // shared_ptr(weak_ptr(_V*))\r\n        deleter::called = 0;\r\n        X2* it          = new X2;\r\n        STD shared_ptr<X2> sp0(it);\r\n        STD weak_ptr<X2> wp0(sp0);\r\n        STD shared_ptr<X0> sp1(wp0);\r\n        CHECK_INT(sp0.use_count(), 2);\r\n        CHECK_PTR(sp0.get(), it);\r\n        CHECK_INT(sp1.use_count(), 2);\r\n        CHECK_PTR(sp1.get(), it);\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp1) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // shared_ptr(STD auto_ptr<_U>(0))\r\n        deleter::called = 0;\r\n        STD auto_ptr<X0> ap(nullptr);\r\n        STD shared_ptr<X0> sp0(STD move(ap));\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_PTR(sp0.get(), nullptr);\r\n        CHECK_PTR(ap.get(), nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // shared_ptr(STD auto_ptr<_U>)\r\n        deleter::called = 0;\r\n        X0* it          = new X0;\r\n        STD auto_ptr<X0> ap(it);\r\n        STD shared_ptr<X0> sp0(STD move(ap));\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_PTR(sp0.get(), it);\r\n        CHECK_PTR(ap.get(), nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // shared_ptr = shared_ptr\r\n        deleter::called = 0;\r\n        X0* it          = new X0;\r\n        STD shared_ptr<X0> sp0(it);\r\n        STD shared_ptr<X0> sp1;\r\n        sp1 = sp0;\r\n        CHECK_INT(sp0.use_count(), 2);\r\n        CHECK_PTR(sp0.get(), it);\r\n        CHECK_INT(sp1.use_count(), 2);\r\n        CHECK_PTR(sp1.get(), it);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // shared_ptr = shared_ptr(_V*)\r\n        deleter::called = 0;\r\n        X2* it          = new X2;\r\n        STD shared_ptr<X2> sp0(it);\r\n        STD shared_ptr<X0> sp1;\r\n        sp1 = sp0;\r\n        CHECK_INT(sp0.use_count(), 2);\r\n        CHECK_PTR(sp0.get(), it);\r\n        CHECK_INT(sp1.use_count(), 2);\r\n        CHECK_PTR(sp1.get(), it);\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp1) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // shared_ptr = shared_ptr(_V*, _D)\r\n        deleter::called = 0;\r\n        X2* it          = new X2;\r\n        STD shared_ptr<X2> sp0(it, deleter());\r\n        STD shared_ptr<X0> sp1;\r\n        sp1 = sp0;\r\n        CHECK_INT(sp0.use_count(), 2);\r\n        CHECK_PTR(sp0.get(), it);\r\n        CHECK_INT(sp1.use_count(), 2);\r\n        CHECK_PTR(sp1.get(), it);\r\n        CHECK(STD get_deleter<deleter>(sp0) != nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp1) != nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 1);\r\n\r\n    { // shared_ptr = shared_ptr(_V*, _D, _A)\r\n        deleter::called = 0;\r\n        X2* it          = new X2;\r\n        STD shared_ptr<X2> sp0(it, deleter(), STD allocator<int>());\r\n        STD shared_ptr<X0> sp1;\r\n        sp1 = sp0;\r\n        CHECK_INT(sp0.use_count(), 2);\r\n        CHECK_PTR(sp0.get(), it);\r\n        CHECK_INT(sp1.use_count(), 2);\r\n        CHECK_PTR(sp1.get(), it);\r\n        CHECK(STD get_deleter<deleter>(sp0) != nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp1) != nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 1);\r\n\r\n    { // shared_ptr = shared_ptr(const _SP&, _T*)\r\n        deleter::called = 0;\r\n        X2* it          = new X2;\r\n        STD shared_ptr<X2> sp0(it, deleter(), STD allocator<int>());\r\n        int x = 3;\r\n        STD shared_ptr<int> sp1(sp0, &x);\r\n        CHECK_INT(sp0.use_count(), 2);\r\n        CHECK_PTR(sp0.get(), it);\r\n        CHECK_INT(sp1.use_count(), 2);\r\n        CHECK_PTR(sp1.get(), &x);\r\n        CHECK(STD get_deleter<deleter>(sp0) != nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp1) != nullptr);\r\n    }\r\n    CHECK_INT(deleter::called, 1);\r\n\r\n    { // shared_ptr = allocate_shared/make_shared\r\n        STD shared_ptr<Movable_int> sp0;\r\n        sp0 = STD make_shared<Movable_int>();\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_INT(*sp0, 0);\r\n        sp0 = STD make_shared<Movable_int>(2);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_INT(*sp0, 2);\r\n        sp0 = STD make_shared<Movable_int>(3, 2);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_INT(*sp0, 0x32);\r\n        sp0 = STD make_shared<Movable_int>(4, 3, 2);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_INT(*sp0, 0x432);\r\n        sp0 = STD make_shared<Movable_int>(5, 4, 3, 2);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_INT(*sp0, 0x5432);\r\n        sp0 = STD make_shared<Movable_int>(6, 5, 4, 3, 2);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_INT(*sp0, 0x65432);\r\n\r\n        STD allocator<Movable_int> myal;\r\n        sp0 = STD allocate_shared<Movable_int>(myal);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_INT(*sp0, 0);\r\n        sp0 = STD allocate_shared<Movable_int>(myal, 2);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_INT(*sp0, 2);\r\n        sp0 = STD allocate_shared<Movable_int>(myal, 3, 2);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_INT(*sp0, 0x32);\r\n        sp0 = STD allocate_shared<Movable_int>(myal, 4, 3, 2);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_INT(*sp0, 0x432);\r\n        sp0 = STD allocate_shared<Movable_int>(myal, 5, 4, 3, 2);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_INT(*sp0, 0x5432);\r\n        sp0 = STD allocate_shared<Movable_int>(myal, 6, 5, 4, 3, 2);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_INT(*sp0, 0x65432);\r\n    }\r\n\r\n    { // shared_ptr(forward(shared_ptr(_V*)))\r\n        X2* it = new X2;\r\n        STD shared_ptr<X2> sp0(it);\r\n        STD shared_ptr<X2> sp1(STD move(sp0));\r\n        CHECK_INT(sp0.use_count(), 0);\r\n        CHECK_PTR(sp0.get(), nullptr);\r\n        CHECK_INT(sp1.use_count(), 1);\r\n        CHECK_PTR(sp1.get(), it);\r\n    }\r\n\r\n    { // shared_ptr = forward(shared_ptr(_V*))\r\n        X2* it = new X2;\r\n        STD shared_ptr<X2> sp0(it);\r\n        STD shared_ptr<X2> sp1;\r\n        sp1 = STD move(sp0);\r\n        CHECK_INT(sp0.use_count(), 0);\r\n        CHECK_PTR(sp0.get(), nullptr);\r\n        CHECK_INT(sp1.use_count(), 1);\r\n        CHECK_PTR(sp1.get(), it);\r\n    }\r\n\r\n    { // shared_ptr(STD unique_ptr<_U>)\r\n        deleter::called = 0;\r\n        X0* it          = new X0;\r\n        STD unique_ptr<X0> up(it);\r\n        STD shared_ptr<X0> sp0(STD move(up));\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_PTR(sp0.get(), it);\r\n        CHECK_PTR(up.get(), nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // shared_ptr = STD unique_ptr<_U>\r\n        deleter::called = 0;\r\n        X0* it          = new X0;\r\n        STD unique_ptr<X0> up(it);\r\n        STD shared_ptr<X0> sp0;\r\n        sp0 = STD move(up);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_PTR(sp0.get(), it);\r\n        CHECK_PTR(up.get(), nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // shared_ptr = auto_ptr(V)\r\n        deleter::called = 0;\r\n        X2* it          = new X2;\r\n        STD auto_ptr<X2> ap(it);\r\n        STD shared_ptr<X0> sp0;\r\n        sp0 = STD move(ap);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_PTR(sp0.get(), it);\r\n        CHECK(ap.get() == nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // swap, member and global\r\n        deleter::called = 0;\r\n        X0* it0         = new X0;\r\n        X0* it1         = new X0;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        STD shared_ptr<X0> sp1(it1);\r\n        STD shared_ptr<X0> sp2(sp1);\r\n        sp0.swap(sp1);\r\n        CHECK_INT(sp0.use_count(), 2);\r\n        CHECK_PTR(sp0.get(), it1);\r\n        CHECK_INT(sp1.use_count(), 1);\r\n        CHECK_PTR(sp1.get(), it0);\r\n        CHECK_INT(sp2.use_count(), 2);\r\n        CHECK_PTR(sp2.get(), it1);\r\n        STD swap(sp0, sp1);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_PTR(sp0.get(), it0);\r\n        CHECK_INT(sp1.use_count(), 2);\r\n        CHECK_PTR(sp1.get(), it1);\r\n        CHECK_INT(sp2.use_count(), 2);\r\n        CHECK_PTR(sp2.get(), it1);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // reset\r\n        deleter::called = 0;\r\n        X0* it0         = new X0;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        sp0.reset();\r\n        CHECK_INT(sp0.use_count(), 0);\r\n        CHECK_PTR(sp0.get(), nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // reset(_V*)\r\n        deleter::called = 0;\r\n        X0* it0         = new X0;\r\n        X2* it1         = new X2;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        sp0.reset(it1);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_PTR(sp0.get(), it1);\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // reset(_V*, _D)\r\n        deleter::called = 0;\r\n        X0* it0         = new X0;\r\n        X2* it1         = new X2;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        sp0.reset(it1, deleter());\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_PTR(sp0.get(), it1);\r\n        CHECK(STD get_deleter<deleter>(sp0) != nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 1);\r\n\r\n    { // reset(_V*, _D, _A)\r\n        deleter::called = 0;\r\n        X0* it0         = new X0;\r\n        X2* it1         = new X2;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        sp0.reset(it1, deleter(), STD allocator<int>());\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_PTR(sp0.get(), it1);\r\n        CHECK(STD get_deleter<deleter>(sp0) != nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 1);\r\n\r\n    { // operator*, ->, unique\r\n        X0* it0 = new X0;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        CHECK_PTR(&*sp0, it0);\r\n        CHECK_PTR(sp0.operator->(), it0);\r\n        CHECK(sp0.unique());\r\n        STD shared_ptr<X0> sp1(sp0);\r\n        CHECK(!sp0.unique());\r\n    }\r\n\r\n    { // operator==, operator!=, operator<\r\n        X0* it0 = new X0;\r\n        X0* it1 = new X0;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        STD shared_ptr<X0> sp1(it1);\r\n        STD shared_ptr<X0> sp2(sp1);\r\n\r\n        CHECK(!(sp0 == sp1));\r\n        CHECK(sp0 != sp1);\r\n        CHECK(sp1 == sp2);\r\n        CHECK(!(sp1 != sp2));\r\n\r\n        CHECK(!(sp1 < sp2));\r\n        CHECK(!(sp2 < sp1));\r\n\r\n        CHECK(sp1 <= sp2);\r\n        CHECK(!(sp2 > sp1));\r\n        CHECK(sp1 >= sp2);\r\n    }\r\n\r\n    { // operator<<\r\n        X0* it0 = new X0;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        STD ostringstream str0, str1;\r\n        str0 << sp0;\r\n        str1 << it0;\r\n        CHECK_STRING(str0.str(), str1.str());\r\n    }\r\n\r\n    { // static_pointer_cast\r\n        deleter::called = 0;\r\n        X0* it0         = new X2;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        STD shared_ptr<X2> sp1 = STD static_pointer_cast<X2>(sp0);\r\n        CHECK_INT(sp0.use_count(), 2);\r\n        CHECK_PTR(sp0.get(), it0);\r\n        CHECK_INT(sp1.use_count(), 2);\r\n        CHECK_PTR(sp1.get(), it0);\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp1) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // const_pointer_cast\r\n        deleter::called = 0;\r\n        X0* it0         = new X2;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        STD shared_ptr<const X0> sp1 = STD const_pointer_cast<const X0>(sp0);\r\n        CHECK_INT(sp0.use_count(), 2);\r\n        CHECK_PTR(sp0.get(), it0);\r\n        CHECK_INT(sp1.use_count(), 2);\r\n        CHECK_PTR(sp1.get(), it0);\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp1) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n#if NO_EXCEPTIONS\r\n#else // NO_EXCEPTIONS\r\n    { // dynamic_pointer_cast\r\n        deleter::called = 0;\r\n        X0* it0         = new X2;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        STD shared_ptr<X1> sp1 = STD dynamic_pointer_cast<X1>(sp0);\r\n        CHECK_INT(sp0.use_count(), 2);\r\n        CHECK_PTR(sp0.get(), it0);\r\n        CHECK_INT(sp1.use_count(), 2);\r\n        CHECK_PTR(sp1.get(), dynamic_cast<X1*>(it0));\r\n        CHECK(STD get_deleter<deleter>(sp0) == nullptr);\r\n        CHECK(STD get_deleter<deleter>(sp1) == nullptr);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n#endif // NO_EXCEPTIONS\r\n}\r\n\r\nstatic void t_make_unique() { // test make_unique interface\r\n    STD unique_ptr<int> up0;\r\n    up0 = STD make_unique<int>();\r\n    CHECK_INT(*up0, 0);\r\n    up0 = STD make_unique<int>(2);\r\n    CHECK_INT(*up0, 2);\r\n\r\n    STD unique_ptr<int[]> up1;\r\n    up1 = STD make_unique<int[]>(3);\r\n    CHECK_INT(up1[0], 0);\r\n    CHECK_INT(up1[2], 0);\r\n}\r\n\r\nstatic void t_weak_ptr() { // test weak_ptr interface\r\n\r\n    { // weak_ptr()\r\n        deleter::called = 0;\r\n        STD weak_ptr<X0> wp0;\r\n        CHECK_INT(wp0.use_count(), 0);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // weak_ptr(shared_ptr())\r\n        deleter::called = 0;\r\n        STD shared_ptr<X2> sp0;\r\n        STD weak_ptr<X0> wp0(sp0);\r\n        CHECK_INT(wp0.use_count(), 0);\r\n        CHECK_INT(sp0.use_count(), 0);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // weak_ptr(shared_ptr(_V*))\r\n        deleter::called = 0;\r\n        X2* it0         = new X2;\r\n        STD shared_ptr<X2> sp0(it0);\r\n        STD weak_ptr<X0> wp0(sp0);\r\n        CHECK_INT(wp0.use_count(), 1);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // weak_ptr(shared_ptr(_V*, _D))\r\n        deleter::called = 0;\r\n        X2* it0         = new X2;\r\n        STD shared_ptr<X2> sp0(it0, deleter());\r\n        STD weak_ptr<X0> wp0(sp0);\r\n        CHECK_INT(wp0.use_count(), 1);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 1);\r\n\r\n    { // weak_ptr(weak_ptr(_U*))\r\n        deleter::called = 0;\r\n        X0* it0         = new X2;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        STD weak_ptr<X0> wp0(sp0);\r\n        STD weak_ptr<X0> wp1(wp0);\r\n        CHECK_INT(wp0.use_count(), 1);\r\n        CHECK_INT(wp1.use_count(), 1);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // weak_ptr(weak_ptr(_V*))\r\n        deleter::called = 0;\r\n        X2* it0         = new X2;\r\n        STD shared_ptr<X2> sp0(it0);\r\n        STD weak_ptr<X0> wp0(sp0);\r\n        STD weak_ptr<X0> wp1(wp0);\r\n        CHECK_INT(wp0.use_count(), 1);\r\n        CHECK_INT(wp1.use_count(), 1);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // weak_ptr = weak_ptr\r\n        deleter::called = 0;\r\n        STD weak_ptr<X0> wp0;\r\n        STD weak_ptr<X0> wp1;\r\n        wp0 = wp1;\r\n        CHECK_INT(wp0.use_count(), 0);\r\n        CHECK_INT(wp1.use_count(), 0);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // weak_ptr = weak_ptr(shared_ptr)\r\n        deleter::called = 0;\r\n        X0* it0         = new X2;\r\n        STD weak_ptr<X0> wp0;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        STD weak_ptr<X0> wp1(sp0);\r\n        wp0 = wp1;\r\n        CHECK_INT(wp0.use_count(), 1);\r\n        CHECK_INT(wp1.use_count(), 1);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // weak_ptr = shared_ptr\r\n        deleter::called = 0;\r\n        STD weak_ptr<X0> wp0;\r\n        STD shared_ptr<X0> sp0;\r\n        wp0 = sp0;\r\n        CHECK_INT(sp0.use_count(), 0);\r\n        CHECK_INT(sp0.use_count(), 0);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // weak_ptr.swap(weak_ptr)\r\n        deleter::called = 0;\r\n        STD weak_ptr<X0> wp0;\r\n        STD weak_ptr<X0> wp1;\r\n        wp0.swap(wp1);\r\n        CHECK_INT(wp0.use_count(), 0);\r\n        CHECK_INT(wp1.use_count(), 0);\r\n        STD swap(wp0, wp1);\r\n        CHECK_INT(wp0.use_count(), 0);\r\n        CHECK_INT(wp1.use_count(), 0);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // weak_ptr.swap(weak_ptr(_U*))\r\n        deleter::called = 0;\r\n        X0* it0         = new X2;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        STD weak_ptr<X0> wp0;\r\n        STD weak_ptr<X0> wp1(sp0);\r\n        wp0.swap(wp1);\r\n        CHECK_INT(wp0.use_count(), 1);\r\n        CHECK_INT(wp1.use_count(), 0);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        STD swap(wp0, wp1);\r\n        CHECK_INT(wp0.use_count(), 0);\r\n        CHECK_INT(wp1.use_count(), 1);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // weak_ptr(_U*).swap(weak_ptr)\r\n        deleter::called = 0;\r\n        X0* it0         = new X2;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        STD weak_ptr<X0> wp0(sp0);\r\n        STD weak_ptr<X0> wp1;\r\n        wp0.swap(wp1);\r\n        CHECK_INT(wp0.use_count(), 0);\r\n        CHECK_INT(wp1.use_count(), 1);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        STD swap(wp0, wp1);\r\n        CHECK_INT(wp0.use_count(), 1);\r\n        CHECK_INT(wp1.use_count(), 0);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // weak_ptr(_U*).swap(weak_ptr(_U*))\r\n        deleter::called = 0;\r\n        X0* it0         = new X2;\r\n        X0* it1         = new X2;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        STD shared_ptr<X0> sp1(it1);\r\n        STD weak_ptr<X0> wp0(sp0);\r\n        STD weak_ptr<X0> wp1(sp1);\r\n        wp0.swap(wp1);\r\n        CHECK_INT(wp0.use_count(), 1);\r\n        CHECK_INT(wp1.use_count(), 1);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_INT(sp1.use_count(), 1);\r\n        STD swap(wp0, wp1);\r\n        CHECK_INT(wp0.use_count(), 1);\r\n        CHECK_INT(wp1.use_count(), 1);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n        CHECK_INT(sp1.use_count(), 1);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // reset\r\n        deleter::called = 0;\r\n        X0* it0         = new X2;\r\n        STD shared_ptr<X0> sp0(it0);\r\n        STD weak_ptr<X0> wp0(sp0);\r\n        STD weak_ptr<X0> wp1;\r\n        wp0.reset();\r\n        wp1.reset();\r\n        CHECK_INT(wp0.use_count(), 0);\r\n        CHECK_INT(wp1.use_count(), 0);\r\n        CHECK_INT(sp0.use_count(), 1);\r\n    }\r\n    CHECK_INT(X0::objects, 0);\r\n    CHECK_INT(deleter::called, 0);\r\n\r\n    { // expired\r\n        deleter::called = 0;\r\n        X0* it0         = new X2;\r\n        STD weak_ptr<X0> wp0;\r\n        { // create local shared_ptr which releases resource at end of block\r\n            STD shared_ptr<X0> sp0(it0);\r\n            wp0 = sp0;\r\n            CHECK_INT(sp0.use_count(), 1);\r\n            CHECK_INT(wp0.use_count(), 1);\r\n            CHECK(!wp0.expired());\r\n        }\r\n        CHECK_INT(X0::objects, 0);\r\n        CHECK_INT(deleter::called, 0);\r\n        CHECK_INT(wp0.use_count(), 0);\r\n        CHECK(wp0.expired());\r\n\r\n#if NO_EXCEPTIONS\r\n#else // NO_EXCEPTIONS\r\n        bool caught = false;\r\n        try { // look for exception from expired weak_ptr object\r\n            STD shared_ptr<X0> sp1(wp0);\r\n        } catch (const STD bad_weak_ptr&) { // catch exception\r\n            caught = true;\r\n        } catch (...) {\r\n        }\r\n        CHECK(caught);\r\n#endif // NO_EXCEPTIONS\r\n    }\r\n\r\n    { // lock\r\n        deleter::called = 0;\r\n        X0* it0         = new X2;\r\n        STD weak_ptr<X0> wp0;\r\n        { // create local shared_ptr which releases resource at end of block\r\n            STD shared_ptr<X0> sp0(it0);\r\n            wp0                    = sp0;\r\n            STD shared_ptr<X0> sp1 = wp0.lock();\r\n            CHECK_INT(wp0.use_count(), 2);\r\n            CHECK_INT(sp0.use_count(), 2);\r\n            CHECK_INT(sp1.use_count(), 2);\r\n        }\r\n\r\n        CHECK_INT(X0::objects, 0);\r\n        CHECK_INT(deleter::called, 0);\r\n        CHECK_INT(wp0.use_count(), 0);\r\n        CHECK(wp0.expired());\r\n        STD shared_ptr<X0> sp2 = wp0.lock();\r\n        CHECK_INT(wp0.use_count(), 0);\r\n        CHECK(wp0.expired());\r\n        CHECK_INT(sp2.use_count(), 0);\r\n        CHECK_PTR(sp2.get(), nullptr);\r\n    }\r\n\r\n    { // operator<\r\n        X0* it1 = new X0;\r\n\r\n        STD shared_ptr<X0> sp1(it1);\r\n        STD shared_ptr<X0> sp2(sp1);\r\n\r\n        STD weak_ptr<X0> wp1(sp1);\r\n        STD weak_ptr<X0> wp2(sp2);\r\n\r\n        CHECK(!(sp1.owner_before(sp2)) && !(sp2.owner_before(sp1)));\r\n        CHECK(!(wp1.owner_before(wp2)) && !(wp2.owner_before(wp1)));\r\n\r\n        CHECK(!STD owner_less<STD shared_ptr<X0>>()(sp1, sp2));\r\n        CHECK(!STD owner_less<STD shared_ptr<X0>>()(sp1, wp2));\r\n        CHECK(!STD owner_less<STD shared_ptr<X0>>()(wp1, sp2));\r\n\r\n        CHECK(!STD owner_less<STD weak_ptr<X0>>()(wp1, wp2));\r\n        CHECK(!STD owner_less<STD weak_ptr<X0>>()(wp1, sp2));\r\n        CHECK(!STD owner_less<STD weak_ptr<X0>>()(sp1, wp2));\r\n    }\r\n}\r\n\r\nstatic void t_enable_shared_from_this() { // test enable_shared_from_this interface\r\n    STD shared_ptr<X> sp0(new X2);\r\n\r\n#if NO_EXCEPTIONS\r\n    STD shared_ptr<X> sp1 = sp0->shared_from_this();\r\n    CHECK(sp0 == sp1);\r\n    CHECK_INT(sp0.use_count(), 2);\r\n    CHECK_INT(sp1.use_count(), 2);\r\n\r\n#else // NO_EXCEPTIONS\r\n    try { // make sure no exceptions escape\r\n        STD shared_ptr<X> sp1 = sp0->shared_from_this();\r\n        CHECK(sp0 == sp1);\r\n        CHECK_INT(sp0.use_count(), 2);\r\n        CHECK_INT(sp1.use_count(), 2);\r\n    } catch (const STD bad_weak_ptr&) { // catch failed conversion\r\n        CHECK_MSG(\"enable_shared failed\", 0);\r\n    } catch (...) {\r\n    }\r\n#endif // NO_EXCEPTIONS\r\n}\r\n\r\nvoid test_main() { // run tests\r\n    t_bad_weak_ptr();\r\n    t_shared_ptr();\r\n    t_make_unique();\r\n    t_weak_ptr();\r\n    t_enable_shared_from_this();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/memory2/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\..\\env_minus_pure.lst\r\n"
  },
  {
    "path": "tests/tr1/tests/memory2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <memory>, part 2\r\n#define TEST_NAME \"<memory>, part 2\"\r\n\r\n#include \"tdefs.h\"\r\n#include <memory>\r\n#include <mutex>\r\n#include <random>\r\n#include <thread>\r\n#include <vector>\r\n\r\nusing STD shared_ptr;\r\nusing STD weak_ptr;\r\n\r\nusing STD lock_guard;\r\nusing STD mt19937;\r\nusing STD mutex;\r\nusing STD thread;\r\nusing STD vector;\r\n\r\n#define NSETS    3000\r\n#define NREPS    300\r\n#define NTHREADS 3\r\n\r\nstatic shared_ptr<int> sp;\r\nstatic mutex start_mtx;\r\n\r\nstatic void ctors() { // construct a gazillion shared and weak pointers\r\n    mt19937 mt;\r\n\r\n    { // wait for access\r\n        lock_guard<mutex> lock(start_mtx);\r\n    }\r\n\r\n    for (int i = 0; i < NSETS; ++i) {\r\n        for (int j = 0; j < NREPS; ++j) {\r\n            if (mt() % 2 != 0) {\r\n                shared_ptr<int> sp0(sp);\r\n            } else {\r\n                weak_ptr<int> wp0(sp);\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nstatic void tctors() { // check for race conditions\r\n    sp = shared_ptr<int>(new int);\r\n    vector<thread> grp;\r\n\r\n    { // wait for access\r\n        lock_guard<mutex> lock(start_mtx);\r\n        for (int i = 0; i < NTHREADS; ++i) {\r\n            grp.emplace_back(ctors);\r\n        }\r\n    }\r\n\r\n    for (int i = 0; i < NTHREADS; ++i) {\r\n        grp[i].join();\r\n    }\r\n\r\n    CHECK_INT(sp.use_count(), 1);\r\n}\r\n\r\nvoid test_main() { // run tests\r\n    tctors();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/memory3/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <memory> C++11 additions, part 3\r\n#define TEST_NAME \"<memory>, part 3\"\r\n\r\n#include \"tdefs.h\"\r\n#include <memory>\r\n\r\n#define RBOTHER\r\n\r\n// base and derived classes\r\nstruct base { // base class\r\n    base(int v = 0) : val(v) { // construct from value\r\n    }\r\n\r\n    virtual ~base() noexcept { // destroy the object\r\n    }\r\n\r\n    int val;\r\n};\r\n\r\nstruct derived : public base { // derived class\r\n    derived(int v = 0) : base(v) { // construct from value\r\n    }\r\n};\r\n\r\n// counting deleter\r\nstruct deleter { // deleter test object\r\n    static int called;\r\n    void operator()(int* ip) { // increment count, delete object\r\n        ++called;\r\n        delete ip;\r\n    }\r\n};\r\nint deleter::called;\r\n\r\n// counting deleter for arrays\r\nstruct deleter_arr { // deleter test object\r\n    static int called;\r\n    void operator()(int* ip) { // increment count, delete object\r\n        ++called;\r\n        delete[] ip;\r\n    }\r\n};\r\nint deleter_arr::called;\r\n\r\nvoid t_del() { // test default_delete for scalars\r\n    typedef STD default_delete<int> deleter_t;\r\n    deleter_t del;\r\n    int* ptr = new int;\r\n    del(ptr);\r\n\r\n    STD default_delete<derived> del1;\r\n    STD default_delete<base> del2(del1);\r\n    (void) del2;\r\n}\r\n\r\nvoid t_del_arr() { // test default_delete for arrays\r\n    typedef STD default_delete<int[]> deleter_t;\r\n    deleter_t del;\r\n\r\n    int* ptr = new int[5];\r\n    del(ptr);\r\n}\r\n\r\nvoid t_unique_ptr() { // test unique_ptr interface for scalars\r\n    typedef STD unique_ptr<int> uptr_t;\r\n    typedef STD default_delete<int> deleter_t;\r\n    bool st = STD is_same<uptr_t::element_type, int>::value;\r\n    CHECK(st);\r\n    st = STD is_same<uptr_t::deleter_type, deleter_t>::value;\r\n    CHECK(st);\r\n    st = STD is_same<uptr_t::pointer, int*>::value;\r\n    CHECK(st);\r\n\r\n    uptr_t up0;\r\n    deleter_t del(up0.get_deleter());\r\n    del = del; // to quiet diagnostics\r\n\r\n    CHECK(up0.get() == nullptr);\r\n    CHECK(!up0);\r\n    CHECK(up0.release() == nullptr);\r\n    int val = 5;\r\n    up0.reset(&val);\r\n    CHECK(up0.get() == &val);\r\n    CHECK((bool) up0);\r\n    CHECK_INT(*up0, 5);\r\n    CHECK(up0.release() == &val);\r\n    CHECK(up0.release() == nullptr);\r\n    up0 = nullptr;\r\n    CHECK(up0.get() == nullptr);\r\n\r\n    { // test explicit deleter\r\n        typedef STD unique_ptr<int, deleter> uptrd_t;\r\n        typedef STD unique_ptr<int, deleter&> uptrdr_t;\r\n        deleter del0;\r\n\r\n        deleter::called = 0;\r\n        uptrd_t upd0(new int(10), del0);\r\n        uptrdr_t upd1(new int(10), del0);\r\n    }\r\n    CHECK_INT(deleter::called, 2);\r\n\r\n    { // test comparisons\r\n        int a[2] = {0};\r\n        uptr_t upa0(&a[0]);\r\n        uptr_t upa1(&a[1]);\r\n\r\n        CHECK(upa0 == upa0);\r\n        CHECK(upa0 != upa1);\r\n        CHECK(upa0 < upa1);\r\n        CHECK(upa1 >= upa0);\r\n        CHECK(upa1 > upa0);\r\n        CHECK(upa0 <= upa1);\r\n\r\n        upa0.swap(upa1);\r\n        CHECK(upa1 < upa0);\r\n\r\n        upa0.release();\r\n        upa1.release();\r\n    }\r\n\r\n    // test moves\r\n    typedef STD unique_ptr<base> uptrb_t;\r\n    typedef STD unique_ptr<derived> uptrd_t;\r\n    uptrb_t up1(new base(6));\r\n    CHECK_INT(up1->val, 6);\r\n    uptrb_t up2(new base(7));\r\n    CHECK_INT(up2->val, 7);\r\n    up1 = STD move(up2);\r\n    CHECK_INT(up1->val, 7);\r\n    CHECK(up2.get() == nullptr);\r\n\r\n    uptrd_t up3(new derived(7));\r\n    CHECK_INT(up3->val, 7);\r\n\r\n    { // test explicit deleter\r\n        typedef STD unique_ptr<int, deleter> uptrdel_t;\r\n        typedef STD unique_ptr<int, deleter&> uptrdelref_t;\r\n        deleter del0;\r\n\r\n        deleter::called = 0;\r\n        uptrdel_t upd0(new int(10), deleter());\r\n        uptrdelref_t upd1(new int(10), del0);\r\n    }\r\n    CHECK_INT(deleter::called, 2);\r\n\r\n    // test swap\r\n}\r\n\r\nvoid t_unique_ptr_arr() { // test unique_ptr interface for arrays\r\n    typedef STD unique_ptr<int[]> uptr_t;\r\n    typedef STD default_delete<int[]> deleter_t;\r\n    bool st = STD is_same<uptr_t::element_type, int>::value;\r\n    CHECK(st);\r\n    st = STD is_same<uptr_t::deleter_type, deleter_t>::value;\r\n    CHECK(st);\r\n    st = STD is_same<uptr_t::pointer, int*>::value;\r\n    CHECK(st);\r\n\r\n    uptr_t up0;\r\n    deleter_t del(up0.get_deleter());\r\n    del = del; // to quiet diagnostics\r\n\r\n    CHECK(up0.get() == nullptr);\r\n    CHECK(!up0);\r\n    CHECK(up0.release() == nullptr);\r\n    int val = 5;\r\n    up0.reset(&val);\r\n    CHECK(up0.get() == &val);\r\n    CHECK((bool) up0);\r\n    CHECK_INT(up0[0], 5);\r\n    CHECK(up0.release() == &val);\r\n    CHECK(up0.release() == nullptr);\r\n    up0 = nullptr;\r\n    CHECK(up0.get() == nullptr);\r\n\r\n    { // test explicit deleter\r\n        typedef STD unique_ptr<int[], deleter_arr> uptrd_t;\r\n        typedef STD unique_ptr<int[], deleter_arr&> uptrdr_t;\r\n        deleter_arr del0;\r\n\r\n        deleter_arr::called = 0;\r\n        uptrd_t upd0(new int[10], del0);\r\n        uptrdr_t upd1(new int[10], del0);\r\n    }\r\n    CHECK_INT(deleter_arr::called, 2);\r\n\r\n    { // test comparisons\r\n        int a[2] = {0};\r\n        uptr_t upa0(&a[0]);\r\n        uptr_t upa1(&a[1]);\r\n\r\n        CHECK(upa0 == upa0);\r\n        CHECK(upa0 != upa1);\r\n        CHECK(upa0 < upa1);\r\n        CHECK(upa1 >= upa0);\r\n        CHECK(upa1 > upa0);\r\n        CHECK(upa0 <= upa1);\r\n\r\n        upa0.swap(upa1);\r\n        CHECK(upa1 < upa0);\r\n\r\n        upa0.release();\r\n        upa1.release();\r\n    }\r\n\r\n    // test moves\r\n    typedef STD unique_ptr<base[]> uptrb_t;\r\n    uptrb_t up1(new base[2]);\r\n    up1[1].val = 6;\r\n    CHECK_INT(up1[1].val, 6);\r\n    uptrb_t up2(new base[2]);\r\n    up2[1].val = 7;\r\n    CHECK_INT(up2[1].val, 7);\r\n    up1 = STD move(up2);\r\n    CHECK_INT(up1[1].val, 7);\r\n    CHECK(up2.get() == nullptr);\r\n\r\n    { // test explicit deleter\r\n        typedef STD unique_ptr<int[], deleter_arr> uptrd_t;\r\n        typedef STD unique_ptr<int[], deleter_arr&> uptrdr_t;\r\n        deleter_arr del0;\r\n\r\n        deleter_arr::called = 0;\r\n        uptrd_t upd0(new int(10), deleter_arr());\r\n        uptrdr_t upd1(new int(10), del0);\r\n    }\r\n    CHECK_INT(deleter_arr::called, 2);\r\n}\r\n\r\nvoid t_hash() { // test hash functions\r\n    typedef STD shared_ptr<int> sptr_t;\r\n    sptr_t sp0;\r\n    CSTD size_t hash_val = STD hash<sptr_t>()(sp0);\r\n    (void) hash_val;\r\n\r\n    typedef STD unique_ptr<int> uptr_t;\r\n    uptr_t up0;\r\n    hash_val = STD hash<uptr_t>()(up0);\r\n}\r\n\r\ntemplate <class Ty>\r\nstruct Ptr { // wraps a pointer\r\n    typedef Ty* pointer;\r\n\r\n    Ptr(Ty* addr) : myaddr(addr) { // construct from raw pointer\r\n    }\r\n\r\n    Ty operator*() { // dereference pointer\r\n        return *myaddr;\r\n    }\r\n\r\n    static Ptr<Ty> pointer_to(Ty& addr) { // get address\r\n        return Ptr(&addr);\r\n    }\r\n\r\n    Ty* myaddr;\r\n};\r\n\r\nvoid t_pointer_traits() { // test pointer_traits\r\n    { // test raw pointers\r\n        typedef STD pointer_traits<char*> Mytraits;\r\n        CHECK_TYPE(Mytraits::element_type, char);\r\n        CHECK_TYPE(Mytraits::pointer, char*);\r\n        CHECK_TYPE(Mytraits::difference_type, STD ptrdiff_t);\r\n        CHECK_TYPE(Mytraits::rebind<int> RBOTHER, int*);\r\n\r\n        char val;\r\n        CHECK_PTR(Mytraits::pointer_to(val), &val);\r\n    }\r\n\r\n    { // test arbitrary class\r\n        typedef STD pointer_traits<Ptr<char>> Mytraits;\r\n        CHECK_TYPE(Mytraits::element_type, char);\r\n        CHECK_TYPE(Mytraits::pointer, Ptr<char>);\r\n        CHECK_TYPE(Mytraits::difference_type, STD ptrdiff_t);\r\n        CHECK_TYPE(Mytraits::rebind<int> RBOTHER, Ptr<int>);\r\n\r\n        char val = 3;\r\n        CHECK_INT(*Mytraits::pointer_to(val), 3);\r\n    }\r\n\r\n    { // test void pointer\r\n        typedef STD pointer_traits<void*> Mytraits;\r\n        CHECK_TYPE(Mytraits::element_type, void);\r\n        CHECK_TYPE(Mytraits::pointer, void*);\r\n        CHECK_TYPE(Mytraits::difference_type, STD ptrdiff_t);\r\n        CHECK_TYPE(Mytraits::rebind<int> RBOTHER, int*);\r\n\r\n        char val;\r\n        CHECK_PTR((char*) Mytraits::pointer_to(val), &val);\r\n    }\r\n}\r\n\r\ntemplate <class Ty>\r\nclass Min_alloc { // minimal allocator\r\npublic:\r\n    typedef Ty value_type;\r\n\r\n    Min_alloc() {}\r\n    template <class Other>\r\n    Min_alloc(const Min_alloc<Other>&) {}\r\n\r\n    Ty* allocate(size_t count) {\r\n        return (Ty*) ::operator new(count * sizeof(Ty));\r\n    }\r\n\r\n    void deallocate(Ty* ptr, size_t) {\r\n        ::operator delete(ptr);\r\n    }\r\n};\r\n\r\ntemplate <class Ty, class Other>\r\nbool operator==(const Min_alloc<Ty>&, const Min_alloc<Other>&) {\r\n    return true;\r\n}\r\n\r\ntemplate <class Ty, class Other>\r\nbool operator!=(const Min_alloc<Ty>&, const Min_alloc<Other>&) {\r\n    return false;\r\n}\r\n\r\nvoid t_allocator_traits() { // test allocator_traits\r\n    { // test against standard allocator\r\n        typedef STD allocator_traits<STD allocator<char>> Mytraits;\r\n        CHECK_TYPE(Mytraits::allocator_type, STD allocator<char>);\r\n        CHECK_TYPE(Mytraits::value_type, char);\r\n\r\n        CHECK_TYPE(Mytraits::pointer, char*);\r\n        CHECK_TYPE(Mytraits::const_pointer, const char*);\r\n        CHECK_TYPE(Mytraits::void_pointer, void*);\r\n        CHECK_TYPE(Mytraits::const_void_pointer, const void*);\r\n\r\n        CHECK_TYPE(Mytraits::size_type, STD size_t);\r\n        CHECK_TYPE(Mytraits::difference_type, STD ptrdiff_t);\r\n\r\n        CHECK_TYPE(Mytraits::rebind_alloc<int> RBOTHER, STD allocator<int>);\r\n        CHECK_TYPE(Mytraits::rebind_traits<int> RBOTHER, STD allocator_traits<STD allocator<int>>);\r\n\r\n        CHECK_TYPE(Mytraits::propagate_on_container_copy_assignment, STD false_type);\r\n        CHECK_TYPE(Mytraits::propagate_on_container_move_assignment, STD true_type);\r\n        CHECK_TYPE(Mytraits::propagate_on_container_swap, STD false_type);\r\n\r\n        CHECK_TYPE(Mytraits::is_always_equal, STD true_type);\r\n\r\n        STD allocator<char> myal;\r\n        char* pch = Mytraits::allocate(myal, 1);\r\n        CHECK(pch != nullptr);\r\n        if (pch != nullptr) { // avoid tests if allocate fails\r\n            Mytraits::construct(myal, pch, 'x');\r\n            CHECK_INT(*pch, 'x');\r\n            Mytraits::destroy(myal, pch);\r\n            Mytraits::deallocate(myal, pch, 1);\r\n        }\r\n\r\n        CHECK(Mytraits::max_size(myal) == static_cast<STD size_t>(-1));\r\n        CHECK(Mytraits::select_on_container_copy_construction(myal) == myal);\r\n    }\r\n\r\n    { // test against minimal allocator\r\n        Min_alloc<char> myal;\r\n        typedef STD allocator_traits<Min_alloc<char>> Mytraits;\r\n        CHECK_TYPE(Mytraits::allocator_type, Min_alloc<char>);\r\n        CHECK_TYPE(Mytraits::value_type, char);\r\n\r\n        CHECK_TYPE(Mytraits::pointer, char*);\r\n        CHECK_TYPE(Mytraits::const_pointer, const char*);\r\n        CHECK_TYPE(Mytraits::void_pointer, void*);\r\n        CHECK_TYPE(Mytraits::const_void_pointer, const void*);\r\n\r\n        CHECK_TYPE(Mytraits::size_type, STD size_t);\r\n        CHECK_TYPE(Mytraits::difference_type, STD ptrdiff_t);\r\n\r\n        CHECK_TYPE(Mytraits::rebind_alloc<int> RBOTHER, Min_alloc<int>);\r\n        CHECK_TYPE(Mytraits::rebind_traits<int> RBOTHER, STD allocator_traits<Min_alloc<int>>);\r\n\r\n        CHECK_TYPE(Mytraits::propagate_on_container_copy_assignment, STD false_type);\r\n        CHECK_TYPE(Mytraits::propagate_on_container_move_assignment, STD false_type);\r\n        CHECK_TYPE(Mytraits::propagate_on_container_swap, STD false_type);\r\n\r\n        char* pch = Mytraits::allocate(myal, 1);\r\n        CHECK(pch != nullptr);\r\n        Mytraits::construct(myal, pch, 'x');\r\n        CHECK_INT(*pch, 'x');\r\n        Mytraits::destroy(myal, pch);\r\n        Mytraits::deallocate(myal, pch, 1);\r\n        CHECK(Mytraits::max_size(myal) == static_cast<STD size_t>(-1));\r\n        CHECK(Mytraits::select_on_container_copy_construction(myal) == myal);\r\n    }\r\n}\r\n\r\nSTD allocator_arg_t arg(STD allocator_arg);\r\n\r\n#define NSPACE 128\r\nstruct Space { // space for testing align\r\n    char ch;\r\n    char buf[NSPACE];\r\n} space;\r\n\r\nvoid t_align() { // test align\r\n    void* ptr      = space.buf;\r\n    STD size_t len = NSPACE;\r\n    CHECK_PTR(STD align(1, NSPACE + 1, ptr, len), (void*) nullptr);\r\n    CHECK_PTR(ptr, space.buf);\r\n    CHECK_INT(len, NSPACE);\r\n    CHECK_PTR(STD align(1, 1, ptr, len), space.buf);\r\n    CHECK_PTR(ptr, space.buf);\r\n    CHECK_INT(len, NSPACE);\r\n    void* adjusted = STD align(4, 4, ptr, len);\r\n    CHECK(adjusted == ptr);\r\n    CHECK((char*) ptr >= space.buf);\r\n    CHECK((char*) ptr < space.buf + 4);\r\n    CHECK(len > NSPACE - 4);\r\n    CHECK(len <= NSPACE);\r\n}\r\n\r\nvoid test_main() { // run tests\r\n    t_del();\r\n    t_del_arr();\r\n    t_unique_ptr();\r\n    t_hash();\r\n    t_pointer_traits();\r\n    t_allocator_traits();\r\n    t_align();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/new/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <new>\r\n#define TEST_NAME \"<new>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <assert.h>\r\n#include <new>\r\n#include <string.h>\r\n\r\n#ifdef _M_CEE_PURE\r\nvoid test_main() { // test nothing\r\n}\r\n#else // _M_CEE_PURE\r\nstatic int destructor_called = 0;\r\n\r\nclass abc { // wrap a string\r\npublic:\r\n    abc(const char* s = \"xxx\") { // construct from NTBS\r\n        CSTD strcpy(buf, s);\r\n    }\r\n\r\n    ~abc() noexcept { // count destructor calls\r\n        ++destructor_called;\r\n    }\r\n\r\n    char* ptr() { // return pointer to string\r\n        return buf;\r\n    }\r\n\r\nprivate:\r\n    char buf[10];\r\n};\r\n\r\nstatic void nop() { // dummy new handler\r\n}\r\n\r\nstatic int subs_called = 0;\r\n\r\n_Ret_notnull_ _Post_writable_byte_size_(size) void* operator new[](\r\n    CSTD size_t size) { // replacement for array operator new\r\n    subs_called += 1;\r\n    return operator new(size);\r\n}\r\n\r\nvoid operator delete[](void* p) noexcept { // replacement for array operator delete\r\n    subs_called += 2;\r\n    operator delete(p);\r\n}\r\n\r\nvoid test_main() { // test basic workings of new definitions\r\n    STD bad_alloc x1;\r\n\r\n    STD bad_array_new_length x2;\r\n\r\n    STD nothrow_t nt          = STD nothrow;\r\n    STD new_handler save_hand = STD set_new_handler(&nop);\r\n\r\n    nt = nt; // to quiet diagnostics\r\n\r\n    CHECK(STD get_new_handler() == &nop);\r\n\r\n    CHECK(STD set_new_handler(save_hand) == &nop);\r\n\r\n    // test new, placement new, and delete\r\n    destructor_called = 0;\r\n    abc* p            = new abc(\"first\");\r\n    assert(p != nullptr);\r\n    CHECK_STR(p->ptr(), \"first\");\r\n    CHECK_PTR(new (p) abc(\"second\"), (void*) p);\r\n    CHECK_STR(p->ptr(), \"second\");\r\n\r\n    operator delete(p, p);\r\n    CHECK_INT(destructor_called, 0);\r\n    delete p;\r\n    CHECK_INT(destructor_called, 1);\r\n    p = new (STD nothrow) abc(\"third\");\r\n    assert(p != nullptr);\r\n    operator delete(p, STD nothrow);\r\n    CHECK_INT(destructor_called, 1);\r\n\r\n    // test array new, placement new, and delete\r\n    destructor_called = 0;\r\n    subs_called       = 0;\r\n    abc* p2           = new abc[1];\r\n    assert(p2 != nullptr);\r\n    CHECK_STR(p2->ptr(), \"xxx\");\r\n    CHECK_PTR(new (p2) abc(\"second\"), static_cast<void*>(p2));\r\n    CHECK_STR(p2->ptr(), \"second\");\r\n\r\n    operator delete[](p2, p2);\r\n    CHECK_INT(destructor_called, 0);\r\n    delete[] p2;\r\n    CHECK_INT(destructor_called, 1);\r\n}\r\n#endif // _M_CEE_PURE\r\n"
  },
  {
    "path": "tests/tr1/tests/numeric/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <numeric>\r\n#define TEST_NAME \"<numeric>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <functional>\r\n#include <numeric>\r\n\r\nvoid test_main() { // test basic workings of numeric definitions\r\n    STD multiplies<int> multipliesf;\r\n    STD plus<int> plusf;\r\n    int buf[]   = {1, 2, 3, 4, 5, 6};\r\n    int dest[6] = {0};\r\n    int *first = buf, *last = buf + 6;\r\n    int val = 0;\r\n\r\n    CHECK_INT(STD accumulate(first, last, val), 21);\r\n    CHECK_INT(STD accumulate(first, last, val, plusf), 21);\r\n    CHECK_INT(STD inner_product(first, last, first, val), 91);\r\n    CHECK_INT(STD inner_product(first, last, first, val, plusf, multipliesf), 91);\r\n\r\n    STD partial_sum(first, last, dest);\r\n    CHECK_INT(dest[0], 1);\r\n    CHECK_INT(dest[1], 3);\r\n    CHECK_INT(dest[2], 6);\r\n    CHECK_INT(dest[3], 10);\r\n    CHECK_INT(dest[4], 15);\r\n    CHECK_INT(dest[5], 21);\r\n\r\n    STD adjacent_difference(first, last, dest);\r\n    CHECK_INT(dest[0], 1);\r\n    CHECK_INT(dest[1], 1);\r\n    CHECK_INT(dest[2], 1);\r\n    CHECK_INT(dest[3], 1);\r\n    CHECK_INT(dest[4], 1);\r\n    CHECK_INT(dest[5], 1);\r\n\r\n    STD partial_sum(first, last, dest, plusf);\r\n    CHECK_INT(dest[0], 1);\r\n    CHECK_INT(dest[1], 3);\r\n    CHECK_INT(dest[2], 6);\r\n    CHECK_INT(dest[3], 10);\r\n    CHECK_INT(dest[4], 15);\r\n    CHECK_INT(dest[5], 21);\r\n\r\n    STD adjacent_difference(first, last, dest, plusf);\r\n    CHECK_INT(dest[0], 1);\r\n    CHECK_INT(dest[1], 3);\r\n    CHECK_INT(dest[2], 5);\r\n    CHECK_INT(dest[3], 7);\r\n    CHECK_INT(dest[4], 9);\r\n    CHECK_INT(dest[5], 11);\r\n\r\n    STD iota(dest, dest + 6, 'a');\r\n    CHECK_INT(dest[0], 'a');\r\n    CHECK_INT(dest[1], 'b');\r\n    CHECK_INT(dest[2], 'c');\r\n    CHECK_INT(dest[3], 'd');\r\n    CHECK_INT(dest[4], 'e');\r\n    CHECK_INT(dest[5], 'f');\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/ostream1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <ostream>, part 1\r\n#define TEST_NAME \"<ostream>, part 1\"\r\n\r\n#include \"tdefs.h\"\r\n#include <ostream>\r\n#include <sstream>\r\n#include <string>\r\n\r\n// class Boolx\r\nclass Boolx { // wrap an int\r\npublic:\r\n    Boolx(int v) : val(v) { // construct from value\r\n    }\r\n\r\n    int value() const { // get value\r\n        return val;\r\n    }\r\n\r\n    int value(int v) { // set value\r\n        return val = v;\r\n    }\r\n\r\nprivate:\r\n    int val;\r\n};\r\n\r\nSTD ostream& operator<<(STD ostream& ostr, const Boolx& b) { // insert a Boolx\r\n    STD ios_base::iostate state = STD ios_base::goodbit;\r\n    const STD ostream::sentry ok(ostr);\r\n\r\n    if (ok) {\r\n        if (b.value() != 0) {\r\n            ostr.rdbuf()->sputc('Y');\r\n        } else {\r\n            ostr.rdbuf()->sputc('N');\r\n        }\r\n    }\r\n    ostr.setstate(state);\r\n    return ostr;\r\n}\r\n\r\nvoid test_main() { // test basic workings of ostream definitions\r\n    STD ostringstream outs;\r\n\r\n    STD ostream::char_type* pc   = (char*) nullptr;\r\n    STD ostream::int_type* pi    = (int*) nullptr;\r\n    STD ostream::pos_type* pp    = (STD streampos*) nullptr;\r\n    STD ostream::off_type* po    = (STD streamoff*) nullptr;\r\n    STD ostream::traits_type* pt = (STD char_traits<char>*) nullptr;\r\n\r\n    pc = pc; // to quiet diagnostics\r\n    pi = pi;\r\n    pp = pp;\r\n    po = po;\r\n    pt = pt;\r\n\r\n    CHECK(outs.good());\r\n    CHECK_INT((outs.flags() & STD ios::showbase), 0);\r\n    outs << STD noskipws;\r\n    CHECK_INT(outs.flags() & (STD ios::dec | STD ios::skipws), STD ios::dec);\r\n\r\n    {\r\n        typedef STD ostringstream Mycont;\r\n        STD stringbuf sbuf;\r\n        STD ostream ostr(&sbuf);\r\n\r\n        Mycont v6;\r\n        v6.tie(&ostr);\r\n        Mycont v7(STD move(v6));\r\n        CHECK_PTR(v6.tie(), nullptr);\r\n        CHECK_PTR(v7.tie(), &ostr);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_PTR(v7.tie(), nullptr);\r\n        CHECK_PTR(v8.tie(), &ostr);\r\n\r\n        v7.swap(v8);\r\n        CHECK_PTR(v7.tie(), &ostr);\r\n        CHECK_PTR(v8.tie(), nullptr);\r\n\r\n        STD swap(v7, v8);\r\n        CHECK_PTR(v7.tie(), nullptr);\r\n        CHECK_PTR(v8.tie(), &ostr);\r\n\r\n        sbuf.str(\"\");\r\n        STD ostream(&sbuf) << (char) 'x';\r\n        CHECK_STR(sbuf.str().c_str(), \"x\");\r\n\r\n        sbuf.str(\"\");\r\n        STD ostream(&sbuf) << (signed char) 'x';\r\n        CHECK_STR(sbuf.str().c_str(), \"x\");\r\n\r\n        sbuf.str(\"\");\r\n        STD ostream(&sbuf) << (unsigned char) 'x';\r\n        CHECK_STR(sbuf.str().c_str(), \"x\");\r\n\r\n        sbuf.str(\"\");\r\n        STD ostream(&sbuf) << (const char*) \"x\";\r\n        CHECK_STR(sbuf.str().c_str(), \"x\");\r\n\r\n        sbuf.str(\"\");\r\n        STD ostream(&sbuf) << (const signed char*) \"x\";\r\n        CHECK_STR(sbuf.str().c_str(), \"x\");\r\n\r\n        sbuf.str(\"\");\r\n        STD ostream(&sbuf) << (const unsigned char*) \"x\";\r\n        CHECK_STR(sbuf.str().c_str(), \"x\");\r\n    }\r\n\r\n    // test character inserters\r\n    outs.str(\"\");\r\n    outs << \"s1\" << '+' << (const signed char*) \"s2\" << (signed char) '+' << (const unsigned char*) \"s3\"\r\n         << (unsigned char) '\\n';\r\n    CHECK_STR(outs.str().c_str(), \"s1+s2+s3\\n\");\r\n    outs.str(\"\");\r\n    outs.fill('*');\r\n    outs.width(4);\r\n    outs << \"s2\";\r\n    CHECK_STR(outs.str().c_str(), \"**s2\");\r\n\r\n    outs.str(\"\");\r\n    outs.fill('@');\r\n    outs.width(3);\r\n    outs << STD left << \"s3\";\r\n    CHECK_STR(outs.str().c_str(), \"s3@\");\r\n    outs.str(\"\");\r\n    outs.fill('~');\r\n    outs.width(3);\r\n    outs << STD right << \"s4\";\r\n    CHECK_STR(outs.str().c_str(), \"~s4\");\r\n    outs.str(\"\");\r\n    outs.fill('?');\r\n    outs.width(4);\r\n    outs << STD internal << \"s5\";\r\n    outs << STD endl << STD flush;\r\n    CHECK_STR(outs.str().c_str(), \"??s5\\n\");\r\n\r\n    // test integer inserters\r\n    outs.str(\"\");\r\n    outs << (short) 1;\r\n    CHECK_STR(outs.str().c_str(), \"1\");\r\n    outs.str(\"\");\r\n    outs << (unsigned short) 23;\r\n    CHECK_STR(outs.str().c_str(), \"23\");\r\n    outs.str(\"\");\r\n    outs << (int) -456;\r\n    CHECK_STR(outs.str().c_str(), \"-456\");\r\n    outs.str(\"\");\r\n    outs << STD showpos << (int) 7890;\r\n    CHECK_STR(outs.str().c_str(), \"+7890\");\r\n    outs.str(\"\");\r\n    outs << (unsigned int) 3 << STD noshowpos;\r\n    CHECK_STR(outs.str().c_str(), \"3\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD oct << (long) 10;\r\n    CHECK_STR(outs.str().c_str(), \"12\");\r\n    outs.str(\"\");\r\n    outs.fill('?'), outs.width(5);\r\n    outs << STD showbase << (long) 8;\r\n    CHECK_STR(outs.str().c_str(), \"??010\");\r\n    outs.str(\"\");\r\n    outs.width(6);\r\n    outs << STD hex << (unsigned long) 0x3e;\r\n    CHECK_STR(outs.str().c_str(), \"0x??3e\");\r\n    outs.str(\"\");\r\n    outs << STD uppercase << (unsigned long) 0xab;\r\n    CHECK_STR(outs.str().c_str(), \"0XAB\");\r\n    outs.str(\"\");\r\n    outs << (unsigned long) 0;\r\n    CHECK_STR(outs.str().c_str(), \"0\");\r\n    outs.str(\"\");\r\n    outs << (void*) nullptr;\r\n    CHECK(outs.str().size() != 0);\r\n\r\n    // test long long inserters\r\n    outs.str(\"\");\r\n    outs << STD dec << (long long) (-12);\r\n    CHECK_STR(outs.str().c_str(), \"-12\");\r\n    outs.str(\"\");\r\n    outs << (unsigned long long) 34;\r\n    CHECK_STR(outs.str().c_str(), \"34\");\r\n\r\n    // test floating-point inserters\r\n    outs.str(\"\");\r\n    outs << STD showpos << (float) 12 << STD noshowpos;\r\n    CHECK_STR(outs.str().c_str(), \"+12\");\r\n    outs.str(\"\");\r\n    outs << STD showpoint << (double) 14 << STD noshowpoint;\r\n    CHECK_STR(outs.str().c_str(), \"14.0000\");\r\n    outs.str(\"\");\r\n    outs.precision(3);\r\n    outs.width(11);\r\n    outs.fill('?');\r\n    outs << (long double) -168e-7;\r\n\r\n    CHECK_STR(outs.str().c_str(), \"-??1.68E-05\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD fixed << 1.0;\r\n    CHECK_STR(outs.str().c_str(), \"1.000\");\r\n    outs.str(\"\");\r\n    outs << STD scientific << 2.0;\r\n\r\n    CHECK_STR(outs.str().c_str(), \"2.000E+00\");\r\n\r\n    {\r\n        outs.str(\"\");\r\n        outs.unsetf(STD ios_base::uppercase);\r\n        outs << STD hexfloat << 2.0;\r\n        STD string ans  = outs.str();\r\n        const char* buf = ans.c_str();\r\n        CHECK_STR(buf, \"0x1.0000000000000p+1\");\r\n    }\r\n\r\n    outs.precision(0);\r\n\r\n    outs.str(\"\");\r\n    outs << STD defaultfloat << 1.5;\r\n    CHECK_STR(outs.str().c_str(), \"2\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD fixed << 1.0;\r\n    CHECK_STR(outs.str().c_str(), \"1\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD scientific << 2.0;\r\n    CHECK_STR(outs.str().c_str(), \"2e+00\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD hexfloat << 2.0;\r\n    CHECK_STR(outs.str().c_str(), \"0x1.0000000000000p+1\");\r\n\r\n    outs.precision(-1);\r\n\r\n    outs.str(\"\");\r\n    outs << STD defaultfloat << 1.5;\r\n    CHECK_STR(outs.str().c_str(), \"1.5\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD fixed << 1.0;\r\n    CHECK_STR(outs.str().c_str(), \"1.000000\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD scientific << 2.0;\r\n    CHECK_STR(outs.str().c_str(), \"2.000000e+00\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD hexfloat << 2.0;\r\n    CHECK_STR(outs.str().c_str(), \"0x1.0000000000000p+1\");\r\n\r\n    outs.precision(-49);\r\n    outs.str(\"\");\r\n    outs << STD fixed << 1.0;\r\n    CHECK_STR(outs.str().c_str(), \"1.000000\");\r\n\r\n    outs.precision(3);\r\n\r\n    outs.str(\"\");\r\n    outs << STD defaultfloat << 1.5L;\r\n    CHECK_STR(outs.str().c_str(), \"1.5\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD fixed << 1.0L;\r\n    CHECK_STR(outs.str().c_str(), \"1.000\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD scientific << 2.0L;\r\n    CHECK_STR(outs.str().c_str(), \"2.000e+00\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD hexfloat << 2.0L;\r\n    CHECK_STR(outs.str().c_str(), \"0x1.0000000000000p+1\");\r\n\r\n    outs.precision(0);\r\n\r\n    outs.str(\"\");\r\n    outs << STD defaultfloat << 1.5L;\r\n    CHECK_STR(outs.str().c_str(), \"2\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD fixed << 1.0L;\r\n    CHECK_STR(outs.str().c_str(), \"1\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD scientific << 2.0L;\r\n    CHECK_STR(outs.str().c_str(), \"2e+00\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD hexfloat << 2.0L;\r\n    CHECK_STR(outs.str().c_str(), \"0x1.0000000000000p+1\");\r\n\r\n    outs.precision(-1);\r\n\r\n    outs.str(\"\");\r\n    outs << STD defaultfloat << 1.5L;\r\n    CHECK_STR(outs.str().c_str(), \"1.5\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD fixed << 1.0L;\r\n    CHECK_STR(outs.str().c_str(), \"1.000000\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD scientific << 2.0L;\r\n    CHECK_STR(outs.str().c_str(), \"2.000000e+00\");\r\n\r\n    outs.str(\"\");\r\n    outs << STD hexfloat << 2.0L;\r\n    CHECK_STR(outs.str().c_str(), \"0x1.0000000000000p+1\");\r\n\r\n    outs.precision(-49);\r\n    outs.str(\"\");\r\n    outs << STD fixed << 1.0L;\r\n    CHECK_STR(outs.str().c_str(), \"1.000000\");\r\n\r\n    // test Boolx inserter\r\n    const Boolx no(0), yes(1);\r\n    outs.str(\"\");\r\n    outs << ' ' << no << ' ' << yes;\r\n    CHECK_STR(outs.str().c_str(), \" N Y\");\r\n\r\n    // test bool inserter\r\n    outs.str(\"\");\r\n    outs << STD boolalpha << false << ' ' << true;\r\n    CHECK_STR(outs.str().c_str(), \"false true\");\r\n    outs.str(\"\");\r\n    outs << STD noboolalpha << STD dec;\r\n    outs << false << true;\r\n    CHECK_STR(outs.str().c_str(), \"01\");\r\n\r\n    // test streambuf inserter, positioning, and puts\r\n    STD istringstream istr(\"rest of stream\\n\");\r\n\r\n    outs.str(\"\");\r\n    outs << \"some stuff \";\r\n    STD streampos pos = outs.tellp();\r\n    CHECK(pos != (STD streampos) (-1));\r\n    outs << istr.rdbuf();\r\n    CHECK_STR(outs.str().c_str(), \"some stuff rest of stream\\n\");\r\n    CHECK_PTR(&outs.seekp(pos), &outs);\r\n    outs.put('b');\r\n    CHECK_PTR(&outs.seekp(0, STD ios_base::cur), &outs);\r\n    CHECK_STR(outs.str().c_str(), \"some stuff best of stream\\n\");\r\n    outs.str(\"\");\r\n    outs.flush().write(\"s1\", 2);\r\n    CHECK_STR(outs.str().c_str(), \"s1\");\r\n\r\n    // test template equivalence\r\n    STD basic_ostream<char, STD char_traits<char>>* pbo = (STD ostream*) nullptr;\r\n\r\n    pbo = pbo; // to quiet diagnostics\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/ostream2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <ostream>, part 2\r\n#define TEST_NAME \"<ostream>, part 2\"\r\n\r\n#include \"tdefs.h\"\r\n#include <ostream>\r\n#include <sstream>\r\n#include <string>\r\n#include <wchar.h>\r\n\r\n// class Boolx\r\nclass Boolx { // wrap an int\r\npublic:\r\n    Boolx(int v) : val(v) { // construct from value\r\n    }\r\n\r\n    int value() const { // get value\r\n        return val;\r\n    }\r\n\r\n    int value(int v) { // set value\r\n        return val = v;\r\n    }\r\n\r\nprivate:\r\n    int val;\r\n};\r\n\r\nSTD wostream& operator<<(STD wostream& ostr, const Boolx& b) { // insert a Boolx\r\n    STD ios_base::iostate state = STD ios_base::goodbit;\r\n    const STD wostream::sentry ok(ostr);\r\n\r\n    if (ok) {\r\n        if (b.value() != 0) {\r\n            ostr.rdbuf()->sputc(L'Y');\r\n        } else {\r\n            ostr.rdbuf()->sputc(L'N');\r\n        }\r\n    }\r\n    ostr.setstate(state);\r\n    return ostr;\r\n}\r\n\r\nvoid test_main() { // test basic workings of ostream definitions\r\n    STD wostringstream outs;\r\n\r\n    STD wostream::char_type* pc   = (wchar_t*) nullptr;\r\n    STD wostream::int_type* pi    = (wint_t*) nullptr;\r\n    STD wostream::pos_type* pp    = (STD streampos*) nullptr;\r\n    STD wostream::off_type* po    = (STD streamoff*) nullptr;\r\n    STD wostream::traits_type* pt = (STD char_traits<wchar_t>*) nullptr;\r\n\r\n    pc = pc; // to quiet diagnostics\r\n    pi = pi;\r\n    pp = pp;\r\n    po = po;\r\n    pt = pt;\r\n\r\n    CHECK(outs.good());\r\n    CHECK_INT((outs.flags() & STD ios::showbase), 0);\r\n    outs << STD noskipws;\r\n    CHECK_INT(outs.flags() & (STD ios::dec | STD ios::skipws), STD ios::dec);\r\n\r\n    {\r\n        typedef STD wostringstream Mycont;\r\n        STD wstringbuf sbuf;\r\n        STD wostream ostr(&sbuf);\r\n\r\n        Mycont v6;\r\n        v6.tie(&ostr);\r\n        Mycont v7(STD move(v6));\r\n        CHECK_PTR(v6.tie(), nullptr);\r\n        CHECK_PTR(v7.tie(), &ostr);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_PTR(v7.tie(), nullptr);\r\n        CHECK_PTR(v8.tie(), &ostr);\r\n\r\n        v7.swap(v8);\r\n        CHECK_PTR(v7.tie(), &ostr);\r\n        CHECK_PTR(v8.tie(), nullptr);\r\n\r\n        STD swap(v7, v8);\r\n        CHECK_PTR(v7.tie(), nullptr);\r\n        CHECK_PTR(v8.tie(), &ostr);\r\n\r\n        sbuf.str(L\"\");\r\n        STD wostream(&sbuf) << (wchar_t) L'x';\r\n        CHECK_WSTR(sbuf.str().c_str(), L\"x\");\r\n\r\n        sbuf.str(L\"\");\r\n        STD wostream(&sbuf) << (char) 'x';\r\n        CHECK_WSTR(sbuf.str().c_str(), L\"x\");\r\n\r\n        sbuf.str(L\"\");\r\n        STD wostream(&sbuf) << (const wchar_t*) L\"x\";\r\n        CHECK_WSTR(sbuf.str().c_str(), L\"x\");\r\n\r\n        sbuf.str(L\"\");\r\n        STD wostream(&sbuf) << (const char*) \"x\";\r\n        CHECK_WSTR(sbuf.str().c_str(), L\"x\");\r\n    }\r\n\r\n    // test character inserters\r\n    outs.str(L\"\");\r\n    outs << L\"s1\" << L'+' << \"s2\" << '\\n';\r\n    CHECK_WSTR(outs.str().c_str(), L\"s1+s2\\n\");\r\n\r\n    outs.str(L\"\");\r\n    outs.fill(L'*');\r\n    outs.width(4);\r\n    outs << L\"s2\";\r\n    CHECK_WSTR(outs.str().c_str(), L\"**s2\");\r\n\r\n    outs.str(L\"\");\r\n    outs.fill(L'@');\r\n    outs.width(3);\r\n    outs << STD left << L\"s3\";\r\n    CHECK_WSTR(outs.str().c_str(), L\"s3@\");\r\n    outs.str(L\"\");\r\n    outs.fill(L'~');\r\n    outs.width(3);\r\n    outs << STD right << L\"s4\";\r\n    CHECK_WSTR(outs.str().c_str(), L\"~s4\");\r\n    outs.str(L\"\");\r\n    outs.fill(L'?');\r\n    outs.width(4);\r\n    outs << STD internal << L\"s5\";\r\n    outs << STD endl << STD flush;\r\n    CHECK_WSTR(outs.str().c_str(), L\"??s5\\n\");\r\n\r\n    // test integer inserters\r\n    outs.str(L\"\");\r\n    outs << (short) 1;\r\n    CHECK_WSTR(outs.str().c_str(), L\"1\");\r\n\r\n    outs.str(L\"\");\r\n    outs << (unsigned short) 23;\r\n    CHECK_WSTR(outs.str().c_str(), L\"23\");\r\n\r\n    outs.str(L\"\");\r\n    outs << (int) -456;\r\n    CHECK_WSTR(outs.str().c_str(), L\"-456\");\r\n    outs.str(L\"\");\r\n    outs << STD showpos << (int) 7890;\r\n    CHECK_WSTR(outs.str().c_str(), L\"+7890\");\r\n    outs.str(L\"\");\r\n    outs << (unsigned int) 3 << STD noshowpos;\r\n    CHECK_WSTR(outs.str().c_str(), L\"3\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD oct << (long) 10;\r\n    CHECK_WSTR(outs.str().c_str(), L\"12\");\r\n    outs.str(L\"\");\r\n    outs.fill(L'?');\r\n    outs.width(5);\r\n    outs << STD showbase << (long) 8;\r\n    CHECK_WSTR(outs.str().c_str(), L\"??010\");\r\n    outs.str(L\"\");\r\n    outs.width(6);\r\n    outs << STD hex << (unsigned long) 0x3e;\r\n    CHECK_WSTR(outs.str().c_str(), L\"0x??3e\");\r\n    outs.str(L\"\");\r\n    outs << STD uppercase << (unsigned long) 0xab;\r\n    CHECK_WSTR(outs.str().c_str(), L\"0XAB\");\r\n    outs.str(L\"\");\r\n    outs << (unsigned long) 0;\r\n    CHECK_WSTR(outs.str().c_str(), L\"0\");\r\n    outs.str(L\"\");\r\n    outs << (void*) nullptr;\r\n    CHECK(outs.str().size() != 0);\r\n\r\n    // test long long inserters\r\n    outs.str(L\"\");\r\n    outs << STD dec << (long long) (-12);\r\n    CHECK_WSTR(outs.str().c_str(), L\"-12\");\r\n    outs.str(L\"\");\r\n    outs << (unsigned long long) 34;\r\n    CHECK_WSTR(outs.str().c_str(), L\"34\");\r\n\r\n    // test floating-point inserters\r\n    outs.str(L\"\");\r\n    outs << STD showpos << (float) 12 << STD noshowpos;\r\n    CHECK_WSTR(outs.str().c_str(), L\"+12\");\r\n    outs.str(L\"\");\r\n    outs << STD showpoint << (double) 14 << STD noshowpoint;\r\n    CHECK_WSTR(outs.str().c_str(), L\"14.0000\");\r\n    outs.str(L\"\");\r\n    outs.precision(3);\r\n    outs.width(11);\r\n    outs.fill(L'?');\r\n    outs << (long double) -168e-7;\r\n\r\n    CHECK_WSTR(outs.str().c_str(), L\"-??1.68E-05\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD fixed << 1.0;\r\n    CHECK_WSTR(outs.str().c_str(), L\"1.000\");\r\n    outs.str(L\"\");\r\n    outs << STD scientific << 2.0;\r\n\r\n    CHECK_WSTR(outs.str().c_str(), L\"2.000E+00\");\r\n\r\n    outs.str(L\"\");\r\n    outs.unsetf(STD ios_base::uppercase);\r\n    outs << STD hexfloat << 2.0;\r\n    STD wstring ans    = outs.str();\r\n    const wchar_t* buf = ans.c_str();\r\n    CHECK_WSTR(buf, L\"0x1.0000000000000p+1\");\r\n\r\n    outs.precision(0);\r\n\r\n    outs.str(L\"\");\r\n    outs << STD defaultfloat << 1.5;\r\n    CHECK_WSTR(outs.str().c_str(), L\"2\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD fixed << 1.0;\r\n    CHECK_WSTR(outs.str().c_str(), L\"1\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD scientific << 2.0;\r\n    CHECK_WSTR(outs.str().c_str(), L\"2e+00\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD hexfloat << 2.0;\r\n    CHECK_WSTR(outs.str().c_str(), L\"0x1.0000000000000p+1\");\r\n\r\n    outs.precision(-1);\r\n\r\n    outs.str(L\"\");\r\n    outs << STD defaultfloat << 1.5;\r\n    CHECK_WSTR(outs.str().c_str(), L\"1.5\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD fixed << 1.0;\r\n    CHECK_WSTR(outs.str().c_str(), L\"1.000000\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD scientific << 2.0;\r\n    CHECK_WSTR(outs.str().c_str(), L\"2.000000e+00\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD hexfloat << 2.0;\r\n    CHECK_WSTR(outs.str().c_str(), L\"0x1.0000000000000p+1\");\r\n\r\n    outs.precision(-49);\r\n    outs.str(L\"\");\r\n    outs << STD fixed << 1.0;\r\n    CHECK_WSTR(outs.str().c_str(), L\"1.000000\");\r\n\r\n    outs.precision(3);\r\n\r\n    outs.str(L\"\");\r\n    outs << STD defaultfloat << 1.5L;\r\n    CHECK_WSTR(outs.str().c_str(), L\"1.5\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD fixed << 1.0L;\r\n    CHECK_WSTR(outs.str().c_str(), L\"1.000\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD scientific << 2.0L;\r\n    CHECK_WSTR(outs.str().c_str(), L\"2.000e+00\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD hexfloat << 2.0L;\r\n    CHECK_WSTR(outs.str().c_str(), L\"0x1.0000000000000p+1\");\r\n\r\n    outs.precision(0);\r\n\r\n    outs.str(L\"\");\r\n    outs << STD defaultfloat << 1.5L;\r\n    CHECK_WSTR(outs.str().c_str(), L\"2\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD fixed << 1.0L;\r\n    CHECK_WSTR(outs.str().c_str(), L\"1\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD scientific << 2.0L;\r\n    CHECK_WSTR(outs.str().c_str(), L\"2e+00\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD hexfloat << 2.0L;\r\n    CHECK_WSTR(outs.str().c_str(), L\"0x1.0000000000000p+1\");\r\n\r\n    outs.precision(-1);\r\n\r\n    outs.str(L\"\");\r\n    outs << STD defaultfloat << 1.5L;\r\n    CHECK_WSTR(outs.str().c_str(), L\"1.5\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD fixed << 1.0L;\r\n    CHECK_WSTR(outs.str().c_str(), L\"1.000000\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD scientific << 2.0L;\r\n    CHECK_WSTR(outs.str().c_str(), L\"2.000000e+00\");\r\n\r\n    outs.str(L\"\");\r\n    outs << STD hexfloat << 2.0L;\r\n    CHECK_WSTR(outs.str().c_str(), L\"0x1.0000000000000p+1\");\r\n\r\n    outs.precision(-49);\r\n    outs.str(L\"\");\r\n    outs << STD fixed << 1.0L;\r\n    CHECK_WSTR(outs.str().c_str(), L\"1.000000\");\r\n\r\n    // test Boolx inserter\r\n    const Boolx no(0), yes(1);\r\n    outs.str(L\"\");\r\n    outs << L\" \" << no << L\" \" << yes;\r\n    CHECK_WSTR(outs.str().c_str(), L\" N Y\");\r\n\r\n    // test bool inserter\r\n    outs.str(L\"\");\r\n    outs << STD boolalpha << false << L\" \" << true;\r\n    CHECK_WSTR(outs.str().c_str(), L\"false true\");\r\n    outs.str(L\"\");\r\n    outs << STD noboolalpha << STD dec;\r\n    outs << false << true;\r\n    CHECK_WSTR(outs.str().c_str(), L\"01\");\r\n\r\n    // test streambuf inserter, positioning, and puts\r\n    STD wistringstream istr(L\"rest of stream\\n\");\r\n\r\n    outs.str(L\"\");\r\n    outs << L\"some stuff \";\r\n    STD wstreampos pos = outs.tellp();\r\n    CHECK(pos != (STD wstreampos) (-1));\r\n    outs << istr.rdbuf();\r\n    CHECK_WSTR(outs.str().c_str(), L\"some stuff rest of stream\\n\");\r\n    CHECK_PTR(&outs.seekp(pos), &outs);\r\n    outs.put(L'b');\r\n    CHECK_PTR(&outs.seekp(0, STD ios_base::cur), &outs);\r\n    CHECK_WSTR(outs.str().c_str(), L\"some stuff best of stream\\n\");\r\n    outs.str(L\"\");\r\n    outs.flush().write(L\"s1\", 2);\r\n    CHECK_WSTR(outs.str().c_str(), L\"s1\");\r\n\r\n    // test template equivalence\r\n    STD basic_ostream<wchar_t, STD char_traits<wchar_t>>* pbo = (STD wostream*) nullptr;\r\n\r\n    pbo = pbo; // to quiet diagnostics\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/queue/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <queue>\r\n#define TEST_NAME \"<queue>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <deque>\r\n#include <functional>\r\n#include <list>\r\n#include <queue>\r\n#include <stddef.h>\r\n#include <vector>\r\n\r\nvoid test_queue() { // test queue\r\n    typedef STD allocator<char> Myal;\r\n    typedef STD deque<char, Myal> Myimpl;\r\n    typedef STD queue<char, Myimpl> Mycont;\r\n    typedef STD list<char, Myal> Myimpl2;\r\n    typedef STD queue<char, Myimpl2> Mycont2;\r\n    struct Myqueue : public Mycont { // expose protected stuff\r\n        const Myimpl* get_cont() const { // return pointer to container\r\n            return &c;\r\n        }\r\n    };\r\n\r\n    Mycont::container_type* p_cont = (Myimpl*) nullptr;\r\n    Mycont::value_type* p_val      = (char*) nullptr;\r\n    Mycont::size_type* p_size      = (CSTD size_t*) nullptr;\r\n\r\n    p_cont = p_cont; // to quiet diagnostics\r\n    p_val  = p_val;\r\n    p_size = p_size;\r\n\r\n    Myimpl c0(3, 'x');\r\n    Mycont v0(c0), v0a;\r\n    Mycont2 v1;\r\n    CHECK_INT(v0.size(), 3);\r\n    CHECK_INT(v0.front(), 'x');\r\n    CHECK(v0a.empty());\r\n    v0 = v0a;\r\n    v0.push('a');\r\n    CHECK_INT(v0.size(), 1);\r\n    CHECK_INT(v0.front(), 'a');\r\n    CHECK_INT(v0.back(), 'a');\r\n    v0.push('c');\r\n    CHECK_INT(v0.size(), 2);\r\n    CHECK_INT(v0.front(), 'a');\r\n    CHECK_INT(v0.back(), 'c');\r\n    v0.push('b');\r\n    CHECK_INT(v0.size(), 3);\r\n    CHECK_INT(v0.front(), 'a');\r\n    CHECK_INT(v0.back(), 'b');\r\n    CHECK(v0 == v0);\r\n    CHECK(v0a < v0);\r\n    CHECK(v0 != v0a);\r\n    CHECK(v0 > v0a);\r\n    CHECK(v0a <= v0);\r\n    CHECK(v0 >= v0a);\r\n    v0.pop();\r\n    CHECK_INT(v0.front(), 'c');\r\n    v0.pop();\r\n    CHECK_INT(v0.front(), 'b');\r\n    v0.pop();\r\n    CHECK(v0.empty());\r\n\r\n    {\r\n        Myal al;\r\n        Myimpl c20(3, 'x');\r\n        Mycont v20(c20, al), v20a(al);\r\n        CHECK_INT(v20.size(), 3);\r\n        CHECK_INT(v20.front(), 'x');\r\n        CHECK_INT(v20a.size(), 0);\r\n        Mycont v21(v20, al);\r\n        CHECK_INT(v21.size(), 3);\r\n        CHECK_INT(v21.front(), 'x');\r\n\r\n        typedef STD uses_allocator<Mycont, STD allocator<int>> queue_uses_allocator;\r\n        CHECK_INT(queue_uses_allocator::value, true);\r\n    }\r\n\r\n    {\r\n        Myal al;\r\n        Myimpl c10(3, 'x');\r\n        Mycont v10(STD move(c10));\r\n        CHECK_INT(v10.size(), 3);\r\n        CHECK_INT(v10.front(), 'x');\r\n        CHECK(c10.empty());\r\n\r\n        Mycont v11;\r\n        v11 = STD move(v10);\r\n        CHECK_INT(v10.size(), 0);\r\n        CHECK_INT(v11.size(), 3);\r\n\r\n        Mycont v12(STD move(v11));\r\n        CHECK_INT(v11.size(), 0);\r\n        CHECK_INT(v12.size(), 3);\r\n\r\n        v11.swap(v12);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v12.size(), 0);\r\n\r\n        Myimpl c10a(3, 'x');\r\n        Mycont v10a(STD move(c10a), al);\r\n        CHECK_INT(v10a.size(), 3);\r\n        CHECK_INT(v10a.front(), 'x');\r\n        CHECK(c10a.empty());\r\n\r\n        Mycont v11a(STD move(v10a), al);\r\n        CHECK_INT(v10a.size(), 0);\r\n        CHECK_INT(v11a.size(), 3);\r\n    }\r\n\r\n    { // test emplace\r\n        typedef STD deque<Movable_int> Myimpl0;\r\n        typedef STD queue<Movable_int, Myimpl0> Mycont0;\r\n        Mycont0 v13;\r\n\r\n        v13.emplace();\r\n        CHECK_INT(v13.back().val, 0);\r\n        v13.emplace(2);\r\n        CHECK_INT(v13.back().val, 2);\r\n        v13.emplace(3, 2);\r\n        CHECK_INT(v13.back().val, 0x32);\r\n        v13.emplace(4, 3, 2);\r\n        CHECK_INT(v13.back().val, 0x432);\r\n        v13.emplace(5, 4, 3, 2);\r\n        CHECK_INT(v13.back().val, 0x5432);\r\n        v13.emplace(6, 5, 4, 3, 2);\r\n        CHECK_INT(v13.back().val, 0x65432);\r\n    }\r\n}\r\n\r\nvoid test_priority_queue() { // test priority_queue\r\n    typedef STD allocator<char> Myal;\r\n    typedef STD less<char> Mypred;\r\n    typedef STD vector<char, Myal> Myimpl;\r\n    typedef STD priority_queue<char, Myimpl, Mypred> Mycont;\r\n    typedef STD deque<char, Myal> Myimpl2;\r\n    typedef STD priority_queue<char, Myimpl2, Mypred> Mycont2;\r\n    struct Myqueue : public Mycont { // expose protected stuff\r\n        const Myimpl* get_cont() const { // return pointer to container\r\n            return &c;\r\n        }\r\n\r\n        const Mypred* get_pred() const { // return pointer to predicate\r\n            return &comp;\r\n        }\r\n    };\r\n\r\n    Mycont::container_type* p_cont = (Myimpl*) nullptr;\r\n    Mycont::value_type* p_val      = (char*) nullptr;\r\n    Mycont::size_type* p_size      = (CSTD size_t*) nullptr;\r\n\r\n    p_cont = p_cont; // to quiet diagnostics\r\n    p_val  = p_val;\r\n    p_size = p_size;\r\n\r\n    Mypred pr;\r\n    char carr[] = \"acb\";\r\n    Myimpl c0(3, 'x');\r\n    Mycont v0(pr, c0), v0a(pr), v0b;\r\n    Mycont2 v1;\r\n    const Mycont v2(carr, carr + 3), v2a(carr, carr + 3, pr), v2b(carr, carr + 3, pr, c0);\r\n    CHECK_INT(v0.size(), 3);\r\n    CHECK_INT(v0.top(), 'x');\r\n    CHECK(v0a.empty());\r\n    v0 = v0a;\r\n    CHECK_INT(v2.size(), 3);\r\n    CHECK_INT(v2.top(), 'c');\r\n    CHECK_INT(v2a.size(), 3);\r\n    CHECK_INT(v2a.top(), 'c');\r\n    CHECK_INT(v2b.size(), 6);\r\n    CHECK_INT(v2b.top(), 'x');\r\n    v0.push('a');\r\n    CHECK_INT(v0.size(), 1);\r\n    CHECK_INT(v0.top(), 'a');\r\n    v0.push('c');\r\n    CHECK_INT(v0.size(), 2);\r\n    CHECK_INT(v0.top(), 'c');\r\n    v0.push('b');\r\n    CHECK_INT(v0.size(), 3);\r\n    CHECK_INT(v0.top(), 'c');\r\n    v0.pop();\r\n    CHECK_INT(v0.top(), 'b');\r\n    v0.pop();\r\n    CHECK_INT(v0.top(), 'a');\r\n    v0.pop();\r\n    CHECK(v0.empty());\r\n\r\n    {\r\n        Myal al;\r\n        Myimpl2 c20(3, 'x');\r\n        Mycont2 v20(pr, STD move(c20), al), v20a(al), v20b(pr, al);\r\n        CHECK_INT(v20.size(), 3);\r\n        CHECK_INT(v20.top(), 'x');\r\n        CHECK_INT(v20a.size(), 0);\r\n        CHECK_INT(v20b.size(), 0);\r\n        Mycont2 v21(v20, al);\r\n        CHECK_INT(v21.size(), 3);\r\n        CHECK_INT(v21.top(), 'x');\r\n\r\n        typedef STD uses_allocator<Mycont, STD allocator<int>> priority_queue_uses_allocator;\r\n        CHECK_INT(priority_queue_uses_allocator::value, true);\r\n    }\r\n\r\n    {\r\n        Myal al;\r\n        Myimpl2 c10(3, 'x');\r\n        Mycont2 v10(pr, STD move(c10));\r\n        CHECK_INT(v10.size(), 3);\r\n        CHECK_INT(v10.top(), 'x');\r\n        CHECK(c10.empty());\r\n\r\n        Myimpl2 c10b(3, 'x');\r\n        Mycont2 v12b(carr, carr + 3, pr, STD move(c10b));\r\n        CHECK_INT(v12b.size(), 6);\r\n        CHECK_INT(v12b.top(), 'x');\r\n\r\n        Mycont2 v11;\r\n        v11 = STD move(v10);\r\n        CHECK_INT(v10.size(), 0);\r\n        CHECK_INT(v11.size(), 3);\r\n\r\n        Mycont2 v12(STD move(v11));\r\n        CHECK_INT(v11.size(), 0);\r\n        CHECK_INT(v12.size(), 3);\r\n\r\n        v11.swap(v12);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v12.size(), 0);\r\n\r\n        Myimpl2 c10a(3, 'x');\r\n        Mycont2 v10a(pr, STD move(c10a), al);\r\n        CHECK_INT(v10a.size(), 3);\r\n        CHECK_INT(v10a.top(), 'x');\r\n        CHECK(c10a.empty());\r\n\r\n        Mycont2 v11a(STD move(v10a), al);\r\n        CHECK_INT(v10a.size(), 0);\r\n        CHECK_INT(v11a.size(), 3);\r\n    }\r\n\r\n    { // test emplace\r\n        typedef STD less<int> Mypred2;\r\n        typedef STD deque<Movable_int> Myimpl0;\r\n        typedef STD priority_queue<Movable_int, Myimpl0, Mypred2> Mycont0;\r\n        Mycont0 v13;\r\n\r\n        v13.emplace();\r\n        CHECK_INT(v13.top().val, 0);\r\n        v13.emplace(2);\r\n        CHECK_INT(v13.top().val, 2);\r\n        v13.emplace(3, 2);\r\n        CHECK_INT(v13.top().val, 0x32);\r\n        v13.emplace(4, 3, 2);\r\n        CHECK_INT(v13.top().val, 0x432);\r\n        v13.emplace(5, 4, 3, 2);\r\n        CHECK_INT(v13.top().val, 0x5432);\r\n        v13.emplace(6, 5, 4, 3, 2);\r\n        CHECK_INT(v13.top().val, 0x65432);\r\n    }\r\n}\r\n\r\nvoid test_main() { // test basic workings of queue definitions\r\n    test_queue();\r\n    test_priority_queue();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/random1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <random> header, part 1\r\n#define TEST_NAME \"<random>, part 1\"\r\n\r\n#include \"tdefs.h\"\r\n#include <math.h>\r\n#include <memory>\r\n#include <random>\r\n#include <sstream>\r\n\r\ntypedef int Int32;\r\ntypedef unsigned int Uint32;\r\n\r\ntemplate <class T>\r\nclass generator {\r\npublic:\r\n    void reset(const T* ptr0, unsigned int n0) { // establish new sequence\r\n        ptr = ptr0;\r\n        n   = n0;\r\n        i   = 0;\r\n    }\r\n\r\n    T operator()() { // return next element\r\n        return ptr[i++];\r\n    }\r\n\r\n    unsigned int index() const { // return index into sequence\r\n        return i;\r\n    }\r\n\r\nprivate:\r\n    const T* ptr;\r\n    unsigned int n;\r\n    unsigned int i;\r\n};\r\n\r\ntemplate <class Eng>\r\nstruct test_globals { // tests engine global functions\r\n    static void test() { // test globals\r\n        Eng rng0, rng1, rng2;\r\n\r\n        (void) rng2();\r\n        CHECK(rng0 == rng1);\r\n        CHECK(rng0 != rng2);\r\n\r\n        (void) rng1();\r\n        CHECK(rng1 == rng2);\r\n\r\n        STD stringstream str;\r\n        str << rng1;\r\n        CHECK(rng1 == rng2);\r\n\r\n        str >> rng0;\r\n        CHECK(rng0 == rng1);\r\n        CHECK(rng0() == rng1());\r\n    }\r\n};\r\n\r\nstatic void tlinear() {\r\n    typedef STD linear_congruential_engine<Uint32, 16807, 0, 2147483647> rng_t;\r\n\r\n    CHECK_INT(rng_t::multiplier, 16807);\r\n    CHECK_INT(rng_t::increment, 0);\r\n    CHECK_INT(rng_t::modulus, 2147483647);\r\n    bool st = STD is_same<rng_t::result_type, Uint32>::value;\r\n    CHECK(st);\r\n\r\n    rng_t rng;\r\n    CHECK_INT(rng.min(), 1);\r\n    CHECK_INT(rng.max(), 2147483646);\r\n    CHECK_INT(rng(), 16807);\r\n\r\n    rng_t rng1(2);\r\n    CHECK_INT(rng1.min(), 1);\r\n    CHECK_INT(rng1.max(), 2147483646);\r\n    CHECK_INT(rng1(), 33614);\r\n\r\n    rng.seed(1);\r\n    CHECK_INT(rng.min(), 1);\r\n    CHECK_INT(rng.max(), 2147483646);\r\n    CHECK_INT(rng(), 16807);\r\n\r\n    rng.seed(2);\r\n    CHECK_INT(rng.min(), 1);\r\n    CHECK_INT(rng.max(), 2147483646);\r\n    CHECK_INT(rng(), 33614);\r\n\r\n    test_globals<rng_t>::test();\r\n\r\n    // check large values\r\n    typedef unsigned long long int_type;\r\n    const int_type max_val = (int_type) -1;\r\n\r\n    typedef STD linear_congruential_engine<int_type, max_val - 1, 0, max_val> rng4_t;\r\n    rng4_t rng4(1);\r\n    CHECK(rng4() == max_val - 1);\r\n    CHECK(rng4() == 1);\r\n}\r\n\r\nstatic void tminstd_rand0() {\r\n    typedef STD minstd_rand0 rng_t;\r\n    CHECK_INT(rng_t::multiplier, 16807);\r\n    CHECK_INT(rng_t::increment, 0);\r\n    CHECK_INT(rng_t::modulus, 2147483647);\r\n    rng_t rng;\r\n    Int32 res = 0;\r\n    for (int i = 0; i < 10000; ++i) {\r\n        res = rng();\r\n    }\r\n    CHECK_INT(res, 1043618065);\r\n}\r\n\r\nstatic void tminstd_rand() {\r\n    typedef STD minstd_rand rng_t;\r\n    CHECK_INT(rng_t::multiplier, 48271);\r\n    CHECK_INT(rng_t::increment, 0);\r\n    CHECK_INT(rng_t::modulus, 2147483647);\r\n    rng_t rng;\r\n    Int32 res = 0;\r\n    for (int i = 0; i < 10000; ++i) {\r\n        res = rng();\r\n    }\r\n    CHECK_INT(res, 399268537);\r\n}\r\n\r\nstatic void tmersenne() {\r\n    typedef STD mt19937 rng_t;\r\n    CHECK_INT(rng_t::word_size, 32);\r\n    CHECK_INT(rng_t::state_size, 624);\r\n    CHECK_INT(rng_t::shift_size, 397);\r\n    CHECK_INT(rng_t::mask_bits, 31);\r\n    CHECK_INT(rng_t::xor_mask, 0x9908b0df);\r\n    CHECK_INT(rng_t::tempering_u, 11);\r\n    CHECK_INT(rng_t::tempering_d, 0xffffffff);\r\n    CHECK_INT(rng_t::tempering_s, 7);\r\n    CHECK_INT(rng_t::tempering_b, 0x9d2c5680);\r\n    CHECK_INT(rng_t::tempering_t, 15);\r\n    CHECK_INT(rng_t::tempering_c, 0xefc60000);\r\n    CHECK_INT(rng_t::tempering_l, 18);\r\n    CHECK_INT(rng_t::initialization_multiplier, 1812433253);\r\n    bool st = STD is_same<rng_t::result_type, Uint32>::value;\r\n    CHECK(st);\r\n\r\n    rng_t rng;\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), 0xffffffff);\r\n    CHECK_INT(rng(), (int) 3499211612u);\r\n\r\n    const auto ptr_rng1 = STD make_unique<rng_t>(1);\r\n    CHECK_INT(ptr_rng1->min(), 0);\r\n    CHECK_INT(ptr_rng1->max(), 0xffffffff);\r\n    CHECK_INT((*ptr_rng1)(), 1791095845);\r\n\r\n    rng.seed(1);\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), 0xffffffff);\r\n    CHECK_INT(rng(), 1791095845);\r\n\r\n    rng.seed(2);\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), 0xffffffff);\r\n    CHECK_INT(rng(), 1872583848);\r\n\r\n    test_globals<rng_t>::test();\r\n}\r\n\r\nstatic void tmt19937() {\r\n    typedef STD mt19937 rng_t;\r\n    CHECK_INT(rng_t::word_size, 32);\r\n    CHECK_INT(rng_t::state_size, 624);\r\n    CHECK_INT(rng_t::shift_size, 397);\r\n    CHECK_INT(rng_t::mask_bits, 31);\r\n    CHECK_INT((int) rng_t::xor_mask, (int) 0x9908b0df);\r\n    CHECK_INT(rng_t::tempering_u, 11);\r\n    CHECK_INT((int) rng_t::tempering_d, (int) 0xffffffff);\r\n    CHECK_INT(rng_t::tempering_s, 7);\r\n    CHECK_INT((int) rng_t::tempering_b, (int) 0x9d2c5680);\r\n    CHECK_INT(rng_t::tempering_t, 15);\r\n    CHECK_INT((int) rng_t::tempering_c, (int) 0xefc60000);\r\n    CHECK_INT(rng_t::tempering_l, 18);\r\n    CHECK_INT(rng_t::initialization_multiplier, 1812433253);\r\n    rng_t rng;\r\n    Int32 res = 0;\r\n    for (int i = 0; i < 10000; ++i) {\r\n        res = rng();\r\n    }\r\n    CHECK_INT(res, (int) 4123659995UL);\r\n\r\n    rng_t rng0, rng1;\r\n    for (int i = 0; i < 300; ++i) {\r\n        (void) rng0();\r\n    }\r\n\r\n    STD stringstream str;\r\n    str << rng0;\r\n    str >> rng1;\r\n    CHECK(rng0 == rng1);\r\n    CHECK(rng1 == rng0);\r\n    for (int i = 0; i < 600; ++i) {\r\n        (void) rng0();\r\n        (void) rng1();\r\n    }\r\n\r\n    CHECK(rng0 == rng1);\r\n    CHECK(rng1 == rng0);\r\n    for (int i = 0; i < 50; ++i) {\r\n        (void) rng0();\r\n        (void) rng1();\r\n    }\r\n\r\n    CHECK(rng0 == rng1);\r\n    CHECK(rng1 == rng0);\r\n    for (int i = 0; i < 300; ++i) {\r\n        (void) rng0();\r\n        (void) rng1();\r\n    }\r\n\r\n    CHECK(rng0 == rng1);\r\n    CHECK(rng1 == rng0);\r\n}\r\n\r\nstatic void tsubtract() {\r\n    typedef STD subtract_with_carry_engine<Uint32, 24, 10, 24> rng_t;\r\n    CHECK_INT(rng_t::word_size, 24);\r\n    CHECK_INT(rng_t::short_lag, 10);\r\n    CHECK_INT(rng_t::long_lag, 24);\r\n    bool st = STD is_same<rng_t::result_type, Uint32>::value;\r\n    CHECK(st);\r\n\r\n    rng_t rng;\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), 15039276);\r\n\r\n    rng_t rng1(1);\r\n    CHECK_INT(rng1.min(), 0);\r\n    CHECK_INT(rng1.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng1(), 8871692);\r\n\r\n    rng.seed(1);\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), 8871692);\r\n\r\n    rng.seed(2);\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), 966168);\r\n\r\n    test_globals<rng_t>::test();\r\n}\r\n\r\nstatic void tdiscard() {\r\n    int i;\r\n    typedef STD subtract_with_carry_engine<Uint32, 24, 10, 24> rng_base_t;\r\n    typedef STD discard_block_engine<rng_base_t, 223, 24> rng_t;\r\n    CHECK_INT(rng_t::block_size, 223);\r\n    CHECK_INT(rng_t::used_block, 24);\r\n    bool st = STD is_same<rng_t::result_type, Uint32>::value;\r\n    CHECK(st);\r\n\r\n    rng_t rng;\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), 15039276);\r\n\r\n    rng_base_t rng4;\r\n    rng_t rng5;\r\n    for (i = 0; i < static_cast<int>(rng_t::used_block); ++i) {\r\n        CHECK_INT(rng4(), rng5());\r\n    }\r\n    CHECK(rng4() != rng5());\r\n    for (; i < static_cast<int>(rng_t::block_size); ++i) {\r\n        (void) rng4();\r\n    }\r\n\r\n    CHECK_INT(rng4(), rng5());\r\n\r\n    test_globals<rng_t>::test();\r\n}\r\n\r\nvoid test_main() { // test generators\r\n    tlinear();\r\n    tminstd_rand0();\r\n    tminstd_rand();\r\n    tmersenne();\r\n    tmt19937();\r\n    tsubtract();\r\n    tdiscard();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/random2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <random> header, part 2\r\n#define TEST_NAME \"<random>, part 2\"\r\n\r\n#include \"tdefs.h\"\r\n#include <math.h>\r\n#include <random>\r\n#include <sstream>\r\n\r\nconst double double_p = 1.0 + STD numeric_limits<double>::epsilon();\r\nconst double double_m = 1.0 - STD numeric_limits<double>::epsilon();\r\n\r\ntemplate <class T>\r\nbool eq(T x0, T x1) {\r\n    return STD numeric_limits<T>::is_integer ? x0 == x1 : STD abs(x0 - x1) < 3 * STD numeric_limits<T>::epsilon();\r\n}\r\n\r\ntemplate <class Dist, class Engine = STD minstd_rand>\r\nstruct test_globals {\r\n    static void test() {\r\n        Engine rng0, rng1, rng2;\r\n        Dist dist0, dist1, dist2;\r\n        (void) dist0(rng0);\r\n        bool mismatched = false;\r\n        for (int i = 0; i < 10; ++i) {\r\n            (void) dist2(rng2);\r\n            if (dist0(rng0) != dist1(rng1)) {\r\n                mismatched = true;\r\n            }\r\n        }\r\n        CHECK(mismatched);\r\n        STD stringstream str;\r\n        str << dist1 << ' ' << rng1;\r\n        CHECK(eq(dist1(rng1), dist2(rng2)));\r\n        str >> dist0 >> rng0;\r\n        (void) dist0(rng0);\r\n        dist0.reset();\r\n        dist1.reset();\r\n        CHECK(eq(dist0(rng0), dist1(rng1)));\r\n    }\r\n};\r\n\r\nstatic void tuniform_int() {\r\n    typedef STD uniform_int_distribution<int> dist_t;\r\n    constexpr int default_max = STD numeric_limits<int>::max();\r\n\r\n    bool st = STD is_same<dist_t::result_type, int>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_INT(dist0.min(), 0);\r\n    CHECK_INT(dist0.max(), default_max);\r\n    dist0.reset();\r\n    dist_t dist1(1);\r\n    CHECK_INT(dist1.min(), 1);\r\n    CHECK_INT(dist1.max(), default_max);\r\n    dist_t dist2(2, 8);\r\n    CHECK_INT(dist2.min(), 2);\r\n    CHECK_INT(dist2.max(), 8);\r\n    STD stringstream str;\r\n    str << dist0;\r\n    str >> dist2;\r\n    CHECK_INT(dist2.min(), 0);\r\n    CHECK_INT(dist2.max(), default_max);\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\nstatic void tbernoulli_distribution() {\r\n    typedef STD bernoulli_distribution dist_t;\r\n    bool st = STD is_same<dist_t::result_type, bool>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_DOUBLE(dist0.p(), 0.5);\r\n    dist0.reset();\r\n    dist_t dist1(double_m);\r\n    CHECK_DOUBLE(dist1.p(), double_m);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_DOUBLE(dist0.p(), double_m);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK_DOUBLE(dist0.p(), par0.p());\r\n    CHECK(par0 == dist_t::param_type(dist1.p()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK(dist0.min() <= dist0.max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\nstatic void tpoisson_distribution() {\r\n    typedef STD poisson_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, int>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_DOUBLE(dist0.mean(), 1.0);\r\n    dist0.reset();\r\n    dist_t dist1(double_m);\r\n    CHECK_DOUBLE(dist1.mean(), double_m);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_DOUBLE(dist0.mean(), double_m);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK_DOUBLE(dist0.mean(), par0.mean());\r\n    CHECK(par0 == dist_t::param_type(dist1.mean()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK(dist0.min() <= dist0.max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\nstatic void tgeometric_distribution() {\r\n    typedef STD geometric_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, int>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_DOUBLE(dist0.p(), 0.5);\r\n    dist0.reset();\r\n    dist_t dist1(double_m);\r\n    CHECK_DOUBLE(dist1.p(), double_m);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_DOUBLE(dist0.p(), double_m);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK_DOUBLE(dist0.p(), par0.p());\r\n    CHECK(par0 == dist_t::param_type(dist1.p()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK_INT(dist0.min(), 0);\r\n    CHECK_INT(dist0.max(), STD numeric_limits<int>::max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\nstatic void tbinomial_distribution() {\r\n    typedef STD binomial_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, int>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_INT(dist0.t(), 1);\r\n    CHECK_DOUBLE(dist0.p(), 0.5);\r\n    dist0.reset();\r\n    dist_t dist1(2, double_m);\r\n    CHECK_INT(dist1.t(), 2);\r\n    CHECK_DOUBLE(dist1.p(), double_m);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_INT(dist0.t(), 2);\r\n    CHECK_DOUBLE(dist0.p(), double_m);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK_DOUBLE(dist0.t(), par0.t());\r\n    CHECK_DOUBLE(dist0.p(), par0.p());\r\n    CHECK(par0 == dist_t::param_type(dist1.t(), dist1.p()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK(dist0.min() <= dist0.max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\nstatic void tuniform_real() {\r\n    typedef STD uniform_real_distribution<double> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, double>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_DOUBLE(dist0.min(), 0.0);\r\n    CHECK_DOUBLE(dist0.max(), 1.0);\r\n    dist0.reset();\r\n    dist_t dist1(0.25);\r\n    CHECK_DOUBLE(dist1.min(), 0.25);\r\n    CHECK_DOUBLE(dist1.max(), 1.0);\r\n    dist_t dist2(double_m, double_p);\r\n    CHECK_DOUBLE(dist2.min(), double_m);\r\n    CHECK_DOUBLE(dist2.max(), double_p);\r\n    STD stringstream str;\r\n    str << dist2;\r\n    str >> dist0;\r\n    CHECK_DOUBLE(dist0.min(), double_m);\r\n    CHECK_DOUBLE(dist0.max(), double_p);\r\n}\r\n\r\nstatic void texponential_distribution() {\r\n    typedef STD exponential_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, double>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_DOUBLE(dist0.lambda(), 1.0);\r\n    dist0.reset();\r\n    dist_t dist1(double_p);\r\n    CHECK_DOUBLE(dist1.lambda(), double_p);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_DOUBLE(dist0.lambda(), double_p);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK_DOUBLE(dist0.lambda(), par0.lambda());\r\n    CHECK(par0 == dist_t::param_type(dist1.lambda()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK(dist0.min() <= dist0.max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\nstatic void tnormal_distribution() {\r\n    typedef STD normal_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, double>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_DOUBLE(dist0.mean(), 0.0);\r\n    CHECK_DOUBLE(dist0.sigma(), 1.0);\r\n    dist0.reset();\r\n    dist_t dist1(double_m, double_p);\r\n    CHECK_DOUBLE(dist1.mean(), double_m);\r\n    CHECK_DOUBLE(dist1.sigma(), double_p);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_DOUBLE(dist0.mean(), double_m);\r\n    CHECK_DOUBLE(dist0.sigma(), double_p);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK_DOUBLE(dist0.mean(), par0.mean());\r\n    CHECK_DOUBLE(dist0.sigma(), par0.sigma());\r\n    CHECK_DOUBLE(dist0.stddev(), par0.stddev());\r\n    CHECK(par0 == dist_t::param_type(dist1.mean(), dist1.sigma()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK(dist0.min() <= dist0.max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\nstatic void tgamma_distribution() {\r\n    typedef STD gamma_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, double>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_DOUBLE(dist0.alpha(), 1.0);\r\n    dist0.reset();\r\n    dist_t dist1(double_p);\r\n    CHECK_DOUBLE(dist1.alpha(), double_p);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_DOUBLE(dist0.alpha(), double_p);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK_DOUBLE(dist0.alpha(), par0.alpha());\r\n    CHECK_DOUBLE(dist0.beta(), par0.beta());\r\n    CHECK(par0 == dist_t::param_type(dist1.alpha(), dist1.beta()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK(dist0.min() <= dist0.max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\nstatic void trandom_device() {\r\n    STD random_device dev;\r\n\r\n    CHECK_INT(STD random_device::min(), 0);\r\n    CHECK(0 < STD random_device::max());\r\n\r\n    CHECK_INT(dev.min(), 0);\r\n    CHECK(0 < dev.max());\r\n    CHECK(0.0 <= dev.entropy());\r\n    CHECK(dev() != dev() || dev() != dev());\r\n}\r\n\r\nvoid test_main() { // test distributions\r\n    tuniform_int();\r\n    tbernoulli_distribution();\r\n    tgeometric_distribution();\r\n    tpoisson_distribution();\r\n    tbinomial_distribution();\r\n    tuniform_real();\r\n    texponential_distribution();\r\n    tnormal_distribution();\r\n    tgamma_distribution();\r\n    trandom_device();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/random4/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <random> C++11 header, part 4\r\n#define TEST_NAME \"<random>, part 4\"\r\n\r\n#include \"tdefs.h\"\r\n#include <cmath>\r\n#include <random>\r\n#include <sstream>\r\n\r\ntypedef int Int32;\r\ntypedef unsigned int Uint32;\r\n\r\ntemplate <class Eng>\r\nstruct test_globals { // tests engine global functions\r\n    static void test() { // test globals\r\n        Eng rng0, rng1, rng2;\r\n\r\n        (void) rng2();\r\n        CHECK(rng0 == rng1);\r\n        CHECK(rng0 != rng2);\r\n\r\n        (void) rng1();\r\n        CHECK(rng1 == rng2);\r\n\r\n        STD stringstream str;\r\n        str << rng1;\r\n        CHECK(rng1 == rng2);\r\n\r\n        str >> rng0;\r\n        CHECK(rng0 == rng1);\r\n        CHECK(rng0() == rng1());\r\n    }\r\n};\r\n\r\nstatic void tseed_seq() { // test class seed_seq\r\n    Uint32 arr1[5] = {'a', 'b', 'c', 'd', 'e'};\r\n    Uint32 arr2[5] = {0};\r\n\r\n    bool st = STD is_same<STD seed_seq::result_type, Uint32>::value;\r\n    CHECK(st);\r\n\r\n    STD seed_seq seq;\r\n    CHECK_INT(seq.size(), 0);\r\n    seq.param(&arr1[0]);\r\n    CHECK_INT(arr1[0], 'a');\r\n\r\n    STD seed_seq seq1(&arr1[0], &arr1[5]);\r\n    CHECK_INT(seq1.size(), 5);\r\n    seq1.param(&arr2[0]);\r\n    CHECK_INT(arr2[0], 'a');\r\n    CHECK_INT(arr2[4], 'e');\r\n\r\n    seq.generate(&arr2[0], &arr2[4]);\r\n    CHECK_INT(arr2[3], 3895714911U);\r\n    seq1.generate(&arr2[0], &arr2[4]);\r\n    CHECK_INT(arr2[3], 3734116661U);\r\n\r\n    STD seed_seq seq2({arr1[0], arr1[1], arr1[2], arr1[3], arr1[4]});\r\n    CHECK_INT(seq2.size(), 5);\r\n    seq2.param(&arr2[0]);\r\n    CHECK_INT(arr2[0], 'a');\r\n    CHECK_INT(arr2[4], 'e');\r\n}\r\n\r\nstatic void tgenerate() { // test generate_canonical\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t gen1, gen2;\r\n    double x = STD generate_canonical<double, 40, rng_t>(gen1);\r\n    CHECK(0.0 <= x && x < 1.0);\r\n    double y = STD generate_canonical<double, 40>(gen2);\r\n    CHECK_DOUBLE(x, y);\r\n}\r\n\r\nstatic void tlinear() { // test linear_congruential_engine\r\n    typedef STD linear_congruential_engine<Uint32, 16807, 0, 2147483647> rng_t;\r\n\r\n    CHECK_INT(rng_t::multiplier, 16807);\r\n    CHECK_INT(rng_t::increment, 0);\r\n    CHECK_INT(rng_t::modulus, 2147483647);\r\n    CHECK_INT(rng_t::default_seed, 1);\r\n\r\n    bool st = STD is_same<rng_t::result_type, Uint32>::value;\r\n    CHECK(st);\r\n\r\n    CHECK_INT(rng_t::min(), 1);\r\n    CHECK_INT(rng_t::max(), 2147483646);\r\n\r\n    rng_t rng;\r\n    CHECK_INT(rng.min(), 1);\r\n    CHECK_INT(rng.max(), 2147483646);\r\n    CHECK_INT(rng(), 16807);\r\n\r\n    rng_t rng1(2);\r\n    CHECK_INT(rng1.min(), 1);\r\n    CHECK_INT(rng1.max(), 2147483646);\r\n    CHECK_INT(rng1(), 33614);\r\n\r\n    STD seed_seq seq;\r\n    rng_t rng2(seq);\r\n    CHECK_INT(rng2(), 651595794U);\r\n\r\n    rng.seed(1);\r\n    CHECK_INT(rng.min(), 1);\r\n    CHECK_INT(rng.max(), 2147483646);\r\n    CHECK_INT(rng(), 16807);\r\n\r\n    rng.seed(2);\r\n    CHECK_INT(rng.min(), 1);\r\n    CHECK_INT(rng.max(), 2147483646);\r\n    CHECK_INT(rng(), 33614);\r\n    rng.seed(seq);\r\n    CHECK_INT(rng(), 651595794U);\r\n\r\n    rng.seed(1);\r\n    rng.discard(1);\r\n    CHECK_INT(rng(), 282475249);\r\n\r\n    test_globals<rng_t>::test();\r\n\r\n    // check large values\r\n    typedef unsigned long long int_type;\r\n    const int_type max_val = (int_type) -1;\r\n\r\n    typedef STD linear_congruential_engine<int_type, max_val - 1, 0, max_val> rng4_t;\r\n    rng4_t rng4(1);\r\n    CHECK(rng4() == max_val - 1);\r\n    CHECK(rng4() == 1);\r\n}\r\n\r\nstatic void tmersenne() {\r\n    typedef STD mersenne_twister_engine<Uint32, 32, 624, 397, 31, 0x9908b0df, 11, 0xffffffff, 7, 0x9d2c5680, 15,\r\n        0xefc60000, 18, 1812433253>\r\n        rng_t;\r\n    CHECK_INT(rng_t::word_size, 32);\r\n    CHECK_INT(rng_t::state_size, 624);\r\n    CHECK_INT(rng_t::shift_size, 397);\r\n    CHECK_INT(rng_t::mask_bits, 31);\r\n    CHECK_INT((int) rng_t::xor_mask, (int) 0x9908b0df);\r\n    CHECK_INT(rng_t::tempering_u, 11);\r\n    CHECK_INT(rng_t::tempering_d, (int) 0xffffffff);\r\n    CHECK_INT(rng_t::tempering_s, 7);\r\n    CHECK_INT((int) rng_t::tempering_b, (int) 0x9d2c5680);\r\n    CHECK_INT(rng_t::tempering_t, 15);\r\n    CHECK_INT((int) rng_t::tempering_c, (int) 0xefc60000);\r\n    CHECK_INT(rng_t::tempering_l, 18);\r\n    CHECK_INT(rng_t::initialization_multiplier, 1812433253);\r\n    CHECK_INT(rng_t::default_seed, 5489);\r\n\r\n    bool st = STD is_same<rng_t::result_type, Uint32>::value;\r\n    CHECK(st);\r\n\r\n    CHECK_INT(rng_t::min(), 0);\r\n    CHECK_INT(rng_t::max(), 0xffffffff);\r\n\r\n    rng_t rng;\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), 0xffffffff);\r\n    CHECK_INT(rng(), (int) 3499211612u);\r\n\r\n    rng_t rng1(1);\r\n    CHECK_INT(rng1.min(), 0);\r\n    CHECK_INT(rng1.max(), 0xffffffff);\r\n    CHECK_INT(rng1(), 1791095845);\r\n\r\n    STD seed_seq seq;\r\n    rng_t rng2(seq);\r\n    CHECK_INT(rng2(), 2872601305U);\r\n\r\n    rng.seed(1);\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), 0xffffffff);\r\n    CHECK_INT(rng(), 1791095845);\r\n\r\n    rng.seed(2);\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), 0xffffffff);\r\n    CHECK_INT(rng(), 1872583848);\r\n    rng.seed(seq);\r\n    CHECK_INT(rng(), 2872601305U);\r\n\r\n    rng.seed(1);\r\n    rng.discard(1);\r\n    CHECK_INT(rng(), 4282876139U);\r\n\r\n    test_globals<rng_t>::test();\r\n}\r\n\r\nstatic void tsubtract() {\r\n    typedef STD subtract_with_carry_engine<Uint32, 24, 10, 24> rng_t;\r\n    CHECK_INT(rng_t::word_size, 24);\r\n    CHECK_INT(rng_t::short_lag, 10);\r\n    CHECK_INT(rng_t::long_lag, 24);\r\n    CHECK_INT(rng_t::default_seed, 19780503);\r\n    bool st = STD is_same<rng_t::result_type, Uint32>::value;\r\n    CHECK(st);\r\n\r\n    CHECK_INT(rng_t::min(), 0);\r\n    CHECK_INT(rng_t::max(), (1 << 24) - 1);\r\n\r\n    rng_t rng;\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), 15039276);\r\n\r\n    rng_t rng1(1);\r\n    CHECK_INT(rng1.min(), 0);\r\n    CHECK_INT(rng1.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng1(), 8871692);\r\n\r\n    STD seed_seq seq;\r\n    rng_t rng2(seq);\r\n    CHECK_INT(rng2(), 13077165U);\r\n\r\n    rng.seed(1);\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), 8871692);\r\n\r\n    rng.seed(2);\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), 966168);\r\n\r\n    rng.seed(1);\r\n    rng.discard(1);\r\n    CHECK_INT(rng(), 3740959);\r\n\r\n    test_globals<rng_t>::test();\r\n}\r\n\r\nstatic void tdiscard() {\r\n    STD size_t i;\r\n    typedef STD subtract_with_carry_engine<Uint32, 24, 10, 24> rng_base_t;\r\n    typedef STD discard_block_engine<rng_base_t, 223, 24> rng_t;\r\n    CHECK_INT(rng_t::block_size, 223);\r\n    CHECK_INT(rng_t::used_block, 24);\r\n    bool st = STD is_same<rng_t::result_type, rng_base_t::result_type>::value;\r\n    CHECK(st);\r\n\r\n    CHECK_INT(rng_t::min(), 0);\r\n    CHECK_INT(rng_t::max(), (1 << 24) - 1);\r\n\r\n    rng_t rng;\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), 15039276);\r\n\r\n    rng_base_t urng;\r\n    rng_t rng0(urng);\r\n    CHECK_INT(rng0.min(), 0);\r\n    CHECK_INT(rng0.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng0(), 15039276);\r\n\r\n    rng_t rng1(1);\r\n    CHECK_INT(rng1.min(), 0);\r\n    CHECK_INT(rng1.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng1(), 8871692);\r\n\r\n    STD seed_seq seq;\r\n    rng_t rng2(seq);\r\n    CHECK_INT(rng2(), 13077165U);\r\n\r\n    rng.seed();\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), 15039276);\r\n\r\n    rng.seed(1);\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), 8871692);\r\n\r\n    rng.seed(2);\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), 966168);\r\n\r\n    rng.seed(1);\r\n    rng.discard(1);\r\n    CHECK_INT(rng(), 3740959);\r\n\r\n    rng_base_t rng4;\r\n    rng_t rng5;\r\n    for (i = 0; i < rng_t::used_block; ++i) {\r\n        CHECK_INT(rng4(), rng5());\r\n    }\r\n    CHECK(rng4() != rng5());\r\n    for (; i < rng_t::block_size; ++i) {\r\n        (void) rng4();\r\n    }\r\n\r\n    CHECK_INT(rng4(), rng5());\r\n\r\n    test_globals<rng_t>::test();\r\n}\r\n\r\nstatic void tindependent() {\r\n    typedef STD subtract_with_carry_engine<Uint32, 24, 10, 24> rng_base_t;\r\n    typedef STD independent_bits_engine<rng_base_t, 24, Uint32> rng_t;\r\n    bool st = STD is_same<rng_t::result_type, rng_base_t::result_type>::value;\r\n    CHECK(st);\r\n\r\n    CHECK_INT(rng_t::min(), 0);\r\n    CHECK_INT(rng_t::max(), (1 << 24) - 1);\r\n\r\n    rng_t rng;\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), 15039276);\r\n\r\n    rng_base_t urng;\r\n    rng_t rng0(urng);\r\n    CHECK_INT(rng0.min(), 0);\r\n    CHECK_INT(rng0.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng0(), 15039276);\r\n\r\n    rng_t rng1(1);\r\n    CHECK_INT(rng1.min(), 0);\r\n    CHECK_INT(rng1.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng1(), 8871692);\r\n\r\n    STD seed_seq seq;\r\n    rng_t rng2(seq);\r\n    CHECK_INT(rng2(), 13077165U);\r\n\r\n    rng.seed();\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), 15039276);\r\n\r\n    rng.seed(1);\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), 8871692);\r\n\r\n    rng.seed(2);\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), 966168);\r\n\r\n    rng.seed(1);\r\n    rng.discard(1);\r\n    CHECK_INT(rng(), 3740959);\r\n\r\n    test_globals<rng_t>::test();\r\n}\r\n\r\nstatic void tshuffle() {\r\n    typedef STD subtract_with_carry_engine<Uint32, 24, 10, 24> rng_base_t;\r\n    typedef STD shuffle_order_engine<rng_base_t, 5> rng_t;\r\n    CHECK_INT(rng_t::table_size, 5);\r\n    bool st = STD is_same<rng_t::result_type, rng_base_t::result_type>::value;\r\n    CHECK(st);\r\n\r\n    CHECK_INT(rng_t::min(), 0);\r\n    CHECK_INT(rng_t::max(), (1 << 24) - 1);\r\n\r\n    rng_t rng;\r\n    const int defaultResult = 14283486;\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), defaultResult);\r\n\r\n    rng_base_t urng;\r\n    rng_t rng0(urng);\r\n    CHECK_INT(rng0.min(), 0);\r\n    CHECK_INT(rng0.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng0(), defaultResult);\r\n\r\n    rng_t rng1(1);\r\n    const int oneResult = 11575129;\r\n    CHECK_INT(rng1.min(), 0);\r\n    CHECK_INT(rng1.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng1(), oneResult);\r\n\r\n    STD seed_seq seq;\r\n    rng_t rng2(seq);\r\n    CHECK_INT(rng2(), 747473);\r\n\r\n    rng.seed();\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), defaultResult);\r\n\r\n    rng.seed(1);\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), oneResult);\r\n\r\n    rng.seed(2);\r\n    CHECK_INT(rng.min(), 0);\r\n    CHECK_INT(rng.max(), (1 << 24) - 1);\r\n    CHECK_INT(rng(), 6373042);\r\n\r\n    rng.seed(1);\r\n    rng.discard(1);\r\n    CHECK_INT(rng(), 1619564);\r\n\r\n    test_globals<rng_t>::test();\r\n}\r\n\r\nstatic void tmt19937_64() {\r\n    typedef STD mt19937_64 rng_t;\r\n    rng_t rng;\r\n    rng_t::result_type res = 0;\r\n    for (int i = 0; i < 10000; ++i) {\r\n        res = rng();\r\n    }\r\n    CHECK(res == 9981545732273789042ULL);\r\n}\r\n\r\nstatic void tranlux24_base() {\r\n    typedef STD ranlux24_base rng_t;\r\n    rng_t rng;\r\n    rng_t::result_type res = 0;\r\n    for (int i = 0; i < 10000; ++i) {\r\n        res = rng();\r\n    }\r\n    CHECK_INT(res, 7937952);\r\n}\r\n\r\nstatic void tranlux24() {\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    rng_t::result_type res = 0;\r\n    for (int i = 0; i < 10000; ++i) {\r\n        res = rng();\r\n    }\r\n    CHECK_INT(res, 9901578);\r\n}\r\n\r\nstatic void tranlux48_base() {\r\n    typedef STD ranlux48_base rng_t;\r\n    rng_t rng;\r\n    rng_t::result_type res = 0;\r\n    for (int i = 0; i < 10000; ++i) {\r\n        res = rng();\r\n    }\r\n    CHECK(res == 61839128582725ULL);\r\n}\r\n\r\nstatic void tranlux48() {\r\n    typedef STD ranlux48 rng_t;\r\n    rng_t rng;\r\n    rng_t::result_type res = 0;\r\n    for (int i = 0; i < 10000; ++i) {\r\n        res = rng();\r\n    }\r\n    CHECK(res == 249142670248501ULL);\r\n}\r\n\r\nstatic void tknuth() {\r\n    typedef STD knuth_b rng_t;\r\n    rng_t rng;\r\n    rng_t::result_type res = 0;\r\n    for (int i = 0; i < 10000; ++i) {\r\n        res = rng();\r\n    }\r\n    CHECK_INT(res, 1112339016U);\r\n}\r\n\r\nvoid test_main() { // test generators\r\n    tseed_seq();\r\n    tgenerate();\r\n    tlinear();\r\n    tmersenne();\r\n    tsubtract();\r\n    tdiscard();\r\n    tindependent();\r\n    tshuffle();\r\n\r\n    tmt19937_64();\r\n    tranlux24_base();\r\n    tranlux24();\r\n    tranlux48_base();\r\n    tranlux48();\r\n    tknuth();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/random5/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <random> C++11 header, part 5\r\n#define TEST_NAME \"<random>, part 5\"\r\n\r\n#include \"tdefs.h\"\r\n#include <cmath>\r\n#include <random>\r\n#include <sstream>\r\n\r\nconst double double_p = 1.0 + STD numeric_limits<double>::epsilon();\r\nconst double double_m = 1.0 - STD numeric_limits<double>::epsilon();\r\n\r\ntemplate <class T>\r\nbool eq(T x0, T x1) {\r\n    return STD numeric_limits<T>::is_integer ? x0 == x1 : STD abs(x0 - x1) < 3 * STD numeric_limits<T>::epsilon();\r\n}\r\n\r\ntemplate <class Dist, class Engine = STD minstd_rand>\r\nstruct test_globals {\r\n    static void test() {\r\n        Engine rng0, rng1, rng2;\r\n        Dist dist0, dist1, dist2;\r\n        (void) dist0(rng0);\r\n        bool mismatched = false;\r\n        for (int i = 0; i < 10; ++i) {\r\n            (void) dist2(rng2);\r\n            if (dist0(rng0) != dist1(rng1)) {\r\n                mismatched = true;\r\n            }\r\n        }\r\n        CHECK(mismatched);\r\n        STD stringstream str;\r\n        str << dist1 << ' ' << rng1;\r\n        CHECK(eq(dist1(rng1), dist2(rng2)));\r\n        str >> dist0 >> rng0;\r\n        (void) dist0(rng0);\r\n        dist0.reset();\r\n        dist1.reset();\r\n        CHECK(eq(dist0(rng0), dist1(rng1)));\r\n    }\r\n};\r\n\r\nstatic void tuniform_int() {\r\n    typedef STD uniform_int_distribution<int> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, int>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_INT(dist0.min(), 0);\r\n    CHECK_INT(dist0.max(), STD numeric_limits<int>::max());\r\n    dist0.reset();\r\n    dist_t dist1(1);\r\n    CHECK_INT(dist1.min(), 1);\r\n    CHECK_INT(dist1.max(), STD numeric_limits<int>::max());\r\n    dist_t dist2(2, 8);\r\n    CHECK_INT(dist2.min(), 2);\r\n    CHECK_INT(dist2.max(), 8);\r\n    STD stringstream str;\r\n    str << dist0;\r\n    str >> dist2;\r\n    CHECK_INT(dist2.min(), 0);\r\n    CHECK_INT(dist2.max(), STD numeric_limits<int>::max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist2.param(par0);\r\n    CHECK_INT(dist2.a(), par0.a());\r\n    CHECK_INT(dist2.b(), par0.b());\r\n    CHECK(par0 == dist_t::param_type(dist1.a(), dist1.b()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0));\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\nstatic void tuniform_real() {\r\n    typedef STD uniform_real_distribution<double> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, double>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_DOUBLE(dist0.min(), 0.0);\r\n    CHECK_DOUBLE(dist0.max(), 1.0);\r\n    dist0.reset();\r\n    dist_t dist1(0.25);\r\n    CHECK_DOUBLE(dist1.min(), 0.25);\r\n    CHECK_DOUBLE(dist1.max(), 1.0);\r\n    dist_t dist2(double_m, double_p);\r\n    CHECK_DOUBLE(dist2.min(), double_m);\r\n    CHECK_DOUBLE(dist2.max(), double_p);\r\n    STD stringstream str;\r\n    str << dist2;\r\n    str >> dist0;\r\n    CHECK_DOUBLE(dist0.min(), double_m);\r\n    CHECK_DOUBLE(dist0.max(), double_p);\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist2.param(par0);\r\n    CHECK_INT(dist2.a(), par0.a());\r\n    CHECK_INT(dist2.b(), par0.b());\r\n    CHECK(par0 == dist_t::param_type(dist1.a(), dist1.b()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0));\r\n}\r\n\r\nstatic void tnegative_binomial() {\r\n    typedef STD negative_binomial_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, int>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_INT(dist0.k(), 1);\r\n    CHECK_DOUBLE(dist0.p(), 0.5);\r\n    dist0.reset();\r\n    dist_t dist1(2, double_m);\r\n    CHECK_INT(dist1.k(), 2);\r\n    CHECK_DOUBLE(dist1.p(), double_m);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_INT(dist0.k(), 2);\r\n    CHECK_DOUBLE(dist0.p(), double_m);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK_DOUBLE(dist0.k(), par0.k());\r\n    CHECK_DOUBLE(dist0.p(), par0.p());\r\n    CHECK(par0 == dist_t::param_type(dist1.k(), dist1.p()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK_INT(dist0.min(), 0);\r\n    CHECK_INT(dist0.max(), STD numeric_limits<int>::max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\nstatic void tweibull() {\r\n    typedef STD weibull_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, double>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_DOUBLE(dist0.a(), 1.0);\r\n    CHECK_DOUBLE(dist0.b(), 1.0);\r\n    dist0.reset();\r\n    dist_t dist1(2.0, double_m);\r\n    CHECK_DOUBLE(dist1.a(), 2.0);\r\n    CHECK_DOUBLE(dist1.b(), double_m);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_DOUBLE(dist0.a(), 2.0);\r\n    CHECK_DOUBLE(dist0.b(), double_m);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK_DOUBLE(dist0.a(), par0.a());\r\n    CHECK_DOUBLE(dist0.b(), par0.b());\r\n    CHECK(par0 == dist_t::param_type(dist1.a(), dist1.b()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK(dist0.min() <= dist0.max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\nstatic void textreme() {\r\n    typedef STD extreme_value_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, double>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_DOUBLE(dist0.a(), 0.0);\r\n    CHECK_DOUBLE(dist0.b(), 1.0);\r\n    dist0.reset();\r\n    dist_t dist1(2.0, double_m);\r\n    CHECK_DOUBLE(dist1.a(), 2.0);\r\n    CHECK_DOUBLE(dist1.b(), double_m);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_DOUBLE(dist0.a(), 2.0);\r\n    CHECK_DOUBLE(dist0.b(), double_m);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK_DOUBLE(dist0.a(), par0.a());\r\n    CHECK_DOUBLE(dist0.b(), par0.b());\r\n    CHECK(par0 == dist_t::param_type(dist1.a(), dist1.b()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK(dist0.min() <= dist0.max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\nstatic void tlognormal() {\r\n    typedef STD lognormal_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, double>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_DOUBLE(dist0.m(), 0.0);\r\n    CHECK_DOUBLE(dist0.s(), 1.0);\r\n    dist0.reset();\r\n    dist_t dist1(2.0, double_m);\r\n    CHECK_DOUBLE(dist1.m(), 2.0);\r\n    CHECK_DOUBLE(dist1.s(), double_m);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_DOUBLE(dist0.m(), 2.0);\r\n    CHECK_DOUBLE(dist0.s(), double_m);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK_DOUBLE(dist0.m(), par0.m());\r\n    CHECK_DOUBLE(dist0.s(), par0.s());\r\n    CHECK(par0 == dist_t::param_type(dist1.m(), dist1.s()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK(dist0.min() <= dist0.max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\nstatic void tchi_squared() {\r\n    typedef STD chi_squared_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, double>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_INT(dist0.n(), 1);\r\n    dist0.reset();\r\n    dist_t dist1(2);\r\n    CHECK_INT(dist1.n(), 2);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_INT(dist0.n(), 2);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK_DOUBLE(dist0.n(), par0.n());\r\n    CHECK(par0 == dist_t::param_type(dist1.n()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK(dist0.min() <= dist0.max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\nstatic void tcauchy() {\r\n    typedef STD cauchy_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, double>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_DOUBLE(dist0.a(), 0.0);\r\n    CHECK_DOUBLE(dist0.b(), 1.0);\r\n    dist0.reset();\r\n    dist_t dist1(2.0, double_m);\r\n    CHECK_DOUBLE(dist1.a(), 2.0);\r\n    CHECK_DOUBLE(dist1.b(), double_m);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_DOUBLE(dist0.a(), 2.0);\r\n    CHECK_DOUBLE(dist0.b(), double_m);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK_DOUBLE(dist0.a(), par0.a());\r\n    CHECK_DOUBLE(dist0.b(), par0.b());\r\n    CHECK(par0 == dist_t::param_type(dist1.a(), dist1.b()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK(dist0.min() <= dist0.max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\nstatic void tfisher_f() {\r\n    typedef STD fisher_f_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, double>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_DOUBLE(dist0.m(), 1.0);\r\n    CHECK_DOUBLE(dist0.n(), 1.0);\r\n    dist0.reset();\r\n    dist_t dist1(2, 3);\r\n    CHECK_DOUBLE(dist1.m(), 2.0);\r\n    CHECK_DOUBLE(dist1.n(), 3.0);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_DOUBLE(dist0.m(), 2.0);\r\n    CHECK_DOUBLE(dist0.n(), 3.0);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK_DOUBLE(dist0.m(), par0.m());\r\n    CHECK_DOUBLE(dist0.n(), par0.n());\r\n    CHECK(par0 == dist_t::param_type(dist1.m(), dist1.n()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK(dist0.min() <= dist0.max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\nstatic void tstudent_t() {\r\n    typedef STD student_t_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, double>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_DOUBLE(dist0.n(), 1.0);\r\n    dist0.reset();\r\n    dist_t dist1(2);\r\n    CHECK_DOUBLE(dist1.n(), 2.0);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_DOUBLE(dist0.n(), 2.0);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK_DOUBLE(dist0.n(), par0.n());\r\n    CHECK(par0 == dist_t::param_type(dist1.n()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK(dist0.min() <= dist0.max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n\r\n    test_globals<dist_t>::test();\r\n}\r\n\r\ndouble myfn(double x) { // sample PDF\r\n    return 2.0 * x;\r\n}\r\n\r\nstatic void tdiscrete() {\r\n    typedef STD discrete_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, int>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_INT(dist0.probabilities().size(), 1);\r\n    CHECK_DOUBLE(dist0.probabilities()[0], 1.0);\r\n    dist0.reset();\r\n\r\n    STD vector<double> vec(4, 1.0);\r\n\r\n    dist_t dist1{1.0, 1.0, 1.0, 1.0};\r\n\r\n    CHECK_INT(dist1.probabilities().size(), 4);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_INT(dist0.probabilities().size(), 4);\r\n\r\n    dist_t dist2(10, 1.0, 2.0, myfn);\r\n    CHECK_INT(dist2.probabilities().size(), 10);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK(dist0.probabilities() == par0.probabilities());\r\n    vec = par0.probabilities();\r\n\r\n    CHECK(par0 == dist_t::param_type(vec.begin(), vec.end()));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK(dist0.min() <= dist0.max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n}\r\n\r\nstatic void tpiecewise_constant() {\r\n    typedef STD piecewise_constant_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, double>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_INT(dist0.densities().size(), 1);\r\n    CHECK_DOUBLE(dist0.densities()[0], 1.0);\r\n    CHECK_INT(dist0.intervals().size(), 2);\r\n    CHECK_DOUBLE(dist0.intervals()[0], 0.0);\r\n    CHECK_DOUBLE(dist0.intervals()[1], 1.0);\r\n    dist0.reset();\r\n\r\n    STD vector<double> ends_not_enough = {0.5};\r\n    STD vector<double> vec_not_enough  = {0.5};\r\n    dist_t dist0_2(ends_not_enough.begin(), ends_not_enough.end(), vec_not_enough.begin());\r\n    CHECK_INT(dist0_2.densities().size(), 1);\r\n    CHECK_DOUBLE(dist0_2.densities()[0], 1.0);\r\n    CHECK_INT(dist0_2.intervals().size(), 2);\r\n    CHECK_DOUBLE(dist0_2.intervals()[0], 0.0);\r\n    CHECK_DOUBLE(dist0_2.intervals()[1], 1.0);\r\n\r\n\r\n    STD vector<double> ends;\r\n    ends.push_back(0.0);\r\n    ends.push_back(1.0);\r\n    ends.push_back(2.0);\r\n    ends.push_back(3.0);\r\n    ends.push_back(4.0);\r\n    STD vector<double> vec(4, 1.0);\r\n    dist_t dist1(ends.begin(), ends.end(), vec.begin());\r\n    CHECK_INT(dist1.densities().size(), 4);\r\n    CHECK_DOUBLE(dist1.densities()[0], 0.25);\r\n    CHECK_INT(dist1.intervals().size(), 5);\r\n    CHECK_DOUBLE(dist1.intervals()[0], 0.0);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_INT(dist0.densities().size(), 4);\r\n    CHECK_DOUBLE(dist0.densities()[0], 0.25);\r\n\r\n    dist_t dist2(10, 1.0, 2.0, myfn);\r\n    CHECK_INT(dist2.densities().size(), 10);\r\n\r\n    STD initializer_list<double> ilist{1.0, 1.5, 2.0, 3.0, 4.0};\r\n    dist_t dist3(ilist, myfn);\r\n    CHECK_INT(dist3.densities().size(), 4);\r\n    CHECK_DOUBLE(dist3.densities()[0], 0.2777777777777778);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK(dist0.densities() == par0.densities());\r\n    CHECK(dist0.intervals() == par0.intervals());\r\n\r\n    ends = par0.intervals();\r\n    vec  = par0.densities();\r\n    CHECK(par0 == dist_t::param_type(ends.begin(), ends.end(), vec.begin()));\r\n\r\n    CHECK(dist2.param() == dist_t::param_type(10, 1.0, 2.0, myfn));\r\n\r\n    CHECK(dist3.param() == dist_t::param_type(ilist, myfn));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK(dist0.min() <= dist0.max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n}\r\n\r\nstatic void tpiecewise_linear() {\r\n    typedef STD piecewise_linear_distribution<> dist_t;\r\n    bool st = STD is_same<dist_t::result_type, double>::value;\r\n    CHECK(st);\r\n\r\n    dist_t dist0;\r\n    CHECK_INT(dist0.densities().size(), 2);\r\n    CHECK_DOUBLE(dist0.densities()[0], 1.0);\r\n    CHECK_DOUBLE(dist0.densities()[1], 1.0);\r\n    CHECK_INT(dist0.intervals().size(), 2);\r\n    CHECK_DOUBLE(dist0.intervals()[0], 0.0);\r\n    CHECK_DOUBLE(dist0.intervals()[1], 1.0);\r\n    dist0.reset();\r\n\r\n    STD vector<double> ends_not_enough = {0.5};\r\n    STD vector<double> vec_not_enough  = {0.5};\r\n    dist_t dist0_2(ends_not_enough.begin(), ends_not_enough.end(), vec_not_enough.begin());\r\n    CHECK_INT(dist0_2.densities().size(), 2);\r\n    CHECK_DOUBLE(dist0_2.densities()[0], 1.0);\r\n    CHECK_DOUBLE(dist0_2.densities()[1], 1.0);\r\n    CHECK_INT(dist0_2.intervals().size(), 2);\r\n    CHECK_DOUBLE(dist0_2.intervals()[0], 0.0);\r\n    CHECK_DOUBLE(dist0_2.intervals()[1], 1.0);\r\n\r\n    STD vector<double> ends;\r\n    ends.push_back(0.0);\r\n    ends.push_back(1.0);\r\n    ends.push_back(2.0);\r\n    ends.push_back(3.0);\r\n    ends.push_back(4.0);\r\n    STD vector<double> vec(5, 1.0);\r\n    dist_t dist1(ends.begin(), ends.end(), vec.begin());\r\n    CHECK_INT(dist1.densities().size(), 5);\r\n    CHECK_DOUBLE(dist1.densities()[0], 0.25);\r\n    CHECK_INT(dist1.intervals().size(), 5);\r\n    CHECK_DOUBLE(dist1.intervals()[0], 0.0);\r\n    STD stringstream str;\r\n    str << dist1;\r\n    str >> dist0;\r\n    CHECK_INT(dist0.densities().size(), 5);\r\n    CHECK_DOUBLE(dist0.densities()[0], 0.25);\r\n\r\n    dist_t dist2(10, 1.0, 2.0, myfn);\r\n    CHECK_INT(dist2.densities().size(), 11);\r\n\r\n    STD initializer_list<double> ilist{1.0, 1.5, 2.0, 3.0, 4.0};\r\n    dist_t dist3(ilist, myfn);\r\n    CHECK_INT(dist3.densities().size(), 5);\r\n    CHECK_DOUBLE(dist3.densities()[0], 0.13333333333333333);\r\n\r\n    dist_t::param_type::distribution_type::param_type par0 = dist1.param();\r\n    CHECK(!(par0 != dist1.param()));\r\n    dist0.param(par0);\r\n    CHECK(dist0.densities() == par0.densities());\r\n    CHECK(dist0.intervals() == par0.intervals());\r\n\r\n    ends = par0.intervals();\r\n    vec  = par0.densities();\r\n    CHECK(par0 == dist_t::param_type(ends.begin(), ends.end(), vec.begin()));\r\n\r\n    CHECK(dist2.param() == dist_t::param_type(10, 1.0, 2.0, myfn));\r\n\r\n    CHECK(dist3.param() == dist_t::param_type(ilist, myfn));\r\n\r\n    typedef STD ranlux24 rng_t;\r\n    rng_t rng;\r\n    CHECK(dist0(rng) != dist0(rng, par0) || true);\r\n\r\n    CHECK(dist0.min() <= dist0.max());\r\n\r\n    CHECK(dist0 == dist0);\r\n    CHECK(!(dist0 != dist0));\r\n}\r\n\r\nstatic void tdefault() {\r\n    STD default_random_engine rng;\r\n    STD default_random_engine::result_type val = rng();\r\n    CHECK(val != rng());\r\n}\r\n\r\nvoid test_main() { // test generators\r\n    tuniform_int();\r\n    tuniform_real();\r\n    tnegative_binomial();\r\n    tweibull();\r\n    textreme();\r\n    tlognormal();\r\n    tchi_squared();\r\n    tcauchy();\r\n    tfisher_f();\r\n    tstudent_t();\r\n    tdiscrete();\r\n    tpiecewise_constant();\r\n    tpiecewise_linear();\r\n    tdefault();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/random6/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <random> C++11 header, part 6\r\n#define TEST_NAME \"<random>, part 6\"\r\n\r\n#include <math.h>\r\n#define FLOAT_TYPE IS_DOUBLE\r\n#include \"tdefs.h\"\r\n#include \"tspec_random.h\"\r\n\r\nvoid test_main() { // test random distributions\r\n    test_random();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/ratio/env.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nRUNALL_INCLUDE ..\\..\\env_minus_pure.lst\r\n"
  },
  {
    "path": "tests/tr1/tests/ratio/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <ratio> header, C++\r\n#define TEST_NAME \"<ratio>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <iostream>\r\n#include <ratio>\r\n\r\nnamespace {\r\n    typedef STD ratio<0, 2> r_0_2;\r\n    typedef STD ratio<1, 2> r_1_2;\r\n    typedef STD ratio<-1, 2> r_m1_2;\r\n    typedef STD ratio<1, -2> r_1_m2;\r\n    typedef STD ratio<-1, -2> r_m1_m2;\r\n    typedef STD ratio<4, 6> r_4_6;\r\n    typedef STD ratio<-4, 6> r_m4_6;\r\n    typedef STD ratio<4, -6> r_4_m6;\r\n    typedef STD ratio<-4, -6> r_m4_m6;\r\n\r\n    void t_ratio() { // test ratio template\r\n        CHECK_INT(r_0_2::num, 0);\r\n        CHECK_INT(r_0_2::den, 1);\r\n\r\n        CHECK_INT(r_1_2::num, 1);\r\n        CHECK_INT(r_1_2::den, 2);\r\n\r\n        CHECK_INT(r_m1_2::num, -1);\r\n        CHECK_INT(r_m1_2::den, 2);\r\n\r\n        CHECK_INT(r_1_m2::num, -1);\r\n        CHECK_INT(r_1_m2::den, 2);\r\n\r\n        CHECK_INT(r_m1_m2::num, 1);\r\n        CHECK_INT(r_m1_m2::den, 2);\r\n\r\n        CHECK_INT(r_4_6::num, 2);\r\n        CHECK_INT(r_4_6::den, 3);\r\n\r\n        CHECK_INT(r_m4_6::num, -2);\r\n        CHECK_INT(r_m4_6::den, 3);\r\n\r\n        CHECK_INT(r_4_m6::num, -2);\r\n        CHECK_INT(r_4_m6::den, 3);\r\n\r\n        CHECK_INT(r_m4_m6::num, 2);\r\n        CHECK_INT(r_m4_m6::den, 3);\r\n\r\n        CHECK_TYPE(r_m4_6::type, r_4_m6::type);\r\n    }\r\n\r\n    void t_ratio_add() { // test ratio_add template\r\n        typedef STD ratio_add<r_0_2, r_1_2>::type a_0_2_1_2;\r\n        CHECK_INT(a_0_2_1_2::num, 1);\r\n        CHECK_INT(a_0_2_1_2::den, 2);\r\n\r\n        typedef STD ratio_add<r_1_2, r_1_2>::type a_1_2_1_2;\r\n        CHECK_INT(a_1_2_1_2::num, 1);\r\n        CHECK_INT(a_1_2_1_2::den, 1);\r\n\r\n        typedef STD ratio_add<r_1_2, r_m4_6>::type a_1_2_m4_6;\r\n        CHECK_INT(a_1_2_m4_6::num, -1);\r\n        CHECK_INT(a_1_2_m4_6::den, 6);\r\n\r\n        typedef STD ratio_add<r_m1_2, r_4_6>::type a_m1_2_4_6;\r\n        CHECK_INT(a_m1_2_4_6::num, 1);\r\n        CHECK_INT(a_m1_2_4_6::den, 6);\r\n\r\n        typedef STD ratio_add<r_m1_2, r_4_6> a_m1_2_4_6_alias;\r\n        typedef STD ratio<1, 6> ans;\r\n        CHECK_TYPE(ans, a_m1_2_4_6_alias);\r\n    }\r\n\r\n    void t_ratio_subtract() { // test ratio_subtract template\r\n        typedef STD ratio_subtract<r_0_2, r_1_2>::type s_0_2_1_2;\r\n        CHECK_INT(s_0_2_1_2::num, -1);\r\n        CHECK_INT(s_0_2_1_2::den, 2);\r\n\r\n        typedef STD ratio_subtract<r_1_2, r_1_2>::type s_1_2_1_2;\r\n        CHECK_INT(s_1_2_1_2::num, 0);\r\n        CHECK_INT(s_1_2_1_2::den, 1);\r\n\r\n        typedef STD ratio_subtract<r_1_2, r_m4_6>::type s_1_2_m4_6;\r\n        CHECK_INT(s_1_2_m4_6::num, 7);\r\n        CHECK_INT(s_1_2_m4_6::den, 6);\r\n\r\n        typedef STD ratio_subtract<r_m1_2, r_4_6>::type s_m1_2_4_6;\r\n        CHECK_INT(s_m1_2_4_6::num, -7);\r\n        CHECK_INT(s_m1_2_4_6::den, 6);\r\n\r\n        typedef STD ratio_subtract<r_m1_2, r_4_6> s_m1_2_4_6_alias;\r\n        typedef STD ratio<-7, 6> ans;\r\n        CHECK_TYPE(ans, s_m1_2_4_6_alias);\r\n    }\r\n\r\n    void t_ratio_multiply() { // test ratio_multiply template\r\n        typedef STD ratio_multiply<r_0_2, r_1_2>::type m_0_2_1_2;\r\n        CHECK_INT(m_0_2_1_2::num, 0);\r\n        CHECK_INT(m_0_2_1_2::den, 1);\r\n\r\n        typedef STD ratio_multiply<r_1_2, r_1_2>::type m_1_2_1_2;\r\n        CHECK_INT(m_1_2_1_2::num, 1);\r\n        CHECK_INT(m_1_2_1_2::den, 4);\r\n\r\n        typedef STD ratio_multiply<r_1_2, r_m4_6>::type m_1_2_m4_6;\r\n        CHECK_INT(m_1_2_m4_6::num, -1);\r\n        CHECK_INT(m_1_2_m4_6::den, 3);\r\n\r\n        typedef STD ratio_multiply<r_m1_2, r_4_6>::type m_m1_2_4_6;\r\n        CHECK_INT(m_m1_2_4_6::num, -1);\r\n        CHECK_INT(m_m1_2_4_6::den, 3);\r\n\r\n        typedef STD ratio_multiply<r_m1_2, r_4_6> m_m1_2_4_6_alias;\r\n        typedef STD ratio<-1, 3> ans;\r\n        CHECK_TYPE(ans, m_m1_2_4_6_alias);\r\n    }\r\n\r\n    void t_ratio_divide() { // test ratio_divide template\r\n        typedef STD ratio_divide<r_0_2, r_1_2>::type d_0_2_1_2;\r\n        CHECK_INT(d_0_2_1_2::num, 0);\r\n        CHECK_INT(d_0_2_1_2::den, 1);\r\n\r\n        typedef STD ratio_divide<r_1_2, r_1_2>::type d_1_2_1_2;\r\n        CHECK_INT(d_1_2_1_2::num, 1);\r\n        CHECK_INT(d_1_2_1_2::den, 1);\r\n\r\n        typedef STD ratio_divide<r_1_2, r_m4_6>::type d_1_2_m4_6;\r\n        CHECK_INT(d_1_2_m4_6::num, -3);\r\n        CHECK_INT(d_1_2_m4_6::den, 4);\r\n\r\n        typedef STD ratio_divide<r_m1_2, r_4_6>::type d_m1_2_4_6;\r\n        CHECK_INT(d_m1_2_4_6::num, -3);\r\n        CHECK_INT(d_m1_2_4_6::den, 4);\r\n\r\n        typedef STD ratio_divide<r_m1_2, r_4_6> d_m1_2_4_6_alias;\r\n        typedef STD ratio<-3, 4> ans;\r\n        CHECK_TYPE(ans, d_m1_2_4_6_alias);\r\n    }\r\n\r\n    void t_compare() { // test ratio comparison templates\r\n        typedef STD ratio_equal<r_0_2, r_0_2> eq_0_2_0_2;\r\n        CHECK_INT(eq_0_2_0_2::value, true);\r\n        typedef STD ratio_not_equal<r_0_2, r_0_2> ne_0_2_0_2;\r\n        CHECK_INT(ne_0_2_0_2::value, false);\r\n        typedef STD ratio_less<r_0_2, r_0_2> lt_0_2_0_2;\r\n        CHECK_INT(lt_0_2_0_2::value, false);\r\n        typedef STD ratio_less_equal<r_0_2, r_0_2> le_0_2_0_2;\r\n        CHECK_INT(le_0_2_0_2::value, true);\r\n        typedef STD ratio_greater<r_0_2, r_0_2> gt_0_2_0_2;\r\n        CHECK_INT(gt_0_2_0_2::value, false);\r\n        typedef STD ratio_greater_equal<r_0_2, r_0_2> ge_0_2_0_2;\r\n        CHECK_INT(ge_0_2_0_2::value, true);\r\n\r\n        typedef STD ratio_equal<r_1_2, r_1_2> eq_1_2_1_2;\r\n        CHECK_INT(eq_1_2_1_2::value, true);\r\n        typedef STD ratio_not_equal<r_1_2, r_1_2> ne_1_2_1_2;\r\n        CHECK_INT(ne_1_2_1_2::value, false);\r\n        typedef STD ratio_less<r_1_2, r_1_2> lt_1_2_1_2;\r\n        CHECK_INT(lt_1_2_1_2::value, false);\r\n        typedef STD ratio_less_equal<r_1_2, r_1_2> le_1_2_1_2;\r\n        CHECK_INT(le_1_2_1_2::value, true);\r\n        typedef STD ratio_greater<r_1_2, r_1_2> gt_1_2_1_2;\r\n        CHECK_INT(gt_1_2_1_2::value, false);\r\n        typedef STD ratio_greater_equal<r_1_2, r_1_2> ge_1_2_1_2;\r\n        CHECK_INT(ge_1_2_1_2::value, true);\r\n\r\n        typedef STD ratio_equal<r_m1_2, r_m1_2> eq_m1_2_m1_2;\r\n        CHECK_INT(eq_m1_2_m1_2::value, true);\r\n        typedef STD ratio_not_equal<r_m1_2, r_m1_2> ne_m1_2_m1_2;\r\n        CHECK_INT(ne_m1_2_m1_2::value, false);\r\n        typedef STD ratio_less<r_m1_2, r_m1_2> lt_m1_2_m1_2;\r\n        CHECK_INT(lt_m1_2_m1_2::value, false);\r\n        typedef STD ratio_less_equal<r_m1_2, r_m1_2> le_m1_2_m1_2;\r\n        CHECK_INT(le_m1_2_m1_2::value, true);\r\n        typedef STD ratio_greater<r_m1_2, r_m1_2> gt_m1_2_m1_2;\r\n        CHECK_INT(gt_m1_2_m1_2::value, false);\r\n        typedef STD ratio_greater_equal<r_m1_2, r_m1_2> ge_m1_2_m1_2;\r\n        CHECK_INT(ge_m1_2_m1_2::value, true);\r\n\r\n        typedef STD ratio_equal<r_0_2, r_1_2> eq_0_2_1_2;\r\n        CHECK_INT(eq_0_2_1_2::value, false);\r\n        typedef STD ratio_not_equal<r_0_2, r_1_2> ne_0_2_1_2;\r\n        CHECK_INT(ne_0_2_1_2::value, true);\r\n        typedef STD ratio_less<r_0_2, r_1_2> lt_0_2_1_2;\r\n        CHECK_INT(lt_0_2_1_2::value, true);\r\n        typedef STD ratio_less_equal<r_0_2, r_1_2> le_0_2_1_2;\r\n        CHECK_INT(le_0_2_1_2::value, true);\r\n        typedef STD ratio_greater<r_0_2, r_1_2> gt_0_2_1_2;\r\n        CHECK_INT(gt_0_2_1_2::value, false);\r\n        typedef STD ratio_greater_equal<r_0_2, r_1_2> ge_0_2_1_2;\r\n        CHECK_INT(ge_0_2_1_2::value, false);\r\n\r\n        typedef STD ratio_equal<r_0_2, r_m1_2> eq_0_2_m1_2;\r\n        CHECK_INT(eq_0_2_m1_2::value, false);\r\n        typedef STD ratio_not_equal<r_0_2, r_m1_2> ne_0_2_m1_2;\r\n        CHECK_INT(ne_0_2_m1_2::value, true);\r\n        typedef STD ratio_less<r_0_2, r_m1_2> lt_0_2_m1_2;\r\n        CHECK_INT(lt_0_2_m1_2::value, false);\r\n        typedef STD ratio_less_equal<r_0_2, r_m1_2> le_0_2_m1_2;\r\n        CHECK_INT(le_0_2_m1_2::value, false);\r\n        typedef STD ratio_greater<r_0_2, r_m1_2> gt_0_2_m1_2;\r\n        CHECK_INT(gt_0_2_m1_2::value, true);\r\n        typedef STD ratio_greater_equal<r_0_2, r_m1_2> ge_0_2_m1_2;\r\n        CHECK_INT(ge_0_2_m1_2::value, true);\r\n\r\n        typedef STD ratio_equal<r_4_6, r_1_2> eq_4_6_1_2;\r\n        CHECK_INT(eq_4_6_1_2::value, false);\r\n        typedef STD ratio_not_equal<r_4_6, r_1_2> ne_4_6_1_2;\r\n        CHECK_INT(ne_4_6_1_2::value, true);\r\n        typedef STD ratio_less<r_4_6, r_1_2> lt_4_6_1_2;\r\n        CHECK_INT(lt_4_6_1_2::value, false);\r\n        typedef STD ratio_less_equal<r_4_6, r_1_2> le_4_6_1_2;\r\n        CHECK_INT(le_4_6_1_2::value, false);\r\n        typedef STD ratio_greater<r_4_6, r_1_2> gt_4_6_1_2;\r\n        CHECK_INT(gt_4_6_1_2::value, true);\r\n        typedef STD ratio_greater_equal<r_4_6, r_1_2> ge_4_6_1_2;\r\n        CHECK_INT(ge_4_6_1_2::value, true);\r\n\r\n        typedef STD ratio_equal<r_4_6, r_m1_2> eq_4_6_m1_2;\r\n        CHECK_INT(eq_4_6_m1_2::value, false);\r\n        typedef STD ratio_not_equal<r_4_6, r_m1_2> ne_4_6_m1_2;\r\n        CHECK_INT(ne_4_6_m1_2::value, true);\r\n        typedef STD ratio_less<r_4_6, r_m1_2> lt_4_6_m1_2;\r\n        CHECK_INT(lt_4_6_m1_2::value, false);\r\n        typedef STD ratio_less_equal<r_4_6, r_m1_2> le_4_6_m1_2;\r\n        CHECK_INT(le_4_6_m1_2::value, false);\r\n        typedef STD ratio_greater<r_4_6, r_m1_2> gt_4_6_m1_2;\r\n        CHECK_INT(gt_4_6_m1_2::value, true);\r\n        typedef STD ratio_greater_equal<r_4_6, r_m1_2> ge_4_6_m1_2;\r\n        CHECK_INT(ge_4_6_m1_2::value, true);\r\n\r\n        typedef STD ratio_equal<r_m4_6, r_1_2> eq_m4_6_1_2;\r\n        CHECK_INT(eq_m4_6_1_2::value, false);\r\n        typedef STD ratio_not_equal<r_m4_6, r_1_2> ne_m4_6_1_2;\r\n        CHECK_INT(ne_m4_6_1_2::value, true);\r\n        typedef STD ratio_less<r_m4_6, r_1_2> lt_m4_6_1_2;\r\n        CHECK_INT(lt_m4_6_1_2::value, true);\r\n        typedef STD ratio_less_equal<r_m4_6, r_1_2> le_m4_6_1_2;\r\n        CHECK_INT(le_m4_6_1_2::value, true);\r\n        typedef STD ratio_greater<r_m4_6, r_1_2> gt_m4_6_1_2;\r\n        CHECK_INT(gt_m4_6_1_2::value, false);\r\n        typedef STD ratio_greater_equal<r_m4_6, r_1_2> ge_m4_6_1_2;\r\n        CHECK_INT(ge_m4_6_1_2::value, false);\r\n\r\n        typedef STD ratio_equal<r_m4_6, r_m1_2> eq_m4_6_m1_2;\r\n        CHECK_INT(eq_m4_6_m1_2::value, false);\r\n        typedef STD ratio_not_equal<r_m4_6, r_m1_2> ne_m4_6_m1_2;\r\n        CHECK_INT(ne_m4_6_m1_2::value, true);\r\n        typedef STD ratio_less<r_m4_6, r_m1_2> lt_m4_6_m1_2;\r\n        CHECK_INT(lt_m4_6_m1_2::value, true);\r\n        typedef STD ratio_less_equal<r_m4_6, r_m1_2> le_m4_6_m1_2;\r\n        CHECK_INT(le_m4_6_m1_2::value, true);\r\n        typedef STD ratio_greater<r_m4_6, r_m1_2> gt_m4_6_m1_2;\r\n        CHECK_INT(gt_m4_6_m1_2::value, false);\r\n        typedef STD ratio_greater_equal<r_m4_6, r_m1_2> ge_m4_6_m1_2;\r\n        CHECK_INT(ge_m4_6_m1_2::value, false);\r\n    }\r\n\r\n    void t_constants() {\r\n#if 1000000 <= INTMAX_MAX / 1000000000 / 1000000000\r\n        typedef STD ratio<1, (long long) 1000000 * 1000000000 * 1000000000> yocto_val;\r\n#endif // 1000000 <= INTMAX_MAX / 1000000000 / 1000000000\r\n\r\n#if 1000 <= INTMAX_MAX / 1000000000 / 1000000000\r\n        typedef STD ratio<1, (long long) 1000 * 1000000000 * 1000000000> zepto_val;\r\n#endif // 1000 <= INTMAX_MAX / 1000000000000000000\r\n\r\n        typedef STD ratio<1, (long long) 1000000000 * 1000000000> atto_val;\r\n        typedef STD ratio<1, (long long) 1000000 * 1000000000> femto_val;\r\n        typedef STD ratio<1, (long long) 1000 * 1000000000> pico_val;\r\n        typedef STD ratio<1, 1000000000> nano_val;\r\n        typedef STD ratio<1, 1000000> micro_val;\r\n        typedef STD ratio<1, 1000> milli_val;\r\n        typedef STD ratio<1, 100> centi_val;\r\n        typedef STD ratio<1, 10> deci_val;\r\n        typedef STD ratio<10, 1> deca_val;\r\n        typedef STD ratio<100, 1> hecto_val;\r\n        typedef STD ratio<1000, 1> kilo_val;\r\n        typedef STD ratio<1000000, 1> mega_val;\r\n        typedef STD ratio<1000000000, 1> giga_val;\r\n        typedef STD ratio<(long long) 1000 * 1000000000, 1> tera_val;\r\n        typedef STD ratio<(long long) 1000000 * 1000000000, 1> peta_val;\r\n        typedef STD ratio<(long long) 1000000000 * 1000000000, 1> exa_val;\r\n\r\n#if 1000 <= INTMAX_MAX / 1000000000 / 1000000000\r\n        typedef STD ratio<(long long) 1000 * 1000000000 * 1000000000, 1> zetta_val;\r\n#endif // 1000 <= INTMAX_MAX / 1000000000 * 1000000000\r\n\r\n#if 1000000 <= INTMAX_MAX / 1000000000 / 1000000000\r\n        typedef STD ratio<(long long) 1000000 * 1000000000 * 1000000000, 1> yotta_val;\r\n#endif // 1000000 <= INTMAX_MAX / 1000000000000000000\r\n\r\n#if 1000000 <= INTMAX_MAX / 1000000000 / 1000000000\r\n        typedef STD ratio_equal<yocto_val, STD yocto> yocto_test;\r\n        CHECK_INT(yocto_test::value, true);\r\n#endif // 1000000 <= INTMAX_MAX / 1000000000 / 1000000000\r\n\r\n#if 1000 <= INTMAX_MAX / 1000000000 / 1000000000\r\n        typedef STD ratio_equal<zepto_val, STD zepto> zepto_test;\r\n        CHECK_INT(zepto_test::value, true);\r\n#endif // 1000 <= INTMAX_MAX / 1000000000 / 1000000000\r\n\r\n        typedef STD ratio_equal<atto_val, STD atto> atto_test;\r\n        CHECK_INT(atto_test::value, true);\r\n\r\n        typedef STD ratio_equal<femto_val, STD femto> femto_test;\r\n        CHECK_INT(femto_test::value, true);\r\n\r\n        typedef STD ratio_equal<pico_val, STD pico> pico_test;\r\n        CHECK_INT(pico_test::value, true);\r\n\r\n        typedef STD ratio_equal<nano_val, STD nano> nano_test;\r\n        CHECK_INT(nano_test::value, true);\r\n\r\n        typedef STD ratio_equal<micro_val, STD micro> micro_test;\r\n        CHECK_INT(micro_test::value, true);\r\n\r\n        typedef STD ratio_equal<milli_val, STD milli> milli_test;\r\n        CHECK_INT(milli_test::value, true);\r\n\r\n        typedef STD ratio_equal<centi_val, STD centi> centi_test;\r\n        CHECK_INT(centi_test::value, true);\r\n\r\n        typedef STD ratio_equal<deci_val, STD deci> deci_test;\r\n        CHECK_INT(deci_test::value, true);\r\n\r\n        typedef STD ratio_equal<deca_val, STD deca> deca_test;\r\n        CHECK_INT(deca_test::value, true);\r\n\r\n        typedef STD ratio_equal<hecto_val, STD hecto> hecto_test;\r\n        CHECK_INT(hecto_test::value, true);\r\n\r\n        typedef STD ratio_equal<kilo_val, STD kilo> kilo_test;\r\n        CHECK_INT(kilo_test::value, true);\r\n\r\n        typedef STD ratio_equal<mega_val, STD mega> mega_test;\r\n        CHECK_INT(mega_test::value, true);\r\n\r\n        typedef STD ratio_equal<giga_val, STD giga> giga_test;\r\n        CHECK_INT(giga_test::value, true);\r\n\r\n        typedef STD ratio_equal<tera_val, STD tera> tera_test;\r\n        CHECK_INT(tera_test::value, true);\r\n\r\n        typedef STD ratio_equal<peta_val, STD peta> peta_test;\r\n        CHECK_INT(peta_test::value, true);\r\n\r\n        typedef STD ratio_equal<exa_val, STD exa> exa_test;\r\n        CHECK_INT(exa_test::value, true);\r\n\r\n#if 1000 <= INTMAX_MAX / 1000000000000000000\r\n        typedef STD ratio_equal<zetta_val, STD zetta> zetta_test;\r\n        CHECK_INT(zetta_test::value, true);\r\n#endif // 1000 <= INTMAX_MAX / 1000000000000000000\r\n\r\n#if 1000000 <= INTMAX_MAX / 1000000000000000000\r\n        typedef STD ratio_equal<yotta_val, STD yotta> yotta_test;\r\n        CHECK_INT(yotta_test::value, true);\r\n#endif // 1000000 <= INTMAX_MAX / 1000000000000000000\r\n    }\r\n} // unnamed namespace\r\n\r\nvoid test_main() { // test header <ratio>\r\n    t_ratio();\r\n    t_ratio_add();\r\n    t_ratio_subtract();\r\n    t_ratio_multiply();\r\n    t_ratio_divide();\r\n    t_compare();\r\n    t_constants();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/regex1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <regex> header, part 1\r\n#define TEST_NAME \"<regex>, part 1\"\r\n\r\n#include \"tdefs.h\"\r\n#include <regex>\r\n#include <stddef.h>\r\n#include <string.h>\r\n\r\n#define ADD_FACET(loc, pfac) STD locale(loc, pfac)\r\n\r\n#ifdef WIDE\r\n#define T(x)                     L##x\r\n#define xlen(x)                  wcslen(x)\r\n#define CHECKSTR(left, right)    CHECK_WSTR(left, right)\r\n#define CHECKSTRING(left, right) CHECK_WSTRING(left, right)\r\ntypedef wchar_t CHR;\r\ntypedef STD wstring STDString;\r\n\r\n#else // defined WIDE\r\n#define T(x)                     x\r\n#define xlen(x)                  CSTD strlen(x)\r\n#define CHECKSTR(left, right)    CHECK_STR(left, right)\r\n#define CHECKSTRING(left, right) CHECK_STRING(left, right)\r\ntypedef char CHR;\r\ntypedef STD string STDString;\r\n#endif // defined WIDE\r\n\r\ntypedef STD regex_traits<CHR> MyTr;\r\ntypedef STD sub_match<const CHR*> MySm;\r\ntypedef STD match_results<const CHR*> MyMr;\r\ntypedef STD basic_regex<CHR> MyRgx;\r\n\r\nstatic STD locale loc;\r\nstatic STD locale cloc;\r\n\r\n// static data\r\nstatic const STD regex_constants::syntax_option_type synflags[] = {\r\n    // array of flag values\r\n    STD regex_constants::ECMAScript,\r\n    STD regex_constants::basic,\r\n    STD regex_constants::extended,\r\n    STD regex_constants::awk,\r\n    STD regex_constants::grep,\r\n    STD regex_constants::egrep,\r\n    STD regex_constants::icase,\r\n    STD regex_constants::nosubs,\r\n    STD regex_constants::optimize,\r\n    STD regex_constants::collate,\r\n};\r\n\r\nstatic const STD regex_constants::match_flag_type mtchflags[] = {\r\n    // array of flag values\r\n    STD regex_constants::match_default,\r\n    STD regex_constants::match_not_bol,\r\n    STD regex_constants::match_not_eol,\r\n    STD regex_constants::match_not_bow,\r\n    STD regex_constants::match_not_eow,\r\n    STD regex_constants::match_any,\r\n    STD regex_constants::match_not_null,\r\n    STD regex_constants::match_continuous,\r\n    STD regex_constants::match_prev_avail,\r\n    STD regex_constants::format_default,\r\n    STD regex_constants::format_sed,\r\n    STD regex_constants::format_no_copy,\r\n    STD regex_constants::format_first_only,\r\n};\r\n\r\nstatic const STD regex_constants::error_type errflags[] = {\r\n    // array of flag values\r\n    STD regex_constants::error_collate,\r\n    STD regex_constants::error_ctype,\r\n    STD regex_constants::error_escape,\r\n    STD regex_constants::error_backref,\r\n    STD regex_constants::error_brack,\r\n    STD regex_constants::error_paren,\r\n    STD regex_constants::error_brace,\r\n    STD regex_constants::error_badbrace,\r\n    STD regex_constants::error_range,\r\n    STD regex_constants::error_space,\r\n    STD regex_constants::error_badrepeat,\r\n    STD regex_constants::error_complexity,\r\n    STD regex_constants::error_stack,\r\n};\r\n\r\nstatic const CHR* const class_names[] = {\r\n    // array of character class names\r\n    T(\"d\"),\r\n    T(\"w\"),\r\n    T(\"s\"),\r\n    T(\"alnum\"),\r\n    T(\"alpha\"),\r\n    T(\"blank\"),\r\n    T(\"cntrl\"),\r\n    T(\"digit\"),\r\n    T(\"graph\"),\r\n    T(\"lower\"),\r\n    T(\"print\"),\r\n    T(\"punct\"),\r\n    T(\"space\"),\r\n    T(\"upper\"),\r\n    T(\"xdigit\"),\r\n};\r\n\r\ntemplate <class T>\r\nstruct Myalloc {\r\n    typedef T value_type;\r\n\r\n    Myalloc() {}\r\n\r\n    template <class U>\r\n    Myalloc(const Myalloc<U>&) {}\r\n\r\n    T* allocate(size_t n) {\r\n        return STD allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* p, size_t n) {\r\n        STD allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class U>\r\n    bool operator==(const Myalloc<U>&) const {\r\n        return true;\r\n    }\r\n\r\n    template <class U>\r\n    bool operator!=(const Myalloc<U>&) const {\r\n        return false;\r\n    }\r\n};\r\n\r\nstruct Myxctype : public STD ctype<CHR> { // degenerate locale facet\r\nprotected:\r\n    CHR do_tolower(CHR) const { // convert to lowercase\r\n        return T('a');\r\n    }\r\n\r\n    const CHR* do_tolower(CHR*, const CHR*) const { // convert to lowercase\r\n        return T(\"s\");\r\n    }\r\n};\r\n\r\nstruct Myxcollate : public STD collate<CHR> { // degenerate locale facet\r\npublic:\r\n    STDString do_transform(const CHR*, const CHR*) const { // generate comparison key\r\n        return T(\"ABC\");\r\n    }\r\n};\r\n\r\nstatic void test_traits() { // test template regex_traits\r\n    MyTr::char_type* p_char   = (CHR*) nullptr;\r\n    MyTr::size_type* p_size   = (CSTD size_t*) nullptr;\r\n    MyTr::string_type* p_str  = (STD basic_string<CHR>*) nullptr;\r\n    MyTr::locale_type* p_loc  = (STD locale*) nullptr;\r\n    MyTr::char_class_type chr = (MyTr::char_class_type) 0;\r\n\r\n    p_char = p_char; // to quiet diagnostics\r\n    p_size = p_size;\r\n    p_str  = p_str;\r\n    p_loc  = p_loc;\r\n    chr    = chr;\r\n\r\n    MyTr v0;\r\n    CHR carr[]  = T(\"abc\");\r\n    CHR carr0[] = T(\"ABC\");\r\n    CHR carr1[] = T(\"def\");\r\n    CHECK_INT(MyTr::length(carr), xlen(carr));\r\n    CHECK_INT(v0.translate('a'), v0.translate('a'));\r\n    CHECK_INT(v0.translate_nocase('a'), v0.translate_nocase('A'));\r\n    CHECKSTRING(v0.transform(carr, carr + xlen(carr)), v0.transform(carr, carr + xlen(carr)));\r\n    CHECK(v0.transform(carr, carr + xlen(carr)) != v0.transform(carr0, carr0 + xlen(carr0)));\r\n    CHECK(v0.transform(carr, carr + xlen(carr)) < v0.transform(carr1, carr1 + xlen(carr1)));\r\n#ifndef _M_CEE_PURE\r\n    CHECK(v0.transform_primary(carr, carr + xlen(carr)) == v0.transform_primary(carr, carr + xlen(carr)));\r\n    CHECK(v0.transform_primary(carr, carr + xlen(carr)) != v0.transform_primary(carr0, carr0 + xlen(carr0)));\r\n    CHECK(v0.transform_primary(carr0, carr0 + xlen(carr0)) < v0.transform_primary(carr1, carr1 + xlen(carr1)));\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\n    for (size_t i = 0; i < sizeof(class_names) / sizeof(*class_names); ++i) {\r\n        CHECK(v0.lookup_classname(class_names[i], class_names[i] + xlen(class_names[i])) != 0);\r\n    }\r\n    CHECK(v0.lookup_classname(carr, carr) == 0);\r\n    CHECK(v0.lookup_collatename(carr, carr + xlen(carr)) == STDString());\r\n    CHECK(v0.isctype('0', v0.lookup_classname(class_names[0], class_names[0] + xlen(class_names[0]))));\r\n    CHECK_INT(v0.value('7', 8), 7);\r\n    CHECK_INT(v0.value('9', 8), -1);\r\n    CHECK_INT(v0.value('9', 10), 9);\r\n    CHECK_INT(v0.value('a', 10), -1);\r\n    CHECK_INT(v0.value('a', 16), 10);\r\n    MyTr v1;\r\n    CHECK(v1.getloc() == loc);\r\n    CHECK(v1.imbue(cloc) == loc);\r\n    CHECK(v1.getloc() == cloc);\r\n\r\n    STD locale loc_myctype = ADD_FACET(loc, new Myxctype);\r\n    v1.imbue(loc_myctype);\r\n    CHECK_INT(v1.translate_nocase('b'), 'a');\r\n\r\n    STD locale loc_mycollate = ADD_FACET(loc, new Myxcollate);\r\n    v1.imbue(loc_mycollate);\r\n    CHECKSTR(v1.transform(carr, carr + xlen(carr)).c_str(), T(\"ABC\"));\r\n}\r\n\r\nstruct MyTraits : STD regex_traits<CHR> { // degenerate traits class\r\n    CHR translate(CHR ch) const { // generate unnatural collation order\r\n        return ch == T('a') ? T('c') : ch == T('c') ? T('a') : ch == T('d') ? T('e') : ch == T('f') ? T('e') : ch;\r\n    }\r\n};\r\n\r\ntypedef STD basic_regex<CHR, MyTraits> MyxRgx;\r\n\r\nstruct fwdit { // forward iterator that wraps char *\r\n    using iterator_category = STD forward_iterator_tag;\r\n    using value_type        = CHR;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = CHR*;\r\n    using reference         = CHR&;\r\n\r\n    fwdit() : ptr(nullptr) { // construct\r\n    }\r\n\r\n    fwdit(CHR* p) : ptr(p) { // construct from char *\r\n    }\r\n\r\n    bool operator==(const fwdit& other) const { // compare for equality\r\n        return ptr == other.ptr;\r\n    }\r\n\r\n    bool operator!=(const fwdit& other) const { // compare for inequality\r\n        return !(*this == other);\r\n    }\r\n\r\n    CHR& operator*() const { // dereference\r\n        return *ptr;\r\n    }\r\n\r\n    fwdit& operator++() { // preincrement\r\n        ++ptr;\r\n        return *this;\r\n    }\r\n\r\n    fwdit operator++(int) { // postincrement\r\n        fwdit res = *this;\r\n        ++ptr;\r\n        return res;\r\n    }\r\n\r\nprivate:\r\n    CHR* ptr;\r\n};\r\n\r\nstruct bidit { // bidirectional iterator that wraps const char *\r\n    using iterator_category = STD bidirectional_iterator_tag;\r\n    using value_type        = CHR;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = CHR*;\r\n    using reference         = CHR&;\r\n\r\n    bidit() : ptr(nullptr) { // construct\r\n    }\r\n\r\n    bidit(const CHR* p) : ptr(p) { // construct from pointer\r\n    }\r\n\r\n    bool operator==(const bidit& other) const { // compare for equality\r\n        return ptr == other.ptr;\r\n    }\r\n\r\n    bool operator!=(const bidit& other) const { // compare for inequality\r\n        return !(*this == other);\r\n    }\r\n\r\n    const CHR& operator*() const { // dereference\r\n        return *ptr;\r\n    }\r\n\r\n    bidit& operator++() { // preincrement\r\n        ++ptr;\r\n        return *this;\r\n    }\r\n\r\n    bidit operator++(int) { // postincrement\r\n        bidit res = *this;\r\n        ++ptr;\r\n        return res;\r\n    }\r\n\r\n    bidit& operator--() { // predecrement\r\n        --ptr;\r\n        return *this;\r\n    }\r\n\r\n    bidit operator--(int) { // postdecrement\r\n        bidit res = *this;\r\n        --ptr;\r\n        return res;\r\n    }\r\n\r\nprivate:\r\n    const CHR* ptr;\r\n};\r\n\r\nstatic void test_regex() { // test template basic_regex\r\n    MyxRgx::value_type* p_char = (CHR*) nullptr;\r\n    MyxRgx::flag_type* p_flag  = (MyxRgx::flag_type*) nullptr;\r\n    MyxRgx::locale_type* p_loc = (MyTraits::locale_type*) nullptr;\r\n    MyxRgx::string_type* p_str = (MyTraits::string_type*) nullptr;\r\n    MyxRgx::traits_type* p_tr  = (MyTraits*) nullptr;\r\n\r\n    p_char = p_char; // to quiet diagnostics\r\n    p_flag = p_flag;\r\n    p_loc  = p_loc;\r\n    p_str  = p_str;\r\n    p_tr   = p_tr;\r\n\r\n    CHECK_INT(MyxRgx::icase, STD regex_constants::icase);\r\n    CHECK_INT(MyxRgx::nosubs, STD regex_constants::nosubs);\r\n    CHECK_INT(MyxRgx::optimize, STD regex_constants::optimize);\r\n    CHECK_INT(MyxRgx::collate, STD regex_constants::collate);\r\n    CHECK_INT(MyxRgx::ECMAScript, STD regex_constants::ECMAScript);\r\n    CHECK_INT(MyxRgx::basic, STD regex_constants::basic);\r\n    CHECK_INT(MyxRgx::extended, STD regex_constants::extended);\r\n    CHECK_INT(MyxRgx::awk, STD regex_constants::awk);\r\n    CHECK_INT(MyxRgx::grep, STD regex_constants::grep);\r\n    CHECK_INT(MyxRgx::egrep, STD regex_constants::egrep);\r\n\r\n    MyRgx r0;\r\n    CHECK_INT(r0.flags(), 0);\r\n    CHECK_INT(r0.mark_count(), 0);\r\n\r\n    MyRgx r1(T(\"a\"), MyRgx::icase);\r\n    CHECK_INT(r1.flags(), MyRgx::icase);\r\n    CHECK_INT(r1.mark_count(), 0);\r\n\r\n#if NO_EXCEPTIONS\r\n#else // NO_EXCEPTIONS\r\n    bool ok = false;\r\n    try { // test exception for invalid expression\r\n        MyRgx r1x(T(\"a{\"));\r\n    } catch (const STD regex_error&) { // handle invalid expression\r\n        ok = true;\r\n    }\r\n    CHECK_MSG(\"basic_regex(const char *) throws regex_error on error\", ok);\r\n#endif // NO_EXCEPTIONS\r\n\r\n    MyRgx r2(T(\"(a)bcd\"), 3, MyRgx::icase);\r\n    CHECK_INT(r2.flags(), MyRgx::icase);\r\n    CHECK_INT(r2.mark_count(), 1);\r\n\r\n#if NO_EXCEPTIONS\r\n#else // NO_EXCEPTIONS\r\n    ok = false;\r\n    try { // test exception for invalid expression\r\n        MyRgx r2x(T(\"a{1}\"), 2);\r\n    } catch (const STD regex_error&) { // handle invalid expression\r\n        ok = true;\r\n    }\r\n    CHECK_MSG(\"basic_regex(const char *, size_t) throws regex_error on error\", ok);\r\n#endif // NO_EXCEPTIONS\r\n\r\n    MyRgx r3(r2);\r\n    CHECK_INT(r3.flags(), MyRgx::icase);\r\n    CHECK_INT(r3.mark_count(), 1);\r\n\r\n    STDString arg(T(\"((d(e))f)\"));\r\n    MyRgx r4(arg, (MyRgx::flag_type) (MyRgx::icase | MyRgx::extended));\r\n    CHECK_INT(r4.flags(), MyRgx::icase | MyRgx::extended);\r\n    CHECK_INT(r4.mark_count(), 3);\r\n\r\n#if NO_EXCEPTIONS\r\n#else // NO_EXCEPTIONS\r\n    ok = false;\r\n    try { // test exception for invalid expression\r\n        STDString arg2(T(\"((d(e))f\"));\r\n        MyRgx r4x(arg2);\r\n    } catch (const STD regex_error&) { // handle invalid expression\r\n        ok = true;\r\n    }\r\n    CHECK_MSG(\"basic_regex(string) throws regex_error on error\", ok);\r\n#endif // NO_EXCEPTIONS\r\n\r\n    CHR carr[] = T(\"a{1}\");\r\n    fwdit begin(carr);\r\n    fwdit end(carr + xlen(carr));\r\n    MyRgx r5(begin, end);\r\n    CHECK_INT(r5.flags(), MyRgx::ECMAScript);\r\n    CHECK_INT(r5.mark_count(), 0);\r\n\r\n#if NO_EXCEPTIONS\r\n#else // NO_EXCEPTIONS\r\n    ok = false;\r\n    try { // test exception for invalid expression\r\n        fwdit endx(carr + xlen(carr) - 1);\r\n        MyRgx r5x(begin, endx);\r\n    } catch (const STD regex_error&) { // handle invalid expression\r\n        ok = true;\r\n    }\r\n    CHECK_MSG(\"basic_regex(iter, iter) throws regex_error on error\", ok);\r\n#endif // NO_EXCEPTIONS\r\n\r\n    r4 = r1;\r\n    CHECK_INT(r4.flags(), MyRgx::icase);\r\n    CHECK_INT(r4.mark_count(), 0);\r\n\r\n    r4 = T(\"a(b)\");\r\n    CHECK_INT(r4.flags(), MyRgx::ECMAScript);\r\n    CHECK_INT(r4.mark_count(), 1);\r\n\r\n    r4 = STDString(T(\"(a)(b)\"));\r\n    CHECK_INT(r4.flags(), MyRgx::ECMAScript);\r\n    CHECK_INT(r4.mark_count(), 2);\r\n\r\n    r5.assign(r4);\r\n    CHECK_INT(r5.flags(), MyRgx::ECMAScript);\r\n    CHECK_INT(r5.mark_count(), 2);\r\n\r\n    r5.assign(T(\"a(b)\"));\r\n    CHECK_INT(r5.flags(), MyRgx::ECMAScript);\r\n    CHECK_INT(r5.mark_count(), 1);\r\n\r\n    r5.assign(T(\"a(b)\"), 1, MyRgx::extended);\r\n    CHECK_INT(r5.flags(), MyRgx::extended);\r\n    CHECK_INT(r5.mark_count(), 0);\r\n\r\n    r5.assign(STDString(T(\"(b)\")), MyRgx::awk);\r\n    CHECK_INT(r5.flags(), MyRgx::awk);\r\n    CHECK_INT(r5.mark_count(), 1);\r\n\r\n    CHECK(r5.getloc() == loc);\r\n    CHECK(r5.imbue(cloc) == loc);\r\n    CHECK(r5.getloc() == cloc);\r\n\r\n    r1.swap(r2);\r\n    CHECK_INT(r1.flags(), MyRgx::icase);\r\n    CHECK_INT(r1.mark_count(), 1);\r\n    CHECK_INT(r2.flags(), MyRgx::icase);\r\n    CHECK_INT(r2.mark_count(), 0);\r\n\r\n    STD swap(r1, r2);\r\n    CHECK_INT(r1.flags(), MyRgx::icase);\r\n    CHECK_INT(r1.mark_count(), 0);\r\n    CHECK_INT(r2.flags(), MyRgx::icase);\r\n    CHECK_INT(r2.mark_count(), 1);\r\n\r\n    {\r\n        STD initializer_list<CHR> init{'(', '(', 'd', '(', 'e', ')', ')', 'f', ')'};\r\n        MyRgx r11(init, (MyRgx::flag_type) (MyRgx::icase | MyRgx::extended));\r\n        CHECK_INT(r11.flags(), MyRgx::icase | MyRgx::extended);\r\n        CHECK_INT(r11.mark_count(), 3);\r\n\r\n        STD initializer_list<CHR> init2{'(', 'b', ')'};\r\n        r11.assign(init2, MyRgx::awk);\r\n        CHECK_INT(r11.flags(), MyRgx::awk);\r\n        CHECK_INT(r11.mark_count(), 1);\r\n\r\n        r11 = init;\r\n        CHECK_INT(r11.flags(), MyRgx::ECMAScript);\r\n        CHECK_INT(r11.mark_count(), 3);\r\n    }\r\n\r\n    {\r\n        MyRgx r0x;\r\n        CHECK_INT(r0x.flags(), 0);\r\n        CHECK_INT(r0x.mark_count(), 0);\r\n\r\n        MyRgx r1x(T(\"a\"), MyRgx::icase);\r\n        CHECK_INT(r1x.flags(), MyRgx::icase);\r\n        CHECK_INT(r1x.mark_count(), 0);\r\n\r\n        MyRgx r2x(T(\"a\"), MyRgx::icase);\r\n        r2x = STD move(r0x);\r\n        CHECK_INT(r2x.flags(), 0);\r\n        CHECK_INT(r2x.mark_count(), 0);\r\n\r\n        MyRgx r3x(STD move(r1x));\r\n        CHECK_INT(r3x.flags(), MyRgx::icase);\r\n        CHECK_INT(r3x.mark_count(), 0);\r\n\r\n        r0x.assign(STD move(r3x));\r\n        CHECK_INT(r0x.flags(), MyRgx::icase);\r\n        CHECK_INT(r0x.mark_count(), 0);\r\n    }\r\n}\r\n\r\nstatic void test_match_results() { // test template match_results\r\n    MySm::value_type* p_sval       = (CHR*) nullptr;\r\n    MySm::difference_type* p_sdiff = (CSTD ptrdiff_t*) nullptr;\r\n    MySm::iterator s_iter          = (CHR*) nullptr;\r\n    MySm::string_type* p_sstr      = (STD basic_string<CHR>*) nullptr;\r\n\r\n    p_sval  = p_sval; // to quiet diagnostics\r\n    p_sdiff = p_sdiff;\r\n    s_iter  = s_iter;\r\n    p_sstr  = p_sstr;\r\n\r\n    MySm sm;\r\n    MyMr::value_type* p_val    = (MySm*) nullptr;\r\n    MyMr::const_reference cref = sm;\r\n    MyMr::reference ref        = sm;\r\n    MyMr::const_iterator citer;\r\n    MyMr::iterator* p_iter        = (MyMr::const_iterator*) nullptr;\r\n    MyMr::difference_type* p_diff = (MySm::difference_type*) nullptr;\r\n    MyMr::size_type* p_size       = (CSTD size_t*) nullptr;\r\n    MyMr::allocator_type* p_alloc = (STD allocator<MySm>*) nullptr;\r\n    MyMr::char_type* p_char       = (MySm::value_type*) nullptr;\r\n    MyMr::string_type* p_str      = (STD basic_string<CHR>*) nullptr;\r\n\r\n    p_val = p_val; // to quiet diagnostics\r\n    (void) citer;\r\n    if (cref.length() == ref.length()) {\r\n        p_iter = p_iter;\r\n    }\r\n    p_diff  = p_diff;\r\n    p_size  = p_size;\r\n    p_alloc = p_alloc;\r\n    p_char  = p_char;\r\n    p_str   = p_str;\r\n\r\n    MyMr mr;\r\n    CHECK_INT(mr.ready(), false);\r\n    CHECK_INT(mr.size(), 0);\r\n    CHECK(mr.empty());\r\n    CHECKSTRING(mr.str(), STDString());\r\n    CHECK_INT(mr.ready(), false);\r\n    CHECK(!mr[0].matched);\r\n    CHECK_PTR(mr[0].first, mr[0].second);\r\n\r\n    STD allocator<MySm> alloc;\r\n    MyMr mr1(alloc);\r\n    CHECK_INT(mr1.size(), 0);\r\n    CHECK(mr1.empty());\r\n    CHECKSTRING(mr1.str(), STDString());\r\n    CHECK(mr1.get_allocator() == alloc);\r\n\r\n    MyRgx rgx(T(\"c(a*)|(b)\"));\r\n    CHR carr[] = T(\"xcaaay\");\r\n    CHECK(STD regex_search(carr, mr, rgx));\r\n\r\n    MyMr mr2(mr);\r\n    CHECK(!mr2.empty());\r\n    CHECK_INT(mr2.size(), 3);\r\n\r\n    CHECK(mr[0].matched);\r\n    CHECK_INT(mr.ready(), true);\r\n    CHECK_PTR(mr[0].first, carr + 1);\r\n    CHECK_PTR(mr[0].second, carr + 5);\r\n    CHECK_INT(mr.length(), 4);\r\n    CHECK_INT(mr.length(0), 4);\r\n    CHECK_INT(mr.position(), 1);\r\n    CHECK_INT(mr.position(0), 1);\r\n    CHECKSTR(mr.str().c_str(), T(\"caaa\"));\r\n    CHECKSTR(mr.str(0).c_str(), T(\"caaa\"));\r\n    CHECK(mr[1].matched);\r\n    CHECK_PTR(mr[1].first, carr + 2);\r\n    CHECK_PTR(mr[1].second, carr + 5);\r\n    CHECK_INT(mr.length(1), 3);\r\n    CHECK_INT(mr.position(1), 2);\r\n    CHECK(mr.str(1) == T(\"aaa\"));\r\n    CHECK(!mr[2].matched);\r\n    CHECK_PTR(mr[2].first, carr + 6);\r\n    CHECK_PTR(mr[2].second, carr + 6);\r\n    CHECK_INT(mr.length(2), 0);\r\n    CHECK_INT(mr.position(2), 6);\r\n    CHECKSTR(mr.str(2).c_str(), T(\"\"));\r\n    const MySm& pfx = mr.prefix();\r\n    CHECK(pfx.matched);\r\n    CHECK_PTR(pfx.first, carr);\r\n    CHECK_PTR(pfx.second, carr + 1);\r\n    const MySm& sfx = mr.suffix();\r\n    CHECK(sfx.matched);\r\n    CHECK_PTR(sfx.first, carr + 5);\r\n    CHECK_PTR(sfx.second, carr + 6);\r\n\r\n    MyMr::iterator iter = mr.begin();\r\n    CHECK(iter != mr.end());\r\n    CHECK(*iter++ == mr[0]);\r\n    CHECK(*iter++ == mr[1]);\r\n    CHECK(*iter++ == mr[2]);\r\n    CHECK(iter == mr.end());\r\n\r\n    iter = mr.cbegin();\r\n    CHECK(iter != mr.cend());\r\n    mr.swap(mr1);\r\n    CHECK_INT(mr.size(), 0);\r\n    CHECK(mr.empty());\r\n    CHECKSTRING(mr.str(), STDString());\r\n    CHECK_INT(mr1.size(), 3);\r\n    CHECK(!mr1.empty());\r\n    CHECKSTR(mr1.str().c_str(), T(\"caaa\"));\r\n\r\n    MyMr mr3(STD move(mr1));\r\n    CHECK(!mr3.empty());\r\n    CHECKSTR(mr3.str().c_str(), T(\"caaa\"));\r\n\r\n    MyMr mr4;\r\n    mr4 = STD move(mr3);\r\n    CHECK(!mr4.empty());\r\n    CHECKSTR(mr4.str().c_str(), T(\"caaa\"));\r\n}\r\n\r\nstatic void test_format() { // test format functions in template match_results\r\n    CHR chr[100];\r\n    MyRgx r1(T(\"(ab)(bc)(cd)(de)(ef)(fg)(gh)(hi)(ij)(jk)\"));\r\n    MyMr mr;\r\n    CHECK(STD regex_search(T(\"xabbccddeeffgghhiijjky\"), mr, r1));\r\n\r\n    fwdit out(chr);\r\n    typedef STD basic_string<char, STD char_traits<char>, Myalloc<char>> MyString;\r\n    MyString fmt                     = T(\"|$&|$0|$$|$`|$'|$10$9$8$7$6$5$4$3$2$1|$11|\");\r\n    const CHR* rslt                  = T(\"|abbccddeeffgghhiijjk|$0|\") T(\"$|x|y|jkijhighfgefdecdbcab||\");\r\n    const MyMr::char_type* fmt_first = fmt.c_str();\r\n    fwdit res                        = mr.format(out, fmt_first, fmt_first + fmt.size());\r\n    *res                             = '\\0';\r\n\r\n    CHECKSTR(chr, rslt);\r\n    MyString str = mr.format(fmt);\r\n    CHECKSTR(str.c_str(), rslt);\r\n\r\n    out  = chr;\r\n    fmt  = T(\"|&|\\\\0|\\\\&|\\\\9\\\\8\\\\7\\\\6\\\\5\\\\4\\\\3\\\\2\\\\1|\\\\10\\\\\\\\1|\");\r\n    rslt = T(\"|abbccddeeffgghhiijjk|abbccddeeffgghhiijjk|\") T(\"&|ijhighfgefdecdbcab|ab0\\\\1|\");\r\n    res  = mr.format(out, fmt, STD regex_constants::format_sed);\r\n    *res = '\\0';\r\n    CHECKSTR(chr, rslt);\r\n    str = mr.format(fmt, STD regex_constants::format_sed);\r\n    CHECKSTR(str.c_str(), rslt);\r\n}\r\n\r\ntypedef STD regex_iterator<bidit> MyIter;\r\ntypedef STD regex_token_iterator<bidit> MyTokIter;\r\n\r\nstatic void test_regex_iterator() { // test template regex_iterator\r\n    const CHR* rgx = T(\"a\");\r\n    bidit rgxbegin(rgx);\r\n    bidit rgxend(rgx + xlen(rgx));\r\n    const CHR* chr = T(\"ababab\");\r\n    bidit begin(chr);\r\n    bidit end(chr + xlen(chr));\r\n\r\n    MyIter::regex_type re(rgxbegin, rgxend);\r\n    MyIter iter(begin, end, re);\r\n    CHECK(iter != MyIter());\r\n    CHECK_INT(iter->position(0), 0);\r\n    CHECK_INT(iter->length(0), 1);\r\n    MyIter iter1(iter);\r\n    STD match_results<bidit> mr(*++iter1);\r\n    CHECK_INT(mr.position(0), 2);\r\n    CHECK_INT(mr.length(0), 1);\r\n    iter = iter1;\r\n    iter++;\r\n    mr = *iter++;\r\n    CHECK_INT(mr.position(0), 4);\r\n    CHECK_INT(mr.length(0), 1);\r\n    CHECK(iter == MyIter());\r\n\r\n    MyIter::regex_type* p_rgx       = (STD basic_regex<CHR>*) nullptr;\r\n    MyIter::value_type* p_val       = (STD match_results<bidit>*) nullptr;\r\n    MyIter::difference_type* p_dif  = (CSTD ptrdiff_t*) nullptr;\r\n    MyIter::pointer ptr             = (STD match_results<bidit>*) nullptr;\r\n    MyIter::reference ref           = mr;\r\n    STD forward_iterator_tag* p_tag = (MyIter::iterator_category*) nullptr;\r\n\r\n    p_rgx = p_rgx; // to quiet diagnostics\r\n    p_val = p_val;\r\n    p_dif = p_dif;\r\n    ptr   = ptr;\r\n    if (ref.size()) {\r\n        p_tag = p_tag;\r\n    }\r\n}\r\n\r\nstatic void test_regex_token_iterator() { // test template regex_token_iterator\r\n    const CHR* rgx = T(\"a(b)\");\r\n    bidit rgxbegin(rgx);\r\n    bidit rgxend(rgx + xlen(rgx));\r\n    const CHR* chr = T(\"abcabcabc\");\r\n    bidit begin(chr);\r\n    bidit end(chr + xlen(chr));\r\n    MyTokIter::regex_type re(rgxbegin, rgxend);\r\n    MyTokIter end_it;\r\n\r\n    MyTokIter iter(begin, end, re);\r\n    CHECK(iter != end_it);\r\n    STD sub_match<bidit> sm(*iter);\r\n    CHECK_PTR(&*sm.first, chr);\r\n    CHECK_PTR(&*sm.second, chr + 2);\r\n    MyTokIter iter1(iter);\r\n    sm = *++iter1;\r\n    CHECK_PTR(&*sm.first, chr + 3);\r\n    CHECK_PTR(&*sm.second, chr + 5);\r\n    iter = iter1;\r\n    iter++;\r\n    sm = *iter;\r\n    CHECK_PTR(&*sm.first, chr + 6);\r\n    CHECK_PTR(&*sm.second, chr + 8);\r\n    ++iter;\r\n    CHECK(iter == end_it);\r\n\r\n    MyTokIter iter2(begin, end, re, -1);\r\n    CHECK(iter2 != end_it);\r\n    sm = *iter2;\r\n    CHECK_PTR(&*sm.first, chr);\r\n    CHECK_PTR(&*sm.second, chr);\r\n    ++iter2;\r\n    sm = *iter2;\r\n    CHECK_PTR(&*sm.first, chr + 2);\r\n    CHECK_PTR(&*sm.second, chr + 3);\r\n    sm = *++iter2;\r\n    CHECK_PTR(&*sm.first, chr + 5);\r\n    CHECK_PTR(&*sm.second, chr + 6);\r\n    sm = *++iter2;\r\n    CHECK_PTR(&*sm.first, chr + 8);\r\n    CHECK_PTR(&*sm.second, chr + 9);\r\n    ++iter2;\r\n    CHECK(iter2 == end_it);\r\n\r\n    int init[] = {1, -1, 0};\r\n    { // test vector initializer\r\n        MyTokIter iter3(begin, end, re, STD vector<int>(&init[0], &init[3]));\r\n\r\n        CHECK(iter3 != end_it);\r\n        sm = *iter3;\r\n        CHECK_PTR(&*sm.first, chr + 1);\r\n        CHECK_PTR(&*sm.second, chr + 2);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr);\r\n        CHECK_PTR(&*sm.second, chr);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 0);\r\n        CHECK_PTR(&*sm.second, chr + 2);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 4);\r\n        CHECK_PTR(&*sm.second, chr + 5);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 2);\r\n        CHECK_PTR(&*sm.second, chr + 3);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 3);\r\n        CHECK_PTR(&*sm.second, chr + 5);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 7);\r\n        CHECK_PTR(&*sm.second, chr + 8);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 5);\r\n        CHECK_PTR(&*sm.second, chr + 6);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 6);\r\n        CHECK_PTR(&*sm.second, chr + 8);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 8);\r\n        CHECK_PTR(&*sm.second, chr + 9);\r\n        CHECK(++iter3 == end_it);\r\n    }\r\n\r\n    { // test array initializer\r\n        MyTokIter iter3(begin, end, re, init);\r\n\r\n        CHECK(iter3 != end_it);\r\n        sm = *iter3;\r\n        CHECK_PTR(&*sm.first, chr + 1);\r\n        CHECK_PTR(&*sm.second, chr + 2);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr);\r\n        CHECK_PTR(&*sm.second, chr);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 0);\r\n        CHECK_PTR(&*sm.second, chr + 2);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 4);\r\n        CHECK_PTR(&*sm.second, chr + 5);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 2);\r\n        CHECK_PTR(&*sm.second, chr + 3);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 3);\r\n        CHECK_PTR(&*sm.second, chr + 5);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 7);\r\n        CHECK_PTR(&*sm.second, chr + 8);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 5);\r\n        CHECK_PTR(&*sm.second, chr + 6);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 6);\r\n        CHECK_PTR(&*sm.second, chr + 8);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 8);\r\n        CHECK_PTR(&*sm.second, chr + 9);\r\n        CHECK(++iter3 == end_it);\r\n    }\r\n\r\n    { // test initializer list\r\n        STD initializer_list<int> ilist{init[0], init[1], init[2]};\r\n        MyTokIter iter3(begin, end, re, ilist);\r\n\r\n        CHECK(iter3 != end_it);\r\n        sm = *iter3;\r\n        CHECK_PTR(&*sm.first, chr + 1);\r\n        CHECK_PTR(&*sm.second, chr + 2);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr);\r\n        CHECK_PTR(&*sm.second, chr);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 0);\r\n        CHECK_PTR(&*sm.second, chr + 2);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 4);\r\n        CHECK_PTR(&*sm.second, chr + 5);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 2);\r\n        CHECK_PTR(&*sm.second, chr + 3);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 3);\r\n        CHECK_PTR(&*sm.second, chr + 5);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 7);\r\n        CHECK_PTR(&*sm.second, chr + 8);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 5);\r\n        CHECK_PTR(&*sm.second, chr + 6);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 6);\r\n        CHECK_PTR(&*sm.second, chr + 8);\r\n        sm = *++iter3;\r\n        CHECK_PTR(&*sm.first, chr + 8);\r\n        CHECK_PTR(&*sm.second, chr + 9);\r\n        CHECK(++iter3 == end_it);\r\n    }\r\n\r\n    STD vector<int> v(init, init + 3);\r\n    MyTokIter iter4(begin, end, re, v);\r\n    CHECK(iter4 != end_it);\r\n    sm = *iter4;\r\n    CHECK_PTR(&*sm.first, chr + 1);\r\n    CHECK_PTR(&*sm.second, chr + 2);\r\n    sm = *++iter4;\r\n    CHECK_PTR(&*sm.first, chr);\r\n    CHECK_PTR(&*sm.second, chr);\r\n    sm = *++iter4;\r\n    CHECK_PTR(&*sm.first, chr + 0);\r\n    CHECK_PTR(&*sm.second, chr + 2);\r\n    sm = *++iter4;\r\n    CHECK_PTR(&*sm.first, chr + 4);\r\n    CHECK_PTR(&*sm.second, chr + 5);\r\n    sm = *++iter4;\r\n    CHECK_PTR(&*sm.first, chr + 2);\r\n    CHECK_PTR(&*sm.second, chr + 3);\r\n    sm = *++iter4;\r\n    CHECK_PTR(&*sm.first, chr + 3);\r\n    CHECK_PTR(&*sm.second, chr + 5);\r\n    sm = *++iter4;\r\n    CHECK_PTR(&*sm.first, chr + 7);\r\n    CHECK_PTR(&*sm.second, chr + 8);\r\n    sm = *++iter4;\r\n    CHECK_PTR(&*sm.first, chr + 5);\r\n    CHECK_PTR(&*sm.second, chr + 6);\r\n    sm = *++iter4;\r\n    CHECK_PTR(&*sm.first, chr + 6);\r\n    CHECK_PTR(&*sm.second, chr + 8);\r\n    sm = *++iter4;\r\n    CHECK_PTR(&*sm.first, chr + 8);\r\n    CHECK_PTR(&*sm.second, chr + 9);\r\n    CHECK(++iter4 == end_it);\r\n\r\n    const CHR* edges = T(\"zb\");\r\n    bidit edgesfirst(edges), edgeslast(edges + xlen(edges));\r\n    MyTokIter::regex_type re1(T(\"z\"));\r\n    MyTokIter iter5(edgesfirst, edgeslast, re1, -1);\r\n    sm = *iter5;\r\n    CHECK_PTR(&*sm.first, edges);\r\n    CHECK_PTR(&*sm.second, edges);\r\n    CHECK(iter5 != end_it);\r\n    MyTokIter iter6(++iter5);\r\n    sm = *iter6;\r\n    CHECK_PTR(&*sm.first, edges + 1);\r\n    CHECK_PTR(&*sm.second, edges + 2);\r\n    CHECK(iter6 != end_it);\r\n    CHECK(++iter6 == end_it);\r\n\r\n    MyTokIter::regex_type* p_rgx      = (STD basic_regex<CHR>*) nullptr;\r\n    MyTokIter::value_type* p_val      = (STD sub_match<bidit>*) nullptr;\r\n    MyTokIter::difference_type* p_dif = (CSTD ptrdiff_t*) nullptr;\r\n    MyTokIter::pointer ptr            = (STD sub_match<bidit>*) nullptr;\r\n    MyTokIter::reference ref          = sm;\r\n    STD forward_iterator_tag* p_tag   = (MyTokIter::iterator_category*) nullptr;\r\n\r\n    p_rgx = p_rgx; // to quiet diagnostics\r\n    p_val = p_val;\r\n    p_dif = p_dif;\r\n    ptr   = ptr;\r\n    if (ref.length()) {\r\n        p_tag = p_tag;\r\n    }\r\n}\r\n\r\nstatic void test_match() { // test function regex_match\r\n    MyRgx r0;\r\n    CHECK(!STD regex_match(T(\"aa\"), r0));\r\n\r\n    MyRgx r(T(\"aa\"));\r\n    const CHR* chr = T(\"aa\");\r\n    bidit begin(chr);\r\n    bidit end(chr + xlen(chr));\r\n    STDString str(chr);\r\n    const CHR* beg = &*str.begin();\r\n\r\n    STD match_results<bidit> mr;\r\n    CHECK(STD regex_match(begin, end, mr, r, STD regex_constants::match_default));\r\n    CHECK_INT(mr.size(), 1);\r\n    CHECK(!mr.empty());\r\n    CHECK(!mr.prefix().matched);\r\n    CHECK_PTR(&*mr.prefix().first, chr);\r\n    CHECK_PTR(&*mr.prefix().second, chr);\r\n    CHECK(!mr.suffix().matched);\r\n    CHECK_PTR(&*mr.suffix().first, chr + 2);\r\n    CHECK_PTR(&*mr.suffix().second, chr + 2);\r\n    CHECK(mr[0].matched);\r\n    CHECK_PTR(&*mr[0].first, chr);\r\n    CHECK_PTR(&*mr[0].second, chr + 2);\r\n\r\n    STD match_results<const CHR*> mr1;\r\n    CHECK(STD regex_match(chr, mr1, r, STD regex_constants::match_default));\r\n    CHECK_INT(mr1.size(), 1);\r\n    CHECK(!mr1.empty());\r\n    CHECK(!mr1.prefix().matched);\r\n    CHECK_PTR(&*mr1.prefix().first, chr);\r\n    CHECK_PTR(&*mr1.prefix().second, chr);\r\n    CHECK(!mr1.suffix().matched);\r\n    CHECK_PTR(&*mr1.suffix().first, chr + 2);\r\n    CHECK_PTR(&*mr1.suffix().second, chr + 2);\r\n    CHECK(mr1[0].matched);\r\n    CHECK_PTR(&*mr1[0].first, chr);\r\n    CHECK_PTR(&*mr1[0].second, chr + 2);\r\n\r\n    STD match_results<STDString::const_iterator> mr2;\r\n    CHECK(STD regex_match(str, mr2, r, STD regex_constants::match_default));\r\n    CHECK_INT(mr2.size(), 1);\r\n    CHECK(!mr2.empty());\r\n    CHECK(!mr2.prefix().matched);\r\n    CHECK_PTR(&*mr2.prefix().first, beg);\r\n    CHECK_PTR(&*mr2.prefix().second, beg);\r\n    CHECK(!mr2.suffix().matched);\r\n    CHECK_INT(mr2.suffix().first - str.begin(), 2);\r\n    CHECK_INT(mr2.suffix().second - str.begin(), 2);\r\n    CHECK(mr2[0].matched);\r\n    CHECK_PTR(&*mr2[0].first, beg);\r\n    CHECK_INT(mr2.suffix().second - str.begin(), 2);\r\n\r\n    CHECK(STD regex_match(begin, end, r, STD regex_constants::match_default));\r\n    CHECK(STD regex_match(chr, r, STD regex_constants::match_default));\r\n    CHECK(STD regex_match(str, r, STD regex_constants::match_default));\r\n}\r\n\r\nstatic void test_search() { // test functions regex_search\r\n    MyRgx r0;\r\n    CHECK(!STD regex_search(T(\"aa\"), r0));\r\n\r\n    MyRgx r(T(\"a\"));\r\n    const CHR* chr = T(\"aa\");\r\n    bidit begin(chr);\r\n    bidit end(chr + xlen(chr));\r\n    STDString str(chr);\r\n    const CHR* beg = &*str.begin();\r\n\r\n    STD match_results<bidit> mr;\r\n    CHECK(STD regex_search(begin, end, mr, r, STD regex_constants::match_default));\r\n    CHECK_INT(mr.size(), 1);\r\n    CHECK(!mr.empty());\r\n    CHECK(!mr.prefix().matched);\r\n    CHECK_PTR(&*mr.prefix().first, chr);\r\n    CHECK_PTR(&*mr.prefix().second, chr);\r\n    CHECK(mr.suffix().matched);\r\n    CHECK_PTR(&*mr.suffix().first, chr + 1);\r\n    CHECK_PTR(&*mr.suffix().second, chr + 2);\r\n    CHECK(mr[0].matched);\r\n    CHECK_PTR(&*mr[0].first, chr);\r\n    CHECK_PTR(&*mr[0].second, chr + 1);\r\n\r\n    STD match_results<const CHR*> mr1;\r\n    CHECK(STD regex_search(chr, mr1, r, STD regex_constants::match_default));\r\n    CHECK_INT(mr1.size(), 1);\r\n    CHECK(!mr1.empty());\r\n    CHECK(!mr1.prefix().matched);\r\n    CHECK_PTR(&*mr1.prefix().first, chr);\r\n    CHECK_PTR(&*mr1.prefix().second, chr);\r\n    CHECK(mr1.suffix().matched);\r\n    CHECK_PTR(&*mr1.suffix().first, chr + 1);\r\n    CHECK_PTR(&*mr1.suffix().second, chr + 2);\r\n    CHECK(mr1[0].matched);\r\n    CHECK_PTR(&*mr1[0].first, chr);\r\n    CHECK_PTR(&*mr1[0].second, chr + 1);\r\n\r\n    STD match_results<STDString::const_iterator> mr2;\r\n    CHECK(STD regex_search(str, mr2, r, STD regex_constants::match_default));\r\n    CHECK_INT(mr2.size(), 1);\r\n    CHECK(!mr2.empty());\r\n    CHECK(!mr2.prefix().matched);\r\n    CHECK_PTR(&*mr2.prefix().first, beg);\r\n    CHECK_PTR(&*mr2.prefix().second, beg);\r\n    CHECK(mr2.suffix().matched);\r\n    CHECK_PTR(&*mr2.suffix().first, beg + 1);\r\n    CHECK_INT(mr2.suffix().second - str.begin(), 2);\r\n    CHECK(mr2[0].matched);\r\n    CHECK_PTR(&*mr2[0].first, beg);\r\n    CHECK_PTR(&*mr2[0].second, beg + 1);\r\n\r\n    CHECK(STD regex_search(begin, end, r, STD regex_constants::match_default));\r\n    CHECK(STD regex_search(chr, r, STD regex_constants::match_default));\r\n    CHECK(STD regex_search(str, r, STD regex_constants::match_default));\r\n}\r\n\r\nstatic void test_replace() { // test function regex_replace\r\n    CHR out[100];\r\n    STD basic_string<char, STD char_traits<char>, Myalloc<char>> fmt(T(\"x\"));\r\n\r\n    const CHR* chr = T(\"b\");\r\n    bidit begin(chr);\r\n    bidit end(chr + xlen(chr));\r\n\r\n    MyRgx r0;\r\n    CHR* res = STD regex_replace(out, begin, end, r0, fmt, STD regex_constants::match_default);\r\n    *res     = '\\0';\r\n    CHECKSTR(out, T(\"b\"));\r\n\r\n    MyRgx r(T(\"a\"));\r\n    res  = STD regex_replace(out, begin, end, r, fmt, STD regex_constants::match_default);\r\n    *res = '\\0';\r\n    CHECKSTR(out, T(\"b\"));\r\n    res  = STD regex_replace(out, begin, end, r, fmt, STD regex_constants::format_no_copy);\r\n    *res = '\\0';\r\n    CHECKSTR(out, T(\"\"));\r\n\r\n    chr   = T(\"babab\");\r\n    begin = bidit(chr);\r\n    end   = bidit(chr + xlen(chr));\r\n    res   = STD regex_replace(out, begin, end, r, fmt, STD regex_constants::match_default);\r\n    *res  = '\\0';\r\n    CHECKSTR(out, T(\"bxbxb\"));\r\n    res  = STD regex_replace(out, begin, end, r, fmt, STD regex_constants::format_no_copy);\r\n    *res = '\\0';\r\n    CHECKSTR(out, T(\"xx\"));\r\n    res  = STD regex_replace(out, begin, end, r, fmt, STD regex_constants::format_first_only);\r\n    *res = '\\0';\r\n    CHECKSTR(out, T(\"bxbab\"));\r\n    res = STD regex_replace(\r\n        out, begin, end, r, fmt, STD regex_constants::format_first_only | STD regex_constants::format_no_copy);\r\n    *res = '\\0';\r\n    CHECKSTR(out, T(\"x\"));\r\n\r\n    STDString str1(T(\"b\"));\r\n    STDString res1 = STD regex_replace(str1, r, fmt, STD regex_constants::match_default);\r\n    CHECKSTR(res1.c_str(), T(\"b\"));\r\n    res1 = STD regex_replace(str1, r, fmt, STD regex_constants::format_no_copy);\r\n    CHECKSTR(res1.c_str(), T(\"\"));\r\n\r\n    str1 = T(\"babab\");\r\n    res1 = STD regex_replace(str1, r, fmt, STD regex_constants::match_default);\r\n    CHECKSTR(res1.c_str(), T(\"bxbxb\"));\r\n    res1 = STD regex_replace(str1, r, fmt, STD regex_constants::format_no_copy);\r\n    CHECKSTR(res1.c_str(), T(\"xx\"));\r\n    res1 = STD regex_replace(str1, r, fmt, STD regex_constants::format_first_only);\r\n    CHECKSTR(res1.c_str(), T(\"bxbab\"));\r\n    res1 =\r\n        STD regex_replace(str1, r, fmt, STD regex_constants::format_first_only | STD regex_constants::format_no_copy);\r\n    CHECKSTR(res1.c_str(), T(\"x\"));\r\n}\r\n\r\nstatic void test_syntax_flags() { // test syntax flags\r\n    MyRgx r0;\r\n    int i, j, ok;\r\n    for (ok = 1, i = sizeof(synflags) / sizeof(synflags[0]); 0 < i;) {\r\n        for (j = --i; 0 < j;) { // test an (i, j) pair\r\n            int testno = i * 0x100 + j;\r\n            ok         = CHECK0(ok, testno, synflags[i] != synflags[--j]);\r\n        }\r\n    }\r\n    CHECK_MSG(\"regex_constants::syntax_option_type values are distinct\", ok);\r\n\r\n    r0.assign(T(\"a\"));\r\n    CHECK(!STD regex_match(T(\"A\"), r0));\r\n    r0.assign(T(\"a\"), STD regex_constants::icase | STD regex_constants::optimize);\r\n    CHECK(STD regex_match(T(\"A\"), r0));\r\n\r\n    r0.assign(T(\"a(b)(c)\"));\r\n    MyMr mr;\r\n    CHECK(STD regex_match(T(\"abc\"), mr, r0));\r\n    CHECK(mr[1].matched);\r\n    r0.assign(T(\"a(b)(c)\"), STD regex_constants::nosubs);\r\n    CHECK(STD regex_match(T(\"abc\"), mr, r0));\r\n    CHECK(!mr[1].matched);\r\n\r\n    MyxRgx r1(T(\"[c-a]\"), STD regex_constants::collate);\r\n    CHECK(STD regex_match(T(\"b\"), r1));\r\n    r1.assign(T(\"d\"), STD regex_constants::collate);\r\n    CHECK(STD regex_match(T(\"f\"), r1));\r\n}\r\n\r\nstatic void test_match_flags() { // test match flags\r\n    MyRgx r0;\r\n    CHECK_INT(mtchflags[0], 0);\r\n    CHECK_INT(mtchflags[9], 0);\r\n    int i, j, ok;\r\n    for (ok = 1, i = sizeof(mtchflags) / sizeof(mtchflags[0]); 0 < i;) {\r\n        for (j = --i; 0 < j;) { // test an (i, j) pair\r\n            int testno = i * 0x100 + j;\r\n            ok         = CHECK0(ok, testno, mtchflags[i] != mtchflags[--j] || mtchflags[i] == 0);\r\n        }\r\n    }\r\n    CHECK_MSG(\"regex_constants::match_flag_type values are distinct\", ok);\r\n\r\n    r0.assign(T(\"^a\"));\r\n    CHECK(STD regex_match(T(\"a\"), r0));\r\n    CHECK(!STD regex_match(T(\"a\"), r0, STD regex_constants::match_not_bol));\r\n    r0.assign(T(\"a$\"));\r\n    CHECK(STD regex_match(T(\"a\"), r0));\r\n    CHECK(!STD regex_match(T(\"a\"), r0, STD regex_constants::match_not_eol));\r\n\r\n    r0.assign(T(\"\\\\ba\"));\r\n    CHECK(STD regex_match(T(\"a\"), r0));\r\n    CHECK(!STD regex_match(T(\"a\"), r0, STD regex_constants::match_not_bow));\r\n    r0.assign(T(\"a\\\\b\"));\r\n    CHECK(STD regex_match(T(\"a\"), r0));\r\n    CHECK(!STD regex_match(T(\"a\"), r0, STD regex_constants::match_not_eow));\r\n\r\n    r0.assign(T(\"a|ab\"), STD regex_constants::extended);\r\n    STD match_results<const CHR*> mr;\r\n    CHECK(STD regex_search(T(\"ab\"), mr, r0, STD regex_constants::match_any));\r\n    CHECK_INT(mr.length(), 1);\r\n    CHECK(STD regex_match(T(\"ab\"), r0, STD regex_constants::match_any));\r\n\r\n    r0.assign(T(\"(a*)\"));\r\n    CHECK(STD regex_search(T(\"b\"), r0));\r\n    CHECK(!STD regex_search(T(\"b\"), r0, STD regex_constants::match_not_null));\r\n\r\n    r0.assign(T(\"b\"));\r\n    CHECK(STD regex_search(T(\"ab\"), r0));\r\n    CHECK(!STD regex_search(T(\"ab\"), r0, STD regex_constants::match_continuous));\r\n    CHECK(STD regex_search(T(\"ba\"), r0, STD regex_constants::match_continuous));\r\n\r\n    r0.assign(T(\"^a$\"));\r\n    const CHR* nl_a = T(\"\\na\");\r\n    CHECK(!STD regex_match(nl_a + 1, r0,\r\n        STD regex_constants::match_prev_avail | STD regex_constants::match_not_bol\r\n            | STD regex_constants::match_not_eol));\r\n}\r\n\r\nstatic void test_error_flags() { // test error flags\r\n    int i, j, ok;\r\n    for (ok = 1, i = sizeof(errflags) / sizeof(errflags[0]); 0 < i;) {\r\n        for (j = --i; 0 < j;) { // test an (i, j) pair\r\n            int testno = i * 0x100 + j;\r\n            ok         = CHECK0(ok, testno, errflags[i] != errflags[--j]);\r\n        }\r\n    }\r\n    CHECK_MSG(\"regex_constants::error_type values are distinct\", ok);\r\n\r\n    STD regex_error x(errflags[0]);\r\n    STD runtime_error* pex = &x;\r\n\r\n    if (!terse) {\r\n        printf(\"regex_error().what() returns \\\"%s\\\"\\n\", pex->what());\r\n    }\r\n\r\n    CHECK(pex->what() != nullptr);\r\n    CHECK_INT(x.code(), errflags[0]);\r\n}\r\n\r\nstatic void test_error(const CHR* expr, STD regex_constants::error_type err) {\r\n#if NO_EXCEPTIONS\r\n#else // NO_EXCEPTIONS\r\n    try {\r\n        STD basic_regex<CHR> rgx(expr);\r\n    } catch (const STD regex_error& ex) {\r\n        CHECK_INT(ex.code(), err);\r\n        return;\r\n    }\r\n    CHECK_MSG(\"error should have been caught\", false);\r\n#endif // NO_EXCEPTIONS\r\n}\r\n\r\nstatic void test_errors() {\r\n    test_error(T(\"a{3,2}\"), STD regex_constants::error_badbrace);\r\n    test_error(T(\"a{-1,2}\"), STD regex_constants::error_badbrace);\r\n    test_error(T(\"a{3,-1}\"), STD regex_constants::error_badbrace);\r\n    test_error(T(\"^*\"), STD regex_constants::error_badrepeat);\r\n    test_error(T(\"^?\"), STD regex_constants::error_badrepeat);\r\n    test_error(T(\"^+\"), STD regex_constants::error_badrepeat);\r\n    test_error(T(\"(?!a)*\"), STD regex_constants::error_badrepeat);\r\n    test_error(T(\"(?=a)*\"), STD regex_constants::error_badrepeat);\r\n    test_error(T(\"$*\"), STD regex_constants::error_badrepeat);\r\n    test_error(T(\"$?\"), STD regex_constants::error_badrepeat);\r\n    test_error(T(\"$+\"), STD regex_constants::error_badrepeat);\r\n    test_error(T(\"a{\"), STD regex_constants::error_badbrace);\r\n    test_error(T(\"a}\"), STD regex_constants::error_brace);\r\n    test_error(T(\"a[\"), STD regex_constants::error_brack);\r\n    test_error(T(\"a]\"), STD regex_constants::error_brack);\r\n    test_error(T(\"[[:invalid:]]\"), STD regex_constants::error_ctype);\r\n    test_error(T(\"\\\\c\"), STD regex_constants::error_escape);\r\n    test_error(T(\"(\"), STD regex_constants::error_paren);\r\n    test_error(T(\")\"), STD regex_constants::error_paren);\r\n    test_error(T(\"[b-a]\"), STD regex_constants::error_range);\r\n    test_error(T(\"a\\\\1\"), STD regex_constants::error_backref);\r\n}\r\n\r\nvoid test_main() { // test header <regex>\r\n    test_traits();\r\n    test_regex();\r\n    test_match_results();\r\n    test_format();\r\n    test_regex_iterator();\r\n    test_regex_token_iterator();\r\n    test_match();\r\n    test_search();\r\n    test_replace();\r\n    test_syntax_flags();\r\n    test_match_flags();\r\n    test_error_flags();\r\n    test_errors();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/regex2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <regex> header, part 2\r\n#define TEST_NAME \"<regex>, part 2\"\r\n\r\n#include \"tdefs.h\"\r\n#include <regex>\r\n#include <sstream>\r\n#include <string.h>\r\n\r\n#define ECMA     0x01\r\n#define BASIC    0x02\r\n#define EXTENDED 0x04\r\n#define AWK      0x08\r\n#define GREP     0x10\r\n#define EGREP    0x20\r\n\r\n#define BG       (BASIC | GREP)\r\n#define EEA      (EXTENDED | EGREP | AWK)\r\n#define ALL      (ECMA | BASIC | EXTENDED | AWK | GREP | EGREP)\r\n#define NOT_ECMA (BASIC | EXTENDED | AWK | GREP | EGREP)\r\n#define NOT_BG   (ECMA | EXTENDED | AWK | EGREP)\r\n#define NOT_AWK  (ECMA | BASIC | EXTENDED | GREP | EGREP)\r\n\r\n#ifdef WIDE\r\n#define T(x)                  L##x\r\n#define xlen(x)               wcslen(x)\r\n#define CHECKSTR(left, right) CHECK_WSTR(left, right)\r\ntypedef wchar_t CHR;\r\ntypedef STD wstring STDString;\r\n\r\n#else // defined WIDE\r\n#define T(x)                  x\r\n#define xlen(x)               CSTD strlen(x)\r\n#define CHECKSTR(left, right) CHECK_STR(left, right)\r\ntypedef char CHR;\r\ntypedef STD string STDString;\r\n#endif // defined WIDE\r\n\r\nstatic int lang(STD regex_constants::syntax_option_type opt) { // determine dialect\r\n    if ((opt & 0xff) == STD regex_constants::ECMAScript) {\r\n        return ECMA;\r\n    } else if ((opt & 0xff) == STD regex_constants::basic) {\r\n        return BASIC;\r\n    } else if ((opt & 0xff) == STD regex_constants::extended) {\r\n        return EXTENDED;\r\n    } else if ((opt & 0xff) == STD regex_constants::awk) {\r\n        return AWK;\r\n    } else if ((opt & 0xff) == STD regex_constants::grep) {\r\n        return GREP;\r\n    } else if ((opt & 0xff) == STD regex_constants::egrep) {\r\n        return EGREP;\r\n    } else {\r\n        return 0;\r\n    }\r\n}\r\n\r\nstruct regex_test { // test parameters and results\r\n    unsigned int line;\r\n    const CHR* re;\r\n    const CHR* txt;\r\n    const char* res;\r\n    unsigned int valid;\r\n};\r\n\r\nstatic const regex_test tests[] = {\r\n    // tests\r\n\r\n    // a few simple patterns\r\n    {__LINE__, T(\"\"), T(\"\"), \"1 0 0\", ALL},\r\n    {__LINE__, T(\"\"), T(\"a\"), \"1 0 0\", ALL},\r\n    {__LINE__, T(\"a\"), T(\"\"), \"0\", ALL},\r\n    {__LINE__, T(\"a\"), T(\"a\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"a\"), T(\"ab\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"a\"), T(\"bab\"), \"1 1 2\", ALL},\r\n    {__LINE__, T(\"1\"), T(\"1\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"-\"), T(\"-\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\",\"), T(\",\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"=\"), T(\"=\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\":\"), T(\":\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"!\"), T(\"!\"), \"1 0 1\", ALL},\r\n\r\n    // disjunction\r\n    {__LINE__, T(\"a|b\"), T(\"a|b\"), \"1 0 3\", BG},\r\n    {__LINE__, T(\"a|b\"), T(\"a\"), \"1 0 1\", NOT_BG},\r\n    {__LINE__, T(\"a|b\"), T(\"b\"), \"1 0 1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"|\"), T(\"|\"), \"1 0 1\", BG},\r\n    {__LINE__, T(\"|\"), T(\"\"), \"1 0 0\", NOT_BG},\r\n\r\n    {__LINE__, T(\"a|\"), T(\"a|\"), \"1 0 2\", BG},\r\n    {__LINE__, T(\"a|\"), T(\"\"), \"1 0 0\", NOT_BG},\r\n\r\n    {__LINE__, T(\"|a\"), T(\"|a\"), \"1 0 2\", BG},\r\n    {__LINE__, T(\"|a\"), T(\"\"), \"1 0 0\", NOT_BG},\r\n\r\n    {__LINE__, T(\"||\"), T(\"||\"), \"1 0 2\", BG},\r\n    {__LINE__, T(\"||\"), T(\"\"), \"1 0 0\", NOT_BG},\r\n\r\n    {__LINE__, T(\"a||\"), T(\"\"), \"1 0 0\", NOT_BG},\r\n    {__LINE__, T(\"a||\"), T(\"a||\"), \"1 0 3\", BG},\r\n\r\n    {__LINE__, T(\"a|b|c\"), T(\"a\"), \"1 0 1\", NOT_BG},\r\n    {__LINE__, T(\"a|b|c\"), T(\"b\"), \"1 0 1\", NOT_BG},\r\n    {__LINE__, T(\"a|b|c\"), T(\"c\"), \"1 0 1\", NOT_BG},\r\n    {__LINE__, T(\"a|(b|c)\"), T(\"a\"), \"2 0 1 -1 -1\", NOT_BG},\r\n    {__LINE__, T(\"a|(b|c)\"), T(\"b\"), \"2 0 1 0 1\", NOT_BG},\r\n    {__LINE__, T(\"a|(b|c)\"), T(\"c\"), \"2 0 1 0 1\", NOT_BG},\r\n    {__LINE__, T(\"(a|b)|c\"), T(\"a\"), \"2 0 1 0 1\", NOT_BG},\r\n    {__LINE__, T(\"(a|b)|c\"), T(\"b\"), \"2 0 1 0 1\", NOT_BG},\r\n    {__LINE__, T(\"(a|b)|c\"), T(\"c\"), \"2 0 1 -1 -1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"a\\nb\"), T(\"a\"), \"1 0 1\", GREP | EGREP},\r\n    {__LINE__, T(\"a\\nb\"), T(\"b\"), \"1 0 1\", GREP | EGREP},\r\n    {__LINE__, T(\"a\\nb\"), T(\"a\\nb\"), \"1 0 3\", BASIC | ECMA | EXTENDED | AWK},\r\n\r\n    // assertions\r\n    {__LINE__, T(\"^\"), T(\"\"), \"1 0 0\", ALL},\r\n    {__LINE__, T(\"$\"), T(\"\"), \"1 0 0\", ALL},\r\n\r\n    {__LINE__, T(\"^a\"), T(\"a\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"^a\"), T(\"^a\"), \"0\", ALL},\r\n    {__LINE__, T(\"^a\"), T(\"ba\"), \"0\", ALL},\r\n\r\n    {__LINE__, T(\"a^\"), T(\"a\"), \"0\", ALL},\r\n\r\n    {__LINE__, T(\"$a\"), T(\"a\"), \"0\", ALL},\r\n    {__LINE__, T(\"$a\"), T(\"$a\"), \"0\", NOT_BG},\r\n    {__LINE__, T(\"$a\"), T(\"$a\"), \"1 0 2\", BG},\r\n\r\n    {__LINE__, T(\"a$\"), T(\"ba\"), \"1 1 2\", ALL},\r\n    {__LINE__, T(\"a$\"), T(\"ab\"), \"0\", ALL},\r\n\r\n    {__LINE__, T(\"^a$\"), T(\"b\\na\"), \"0\", ALL},\r\n\r\n    {__LINE__, T(\"\\\\b\"), T(\"a\"), \"1 0 0\", ECMA},\r\n    {__LINE__, T(\"\\\\b\"), T(\"\"), \"-1\", BASIC | GREP | EXTENDED | EGREP},\r\n    {__LINE__, T(\"\\\\b\"), T(\"\\b\"), \"1 0 1\", AWK},\r\n\r\n    {__LINE__, T(\"a\\\\b\"), T(\" a \"), \"1 1 2\", ECMA},\r\n    {__LINE__, T(\"\\\\ba\"), T(\" a \"), \"1 1 2\", ECMA},\r\n    {__LINE__, T(\"\\\\b\"), T(\" \"), \"0\", ECMA},\r\n    {__LINE__, T(\"a\\\\b\"), T(\"ab\"), \"0\", ECMA},\r\n    {__LINE__, T(\"\\\\B\"), T(\"a\"), \"0\", ECMA},\r\n    {__LINE__, T(\"\\\\B\"), T(\"\"), \"-1\", NOT_ECMA},\r\n    {__LINE__, T(\"a\\\\B\"), T(\" a \"), \"0\", ECMA},\r\n    {__LINE__, T(\"\\\\Ba\"), T(\" a \"), \"0\", ECMA},\r\n    {__LINE__, T(\"\\\\B\"), T(\" \"), \"1 0 0\", ECMA},\r\n    {__LINE__, T(\"a\\\\B\"), T(\"ab\"), \"1 0 1\", ECMA},\r\n\r\n    // initial quantifier\r\n    {__LINE__, T(\"*\"), T(\"*\"), \"1 0 1\", BG},\r\n    {__LINE__, T(\"*\"), T(\"a\"), \"0\", BG},\r\n    {__LINE__, T(\"*a\"), T(\"*a\"), \"1 0 2\", BG},\r\n    {__LINE__, T(\"*\"), T(\"\"), \"-1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"\\\\(*\\\\)\"), T(\"*\"), \"2 0 1 0 1\", BG},\r\n    {__LINE__, T(\"\\\\(*\\\\)\"), T(\"a\"), \"0\", BG},\r\n    {__LINE__, T(\"(*)\"), T(\"\"), \"-1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"^*\"), T(\"*\"), \"1 0 1\", BG},\r\n    {__LINE__, T(\"^*\"), T(\"^*\"), \"0\", BG},\r\n    {__LINE__, T(\"^*\"), T(\"\"), \"-1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"+\"), T(\"+\"), \"1 0 1\", BG},\r\n    {__LINE__, T(\"+\"), T(\"a\"), \"0\", BG},\r\n    {__LINE__, T(\"+\"), T(\"\"), \"-1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"?\"), T(\"?\"), \"1 0 1\", BG},\r\n    {__LINE__, T(\"?\"), T(\"a\"), \"0\", BG},\r\n    {__LINE__, T(\"?\"), T(\"\"), \"-1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"{10}\"), T(\"{10}\"), \"1 0 4\", BG},\r\n    {__LINE__, T(\"{10}a\"), T(\"{10}a\"), \"1 0 5\", BG},\r\n    {__LINE__, T(\"{10}\"), T(\"\"), \"-1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"{10,}\"), T(\"{10,}\"), \"1 0 5\", BG},\r\n    {__LINE__, T(\"{10,}a\"), T(\"{10,}a\"), \"1 0 6\", BG},\r\n    {__LINE__, T(\"{10,}\"), T(\"\"), \"-1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"{10,12}\"), T(\"{10,12}\"), \"1 0 7\", BG},\r\n    {__LINE__, T(\"{10,12}a\"), T(\"{10,12}a\"), \"1 0 8\", BG},\r\n    {__LINE__, T(\"{10,12}\"), T(\"aaaaaaaaaa\"), \"0\", BG},\r\n    {__LINE__, T(\"{10,12}\"), T(\"\"), \"-1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"*?\"), T(\"*?\"), \"1 0 2\", BG},\r\n    {__LINE__, T(\"*?a\"), T(\"*?a\"), \"1 0 3\", BG},\r\n    {__LINE__, T(\"*?\"), T(\"**\"), \"0\", BG},\r\n    {__LINE__, T(\"*?\"), T(\"\"), \"-1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"(*a)\"), T(\"a)\"), \"1 0 2\", BG},\r\n    {__LINE__, T(\"(*a)\"), T(\"((a)\"), \"1 0 4\", BG},\r\n    {__LINE__, T(\"(*?a)\"), T(\"?a)\"), \"1 0 3\", BG},\r\n    {__LINE__, T(\"(*?)\"), T(\"?)\"), \"1 0 2\", BG},\r\n    {__LINE__, T(\"(*?)\"), T(\"((?)\"), \"1 0 4\", BG},\r\n    {__LINE__, T(\"(*?a)\"), T(\"((?a)\"), \"1 0 5\", BG},\r\n    {__LINE__, T(\"(*)\"), T(\"\"), \"-1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"+?\"), T(\"+?\"), \"1 0 2\", BG},\r\n    {__LINE__, T(\"+?a\"), T(\"+?a\"), \"1 0 3\", BG},\r\n    {__LINE__, T(\"+a\"), T(\"+a\"), \"1 0 2\", BG},\r\n    {__LINE__, T(\"+?\"), T(\"\"), \"-1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"??\"), T(\"??\"), \"1 0 2\", BG},\r\n    {__LINE__, T(\"?a\"), T(\"?a\"), \"1 0 2\", BG},\r\n    {__LINE__, T(\"??a\"), T(\"??a\"), \"1 0 3\", BG},\r\n    {__LINE__, T(\"??\"), T(\"\"), \"-1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"{10}?\"), T(\"{10}?\"), \"1 0 5\", BG},\r\n    {__LINE__, T(\"{10}?a\"), T(\"{10}?a\"), \"1 0 6\", BG},\r\n    {__LINE__, T(\"{10}?\"), T(\"\"), \"-1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"{10,}?\"), T(\"{10,}?\"), \"1 0 6\", BG},\r\n    {__LINE__, T(\"{10,}?a\"), T(\"{10,}?a\"), \"1 0 7\", BG},\r\n    {__LINE__, T(\"{10,}?\"), T(\"\"), \"-1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"{10,12}?\"), T(\"{10,12}?\"), \"1 0 8\", BG},\r\n    {__LINE__, T(\"{10,12}?a\"), T(\"{10,12}?a\"), \"1 0 9\", BG},\r\n    {__LINE__, T(\"{10,12}?\"), T(\"\"), \"-1\", NOT_BG},\r\n\r\n    // term quantifier\r\n    {__LINE__, T(\"b*\"), T(\"\"), \"1 0 0\", ALL},\r\n    {__LINE__, T(\"b*\"), T(\"b\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"b*\"), T(\"bbbb\"), \"1 0 4\", ALL},\r\n\r\n    {__LINE__, T(\"b+\"), T(\"\"), \"0\", ALL},\r\n    {__LINE__, T(\"b+\"), T(\"b+\"), \"1 0 2\", BG},\r\n    {__LINE__, T(\"b+\"), T(\"b\"), \"1 0 1\", NOT_BG},\r\n    {__LINE__, T(\"b+\"), T(\"bbbb\"), \"1 0 4\", NOT_BG},\r\n\r\n    {__LINE__, T(\"b?\"), T(\"b?\"), \"1 0 2\", BG},\r\n    {__LINE__, T(\"b?\"), T(\"\"), \"1 0 0\", NOT_BG},\r\n    {__LINE__, T(\"b?\"), T(\"b\"), \"1 0 1\", NOT_BG},\r\n    {__LINE__, T(\"b?\"), T(\"bb\"), \"1 0 1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"b{10}\"), T(\"b{10}\"), \"1 0 5\", BG},\r\n    {__LINE__, T(\"b\\\\{10\\\\}\"), T(\"bbbbbbbbb\"), \"0\", BG},\r\n    {__LINE__, T(\"b{10}\"), T(\"bbbbbbbbb\"), \"0\", NOT_BG},\r\n    {__LINE__, T(\"b\\\\{10\\\\}\"), T(\"bbbbbbbbbb\"), \"1 0 10\", BG},\r\n    {__LINE__, T(\"b{10}\"), T(\"bbbbbbbbbb\"), \"1 0 10\", NOT_BG},\r\n    {__LINE__, T(\"b\\\\{10\\\\}\"), T(\"bbbbbbbbbbb\"), \"1 0 10\", BG},\r\n    {__LINE__, T(\"b{10}\"), T(\"bbbbbbbbbbb\"), \"1 0 10\", NOT_BG},\r\n\r\n    {__LINE__, T(\"b{10,}\"), T(\"b{10,}\"), \"1 0 6\", BG},\r\n    {__LINE__, T(\"b\\\\{10,\\\\}\"), T(\"bbbbbbbbb\"), \"0\", BG},\r\n    {__LINE__, T(\"b{10,}\"), T(\"bbbbbbbbb\"), \"0\", NOT_BG},\r\n    {__LINE__, T(\"b\\\\{10,\\\\}\"), T(\"bbbbbbbbbb\"), \"1 0 10\", BG},\r\n    {__LINE__, T(\"b{10,}\"), T(\"bbbbbbbbbb\"), \"1 0 10\", NOT_BG},\r\n    {__LINE__, T(\"b\\\\{10,\\\\}\"), T(\"bbbbbbbbbbb\"), \"1 0 11\", BG},\r\n    {__LINE__, T(\"b{10,}\"), T(\"bbbbbbbbbbb\"), \"1 0 11\", NOT_BG},\r\n\r\n    {__LINE__, T(\"b{10,12}\"), T(\"b{10,12}\"), \"1 0 8\", BG},\r\n    {__LINE__, T(\"b\\\\{10,12\\\\}\"), T(\"bbbbbbbbb\"), \"0\", BG},\r\n    {__LINE__, T(\"b{10,12}\"), T(\"bbbbbbbbb\"), \"0\", NOT_BG},\r\n    {__LINE__, T(\"b\\\\{10,12\\\\}\"), T(\"bbbbbbbbbb\"), \"1 0 10\", BG},\r\n    {__LINE__, T(\"b{10,12}\"), T(\"bbbbbbbbbb\"), \"1 0 10\", NOT_BG},\r\n    {__LINE__, T(\"b\\\\{10,12\\\\}\"), T(\"bbbbbbbbbbb\"), \"1 0 11\", BG},\r\n    {__LINE__, T(\"b{10,12}\"), T(\"bbbbbbbbbbb\"), \"1 0 11\", NOT_BG},\r\n    {__LINE__, T(\"b\\\\{10,12\\\\}\"), T(\"bbbbbbbbbbbb\"), \"1 0 12\", BG},\r\n    {__LINE__, T(\"b{10,12}\"), T(\"bbbbbbbbbbbb\"), \"1 0 12\", NOT_BG},\r\n    {__LINE__, T(\"b\\\\{10,12\\\\}\"), T(\"bbbbbbbbbbbbb\"), \"1 0 12\", BG},\r\n    {__LINE__, T(\"b{10,12}\"), T(\"bbbbbbbbbbbbb\"), \"1 0 12\", NOT_BG},\r\n\r\n    {__LINE__, T(\"b*?\"), T(\"\"), \"1 0 0\", ECMA},\r\n    {__LINE__, T(\"b*?a\"), T(\"a\"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"b*?\"), T(\"b\"), \"1 0 0\", ECMA},\r\n    {__LINE__, T(\"b*?a\"), T(\"ba\"), \"1 0 2\", ECMA},\r\n    {__LINE__, T(\"b*?\"), T(\"bb\"), \"1 0 0\", ECMA},\r\n    {__LINE__, T(\"b*?a\"), T(\"bba\"), \"1 0 3\", ECMA},\r\n    {__LINE__, T(\"b*?\"), T(\"?\"), \"1 0 1\", BG},\r\n    {__LINE__, T(\"b*?\"), T(\"\"), \"-1\", EEA},\r\n\r\n    {__LINE__, T(\"b+?\"), T(\"\"), \"0\", ECMA},\r\n    {__LINE__, T(\"b+?a\"), T(\"a\"), \"0\", ECMA},\r\n    {__LINE__, T(\"b+?\"), T(\"b\"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"b+?a\"), T(\"ba\"), \"1 0 2\", ECMA},\r\n    {__LINE__, T(\"b+?\"), T(\"bb\"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"b+?a\"), T(\"bba\"), \"1 0 3\", ECMA},\r\n    {__LINE__, T(\"b+?\"), T(\"b+?\"), \"1 0 3\", BG},\r\n    {__LINE__, T(\"b+?\"), T(\"\"), \"-1\", EEA},\r\n\r\n    {__LINE__, T(\"b??\"), T(\"\"), \"1 0 0\", ECMA},\r\n    {__LINE__, T(\"b??a\"), T(\"a\"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"b??\"), T(\"b\"), \"1 0 0\", ECMA},\r\n    {__LINE__, T(\"b??a\"), T(\"ba\"), \"1 0 2\", ECMA},\r\n    {__LINE__, T(\"b??\"), T(\"bb\"), \"1 0 0\", ECMA},\r\n    {__LINE__, T(\"b??a\"), T(\"bba\"), \"1 1 3\", ECMA},\r\n    {__LINE__, T(\"b??\"), T(\"b??\"), \"1 0 3\", BG},\r\n    {__LINE__, T(\"b??\"), T(\"\"), \"-1\", EEA},\r\n\r\n    {__LINE__, T(\"b{10}?\"), T(\"bbbbbbbbb\"), \"0\", ECMA},\r\n    {__LINE__, T(\"b{10}?a\"), T(\"bbbbbbbbba\"), \"0\", ECMA},\r\n    {__LINE__, T(\"b{10}?\"), T(\"bbbbbbbbbb\"), \"1 0 10\", ECMA},\r\n    {__LINE__, T(\"b{10}?a\"), T(\"bbbbbbbbbba\"), \"1 0 11\", ECMA},\r\n    {__LINE__, T(\"b{10}?\"), T(\"bbbbbbbbbbb\"), \"1 0 10\", ECMA},\r\n    {__LINE__, T(\"b{10}?a\"), T(\"bbbbbbbbbbba\"), \"1 1 12\", ECMA},\r\n    {__LINE__, T(\"b{10}?\"), T(\"b{10}?\"), \"1 0 6\", BG},\r\n    {__LINE__, T(\"b\\\\{10\\\\}?\"), T(\"bbbbbbbbbb?\"), \"1 0 11\", BG},\r\n    {__LINE__, T(\"b{10}?\"), T(\"\"), \"-1\", EEA},\r\n\r\n    {__LINE__, T(\"b{10,}?\"), T(\"bbbbbbbbb\"), \"0\", ECMA},\r\n    {__LINE__, T(\"b{10,}?a\"), T(\"bbbbbbbbba\"), \"0\", ECMA},\r\n    {__LINE__, T(\"b{10,}?\"), T(\"bbbbbbbbbb\"), \"1 0 10\", ECMA},\r\n    {__LINE__, T(\"b{10,}?a\"), T(\"bbbbbbbbbba\"), \"1 0 11\", ECMA},\r\n    {__LINE__, T(\"b{10,}?\"), T(\"bbbbbbbbbbb\"), \"1 0 10\", ECMA},\r\n    {__LINE__, T(\"b{10,}?a\"), T(\"bbbbbbbbbbba\"), \"1 0 12\", ECMA},\r\n    {__LINE__, T(\"b{10,}?\"), T(\"b{10,}?\"), \"1 0 7\", BG},\r\n    {__LINE__, T(\"b\\\\{10,\\\\}?\"), T(\"bbbbbbbbbbb?\"), \"1 0 12\", BG},\r\n    {__LINE__, T(\"b{10,}?\"), T(\"\"), \"-1\", EEA},\r\n\r\n    {__LINE__, T(\"b{10,12}?\"), T(\"bbbbbbbbb\"), \"0\", ECMA},\r\n    {__LINE__, T(\"b{10,12}?a\"), T(\"bbbbbbbbba\"), \"0\", ECMA},\r\n    {__LINE__, T(\"b{10,12}?\"), T(\"bbbbbbbbbb\"), \"1 0 10\", ECMA},\r\n    {__LINE__, T(\"b{10,12}?a\"), T(\"bbbbbbbbbba\"), \"1 0 11\", ECMA},\r\n    {__LINE__, T(\"b{10,12}?\"), T(\"bbbbbbbbbbb\"), \"1 0 10\", ECMA},\r\n    {__LINE__, T(\"b{10,12}?a\"), T(\"bbbbbbbbbbba\"), \"1 0 12\", ECMA},\r\n    {__LINE__, T(\"b{10,12}?a\"), T(\"bbbbbbbbbbbba\"), \"1 0 13\", ECMA},\r\n    {__LINE__, T(\"b{10,12}?a\"), T(\"bbbbbbbbbbbbba\"), \"1 1 14\", ECMA},\r\n    {__LINE__, T(\"b{10,12}?\"), T(\"b{10,12}?\"), \"1 0 9\", BG},\r\n    {__LINE__, T(\"b\\\\{10,12\\\\}?\"), T(\"bbbbbbbbbbb?\"), \"1 0 12\", BG},\r\n    {__LINE__, T(\"b{10,12}?\"), T(\"\"), \"-1\", EEA},\r\n\r\n    {__LINE__, T(\"b*a\"), T(\"a\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"b*a\"), T(\"ba\"), \"1 0 2\", ALL},\r\n    {__LINE__, T(\"b*a\"), T(\"bbbba\"), \"1 0 5\", ALL},\r\n\r\n    {__LINE__, T(\"b+a\"), T(\"b+a\"), \"1 0 3\", BG},\r\n    {__LINE__, T(\"b+a\"), T(\"a\"), \"0\", NOT_BG},\r\n    {__LINE__, T(\"b+a\"), T(\"ba\"), \"1 0 2\", NOT_BG},\r\n    {__LINE__, T(\"b+a\"), T(\"bbbba\"), \"1 0 5\", NOT_BG},\r\n\r\n    {__LINE__, T(\"b?a\"), T(\"b?a\"), \"1 0 3\", BG},\r\n    {__LINE__, T(\"b?a\"), T(\"a\"), \"1 0 1\", NOT_BG},\r\n    {__LINE__, T(\"b?a\"), T(\"ba\"), \"1 0 2\", NOT_BG},\r\n    {__LINE__, T(\"b?a\"), T(\"bba\"), \"1 1 3\", NOT_BG},\r\n\r\n    {__LINE__, T(\"b{10}a\"), T(\"b{10}a\"), \"1 0 6\", BG},\r\n    {__LINE__, T(\"b\\\\{10\\\\}a\"), T(\"bbbbbbbbba\"), \"0\", BG},\r\n    {__LINE__, T(\"b{10}a\"), T(\"bbbbbbbbba\"), \"0\", NOT_BG},\r\n    {__LINE__, T(\"b\\\\{10\\\\}a\"), T(\"bbbbbbbbbba\"), \"1 0 11\", BG},\r\n    {__LINE__, T(\"b{10}a\"), T(\"bbbbbbbbbba\"), \"1 0 11\", NOT_BG},\r\n    {__LINE__, T(\"b\\\\{10\\\\}a\"), T(\"bbbbbbbbbbba\"), \"1 1 12\", BG},\r\n    {__LINE__, T(\"b{10}a\"), T(\"bbbbbbbbbbba\"), \"1 1 12\", NOT_BG},\r\n\r\n    {__LINE__, T(\"b{10,}a\"), T(\"b{10,}a\"), \"1 0 7\", BG},\r\n    {__LINE__, T(\"b\\\\{10,\\\\}a\"), T(\"bbbbbbbbba\"), \"0\", BG},\r\n    {__LINE__, T(\"b{10,}a\"), T(\"bbbbbbbbba\"), \"0\", NOT_BG},\r\n    {__LINE__, T(\"b\\\\{10,\\\\}a\"), T(\"bbbbbbbbbba\"), \"1 0 11\", BG},\r\n    {__LINE__, T(\"b{10,}a\"), T(\"bbbbbbbbbba\"), \"1 0 11\", NOT_BG},\r\n    {__LINE__, T(\"b\\\\{10,\\\\}a\"), T(\"bbbbbbbbbbba\"), \"1 0 12\", BG},\r\n    {__LINE__, T(\"b{10,}a\"), T(\"bbbbbbbbbbba\"), \"1 0 12\", NOT_BG},\r\n\r\n    {__LINE__, T(\"b\\\\{10,12\\\\}a\"), T(\"bbbbbbbbba\"), \"0\", BG},\r\n    {__LINE__, T(\"b{10,12}a\"), T(\"bbbbbbbbba\"), \"0\", NOT_BG},\r\n    {__LINE__, T(\"b\\\\{10,12\\\\}a\"), T(\"bbbbbbbbbba\"), \"1 0 11\", BG},\r\n    {__LINE__, T(\"b{10,12}a\"), T(\"bbbbbbbbbba\"), \"1 0 11\", NOT_BG},\r\n    {__LINE__, T(\"b\\\\{10,12\\\\}a\"), T(\"bbbbbbbbbbba\"), \"1 0 12\", BG},\r\n    {__LINE__, T(\"b{10,12}a\"), T(\"bbbbbbbbbbba\"), \"1 0 12\", NOT_BG},\r\n    {__LINE__, T(\"b\\\\{10,12\\\\}a\"), T(\"bbbbbbbbbbbba\"), \"1 0 13\", BG},\r\n    {__LINE__, T(\"b{10,12}a\"), T(\"bbbbbbbbbbbba\"), \"1 0 13\", NOT_BG},\r\n    {__LINE__, T(\"b\\\\{10,12\\\\}a\"), T(\"bbbbbbbbbbbbba\"), \"1 1 14\", BG},\r\n    {__LINE__, T(\"b{10,12}a\"), T(\"bbbbbbbbbbbbba\"), \"1 1 14\", NOT_BG},\r\n\r\n    {__LINE__, T(\"ab*\"), T(\"abb\"), \"1 0 3\", ALL},\r\n    {__LINE__, T(\"ab{0,0}\"), T(\"ab\"), \"1 0 1\", NOT_BG},\r\n\r\n    // atom escape\r\n    // identity escape\r\n    {__LINE__, T(\"\\\\(\\\\)\\\\^\\\\.\\\\*\\\\+\\\\?\\\\[\\\\]\\\\|\\\\\\\\\\\\-\") T(\"\\\\{\\\\}\\\\,\\\\:\\\\=\\\\!\\\\\\n\\\\\\r\\\\\\b\"),\r\n        T(\"()^.*+?[]|\\\\-{},:=!\\n\\r\\b\"), \"1 0 21\", ECMA},\r\n    {__LINE__, T(\"\\\\.\\\\[\\\\\\\\\\\\*\\\\^\\\\$\"), T(\".[\\\\*^$\"), \"1 0 6\", NOT_ECMA},\r\n    {__LINE__, T(\"\\\\(\\\\)\\\\+\\\\?\\\\{\"), T(\"()+?{\"), \"1 0 5\", EEA},\r\n    {__LINE__, T(\"\\\\\\\"\\\\/\"), T(\"\\\"/\"), \"1 0 2\", AWK},\r\n    // decimal escape\r\n    //! T(\"\\\\0\"), T(\"\\0\"), \"1 0 1\", ECMA,\r\n    {__LINE__, T(\"\\\\01\"), T(\"\\x01\"), \"1 0 1\", AWK},\r\n    {__LINE__, T(\"(x)\\\\1\"), T(\"xx\"), \"2 0 2 0 1\", ECMA},\r\n    {__LINE__, T(\"(x)\\\\1\"), T(\"\"), \"-1\", BASIC | GREP | EXTENDED | EGREP},\r\n    {__LINE__, T(\"\\\\(x\\\\)\\\\1\"), T(\"xx\"), \"2 0 2 0 1\", BG},\r\n    {__LINE__, T(\"(x)\\\\1\"), T(\"x\\x01\"), \"2 0 2 0 1\", AWK},\r\n    {__LINE__, T(\"(x)\\\\2\"), T(\"x\\x02\"), \"2 0 2 0 1\", AWK},\r\n    {__LINE__, T(\"(x\\\\1)\"), T(\"x\\x01\"), \"2 0 2 0 2\", AWK},\r\n\r\n    // character escape\r\n    {__LINE__, T(\"\\\\a\"), T(\"\\a\"), \"1 0 1\", AWK},\r\n    {__LINE__, T(\"\\\\b\"), T(\"\\b\"), \"1 0 1\", AWK},\r\n    {__LINE__, T(\"\\\\f\"), T(\"\\f\"), \"1 0 1\", ECMA | AWK},\r\n    {__LINE__, T(\"\\\\n\"), T(\"\\n\"), \"1 0 1\", ECMA | AWK},\r\n    {__LINE__, T(\"\\\\r\"), T(\"\\r\"), \"1 0 1\", ECMA | AWK},\r\n    {__LINE__, T(\"\\\\t\"), T(\"\\t\"), \"1 0 1\", ECMA | AWK},\r\n    {__LINE__, T(\"\\\\v\"), T(\"\\v\"), \"1 0 1\", ECMA | AWK},\r\n\r\n    {__LINE__, T(\"\\\\ca\"), T(\"\\1\"), \"1 0 1\", ECMA},\r\n\r\n    {__LINE__, T(\"\\\\x1b\"), T(\"\\x1b\"), \"1 0 1\", ECMA},\r\n\r\n#ifdef WIDE\r\n    {__LINE__, T(\"\\\\u12cd\"), T(\"\\u12cd\"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"\\\\u12cd\"), T(\"\"), \"-1\", NOT_ECMA},\r\n#else // defined WIDE\r\n    {__LINE__, T(\"\\\\u12cd\"), T(\"\"), \"-1\", ALL},\r\n#endif // defined WIDE\r\n\r\n    {__LINE__, T(\"\\\\07\"), T(\"\\07\"), \"1 0 1\", AWK},\r\n    {__LINE__, T(\"\\\\177\"), T(\"\\177\"), \"1 0 1\", AWK},\r\n    {__LINE__, T(\"\\\\177\"), T(\"\"), \"-1\", NOT_AWK},\r\n    {__LINE__, T(\"\\\\1777\"), T(\"\\177\") T(\"7\"), \"1 0 2\", AWK},\r\n    {__LINE__, T(\"\\\\39\"), T(\"\\3\") T(\"9\"), \"1 0 2\", AWK},\r\n    {__LINE__, T(\"\\\\39\"), T(\"\"), \"-1\", NOT_AWK},\r\n\r\n    // character class escape\r\n    {__LINE__, T(\"\\\\d\"), T(\"a\"), \"0\", ECMA},\r\n    {__LINE__, T(\"\\\\d\"), T(\"1\"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"\\\\d\"), T(\"\"), \"-1\", NOT_ECMA},\r\n    {__LINE__, T(\"\\\\D\"), T(\"a\"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"\\\\D\"), T(\"1\"), \"0\", ECMA},\r\n    {__LINE__, T(\"\\\\D\"), T(\"\"), \"-1\", NOT_ECMA},\r\n    {__LINE__, T(\"\\\\s\"), T(\"a\"), \"0\", ECMA},\r\n    {__LINE__, T(\"\\\\s\"), T(\" \"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"\\\\s\"), T(\"\"), \"-1\", NOT_ECMA},\r\n    {__LINE__, T(\"\\\\S\"), T(\"a\"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"\\\\S\"), T(\" \"), \"0\", ECMA},\r\n    {__LINE__, T(\"\\\\S\"), T(\"\"), \"-1\", NOT_ECMA},\r\n    {__LINE__, T(\"\\\\w\"), T(\"a\"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"\\\\w\"), T(\" \"), \"0\", ECMA},\r\n    {__LINE__, T(\"\\\\w\"), T(\"\"), \"-1\", NOT_ECMA},\r\n    {__LINE__, T(\"\\\\W\"), T(\"a\"), \"0\", ECMA},\r\n    {__LINE__, T(\"\\\\W\"), T(\" \"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"\\\\W\"), T(\"\"), \"-1\", NOT_ECMA},\r\n\r\n    // character classes\r\n    {__LINE__, T(\"[]\"), T(\"\"), \"0\", ECMA},\r\n    {__LINE__, T(\"[]\"), T(\"\"), \"-1\", NOT_ECMA},\r\n    {__LINE__, T(\"[]]\"), T(\"]\"), \"-1\", ECMA},\r\n    {__LINE__, T(\"[]]\"), T(\"]\"), \"1 0 1\", NOT_ECMA},\r\n    {__LINE__, T(\"[^]\"), T(\"^\"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"[^]]\"), T(\"^\"), \"1 0 1\", NOT_ECMA},\r\n    {__LINE__, T(\"[^]]\"), T(\"]\"), \"0\", NOT_ECMA},\r\n    {__LINE__, T(\"[^]]\"), T(\"a\"), \"1 0 1\", NOT_ECMA},\r\n    {__LINE__, T(\"[abc]\"), T(\"a\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[abc]\"), T(\"b\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[abc]\"), T(\"c\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[abc]\"), T(\"d\"), \"0\", ALL},\r\n    {__LINE__, T(\"[a-z]\"), T(\"a\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[a-z]\"), T(\"b\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[a-z]\"), T(\"c\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[a-z]\"), T(\"d\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[*+?]\"), T(\"*\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[*+?]\"), T(\"+\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[*+?]\"), T(\"?\"), \"1 0 1\", ALL},\r\n\r\n    // numeric escape\r\n    //! T(\"[\\\\0]\"), ALL,\r\n    {__LINE__, T(\"[\\\\1]\"), T(\"\\\\\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\1]\"), T(\"1\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    // character escape\r\n    {__LINE__, T(\"[\\\\a]\"), T(\"\\a\"), \"1 0 1\", AWK},\r\n    {__LINE__, T(\"[\\\\a]\"), T(\"\\\\\"), \"1 0 1\", BASIC | GREP | EXTENDED | EGREP},\r\n    {__LINE__, T(\"[\\\\a]\"), T(\"a\"), \"1 0 1\", ECMA | BASIC | GREP | EXTENDED | EGREP},\r\n\r\n    {__LINE__, T(\"[\\\\b]\"), T(\"\\b\"), \"1 0 1\", AWK | ECMA},\r\n    {__LINE__, T(\"[\\\\b]\"), T(\"\\\\\"), \"1 0 1\", BASIC | GREP | EXTENDED | EGREP},\r\n    {__LINE__, T(\"[\\\\b]\"), T(\"b\"), \"1 0 1\", BASIC | GREP | EXTENDED | EGREP},\r\n\r\n    {__LINE__, T(\"[\\\\f]\"), T(\"\\f\"), \"1 0 1\", ECMA | AWK},\r\n    {__LINE__, T(\"[\\\\f]\"), T(\"\\\\\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\f]\"), T(\"f\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n\r\n    {__LINE__, T(\"[\\\\n]\"), T(\"\\n\"), \"1 0 1\", ECMA | AWK},\r\n    {__LINE__, T(\"[\\\\n]\"), T(\"\\\\\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\n]\"), T(\"n\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n\r\n    {__LINE__, T(\"[\\\\r]\"), T(\"\\r\"), \"1 0 1\", ECMA | AWK},\r\n    {__LINE__, T(\"[\\\\r]\"), T(\"\\\\\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\r]\"), T(\"r\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n\r\n    {__LINE__, T(\"[\\\\t]\"), T(\"\\t\"), \"1 0 1\", ECMA | AWK},\r\n    {__LINE__, T(\"[\\\\t]\"), T(\"\\\\\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\t]\"), T(\"t\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n\r\n    {__LINE__, T(\"[\\\\v]\"), T(\"\\v\"), \"1 0 1\", ECMA | AWK},\r\n    {__LINE__, T(\"[\\\\v]\"), T(\"\\\\\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\v]\"), T(\"v\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n\r\n    {__LINE__, T(\"[\\\\ca]\"), T(\"\\x01\"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"[\\\\c3]\"), T(\"\\\\\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\c3]\"), T(\"c\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\c3]\"), T(\"3\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\c3]\"), T(\"c\"), \"-1\", AWK},\r\n\r\n    {__LINE__, T(\"[\\\\x1b]\"), T(\"\\x1b\"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"[\\\\x1b]\"), T(\"\\\\\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\x1b]\"), T(\"x\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\x1b]\"), T(\"1\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\x1b]\"), T(\"b\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\x1b]\"), T(\"b\"), \"-1\", AWK},\r\n#ifdef WIDE\r\n    {__LINE__, T(\"[\\\\u12cd]\"), T(\"\\u12cd\"), \"1 0 1\", ECMA},\r\n#else // defined WIDE\r\n    {__LINE__, T(\"[\\\\u12cd]\"), T(\"\"), \"-1\", ECMA},\r\n#endif // defined WIDE\r\n    {__LINE__, T(\"[\\\\u12cd]\"), T(\"\\\\\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\u12cd]\"), T(\"u\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\u12cd]\"), T(\"1\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\u12cd]\"), T(\"2\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\u12cd]\"), T(\"c\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\u12cd]\"), T(\"d\"), \"1 0 1\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\u12cd]\"), T(\"d\"), \"-1\", AWK},\r\n\r\n    {__LINE__, T(\"[\\\\\\\\]\"), T(\"\\\\\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[\\\\^]\"), T(\"^\"), \"1 0 1\", NOT_AWK},\r\n    {__LINE__, T(\"[\\\\^]\"), T(\"^\"), \"-1\", AWK},\r\n    {__LINE__, T(\"[\\\\(]\"), T(\"(\"), \"1 0 1\", NOT_AWK},\r\n    {__LINE__, T(\"[\\\\(]\"), T(\"(\"), \"-1\", AWK},\r\n    {__LINE__, T(\"[\\\\)]\"), T(\")\"), \"1 0 1\", NOT_AWK},\r\n    {__LINE__, T(\"[\\\\)]\"), T(\")\"), \"-1\", AWK},\r\n    {__LINE__, T(\"[\\\\{]\"), T(\"{\"), \"1 0 1\", NOT_AWK},\r\n    {__LINE__, T(\"[\\\\{]\"), T(\"{\"), \"-1\", AWK},\r\n    {__LINE__, T(\"[\\\\}]\"), T(\"}\"), \"1 0 1\", NOT_AWK},\r\n    {__LINE__, T(\"[\\\\}]\"), T(\"}\"), \"-1\", AWK},\r\n    {__LINE__, T(\"[\\\\[]\"), T(\"[\"), \"1 0 1\", NOT_AWK},\r\n    {__LINE__, T(\"[\\\\[]\"), T(\"[\"), \"-1\", AWK},\r\n    {__LINE__, T(\"[\\\\]]\"), T(\"]\"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"[\\\\]]\"), T(\"\\\\]\"), \"1 0 2\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\]]\"), T(\"]\"), \"-1\", AWK},\r\n    {__LINE__, T(\"[\\\\+]\"), T(\"+\"), \"1 0 1\", NOT_AWK},\r\n    {__LINE__, T(\"[\\\\+]\"), T(\"+\"), \"-1\", AWK},\r\n    {__LINE__, T(\"[\\\\*]\"), T(\"*\"), \"1 0 1\", NOT_AWK},\r\n    {__LINE__, T(\"[\\\\*]\"), T(\"*\"), \"-1\", AWK},\r\n    {__LINE__, T(\"[\\\\?]\"), T(\"?\"), \"1 0 1\", NOT_AWK},\r\n    {__LINE__, T(\"[\\\\?]\"), T(\"?\"), \"-1\", AWK},\r\n\r\n    // character class escape\r\n    {__LINE__, T(\"[\\\\d]\"), T(\"1\"), \"0\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\d]\"), T(\"1\"), \"-1\", AWK},\r\n    {__LINE__, T(\"[\\\\D]\"), T(\"a\"), \"0\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\D]\"), T(\"a\"), \"-1\", AWK},\r\n    {__LINE__, T(\"[\\\\s]\"), T(\" \"), \"0\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\s]\"), T(\" \"), \"-1\", AWK},\r\n    {__LINE__, T(\"[\\\\S]\"), T(\"a\"), \"0\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\S]\"), T(\"a\"), \"-1\", AWK},\r\n    {__LINE__, T(\"[\\\\w]\"), T(\"a\"), \"0\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\w]\"), T(\"a\"), \"-1\", AWK},\r\n    {__LINE__, T(\"[\\\\W]\"), T(\" \"), \"0\", BASIC | EXTENDED | GREP | EGREP},\r\n    {__LINE__, T(\"[\\\\W]\"), T(\" \"), \"-1\", AWK},\r\n\r\n    // named character classes\r\n    {__LINE__, T(\"[[:alnum:]]\"), T(\"b\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:alnum:]]\"), T(\"1\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:alnum:]]\"), T(\" \"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:alpha:]]\"), T(\"b\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:alpha:]]\"), T(\"1\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:alpha:]]\"), T(\" \"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:blank:]]\"), T(\"b\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:blank:]]\"), T(\"1\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:blank:]]\"), T(\"\\t\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:cntrl:]]\"), T(\"b\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:cntrl:]]\"), T(\"1\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:cntrl:]]\"), T(\"\\a\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:digit:]]\"), T(\"b\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:digit:]]\"), T(\"1\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:digit:]]\"), T(\" \"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:graph:]]\"), T(\"b\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:graph:]]\"), T(\"1\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:graph:]]\"), T(\" \"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:graph:]]\"), T(\"!\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:lower:]]\"), T(\"A\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:lower:]]\"), T(\"a\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:lower:]]\"), T(\"0\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:print:]]\"), T(\"b\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:print:]]\"), T(\"1\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:print:]]\"), T(\" \"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:print:]]\"), T(\"!\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:print:]]\"), T(\"\\a\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:punct:]]\"), T(\"b\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:punct:]]\"), T(\"1\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:punct:]]\"), T(\" \"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:punct:]]\"), T(\"!\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:space:]]\"), T(\"b\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:space:]]\"), T(\"1\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:space:]]\"), T(\" \"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:space:]]\"), T(\"\\a\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:upper:]]\"), T(\"A\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:upper:]]\"), T(\"a\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:upper:]]\"), T(\"0\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:xdigit:]]\"), T(\"b\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:xdigit:]]\"), T(\"g\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[:xdigit:]]\"), T(\"1\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[[:xdigit:]]\"), T(\" \"), \"0\", ALL},\r\n#ifndef _M_CEE_PURE\r\n    {__LINE__, T(\"[[=x=]]\"), T(\"X\"), \"0\", ALL},\r\n    {__LINE__, T(\"[[=x=]]\"), T(\"x\"), \"1 0 1\", ALL},\r\n#endif // ^^^ !defined(_M_CEE_PURE) ^^^\r\n\r\n    // character class ranges\r\n    {__LINE__, T(\"[-]\"), T(\"-\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[a-f]\"), T(\"a\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[a-f]\"), T(\"f\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[a-f]\"), T(\"g\"), \"0\", ALL},\r\n    {__LINE__, T(\"[a-a]\"), T(\"a\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[a-a]\"), T(\"b\"), \"0\", ALL},\r\n    {__LINE__, T(\"[a-a]\"), T(\"-\"), \"0\", ALL},\r\n    {__LINE__, T(\"[-a-f]\"), T(\"-\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[-a-f]\"), T(\"a\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[-a-f]\"), T(\"f\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[-a-f]\"), T(\"g\"), \"0\", ALL},\r\n    {__LINE__, T(\"[a-f-]\"), T(\"-\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[a-f-]\"), T(\"a\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[a-f-]\"), T(\"f\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[a-f-]\"), T(\"g\"), \"0\", ALL},\r\n    {__LINE__, T(\"[a-f-g-i]\"), T(\"a\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[a-f-g-i]\"), T(\"f\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[a-f-g-i]\"), T(\"g\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[a-f-g-i]\"), T(\"i\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[a-f-g-i]\"), T(\"-\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[a-f-g-i]\"), T(\"j\"), \"0\", ALL},\r\n\r\n    // negation\r\n    {__LINE__, T(\"[^]\"), T(\"^\"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"[^]\"), T(\"a\"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"[^^]\"), T(\"^\"), \"0\", ALL},\r\n    {__LINE__, T(\"[^^]\"), T(\"a\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[^a-f]\"), T(\"a\"), \"0\", ALL},\r\n    {__LINE__, T(\"[^a-f]\"), T(\"f\"), \"0\", ALL},\r\n    {__LINE__, T(\"[^a-f]\"), T(\"g\"), \"1 0 1\", ALL},\r\n    {__LINE__, T(\"[^^-a-f]\"), T(\"^\"), \"0\", ALL},\r\n    {__LINE__, T(\"[^^-a-f]\"), T(\"-\"), \"0\", ALL},\r\n    {__LINE__, T(\"[^^-a-f]\"), T(\"a\"), \"0\", ALL},\r\n    {__LINE__, T(\"[^^-a-f]\"), T(\"f\"), \"0\", ALL},\r\n    {__LINE__, T(\"[^^-a-f]\"), T(\"g\"), \"1 0 1\", ALL},\r\n\r\n    // capture groups\r\n    {__LINE__, T(\"(a)\"), T(\"aaa\"), \"2 0 1 0 1\", NOT_BG},\r\n    {__LINE__, T(\"()\"), T(\"\"), \"2 0 0 0 0\", ECMA},\r\n    {__LINE__, T(\"()\"), T(\"()\"), \"1 0 2\", BG},\r\n    {__LINE__, T(\"(\"), T(\"(\"), \"1 0 1\", BG},\r\n    {__LINE__, T(\")\"), T(\")\"), \"1 0 1\", NOT_ECMA},\r\n    {__LINE__, T(\"((((((((((((((((((((a))))))))))))))))))))\\\\18\"), T(\"aa\"),\r\n        \"21 0 2 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 \"\r\n        \"0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1\",\r\n        ECMA},\r\n    {__LINE__, T(\"((((((((((((((((((((a))))))))))))))))))))\"), T(\"a\"),\r\n        \"21 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 \"\r\n        \"0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1\",\r\n        NOT_BG},\r\n\r\n    // non-capture groups\r\n    {__LINE__, T(\"(?:abc)\"), T(\"abc\"), \"1 0 3\", ECMA},\r\n    {__LINE__, T(\"(?:abc)|(?:def)\"), T(\"abc\"), \"1 0 3\", ECMA},\r\n    {__LINE__, T(\"(?:abc)|(?:def)\"), T(\"def\"), \"1 0 3\", ECMA},\r\n    {__LINE__, T(\"(?:(abc))\"), T(\"abc\"), \"2 0 3 0 3\", ECMA},\r\n\r\n    // positive assert\r\n    {__LINE__, T(\"(?=a(bc)).\"), T(\"abcd\"), \"2 0 1 1 3\", ECMA},\r\n\r\n    // negative assert\r\n    {__LINE__, T(\"(?!abc).\"), T(\"abcd\"), \"1 1 2\", ECMA},\r\n\r\n    // maximum munch\r\n    {__LINE__, T(\"(week|wee)(knights|night)\"), T(\"weeknights\"), \"3 0 9 0 4 4 9\", ECMA},\r\n    {__LINE__, T(\"(week|wee)(knights|night)\"), T(\"weeknights\"), \"3 0 10 0 3 3 10\", EEA},\r\n    {__LINE__, T(\"(wee|week)(knights|night)\"), T(\"weeknights\"), \"3 0 10 0 3 3 10\", EEA},\r\n\r\n    {__LINE__, T(\"a|ab\"), T(\"abc\"), \"1 0 1\", ECMA},\r\n    {__LINE__, T(\"a|ab\"), T(\"abc\"), \"1 0 2\", EEA},\r\n\r\n    {__LINE__, T(\"(a|ab)b*\"), T(\"ab\"), \"2 0 2 0 1\", ECMA},\r\n    {__LINE__, T(\"(a|ab)b*\"), T(\"ab\"), \"2 0 2 0 2\", EEA},\r\n\r\n    {__LINE__, T(\"(a+|.*a)(b|bc)c*d\"), T(\"abcd\"), \"3 0 4 0 1 1 2\", ECMA},\r\n    {__LINE__, T(\"(a+|.*a)(b|bc)c*d\"), T(\"abcd\"), \"3 0 4 0 1 1 3\", EEA},\r\n\r\n    // ECMAScript examples\r\n    {__LINE__, T(\"((a)|(ab))((c)|(bc))\"), T(\"abc\"), \"7 0 3 0 1 0 1 -1 -1 1 3 -1 -1 1 3\", ECMA},\r\n    {__LINE__, T(\"((a)|(ab))((c)|(bc))\"), T(\"abc\"), \"7 0 3 0 2 -1 -1 0 2 2 3 2 3 -1 -1\", EEA},\r\n    {__LINE__, T(\"a[a-z]{2,4}\"), T(\"abcdefghi\"), \"1 0 5\", NOT_BG},\r\n    {__LINE__, T(\"a[a-z]\\\\{2,4\\\\}\"), T(\"abcdefghi\"), \"1 0 5\", BASIC | GREP},\r\n    {__LINE__, T(\"a[a-z]{2,4}?\"), T(\"abcdefghi\"), \"1 0 3\", ECMA},\r\n    {__LINE__, T(\"(aa|aabaac|ba|b|c)*\"), T(\"aabaac\"), \"2 0 4 2 4\", ECMA},\r\n    {__LINE__, T(\"(aa|aabaac|ba|b|c)*\"), T(\"aabaac\"), \"2 0 6 0 6\", EEA},\r\n    {__LINE__, T(\"(z)((a+)?(b+)?(c))*\"), T(\"zaacbbbcac\"), \"6 0 10 0 1 8 10 8 9 -1 -1 9 10\", ECMA},\r\n    {__LINE__, T(\"(a*)b\\\\1+\"), T(\"baaaac\"), \"2 0 1 0 0\", ECMA},\r\n    {__LINE__, T(\"(?=(a+))\"), T(\"baaabac\"), \"2 1 1 1 4\", ECMA},\r\n    {__LINE__, T(\"(?=(a+))a*b\\\\1\"), T(\"baaabac\"), \"2 3 6 3 4\", ECMA},\r\n    {__LINE__, T(\"(.*?)a(?!(a+)b\\\\2c)\\\\2(.*)\"), T(\"baaabaac\"), \"4 0 8 0 2 -1 -1 3 8\", ECMA},\r\n\r\n    // other\r\n    {__LINE__, T(\"a(((b)))c\"), T(\"abc\"), \"4 0 3 1 2 1 2 1 2\", NOT_BG},\r\n    {__LINE__, T(\"a(b|(c))d\"), T(\"abd\"), \"3 0 3 1 2 -1 -1\", NOT_BG},\r\n    {__LINE__, T(\"a(b|(c))d\"), T(\"acd\"), \"3 0 3 1 2 1 2\", NOT_BG},\r\n    {__LINE__, T(\"a(b*|c)d\"), T(\"abbd\"), \"2 0 4 1 3\", NOT_BG},\r\n    {__LINE__, T(\"a[ab]{20}\"), T(\"aaaaabaaaabaaaabaaaab\"), \"1 0 21\", NOT_BG},\r\n    {__LINE__, T(\"a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab]\") T(\"[ab][ab][ab][ab][ab][ab][ab][ab]\"),\r\n        T(\"aaaaabaaaabaaaabaaaab\"), \"1 0 21\", ALL},\r\n    {__LINE__,\r\n        T(\"a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab]\")\r\n            T(\"[ab][ab][ab][ab][ab][ab][ab][ab](week|wee)(knights|night)\"),\r\n        T(\"aaaaabaaaabaaaabaaaabweeknights\"), \"3 0 30 21 25 25 30\", ECMA},\r\n    {__LINE__,\r\n        T(\"a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab]\")\r\n            T(\"[ab][ab][ab][ab][ab][ab][ab][ab](week|wee)(knights|night)\"),\r\n        T(\"aaaaabaaaabaaaabaaaabweeknights\"), \"3 0 31 21 24 24 31\", EXTENDED | EGREP | AWK},\r\n    {__LINE__, T(\"1234567890123456789012345678901234567890123456789\") T(\"012345678901234567890\"),\r\n        T(\"a1234567890123456789012345678901234567890123456789\") T(\"012345678901234567890b\"), \"1 1 71\", ALL},\r\n    {__LINE__, T(\"[ab][cd][ef][gh][ij][kl][mn]\"), T(\"xacegikmoq\"), \"1 1 8\", ALL},\r\n    {__LINE__, T(\"[ab][cd][ef][gh][ij][kl][mn][op]\"), T(\"xacegikmoq\"), \"1 1 9\", ALL},\r\n    {__LINE__, T(\"[ab][cd][ef][gh][ij][kl][mn][op][qr]\"), T(\"xacegikmoqy\"), \"1 1 10\", ALL},\r\n    {__LINE__, T(\"[ab][cd][ef][gh][ij][kl][mn][op][q]\"), T(\"xacegikmoqy\"), \"1 1 10\", ALL},\r\n\r\n    {__LINE__, T(\"(a)(b)(c)(d)(e)(f)(g)(h)\"), T(\"zabcdefghi\"), \"9 1 9 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9\", NOT_BG},\r\n    {__LINE__, T(\"(a)(b)(c)(d)(e)(f)(g)(h)(i)\"), T(\"zabcdefghij\"), \"10 1 10 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10\",\r\n        NOT_BG},\r\n    {__LINE__, T(\"(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)\"), T(\"zabcdefghijk\"),\r\n        \"11 1 11 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11\", NOT_BG},\r\n    {__LINE__, T(\"(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\"), T(\"zabcdefghijkl\"),\r\n        \"12 1 12 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12\", NOT_BG},\r\n    {__LINE__, T(\"(a)d|(b)c\"), T(\"abc\"), \"3 1 3 -1 -1 1 2\", NOT_BG},\r\n    {__LINE__, T(\"_+((www)|(ftp)|(mailto)):_*\"), T(\"_wwwnocolon _mailto:\"), \"5 12 20 13 19 -1 -1 -1 -1 13 19\", NOT_BG},\r\n    {__LINE__, T(\"a(b)?c\\\\1d\"), T(\"acd\"), \"2 0 3 -1 -1\", ECMA},\r\n    {__LINE__, T(\"a(b?c)+d\"), T(\"accd\"), \"2 0 4 2 3\", NOT_BG},\r\n    {__LINE__, T(\".*\"), T(\"abc\"), \"1 0 3\", NOT_BG},\r\n    {__LINE__, T(\"a(b|(c))d\"), T(\"abd\"), \"3 0 3 1 2 -1 -1\", NOT_BG},\r\n    {__LINE__, T(\"a(b|(c))d\"), T(\"acd\"), \"3 0 3 1 2 1 2\", NOT_BG},\r\n    {__LINE__, T(\"a(b*|c|e)d\"), T(\"abbd\"), \"2 0 4 1 3\", NOT_BG},\r\n    {__LINE__, T(\"a(b*|c|e)d\"), T(\"acd\"), \"2 0 3 1 2\", NOT_BG},\r\n    {__LINE__, T(\"a(b*|c|e)d\"), T(\"ad\"), \"2 0 2 1 1\", NOT_BG},\r\n    {__LINE__, T(\"a(b?)c\"), T(\"abc\"), \"2 0 3 1 2\", NOT_BG},\r\n    {__LINE__, T(\"a(b?)c\"), T(\"ac\"), \"2 0 2 1 1\", NOT_BG},\r\n    {__LINE__, T(\"a(b+)c\"), T(\"abc\"), \"2 0 3 1 2\", NOT_BG},\r\n    {__LINE__, T(\"a(b+)c\"), T(\"abbbc\"), \"2 0 5 1 4\", NOT_BG},\r\n    {__LINE__, T(\"a(b*)c\"), T(\"ac\"), \"2 0 2 1 1\", NOT_BG},\r\n    {__LINE__, T(\"(a|ab)(bc([de]+)f|cde)\"), T(\"abcdef\"), \"4 0 6 0 1 1 6 3 5\", NOT_BG},\r\n    {__LINE__, T(\"a([bc]?)c\"), T(\"abc\"), \"2 0 3 1 2\", NOT_BG},\r\n    {__LINE__, T(\"a([bc]?)c\"), T(\"ac\"), \"2 0 2 1 1\", NOT_BG},\r\n    {__LINE__, T(\"a([bc]+)c\"), T(\"abc\"), \"2 0 3 1 2\", NOT_BG},\r\n    {__LINE__, T(\"a([bc]+)c\"), T(\"abcc\"), \"2 0 4 1 3\", NOT_BG},\r\n    {__LINE__, T(\"a([bc]+)bc\"), T(\"abcbc\"), \"2 0 5 1 3\", NOT_BG},\r\n    {__LINE__, T(\"a(bb+|b)b\"), T(\"abb\"), \"2 0 3 1 2\", NOT_BG},\r\n    {__LINE__, T(\"a(bbb+|bb+|b)b\"), T(\"abb\"), \"2 0 3 1 2\", NOT_BG},\r\n    {__LINE__, T(\"a(bbb+|bb+|b)b\"), T(\"abbb\"), \"2 0 4 1 3\", NOT_BG},\r\n    {__LINE__, T(\"a(bbb+|bb+|b)bb\"), T(\"abbb\"), \"2 0 4 1 2\", NOT_BG},\r\n    {__LINE__, T(\"(.*).*\"), T(\"abcdef\"), \"2 0 6 0 6\", NOT_BG},\r\n    {__LINE__, T(\"(a*)*\"), T(\"bc\"), \"2 0 0 -1 -1\", ECMA},\r\n    {__LINE__, T(\"(a*)*\"), T(\"bc\"), \"2 0 0 0 0\", EEA},\r\n    {__LINE__, T(\"a(b|c)*d\"), T(\"ad\"), \"2 0 2 -1 -1\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c)*d\"), T(\"abcd\"), \"2 0 4 2 3\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c)+d\"), T(\"abd\"), \"2 0 3 1 2\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c)+d\"), T(\"abcd\"), \"2 0 4 2 3\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c?)+d\"), T(\"ad\"), \"2 0 2 1 1\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c?)+d\"), T(\"abcd\"), \"2 0 4 2 3\", ECMA},\r\n    {__LINE__, T(\"a(b|c){0,0}d\"), T(\"ad\"), \"2 0 2 -1 -1\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){0,1}d\"), T(\"ad\"), \"2 0 2 -1 -1\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){0,1}d\"), T(\"abd\"), \"2 0 3 1 2\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){0,2}d\"), T(\"ad\"), \"2 0 2 -1 -1\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){0,2}d\"), T(\"abcd\"), \"2 0 4 2 3\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){0,}d\"), T(\"ad\"), \"2 0 2 -1 -1\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){0,}d\"), T(\"abcd\"), \"2 0 4 2 3\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){1,1}d\"), T(\"abd\"), \"2 0 3 1 2\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){1,2}d\"), T(\"abd\"), \"2 0 3 1 2\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){1,2}d\"), T(\"abcd\"), \"2 0 4 2 3\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){1,}d\"), T(\"abd\"), \"2 0 3 1 2\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){1,}d\"), T(\"abcd\"), \"2 0 4 2 3\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){2,2}d\"), T(\"acbd\"), \"2 0 4 2 3\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){2,2}d\"), T(\"abcd\"), \"2 0 4 2 3\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){2,4}d\"), T(\"abcd\"), \"2 0 4 2 3\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){2,4}d\"), T(\"abcbd\"), \"2 0 5 3 4\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){2,4}d\"), T(\"abcbcd\"), \"2 0 6 4 5\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){2,}d\"), T(\"abcd\"), \"2 0 4 2 3\", NOT_BG},\r\n    {__LINE__, T(\"a(b|c){2,}d\"), T(\"abcbd\"), \"2 0 5 3 4\", NOT_BG},\r\n    {__LINE__, T(\"a(b+|((c)*))+d\"), T(\"abd\"), \"4 0 3 1 2 -1 -1 -1 -1\", ECMA},\r\n    {__LINE__, T(\"a(b+|((c)*))+d\"), T(\"abcd\"), \"4 0 4 2 3 2 3 2 3\", ECMA},\r\n    {__LINE__, T(\"/\\\\*([^*]|\\\\*+[^*/])*\\\\*+/\"), T(\"/* here is a block comment */\"), \"2 0 29 26 27\", NOT_BG},\r\n    {__LINE__, T(\"/\\\\*([^*]|\\\\*+[^*/])*\\\\*+/\"), T(\"/**/\"), \"2 0 4 -1 -1\", NOT_BG},\r\n    {__LINE__, T(\"/\\\\*([^*]|\\\\*+[^*/])*\\\\*+/\"), T(\"/***/\"), \"2 0 5 -1 -1\", NOT_BG},\r\n    {__LINE__, T(\"/\\\\*([^*]|\\\\*+[^*/])*\\\\*+/\"), T(\"/****/\"), \"2 0 6 -1 -1\", NOT_BG},\r\n    {__LINE__, T(\"/\\\\*([^*]|\\\\*+[^*/])*\\\\*+/\"), T(\"/*****/\"), \"2 0 7 -1 -1\", NOT_BG},\r\n    {__LINE__, T(\"/\\\\*([^*]|\\\\*+[^*/])*\\\\*+/\"), T(\"/*****/*/\"), \"2 0 7 -1 -1\", NOT_BG},\r\n\r\n    {__LINE__, T(\"((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)?\"), T(\"0xFF\"),\r\n        \"7 0 4 0 4 0 4 -1 -1 -1 -1 -1 -1 -1 -1\", NOT_BG},\r\n    {__LINE__, T(\"((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)?\"), T(\"35\"),\r\n        \"7 0 2 0 2 -1 -1 0 2 -1 -1 -1 -1 -1 -1\", NOT_BG},\r\n    {__LINE__, T(\"((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)?\"), T(\"0xFFu\"),\r\n        \"7 0 5 0 4 0 4 -1 -1 -1 -1 -1 -1 -1 -1\", NOT_BG},\r\n    {__LINE__, T(\"((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)?\"), T(\"0xFFL\"),\r\n        \"7 0 5 0 4 0 4 -1 -1 4 5 -1 -1 -1 -1\", NOT_BG},\r\n    {__LINE__, T(\"((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)?\"), T(\"0xFFFFFFFFFFFFFFFFuint64\"),\r\n        \"7 0 24 0 18 0 18 -1 -1 19 24 19 24 22 24\", NOT_BG},\r\n    {__LINE__, T(\"(\\\\.[[:alnum:]]+){2}\"), T(\"w.a.b\"), \"2 1 5 3 5\", NOT_BG},\r\n\r\n    {__LINE__, T(\"^[[:blank:]]*#([^\\\\n]*\\\\\\\\[[:space:]]+)*[^\\\\n]*\"), T(\"#define some_symbol\"), \"2 0 19 -1 -1\",\r\n        ECMA | AWK},\r\n    {__LINE__, T(\"^[[:blank:]]*#([^\\\\n]*\\\\\\\\[[:space:]]+)*[^\\\\n]*\"), T(\"#define some_symbol(x) #x\"), \"2 0 25 -1 -1\",\r\n        ECMA | AWK},\r\n    {__LINE__, T(\"^[[:blank:]]*#([^\\\\n]*\\\\\\\\[[:space:]]+)*[^\\\\n]*\"),\r\n        T(\"#define some_symbol(x) \\\\  \\r\\n  cat();\\\\\\r\\n   printf(#x);\"), \"2 0 53 30 42\", ECMA},\r\n    {__LINE__, T(\"^[[:blank:]]*#([^\\\\n]*\\\\\\\\[[:space:]]+)*[^\\\\n]*\"),\r\n        T(\"#define some_symbol(x) \\\\  \\r\\n  cat();\\\\\\r\\n   printf(#x);\"), \"2 0 53 28 42\", AWK},\r\n};\r\n\r\nstatic STD string check_matches(\r\n    STD match_results<const CHR*>& match) { // generate string representing matched capture groups\r\n    STD ostringstream mtch;\r\n    mtch << match.size();\r\n    for (CSTD size_t i = 0; i < match.size(); ++i) { // append i-th capture group\r\n        if (match[i].matched) {\r\n            mtch << ' ' << match.position(i) << ' ' << (match.position(i) + match.length(i));\r\n        } else {\r\n            mtch << \" -1 -1\";\r\n        }\r\n    }\r\n    return mtch.str();\r\n}\r\n\r\nstatic void check_match(unsigned int line, const CHR* re, const CHR* txt, const char* mtch,\r\n    const char* res) { // compare actual result with expected result\r\n    const CHR* p;\r\n    STD string str;\r\n\r\n    for (p = re; *p != 0; ++p) {\r\n        str.append(1, (char) *p);\r\n    }\r\n    str.append(\" |\");\r\n    for (p = txt; *p != 0; ++p) {\r\n        str.append(1, (char) *p);\r\n    }\r\n    str.append(\"|\");\r\n\r\n    check_str(str.c_str(), __FILE__, line, mtch, res);\r\n}\r\n\r\nstatic void test_opt(STD regex_constants::syntax_option_type opts) { // do all valid tests for option set opts\r\n    for (size_t i = 0; i < sizeof(tests) / sizeof(tests[0]); ++i) {\r\n        if (tests[i].valid & lang(opts)) { // do one test\r\n#if NO_EXCEPTIONS\r\n            STD basic_regex<CHR> re(tests[i].re, opts);\r\n            STD match_results<const CHR*> match;\r\n            STD regex_search((const CHR*) tests[i].txt, tests[i].txt + xlen(tests[i].txt), match, re,\r\n                STD regex_constants::match_default);\r\n            check_match(tests[i].line, tests[i].re, tests[i].txt, check_matches(match).c_str(), tests[i].res);\r\n\r\n#else // NO_EXCEPTIONS\r\n            try { // do one test\r\n                STD basic_regex<CHR> re(tests[i].re, opts);\r\n                STD match_results<const CHR*> match;\r\n                STD regex_search((const CHR*) tests[i].txt, tests[i].txt + xlen(tests[i].txt), match, re,\r\n                    STD regex_constants::match_default);\r\n                check_match(tests[i].line, tests[i].re, tests[i].txt, check_matches(match).c_str(), tests[i].res);\r\n            } catch (const STD regex_error&) { // catch invalid expression\r\n                check_match(tests[i].line, tests[i].re, tests[i].txt, \"-1\", tests[i].res);\r\n            }\r\n#endif // NO_EXCEPTIONS\r\n        }\r\n    }\r\n}\r\n\r\nvoid test_main() { // test all six regular expression languages\r\n    if (!terse) {\r\n        puts(\"Testing ECMAScript\");\r\n    }\r\n    test_opt(STD regex_constants::ECMAScript);\r\n\r\n    if (!terse) {\r\n        puts(\"Testing UNIX BRE\");\r\n    }\r\n    test_opt(STD regex_constants::basic);\r\n\r\n    if (!terse) {\r\n        puts(\"Testing grep\");\r\n    }\r\n    test_opt(STD regex_constants::grep);\r\n\r\n    if (!terse) {\r\n        puts(\"Testing UNIX ERE\");\r\n    }\r\n    test_opt(STD regex_constants::extended);\r\n\r\n    if (!terse) {\r\n        puts(\"Testing egrep\");\r\n    }\r\n    test_opt(STD regex_constants::egrep);\r\n\r\n    if (!terse) {\r\n        puts(\"Testing awk\");\r\n    }\r\n    test_opt(STD regex_constants::awk);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/regex3/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <regex> header, part 3\r\n#define TEST_NAME \"<regex>, part 3\"\r\n\r\n#include \"tdefs.h\"\r\n#include <regex>\r\n#include <stddef.h>\r\n#include <string.h>\r\n\r\n#define ADD_FACET(loc, pfac) STD locale(loc, pfac)\r\n\r\n#ifdef WIDE\r\n#define T(x)                  L##x\r\n#define xlen(x)               wcslen(x)\r\n#define CHECKSTR(left, right) CHECK_WSTR(left, right)\r\ntypedef wchar_t CHR;\r\ntypedef STD wstring STDString;\r\n\r\n#else // defined WIDE\r\n#define T(x)                  x\r\n#define xlen(x)               CSTD strlen(x)\r\n#define CHECKSTR(left, right) CHECK_STR(left, right)\r\ntypedef char CHR;\r\ntypedef STD string STDString;\r\n#endif // defined WIDE\r\n\r\ntypedef STD regex_traits<CHR> MyTr;\r\ntypedef STD sub_match<const CHR*> MySm;\r\ntypedef STD match_results<const CHR*> MyMr;\r\ntypedef STD basic_regex<CHR> MyRgx;\r\n\r\nstatic STD locale loc;\r\n\r\n// static data\r\nSTD regex_constants::syntax_option_type synflags[] = {\r\n    // array of flag values\r\n    STD regex_constants::ECMAScript,\r\n    STD regex_constants::basic,\r\n    STD regex_constants::extended,\r\n    STD regex_constants::awk,\r\n    STD regex_constants::grep,\r\n    STD regex_constants::egrep,\r\n    STD regex_constants::icase,\r\n    STD regex_constants::nosubs,\r\n    STD regex_constants::optimize,\r\n    STD regex_constants::collate,\r\n};\r\n\r\nSTD regex_constants::match_flag_type mtchflags[] = {\r\n    // array of flag values\r\n    STD regex_constants::match_default,\r\n    STD regex_constants::match_not_bol,\r\n    STD regex_constants::match_not_eol,\r\n    STD regex_constants::match_not_bow,\r\n    STD regex_constants::match_not_eow,\r\n    STD regex_constants::match_any,\r\n    STD regex_constants::match_not_null,\r\n    STD regex_constants::match_continuous,\r\n    STD regex_constants::match_prev_avail,\r\n    STD regex_constants::format_default,\r\n    STD regex_constants::format_sed,\r\n    STD regex_constants::format_no_copy,\r\n    STD regex_constants::format_first_only,\r\n};\r\n\r\nSTD regex_constants::error_type errflags[] = {\r\n    // array of flag values\r\n    STD regex_constants::error_collate,\r\n    STD regex_constants::error_ctype,\r\n    STD regex_constants::error_escape,\r\n    STD regex_constants::error_backref,\r\n    STD regex_constants::error_brack,\r\n    STD regex_constants::error_paren,\r\n    STD regex_constants::error_brace,\r\n    STD regex_constants::error_badbrace,\r\n    STD regex_constants::error_range,\r\n    STD regex_constants::error_space,\r\n    STD regex_constants::error_badrepeat,\r\n    STD regex_constants::error_complexity,\r\n    STD regex_constants::error_stack,\r\n};\r\n\r\nconst CHR* class_names[] = {\r\n    // array of character class names\r\n    T(\"d\"),\r\n    T(\"w\"),\r\n    T(\"s\"),\r\n    T(\"alnum\"),\r\n    T(\"alpha\"),\r\n    T(\"blank\"),\r\n    T(\"cntrl\"),\r\n    T(\"digit\"),\r\n    T(\"graph\"),\r\n    T(\"lower\"),\r\n    T(\"print\"),\r\n    T(\"punct\"),\r\n    T(\"space\"),\r\n    T(\"upper\"),\r\n    T(\"xdigit\"),\r\n};\r\n\r\nstruct Myxctype : public STD ctype<CHR> { // degenerate locale facet\r\nprotected:\r\n    CHR do_tolower(CHR) const { // convert to lowercase\r\n        return T('a');\r\n    }\r\n\r\n    const CHR* do_tolower(CHR*, const CHR*) const { // convert to lowercase\r\n        return T(\"s\");\r\n    }\r\n};\r\n\r\nstruct Myxcollate : public STD collate<CHR> { // degenerate locale facet\r\npublic:\r\n    STDString do_transform(const CHR*, const CHR*) const { // generate comparison key\r\n        return T(\"ABC\");\r\n    }\r\n};\r\n\r\nstruct MyTraits : STD regex_traits<CHR> { // degenerate traits class\r\n    CHR translate(CHR ch) const { // generate unnatural collation order\r\n        return ch == T('a') ? T('c') : ch == T('c') ? T('a') : ch == T('d') ? T('e') : ch == T('f') ? T('e') : ch;\r\n    }\r\n};\r\n\r\ntypedef STD basic_regex<CHR, MyTraits> MyxRgx;\r\n\r\nstruct fwdit { // forward iterator that wraps char *\r\n    using iterator_category = STD forward_iterator_tag;\r\n    using value_type        = CHR;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = CHR*;\r\n    using reference         = CHR&;\r\n\r\n    fwdit() : ptr(nullptr) { // construct\r\n    }\r\n\r\n    fwdit(CHR* p) : ptr(p) { // construct from char *\r\n    }\r\n\r\n    bool operator==(const fwdit& other) const { // compare for equality\r\n        return ptr == other.ptr;\r\n    }\r\n\r\n    bool operator!=(const fwdit& other) const { // compare for inequality\r\n        return !(*this == other);\r\n    }\r\n\r\n    CHR& operator*() const { // dereference\r\n        return *ptr;\r\n    }\r\n\r\n    fwdit& operator++() { // preincrement\r\n        ++ptr;\r\n        return *this;\r\n    }\r\n\r\n    fwdit operator++(int) { // postincrement\r\n        fwdit res = *this;\r\n        ++ptr;\r\n        return res;\r\n    }\r\n\r\nprivate:\r\n    CHR* ptr;\r\n};\r\n\r\nstruct bidit { // bidirectional iterator that wraps const char *\r\n    using iterator_category = STD bidirectional_iterator_tag;\r\n    using value_type        = CHR;\r\n    using difference_type   = ptrdiff_t;\r\n    using pointer           = CHR*;\r\n    using reference         = CHR&;\r\n\r\n    bidit() : ptr(nullptr) { // construct\r\n    }\r\n\r\n    bidit(const CHR* p) : ptr(p) { // construct from pointer\r\n    }\r\n\r\n    bool operator==(const bidit& other) const { // compare for equality\r\n        return ptr == other.ptr;\r\n    }\r\n\r\n    bool operator!=(const bidit& other) const { // compare for inequality\r\n        return !(*this == other);\r\n    }\r\n\r\n    const CHR& operator*() const { // dereference\r\n        return *ptr;\r\n    }\r\n\r\n    bidit& operator++() { // preincrement\r\n        ++ptr;\r\n        return *this;\r\n    }\r\n\r\n    bidit operator++(int) { // postincrement\r\n        bidit res = *this;\r\n        ++ptr;\r\n        return res;\r\n    }\r\n\r\n    bidit& operator--() { // predecrement\r\n        --ptr;\r\n        return *this;\r\n    }\r\n\r\n    bidit operator--(int) { // postdecrement\r\n        bidit res = *this;\r\n        --ptr;\r\n        return res;\r\n    }\r\n\r\nprivate:\r\n    const CHR* ptr;\r\n};\r\n\r\ntypedef STD regex_iterator<bidit> MyIter;\r\ntypedef STD regex_token_iterator<bidit> MyTokIter;\r\n\r\nstatic void test_uncoveredfunctions() {\r\n    // basic_regex& assign(InIt first, InIt last,\r\n    // flag_type flags = ECMAScript)\r\n    STDString str(T(\"a(b)cd\"));\r\n    MyRgx r0;\r\n    r0.assign(str.begin(), str.end() - 1);\r\n    CHECK_INT(r0.flags(), MyRgx::ECMAScript);\r\n    CHECK_INT(r0.mark_count(), 1);\r\n\r\n    r0.assign(str.begin(), str.begin() + 1);\r\n    CHECK_INT(r0.flags(), MyRgx::ECMAScript);\r\n    CHECK_INT(r0.mark_count(), 0);\r\n\r\n    // size_type max_size() const\r\n    // match_results& operator=(const match_results& right)\r\n    MyRgx rgx(T(\"c(a*)|(b)\"));\r\n    MyMr mr;\r\n    MyMr mr1;\r\n    CHR carr[] = T(\"xcaaay\");\r\n    CHECK(STD regex_search(carr, mr, rgx));\r\n    mr1 = mr;\r\n\r\n    MyMr::size_type maxsiz = mr1.max_size(); // how to check max_size?\r\n    maxsiz                 = maxsiz; // to quiet \"unused\" warnings\r\n    CHECK(!mr1.empty());\r\n    CHECKSTR(mr1.str().c_str(), T(\"caaa\"));\r\n\r\n    // const basic_string<Elem> *operator->()\r\n    const CHR* pat = T(\"aaxaayaaz\");\r\n    MyTokIter::regex_type rx(T(\"(a)a\"));\r\n    MyTokIter next(pat, pat + xlen(pat), rx);\r\n    MyTokIter end;\r\n\r\n    for (; next != end; ++next) {\r\n        CHECKSTR(next->str().c_str(), T(\"aa\"));\r\n    }\r\n\r\n    // difference_type length() const\r\n    MySm sub = mr[1];\r\n    CHECK_INT(sub.matched, 1);\r\n    CHECK_INT(sub.length(), 3);\r\n\r\n    // int compare(const sub_match& right) const\r\n    // int compare(const basic_string<value_type>& right) const\r\n    // int compare(const value_type *right) const\r\n    const MySm::value_type* ptr = T(\"aab\");\r\n    CHECK(sub.compare(ptr) < 0);\r\n    CHECK(0 < sub.compare(STDString(T(\"AAA\"))));\r\n    CHECK_INT(sub.compare(sub), 0);\r\n\r\n    // basic_string<value_type> str() const\r\n    CHECKSTR(sub.str().c_str(), T(\"aaa\"));\r\n    // operator basic_string<value_type>() const\r\n    STDString str1 = sub;\r\n    CHECKSTR(str1.c_str(), sub.str().c_str());\r\n\r\n    // void swap(match_results<BidIt, Alloc>& left,\r\n    // match_results<BidIt, Alloc>& right) throw()\r\n    MyMr mr0;\r\n    STD swap(mr0, mr);\r\n    CHECK(mr.empty());\r\n    CHECK(!mr0.empty());\r\n    CHECKSTR(mr0.str().c_str(), T(\"caaa\"));\r\n}\r\n\r\nstatic void test_error(const CHR* expr, STD regex_constants::error_type err) {\r\n#if NO_EXCEPTIONS\r\n#else // NO_EXCEPTIONS\r\n    try {\r\n        MyRgx rgx(expr);\r\n    } catch (const STD regex_error& ex) {\r\n        CHECK_INT(ex.code(), err);\r\n        return;\r\n    }\r\n\r\n    CHECK_MSG(\"error should have been caught\", false);\r\n#endif // NO_EXCEPTIONS\r\n}\r\n\r\nstatic void test_uncoveredflags() {\r\n    // error_collate -- the expression contained an invalid collating\r\n    // element name\r\n    // error_complexity -- an attempted match failed because it was\r\n    // too complex\r\n    test_error(T(\"[[....]-1.]\"), STD regex_constants::error_collate);\r\n    test_error(T(\"[[====]1=]\"), STD regex_constants::error_collate);\r\n    test_error(T(\"[[....]1.]\"), STD regex_constants::error_collate);\r\n    // test_error(T(\"((((((((((((((((((((((((((((((((a\")\r\n    //     T(\"))))))))))))))))))))))))))))))))\"),\r\n    //     STD regex_constants::error_complexity);\r\n}\r\n\r\nstatic void test_uncoveredgrammar() {\r\n    // test \".\"\r\n    MyRgx rx1;\r\n    MyRgx rx2;\r\n    STDString str1(T(\"Cats are cute\\n Dogs are friendly\"));\r\n    STDString str2(T(\"Prime number\"));\r\n    STDString str3(T(\"aaaqxzbbb\"));\r\n    STDString str4(T(\"aaa\\nxzbbb\"));\r\n    for (const STD regex_constants::syntax_option_type flag : {\r\n             STD regex_constants::ECMAScript,\r\n             STD regex_constants::syntax_option_type(),\r\n         }) {\r\n        rx1.assign(T(\".*\"), flag);\r\n        rx2.assign(T(\"aaa...bbb\"), flag);\r\n        CHECK(!STD regex_match(str1, rx1));\r\n        CHECK(STD regex_match(str2, rx1));\r\n        CHECK(STD regex_match(str3, rx2));\r\n        CHECK(!STD regex_match(str4, rx2));\r\n    }\r\n}\r\n\r\nstatic void test_capturegroups() {\r\n    // There are limitations to the number of supported capture groups\r\n    // (31 in case of ECMAScript)\r\n    // And in BRE and grep grammars, only the first 9 capture groups\r\n    // will be considered.  ?? how to verify\r\n    MyMr mr0;\r\n    MyMr mr1;\r\n    MyMr mr2;\r\n    const CHR* chr  = T(\"abcdefghijklmnopqrstuvwxyz123456\");\r\n    const CHR* chr1 = T(\"abcdefghijklmnoi\");\r\n\r\n    MyRgx rx0(T(\"(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)\") T(\"(p)(q)(r)(s)(t)(u)(v)(w)(x)(y)(z)(1)(2)(3)(4)(5)\"),\r\n        MyRgx::ECMAScript);\r\n    CHECK(STD regex_search(chr, mr0, rx0));\r\n    CHECKSTR(mr0[31].str().c_str(), T(\"5\"));\r\n\r\n    MyRgx rx1(T(\"\\\\(a\\\\)\\\\(b\\\\)\\\\(c\\\\)\\\\(d\\\\)\\\\(e\\\\)\\\\(f\\\\)\\\\(g\\\\)\")\r\n                  T(\"\\\\(h\\\\)\\\\(i\\\\)\\\\(j\\\\)\\\\(k\\\\)\\\\(l\\\\)\\\\(m\\\\)\\\\(n\\\\)\\\\(o\\\\)\\\\9\"),\r\n        MyRgx::basic);\r\n    STD regex_search(chr, mr1, rx1);\r\n    CHECKSTR(mr1[15].str().c_str(), T(\"\"));\r\n    CHECK(STD regex_search(chr1, mr1, rx1));\r\n    CHECKSTR(mr1[15].str().c_str(), T(\"o\"));\r\n    CHECKSTR(mr1[9].str().c_str(), T(\"i\"));\r\n\r\n    MyRgx rx2(T(\"\\\\(a\\\\)\\\\(b\\\\)\\\\(c\\\\)\\\\(d\\\\)\\\\(e\\\\)\\\\(f\\\\)\\\\(g\\\\)\")\r\n                  T(\"\\\\(h\\\\)\\\\(i\\\\)\\\\(j\\\\)\\\\(k\\\\)\\\\(l\\\\)\\\\(m\\\\)\\\\(n\\\\)\\\\(o\\\\)\\\\9\"),\r\n        MyRgx::grep);\r\n    STD regex_search(chr, mr2, rx2);\r\n    CHECKSTR(mr2[15].str().c_str(), T(\"\"));\r\n    CHECK(STD regex_search(chr1, mr2, rx2));\r\n    CHECKSTR(mr2[15].str().c_str(), T(\"o\"));\r\n    CHECKSTR(mr2[9].str().c_str(), T(\"i\"));\r\n\r\n#if NO_EXCEPTIONS\r\n#else // NO_EXCEPTIONS\r\n    try {\r\n        MyRgx rgx(T(\"\\\\(a\\\\)\\\\(b\\\\)\\\\(c\\\\)\\\\(d\\\\)\\\\(e\\\\)\\\\(f\\\\)\\\\(g\\\\)\")\r\n                      T(\"\\\\(h\\\\)\\\\(i\\\\)\\\\(j\\\\)\\\\(k\\\\)\\\\(l\\\\)\\\\(m\\\\)\\\\(n\\\\)\\\\(o\\\\)\\\\10\"),\r\n            MyRgx::grep);\r\n    } catch (const STD regex_error& ex) {\r\n        CHECK_INT(ex.code(), STD regex_constants::error_backref);\r\n        CHECK_MSG(\"error has been caught\", true);\r\n    }\r\n#endif // NO_EXCEPTIONS\r\n}\r\n\r\nstatic void test_iterators() { // needs refining after ++ fixed\r\n    const CHR* pat = T(\"ax\");\r\n    MyIter::regex_type rx(T(\"a\"));\r\n    MyIter iter(pat, pat + xlen(pat), rx);\r\n    CHECKSTR(iter->str().c_str(), T(\"a\"));\r\n    STD match_results<bidit> mr = *iter;\r\n    CHECK_INT(mr.position(0), 0);\r\n    CHECK_INT(mr.length(0), 1);\r\n    MyTokIter toIter(pat, pat + xlen(pat), rx);\r\n    CHECKSTR(toIter->str().c_str(), T(\"a\"));\r\n    toIter++;\r\n#if NO_EXCEPTIONS\r\n#else // NO_EXCEPTIONS\r\n    try { // we can't handle all exceptions now.\r\n        // STD sub_match<bidit> sm(*toIter);\r\n        // STD sub_match<bidit> sm(*end);\r\n        // toIter->str();\r\n        // end->str();\r\n        // MyTokIter temp = ++end;\r\n    } catch (...) {\r\n    }\r\n#endif // NO_EXCEPTIONS\r\n}\r\n\r\nvoid test_main() { // test header <regex>\r\n    test_uncoveredfunctions();\r\n    test_uncoveredflags();\r\n    test_uncoveredgrammar();\r\n    test_capturegroups();\r\n    test_iterators();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/regex4/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <regex> header, part 4\r\n#define TEST_NAME \"<regex> interesting inputs, part 4\"\r\n\r\n#include \"tdefs.h\"\r\n#include <regex>\r\n#include <sstream>\r\n#include <string.h>\r\n\r\n#ifdef WIDE\r\n#define T(x)                  L##x\r\n#define xlen(x)               wcslen(x)\r\n#define CHECKSTR(left, right) CHECK_WSTR(left, right)\r\ntypedef wchar_t CHR;\r\ntypedef STD wstring STDString;\r\n\r\n#else // defined WIDE\r\n#define T(x)                  x\r\n#define xlen(x)               CSTD strlen(x)\r\n#define CHECKSTR(left, right) CHECK_STR(left, right)\r\ntypedef char CHR;\r\ntypedef STD string STDString;\r\n#endif // defined WIDE\r\n\r\ntypedef STD match_results<const CHR*> MyMr;\r\ntypedef STD basic_regex<CHR> MyRgx;\r\n\r\nstruct regex_testBool { // test parameters and results\r\n    const CHR* strRegex;\r\n    const CHR* strText;\r\n    int len; // hard code the length\r\n    int expectedOutput;\r\n};\r\n\r\nstruct regex_testStr { // test parameters and results\r\n    const CHR* strRegex;\r\n    const CHR* strText;\r\n    int len; // hard code the length\r\n    const CHR* expectedOutput;\r\n};\r\n\r\nstatic const regex_testBool search_tests[] = {\r\n    // tests\r\n    {T(\"\"), T(\"\"), 0, 1},\r\n    {T(\"\\\\0\"), T(\"\\0\"), 1, 1},\r\n    {T(\"\\\\0\\\\0\\\\0\\\\0\\\\0\"), T(\"\\0\\0\\0\\0\\0\"), 5, 1},\r\n    {T(\"\\\\0This string has a leading null!\"), T(\"\\0This string has a leading null!\"), 32, 1},\r\n    {T(\"This string has a trailing null!\\\\0\"), T(\"This string has a trailing null!\\0\"), 33, 1},\r\n    {T(\"There is a null to the right!\\\\0There is a null to the left!\"),\r\n        T(\"There is a null to the right!\\0There is a null to the left!\"), 58, 1},\r\n};\r\n\r\nstatic const regex_testBool match_tests[] = {\r\n    // tests\r\n    {T(\"\"), T(\"\"), 0, 1},\r\n    {T(\"\\\\0\"), T(\"\\0\"), 1, 1},\r\n    {T(\"\\\\0\\\\0\\\\0\\\\0\\\\0\"), T(\"\\0\\0\\0\\0\\0\"), 5, 1},\r\n    {T(\"\\\\0This string has a leading null!\"), T(\"\\0This string has a leading null!\"), 32, 1},\r\n    {T(\"This string has a trailing null!\\\\0\"), T(\"This string has a trailing null!\\0\"), 33, 1},\r\n    {T(\"There is a null to the right!\\\\0There is a null to the left!\"),\r\n        T(\"There is a null to the right!\\0There is a null to the left!\"), 58, 1},\r\n};\r\n\r\nstatic const regex_testStr replace_tests[] = {\r\n    // tests\r\n    {T(\"\"), T(\"\"), 0, T(\"x\")},\r\n    {T(\"\\\\0\"), T(\"\\0\"), 1, T(\"x\")},\r\n    {T(\"\\\\0\\\\0\\\\0\\\\0\\\\0\"), T(\"\\0\\0\\0\\0\\0\"), 5, T(\"x\")},\r\n    {T(\"\\\\0This string has a leading null!\"), T(\"\\0This string has a leading null!\"), 32, T(\"x\")},\r\n    {T(\"This string has a trailing null!\\\\0\"), T(\"This string has a trailing null!\\0\"), 33, T(\"x\")},\r\n    {T(\"There is a null to the right!\\\\0There is a null to the left!\"),\r\n        T(\"There is a null to the right!\\0There is a null to the left!\"), 58, T(\"x\")},\r\n};\r\n\r\nstatic void test_regex_search() {\r\n    for (size_t i = 0; i < sizeof(search_tests) / sizeof(search_tests[0]); ++i) { // do one test\r\n#if NO_EXCEPTIONS\r\n        MyRgx re(search_tests[i].strRegex);\r\n        MyMr match;\r\n        CHECK_INT(STD regex_search((const CHR*) search_tests[i].strText, search_tests[i].strText + search_tests[i].len,\r\n                      match, re, STD regex_constants::match_default),\r\n            search_tests[i].expectedOutput);\r\n\r\n#else // NO_EXCEPTIONS\r\n        try { // do one test\r\n            MyRgx re(search_tests[i].strRegex);\r\n            MyMr match;\r\n            CHECK_INT(STD regex_search((const CHR*) search_tests[i].strText,\r\n                          search_tests[i].strText + search_tests[i].len, match, re, STD regex_constants::match_default),\r\n                search_tests[i].expectedOutput);\r\n        } catch (const STD regex_error&) { // catch invalid expression\r\n            CHECK_INT(search_tests[i].expectedOutput, 0);\r\n        }\r\n#endif // NO_EXCEPTIONS\r\n    }\r\n}\r\n\r\nstatic void test_regex_match() {\r\n    for (size_t i = 0; i < sizeof(match_tests) / sizeof(match_tests[0]); ++i) { // do one test\r\n#if NO_EXCEPTIONS\r\n        MyRgx re(match_tests[i].strRegex);\r\n        MyMr match;\r\n        CHECK_INT(STD regex_match((const CHR*) match_tests[i].strText, match_tests[i].strText + match_tests[i].len,\r\n                      match, re, STD regex_constants::match_default),\r\n            match_tests[i].expectedOutput);\r\n\r\n#else // NO_EXCEPTIONS\r\n        try { // do one test\r\n            MyRgx re(match_tests[i].strRegex);\r\n            MyMr match;\r\n            CHECK_INT(STD regex_match((const CHR*) match_tests[i].strText, match_tests[i].strText + match_tests[i].len,\r\n                          match, re, STD regex_constants::match_default),\r\n                match_tests[i].expectedOutput);\r\n        } catch (const STD regex_error&) { // catch invalid expression\r\n            CHECK_INT(match_tests[i].expectedOutput, 0);\r\n        }\r\n#endif // NO_EXCEPTIONS\r\n    }\r\n}\r\n\r\ntemplate <class T>\r\nstruct Myalloc {\r\n    typedef T value_type;\r\n\r\n    Myalloc() {}\r\n\r\n    template <class U>\r\n    Myalloc(const Myalloc<U>&) {}\r\n\r\n    T* allocate(size_t n) {\r\n        return STD allocator<T>{}.allocate(n);\r\n    }\r\n\r\n    void deallocate(T* p, size_t n) {\r\n        STD allocator<T>{}.deallocate(p, n);\r\n    }\r\n\r\n    template <class U>\r\n    bool operator==(const Myalloc<U>&) const {\r\n        return true;\r\n    }\r\n\r\n    template <class U>\r\n    bool operator!=(const Myalloc<U>&) const {\r\n        return false;\r\n    }\r\n};\r\n\r\nstatic void test_regex_replace() { // test function regex_replace\r\n    CHR out[100];\r\n    STD basic_string<char, STD char_traits<char>, Myalloc<char>> fmt(T(\"x\"));\r\n\r\n    for (size_t i = 0; i < sizeof(replace_tests) / sizeof(replace_tests[0]); ++i) { // do one test\r\n#if NO_EXCEPTIONS\r\n        MyRgx re(replace_tests[i].strRegex);\r\n        CHR* res = STD regex_replace(out, (const CHR*) replace_tests[i].strText,\r\n            replace_tests[i].strText + replace_tests[i].len, re, fmt, STD regex_constants::match_default);\r\n        *res     = '\\0';\r\n        CHECKSTR(out, replace_tests[i].expectedOutput);\r\n\r\n#else // NO_EXCEPTIONS\r\n        try { // do one test\r\n            MyRgx re(replace_tests[i].strRegex);\r\n            CHR* res = STD regex_replace(out, (const CHR*) replace_tests[i].strText,\r\n                replace_tests[i].strText + replace_tests[i].len, re, fmt, STD regex_constants::match_default);\r\n            *res     = '\\0';\r\n            CHECKSTR(out, replace_tests[i].expectedOutput);\r\n        } catch (const STD regex_error&) { // catch invalid expression\r\n            CHECKSTR(replace_tests[i].expectedOutput, T(\"0\"));\r\n        }\r\n#endif // NO_EXCEPTIONS\r\n    }\r\n}\r\n\r\nvoid test_main() { // test header <regex>\r\n    test_regex_search();\r\n    test_regex_match();\r\n    test_regex_replace();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/scoped_allocator/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <scoped_allocator> C++11 additions\r\n#define TEST_NAME \"<scoped_allocator>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <scoped_allocator>\r\n#include <tuple>\r\n\r\ntypedef STD allocator<char> Myal_char;\r\ntypedef STD allocator<int> Myal_int;\r\ntypedef STD allocator<float> Myal_float;\r\n\r\ntypedef STD scoped_allocator_adaptor<Myal_char> Myscoped1c;\r\ntypedef STD scoped_allocator_adaptor<Myal_int> Myscoped1i;\r\ntypedef STD scoped_allocator_adaptor<Myal_float> Myscoped1f;\r\n\r\nint one = 1;\r\nint two = 2;\r\n\r\nvoid t_one() { // test one allocator\r\n    CHECK_TYPE(Myscoped1i::outer_allocator_type, Myal_int);\r\n    CHECK_TYPE(Myscoped1i::inner_allocator_type, Myscoped1i);\r\n\r\n    CHECK_TYPE(Myscoped1i::value_type, int);\r\n    CHECK_TYPE(Myscoped1i::pointer, int*);\r\n    CHECK_TYPE(Myscoped1i::const_pointer, const int*);\r\n    CHECK_TYPE(Myscoped1i::void_pointer, void*);\r\n    CHECK_TYPE(Myscoped1i::const_void_pointer, const void*);\r\n\r\n    CHECK_TYPE(Myscoped1i::size_type, STD size_t);\r\n    CHECK_TYPE(Myscoped1i::difference_type, STD ptrdiff_t);\r\n\r\n    CHECK_TYPE(Myscoped1i::propagate_on_container_copy_assignment, STD false_type);\r\n    CHECK_TYPE(Myscoped1i::propagate_on_container_move_assignment, STD true_type);\r\n    CHECK_TYPE(Myscoped1i::propagate_on_container_swap, STD false_type);\r\n\r\n    CHECK_TYPE(Myscoped1i::is_always_equal, STD true_type);\r\n\r\n    CHECK_TYPE(Myscoped1i::rebind<float>::other, Myscoped1f);\r\n\r\n    Myscoped1c al1c;\r\n    Myscoped1i al1i(al1c);\r\n    Myscoped1f al1f = al1c;\r\n    CHECK(al1i == al1f);\r\n    CHECK(!(al1i != al1f));\r\n}\r\n\r\ntypedef STD scoped_allocator_adaptor<Myal_char, Myal_float> Myscoped2cf;\r\ntypedef STD scoped_allocator_adaptor<Myal_int, Myal_float> Myscoped2if;\r\ntypedef STD scoped_allocator_adaptor<Myal_float, Myal_float> Myscoped2ff;\r\n\r\nvoid t_two() { // test two allocators\r\n    CHECK_TYPE(Myscoped2cf::outer_allocator_type, Myal_char);\r\n    CHECK_TYPE(Myscoped2cf::inner_allocator_type, Myscoped1f);\r\n    CHECK_TYPE(Myscoped2cf::value_type, char);\r\n    CHECK_TYPE(Myscoped2cf::pointer, char*);\r\n    CHECK_TYPE(Myscoped2cf::const_pointer, const char*);\r\n    CHECK_TYPE(Myscoped2cf::void_pointer, void*);\r\n    CHECK_TYPE(Myscoped2cf::const_void_pointer, const void*);\r\n\r\n    CHECK_TYPE(Myscoped2cf::size_type, STD size_t);\r\n    CHECK_TYPE(Myscoped2cf::difference_type, STD ptrdiff_t);\r\n\r\n    CHECK_TYPE(Myscoped2cf::propagate_on_container_copy_assignment, STD false_type);\r\n    CHECK_TYPE(Myscoped2cf::propagate_on_container_move_assignment, STD true_type);\r\n    CHECK_TYPE(Myscoped2cf::propagate_on_container_swap, STD false_type);\r\n\r\n    CHECK_TYPE(Myscoped2cf::rebind<float>::other, Myscoped2ff);\r\n    Myscoped2cf al2cf;\r\n    Myscoped2if al2if(al2cf);\r\n    al2if = al2cf;\r\n\r\n    Myscoped2ff al2ff = al2cf;\r\n    CHECK(al2ff == al2cf);\r\n    CHECK(!(al2ff != al2cf));\r\n\r\n    CHECK(Myscoped2cf() == Myscoped2ff());\r\n    CHECK(!(Myscoped2cf() != Myscoped2ff()));\r\n}\r\n\r\ntypedef STD scoped_allocator_adaptor<Myal_char, Myal_int, Myal_float> Myscoped3cif;\r\ntypedef STD scoped_allocator_adaptor<Myal_int, Myal_int, Myal_float> Myscoped3iif;\r\ntypedef STD scoped_allocator_adaptor<Myal_float, Myal_int, Myal_float> Myscoped3fif;\r\n\r\nvoid t_three() { // test three allocators\r\n    CHECK_TYPE(Myscoped3cif::outer_allocator_type, Myal_char);\r\n    CHECK_TYPE(Myscoped3cif::inner_allocator_type, Myscoped2if);\r\n    CHECK_TYPE(Myscoped3cif::value_type, char);\r\n    CHECK_TYPE(Myscoped3cif::pointer, char*);\r\n    CHECK_TYPE(Myscoped3cif::const_pointer, const char*);\r\n    CHECK_TYPE(Myscoped3cif::void_pointer, void*);\r\n    CHECK_TYPE(Myscoped3cif::const_void_pointer, const void*);\r\n\r\n    CHECK_TYPE(Myscoped3cif::size_type, STD size_t);\r\n    CHECK_TYPE(Myscoped3cif::difference_type, STD ptrdiff_t);\r\n\r\n    CHECK_TYPE(Myscoped3cif::propagate_on_container_copy_assignment, STD false_type);\r\n    CHECK_TYPE(Myscoped3cif::propagate_on_container_move_assignment, STD true_type);\r\n    CHECK_TYPE(Myscoped3cif::propagate_on_container_swap, STD false_type);\r\n\r\n    CHECK_TYPE(Myscoped3cif::rebind<int>::other, Myscoped3iif);\r\n    Myscoped3cif al3cif;\r\n    Myscoped3iif al3iif(al3cif);\r\n    al3iif = al3cif;\r\n\r\n    Myscoped3fif al3fif = al3cif;\r\n    CHECK(al3fif == al3cif);\r\n    CHECK(!(al3fif != al3cif));\r\n\r\n    CHECK(Myscoped3cif() == Myscoped3fif());\r\n    CHECK(!(Myscoped3cif() != Myscoped3fif()));\r\n}\r\n\r\ntemplate <class Ty>\r\nclass Min_alloc { // minimal allocator\r\npublic:\r\n    typedef Ty value_type;\r\n\r\n    Min_alloc() {}\r\n    template <class Other>\r\n    Min_alloc(const Min_alloc<Other>&) {}\r\n\r\n    Ty* allocate(size_t count) {\r\n        return (Ty*) ::operator new(count * sizeof(Ty));\r\n    }\r\n\r\n    void deallocate(Ty* ptr, size_t) {\r\n        ::operator delete(ptr);\r\n    }\r\n};\r\n\r\ntemplate <class Ty, class Other>\r\nbool operator==(const Min_alloc<Ty>&, const Min_alloc<Other>&) {\r\n    return true;\r\n}\r\n\r\ntemplate <class Ty, class Other>\r\nbool operator!=(const Min_alloc<Ty>&, const Min_alloc<Other>&) {\r\n    return false;\r\n}\r\n\r\nvoid t_minimal() { // test against minimal allocator\r\n    STD scoped_allocator_adaptor<Min_alloc<char>> myal;\r\n\r\n    char* pch = myal.allocate(1);\r\n    CHECK(pch != nullptr);\r\n    myal.construct(pch, 'x');\r\n    CHECK_INT(*pch, 'x');\r\n    myal.destroy(pch);\r\n    myal.deallocate(pch, 1);\r\n\r\n    CHECK(myal.max_size() == static_cast<STD size_t>(-1));\r\n    CHECK(myal.select_on_container_copy_construction() == myal);\r\n}\r\n\r\nvoid t_pair() { // test pair construction\r\n    typedef STD pair<int, int> Pairii;\r\n    typedef Myscoped1i::rebind<Pairii>::other Myscopedpii;\r\n    Myscopedpii mypal;\r\n\r\n    Pairii* pii = mypal.allocate(1);\r\n    mypal.construct(pii, STD piecewise_construct, STD forward_as_tuple(one), STD forward_as_tuple(two));\r\n    CHECK_INT(pii->first, 1);\r\n    CHECK_INT(pii->second, 2);\r\n    mypal.destroy(pii);\r\n    mypal.deallocate(pii, 1);\r\n}\r\n\r\nstruct Allocable1 { // supports leading allocator only\r\n    Allocable1(STD allocator_arg_t, const STD allocator<int>&) : Myval(0) {}\r\n\r\n    Allocable1(STD allocator_arg_t, const STD allocator<int>&, const Allocable1& right) : Myval(right.Myval) {}\r\n\r\n    Allocable1(STD allocator_arg_t, const STD allocator<int>&, int val) : Myval(val) {}\r\n\r\n    Allocable1(int) : Myval(-2) {}\r\n\r\n    Allocable1() : Myval(-3) {}\r\n\r\n    int Myval;\r\n};\r\n\r\nstruct Allocable2 { // supports trailing allocator only\r\n    Allocable2(const STD allocator<int>&) : Myval(0) {}\r\n\r\n    Allocable2(const Allocable2& right, const STD allocator<int>&) : Myval(right.Myval) {}\r\n\r\n    Allocable2(int val, const STD allocator<int>&) : Myval(val) {}\r\n\r\n    Allocable2(int) : Myval(-2) {}\r\n\r\n    Allocable2() : Myval(-3) {}\r\n\r\n    int Myval;\r\n};\r\n\r\nnamespace std {\r\n    template <class Alloc>\r\n    struct uses_allocator<Allocable1, Alloc> : true_type {};\r\n\r\n    template <class Alloc>\r\n    struct uses_allocator<Allocable2, Alloc> : true_type {};\r\n} // namespace std\r\n\r\nvoid t_pair_alloc() { // test pair construction with allocators\r\n    { // test no allocators\r\n        typedef STD pair<int, int> Pair1a;\r\n        typedef STD scoped_allocator_adaptor<STD allocator<Pair1a>> Myscopedp1a;\r\n        Myscopedp1a mypal;\r\n\r\n        Pair1a* p1a = mypal.allocate(1);\r\n        CHECK(p1a != nullptr);\r\n        mypal.construct(p1a, STD piecewise_construct, STD forward_as_tuple(one), STD forward_as_tuple(two));\r\n        CHECK_INT(p1a->first, 1);\r\n        CHECK_INT(p1a->second, 2);\r\n        mypal.destroy(p1a);\r\n        mypal.deallocate(p1a, 1);\r\n    }\r\n\r\n    { // test leading allocators\r\n        typedef STD pair<Allocable1, Allocable1> Pair1a;\r\n        typedef STD scoped_allocator_adaptor<STD allocator<Pair1a>> Myscopedp1a;\r\n        Myscopedp1a mypal;\r\n\r\n        Pair1a* p1a = mypal.allocate(1);\r\n        CHECK(p1a != nullptr);\r\n        mypal.construct(p1a, STD piecewise_construct, STD forward_as_tuple(one), STD forward_as_tuple(two));\r\n        CHECK_INT(p1a->first.Myval, 1);\r\n        CHECK_INT(p1a->second.Myval, 2);\r\n        mypal.destroy(p1a);\r\n        mypal.deallocate(p1a, 1);\r\n    }\r\n\r\n    { // test trailing allocators\r\n        typedef STD pair<Allocable2, Allocable2> Pair1a;\r\n        typedef STD scoped_allocator_adaptor<STD allocator<Pair1a>> Myscopedp1a;\r\n        Myscopedp1a mypal;\r\n\r\n        Pair1a* p1a = mypal.allocate(1);\r\n        CHECK(p1a != nullptr);\r\n        mypal.construct(p1a, STD piecewise_construct, STD forward_as_tuple(one), STD forward_as_tuple(two));\r\n        CHECK_INT(p1a->first.Myval, 1);\r\n        CHECK_INT(p1a->second.Myval, 2);\r\n        mypal.destroy(p1a);\r\n        mypal.deallocate(p1a, 1);\r\n    }\r\n}\r\n\r\nvoid test_main() { // run tests\r\n    t_one();\r\n    t_two();\r\n    t_three();\r\n    t_minimal();\r\n    t_pair();\r\n    t_pair_alloc();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/set/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <set>\r\n#define TEST_NAME \"<set>\"\r\n\r\n#define _HAS_AUTO_PTR_ETC 1\r\n\r\n#include \"tdefs.h\"\r\n#include <functional>\r\n#include <set>\r\n#include <stddef.h>\r\n\r\nstruct Wrapped_char { // wrap a char\r\n    Wrapped_char(char ch = 0) : mych(ch) { // construct from char\r\n    }\r\n\r\n    operator char() const { // cast to char\r\n        return mych;\r\n    }\r\n\r\n    char mych;\r\n};\r\n\r\ntemplate <class _Ty>\r\nstruct Myless : public STD binary_function<_Ty, _Ty, bool> { // functor for operator<\r\n    typedef int is_transparent;\r\n\r\n    bool operator()(const _Ty& _Left, const _Ty& _Right) const { // apply operator< to operands\r\n        return (char) _Left < (char) _Right;\r\n    }\r\n};\r\n\r\ntemplate <class Mypred>\r\nvoid test_set() { // test set\r\n    typedef STD allocator<char> Myal;\r\n    typedef STD set<char, Mypred, Myal> Mycont;\r\n    char ch = '\\0', carr[] = \"abc\", carr2[] = \"def\";\r\n\r\n    typename Mycont::key_type* p_key         = (char*) nullptr;\r\n    typename Mycont::key_compare* p_kcomp    = (Mypred*) nullptr;\r\n    typename Mycont::allocator_type* p_alloc = (Myal*) nullptr;\r\n    typename Mycont::value_type* p_val       = (char*) nullptr;\r\n    typename Mycont::value_compare* p_vcomp  = (Mypred*) nullptr;\r\n    typename Mycont::pointer p_ptr           = (char*) nullptr;\r\n    typename Mycont::const_pointer p_cptr    = (const char*) nullptr;\r\n    typename Mycont::reference p_ref         = ch;\r\n    typename Mycont::const_reference p_cref  = (const char&) ch;\r\n    typename Mycont::size_type* p_size       = (CSTD size_t*) nullptr;\r\n    typename Mycont::difference_type* p_diff = (CSTD ptrdiff_t*) nullptr;\r\n\r\n    p_key   = p_key; // to quiet diagnostics\r\n    p_kcomp = p_kcomp;\r\n    p_alloc = p_alloc;\r\n    p_val   = p_val;\r\n    p_vcomp = p_vcomp;\r\n    p_ptr   = p_ptr;\r\n    p_cptr  = p_cptr;\r\n    p_ptr   = &p_ref;\r\n    p_cptr  = &p_cref;\r\n    p_size  = p_size;\r\n    p_diff  = p_diff;\r\n\r\n    Mycont v0;\r\n    Myal al = v0.get_allocator();\r\n    Mypred pred;\r\n    Mycont v0a(pred), v0b(pred, al);\r\n    CHECK(v0.empty());\r\n    CHECK_INT(v0.size(), 0);\r\n    CHECK_INT(v0a.size(), 0);\r\n    CHECK(v0a.get_allocator() == al);\r\n    CHECK_INT(v0b.size(), 0);\r\n    CHECK(v0b.get_allocator() == al);\r\n\r\n    Mycont v1(carr, carr + 3);\r\n    CHECK_INT(v1.size(), 3);\r\n    CHECK_INT(*v1.begin(), 'a');\r\n\r\n    Mycont v2(carr, carr + 3, pred);\r\n    CHECK_INT(v2.size(), 3);\r\n    CHECK_INT(*v2.begin(), 'a');\r\n\r\n    Mycont v3(carr, carr + 3, pred, al);\r\n    CHECK_INT(v3.size(), 3);\r\n    CHECK_INT(*v3.begin(), 'a');\r\n\r\n    const Mycont v4(carr, carr + 3);\r\n    CHECK_INT(v4.size(), 3);\r\n    CHECK_INT(*v4.begin(), 'a');\r\n    v0 = v4;\r\n    CHECK_INT(v0.size(), 3);\r\n    CHECK_INT(*v0.begin(), 'a');\r\n    CHECK(v0.size() <= v0.max_size());\r\n\r\n    STD set<char, Mypred>* p_cont = &v0;\r\n\r\n    p_cont = p_cont; // to quiet diagnostics\r\n\r\n    { // check iterator generators\r\n        typename Mycont::iterator p_it(v1.begin());\r\n        typename Mycont::const_iterator p_cit(v4.begin());\r\n        typename Mycont::reverse_iterator p_rit(v1.rbegin());\r\n        typename Mycont::const_reverse_iterator p_crit(v4.rbegin());\r\n        CHECK_INT(*p_it, 'a');\r\n        CHECK_INT(*--(p_it = v1.end()), 'c');\r\n        CHECK_INT(*p_cit, 'a');\r\n        CHECK_INT(*--(p_cit = v4.end()), 'c');\r\n        CHECK_INT(*p_rit, 'c');\r\n        CHECK_INT(*--(p_rit = v1.rend()), 'a');\r\n        CHECK_INT(*p_crit, 'c');\r\n        CHECK_INT(*--(p_crit = v4.rend()), 'a');\r\n\r\n        typename Mycont::const_iterator p_it1 = typename Mycont::const_iterator();\r\n        typename Mycont::const_iterator p_it2 = typename Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    { // check const iterators generators\r\n        typename Mycont::const_iterator p_it(v1.cbegin());\r\n        typename Mycont::const_iterator p_cit(v4.cbegin());\r\n        typename Mycont::const_reverse_iterator p_rit(v1.crbegin());\r\n        typename Mycont::const_reverse_iterator p_crit(v4.crbegin());\r\n        CHECK_INT(*p_it, 'a');\r\n        CHECK_INT(*--(p_it = v1.cend()), 'c');\r\n        CHECK_INT(*p_cit, 'a');\r\n        CHECK_INT(*--(p_cit = v4.cend()), 'c');\r\n        CHECK_INT(*p_rit, 'c');\r\n        CHECK_INT(*--(p_rit = v1.crend()), 'a');\r\n        CHECK_INT(*p_crit, 'c');\r\n        CHECK_INT(*--(p_crit = v4.crend()), 'a');\r\n\r\n        typename Mycont::const_iterator p_it1 = typename Mycont::const_iterator();\r\n        typename Mycont::const_iterator p_it2 = typename Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    v0.clear(); // differs from multiset\r\n    STD pair<typename Mycont::iterator, bool> pib = v0.insert('d');\r\n    CHECK_INT(*pib.first, 'd');\r\n    CHECK(pib.second);\r\n    CHECK_INT(*--v0.end(), 'd');\r\n    pib = v0.insert('d');\r\n    CHECK_INT(*pib.first, 'd');\r\n    CHECK(!pib.second);\r\n    CHECK_INT(*v0.insert(v0.begin(), 'e'), 'e');\r\n    v0.insert(carr, carr + 3);\r\n    CHECK_INT(v0.size(), 5);\r\n    CHECK_INT(*v0.begin(), 'a');\r\n    v0.insert(carr2, carr2 + 3);\r\n    CHECK_INT(v0.size(), 6);\r\n    CHECK_INT(*--v0.end(), 'f');\r\n    v0.erase(v0.begin());\r\n    CHECK_INT(v0.size(), 5);\r\n    CHECK_INT(*v0.begin(), 'b');\r\n    v0.erase(v0.begin(), ++v0.begin());\r\n    CHECK_INT(v0.size(), 4);\r\n    CHECK_INT(*v0.begin(), 'c');\r\n    v0.insert('y');\r\n    CHECK_INT(v0.erase('x'), 0);\r\n    CHECK_INT(v0.erase('y'), 1);\r\n\r\n    { // test added C++11 functionality\r\n        Mycont v0c(al);\r\n        CHECK_INT(v0c.size(), 0);\r\n        CHECK(v0c.get_allocator() == al);\r\n    }\r\n\r\n    v0.clear();\r\n    CHECK(v0.empty());\r\n    v0.swap(v1);\r\n    CHECK(!v0.empty());\r\n    CHECK(v1.empty());\r\n    STD swap(v0, v1);\r\n    CHECK(v0.empty());\r\n    CHECK(!v1.empty());\r\n    CHECK(v1 == v1);\r\n    CHECK(v0 < v1);\r\n    CHECK(v0 != v1);\r\n    CHECK(v1 > v0);\r\n    CHECK(v0 <= v1);\r\n    CHECK(v1 >= v0);\r\n\r\n    CHECK(v0.key_comp()('a', 'c'));\r\n    CHECK(!v0.key_comp()('a', 'a'));\r\n    CHECK(v0.value_comp()('a', 'c'));\r\n    CHECK(!v0.value_comp()('a', 'a'));\r\n    CHECK_INT(*v4.find('a'), 'a');\r\n    CHECK_INT(v4.count('x'), 0);\r\n    CHECK_INT(v4.count('a'), 1);\r\n    CHECK_INT(*v4.lower_bound('a'), 'a');\r\n    CHECK_INT(*v4.upper_bound('a'), 'b');\r\n    STD pair<typename Mycont::const_iterator, typename Mycont::const_iterator> pcc = v4.equal_range('a');\r\n    CHECK_INT(*pcc.first, 'a');\r\n    CHECK_INT(*pcc.second, 'b');\r\n\r\n    {\r\n        Mycont v6;\r\n        v6.insert('a');\r\n        v6.insert('b');\r\n        Mycont v7(STD move(v6));\r\n        CHECK_INT(v6.size(), 0);\r\n        CHECK_INT(v7.size(), 2);\r\n\r\n        Mycont v6a;\r\n        v6a.insert('a');\r\n        v6a.insert('b');\r\n        Mycont v7a(STD move(v6a), al);\r\n        CHECK_INT(v6a.size(), 0);\r\n        CHECK_INT(v7a.size(), 2);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_INT(v7.size(), 0);\r\n        CHECK_INT(v8.size(), 2);\r\n\r\n        typedef STD set<Movable_int> Mycont2;\r\n        Mycont2 v9;\r\n        v9.insert(Movable_int('a'));\r\n        CHECK_INT(v9.size(), 1);\r\n        CHECK_INT(v9.begin()->val, 'a');\r\n\r\n        Mycont2 v10;\r\n        Movable_int mi1('d');\r\n        v10.insert(STD move(mi1));\r\n        CHECK_INT(mi1.val, -1);\r\n        CHECK_INT(v10.begin()->val, 'd');\r\n\r\n        Movable_int mi2('c');\r\n        v10.insert(v10.end(), STD move(mi2));\r\n        CHECK_INT(mi2.val, -1);\r\n        CHECK_INT(v10.begin()->val, 'c');\r\n\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end());\r\n        CHECK_INT(v10.begin()->val, 0);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 2);\r\n        CHECK_INT(v10.begin()->val, 2);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x32);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x432);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 5, 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x5432);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 6, 5, 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x65432);\r\n\r\n        v10.clear();\r\n        v10.emplace();\r\n        CHECK_INT(v10.begin()->val, 0);\r\n        v10.clear();\r\n        v10.emplace(2);\r\n        CHECK_INT(v10.begin()->val, 2);\r\n        v10.clear();\r\n        v10.emplace(3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x32);\r\n        v10.clear();\r\n        v10.emplace(4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x432);\r\n        v10.clear();\r\n        v10.emplace(5, 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x5432);\r\n        v10.clear();\r\n        v10.emplace(6, 5, 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x65432);\r\n    }\r\n\r\n    { // check for lvalue stealing\r\n        typedef STD set<Copyable_int> Mycont3;\r\n        Mycont3 v11;\r\n        Copyable_int ci1('d');\r\n        v11.insert(ci1);\r\n        CHECK_INT(ci1.val, 'd');\r\n        CHECK_INT(v11.begin()->val, 'd');\r\n\r\n        Copyable_int ci2('c');\r\n        v11.clear();\r\n        v11.insert(v11.end(), ci2);\r\n        CHECK_INT(ci2.val, 'c');\r\n        CHECK_INT(v11.begin()->val, 'c');\r\n\r\n        Mycont3 v12(v11);\r\n        CHECK(v11 == v12);\r\n    }\r\n\r\n    {\r\n        STD initializer_list<char> init{carr[0], carr[1], carr[2]};\r\n        Mycont v11(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(*v11.begin(), 'a');\r\n\r\n        v11.clear();\r\n        v11 = init;\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(*v11.begin(), 'a');\r\n\r\n        Mycont v11a(init, al);\r\n        CHECK_INT(v11a.size(), 3);\r\n        CHECK_INT(*v11a.begin(), 'a');\r\n\r\n        v11.clear();\r\n        v11.insert(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(*v11.begin(), 'a');\r\n    }\r\n}\r\n\r\ntemplate <class Mypred>\r\nvoid test_multiset() { // test multiset\r\n    typedef STD allocator<char> Myal;\r\n    typedef STD multiset<char, Mypred, Myal> Mycont;\r\n    char ch = '\\0', carr[] = \"abc\", carr2[] = \"def\";\r\n\r\n    typename Mycont::key_type* p_key         = (char*) nullptr;\r\n    typename Mycont::key_compare* p_kcomp    = (Mypred*) nullptr;\r\n    typename Mycont::allocator_type* p_alloc = (Myal*) nullptr;\r\n    typename Mycont::value_type* p_val       = (char*) nullptr;\r\n    typename Mycont::value_compare* p_vcomp  = (Mypred*) nullptr;\r\n    typename Mycont::pointer p_ptr           = (char*) nullptr;\r\n    typename Mycont::const_pointer p_cptr    = (const char*) nullptr;\r\n    typename Mycont::reference p_ref         = ch;\r\n    typename Mycont::const_reference p_cref  = (const char&) ch;\r\n    typename Mycont::size_type* p_size       = (CSTD size_t*) nullptr;\r\n    typename Mycont::difference_type* p_diff = (CSTD ptrdiff_t*) nullptr;\r\n\r\n    p_key   = p_key; // to quiet diagnostics\r\n    p_kcomp = p_kcomp;\r\n    p_alloc = p_alloc;\r\n    p_val   = p_val;\r\n    p_vcomp = p_vcomp;\r\n    p_ptr   = p_ptr;\r\n    p_cptr  = p_cptr;\r\n    p_ptr   = &p_ref;\r\n    p_cptr  = &p_cref;\r\n    p_size  = p_size;\r\n    p_diff  = p_diff;\r\n\r\n    Mycont v0;\r\n    Myal al = v0.get_allocator();\r\n    Mypred pred;\r\n    Mycont v0a(pred), v0b(pred, al);\r\n    CHECK(v0.empty());\r\n    CHECK_INT(v0.size(), 0);\r\n    CHECK_INT(v0a.size(), 0);\r\n    CHECK(v0a.get_allocator() == al);\r\n    CHECK_INT(v0b.size(), 0);\r\n    CHECK(v0b.get_allocator() == al);\r\n\r\n    Mycont v1(carr, carr + 3);\r\n    CHECK_INT(v1.size(), 3);\r\n    CHECK_INT(*v1.begin(), 'a');\r\n\r\n    Mycont v2(carr, carr + 3, pred);\r\n    CHECK_INT(v2.size(), 3);\r\n    CHECK_INT(*v2.begin(), 'a');\r\n\r\n    Mycont v3(carr, carr + 3, pred, al);\r\n    CHECK_INT(v3.size(), 3);\r\n    CHECK_INT(*v3.begin(), 'a');\r\n\r\n    const Mycont v4(carr, carr + 3);\r\n    CHECK_INT(v4.size(), 3);\r\n    CHECK_INT(*v4.begin(), 'a');\r\n    v0 = v4;\r\n    CHECK_INT(v0.size(), 3);\r\n    CHECK_INT(*v0.begin(), 'a');\r\n    CHECK(v0.size() <= v0.max_size());\r\n\r\n    STD multiset<char, Mypred>* p_cont = &v0;\r\n\r\n    p_cont = p_cont; // to quiet diagnostics\r\n\r\n    { // check iterator generators\r\n        typename Mycont::iterator p_it(v1.begin());\r\n        typename Mycont::const_iterator p_cit(v4.begin());\r\n        typename Mycont::reverse_iterator p_rit(v1.rbegin());\r\n        typename Mycont::const_reverse_iterator p_crit(v4.rbegin());\r\n        CHECK_INT(*p_it, 'a');\r\n        CHECK_INT(*--(p_it = v1.end()), 'c');\r\n        CHECK_INT(*p_cit, 'a');\r\n        CHECK_INT(*--(p_cit = v4.end()), 'c');\r\n        CHECK_INT(*p_rit, 'c');\r\n        CHECK_INT(*--(p_rit = v1.rend()), 'a');\r\n        CHECK_INT(*p_crit, 'c');\r\n        CHECK_INT(*--(p_crit = v4.rend()), 'a');\r\n\r\n        typename Mycont::const_iterator p_it1 = typename Mycont::const_iterator();\r\n        typename Mycont::const_iterator p_it2 = typename Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    { // check const iterators generators\r\n        typename Mycont::const_iterator p_it(v1.cbegin());\r\n        typename Mycont::const_iterator p_cit(v4.cbegin());\r\n        typename Mycont::const_reverse_iterator p_rit(v1.crbegin());\r\n        typename Mycont::const_reverse_iterator p_crit(v4.crbegin());\r\n        CHECK_INT(*p_it, 'a');\r\n        CHECK_INT(*--(p_it = v1.cend()), 'c');\r\n        CHECK_INT(*p_cit, 'a');\r\n        CHECK_INT(*--(p_cit = v4.cend()), 'c');\r\n        CHECK_INT(*p_rit, 'c');\r\n        CHECK_INT(*--(p_rit = v1.crend()), 'a');\r\n        CHECK_INT(*p_crit, 'c');\r\n        CHECK_INT(*--(p_crit = v4.crend()), 'a');\r\n\r\n        typename Mycont::const_iterator p_it1 = typename Mycont::const_iterator();\r\n        typename Mycont::const_iterator p_it2 = typename Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    v0.clear(); // differs from set\r\n    CHECK_INT(*v0.insert('d'), 'd');\r\n    CHECK_INT(*--v0.end(), 'd');\r\n    CHECK_INT(*v0.insert('d'), 'd');\r\n    CHECK_INT(v0.size(), 2);\r\n    CHECK_INT(*v0.insert(v0.begin(), 'e'), 'e');\r\n    v0.insert(carr, carr + 3);\r\n    CHECK_INT(v0.size(), 6);\r\n    CHECK_INT(*v0.begin(), 'a');\r\n    v0.insert(carr2, carr2 + 3);\r\n    CHECK_INT(v0.size(), 9);\r\n    CHECK_INT(*--v0.end(), 'f');\r\n    v0.erase(v0.begin());\r\n    CHECK_INT(v0.size(), 8);\r\n    CHECK_INT(*v0.begin(), 'b');\r\n    v0.erase(v0.begin(), ++v0.begin());\r\n    CHECK_INT(v0.size(), 7);\r\n    CHECK_INT(*v0.begin(), 'c');\r\n    v0.insert('y');\r\n    v0.insert('y');\r\n    CHECK_INT(v0.erase('x'), 0);\r\n    CHECK_INT(v0.erase('y'), 2);\r\n\r\n    { // test added C++11 functionality\r\n        Mycont v0c(al);\r\n        CHECK_INT(v0c.size(), 0);\r\n        CHECK(v0c.get_allocator() == al);\r\n    }\r\n\r\n    v0.clear();\r\n    CHECK(v0.empty());\r\n    v0.swap(v1);\r\n    CHECK(!v0.empty());\r\n    CHECK(v1.empty());\r\n    STD swap(v0, v1);\r\n    CHECK(v0.empty());\r\n    CHECK(!v1.empty());\r\n    CHECK(v1 == v1);\r\n    CHECK(v0 < v1);\r\n    CHECK(v0 != v1);\r\n    CHECK(v1 > v0);\r\n    CHECK(v0 <= v1);\r\n    CHECK(v1 >= v0);\r\n\r\n    CHECK(v0.key_comp()('a', 'c'));\r\n    CHECK(!v0.key_comp()('a', 'a'));\r\n    CHECK(v0.value_comp()('a', 'c'));\r\n    CHECK(!v0.value_comp()('a', 'a'));\r\n    CHECK_INT(*v4.find('a'), 'a');\r\n    CHECK_INT(v4.count('x'), 0);\r\n    CHECK_INT(v4.count('a'), 1);\r\n    CHECK_INT(*v4.lower_bound('a'), 'a');\r\n    CHECK_INT(*v4.upper_bound('a'), 'b');\r\n    STD pair<typename Mycont::const_iterator, typename Mycont::const_iterator> pcc = v4.equal_range('a');\r\n    CHECK_INT(*pcc.first, 'a');\r\n    CHECK_INT(*pcc.second, 'b');\r\n\r\n    {\r\n        Mycont v6;\r\n        v6.insert('a');\r\n        v6.insert('b');\r\n        Mycont v7(STD move(v6));\r\n        CHECK_INT(v6.size(), 0);\r\n        CHECK_INT(v7.size(), 2);\r\n\r\n        Mycont v6a;\r\n        v6a.insert('a');\r\n        v6a.insert('b');\r\n        Mycont v7a(STD move(v6a), al);\r\n        CHECK_INT(v6a.size(), 0);\r\n        CHECK_INT(v7a.size(), 2);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_INT(v7.size(), 0);\r\n        CHECK_INT(v8.size(), 2);\r\n\r\n        typedef STD multiset<Movable_int> Mycont2;\r\n        Mycont2 v9;\r\n        v9.insert(Movable_int('a'));\r\n        CHECK_INT(v9.size(), 1);\r\n        CHECK_INT(v9.begin()->val, 'a');\r\n\r\n        Mycont2 v10;\r\n        Movable_int mi1('d');\r\n        v10.insert(STD move(mi1));\r\n        CHECK_INT(mi1.val, -1);\r\n        CHECK_INT(v10.begin()->val, 'd');\r\n\r\n        Movable_int mi2('c');\r\n        v10.insert(v10.end(), STD move(mi2));\r\n        CHECK_INT(mi2.val, -1);\r\n        CHECK_INT(v10.begin()->val, 'c');\r\n\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end());\r\n        CHECK_INT(v10.begin()->val, 0);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 2);\r\n        CHECK_INT(v10.begin()->val, 2);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x32);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x432);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 5, 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x5432);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 6, 5, 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x65432);\r\n\r\n        v10.clear();\r\n        v10.emplace();\r\n        CHECK_INT(v10.begin()->val, 0);\r\n        v10.clear();\r\n        v10.emplace(2);\r\n        CHECK_INT(v10.begin()->val, 2);\r\n        v10.clear();\r\n        v10.emplace(3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x32);\r\n        v10.clear();\r\n        v10.emplace(4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x432);\r\n        v10.clear();\r\n        v10.emplace(5, 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x5432);\r\n        v10.clear();\r\n        v10.emplace(6, 5, 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x65432);\r\n    }\r\n\r\n    { // check for lvalue stealing\r\n        typedef STD multiset<Copyable_int> Mycont3;\r\n        Mycont3 v11;\r\n        Copyable_int ci1('d');\r\n        v11.insert(ci1);\r\n        CHECK_INT(ci1.val, 'd');\r\n        CHECK_INT(v11.begin()->val, 'd');\r\n\r\n        Copyable_int ci2('c');\r\n        v11.clear();\r\n        v11.insert(v11.end(), ci2);\r\n        CHECK_INT(ci2.val, 'c');\r\n        CHECK_INT(v11.begin()->val, 'c');\r\n\r\n        Mycont3 v12(v11);\r\n        CHECK(v11 == v12);\r\n    }\r\n\r\n    {\r\n        STD initializer_list<char> init{carr[0], carr[1], carr[2]};\r\n        Mycont v11(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(*v11.begin(), 'a');\r\n\r\n        v11.clear();\r\n        v11 = init;\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(*v11.begin(), 'a');\r\n\r\n        v11.clear();\r\n        v11.insert(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(*v11.begin(), 'a');\r\n\r\n        Mycont v11a(init, al);\r\n        CHECK_INT(v11a.size(), 3);\r\n        CHECK_INT(*v11a.begin(), 'a');\r\n    }\r\n}\r\n\r\nvoid test_main() { // test basic workings of set definitions\r\n    test_set<STD less<char>>();\r\n    test_set<Myless<Wrapped_char>>();\r\n    test_multiset<STD less<char>>();\r\n    test_multiset<Myless<Wrapped_char>>();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/sstream1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <sstream>, part 1\r\n#define TEST_NAME \"<sstream>, part 1\"\r\n\r\n#include \"tdefs.h\"\r\n#include <sstream>\r\n#include <string>\r\n\r\nvoid t1() { // test stringbuf\r\n    STD string s0(\"s0\"), s1(\"s1\"), s2(\"s2\"), s3(\"s3\");\r\n    STD stringbuf sb0, sb1(STD ios::in), sb2(STD ios::out), sb3(STD ios::in | STD ios::out);\r\n    STD stringbuf sb10(s0), sb11(s1, STD ios::in), sb12(s2, STD ios::out), sb13(s3, STD ios::in | STD ios::out);\r\n    STD ostream outs(&sb0);\r\n\r\n    STD stringbuf::char_type* pc   = (char*) nullptr;\r\n    STD stringbuf::int_type* pi    = (int*) nullptr;\r\n    STD stringbuf::pos_type* pp    = (STD streampos*) nullptr;\r\n    STD stringbuf::off_type* po    = (STD streamoff*) nullptr;\r\n    STD stringbuf::traits_type* pt = (STD char_traits<char>*) nullptr;\r\n\r\n    pc = pc; // to quiet diagnostics\r\n    pi = pi;\r\n    pp = pp;\r\n    po = po;\r\n    pt = pt;\r\n\r\n    outs << \"dynamic stringbuf 0\";\r\n    CHECK_STR(sb0.str().c_str(), \"dynamic stringbuf 0\");\r\n    sb0.str(s0);\r\n    CHECK_STR(sb0.str().c_str(), \"s0\");\r\n    outs.rdbuf(&sb2);\r\n    outs << \"dynamic stringbuf 2\";\r\n    CHECK_STR(sb2.str().c_str(), \"dynamic stringbuf 2\");\r\n    outs.rdbuf(&sb10);\r\n    outs << \"x\";\r\n    CHECK_STR(sb10.str().c_str(), \"x0\");\r\n    outs.rdbuf(&sb11);\r\n    outs << \"x\";\r\n    CHECK(!outs.good());\r\n    CHECK_STR(sb11.str().c_str(), \"s1\");\r\n    outs.rdbuf(&sb12);\r\n    outs << \"x\";\r\n    CHECK_STR(sb12.str().c_str(), \"x2\");\r\n    CHECK_INT((STD streamoff) sb12.pubseekoff(2, STD ios::beg, STD ios::out), 2);\r\n    CHECK_STR(sb12.str().c_str(), \"x2\");\r\n\r\n    {\r\n        typedef STD stringbuf Mycont;\r\n        Mycont v6(\"xx\");\r\n        Mycont v7(STD move(v6));\r\n        CHECK_STR(v6.str().c_str(), \"\");\r\n        CHECK_STR(v7.str().c_str(), \"xx\");\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_STR(v7.str().c_str(), \"\");\r\n        CHECK_STR(v8.str().c_str(), \"xx\");\r\n    }\r\n}\r\n\r\nvoid t2() { // test istringstream\r\n    STD string s0(\"s0\"), s1(\"s1\"), s2(\"s2\"), s3(\"s3\");\r\n    STD istringstream is0, is1(STD ios::in), is2(STD ios::out), is3(STD ios::in | STD ios::out);\r\n    STD istringstream is10(s0), is11(s1, STD ios::in), is12(s2, STD ios::out), is13(s3, STD ios::in | STD ios::out);\r\n\r\n    STD istringstream::char_type* pc   = (char*) nullptr;\r\n    STD istringstream::int_type* pi    = (int*) nullptr;\r\n    STD istringstream::pos_type* pp    = (STD streampos*) nullptr;\r\n    STD istringstream::off_type* po    = (STD streamoff*) nullptr;\r\n    STD istringstream::traits_type* pt = (STD char_traits<char>*) nullptr;\r\n\r\n    pc = pc; // to quiet diagnostics\r\n    pi = pi;\r\n    pp = pp;\r\n    po = po;\r\n    pt = pt;\r\n\r\n    CHECK_STR(is10.rdbuf()->str().c_str(), \"s0\");\r\n    CHECK_STR(is11.str().c_str(), \"s1\");\r\n    is0.str(\"abc\");\r\n    CHECK_STR(is0.str().c_str(), \"abc\");\r\n    is0 >> s0;\r\n    CHECK_STR(s0.c_str(), \"abc\");\r\n\r\n    {\r\n        typedef STD istringstream Mycont;\r\n        Mycont v6(\"xx\");\r\n        Mycont v7(STD move(v6));\r\n        CHECK_STR(v6.str().c_str(), \"\");\r\n        CHECK_STR(v7.str().c_str(), \"xx\");\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_STR(v7.str().c_str(), \"\");\r\n        CHECK_STR(v8.str().c_str(), \"xx\");\r\n    }\r\n}\r\n\r\nvoid t3() { // test ostringstream\r\n    STD string s0(\"s0\"), s1(\"s1\"), s2(\"s2\"), s3(\"s3\");\r\n    STD ostringstream os0, os1(STD ios::in), os2(STD ios::out), os3(STD ios::in | STD ios::out);\r\n    STD ostringstream os10(s0), os11(s1, STD ios::in), os12(s2, STD ios::out), os13(s3, STD ios::in | STD ios::out);\r\n\r\n    STD ostringstream::char_type* pc   = (char*) nullptr;\r\n    STD ostringstream::int_type* pi    = (int*) nullptr;\r\n    STD ostringstream::pos_type* pp    = (STD streampos*) nullptr;\r\n    STD ostringstream::off_type* po    = (STD streamoff*) nullptr;\r\n    STD ostringstream::traits_type* pt = (STD char_traits<char>*) nullptr;\r\n\r\n    pc = pc; // to quiet diagnostics\r\n    pi = pi;\r\n    pp = pp;\r\n    po = po;\r\n    pt = pt;\r\n\r\n    CHECK_STR(os10.rdbuf()->str().c_str(), \"s0\");\r\n    CHECK_STR(os13.str().c_str(), \"s3\");\r\n    os0.str(\"abc\");\r\n    CHECK_STR(os0.str().c_str(), \"abc\");\r\n    CHECK_INT((STD streamoff) os0.rdbuf()->pubseekoff(2, STD ios::beg, STD ios::out), 2);\r\n    CHECK_STR(os0.str().c_str(), \"abc\");\r\n    os0 << \"Cde\";\r\n    CHECK_STR(os0.str().c_str(), \"abCde\");\r\n\r\n    {\r\n        typedef STD ostringstream Mycont;\r\n        Mycont v6(\"xx\");\r\n        Mycont v7(STD move(v6));\r\n        CHECK_STR(v6.str().c_str(), \"\");\r\n        CHECK_STR(v7.str().c_str(), \"xx\");\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_STR(v7.str().c_str(), \"\");\r\n        CHECK_STR(v8.str().c_str(), \"xx\");\r\n    }\r\n}\r\n\r\nvoid t4() { // test stringstream and template equivalents\r\n    STD string s0(\"s0\"), s1(\"s1\"), s2(\"s2\"), s3(\"s3\");\r\n    STD stringstream ss0, ss1(STD ios::in), ss2(STD ios::out), ss3(STD ios::in | STD ios::out);\r\n    STD stringstream ss10(s0), ss11(s1, STD ios::in), ss12(s2, STD ios::out), ss13(s3, STD ios::in | STD ios::out);\r\n\r\n    STD stringstream::char_type* pc   = (char*) nullptr;\r\n    STD stringstream::int_type* pi    = (int*) nullptr;\r\n    STD stringstream::pos_type* pp    = (STD streampos*) nullptr;\r\n    STD stringstream::off_type* po    = (STD streamoff*) nullptr;\r\n    STD stringstream::traits_type* pt = (STD char_traits<char>*) nullptr;\r\n\r\n    pc = pc; // to quiet diagnostics\r\n    pi = pi;\r\n    pp = pp;\r\n    po = po;\r\n    pt = pt;\r\n\r\n    CHECK_STR(ss10.rdbuf()->str().c_str(), \"s0\");\r\n    CHECK_STR(ss11.str().c_str(), \"s1\");\r\n    ss0.str(\"abc\");\r\n    CHECK_STR(ss0.str().c_str(), \"abc\");\r\n    ss0 >> s0;\r\n    CHECK_STR(s0.c_str(), \"abc\");\r\n    ss0.clear();\r\n\r\n    CHECK_STR(ss10.rdbuf()->str().c_str(), \"s0\");\r\n    CHECK_STR(ss13.str().c_str(), \"s3\");\r\n    ss0.str(\"abc\");\r\n    CHECK_STR(ss0.str().c_str(), \"abc\");\r\n    CHECK_INT((STD streamoff) ss0.rdbuf()->pubseekoff(2, STD ios::beg), 2);\r\n    CHECK_STR(ss0.str().c_str(), \"abc\");\r\n    ss0 << \"Cde\";\r\n    CHECK_STR(ss0.str().c_str(), \"abCde\");\r\n\r\n    {\r\n        typedef STD stringstream Mycont;\r\n        Mycont v6(\"xx\");\r\n        Mycont v7(STD move(v6));\r\n        CHECK_STR(v6.str().c_str(), \"\");\r\n        CHECK_STR(v7.str().c_str(), \"xx\");\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_STR(v7.str().c_str(), \"\");\r\n        CHECK_STR(v8.str().c_str(), \"xx\");\r\n    }\r\n\r\n    { // test template equivalents\r\n        STD basic_stringbuf<char>* psb1                        = (STD stringbuf*) nullptr;\r\n        STD basic_stringbuf<char, STD char_traits<char>>* psb2 = psb1;\r\n        psb2                                                   = psb2;\r\n\r\n        STD basic_istringstream<char>* pis1                        = (STD istringstream*) nullptr;\r\n        STD basic_istringstream<char, STD char_traits<char>>* pis2 = pis1;\r\n        pis2                                                       = pis2;\r\n\r\n        STD basic_ostringstream<char>* pos1                        = (STD ostringstream*) nullptr;\r\n        STD basic_ostringstream<char, STD char_traits<char>>* pos2 = pos1;\r\n        pos2                                                       = pos2;\r\n\r\n        STD basic_stringstream<char>* ps1                        = (STD stringstream*) nullptr;\r\n        STD basic_stringstream<char, STD char_traits<char>>* ps2 = ps1;\r\n        ps2                                                      = ps2;\r\n    }\r\n}\r\n\r\nvoid test_main() { // test basic workings of stringstream definitions\r\n    t1();\r\n    t2();\r\n    t3();\r\n    t4();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/sstream2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <sstream>, part 2\r\n#define TEST_NAME \"<sstream>, part 2\"\r\n\r\n#include \"tdefs.h\"\r\n#include <sstream>\r\n#include <string>\r\n#include <wchar.h>\r\n\r\nvoid t1() { // test wstringbuf\r\n    STD wstring s0(L\"s0\"), s1(L\"s1\"), s2(L\"s2\"), s3(L\"s3\");\r\n    STD wstringbuf sb0, sb1(STD ios::in), sb2(STD ios::out), sb3(STD ios::in | STD ios::out);\r\n    STD wstringbuf sb10(s0), sb11(s1, STD ios::in), sb12(s2, STD ios::out), sb13(s3, STD ios::in | STD ios::out);\r\n    STD wostream outs(&sb0);\r\n\r\n    STD wstringbuf::char_type* pc   = (wchar_t*) nullptr;\r\n    STD wstringbuf::int_type* pi    = (CSTD wint_t*) nullptr;\r\n    STD wstringbuf::pos_type* pp    = (STD wstreampos*) nullptr;\r\n    STD wstringbuf::off_type* po    = (STD streamoff*) nullptr;\r\n    STD wstringbuf::traits_type* pt = (STD char_traits<wchar_t>*) nullptr;\r\n\r\n    pc = pc; // to quiet diagnostics\r\n    pi = pi;\r\n    pp = pp;\r\n    po = po;\r\n    pt = pt;\r\n\r\n    outs << L\"dynamic stringbuf 0\";\r\n    CHECK_WSTR(sb0.str().c_str(), L\"dynamic stringbuf 0\");\r\n    sb0.str(s0);\r\n    CHECK_WSTR(sb0.str().c_str(), L\"s0\");\r\n    outs.rdbuf(&sb2);\r\n    outs << L\"dynamic stringbuf 2\";\r\n    CHECK_WSTR(sb2.str().c_str(), L\"dynamic stringbuf 2\");\r\n    outs.rdbuf(&sb10);\r\n    outs << L\"x\";\r\n    CHECK_WSTR(sb10.str().c_str(), L\"x0\");\r\n    outs.rdbuf(&sb11);\r\n    outs << L\"x\";\r\n    CHECK(!outs.good());\r\n    CHECK_WSTR(sb11.str().c_str(), L\"s1\");\r\n    outs.rdbuf(&sb12);\r\n    outs << L\"x\";\r\n    CHECK_WSTR(sb12.str().c_str(), L\"x2\");\r\n    CHECK_INT((STD streamoff) sb12.pubseekoff(2, STD ios::beg, STD ios::out), 2);\r\n    CHECK_WSTR(sb12.str().c_str(), L\"x2\");\r\n\r\n    {\r\n        typedef STD wstringbuf Mycont;\r\n        Mycont v6(L\"xx\");\r\n        Mycont v7(STD move(v6));\r\n        CHECK_WSTR(v6.str().c_str(), L\"\");\r\n        CHECK_WSTR(v7.str().c_str(), L\"xx\");\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_WSTR(v7.str().c_str(), L\"\");\r\n        CHECK_WSTR(v8.str().c_str(), L\"xx\");\r\n    }\r\n}\r\n\r\nvoid t2() { // test wistringstream\r\n    STD wstring s0(L\"s0\"), s1(L\"s1\"), s2(L\"s2\"), s3(L\"s3\");\r\n    STD wistringstream is0, is1(STD ios::in), is2(STD ios::out), is3(STD ios::in | STD ios::out);\r\n    STD wistringstream is10(s0), is11(s1, STD ios::in), is12(s2, STD ios::out), is13(s3, STD ios::in | STD ios::out);\r\n\r\n    STD wistringstream::char_type* pc   = (wchar_t*) nullptr;\r\n    STD wistringstream::int_type* pi    = (CSTD wint_t*) nullptr;\r\n    STD wistringstream::pos_type* pp    = (STD wstreampos*) nullptr;\r\n    STD wistringstream::off_type* po    = (STD streamoff*) nullptr;\r\n    STD wistringstream::traits_type* pt = (STD char_traits<wchar_t>*) nullptr;\r\n\r\n    pc = pc; // to quiet diagnostics\r\n    pi = pi;\r\n    pp = pp;\r\n    po = po;\r\n    pt = pt;\r\n\r\n    CHECK_WSTR(is10.rdbuf()->str().c_str(), L\"s0\");\r\n    CHECK_WSTR(is11.str().c_str(), L\"s1\");\r\n    is0.str(L\"abc\");\r\n    CHECK_WSTR(is0.str().c_str(), L\"abc\");\r\n    is0 >> s0;\r\n    CHECK_WSTR(s0.c_str(), L\"abc\");\r\n\r\n    {\r\n        typedef STD wistringstream Mycont;\r\n        Mycont v6(L\"xx\");\r\n        Mycont v7(STD move(v6));\r\n        CHECK_WSTR(v6.str().c_str(), L\"\");\r\n        CHECK_WSTR(v7.str().c_str(), L\"xx\");\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_WSTR(v7.str().c_str(), L\"\");\r\n        CHECK_WSTR(v8.str().c_str(), L\"xx\");\r\n    }\r\n}\r\n\r\nvoid t3() { // test wostringstream\r\n    STD wstring s0(L\"s0\"), s1(L\"s1\"), s2(L\"s2\"), s3(L\"s3\");\r\n    STD wostringstream os0, os1(STD ios::in), os2(STD ios::out), os3(STD ios::in | STD ios::out);\r\n    STD wostringstream os10(s0), os11(s1, STD ios::in), os12(s2, STD ios::out), os13(s3, STD ios::in | STD ios::out);\r\n\r\n    STD wostringstream::char_type* pc   = (wchar_t*) nullptr;\r\n    STD wostringstream::int_type* pi    = (CSTD wint_t*) nullptr;\r\n    STD wostringstream::pos_type* pp    = (STD wstreampos*) nullptr;\r\n    STD wostringstream::off_type* po    = (STD streamoff*) nullptr;\r\n    STD wostringstream::traits_type* pt = (STD char_traits<wchar_t>*) nullptr;\r\n\r\n    pc = pc; // to quiet diagnostics\r\n    pi = pi;\r\n    pp = pp;\r\n    po = po;\r\n    pt = pt;\r\n\r\n    CHECK_WSTR(os10.rdbuf()->str().c_str(), L\"s0\");\r\n    CHECK_WSTR(os13.str().c_str(), L\"s3\");\r\n    os0.str(L\"abc\");\r\n    CHECK_WSTR(os0.str().c_str(), L\"abc\");\r\n    CHECK_INT((STD streamoff) os0.rdbuf()->pubseekoff(2, STD ios::beg, STD ios::out), 2);\r\n    CHECK_WSTR(os0.str().c_str(), L\"abc\");\r\n    os0 << L\"Cde\";\r\n    CHECK_WSTR(os0.str().c_str(), L\"abCde\");\r\n\r\n    {\r\n        typedef STD wostringstream Mycont;\r\n        Mycont v6(L\"xx\");\r\n        Mycont v7(STD move(v6));\r\n        CHECK_WSTR(v6.str().c_str(), L\"\");\r\n        CHECK_WSTR(v7.str().c_str(), L\"xx\");\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_WSTR(v7.str().c_str(), L\"\");\r\n        CHECK_WSTR(v8.str().c_str(), L\"xx\");\r\n    }\r\n}\r\n\r\nvoid t4() { // test stringstream and template equivalents\r\n    STD wstring s0(L\"s0\"), s1(L\"s1\"), s2(L\"s2\"), s3(L\"s3\");\r\n    STD wstringstream ss0, ss1(STD ios::in), ss2(STD ios::out), ss3(STD ios::in | STD ios::out);\r\n    STD wstringstream ss10(s0), ss11(s1, STD ios::in), ss12(s2, STD ios::out), ss13(s3, STD ios::in | STD ios::out);\r\n\r\n    STD wstringstream::char_type* pc   = (wchar_t*) nullptr;\r\n    STD wstringstream::int_type* pi    = (CSTD wint_t*) nullptr;\r\n    STD wstringstream::pos_type* pp    = (STD wstreampos*) nullptr;\r\n    STD wstringstream::off_type* po    = (STD streamoff*) nullptr;\r\n    STD wstringstream::traits_type* pt = (STD char_traits<wchar_t>*) nullptr;\r\n\r\n    pc = pc; // to quiet diagnostics\r\n    pi = pi;\r\n    pp = pp;\r\n    po = po;\r\n    pt = pt;\r\n\r\n    CHECK_WSTR(ss10.rdbuf()->str().c_str(), L\"s0\");\r\n    CHECK_WSTR(ss11.str().c_str(), L\"s1\");\r\n    ss0.str(L\"abc\");\r\n    CHECK_WSTR(ss0.str().c_str(), L\"abc\");\r\n    ss0 >> s0;\r\n    CHECK_WSTR(s0.c_str(), L\"abc\");\r\n    ss0.clear();\r\n\r\n    CHECK_WSTR(ss10.rdbuf()->str().c_str(), L\"s0\");\r\n    CHECK_WSTR(ss13.str().c_str(), L\"s3\");\r\n    ss0.str(L\"abc\");\r\n    CHECK_WSTR(ss0.str().c_str(), L\"abc\");\r\n    CHECK_INT((STD streamoff) ss0.rdbuf()->pubseekoff(2, STD ios::beg), 2);\r\n    CHECK_WSTR(ss0.str().c_str(), L\"abc\");\r\n    ss0 << L\"Cde\";\r\n    CHECK_WSTR(ss0.str().c_str(), L\"abCde\");\r\n\r\n    {\r\n        typedef STD wstringstream Mycont;\r\n        Mycont v6(L\"xx\");\r\n        Mycont v7(STD move(v6));\r\n        CHECK_WSTR(v6.str().c_str(), L\"\");\r\n        CHECK_WSTR(v7.str().c_str(), L\"xx\");\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_WSTR(v7.str().c_str(), L\"\");\r\n        CHECK_WSTR(v8.str().c_str(), L\"xx\");\r\n    }\r\n\r\n    { // test template equivalents\r\n        STD basic_stringbuf<wchar_t>* psb1                           = (STD wstringbuf*) nullptr;\r\n        STD basic_stringbuf<wchar_t, STD char_traits<wchar_t>>* psb2 = psb1;\r\n        psb2                                                         = psb2;\r\n\r\n        STD basic_istringstream<wchar_t>* pis1                           = (STD wistringstream*) nullptr;\r\n        STD basic_istringstream<wchar_t, STD char_traits<wchar_t>>* pis2 = pis1;\r\n        pis2                                                             = pis2;\r\n\r\n        STD basic_ostringstream<wchar_t>* pos1                           = (STD wostringstream*) nullptr;\r\n        STD basic_ostringstream<wchar_t, STD char_traits<wchar_t>>* pos2 = pos1;\r\n        pos2                                                             = pos2;\r\n\r\n        STD basic_stringstream<wchar_t>* ps1                           = (STD wstringstream*) nullptr;\r\n        STD basic_stringstream<wchar_t, STD char_traits<wchar_t>>* ps2 = ps1;\r\n        ps2                                                            = ps2;\r\n    }\r\n}\r\n\r\nvoid test_main() { // test basic workings of stringstream definitions\r\n    t1();\r\n    t2();\r\n    t3();\r\n    t4();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/stack/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <stack>\r\n#define TEST_NAME \"<stack>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <deque>\r\n#include <list>\r\n#include <stack>\r\n#include <stddef.h>\r\n#include <vector>\r\n\r\nvoid test_main() { // test basic workings of stack definitions\r\n    typedef STD allocator<char> Myal;\r\n    typedef STD deque<char, Myal> Myimpl;\r\n    typedef STD stack<char, Myimpl> Mycont;\r\n    typedef STD list<char, Myal> Myimpl2;\r\n    typedef STD stack<char, Myimpl2> Mycont2;\r\n    typedef STD vector<char, Myal> Myimpl3;\r\n    typedef STD stack<char, Myimpl3> Mycont3;\r\n    struct Mystack : public Mycont { // expose protected stuff\r\n        const Myimpl* get_cont() const { // return pointer to container\r\n            return &c;\r\n        }\r\n    };\r\n\r\n    Mycont::container_type* p_cont = (Myimpl*) nullptr;\r\n    Mycont::value_type* p_val      = (char*) nullptr;\r\n    Mycont::size_type* p_size      = (CSTD size_t*) nullptr;\r\n\r\n    p_cont = p_cont; // to quiet diagnostics\r\n    p_val  = p_val;\r\n    p_size = p_size;\r\n\r\n    Myimpl c0(3, 'x');\r\n    Mycont v0(c0), v0a;\r\n    Mycont2 v1;\r\n    Mycont3 v2;\r\n    CHECK_INT(v0.size(), 3);\r\n    CHECK_INT(v0.top(), 'x');\r\n    CHECK(v0a.empty());\r\n    v0 = v0a;\r\n    v0.push('a');\r\n    CHECK_INT(v0.size(), 1);\r\n    CHECK_INT(v0.top(), 'a');\r\n    v0.push('b');\r\n    CHECK_INT(v0.size(), 2);\r\n    CHECK_INT(v0.top(), 'b');\r\n    v0.push('c');\r\n    CHECK_INT(v0.size(), 3);\r\n    CHECK_INT(v0.top(), 'c');\r\n    CHECK(v0 == v0);\r\n    CHECK(v0a < v0);\r\n    CHECK(v0 != v0a);\r\n    CHECK(v0 > v0a);\r\n    CHECK(v0a <= v0);\r\n    CHECK(v0 >= v0a);\r\n    v0.pop();\r\n    CHECK_INT(v0.top(), 'b');\r\n    v0.pop();\r\n    CHECK_INT(v0.top(), 'a');\r\n    v0.pop();\r\n    CHECK(v0.empty());\r\n\r\n    {\r\n        Myimpl c10(3, 'x');\r\n        Mycont v10(STD move(c10));\r\n        CHECK_INT(v10.size(), 3);\r\n        CHECK_INT(v10.top(), 'x');\r\n        CHECK(c10.empty());\r\n\r\n        Mycont v11;\r\n        v11 = STD move(v10);\r\n        CHECK_INT(v10.size(), 0);\r\n        CHECK_INT(v11.size(), 3);\r\n\r\n        Mycont v12(STD move(v11));\r\n        CHECK_INT(v11.size(), 0);\r\n        CHECK_INT(v12.size(), 3);\r\n\r\n        v11.swap(v12);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v12.size(), 0);\r\n    }\r\n\r\n    { // test emplace\r\n        typedef STD deque<Movable_int> Myimpl0;\r\n        typedef STD stack<Movable_int, Myimpl0> Mycont0;\r\n        Mycont0 v13;\r\n\r\n        v13.emplace();\r\n        CHECK_INT(v13.top().val, 0);\r\n        v13.emplace(2);\r\n        CHECK_INT(v13.top().val, 2);\r\n        v13.emplace(3, 2);\r\n        CHECK_INT(v13.top().val, 0x32);\r\n        v13.emplace(4, 3, 2);\r\n        CHECK_INT(v13.top().val, 0x432);\r\n        v13.emplace(5, 4, 3, 2);\r\n        CHECK_INT(v13.top().val, 0x5432);\r\n        v13.emplace(6, 5, 4, 3, 2);\r\n        CHECK_INT(v13.top().val, 0x65432);\r\n    }\r\n\r\n    typedef STD uses_allocator<Mycont, STD allocator<int>> stack_uses_allocator;\r\n    CHECK_INT(stack_uses_allocator::value, true);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/stdexcept/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <stdexcept>\r\n#define TEST_NAME \"<stdexcept>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <exception>\r\n#include <stdexcept>\r\n\r\nvoid test_main() { // test basic workings of exception definitions\r\n    STD exception x1;\r\n    STD logic_error x2(\"logic_error\");\r\n    STD domain_error x3(\"domain_error\");\r\n    STD invalid_argument x4(\"invalid_argument\");\r\n    STD length_error x5(\"length_error\");\r\n    STD out_of_range x6(\"out_of_range\");\r\n    STD runtime_error x7(\"runtime_error\");\r\n    STD overflow_error x8(\"overflow_error\");\r\n    STD underflow_error x9(\"underflow_error\");\r\n    STD range_error x10(\"range_error\");\r\n\r\n    STD exception* pex      = &x1;\r\n    STD logic_error* plog   = &x2;\r\n    STD runtime_error* prun = &x7;\r\n\r\n    if (!terse) {\r\n        printf(\"exception().what() returns \\\"%s\\\"\\n\", pex->what());\r\n    }\r\n\r\n    CHECK(pex->what() != nullptr);\r\n    pex = plog;\r\n    CHECK_STR(pex->what(), \"logic_error\");\r\n    plog = &x3;\r\n    CHECK_STR(plog->what(), \"domain_error\");\r\n    plog = &x4;\r\n    CHECK_STR(plog->what(), \"invalid_argument\");\r\n    plog = &x5;\r\n    CHECK_STR(plog->what(), \"length_error\");\r\n    plog = &x6;\r\n    CHECK_STR(plog->what(), \"out_of_range\");\r\n\r\n    pex = prun;\r\n    CHECK_STR(pex->what(), \"runtime_error\");\r\n    prun = &x8;\r\n    CHECK_STR(prun->what(), \"overflow_error\");\r\n    prun = &x9;\r\n    CHECK_STR(prun->what(), \"underflow_error\");\r\n    prun = &x10;\r\n    CHECK_STR(prun->what(), \"range_error\");\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/streambuf1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <streambuf>, part 1\r\n#define TEST_NAME \"<streambuf>, part 1\"\r\n\r\n#include \"tdefs.h\"\r\n#include <sstream>\r\n#include <streambuf>\r\n\r\nclass Mybuf : public STD streambuf {\r\npublic:\r\n    Mybuf() { // default constructor\r\n    }\r\n\r\n    typedef STD streambuf Mybase;\r\n\r\n    Mybuf(const Mybuf& right) : Mybase(right) { // construct by copying\r\n    }\r\n\r\n    Mybuf& operator=(const Mybuf& right) { // assign\r\n        Mybase::operator=(right);\r\n        return *this;\r\n    }\r\n\r\n    void swap(Mybuf& right) { // swap\r\n        Mybase::swap(right);\r\n    }\r\n\r\n    void setp(char* p) { // set pptr\r\n        Mybase::setp(p, p);\r\n    }\r\n\r\n    char* getp() const { // get pptr\r\n        return Mybase::pptr();\r\n    }\r\n\r\nprotected:\r\n    STD streambuf* setbuf(char*, STD streamsize) override { // fake setbuf\r\n        return nullptr;\r\n    }\r\n\r\n    int overflow(int = EOF) override { // fake overflow\r\n        return 1;\r\n    }\r\n\r\n    int pbackfail(int = EOF) override { // fake pbackfail\r\n        return 2;\r\n    }\r\n\r\n    STD streamsize showmanyc() override { // fake showmanyc\r\n        return 3;\r\n    }\r\n\r\n    int underflow() override { // fake underflow\r\n        return 4;\r\n    }\r\n\r\n    int uflow() override { // fake uflow\r\n        return 5;\r\n    }\r\n\r\n    STD streamsize xsgetn(char*, STD streamsize) override { // fake xsgetn\r\n        return 6;\r\n    }\r\n\r\n    STD streamsize xsputn(const char*, STD streamsize) override { // fake xsputn\r\n        return 7;\r\n    }\r\n\r\n    STD streampos seekoff(STD streamoff, STD ios::seekdir,\r\n        STD ios::openmode = STD ios::in | STD ios::out) override { // fake seekoff\r\n        return 8;\r\n    }\r\n\r\n    STD streampos seekpos(STD streampos,\r\n        STD ios::openmode = STD ios::in | STD ios::out) override { // fake seekpos\r\n        return 9;\r\n    }\r\n\r\n    int sync() override { // fake sync\r\n        return 10;\r\n    }\r\n};\r\n\r\nvoid try_mybuf() { // test that virtuals all get called\r\n    Mybuf mine;\r\n    STD streambuf* p = (STD streambuf*) &mine;\r\n\r\n    CHECK_PTR(p->pubsetbuf(nullptr, 0), nullptr);\r\n    CHECK_INT(p->sputc(0), 1);\r\n    CHECK_INT(p->sungetc(), 2);\r\n    CHECK_INT(p->in_avail(), 3);\r\n    CHECK_INT(p->sgetc(), 4);\r\n    CHECK_INT(p->sbumpc(), 5);\r\n    CHECK_INT(p->sgetn(nullptr, 0), 6);\r\n    CHECK_INT(p->sputn(nullptr, 0), 7);\r\n    CHECK_INT((STD streamoff) p->pubseekoff(0, (STD ios::seekdir) 0), 8);\r\n    CHECK_INT((STD streamoff) p->pubseekpos(0), 9);\r\n    CHECK_INT(p->pubsync(), 10);\r\n}\r\n\r\nvoid test_main() { // test basic workings of streambuf definitions\r\n    STD streamoff soff = 3;\r\n    STD streampos s1(0), s2(10);\r\n    STD streamsize ssize           = -1;\r\n    STD streambuf::char_type* pc   = (char*) nullptr;\r\n    STD streambuf::int_type* pi    = (int*) nullptr;\r\n    STD streambuf::pos_type* pp    = (STD streampos*) nullptr;\r\n    STD streambuf::off_type* po    = (STD streamoff*) nullptr;\r\n    STD streambuf::traits_type* pt = (STD char_traits<char>*) nullptr;\r\n\r\n    pc    = pc; // to quiet diagnostics\r\n    pi    = pi;\r\n    pp    = pp;\r\n    po    = po;\r\n    pt    = pt;\r\n    ssize = ssize; // to quiet diagnostics\r\n\r\n    CHECK_INT((STD streamoff) s1, 0);\r\n    CHECK_INT((STD streamoff) s2, 10);\r\n    CHECK_INT(s2 - s1, 10);\r\n    CHECK(s1 + (STD streamoff) 4 == s2 - (STD streamoff) 6);\r\n    CHECK(!((s1 += soff) != (s2 -= 7)));\r\n    CHECK_INT((STD streamoff) s1, soff);\r\n    CHECK_INT((STD streamoff) s2, soff);\r\n\r\n    // test streambuf read/write members\r\n    char buf[10];\r\n    STD ostringstream os(STD ios_base::in | STD ios_base::out);\r\n    STD streambuf* p = os.rdbuf();\r\n\r\n    CHECK(p != nullptr);\r\n    CHECK_INT(p->sputc('a'), 'a');\r\n    s1 = p->pubseekoff(0, STD ios::cur, STD ios::out);\r\n    CHECK(s1 != s2);\r\n    s2 = p->pubseekpos(s1, STD ios::out);\r\n    CHECK(s1 == s2);\r\n    CHECK_INT(p->sgetc(), 'a');\r\n    CHECK_INT(p->sbumpc(), 'a');\r\n    CHECK_INT(p->sputn(\"xyz\", 3), 3);\r\n    CHECK_INT(p->sgetn(buf, 10), 3);\r\n    CHECK_INT(buf[0], 'x');\r\n    CHECK_INT(p->sputbackc('w'), 'w');\r\n    CHECK_INT(p->sungetc(), 'y');\r\n    CHECK_INT(p->in_avail(), 2);\r\n    CHECK_INT(p->snextc(), 'w');\r\n    CHECK(p->pubseekpos(s1, STD ios::in) == s2);\r\n    CHECK_INT(p->sputc('!'), '!');\r\n    CHECK_INT(p->sgetc(), 'x');\r\n    CHECK((STD streamoff) p->pubseekoff(0, STD ios::end, STD ios::in) != -1);\r\n    CHECK_INT(p->sungetc(), '!');\r\n\r\n    STD basic_streambuf<char>* psb1                        = (STD streambuf*) nullptr;\r\n    STD basic_streambuf<char, STD char_traits<char>>* psb2 = psb1;\r\n\r\n    psb2 = psb2; // to quiet diagnostics\r\n\r\n    s1 = p->pubseekoff(0, STD ios::cur, STD ios::out);\r\n    s2 = p->pubseekpos(s1, STD ios::out);\r\n    CHECK(s1 == s2);\r\n    p->pubsetbuf(buf, sizeof(buf));\r\n    p->pubsync();\r\n\r\n    {\r\n        char ch = 'x';\r\n        Mybuf x1;\r\n        x1.setp(&ch);\r\n\r\n        Mybuf x2(x1);\r\n        CHECK_PTR(x2.getp(), &ch);\r\n\r\n        x1.setp(nullptr);\r\n        x1 = x2;\r\n        CHECK_PTR(x1.getp(), &ch);\r\n\r\n        x2.setp(nullptr);\r\n        x1.swap(x2);\r\n        CHECK_PTR(x2.getp(), &ch);\r\n    }\r\n\r\n    try_mybuf();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/streambuf2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <streambuf>, part 2\r\n#define TEST_NAME \"<streambuf>, part 2\"\r\n\r\n#include \"tdefs.h\"\r\n#include <sstream>\r\n#include <streambuf>\r\n#include <wchar.h>\r\n\r\nclass Mybuf : public STD wstreambuf {\r\npublic:\r\n    Mybuf() { // default constructor\r\n    }\r\n\r\n    typedef STD wstreambuf Mybase;\r\n\r\n    Mybuf(const Mybuf& right) : Mybase(right) { // construct by copying\r\n    }\r\n\r\n    Mybuf& operator=(const Mybuf& right) { // assign\r\n        Mybase::operator=(right);\r\n        return *this;\r\n    }\r\n\r\n    void swap(Mybuf& right) { // swap\r\n        Mybase::swap(right);\r\n    }\r\n\r\n    void setp(wchar_t* p) { // set pptr\r\n        Mybase::setp(p, p);\r\n    }\r\n\r\n    wchar_t* getp() const { // get pptr\r\n        return Mybase::pptr();\r\n    }\r\n\r\nprotected:\r\n    STD wstreambuf* setbuf(wchar_t*, STD streamsize) override { // fake setbuf\r\n        return nullptr;\r\n    }\r\n\r\n    CSTD wint_t overflow(CSTD wint_t = WEOF) override { // fake overflow\r\n        return 1;\r\n    }\r\n\r\n    CSTD wint_t pbackfail(CSTD wint_t = WEOF) override { // fake pbackfail\r\n        return 2;\r\n    }\r\n\r\n    STD streamsize showmanyc() override { // fake showmanyc\r\n        return 3;\r\n    }\r\n\r\n    CSTD wint_t underflow() override { // fake underflow\r\n        return 4;\r\n    }\r\n\r\n    CSTD wint_t uflow() override { // fake uflow\r\n        return 5;\r\n    }\r\n\r\n    STD streamsize xsgetn(wchar_t*, STD streamsize) override { // fake xsgetn\r\n        return 6;\r\n    }\r\n\r\n    STD streamsize xsputn(const wchar_t*, STD streamsize) override { // fake xsputn\r\n        return 7;\r\n    }\r\n\r\n    STD wstreampos seekoff(STD streamoff, STD ios::seekdir,\r\n        STD ios::openmode = STD ios::in | STD ios::out) override { // fake seekoff\r\n        return 8;\r\n    }\r\n\r\n    STD wstreampos seekpos(STD streampos,\r\n        STD ios::openmode = STD ios::in | STD ios::out) override { // fake seekpos\r\n        return 9;\r\n    }\r\n\r\n    int sync() override { // fake sync\r\n        return 10;\r\n    }\r\n};\r\n\r\nvoid try_mybuf() { // test that virtuals all get called\r\n    Mybuf mine;\r\n    STD wstreambuf* p = (STD wstreambuf*) &mine;\r\n\r\n    CHECK_PTR(p->pubsetbuf(nullptr, 0), nullptr);\r\n    CHECK_INT(p->sputc(0), 1);\r\n    CHECK_INT(p->sungetc(), 2);\r\n    CHECK_INT(p->in_avail(), 3);\r\n    CHECK_INT(p->sgetc(), 4);\r\n    CHECK_INT(p->sbumpc(), 5);\r\n    CHECK_INT(p->sgetn(nullptr, 0), 6);\r\n    CHECK_INT(p->sputn(nullptr, 0), 7);\r\n    CHECK_INT((STD streamoff) p->pubseekoff(0, (STD ios::seekdir) 0), 8);\r\n    CHECK_INT((STD streamoff) p->pubseekpos(0), 9);\r\n    CHECK_INT(p->pubsync(), 10);\r\n}\r\n\r\nvoid test_main() { // test basic workings of streambuf definitions\r\n    STD streamoff soff = 3;\r\n    STD wstreampos s1(0), s2(10);\r\n    STD streamsize ssize            = -1;\r\n    STD wstreambuf::char_type* pc   = (wchar_t*) nullptr;\r\n    STD wstreambuf::int_type* pi    = (CSTD wint_t*) nullptr;\r\n    STD wstreambuf::pos_type* pp    = (STD wstreampos*) nullptr;\r\n    STD wstreambuf::off_type* po    = (STD streamoff*) nullptr;\r\n    STD wstreambuf::traits_type* pt = (STD char_traits<wchar_t>*) nullptr;\r\n\r\n    pc    = pc; // to quiet diagnostics\r\n    pi    = pi;\r\n    pp    = pp;\r\n    po    = po;\r\n    pt    = pt;\r\n    ssize = ssize; // to quiet diagnostics\r\n\r\n    CHECK_INT((STD streamoff) s1, 0);\r\n    CHECK_INT((STD streamoff) s2, 10);\r\n    CHECK_INT(s2 - s1, 10);\r\n    CHECK(s1 + (STD streamoff) 4 == s2 - (STD streamoff) 6);\r\n    CHECK(!((s1 += soff) != (s2 -= 7)));\r\n    CHECK_INT((STD streamoff) s1, soff);\r\n    CHECK_INT((STD streamoff) s2, soff);\r\n\r\n    // test streambuf read/write members\r\n    wchar_t buf[10];\r\n    STD wostringstream os(STD ios_base::in | STD ios_base::out);\r\n    STD wstreambuf* p = os.rdbuf();\r\n\r\n    CHECK(p != nullptr);\r\n    CHECK_INT(p->sputc(L'a'), L'a');\r\n    s1 = p->pubseekoff(0, STD ios::cur, STD ios::out);\r\n    CHECK(s1 != s2);\r\n    s2 = p->pubseekpos(s1, STD ios::out);\r\n    CHECK(s1 == s2);\r\n    CHECK_INT(p->sgetc(), L'a');\r\n    CHECK_INT(p->sbumpc(), L'a');\r\n    CHECK_INT(p->sputn(L\"xyz\", 3), 3);\r\n    CHECK_INT(p->sgetn(buf, 10), 3);\r\n    CHECK_INT(buf[0], L'x');\r\n    CHECK_INT(p->sputbackc(L'w'), L'w');\r\n    CHECK_INT(p->sungetc(), L'y');\r\n    CHECK_INT(p->in_avail(), 2);\r\n    CHECK_INT(p->snextc(), L'w');\r\n    CHECK(p->pubseekpos(s1, STD ios::in) == s2);\r\n    CHECK_INT(p->sputc(L'!'), L'!');\r\n    CHECK_INT(p->sgetc(), L'x');\r\n    CHECK((STD streamoff) p->pubseekoff(0, STD ios::end, STD ios::in) != -1);\r\n    CHECK_INT(p->sungetc(), L'!');\r\n\r\n    STD basic_streambuf<wchar_t>* psb1                           = (STD wstreambuf*) nullptr;\r\n    STD basic_streambuf<wchar_t, STD char_traits<wchar_t>>* psb2 = psb1;\r\n\r\n    psb2 = psb2; // to quiet diagnostics\r\n\r\n    s1 = p->pubseekoff(0, STD ios::cur, STD ios::out);\r\n    s2 = p->pubseekpos(s1, STD ios::out);\r\n    CHECK(s1 == s2);\r\n    p->pubsetbuf(buf, sizeof(buf) / sizeof(wchar_t));\r\n    p->pubsync();\r\n\r\n    {\r\n        wchar_t ch = L'x';\r\n        Mybuf x1;\r\n        x1.setp(&ch);\r\n\r\n        Mybuf x2(x1);\r\n        CHECK_PTR(x2.getp(), &ch);\r\n\r\n        x1.setp(nullptr);\r\n        x1 = x2;\r\n        CHECK_PTR(x1.getp(), &ch);\r\n\r\n        x2.setp(nullptr);\r\n        x1.swap(x2);\r\n        CHECK_PTR(x2.getp(), &ch);\r\n    }\r\n\r\n    try_mybuf();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/string1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <string>, part 1\r\n#define TEST_NAME \"<string>, part 1\"\r\n\r\n#include \"tdefs.h\"\r\n#include <sstream>\r\n#include <stddef.h>\r\n#include <stdio.h>\r\n#include <string.h>\r\n#include <string>\r\n#include <wchar.h>\r\n\r\ntypedef STD allocator<char> Myal;\r\ntypedef STD string Mycont;\r\ntypedef STD char_traits<char> Mytr;\r\n\r\nvoid test_traits() { // test char_traits\r\n    char ch[]             = \"x123456789\";\r\n    Mytr::char_type* pc   = (char*) nullptr;\r\n    Mytr::int_type* pi    = (int*) nullptr;\r\n    Mytr::pos_type* pp    = (STD streampos*) nullptr;\r\n    Mytr::off_type* po    = (STD streamoff*) nullptr;\r\n    Mytr::state_type* pst = (CSTD mbstate_t*) nullptr;\r\n\r\n    pc  = pc; // to quiet diagnostics\r\n    pi  = pi;\r\n    pp  = pp;\r\n    po  = po;\r\n    pst = pst;\r\n\r\n    Mytr::assign(ch[0], '0');\r\n    CHECK_INT(ch[0], '0');\r\n    CHECK(Mytr::eq(ch[0], ch[0]));\r\n    CHECK(!Mytr::eq(ch[0], '4'));\r\n    CHECK(Mytr::lt(ch[0], '4'));\r\n    CHECK(!Mytr::lt(ch[0], ch[0]));\r\n    CHECK(Mytr::compare(\"abc\", \"abcd\", 3) == 0);\r\n    CHECK(Mytr::compare(\"abc\", \"abcd\", 4) < 0);\r\n    CHECK_SIZE_T(Mytr::length(\"\"), 0);\r\n    CHECK_SIZE_T(Mytr::length(ch), 10);\r\n    CHECK_PTR(Mytr::find(ch, 3, '3'), nullptr);\r\n    CHECK_INT(*Mytr::find(\"abcd\", 4, 'd'), 'd');\r\n    CHECK_STR(Mytr::move(ch, \"abc\", 0), \"0123456789\");\r\n    CHECK_STR(Mytr::move(&ch[2], ch, 4), \"01236789\");\r\n    CHECK_STR(Mytr::move(ch, &ch[2], 4), \"0123236789\");\r\n    CHECK_STR(Mytr::copy(ch, \"abc\", 0), \"0123236789\");\r\n    CHECK_STR(Mytr::copy(&ch[2], ch, 2), \"01236789\");\r\n    CHECK_STR(Mytr::assign(ch, 2, '3'), \"3301236789\");\r\n    CHECK_INT(Mytr::not_eof('e'), 'e');\r\n    CHECK(Mytr::not_eof(EOF) != EOF);\r\n    CHECK_INT(Mytr::to_char_type('x'), 'x');\r\n    CHECK_INT(Mytr::to_int_type('x'), 'x');\r\n    CHECK(Mytr::eq_int_type('x', 'x'));\r\n    CHECK(Mytr::eq_int_type(EOF, EOF));\r\n    CHECK(!Mytr::eq_int_type('x', EOF));\r\n    CHECK_INT(Mytr::eof(), EOF);\r\n\r\n    CHECK_TYPE(STD streampos, STD u16streampos);\r\n    CHECK_TYPE(STD streampos, STD u32streampos);\r\n}\r\n\r\nvoid test_cont() { // test string as container\r\n    char ch     = '\\0';\r\n    char carr[] = \"abc\";\r\n\r\n    Mycont::allocator_type* p_alloc = (Myal*) nullptr;\r\n    Mycont::pointer p_ptr           = (char*) nullptr;\r\n    Mycont::const_pointer p_cptr    = (const char*) nullptr;\r\n    Mycont::reference p_ref         = ch;\r\n    Mycont::const_reference p_cref  = (const char&) ch;\r\n    Mycont::value_type* p_val       = (char*) nullptr;\r\n    Mycont::size_type* p_size       = (CSTD size_t*) nullptr;\r\n    Mycont::difference_type* p_diff = (CSTD ptrdiff_t*) nullptr;\r\n\r\n    p_alloc = p_alloc; // to quiet diagnostics\r\n    p_ptr   = p_ptr;\r\n    p_cptr  = p_cptr;\r\n    p_ref   = p_cref;\r\n    p_size  = p_size;\r\n    p_diff  = p_diff;\r\n    p_val   = p_val;\r\n\r\n    Mycont v0;\r\n    Myal al = v0.get_allocator();\r\n    Mycont v0a(al);\r\n    CHECK(v0.empty());\r\n    CHECK_SIZE_T(v0.size(), 0);\r\n    CHECK_SIZE_T(v0a.size(), 0);\r\n    CHECK(v0a.get_allocator() == al);\r\n\r\n    Mycont v1(5, '\\0'), v1a(6, 'x'), v1b(7, 'y', al);\r\n    CHECK_SIZE_T(v1.size(), 5);\r\n    CHECK_INT(v1.end()[-1], '\\0');\r\n    CHECK_SIZE_T(v1a.size(), 6);\r\n    CHECK_INT(v1a.end()[-1], 'x');\r\n    CHECK_SIZE_T(v1b.size(), 7);\r\n    CHECK_INT(v1b.end()[-1], 'y');\r\n\r\n    Mycont v2(v1a);\r\n    CHECK_SIZE_T(v2.size(), 6);\r\n    CHECK_INT(*v2.begin(), 'x');\r\n\r\n    Mycont v3(v1a.begin(), v1a.end());\r\n    CHECK_SIZE_T(v3.size(), 6);\r\n    CHECK_INT(*v3.begin(), 'x');\r\n\r\n    const Mycont v4(v1a.begin(), v1a.end(), al);\r\n    CHECK_SIZE_T(v4.size(), 6);\r\n    CHECK_INT(*v4.begin(), 'x');\r\n    v0 = v4;\r\n    CHECK_SIZE_T(v0.size(), 6);\r\n    CHECK_INT(*v0.begin(), 'x');\r\n    CHECK_INT(v0[0], 'x');\r\n    CHECK_INT(v0.at(5), 'x');\r\n\r\n    v0.reserve(12);\r\n    CHECK(12 <= v0.capacity());\r\n    v0.resize(8);\r\n    CHECK_SIZE_T(v0.size(), 8);\r\n    CHECK_INT(v0.end()[-1], '\\0');\r\n    v0.resize(10, 'z');\r\n    CHECK_SIZE_T(v0.size(), 10);\r\n    CHECK_INT(v0.end()[-1], 'z');\r\n    CHECK(v0.size() <= v0.max_size());\r\n\r\n    STD basic_string<char, STD char_traits<char>, STD allocator<char>>* p_cont = &v0;\r\n\r\n    p_cont = p_cont; // to quiet diagnostics\r\n\r\n    { // check iterators generators\r\n        Mycont::iterator p_it(v0.begin());\r\n        Mycont::const_iterator p_cit(v4.begin());\r\n        Mycont::reverse_iterator p_rit(v0.rbegin());\r\n        Mycont::const_reverse_iterator p_crit(v4.rbegin());\r\n        CHECK_INT(*p_it, 'x');\r\n        CHECK_INT(*--(p_it = v0.end()), 'z');\r\n        CHECK_INT(*p_cit, 'x');\r\n        CHECK_INT(*--(p_cit = v4.end()), 'x');\r\n        CHECK_INT(*p_rit, 'z');\r\n        CHECK_INT(*--(p_rit = v0.rend()), 'x');\r\n        CHECK_INT(*p_crit, 'x');\r\n        CHECK_INT(*--(p_crit = v4.rend()), 'x');\r\n    }\r\n\r\n    { // check const iterators generators\r\n        Mycont::const_iterator p_it(v0.cbegin());\r\n        Mycont::const_iterator p_cit(v4.cbegin());\r\n        Mycont::const_reverse_iterator p_rit(v0.crbegin());\r\n        Mycont::const_reverse_iterator p_crit(v4.crbegin());\r\n        CHECK_INT(*p_it, 'x');\r\n        CHECK_INT(*--(p_it = v0.cend()), 'z');\r\n        CHECK_INT(*p_cit, 'x');\r\n        CHECK_INT(*--(p_cit = v4.cend()), 'x');\r\n        CHECK_INT(*p_rit, 'z');\r\n        CHECK_INT(*--(p_rit = v0.crend()), 'x');\r\n        CHECK_INT(*p_crit, 'x');\r\n        CHECK_INT(*--(p_crit = v4.crend()), 'x');\r\n    }\r\n\r\n    CHECK_INT(*v0.begin(), 'x');\r\n    CHECK_INT(*v4.begin(), 'x');\r\n\r\n    v0.push_back('a');\r\n    CHECK_INT(v0.end()[-1], 'a');\r\n\r\n    v0.pop_back();\r\n    CHECK_INT(v0.front(), 'x');\r\n    CHECK_INT(v0.back(), 'z');\r\n\r\n    v0.shrink_to_fit();\r\n    CHECK_INT(v0.front(), 'x');\r\n\r\n    {\r\n        Mycont v5(20, 'x');\r\n        Mycont v6(STD move(v5));\r\n        CHECK_SIZE_T(v5.size(), 0);\r\n        CHECK_SIZE_T(v6.size(), 20);\r\n\r\n        Mycont v7;\r\n        v7.assign(STD move(v6));\r\n        CHECK_SIZE_T(v6.size(), 0);\r\n        CHECK_SIZE_T(v7.size(), 20);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_SIZE_T(v7.size(), 0);\r\n        CHECK_SIZE_T(v8.size(), 20);\r\n\r\n        Mycont v8a(STD move(v8), Myal());\r\n        CHECK_SIZE_T(v8.size(), 0);\r\n        CHECK_SIZE_T(v8a.size(), 20);\r\n    }\r\n\r\n    v0.assign(v4.begin(), v4.end());\r\n    CHECK_SIZE_T(v0.size(), v4.size());\r\n    CHECK_INT(*v0.begin(), *v4.begin());\r\n    v0.assign(4, 'w');\r\n    CHECK_SIZE_T(v0.size(), 4);\r\n    CHECK_INT(*v0.begin(), 'w');\r\n    CHECK_INT(*v0.insert(v0.begin(), 'a'), 'a');\r\n    CHECK_INT(*v0.begin(), 'a');\r\n    CHECK_INT(v0.begin()[1], 'w');\r\n    CHECK_INT(*v0.insert(v0.begin(), 2, 'b'), 'b');\r\n    CHECK_INT(*v0.begin(), 'b');\r\n    CHECK_INT(v0.begin()[1], 'b');\r\n    CHECK_INT(v0.begin()[2], 'a');\r\n    CHECK_INT(*v0.insert(v0.end(), v4.begin(), v4.end()), *v4.begin());\r\n    CHECK_INT(v0.end()[-1], v4.end()[-1]);\r\n    CHECK_INT(*v0.insert(v0.end(), carr, carr + 3), *carr);\r\n    CHECK_INT(v0.end()[-1], 'c');\r\n    v0.erase(v0.begin());\r\n    CHECK_INT(*v0.begin(), 'b');\r\n    CHECK_INT(v0.begin()[1], 'a');\r\n    v0.erase(v0.begin(), v0.begin() + 1);\r\n    CHECK_INT(*v0.begin(), 'a');\r\n\r\n    v0.clear();\r\n    CHECK(v0.empty());\r\n    v0.swap(v1);\r\n    CHECK(!v0.empty());\r\n    CHECK(v1.empty());\r\n    STD swap(v0, v1);\r\n    CHECK(v0.empty());\r\n    CHECK(!v1.empty());\r\n    CHECK(v1 == v1);\r\n    CHECK(v0 < v1);\r\n    CHECK(v0 != v1);\r\n    CHECK(v1 > v0);\r\n    CHECK(v0 <= v1);\r\n    CHECK(v1 >= v0);\r\n}\r\n\r\nvoid test_main() { // test basic workings of string definitions\r\n    Mycont s1, s2(30, '\\0');\r\n    Mycont s3(4, '\\0');\r\n    Mycont s4(\"s4\"), s5(\"s5xxx\", 2), s6(3, 'a');\r\n    Mycont s7(5, 'b'), s8(1, 'c');\r\n    Mycont s9(s7);\r\n    Mycont s10(\"s5xxx\", 1, 4);\r\n\r\n    Mycont::traits_type* p_tr = (Mytr*) nullptr;\r\n\r\n    p_tr = p_tr; // to quiet diagnostics\r\n\r\n    CHECK_STR(s1.c_str(), \"\");\r\n    CHECK_STR(s2.c_str(), \"\");\r\n    CHECK_MEM(s3.c_str(), \"\\0\\0\\0\\0\", 5);\r\n    CHECK_STR(s4.c_str(), \"s4\");\r\n    CHECK_STR(s5.c_str(), \"s5\");\r\n    CHECK_STR(s6.c_str(), \"aaa\");\r\n    CHECK_STR(s7.c_str(), \"bbbbb\");\r\n    CHECK_STR(s8.c_str(), \"c\");\r\n    CHECK_SIZE_T(s7.length(), 5);\r\n    CHECK_STR(s9.c_str(), \"bbbbb\");\r\n    CHECK_STR(s10.c_str(), \"5xxx\");\r\n\r\n    // test allocator constructors\r\n    Myal al;\r\n    Mycont s1a(al);\r\n    Mycont s4a(\"s4\", al);\r\n    Mycont s5a(\"s5xxx\", 2, al);\r\n    Mycont s6a(3, 'a', al);\r\n    Mycont s10a(Mycont(\"s5xxx\"), 1, 4, al);\r\n\r\n    CHECK_STR(s1a.c_str(), \"\");\r\n    CHECK_STR(s4a.c_str(), \"s4\");\r\n    CHECK_STR(s5a.c_str(), \"s5\");\r\n    CHECK_STR(s6a.c_str(), \"aaa\");\r\n    CHECK_STR(s10a.c_str(), \"5xxx\");\r\n\r\n    Mycont s9a(s7, al);\r\n    CHECK_STR(s9a.c_str(), \"bbbbb\");\r\n\r\n    // test assignments\r\n    s1 = \"hello\";\r\n    CHECK_STR(s1.c_str(), \"hello\");\r\n    s1 = 'x';\r\n    CHECK_STR(s1.c_str(), \"x\");\r\n    s1 = s4;\r\n    CHECK_STR(s1.c_str(), \"s4\");\r\n    s1.assign(\"AB\");\r\n    CHECK_STR(s1.c_str(), \"AB\");\r\n    s1.assign(1, 'C');\r\n    CHECK_STR(s1.c_str(), \"C\");\r\n    s1.assign(s4);\r\n    CHECK_STR(s1.c_str(), \"s4\");\r\n\r\n    // test appends\r\n    s1 += \"abc\";\r\n    CHECK_STR(s1.c_str(), \"s4abc\");\r\n    s1 += 'd';\r\n    CHECK_STR(s1.c_str(), \"s4abcd\");\r\n    s1 += s4;\r\n    CHECK_STR(s1.c_str(), \"s4abcds4\");\r\n    s1 = \"A\";\r\n    s1.append(\"BC\");\r\n    CHECK_STR(s1.c_str(), \"ABC\");\r\n    s1.append(1, 'D');\r\n    CHECK_STR(s1.c_str(), \"ABCD\");\r\n    s1.append(s4);\r\n    CHECK_STR(s1.c_str(), \"ABCDs4\");\r\n    CHECK_STR((s4 + s5).c_str(), \"s4s5\");\r\n    CHECK_STR((s4 + \"s5\").c_str(), \"s4s5\");\r\n    CHECK_STR((\"s4\" + s5).c_str(), \"s4s5\");\r\n    CHECK_STR((s4 + '5').c_str(), \"s45\");\r\n    CHECK_STR(('4' + s5).c_str(), \"4s5\");\r\n\r\n    CHECK(s4 + \"more\" == STD string(\"s4more\"));\r\n    CHECK(\"more\" + s4 == STD string(\"mores4\"));\r\n    CHECK(s4 + '+' == STD string(\"s4+\"));\r\n    CHECK('+' + s4 == STD string(\"+s4\"));\r\n\r\n    {\r\n        Mycont s11(\"abc\");\r\n        Mycont s12(\"def\");\r\n\r\n        CHECK_STR((s11 + STD string(\"def\")).c_str(), \"abcdef\");\r\n        CHECK_STR((STD string(\"abc\") + s12).c_str(), \"abcdef\");\r\n        CHECK_STR((STD string(\"abc\") + STD string(\"def\")).c_str(), \"abcdef\");\r\n\r\n        CHECK_STR((STD string(\"abc\") + \"def\").c_str(), \"abcdef\");\r\n        CHECK_STR((STD string(\"abc\") + 'd').c_str(), \"abcd\");\r\n        CHECK_STR((\"abc\" + STD string(\"def\")).c_str(), \"abcdef\");\r\n        CHECK_STR(('a' + STD string(\"def\")).c_str(), \"adef\");\r\n\r\n        Mycont s13(STD move(s12));\r\n        CHECK_STR(s13.c_str(), \"def\");\r\n    }\r\n\r\n    // test inserts\r\n    s1 = \"abc\";\r\n    s1.insert(3, \"Dd\");\r\n    s1.insert(1, \"BC\", 1);\r\n    s1.insert(0, \"A\");\r\n    CHECK_STR(s1.c_str(), \"AaBbcDd\");\r\n    s1.insert(7, 2, 'E');\r\n    s1.insert(4, 1, 'C');\r\n    CHECK_STR(s1.c_str(), \"AaBbCcDdEE\");\r\n    s1.insert(10, s4);\r\n    s1.insert(0, s4, 0, 1);\r\n    CHECK_STR(s1.c_str(), \"sAaBbCcDdEEs4\");\r\n\r\n    // test replaces\r\n    s1 = \"\";\r\n    s1.replace((CSTD size_t) 0, (CSTD size_t) 0, \"123ab789\");\r\n    s1.replace(3, 2, \"45678\", 3);\r\n    CHECK_STR(s1.c_str(), \"123456789\");\r\n    s1.replace(1, 3, \"xx\", 2);\r\n    s1.replace((CSTD size_t) 0, (CSTD size_t) 0, \"0\");\r\n    CHECK_STR(s1.c_str(), \"01xx56789\");\r\n    s1.replace(3, 1, s4, 1, 1);\r\n    s1.replace(2, 1, s4);\r\n    CHECK_STR(s1.c_str(), \"01s4456789\");\r\n\r\n    // test copy\r\n    char buf[10];\r\n    s1 = \"012XX\";\r\n    CHECK_SIZE_T(s1.copy(buf, sizeof(buf)), 5);\r\n    CHECK_MEM(buf, \"012XX\", 5);\r\n    CHECK_SIZE_T(s1.copy(buf, 3, 1), 3);\r\n    CHECK_MEM(buf, \"12X\", 3);\r\n\r\n    // test finds\r\n    s1 = \"s4s4\";\r\n    CHECK_SIZE_T(s1.find(s4), 0);\r\n    CHECK_SIZE_T(s1.find(s4, 1), 2);\r\n    CHECK_SIZE_T(s1.find(s4, 3), STD string::npos);\r\n    CHECK_SIZE_T(s1.find(\"s4\"), 0);\r\n    CHECK_SIZE_T(s1.find(\"s4\", 3), STD string::npos);\r\n    CHECK_SIZE_T(s1.find(\"s4XX\", 1, 2), 2);\r\n    CHECK_SIZE_T(s1.find('s'), 0);\r\n    CHECK_SIZE_T(s1.find('s', 1), 2);\r\n    CHECK_SIZE_T(s1.find('x'), STD string::npos);\r\n\r\n    CHECK_SIZE_T(s1.rfind(s4), 2);\r\n    CHECK_SIZE_T(s1.rfind(s4, 1), 0);\r\n    CHECK_SIZE_T(s1.rfind(s5, 3), STD string::npos);\r\n    CHECK_SIZE_T(s1.rfind(\"s4\"), 2);\r\n    CHECK_SIZE_T(s1.rfind(\"s4\", 3), 2);\r\n    CHECK_SIZE_T(s1.rfind(\"s4XX\", 1, 3), STD string::npos);\r\n    CHECK_SIZE_T(s1.rfind('s'), 2);\r\n    CHECK_SIZE_T(s1.rfind('s', 2), 2);\r\n    CHECK_SIZE_T(s1.rfind('x'), STD string::npos);\r\n\r\n    CHECK_SIZE_T(s1.find_first_of(s4), 0);\r\n    CHECK_SIZE_T(s1.find_first_of(s4, 1), 1);\r\n    CHECK_SIZE_T(s1.find_first_of(s4, 4), STD string::npos);\r\n    CHECK_SIZE_T(s1.find_first_of(\"s4\"), 0);\r\n    CHECK_SIZE_T(s1.find_first_of(\"s4\", 3), 3);\r\n    CHECK_SIZE_T(s1.find_first_of(\"abs\", 1, 2), STD string::npos);\r\n    CHECK_SIZE_T(s1.find_first_of('s'), 0);\r\n    CHECK_SIZE_T(s1.find_first_of('s', 1), 2);\r\n    CHECK_SIZE_T(s1.find_first_of('x'), STD string::npos);\r\n\r\n    CHECK_SIZE_T(s1.find_last_of(s4), 3);\r\n    CHECK_SIZE_T(s1.find_last_of(s4, 1), 1);\r\n    CHECK_SIZE_T(s1.find_last_of(s6), STD string::npos);\r\n    CHECK_SIZE_T(s1.find_last_of(\"s4\"), 3);\r\n    CHECK_SIZE_T(s1.find_last_of(\"s4\", 2), 2);\r\n    CHECK_SIZE_T(s1.find_last_of(\"abs\", 1, 2), STD string::npos);\r\n    CHECK_SIZE_T(s1.find_last_of('s'), 2);\r\n    CHECK_SIZE_T(s1.find_last_of('s', 1), 0);\r\n    CHECK_SIZE_T(s1.find_last_of('x'), STD string::npos);\r\n\r\n    CHECK_SIZE_T(s1.find_first_not_of(s5), 1);\r\n    CHECK_SIZE_T(s1.find_first_not_of(s5, 2), 3);\r\n    CHECK_SIZE_T(s1.find_first_not_of(s4), STD string::npos);\r\n    CHECK_SIZE_T(s1.find_first_not_of(\"s5\"), 1);\r\n    CHECK_SIZE_T(s1.find_first_not_of(\"s5\", 2), 3);\r\n    CHECK_SIZE_T(s1.find_first_not_of(\"s4a\", 1, 2), STD string::npos);\r\n    CHECK_SIZE_T(s1.find_first_not_of('s'), 1);\r\n    CHECK_SIZE_T(s1.find_first_not_of('s', 2), 3);\r\n    CHECK_SIZE_T(s1.find_first_not_of('s', 4), STD string::npos);\r\n\r\n    CHECK_SIZE_T(s1.find_last_not_of(s5), 3);\r\n    CHECK_SIZE_T(s1.find_last_not_of(s5, 2), 1);\r\n    CHECK_SIZE_T(s1.find_last_not_of(s4), STD string::npos);\r\n    CHECK_SIZE_T(s1.find_last_not_of(\"s5\"), 3);\r\n    CHECK_SIZE_T(s1.find_last_not_of(\"s5\", 2), 1);\r\n    CHECK_SIZE_T(s1.find_last_not_of(\"s4a\", 1, 2), STD string::npos);\r\n    CHECK_SIZE_T(s1.find_last_not_of('s'), 3);\r\n    CHECK_SIZE_T(s1.find_last_not_of('s', 2), 1);\r\n    CHECK_SIZE_T(s1.find_last_not_of('s', 0), STD string::npos);\r\n\r\n    // test compares\r\n    CHECK(s1.compare(s1) == 0);\r\n    CHECK(s1.compare(0, 6, s1) == 0);\r\n    CHECK(s1.compare(2, 2, s4) == 0);\r\n    CHECK(s1.compare(2, 2, s4, 0, 2) == 0);\r\n    CHECK(s1.compare(\"s4s4\") == 0);\r\n    CHECK(s1.compare(0, 2, \"s4\") == 0);\r\n    CHECK(s1.compare(0, 2, \"s4\", 2) == 0);\r\n    CHECK(s1.compare(2, 2, \"s4xx\", 0, 2) == 0);\r\n    CHECK(s1.compare(s4) != 0);\r\n    CHECK(s1.compare(1, 4, s1) != 0);\r\n    CHECK(s1.compare(0, 4, s4, 0, 2) != 0);\r\n    CHECK(s1.compare(\"s4s5\") != 0);\r\n    CHECK(s1.compare(0, 4, \"s44\", 1) != 0);\r\n    CHECK(s1.compare(1, 4, \"s4xx\", 0, 2) != 0);\r\n\r\n    CHECK(s1 == s1);\r\n    CHECK(s1 == \"s4s4\");\r\n    CHECK(\"s4\" == s4);\r\n    CHECK(s1 != s4);\r\n    CHECK(s1 != \"xx\");\r\n    CHECK(\"s4\" != s1);\r\n\r\n    CHECK(s4 < s1);\r\n    CHECK(s4 < \"s5\");\r\n    CHECK(\"s3\" < s4);\r\n    CHECK(s4 <= s1);\r\n    CHECK(s4 <= \"s5\");\r\n    CHECK(\"s3\" <= s4);\r\n\r\n    CHECK(s1 > s4);\r\n    CHECK(\"s5\" > s4);\r\n    CHECK(s4 > \"s3\");\r\n    CHECK(s1 >= s4);\r\n    CHECK(\"s5\" >= s4);\r\n    CHECK(s4 >= \"s3\");\r\n\r\n    // test I/O\r\n    static const char input[] = \"s1 s2 s3\\n   abc\";\r\n    STD istringstream ins(input);\r\n    STD ostringstream outs;\r\n\r\n    ins >> s1;\r\n    CHECK_STR(s1.c_str(), \"s1\");\r\n    ins >> s1;\r\n    CHECK_STR(s1.c_str(), \"s2\");\r\n    STD getline(ins, s1);\r\n    CHECK_STR(s1.c_str(), \" s3\");\r\n    STD getline(ins, s1, 'c');\r\n    CHECK_STR(s1.c_str(), \"   ab\");\r\n    outs << s1;\r\n    s1 = outs.str();\r\n    CHECK_STR(s1.c_str(), \"   ab\");\r\n\r\n    {\r\n        STD stringbuf sbuf;\r\n        sbuf.str(\"x\");\r\n        STD istream(&sbuf) >> s1;\r\n        CHECK_STR(s1.c_str(), \"x\");\r\n\r\n        sbuf.str(\"xx\\n\");\r\n        STD getline(STD istream(&sbuf), s1);\r\n        CHECK_STR(s1.c_str(), \"xx\");\r\n\r\n        sbuf.str(\"xxxc\\n\");\r\n        STD getline(STD istream(&sbuf), s1, 'c');\r\n        CHECK_STR(s1.c_str(), \"xxx\");\r\n\r\n        sbuf.str(\"\");\r\n        s1 = \"yy\";\r\n        STD ostream(&sbuf) << s1;\r\n        CHECK_STR(sbuf.str().c_str(), \"yy\");\r\n    }\r\n\r\n    { // test sto* functions\r\n        STD size_t idx = 0;\r\n        bool ok        = false;\r\n        STD string str(\"x\");\r\n        try {\r\n            (void) STD stoi(str, &idx);\r\n        } catch (STD invalid_argument) {\r\n            ok = true;\r\n        } catch (...) {\r\n            CHECK_MSG(\"unknown exception thrown\", false);\r\n        }\r\n        CHECK_MSG(\"invalid_argument not thrown\", ok);\r\n        CHECK_SIZE_T(idx, 0);\r\n\r\n        try {\r\n            (void) STD stoi(\"0xfffffffff\", &idx, 0);\r\n        } catch (STD out_of_range) {\r\n            ok = true;\r\n        } catch (...) {\r\n            CHECK_MSG(\"unknown exception thrown\", false);\r\n        }\r\n        CHECK_MSG(\"out_of_range not thrown\", ok);\r\n\r\n        CHECK_INT(STD stoi(\"-37\", &idx), -37);\r\n        CHECK_SIZE_T(idx, 3);\r\n        CHECK_INT(STD stol(\"0x5a\", nullptr, 0), 0x5a);\r\n        CHECK_INT(STD stoul(\"5c\", nullptr, 16), 0x5c);\r\n\r\n        float fl = STD stof(\"-19.25\");\r\n        CHECK_DOUBLE(fl, -19.25);\r\n        CHECK_DOUBLE(STD stod(\"-19.25\"), -19.25);\r\n        CHECK_DOUBLE(STD stold(\"-19.25\", &idx), -19.25);\r\n        CHECK_SIZE_T(idx, 6);\r\n\r\n        long long ll = 0xffffffff;\r\n        ll <<= 8;\r\n        CHECK(STD stoll(\"0xffffffff00\", nullptr, 0) == ll);\r\n        CHECK(STD stoull(\"0xffffffff00\", nullptr, 0) == (unsigned long long) ll);\r\n\r\n        CHECK_STR(STD to_string((int) -23).c_str(), \"-23\");\r\n        CHECK_STR(STD to_string((unsigned int) 23).c_str(), \"23\");\r\n        CHECK_STR(STD to_string((long) -23).c_str(), \"-23\");\r\n        CHECK_STR(STD to_string((unsigned long) 23).c_str(), \"23\");\r\n        CHECK_STR(STD to_string((long long) -23).c_str(), \"-23\");\r\n        CHECK_STR(STD to_string((unsigned long long) 23).c_str(), \"23\");\r\n        CHECK_STR(STD to_string((long double) 23.5).c_str(), \"23.500000\");\r\n        CHECK_STR(STD to_string((float) -23.0f).c_str(), \"-23.000000\");\r\n        CHECK_STR(STD to_string((double) 23.0).c_str(), \"23.000000\");\r\n        CHECK_STR(STD to_string((long double) -23.0L).c_str(), \"-23.000000\");\r\n    }\r\n\r\n    { // test hash functors\r\n        size_t hash_val = STD hash<STD string>()(STD string(\"abc\"));\r\n        hash_val        = STD hash<STD wstring>()(STD wstring(L\"abc\"));\r\n        hash_val        = STD hash<STD u16string>()(STD u16string(3, 'x'));\r\n        hash_val        = STD hash<STD u32string>()(STD u32string(3, 'x'));\r\n        (void) hash_val;\r\n    }\r\n\r\n    {\r\n        STD initializer_list<char> init{'a', 'b', 'c'};\r\n        STD string s11(init);\r\n        CHECK_SIZE_T(s11.size(), 3);\r\n        CHECK_INT(s11[2], 'c');\r\n\r\n        STD string s12(init, al);\r\n        CHECK_SIZE_T(s12.size(), 3);\r\n        CHECK_INT(s12[2], 'c');\r\n\r\n        s11 += init;\r\n        CHECK_SIZE_T(s11.size(), 6);\r\n        CHECK_INT(s11[5], 'c');\r\n\r\n        s11 = init;\r\n        CHECK_SIZE_T(s11.size(), 3);\r\n        CHECK_INT(s11[2], 'c');\r\n\r\n        s11.append(init);\r\n        CHECK_SIZE_T(s11.size(), 6);\r\n        CHECK_INT(s11[5], 'c');\r\n\r\n        s11.assign(init);\r\n        CHECK_SIZE_T(s11.size(), 3);\r\n        CHECK_INT(s11[2], 'c');\r\n\r\n        CHECK_INT(*s11.insert(s11.begin() + 1, init), *init.begin());\r\n        CHECK_SIZE_T(s11.size(), 6);\r\n        CHECK_INT(s11[2], 'b');\r\n\r\n        s11.replace(s11.begin(), s11.begin() + 2, init);\r\n        CHECK_SIZE_T(s11.size(), 7);\r\n        CHECK_INT(s11[2], 'c');\r\n    }\r\n\r\n    // test template equivalence\r\n    STD basic_string<char, STD char_traits<char>>* ps = (STD string*) nullptr;\r\n\r\n    ps = ps; // to quiet diagnostics\r\n\r\n    test_traits();\r\n    test_cont();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/string2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <string>, part 2\r\n#define TEST_NAME \"<string>, part 2\"\r\n\r\n#include \"tdefs.h\"\r\n#include <sstream>\r\n#include <stddef.h>\r\n#include <string.h>\r\n#include <string>\r\n#include <wchar.h>\r\n\r\ntypedef STD allocator<wchar_t> Myal;\r\ntypedef STD wstring Mycont;\r\ntypedef STD char_traits<wchar_t> Mytr;\r\n\r\nvoid test_traits() { // test char_traits\r\n    wchar_t ch[]          = L\"x123456789\";\r\n    Mytr::char_type* pc   = (wchar_t*) nullptr;\r\n    Mytr::int_type* pi    = (CSTD wint_t*) nullptr;\r\n    Mytr::pos_type* pp    = (STD wstreampos*) nullptr;\r\n    Mytr::off_type* po    = (STD streamoff*) nullptr;\r\n    Mytr::state_type* pst = (CSTD mbstate_t*) nullptr;\r\n\r\n    pc  = pc; // to quiet diagnostics\r\n    pi  = pi;\r\n    pp  = pp;\r\n    po  = po;\r\n    pst = pst;\r\n\r\n    Mytr::assign(ch[0], L'0');\r\n    CHECK_INT(ch[0], L'0');\r\n    CHECK(Mytr::eq(ch[0], ch[0]));\r\n    CHECK(!Mytr::eq(ch[0], L'4'));\r\n    CHECK(Mytr::lt(ch[0], L'4'));\r\n    CHECK(!Mytr::lt(ch[0], ch[0]));\r\n    CHECK(Mytr::compare(L\"abc\", L\"abcd\", 3) == 0);\r\n    CHECK(Mytr::compare(L\"abc\", L\"abcd\", 4) < 0);\r\n    CHECK_SIZE_T(Mytr::length(L\"\"), 0);\r\n    CHECK_SIZE_T(Mytr::length(ch), 10);\r\n    CHECK_PTR(Mytr::find(ch, 3, L'3'), nullptr);\r\n    CHECK_INT(*Mytr::find(L\"abcd\", 4, L'd'), L'd');\r\n    CHECK_WSTR(Mytr::move(ch, L\"abc\", 0), L\"0123456789\");\r\n    CHECK_WSTR(Mytr::move(&ch[2], ch, 4), L\"01236789\");\r\n    CHECK_WSTR(Mytr::move(ch, &ch[2], 4), L\"0123236789\");\r\n    CHECK_WSTR(Mytr::copy(ch, L\"abc\", 0), L\"0123236789\");\r\n    CHECK_WSTR(Mytr::copy(&ch[2], ch, 2), L\"01236789\");\r\n    CHECK_WSTR(Mytr::assign(ch, 2, L'3'), L\"3301236789\");\r\n    CHECK_INT(Mytr::not_eof(L'e'), L'e');\r\n    CHECK(Mytr::not_eof(WEOF) != WEOF);\r\n    CHECK_INT(Mytr::to_char_type(L'x'), L'x');\r\n    CHECK_INT(Mytr::to_int_type(L'x'), L'x');\r\n    CHECK(Mytr::eq_int_type(L'x', L'x'));\r\n    CHECK(Mytr::eq_int_type(WEOF, WEOF));\r\n    CHECK(!Mytr::eq_int_type(L'x', WEOF));\r\n    CHECK_INT(Mytr::eof(), WEOF);\r\n}\r\n\r\nvoid test_cont() { // test string as container\r\n    wchar_t ch     = L'\\0';\r\n    wchar_t carr[] = L\"abc\";\r\n\r\n    Mycont::allocator_type* p_alloc = (Myal*) nullptr;\r\n    Mycont::pointer p_ptr           = (wchar_t*) nullptr;\r\n    Mycont::const_pointer p_cptr    = (const wchar_t*) nullptr;\r\n    Mycont::reference p_ref         = ch;\r\n    Mycont::const_reference p_cref  = (const wchar_t&) ch;\r\n    Mycont::value_type* p_val       = (wchar_t*) nullptr;\r\n    Mycont::size_type* p_size       = (CSTD size_t*) nullptr;\r\n    Mycont::difference_type* p_diff = (CSTD ptrdiff_t*) nullptr;\r\n\r\n    p_alloc = p_alloc; // to quiet diagnostics\r\n    p_ptr   = p_ptr;\r\n    p_cptr  = p_cptr;\r\n    p_ref   = p_cref;\r\n    p_size  = p_size;\r\n    p_diff  = p_diff;\r\n    p_val   = p_val;\r\n\r\n    Mycont v0;\r\n    Myal al = v0.get_allocator();\r\n    Mycont v0a(al);\r\n    CHECK(v0.empty());\r\n    CHECK_SIZE_T(v0.size(), 0);\r\n    CHECK_SIZE_T(v0a.size(), 0);\r\n    CHECK(v0a.get_allocator() == al);\r\n\r\n    Mycont v1(5, L'\\0'), v1a(6, L'x'), v1b(7, L'y', al);\r\n    CHECK_SIZE_T(v1.size(), 5);\r\n    CHECK_INT(v1.end()[-1], L'\\0');\r\n    CHECK_SIZE_T(v1a.size(), 6);\r\n    CHECK_INT(v1a.end()[-1], L'x');\r\n    CHECK_SIZE_T(v1b.size(), 7);\r\n    CHECK_INT(v1b.end()[-1], L'y');\r\n\r\n    Mycont v2(v1a);\r\n    CHECK_SIZE_T(v2.size(), 6);\r\n    CHECK_INT(*v2.begin(), L'x');\r\n\r\n    Mycont v3(v1a.begin(), v1a.end());\r\n    CHECK_SIZE_T(v3.size(), 6);\r\n    CHECK_INT(*v3.begin(), L'x');\r\n\r\n    const Mycont v4(v1a.begin(), v1a.end(), al);\r\n    CHECK_SIZE_T(v4.size(), 6);\r\n    CHECK_INT(*v4.begin(), L'x');\r\n    v0 = v4;\r\n    CHECK_SIZE_T(v0.size(), 6);\r\n    CHECK_INT(*v0.begin(), L'x');\r\n    CHECK_INT(v0[0], L'x');\r\n    CHECK_INT(v0.at(5), L'x');\r\n\r\n    v0.reserve(12);\r\n    CHECK(12 <= v0.capacity());\r\n    v0.resize(8);\r\n    CHECK_SIZE_T(v0.size(), 8);\r\n    CHECK_INT(v0.end()[-1], L'\\0');\r\n    v0.resize(10, L'z');\r\n    CHECK_SIZE_T(v0.size(), 10);\r\n    CHECK_INT(v0.end()[-1], L'z');\r\n    CHECK(v0.size() <= v0.max_size());\r\n\r\n    STD basic_string<wchar_t, STD char_traits<wchar_t>, STD allocator<wchar_t>>* p_cont = &v0;\r\n    p_cont = p_cont; // to quiet diagnostics\r\n\r\n    Mycont::iterator p_it(v0.begin());\r\n    Mycont::const_iterator p_cit(v4.begin());\r\n    Mycont::reverse_iterator p_rit(v0.rbegin());\r\n    Mycont::const_reverse_iterator p_crit(v4.rbegin());\r\n    CHECK_INT(*p_it, L'x');\r\n    CHECK_INT(*--(p_it = v0.end()), L'z');\r\n    CHECK_INT(*p_cit, L'x');\r\n    CHECK_INT(*--(p_cit = v4.end()), L'x');\r\n    CHECK_INT(*p_rit, L'z');\r\n    CHECK_INT(*--(p_rit = v0.rend()), L'x');\r\n    CHECK_INT(*p_crit, L'x');\r\n    CHECK_INT(*--(p_crit = v4.rend()), L'x');\r\n\r\n    CHECK_INT(*v0.begin(), L'x');\r\n    CHECK_INT(*v4.begin(), L'x');\r\n\r\n    v0.push_back(L'a');\r\n    CHECK_INT(v0.end()[-1], L'a');\r\n\r\n    v0.pop_back();\r\n    CHECK_INT(v0.front(), L'x');\r\n    CHECK_INT(v0.back(), L'z');\r\n\r\n    v0.shrink_to_fit();\r\n    CHECK_INT(v0.front(), 'x');\r\n\r\n    {\r\n        Mycont v5(20, L'x');\r\n        Mycont v6(STD move(v5));\r\n        CHECK_SIZE_T(v5.size(), 0);\r\n        CHECK_SIZE_T(v6.size(), 20);\r\n\r\n        Mycont v7;\r\n        v7.assign(STD move(v6));\r\n        CHECK_SIZE_T(v6.size(), 0);\r\n        CHECK_SIZE_T(v7.size(), 20);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_SIZE_T(v7.size(), 0);\r\n        CHECK_SIZE_T(v8.size(), 20);\r\n\r\n        Mycont v8a(STD move(v8), Myal());\r\n        CHECK_SIZE_T(v8.size(), 0);\r\n        CHECK_SIZE_T(v8a.size(), 20);\r\n    }\r\n\r\n    v0.assign(v4.begin(), v4.end());\r\n    CHECK_SIZE_T(v0.size(), v4.size());\r\n    CHECK_INT(*v0.begin(), *v4.begin());\r\n    v0.assign(4, L'w');\r\n    CHECK_SIZE_T(v0.size(), 4);\r\n    CHECK_INT(*v0.begin(), L'w');\r\n    CHECK_INT(*v0.insert(v0.begin(), L'a'), L'a');\r\n    CHECK_INT(*v0.begin(), L'a');\r\n    CHECK_INT(v0.begin()[1], L'w');\r\n    CHECK_INT(*v0.insert(v0.begin(), 2, L'b'), L'b');\r\n    CHECK_INT(*v0.begin(), L'b');\r\n    CHECK_INT(v0.begin()[1], L'b');\r\n    CHECK_INT(v0.begin()[2], L'a');\r\n    CHECK_INT(*v0.insert(v0.end(), v4.begin(), v4.end()), *v4.begin());\r\n    CHECK_INT(v0.end()[-1], v4.end()[-1]);\r\n    CHECK_INT(*v0.insert(v0.end(), carr, carr + 3), *carr);\r\n    CHECK_INT(v0.end()[-1], L'c');\r\n    v0.erase(v0.begin());\r\n    CHECK_INT(*v0.begin(), L'b');\r\n    CHECK_INT(v0.begin()[1], L'a');\r\n    v0.erase(v0.begin(), v0.begin() + 1);\r\n    CHECK_INT(*v0.begin(), L'a');\r\n\r\n    v0.clear();\r\n    CHECK(v0.empty());\r\n    v0.swap(v1);\r\n    CHECK(!v0.empty());\r\n    CHECK(v1.empty());\r\n    STD swap(v0, v1);\r\n    CHECK(v0.empty());\r\n    CHECK(!v1.empty());\r\n    CHECK(v1 == v1);\r\n    CHECK(v0 < v1);\r\n    CHECK(v0 != v1);\r\n    CHECK(v1 > v0);\r\n    CHECK(v0 <= v1);\r\n    CHECK(v1 >= v0);\r\n}\r\n\r\nvoid test_main() { // test basic workings of string definitions\r\n    Mycont s1, s2(30, L'\\0');\r\n    Mycont s3(4, L'\\0');\r\n    Mycont s4(L\"s4\"), s5(L\"s5xxx\", 2), s6(3, L'a');\r\n    Mycont s7(5, L'b'), s8(1, L'c');\r\n    Mycont s9(s7);\r\n    Mycont s10(L\"s5xxx\", 1, 4);\r\n\r\n    Mycont::traits_type* p_tr = (Mytr*) nullptr;\r\n\r\n    p_tr = p_tr; // to quiet diagnostics\r\n\r\n    CHECK_WSTR(s1.c_str(), L\"\");\r\n    CHECK_WSTR(s2.c_str(), L\"\");\r\n    CHECK_WMEM(s3.c_str(), L\"\\0\\0\\0\\0\", 5);\r\n    CHECK_WSTR(s4.c_str(), L\"s4\");\r\n    CHECK_WSTR(s5.c_str(), L\"s5\");\r\n    CHECK_WSTR(s6.c_str(), L\"aaa\");\r\n    CHECK_WSTR(s7.c_str(), L\"bbbbb\");\r\n    CHECK_WSTR(s8.c_str(), L\"c\");\r\n    CHECK_SIZE_T(s7.length(), 5);\r\n    CHECK_WSTR(s9.c_str(), L\"bbbbb\");\r\n    CHECK_WSTR(s10.c_str(), L\"5xxx\");\r\n\r\n    // test allocator constructors\r\n    Myal al;\r\n    Mycont s1a(al);\r\n    Mycont s4a(L\"s4\", al);\r\n    Mycont s5a(L\"s5xxx\", 2, al);\r\n    Mycont s6a(3, L'a', al);\r\n    Mycont s10a(Mycont(L\"s5xxx\"), 1, 4, al);\r\n\r\n    CHECK_WSTR(s1a.c_str(), L\"\");\r\n    CHECK_WSTR(s4a.c_str(), L\"s4\");\r\n    CHECK_WSTR(s5a.c_str(), L\"s5\");\r\n    CHECK_WSTR(s6a.c_str(), L\"aaa\");\r\n    CHECK_WSTR(s10a.c_str(), L\"5xxx\");\r\n\r\n    Mycont s9a(s7, al);\r\n    CHECK_WSTR(s9a.c_str(), L\"bbbbb\");\r\n\r\n    // test assignments\r\n    s1 = L\"hello\";\r\n    CHECK_WSTR(s1.c_str(), L\"hello\");\r\n    s1 = L'x';\r\n    CHECK_WSTR(s1.c_str(), L\"x\");\r\n    s1 = s4;\r\n    CHECK_WSTR(s1.c_str(), L\"s4\");\r\n    s1.assign(L\"AB\");\r\n    CHECK_WSTR(s1.c_str(), L\"AB\");\r\n    s1.assign(1, L'C');\r\n    CHECK_WSTR(s1.c_str(), L\"C\");\r\n    s1.assign(s4);\r\n    CHECK_WSTR(s1.c_str(), L\"s4\");\r\n\r\n    // test appends\r\n    s1 += L\"abc\";\r\n    CHECK_WSTR(s1.c_str(), L\"s4abc\");\r\n    s1 += L'd';\r\n    CHECK_WSTR(s1.c_str(), L\"s4abcd\");\r\n    s1 += s4;\r\n    CHECK_WSTR(s1.c_str(), L\"s4abcds4\");\r\n    s1 = L\"A\";\r\n    s1.append(L\"BC\");\r\n    CHECK_WSTR(s1.c_str(), L\"ABC\");\r\n    s1.append(1, L'D');\r\n    CHECK_WSTR(s1.c_str(), L\"ABCD\");\r\n    s1.append(s4);\r\n    CHECK_WSTR(s1.c_str(), L\"ABCDs4\");\r\n    CHECK_WSTR((s4 + s5).c_str(), L\"s4s5\");\r\n    CHECK_WSTR((s4 + L\"s5\").c_str(), L\"s4s5\");\r\n    CHECK_WSTR((L\"s4\" + s5).c_str(), L\"s4s5\");\r\n    CHECK_WSTR((s4 + L'5').c_str(), L\"s45\");\r\n    CHECK_WSTR((L'4' + s5).c_str(), L\"4s5\");\r\n\r\n    CHECK(s4 + L\"more\" == STD wstring(L\"s4more\"));\r\n    CHECK(L\"more\" + s4 == STD wstring(L\"mores4\"));\r\n    CHECK(s4 + L'+' == STD wstring(L\"s4+\"));\r\n    CHECK(L'+' + s4 == STD wstring(L\"+s4\"));\r\n\r\n    {\r\n        Mycont s11(L\"abc\");\r\n        Mycont s12(L\"def\");\r\n\r\n        CHECK_WSTR((s11 + STD wstring(L\"def\")).c_str(), L\"abcdef\");\r\n        CHECK_WSTR((STD wstring(L\"abc\") + s12).c_str(), L\"abcdef\");\r\n        CHECK_WSTR((STD wstring(L\"abc\") + STD wstring(L\"def\")).c_str(), L\"abcdef\");\r\n\r\n        CHECK_WSTR((STD wstring(L\"abc\") + L\"def\").c_str(), L\"abcdef\");\r\n        CHECK_WSTR((STD wstring(L\"abc\") + L'd').c_str(), L\"abcd\");\r\n        CHECK_WSTR((L\"abc\" + STD wstring(L\"def\")).c_str(), L\"abcdef\");\r\n        CHECK_WSTR((L'a' + STD wstring(L\"def\")).c_str(), L\"adef\");\r\n\r\n        Mycont s13(STD move(s12));\r\n        CHECK_WSTR(s13.c_str(), L\"def\");\r\n    }\r\n\r\n    // test inserts\r\n    s1 = L\"abc\";\r\n    s1.insert(3, L\"Dd\");\r\n    s1.insert(1, L\"BC\", 1);\r\n    s1.insert(0, L\"A\");\r\n    CHECK_WSTR(s1.c_str(), L\"AaBbcDd\");\r\n    s1.insert(7, 2, L'E');\r\n    s1.insert(4, 1, L'C');\r\n    CHECK_WSTR(s1.c_str(), L\"AaBbCcDdEE\");\r\n    s1.insert(10, s4);\r\n    s1.insert(0, s4, 0, 1);\r\n    CHECK_WSTR(s1.c_str(), L\"sAaBbCcDdEEs4\");\r\n\r\n    // test replaces\r\n    s1 = L\"\";\r\n    s1.replace((CSTD size_t) 0, (CSTD size_t) 0, L\"123ab789\");\r\n    s1.replace(3, 2, L\"45678\", 3);\r\n    CHECK_WSTR(s1.c_str(), L\"123456789\");\r\n    s1.replace(1, 3, L\"xx\", 2);\r\n    s1.replace((CSTD size_t) 0, (CSTD size_t) 0, L\"0\");\r\n    CHECK_WSTR(s1.c_str(), L\"01xx56789\");\r\n    s1.replace(3, 1, s4, 1, 1);\r\n    s1.replace(2, 1, s4);\r\n    CHECK_WSTR(s1.c_str(), L\"01s4456789\");\r\n\r\n    // test copy\r\n    wchar_t buf[10];\r\n    s1 = L\"012XX\";\r\n    CHECK_SIZE_T(s1.copy(buf, sizeof(buf) / sizeof(buf[0])), 5);\r\n    CHECK_WMEM(buf, L\"012XX\", 5);\r\n    CHECK_SIZE_T(s1.copy(buf, 3, 1), 3);\r\n    CHECK_WMEM(buf, L\"12X\", 3);\r\n\r\n    // test finds\r\n    s1 = L\"s4s4\";\r\n    CHECK_SIZE_T(s1.find(s4), 0);\r\n    CHECK_SIZE_T(s1.find(s4, 1), 2);\r\n    CHECK_SIZE_T(s1.find(s4, 3), STD wstring::npos);\r\n    CHECK_SIZE_T(s1.find(L\"s4\"), 0);\r\n    CHECK_SIZE_T(s1.find(L\"s4\", 3), STD wstring::npos);\r\n    CHECK_SIZE_T(s1.find(L\"s4XX\", 1, 2), 2);\r\n    CHECK_SIZE_T(s1.find(L's'), 0);\r\n    CHECK_SIZE_T(s1.find(L's', 1), 2);\r\n    CHECK_SIZE_T(s1.find(L'x'), STD wstring::npos);\r\n\r\n    CHECK_SIZE_T(s1.rfind(s4), 2);\r\n    CHECK_SIZE_T(s1.rfind(s4, 1), 0);\r\n    CHECK_SIZE_T(s1.rfind(s5, 3), STD wstring::npos);\r\n    CHECK_SIZE_T(s1.rfind(L\"s4\"), 2);\r\n    CHECK_SIZE_T(s1.rfind(L\"s4\", 3), 2);\r\n    CHECK_SIZE_T(s1.rfind(L\"s4XX\", 1, 3), STD wstring::npos);\r\n    CHECK_SIZE_T(s1.rfind(L's'), 2);\r\n    CHECK_SIZE_T(s1.rfind(L's', 2), 2);\r\n    CHECK_SIZE_T(s1.rfind(L'x'), STD wstring::npos);\r\n\r\n    CHECK_SIZE_T(s1.find_first_of(s4), 0);\r\n    CHECK_SIZE_T(s1.find_first_of(s4, 1), 1);\r\n    CHECK_SIZE_T(s1.find_first_of(s4, 4), STD wstring::npos);\r\n    CHECK_SIZE_T(s1.find_first_of(L\"s4\"), 0);\r\n    CHECK_SIZE_T(s1.find_first_of(L\"s4\", 3), 3);\r\n    CHECK_SIZE_T(s1.find_first_of(L\"abs\", 1, 2), STD wstring::npos);\r\n    CHECK_SIZE_T(s1.find_first_of(L's'), 0);\r\n    CHECK_SIZE_T(s1.find_first_of(L's', 1), 2);\r\n    CHECK_SIZE_T(s1.find_first_of(L'x'), STD wstring::npos);\r\n\r\n    CHECK_SIZE_T(s1.find_last_of(s4), 3);\r\n    CHECK_SIZE_T(s1.find_last_of(s4, 1), 1);\r\n    CHECK_SIZE_T(s1.find_last_of(s6), STD wstring::npos);\r\n    CHECK_SIZE_T(s1.find_last_of(L\"s4\"), 3);\r\n    CHECK_SIZE_T(s1.find_last_of(L\"s4\", 2), 2);\r\n    CHECK_SIZE_T(s1.find_last_of(L\"abs\", 1, 2), STD wstring::npos);\r\n    CHECK_SIZE_T(s1.find_last_of(L's'), 2);\r\n    CHECK_SIZE_T(s1.find_last_of(L's', 1), 0);\r\n    CHECK_SIZE_T(s1.find_last_of(L'x'), STD wstring::npos);\r\n\r\n    CHECK_SIZE_T(s1.find_first_not_of(s5), 1);\r\n    CHECK_SIZE_T(s1.find_first_not_of(s5, 2), 3);\r\n    CHECK_SIZE_T(s1.find_first_not_of(s4), STD wstring::npos);\r\n    CHECK_SIZE_T(s1.find_first_not_of(L\"s5\"), 1);\r\n    CHECK_SIZE_T(s1.find_first_not_of(L\"s5\", 2), 3);\r\n    CHECK_SIZE_T(s1.find_first_not_of(L\"s4a\", 1, 2), STD wstring::npos);\r\n    CHECK_SIZE_T(s1.find_first_not_of(L's'), 1);\r\n    CHECK_SIZE_T(s1.find_first_not_of(L's', 2), 3);\r\n    CHECK_SIZE_T(s1.find_first_not_of(L's', 4), STD wstring::npos);\r\n\r\n    CHECK_SIZE_T(s1.find_last_not_of(s5), 3);\r\n    CHECK_SIZE_T(s1.find_last_not_of(s5, 2), 1);\r\n    CHECK_SIZE_T(s1.find_last_not_of(s4), STD wstring::npos);\r\n    CHECK_SIZE_T(s1.find_last_not_of(L\"s5\"), 3);\r\n    CHECK_SIZE_T(s1.find_last_not_of(L\"s5\", 2), 1);\r\n    CHECK_SIZE_T(s1.find_last_not_of(L\"s4a\", 1, 2), STD wstring::npos);\r\n    CHECK_SIZE_T(s1.find_last_not_of(L's'), 3);\r\n    CHECK_SIZE_T(s1.find_last_not_of(L's', 2), 1);\r\n    CHECK_SIZE_T(s1.find_last_not_of(L's', 0), STD wstring::npos);\r\n\r\n    // test compares\r\n    CHECK(s1.compare(s1) == 0);\r\n    CHECK(s1.compare(0, 6, s1) == 0);\r\n    CHECK(s1.compare(2, 2, s4) == 0);\r\n    CHECK(s1.compare(2, 2, s4, 0, 2) == 0);\r\n    CHECK(s1.compare(L\"s4s4\") == 0);\r\n    CHECK(s1.compare(0, 2, L\"s4\") == 0);\r\n    CHECK(s1.compare(0, 2, L\"s4\", 2) == 0);\r\n    CHECK(s1.compare(2, 2, L\"s4xx\", 0, 2) == 0);\r\n    CHECK(s1.compare(s4) != 0);\r\n    CHECK(s1.compare(1, 4, s1) != 0);\r\n    CHECK(s1.compare(0, 4, s4, 0, 2) != 0);\r\n    CHECK(s1.compare(L\"s4s5\") != 0);\r\n    CHECK(s1.compare(0, 4, L\"s44\", 1) != 0);\r\n    CHECK(s1.compare(1, 4, L\"s4xx\", 0, 2) != 0);\r\n\r\n    CHECK(s1 == s1);\r\n    CHECK(s1 == L\"s4s4\");\r\n    CHECK(L\"s4\" == s4);\r\n    CHECK(s1 != s4);\r\n    CHECK(s1 != L\"xx\");\r\n    CHECK(L\"s4\" != s1);\r\n\r\n    CHECK(s4 < s1);\r\n    CHECK(s4 < L\"s5\");\r\n    CHECK(L\"s3\" < s4);\r\n    CHECK(s4 <= s1);\r\n    CHECK(s4 <= L\"s5\");\r\n    CHECK(L\"s3\" <= s4);\r\n\r\n    CHECK(s1 > s4);\r\n    CHECK(L\"s5\" > s4);\r\n    CHECK(s4 > L\"s3\");\r\n    CHECK(s1 >= s4);\r\n    CHECK(L\"s5\" >= s4);\r\n    CHECK(s4 >= L\"s3\");\r\n\r\n    // test I/O\r\n    static const wchar_t input[] = L\"s1 s2 s3\\n   abc\";\r\n    STD wistringstream ins(input);\r\n    STD wostringstream outs;\r\n\r\n    ins >> s1;\r\n    CHECK_WSTR(s1.c_str(), L\"s1\");\r\n    ins >> s1;\r\n    CHECK_WSTR(s1.c_str(), L\"s2\");\r\n    STD getline(ins, s1);\r\n    CHECK_WSTR(s1.c_str(), L\" s3\");\r\n    STD getline(ins, s1, L'c');\r\n    CHECK_WSTR(s1.c_str(), L\"   ab\");\r\n    outs << s1;\r\n    s1 = outs.str();\r\n    CHECK_WSTR(s1.c_str(), L\"   ab\");\r\n\r\n    {\r\n        STD wstringbuf sbuf;\r\n        sbuf.str(L\"x\");\r\n        STD wistream(&sbuf) >> s1;\r\n        CHECK_WSTR(s1.c_str(), L\"x\");\r\n\r\n        sbuf.str(L\"xx\\n\");\r\n        STD getline(STD wistream(&sbuf), s1);\r\n        CHECK_WSTR(s1.c_str(), L\"xx\");\r\n\r\n        sbuf.str(L\"xxxc\\n\");\r\n        STD getline(STD wistream(&sbuf), s1, L'c');\r\n        CHECK_WSTR(s1.c_str(), L\"xxx\");\r\n\r\n        sbuf.str(L\"\");\r\n        s1 = L\"yy\";\r\n        STD wostream(&sbuf) << s1;\r\n        CHECK_WSTR(sbuf.str().c_str(), L\"yy\");\r\n    }\r\n\r\n    { // test sto* functions\r\n        STD size_t idx = 0;\r\n        bool ok        = false;\r\n        STD wstring str(L\"x\");\r\n        try {\r\n            (void) STD stoi(str, &idx);\r\n        } catch (STD invalid_argument) {\r\n            ok = true;\r\n        } catch (...) {\r\n            CHECK_MSG(\"unknown exception thrown\", false);\r\n        }\r\n        CHECK_MSG(\"invalid_argument not thrown\", ok);\r\n        CHECK_SIZE_T(idx, 0);\r\n\r\n        try {\r\n            (void) STD stoi(L\"0xfffffffff\", &idx, 0);\r\n        } catch (STD out_of_range) {\r\n            ok = true;\r\n        } catch (...) {\r\n            CHECK_MSG(\"unknown exception thrown\", false);\r\n        }\r\n        CHECK_MSG(\"out_of_range not thrown\", ok);\r\n\r\n        CHECK_INT(STD stoi(L\"-37\", &idx), -37);\r\n        CHECK_SIZE_T(idx, 3);\r\n        CHECK_INT(STD stol(L\"0x5a\", nullptr, 0), 0x5a);\r\n        CHECK_INT(STD stoul(L\"5c\", nullptr, 16), 0x5c);\r\n\r\n        float fl = STD stof(L\"-19.25\");\r\n        CHECK_DOUBLE(fl, -19.25);\r\n        CHECK_DOUBLE(STD stod(L\"-19.25\"), -19.25);\r\n        CHECK_DOUBLE(STD stold(L\"-19.25\", &idx), -19.25);\r\n        CHECK_SIZE_T(idx, 6);\r\n\r\n        long long ll = 0xffffffff;\r\n        ll <<= 8;\r\n        CHECK(STD stoll(L\"0xffffffff00\", nullptr, 0) == ll);\r\n        CHECK(STD stoull(L\"0xffffffff00\", nullptr, 0) == (unsigned long long) ll);\r\n\r\n        CHECK_WSTR(STD to_wstring((int) -23).c_str(), L\"-23\");\r\n        CHECK_WSTR(STD to_wstring((unsigned int) 23).c_str(), L\"23\");\r\n        CHECK_WSTR(STD to_wstring((long) -23).c_str(), L\"-23\");\r\n        CHECK_WSTR(STD to_wstring((unsigned long) 23).c_str(), L\"23\");\r\n        CHECK_WSTR(STD to_wstring((long long) -23).c_str(), L\"-23\");\r\n        CHECK_WSTR(STD to_wstring((unsigned long long) 23).c_str(), L\"23\");\r\n        CHECK_WSTR(STD to_wstring((long double) 23.5).c_str(), L\"23.500000\");\r\n        CHECK_WSTR(STD to_wstring((float) -23.0f).c_str(), L\"-23.000000\");\r\n        CHECK_WSTR(STD to_wstring((double) 23.0).c_str(), L\"23.000000\");\r\n        CHECK_WSTR(STD to_wstring((long double) -23.0L).c_str(), L\"-23.000000\");\r\n    }\r\n\r\n    {\r\n        STD initializer_list<wchar_t> init{L'a', L'b', L'c'};\r\n        STD wstring s11(init);\r\n        CHECK_SIZE_T(s11.size(), 3);\r\n        CHECK_INT(s11[2], L'c');\r\n\r\n        STD wstring s12(init, al);\r\n        CHECK_SIZE_T(s12.size(), 3);\r\n        CHECK_INT(s12[2], L'c');\r\n\r\n        s11 += init;\r\n        CHECK_SIZE_T(s11.size(), 6);\r\n        CHECK_INT(s11[5], L'c');\r\n\r\n        s11 = init;\r\n        CHECK_SIZE_T(s11.size(), 3);\r\n        CHECK_INT(s11[2], L'c');\r\n\r\n        s11.append(init);\r\n        CHECK_SIZE_T(s11.size(), 6);\r\n        CHECK_INT(s11[5], L'c');\r\n\r\n        s11.assign(init);\r\n        CHECK_SIZE_T(s11.size(), 3);\r\n        CHECK_INT(s11[2], L'c');\r\n\r\n        CHECK_INT(*s11.insert(s11.begin() + 1, init), *init.begin());\r\n        CHECK_SIZE_T(s11.size(), 6);\r\n        CHECK_INT(s11[2], L'b');\r\n\r\n        s11.replace(s11.begin(), s11.begin() + 2, init);\r\n        CHECK_SIZE_T(s11.size(), 7);\r\n        CHECK_INT(s11[2], L'c');\r\n    }\r\n\r\n    // test template equivalence\r\n    STD basic_string<wchar_t, STD char_traits<wchar_t>>* ps = (STD wstring*) nullptr;\r\n\r\n    ps = ps; // to quiet diagnostics\r\n\r\n    test_traits();\r\n    test_cont();\r\n\r\n    { // test u16/u32 string\r\n        STD u16string str1(5, 'x');\r\n        STD u32string str2(4, 'y');\r\n        CHECK(str1[4] == 'x');\r\n        CHECK(str2[3] == 'y');\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/strstream/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <strstream>\r\n#define TEST_NAME \"<strstream>\"\r\n\r\n#define _SILENCE_CXX17_STRSTREAM_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include <limits.h>\r\n#include <stdlib.h>\r\n#include <strstream>\r\n\r\n#define HUGE 2\r\n\r\nchar buf[]        = \"12345678\";\r\nstatic int allocs = 0;\r\nstatic int frees  = 0;\r\n\r\nvoid* salloc(CSTD size_t n) { // allocate storage for string\r\n    ++allocs;\r\n    return CSTD malloc(n);\r\n}\r\n\r\nvoid sfree(void* p) { // free storage for string\r\n    ++frees;\r\n    CSTD free(p);\r\n}\r\n\r\nvoid t1() { // test dynamic strstreambufs\r\n    STD strstreambuf sb0, sb1(1), sb2(&salloc, &sfree);\r\n    STD ostream outs(&sb0);\r\n\r\n    outs << \"dynamic strstreambuf 0\" << STD ends;\r\n    CHECK_STR(sb0.str(), \"dynamic strstreambuf 0\");\r\n    sb0.freeze();\r\n    outs.rdbuf(&sb1);\r\n    outs << \"dynamic strstreambuf 1\" << STD ends;\r\n    CHECK_STR(sb1.str(), \"dynamic strstreambuf 1\");\r\n    sb1.freeze(1);\r\n    outs.rdbuf(&sb2);\r\n    outs << \"allocating strstreambuf\" << STD ends;\r\n    CHECK_STR(sb2.str(), \"allocating strstreambuf\");\r\n    sb2.freeze(0);\r\n}\r\n\r\nvoid t2() { // test read-only strstreambufs\r\n    STD strstreambuf sb1((const char*) buf, 5);\r\n    STD strstreambuf sb2((unsigned char*) buf, 0);\r\n    STD strstreambuf sb3((signed char*) buf, HUGE);\r\n    STD strstreambuf sb4((const char*) buf, 5);\r\n    STD strstreambuf sb5((const unsigned char*) buf, 0);\r\n    STD strstreambuf sb6((const signed char*) buf, HUGE);\r\n\r\n    CHECK_STR(sb1.str(), buf);\r\n    CHECK_INT(sb1.pcount(), 0);\r\n    CHECK_INT((STD streamoff) sb1.pubseekoff(0, STD ios::end, STD ios::in), 5);\r\n    CHECK_INT((STD streamoff) sb1.pubseekoff(1, STD ios::cur, STD ios::out), -1); // force failure for DR453\r\n    CHECK_STR(sb2.str(), buf);\r\n    CHECK_INT(sb2.pcount(), 0);\r\n    CHECK_INT((STD streamoff) sb2.pubseekoff(0, STD ios::end, STD ios::in), 8);\r\n    CHECK_INT((STD streamoff) sb2.pubseekoff(0, STD ios::cur), -1);\r\n    CHECK_STR(sb3.str(), buf);\r\n    CHECK_INT(sb3.pcount(), 0);\r\n    CHECK_STR(sb4.str(), buf);\r\n    CHECK_INT(sb4.pcount(), 0);\r\n    CHECK_INT((STD streamoff) sb4.pubseekoff(0, STD ios::end, STD ios::in), 5);\r\n    CHECK_STR(sb5.str(), buf);\r\n    CHECK_INT(sb5.pcount(), 0);\r\n    CHECK_STR(sb6.str(), buf);\r\n    CHECK_INT(sb6.pcount(), 0);\r\n\r\n    {\r\n        typedef STD strstreambuf Mycont;\r\n        Mycont v6(\"xx\", HUGE);\r\n        Mycont v7(STD move(v6));\r\n        CHECK_PTR(v6.str(), nullptr);\r\n        CHECK_STR(v7.str(), \"xx\");\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_PTR(v7.str(), nullptr);\r\n        CHECK_STR(v8.str(), \"xx\");\r\n\r\n        v7.swap(v8);\r\n        CHECK_STR(v7.str(), \"xx\");\r\n        CHECK_PTR(v8.str(), nullptr);\r\n    }\r\n\r\n    {\r\n        typedef STD istrstream Mycont;\r\n        Mycont v6((const char*) \"xx\", HUGE);\r\n        Mycont v7(STD move(v6));\r\n        CHECK_PTR(v6.str(), nullptr);\r\n        CHECK_STR(v7.str(), \"xx\");\r\n\r\n        Mycont v8((const char*) \"yy\");\r\n        v8 = STD move(v7);\r\n        CHECK_STR(v8.str(), \"xx\");\r\n\r\n        v7.swap(v8);\r\n        CHECK_STR(v7.str(), \"xx\");\r\n    }\r\n\r\n    {\r\n        typedef STD ostrstream Mycont;\r\n        Mycont v6((char*) \"xx\", HUGE);\r\n        Mycont v7(STD move(v6));\r\n        CHECK_PTR(v6.str(), nullptr);\r\n        CHECK_STR(v7.str(), \"xx\");\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_PTR(v7.str(), nullptr);\r\n        CHECK_STR(v8.str(), \"xx\");\r\n\r\n        v7.swap(v8);\r\n        CHECK_STR(v7.str(), \"xx\");\r\n        CHECK_PTR(v8.str(), nullptr);\r\n    }\r\n\r\n    {\r\n        typedef STD strstream Mycont;\r\n        Mycont v6((char*) \"xx\", HUGE);\r\n        Mycont v7(STD move(v6));\r\n        CHECK_PTR(v6.str(), nullptr);\r\n        CHECK_STR(v7.str(), \"xx\");\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_PTR(v7.str(), nullptr);\r\n        CHECK_STR(v8.str(), \"xx\");\r\n\r\n        v7.swap(v8);\r\n        CHECK_STR(v7.str(), \"xx\");\r\n        CHECK_PTR(v8.str(), nullptr);\r\n    }\r\n}\r\n\r\nvoid t3() { // test read-write strstreambufs\r\n    STD strstreambuf sb1(buf, 5, buf);\r\n    STD strstreambuf sb2((unsigned char*) buf, 0, (unsigned char*) buf + 1);\r\n    STD strstreambuf sb3((signed char*) buf, HUGE, (signed char*) buf);\r\n    STD ostream outs(&sb1);\r\n\r\n    outs << 'A';\r\n    CHECK_STR(sb1.str(), \"A2345678\");\r\n    CHECK_INT(sb1.pcount(), 1);\r\n    outs << 'B';\r\n    CHECK_STR(sb1.str(), \"AB345678\");\r\n    CHECK_INT(sb1.pcount(), 2);\r\n    CHECK_INT((STD streamoff) sb1.pubseekoff(6, STD ios::beg, STD ios::out), -1);\r\n    CHECK_STR(sb2.str(), \"AB345678\");\r\n    CHECK_INT(sb2.pcount(), 0);\r\n    outs.rdbuf(&sb2), sb2.freeze(0), outs << 'C';\r\n    CHECK_STR(sb2.str(), \"AC345678\");\r\n    CHECK_INT((STD streamoff) sb2.pubseekoff(6, STD ios::beg, STD ios::out), 6);\r\n    CHECK_INT(sb2.pcount(), 6);\r\n    CHECK_STR(sb3.str(), \"AC345678\");\r\n    CHECK_INT(sb3.pcount(), 0);\r\n}\r\n\r\nvoid test_main() { // test basic workings of strstream definitions\r\n    STD istrstream is1(\"s1\"), is2((const char*) \"s2x\", 2);\r\n    STD istrstream is3((char*) \"s3\"), is4((char*) \"s4\", 2);\r\n    CHECK_STR(is1.rdbuf()->str(), \"s1\");\r\n    CHECK_STR(is3.str(), \"s3\");\r\n\r\n    char buf0[] = \"12345\";\r\n    STD ostrstream os1, os2(buf0, 4);\r\n    CHECK_STR(os2.rdbuf()->str(), \"12345\");\r\n\r\n    char buf1[] = \"d\\0fgh\";\r\n    STD ostrstream os3(buf1, sizeof(buf1), STD ios::app);\r\n    os3 << 'e';\r\n    CHECK_STR(os3.str(), \"defgh\");\r\n    CHECK_INT(os3.pcount(), 1);\r\n    os3.freeze(0), os3 << 'F';\r\n    CHECK_STR(os3.str(), \"deFgh\");\r\n    CHECK_INT(os3.pcount(), 2);\r\n\r\n    t1();\r\n    CHECK(0 < allocs && 0 < frees);\r\n    t2();\r\n    t3();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/system_error/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <system_error>\r\n#define TEST_NAME \"<system_error>\"\r\n\r\n#define _SILENCE_CXX23_UNIX_STREAMS_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include <stdexcept>\r\n#include <system_error>\r\n\r\n#define ERR STD errc::\r\n\r\n#define ERR_ENUM STD errc\r\n\r\nstruct error_pair {\r\n    ERR_ENUM ec;\r\n    int val;\r\n};\r\n\r\nstatic const error_pair errs[] = {\r\n    // enumeration constants\r\n    {ERR address_family_not_supported, EAFNOSUPPORT},\r\n    {ERR address_in_use, EADDRINUSE},\r\n    {ERR address_not_available, EADDRNOTAVAIL},\r\n    {ERR already_connected, EISCONN},\r\n    {ERR argument_list_too_long, E2BIG},\r\n    {ERR argument_out_of_domain, EDOM},\r\n    {ERR bad_address, EFAULT},\r\n    {ERR bad_file_descriptor, EBADF},\r\n    {ERR bad_message, EBADMSG},\r\n    {ERR broken_pipe, EPIPE},\r\n    {ERR connection_aborted, ECONNABORTED},\r\n    {ERR connection_already_in_progress, EALREADY},\r\n    {ERR connection_refused, ECONNREFUSED},\r\n    {ERR connection_reset, ECONNRESET},\r\n    {ERR cross_device_link, EXDEV},\r\n    {ERR destination_address_required, EDESTADDRREQ},\r\n    {ERR device_or_resource_busy, EBUSY},\r\n    {ERR directory_not_empty, ENOTEMPTY},\r\n    {ERR executable_format_error, ENOEXEC},\r\n    {ERR file_exists, EEXIST},\r\n    {ERR file_too_large, EFBIG},\r\n    {ERR filename_too_long, ENAMETOOLONG},\r\n    {ERR function_not_supported, ENOSYS},\r\n    {ERR host_unreachable, EHOSTUNREACH},\r\n    {ERR identifier_removed, EIDRM},\r\n    {ERR illegal_byte_sequence, EILSEQ},\r\n    {ERR inappropriate_io_control_operation, ENOTTY},\r\n    {ERR interrupted, EINTR},\r\n    {ERR invalid_argument, EINVAL},\r\n    {ERR invalid_seek, ESPIPE},\r\n    {ERR io_error, EIO},\r\n    {ERR is_a_directory, EISDIR},\r\n    {ERR message_size, EMSGSIZE},\r\n    {ERR network_down, ENETDOWN},\r\n    {ERR network_reset, ENETRESET},\r\n    {ERR network_unreachable, ENETUNREACH},\r\n    {ERR no_buffer_space, ENOBUFS},\r\n    {ERR no_child_process, ECHILD},\r\n    {ERR no_link, ENOLINK},\r\n    {ERR no_lock_available, ENOLCK},\r\n    {ERR no_message_available, ENODATA},\r\n    {ERR no_message, ENOMSG},\r\n    {ERR no_protocol_option, ENOPROTOOPT},\r\n    {ERR no_space_on_device, ENOSPC},\r\n    {ERR no_stream_resources, ENOSR},\r\n    {ERR no_such_device_or_address, ENXIO},\r\n    {ERR no_such_device, ENODEV},\r\n    {ERR no_such_file_or_directory, ENOENT},\r\n    {ERR no_such_process, ESRCH},\r\n    {ERR not_a_directory, ENOTDIR},\r\n    {ERR not_a_socket, ENOTSOCK},\r\n    {ERR not_a_stream, ENOSTR},\r\n    {ERR not_connected, ENOTCONN},\r\n    {ERR not_enough_memory, ENOMEM},\r\n    {ERR not_supported, ENOTSUP},\r\n    {ERR operation_canceled, ECANCELED},\r\n    {ERR operation_in_progress, EINPROGRESS},\r\n    {ERR operation_not_permitted, EPERM},\r\n    {ERR operation_not_supported, EOPNOTSUPP},\r\n    {ERR operation_would_block, EWOULDBLOCK},\r\n    {ERR owner_dead, EOWNERDEAD},\r\n    {ERR permission_denied, EACCES},\r\n    {ERR protocol_error, EPROTO},\r\n    {ERR protocol_not_supported, EPROTONOSUPPORT},\r\n    {ERR read_only_file_system, EROFS},\r\n    {ERR resource_deadlock_would_occur, EDEADLK},\r\n    {ERR resource_unavailable_try_again, EAGAIN},\r\n    {ERR result_out_of_range, ERANGE},\r\n    {ERR state_not_recoverable, ENOTRECOVERABLE},\r\n    {ERR stream_timeout, ETIME},\r\n    {ERR text_file_busy, ETXTBSY},\r\n    {ERR timed_out, ETIMEDOUT},\r\n    {ERR too_many_files_open_in_system, ENFILE},\r\n    {ERR too_many_files_open, EMFILE},\r\n    {ERR too_many_links, EMLINK},\r\n    {ERR too_many_symbolic_link_levels, ELOOP},\r\n    {ERR value_too_large, EOVERFLOW},\r\n    {ERR wrong_protocol_type, EPROTOTYPE},\r\n};\r\n\r\nvoid test_main() { // run tests\r\n    // test generic errors\r\n    for (const auto& p : errs) {\r\n        CHECK_INT((int) p.ec, p.val);\r\n    }\r\n\r\n    // test error_code\r\n    {\r\n        STD error_code ec0;\r\n        CSTD size_t hash_val = STD hash<STD error_code>()(ec0);\r\n        CHECK_INT(hash_val, STD hash<STD error_code>()(ec0));\r\n\r\n        CHECK_INT(ec0.value(), 0);\r\n        CHECK(ec0.category() == STD system_category());\r\n        CHECK(!ec0);\r\n\r\n        STD error_code ec1 = STD make_error_code(ERR too_many_links);\r\n        CHECK_INT(ec1.value(), ERR too_many_links);\r\n        CHECK(ec1.category() == STD generic_category());\r\n        CHECK(ec1.value() != 0);\r\n\r\n        STD error_code ec2(EDOM, STD system_category());\r\n        CHECK_INT(ec2.value(), EDOM);\r\n        CHECK(ec2.category() == STD system_category());\r\n        CHECK(ec2.value() != 0);\r\n\r\n        STD string str = ec2.message();\r\n        CHECK(!str.empty());\r\n\r\n        CHECK(ec0 != ec1);\r\n        CHECK(ec1 == ec1);\r\n        CHECK(!(ec1 < ec1));\r\n\r\n        STD error_condition ec0x, ec1x(ERR too_many_links);\r\n        CHECK(ec0 == ec0x);\r\n        CHECK(ec0 != ec1x);\r\n        CHECK(!STD is_error_code_enum<ERR_ENUM>::value);\r\n        CHECK(ec1 == STD make_error_code(ERR too_many_links));\r\n\r\n        CHECK(ec1.default_error_condition() == ec1.category().default_error_condition(ec1.value()));\r\n    }\r\n\r\n    // test error_condition\r\n    {\r\n        STD error_condition ec0;\r\n\r\n        CHECK_INT(ec0.value(), 0);\r\n        CHECK(ec0.category() == STD generic_category());\r\n        CHECK(!ec0);\r\n\r\n        STD error_code ec1 = STD make_error_code(ERR too_many_links);\r\n        CHECK_INT(ec1.value(), ERR too_many_links);\r\n        CHECK(ec1.category() == STD generic_category());\r\n        CHECK(ec1.value() != 0);\r\n\r\n        STD error_code ec2(EDOM, STD system_category());\r\n        CHECK_INT(ec2.value(), EDOM);\r\n        CHECK(ec2.category() == STD system_category());\r\n        CHECK(ec2.value() != 0);\r\n\r\n        STD string str = ec2.message();\r\n        CHECK(!str.empty());\r\n\r\n        CHECK(ec0 != ec1);\r\n        CHECK(ec1 == ec1);\r\n        CHECK(!(ec1 < ec1));\r\n\r\n        STD error_code ec0x, ec1x = STD make_error_code(ERR too_many_links);\r\n        CHECK(ec0 == ec0x);\r\n        CHECK(ec0 != ec1x);\r\n        CHECK(STD is_error_condition_enum<ERR_ENUM>::value);\r\n        CHECK(ec1 == STD make_error_condition(ERR too_many_links));\r\n    }\r\n\r\n    // test error_category\r\n    const STD error_category* pcat = &STD generic_category();\r\n\r\n    CHECK(pcat != &STD system_category());\r\n    CHECK(STD generic_category().name() != nullptr);\r\n    CHECK(!STD generic_category().message(EDOM).empty());\r\n    CHECK(STD generic_category() != STD system_category());\r\n    CHECK(STD generic_category() == STD generic_category());\r\n\r\n    // test system_error\r\n    STD system_error syserr1((int) ERR io_error, STD generic_category(), STD string(\"help\"));\r\n    STD system_error syserr2((int) ERR io_error, STD system_category(), STD string(\"help\"));\r\n    STD system_error syserr3((int) ERR io_error, STD generic_category(), \"help\");\r\n    STD system_error syserr4((int) ERR io_error, STD system_category(), \"help\");\r\n    STD runtime_error* pre = &syserr1;\r\n\r\n    pre = &syserr2;\r\n    pre = pre; // to quiet diagnostics\r\n    CHECK_INT(syserr1.code().value(), ERR io_error);\r\n    CHECK(*syserr2.what() != '\\0');\r\n    CHECK_INT(syserr3.code().value(), ERR io_error);\r\n    CHECK(*syserr4.what() != '\\0');\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/tuple/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <tuple> header\r\n#define TEST_NAME \"<tuple>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <array> // for tuple_cat(array)\r\n#include <tuple>\r\n\r\nstatic void tuple0() { // tests for empty tuples\r\n    typedef STD tuple<> tpl;\r\n    tpl t0;\r\n    tpl t2(t0);\r\n    CHECK_INT(0, STD tuple_size<tpl>::value);\r\n\r\n    CHECK_INT(t0 == t2, true);\r\n    CHECK_INT(t0 != t2, false);\r\n    CHECK_INT(t0 < t2, false);\r\n    CHECK_INT(t0 <= t2, true);\r\n    CHECK_INT(t0 > t2, false);\r\n    CHECK_INT(t0 >= t2, true);\r\n    CHECK_INT(t0 == t2, true);\r\n\r\n    t2 = STD make_tuple();\r\n    CHECK_INT(t0 == t2, true);\r\n\r\n    { // test tuple swap\r\n        tpl tx;\r\n        tpl ty;\r\n        STD swap(tx, ty);\r\n        CHECK_INT(tx == ty, true);\r\n    }\r\n}\r\n\r\nstatic void tuple1() { // tests for tuples with one element\r\n    {\r\n        typedef STD tuple<int> tpl;\r\n        tpl t0;\r\n        tpl t1(1);\r\n        tpl t2(STD tuple<short>((short) 1));\r\n        CHECK_INT(1, STD tuple_size<tpl>::value);\r\n\r\n        typedef STD tuple_element<0, tpl>::type elt0;\r\n        CHECK_TYPE(elt0, int);\r\n        elt0 val0 = STD get<0>(t2);\r\n        CHECK_INT(val0, 1);\r\n\r\n        CHECK_INT(t1 == t2, true);\r\n        CHECK_INT(t1 != t2, false);\r\n        CHECK_INT(t1 < t2, false);\r\n        CHECK_INT(t1 <= t2, true);\r\n        CHECK_INT(t1 > t2, false);\r\n        CHECK_INT(t1 >= t2, true);\r\n\r\n        t2 = STD make_tuple(2L);\r\n        CHECK_INT(t2 == STD make_tuple(2), true);\r\n        CHECK_INT(t1 == t2, false);\r\n        CHECK_INT(t1 != t2, true);\r\n        CHECK_INT(t1 < t2, true);\r\n        CHECK_INT(t1 <= t2, true);\r\n        CHECK_INT(t1 > t2, false);\r\n        CHECK_INT(t1 >= t2, false);\r\n\r\n        STD tie(val0) = STD make_tuple(2);\r\n        CHECK_INT(val0, 2);\r\n\r\n        { // test get\r\n            CHECK_INT(STD get<0>(t0), 0);\r\n            CHECK_INT(STD get<0>(t1), 1);\r\n            CHECK_INT(STD get<0>(t2), 2);\r\n\r\n            CHECK_INT(STD get<int>(t0), 0);\r\n            CHECK_INT(STD get<int>(t1), 1);\r\n            CHECK_INT(STD get<int>(t2), 2);\r\n        }\r\n    }\r\n\r\n    { // test decay\r\n        int arr[3];\r\n        CHECK_PTR(STD get<0>(STD make_tuple(arr, 3)), &arr[0]);\r\n        CHECK(STD get<1>(STD make_tuple(3, tuple1)) == &tuple1);\r\n    }\r\n\r\n    { // test tuple_cat(copy, copy)\r\n        STD tuple<> t0;\r\n        STD tuple<> t1 = STD tuple_cat(t0, t0);\r\n        (void) t1;\r\n\r\n        STD tuple<int, int> t2 = STD tuple_cat(STD tuple<int>(3), STD tuple<int>(2));\r\n        CHECK_INT(STD get<0>(t2), 3);\r\n        CHECK_INT(STD get<1>(t2), 2);\r\n\r\n        STD tuple<int, int, int> t3 = STD tuple_cat(t2, STD tuple<int>(5));\r\n        CHECK_INT(STD get<0>(t3), 3);\r\n        CHECK_INT(STD get<1>(t3), 2);\r\n        CHECK_INT(STD get<2>(t3), 5);\r\n\r\n        STD tuple<int, int, int, int> t4 = STD tuple_cat(STD tuple<int>(6), t3);\r\n        CHECK_INT(STD get<0>(t4), 6);\r\n        CHECK_INT(STD get<1>(t4), 3);\r\n        CHECK_INT(STD get<2>(t4), 2);\r\n        CHECK_INT(STD get<3>(t4), 5);\r\n\r\n        STD tuple<int, int, int, int> t5 = STD tuple_cat(t4, t0);\r\n        CHECK_INT(STD get<0>(t5), 6);\r\n        CHECK_INT(STD get<1>(t5), 3);\r\n        CHECK_INT(STD get<2>(t5), 2);\r\n        CHECK_INT(STD get<3>(t5), 5);\r\n\r\n        STD tuple<int, int, int, int> t6 = STD tuple_cat(t0, t4);\r\n        CHECK_INT(STD get<0>(t6), 6);\r\n        CHECK_INT(STD get<1>(t6), 3);\r\n        CHECK_INT(STD get<2>(t6), 2);\r\n        CHECK_INT(STD get<3>(t6), 5);\r\n\r\n        // test tuple_cat<pair>\r\n        STD pair<int, int> pr(10, 20);\r\n        t2 = STD tuple_cat(pr);\r\n        CHECK_INT(STD get<0>(t2), 10);\r\n        CHECK_INT(STD get<1>(t2), 20);\r\n\r\n        t4 = STD tuple_cat(t2, pr);\r\n        CHECK_INT(STD get<2>(t4), 10);\r\n        CHECK_INT(STD get<3>(t4), 20);\r\n\r\n        t4 = STD tuple_cat(pr, t2);\r\n        CHECK_INT(STD get<0>(t4), 10);\r\n        CHECK_INT(STD get<1>(t4), 20);\r\n\r\n        t4 = STD tuple_cat(pr, pr);\r\n        CHECK_INT(STD get<0>(t4), 10);\r\n        CHECK_INT(STD get<1>(t4), 20);\r\n\r\n        // test tuple_cat<array>\r\n        STD array<int, 2> ar;\r\n        ar[0] = 10;\r\n        ar[1] = 20;\r\n\r\n        t2 = STD tuple_cat(ar);\r\n        CHECK_INT(STD get<0>(t2), 10);\r\n        CHECK_INT(STD get<1>(t2), 20);\r\n\r\n        t4 = STD tuple_cat(t2, ar);\r\n        CHECK_INT(STD get<2>(t4), 10);\r\n        CHECK_INT(STD get<3>(t4), 20);\r\n\r\n        t4 = STD tuple_cat(ar, t2);\r\n        CHECK_INT(STD get<0>(t4), 10);\r\n        CHECK_INT(STD get<1>(t4), 20);\r\n\r\n        t4 = STD tuple_cat(ar, ar);\r\n        CHECK_INT(STD get<0>(t4), 10);\r\n        CHECK_INT(STD get<1>(t4), 20);\r\n    }\r\n\r\n    { // test get\r\n        STD tuple<int, char, long> t10;\r\n        STD get<0>(t10) = 3;\r\n        STD get<1>(t10) = 'a';\r\n        STD get<2>(t10) = 2L;\r\n        CHECK_INT(STD get<int>(t10), 3);\r\n        CHECK_INT(STD get<char>(t10), 'a');\r\n        CHECK_INT(STD get<long>(t10), 2L);\r\n    }\r\n\r\n    { // test tuple_cat(copy, move)\r\n        typedef STD tuple<Movable_int, Movable_int> Tuple_mi;\r\n        typedef STD tuple<int, Movable_int, Movable_int> Tuple_imi;\r\n\r\n        STD tuple<> t0;\r\n        Tuple_mi t1;\r\n        int two        = 2;\r\n        STD get<0>(t1) = STD move(two);\r\n\r\n        Tuple_imi t2(STD tuple_cat(STD tuple<int>(1), STD move(t1)));\r\n        CHECK_INT(STD get<0>(t2), 1);\r\n        CHECK_INT(STD get<1>(t2), 2);\r\n        CHECK_INT(STD get<2>(t2), 0);\r\n        CHECK_INT(STD get<0>(t1), -1);\r\n        CHECK_INT(STD get<1>(t1), -1);\r\n\r\n        STD tuple<int> t3(STD tuple_cat(STD tuple<int>(4), STD move(t0)));\r\n        CHECK_INT(STD get<0>(t3), 4);\r\n\r\n        STD tuple<int> t4(STD tuple_cat(t0, STD move(t3)));\r\n        CHECK_INT(STD get<0>(t3), 4);\r\n        CHECK_INT(STD get<0>(t4), 4);\r\n    }\r\n\r\n    { // test tuple_cat(move, copy)\r\n        typedef STD tuple<Movable_int, Movable_int> Tuple_mi;\r\n        typedef STD tuple<Movable_int, Movable_int, int> Tuple_imi;\r\n\r\n        STD tuple<> t0;\r\n        Tuple_mi t1;\r\n        int two        = 2;\r\n        STD get<0>(t1) = STD move(two);\r\n\r\n        Tuple_imi t2(STD tuple_cat(STD move(t1), STD tuple<int>(1)));\r\n        CHECK_INT(STD get<0>(t2), 2);\r\n        CHECK_INT(STD get<1>(t2), 0);\r\n        CHECK_INT(STD get<2>(t2), 1);\r\n        CHECK_INT(STD get<0>(t1), -1);\r\n        CHECK_INT(STD get<1>(t1), -1);\r\n\r\n        STD tuple<int> t3(STD tuple_cat(STD tuple<int>(4), STD move(t0)));\r\n        CHECK_INT(STD get<0>(t3), 4);\r\n\r\n        STD tuple<int> t4(STD tuple_cat(t0, STD move(t3)));\r\n        CHECK_INT(STD get<0>(t3), 4);\r\n        CHECK_INT(STD get<0>(t4), 4);\r\n    }\r\n\r\n    { // test tuple_cat(move, move)\r\n        typedef STD tuple<Movable_int, Movable_int> Tuple_mi;\r\n        typedef STD tuple<Movable_int, Movable_int, Movable_int, Movable_int> Tuple_mi4;\r\n\r\n        Tuple_mi t0, t1;\r\n        int two        = 2;\r\n        int four       = 4;\r\n        STD get<0>(t0) = STD move(two);\r\n        STD get<1>(t1) = STD move(four);\r\n\r\n        Tuple_mi4 t2(STD tuple_cat(STD move(t0), STD move(t1)));\r\n        CHECK_INT(STD get<0>(t2), 2);\r\n        CHECK_INT(STD get<1>(t2), 0);\r\n        CHECK_INT(STD get<2>(t2), 0);\r\n        CHECK_INT(STD get<3>(t2), 4);\r\n        CHECK_INT(STD get<0>(t0), -1);\r\n        CHECK_INT(STD get<1>(t0), -1);\r\n        CHECK_INT(STD get<0>(t1), -1);\r\n        CHECK_INT(STD get<1>(t1), -1);\r\n    }\r\n\r\n    { // test tuple swap\r\n        STD tuple<int> tx(1);\r\n        STD tuple<int> ty(2);\r\n        STD swap(tx, ty);\r\n        CHECK_INT(STD get<0>(tx), 2);\r\n        CHECK_INT(STD get<0>(ty), 1);\r\n    }\r\n}\r\n\r\nstatic void tuple2() { // tests for tuples with two elements\r\n    typedef STD tuple<int, int> tpl;\r\n    tpl t0;\r\n    (void) t0;\r\n    tpl t1(1, 2);\r\n    tpl t2(STD tuple<short, short>((short) 1, (short) 2));\r\n    CHECK_INT(2, STD tuple_size<tpl>::value);\r\n    tpl t3(STD make_pair(1, 2));\r\n    CHECK_INT(t3 == t1, true);\r\n    t3 = STD make_pair(2, 3);\r\n    CHECK_INT(t3 == t1, false);\r\n\r\n    typedef STD tuple_element<0, tpl>::type elt0;\r\n    typedef STD tuple_element<1, tpl>::type elt1;\r\n    CHECK_TYPE(elt0, int);\r\n    CHECK_TYPE(elt1, int);\r\n    elt0 val0 = STD get<0>(t2);\r\n    elt1 val1 = STD get<1>(t2);\r\n    CHECK_INT(val0, 1);\r\n    CHECK_INT(val1, 2);\r\n\r\n    CHECK_INT(t1 == t2, true);\r\n    CHECK_INT(t1 != t2, false);\r\n    CHECK_INT(t1 < t2, false);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, true);\r\n\r\n    t2 = STD make_tuple(2L, 3L);\r\n    CHECK_INT(t2 == STD make_tuple(2, 3), true);\r\n    CHECK_INT(t1 == t2, false);\r\n    CHECK_INT(t1 != t2, true);\r\n    CHECK_INT(t1 < t2, true);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, false);\r\n\r\n    STD tie(val0, val1) = STD make_tuple(2, 3);\r\n    CHECK_INT(val0, 2);\r\n    CHECK_INT(val1, 3);\r\n\r\n    { // test tuple swap\r\n        tpl tx(1, 3);\r\n        tpl ty(2, 4);\r\n        STD swap(tx, ty);\r\n        CHECK_INT(STD get<0>(tx), 2);\r\n        CHECK_INT(STD get<1>(tx), 4);\r\n        CHECK_INT(STD get<0>(ty), 1);\r\n        CHECK_INT(STD get<1>(ty), 3);\r\n    }\r\n}\r\n\r\nstatic void tuple3() { // tests for tuples with three elements\r\n    typedef STD tuple<int, int, int> tpl;\r\n    tpl t0;\r\n    (void) t0;\r\n    tpl t1(1, 2, 3);\r\n    tpl t2(STD tuple<short, short, short>((short) 1, (short) 2, (short) 3));\r\n    CHECK_INT(3, STD tuple_size<tpl>::value);\r\n\r\n    typedef STD tuple_element<0, tpl>::type elt0;\r\n    typedef STD tuple_element<1, tpl>::type elt1;\r\n    typedef STD tuple_element<2, tpl>::type elt2;\r\n    CHECK_TYPE(elt0, int);\r\n    CHECK_TYPE(elt1, int);\r\n    CHECK_TYPE(elt2, int);\r\n    elt0 val0 = STD get<0>(t2);\r\n    elt1 val1 = STD get<1>(t2);\r\n    elt2 val2 = STD get<2>(t2);\r\n    CHECK_INT(val0, 1);\r\n    CHECK_INT(val1, 2);\r\n    CHECK_INT(val2, 3);\r\n\r\n    CHECK_INT(t1 == t2, true);\r\n    CHECK_INT(t1 != t2, false);\r\n    CHECK_INT(t1 < t2, false);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, true);\r\n\r\n    t2 = STD make_tuple(2L, 3L, 4L);\r\n    CHECK_INT(t2 == STD make_tuple(2, 3, 4), true);\r\n    CHECK_INT(t1 == t2, false);\r\n    CHECK_INT(t1 != t2, true);\r\n    CHECK_INT(t1 < t2, true);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, false);\r\n\r\n    STD tie(val0, val1, val2) = STD make_tuple(2, 3, 4);\r\n    CHECK_INT(val0, 2);\r\n    CHECK_INT(val1, 3);\r\n    CHECK_INT(val2, 4);\r\n\r\n    { // test tuple swap\r\n        tpl tx(1, 3, 5);\r\n        tpl ty(2, 4, 6);\r\n        STD swap(tx, ty);\r\n        CHECK_INT(STD get<0>(tx), 2);\r\n        CHECK_INT(STD get<1>(tx), 4);\r\n        CHECK_INT(STD get<2>(tx), 6);\r\n        CHECK_INT(STD get<0>(ty), 1);\r\n        CHECK_INT(STD get<1>(ty), 3);\r\n        CHECK_INT(STD get<2>(ty), 5);\r\n    }\r\n}\r\n\r\nstatic void tuple4() { // tests for tuples with four elements\r\n    typedef STD tuple<int, int, int, int> tpl;\r\n    tpl t0;\r\n    (void) t0;\r\n    tpl t1(1, 2, 3, 4);\r\n    tpl t2(STD tuple<short, short, short, short>((short) 1, (short) 2, (short) 3, (short) 4));\r\n    CHECK_INT(4, STD tuple_size<tpl>::value);\r\n\r\n    typedef STD tuple_element<0, tpl>::type elt0;\r\n    typedef STD tuple_element<1, tpl>::type elt1;\r\n    typedef STD tuple_element<2, tpl>::type elt2;\r\n    typedef STD tuple_element<3, tpl>::type elt3;\r\n    CHECK_TYPE(elt0, int);\r\n    CHECK_TYPE(elt1, int);\r\n    CHECK_TYPE(elt2, int);\r\n    CHECK_TYPE(elt3, int);\r\n    elt0 val0 = STD get<0>(t2);\r\n    elt1 val1 = STD get<1>(t2);\r\n    elt2 val2 = STD get<2>(t2);\r\n    elt3 val3 = STD get<3>(t2);\r\n    CHECK_INT(val0, 1);\r\n    CHECK_INT(val1, 2);\r\n    CHECK_INT(val2, 3);\r\n    CHECK_INT(val3, 4);\r\n\r\n    CHECK_INT(t1 == t2, true);\r\n    CHECK_INT(t1 != t2, false);\r\n    CHECK_INT(t1 < t2, false);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, true);\r\n\r\n    t2 = STD make_tuple(2L, 3L, 4L, 5L);\r\n    CHECK_INT(t2 == STD make_tuple(2, 3, 4, 5), true);\r\n    CHECK_INT(t1 == t2, false);\r\n    CHECK_INT(t1 != t2, true);\r\n    CHECK_INT(t1 < t2, true);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, false);\r\n\r\n    STD tie(val0, val1, val2, val3) = STD make_tuple(2, 3, 4, 5);\r\n    CHECK_INT(val0, 2);\r\n    CHECK_INT(val1, 3);\r\n    CHECK_INT(val2, 4);\r\n    CHECK_INT(val3, 5);\r\n\r\n    { // test tuple swap\r\n        tpl tx(1, 3, 5, 7);\r\n        tpl ty(2, 4, 6, 8);\r\n        STD swap(tx, ty);\r\n        CHECK_INT(STD get<0>(tx), 2);\r\n        CHECK_INT(STD get<1>(tx), 4);\r\n        CHECK_INT(STD get<2>(tx), 6);\r\n        CHECK_INT(STD get<3>(tx), 8);\r\n        CHECK_INT(STD get<0>(ty), 1);\r\n        CHECK_INT(STD get<1>(ty), 3);\r\n        CHECK_INT(STD get<2>(ty), 5);\r\n        CHECK_INT(STD get<3>(ty), 7);\r\n    }\r\n}\r\n\r\nstatic void tuple5() { // tests for tuples with five elements\r\n    typedef STD tuple<int, int, int, int, int> tpl;\r\n    tpl t0;\r\n    (void) t0;\r\n    tpl t1(1, 2, 3, 4, 5);\r\n    tpl t2(STD tuple<short, short, short, short, short>((short) 1, (short) 2, (short) 3, (short) 4, (short) 5));\r\n    CHECK_INT(5, STD tuple_size<tpl>::value);\r\n\r\n    typedef STD tuple_element<0, tpl>::type elt0;\r\n    typedef STD tuple_element<1, tpl>::type elt1;\r\n    typedef STD tuple_element<2, tpl>::type elt2;\r\n    typedef STD tuple_element<3, tpl>::type elt3;\r\n    typedef STD tuple_element<4, tpl>::type elt4;\r\n    CHECK_TYPE(elt0, int);\r\n    CHECK_TYPE(elt1, int);\r\n    CHECK_TYPE(elt2, int);\r\n    CHECK_TYPE(elt3, int);\r\n    CHECK_TYPE(elt4, int);\r\n    elt0 val0 = STD get<0>(t2);\r\n    elt1 val1 = STD get<1>(t2);\r\n    elt2 val2 = STD get<2>(t2);\r\n    elt3 val3 = STD get<3>(t2);\r\n    elt4 val4 = STD get<4>(t2);\r\n    CHECK_INT(val0, 1);\r\n    CHECK_INT(val1, 2);\r\n    CHECK_INT(val2, 3);\r\n    CHECK_INT(val3, 4);\r\n    CHECK_INT(val4, 5);\r\n\r\n    CHECK_INT(t1 == t2, true);\r\n    CHECK_INT(t1 != t2, false);\r\n    CHECK_INT(t1 < t2, false);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, true);\r\n\r\n    t2 = STD make_tuple(2L, 3L, 4L, 5L, 6L);\r\n    CHECK_INT(t2 == STD make_tuple(2, 3, 4, 5, 6), true);\r\n    CHECK_INT(t1 == t2, false);\r\n    CHECK_INT(t1 != t2, true);\r\n    CHECK_INT(t1 < t2, true);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, false);\r\n\r\n    STD tie(val0, val1, val2, val3, val4) = STD make_tuple(2, 3, 4, 5, 6);\r\n    CHECK_INT(val0, 2);\r\n    CHECK_INT(val1, 3);\r\n    CHECK_INT(val2, 4);\r\n    CHECK_INT(val3, 5);\r\n    CHECK_INT(val4, 6);\r\n\r\n    { // test tuple swap\r\n        tpl tx(1, 3, 5, 7, 9);\r\n        tpl ty(2, 4, 6, 8, 10);\r\n        STD swap(tx, ty);\r\n        CHECK_INT(STD get<0>(tx), 2);\r\n        CHECK_INT(STD get<1>(tx), 4);\r\n        CHECK_INT(STD get<2>(tx), 6);\r\n        CHECK_INT(STD get<3>(tx), 8);\r\n        CHECK_INT(STD get<4>(tx), 10);\r\n        CHECK_INT(STD get<0>(ty), 1);\r\n        CHECK_INT(STD get<1>(ty), 3);\r\n        CHECK_INT(STD get<2>(ty), 5);\r\n        CHECK_INT(STD get<3>(ty), 7);\r\n        CHECK_INT(STD get<4>(ty), 9);\r\n    }\r\n}\r\n\r\nstatic void tuple6() { // tests for tuples with six elements\r\n    typedef STD tuple<int, int, int, int, int, int> tpl;\r\n    tpl t0;\r\n    (void) t0;\r\n    tpl t1(1, 2, 3, 4, 5, 6);\r\n    tpl t2(STD tuple<short, short, short, short, short, short>(\r\n        (short) 1, (short) 2, (short) 3, (short) 4, (short) 5, (short) 6));\r\n    CHECK_INT(6, STD tuple_size<tpl>::value);\r\n\r\n    typedef STD tuple_element<0, tpl>::type elt0;\r\n    typedef STD tuple_element<1, tpl>::type elt1;\r\n    typedef STD tuple_element<2, tpl>::type elt2;\r\n    typedef STD tuple_element<3, tpl>::type elt3;\r\n    typedef STD tuple_element<4, tpl>::type elt4;\r\n    typedef STD tuple_element<5, tpl>::type elt5;\r\n    CHECK_TYPE(elt0, int);\r\n    CHECK_TYPE(elt1, int);\r\n    CHECK_TYPE(elt2, int);\r\n    CHECK_TYPE(elt3, int);\r\n    CHECK_TYPE(elt4, int);\r\n    CHECK_TYPE(elt5, int);\r\n    elt0 val0 = STD get<0>(t2);\r\n    elt1 val1 = STD get<1>(t2);\r\n    elt2 val2 = STD get<2>(t2);\r\n    elt3 val3 = STD get<3>(t2);\r\n    elt4 val4 = STD get<4>(t2);\r\n    elt5 val5 = STD get<5>(t2);\r\n    CHECK_INT(val0, 1);\r\n    CHECK_INT(val1, 2);\r\n    CHECK_INT(val2, 3);\r\n    CHECK_INT(val3, 4);\r\n    CHECK_INT(val4, 5);\r\n    CHECK_INT(val5, 6);\r\n\r\n    CHECK_INT(t1 == t2, true);\r\n    CHECK_INT(t1 != t2, false);\r\n    CHECK_INT(t1 < t2, false);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, true);\r\n\r\n    t2 = STD make_tuple(2L, 3L, 4L, 5L, 6L, 7L);\r\n    CHECK_INT(t2 == STD make_tuple(2, 3, 4, 5, 6, 7), true);\r\n    CHECK_INT(t1 == t2, false);\r\n    CHECK_INT(t1 != t2, true);\r\n    CHECK_INT(t1 < t2, true);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, false);\r\n\r\n    STD tie(val0, val1, val2, val3, val4, val5) = STD make_tuple(2, 3, 4, 5, 6, 7);\r\n    CHECK_INT(val0, 2);\r\n    CHECK_INT(val1, 3);\r\n    CHECK_INT(val2, 4);\r\n    CHECK_INT(val3, 5);\r\n    CHECK_INT(val4, 6);\r\n    CHECK_INT(val5, 7);\r\n\r\n    { // test tuple swap\r\n        tpl tx(1, 3, 5, 7, 9, 11);\r\n        tpl ty(2, 4, 6, 8, 10, 12);\r\n        STD swap(tx, ty);\r\n        CHECK_INT(STD get<0>(tx), 2);\r\n        CHECK_INT(STD get<1>(tx), 4);\r\n        CHECK_INT(STD get<2>(tx), 6);\r\n        CHECK_INT(STD get<3>(tx), 8);\r\n        CHECK_INT(STD get<4>(tx), 10);\r\n        CHECK_INT(STD get<5>(tx), 12);\r\n        CHECK_INT(STD get<0>(ty), 1);\r\n        CHECK_INT(STD get<1>(ty), 3);\r\n        CHECK_INT(STD get<2>(ty), 5);\r\n        CHECK_INT(STD get<3>(ty), 7);\r\n        CHECK_INT(STD get<4>(ty), 9);\r\n        CHECK_INT(STD get<5>(ty), 11);\r\n    }\r\n}\r\n\r\nstatic void tuple7() { // tests for tuples with seven elements\r\n    typedef STD tuple<int, int, int, int, int, int, int> tpl;\r\n    tpl t0;\r\n    (void) t0;\r\n    tpl t1(1, 2, 3, 4, 5, 6, 7);\r\n    tpl t2(STD tuple<short, short, short, short, short, short, short>(\r\n        (short) 1, (short) 2, (short) 3, (short) 4, (short) 5, (short) 6, (short) 7));\r\n    CHECK_INT(7, STD tuple_size<tpl>::value);\r\n\r\n    typedef STD tuple_element<0, tpl>::type elt0;\r\n    typedef STD tuple_element<1, tpl>::type elt1;\r\n    typedef STD tuple_element<2, tpl>::type elt2;\r\n    typedef STD tuple_element<3, tpl>::type elt3;\r\n    typedef STD tuple_element<4, tpl>::type elt4;\r\n    typedef STD tuple_element<5, tpl>::type elt5;\r\n    typedef STD tuple_element<6, tpl>::type elt6;\r\n    CHECK_TYPE(elt0, int);\r\n    CHECK_TYPE(elt1, int);\r\n    CHECK_TYPE(elt2, int);\r\n    CHECK_TYPE(elt3, int);\r\n    CHECK_TYPE(elt4, int);\r\n    CHECK_TYPE(elt5, int);\r\n    CHECK_TYPE(elt6, int);\r\n    elt0 val0 = STD get<0>(t2);\r\n    elt1 val1 = STD get<1>(t2);\r\n    elt2 val2 = STD get<2>(t2);\r\n    elt3 val3 = STD get<3>(t2);\r\n    elt4 val4 = STD get<4>(t2);\r\n    elt5 val5 = STD get<5>(t2);\r\n    elt6 val6 = STD get<6>(t2);\r\n    CHECK_INT(val0, 1);\r\n    CHECK_INT(val1, 2);\r\n    CHECK_INT(val2, 3);\r\n    CHECK_INT(val3, 4);\r\n    CHECK_INT(val4, 5);\r\n    CHECK_INT(val5, 6);\r\n    CHECK_INT(val6, 7);\r\n\r\n    CHECK_INT(t1 == t2, true);\r\n    CHECK_INT(t1 != t2, false);\r\n    CHECK_INT(t1 < t2, false);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, true);\r\n\r\n    t2 = STD make_tuple(2L, 3L, 4L, 5L, 6L, 7L, 8L);\r\n    CHECK_INT(t2 == STD make_tuple(2, 3, 4, 5, 6, 7, 8), true);\r\n    CHECK_INT(t1 == t2, false);\r\n    CHECK_INT(t1 != t2, true);\r\n    CHECK_INT(t1 < t2, true);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, false);\r\n\r\n    STD tie(val0, val1, val2, val3, val4, val5, val6) = STD make_tuple(2, 3, 4, 5, 6, 7, 8);\r\n    CHECK_INT(val0, 2);\r\n    CHECK_INT(val1, 3);\r\n    CHECK_INT(val2, 4);\r\n    CHECK_INT(val3, 5);\r\n    CHECK_INT(val4, 6);\r\n    CHECK_INT(val5, 7);\r\n    CHECK_INT(val6, 8);\r\n\r\n    { // test tuple swap\r\n        tpl tx(1, 3, 5, 7, 9, 11, 13);\r\n        tpl ty(2, 4, 6, 8, 10, 12, 14);\r\n        STD swap(tx, ty);\r\n        CHECK_INT(STD get<0>(tx), 2);\r\n        CHECK_INT(STD get<1>(tx), 4);\r\n        CHECK_INT(STD get<2>(tx), 6);\r\n        CHECK_INT(STD get<3>(tx), 8);\r\n        CHECK_INT(STD get<4>(tx), 10);\r\n        CHECK_INT(STD get<5>(tx), 12);\r\n        CHECK_INT(STD get<6>(tx), 14);\r\n        CHECK_INT(STD get<0>(ty), 1);\r\n        CHECK_INT(STD get<1>(ty), 3);\r\n        CHECK_INT(STD get<2>(ty), 5);\r\n        CHECK_INT(STD get<3>(ty), 7);\r\n        CHECK_INT(STD get<4>(ty), 9);\r\n        CHECK_INT(STD get<5>(ty), 11);\r\n        CHECK_INT(STD get<6>(ty), 13);\r\n    }\r\n}\r\n\r\nstatic void tuple8() { // tests for tuples with eight elements\r\n    typedef STD tuple<int, int, int, int, int, int, int, int> tpl;\r\n    tpl t0;\r\n    (void) t0;\r\n    tpl t1(1, 2, 3, 4, 5, 6, 7, 8);\r\n    tpl t2(STD tuple<short, short, short, short, short, short, short, short>(\r\n        (short) 1, (short) 2, (short) 3, (short) 4, (short) 5, (short) 6, (short) 7, (short) 8));\r\n    CHECK_INT(8, STD tuple_size<tpl>::value);\r\n\r\n    typedef STD tuple_element<0, tpl>::type elt0;\r\n    typedef STD tuple_element<1, tpl>::type elt1;\r\n    typedef STD tuple_element<2, tpl>::type elt2;\r\n    typedef STD tuple_element<3, tpl>::type elt3;\r\n    typedef STD tuple_element<4, tpl>::type elt4;\r\n    typedef STD tuple_element<5, tpl>::type elt5;\r\n    typedef STD tuple_element<6, tpl>::type elt6;\r\n    typedef STD tuple_element<7, tpl>::type elt7;\r\n    CHECK_TYPE(elt0, int);\r\n    CHECK_TYPE(elt1, int);\r\n    CHECK_TYPE(elt2, int);\r\n    CHECK_TYPE(elt3, int);\r\n    CHECK_TYPE(elt4, int);\r\n    CHECK_TYPE(elt5, int);\r\n    CHECK_TYPE(elt6, int);\r\n    CHECK_TYPE(elt7, int);\r\n    elt0 val0 = STD get<0>(t2);\r\n    elt1 val1 = STD get<1>(t2);\r\n    elt2 val2 = STD get<2>(t2);\r\n    elt3 val3 = STD get<3>(t2);\r\n    elt4 val4 = STD get<4>(t2);\r\n    elt5 val5 = STD get<5>(t2);\r\n    elt6 val6 = STD get<6>(t2);\r\n    elt7 val7 = STD get<7>(t2);\r\n    CHECK_INT(val0, 1);\r\n    CHECK_INT(val1, 2);\r\n    CHECK_INT(val2, 3);\r\n    CHECK_INT(val3, 4);\r\n    CHECK_INT(val4, 5);\r\n    CHECK_INT(val5, 6);\r\n    CHECK_INT(val6, 7);\r\n    CHECK_INT(val7, 8);\r\n\r\n    CHECK_INT(t1 == t2, true);\r\n    CHECK_INT(t1 != t2, false);\r\n    CHECK_INT(t1 < t2, false);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, true);\r\n\r\n    t2 = STD make_tuple(2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L);\r\n    CHECK_INT(t2 == STD make_tuple(2, 3, 4, 5, 6, 7, 8, 9), true);\r\n    CHECK_INT(t1 == t2, false);\r\n    CHECK_INT(t1 != t2, true);\r\n    CHECK_INT(t1 < t2, true);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, false);\r\n\r\n    STD tie(val0, val1, val2, val3, val4, val5, val6, val7) = STD make_tuple(2, 3, 4, 5, 6, 7, 8, 9);\r\n    CHECK_INT(val0, 2);\r\n    CHECK_INT(val1, 3);\r\n    CHECK_INT(val2, 4);\r\n    CHECK_INT(val3, 5);\r\n    CHECK_INT(val4, 6);\r\n    CHECK_INT(val5, 7);\r\n    CHECK_INT(val6, 8);\r\n    CHECK_INT(val7, 9);\r\n\r\n    { // test tuple swap\r\n        tpl tx(1, 3, 5, 7, 9, 11, 13, 15);\r\n        tpl ty(2, 4, 6, 8, 10, 12, 14, 16);\r\n        STD swap(tx, ty);\r\n        CHECK_INT(STD get<0>(tx), 2);\r\n        CHECK_INT(STD get<1>(tx), 4);\r\n        CHECK_INT(STD get<2>(tx), 6);\r\n        CHECK_INT(STD get<3>(tx), 8);\r\n        CHECK_INT(STD get<4>(tx), 10);\r\n        CHECK_INT(STD get<5>(tx), 12);\r\n        CHECK_INT(STD get<6>(tx), 14);\r\n        CHECK_INT(STD get<7>(tx), 16);\r\n        CHECK_INT(STD get<0>(ty), 1);\r\n        CHECK_INT(STD get<1>(ty), 3);\r\n        CHECK_INT(STD get<2>(ty), 5);\r\n        CHECK_INT(STD get<3>(ty), 7);\r\n        CHECK_INT(STD get<4>(ty), 9);\r\n        CHECK_INT(STD get<5>(ty), 11);\r\n        CHECK_INT(STD get<6>(ty), 13);\r\n        CHECK_INT(STD get<7>(ty), 15);\r\n    }\r\n}\r\n\r\nstatic void tuple9() { // tests for tuples with nine elements\r\n    typedef STD tuple<int, int, int, int, int, int, int, int, int> tpl;\r\n    tpl t0;\r\n    (void) t0;\r\n    tpl t1(1, 2, 3, 4, 5, 6, 7, 8, 9);\r\n    tpl t2(STD tuple<short, short, short, short, short, short, short, short, short>(\r\n        (short) 1, (short) 2, (short) 3, (short) 4, (short) 5, (short) 6, (short) 7, (short) 8, (short) 9));\r\n    CHECK_INT(9, STD tuple_size<tpl>::value);\r\n\r\n    typedef STD tuple_element<0, tpl>::type elt0;\r\n    typedef STD tuple_element<1, tpl>::type elt1;\r\n    typedef STD tuple_element<2, tpl>::type elt2;\r\n    typedef STD tuple_element<3, tpl>::type elt3;\r\n    typedef STD tuple_element<4, tpl>::type elt4;\r\n    typedef STD tuple_element<5, tpl>::type elt5;\r\n    typedef STD tuple_element<6, tpl>::type elt6;\r\n    typedef STD tuple_element<7, tpl>::type elt7;\r\n    typedef STD tuple_element<8, tpl>::type elt8;\r\n    CHECK_TYPE(elt0, int);\r\n    CHECK_TYPE(elt1, int);\r\n    CHECK_TYPE(elt2, int);\r\n    CHECK_TYPE(elt3, int);\r\n    CHECK_TYPE(elt4, int);\r\n    CHECK_TYPE(elt5, int);\r\n    CHECK_TYPE(elt6, int);\r\n    CHECK_TYPE(elt7, int);\r\n    CHECK_TYPE(elt8, int);\r\n    elt0 val0 = STD get<0>(t2);\r\n    elt1 val1 = STD get<1>(t2);\r\n    elt2 val2 = STD get<2>(t2);\r\n    elt3 val3 = STD get<3>(t2);\r\n    elt4 val4 = STD get<4>(t2);\r\n    elt5 val5 = STD get<5>(t2);\r\n    elt6 val6 = STD get<6>(t2);\r\n    elt7 val7 = STD get<7>(t2);\r\n    elt8 val8 = STD get<8>(t2);\r\n    CHECK_INT(val0, 1);\r\n    CHECK_INT(val1, 2);\r\n    CHECK_INT(val2, 3);\r\n    CHECK_INT(val3, 4);\r\n    CHECK_INT(val4, 5);\r\n    CHECK_INT(val5, 6);\r\n    CHECK_INT(val6, 7);\r\n    CHECK_INT(val7, 8);\r\n    CHECK_INT(val8, 9);\r\n\r\n    CHECK_INT(t1 == t2, true);\r\n    CHECK_INT(t1 != t2, false);\r\n    CHECK_INT(t1 < t2, false);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, true);\r\n\r\n    t2 = STD make_tuple(2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L);\r\n    CHECK_INT(t2 == STD make_tuple(2, 3, 4, 5, 6, 7, 8, 9, 10), true);\r\n    CHECK_INT(t1 == t2, false);\r\n    CHECK_INT(t1 != t2, true);\r\n    CHECK_INT(t1 < t2, true);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, false);\r\n\r\n    STD tie(val0, val1, val2, val3, val4, val5, val6, val7, val8) = STD make_tuple(2, 3, 4, 5, 6, 7, 8, 9, 10);\r\n    CHECK_INT(val0, 2);\r\n    CHECK_INT(val1, 3);\r\n    CHECK_INT(val2, 4);\r\n    CHECK_INT(val3, 5);\r\n    CHECK_INT(val4, 6);\r\n    CHECK_INT(val5, 7);\r\n    CHECK_INT(val6, 8);\r\n    CHECK_INT(val7, 9);\r\n    CHECK_INT(val8, 10);\r\n\r\n    { // test tuple swap\r\n        tpl tx(1, 3, 5, 7, 9, 11, 13, 15, 17);\r\n        tpl ty(2, 4, 6, 8, 10, 12, 14, 16, 18);\r\n        STD swap(tx, ty);\r\n        CHECK_INT(STD get<0>(tx), 2);\r\n        CHECK_INT(STD get<1>(tx), 4);\r\n        CHECK_INT(STD get<2>(tx), 6);\r\n        CHECK_INT(STD get<3>(tx), 8);\r\n        CHECK_INT(STD get<4>(tx), 10);\r\n        CHECK_INT(STD get<5>(tx), 12);\r\n        CHECK_INT(STD get<6>(tx), 14);\r\n        CHECK_INT(STD get<7>(tx), 16);\r\n        CHECK_INT(STD get<8>(tx), 18);\r\n        CHECK_INT(STD get<0>(ty), 1);\r\n        CHECK_INT(STD get<1>(ty), 3);\r\n        CHECK_INT(STD get<2>(ty), 5);\r\n        CHECK_INT(STD get<3>(ty), 7);\r\n        CHECK_INT(STD get<4>(ty), 9);\r\n        CHECK_INT(STD get<5>(ty), 11);\r\n        CHECK_INT(STD get<6>(ty), 13);\r\n        CHECK_INT(STD get<7>(ty), 15);\r\n        CHECK_INT(STD get<8>(ty), 17);\r\n    }\r\n}\r\n\r\nstatic void tuple10() { // tests for tuples with ten elements\r\n    typedef STD tuple<int, int, int, int, int, int, int, int, int, int> tpl;\r\n    tpl t0;\r\n    (void) t0;\r\n    tpl t1(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);\r\n    tpl t2(STD tuple<short, short, short, short, short, short, short, short, short, short>(\r\n        (short) 1, (short) 2, (short) 3, (short) 4, (short) 5, (short) 6, (short) 7, (short) 8, (short) 9, (short) 10));\r\n    CHECK_INT(10, STD tuple_size<tpl>::value);\r\n    CHECK_INT(10, STD tuple_size<const tpl>::value);\r\n    CHECK_INT(10, STD tuple_size<volatile tpl>::value);\r\n    CHECK_INT(10, STD tuple_size<const volatile tpl>::value);\r\n\r\n    typedef STD tuple_element<0, tpl>::type elt0;\r\n    typedef STD tuple_element<0, const tpl>::type elt0c;\r\n    CHECK_TYPE(const elt0*, elt0c*);\r\n    typedef STD tuple_element<0, volatile tpl>::type elt0v;\r\n    CHECK_TYPE(volatile elt0*, elt0v*);\r\n    typedef STD tuple_element<0, const volatile tpl>::type elt0cv;\r\n    CHECK_TYPE(const volatile elt0*, elt0cv*);\r\n\r\n    typedef STD tuple_element<1, tpl>::type elt1;\r\n    typedef STD tuple_element<2, tpl>::type elt2;\r\n    typedef STD tuple_element<3, tpl>::type elt3;\r\n    typedef STD tuple_element<4, tpl>::type elt4;\r\n    typedef STD tuple_element<5, tpl>::type elt5;\r\n    typedef STD tuple_element<6, tpl>::type elt6;\r\n    typedef STD tuple_element<7, tpl>::type elt7;\r\n    typedef STD tuple_element<8, tpl>::type elt8;\r\n    typedef STD tuple_element<9, tpl>::type elt9;\r\n    CHECK_TYPE(elt0, int);\r\n    CHECK_TYPE(elt1, int);\r\n    CHECK_TYPE(elt2, int);\r\n    CHECK_TYPE(elt3, int);\r\n    CHECK_TYPE(elt4, int);\r\n    CHECK_TYPE(elt5, int);\r\n    CHECK_TYPE(elt6, int);\r\n    CHECK_TYPE(elt7, int);\r\n    CHECK_TYPE(elt8, int);\r\n    CHECK_TYPE(elt9, int);\r\n    elt0 val0 = STD get<0>(t2);\r\n    elt1 val1 = STD get<1>(t2);\r\n    elt2 val2 = STD get<2>(t2);\r\n    elt3 val3 = STD get<3>(t2);\r\n    elt4 val4 = STD get<4>(t2);\r\n    elt5 val5 = STD get<5>(t2);\r\n    elt6 val6 = STD get<6>(t2);\r\n    elt7 val7 = STD get<7>(t2);\r\n    elt8 val8 = STD get<8>(t2);\r\n    elt9 val9 = STD get<9>(t2);\r\n    CHECK_INT(val0, 1);\r\n    CHECK_INT(val1, 2);\r\n    CHECK_INT(val2, 3);\r\n    CHECK_INT(val3, 4);\r\n    CHECK_INT(val4, 5);\r\n    CHECK_INT(val5, 6);\r\n    CHECK_INT(val6, 7);\r\n    CHECK_INT(val7, 8);\r\n    CHECK_INT(val8, 9);\r\n    CHECK_INT(val9, 10);\r\n\r\n    CHECK_INT(t1 == t2, true);\r\n    CHECK_INT(t1 != t2, false);\r\n    CHECK_INT(t1 < t2, false);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, true);\r\n\r\n    t2 = STD make_tuple(2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L);\r\n    CHECK_INT(t2 == STD make_tuple(2, 3, 4, 5, 6, 7, 8, 9, 10, 11), true);\r\n    CHECK_INT(t1 == t2, false);\r\n    CHECK_INT(t1 != t2, true);\r\n    CHECK_INT(t1 < t2, true);\r\n    CHECK_INT(t1 <= t2, true);\r\n    CHECK_INT(t1 > t2, false);\r\n    CHECK_INT(t1 >= t2, false);\r\n\r\n    STD tie(val0, val1, val2, val3, val4, val5, val6, val7, val8, val9) =\r\n        STD make_tuple(2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\r\n    CHECK_INT(val0, 2);\r\n    CHECK_INT(val1, 3);\r\n    CHECK_INT(val2, 4);\r\n    CHECK_INT(val3, 5);\r\n    CHECK_INT(val4, 6);\r\n    CHECK_INT(val5, 7);\r\n    CHECK_INT(val6, 8);\r\n    CHECK_INT(val7, 9);\r\n    CHECK_INT(val8, 10);\r\n    CHECK_INT(val9, 11);\r\n\r\n    { // test tuple swap\r\n        tpl tx(1, 3, 5, 7, 9, 11, 13, 15, 17, 19);\r\n        tpl ty(2, 4, 6, 8, 10, 12, 14, 16, 18, 20);\r\n        STD swap(tx, ty);\r\n        CHECK_INT(STD get<0>(tx), 2);\r\n        CHECK_INT(STD get<1>(tx), 4);\r\n        CHECK_INT(STD get<2>(tx), 6);\r\n        CHECK_INT(STD get<3>(tx), 8);\r\n        CHECK_INT(STD get<4>(tx), 10);\r\n        CHECK_INT(STD get<5>(tx), 12);\r\n        CHECK_INT(STD get<6>(tx), 14);\r\n        CHECK_INT(STD get<7>(tx), 16);\r\n        CHECK_INT(STD get<8>(tx), 18);\r\n        CHECK_INT(STD get<9>(tx), 20);\r\n        CHECK_INT(STD get<0>(ty), 1);\r\n        CHECK_INT(STD get<1>(ty), 3);\r\n        CHECK_INT(STD get<2>(ty), 5);\r\n        CHECK_INT(STD get<3>(ty), 7);\r\n        CHECK_INT(STD get<4>(ty), 9);\r\n        CHECK_INT(STD get<5>(ty), 11);\r\n        CHECK_INT(STD get<6>(ty), 13);\r\n        CHECK_INT(STD get<7>(ty), 15);\r\n        CHECK_INT(STD get<8>(ty), 17);\r\n        CHECK_INT(STD get<9>(ty), 19);\r\n    }\r\n}\r\n\r\nstatic void t_make_tuple() { // reference_wrapper\r\n    int i0 = 0;\r\n    int i1 = 1;\r\n    int i2 = 2;\r\n    int i3 = 3;\r\n    int i4 = 4;\r\n\r\n    STD make_tuple(STD ref(i0), STD ref(i1), STD ref(i2), STD ref(i3), STD ref(i4)) = STD make_tuple(1, 2, 3, 4, 5);\r\n    CHECK_INT(STD make_tuple(i0, i1, i2, i3, i4) == STD make_tuple(1, 2, 3, 4, 5), true);\r\n\r\n    int i5 = 5;\r\n    int i6 = 6;\r\n    int i7 = 7;\r\n    int i8 = 8;\r\n    int i9 = 9;\r\n\r\n    STD make_tuple(STD ref(i0), STD ref(i1), STD ref(i2), STD ref(i3), STD ref(i4), STD ref(i5), STD ref(i6),\r\n        STD ref(i7), STD ref(i8), STD ref(i9)) = STD make_tuple(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);\r\n    CHECK_INT(\r\n        STD make_tuple(i0, i1, i2, i3, i4, i5, i6, i7, i8, i9) == STD make_tuple(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), true);\r\n}\r\n\r\nstatic void t_tie() { // ignore\r\n    int i0 = 0;\r\n    int i1 = 1;\r\n    int i2 = 2;\r\n    int i3 = 3;\r\n    int i4 = 4;\r\n\r\n    STD make_tuple(STD ignore, STD ignore, STD ignore, STD ignore, STD ignore) = STD make_tuple(1, 2, 3, 4, 5);\r\n    CHECK_INT(STD make_tuple(i0, i1, i2, i3, i4) == STD make_tuple(0, 1, 2, 3, 4), true);\r\n\r\n    int i5 = 5;\r\n    int i6 = 6;\r\n    int i7 = 7;\r\n    int i8 = 8;\r\n    int i9 = 9;\r\n\r\n    STD make_tuple(STD ignore, STD ignore, STD ignore, STD ignore, STD ignore, STD ignore, STD ignore, STD ignore,\r\n        STD ignore, STD ignore) = STD make_tuple(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);\r\n    CHECK_INT(\r\n        STD make_tuple(i0, i1, i2, i3, i4, i5, i6, i7, i8, i9) == STD make_tuple(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), true);\r\n}\r\n\r\nstatic void t_move() { // test moves\r\n    {\r\n        typedef STD pair<Movable_int, Movable_int> Pair_mi;\r\n        typedef STD tuple<int, int> Tuple_i;\r\n        typedef STD tuple<Movable_int, Movable_int> Tuple_mi;\r\n\r\n        Tuple_mi t1;\r\n        int one        = 1;\r\n        STD get<0>(t1) = STD move(one);\r\n        CHECK_INT(STD get<0>(t1).val, 1);\r\n        CHECK_INT(STD get<1>(t1).val, 0);\r\n\r\n        Tuple_mi t2(STD move(t1));\r\n        CHECK_INT(STD get<0>(t1).val, -1);\r\n        CHECK_INT(STD get<1>(t1).val, -1);\r\n        CHECK_INT(STD get<0>(t2).val, 1);\r\n        CHECK_INT(STD get<1>(t2).val, 0);\r\n\r\n        Tuple_mi t3(STD move(2), STD move(3));\r\n        CHECK_INT(STD get<0>(t3).val, 2);\r\n        CHECK_INT(STD get<1>(t3).val, 3);\r\n\r\n        Pair_mi p4(STD move(4), STD move(5));\r\n        Tuple_mi t4(STD move(p4));\r\n        CHECK_INT(p4.first.val, -1);\r\n        CHECK_INT(p4.second.val, -1);\r\n        CHECK_INT(STD get<0>(t4).val, 4);\r\n        CHECK_INT(STD get<1>(t4).val, 5);\r\n\r\n        Tuple_i i5(6, 7);\r\n        Tuple_mi t5(STD move(i5));\r\n        CHECK_INT(STD get<0>(i5), 6);\r\n        CHECK_INT(STD get<1>(i5), 7);\r\n        CHECK_INT(STD get<0>(t5).val, 6);\r\n        CHECK_INT(STD get<1>(t5).val, 7);\r\n\r\n        Tuple_mi t6;\r\n        t6 = STD move(t3);\r\n        CHECK_INT(STD get<0>(t3).val, -1);\r\n        CHECK_INT(STD get<1>(t3).val, -1);\r\n        CHECK_INT(STD get<0>(t6).val, 2);\r\n        CHECK_INT(STD get<1>(t6).val, 3);\r\n\r\n        Tuple_mi t7;\r\n        t7 = STD move(i5);\r\n        CHECK_INT(STD get<0>(i5), 6);\r\n        CHECK_INT(STD get<1>(i5), 7);\r\n        CHECK_INT(STD get<0>(t7).val, 6);\r\n        CHECK_INT(STD get<1>(t7).val, 7);\r\n\r\n        Pair_mi p8(STD move(8), STD move(9));\r\n        Tuple_mi t8;\r\n        t8 = STD move(p8);\r\n        CHECK_INT(p8.first.val, -1);\r\n        CHECK_INT(p8.second.val, -1);\r\n        CHECK_INT(STD get<0>(t8).val, 8);\r\n        CHECK_INT(STD get<1>(t8).val, 9);\r\n    }\r\n\r\n    { // check for lvalue stealing\r\n        typedef STD tuple<Copyable_int, Copyable_int> Tuple_ci;\r\n\r\n        Copyable_int ci1(1);\r\n        Copyable_int ci2(2);\r\n        Tuple_ci t10(ci1, ci2);\r\n        CHECK_INT(STD get<0>(t10).val, 1);\r\n        CHECK_INT(STD get<1>(t10).val, 2);\r\n\r\n        Tuple_ci t11(t10);\r\n        CHECK_INT(STD get<0>(t10).val, 1);\r\n        CHECK_INT(STD get<1>(t10).val, 2);\r\n        CHECK_INT(STD get<0>(t11).val, 1);\r\n        CHECK_INT(STD get<1>(t11).val, 2);\r\n\r\n        t10 = t11;\r\n        CHECK_INT(STD get<0>(t10).val, 1);\r\n        CHECK_INT(STD get<1>(t10).val, 2);\r\n        CHECK_INT(STD get<0>(t11).val, 1);\r\n        CHECK_INT(STD get<1>(t11).val, 2);\r\n    }\r\n}\r\n\r\n#include <memory>\r\n\r\nstruct Allocable0 { // supports no allocator only\r\n    Allocable0(int val = 0) : Myval(val) {}\r\n\r\n    Allocable0(const Allocable0& right) : Myval(right.Myval) {}\r\n\r\n    int Myval;\r\n};\r\n\r\nstruct Allocable1 { // supports leading allocator only\r\n    Allocable1(int val = 0) : Myval(val) {}\r\n\r\n    Allocable1(const Allocable1& right) : Myval(right.Myval) {}\r\n\r\n    Allocable1(STD allocator_arg_t, const STD allocator<int>&) : Myval(0) {}\r\n\r\n    Allocable1(STD allocator_arg_t, const STD allocator<int>&, int val) : Myval(val) {}\r\n\r\n    Allocable1(STD allocator_arg_t, const STD allocator<int>&, const Allocable1& right) : Myval(right.Myval) {}\r\n\r\n    int Myval;\r\n};\r\n\r\nstruct Allocable2 { // supports trailing allocator only\r\n    Allocable2(int val = 0) : Myval(val) {}\r\n\r\n    Allocable2(const Allocable2& right) : Myval(right.Myval) {}\r\n\r\n    Allocable2(const STD allocator<int>&) : Myval(0) {}\r\n\r\n    Allocable2(const Allocable2& right, const STD allocator<int>&) : Myval(right.Myval) {}\r\n\r\n    Allocable2(int val, const STD allocator<int>&) : Myval(val) {}\r\n\r\n    int Myval;\r\n};\r\n\r\nnamespace std {\r\n    template <>\r\n    struct uses_allocator<Allocable1, allocator<int>> : true_type {};\r\n\r\n    template <>\r\n    struct uses_allocator<Allocable2, allocator<int>> : true_type {};\r\n} // namespace std\r\n\r\nstatic void t_alloc() { // test allocator constructors\r\n    {\r\n        typedef STD tuple<Allocable0> Tal;\r\n        Tal t0(0);\r\n        CHECK_INT(STD get<0>(t0).Myval, 0);\r\n\r\n        Allocable0 ab1(1);\r\n        Tal t1(ab1);\r\n        CHECK_INT(STD get<0>(t1).Myval, 1);\r\n\r\n        STD tuple<int> tint(2);\r\n        Tal t2(tint);\r\n        CHECK_INT(STD get<0>(t2).Myval, 2);\r\n\r\n        typedef STD tuple<Allocable0, Allocable0> Tal2;\r\n        STD pair<int, int> pa3(3, 30);\r\n        Tal2 t3(pa3);\r\n        CHECK_INT(STD get<0>(t3).Myval, 3);\r\n        CHECK_INT(STD get<1>(t3).Myval, 30);\r\n\r\n        Tal2 t4(4, 0);\r\n        CHECK_INT(STD get<0>(t4).Myval, 4);\r\n\r\n        typedef STD tuple<Movable_int> Tmi;\r\n        Tmi t5a(5);\r\n        Tmi t5b(STD move(t5a));\r\n        CHECK_INT(STD get<0>(t5b), 5);\r\n\r\n        Tal t6(STD tuple<int>(6));\r\n        CHECK_INT(STD get<0>(t6).Myval, 6);\r\n\r\n        STD pair<int, int> pa7(7, 70);\r\n        Tal2 t7(STD move(pa7));\r\n        CHECK_INT(STD get<0>(t7).Myval, 7);\r\n        CHECK_INT(STD get<1>(t7).Myval, 70);\r\n\r\n        Tal2 t8(t7);\r\n        CHECK_INT(STD get<0>(t8).Myval, 7);\r\n        CHECK_INT(STD get<1>(t8).Myval, 70);\r\n    }\r\n\r\n    {\r\n        typedef STD tuple<Allocable1> Tal;\r\n        STD allocator<int> al;\r\n        Tal t0(STD allocator_arg, al);\r\n        CHECK_INT(STD get<0>(t0).Myval, 0);\r\n\r\n        Allocable1 ab1(STD allocator_arg, al, 1);\r\n        Tal t1(STD allocator_arg, al, ab1);\r\n        CHECK_INT(STD get<0>(t1).Myval, 1);\r\n\r\n        STD tuple<int> tint(2);\r\n        Tal t2(STD allocator_arg, al, tint);\r\n        CHECK_INT(STD get<0>(t2).Myval, 2);\r\n\r\n        typedef STD tuple<Allocable1, Allocable1> Tal2;\r\n        STD pair<int, int> pa3(3, 30);\r\n        Tal2 t3(STD allocator_arg, al, pa3);\r\n        CHECK_INT(STD get<0>(t3).Myval, 3);\r\n        CHECK_INT(STD get<1>(t3).Myval, 30);\r\n\r\n        Tal t4(STD allocator_arg, al, 4);\r\n        CHECK_INT(STD get<0>(t4).Myval, 4);\r\n\r\n        typedef STD tuple<Movable_int> Tmi;\r\n        Tmi t5a(5);\r\n        Tmi t5b(STD move(t5a));\r\n        CHECK_INT(STD get<0>(t5b), 5);\r\n\r\n        Tal t6(STD allocator_arg, al, STD tuple<int>(6));\r\n        CHECK_INT(STD get<0>(t6).Myval, 6);\r\n\r\n        STD pair<int, int> pa7(7, 70);\r\n        Tal2 t7(STD allocator_arg, al, STD move(pa7));\r\n        CHECK_INT(STD get<0>(t7).Myval, 7);\r\n        CHECK_INT(STD get<1>(t7).Myval, 70);\r\n\r\n        Tal2 t8(STD allocator_arg, al, t7);\r\n        CHECK_INT(STD get<0>(t8).Myval, 7);\r\n        CHECK_INT(STD get<1>(t8).Myval, 70);\r\n    }\r\n\r\n    {\r\n        typedef STD tuple<Allocable2> Tal;\r\n        STD allocator<int> al;\r\n        Tal t0(al);\r\n        CHECK_INT(STD get<0>(t0).Myval, 0);\r\n\r\n        Allocable2 ab1(1, al);\r\n        Tal t1(STD allocator_arg, al, ab1);\r\n        CHECK_INT(STD get<0>(t1).Myval, 1);\r\n\r\n        STD tuple<int> tint(2);\r\n        Tal t2(STD allocator_arg, al, tint);\r\n        CHECK_INT(STD get<0>(t2).Myval, 2);\r\n\r\n        typedef STD tuple<Allocable2, Allocable2> Tal2;\r\n        STD pair<int, int> pa3(3, 30);\r\n        Tal2 t3(STD allocator_arg, al, pa3);\r\n        CHECK_INT(STD get<0>(t3).Myval, 3);\r\n        CHECK_INT(STD get<1>(t3).Myval, 30);\r\n\r\n        Tal t4(STD allocator_arg, al, 4);\r\n        CHECK_INT(STD get<0>(t4).Myval, 4);\r\n\r\n        typedef STD tuple<Movable_int> Tmi;\r\n        Tmi t5a(5);\r\n        Tmi t5b(STD move(t5a));\r\n        CHECK_INT(STD get<0>(t5b), 5);\r\n\r\n        Tal t6(STD allocator_arg, al, STD tuple<int>(6));\r\n        CHECK_INT(STD get<0>(t6).Myval, 6);\r\n\r\n        STD pair<int, int> pa7(7, 70);\r\n        Tal2 t7(STD allocator_arg, al, STD move(pa7));\r\n        CHECK_INT(STD get<0>(t7).Myval, 7);\r\n        CHECK_INT(STD get<1>(t7).Myval, 70);\r\n\r\n        Tal2 t8(STD allocator_arg, al, t7);\r\n        CHECK_INT(STD get<0>(t8).Myval, 7);\r\n        CHECK_INT(STD get<1>(t8).Myval, 70);\r\n    }\r\n}\r\n\r\nvoid test_main() { // test header <tuple>\r\n    tuple0();\r\n    tuple1();\r\n    tuple2();\r\n    tuple3();\r\n    tuple4();\r\n    tuple5();\r\n\r\n    tuple6();\r\n    tuple7();\r\n    tuple8();\r\n    tuple9();\r\n    tuple10();\r\n    t_make_tuple();\r\n    t_tie();\r\n    t_move();\r\n    t_alloc();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/type_traits1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <type_traits> header, part 1\r\n#define TEST_NAME \"<type_traits>, part 1\"\r\n\r\n#define _SILENCE_CXX23_ALIGNED_STORAGE_DEPRECATION_WARNING\r\n#define _SILENCE_CXX23_ALIGNED_UNION_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include \"typetr.h\"\r\n#include <type_traits>\r\n\r\n// TESTS\r\nstatic void t_wrappers() { // test integral_constant, true_type, false_type\r\n    typedef STD integral_constant<int, 3> XX;\r\n    T_INTEGRAL_CONSTANT(XX, int, 3);\r\n    T_INTEGRAL_CONSTANT(STD true_type, bool, true);\r\n    T_INTEGRAL_CONSTANT(STD false_type, bool, false);\r\n}\r\n\r\nstatic void t_is_void() { // test is_void<T> for various types\r\n    T_TEST_CV(is_void, void, true);\r\n    T_TEST_CV(is_void, char, false);\r\n    T_TEST_CV(is_void, signed char, false);\r\n    T_TEST_CV(is_void, unsigned char, false);\r\n    T_TEST_CV(is_void, wchar_t, false);\r\n    T_TEST_CV(is_void, short, false);\r\n    T_TEST_CV(is_void, unsigned short, false);\r\n    T_TEST_CV(is_void, int, false);\r\n    T_TEST_CV(is_void, unsigned int, false);\r\n    T_TEST_CV(is_void, long, false);\r\n    T_TEST_CV(is_void, unsigned long, false);\r\n\r\n    T_TEST_CV(is_void, long long, false);\r\n    T_TEST_CV(is_void, unsigned long long, false);\r\n\r\n    T_TEST_CV(is_void, float, false);\r\n    T_TEST_CV(is_void, double, false);\r\n    T_TEST_CV(is_void, long double, false);\r\n    T_TEST_CV(is_void, int*, false);\r\n    T_TEST(is_void, int&, false);\r\n    T_TEST_CV(is_void, A, false);\r\n    T_TEST_CV(is_void, B, false);\r\n    T_TEST_CV(is_void, C, false);\r\n    T_TEST_CV(is_void, D, false);\r\n    T_TEST_CV(is_void, U, false);\r\n    T_TEST_CV(is_void, pmo, false);\r\n    T_TEST_CV(is_void, pmoc, false);\r\n    T_TEST_CV(is_void, pmov, false);\r\n    T_TEST_CV(is_void, pmocv, false);\r\n    T_TEST_CV(is_void, pmf, false);\r\n    T_TEST_CV(is_void, pmfc, false);\r\n    T_TEST_CV(is_void, pmfv, false);\r\n    T_TEST_CV(is_void, pmfcv, false);\r\n    T_TEST_CV(is_void, arr_t, false);\r\n    T_TEST_CV(is_void, enum_t, false);\r\n    T_TEST_CV(is_void, pf, false);\r\n    T_TEST(is_void, func, false);\r\n    T_TEST_CV(is_void, void*, false);\r\n}\r\n\r\nstatic void t_is_integral() { // test is_integral<T> for various types\r\n    T_TEST_CV(is_integral, void, false);\r\n    T_TEST_CV(is_integral, char, true);\r\n    T_TEST_CV(is_integral, signed char, true);\r\n    T_TEST_CV(is_integral, unsigned char, true);\r\n    T_TEST_CV(is_integral, wchar_t, true);\r\n    T_TEST_CV(is_integral, short, true);\r\n    T_TEST_CV(is_integral, unsigned short, true);\r\n    T_TEST_CV(is_integral, int, true);\r\n    T_TEST_CV(is_integral, unsigned int, true);\r\n    T_TEST_CV(is_integral, long, true);\r\n    T_TEST_CV(is_integral, unsigned long, true);\r\n\r\n    T_TEST_CV(is_integral, long long, true);\r\n    T_TEST_CV(is_integral, unsigned long long, true);\r\n\r\n    T_TEST_CV(is_integral, float, false);\r\n    T_TEST_CV(is_integral, double, false);\r\n    T_TEST_CV(is_integral, long double, false);\r\n    T_TEST_CV(is_integral, int*, false);\r\n    T_TEST(is_integral, int&, false);\r\n    T_TEST_CV(is_integral, A, false);\r\n    T_TEST_CV(is_integral, B, false);\r\n    T_TEST_CV(is_integral, C, false);\r\n    T_TEST_CV(is_integral, D, false);\r\n    T_TEST_CV(is_integral, U, false);\r\n    T_TEST_CV(is_integral, pmo, false);\r\n    T_TEST_CV(is_integral, pmoc, false);\r\n    T_TEST_CV(is_integral, pmov, false);\r\n    T_TEST_CV(is_integral, pmocv, false);\r\n    T_TEST_CV(is_integral, pmf, false);\r\n    T_TEST_CV(is_integral, pmfc, false);\r\n    T_TEST_CV(is_integral, pmfv, false);\r\n    T_TEST_CV(is_integral, pmfcv, false);\r\n    T_TEST_CV(is_integral, arr_t, false);\r\n    T_TEST_CV(is_integral, enum_t, false);\r\n    T_TEST_CV(is_integral, pf, false);\r\n    T_TEST(is_integral, func, false);\r\n    T_TEST_CV(is_integral, void*, false);\r\n}\r\n\r\nstatic void t_is_floating_point() { // test is_floating_point<T> for various types\r\n    T_TEST_CV(is_floating_point, void, false);\r\n    T_TEST_CV(is_floating_point, char, false);\r\n    T_TEST_CV(is_floating_point, signed char, false);\r\n    T_TEST_CV(is_floating_point, unsigned char, false);\r\n    T_TEST_CV(is_floating_point, wchar_t, false);\r\n    T_TEST_CV(is_floating_point, short, false);\r\n    T_TEST_CV(is_floating_point, unsigned short, false);\r\n    T_TEST_CV(is_floating_point, int, false);\r\n    T_TEST_CV(is_floating_point, unsigned int, false);\r\n    T_TEST_CV(is_floating_point, long, false);\r\n    T_TEST_CV(is_floating_point, unsigned long, false);\r\n\r\n    T_TEST_CV(is_floating_point, long long, false);\r\n    T_TEST_CV(is_floating_point, unsigned long long, false);\r\n\r\n    T_TEST_CV(is_floating_point, float, true);\r\n    T_TEST_CV(is_floating_point, double, true);\r\n    T_TEST_CV(is_floating_point, long double, true);\r\n    T_TEST_CV(is_floating_point, int*, false);\r\n    T_TEST(is_floating_point, int&, false);\r\n    T_TEST_CV(is_floating_point, A, false);\r\n    T_TEST_CV(is_floating_point, B, false);\r\n    T_TEST_CV(is_floating_point, C, false);\r\n    T_TEST_CV(is_floating_point, D, false);\r\n    T_TEST_CV(is_floating_point, U, false);\r\n    T_TEST_CV(is_floating_point, pmo, false);\r\n    T_TEST_CV(is_floating_point, pmoc, false);\r\n    T_TEST_CV(is_floating_point, pmov, false);\r\n    T_TEST_CV(is_floating_point, pmocv, false);\r\n    T_TEST_CV(is_floating_point, pmf, false);\r\n    T_TEST_CV(is_floating_point, pmfc, false);\r\n    T_TEST_CV(is_floating_point, pmfv, false);\r\n    T_TEST_CV(is_floating_point, pmfcv, false);\r\n    T_TEST_CV(is_floating_point, arr_t, false);\r\n    T_TEST_CV(is_floating_point, enum_t, false);\r\n    T_TEST_CV(is_floating_point, pf, false);\r\n    T_TEST(is_floating_point, func, false);\r\n    T_TEST_CV(is_floating_point, void*, false);\r\n}\r\n\r\nstatic void t_is_array() { // test is_array<T> for various types\r\n    T_TEST_CV(is_array, void, false);\r\n    T_TEST_CV(is_array, char, false);\r\n    T_TEST_CV(is_array, signed char, false);\r\n    T_TEST_CV(is_array, unsigned char, false);\r\n    T_TEST_CV(is_array, wchar_t, false);\r\n    T_TEST_CV(is_array, short, false);\r\n    T_TEST_CV(is_array, unsigned short, false);\r\n    T_TEST_CV(is_array, int, false);\r\n    T_TEST_CV(is_array, unsigned int, false);\r\n    T_TEST_CV(is_array, long, false);\r\n    T_TEST_CV(is_array, unsigned long, false);\r\n\r\n    T_TEST_CV(is_array, long long, false);\r\n    T_TEST_CV(is_array, unsigned long long, false);\r\n\r\n    T_TEST_CV(is_array, float, false);\r\n    T_TEST_CV(is_array, double, false);\r\n    T_TEST_CV(is_array, long double, false);\r\n    T_TEST_CV(is_array, int*, false);\r\n    T_TEST(is_array, int&, false);\r\n    T_TEST_CV(is_array, A, false);\r\n    T_TEST_CV(is_array, B, false);\r\n    T_TEST_CV(is_array, B, false);\r\n    T_TEST_CV(is_array, C, false);\r\n    T_TEST_CV(is_array, D, false);\r\n    T_TEST_CV(is_array, U, false);\r\n    T_TEST_CV(is_array, pmo, false);\r\n    T_TEST_CV(is_array, pmoc, false);\r\n    T_TEST_CV(is_array, pmov, false);\r\n    T_TEST_CV(is_array, pmocv, false);\r\n    T_TEST_CV(is_array, pmf, false);\r\n    T_TEST_CV(is_array, pmfc, false);\r\n    T_TEST_CV(is_array, pmfv, false);\r\n    T_TEST_CV(is_array, pmfcv, false);\r\n    T_TEST_CV(is_array, arr_t, true);\r\n    T_TEST_CV(is_array, enum_t, false);\r\n    T_TEST_CV(is_array, pf, false);\r\n    T_TEST(is_array, func, false);\r\n    T_TEST_CV(is_array, void*, false);\r\n}\r\n\r\nstatic void t_is_pointer() { // test is_pointer<T> for various types\r\n    T_TEST_CV(is_pointer, void, false);\r\n    T_TEST_CV(is_pointer, char, false);\r\n    T_TEST_CV(is_pointer, signed char, false);\r\n    T_TEST_CV(is_pointer, unsigned char, false);\r\n    T_TEST_CV(is_pointer, wchar_t, false);\r\n    T_TEST_CV(is_pointer, short, false);\r\n    T_TEST_CV(is_pointer, unsigned short, false);\r\n    T_TEST_CV(is_pointer, int, false);\r\n    T_TEST_CV(is_pointer, unsigned int, false);\r\n    T_TEST_CV(is_pointer, long, false);\r\n    T_TEST_CV(is_pointer, unsigned long, false);\r\n\r\n    T_TEST_CV(is_pointer, long long, false);\r\n    T_TEST_CV(is_pointer, unsigned long long, false);\r\n\r\n    T_TEST_CV(is_pointer, float, false);\r\n    T_TEST_CV(is_pointer, double, false);\r\n    T_TEST_CV(is_pointer, long double, false);\r\n    T_TEST_CV(is_pointer, int*, true);\r\n    T_TEST(is_pointer, int&, false);\r\n    T_TEST_CV(is_pointer, A, false);\r\n    T_TEST_CV(is_pointer, B, false);\r\n    T_TEST_CV(is_pointer, C, false);\r\n    T_TEST_CV(is_pointer, D, false);\r\n    T_TEST_CV(is_pointer, U, false);\r\n    T_TEST_CV(is_pointer, pmo, false);\r\n    T_TEST_CV(is_pointer, pmoc, false);\r\n    T_TEST_CV(is_pointer, pmov, false);\r\n    T_TEST_CV(is_pointer, pmocv, false);\r\n    T_TEST_CV(is_pointer, pmf, false);\r\n    T_TEST_CV(is_pointer, pmfc, false);\r\n    T_TEST_CV(is_pointer, pmfv, false);\r\n    T_TEST_CV(is_pointer, pmfcv, false);\r\n    T_TEST_CV(is_pointer, arr_t, false);\r\n    T_TEST_CV(is_pointer, enum_t, false);\r\n    T_TEST_CV(is_pointer, pf, true);\r\n    T_TEST(is_pointer, func, false);\r\n    T_TEST_CV(is_pointer, void*, true);\r\n}\r\n\r\nstatic void t_is_lvalue_reference() { // test is_lvalue_reference<T> for various types\r\n    T_TEST_CV(is_lvalue_reference, void, false);\r\n    T_TEST_CV(is_lvalue_reference, char, false);\r\n    T_TEST_CV(is_lvalue_reference, signed char, false);\r\n    T_TEST_CV(is_lvalue_reference, unsigned char, false);\r\n    T_TEST_CV(is_lvalue_reference, wchar_t, false);\r\n    T_TEST_CV(is_lvalue_reference, short, false);\r\n    T_TEST_CV(is_lvalue_reference, unsigned short, false);\r\n    T_TEST_CV(is_lvalue_reference, int, false);\r\n    T_TEST_CV(is_lvalue_reference, unsigned int, false);\r\n    T_TEST_CV(is_lvalue_reference, long, false);\r\n    T_TEST_CV(is_lvalue_reference, unsigned long, false);\r\n\r\n    T_TEST_CV(is_lvalue_reference, long long, false);\r\n    T_TEST_CV(is_lvalue_reference, unsigned long long, false);\r\n\r\n    T_TEST_CV(is_lvalue_reference, float, false);\r\n    T_TEST_CV(is_lvalue_reference, double, false);\r\n    T_TEST_CV(is_lvalue_reference, long double, false);\r\n    T_TEST_CV(is_lvalue_reference, int*, false);\r\n    T_TEST(is_lvalue_reference, int&, true);\r\n\r\n    T_TEST(is_lvalue_reference, int&&, false);\r\n\r\n    T_TEST_CV(is_lvalue_reference, A, false);\r\n    T_TEST_CV(is_lvalue_reference, C, false);\r\n    T_TEST_CV(is_lvalue_reference, D, false);\r\n    T_TEST_CV(is_lvalue_reference, U, false);\r\n    T_TEST_CV(is_lvalue_reference, pmo, false);\r\n    T_TEST_CV(is_lvalue_reference, pmoc, false);\r\n    T_TEST_CV(is_lvalue_reference, pmov, false);\r\n    T_TEST_CV(is_lvalue_reference, pmocv, false);\r\n    T_TEST_CV(is_lvalue_reference, pmf, false);\r\n    T_TEST_CV(is_lvalue_reference, pmfc, false);\r\n    T_TEST_CV(is_lvalue_reference, pmfv, false);\r\n    T_TEST_CV(is_lvalue_reference, pmfcv, false);\r\n    T_TEST_CV(is_lvalue_reference, arr_t, false);\r\n    T_TEST_CV(is_lvalue_reference, enum_t, false);\r\n    T_TEST_CV(is_lvalue_reference, pf, false);\r\n    T_TEST(is_lvalue_reference, func, false);\r\n    T_TEST_CV(is_lvalue_reference, void*, false);\r\n}\r\n\r\nstatic void t_is_rvalue_reference() { // test is_rvalue_reference<T> for various types\r\n    T_TEST_CV(is_rvalue_reference, void, false);\r\n    T_TEST_CV(is_rvalue_reference, char, false);\r\n    T_TEST_CV(is_rvalue_reference, signed char, false);\r\n    T_TEST_CV(is_rvalue_reference, unsigned char, false);\r\n    T_TEST_CV(is_rvalue_reference, wchar_t, false);\r\n    T_TEST_CV(is_rvalue_reference, short, false);\r\n    T_TEST_CV(is_rvalue_reference, unsigned short, false);\r\n    T_TEST_CV(is_rvalue_reference, int, false);\r\n    T_TEST_CV(is_rvalue_reference, unsigned int, false);\r\n    T_TEST_CV(is_rvalue_reference, long, false);\r\n    T_TEST_CV(is_rvalue_reference, unsigned long, false);\r\n\r\n    T_TEST_CV(is_rvalue_reference, long long, false);\r\n    T_TEST_CV(is_rvalue_reference, unsigned long long, false);\r\n\r\n    T_TEST_CV(is_rvalue_reference, float, false);\r\n    T_TEST_CV(is_rvalue_reference, double, false);\r\n    T_TEST_CV(is_rvalue_reference, long double, false);\r\n    T_TEST_CV(is_rvalue_reference, int*, false);\r\n    T_TEST(is_rvalue_reference, int&, false);\r\n\r\n    T_TEST(is_rvalue_reference, int&&, true);\r\n\r\n    T_TEST_CV(is_rvalue_reference, A, false);\r\n    T_TEST_CV(is_rvalue_reference, C, false);\r\n    T_TEST_CV(is_rvalue_reference, D, false);\r\n    T_TEST_CV(is_rvalue_reference, U, false);\r\n    T_TEST_CV(is_rvalue_reference, pmo, false);\r\n    T_TEST_CV(is_rvalue_reference, pmoc, false);\r\n    T_TEST_CV(is_rvalue_reference, pmov, false);\r\n    T_TEST_CV(is_rvalue_reference, pmocv, false);\r\n    T_TEST_CV(is_rvalue_reference, pmf, false);\r\n    T_TEST_CV(is_rvalue_reference, pmfc, false);\r\n    T_TEST_CV(is_rvalue_reference, pmfv, false);\r\n    T_TEST_CV(is_rvalue_reference, pmfcv, false);\r\n    T_TEST_CV(is_rvalue_reference, arr_t, false);\r\n    T_TEST_CV(is_rvalue_reference, enum_t, false);\r\n    T_TEST_CV(is_rvalue_reference, pf, false);\r\n    T_TEST(is_rvalue_reference, func, false);\r\n    T_TEST_CV(is_rvalue_reference, void*, false);\r\n}\r\n\r\nstatic void t_is_reference() { // test is_reference<T> for various types\r\n    T_TEST_CV(is_reference, void, false);\r\n    T_TEST_CV(is_reference, char, false);\r\n    T_TEST_CV(is_reference, signed char, false);\r\n    T_TEST_CV(is_reference, unsigned char, false);\r\n    T_TEST_CV(is_reference, wchar_t, false);\r\n    T_TEST_CV(is_reference, short, false);\r\n    T_TEST_CV(is_reference, unsigned short, false);\r\n    T_TEST_CV(is_reference, int, false);\r\n    T_TEST_CV(is_reference, unsigned int, false);\r\n    T_TEST_CV(is_reference, long, false);\r\n    T_TEST_CV(is_reference, unsigned long, false);\r\n\r\n    T_TEST_CV(is_reference, long long, false);\r\n    T_TEST_CV(is_reference, unsigned long long, false);\r\n\r\n    T_TEST_CV(is_reference, float, false);\r\n    T_TEST_CV(is_reference, double, false);\r\n    T_TEST_CV(is_reference, long double, false);\r\n    T_TEST_CV(is_reference, int*, false);\r\n    T_TEST(is_reference, int&, true);\r\n\r\n    T_TEST(is_reference, int&&, true);\r\n\r\n    T_TEST_CV(is_reference, A, false);\r\n    T_TEST_CV(is_reference, C, false);\r\n    T_TEST_CV(is_reference, D, false);\r\n    T_TEST_CV(is_reference, U, false);\r\n    T_TEST_CV(is_reference, pmo, false);\r\n    T_TEST_CV(is_reference, pmoc, false);\r\n    T_TEST_CV(is_reference, pmov, false);\r\n    T_TEST_CV(is_reference, pmocv, false);\r\n    T_TEST_CV(is_reference, pmf, false);\r\n    T_TEST_CV(is_reference, pmfc, false);\r\n    T_TEST_CV(is_reference, pmfv, false);\r\n    T_TEST_CV(is_reference, pmfcv, false);\r\n    T_TEST_CV(is_reference, arr_t, false);\r\n    T_TEST_CV(is_reference, enum_t, false);\r\n    T_TEST_CV(is_reference, pf, false);\r\n    T_TEST(is_reference, func, false);\r\n    T_TEST_CV(is_reference, void*, false);\r\n}\r\n\r\nstatic void t_is_member_object_pointer() { // test is_member_object_pointer<T> for various types\r\n    T_TEST_CV(is_member_object_pointer, void, false);\r\n    T_TEST_CV(is_member_object_pointer, char, false);\r\n    T_TEST_CV(is_member_object_pointer, signed char, false);\r\n    T_TEST_CV(is_member_object_pointer, unsigned char, false);\r\n    T_TEST_CV(is_member_object_pointer, wchar_t, false);\r\n    T_TEST_CV(is_member_object_pointer, short, false);\r\n    T_TEST_CV(is_member_object_pointer, unsigned short, false);\r\n    T_TEST_CV(is_member_object_pointer, int, false);\r\n    T_TEST_CV(is_member_object_pointer, unsigned int, false);\r\n    T_TEST_CV(is_member_object_pointer, long, false);\r\n    T_TEST_CV(is_member_object_pointer, unsigned long, false);\r\n\r\n    T_TEST_CV(is_member_object_pointer, long long, false);\r\n    T_TEST_CV(is_member_object_pointer, unsigned long long, false);\r\n\r\n    T_TEST_CV(is_member_object_pointer, float, false);\r\n    T_TEST_CV(is_member_object_pointer, double, false);\r\n    T_TEST_CV(is_member_object_pointer, long double, false);\r\n    T_TEST_CV(is_member_object_pointer, int*, false);\r\n    T_TEST(is_member_object_pointer, int&, false);\r\n    T_TEST_CV(is_member_object_pointer, A, false);\r\n    T_TEST_CV(is_member_object_pointer, B, false);\r\n    T_TEST_CV(is_member_object_pointer, C, false);\r\n    T_TEST_CV(is_member_object_pointer, D, false);\r\n    T_TEST_CV(is_member_object_pointer, U, false);\r\n    T_TEST_CV(is_member_object_pointer, pmo, true);\r\n    T_TEST_CV(is_member_object_pointer, pmoc, true);\r\n    T_TEST_CV(is_member_object_pointer, pmov, true);\r\n    T_TEST_CV(is_member_object_pointer, pmocv, true);\r\n    T_TEST_CV(is_member_object_pointer, pmf, false);\r\n    T_TEST_CV(is_member_object_pointer, pmfc, false);\r\n    T_TEST_CV(is_member_object_pointer, pmfv, false);\r\n    T_TEST_CV(is_member_object_pointer, pmfcv, false);\r\n    T_TEST_CV(is_member_object_pointer, arr_t, false);\r\n    T_TEST_CV(is_member_object_pointer, enum_t, false);\r\n    T_TEST_CV(is_member_object_pointer, pf, false);\r\n    T_TEST(is_member_object_pointer, func, false);\r\n    T_TEST_CV(is_member_object_pointer, void*, false);\r\n}\r\n\r\nstatic void t_is_member_function_pointer() { // test is_member_function_pointer<T> for various types\r\n    T_TEST_CV(is_member_function_pointer, void, false);\r\n    T_TEST_CV(is_member_function_pointer, char, false);\r\n    T_TEST_CV(is_member_function_pointer, signed char, false);\r\n    T_TEST_CV(is_member_function_pointer, unsigned char, false);\r\n    T_TEST_CV(is_member_function_pointer, wchar_t, false);\r\n    T_TEST_CV(is_member_function_pointer, short, false);\r\n    T_TEST_CV(is_member_function_pointer, unsigned short, false);\r\n    T_TEST_CV(is_member_function_pointer, int, false);\r\n    T_TEST_CV(is_member_function_pointer, unsigned int, false);\r\n    T_TEST_CV(is_member_function_pointer, long, false);\r\n    T_TEST_CV(is_member_function_pointer, unsigned long, false);\r\n\r\n    T_TEST_CV(is_member_function_pointer, long long, false);\r\n    T_TEST_CV(is_member_function_pointer, unsigned long long, false);\r\n\r\n    T_TEST_CV(is_member_function_pointer, float, false);\r\n    T_TEST_CV(is_member_function_pointer, double, false);\r\n    T_TEST_CV(is_member_function_pointer, long double, false);\r\n    T_TEST_CV(is_member_function_pointer, int*, false);\r\n    T_TEST(is_member_function_pointer, int&, false);\r\n    T_TEST_CV(is_member_function_pointer, A, false);\r\n    T_TEST_CV(is_member_function_pointer, B, false);\r\n    T_TEST_CV(is_member_function_pointer, C, false);\r\n    T_TEST_CV(is_member_function_pointer, D, false);\r\n    T_TEST_CV(is_member_function_pointer, U, false);\r\n    T_TEST_CV(is_member_function_pointer, pmo, false);\r\n    T_TEST_CV(is_member_function_pointer, pmoc, false);\r\n    T_TEST_CV(is_member_function_pointer, pmov, false);\r\n    T_TEST_CV(is_member_function_pointer, pmocv, false);\r\n    T_TEST_CV(is_member_function_pointer, pmf, true);\r\n    T_TEST_CV(is_member_function_pointer, pmfc, true);\r\n    T_TEST_CV(is_member_function_pointer, pmfv, true);\r\n    T_TEST_CV(is_member_function_pointer, pmfcv, true);\r\n    T_TEST_CV(is_member_function_pointer, arr_t, false);\r\n    T_TEST_CV(is_member_function_pointer, enum_t, false);\r\n    T_TEST_CV(is_member_function_pointer, pf, false);\r\n    T_TEST(is_member_function_pointer, func, false);\r\n    T_TEST_CV(is_member_function_pointer, void*, false);\r\n\r\n    typedef void (B::*pf0)();\r\n    typedef void (B::*pf1)(int);\r\n    typedef void (B::*pf2)(int, int);\r\n    typedef void (B::*pf3)(int, int, int);\r\n    typedef void (B::*pf4)(int, int, int, int);\r\n    typedef void (B::*pf5)(int, int, int, int, int);\r\n    CHECK(STD is_member_function_pointer<pf0>::value);\r\n    CHECK(STD is_member_function_pointer<pf1>::value);\r\n    CHECK(STD is_member_function_pointer<pf2>::value);\r\n    CHECK(STD is_member_function_pointer<pf3>::value);\r\n    CHECK(STD is_member_function_pointer<pf4>::value);\r\n    CHECK(STD is_member_function_pointer<pf5>::value);\r\n}\r\n\r\nvoid t_aliases() { // test template aliases\r\n    typedef int Ty;\r\n\r\n    CHECK_TYPE(STD remove_const_t<Ty>, STD remove_const<Ty>::type);\r\n    CHECK_TYPE(STD remove_volatile_t<Ty>, STD remove_volatile<Ty>::type);\r\n    CHECK_TYPE(STD remove_cv_t<Ty>, STD remove_cv<Ty>::type);\r\n    CHECK_TYPE(STD add_const_t<Ty>, STD add_const<Ty>::type);\r\n    CHECK_TYPE(STD add_volatile_t<Ty>, STD add_volatile<Ty>::type);\r\n    CHECK_TYPE(STD add_cv_t<Ty>, STD add_cv<Ty>::type);\r\n    CHECK_TYPE(STD remove_reference_t<Ty>, STD remove_reference<Ty>::type);\r\n    CHECK_TYPE(STD add_lvalue_reference_t<Ty>, STD add_lvalue_reference<Ty>::type);\r\n    CHECK_TYPE(STD add_rvalue_reference_t<Ty>, STD add_rvalue_reference<Ty>::type);\r\n    CHECK_TYPE(STD make_signed_t<Ty>, STD make_signed<Ty>::type);\r\n    CHECK_TYPE(STD make_unsigned_t<Ty>, STD make_unsigned<Ty>::type);\r\n    CHECK_TYPE(STD remove_extent_t<Ty>, STD remove_extent<Ty>::type);\r\n    CHECK_TYPE(STD remove_all_extents_t<Ty>, STD remove_all_extents<Ty>::type);\r\n    CHECK_TYPE(STD remove_pointer_t<Ty>, STD remove_pointer<Ty>::type);\r\n    CHECK_TYPE(STD add_pointer_t<Ty>, STD add_pointer<Ty>::type);\r\n    {\r\n        typedef STD aligned_storage_t<10, 4> Ty1;\r\n        typedef STD aligned_storage<10, 4>::type Ty2;\r\n        CHECK_TYPE(Ty1, Ty2);\r\n    }\r\n    {\r\n        typedef STD aligned_union_t<10, int> Ty1;\r\n        typedef STD aligned_union<10, int>::type Ty2;\r\n        CHECK_TYPE(Ty1, Ty2);\r\n    }\r\n    CHECK_TYPE(STD decay_t<Ty>, STD decay<Ty>::type);\r\n    {\r\n        typedef STD enable_if_t<true, Ty> Ty1;\r\n        typedef STD enable_if<true, Ty>::type Ty2;\r\n        CHECK_TYPE(Ty1, Ty2);\r\n    }\r\n    {\r\n        typedef STD conditional_t<true, Ty, Ty> Ty1;\r\n        typedef STD conditional<true, Ty, Ty>::type Ty2;\r\n        CHECK_TYPE(Ty1, Ty2);\r\n    }\r\n    {\r\n        typedef STD common_type_t<Ty, Ty> Ty1;\r\n        typedef STD common_type<Ty, Ty>::type Ty2;\r\n        CHECK_TYPE(Ty1, Ty2);\r\n    }\r\n    CHECK_TYPE(STD underlying_type_t<enum_t>, STD underlying_type<enum_t>::type);\r\n    {\r\n#if _HAS_CXX17\r\n        CHECK_TYPE(STD invoke_result_t<pf>, STD invoke_result<pf>::type);\r\n#else\r\n        CHECK_TYPE(STD result_of_t<pf()>, STD result_of<pf()>::type);\r\n#endif // _HAS_CXX17\r\n    }\r\n}\r\n\r\nvoid test_main() { // test type traits\r\n    t_wrappers();\r\n    t_is_void();\r\n    t_is_integral();\r\n    t_is_floating_point();\r\n    t_is_array();\r\n    t_is_pointer();\r\n\r\n    t_is_lvalue_reference();\r\n    t_is_rvalue_reference();\r\n\r\n    t_is_reference();\r\n    t_is_member_object_pointer();\r\n    t_is_member_function_pointer();\r\n\r\n    t_aliases();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/type_traits2/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <type_traits> header, part 2\r\n#define TEST_NAME \"<type_traits>, part 2\"\r\n\r\n#include \"tdefs.h\"\r\n#include \"typetr.h\"\r\n#include <type_traits>\r\n\r\n// TESTS\r\nstatic void t_is_enum() { // test is_enum<T> for various types\r\n    T_TEST_CV(is_enum, void, false);\r\n    T_TEST_CV(is_enum, char, false);\r\n    T_TEST_CV(is_enum, signed char, false);\r\n    T_TEST_CV(is_enum, unsigned char, false);\r\n    T_TEST_CV(is_enum, wchar_t, false);\r\n    T_TEST_CV(is_enum, short, false);\r\n    T_TEST_CV(is_enum, unsigned short, false);\r\n    T_TEST_CV(is_enum, int, false);\r\n    T_TEST_CV(is_enum, unsigned int, false);\r\n    T_TEST_CV(is_enum, long, false);\r\n    T_TEST_CV(is_enum, unsigned long, false);\r\n\r\n    T_TEST_CV(is_enum, long long, false);\r\n    T_TEST_CV(is_enum, unsigned long long, false);\r\n\r\n    T_TEST_CV(is_enum, float, false);\r\n    T_TEST_CV(is_enum, double, false);\r\n    T_TEST_CV(is_enum, long double, false);\r\n    T_TEST_CV(is_enum, int*, false);\r\n    T_TEST(is_enum, int&, false);\r\n\r\n    T_TEST_CV(is_enum, A, false); // unspecified whether A is instantiated\r\n\r\n    T_TEST_CV(is_enum, B, false);\r\n    T_TEST_CV(is_enum, C, false);\r\n    T_TEST_CV(is_enum, D, false);\r\n    T_TEST_CV(is_enum, U, false);\r\n    T_TEST_CV(is_enum, pmo, false);\r\n    T_TEST_CV(is_enum, pmoc, false);\r\n    T_TEST_CV(is_enum, pmov, false);\r\n    T_TEST_CV(is_enum, pmocv, false);\r\n    T_TEST_CV(is_enum, pmf, false);\r\n    T_TEST_CV(is_enum, pmfc, false);\r\n    T_TEST_CV(is_enum, pmfv, false);\r\n    T_TEST_CV(is_enum, pmfcv, false);\r\n    T_TEST_CV(is_enum, arr_t, false);\r\n    T_TEST_CV(is_enum, enum_t, true);\r\n    T_TEST_CV(is_enum, pf, false);\r\n    T_TEST(is_enum, func, false);\r\n    T_TEST_CV(is_enum, void*, false);\r\n}\r\n\r\nstatic void t_is_union() { // test is_union<T> for various types\r\n    T_NOBASE_CV(is_union, void, false);\r\n    T_NOBASE_CV(is_union, char, false);\r\n    T_NOBASE_CV(is_union, signed char, false);\r\n    T_NOBASE_CV(is_union, unsigned char, false);\r\n    T_NOBASE_CV(is_union, wchar_t, false);\r\n    T_NOBASE_CV(is_union, short, false);\r\n    T_NOBASE_CV(is_union, unsigned short, false);\r\n    T_NOBASE_CV(is_union, int, false);\r\n    T_NOBASE_CV(is_union, unsigned int, false);\r\n    T_NOBASE_CV(is_union, long, false);\r\n    T_NOBASE_CV(is_union, unsigned long, false);\r\n\r\n    T_NOBASE_CV(is_union, long long, false);\r\n    T_NOBASE_CV(is_union, unsigned long long, false);\r\n\r\n    T_NOBASE_CV(is_union, float, false);\r\n    T_NOBASE_CV(is_union, double, false);\r\n    T_NOBASE_CV(is_union, long double, false);\r\n    T_NOBASE_CV(is_union, int*, false);\r\n    T_NOBASE(is_union, int&, false);\r\n    T_NOBASE_CV(is_union, A, false);\r\n    T_NOBASE_CV(is_union, B, false);\r\n    T_NOBASE_CV(is_union, C, false);\r\n    T_NOBASE_CV(is_union, D, false);\r\n    T_NOBASE_CV(is_union, U, true);\r\n    T_NOBASE_CV(is_union, pmo, false);\r\n    T_NOBASE_CV(is_union, pmoc, false);\r\n    T_NOBASE_CV(is_union, pmov, false);\r\n    T_NOBASE_CV(is_union, pmocv, false);\r\n    T_NOBASE_CV(is_union, pmf, false);\r\n    T_NOBASE_CV(is_union, pmfc, false);\r\n    T_NOBASE_CV(is_union, pmfv, false);\r\n    T_NOBASE_CV(is_union, pmfcv, false);\r\n    T_NOBASE_CV(is_union, arr_t, false);\r\n    T_NOBASE_CV(is_union, enum_t, false);\r\n    T_NOBASE_CV(is_union, pf, false);\r\n    T_NOBASE(is_union, func, false);\r\n    T_NOBASE_CV(is_union, void*, false);\r\n}\r\n\r\nstatic void t_is_class() { // test is_class<T> for various types\r\n    T_NOBASE_CV(is_class, void, false);\r\n    T_NOBASE_CV(is_class, char, false);\r\n    T_NOBASE_CV(is_class, signed char, false);\r\n    T_NOBASE_CV(is_class, unsigned char, false);\r\n    T_NOBASE_CV(is_class, wchar_t, false);\r\n    T_NOBASE_CV(is_class, short, false);\r\n    T_NOBASE_CV(is_class, unsigned short, false);\r\n    T_NOBASE_CV(is_class, int, false);\r\n    T_NOBASE_CV(is_class, unsigned int, false);\r\n    T_NOBASE_CV(is_class, long, false);\r\n    T_NOBASE_CV(is_class, unsigned long, false);\r\n\r\n    T_NOBASE_CV(is_class, long long, false);\r\n    T_NOBASE_CV(is_class, unsigned long long, false);\r\n\r\n    T_NOBASE_CV(is_class, float, false);\r\n    T_NOBASE_CV(is_class, double, false);\r\n    T_NOBASE_CV(is_class, long double, false);\r\n    T_NOBASE_CV(is_class, int*, false);\r\n    T_NOBASE(is_class, int&, false);\r\n    T_NOBASE_CV(is_class, A, true);\r\n    T_NOBASE_CV(is_class, B, true);\r\n    T_NOBASE_CV(is_class, C, true);\r\n    T_NOBASE_CV(is_class, D, true);\r\n    T_NOBASE_CV(is_class, U, false);\r\n    T_NOBASE_CV(is_class, pmo, false);\r\n    T_NOBASE_CV(is_class, pmoc, false);\r\n    T_NOBASE_CV(is_class, pmov, false);\r\n    T_NOBASE_CV(is_class, pmocv, false);\r\n    T_NOBASE_CV(is_class, pmf, false);\r\n    T_NOBASE_CV(is_class, pmfc, false);\r\n    T_NOBASE_CV(is_class, pmfv, false);\r\n    T_NOBASE_CV(is_class, pmfcv, false);\r\n    T_NOBASE_CV(is_class, arr_t, false);\r\n    T_NOBASE_CV(is_class, enum_t, false);\r\n    T_NOBASE_CV(is_class, pf, false);\r\n    T_NOBASE(is_class, func, false);\r\n    T_NOBASE_CV(is_class, void*, false);\r\n}\r\n\r\nstatic void t_is_function() { // test is_function<T> for various types\r\n    T_TEST_CV(is_function, void, false);\r\n    T_TEST_CV(is_function, char, false);\r\n    T_TEST_CV(is_function, signed char, false);\r\n    T_TEST_CV(is_function, unsigned char, false);\r\n    T_TEST_CV(is_function, wchar_t, false);\r\n    T_TEST_CV(is_function, short, false);\r\n    T_TEST_CV(is_function, unsigned short, false);\r\n    T_TEST_CV(is_function, int, false);\r\n    T_TEST_CV(is_function, unsigned int, false);\r\n    T_TEST_CV(is_function, long, false);\r\n    T_TEST_CV(is_function, unsigned long, false);\r\n\r\n    T_TEST_CV(is_function, long long, false);\r\n    T_TEST_CV(is_function, unsigned long long, false);\r\n\r\n    T_TEST_CV(is_function, float, false);\r\n    T_TEST_CV(is_function, double, false);\r\n    T_TEST_CV(is_function, long double, false);\r\n    T_TEST_CV(is_function, int*, false);\r\n    T_TEST(is_function, int&, false);\r\n    T_TEST_CV(is_function, A, false);\r\n    T_TEST_CV(is_function, B, false);\r\n    T_TEST_CV(is_function, C, false);\r\n    T_TEST_CV(is_function, D, false);\r\n    T_TEST_CV(is_function, pmo, false);\r\n    T_TEST_CV(is_function, pmoc, false);\r\n    T_TEST_CV(is_function, pmov, false);\r\n    T_TEST_CV(is_function, pmocv, false);\r\n    T_TEST_CV(is_function, pmf, false);\r\n    T_TEST_CV(is_function, pmfc, false);\r\n    T_TEST_CV(is_function, pmfv, false);\r\n    T_TEST_CV(is_function, pmfcv, false);\r\n    T_TEST_CV(is_function, arr_t, false);\r\n    T_TEST_CV(is_function, enum_t, false);\r\n    T_TEST_CV(is_function, pf, false);\r\n    T_TEST(is_function, func, true);\r\n    T_TEST_CV(is_function, void*, false);\r\n\r\n    typedef void(pf0)();\r\n    typedef void(pf1)(int);\r\n    typedef void(pf2)(int, int);\r\n    typedef void(pf3)(int, int, int);\r\n    typedef void(pf4)(int, int, int, int);\r\n    typedef void(pf5)(int, int, int, int, int);\r\n    CHECK(STD is_function<pf0>::value);\r\n    CHECK(STD is_function<pf1>::value);\r\n    CHECK(STD is_function<pf2>::value);\r\n    CHECK(STD is_function<pf3>::value);\r\n    CHECK(STD is_function<pf4>::value);\r\n    CHECK(STD is_function<pf5>::value);\r\n}\r\n\r\nstatic void t_is_arithmetic() { // test is_arithmetic<T> for various types\r\n    T_TEST_CV(is_arithmetic, void, false);\r\n    T_TEST_CV(is_arithmetic, char, true);\r\n    T_TEST_CV(is_arithmetic, signed char, true);\r\n    T_TEST_CV(is_arithmetic, unsigned char, true);\r\n    T_TEST_CV(is_arithmetic, wchar_t, true);\r\n    T_TEST_CV(is_arithmetic, short, true);\r\n    T_TEST_CV(is_arithmetic, unsigned short, true);\r\n    T_TEST_CV(is_arithmetic, int, true);\r\n    T_TEST_CV(is_arithmetic, unsigned int, true);\r\n    T_TEST_CV(is_arithmetic, long, true);\r\n    T_TEST_CV(is_arithmetic, unsigned long, true);\r\n\r\n    T_TEST_CV(is_arithmetic, long long, true);\r\n    T_TEST_CV(is_arithmetic, unsigned long long, true);\r\n\r\n    T_TEST_CV(is_arithmetic, float, true);\r\n    T_TEST_CV(is_arithmetic, double, true);\r\n    T_TEST_CV(is_arithmetic, long double, true);\r\n    T_TEST_CV(is_arithmetic, int*, false);\r\n    T_TEST(is_arithmetic, int&, false);\r\n    T_TEST_CV(is_arithmetic, A, false);\r\n    T_TEST_CV(is_arithmetic, B, false);\r\n    T_TEST_CV(is_arithmetic, C, false);\r\n    T_TEST_CV(is_arithmetic, D, false);\r\n    T_TEST_CV(is_arithmetic, pmo, false);\r\n    T_TEST_CV(is_arithmetic, pmoc, false);\r\n    T_TEST_CV(is_arithmetic, pmov, false);\r\n    T_TEST_CV(is_arithmetic, pmocv, false);\r\n    T_TEST_CV(is_arithmetic, pmf, false);\r\n    T_TEST_CV(is_arithmetic, pmfc, false);\r\n    T_TEST_CV(is_arithmetic, pmfv, false);\r\n    T_TEST_CV(is_arithmetic, pmfcv, false);\r\n    T_TEST_CV(is_arithmetic, arr_t, false);\r\n    T_TEST_CV(is_arithmetic, enum_t, false);\r\n    T_TEST_CV(is_arithmetic, pf, false);\r\n    T_TEST(is_arithmetic, func, false);\r\n    T_TEST_CV(is_arithmetic, void*, false);\r\n}\r\n\r\nstatic void t_is_fundamental() { // test is_fundamental<T> for various types\r\n    T_TEST_CV(is_fundamental, void, true);\r\n    T_TEST_CV(is_fundamental, char, true);\r\n    T_TEST_CV(is_fundamental, signed char, true);\r\n    T_TEST_CV(is_fundamental, unsigned char, true);\r\n    T_TEST_CV(is_fundamental, wchar_t, true);\r\n    T_TEST_CV(is_fundamental, short, true);\r\n    T_TEST_CV(is_fundamental, unsigned short, true);\r\n    T_TEST_CV(is_fundamental, int, true);\r\n    T_TEST_CV(is_fundamental, unsigned int, true);\r\n    T_TEST_CV(is_fundamental, long, true);\r\n    T_TEST_CV(is_fundamental, unsigned long, true);\r\n\r\n    T_TEST_CV(is_fundamental, long long, true);\r\n    T_TEST_CV(is_fundamental, unsigned long long, true);\r\n\r\n    T_TEST_CV(is_fundamental, float, true);\r\n    T_TEST_CV(is_fundamental, double, true);\r\n    T_TEST_CV(is_fundamental, long double, true);\r\n    T_TEST_CV(is_fundamental, int*, false);\r\n    T_TEST(is_fundamental, int&, false);\r\n    T_TEST_CV(is_fundamental, A, false);\r\n    T_TEST_CV(is_fundamental, B, false);\r\n    T_TEST_CV(is_fundamental, C, false);\r\n    T_TEST_CV(is_fundamental, D, false);\r\n    T_TEST_CV(is_fundamental, pmo, false);\r\n    T_TEST_CV(is_fundamental, pmoc, false);\r\n    T_TEST_CV(is_fundamental, pmov, false);\r\n    T_TEST_CV(is_fundamental, pmocv, false);\r\n    T_TEST_CV(is_fundamental, pmf, false);\r\n    T_TEST_CV(is_fundamental, pmfc, false);\r\n    T_TEST_CV(is_fundamental, pmfv, false);\r\n    T_TEST_CV(is_fundamental, pmfcv, false);\r\n    T_TEST_CV(is_fundamental, arr_t, false);\r\n    T_TEST_CV(is_fundamental, enum_t, false);\r\n    T_TEST_CV(is_fundamental, pf, false);\r\n    T_TEST(is_fundamental, func, false);\r\n    T_TEST_CV(is_fundamental, void*, false);\r\n}\r\n\r\nstatic void t_is_object() { // test is_object<T> for various types\r\n    T_TEST_CV(is_object, void, false);\r\n    T_TEST_CV(is_object, char, true);\r\n    T_TEST_CV(is_object, signed char, true);\r\n    T_TEST_CV(is_object, unsigned char, true);\r\n    T_TEST_CV(is_object, wchar_t, true);\r\n    T_TEST_CV(is_object, short, true);\r\n    T_TEST_CV(is_object, unsigned short, true);\r\n    T_TEST_CV(is_object, int, true);\r\n    T_TEST_CV(is_object, unsigned int, true);\r\n    T_TEST_CV(is_object, long, true);\r\n    T_TEST_CV(is_object, unsigned long, true);\r\n\r\n    T_TEST_CV(is_object, long long, true);\r\n    T_TEST_CV(is_object, unsigned long long, true);\r\n\r\n    T_TEST_CV(is_object, float, true);\r\n    T_TEST_CV(is_object, double, true);\r\n    T_TEST_CV(is_object, long double, true);\r\n    T_TEST_CV(is_object, int*, true);\r\n    T_TEST(is_object, int&, false);\r\n    T_TEST_CV(is_object, A, true);\r\n    T_TEST_CV(is_object, B, true);\r\n    T_TEST_CV(is_object, C, true);\r\n    T_TEST_CV(is_object, D, true);\r\n    T_TEST_CV(is_object, pmo, true);\r\n    T_TEST_CV(is_object, pmoc, true);\r\n    T_TEST_CV(is_object, pmov, true);\r\n    T_TEST_CV(is_object, pmocv, true);\r\n    T_TEST_CV(is_object, pmf, true);\r\n    T_TEST_CV(is_object, pmfc, true);\r\n    T_TEST_CV(is_object, pmfv, true);\r\n    T_TEST_CV(is_object, pmfcv, true);\r\n    T_TEST_CV(is_object, arr_t, true);\r\n    T_TEST_CV(is_object, enum_t, true);\r\n    T_TEST_CV(is_object, pf, true);\r\n    T_TEST(is_object, func, false);\r\n    T_TEST_CV(is_object, void*, true);\r\n}\r\n\r\nstatic void t_is_scalar() { // test is_scalar<T> for various types\r\n    T_TEST_CV(is_scalar, void, false);\r\n    T_TEST_CV(is_scalar, char, true);\r\n    T_TEST_CV(is_scalar, signed char, true);\r\n    T_TEST_CV(is_scalar, unsigned char, true);\r\n    T_TEST_CV(is_scalar, wchar_t, true);\r\n    T_TEST_CV(is_scalar, short, true);\r\n    T_TEST_CV(is_scalar, unsigned short, true);\r\n    T_TEST_CV(is_scalar, int, true);\r\n    T_TEST_CV(is_scalar, unsigned int, true);\r\n    T_TEST_CV(is_scalar, long, true);\r\n    T_TEST_CV(is_scalar, unsigned long, true);\r\n\r\n    T_TEST_CV(is_scalar, long long, true);\r\n    T_TEST_CV(is_scalar, unsigned long long, true);\r\n\r\n    T_TEST_CV(is_scalar, float, true);\r\n    T_TEST_CV(is_scalar, double, true);\r\n    T_TEST_CV(is_scalar, long double, true);\r\n    T_TEST_CV(is_scalar, int*, true);\r\n    T_TEST(is_scalar, int&, false);\r\n\r\n    T_TEST_CV(is_scalar, A, false); // unspecified whether A is instantiated\r\n\r\n    T_TEST_CV(is_scalar, B, false);\r\n    T_TEST_CV(is_scalar, C, false);\r\n    T_TEST_CV(is_scalar, D, false);\r\n    T_TEST_CV(is_scalar, pmo, true);\r\n    T_TEST_CV(is_scalar, pmoc, true);\r\n    T_TEST_CV(is_scalar, pmov, true);\r\n    T_TEST_CV(is_scalar, pmocv, true);\r\n    T_TEST_CV(is_scalar, pmf, true);\r\n    T_TEST_CV(is_scalar, pmfc, true);\r\n    T_TEST_CV(is_scalar, pmfv, true);\r\n    T_TEST_CV(is_scalar, pmfcv, true);\r\n    T_TEST_CV(is_scalar, arr_t, false);\r\n    T_TEST_CV(is_scalar, enum_t, true);\r\n    T_TEST_CV(is_scalar, pf, true);\r\n    T_TEST(is_scalar, func, false);\r\n    T_TEST_CV(is_scalar, void*, true);\r\n}\r\n\r\nstatic void t_is_compound() { // test is_compound<T> for various types\r\n    T_TEST_CV(is_compound, void, false);\r\n    T_TEST_CV(is_compound, char, false);\r\n    T_TEST_CV(is_compound, signed char, false);\r\n    T_TEST_CV(is_compound, unsigned char, false);\r\n    T_TEST_CV(is_compound, wchar_t, false);\r\n    T_TEST_CV(is_compound, short, false);\r\n    T_TEST_CV(is_compound, unsigned short, false);\r\n    T_TEST_CV(is_compound, int, false);\r\n    T_TEST_CV(is_compound, unsigned int, false);\r\n    T_TEST_CV(is_compound, long, false);\r\n    T_TEST_CV(is_compound, unsigned long, false);\r\n\r\n    T_TEST_CV(is_compound, long long, false);\r\n    T_TEST_CV(is_compound, unsigned long long, false);\r\n\r\n    T_TEST_CV(is_compound, float, false);\r\n    T_TEST_CV(is_compound, double, false);\r\n    T_TEST_CV(is_compound, long double, false);\r\n    T_TEST_CV(is_compound, int*, true);\r\n    T_TEST(is_compound, int&, true);\r\n    T_TEST_CV(is_compound, A, true);\r\n    T_TEST_CV(is_compound, B, true);\r\n    T_TEST_CV(is_compound, C, true);\r\n    T_TEST_CV(is_compound, D, true);\r\n    T_TEST_CV(is_compound, pmo, true);\r\n    T_TEST_CV(is_compound, pmoc, true);\r\n    T_TEST_CV(is_compound, pmov, true);\r\n    T_TEST_CV(is_compound, pmocv, true);\r\n    T_TEST_CV(is_compound, pmf, true);\r\n    T_TEST_CV(is_compound, pmfc, true);\r\n    T_TEST_CV(is_compound, pmfv, true);\r\n    T_TEST_CV(is_compound, pmfcv, true);\r\n    T_TEST_CV(is_compound, arr_t, true);\r\n    T_TEST_CV(is_compound, enum_t, true);\r\n    T_TEST_CV(is_compound, pf, true);\r\n    T_TEST(is_compound, func, true);\r\n    T_TEST_CV(is_compound, void*, true);\r\n}\r\n\r\nstatic void t_is_member_pointer() { // test is_member_pointer<T> for various types\r\n    T_TEST_CV(is_member_pointer, void, false);\r\n    T_TEST_CV(is_member_pointer, char, false);\r\n    T_TEST_CV(is_member_pointer, signed char, false);\r\n    T_TEST_CV(is_member_pointer, unsigned char, false);\r\n    T_TEST_CV(is_member_pointer, wchar_t, false);\r\n    T_TEST_CV(is_member_pointer, short, false);\r\n    T_TEST_CV(is_member_pointer, unsigned short, false);\r\n    T_TEST_CV(is_member_pointer, int, false);\r\n    T_TEST_CV(is_member_pointer, unsigned int, false);\r\n    T_TEST_CV(is_member_pointer, long, false);\r\n    T_TEST_CV(is_member_pointer, unsigned long, false);\r\n\r\n    T_TEST_CV(is_member_pointer, long long, false);\r\n    T_TEST_CV(is_member_pointer, unsigned long long, false);\r\n\r\n    T_TEST_CV(is_member_pointer, float, false);\r\n    T_TEST_CV(is_member_pointer, double, false);\r\n    T_TEST_CV(is_member_pointer, long double, false);\r\n    T_TEST_CV(is_member_pointer, int*, false);\r\n    T_TEST(is_member_pointer, int&, false);\r\n    T_TEST_CV(is_member_pointer, A, false);\r\n    T_TEST_CV(is_member_pointer, B, false);\r\n    T_TEST_CV(is_member_pointer, C, false);\r\n    T_TEST_CV(is_member_pointer, D, false);\r\n    T_TEST_CV(is_member_pointer, pmo, true);\r\n    T_TEST_CV(is_member_pointer, pmoc, true);\r\n    T_TEST_CV(is_member_pointer, pmov, true);\r\n    T_TEST_CV(is_member_pointer, pmocv, true);\r\n    T_TEST_CV(is_member_pointer, pmf, true);\r\n    T_TEST_CV(is_member_pointer, pmfc, true);\r\n    T_TEST_CV(is_member_pointer, pmfv, true);\r\n    T_TEST_CV(is_member_pointer, pmfcv, true);\r\n    T_TEST_CV(is_member_pointer, arr_t, false);\r\n    T_TEST_CV(is_member_pointer, enum_t, false);\r\n    T_TEST_CV(is_member_pointer, pf, false);\r\n    T_TEST(is_member_pointer, func, false);\r\n    T_TEST_CV(is_member_pointer, void*, false);\r\n}\r\n\r\nvoid test_main() { // test type traits\r\n    t_is_enum();\r\n    t_is_union();\r\n    t_is_class();\r\n    t_is_function();\r\n    t_is_arithmetic();\r\n    t_is_fundamental();\r\n    t_is_object();\r\n    t_is_scalar();\r\n    t_is_compound();\r\n    t_is_member_pointer();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/type_traits3/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <type_traits> header, part 3\r\n#define TEST_NAME \"<type_traits>, part 3\"\r\n\r\n#include \"tdefs.h\"\r\n#include \"typetr.h\"\r\n#include <type_traits>\r\n\r\n// TESTS\r\nstatic void t_is_trivially_constructible() { // test is_trivially_constructible<T, Args...> for various types\r\n    T_UNSPEC_CV(is_trivially_constructible, void, false);\r\n    T_UNSPEC_CV(is_trivially_constructible, char, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, signed char, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, unsigned char, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, wchar_t, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, short, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, unsigned short, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, int, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, unsigned int, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, long, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, unsigned long, true);\r\n\r\n    T_UNSPEC_CV(is_trivially_constructible, long long, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, unsigned long long, true);\r\n\r\n    T_UNSPEC_CV(is_trivially_constructible, float, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, double, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, long double, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, int*, true);\r\n    T_UNSPEC(is_trivially_constructible, int&, false);\r\n    T_UNSPEC_CV(is_trivially_constructible, B, false);\r\n    T_UNSPEC_CV(is_trivially_constructible, C, false);\r\n    T_UNSPEC_CV(is_trivially_constructible, D, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, pmo, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, pmoc, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, pmov, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, pmocv, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, pmf, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, pmfc, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, pmfv, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, pmfcv, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, arr_t, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, enum_t, true);\r\n    T_UNSPEC_CV(is_trivially_constructible, pf, true);\r\n    T_UNSPEC(is_trivially_constructible, func, false);\r\n    T_UNSPEC_CV(is_trivially_constructible, void*, true);\r\n\r\n    bool ans = STD is_trivially_constructible<int>::value;\r\n    CHECK(ans);\r\n    ans = STD is_trivially_constructible<int, int>::value;\r\n    CHECK(ans);\r\n    ans = STD is_trivially_constructible<int, int, int>::value;\r\n    CHECK(!ans);\r\n    ans = STD is_trivially_constructible<int, int, int, int>::value;\r\n    CHECK(!ans);\r\n    ans = STD is_trivially_constructible<int, int, int, int, int>::value;\r\n    CHECK(!ans);\r\n}\r\n\r\nstatic void t_is_trivially_default_constructible() { // test is_trivially_default_constructible<T> for various types\r\n                                                     // (minimal tests in absence of compiler support)\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, void, false);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, char, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, signed char, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, unsigned char, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, wchar_t, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, short, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, unsigned short, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, int, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, unsigned int, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, long, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, unsigned long, true);\r\n\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, long long, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, unsigned long long, true);\r\n\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, float, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, double, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, long double, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, int*, true);\r\n    T_TRIVIAL(is_trivially_default_constructible, int&, false);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, B, false);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, C, false);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, D, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, pmo, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, pmoc, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, pmov, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, pmocv, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, pmf, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, pmfc, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, pmfv, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, pmfcv, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, arr_t, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, enum_t, true);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, pf, true);\r\n    T_TRIVIAL(is_trivially_default_constructible, func, false);\r\n    T_TRIVIAL_CV(is_trivially_default_constructible, void*, true);\r\n}\r\n\r\nstatic void t_is_trivially_copy_constructible() { // test is_trivially_copy_constructible<T> for various types\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, void, false);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, char, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, signed char, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, unsigned char, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, wchar_t, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, short, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, unsigned short, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, int, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, unsigned int, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, long, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, unsigned long, true);\r\n\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, long long, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, unsigned long long, true);\r\n\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, float, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, double, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, long double, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, int*, true);\r\n    T_UNSPEC(is_trivially_copy_constructible, int&, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, B, false);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, C, false);\r\n    T_UNSPEC_C(is_trivially_copy_constructible, D, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, pmo, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, pmoc, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, pmov, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, pmocv, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, pmf, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, pmfc, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, pmfv, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, pmfcv, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, arr_t, false);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, enum_t, true);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, pf, true);\r\n    T_UNSPEC(is_trivially_copy_constructible, func, false);\r\n    T_UNSPEC_CV(is_trivially_copy_constructible, void*, true);\r\n}\r\n\r\nstatic void t_is_trivially_copyable() { // test is_trivially_copyable<T> for various types\r\n    T_UNSPEC_CV(is_trivially_copyable, void, false);\r\n    T_UNSPEC_C(is_trivially_copyable, char, true);\r\n    T_UNSPEC_C(is_trivially_copyable, signed char, true);\r\n    T_UNSPEC_C(is_trivially_copyable, unsigned char, true);\r\n    T_UNSPEC_C(is_trivially_copyable, wchar_t, true);\r\n    T_UNSPEC_C(is_trivially_copyable, short, true);\r\n    T_UNSPEC_C(is_trivially_copyable, unsigned short, true);\r\n    T_UNSPEC_C(is_trivially_copyable, int, true);\r\n    T_UNSPEC_C(is_trivially_copyable, unsigned int, true);\r\n    T_UNSPEC_C(is_trivially_copyable, long, true);\r\n    T_UNSPEC_C(is_trivially_copyable, unsigned long, true);\r\n\r\n    T_UNSPEC_C(is_trivially_copyable, long long, true);\r\n    T_UNSPEC_C(is_trivially_copyable, unsigned long long, true);\r\n\r\n    T_UNSPEC_C(is_trivially_copyable, float, true);\r\n    T_UNSPEC_C(is_trivially_copyable, double, true);\r\n    T_UNSPEC_C(is_trivially_copyable, long double, true);\r\n    T_UNSPEC_C(is_trivially_copyable, int*, true);\r\n    T_UNSPEC(is_trivially_copyable, int&, false);\r\n    T_UNSPEC_CV(is_trivially_copyable, B, false);\r\n    T_UNSPEC_CV(is_trivially_copyable, C, false);\r\n    T_UNSPEC_C(is_trivially_copyable, D, true);\r\n    T_UNSPEC_C(is_trivially_copyable, pmo, true);\r\n    T_UNSPEC_C(is_trivially_copyable, pmoc, true);\r\n    T_UNSPEC_C(is_trivially_copyable, pmov, true);\r\n    T_UNSPEC_C(is_trivially_copyable, pmocv, true);\r\n    T_UNSPEC_C(is_trivially_copyable, pmf, true);\r\n    T_UNSPEC_C(is_trivially_copyable, pmfc, true);\r\n    T_UNSPEC_C(is_trivially_copyable, pmfv, true);\r\n    T_UNSPEC_C(is_trivially_copyable, pmfcv, true);\r\n    T_UNSPEC_C(is_trivially_copyable, arr_t, true);\r\n    T_UNSPEC_C(is_trivially_copyable, enum_t, true);\r\n    T_UNSPEC_C(is_trivially_copyable, pf, true);\r\n    T_UNSPEC(is_trivially_copyable, func, false);\r\n    T_UNSPEC_C(is_trivially_copyable, void*, true);\r\n}\r\n\r\nstatic void t_is_trivially_move_constructible() { // test is_trivially_move_constructible<T> for various types\r\n                                                  // (minimal tests in absence of compiler support)\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, void, false);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, char, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, signed char, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, unsigned char, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, wchar_t, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, short, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, unsigned short, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, int, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, unsigned int, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, long, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, unsigned long, true);\r\n\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, long long, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, unsigned long long, true);\r\n\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, float, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, double, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, long double, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, int*, true);\r\n    T_TRIVIAL(is_trivially_move_constructible, int&, true);\r\n\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, B, false);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, C, false);\r\n\r\n    T_TRIVIAL_C(is_trivially_move_constructible, D, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, pmo, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, pmoc, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, pmov, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, pmocv, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, pmf, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, pmfc, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, pmfv, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, pmfcv, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, arr_t, false);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, enum_t, true);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, pf, true);\r\n    T_TRIVIAL(is_trivially_move_constructible, func, false);\r\n    T_TRIVIAL_CV(is_trivially_move_constructible, void*, true);\r\n}\r\n\r\nstatic void t_is_trivially_assignable() { // test is_trivially_assignable<T> for various types\r\n                                          // (minimal tests in absence of compiler support)\r\n    bool ans = STD is_trivially_assignable<B, B>::value;\r\n    CHECK(!ans);\r\n    ans = STD is_trivially_assignable<int&, int>::value;\r\n    CHECK(ans);\r\n    ans = STD is_trivially_assignable<int&, B>::value;\r\n    CHECK(!ans);\r\n    // ans = STD is_trivially_assignable<void, void>::value;\r\n    CHECK(!ans);\r\n}\r\n\r\nstatic void t_is_trivially_copy_assignable() { // test is_trivially_copy_assignable<T> for various types\r\n                                               // (minimal tests in absence of compiler support)\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, void, false);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, char, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, signed char, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, unsigned char, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, wchar_t, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, short, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, unsigned short, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, int, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, unsigned int, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, long, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, unsigned long, true);\r\n\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, long long, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, unsigned long long, true);\r\n\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, float, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, double, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, long double, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, int*, true);\r\n    T_TRIVIAL(is_trivially_copy_assignable, int&, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, B, false);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, C, false);\r\n    T_TRIVIAL(is_trivially_copy_assignable, D, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, pmo, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, pmoc, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, pmov, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, pmocv, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, pmf, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, pmfc, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, pmfv, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, pmfcv, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, arr_t, false);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, enum_t, true);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, pf, true);\r\n    T_TRIVIAL(is_trivially_copy_assignable, func, false);\r\n    T_TRIVIAL_V(is_trivially_copy_assignable, void*, true);\r\n}\r\n\r\nstatic void t_is_trivially_move_assignable() { // test is_trivially_move_assignable<T> for various types\r\n                                               // (minimal tests in absence of compiler support)\r\n    // T_TRIVIAL_V(is_trivially_move_assignable, void, false);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, char, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, signed char, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, unsigned char, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, wchar_t, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, short, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, unsigned short, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, int, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, unsigned int, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, long, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, unsigned long, true);\r\n\r\n    T_TRIVIAL_V(is_trivially_move_assignable, long long, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, unsigned long long, true);\r\n\r\n    T_TRIVIAL_V(is_trivially_move_assignable, float, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, double, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, long double, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, int*, true);\r\n    T_TRIVIAL(is_trivially_move_assignable, int&, true);\r\n\r\n    T_TRIVIAL_V(is_trivially_move_assignable, B, false);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, C, false);\r\n\r\n    T_TRIVIAL(is_trivially_move_assignable, D, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, pmo, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, pmoc, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, pmov, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, pmocv, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, pmf, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, pmfc, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, pmfv, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, pmfcv, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, arr_t, false);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, enum_t, true);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, pf, true);\r\n    T_TRIVIAL(is_trivially_move_assignable, func, false);\r\n    T_TRIVIAL_V(is_trivially_move_assignable, void*, true);\r\n}\r\n\r\nstatic void t_is_trivially_destructible() { // test is_trivially_destructible<T> for various types\r\n                                            // (minimal tests in absence of compiler support)\r\n    T_TRIVIAL_CV(is_trivially_destructible, void, false);\r\n    T_TRIVIAL_CV(is_trivially_destructible, char, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, signed char, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, unsigned char, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, wchar_t, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, short, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, unsigned short, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, int, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, unsigned int, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, long, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, unsigned long, true);\r\n\r\n    T_TRIVIAL_CV(is_trivially_destructible, long long, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, unsigned long long, true);\r\n\r\n    T_TRIVIAL_CV(is_trivially_destructible, float, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, double, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, long double, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, int*, true);\r\n    T_TRIVIAL(is_trivially_destructible, int&, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, B, false);\r\n    T_TRIVIAL_CV(is_trivially_destructible, C, false);\r\n    T_TRIVIAL_CV(is_trivially_destructible, D, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, pmo, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, pmoc, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, pmov, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, pmocv, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, pmf, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, pmfc, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, pmfv, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, pmfcv, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, arr_t, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, enum_t, true);\r\n    T_TRIVIAL_CV(is_trivially_destructible, pf, true);\r\n    T_TRIVIAL(is_trivially_destructible, func, false);\r\n    T_TRIVIAL_CV(is_trivially_destructible, void*, true);\r\n}\r\n\r\nvoid test_main() { // test type traits\r\n    t_is_trivially_constructible();\r\n    t_is_trivially_default_constructible();\r\n    t_is_trivially_copy_constructible();\r\n    t_is_trivially_copyable();\r\n    t_is_trivially_move_constructible();\r\n\r\n    t_is_trivially_assignable();\r\n    t_is_trivially_copy_assignable();\r\n    t_is_trivially_move_assignable();\r\n\r\n    t_is_trivially_destructible();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/type_traits4/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <type_traits> header, part 4\r\n#define TEST_NAME \"<type_traits>, part 4\"\r\n\r\n#include \"tdefs.h\"\r\n#include \"typetr.h\"\r\n#include <limits>\r\n#include <type_traits>\r\n\r\n// TESTS\r\nstatic void t_is_nothrow_constructible() { // test is_nothrow_constructible<T, Args...> for various types\r\n    T_UNSPEC_CV(is_nothrow_constructible, void, false);\r\n    T_UNSPEC_CV(is_nothrow_constructible, char, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, signed char, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, unsigned char, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, wchar_t, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, short, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, unsigned short, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, int, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, unsigned int, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, long, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, unsigned long, true);\r\n\r\n    T_UNSPEC_CV(is_nothrow_constructible, long long, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, unsigned long long, true);\r\n\r\n    T_UNSPEC_CV(is_nothrow_constructible, float, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, double, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, long double, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, int*, true);\r\n    T_UNSPEC(is_nothrow_constructible, int&, false);\r\n\r\n    T_UNSPEC_CV(is_nothrow_constructible, B, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, C, true);\r\n\r\n    T_UNSPEC_CV(is_nothrow_constructible, D, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, pmo, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, pmoc, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, pmov, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, pmocv, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, pmf, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, pmfc, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, pmfv, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, pmfcv, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, arr_t, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, enum_t, true);\r\n    T_UNSPEC_CV(is_nothrow_constructible, pf, true);\r\n    T_UNSPEC(is_nothrow_constructible, func, false);\r\n    T_UNSPEC_CV(is_nothrow_constructible, void*, true);\r\n\r\n    bool ans = STD is_nothrow_constructible<int>::value;\r\n    CHECK(ans);\r\n    ans = STD is_nothrow_constructible<int, int>::value;\r\n    CHECK(ans);\r\n    ans = STD is_nothrow_constructible<int, int, int>::value;\r\n    CHECK(!ans);\r\n    ans = STD is_nothrow_constructible<int, int, int, int>::value;\r\n    CHECK(!ans);\r\n    ans = STD is_nothrow_constructible<int, int, int, int, int>::value;\r\n    CHECK(!ans);\r\n}\r\n\r\nstatic void t_is_nothrow_default_constructible() { // test is_nothrow_default_constructible<T> for various types\r\n                                                   // (minimal tests in absence of compiler support)\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, void, false);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, char, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, signed char, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, unsigned char, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, wchar_t, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, short, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, unsigned short, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, int, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, unsigned int, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, long, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, unsigned long, true);\r\n\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, long long, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, unsigned long long, true);\r\n\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, float, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, double, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, long double, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, int*, true);\r\n    T_TRIVIAL(is_nothrow_default_constructible, int&, false);\r\n\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, B, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, C, true);\r\n\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, D, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, pmo, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, pmoc, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, pmov, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, pmocv, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, pmf, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, pmfc, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, pmfv, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, pmfcv, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, arr_t, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, enum_t, true);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, pf, true);\r\n    T_TRIVIAL(is_nothrow_default_constructible, func, false);\r\n    T_TRIVIAL_CV(is_nothrow_default_constructible, void*, true);\r\n}\r\n\r\nstatic void t_is_nothrow_copy_constructible() { // test is_nothrow_copy_constructible<T> for various types\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, void, false);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, char, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, signed char, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, unsigned char, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, wchar_t, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, short, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, unsigned short, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, int, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, unsigned int, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, long, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, unsigned long, true);\r\n\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, long long, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, unsigned long long, true);\r\n\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, float, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, double, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, long double, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, int*, true);\r\n    T_UNSPEC(is_nothrow_copy_constructible, int&, true);\r\n    T_UNSPEC_C(is_nothrow_copy_constructible, B, true);\r\n    T_UNSPEC_C(is_nothrow_copy_constructible, C, true);\r\n    T_UNSPEC_C(is_nothrow_copy_constructible, D, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, pmo, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, pmoc, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, pmov, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, pmocv, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, pmf, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, pmfc, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, pmfv, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, pmfcv, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, arr_t, false);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, enum_t, true);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, pf, true);\r\n    T_UNSPEC(is_nothrow_copy_constructible, func, false);\r\n    T_UNSPEC_CV(is_nothrow_copy_constructible, void*, true);\r\n}\r\n\r\nstatic void t_is_nothrow_move_constructible() { // test is_nothrow_move_constructible<T> for various types\r\n                                                // (minimal tests in absence of compiler support)\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, void, false);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, char, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, signed char, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, unsigned char, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, wchar_t, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, short, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, unsigned short, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, int, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, unsigned int, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, long, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, unsigned long, true);\r\n\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, long long, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, unsigned long long, true);\r\n\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, float, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, double, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, long double, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, int*, true);\r\n    T_TRIVIAL(is_nothrow_move_constructible, int&, true);\r\n    T_TRIVIAL_C(is_nothrow_move_constructible, B, true);\r\n    T_TRIVIAL_C(is_nothrow_move_constructible, C, true);\r\n    T_TRIVIAL_C(is_nothrow_move_constructible, D, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, pmo, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, pmoc, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, pmov, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, pmocv, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, pmf, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, pmfc, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, pmfv, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, pmfcv, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, arr_t, false);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, enum_t, true);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, pf, true);\r\n    T_TRIVIAL(is_nothrow_move_constructible, func, false);\r\n    T_TRIVIAL_CV(is_nothrow_move_constructible, void*, true);\r\n}\r\n\r\nstatic void t_is_nothrow_assignable() { // test is_nothrow_assignable<T> for various types\r\n                                        // (minimal tests in absence of compiler support)\r\n    bool ans = STD is_nothrow_assignable<B, B>::value;\r\n    CHECK(ans);\r\n    ans = STD is_nothrow_assignable<int&, int>::value;\r\n    CHECK(ans);\r\n    ans = STD is_nothrow_assignable<int&, B>::value;\r\n    CHECK(!ans);\r\n    ans = STD is_nothrow_assignable<void, void>::value;\r\n    CHECK(!ans);\r\n}\r\n\r\nstatic void t_is_nothrow_copy_assignable() { // test is_nothrow_copy_assignable<T> for various types\r\n                                             // (minimal tests in absence of compiler support)\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, void, false);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, char, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, signed char, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, unsigned char, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, wchar_t, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, short, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, unsigned short, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, int, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, unsigned int, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, long, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, unsigned long, true);\r\n\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, long long, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, unsigned long long, true);\r\n\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, float, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, double, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, long double, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, int*, true);\r\n    T_TRIVIAL(is_nothrow_copy_assignable, int&, true);\r\n    T_TRIVIAL(is_nothrow_copy_assignable, B, true);\r\n    T_TRIVIAL(is_nothrow_copy_assignable, C, true);\r\n    T_TRIVIAL(is_nothrow_copy_assignable, D, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, pmo, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, pmoc, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, pmov, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, pmocv, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, pmf, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, pmfc, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, pmfv, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, pmfcv, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, arr_t, false);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, enum_t, true);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, pf, true);\r\n    T_TRIVIAL(is_nothrow_copy_assignable, func, false);\r\n    T_TRIVIAL_V(is_nothrow_copy_assignable, void*, true);\r\n}\r\n\r\nstatic void t_is_nothrow_move_assignable() { // test is_nothrow_move_assignable<T> for various types\r\n                                             // (minimal tests in absence of compiler support)\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, void, false);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, char, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, signed char, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, unsigned char, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, wchar_t, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, short, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, unsigned short, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, int, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, unsigned int, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, long, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, unsigned long, true);\r\n\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, long long, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, unsigned long long, true);\r\n\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, float, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, double, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, long double, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, int*, true);\r\n    T_TRIVIAL(is_nothrow_move_assignable, int&, true);\r\n    T_TRIVIAL(is_nothrow_move_assignable, B, true);\r\n    T_TRIVIAL(is_nothrow_move_assignable, C, true);\r\n    T_TRIVIAL(is_nothrow_move_assignable, D, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, pmo, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, pmoc, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, pmov, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, pmocv, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, pmf, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, pmfc, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, pmfv, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, pmfcv, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, arr_t, false);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, enum_t, true);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, pf, true);\r\n    T_TRIVIAL(is_nothrow_move_assignable, func, false);\r\n    T_TRIVIAL_V(is_nothrow_move_assignable, void*, true);\r\n}\r\n\r\nstatic void t_is_nothrow_destructible() { // test is_nothrow_destructible<T> for various types\r\n                                          // (minimal tests in absence of compiler support)\r\n    T_TRIVIAL_CV(is_nothrow_destructible, void, false);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, char, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, signed char, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, unsigned char, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, wchar_t, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, short, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, unsigned short, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, int, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, unsigned int, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, long, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, unsigned long, true);\r\n\r\n    T_TRIVIAL_CV(is_nothrow_destructible, long long, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, unsigned long long, true);\r\n\r\n    T_TRIVIAL_CV(is_nothrow_destructible, float, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, double, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, long double, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, int*, true);\r\n    T_TRIVIAL(is_nothrow_destructible, int&, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, B, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, C, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, D, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, pmo, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, pmoc, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, pmov, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, pmocv, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, pmf, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, pmfc, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, pmfv, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, pmfcv, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, arr_t, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, enum_t, true);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, pf, true);\r\n    T_TRIVIAL(is_nothrow_destructible, func, false);\r\n    T_TRIVIAL_CV(is_nothrow_destructible, void*, true);\r\n}\r\n\r\nstatic void t_has_virtual_destructor() { // test has_virtual_destructor<T>\r\n    T_TEST_CV(has_virtual_destructor, void, false);\r\n    T_TEST_CV(has_virtual_destructor, char, false);\r\n    T_TEST_CV(has_virtual_destructor, signed char, false);\r\n    T_TEST_CV(has_virtual_destructor, unsigned char, false);\r\n    T_TEST_CV(has_virtual_destructor, wchar_t, false);\r\n    T_TEST_CV(has_virtual_destructor, short, false);\r\n    T_TEST_CV(has_virtual_destructor, unsigned short, false);\r\n    T_TEST_CV(has_virtual_destructor, int, false);\r\n    T_TEST_CV(has_virtual_destructor, unsigned int, false);\r\n    T_TEST_CV(has_virtual_destructor, long, false);\r\n    T_TEST_CV(has_virtual_destructor, unsigned long, false);\r\n\r\n    T_TEST_CV(has_virtual_destructor, long long, false);\r\n    T_TEST_CV(has_virtual_destructor, unsigned long long, false);\r\n\r\n    T_TEST_CV(has_virtual_destructor, float, false);\r\n    T_TEST_CV(has_virtual_destructor, double, false);\r\n    T_TEST_CV(has_virtual_destructor, long double, false);\r\n    T_TEST_CV(has_virtual_destructor, int*, false);\r\n    T_TEST(has_virtual_destructor, int&, false);\r\n\r\n    T_TEST_CV(has_virtual_destructor, B, true);\r\n    T_TEST_CV(has_virtual_destructor, C, true);\r\n\r\n    T_TEST_CV(has_virtual_destructor, D, false);\r\n    T_TEST_CV(has_virtual_destructor, pmo, false);\r\n    T_TEST_CV(has_virtual_destructor, pmoc, false);\r\n    T_TEST_CV(has_virtual_destructor, pmov, false);\r\n    T_TEST_CV(has_virtual_destructor, pmocv, false);\r\n    T_TEST_CV(has_virtual_destructor, pmf, false);\r\n    T_TEST_CV(has_virtual_destructor, pmfc, false);\r\n    T_TEST_CV(has_virtual_destructor, pmfv, false);\r\n    T_TEST_CV(has_virtual_destructor, pmfcv, false);\r\n    T_TEST_CV(has_virtual_destructor, arr_t, false);\r\n    T_TEST_CV(has_virtual_destructor, enum_t, false);\r\n    T_TEST_CV(has_virtual_destructor, pf, false);\r\n    T_TEST(has_virtual_destructor, func, false);\r\n    T_TEST_CV(has_virtual_destructor, void*, false);\r\n}\r\n\r\nvoid test_main() { // test type traits\r\n    t_is_nothrow_constructible();\r\n    t_is_nothrow_default_constructible();\r\n    t_is_nothrow_copy_constructible();\r\n    t_is_nothrow_move_constructible();\r\n\r\n    t_is_nothrow_assignable();\r\n    t_is_nothrow_copy_assignable();\r\n    t_is_nothrow_move_assignable();\r\n\r\n    t_is_nothrow_destructible();\r\n\r\n    t_has_virtual_destructor();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/type_traits5/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <type_traits> header, part 5\r\n#define TEST_NAME \"<type_traits>, part 5\"\r\n\r\n#define _DISABLE_EXTENDED_ALIGNED_STORAGE 1\r\n#define _SILENCE_CXX23_ALIGNED_STORAGE_DEPRECATION_WARNING\r\n#define _SILENCE_CXX23_ALIGNED_UNION_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include \"typetr.h\"\r\n#include <limits.h>\r\n#include <limits>\r\n#include <type_traits>\r\n\r\n#define CHAR_ALIGN    1\r\n#define PTR_ALIGN     4\r\n#define INT_ALIGN     4\r\n#define LONG_ALIGN    4\r\n#define FLOAT_ALIGN   4\r\n#define DOUBLE_ALIGN  4\r\n#define LDOUBLE_ALIGN 4\r\n\r\n#define CHECK_TYPEX(...) static_assert(STD is_same_v<__VA_ARGS__>, \"!is_same_v<\" #__VA_ARGS__ \">\")\r\n\r\n// TESTS\r\nstatic void t_remove_const() { // test remove_const<T> for various types\r\n    CHECK_TYPEX(STD remove_const<I>::type, I);\r\n    CHECK_TYPEX(STD remove_const<CI>::type, I);\r\n    CHECK_TYPEX(STD remove_const<VI>::type, VI);\r\n    CHECK_TYPEX(STD remove_const<CVI>::type, VI);\r\n    CHECK_TYPEX(STD remove_const<IP>::type, IP);\r\n    CHECK_TYPEX(STD remove_const<ICP>::type, IP);\r\n    CHECK_TYPEX(STD remove_const<IVP>::type, IVP);\r\n    CHECK_TYPEX(STD remove_const<ICVP>::type, IVP);\r\n    CHECK_TYPEX(STD remove_const<CIP>::type, CIP);\r\n    CHECK_TYPEX(STD remove_const<CICP>::type, CIP);\r\n    CHECK_TYPEX(STD remove_const<CIVP>::type, CIVP);\r\n    CHECK_TYPEX(STD remove_const<CICVP>::type, CIVP);\r\n    CHECK_TYPEX(STD remove_const<VIP>::type, VIP);\r\n    CHECK_TYPEX(STD remove_const<VICP>::type, VIP);\r\n    CHECK_TYPEX(STD remove_const<VIVP>::type, VIVP);\r\n    CHECK_TYPEX(STD remove_const<VICVP>::type, VIVP);\r\n    CHECK_TYPEX(STD remove_const<CVIP>::type, CVIP);\r\n    CHECK_TYPEX(STD remove_const<CVICP>::type, CVIP);\r\n    CHECK_TYPEX(STD remove_const<CVIVP>::type, CVIVP);\r\n    CHECK_TYPEX(STD remove_const<CVICVP>::type, CVIVP);\r\n}\r\n\r\nstatic void t_remove_volatile() { // test remove_volatile<T> for various types\r\n    CHECK_TYPEX(STD remove_volatile<I>::type, I);\r\n    CHECK_TYPEX(STD remove_volatile<CI>::type, CI);\r\n    CHECK_TYPEX(STD remove_volatile<VI>::type, I);\r\n    CHECK_TYPEX(STD remove_volatile<CVI>::type, CI);\r\n    CHECK_TYPEX(STD remove_volatile<IP>::type, IP);\r\n    CHECK_TYPEX(STD remove_volatile<ICP>::type, ICP);\r\n    CHECK_TYPEX(STD remove_volatile<IVP>::type, IP);\r\n    CHECK_TYPEX(STD remove_volatile<ICVP>::type, ICP);\r\n    CHECK_TYPEX(STD remove_volatile<CIP>::type, CIP);\r\n    CHECK_TYPEX(STD remove_volatile<CICP>::type, CICP);\r\n    CHECK_TYPEX(STD remove_volatile<CIVP>::type, CIP);\r\n    CHECK_TYPEX(STD remove_volatile<CICVP>::type, CICP);\r\n    CHECK_TYPEX(STD remove_volatile<VIP>::type, VIP);\r\n    CHECK_TYPEX(STD remove_volatile<VICP>::type, VICP);\r\n    CHECK_TYPEX(STD remove_volatile<VIVP>::type, VIP);\r\n    CHECK_TYPEX(STD remove_volatile<VICVP>::type, VICP);\r\n    CHECK_TYPEX(STD remove_volatile<CVIP>::type, CVIP);\r\n    CHECK_TYPEX(STD remove_volatile<CVICP>::type, CVICP);\r\n    CHECK_TYPEX(STD remove_volatile<CVIVP>::type, CVIP);\r\n    CHECK_TYPEX(STD remove_volatile<CVICVP>::type, CVICP);\r\n}\r\n\r\nstatic void t_remove_cv() { // test remove_cv<T> for various types\r\n    CHECK_TYPEX(STD remove_cv<I>::type, I);\r\n    CHECK_TYPEX(STD remove_cv<CI>::type, I);\r\n    CHECK_TYPEX(STD remove_cv<VI>::type, I);\r\n    CHECK_TYPEX(STD remove_cv<CVI>::type, I);\r\n    CHECK_TYPEX(STD remove_cv<IP>::type, IP);\r\n    CHECK_TYPEX(STD remove_cv<ICP>::type, IP);\r\n    CHECK_TYPEX(STD remove_cv<IVP>::type, IP);\r\n    CHECK_TYPEX(STD remove_cv<ICVP>::type, IP);\r\n    CHECK_TYPEX(STD remove_cv<CIP>::type, CIP);\r\n    CHECK_TYPEX(STD remove_cv<CICP>::type, CIP);\r\n    CHECK_TYPEX(STD remove_cv<CIVP>::type, CIP);\r\n    CHECK_TYPEX(STD remove_cv<CICVP>::type, CIP);\r\n    CHECK_TYPEX(STD remove_cv<VIP>::type, VIP);\r\n    CHECK_TYPEX(STD remove_cv<VICP>::type, VIP);\r\n    CHECK_TYPEX(STD remove_cv<VIVP>::type, VIP);\r\n    CHECK_TYPEX(STD remove_cv<VICVP>::type, VIP);\r\n    CHECK_TYPEX(STD remove_cv<CVIP>::type, CVIP);\r\n    CHECK_TYPEX(STD remove_cv<CVICP>::type, CVIP);\r\n    CHECK_TYPEX(STD remove_cv<CVIVP>::type, CVIP);\r\n    CHECK_TYPEX(STD remove_cv<CVICVP>::type, CVIP);\r\n}\r\n\r\nstatic void t_add_const() { // test add_const<T> for various types\r\n    CHECK_TYPEX(STD add_const<I>::type, CI);\r\n    CHECK_TYPEX(STD add_const<CI>::type, CI);\r\n    CHECK_TYPEX(STD add_const<VI>::type, CVI);\r\n    CHECK_TYPEX(STD add_const<CVI>::type, CVI);\r\n    CHECK_TYPEX(STD add_const<IP>::type, ICP);\r\n    CHECK_TYPEX(STD add_const<ICP>::type, ICP);\r\n    CHECK_TYPEX(STD add_const<IVP>::type, ICVP);\r\n    CHECK_TYPEX(STD add_const<ICVP>::type, ICVP);\r\n    CHECK_TYPEX(STD add_const<CIP>::type, CICP);\r\n    CHECK_TYPEX(STD add_const<CICP>::type, CICP);\r\n    CHECK_TYPEX(STD add_const<CIVP>::type, CICVP);\r\n    CHECK_TYPEX(STD add_const<CICVP>::type, CICVP);\r\n    CHECK_TYPEX(STD add_const<VIP>::type, VICP);\r\n    CHECK_TYPEX(STD add_const<VICP>::type, VICP);\r\n    CHECK_TYPEX(STD add_const<VIVP>::type, VICVP);\r\n    CHECK_TYPEX(STD add_const<VICVP>::type, VICVP);\r\n    CHECK_TYPEX(STD add_const<CVIP>::type, CVICP);\r\n    CHECK_TYPEX(STD add_const<CVICP>::type, CVICP);\r\n    CHECK_TYPEX(STD add_const<CVIVP>::type, CVICVP);\r\n    CHECK_TYPEX(STD add_const<CVICVP>::type, CVICVP);\r\n}\r\n\r\nstatic void t_add_volatile() { // test add_volatile<T> for various types\r\n    CHECK_TYPEX(STD add_volatile<I>::type, VI);\r\n    CHECK_TYPEX(STD add_volatile<CI>::type, CVI);\r\n    CHECK_TYPEX(STD add_volatile<VI>::type, VI);\r\n    CHECK_TYPEX(STD add_volatile<CVI>::type, CVI);\r\n    CHECK_TYPEX(STD add_volatile<IP>::type, IVP);\r\n    CHECK_TYPEX(STD add_volatile<ICP>::type, ICVP);\r\n    CHECK_TYPEX(STD add_volatile<IVP>::type, IVP);\r\n    CHECK_TYPEX(STD add_volatile<ICVP>::type, ICVP);\r\n    CHECK_TYPEX(STD add_volatile<CIP>::type, CIVP);\r\n    CHECK_TYPEX(STD add_volatile<CICP>::type, CICVP);\r\n    CHECK_TYPEX(STD add_volatile<CIVP>::type, CIVP);\r\n    CHECK_TYPEX(STD add_volatile<CICVP>::type, CICVP);\r\n    CHECK_TYPEX(STD add_volatile<VIP>::type, VIVP);\r\n    CHECK_TYPEX(STD add_volatile<VICP>::type, VICVP);\r\n    CHECK_TYPEX(STD add_volatile<VIVP>::type, VIVP);\r\n    CHECK_TYPEX(STD add_volatile<VICVP>::type, VICVP);\r\n    CHECK_TYPEX(STD add_volatile<CVIP>::type, CVIVP);\r\n    CHECK_TYPEX(STD add_volatile<CVICP>::type, CVICVP);\r\n    CHECK_TYPEX(STD add_volatile<CVIVP>::type, CVIVP);\r\n    CHECK_TYPEX(STD add_volatile<CVICVP>::type, CVICVP);\r\n}\r\n\r\nstatic void t_add_cv() { // test add_cv<T> for various types\r\n    CHECK_TYPEX(STD add_cv<I>::type, CVI);\r\n    CHECK_TYPEX(STD add_cv<CI>::type, CVI);\r\n    CHECK_TYPEX(STD add_cv<VI>::type, CVI);\r\n    CHECK_TYPEX(STD add_cv<CVI>::type, CVI);\r\n    CHECK_TYPEX(STD add_cv<IP>::type, ICVP);\r\n    CHECK_TYPEX(STD add_cv<ICP>::type, ICVP);\r\n    CHECK_TYPEX(STD add_cv<IVP>::type, ICVP);\r\n    CHECK_TYPEX(STD add_cv<ICVP>::type, ICVP);\r\n    CHECK_TYPEX(STD add_cv<CIP>::type, CICVP);\r\n    CHECK_TYPEX(STD add_cv<CICP>::type, CICVP);\r\n    CHECK_TYPEX(STD add_cv<CIVP>::type, CICVP);\r\n    CHECK_TYPEX(STD add_cv<CICVP>::type, CICVP);\r\n    CHECK_TYPEX(STD add_cv<VIP>::type, VICVP);\r\n    CHECK_TYPEX(STD add_cv<VICP>::type, VICVP);\r\n    CHECK_TYPEX(STD add_cv<VIVP>::type, VICVP);\r\n    CHECK_TYPEX(STD add_cv<VICVP>::type, VICVP);\r\n    CHECK_TYPEX(STD add_cv<CVIP>::type, CVICVP);\r\n    CHECK_TYPEX(STD add_cv<CVICP>::type, CVICVP);\r\n    CHECK_TYPEX(STD add_cv<CVIVP>::type, CVICVP);\r\n    CHECK_TYPEX(STD add_cv<CVICVP>::type, CVICVP);\r\n}\r\n\r\nstatic void t_remove_reference() { // test remove_reference<T> for various types\r\n    CHECK_TYPEX(STD remove_reference<int>::type, int);\r\n    CHECK_TYPEX(STD remove_reference<int&>::type, int);\r\n}\r\n\r\nstatic void t_add_lvalue_reference() { // test add_lvalue_reference<T> for various types\r\n    CHECK_TYPEX(STD add_lvalue_reference<int>::type, int&);\r\n    CHECK_TYPEX(STD add_lvalue_reference<int&>::type, int&);\r\n    CHECK_TYPEX(STD add_lvalue_reference<ARR1>::type, ARR1&);\r\n}\r\n\r\nstatic void t_add_rvalue_reference() { // test add_rvalue_reference<T> for various types\r\n    CHECK_TYPEX(STD add_rvalue_reference<int>::type, int&&);\r\n    CHECK_TYPEX(STD add_rvalue_reference<int&>::type, int&);\r\n    CHECK_TYPEX(STD add_rvalue_reference<ARR1>::type, ARR1&&);\r\n}\r\n\r\nenum color : int { red, blue, green };\r\n\r\nstatic void t_make_signed() { // test make_signed<T> for various types\r\n    CHECK_TYPE(STD make_signed<signed char>::type, signed char);\r\n    CHECK_TYPE(STD make_signed<unsigned char>::type, signed char);\r\n    CHECK_TYPE(STD make_signed<signed short>::type, signed short);\r\n    CHECK_TYPE(STD make_signed<unsigned short>::type, signed short);\r\n    CHECK_TYPE(STD make_signed<signed int>::type, signed int);\r\n    CHECK_TYPE(STD make_signed<unsigned int>::type, signed int);\r\n    CHECK_TYPE(STD make_signed<signed long>::type, signed long);\r\n    CHECK_TYPE(STD make_signed<unsigned long>::type, signed long);\r\n    CHECK_TYPE(STD make_signed<long long>::type, long long);\r\n    CHECK_TYPE(STD make_signed<unsigned long long>::type, long long);\r\n\r\n    color neg = (color) (-3);\r\n    CHECK_INT((STD make_signed<color>::type)(neg), neg);\r\n}\r\n\r\nstatic void t_make_unsigned() { // test make_unsigned<T> for various types\r\n    CHECK_TYPE(STD make_unsigned<signed char>::type, unsigned char);\r\n    CHECK_TYPE(STD make_unsigned<unsigned char>::type, unsigned char);\r\n    CHECK_TYPE(STD make_unsigned<signed short>::type, unsigned short);\r\n    CHECK_TYPE(STD make_unsigned<unsigned short>::type, unsigned short);\r\n    CHECK_TYPE(STD make_unsigned<signed int>::type, unsigned int);\r\n    CHECK_TYPE(STD make_unsigned<unsigned int>::type, unsigned int);\r\n    CHECK_TYPE(STD make_unsigned<signed long>::type, unsigned long);\r\n    CHECK_TYPE(STD make_unsigned<unsigned long>::type, unsigned long);\r\n    CHECK_TYPE(STD make_unsigned<long long>::type, unsigned long long);\r\n    CHECK_TYPE(STD make_unsigned<unsigned long long>::type, unsigned long long);\r\n\r\n    color neg = (color) (-3);\r\n    CHECK_INT((STD make_unsigned<color>::type)(neg), (unsigned int) (neg));\r\n}\r\n\r\nstatic void t_is_signed() { // test is_signed<T> for various types\r\n    T_TEST_CV(is_signed, void, false);\r\n    T_TEST_CV(is_signed, char, STD numeric_limits<char>::is_signed);\r\n    T_TEST_CV(is_signed, signed char, true);\r\n    T_TEST_CV(is_signed, unsigned char, false);\r\n    T_TEST_CV(is_signed, wchar_t, STD numeric_limits<wchar_t>::is_signed);\r\n    T_TEST_CV(is_signed, short, true);\r\n    T_TEST_CV(is_signed, unsigned short, false);\r\n    T_TEST_CV(is_signed, int, true);\r\n    T_TEST_CV(is_signed, unsigned int, false);\r\n    T_TEST_CV(is_signed, long, true);\r\n    T_TEST_CV(is_signed, unsigned long, false);\r\n\r\n    T_TEST_CV(is_signed, long long, true);\r\n    T_TEST_CV(is_signed, unsigned long long, false);\r\n\r\n    T_TEST_CV(is_signed, float, true);\r\n    T_TEST_CV(is_signed, double, true);\r\n    T_TEST_CV(is_signed, long double, true);\r\n\r\n    T_TEST_CV(is_signed, int*, false);\r\n    T_TEST(is_signed, int&, false);\r\n    T_TEST_CV(is_signed, A, false);\r\n    T_TEST_CV(is_signed, B, false);\r\n    T_TEST_CV(is_signed, C, false);\r\n    T_TEST_CV(is_signed, D, false);\r\n    T_TEST_CV(is_signed, pmo, false);\r\n    T_TEST_CV(is_signed, pmoc, false);\r\n    T_TEST_CV(is_signed, pmov, false);\r\n    T_TEST_CV(is_signed, pmocv, false);\r\n    T_TEST_CV(is_signed, pmf, false);\r\n    T_TEST_CV(is_signed, pmfc, false);\r\n    T_TEST_CV(is_signed, pmfv, false);\r\n    T_TEST_CV(is_signed, pmfcv, false);\r\n    T_TEST_CV(is_signed, arr_t, false);\r\n    T_TEST_CV(is_signed, enum_t, false);\r\n    T_TEST_CV(is_signed, pf, false);\r\n    T_TEST(is_signed, func, false);\r\n    T_TEST_CV(is_signed, void*, false);\r\n}\r\n\r\nstatic void t_is_unsigned() { // test is_unsigned<T> for various types\r\n    T_TEST_CV(is_unsigned, void, false);\r\n    T_TEST_CV(is_unsigned, char, !STD numeric_limits<char>::is_signed);\r\n    T_TEST_CV(is_unsigned, signed char, false);\r\n    T_TEST_CV(is_unsigned, unsigned char, true);\r\n    T_TEST_CV(is_unsigned, wchar_t, !STD numeric_limits<wchar_t>::is_signed);\r\n    T_TEST_CV(is_unsigned, short, false);\r\n    T_TEST_CV(is_unsigned, unsigned short, true);\r\n    T_TEST_CV(is_unsigned, int, false);\r\n    T_TEST_CV(is_unsigned, unsigned int, true);\r\n    T_TEST_CV(is_unsigned, long, false);\r\n    T_TEST_CV(is_unsigned, unsigned long, true);\r\n\r\n    T_TEST_CV(is_unsigned, long long, false);\r\n    T_TEST_CV(is_unsigned, unsigned long long, true);\r\n\r\n    T_TEST_CV(is_unsigned, float, false);\r\n    T_TEST_CV(is_unsigned, double, false);\r\n    T_TEST_CV(is_unsigned, long double, false);\r\n    T_TEST_CV(is_unsigned, int*, false);\r\n    T_TEST(is_unsigned, int&, false);\r\n    T_TEST_CV(is_unsigned, A, false);\r\n    T_TEST_CV(is_unsigned, B, false);\r\n    T_TEST_CV(is_unsigned, C, false);\r\n    T_TEST_CV(is_unsigned, D, false);\r\n    T_TEST_CV(is_unsigned, pmo, false);\r\n    T_TEST_CV(is_signed, pmoc, false);\r\n    T_TEST_CV(is_signed, pmov, false);\r\n    T_TEST_CV(is_signed, pmocv, false);\r\n    T_TEST_CV(is_signed, pmf, false);\r\n    T_TEST_CV(is_signed, pmfc, false);\r\n    T_TEST_CV(is_signed, pmfv, false);\r\n    T_TEST_CV(is_signed, pmfcv, false);\r\n    T_TEST_CV(is_signed, arr_t, false);\r\n    T_TEST_CV(is_signed, enum_t, false);\r\n    T_TEST_CV(is_signed, pf, false);\r\n    T_TEST(is_unsigned, func, false);\r\n    T_TEST_CV(is_unsigned, void*, false);\r\n}\r\n\r\nstatic void t_alignment_of() { // test alignment_of<T> for various types\r\n    CHECK_INT(CHAR_ALIGN, STD alignment_of<char>::value);\r\n    CHECK_INT(INT_ALIGN, STD alignment_of<int>::value);\r\n    CHECK(PTR_ALIGN <= STD alignment_of<char*>::value);\r\n    CHECK(LONG_ALIGN <= STD alignment_of<long>::value);\r\n    CHECK(FLOAT_ALIGN <= STD alignment_of<float>::value);\r\n    CHECK(DOUBLE_ALIGN <= STD alignment_of<double>::value);\r\n    CHECK(LDOUBLE_ALIGN <= STD alignment_of<long double>::value);\r\n}\r\n\r\nstatic void t_rank() { // test rank<T> for various types\r\n    CHECK_INT(STD rank<ARR0>::value, 0);\r\n    CHECK_INT(STD rank<ARR1>::value, 1);\r\n    CHECK_INT(STD rank<ARR2>::value, 2);\r\n    CHECK_INT(STD rank<ARR3>::value, 3);\r\n    CHECK_INT(STD rank<ARR4>::value, 4);\r\n    CHECK_INT(STD rank<ARR5>::value, 5);\r\n    CHECK_INT(STD rank<ARRN>::value, 6);\r\n}\r\n\r\nstatic void t_extent() { // test extent<T> for various types\r\n    CHECK_INT(STD extent<ARR0>::value, 0);\r\n    CHECK_INT(STD extent<ARR1>::value, 2);\r\n    CHECK_INT(STD extent<ARR2>::value, 3);\r\n    CHECK_INT(STD extent<ARR3>::value, 4);\r\n    CHECK_INT(STD extent<ARR4>::value, 5);\r\n    CHECK_INT(STD extent<ARR5>::value, 6);\r\n    CHECK_INT(STD extent<ARRN>::value, 0);\r\n\r\n    CHECK_INT((STD extent<ARR0, 0>::value), 0);\r\n    CHECK_INT((STD extent<ARR1, 0>::value), 2);\r\n    CHECK_INT((STD extent<ARR2, 0>::value), 3);\r\n    CHECK_INT((STD extent<ARR3, 0>::value), 4);\r\n    CHECK_INT((STD extent<ARR4, 0>::value), 5);\r\n    CHECK_INT((STD extent<ARR5, 0>::value), 6);\r\n    CHECK_INT((STD extent<ARRN, 0>::value), 0);\r\n\r\n    CHECK_INT((STD extent<ARR0, 1>::value), 0);\r\n    CHECK_INT((STD extent<ARR1, 1>::value), 0);\r\n    CHECK_INT((STD extent<ARR2, 1>::value), 2);\r\n    CHECK_INT((STD extent<ARR3, 1>::value), 3);\r\n    CHECK_INT((STD extent<ARR4, 1>::value), 4);\r\n    CHECK_INT((STD extent<ARR5, 1>::value), 5);\r\n    CHECK_INT((STD extent<ARRN, 1>::value), 6);\r\n\r\n    CHECK_INT((STD extent<ARR0, 2>::value), 0);\r\n    CHECK_INT((STD extent<ARR1, 2>::value), 0);\r\n    CHECK_INT((STD extent<ARR2, 2>::value), 0);\r\n    CHECK_INT((STD extent<ARR3, 2>::value), 2);\r\n    CHECK_INT((STD extent<ARR4, 2>::value), 3);\r\n    CHECK_INT((STD extent<ARR5, 2>::value), 4);\r\n    CHECK_INT((STD extent<ARRN, 2>::value), 5);\r\n\r\n    CHECK_INT((STD extent<ARR0, 3>::value), 0);\r\n    CHECK_INT((STD extent<ARR1, 3>::value), 0);\r\n    CHECK_INT((STD extent<ARR2, 3>::value), 0);\r\n    CHECK_INT((STD extent<ARR3, 3>::value), 0);\r\n    CHECK_INT((STD extent<ARR4, 3>::value), 2);\r\n    CHECK_INT((STD extent<ARR5, 3>::value), 3);\r\n    CHECK_INT((STD extent<ARRN, 3>::value), 4);\r\n\r\n    CHECK_INT((STD extent<ARR0, 4>::value), 0);\r\n    CHECK_INT((STD extent<ARR1, 4>::value), 0);\r\n    CHECK_INT((STD extent<ARR2, 4>::value), 0);\r\n    CHECK_INT((STD extent<ARR3, 4>::value), 0);\r\n    CHECK_INT((STD extent<ARR4, 4>::value), 0);\r\n    CHECK_INT((STD extent<ARR5, 4>::value), 2);\r\n    CHECK_INT((STD extent<ARRN, 4>::value), 3);\r\n\r\n    CHECK_INT((STD extent<ARR0, 5>::value), 0);\r\n    CHECK_INT((STD extent<ARR1, 5>::value), 0);\r\n    CHECK_INT((STD extent<ARR2, 5>::value), 0);\r\n    CHECK_INT((STD extent<ARR3, 5>::value), 0);\r\n    CHECK_INT((STD extent<ARR4, 5>::value), 0);\r\n    CHECK_INT((STD extent<ARR5, 5>::value), 0);\r\n    CHECK_INT((STD extent<ARRN, 5>::value), 2);\r\n}\r\n\r\nstatic void t_remove_extent() { // test remove_extent<T> for various types\r\n    CHECK_TYPE(STD remove_extent<ARR0>::type, ARR0);\r\n    CHECK_TYPE(STD remove_extent<ARR1>::type, ARR0);\r\n    CHECK_TYPE(STD remove_extent<ARR2>::type, ARR1);\r\n    CHECK_TYPE(STD remove_extent<ARR3>::type, ARR2);\r\n    CHECK_TYPE(STD remove_extent<ARR4>::type, ARR3);\r\n    CHECK_TYPE(STD remove_extent<ARR5>::type, ARR4);\r\n    CHECK_TYPE(STD remove_extent<ARRN>::type, ARR5);\r\n}\r\n\r\nstatic void t_remove_all_extents() { // test remove_all_extents<T> for various types\r\n    CHECK_TYPE(STD remove_all_extents<ARR0>::type, ARR0);\r\n    CHECK_TYPE(STD remove_all_extents<ARR1>::type, ARR0);\r\n    CHECK_TYPE(STD remove_all_extents<ARR2>::type, ARR0);\r\n    CHECK_TYPE(STD remove_all_extents<ARR3>::type, ARR0);\r\n    CHECK_TYPE(STD remove_all_extents<ARR4>::type, ARR0);\r\n    CHECK_TYPE(STD remove_all_extents<ARR5>::type, ARR0);\r\n    CHECK_TYPE(STD remove_all_extents<ARRN>::type, ARR0);\r\n}\r\n\r\nstatic void t_remove_pointer() { // test remove_pointer<T> for various types\r\n    CHECK_TYPEX(STD remove_pointer<int>::type, int);\r\n    CHECK_TYPEX(STD remove_pointer<int*>::type, int);\r\n    CHECK_TYPEX(STD remove_pointer<int**>::type, int*);\r\n}\r\n\r\nstatic void t_add_pointer() { // test add_pointer<T> for various types\r\n    CHECK_TYPEX(STD add_pointer<int>::type, int*);\r\n    CHECK_TYPEX(STD add_pointer<int*>::type, int**);\r\n}\r\n\r\n#define CHECK_STORAGE(len, align)                                                \\\r\n    {                                                                            \\\r\n        typedef STD alignment_of<STD aligned_storage<len, align>::type> ty;      \\\r\n        CHECK_INT(align <= ty::value, true);                                     \\\r\n        CHECK_INT((len <= sizeof(STD aligned_storage<len, align>::type)), true); \\\r\n    }\r\n\r\n#define ALIGN1 (STD alignment_of<char>::value)\r\n#define ALIGN2 (STD alignment_of<short>::value)\r\n#define ALIGN3 (STD alignment_of<int>::value)\r\n#define ALIGN4 (STD alignment_of<double>::value)\r\n\r\nstatic void t_aligned_storage() { // test aligned_storage<Len, Align> for various types\r\n    CHECK_STORAGE(1, ALIGN1);\r\n    CHECK_STORAGE(1, ALIGN2);\r\n    CHECK_STORAGE(1, ALIGN3);\r\n    CHECK_STORAGE(1, ALIGN4);\r\n    CHECK_STORAGE(2, ALIGN1);\r\n    CHECK_STORAGE(2, ALIGN2);\r\n    CHECK_STORAGE(2, ALIGN3);\r\n    CHECK_STORAGE(2, ALIGN4);\r\n    CHECK_STORAGE(4, ALIGN1);\r\n    CHECK_STORAGE(4, ALIGN2);\r\n    CHECK_STORAGE(4, ALIGN3);\r\n    CHECK_STORAGE(4, ALIGN4);\r\n    CHECK_STORAGE(100, ALIGN1);\r\n    CHECK_STORAGE(100, ALIGN2);\r\n    CHECK_STORAGE(100, ALIGN3);\r\n    CHECK_STORAGE(100, ALIGN4);\r\n\r\n    // test old non-conformant behavior for extended alignments\r\n    {\r\n        constexpr size_t x = alignof(max_align_t) << 1;\r\n        static_assert(alignof(STD aligned_storage<x, x>::type) == alignof(max_align_t), \"\");\r\n    }\r\n    {\r\n        constexpr size_t x = alignof(max_align_t) << 2;\r\n        static_assert(alignof(STD aligned_storage<x, x>::type) == alignof(max_align_t), \"\");\r\n    }\r\n    {\r\n        constexpr size_t x = alignof(max_align_t) << 3;\r\n        static_assert(alignof(STD aligned_storage<x, x>::type) == alignof(max_align_t), \"\");\r\n    }\r\n    {\r\n        constexpr size_t x = alignof(max_align_t) << 5;\r\n        static_assert(alignof(STD aligned_storage<x, x>::type) == alignof(max_align_t), \"\");\r\n    }\r\n}\r\n\r\n#define CHECK_UNION(len, align, ty1, ty2)                                         \\\r\n    {                                                                             \\\r\n        typedef STD alignment_of<STD aligned_union<len, ty1, ty2>::type> ty;      \\\r\n        CHECK_INT(align, ty::value);                                              \\\r\n        CHECK_INT((len <= sizeof(STD aligned_union<len, ty1, ty2>::type)), true); \\\r\n    }\r\n\r\nstatic void t_aligned_union() { // test aligned_storage<Len, Align> for various types\r\n    CHECK_UNION(1, ALIGN1, char, char);\r\n    CHECK_UNION(1, ALIGN2, char, short);\r\n    CHECK_UNION(1, ALIGN2, short, char);\r\n    CHECK_UNION(100, ALIGN4, int, double);\r\n\r\n    typedef STD aligned_union<1, char>::type au_c;\r\n    typedef STD alignment_of<au_c> ty_c;\r\n    CHECK_INT(ALIGN1, ty_c::value);\r\n    CHECK_INT((1 <= sizeof(au_c)), true);\r\n\r\n    typedef STD aligned_union<1, char, short>::type au_cs;\r\n    typedef STD alignment_of<au_cs> ty_cs;\r\n    CHECK_INT(ALIGN2, ty_cs::value);\r\n    CHECK_INT((2 <= sizeof(au_cs)), true);\r\n\r\n    typedef STD aligned_union<1, char, short, int>::type au_csi;\r\n    typedef STD alignment_of<au_csi> ty_csi;\r\n    CHECK_INT(ALIGN3, ty_csi::value);\r\n    CHECK_INT((4 <= sizeof(au_csi)), true);\r\n\r\n    typedef STD aligned_union<1, char, short, int, short>::type au_csis;\r\n    typedef STD alignment_of<au_csis> ty_csis;\r\n    CHECK_INT(ALIGN3, ty_csis::value);\r\n    CHECK_INT((4 <= sizeof(au_csis)), true);\r\n\r\n    typedef STD aligned_union<1, char, short, int, short, char>::type au_csisc;\r\n    typedef STD alignment_of<au_csisc> ty_csisc;\r\n    CHECK_INT(ALIGN3, ty_csisc::value);\r\n    CHECK_INT((4 <= sizeof(au_csisc)), true);\r\n}\r\n\r\nvoid t_utility() { // test utility template classes\r\n    char* pc  = (STD enable_if<true, char>::type*) nullptr;\r\n    short* ps = (STD conditional<true, short, int>::type*) nullptr;\r\n    int* pi   = (STD conditional<false, short, int>::type*) nullptr;\r\n\r\n    pc = pc; // to quiet diagnostics\r\n    ps = ps;\r\n    pi = pi;\r\n\r\n    CHECK_TYPE(STD decay<char>::type, char);\r\n    CHECK_TYPE(STD decay<short[4]>::type, short*);\r\n\r\n    typedef void fn(int);\r\n    CHECK_TYPE(STD decay<fn>::type, fn*);\r\n\r\n    typedef STD common_type<int>::type ci;\r\n    CHECK_TYPE(ci, int);\r\n    typedef STD common_type<int, int>::type cii;\r\n    CHECK_TYPE(cii, int);\r\n    typedef STD common_type<short, int>::type csi;\r\n    CHECK_TYPE(csi, int);\r\n    typedef STD common_type<short, float>::type csf;\r\n    CHECK_TYPE(csf, float);\r\n    typedef STD common_type<short, float, double>::type csfd;\r\n    CHECK_TYPE(csfd, double);\r\n    typedef STD common_type<short, float, int, short>::type csfis;\r\n    CHECK_TYPE(csfis, float);\r\n    typedef STD common_type<short, float, int, short, int>::type csfisi;\r\n    CHECK_TYPE(csfisi, float);\r\n}\r\n\r\ntypedef enum { a, b, c = INT_MAX } enum1;\r\n\r\nstatic void t_underlying_type() { // test add_lvalue_reference<T> for various types\r\n    CHECK_TYPE(STD underlying_type<enum1>::type, int);\r\n}\r\n\r\nvoid test_main() { // test type traits\r\n    t_remove_const();\r\n    t_remove_volatile();\r\n    t_remove_cv();\r\n    t_add_const();\r\n    t_add_volatile();\r\n    t_add_cv();\r\n    t_remove_reference();\r\n\r\n    t_add_lvalue_reference();\r\n    t_add_rvalue_reference();\r\n    t_make_signed();\r\n    t_make_unsigned();\r\n\r\n    t_is_signed();\r\n    t_is_unsigned();\r\n    t_alignment_of();\r\n    t_rank();\r\n    t_extent();\r\n    t_remove_extent();\r\n    t_remove_all_extents();\r\n    t_remove_pointer();\r\n    t_add_pointer();\r\n    t_aligned_storage();\r\n\r\n    t_aligned_union();\r\n    t_utility();\r\n    t_underlying_type();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/type_traits6/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <type_traits> header, part 6\r\n#define TEST_NAME \"<type_traits>, part 6\"\r\n\r\n#define _HAS_DEPRECATED_RESULT_OF 1\r\n#define _SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include \"tfuns.h\"\r\n#include <type_traits>\r\n\r\nstruct no_result_type { // struct without nested 'result_type' but\r\n                        // with nested template 'result'\r\n    int operator()() const;\r\n    int operator()(int) const;\r\n    template <class T1>\r\n    struct result { // simple result template\r\n        typedef int type;\r\n    };\r\n};\r\n\r\nstruct overloaded { // struct with operator() overloaded on argument types\r\n    int operator()(int);\r\n    double operator()(double);\r\n    float operator()(int, float);\r\n    long double operator()(long double, int);\r\n};\r\n\r\nvoid test_main() { // test header <functional>\r\n    // pointer to function\r\n    CHECK_TYPE(STD result_of<tf0()>::type, int);\r\n    CHECK_TYPE(STD result_of<tf1(funobj)>::type, int);\r\n    CHECK_TYPE(STD result_of<tf2(funobj, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<tf3(funobj, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<tf4(funobj, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<tf5(funobj, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<tf6(funobj, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<tf7(funobj, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<tf8(funobj, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<tf9(funobj, int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<tf10(funobj, int, int, int, int, int, int, int, int, int)>::type, int);\r\n\r\n    // pointer to member function applied to object\r\n    CHECK_TYPE(STD result_of<mf1(funobj)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf2(funobj, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf3(funobj, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf4(funobj, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf5(funobj, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf6(funobj, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf7(funobj, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf8(funobj, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf9(funobj, int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf10(funobj, int, int, int, int, int, int, int, int, int)>::type, int);\r\n\r\n    CHECK_TYPE(STD result_of<cmf1(funobj)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf2(funobj, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf3(funobj, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf4(funobj, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf5(funobj, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf6(funobj, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf7(funobj, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf8(funobj, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf9(funobj, int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf10(funobj, int, int, int, int, int, int, int, int, int)>::type, int);\r\n\r\n    CHECK_TYPE(STD result_of<vmf1(funobj)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf2(funobj, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf3(funobj, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf4(funobj, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf5(funobj, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf6(funobj, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf7(funobj, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf8(funobj, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf9(funobj, int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf10(funobj, int, int, int, int, int, int, int, int, int)>::type, int);\r\n\r\n    CHECK_TYPE(STD result_of<cvmf1(funobj)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf2(funobj, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf3(funobj, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf4(funobj, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf5(funobj, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf6(funobj, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf7(funobj, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf8(funobj, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf9(funobj, int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf10(funobj, int, int, int, int, int, int, int, int, int)>::type, int);\r\n\r\n    // pointer to member function applied to object pointer\r\n    CHECK_TYPE(STD result_of<mf1(funobj*)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf2(funobj*, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf3(funobj*, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf4(funobj*, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf5(funobj*, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf6(funobj*, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf7(funobj*, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf8(funobj*, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf9(funobj*, int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<mf10(funobj*, int, int, int, int, int, int, int, int, int)>::type, int);\r\n\r\n    CHECK_TYPE(STD result_of<cmf1(funobj*)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf2(funobj*, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf3(funobj*, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf4(funobj*, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf5(funobj*, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf6(funobj*, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf7(funobj*, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf8(funobj*, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf9(funobj*, int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cmf10(funobj*, int, int, int, int, int, int, int, int, int)>::type, int);\r\n\r\n    CHECK_TYPE(STD result_of<vmf1(funobj*)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf2(funobj*, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf3(funobj*, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf4(funobj*, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf5(funobj*, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf6(funobj*, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf7(funobj*, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf8(funobj*, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf9(funobj*, int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<vmf10(funobj*, int, int, int, int, int, int, int, int, int)>::type, int);\r\n\r\n    CHECK_TYPE(STD result_of<cvmf1(funobj*)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf2(funobj*, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf3(funobj*, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf4(funobj*, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf5(funobj*, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf6(funobj*, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf7(funobj*, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf8(funobj*, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf9(funobj*, int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<cvmf10(funobj*, int, int, int, int, int, int, int, int, int)>::type, int);\r\n\r\n    // pointer to member data\r\n    CHECK_TYPE(STD result_of<md0(funobj)>::type, int);\r\n    CHECK_TYPE(STD result_of<md0(funobj*)>::type, int);\r\n    CHECK_TYPE(STD result_of<md0(const funobj*)>::type, int);\r\n    CHECK_TYPE(STD result_of<md0(volatile funobj*)>::type, int);\r\n    CHECK_TYPE(STD result_of<md0(const volatile funobj*)>::type, int);\r\n\r\n    // callable type\r\n    CHECK_TYPE(STD result_of<funobj()>::type, int);\r\n    CHECK_TYPE(STD result_of<funobj(int)>::type, int);\r\n    CHECK_TYPE(STD result_of<funobj(int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<funobj(int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<funobj(int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<funobj(int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<funobj(int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<funobj(int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<funobj(int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<funobj(int, int, int, int, int, int, int, int, int)>::type, int);\r\n    CHECK_TYPE(STD result_of<funobj(int, int, int, int, int, int, int, int, int, int)>::type, int);\r\n\r\n    CHECK_TYPE(STD result_of<overloaded(int)>::type, int);\r\n    CHECK_TYPE(STD result_of<overloaded(double)>::type, double);\r\n    CHECK_TYPE(STD result_of<overloaded(long double, int)>::type, long double);\r\n    CHECK_TYPE(STD result_of<overloaded(int, float)>::type, float);\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/type_traits7/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <type_traits> header, part 7\r\n#define TEST_NAME \"<type_traits>, part 7\"\r\n\r\n#define _HAS_DEPRECATED_IS_LITERAL_TYPE 1\r\n#define _SILENCE_CXX17_IS_LITERAL_TYPE_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include \"typetr.h\"\r\n#include <type_traits>\r\n\r\n// TESTS\r\nstatic void t_is_constructible() { // test is_constructible<T, Args...> for various types\r\n    T_UNSPEC_CV(is_constructible, void, false);\r\n    T_UNSPEC_CV(is_constructible, char, true);\r\n    T_UNSPEC_CV(is_constructible, signed char, true);\r\n    T_UNSPEC_CV(is_constructible, unsigned char, true);\r\n    T_UNSPEC_CV(is_constructible, wchar_t, true);\r\n    T_UNSPEC_CV(is_constructible, short, true);\r\n    T_UNSPEC_CV(is_constructible, unsigned short, true);\r\n    T_UNSPEC_CV(is_constructible, int, true);\r\n    T_UNSPEC_CV(is_constructible, unsigned int, true);\r\n    T_UNSPEC_CV(is_constructible, long, true);\r\n    T_UNSPEC_CV(is_constructible, unsigned long, true);\r\n\r\n    T_UNSPEC_CV(is_constructible, long long, true);\r\n    T_UNSPEC_CV(is_constructible, unsigned long long, true);\r\n\r\n    T_UNSPEC_CV(is_constructible, float, true);\r\n    T_UNSPEC_CV(is_constructible, double, true);\r\n    T_UNSPEC_CV(is_constructible, long double, true);\r\n    T_UNSPEC_CV(is_constructible, int*, true);\r\n    T_UNSPEC(is_constructible, int&, false);\r\n    T_UNSPEC_CV(is_constructible, B, true);\r\n    T_UNSPEC_CV(is_constructible, C, true);\r\n    T_UNSPEC_CV(is_constructible, D, true);\r\n    T_UNSPEC_CV(is_constructible, pmo, true);\r\n    T_UNSPEC_CV(is_constructible, pmoc, true);\r\n    T_UNSPEC_CV(is_constructible, pmov, true);\r\n    T_UNSPEC_CV(is_constructible, pmocv, true);\r\n    T_UNSPEC_CV(is_constructible, pmf, true);\r\n    T_UNSPEC_CV(is_constructible, pmfc, true);\r\n    T_UNSPEC_CV(is_constructible, pmfv, true);\r\n    T_UNSPEC_CV(is_constructible, pmfcv, true);\r\n    T_UNSPEC_CV(is_constructible, arr_t, true);\r\n    T_UNSPEC_CV(is_constructible, enum_t, true);\r\n    T_UNSPEC_CV(is_constructible, pf, true);\r\n    T_UNSPEC(is_constructible, func, false);\r\n    T_UNSPEC_CV(is_constructible, void*, true);\r\n\r\n    bool ans = STD is_constructible<int>::value;\r\n    CHECK(ans);\r\n    ans = STD is_constructible<int, int>::value;\r\n    CHECK(ans);\r\n    ans = STD is_constructible<int, int, int>::value;\r\n    CHECK(!ans);\r\n    ans = STD is_constructible<int, int, int, int>::value;\r\n    CHECK(!ans);\r\n    ans = STD is_constructible<int, int, int, int, int>::value;\r\n    CHECK(!ans);\r\n}\r\n\r\nstatic void t_is_default_constructible() { // test is_default_constructible<T> for various types\r\n                                           // (minimal tests in absence of compiler support)\r\n    T_TRIVIAL_CV(is_default_constructible, void, false);\r\n    T_TRIVIAL_CV(is_default_constructible, char, true);\r\n    T_TRIVIAL_CV(is_default_constructible, signed char, true);\r\n    T_TRIVIAL_CV(is_default_constructible, unsigned char, true);\r\n    T_TRIVIAL_CV(is_default_constructible, wchar_t, true);\r\n    T_TRIVIAL_CV(is_default_constructible, short, true);\r\n    T_TRIVIAL_CV(is_default_constructible, unsigned short, true);\r\n    T_TRIVIAL_CV(is_default_constructible, int, true);\r\n    T_TRIVIAL_CV(is_default_constructible, unsigned int, true);\r\n    T_TRIVIAL_CV(is_default_constructible, long, true);\r\n    T_TRIVIAL_CV(is_default_constructible, unsigned long, true);\r\n\r\n    T_TRIVIAL_CV(is_default_constructible, long long, true);\r\n    T_TRIVIAL_CV(is_default_constructible, unsigned long long, true);\r\n\r\n    T_TRIVIAL_CV(is_default_constructible, float, true);\r\n    T_TRIVIAL_CV(is_default_constructible, double, true);\r\n    T_TRIVIAL_CV(is_default_constructible, long double, true);\r\n    T_TRIVIAL_CV(is_default_constructible, int*, true);\r\n    T_TRIVIAL(is_default_constructible, int&, false);\r\n    T_TRIVIAL_CV(is_default_constructible, B, true);\r\n    T_TRIVIAL_CV(is_default_constructible, C, true);\r\n    T_TRIVIAL_CV(is_default_constructible, D, true);\r\n    T_TRIVIAL_CV(is_default_constructible, pmo, true);\r\n    T_TRIVIAL_CV(is_default_constructible, pmoc, true);\r\n    T_TRIVIAL_CV(is_default_constructible, pmov, true);\r\n    T_TRIVIAL_CV(is_default_constructible, pmocv, true);\r\n    T_TRIVIAL_CV(is_default_constructible, pmf, true);\r\n    T_TRIVIAL_CV(is_default_constructible, pmfc, true);\r\n    T_TRIVIAL_CV(is_default_constructible, pmfv, true);\r\n    T_TRIVIAL_CV(is_default_constructible, pmfcv, true);\r\n    T_TRIVIAL_CV(is_default_constructible, arr_t, true);\r\n    T_TRIVIAL_CV(is_default_constructible, enum_t, true);\r\n    T_TRIVIAL_CV(is_default_constructible, pf, true);\r\n    T_TRIVIAL(is_default_constructible, func, false);\r\n    T_TRIVIAL_CV(is_default_constructible, void*, true);\r\n}\r\n\r\nstatic void t_is_copy_constructible() { // test is_copy_constructible<T> for various types\r\n    T_UNSPEC_CV(is_copy_constructible, void, false);\r\n    T_UNSPEC_CV(is_copy_constructible, char, true);\r\n    T_UNSPEC_CV(is_copy_constructible, signed char, true);\r\n    T_UNSPEC_CV(is_copy_constructible, unsigned char, true);\r\n    T_UNSPEC_CV(is_copy_constructible, wchar_t, true);\r\n    T_UNSPEC_CV(is_copy_constructible, short, true);\r\n    T_UNSPEC_CV(is_copy_constructible, unsigned short, true);\r\n    T_UNSPEC_CV(is_copy_constructible, int, true);\r\n    T_UNSPEC_CV(is_copy_constructible, unsigned int, true);\r\n    T_UNSPEC_CV(is_copy_constructible, long, true);\r\n    T_UNSPEC_CV(is_copy_constructible, unsigned long, true);\r\n\r\n    T_UNSPEC_CV(is_copy_constructible, long long, true);\r\n    T_UNSPEC_CV(is_copy_constructible, unsigned long long, true);\r\n\r\n    T_UNSPEC_CV(is_copy_constructible, float, true);\r\n    T_UNSPEC_CV(is_copy_constructible, double, true);\r\n    T_UNSPEC_CV(is_copy_constructible, long double, true);\r\n    T_UNSPEC_CV(is_copy_constructible, int*, true);\r\n    T_UNSPEC(is_copy_constructible, int&, true);\r\n    T_UNSPEC_C(is_copy_constructible, B, true);\r\n    T_UNSPEC_C(is_copy_constructible, C, true);\r\n    T_UNSPEC_C(is_copy_constructible, D, true);\r\n    T_UNSPEC_CV(is_copy_constructible, pmo, true);\r\n    T_UNSPEC_CV(is_copy_constructible, pmoc, true);\r\n    T_UNSPEC_CV(is_copy_constructible, pmov, true);\r\n    T_UNSPEC_CV(is_copy_constructible, pmocv, true);\r\n    T_UNSPEC_CV(is_copy_constructible, pmf, true);\r\n    T_UNSPEC_CV(is_copy_constructible, pmfc, true);\r\n    T_UNSPEC_CV(is_copy_constructible, pmfv, true);\r\n    T_UNSPEC_CV(is_copy_constructible, pmfcv, true);\r\n    T_UNSPEC_CV(is_copy_constructible, arr_t, false);\r\n    T_UNSPEC_CV(is_copy_constructible, enum_t, true);\r\n    T_UNSPEC_CV(is_copy_constructible, pf, true);\r\n    T_UNSPEC(is_copy_constructible, func, false);\r\n    T_UNSPEC_CV(is_copy_constructible, void*, true);\r\n}\r\n\r\nstatic void t_is_move_constructible() { // test is_move_constructible<T> for various types\r\n                                        // (minimal tests in absence of compiler support)\r\n    T_TRIVIAL_CV(is_move_constructible, void, false);\r\n    T_TRIVIAL_CV(is_move_constructible, char, true);\r\n    T_TRIVIAL_CV(is_move_constructible, signed char, true);\r\n    T_TRIVIAL_CV(is_move_constructible, unsigned char, true);\r\n    T_TRIVIAL_CV(is_move_constructible, wchar_t, true);\r\n    T_TRIVIAL_CV(is_move_constructible, short, true);\r\n    T_TRIVIAL_CV(is_move_constructible, unsigned short, true);\r\n    T_TRIVIAL_CV(is_move_constructible, int, true);\r\n    T_TRIVIAL_CV(is_move_constructible, unsigned int, true);\r\n    T_TRIVIAL_CV(is_move_constructible, long, true);\r\n    T_TRIVIAL_CV(is_move_constructible, unsigned long, true);\r\n\r\n    T_TRIVIAL_CV(is_move_constructible, long long, true);\r\n    T_TRIVIAL_CV(is_move_constructible, unsigned long long, true);\r\n\r\n    T_TRIVIAL_CV(is_move_constructible, float, true);\r\n    T_TRIVIAL_CV(is_move_constructible, double, true);\r\n    T_TRIVIAL_CV(is_move_constructible, long double, true);\r\n    T_TRIVIAL_CV(is_move_constructible, int*, true);\r\n    T_TRIVIAL(is_move_constructible, int&, true);\r\n    T_TRIVIAL_C(is_move_constructible, B, true);\r\n    T_TRIVIAL_C(is_move_constructible, C, true);\r\n    T_TRIVIAL_C(is_move_constructible, D, true);\r\n    T_TRIVIAL_CV(is_move_constructible, pmo, true);\r\n    T_TRIVIAL_CV(is_move_constructible, pmoc, true);\r\n    T_TRIVIAL_CV(is_move_constructible, pmov, true);\r\n    T_TRIVIAL_CV(is_move_constructible, pmocv, true);\r\n    T_TRIVIAL_CV(is_move_constructible, pmf, true);\r\n    T_TRIVIAL_CV(is_move_constructible, pmfc, true);\r\n    T_TRIVIAL_CV(is_move_constructible, pmfv, true);\r\n    T_TRIVIAL_CV(is_move_constructible, pmfcv, true);\r\n    T_TRIVIAL_CV(is_move_constructible, arr_t, false);\r\n    T_TRIVIAL_CV(is_move_constructible, enum_t, true);\r\n    T_TRIVIAL_CV(is_move_constructible, pf, true);\r\n    T_TRIVIAL(is_move_constructible, func, false);\r\n    T_TRIVIAL_CV(is_move_constructible, void*, true);\r\n}\r\n\r\nstatic void t_is_assignable() { // test is_assignable<T> for various types\r\n                                // (minimal tests in absence of compiler support)\r\n    bool ans = STD is_assignable<B&, B>::value;\r\n    CHECK(ans);\r\n    ans = STD is_assignable<int&, int>::value;\r\n    CHECK(ans);\r\n    ans = STD is_assignable<int&, B>::value;\r\n    CHECK(!ans);\r\n    ans = STD is_assignable<void, void>::value;\r\n    CHECK(!ans);\r\n}\r\n\r\nstatic void t_is_copy_assignable() { // test is_copy_assignable<T> for various types\r\n                                     // (minimal tests in absence of compiler support)\r\n    T_TRIVIAL_V(is_copy_assignable, void, false);\r\n    T_TRIVIAL_V(is_copy_assignable, char, true);\r\n    T_TRIVIAL_V(is_copy_assignable, signed char, true);\r\n    T_TRIVIAL_V(is_copy_assignable, unsigned char, true);\r\n    T_TRIVIAL_V(is_copy_assignable, wchar_t, true);\r\n    T_TRIVIAL_V(is_copy_assignable, short, true);\r\n    T_TRIVIAL_V(is_copy_assignable, unsigned short, true);\r\n    T_TRIVIAL_V(is_copy_assignable, int, true);\r\n    T_TRIVIAL_V(is_copy_assignable, unsigned int, true);\r\n    T_TRIVIAL_V(is_copy_assignable, long, true);\r\n    T_TRIVIAL_V(is_copy_assignable, unsigned long, true);\r\n\r\n    T_TRIVIAL_V(is_copy_assignable, long long, true);\r\n    T_TRIVIAL_V(is_copy_assignable, unsigned long long, true);\r\n\r\n    T_TRIVIAL_V(is_copy_assignable, float, true);\r\n    T_TRIVIAL_V(is_copy_assignable, double, true);\r\n    T_TRIVIAL_V(is_copy_assignable, long double, true);\r\n    T_TRIVIAL_V(is_copy_assignable, int*, true);\r\n    T_TRIVIAL(is_copy_assignable, int&, true);\r\n    T_TRIVIAL(is_copy_assignable, B, true);\r\n    T_TRIVIAL(is_copy_assignable, C, true);\r\n    T_TRIVIAL(is_copy_assignable, D, true);\r\n    T_TRIVIAL_V(is_copy_assignable, pmo, true);\r\n    T_TRIVIAL_V(is_copy_assignable, pmoc, true);\r\n    T_TRIVIAL_V(is_copy_assignable, pmov, true);\r\n    T_TRIVIAL_V(is_copy_assignable, pmocv, true);\r\n    T_TRIVIAL_V(is_copy_assignable, pmf, true);\r\n    T_TRIVIAL_V(is_copy_assignable, pmfc, true);\r\n    T_TRIVIAL_V(is_copy_assignable, pmfv, true);\r\n    T_TRIVIAL_V(is_copy_assignable, pmfcv, true);\r\n    T_TRIVIAL_V(is_copy_assignable, arr_t, false);\r\n    T_TRIVIAL_V(is_copy_assignable, enum_t, true);\r\n    T_TRIVIAL_V(is_copy_assignable, pf, true);\r\n    T_TRIVIAL(is_copy_assignable, func, false);\r\n    T_TRIVIAL_V(is_copy_assignable, void*, true);\r\n}\r\n\r\nstatic void t_is_move_assignable() { // test is_move_assignable<T> for various types\r\n                                     // (minimal tests in absence of compiler support)\r\n    T_TRIVIAL_V(is_move_assignable, void, false);\r\n    T_TRIVIAL_V(is_move_assignable, char, true);\r\n    T_TRIVIAL_V(is_move_assignable, signed char, true);\r\n    T_TRIVIAL_V(is_move_assignable, unsigned char, true);\r\n    T_TRIVIAL_V(is_move_assignable, wchar_t, true);\r\n    T_TRIVIAL_V(is_move_assignable, short, true);\r\n    T_TRIVIAL_V(is_move_assignable, unsigned short, true);\r\n    T_TRIVIAL_V(is_move_assignable, int, true);\r\n    T_TRIVIAL_V(is_move_assignable, unsigned int, true);\r\n    T_TRIVIAL_V(is_move_assignable, long, true);\r\n    T_TRIVIAL_V(is_move_assignable, unsigned long, true);\r\n\r\n    T_TRIVIAL_V(is_move_assignable, long long, true);\r\n    T_TRIVIAL_V(is_move_assignable, unsigned long long, true);\r\n\r\n    T_TRIVIAL_V(is_move_assignable, float, true);\r\n    T_TRIVIAL_V(is_move_assignable, double, true);\r\n    T_TRIVIAL_V(is_move_assignable, long double, true);\r\n    T_TRIVIAL_V(is_move_assignable, int*, true);\r\n    T_TRIVIAL(is_move_assignable, int&, true);\r\n    T_TRIVIAL(is_move_assignable, B, true);\r\n    T_TRIVIAL(is_move_assignable, C, true);\r\n    T_TRIVIAL(is_move_assignable, D, true);\r\n    T_TRIVIAL_V(is_move_assignable, pmo, true);\r\n    T_TRIVIAL_V(is_move_assignable, pmoc, true);\r\n    T_TRIVIAL_V(is_move_assignable, pmov, true);\r\n    T_TRIVIAL_V(is_move_assignable, pmocv, true);\r\n    T_TRIVIAL_V(is_move_assignable, pmf, true);\r\n    T_TRIVIAL_V(is_move_assignable, pmfc, true);\r\n    T_TRIVIAL_V(is_move_assignable, pmfv, true);\r\n    T_TRIVIAL_V(is_move_assignable, pmfcv, true);\r\n    T_TRIVIAL_V(is_move_assignable, arr_t, false);\r\n    T_TRIVIAL_V(is_move_assignable, enum_t, true);\r\n    T_TRIVIAL_V(is_move_assignable, pf, true);\r\n    T_TRIVIAL(is_move_assignable, func, false);\r\n    T_TRIVIAL_V(is_move_assignable, void*, true);\r\n}\r\n\r\nstatic void t_is_destructible() { // test is_destructible<T> for various types\r\n                                  // (minimal tests in absence of compiler support)\r\n    T_TRIVIAL_CV(is_destructible, void, false);\r\n    T_TRIVIAL_CV(is_destructible, char, true);\r\n    T_TRIVIAL_CV(is_destructible, signed char, true);\r\n    T_TRIVIAL_CV(is_destructible, unsigned char, true);\r\n    T_TRIVIAL_CV(is_destructible, wchar_t, true);\r\n    T_TRIVIAL_CV(is_destructible, short, true);\r\n    T_TRIVIAL_CV(is_destructible, unsigned short, true);\r\n    T_TRIVIAL_CV(is_destructible, int, true);\r\n    T_TRIVIAL_CV(is_destructible, unsigned int, true);\r\n    T_TRIVIAL_CV(is_destructible, long, true);\r\n    T_TRIVIAL_CV(is_destructible, unsigned long, true);\r\n\r\n    T_TRIVIAL_CV(is_destructible, long long, true);\r\n    T_TRIVIAL_CV(is_destructible, unsigned long long, true);\r\n\r\n    T_TRIVIAL_CV(is_destructible, float, true);\r\n    T_TRIVIAL_CV(is_destructible, double, true);\r\n    T_TRIVIAL_CV(is_destructible, long double, true);\r\n    T_TRIVIAL_CV(is_destructible, int*, true);\r\n    T_TRIVIAL(is_destructible, int&, true);\r\n    T_TRIVIAL_CV(is_destructible, B, true);\r\n    T_TRIVIAL_CV(is_destructible, C, true);\r\n    T_TRIVIAL_CV(is_destructible, D, true);\r\n    T_TRIVIAL_CV(is_destructible, pmo, true);\r\n    T_TRIVIAL_CV(is_destructible, pmoc, true);\r\n    T_TRIVIAL_CV(is_destructible, pmov, true);\r\n    T_TRIVIAL_CV(is_destructible, pmocv, true);\r\n    T_TRIVIAL_CV(is_destructible, pmf, true);\r\n    T_TRIVIAL_CV(is_destructible, pmfc, true);\r\n    T_TRIVIAL_CV(is_destructible, pmfv, true);\r\n    T_TRIVIAL_CV(is_destructible, pmfcv, true);\r\n    T_TRIVIAL_CV(is_destructible, arr_t, true);\r\n    T_TRIVIAL_CV(is_destructible, enum_t, true);\r\n    T_TRIVIAL_CV(is_destructible, pf, true);\r\n    T_TRIVIAL(is_destructible, func, false);\r\n    T_TRIVIAL_CV(is_destructible, void*, true);\r\n}\r\n\r\nstatic void t_enable_if() { // test enable_if<Test, Ty> for various types\r\n    typedef STD enable_if<false, void> ty1;\r\n    CHECK_TYPE(STD enable_if<false>, ty1);\r\n    CHECK_TYPE(STD enable_if<true>::type, void);\r\n\r\n    typedef STD enable_if<true, double> ty2;\r\n    CHECK_TYPE(ty2::type, double);\r\n}\r\n\r\nstatic void t_is_trivial() { // test is_trivial<T> for various types\r\n    T_UNSPEC_CV(is_trivial, void, false);\r\n    T_UNSPEC_CV(is_trivial, char, true);\r\n    T_UNSPEC_CV(is_trivial, signed char, true);\r\n    T_UNSPEC_CV(is_trivial, unsigned char, true);\r\n    T_UNSPEC_CV(is_trivial, wchar_t, true);\r\n    T_UNSPEC_CV(is_trivial, short, true);\r\n    T_UNSPEC_CV(is_trivial, unsigned short, true);\r\n    T_UNSPEC_CV(is_trivial, int, true);\r\n    T_UNSPEC_CV(is_trivial, unsigned int, true);\r\n    T_UNSPEC_CV(is_trivial, long, true);\r\n    T_UNSPEC_CV(is_trivial, unsigned long, true);\r\n\r\n    T_UNSPEC_CV(is_trivial, long long, true);\r\n    T_UNSPEC_CV(is_trivial, unsigned long long, true);\r\n\r\n    T_UNSPEC_CV(is_trivial, float, true);\r\n    T_UNSPEC_CV(is_trivial, double, true);\r\n    T_UNSPEC_CV(is_trivial, long double, true);\r\n    T_UNSPEC_CV(is_trivial, int*, true);\r\n    T_UNSPEC(is_trivial, int&, false);\r\n    T_UNSPEC_CV(is_trivial, B, false);\r\n    T_UNSPEC_CV(is_trivial, C, false);\r\n    T_UNSPEC_CV(is_trivial, D, true);\r\n    T_UNSPEC_CV(is_trivial, pmo, true);\r\n    T_UNSPEC_CV(is_trivial, pmoc, true);\r\n    T_UNSPEC_CV(is_trivial, pmov, true);\r\n    T_UNSPEC_CV(is_trivial, pmocv, true);\r\n    T_UNSPEC_CV(is_trivial, pmf, true);\r\n    T_UNSPEC_CV(is_trivial, pmfc, true);\r\n    T_UNSPEC_CV(is_trivial, pmfv, true);\r\n    T_UNSPEC_CV(is_trivial, pmfcv, true);\r\n    T_UNSPEC_CV(is_trivial, arr_t, true);\r\n    T_UNSPEC_CV(is_trivial, enum_t, true);\r\n    T_UNSPEC_CV(is_trivial, pf, true);\r\n    T_UNSPEC(is_trivial, func, false);\r\n    T_UNSPEC_CV(is_trivial, void*, true);\r\n}\r\n\r\nstatic void t_is_literal_type() { // test is_literal_type<T> for various types\r\n    T_UNSPEC_CV(is_literal_type, void, true);\r\n    T_UNSPEC_CV(is_literal_type, char, true);\r\n    T_UNSPEC_CV(is_literal_type, signed char, true);\r\n    T_UNSPEC_CV(is_literal_type, unsigned char, true);\r\n    T_UNSPEC_CV(is_literal_type, wchar_t, true);\r\n    T_UNSPEC_CV(is_literal_type, short, true);\r\n    T_UNSPEC_CV(is_literal_type, unsigned short, true);\r\n    T_UNSPEC_CV(is_literal_type, int, true);\r\n    T_UNSPEC_CV(is_literal_type, unsigned int, true);\r\n    T_UNSPEC_CV(is_literal_type, long, true);\r\n    T_UNSPEC_CV(is_literal_type, unsigned long, true);\r\n\r\n    T_UNSPEC_CV(is_literal_type, long long, true);\r\n    T_UNSPEC_CV(is_literal_type, unsigned long long, true);\r\n\r\n    T_UNSPEC_CV(is_literal_type, float, true);\r\n    T_UNSPEC_CV(is_literal_type, double, true);\r\n    T_UNSPEC_CV(is_literal_type, long double, true);\r\n    T_UNSPEC_CV(is_literal_type, int*, true);\r\n    T_UNSPEC(is_literal_type, int&, true);\r\n    T_UNSPEC_CV(is_literal_type, B, false);\r\n    T_UNSPEC_CV(is_literal_type, C, false);\r\n    T_UNSPEC_CV(is_literal_type, D, true);\r\n    T_UNSPEC_CV(is_literal_type, pmo, true);\r\n    T_UNSPEC_CV(is_literal_type, pmoc, true);\r\n    T_UNSPEC_CV(is_literal_type, pmov, true);\r\n    T_UNSPEC_CV(is_literal_type, pmocv, true);\r\n    T_UNSPEC_CV(is_literal_type, pmf, true);\r\n    T_UNSPEC_CV(is_literal_type, pmfc, true);\r\n    T_UNSPEC_CV(is_literal_type, pmfv, true);\r\n    T_UNSPEC_CV(is_literal_type, pmfcv, true);\r\n    T_UNSPEC_CV(is_literal_type, arr_t, true);\r\n    T_UNSPEC_CV(is_literal_type, enum_t, true);\r\n    T_UNSPEC_CV(is_literal_type, pf, true);\r\n    T_UNSPEC(is_literal_type, func, false);\r\n    T_UNSPEC_CV(is_literal_type, void*, true);\r\n}\r\n\r\nstatic void t_is_same() { // test is_same<T1, T2> for various types\r\n    bool ans = STD is_same<int, void>::value;\r\n    CHECK(!ans);\r\n    ans = STD is_same<int, int>::value;\r\n    CHECK(ans);\r\n}\r\n\r\nstatic void t_is_base_of() { // test is_base_of<Base, Derived> for various types\r\n    bool ans = STD is_base_of<int, int>::value;\r\n    CHECK(!ans);\r\n    ans = STD is_base_of<B, C>::value;\r\n    CHECK(ans);\r\n}\r\n\r\nstatic void t_is_convertible() { // test is_convertible<From, To> for various types\r\n    bool ans = STD is_convertible<void, int>::value;\r\n    CHECK(!ans);\r\n    ans = STD is_convertible<int, int>::value;\r\n    CHECK(ans);\r\n}\r\n\r\nstatic void t_void_t() { // test void_t\r\n    CHECK_TYPE(STD void_t<int>, void);\r\n    typedef STD void_t<int, float, double> void3;\r\n    CHECK_TYPE(void3, void);\r\n}\r\n\r\nvoid test_main() { // test type traits\r\n    t_is_constructible();\r\n    t_is_default_constructible();\r\n    t_is_copy_constructible();\r\n    t_is_move_constructible();\r\n\r\n    t_is_assignable();\r\n    t_is_copy_assignable();\r\n    t_is_move_assignable();\r\n\r\n    t_is_destructible();\r\n\r\n    t_enable_if();\r\n    t_is_trivial();\r\n    t_is_literal_type();\r\n\r\n    t_is_same();\r\n    t_is_base_of();\r\n    t_is_convertible();\r\n\r\n    t_void_t();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/typeindex/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <typeindex>\r\n#define TEST_NAME \"<typeindex>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <exception>\r\n#include <string.h>\r\n#include <typeindex>\r\n\r\nvoid test_main() { // test basic workings of type_info definitions\r\n    STD bad_cast x1;\r\n\r\n    STD type_index tix(typeid(x1));\r\n    CHECK_INT(typeid(x1).hash_code(), tix.hash_code());\r\n    CHECK_STR(typeid(x1).name(), tix.name());\r\n\r\n    CHECK(tix == tix);\r\n    CHECK(!(tix != tix));\r\n    CHECK(!(tix < tix));\r\n    CHECK(tix >= tix);\r\n    CHECK(!(tix > tix));\r\n    CHECK(tix <= tix);\r\n\r\n    CHECK_INT(STD hash<STD type_index>()(tix), tix.hash_code());\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/typeinfo/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <typeinfo>\r\n#define TEST_NAME \"<typeinfo>\"\r\n\r\n#include \"tdefs.h\"\r\n#include <exception>\r\n#include <string.h>\r\n#include <typeinfo>\r\n\r\nvoid test_main() { // test basic workings of type_info definitions\r\n    STD bad_cast x1;\r\n    STD bad_typeid x2;\r\n    STD exception* pex = &x1;\r\n    STD type_info* p1  = (STD type_info*) nullptr;\r\n\r\n    pex = &x2;\r\n    pex = pex; // to quiet diagnostics\r\n\r\n    CHECK(p1 != &typeid(x1));\r\n    CHECK(!(typeid(x1) == typeid(x2)));\r\n    CHECK(typeid(x1) != typeid(x2));\r\n    CHECK(!typeid(x1).before(typeid(x1)));\r\n    CHECK(typeid(x1).before(typeid(x2)) || typeid(x2).before(typeid(x1)));\r\n    CHECK(typeid(x1).name() != nullptr && typeid(x2).name() != nullptr);\r\n    CHECK(CSTD strcmp(typeid(x1).name(), typeid(x2).name()) != 0);\r\n    CHECK(typeid(int).name() != nullptr);\r\n\r\n    CHECK_INT(typeid(x1).hash_code(), typeid(x1).hash_code());\r\n\r\n    if (!terse) { // not terse, display names\r\n        CSTD printf(\"typeid(int).name() is %s\\n\", typeid(int).name());\r\n        CSTD printf(\"typeid(bad_cast).name() is %s\\n\", typeid(STD bad_cast).name());\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/unordered_map/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <unordered_map>\r\n#define TEST_NAME \"<unordered_map>\"\r\n\r\n#define _HAS_AUTO_PTR_ETC 1\r\n\r\n#include \"tdefs.h\"\r\n#include <functional>\r\n#include <stddef.h>\r\n#include <unordered_map>\r\n\r\n// TEMPLATE STRUCT SPECIALIZATION hash\r\nnamespace std {\r\n    template <>\r\n    struct hash<Copyable_int> : public STD unary_function<Copyable_int, size_t> { // hash functor for Copyable_int\r\n        typedef Copyable_int Kty;\r\n\r\n        size_t operator()(const Kty& Keyval) const { // hash Keyval to size_t value by pseudorandomizing transform\r\n            return STD hash<int>()(Keyval);\r\n        }\r\n    };\r\n\r\n    template <>\r\n    struct hash<Movable_int> : public STD unary_function<Movable_int, size_t> { // hash functor for Movable_int\r\n        typedef Movable_int Kty;\r\n\r\n        size_t operator()(const Kty& Keyval) const { // hash Keyval to size_t value by pseudorandomizing transform\r\n            return STD hash<int>()(Keyval);\r\n        }\r\n    };\r\n} // namespace std\r\n\r\nvoid test_unordered_map() { // test unordered_map\r\n    typedef STD pair<const char, int> Myval;\r\n    typedef STD hash<char> Myhash;\r\n    typedef STD equal_to<char> Mycomp;\r\n    typedef STD allocator<Myval> Myal;\r\n    typedef STD unordered_map<char, int, Myhash, Mycomp, Myal> Mycont;\r\n\r\n    Myval x, xarr[3], xarr2[3];\r\n    for (int i = 0; i < 3; ++i) { // initialize arrays\r\n        new (&xarr[i]) Myval((char) ('a' + i), 1 + i);\r\n        new (&xarr2[i]) Myval((char) ('d' + i), 4 + i);\r\n    }\r\n\r\n    Mycont::key_type* p_key         = (char*) nullptr;\r\n    Mycont::mapped_type* p_mapped   = (int*) nullptr;\r\n    Mycont::hasher* p_hash          = (Myhash*) nullptr;\r\n    Mycont::key_equal* p_kcomp      = (Mycomp*) nullptr;\r\n    Mycont::allocator_type* p_alloc = (Myal*) nullptr;\r\n    Mycont::value_type* p_val       = (Myval*) nullptr;\r\n    Mycont::pointer p_ptr           = (Myval*) nullptr;\r\n    Mycont::const_pointer p_cptr    = (const Myval*) nullptr;\r\n    Mycont::reference p_ref         = x;\r\n    Mycont::const_reference p_cref  = (const Myval&) x;\r\n    Mycont::size_type* p_size       = (CSTD size_t*) nullptr;\r\n    Mycont::difference_type* p_diff = (CSTD ptrdiff_t*) nullptr;\r\n\r\n    p_key    = p_key; // to quiet diagnostics\r\n    p_hash   = p_hash;\r\n    p_mapped = p_mapped;\r\n    p_kcomp  = p_kcomp;\r\n    p_alloc  = p_alloc;\r\n    p_val    = p_val;\r\n    p_ptr    = p_ptr;\r\n    p_cptr   = p_cptr;\r\n    p_ptr    = &p_ref;\r\n    p_cptr   = &p_cref;\r\n    p_size   = p_size;\r\n    p_diff   = p_diff;\r\n\r\n    Mycont v0;\r\n    Myal al     = v0.get_allocator();\r\n    Mycomp pred = v0.key_eq();\r\n    Myhash hfn  = v0.hash_function();\r\n    Mycont v0a(0), v0b(10, hfn), v0c(20, hfn, pred), v0d(30, hfn, pred, al);\r\n    CHECK(v0.empty());\r\n    CHECK_INT(v0.size(), 0);\r\n    CHECK_INT(v0a.size(), 0);\r\n    CHECK(v0a.get_allocator() == al);\r\n    CHECK_INT(v0b.size(), 0);\r\n    CHECK(v0b.get_allocator() == al);\r\n\r\n    Mycont v1(xarr, xarr + 1); // differs from map\r\n    CHECK_INT(v1.size(), 1);\r\n    CHECK_INT((*v1.begin()).first, 'a');\r\n\r\n    Mycont v2(xarr, xarr + 1, 10);\r\n    CHECK_INT(v2.size(), 1);\r\n    CHECK_INT((*v2.begin()).first, 'a');\r\n\r\n    Mycont v3(xarr, xarr + 1, 20, hfn);\r\n    CHECK_INT(v3.size(), 1);\r\n    CHECK_INT((*v3.begin()).first, 'a');\r\n\r\n    const Mycont v4(xarr, xarr + 1, 30, hfn, pred);\r\n    CHECK_INT(v4.size(), 1);\r\n    CHECK_INT((*v4.begin()).first, 'a');\r\n\r\n    const Mycont v5(xarr, xarr + 1, 40, hfn, pred, al);\r\n    CHECK_INT(v4.size(), 1);\r\n    CHECK_INT((*v4.begin()).first, 'a');\r\n\r\n    v0 = v4;\r\n    CHECK_INT(v0.size(), 1);\r\n    CHECK_INT((*v0.begin()).first, 'a');\r\n    CHECK(v0.size() <= v0.max_size());\r\n\r\n    Mycont* p_cont = &v0;\r\n    p_cont         = p_cont; // to quiet diagnostics\r\n\r\n    { // check iterator generators\r\n        Mycont::iterator p_it(v1.begin());\r\n        Mycont::const_iterator p_cit(v4.begin());\r\n        CHECK_INT((*p_it).first, 'a');\r\n        CHECK_INT((*p_it).second, 1);\r\n        CHECK_INT((*--(p_it = v1.end())).first, 'a');\r\n        CHECK_INT((*p_cit).first, 'a');\r\n        CHECK_INT((*--(p_cit = v4.end())).first, 'a');\r\n\r\n        Mycont::const_iterator p_it1 = Mycont::const_iterator();\r\n        Mycont::const_iterator p_it2 = Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    { // check const iterators generators\r\n        Mycont::const_iterator p_it(v1.cbegin());\r\n        Mycont::const_iterator p_cit(v4.cbegin());\r\n        CHECK_INT((*p_it).first, 'a');\r\n        CHECK_INT((*p_it).second, 1);\r\n        CHECK_INT((*--(p_it = v1.cend())).first, 'a');\r\n        CHECK_INT((*p_cit).first, 'a');\r\n        CHECK_INT((*--(p_cit = v4.cend())).first, 'a');\r\n\r\n        Mycont::const_iterator p_it1 = Mycont::const_iterator();\r\n        Mycont::const_iterator p_it2 = Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    { // check at and comparisons\r\n        Mycont v1x(xarr, xarr + 3);\r\n        CHECK_INT(v1x.at('c'), 3);\r\n\r\n        v0.clear();\r\n        v0.insert(xarr2, xarr2 + 3);\r\n        CHECK(v0 == v0);\r\n        CHECK(v0 != v1x);\r\n    }\r\n\r\n    v0.clear(); // differs from unordered_multimap\r\n    STD pair<Mycont::iterator, bool> pib = v0.insert(Myval('d', 4));\r\n    CHECK_INT((*pib.first).first, 'd');\r\n    CHECK(pib.second);\r\n    CHECK_INT((*--v0.end()).first, 'd');\r\n    pib = v0.insert(Myval('d', 5));\r\n    CHECK_INT((*pib.first).first, 'd');\r\n    CHECK_INT((*pib.first).second, 4);\r\n    CHECK(!pib.second);\r\n    CHECK_INT((*v0.insert(v0.begin(), Myval('e', 5))).first, 'e');\r\n    v0.insert(xarr, xarr + 3);\r\n    CHECK_INT(v0.size(), 5);\r\n    v0.insert(xarr2, xarr2 + 3);\r\n    CHECK_INT(v0.size(), 6);\r\n    CHECK_INT(v0['c'], 3);\r\n    v0.erase(v0.begin());\r\n    CHECK_INT(v0.size(), 5);\r\n    v0.erase(v0.begin(), ++v0.begin());\r\n    CHECK_INT(v0.size(), 4);\r\n    v0.insert(Myval('y', 99));\r\n    CHECK_INT(v0.erase('x'), 0);\r\n    CHECK_INT(v0.erase('y'), 1);\r\n\r\n    { // test added C++11 functionality\r\n        Mycont v0e(al);\r\n        CHECK_INT(v0e.size(), 0);\r\n        CHECK(v0e.get_allocator() == al);\r\n\r\n        Mycont v1x(xarr, xarr + 3);\r\n        CHECK_INT(v1x.at('c'), 3);\r\n        Mycont v2x(v1x, al);\r\n        CHECK_INT(v2x.at('c'), 3);\r\n    }\r\n\r\n    {\r\n        v0.clear();\r\n        CHECK(v0.empty());\r\n        v0.swap(v1);\r\n        CHECK(!v0.empty());\r\n        CHECK(v1.empty());\r\n        STD swap(v0, v1);\r\n        CHECK(v0.empty());\r\n        CHECK(!v1.empty());\r\n        CHECK(v1 == v1);\r\n        CHECK(v0 != v1);\r\n\r\n        CHECK(v0.key_eq()('a', 'a'));\r\n        CHECK(!v0.key_eq()('a', 'c'));\r\n        CHECK_INT((*v4.find('a')).first, 'a');\r\n        CHECK_INT(v4.count('x'), 0);\r\n        CHECK_INT(v4.count('a'), 1);\r\n\r\n        STD pair<Mycont::const_iterator, Mycont::const_iterator> pcc = v4.equal_range('a');\r\n        CHECK_INT((*pcc.first).first, 'a');\r\n        CHECK_INT((*--pcc.second).first, 'a'); // differs from map\r\n    }\r\n\r\n    {\r\n        Mycont v10(xarr, xarr + 3, 20);\r\n        Mycont::size_type nbuckets = v10.bucket_count();\r\n        CHECK(20 <= nbuckets);\r\n        CHECK(nbuckets <= v10.max_bucket_count());\r\n        Mycont::size_type bucket = v10.bucket('b');\r\n        CHECK(bucket < nbuckets);\r\n        Mycont::size_type bsize = v10.bucket_size(bucket);\r\n        CHECK(0 < bsize);\r\n\r\n        Mycont::local_iterator p_lit(v10.begin(bucket));\r\n        CHECK(0 <= STD distance(p_lit, v10.end(bucket)));\r\n        Mycont::const_local_iterator p_clit(v10.begin(bucket));\r\n        CHECK(0 <= STD distance(p_clit, Mycont::const_local_iterator(v10.end(bucket))));\r\n\r\n        Mycont::const_local_iterator p_clit2(v10.cbegin(bucket));\r\n        CHECK(0 <= STD distance(p_clit2, Mycont::const_local_iterator(v10.cend(bucket))));\r\n\r\n        float mlf = v10.max_load_factor();\r\n        CHECK(v10.load_factor() <= mlf);\r\n        v10.max_load_factor(mlf);\r\n        CHECK(v10.max_load_factor() == mlf);\r\n        v10.rehash(nbuckets);\r\n        CHECK_INT(v10.size(), 3);\r\n        CHECK_INT(v10.count('a'), 1);\r\n\r\n        v10.reserve((Mycont::size_type) (static_cast<float>(nbuckets) * v10.max_load_factor() + 0.5));\r\n        CHECK_INT(v10.size(), 3);\r\n        CHECK_INT(v10.count('a'), 1);\r\n    }\r\n\r\n    {\r\n        Mycont v6;\r\n        v6.insert(Myval('a', 1));\r\n        v6.insert(Myval('b', 2));\r\n        Mycont v7(STD move(v6));\r\n        CHECK_INT(v6.size(), 0);\r\n        CHECK_INT(v7.size(), 2);\r\n\r\n        Mycont v6a;\r\n        v6a.insert(Myval('a', 1));\r\n        v6a.insert(Myval('b', 2));\r\n        Mycont v7a(STD move(v6a), al);\r\n        CHECK_INT(v6a.size(), 0);\r\n        CHECK_INT(v7a.size(), 2);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_INT(v7.size(), 0);\r\n        CHECK_INT(v8.size(), 2);\r\n\r\n        typedef STD unordered_map<Movable_int, int> Mycont2;\r\n        Mycont2 v9;\r\n        STD pair<Movable_int, int> pmi0(Movable_int('a'), 1);\r\n        v9.insert(STD move(pmi0));\r\n        CHECK_INT(v9.size(), 1);\r\n        CHECK_INT(v9.begin()->first.val, 'a');\r\n\r\n        Mycont2 v10;\r\n        STD pair<Movable_int, int> pmi1(Movable_int('d'), 4);\r\n        v10.insert(STD move(pmi1));\r\n        CHECK_INT(pmi1.first.val, -1);\r\n        CHECK_INT(v10.begin()->first.val, 'd');\r\n\r\n        STD pair<Movable_int, int> pmi2(Movable_int('c'), 3);\r\n        v10.clear();\r\n        v10.insert(v10.end(), STD move(pmi2));\r\n        CHECK_INT(pmi2.first.val, -1);\r\n        CHECK_INT(v10.begin()->first.val, 'c');\r\n\r\n        Movable_int mi3('a');\r\n        v10.clear();\r\n        CHECK_INT(v10[STD move(mi3)], 0);\r\n        CHECK_INT(mi3.val, -1);\r\n        CHECK_INT(v10.begin()->first.val, 'a');\r\n\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end());\r\n        CHECK_INT(v10.begin()->first.val, 0);\r\n        CHECK_INT(v10.begin()->second, 0);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 'b', 2);\r\n        CHECK_INT(v10.begin()->first.val, 'b');\r\n        CHECK_INT(v10.begin()->second, 2);\r\n\r\n        v10.clear();\r\n        v10.emplace();\r\n        CHECK_INT(v10.begin()->first.val, 0);\r\n        CHECK_INT(v10.begin()->second, 0);\r\n\r\n        v10.clear();\r\n        v10.emplace('b', 2);\r\n        CHECK_INT(v10.begin()->first.val, 'b');\r\n        CHECK_INT(v10.begin()->second, 2);\r\n\r\n        v8.clear(); // copyable key\r\n        v8.try_emplace('b', 2);\r\n        CHECK_INT(v8.begin()->first, 'b');\r\n        CHECK_INT(v8.begin()->second, 2);\r\n\r\n        v8.try_emplace('b', 3);\r\n        CHECK_INT(v8.begin()->first, 'b');\r\n        CHECK_INT(v8.begin()->second, 2);\r\n\r\n        v8.insert_or_assign('b', 3);\r\n        CHECK_INT(v8.begin()->first, 'b');\r\n        CHECK_INT(v8.begin()->second, 3);\r\n\r\n        v10.clear(); // movable key\r\n        v10.try_emplace('b', 2);\r\n        CHECK_INT(v10.begin()->first.val, 'b');\r\n        CHECK_INT(v10.begin()->second, 2);\r\n\r\n        v10.try_emplace('b', 3);\r\n        CHECK_INT(v10.begin()->first.val, 'b');\r\n        CHECK_INT(v10.begin()->second, 2);\r\n\r\n        v10.insert_or_assign('b', 3);\r\n        CHECK_INT(v10.begin()->first.val, 'b');\r\n        CHECK_INT(v10.begin()->second, 3);\r\n    }\r\n\r\n    { // check for lvalue stealing\r\n        typedef STD unordered_map<Copyable_int, int> Mycont3;\r\n        Mycont3 v11;\r\n        STD pair<Copyable_int, int> pci1(Copyable_int('d'), 4);\r\n        v11.insert(pci1);\r\n        CHECK_INT(pci1.first.val, 'd');\r\n        CHECK_INT(v11.begin()->first.val, 'd');\r\n\r\n        STD pair<Copyable_int, int> pci2(Copyable_int('c'), 3);\r\n        v11.clear();\r\n        v11.insert(v11.end(), pci2);\r\n        CHECK_INT(pci2.first.val, 'c');\r\n        CHECK_INT(v11.begin()->first.val, 'c');\r\n\r\n        Mycont3 v12(v11);\r\n        CHECK(v11 == v12);\r\n    }\r\n\r\n    {\r\n        STD initializer_list<Myval> init{xarr[0], xarr[1], xarr[2]};\r\n        Mycont v11(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11.find('a')->second, 1);\r\n\r\n        Mycont v11a(init, 30, hfn, pred, al);\r\n        CHECK_INT(v11a.size(), 3);\r\n        CHECK_INT(v11a.begin()->first, 'a');\r\n\r\n        v11.clear();\r\n        v11 = init;\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11.find('a')->second, 1);\r\n\r\n        v11.clear();\r\n        v11.insert(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11.find('a')->second, 1);\r\n    }\r\n}\r\n\r\nvoid test_unordered_multimap() { // test unordered_multimap\r\n    typedef STD pair<const char, int> Myval;\r\n    typedef STD hash<char> Myhash;\r\n    typedef STD equal_to<char> Mycomp;\r\n    typedef STD allocator<Myval> Myal;\r\n    typedef STD unordered_multimap<char, int, Myhash, Mycomp, Myal> Mycont;\r\n\r\n    Myval x, xarr[3], xarr2[3];\r\n    for (int i = 0; i < 3; ++i) { // initialize arrays\r\n        new (&xarr[i]) Myval((char) ('a' + i), 1 + i);\r\n        new (&xarr2[i]) Myval((char) ('d' + i), 4 + i);\r\n    }\r\n\r\n    Mycont::key_type* p_key         = (char*) nullptr;\r\n    Mycont::mapped_type* p_mapped   = (int*) nullptr;\r\n    Mycont::hasher* p_hash          = (Myhash*) nullptr;\r\n    Mycont::key_equal* p_kcomp      = (Mycomp*) nullptr;\r\n    Mycont::allocator_type* p_alloc = (Myal*) nullptr;\r\n    Mycont::value_type* p_val       = (Myval*) nullptr;\r\n    Mycont::pointer p_ptr           = (Myval*) nullptr;\r\n    Mycont::const_pointer p_cptr    = (const Myval*) nullptr;\r\n    Mycont::reference p_ref         = x;\r\n    Mycont::const_reference p_cref  = (const Myval&) x;\r\n    Mycont::size_type* p_size       = (CSTD size_t*) nullptr;\r\n    Mycont::difference_type* p_diff = (CSTD ptrdiff_t*) nullptr;\r\n\r\n    p_key    = p_key; // to quiet diagnostics\r\n    p_hash   = p_hash;\r\n    p_mapped = p_mapped;\r\n    p_kcomp  = p_kcomp;\r\n    p_alloc  = p_alloc;\r\n    p_val    = p_val;\r\n    p_ptr    = p_ptr;\r\n    p_cptr   = p_cptr;\r\n    p_ptr    = &p_ref;\r\n    p_cptr   = &p_cref;\r\n    p_size   = p_size;\r\n    p_diff   = p_diff;\r\n\r\n    Mycont v0;\r\n    Myal al     = v0.get_allocator();\r\n    Mycomp pred = v0.key_eq();\r\n    Myhash hfn  = v0.hash_function();\r\n    Mycont v0a(0), v0b(10, hfn), v0c(20, hfn, pred), v0d(30, hfn, pred, al);\r\n    CHECK(v0.empty());\r\n    CHECK_INT(v0.size(), 0);\r\n    CHECK_INT(v0a.size(), 0);\r\n    CHECK(v0a.get_allocator() == al);\r\n    CHECK_INT(v0b.size(), 0);\r\n    CHECK(v0b.get_allocator() == al);\r\n\r\n    Mycont v1(xarr, xarr + 1); // differs from multimap\r\n    CHECK_INT(v1.size(), 1);\r\n    CHECK_INT((*v1.begin()).first, 'a');\r\n\r\n    Mycont v2(xarr, xarr + 1, 10);\r\n    CHECK_INT(v2.size(), 1);\r\n    CHECK_INT((*v2.begin()).first, 'a');\r\n\r\n    Mycont v3(xarr, xarr + 1, 20, hfn);\r\n    CHECK_INT(v3.size(), 1);\r\n    CHECK_INT((*v3.begin()).first, 'a');\r\n\r\n    const Mycont v4(xarr, xarr + 1, 30, hfn, pred);\r\n    CHECK_INT(v4.size(), 1);\r\n    CHECK_INT((*v4.begin()).first, 'a');\r\n\r\n    const Mycont v5(xarr, xarr + 1, 40, hfn, pred, al);\r\n    CHECK_INT(v4.size(), 1);\r\n    CHECK_INT((*v4.begin()).first, 'a');\r\n\r\n    v0 = v4;\r\n    CHECK_INT(v0.size(), 1);\r\n    CHECK_INT((*v0.begin()).first, 'a');\r\n    CHECK(v0.size() <= v0.max_size());\r\n\r\n    Mycont* p_cont = &v0;\r\n    p_cont         = p_cont; // to quiet diagnostics\r\n\r\n    { // check iterator generators\r\n        Mycont::iterator p_it(v1.begin());\r\n        Mycont::const_iterator p_cit(v4.begin());\r\n        CHECK_INT((*p_it).first, 'a');\r\n        CHECK_INT((*p_it).second, 1);\r\n        CHECK_INT((*--(p_it = v1.end())).first, 'a');\r\n        CHECK_INT((*p_cit).first, 'a');\r\n        CHECK_INT((*--(p_cit = v4.end())).first, 'a');\r\n\r\n        Mycont::const_iterator p_it1 = Mycont::const_iterator();\r\n        Mycont::const_iterator p_it2 = Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    { // check const iterators generators\r\n        Mycont::const_iterator p_it(v1.cbegin());\r\n        Mycont::const_iterator p_cit(v4.cbegin());\r\n        CHECK_INT((*p_it).first, 'a');\r\n        CHECK_INT((*p_it).second, 1);\r\n        CHECK_INT((*--(p_it = v1.cend())).first, 'a');\r\n        CHECK_INT((*p_cit).first, 'a');\r\n        CHECK_INT((*--(p_cit = v4.cend())).first, 'a');\r\n\r\n        Mycont::const_iterator p_it1 = Mycont::const_iterator();\r\n        Mycont::const_iterator p_it2 = Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n\r\n        Mycont v1x(xarr, xarr + 3);\r\n        v1x.insert(xarr2, xarr2 + 3);\r\n        v1x.insert(xarr2, xarr2 + 3);\r\n        v0.clear();\r\n        v0.insert(xarr2, xarr2 + 3);\r\n        v0.insert(xarr2, xarr2 + 3);\r\n        CHECK(v0 == v0);\r\n        CHECK(v0 != v1x);\r\n    }\r\n\r\n    v0.clear(); // differs from unordered_map\r\n    CHECK_INT((*v0.insert(Myval('d', 4))).first, 'd');\r\n    CHECK_INT((*--v0.end()).first, 'd');\r\n    CHECK_INT((*v0.insert(Myval('d', 5))).first, 'd');\r\n    CHECK_INT(v0.size(), 2);\r\n    CHECK_INT((*v0.insert(v0.begin(), Myval('e', 5))).first, 'e');\r\n    v0.insert(xarr, xarr + 3);\r\n    CHECK_INT(v0.size(), 6);\r\n    v0.insert(xarr2, xarr2 + 3);\r\n    CHECK_INT(v0.size(), 9);\r\n    v0.erase(v0.begin());\r\n    CHECK_INT(v0.size(), 8);\r\n    v0.erase(v0.begin(), ++v0.begin());\r\n    CHECK_INT(v0.size(), 7);\r\n    v0.insert(Myval('y', 98));\r\n    v0.insert(Myval('y', 99));\r\n    CHECK_INT(v0.erase('x'), 0);\r\n    CHECK_INT(v0.erase('y'), 2);\r\n\r\n    { // test added C++11 functionality\r\n        Mycont v0e(al);\r\n        CHECK_INT(v0e.size(), 0);\r\n        CHECK(v0e.get_allocator() == al);\r\n    }\r\n\r\n    v0.clear();\r\n    CHECK(v0.empty());\r\n    v0.swap(v1);\r\n    CHECK(!v0.empty());\r\n    CHECK(v1.empty());\r\n    STD swap(v0, v1);\r\n    CHECK(v0.empty());\r\n    CHECK(!v1.empty());\r\n    CHECK(v1 == v1);\r\n    CHECK(v0 != v1);\r\n\r\n    CHECK(v0.key_eq()('a', 'a'));\r\n    CHECK(!v0.key_eq()('a', 'c'));\r\n    CHECK_INT((*v4.find('a')).first, 'a');\r\n    CHECK_INT(v4.count('x'), 0);\r\n    CHECK_INT(v4.count('a'), 1);\r\n\r\n    STD pair<Mycont::const_iterator, Mycont::const_iterator> pcc = v4.equal_range('a');\r\n    CHECK_INT((*pcc.first).first, 'a');\r\n    CHECK_INT((*--pcc.second).first, 'a'); // differs from multimap\r\n\r\n    {\r\n        Mycont v10(xarr, xarr + 3, 20);\r\n        Mycont::size_type nbuckets = v10.bucket_count();\r\n        CHECK(20 <= nbuckets);\r\n        CHECK(nbuckets <= v10.max_bucket_count());\r\n        Mycont::size_type bucket = v10.bucket('b');\r\n        CHECK(bucket < nbuckets);\r\n        Mycont::size_type bsize = v10.bucket_size(bucket);\r\n        CHECK(0 < bsize);\r\n\r\n        Mycont::local_iterator p_lit(v10.begin(bucket));\r\n        CHECK(0 <= STD distance(p_lit, v10.end(bucket)));\r\n        Mycont::const_local_iterator p_clit(v10.begin(bucket));\r\n        CHECK(0 <= STD distance(p_clit, Mycont::const_local_iterator(v10.end(bucket))));\r\n\r\n        Mycont::const_local_iterator p_clit2(v10.cbegin(bucket));\r\n        CHECK(0 <= STD distance(p_clit2, Mycont::const_local_iterator(v10.cend(bucket))));\r\n\r\n        float mlf = v10.max_load_factor();\r\n        CHECK(v10.load_factor() <= mlf);\r\n        v10.max_load_factor(mlf);\r\n        CHECK(v10.max_load_factor() == mlf);\r\n        v10.rehash(nbuckets);\r\n        CHECK_INT(v10.size(), 3);\r\n        CHECK_INT(v10.count('a'), 1);\r\n    }\r\n\r\n    {\r\n        Mycont v6;\r\n        v6.insert(Myval('a', 1));\r\n        v6.insert(Myval('b', 2));\r\n        Mycont v7(STD move(v6));\r\n        CHECK_INT(v6.size(), 0);\r\n        CHECK_INT(v7.size(), 2);\r\n\r\n        Mycont v6a;\r\n        v6a.insert(Myval('a', 1));\r\n        v6a.insert(Myval('b', 2));\r\n        Mycont v7a(STD move(v6a), al);\r\n        CHECK_INT(v6a.size(), 0);\r\n        CHECK_INT(v7a.size(), 2);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_INT(v7.size(), 0);\r\n        CHECK_INT(v8.size(), 2);\r\n\r\n        typedef STD unordered_multimap<Movable_int, int> Mycont2;\r\n        Mycont2 v9;\r\n        STD pair<Movable_int, int> pmi0(Movable_int('a'), 1);\r\n        v9.insert(STD move(pmi0));\r\n        CHECK_INT(v9.size(), 1);\r\n        CHECK_INT(v9.begin()->first.val, 'a');\r\n\r\n        Mycont2 v10;\r\n        STD pair<Movable_int, int> pmi1(Movable_int('d'), 4);\r\n        v10.insert(STD move(pmi1));\r\n        CHECK_INT(pmi1.first.val, -1);\r\n        CHECK_INT(v10.begin()->first.val, 'd');\r\n\r\n        STD pair<Movable_int, int> pmi2(Movable_int('c'), 3);\r\n        v10.clear();\r\n        v10.insert(v10.end(), STD move(pmi2));\r\n        CHECK_INT(pmi2.first.val, -1);\r\n        CHECK_INT(v10.begin()->first.val, 'c');\r\n\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end());\r\n        CHECK_INT(v10.begin()->first.val, 0);\r\n        CHECK_INT(v10.begin()->second, 0);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 'b', 2);\r\n        CHECK_INT(v10.begin()->first.val, 'b');\r\n        CHECK_INT(v10.begin()->second, 2);\r\n\r\n        v10.clear();\r\n        v10.emplace();\r\n        CHECK_INT(v10.begin()->first.val, 0);\r\n        CHECK_INT(v10.begin()->second, 0);\r\n\r\n        v10.clear();\r\n        v10.emplace('b', 2);\r\n        CHECK_INT(v10.begin()->first.val, 'b');\r\n        CHECK_INT(v10.begin()->second, 2);\r\n    }\r\n\r\n    { // check for lvalue stealing\r\n        typedef STD unordered_multimap<Copyable_int, int> Mycont3;\r\n        Mycont3 v11;\r\n        STD pair<Copyable_int, int> pci1(Copyable_int('d'), 4);\r\n        v11.insert(pci1);\r\n        CHECK_INT(pci1.first.val, 'd');\r\n        CHECK_INT(v11.begin()->first.val, 'd');\r\n\r\n        STD pair<Copyable_int, int> pci2(Copyable_int('c'), 3);\r\n        v11.clear();\r\n        v11.insert(v11.end(), pci2);\r\n        CHECK_INT(pci2.first.val, 'c');\r\n        CHECK_INT(v11.begin()->first.val, 'c');\r\n\r\n        Mycont3 v12(v11);\r\n        CHECK(v11 == v12);\r\n    }\r\n\r\n    {\r\n        STD initializer_list<Myval> init{xarr[0], xarr[1], xarr[2]};\r\n        Mycont v11(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11.find('a')->second, 1);\r\n\r\n        Mycont v11a(init, 30, hfn, pred, al);\r\n        CHECK_INT(v11a.size(), 3);\r\n        CHECK_INT(v11a.begin()->first, 'a');\r\n\r\n        v11.clear();\r\n        v11 = init;\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11.find('a')->second, 1);\r\n\r\n        v11.clear();\r\n        v11.insert(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11.find('a')->second, 1);\r\n    }\r\n}\r\n\r\nvoid test_main() { // test basic workings of unordered_map definitions\r\n    test_unordered_map();\r\n    test_unordered_multimap();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/unordered_set/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <unordered_set>\r\n#define TEST_NAME \"<unordered_set>\"\r\n\r\n#define _HAS_AUTO_PTR_ETC 1\r\n\r\n#include \"tdefs.h\"\r\n#include <functional>\r\n#include <stddef.h>\r\n#include <unordered_set>\r\n\r\n// TEMPLATE STRUCT SPECIALIZATION hash\r\nnamespace std {\r\n    template <>\r\n    struct hash<Copyable_int> : public STD unary_function<Copyable_int, size_t> { // hash functor for Copyable_int\r\n        typedef Copyable_int Kty;\r\n\r\n        size_t operator()(const Kty& Keyval) const { // hash Keyval to size_t value by pseudorandomizing transform\r\n            return STD hash<int>()(Keyval);\r\n        }\r\n    };\r\n\r\n    template <>\r\n    struct hash<Movable_int> : public STD unary_function<Movable_int, size_t> { // hash functor for Movable_int\r\n        typedef Movable_int Kty;\r\n\r\n        size_t operator()(const Kty& Keyval) const { // hash Keyval to size_t value by pseudorandomizing transform\r\n            return STD hash<int>()(Keyval);\r\n        }\r\n    };\r\n} // namespace std\r\n\r\nvoid test_unordered_set() { // test unordered_set\r\n    typedef STD hash<char> Myhash;\r\n    typedef STD equal_to<char> Mycomp;\r\n    typedef STD allocator<char> Myal;\r\n    typedef STD unordered_set<char, Myhash, Mycomp, Myal> Mycont;\r\n    char ch      = '\\0';\r\n    char carr[]  = \"abc\";\r\n    char carr2[] = \"def\";\r\n\r\n    Mycont::key_type* p_key         = (char*) nullptr;\r\n    Mycont::hasher* p_hash          = (Myhash*) nullptr;\r\n    Mycont::key_equal* p_kcomp      = (Mycomp*) nullptr;\r\n    Mycont::allocator_type* p_alloc = (Myal*) nullptr;\r\n    Mycont::value_type* p_val       = (char*) nullptr;\r\n    Mycont::pointer p_ptr           = (char*) nullptr;\r\n    Mycont::const_pointer p_cptr    = (const char*) nullptr;\r\n    Mycont::reference p_ref         = ch;\r\n    Mycont::const_reference p_cref  = (const char&) ch;\r\n    Mycont::size_type* p_size       = (CSTD size_t*) nullptr;\r\n    Mycont::difference_type* p_diff = (CSTD ptrdiff_t*) nullptr;\r\n\r\n    p_key   = p_key; // to quiet diagnostics\r\n    p_hash  = p_hash;\r\n    p_kcomp = p_kcomp;\r\n    p_alloc = p_alloc;\r\n    p_val   = p_val;\r\n    p_ptr   = p_ptr;\r\n    p_cptr  = p_cptr;\r\n    p_ptr   = &p_ref;\r\n    p_cptr  = &p_cref;\r\n    p_size  = p_size;\r\n    p_diff  = p_diff;\r\n\r\n    Mycont v0;\r\n    Myal al     = v0.get_allocator();\r\n    Mycomp pred = v0.key_eq();\r\n    Myhash hfn  = v0.hash_function();\r\n    Mycont v0a(0), v0b(10, hfn), v0c(20, hfn, pred), v0d(30, hfn, pred, al);\r\n    CHECK(v0.empty());\r\n    CHECK_INT(v0.size(), 0);\r\n    CHECK_INT(v0a.size(), 0);\r\n    CHECK(v0a.get_allocator() == al);\r\n    CHECK_INT(v0b.size(), 0);\r\n    CHECK(v0b.get_allocator() == al);\r\n\r\n    Mycont v1(carr, carr + 1); // differs from set\r\n    CHECK_INT(v1.size(), 1);\r\n    CHECK_INT(*v1.begin(), 'a');\r\n\r\n    Mycont v2(carr, carr + 1, 10);\r\n    CHECK_INT(v2.size(), 1);\r\n    CHECK_INT(*v2.begin(), 'a');\r\n\r\n    Mycont v3(carr, carr + 1, 20, hfn);\r\n    CHECK_INT(v3.size(), 1);\r\n    CHECK_INT(*v3.begin(), 'a');\r\n\r\n    const Mycont v4(carr, carr + 1, 30, hfn, pred);\r\n    CHECK_INT(v4.size(), 1);\r\n    CHECK_INT(*v4.begin(), 'a');\r\n\r\n    const Mycont v5(carr, carr + 1, 40, hfn, pred, al);\r\n    CHECK_INT(v4.size(), 1);\r\n    CHECK_INT(*v4.begin(), 'a');\r\n\r\n    v0 = v4;\r\n    CHECK_INT(v0.size(), 1);\r\n    CHECK_INT(*v0.begin(), 'a');\r\n    CHECK(v0.size() <= v0.max_size());\r\n\r\n    Mycont* p_cont = &v0;\r\n    p_cont         = p_cont; // to quiet diagnostics\r\n\r\n    { // check iterator generators\r\n        Mycont::iterator p_it(v1.begin());\r\n        Mycont::const_iterator p_cit(v4.begin());\r\n        CHECK_INT(*p_it, 'a');\r\n        CHECK_INT(*--(p_it = v1.end()), 'a');\r\n        CHECK_INT(*p_cit, 'a');\r\n        CHECK_INT(*--(p_cit = v4.end()), 'a');\r\n\r\n        Mycont::const_iterator p_it1 = Mycont::const_iterator();\r\n        Mycont::const_iterator p_it2 = Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    { // check const iterators generators\r\n        Mycont::const_iterator p_it(v1.cbegin());\r\n        Mycont::const_iterator p_cit(v4.cbegin());\r\n        CHECK_INT(*p_it, 'a');\r\n        CHECK_INT(*--(p_it = v1.cend()), 'a');\r\n        CHECK_INT(*p_cit, 'a');\r\n        CHECK_INT(*--(p_cit = v4.cend()), 'a');\r\n\r\n        Mycont::const_iterator p_it1 = Mycont::const_iterator();\r\n        Mycont::const_iterator p_it2 = Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    { // check comparisons\r\n        Mycont v1x(carr, carr + 3);\r\n        v0.clear();\r\n        v0.insert(carr2, carr2 + 3);\r\n        CHECK(v0 == v0);\r\n        CHECK(v0 != v1x);\r\n    }\r\n\r\n    v0.clear(); // differs from unordered_multiset\r\n    STD pair<Mycont::iterator, bool> pib = v0.insert('d');\r\n    CHECK_INT(*pib.first, 'd');\r\n    CHECK(pib.second);\r\n    CHECK_INT(*--v0.end(), 'd');\r\n    pib = v0.insert('d');\r\n    CHECK_INT(*pib.first, 'd');\r\n    CHECK(!pib.second);\r\n    CHECK_INT(*v0.insert(v0.begin(), 'e'), 'e');\r\n    v0.insert(carr, carr + 3);\r\n    CHECK_INT(v0.size(), 5);\r\n    v0.insert(carr2, carr2 + 3);\r\n    CHECK_INT(v0.size(), 6);\r\n    v0.erase(v0.begin());\r\n    CHECK_INT(v0.size(), 5);\r\n    v0.erase(v0.begin(), ++v0.begin());\r\n    CHECK_INT(v0.size(), 4);\r\n    v0.insert('y');\r\n    CHECK_INT(v0.erase('x'), 0);\r\n    CHECK_INT(v0.erase('y'), 1);\r\n\r\n    { // test added C++11 functionality\r\n        Mycont v0e(al);\r\n        CHECK_INT(v0e.size(), 0);\r\n        CHECK(v0e.get_allocator() == al);\r\n    }\r\n\r\n    v0.clear();\r\n    CHECK(v0.empty());\r\n    v0.swap(v1);\r\n    CHECK(!v0.empty());\r\n    CHECK(v1.empty());\r\n    STD swap(v0, v1);\r\n    CHECK(v0.empty());\r\n    CHECK(!v1.empty());\r\n    CHECK(v1 == v1);\r\n    CHECK(v0 != v1);\r\n\r\n    CHECK(v0.key_eq()('a', 'a'));\r\n    CHECK(!v0.key_eq()('a', 'c'));\r\n    CHECK_INT(*v4.find('a'), 'a');\r\n    CHECK_INT(v4.count('x'), 0);\r\n    CHECK_INT(v4.count('a'), 1);\r\n    STD pair<Mycont::const_iterator, Mycont::const_iterator> pcc = v4.equal_range('a');\r\n    CHECK_INT(*pcc.first, 'a');\r\n    CHECK_INT(*--pcc.second, 'a'); // differs from set\r\n\r\n    {\r\n        Mycont v10(carr, carr + 3, 20);\r\n        Mycont::size_type nbuckets = v10.bucket_count();\r\n        CHECK(20 <= nbuckets);\r\n        CHECK(nbuckets <= v10.max_bucket_count());\r\n        Mycont::size_type bucket = v10.bucket('b');\r\n        CHECK(bucket < nbuckets);\r\n        Mycont::size_type bsize = v10.bucket_size(bucket);\r\n        CHECK(0 < bsize);\r\n\r\n        Mycont::local_iterator p_lit(v10.begin(bucket));\r\n        CHECK(0 <= STD distance(p_lit, v10.end(bucket)));\r\n        Mycont::const_local_iterator p_clit(v10.begin(bucket));\r\n        CHECK(0 <= STD distance(p_clit, Mycont::const_local_iterator(v10.end(bucket))));\r\n\r\n        Mycont::const_local_iterator p_clit2(v10.cbegin(bucket));\r\n        CHECK(0 <= STD distance(p_clit2, Mycont::const_local_iterator(v10.cend(bucket))));\r\n\r\n        float mlf = v10.max_load_factor();\r\n        CHECK(v10.load_factor() <= mlf);\r\n        v10.max_load_factor(mlf);\r\n        CHECK(v10.max_load_factor() == mlf);\r\n        v10.rehash(nbuckets);\r\n        CHECK_INT(v10.size(), 3);\r\n        CHECK_INT(v10.count('a'), 1);\r\n\r\n        v10.reserve((Mycont::size_type) (static_cast<float>(nbuckets) * v10.max_load_factor() + 0.5));\r\n        CHECK_INT(v10.size(), 3);\r\n        CHECK_INT(v10.count('a'), 1);\r\n    }\r\n\r\n    {\r\n        Mycont v6;\r\n        v6.insert('a');\r\n        v6.insert('b');\r\n        Mycont v7(STD move(v6));\r\n        CHECK_INT(v6.size(), 0);\r\n        CHECK_INT(v7.size(), 2);\r\n\r\n        Mycont v6a;\r\n        v6a.insert('a');\r\n        v6a.insert('b');\r\n        Mycont v7a(STD move(v6a), al);\r\n        CHECK_INT(v6a.size(), 0);\r\n        CHECK_INT(v7a.size(), 2);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_INT(v7.size(), 0);\r\n        CHECK_INT(v8.size(), 2);\r\n\r\n        typedef STD unordered_set<Movable_int> Mycont2;\r\n        Mycont2 v9;\r\n        Movable_int mi0('a');\r\n        v9.insert(STD move(mi0));\r\n        CHECK_INT(v9.size(), 1);\r\n        CHECK_INT(v9.begin()->val, 'a');\r\n\r\n        Mycont2 v10;\r\n        Movable_int mi1('d');\r\n        v10.clear();\r\n        v10.insert(STD move(mi1));\r\n        CHECK_INT(mi1.val, -1);\r\n        CHECK_INT(v10.begin()->val, 'd');\r\n\r\n        Movable_int mi2('c');\r\n        v10.clear();\r\n        v10.insert(v10.end(), STD move(mi2));\r\n        CHECK_INT(mi2.val, -1);\r\n        CHECK_INT(v10.begin()->val, 'c');\r\n\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end());\r\n        CHECK_INT(v10.begin()->val, 0);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 2);\r\n        CHECK_INT(v10.begin()->val, 2);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x32);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x432);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 5, 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x5432);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 6, 5, 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x65432);\r\n\r\n        v10.clear();\r\n        v10.emplace();\r\n        CHECK_INT(v10.begin()->val, 0);\r\n        v10.clear();\r\n        v10.emplace(2);\r\n        CHECK_INT(v10.begin()->val, 2);\r\n        v10.clear();\r\n        v10.emplace(3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x32);\r\n        v10.clear();\r\n        v10.emplace(4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x432);\r\n        v10.clear();\r\n        v10.emplace(5, 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x5432);\r\n        v10.clear();\r\n        v10.emplace(6, 5, 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x65432);\r\n    }\r\n\r\n    { // check for lvalue stealing\r\n        typedef STD unordered_set<Copyable_int> Mycont3;\r\n        Mycont3 v11;\r\n        Copyable_int ci1('d');\r\n        v11.insert(ci1);\r\n        CHECK_INT(ci1.val, 'd');\r\n        CHECK_INT(v11.begin()->val, 'd');\r\n\r\n        Copyable_int ci2('c');\r\n        v11.clear();\r\n        v11.insert(v11.end(), ci2);\r\n        CHECK_INT(ci2.val, 'c');\r\n        CHECK_INT(v11.begin()->val, 'c');\r\n\r\n        Mycont3 v12(v11);\r\n        CHECK(v11 == v12);\r\n    }\r\n\r\n    {\r\n        STD initializer_list<char> init{'a', 'b', 'c'};\r\n        Mycont v11(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(*v11.find('a'), 'a');\r\n\r\n        v11.clear();\r\n        v11 = init;\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(*v11.find('a'), 'a');\r\n\r\n        Mycont v11a(init, 30, hfn, pred, al);\r\n        CHECK_INT(v11a.size(), 3);\r\n        CHECK_INT(*v11a.find('a'), 'a');\r\n\r\n        v11.clear();\r\n        v11.insert(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(*v11.find('a'), 'a');\r\n    }\r\n}\r\n\r\nvoid test_unordered_multiset() { // test unordered_multiset\r\n    typedef STD hash<char> Myhash;\r\n    typedef STD equal_to<char> Mycomp;\r\n    typedef STD allocator<char> Myal;\r\n    typedef STD unordered_multiset<char, Myhash, Mycomp, Myal> Mycont;\r\n    char ch      = '\\0';\r\n    char carr[]  = \"abc\";\r\n    char carr2[] = \"def\";\r\n\r\n    Mycont::key_type* p_key         = (char*) nullptr;\r\n    Mycont::hasher* p_hash          = (Myhash*) nullptr;\r\n    Mycont::key_equal* p_kcomp      = (Mycomp*) nullptr;\r\n    Mycont::allocator_type* p_alloc = (Myal*) nullptr;\r\n    Mycont::value_type* p_val       = (char*) nullptr;\r\n    Mycont::pointer p_ptr           = (char*) nullptr;\r\n    Mycont::const_pointer p_cptr    = (const char*) nullptr;\r\n    Mycont::reference p_ref         = ch;\r\n    Mycont::const_reference p_cref  = (const char&) ch;\r\n    Mycont::size_type* p_size       = (CSTD size_t*) nullptr;\r\n    Mycont::difference_type* p_diff = (CSTD ptrdiff_t*) nullptr;\r\n\r\n    p_key   = p_key; // to quiet diagnostics\r\n    p_hash  = p_hash;\r\n    p_kcomp = p_kcomp;\r\n    p_alloc = p_alloc;\r\n    p_val   = p_val;\r\n    p_ptr   = p_ptr;\r\n    p_cptr  = p_cptr;\r\n    p_ptr   = &p_ref;\r\n    p_cptr  = &p_cref;\r\n    p_size  = p_size;\r\n    p_diff  = p_diff;\r\n\r\n    Mycont v0;\r\n    Myal al     = v0.get_allocator();\r\n    Mycomp pred = v0.key_eq();\r\n    Myhash hfn  = v0.hash_function();\r\n    Mycont v0a(0), v0b(10, hfn), v0c(20, hfn, pred), v0d(30, hfn, pred, al);\r\n    CHECK(v0.empty());\r\n    CHECK_INT(v0.size(), 0);\r\n    CHECK_INT(v0a.size(), 0);\r\n    CHECK(v0a.get_allocator() == al);\r\n    CHECK_INT(v0b.size(), 0);\r\n    CHECK(v0b.get_allocator() == al);\r\n\r\n    Mycont v1(carr, carr + 1); // differs from multiset\r\n    CHECK_INT(v1.size(), 1);\r\n    CHECK_INT(*v1.begin(), 'a');\r\n\r\n    Mycont v2(carr, carr + 1, 10);\r\n    CHECK_INT(v2.size(), 1);\r\n    CHECK_INT(*v2.begin(), 'a');\r\n\r\n    Mycont v3(carr, carr + 1, 20, hfn);\r\n    CHECK_INT(v3.size(), 1);\r\n    CHECK_INT(*v3.begin(), 'a');\r\n\r\n    const Mycont v4(carr, carr + 1, 30, hfn, pred);\r\n    CHECK_INT(v4.size(), 1);\r\n    CHECK_INT(*v4.begin(), 'a');\r\n\r\n    const Mycont v5(carr, carr + 1, 40, hfn, pred, al);\r\n    CHECK_INT(v4.size(), 1);\r\n    CHECK_INT(*v4.begin(), 'a');\r\n\r\n    v0 = v4;\r\n    CHECK_INT(v0.size(), 1);\r\n    CHECK_INT(*v0.begin(), 'a');\r\n    CHECK(v0.size() <= v0.max_size());\r\n\r\n    Mycont* p_cont = &v0;\r\n    p_cont         = p_cont; // to quiet diagnostics\r\n\r\n    { // check iterator generators\r\n        Mycont::iterator p_it(v1.begin());\r\n        Mycont::const_iterator p_cit(v4.begin());\r\n        CHECK_INT(*p_it, 'a');\r\n        CHECK_INT(*--(p_it = v1.end()), 'a');\r\n        CHECK_INT(*p_cit, 'a');\r\n        CHECK_INT(*--(p_cit = v4.end()), 'a');\r\n\r\n        Mycont::const_iterator p_it1 = Mycont::const_iterator();\r\n        Mycont::const_iterator p_it2 = Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    { // check const iterators generators\r\n        Mycont::const_iterator p_it(v1.cbegin());\r\n        Mycont::const_iterator p_cit(v4.cbegin());\r\n        CHECK_INT(*p_it, 'a');\r\n        CHECK_INT(*--(p_it = v1.cend()), 'a');\r\n        CHECK_INT(*p_cit, 'a');\r\n        CHECK_INT(*--(p_cit = v4.cend()), 'a');\r\n\r\n        Mycont::const_iterator p_it1 = Mycont::const_iterator();\r\n        Mycont::const_iterator p_it2 = Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    { // check comparisons\r\n        Mycont v1x(carr, carr + 3);\r\n        v1.insert(carr2, carr2 + 3);\r\n        v1.insert(carr2, carr2 + 3);\r\n        v0.clear();\r\n        v0.insert(carr2, carr2 + 3);\r\n        v0.insert(carr2, carr2 + 3);\r\n        CHECK(v0 == v0);\r\n        CHECK(v0 != v1x);\r\n    }\r\n\r\n    v0.clear(); // differs from unordered_set\r\n    CHECK_INT(*v0.insert('d'), 'd');\r\n    CHECK_INT(*--v0.end(), 'd');\r\n    CHECK_INT(*v0.insert('d'), 'd');\r\n    CHECK_INT(v0.size(), 2);\r\n    CHECK_INT(*v0.insert(v0.begin(), 'e'), 'e');\r\n    v0.insert(carr, carr + 3);\r\n    CHECK_INT(v0.size(), 6);\r\n    v0.insert(carr2, carr2 + 3);\r\n    CHECK_INT(v0.size(), 9);\r\n    v0.erase(v0.begin());\r\n    CHECK_INT(v0.size(), 8);\r\n    v0.erase(v0.begin(), ++v0.begin());\r\n    CHECK_INT(v0.size(), 7);\r\n    v0.insert('y');\r\n    v0.insert('y');\r\n    CHECK_INT(v0.erase('x'), 0);\r\n    CHECK_INT(v0.erase('y'), 2);\r\n\r\n    { // test added C++11 functionality\r\n        Mycont v0e(al);\r\n        CHECK_INT(v0e.size(), 0);\r\n        CHECK(v0e.get_allocator() == al);\r\n    }\r\n\r\n    v0.clear();\r\n    CHECK(v0.empty());\r\n    v0.swap(v1);\r\n    CHECK(!v0.empty());\r\n    CHECK(v1.empty());\r\n    STD swap(v0, v1);\r\n    CHECK(v0.empty());\r\n    CHECK(!v1.empty());\r\n    CHECK(v1 == v1);\r\n    CHECK(v0 != v1);\r\n\r\n    CHECK(v0.key_eq()('a', 'a'));\r\n    CHECK(!v0.key_eq()('a', 'c'));\r\n    CHECK_INT(*v4.find('a'), 'a');\r\n    CHECK_INT(v4.count('x'), 0);\r\n    CHECK_INT(v4.count('a'), 1);\r\n    STD pair<Mycont::const_iterator, Mycont::const_iterator> pcc = v4.equal_range('a');\r\n    CHECK_INT(*pcc.first, 'a');\r\n    CHECK_INT(*--pcc.second, 'a'); // differs from multiset\r\n\r\n    {\r\n        Mycont v10(carr, carr + 3, 20);\r\n        Mycont::size_type nbuckets = v10.bucket_count();\r\n        CHECK(20 <= nbuckets);\r\n        CHECK(nbuckets <= v10.max_bucket_count());\r\n        Mycont::size_type bucket = v10.bucket('b');\r\n        CHECK(bucket < nbuckets);\r\n        Mycont::size_type bsize = v10.bucket_size(bucket);\r\n        CHECK(0 < bsize);\r\n\r\n        Mycont::local_iterator p_lit(v10.begin(bucket));\r\n        CHECK(0 <= STD distance(p_lit, v10.end(bucket)));\r\n        Mycont::const_local_iterator p_clit(v10.begin(bucket));\r\n        CHECK(0 <= STD distance(p_clit, Mycont::const_local_iterator(v10.end(bucket))));\r\n\r\n        Mycont::const_local_iterator p_clit2(v10.cbegin(bucket));\r\n        CHECK(0 <= STD distance(p_clit2, Mycont::const_local_iterator(v10.cend(bucket))));\r\n\r\n        float mlf = v10.max_load_factor();\r\n        CHECK(v10.load_factor() <= mlf);\r\n        v10.max_load_factor(mlf);\r\n        CHECK(v10.max_load_factor() == mlf);\r\n        v10.rehash(nbuckets);\r\n        CHECK_INT(v10.size(), 3);\r\n        CHECK_INT(v10.count('a'), 1);\r\n    }\r\n\r\n    {\r\n        Mycont v6;\r\n        v6.insert('a');\r\n        v6.insert('b');\r\n        Mycont v7(STD move(v6));\r\n        CHECK_INT(v6.size(), 0);\r\n        CHECK_INT(v7.size(), 2);\r\n\r\n        Mycont v6a;\r\n        v6a.insert('a');\r\n        v6a.insert('b');\r\n        Mycont v7a(STD move(v6a), al);\r\n        CHECK_INT(v6a.size(), 0);\r\n        CHECK_INT(v7a.size(), 2);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_INT(v7.size(), 0);\r\n        CHECK_INT(v8.size(), 2);\r\n\r\n        typedef STD unordered_multiset<Movable_int> Mycont2;\r\n        Mycont2 v9;\r\n        Movable_int mi0('a');\r\n        v9.insert(STD move(mi0));\r\n        CHECK_INT(v9.size(), 1);\r\n        CHECK_INT(v9.begin()->val, 'a');\r\n\r\n        Mycont2 v10;\r\n        Movable_int mi1('d');\r\n        v10.insert(STD move(mi1));\r\n        CHECK_INT(mi1.val, -1);\r\n        CHECK_INT(v10.begin()->val, 'd');\r\n\r\n        Movable_int mi2('c');\r\n        v10.clear();\r\n        v10.insert(v10.end(), STD move(mi2));\r\n        CHECK_INT(mi2.val, -1);\r\n        CHECK_INT(v10.begin()->val, 'c');\r\n\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end());\r\n        CHECK_INT(v10.begin()->val, 0);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 2);\r\n        CHECK_INT(v10.begin()->val, 2);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x32);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x432);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 5, 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x5432);\r\n        v10.clear();\r\n        v10.emplace_hint(v10.end(), 6, 5, 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x65432);\r\n\r\n        v10.clear();\r\n        v10.emplace();\r\n        CHECK_INT(v10.begin()->val, 0);\r\n        v10.clear();\r\n        v10.emplace(2);\r\n        CHECK_INT(v10.begin()->val, 2);\r\n        v10.clear();\r\n        v10.emplace(3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x32);\r\n        v10.clear();\r\n        v10.emplace(4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x432);\r\n        v10.clear();\r\n        v10.emplace(5, 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x5432);\r\n        v10.clear();\r\n        v10.emplace(6, 5, 4, 3, 2);\r\n        CHECK_INT(v10.begin()->val, 0x65432);\r\n    }\r\n\r\n    { // check for lvalue stealing\r\n        typedef STD unordered_multiset<Copyable_int> Mycont3;\r\n        Mycont3 v11;\r\n        Copyable_int ci1('d');\r\n        v11.insert(ci1);\r\n        CHECK_INT(ci1.val, 'd');\r\n        CHECK_INT(v11.begin()->val, 'd');\r\n\r\n        Copyable_int ci2('c');\r\n        v11.clear();\r\n        v11.insert(v11.end(), ci2);\r\n        CHECK_INT(ci2.val, 'c');\r\n        CHECK_INT(v11.begin()->val, 'c');\r\n\r\n        Mycont3 v12(v11);\r\n        CHECK(v11 == v12);\r\n    }\r\n\r\n    {\r\n        STD initializer_list<char> init{'a', 'b', 'c'};\r\n        Mycont v11(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(*v11.find('a'), 'a');\r\n\r\n        v11.clear();\r\n        v11 = init;\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(*v11.find('a'), 'a');\r\n\r\n        v11.clear();\r\n        v11.insert(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(*v11.find('a'), 'a');\r\n\r\n        Mycont v11a(init, 30, hfn, pred, al);\r\n        CHECK_INT(v11a.size(), 3);\r\n        CHECK_INT(*v11a.find('a'), 'a');\r\n    }\r\n}\r\n\r\nvoid test_main() { // test basic workings of set definitions\r\n    test_unordered_set();\r\n    test_unordered_multiset();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/utility/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <utility>\r\n#define TEST_NAME \"<utility>\"\r\n#define _SILENCE_CXX20_REL_OPS_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include <tuple>\r\n#include <utility>\r\n\r\ntypedef STD pair<int, char> Pair_ic;\r\nPair_ic p0;\r\n\r\nvoid fun() { // do nothing\r\n}\r\n\r\nvoid t_sequence() { // test integer_sequence\r\n    typedef STD integer_sequence<size_t> s0;\r\n    CHECK_TYPE(size_t, s0::value_type);\r\n    CHECK_INT(s0().size(), 0);\r\n\r\n    typedef STD integer_sequence<size_t, 2> s1;\r\n    CHECK_TYPE(size_t, s1::value_type);\r\n    CHECK_INT(s1().size(), 1);\r\n\r\n    typedef STD integer_sequence<size_t, 4, 5> s2;\r\n    CHECK_TYPE(size_t, s2::value_type);\r\n    CHECK_INT(s2().size(), 2);\r\n\r\n    typedef STD make_integer_sequence<int, 0> si0;\r\n    CHECK_TYPE(si0, STD integer_sequence<int>);\r\n\r\n    typedef STD make_integer_sequence<int, 1> si1;\r\n    typedef STD integer_sequence<int, 0> si1a;\r\n    CHECK_TYPE(si1, si1a);\r\n\r\n    typedef STD make_integer_sequence<int, 2> si2;\r\n    typedef STD integer_sequence<int, 0, 1> si2a;\r\n    CHECK_TYPE(si2, si2a);\r\n\r\n    typedef STD make_index_sequence<2> si2b;\r\n\r\n    typedef STD index_sequence_for<int, float> si2d;\r\n    CHECK_TYPE(si2b, si2d);\r\n\r\n    CHECK_TYPE(s0, STD index_sequence<>);\r\n\r\n    CHECK_TYPE(s1, STD index_sequence<2>);\r\n\r\n    typedef STD index_sequence<4, 5> s2x;\r\n    CHECK_TYPE(s2, s2x);\r\n\r\n    typedef STD index_sequence<0, 1> si2c;\r\n    CHECK_TYPE(si2b, si2c);\r\n}\r\n\r\nvoid test_main() { // test basic workings of utility definitions\r\n    t_sequence();\r\n\r\n    Pair_ic p1 = p0, p2(3, 'a');\r\n\r\n    CHECK_INT(p1.first, 0);\r\n    CHECK_INT(p1.second, '\\0');\r\n    CHECK_INT(p2.first, 3);\r\n    CHECK_INT(p2.second, 'a');\r\n\r\n    // test get\r\n    CHECK_INT(STD get<0>(p1), 0);\r\n    CHECK_INT(STD get<1>(p1), '\\0');\r\n    CHECK_INT(STD get<int>(p1), 0);\r\n    CHECK_INT(STD get<char>(p1), '\\0');\r\n\r\n    CHECK_INT(STD get<0>(p2), 3);\r\n    CHECK_INT(STD get<1>(p2), 'a');\r\n    CHECK_INT(STD get<int>(p2), 3);\r\n    CHECK_INT(STD get<char>(p2), 'a');\r\n\r\n    CHECK(p2 == STD make_pair((Pair_ic::first_type) 3, (Pair_ic::second_type) 'a'));\r\n    CHECK(p2 < STD make_pair((Pair_ic::first_type) 4, (Pair_ic::second_type) 'a'));\r\n    CHECK(p2 < STD make_pair((Pair_ic::first_type) 3, (Pair_ic::second_type) 'b'));\r\n    CHECK(p1 != p2);\r\n    CHECK(p2 > p1);\r\n    CHECK(p2 <= p2);\r\n    CHECK(p2 >= p2);\r\n\r\n    // test rel_ops\r\n    using namespace STD rel_ops;\r\n    Copyable_int a(2), b(3);\r\n    CHECK(a != b);\r\n    CHECK(b > a);\r\n    CHECK(a <= b);\r\n    CHECK(b >= a);\r\n\r\n    STD swap(p1, p2);\r\n    CHECK_INT(p1.first, 3);\r\n    CHECK_INT(p1.second, 'a');\r\n\r\n    {\r\n        int arr[3];\r\n        CHECK_PTR(STD make_pair(&arr[0], 3).first, &arr[0]);\r\n        CHECK(STD make_pair(3, &fun).second == &fun);\r\n\r\n        typedef STD pair<long, short> Pair_ls;\r\n        Pair_ls p8(30L, (short) 7);\r\n        Pair_ic p9(4, 'b');\r\n        p8 = p9;\r\n        CHECK_INT(p8.first, 4);\r\n        CHECK_INT(p8.second, 'b');\r\n    }\r\n\r\n    {\r\n        // test forward, move\r\n\r\n        Movable_int mi0(1);\r\n        Movable_int mi1(STD move(mi0));\r\n        CHECK_INT(mi0.val, -1);\r\n        CHECK_INT(mi1.val, 1);\r\n\r\n        int x = 1;\r\n        int y = 0;\r\n        y     = STD forward<int>(x);\r\n        CHECK_INT(y, 1);\r\n\r\n        Pair_ic p3(STD move(2), STD move('c'));\r\n        Pair_ic p4(STD move(p3));\r\n        CHECK_INT(p4.first, 2);\r\n        CHECK_INT(p4.second, 'c');\r\n        p4 = STD move(p1);\r\n        CHECK_INT(p4.first, 3);\r\n        CHECK_INT(p4.second, 'a');\r\n\r\n        STD pair<Movable_int, Movable_int> p5(STD move(2), STD move(3));\r\n        CHECK_INT(p5.first.val, 2);\r\n        CHECK_INT(p5.second.val, 3);\r\n\r\n        STD pair<Movable_int, Movable_int> p6(STD move(p5));\r\n        CHECK_INT(p5.first.val, -1);\r\n        CHECK_INT(p5.second.val, -1);\r\n        CHECK_INT(p6.first.val, 2);\r\n        CHECK_INT(p6.second.val, 3);\r\n\r\n        p5 = STD move(p6);\r\n        CHECK_INT(p5.first.val, 2);\r\n        CHECK_INT(p5.second.val, 3);\r\n        CHECK_INT(p6.first.val, -1);\r\n        CHECK_INT(p6.second.val, -1);\r\n\r\n        int two   = 2;\r\n        int three = 3;\r\n\r\n        STD piecewise_construct_t pc = STD piecewise_construct;\r\n        STD pair<Movable_int, Movable_int> p7(pc, STD tuple<int>(1), STD forward_as_tuple(two, three));\r\n        CHECK_INT(p7.first.val, 1);\r\n        CHECK_INT(p7.second.val, 0x23);\r\n\r\n        {\r\n            char first[8];\r\n            CSTD strcpy(first, \"abcdefg\");\r\n            STD swap(first[0], first[1]);\r\n            CHECK_STR(first, \"bacdefg\");\r\n\r\n            char arr1[] = {\"abc\"};\r\n            char arr2[] = {\"def\"};\r\n            STD swap(arr1, arr2);\r\n            CHECK_STR(&arr1[0], \"def\");\r\n            CHECK_STR(&arr2[0], \"abc\");\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/utility1/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <utility>\r\n#define TEST_NAME \"<utility>, part 1\"\r\n\r\n#include \"tdefs.h\"\r\n#include <utility>\r\n\r\nvoid test_main() { // test header <utility>\r\n    typedef STD pair<int, long> Pair;\r\n    CHECK_INT(STD tuple_size<Pair>::value, 2);\r\n\r\n    typedef STD tuple_element<0, Pair>::type Type0;\r\n    typedef STD tuple_element<1, Pair>::type Type1;\r\n    CHECK_TYPE(Type0, int);\r\n    CHECK_TYPE(Type1, long);\r\n\r\n    Pair p        = STD make_pair(0, 1L);\r\n    const Pair cp = STD make_pair(2, 3L);\r\n    CHECK_INT(STD get<0>(p), 0);\r\n    CHECK_INT(STD get<1>(p), 1);\r\n    CHECK_INT(STD get<0>(cp), 2);\r\n    CHECK_INT(STD get<1>(cp), 3);\r\n\r\n    {\r\n        Movable_int mi0(1);\r\n        STD pair<Movable_int, int> pmi(STD move(mi0), 2);\r\n        CHECK_INT(pmi.first.val, 1);\r\n        Movable_int mi1(STD move(STD get<0>(pmi)));\r\n        CHECK_INT(mi1.val, 1);\r\n        CHECK_INT(pmi.first.val, -1);\r\n    }\r\n\r\n    {\r\n        int x = 3;\r\n        CHECK_INT(STD move_if_noexcept(x), 3);\r\n        Movable_int mi1(3);\r\n\r\n        Movable_int mi2 = STD move(mi1);\r\n        CHECK_INT((int) mi2, 3);\r\n        CHECK_INT((int) mi1, -1);\r\n\r\n        CHECK_TYPE(decltype(STD declval<int>()), int);\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/valarray/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <valarray>\r\n#define TEST_NAME \"<valarray>\"\r\n\r\n#include <math.h>\r\n#include <valarray>\r\n\r\n#define FLOAT_TYPE IS_DOUBLE\r\n#include \"tdefs.h\"\r\n\r\ntypedef char Mytype;\r\ntypedef STD valarray<Mytype> Mycont;\r\n\r\nstatic const double e      = 2.7182818284590452353602874713526625L;\r\nstatic const double ln2    = 0.69314718055994530941723212145817657L;\r\nstatic const double piby4  = 0.78539816339744830961566084581987572L;\r\nstatic const double rthalf = 0.70710678118654752440084436210484904L;\r\n\r\nvoid test_math() { // test valarray math functions\r\n    typedef STD valarray<double> Myfloat;\r\n    Myfloat v0(1), v1(1);\r\n\r\n    v0[0] = -1.0;\r\n    CHECK(STD abs(v0)[0] == 1.0);\r\n\r\n    v0[0] = -1.0;\r\n    CHECK(approx(STD acos(v0)[0], 4.0 * piby4));\r\n\r\n    v0[0] = -1.0;\r\n    CHECK(approx(STD asin(v0)[0], -2.0 * piby4));\r\n\r\n    v0[0] = -1.0;\r\n    CHECK(approx(STD atan(v0)[0], -piby4));\r\n\r\n    v0[0] = -piby4;\r\n    CHECK(approx(STD cos(v0)[0], rthalf));\r\n\r\n    v0[0] = -piby4;\r\n    CHECK(approx(STD sin(v0)[0], -rthalf));\r\n\r\n    v0[0] = -piby4;\r\n    CHECK(approx(STD tan(v0)[0], -1.0));\r\n\r\n    v0[0] = -1.0;\r\n    CHECK(approx(STD cosh(v0)[0], (e + 1.0 / e) / 2.0));\r\n\r\n    v0[0] = ln2;\r\n    CHECK(approx(STD exp(v0)[0], 2.0));\r\n\r\n    v0[0] = e * e * e;\r\n    CHECK(approx(STD log(v0)[0], 3.0));\r\n\r\n    v0[0] = 1e5;\r\n    CHECK(approx(STD log10(v0)[0], 5.0));\r\n\r\n    v0[0] = -1.0;\r\n    CHECK(approx(STD sinh(v0)[0], -(e - 1.0 / e) / 2.0));\r\n\r\n    v0[0] = 2.0;\r\n    CHECK(approx(STD sqrt(v0)[0], 1.0 / rthalf));\r\n\r\n    v0[0] = -1.0;\r\n    CHECK(approx(STD tanh(v0)[0], -(e * e - 1.0) / (e * e + 1.0)));\r\n\r\n    v0[0] = -1.0;\r\n    v1[0] = 0.0;\r\n    CHECK(approx(STD atan2(v0, v1)[0], -2.0 * piby4));\r\n\r\n    v0[0] = 2.0;\r\n    v1[0] = -0.5;\r\n    CHECK(approx(STD pow(v0, v1)[0], rthalf));\r\n}\r\n\r\nMytype inc_val(Mytype val) { // increment operand\r\n    return (Mytype) (val + 1);\r\n}\r\n\r\nvoid test_main() { // test basic workings of valarray definitions\r\n    STD slice_array<Mytype>* psa    = (STD slice_array<Mytype>*) nullptr;\r\n    STD gslice_array<Mytype>* pga   = (STD gslice_array<Mytype>*) nullptr;\r\n    STD mask_array<Mytype>* pma     = (STD mask_array<Mytype>*) nullptr;\r\n    STD indirect_array<Mytype>* pia = (STD indirect_array<Mytype>*) nullptr;\r\n    STD slice* psl                  = (STD slice*) nullptr;\r\n    STD gslice* pgsl                = (STD gslice*) nullptr;\r\n\r\n    psa  = psa; // to quiet diagnostics\r\n    pga  = pga;\r\n    pma  = pma;\r\n    pia  = pia;\r\n    psl  = psl;\r\n    pgsl = pgsl;\r\n\r\n    Mycont v0, v1(4), v2('a', 5), v3(\"abcde\", 6);\r\n    const Mycont vx(\"abcdefghijklmnopqrstuvwxyz\", 27);\r\n    const CSTD size_t lv[] = {2, 3};\r\n    const CSTD size_t dv[] = {7, 2};\r\n    const bool vb[]        = {false, false, true, true, false, true};\r\n    const CSTD size_t vi[] = {7, 5, 2, 3, 8};\r\n\r\n    // test constructors\r\n    CHECK_INT(v0.size(), 0);\r\n    CHECK_INT(v1.size(), 4);\r\n    CHECK_INT(v1[3], '\\0');\r\n    CHECK_INT(v2.size(), 5);\r\n    CHECK_INT(v2[3], 'a');\r\n    CHECK_INT(v3.size(), 6);\r\n    CHECK_INT(v3[3], 'd');\r\n\r\n    Mycont y0(vx[STD slice(2, 5, 3)]);\r\n    CHECK_INT(y0.size(), 5);\r\n    CHECK_MEM(&y0[0], \"cfilo\", 5);\r\n\r\n    const STD valarray<CSTD size_t> len(lv, 2), str(dv, 2);\r\n    Mycont y1(vx[STD gslice(3, len, str)]);\r\n    CHECK_INT(y1.size(), 6);\r\n    CHECK_MEM(&y1[0], \"dfhkmo\", 6);\r\n\r\n    const STD valarray<bool> vmask(vb, 6);\r\n    Mycont y2(vx[vmask]);\r\n    CHECK_INT(y2.size(), 3);\r\n    CHECK_MEM(&y2[0], \"cdf\", 3);\r\n\r\n    const STD valarray<CSTD size_t> vind(vi, 5);\r\n    Mycont y3(vx[vind]);\r\n    CHECK_INT(y3.size(), 5);\r\n    CHECK_MEM(&y3[0], \"hfcdi\", 3);\r\n\r\n    // test assignments\r\n    v0 = v1;\r\n    CHECK_INT(v0.size(), 4);\r\n    CHECK_INT(v0[3], '\\0');\r\n\r\n    v0                     = vx;\r\n    v0[STD slice(2, 5, 3)] = Mycont(\"ABCDE\", 5);\r\n    CHECK_MEM(&v0[0], \"abAdeBghCjkDmnEpqrstuvwxyz\", 27);\r\n\r\n    v0                          = vx;\r\n    v0[STD gslice(3, len, str)] = Mycont(\"ABCDEF\", 6);\r\n    CHECK_MEM(&v0[0], \"abcAeBgCijDlEnFpqrstuvwxyz\", 27);\r\n\r\n    v0        = vx;\r\n    v0[vmask] = Mycont(\"ABCDE\", 5);\r\n    CHECK_MEM(&v0[0], \"abABeCghijklmnopqrstuvwxyz\", 27);\r\n\r\n    v0       = vx;\r\n    v0[vind] = Mycont(\"ABCDE\", 5);\r\n    CHECK_MEM(&v0[0], \"abCDeBgAEjklmnopqrstuvwxyz\", 27);\r\n\r\n    {\r\n        Mycont v6('x', 20);\r\n        Mycont v7(STD move(v6));\r\n        CHECK_INT(v6.size(), 0);\r\n        CHECK_INT(v7.size(), 20);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_INT(v7.size(), 0);\r\n        CHECK_INT(v8.size(), 20);\r\n\r\n        STD valarray<Movable_int> v9;\r\n        v9.resize(10);\r\n        CHECK_INT(v9.size(), 10);\r\n        CHECK_INT(v9[9].val, 0);\r\n    }\r\n\r\n    {\r\n        STD initializer_list<char> init{'a', 'b', 'c'};\r\n        Mycont v11(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11[2], 'c');\r\n\r\n        v11.resize(0);\r\n        v11 = init;\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11[2], 'c');\r\n    }\r\n\r\n    CHECK_INT(*STD begin(v3), 'a');\r\n    CHECK_INT(STD begin(v3)[1], 'b');\r\n    CHECK_INT(STD end(v3)[-2], 'e');\r\n    CHECK_INT(STD end(v3)[-1], '\\0');\r\n\r\n    // test subscripting\r\n    v0[2] = 'x';\r\n    CHECK_INT(v0[2], 'x');\r\n    CHECK_INT(vx[2], 'c');\r\n    CHECK_INT((vx[STD slice(2, 5, 3)])[2], 'i');\r\n    CHECK_INT((vx[STD gslice(3, len, str)])[2], 'h');\r\n    CHECK_INT((vx[vmask])[2], 'f');\r\n    CHECK_INT((vx[vind])[2], 'c');\r\n\r\n    // test unary ops\r\n    v0 = Mycont(\"\\2\\1\", 3);\r\n    CHECK_INT((+v0).size(), 3);\r\n    CHECK_INT(v0[1], 1);\r\n    CHECK_INT((-v0).size(), 3);\r\n    CHECK_INT((-v0)[1], -1);\r\n    CHECK_INT((~v0).size(), 3);\r\n    CHECK_INT((~v0)[1], ~1);\r\n    CHECK_INT((+v0).size(), 3);\r\n    CHECK(!(!v0)[1]);\r\n\r\n    // test assigning ops\r\n    Mytype val = 2;\r\n    v1         = Mycont(\"\\2\\2\\2\", 3);\r\n\r\n    v0 = Mycont(\"\\2\\3\\4\", 3);\r\n    CHECK_INT((v0 *= 3).size(), 3);\r\n    CHECK_INT(v0[1], 9);\r\n    CHECK_INT((v0 *= v1).size(), 3);\r\n    CHECK_INT(v0[1], 18);\r\n    CHECK_INT((v1 * val)[0], (v1 * v1)[0]);\r\n    CHECK_INT((val * v1)[2], (v1 * v1)[2]);\r\n\r\n    v0 = Mycont(\"\\2\\3\\4\", 3);\r\n    CHECK_INT((v0 /= 3).size(), 3);\r\n    CHECK_INT(v0[1], 1);\r\n    CHECK_INT((v0 /= v1).size(), 3);\r\n    CHECK_INT(v0[1], 0);\r\n    CHECK_INT((v1 / val)[0], (v1 / v1)[0]);\r\n    CHECK_INT((val / v1)[2], (v1 / v1)[2]);\r\n\r\n    v0 = Mycont(\"\\2\\3\\4\", 3);\r\n    CHECK_INT((v0 %= 3).size(), 3);\r\n    CHECK_INT(v0[1], 0);\r\n    CHECK_INT((v0 %= v1).size(), 3);\r\n    CHECK_INT(v0[1], 0);\r\n    CHECK_INT((v1 % val)[0], (v1 % v1)[0]);\r\n    CHECK_INT((val % v1)[2], (v1 % v1)[2]);\r\n\r\n    v0 = Mycont(\"\\2\\3\\4\", 3);\r\n    CHECK_INT((v0 += 3).size(), 3);\r\n    CHECK_INT(v0[1], 6);\r\n    CHECK_INT((v0 += v1).size(), 3);\r\n    CHECK_INT(v0[1], 8);\r\n    CHECK_INT((v1 + val)[0], (v1 + v1)[0]);\r\n    CHECK_INT((val + v1)[2], (v1 + v1)[2]);\r\n\r\n    v0 = Mycont(\"\\2\\3\\4\", 3);\r\n    CHECK_INT((v0 -= 3).size(), 3);\r\n    CHECK_INT(v0[1], 0);\r\n    CHECK_INT((v0 -= v1).size(), 3);\r\n    CHECK_INT(v0[1], (char) -2);\r\n    CHECK_INT((v1 - val)[0], (v1 - v1)[0]);\r\n    CHECK_INT((val - v1)[2], (v1 - v1)[2]);\r\n\r\n    v0 = Mycont(\"\\2\\3\\4\", 3);\r\n    CHECK_INT((v0 &= 3).size(), 3);\r\n    CHECK_INT(v0[1], 3);\r\n    CHECK_INT((v0 &= v1).size(), 3);\r\n    CHECK_INT(v0[1], 2);\r\n    CHECK_INT((v1 & val)[0], (v1 & v1)[0]);\r\n    CHECK_INT((val & v1)[2], (v1 & v1)[2]);\r\n\r\n    v0 = Mycont(\"\\2\\3\\4\", 3);\r\n    CHECK_INT((v0 |= 3).size(), 3);\r\n    CHECK_INT(v0[1], 3);\r\n    CHECK_INT((v0 |= v1).size(), 3);\r\n    CHECK_INT(v0[1], 3);\r\n    CHECK_INT((v1 | val)[0], (v1 | v1)[0]);\r\n    CHECK_INT((val | v1)[2], (v1 | v1)[2]);\r\n\r\n    v0 = Mycont(\"\\2\\3\\4\", 3);\r\n    CHECK_INT((v0 ^= 3).size(), 3);\r\n    CHECK_INT(v0[1], 0);\r\n    CHECK_INT((v0 ^= v1).size(), 3);\r\n    CHECK_INT(v0[1], 2);\r\n    CHECK_INT((v1 ^ val)[0], (v1 ^ v1)[0]);\r\n    CHECK_INT((val ^ v1)[2], (v1 ^ v1)[2]);\r\n\r\n    v0 = Mycont(\"\\2\\3\\4\", 3);\r\n    CHECK_INT((v0 <<= 3).size(), 3);\r\n    CHECK_INT(v0[1], 24);\r\n    CHECK_INT((v0 <<= v1).size(), 3);\r\n    CHECK_INT(v0[1], 96);\r\n    CHECK_INT((v1 << val)[0], (v1 << v1)[0]);\r\n    CHECK_INT((val << v1)[2], (v1 << v1)[2]);\r\n\r\n    v0 = Mycont(\"\\2\\3\\4\", 3);\r\n    CHECK_INT((v0 >>= 3).size(), 3);\r\n    CHECK_INT(v0[1], 0);\r\n    CHECK_INT((v0 >>= v1).size(), 3);\r\n    CHECK_INT(v0[1], 0);\r\n    CHECK_INT((v1 >> val)[0], (v1 >> v1)[0]);\r\n    CHECK_INT((val >> v1)[2], (v1 >> v1)[2]);\r\n\r\n    // test remaining binary operators\r\n    CHECK_INT((v1 && val)[0], (v1 && v1)[0]);\r\n    CHECK_INT((val && v1)[2], (v1 && v1)[2]);\r\n\r\n    CHECK_INT((v1 || val)[0], (v1 || v1)[0]);\r\n    CHECK_INT((val || v1)[2], (v1 || v1)[2]);\r\n\r\n    CHECK_INT((v1 == val)[0], (v1 == v1)[0]);\r\n    CHECK_INT((val == v1)[2], (v1 == v1)[2]);\r\n\r\n    CHECK_INT((v1 != val)[0], (v1 != v1)[0]);\r\n    CHECK_INT((val != v1)[2], (v1 != v1)[2]);\r\n\r\n    CHECK_INT((v1 < val)[0], (v1 < v1)[0]);\r\n    CHECK_INT((val < v1)[2], (v1 < v1)[2]);\r\n\r\n    CHECK_INT((v1 >= val)[0], (v1 >= v1)[0]);\r\n    CHECK_INT((val >= v1)[2], (v1 >= v1)[2]);\r\n\r\n    CHECK_INT((v1 > val)[0], (v1 > v1)[0]);\r\n    CHECK_INT((val > v1)[2], (v1 > v1)[2]);\r\n\r\n    CHECK_INT((v1 <= val)[0], (v1 <= v1)[0]);\r\n    CHECK_INT((val <= v1)[2], (v1 <= v1)[2]);\r\n\r\n    // test remaining member functions\r\n    v1 = Mycont(\"\\2\\3\\4\", 3);\r\n    CHECK_INT((v0 = v1.shift(1)).size(), 3);\r\n    CHECK_INT(v0[1], 4);\r\n    CHECK_INT((v0 = v1.shift(-1)).size(), 3);\r\n    CHECK_INT(v0[1], 2);\r\n\r\n    v1 = Mycont(\"\\2\\3\\4\", 3);\r\n    CHECK_INT((v0 = v1.cshift(2)).size(), 3);\r\n    CHECK_INT(v0[1], 2);\r\n    CHECK_INT((v0 = v1.cshift(-2)).size(), 3);\r\n    CHECK_INT(v0[1], 4);\r\n\r\n    v1 = Mycont(\"\\2\\3\\4\", 3);\r\n    CHECK_INT((v0 = v1.apply(&inc_val)).size(), 3);\r\n    CHECK_INT(v0[1], 4);\r\n\r\n    v0 = Mycont(\"\\2\\3\\4\", 3);\r\n    v0.resize(1);\r\n    CHECK_INT(v0.size(), 1);\r\n    v0.resize(10, '\\7');\r\n    CHECK_INT(v0.size(), 10);\r\n    CHECK_INT(v0[1], '\\7');\r\n\r\n    v0 = Mycont(\"\\2\\3\\4\", 3);\r\n    CHECK_INT(v0.sum(), 9);\r\n    CHECK_INT(v0.max(), 4);\r\n    CHECK_INT(v0.min(), 2);\r\n\r\n    // test range-based for\r\n    v0 = Mycont();\r\n    for (char c : v0) {\r\n        (void) c;\r\n        CHECK(false);\r\n    }\r\n\r\n    v0 = Mycont(\"\\1\\1\\1\", 3);\r\n    for (char c : v0) {\r\n        CHECK_INT(c, 1);\r\n    }\r\n\r\n    v0  = Mycont(\"\\1\\2\\3\", 3);\r\n    val = 0;\r\n    for (char c : v0) {\r\n        val += c;\r\n    }\r\n    CHECK_INT(val, 6);\r\n\r\n    test_math();\r\n}\r\n"
  },
  {
    "path": "tests/tr1/tests/vector/test.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// test <vector>\r\n#define TEST_NAME \"<vector>\"\r\n\r\n// Since P3612R1 the static vector<bool>::swap(reference, reference) is deprecated\r\n#define _SILENCE_VECTOR_BOOL_STATIC_REFERENCE_SWAP_DEPRECATION_WARNING\r\n\r\n#include \"tdefs.h\"\r\n#include <stddef.h>\r\n#include <vector>\r\n\r\ntypedef STD allocator<char> Myal;\r\ntypedef STD vector<char, Myal> Mycont;\r\n\r\nvoid test_main() { // test basic workings of vector definitions\r\n    char ch     = '\\0';\r\n    char carr[] = \"abc\";\r\n\r\n    Mycont::allocator_type* p_alloc = (Myal*) nullptr;\r\n    Mycont::pointer p_ptr           = (char*) nullptr;\r\n    Mycont::const_pointer p_cptr    = (const char*) nullptr;\r\n    Mycont::reference p_ref         = ch;\r\n    Mycont::const_reference p_cref  = (const char&) ch;\r\n    Mycont::value_type* p_val       = (char*) nullptr;\r\n    Mycont::size_type* p_size       = (CSTD size_t*) nullptr;\r\n    Mycont::difference_type* p_diff = (CSTD ptrdiff_t*) nullptr;\r\n\r\n    p_alloc = p_alloc; // to quiet diagnostics\r\n    p_ptr   = p_ptr;\r\n    p_cptr  = p_cptr;\r\n    p_ref   = p_cref;\r\n    p_size  = p_size;\r\n    p_diff  = p_diff;\r\n    p_val   = p_val;\r\n\r\n    Mycont v0;\r\n    Myal al = v0.get_allocator();\r\n    Mycont v0a(al);\r\n    CHECK(v0.empty());\r\n    CHECK_INT(v0.size(), 0);\r\n    CHECK_INT(v0a.size(), 0);\r\n    CHECK(v0a.get_allocator() == al);\r\n\r\n    Mycont v1(5), v1a(6, 'x'), v1b(7, 'y', al);\r\n    CHECK_INT(v1.size(), 5);\r\n    CHECK_INT(v1.back(), '\\0');\r\n    CHECK_INT(v1a.size(), 6);\r\n    CHECK_INT(v1a.back(), 'x');\r\n    CHECK_INT(v1b.size(), 7);\r\n    CHECK_INT(v1b.back(), 'y');\r\n\r\n    Mycont v2(v1a);\r\n    CHECK_INT(v2.size(), 6);\r\n    CHECK_INT(v2.front(), 'x');\r\n\r\n    Mycont v2a(v2, al);\r\n    CHECK_INT(v2a.size(), 6);\r\n    CHECK_INT(v2a.front(), 'x');\r\n\r\n    Mycont v3(v1a.begin(), v1a.end());\r\n    CHECK_INT(v3.size(), 6);\r\n    CHECK_INT(v3.front(), 'x');\r\n\r\n    const Mycont v4(v1a.begin(), v1a.end(), al);\r\n    CHECK_INT(v4.size(), 6);\r\n    CHECK_INT(v4.front(), 'x');\r\n    v0 = v4;\r\n    CHECK_INT(v0.size(), 6);\r\n    CHECK_INT(v0.front(), 'x');\r\n    CHECK_INT(v0[0], 'x');\r\n    CHECK_INT(v0.at(5), 'x');\r\n\r\n    v0.reserve(12);\r\n    CHECK(12 <= v0.capacity());\r\n    v0.resize(8);\r\n    CHECK_INT(v0.size(), 8);\r\n    CHECK_INT(v0.back(), '\\0');\r\n    v0.resize(10, 'z');\r\n    CHECK_INT(v0.size(), 10);\r\n    CHECK_INT(v0.back(), 'z');\r\n    CHECK(v0.size() <= v0.max_size());\r\n\r\n    STD vector<char>* p_cont = &v0;\r\n    p_cont                   = p_cont; // to quiet diagnostics\r\n\r\n    { // check iterator generators\r\n        Mycont::iterator p_it(v0.begin());\r\n        Mycont::const_iterator p_cit(v4.begin());\r\n        Mycont::reverse_iterator p_rit(v0.rbegin());\r\n        Mycont::const_reverse_iterator p_crit(v4.rbegin());\r\n        CHECK_INT(*p_it, 'x');\r\n        CHECK_INT(*--(p_it = v0.end()), 'z');\r\n        CHECK_INT(*p_cit, 'x');\r\n        CHECK_INT(*--(p_cit = v4.end()), 'x');\r\n        CHECK_INT(*p_rit, 'z');\r\n        CHECK_INT(*--(p_rit = v0.rend()), 'x');\r\n        CHECK_INT(*p_crit, 'x');\r\n        CHECK_INT(*--(p_crit = v4.rend()), 'x');\r\n\r\n        Mycont::const_iterator p_it1 = Mycont::const_iterator();\r\n        Mycont::const_iterator p_it2 = Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    { // check const iterators generators\r\n        Mycont::const_iterator p_it(v0.cbegin());\r\n        Mycont::const_iterator p_cit(v4.cbegin());\r\n        Mycont::const_reverse_iterator p_rit(v0.crbegin());\r\n        Mycont::const_reverse_iterator p_crit(v4.crbegin());\r\n        CHECK_INT(*p_it, 'x');\r\n        CHECK_INT(*--(p_it = v0.cend()), 'z');\r\n        CHECK_INT(*p_cit, 'x');\r\n        CHECK_INT(*--(p_cit = v4.cend()), 'x');\r\n        CHECK_INT(*p_rit, 'z');\r\n        CHECK_INT(*--(p_rit = v0.crend()), 'x');\r\n        CHECK_INT(*p_crit, 'x');\r\n        CHECK_INT(*--(p_crit = v4.crend()), 'x');\r\n\r\n        Mycont::const_iterator p_it1 = Mycont::const_iterator();\r\n        Mycont::const_iterator p_it2 = Mycont::const_iterator();\r\n        CHECK(p_it1 == p_it2); // check null forward iterator comparisons\r\n    }\r\n\r\n    CHECK_INT(v0.front(), 'x');\r\n    CHECK_INT(v4.front(), 'x');\r\n\r\n    v0.push_back('a');\r\n    CHECK_INT(v0.back(), 'a');\r\n    v0.pop_back();\r\n    CHECK_INT(v0.back(), 'z');\r\n    CHECK_INT(v4.back(), 'x');\r\n\r\n    {\r\n        Mycont v5;\r\n        v5.resize(10);\r\n        CHECK_INT(v5.size(), 10);\r\n        CHECK_INT(v5[9], 0);\r\n\r\n        Mycont v6(20, 'x');\r\n        Mycont v7(STD move(v6));\r\n        CHECK_INT(v6.size(), 0);\r\n        CHECK_INT(v7.size(), 20);\r\n\r\n        Mycont v8;\r\n        v8 = STD move(v7);\r\n        CHECK_INT(v7.size(), 0);\r\n        CHECK_INT(v8.size(), 20);\r\n\r\n        Mycont v8a(STD move(v8), Myal());\r\n        CHECK_INT(v8.size(), 0);\r\n        CHECK_INT(v8a.size(), 20);\r\n\r\n        STD vector<Movable_int> v9;\r\n        v9.resize(10);\r\n        CHECK_INT(v9.size(), 10);\r\n        CHECK_INT(v9[9].val, 0);\r\n\r\n        STD vector<Movable_int> v10;\r\n        Movable_int mi1(1);\r\n        v10.push_back(STD move(mi1));\r\n        CHECK_INT(mi1.val, -1);\r\n        CHECK_INT(v10[0].val, 1);\r\n\r\n        Movable_int mi3(3);\r\n        v10.insert(v10.begin(), STD move(mi3));\r\n        CHECK_INT(mi3.val, -1);\r\n        CHECK_INT(v10[0].val, 3);\r\n        CHECK_INT(v10[1].val, 1);\r\n\r\n        v10.emplace_back();\r\n        CHECK_INT(v10.back().val, 0);\r\n        v10.emplace_back(2);\r\n        CHECK_INT(v10.back().val, 2);\r\n        v10.emplace_back(3, 2);\r\n        CHECK_INT(v10.back().val, 0x32);\r\n        v10.emplace_back(4, 3, 2);\r\n        CHECK_INT(v10.back().val, 0x432);\r\n        v10.emplace_back(5, 4, 3, 2);\r\n        CHECK_INT(v10.back().val, 0x5432);\r\n        v10.emplace_back(6, 5, 4, 3, 2);\r\n        CHECK_INT(v10.back().val, 0x65432);\r\n\r\n        v10.emplace(v10.begin() + 1);\r\n        CHECK_INT(v10[1].val, 0);\r\n        v10.emplace(v10.begin() + 1, 2);\r\n        CHECK_INT(v10[1].val, 2);\r\n        v10.emplace(v10.begin() + 1, 3, 2);\r\n        CHECK_INT(v10[1].val, 0x32);\r\n        v10.emplace(v10.begin() + 1, 4, 3, 2);\r\n        CHECK_INT(v10[1].val, 0x432);\r\n        v10.emplace(v10.begin() + 1, 5, 4, 3, 2);\r\n        CHECK_INT(v10[1].val, 0x5432);\r\n        v10.emplace(v10.begin() + 1, 6, 5, 4, 3, 2);\r\n        CHECK_INT(v10[1].val, 0x65432);\r\n    }\r\n\r\n    { // check for lvalue stealing\r\n        STD vector<Copyable_int> v11;\r\n        Copyable_int ci1(1);\r\n        v11.push_back(ci1);\r\n        CHECK_INT(ci1.val, 1);\r\n        CHECK_INT(v11[0].val, 1);\r\n\r\n        Copyable_int ci3(3);\r\n        v11.insert(v11.begin(), ci3);\r\n        CHECK_INT(ci3.val, 3);\r\n        CHECK_INT(v11[0].val, 3);\r\n        CHECK_INT(v11[1].val, 1);\r\n\r\n        STD vector<Copyable_int> v12(v11);\r\n        CHECK(v11 == v12);\r\n        v11 = v12;\r\n        CHECK(v11 == v12);\r\n    }\r\n\r\n    { // check front/back\r\n        Mycont::iterator p_it;\r\n        v0.assign(v4.begin(), v4.end());\r\n        CHECK_INT(v0.size(), v4.size());\r\n        CHECK_INT(v0.front(), v4.front());\r\n        v0.assign(4, 'w');\r\n        CHECK_INT(v0.size(), 4);\r\n        CHECK_INT(v0.front(), 'w');\r\n        CHECK_INT(*v0.insert(v0.begin(), 'a'), 'a');\r\n        CHECK_INT(v0.front(), 'a');\r\n        CHECK_INT(*++(p_it = v0.begin()), 'w');\r\n        CHECK_INT(*v0.insert(v0.begin(), 2, 'b'), 'b');\r\n        CHECK_INT(v0.front(), 'b');\r\n        CHECK_INT(*++(p_it = v0.begin()), 'b');\r\n        CHECK_INT(*++ ++(p_it = v0.begin()), 'a');\r\n        CHECK_INT(*v0.insert(v0.end(), v4.begin(), v4.end()), *v4.begin());\r\n        CHECK_INT(v0.back(), v4.back());\r\n        CHECK_INT(*v0.insert(v0.end(), carr, carr + 3), *carr);\r\n        CHECK_INT(v0.back(), 'c');\r\n        v0.erase(v0.begin());\r\n        CHECK_INT(v0.front(), 'b');\r\n        CHECK_INT(*++(p_it = v0.begin()), 'a');\r\n        v0.erase(v0.begin(), ++(p_it = v0.begin()));\r\n        CHECK_INT(v0.front(), 'a');\r\n    }\r\n\r\n    { // test added C++11 functionality\r\n        Mycont v0x;\r\n\r\n        char* pd = v0x.data();\r\n        CHECK_PTR(pd, nullptr);\r\n        v0x.push_back('a');\r\n        CHECK_INT(*v0x.data(), 'a');\r\n\r\n        v0x.shrink_to_fit();\r\n        CHECK_INT(*v0x.data(), 'a');\r\n    }\r\n\r\n    {\r\n        STD initializer_list<char> init{'a', 'b', 'c'};\r\n        Mycont v11(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11[2], 'c');\r\n\r\n        v11.clear();\r\n        v11 = init;\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11[2], 'c');\r\n\r\n        v11.insert(v11.begin() + 1, init);\r\n        CHECK_INT(v11.size(), 6);\r\n        CHECK_INT(v11[2], 'b');\r\n\r\n        v11.assign(init);\r\n        CHECK_INT(v11.size(), 3);\r\n        CHECK_INT(v11[2], 'c');\r\n    }\r\n\r\n    v0.clear();\r\n    CHECK(v0.empty());\r\n    v0.swap(v1);\r\n    CHECK(!v0.empty());\r\n    CHECK(v1.empty());\r\n    STD swap(v0, v1);\r\n    CHECK(v0.empty());\r\n    CHECK(!v1.empty());\r\n    CHECK(v1 == v1);\r\n    CHECK(v0 < v1);\r\n    CHECK(v0 != v1);\r\n    CHECK(v1 > v0);\r\n    CHECK(v0 <= v1);\r\n    CHECK(v1 >= v0);\r\n\r\n    { // test vector<bool>\r\n        typedef STD vector<bool, STD allocator<bool>> Bvector;\r\n\r\n        Bvector bv(3);\r\n        bv[0] = !bv[1];\r\n        bv.flip();\r\n        CHECK(!bv[0]);\r\n        CHECK(bv[1]);\r\n        CHECK(bv[2]);\r\n\r\n        Bvector::swap(bv[0], bv[1]);\r\n        CHECK(bv[0]);\r\n        CHECK(!bv[1]);\r\n\r\n        Bvector::reference bref = bv[0];\r\n        bref.flip();\r\n        CHECK(!bv[0]);\r\n        bref = bv.back();\r\n        CHECK(bv[0]);\r\n\r\n        Bvector::iterator bit = bv.end();\r\n        bref                  = !bit[-1];\r\n        CHECK(!bv[0]);\r\n\r\n        Bvector* p_bv = &bv;\r\n        p_bv          = p_bv; // to quiet diagnostics\r\n\r\n        {\r\n            Bvector bv1(3);\r\n            Bvector bv2(STD move(bv1));\r\n            CHECK_INT(bv1.size(), 0);\r\n            CHECK_INT(bv2.size(), 3);\r\n\r\n            Bvector bv3;\r\n            bv3 = STD move(bv2);\r\n            CHECK_INT(bv2.size(), 0);\r\n            CHECK_INT(bv3.size(), 3);\r\n        }\r\n\r\n        {\r\n            Bvector bv1(3);\r\n            bv1[1].flip();\r\n            bv1.shrink_to_fit();\r\n            CHECK(bv1[1]);\r\n\r\n            bv1.emplace_back();\r\n            CHECK(!bv1[3]);\r\n            bv1.emplace_back(true);\r\n            CHECK(bv1[4]);\r\n            bv1.emplace_back(false);\r\n            CHECK(!bv1[5]);\r\n\r\n            bv1.emplace(bv1.begin(), true);\r\n            CHECK(bv1[0]);\r\n            bv1.emplace(bv1.begin(), false);\r\n            CHECK(!bv1[0]);\r\n            bv1.emplace(bv1.begin());\r\n            CHECK(!bv1[0]);\r\n\r\n            STD hash<Bvector> hasher;\r\n            CHECK_INT(hasher(bv1), hasher(bv1));\r\n        }\r\n\r\n        {\r\n            STD initializer_list<bool> init{false, true, false};\r\n            Bvector bv11(init);\r\n            CHECK_INT(bv11.size(), 3);\r\n            CHECK_INT(bv11[2], false);\r\n\r\n            bv11.clear();\r\n            bv11 = init;\r\n            CHECK_INT(bv11.size(), 3);\r\n            CHECK_INT(bv11[2], false);\r\n\r\n            CHECK_INT(*bv11.insert(bv11.begin() + 1, init), false);\r\n            CHECK_INT(bv11.size(), 6);\r\n            CHECK_INT(bv11[2], true);\r\n\r\n            bv11.assign(init);\r\n            CHECK_INT(bv11.size(), 3);\r\n            CHECK_INT(bv11[2], false);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/universal_prefix.lst",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n*\tPM_CL=\"/nologo /Od /W4 /w14061 /w14242 /w14265 /w14582 /w14583 /w14587 /w14588 /w14749 /w14841 /w14842 /w15038 /w15214 /w15215 /w15216 /w15217 /w15262 /sdl /WX /D_ENABLE_STL_INTERNAL_CHECK /bigobj\" PM_LINK=\"/MANIFEST:EMBED /OPT:REF,NOICF\"\r\n"
  },
  {
    "path": "tests/utils/stl/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n"
  },
  {
    "path": "tests/utils/stl/test/__init__.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n"
  },
  {
    "path": "tests/utils/stl/test/config.py",
    "content": "#===----------------------------------------------------------------------===##\r\n#\r\n# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n# See https://llvm.org/LICENSE.txt for license information.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n#\r\n#===----------------------------------------------------------------------===##\r\n\r\nimport os\r\n\r\ndef configure(parameters, features, config, lit_config):\r\n  # Apply the actions supplied by parameters to the configuration first, since\r\n  # parameters are things that we request explicitly and which might influence\r\n  # what features are implicitly made available next.\r\n  for param in parameters:\r\n    actions = param.getActions(config, lit_config.params)\r\n    for action in actions:\r\n      action.applyTo(config)\r\n      #lit_config.note(\"Applied '{}' as a result of parameter '{}'\".format(\r\n      #  action.pretty(config, lit_config.params),\r\n      #  param.pretty(config, lit_config.params)))\r\n\r\n  # Then, apply the automatically-detected features.\r\n  for feature in features:\r\n    actions = feature.getActions(config)\r\n    for action in actions:\r\n      action.applyTo(config)\r\n      #lit_config.note(\"Applied '{}' as a result of implicitly detected feature '{}'\".format(\r\n      #  action.pretty(config, lit_config.params),\r\n      #  feature.pretty(config)))\r\n\r\n  # Normalize and validate all subdirectories to be tested\r\n  lit_config.test_subdirs[config.name] = [os.path.normpath(subdir) for subdir in lit_config.test_subdirs[config.name]]\r\n  for subdir in lit_config.test_subdirs[config.name]:\r\n    if not os.path.exists(subdir):\r\n        lit_config.fatal(\"The directory {} does not exist and was marked as a subdirectory to test\".format(subdir))\r\n\r\n  lit_config.flags         = getattr(lit_config, 'flags', dict())\r\n  lit_config.compile_flags = getattr(lit_config, 'compile_flags', dict())\r\n  lit_config.link_flags    = getattr(lit_config, 'link_flags', dict())\r\n\r\n  lit_config.flags[config.name] = []\r\n  lit_config.compile_flags[config.name] = \\\r\n    ['-I' + os.path.normpath(dir) for dir in lit_config.include_dirs[config.name]]\r\n  lit_config.link_flags[config.name] = \\\r\n    ['-LIBPATH:' + os.path.normpath(dir) for dir in lit_config.library_dirs[config.name]]\r\n\r\n  lit_config.test_env = {'PATH' : os.path.normpath(lit_config.cxx_runtime)}\r\n\r\n  # Add a parallelism group that multi-threaded tests can be marked as a part of.\r\n  lit_config.parallelism_groups['multi-threaded'] = 1\r\n"
  },
  {
    "path": "tests/utils/stl/test/features.py",
    "content": "#===----------------------------------------------------------------------===//\r\n#\r\n# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n# See https://llvm.org/LICENSE.txt for license information.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n#\r\n#===----------------------------------------------------------------------===//\r\n\r\nimport locale\r\nimport os\r\nfrom libcxx.test.dsl import Feature\r\n\r\ndef hasLocale(loc):\r\n    assert loc is not None\r\n    default_locale = locale.setlocale(locale.LC_ALL)\r\n    try:\r\n        locale.setlocale(locale.LC_ALL, loc)\r\n        return True\r\n    except locale.Error:\r\n        return False\r\n    finally:\r\n        locale.setlocale(locale.LC_ALL, default_locale)\r\n\r\ndef getDefaultFeatures(config, litConfig):\r\n    DEFAULT_FEATURES = [\r\n        Feature(name='has-64-bit-atomics'),\r\n        Feature(name='has-1024-bit-atomics'),\r\n        Feature(name='has-no-zdump'),\r\n        Feature(name='msvc'),\r\n        Feature(name='windows'),\r\n    ]\r\n    locales = {\r\n      'en_US.UTF-8':     ['en_US.UTF-8', 'en_US.utf8', 'English_United States.1252'],\r\n      'fr_FR.UTF-8':     ['fr_FR.UTF-8', 'fr_FR.utf8', 'French_France.1252'],\r\n      'ja_JP.UTF-8':     ['ja_JP.UTF-8', 'ja_JP.utf8', 'Japanese_Japan.932'],\r\n      'ru_RU.UTF-8':     ['ru_RU.UTF-8', 'ru_RU.utf8', 'Russian_Russia.1251'],\r\n      'zh_CN.UTF-8':     ['zh_CN.UTF-8', 'zh_CN.utf8', 'Chinese_China.936'],\r\n      'fr_CA.ISO8859-1': ['fr_CA.ISO8859-1', 'French_Canada.1252'],\r\n      'cs_CZ.ISO8859-2': ['cs_CZ.ISO8859-2', 'Czech_Czechia.1250']\r\n    }\r\n    for loc, alts in locales.items():\r\n      if any(hasLocale(alt) for alt in alts):\r\n        DEFAULT_FEATURES.append(Feature(name=f'locale.{loc}'))\r\n    env_var = 'STL_EDG_DROP'\r\n    litConfig.edg_drop = None\r\n    if env_var in os.environ and os.environ[env_var] is not None:\r\n        litConfig.edg_drop = os.environ[env_var]\r\n        DEFAULT_FEATURES.append(Feature(name='edg_drop'))\r\n\r\n    if litConfig.target_arch.casefold() == 'x86'.casefold():\r\n        DEFAULT_FEATURES.append(Feature(name='arch_avx2'))\r\n        DEFAULT_FEATURES.append(Feature(name='x86'))\r\n\r\n    elif litConfig.target_arch.casefold() == 'x64'.casefold():\r\n        DEFAULT_FEATURES.append(Feature(name='ubsan'))\r\n        DEFAULT_FEATURES.append(Feature(name='edg'))\r\n        DEFAULT_FEATURES.append(Feature(name='arch_avx2'))\r\n        DEFAULT_FEATURES.append(Feature(name='x64'))\r\n\r\n    elif litConfig.target_arch.casefold() == 'arm64'.casefold():\r\n        DEFAULT_FEATURES.append(Feature(name='arm64'))\r\n\r\n    elif litConfig.target_arch.casefold() == 'arm64ec'.casefold():\r\n        DEFAULT_FEATURES.append(Feature(name='arm64ec'))\r\n\r\n    return DEFAULT_FEATURES\r\n"
  },
  {
    "path": "tests/utils/stl/test/file_parsing.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nfrom dataclasses import dataclass, field\r\nfrom pathlib import Path\r\nfrom typing import Dict, List, Optional, Set, Tuple, Union\r\nimport itertools\r\nimport os\r\nimport re\r\n\r\nimport lit.Test\r\n\r\nimport stl.test.tests\r\n\r\n_envlst_cache = dict()\r\n_preprocessed_file_cache = dict()\r\n_expected_result_entry_cache = dict()\r\n\r\n\r\n@dataclass\r\nclass _TmpEnvEntry:\r\n    env: Dict[str, str] = field(default_factory=dict)\r\n    tags: Set[str] = field(default_factory=set)\r\n\r\n\r\n@dataclass(frozen=True)\r\nclass EnvEntry:\r\n    def __init__(self, tmp_env: _TmpEnvEntry):\r\n        object.__setattr__(self, \"_env_keys\", tuple(tmp_env.env.keys()))\r\n        object.__setattr__(self, \"_env_vals\", tuple(tmp_env.env.values()))\r\n        object.__setattr__(self, \"_env_tags\", tmp_env.tags)\r\n\r\n    def hasAnyTag(self, tags: Set[str]) -> bool:\r\n        return bool(self._env_tags & tags)\r\n\r\n    def getEnvVal(self, key: str, default: Optional[str] = None) \\\r\n            -> Optional[str]:\r\n        if key not in self._env_keys:\r\n            return default\r\n\r\n        # TRANSITION: All of this is to avoid having to install frozendict.\r\n        # Reconsider this at a future date.\r\n        return self._env_vals[self._env_keys.index(key)]\r\n\r\n    _env_keys: Tuple[str]\r\n    _env_vals: Tuple[str]\r\n    _env_tags: Set[str]\r\n\r\n\r\n@dataclass\r\nclass _ParseCtx:\r\n    current: List[_TmpEnvEntry] = field(default_factory=list)\r\n    result: List[List[_TmpEnvEntry]] = field(default_factory=list)\r\n\r\n\r\n_COMMENT_REGEX = re.compile(r\"\\s*#.*\", re.DOTALL)\r\n_INCLUDE_REGEX = re.compile(r'^RUNALL_INCLUDE (?P<filename>.+$)')\r\n_TAGS_REGEX = re.compile(r'^(?P<tags>(\\*|\\w+(,\\w+)*))\\t+(?P<remainder>.*)$')\r\n_ENV_VAR_MULTI_ITEM_REGEX = re.compile(r'(?P<name>\\w+)=\"(?P<value>.*?)\"')\r\n_CROSSLIST_REGEX = re.compile(r'^RUNALL_CROSSLIST$')\r\n_EXPECTED_RESULT_REGEX = re.compile(r'^(?P<prefix>[^ ]+) (?P<result>\\w+)$')\r\n\r\n\r\ndef _parse_env_line(line: str) -> Optional[_TmpEnvEntry]:\r\n    result = _TmpEnvEntry()\r\n    if (m:=_TAGS_REGEX.match(line)) is not None:\r\n        tags = m.group(\"tags\").split(',')\r\n        result.tags = set([x.strip().casefold() for x in tags])\r\n        line = m.group(\"remainder\")\r\n    for env_match in _ENV_VAR_MULTI_ITEM_REGEX.finditer(line):\r\n        name = env_match.group(\"name\")\r\n        value = env_match.group(\"value\")\r\n        result.env[name] = value\r\n    return result\r\n\r\n\r\ndef _merge_crosslist_entries(*args) -> _TmpEnvEntry:\r\n    result = _TmpEnvEntry()\r\n    result.tags = set(['*'])\r\n    for entry in args:\r\n        # tags are intersected; `*` matches everything\r\n        if len(entry.tags) == 1 and '*' in entry.tags:\r\n            pass\r\n        elif len(result.tags) == 1 and '*' in result.tags:\r\n            result.tags = entry.tags\r\n        else:\r\n            result.tags &= entry.tags\r\n\r\n        # values for identical keys are concatenated\r\n        for k, v in entry.env.items():\r\n            if k not in result.env:\r\n                result.env[k] = v\r\n            else:\r\n                result.env[k] = ' '.join((result.env[k], v))\r\n    return result\r\n\r\n\r\ndef _do_crosslist(ctx: _ParseCtx):\r\n    return itertools.starmap(_merge_crosslist_entries,\r\n                             itertools.product(*ctx.result))\r\n\r\n\r\ndef _parse_env_lst(env_lst: Path, ctx: _ParseCtx):\r\n    for _, line in _parse_commented_file(env_lst):\r\n        if (m:=_INCLUDE_REGEX.match(line)) is not None:\r\n            p = env_lst.parent / Path(m.group(\"filename\"))\r\n            _parse_env_lst(p, ctx)\r\n        elif _CROSSLIST_REGEX.match(line) is not None:\r\n            ctx.result.append(ctx.current)\r\n            ctx.current = []\r\n        else:\r\n            ctx.current.append(_parse_env_line(line))\r\n\r\n\r\ndef _parse_commented_file(filename: Union[str, bytes, os.PathLike]) \\\r\n        -> List[Tuple[int, str]]:\r\n    if str(filename) in _preprocessed_file_cache:\r\n        return _preprocessed_file_cache[str(filename)]\r\n\r\n    filename_path = Path(filename)\r\n    result = list()\r\n    with filename_path.open() as f:\r\n        for line_number, line in enumerate(f.readlines(), start=1):\r\n            if (line:=_COMMENT_REGEX.sub(\"\", line)):\r\n                line = line.strip()\r\n                if line:\r\n                    result.append((line_number, line))\r\n\r\n        _preprocessed_file_cache[str(filename)] = result\r\n        return result\r\n\r\n\r\ndef parse_result_file(filename: Union[str, bytes, os.PathLike]) \\\r\n        -> Dict[str, lit.Test.ResultCode]:\r\n    if str(filename) in _expected_result_entry_cache:\r\n        return _expected_result_entry_cache[str(filename)]\r\n\r\n    res = dict()\r\n    for line_number, line in _parse_commented_file(filename):\r\n        m = _EXPECTED_RESULT_REGEX.match(line)\r\n        if m is None:\r\n            raise Exception(f'Incorrectly formatted line {line_number}: \"{line}\" in {filename}.')\r\n        prefix = m.group(\"prefix\")\r\n        result = m.group(\"result\")\r\n        result_code = getattr(lit.Test, result, None)\r\n        if result_code is None:\r\n            result_code = getattr(stl.test.tests, result, None)\r\n        if result_code is None:\r\n            raise Exception(f'Unknown result code \"{result}\" in line {line_number}: \"{line}\" in {filename}.')\r\n        res[prefix] = result_code\r\n\r\n    _expected_result_entry_cache[str(filename)] = res\r\n    return res\r\n\r\n\r\ndef parse_env_lst_file(env_list: Union[str, bytes, os.PathLike]) \\\r\n        -> Tuple[EnvEntry, ...]:\r\n    if str(env_list) in _envlst_cache:\r\n        return _envlst_cache[str(env_list)]\r\n\r\n    env_list_path = Path(env_list)\r\n    ctx = _ParseCtx()\r\n    _parse_env_lst(env_list_path, ctx)\r\n    ctx.result.append(ctx.current)\r\n    res = tuple(map(EnvEntry, _do_crosslist(ctx)))\r\n    _envlst_cache[env_list] = res\r\n    return res\r\n"
  },
  {
    "path": "tests/utils/stl/test/format.py",
    "content": "#===----------------------------------------------------------------------===##\r\n#\r\n# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n# See https://llvm.org/LICENSE.txt for license information.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n#\r\n#===----------------------------------------------------------------------===##\r\n\r\nfrom dataclasses import dataclass, field\r\nfrom pathlib import Path\r\nfrom typing import Dict, List, Optional\r\nimport itertools\r\nimport os\r\nimport re\r\nimport shutil\r\nimport sys\r\n\r\nimport lit\r\n\r\nfrom stl.test.tests import LibcxxTest, STLTest, TestType\r\nimport stl.test.file_parsing\r\nimport stl.util\r\n\r\n\r\n@dataclass\r\nclass TestStep:\r\n    cmd: List[str] = field(default_factory=list)\r\n    workDir: os.PathLike = field(default=Path('.'))\r\n    env: Dict[str, str] = field(default_factory=dict)\r\n    shouldFail: bool = field(default=False)\r\n\r\ndef _mergeEnvironments(currentEnv, otherEnv):\r\n    \"\"\"Merges two execution environments.\r\n\r\n    If both environments contain PATH variables, they are also merged\r\n    using the proper separator.\r\n    \"\"\"\r\n    resultEnv = dict(currentEnv)\r\n    for k, v in otherEnv.items():\r\n        if k == 'PATH':\r\n            oldPath = currentEnv.get(k, '')\r\n            if oldPath != '':\r\n                resultEnv[k] = ';'.join((oldPath, v))\r\n            else:\r\n                resultEnv[k] = v\r\n        else:\r\n            resultEnv[k] = v\r\n\r\n    return resultEnv\r\n\r\ndef _getEnvLst(sourcePath, localConfig):\r\n    envlstPath = getattr(localConfig, 'envlst_path', None)\r\n    if envlstPath is None:\r\n        cwd = Path(sourcePath)\r\n        if (cwd / 'env.lst').is_file():\r\n            envlstPath = cwd / 'env.lst'\r\n        else:\r\n            for parent in cwd.parents:\r\n                if (parent / 'env.lst').is_file():\r\n                    envlstPath = parent / 'env.lst'\r\n                    break\r\n\r\n    return envlstPath\r\n\r\ndef _isLegalDirectory(sourcePath, test_subdirs):\r\n    for prefix in test_subdirs:\r\n        common = os.path.normpath(os.path.commonpath((sourcePath, prefix)))\r\n        if os.path.samefile(common, sourcePath) or os.path.samefile(common, prefix):\r\n            return True\r\n\r\n    return False\r\n\r\n\r\nclass STLTestFormat:\r\n    \"\"\"\r\n    Custom test format handler to run MSVC tests.\r\n    \"\"\"\r\n    def getTestsInDirectory(self, testSuite, pathInSuite, litConfig, localConfig, testClass=STLTest):\r\n        sourcePath = testSuite.getSourcePath(pathInSuite)\r\n        if not _isLegalDirectory(sourcePath, litConfig.test_subdirs[localConfig.name]):\r\n            return\r\n\r\n        envlstPath = _getEnvLst(sourcePath, localConfig)\r\n\r\n        envEntries = None\r\n        if envlstPath is not None:\r\n            envEntries = stl.test.file_parsing.parse_env_lst_file(envlstPath)\r\n            formatString = '{:0' + str(len(str(len(envEntries)))) + 'd}'\r\n\r\n        sourcePath = testSuite.getSourcePath(pathInSuite)\r\n        for filename in os.listdir(sourcePath):\r\n            # Ignore dot files and excluded tests.\r\n            if filename.startswith('.') or filename in localConfig.excludes:\r\n                continue\r\n\r\n            filepath = os.path.join(sourcePath, filename)\r\n            if not os.path.isdir(filepath):\r\n                if any([re.search(ext, filename) for ext in localConfig.suffixes]):\r\n                    if envEntries is None:\r\n                        litConfig.fatal(\"Could not find an env.lst file.\")\r\n\r\n                    for envEntry, envNum in zip(envEntries, itertools.count()):\r\n                        yield testClass(testSuite, pathInSuite + (filename,),\r\n                                        litConfig, localConfig, envEntry,\r\n                                        formatString.format(envNum))\r\n\r\n    def getIsenseRspFileSteps(self, test, litConfig, shared):\r\n        if litConfig.edg_drop is not None and test.isenseRspPath is not None:\r\n            with open(test.isenseRspPath) as f:\r\n                cmd = [line.strip() for line in f]\r\n            cmd[0] = litConfig.edg_drop\r\n\r\n            # cpfecl translates /Fo into --import_dir, but that is not\r\n            # used in the same way by upstream EDG.\r\n            try:\r\n                index = cmd.index('--import_dir')\r\n                cmd.pop(index)\r\n                cmd.pop(index)\r\n            except ValueError:\r\n                pass\r\n\r\n            # --print_diagnostics is not recognized by upstream EDG.\r\n            try:\r\n                index = cmd.index('--print_diagnostics')\r\n                cmd.pop(index)\r\n            except ValueError:\r\n                pass\r\n\r\n            yield TestStep(cmd, shared.execDir, shared.env, False)\r\n\r\n    def runStep(self, testStep, litConfig):\r\n        if str(testStep.workDir) == '.':\r\n            testStep.workDir = os.getcwd()\r\n\r\n        env = _mergeEnvironments(os.environ, testStep.env)\r\n\r\n        return testStep.cmd, *stl.util.executeCommand(testStep.cmd, cwd=testStep.workDir, env=env)\r\n\r\n    def getStages(self, test, litConfig):\r\n        @dataclass\r\n        class SharedState:\r\n            execFile: Optional[os.PathLike] = field(default=None)\r\n            execDir: os.PathLike = field(default_factory=Path)\r\n            env: Dict[str, str] = field(default_factory=dict)\r\n\r\n        execDir, _ = test.getTempPaths()\r\n        shared = SharedState(None, execDir, _mergeEnvironments(litConfig.test_env, test.env))\r\n        shared.env['TMP'] = execDir\r\n        shared.env['TEMP'] = execDir\r\n        shared.env['TMPDIR'] = execDir\r\n        shared.env['TEMPDIR'] = execDir\r\n\r\n        return [\r\n            ('Build setup', self.getBuildSetupSteps(test, litConfig, shared), True),\r\n            ('Build', self.getBuildSteps(test, litConfig, shared), True),\r\n            ('Intellisense response file', self.getIsenseRspFileSteps(test, litConfig, shared), False),\r\n            ('Test setup', self.getTestSetupSteps(test, litConfig, shared), False),\r\n            ('Test', self.getTestSteps(test, litConfig, shared), False),\r\n            ('Clean', self.getCleanSteps(test, litConfig, shared), True)]\r\n\r\n    def getBuildSetupSteps(self, test, litConfig, shared):\r\n        shutil.rmtree(shared.execDir, ignore_errors=True)\r\n        Path(shared.execDir).mkdir(parents=True, exist_ok=True)\r\n\r\n        # Makes this function a generator which yields nothing\r\n        yield from []\r\n\r\n    def getBuildSteps(self, test, litConfig, shared):\r\n        _, tmpBase = test.getTempPaths()\r\n\r\n        shouldFail = TestType.FAIL in test.testType\r\n        if TestType.COMPILE in test.testType:\r\n            cmd = [test.cxx, '-c', test.getSourcePath(), *test.flags, *test.compileFlags]\r\n            yield TestStep(cmd, shared.execDir, shared.env, shouldFail)\r\n        elif TestType.LINK in test.testType or \\\r\n                ('clang' in test.config.available_features and 'asan' in test.config.available_features):\r\n            objFile = tmpBase + '.o'\r\n            cmd = [test.cxx, '-c', test.getSourcePath(), *test.flags, *test.compileFlags, '-Fo' + objFile]\r\n            yield TestStep(cmd, shared.execDir, shared.env, False)\r\n\r\n            shared.execFile = tmpBase + '.exe'\r\n            cmd = ['link.exe', objFile, *test.flags, '-out:' + shared.execFile, *test.linkFlags]\r\n            yield TestStep(cmd, shared.execDir, shared.env, shouldFail)\r\n        elif TestType.RUN in test.testType:\r\n            shared.execFile = tmpBase + '.exe'\r\n            cmd = [test.cxx, test.getSourcePath(), *test.flags, *test.compileFlags,\r\n                   '-Fe' + shared.execFile, '-link', *test.linkFlags]\r\n            yield TestStep(cmd, shared.execDir, shared.env, False)\r\n\r\n    def getTestSetupSteps(self, test, litConfig, shared):\r\n        if TestType.RUN in test.testType:\r\n            for dependency in test.fileDependencies:\r\n                if not os.path.isabs(dependency):\r\n                    dependency = os.path.join(os.path.dirname(test.getSourcePath()), dependency)\r\n                shutil.copy2(dependency, os.path.join(shared.execDir, os.path.basename(dependency)))\r\n\r\n        yield from []\r\n\r\n    def getTestSteps(self, test, litConfig, shared):\r\n        if not TestType.RUN in test.testType:\r\n            yield from []\r\n            return\r\n\r\n        shouldFail = TestType.FAIL in test.testType\r\n        yield TestStep([shared.execFile], shared.execDir, shared.env, shouldFail)\r\n\r\n    def getCleanSteps(self, test, litConfig, shared):\r\n        shutil.rmtree(shared.execDir, ignore_errors=True)\r\n\r\n        yield from []\r\n\r\n    def execute(self, test, litConfig):\r\n        try:\r\n            result = test.configureTest(litConfig)\r\n            if result:\r\n                return result\r\n\r\n            # This test is expected to fail at some point, but we're not sure if\r\n            # it should fail during the build phase or the test phase.\r\n            someFail = test.expectedResult and test.expectedResult.isFailure\r\n\r\n            stages = self.getStages(test, litConfig)\r\n\r\n            report = ''\r\n            for stageName, steps, isBuildStep in stages:\r\n                if not isBuildStep and litConfig.build_only:\r\n                    continue\r\n\r\n                report += stageName + ' steps:\\n'\r\n                for step in steps:\r\n                    cmd, out, err, rc = self.runStep(step, litConfig)\r\n\r\n                    if step.shouldFail and rc == 0:\r\n                        report += stageName + ' step succeeded unexpectedly.\\n'\r\n                    elif rc != 0:\r\n                        report += stageName + ' step failed unexpectedly.\\n'\r\n\r\n                    report += stl.util.makeReport(cmd, out, err, rc)\r\n                    if (step.shouldFail and rc == 0) or (not step.shouldFail and rc != 0):\r\n                        if someFail:\r\n                            test.xfails = ['*']\r\n                        return (lit.Test.FAIL, report)\r\n\r\n            return (lit.Test.PASS, '')\r\n\r\n        except Exception as e:\r\n            _, _, exception_traceback = sys.exc_info()\r\n            filename = exception_traceback.tb_frame.f_code.co_filename\r\n            line_number = exception_traceback.tb_lineno\r\n            message = repr(e) + ' at ' + filename + ':' + str(line_number)\r\n            litConfig.error(message)\r\n            return (lit.Test.UNRESOLVED, message)\r\n\r\n\r\nclass LibcxxTestFormat(STLTestFormat):\r\n    \"\"\"\r\n    Custom test format handler to run the libcxx tests for the MSVC STL.\r\n    \"\"\"\r\n    def getTestsInDirectory(self, testSuite, pathInSuite,\r\n                            litConfig, localConfig, testClass=LibcxxTest):\r\n        return super().getTestsInDirectory(testSuite, pathInSuite, litConfig,\r\n                                           localConfig, testClass)\r\n\r\n    def addCompileFlags(self, *args):\r\n        # For now, this is necessary to discard the value of\r\n        # `LIBCXX_FILESYSTEM_STATIC_TEST_ROOT` which we don't care about;\r\n        # eventually it will probably need to be made meaningful.\r\n        pass\r\n"
  },
  {
    "path": "tests/utils/stl/test/params.py",
    "content": "#===----------------------------------------------------------------------===##\r\n#\r\n# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n# See https://llvm.org/LICENSE.txt for license information.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n#\r\n#===----------------------------------------------------------------------===##\r\n\r\nfrom libcxx.test.dsl import *\r\n\r\nclass AddRunPLTags(ConfigAction):\r\n  \"\"\"\r\n  Store a set of run.pl tags in the config to be later used to select test cases.\r\n  \"\"\"\r\n  def __init__(self, taglist):\r\n    self._taglist = taglist\r\n\r\n  def applyTo(self, config):\r\n    config.runPLTags = set(map(lambda x: x.casefold(), self._taglist))\r\n\r\n  def pretty(self, config, litParams):\r\n    return 'select run.pl tags {}'.format(str(self._taglist))\r\n\r\n\r\nclass AddRunPLNotags(ConfigAction):\r\n  \"\"\"\r\n  Store a set of run.pl tags in the config to be later used to exclude test cases.\r\n  \"\"\"\r\n  def __init__(self, taglist):\r\n    self._taglist = taglist\r\n\r\n  def applyTo(self, config):\r\n    config.runPLNotags = set(map(lambda x: x.casefold(), self._taglist))\r\n\r\n  def pretty(self, config, litParams):\r\n    return 'exclude run.pl tags {}'.format(str(self._taglist))\r\n\r\n\r\ndef beNice(prio: str) -> list[ConfigAction]:\r\n  \"\"\"\r\n  Set the process priority to run tests with.\r\n  \"\"\"\r\n  try:\r\n    import psutil\r\n    priority_map = {\r\n      'normal': psutil.NORMAL_PRIORITY_CLASS,\r\n      'low': psutil.BELOW_NORMAL_PRIORITY_CLASS,\r\n      'idle': psutil.IDLE_PRIORITY_CLASS,\r\n    }\r\n    psutil.Process().nice(priority_map[prio])\r\n  except ImportError:\r\n    if not hasattr(beNice, 'suppress'):\r\n      import sys\r\n      print(f'NOTE: Module \"psutil\" is not installed, so the priority setting \"{prio}\" has no effect.', file=sys.stderr)\r\n      beNice.suppress = True\r\n  return []\r\n\r\n\r\ndef getDefaultParameters(config, litConfig):\r\n    DEFAULT_PARAMETERS = [\r\n      Parameter(name='test-only-edg', choices=[True, False], type=bool, default=False,\r\n                help=\"Whether to only run edg tests (those that use the /BE flag).\",\r\n                actions=lambda enabled: [AddFeature(name='test-only-edg')] if enabled else []),\r\n      Parameter(name='long_tests', choices=[True, False], type=bool, default=True,\r\n                help=\"Whether to run tests that take a long time. This can be useful when running on a slow device.\",\r\n                actions=lambda enabled: [AddFeature(name='long_tests')] if enabled else []),\r\n      Parameter(name=\"tags\", type=list, default=[],\r\n                help=\"Comma-separated list of run.pl tags to select tests\",\r\n                actions=lambda tags: [AddRunPLTags(tags)]),\r\n      Parameter(name=\"notags\", type=list, default=[],\r\n                help=\"Comma-separated list of run.pl tags to exclude tests\",\r\n                actions=lambda tags: [AddRunPLNotags(tags)]),\r\n      Parameter(name=\"priority\", choices=[\"idle\", \"low\", \"normal\"], default=\"idle\", type=str,\r\n                help='Process priority to run tests with: \"idle\" (the default), \"low\", or \"normal\". ' +\r\n                  'Module \"psutil\" must be installed for this to have any effect.',\r\n                actions=lambda prio: beNice(prio)),\r\n    ]\r\n\r\n    return DEFAULT_PARAMETERS\r\n"
  },
  {
    "path": "tests/utils/stl/test/tests.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n#===----------------------------------------------------------------------===##\r\n#\r\n# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n# See https://llvm.org/LICENSE.txt for license information.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n#\r\n#===----------------------------------------------------------------------===##\r\n\r\nfrom enum import auto, Flag\r\nfrom itertools import chain\r\nimport copy\r\nimport os\r\nimport shutil\r\n\r\nfrom lit.Test import Result, SKIPPED, Test, UNSUPPORTED\r\nfrom libcxx.test.dsl import Feature\r\nimport lit\r\n\r\n_compilerPathCache = dict()\r\n\r\n\r\nclass TestType(Flag):\r\n    UNKNOWN = auto()\r\n    COMPILE = auto()\r\n    LINK = auto()\r\n    RUN = auto()\r\n    PASS = auto()\r\n    FAIL = auto()\r\n\r\n\r\nclass STLTest(Test):\r\n    compilerNotFound = set()\r\n\r\n    def __init__(self, suite, pathInSuite, litConfig, testConfig, envlstEntry, envNum):\r\n        self.envNum = envNum\r\n        self.envlstEntry = envlstEntry\r\n        Test.__init__(self, suite, pathInSuite, testConfig, None)\r\n\r\n    def configureTest(self, litConfig):\r\n        self.compileFlags = []\r\n        self.cxx = None\r\n        self.env = {}\r\n        self.fileDependencies = []\r\n        self.flags = []\r\n        self.isenseRspPath = None\r\n        self.linkFlags = []\r\n        self.testType = None\r\n\r\n        result = self._configureExpectedResult(litConfig)\r\n        if result:\r\n            return result\r\n\r\n        result = self._handleEnvlst(litConfig)\r\n        if result:\r\n            return result\r\n\r\n        self._parseTest()\r\n        self._parseFlags(litConfig)\r\n\r\n        missing_required_features = self.getMissingRequiredFeatures()\r\n        if missing_required_features:\r\n            msg = ', '.join(missing_required_features)\r\n            return Result(UNSUPPORTED, \"Test requires the following unavailable features: %s\" % msg)\r\n\r\n        unsupported_features = self.getUnsupportedFeatures()\r\n        if unsupported_features:\r\n            msg = ', '.join(unsupported_features)\r\n            return Result(UNSUPPORTED, \"Test does not support the following features and/or targets: %s\" % msg)\r\n\r\n        if not self.isWithinFeatureLimits():\r\n            msg = ', '.join(self.config.limit_to_features)\r\n            return Result(UNSUPPORTED, \"Test does not require any of the features specified in limit_to_features: %s\" %\r\n                          msg)\r\n\r\n        if 'test-only-edg' in self.config.available_features and 'edg' not in self.requires:\r\n            return Result(UNSUPPORTED, 'We run only /BE tests with the test-only-edg flag')\r\n\r\n        if 'edg_drop' in self.config.available_features:\r\n            if 'edg' not in self.requires:\r\n                return Result(UNSUPPORTED, 'We run only /BE tests with the edg drop')\r\n\r\n            _, tmpBase = self.getTempPaths()\r\n            self.isenseRspPath = tmpBase + '.isense.rsp'\r\n            self.compileFlags.extend(['/dE--write-isense-rsp', '/dE' + self.isenseRspPath])\r\n\r\n        # TRANSITION, google/sanitizers#328: clang-cl does not support /MDd or /MTd with ASan\r\n        if ('clang' in self.config.available_features and 'asan' in self.config.available_features and\r\n            ('MTd' in self.config.available_features or 'MDd' in self.config.available_features)):\r\n            return Result(UNSUPPORTED, 'clang does not support debug variants of the STL with ASan')\r\n\r\n        self._configureTestType()\r\n\r\n        forceFail = self.expectedResult and self.expectedResult.isFailure\r\n        buildFail = forceFail and TestType.COMPILE|TestType.LINK in self.testType\r\n\r\n        if (litConfig.build_only and buildFail):\r\n            self.xfails = ['*']\r\n        elif (not litConfig.build_only and forceFail):\r\n            self.xfails = ['*']\r\n\r\n        return None\r\n\r\n    def _parseTest(self):\r\n        additionalCompileFlags = []\r\n        fileDependencies = []\r\n        parsers = [\r\n            lit.TestRunner.IntegratedTestKeywordParser('FILE_DEPENDENCIES:',\r\n                                                       lit.TestRunner.ParserKind.LIST,\r\n                                                       initial_value=fileDependencies),\r\n            lit.TestRunner.IntegratedTestKeywordParser('ADDITIONAL_COMPILE_FLAGS:',\r\n                                                       lit.TestRunner.ParserKind.SPACE_LIST,\r\n                                                       initial_value=additionalCompileFlags)\r\n        ]\r\n\r\n        for feature in self.config.available_features:\r\n            parser = lit.TestRunner.IntegratedTestKeywordParser(\r\n                \"ADDITIONAL_COMPILE_FLAGS({}):\".format(feature),\r\n                lit.TestRunner.ParserKind.SPACE_LIST,\r\n                initial_value=additionalCompileFlags,\r\n            )\r\n            parsers.append(parser)\r\n\r\n        lit.TestRunner.parseIntegratedTestScript(self, additional_parsers=parsers, require_script=False)\r\n        self.compileFlags.extend(additionalCompileFlags)\r\n        self.fileDependencies.extend(fileDependencies)\r\n\r\n    def _configureTestType(self):\r\n        self.testType = TestType.UNKNOWN\r\n        filename = self.path_in_suite[-1]\r\n\r\n        if filename.endswith('.fail.cpp'):\r\n            self.testType = self.testType | TestType.FAIL\r\n        elif filename.endswith('.pass.cpp'):\r\n            self.testType = self.testType | TestType.PASS\r\n        else:\r\n            self.testType = self.testType | TestType.PASS\r\n\r\n        shortenedFlags = [flag[1:] for flag in chain(self.flags, self.compileFlags, self.linkFlags)]\r\n        if 'analyze:only' in shortenedFlags or 'c' in shortenedFlags or \\\r\n                filename.endswith(('.compile.pass.cpp', '.compile.fail.cpp')):\r\n            self.testType = self.testType | TestType.COMPILE\r\n        elif filename.endswith(('.link.pass.cpp', '.link.fail.cpp')):\r\n            self.testType = self.testType | TestType.LINK\r\n        elif filename.endswith(('run.fail.cpp','run.pass.cpp')):\r\n            self.testType = self.testType | TestType.RUN\r\n        elif filename.endswith('.fail.cpp'):\r\n            self.testType = self.testType | TestType.COMPILE\r\n        elif filename.endswith('.pass.cpp'):\r\n            self.testType = self.testType | TestType.RUN\r\n        else:\r\n            self.testType = self.testType | TestType.RUN\r\n\r\n        self.testType = self.testType & ~TestType.UNKNOWN\r\n\r\n    def getTestName(self):\r\n        return '/'.join(self.path_in_suite[:-1]) + \":\" + self.envNum\r\n\r\n    def getFullName(self):\r\n        return self.suite.config.name + ' :: ' + self.getTestName()\r\n\r\n    def getSourcePath(self):\r\n        return os.path.normpath(super().getSourcePath())\r\n\r\n    def getExecDir(self):\r\n        execDir, _ = lit.TestRunner.getTempPaths(self)\r\n        execDir = os.path.join(execDir, self.envNum)\r\n        return os.path.normpath(execDir)\r\n\r\n    def getTempPaths(self):\r\n        tmpDir = self.getExecDir()\r\n        tmpBase = os.path.join(tmpDir, self.path_in_suite[-2])\r\n        return tmpDir, os.path.normpath(tmpBase)\r\n\r\n    def _configureExpectedResult(self, litConfig):\r\n        testName = self.getTestName()\r\n        self.expectedResult = None\r\n\r\n        if testName in litConfig.expected_results.get(self.config.name, dict()):\r\n            self.expectedResult = litConfig.expected_results[self.config.name][testName]\r\n        else:\r\n          currentPrefix = \"\"\r\n          for prefix, result in litConfig.expected_results.get(self.config.name, dict()).items():\r\n              if testName == prefix:\r\n                  self.expectedResult = result\r\n                  break\r\n              elif testName.startswith(prefix) and len(prefix) > len(currentPrefix):\r\n                  currentPrefix = prefix\r\n                  self.expectedResult = result\r\n\r\n        if self.expectedResult is not None:\r\n            if self.expectedResult == SKIPPED:\r\n                return Result(SKIPPED, 'This test was explicitly marked as skipped')\r\n        elif self.config.unsupported:\r\n            return Result(UNSUPPORTED, 'This test was marked as unsupported by a lit.cfg')\r\n\r\n        return None\r\n\r\n    def _handleEnvlst(self, litConfig):\r\n        envCompiler = self.envlstEntry.getEnvVal('PM_COMPILER', 'cl')\r\n\r\n        if self.config.runPLTags and not self.envlstEntry.hasAnyTag(self.config.runPLTags):\r\n            return Result(SKIPPED, 'This test was skipped because its tags {}'.format(str(self.envlstEntry._env_tags)) +\r\n                                   ' do not match any of the selected tags {}'.format(str(self.config.runPLTags)))\r\n\r\n        if self.config.runPLNotags and self.envlstEntry.hasAnyTag(self.config.runPLNotags):\r\n            return Result(SKIPPED, 'This test was skipped because its tags {}'.format(str(self.envlstEntry._env_tags)) +\r\n                                   ' match any of the excluded tags {}'.format(str(self.config.runPLNotags)))\r\n\r\n        cxx = None\r\n        if os.path.isfile(envCompiler):\r\n            cxx = envCompiler\r\n        else:\r\n            cxx = _compilerPathCache.get(envCompiler, None)\r\n\r\n            if not cxx:\r\n                searchPaths = self.config.environment['PATH']\r\n                cxx = shutil.which(envCompiler, path=searchPaths)\r\n                _compilerPathCache[envCompiler] = cxx\r\n\r\n        if not cxx:\r\n            if envCompiler not in self.compilerNotFound:\r\n                self.compilerNotFound.add(envCompiler)\r\n                litConfig.warning('Could not find: %r' % envCompiler)\r\n            return Result(SKIPPED, 'This test was skipped because the compiler, \"' +\r\n                                   envCompiler + '\", could not be found')\r\n\r\n        self.flags = copy.deepcopy(litConfig.flags[self.config.name])\r\n        self.compileFlags = copy.deepcopy(litConfig.compile_flags[self.config.name])\r\n        self.linkFlags = copy.deepcopy(litConfig.link_flags[self.config.name])\r\n\r\n        self.compileFlags.extend(self.envlstEntry.getEnvVal('PM_CL', '').split())\r\n        self.linkFlags.extend(self.envlstEntry.getEnvVal('PM_LINK', '').split())\r\n\r\n        targetArch = litConfig.target_arch.casefold()\r\n        if ('clang'.casefold() in os.path.basename(cxx).casefold()):\r\n            self._addCustomFeature('clang')\r\n            self._addCustomFeature('gcc-style-warnings')\r\n\r\n            if (targetArch == 'x64'.casefold()):\r\n                self.compileFlags.append('-m64')\r\n            elif (targetArch == 'x86'.casefold()):\r\n                self.compileFlags.append('-m32')\r\n            elif (targetArch == 'arm64'.casefold()):\r\n                self.compileFlags.append('--target=arm64-pc-windows-msvc')\r\n            elif (targetArch == 'arm64ec'.casefold()):\r\n                self.compileFlags.append('--target=arm64ec-pc-windows-msvc')\r\n                # TRANSITION, GH-5825: As of Clang 20, compiling with `-fuse-ld=link` (avoiding lld-link)\r\n                # appears to be critically necessary for unknown reasons.\r\n                self.compileFlags.append('-fuse-ld=link')\r\n                self.linkFlags.append('/machine:arm64ec')\r\n        elif ('nvcc'.casefold() in os.path.basename(cxx).casefold()):\r\n            self._addCustomFeature('nvcc')\r\n\r\n            # nvcc only supports targeting x64\r\n            self.requires.append('x64')\r\n        else:\r\n            self._addCustomFeature('cl-style-warnings')\r\n\r\n            if (targetArch == 'arm64ec'.casefold()):\r\n                self.compileFlags.append('/arm64EC')\r\n                self.linkFlags.append('/machine:arm64ec')\r\n\r\n                # TRANSITION, Windows SDK 10.0.26100 emits\r\n                # \"warning C28301: No annotations for first declaration of 'meow'\"\r\n                # for various intrinsics when building for ARM64EC.\r\n                self.compileFlags.append('/wd28301')\r\n\r\n        self.cxx = os.path.normpath(cxx)\r\n        return None\r\n\r\n    def _addCustomFeature(self, name):\r\n        actions = Feature(name).getActions(self.config)\r\n        for action in actions:\r\n            action.applyTo(self.config)\r\n\r\n    def _parseFlags(self, litConfig):\r\n        foundStd = False\r\n        foundCRT = False\r\n        afterAnalyzePlugin = False\r\n        for flag in chain(self.flags, self.compileFlags, self.linkFlags):\r\n            if afterAnalyzePlugin:\r\n                if 'EspXEngine.dll'.casefold() in flag.casefold():\r\n                    self._addCustomFeature('espxengine')\r\n                afterAnalyzePlugin = False\r\n\r\n            if flag[1:5] == 'std:':\r\n                foundStd = True\r\n                if flag[5:] == 'c++latest':\r\n                    self._addCustomFeature('c++23')\r\n                    self._addCustomFeature('std-at-least-c++23')\r\n                    self._addCustomFeature('std-at-least-c++20')\r\n                    self._addCustomFeature('std-at-least-c++17')\r\n                elif flag[5:] == 'c++20':\r\n                    self._addCustomFeature('c++20')\r\n                    self._addCustomFeature('std-at-least-c++20')\r\n                    self._addCustomFeature('std-at-least-c++17')\r\n                elif flag[5:] == 'c++17':\r\n                    self._addCustomFeature('c++17')\r\n                    self._addCustomFeature('std-at-least-c++17')\r\n                elif flag[5:] == 'c++14':\r\n                    self._addCustomFeature('c++14')\r\n            elif flag[1:11] == 'fsanitize=':\r\n                for sanitizer in flag[11:].split(','):\r\n                    if sanitizer == 'address':\r\n                        self._addCustomFeature('asan')\r\n                    elif sanitizer == 'undefined':\r\n                        self.requires.append('ubsan') # available for x64, see features.py\r\n                    else:\r\n                        pass # :shrug: good luck!\r\n            elif flag[1:] == 'clr:pure':\r\n                self.requires.append('clr_pure') # TRANSITION, GH-798\r\n            elif flag[1:] == 'clr':\r\n                self.requires.append('clr') # TRANSITION, GH-797\r\n            elif flag[1:] == 'BE':\r\n                self.requires.append('edg') # available for x64, see features.py\r\n            elif flag[1:] == 'arch:AVX2':\r\n                self.requires.append('arch_avx2') # available for x86 and x64, see features.py\r\n            elif flag[1:] == 'D_CALL_ALL_X64_VECTOR_ALGORITHMS_ON_ARM64EC':\r\n                self.requires.append('arm64ec')\r\n            elif flag[1:] == 'MDd':\r\n                self._addCustomFeature('MDd')\r\n                self._addCustomFeature('debug_CRT')\r\n                self._addCustomFeature('dynamic_CRT')\r\n                foundCRT = True\r\n            elif flag[1:] == 'MD':\r\n                self._addCustomFeature('MD')\r\n                self._addCustomFeature('dynamic_CRT')\r\n                foundCRT = True\r\n            elif flag[1:] == 'MTd':\r\n                self._addCustomFeature('MTd')\r\n                self._addCustomFeature('debug_CRT')\r\n                self._addCustomFeature('static_CRT')\r\n                foundCRT = True\r\n            elif flag[1:] == 'MT':\r\n                self._addCustomFeature('MT')\r\n                self._addCustomFeature('static_CRT')\r\n                foundCRT = True\r\n            elif flag[1:] == 'analyze:plugin':\r\n                afterAnalyzePlugin = True\r\n\r\n        if not foundStd:\r\n            self._addCustomFeature('c++14')\r\n\r\n        if not foundCRT:\r\n            self._addCustomFeature('MT')\r\n            self._addCustomFeature('static_CRT')\r\n\r\n        # clang doesn't know how to link in the VS version of the asan runtime automatically\r\n        if 'asan' in self.config.available_features and 'clang' in self.config.available_features:\r\n            self.linkFlags.append(\"/INFERASANLIBS\")\r\n\r\n        # code analysis settings\r\n        if 'espxengine' in self.config.available_features:\r\n            self.compileFlags.extend([\"/analyze:rulesetdirectory\", ';'.join(litConfig.ruleset_dirs[self.config.name])])\r\n            self.env['Esp.AnnotationBuildLevel'] = 'Ignore'\r\n\r\nclass LibcxxTest(STLTest):\r\n    def getTestName(self):\r\n        return '/'.join(self.path_in_suite) + ':' + self.envNum\r\n\r\n    def getExecDir(self):\r\n        execDir, _ = lit.TestRunner.getTempPaths(self)\r\n        execDir = os.path.join(execDir, self.path_in_suite[-1] + '.dir')\r\n        execDir = os.path.join(execDir, self.envNum)\r\n        return os.path.normpath(execDir)\r\n\r\n    def getTempPaths(self):\r\n        tmpDir = self.getExecDir()\r\n        tmpBase = os.path.join(tmpDir, self.path_in_suite[-1])\r\n        if tmpBase.endswith('.cpp'):\r\n            tmpBase = tmpBase[:-4]\r\n        return tmpDir, os.path.normpath(tmpBase)\r\n"
  },
  {
    "path": "tests/utils/stl/util.py",
    "content": "#===----------------------------------------------------------------------===##\r\n#\r\n# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n# See https://llvm.org/LICENSE.txt for license information.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n#\r\n#===----------------------------------------------------------------------===##\r\n\r\nimport platform\r\nimport signal\r\nimport subprocess\r\nimport threading\r\n\r\n\r\ndef makeReport(cmd, out, err, rc):\r\n    report = \"Command: \\\"%s\\\"\\n\" % \"\\\" \\\"\".join(cmd)\r\n    report += f\"Exit Code: {rc} (0x{rc:X})\\n\"\r\n    # Replacing CRLFs with LFs avoids ugly double newlines when this is displayed in Azure Pipelines.\r\n    if out:\r\n        report += \"Standard Output:\\n--\\n%s--\\n\" % out.replace(\"\\r\\n\", \"\\n\")\r\n    if err:\r\n        report += \"Standard Error:\\n--\\n%s--\\n\" % err.replace(\"\\r\\n\", \"\\n\")\r\n    report += '\\n'\r\n    return report\r\n\r\n\r\nclass ExecuteCommandTimeoutException(Exception):\r\n    def __init__(self, msg, out, err, exitCode):\r\n        assert isinstance(msg, str)\r\n        assert isinstance(out, str)\r\n        assert isinstance(err, str)\r\n        assert isinstance(exitCode, int)\r\n        self.msg = msg\r\n        self.out = out\r\n        self.err = err\r\n        self.exitCode = exitCode\r\n\r\n\r\n# Close extra file handles on UNIX (on Windows this cannot be done while\r\n# also redirecting input).\r\nkUseCloseFDs = not (platform.system() == 'Windows')\r\n\r\n\r\ndef decodeOutput(bytes):\r\n    # MSVC's output is encoded in the active code page\r\n    # EDG's (`cl /BE`) output is encoded in UTF-8\r\n    try:\r\n        return bytes.decode()\r\n    except UnicodeError:\r\n        # Use 'backslashreplace' to avoid throwing another exception when tests emit garbage bytes.\r\n        import locale\r\n        return bytes.decode(locale.getpreferredencoding(do_setlocale=False), 'backslashreplace')\r\n\r\n\r\ndef executeCommand(command, cwd=None, env=None, input=None, timeout=0):\r\n    \"\"\"\r\n        Execute command ``command`` (list of arguments or string)\r\n        with\r\n        * working directory ``cwd`` (str), use None to use the current\r\n          working directory\r\n        * environment ``env`` (dict), use None for none\r\n        * Input to the command ``input`` (str), use string to pass\r\n          no input.\r\n        * Max execution time ``timeout`` (int) seconds. Use 0 for no timeout.\r\n\r\n        Returns a tuple (out, err, exitCode) where\r\n        * ``out`` (str) is the standard output of running the command\r\n        * ``err`` (str) is the standard error of running the command\r\n        * ``exitCode`` (int) is the exitCode of running the command\r\n\r\n        If the timeout is hit an ``ExecuteCommandTimeoutException``\r\n        is raised.\r\n    \"\"\"\r\n    if input is not None:\r\n        input = input.encode()\r\n\r\n    p = subprocess.Popen(command, cwd=cwd,\r\n                         stdin=subprocess.PIPE,\r\n                         stdout=subprocess.PIPE,\r\n                         stderr=subprocess.PIPE,\r\n                         env=env, close_fds=kUseCloseFDs)\r\n    timerObject = None\r\n    hitTimeOut = False\r\n    try:\r\n        if timeout > 0:\r\n            def killProcess():\r\n                # We may be invoking a shell so we need to kill the\r\n                # process and all its children.\r\n                nonlocal hitTimeOut\r\n                hitTimeOut = True\r\n                killProcessAndChildren(p.pid)\r\n\r\n            timerObject = threading.Timer(timeout, killProcess)\r\n            timerObject.start()\r\n\r\n        out, err = p.communicate(input=input)\r\n        exitCode = p.wait()\r\n    finally:\r\n        if timerObject is not None:\r\n            timerObject.cancel()\r\n\r\n    # Ensure the resulting output is always of string type.\r\n    out = decodeOutput(out)\r\n    err = decodeOutput(err)\r\n\r\n    if hitTimeOut:\r\n        raise ExecuteCommandTimeoutException(\r\n            msg='Reached timeout of {} seconds'.format(timeout),\r\n            out=out,\r\n            err=err,\r\n            exitCode=exitCode\r\n            )\r\n\r\n    # Detect Ctrl-C in subprocess.\r\n    if exitCode == -signal.SIGINT:\r\n        raise KeyboardInterrupt\r\n\r\n    return out, err, exitCode\r\n\r\n\r\ndef killProcessAndChildren(pid):\r\n    \"\"\"\r\n    This function kills a process with ``pid`` and all its\r\n    running children (recursively). It is currently implemented\r\n    using the psutil module which provides a simple platform\r\n    neutral implementation.\r\n    \"\"\"\r\n    import psutil\r\n    try:\r\n        psutilProc = psutil.Process(pid)\r\n        for child in psutilProc.children(recursive=True):\r\n            try:\r\n                child.kill()\r\n            except psutil.NoSuchProcess:\r\n                pass\r\n        psutilProc.kill()\r\n    except psutil.NoSuchProcess:\r\n        pass\r\n"
  },
  {
    "path": "tests/utils/stl-lit/CMakeLists.txt",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nset(LLVM_SOURCE_DIR \"${LLVM_PROJECT_SOURCE_DIR}/llvm\" CACHE PATH\r\n    \"Location of the llvm source tree\")\r\n\r\nset(STL_LIT_OUTPUT \"${CMAKE_CURRENT_BINARY_DIR}/stl-lit.py\")\r\nset(STL_LIT_OUTPUT \"${STL_LIT_OUTPUT}\" PARENT_SCOPE)\r\n\r\nget_property(STL_LIT_CONFIG_MAP GLOBAL PROPERTY STL_LIT_CONFIG_MAP)\r\nconfigure_file(\r\n    \"${CMAKE_CURRENT_SOURCE_DIR}/stl-lit.in\"\r\n    \"${STL_LIT_OUTPUT}\")\r\n"
  },
  {
    "path": "tests/utils/stl-lit/stl-lit.in",
    "content": "#!/usr/bin/env python\r\n# -*- coding: utf-8 -*-\r\n\r\n#===----------------------------------------------------------------------===##\r\n#\r\n# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.\r\n# See https://llvm.org/LICENSE.txt for license information.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n#\r\n#===----------------------------------------------------------------------===##\r\n\r\nimport os\r\nimport sys\r\n\r\nconfig_map = {}\r\n\r\ndef map_config(source_dir, site_config):\r\n    global config_map\r\n    source_dir = os.path.realpath(source_dir)\r\n    source_dir = os.path.normcase(source_dir)\r\n    site_config = os.path.normpath(site_config)\r\n    config_map[source_dir] = site_config\r\n\r\n# Make sure we can find the lit package.\r\nsys.path.insert(0, os.path.join(\"@LLVM_SOURCE_DIR@\", 'utils', 'lit'))\r\n\r\n@STL_LIT_CONFIG_MAP@\r\n\r\nbuiltin_parameters= {}\r\nbuiltin_parameters['config_map'] = config_map\r\n\r\ndef assert_same_platform_for_build_and_test():\r\n    build_platform = '$ENV{VSCMD_ARG_TGT_ARCH}'\r\n    test_platform = os.getenv('VSCMD_ARG_TGT_ARCH', default='')\r\n    if build_platform != '' and test_platform != '' and build_platform != test_platform:\r\n        exit(f'Target platform mismatch: the STL was built for {build_platform} but tested for {test_platform}.')\r\n\r\nif __name__=='__main__':\r\n    assert_same_platform_for_build_and_test()\r\n    from lit.main import main\r\n    main(builtin_parameters)\r\n"
  },
  {
    "path": "tools/CMakeLists.txt",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\ncmake_minimum_required(VERSION 4.2.3)\r\nproject(msvc_standard_libraries_tools LANGUAGES CXX)\r\n\r\nadd_subdirectory(format)\r\nadd_subdirectory(validate)\r\n"
  },
  {
    "path": "tools/CMakeSettings.json",
    "content": "{\r\n  \"configurations\": [\r\n    {\r\n      \"buildCommandArgs\": \"-v\",\r\n      \"buildRoot\": \"${projectDir}\\\\out\\\\build\\\\${name}\",\r\n      \"cmakeCommandArgs\": \"\",\r\n      \"configurationType\": \"Debug\",\r\n      \"ctestCommandArgs\": \"\",\r\n      \"generator\": \"Ninja\",\r\n      \"inheritEnvironments\": [ \"msvc_x64_x64\" ],\r\n      \"installRoot\": \"${projectDir}\\\\out\\\\install\\\\${name}\",\r\n      \"name\": \"x64-Debug\",\r\n      \"variables\": []\r\n    },\r\n    {\r\n      \"buildCommandArgs\": \"-v\",\r\n      \"buildRoot\": \"${projectDir}\\\\out\\\\build\\\\${name}\",\r\n      \"cmakeCommandArgs\": \"\",\r\n      \"configurationType\": \"Release\",\r\n      \"ctestCommandArgs\": \"\",\r\n      \"generator\": \"Ninja\",\r\n      \"inheritEnvironments\": [ \"msvc_x64_x64\" ],\r\n      \"installRoot\": \"${projectDir}\\\\out\\\\install\\\\${name}\",\r\n      \"name\": \"x64-Release\",\r\n      \"variables\": []\r\n    }\r\n  ]\r\n}\r\n"
  },
  {
    "path": "tools/format/CMakeLists.txt",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\ncmake_minimum_required(VERSION 4.2.3)\r\nproject(msvc_standard_libraries_format NONE)\r\n\r\nfind_program(CLANG_FORMAT\r\n    NAMES clang-format\r\n    HINTS \"$ENV{VCINSTALLDIR}/Tools/Llvm/x64/bin\"\r\n    DOC \"The clang-format program to use\"\r\n    REQUIRED\r\n)\r\n\r\nexecute_process(\r\n    COMMAND \"${CLANG_FORMAT}\" --version\r\n    OUTPUT_VARIABLE clang_format_version\r\n    OUTPUT_STRIP_TRAILING_WHITESPACE\r\n)\r\n\r\nif(clang_format_version MATCHES \"clang-format version ([0-9]+\\.[0-9]+\\.[0-9]+)\")\r\n    set(expected_version \"20.1.8\")\r\n    if(CMAKE_MATCH_1 VERSION_LESS expected_version)\r\n        message(FATAL_ERROR \"Found clang-format: ${CLANG_FORMAT} (\\\"${CMAKE_MATCH_1}\\\", older than expected version \\\"${expected_version}\\\")\")\r\n    elseif(CMAKE_MATCH_1 VERSION_EQUAL expected_version)\r\n        message(STATUS \"Found clang-format: ${CLANG_FORMAT} (found expected version \\\"${CMAKE_MATCH_1}\\\")\")\r\n    elseif(CMAKE_MATCH_1 VERSION_GREATER expected_version)\r\n        message(WARNING \"Found clang-format: ${CLANG_FORMAT} (\\\"${CMAKE_MATCH_1}\\\", newer than expected version \\\"${expected_version}\\\")\")\r\n    endif()\r\nelse()\r\n    message(FATAL_ERROR \"Unexpected `clang-format --version` output: '${clang_format_version}'\")\r\nendif()\r\n\r\nfile(GLOB_RECURSE maybe_clang_format_files\r\n    \"../../benchmarks/inc/*\"\r\n    \"../../benchmarks/src/*\"\r\n    \"../../stl/inc/*\"\r\n    \"../../stl/modules/*\"\r\n    \"../../stl/src/*\"\r\n    \"../../tests/*\"\r\n    \"../../tools/*\"\r\n)\r\nset(clang_format_files \"\")\r\n\r\nforeach(maybe_file IN LISTS maybe_clang_format_files)\r\n    cmake_path(GET maybe_file FILENAME filename)\r\n    cmake_path(GET maybe_file EXTENSION LAST_ONLY extension)\r\n\r\n    if(extension MATCHES [[^(|\\.cpp|\\.h|\\.hpp|\\.ixx)$]] AND NOT filename MATCHES [[^\\.]])\r\n        list(APPEND clang_format_files \"${maybe_file}\")\r\n    endif()\r\nendforeach()\r\n\r\nif(NOT clang_format_files)\r\n    message(FATAL_ERROR \"Could not find any files to clang-format!\")\r\nendif()\r\n\r\nadd_custom_target(run-format)\r\n\r\nforeach(file IN LISTS clang_format_files)\r\n    cmake_path(RELATIVE_PATH file\r\n        BASE_DIRECTORY \"${CMAKE_CURRENT_LIST_DIR}/../..\"\r\n        OUTPUT_VARIABLE relative-file\r\n    )\r\n    string(REPLACE \"/\" \"_\" relative-file \"${relative-file}\")\r\n    set(target_name \"clang-format.${relative-file}\")\r\n    add_custom_target(\"${target_name}\"\r\n        COMMAND \"${CLANG_FORMAT}\" -style=file -i \"${file}\"\r\n        WORKING_DIRECTORY \"${CMAKE_CURRENT_LIST_DIR}/../..\"\r\n    )\r\n    add_dependencies(run-format \"${target_name}\")\r\nendforeach()\r\n"
  },
  {
    "path": "tools/scripts/charconv_generate.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// The following code is the generator for the big powers of ten table found in _Multiply_by_power_of_ten().\r\n// This code is provided for future use if the table needs to be amended. Do not remove this code.\r\n\r\n#include <algorithm>\r\n#include <charconv>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <tuple>\r\n#include <vector>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n    vector<uint32_t> elements;\r\n    vector<tuple<uint32_t, uint32_t, uint32_t>> indices;\r\n\r\n    for (uint32_t power = 10; power != 390; power += 10) {\r\n        _Big_integer_flt big = _Make_big_integer_flt_one();\r\n\r\n        for (uint32_t i = 0; i != power; ++i) {\r\n            (void) _Multiply(big, 10); // assumes no overflow\r\n        }\r\n\r\n        const uint32_t* const first = big._Mydata;\r\n        const uint32_t* const last  = first + big._Myused;\r\n        const uint32_t* const mid   = find_if(first, last, [](const uint32_t elem) { return elem != 0; });\r\n\r\n        indices.emplace_back(static_cast<uint32_t>(elements.size()), static_cast<uint32_t>(mid - first),\r\n            static_cast<uint32_t>(last - mid));\r\n\r\n        elements.insert(elements.end(), mid, last);\r\n    }\r\n\r\n    printf(\"static constexpr uint32_t _Large_power_data[] =\\n{\");\r\n    for (uint32_t i = 0; i != elements.size(); ++i) {\r\n        printf(\"%s0x%08x, \", i % 8 == 0 ? \"\\n\\t\" : \"\", elements[i]);\r\n    }\r\n    printf(\"\\n};\\n\");\r\n\r\n    printf(\"static constexpr _Unpack_index _Large_power_indices[] =\\n{\");\r\n    for (uint32_t i = 0; i != indices.size(); ++i) {\r\n        printf(\r\n            \"%s{ %u, %u, %u }, \", i % 6 == 0 ? \"\\n\\t\" : \"\", get<0>(indices[i]), get<1>(indices[i]), get<2>(indices[i]));\r\n    }\r\n    printf(\"\\n};\\n\");\r\n}\r\n"
  },
  {
    "path": "tools/scripts/charconv_tables_generate.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// The following code generated the lookup tables for the\r\n// scientific exponent X. Don't remove this code.\r\n// cl /EHsc /nologo /W4 /MT /O2 /std:c++17 charconv_tables_generate.cpp && charconv_tables_generate\r\n\r\n#include <algorithm>\r\n#include <cassert>\r\n#include <charconv>\r\n#include <cmath>\r\n#include <cstdint>\r\n#include <cstdio>\r\n#include <limits>\r\n#include <map>\r\n#include <system_error>\r\n#include <type_traits>\r\n#include <vector>\r\nusing namespace std;\r\n\r\ntemplate <typename UInt, typename Pred>\r\n[[nodiscard]] UInt uint_partition_point(UInt first, const UInt last, Pred pred) {\r\n    // Find the beginning of the false partition in [first, last).\r\n    // [first, last) is partitioned when all of the true values occur before all of the false values.\r\n\r\n    static_assert(is_unsigned_v<UInt>);\r\n    assert(first <= last);\r\n\r\n    for (UInt n = last - first; n > 0;) {\r\n        const UInt n2  = n / 2;\r\n        const UInt mid = first + n2;\r\n\r\n        if (pred(mid)) {\r\n            first = mid + 1;\r\n            n     = n - n2 - 1;\r\n        } else {\r\n            n = n2;\r\n        }\r\n    }\r\n\r\n    return first;\r\n}\r\n\r\ntemplate <typename Floating>\r\n[[nodiscard]] int scientific_exponent_X(const int P, const Floating flt) {\r\n    char buf[400]; // more than enough\r\n\r\n    // C11 7.21.6.1 \"The fprintf function\"/8 performs trial formatting with scientific precision P - 1.\r\n    const auto to_result = to_chars(buf, end(buf), flt, chars_format::scientific, P - 1);\r\n    assert(to_result.ec == errc{});\r\n\r\n    const char* exp_ptr = find(buf, to_result.ptr, 'e');\r\n    assert(exp_ptr != to_result.ptr);\r\n\r\n    ++exp_ptr; // advance past 'e'\r\n\r\n    if (*exp_ptr == '+') {\r\n        ++exp_ptr; // advance past '+' which from_chars() won't parse\r\n    }\r\n\r\n    int X;\r\n    const auto from_result = from_chars(exp_ptr, to_result.ptr, X);\r\n    assert(from_result.ec == errc{});\r\n    return X;\r\n}\r\n\r\ntemplate <typename UInt>\r\nvoid print_table(const vector<UInt>& v, const char* const name) {\r\n    constexpr const char* UIntName = is_same_v<UInt, uint32_t> ? \"uint32_t\" : \"uint64_t\";\r\n\r\n    printf(\"static const %s %s[%zu] = {\\n\", UIntName, name, v.size());\r\n\r\n    for (const auto& val : v) {\r\n        if constexpr (is_same_v<UInt, uint32_t>) {\r\n            printf(\"0x%08Xu,\\n\", val);\r\n        } else {\r\n            printf(\"0x%016llXu,\\n\", val);\r\n        }\r\n    }\r\n\r\n    printf(\"};\\n\");\r\n}\r\n\r\nenum class Mode { Tables, Tests };\r\n\r\ntemplate <typename Floating>\r\nvoid generate_tables(const Mode mode) {\r\n    using Limits = numeric_limits<Floating>;\r\n    using UInt   = conditional_t<is_same_v<Floating, float>, uint32_t, uint64_t>;\r\n\r\n    map<int, map<int, UInt>> P_X_LargestValWithX;\r\n\r\n    constexpr int MaxP = Limits::max_exponent10 + 1; // MaxP performs no rounding during trial formatting\r\n\r\n    for (int P = 1; P <= MaxP; ++P) {\r\n        for (int X = -5; X < P; ++X) {\r\n            constexpr Floating first = static_cast<Floating>(9e-5); // well below 9.5e-5, otherwise arbitrary\r\n            constexpr Floating last  = Limits::infinity(); // one bit above Limits::max()\r\n\r\n            const UInt val_beyond_X = uint_partition_point(reinterpret_cast<const UInt&>(first),\r\n                reinterpret_cast<const UInt&>(last),\r\n                [P, X](const UInt u) { return scientific_exponent_X(P, reinterpret_cast<const Floating&>(u)) <= X; });\r\n\r\n            P_X_LargestValWithX[P][X] = val_beyond_X - 1;\r\n        }\r\n    }\r\n\r\n    constexpr const char* FloatingName = is_same_v<Floating, float> ? \"float\" : \"double\";\r\n\r\n    constexpr int MaxSpecialP = is_same_v<Floating, float> ? 7 : 15; // MaxSpecialP is affected by exponent adjustment\r\n\r\n    if (mode == Mode::Tables) {\r\n        printf(\"template <>\\n\");\r\n        printf(\"struct _General_precision_tables_2<%s> {\\n\", FloatingName);\r\n\r\n        printf(\"static constexpr int _Max_special_P = %d;\\n\", MaxSpecialP);\r\n\r\n        vector<UInt> special;\r\n\r\n        for (int P = 1; P <= MaxSpecialP; ++P) {\r\n            for (int X = -5; X < P; ++X) {\r\n                const UInt val = P_X_LargestValWithX[P][X];\r\n                special.push_back(val);\r\n            }\r\n        }\r\n\r\n        print_table(special, \"_Special_X_table\");\r\n\r\n        for (int P = MaxSpecialP + 1; P < MaxP; ++P) {\r\n            for (int X = -5; X < P; ++X) {\r\n                const UInt val = P_X_LargestValWithX[P][X];\r\n                assert(val == P_X_LargestValWithX[MaxP][X]);\r\n            }\r\n        }\r\n\r\n        printf(\"static constexpr int _Max_P = %d;\\n\", MaxP);\r\n\r\n        vector<UInt> ordinary;\r\n\r\n        for (int X = -5; X < MaxP; ++X) {\r\n            const UInt val = P_X_LargestValWithX[MaxP][X];\r\n            ordinary.push_back(val);\r\n        }\r\n\r\n        print_table(ordinary, \"_Ordinary_X_table\");\r\n\r\n        printf(\"};\\n\");\r\n    } else {\r\n        printf(\"==========\\n\");\r\n        printf(\"Test cases for %s:\\n\", FloatingName);\r\n\r\n        constexpr int Hexits         = is_same_v<Floating, float> ? 6 : 13;\r\n        constexpr const char* Suffix = is_same_v<Floating, float> ? \"f\" : \"\";\r\n\r\n        for (int P = 1; P <= MaxP; ++P) {\r\n            for (int X = -5; X < P; ++X) {\r\n                if (P <= MaxSpecialP || P == 25 || P == MaxP || X == P - 1) {\r\n                    const UInt val1   = P_X_LargestValWithX[P][X];\r\n                    const Floating f1 = reinterpret_cast<const Floating&>(val1);\r\n                    const UInt val2   = val1 + 1;\r\n                    const Floating f2 = reinterpret_cast<const Floating&>(val2);\r\n\r\n                    printf(\"{%.*a%s, chars_format::general, %d, \\\"%.*g\\\"},\\n\", Hexits, f1, Suffix, P, P, f1);\r\n                    if (isfinite(f2)) {\r\n                        printf(\"{%.*a%s, chars_format::general, %d, \\\"%.*g\\\"},\\n\", Hexits, f2, Suffix, P, P, f2);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nint main() {\r\n    printf(\"template <class _Floating>\\n\");\r\n    printf(\"struct _General_precision_tables_2;\\n\");\r\n    generate_tables<float>(Mode::Tables);\r\n    generate_tables<double>(Mode::Tables);\r\n    generate_tables<float>(Mode::Tests);\r\n    generate_tables<double>(Mode::Tests);\r\n}\r\n"
  },
  {
    "path": "tools/scripts/check_libcxx_paths.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This script checks tests/libcxx/expected_results.txt for nonexistent test paths.\r\n\r\nfrom pathlib import Path\r\nimport re\r\nimport sys\r\n\r\nif __name__ == \"__main__\":\r\n    if len(sys.argv) != 1:\r\n        sys.exit(f\"Usage: python {sys.argv[0]}\")\r\n\r\n    # Use the location of this script to find the base of the repo.\r\n    absolute_repo_path = Path(sys.argv[0]).absolute().parents[2]\r\n    expected_results_txt = \"tests/libcxx/expected_results.txt\"\r\n\r\n    # Tests can be mentioned multiple times for different configurations.\r\n    # Build up a unique set before checking for existence.\r\n    with open(absolute_repo_path / expected_results_txt) as file:\r\n        stripped_lines = [line.strip() for line in file]\r\n\r\n    filtered_lines = [s for s in stripped_lines if s and not s.startswith(\"#\")] # Ignore empty lines and comments.\r\n\r\n    damaged_lines = set()\r\n    unknown_results = set()\r\n    unique_tests = set()\r\n\r\n    syntax_rgx = re.compile(r\"(?P<test>[^: ]+)(?P<config>:\\d+)? (?P<result>\\w+)\")\r\n    for line in filtered_lines:\r\n        m = syntax_rgx.fullmatch(line)\r\n        if m is None:\r\n            damaged_lines.add(line)\r\n        else:\r\n            result = m.group(\"result\")\r\n            if result == \"FAIL\" or result == \"SKIPPED\":\r\n                unique_tests.add(m.group(\"test\"))\r\n            else:\r\n                unknown_results.add(line)\r\n\r\n    # Build up a list of nonexistent tests so they can be printed in sorted order.\r\n    absolute_libcxx_test = absolute_repo_path / \"llvm-project/libcxx/test\"\r\n    nonexistent_tests = [s for s in unique_tests if not (absolute_libcxx_test / s).is_file()]\r\n\r\n    failed = False\r\n\r\n    if damaged_lines:\r\n        failed = True\r\n        print(f\"Failure: {expected_results_txt} contains {len(damaged_lines)} damaged lines:\", file=sys.stderr)\r\n        print(f\"(Double-check their syntax. Did you forget the result code at the end?)\", file=sys.stderr)\r\n        for s in sorted(damaged_lines):\r\n            print(f\"{s}\", file=sys.stderr)\r\n\r\n    if unknown_results:\r\n        failed = True\r\n        print(f\"Failure: {expected_results_txt} contains {len(unknown_results)} unknown results:\", file=sys.stderr)\r\n        print(f\"(Only FAIL and SKIPPED are known.)\", file=sys.stderr)\r\n        for s in sorted(unknown_results):\r\n            print(f\"{s}\", file=sys.stderr)\r\n\r\n    if nonexistent_tests:\r\n        failed = True\r\n        print(f\"Failure: {expected_results_txt} contains {len(nonexistent_tests)} nonexistent tests:\", file=sys.stderr)\r\n        for s in sorted(nonexistent_tests):\r\n            print(f\"{s}\", file=sys.stderr)\r\n\r\n    if failed:\r\n        print(f\"##vso[task.logissue type=error]{expected_results_txt} failed validation, see log.\", file=sys.stderr)\r\n        sys.exit(1)\r\n"
  },
  {
    "path": "tools/scripts/check_test_lst_paths.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This script checks tests/std/test.lst (and tr1) for duplicate, missing, nonexistent, and unsorted test paths.\r\n\r\nfrom pathlib import Path\r\nimport sys\r\n\r\ndef is_nonempty_dir(p: Path) -> bool:\r\n    return p.is_dir() and any(p.iterdir())\r\n\r\nif __name__ == \"__main__\":\r\n    if len(sys.argv) != 2:\r\n        sys.exit(f\"Usage: python {sys.argv[0]} tests/std-OR-tr1\")\r\n\r\n    absolute_base = Path(sys.argv[1]).absolute()\r\n    absolute_tests = absolute_base / \"tests\"\r\n    absolute_test_lst = absolute_base / \"test.lst\"\r\n    relative_test_lst = absolute_test_lst.relative_to(absolute_test_lst.parents[2])\r\n\r\n    with open(absolute_test_lst) as file:\r\n        stripped_lines = [line.strip() for line in file]\r\n\r\n    filtered_lines = [s for s in stripped_lines if s and not s.startswith(\"#\")] # Ignore empty lines and comments.\r\n\r\n    unique_tests = set()\r\n    duplicate_tests = set()\r\n    for line in filtered_lines:\r\n        if line in unique_tests:\r\n            duplicate_tests.add(line) # Repeatedly duplicated tests will be reported only once.\r\n        else:\r\n            unique_tests.add(line)\r\n\r\n    existing_tests = {fR\"tests\\{p.name}\" for p in absolute_tests.iterdir() if is_nonempty_dir(p)}\r\n\r\n    commented_tests = { # These tests are commented out. Avoid reporting them as missing.\r\n        R\"tests\\GH_000639_nvcc_include_all\",\r\n        R\"tests\\GH_002094_cpp_core_guidelines\",\r\n    }\r\n\r\n    missing_tests = existing_tests - commented_tests - unique_tests\r\n\r\n    nonexistent_tests = [s for s in unique_tests if not is_nonempty_dir(absolute_base / s)]\r\n\r\n    failed = False\r\n\r\n    if duplicate_tests:\r\n        failed = True\r\n        print(f\"Failure: {relative_test_lst} contains {len(duplicate_tests)} duplicate tests:\", file=sys.stderr)\r\n        for s in sorted(duplicate_tests):\r\n            print(f\"{s}\", file=sys.stderr)\r\n\r\n    if missing_tests:\r\n        failed = True\r\n        print(f\"Failure: {relative_test_lst} is missing {len(missing_tests)} tests:\", file=sys.stderr)\r\n        for s in sorted(missing_tests):\r\n            print(f\"{s}\", file=sys.stderr)\r\n\r\n    if nonexistent_tests:\r\n        failed = True\r\n        print(f\"Failure: {relative_test_lst} contains {len(nonexistent_tests)} nonexistent tests:\", file=sys.stderr)\r\n        for s in sorted(nonexistent_tests):\r\n            print(f\"{s}\", file=sys.stderr)\r\n\r\n    for i in range(len(filtered_lines) - 1): # If filtered_lines is empty, range(-1) is empty.\r\n        if filtered_lines[i] > filtered_lines[i + 1]: # Use greater-than to avoid reporting adjacent duplicates.\r\n            failed = True\r\n            print(f\"Failure: {relative_test_lst} isn't sorted, starting with:\", file=sys.stderr)\r\n            print(f\"{filtered_lines[i + 1]}\", file=sys.stderr)\r\n            break # Report only the first unsorted line.\r\n\r\n    if failed:\r\n        print(f\"##vso[task.logissue type=error]{relative_test_lst} failed validation, see log.\", file=sys.stderr)\r\n        sys.exit(1)\r\n"
  },
  {
    "path": "tools/scripts/move_only_function_specializations.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This script generates the partial specializations of _Function_call in <functional>.\r\n\r\ndef specialization(self: str, cv: str, ref: str, ref_inv: str, noex: str, noex_val: str, callable: str) -> str:\r\n    return f\"\"\"template <class _Rx, class... _Types>\r\nclass _Function_call<_Rx(_Types...) {cv} {ref} {noex}> // Generated code - DO NOT EDIT manually!\r\n    : public _Function_base<_Rx, _Types...> {{\r\npublic:\r\n    template <class _Vt>\r\n    using _VtInvQuals = {cv} _Vt {ref_inv};\r\n\r\n    template <class _Vt>\r\n    static constexpr bool _Is_callable_from = {callable};\r\n\r\n    static constexpr bool _Noexcept = {noex_val};\r\n\r\n    _Rx operator()(_Types... _Args) {cv} {ref} {noex} {{\r\n        return this->template _Get_invoke<_Noexcept>()({self}, _STD forward<_Types>(_Args)...);\r\n    }}\r\n}};\r\n\"\"\"\r\n\r\n\r\ndef ref_permutations(self: str, cv: str, noex: str, noex_val: str, trait: str) -> str:\r\n    return specialization(self, cv, \"\", \"&\", noex, noex_val, \\\r\n        f\"{trait}<_Rx, {cv} _Vt, _Types...> && {trait}<_Rx, {cv} _Vt&, _Types...>\") + \"\\n\" \\\r\n        + specialization(self, cv, \"&\", \"&\", noex, noex_val, f\"{trait}<_Rx, {cv} _Vt&, _Types...>\") + \"\\n\" \\\r\n        + specialization(self, cv, \"&&\", \"&&\", noex, noex_val, f\"{trait}<_Rx, {cv} _Vt, _Types...>\")\r\n\r\n\r\ndef cvref_permutations(noex: str, noex_val: str, trait: str) -> str:\r\n    return ref_permutations(\"&this->_Data\", \"\", noex, noex_val, trait) + \"\\n\" \\\r\n        + ref_permutations(\"const_cast<_Function_data*>(&this->_Data)\", \"const\", noex, noex_val, trait)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(cvref_permutations(\"\", \"false\", \"is_invocable_r_v\") + \"\\n\" \\\r\n        + \"#ifdef __cpp_noexcept_function_type\" + \"\\n\" \\\r\n        + cvref_permutations(\"noexcept\", \"true\", \"is_nothrow_invocable_r_v\") \\\r\n        + \"#endif // defined(__cpp_noexcept_function_type)\")\r\n"
  },
  {
    "path": "tools/scripts/print_failures.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This script prints the output of test failures that were recorded by `stl-lit.py -o TEST_LOG_FILENAME`\r\n# or `stl-lit.py --xunit-xml-output=TEST_RESULTS.xml`.\r\n\r\nimport json\r\nimport os\r\nimport sys\r\nimport xml.dom.minidom\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    if len(sys.argv) != 2:\r\n        sys.exit(f\"Usage: python {sys.argv[0]} [TEST_LOG_FILENAME|TEST_RESULTS.xml]\")\r\n    filename = sys.argv[1]\r\n    extension = os.path.splitext(filename)[1]\r\n    with open(filename) as file:\r\n        if extension.casefold() == \".xml\".casefold():\r\n            test_xml = xml.dom.minidom.parse(file)\r\n            for testcase_elem in test_xml.getElementsByTagName(\"testcase\"):\r\n                for failure_elem in testcase_elem.getElementsByTagName(\"failure\"):\r\n                    print(f\"name: {testcase_elem.getAttribute('classname')}\")\r\n                    if failure_elem.firstChild is None:\r\n                        print(\"No output, possibly because this was an XPASS.\")\r\n                    else:\r\n                        print(f\"output: {failure_elem.firstChild.data}\")\r\n                    print(\"==================================================\")\r\n        else:\r\n            test_log = json.load(file)\r\n            for result in test_log[\"tests\"]:\r\n                if not result[\"code\"] in [\"PASS\", \"UNSUPPORTED\", \"XFAIL\"]:\r\n                    print(f\"code: {result['code']}\")\r\n                    # Ignore result[\"elapsed\"].\r\n                    print(f\"name: {result['name']}\")\r\n                    # The JSON contains embedded CRLFs (which aren't affected by opening the file in text mode).\r\n                    # If we don't replace these CRLFs with LFs here, this script will appear to be okay in the console,\r\n                    # but redirecting it to a file will result in ugly double newlines.\r\n                    print(\"output: {}\".format(result[\"output\"].replace(\"\\r\\n\", \"\\n\")))\r\n                    print(\"==================================================\")\r\n"
  },
  {
    "path": "tools/scripts/transform_llvm.sh",
    "content": "#!/bin/bash\r\n\r\n# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# This script is used to regenerate the P0220R1_any, P0220R1_optional, and P0088R3_variant tests.\r\n\r\nSED_SCRIPTS='s/int main\\(int, char\\*\\*\\)/int run_test()/;'\r\nSED_SCRIPTS+='s/FI[X]ME/TODO/g;'\r\nSED_SCRIPTS+='s@// (REQUIRES|UNSUPPORTED|XFAIL):.*$@@;'\r\n\r\nfor f in $(find $* -name '*.pass.cpp' -not -name '*nothing_to_do*');\r\ndo\r\n    echo \"// -- BEGIN: $f\";\r\n    sed -E -e \"$SED_SCRIPTS\" < $f;\r\n    echo -e \"// -- END: $f\\n\";\r\ndone\r\n"
  },
  {
    "path": "tools/unicode_properties_parse/.gitignore",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n# We don't ship the Unicode data source files, but\r\n# they can be downloaded from unicode.org.\r\n# See the documentation in each script for more info.\r\nemoji-data.txt\r\nDerivedCoreProperties.txt\r\nDerivedGeneralCategory.txt\r\nEastAsianWidth.txt\r\nGraphemeBreakProperty.txt\r\nGraphemeBreakTest.txt\r\n"
  },
  {
    "path": "tools/unicode_properties_parse/download_unicode_data_files.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nfrom pathlib import PurePosixPath\r\nimport sys\r\nfrom urllib.error import HTTPError\r\nfrom urllib.request import urlretrieve\r\n\r\n\r\ndef get_base_url():\r\n    if len(sys.argv) != 2:\r\n        sys.exit(f\"Usage: python {sys.argv[0]} [latest|<VERSION LIKE 15.0.0>]\")\r\n\r\n    version = sys.argv[1]\r\n\r\n    if version == \"latest\":\r\n        return \"https://unicode.org/Public/UCD/latest/\"\r\n\r\n    return f\"https://unicode.org/Public/{version}/\"\r\n\r\n\r\nUnicode_data_files = [\r\n    \"ucd/DerivedCoreProperties.txt\",\r\n    \"ucd/extracted/DerivedGeneralCategory.txt\",\r\n    \"ucd/EastAsianWidth.txt\",\r\n    \"ucd/auxiliary/GraphemeBreakProperty.txt\",\r\n    \"ucd/auxiliary/GraphemeBreakTest.txt\",\r\n    \"ucd/emoji/emoji-data.txt\",\r\n]\r\n\r\n\r\ndef download_unicode_data_files():\r\n    base_url = get_base_url()\r\n    print(f\"   Base URL: {base_url}\")\r\n\r\n    for data_file in Unicode_data_files:\r\n        url = base_url + data_file\r\n        filename = PurePosixPath(data_file).name\r\n        print(f\"Downloading: {url}\")\r\n        try:\r\n            urlretrieve(url, filename)\r\n        except HTTPError as http_error:\r\n            sys.exit(f\"{http_error}\")\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    download_unicode_data_files()\r\n"
  },
  {
    "path": "tools/unicode_properties_parse/grapheme_break_test_data_gen.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nfrom pathlib import Path\r\nfrom dataclasses import dataclass, field\r\nfrom typing import Optional, TextIO\r\nfrom array import array\r\n\r\n\r\n@dataclass\r\nclass BreakTestItem:\r\n    breaks: list[int] = field(default_factory=list)\r\n    code_points: list[int] = field(default_factory=list)\r\n\r\n\r\nclass CommentLine:\r\n    pass\r\n\r\n\r\nclass EOF:\r\n    pass\r\n\r\n\r\ndef parse_break_test_line(input: TextIO) -> Optional[BreakTestItem]:\r\n    result = BreakTestItem()\r\n    while True:\r\n        c = input.read(1)\r\n        if c == '\\N{DIVISION SIGN}':\r\n            result.breaks.append(len(result.code_points))\r\n            assert input.read(1).isspace()\r\n            continue\r\n        if c == '\\N{MULTIPLICATION SIGN}':\r\n            assert input.read(1).isspace()\r\n            continue\r\n        if c.isalnum():\r\n            while next := input.read(1):\r\n                if next.isalnum():\r\n                    c += next\r\n                else:\r\n                    assert next.isspace()\r\n                    break\r\n            result.code_points.append(int(c, base=16))\r\n            continue\r\n        if c == '#':\r\n            input.readline()\r\n            return result\r\n        if c == '\\n':\r\n            return result\r\n        if c == '':\r\n            return None\r\n        assert False\r\n\r\n\r\ncpp_template = \"\"\"\r\n{0}\r\n{1}\r\ntemplate <typename T>\r\nstruct test_case_data {{\r\n    vector<T> code_points;\r\n    vector<size_t> breaks;\r\n}};\r\n\r\ntemplate <typename T>\r\nconst test_case_data<T> test_data[{2}];\r\n\r\ntemplate <>\r\nconst test_case_data<char32_t> test_data<char32_t>[{2}] = {{\r\n    {3}\r\n}};\r\n\r\ntemplate <>\r\nconst test_case_data<char> test_data<char>[{2}] = {{\r\n    {4}\r\n}};\r\n\"\"\"\r\n\r\ncpp_test_data_line_template = \"{{ {{{}}}, {{{}}} }}\"\r\n\r\ndef line_to_cpp_data_line_utf32(line: BreakTestItem) -> str:\r\n    return cpp_test_data_line_template.format(','.join(\r\n        [f\"U'\\\\x{x:x}'\" for x in line.code_points]), ','.join(\r\n        [str(x) for x in line.breaks]))\r\n\r\n\r\ndef line_to_cpp_data_line_utf8(line: BreakTestItem) -> str:\r\n    utf8_rep = str(array('L', line.code_points),\r\n                   encoding='utf-32').encode('utf-8')\r\n    return cpp_test_data_line_template.format(','.join(\r\n        [f\"'\\\\x{x:x}'\" for x in utf8_rep]\r\n    ), ','.join([str(x) for x in line.breaks]))\r\n\r\n\r\n\"\"\"\r\nGenerate test data from \"GraphemeBreakTest.txt\"\r\nThis file can be downloaded from: https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakTest.txt\r\nThis script looks for GraphemeBreakTest.txt in same directory as this script\r\n\"\"\"\r\ndef generate_all() -> str:\r\n    test_data_path = Path(__file__).absolute().with_name(\"GraphemeBreakTest.txt\")\r\n    filename = \"\"\r\n    timestamp = \"\"\r\n    lines = list()\r\n    with open(test_data_path, mode='rt', encoding='utf-8') as file:\r\n        filename = file.readline().replace(\"#\", \"//\").rstrip()\r\n        timestamp = file.readline().replace(\"#\", \"//\").rstrip()\r\n        while line := parse_break_test_line(file):\r\n            if len(line.code_points) > 0:\r\n                lines.append(line)\r\n    return cpp_template.format(filename, timestamp, len(lines), ','.join(map(line_to_cpp_data_line_utf32, lines)),\r\n        ','.join(map(line_to_cpp_data_line_utf8, lines)))\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(generate_all())\r\n"
  },
  {
    "path": "tools/unicode_properties_parse/unicode_properties_data_gen.py",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\nfrom io import StringIO\r\nfrom pathlib import Path\r\nfrom dataclasses import dataclass, field\r\nfrom typing import Optional\r\nimport re\r\n\r\n\r\n@dataclass\r\nclass PropertyRange:\r\n    lower: int = -1\r\n    upper: int = -1\r\n    prop: str = None\r\n\r\n\r\n@dataclass\r\nclass PropertyTable:\r\n    lower_bounds: list[int] = field(default_factory=list)\r\n    props_and_range: list[int] = field(default_factory=list)\r\n\r\n\r\nLINE_REGEX = re.compile(\r\n    r\"^(?P<lower>[0-9A-F]{4,5})(?:\\.\\.(?P<upper>[0-9A-F]{4,5}))?\\s*;\\s*(?P<prop>\\w+)\")\r\n\r\nINCB_LINE_REGEX = re.compile(\r\n    r\"^(?P<lower>[0-9A-F]{4,5})(?:\\.\\.(?P<upper>[0-9A-F]{4,5}))?\\s*;\\s*InCB;\\s*(?P<prop>\\w+)\")\r\n\r\ndef parse_property_line(inputLine: str, line_regex: re.Pattern[str]) -> Optional[PropertyRange]:\r\n    result = PropertyRange()\r\n    if m := line_regex.match(inputLine):\r\n        lower_str, upper_str, result.prop = m.group(\"lower\", \"upper\", \"prop\")\r\n        result.lower = int(lower_str, base=16)\r\n        result.upper = result.lower\r\n        if upper_str is not None:\r\n            result.upper = int(upper_str, base=16)\r\n        return result\r\n    else:\r\n        return None\r\n\r\n\r\ndef compact_property_ranges(input: list[PropertyRange]) -> list[PropertyRange]:\r\n    \"\"\"\r\n    Merges consecutive ranges with the same property to one range.\r\n\r\n    Merging the ranges results in fewer ranges in the output table,\r\n    reducing binary size and improving lookup performance.\r\n    \"\"\"\r\n    result = list()\r\n    for x in input:\r\n        if (\r\n            len(result)\r\n            and result[-1].prop == x.prop\r\n            and result[-1].upper + 1 == x.lower\r\n        ):\r\n            result[-1].upper = x.upper\r\n            continue\r\n        result.append(x)\r\n    return result\r\n\r\n\r\nPROP_VALUE_ENUMERATOR_TEMPLATE = \"_{}_value\"\r\nPROP_VALUE_ENUM_TEMPLATE = \"\"\"\r\n{filename}\r\n{timestamp}\r\nenum class _{prop_name}_property_values : uint8_t {{\r\n    {enumerators},\r\n    _No_value = 255\r\n}};\r\n\"\"\"\r\n\r\nDATA_ARRAY_TEMPLATE = \"\"\"\r\n{filename}\r\n{timestamp}\r\ninline constexpr _Unicode_property_data<_{prop_name}_property_values, {size}, {is_binary_property}>\r\n    _{prop_name}_property_data{{\r\n    {{{lower_bounds}}},\r\n    {{{props_and_size}}}\r\n}};\r\n\"\"\"\r\n\r\nWIDTH_ESTIMATE_INTERVALS_TEMPLATE = \"\"\"\r\n{filename}\r\n{timestamp}\r\ninline constexpr char32_t _Width_estimate_intervals_v2[] = {{\r\n    {data}\r\n}};\r\n\"\"\"\r\n\r\nMSVC_FORMAT_UCD_TABLES_HPP_TEMPLATE = \"\"\"\r\n// __msvc_format_ucd_tables.hpp internal header\r\n\r\n// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n// WARNING, this entire header is generated by\r\n// tools/unicode_properties_parse/unicode_properties_data_gen.py\r\n// DO NOT MODIFY!\r\n\r\n// UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE\r\n//\r\n// See Terms of Use <https://www.unicode.org/copyright.html>\r\n// for definitions of Unicode Inc.'s Data Files and Software.\r\n//\r\n// NOTICE TO USER: Carefully read the following legal agreement.\r\n// BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S\r\n// DATA FILES (\"DATA FILES\"), AND/OR SOFTWARE (\"SOFTWARE\"),\r\n// YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\r\n// TERMS AND CONDITIONS OF THIS AGREEMENT.\r\n// IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE\r\n// THE DATA FILES OR SOFTWARE.\r\n//\r\n// COPYRIGHT AND PERMISSION NOTICE\r\n//\r\n// Copyright (c) 1991-2022 Unicode, Inc. All rights reserved.\r\n// Distributed under the Terms of Use in https://www.unicode.org/copyright.html.\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining\r\n// a copy of the Unicode data files and any associated documentation\r\n// (the \"Data Files\") or Unicode software and any associated documentation\r\n// (the \"Software\") to deal in the Data Files or Software\r\n// without restriction, including without limitation the rights to use,\r\n// copy, modify, merge, publish, distribute, and/or sell copies of\r\n// the Data Files or Software, and to permit persons to whom the Data Files\r\n// or Software are furnished to do so, provided that either\r\n// (a) this copyright and permission notice appear with all copies\r\n// of the Data Files or Software, or\r\n// (b) this copyright and permission notice appear in associated\r\n// Documentation.\r\n//\r\n// THE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\r\n// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\r\n// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n// NONINFRINGEMENT OF THIRD PARTY RIGHTS.\r\n// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\r\n// NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\r\n// DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\r\n// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\r\n// TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n// PERFORMANCE OF THE DATA FILES OR SOFTWARE.\r\n//\r\n// Except as contained in this notice, the name of a copyright holder\r\n// shall not be used in advertising or otherwise to promote the sale,\r\n// use or other dealings in these Data Files or Software without prior\r\n// written authorization of the copyright holder.\r\n\r\n#ifndef __MSVC_FORMAT_UCD_TABLES_HPP\r\n#define __MSVC_FORMAT_UCD_TABLES_HPP\r\n#include <yvals_core.h>\r\n#if _STL_COMPILER_PREPROCESSOR\r\n\r\n#include <cstdint>\r\n#include <xutility>\r\n\r\n#pragma pack(push, _CRT_PACKING)\r\n#pragma warning(push, _STL_WARNING_LEVEL)\r\n#pragma warning(disable : _STL_DISABLED_WARNINGS)\r\n_STL_DISABLE_CLANG_WARNINGS\r\n#pragma push_macro(\"new\")\r\n#undef new\r\n\r\n_STD_BEGIN\r\n\r\ntemplate <class _ValueEnum, size_t _NumRanges, bool _Is_binary_property>\r\nstruct _Unicode_property_data {{\r\n    uint32_t _Lower_bounds[_NumRanges];\r\n    uint16_t _Props_and_size[_NumRanges];\r\n    _NODISCARD constexpr _ValueEnum _Get_property_for_codepoint(const uint32_t _Code_point) const noexcept {{\r\n        ptrdiff_t _Upper_idx = _STD upper_bound(_Lower_bounds, _STD end(_Lower_bounds), _Code_point) - _Lower_bounds;\r\n        constexpr auto _No_value_constant = static_cast<_ValueEnum>(UINT8_MAX);\r\n        if (_Upper_idx == 0) {{\r\n            return _No_value_constant;\r\n        }}\r\n        --_Upper_idx;\r\n        const uint32_t _Lower_bound = _Lower_bounds[_Upper_idx];\r\n        const uint16_t _Data        = _Props_and_size[_Upper_idx];\r\n        _STL_INTERNAL_CHECK(_Code_point >= _Lower_bound);\r\n        if constexpr (_Is_binary_property) {{\r\n            if (_Code_point < _Lower_bound + _Data) {{\r\n                return static_cast<_ValueEnum>(0);\r\n            }}\r\n        }} else {{\r\n            const uint16_t _Size   = static_cast<uint16_t>(_Data & 0x0FFF);\r\n            const _ValueEnum _Prop = static_cast<_ValueEnum>((_Data & 0xF000) >> 12);\r\n            if (_Code_point < _Lower_bound + _Size) {{\r\n                return _Prop;\r\n            }}\r\n        }}\r\n        return _No_value_constant;\r\n    }}\r\n}};\r\n\r\n// The following static data tables are generated from the Unicode character database.\r\n// _Grapheme_Break_property_data comes from ucd/auxiliary/GraphemeBreakProperty.txt.\r\n//\r\n// _Indic_Conjunct_Break_property_data comes from ucd/DerivedCoreProperties.txt.\r\n//\r\n// _Extended_Pictographic_property_data comes from ucd/emoji/emoji-data.txt.\r\n//\r\n// __printable_property_data comes from ucd/extracted/DerivedGeneralCategory.txt.\r\n//\r\n// _Grapheme_Extend_property_data comes from ucd/DerivedCoreProperties.txt.\r\n//\r\n// The enums containing the values for the properties are also generated, in order to ensure they match\r\n// up correctly with how we're parsing them.\r\n//\r\n// All sets of data tables are generated by tools/unicode_properties_parse/unicode_properties_data_gen.py in the\r\n// https://github.com/microsoft/stl repository.\r\n//\r\n// The data format is a set of arrays for each character property. The first is an array of uint32_t encoding\r\n// the lower bound of each range of codepoints that has the given property.\r\n// The second is an array of uint16_t.\r\n// - For enumerated properties, this array encodes both the range size and property value as follows:\r\n//   16               12                                   0\r\n//   +-----------------------------------------------------+\r\n//   | property_value  |              range_size           |\r\n//   +-----------------------------------------------------+\r\n//   that is: the size is stored in the least significant 12 bits\r\n//   (leading to a max size of 4095), and the property value is stored in the most significant 4 bits,\r\n//   leading to a maximum of 16 property values.\r\n// - For binary properties, this array simply stores the range size.\r\n//\r\n// Codepoint ranges may not overlap, and, within one property, a codepoint may only appear once. Furthermore the\r\n// codepoint lower bounds appear in sorted (ascending) order.\r\n\r\n{content}\r\n_STD_END\r\n\r\n#pragma pop_macro(\"new\")\r\n_STL_RESTORE_CLANG_WARNINGS\r\n#pragma warning(pop)\r\n#pragma pack(pop)\r\n\r\n#endif // _STL_COMPILER_PREPROCESSOR\r\n#endif // __MSVC_FORMAT_UCD_TABLES_HPP\r\n\"\"\"\r\n\r\ndef property_ranges_to_table(ranges: list[PropertyRange], props: list[str], is_binary_property: bool) -> PropertyTable:\r\n    result = PropertyTable()\r\n    for range in sorted(ranges, key=lambda x: x.lower):\r\n        result.lower_bounds.append(range.lower)\r\n        size = (range.upper - range.lower) + 1\r\n        if is_binary_property:\r\n            assert size <= 0xFFFF\r\n            result.props_and_range.append(size)\r\n        else:\r\n            assert size <= 0x0FFF\r\n            prop_idx = props.index(range.prop)\r\n            result.props_and_range.append(size | (prop_idx << 12))\r\n    return result\r\n\r\n\r\ndef generate_cpp_data(filename: str, timestamp: str, prop_name: str, ranges: list[PropertyRange]) -> str:\r\n    result = StringIO()\r\n    prop_values = sorted(set(x.prop for x in ranges))\r\n    is_binary_property = len(prop_values) == 1\r\n    table = property_ranges_to_table(ranges, prop_values, is_binary_property)\r\n    enumerator_values = [PROP_VALUE_ENUMERATOR_TEMPLATE.format(\r\n        x) for x in prop_values]\r\n    result.write(PROP_VALUE_ENUM_TEMPLATE.lstrip().format(\r\n        filename=filename, timestamp=timestamp, prop_name=prop_name, enumerators=\",\".join(enumerator_values)))\r\n    result.write(\"\\n\")\r\n    result.write(DATA_ARRAY_TEMPLATE.lstrip().format(filename=filename, timestamp=timestamp, prop_name=prop_name,\r\n                 size=len(table.lower_bounds),\r\n                 is_binary_property='true' if is_binary_property else 'false',\r\n                 lower_bounds=\",\".join([\"0x\" + format(x, 'x') for x in table.lower_bounds]),\r\n                 props_and_size=\",\".join([\"0x\" + format(x, 'x') for x in table.props_and_range])))\r\n    return result.getvalue()\r\n\r\n\r\ndef read_file(filename: str, line_regex: re.Pattern[str] = LINE_REGEX) -> list[PropertyRange]:\r\n    data_path = Path(__file__).absolute().with_name(filename)\r\n    with data_path.open(encoding='utf-8') as f:\r\n        filename = f.readline().replace(\"#\", \"//\").rstrip()\r\n        timestamp = f.readline().replace(\"#\", \"//\").rstrip()\r\n        ranges = compact_property_ranges([x for line in f if (x := parse_property_line(line, line_regex))])\r\n        return filename, timestamp, ranges\r\n\r\n\r\ndef generate_width_estimate_intervals(filename: str, timestamp: str, width_2_ranges: list[PropertyRange]):\r\n    values = []\r\n\r\n    for width_2_range in width_2_ranges:\r\n        values.append(width_2_range.lower)\r\n        values.append(width_2_range.upper + 1)\r\n\r\n    return WIDTH_ESTIMATE_INTERVALS_TEMPLATE.lstrip().format(\r\n            filename=filename, timestamp=timestamp, data=\",\".join(['0x' + format(x, 'x') for x in values]))\r\n\r\n\r\ndef generate_data_tables() -> str:\r\n    \"\"\"\r\n    Generate Unicode data for inclusion into <format> from\r\n    GraphemeBreakProperty.txt, emoji-data.txt, DerivedGeneralCategory.txt, DerivedCoreProperties.txt,\r\n    and EastAsianWidth.txt.\r\n\r\n    GraphemeBreakProperty.txt can be found at\r\n    https://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakProperty.txt\r\n\r\n    emoji-data.txt can be found at\r\n    https://www.unicode.org/Public/UCD/latest/ucd/emoji/emoji-data.txt\r\n\r\n    DerivedGeneralCategory.txt can be found at\r\n    https://www.unicode.org/Public/UCD/latest/ucd/extracted/DerivedGeneralCategory.txt\r\n\r\n    DerivedCoreProperties.txt can be found at\r\n    https://www.unicode.org/Public/UCD/latest/ucd/DerivedCoreProperties.txt\r\n\r\n    EastAsianWidth.txt can be found at\r\n    https://www.unicode.org/Public/UCD/latest/ucd/EastAsianWidth.txt\r\n\r\n    All files are expected to be in the same directory as this script.\r\n    \"\"\"\r\n    gbp_filename, gbp_timestamp, gbp_ranges = read_file(\"GraphemeBreakProperty.txt\")\r\n    emoji_filename, emoji_timestamp, emoji_ranges = read_file(\"emoji-data.txt\")\r\n    incb_filename, incb_timestamp, incb_ranges = read_file(\"DerivedCoreProperties.txt\", INCB_LINE_REGEX)\r\n    cat_filename, cat_timestamp, cat_ranges = read_file(\"DerivedGeneralCategory.txt\")\r\n    derived_filename, derived_timestamp, derived_ranges = read_file(\"DerivedCoreProperties.txt\")\r\n    eaw_filename, eaw_timestamp, eaw_ranges = read_file(\"EastAsianWidth.txt\")\r\n\r\n    printable_ranges = compact_property_ranges(sorted([\r\n        PropertyRange(x.lower, x.upper, \"Yes\")\r\n        for x in cat_ranges\r\n        if x.prop not in ('Cc', 'Cf', 'Cs', 'Co', 'Cn', 'Zl', 'Zp', 'Zs') or chr(x.lower) == ' '\r\n    ], key=lambda x: x.lower))\r\n\r\n    # N4971 [format.string.std]/13\r\n    std_wide_ranges = [\r\n        range(0x4DC0, 0x4DFF),\r\n        range(0x1F300, 0x1F5FF),\r\n        range(0x1F900, 0x1F9FF),\r\n    ]\r\n\r\n    def has_width_2(prop_range):\r\n        if prop_range.prop in (\"F\", \"W\"):\r\n            return True\r\n\r\n        for std_wide_range in std_wide_ranges:\r\n            if prop_range.lower in std_wide_range:\r\n                assert prop_range.upper <= std_wide_range.stop\r\n\r\n                return True\r\n            else:\r\n                assert prop_range.upper not in std_wide_range\r\n\r\n        return False\r\n\r\n    width_2_ranges = compact_property_ranges(sorted([\r\n        PropertyRange(x.lower, x.upper, \"Yes\") for x in eaw_ranges if has_width_2(x)\r\n    ], key=lambda x: x.lower))\r\n\r\n    gpb_cpp_data = generate_cpp_data(gbp_filename, gbp_timestamp, \"Grapheme_Break\", gbp_ranges)\r\n    emoji_cpp_data = generate_cpp_data(emoji_filename, emoji_timestamp, \"Extended_Pictographic\", [\r\n        x for x in emoji_ranges if x.prop == \"Extended_Pictographic\"])\r\n    incb_cpp_data = generate_cpp_data(incb_filename, incb_timestamp, \"Indic_Conjunct_Break\", incb_ranges)\r\n    # _printable follows a different naming scheme, to indicate that it is a fake Unicode property.\r\n    printable_cpp_data = generate_cpp_data(cat_filename, cat_timestamp, \"_printable\", printable_ranges)\r\n    grapheme_extend_cpp_data = generate_cpp_data(derived_filename, derived_timestamp, \"Grapheme_Extend\", [\r\n        x for x in derived_ranges if x.prop == \"Grapheme_Extend\"])\r\n    width_estimate_intervals = generate_width_estimate_intervals(eaw_filename, eaw_timestamp, width_2_ranges)\r\n\r\n    return \"\\n\".join([\r\n        gpb_cpp_data,\r\n        incb_cpp_data,\r\n        emoji_cpp_data,\r\n        printable_cpp_data,\r\n        grapheme_extend_cpp_data,\r\n        width_estimate_intervals\r\n    ])\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(MSVC_FORMAT_UCD_TABLES_HPP_TEMPLATE.lstrip().format(content=generate_data_tables()))\r\n"
  },
  {
    "path": "tools/validate/CMakeLists.txt",
    "content": "# Copyright (c) Microsoft Corporation.\r\n# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\ncmake_minimum_required(VERSION 4.2.3)\r\nproject(msvc_standard_libraries_validate LANGUAGES CXX)\r\n\r\nadd_executable(validate-binary validate.cpp)\r\ntarget_compile_options(validate-binary PRIVATE /W4 /WX /analyze /Zc:preprocessor)\r\nset_target_properties(validate-binary\r\n    PROPERTIES\r\n        CXX_STANDARD 23\r\n        CXX_EXTENSIONS OFF\r\n        CXX_STANDARD_REQUIRED ON\r\n        # statically link the standard library\r\n        MSVC_RUNTIME_LIBRARY \"MultiThreaded$<$<CONFIG:Debug>:Debug>\"\r\n)\r\n\r\nadd_custom_target(run-validate\r\n    COMMAND validate-binary\r\n    WORKING_DIRECTORY \"${CMAKE_CURRENT_LIST_DIR}/../..\"\r\n)\r\n"
  },
  {
    "path": "tools/validate/validate.cpp",
    "content": "// Copyright (c) Microsoft Corporation.\r\n// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\r\n\r\n#include <algorithm>\r\n#include <array>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#include <filesystem>\r\n#include <format>\r\n#include <print>\r\n#include <ranges>\r\n#include <string>\r\n#include <string_view>\r\n#include <type_traits>\r\n#include <utility>\r\n#include <vector>\r\nusing namespace std;\r\n\r\nconstexpr size_t max_line_length = 120;\r\n\r\nclass BinaryFile {\r\npublic:\r\n    explicit BinaryFile(const filesystem::path& filepath) {\r\n        const auto err = _wfopen_s(&m_file, filepath.c_str(), L\"rb\");\r\n\r\n        if (err != 0 || !m_file) {\r\n            println(stderr, \"Validation failed: {} couldn't be opened.\", filepath.string());\r\n        }\r\n    }\r\n\r\n    [[nodiscard]] bool read_next_block(vector<unsigned char>& buffer) {\r\n        constexpr size_t BlockSize = 65536;\r\n\r\n        buffer.resize(BlockSize);\r\n\r\n        const size_t bytes_read = fread(buffer.data(), 1, BlockSize, m_file);\r\n\r\n        buffer.resize(bytes_read);\r\n\r\n        return !buffer.empty();\r\n    }\r\n\r\n    ~BinaryFile() {\r\n        if (m_file && fclose(m_file) != 0) {\r\n            println(stderr, \"fclose() failed.\");\r\n            abort();\r\n        }\r\n    }\r\n\r\n    BinaryFile(const BinaryFile&)            = delete;\r\n    BinaryFile& operator=(const BinaryFile&) = delete;\r\n\r\nprivate:\r\n    FILE* m_file{nullptr};\r\n};\r\n\r\nstruct line_and_column {\r\n    size_t line   = 1;\r\n    size_t column = 1;\r\n};\r\n\r\nstruct character_line_column {\r\n    unsigned char ch = '?';\r\n    line_and_column lc;\r\n};\r\n\r\nnamespace std {\r\n    template <>\r\n    struct formatter<line_and_column> {\r\n        constexpr auto parse(format_parse_context& ctx) {\r\n            return ctx.begin();\r\n        }\r\n\r\n        template <class FormatContext>\r\n        auto format(const line_and_column& lc, FormatContext& ctx) const {\r\n            return format_to(ctx.out(), \"{}:{}\", lc.line, lc.column);\r\n        }\r\n    };\r\n\r\n    template <>\r\n    struct formatter<character_line_column> {\r\n        constexpr auto parse(format_parse_context& ctx) {\r\n            return ctx.begin();\r\n        }\r\n\r\n        template <class FormatContext>\r\n        auto format(const character_line_column& clc, FormatContext& ctx) const {\r\n            return format_to(ctx.out(), \"0x{:02X} @ {}\", static_cast<unsigned int>(clc.ch), clc.lc);\r\n        }\r\n    };\r\n} // namespace std\r\n\r\ntemplate <class... Args>\r\nvoid validation_failure(bool& any_errors, const filesystem::path& filepath, const line_and_column& lc,\r\n    format_string<type_identity_t<Args>...> fmt, Args&&... args) {\r\n    any_errors = true;\r\n    print(stderr, \"##vso[task.logissue type=error;sourcepath={};linenumber={};columnnumber={}]Validation failed: \",\r\n        filepath.string(), lc.line, lc.column);\r\n    println(stderr, fmt, forward<Args>(args)...);\r\n}\r\n\r\ntemplate <class... Args>\r\nvoid validation_failure(\r\n    bool& any_errors, const filesystem::path& filepath, format_string<type_identity_t<Args>...> fmt, Args&&... args) {\r\n    validation_failure(any_errors, filepath, {1, 1}, fmt, forward<Args>(args)...);\r\n}\r\n\r\nenum class TabPolicy : bool { Forbidden, Allowed };\r\n\r\nvoid scan_file(\r\n    bool& any_errors, const filesystem::path& filepath, const TabPolicy tab_policy, vector<unsigned char>& buffer) {\r\n    constexpr char CR = '\\r';\r\n    constexpr char LF = '\\n';\r\n\r\n    bool has_cr       = false;\r\n    bool has_lf       = false;\r\n    bool has_crlf     = false;\r\n    bool has_utf8_bom = false;\r\n\r\n    size_t overlength_lines          = 0;\r\n    size_t disallowed_characters     = 0;\r\n    size_t tab_characters            = 0;\r\n    size_t trailing_whitespace_lines = 0;\r\n\r\n    constexpr size_t max_error_lines_per_file = 8;\r\n\r\n    array<line_and_column, max_error_lines_per_file> overlength_locations{};\r\n    array<line_and_column, max_error_lines_per_file> tab_character_locations{};\r\n    array<line_and_column, max_error_lines_per_file> trailing_whitespace_locations{};\r\n    array<character_line_column, max_error_lines_per_file> disallowed_character_locations{};\r\n\r\n    unsigned char prev      = '@';\r\n    unsigned char previous2 = '@';\r\n    unsigned char previous3 = '@';\r\n\r\n    size_t lines   = 0;\r\n    size_t columns = 0;\r\n\r\n    for (BinaryFile binary_file{filepath}; binary_file.read_next_block(buffer);) {\r\n        for (const auto& ch : buffer) {\r\n            if (prev == CR) {\r\n                if (ch == LF) {\r\n                    has_crlf = true;\r\n                } else {\r\n                    has_cr = true;\r\n                }\r\n                ++lines;\r\n            } else {\r\n                if (ch == LF) {\r\n                    has_lf = true;\r\n                    ++lines;\r\n                }\r\n            }\r\n\r\n            if (ch == '\\t') {\r\n                if (tab_characters < max_error_lines_per_file) {\r\n                    tab_character_locations[tab_characters] = {lines + 1, columns + 1};\r\n                }\r\n                ++tab_characters;\r\n            } else if (ch == 0xEF || ch == 0xBB || ch == 0xBF) {\r\n                // 0xEF, 0xBB, and 0xBF are the UTF-8 BOM characters.\r\n                // https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8\r\n                has_utf8_bom = true;\r\n            } else if (ch != CR && ch != LF && !(ch >= 0x20 && ch <= 0x7E)) {\r\n                // [0x20, 0x7E] are the printable characters, including the space character.\r\n                // https://en.wikipedia.org/wiki/ASCII#Printable_characters\r\n                if (disallowed_characters < max_error_lines_per_file) {\r\n                    disallowed_character_locations[disallowed_characters] = {ch, {lines + 1, columns + 1}};\r\n                }\r\n                ++disallowed_characters;\r\n            }\r\n\r\n            if (ch == CR || ch == LF) {\r\n                if (prev == ' ' || prev == '\\t') {\r\n                    if (trailing_whitespace_lines < max_error_lines_per_file) {\r\n                        trailing_whitespace_locations[trailing_whitespace_lines] = {lines + 1, columns + 1};\r\n                    }\r\n                    ++trailing_whitespace_lines;\r\n                }\r\n\r\n                if (columns > max_line_length) {\r\n                    if (overlength_lines < max_error_lines_per_file) {\r\n                        overlength_locations[overlength_lines] = {lines + 1, columns + 1};\r\n                    }\r\n                    ++overlength_lines;\r\n                }\r\n                columns = 0;\r\n            } else {\r\n                ++columns;\r\n            }\r\n            previous3 = exchange(previous2, exchange(prev, ch));\r\n        }\r\n    }\r\n\r\n    if (prev == CR) { // file ends with CR\r\n        has_cr = true;\r\n        ++lines;\r\n    }\r\n\r\n    if (has_cr) {\r\n        validation_failure(any_errors, filepath, \"file contains CR line endings (possibly damaged CRLF).\");\r\n    } else if (has_lf && has_crlf) {\r\n        validation_failure(any_errors, filepath, \"file contains mixed line endings (both LF and CRLF).\");\r\n    } else if (has_lf) {\r\n        validation_failure(any_errors, filepath, \"file contains LF line endings.\");\r\n\r\n        if (prev != LF) {\r\n            validation_failure(any_errors, filepath, \"file doesn't end with a newline.\");\r\n        } else if (previous2 == LF) {\r\n            validation_failure(any_errors, filepath, \"file ends with multiple newlines.\");\r\n        }\r\n    } else if (has_crlf) {\r\n        if (previous2 != CR || prev != LF) {\r\n            validation_failure(any_errors, filepath, \"file doesn't end with a newline.\");\r\n        } else if (previous3 == LF) {\r\n            validation_failure(any_errors, filepath, \"file ends with multiple newlines.\");\r\n        }\r\n    } else {\r\n        validation_failure(any_errors, filepath, \"file doesn't contain any newlines.\");\r\n    }\r\n\r\n    if (has_utf8_bom) {\r\n        validation_failure(any_errors, filepath, \"file contains UTF-8 BOM characters.\");\r\n    }\r\n\r\n    if (tab_policy == TabPolicy::Forbidden && tab_characters != 0) {\r\n        validation_failure(any_errors, filepath, tab_character_locations[0],\r\n            \"file contains {} tab characters. Lines and columns (up to {}): {}.\", tab_characters,\r\n            max_error_lines_per_file, tab_character_locations | views::take(tab_characters));\r\n    }\r\n\r\n    if (trailing_whitespace_lines != 0) {\r\n        validation_failure(any_errors, filepath, trailing_whitespace_locations[0],\r\n            \"file contains {} lines with trailing whitespace. Lines and columns (up to {}): {}.\",\r\n            trailing_whitespace_lines, max_error_lines_per_file,\r\n            trailing_whitespace_locations | views::take(trailing_whitespace_lines));\r\n    }\r\n\r\n    if (overlength_lines != 0) {\r\n        static constexpr array checked_extensions{\r\n            // line length should be capped in files with these extensions:\r\n            L\"\"sv,\r\n            L\".cmd\"sv,\r\n            L\".cpp\"sv,\r\n            L\".h\"sv,\r\n            L\".hpp\"sv,\r\n            L\".md\"sv,\r\n            L\".ps1\"sv,\r\n            L\".py\"sv,\r\n            L\".yml\"sv,\r\n        };\r\n        static_assert(ranges::is_sorted(checked_extensions));\r\n\r\n        if (ranges::binary_search(checked_extensions, filepath.extension().wstring())) {\r\n            validation_failure(any_errors, filepath, overlength_locations[0],\r\n                \"file contains {} lines with more than {} columns. Lines and columns (up to {}): {}.\", overlength_lines,\r\n                max_line_length, max_error_lines_per_file, overlength_locations | views::take(overlength_lines));\r\n        }\r\n    }\r\n\r\n    if (disallowed_characters != 0) {\r\n        validation_failure(any_errors, filepath, disallowed_character_locations[0].lc,\r\n            \"file contains {} disallowed characters. Locations (up to {}): {}.\", disallowed_characters,\r\n            max_error_lines_per_file, disallowed_character_locations | views::take(disallowed_characters));\r\n    }\r\n}\r\n\r\nint main() {\r\n    static constexpr array skipped_directories{\r\n        L\".git\"sv,\r\n        L\".vs\"sv,\r\n        L\".vscode\"sv,\r\n        L\"__pycache__\"sv,\r\n        L\"boost-math\"sv,\r\n        L\"build\"sv,\r\n        L\"google-benchmark\"sv,\r\n        L\"llvm-project\"sv,\r\n        L\"out\"sv,\r\n    };\r\n\r\n    static constexpr array skipped_extensions{\r\n        L\".dll\"sv,\r\n        L\".exe\"sv,\r\n        L\".obj\"sv,\r\n    };\r\n\r\n    // CODE_OF_CONDUCT.md and SECURITY.md are copied exactly from https://github.com/microsoft/repo-templates\r\n    static constexpr array skipped_relative_paths{\r\n        LR\"(.\\CODE_OF_CONDUCT.md)\"sv,\r\n        LR\"(.\\SECURITY.md)\"sv,\r\n    };\r\n\r\n    // make sure someone doesn't accidentally include a diff in the tree\r\n    static constexpr array bad_extensions{\r\n        L\".diff\"sv,\r\n        L\".patch\"sv,\r\n    };\r\n\r\n    static constexpr array tabby_filenames{\r\n        L\".gitmodules\"sv,\r\n    };\r\n\r\n    static constexpr array tabby_extensions{\r\n        L\".lst\"sv,\r\n    };\r\n\r\n    static_assert(ranges::is_sorted(skipped_directories));\r\n    static_assert(ranges::is_sorted(skipped_extensions));\r\n    static_assert(ranges::is_sorted(skipped_relative_paths));\r\n    static_assert(ranges::is_sorted(bad_extensions));\r\n    static_assert(ranges::is_sorted(tabby_filenames));\r\n    static_assert(ranges::is_sorted(tabby_extensions));\r\n\r\n    vector<unsigned char> buffer; // reused for performance\r\n    bool any_errors = false;\r\n\r\n    for (filesystem::recursive_directory_iterator rdi{\".\"}, last; rdi != last; ++rdi) {\r\n        const filesystem::path& filepath = rdi->path();\r\n\r\n        const wstring filename = filepath.filename().wstring();\r\n\r\n        if (!rdi->is_regular_file()) {\r\n            if (rdi->is_directory()) {\r\n                if (ranges::binary_search(skipped_directories, filename)) {\r\n                    rdi.disable_recursion_pending();\r\n                }\r\n            }\r\n\r\n            continue;\r\n        }\r\n\r\n        const wstring& relative_path = filepath.native();\r\n\r\n        if (ranges::binary_search(skipped_relative_paths, relative_path)) {\r\n            continue;\r\n        }\r\n\r\n        constexpr size_t maximum_relative_path_length = 120;\r\n        if (relative_path.size() > maximum_relative_path_length) {\r\n            validation_failure(any_errors, filepath, \"filepath is too long ({} characters; the limit is {}).\",\r\n                relative_path.size(), maximum_relative_path_length);\r\n        }\r\n\r\n        if (relative_path.find(L' ') != wstring::npos) {\r\n            validation_failure(any_errors, filepath, \"filepath contains spaces.\");\r\n        }\r\n\r\n        const wstring extension = filepath.extension().wstring();\r\n\r\n        if (ranges::binary_search(skipped_extensions, extension)) {\r\n            continue;\r\n        }\r\n\r\n        if (ranges::binary_search(bad_extensions, extension)) {\r\n            validation_failure(any_errors, filepath, \"file should not be checked in.\");\r\n            continue;\r\n        }\r\n\r\n        const TabPolicy tab_policy{\r\n            ranges::binary_search(tabby_filenames, filename) || ranges::binary_search(tabby_extensions, extension)};\r\n\r\n        scan_file(any_errors, filepath, tab_policy, buffer);\r\n    }\r\n\r\n    if (any_errors) {\r\n        println(\r\n            stderr, \"##vso[task.logissue type=warning]If your build fails here, you need to fix the listed issues.\");\r\n        println(stderr, \"##vso[task.complete result=Failed]DONE\");\r\n    }\r\n}\r\n"
  }
]